diff --git a/.github/actions/build-container/action.yml b/.github/actions/build-container/action.yml
new file mode 100644
index 0000000..19fae13
--- /dev/null
+++ b/.github/actions/build-container/action.yml
@@ -0,0 +1,47 @@
+name: "Build/Push container"
+description: "Build a BCC CI container and push it when not a pull-request."
+
+inputs:
+  os_distro:
+    description: "OS Disctribution. Ex: ubuntu"
+    required: true
+  os_version:
+    description: "Version of the OS. Ex: 20.04"
+    required: true
+  os_nick:
+    description: "Nickname of the OS. Ex: focal"
+    required: true
+  registry:
+    description: "Registry where to push images"
+    default: ghcr.io
+  password:
+    description: "Password used to log into the docker registry."
+  push:
+    description: "Whether or not to push the build image"
+    type: boolean
+    default: false
+
+runs:
+  using: "composite"
+  steps:
+    # Login against registry except on PR
+    # https://github.com/docker/login-action
+    - name: Log into registry ${{ inputs.registry }}
+      if: ${{ inputs.push == 'true' && github.event_name != 'pull_request' }}
+
+      uses: docker/login-action@v2
+      with:
+        registry: ${{ inputs.registry }}
+        username: ${{ github.actor }}
+        password: ${{ inputs.password }}
+
+    - name: Build and push
+      uses: docker/build-push-action@v3
+      with:
+        push: ${{ inputs.push == 'true' && github.event_name != 'pull_request' }}
+        build-args: |
+          VERSION=${{ inputs.os_version }}
+          SHORTNAME=${{ inputs.os_nick }}
+        file: docker/build/Dockerfile.${{ inputs.os_distro }}
+        tags: ${{ inputs.registry }}/${{ github.repository }}:${{ inputs.os_distro }}-${{ inputs.os_version }}
+
diff --git a/.github/workflows/bcc-test.yml b/.github/workflows/bcc-test.yml
index 43d1582..0707410 100644
--- a/.github/workflows/bcc-test.yml
+++ b/.github/workflows/bcc-test.yml
@@ -6,12 +6,22 @@
       - master
   pull_request:
 
+env:
+  # Use docker.io for Docker Hub if empty
+  REGISTRY: ghcr.io
+  # github.repository as <account>/<repo>
+  IMAGE_NAME: ${{ github.repository }}
+
+permissions:
+  contents: read # to fetch code (actions/checkout)
+  pull-requests: read # to read pull requests (dorny/paths-filter)
+
 jobs:
   test_bcc:
     runs-on: ubuntu-20.04
     strategy:
       matrix:
-        os: [{version: "18.04", nick: bionic}, {version: "20.04", nick: focal}]
+        os: [{distro: "ubuntu", version: "18.04", nick: bionic}, {distro: "ubuntu", version: "20.04", nick: focal}]
         env:
         - TYPE: Debug
           PYTHON_TEST_LOGFILE: critical.log
@@ -24,16 +34,30 @@
           RW_ENGINE_ENABLED: ON
     steps:
     - uses: actions/checkout@v2
+    - uses: dorny/paths-filter@v2
+      id: changes
+      with:
+        filters: |
+          docker:
+            - 'docker/build/**'
     - name: System info
       run: |
         uname -a
         ip addr
-    - name: Build docker container with all deps
+    - name: Pull docker container
+      if: steps.changes.outputs.docker == 'false'
       run: |
-        docker build \
-        --build-arg UBUNTU_VERSION=${{ matrix.os.version }} \
-        --build-arg UBUNTU_SHORTNAME=${{ matrix.os.nick }} \
-        -t bcc-docker -f docker/Dockerfile.tests .
+        docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.os.distro }}-${{ matrix.os.version }}
+    - name: Build docker container
+      if: steps.changes.outputs.docker == 'true'
+      uses: ./.github/actions/build-container
+      with:
+        os_distro: ${{ matrix.os.distro }}
+        os_version: ${{ matrix.os.version }}
+        os_nick: ${{ matrix.os.nick }}
+    - name: Tag docker container
+      run: |
+        docker tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.os.distro }}-${{ matrix.os.version }} bcc-docker
     - name: Run bcc build
       env: ${{ matrix.env }}
       run: |
@@ -103,6 +127,7 @@
     runs-on: ubuntu-20.04
     strategy:
       matrix:
+        os: [{distro: "fedora", version: "34", nick: "f34"}, {distro: "fedora", version: "36", nick: "f36"}]
         env:
         - TYPE: Debug
           PYTHON_TEST_LOGFILE: critical.log
@@ -110,14 +135,30 @@
           PYTHON_TEST_LOGFILE: critical.log
     steps:
     - uses: actions/checkout@v2
+    - uses: dorny/paths-filter@v2
+      id: changes
+      with:
+        filters: |
+          docker:
+            - 'docker/build/**'
     - name: System info
       run: |
         uname -a
         ip addr
-    - name: Build docker container with all deps
+    - name: Pull docker container
+      if: steps.changes.outputs.docker == 'false'
       run: |
-        docker build \
-        -t bcc-docker -f docker/Dockerfile.fedora .
+        docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.os.distro }}-${{ matrix.os.version }}
+    - name: Build docker container
+      if: steps.changes.outputs.docker == 'true'
+      uses: ./.github/actions/build-container
+      with:
+        os_distro: ${{ matrix.os.distro }}
+        os_version: ${{ matrix.os.version }}
+        os_nick: ${{ matrix.os.nick }}
+    - name: Tag docker container
+      run: |
+        docker tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.os.distro }}-${{ matrix.os.version }} bcc-docker
     - name: Run bcc build
       env: ${{ matrix.env }}
       run: |
diff --git a/.github/workflows/publish-build-containers.yml b/.github/workflows/publish-build-containers.yml
new file mode 100644
index 0000000..3739bc1
--- /dev/null
+++ b/.github/workflows/publish-build-containers.yml
@@ -0,0 +1,44 @@
+name: Publish Build Containers
+
+on:
+  # We want to update this image regularly and when updating master
+  schedule:
+    - cron: '00 18 * * *'
+  push:
+    branches:
+      - master
+  pull_request:
+    paths:
+      - 'docker/build/**'
+
+permissions: {}
+
+jobs:
+
+  publish_ghcr:
+    permissions:
+      contents: read # to fetch code (actions/checkout)
+      packages: write # to push container
+    name: Publish To GitHub Container Registry
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        os: [
+          {distro: "ubuntu", version: "18.04", nick: bionic},
+          {distro: "ubuntu", version: "20.04", nick: focal},
+          {distro: "fedora", version: "34", nick: "f34"},
+          {distro: "fedora", version: "36", nick: "f36"}
+        ]
+
+    steps:
+
+    - uses: actions/checkout@v2
+
+    - name: Build and push
+      uses: ./.github/actions/build-container
+      with:
+        os_distro: ${{ matrix.os.distro }}
+        os_version: ${{ matrix.os.version }}
+        os_nick: ${{ matrix.os.nick }}
+        password: ${{ secrets.GITHUB_TOKEN }}
+        push: true
\ No newline at end of file
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index ca1327e..d9cd48b 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -6,67 +6,10 @@
       - master
   pull_request:
 
+permissions:
+  contents: read # to fetch code (actions/checkout)
+
 jobs:
-  publish_images:
-    # Optionally publish container images, guarded by the GitHub secret
-    # QUAY_PUBLISH.
-    # To set this up, sign up for quay.io (you can connect it to your github)
-    # then create a robot user with write access user called "bcc_buildbot",
-    # and add the secret token for it to GitHub secrets as:
-    #   - QUAY_TOKEN = <token from quay.io>
-    name: Publish to quay.io
-    runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        env:
-        - NAME: bionic-release
-          OS_RELEASE: 18.04
-        - NAME: focal-release
-          OS_RELEASE: 20.04
-    steps:
-
-    - uses: actions/checkout@v1
-
-    - name: Initialize workflow variables
-      id: vars
-      shell: bash
-      run: |
-          if [ -n "${QUAY_TOKEN}" ];then
-            echo "Quay token is set, will push an image"
-            echo ::set-output name=QUAY_PUBLISH::true
-          else
-            echo "Quay token not set, skipping"
-          fi
-
-      env:
-        QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }}
-
-    - name: Authenticate with quay.io docker registry
-      if: >
-        steps.vars.outputs.QUAY_PUBLISH
-      env:
-        QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }}
-      run: ./scripts/docker/auth.sh ${{ github.repository }}
-
-    - name: Package docker image and push to quay.io
-      if: >
-        steps.vars.outputs.QUAY_PUBLISH
-      run: >
-        ./scripts/docker/push.sh
-        ${{ github.repository }}
-        ${{ github.ref }}
-        ${{ github.sha }}
-        ${{ matrix.env['NAME'] }}
-        ${{ matrix.env['OS_RELEASE'] }}
-
-    # Uploads the packages built in docker to the github build as an artifact for convenience
-    - uses: actions/upload-artifact@v1
-      if: >
-        steps.vars.outputs.QUAY_PUBLISH
-      with:
-        name: ${{ matrix.env['NAME'] }}
-        path: output
-
   # Optionally publish container images to custom docker repository,
   # guarded by presence of all required github secrets.
   # GitHub secrets can be configured as follows:
@@ -99,7 +42,7 @@
 
     - name: Build container image and publish to registry
       id: publish-registry
-      uses: elgohr/Publish-Docker-Github-Action@2.8
+      uses: elgohr/Publish-Docker-Github-Action@v5
       if: ${{ steps.vars.outputs.DOCKER_PUBLISH }}
       with:
         name: ${{ secrets.DOCKER_IMAGE }}
diff --git a/.gitignore b/.gitignore
index 18a6f5a..f674488 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,6 @@
 # Output from docker builds
 scripts/docker/output/
 /output/
+
+# UAPI header generated for libbpf package-based builds
+src/cc/compat/linux/bpf.h
diff --git a/Android.bp b/Android.bp
index 9f9b2ef..30cf1f3 100644
--- a/Android.bp
+++ b/Android.bp
@@ -98,6 +98,7 @@
             srcs: [
                 "src/cc/libbpf.c",
                 "src/cc/perf_reader.c",
+                "src/cc/bcc_zip.c",
             ],
             sanitize: {
                 misc_undefined: ["integer"],
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1d7dabe..dfed06e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,45 +1,91 @@
 # Copyright (c) PLUMgrid, Inc.
 # Licensed under the Apache License, Version 2.0 (the "License")
-cmake_minimum_required(VERSION 2.8.7)
+cmake_minimum_required(VERSION 2.8.12)
 
-if (${CMAKE_VERSION} VERSION_EQUAL 3.12.0 OR ${CMAKE_VERSION} VERSION_GREATER 3.12.0)
+if(${CMAKE_VERSION} VERSION_EQUAL 3.12.0 OR ${CMAKE_VERSION} VERSION_GREATER 3.12.0)
   cmake_policy(SET CMP0074 NEW)
 endif()
 
+if(${CMAKE_VERSION} VERSION_EQUAL 3.3.0 OR ${CMAKE_VERSION} VERSION_GREATER 3.3.0)
+  cmake_policy(SET CMP0057 NEW)
+endif()
+
 project(bcc)
 if(NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE Release)
 endif()
 
+if(CMAKE_SANITIZE_TYPE)
+  add_compile_options(-fsanitize=${CMAKE_SANITIZE_TYPE})
+  add_link_options(-fsanitize=${CMAKE_SANITIZE_TYPE})
+endif()
+
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
   set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "path to install" FORCE)
 endif()
 
 enable_testing()
 
-# populate submodules (libbpf)
-if(NOT CMAKE_USE_LIBBPF_PACKAGE)
-   if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/src)
-	execute_process(COMMAND git submodule update --init --recursive
+execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}
+                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                RESULT_VARIABLE CONFIG_RESULT)
+if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0)
+  message(WARNING "Failed to add root source directory to safe.directory")
+endif()
+
+# populate submodule blazesym
+if(NOT NO_BLAZESYM)
+  execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/libbpf-tools/blazesym
+                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                  RESULT_VARIABLE CONFIG_RESULT)
+  if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0)
+    message(WARNING "Failed to add blazesym source directory to safe.directory")
+  endif()
+
+  execute_process(COMMAND git submodule update --init --recursive -- libbpf-tools/blazesym
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                   RESULT_VARIABLE UPDATE_RESULT)
   if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0)
-    message(WARNING "Failed to update submodule libbpf")
+    message(WARNING "Failed to update submodule blazesym")
   endif()
-   else()
-	execute_process(COMMAND git diff --shortstat ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/
-		OUTPUT_VARIABLE DIFF_STATUS)
-	if("${DIFF_STATUS}" STREQUAL "")
-		execute_process(COMMAND git submodule update --init --recursive
+endif()
+
+# populate submodules (libbpf)
+if(NOT CMAKE_USE_LIBBPF_PACKAGE)
+  execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf
+                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                  RESULT_VARIABLE CONFIG_RESULT)
+  if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0)
+    message(WARNING "Failed to add libbpf source directory to safe.directory")
+  endif()
+  execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/libbpf-tools/bpftool
+                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                  RESULT_VARIABLE CONFIG_RESULT)
+  if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0)
+    message(WARNING "Failed to add bpftool source directory to safe.directory")
+  endif()
+
+  if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/src)
+    execute_process(COMMAND git submodule update --init --recursive
                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                     RESULT_VARIABLE UPDATE_RESULT)
-  if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0)
-    message(WARNING "Failed to update submodule libbpf")
+    if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0)
+      message(WARNING "Failed to update submodule libbpf")
+    endif()
+  else()
+    execute_process(COMMAND git diff --shortstat ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/
+                    OUTPUT_VARIABLE DIFF_STATUS)
+    if("${DIFF_STATUS}" STREQUAL "")
+      execute_process(COMMAND git submodule update --init --recursive
+                      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                      RESULT_VARIABLE UPDATE_RESULT)
+      if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0)
+        message(WARNING "Failed to update submodule libbpf")
+      endif()
+    else()
+      message(WARNING "submodule libbpf dirty, so no sync")
+    endif()
   endif()
-	else()
-		message(WARNING "submodule libbpf dirty, so no sync")
-	endif()
-   endif()
 endif()
 
 # It's possible to use other kernel headers with
@@ -68,78 +114,96 @@
 option(ENABLE_MAN "Build man pages" ON)
 option(ENABLE_TESTS "Build tests" ON)
 option(RUN_LUA_TESTS "Run lua tests" ON)
+option(ENABLE_LIBDEBUGINFOD "Use libdebuginfod as a source of debug symbols" ON)
 CMAKE_DEPENDENT_OPTION(ENABLE_CPP_API "Enable C++ API" ON "ENABLE_USDT" OFF)
 
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 
-if (CMAKE_USE_LIBBPF_PACKAGE)
+if(ENABLE_TESTS)
+  find_package(KernelHeaders)
+endif()
+
+if(CMAKE_USE_LIBBPF_PACKAGE)
   find_package(LibBpf)
 endif()
 
 if(NOT PYTHON_ONLY)
-find_package(LLVM REQUIRED CONFIG)
-message(STATUS "Found LLVM: ${LLVM_INCLUDE_DIRS} ${LLVM_PACKAGE_VERSION} (Use LLVM_ROOT envronment variable for another version of LLVM)")
+  find_package(LLVM REQUIRED CONFIG)
+  message(STATUS "Found LLVM: ${LLVM_INCLUDE_DIRS} ${LLVM_PACKAGE_VERSION} (Use LLVM_ROOT envronment variable for another version of LLVM)")
 
-if(ENABLE_CLANG_JIT)
-find_package(BISON)
-find_package(FLEX)
-find_package(LibElf REQUIRED)
-find_package(LibDebuginfod)
-if(CLANG_DIR)
-  set(CMAKE_FIND_ROOT_PATH "${CLANG_DIR}")
-  include_directories("${CLANG_DIR}/include")
-endif()
+  if(ENABLE_CLANG_JIT)
+    find_package(BISON)
+    find_package(FLEX)
+    find_package(LibElf REQUIRED)
+    find_package(LibDebuginfod)
+    find_package(LibLzma)
+    if(CLANG_DIR)
+      set(CMAKE_FIND_ROOT_PATH "${CLANG_DIR}")
+      include_directories("${CLANG_DIR}/include")
+    endif()
 
-# clang is linked as a library, but the library path searching is
-# primitively supported, unlike libLLVM
-set(CLANG_SEARCH "/opt/local/llvm/lib;/usr/lib/llvm-3.7/lib;${LLVM_LIBRARY_DIRS}")
-find_library(libclangAnalysis NAMES clangAnalysis clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangAST NAMES clangAST clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangBasic NAMES clangBasic clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangCodeGen NAMES clangCodeGen clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangDriver NAMES clangDriver clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangEdit NAMES clangEdit clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangFrontend NAMES clangFrontend clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangLex NAMES clangLex clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangParse NAMES clangParse clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangRewrite NAMES clangRewrite clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangSema NAMES clangSema clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangSerialization NAMES clangSerialization clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclangASTMatchers NAMES clangASTMatchers clang-cpp HINTS ${CLANG_SEARCH})
-find_library(libclang-shared libclang-cpp.so HINTS ${CLANG_SEARCH})
-if(libclangBasic STREQUAL "libclangBasic-NOTFOUND")
-  message(FATAL_ERROR "Unable to find clang libraries")
-endif()
-FOREACH(DIR ${LLVM_INCLUDE_DIRS})
-  include_directories("${DIR}/../tools/clang/include")
-ENDFOREACH()
-endif(ENABLE_CLANG_JIT)
+    # clang is linked as a library, but the library path searching is
+    # primitively supported, unlike libLLVM
+    set(CLANG_SEARCH "/opt/local/llvm/lib;/usr/lib/llvm-3.7/lib;${LLVM_LIBRARY_DIRS}")
+    find_library(libclangAnalysis NAMES clangAnalysis clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangAST NAMES clangAST clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangBasic NAMES clangBasic clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangCodeGen NAMES clangCodeGen clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangDriver NAMES clangDriver clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangEdit NAMES clangEdit clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangFrontend NAMES clangFrontend clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangLex NAMES clangLex clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangParse NAMES clangParse clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangRewrite NAMES clangRewrite clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangSema NAMES clangSema clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangSerialization NAMES clangSerialization clang-cpp HINTS ${CLANG_SEARCH})
+    find_library(libclangASTMatchers NAMES clangASTMatchers clang-cpp HINTS ${CLANG_SEARCH})
 
-# Set to a string path if system places kernel lib directory in
-# non-default location.
-if(NOT DEFINED BCC_KERNEL_MODULES_DIR)
-  set(BCC_KERNEL_MODULES_DIR "/lib/modules")
-endif()
+    if(${LLVM_PACKAGE_VERSION} VERSION_EQUAL 15 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 15)
+      find_library(libclangSupport NAMES clangSupport clang-cpp HINTS ${CLANG_SEARCH})
+    endif()
 
-if(NOT DEFINED BCC_PROG_TAG_DIR)
-  set(BCC_PROG_TAG_DIR "/var/tmp/bcc")
-endif()
+    find_library(libclang-shared libclang-cpp.so HINTS ${CLANG_SEARCH})
 
-# As reported in issue #735, GCC 6 has some behavioral problems when
-# dealing with -isystem. Hence, skip the warning optimization
-# altogether on that compiler.
-option(USINGISYSTEM "using -isystem" ON)
-execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
-if (USINGISYSTEM AND GCC_VERSION VERSION_LESS 6.0)
-  # iterate over all available directories in LLVM_INCLUDE_DIRS to
-  # generate a correctly tokenized list of parameters
-  foreach(ONE_LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIRS})
-    set(CXX_ISYSTEM_DIRS "${CXX_ISYSTEM_DIRS} -isystem ${ONE_LLVM_INCLUDE_DIR}")
-  endforeach()
-endif()
+    if(libclangBasic STREQUAL "libclangBasic-NOTFOUND")
+      message(FATAL_ERROR "Unable to find clang libraries")
+    endif()
 
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_STANDARD 14)
+    FOREACH(DIR ${LLVM_INCLUDE_DIRS})
+      include_directories("${DIR}/../tools/clang/include")
+    ENDFOREACH()
+
+  endif(ENABLE_CLANG_JIT)
+
+  # Set to a string path if system places kernel lib directory in
+  # non-default location.
+  if(NOT DEFINED BCC_KERNEL_MODULES_DIR)
+    set(BCC_KERNEL_MODULES_DIR "/lib/modules")
+  endif()
+
+  if(NOT DEFINED BCC_PROG_TAG_DIR)
+    set(BCC_PROG_TAG_DIR "/var/tmp/bcc")
+  endif()
+
+  # As reported in issue #735, GCC 6 has some behavioral problems when
+  # dealing with -isystem. Hence, skip the warning optimization
+  # altogether on that compiler.
+  option(USINGISYSTEM "using -isystem" ON)
+  execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+  if(USINGISYSTEM AND GCC_VERSION VERSION_LESS 6.0)
+    # iterate over all available directories in LLVM_INCLUDE_DIRS to
+    # generate a correctly tokenized list of parameters
+    foreach(ONE_LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIRS})
+      set(CXX_ISYSTEM_DIRS "${CXX_ISYSTEM_DIRS} -isystem ${ONE_LLVM_INCLUDE_DIR}")
+    endforeach()
+  endif()
+
+  set(CMAKE_CXX_STANDARD_REQUIRED ON)
+  if(${LLVM_PACKAGE_VERSION} VERSION_EQUAL 16 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 16)
+    set(CMAKE_CXX_STANDARD 17)
+  else()
+    set(CMAKE_CXX_STANDARD 14)
+  endif()
 
 endif(NOT PYTHON_ONLY)
 
@@ -148,15 +212,29 @@
 
 add_subdirectory(src)
 add_subdirectory(introspection)
+
 if(ENABLE_CLANG_JIT)
-if(ENABLE_EXAMPLES)
-add_subdirectory(examples)
-endif(ENABLE_EXAMPLES)
-if(ENABLE_MAN)
-add_subdirectory(man)
-endif(ENABLE_MAN)
-if(ENABLE_TESTS)
-add_subdirectory(tests)
-endif(ENABLE_TESTS)
-add_subdirectory(tools)
+  if(ENABLE_EXAMPLES)
+    add_subdirectory(examples)
+  endif(ENABLE_EXAMPLES)
+
+  if(ENABLE_MAN)
+    add_subdirectory(man)
+  endif(ENABLE_MAN)
+
+  if(ENABLE_TESTS)
+    add_subdirectory(tests)
+  endif(ENABLE_TESTS)
+
+  add_subdirectory(tools)
 endif(ENABLE_CLANG_JIT)
+
+if(NOT TARGET uninstall)
+  configure_file(
+    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CmakeUninstall.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake"
+    IMMEDIATE @ONLY)
+
+  add_custom_target(uninstall
+    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake)
+endif()
diff --git a/INSTALL.md b/INSTALL.md
index f681ac6..8569436 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -12,6 +12,7 @@
   - [Amazon Linux 1](#amazon-linux-1---binary)
   - [Amazon Linux 2](#amazon-linux-2---binary)
   - [Alpine](#alpine---binary)
+  - [WSL](#wslwindows-subsystem-for-linux---binary)
 * [Source](#source)
   - [libbpf Submodule](#libbpf-submodule)
   - [Debian](#debian---source)
@@ -66,7 +67,14 @@
 
 ## Debian - Binary
 
-`bcc` and its tools are available in the standard Debian main repository, from the source package [bpfcc](https://packages.debian.org/source/sid/bpfcc) under the names `bpfcc-tools`, `python-bpfcc`, `libbpfcc` and `libbpfcc-dev`.
+`bcc` and its tools are available in the standard Debian main repository, from the source package [bpfcc](https://packages.debian.org/source/sid/bpfcc) under the names `bpfcc-tools`, `python3-bpfcc`, `libbpfcc` and `libbpfcc-dev`.
+
+To install:
+
+```bash
+echo deb http://cloudfront.debian.net/debian sid main >> /etc/apt/sources.list
+sudo apt-get install -y bpfcc-tools libbpfcc libbpfcc-dev linux-headers-$(uname -r)
+```
 
 ## Ubuntu - Binary
 
@@ -270,6 +278,44 @@
   alpine:3.12
 ```
 
+## WSL(Windows Subsystem for Linux) - Binary
+
+### Install dependencies
+The compiling depends on the headers and lib of linux kernel module which was not found in wsl distribution packages repo. We have to compile the kernel module manually.
+```bash
+apt-get install flex bison libssl-dev libelf-dev dwarves
+```
+### Install packages
+
+First, you will need to checkout the WSL2 Linux kernel git repository:
+```
+KERNEL_VERSION=$(uname -r | cut -d '-' -f 1)
+git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git -b linux-msft-wsl-$KERNEL_VERSION
+cd WSL2-Linux-Kernel
+```
+
+Then compile and install:
+```
+cp Microsoft/config-wsl .config
+make oldconfig && make prepare
+make scripts
+make modules
+sudo make modules_install
+````
+
+After install the module you will need to change the name of the directory to remove the '+' at the end
+
+````
+mv /lib/modules/$KERNEL_VERSION-microsoft-standard-WSL2+/ /lib/modules/$KERNEL_VERSION-microsoft-standard-WSL2
+````
+
+Then you can install bcc tools package according your distribution.
+
+If you met some problems, try to 
+```
+sudo mount -t debugfs debugfs /sys/kernel/debug
+```
+
 # Source
 
 ## libbpf Submodule
@@ -303,7 +349,7 @@
   dpkg-dev pkg-kde-tools ethtool flex inetutils-ping iperf \
   libbpf-dev libclang-dev libclang-cpp-dev libedit-dev libelf-dev \
   libfl-dev libzip-dev linux-libc-dev llvm-dev libluajit-5.1-dev \
-  luajit python3-netaddr python3-pyroute2 python3-distutils python3
+  luajit python3-netaddr python3-pyroute2 python3-setuptools python3
 ```
 
 #### Install and compile BCC
@@ -322,6 +368,7 @@
 * Clang, built from the same tree as LLVM
 * cmake (>=3.1), gcc (>=4.7), flex, bison
 * LuaJIT, if you want Lua support
+* Optional tools used in some examples: arping, netperf, and iperf
 
 ### Install build dependencies
 ```
@@ -334,19 +381,34 @@
 sudo apt-get update
 
 # For Bionic (18.04 LTS)
-sudo apt-get -y install bison build-essential cmake flex git libedit-dev \
-  libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils
+sudo apt-get -y install zip bison build-essential cmake flex git libedit-dev \
+  libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev libfl-dev python3-setuptools \
+  liblzma-dev arping netperf iperf
 
-# For Eoan (19.10) or Focal (20.04.1 LTS)
-sudo apt install -y bison build-essential cmake flex git libedit-dev \
-  libllvm7 llvm-7-dev libclang-7-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils
+# For Focal (20.04.1 LTS)
+sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
+  libllvm12 llvm-12-dev libclang-12-dev python zlib1g-dev libelf-dev libfl-dev python3-setuptools \
+  liblzma-dev arping netperf iperf
+
+# For Hirsute (21.04) or Impish (21.10)
+sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
+  libllvm11 llvm-11-dev libclang-11-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
+  liblzma-dev arping netperf iperf
+
+# For Jammy (22.04)
+sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
+  libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
+  liblzma-dev libdebuginfod-dev arping netperf iperf
   
-# For Hirsute (21.04)  or Impish (21.10)
-sudo apt install -y bison build-essential cmake flex git libedit-dev   libllvm11 llvm-11-dev libclang-11-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils
+# For Lunar Lobster (23.04)
+sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
+  libllvm15 llvm-15-dev libclang-15-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
+  liblzma-dev libdebuginfod-dev arping netperf iperf libpolly-15-dev
 
 # For other versions
-sudo apt-get -y install bison build-essential cmake flex git libedit-dev \
-  libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev python3-distutils
+sudo apt-get -y install zip bison build-essential cmake flex git libedit-dev \
+  libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev python3-setuptools \
+  liblzma-dev arping netperf iperf
 
 # For Lua support
 sudo apt-get -y install luajit luajit-5.1-dev
@@ -387,7 +449,7 @@
 cd bcc-build/
 
 ## here llvm should always link shared library
-cmake ../bcc -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_LLVM_SHARED=1  
+cmake ../bcc -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_LLVM_SHARED=1
 make -j10
 make install 
 
@@ -501,23 +563,23 @@
 You could compile LLVM from source code
 
 ```
-curl  -LO  http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar.xz
-curl  -LO  http://releases.llvm.org/7.0.1/cfe-7.0.1.src.tar.xz
-tar -xf cfe-7.0.1.src.tar.xz
-tar -xf llvm-7.0.1.src.tar.xz
+curl -LO https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.1/llvm-10.0.1.src.tar.xz
+curl -LO https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.1/clang-10.0.1.src.tar.xz
+tar -xf clang-10.0.1.src.tar.xz
+tar -xf llvm-10.0.1.src.tar.xz
 
 mkdir clang-build
 mkdir llvm-build
 
 cd llvm-build
 cmake3 -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
-  -DCMAKE_BUILD_TYPE=Release ../llvm-7.0.1.src
+  -DCMAKE_BUILD_TYPE=Release ../llvm-10.0.1.src
 make
 sudo make install
 
 cd ../clang-build
 cmake3 -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
-  -DCMAKE_BUILD_TYPE=Release ../cfe-7.0.1.src
+  -DCMAKE_BUILD_TYPE=Release ../clang-10.0.1.src
 make
 sudo make install
 cd ..
@@ -528,8 +590,8 @@
 ```
 yum install -y centos-release-scl
 yum-config-manager --enable rhel-server-rhscl-7-rpms
-yum install -y devtoolset-7 llvm-toolset-7 llvm-toolset-7-llvm-devel llvm-toolset-7-llvm-static llvm-toolset-7-clang-devel
-source scl_source enable devtoolset-7 llvm-toolset-7
+yum install -y devtoolset-7 llvm-toolset-10 llvm-toolset-10-llvm-devel llvm-toolset-10-llvm-static llvm-toolset-10-clang-devel
+source scl_source enable devtoolset-7 llvm-toolset-10
 ```
 
 For permanently enable scl environment, please check https://access.redhat.com/solutions/527703.
diff --git a/METADATA b/METADATA
index 55758ed..86fe3ff 100644
--- a/METADATA
+++ b/METADATA
@@ -1,3 +1,7 @@
+# This project was upgraded with external_updater.
+# Usage: tools/external_updater/updater.sh update bcc
+# For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md
+
 name: "BCC"
 description: "BCC is a toolkit for creating efficient kernel tracing and manipulation programs"
 third_party {
@@ -9,18 +13,11 @@
     type: GIT
     value: "https://github.com/iovisor/bcc.git"
   }
-  version: "a39e181eaf7111f5a5416752a5757891278f17fa"
-  license_note: "would be NOTICE save for:\n"
-  "   examples/networking/dns_matching/dns_matching.c\n"
-  "   examples/tracing/vfsreadlat.c\n"
-  "   snapcraft/snapcraft.yaml\n"
-  "   src/cc/compat/linux/bpf.h\n"
-  "   src/cc/compat/linux/bpf_common.h\n"
-  "   src/cc/compat/linux/virtual_bpf.h\n"
+  version: "b1bd28e785b4231aba99dd02a239102db56564af"
   license_type: RESTRICTED
   last_upgrade_date {
-    year: 2021
-    month: 1
-    day: 14
+    year: 2023
+    month: 10
+    day: 16
   }
 }
diff --git a/README.md b/README.md
index f206722..44b4363 100644
--- a/README.md
+++ b/README.md
@@ -114,6 +114,7 @@
 - tools/[ext4dist](tools/ext4dist.py): Summarize ext4 operation latency distribution as a histogram. [Examples](tools/ext4dist_example.txt).
 - tools/[ext4slower](tools/ext4slower.py): Trace slow ext4 operations. [Examples](tools/ext4slower_example.txt).
 - tools/[filelife](tools/filelife.py): Trace the lifespan of short-lived files. [Examples](tools/filelife_example.txt).
+- tools/[filegone](tools/filegone.py): Trace why file gone (deleted or renamed). [Examples](tools/filegone_example.txt).
 - tools/[fileslower](tools/fileslower.py): Trace slow synchronous file reads and writes. [Examples](tools/fileslower_example.txt).
 - tools/[filetop](tools/filetop.py): File reads and writes by filename and process. Top for files. [Examples](tools/filetop_example.txt).
 - tools/[funccount](tools/funccount.py): Count kernel function calls. [Examples](tools/funccount_example.txt).
@@ -139,8 +140,10 @@
 - tools/[oomkill](tools/oomkill.py): Trace the out-of-memory (OOM) killer. [Examples](tools/oomkill_example.txt).
 - tools/[opensnoop](tools/opensnoop.py): Trace open() syscalls. [Examples](tools/opensnoop_example.txt).
 - tools/[pidpersec](tools/pidpersec.py): Count new processes (via fork). [Examples](tools/pidpersec_example.txt).
+- tools/[ppchcalls](tools/ppchcalls.py): Summarize ppc hcall counts and latencies. [Examples](tools/ppchcalls_example.txt).
 - tools/[profile](tools/profile.py): Profile CPU usage by sampling stack traces at a timed interval. [Examples](tools/profile_example.txt).
 - tools/[readahead](tools/readahead.py): Show performance of read-ahead cache [Examples](tools/readahead_example.txt).
+- tools/[rdmaucma](tools/rdmaucma.py): Trace RDMA Userspace Connection Manager Access events. [Examples](tools/rdmaucma_example.txt).
 - tools/[reset-trace](tools/reset-trace.sh): Reset the state of tracing. Maintenance tool only. [Examples](tools/reset-trace_example.txt).
 - tools/[runqlat](tools/runqlat.py): Run queue (scheduler) latency as a histogram. [Examples](tools/runqlat_example.txt).
 - tools/[runqlen](tools/runqlen.py): Run queue length as a histogram. [Examples](tools/runqlen_example.txt).
diff --git a/SPECS/bcc.spec b/SPECS/bcc.spec
index 1296a6b..e6d438c 100644
--- a/SPECS/bcc.spec
+++ b/SPECS/bcc.spec
@@ -53,12 +53,14 @@
 
 ExclusiveArch: x86_64 ppc64 aarch64 ppc64le
 BuildRequires: bison cmake >= 2.8.7 flex make
-BuildRequires: gcc gcc-c++ python2-devel elfutils-libelf-devel-static
+BuildRequires: gcc gcc-c++ elfutils-libelf-devel-static
 %if %{with libdebuginfod}
 BuildRequires: elfutils-debuginfod-client-devel
 %endif
 %if %{with python3}
 BuildRequires: python3-devel
+%else
+BuildRequires: python2-devel
 %endif
 %if %{with_lua}
 BuildRequires: luajit luajit-devel
diff --git a/cmake/CmakeUninstall.cmake.in b/cmake/CmakeUninstall.cmake.in
new file mode 100644
index 0000000..a33a49c
--- /dev/null
+++ b/cmake/CmakeUninstall.cmake.in
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2022 Rong Tao
+#
+function(UninstallManifest manifest)
+if(NOT EXISTS "${manifest}")
+  message(FATAL_ERROR "Cannot find install manifest: ${manifest}")
+endif()
+
+file(READ "${manifest}" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+foreach(file ${files})
+  message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
+  if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    exec_program(
+      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+      OUTPUT_VARIABLE rm_out
+      RETURN_VALUE rm_retval
+      )
+    if(NOT "${rm_retval}" STREQUAL 0)
+      message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
+    endif()
+  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+  endif()
+endforeach()
+endfunction()
+
+UninstallManifest("@CMAKE_BINARY_DIR@/install_manifest.txt")
+UninstallManifest("@CMAKE_BINARY_DIR@/install_manifest_python_bcc.txt")
diff --git a/cmake/FindKernelHeaders.cmake b/cmake/FindKernelHeaders.cmake
new file mode 100644
index 0000000..393aa0f
--- /dev/null
+++ b/cmake/FindKernelHeaders.cmake
@@ -0,0 +1,35 @@
+# Find the kernel headers for the running kernel release
+# This is used to find a "linux/version.h" matching the running kernel.
+
+execute_process(
+        COMMAND uname -r
+        OUTPUT_VARIABLE KERNEL_RELEASE
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+# Find the headers
+find_path(KERNELHEADERS_DIR
+        include/linux/user.h
+        PATHS
+        # RedHat derivatives
+        /usr/src/kernels/${KERNEL_RELEASE}
+        # Debian derivatives
+        /usr/src/linux-headers-${KERNEL_RELEASE}
+        )
+
+message(STATUS "Kernel release: ${KERNEL_RELEASE}")
+message(STATUS "Kernel headers: ${KERNELHEADERS_DIR}")
+
+if (KERNELHEADERS_DIR)
+    set(KERNELHEADERS_INCLUDE_DIRS
+            ${KERNELHEADERS_DIR}/include/generated/uapi
+            CACHE PATH "Kernel headers include dirs"
+            )
+    set(KERNELHEADERS_FOUND 1 CACHE STRING "Set to 1 if kernel headers were found")
+    include_directories(${KERNELHEADERS_INCLUDE_DIRS})
+else (KERNELHEADERS_DIR)
+    set(KERNELHEADERS_FOUND 0 CACHE STRING "Set to 1 if kernel headers were found")
+endif (KERNELHEADERS_DIR)
+
+mark_as_advanced(KERNELHEADERS_FOUND)
+
diff --git a/cmake/FindLibDebuginfod.cmake b/cmake/FindLibDebuginfod.cmake
index df79ce9..066f21f 100644
--- a/cmake/FindLibDebuginfod.cmake
+++ b/cmake/FindLibDebuginfod.cmake
@@ -48,8 +48,8 @@
   LIBDEBUGINFOD_LIBRARIES
   LIBDEBUGINFOD_INCLUDE_DIRS)
 
-if (LIBDEBUGINFOD_FOUND)
+if (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD)
   add_definitions(-DHAVE_LIBDEBUGINFOD)
-endif (LIBDEBUGINFOD_FOUND)
+endif (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD)
 
 mark_as_advanced(LIBDEBUGINFOD_INCLUDE_DIRS LIBDEBUGINFOD_LIBRARIES)
diff --git a/cmake/FindLibLzma.cmake b/cmake/FindLibLzma.cmake
new file mode 100644
index 0000000..644d78b
--- /dev/null
+++ b/cmake/FindLibLzma.cmake
@@ -0,0 +1,45 @@
+# - Try to find liblzma
+# Once done this will define
+#
+#  LIBLZMA_FOUND - system has liblzma
+#  LIBLZMA_INCLUDE_DIRS - the liblzma include directory
+#  LIBLZMA_LIBRARIES - Link these to use liblzma
+
+if (LIBLZMA_LIBRARIES AND LIBLZMA_INCLUDE_DIRS)
+    set (LibLzma_FIND_QUIETLY TRUE)
+endif (LIBLZMA_LIBRARIES AND LIBLZMA_INCLUDE_DIRS)
+
+find_path (LIBLZMA_INCLUDE_DIRS
+  NAMES
+    lzma.h
+  PATHS
+    /usr/include
+    /usr/local/include
+    /opt/local/include
+    /sw/include
+    ENV CPATH)
+
+find_library (LIBLZMA_LIBRARIES
+  NAMES
+    lzma
+  PATHS
+    /usr/lib
+    /usr/local/lib
+    /opt/local/lib
+    /sw/lib
+    ENV LIBRARY_PATH
+    ENV LD_LIBRARY_PATH)
+
+include (FindPackageHandleStandardArgs)
+
+
+# handle the QUIETLY and REQUIRED arguments and set LIBLZMA_FOUND to TRUE if all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibLzma DEFAULT_MSG
+  LIBLZMA_LIBRARIES
+  LIBLZMA_INCLUDE_DIRS)
+
+if (LIBLZMA_FOUND)
+  add_definitions(-DHAVE_LIBLZMA)
+endif (LIBLZMA_FOUND)
+
+mark_as_advanced(LIBLZMA_INCLUDE_DIRS LIBLZMA_LIBRARIES)
diff --git a/cmake/clang_libs.cmake b/cmake/clang_libs.cmake
index f1b1261..fe82f2f 100644
--- a/cmake/clang_libs.cmake
+++ b/cmake/clang_libs.cmake
@@ -25,6 +25,10 @@
 if (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 15 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 15)
   list(APPEND llvm_raw_libs windowsdriver)
 endif()
+if (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 16 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 16)
+  list(APPEND llvm_raw_libs frontendhlsl)
+endif()
+
 llvm_map_components_to_libnames(_llvm_libs ${llvm_raw_libs})
 llvm_expand_dependencies(llvm_libs ${_llvm_libs})
 endif()
@@ -50,7 +54,13 @@
   ${libclangRewrite}
   ${libclangEdit}
   ${libclangAST}
-  ${libclangLex}
+  ${libclangLex})
+
+# if (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 15 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 15)
+  list(APPEND clang_libs ${libclangSupport})
+# endif()
+
+list(APPEND clang_libs
   ${libclangBasic})
 endif()
 
diff --git a/cmake/version.cmake b/cmake/version.cmake
index 11db6cd..9ec23f6 100644
--- a/cmake/version.cmake
+++ b/cmake/version.cmake
@@ -6,7 +6,7 @@
   git_describe(GIT_DESCRIPTION)
   git_describe(GIT_TAG_LAST "--abbrev=0" "--tags")
   git_get_exact_tag(GIT_TAG_EXACT)
-  string(SUBSTRING "${GIT_TAG_LAST}-${GIT_SHA1_SHORT}" 1 -1 REVISION)
+  string(SUBSTRING "${GIT_TAG_LAST}+${GIT_SHA1_SHORT}" 1 -1 REVISION)
   if(GIT_TAG_EXACT)
     string(SUBSTRING "${GIT_TAG_EXACT}" 1 -1 REVISION)
     message(STATUS "Currently on Git tag ${GIT_TAG_EXACT}")
@@ -23,5 +23,12 @@
   set(REVISION_LAST "${REVISION}")
 endif()
 
+if (REVISION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)")
+    set(REVISION_MAJOR ${CMAKE_MATCH_1})
+    set(REVISION_MINOR ${CMAKE_MATCH_2})
+    set(REVISION_PATCH ${CMAKE_MATCH_3})
+else()
+  message(WARNING "Could not extract major/minor/patch from revision ${REVISION}" )
+endif()
 # strip leading 'v', and make unique for the tag
-message(STATUS "Revision is ${REVISION}")
+message(STATUS "Revision is ${REVISION} (major ${REVISION_MAJOR}, minor ${REVISION_MINOR}, patch ${REVISION_PATCH})")
diff --git a/debian/changelog b/debian/changelog
index 2202804..257ff86 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,63 @@
+bcc (0.28.0-1) unstable; urgency=low
+
+  * Support for kernel up to 6.3.
+  * new libbpf tool: tcppktlat.
+  * bcc tool updates: funcslower, wakeuptime, profile, offcputime, deadlock, funccount, argdist, kvmexit, runqlen and cpuunclaimed.
+  * libbpf tool update: memleak, tcprtt, tcpconnlat, funclatency, syscount, cpufreq, biosnoop.
+  * support ringbuf_query for bcc tools.
+  * handle '[uprobes]' memory mapped file properly during stack tracing.
+  * Fix maximum allowed index for print_linear_hist for bcc tools.
+  * add module kfunc/kretfunc support.
+  * clang rewriter: initialize only the requested parameters
+  * filter with available_filter_functions to make multi-functions kprobes more robust for both bcc and libbpf tools.
+  * doc update, other bug fixes and tools improvement
+
+ -- Yonghong Song <ys114321@gmail.com>  Wed, 28 Jun 2023 17:00:00 +0000
+
+bcc (0.27.0-1) unstable; urgency=low
+
+  * Support for kernel up to 6.2
+  * bcc tool updates for ttysnoop, slabratetop, readahead, nfsslower, cpudist, cachetop, cachestat, etc.
+  * libbpf-tools updates for mdflush, drsnoop, statsnoop, ttysnoop, softirqs, wakeuptime, cachestat, numamove, etc.
+  * fix for incomplete static libraries
+  * implement zip archive support
+  * upgrade to use c++14 standard
+  * new libbpf-tools: memleak
+  * add loongarch support in libbpft-tools
+  * doc update, bug fixes and other tools improvement
+
+ -- Yonghong Song <ys114321@gmail.com>  Wed, 02 Apr 2023 17:00:00 +0000
+
+bcc (0.26.0-1) unstable; urgency=low
+
+  * Support for kernel up to 6.1
+  * bcc tool updates for biosnoop, opensnoop, biopattern, killsnoop, runqslower, offcputime, wakeuptime, etc.
+  * libbpf-tools updates for klockstat, sigsnoop, hardirqs, softirqs, opensnoop, statsnoop, offcputime, tcplife, cpufreq, cpudist, etc.
+  * new libbpf-tools: tcptop, tcpstates, biotop, capable
+  * ci: add support for fedora 36 container and new workflow for containers
+  * doc update, bug fixes and other tools improvement
+
+ -- Yonghong Song <ys114321@gmail.com>  Wed, 10 Aug 2022 17:00:00 +0000
+
+bcc (0.25.0-1) unstable; urgency=low
+
+  * Support for kernel up to 5.19
+  * bcc tool updates for oomkill.py, biolatpcts.py, sslsniff.py, tcpaccept.py, etc.
+  * libbpf tool updates for klockstat, opensnoop, tcpconnect, etc.
+  * new bcc tools: tcpcong
+  * new libbpf tools: tcpsynbl, mdflush, oomkill, sigsnoop
+  * usdt: support xmm registers as args for x64
+  * bpftool as a submodule now
+  * remove uses of libbpf deprecated APIs
+  * use new llvm pass manager
+  * support cgroup filtering libbpf tools
+  * fix shared lib module offset <-> global addr conversion
+  * riscv support
+  * LoongArch support
+  * doc update, bug fixes and other tools improvement
+
+ -- Yonghong Song <ys114321@gmail.com>  Wed, 10 Aug 2022 17:00:00 +0000
+
 bcc (0.24.0-1) unstable; urgency=low
 
   * Support for kernel up to 5.16
diff --git a/docker/Dockerfile.fedora b/docker/Dockerfile.fedora
deleted file mode 100644
index 0030e27..0000000
--- a/docker/Dockerfile.fedora
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) PLUMgrid, Inc.
-# Licensed under the Apache License, Version 2.0 (the "License")
-
-FROM fedora:34
-
-MAINTAINER Dave Marchevsky <davemarchevsky@fb.com>
-
-RUN dnf -y install \
-	bison \
-	cmake \
-	flex \
-	gcc \
-	gcc-c++ \
-	git \
-	libxml2-devel \
-	make \
-	rpm-build \
-	wget \
-	zlib-devel \
-	llvm \
-	llvm-devel \
-	clang-devel \
-	elfutils-debuginfod-client-devel \
-#	elfutils-libelf-devel-static \
-	elfutils-libelf-devel \
-	luajit \
-	luajit-devel \
-	python3-devel \
-	libstdc++ \
-	libstdc++-devel
-
-RUN dnf -y install \
-	python3 \
-	python3-pip
-
-RUN dnf -y install \
-	procps \
-	iputils \
-	net-tools \
-	hostname \
-	iproute \
-	bpftool
-
-RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
diff --git a/docker/Dockerfile.tests b/docker/Dockerfile.tests
deleted file mode 100644
index 28965c4..0000000
--- a/docker/Dockerfile.tests
+++ /dev/null
@@ -1,74 +0,0 @@
-ARG UBUNTU_VERSION="18.04"
-FROM ubuntu:${UBUNTU_VERSION}
-
-ARG LLVM_VERSION="11"
-ENV LLVM_VERSION=$LLVM_VERSION
-
-ARG UBUNTU_SHORTNAME="bionic"
-
-RUN apt-get update && apt-get install -y curl gnupg &&\
-    llvmRepository="\n\
-deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
-deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
-deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n\
-deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n" &&\
-    echo $llvmRepository >> /etc/apt/sources.list && \
-    curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
-
-ARG DEBIAN_FRONTEND="noninteractive"
-ENV TZ="Etc/UTC"
-
-RUN apt-get update && apt-get install -y \
-      util-linux \
-      bison \
-      binutils-dev \
-      cmake \
-      flex \
-      g++ \
-      git \
-      kmod \
-      wget \
-      libelf-dev \
-      zlib1g-dev \
-      libiberty-dev \
-      libbfd-dev \
-      libedit-dev \
-      clang-${LLVM_VERSION} \
-      libclang-${LLVM_VERSION}-dev \
-      libclang-common-${LLVM_VERSION}-dev \
-      libclang1-${LLVM_VERSION} \
-      llvm-${LLVM_VERSION} \
-      llvm-${LLVM_VERSION}-dev \
-      llvm-${LLVM_VERSION}-runtime \
-      libllvm${LLVM_VERSION} \
-      systemtap-sdt-dev \
-      sudo \
-      iproute2 \
-      python3 \
-      python3-pip \
-      ethtool \
-      arping \
-      netperf \
-      iperf \
-      iputils-ping \
-      bridge-utils \
-      libtinfo5 \
-      libtinfo-dev
-
-RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
-
-# FIXME this is faster than building from source, but it seems there is a bug
-# in probing libruby.so rather than ruby binary
-#RUN apt-get update -qq && \
-#    apt-get install -y software-properties-common && \
-#    apt-add-repository ppa:brightbox/ruby-ng && \
-#    apt-get update -qq && apt-get install -y ruby2.6 ruby2.6-dev
-
-RUN wget -O ruby-install-0.7.0.tar.gz \
-         https://github.com/postmodern/ruby-install/archive/v0.7.0.tar.gz && \
-    tar -xzvf ruby-install-0.7.0.tar.gz && \
-    cd ruby-install-0.7.0/ && \
-    make install
-
-RUN ruby-install --system ruby 2.6.0 -- --enable-dtrace
-RUN if [ ! -f "/usr/bin/python" ]; then ln -s /bin/python3 /usr/bin/python; fi
diff --git a/docker/build/Dockerfile.fedora b/docker/build/Dockerfile.fedora
new file mode 100644
index 0000000..bf8c2b3
--- /dev/null
+++ b/docker/build/Dockerfile.fedora
@@ -0,0 +1,73 @@
+# Copyright (c) PLUMgrid, Inc.
+# Licensed under the Apache License, Version 2.0 (the "License")
+
+ARG VERSION="34"
+FROM fedora:${VERSION}
+
+ARG RUBY_INSTALL_VERSION="0.8.4"
+ENV RUBY_INSTALL_VERSION=$RUBY_INSTALL_VERSION
+
+ARG RUBY_VERSION="3.1.2"
+ENV RUBY_VERSION=$RUBY_VERSION
+
+MAINTAINER Dave Marchevsky <davemarchevsky@fb.com>
+
+RUN dnf -y install \
+	bison \
+	cmake \
+	flex \
+	gcc \
+	gcc-c++ \
+	git \
+	libxml2-devel \
+	make \
+	rpm-build \
+	wget \
+	zlib-devel \
+	llvm \
+	llvm-devel \
+	clang-devel \
+	elfutils-debuginfod-client-devel \
+#	elfutils-libelf-devel-static \
+	elfutils-libelf-devel \
+	luajit \
+	luajit-devel \
+	python3-devel \
+	libstdc++ \
+	libstdc++-devel \
+	systemtap-sdt-devel
+
+RUN dnf -y install \
+	python3 \
+	python3-pip
+
+RUN dnf -y install \
+       rust \
+       cargo
+
+RUN if [[ ! -e /usr/bin/python && -e /usr/bin/python3 ]]; then \
+        ln -s $(readlink /usr/bin/python3) /usr/bin/python; \
+    fi
+
+RUN dnf -y install \
+	procps \
+	iputils \
+	net-tools \
+	hostname \
+	iproute \
+	bpftool \
+	iperf \
+	netperf
+
+RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
+
+RUN wget -O ruby-install-${RUBY_INSTALL_VERSION}.tar.gz \
+         https://github.com/postmodern/ruby-install/archive/v${RUBY_INSTALL_VERSION}.tar.gz && \
+    tar -xzvf ruby-install-${RUBY_INSTALL_VERSION}.tar.gz && \
+    cd ruby-install-${RUBY_INSTALL_VERSION}/ && \
+    make install && \
+    cd .. && \
+    rm -rf ruby-install-${RUBY_INSTALL_VERSION}*
+
+RUN ruby-install --system ruby ${RUBY_VERSION} -c -- --enable-dtrace
+
diff --git a/docker/build/Dockerfile.ubuntu b/docker/build/Dockerfile.ubuntu
new file mode 100644
index 0000000..52904aa
--- /dev/null
+++ b/docker/build/Dockerfile.ubuntu
@@ -0,0 +1,87 @@
+ARG VERSION="18.04"
+FROM ubuntu:${VERSION}
+
+ARG LLVM_VERSION="11"
+ENV LLVM_VERSION=$LLVM_VERSION
+
+ARG SHORTNAME="bionic"
+
+ARG RUBY_INSTALL_VERSION="0.8.4"
+ENV RUBY_INSTALL_VERSION=$RUBY_INSTALL_VERSION
+
+ARG RUBY_VERSION="3.1.2"
+ENV RUBY_VERSION=$RUBY_VERSION
+
+RUN apt-get update && apt-get install -y curl gnupg &&\
+    llvmRepository="\n\
+deb http://apt.llvm.org/${SHORTNAME}/ llvm-toolchain-${SHORTNAME} main\n\
+deb-src http://apt.llvm.org/${SHORTNAME}/ llvm-toolchain-${SHORTNAME} main\n\
+deb http://apt.llvm.org/${SHORTNAME}/ llvm-toolchain-${SHORTNAME}-${LLVM_VERSION} main\n\
+deb-src http://apt.llvm.org/${SHORTNAME}/ llvm-toolchain-${SHORTNAME}-${LLVM_VERSION} main\n" &&\
+    echo $llvmRepository >> /etc/apt/sources.list && \
+    curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
+
+ARG DEBIAN_FRONTEND="noninteractive"
+ENV TZ="Etc/UTC"
+
+RUN apt-get update && apt-get install -y \
+      util-linux \
+      bison \
+      binutils-dev \
+      cmake \
+      flex \
+      g++ \
+      git \
+      kmod \
+      wget \
+      libelf-dev \
+      zlib1g-dev \
+      libiberty-dev \
+      liblzma-dev \
+      libbfd-dev \
+      libedit-dev \
+      clang-${LLVM_VERSION} \
+      libclang-${LLVM_VERSION}-dev \
+      libclang-common-${LLVM_VERSION}-dev \
+      libclang1-${LLVM_VERSION} \
+      llvm-${LLVM_VERSION} \
+      llvm-${LLVM_VERSION}-dev \
+      llvm-${LLVM_VERSION}-runtime \
+      libllvm${LLVM_VERSION} \
+      systemtap-sdt-dev \
+      sudo \
+      iproute2 \
+      python3 \
+      python3-pip \
+      ethtool \
+      arping \
+      netperf \
+      iperf \
+      iputils-ping \
+      bridge-utils \
+      libtinfo5 \
+      libtinfo-dev \
+      xz-utils \
+      zip && \
+      apt-get -y clean
+
+RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
+
+# FIXME this is faster than building from source, but it seems there is a bug
+# in probing libruby.so rather than ruby binary
+#RUN apt-get update -qq && \
+#    apt-get install -y software-properties-common && \
+#    apt-add-repository ppa:brightbox/ruby-ng && \
+#    apt-get update -qq && apt-get install -y ruby2.6 ruby2.6-dev
+
+RUN wget -O ruby-install-${RUBY_INSTALL_VERSION}.tar.gz \
+         https://github.com/postmodern/ruby-install/archive/v${RUBY_INSTALL_VERSION}.tar.gz && \
+    tar -xzvf ruby-install-${RUBY_INSTALL_VERSION}.tar.gz && \
+    cd ruby-install-${RUBY_INSTALL_VERSION}/ && \
+    make install && \
+    cd .. && \
+    rm -rf ruby-install-${RUBY_INSTALL_VERSION}*
+
+RUN ruby-install --system ruby ${RUBY_VERSION} -c -- --enable-dtrace
+RUN if [ ! -f "/usr/bin/python" ]; then ln -s /bin/python3 /usr/bin/python; fi
+RUN if [ ! -f "/usr/local/bin/python" ]; then ln -s /usr/bin/python3 /usr/local/bin/python; fi
diff --git a/docs/kernel-versions.md b/docs/kernel-versions.md
index 36ee30a..23a9c55 100644
--- a/docs/kernel-versions.md
+++ b/docs/kernel-versions.md
@@ -4,7 +4,7 @@
 
 Kernel version | Commit
 ---------------|-------
-3.15 | [`bd4cf0ed331a`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
+3.15 | [`bd4cf0ed331a`](https://github.com/torvalds/linux/commit/bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
 
 ## JIT compiling
 
@@ -14,147 +14,189 @@
 
 Feature / Architecture | Kernel version | Commit
 -----------------------|----------------|-------
-x86\_64 | 3.16 | [`622582786c9e`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=622582786c9e041d0bd52bde201787adeab249f8)
-ARM64 | 3.18 | [`e54bcde3d69d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e54bcde3d69d40023ae77727213d14f920eb264a)
-s390 | 4.1 | [`054623105728`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=054623105728b06852f077299e2bf1bf3d5f2b0b)
-Constant blinding for JIT machines | 4.7 | [`4f3446bb809f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4f3446bb809f20ad56cadf712e6006815ae7a8f9)
-PowerPC64 | 4.8 | [`156d0e290e96`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=156d0e290e969caba25f1851c52417c14d141b24)
-Constant blinding - PowerPC64 | 4.9 | [`b7b7013cac55`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b7b7013cac55d794940bd9cb7b7c55c9dececac4)
-Sparc64 | 4.12 | [`7a12b5031c6b`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7a12b5031c6b947cc13918237ae652b536243b76)
-MIPS | 4.13 | [`f381bf6d82f0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f381bf6d82f032b7410185b35d000ea370ac706b)
-ARM32 | 4.14 | [`39c13c204bb1`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=39c13c204bb1150d401e27d41a9d8b332be47c49)
-x86\_32 | 4.18 |  [`03f5781be2c7`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=03f5781be2c7b7e728d724ac70ba10799cc710d7)
-RISC-V RV64G | 5.1 | [`2353ecc6f91f`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=2353ecc6f91fd15b893fa01bf85a1c7a823ee4f2)
-RISC-V RV32G | 5.7 | [`5f316b65e99f`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=5f316b65e99f109942c556dc8790abd4c75bcb34)
+x86\_64                            | 3.16 | [`622582786c9e`](https://github.com/torvalds/linux/commit/622582786c9e041d0bd52bde201787adeab249f8)
+ARM64                              | 3.18 | [`e54bcde3d69d`](https://github.com/torvalds/linux/commit/e54bcde3d69d40023ae77727213d14f920eb264a)
+s390                               | 4.1  | [`054623105728`](https://github.com/torvalds/linux/commit/054623105728b06852f077299e2bf1bf3d5f2b0b)
+Constant blinding for JIT machines | 4.7  | [`4f3446bb809f`](https://github.com/torvalds/linux/commit/4f3446bb809f20ad56cadf712e6006815ae7a8f9)
+PowerPC64                          | 4.8  | [`156d0e290e96`](https://github.com/torvalds/linux/commit/156d0e290e969caba25f1851c52417c14d141b24)
+Constant blinding - PowerPC64      | 4.9  | [`b7b7013cac55`](https://github.com/torvalds/linux/commit/b7b7013cac55d794940bd9cb7b7c55c9dececac4)
+Sparc64                            | 4.12 | [`7a12b5031c6b`](https://github.com/torvalds/linux/commit/7a12b5031c6b947cc13918237ae652b536243b76)
+MIPS                               | 4.13 | [`f381bf6d82f0`](https://github.com/torvalds/linux/commit/f381bf6d82f032b7410185b35d000ea370ac706b)
+ARM32                              | 4.14 | [`39c13c204bb1`](https://github.com/torvalds/linux/commit/39c13c204bb1150d401e27d41a9d8b332be47c49)
+x86\_32                            | 4.18 | [`03f5781be2c7`](https://github.com/torvalds/linux/commit/03f5781be2c7b7e728d724ac70ba10799cc710d7)
+RISC-V RV64G                       | 5.1  | [`2353ecc6f91f`](https://github.com/torvalds/linux/commit/2353ecc6f91fd15b893fa01bf85a1c7a823ee4f2)
+RISC-V RV32G                       | 5.7  | [`5f316b65e99f`](https://github.com/torvalds/linux/commit/5f316b65e99f109942c556dc8790abd4c75bcb34)
+PowerPC32                          | 5.13 | [`51c66ad849a7`](https://github.com/torvalds/linux/commit/51c66ad849a703d9bbfd7704c941827aed0fd9fd)
+LoongArch                          | 6.1  | [`5dc615520c4d`](https://github.com/torvalds/linux/commit/5dc615520c4dfb358245680f1904bad61116648e)
 
 ## Main features
 
 Several (but not all) of these _main features_ translate to an eBPF program type.
 The list of such program types supported in your kernel can be found in file
-[`include/uapi/linux/bpf.h`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/bpf.h):
+[`include/uapi/linux/bpf.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h):
 
     git grep -W 'bpf_prog_type {' include/uapi/linux/bpf.h
 
 Feature | Kernel version | Commit
 --------|----------------|-------
-`AF_PACKET` (libpcap/tcpdump, `cls_bpf` classifier, netfilter's `xt_bpf`, team driver's load-balancing mode…) | 3.15 | [`bd4cf0ed331a`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
-Kernel helpers | 3.15 | [`bd4cf0ed331a`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
-`bpf()` syscall | 3.18 | [`99c55f7d47c0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=99c55f7d47c0dc6fc64729f37bf435abf43f4c60)
-Tables (_a.k.a._ Maps; details below) | 3.18 | [`99c55f7d47c0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=99c55f7d47c0dc6fc64729f37bf435abf43f4c60)
-BPF attached to sockets | 3.19 | [`89aa075832b0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=89aa075832b0da4402acebd698d0411dcc82d03e)
-BPF attached to `kprobes` | 4.1 | [`2541517c32be`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2541517c32be2531e0da59dfd7efc1ce844644f5)
-`cls_bpf` / `act_bpf` for `tc` | 4.1 | [`e2e9b6541dd4`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e2e9b6541dd4b31848079da80fe2253daaafb549)
-Tail calls | 4.2 | [`04fd61ab36ec`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=04fd61ab36ec065e194ab5e74ae34a5240d992bb)
-Non-root programs on sockets | 4.4 | [`1be7f75d1668`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1be7f75d1668d6296b80bf35dcf6762393530afc)
-Persistent maps and programs (virtual FS) | 4.4 | [`b2197755b263`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b2197755b2633e164a439682fb05a9b5ea48f706)
-`tc`'s `direct-action` (`da`) mode | 4.4 | [`045efa82ff56`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=045efa82ff563cd4e656ca1c2e354fa5bf6bbda4)
-`tc`'s `clsact` qdisc | 4.5 | [`1f211a1b929c`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1f211a1b929c804100e138c5d3d656992cfd5622)
-BPF attached to tracepoints | 4.7 | [`98b5c2c65c29`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=98b5c2c65c2951772a8fc661f50d675e450e8bce)
-Direct packet access | 4.7 | [`969bf05eb3ce`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=969bf05eb3cedd5a8d4b7c346a85c2ede87a6d6d)
-XDP (see below) | 4.8 | [`6a773a15a1e8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6a773a15a1e8874e5eccd2f29190c31085912c95)
-BPF attached to perf events | 4.9 | [`0515e5999a46`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0515e5999a466dfe6e1924f460da599bb6821487)
-Hardware offload for `tc`'s `cls_bpf` | 4.9 | [`332ae8e2f6ec`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=332ae8e2f6ecda5e50c5c62ed62894963e3a83f5)
-Verifier exposure and internal hooks | 4.9 | [`13a27dfc6697`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=13a27dfc669724564aafa2699976ee756029fed2)
-BPF attached to cgroups for socket filtering | 4.10 | [`0e33661de493`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0e33661de493db325435d565a4a722120ae4cbf3)
-Lightweight tunnel encapsulation | 4.10 | [`3a0af8fd61f9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2)
-**e**BPF support for `xt_bpf` module (iptables) | 4.10 | [`2c16d6033264`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2c16d60332643e90d4fa244f4a706c454b8c7569)
-BPF program tag | 4.10 | [`7bd509e311f4`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7bd509e311f408f7a5132fcdde2069af65fa05ae)
-Tracepoints to debug BPF | 4.11 (removed in 4.18) | [`a67edbf4fb6d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a67edbf4fb6deadcfe57a04a134abed4a5ba3bb5) [`4d220ed0f814`](https://git.kernel.org/cgit/linux/kernel/git/bpf/bpf-next.git/commit/?id=4d220ed0f8140c478ab7b0a14d96821da639b646)
-Testing / benchmarking BPF programs | 4.12 | [`1cf1cae963c2`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1cf1cae963c2e6032aebe1637e995bc2f5d330f4)
-BPF programs and maps IDs | 4.13 | [`dc4bb0e23561`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=dc4bb0e2356149aee4cdae061936f3bbdd45595c)
-BPF support for `sock_ops` | 4.13 | [`40304b2a1567`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=40304b2a1567fecc321f640ee4239556dd0f3ee0)
-BPF support for skbs on sockets | 4.14 | [`b005fd189cec`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b005fd189cec9407b700599e1e80e0552446ee79)
-bpftool utility in kernel sources | 4.15 | [`71bb428fe2c1`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=71bb428fe2c19512ac671d5ee16ef3e73e1b49a8)
-BPF attached to cgroups as device controller | 4.15 | [`ebc614f68736`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ebc614f687369f9df99828572b1d85a7c2de3d92)
+`AF_PACKET` (libpcap/tcpdump, `cls_bpf` classifier, netfilter's `xt_bpf`, team driver's load-balancing mode…) | 3.15 | [`bd4cf0ed331a`](https://github.com/torvalds/linux/commit/bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
+Kernel helpers | 3.15 | [`bd4cf0ed331a`](https://github.com/torvalds/linux/commit/bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8)
+`bpf()` syscall | 3.18 | [`99c55f7d47c0`](https://github.com/torvalds/linux/commit/99c55f7d47c0dc6fc64729f37bf435abf43f4c60)
+Maps (_a.k.a._ Tables; details below) | 3.18 | [`99c55f7d47c0`](https://github.com/torvalds/linux/commit/99c55f7d47c0dc6fc64729f37bf435abf43f4c60)
+BPF attached to sockets | 3.19 | [`89aa075832b0`](https://github.com/torvalds/linux/commit/89aa075832b0da4402acebd698d0411dcc82d03e)
+BPF attached to `kprobes` | 4.1 | [`2541517c32be`](https://github.com/torvalds/linux/commit/2541517c32be2531e0da59dfd7efc1ce844644f5)
+`cls_bpf` / `act_bpf` for `tc` | 4.1 | [`e2e9b6541dd4`](https://github.com/torvalds/linux/commit/e2e9b6541dd4b31848079da80fe2253daaafb549)
+Tail calls | 4.2 | [`04fd61ab36ec`](https://github.com/torvalds/linux/commit/04fd61ab36ec065e194ab5e74ae34a5240d992bb)
+Non-root programs on sockets | 4.4 | [`1be7f75d1668`](https://github.com/torvalds/linux/commit/1be7f75d1668d6296b80bf35dcf6762393530afc)
+Persistent maps and programs (virtual FS) | 4.4 | [`b2197755b263`](https://github.com/torvalds/linux/commit/b2197755b2633e164a439682fb05a9b5ea48f706)
+`tc`'s `direct-action` (`da`) mode | 4.4 | [`045efa82ff56`](https://github.com/torvalds/linux/commit/045efa82ff563cd4e656ca1c2e354fa5bf6bbda4)
+`tc`'s `clsact` qdisc | 4.5 | [`1f211a1b929c`](https://github.com/torvalds/linux/commit/1f211a1b929c804100e138c5d3d656992cfd5622)
+BPF attached to tracepoints | 4.7 | [`98b5c2c65c29`](https://github.com/torvalds/linux/commit/98b5c2c65c2951772a8fc661f50d675e450e8bce)
+Direct packet access | 4.7 | [`969bf05eb3ce`](https://github.com/torvalds/linux/commit/969bf05eb3cedd5a8d4b7c346a85c2ede87a6d6d)
+XDP (see below) | 4.8 | [`6a773a15a1e8`](https://github.com/torvalds/linux/commit/6a773a15a1e8874e5eccd2f29190c31085912c95)
+BPF attached to perf events | 4.9 | [`0515e5999a46`](https://github.com/torvalds/linux/commit/0515e5999a466dfe6e1924f460da599bb6821487)
+Hardware offload for `tc`'s `cls_bpf` | 4.9 | [`332ae8e2f6ec`](https://github.com/torvalds/linux/commit/332ae8e2f6ecda5e50c5c62ed62894963e3a83f5)
+Verifier exposure and internal hooks | 4.9 | [`13a27dfc6697`](https://github.com/torvalds/linux/commit/13a27dfc669724564aafa2699976ee756029fed2)
+BPF attached to cgroups for socket filtering | 4.10 | [`0e33661de493`](https://github.com/torvalds/linux/commit/0e33661de493db325435d565a4a722120ae4cbf3)
+Lightweight tunnel encapsulation | 4.10 | [`3a0af8fd61f9`](https://github.com/torvalds/linux/commit/3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2)
+**e**BPF support for `xt_bpf` module (iptables) | 4.10 | [`2c16d6033264`](https://github.com/torvalds/linux/commit/2c16d60332643e90d4fa244f4a706c454b8c7569)
+BPF program tag | 4.10 | [`7bd509e311f4`](https://github.com/torvalds/linux/commit/7bd509e311f408f7a5132fcdde2069af65fa05ae)
+Tracepoints to debug BPF | 4.11 (removed in 4.18) | [`a67edbf4fb6d`](https://github.com/torvalds/linux/commit/a67edbf4fb6deadcfe57a04a134abed4a5ba3bb5) [`4d220ed0f814`](https://github.com/torvalds/linux/commit/4d220ed0f8140c478ab7b0a14d96821da639b646)
+Testing / benchmarking BPF programs | 4.12 | [`1cf1cae963c2`](https://github.com/torvalds/linux/commit/1cf1cae963c2e6032aebe1637e995bc2f5d330f4)
+BPF programs and maps IDs | 4.13 | [`dc4bb0e23561`](https://github.com/torvalds/linux/commit/dc4bb0e2356149aee4cdae061936f3bbdd45595c)
+BPF support for `sock_ops` | 4.13 | [`40304b2a1567`](https://github.com/torvalds/linux/commit/40304b2a1567fecc321f640ee4239556dd0f3ee0)
+BPF support for skbs on sockets | 4.14 | [`b005fd189cec`](https://github.com/torvalds/linux/commit/b005fd189cec9407b700599e1e80e0552446ee79)
+bpftool utility in kernel sources | 4.15 | [`71bb428fe2c1`](https://github.com/torvalds/linux/commit/71bb428fe2c19512ac671d5ee16ef3e73e1b49a8)
+BPF attached to cgroups as device controller | 4.15 | [`ebc614f68736`](https://github.com/torvalds/linux/commit/ebc614f687369f9df99828572b1d85a7c2de3d92)
 bpf2bpf function calls | 4.16 |  [`cc8b0b92a169`](https://github.com/torvalds/linux/commit/cc8b0b92a1699bc32f7fec71daa2bfc90de43a4d)
-BPF used for monitoring socket RX/TX data | 4.17 | [`4f738adba30a`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4f738adba30a7cfc006f605707e7aee847ffefa0)
-BPF attached to raw tracepoints | 4.17 | [`c4f6699dfcb8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c4f6699dfcb8558d138fe838f741b2c10f416cf9)
-BPF attached to `bind()` system call | 4.17 | [`4fbac77d2d09`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4fbac77d2d092b475dda9eea66da674369665427)
-BPF Type Format (BTF) | 4.18 | [`69b693f0aefa`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=69b693f0aefa0ed521e8bd02260523b5ae446ad7)
-AF_XDP | 4.18 |  [`fbfc504a24f5`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fbfc504a24f53f7ebe128ab55cb5dba634f4ece8)
-bpfilter | 4.18 |  [`d2ba09c17a06`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=d2ba09c17a0647f899d6c20a11bab9e6d3382f07)
-End.BPF action for seg6local LWT | 4.18 |  [`004d4b274e2a`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=004d4b274e2a1a895a0e5dc66158b90a7d463d44)
-BPF attached to LIRC devices | 4.18 |  [`f4364dcfc86d`](https://git.kernel.org/cgit/linux/kernel/git/bpf/bpf-next.git/commit/?id=f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
+BPF used for monitoring socket RX/TX data | 4.17 | [`4f738adba30a`](https://github.com/torvalds/linux/commit/4f738adba30a7cfc006f605707e7aee847ffefa0)
+BPF attached to raw tracepoints | 4.17 | [`c4f6699dfcb8`](https://github.com/torvalds/linux/commit/c4f6699dfcb8558d138fe838f741b2c10f416cf9)
+BPF attached to `bind()` system call | 4.17 | [`4fbac77d2d09`](https://github.com/torvalds/linux/commit/4fbac77d2d092b475dda9eea66da674369665427) [`aac3fc320d94`](https://github.com/torvalds/linux/commit/aac3fc320d9404f2665a8b1249dc3170d5fa3caf)
+BPF attached to `connect()` system call | 4.17 | [`d74bad4e74ee`](https://github.com/torvalds/linux/commit/d74bad4e74ee373787a9ae24197c17b7cdc428d5)
+BPF Type Format (BTF) | 4.18 | [`69b693f0aefa`](https://github.com/torvalds/linux/commit/69b693f0aefa0ed521e8bd02260523b5ae446ad7)
+AF_XDP | 4.18 |  [`fbfc504a24f5`](https://github.com/torvalds/linux/commit/fbfc504a24f53f7ebe128ab55cb5dba634f4ece8)
+bpfilter | 4.18 |  [`d2ba09c17a06`](https://github.com/torvalds/linux/commit/d2ba09c17a0647f899d6c20a11bab9e6d3382f07)
+End.BPF action for seg6local LWT | 4.18 |  [`004d4b274e2a`](https://github.com/torvalds/linux/commit/004d4b274e2a1a895a0e5dc66158b90a7d463d44)
+BPF attached to LIRC devices | 4.18 |  [`f4364dcfc86d`](https://github.com/torvalds/linux/commit/f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
 Pass map values to map helpers | 4.18 | [`d71962f3e627`](https://github.com/torvalds/linux/commit/d71962f3e627b5941804036755c844fabfb65ff5)
 BPF socket reuseport | 4.19 | [`2dbb9b9e6df6`](https://github.com/torvalds/linux/commit/2dbb9b9e6df67d444fbe425c7f6014858d337adf)
 BPF flow dissector | 4.20 | [`d58e468b1112`](https://github.com/torvalds/linux/commit/d58e468b1112dcd1d5193c0a89ff9f98b5a3e8b9)
 BPF 1M insn limit | 5.2 | [`c04c0d2b968a`](https://github.com/torvalds/linux/commit/c04c0d2b968ac45d6ef020316808ef6c82325a82)
 BPF cgroup sysctl | 5.2 | [`7b146cebe30c`](https://github.com/torvalds/linux/commit/7b146cebe30cb481b0f70d85779da938da818637)
 BPF raw tracepoint writable | 5.2 | [`9df1c28bb752`](https://github.com/torvalds/linux/commit/9df1c28bb75217b244257152ab7d788bb2a386d0)
+BPF bounded loop | 5.3 | [`2589726d12a1`](https://github.com/torvalds/linux/commit/2589726d12a1b12eaaa93c7f1ea64287e383c7a5)
 BPF trampoline | 5.5 | [`fec56f5890d9`](https://github.com/torvalds/linux/commit/fec56f5890d93fc2ed74166c397dc186b1c25951)
 BPF LSM hook | 5.7 | [`fc611f47f218`](https://github.com/torvalds/linux/commit/fc611f47f2188ade2b48ff6902d5cce8baac0c58) [`641cd7b06c91`](https://github.com/torvalds/linux/commit/641cd7b06c911c5935c34f24850ea18690649917)
-BPF iterator | 5.8 | [`180139dca8b3`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=180139dca8b38c858027b8360ee10064fdb2fbf7)
+BPF iterator | 5.8 | [`180139dca8b3`](https://github.com/torvalds/linux/commit/180139dca8b38c858027b8360ee10064fdb2fbf7)
 BPF socket lookup hook | 5.9 | [`e9ddbb7707ff`](https://github.com/torvalds/linux/commit/e9ddbb7707ff5891616240026062b8c1e29864ca)
-Sleepable BPF programs | 5.10 | [`1e6c62a88215`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1e6c62a8821557720a9b2ea9617359b264f2f67c)
+Sleepable BPF programs | 5.10 | [`1e6c62a88215`](https://github.com/torvalds/linux/commit/1e6c62a8821557720a9b2ea9617359b264f2f67c)
 
-## Tables (_a.k.a._ Maps)
+### Program types
 
-### Table types
+Program type | Kernel version | Commit | Enum
+-------------|----------------|--------|-----
+Socket filter                  | 3.19 | [`ddd872bc3098`](https://github.com/torvalds/linux/commit/ddd872bc3098f9d9abe1680a6b2013e59e3337f7) | BPF_PROG_TYPE_SOCKET_FILTER
+Kprobe                         | 4.1  | [`2541517c32be`](https://github.com/torvalds/linux/commit/2541517c32be2531e0da59dfd7efc1ce844644f5) | BPF_PROG_TYPE_KPROBE
+traffic control (TC)           | 4.1  | [`96be4325f443`](https://github.com/torvalds/linux/commit/96be4325f443dbbfeb37d2a157675ac0736531a1) | BPF_PROG_TYPE_SCHED_CLS
+traffic control (TC)           | 4.1  | [`94caee8c312d`](https://github.com/torvalds/linux/commit/94caee8c312d96522bcdae88791aaa9ebcd5f22c) | BPF_PROG_TYPE_SCHED_ACT
+Tracepoint                     | 4.7  | [`98b5c2c65c29`](https://github.com/torvalds/linux/commit/98b5c2c65c2951772a8fc661f50d675e450e8bce) | BPF_PROG_TYPE_TRACEPOINT
+XDP                            | 4.8  | [`6a773a15a1e8`](https://github.com/torvalds/linux/commit/6a773a15a1e8874e5eccd2f29190c31085912c95) | BPF_PROG_TYPE_XDP
+Perf event                     | 4.9  | [`0515e5999a46`](https://github.com/torvalds/linux/commit/0515e5999a466dfe6e1924f460da599bb6821487) | BPF_PROG_TYPE_PERF_EVENT
+cgroup socket filtering        | 4.10 | [`0e33661de493`](https://github.com/torvalds/linux/commit/0e33661de493db325435d565a4a722120ae4cbf3) | BPF_PROG_TYPE_CGROUP_SKB
+cgroup sock modification       | 4.10 | [`610236587600`](https://github.com/torvalds/linux/commit/61023658760032e97869b07d54be9681d2529e77) | BPF_PROG_TYPE_CGROUP_SOCK
+lightweight tunnel (IN)        | 4.10 | [`3a0af8fd61f9`](https://github.com/torvalds/linux/commit/3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2) | BPF_PROG_TYPE_LWT_IN
+lightweight tunnel (OUT)       | 4.10 | [`3a0af8fd61f9`](https://github.com/torvalds/linux/commit/3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2) | BPF_PROG_TYPE_LWT_OUT
+lightweight tunnel (XMIT)      | 4.10 | [`3a0af8fd61f9`](https://github.com/torvalds/linux/commit/3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2) | BPF_PROG_TYPE_LWT_XMIT
+cgroup sock ops (per conn)     | 4.13 | [`40304b2a1567`](https://github.com/torvalds/linux/commit/40304b2a1567fecc321f640ee4239556dd0f3ee0) | BPF_PROG_TYPE_SOCK_OPS
+stream parser / stream verdict | 4.14 | [`b005fd189cec`](https://github.com/torvalds/linux/commit/b005fd189cec9407b700599e1e80e0552446ee79) | BPF_PROG_TYPE_SK_SKB
+cgroup device manager          | 4.15 | [`ebc614f68736`](https://github.com/torvalds/linux/commit/ebc614f687369f9df99828572b1d85a7c2de3d92) | BPF_PROG_TYPE_CGROUP_DEVICE
+socket msg verdict             | 4.17 | [`4f738adba30a`](https://github.com/torvalds/linux/commit/4f738adba30a7cfc006f605707e7aee847ffefa0) | BPF_PROG_TYPE_SK_MSG
+Raw tracepoint                 | 4.17 | [`c4f6699dfcb8`](https://github.com/torvalds/linux/commit/c4f6699dfcb8558d138fe838f741b2c10f416cf9) | BPF_PROG_TYPE_RAW_TRACEPOINT
+socket binding                 | 4.17 | [`4fbac77d2d09`](https://github.com/torvalds/linux/commit/4fbac77d2d092b475dda9eea66da674369665427) | BPF_PROG_TYPE_CGROUP_SOCK_ADDR
+LWT seg6local                  | 4.18 | [`004d4b274e2a`](https://github.com/torvalds/linux/commit/004d4b274e2a1a895a0e5dc66158b90a7d463d44) | BPF_PROG_TYPE_LWT_SEG6LOCAL
+lirc devices                   | 4.18 | [`f4364dcfc86d`](https://github.com/torvalds/linux/commit/f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936) | BPF_PROG_TYPE_LIRC_MODE2
+lookup SO_REUSEPORT socket     | 4.19 | [`2dbb9b9e6df6`](https://github.com/torvalds/linux/commit/2dbb9b9e6df67d444fbe425c7f6014858d337adf) | BPF_PROG_TYPE_SK_REUSEPORT
+flow dissector                 | 4.20 | [`d58e468b1112`](https://github.com/torvalds/linux/commit/d58e468b1112dcd1d5193c0a89ff9f98b5a3e8b9) | BPF_PROG_TYPE_FLOW_DISSECTOR
+cgroup sysctl                  | 5.2  | [`7b146cebe30c`](https://github.com/torvalds/linux/commit/7b146cebe30cb481b0f70d85779da938da818637) | BPF_PROG_TYPE_CGROUP_SYSCTL
+writable raw tracepoints       | 5.2  | [`9df1c28bb752`](https://github.com/torvalds/linux/commit/9df1c28bb75217b244257152ab7d788bb2a386d0) | BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
+cgroup getsockopt/setsockopt   | 5.3  | [`0d01da6afc54`](https://github.com/torvalds/linux/commit/0d01da6afc5402f60325c5da31b22f7d56689b49) | BPF_PROG_TYPE_CGROUP_SOCKOPT
+Tracing (BTF/BPF trampoline)   | 5.5  | [`f1b9509c2fb0`](https://github.com/torvalds/linux/commit/f1b9509c2fb0ef4db8d22dac9aef8e856a5d81f6) | BPF_PROG_TYPE_TRACING
+struct ops                     | 5.6  | [`27ae7997a661`](https://github.com/torvalds/linux/commit/27ae7997a66174cb8afd6a75b3989f5e0c1b9e5a) | BPF_PROG_TYPE_STRUCT_OPS
+extensions                     | 5.6  | [`be8704ff07d2`](https://github.com/torvalds/linux/commit/be8704ff07d2374bcc5c675526f95e70c6459683) | BPF_PROG_TYPE_EXT
+LSM                            | 5.7  | [`fc611f47f218`](https://github.com/torvalds/linux/commit/fc611f47f2188ade2b48ff6902d5cce8baac0c58) | BPF_PROG_TYPE_LSM
+lookup listening socket        | 5.9  | [`e9ddbb7707ff`](https://github.com/torvalds/linux/commit/e9ddbb7707ff5891616240026062b8c1e29864ca) | BPF_PROG_TYPE_SK_LOOKUP
+Allow executing syscalls       | 5.15 | [`79a7f8bdb159`](https://github.com/torvalds/linux/commit/79a7f8bdb159d9914b58740f3d31d602a6e4aca8) | BPF_PROG_TYPE_SYSCALL
+
+## Maps (_a.k.a._ Tables, in BCC lingo)
+
+### Map types
 
 The list of map types supported in your kernel can be found in file
-[`include/uapi/linux/bpf.h`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/bpf.h):
+[`include/uapi/linux/bpf.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h):
 
     git grep -W 'bpf_map_type {' include/uapi/linux/bpf.h
 
-Table type | Kernel version | Commit
------------|----------------|-------
-Hash | 3.19 | [`0f8e4bd8a1fc`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0f8e4bd8a1fc8c4185f1630061d0a1f2d197a475)
-Array | 3.19 | [`28fbcfa08d8e`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=28fbcfa08d8ed7c5a50d41a0433aad222835e8e3)
-Tail call (`PROG_ARRAY`) | 4.2 | [`04fd61ab36ec`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=04fd61ab36ec065e194ab5e74ae34a5240d992bb)
-Perf events | 4.3 | [`ea317b267e9d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ea317b267e9d03a8241893aa176fba7661d07579)
-Per-CPU hash | 4.6 | [`824bd0ce6c7c`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=824bd0ce6c7c43a9e1e210abf124958e54d88342)
-Per-CPU array | 4.6 | [`a10423b87a7e`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a10423b87a7eae75da79ce80a8d9475047a674ee)
-Stack trace | 4.6 | [`d5a3b1f69186`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d5a3b1f691865be576c2bffa708549b8cdccda19)
-cgroup array | 4.8 | [`4ed8ec521ed5`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4ed8ec521ed57c4e207ad464ca0388776de74d4b)
-LRU hash | 4.10 | [`29ba732acbee`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=29ba732acbeece1e34c68483d1ec1f3720fa1bb3) [`3a08c2fd7634`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3a08c2fd763450a927d1130de078d6f9e74944fb)
-LRU per-CPU hash | 4.10 | [`8f8449384ec3`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8f8449384ec364ba2a654f11f94e754e4ff719e0) [`961578b63474`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=961578b63474d13ad0e2f615fcc2901c5197dda6)
-LPM trie (longest-prefix match) | 4.11 | [`b95a5c4db09b`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b95a5c4db09bc7c253636cb84dc9b12c577fd5a0)
-Array of maps | 4.12 | [`56f668dfe00d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=56f668dfe00dcf086734f1c42ea999398fad6572)
-Hash of maps | 4.12 | [`bcc6b1b7ebf8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bcc6b1b7ebf857a9fe56202e2be3361131588c15)
-Netdevice references (array) | 4.14 | [`546ac1ffb70d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=546ac1ffb70d25b56c1126940e5ec639c4dd7413)
-Socket references (array) | 4.14 | [`174a79ff9515`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=174a79ff9515f400b9a6115643dafd62a635b7e6)
-CPU references | 4.15 | [`6710e1126934`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6710e1126934d8b4372b4d2f9ae1646cd3f151bf)
-AF_XDP socket (XSK) references | 4.18 | [`fbfc504a24f5`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fbfc504a24f53f7ebe128ab55cb5dba634f4ece8)
-Socket references (hashmap) | 4.18 | [`81110384441a`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=81110384441a59cff47430f20f049e69b98c17f4)
-cgroup storage | 4.19 | [`de9cbbaadba5`](https://github.com/torvalds/linux/commit/de9cbbaadba5adf88a19e46df61f7054000838f6)
-reuseport sockarray | 4.19 | [`5dc4c4b7d4e8`](https://github.com/torvalds/linux/commit/5dc4c4b7d4e8115e7cde96a030f98cb3ab2e458c)
-precpu cgroup storage | 4.20 | [`b741f1630346`](https://github.com/torvalds/linux/commit/b741f1630346defcbc8cc60f1a2bdae8b3b0036f)
-queue | 4.20 | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92)
-stack | 4.20 | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92)
-socket local storage | 5.2 | [`6ac99e8f23d4`](https://github.com/torvalds/linux/commit/6ac99e8f23d4b10258406ca0dd7bffca5f31da9d)
-Netdevice references (hashmap) | 5.4 | [`6f9d451ab1a3`](https://github.com/torvalds/linux/commit/6f9d451ab1a33728adb72d7ff66a7b374d665176)
-struct ops | 5.6 | [`85d33df357b6`](https://github.com/torvalds/linux/commit/85d33df357b634649ddbe0a20fd2d0fc5732c3cb)
-ring buffer | 5.8 | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
-inode storage | 5.10 | [`8ea636848aca`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8ea636848aca35b9f97c5b5dee30225cf2dd0fe6)
-task storage | 5.11 | [`4cf1bc1f1045`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4cf1bc1f10452065a29d576fc5693fc4fab5b919)
+ Map type | Kernel version | Commit | Enum
+----------|----------------|--------|------
+Hash                            | 3.19 | [`0f8e4bd8a1fc`](https://github.com/torvalds/linux/commit/0f8e4bd8a1fc8c4185f1630061d0a1f2d197a475) | BPF_MAP_TYPE_HASH
+Array                           | 3.19 | [`28fbcfa08d8e`](https://github.com/torvalds/linux/commit/28fbcfa08d8ed7c5a50d41a0433aad222835e8e3) | BPF_MAP_TYPE_ARRAY
+Prog array                      | 4.2  | [`04fd61ab36ec`](https://github.com/torvalds/linux/commit/04fd61ab36ec065e194ab5e74ae34a5240d992bb) | BPF_MAP_TYPE_PROG_ARRAY
+Perf events                     | 4.3  | [`ea317b267e9d`](https://github.com/torvalds/linux/commit/ea317b267e9d03a8241893aa176fba7661d07579) | BPF_MAP_TYPE_PERF_EVENT_ARRAY
+Per-CPU hash                    | 4.6  | [`824bd0ce6c7c`](https://github.com/torvalds/linux/commit/824bd0ce6c7c43a9e1e210abf124958e54d88342) | BPF_MAP_TYPE_PERCPU_HASH
+Per-CPU array                   | 4.6  | [`a10423b87a7e`](https://github.com/torvalds/linux/commit/a10423b87a7eae75da79ce80a8d9475047a674ee) | BPF_MAP_TYPE_PERCPU_ARRAY
+Stack trace                     | 4.6  | [`d5a3b1f69186`](https://github.com/torvalds/linux/commit/d5a3b1f691865be576c2bffa708549b8cdccda19) | BPF_MAP_TYPE_STACK_TRACE
+cgroup array                    | 4.8  | [`4ed8ec521ed5`](https://github.com/torvalds/linux/commit/4ed8ec521ed57c4e207ad464ca0388776de74d4b) | BPF_MAP_TYPE_CGROUP_ARRAY
+LRU hash                        | 4.10 | [`29ba732acbee`](https://github.com/torvalds/linux/commit/29ba732acbeece1e34c68483d1ec1f3720fa1bb3) [`3a08c2fd7634`](https://github.com/torvalds/linux/commit/3a08c2fd763450a927d1130de078d6f9e74944fb) | BPF_MAP_TYPE_LRU_HASH
+LRU per-CPU hash                | 4.10 | [`8f8449384ec3`](https://github.com/torvalds/linux/commit/8f8449384ec364ba2a654f11f94e754e4ff719e0) [`961578b63474`](https://github.com/torvalds/linux/commit/961578b63474d13ad0e2f615fcc2901c5197dda6) | BPF_MAP_TYPE_LRU_PERCPU_HASH
+LPM trie (longest-prefix match) | 4.11 | [`b95a5c4db09b`](https://github.com/torvalds/linux/commit/b95a5c4db09bc7c253636cb84dc9b12c577fd5a0) | BPF_MAP_TYPE_LPM_TRIE
+Array of maps                   | 4.12 | [`56f668dfe00d`](https://github.com/torvalds/linux/commit/56f668dfe00dcf086734f1c42ea999398fad6572) | BPF_MAP_TYPE_ARRAY_OF_MAPS
+Hash of maps                    | 4.12 | [`bcc6b1b7ebf8`](https://github.com/torvalds/linux/commit/bcc6b1b7ebf857a9fe56202e2be3361131588c15) | BPF_MAP_TYPE_HASH_OF_MAPS
+Netdevice references (array)    | 4.14 | [`546ac1ffb70d`](https://github.com/torvalds/linux/commit/546ac1ffb70d25b56c1126940e5ec639c4dd7413) | BPF_MAP_TYPE_DEVMAP
+Socket references (array)       | 4.14 | [`174a79ff9515`](https://github.com/torvalds/linux/commit/174a79ff9515f400b9a6115643dafd62a635b7e6) | BPF_MAP_TYPE_SOCKMAP
+CPU references                  | 4.15 | [`6710e1126934`](https://github.com/torvalds/linux/commit/6710e1126934d8b4372b4d2f9ae1646cd3f151bf) | BPF_MAP_TYPE_CPUMAP
+AF_XDP socket (XSK) references  | 4.18 | [`fbfc504a24f5`](https://github.com/torvalds/linux/commit/fbfc504a24f53f7ebe128ab55cb5dba634f4ece8) | BPF_MAP_TYPE_XSKMAP
+Socket references (hashmap)     | 4.18 | [`81110384441a`](https://github.com/torvalds/linux/commit/81110384441a59cff47430f20f049e69b98c17f4) | BPF_MAP_TYPE_SOCKHASH
+cgroup storage                  | 4.19 | [`de9cbbaadba5`](https://github.com/torvalds/linux/commit/de9cbbaadba5adf88a19e46df61f7054000838f6) | BPF_MAP_TYPE_CGROUP_STORAGE
+reuseport sockarray             | 4.19 | [`5dc4c4b7d4e8`](https://github.com/torvalds/linux/commit/5dc4c4b7d4e8115e7cde96a030f98cb3ab2e458c) | BPF_MAP_TYPE_REUSEPORT_SOCKARRAY
+precpu cgroup storage           | 4.20 | [`b741f1630346`](https://github.com/torvalds/linux/commit/b741f1630346defcbc8cc60f1a2bdae8b3b0036f) | BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE
+queue                           | 4.20 | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92) | BPF_MAP_TYPE_QUEUE
+stack                           | 4.20 | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92) | BPF_MAP_TYPE_STACK
+socket local storage            | 5.2  | [`6ac99e8f23d4`](https://github.com/torvalds/linux/commit/6ac99e8f23d4b10258406ca0dd7bffca5f31da9d) | BPF_MAP_TYPE_SK_STORAGE
+Netdevice references (hashmap)  | 5.4  | [`6f9d451ab1a3`](https://github.com/torvalds/linux/commit/6f9d451ab1a33728adb72d7ff66a7b374d665176) | BPF_MAP_TYPE_DEVMAP_HASH
+struct ops                      | 5.6  | [`85d33df357b6`](https://github.com/torvalds/linux/commit/85d33df357b634649ddbe0a20fd2d0fc5732c3cb) | BPF_MAP_TYPE_STRUCT_OPS
+ring buffer                     | 5.8  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab) | BPF_MAP_TYPE_RINGBUF
+inode storage                   | 5.10 | [`8ea636848aca`](https://github.com/torvalds/linux/commit/8ea636848aca35b9f97c5b5dee30225cf2dd0fe6) | BPF_MAP_TYPE_INODE_STORAGE
+task storage                    | 5.11 | [`4cf1bc1f1045`](https://github.com/torvalds/linux/commit/4cf1bc1f10452065a29d576fc5693fc4fab5b919) | BPF_MAP_TYPE_TASK_STORAGE
+Bloom filter                    | 5.16 | [`9330986c0300`](https://github.com/torvalds/linux/commit/9330986c03006ab1d33d243b7cfe598a7a3c1baa) | BPF_MAP_TYPE_BLOOM_FILTER
+user ringbuf                    | 6.1  | [`583c1f420173`](https://github.com/torvalds/linux/commit/583c1f420173f7d84413a1a1fbf5109d798b4faa) | BPF_MAP_TYPE_USER_RINGBUF
 
-### Table userspace API
+### Map userspace API
 
 Some (but not all) of these *API features* translate to a subcommand beginning with `BPF_MAP_`.
 The list of subcommands supported in your kernel can be found in file
-[`include/uapi/linux/bpf.h`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/bpf.h):
+[`include/uapi/linux/bpf.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h):
 
     git grep -W 'bpf_cmd {' include/uapi/linux/bpf.h
 
 Feature | Kernel version | Commit
 --------|----------------|-------
-Basic operations (lookup, update, delete, `GET_NEXT_KEY`) | 3.18 | [`db20fd2b0108`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=db20fd2b01087bdfbe30bce314a198eefedcc42e)
-Pass flags to `UPDATE_ELEM` | 3.19 | [`3274f52073d8`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3274f52073d88b62f3c5ace82ae9d48546232e72)
-Pre-alloc map memory by default | 4.6 | [`6c9059817432`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6c90598174322b8888029e40dd84a4eb01f56afe)
-Pass `NULL` to `GET_NEXT_KEY` | 4.12 | [`8fe45924387b`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8fe45924387be6b5c1be59a7eb330790c61d5d10)
-Creation: select NUMA node | 4.14 | [`96eabe7a40aa`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96eabe7a40aa17e613cf3db2c742ee8b1fc764d0)
-Restrict access from syscall side | 4.15 | [`6e71b04a8224`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e71b04a82248ccf13a94b85cbc674a9fefe53f5)
-Creation: specify map name | 4.15 | [`ad5b177bd73f`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ad5b177bd73f5107d97c36f56395c4281fb6f089)
-`LOOKUP_AND_DELETE_ELEM` | 4.20 | [`bd513cd08f10`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bd513cd08f10cbe28856f99ae951e86e86803861)
-Creation: `BPF_F_ZERO_SEED` | 5.0 | [`96b3b6c9091d`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96b3b6c9091d23289721350e32c63cc8749686be)
-`BPF_F_LOCK` flag for lookup / update | 5.1 | [`96049f3afd50`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96049f3afd50fe8db69fa0068cdca822e747b1e4)
-Restrict access from BPF side | 5.2 | [`591fe9888d78`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=591fe9888d7809d9ee5c828020b6c6ae27c37229)
-`FREEZE` | 5.2 | [`87df15de441b`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=87df15de441bd4add7876ef584da8cabdd9a042a)
-mmap() support for array maps | 5.5 | [`fc9702273e2e`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fc9702273e2edb90400a34b3be76f7b08fa3344b)
-`LOOKUP_BATCH` | 5.6 | [`cb4d03ab499d`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cb4d03ab499d4c040f4ab6fd4389d2b49f42b5a5)
-`UPDATE_BATCH`, `DELETE_BATCH` | 5.6 | [`aa2e93b8e58e`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa2e93b8e58e18442edfb2427446732415bc215e)
-`LOOKUP_AND_DELETE_BATCH` | 5.6 | [`057996380a42`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=057996380a42bb64ccc04383cfa9c0ace4ea11f0)
-`LOOKUP_AND_DELETE_ELEM` support for hash maps | 5.14 | [`3e87f192b405`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3e87f192b405960c0fe83e0925bd0dadf4f8cf43)
+Basic operations (lookup, update, delete, `GET_NEXT_KEY`) | 3.18 | [`db20fd2b0108`](https://github.com/torvalds/linux/commit/db20fd2b01087bdfbe30bce314a198eefedcc42e)
+Pass flags to `UPDATE_ELEM` | 3.19 | [`3274f52073d8`](https://github.com/torvalds/linux/commit/3274f52073d88b62f3c5ace82ae9d48546232e72)
+Pre-alloc map memory by default | 4.6 | [`6c9059817432`](https://github.com/torvalds/linux/commit/6c90598174322b8888029e40dd84a4eb01f56afe)
+Pass `NULL` to `GET_NEXT_KEY` | 4.12 | [`8fe45924387b`](https://github.com/torvalds/linux/commit/8fe45924387be6b5c1be59a7eb330790c61d5d10)
+Creation: select NUMA node | 4.14 | [`96eabe7a40aa`](https://github.com/torvalds/linux/commit/96eabe7a40aa17e613cf3db2c742ee8b1fc764d0)
+Restrict access from syscall side | 4.15 | [`6e71b04a8224`](https://github.com/torvalds/linux/commit/6e71b04a82248ccf13a94b85cbc674a9fefe53f5)
+Creation: specify map name | 4.15 | [`ad5b177bd73f`](https://github.com/torvalds/linux/commit/ad5b177bd73f5107d97c36f56395c4281fb6f089)
+`LOOKUP_AND_DELETE_ELEM` | 4.20 | [`bd513cd08f10`](https://github.com/torvalds/linux/commit/bd513cd08f10cbe28856f99ae951e86e86803861)
+Creation: `BPF_F_ZERO_SEED` | 5.0 | [`96b3b6c9091d`](https://github.com/torvalds/linux/commit/96b3b6c9091d23289721350e32c63cc8749686be)
+`BPF_F_LOCK` flag for lookup / update | 5.1 | [`96049f3afd50`](https://github.com/torvalds/linux/commit/96049f3afd50fe8db69fa0068cdca822e747b1e4)
+Restrict access from BPF side | 5.2 | [`591fe9888d78`](https://github.com/torvalds/linux/commit/591fe9888d7809d9ee5c828020b6c6ae27c37229)
+`FREEZE` | 5.2 | [`87df15de441b`](https://github.com/torvalds/linux/commit/87df15de441bd4add7876ef584da8cabdd9a042a)
+mmap() support for array maps | 5.5 | [`fc9702273e2e`](https://github.com/torvalds/linux/commit/fc9702273e2edb90400a34b3be76f7b08fa3344b)
+`LOOKUP_BATCH` | 5.6 | [`cb4d03ab499d`](https://github.com/torvalds/linux/commit/cb4d03ab499d4c040f4ab6fd4389d2b49f42b5a5)
+`UPDATE_BATCH`, `DELETE_BATCH` | 5.6 | [`aa2e93b8e58e`](https://github.com/torvalds/linux/commit/aa2e93b8e58e18442edfb2427446732415bc215e)
+`LOOKUP_AND_DELETE_BATCH` | 5.6 | [`057996380a42`](https://github.com/torvalds/linux/commit/057996380a42bb64ccc04383cfa9c0ace4ea11f0)
+`LOOKUP_AND_DELETE_ELEM` support for hash maps | 5.14 | [`3e87f192b405`](https://github.com/torvalds/linux/commit/3e87f192b405960c0fe83e0925bd0dadf4f8cf43)
 
 ## XDP
 
@@ -165,42 +207,40 @@
 
 Feature / Driver | Kernel version | Commit
 -----------------|----------------|-------
-XDP core architecture | 4.8 | [`6a773a15a1e8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6a773a15a1e8874e5eccd2f29190c31085912c95)
-Action: drop | 4.8 | [`6a773a15a1e8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6a773a15a1e8874e5eccd2f29190c31085912c95)
-Action: pass on to stack | 4.8 | [`6a773a15a1e8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6a773a15a1e8874e5eccd2f29190c31085912c95)
-Action: direct forwarding (on same port) | 4.8 | [`6ce96ca348a9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6ce96ca348a9e949f8c43f4d3e98db367d93cffd)
-Direct packet data write | 4.8 | [`4acf6c0b84c9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4acf6c0b84c91243c705303cd9ff16421914150d)
-Mellanox `mlx4` driver | 4.8 | [`47a38e155037`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=47a38e155037f417c5740e24ccae6482aedf4b68)
-Mellanox `mlx5` driver | 4.9 | [`86994156c736`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=86994156c736978d113e7927455d4eeeb2128b9f)
-Netronome `nfp` driver | 4.10 | [`ecd63a0217d5`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ecd63a0217d5f1e8a92f7516f5586d1177b95de2)
-QLogic (Cavium) `qed*` drivers | 4.10 | [`496e05170958`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=496e051709588f832d7a6a420f44f8642b308a87)
-`virtio_net` driver | 4.10 | [`f600b6905015`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f600b690501550b94e83e07295d9c8b9c4c39f4e)
-Broadcom `bnxt_en` driver | 4.11 | [`c6d30e8391b8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c6d30e8391b85e00eb544e6cf047ee0160ee9938)
-Intel `ixgbe*` drivers | 4.12 | [`924708081629`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9247080816297de4e31abb684939c0e53e3a8a67)
-Cavium `thunderx` driver | 4.12 | [`05c773f52b96`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=05c773f52b96ef3fbc7d9bfa21caadc6247ef7a8)
-Generic XDP | 4.12 | [`b5cdae3291f7`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b5cdae3291f7be7a34e75affe4c0ec1f7f328b64)
-Intel `i40e` driver | 4.13 | [`0c8493d90b6b`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=0c8493d90b6bb0f5c4fe9217db8f7203f24c0f28)
-Action: redirect | 4.14 | [`6453073987ba`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6453073987ba392510ab6c8b657844a9312c67f7)
-Support for tap | 4.14 | [`761876c857cb`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=761876c857cb2ef8489fbee01907151da902af91)
-Support for veth | 4.14 | [`d445516966dc`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d445516966dcb2924741b13b27738b54df2af01a)
-Intel `ixgbevf` driver | 4.17 | [`c7aec59657b6`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c7aec59657b60f3a29fc7d3274ebefd698879301)
-Freescale `dpaa2` driver | 5.0 | [`7e273a8ebdd3`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7e273a8ebdd3b83f94eb8b49fc8ee61464f47cc2)
-Socionext `netsec` driver | 5.3 | [`ba2b232108d3`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ba2b232108d3c2951bab02930a00f23b0cffd5af)
-TI `cpsw` driver | 5.3 | [`9ed4050c0d75`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9ed4050c0d75768066a07cf66eef4f8dc9d79b52)
-Intel `ice` driver |5.5| [`efc2214b6047`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=efc2214b6047b6f5b4ca53151eba62521b9452d6)
-Solarflare `sfc` driver | 5.5 | [`eb9a36be7f3e`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=eb9a36be7f3ec414700af9a616f035eda1f1e63e)
-Marvell `mvneta` driver | 5.5 | [`0db51da7a8e9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0db51da7a8e99f0803ec3a8e25c1a66234a219cb)
-Microsoft `hv_netvsc` driver | 5.6 | [`351e1581395f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=351e1581395fcc7fb952bbd7dda01238f69968fd)
-Amazon `ena` driver | 5.6 | [`838c93dc5449`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=838c93dc5449e5d6378bae117b0a65a122cf7361)
-`xen-netfront` driver | 5.9 | [`6c5aa6fc4def`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6c5aa6fc4defc2a0977a2c59e4710d50fa1e834c)
-Intel `igb` driver | 5.10 | [`9cbc948b5a20`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9cbc948b5a20c9c054d9631099c0426c16da546b)
-Intel `e1000` driver | | [Not upstream yet](https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git/commit/?h=xdp&id=0afee87cfc800bf3317f4dc8847e6f36539b820c)
-Intel `e1000e` driver | | [Not planned for upstream at this time](https://github.com/adjavon/e1000e_xdp)
+XDP core architecture | 4.8 | [`6a773a15a1e8`](https://github.com/torvalds/linux/commit/6a773a15a1e8874e5eccd2f29190c31085912c95)
+Action: drop | 4.8 | [`6a773a15a1e8`](https://github.com/torvalds/linux/commit/6a773a15a1e8874e5eccd2f29190c31085912c95)
+Action: pass on to stack | 4.8 | [`6a773a15a1e8`](https://github.com/torvalds/linux/commit/6a773a15a1e8874e5eccd2f29190c31085912c95)
+Action: direct forwarding (on same port) | 4.8 | [`6ce96ca348a9`](https://github.com/torvalds/linux/commit/6ce96ca348a9e949f8c43f4d3e98db367d93cffd)
+Direct packet data write | 4.8 | [`4acf6c0b84c9`](https://github.com/torvalds/linux/commit/4acf6c0b84c91243c705303cd9ff16421914150d)
+Mellanox `mlx4` driver | 4.8 | [`47a38e155037`](https://github.com/torvalds/linux/commit/47a38e155037f417c5740e24ccae6482aedf4b68)
+Mellanox `mlx5` driver | 4.9 | [`86994156c736`](https://github.com/torvalds/linux/commit/86994156c736978d113e7927455d4eeeb2128b9f)
+Netronome `nfp` driver | 4.10 | [`ecd63a0217d5`](https://github.com/torvalds/linux/commit/ecd63a0217d5f1e8a92f7516f5586d1177b95de2)
+QLogic (Cavium) `qed*` drivers | 4.10 | [`496e05170958`](https://github.com/torvalds/linux/commit/496e051709588f832d7a6a420f44f8642b308a87)
+`virtio_net` driver | 4.10 | [`f600b6905015`](https://github.com/torvalds/linux/commit/f600b690501550b94e83e07295d9c8b9c4c39f4e)
+Broadcom `bnxt_en` driver | 4.11 | [`c6d30e8391b8`](https://github.com/torvalds/linux/commit/c6d30e8391b85e00eb544e6cf047ee0160ee9938)
+Intel `ixgbe*` drivers | 4.12 | [`924708081629`](https://github.com/torvalds/linux/commit/9247080816297de4e31abb684939c0e53e3a8a67)
+Cavium `thunderx` driver | 4.12 | [`05c773f52b96`](https://github.com/torvalds/linux/commit/05c773f52b96ef3fbc7d9bfa21caadc6247ef7a8)
+Generic XDP | 4.12 | [`b5cdae3291f7`](https://github.com/torvalds/linux/commit/b5cdae3291f7be7a34e75affe4c0ec1f7f328b64)
+Intel `i40e` driver | 4.13 | [`0c8493d90b6b`](https://github.com/torvalds/linux/commit/0c8493d90b6bb0f5c4fe9217db8f7203f24c0f28)
+Action: redirect | 4.14 | [`6453073987ba`](https://github.com/torvalds/linux/commit/6453073987ba392510ab6c8b657844a9312c67f7)
+Support for tap | 4.14 | [`761876c857cb`](https://github.com/torvalds/linux/commit/761876c857cb2ef8489fbee01907151da902af91)
+Support for veth | 4.14 | [`d445516966dc`](https://github.com/torvalds/linux/commit/d445516966dcb2924741b13b27738b54df2af01a)
+Intel `ixgbevf` driver | 4.17 | [`c7aec59657b6`](https://github.com/torvalds/linux/commit/c7aec59657b60f3a29fc7d3274ebefd698879301)
+Freescale `dpaa2` driver | 5.0 | [`7e273a8ebdd3`](https://github.com/torvalds/linux/commit/7e273a8ebdd3b83f94eb8b49fc8ee61464f47cc2)
+Socionext `netsec` driver | 5.3 | [`ba2b232108d3`](https://github.com/torvalds/linux/commit/ba2b232108d3c2951bab02930a00f23b0cffd5af)
+TI `cpsw` driver | 5.3 | [`9ed4050c0d75`](https://github.com/torvalds/linux/commit/9ed4050c0d75768066a07cf66eef4f8dc9d79b52)
+Intel `ice` driver |5.5| [`efc2214b6047`](https://github.com/torvalds/linux/commit/efc2214b6047b6f5b4ca53151eba62521b9452d6)
+Solarflare `sfc` driver | 5.5 | [`eb9a36be7f3e`](https://github.com/torvalds/linux/commit/eb9a36be7f3ec414700af9a616f035eda1f1e63e)
+Marvell `mvneta` driver | 5.5 | [`0db51da7a8e9`](https://github.com/torvalds/linux/commit/0db51da7a8e99f0803ec3a8e25c1a66234a219cb)
+Microsoft `hv_netvsc` driver | 5.6 | [`351e1581395f`](https://github.com/torvalds/linux/commit/351e1581395fcc7fb952bbd7dda01238f69968fd)
+Amazon `ena` driver | 5.6 | [`838c93dc5449`](https://github.com/torvalds/linux/commit/838c93dc5449e5d6378bae117b0a65a122cf7361)
+`xen-netfront` driver | 5.9 | [`6c5aa6fc4def`](https://github.com/torvalds/linux/commit/6c5aa6fc4defc2a0977a2c59e4710d50fa1e834c)
+Intel `igb` driver | 5.10 | [`9cbc948b5a20`](https://github.com/torvalds/linux/commit/9cbc948b5a20c9c054d9631099c0426c16da546b)
 
 ## Helpers
 
 The list of helpers supported in your kernel can be found in file
-[`include/uapi/linux/bpf.h`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/bpf.h):
+[`include/uapi/linux/bpf.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h):
 
     git grep '	FN(' include/uapi/linux/bpf.h
 
@@ -208,199 +248,217 @@
 
 Helper | Kernel version | License | Commit |
 -------|----------------|---------|--------|
-`BPF_FUNC_bind()` | 4.17 |  | [`d74bad4e74ee`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d74bad4e74ee373787a9ae24197c17b7cdc428d5) |
+`BPF_FUNC_bind()` | 4.17 |  | [`d74bad4e74ee`](https://github.com/torvalds/linux/commit/d74bad4e74ee373787a9ae24197c17b7cdc428d5) |
 `BPF_FUNC_bprm_opts_set()` | 5.11 |  | [`3f6719c7b62f`](https://github.com/torvalds/linux/commit/3f6719c7b62f0327c9091e26d0da10e65668229e)
 `BPF_FUNC_btf_find_by_name_kind()` | 5.14 |  | [`3d78417b60fb`](https://github.com/torvalds/linux/commit/3d78417b60fba249cc555468cb72d96f5cde2964)
+`BPF_FUNC_cgrp_storage_delete()` | 6.2 | | [`c4bcfb38a95e`](https://github.com/torvalds/linux/commit/c4bcfb38a95edb1021a53f2d0356a78120ecfbe4)
+`BPF_FUNC_cgrp_storage_get()` | 6.2 | | [`c4bcfb38a95e`](https://github.com/torvalds/linux/commit/c4bcfb38a95edb1021a53f2d0356a78120ecfbe4)
 `BPF_FUNC_check_mtu()` | 5.12 |  | [`34b2021cc616`](https://github.com/torvalds/linux/commit/34b2021cc61642d61c3cf943d9e71925b827941b)
-`BPF_FUNC_clone_redirect()` | 4.2 |  | [`3896d655f4d4`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3896d655f4d491c67d669a15f275a39f713410f8)
-`BPF_FUNC_copy_from_user()` | 5.10 |  | [`07be4c4a3e7a`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=07be4c4a3e7a0db148e44b16c5190e753d1c8569)
-`BPF_FUNC_copy_from_user_task()` | 5.18 | GPL | [`376040e47334`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=376040e47334c6dc6a939a32197acceb00fe4acf)
-`BPF_FUNC_csum_diff()` | 4.6 |  | [`7d672345ed29`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7d672345ed295b1356a5d9f7111da1d1d7d65867)
+`BPF_FUNC_clone_redirect()` | 4.2 |  | [`3896d655f4d4`](https://github.com/torvalds/linux/commit/3896d655f4d491c67d669a15f275a39f713410f8)
+`BPF_FUNC_copy_from_user()` | 5.10 |  | [`07be4c4a3e7a`](https://github.com/torvalds/linux/commit/07be4c4a3e7a0db148e44b16c5190e753d1c8569)
+`BPF_FUNC_copy_from_user_task()` | 5.18 | GPL | [`376040e47334`](https://github.com/torvalds/linux/commit/376040e47334c6dc6a939a32197acceb00fe4acf)
+`BPF_FUNC_csum_diff()` | 4.6 |  | [`7d672345ed29`](https://github.com/torvalds/linux/commit/7d672345ed295b1356a5d9f7111da1d1d7d65867)
 `BPF_FUNC_csum_level()` | 5.7 |  | [`7cdec54f9713`](https://github.com/torvalds/linux/commit/7cdec54f9713256bb170873a1fc5c75c9127c9d2)
-`BPF_FUNC_csum_update()` | 4.9 |  | [`36bbef52c7eb`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=36bbef52c7eb646ed6247055a2acd3851e317857)
-`BPF_FUNC_current_task_under_cgroup()` | 4.9 |  | [`60d20f9195b2`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=60d20f9195b260bdf0ac10c275ae9f6016f9c069)
-`BPF_FUNC_d_path()` | 5.10 |  | [`6e22ab9da793`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=6e22ab9da79343532cd3cde39df25e5a5478c692)
-`BPF_FUNC_fib_lookup()` | 4.18 | GPL | [`87f5fc7e48dd`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=87f5fc7e48dd3175b30dd03b41564e1a8e136323)
-`BPF_FUNC_find_vma()` | 5.17 | | [`7c7e3d31e785`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=7c7e3d31e7856a8260a254f8c71db416f7f9f5a1)
-`BPF_FUNC_for_each_map_elem()` | 5.13 | | [`69c087ba6225`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=69c087ba6225b574afb6e505b72cb75242a3d844)
+`BPF_FUNC_csum_update()` | 4.9 |  | [`36bbef52c7eb`](https://github.com/torvalds/linux/commit/36bbef52c7eb646ed6247055a2acd3851e317857)
+`BPF_FUNC_current_task_under_cgroup()` | 4.9 |  | [`60d20f9195b2`](https://github.com/torvalds/linux/commit/60d20f9195b260bdf0ac10c275ae9f6016f9c069)
+`BPF_FUNC_d_path()` | 5.10 |  | [`6e22ab9da793`](https://github.com/torvalds/linux/commit/6e22ab9da79343532cd3cde39df25e5a5478c692)
+`BPF_FUNC_dynptr_data()` | 5.19 |  | [`34d4ef5775f7`](https://github.com/torvalds/linux/commit/34d4ef5775f776ec4b0d53a02d588bf3195cada6)
+`BPF_FUNC_dynptr_from_mem()` | 5.19 |  | [`263ae152e962`](https://github.com/torvalds/linux/commit/263ae152e96253f40c2c276faad8629e096b3bad)
+`BPF_FUNC_dynptr_read()` | 5.19 |  | [`13bbbfbea759`](https://github.com/torvalds/linux/commit/13bbbfbea7598ea9f8d9c3d73bf053bb57f9c4b2)
+`BPF_FUNC_dynptr_write()` | 5.19 |  | [`13bbbfbea759`](https://github.com/torvalds/linux/commit/13bbbfbea7598ea9f8d9c3d73bf053bb57f9c4b2)
+`BPF_FUNC_fib_lookup()` | 4.18 | GPL | [`87f5fc7e48dd`](https://github.com/torvalds/linux/commit/87f5fc7e48dd3175b30dd03b41564e1a8e136323)
+`BPF_FUNC_find_vma()` | 5.17 | | [`7c7e3d31e785`](https://github.com/torvalds/linux/commit/7c7e3d31e7856a8260a254f8c71db416f7f9f5a1)
+`BPF_FUNC_for_each_map_elem()` | 5.13 | | [`69c087ba6225`](https://github.com/torvalds/linux/commit/69c087ba6225b574afb6e505b72cb75242a3d844)
 `BPF_FUNC_get_attach_cookie()` | 5.15 |  | [`7adfc6c9b315`](https://github.com/torvalds/linux/commit/7adfc6c9b315e174cf8743b21b7b691c8766791b)
-`BPF_FUNC_get_branch_snapshot()` | 5.16 | GPL | [`856c02dbce4f`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=856c02dbce4f8d6a5644083db22c11750aa11481)
+`BPF_FUNC_get_branch_snapshot()` | 5.16 | GPL | [`856c02dbce4f`](https://github.com/torvalds/linux/commit/856c02dbce4f8d6a5644083db22c11750aa11481)
 `BPF_FUNC_get_current_ancestor_cgroup_id()` | 5.6 |  | [`b4490c5c4e02`](https://github.com/torvalds/linux/commit/b4490c5c4e023f09b7d27c9a9d3e7ad7d09ea6bf)
-`BPF_FUNC_get_cgroup_classid()` | 4.3 |  | [`8d20aabe1c76`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8d20aabe1c76cccac544d9fcc3ad7823d9e98a2d)
+`BPF_FUNC_get_cgroup_classid()` | 4.3 |  | [`8d20aabe1c76`](https://github.com/torvalds/linux/commit/8d20aabe1c76cccac544d9fcc3ad7823d9e98a2d)
 `BPF_FUNC_get_current_cgroup_id()` | 4.18 |  | [`bf6fa2c893c5`](https://github.com/torvalds/linux/commit/bf6fa2c893c5237b48569a13fa3c673041430b6c)
-`BPF_FUNC_get_current_comm()` | 4.2 |  | [`ffeedafbf023`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
-`BPF_FUNC_get_current_pid_tgid()` | 4.2 |  | [`ffeedafbf023`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
-`BPF_FUNC_get_current_task()` | 4.8 | GPL | [`606274c5abd8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=606274c5abd8e245add01bc7145a8cbb92b69ba8)
+`BPF_FUNC_get_current_comm()` | 4.2 |  | [`ffeedafbf023`](https://github.com/torvalds/linux/commit/ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
+`BPF_FUNC_get_current_pid_tgid()` | 4.2 |  | [`ffeedafbf023`](https://github.com/torvalds/linux/commit/ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
+`BPF_FUNC_get_current_task()` | 4.8 | GPL | [`606274c5abd8`](https://github.com/torvalds/linux/commit/606274c5abd8e245add01bc7145a8cbb92b69ba8)
 `BPF_FUNC_get_current_task_btf()` | 5.11 | GPL | [`3ca1032ab7ab`](https://github.com/torvalds/linux/commit/3ca1032ab7ab010eccb107aa515598788f7d93bb)
-`BPF_FUNC_get_current_uid_gid()` | 4.2 |  | [`ffeedafbf023`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
-`BPF_FUNC_get_func_arg()` | 5.17 |  | [`f92c1e183604`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=f92c1e183604c20ce00eb889315fdaa8f2d9e509)
-`BPF_FUNC_get_func_arg_cnt()` | 5.17 |  | [`f92c1e183604`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=f92c1e183604c20ce00eb889315fdaa8f2d9e509)
-`BPF_FUNC_get_func_ip()` | 5.15 |  | [`5d8b583d04ae`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=5d8b583d04aedb3bd5f6d227a334c210c7d735f9)
-`BPF_FUNC_get_func_ret()` | 5.17 |  | [`f92c1e183604`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=f92c1e183604c20ce00eb889315fdaa8f2d9e509)
-`BPF_FUNC_get_retval()` | 5.18 |  | [`b44123b4a3dc`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=b44123b4a3dcad4664d3a0f72c011ffd4c9c4d93)
-`BPF_FUNC_get_hash_recalc()` | 4.8 |  | [`13c5c240f789`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=13c5c240f789bbd2bcacb14a23771491485ae61f)
-`BPF_FUNC_get_listener_sock()` | 5.1 |  | [`dbafd7ddd623`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/dbafd7ddd62369b2f3926ab847cbf8fc40e800b7)
+`BPF_FUNC_get_current_uid_gid()` | 4.2 |  | [`ffeedafbf023`](https://github.com/torvalds/linux/commit/ffeedafbf0236f03aeb2e8db273b3e5ae5f5bc89)
+`BPF_FUNC_get_func_arg()` | 5.17 |  | [`f92c1e183604`](https://github.com/torvalds/linux/commit/f92c1e183604c20ce00eb889315fdaa8f2d9e509)
+`BPF_FUNC_get_func_arg_cnt()` | 5.17 |  | [`f92c1e183604`](https://github.com/torvalds/linux/commit/f92c1e183604c20ce00eb889315fdaa8f2d9e509)
+`BPF_FUNC_get_func_ip()` | 5.15 |  | [`5d8b583d04ae`](https://github.com/torvalds/linux/commit/5d8b583d04aedb3bd5f6d227a334c210c7d735f9)
+`BPF_FUNC_get_func_ret()` | 5.17 |  | [`f92c1e183604`](https://github.com/torvalds/linux/commit/f92c1e183604c20ce00eb889315fdaa8f2d9e509)
+`BPF_FUNC_get_retval()` | 5.18 |  | [`b44123b4a3dc`](https://github.com/torvalds/linux/commit/b44123b4a3dcad4664d3a0f72c011ffd4c9c4d93)
+`BPF_FUNC_get_hash_recalc()` | 4.8 |  | [`13c5c240f789`](https://github.com/torvalds/linux/commit/13c5c240f789bbd2bcacb14a23771491485ae61f)
+`BPF_FUNC_get_listener_sock()` | 5.1 |  | [`dbafd7ddd623`](https://github.com/torvalds/linux/commit/dbafd7ddd62369b2f3926ab847cbf8fc40e800b7)
 `BPF_FUNC_get_local_storage()` | 4.19 |  | [`cd3394317653`](https://github.com/torvalds/linux/commit/cd3394317653837e2eb5c5d0904a8996102af9fc)
 `BPF_FUNC_get_netns_cookie()` | 5.7 |  | [`f318903c0bf4`](https://github.com/torvalds/linux/commit/f318903c0bf42448b4c884732df2bbb0ef7a2284)
 `BPF_FUNC_get_ns_current_pid_tgid()` | 5.7 |  | [`b4490c5c4e02`](https://github.com/torvalds/linux/commit/b4490c5c4e023f09b7d27c9a9d3e7ad7d09ea6bf)
-`BPF_FUNC_get_numa_node_id()` | 4.10 |  | [`2d0e30c30f84`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2d0e30c30f84d08dc16f0f2af41f1b8a85f0755e)
-`BPF_FUNC_get_prandom_u32()` | 4.1 |  | [`03e69b508b6f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=03e69b508b6f7c51743055c9f61d1dfeadf4b635)
-`BPF_FUNC_get_route_realm()` | 4.4 |  | [`c46646d0484f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c46646d0484f5d08e2bede9b45034ba5b8b489cc)
-`BPF_FUNC_get_smp_processor_id()` | 4.1 |  | [`c04167ce2ca0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c04167ce2ca0ecaeaafef006cb0d65cf01b68e42)
-`BPF_FUNC_get_socket_cookie()` | 4.12 |  | [`91b8270f2a4d`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=91b8270f2a4d1d9b268de90451cdca63a70052d6)
-`BPF_FUNC_get_socket_uid()` | 4.12 |  | [`6acc5c291068`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6acc5c2910689fc6ee181bf63085c5efff6a42bd)
-`BPF_FUNC_get_stack()` | 4.18 | GPL | [`de2ff05f48af`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=de2ff05f48afcde816ff4edb217417f62f624ab5)
-`BPF_FUNC_get_stackid()` | 4.6 | GPL | [`d5a3b1f69186`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d5a3b1f691865be576c2bffa708549b8cdccda19)
-`BPF_FUNC_get_task_stack()` | 5.9 | | [`fa28dcb82a38`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/fa28dcb82a38f8e3993b0fae9106b1a80b59e4f0)
-`BPF_FUNC_getsockopt()` | 4.15 |  | [`cd86d1fd2102`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=cd86d1fd21025fdd6daf23d1288da405e7ad0ec6)
-`BPF_FUNC_ima_file_hash()` | 5.18 |  | [`174b16946e39`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=174b16946e39ebd369097e0f773536c91a8c1a4c)
+`BPF_FUNC_get_numa_node_id()` | 4.10 |  | [`2d0e30c30f84`](https://github.com/torvalds/linux/commit/2d0e30c30f84d08dc16f0f2af41f1b8a85f0755e)
+`BPF_FUNC_get_prandom_u32()` | 4.1 |  | [`03e69b508b6f`](https://github.com/torvalds/linux/commit/03e69b508b6f7c51743055c9f61d1dfeadf4b635)
+`BPF_FUNC_get_route_realm()` | 4.4 |  | [`c46646d0484f`](https://github.com/torvalds/linux/commit/c46646d0484f5d08e2bede9b45034ba5b8b489cc)
+`BPF_FUNC_get_smp_processor_id()` | 4.1 |  | [`c04167ce2ca0`](https://github.com/torvalds/linux/commit/c04167ce2ca0ecaeaafef006cb0d65cf01b68e42)
+`BPF_FUNC_get_socket_cookie()` | 4.12 |  | [`91b8270f2a4d`](https://github.com/torvalds/linux/commit/91b8270f2a4d1d9b268de90451cdca63a70052d6)
+`BPF_FUNC_get_socket_uid()` | 4.12 |  | [`6acc5c291068`](https://github.com/torvalds/linux/commit/6acc5c2910689fc6ee181bf63085c5efff6a42bd)
+`BPF_FUNC_get_stack()` | 4.18 | GPL | [`de2ff05f48af`](https://github.com/torvalds/linux/commit/de2ff05f48afcde816ff4edb217417f62f624ab5)
+`BPF_FUNC_get_stackid()` | 4.6 | GPL | [`d5a3b1f69186`](https://github.com/torvalds/linux/commit/d5a3b1f691865be576c2bffa708549b8cdccda19)
+`BPF_FUNC_get_task_stack()` | 5.9 | | [`fa28dcb82a38`](https://github.com/torvalds/linux/commit/fa28dcb82a38f8e3993b0fae9106b1a80b59e4f0)
+`BPF_FUNC_getsockopt()` | 4.15 |  | [`cd86d1fd2102`](https://github.com/torvalds/linux/commit/cd86d1fd21025fdd6daf23d1288da405e7ad0ec6)
+`BPF_FUNC_ima_file_hash()` | 5.18 |  | [`174b16946e39`](https://github.com/torvalds/linux/commit/174b16946e39ebd369097e0f773536c91a8c1a4c)
 `BPF_FUNC_ima_inode_hash()` | 5.11 |  | [`27672f0d280a`](https://github.com/torvalds/linux/commit/27672f0d280a3f286a410a8db2004f46ace72a17)
-`BPF_FUNC_inode_storage_delete()` | 5.10 |  | [`8ea636848aca`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=8ea636848aca35b9f97c5b5dee30225cf2dd0fe6)
-`BPF_FUNC_inode_storage_get()` | 5.10 |  | [`8ea636848aca`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=8ea636848aca35b9f97c5b5dee30225cf2dd0fe6)
-`BPF_FUNC_jiffies64()` | 5.5 |  | [`5576b991e9c1`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=5576b991e9c1a11d2cc21c4b94fc75ec27603896)
+`BPF_FUNC_inode_storage_delete()` | 5.10 |  | [`8ea636848aca`](https://github.com/torvalds/linux/commit/8ea636848aca35b9f97c5b5dee30225cf2dd0fe6)
+`BPF_FUNC_inode_storage_get()` | 5.10 |  | [`8ea636848aca`](https://github.com/torvalds/linux/commit/8ea636848aca35b9f97c5b5dee30225cf2dd0fe6)
+`BPF_FUNC_jiffies64()` | 5.5 |  | [`5576b991e9c1`](https://github.com/torvalds/linux/commit/5576b991e9c1a11d2cc21c4b94fc75ec27603896)
 `BPF_FUNC_kallsyms_lookup_name()` | 5.16 | | [`d6aef08a872b`](https://github.com/torvalds/linux/commit/d6aef08a872b9e23eecc92d0e92393473b13c497)
-`BPF_FUNC_ktime_get_boot_ns()` | 5.7 | GPL | [`71d19214776e`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/71d19214776e61b33da48f7c1b46e522c7f78221)
-`BPF_FUNC_ktime_get_coarse_ns()` | 5.11 | GPL | [`d05512618056`](https://github.com/torvalds/linux/commit/d055126180564a57fe533728a4e93d0cb53d49b3)
-`BPF_FUNC_ktime_get_ns()` | 4.1 | GPL | [`d9847d310ab4`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d9847d310ab4003725e6ed1822682e24bd406908)
-`BPF_FUNC_l3_csum_replace()` | 4.1 |  | [`91bc4822c3d6`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
-`BPF_FUNC_l4_csum_replace()` | 4.1 |  | [`91bc4822c3d6`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
-`BPF_FUNC_load_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=0813a841566f0962a5551be7749b43c45f0022a0)
-`BPF_FUNC_loop()` | 5.17 |  | [`e6f2dd0f8067`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=e6f2dd0f80674e9d5960337b3e9c2a242441b326)
-`BPF_FUNC_lwt_push_encap()` | 4.18 |  | [`fe94cc290f53`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
-`BPF_FUNC_lwt_seg6_action()` | 4.18 |  | [`fe94cc290f53`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
-`BPF_FUNC_lwt_seg6_adjust_srh()` | 4.18 |  | [`fe94cc290f53`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
-`BPF_FUNC_lwt_seg6_store_bytes()` | 4.18 |  | [`fe94cc290f53`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
-`BPF_FUNC_map_delete_elem()` | 3.19 |  | [`d0003ec01c66`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d0003ec01c667b731c139e23de3306a8b328ccf5)
-`BPF_FUNC_map_lookup_elem()` | 3.19 |  | [`d0003ec01c66`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d0003ec01c667b731c139e23de3306a8b328ccf5)
+`BPF_FUNC_kptr_xchg()` | 5.19 | | [`c0a5a21c25f3`](https://github.com/torvalds/linux/commit/c0a5a21c25f37c9fd7b36072f9968cdff1e4aa13)
+`BPF_FUNC_ktime_get_boot_ns()` | 5.8 | | [`71d19214776e`](https://github.com/torvalds/linux/commit/71d19214776e61b33da48f7c1b46e522c7f78221)
+`BPF_FUNC_ktime_get_coarse_ns()` | 5.11 | | [`d05512618056`](https://github.com/torvalds/linux/commit/d055126180564a57fe533728a4e93d0cb53d49b3)
+`BPF_FUNC_ktime_get_ns()` | 4.1 | | [`d9847d310ab4`](https://github.com/torvalds/linux/commit/d9847d310ab4003725e6ed1822682e24bd406908)
+`BPF_FUNC_ktime_get_tai_ns()` | 6.1 |  | [`c8996c98f703`](https://github.com/torvalds/linux/commit/c8996c98f703b09afe77a1d247dae691c9849dc1)
+`BPF_FUNC_l3_csum_replace()` | 4.1 |  | [`91bc4822c3d6`](https://github.com/torvalds/linux/commit/91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
+`BPF_FUNC_l4_csum_replace()` | 4.1 |  | [`91bc4822c3d6`](https://github.com/torvalds/linux/commit/91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
+`BPF_FUNC_load_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://github.com/torvalds/linux/commit/0813a841566f0962a5551be7749b43c45f0022a0)
+`BPF_FUNC_loop()` | 5.17 |  | [`e6f2dd0f8067`](https://github.com/torvalds/linux/commit/e6f2dd0f80674e9d5960337b3e9c2a242441b326)
+`BPF_FUNC_lwt_push_encap()` | 4.18 |  | [`fe94cc290f53`](https://github.com/torvalds/linux/commit/fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
+`BPF_FUNC_lwt_seg6_action()` | 4.18 |  | [`fe94cc290f53`](https://github.com/torvalds/linux/commit/fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
+`BPF_FUNC_lwt_seg6_adjust_srh()` | 4.18 |  | [`fe94cc290f53`](https://github.com/torvalds/linux/commit/fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
+`BPF_FUNC_lwt_seg6_store_bytes()` | 4.18 |  | [`fe94cc290f53`](https://github.com/torvalds/linux/commit/fe94cc290f535709d3c5ebd1e472dfd0aec7ee79)
+`BPF_FUNC_map_delete_elem()` | 3.19 |  | [`d0003ec01c66`](https://github.com/torvalds/linux/commit/d0003ec01c667b731c139e23de3306a8b328ccf5)
+`BPF_FUNC_map_lookup_elem()` | 3.19 |  | [`d0003ec01c66`](https://github.com/torvalds/linux/commit/d0003ec01c667b731c139e23de3306a8b328ccf5)
+`BPF_FUNC_map_lookup_percpu_elem()` | 5.19 |  | [`07343110b293`](https://github.com/torvalds/linux/commit/07343110b293456d30393e89b86c4dee1ac051c8)
 `BPF_FUNC_map_peek_elem()` | 4.20 |  | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92)
 `BPF_FUNC_map_pop_elem()` | 4.20 |  | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92)
 `BPF_FUNC_map_push_elem()` | 4.20 |  | [`f1a2e44a3aec`](https://github.com/torvalds/linux/commit/f1a2e44a3aeccb3ff18d3ccc0b0203e70b95bd92)
-`BPF_FUNC_map_update_elem()` | 3.19 |  | [`d0003ec01c66`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d0003ec01c667b731c139e23de3306a8b328ccf5)
-`BPF_FUNC_msg_apply_bytes()` | 4.17 |  | [`2a100317c9eb`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2a100317c9ebc204a166f16294884fbf9da074ce)
-`BPF_FUNC_msg_cork_bytes()` | 4.17 |  | [`91843d540a13`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=91843d540a139eb8070bcff8aa10089164436deb)
+`BPF_FUNC_map_update_elem()` | 3.19 |  | [`d0003ec01c66`](https://github.com/torvalds/linux/commit/d0003ec01c667b731c139e23de3306a8b328ccf5)
+`BPF_FUNC_msg_apply_bytes()` | 4.17 |  | [`2a100317c9eb`](https://github.com/torvalds/linux/commit/2a100317c9ebc204a166f16294884fbf9da074ce)
+`BPF_FUNC_msg_cork_bytes()` | 4.17 |  | [`91843d540a13`](https://github.com/torvalds/linux/commit/91843d540a139eb8070bcff8aa10089164436deb)
 `BPF_FUNC_msg_pop_data()` | 5.0 |  | [`7246d8ed4dcc`](https://github.com/torvalds/linux/commit/7246d8ed4dcce23f7509949a77be15fa9f0e3d28)
-`BPF_FUNC_msg_pull_data()` | 4.17 |  | [`015632bb30da`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=015632bb30daaaee64e1bcac07570860e0bf3092)
+`BPF_FUNC_msg_pull_data()` | 4.17 |  | [`015632bb30da`](https://github.com/torvalds/linux/commit/015632bb30daaaee64e1bcac07570860e0bf3092)
 `BPF_FUNC_msg_push_data()` | 4.20 |  | [`6fff607e2f14`](https://github.com/torvalds/linux/commit/6fff607e2f14bd7c63c06c464a6f93b8efbabe28)
-`BPF_FUNC_msg_redirect_hash()` | 4.18 |  | [`81110384441a`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=81110384441a59cff47430f20f049e69b98c17f4)
-`BPF_FUNC_msg_redirect_map()` | 4.17 |  | [`4f738adba30a`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4f738adba30a7cfc006f605707e7aee847ffefa0)
+`BPF_FUNC_msg_redirect_hash()` | 4.18 |  | [`81110384441a`](https://github.com/torvalds/linux/commit/81110384441a59cff47430f20f049e69b98c17f4)
+`BPF_FUNC_msg_redirect_map()` | 4.17 |  | [`4f738adba30a`](https://github.com/torvalds/linux/commit/4f738adba30a7cfc006f605707e7aee847ffefa0)
 `BPF_FUNC_per_cpu_ptr()` | 5.10 |  | [`eaa6bcb71ef6`](https://github.com/torvalds/linux/commit/eaa6bcb71ef6ed3dc18fc525ee7e293b06b4882b) |
-`BPF_FUNC_perf_event_output()` | 4.4 | GPL | [`a43eec304259`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a43eec304259a6c637f4014a6d4767159b6a3aa3)
-`BPF_FUNC_perf_event_read()` | 4.3 | GPL | [`35578d798400`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=35578d7984003097af2b1e34502bc943d40c1804)
-`BPF_FUNC_perf_event_read_value()` | 4.15 | GPL | [`908432ca84fc`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=908432ca84fc229e906ba164219e9ad0fe56f755)
-`BPF_FUNC_perf_prog_read_value()` | 4.15 | GPL | [`4bebdc7a85aa`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4bebdc7a85aa400c0222b5329861e4ad9252f1e5)
-`BPF_FUNC_probe_read()` | 4.1 | GPL | [`2541517c32be`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2541517c32be2531e0da59dfd7efc1ce844644f5)
-`BPF_FUNC_probe_read_kernel()` | 5.5 | GPL | [`6ae08ae3dea2`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
-`BPF_FUNC_probe_read_kernel_str()` | 5.5 | GPL | [`6ae08ae3dea2`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
-`BPF_FUNC_probe_read_user()` | 5.5 | GPL | [`6ae08ae3dea2`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
-`BPF_FUNC_probe_read_user_str()` | 5.5 | GPL | [`6ae08ae3dea2`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
-`BPF_FUNC_probe_read_str()` | 4.11 | GPL | [`a5e8c07059d0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a5e8c07059d0f0b31737408711d44794928ac218)
-`BPF_FUNC_probe_write_user()` | 4.8 | GPL | [`96ae52279594`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=96ae52279594470622ff0585621a13e96b700600)
-`BPF_FUNC_rc_keydown()` | 4.18 | GPL | [`f4364dcfc86d`](https://git.kernel.org/cgit/linux/kernel/git/bpf/bpf-next.git/commit/?id=f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
+`BPF_FUNC_perf_event_output()` | 4.4 | GPL | [`a43eec304259`](https://github.com/torvalds/linux/commit/a43eec304259a6c637f4014a6d4767159b6a3aa3)
+`BPF_FUNC_perf_event_read()` | 4.3 | GPL | [`35578d798400`](https://github.com/torvalds/linux/commit/35578d7984003097af2b1e34502bc943d40c1804)
+`BPF_FUNC_perf_event_read_value()` | 4.15 | GPL | [`908432ca84fc`](https://github.com/torvalds/linux/commit/908432ca84fc229e906ba164219e9ad0fe56f755)
+`BPF_FUNC_perf_prog_read_value()` | 4.15 | GPL | [`4bebdc7a85aa`](https://github.com/torvalds/linux/commit/4bebdc7a85aa400c0222b5329861e4ad9252f1e5)
+`BPF_FUNC_probe_read()` | 4.1 | GPL | [`2541517c32be`](https://github.com/torvalds/linux/commit/2541517c32be2531e0da59dfd7efc1ce844644f5)
+`BPF_FUNC_probe_read_kernel()` | 5.5 | GPL | [`6ae08ae3dea2`](https://github.com/torvalds/linux/commit/6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
+`BPF_FUNC_probe_read_kernel_str()` | 5.5 | GPL | [`6ae08ae3dea2`](https://github.com/torvalds/linux/commit/6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
+`BPF_FUNC_probe_read_user()` | 5.5 | GPL | [`6ae08ae3dea2`](https://github.com/torvalds/linux/commit/6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
+`BPF_FUNC_probe_read_user_str()` | 5.5 | GPL | [`6ae08ae3dea2`](https://github.com/torvalds/linux/commit/6ae08ae3dea2cfa03dd3665a3c8475c2d429ef47)
+`BPF_FUNC_probe_read_str()` | 4.11 | GPL | [`a5e8c07059d0`](https://github.com/torvalds/linux/commit/a5e8c07059d0f0b31737408711d44794928ac218)
+`BPF_FUNC_probe_write_user()` | 4.8 | GPL | [`96ae52279594`](https://github.com/torvalds/linux/commit/96ae52279594470622ff0585621a13e96b700600)
+`BPF_FUNC_rc_keydown()` | 4.18 | GPL | [`f4364dcfc86d`](https://github.com/torvalds/linux/commit/f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
 `BPF_FUNC_rc_pointer_rel()` | 5.0 | GPL | [`01d3240a04f4`](https://github.com/torvalds/linux/commit/01d3240a04f4c09392e13c77b54d4423ebce2d72)
-`BPF_FUNC_rc_repeat()` | 4.18 | GPL | [`f4364dcfc86d`](https://git.kernel.org/cgit/linux/kernel/git/bpf/bpf-next.git/commit/?id=f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
+`BPF_FUNC_rc_repeat()` | 4.18 | GPL | [`f4364dcfc86d`](https://github.com/torvalds/linux/commit/f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936)
 `BPF_FUNC_read_branch_records()` | 5.6 | GPL | [`fff7b64355ea`](https://github.com/torvalds/linux/commit/fff7b64355eac6e29b50229ad1512315bc04b44e)
-`BPF_FUNC_redirect()` | 4.4 |  | [`27b29f63058d`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=27b29f63058d26c6c1742f1993338280d5a41dc6)
-`BPF_FUNC_redirect_map()` | 4.14 |  | [`97f91a7cf04f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=97f91a7cf04ff605845c20948b8a80e54cbd3376)
-`BPF_FUNC_redirect_neigh()` | 5.10 |  | [`b4ab31414970`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=b4ab31414970a7a03a5d55d75083f2c101a30592)
+`BPF_FUNC_redirect()` | 4.4 |  | [`27b29f63058d`](https://github.com/torvalds/linux/commit/27b29f63058d26c6c1742f1993338280d5a41dc6)
+`BPF_FUNC_redirect_map()` | 4.14 |  | [`97f91a7cf04f`](https://github.com/torvalds/linux/commit/97f91a7cf04ff605845c20948b8a80e54cbd3376)
+`BPF_FUNC_redirect_neigh()` | 5.10 |  | [`b4ab31414970`](https://github.com/torvalds/linux/commit/b4ab31414970a7a03a5d55d75083f2c101a30592)
 `BPF_FUNC_redirect_peer()` | 5.10 |  | [`9aa1206e8f48`](https://github.com/torvalds/linux/commit/9aa1206e8f48222f35a0c809f33b2f4aaa1e2661)
-`BPF_FUNC_reserve_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=0813a841566f0962a5551be7749b43c45f0022a0)
+`BPF_FUNC_reserve_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://github.com/torvalds/linux/commit/0813a841566f0962a5551be7749b43c45f0022a0)
 `BPF_FUNC_ringbuf_discard()` | 5.8 |  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
+`BPF_FUNC_ringbuf_discard_dynptr()` | 5.19 |  | [`bc34dee65a65`](https://github.com/torvalds/linux/commit/bc34dee65a65e9c920c420005b8a43f2a721a458)
 `BPF_FUNC_ringbuf_output()` | 5.8 |  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
 `BPF_FUNC_ringbuf_query()` | 5.8 |  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
 `BPF_FUNC_ringbuf_reserve()` | 5.8 |  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
+`BPF_FUNC_ringbuf_reserve_dynptr()` | 5.19 |  | [`bc34dee65a65`](https://github.com/torvalds/linux/commit/bc34dee65a65e9c920c420005b8a43f2a721a458)
 `BPF_FUNC_ringbuf_submit()` | 5.8 |  | [`457f44363a88`](https://github.com/torvalds/linux/commit/457f44363a8894135c85b7a9afd2bd8196db24ab)
-`BPF_FUNC_send_signal()` | 5.3 |  | [`8b401f9ed244`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=8b401f9ed2441ad9e219953927a842d24ed051fc)
-`BPF_FUNC_send_signal_thread()` | 5.5 |  | [`8482941f0906`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=8482941f09067da42f9c3362e15bfb3f3c19d610)
-`BPF_FUNC_seq_printf()` | 5.7 | GPL | [`492e639f0c22`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/492e639f0c222784e2e0f121966375f641c61b15)
-`BPF_FUNC_seq_printf_btf()` | 5.10 | | [`eb411377aed9`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=eb411377aed9e27835e77ee0710ee8f4649958f3)
-`BPF_FUNC_seq_write()` | 5.7 | GPL | [`492e639f0c22`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/492e639f0c222784e2e0f121966375f641c61b15)
-`BPF_FUNC_set_hash()` | 4.13 |  | [`ded092cd73c2`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ded092cd73c2c56a394b936f86897f29b2e131c0)
-`BPF_FUNC_set_hash_invalid()` | 4.9 |  | [`7a4b28c6cc9f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7a4b28c6cc9ffac50f791b99cc7e46106436e5d8)
-`BPF_FUNC_set_retval()` | 5.18 |  | [`b44123b4a3dc`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=b44123b4a3dcad4664d3a0f72c011ffd4c9c4d93)
-`BPF_FUNC_setsockopt()` | 4.13 |  | [`8c4b4c7e9ff0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8c4b4c7e9ff0447995750d9329949fa082520269)
-`BPF_FUNC_sk_ancestor_cgroup_id()` | 5.7 |  | [`f307fa2cb4c9`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/f307fa2cb4c935f7f1ff0aeb880c7b44fb9a642b)
+`BPF_FUNC_ringbuf_submit_dynptr()` | 5.19 |  | [`bc34dee65a65`](https://github.com/torvalds/linux/commit/bc34dee65a65e9c920c420005b8a43f2a721a458)
+`BPF_FUNC_send_signal()` | 5.3 |  | [`8b401f9ed244`](https://github.com/torvalds/linux/commit/8b401f9ed2441ad9e219953927a842d24ed051fc)
+`BPF_FUNC_send_signal_thread()` | 5.5 |  | [`8482941f0906`](https://github.com/torvalds/linux/commit/8482941f09067da42f9c3362e15bfb3f3c19d610)
+`BPF_FUNC_seq_printf()` | 5.7 | GPL | [`492e639f0c22`](https://github.com/torvalds/linux/commit/492e639f0c222784e2e0f121966375f641c61b15)
+`BPF_FUNC_seq_printf_btf()` | 5.10 | | [`eb411377aed9`](https://github.com/torvalds/linux/commit/eb411377aed9e27835e77ee0710ee8f4649958f3)
+`BPF_FUNC_seq_write()` | 5.7 | GPL | [`492e639f0c22`](https://github.com/torvalds/linux/commit/492e639f0c222784e2e0f121966375f641c61b15)
+`BPF_FUNC_set_hash()` | 4.13 |  | [`ded092cd73c2`](https://github.com/torvalds/linux/commit/ded092cd73c2c56a394b936f86897f29b2e131c0)
+`BPF_FUNC_set_hash_invalid()` | 4.9 |  | [`7a4b28c6cc9f`](https://github.com/torvalds/linux/commit/7a4b28c6cc9ffac50f791b99cc7e46106436e5d8)
+`BPF_FUNC_set_retval()` | 5.18 |  | [`b44123b4a3dc`](https://github.com/torvalds/linux/commit/b44123b4a3dcad4664d3a0f72c011ffd4c9c4d93)
+`BPF_FUNC_setsockopt()` | 4.13 |  | [`8c4b4c7e9ff0`](https://github.com/torvalds/linux/commit/8c4b4c7e9ff0447995750d9329949fa082520269)
+`BPF_FUNC_sk_ancestor_cgroup_id()` | 5.7 |  | [`f307fa2cb4c9`](https://github.com/torvalds/linux/commit/f307fa2cb4c935f7f1ff0aeb880c7b44fb9a642b)
 `BPF_FUNC_sk_assign()` | 5.6 |  | [`cf7fbe660f2d`](https://github.com/torvalds/linux/commit/cf7fbe660f2dbd738ab58aea8e9b0ca6ad232449)
-`BPF_FUNC_sk_cgroup_id()` | 5.7 |  | [`f307fa2cb4c9`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/f307fa2cb4c935f7f1ff0aeb880c7b44fb9a642b)
-`BPF_FUNC_sk_fullsock()` | 5.1 |  | [`46f8bc92758c`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=46f8bc92758c6259bcf945e9216098661c1587cd)
+`BPF_FUNC_sk_cgroup_id()` | 5.7 |  | [`f307fa2cb4c9`](https://github.com/torvalds/linux/commit/f307fa2cb4c935f7f1ff0aeb880c7b44fb9a642b)
+`BPF_FUNC_sk_fullsock()` | 5.1 |  | [`46f8bc92758c`](https://github.com/torvalds/linux/commit/46f8bc92758c6259bcf945e9216098661c1587cd)
 `BPF_FUNC_sk_lookup_tcp()` | 4.20 |  | [`6acc9b432e67`](https://github.com/torvalds/linux/commit/6acc9b432e6714d72d7d77ec7c27f6f8358d0c71)
 `BPF_FUNC_sk_lookup_udp()` | 4.20 |  | [`6acc9b432e67`](https://github.com/torvalds/linux/commit/6acc9b432e6714d72d7d77ec7c27f6f8358d0c71)
-`BPF_FUNC_sk_redirect_hash()` | 4.18 |  | [`81110384441a`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=81110384441a59cff47430f20f049e69b98c17f4)
-`BPF_FUNC_sk_redirect_map()` | 4.14 |  | [`174a79ff9515`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=174a79ff9515f400b9a6115643dafd62a635b7e6)
+`BPF_FUNC_sk_redirect_hash()` | 4.18 |  | [`81110384441a`](https://github.com/torvalds/linux/commit/81110384441a59cff47430f20f049e69b98c17f4)
+`BPF_FUNC_sk_redirect_map()` | 4.14 |  | [`174a79ff9515`](https://github.com/torvalds/linux/commit/174a79ff9515f400b9a6115643dafd62a635b7e6)
 `BPF_FUNC_sk_release()` | 4.20 |  | [`6acc9b432e67`](https://github.com/torvalds/linux/commit/6acc9b432e6714d72d7d77ec7c27f6f8358d0c71)
 `BPF_FUNC_sk_select_reuseport()` | 4.19 |  | [`2dbb9b9e6df6`](https://github.com/torvalds/linux/commit/2dbb9b9e6df67d444fbe425c7f6014858d337adf)
 `BPF_FUNC_sk_storage_delete()` | 5.2 |  | [`6ac99e8f23d4`](https://github.com/torvalds/linux/commit/6ac99e8f23d4b10258406ca0dd7bffca5f31da9d)
 `BPF_FUNC_sk_storage_get()` | 5.2 |  | [`6ac99e8f23d4`](https://github.com/torvalds/linux/commit/6ac99e8f23d4b10258406ca0dd7bffca5f31da9d)
-`BPF_FUNC_skb_adjust_room()` | 4.13 |  | [`2be7e212d541`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2be7e212d5419a400d051c84ca9fdd083e5aacac)
+`BPF_FUNC_skb_adjust_room()` | 4.13 |  | [`2be7e212d541`](https://github.com/torvalds/linux/commit/2be7e212d5419a400d051c84ca9fdd083e5aacac)
 `BPF_FUNC_skb_ancestor_cgroup_id()` | 4.19 |  | [`7723628101aa`](https://github.com/torvalds/linux/commit/7723628101aaeb1d723786747529b4ea65c5b5c5)
-`BPF_FUNC_skb_change_head()` | 4.10 |  | [`3a0af8fd61f9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2)
-`BPF_FUNC_skb_change_proto()` | 4.8 |  | [`6578171a7ff0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6578171a7ff0c31dc73258f93da7407510abf085)
-`BPF_FUNC_skb_change_tail()` | 4.9 |  | [`5293efe62df8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5293efe62df81908f2e90c9820c7edcc8e61f5e9)
-`BPF_FUNC_skb_change_type()` | 4.8 |  | [`d2485c4242a8`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d2485c4242a826fdf493fd3a27b8b792965b9b9e)
-`BPF_FUNC_skb_cgroup_classid()` | 5.10 |  | [`b426ce83baa7`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=b426ce83baa7dff947fb354118d3133f2953aac8)
+`BPF_FUNC_skb_change_head()` | 4.10 |  | [`3a0af8fd61f9`](https://github.com/torvalds/linux/commit/3a0af8fd61f90920f6fa04e4f1e9a6a73c1b4fd2)
+`BPF_FUNC_skb_change_proto()` | 4.8 |  | [`6578171a7ff0`](https://github.com/torvalds/linux/commit/6578171a7ff0c31dc73258f93da7407510abf085)
+`BPF_FUNC_skb_change_tail()` | 4.9 |  | [`5293efe62df8`](https://github.com/torvalds/linux/commit/5293efe62df81908f2e90c9820c7edcc8e61f5e9)
+`BPF_FUNC_skb_change_type()` | 4.8 |  | [`d2485c4242a8`](https://github.com/torvalds/linux/commit/d2485c4242a826fdf493fd3a27b8b792965b9b9e)
+`BPF_FUNC_skb_cgroup_classid()` | 5.10 |  | [`b426ce83baa7`](https://github.com/torvalds/linux/commit/b426ce83baa7dff947fb354118d3133f2953aac8)
 `BPF_FUNC_skb_cgroup_id()` | 4.18 |  | [`cb20b08ead40`](https://github.com/torvalds/linux/commit/cb20b08ead401fd17627a36f035c0bf5bfee5567)
 `BPF_FUNC_skb_ecn_set_ce()` | 5.1 |  | [`f7c917ba11a6`](https://github.com/torvalds/linux/commit/f7c917ba11a67632a8452ea99fe132f626a7a2cc)
-`BPF_FUNC_skb_get_tunnel_key()` | 4.3 |  | [`d3aa45ce6b94`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d3aa45ce6b94c65b83971257317867db13e5f492)
-`BPF_FUNC_skb_get_tunnel_opt()` | 4.6 |  | [`14ca0751c96f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=14ca0751c96f8d3d0f52e8ed3b3236f8b34d3460)
-`BPF_FUNC_skb_get_xfrm_state()` | 4.18 |  | [`12bed760a78d`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=12bed760a78da6e12ac8252fec64d019a9eac523)
-`BPF_FUNC_skb_load_bytes()` | 4.5 |  | [`05c74e5e53f6`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=05c74e5e53f6cb07502c3e6a820f33e2777b6605)
-`BPF_FUNC_skb_load_bytes_relative()` | 4.18 |  | [`4e1ec56cdc59`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=4e1ec56cdc59746943b2acfab3c171b930187bbe)
-`BPF_FUNC_skb_output()` | 5.5 |  | [`a7658e1a4164`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=a7658e1a4164ce2b9eb4a11aadbba38586e93bd6)
-`BPF_FUNC_skb_pull_data()` | 4.9 |  | [`36bbef52c7eb`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=36bbef52c7eb646ed6247055a2acd3851e317857)
-`BPF_FUNC_skb_set_tstamp()` | 5.18 |  | [`9bb984f28d5b`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=9bb984f28d5bcb917d35d930fcfb89f90f9449fd)
-`BPF_FUNC_skb_set_tunnel_key()` | 4.3 |  | [`d3aa45ce6b94`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d3aa45ce6b94c65b83971257317867db13e5f492)
-`BPF_FUNC_skb_set_tunnel_opt()` | 4.6 |  | [`14ca0751c96f`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=14ca0751c96f8d3d0f52e8ed3b3236f8b34d3460)
-`BPF_FUNC_skb_store_bytes()` | 4.1 |  | [`91bc4822c3d6`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
-`BPF_FUNC_skb_under_cgroup()` | 4.8 |  | [`4a482f34afcc`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4a482f34afcc162d8456f449b137ec2a95be60d8)
-`BPF_FUNC_skb_vlan_pop()` | 4.3 |  | [`4e10df9a60d9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4e10df9a60d96ced321dd2af71da558c6b750078)
-`BPF_FUNC_skb_vlan_push()` | 4.3 |  | [`4e10df9a60d9`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4e10df9a60d96ced321dd2af71da558c6b750078)
-`BPF_FUNC_skc_lookup_tcp()` | 5.2 |  | [`edbf8c01de5a`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/edbf8c01de5a104a71ed6df2bf6421ceb2836a8e)
-`BPF_FUNC_skc_to_tcp_sock()` | 5.9 |  | [`478cfbdf5f13`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
-`BPF_FUNC_skc_to_tcp_request_sock()` | 5.9 |  | [`478cfbdf5f13`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
-`BPF_FUNC_skc_to_tcp_timewait_sock()` | 5.9 |  | [`478cfbdf5f13`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
-`BPF_FUNC_skc_to_tcp6_sock()` | 5.9 |  | [`af7ec1383361`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/af7ec13833619e17f03aa73a785a2f871da6d66b)
-`BPF_FUNC_skc_to_udp6_sock()` | 5.9 |  | [`0d4fad3e57df`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next/+/0d4fad3e57df2bf61e8ffc8d12a34b1caf9b8835)
-`BPF_FUNC_skc_to_unix_sock()` | 5.16 |  | [`9eeb3aa33ae0`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=9eeb3aa33ae005526f672b394c1791578463513f)
+`BPF_FUNC_skb_get_tunnel_key()` | 4.3 |  | [`d3aa45ce6b94`](https://github.com/torvalds/linux/commit/d3aa45ce6b94c65b83971257317867db13e5f492)
+`BPF_FUNC_skb_get_tunnel_opt()` | 4.6 |  | [`14ca0751c96f`](https://github.com/torvalds/linux/commit/14ca0751c96f8d3d0f52e8ed3b3236f8b34d3460)
+`BPF_FUNC_skb_get_xfrm_state()` | 4.18 |  | [`12bed760a78d`](https://github.com/torvalds/linux/commit/12bed760a78da6e12ac8252fec64d019a9eac523)
+`BPF_FUNC_skb_load_bytes()` | 4.5 |  | [`05c74e5e53f6`](https://github.com/torvalds/linux/commit/05c74e5e53f6cb07502c3e6a820f33e2777b6605)
+`BPF_FUNC_skb_load_bytes_relative()` | 4.18 |  | [`4e1ec56cdc59`](https://github.com/torvalds/linux/commit/4e1ec56cdc59746943b2acfab3c171b930187bbe)
+`BPF_FUNC_skb_output()` | 5.5 |  | [`a7658e1a4164`](https://github.com/torvalds/linux/commit/a7658e1a4164ce2b9eb4a11aadbba38586e93bd6)
+`BPF_FUNC_skb_pull_data()` | 4.9 |  | [`36bbef52c7eb`](https://github.com/torvalds/linux/commit/36bbef52c7eb646ed6247055a2acd3851e317857)
+`BPF_FUNC_skb_set_tstamp()` | 5.18 |  | [`9bb984f28d5b`](https://github.com/torvalds/linux/commit/9bb984f28d5bcb917d35d930fcfb89f90f9449fd)
+`BPF_FUNC_skb_set_tunnel_key()` | 4.3 |  | [`d3aa45ce6b94`](https://github.com/torvalds/linux/commit/d3aa45ce6b94c65b83971257317867db13e5f492)
+`BPF_FUNC_skb_set_tunnel_opt()` | 4.6 |  | [`14ca0751c96f`](https://github.com/torvalds/linux/commit/14ca0751c96f8d3d0f52e8ed3b3236f8b34d3460)
+`BPF_FUNC_skb_store_bytes()` | 4.1 |  | [`91bc4822c3d6`](https://github.com/torvalds/linux/commit/91bc4822c3d61b9bb7ef66d3b77948a4f9177954)
+`BPF_FUNC_skb_under_cgroup()` | 4.8 |  | [`4a482f34afcc`](https://github.com/torvalds/linux/commit/4a482f34afcc162d8456f449b137ec2a95be60d8)
+`BPF_FUNC_skb_vlan_pop()` | 4.3 |  | [`4e10df9a60d9`](https://github.com/torvalds/linux/commit/4e10df9a60d96ced321dd2af71da558c6b750078)
+`BPF_FUNC_skb_vlan_push()` | 4.3 |  | [`4e10df9a60d9`](https://github.com/torvalds/linux/commit/4e10df9a60d96ced321dd2af71da558c6b750078)
+`BPF_FUNC_skc_lookup_tcp()` | 5.2 |  | [`edbf8c01de5a`](https://github.com/torvalds/linux/commit/edbf8c01de5a104a71ed6df2bf6421ceb2836a8e)
+`BPF_FUNC_skc_to_mctcp_sock()` | 5.19 |  | [`3bc253c2e652`](https://github.com/torvalds/linux/commit/3bc253c2e652cf5f12cd8c00d80d8ec55d67d1a7)
+`BPF_FUNC_skc_to_tcp_sock()` | 5.9 |  | [`478cfbdf5f13`](https://github.com/torvalds/linux/commit/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
+`BPF_FUNC_skc_to_tcp_request_sock()` | 5.9 |  | [`478cfbdf5f13`](https://github.com/torvalds/linux/commit/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
+`BPF_FUNC_skc_to_tcp_timewait_sock()` | 5.9 |  | [`478cfbdf5f13`](https://github.com/torvalds/linux/commit/478cfbdf5f13dfe09cfd0b1cbac821f5e27f6108)
+`BPF_FUNC_skc_to_tcp6_sock()` | 5.9 |  | [`af7ec1383361`](https://github.com/torvalds/linux/commit/af7ec13833619e17f03aa73a785a2f871da6d66b)
+`BPF_FUNC_skc_to_udp6_sock()` | 5.9 |  | [`0d4fad3e57df`](https://github.com/torvalds/linux/commit/0d4fad3e57df2bf61e8ffc8d12a34b1caf9b8835)
+`BPF_FUNC_skc_to_unix_sock()` | 5.16 |  | [`9eeb3aa33ae0`](https://github.com/torvalds/linux/commit/9eeb3aa33ae005526f672b394c1791578463513f)
 `BPF_FUNC_snprintf()` | 5.13 | | [`7b15523a989b`](https://github.com/torvalds/linux/commit/7b15523a989b63927c2bb08e9b5b0bbc10b58bef)
-`BPF_FUNC_snprintf_btf()` | 5.10 | | [`c4d0bfb45068`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=c4d0bfb45068d853a478b9067a95969b1886a30f)
+`BPF_FUNC_snprintf_btf()` | 5.10 | | [`c4d0bfb45068`](https://github.com/torvalds/linux/commit/c4d0bfb45068d853a478b9067a95969b1886a30f)
 `BPF_FUNC_sock_from_file()` | 5.11 |  | [`4f19cab76136`](https://github.com/torvalds/linux/commit/4f19cab76136e800a3f04d8c9aa4d8e770e3d3d8)
-`BPF_FUNC_sock_hash_update()` | 4.18 |  | [`81110384441a`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=81110384441a59cff47430f20f049e69b98c17f4)
-`BPF_FUNC_sock_map_update()` | 4.14 |  | [`174a79ff9515`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=174a79ff9515f400b9a6115643dafd62a635b7e6)
-`BPF_FUNC_spin_lock()` | 5.1 |  | [`d83525ca62cf`](https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit/?id=d83525ca62cf8ebe3271d14c36fb900c294274a2)
-`BPF_FUNC_spin_unlock()` | 5.1 |  | [`d83525ca62cf`](https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit/?id=d83525ca62cf8ebe3271d14c36fb900c294274a2)
-`BPF_FUNC_store_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit?id=0813a841566f0962a5551be7749b43c45f0022a0)
-`BPF_FUNC_strncmp()` | 5.17 |  | [`c5fb19937455`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=c5fb19937455095573a19ddcbff32e993ed10e35)
-`BPF_FUNC_strtol()` | 5.2 |  | [`d7a4cb9b6705`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/d7a4cb9b6705a89937d12c8158a35a3145dc967a)
-`BPF_FUNC_strtoul()` | 5.2 |  | [`d7a4cb9b6705`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/d7a4cb9b6705a89937d12c8158a35a3145dc967a)
+`BPF_FUNC_sock_hash_update()` | 4.18 |  | [`81110384441a`](https://github.com/torvalds/linux/commit/81110384441a59cff47430f20f049e69b98c17f4)
+`BPF_FUNC_sock_map_update()` | 4.14 |  | [`174a79ff9515`](https://github.com/torvalds/linux/commit/174a79ff9515f400b9a6115643dafd62a635b7e6)
+`BPF_FUNC_spin_lock()` | 5.1 |  | [`d83525ca62cf`](https://github.com/torvalds/linux/commit/d83525ca62cf8ebe3271d14c36fb900c294274a2)
+`BPF_FUNC_spin_unlock()` | 5.1 |  | [`d83525ca62cf`](https://github.com/torvalds/linux/commit/d83525ca62cf8ebe3271d14c36fb900c294274a2)
+`BPF_FUNC_store_hdr_opt()` | 5.10 |  | [`0813a841566f`](https://github.com/torvalds/linux/commit/0813a841566f0962a5551be7749b43c45f0022a0)
+`BPF_FUNC_strncmp()` | 5.17 |  | [`c5fb19937455`](https://github.com/torvalds/linux/commit/c5fb19937455095573a19ddcbff32e993ed10e35)
+`BPF_FUNC_strtol()` | 5.2 |  | [`d7a4cb9b6705`](https://github.com/torvalds/linux/commit/d7a4cb9b6705a89937d12c8158a35a3145dc967a)
+`BPF_FUNC_strtoul()` | 5.2 |  | [`d7a4cb9b6705`](https://github.com/torvalds/linux/commit/d7a4cb9b6705a89937d12c8158a35a3145dc967a)
 `BPF_FUNC_sys_bpf()` | 5.14 |  | [`79a7f8bdb159`](https://github.com/torvalds/linux/commit/79a7f8bdb159d9914b58740f3d31d602a6e4aca8)
 `BPF_FUNC_sys_close()` | 5.14 |  | [`3abea089246f`](https://github.com/torvalds/linux/commit/3abea089246f76c1517b054ddb5946f3f1dbd2c0)
-`BPF_FUNC_sysctl_get_current_value()` | 5.2 |  | [`1d11b3016cec`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/1d11b3016cec4ed9770b98e82a61708c8f4926e7)
-`BPF_FUNC_sysctl_get_name()` | 5.2 |  | [`808649fb787d`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/808649fb787d918a48a360a668ee4ee9023f0c11)
-`BPF_FUNC_sysctl_get_new_value()` | 5.2 |  | [`4e63acdff864`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/4e63acdff864654cee0ac5aaeda3913798ee78f6)
-`BPF_FUNC_sysctl_set_new_value()` | 5.2 |  | [`4e63acdff864`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/4e63acdff864654cee0ac5aaeda3913798ee78f6)
-`BPF_FUNC_tail_call()` | 4.2 |  | [`04fd61ab36ec`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=04fd61ab36ec065e194ab5e74ae34a5240d992bb)
+`BPF_FUNC_sysctl_get_current_value()` | 5.2 |  | [`1d11b3016cec`](https://github.com/torvalds/linux/commit/1d11b3016cec4ed9770b98e82a61708c8f4926e7)
+`BPF_FUNC_sysctl_get_name()` | 5.2 |  | [`808649fb787d`](https://github.com/torvalds/linux/commit/808649fb787d918a48a360a668ee4ee9023f0c11)
+`BPF_FUNC_sysctl_get_new_value()` | 5.2 |  | [`4e63acdff864`](https://github.com/torvalds/linux/commit/4e63acdff864654cee0ac5aaeda3913798ee78f6)
+`BPF_FUNC_sysctl_set_new_value()` | 5.2 |  | [`4e63acdff864`](https://github.com/torvalds/linux/commit/4e63acdff864654cee0ac5aaeda3913798ee78f6)
+`BPF_FUNC_tail_call()` | 4.2 |  | [`04fd61ab36ec`](https://github.com/torvalds/linux/commit/04fd61ab36ec065e194ab5e74ae34a5240d992bb)
 `BPF_FUNC_task_pt_regs()` | 5.15 | GPL | [`dd6e10fbd9f`](https://github.com/torvalds/linux/commit/dd6e10fbd9fb86a571d925602c8a24bb4d09a2a7)
 `BPF_FUNC_task_storage_delete()` | 5.11 |  | [`4cf1bc1f1045`](https://github.com/torvalds/linux/commit/4cf1bc1f10452065a29d576fc5693fc4fab5b919)
 `BPF_FUNC_task_storage_get()` | 5.11 |  | [`4cf1bc1f1045`](https://github.com/torvalds/linux/commit/4cf1bc1f10452065a29d576fc5693fc4fab5b919)
-`BPF_FUNC_tcp_check_syncookie()` | 5.2 |  | [`399040847084`](https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/399040847084a69f345e0a52fd62f04654e0fce3)
+`BPF_FUNC_tcp_check_syncookie()` | 5.2 |  | [`399040847084`](https://github.com/torvalds/linux/commit/399040847084a69f345e0a52fd62f04654e0fce3)
 `BPF_FUNC_tcp_gen_syncookie()` | 5.3 |  | [`70d66244317e`](https://github.com/torvalds/linux/commit/70d66244317e958092e9c971b08dd5b7fd29d9cb#diff-05da4bf36c7fbcd176254e1615d98b28)
-`BPF_FUNC_tcp_send_ack()` | 5.5 | | [`206057fe020a`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=206057fe020ac5c037d5e2dd6562a9bd216ec765)
-`BPF_FUNC_tcp_sock()` | 5.1 |  | [`655a51e536c0`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=655a51e536c09d15ffa3603b1b6fce2b45b85a1f)
+`BPF_FUNC_tcp_raw_check_syncookie_ipv4()` | 6.0 |  | [`33bf9885040c`](https://github.com/torvalds/linux/commit/33bf9885040c399cf6a95bd33216644126728e14)
+`BPF_FUNC_tcp_raw_check_syncookie_ipv6()` | 6.0 |  | [`33bf9885040c`](https://github.com/torvalds/linux/commit/33bf9885040c399cf6a95bd33216644126728e14)
+`BPF_FUNC_tcp_raw_gen_syncookie_ipv4()` | 6.0 |  | [`33bf9885040c`](https://github.com/torvalds/linux/commit/33bf9885040c399cf6a95bd33216644126728e14)
+`BPF_FUNC_tcp_raw_gen_syncookie_ipv6()` | 6.0 |  | [`33bf9885040c`](https://github.com/torvalds/linux/commit/33bf9885040c399cf6a95bd33216644126728e14)
+`BPF_FUNC_tcp_send_ack()` | 5.5 | | [`206057fe020a`](https://github.com/torvalds/linux/commit/206057fe020ac5c037d5e2dd6562a9bd216ec765)
+`BPF_FUNC_tcp_sock()` | 5.1 |  | [`655a51e536c0`](https://github.com/torvalds/linux/commit/655a51e536c09d15ffa3603b1b6fce2b45b85a1f)
 `BPF_FUNC_this_cpu_ptr()` | 5.10 |  | [`63d9b80dcf2c`](https://github.com/torvalds/linux/commit/63d9b80dcf2c67bc5ade61cbbaa09d7af21f43f1) |
-`BPF_FUNC_timer_init()` | 5.15 |  | [`b00628b1c7d5`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=b00628b1c7d595ae5b544e059c27b1f5828314b4)
-`BPF_FUNC_timer_set_callback()` | 5.15 |  | [`b00628b1c7d5`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=b00628b1c7d595ae5b544e059c27b1f5828314b4)
-`BPF_FUNC_timer_start()` | 5.15 |  | [`b00628b1c7d5`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=b00628b1c7d595ae5b544e059c27b1f5828314b4)
-`BPF_FUNC_timer_cancel()` | 5.15 |  | [`b00628b1c7d5`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=b00628b1c7d595ae5b544e059c27b1f5828314b4)
-`BPF_FUNC_trace_printk()` | 4.1 | GPL | [`9c959c863f82`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9c959c863f8217a2ff3d7c296e8223654d240569)
-`BPF_FUNC_trace_vprintk()` | 5.16 | GPL | [`10aceb629e19`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git?id=10aceb629e198429c849d5e995c3bb1ba7a9aaa3)
-`BPF_FUNC_xdp_adjust_head()` | 4.10 |  | [`17bedab27231`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=17bedab2723145d17b14084430743549e6943d03)
-`BPF_FUNC_xdp_adjust_meta()` | 4.15 |  | [`de8f3a83b0a0`](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=de8f3a83b0a0fddb2cf56e7a718127e9619ea3da)
-`BPF_FUNC_xdp_adjust_tail()` | 4.18 |  | [`b32cc5b9a346`](https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=b32cc5b9a346319c171e3ad905e0cddda032b5eb)
-`BPF_FUNC_xdp_get_buff_len()` | 5.18 |  | [`0165cc817075`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=0165cc817075cf701e4289838f1d925ff1911b3e)
-`BPF_FUNC_xdp_load_bytes()` | 5.18 |  | [`3f364222d032`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=3f364222d032eea6b245780e845ad213dab28cdd)
-`BPF_FUNC_xdp_store_bytes()` | 5.18 |  | [`3f364222d032`](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit?id=3f364222d032eea6b245780e845ad213dab28cdd)
+`BPF_FUNC_timer_init()` | 5.15 |  | [`b00628b1c7d5`](https://github.com/torvalds/linux/commit/b00628b1c7d595ae5b544e059c27b1f5828314b4)
+`BPF_FUNC_timer_set_callback()` | 5.15 |  | [`b00628b1c7d5`](https://github.com/torvalds/linux/commit/b00628b1c7d595ae5b544e059c27b1f5828314b4)
+`BPF_FUNC_timer_start()` | 5.15 |  | [`b00628b1c7d5`](https://github.com/torvalds/linux/commit/b00628b1c7d595ae5b544e059c27b1f5828314b4)
+`BPF_FUNC_timer_cancel()` | 5.15 |  | [`b00628b1c7d5`](https://github.com/torvalds/linux/commit/b00628b1c7d595ae5b544e059c27b1f5828314b4)
+`BPF_FUNC_trace_printk()` | 4.1 | GPL | [`9c959c863f82`](https://github.com/torvalds/linux/commit/9c959c863f8217a2ff3d7c296e8223654d240569)
+`BPF_FUNC_trace_vprintk()` | 5.16 | GPL | [`10aceb629e19`](https://github.com/torvalds/linux/commit/10aceb629e198429c849d5e995c3bb1ba7a9aaa3)
+`BPF_FUNC_user_ringbuf_drain()` | 6.1 | | [`205715673844`](https://github.com/torvalds/linux/commit/20571567384428dfc9fe5cf9f2e942e1df13c2dd)
+`BPF_FUNC_xdp_adjust_head()` | 4.10 |  | [`17bedab27231`](https://github.com/torvalds/linux/commit/17bedab2723145d17b14084430743549e6943d03)
+`BPF_FUNC_xdp_adjust_meta()` | 4.15 |  | [`de8f3a83b0a0`](https://github.com/torvalds/linux/commit/de8f3a83b0a0fddb2cf56e7a718127e9619ea3da)
+`BPF_FUNC_xdp_adjust_tail()` | 4.18 |  | [`b32cc5b9a346`](https://github.com/torvalds/linux/commit/b32cc5b9a346319c171e3ad905e0cddda032b5eb)
+`BPF_FUNC_xdp_get_buff_len()` | 5.18 |  | [`0165cc817075`](https://github.com/torvalds/linux/commit/0165cc817075cf701e4289838f1d925ff1911b3e)
+`BPF_FUNC_xdp_load_bytes()` | 5.18 |  | [`3f364222d032`](https://github.com/torvalds/linux/commit/3f364222d032eea6b245780e845ad213dab28cdd)
+`BPF_FUNC_xdp_store_bytes()` | 5.18 |  | [`3f364222d032`](https://github.com/torvalds/linux/commit/3f364222d032eea6b245780e845ad213dab28cdd)
 `BPF_FUNC_xdp_output()` | 5.6 | GPL | [`d831ee84bfc9`](https://github.com/torvalds/linux/commit/d831ee84bfc9173eecf30dbbc2553ae81b996c60)
-`BPF_FUNC_override_return()` | 4.16 | GPL | [`9802d86585db`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9802d86585db91655c7d1929a4f6bbe0952ea88e)
-`BPF_FUNC_sock_ops_cb_flags_set()` | 4.16 |  | [`b13d88072172`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b13d880721729384757f235166068c315326f4a1)
+`BPF_FUNC_override_return()` | 4.16 | GPL | [`9802d86585db`](https://github.com/torvalds/linux/commit/9802d86585db91655c7d1929a4f6bbe0952ea88e)
+`BPF_FUNC_sock_ops_cb_flags_set()` | 4.16 |  | [`b13d88072172`](https://github.com/torvalds/linux/commit/b13d880721729384757f235166068c315326f4a1)
 
 Note: GPL-only BPF helpers require a GPL-compatible license. The current licenses considered GPL-compatible by the kernel are:
 
@@ -411,7 +469,7 @@
 * Dual MIT/GPL
 * Dual MPL/GPL
 
-Check the list of GPL-compatible licenses in your [kernel source code](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/license.h).
+Check the list of GPL-compatible licenses in your [kernel source code](https://github.com/torvalds/linux/blob/master/include/linux/license.h).
 
 ## Program Types
 The list of program types and supported helper functions can be retrieved with:
diff --git a/docs/kernel_config.md b/docs/kernel_config.md
new file mode 100644
index 0000000..c20dfc7
--- /dev/null
+++ b/docs/kernel_config.md
@@ -0,0 +1,48 @@
+# Kernel Configuration for BPF Features
+
+## BPF Related Kernel Configurations
+
+| Functionalities | Kernel Configuration | Description |
+|:----------------|:---------------------|:------------|
+| **Basic** | CONFIG_BPF_SYSCALL | Enable the bpf() system call |
+|  | CONFIG_BPF_JIT | BPF programs are normally handled by a BPF interpreter. This option allows the kernel to generate native code when a program is loaded into the kernel. This will significantly speed-up processing of BPF programs |
+|  | CONFIG_HAVE_BPF_JIT | Enable BPF Just In Time compiler |
+|  | CONFIG_HAVE_EBPF_JIT | Extended BPF JIT (eBPF) |
+|  | CONFIG_HAVE_CBPF_JIT | Classic BPF JIT (cBPF) |
+|  | CONFIG_MODULES | Enable to build loadable kernel modules |
+|  | CONFIG_BPF | BPF VM interpreter |
+|  | CONFIG_BPF_EVENTS | Allow the user to attach BPF programs to kprobe, uprobe, and tracepoint events |
+|  | CONFIG_PERF_EVENTS | Kernel performance events and counters |
+|  | CONFIG_HAVE_PERF_EVENTS | Enable perf events |
+|  | CONFIG_PROFILING | Enable the extended profiling support mechanisms used by profilers |
+| **BTF** | CONFIG_DEBUG_INFO_BTF | Generate deduplicated BTF type information from DWARF debug info |
+| | CONFIG_PAHOLE_HAS_SPLIT_BTF | Generate BTF for each selected kernel module |
+| | CONFIG_DEBUG_INFO_BTF_MODULES | Generate compact split BTF type information for kernel modules |
+| **Security** | CONFIG_BPF_JIT_ALWAYS_ON | Enable BPF JIT and removes BPF interpreter to avoid speculative execution |
+| | CONFIG_BPF_UNPRIV_DEFAULT_OFF | Disable unprivileged BPF by default by setting |
+| **Cgroup** | CONFIG_CGROUP_BPF | Support for BPF programs attached to cgroups |
+| **Network** | CONFIG_BPFILTER | BPF based packet filtering framework (BPFILTER) |
+| | CONFIG_BPFILTER_UMH | This builds bpfilter kernel module with embedded user mode helper |
+| | CONFIG_NET_CLS_BPF | BPF-based classifier - to classify packets based on programmable BPF (JIT'ed) filters as an alternative to ematches |
+| | CONFIG_NET_ACT_BPF | Execute BPF code on packets. The BPF code will decide if the packet should be dropped or not |
+| | CONFIG_BPF_STREAM_PARSER | Enable this to allow a TCP stream parser to be used with BPF_MAP_TYPE_SOCKMAP |
+| | CONFIG_LWTUNNEL_BPF | Allow to run BPF programs as a nexthop action following a route lookup for incoming and outgoing packets |
+| | CONFIG_NETFILTER_XT_MATCH_BPF | BPF matching applies a linux socket filter to each packet and accepts those for which the filter returns non-zero |
+| | CONFIG_IPV6_SEG6_BPF | To support  BPF seg6local hook. bpf: Add IPv6 Segment Routing helpersy. [Reference](https://github.com/torvalds/linux/commit/fe94cc290f535709d3c5ebd1e472dfd0aec7ee7) |
+| **kprobes** | CONFIG_KPROBE_EVENTS | This allows the user to add tracing events (similar to tracepoints) on the fly via the ftrace interface |
+|  | CONFIG_KPROBES | Enable kprobes-based dynamic events |
+|  | CONFIG_HAVE_KPROBES | Check if krpobes enabled |
+|  | CONFIG_HAVE_REGS_AND_STACK_ACCESS_API | This symbol should be selected by an architecture if it supports the API needed to access registers and stack entries from pt_regs. For example the kprobes-based event tracer needs this API. |
+|  | CONFIG_KPROBES_ON_FTRACE | Have kprobes on function tracer if arch supports full passing of pt_regs to function tracing |
+| **kprobe multi** | CONFIG_FPROBE | Enable fprobe to attach the probe on multiple functions at once |
+| **kprobe override** | CONFIG_BPF_KPROBE_OVERRIDE | Enable BPF programs to override a kprobed function |
+| **uprobes** | CONFIG_UPROBE_EVENTS | Enable uprobes-based dynamic events |
+|  | CONFIG_ARCH_SUPPORTS_UPROBES | Arch specific uprobes support |
+|  | CONFIG_UPROBES | Uprobes is the user-space counterpart to kprobes: they enable instrumentation applications (such as 'perf probe') to establish unintrusive probes in user-space binaries and libraries, by executing handler functions when the probes are hit by user-space applications. |
+|  | CONFIG_MMU | MMU-based virtualised addressing space support by paged memory management |
+| **Tracepoints** | CONFIG_TRACEPOINTS | Enable inserting tracepoints in the kernel and connect to proble functions |
+|  | CONFIG_HAVE_SYSCALL_TRACEPOINTS | Enable syscall enter/exit tracing |
+| **Raw Tracepoints** | Same as Tracepoints | |
+| **LSM** | CONFIG_BPF_LSM | Enable instrumentation of the security hooks with BPF programs for implementing dynamic MAC and Audit Policies |
+| **LIRC** | CONFIG_BPF_LIRC_MODE2 | Allow attaching BPF programs to a lirc device |
+
diff --git a/docs/reference_guide.md b/docs/reference_guide.md
index ff18ab9..6a56e97 100644
--- a/docs/reference_guide.md
+++ b/docs/reference_guide.md
@@ -367,6 +367,7 @@
 ### 9. kfuncs
 
 Syntax: KFUNC_PROBE(*function*, typeof(arg1) arg1, typeof(arg2) arge ...)
+        MODULE_KFUNC_PROBE(*module*, *function*, typeof(arg1) arg1, typeof(arg2) arge ...)
 
 This is a macro that instruments the kernel function via trampoline
 *before* the function is executed. It's defined by *function* name and
@@ -388,6 +389,7 @@
 ### 10. kretfuncs
 
 Syntax: KRETFUNC_PROBE(*event*, typeof(arg1) arg1, typeof(arg2) arge ..., int ret)
+        MODULE_KRETFUNC_PROBE(*module*, *function*, typeof(arg1) arg1, typeof(arg2) arge ...)
 
 This is a macro that instruments the kernel function via trampoline
 *after* the function is executed. It's defined by *function* name and
@@ -868,6 +870,23 @@
 Examples in situ: <!-- TODO -->
 [search /examples](https://github.com/iovisor/bcc/search?q=ringbuf_submit+path%3Aexamples&type=Code),
 
+### 10. ringbuf_query()
+
+Syntax: ```u64 ringbuf_query(u64 flags)```
+
+Return: Requested value, or 0, if flags are not recognized
+
+Flags:
+ - ```BPF_RB_AVAIL_DATA```: Amount of data not yet consumed
+ - ```BPF_RB_RING_SIZE```: The size of ring buffer
+ - ```BPF_RB_CONS_POS```: Consumer position
+ - ```BPF_RB_PROD_POS```: Producer(s) position
+
+A method of the BPF_RINGBUF_OUTPUT table, for getting various properties of ring buffer. Returned values are momentarily snapshots of ring buffer state and could be off by the time helper returns, so this should be used only for debugging/reporting reasons or for implementing various heuristics, that take into account highly-changeable nature of some of those characteristics.
+
+Examples in situ: <!-- TODO -->
+[search /examples](https://github.com/iovisor/bcc/search?q=ringbuf_query+path%3Aexamples&type=Code),
+
 ## Maps
 
 Maps are BPF data stores, and are the basis for higher level object types including tables, hashes, and histograms.
@@ -1145,9 +1164,9 @@
 
 ### 13. BPF_XSKMAP
 
-Syntax: ```BPF_XSKMAP(name, size)```
+Syntax: ```BPF_XSKMAP(name, size [, "/sys/fs/bpf/xyz"])```
 
-This creates a xsk map named ```name``` with ```size``` entries. Each entry represents one NIC's queue id. This map is only used in XDP to redirect packet to an AF_XDP socket. If the AF_XDP socket is binded to a queue which is different than the current packet's queue id, the packet will be dropped. For kernel v5.3 and latter, `lookup` method is available and can be used to check whether and AF_XDP socket is available for the current packet's queue id. More details at [AF_XDP](https://www.kernel.org/doc/html/latest/networking/af_xdp.html).
+This creates a xsk map named ```name``` with ```size``` entries and pin it to the bpffs as a FILE. Each entry represents one NIC's queue id. This map is only used in XDP to redirect packet to an AF_XDP socket. If the AF_XDP socket is binded to a queue which is different than the current packet's queue id, the packet will be dropped. For kernel v5.3 and latter, `lookup` method is available and can be used to check whether and AF_XDP socket is available for the current packet's queue id. More details at [AF_XDP](https://www.kernel.org/doc/html/latest/networking/af_xdp.html).
 
 For example:
 ```C
diff --git a/docs/tutorial.md b/docs/tutorial.md
index 210d826..8717eee 100644
--- a/docs/tutorial.md
+++ b/docs/tutorial.md
@@ -306,7 +306,7 @@
 
 More [examples](../tools/profile_example.txt).
 
-### 2. Observatility with Generic Tools
+### 2. Observability with Generic Tools
 
 In addition to the above tools for performance tuning, below is a checklist for bcc generic tools, first as a list, and in detail:
 
diff --git a/docs/tutorial_bcc_python_developer.md b/docs/tutorial_bcc_python_developer.md
index ca3e5cd..b1d956d 100644
--- a/docs/tutorial_bcc_python_developer.md
+++ b/docs/tutorial_bcc_python_developer.md
@@ -63,6 +63,7 @@
 
 ```Python
 from bcc import BPF
+from bcc.utils import printb
 
 # define BPF program
 prog = """
@@ -85,7 +86,9 @@
         (task, pid, cpu, flags, ts, msg) = b.trace_fields()
     except ValueError:
         continue
-    print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
+    except KeyboardInterrupt:
+        exit()
+    printb(b"%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
 ```
 
 This is similar to hello_world.py, and traces new processes via sys_clone() again, but has a few more things to learn:
@@ -116,6 +119,7 @@
 ```Python
 from __future__ import print_function
 from bcc import BPF
+from bcc.utils import printb
 
 # load BPF program
 b = BPF(text="""
@@ -150,11 +154,14 @@
 # format output
 start = 0
 while 1:
-    (task, pid, cpu, flags, ts, ms) = b.trace_fields()
-    if start == 0:
-        start = ts
-    ts = ts - start
-    print("At time %.2f s: multiple syncs detected, last %s ms ago" % (ts, ms))
+    try:
+        (task, pid, cpu, flags, ts, ms) = b.trace_fields()
+        if start == 0:
+            start = ts
+        ts = ts - start
+        printb(b"At time %.2f s: multiple syncs detected, last %s ms ago" % (ts, ms))
+    except KeyboardInterrupt:
+        exit()
 ```
 
 Things to learn:
@@ -194,7 +201,7 @@
 # load BPF program
 b = BPF(text="""
 #include <uapi/linux/ptrace.h>
-#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
 
 BPF_HASH(start, struct request *);
 
@@ -217,10 +224,13 @@
 	}
 }
 """)
-
-b.attach_kprobe(event="blk_start_request", fn_name="trace_start")
+if BPF.get_kprobe_functions(b'blk_start_request'):
+        b.attach_kprobe(event="blk_start_request", fn_name="trace_start")
 b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_start")
-b.attach_kprobe(event="blk_account_io_done", fn_name="trace_completion")
+if BPF.get_kprobe_functions(b'__blk_account_io_done'):
+    b.attach_kprobe(event="__blk_account_io_done", fn_name="trace_completion")
+else:
+    b.attach_kprobe(event="blk_account_io_done", fn_name="trace_completion")
 [...]
 ```
 
diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
index 801e6ba..5264f8d 100644
--- a/examples/cpp/CMakeLists.txt
+++ b/examples/cpp/CMakeLists.txt
@@ -4,7 +4,13 @@
 include_directories(${PROJECT_BINARY_DIR}/src/cc)
 include_directories(${PROJECT_SOURCE_DIR}/src/cc)
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/api)
+include_directories(${LLVM_INCLUDE_DIRS})
+
+if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND)
+include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat)
+else()
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi)
+endif()
 
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
diff --git a/examples/networking/CMakeLists.txt b/examples/networking/CMakeLists.txt
index 790f033..0c635b4 100644
--- a/examples/networking/CMakeLists.txt
+++ b/examples/networking/CMakeLists.txt
@@ -1,5 +1,5 @@
 set(EXAMPLE_FILES simulation.py)
-set(EXAMPLE_PROGRAMS simple_tc.py tc_perf_event.py)
+set(EXAMPLE_PROGRAMS simple_tc.py tc_perf_event.py net_monitor.py sockmap.py)
 install(FILES ${EXAMPLE_FILES} DESTINATION share/bcc/examples/networking)
 install(PROGRAMS ${EXAMPLE_PROGRAMS} DESTINATION share/bcc/examples/networking)
 
diff --git a/examples/networking/http_filter/http-parse-complete.py b/examples/networking/http_filter/http-parse-complete.py
index 324232d..b511674 100644
--- a/examples/networking/http_filter/http-parse-complete.py
+++ b/examples/networking/http_filter/http-parse-complete.py
@@ -29,18 +29,6 @@
 MAX_AGE_SECONDS = 30       # max age entry in bpf_sessions map
 
 
-# convert a bin string into a string of hex char
-# helper function to print raw packet in hex
-def toHex(s):
-    lst = ""
-    for ch in s:
-        hv = hex(ord(ch)).replace('0x', '')
-        if len(hv) == 1:
-            hv = '0' + hv
-        lst = lst + hv
-    return lst
-
-
 # print str until CR+LF
 def printUntilCRLF(s):
     print(s.split(b'\r\n')[0].decode())
@@ -151,7 +139,7 @@
     packet_count += 1
 
     # DEBUG - print raw packet in hex format
-    # packet_hex = toHex(packet_str)
+    # packet_hex = binascii.hexlify(packet_str)
     # print ("%s" % packet_hex)
 
     # convert packet into bytearray
@@ -188,8 +176,8 @@
     ip_src_str = packet_str[ETH_HLEN + 12: ETH_HLEN + 16]  # ip source offset 12..15
     ip_dst_str = packet_str[ETH_HLEN + 16:ETH_HLEN + 20]   # ip dest   offset 16..19
 
-    ip_src = int(toHex(ip_src_str), 16)
-    ip_dst = int(toHex(ip_dst_str), 16)
+    ip_src = int(binascii.hexlify(ip_src_str), 16)
+    ip_dst = int(binascii.hexlify(ip_dst_str), 16)
 
     # TCP HEADER
     # https://www.rfc-editor.org/rfc/rfc793.txt
@@ -215,8 +203,8 @@
     port_src_str = packet_str[ETH_HLEN + ip_header_length:ETH_HLEN + ip_header_length + 2]
     port_dst_str = packet_str[ETH_HLEN + ip_header_length + 2:ETH_HLEN + ip_header_length + 4]
 
-    port_src = int(toHex(port_src_str), 16)
-    port_dst = int(toHex(port_dst_str), 16)
+    port_src = int(binascii.hexlify(port_src_str), 16)
+    port_dst = int(binascii.hexlify(port_dst_str), 16)
 
     # calculate payload offset
     payload_offset = ETH_HLEN + ip_header_length + tcp_header_length
diff --git a/examples/networking/simulation.py b/examples/networking/simulation.py
old mode 100644
new mode 100755
diff --git a/examples/networking/tcp_mon_block/README.md b/examples/networking/tcp_mon_block/README.md
new file mode 100644
index 0000000..e7babc2
--- /dev/null
+++ b/examples/networking/tcp_mon_block/README.md
@@ -0,0 +1,57 @@
+# eBPF tcp_mon_block
+
+This eBPF program uses netlink TC, kernel tracepoints and kprobes to monitor outgoing connections from given PIDs (usually HTTP web servers) and block connections to all addresses initiated from them, unless they are listed in allow_list.json 
+
+To run the example:
+
+    1. Run python3 web_server.py . Note the server's PID (will be printed to stdout)
+    2. Add the server's PID to allow_list.json . You can replace the first entry on the JSON file and put your PID instead
+    3. Run tcp_mon_block.py -i network_interface_name (-v for verbose output). For example: python3 tcp_mon_block.py -i eth0
+    4. Put your web_server's listening IP in 'server_address' variable in http_client.py and run python3 http_client.py 
+
+**Explanation**:
+
+web_server.py is a simple HTTP web server built with flask. It has a SSRF vulnerability in the route to /public_ip  (you can read more about this vulnerability here https://portswigger.net/web-security/ssrf).
+
+This route demonstrates a web server which connects to some remote API server (which is pretty common behavior) and receives some data. The attached POC simply connects to https://api.ipify.org and fetches the server's public IP, then sends it back to the client.  
+However, this specific route receives the API address to connect to from the user (http_client.py is used as the client in this POC, but in real life scenarios it will probably be a web browser). 
+
+This creates a SSRF vulnerability as an attacker can put any address he/she wishes to force the web server to connect to it instead of the intended API address (https://api.ipify.org)
+
+**Run the POC twice:** 
+
+**First**, run only web_server.py and http_client.py . http_client.py will send 2 requests to the web server:
+
+    - The first one send HTTP GET request to the web server with 'https://api.ipify.org' address as the 'api' parameter, as intended to be used by the web server.
+    - The second one sends HTTP GET request to the web server with 'https://api.macvendors.com' address as the 'api' parameter. This exploits the vulnerability, as it forces the web server to connect to a different address than intended at /public_ip route.
+
+
+**Now run the POC again**
+
+First run web_server.py but this time add the web server's PID to allow_list.json and then run tcp_mon_block.py as mentioned earlier. 
+
+This will make sure the web server will only connect to the predefined allow_list of addresses (this can be either an IPv4, URL or domain name), essentially blocking any connection to any address not listed in the allow_list.
+
+Lastly, run http_client.py again:
+
+    - The first reqeusts sends HTTP GET request to the web server with 'https://api.ipify.org' address as the 'api' parameter, as intended to be used by the web server.
+    - The second reqeusts sends HTTP GET request to the web server with 'https://api.macvendors.com' address as the 'api' parameter. This time the exploitation attempt will be blocked by tcp_mon_block.py and the client should receive an error.
+
+
+Monitoring started:
+
+![alt text](https://github.com/agentzex/ebpf_tcp_mon_block/blob/main/screenshots/1.JPG)
+
+
+After web_server.py initiated a connection to a non-allowed address:
+
+![alt text](https://github.com/agentzex/ebpf_tcp_mon_block/blob/main/screenshots/2.JPG)
+
+
+
+**Prerequisites**: 
+
+    1. BCC and pyroute2 for tcp_mon_block
+    2. Python3 flask and requests in order to run the web_server.py and http_client.py POC
+    3. Tested on Ubuntu with kernel version 5.15.0-57
+
diff --git a/examples/networking/tcp_mon_block/screenshots/1.JPG b/examples/networking/tcp_mon_block/screenshots/1.JPG
new file mode 100644
index 0000000..d7b816f
--- /dev/null
+++ b/examples/networking/tcp_mon_block/screenshots/1.JPG
Binary files differ
diff --git a/examples/networking/tcp_mon_block/screenshots/2.JPG b/examples/networking/tcp_mon_block/screenshots/2.JPG
new file mode 100644
index 0000000..92e9ef9
--- /dev/null
+++ b/examples/networking/tcp_mon_block/screenshots/2.JPG
Binary files differ
diff --git a/examples/networking/tcp_mon_block/src/allow_list.json b/examples/networking/tcp_mon_block/src/allow_list.json
new file mode 100644
index 0000000..4bcdada
--- /dev/null
+++ b/examples/networking/tcp_mon_block/src/allow_list.json
@@ -0,0 +1,10 @@
+[
+  {
+  "pid": "53927",
+  "allow_list": ["192.168.1.2", "192.168.1.3", "https://api.ipify.org"]
+  },
+  {
+  "pid": "1111",
+  "allow_list": ["192.168.1.2"]
+  }
+]
diff --git a/examples/networking/tcp_mon_block/src/http_client.py b/examples/networking/tcp_mon_block/src/http_client.py
new file mode 100644
index 0000000..c5a8e7b
--- /dev/null
+++ b/examples/networking/tcp_mon_block/src/http_client.py
@@ -0,0 +1,14 @@
+import requests
+
+
+server_address = "192.168.1.42"
+api_address = "https://api.ipify.org"
+
+# https://api.ipify.org should be allowed on default
+print(requests.get(f"http://{server_address}/public_ip", params={"api": api_address}).content.decode())
+
+# Now let's use an address which isn't on the allow list. This is an MAC address to Vendor API.
+# If tcp_mon_block is running and filtering the Flask's server PID, this request should fail! otherwise we should receive a response
+api_address = "https://api.macvendors.com/00:0c:29:de:b1:fd"
+
+print(requests.get(f"http://{server_address}/public_ip", params={"api": api_address}).content.decode())
diff --git a/examples/networking/tcp_mon_block/src/tcp_mon_block.c b/examples/networking/tcp_mon_block/src/tcp_mon_block.c
new file mode 100644
index 0000000..75c0da5
--- /dev/null
+++ b/examples/networking/tcp_mon_block/src/tcp_mon_block.c
@@ -0,0 +1,247 @@
+/*author: https://github.com/agentzex
+Licensed under the Apache License, Version 2.0 (the "License")
+
+tcp_mon_block.c - uses netlink TC, kernel tracepoints and kprobes to monitor outgoing connections from given PIDs
+and block connections to all addresses initiated from them (acting like an in-process firewall), unless they are listed in allow_list
+*/
+
+#include <uapi/linux/bpf.h>
+#include <uapi/linux/ptrace.h>
+#include <linux/tcp.h>
+#include <net/sock.h>
+#include <net/inet_sock.h>
+#include <linux/in.h>
+#include <linux/if_ether.h>
+#include <linux/if_packet.h>
+#include <uapi/linux/if_ether.h>
+#include <uapi/linux/ip.h>
+#include <linux/tcp.h>
+#include <uapi/linux/pkt_cls.h>
+#include <linux/fs.h>
+#include <linux/uaccess.h>
+
+
+typedef struct
+{
+    u32 src_ip;
+    u16 src_port;
+    u32 dst_ip;
+    u16 dst_port;
+    u32 pid;
+    u8 tcp_flags;
+    char comm[TASK_COMM_LEN];
+} full_packet;
+
+
+typedef struct
+{
+    u8 state;
+    u32 src_ip;
+    u16 src_port;
+    u32 dst_ip;
+    u16 dst_port;
+    u32 pid;
+    char comm[TASK_COMM_LEN];
+} verbose_event;
+
+
+typedef struct
+{
+    u32 src_ip;
+    u16 src_port;
+    u32 dst_ip;
+    u16 dst_port;
+} key_hash;
+
+
+BPF_HASH(monitored_connections, key_hash, full_packet);
+BPF_HASH(allow_list, u32, u32);
+BPF_HASH(pid_list, u32, u32);
+BPF_PERF_OUTPUT(blocked_events);
+BPF_PERF_OUTPUT(verbose_events);
+
+
+#ifndef tcp_flag_byte
+#define tcp_flag_byte(th) (((u_int8_t *)th)[13])
+#endif
+
+
+static bool VERBOSE_OUTPUT = false;
+
+
+static __always_inline int tcp_header_bound_check(struct tcphdr* tcp, void* data_end)
+{
+    if ((void *)tcp + sizeof(*tcp) > data_end)
+    {
+        return -1;
+    }
+
+    return 0;
+}
+
+
+static void make_verbose_event(verbose_event *v, u32 src_ip, u32 dst_ip, u16 src_port, u16 dst_port, u32 pid, u8 state)
+{
+    v->src_ip = src_ip;
+    v->src_port = src_port;
+    v->dst_ip = dst_ip;
+    v->dst_port = dst_port;
+    v->pid = pid;
+    v->state = state;
+    bpf_get_current_comm(&v->comm, sizeof(v->comm));
+}
+
+
+int handle_egress(struct __sk_buff *ctx)
+{
+    void* data_end = (void*)(long)ctx->data_end;
+    void* data = (void*)(long)ctx->data;
+    struct ethhdr *eth = data;
+    struct iphdr *ip = data + sizeof(*eth);
+    struct tcphdr *tcp;
+    key_hash key = {};
+
+    /* length check */
+    if (data + sizeof(*eth) + sizeof(*ip) > data_end)
+    {
+        return TC_ACT_OK;
+    }
+
+    if (eth->h_proto != htons(ETH_P_IP))
+    {
+        return TC_ACT_OK;
+    }
+
+    if (ip->protocol != IPPROTO_TCP)
+    {
+        return TC_ACT_OK;
+    }
+
+    tcp = (void *)ip + sizeof(*ip);
+    if (tcp_header_bound_check(tcp, data_end))
+    {
+        return TC_ACT_OK;
+    }
+
+    u8 tcpflags = ((u_int8_t *)tcp)[13];
+    u16 src_port = bpf_ntohs(tcp->source);
+    u16 dst_port = bpf_ntohs(tcp->dest);
+
+    key.src_ip = ip->saddr;
+    key.src_port = src_port;
+    key.dst_ip = ip->daddr;
+    key.dst_port = dst_port;
+
+    full_packet *packet_value;
+    packet_value = monitored_connections.lookup(&key);
+    if (packet_value != 0)
+    {
+        packet_value->tcp_flags = tcpflags;
+        blocked_events.perf_submit(ctx, packet_value, sizeof(full_packet));
+        return TC_ACT_SHOT;
+    }
+
+    return TC_ACT_OK;
+}
+
+
+// Removing the entry from monitored_connections when the socket closes after failed connection
+TRACEPOINT_PROBE(sock, inet_sock_set_state)
+{
+    if (args->protocol != IPPROTO_TCP)
+    {
+        return 0;
+    }
+
+    if (args->newstate != TCP_CLOSE && args->newstate != TCP_CLOSE_WAIT)
+    {
+        return 0;
+    }
+
+    if (args->family == AF_INET)
+    {
+        key_hash key = {};
+        struct sock *sk = (struct sock *)args->skaddr;
+
+        key.src_port = args->sport;
+        key.dst_port = args->dport;
+        __builtin_memcpy(&key.src_ip, args->saddr, sizeof(key.src_ip));
+        __builtin_memcpy(&key.dst_ip, args->daddr, sizeof(key.dst_ip));
+
+        full_packet *packet_value;
+        packet_value = monitored_connections.lookup(&key);
+        if (packet_value != 0)
+        {
+            monitored_connections.delete(&key);
+            if (VERBOSE_OUTPUT)
+            {
+                verbose_event v = {};
+                make_verbose_event(&v, packet_value->src_ip, packet_value->dst_ip, packet_value->src_port, packet_value->dst_port, packet_value->pid, 3);
+                verbose_events.perf_submit(args, &v, sizeof(v));
+            }
+
+        }
+    }
+
+    return 0;
+}
+
+
+
+
+int trace_connect_entry(struct pt_regs *ctx, struct sock *sk)
+{
+    key_hash key = {};
+    full_packet packet_value = {};
+    u8 verbose_state = 0;
+
+    u16 family = sk->__sk_common.skc_family;
+    if (family != AF_INET)
+    {
+        return 0;
+    }
+
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+    u16 dst_port = sk->__sk_common.skc_dport;
+    dst_port = ntohs(dst_port);
+    u16 src_port = sk->__sk_common.skc_num;
+    u32 src_ip = sk->__sk_common.skc_rcv_saddr;
+    u32 dst_ip = sk->__sk_common.skc_daddr;
+
+    u32 *monitored_pid = pid_list.lookup(&pid);
+    if (!monitored_pid)
+    {
+        return 0;
+    }
+
+    u32 *allowed_ip = allow_list.lookup(&dst_ip);
+    if (!allowed_ip)
+    {
+        key.src_ip = src_ip;
+        key.src_port = src_port;
+        key.dst_ip = dst_ip;
+        key.dst_port = dst_port;
+
+        packet_value.src_ip = src_ip;
+        packet_value.src_port = src_port;
+        packet_value.dst_ip = dst_ip;
+        packet_value.dst_port = dst_port;
+        packet_value.pid = pid;
+        bpf_get_current_comm(&packet_value.comm, sizeof(packet_value.comm));
+        verbose_state = 1;
+        monitored_connections.update(&key, &packet_value);
+    }
+    else
+    {
+        verbose_state = 2;
+    }
+
+    if (VERBOSE_OUTPUT)
+    {
+        verbose_event v = {};
+        make_verbose_event(&v, src_ip, dst_ip, src_port, dst_port, pid, verbose_state);
+        verbose_events.perf_submit(ctx, &v, sizeof(v));
+    }
+
+    return 0;
+}
\ No newline at end of file
diff --git a/examples/networking/tcp_mon_block/src/tcp_mon_block.py b/examples/networking/tcp_mon_block/src/tcp_mon_block.py
new file mode 100644
index 0000000..249c8fb
--- /dev/null
+++ b/examples/networking/tcp_mon_block/src/tcp_mon_block.py
@@ -0,0 +1,227 @@
+#!/usr/bin/python
+# author: https://github.com/agentzex
+# Licensed under the Apache License, Version 2.0 (the "License")
+
+# tcp_mon_block.py - uses netlink TC, kernel tracepoints and kprobes to monitor outgoing connections from given PIDs
+# and block connections to all addresses initiated from them (acting like an in-process firewall), unless they are listed in allow_list
+
+# outputs blocked connections attempts from monitored processes
+# Usage:
+#   python3 tcp_mon_block.py -i network_interface_name
+#   python3 tcp_mon_block.py -v -i network_interface_name (-v --verbose - will output all connections attempts, including allowed ones)
+#
+
+
+from bcc import BPF
+import pyroute2
+import socket
+import struct
+import json
+import argparse
+from urllib.parse import urlparse
+
+
+# TCP flags
+FIN = 0x01
+SYN = 0x02
+RST = 0x04
+PSH = 0x08
+ACK = 0x10
+URG = 0x20
+ECE = 0x40
+CWR = 0x80
+
+
+verbose_states = {
+    1: "Connection not allowed detected - forwarding to block",
+    2: "Connection allowed",
+    3: "Connection destroyed",
+}
+
+
+def get_verbose_message(state):
+    if state not in verbose_states:
+        return ""
+
+    return verbose_states[state]
+
+
+def parse_tcp_flags(flags):
+    found_flags = ""
+    if flags & FIN:
+        found_flags += "FIN; "
+    if flags & SYN:
+        found_flags += "SYN; "
+    if flags & RST:
+        found_flags += "RST; "
+    if flags & PSH:
+        found_flags += "PSH; "
+    if flags & ACK:
+        found_flags += "ACK; "
+    if flags & URG:
+        found_flags += "URG; "
+    if flags & ECE:
+        found_flags += "ECE; "
+    if flags & CWR:
+        found_flags += "CWR;"
+
+    return found_flags
+
+
+def ip_to_network_address(ip):
+    return struct.unpack("I", socket.inet_aton(ip))[0]
+
+
+def network_address_to_ip(ip):
+    return socket.inet_ntop(socket.AF_INET, struct.pack("I", ip))
+
+
+def parse_address(url_or_ip):
+    is_ipv4 = True
+    domain = ""
+
+    #first check if valid ipv4
+    try:
+        socket.inet_aton(url_or_ip)
+    except socket.error:
+        is_ipv4 = False
+
+    if is_ipv4:
+        return [url_or_ip]
+
+    # if not check if valid URL, parse and get its domain, resolve it to IPv4 and return it
+    try:
+        domain = urlparse(url_or_ip).netloc
+    except:
+        print(f"[-] {url_or_ip} is invalid IPv4 or URL")
+        return False
+
+    # should get a list of IPv4 addresses resolved from the domain
+    try:
+        hostname, aliaslist, ipaddrlist = socket.gethostbyname_ex(domain)
+    except:
+        print(f"[-] Failed to resolve {url_or_ip} to Ipv4")
+        return False
+
+    return ipaddrlist
+
+
+def create_bpf_allow_list(bpf):
+    bpf_allow_list = bpf.get_table("allow_list")
+    bpf_pid_list = bpf.get_table("pid_list")
+    with open("allow_list.json", "r") as f:
+        pids_to_list = json.loads(f.read())
+
+    print("[+] Reading and parsing allow_list.json")
+    for pid_to_list in pids_to_list:
+        try:
+            pid = int(pid_to_list["pid"])
+        except ValueError:
+            print(f"[-] invalid PID: {pid_to_list['pid']}")
+            continue
+
+        print(f"[+] Adding {pid} to monitored processes")
+        bpf_pid_list[bpf_pid_list.Key(pid)] = bpf_pid_list.Leaf(pid)
+
+        for url_or_ip in pid_to_list["allow_list"]:
+            ips = parse_address(url_or_ip)
+            if not ips:
+                continue
+            for ip in ips:
+                print(f"[+] Adding {ip} to allowed IPs")
+                ip = ip_to_network_address(ip)
+                bpf_allow_list[bpf_allow_list.Key(ip)] = bpf_allow_list.Leaf(ip)
+
+
+def create_tc(interface):
+    ip = pyroute2.IPRoute()
+    ipdb = pyroute2.IPDB(nl=ip)
+    try:
+        idx = ipdb.interfaces[interface].index
+    except:
+        print(f"[-] {interface} interface not found")
+        return False, False, False
+
+    try:
+        # deleting if exists from previous run
+        ip.tc("del", "clsact", idx)
+    except:
+        pass
+    ip.tc("add", "clsact", idx)
+    return ip, ipdb, idx
+
+
+def parse_blocked_event(cpu, data, size):
+    event = bpf["blocked_events"].event(data)
+    src_ip = network_address_to_ip(event.src_ip)
+    dst_ip = network_address_to_ip(event.dst_ip)
+    flags = parse_tcp_flags(event.tcp_flags)
+    print(f"{event.pid}: {event.comm.decode()} - {src_ip}:{event.src_port} -> {dst_ip}:{event.dst_port} Flags: {flags} was blocked!")
+
+
+def parse_verbose_event(cpu, data, size):
+    event = bpf["verbose_events"].event(data)
+    src_ip = network_address_to_ip(event.src_ip)
+    dst_ip = network_address_to_ip(event.dst_ip)
+    verbose_message = get_verbose_message(event.state)
+    print(f"{event.pid}: {event.comm.decode()} - {src_ip}:{event.src_port} -> {dst_ip}:{event.dst_port} - {verbose_message}")
+
+
+
+parser = argparse.ArgumentParser(description="Monitor given PIDs and block outgoing connections to all addresses initiated from them, unless they are listed in allow_list.json")
+parser.add_argument("-i", "--interface", help="Network interface name to monitor traffic on", required=True, type=str)
+parser.add_argument("-v", "--verbose", action="store_true", help="Set verbose output")
+args = parser.parse_args()
+print(f"[+] Monitoring {args.interface} interface")
+
+
+with open("tcp_mon_block.c", "r") as f:
+    bpf_text = f.read()
+
+if args.verbose:
+    print("[+] Verbose output is ON!")
+    bpf_text = bpf_text.replace("static bool VERBOSE_OUTPUT = false", "static bool VERBOSE_OUTPUT = true")
+
+
+ip, ipdb, idx = create_tc(args.interface)
+if not ip:
+    exit(-1)
+
+bpf = BPF(text=bpf_text)
+create_bpf_allow_list(bpf)
+
+# loading kprobe
+bpf.attach_kprobe(event="tcp_connect", fn_name="trace_connect_entry")
+
+# loading TC
+fn = bpf.load_func("handle_egress", BPF.SCHED_CLS)
+
+#default parent handlers:
+#https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/pkt_sched.h?id=1f211a1b929c804100e138c5d3d656992cfd5622
+#define TC_H_MIN_INGRESS	0xFFF2U
+#define TC_H_MIN_EGRESS		0xFFF3U
+
+ip.tc("add-filter", "bpf", idx, ":1", fd=fn.fd, name=fn.name, parent="ffff:fff3", classid=1, direct_action=True)
+bpf["blocked_events"].open_perf_buffer(parse_blocked_event)
+bpf["verbose_events"].open_perf_buffer(parse_verbose_event)
+
+
+print("[+] Monitoring started\n")
+while True:
+    try:
+        bpf.perf_buffer_poll()
+    except KeyboardInterrupt:
+        break
+
+ip.tc("del", "clsact", idx)
+ipdb.release()
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/networking/tcp_mon_block/src/web_server.py b/examples/networking/tcp_mon_block/src/web_server.py
new file mode 100644
index 0000000..745c392
--- /dev/null
+++ b/examples/networking/tcp_mon_block/src/web_server.py
@@ -0,0 +1,34 @@
+from flask import Flask, request
+import requests
+import os
+
+# Forcing requests to use IPV4 addresses only currently
+requests.packages.urllib3.util.connection.HAS_IPV6 = False
+
+app = Flask(__name__)
+
+
+@app.route('/', methods=['GET'])
+def index():
+    return "Hello World!"
+
+
+# A simple route which is vulnerable to SSRF attack.
+# On normal usage, it uses an API service to get the server's public IP, this demonstrates outgoing connections from a web server
+# Extra read: https://portswigger.net/web-security/ssrf
+@app.route('/public_ip', methods=['GET'])
+def public_ip():
+    try:
+        api = request.args["api"]
+    except Exception as e:
+        return "Missing api argument"
+
+    # On expected connection to http://api.ipify.org the output here should be the server's public IP
+    server_ip = requests.get(api).content.decode()
+    return f"Server public IP is: {server_ip}"
+
+
+if __name__ == '__main__':
+    print(f"Web server running on PID: {str(os.getpid())}")
+    app.run(host="0.0.0.0", port=80)
+
diff --git a/examples/networking/vlan_learning/vlan_learning.c b/examples/networking/vlan_learning/vlan_learning.c
index 4ca91a9..47f238e 100644
--- a/examples/networking/vlan_learning/vlan_learning.c
+++ b/examples/networking/vlan_learning/vlan_learning.c
@@ -5,8 +5,8 @@
 
 struct ifindex_leaf_t {
   int out_ifindex;
-  int vlan_tci; // populated by phys2virt and used by virt2phys
-  int vlan_proto; // populated by phys2virt and used by virt2phys
+  u16 vlan_tci; // populated by phys2virt and used by virt2phys
+  u16 vlan_proto; // populated by phys2virt and used by virt2phys
   u64 tx_pkts;
   u64 tx_bytes;
 };
diff --git a/examples/perf/ipc.py b/examples/perf/ipc.py
index 51d15f6..73d02a0 100755
--- a/examples/perf/ipc.py
+++ b/examples/perf/ipc.py
@@ -158,20 +158,22 @@
 
 b["output"].open_perf_buffer(print_data)
 
-# Perf Event for Unhalted Cycles, The hex value is
-# combination of event, umask and cmask. Read Intel
-# Doc to find the event and cmask. Or use 
-# perf list --details to get event, umask and cmask
+# Perf Events for Unhalted Cycles and Retired Instructions are supported on
+# most platforms with a PMU and the kernel will attempt to translate these
+# into an architecture-specific event code. For architectures that do not have
+# these mappings, see perf list --details to find event details.
 # NOTE: Events can be multiplexed by kernel in case the
 # number of counters is greater than supported by CPU
 # performance monitoring unit, which can result in inaccurate
 # results. Counter values need to be normalized for a more
 # accurate value.
-PERF_TYPE_RAW = 4
+PERF_TYPE_HARDWARE = 0
+PERF_COUNT_HW_CPU_CYCLES = 0
+PERF_COUNT_HW_INSTRUCTIONS = 1
 # Unhalted Clock Cycles
-b["clk"].open_perf_event(PERF_TYPE_RAW, 0x0000003C)
+b["clk"].open_perf_event(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES)
 # Instruction Retired
-b["inst"].open_perf_event(PERF_TYPE_RAW, 0x000000C0)
+b["inst"].open_perf_event(PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS)
 
 while True:
 	try:
diff --git a/examples/tracing/biolatpcts.py b/examples/tracing/biolatpcts.py
index 68a5951..ae45275 100755
--- a/examples/tracing/biolatpcts.py
+++ b/examples/tracing/biolatpcts.py
@@ -19,37 +19,36 @@
 BPF_PERCPU_ARRAY(lat_1ms, u64, 100);
 BPF_PERCPU_ARRAY(lat_10us, u64, 100);
 
-void kprobe_blk_account_io_done(struct pt_regs *ctx, struct request *rq, u64 now)
+RAW_TRACEPOINT_PROBE(block_rq_complete)
 {
+        // TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes)
+        struct request *rq = (void *)ctx->args[0];
         unsigned int cmd_flags;
         u64 dur;
         size_t base, slot;
 
         if (!rq->io_start_time_ns)
-                return;
+                return 0;
 
-        dur = now - rq->io_start_time_ns;
+        dur = bpf_ktime_get_ns() - rq->io_start_time_ns;
 
         slot = min_t(size_t, div_u64(dur, 100 * NSEC_PER_MSEC), 99);
         lat_100ms.increment(slot);
         if (slot)
-                return;
+                return 0;
 
         slot = min_t(size_t, div_u64(dur, NSEC_PER_MSEC), 99);
         lat_1ms.increment(slot);
         if (slot)
-                return;
+                return 0;
 
         slot = min_t(size_t, div_u64(dur, 10 * NSEC_PER_USEC), 99);
         lat_10us.increment(slot);
+        return 0;
 }
 """
 
 bpf = BPF(text=bpf_source)
-if BPF.get_kprobe_functions(b'__blk_account_io_done'):
-    bpf.attach_kprobe(event="__blk_account_io_done", fn_name="kprobe_blk_account_io_done")
-else:
-    bpf.attach_kprobe(event="blk_account_io_done", fn_name="kprobe_blk_account_io_done")
 
 cur_lat_100ms = bpf['lat_100ms']
 cur_lat_1ms = bpf['lat_1ms']
diff --git a/examples/tracing/stacksnoop.py b/examples/tracing/stacksnoop.py
index 8a68e69..b08eac9 100755
--- a/examples/tracing/stacksnoop.py
+++ b/examples/tracing/stacksnoop.py
@@ -13,14 +13,13 @@
 from __future__ import print_function
 from bcc import BPF
 import argparse
-import ctypes as ct
 import time
 
 # arguments
 examples = """examples:
-    ./stacksnoop ext4_sync_fs    # print kernel stack traces for ext4_sync_fs
-    ./stacksnoop -s ext4_sync_fs    # ... also show symbol offsets
-    ./stacksnoop -v ext4_sync_fs    # ... show extra columns
+    ./stacksnoop ext4_sync_fs           # print kernel stack traces for ext4_sync_fs
+    ./stacksnoop -s ext4_sync_fs        # ... also show symbol offsets
+    ./stacksnoop -v ext4_sync_fs        # ... show extra columns
     ./stacksnoop -p 185 ext4_sync_fs    # ... only when PID 185 is on-CPU
 """
 parser = argparse.ArgumentParser(
@@ -56,7 +55,7 @@
 BPF_PERF_OUTPUT(events);
 
 void trace_stack(struct pt_regs *ctx) {
-    u32 pid = bpf_get_current_pid_tgid();
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
     FILTER
     struct data_t data = {};
     data.stack_id = stack_traces.get_stackid(ctx, 0),
@@ -79,13 +78,6 @@
 
 TASK_COMM_LEN = 16  # linux/sched.h
 
-class Data(ct.Structure):
-    _fields_ = [
-        ("stack_id", ct.c_ulonglong),
-        ("pid", ct.c_uint),
-        ("comm", ct.c_char * TASK_COMM_LEN),
-    ]
-
 matched = b.num_open_kprobes()
 if matched == 0:
     print("Function \"%s\" not found. Exiting." % function)
@@ -102,18 +94,18 @@
     print("%-18s %s" % ("TIME(s)", "FUNCTION"))
 
 def print_event(cpu, data, size):
-    event = ct.cast(data, ct.POINTER(Data)).contents
+    event = b["events"].event(data)
 
     ts = time.time() - start_ts
 
     if verbose:
         print("%-18.9f %-12.12s %-6d %-3d %s" %
-              (ts, event.comm.decode(), event.pid, cpu, function))
+              (ts, event.comm.decode('utf-8', 'replace'), event.pid, cpu, function))
     else:
         print("%-18.9f %s" % (ts, function))
 
     for addr in stack_traces.walk(event.stack_id):
-        sym = b.ksym(addr, show_offset=offset)
+        sym = b.ksym(addr, show_offset=offset).decode('utf-8', 'replace')
         print("\t%s" % sym)
 
     print()
diff --git a/examples/tracing/undump.py b/examples/tracing/undump.py
index 8640875..eabf458 100755
--- a/examples/tracing/undump.py
+++ b/examples/tracing/undump.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 # @lint-avoid-python-3-compatibility-imports
-# 
+#
 # undump        Dump UNIX socket packets.
 #               For Linux, uses BCC, eBPF. Embedded C.
 # USAGE: undump [-h] [-t] [-p PID]
@@ -35,7 +35,7 @@
     description="Dump UNIX socket packets",
     formatter_class=argparse.RawDescriptionHelpFormatter,
     epilog=examples)
-    
+
 parser.add_argument("-p", "--pid",
         help="trace this PID only")
 args = parser.parse_args()
@@ -75,22 +75,22 @@
 
     FILTER_PID
 
-	struct sk_buff *skb = (struct sk_buff *)PT_REGS_PARM1(ctx);
+    struct sk_buff *skb = (struct sk_buff *)PT_REGS_PARM1(ctx);
 
     struct recv_data_t *data = unix_data.lookup(&zero);
-    if (!data) 
+    if (!data)
         return 0;
 
     unsigned int data_len = skb->len;
     if(data_len > MAX_PKT)
         return 0;
-        
+
     void *iodata = (void *)skb->data;
     data->recv_len = data_len;
-    
+
     bpf_probe_read(data->pkt, data_len, iodata);
     unix_recv_events.perf_submit(ctx, data, data_len+sizeof(u32));
-    
+
     return 0;
 }
 """
diff --git a/examples/tracing/undump_example.txt b/examples/tracing/undump_example.txt
index 1d72aa4..bc6f04b 100644
--- a/examples/tracing/undump_example.txt
+++ b/examples/tracing/undump_example.txt
@@ -29,7 +29,7 @@
 
 # Here print bytes of receive
 PID 49264 Recv 13 bytes
-   48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 
+   48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a
 PID 49264 Recv 8 bytes
    61 62 63 64 65 66 67 0a
 ```
diff --git a/examples/tracing/vfsreadlat.c b/examples/tracing/vfsreadlat.c
index 77da22e..13c1def 100644
--- a/examples/tracing/vfsreadlat.c
+++ b/examples/tracing/vfsreadlat.c
@@ -18,7 +18,7 @@
 int do_entry(struct pt_regs *ctx)
 {
 	u32 pid;
-	u64 ts, *val;
+	u64 ts;
 
 	pid = bpf_get_current_pid_tgid();
 	ts = bpf_ktime_get_ns();
diff --git a/examples/tracing/vfsreadlat.py b/examples/tracing/vfsreadlat.py
index b2c4156..4fbfded 100755
--- a/examples/tracing/vfsreadlat.py
+++ b/examples/tracing/vfsreadlat.py
@@ -17,7 +17,6 @@
 
 from __future__ import print_function
 from bcc import BPF
-from ctypes import c_ushort, c_int, c_ulonglong
 from time import sleep
 from sys import argv
 
diff --git a/examples/usdt_sample/usdt_sample.md b/examples/usdt_sample/usdt_sample.md
index d356132..1eee903 100644
--- a/examples/usdt_sample/usdt_sample.md
+++ b/examples/usdt_sample/usdt_sample.md
@@ -4,7 +4,7 @@
 ## Ubuntu 21.10 prerequisites
 
 ```bash
-$ sudo apt-get install linux-headers-$(uname -r) "llvm-13*" libclang-13-dev luajit luajit-5.1-dev libelf-dev python3-distutils libdebuginfod-dev arping netperf iperf
+$ sudo apt-get install linux-headers-$(uname -r) "llvm-13*" libclang-13-dev luajit luajit-5.1-dev libelf-dev python3-setutools libdebuginfod-dev arping netperf iperf
 ```
 
 ## Building bcc tools
diff --git a/examples/usdt_sample/usdt_sample.sh b/examples/usdt_sample/usdt_sample.sh
index 8b14769..2a90d15 100755
--- a/examples/usdt_sample/usdt_sample.sh
+++ b/examples/usdt_sample/usdt_sample.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/bash
 
-# sudo apt-get install linux-headers-$(uname -r) "llvm-13*" libclang-13-dev luajit luajit-5.1-dev libelf-dev python3-distutils libdebuginfod-dev arping netperf iperf
+# sudo apt-get install linux-headers-$(uname -r) "llvm-13*" libclang-13-dev luajit luajit-5.1-dev libelf-dev python3-setuptools libdebuginfod-dev arping netperf iperf
 # mkdir -p build && cd build
 # cmake .. -DPYTHON_CMD=python3
 # make -j4
diff --git a/introspection/CMakeLists.txt b/introspection/CMakeLists.txt
index dcbe69a..ce2d03d 100644
--- a/introspection/CMakeLists.txt
+++ b/introspection/CMakeLists.txt
@@ -3,7 +3,11 @@
 
 include_directories(${PROJECT_SOURCE_DIR}/src/cc)
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/api)
+if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND)
+include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat)
+else()
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi)
+endif()
 
 option(INSTALL_INTROSPECTION "Install BPF introspection tools" ON)
 option(BPS_LINK_RT "Pass -lrt to linker when linking bps tool" ON)
diff --git a/introspection/bps.c b/introspection/bps.c
index 232b23d..3956fbf 100644
--- a/introspection/bps.c
+++ b/introspection/bps.c
@@ -81,6 +81,8 @@
   [BPF_MAP_TYPE_INODE_STORAGE] = "inode_storage",
   [BPF_MAP_TYPE_TASK_STORAGE] = "task_storage",
   [BPF_MAP_TYPE_BLOOM_FILTER] = "bloom_filter",
+  [BPF_MAP_TYPE_USER_RINGBUF] = "user_ringbuf",
+  [BPF_MAP_TYPE_CGRP_STORAGE] = "cgrp_storage",
 };
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
diff --git a/libbpf-tools/.gitignore b/libbpf-tools/.gitignore
index ce95db7..9288226 100644
--- a/libbpf-tools/.gitignore
+++ b/libbpf-tools/.gitignore
@@ -1,14 +1,17 @@
 /.output
+/btfhub-archive
 /bashreadline
 /bindsnoop
 /biolatency
 /biopattern
 /biosnoop
 /biostacks
+/biotop
 /bitesize
 /btrfsdist
 /btrfsslower
 /cachestat
+/capable
 /cpudist
 /cpufreq
 /drsnoop
@@ -23,12 +26,16 @@
 /funclatency
 /gethostlatency
 /hardirqs
+/javagc
+/killsnoop
 /klockstat
 /ksnoop
 /llcstat
+/memleak
+/mdflush
+/mountsnoop
 /nfsdist
 /nfsslower
-/mountsnoop
 /numamove
 /offcputime
 /oomkill
@@ -37,14 +44,22 @@
 /runqlat
 /runqlen
 /runqslower
+/sigsnoop
+/slabratetop
 /softirqs
 /solisten
 /statsnoop
 /syscount
 /tcpconnect
 /tcpconnlat
+/tcplife
+/tcppktlat
+/tcptracer
 /tcprtt
+/tcpstates
 /tcpsynbl
+/tcptop
 /vfsstat
+/wakeuptime
 /xfsdist
 /xfsslower
diff --git a/libbpf-tools/Android.bp b/libbpf-tools/Android.bp
index ec860e8..8bf6064 100644
--- a/libbpf-tools/Android.bp
+++ b/libbpf-tools/Android.bp
@@ -88,6 +88,7 @@
 
 cc_defaults {
     name: "bcc_binary_defaults",
+    defaults: ["elfutils_transitive_defaults"],
     generated_headers: [
         "libbpf_headers",
     ],
@@ -97,6 +98,7 @@
     srcs: [
         "android/argp.cpp",
         "trace_helpers.c",
+        "btf_helpers.c",
     ],
     static_libs: [
         "libbpf",
@@ -403,7 +405,10 @@
 
 cc_binary {
     name: "oomkill",
-    srcs: ["oomkill.c"],
+    srcs: [
+        "oomkill.c",
+        "compat.c",
+],
     generated_headers:  ["oomkill.skel.h"],
     defaults: ["bcc_binary_defaults"],
 }
@@ -508,6 +513,9 @@
     defaults: ["bcc_binary_defaults"],
 }
 
+//The following targets are temporarily disabled to to b/241472915
+//TODO (b/241472915)
+/*
 cc_object {
     name: "tcpconnect.bpf.o",
     srcs: ["tcpconnect.bpf.c"],
@@ -530,6 +538,7 @@
     generated_headers:  ["tcpconnect.skel.h"],
     defaults: ["bcc_binary_defaults"],
 }
+*/
 
 cc_object {
     name: "tcprtt.bpf.o",
diff --git a/libbpf-tools/Makefile b/libbpf-tools/Makefile
index 81a6faa..9171dac 100644
--- a/libbpf-tools/Makefile
+++ b/libbpf-tools/Makefile
@@ -1,21 +1,40 @@
 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
-OUTPUT := .output
+OUTPUT := $(abspath .output)
 CLANG ?= clang
 LLVM_STRIP ?= llvm-strip
-BPFTOOL ?= bin/bpftool
+BPFTOOL_SRC := $(abspath ./bpftool/src)
+BPFTOOL_OUTPUT ?= $(abspath $(OUTPUT)/bpftool)
+BPFTOOL ?= $(BPFTOOL_OUTPUT)/bootstrap/bpftool
 LIBBPF_SRC := $(abspath ../src/cc/libbpf/src)
 LIBBPF_OBJ := $(abspath $(OUTPUT)/libbpf.a)
+LIBBLAZESYM_SRC := $(abspath blazesym/target/release/libblazesym.a)
 INCLUDES := -I$(OUTPUT) -I../src/cc/libbpf/include/uapi
 CFLAGS := -g -O2 -Wall
 BPFCFLAGS := -g -O2 -Wall
 INSTALL ?= install
 prefix ?= /usr/local
-ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/' | sed 's/ppc64le/powerpc/' | sed 's/mips.*/mips/')
+ARCH ?= $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/' \
+			 | sed 's/ppc64le/powerpc/' | sed 's/mips.*/mips/' \
+			 | sed 's/riscv64/riscv/' | sed 's/loongarch.*/loongarch/')
+BTFHUB_ARCHIVE ?= $(abspath btfhub-archive)
+ifeq ($(ARCH),x86)
+CARGO ?= $(shell which cargo)
+ifeq ($(strip $(CARGO)),)
+USE_BLAZESYM ?= 0
+else
+USE_BLAZESYM ?= 1
+endif
+endif
 
 ifeq ($(wildcard $(ARCH)/),)
 $(error Architecture $(ARCH) is not supported yet. Please open an issue)
 endif
 
+BZ_APPS = \
+	memleak \
+	opensnoop \
+	#
+
 APPS = \
 	bashreadline \
 	bindsnoop \
@@ -23,8 +42,10 @@
 	biopattern \
 	biosnoop \
 	biostacks \
+	biotop \
 	bitesize \
 	cachestat \
+	capable \
 	cpudist \
 	cpufreq \
 	drsnoop \
@@ -37,32 +58,46 @@
 	funclatency \
 	gethostlatency \
 	hardirqs \
+	javagc \
 	klockstat \
 	ksnoop \
 	llcstat \
+	mdflush \
 	mountsnoop \
 	numamove \
 	offcputime \
 	oomkill \
-	opensnoop \
 	readahead \
 	runqlat \
 	runqlen \
 	runqslower \
+	sigsnoop \
+	slabratetop \
 	softirqs \
 	solisten \
 	statsnoop \
 	syscount \
+	tcptracer \
 	tcpconnect \
 	tcpconnlat \
+	tcplife \
+	tcppktlat \
 	tcprtt \
+	tcpstates \
 	tcpsynbl \
+	tcptop \
 	vfsstat \
+	wakeuptime \
+	$(BZ_APPS) \
 	#
 
+# export variables that are used in Makefile.btfgen as well.
+export OUTPUT BPFTOOL ARCH BTFHUB_ARCHIVE APPS
+
 FSDIST_ALIASES = btrfsdist ext4dist nfsdist xfsdist
 FSSLOWER_ALIASES = btrfsslower ext4slower nfsslower xfsslower
-APP_ALIASES = $(FSDIST_ALIASES) $(FSSLOWER_ALIASES)
+SIGSNOOP_ALIAS = killsnoop
+APP_ALIASES = $(FSDIST_ALIASES) $(FSSLOWER_ALIASES) ${SIGSNOOP_ALIAS}
 
 COMMON_OBJ = \
 	$(OUTPUT)/trace_helpers.o \
@@ -70,8 +105,27 @@
 	$(OUTPUT)/errno_helpers.o \
 	$(OUTPUT)/map_helpers.o \
 	$(OUTPUT)/uprobe_helpers.o \
+	$(OUTPUT)/btf_helpers.o \
+	$(OUTPUT)/compat.o \
+	$(if $(ENABLE_MIN_CORE_BTFS),$(OUTPUT)/min_core_btf_tar.o) \
 	#
 
+ifeq ($(USE_BLAZESYM),1)
+COMMON_OBJ += \
+	$(OUTPUT)/libblazesym.a \
+	$(OUTPUT)/blazesym.h \
+	#
+endif
+
+define allow-override
+  $(if $(or $(findstring environment,$(origin $(1))),\
+            $(findstring command line,$(origin $(1)))),,\
+    $(eval $(1) = $(2)))
+endef
+
+$(call allow-override,CC,$(CROSS_COMPILE)cc)
+$(call allow-override,LD,$(CROSS_COMPILE)ld)
+
 .PHONY: all
 all: $(APPS) $(APP_ALIASES)
 
@@ -84,26 +138,59 @@
 MAKEFLAGS += --no-print-directory
 endif
 
+ifneq ($(EXTRA_CFLAGS),)
+CFLAGS += $(EXTRA_CFLAGS)
+endif
+ifneq ($(EXTRA_LDFLAGS),)
+LDFLAGS += $(EXTRA_LDFLAGS)
+endif
+ifeq ($(USE_BLAZESYM),1)
+CFLAGS += -DUSE_BLAZESYM=1
+endif
+
+ifeq ($(USE_BLAZESYM),1)
+LDFLAGS += $(OUTPUT)/libblazesym.a -lrt -lpthread -ldl
+endif
+
 .PHONY: clean
 clean:
 	$(call msg,CLEAN)
 	$(Q)rm -rf $(OUTPUT) $(APPS) $(APP_ALIASES)
 
-$(OUTPUT) $(OUTPUT)/libbpf:
+$(LIBBLAZESYM_SRC)::
+	$(Q)cd blazesym && cargo build --release --features=cheader
+
+$(OUTPUT)/libblazesym.a: $(LIBBLAZESYM_SRC) | $(OUTPUT)
+	$(call msg,LIB,$@)
+	$(Q)cp $(LIBBLAZESYM_SRC) $@
+
+$(OUTPUT)/blazesym.h: $(LIBBLAZESYM_SRC) | $(OUTPUT)
+	$(call msg,INC,$@)
+	$(Q)cp blazesym/target/release/blazesym.h $@
+
+$(OUTPUT) $(OUTPUT)/libbpf $(BPFTOOL_OUTPUT):
 	$(call msg,MKDIR,$@)
 	$(Q)mkdir -p $@
 
-$(APPS): %: $(OUTPUT)/%.o $(LIBBPF_OBJ) $(COMMON_OBJ) | $(OUTPUT)
+$(BPFTOOL): | $(BPFTOOL_OUTPUT)
+	$(call msg,BPFTOOL,$@)
+	$(Q)$(MAKE) ARCH= CROSS_COMPILE=  OUTPUT=$(BPFTOOL_OUTPUT)/ -C $(BPFTOOL_SRC) bootstrap
+
+$(APPS): %: $(OUTPUT)/%.o $(COMMON_OBJ) $(LIBBPF_OBJ) | $(OUTPUT)
 	$(call msg,BINARY,$@)
 	$(Q)$(CC) $(CFLAGS) $^ $(LDFLAGS) -lelf -lz -o $@
 
+ifeq ($(USE_BLAZESYM),1)
+$(patsubst %,$(OUTPUT)/%.o,$(BZ_APPS)): $(OUTPUT)/blazesym.h
+endif
+
 $(patsubst %,$(OUTPUT)/%.o,$(APPS)): %.o: %.skel.h
 
 $(OUTPUT)/%.o: %.c $(wildcard %.h) $(LIBBPF_OBJ) | $(OUTPUT)
 	$(call msg,CC,$@)
 	$(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@
 
-$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(OUTPUT)
+$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(OUTPUT) $(BPFTOOL)
 	$(call msg,GEN-SKEL,$@)
 	$(Q)$(BPFTOOL) gen skeleton $< > $@
 
@@ -113,6 +200,16 @@
 		     -I$(ARCH)/ $(INCLUDES) -c $(filter %.c,$^) -o $@ &&      \
 	$(LLVM_STRIP) -g $@
 
+btfhub-archive: force
+	$(call msg,GIT,$@)
+	$(Q)[ -d "$(BTFHUB_ARCHIVE)" ] || git clone -q https://github.com/aquasecurity/btfhub-archive/ $(BTFHUB_ARCHIVE)
+	$(Q)cd $(BTFHUB_ARCHIVE) && git pull
+
+ifdef ENABLE_MIN_CORE_BTFS
+$(OUTPUT)/min_core_btf_tar.o: $(patsubst %,$(OUTPUT)/%.bpf.o,$(APPS)) btfhub-archive | bpftool
+	$(Q)$(MAKE) -f Makefile.btfgen
+endif
+
 # Build libbpf.a
 $(LIBBPF_OBJ): $(wildcard $(LIBBPF_SRC)/*.[ch]) | $(OUTPUT)/libbpf
 	$(call msg,LIB,$@)
@@ -129,12 +226,19 @@
 	$(call msg,SYMLINK,$@)
 	$(Q)ln -f -s $^ $@
 
+$(SIGSNOOP_ALIAS): sigsnoop
+	$(call msg,SYMLINK,$@)
+	$(Q)ln -f -s $^ $@
+
 install: $(APPS) $(APP_ALIASES)
 	$(call msg, INSTALL libbpf-tools)
 	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
 	$(Q)$(INSTALL) $(APPS) $(DESTDIR)$(prefix)/bin
 	$(Q)cp -a $(APP_ALIASES) $(DESTDIR)$(prefix)/bin
 
+.PHONY: force
+force:
+
 # delete failed targets
 .DELETE_ON_ERROR:
 # keep intermediate (.skel.h, .bpf.o, etc) targets
diff --git a/libbpf-tools/Makefile.btfgen b/libbpf-tools/Makefile.btfgen
new file mode 100644
index 0000000..bd58692
--- /dev/null
+++ b/libbpf-tools/Makefile.btfgen
@@ -0,0 +1,40 @@
+# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+SOURCE_BTF_FILES = $(shell find $(BTFHUB_ARCHIVE)/ -iregex ".*$(subst x86,x86_64,$(ARCH)).*" -type f -name '*.btf.tar.xz')
+MIN_CORE_BTF_FILES = $(patsubst $(BTFHUB_ARCHIVE)/%.btf.tar.xz, $(OUTPUT)/min_core_btfs/%.btf, $(SOURCE_BTF_FILES))
+BPF_O_FILES = $(patsubst %,$(OUTPUT)/%.bpf.o,$(APPS))
+
+.PHONY: all
+all: $(OUTPUT)/min_core_btf_tar.o
+
+ifeq ($(V),1)
+Q =
+msg =
+else
+Q = @
+msg = @printf '  %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
+MAKEFLAGS += --no-print-directory
+endif
+
+$(BTFHUB_ARCHIVE)/%.btf: $(BTFHUB_ARCHIVE)/%.btf.tar.xz
+	$(call msg,UNTAR,$@)
+	$(Q)tar xvfJ $< -C "$(@D)" > /dev/null
+	$(Q)touch $@
+
+$(MIN_CORE_BTF_FILES): $(BPF_O_FILES)
+
+# Create reduced version of BTF files to be embedded within the tools executables
+$(OUTPUT)/min_core_btfs/%.btf: $(BTFHUB_ARCHIVE)/%.btf
+	$(call msg,BTFGEN,$@)
+	$(Q)mkdir -p "$(@D)"
+	$(Q)$(BPFTOOL) gen min_core_btf $< $@ $(OUTPUT)/*.bpf.o
+
+# Compress reduced BTF files and create an object file with its content
+$(OUTPUT)/min_core_btf_tar.o: $(MIN_CORE_BTF_FILES)
+	$(call msg,TAR,$@)
+	$(Q)tar c --gz -f $(OUTPUT)/min_core_btfs.tar.gz -C $(OUTPUT)/min_core_btfs/ .
+	$(Q)cd $(OUTPUT) && ld -r -b binary min_core_btfs.tar.gz -o $@
+
+# delete failed targets
+.DELETE_ON_ERROR:
+# keep intermediate (.skel.h, .bpf.o, etc) targets
+.SECONDARY:
diff --git a/libbpf-tools/README.md b/libbpf-tools/README.md
index ac29ad4..943dbfe 100644
--- a/libbpf-tools/README.md
+++ b/libbpf-tools/README.md
@@ -16,12 +16,12 @@
 generated binaries.
 
 Given that the libbpf package might not be available across wide variety of
-distributions, all libbpf-based tools are linked statically against a version 
+distributions, all libbpf-based tools are linked statically against a version
 of libbpf that BCC links against (from submodule under src/cc/libbpf). This
 results in binaries with minimal amount of dependencies (libc, libelf, and
-libz are linked dynamically, though, given their widespread availability). 
-If your build fails because the libbpf submodule is outdated, try running `git 
-submodule update --init --recursive`. 
+libz are linked dynamically, though, given their widespread availability).
+If your build fails because the libbpf submodule is outdated, try running `git
+submodule update --init --recursive`.
 
 Tools are expected to follow a simple naming convention:
   - <tool>.c contains userspace C code of a tool.
@@ -92,3 +92,30 @@
 kernel build (it comes from dwarves package). Without it, BTF won't be
 generated, and on older kernels you'd get only warning, but still would
 build kernel successfully
+
+Running in kernels without CONFIG_DEBUG_INFO_BTF=y
+--------------------------------------------------
+
+It's possible to run some tools in kernels that don't expose
+`/sys/kernel/btf/vmlinux`. For those cases,
+[BTFGen](https://lore.kernel.org/bpf/20220215225856.671072-1-mauricio@kinvolk.io)
+and [BTFHub](https://github.com/aquasecurity/btfhub) can be used to
+generate small BTF files for the most popular Linux distributions that
+are shipped with the tools in order to provide the needed information to
+perform the CO-RE relocations when loading the eBPF programs.
+
+If you haven't cloned the
+[btfhub-archive](https://github.com/aquasecurity/btfhub) repository, you
+can run make and it'll clone it for you into the `$HOME/.local/share`
+directory:
+
+```bash
+make ENABLE_MIN_CORE_BTFS=1 -j$(nproc)
+```
+
+If you have a local copy of such repository, you can pass it's location
+to avoid cloning it again:
+
+```bash
+make ENABLE_MIN_CORE_BTFS=1 BTF_HUB_ARCHIVE=<path_to_btfhub-archive> -j$(nproc)
+```
diff --git a/libbpf-tools/arm64/vmlinux.h b/libbpf-tools/arm64/vmlinux.h
index 3312543..382c9fa 120000
--- a/libbpf-tools/arm64/vmlinux.h
+++ b/libbpf-tools/arm64/vmlinux.h
@@ -1 +1 @@
-vmlinux_510.h
\ No newline at end of file
+vmlinux_608.h
\ No newline at end of file
diff --git a/libbpf-tools/arm64/vmlinux_510.h b/libbpf-tools/arm64/vmlinux_608.h
similarity index 63%
copy from libbpf-tools/arm64/vmlinux_510.h
copy to libbpf-tools/arm64/vmlinux_608.h
index f84b134..c315134 100644
--- a/libbpf-tools/arm64/vmlinux_510.h
+++ b/libbpf-tools/arm64/vmlinux_608.h
@@ -62,6 +62,8 @@
 
 typedef int __kernel_clockid_t;
 
+typedef __u16 __le16;
+
 typedef __u32 __le32;
 
 typedef unsigned int __poll_t;
@@ -82,6 +84,8 @@
 
 typedef __kernel_gid32_t gid_t;
 
+typedef long unsigned int uintptr_t;
+
 typedef __kernel_loff_t loff_t;
 
 typedef __kernel_size_t size_t;
@@ -96,16 +100,12 @@
 
 typedef u64 blkcnt_t;
 
-typedef u64 dma_addr_t;
-
 typedef unsigned int gfp_t;
 
 typedef unsigned int fmode_t;
 
 typedef u64 phys_addr_t;
 
-typedef long unsigned int irq_hw_number_t;
-
 typedef struct {
 	int counter;
 } atomic_t;
@@ -135,76 +135,6 @@
 	void (*func)(struct callback_head *);
 };
 
-struct kernel_symbol {
-	int value_offset;
-	int name_offset;
-	int namespace_offset;
-};
-
-struct jump_entry {
-	s32 code;
-	s32 target;
-	long int key;
-};
-
-struct static_key_mod;
-
-struct static_key {
-	atomic_t enabled;
-	union {
-		long unsigned int type;
-		struct jump_entry *entries;
-		struct static_key_mod *next;
-	};
-};
-
-struct static_key_false {
-	struct static_key key;
-};
-
-typedef int (*initcall_t)();
-
-typedef int initcall_entry_t;
-
-struct lock_class_key {};
-
-struct fs_context;
-
-struct fs_parameter_spec;
-
-struct dentry;
-
-struct super_block;
-
-struct module;
-
-struct file_system_type {
-	const char *name;
-	int fs_flags;
-	int (*init_fs_context)(struct fs_context *);
-	const struct fs_parameter_spec *parameters;
-	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
-	void (*kill_sb)(struct super_block *);
-	struct module *owner;
-	struct file_system_type *next;
-	struct hlist_head fs_supers;
-	struct lock_class_key s_lock_key;
-	struct lock_class_key s_umount_key;
-	struct lock_class_key s_vfs_rename_key;
-	struct lock_class_key s_writers_key[3];
-	struct lock_class_key i_lock_key;
-	struct lock_class_key i_mutex_key;
-	struct lock_class_key i_mutex_dir_key;
-};
-
-struct obs_kernel_param {
-	const char *str;
-	int (*setup_func)(char *);
-	int early;
-};
-
-typedef atomic64_t atomic_long_t;
-
 struct qspinlock {
 	union {
 		atomic_t val;
@@ -234,6 +164,8 @@
 
 typedef struct qrwlock arch_rwlock_t;
 
+struct lock_class_key {};
+
 struct lockdep_map {};
 
 struct raw_spinlock {
@@ -242,18 +174,6 @@
 
 typedef struct raw_spinlock raw_spinlock_t;
 
-struct spinlock {
-	union {
-		struct raw_spinlock rlock;
-	};
-};
-
-typedef struct spinlock spinlock_t;
-
-typedef struct {
-	arch_rwlock_t raw_lock;
-} rwlock_t;
-
 struct ratelimit_state {
 	raw_spinlock_t lock;
 	int interval;
@@ -264,6 +184,80 @@
 	long unsigned int flags;
 };
 
+struct kernel_symbol {
+	int value_offset;
+	int name_offset;
+	int namespace_offset;
+};
+
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long int key;
+};
+
+struct static_key_mod;
+
+struct static_key {
+	atomic_t enabled;
+	union {
+		long unsigned int type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
+	};
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct dentry;
+
+struct super_block;
+
+struct module;
+
+struct file_system_type {
+	const char *name;
+	int fs_flags;
+	int (*init_fs_context)(struct fs_context *);
+	const struct fs_parameter_spec *parameters;
+	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
+	void (*kill_sb)(struct super_block *);
+	struct module *owner;
+	struct file_system_type *next;
+	struct hlist_head fs_supers;
+	struct lock_class_key s_lock_key;
+	struct lock_class_key s_umount_key;
+	struct lock_class_key s_vfs_rename_key;
+	struct lock_class_key s_writers_key[3];
+	struct lock_class_key i_lock_key;
+	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
+	struct lock_class_key i_mutex_dir_key;
+};
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+typedef atomic64_t atomic_long_t;
+
+struct pi_entry {
+	const char *fmt;
+	const char *func;
+	const char *file;
+	unsigned int line;
+	const char *level;
+	const char *subsys_fmt_prefix;
+} __attribute__((packed));
+
 typedef void *fl_owner_t;
 
 struct file;
@@ -272,6 +266,8 @@
 
 struct iov_iter;
 
+struct io_comp_batch;
+
 struct dir_context;
 
 struct poll_table_struct;
@@ -288,6 +284,8 @@
 
 struct seq_file;
 
+struct io_uring_cmd;
+
 struct file_operations {
 	struct module *owner;
 	loff_t (*llseek)(struct file *, loff_t, int);
@@ -295,7 +293,7 @@
 	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
 	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
 	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
-	int (*iopoll)(struct kiocb *, bool);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
 	int (*iterate)(struct file *, struct dir_context *);
 	int (*iterate_shared)(struct file *, struct dir_context *);
 	__poll_t (*poll)(struct file *, struct poll_table_struct *);
@@ -321,16 +319,52 @@
 	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
 	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
 	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
 };
 
-enum system_states {
-	SYSTEM_BOOTING = 0,
-	SYSTEM_SCHEDULING = 1,
-	SYSTEM_RUNNING = 2,
-	SYSTEM_HALT = 3,
-	SYSTEM_POWER_OFF = 4,
-	SYSTEM_RESTART = 5,
-	SYSTEM_SUSPEND = 6,
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	short unsigned int line;
+	short unsigned int flags;
+};
+
+struct static_call_key {
+	void *func;
+};
+
+struct user_pt_regs {
+	__u64 regs[31];
+	__u64 sp;
+	__u64 pc;
+	__u64 pstate;
+};
+
+struct user_fpsimd_state {
+	__int128 unsigned vregs[32];
+	__u32 fpsr;
+	__u32 fpcr;
+	__u32 __reserved[2];
+};
+
+struct pt_regs {
+	union {
+		struct user_pt_regs user_regs;
+		struct {
+			u64 regs[31];
+			u64 sp;
+			u64 pc;
+			u64 pstate;
+		};
+	};
+	u64 orig_x0;
+	s32 syscallno;
+	u32 unused2;
+	u64 sdei_ttbr1;
+	u64 pmr_save;
+	u64 stackframe[2];
+	u64 lockdep_hardirqs;
+	u64 exit_rcu;
 };
 
 typedef __s64 time64_t;
@@ -345,51 +379,6 @@
 	long int tv_nsec;
 };
 
-struct bug_entry {
-	int bug_addr_disp;
-	int file_disp;
-	short unsigned int line;
-	short unsigned int flags;
-};
-
-struct cpumask {
-	long unsigned int bits[2];
-};
-
-typedef struct cpumask cpumask_t;
-
-typedef struct cpumask cpumask_var_t[1];
-
-struct llist_node {
-	struct llist_node *next;
-};
-
-struct __call_single_node {
-	struct llist_node llist;
-	union {
-		unsigned int u_flags;
-		atomic_t a_flags;
-	};
-	u16 src;
-	u16 dst;
-};
-
-typedef void (*smp_call_func_t)(void *);
-
-struct __call_single_data {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llist;
-			unsigned int flags;
-			u16 src;
-			u16 dst;
-		};
-	};
-	smp_call_func_t func;
-	void *info;
-};
-
 enum timespec_type {
 	TT_NONE = 0,
 	TT_NATIVE = 1,
@@ -403,13 +392,10 @@
 	s32 tv_nsec;
 };
 
-struct pollfd {
-	int fd;
-	short int events;
-	short int revents;
-};
+struct pollfd;
 
 struct restart_block {
+	long unsigned int arch_data;
 	long int (*fn)(struct restart_block *);
 	union {
 		struct {
@@ -439,11 +425,8 @@
 	};
 };
 
-typedef long unsigned int mm_segment_t;
-
 struct thread_info {
 	long unsigned int flags;
-	mm_segment_t addr_limit;
 	u64 ttbr0;
 	union {
 		u64 preempt_count;
@@ -452,6 +435,7 @@
 			u32 need_resched;
 		} preempt;
 	};
+	u32 cpu;
 };
 
 struct refcount_struct {
@@ -460,6 +444,20 @@
 
 typedef struct refcount_struct refcount_t;
 
+struct llist_node {
+	struct llist_node *next;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
+	union {
+		unsigned int u_flags;
+		atomic_t a_flags;
+	};
+	u16 src;
+	u16 dst;
+};
+
 struct load_weight {
 	long unsigned int weight;
 	u32 inv_weight;
@@ -471,36 +469,6 @@
 	struct rb_node *rb_left;
 };
 
-struct sched_statistics {
-	u64 wait_start;
-	u64 wait_max;
-	u64 wait_count;
-	u64 wait_sum;
-	u64 iowait_count;
-	u64 iowait_sum;
-	u64 sleep_start;
-	u64 sleep_max;
-	s64 sum_sleep_runtime;
-	u64 block_start;
-	u64 block_max;
-	u64 exec_max;
-	u64 slice_max;
-	u64 nr_migrations_cold;
-	u64 nr_failed_migrations_affine;
-	u64 nr_failed_migrations_running;
-	u64 nr_failed_migrations_hot;
-	u64 nr_forced_migrations;
-	u64 nr_wakeups;
-	u64 nr_wakeups_sync;
-	u64 nr_wakeups_migrate;
-	u64 nr_wakeups_local;
-	u64 nr_wakeups_remote;
-	u64 nr_wakeups_affine;
-	u64 nr_wakeups_affine_attempts;
-	u64 nr_wakeups_passive;
-	u64 nr_wakeups_idle;
-};
-
 struct util_est {
 	unsigned int enqueued;
 	unsigned int ewma;
@@ -530,7 +498,6 @@
 	u64 vruntime;
 	u64 prev_sum_exec_runtime;
 	u64 nr_migrations;
-	struct sched_statistics statistics;
 	int depth;
 	struct sched_entity *parent;
 	struct cfs_rq *cfs_rq;
@@ -539,6 +506,9 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct sched_avg avg;
 };
 
@@ -596,13 +566,47 @@
 	struct sched_dl_entity *pi_se;
 };
 
-struct uclamp_se {
-	unsigned int value: 11;
-	unsigned int bucket_id: 3;
-	unsigned int active: 1;
-	unsigned int user_defined: 1;
+struct sched_statistics {
+	u64 wait_start;
+	u64 wait_max;
+	u64 wait_count;
+	u64 wait_sum;
+	u64 iowait_count;
+	u64 iowait_sum;
+	u64 sleep_start;
+	u64 sleep_max;
+	s64 sum_sleep_runtime;
+	u64 block_start;
+	u64 block_max;
+	s64 sum_block_runtime;
+	u64 exec_max;
+	u64 slice_max;
+	u64 nr_migrations_cold;
+	u64 nr_failed_migrations_affine;
+	u64 nr_failed_migrations_running;
+	u64 nr_failed_migrations_hot;
+	u64 nr_forced_migrations;
+	u64 nr_wakeups;
+	u64 nr_wakeups_sync;
+	u64 nr_wakeups_migrate;
+	u64 nr_wakeups_local;
+	u64 nr_wakeups_remote;
+	u64 nr_wakeups_affine;
+	u64 nr_wakeups_affine_attempts;
+	u64 nr_wakeups_passive;
+	u64 nr_wakeups_idle;
+	u64 core_forceidle_sum;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
+struct cpumask {
+	long unsigned int bits[64];
+};
+
+typedef struct cpumask cpumask_t;
+
 union rcu_special {
 	struct {
 		u8 blocked;
@@ -642,6 +646,30 @@
 	raw_spinlock_t lock;
 };
 
+struct seqcount {
+	unsigned int sequence;
+};
+
+typedef struct seqcount seqcount_t;
+
+enum vtime_state {
+	VTIME_INACTIVE = 0,
+	VTIME_IDLE = 1,
+	VTIME_SYS = 2,
+	VTIME_USER = 3,
+	VTIME_GUEST = 4,
+};
+
+struct vtime {
+	seqcount_t seqcount;
+	long long unsigned int starttime;
+	enum vtime_state state;
+	unsigned int cpu;
+	u64 utime;
+	u64 stime;
+	u64 gtime;
+};
+
 struct rb_root {
 	struct rb_node *rb_node;
 };
@@ -666,6 +694,11 @@
 	unsigned int expiry_active;
 };
 
+struct posix_cputimers_work {
+	struct callback_head work;
+	unsigned int scheduled;
+};
+
 struct sem_undo_list;
 
 struct sysv_sem {
@@ -697,6 +730,16 @@
 	struct seccomp_filter *filter;
 };
 
+struct syscall_user_dispatch {};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
 struct wake_q_node {
 	struct wake_q_node *next;
 };
@@ -712,15 +755,9 @@
 };
 
 typedef struct {
-	long unsigned int bits[2];
+	long unsigned int bits[8];
 } nodemask_t;
 
-struct seqcount {
-	unsigned int sequence;
-};
-
-typedef struct seqcount seqcount_t;
-
 struct seqcount_spinlock {
 	seqcount_t seqcount;
 };
@@ -733,7 +770,7 @@
 
 struct mutex {
 	atomic_long_t owner;
-	spinlock_t wait_lock;
+	raw_spinlock_t wait_lock;
 	struct optimistic_spin_queue osq;
 	struct list_head wait_list;
 };
@@ -753,6 +790,19 @@
 	long unsigned int max;
 };
 
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	long unsigned int expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
+};
+
+struct llist_head {
+	struct llist_node *first;
+};
+
 struct cpu_context {
 	long unsigned int x19;
 	long unsigned int x20;
@@ -769,13 +819,6 @@
 	long unsigned int pc;
 };
 
-struct user_fpsimd_state {
-	__int128 unsigned vregs[32];
-	__u32 fpsr;
-	__u32 fpcr;
-	__u32 __reserved[2];
-};
-
 struct perf_event;
 
 struct debug_info {
@@ -813,15 +856,18 @@
 	} uw;
 	unsigned int fpsimd_cpu;
 	void *sve_state;
-	unsigned int sve_vl;
-	unsigned int sve_vl_onexec;
+	void *za_state;
+	unsigned int vl[2];
+	unsigned int vl_onexec[2];
 	long unsigned int fault_address;
 	long unsigned int fault_code;
 	struct debug_info debug;
 	struct ptrauth_keys_user keys_user;
 	struct ptrauth_keys_kernel keys_kernel;
-	u64 sctlr_tcf0;
-	u64 gcr_user_incl;
+	u64 mte_ctrl;
+	u64 sctlr_user;
+	u64 svcr;
+	u64 tpidr2_el0;
 	long: 64;
 };
 
@@ -829,6 +875,8 @@
 
 struct task_group;
 
+struct rcu_node;
+
 struct mm_struct;
 
 struct pid;
@@ -891,6 +939,8 @@
 
 struct task_delay_info;
 
+struct kunit;
+
 struct ftrace_ret_stack;
 
 struct mem_cgroup;
@@ -901,16 +951,19 @@
 
 struct vm_struct;
 
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
 struct task_struct {
 	struct thread_info thread_info;
-	volatile long int state;
+	unsigned int __state;
 	void *stack;
 	refcount_t usage;
 	unsigned int flags;
 	unsigned int ptrace;
 	int on_cpu;
 	struct __call_single_node wake_entry;
-	unsigned int cpu;
 	unsigned int wakee_flips;
 	long unsigned int wakee_flip_decay_ts;
 	struct task_struct *last_wakee;
@@ -921,7 +974,8 @@
 	int static_prio;
 	int normal_prio;
 	unsigned int rt_priority;
-	const struct sched_class *sched_class;
+	long: 32;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -930,16 +984,34 @@
 	long: 64;
 	struct sched_entity se;
 	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
 	struct sched_dl_entity dl;
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
+	const struct sched_class *sched_class;
+	struct rb_node core_node;
+	long unsigned int core_cookie;
+	unsigned int core_occupation;
+	struct task_group *sched_task_group;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_statistics stats;
 	struct hlist_head preempt_notifiers;
 	unsigned int btrace_seq;
 	unsigned int policy;
 	int nr_cpus_allowed;
 	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
 	cpumask_t cpus_mask;
+	void *migration_pending;
+	short unsigned int migration_disabled;
+	short unsigned int migration_flags;
+	int rcu_read_lock_nesting;
+	union rcu_special rcu_read_unlock_special;
+	struct list_head rcu_node_entry;
+	struct rcu_node *rcu_blocked_node;
 	long unsigned int rcu_tasks_nvcsw;
 	u8 rcu_tasks_holdout;
 	u8 rcu_tasks_idx;
@@ -948,8 +1020,9 @@
 	int trc_reader_nesting;
 	int trc_ipi_to_cpu;
 	union rcu_special trc_reader_special;
-	bool trc_reader_checked;
 	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
 	struct sched_info sched_info;
 	struct list_head tasks;
 	struct plist_node pushable_tasks;
@@ -977,11 +1050,13 @@
 	unsigned int frozen: 1;
 	unsigned int use_memdelay: 1;
 	unsigned int in_memstall: 1;
+	unsigned int in_page_owner: 1;
+	unsigned int in_eventfd: 1;
+	unsigned int pasid_activated: 1;
 	long unsigned int atomic_flags;
 	struct restart_block restart_block;
 	pid_t pid;
 	pid_t tgid;
-	long unsigned int stack_canary;
 	struct task_struct *real_parent;
 	struct task_struct *parent;
 	struct list_head children;
@@ -996,10 +1071,13 @@
 	struct completion *vfork_done;
 	int *set_child_tid;
 	int *clear_child_tid;
+	void *worker_private;
 	u64 utime;
 	u64 stime;
 	u64 gtime;
 	struct prev_cputime prev_cputime;
+	struct vtime vtime;
+	atomic_t tick_dep_mask;
 	long unsigned int nvcsw;
 	long unsigned int nivcsw;
 	u64 start_time;
@@ -1007,6 +1085,7 @@
 	long unsigned int min_flt;
 	long unsigned int maj_flt;
 	struct posix_cputimers posix_cputimers;
+	struct posix_cputimers_work posix_cputimers_work;
 	const struct cred *ptracer_cred;
 	const struct cred *real_cred;
 	const struct cred *cred;
@@ -1015,8 +1094,6 @@
 	struct nameidata *nameidata;
 	struct sysv_sem sysvsem;
 	struct sysv_shm sysvshm;
-	long unsigned int last_switch_count;
-	long unsigned int last_switch_time;
 	struct fs_struct *fs;
 	struct files_struct *files;
 	struct io_uring_task *io_uring;
@@ -1035,6 +1112,7 @@
 	kuid_t loginuid;
 	unsigned int sessionid;
 	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
 	u64 parent_exec_id;
 	u64 self_exec_id;
 	spinlock_t alloc_lock;
@@ -1072,6 +1150,7 @@
 	struct perf_event_context *perf_event_ctxp[2];
 	struct mutex perf_event_mutex;
 	struct list_head perf_event_list;
+	long unsigned int preempt_disable_ip;
 	struct mempolicy *mempolicy;
 	short int il_prev;
 	short int pref_node_fork;
@@ -1107,6 +1186,7 @@
 	struct latency_record latency_record[32];
 	u64 timer_slack_ns;
 	u64 default_timer_slack_ns;
+	struct kunit *kunit_test;
 	int curr_ret_stack;
 	int curr_ret_depth;
 	struct ftrace_ret_stack *ret_stack;
@@ -1124,59 +1204,19 @@
 	struct uprobe_task *utask;
 	unsigned int sequential_io;
 	unsigned int sequential_io_avg;
+	struct kmap_ctrl kmap_ctrl;
 	int pagefault_disabled;
 	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
 	struct vm_struct *stack_vm_area;
 	refcount_t stack_refcount;
 	void *security;
+	struct bpf_local_storage *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	struct llist_head kretprobe_instances;
 	struct thread_struct thread;
 };
 
-typedef s32 compat_long_t;
-
-typedef u32 compat_uptr_t;
-
-struct user_pt_regs {
-	__u64 regs[31];
-	__u64 sp;
-	__u64 pc;
-	__u64 pstate;
-};
-
-struct pt_regs {
-	union {
-		struct user_pt_regs user_regs;
-		struct {
-			u64 regs[31];
-			u64 sp;
-			u64 pc;
-			u64 pstate;
-		};
-	};
-	u64 orig_x0;
-	s32 syscallno;
-	u32 unused2;
-	u64 orig_addr_limit;
-	u64 pmr_save;
-	u64 stackframe[2];
-	u64 lockdep_hardirqs;
-	u64 exit_rcu;
-};
-
-struct arch_hw_breakpoint_ctrl {
-	u32 __reserved: 19;
-	u32 len: 8;
-	u32 type: 2;
-	u32 privilege: 2;
-	u32 enabled: 1;
-};
-
-struct arch_hw_breakpoint {
-	u64 address;
-	u64 trigger;
-	struct arch_hw_breakpoint_ctrl ctrl;
-};
-
 typedef u64 pteval_t;
 
 typedef u64 pmdval_t;
@@ -1205,358 +1245,22 @@
 	pteval_t pgprot;
 } pgprot_t;
 
-enum module_state {
-	MODULE_STATE_LIVE = 0,
-	MODULE_STATE_COMING = 1,
-	MODULE_STATE_GOING = 2,
-	MODULE_STATE_UNFORMED = 3,
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
 };
 
-struct kref {
-	refcount_t refcount;
-};
-
-struct kset;
-
-struct kobj_type;
-
-struct kernfs_node;
-
-struct kobject {
-	const char *name;
-	struct list_head entry;
-	struct kobject *parent;
-	struct kset *kset;
-	struct kobj_type *ktype;
-	struct kernfs_node *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-struct module_param_attrs;
-
-struct module_kobject {
-	struct kobject kobj;
-	struct module *mod;
-	struct kobject *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct latch_tree_node {
-	struct rb_node node[2];
-};
-
-struct mod_tree_node {
-	struct module *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node mtn;
-};
-
-struct mod_plt_sec {
-	int plt_shndx;
-	int plt_num_entries;
-	int plt_max_entries;
-};
-
-struct plt_entry;
-
-struct mod_arch_specific {
-	struct mod_plt_sec core;
-	struct mod_plt_sec init;
-	struct plt_entry *ftrace_trampolines;
-};
-
-struct elf64_sym;
-
-typedef struct elf64_sym Elf64_Sym;
-
-struct mod_kallsyms {
-	Elf64_Sym *symtab;
-	unsigned int num_symtab;
-	char *strtab;
-	char *typetab;
-};
-
-typedef const int tracepoint_ptr_t;
-
-struct module_attribute;
-
-struct kernel_param;
-
-struct exception_table_entry;
-
-struct module_sect_attrs;
-
-struct module_notes_attrs;
-
-struct srcu_struct;
-
-struct bpf_raw_event_map;
-
-struct trace_event_call;
-
-struct trace_eval_map;
-
-struct error_injection_entry;
-
-struct module {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject mkobj;
-	struct module_attribute *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool using_gplonly_symbols;
-	const struct kernel_symbol *unused_syms;
-	const s32 *unused_crcs;
-	unsigned int num_unused_syms;
-	unsigned int num_unused_gpl_syms;
-	const struct kernel_symbol *unused_gpl_syms;
-	const s32 *unused_gpl_crcs;
-	bool sig_ok;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout core_layout;
-	struct module_layout init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	void *noinstr_text_start;
-	unsigned int noinstr_text_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	unsigned int num_ftrace_callsites;
-	long unsigned int *ftrace_callsites;
-	void *kprobes_text_start;
-	unsigned int kprobes_text_size;
-	long unsigned int *kprobe_blacklist;
-	unsigned int num_kprobe_blacklist;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum perf_event_state {
-	PERF_EVENT_STATE_DEAD = 4294967292,
-	PERF_EVENT_STATE_EXIT = 4294967293,
-	PERF_EVENT_STATE_ERROR = 4294967294,
-	PERF_EVENT_STATE_OFF = 4294967295,
-	PERF_EVENT_STATE_INACTIVE = 0,
-	PERF_EVENT_STATE_ACTIVE = 1,
+enum vec_type {
+	ARM64_VEC_SVE = 0,
+	ARM64_VEC_SME = 1,
+	ARM64_VEC_MAX = 2,
 };
 
 typedef struct {
-	atomic_long_t a;
-} local_t;
-
-typedef struct {
-	local_t a;
-} local64_t;
-
-struct perf_event_attr {
-	__u32 type;
-	__u32 size;
-	__u64 config;
-	union {
-		__u64 sample_period;
-		__u64 sample_freq;
-	};
-	__u64 sample_type;
-	__u64 read_format;
-	__u64 disabled: 1;
-	__u64 inherit: 1;
-	__u64 pinned: 1;
-	__u64 exclusive: 1;
-	__u64 exclude_user: 1;
-	__u64 exclude_kernel: 1;
-	__u64 exclude_hv: 1;
-	__u64 exclude_idle: 1;
-	__u64 mmap: 1;
-	__u64 comm: 1;
-	__u64 freq: 1;
-	__u64 inherit_stat: 1;
-	__u64 enable_on_exec: 1;
-	__u64 task: 1;
-	__u64 watermark: 1;
-	__u64 precise_ip: 2;
-	__u64 mmap_data: 1;
-	__u64 sample_id_all: 1;
-	__u64 exclude_host: 1;
-	__u64 exclude_guest: 1;
-	__u64 exclude_callchain_kernel: 1;
-	__u64 exclude_callchain_user: 1;
-	__u64 mmap2: 1;
-	__u64 comm_exec: 1;
-	__u64 use_clockid: 1;
-	__u64 context_switch: 1;
-	__u64 write_backward: 1;
-	__u64 namespaces: 1;
-	__u64 ksymbol: 1;
-	__u64 bpf_event: 1;
-	__u64 aux_output: 1;
-	__u64 cgroup: 1;
-	__u64 text_poke: 1;
-	__u64 __reserved_1: 30;
-	union {
-		__u32 wakeup_events;
-		__u32 wakeup_watermark;
-	};
-	__u32 bp_type;
-	union {
-		__u64 bp_addr;
-		__u64 kprobe_func;
-		__u64 uprobe_path;
-		__u64 config1;
-	};
-	union {
-		__u64 bp_len;
-		__u64 kprobe_addr;
-		__u64 probe_offset;
-		__u64 config2;
-	};
-	__u64 branch_sample_type;
-	__u64 sample_regs_user;
-	__u32 sample_stack_user;
-	__s32 clockid;
-	__u64 sample_regs_intr;
-	__u32 aux_watermark;
-	__u16 sample_max_stack;
-	__u16 __reserved_2;
-	__u32 aux_sample_size;
-	__u32 __reserved_3;
-};
-
-struct hw_perf_event_extra {
-	u64 config;
-	unsigned int reg;
-	int alloc;
-	int idx;
-};
-
-struct hw_perf_event {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	union {
-		struct {
-			u64 last_period;
-			local64_t period_left;
-		};
-		struct {
-			u64 saved_metric;
-			u64 saved_slots;
-		};
-	};
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
+	arch_rwlock_t raw_lock;
+} rwlock_t;
 
 struct wait_queue_head {
 	spinlock_t lock;
@@ -1565,155 +1269,6 @@
 
 typedef struct wait_queue_head wait_queue_head_t;
 
-struct irq_work {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llnode;
-			atomic_t flags;
-		};
-	};
-	void (*func)(struct irq_work *);
-};
-
-struct perf_addr_filters_head {
-	struct list_head list;
-	raw_spinlock_t lock;
-	unsigned int nr_file_filters;
-};
-
-struct perf_sample_data;
-
-typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
-
-struct ftrace_ops;
-
-typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct pt_regs *);
-
-struct ftrace_hash;
-
-struct ftrace_ops_hash {
-	struct ftrace_hash *notrace_hash;
-	struct ftrace_hash *filter_hash;
-	struct mutex regex_lock;
-};
-
-struct ftrace_ops {
-	ftrace_func_t func;
-	struct ftrace_ops *next;
-	long unsigned int flags;
-	void *private;
-	ftrace_func_t saved_func;
-	struct ftrace_ops_hash local_hash;
-	struct ftrace_ops_hash *func_hash;
-	struct ftrace_ops_hash old_hash;
-	long unsigned int trampoline;
-	long unsigned int trampoline_size;
-	struct list_head list;
-};
-
-struct pmu;
-
-struct perf_buffer;
-
-struct fasync_struct;
-
-struct perf_addr_filter_range;
-
-struct pid_namespace;
-
-struct bpf_prog;
-
-struct event_filter;
-
-struct perf_cgroup;
-
-struct perf_event {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event *group_leader;
-	struct pmu *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event hw;
-	struct perf_event_context *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct perf_buffer *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event *aux_event;
-	void (*destroy)(struct perf_event *);
-	struct callback_head callback_head;
-	struct pid_namespace *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t orig_overflow_handler;
-	struct bpf_prog *prog;
-	struct trace_event_call *tp_event;
-	struct event_filter *filter;
-	struct ftrace_ops ftrace_ops;
-	struct perf_cgroup *cgrp;
-	void *security;
-	struct list_head sb_list;
-};
-
-struct wait_queue_entry;
-
-typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
-
-struct wait_queue_entry {
-	unsigned int flags;
-	void *private;
-	wait_queue_func_t func;
-	struct list_head entry;
-};
-
-typedef struct wait_queue_entry wait_queue_entry_t;
-
 enum pid_type {
 	PIDTYPE_PID = 0,
 	PIDTYPE_TGID = 1,
@@ -1722,6 +1277,8 @@
 	PIDTYPE_MAX = 4,
 };
 
+struct pid_namespace;
+
 struct upid {
 	int nr;
 	struct pid_namespace *ns;
@@ -1745,6 +1302,7 @@
 	atomic_long_t stashed;
 	const struct proc_ns_operations *ops;
 	unsigned int inum;
+	refcount_t count;
 };
 
 struct kmem_cache;
@@ -1756,7 +1314,6 @@
 struct ucounts;
 
 struct pid_namespace {
-	struct kref kref;
 	struct idr idr;
 	struct callback_head rcu;
 	unsigned int pid_allocated;
@@ -1782,35 +1339,10 @@
 	struct upid numbers[1];
 };
 
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map {
-	u32 nr_extents;
-	union {
-		struct uid_gid_extent extent[5];
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
-
 typedef struct {
 	gid_t val;
 } kgid_t;
 
-struct rw_semaphore {
-	atomic_long_t count;
-	atomic_long_t owner;
-	struct optimistic_spin_queue osq;
-	raw_spinlock_t wait_lock;
-	struct list_head wait_list;
-};
-
 struct work_struct;
 
 typedef void (*work_func_t)(struct work_struct *);
@@ -1821,74 +1353,6 @@
 	work_func_t func;
 };
 
-struct ctl_table;
-
-struct ctl_table_root;
-
-struct ctl_table_set;
-
-struct ctl_dir;
-
-struct ctl_node;
-
-struct ctl_table_header {
-	union {
-		struct {
-			struct ctl_table *ctl_table;
-			int used;
-			int count;
-			int nreg;
-		};
-		struct callback_head rcu;
-	};
-	struct completion *unregistering;
-	struct ctl_table *ctl_table_arg;
-	struct ctl_table_root *root;
-	struct ctl_table_set *set;
-	struct ctl_dir *parent;
-	struct ctl_node *node;
-	struct hlist_head inodes;
-};
-
-struct ctl_dir {
-	struct ctl_table_header header;
-	struct rb_root root;
-};
-
-struct ctl_table_set {
-	int (*is_seen)(struct ctl_table_set *);
-	struct ctl_dir dir;
-};
-
-struct user_namespace {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct key *persistent_keyring_register;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts *ucounts;
-	int ucount_max[10];
-};
-
-struct timer_list {
-	struct hlist_node entry;
-	long unsigned int expires;
-	void (*function)(struct timer_list *);
-	u32 flags;
-};
-
 struct workqueue_struct;
 
 struct delayed_work {
@@ -1898,51 +1362,53 @@
 	int cpu;
 };
 
-struct rcu_work {
-	struct work_struct work;
-	struct callback_head rcu;
-	struct workqueue_struct *wq;
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
 };
 
 typedef struct page *pgtable_t;
 
 struct address_space;
 
-struct dev_pagemap;
+struct page_pool;
 
-struct obj_cgroup;
+struct dev_pagemap;
 
 struct page {
 	long unsigned int flags;
 	union {
 		struct {
-			struct list_head lru;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
 			struct address_space *mapping;
 			long unsigned int index;
 			long unsigned int private;
 		};
 		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
+			long unsigned int pp_magic;
+			struct page_pool *pp;
+			long unsigned int _pp_mapping_pad;
+			long unsigned int dma_addr;
 			union {
-				struct list_head slab_list;
-				struct {
-					struct page *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
+				long unsigned int dma_addr_upper;
+				atomic_long_t pp_frag_count;
 			};
 		};
 		struct {
@@ -1950,11 +1416,12 @@
 			unsigned char compound_dtor;
 			unsigned char compound_order;
 			atomic_t compound_mapcount;
+			atomic_t compound_pincount;
 			unsigned int compound_nr;
 		};
 		struct {
 			long unsigned int _compound_pad_1;
-			atomic_t hpage_pinned_refcount;
+			long unsigned int _compound_pad_2;
 			struct list_head deferred_list;
 		};
 		struct {
@@ -1976,14 +1443,9 @@
 	union {
 		atomic_t _mapcount;
 		unsigned int page_type;
-		unsigned int active;
-		int units;
 	};
 	atomic_t _refcount;
-	union {
-		struct mem_cgroup *mem_cgroup;
-		struct obj_cgroup **obj_cgroups;
-	};
+	long unsigned int memcg_data;
 };
 
 struct seqcount_raw_spinlock {
@@ -2030,6 +1492,18 @@
 	struct hrtimer_clock_base clock_base[8];
 };
 
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
 enum node_states {
 	N_POSSIBLE = 0,
 	N_ONLINE = 1,
@@ -2046,12 +1520,6 @@
 	__kernel_ulong_t rlim_max;
 };
 
-struct task_cputime {
-	u64 stime;
-	u64 utime;
-	long long unsigned int sum_exec_runtime;
-};
-
 typedef void __signalfn_t(int);
 
 typedef __signalfn_t *__sighandler_t;
@@ -2093,6 +1561,7 @@
 	struct {
 		void *_addr;
 		union {
+			int _trapno;
 			short int _addr_lsb;
 			struct {
 				char _dummy_bnd[8];
@@ -2103,6 +1572,11 @@
 				char _dummy_pkey[8];
 				__u32 _pkey;
 			} _addr_pkey;
+			struct {
+				long unsigned int _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
 		};
 	} _sigfault;
 	struct {
@@ -2125,23 +1599,6 @@
 	};
 };
 
-struct user_struct {
-	refcount_t __count;
-	atomic_t processes;
-	atomic_t sigpending;
-	atomic_t fanotify_listeners;
-	atomic_long_t epoll_watches;
-	long unsigned int mq_bytes;
-	long unsigned int locked_shm;
-	long unsigned int unix_inflight;
-	atomic_long_t pipe_bufs;
-	struct hlist_node uidhash_node;
-	kuid_t uid;
-	atomic_long_t locked_vm;
-	atomic_t nr_watches;
-	struct ratelimit_state ratelimit;
-};
-
 struct sigaction {
 	__sighandler_t sa_handler;
 	long unsigned int sa_flags;
@@ -2159,6 +1616,8 @@
 	struct userfaultfd_ctx *ctx;
 };
 
+struct anon_vma_name;
+
 struct anon_vma;
 
 struct vm_operations_struct;
@@ -2173,10 +1632,13 @@
 	struct mm_struct *vm_mm;
 	pgprot_t vm_page_prot;
 	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
+	union {
+		struct {
+			struct rb_node rb;
+			long unsigned int rb_subtree_last;
+		} shared;
+		struct anon_vma_name *anon_name;
+	};
 	struct list_head anon_vma_chain;
 	struct anon_vma *anon_vma;
 	const struct vm_operations_struct *vm_ops;
@@ -2188,6 +1650,14 @@
 	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
 };
 
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
 struct mm_rss_stat {
 	atomic_long_t count[4];
 };
@@ -2217,6 +1687,16 @@
 	long unsigned int ac_majflt;
 };
 
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+};
+
+struct core_state;
+
 struct tty_struct;
 
 struct autogroup;
@@ -2236,9 +1716,10 @@
 	struct hlist_head multiprocess;
 	int group_exit_code;
 	int notify_count;
-	struct task_struct *group_exit_task;
+	struct task_struct *group_exec_task;
 	int group_stop_count;
 	unsigned int flags;
+	struct core_state *core_state;
 	unsigned int is_child_subreaper: 1;
 	unsigned int has_child_subreaper: 1;
 	int posix_timer_id;
@@ -2249,6 +1730,7 @@
 	struct thread_group_cputimer cputimer;
 	struct posix_cputimers posix_cputimers;
 	struct pid *pids[4];
+	atomic_t tick_dep_mask;
 	struct pid *tty_old_pgrp;
 	int leader;
 	struct tty_struct *tty;
@@ -2290,24 +1772,37 @@
 	struct rw_semaphore exec_update_lock;
 };
 
+enum rseq_cs_flags_bit {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+
 struct rseq {
 	__u32 cpu_id_start;
 	__u32 cpu_id;
-	union {
-		__u64 ptr64;
-		__u64 ptr;
-	} rseq_cs;
+	__u64 rseq_cs;
 	__u32 flags;
 	long: 32;
 	long: 64;
 };
 
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = 4294967295,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
 struct rq;
 
 struct rq_flags;
 
 struct sched_class {
-	int uclamp_enabled;
 	void (*enqueue_task)(struct rq *, struct task_struct *, int);
 	void (*dequeue_task)(struct rq *, struct task_struct *, int);
 	void (*yield_task)(struct rq *);
@@ -2317,12 +1812,14 @@
 	void (*put_prev_task)(struct rq *, struct task_struct *);
 	void (*set_next_task)(struct rq *, struct task_struct *, bool);
 	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
-	int (*select_task_rq)(struct task_struct *, int, int, int);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
 	void (*migrate_task_rq)(struct task_struct *, int);
 	void (*task_woken)(struct rq *, struct task_struct *);
-	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *);
+	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *, u32);
 	void (*rq_online)(struct rq *);
 	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
 	void (*task_tick)(struct rq *, struct task_struct *, int);
 	void (*task_fork)(struct task_struct *);
 	void (*task_dead)(struct task_struct *);
@@ -2332,9 +1829,6 @@
 	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
 	void (*update_curr)(struct rq *);
 	void (*task_change_group)(struct task_struct *, int);
-	long: 64;
-	long: 64;
-	long: 64;
 };
 
 typedef struct {
@@ -2353,8 +1847,6 @@
 
 struct linux_binfmt;
 
-struct core_state;
-
 struct kioctx_table;
 
 struct mmu_notifier_subscriptions;
@@ -2373,8 +1865,6 @@
 		atomic_t membarrier_state;
 		atomic_t mm_users;
 		atomic_t mm_count;
-		atomic_t has_pinned;
-		seqcount_t write_protect_seq;
 		atomic_long_t pgtables_bytes;
 		int map_count;
 		spinlock_t page_table_lock;
@@ -2389,6 +1879,7 @@
 		long unsigned int exec_vm;
 		long unsigned int stack_vm;
 		long unsigned int def_flags;
+		seqcount_t write_protect_seq;
 		spinlock_t arg_lock;
 		long unsigned int start_code;
 		long unsigned int end_code;
@@ -2406,7 +1897,6 @@
 		struct linux_binfmt *binfmt;
 		mm_context_t context;
 		long unsigned int flags;
-		struct core_state *core_state;
 		spinlock_t ioctx_lock;
 		struct kioctx_table *ioctx_table;
 		struct task_struct *owner;
@@ -2421,6 +1911,7 @@
 		atomic_long_t hugetlb_usage;
 		struct work_struct async_put_work;
 		u32 pasid;
+		long unsigned int ksm_merging_pages;
 	};
 	long unsigned int cpu_bitmap[0];
 };
@@ -2441,6 +1932,8 @@
 
 typedef struct kernel_cap_struct kernel_cap_t;
 
+struct user_struct;
+
 struct group_info;
 
 struct cred {
@@ -2467,6 +1960,7 @@
 	void *security;
 	struct user_struct *user;
 	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
 	struct group_info *group_info;
 	union {
 		int non_rcu;
@@ -2588,621 +2082,40 @@
 	struct k_sigaction action[64];
 };
 
-struct bio;
-
-struct bio_list {
-	struct bio *head;
-	struct bio *tail;
-};
-
-struct blk_plug {
-	struct list_head mq_list;
-	struct list_head cb_list;
-	short unsigned int rq_count;
-	bool multiple_queues;
-	bool nowait;
-};
-
-struct reclaim_state {
-	long unsigned int reclaimed_slab;
-};
-
-struct percpu_counter {
-	raw_spinlock_t lock;
-	s64 count;
-	struct list_head list;
-	s32 *counters;
-};
-
-struct fprop_local_percpu {
-	struct percpu_counter events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-enum wb_reason {
-	WB_REASON_BACKGROUND = 0,
-	WB_REASON_VMSCAN = 1,
-	WB_REASON_SYNC = 2,
-	WB_REASON_PERIODIC = 3,
-	WB_REASON_LAPTOP_TIMER = 4,
-	WB_REASON_FS_FREE_SPACE = 5,
-	WB_REASON_FORKER_THREAD = 6,
-	WB_REASON_FOREIGN_FLUSH = 7,
-	WB_REASON_MAX = 8,
-};
-
-struct percpu_ref_data;
-
-struct percpu_ref {
-	long unsigned int percpu_count_ptr;
-	struct percpu_ref_data *data;
-};
-
-struct cgroup_subsys_state;
-
-struct bdi_writeback {
-	struct backing_dev_info *bdi;
-	long unsigned int state;
-	long unsigned int last_old_flush;
-	struct list_head b_dirty;
-	struct list_head b_io;
-	struct list_head b_more_io;
-	struct list_head b_dirty_time;
-	spinlock_t list_lock;
-	struct percpu_counter stat[4];
-	long unsigned int congested;
-	long unsigned int bw_time_stamp;
-	long unsigned int dirtied_stamp;
-	long unsigned int written_stamp;
-	long unsigned int write_bandwidth;
-	long unsigned int avg_write_bandwidth;
-	long unsigned int dirty_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	struct fprop_local_percpu completions;
-	int dirty_exceeded;
-	enum wb_reason start_all_reason;
-	spinlock_t work_lock;
-	struct list_head work_list;
-	struct delayed_work dwork;
-	long unsigned int dirty_sleep;
-	struct list_head bdi_node;
-	struct percpu_ref refcnt;
-	struct fprop_local_percpu memcg_completions;
-	struct cgroup_subsys_state *memcg_css;
-	struct cgroup_subsys_state *blkcg_css;
-	struct list_head memcg_node;
-	struct list_head blkcg_node;
-	union {
-		struct work_struct release_work;
-		struct callback_head rcu;
-	};
-};
-
-struct device;
-
-struct backing_dev_info {
-	u64 id;
-	struct rb_node rb_node;
-	struct list_head bdi_list;
-	long unsigned int ra_pages;
-	long unsigned int io_pages;
-	struct kref refcnt;
-	unsigned int capabilities;
-	unsigned int min_ratio;
-	unsigned int max_ratio;
-	unsigned int max_prop_frac;
-	atomic_long_t tot_write_bandwidth;
-	struct bdi_writeback wb;
-	struct list_head wb_list;
-	struct xarray cgwb_tree;
-	struct mutex cgwb_release_mutex;
-	struct rw_semaphore wb_switch_rwsem;
-	wait_queue_head_t wb_waitq;
-	struct device *dev;
-	char dev_name[64];
-	struct device *owner;
-	struct timer_list laptop_mode_wb_timer;
-	struct dentry *debug_dir;
-};
-
 struct io_cq;
 
 struct io_context {
 	atomic_long_t refcount;
 	atomic_t active_ref;
-	atomic_t nr_tasks;
-	spinlock_t lock;
 	short unsigned int ioprio;
+	spinlock_t lock;
 	struct xarray icq_tree;
 	struct io_cq *icq_hint;
 	struct hlist_head icq_list;
 	struct work_struct release_work;
 };
 
-struct cgroup;
-
-struct css_set {
-	struct cgroup_subsys_state *subsys[12];
-	refcount_t refcount;
-	struct css_set *dom_cset;
-	struct cgroup *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[12];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup *mg_src_cgrp;
-	struct cgroup *mg_dst_cgrp;
-	struct css_set *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
-};
+typedef u32 compat_uptr_t;
 
 struct compat_robust_list {
 	compat_uptr_t next;
 };
 
+typedef s32 compat_long_t;
+
 struct compat_robust_list_head {
 	struct compat_robust_list list;
 	compat_long_t futex_offset;
 	compat_uptr_t list_op_pending;
 };
 
-struct perf_event_groups {
-	struct rb_root tree;
-	u64 index;
-};
-
-struct perf_event_context {
-	struct pmu *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	int nr_cgroups;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct mempolicy {
-	atomic_t refcnt;
-	short unsigned int mode;
-	short unsigned int flags;
-	union {
-		short int preferred_node;
-		nodemask_t nodes;
-	} v;
-	union {
-		nodemask_t cpuset_mems_allowed;
-		nodemask_t user_nodemask;
-	} w;
-};
-
-struct task_delay_info {
-	raw_spinlock_t lock;
-	unsigned int flags;
-	u64 blkio_start;
-	u64 blkio_delay;
-	u64 swapin_delay;
-	u32 blkio_count;
-	u32 swapin_count;
-	u64 freepages_start;
-	u64 freepages_delay;
-	u64 thrashing_start;
-	u64 thrashing_delay;
-	u32 freepages_count;
-	u32 thrashing_count;
-};
-
 struct ftrace_ret_stack {
 	long unsigned int ret;
 	long unsigned int func;
 	long long unsigned int calltime;
+	long long unsigned int subtime;
 	long unsigned int fp;
-};
-
-struct cgroup_subsys;
-
-struct cgroup_subsys_state {
-	struct cgroup *cgroup;
-	struct cgroup_subsys *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state *parent;
-};
-
-struct mem_cgroup_id {
-	int id;
-	refcount_t ref;
-};
-
-struct page_counter {
-	atomic_long_t usage;
-	long unsigned int min;
-	long unsigned int low;
-	long unsigned int high;
-	long unsigned int max;
-	struct page_counter *parent;
-	long unsigned int emin;
-	atomic_long_t min_usage;
-	atomic_long_t children_min_usage;
-	long unsigned int elow;
-	atomic_long_t low_usage;
-	atomic_long_t children_low_usage;
-	long unsigned int watermark;
-	long unsigned int failcnt;
-};
-
-struct vmpressure {
-	long unsigned int scanned;
-	long unsigned int reclaimed;
-	long unsigned int tree_scanned;
-	long unsigned int tree_reclaimed;
-	spinlock_t sr_lock;
-	struct list_head events;
-	struct mutex events_lock;
-	struct work_struct work;
-};
-
-struct cgroup_file {
-	struct kernfs_node *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct mem_cgroup_threshold_ary;
-
-struct mem_cgroup_thresholds {
-	struct mem_cgroup_threshold_ary *primary;
-	struct mem_cgroup_threshold_ary *spare;
-};
-
-struct memcg_padding {
-	char x[0];
-};
-
-enum memcg_kmem_state {
-	KMEM_NONE = 0,
-	KMEM_ALLOCATED = 1,
-	KMEM_ONLINE = 2,
-};
-
-struct fprop_global {
-	struct percpu_counter events;
-	unsigned int period;
-	seqcount_t sequence;
-};
-
-struct wb_domain {
-	spinlock_t lock;
-	struct fprop_global completions;
-	struct timer_list period_timer;
-	long unsigned int period_time;
-	long unsigned int dirty_limit_tstamp;
-	long unsigned int dirty_limit;
-};
-
-struct wb_completion {
-	atomic_t cnt;
-	wait_queue_head_t *waitq;
-};
-
-struct memcg_cgwb_frn {
-	u64 bdi_id;
-	int memcg_id;
-	u64 at;
-	struct wb_completion done;
-};
-
-struct deferred_split {
-	spinlock_t split_queue_lock;
-	struct list_head split_queue;
-	long unsigned int split_queue_len;
-};
-
-struct memcg_vmstats_percpu;
-
-struct mem_cgroup_per_node;
-
-struct mem_cgroup {
-	struct cgroup_subsys_state css;
-	struct mem_cgroup_id id;
-	struct page_counter memory;
-	union {
-		struct page_counter swap;
-		struct page_counter memsw;
-	};
-	struct page_counter kmem;
-	struct page_counter tcpmem;
-	struct work_struct high_work;
-	long unsigned int soft_limit;
-	struct vmpressure vmpressure;
-	bool use_hierarchy;
-	bool oom_group;
-	bool oom_lock;
-	int under_oom;
-	int swappiness;
-	int oom_kill_disable;
-	struct cgroup_file events_file;
-	struct cgroup_file events_local_file;
-	struct cgroup_file swap_events_file;
-	struct mutex thresholds_lock;
-	struct mem_cgroup_thresholds thresholds;
-	struct mem_cgroup_thresholds memsw_thresholds;
-	struct list_head oom_notify;
-	long unsigned int move_charge_at_immigrate;
-	spinlock_t move_lock;
-	long unsigned int move_lock_flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad1_;
-	atomic_long_t vmstats[40];
-	atomic_long_t vmevents[95];
-	atomic_long_t memory_events[8];
-	atomic_long_t memory_events_local[8];
-	long unsigned int socket_pressure;
-	bool tcpmem_active;
-	int tcpmem_pressure;
-	int kmemcg_id;
-	enum memcg_kmem_state kmem_state;
-	struct obj_cgroup *objcg;
-	struct list_head objcg_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad2_;
-	atomic_t moving_account;
-	struct task_struct *move_lock_task;
-	struct memcg_vmstats_percpu *vmstats_local;
-	struct memcg_vmstats_percpu *vmstats_percpu;
-	struct list_head cgwb_list;
-	struct wb_domain cgwb_domain;
-	struct memcg_cgwb_frn cgwb_frn[4];
-	struct list_head event_list;
-	spinlock_t event_list_lock;
-	struct deferred_split deferred_split_queue;
-	struct mem_cgroup_per_node *nodeinfo[0];
-};
-
-struct blk_integrity_profile;
-
-struct blk_integrity {
-	const struct blk_integrity_profile *profile;
-	unsigned char flags;
-	unsigned char tuple_size;
-	unsigned char interval_exp;
-	unsigned char tag_size;
-};
-
-enum rpm_status {
-	RPM_ACTIVE = 0,
-	RPM_RESUMING = 1,
-	RPM_SUSPENDED = 2,
-	RPM_SUSPENDING = 3,
-};
-
-struct blk_rq_stat {
-	u64 mean;
-	u64 min;
-	u64 max;
-	u32 nr_samples;
-	u64 batch;
-};
-
-enum blk_zoned_model {
-	BLK_ZONED_NONE = 0,
-	BLK_ZONED_HA = 1,
-	BLK_ZONED_HM = 2,
-};
-
-struct queue_limits {
-	long unsigned int bounce_pfn;
-	long unsigned int seg_boundary_mask;
-	long unsigned int virt_boundary_mask;
-	unsigned int max_hw_sectors;
-	unsigned int max_dev_sectors;
-	unsigned int chunk_sectors;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	unsigned int physical_block_size;
-	unsigned int logical_block_size;
-	unsigned int alignment_offset;
-	unsigned int io_min;
-	unsigned int io_opt;
-	unsigned int max_discard_sectors;
-	unsigned int max_hw_discard_sectors;
-	unsigned int max_write_same_sectors;
-	unsigned int max_write_zeroes_sectors;
-	unsigned int max_zone_append_sectors;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	short unsigned int max_segments;
-	short unsigned int max_integrity_segments;
-	short unsigned int max_discard_segments;
-	unsigned char misaligned;
-	unsigned char discard_misaligned;
-	unsigned char raid_partial_stripes_expensive;
-	enum blk_zoned_model zoned;
-};
-
-struct bsg_ops;
-
-struct bsg_class_device {
-	struct device *class_dev;
-	int minor;
-	struct request_queue *queue;
-	const struct bsg_ops *ops;
-};
-
-typedef void *mempool_alloc_t(gfp_t, void *);
-
-typedef void mempool_free_t(void *, void *);
-
-struct mempool_s {
-	spinlock_t lock;
-	int min_nr;
-	int curr_nr;
-	void **elements;
-	void *pool_data;
-	mempool_alloc_t *alloc;
-	mempool_free_t *free;
-	wait_queue_head_t wait;
-};
-
-typedef struct mempool_s mempool_t;
-
-struct bio_set {
-	struct kmem_cache *bio_slab;
-	unsigned int front_pad;
-	mempool_t bio_pool;
-	mempool_t bvec_pool;
-	mempool_t bio_integrity_pool;
-	mempool_t bvec_integrity_pool;
-	spinlock_t rescue_lock;
-	struct bio_list rescue_list;
-	struct work_struct rescue_work;
-	struct workqueue_struct *rescue_workqueue;
-};
-
-struct request;
-
-struct elevator_queue;
-
-struct blk_queue_stats;
-
-struct rq_qos;
-
-struct blk_mq_ops;
-
-struct blk_mq_ctx;
-
-struct blk_mq_hw_ctx;
-
-struct blk_keyslot_manager;
-
-struct blk_stat_callback;
-
-struct blkcg_gq;
-
-struct blk_trace;
-
-struct blk_flush_queue;
-
-struct throtl_data;
-
-struct blk_mq_tag_set;
-
-struct request_queue {
-	struct request *last_merge;
-	struct elevator_queue *elevator;
-	struct percpu_ref q_usage_counter;
-	struct blk_queue_stats *stats;
-	struct rq_qos *rq_qos;
-	const struct blk_mq_ops *mq_ops;
-	struct blk_mq_ctx *queue_ctx;
-	unsigned int queue_depth;
-	struct blk_mq_hw_ctx **queue_hw_ctx;
-	unsigned int nr_hw_queues;
-	struct backing_dev_info *backing_dev_info;
-	void *queuedata;
-	long unsigned int queue_flags;
-	atomic_t pm_only;
-	int id;
-	gfp_t bounce_gfp;
-	spinlock_t queue_lock;
-	struct kobject kobj;
-	struct kobject *mq_kobj;
-	struct blk_integrity integrity;
-	struct device *dev;
-	enum rpm_status rpm_status;
-	unsigned int nr_pending;
-	long unsigned int nr_requests;
-	unsigned int dma_pad_mask;
-	unsigned int dma_alignment;
-	struct blk_keyslot_manager *ksm;
-	unsigned int rq_timeout;
-	int poll_nsec;
-	struct blk_stat_callback *poll_cb;
-	struct blk_rq_stat poll_stat[16];
-	struct timer_list timeout;
-	struct work_struct timeout_work;
-	atomic_t nr_active_requests_shared_sbitmap;
-	struct list_head icq_list;
-	long unsigned int blkcg_pols[1];
-	struct blkcg_gq *root_blkg;
-	struct list_head blkg_list;
-	struct queue_limits limits;
-	unsigned int required_elevator_features;
-	unsigned int nr_zones;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int max_open_zones;
-	unsigned int max_active_zones;
-	unsigned int sg_timeout;
-	unsigned int sg_reserved_size;
-	int node;
-	struct mutex debugfs_mutex;
-	struct blk_trace *blk_trace;
-	struct blk_flush_queue *fq;
-	struct list_head requeue_list;
-	spinlock_t requeue_lock;
-	struct delayed_work requeue_work;
-	struct mutex sysfs_lock;
-	struct mutex sysfs_dir_lock;
-	struct list_head unused_hctx_list;
-	spinlock_t unused_hctx_lock;
-	int mq_freeze_depth;
-	struct bsg_class_device bsg_dev;
-	struct throtl_data *td;
-	struct callback_head callback_head;
-	wait_queue_head_t mq_freeze_wq;
-	struct mutex mq_freeze_lock;
-	struct blk_mq_tag_set *tag_set;
-	struct list_head tag_set_list;
-	struct bio_set bio_split;
-	struct dentry *debugfs_dir;
-	bool mq_sysfs_init_done;
-	size_t cmd_size;
-	u64 write_hints[5];
+	long unsigned int *retp;
 };
 
 enum uprobe_task_state {
@@ -3247,25 +2160,31 @@
 	const void *caller;
 };
 
-struct kstat {
-	u32 result_mask;
-	umode_t mode;
-	unsigned int nlink;
-	uint32_t blksize;
-	u64 attributes;
-	u64 attributes_mask;
-	u64 ino;
-	dev_t dev;
-	dev_t rdev;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	struct timespec64 btime;
-	u64 blocks;
-	u64 mnt_id;
+enum rseq_event_mask_bits {
+	RSEQ_EVENT_PREEMPT_BIT = 0,
+	RSEQ_EVENT_SIGNAL_BIT = 1,
+	RSEQ_EVENT_MIGRATE_BIT = 2,
+};
+
+struct kref {
+	refcount_t refcount;
+};
+
+struct step_hook {
+	struct list_head node;
+	int (*fn)(struct pt_regs *, long unsigned int);
+};
+
+struct break_hook {
+	struct list_head node;
+	int (*fn)(struct pt_regs *, long unsigned int);
+	u16 imm;
+	u16 mask;
+};
+
+enum dbg_active_el {
+	DBG_ACTIVE_EL0 = 0,
+	DBG_ACTIVE_EL1 = 1,
 };
 
 struct return_instance {
@@ -3284,13 +2203,12 @@
 struct address_space {
 	struct inode *host;
 	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
 	gfp_t gfp_mask;
 	atomic_t i_mmap_writable;
-	atomic_t nr_thps;
 	struct rb_root_cached i_mmap;
 	struct rw_semaphore i_mmap_rwsem;
 	long unsigned int nrpages;
-	long unsigned int nrexceptional;
 	long unsigned int writeback_index;
 	const struct address_space_operations *a_ops;
 	long unsigned int flags;
@@ -3301,7 +2219,7 @@
 };
 
 struct vmem_altmap {
-	const long unsigned int base_pfn;
+	long unsigned int base_pfn;
 	const long unsigned int end_pfn;
 	const long unsigned int reserve;
 	long unsigned int free;
@@ -3309,11 +2227,19 @@
 	long unsigned int alloc;
 };
 
+struct percpu_ref_data;
+
+struct percpu_ref {
+	long unsigned int percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
 enum memory_type {
 	MEMORY_DEVICE_PRIVATE = 1,
-	MEMORY_DEVICE_FS_DAX = 2,
-	MEMORY_DEVICE_GENERIC = 3,
-	MEMORY_DEVICE_PCI_P2PDMA = 4,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
 };
 
 struct range {
@@ -3325,11 +2251,11 @@
 
 struct dev_pagemap {
 	struct vmem_altmap altmap;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
+	struct percpu_ref ref;
 	struct completion done;
 	enum memory_type type;
 	unsigned int flags;
+	long unsigned int vmemmap_shift;
 	const struct dev_pagemap_ops *ops;
 	void *owner;
 	int nr_range;
@@ -3339,13 +2265,25 @@
 	};
 };
 
-struct obj_cgroup {
-	struct percpu_ref refcnt;
-	struct mem_cgroup *memcg;
-	atomic_t nr_charged_bytes;
+struct folio {
 	union {
-		struct list_head list;
-		struct callback_head rcu;
+		struct {
+			long unsigned int flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			void *private;
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			long unsigned int memcg_data;
+		};
+		struct page page;
 	};
 };
 
@@ -3356,15 +2294,6 @@
 	struct dentry *dentry;
 };
 
-enum rw_hint {
-	WRITE_LIFE_NOT_SET = 0,
-	WRITE_LIFE_NONE = 1,
-	WRITE_LIFE_SHORT = 2,
-	WRITE_LIFE_MEDIUM = 3,
-	WRITE_LIFE_LONG = 4,
-	WRITE_LIFE_EXTREME = 5,
-};
-
 struct fown_struct {
 	rwlock_t lock;
 	struct pid *pid;
@@ -3385,14 +2314,14 @@
 
 struct file {
 	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
 	struct path f_path;
 	struct inode *f_inode;
 	const struct file_operations *f_op;
 	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
 	atomic_long_t f_count;
 	unsigned int f_flags;
 	fmode_t f_mode;
@@ -3404,20 +2333,15 @@
 	u64 f_version;
 	void *f_security;
 	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
+	struct hlist_head *f_ep;
 	struct address_space *f_mapping;
 	errseq_t f_wb_err;
 	errseq_t f_sb_err;
 };
 
-struct anon_vma {
-	struct anon_vma *root;
-	struct rw_semaphore rwsem;
-	atomic_t refcount;
-	unsigned int degree;
-	struct anon_vma *parent;
-	struct rb_root_cached rb_root;
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
 };
 
 typedef unsigned int vm_fault_t;
@@ -3433,11 +2357,12 @@
 struct vm_operations_struct {
 	void (*open)(struct vm_area_struct *);
 	void (*close)(struct vm_area_struct *);
-	int (*split)(struct vm_area_struct *, long unsigned int);
+	int (*may_split)(struct vm_area_struct *, long unsigned int);
 	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
 	vm_fault_t (*fault)(struct vm_fault *);
 	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
+	vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
 	long unsigned int (*pagesize)(struct vm_area_struct *);
 	vm_fault_t (*page_mkwrite)(struct vm_fault *);
 	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
@@ -3448,39 +2373,36 @@
 	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
 };
 
-struct core_thread {
-	struct task_struct *task;
-	struct core_thread *next;
-};
-
-struct core_state {
-	atomic_t nr_threads;
-	struct core_thread dumper;
-	struct completion startup;
-};
-
-struct linux_binprm;
-
-struct coredump_params;
-
-struct linux_binfmt {
-	struct list_head lh;
-	struct module *module;
-	int (*load_binary)(struct linux_binprm *);
-	int (*load_shlib)(struct file *);
-	int (*core_dump)(struct coredump_params *);
-	long unsigned int min_coredump;
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
 };
 
 struct vm_fault {
-	struct vm_area_struct *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
+	const struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		long unsigned int pgoff;
+		long unsigned int address;
+		long unsigned int real_address;
+	};
+	enum fault_flag flags;
 	pmd_t *pmd;
 	pud_t *pud;
-	pte_t orig_pte;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
 	struct page *cow_page;
 	struct page *page;
 	pte_t *pte;
@@ -3488,13 +2410,41 @@
 	pgtable_t prealloc_pte;
 };
 
-struct free_area {
-	struct list_head free_list[6];
-	long unsigned int nr_free;
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_PCPTYPES = 3,
+	MIGRATE_HIGHATOMIC = 3,
+	MIGRATE_CMA = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
 };
 
-struct zone_padding {
-	char x[0];
+enum numa_stat_item {
+	NUMA_HIT = 0,
+	NUMA_MISS = 1,
+	NUMA_FOREIGN = 2,
+	NUMA_INTERLEAVE_HIT = 3,
+	NUMA_LOCAL = 4,
+	NUMA_OTHER = 5,
+	NR_VM_NUMA_EVENT_ITEMS = 6,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
 };
 
 enum node_stat_item {
@@ -3535,11 +2485,15 @@
 	NR_VMSCAN_IMMEDIATE = 30,
 	NR_DIRTIED = 31,
 	NR_WRITTEN = 32,
-	NR_KERNEL_MISC_RECLAIMABLE = 33,
-	NR_FOLL_PIN_ACQUIRED = 34,
-	NR_FOLL_PIN_RELEASED = 35,
-	NR_KERNEL_STACK_KB = 36,
-	NR_VM_NODE_STAT_ITEMS = 37,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SWAPCACHE = 39,
+	PGPROMOTE_SUCCESS = 40,
+	NR_VM_NODE_STAT_ITEMS = 41,
 };
 
 enum lru_list {
@@ -3551,169 +2505,41 @@
 	NR_LRU_LISTS = 5,
 };
 
-struct pglist_data;
-
-struct lruvec {
-	struct list_head lists[5];
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	atomic_long_t nonresident_age;
-	long unsigned int refaults[2];
-	long unsigned int flags;
-	struct pglist_data *pgdat;
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
 };
 
-struct per_cpu_pageset;
-
-struct zone {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[4];
-	int node;
-	struct pglist_data *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	long unsigned int nr_isolate_pageblock;
-	seqlock_t span_seqlock;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[11];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	short: 16;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
 };
 
-struct zoneref {
-	struct zone *zone;
-	int zone_idx;
-};
-
-struct zonelist {
-	struct zoneref _zonerefs[513];
-};
-
-enum zone_type {
-	ZONE_DMA = 0,
-	ZONE_DMA32 = 1,
-	ZONE_NORMAL = 2,
-	ZONE_MOVABLE = 3,
-	__MAX_NR_ZONES = 4,
-};
-
-struct per_cpu_nodestat;
-
-struct pglist_data {
-	struct zone node_zones[4];
-	struct zonelist node_zonelists[2];
-	int nr_zones;
-	spinlock_t node_size_lock;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_highest_zoneidx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_highest_zoneidx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct deferred_split deferred_split_queue;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[37];
-	long: 64;
-	long: 64;
-};
-
-typedef unsigned int isolate_mode_t;
-
-struct per_cpu_pages {
-	int count;
-	int high;
-	int batch;
-	struct list_head lists[3];
-};
-
-struct per_cpu_pageset {
-	struct per_cpu_pages pcp;
-	s8 expire;
-	u16 vm_numa_stat_diff[6];
-	s8 stat_threshold;
-	s8 vm_stat_diff[12];
-};
-
-struct per_cpu_nodestat {
-	s8 stat_threshold;
-	s8 vm_node_stat_diff[37];
+enum {
+	ZONELIST_FALLBACK = 0,
+	ZONELIST_NOFALLBACK = 1,
+	MAX_ZONELISTS = 2,
 };
 
 struct rcu_segcblist {
 	struct callback_head *head;
 	struct callback_head **tails[4];
 	long unsigned int gp_seq[4];
-	long int len;
-	u8 enabled;
-	u8 offloaded;
+	atomic_long_t len;
+	long int seglen[4];
+	u8 flags;
 };
 
 struct srcu_node;
 
+struct srcu_struct;
+
 struct srcu_data {
 	long unsigned int srcu_lock_count[2];
 	long unsigned int srcu_unlock_count[2];
@@ -3735,6 +2561,10 @@
 	struct srcu_struct *ssp;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct srcu_node {
@@ -3748,8 +2578,9 @@
 };
 
 struct srcu_struct {
-	struct srcu_node node[9];
-	struct srcu_node *level[3];
+	struct srcu_node *node;
+	struct srcu_node *level[4];
+	int srcu_size_state;
 	struct mutex srcu_cb_mutex;
 	spinlock_t lock;
 	struct mutex srcu_gp_mutex;
@@ -3757,52 +2588,433 @@
 	long unsigned int srcu_gp_seq;
 	long unsigned int srcu_gp_seq_needed;
 	long unsigned int srcu_gp_seq_needed_exp;
+	long unsigned int srcu_gp_start;
 	long unsigned int srcu_last_gp_end;
+	long unsigned int srcu_size_jiffies;
+	long unsigned int srcu_n_lock_retries;
+	long unsigned int srcu_n_exp_nodelay;
 	struct srcu_data *sda;
+	bool sda_is_static;
 	long unsigned int srcu_barrier_seq;
 	struct mutex srcu_barrier_mutex;
 	struct completion srcu_barrier_completion;
 	atomic_t srcu_barrier_cpu_cnt;
+	long unsigned int reschedule_jiffies;
+	long unsigned int reschedule_count;
 	struct delayed_work work;
+	struct lockdep_map dep_map;
 };
 
-typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+struct list_lru_node;
 
-struct ctl_table_poll;
+struct list_lru {
+	struct list_lru_node *node;
+	struct list_head list;
+	int shrinker_id;
+	bool memcg_aware;
+	struct xarray xa;
+};
 
-struct ctl_table {
-	const char *procname;
-	void *data;
-	int maxlen;
+struct kernfs_root;
+
+struct kernfs_elem_dir {
+	long unsigned int subdirs;
+	struct rb_root children;
+	struct kernfs_root *root;
+	long unsigned int rev;
+};
+
+struct kernfs_node;
+
+struct kernfs_elem_symlink {
+	struct kernfs_node *target_kn;
+};
+
+struct kernfs_ops;
+
+struct kernfs_open_node;
+
+struct kernfs_elem_attr {
+	const struct kernfs_ops *ops;
+	struct kernfs_open_node *open;
+	loff_t size;
+	struct kernfs_node *notify_next;
+};
+
+struct kernfs_iattrs;
+
+struct kernfs_node {
+	atomic_t count;
+	atomic_t active;
+	struct kernfs_node *parent;
+	const char *name;
+	struct rb_node rb;
+	const void *ns;
+	unsigned int hash;
+	union {
+		struct kernfs_elem_dir dir;
+		struct kernfs_elem_symlink symlink;
+		struct kernfs_elem_attr attr;
+	};
+	void *priv;
+	u64 id;
+	short unsigned int flags;
 	umode_t mode;
-	struct ctl_table *child;
-	proc_handler *proc_handler;
-	struct ctl_table_poll *poll;
-	void *extra1;
-	void *extra2;
+	struct kernfs_iattrs *iattr;
 };
 
-struct ctl_table_poll {
-	atomic_t event;
-	wait_queue_head_t wait;
+struct kernfs_open_file;
+
+struct kernfs_ops {
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
+	size_t atomic_write_len;
+	bool prealloc;
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
 };
 
-struct ctl_node {
-	struct rb_node node;
-	struct ctl_table_header *header;
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
 };
 
-struct ctl_table_root {
-	struct ctl_table_set default_set;
-	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
-	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
-	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+struct kernfs_open_file {
+	struct kernfs_node *kn;
+	struct file *file;
+	struct seq_file *seq_file;
+	void *priv;
+	struct mutex mutex;
+	struct mutex prealloc_mutex;
+	int event;
+	struct list_head list;
+	char *prealloc_buf;
+	size_t atomic_write_len;
+	bool mmapped: 1;
+	bool released: 1;
+	const struct vm_operations_struct *vm_ops;
 };
 
-enum umh_disable_depth {
-	UMH_ENABLED = 0,
-	UMH_FREEZING = 1,
-	UMH_DISABLED = 2,
+enum kobj_ns_type {
+	KOBJ_NS_TYPE_NONE = 0,
+	KOBJ_NS_TYPE_NET = 1,
+	KOBJ_NS_TYPES = 2,
+};
+
+struct sock;
+
+struct kobj_ns_type_operations {
+	enum kobj_ns_type type;
+	bool (*current_may_mount)();
+	void * (*grab_current_ns)();
+	const void * (*netlink_ns)(struct sock *);
+	const void * (*initial_ns)();
+	void (*drop_ns)(void *);
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+};
+
+struct attribute {
+	const char *name;
+	umode_t mode;
+};
+
+struct kobject;
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+};
+
+struct bin_attribute {
+	struct attribute attr;
+	size_t size;
+	void *private;
+	struct address_space * (*f_mapping)();
+	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+struct sysfs_ops {
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+};
+
+struct kset_uevent_ops;
+
+struct kset {
+	struct list_head list;
+	spinlock_t list_lock;
+	struct kobject kobj;
+	const struct kset_uevent_ops *uevent_ops;
+};
+
+struct kobj_type {
+	void (*release)(struct kobject *);
+	const struct sysfs_ops *sysfs_ops;
+	const struct attribute_group **default_groups;
+	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
+	const void * (*namespace)(struct kobject *);
+	void (*get_ownership)(struct kobject *, kuid_t *, kgid_t *);
+};
+
+struct kobj_uevent_env {
+	char *argv[3];
+	char *envp[64];
+	int envp_idx;
+	char buf[2048];
+	int buflen;
+};
+
+struct kset_uevent_ops {
+	int (* const filter)(struct kobject *);
+	const char * (* const name)(struct kobject *);
+	int (* const uevent)(struct kobject *, struct kobj_uevent_env *);
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct module_param_attrs;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_layout {
+	void *base;
+	unsigned int size;
+	unsigned int text_size;
+	unsigned int ro_size;
+	unsigned int ro_after_init_size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_plt_sec {
+	int plt_shndx;
+	int plt_num_entries;
+	int plt_max_entries;
+};
+
+struct plt_entry;
+
+struct mod_arch_specific {
+	struct mod_plt_sec core;
+	struct mod_plt_sec init;
+	struct plt_entry *ftrace_trampolines;
+};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+typedef const int tracepoint_ptr_t;
+
+struct module_attribute;
+
+struct kernel_param;
+
+struct exception_table_entry;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct bpf_raw_event_map;
+
+struct trace_event_call;
+
+struct trace_eval_map;
+
+struct kunit_suite;
+
+struct error_injection_entry;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool sig_ok;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	struct module_layout core_layout;
+	struct module_layout init_layout;
+	struct mod_arch_specific arch;
+	long unsigned int taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	unsigned int num_ftrace_callsites;
+	long unsigned int *ftrace_callsites;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	long unsigned int *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	int num_kunit_suites;
+	struct kunit_suite **kunit_suites;
+	unsigned int printk_index_size;
+	struct pi_entry **printk_index_start;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct error_injection_entry *ei_funcs;
+	unsigned int num_ei_funcs;
+	long: 32;
+	long: 64;
 };
 
 typedef __u64 Elf64_Addr;
@@ -3886,9 +3098,9 @@
 
 struct inode_operations;
 
-struct file_lock_context;
+struct bdi_writeback;
 
-struct block_device;
+struct file_lock_context;
 
 struct cdev;
 
@@ -3957,7 +3169,6 @@
 	struct list_head i_devices;
 	union {
 		struct pipe_inode_info *i_pipe;
-		struct block_device *i_bdev;
 		struct cdev *i_cdev;
 		char *i_link;
 		unsigned int i_dir_seq;
@@ -4059,15 +3270,6 @@
 	atomic_long_t *nr_deferred;
 };
 
-struct list_lru_node;
-
-struct list_lru {
-	struct list_lru_node *node;
-	struct list_head list;
-	int shrinker_id;
-	bool memcg_aware;
-};
-
 struct super_operations;
 
 struct dquot_operations;
@@ -4080,10 +3282,14 @@
 
 struct fscrypt_operations;
 
+struct fscrypt_keyring;
+
 struct fsverity_operations;
 
 struct unicode_map;
 
+struct block_device;
+
 struct super_block {
 	struct list_head s_list;
 	dev_t s_dev;
@@ -4105,7 +3311,7 @@
 	void *s_security;
 	const struct xattr_handler **s_xattr;
 	const struct fscrypt_operations *s_cop;
-	struct key *s_master_keys;
+	struct fscrypt_keyring *s_master_keys;
 	const struct fsverity_operations *s_vop;
 	struct unicode_map *s_encoding;
 	__u16 s_encoding_flags;
@@ -4131,10 +3337,9 @@
 	struct mutex s_vfs_rename_mutex;
 	const char *s_subtype;
 	const struct dentry_operations *s_d_op;
-	int cleancache_poolid;
 	struct shrinker s_shrink;
 	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
+	atomic_long_t s_fsnotify_connectors;
 	int s_readonly_remount;
 	errseq_t s_wb_err;
 	struct workqueue_struct *s_dio_done_wq;
@@ -4146,7 +3351,12 @@
 	struct work_struct destroy_work;
 	struct mutex s_sync_lock;
 	int s_stack_depth;
-	int: 32;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	spinlock_t s_inode_list_lock;
 	struct list_head s_inodes;
 	spinlock_t s_inode_wblist_lock;
@@ -4155,6 +3365,13 @@
 	long: 64;
 };
 
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct user_namespace *mnt_userns;
+};
+
 struct shrink_control {
 	gfp_t gfp_mask;
 	int nid;
@@ -4168,18 +3385,13 @@
 	long int nr_items;
 };
 
-struct list_lru_memcg {
-	struct callback_head rcu;
-	struct list_lru_one *lru[0];
-};
-
 struct list_lru_node {
 	spinlock_t lock;
 	struct list_lru_one lru;
-	struct list_lru_memcg *memcg_lrus;
 	long int nr_items;
 	long: 64;
 	long: 64;
+	long: 64;
 };
 
 enum migrate_mode {
@@ -4192,99 +3404,8 @@
 struct exception_table_entry {
 	int insn;
 	int fixup;
-};
-
-struct cgroup_base_stat {
-	struct task_cputime cputime;
-};
-
-struct psi_group_cpu;
-
-struct psi_group {
-	struct mutex avgs_lock;
-	struct psi_group_cpu *pcpu;
-	u64 avg_total[5];
-	u64 avg_last_update;
-	u64 avg_next_update;
-	struct delayed_work avgs_work;
-	u64 total[10];
-	long unsigned int avg[15];
-	struct task_struct *poll_task;
-	struct timer_list poll_timer;
-	wait_queue_head_t poll_wait;
-	atomic_t poll_wakeup;
-	struct mutex trigger_lock;
-	struct list_head triggers;
-	u32 nr_triggers[5];
-	u32 poll_states;
-	u64 poll_min_period;
-	u64 polling_total[5];
-	u64 polling_next_update;
-	u64 polling_until;
-};
-
-struct bpf_prog_array;
-
-struct cgroup_bpf {
-	struct bpf_prog_array *effective[38];
-	struct list_head progs[38];
-	u32 flags[38];
-	struct list_head storages;
-	struct bpf_prog_array *inactive;
-	struct percpu_ref refcnt;
-	struct work_struct release_work;
-};
-
-struct cgroup_freezer_state {
-	bool freeze;
-	int e_freeze;
-	int nr_frozen_descendants;
-	int nr_frozen_tasks;
-};
-
-struct cgroup_root;
-
-struct cgroup_rstat_cpu;
-
-struct cgroup {
-	struct cgroup_subsys_state self;
-	long unsigned int flags;
-	int level;
-	int max_depth;
-	int nr_descendants;
-	int nr_dying_descendants;
-	int max_descendants;
-	int nr_populated_csets;
-	int nr_populated_domain_children;
-	int nr_populated_threaded_children;
-	int nr_threaded_children;
-	struct kernfs_node *kn;
-	struct cgroup_file procs_file;
-	struct cgroup_file events_file;
-	u16 subtree_control;
-	u16 subtree_ss_mask;
-	u16 old_subtree_control;
-	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state *subsys[12];
-	struct cgroup_root *root;
-	struct list_head cset_links;
-	struct list_head e_csets[12];
-	struct cgroup *dom_cgrp;
-	struct cgroup *old_dom_cgrp;
-	struct cgroup_rstat_cpu *rstat_cpu;
-	struct list_head rstat_css_list;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup_base_stat bstat;
-	struct prev_cputime prev_cputime;
-	struct list_head pidlists;
-	struct mutex pidlist_mutex;
-	wait_queue_head_t offline_waitq;
-	struct work_struct release_agent_work;
-	struct psi_group psi;
-	struct cgroup_bpf bpf;
-	atomic_t congestion_count;
-	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
+	short int type;
+	short int data;
 };
 
 struct key_tag {
@@ -4335,60 +3456,40 @@
 	struct key_type *keytype;
 };
 
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 *counters;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	long unsigned int unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	atomic_t nr_watches;
+	struct ratelimit_state ratelimit;
+};
+
 struct group_info {
 	atomic_t usage;
 	int ngroups;
 	kgid_t gid[0];
 };
 
-struct taskstats {
-	__u16 version;
-	__u32 ac_exitcode;
-	__u8 ac_flag;
-	__u8 ac_nice;
-	__u64 cpu_count;
-	__u64 cpu_delay_total;
-	__u64 blkio_count;
-	__u64 blkio_delay_total;
-	__u64 swapin_count;
-	__u64 swapin_delay_total;
-	__u64 cpu_run_real_total;
-	__u64 cpu_run_virtual_total;
-	char ac_comm[32];
-	__u8 ac_sched;
-	__u8 ac_pad[3];
-	int: 32;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u64 ac_etime;
-	__u64 ac_utime;
-	__u64 ac_stime;
-	__u64 ac_minflt;
-	__u64 ac_majflt;
-	__u64 coremem;
-	__u64 virtmem;
-	__u64 hiwater_rss;
-	__u64 hiwater_vm;
-	__u64 read_char;
-	__u64 write_char;
-	__u64 read_syscalls;
-	__u64 write_syscalls;
-	__u64 read_bytes;
-	__u64 write_bytes;
-	__u64 cancelled_write_bytes;
-	__u64 nvcsw;
-	__u64 nivcsw;
-	__u64 ac_utimescaled;
-	__u64 ac_stimescaled;
-	__u64 cpu_scaled_run_real_total;
-	__u64 freepages_count;
-	__u64 freepages_delay_total;
-	__u64 thrashing_count;
-	__u64 thrashing_delay_total;
-	__u64 ac_btime64;
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
 };
 
 struct delayed_call {
@@ -4410,27 +3511,57 @@
 	unsigned int flags;
 };
 
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_CGROUP = 1,
+	KMALLOC_RECLAIM = 2,
+	KMALLOC_DMA = 3,
+	NR_KMALLOC_TYPES = 4,
+};
+
 struct wait_page_queue;
 
 struct kiocb {
 	struct file *ki_filp;
 	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb *, long int, long int);
+	void (*ki_complete)(struct kiocb *, long int);
 	void *private;
 	int ki_flags;
-	u16 ki_hint;
 	u16 ki_ioprio;
-	union {
-		unsigned int ki_cookie;
-		struct wait_page_queue *ki_waitq;
-	};
+	struct wait_page_queue *ki_waitq;
 };
 
 struct iattr {
 	unsigned int ia_valid;
 	umode_t ia_mode;
-	kuid_t ia_uid;
-	kgid_t ia_gid;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
 	loff_t ia_size;
 	struct timespec64 ia_atime;
 	struct timespec64 ia_mtime;
@@ -4486,6 +3617,12 @@
 	struct mem_dqblk dq_dqb;
 };
 
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
 struct quota_format_type {
 	int qf_fmt_id;
 	const struct quota_format_ops *qf_ops;
@@ -4493,6 +3630,18 @@
 	struct quota_format_type *qf_next;
 };
 
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
 struct quota_format_ops {
 	int (*check_quota_file)(struct super_block *, int);
 	int (*read_file_info)(struct super_block *, int);
@@ -4580,12 +3729,6 @@
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
 
-struct wait_page_queue {
-	struct page *page;
-	int bit_nr;
-	wait_queue_entry_t wait;
-};
-
 struct writeback_control;
 
 struct readahead_control;
@@ -4594,64 +3737,25 @@
 
 struct address_space_operations {
 	int (*writepage)(struct page *, struct writeback_control *);
-	int (*readpage)(struct file *, struct page *);
+	int (*read_folio)(struct file *, struct folio *);
 	int (*writepages)(struct address_space *, struct writeback_control *);
-	int (*set_page_dirty)(struct page *);
-	int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
 	void (*readahead)(struct readahead_control *);
-	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
 	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
 	sector_t (*bmap)(struct address_space *, sector_t);
-	void (*invalidatepage)(struct page *, unsigned int, unsigned int);
-	int (*releasepage)(struct page *, gfp_t);
-	void (*freepage)(struct page *);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
 	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
-	int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);
-	bool (*isolate_page)(struct page *, isolate_mode_t);
-	void (*putback_page)(struct page *);
-	int (*launder_page)(struct page *);
-	int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page *, bool *, bool *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
 	int (*error_remove_page)(struct address_space *, struct page *);
 	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
 	void (*swap_deactivate)(struct file *);
-};
-
-enum writeback_sync_modes {
-	WB_SYNC_NONE = 0,
-	WB_SYNC_ALL = 1,
-};
-
-struct writeback_control {
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	enum writeback_sync_modes sync_mode;
-	unsigned int for_kupdate: 1;
-	unsigned int for_background: 1;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_reclaim: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_sync: 1;
-	unsigned int no_cgroup_owner: 1;
-	unsigned int punt_to_cgroup: 1;
-	struct bdi_writeback *wb;
-	struct inode *inode;
-	int wb_id;
-	int wb_lcand_id;
-	int wb_tcand_id;
-	size_t wb_bytes;
-	size_t wb_lcand_bytes;
-	size_t wb_tcand_bytes;
-};
-
-struct readahead_control {
-	struct file *file;
-	struct address_space *mapping;
-	long unsigned int _index;
-	unsigned int _nr_pages;
-	unsigned int _batch_count;
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
 };
 
 struct iovec;
@@ -4661,14 +3765,22 @@
 struct bio_vec;
 
 struct iov_iter {
-	unsigned int type;
-	size_t iov_offset;
+	u8 iter_type;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
 	size_t count;
 	union {
 		const struct iovec *iov;
 		const struct kvec *kvec;
 		const struct bio_vec *bvec;
+		struct xarray *xarray;
 		struct pipe_inode_info *pipe;
+		void *ubuf;
 	};
 	union {
 		long unsigned int nr_segs;
@@ -4676,113 +3788,38 @@
 			unsigned int head;
 			unsigned int start_head;
 		};
+		loff_t xarray_start;
 	};
 };
 
-struct swap_cluster_info {
-	spinlock_t lock;
-	unsigned int data: 24;
-	unsigned int flags: 8;
-};
-
-struct swap_cluster_list {
-	struct swap_cluster_info head;
-	struct swap_cluster_info tail;
-};
-
-struct percpu_cluster;
-
-struct swap_info_struct {
-	long unsigned int flags;
-	short int prio;
-	struct plist_node list;
-	signed char type;
-	unsigned int max;
-	unsigned char *swap_map;
-	struct swap_cluster_info *cluster_info;
-	struct swap_cluster_list free_clusters;
-	unsigned int lowest_bit;
-	unsigned int highest_bit;
-	unsigned int pages;
-	unsigned int inuse_pages;
-	unsigned int cluster_next;
-	unsigned int cluster_nr;
-	unsigned int *cluster_next_cpu;
-	struct percpu_cluster *percpu_cluster;
-	struct rb_root swap_extent_root;
-	struct block_device *bdev;
-	struct file *swap_file;
-	unsigned int old_block_size;
-	long unsigned int *frontswap_map;
-	atomic_t frontswap_pages;
-	spinlock_t lock;
-	spinlock_t cont_lock;
-	struct work_struct discard_work;
-	struct swap_cluster_list discard_clusters;
-	struct plist_node avail_lists[0];
-};
-
-struct hd_struct;
-
-struct gendisk;
-
-struct block_device {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode *bd_inode;
-	struct super_block *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device *bd_contains;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	spinlock_t bd_size_lock;
-	struct gendisk *bd_disk;
-	struct backing_dev_info *bd_bdi;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct cdev {
-	struct kobject kobj;
-	struct module *owner;
-	const struct file_operations *ops;
-	struct list_head list;
-	dev_t dev;
-	unsigned int count;
-};
-
 struct fiemap_extent_info;
 
+struct fileattr;
+
 struct inode_operations {
 	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
 	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
-	int (*permission)(struct inode *, int);
-	struct posix_acl * (*get_acl)(struct inode *, int);
+	int (*permission)(struct user_namespace *, struct inode *, int);
+	struct posix_acl * (*get_acl)(struct inode *, int, bool);
 	int (*readlink)(struct dentry *, char *, int);
-	int (*create)(struct inode *, struct dentry *, umode_t, bool);
+	int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool);
 	int (*link)(struct dentry *, struct inode *, struct dentry *);
 	int (*unlink)(struct inode *, struct dentry *);
-	int (*symlink)(struct inode *, struct dentry *, const char *);
-	int (*mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
 	int (*rmdir)(struct inode *, struct dentry *);
-	int (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
-	int (*setattr)(struct dentry *, struct iattr *);
-	int (*getattr)(const struct path *, struct kstat *, u32, unsigned int);
+	int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *);
+	int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
 	ssize_t (*listxattr)(struct dentry *, char *, size_t);
 	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
 	int (*update_time)(struct inode *, struct timespec64 *, int);
 	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode *, struct dentry *, umode_t);
-	int (*set_acl)(struct inode *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
+	int (*tmpfile)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
+	int (*set_acl)(struct user_namespace *, struct inode *, struct posix_acl *, int);
+	int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
 	long: 64;
 };
 
@@ -4812,6 +3849,8 @@
 	struct nfs4_lock_state *owner;
 };
 
+struct fasync_struct;
+
 struct lock_manager_operations;
 
 struct file_lock {
@@ -4846,6 +3885,7 @@
 };
 
 struct lock_manager_operations {
+	void *lm_mod_owner;
 	fl_owner_t (*lm_get_owner)(fl_owner_t);
 	void (*lm_put_owner)(fl_owner_t);
 	void (*lm_notify)(struct file_lock *);
@@ -4854,6 +3894,8 @@
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
 	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
 };
 
 struct fasync_struct {
@@ -4865,6 +3907,14 @@
 	struct callback_head fa_rcu;
 };
 
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
 struct kstatfs;
 
 struct super_operations {
@@ -4891,15 +3941,14 @@
 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
 	struct dquot ** (*get_dquots)(struct inode *);
-	int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);
 	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
 	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
 };
 
-struct iomap;
-
 struct fid;
 
+struct iomap;
+
 struct export_operations {
 	int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);
 	struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
@@ -4910,6 +3959,8 @@
 	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
 	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
 	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	u64 (*fetch_iversion)(struct inode *);
+	long unsigned int flags;
 };
 
 struct xattr_handler {
@@ -4918,7 +3969,7 @@
 	int flags;
 	bool (*list)(struct dentry *);
 	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
-	int (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+	int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
 };
 
 union fscrypt_policy;
@@ -4930,7 +3981,6 @@
 	int (*set_context)(struct inode *, const void *, size_t, void *);
 	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
 	bool (*empty_dir)(struct inode *);
-	unsigned int max_namelen;
 	bool (*has_stable_inodes)(struct super_block *);
 	void (*get_ino_and_lblk_bits)(struct super_block *, int *, int *);
 	int (*get_num_devices)(struct super_block *);
@@ -4952,79 +4002,7 @@
 	loff_t pos;
 };
 
-typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct poll_table_struct {
-	poll_queue_proc _qproc;
-	__poll_t _key;
-};
-
-struct seq_operations;
-
-struct seq_file {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	struct mutex lock;
-	const struct seq_operations *op;
-	int poll_event;
-	const struct file *file;
-	void *private;
-};
-
-struct fc_log;
-
-struct p_log {
-	const char *prefix;
-	struct fc_log *log;
-};
-
-enum fs_context_purpose {
-	FS_CONTEXT_FOR_MOUNT = 0,
-	FS_CONTEXT_FOR_SUBMOUNT = 1,
-	FS_CONTEXT_FOR_RECONFIGURE = 2,
-};
-
-enum fs_context_phase {
-	FS_CONTEXT_CREATE_PARAMS = 0,
-	FS_CONTEXT_CREATING = 1,
-	FS_CONTEXT_AWAITING_MOUNT = 2,
-	FS_CONTEXT_AWAITING_RECONF = 3,
-	FS_CONTEXT_RECONF_PARAMS = 4,
-	FS_CONTEXT_RECONFIGURING = 5,
-	FS_CONTEXT_FAILED = 6,
-};
-
-struct fs_context_operations;
-
-struct fs_context {
-	const struct fs_context_operations *ops;
-	struct mutex uapi_mutex;
-	struct file_system_type *fs_type;
-	void *fs_private;
-	void *sget_key;
-	struct dentry *root;
-	struct user_namespace *user_ns;
-	struct net *net_ns;
-	const struct cred *cred;
-	struct p_log log;
-	const char *source;
-	void *security;
-	void *s_fs_info;
-	unsigned int sb_flags;
-	unsigned int sb_flags_mask;
-	unsigned int s_iflags;
-	unsigned int lsm_flags;
-	enum fs_context_purpose purpose: 8;
-	enum fs_context_phase phase: 8;
-	bool need_free: 1;
-	bool global: 1;
-	bool oldapi: 1;
-};
+struct p_log;
 
 struct fs_parameter;
 
@@ -5040,247 +4018,6 @@
 	const void *data;
 };
 
-struct audit_names;
-
-struct filename {
-	const char *name;
-	const char *uptr;
-	int refcnt;
-	struct audit_names *aname;
-	const char iname[0];
-};
-
-typedef u8 blk_status_t;
-
-struct bvec_iter {
-	sector_t bi_sector;
-	unsigned int bi_size;
-	unsigned int bi_idx;
-	unsigned int bi_bvec_done;
-};
-
-typedef void bio_end_io_t(struct bio *);
-
-struct bio_issue {
-	u64 value;
-};
-
-struct bio_vec {
-	struct page *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct bio_crypt_ctx;
-
-struct bio_integrity_payload;
-
-struct bio {
-	struct bio *bi_next;
-	struct gendisk *bi_disk;
-	unsigned int bi_opf;
-	short unsigned int bi_flags;
-	short unsigned int bi_ioprio;
-	short unsigned int bi_write_hint;
-	blk_status_t bi_status;
-	u8 bi_partno;
-	atomic_t __bi_remaining;
-	struct bvec_iter bi_iter;
-	bio_end_io_t *bi_end_io;
-	void *bi_private;
-	struct blkcg_gq *bi_blkg;
-	struct bio_issue bi_issue;
-	u64 bi_iocost_cost;
-	struct bio_crypt_ctx *bi_crypt_context;
-	union {
-		struct bio_integrity_payload *bi_integrity;
-	};
-	short unsigned int bi_vcnt;
-	short unsigned int bi_max_vecs;
-	atomic_t __bi_cnt;
-	struct bio_vec *bi_io_vec;
-	struct bio_set *bi_pool;
-	struct bio_vec bi_inline_vecs[0];
-};
-
-struct kernfs_root;
-
-struct kernfs_elem_dir {
-	long unsigned int subdirs;
-	struct rb_root children;
-	struct kernfs_root *root;
-};
-
-struct kernfs_syscall_ops;
-
-struct kernfs_root {
-	struct kernfs_node *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
-};
-
-struct kernfs_elem_symlink {
-	struct kernfs_node *target_kn;
-};
-
-struct kernfs_ops;
-
-struct kernfs_open_node;
-
-struct kernfs_elem_attr {
-	const struct kernfs_ops *ops;
-	struct kernfs_open_node *open;
-	loff_t size;
-	struct kernfs_node *notify_next;
-};
-
-struct kernfs_iattrs;
-
-struct kernfs_node {
-	atomic_t count;
-	atomic_t active;
-	struct kernfs_node *parent;
-	const char *name;
-	struct rb_node rb;
-	const void *ns;
-	unsigned int hash;
-	union {
-		struct kernfs_elem_dir dir;
-		struct kernfs_elem_symlink symlink;
-		struct kernfs_elem_attr attr;
-	};
-	void *priv;
-	u64 id;
-	short unsigned int flags;
-	umode_t mode;
-	struct kernfs_iattrs *iattr;
-};
-
-struct kernfs_open_file;
-
-struct kernfs_ops {
-	int (*open)(struct kernfs_open_file *);
-	void (*release)(struct kernfs_open_file *);
-	int (*seq_show)(struct seq_file *, void *);
-	void * (*seq_start)(struct seq_file *, loff_t *);
-	void * (*seq_next)(struct seq_file *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file *, void *);
-	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
-	size_t atomic_write_len;
-	bool prealloc;
-	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
-	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
-};
-
-struct kernfs_syscall_ops {
-	int (*show_options)(struct seq_file *, struct kernfs_root *);
-	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node *);
-	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
-	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
-};
-
-struct kernfs_open_file {
-	struct kernfs_node *kn;
-	struct file *file;
-	struct seq_file *seq_file;
-	void *priv;
-	struct mutex mutex;
-	struct mutex prealloc_mutex;
-	int event;
-	struct list_head list;
-	char *prealloc_buf;
-	size_t atomic_write_len;
-	bool mmapped: 1;
-	bool released: 1;
-	const struct vm_operations_struct *vm_ops;
-};
-
-enum kobj_ns_type {
-	KOBJ_NS_TYPE_NONE = 0,
-	KOBJ_NS_TYPE_NET = 1,
-	KOBJ_NS_TYPES = 2,
-};
-
-struct sock;
-
-struct kobj_ns_type_operations {
-	enum kobj_ns_type type;
-	bool (*current_may_mount)();
-	void * (*grab_current_ns)();
-	const void * (*netlink_ns)(struct sock *);
-	const void * (*initial_ns)();
-	void (*drop_ns)(void *);
-};
-
-struct attribute {
-	const char *name;
-	umode_t mode;
-};
-
-struct bin_attribute;
-
-struct attribute_group {
-	const char *name;
-	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
-	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
-	struct attribute **attrs;
-	struct bin_attribute **bin_attrs;
-};
-
-struct bin_attribute {
-	struct attribute attr;
-	size_t size;
-	void *private;
-	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
-};
-
-struct sysfs_ops {
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
-};
-
-struct kset_uevent_ops;
-
-struct kset {
-	struct list_head list;
-	spinlock_t list_lock;
-	struct kobject kobj;
-	const struct kset_uevent_ops *uevent_ops;
-};
-
-struct kobj_type {
-	void (*release)(struct kobject *);
-	const struct sysfs_ops *sysfs_ops;
-	struct attribute **default_attrs;
-	const struct attribute_group **default_groups;
-	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
-	const void * (*namespace)(struct kobject *);
-	void (*get_ownership)(struct kobject *, kuid_t *, kgid_t *);
-};
-
-struct kobj_uevent_env {
-	char *argv[3];
-	char *envp[64];
-	int envp_idx;
-	char buf[2048];
-	int buflen;
-};
-
-struct kset_uevent_ops {
-	int (* const filter)(struct kset *, struct kobject *);
-	const char * (* const name)(struct kset *, struct kobject *);
-	int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);
-};
-
 struct kernel_param_ops {
 	unsigned int flags;
 	int (*set)(const char *, const struct kernel_param *);
@@ -5330,8 +4067,6 @@
 	int prio;
 };
 
-struct static_call_key;
-
 struct tracepoint {
 	const char *name;
 	struct static_key key;
@@ -5343,10 +4078,6 @@
 	struct tracepoint_func *funcs;
 };
 
-struct static_call_key {
-	void *func;
-};
-
 struct bpf_raw_event_map {
 	struct tracepoint *tp;
 	void *bpf_func;
@@ -5370,91 +4101,1302 @@
 	void (*free)(struct module *);
 };
 
-struct trace_event_functions;
+enum cpuhp_state {
+	CPUHP_INVALID = 4294967295,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_SLUB_DEAD = 11,
+	CPUHP_DEBUG_OBJ_DEAD = 12,
+	CPUHP_MM_WRITEBACK_DEAD = 13,
+	CPUHP_MM_DEMOTION_DEAD = 14,
+	CPUHP_MM_VMSTAT_DEAD = 15,
+	CPUHP_SOFTIRQ_DEAD = 16,
+	CPUHP_NET_MVNETA_DEAD = 17,
+	CPUHP_CPUIDLE_DEAD = 18,
+	CPUHP_ARM64_FPSIMD_DEAD = 19,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 20,
+	CPUHP_IRQ_POLL_DEAD = 21,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 22,
+	CPUHP_BIO_DEAD = 23,
+	CPUHP_ACPI_CPUDRV_DEAD = 24,
+	CPUHP_S390_PFAULT_DEAD = 25,
+	CPUHP_BLK_MQ_DEAD = 26,
+	CPUHP_FS_BUFF_DEAD = 27,
+	CPUHP_PRINTK_DEAD = 28,
+	CPUHP_MM_MEMCQ_DEAD = 29,
+	CPUHP_XFS_DEAD = 30,
+	CPUHP_PERCPU_CNT_DEAD = 31,
+	CPUHP_RADIX_DEAD = 32,
+	CPUHP_PAGE_ALLOC = 33,
+	CPUHP_NET_DEV_DEAD = 34,
+	CPUHP_PCI_XGENE_DEAD = 35,
+	CPUHP_IOMMU_IOVA_DEAD = 36,
+	CPUHP_LUSTRE_CFS_DEAD = 37,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38,
+	CPUHP_PADATA_DEAD = 39,
+	CPUHP_AP_DTPM_CPU_DEAD = 40,
+	CPUHP_RANDOM_PREPARE = 41,
+	CPUHP_WORKQUEUE_PREP = 42,
+	CPUHP_POWER_NUMA_PREPARE = 43,
+	CPUHP_HRTIMERS_PREPARE = 44,
+	CPUHP_PROFILE_PREPARE = 45,
+	CPUHP_X2APIC_PREPARE = 46,
+	CPUHP_SMPCFD_PREPARE = 47,
+	CPUHP_RELAY_PREPARE = 48,
+	CPUHP_SLAB_PREPARE = 49,
+	CPUHP_MD_RAID5_PREPARE = 50,
+	CPUHP_RCUTREE_PREP = 51,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 52,
+	CPUHP_POWERPC_PMAC_PREPARE = 53,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 54,
+	CPUHP_XEN_PREPARE = 55,
+	CPUHP_XEN_EVTCHN_PREPARE = 56,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 57,
+	CPUHP_SH_SH3X_PREPARE = 58,
+	CPUHP_NET_FLOW_PREPARE = 59,
+	CPUHP_TOPOLOGY_PREPARE = 60,
+	CPUHP_NET_IUCV_PREPARE = 61,
+	CPUHP_ARM_BL_PREPARE = 62,
+	CPUHP_TRACE_RB_PREPARE = 63,
+	CPUHP_MM_ZS_PREPARE = 64,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 65,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 66,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 67,
+	CPUHP_ZCOMP_PREPARE = 68,
+	CPUHP_TIMERS_PREPARE = 69,
+	CPUHP_MIPS_SOC_PREPARE = 70,
+	CPUHP_BP_PREPARE_DYN = 71,
+	CPUHP_BP_PREPARE_DYN_END = 91,
+	CPUHP_BRINGUP_CPU = 92,
+	CPUHP_AP_IDLE_DEAD = 93,
+	CPUHP_AP_OFFLINE = 94,
+	CPUHP_AP_SCHED_STARTING = 95,
+	CPUHP_AP_RCUTREE_DYING = 96,
+	CPUHP_AP_CPU_PM_STARTING = 97,
+	CPUHP_AP_IRQ_GIC_STARTING = 98,
+	CPUHP_AP_IRQ_HIP04_STARTING = 99,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 100,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 101,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 102,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 103,
+	CPUHP_AP_IRQ_RISCV_STARTING = 104,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 105,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 106,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 107,
+	CPUHP_AP_MICROCODE_LOADER = 108,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 109,
+	CPUHP_AP_PERF_X86_STARTING = 110,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 111,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 112,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 113,
+	CPUHP_AP_PERF_XTENSA_STARTING = 114,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 115,
+	CPUHP_AP_ARM_SDEI_STARTING = 116,
+	CPUHP_AP_ARM_VFP_STARTING = 117,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 118,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 119,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 120,
+	CPUHP_AP_PERF_ARM_STARTING = 121,
+	CPUHP_AP_PERF_RISCV_STARTING = 122,
+	CPUHP_AP_ARM_L2X0_STARTING = 123,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 124,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 125,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 126,
+	CPUHP_AP_JCORE_TIMER_STARTING = 127,
+	CPUHP_AP_ARM_TWD_STARTING = 128,
+	CPUHP_AP_QCOM_TIMER_STARTING = 129,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 130,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 131,
+	CPUHP_AP_MARCO_TIMER_STARTING = 132,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 133,
+	CPUHP_AP_ARC_TIMER_STARTING = 134,
+	CPUHP_AP_RISCV_TIMER_STARTING = 135,
+	CPUHP_AP_CLINT_TIMER_STARTING = 136,
+	CPUHP_AP_CSKY_TIMER_STARTING = 137,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 138,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 139,
+	CPUHP_AP_KVM_STARTING = 140,
+	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 141,
+	CPUHP_AP_KVM_ARM_VGIC_STARTING = 142,
+	CPUHP_AP_KVM_ARM_TIMER_STARTING = 143,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 144,
+	CPUHP_AP_ARM_XEN_STARTING = 145,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 146,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 147,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 148,
+	CPUHP_AP_SMPCFD_DYING = 149,
+	CPUHP_AP_X86_TBOOT_DYING = 150,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 151,
+	CPUHP_AP_ONLINE = 152,
+	CPUHP_TEARDOWN_CPU = 153,
+	CPUHP_AP_ONLINE_IDLE = 154,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 155,
+	CPUHP_AP_SMPBOOT_THREADS = 156,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 157,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 158,
+	CPUHP_AP_BLK_MQ_ONLINE = 159,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 160,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 161,
+	CPUHP_AP_PERF_ONLINE = 162,
+	CPUHP_AP_PERF_X86_ONLINE = 163,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 164,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 165,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 166,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 167,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 168,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 169,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 170,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 171,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 172,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 173,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 188,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 189,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 194,
+	CPUHP_AP_PERF_CSKY_ONLINE = 195,
+	CPUHP_AP_WATCHDOG_ONLINE = 196,
+	CPUHP_AP_WORKQUEUE_ONLINE = 197,
+	CPUHP_AP_RANDOM_ONLINE = 198,
+	CPUHP_AP_RCUTREE_ONLINE = 199,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 200,
+	CPUHP_AP_ONLINE_DYN = 201,
+	CPUHP_AP_ONLINE_DYN_END = 231,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 232,
+	CPUHP_AP_X86_HPET_ONLINE = 233,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 234,
+	CPUHP_AP_ACTIVE = 235,
+	CPUHP_ONLINE = 236,
+};
 
-struct trace_event {
-	struct hlist_node node;
-	struct list_head list;
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, long unsigned int, long unsigned int, int);
+};
+
+enum compound_dtor_id {
+	NULL_COMPOUND_DTOR = 0,
+	COMPOUND_PAGE_DTOR = 1,
+	HUGETLB_PAGE_DTOR = 2,
+	TRANSHUGE_PAGE_DTOR = 3,
+	NR_COMPOUND_DTORS = 4,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA = 4,
+	PGALLOC_DMA32 = 5,
+	PGALLOC_NORMAL = 6,
+	PGALLOC_MOVABLE = 7,
+	PGALLOC_DEVICE = 8,
+	ALLOCSTALL_DMA = 9,
+	ALLOCSTALL_DMA32 = 10,
+	ALLOCSTALL_NORMAL = 11,
+	ALLOCSTALL_MOVABLE = 12,
+	ALLOCSTALL_DEVICE = 13,
+	PGSCAN_SKIP_DMA = 14,
+	PGSCAN_SKIP_DMA32 = 15,
+	PGSCAN_SKIP_NORMAL = 16,
+	PGSCAN_SKIP_MOVABLE = 17,
+	PGSCAN_SKIP_DEVICE = 18,
+	PGFREE = 19,
+	PGACTIVATE = 20,
+	PGDEACTIVATE = 21,
+	PGLAZYFREE = 22,
+	PGFAULT = 23,
+	PGMAJFAULT = 24,
+	PGLAZYFREED = 25,
+	PGREFILL = 26,
+	PGREUSE = 27,
+	PGSTEAL_KSWAPD = 28,
+	PGSTEAL_DIRECT = 29,
+	PGDEMOTE_KSWAPD = 30,
+	PGDEMOTE_DIRECT = 31,
+	PGSCAN_KSWAPD = 32,
+	PGSCAN_DIRECT = 33,
+	PGSCAN_DIRECT_THROTTLE = 34,
+	PGSCAN_ANON = 35,
+	PGSCAN_FILE = 36,
+	PGSTEAL_ANON = 37,
+	PGSTEAL_FILE = 38,
+	PGSCAN_ZONE_RECLAIM_FAILED = 39,
+	PGINODESTEAL = 40,
+	SLABS_SCANNED = 41,
+	KSWAPD_INODESTEAL = 42,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 43,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 44,
+	PAGEOUTRUN = 45,
+	PGROTATED = 46,
+	DROP_PAGECACHE = 47,
+	DROP_SLAB = 48,
+	OOM_KILL = 49,
+	NUMA_PTE_UPDATES = 50,
+	NUMA_HUGE_PTE_UPDATES = 51,
+	NUMA_HINT_FAULTS = 52,
+	NUMA_HINT_FAULTS_LOCAL = 53,
+	NUMA_PAGE_MIGRATE = 54,
+	PGMIGRATE_SUCCESS = 55,
+	PGMIGRATE_FAIL = 56,
+	THP_MIGRATION_SUCCESS = 57,
+	THP_MIGRATION_FAIL = 58,
+	THP_MIGRATION_SPLIT = 59,
+	COMPACTMIGRATE_SCANNED = 60,
+	COMPACTFREE_SCANNED = 61,
+	COMPACTISOLATED = 62,
+	COMPACTSTALL = 63,
+	COMPACTFAIL = 64,
+	COMPACTSUCCESS = 65,
+	KCOMPACTD_WAKE = 66,
+	KCOMPACTD_MIGRATE_SCANNED = 67,
+	KCOMPACTD_FREE_SCANNED = 68,
+	HTLB_BUDDY_PGALLOC = 69,
+	HTLB_BUDDY_PGALLOC_FAIL = 70,
+	CMA_ALLOC_SUCCESS = 71,
+	CMA_ALLOC_FAIL = 72,
+	UNEVICTABLE_PGCULLED = 73,
+	UNEVICTABLE_PGSCANNED = 74,
+	UNEVICTABLE_PGRESCUED = 75,
+	UNEVICTABLE_PGMLOCKED = 76,
+	UNEVICTABLE_PGMUNLOCKED = 77,
+	UNEVICTABLE_PGCLEARED = 78,
+	UNEVICTABLE_PGSTRANDED = 79,
+	THP_FAULT_ALLOC = 80,
+	THP_FAULT_FALLBACK = 81,
+	THP_FAULT_FALLBACK_CHARGE = 82,
+	THP_COLLAPSE_ALLOC = 83,
+	THP_COLLAPSE_ALLOC_FAILED = 84,
+	THP_FILE_ALLOC = 85,
+	THP_FILE_FALLBACK = 86,
+	THP_FILE_FALLBACK_CHARGE = 87,
+	THP_FILE_MAPPED = 88,
+	THP_SPLIT_PAGE = 89,
+	THP_SPLIT_PAGE_FAILED = 90,
+	THP_DEFERRED_SPLIT_PAGE = 91,
+	THP_SPLIT_PMD = 92,
+	THP_SCAN_EXCEED_NONE_PTE = 93,
+	THP_SCAN_EXCEED_SWAP_PTE = 94,
+	THP_SCAN_EXCEED_SHARED_PTE = 95,
+	THP_ZERO_PAGE_ALLOC = 96,
+	THP_ZERO_PAGE_ALLOC_FAILED = 97,
+	THP_SWPOUT = 98,
+	THP_SWPOUT_FALLBACK = 99,
+	BALLOON_INFLATE = 100,
+	BALLOON_DEFLATE = 101,
+	BALLOON_MIGRATE = 102,
+	SWAP_RA = 103,
+	SWAP_RA_HIT = 104,
+	KSM_SWPIN_COPY = 105,
+	COW_KSM = 106,
+	ZSWPIN = 107,
+	ZSWPOUT = 108,
+	NR_VM_EVENT_ITEMS = 109,
+};
+
+struct nsset;
+
+struct proc_ns_operations {
+	const char *name;
+	const char *real_ns_name;
 	int type;
-	struct trace_event_functions *funcs;
+	struct ns_common * (*get)(struct task_struct *);
+	void (*put)(struct ns_common *);
+	int (*install)(struct nsset *, struct ns_common *);
+	struct user_namespace * (*owner)(struct ns_common *);
+	struct ns_common * (*get_parent)(struct ns_common *);
 };
 
-struct trace_event_class;
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
 
-struct trace_event_call {
-	struct list_head list;
-	struct trace_event_class *class;
+struct iovec {
+	void *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+enum {
+	TSK_TRACE_FL_TRACE_BIT = 0,
+	TSK_TRACE_FL_GRAPH_BIT = 1,
+};
+
+struct nmi_ctx {
+	u64 hcr;
+	unsigned int cnt;
+};
+
+struct midr_range {
+	u32 model;
+	u32 rv_min;
+	u32 rv_max;
+};
+
+struct arm64_midr_revidr {
+	u32 midr_rv;
+	u32 revidr_mask;
+};
+
+struct arm64_cpu_capabilities {
+	const char *desc;
+	u16 capability;
+	u16 type;
+	bool (*matches)(const struct arm64_cpu_capabilities *, int);
+	void (*cpu_enable)(const struct arm64_cpu_capabilities *);
 	union {
-		char *name;
-		struct tracepoint *tp;
+		struct {
+			struct midr_range midr_range;
+			const struct arm64_midr_revidr * const fixed_revs;
+		};
+		const struct midr_range *midr_range_list;
+		struct {
+			u32 sys_reg;
+			u8 field_pos;
+			u8 field_width;
+			u8 min_field_value;
+			u8 hwcap_type;
+			bool sign;
+			long unsigned int hwcap;
+		};
 	};
-	struct trace_event event;
-	char *print_fmt;
-	struct event_filter *filter;
-	void *mod;
+	const struct arm64_cpu_capabilities *match_list;
+};
+
+struct vl_info {
+	enum vec_type type;
+	const char *name;
+	int min_vl;
+	int max_vl;
+	int max_virtualisable_vl;
+	long unsigned int vq_map[8];
+	long unsigned int vq_partial_map[8];
+};
+
+struct notifier_block;
+
+typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block *next;
+	int priority;
+};
+
+struct ctl_table;
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
 	void *data;
-	int flags;
-	int perf_refcount;
-	struct hlist_head *perf_events;
-	struct bpf_prog_array *prog_array;
-	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+	int maxlen;
+	umode_t mode;
+	struct ctl_table *child;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
 };
 
-struct trace_eval_map {
-	const char *system;
-	const char *eval_string;
-	long unsigned int eval_value;
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
 };
 
-struct linux_binprm {
-	struct vm_area_struct *vma;
-	long unsigned int vma_pages;
-	struct mm_struct *mm;
-	long unsigned int p;
-	long unsigned int argmin;
-	unsigned int have_execfd: 1;
-	unsigned int execfd_creds: 1;
-	unsigned int secureexec: 1;
-	unsigned int point_of_no_return: 1;
-	struct file *executable;
-	struct file *interpreter;
-	struct file *file;
-	struct cred *cred;
-	int unsafe;
-	unsigned int per_clear;
-	int argc;
-	int envc;
-	const char *filename;
-	const char *interp;
-	const char *fdpath;
-	unsigned int interp_flags;
-	int execfd;
-	long unsigned int loader;
-	long unsigned int exec;
-	struct rlimit rlim_stack;
-	char buf[256];
+struct ctl_table_header;
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
 };
 
-struct coredump_params {
-	const kernel_siginfo_t *siginfo;
-	struct pt_regs *regs;
-	struct file *file;
-	long unsigned int limit;
-	long unsigned int mm_flags;
-	loff_t written;
-	loff_t pos;
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
 };
 
-struct em_perf_state {
-	long unsigned int frequency;
-	long unsigned int power;
-	long unsigned int cost;
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
 };
 
-struct em_perf_domain {
-	struct em_perf_state *table;
-	int nr_perf_states;
-	long unsigned int cpus[0];
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
+enum cpu_pm_event {
+	CPU_PM_ENTER = 0,
+	CPU_PM_ENTER_FAILED = 1,
+	CPU_PM_EXIT = 2,
+	CPU_CLUSTER_PM_ENTER = 3,
+	CPU_CLUSTER_PM_ENTER_FAILED = 4,
+	CPU_CLUSTER_PM_EXIT = 5,
+};
+
+struct fpsimd_last_state_struct {
+	struct user_fpsimd_state *st;
+	void *sve_state;
+	void *za_state;
+	u64 *svcr;
+	unsigned int sve_vl;
+	unsigned int sme_vl;
+};
+
+struct vl_config {
+	int __default_vl;
+};
+
+struct static_key_true {
+	struct static_key key;
+};
+
+enum arm64_hyp_spectre_vector {
+	HYP_VECTOR_DIRECT = 0,
+	HYP_VECTOR_SPECTRE_DIRECT = 1,
+	HYP_VECTOR_INDIRECT = 2,
+	HYP_VECTOR_SPECTRE_INDIRECT = 3,
+};
+
+typedef void (*bp_hardening_cb_t)();
+
+struct bp_hardening_data {
+	enum arm64_hyp_spectre_vector slot;
+	bp_hardening_cb_t fn;
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = 4294967295,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+struct context_tracking {
+	bool active;
+	int recursion;
+	atomic_t state;
+	long int dynticks_nesting;
+	long int dynticks_nmi_nesting;
+};
+
+enum stack_type {
+	STACK_TYPE_UNKNOWN = 0,
+	STACK_TYPE_TASK = 1,
+	STACK_TYPE_IRQ = 2,
+	STACK_TYPE_OVERFLOW = 3,
+	STACK_TYPE_SDEI_NORMAL = 4,
+	STACK_TYPE_SDEI_CRITICAL = 5,
+	STACK_TYPE_HYP = 6,
+	__NR_STACK_TYPES = 7,
+};
+
+struct stack_info {
+	long unsigned int low;
+	long unsigned int high;
+	enum stack_type type;
+};
+
+struct sdei_registered_event;
+
+typedef short int __s16;
+
+typedef __s16 s16;
+
+typedef struct cpumask cpumask_var_t[1];
+
+struct pollfd {
+	int fd;
+	short int events;
+	short int revents;
+};
+
+struct arch_hw_breakpoint_ctrl {
+	u32 __reserved: 19;
+	u32 len: 8;
+	u32 type: 2;
+	u32 privilege: 2;
+	u32 enabled: 1;
+};
+
+struct arch_hw_breakpoint {
+	u64 address;
+	u64 trigger;
+	struct arch_hw_breakpoint_ctrl ctrl;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = 4294967292,
+	PERF_EVENT_STATE_EXIT = 4294967293,
+	PERF_EVENT_STATE_ERROR = 4294967294,
+	PERF_EVENT_STATE_OFF = 4294967295,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			long unsigned int config_base;
+			long unsigned int event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			struct arch_hw_breakpoint info;
+			struct list_head bp_list;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	long unsigned int addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct ftrace_ops;
+
+struct ftrace_regs;
+
+typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);
+
+struct ftrace_hash;
+
+struct ftrace_ops_hash {
+	struct ftrace_hash *notrace_hash;
+	struct ftrace_hash *filter_hash;
+	struct mutex regex_lock;
+};
+
+enum ftrace_ops_cmd {
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_SELF = 0,
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER = 1,
+	FTRACE_OPS_CMD_DISABLE_SHARE_IPMODIFY_PEER = 2,
+};
+
+typedef int (*ftrace_ops_func_t)(struct ftrace_ops *, enum ftrace_ops_cmd);
+
+struct ftrace_ops {
+	ftrace_func_t func;
+	struct ftrace_ops *next;
+	long unsigned int flags;
+	void *private;
+	ftrace_func_t saved_func;
+	struct ftrace_ops_hash local_hash;
+	struct ftrace_ops_hash *func_hash;
+	struct ftrace_ops_hash old_hash;
+	long unsigned int trampoline;
+	long unsigned int trampoline_size;
+	struct list_head list;
+	ftrace_ops_func_t ops_func;
+};
+
+struct pmu;
+
+struct perf_buffer;
+
+struct perf_addr_filter_range;
+
+struct bpf_prog;
+
+struct event_filter;
+
+struct perf_cgroup;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	long unsigned int rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	unsigned int pending_wakeup;
+	unsigned int pending_kill;
+	unsigned int pending_disable;
+	unsigned int pending_sigtrap;
+	long unsigned int pending_addr;
+	struct irq_work pending_irq;
+	struct callback_head pending_task;
+	unsigned int pending_work;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	long unsigned int addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	struct ftrace_ops ftrace_ops;
+	struct perf_cgroup *cgrp;
+	void *security;
+	struct list_head sb_list;
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	long unsigned int flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct key *persistent_keyring_register;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long int ucount_max[16];
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	long long unsigned int sum_exec_runtime;
+};
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[16];
+};
+
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[12];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[12];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+struct perf_event_context {
+	struct pmu *pmu;
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head active_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	int nr_events;
+	int nr_active;
+	int nr_user;
+	int is_active;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	int rotate_necessary;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	int nr_cgroups;
+	void *task_ctx_data;
+	struct callback_head callback_head;
+	local_t nr_pending;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block *head;
+};
+
+struct kernel_clone_args {
+	u64 flags;
+	int *pidfd;
+	int *child_tid;
+	int *parent_tid;
+	int exit_signal;
+	long unsigned int stack;
+	long unsigned int stack_size;
+	long unsigned int tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int io_thread;
+	int kthread;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	long unsigned int notified_at;
+	struct timer_list notify_timer;
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+	u64 forceidle_sum;
+};
+
+struct bpf_prog_array;
+
+struct cgroup_bpf {
+	struct bpf_prog_array *effective[33];
+	struct hlist_head progs[33];
+	u8 flags[33];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct psi_group;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	long unsigned int flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state *subsys[12];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[12];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group *psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	u64 ancestor_ids[0];
+};
+
+struct taskstats {
+	__u16 version;
+	__u32 ac_exitcode;
+	__u8 ac_flag;
+	__u8 ac_nice;
+	__u64 cpu_count;
+	__u64 cpu_delay_total;
+	__u64 blkio_count;
+	__u64 blkio_delay_total;
+	__u64 swapin_count;
+	__u64 swapin_delay_total;
+	__u64 cpu_run_real_total;
+	__u64 cpu_run_virtual_total;
+	char ac_comm[32];
+	__u8 ac_sched;
+	__u8 ac_pad[3];
+	int: 32;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u64 ac_etime;
+	__u64 ac_utime;
+	__u64 ac_stime;
+	__u64 ac_minflt;
+	__u64 ac_majflt;
+	__u64 coremem;
+	__u64 virtmem;
+	__u64 hiwater_rss;
+	__u64 hiwater_vm;
+	__u64 read_char;
+	__u64 write_char;
+	__u64 read_syscalls;
+	__u64 write_syscalls;
+	__u64 read_bytes;
+	__u64 write_bytes;
+	__u64 cancelled_write_bytes;
+	__u64 nvcsw;
+	__u64 nivcsw;
+	__u64 ac_utimescaled;
+	__u64 ac_stimescaled;
+	__u64 cpu_scaled_run_real_total;
+	__u64 freepages_count;
+	__u64 freepages_delay_total;
+	__u64 thrashing_count;
+	__u64 thrashing_delay_total;
+	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct fwnode_operations;
+
+struct device;
+
+struct fwnode_handle {
+	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
+	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
+struct fwnode_reference_args;
+
+struct fwnode_endpoint;
+
+struct fwnode_operations {
+	struct fwnode_handle * (*get)(struct fwnode_handle *);
+	void (*put)(struct fwnode_handle *);
+	bool (*device_is_available)(const struct fwnode_handle *);
+	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
+	bool (*property_present)(const struct fwnode_handle *, const char *);
+	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
+	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
+	const char * (*get_name)(const struct fwnode_handle *);
+	const char * (*get_name_prefix)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
+	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
+	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
+	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
 };
 
 enum dl_dev_state {
@@ -5467,9 +5409,7 @@
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
-	struct list_head needs_suppliers;
-	struct list_head defer_hook;
-	bool need_for_probe;
+	struct list_head defer_sync;
 	enum dl_dev_state status;
 };
 
@@ -5487,6 +5427,14 @@
 	RPM_REQ_RESUME = 4,
 };
 
+enum rpm_status {
+	RPM_INVALID = 4294967295,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
 struct wakeup_source;
 
 struct wake_irq;
@@ -5528,6 +5476,7 @@
 	unsigned int idle_notification: 1;
 	unsigned int request_pending: 1;
 	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
 	unsigned int runtime_auto: 1;
 	bool ignore_children: 1;
 	unsigned int no_callbacks: 1;
@@ -5538,6 +5487,7 @@
 	unsigned int links_count;
 	enum rpm_request request;
 	enum rpm_status runtime_status;
+	enum rpm_status last_status;
 	int runtime_error;
 	int autosuspend_delay;
 	u64 last_busy;
@@ -5549,8 +5499,24 @@
 	struct dev_pm_qos *qos;
 };
 
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
 struct dev_archdata {};
 
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
 struct device_private;
 
 struct device_type;
@@ -5561,7 +5527,7 @@
 
 struct dev_pm_domain;
 
-struct irq_domain;
+struct em_perf_domain;
 
 struct dev_pin_info;
 
@@ -5575,9 +5541,9 @@
 
 struct cma;
 
-struct device_node;
+struct io_tlb_mem;
 
-struct fwnode_handle;
+struct device_node;
 
 struct class;
 
@@ -5585,6 +5551,8 @@
 
 struct dev_iommu;
 
+struct device_physical_location;
+
 struct device {
 	struct kobject kobj;
 	struct device *parent;
@@ -5600,9 +5568,8 @@
 	struct dev_pm_info power;
 	struct dev_pm_domain *pm_domain;
 	struct em_perf_domain *em_pd;
-	struct irq_domain *msi_domain;
 	struct dev_pin_info *pins;
-	struct list_head msi_list;
+	struct dev_msi_info msi;
 	const struct dma_map_ops *dma_ops;
 	u64 *dma_mask;
 	u64 coherent_dma_mask;
@@ -5612,6 +5579,7 @@
 	struct list_head dma_pools;
 	struct dma_coherent_mem *dma_mem;
 	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
 	struct dev_archdata archdata;
 	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
@@ -5625,13 +5593,61 @@
 	void (*release)(struct device *);
 	struct iommu_group *iommu_group;
 	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
 	bool offline_disabled: 1;
 	bool offline: 1;
 	bool of_node_reused: 1;
 	bool state_synced: 1;
+	bool can_match: 1;
 	bool dma_coherent: 1;
 };
 
+struct fwnode_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct fwnode_handle *local_fwnode;
+};
+
+struct fwnode_reference_args {
+	struct fwnode_handle *fwnode;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+typedef u32 phandle;
+
+struct property;
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	long unsigned int _flags;
+	void *data;
+};
+
+struct em_perf_state {
+	long unsigned int frequency;
+	long unsigned int power;
+	long unsigned int cost;
+	long unsigned int flags;
+};
+
+struct em_perf_domain {
+	struct em_perf_state *table;
+	int nr_perf_states;
+	long unsigned int flags;
+	long unsigned int cpus[0];
+};
+
 struct dev_pm_ops {
 	int (*prepare)(struct device *);
 	void (*complete)(struct device *);
@@ -5663,6 +5679,8 @@
 struct pm_subsys_data {
 	spinlock_t lock;
 	unsigned int refcount;
+	unsigned int clock_op_might_sleep;
+	struct mutex clock_mutex;
 	struct list_head clock_list;
 	struct pm_domain_data *domain_data;
 };
@@ -5690,6 +5708,45 @@
 	bool autosleep_enabled: 1;
 };
 
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
 struct dev_pm_domain {
 	struct dev_pm_ops ops;
 	int (*start)(struct device *);
@@ -5714,7 +5771,7 @@
 	int (*uevent)(struct device *, struct kobj_uevent_env *);
 	int (*probe)(struct device *);
 	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
+	void (*remove)(struct device *);
 	void (*shutdown)(struct device *);
 	int (*online)(struct device *);
 	int (*offline)(struct device *);
@@ -5722,6 +5779,7 @@
 	int (*resume)(struct device *);
 	int (*num_vf)(struct device *);
 	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
 	const struct dev_pm_ops *pm;
 	const struct iommu_ops *iommu_ops;
 	struct subsys_private *p;
@@ -5767,33 +5825,18 @@
 	IOMMU_CAP_CACHE_COHERENCY = 0,
 	IOMMU_CAP_INTR_REMAP = 1,
 	IOMMU_CAP_NOEXEC = 2,
-};
-
-enum iommu_attr {
-	DOMAIN_ATTR_GEOMETRY = 0,
-	DOMAIN_ATTR_PAGING = 1,
-	DOMAIN_ATTR_WINDOWS = 2,
-	DOMAIN_ATTR_FSL_PAMU_STASH = 3,
-	DOMAIN_ATTR_FSL_PAMU_ENABLE = 4,
-	DOMAIN_ATTR_FSL_PAMUV1 = 5,
-	DOMAIN_ATTR_NESTING = 6,
-	DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,
-	DOMAIN_ATTR_MAX = 8,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 3,
 };
 
 enum iommu_dev_features {
-	IOMMU_DEV_FEAT_AUX = 0,
-	IOMMU_DEV_FEAT_SVA = 1,
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
 };
 
 struct iommu_domain;
 
-struct iommu_iotlb_gather;
-
 struct iommu_device;
 
-struct iommu_resv_region;
-
 struct of_phandle_args;
 
 struct iommu_sva;
@@ -5802,50 +5845,26 @@
 
 struct iommu_page_response;
 
-struct iommu_cache_invalidate_info;
-
-struct iommu_gpasid_bind_data;
+struct iommu_domain_ops;
 
 struct iommu_ops {
 	bool (*capable)(enum iommu_cap);
 	struct iommu_domain * (*domain_alloc)(unsigned int);
-	void (*domain_free)(struct iommu_domain *);
-	int (*attach_dev)(struct iommu_domain *, struct device *);
-	void (*detach_dev)(struct iommu_domain *, struct device *);
-	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	void (*flush_iotlb_all)(struct iommu_domain *);
-	void (*iotlb_sync_map)(struct iommu_domain *);
-	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
 	struct iommu_device * (*probe_device)(struct device *);
 	void (*release_device)(struct device *);
 	void (*probe_finalize)(struct device *);
 	struct iommu_group * (*device_group)(struct device *);
-	int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
 	void (*get_resv_regions)(struct device *, struct list_head *);
-	void (*put_resv_regions)(struct device *, struct list_head *);
-	void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
-	int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
-	void (*domain_window_disable)(struct iommu_domain *, u32);
 	int (*of_xlate)(struct device *, struct of_phandle_args *);
-	bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
-	bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
-	bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
+	bool (*is_attach_deferred)(struct device *);
 	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
 	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
-	int (*aux_attach_dev)(struct iommu_domain *, struct device *);
-	void (*aux_detach_dev)(struct iommu_domain *, struct device *);
-	int (*aux_get_pasid)(struct iommu_domain *, struct device *);
 	struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
 	void (*sva_unbind)(struct iommu_sva *);
 	u32 (*sva_get_pasid)(struct iommu_sva *);
 	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
-	int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
-	int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
-	int (*sva_unbind_gpasid)(struct device *, u32);
 	int (*def_domain_type)(struct device *);
+	const struct iommu_domain_ops *default_domain_ops;
 	long unsigned int pgsize_bitmap;
 	struct module *owner;
 };
@@ -5877,6 +5896,74 @@
 	struct subsys_private *p;
 };
 
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+typedef __u32 Elf32_Word;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+struct arch_elf_state {
+	int flags;
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	struct list_head list;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct trace_event_class;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head *perf_events;
+	struct bpf_prog_array *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	long unsigned int eval_value;
+};
+
 struct of_device_id {
 	char name[32];
 	char type[32];
@@ -5887,7 +5974,7 @@
 typedef long unsigned int kernel_ulong_t;
 
 struct acpi_device_id {
-	__u8 id[9];
+	__u8 id[16];
 	kernel_ulong_t driver_data;
 	__u32 cls;
 	__u32 cls_msk;
@@ -5895,46 +5982,42 @@
 
 struct device_dma_parameters {
 	unsigned int max_segment_size;
+	unsigned int min_align_mask;
 	long unsigned int segment_boundary_mask;
 };
 
-enum irq_domain_bus_token {
-	DOMAIN_BUS_ANY = 0,
-	DOMAIN_BUS_WIRED = 1,
-	DOMAIN_BUS_GENERIC_MSI = 2,
-	DOMAIN_BUS_PCI_MSI = 3,
-	DOMAIN_BUS_PLATFORM_MSI = 4,
-	DOMAIN_BUS_NEXUS = 5,
-	DOMAIN_BUS_IPI = 6,
-	DOMAIN_BUS_FSL_MC_MSI = 7,
-	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
-	DOMAIN_BUS_WAKEUP = 9,
-	DOMAIN_BUS_VMD_MSI = 10,
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
 };
 
-struct irq_domain_ops;
-
-struct irq_domain_chip_generic;
-
-struct irq_domain {
-	struct list_head link;
-	const char *name;
-	const struct irq_domain_ops *ops;
-	void *host_data;
-	unsigned int flags;
-	unsigned int mapcount;
-	struct fwnode_handle *fwnode;
-	enum irq_domain_bus_token bus_token;
-	struct irq_domain_chip_generic *gc;
-	struct irq_domain *parent;
-	irq_hw_number_t hwirq_max;
-	unsigned int revmap_direct_max_irq;
-	unsigned int revmap_size;
-	struct xarray revmap_tree;
-	struct mutex revmap_tree_mutex;
-	unsigned int linear_revmap[0];
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
 };
 
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
+};
+
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
+};
+
+typedef u64 dma_addr_t;
+
 enum dma_data_direction {
 	DMA_BIDIRECTIONAL = 0,
 	DMA_TO_DEVICE = 1,
@@ -5947,12 +6030,13 @@
 struct scatterlist;
 
 struct dma_map_ops {
+	unsigned int flags;
 	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
 	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
 	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
 	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
-	void * (*alloc_noncoherent)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
-	void (*free_noncoherent)(struct device *, size_t, void *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
 	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
 	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
 	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
@@ -5969,6 +6053,7 @@
 	int (*dma_supported)(struct device *, u64);
 	u64 (*get_required_mask)(struct device *);
 	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
 	long unsigned int (*get_merge_boundary)(struct device *);
 };
 
@@ -5979,7828 +6064,6 @@
 	u64 offset;
 };
 
-typedef u32 phandle;
-
-struct fwnode_operations;
-
-struct fwnode_handle {
-	struct fwnode_handle *secondary;
-	const struct fwnode_operations *ops;
-	struct device *dev;
-};
-
-struct property;
-
-struct device_node {
-	const char *name;
-	phandle phandle;
-	const char *full_name;
-	struct fwnode_handle fwnode;
-	struct property *properties;
-	struct property *deadprops;
-	struct device_node *parent;
-	struct device_node *child;
-	struct device_node *sibling;
-	struct kobject kobj;
-	long unsigned int _flags;
-	void *data;
-};
-
-enum cpuhp_state {
-	CPUHP_INVALID = 4294967295,
-	CPUHP_OFFLINE = 0,
-	CPUHP_CREATE_THREADS = 1,
-	CPUHP_PERF_PREPARE = 2,
-	CPUHP_PERF_X86_PREPARE = 3,
-	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
-	CPUHP_PERF_POWER = 5,
-	CPUHP_PERF_SUPERH = 6,
-	CPUHP_X86_HPET_DEAD = 7,
-	CPUHP_X86_APB_DEAD = 8,
-	CPUHP_X86_MCE_DEAD = 9,
-	CPUHP_VIRT_NET_DEAD = 10,
-	CPUHP_SLUB_DEAD = 11,
-	CPUHP_DEBUG_OBJ_DEAD = 12,
-	CPUHP_MM_WRITEBACK_DEAD = 13,
-	CPUHP_MM_VMSTAT_DEAD = 14,
-	CPUHP_SOFTIRQ_DEAD = 15,
-	CPUHP_NET_MVNETA_DEAD = 16,
-	CPUHP_CPUIDLE_DEAD = 17,
-	CPUHP_ARM64_FPSIMD_DEAD = 18,
-	CPUHP_ARM_OMAP_WAKE_DEAD = 19,
-	CPUHP_IRQ_POLL_DEAD = 20,
-	CPUHP_BLOCK_SOFTIRQ_DEAD = 21,
-	CPUHP_ACPI_CPUDRV_DEAD = 22,
-	CPUHP_S390_PFAULT_DEAD = 23,
-	CPUHP_BLK_MQ_DEAD = 24,
-	CPUHP_FS_BUFF_DEAD = 25,
-	CPUHP_PRINTK_DEAD = 26,
-	CPUHP_MM_MEMCQ_DEAD = 27,
-	CPUHP_PERCPU_CNT_DEAD = 28,
-	CPUHP_RADIX_DEAD = 29,
-	CPUHP_PAGE_ALLOC_DEAD = 30,
-	CPUHP_NET_DEV_DEAD = 31,
-	CPUHP_PCI_XGENE_DEAD = 32,
-	CPUHP_IOMMU_INTEL_DEAD = 33,
-	CPUHP_LUSTRE_CFS_DEAD = 34,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,
-	CPUHP_PADATA_DEAD = 36,
-	CPUHP_WORKQUEUE_PREP = 37,
-	CPUHP_POWER_NUMA_PREPARE = 38,
-	CPUHP_HRTIMERS_PREPARE = 39,
-	CPUHP_PROFILE_PREPARE = 40,
-	CPUHP_X2APIC_PREPARE = 41,
-	CPUHP_SMPCFD_PREPARE = 42,
-	CPUHP_RELAY_PREPARE = 43,
-	CPUHP_SLAB_PREPARE = 44,
-	CPUHP_MD_RAID5_PREPARE = 45,
-	CPUHP_RCUTREE_PREP = 46,
-	CPUHP_CPUIDLE_COUPLED_PREPARE = 47,
-	CPUHP_POWERPC_PMAC_PREPARE = 48,
-	CPUHP_POWERPC_MMU_CTX_PREPARE = 49,
-	CPUHP_XEN_PREPARE = 50,
-	CPUHP_XEN_EVTCHN_PREPARE = 51,
-	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,
-	CPUHP_SH_SH3X_PREPARE = 53,
-	CPUHP_NET_FLOW_PREPARE = 54,
-	CPUHP_TOPOLOGY_PREPARE = 55,
-	CPUHP_NET_IUCV_PREPARE = 56,
-	CPUHP_ARM_BL_PREPARE = 57,
-	CPUHP_TRACE_RB_PREPARE = 58,
-	CPUHP_MM_ZS_PREPARE = 59,
-	CPUHP_MM_ZSWP_MEM_PREPARE = 60,
-	CPUHP_MM_ZSWP_POOL_PREPARE = 61,
-	CPUHP_KVM_PPC_BOOK3S_PREPARE = 62,
-	CPUHP_ZCOMP_PREPARE = 63,
-	CPUHP_TIMERS_PREPARE = 64,
-	CPUHP_MIPS_SOC_PREPARE = 65,
-	CPUHP_BP_PREPARE_DYN = 66,
-	CPUHP_BP_PREPARE_DYN_END = 86,
-	CPUHP_BRINGUP_CPU = 87,
-	CPUHP_AP_IDLE_DEAD = 88,
-	CPUHP_AP_OFFLINE = 89,
-	CPUHP_AP_SCHED_STARTING = 90,
-	CPUHP_AP_RCUTREE_DYING = 91,
-	CPUHP_AP_CPU_PM_STARTING = 92,
-	CPUHP_AP_IRQ_GIC_STARTING = 93,
-	CPUHP_AP_IRQ_HIP04_STARTING = 94,
-	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 95,
-	CPUHP_AP_IRQ_BCM2836_STARTING = 96,
-	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 97,
-	CPUHP_AP_IRQ_RISCV_STARTING = 98,
-	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 99,
-	CPUHP_AP_ARM_MVEBU_COHERENCY = 100,
-	CPUHP_AP_MICROCODE_LOADER = 101,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 102,
-	CPUHP_AP_PERF_X86_STARTING = 103,
-	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 104,
-	CPUHP_AP_PERF_X86_CQM_STARTING = 105,
-	CPUHP_AP_PERF_X86_CSTATE_STARTING = 106,
-	CPUHP_AP_PERF_XTENSA_STARTING = 107,
-	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 108,
-	CPUHP_AP_ARM_SDEI_STARTING = 109,
-	CPUHP_AP_ARM_VFP_STARTING = 110,
-	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,
-	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,
-	CPUHP_AP_PERF_ARM_ACPI_STARTING = 113,
-	CPUHP_AP_PERF_ARM_STARTING = 114,
-	CPUHP_AP_ARM_L2X0_STARTING = 115,
-	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 116,
-	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 117,
-	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 118,
-	CPUHP_AP_JCORE_TIMER_STARTING = 119,
-	CPUHP_AP_ARM_TWD_STARTING = 120,
-	CPUHP_AP_QCOM_TIMER_STARTING = 121,
-	CPUHP_AP_TEGRA_TIMER_STARTING = 122,
-	CPUHP_AP_ARMADA_TIMER_STARTING = 123,
-	CPUHP_AP_MARCO_TIMER_STARTING = 124,
-	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 125,
-	CPUHP_AP_ARC_TIMER_STARTING = 126,
-	CPUHP_AP_RISCV_TIMER_STARTING = 127,
-	CPUHP_AP_CLINT_TIMER_STARTING = 128,
-	CPUHP_AP_CSKY_TIMER_STARTING = 129,
-	CPUHP_AP_HYPERV_TIMER_STARTING = 130,
-	CPUHP_AP_KVM_STARTING = 131,
-	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 132,
-	CPUHP_AP_KVM_ARM_VGIC_STARTING = 133,
-	CPUHP_AP_KVM_ARM_TIMER_STARTING = 134,
-	CPUHP_AP_DUMMY_TIMER_STARTING = 135,
-	CPUHP_AP_ARM_XEN_STARTING = 136,
-	CPUHP_AP_ARM_CORESIGHT_STARTING = 137,
-	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,
-	CPUHP_AP_ARM64_ISNDEP_STARTING = 139,
-	CPUHP_AP_SMPCFD_DYING = 140,
-	CPUHP_AP_X86_TBOOT_DYING = 141,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 142,
-	CPUHP_AP_ONLINE = 143,
-	CPUHP_TEARDOWN_CPU = 144,
-	CPUHP_AP_ONLINE_IDLE = 145,
-	CPUHP_AP_SMPBOOT_THREADS = 146,
-	CPUHP_AP_X86_VDSO_VMA_ONLINE = 147,
-	CPUHP_AP_IRQ_AFFINITY_ONLINE = 148,
-	CPUHP_AP_BLK_MQ_ONLINE = 149,
-	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 150,
-	CPUHP_AP_X86_INTEL_EPB_ONLINE = 151,
-	CPUHP_AP_PERF_ONLINE = 152,
-	CPUHP_AP_PERF_X86_ONLINE = 153,
-	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 154,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 155,
-	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 156,
-	CPUHP_AP_PERF_X86_RAPL_ONLINE = 157,
-	CPUHP_AP_PERF_X86_CQM_ONLINE = 158,
-	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 159,
-	CPUHP_AP_PERF_S390_CF_ONLINE = 160,
-	CPUHP_AP_PERF_S390_SF_ONLINE = 161,
-	CPUHP_AP_PERF_ARM_CCI_ONLINE = 162,
-	CPUHP_AP_PERF_ARM_CCN_ONLINE = 163,
-	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 164,
-	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 165,
-	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 166,
-	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 167,
-	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 168,
-	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 169,
-	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 170,
-	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 171,
-	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 172,
-	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 173,
-	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 174,
-	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 175,
-	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 176,
-	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 177,
-	CPUHP_AP_WATCHDOG_ONLINE = 178,
-	CPUHP_AP_WORKQUEUE_ONLINE = 179,
-	CPUHP_AP_RCUTREE_ONLINE = 180,
-	CPUHP_AP_BASE_CACHEINFO_ONLINE = 181,
-	CPUHP_AP_ONLINE_DYN = 182,
-	CPUHP_AP_ONLINE_DYN_END = 212,
-	CPUHP_AP_X86_HPET_ONLINE = 213,
-	CPUHP_AP_X86_KVM_CLK_ONLINE = 214,
-	CPUHP_AP_ACTIVE = 215,
-	CPUHP_ONLINE = 216,
-};
-
-typedef void percpu_ref_func_t(struct percpu_ref *);
-
-struct percpu_ref_data {
-	atomic_long_t count;
-	percpu_ref_func_t *release;
-	percpu_ref_func_t *confirm_switch;
-	bool force_atomic: 1;
-	bool allow_reinit: 1;
-	struct callback_head rcu;
-	struct percpu_ref *ref;
-};
-
-struct dev_pagemap_ops {
-	void (*page_free)(struct page *);
-	void (*kill)(struct dev_pagemap *);
-	void (*cleanup)(struct dev_pagemap *);
-	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
-};
-
-enum vm_event_item {
-	PGPGIN = 0,
-	PGPGOUT = 1,
-	PSWPIN = 2,
-	PSWPOUT = 3,
-	PGALLOC_DMA = 4,
-	PGALLOC_DMA32 = 5,
-	PGALLOC_NORMAL = 6,
-	PGALLOC_MOVABLE = 7,
-	ALLOCSTALL_DMA = 8,
-	ALLOCSTALL_DMA32 = 9,
-	ALLOCSTALL_NORMAL = 10,
-	ALLOCSTALL_MOVABLE = 11,
-	PGSCAN_SKIP_DMA = 12,
-	PGSCAN_SKIP_DMA32 = 13,
-	PGSCAN_SKIP_NORMAL = 14,
-	PGSCAN_SKIP_MOVABLE = 15,
-	PGFREE = 16,
-	PGACTIVATE = 17,
-	PGDEACTIVATE = 18,
-	PGLAZYFREE = 19,
-	PGFAULT = 20,
-	PGMAJFAULT = 21,
-	PGLAZYFREED = 22,
-	PGREFILL = 23,
-	PGREUSE = 24,
-	PGSTEAL_KSWAPD = 25,
-	PGSTEAL_DIRECT = 26,
-	PGSCAN_KSWAPD = 27,
-	PGSCAN_DIRECT = 28,
-	PGSCAN_DIRECT_THROTTLE = 29,
-	PGSCAN_ANON = 30,
-	PGSCAN_FILE = 31,
-	PGSTEAL_ANON = 32,
-	PGSTEAL_FILE = 33,
-	PGSCAN_ZONE_RECLAIM_FAILED = 34,
-	PGINODESTEAL = 35,
-	SLABS_SCANNED = 36,
-	KSWAPD_INODESTEAL = 37,
-	KSWAPD_LOW_WMARK_HIT_QUICKLY = 38,
-	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 39,
-	PAGEOUTRUN = 40,
-	PGROTATED = 41,
-	DROP_PAGECACHE = 42,
-	DROP_SLAB = 43,
-	OOM_KILL = 44,
-	NUMA_PTE_UPDATES = 45,
-	NUMA_HUGE_PTE_UPDATES = 46,
-	NUMA_HINT_FAULTS = 47,
-	NUMA_HINT_FAULTS_LOCAL = 48,
-	NUMA_PAGE_MIGRATE = 49,
-	PGMIGRATE_SUCCESS = 50,
-	PGMIGRATE_FAIL = 51,
-	THP_MIGRATION_SUCCESS = 52,
-	THP_MIGRATION_FAIL = 53,
-	THP_MIGRATION_SPLIT = 54,
-	COMPACTMIGRATE_SCANNED = 55,
-	COMPACTFREE_SCANNED = 56,
-	COMPACTISOLATED = 57,
-	COMPACTSTALL = 58,
-	COMPACTFAIL = 59,
-	COMPACTSUCCESS = 60,
-	KCOMPACTD_WAKE = 61,
-	KCOMPACTD_MIGRATE_SCANNED = 62,
-	KCOMPACTD_FREE_SCANNED = 63,
-	HTLB_BUDDY_PGALLOC = 64,
-	HTLB_BUDDY_PGALLOC_FAIL = 65,
-	UNEVICTABLE_PGCULLED = 66,
-	UNEVICTABLE_PGSCANNED = 67,
-	UNEVICTABLE_PGRESCUED = 68,
-	UNEVICTABLE_PGMLOCKED = 69,
-	UNEVICTABLE_PGMUNLOCKED = 70,
-	UNEVICTABLE_PGCLEARED = 71,
-	UNEVICTABLE_PGSTRANDED = 72,
-	THP_FAULT_ALLOC = 73,
-	THP_FAULT_FALLBACK = 74,
-	THP_FAULT_FALLBACK_CHARGE = 75,
-	THP_COLLAPSE_ALLOC = 76,
-	THP_COLLAPSE_ALLOC_FAILED = 77,
-	THP_FILE_ALLOC = 78,
-	THP_FILE_FALLBACK = 79,
-	THP_FILE_FALLBACK_CHARGE = 80,
-	THP_FILE_MAPPED = 81,
-	THP_SPLIT_PAGE = 82,
-	THP_SPLIT_PAGE_FAILED = 83,
-	THP_DEFERRED_SPLIT_PAGE = 84,
-	THP_SPLIT_PMD = 85,
-	THP_ZERO_PAGE_ALLOC = 86,
-	THP_ZERO_PAGE_ALLOC_FAILED = 87,
-	THP_SWPOUT = 88,
-	THP_SWPOUT_FALLBACK = 89,
-	BALLOON_INFLATE = 90,
-	BALLOON_DEFLATE = 91,
-	BALLOON_MIGRATE = 92,
-	SWAP_RA = 93,
-	SWAP_RA_HIT = 94,
-	NR_VM_EVENT_ITEMS = 95,
-};
-
-struct seq_operations {
-	void * (*start)(struct seq_file *, loff_t *);
-	void (*stop)(struct seq_file *, void *);
-	void * (*next)(struct seq_file *, void *, loff_t *);
-	int (*show)(struct seq_file *, void *);
-};
-
-struct ring_buffer_event {
-	u32 type_len: 5;
-	u32 time_delta: 27;
-	u32 array[0];
-};
-
-struct seq_buf {
-	char *buffer;
-	size_t size;
-	size_t len;
-	loff_t readpos;
-};
-
-struct trace_seq {
-	char buffer[4096];
-	struct seq_buf seq;
-	int full;
-};
-
-enum perf_sw_ids {
-	PERF_COUNT_SW_CPU_CLOCK = 0,
-	PERF_COUNT_SW_TASK_CLOCK = 1,
-	PERF_COUNT_SW_PAGE_FAULTS = 2,
-	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
-	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
-	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
-	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
-	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
-	PERF_COUNT_SW_EMULATION_FAULTS = 8,
-	PERF_COUNT_SW_DUMMY = 9,
-	PERF_COUNT_SW_BPF_OUTPUT = 10,
-	PERF_COUNT_SW_MAX = 11,
-};
-
-union perf_mem_data_src {
-	__u64 val;
-	struct {
-		__u64 mem_op: 5;
-		__u64 mem_lvl: 14;
-		__u64 mem_snoop: 5;
-		__u64 mem_lock: 2;
-		__u64 mem_dtlb: 7;
-		__u64 mem_lvl_num: 4;
-		__u64 mem_remote: 1;
-		__u64 mem_snoopx: 2;
-		__u64 mem_rsvd: 24;
-	};
-};
-
-struct perf_branch_entry {
-	__u64 from;
-	__u64 to;
-	__u64 mispred: 1;
-	__u64 predicted: 1;
-	__u64 in_tx: 1;
-	__u64 abort: 1;
-	__u64 cycles: 16;
-	__u64 type: 4;
-	__u64 reserved: 40;
-};
-
-struct new_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-	char domainname[65];
-};
-
-struct uts_namespace {
-	struct kref kref;
-	struct new_utsname name;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-};
-
-struct cgroup_namespace {
-	refcount_t count;
-	struct ns_common ns;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct css_set *root_cset;
-};
-
-struct nsset {
-	unsigned int flags;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	const struct cred *cred;
-};
-
-struct proc_ns_operations {
-	const char *name;
-	const char *real_ns_name;
-	int type;
-	struct ns_common * (*get)(struct task_struct *);
-	void (*put)(struct ns_common *);
-	int (*install)(struct nsset *, struct ns_common *);
-	struct user_namespace * (*owner)(struct ns_common *);
-	struct ns_common * (*get_parent)(struct ns_common *);
-};
-
-struct ucounts {
-	struct hlist_node node;
-	struct user_namespace *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[10];
-};
-
-struct iovec {
-	void *iov_base;
-	__kernel_size_t iov_len;
-};
-
-struct kvec {
-	void *iov_base;
-	size_t iov_len;
-};
-
-struct perf_regs {
-	__u64 abi;
-	struct pt_regs *regs;
-};
-
-struct u64_stats_sync {};
-
-struct bpf_cgroup_storage_key {
-	__u64 cgroup_inode_id;
-	__u32 attach_type;
-};
-
-struct bpf_cgroup_storage;
-
-struct bpf_prog_array_item {
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_storage_buffer;
-
-struct bpf_cgroup_storage_map;
-
-struct bpf_cgroup_storage {
-	union {
-		struct bpf_storage_buffer *buf;
-		void *percpu_buf;
-	};
-	struct bpf_cgroup_storage_map *map;
-	struct bpf_cgroup_storage_key key;
-	struct list_head list_map;
-	struct list_head list_cg;
-	struct rb_node node;
-	struct callback_head rcu;
-};
-
-struct bpf_prog_array {
-	struct callback_head rcu;
-	struct bpf_prog_array_item items[0];
-};
-
-struct bpf_storage_buffer {
-	struct callback_head rcu;
-	char data[0];
-};
-
-struct psi_group_cpu {
-	seqcount_t seq;
-	unsigned int tasks[4];
-	u32 state_mask;
-	u32 times[6];
-	u64 state_start;
-	long: 64;
-	u32 times_prev[12];
-	long: 64;
-	long: 64;
-};
-
-struct cgroup_taskset;
-
-struct cftype;
-
-struct cgroup_subsys {
-	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
-	int (*css_online)(struct cgroup_subsys_state *);
-	void (*css_offline)(struct cgroup_subsys_state *);
-	void (*css_released)(struct cgroup_subsys_state *);
-	void (*css_free)(struct cgroup_subsys_state *);
-	void (*css_reset)(struct cgroup_subsys_state *);
-	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
-	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
-	int (*can_attach)(struct cgroup_taskset *);
-	void (*cancel_attach)(struct cgroup_taskset *);
-	void (*attach)(struct cgroup_taskset *);
-	void (*post_attach)();
-	int (*can_fork)(struct task_struct *, struct css_set *);
-	void (*cancel_fork)(struct task_struct *, struct css_set *);
-	void (*fork)(struct task_struct *);
-	void (*exit)(struct task_struct *);
-	void (*release)(struct task_struct *);
-	void (*bind)(struct cgroup_subsys_state *);
-	bool early_init: 1;
-	bool implicit_on_dfl: 1;
-	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
-	int id;
-	const char *name;
-	const char *legacy_name;
-	struct cgroup_root *root;
-	struct idr css_idr;
-	struct list_head cfts;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	unsigned int depends_on;
-};
-
-struct cgroup_rstat_cpu {
-	struct u64_stats_sync bsync;
-	struct cgroup_base_stat bstat;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup *updated_children;
-	struct cgroup *updated_next;
-};
-
-struct cgroup_root {
-	struct kernfs_root *kf_root;
-	unsigned int subsys_mask;
-	int hierarchy_id;
-	struct cgroup cgrp;
-	u64 cgrp_ancestor_id_storage;
-	atomic_t nr_cgrps;
-	struct list_head root_list;
-	unsigned int flags;
-	char release_agent_path[4096];
-	char name[64];
-};
-
-struct cftype {
-	char name[64];
-	long unsigned int private;
-	size_t max_write_len;
-	unsigned int flags;
-	unsigned int file_offset;
-	struct cgroup_subsys *ss;
-	struct list_head node;
-	struct kernfs_ops *kf_ops;
-	int (*open)(struct kernfs_open_file *);
-	void (*release)(struct kernfs_open_file *);
-	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
-	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
-	int (*seq_show)(struct seq_file *, void *);
-	void * (*seq_start)(struct seq_file *, loff_t *);
-	void * (*seq_next)(struct seq_file *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file *, void *);
-	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
-	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
-	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
-};
-
-enum kmalloc_cache_type {
-	KMALLOC_NORMAL = 0,
-	KMALLOC_RECLAIM = 1,
-	KMALLOC_DMA = 2,
-	NR_KMALLOC_TYPES = 3,
-};
-
-struct perf_callchain_entry {
-	__u64 nr;
-	__u64 ip[0];
-};
-
-typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);
-
-struct perf_raw_frag {
-	union {
-		struct perf_raw_frag *next;
-		long unsigned int pad;
-	};
-	perf_copy_f copy;
-	void *data;
-	u32 size;
-} __attribute__((packed));
-
-struct perf_raw_record {
-	struct perf_raw_frag frag;
-	u32 size;
-};
-
-struct perf_branch_stack {
-	__u64 nr;
-	__u64 hw_idx;
-	struct perf_branch_entry entries[0];
-};
-
-struct perf_cpu_context;
-
-struct perf_output_handle;
-
-struct pmu {
-	struct list_head entry;
-	struct module *module;
-	struct device *dev;
-	const struct attribute_group **attr_groups;
-	const struct attribute_group **attr_update;
-	const char *name;
-	int type;
-	int capabilities;
-	int *pmu_disable_count;
-	struct perf_cpu_context *pmu_cpu_context;
-	atomic_t exclusive_cnt;
-	int task_ctx_nr;
-	int hrtimer_interval_ms;
-	unsigned int nr_addr_filters;
-	void (*pmu_enable)(struct pmu *);
-	void (*pmu_disable)(struct pmu *);
-	int (*event_init)(struct perf_event *);
-	void (*event_mapped)(struct perf_event *, struct mm_struct *);
-	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
-	int (*add)(struct perf_event *, int);
-	void (*del)(struct perf_event *, int);
-	void (*start)(struct perf_event *, int);
-	void (*stop)(struct perf_event *, int);
-	void (*read)(struct perf_event *);
-	void (*start_txn)(struct pmu *, unsigned int);
-	int (*commit_txn)(struct pmu *);
-	void (*cancel_txn)(struct pmu *);
-	int (*event_idx)(struct perf_event *);
-	void (*sched_task)(struct perf_event_context *, bool);
-	struct kmem_cache *task_ctx_cache;
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
-	void * (*setup_aux)(struct perf_event *, void **, int, bool);
-	void (*free_aux)(void *);
-	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
-	int (*addr_filters_validate)(struct list_head *);
-	void (*addr_filters_sync)(struct perf_event *);
-	int (*aux_output_match)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int (*check_period)(struct perf_event *, u64);
-};
-
-struct perf_cpu_context {
-	struct perf_event_context ctx;
-	struct perf_event_context *task_ctx;
-	int active_oncpu;
-	int exclusive;
-	raw_spinlock_t hrtimer_lock;
-	struct hrtimer hrtimer;
-	ktime_t hrtimer_interval;
-	unsigned int hrtimer_active;
-	struct perf_cgroup *cgrp;
-	struct list_head cgrp_cpuctx_entry;
-	int sched_cb_usage;
-	int online;
-	int heap_size;
-	struct perf_event **heap;
-	struct perf_event *heap_default[2];
-};
-
-struct perf_output_handle {
-	struct perf_event *event;
-	struct perf_buffer *rb;
-	long unsigned int wakeup;
-	long unsigned int size;
-	u64 aux_flags;
-	union {
-		void *addr;
-		long unsigned int head;
-	};
-	int page;
-};
-
-struct perf_addr_filter_range {
-	long unsigned int start;
-	long unsigned int size;
-};
-
-struct perf_sample_data {
-	u64 addr;
-	struct perf_raw_record *raw;
-	struct perf_branch_stack *br_stack;
-	u64 period;
-	u64 weight;
-	u64 txn;
-	union perf_mem_data_src data_src;
-	u64 type;
-	u64 ip;
-	struct {
-		u32 pid;
-		u32 tid;
-	} tid_entry;
-	u64 time;
-	u64 id;
-	u64 stream_id;
-	struct {
-		u32 cpu;
-		u32 reserved;
-	} cpu_entry;
-	struct perf_callchain_entry *callchain;
-	u64 aux_size;
-	struct perf_regs regs_user;
-	struct perf_regs regs_intr;
-	u64 stack_user_size;
-	u64 phys_addr;
-	u64 cgroup;
-	long: 64;
-};
-
-struct perf_cgroup_info;
-
-struct perf_cgroup {
-	struct cgroup_subsys_state css;
-	struct perf_cgroup_info *info;
-};
-
-struct perf_cgroup_info {
-	u64 time;
-	u64 timestamp;
-};
-
-struct trace_entry {
-	short unsigned int type;
-	unsigned char flags;
-	unsigned char preempt_count;
-	int pid;
-};
-
-struct trace_array;
-
-struct tracer;
-
-struct array_buffer;
-
-struct ring_buffer_iter;
-
-struct trace_iterator {
-	struct trace_array *tr;
-	struct tracer *trace;
-	struct array_buffer *array_buffer;
-	void *private;
-	int cpu_file;
-	struct mutex mutex;
-	struct ring_buffer_iter **buffer_iter;
-	long unsigned int iter_flags;
-	void *temp;
-	unsigned int temp_size;
-	struct trace_seq tmp_seq;
-	cpumask_var_t started;
-	bool snapshot;
-	struct trace_seq seq;
-	struct trace_entry *ent;
-	long unsigned int lost_events;
-	int leftover;
-	int ent_size;
-	int cpu;
-	u64 ts;
-	loff_t pos;
-	long int idx;
-};
-
-enum print_line_t {
-	TRACE_TYPE_PARTIAL_LINE = 0,
-	TRACE_TYPE_HANDLED = 1,
-	TRACE_TYPE_UNHANDLED = 2,
-	TRACE_TYPE_NO_CONSUME = 3,
-};
-
-typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
-
-struct trace_event_functions {
-	trace_print_func trace;
-	trace_print_func raw;
-	trace_print_func hex;
-	trace_print_func binary;
-};
-
-enum trace_reg {
-	TRACE_REG_REGISTER = 0,
-	TRACE_REG_UNREGISTER = 1,
-	TRACE_REG_PERF_REGISTER = 2,
-	TRACE_REG_PERF_UNREGISTER = 3,
-	TRACE_REG_PERF_OPEN = 4,
-	TRACE_REG_PERF_CLOSE = 5,
-	TRACE_REG_PERF_ADD = 6,
-	TRACE_REG_PERF_DEL = 7,
-};
-
-struct trace_event_fields {
-	const char *type;
-	union {
-		struct {
-			const char *name;
-			const int size;
-			const int align;
-			const int is_signed;
-			const int filter_type;
-		};
-		int (*define_fields)(struct trace_event_call *);
-	};
-};
-
-struct trace_event_class {
-	const char *system;
-	void *probe;
-	void *perf_probe;
-	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
-	struct trace_event_fields *fields_array;
-	struct list_head * (*get_fields)(struct trace_event_call *);
-	struct list_head fields;
-	int (*raw_init)(struct trace_event_call *);
-};
-
-struct trace_buffer;
-
-struct trace_event_file;
-
-struct trace_event_buffer {
-	struct trace_buffer *buffer;
-	struct ring_buffer_event *event;
-	struct trace_event_file *trace_file;
-	void *entry;
-	long unsigned int flags;
-	int pc;
-	struct pt_regs *regs;
-};
-
-struct trace_subsystem_dir;
-
-struct trace_event_file {
-	struct list_head list;
-	struct trace_event_call *event_call;
-	struct event_filter *filter;
-	struct dentry *dir;
-	struct trace_array *tr;
-	struct trace_subsystem_dir *system;
-	struct list_head triggers;
-	long unsigned int flags;
-	atomic_t sm_ref;
-	atomic_t tm_ref;
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED_BIT = 0,
-	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
-	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
-	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
-	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
-	TRACE_EVENT_FL_KPROBE_BIT = 5,
-	TRACE_EVENT_FL_UPROBE_BIT = 6,
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED = 1,
-	TRACE_EVENT_FL_CAP_ANY = 2,
-	TRACE_EVENT_FL_NO_SET_FILTER = 4,
-	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
-	TRACE_EVENT_FL_TRACEPOINT = 16,
-	TRACE_EVENT_FL_KPROBE = 32,
-	TRACE_EVENT_FL_UPROBE = 64,
-};
-
-enum {
-	EVENT_FILE_FL_ENABLED_BIT = 0,
-	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
-	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
-	EVENT_FILE_FL_FILTERED_BIT = 3,
-	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
-	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
-	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
-	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
-	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
-	EVENT_FILE_FL_PID_FILTER_BIT = 9,
-	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
-};
-
-enum {
-	EVENT_FILE_FL_ENABLED = 1,
-	EVENT_FILE_FL_RECORDED_CMD = 2,
-	EVENT_FILE_FL_RECORDED_TGID = 4,
-	EVENT_FILE_FL_FILTERED = 8,
-	EVENT_FILE_FL_NO_SET_FILTER = 16,
-	EVENT_FILE_FL_SOFT_MODE = 32,
-	EVENT_FILE_FL_SOFT_DISABLED = 64,
-	EVENT_FILE_FL_TRIGGER_MODE = 128,
-	EVENT_FILE_FL_TRIGGER_COND = 256,
-	EVENT_FILE_FL_PID_FILTER = 512,
-	EVENT_FILE_FL_WAS_ENABLED = 1024,
-};
-
-enum {
-	FILTER_OTHER = 0,
-	FILTER_STATIC_STRING = 1,
-	FILTER_DYN_STRING = 2,
-	FILTER_PTR_STRING = 3,
-	FILTER_TRACE_FN = 4,
-	FILTER_COMM = 5,
-	FILTER_CPU = 6,
-};
-
-struct fwnode_reference_args;
-
-struct fwnode_endpoint;
-
-struct fwnode_operations {
-	struct fwnode_handle * (*get)(struct fwnode_handle *);
-	void (*put)(struct fwnode_handle *);
-	bool (*device_is_available)(const struct fwnode_handle *);
-	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
-	bool (*property_present)(const struct fwnode_handle *, const char *);
-	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
-	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
-	const char * (*get_name)(const struct fwnode_handle *);
-	const char * (*get_name_prefix)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
-	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
-	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
-	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
-	int (*add_links)(const struct fwnode_handle *, struct device *);
-};
-
-struct fwnode_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct fwnode_handle *local_fwnode;
-};
-
-struct fwnode_reference_args {
-	struct fwnode_handle *fwnode;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct property {
-	char *name;
-	int length;
-	void *value;
-	struct property *next;
-	long unsigned int _flags;
-	struct bin_attribute attr;
-};
-
-struct irq_fwspec {
-	struct fwnode_handle *fwnode;
-	int param_count;
-	u32 param[16];
-};
-
-struct irq_data;
-
-struct irq_domain_ops {
-	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
-	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
-	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
-	void (*unmap)(struct irq_domain *, unsigned int);
-	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
-	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
-	void (*free)(struct irq_domain *, unsigned int, unsigned int);
-	int (*activate)(struct irq_domain *, struct irq_data *, bool);
-	void (*deactivate)(struct irq_domain *, struct irq_data *);
-	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
-};
-
-struct xbc_node {
-	u16 next;
-	u16 child;
-	u16 parent;
-	u16 data;
-};
-
-enum wb_stat_item {
-	WB_RECLAIMABLE = 0,
-	WB_WRITEBACK = 1,
-	WB_DIRTIED = 2,
-	WB_WRITTEN = 3,
-	NR_WB_STAT_ITEMS = 4,
-};
-
-struct disk_stats;
-
-struct partition_meta_info;
-
-struct hd_struct {
-	sector_t start_sect;
-	sector_t nr_sects;
-	long unsigned int stamp;
-	struct disk_stats *dkstats;
-	struct percpu_ref ref;
-	struct device __dev;
-	struct kobject *holder_dir;
-	int policy;
-	int partno;
-	struct partition_meta_info *info;
-	struct rcu_work rcu_work;
-};
-
-struct disk_part_tbl;
-
-struct block_device_operations;
-
-struct timer_rand_state;
-
-struct disk_events;
-
-struct cdrom_device_info;
-
-struct badblocks;
-
-struct gendisk {
-	int major;
-	int first_minor;
-	int minors;
-	char disk_name[32];
-	short unsigned int events;
-	short unsigned int event_flags;
-	struct disk_part_tbl *part_tbl;
-	struct hd_struct part0;
-	const struct block_device_operations *fops;
-	struct request_queue *queue;
-	void *private_data;
-	int flags;
-	long unsigned int state;
-	struct rw_semaphore lookup_sem;
-	struct kobject *slave_dir;
-	struct timer_rand_state *random;
-	atomic_t sync_io;
-	struct disk_events *ev;
-	struct kobject integrity_kobj;
-	struct cdrom_device_info *cdi;
-	int node_id;
-	struct badblocks *bb;
-	struct lockdep_map lockdep_map;
-};
-
-struct bio_integrity_payload {
-	struct bio *bip_bio;
-	struct bvec_iter bip_iter;
-	short unsigned int bip_slab;
-	short unsigned int bip_vcnt;
-	short unsigned int bip_max_vcnt;
-	short unsigned int bip_flags;
-	struct bvec_iter bio_iter;
-	struct work_struct bip_work;
-	struct bio_vec *bip_vec;
-	struct bio_vec bip_inline_vecs[0];
-};
-
-struct blkg_iostat {
-	u64 bytes[3];
-	u64 ios[3];
-};
-
-struct blkg_iostat_set {
-	struct u64_stats_sync sync;
-	struct blkg_iostat cur;
-	struct blkg_iostat last;
-};
-
-struct blkcg;
-
-struct blkg_policy_data;
-
-struct blkcg_gq {
-	struct request_queue *q;
-	struct list_head q_node;
-	struct hlist_node blkcg_node;
-	struct blkcg *blkcg;
-	struct blkcg_gq *parent;
-	struct percpu_ref refcnt;
-	bool online;
-	struct blkg_iostat_set *iostat_cpu;
-	struct blkg_iostat_set iostat;
-	struct blkg_policy_data *pd[5];
-	spinlock_t async_bio_lock;
-	struct bio_list async_bios;
-	struct work_struct async_bio_work;
-	atomic_t use_delay;
-	atomic64_t delay_nsec;
-	atomic64_t delay_start;
-	u64 last_delay;
-	int last_use;
-	struct callback_head callback_head;
-};
-
-typedef unsigned int blk_qc_t;
-
-struct partition_meta_info {
-	char uuid[37];
-	u8 volname[64];
-};
-
-struct disk_part_tbl {
-	struct callback_head callback_head;
-	int len;
-	struct hd_struct *last_lookup;
-	struct hd_struct *part[0];
-};
-
-struct blk_integrity_iter;
-
-typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
-
-typedef void integrity_prepare_fn(struct request *);
-
-typedef void integrity_complete_fn(struct request *, unsigned int);
-
-struct blk_integrity_profile {
-	integrity_processing_fn *generate_fn;
-	integrity_processing_fn *verify_fn;
-	integrity_prepare_fn *prepare_fn;
-	integrity_complete_fn *complete_fn;
-	const char *name;
-};
-
-struct blk_zone;
-
-typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
-
-struct hd_geometry;
-
-struct pr_ops;
-
-struct block_device_operations {
-	blk_qc_t (*submit_bio)(struct bio *);
-	int (*open)(struct block_device *, fmode_t);
-	void (*release)(struct gendisk *, fmode_t);
-	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
-	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	unsigned int (*check_events)(struct gendisk *, unsigned int);
-	void (*unlock_native_capacity)(struct gendisk *);
-	int (*revalidate_disk)(struct gendisk *);
-	int (*getgeo)(struct block_device *, struct hd_geometry *);
-	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
-	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
-	char * (*devnode)(struct gendisk *, umode_t *);
-	struct module *owner;
-	const struct pr_ops *pr_ops;
-};
-
-struct sg_io_v4 {
-	__s32 guard;
-	__u32 protocol;
-	__u32 subprotocol;
-	__u32 request_len;
-	__u64 request;
-	__u64 request_tag;
-	__u32 request_attr;
-	__u32 request_priority;
-	__u32 request_extra;
-	__u32 max_response_len;
-	__u64 response;
-	__u32 dout_iovec_count;
-	__u32 dout_xfer_len;
-	__u32 din_iovec_count;
-	__u32 din_xfer_len;
-	__u64 dout_xferp;
-	__u64 din_xferp;
-	__u32 timeout;
-	__u32 flags;
-	__u64 usr_ptr;
-	__u32 spare_in;
-	__u32 driver_status;
-	__u32 transport_status;
-	__u32 device_status;
-	__u32 retry_delay;
-	__u32 info;
-	__u32 duration;
-	__u32 response_len;
-	__s32 din_resid;
-	__s32 dout_resid;
-	__u64 generated_tag;
-	__u32 spare_out;
-	__u32 padding;
-};
-
-struct bsg_ops {
-	int (*check_proto)(struct sg_io_v4 *);
-	int (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);
-	int (*complete_rq)(struct request *, struct sg_io_v4 *);
-	void (*free_rq)(struct request *);
-};
-
-typedef __u32 req_flags_t;
-
-typedef void rq_end_io_fn(struct request *, blk_status_t);
-
-enum mq_rq_state {
-	MQ_RQ_IDLE = 0,
-	MQ_RQ_IN_FLIGHT = 1,
-	MQ_RQ_COMPLETE = 2,
-};
-
-struct blk_ksm_keyslot;
-
-struct request {
-	struct request_queue *q;
-	struct blk_mq_ctx *mq_ctx;
-	struct blk_mq_hw_ctx *mq_hctx;
-	unsigned int cmd_flags;
-	req_flags_t rq_flags;
-	int tag;
-	int internal_tag;
-	unsigned int __data_len;
-	sector_t __sector;
-	struct bio *bio;
-	struct bio *biotail;
-	struct list_head queuelist;
-	union {
-		struct hlist_node hash;
-		struct list_head ipi_list;
-	};
-	union {
-		struct rb_node rb_node;
-		struct bio_vec special_vec;
-		void *completion_data;
-		int error_count;
-	};
-	union {
-		struct {
-			struct io_cq *icq;
-			void *priv[2];
-		} elv;
-		struct {
-			unsigned int seq;
-			struct list_head list;
-			rq_end_io_fn *saved_end_io;
-		} flush;
-	};
-	struct gendisk *rq_disk;
-	struct hd_struct *part;
-	u64 alloc_time_ns;
-	u64 start_time_ns;
-	u64 io_start_time_ns;
-	short unsigned int wbt_flags;
-	short unsigned int stats_sectors;
-	short unsigned int nr_phys_segments;
-	short unsigned int nr_integrity_segments;
-	struct bio_crypt_ctx *crypt_ctx;
-	struct blk_ksm_keyslot *crypt_keyslot;
-	short unsigned int write_hint;
-	short unsigned int ioprio;
-	enum mq_rq_state state;
-	refcount_t ref;
-	unsigned int timeout;
-	long unsigned int deadline;
-	union {
-		struct __call_single_data csd;
-		u64 fifo_time;
-	};
-	rq_end_io_fn *end_io;
-	void *end_io_data;
-};
-
-struct blk_zone {
-	__u64 start;
-	__u64 len;
-	__u64 wp;
-	__u8 type;
-	__u8 cond;
-	__u8 non_seq;
-	__u8 reset;
-	__u8 resv[4];
-	__u64 capacity;
-	__u8 reserved[24];
-};
-
-enum elv_merge {
-	ELEVATOR_NO_MERGE = 0,
-	ELEVATOR_FRONT_MERGE = 1,
-	ELEVATOR_BACK_MERGE = 2,
-	ELEVATOR_DISCARD_MERGE = 3,
-};
-
-struct elevator_type;
-
-struct blk_mq_alloc_data;
-
-struct elevator_mq_ops {
-	int (*init_sched)(struct request_queue *, struct elevator_type *);
-	void (*exit_sched)(struct elevator_queue *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*depth_updated)(struct blk_mq_hw_ctx *);
-	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-	bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);
-	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
-	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-	void (*prepare_request)(struct request *);
-	void (*finish_request)(struct request *);
-	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
-	bool (*has_work)(struct blk_mq_hw_ctx *);
-	void (*completed_request)(struct request *, u64);
-	void (*requeue_request)(struct request *);
-	struct request * (*former_request)(struct request_queue *, struct request *);
-	struct request * (*next_request)(struct request_queue *, struct request *);
-	void (*init_icq)(struct io_cq *);
-	void (*exit_icq)(struct io_cq *);
-};
-
-struct elv_fs_entry;
-
-struct elevator_type {
-	struct kmem_cache *icq_cache;
-	struct elevator_mq_ops ops;
-	size_t icq_size;
-	size_t icq_align;
-	struct elv_fs_entry *elevator_attrs;
-	const char *elevator_name;
-	const char *elevator_alias;
-	const unsigned int elevator_features;
-	struct module *elevator_owner;
-	char icq_cache_name[22];
-	struct list_head list;
-};
-
-struct elevator_queue {
-	struct elevator_type *type;
-	void *elevator_data;
-	struct kobject kobj;
-	struct mutex sysfs_lock;
-	unsigned int registered: 1;
-	struct hlist_head hash[64];
-};
-
-struct elv_fs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct elevator_queue *, char *);
-	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-enum blk_eh_timer_return {
-	BLK_EH_DONE = 0,
-	BLK_EH_RESET_TIMER = 1,
-};
-
-struct blk_mq_queue_data;
-
-struct blk_mq_ops {
-	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
-	void (*commit_rqs)(struct blk_mq_hw_ctx *);
-	bool (*get_budget)(struct request_queue *);
-	void (*put_budget)(struct request_queue *);
-	enum blk_eh_timer_return (*timeout)(struct request *, bool);
-	int (*poll)(struct blk_mq_hw_ctx *);
-	void (*complete)(struct request *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
-	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
-	void (*initialize_rq_fn)(struct request *);
-	void (*cleanup_rq)(struct request *);
-	bool (*busy)(struct request_queue *);
-	int (*map_queues)(struct blk_mq_tag_set *);
-};
-
-struct blk_integrity_iter {
-	void *prot_buf;
-	void *data_buf;
-	sector_t seed;
-	unsigned int data_size;
-	short unsigned int interval;
-	const char *disk_name;
-};
-
-enum pr_type {
-	PR_WRITE_EXCLUSIVE = 1,
-	PR_EXCLUSIVE_ACCESS = 2,
-	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
-	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
-	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
-	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
-};
-
-struct pr_ops {
-	int (*pr_register)(struct block_device *, u64, u64, u32);
-	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
-	int (*pr_release)(struct block_device *, u64, enum pr_type);
-	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
-	int (*pr_clear)(struct block_device *, u64);
-};
-
-enum blkg_iostat_type {
-	BLKG_IOSTAT_READ = 0,
-	BLKG_IOSTAT_WRITE = 1,
-	BLKG_IOSTAT_DISCARD = 2,
-	BLKG_IOSTAT_NR = 3,
-};
-
-struct blkcg_policy_data;
-
-struct blkcg {
-	struct cgroup_subsys_state css;
-	spinlock_t lock;
-	refcount_t online_pin;
-	struct xarray blkg_tree;
-	struct blkcg_gq *blkg_hint;
-	struct hlist_head blkg_list;
-	struct blkcg_policy_data *cpd[5];
-	struct list_head all_blkcgs_node;
-	struct list_head cgwb_list;
-};
-
-struct blkcg_policy_data {
-	struct blkcg *blkcg;
-	int plid;
-};
-
-struct blkg_policy_data {
-	struct blkcg_gq *blkg;
-	int plid;
-};
-
-enum memcg_stat_item {
-	MEMCG_SWAP = 37,
-	MEMCG_SOCK = 38,
-	MEMCG_PERCPU_B = 39,
-	MEMCG_NR_STAT = 40,
-};
-
-enum memcg_memory_event {
-	MEMCG_LOW = 0,
-	MEMCG_HIGH = 1,
-	MEMCG_MAX = 2,
-	MEMCG_OOM = 3,
-	MEMCG_OOM_KILL = 4,
-	MEMCG_SWAP_HIGH = 5,
-	MEMCG_SWAP_MAX = 6,
-	MEMCG_SWAP_FAIL = 7,
-	MEMCG_NR_MEMORY_EVENTS = 8,
-};
-
-enum mem_cgroup_events_target {
-	MEM_CGROUP_TARGET_THRESH = 0,
-	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
-	MEM_CGROUP_NTARGETS = 2,
-};
-
-struct memcg_vmstats_percpu {
-	long int stat[40];
-	long unsigned int events[95];
-	long unsigned int nr_page_events;
-	long unsigned int targets[2];
-};
-
-struct mem_cgroup_reclaim_iter {
-	struct mem_cgroup *position;
-	unsigned int generation;
-};
-
-struct lruvec_stat {
-	long int count[37];
-};
-
-struct memcg_shrinker_map {
-	struct callback_head rcu;
-	long unsigned int map[0];
-};
-
-struct mem_cgroup_per_node {
-	struct lruvec lruvec;
-	struct lruvec_stat *lruvec_stat_local;
-	struct lruvec_stat *lruvec_stat_cpu;
-	atomic_long_t lruvec_stat[37];
-	long unsigned int lru_zone_size[20];
-	struct mem_cgroup_reclaim_iter iter;
-	struct memcg_shrinker_map *shrinker_map;
-	struct rb_node tree_node;
-	long unsigned int usage_in_excess;
-	bool on_tree;
-	struct mem_cgroup *memcg;
-};
-
-struct eventfd_ctx;
-
-struct mem_cgroup_threshold {
-	struct eventfd_ctx *eventfd;
-	long unsigned int threshold;
-};
-
-struct mem_cgroup_threshold_ary {
-	int current_threshold;
-	unsigned int size;
-	struct mem_cgroup_threshold entries[0];
-};
-
-struct percpu_cluster {
-	struct swap_cluster_info index;
-	unsigned int next;
-};
-
-enum fs_value_type {
-	fs_value_is_undefined = 0,
-	fs_value_is_flag = 1,
-	fs_value_is_string = 2,
-	fs_value_is_blob = 3,
-	fs_value_is_filename = 4,
-	fs_value_is_file = 5,
-};
-
-struct fs_parameter {
-	const char *key;
-	enum fs_value_type type: 8;
-	union {
-		char *string;
-		void *blob;
-		struct filename *name;
-		struct file *file;
-	};
-	size_t size;
-	int dirfd;
-};
-
-struct fc_log {
-	refcount_t usage;
-	u8 head;
-	u8 tail;
-	u8 need_free;
-	struct module *owner;
-	char *buffer[8];
-};
-
-struct fs_context_operations {
-	void (*free)(struct fs_context *);
-	int (*dup)(struct fs_context *, struct fs_context *);
-	int (*parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*parse_monolithic)(struct fs_context *, void *);
-	int (*get_tree)(struct fs_context *);
-	int (*reconfigure)(struct fs_context *);
-};
-
-struct fs_parse_result {
-	bool negated;
-	union {
-		bool boolean;
-		int int_32;
-		unsigned int uint_32;
-		u64 uint_64;
-	};
-};
-
-struct trace_event_raw_initcall_level {
-	struct trace_entry ent;
-	u32 __data_loc_level;
-	char __data[0];
-};
-
-struct trace_event_raw_initcall_start {
-	struct trace_entry ent;
-	initcall_t func;
-	char __data[0];
-};
-
-struct trace_event_raw_initcall_finish {
-	struct trace_entry ent;
-	initcall_t func;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_initcall_level {
-	u32 level;
-};
-
-struct trace_event_data_offsets_initcall_start {};
-
-struct trace_event_data_offsets_initcall_finish {};
-
-typedef void (*btf_trace_initcall_level)(void *, const char *);
-
-typedef void (*btf_trace_initcall_start)(void *, initcall_t);
-
-typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
-
-struct blacklist_entry {
-	struct list_head next;
-	char *buf;
-};
-
-typedef __u32 Elf32_Word;
-
-struct elf32_note {
-	Elf32_Word n_namesz;
-	Elf32_Word n_descsz;
-	Elf32_Word n_type;
-};
-
-enum pcpu_fc {
-	PCPU_FC_AUTO = 0,
-	PCPU_FC_EMBED = 1,
-	PCPU_FC_PAGE = 2,
-	PCPU_FC_NR = 3,
-};
-
-enum {
-	UNAME26 = 131072,
-	ADDR_NO_RANDOMIZE = 262144,
-	FDPIC_FUNCPTRS = 524288,
-	MMAP_PAGE_ZERO = 1048576,
-	ADDR_COMPAT_LAYOUT = 2097152,
-	READ_IMPLIES_EXEC = 4194304,
-	ADDR_LIMIT_32BIT = 8388608,
-	SHORT_INODE = 16777216,
-	WHOLE_SECONDS = 33554432,
-	STICKY_TIMEOUTS = 67108864,
-	ADDR_LIMIT_3GB = 134217728,
-};
-
-enum hrtimer_base_type {
-	HRTIMER_BASE_MONOTONIC = 0,
-	HRTIMER_BASE_REALTIME = 1,
-	HRTIMER_BASE_BOOTTIME = 2,
-	HRTIMER_BASE_TAI = 3,
-	HRTIMER_BASE_MONOTONIC_SOFT = 4,
-	HRTIMER_BASE_REALTIME_SOFT = 5,
-	HRTIMER_BASE_BOOTTIME_SOFT = 6,
-	HRTIMER_BASE_TAI_SOFT = 7,
-	HRTIMER_MAX_CLOCK_BASES = 8,
-};
-
-enum {
-	MM_FILEPAGES = 0,
-	MM_ANONPAGES = 1,
-	MM_SWAPENTS = 2,
-	MM_SHMEMPAGES = 3,
-	NR_MM_COUNTERS = 4,
-};
-
-enum rseq_cs_flags_bit {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
-};
-
-enum uclamp_id {
-	UCLAMP_MIN = 0,
-	UCLAMP_MAX = 1,
-	UCLAMP_CNT = 2,
-};
-
-enum perf_event_task_context {
-	perf_invalid_context = 4294967295,
-	perf_hw_context = 0,
-	perf_sw_context = 1,
-	perf_nr_task_contexts = 2,
-};
-
-enum rseq_event_mask_bits {
-	RSEQ_EVENT_PREEMPT_BIT = 0,
-	RSEQ_EVENT_SIGNAL_BIT = 1,
-	RSEQ_EVENT_MIGRATE_BIT = 2,
-};
-
-enum {
-	PROC_ROOT_INO = 1,
-	PROC_IPC_INIT_INO = 4026531839,
-	PROC_UTS_INIT_INO = 4026531838,
-	PROC_USER_INIT_INO = 4026531837,
-	PROC_PID_INIT_INO = 4026531836,
-	PROC_CGROUP_INIT_INO = 4026531835,
-	PROC_TIME_INIT_INO = 4026531834,
-};
-
-typedef short int __s16;
-
-typedef __s16 s16;
-
-typedef __u16 __le16;
-
-typedef __u16 __be16;
-
-typedef __u32 __be32;
-
-typedef __u64 __be64;
-
-typedef __u32 __wsum;
-
-typedef unsigned int slab_flags_t;
-
-struct llist_head {
-	struct llist_node *first;
-};
-
-struct rhash_head {
-	struct rhash_head *next;
-};
-
-struct rhashtable;
-
-struct rhashtable_compare_arg {
-	struct rhashtable *ht;
-	const void *key;
-};
-
-typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
-
-typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
-
-typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
-
-struct rhashtable_params {
-	u16 nelem_hint;
-	u16 key_len;
-	u16 key_offset;
-	u16 head_offset;
-	unsigned int max_size;
-	u16 min_size;
-	bool automatic_shrinking;
-	rht_hashfn_t hashfn;
-	rht_obj_hashfn_t obj_hashfn;
-	rht_obj_cmpfn_t obj_cmpfn;
-};
-
-struct bucket_table;
-
-struct rhashtable {
-	struct bucket_table *tbl;
-	unsigned int key_len;
-	unsigned int max_elems;
-	struct rhashtable_params p;
-	bool rhlist;
-	struct work_struct run_work;
-	struct mutex mutex;
-	spinlock_t lock;
-	atomic_t nelems;
-};
-
-struct fs_struct {
-	int users;
-	spinlock_t lock;
-	seqcount_spinlock_t seq;
-	int umask;
-	int in_exec;
-	struct path root;
-	struct path pwd;
-};
-
-struct pipe_buffer;
-
-struct watch_queue;
-
-struct pipe_inode_info {
-	struct mutex mutex;
-	wait_queue_head_t rd_wait;
-	wait_queue_head_t wr_wait;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int max_usage;
-	unsigned int ring_size;
-	bool note_loss;
-	unsigned int nr_accounted;
-	unsigned int readers;
-	unsigned int writers;
-	unsigned int files;
-	unsigned int r_counter;
-	unsigned int w_counter;
-	struct page *tmp_page;
-	struct fasync_struct *fasync_readers;
-	struct fasync_struct *fasync_writers;
-	struct pipe_buffer *bufs;
-	struct user_struct *user;
-	struct watch_queue *watch_queue;
-};
-
-struct notifier_block;
-
-typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
-
-struct notifier_block {
-	notifier_fn_t notifier_call;
-	struct notifier_block *next;
-	int priority;
-};
-
-struct blocking_notifier_head {
-	struct rw_semaphore rwsem;
-	struct notifier_block *head;
-};
-
-struct raw_notifier_head {
-	struct notifier_block *head;
-};
-
-struct vfsmount {
-	struct dentry *mnt_root;
-	struct super_block *mnt_sb;
-	int mnt_flags;
-};
-
-struct ld_semaphore {
-	atomic_long_t count;
-	raw_spinlock_t wait_lock;
-	unsigned int wait_readers;
-	struct list_head read_wait;
-	struct list_head write_wait;
-};
-
-typedef unsigned int tcflag_t;
-
-typedef unsigned char cc_t;
-
-typedef unsigned int speed_t;
-
-struct ktermios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct winsize {
-	short unsigned int ws_row;
-	short unsigned int ws_col;
-	short unsigned int ws_xpixel;
-	short unsigned int ws_ypixel;
-};
-
-struct tty_driver;
-
-struct tty_operations;
-
-struct tty_ldisc;
-
-struct termiox;
-
-struct tty_port;
-
-struct tty_struct {
-	int magic;
-	struct kref kref;
-	struct device *dev;
-	struct tty_driver *driver;
-	const struct tty_operations *ops;
-	int index;
-	struct ld_semaphore ldisc_sem;
-	struct tty_ldisc *ldisc;
-	struct mutex atomic_write_lock;
-	struct mutex legacy_mutex;
-	struct mutex throttle_mutex;
-	struct rw_semaphore termios_rwsem;
-	struct mutex winsize_mutex;
-	spinlock_t ctrl_lock;
-	spinlock_t flow_lock;
-	struct ktermios termios;
-	struct ktermios termios_locked;
-	struct termiox *termiox;
-	char name[64];
-	struct pid *pgrp;
-	struct pid *session;
-	long unsigned int flags;
-	int count;
-	struct winsize winsize;
-	long unsigned int stopped: 1;
-	long unsigned int flow_stopped: 1;
-	int: 30;
-	long unsigned int unused: 62;
-	int hw_stopped;
-	long unsigned int ctrl_status: 8;
-	long unsigned int packet: 1;
-	int: 23;
-	long unsigned int unused_ctrl: 55;
-	unsigned int receive_room;
-	int flow_change;
-	struct tty_struct *link;
-	struct fasync_struct *fasync;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t read_wait;
-	struct work_struct hangup_work;
-	void *disc_data;
-	void *driver_data;
-	spinlock_t files_lock;
-	struct list_head tty_files;
-	int closing;
-	unsigned char *write_buf;
-	int write_cnt;
-	struct work_struct SAK_work;
-	struct tty_port *port;
-};
-
-typedef struct {
-	size_t written;
-	size_t count;
-	union {
-		char *buf;
-		void *data;
-	} arg;
-	int error;
-} read_descriptor_t;
-
-struct posix_acl_entry {
-	short int e_tag;
-	short unsigned int e_perm;
-	union {
-		kuid_t e_uid;
-		kgid_t e_gid;
-	};
-};
-
-struct posix_acl {
-	refcount_t a_refcount;
-	struct callback_head a_rcu;
-	unsigned int a_count;
-	struct posix_acl_entry a_entries[0];
-};
-
-typedef __u64 __addrpair;
-
-typedef __u32 __portpair;
-
-typedef struct {
-	struct net *net;
-} possible_net_t;
-
-struct in6_addr {
-	union {
-		__u8 u6_addr8[16];
-		__be16 u6_addr16[8];
-		__be32 u6_addr32[4];
-	} in6_u;
-};
-
-struct hlist_nulls_node {
-	struct hlist_nulls_node *next;
-	struct hlist_nulls_node **pprev;
-};
-
-struct proto;
-
-struct inet_timewait_death_row;
-
-struct sock_common {
-	union {
-		__addrpair skc_addrpair;
-		struct {
-			__be32 skc_daddr;
-			__be32 skc_rcv_saddr;
-		};
-	};
-	union {
-		unsigned int skc_hash;
-		__u16 skc_u16hashes[2];
-	};
-	union {
-		__portpair skc_portpair;
-		struct {
-			__be16 skc_dport;
-			__u16 skc_num;
-		};
-	};
-	short unsigned int skc_family;
-	volatile unsigned char skc_state;
-	unsigned char skc_reuse: 4;
-	unsigned char skc_reuseport: 1;
-	unsigned char skc_ipv6only: 1;
-	unsigned char skc_net_refcnt: 1;
-	int skc_bound_dev_if;
-	union {
-		struct hlist_node skc_bind_node;
-		struct hlist_node skc_portaddr_node;
-	};
-	struct proto *skc_prot;
-	possible_net_t skc_net;
-	struct in6_addr skc_v6_daddr;
-	struct in6_addr skc_v6_rcv_saddr;
-	atomic64_t skc_cookie;
-	union {
-		long unsigned int skc_flags;
-		struct sock *skc_listener;
-		struct inet_timewait_death_row *skc_tw_dr;
-	};
-	int skc_dontcopy_begin[0];
-	union {
-		struct hlist_node skc_node;
-		struct hlist_nulls_node skc_nulls_node;
-	};
-	short unsigned int skc_tx_queue_mapping;
-	short unsigned int skc_rx_queue_mapping;
-	union {
-		int skc_incoming_cpu;
-		u32 skc_rcv_wnd;
-		u32 skc_tw_rcv_nxt;
-	};
-	refcount_t skc_refcnt;
-	int skc_dontcopy_end[0];
-	union {
-		u32 skc_rxhash;
-		u32 skc_window_clamp;
-		u32 skc_tw_snd_nxt;
-	};
-};
-
-typedef struct {
-	spinlock_t slock;
-	int owned;
-	wait_queue_head_t wq;
-} socket_lock_t;
-
-struct sk_buff;
-
-struct sk_buff_head {
-	struct sk_buff *next;
-	struct sk_buff *prev;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-typedef u64 netdev_features_t;
-
-struct sock_cgroup_data {
-	union {
-		struct {
-			u8 is_data: 1;
-			u8 no_refcnt: 1;
-			u8 unused: 6;
-			u8 padding;
-			u16 prioidx;
-			u32 classid;
-		};
-		u64 val;
-	};
-};
-
-struct sk_filter;
-
-struct socket_wq;
-
-struct xfrm_policy;
-
-struct dst_entry;
-
-struct socket;
-
-struct net_device;
-
-struct sock_reuseport;
-
-struct bpf_local_storage;
-
-struct sock {
-	struct sock_common __sk_common;
-	socket_lock_t sk_lock;
-	atomic_t sk_drops;
-	int sk_rcvlowat;
-	struct sk_buff_head sk_error_queue;
-	struct sk_buff *sk_rx_skb_cache;
-	struct sk_buff_head sk_receive_queue;
-	struct {
-		atomic_t rmem_alloc;
-		int len;
-		struct sk_buff *head;
-		struct sk_buff *tail;
-	} sk_backlog;
-	int sk_forward_alloc;
-	unsigned int sk_ll_usec;
-	unsigned int sk_napi_id;
-	int sk_rcvbuf;
-	struct sk_filter *sk_filter;
-	union {
-		struct socket_wq *sk_wq;
-		struct socket_wq *sk_wq_raw;
-	};
-	struct xfrm_policy *sk_policy[2];
-	struct dst_entry *sk_rx_dst;
-	struct dst_entry *sk_dst_cache;
-	atomic_t sk_omem_alloc;
-	int sk_sndbuf;
-	int sk_wmem_queued;
-	refcount_t sk_wmem_alloc;
-	long unsigned int sk_tsq_flags;
-	union {
-		struct sk_buff *sk_send_head;
-		struct rb_root tcp_rtx_queue;
-	};
-	struct sk_buff *sk_tx_skb_cache;
-	struct sk_buff_head sk_write_queue;
-	__s32 sk_peek_off;
-	int sk_write_pending;
-	__u32 sk_dst_pending_confirm;
-	u32 sk_pacing_status;
-	long int sk_sndtimeo;
-	struct timer_list sk_timer;
-	__u32 sk_priority;
-	__u32 sk_mark;
-	long unsigned int sk_pacing_rate;
-	long unsigned int sk_max_pacing_rate;
-	struct page_frag sk_frag;
-	netdev_features_t sk_route_caps;
-	netdev_features_t sk_route_nocaps;
-	netdev_features_t sk_route_forced_caps;
-	int sk_gso_type;
-	unsigned int sk_gso_max_size;
-	gfp_t sk_allocation;
-	__u32 sk_txhash;
-	u8 sk_padding: 1;
-	u8 sk_kern_sock: 1;
-	u8 sk_no_check_tx: 1;
-	u8 sk_no_check_rx: 1;
-	u8 sk_userlocks: 4;
-	u8 sk_pacing_shift;
-	u16 sk_type;
-	u16 sk_protocol;
-	u16 sk_gso_max_segs;
-	long unsigned int sk_lingertime;
-	struct proto *sk_prot_creator;
-	rwlock_t sk_callback_lock;
-	int sk_err;
-	int sk_err_soft;
-	u32 sk_ack_backlog;
-	u32 sk_max_ack_backlog;
-	kuid_t sk_uid;
-	struct pid *sk_peer_pid;
-	const struct cred *sk_peer_cred;
-	long int sk_rcvtimeo;
-	ktime_t sk_stamp;
-	u16 sk_tsflags;
-	u8 sk_shutdown;
-	u32 sk_tskey;
-	atomic_t sk_zckey;
-	u8 sk_clockid;
-	u8 sk_txtime_deadline_mode: 1;
-	u8 sk_txtime_report_errors: 1;
-	u8 sk_txtime_unused: 6;
-	struct socket *sk_socket;
-	void *sk_user_data;
-	void *sk_security;
-	struct sock_cgroup_data sk_cgrp_data;
-	struct mem_cgroup *sk_memcg;
-	void (*sk_state_change)(struct sock *);
-	void (*sk_data_ready)(struct sock *);
-	void (*sk_write_space)(struct sock *);
-	void (*sk_error_report)(struct sock *);
-	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
-	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
-	void (*sk_destruct)(struct sock *);
-	struct sock_reuseport *sk_reuseport_cb;
-	struct bpf_local_storage *sk_bpf_storage;
-	struct callback_head sk_rcu;
-};
-
-typedef short unsigned int __kernel_sa_family_t;
-
-typedef __kernel_sa_family_t sa_family_t;
-
-struct sockaddr {
-	sa_family_t sa_family;
-	char sa_data[14];
-};
-
-struct msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iov_iter msg_iter;
-	union {
-		void *msg_control;
-		void *msg_control_user;
-	};
-	bool msg_control_is_user: 1;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-	struct kiocb *msg_iocb;
-};
-
-typedef struct {
-	unsigned int clock_rate;
-	unsigned int clock_type;
-	short unsigned int loopback;
-} sync_serial_settings;
-
-typedef struct {
-	unsigned int clock_rate;
-	unsigned int clock_type;
-	short unsigned int loopback;
-	unsigned int slot_map;
-} te1_settings;
-
-typedef struct {
-	short unsigned int encoding;
-	short unsigned int parity;
-} raw_hdlc_proto;
-
-typedef struct {
-	unsigned int t391;
-	unsigned int t392;
-	unsigned int n391;
-	unsigned int n392;
-	unsigned int n393;
-	short unsigned int lmi;
-	short unsigned int dce;
-} fr_proto;
-
-typedef struct {
-	unsigned int dlci;
-} fr_proto_pvc;
-
-typedef struct {
-	unsigned int dlci;
-	char master[16];
-} fr_proto_pvc_info;
-
-typedef struct {
-	unsigned int interval;
-	unsigned int timeout;
-} cisco_proto;
-
-typedef struct {
-	short unsigned int dce;
-	unsigned int modulo;
-	unsigned int window;
-	unsigned int t1;
-	unsigned int t2;
-	unsigned int n2;
-} x25_hdlc_proto;
-
-struct ifmap {
-	long unsigned int mem_start;
-	long unsigned int mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
-};
-
-struct if_settings {
-	unsigned int type;
-	unsigned int size;
-	union {
-		raw_hdlc_proto *raw_hdlc;
-		cisco_proto *cisco;
-		fr_proto *fr;
-		fr_proto_pvc *fr_pvc;
-		fr_proto_pvc_info *fr_pvc_info;
-		x25_hdlc_proto *x25;
-		sync_serial_settings *sync;
-		te1_settings *te1;
-	} ifs_ifsu;
-};
-
-struct ifreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union {
-		struct sockaddr ifru_addr;
-		struct sockaddr ifru_dstaddr;
-		struct sockaddr ifru_broadaddr;
-		struct sockaddr ifru_netmask;
-		struct sockaddr ifru_hwaddr;
-		short int ifru_flags;
-		int ifru_ivalue;
-		int ifru_mtu;
-		struct ifmap ifru_map;
-		char ifru_slave[16];
-		char ifru_newname[16];
-		void *ifru_data;
-		struct if_settings ifru_settings;
-	} ifr_ifru;
-};
-
-struct termiox {
-	__u16 x_hflag;
-	__u16 x_cflag;
-	__u16 x_rflag[5];
-	__u16 x_sflag;
-};
-
-struct serial_icounter_struct;
-
-struct serial_struct;
-
-struct tty_operations {
-	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
-	int (*install)(struct tty_driver *, struct tty_struct *);
-	void (*remove)(struct tty_driver *, struct tty_struct *);
-	int (*open)(struct tty_struct *, struct file *);
-	void (*close)(struct tty_struct *, struct file *);
-	void (*shutdown)(struct tty_struct *);
-	void (*cleanup)(struct tty_struct *);
-	int (*write)(struct tty_struct *, const unsigned char *, int);
-	int (*put_char)(struct tty_struct *, unsigned char);
-	void (*flush_chars)(struct tty_struct *);
-	int (*write_room)(struct tty_struct *);
-	int (*chars_in_buffer)(struct tty_struct *);
-	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	void (*throttle)(struct tty_struct *);
-	void (*unthrottle)(struct tty_struct *);
-	void (*stop)(struct tty_struct *);
-	void (*start)(struct tty_struct *);
-	void (*hangup)(struct tty_struct *);
-	int (*break_ctl)(struct tty_struct *, int);
-	void (*flush_buffer)(struct tty_struct *);
-	void (*set_ldisc)(struct tty_struct *);
-	void (*wait_until_sent)(struct tty_struct *, int);
-	void (*send_xchar)(struct tty_struct *, char);
-	int (*tiocmget)(struct tty_struct *);
-	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
-	int (*resize)(struct tty_struct *, struct winsize *);
-	int (*set_termiox)(struct tty_struct *, struct termiox *);
-	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
-	int (*get_serial)(struct tty_struct *, struct serial_struct *);
-	int (*set_serial)(struct tty_struct *, struct serial_struct *);
-	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
-	int (*poll_init)(struct tty_driver *, int, char *);
-	int (*poll_get_char)(struct tty_driver *, int);
-	void (*poll_put_char)(struct tty_driver *, int, char);
-	int (*proc_show)(struct seq_file *, void *);
-};
-
-struct proc_dir_entry;
-
-struct tty_driver {
-	int magic;
-	struct kref kref;
-	struct cdev **cdevs;
-	struct module *owner;
-	const char *driver_name;
-	const char *name;
-	int name_base;
-	int major;
-	int minor_start;
-	unsigned int num;
-	short int type;
-	short int subtype;
-	struct ktermios init_termios;
-	long unsigned int flags;
-	struct proc_dir_entry *proc_entry;
-	struct tty_driver *other;
-	struct tty_struct **ttys;
-	struct tty_port **ports;
-	struct ktermios **termios;
-	void *driver_state;
-	const struct tty_operations *ops;
-	struct list_head tty_drivers;
-};
-
-struct tty_buffer {
-	union {
-		struct tty_buffer *next;
-		struct llist_node free;
-	};
-	int used;
-	int size;
-	int commit;
-	int read;
-	int flags;
-	long unsigned int data[0];
-};
-
-struct tty_bufhead {
-	struct tty_buffer *head;
-	struct work_struct work;
-	struct mutex lock;
-	atomic_t priority;
-	struct tty_buffer sentinel;
-	struct llist_head free;
-	atomic_t mem_used;
-	int mem_limit;
-	struct tty_buffer *tail;
-};
-
-struct tty_port_operations;
-
-struct tty_port_client_operations;
-
-struct tty_port {
-	struct tty_bufhead buf;
-	struct tty_struct *tty;
-	struct tty_struct *itty;
-	const struct tty_port_operations *ops;
-	const struct tty_port_client_operations *client_ops;
-	spinlock_t lock;
-	int blocked_open;
-	int count;
-	wait_queue_head_t open_wait;
-	wait_queue_head_t delta_msr_wait;
-	long unsigned int flags;
-	long unsigned int iflags;
-	unsigned char console: 1;
-	unsigned char low_latency: 1;
-	struct mutex mutex;
-	struct mutex buf_mutex;
-	unsigned char *xmit_buf;
-	unsigned int close_delay;
-	unsigned int closing_wait;
-	int drain_delay;
-	struct kref kref;
-	void *client_data;
-};
-
-struct tty_ldisc_ops {
-	int magic;
-	char *name;
-	int num;
-	int flags;
-	int (*open)(struct tty_struct *);
-	void (*close)(struct tty_struct *);
-	void (*flush_buffer)(struct tty_struct *);
-	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t);
-	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
-	int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
-	int (*hangup)(struct tty_struct *);
-	void (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);
-	void (*write_wakeup)(struct tty_struct *);
-	void (*dcd_change)(struct tty_struct *, unsigned int);
-	int (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);
-	struct module *owner;
-	int refcount;
-};
-
-struct tty_ldisc {
-	struct tty_ldisc_ops *ops;
-	struct tty_struct *tty;
-};
-
-struct tty_port_operations {
-	int (*carrier_raised)(struct tty_port *);
-	void (*dtr_rts)(struct tty_port *, int);
-	void (*shutdown)(struct tty_port *);
-	int (*activate)(struct tty_port *, struct tty_struct *);
-	void (*destruct)(struct tty_port *);
-};
-
-struct tty_port_client_operations {
-	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct tty_port *);
-};
-
-struct prot_inuse;
-
-struct netns_core {
-	struct ctl_table_header *sysctl_hdr;
-	int sysctl_somaxconn;
-	int *sock_inuse;
-	struct prot_inuse *prot_inuse;
-};
-
-struct tcp_mib;
-
-struct ipstats_mib;
-
-struct linux_mib;
-
-struct udp_mib;
-
-struct icmp_mib;
-
-struct icmpmsg_mib;
-
-struct icmpv6_mib;
-
-struct icmpv6msg_mib;
-
-struct linux_tls_mib;
-
-struct mptcp_mib;
-
-struct netns_mib {
-	struct tcp_mib *tcp_statistics;
-	struct ipstats_mib *ip_statistics;
-	struct linux_mib *net_statistics;
-	struct udp_mib *udp_statistics;
-	struct udp_mib *udplite_statistics;
-	struct icmp_mib *icmp_statistics;
-	struct icmpmsg_mib *icmpmsg_statistics;
-	struct proc_dir_entry *proc_net_devsnmp6;
-	struct udp_mib *udp_stats_in6;
-	struct udp_mib *udplite_stats_in6;
-	struct ipstats_mib *ipv6_statistics;
-	struct icmpv6_mib *icmpv6_statistics;
-	struct icmpv6msg_mib *icmpv6msg_statistics;
-	struct linux_tls_mib *tls_statistics;
-	struct mptcp_mib *mptcp_statistics;
-};
-
-struct netns_packet {
-	struct mutex sklist_lock;
-	struct hlist_head sklist;
-};
-
-struct netns_unix {
-	int sysctl_max_dgram_qlen;
-	struct ctl_table_header *ctl;
-};
-
-struct netns_nexthop {
-	struct rb_root rb_root;
-	struct hlist_head *devhash;
-	unsigned int seq;
-	u32 last_id_allocated;
-	struct blocking_notifier_head notifier_chain;
-};
-
-struct local_ports {
-	seqlock_t lock;
-	int range[2];
-	bool warned;
-};
-
-struct inet_hashinfo;
-
-struct inet_timewait_death_row {
-	atomic_t tw_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_hashinfo *hashinfo;
-	int sysctl_max_tw_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ping_group_range {
-	seqlock_t lock;
-	kgid_t range[2];
-};
-
-typedef struct {
-	u64 key[2];
-} siphash_key_t;
-
-struct ipv4_devconf;
-
-struct ip_ra_chain;
-
-struct fib_rules_ops;
-
-struct fib_table;
-
-struct inet_peer_base;
-
-struct fqdir;
-
-struct xt_table;
-
-struct tcp_congestion_ops;
-
-struct tcp_fastopen_context;
-
-struct fib_notifier_ops;
-
-struct netns_ipv4 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	int fib_num_tclassid_users;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_autobind_reuse;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_raw_l3mdev_accept;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_nexthop_compat_mode;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_l3mdev_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_no_ssthresh_metrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	long unsigned int sysctl_tcp_comp_sack_slack_ns;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_tcp_reflect_tos;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_udp_l3mdev_accept;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct list_head mr_tables;
-	struct fib_rules_ops *mr_rules_ops;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_sysctl_ipv6 {
-	struct ctl_table_header *hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *icmp_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *xfrm6_hdr;
-	int bindv6only;
-	int flush_delay;
-	int ip6_rt_max_size;
-	int ip6_rt_gc_min_interval;
-	int ip6_rt_gc_timeout;
-	int ip6_rt_gc_interval;
-	int ip6_rt_gc_elasticity;
-	int ip6_rt_mtu_expires;
-	int ip6_rt_min_advmss;
-	int multipath_hash_policy;
-	int flowlabel_consistency;
-	int auto_flowlabels;
-	int icmpv6_time;
-	int icmpv6_echo_ignore_all;
-	int icmpv6_echo_ignore_multicast;
-	int icmpv6_echo_ignore_anycast;
-	long unsigned int icmpv6_ratemask[4];
-	long unsigned int *icmpv6_ratemask_ptr;
-	int anycast_src_echo_reply;
-	int ip_nonlocal_bind;
-	int fwmark_reflect;
-	int idgen_retries;
-	int idgen_delay;
-	int flowlabel_state_ranges;
-	int flowlabel_reflect;
-	int max_dst_opts_cnt;
-	int max_hbh_opts_cnt;
-	int max_dst_opts_len;
-	int max_hbh_opts_len;
-	int seg6_flowlabel;
-	bool skip_notify_on_dev_down;
-};
-
-struct neighbour;
-
-struct dst_ops {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
-	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ipv6_devconf;
-
-struct fib6_info;
-
-struct rt6_info;
-
-struct rt6_statistics;
-
-struct fib6_table;
-
-struct seg6_pernet_data;
-
-struct netns_ipv6 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	unsigned int fib6_routes_require_src;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct list_head mr6_tables;
-	struct fib_rules_ops *mr6_rules_ops;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
-	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-};
-
-struct netns_sysctl_lowpan {
-	struct ctl_table_header *frags_hdr;
-};
-
-struct netns_ieee802154_lowpan {
-	struct netns_sysctl_lowpan sysctl;
-	struct fqdir *fqdir;
-};
-
-struct sctp_mib;
-
-struct netns_sctp {
-	struct sctp_mib *sctp_statistics;
-	struct proc_dir_entry *proc_net_sctp;
-	struct ctl_table_header *sysctl_header;
-	struct sock *ctl_sock;
-	struct list_head local_addr_list;
-	struct list_head addr_waitq;
-	struct timer_list addr_wq_timer;
-	struct list_head auto_asconf_splist;
-	spinlock_t addr_wq_lock;
-	spinlock_t local_addr_lock;
-	unsigned int rto_initial;
-	unsigned int rto_min;
-	unsigned int rto_max;
-	int rto_alpha;
-	int rto_beta;
-	int max_burst;
-	int cookie_preserve_enable;
-	char *sctp_hmac_alg;
-	unsigned int valid_cookie_life;
-	unsigned int sack_timeout;
-	unsigned int hb_interval;
-	int max_retrans_association;
-	int max_retrans_path;
-	int max_retrans_init;
-	int pf_retrans;
-	int ps_retrans;
-	int pf_enable;
-	int pf_expose;
-	int sndbuf_policy;
-	int rcvbuf_policy;
-	int default_auto_asconf;
-	int addip_enable;
-	int addip_noauth;
-	int prsctp_enable;
-	int reconf_enable;
-	int auth_enable;
-	int intl_enable;
-	int ecn_enable;
-	int scope_policy;
-	int rwnd_upd_shift;
-	long unsigned int max_autoclose;
-};
-
-struct netns_dccp {
-	struct sock *v4_ctl_sk;
-	struct sock *v6_ctl_sk;
-};
-
-struct nf_queue_handler;
-
-struct nf_logger;
-
-struct nf_hook_entries;
-
-struct netns_nf {
-	struct proc_dir_entry *proc_netfilter;
-	const struct nf_queue_handler *queue_handler;
-	const struct nf_logger *nf_loggers[13];
-	struct ctl_table_header *nf_log_dir_header;
-	struct nf_hook_entries *hooks_ipv4[5];
-	struct nf_hook_entries *hooks_ipv6[5];
-	struct nf_hook_entries *hooks_arp[3];
-	struct nf_hook_entries *hooks_bridge[5];
-	struct nf_hook_entries *hooks_decnet[7];
-	bool defrag_ipv4;
-	bool defrag_ipv6;
-};
-
-struct ebt_table;
-
-struct netns_xt {
-	struct list_head tables[13];
-	bool notrack_deprecated_warning;
-	bool clusterip_deprecated_warning;
-	struct ebt_table *broute_table;
-	struct ebt_table *frame_filter;
-	struct ebt_table *frame_nat;
-};
-
-struct nf_generic_net {
-	unsigned int timeout;
-};
-
-struct nf_tcp_net {
-	unsigned int timeouts[14];
-	int tcp_loose;
-	int tcp_be_liberal;
-	int tcp_max_retrans;
-};
-
-struct nf_udp_net {
-	unsigned int timeouts[2];
-};
-
-struct nf_icmp_net {
-	unsigned int timeout;
-};
-
-struct nf_dccp_net {
-	int dccp_loose;
-	unsigned int dccp_timeout[10];
-};
-
-struct nf_sctp_net {
-	unsigned int timeouts[10];
-};
-
-struct nf_gre_net {
-	struct list_head keymap_list;
-	unsigned int timeouts[2];
-};
-
-struct nf_ip_net {
-	struct nf_generic_net generic;
-	struct nf_tcp_net tcp;
-	struct nf_udp_net udp;
-	struct nf_icmp_net icmp;
-	struct nf_icmp_net icmpv6;
-	struct nf_dccp_net dccp;
-	struct nf_sctp_net sctp;
-	struct nf_gre_net gre;
-};
-
-struct ct_pcpu;
-
-struct ip_conntrack_stat;
-
-struct nf_ct_event_notifier;
-
-struct nf_exp_event_notifier;
-
-struct netns_ct {
-	atomic_t count;
-	unsigned int expect_count;
-	struct delayed_work ecache_dwork;
-	bool ecache_dwork_pending;
-	bool auto_assign_helper_warned;
-	struct ctl_table_header *sysctl_header;
-	unsigned int sysctl_log_invalid;
-	int sysctl_events;
-	int sysctl_acct;
-	int sysctl_auto_assign_helper;
-	int sysctl_tstamp;
-	int sysctl_checksum;
-	struct ct_pcpu *pcpu_lists;
-	struct ip_conntrack_stat *stat;
-	struct nf_ct_event_notifier *nf_conntrack_event_cb;
-	struct nf_exp_event_notifier *nf_expect_event_cb;
-	struct nf_ip_net nf_ct_proto;
-	unsigned int labels_used;
-};
-
-struct netns_nftables {
-	struct list_head tables;
-	struct list_head commit_list;
-	struct list_head module_list;
-	struct list_head notify_list;
-	struct mutex commit_mutex;
-	unsigned int base_seq;
-	u8 gencursor;
-	u8 validate_state;
-};
-
-struct netns_nf_frag {
-	struct fqdir *fqdir;
-};
-
-struct netns_bpf {
-	struct bpf_prog_array *run_array[2];
-	struct bpf_prog *progs[2];
-	struct list_head links[2];
-};
-
-struct xfrm_policy_hash {
-	struct hlist_head *table;
-	unsigned int hmask;
-	u8 dbits4;
-	u8 sbits4;
-	u8 dbits6;
-	u8 sbits6;
-};
-
-struct xfrm_policy_hthresh {
-	struct work_struct work;
-	seqlock_t lock;
-	u8 lbits4;
-	u8 rbits4;
-	u8 lbits6;
-	u8 rbits6;
-};
-
-struct netns_xfrm {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops xfrm4_dst_ops;
-	struct dst_ops xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_ipvs;
-
-struct mpls_route;
-
-struct netns_mpls {
-	int ip_ttl_propagate;
-	int default_ttl;
-	size_t platform_labels;
-	struct mpls_route **platform_label;
-	struct ctl_table_header *ctl;
-};
-
-struct can_dev_rcv_lists;
-
-struct can_pkg_stats;
-
-struct can_rcv_lists_stats;
-
-struct netns_can {
-	struct proc_dir_entry *proc_dir;
-	struct proc_dir_entry *pde_stats;
-	struct proc_dir_entry *pde_reset_stats;
-	struct proc_dir_entry *pde_rcvlist_all;
-	struct proc_dir_entry *pde_rcvlist_fil;
-	struct proc_dir_entry *pde_rcvlist_inv;
-	struct proc_dir_entry *pde_rcvlist_sff;
-	struct proc_dir_entry *pde_rcvlist_eff;
-	struct proc_dir_entry *pde_rcvlist_err;
-	struct proc_dir_entry *bcmproc_dir;
-	struct can_dev_rcv_lists *rx_alldev_list;
-	spinlock_t rcvlists_lock;
-	struct timer_list stattimer;
-	struct can_pkg_stats *pkg_stats;
-	struct can_rcv_lists_stats *rcv_lists_stats;
-	struct hlist_head cgw_list;
-};
-
-struct netns_xdp {
-	struct mutex lock;
-	struct hlist_head list;
-};
-
-struct uevent_sock;
-
-struct net_generic;
-
-struct net {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct idr netns_ids;
-	struct ns_common ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4 ipv4;
-	struct netns_ipv6 ipv6;
-	struct netns_ieee802154_lowpan ieee802154_lowpan;
-	struct netns_sctp sctp;
-	struct netns_dccp dccp;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nftables nft;
-	struct netns_nf_frag nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct list_head nfnl_acct_list;
-	struct list_head nfct_timeout_list;
-	struct sk_buff_head wext_nlevents;
-	struct net_generic *gen;
-	struct netns_bpf bpf;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm xfrm;
-	atomic64_t net_cookie;
-	struct netns_ipvs *ipvs;
-	struct netns_mpls mpls;
-	struct netns_can can;
-	struct netns_xdp xdp;
-	struct sock *crypto_nlsk;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	local64_t v;
-} u64_stats_t;
-
-struct bpf_insn {
-	__u8 code;
-	__u8 dst_reg: 4;
-	__u8 src_reg: 4;
-	__s16 off;
-	__s32 imm;
-};
-
-enum bpf_map_type {
-	BPF_MAP_TYPE_UNSPEC = 0,
-	BPF_MAP_TYPE_HASH = 1,
-	BPF_MAP_TYPE_ARRAY = 2,
-	BPF_MAP_TYPE_PROG_ARRAY = 3,
-	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
-	BPF_MAP_TYPE_PERCPU_HASH = 5,
-	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
-	BPF_MAP_TYPE_STACK_TRACE = 7,
-	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
-	BPF_MAP_TYPE_LRU_HASH = 9,
-	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
-	BPF_MAP_TYPE_LPM_TRIE = 11,
-	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
-	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
-	BPF_MAP_TYPE_DEVMAP = 14,
-	BPF_MAP_TYPE_SOCKMAP = 15,
-	BPF_MAP_TYPE_CPUMAP = 16,
-	BPF_MAP_TYPE_XSKMAP = 17,
-	BPF_MAP_TYPE_SOCKHASH = 18,
-	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
-	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
-	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
-	BPF_MAP_TYPE_QUEUE = 22,
-	BPF_MAP_TYPE_STACK = 23,
-	BPF_MAP_TYPE_SK_STORAGE = 24,
-	BPF_MAP_TYPE_DEVMAP_HASH = 25,
-	BPF_MAP_TYPE_STRUCT_OPS = 26,
-	BPF_MAP_TYPE_RINGBUF = 27,
-	BPF_MAP_TYPE_INODE_STORAGE = 28,
-};
-
-enum bpf_prog_type {
-	BPF_PROG_TYPE_UNSPEC = 0,
-	BPF_PROG_TYPE_SOCKET_FILTER = 1,
-	BPF_PROG_TYPE_KPROBE = 2,
-	BPF_PROG_TYPE_SCHED_CLS = 3,
-	BPF_PROG_TYPE_SCHED_ACT = 4,
-	BPF_PROG_TYPE_TRACEPOINT = 5,
-	BPF_PROG_TYPE_XDP = 6,
-	BPF_PROG_TYPE_PERF_EVENT = 7,
-	BPF_PROG_TYPE_CGROUP_SKB = 8,
-	BPF_PROG_TYPE_CGROUP_SOCK = 9,
-	BPF_PROG_TYPE_LWT_IN = 10,
-	BPF_PROG_TYPE_LWT_OUT = 11,
-	BPF_PROG_TYPE_LWT_XMIT = 12,
-	BPF_PROG_TYPE_SOCK_OPS = 13,
-	BPF_PROG_TYPE_SK_SKB = 14,
-	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
-	BPF_PROG_TYPE_SK_MSG = 16,
-	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
-	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
-	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
-	BPF_PROG_TYPE_LIRC_MODE2 = 20,
-	BPF_PROG_TYPE_SK_REUSEPORT = 21,
-	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
-	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
-	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
-	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
-	BPF_PROG_TYPE_TRACING = 26,
-	BPF_PROG_TYPE_STRUCT_OPS = 27,
-	BPF_PROG_TYPE_EXT = 28,
-	BPF_PROG_TYPE_LSM = 29,
-	BPF_PROG_TYPE_SK_LOOKUP = 30,
-};
-
-enum bpf_attach_type {
-	BPF_CGROUP_INET_INGRESS = 0,
-	BPF_CGROUP_INET_EGRESS = 1,
-	BPF_CGROUP_INET_SOCK_CREATE = 2,
-	BPF_CGROUP_SOCK_OPS = 3,
-	BPF_SK_SKB_STREAM_PARSER = 4,
-	BPF_SK_SKB_STREAM_VERDICT = 5,
-	BPF_CGROUP_DEVICE = 6,
-	BPF_SK_MSG_VERDICT = 7,
-	BPF_CGROUP_INET4_BIND = 8,
-	BPF_CGROUP_INET6_BIND = 9,
-	BPF_CGROUP_INET4_CONNECT = 10,
-	BPF_CGROUP_INET6_CONNECT = 11,
-	BPF_CGROUP_INET4_POST_BIND = 12,
-	BPF_CGROUP_INET6_POST_BIND = 13,
-	BPF_CGROUP_UDP4_SENDMSG = 14,
-	BPF_CGROUP_UDP6_SENDMSG = 15,
-	BPF_LIRC_MODE2 = 16,
-	BPF_FLOW_DISSECTOR = 17,
-	BPF_CGROUP_SYSCTL = 18,
-	BPF_CGROUP_UDP4_RECVMSG = 19,
-	BPF_CGROUP_UDP6_RECVMSG = 20,
-	BPF_CGROUP_GETSOCKOPT = 21,
-	BPF_CGROUP_SETSOCKOPT = 22,
-	BPF_TRACE_RAW_TP = 23,
-	BPF_TRACE_FENTRY = 24,
-	BPF_TRACE_FEXIT = 25,
-	BPF_MODIFY_RETURN = 26,
-	BPF_LSM_MAC = 27,
-	BPF_TRACE_ITER = 28,
-	BPF_CGROUP_INET4_GETPEERNAME = 29,
-	BPF_CGROUP_INET6_GETPEERNAME = 30,
-	BPF_CGROUP_INET4_GETSOCKNAME = 31,
-	BPF_CGROUP_INET6_GETSOCKNAME = 32,
-	BPF_XDP_DEVMAP = 33,
-	BPF_CGROUP_INET_SOCK_RELEASE = 34,
-	BPF_XDP_CPUMAP = 35,
-	BPF_SK_LOOKUP = 36,
-	BPF_XDP = 37,
-	__MAX_BPF_ATTACH_TYPE = 38,
-};
-
-union bpf_attr {
-	struct {
-		__u32 map_type;
-		__u32 key_size;
-		__u32 value_size;
-		__u32 max_entries;
-		__u32 map_flags;
-		__u32 inner_map_fd;
-		__u32 numa_node;
-		char map_name[16];
-		__u32 map_ifindex;
-		__u32 btf_fd;
-		__u32 btf_key_type_id;
-		__u32 btf_value_type_id;
-		__u32 btf_vmlinux_value_type_id;
-	};
-	struct {
-		__u32 map_fd;
-		__u64 key;
-		union {
-			__u64 value;
-			__u64 next_key;
-		};
-		__u64 flags;
-	};
-	struct {
-		__u64 in_batch;
-		__u64 out_batch;
-		__u64 keys;
-		__u64 values;
-		__u32 count;
-		__u32 map_fd;
-		__u64 elem_flags;
-		__u64 flags;
-	} batch;
-	struct {
-		__u32 prog_type;
-		__u32 insn_cnt;
-		__u64 insns;
-		__u64 license;
-		__u32 log_level;
-		__u32 log_size;
-		__u64 log_buf;
-		__u32 kern_version;
-		__u32 prog_flags;
-		char prog_name[16];
-		__u32 prog_ifindex;
-		__u32 expected_attach_type;
-		__u32 prog_btf_fd;
-		__u32 func_info_rec_size;
-		__u64 func_info;
-		__u32 func_info_cnt;
-		__u32 line_info_rec_size;
-		__u64 line_info;
-		__u32 line_info_cnt;
-		__u32 attach_btf_id;
-		__u32 attach_prog_fd;
-	};
-	struct {
-		__u64 pathname;
-		__u32 bpf_fd;
-		__u32 file_flags;
-	};
-	struct {
-		__u32 target_fd;
-		__u32 attach_bpf_fd;
-		__u32 attach_type;
-		__u32 attach_flags;
-		__u32 replace_bpf_fd;
-	};
-	struct {
-		__u32 prog_fd;
-		__u32 retval;
-		__u32 data_size_in;
-		__u32 data_size_out;
-		__u64 data_in;
-		__u64 data_out;
-		__u32 repeat;
-		__u32 duration;
-		__u32 ctx_size_in;
-		__u32 ctx_size_out;
-		__u64 ctx_in;
-		__u64 ctx_out;
-		__u32 flags;
-		__u32 cpu;
-	} test;
-	struct {
-		union {
-			__u32 start_id;
-			__u32 prog_id;
-			__u32 map_id;
-			__u32 btf_id;
-			__u32 link_id;
-		};
-		__u32 next_id;
-		__u32 open_flags;
-	};
-	struct {
-		__u32 bpf_fd;
-		__u32 info_len;
-		__u64 info;
-	} info;
-	struct {
-		__u32 target_fd;
-		__u32 attach_type;
-		__u32 query_flags;
-		__u32 attach_flags;
-		__u64 prog_ids;
-		__u32 prog_cnt;
-	} query;
-	struct {
-		__u64 name;
-		__u32 prog_fd;
-	} raw_tracepoint;
-	struct {
-		__u64 btf;
-		__u64 btf_log_buf;
-		__u32 btf_size;
-		__u32 btf_log_size;
-		__u32 btf_log_level;
-	};
-	struct {
-		__u32 pid;
-		__u32 fd;
-		__u32 flags;
-		__u32 buf_len;
-		__u64 buf;
-		__u32 prog_id;
-		__u32 fd_type;
-		__u64 probe_offset;
-		__u64 probe_addr;
-	} task_fd_query;
-	struct {
-		__u32 prog_fd;
-		union {
-			__u32 target_fd;
-			__u32 target_ifindex;
-		};
-		__u32 attach_type;
-		__u32 flags;
-		union {
-			__u32 target_btf_id;
-			struct {
-				__u64 iter_info;
-				__u32 iter_info_len;
-			};
-		};
-	} link_create;
-	struct {
-		__u32 link_fd;
-		__u32 new_prog_fd;
-		__u32 flags;
-		__u32 old_prog_fd;
-	} link_update;
-	struct {
-		__u32 link_fd;
-	} link_detach;
-	struct {
-		__u32 type;
-	} enable_stats;
-	struct {
-		__u32 link_fd;
-		__u32 flags;
-	} iter_create;
-	struct {
-		__u32 prog_fd;
-		__u32 map_fd;
-		__u32 flags;
-	} prog_bind_map;
-};
-
-struct bpf_func_info {
-	__u32 insn_off;
-	__u32 type_id;
-};
-
-struct bpf_line_info {
-	__u32 insn_off;
-	__u32 file_name_off;
-	__u32 line_off;
-	__u32 line_col;
-};
-
-struct bpf_iter_aux_info;
-
-typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
-
-struct bpf_map;
-
-struct bpf_iter_aux_info {
-	struct bpf_map *map;
-};
-
-typedef void (*bpf_iter_fini_seq_priv_t)(void *);
-
-struct bpf_iter_seq_info {
-	const struct seq_operations *seq_ops;
-	bpf_iter_init_seq_priv_t init_seq_private;
-	bpf_iter_fini_seq_priv_t fini_seq_private;
-	u32 seq_priv_size;
-};
-
-struct btf;
-
-struct btf_type;
-
-struct bpf_prog_aux;
-
-struct bpf_local_storage_map;
-
-struct bpf_map_ops {
-	int (*map_alloc_check)(union bpf_attr *);
-	struct bpf_map * (*map_alloc)(union bpf_attr *);
-	void (*map_release)(struct bpf_map *, struct file *);
-	void (*map_free)(struct bpf_map *);
-	int (*map_get_next_key)(struct bpf_map *, void *, void *);
-	void (*map_release_uref)(struct bpf_map *);
-	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
-	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	void * (*map_lookup_elem)(struct bpf_map *, void *);
-	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_map *, void *);
-	int (*map_push_elem)(struct bpf_map *, void *, u64);
-	int (*map_pop_elem)(struct bpf_map *, void *);
-	int (*map_peek_elem)(struct bpf_map *, void *);
-	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
-	void (*map_fd_put_ptr)(void *);
-	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
-	u32 (*map_fd_sys_lookup_elem)(void *);
-	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
-	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
-	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
-	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
-	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
-	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
-	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
-	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
-	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
-	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
-	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
-	const char * const map_btf_name;
-	int *map_btf_id;
-	const struct bpf_iter_seq_info *iter_seq_info;
-};
-
-struct bpf_map_memory {
-	u32 pages;
-	struct user_struct *user;
-};
-
-struct bpf_map {
-	const struct bpf_map_ops *ops;
-	struct bpf_map *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	u32 btf_vmlinux_value_type_id;
-	bool bypass_spec_v1;
-	bool frozen;
-	long: 16;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_header {
-	__u16 magic;
-	__u8 version;
-	__u8 flags;
-	__u32 hdr_len;
-	__u32 type_off;
-	__u32 type_len;
-	__u32 str_off;
-	__u32 str_len;
-};
-
-struct btf {
-	void *data;
-	struct btf_type **types;
-	u32 *resolved_ids;
-	u32 *resolved_sizes;
-	const char *strings;
-	void *nohdr_data;
-	struct btf_header hdr;
-	u32 nr_types;
-	u32 types_size;
-	u32 data_size;
-	refcount_t refcnt;
-	u32 id;
-	struct callback_head rcu;
-};
-
-struct btf_type {
-	__u32 name_off;
-	__u32 info;
-	union {
-		__u32 size;
-		__u32 type;
-	};
-};
-
-enum bpf_tramp_prog_type {
-	BPF_TRAMP_FENTRY = 0,
-	BPF_TRAMP_FEXIT = 1,
-	BPF_TRAMP_MODIFY_RETURN = 2,
-	BPF_TRAMP_MAX = 3,
-	BPF_TRAMP_REPLACE = 4,
-};
-
-struct bpf_ksym {
-	long unsigned int start;
-	long unsigned int end;
-	char name[128];
-	struct list_head lnode;
-	struct latch_tree_node tnode;
-	bool prog;
-};
-
-struct bpf_ctx_arg_aux;
-
-struct bpf_trampoline;
-
-struct bpf_jit_poke_descriptor;
-
-struct bpf_prog_ops;
-
-struct bpf_prog_offload;
-
-struct bpf_func_info_aux;
-
-struct bpf_prog_stats;
-
-struct bpf_prog_aux {
-	atomic64_t refcnt;
-	u32 used_map_cnt;
-	u32 max_ctx_offset;
-	u32 max_pkt_offset;
-	u32 max_tp_access;
-	u32 stack_depth;
-	u32 id;
-	u32 func_cnt;
-	u32 func_idx;
-	u32 attach_btf_id;
-	u32 ctx_arg_info_size;
-	u32 max_rdonly_access;
-	u32 max_rdwr_access;
-	const struct bpf_ctx_arg_aux *ctx_arg_info;
-	struct mutex dst_mutex;
-	struct bpf_prog *dst_prog;
-	struct bpf_trampoline *dst_trampoline;
-	enum bpf_prog_type saved_dst_prog_type;
-	enum bpf_attach_type saved_dst_attach_type;
-	bool verifier_zext;
-	bool offload_requested;
-	bool attach_btf_trace;
-	bool func_proto_unreliable;
-	bool sleepable;
-	bool tail_call_reachable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct hlist_node tramp_hlist;
-	const struct btf_type *attach_func_proto;
-	const char *attach_func_name;
-	struct bpf_prog **func;
-	void *jit_data;
-	struct bpf_jit_poke_descriptor *poke_tab;
-	u32 size_poke_tab;
-	struct bpf_ksym ksym;
-	const struct bpf_prog_ops *ops;
-	struct bpf_map **used_maps;
-	struct mutex used_maps_mutex;
-	struct bpf_prog *prog;
-	struct user_struct *user;
-	u64 load_time;
-	struct bpf_map *cgroup_storage[2];
-	char name[16];
-	void *security;
-	struct bpf_prog_offload *offload;
-	struct btf *btf;
-	struct bpf_func_info *func_info;
-	struct bpf_func_info_aux *func_info_aux;
-	struct bpf_line_info *linfo;
-	void **jited_linfo;
-	u32 func_info_cnt;
-	u32 nr_linfo;
-	u32 linfo_idx;
-	u32 num_exentries;
-	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
-	union {
-		struct work_struct work;
-		struct callback_head rcu;
-	};
-};
-
-struct sock_filter {
-	__u16 code;
-	__u8 jt;
-	__u8 jf;
-	__u32 k;
-};
-
-struct sock_fprog_kern;
-
-struct bpf_prog {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	u16 call_get_stack: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	struct sock_filter insns[0];
-	struct bpf_insn insnsi[0];
-};
-
-struct bpf_offloaded_map;
-
-struct bpf_map_dev_ops {
-	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
-};
-
-struct bpf_offloaded_map {
-	struct bpf_map map;
-	struct net_device *netdev;
-	const struct bpf_map_dev_ops *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net_device_stats {
-	long unsigned int rx_packets;
-	long unsigned int tx_packets;
-	long unsigned int rx_bytes;
-	long unsigned int tx_bytes;
-	long unsigned int rx_errors;
-	long unsigned int tx_errors;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	long unsigned int multicast;
-	long unsigned int collisions;
-	long unsigned int rx_length_errors;
-	long unsigned int rx_over_errors;
-	long unsigned int rx_crc_errors;
-	long unsigned int rx_frame_errors;
-	long unsigned int rx_fifo_errors;
-	long unsigned int rx_missed_errors;
-	long unsigned int tx_aborted_errors;
-	long unsigned int tx_carrier_errors;
-	long unsigned int tx_fifo_errors;
-	long unsigned int tx_heartbeat_errors;
-	long unsigned int tx_window_errors;
-	long unsigned int rx_compressed;
-	long unsigned int tx_compressed;
-};
-
-struct netdev_hw_addr_list {
-	struct list_head list;
-	int count;
-};
-
-struct tipc_bearer;
-
-struct dn_dev;
-
-struct mpls_dev;
-
-enum rx_handler_result {
-	RX_HANDLER_CONSUMED = 0,
-	RX_HANDLER_ANOTHER = 1,
-	RX_HANDLER_EXACT = 2,
-	RX_HANDLER_PASS = 3,
-};
-
-typedef enum rx_handler_result rx_handler_result_t;
-
-typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
-
-struct pcpu_dstats;
-
-struct garp_port;
-
-struct mrp_port;
-
-struct netdev_tc_txq {
-	u16 count;
-	u16 offset;
-};
-
-struct macsec_ops;
-
-struct udp_tunnel_nic;
-
-struct bpf_xdp_link;
-
-struct bpf_xdp_entity {
-	struct bpf_prog *prog;
-	struct bpf_xdp_link *link;
-};
-
-struct netdev_name_node;
-
-struct dev_ifalias;
-
-struct iw_handler_def;
-
-struct iw_public_data;
-
-struct net_device_ops;
-
-struct ethtool_ops;
-
-struct l3mdev_ops;
-
-struct ndisc_ops;
-
-struct xfrmdev_ops;
-
-struct tlsdev_ops;
-
-struct header_ops;
-
-struct vlan_info;
-
-struct dsa_port;
-
-struct in_device;
-
-struct inet6_dev;
-
-struct wireless_dev;
-
-struct wpan_dev;
-
-struct netdev_rx_queue;
-
-struct mini_Qdisc;
-
-struct netdev_queue;
-
-struct cpu_rmap;
-
-struct Qdisc;
-
-struct xdp_dev_bulk_queue;
-
-struct xps_dev_maps;
-
-struct netpoll_info;
-
-struct pcpu_lstats;
-
-struct pcpu_sw_netstats;
-
-struct rtnl_link_ops;
-
-struct dcbnl_rtnl_ops;
-
-struct netprio_map;
-
-struct phy_device;
-
-struct sfp_bus;
-
-struct udp_tunnel_nic_info;
-
-struct net_device {
-	char name[16];
-	struct netdev_name_node *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct iw_handler_def *wireless_handlers;
-	struct iw_public_data *wireless_data;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops *ethtool_ops;
-	const struct l3mdev_ops *l3mdev_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct xfrmdev_ops *xfrmdev_ops;
-	const struct tlsdev_ops *tlsdev_ops;
-	const struct header_ops *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	unsigned char name_assign_type;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	bool uc_promisc;
-	struct vlan_info *vlan_info;
-	struct dsa_port *dsa_ptr;
-	struct tipc_bearer *tipc_ptr;
-	void *atalk_ptr;
-	struct in_device *ip_ptr;
-	struct dn_dev *dn_ptr;
-	struct inet6_dev *ip6_ptr;
-	void *ax25_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	struct mpls_dev *mpls_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	int napi_defer_hard_irqs;
-	rx_handler_func_t *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc *miniq_ingress;
-	struct netdev_queue *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc *qdisc;
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	struct xdp_dev_bulk_queue *xdp_bulkq;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc *miniq_egress;
-	struct hlist_head qdisc_hash[16];
-	struct timer_list watchdog_timer;
-	int watchdog_timeo;
-	u32 proto_down_reason;
-	struct list_head todo_list;
-	int *pcpu_refcnt;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED = 0,
-		NETREG_REGISTERED = 1,
-		NETREG_UNREGISTERING = 2,
-		NETREG_UNREGISTERED = 3,
-		NETREG_RELEASED = 4,
-		NETREG_DUMMY = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED = 0,
-		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device *);
-	struct netpoll_info *npinfo;
-	possible_net_t nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct garp_port *garp_port;
-	struct mrp_port *mrp_port;
-	struct device dev;
-	const struct attribute_group *sysfs_groups[4];
-	const struct attribute_group *sysfs_rx_queue_group;
-	const struct rtnl_link_ops *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	const struct dcbnl_rtnl_ops *dcbnl_ops;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	unsigned int fcoe_ddp_xid;
-	struct netprio_map *priomap;
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key *qdisc_tx_busylock;
-	struct lock_class_key *qdisc_running_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-	struct list_head net_notifier_list;
-	const struct macsec_ops *macsec_ops;
-	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
-	struct udp_tunnel_nic *udp_tunnel_nic;
-	struct bpf_xdp_entity xdp_state[3];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum bpf_reg_type {
-	NOT_INIT = 0,
-	SCALAR_VALUE = 1,
-	PTR_TO_CTX = 2,
-	CONST_PTR_TO_MAP = 3,
-	PTR_TO_MAP_VALUE = 4,
-	PTR_TO_MAP_VALUE_OR_NULL = 5,
-	PTR_TO_STACK = 6,
-	PTR_TO_PACKET_META = 7,
-	PTR_TO_PACKET = 8,
-	PTR_TO_PACKET_END = 9,
-	PTR_TO_FLOW_KEYS = 10,
-	PTR_TO_SOCKET = 11,
-	PTR_TO_SOCKET_OR_NULL = 12,
-	PTR_TO_SOCK_COMMON = 13,
-	PTR_TO_SOCK_COMMON_OR_NULL = 14,
-	PTR_TO_TCP_SOCK = 15,
-	PTR_TO_TCP_SOCK_OR_NULL = 16,
-	PTR_TO_TP_BUFFER = 17,
-	PTR_TO_XDP_SOCK = 18,
-	PTR_TO_BTF_ID = 19,
-	PTR_TO_BTF_ID_OR_NULL = 20,
-	PTR_TO_MEM = 21,
-	PTR_TO_MEM_OR_NULL = 22,
-	PTR_TO_RDONLY_BUF = 23,
-	PTR_TO_RDONLY_BUF_OR_NULL = 24,
-	PTR_TO_RDWR_BUF = 25,
-	PTR_TO_RDWR_BUF_OR_NULL = 26,
-	PTR_TO_PERCPU_BTF_ID = 27,
-};
-
-struct bpf_prog_ops {
-	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
-};
-
-struct bpf_offload_dev;
-
-struct bpf_prog_offload {
-	struct bpf_prog *prog;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	void *dev_priv;
-	struct list_head offloads;
-	bool dev_state;
-	bool opt_failed;
-	void *jited_image;
-	u32 jited_len;
-};
-
-struct bpf_prog_stats {
-	u64 cnt;
-	u64 nsecs;
-	struct u64_stats_sync syncp;
-};
-
-struct btf_func_model {
-	u8 ret_size;
-	u8 nr_args;
-	u8 arg_size[12];
-};
-
-struct bpf_trampoline {
-	struct hlist_node hlist;
-	struct mutex mutex;
-	refcount_t refcnt;
-	u64 key;
-	struct {
-		struct btf_func_model model;
-		void *addr;
-		bool ftrace_managed;
-	} func;
-	struct bpf_prog *extension_prog;
-	struct hlist_head progs_hlist[3];
-	int progs_cnt[3];
-	void *image;
-	u64 selector;
-	struct bpf_ksym ksym;
-};
-
-struct bpf_func_info_aux {
-	u16 linkage;
-	bool unreliable;
-};
-
-struct bpf_jit_poke_descriptor {
-	void *tailcall_target;
-	void *tailcall_bypass;
-	void *bypass_addr;
-	union {
-		struct {
-			struct bpf_map *map;
-			u32 key;
-		} tail_call;
-	};
-	bool tailcall_target_stable;
-	u8 adj_off;
-	u16 reason;
-	u32 insn_idx;
-};
-
-struct bpf_ctx_arg_aux {
-	u32 offset;
-	enum bpf_reg_type reg_type;
-	u32 btf_id;
-};
-
-typedef unsigned int sk_buff_data_t;
-
-struct skb_ext;
-
-struct sk_buff {
-	union {
-		struct {
-			struct sk_buff *next;
-			struct sk_buff *prev;
-			union {
-				struct net_device *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 offload_fwd_mark: 1;
-	__u8 offload_l3_fwd_mark: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 redirected: 1;
-	__u8 from_ingress: 1;
-	__u8 decrypted: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
-};
-
-struct scatterlist {
-	long unsigned int page_link;
-	unsigned int offset;
-	unsigned int length;
-	dma_addr_t dma_address;
-	unsigned int dma_length;
-};
-
-enum {
-	Root_NFS = 255,
-	Root_CIFS = 254,
-	Root_RAM0 = 1048576,
-	Root_RAM1 = 1048577,
-	Root_FD0 = 2097152,
-	Root_HDA1 = 3145729,
-	Root_HDA2 = 3145730,
-	Root_SDA1 = 8388609,
-	Root_SDA2 = 8388610,
-	Root_HDC1 = 23068673,
-	Root_SR0 = 11534336,
-};
-
-struct ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_proto;
-};
-
-struct flowi_tunnel {
-	__be64 tun_id;
-};
-
-struct flowi_common {
-	int flowic_oif;
-	int flowic_iif;
-	__u32 flowic_mark;
-	__u8 flowic_tos;
-	__u8 flowic_scope;
-	__u8 flowic_proto;
-	__u8 flowic_flags;
-	__u32 flowic_secid;
-	kuid_t flowic_uid;
-	struct flowi_tunnel flowic_tun_key;
-	__u32 flowic_multipath_hash;
-};
-
-union flowi_uli {
-	struct {
-		__be16 dport;
-		__be16 sport;
-	} ports;
-	struct {
-		__u8 type;
-		__u8 code;
-	} icmpt;
-	struct {
-		__le16 dport;
-		__le16 sport;
-	} dnports;
-	__be32 spi;
-	__be32 gre_key;
-	struct {
-		__u8 type;
-	} mht;
-};
-
-struct flowi4 {
-	struct flowi_common __fl_common;
-	__be32 saddr;
-	__be32 daddr;
-	union flowi_uli uli;
-};
-
-struct flowi6 {
-	struct flowi_common __fl_common;
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	__be32 flowlabel;
-	union flowi_uli uli;
-	__u32 mp_hash;
-};
-
-struct flowidn {
-	struct flowi_common __fl_common;
-	__le16 daddr;
-	__le16 saddr;
-	union flowi_uli uli;
-};
-
-struct flowi {
-	union {
-		struct flowi_common __fl_common;
-		struct flowi4 ip4;
-		struct flowi6 ip6;
-		struct flowidn dn;
-	} u;
-};
-
-struct ipstats_mib {
-	u64 mibs[37];
-	struct u64_stats_sync syncp;
-};
-
-struct icmp_mib {
-	long unsigned int mibs[28];
-};
-
-struct icmpmsg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6_mib {
-	long unsigned int mibs[6];
-};
-
-struct icmpv6_mib_device {
-	atomic_long_t mibs[6];
-};
-
-struct icmpv6msg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6msg_mib_device {
-	atomic_long_t mibs[512];
-};
-
-struct tcp_mib {
-	long unsigned int mibs[16];
-};
-
-struct udp_mib {
-	long unsigned int mibs[9];
-};
-
-struct linux_mib {
-	long unsigned int mibs[124];
-};
-
-struct linux_tls_mib {
-	long unsigned int mibs[11];
-};
-
-struct inet_frags;
-
-struct fqdir {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags *f;
-	struct net *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue;
-
-struct inet_frags {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue *, const void *);
-	void (*destructor)(struct inet_frag_queue *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct frag_v4_compare_key {
-	__be32 saddr;
-	__be32 daddr;
-	u32 user;
-	u32 vif;
-	__be16 id;
-	u16 protocol;
-};
-
-struct frag_v6_compare_key {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	u32 user;
-	__be32 id;
-	u32 iif;
-};
-
-struct inet_frag_queue {
-	struct rhash_head node;
-	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff *fragments_tail;
-	struct sk_buff *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir *fqdir;
-	struct callback_head rcu;
-};
-
-struct fib_rule;
-
-struct fib_lookup_arg;
-
-struct fib_rule_hdr;
-
-struct nlattr;
-
-struct netlink_ext_ack;
-
-struct nla_policy;
-
-struct fib_rules_ops {
-	int family;
-	struct list_head list;
-	int rule_size;
-	int addr_size;
-	int unresolved_rules;
-	int nr_goto_rules;
-	unsigned int fib_rules_seq;
-	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
-	bool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);
-	int (*match)(struct fib_rule *, struct flowi *, int);
-	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
-	int (*delete)(struct fib_rule *);
-	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
-	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
-	size_t (*nlmsg_payload)(struct fib_rule *);
-	void (*flush_cache)(struct fib_rules_ops *);
-	int nlgroup;
-	const struct nla_policy *policy;
-	struct list_head rules_list;
-	struct module *owner;
-	struct net *fro_net;
-	struct callback_head rcu;
-};
-
-enum tcp_ca_event {
-	CA_EVENT_TX_START = 0,
-	CA_EVENT_CWND_RESTART = 1,
-	CA_EVENT_COMPLETE_CWR = 2,
-	CA_EVENT_LOSS = 3,
-	CA_EVENT_ECN_NO_CE = 4,
-	CA_EVENT_ECN_IS_CE = 5,
-};
-
-struct ack_sample;
-
-struct rate_sample;
-
-union tcp_cc_info;
-
-struct tcp_congestion_ops {
-	struct list_head list;
-	u32 key;
-	u32 flags;
-	void (*init)(struct sock *);
-	void (*release)(struct sock *);
-	u32 (*ssthresh)(struct sock *);
-	void (*cong_avoid)(struct sock *, u32, u32);
-	void (*set_state)(struct sock *, u8);
-	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
-	void (*in_ack_event)(struct sock *, u32);
-	u32 (*undo_cwnd)(struct sock *);
-	void (*pkts_acked)(struct sock *, const struct ack_sample *);
-	u32 (*min_tso_segs)(struct sock *);
-	u32 (*sndbuf_expand)(struct sock *);
-	void (*cong_control)(struct sock *, const struct rate_sample *);
-	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
-	char name[16];
-	struct module *owner;
-};
-
-struct fib_notifier_ops {
-	int family;
-	struct list_head list;
-	unsigned int (*fib_seq_read)(struct net *);
-	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
-	struct module *owner;
-	struct callback_head rcu;
-};
-
-struct xfrm_state;
-
-struct lwtunnel_state;
-
-struct dst_entry {
-	struct net_device *dev;
-	struct dst_ops *ops;
-	long unsigned int _metrics;
-	long unsigned int expires;
-	struct xfrm_state *xfrm;
-	int (*input)(struct sk_buff *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	short unsigned int flags;
-	short int obsolete;
-	short unsigned int header_len;
-	short unsigned int trailer_len;
-	atomic_t __refcnt;
-	int __use;
-	long unsigned int lastuse;
-	struct lwtunnel_state *lwtstate;
-	struct callback_head callback_head;
-	short int error;
-	short int __pad;
-	__u32 tclassid;
-};
-
-struct hh_cache {
-	unsigned int hh_len;
-	seqlock_t hh_lock;
-	long unsigned int hh_data[16];
-};
-
-struct neigh_table;
-
-struct neigh_parms;
-
-struct neigh_ops;
-
-struct neighbour {
-	struct neighbour *next;
-	struct neigh_table *tbl;
-	struct neigh_parms *parms;
-	long unsigned int confirmed;
-	long unsigned int updated;
-	rwlock_t lock;
-	refcount_t refcnt;
-	unsigned int arp_queue_len_bytes;
-	struct sk_buff_head arp_queue;
-	struct timer_list timer;
-	long unsigned int used;
-	atomic_t probes;
-	__u8 flags;
-	__u8 nud_state;
-	__u8 type;
-	__u8 dead;
-	u8 protocol;
-	seqlock_t ha_lock;
-	int: 32;
-	unsigned char ha[32];
-	struct hh_cache hh;
-	int (*output)(struct neighbour *, struct sk_buff *);
-	const struct neigh_ops *ops;
-	struct list_head gc_list;
-	struct callback_head rcu;
-	struct net_device *dev;
-	u8 primary_key[0];
-};
-
-struct ipv6_stable_secret {
-	bool initialized;
-	struct in6_addr secret;
-};
-
-struct ipv6_devconf {
-	__s32 forwarding;
-	__s32 hop_limit;
-	__s32 mtu6;
-	__s32 accept_ra;
-	__s32 accept_redirects;
-	__s32 autoconf;
-	__s32 dad_transmits;
-	__s32 rtr_solicits;
-	__s32 rtr_solicit_interval;
-	__s32 rtr_solicit_max_interval;
-	__s32 rtr_solicit_delay;
-	__s32 force_mld_version;
-	__s32 mldv1_unsolicited_report_interval;
-	__s32 mldv2_unsolicited_report_interval;
-	__s32 use_tempaddr;
-	__s32 temp_valid_lft;
-	__s32 temp_prefered_lft;
-	__s32 regen_max_retry;
-	__s32 max_desync_factor;
-	__s32 max_addresses;
-	__s32 accept_ra_defrtr;
-	__s32 accept_ra_min_hop_limit;
-	__s32 accept_ra_pinfo;
-	__s32 ignore_routes_with_linkdown;
-	__s32 accept_ra_rtr_pref;
-	__s32 rtr_probe_interval;
-	__s32 accept_ra_rt_info_min_plen;
-	__s32 accept_ra_rt_info_max_plen;
-	__s32 proxy_ndp;
-	__s32 accept_source_route;
-	__s32 accept_ra_from_local;
-	__s32 mc_forwarding;
-	__s32 disable_ipv6;
-	__s32 drop_unicast_in_l2_multicast;
-	__s32 accept_dad;
-	__s32 force_tllao;
-	__s32 ndisc_notify;
-	__s32 suppress_frag_ndisc;
-	__s32 accept_ra_mtu;
-	__s32 drop_unsolicited_na;
-	struct ipv6_stable_secret stable_secret;
-	__s32 use_oif_addrs_only;
-	__s32 keep_addr_on_down;
-	__s32 seg6_enabled;
-	__u32 enhanced_dad;
-	__u32 addr_gen_mode;
-	__s32 disable_policy;
-	__s32 ndisc_tclass;
-	__s32 rpl_seg_enabled;
-	struct ctl_table_header *sysctl_header;
-};
-
-struct nf_queue_entry;
-
-struct nf_queue_handler {
-	int (*outfn)(struct nf_queue_entry *, unsigned int);
-	void (*nf_hook_drop)(struct net *);
-};
-
-enum nf_log_type {
-	NF_LOG_TYPE_LOG = 0,
-	NF_LOG_TYPE_ULOG = 1,
-	NF_LOG_TYPE_MAX = 2,
-};
-
-typedef u8 u_int8_t;
-
-struct nf_loginfo;
-
-typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
-
-struct nf_logger {
-	char *name;
-	enum nf_log_type type;
-	nf_logfn *logfn;
-	struct module *me;
-};
-
-struct hlist_nulls_head {
-	struct hlist_nulls_node *first;
-};
-
-struct ip_conntrack_stat {
-	unsigned int found;
-	unsigned int invalid;
-	unsigned int insert;
-	unsigned int insert_failed;
-	unsigned int clash_resolve;
-	unsigned int drop;
-	unsigned int early_drop;
-	unsigned int error;
-	unsigned int expect_new;
-	unsigned int expect_create;
-	unsigned int expect_delete;
-	unsigned int search_restart;
-};
-
-struct ct_pcpu {
-	spinlock_t lock;
-	struct hlist_nulls_head unconfirmed;
-	struct hlist_nulls_head dying;
-};
-
-typedef struct {
-	union {
-		void *kernel;
-		void *user;
-	};
-	bool is_kernel: 1;
-} sockptr_t;
-
-typedef enum {
-	SS_FREE = 0,
-	SS_UNCONNECTED = 1,
-	SS_CONNECTING = 2,
-	SS_CONNECTED = 3,
-	SS_DISCONNECTING = 4,
-} socket_state;
-
-struct socket_wq {
-	wait_queue_head_t wait;
-	struct fasync_struct *fasync_list;
-	long unsigned int flags;
-	struct callback_head rcu;
-	long: 64;
-};
-
-struct proto_ops;
-
-struct socket {
-	socket_state state;
-	short int type;
-	long unsigned int flags;
-	struct file *file;
-	struct sock *sk;
-	const struct proto_ops *ops;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct socket_wq wq;
-};
-
-typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
-
-struct proto_ops {
-	int family;
-	unsigned int flags;
-	struct module *owner;
-	int (*release)(struct socket *);
-	int (*bind)(struct socket *, struct sockaddr *, int);
-	int (*connect)(struct socket *, struct sockaddr *, int, int);
-	int (*socketpair)(struct socket *, struct socket *);
-	int (*accept)(struct socket *, struct socket *, int, bool);
-	int (*getname)(struct socket *, struct sockaddr *, int);
-	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
-	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*gettstamp)(struct socket *, void *, bool, bool);
-	int (*listen)(struct socket *, int);
-	int (*shutdown)(struct socket *, int);
-	int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct socket *, int, int, char *, int *);
-	void (*show_fdinfo)(struct seq_file *, struct socket *);
-	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
-	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
-	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
-	ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
-	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	int (*set_peek_off)(struct sock *, int);
-	int (*peek_len)(struct socket *);
-	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
-	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
-	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
-	int (*set_rcvlowat)(struct sock *, int);
-};
-
-struct pipe_buf_operations;
-
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations *ops;
-	unsigned int flags;
-	long unsigned int private;
-};
-
-struct pipe_buf_operations {
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
-};
-
-struct skb_ext {
-	refcount_t refcnt;
-	u8 offset[4];
-	u8 chunks;
-	long: 56;
-	char data[0];
-};
-
-struct dql {
-	unsigned int num_queued;
-	unsigned int adj_limit;
-	unsigned int last_obj_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int limit;
-	unsigned int num_completed;
-	unsigned int prev_ovlimit;
-	unsigned int prev_num_queued;
-	unsigned int prev_last_obj_cnt;
-	unsigned int lowest_slack;
-	long unsigned int slack_start_time;
-	unsigned int max_limit;
-	unsigned int min_limit;
-	unsigned int slack_hold_time;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-struct ethtool_drvinfo {
-	__u32 cmd;
-	char driver[32];
-	char version[32];
-	char fw_version[32];
-	char bus_info[32];
-	char erom_version[32];
-	char reserved2[12];
-	__u32 n_priv_flags;
-	__u32 n_stats;
-	__u32 testinfo_len;
-	__u32 eedump_len;
-	__u32 regdump_len;
-};
-
-struct ethtool_wolinfo {
-	__u32 cmd;
-	__u32 supported;
-	__u32 wolopts;
-	__u8 sopass[6];
-};
-
-struct ethtool_tunable {
-	__u32 cmd;
-	__u32 id;
-	__u32 type_id;
-	__u32 len;
-	void *data[0];
-};
-
-struct ethtool_regs {
-	__u32 cmd;
-	__u32 version;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eeprom {
-	__u32 cmd;
-	__u32 magic;
-	__u32 offset;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eee {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertised;
-	__u32 lp_advertised;
-	__u32 eee_active;
-	__u32 eee_enabled;
-	__u32 tx_lpi_enabled;
-	__u32 tx_lpi_timer;
-	__u32 reserved[2];
-};
-
-struct ethtool_modinfo {
-	__u32 cmd;
-	__u32 type;
-	__u32 eeprom_len;
-	__u32 reserved[8];
-};
-
-struct ethtool_coalesce {
-	__u32 cmd;
-	__u32 rx_coalesce_usecs;
-	__u32 rx_max_coalesced_frames;
-	__u32 rx_coalesce_usecs_irq;
-	__u32 rx_max_coalesced_frames_irq;
-	__u32 tx_coalesce_usecs;
-	__u32 tx_max_coalesced_frames;
-	__u32 tx_coalesce_usecs_irq;
-	__u32 tx_max_coalesced_frames_irq;
-	__u32 stats_block_coalesce_usecs;
-	__u32 use_adaptive_rx_coalesce;
-	__u32 use_adaptive_tx_coalesce;
-	__u32 pkt_rate_low;
-	__u32 rx_coalesce_usecs_low;
-	__u32 rx_max_coalesced_frames_low;
-	__u32 tx_coalesce_usecs_low;
-	__u32 tx_max_coalesced_frames_low;
-	__u32 pkt_rate_high;
-	__u32 rx_coalesce_usecs_high;
-	__u32 rx_max_coalesced_frames_high;
-	__u32 tx_coalesce_usecs_high;
-	__u32 tx_max_coalesced_frames_high;
-	__u32 rate_sample_interval;
-};
-
-struct ethtool_ringparam {
-	__u32 cmd;
-	__u32 rx_max_pending;
-	__u32 rx_mini_max_pending;
-	__u32 rx_jumbo_max_pending;
-	__u32 tx_max_pending;
-	__u32 rx_pending;
-	__u32 rx_mini_pending;
-	__u32 rx_jumbo_pending;
-	__u32 tx_pending;
-};
-
-struct ethtool_channels {
-	__u32 cmd;
-	__u32 max_rx;
-	__u32 max_tx;
-	__u32 max_other;
-	__u32 max_combined;
-	__u32 rx_count;
-	__u32 tx_count;
-	__u32 other_count;
-	__u32 combined_count;
-};
-
-struct ethtool_pauseparam {
-	__u32 cmd;
-	__u32 autoneg;
-	__u32 rx_pause;
-	__u32 tx_pause;
-};
-
-enum ethtool_link_ext_state {
-	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
-	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
-	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
-	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
-	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
-	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
-	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
-	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
-	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
-	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
-};
-
-enum ethtool_link_ext_substate_autoneg {
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
-};
-
-enum ethtool_link_ext_substate_link_training {
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
-};
-
-enum ethtool_link_ext_substate_link_logical_mismatch {
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
-};
-
-enum ethtool_link_ext_substate_bad_signal_integrity {
-	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
-};
-
-enum ethtool_link_ext_substate_cable_issue {
-	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
-};
-
-struct ethtool_test {
-	__u32 cmd;
-	__u32 flags;
-	__u32 reserved;
-	__u32 len;
-	__u64 data[0];
-};
-
-struct ethtool_stats {
-	__u32 cmd;
-	__u32 n_stats;
-	__u64 data[0];
-};
-
-struct ethtool_tcpip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tos;
-};
-
-struct ethtool_ah_espip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 spi;
-	__u8 tos;
-};
-
-struct ethtool_usrip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 l4_4_bytes;
-	__u8 tos;
-	__u8 ip_ver;
-	__u8 proto;
-};
-
-struct ethtool_tcpip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tclass;
-};
-
-struct ethtool_ah_espip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 spi;
-	__u8 tclass;
-};
-
-struct ethtool_usrip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 l4_4_bytes;
-	__u8 tclass;
-	__u8 l4_proto;
-};
-
-union ethtool_flow_union {
-	struct ethtool_tcpip4_spec tcp_ip4_spec;
-	struct ethtool_tcpip4_spec udp_ip4_spec;
-	struct ethtool_tcpip4_spec sctp_ip4_spec;
-	struct ethtool_ah_espip4_spec ah_ip4_spec;
-	struct ethtool_ah_espip4_spec esp_ip4_spec;
-	struct ethtool_usrip4_spec usr_ip4_spec;
-	struct ethtool_tcpip6_spec tcp_ip6_spec;
-	struct ethtool_tcpip6_spec udp_ip6_spec;
-	struct ethtool_tcpip6_spec sctp_ip6_spec;
-	struct ethtool_ah_espip6_spec ah_ip6_spec;
-	struct ethtool_ah_espip6_spec esp_ip6_spec;
-	struct ethtool_usrip6_spec usr_ip6_spec;
-	struct ethhdr ether_spec;
-	__u8 hdata[52];
-};
-
-struct ethtool_flow_ext {
-	__u8 padding[2];
-	unsigned char h_dest[6];
-	__be16 vlan_etype;
-	__be16 vlan_tci;
-	__be32 data[2];
-};
-
-struct ethtool_rx_flow_spec {
-	__u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	__u64 ring_cookie;
-	__u32 location;
-};
-
-struct ethtool_rxnfc {
-	__u32 cmd;
-	__u32 flow_type;
-	__u64 data;
-	struct ethtool_rx_flow_spec fs;
-	union {
-		__u32 rule_cnt;
-		__u32 rss_context;
-	};
-	__u32 rule_locs[0];
-};
-
-struct ethtool_flash {
-	__u32 cmd;
-	__u32 region;
-	char data[128];
-};
-
-struct ethtool_dump {
-	__u32 cmd;
-	__u32 version;
-	__u32 flag;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_ts_info {
-	__u32 cmd;
-	__u32 so_timestamping;
-	__s32 phc_index;
-	__u32 tx_types;
-	__u32 tx_reserved[3];
-	__u32 rx_filters;
-	__u32 rx_reserved[3];
-};
-
-struct ethtool_fecparam {
-	__u32 cmd;
-	__u32 active_fec;
-	__u32 fec;
-	__u32 reserved;
-};
-
-struct ethtool_link_settings {
-	__u32 cmd;
-	__u32 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__s8 link_mode_masks_nwords;
-	__u8 transceiver;
-	__u8 master_slave_cfg;
-	__u8 master_slave_state;
-	__u8 reserved1[1];
-	__u32 reserved[7];
-	__u32 link_mode_masks[0];
-};
-
-enum ethtool_phys_id_state {
-	ETHTOOL_ID_INACTIVE = 0,
-	ETHTOOL_ID_ACTIVE = 1,
-	ETHTOOL_ID_ON = 2,
-	ETHTOOL_ID_OFF = 3,
-};
-
-struct ethtool_link_ext_state_info {
-	enum ethtool_link_ext_state link_ext_state;
-	union {
-		enum ethtool_link_ext_substate_autoneg autoneg;
-		enum ethtool_link_ext_substate_link_training link_training;
-		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
-		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
-		enum ethtool_link_ext_substate_cable_issue cable_issue;
-		u8 __link_ext_substate;
-	};
-};
-
-struct ethtool_link_ksettings {
-	struct ethtool_link_settings base;
-	struct {
-		long unsigned int supported[2];
-		long unsigned int advertising[2];
-		long unsigned int lp_advertising[2];
-	} link_modes;
-};
-
-struct ethtool_pause_stats {
-	u64 tx_pause_frames;
-	u64 rx_pause_frames;
-};
-
-struct ethtool_ops {
-	u32 supported_coalesce_params;
-	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device *);
-	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device *);
-	void (*set_msglevel)(struct net_device *, u32);
-	int (*nway_reset)(struct net_device *);
-	u32 (*get_link)(struct net_device *);
-	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
-	int (*get_eeprom_len)(struct net_device *);
-	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
-	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device *, u32, u8 *);
-	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device *);
-	void (*complete)(struct net_device *);
-	u32 (*get_priv_flags)(struct net_device *);
-	int (*set_priv_flags)(struct net_device *, u32);
-	int (*get_sset_count)(struct net_device *, int);
-	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device *, struct ethtool_flash *);
-	int (*reset)(struct net_device *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device *);
-	u32 (*get_rxfh_indir_size)(struct net_device *);
-	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-};
-
-struct netlink_ext_ack {
-	const char *_msg;
-	const struct nlattr *bad_attr;
-	const struct nla_policy *policy;
-	u8 cookie[20];
-	u8 cookie_len;
-};
-
-struct ieee_ets {
-	__u8 willing;
-	__u8 ets_cap;
-	__u8 cbs;
-	__u8 tc_tx_bw[8];
-	__u8 tc_rx_bw[8];
-	__u8 tc_tsa[8];
-	__u8 prio_tc[8];
-	__u8 tc_reco_bw[8];
-	__u8 tc_reco_tsa[8];
-	__u8 reco_prio_tc[8];
-};
-
-struct ieee_maxrate {
-	__u64 tc_maxrate[8];
-};
-
-struct ieee_qcn {
-	__u8 rpg_enable[8];
-	__u32 rppp_max_rps[8];
-	__u32 rpg_time_reset[8];
-	__u32 rpg_byte_reset[8];
-	__u32 rpg_threshold[8];
-	__u32 rpg_max_rate[8];
-	__u32 rpg_ai_rate[8];
-	__u32 rpg_hai_rate[8];
-	__u32 rpg_gd[8];
-	__u32 rpg_min_dec_fac[8];
-	__u32 rpg_min_rate[8];
-	__u32 cndd_state_machine[8];
-};
-
-struct ieee_qcn_stats {
-	__u64 rppp_rp_centiseconds[8];
-	__u32 rppp_created_rps[8];
-};
-
-struct ieee_pfc {
-	__u8 pfc_cap;
-	__u8 pfc_en;
-	__u8 mbc;
-	__u16 delay;
-	__u64 requests[8];
-	__u64 indications[8];
-};
-
-struct dcbnl_buffer {
-	__u8 prio2buffer[8];
-	__u32 buffer_size[8];
-	__u32 total_size;
-};
-
-struct cee_pg {
-	__u8 willing;
-	__u8 error;
-	__u8 pg_en;
-	__u8 tcs_supported;
-	__u8 pg_bw[8];
-	__u8 prio_pg[8];
-};
-
-struct cee_pfc {
-	__u8 willing;
-	__u8 error;
-	__u8 pfc_en;
-	__u8 tcs_supported;
-};
-
-struct dcb_app {
-	__u8 selector;
-	__u8 priority;
-	__u16 protocol;
-};
-
-struct dcb_peer_app_info {
-	__u8 willing;
-	__u8 error;
-};
-
-struct dcbnl_rtnl_ops {
-	int (*ieee_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_setets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);
-	int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_getapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_setapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_delapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);
-	u8 (*getstate)(struct net_device *);
-	u8 (*setstate)(struct net_device *, u8);
-	void (*getpermhwaddr)(struct net_device *, u8 *);
-	void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgtx)(struct net_device *, int, u8);
-	void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgrx)(struct net_device *, int, u8);
-	void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
-	void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
-	void (*setpfccfg)(struct net_device *, int, u8);
-	void (*getpfccfg)(struct net_device *, int, u8 *);
-	u8 (*setall)(struct net_device *);
-	u8 (*getcap)(struct net_device *, int, u8 *);
-	int (*getnumtcs)(struct net_device *, int, u8 *);
-	int (*setnumtcs)(struct net_device *, int, u8);
-	u8 (*getpfcstate)(struct net_device *);
-	void (*setpfcstate)(struct net_device *, u8);
-	void (*getbcncfg)(struct net_device *, int, u32 *);
-	void (*setbcncfg)(struct net_device *, int, u32);
-	void (*getbcnrp)(struct net_device *, int, u8 *);
-	void (*setbcnrp)(struct net_device *, int, u8);
-	int (*setapp)(struct net_device *, u8, u16, u8);
-	int (*getapp)(struct net_device *, u8, u16);
-	u8 (*getfeatcfg)(struct net_device *, int, u8 *);
-	u8 (*setfeatcfg)(struct net_device *, int, u8);
-	u8 (*getdcbx)(struct net_device *);
-	u8 (*setdcbx)(struct net_device *, u8);
-	int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);
-	int (*peer_getapptable)(struct net_device *, struct dcb_app *);
-	int (*cee_peer_getpg)(struct net_device *, struct cee_pg *);
-	int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);
-	int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
-	int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
-};
-
-struct netprio_map {
-	struct callback_head rcu;
-	u32 priomap_len;
-	u32 priomap[0];
-};
-
-struct xdp_mem_info {
-	u32 type;
-	u32 id;
-};
-
-struct xdp_rxq_info {
-	struct net_device *dev;
-	u32 queue_index;
-	u32 reg_state;
-	struct xdp_mem_info mem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_frame {
-	void *data;
-	u16 len;
-	u16 headroom;
-	u32 metasize: 8;
-	u32 frame_sz: 24;
-	struct xdp_mem_info mem;
-	struct net_device *dev_rx;
-};
-
-struct nlmsghdr {
-	__u32 nlmsg_len;
-	__u16 nlmsg_type;
-	__u16 nlmsg_flags;
-	__u32 nlmsg_seq;
-	__u32 nlmsg_pid;
-};
-
-struct nlattr {
-	__u16 nla_len;
-	__u16 nla_type;
-};
-
-struct netlink_range_validation;
-
-struct netlink_range_validation_signed;
-
-struct nla_policy {
-	u8 type;
-	u8 validation_type;
-	u16 len;
-	union {
-		const u32 bitfield32_valid;
-		const u32 mask;
-		const char *reject_message;
-		const struct nla_policy *nested_policy;
-		struct netlink_range_validation *range;
-		struct netlink_range_validation_signed *range_signed;
-		struct {
-			s16 min;
-			s16 max;
-		};
-		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
-		u16 strict_start_type;
-	};
-};
-
-struct netlink_callback {
-	struct sk_buff *skb;
-	const struct nlmsghdr *nlh;
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	struct netlink_ext_ack *extack;
-	u16 family;
-	u16 answer_flags;
-	u32 min_dump_alloc;
-	unsigned int prev_seq;
-	unsigned int seq;
-	bool strict_check;
-	union {
-		u8 ctx[48];
-		long int args[6];
-	};
-};
-
-struct ndmsg {
-	__u8 ndm_family;
-	__u8 ndm_pad1;
-	__u16 ndm_pad2;
-	__s32 ndm_ifindex;
-	__u16 ndm_state;
-	__u8 ndm_flags;
-	__u8 ndm_type;
-};
-
-struct rtnl_link_stats64 {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 rx_errors;
-	__u64 tx_errors;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-	__u64 multicast;
-	__u64 collisions;
-	__u64 rx_length_errors;
-	__u64 rx_over_errors;
-	__u64 rx_crc_errors;
-	__u64 rx_frame_errors;
-	__u64 rx_fifo_errors;
-	__u64 rx_missed_errors;
-	__u64 tx_aborted_errors;
-	__u64 tx_carrier_errors;
-	__u64 tx_fifo_errors;
-	__u64 tx_heartbeat_errors;
-	__u64 tx_window_errors;
-	__u64 rx_compressed;
-	__u64 tx_compressed;
-	__u64 rx_nohandler;
-};
-
-struct ifla_vf_guid {
-	__u32 vf;
-	__u64 guid;
-};
-
-struct ifla_vf_stats {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 broadcast;
-	__u64 multicast;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-};
-
-struct ifla_vf_info {
-	__u32 vf;
-	__u8 mac[32];
-	__u32 vlan;
-	__u32 qos;
-	__u32 spoofchk;
-	__u32 linkstate;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-	__u32 rss_query_en;
-	__u32 trusted;
-	__be16 vlan_proto;
-};
-
-struct tc_stats {
-	__u64 bytes;
-	__u32 packets;
-	__u32 drops;
-	__u32 overlimits;
-	__u32 bps;
-	__u32 pps;
-	__u32 qlen;
-	__u32 backlog;
-};
-
-struct tc_sizespec {
-	unsigned char cell_log;
-	unsigned char size_log;
-	short int cell_align;
-	int overhead;
-	unsigned int linklayer;
-	unsigned int mpu;
-	unsigned int mtu;
-	unsigned int tsize;
-};
-
-enum netdev_tx {
-	__NETDEV_TX_MIN = 2147483648,
-	NETDEV_TX_OK = 0,
-	NETDEV_TX_BUSY = 16,
-};
-
-typedef enum netdev_tx netdev_tx_t;
-
-struct header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
-	int (*parse)(const struct sk_buff *, unsigned char *);
-	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
-	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
-	bool (*validate)(const char *, unsigned int);
-	__be16 (*parse_protocol)(const struct sk_buff *);
-};
-
-struct xsk_buff_pool;
-
-struct netdev_queue {
-	struct net_device *dev;
-	struct Qdisc *qdisc;
-	struct Qdisc *qdisc_sleeping;
-	struct kobject kobj;
-	int numa_node;
-	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
-	struct net_device *sb_dev;
-	struct xsk_buff_pool *pool;
-	spinlock_t _xmit_lock;
-	int xmit_lock_owner;
-	long unsigned int trans_start;
-	long unsigned int state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dql dql;
-};
-
-struct qdisc_skb_head {
-	struct sk_buff *head;
-	struct sk_buff *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct gnet_stats_basic_packed {
-	__u64 bytes;
-	__u64 packets;
-};
-
-struct gnet_stats_queue {
-	__u32 qlen;
-	__u32 backlog;
-	__u32 drops;
-	__u32 requeues;
-	__u32 overlimits;
-};
-
-struct Qdisc_ops;
-
-struct qdisc_size_table;
-
-struct net_rate_estimator;
-
-struct gnet_stats_basic_cpu;
-
-struct Qdisc {
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int pad;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head gso_skb;
-	struct qdisc_skb_head q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc *next_sched;
-	struct sk_buff_head skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long int privdata[0];
-};
-
-struct rps_map {
-	unsigned int len;
-	struct callback_head rcu;
-	u16 cpus[0];
-};
-
-struct rps_dev_flow {
-	u16 cpu;
-	u16 filter;
-	unsigned int last_qtail;
-};
-
-struct rps_dev_flow_table {
-	unsigned int mask;
-	struct callback_head rcu;
-	struct rps_dev_flow flows[0];
-};
-
-struct netdev_rx_queue {
-	struct rps_map *rps_map;
-	struct rps_dev_flow_table *rps_flow_table;
-	struct kobject kobj;
-	struct net_device *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-	struct xsk_buff_pool *pool;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xps_map {
-	unsigned int len;
-	unsigned int alloc_len;
-	struct callback_head rcu;
-	u16 queues[0];
-};
-
-struct xps_dev_maps {
-	struct callback_head rcu;
-	struct xps_map *attr_map[0];
-};
-
-struct netdev_fcoe_hbainfo {
-	char manufacturer[64];
-	char serial_number[64];
-	char hardware_version[64];
-	char driver_version[64];
-	char optionrom_version[64];
-	char firmware_version[64];
-	char model[256];
-	char model_description[256];
-};
-
-struct netdev_phys_item_id {
-	unsigned char id[32];
-	unsigned char id_len;
-};
-
-enum tc_setup_type {
-	TC_SETUP_QDISC_MQPRIO = 0,
-	TC_SETUP_CLSU32 = 1,
-	TC_SETUP_CLSFLOWER = 2,
-	TC_SETUP_CLSMATCHALL = 3,
-	TC_SETUP_CLSBPF = 4,
-	TC_SETUP_BLOCK = 5,
-	TC_SETUP_QDISC_CBS = 6,
-	TC_SETUP_QDISC_RED = 7,
-	TC_SETUP_QDISC_PRIO = 8,
-	TC_SETUP_QDISC_MQ = 9,
-	TC_SETUP_QDISC_ETF = 10,
-	TC_SETUP_ROOT_QDISC = 11,
-	TC_SETUP_QDISC_GRED = 12,
-	TC_SETUP_QDISC_TAPRIO = 13,
-	TC_SETUP_FT = 14,
-	TC_SETUP_QDISC_ETS = 15,
-	TC_SETUP_QDISC_TBF = 16,
-	TC_SETUP_QDISC_FIFO = 17,
-};
-
-enum bpf_netdev_command {
-	XDP_SETUP_PROG = 0,
-	XDP_SETUP_PROG_HW = 1,
-	BPF_OFFLOAD_MAP_ALLOC = 2,
-	BPF_OFFLOAD_MAP_FREE = 3,
-	XDP_SETUP_XSK_POOL = 4,
-};
-
-struct netdev_bpf {
-	enum bpf_netdev_command command;
-	union {
-		struct {
-			u32 flags;
-			struct bpf_prog *prog;
-			struct netlink_ext_ack *extack;
-		};
-		struct {
-			struct bpf_offloaded_map *offmap;
-		};
-		struct {
-			struct xsk_buff_pool *pool;
-			u16 queue_id;
-		} xsk;
-	};
-};
-
-struct xfrmdev_ops {
-	int (*xdo_dev_state_add)(struct xfrm_state *);
-	void (*xdo_dev_state_delete)(struct xfrm_state *);
-	void (*xdo_dev_state_free)(struct xfrm_state *);
-	bool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);
-	void (*xdo_dev_state_advance_esn)(struct xfrm_state *);
-};
-
-struct dev_ifalias {
-	struct callback_head rcuhead;
-	char ifalias[0];
-};
-
-struct netdev_name_node {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device *dev;
-	const char *name;
-};
-
-struct udp_tunnel_info;
-
-struct devlink_port;
-
-struct ip_tunnel_parm;
-
-struct net_device_ops {
-	int (*ndo_init)(struct net_device *);
-	void (*ndo_uninit)(struct net_device *);
-	int (*ndo_open)(struct net_device *);
-	int (*ndo_stop)(struct net_device *);
-	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
-	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
-	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
-	void (*ndo_change_rx_flags)(struct net_device *, int);
-	void (*ndo_set_rx_mode)(struct net_device *);
-	int (*ndo_set_mac_address)(struct net_device *, void *);
-	int (*ndo_validate_addr)(struct net_device *);
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-	int (*ndo_set_config)(struct net_device *, struct ifmap *);
-	int (*ndo_change_mtu)(struct net_device *, int);
-	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
-	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
-	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
-	bool (*ndo_has_offload_stats)(const struct net_device *, int);
-	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
-	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
-	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
-	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
-	void (*ndo_poll_controller)(struct net_device *);
-	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
-	void (*ndo_netpoll_cleanup)(struct net_device *);
-	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
-	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
-	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
-	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
-	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
-	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
-	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
-	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
-	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
-	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
-	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
-	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
-	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
-	int (*ndo_fcoe_enable)(struct net_device *);
-	int (*ndo_fcoe_disable)(struct net_device *);
-	int (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_ddp_done)(struct net_device *, u16);
-	int (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);
-	int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);
-	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
-	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
-	int (*ndo_del_slave)(struct net_device *, struct net_device *);
-	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
-	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
-	int (*ndo_set_features)(struct net_device *, netdev_features_t);
-	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
-	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
-	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);
-	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
-	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
-	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
-	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
-	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
-	int (*ndo_change_carrier)(struct net_device *, bool);
-	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);
-	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
-	void (*ndo_dfwd_del_station)(struct net_device *, void *);
-	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
-	int (*ndo_get_iflink)(const struct net_device *);
-	int (*ndo_change_proto_down)(struct net_device *, bool);
-	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
-	void (*ndo_set_rx_headroom)(struct net_device *, int);
-	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
-	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
-	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
-	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
-	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
-	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
-};
-
-struct neigh_parms {
-	possible_net_t net;
-	struct net_device *dev;
-	struct list_head list;
-	int (*neigh_setup)(struct neighbour *);
-	struct neigh_table *tbl;
-	void *sysctl_table;
-	int dead;
-	refcount_t refcnt;
-	struct callback_head callback_head;
-	int reachable_time;
-	int data[13];
-	long unsigned int data_state[1];
-};
-
-struct pcpu_lstats {
-	u64_stats_t packets;
-	u64_stats_t bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct pcpu_sw_netstats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct iw_request_info;
-
-union iwreq_data;
-
-typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
-
-struct iw_priv_args;
-
-struct iw_statistics;
-
-struct iw_handler_def {
-	const iw_handler *standard;
-	__u16 num_standard;
-	__u16 num_private;
-	__u16 num_private_args;
-	const iw_handler *private;
-	const struct iw_priv_args *private_args;
-	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
-};
-
-struct l3mdev_ops {
-	u32 (*l3mdev_fib_table)(const struct net_device *);
-	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
-	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
-	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
-};
-
-struct nd_opt_hdr;
-
-struct ndisc_options;
-
-struct prefix_info;
-
-struct ndisc_ops {
-	int (*is_useropt)(u8);
-	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
-	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
-	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
-	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
-	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
-};
-
-enum tls_offload_ctx_dir {
-	TLS_OFFLOAD_CTX_DIR_RX = 0,
-	TLS_OFFLOAD_CTX_DIR_TX = 1,
-};
-
-struct tls_crypto_info;
-
-struct tls_context;
-
-struct tlsdev_ops {
-	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
-	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
-	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
-};
-
-struct ipv6_devstat {
-	struct proc_dir_entry *proc_dir_entry;
-	struct ipstats_mib *ipv6;
-	struct icmpv6_mib_device *icmpv6dev;
-	struct icmpv6msg_mib_device *icmpv6msgdev;
-};
-
-struct ifmcaddr6;
-
-struct ifacaddr6;
-
-struct inet6_dev {
-	struct net_device *dev;
-	struct list_head addr_list;
-	struct ifmcaddr6 *mc_list;
-	struct ifmcaddr6 *mc_tomb;
-	spinlock_t mc_lock;
-	unsigned char mc_qrv;
-	unsigned char mc_gq_running;
-	unsigned char mc_ifc_count;
-	unsigned char mc_dad_count;
-	long unsigned int mc_v1_seen;
-	long unsigned int mc_qi;
-	long unsigned int mc_qri;
-	long unsigned int mc_maxdelay;
-	struct timer_list mc_gq_timer;
-	struct timer_list mc_ifc_timer;
-	struct timer_list mc_dad_timer;
-	struct ifacaddr6 *ac_list;
-	rwlock_t lock;
-	refcount_t refcnt;
-	__u32 if_flags;
-	int dead;
-	u32 desync_factor;
-	struct list_head tempaddr_list;
-	struct in6_addr token;
-	struct neigh_parms *nd_parms;
-	struct ipv6_devconf cnf;
-	struct ipv6_devstat stats;
-	struct timer_list rs_timer;
-	__s32 rs_interval;
-	__u8 rs_probes;
-	long unsigned int tstamp;
-	struct callback_head rcu;
-};
-
-struct tcf_proto;
-
-struct tcf_block;
-
-struct mini_Qdisc {
-	struct tcf_proto *filter_list;
-	struct tcf_block *block;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
-};
-
-struct rtnl_link_ops {
-	struct list_head list;
-	const char *kind;
-	size_t priv_size;
-	void (*setup)(struct net_device *);
-	unsigned int maxtype;
-	const struct nla_policy *policy;
-	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	void (*dellink)(struct net_device *, struct list_head *);
-	size_t (*get_size)(const struct net_device *);
-	int (*fill_info)(struct sk_buff *, const struct net_device *);
-	size_t (*get_xstats_size)(const struct net_device *);
-	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
-	unsigned int (*get_num_tx_queues)();
-	unsigned int (*get_num_rx_queues)();
-	unsigned int slave_maxtype;
-	const struct nla_policy *slave_policy;
-	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
-	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
-	struct net * (*get_link_net)(const struct net_device *);
-	size_t (*get_linkxstats_size)(const struct net_device *, int);
-	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
-};
-
-struct udp_tunnel_nic_table_info {
-	unsigned int n_entries;
-	unsigned int tunnel_types;
-};
-
-struct udp_tunnel_nic_shared;
-
-struct udp_tunnel_nic_info {
-	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*sync_table)(struct net_device *, unsigned int);
-	struct udp_tunnel_nic_shared *shared;
-	unsigned int flags;
-	struct udp_tunnel_nic_table_info tables[4];
-};
-
-enum {
-	RTAX_UNSPEC = 0,
-	RTAX_LOCK = 1,
-	RTAX_MTU = 2,
-	RTAX_WINDOW = 3,
-	RTAX_RTT = 4,
-	RTAX_RTTVAR = 5,
-	RTAX_SSTHRESH = 6,
-	RTAX_CWND = 7,
-	RTAX_ADVMSS = 8,
-	RTAX_REORDERING = 9,
-	RTAX_HOPLIMIT = 10,
-	RTAX_INITCWND = 11,
-	RTAX_FEATURES = 12,
-	RTAX_RTO_MIN = 13,
-	RTAX_INITRWND = 14,
-	RTAX_QUICKACK = 15,
-	RTAX_CC_ALGO = 16,
-	RTAX_FASTOPEN_NO_COOKIE = 17,
-	__RTAX_MAX = 18,
-};
-
-struct tcmsg {
-	unsigned char tcm_family;
-	unsigned char tcm__pad1;
-	short unsigned int tcm__pad2;
-	int tcm_ifindex;
-	__u32 tcm_handle;
-	__u32 tcm_parent;
-	__u32 tcm_info;
-};
-
-struct gnet_stats_basic_cpu {
-	struct gnet_stats_basic_packed bstats;
-	struct u64_stats_sync syncp;
-};
-
-struct gnet_dump {
-	spinlock_t *lock;
-	struct sk_buff *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
-};
-
-struct netlink_range_validation {
-	u64 min;
-	u64 max;
-};
-
-struct netlink_range_validation_signed {
-	s64 min;
-	s64 max;
-};
-
-enum flow_action_hw_stats_bit {
-	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
-	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
-	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
-	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
-};
-
-struct flow_block {
-	struct list_head cb_list;
-};
-
-typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
-
-struct qdisc_size_table {
-	struct callback_head rcu;
-	struct list_head list;
-	struct tc_sizespec szopts;
-	int refcnt;
-	u16 data[0];
-};
-
-struct Qdisc_class_ops;
-
-struct Qdisc_ops {
-	struct Qdisc_ops *next;
-	const struct Qdisc_class_ops *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	struct sk_buff * (*peek)(struct Qdisc *);
-	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc *);
-	void (*destroy)(struct Qdisc *);
-	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc *);
-	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	int (*dump)(struct Qdisc *, struct sk_buff *);
-	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
-	void (*ingress_block_set)(struct Qdisc *, u32);
-	void (*egress_block_set)(struct Qdisc *, u32);
-	u32 (*ingress_block_get)(struct Qdisc *);
-	u32 (*egress_block_get)(struct Qdisc *);
-	struct module *owner;
-};
-
-struct qdisc_walker;
-
-struct Qdisc_class_ops {
-	unsigned int flags;
-	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
-	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
-	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc *, u32);
-	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc *, long unsigned int);
-	void (*walk)(struct Qdisc *, struct qdisc_walker *);
-	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
-	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
-};
-
-struct tcf_chain;
-
-struct tcf_block {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	u32 classid;
-	refcount_t refcnt;
-	struct net *net;
-	struct Qdisc *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
-	struct {
-		struct tcf_chain *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
-};
-
-struct tcf_result;
-
-struct tcf_proto_ops;
-
-struct tcf_proto {
-	struct tcf_proto *next;
-	void *root;
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops *ops;
-	struct tcf_chain *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
-};
-
-struct tcf_result {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
-};
-
-struct tcf_walker;
-
-struct tcf_proto_ops {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	int (*init)(struct tcf_proto *);
-	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto *, u32);
-	void (*put)(struct tcf_proto *, void *);
-	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto *);
-	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto *, void *);
-	void (*hw_del)(struct tcf_proto *, void *);
-	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
-	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
-	struct module *owner;
-	int flags;
-};
-
-struct tcf_chain {
-	struct mutex filter_chain_lock;
-	struct tcf_proto *filter_chain;
-	struct list_head list;
-	struct tcf_block *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct sock_fprog_kern {
-	u16 len;
-	struct sock_filter *filter;
-};
-
-struct sk_filter {
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct bpf_prog *prog;
-};
-
-enum {
-	NEIGH_VAR_MCAST_PROBES = 0,
-	NEIGH_VAR_UCAST_PROBES = 1,
-	NEIGH_VAR_APP_PROBES = 2,
-	NEIGH_VAR_MCAST_REPROBES = 3,
-	NEIGH_VAR_RETRANS_TIME = 4,
-	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
-	NEIGH_VAR_DELAY_PROBE_TIME = 6,
-	NEIGH_VAR_GC_STALETIME = 7,
-	NEIGH_VAR_QUEUE_LEN_BYTES = 8,
-	NEIGH_VAR_PROXY_QLEN = 9,
-	NEIGH_VAR_ANYCAST_DELAY = 10,
-	NEIGH_VAR_PROXY_DELAY = 11,
-	NEIGH_VAR_LOCKTIME = 12,
-	NEIGH_VAR_QUEUE_LEN = 13,
-	NEIGH_VAR_RETRANS_TIME_MS = 14,
-	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 15,
-	NEIGH_VAR_GC_INTERVAL = 16,
-	NEIGH_VAR_GC_THRESH1 = 17,
-	NEIGH_VAR_GC_THRESH2 = 18,
-	NEIGH_VAR_GC_THRESH3 = 19,
-	NEIGH_VAR_MAX = 20,
-};
-
-struct pneigh_entry;
-
-struct neigh_statistics;
-
-struct neigh_hash_table;
-
-struct neigh_table {
-	int family;
-	unsigned int entry_size;
-	unsigned int key_len;
-	__be16 protocol;
-	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
-	bool (*key_eq)(const struct neighbour *, const void *);
-	int (*constructor)(struct neighbour *);
-	int (*pconstructor)(struct pneigh_entry *);
-	void (*pdestructor)(struct pneigh_entry *);
-	void (*proxy_redo)(struct sk_buff *);
-	int (*is_multicast)(const void *);
-	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
-	char *id;
-	struct neigh_parms parms;
-	struct list_head parms_list;
-	int gc_interval;
-	int gc_thresh1;
-	int gc_thresh2;
-	int gc_thresh3;
-	long unsigned int last_flush;
-	struct delayed_work gc_work;
-	struct timer_list proxy_timer;
-	struct sk_buff_head proxy_queue;
-	atomic_t entries;
-	atomic_t gc_entries;
-	struct list_head gc_list;
-	rwlock_t lock;
-	long unsigned int last_rand;
-	struct neigh_statistics *stats;
-	struct neigh_hash_table *nht;
-	struct pneigh_entry **phash_buckets;
-};
-
-struct neigh_statistics {
-	long unsigned int allocs;
-	long unsigned int destroys;
-	long unsigned int hash_grows;
-	long unsigned int res_failed;
-	long unsigned int lookups;
-	long unsigned int hits;
-	long unsigned int rcv_probes_mcast;
-	long unsigned int rcv_probes_ucast;
-	long unsigned int periodic_gc_runs;
-	long unsigned int forced_gc_runs;
-	long unsigned int unres_discards;
-	long unsigned int table_fulls;
-};
-
-struct neigh_ops {
-	int family;
-	void (*solicit)(struct neighbour *, struct sk_buff *);
-	void (*error_report)(struct neighbour *, struct sk_buff *);
-	int (*output)(struct neighbour *, struct sk_buff *);
-	int (*connected_output)(struct neighbour *, struct sk_buff *);
-};
-
-struct pneigh_entry {
-	struct pneigh_entry *next;
-	possible_net_t net;
-	struct net_device *dev;
-	u8 flags;
-	u8 protocol;
-	u8 key[0];
-};
-
-struct neigh_hash_table {
-	struct neighbour **hash_buckets;
-	unsigned int hash_shift;
-	__u32 hash_rnd[4];
-	struct callback_head rcu;
-};
-
-enum {
-	TCP_ESTABLISHED = 1,
-	TCP_SYN_SENT = 2,
-	TCP_SYN_RECV = 3,
-	TCP_FIN_WAIT1 = 4,
-	TCP_FIN_WAIT2 = 5,
-	TCP_TIME_WAIT = 6,
-	TCP_CLOSE = 7,
-	TCP_CLOSE_WAIT = 8,
-	TCP_LAST_ACK = 9,
-	TCP_LISTEN = 10,
-	TCP_CLOSING = 11,
-	TCP_NEW_SYN_RECV = 12,
-	TCP_MAX_STATES = 13,
-};
-
-struct fib_rule_hdr {
-	__u8 family;
-	__u8 dst_len;
-	__u8 src_len;
-	__u8 tos;
-	__u8 table;
-	__u8 res1;
-	__u8 res2;
-	__u8 action;
-	__u32 flags;
-};
-
-struct fib_rule_port_range {
-	__u16 start;
-	__u16 end;
-};
-
-struct fib_kuid_range {
-	kuid_t start;
-	kuid_t end;
-};
-
-struct fib_rule {
-	struct list_head list;
-	int iifindex;
-	int oifindex;
-	u32 mark;
-	u32 mark_mask;
-	u32 flags;
-	u32 table;
-	u8 action;
-	u8 l3mdev;
-	u8 proto;
-	u8 ip_proto;
-	u32 target;
-	__be64 tun_id;
-	struct fib_rule *ctarget;
-	struct net *fr_net;
-	refcount_t refcnt;
-	u32 pref;
-	int suppress_ifgroup;
-	int suppress_prefixlen;
-	char iifname[16];
-	char oifname[16];
-	struct fib_kuid_range uid_range;
-	struct fib_rule_port_range sport_range;
-	struct fib_rule_port_range dport_range;
-	struct callback_head rcu;
-};
-
-struct fib_lookup_arg {
-	void *lookup_ptr;
-	const void *lookup_data;
-	void *result;
-	struct fib_rule *rule;
-	u32 table;
-	int flags;
-};
-
-struct smc_hashinfo;
-
-struct request_sock_ops;
-
-struct timewait_sock_ops;
-
-struct udp_table;
-
-struct raw_hashinfo;
-
-struct proto {
-	void (*close)(struct sock *, long int);
-	int (*pre_connect)(struct sock *, struct sockaddr *, int);
-	int (*connect)(struct sock *, struct sockaddr *, int);
-	int (*disconnect)(struct sock *, int);
-	struct sock * (*accept)(struct sock *, int, int *, bool);
-	int (*ioctl)(struct sock *, int, long unsigned int);
-	int (*init)(struct sock *);
-	void (*destroy)(struct sock *);
-	void (*shutdown)(struct sock *, int);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*keepalive)(struct sock *, int);
-	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
-	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
-	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);
-	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
-	int (*bind)(struct sock *, struct sockaddr *, int);
-	int (*bind_add)(struct sock *, struct sockaddr *, int);
-	int (*backlog_rcv)(struct sock *, struct sk_buff *);
-	void (*release_cb)(struct sock *);
-	int (*hash)(struct sock *);
-	void (*unhash)(struct sock *);
-	void (*rehash)(struct sock *);
-	int (*get_port)(struct sock *, short unsigned int);
-	unsigned int inuse_idx;
-	bool (*stream_memory_free)(const struct sock *, int);
-	bool (*stream_memory_read)(const struct sock *);
-	void (*enter_memory_pressure)(struct sock *);
-	void (*leave_memory_pressure)(struct sock *);
-	atomic_long_t *memory_allocated;
-	struct percpu_counter *sockets_allocated;
-	long unsigned int *memory_pressure;
-	long int *sysctl_mem;
-	int *sysctl_wmem;
-	int *sysctl_rmem;
-	u32 sysctl_wmem_offset;
-	u32 sysctl_rmem_offset;
-	int max_header;
-	bool no_autobind;
-	struct kmem_cache *slab;
-	unsigned int obj_size;
-	slab_flags_t slab_flags;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct percpu_counter *orphan_count;
-	struct request_sock_ops *rsk_prot;
-	struct timewait_sock_ops *twsk_prot;
-	union {
-		struct inet_hashinfo *hashinfo;
-		struct udp_table *udp_table;
-		struct raw_hashinfo *raw_hash;
-		struct smc_hashinfo *smc_hash;
-	} h;
-	struct module *owner;
-	char name[32];
-	struct list_head node;
-	int (*diag_destroy)(struct sock *, int);
-};
-
-struct request_sock;
-
-struct request_sock_ops {
-	int family;
-	unsigned int obj_size;
-	struct kmem_cache *slab;
-	char *slab_name;
-	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
-	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
-	void (*send_reset)(const struct sock *, struct sk_buff *);
-	void (*destructor)(struct request_sock *);
-	void (*syn_ack_timeout)(const struct request_sock *);
-};
-
-struct timewait_sock_ops {
-	struct kmem_cache *twsk_slab;
-	char *twsk_slab_name;
-	unsigned int twsk_obj_size;
-	int (*twsk_unique)(struct sock *, struct sock *, void *);
-	void (*twsk_destructor)(struct sock *);
-};
-
-struct saved_syn;
-
-struct request_sock {
-	struct sock_common __req_common;
-	struct request_sock *dl_next;
-	u16 mss;
-	u8 num_retrans;
-	u8 syncookie: 1;
-	u8 num_timeout: 7;
-	u32 ts_recent;
-	struct timer_list rsk_timer;
-	const struct request_sock_ops *rsk_ops;
-	struct sock *sk;
-	struct saved_syn *saved_syn;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct saved_syn {
-	u32 mac_hdrlen;
-	u32 network_hdrlen;
-	u32 tcp_hdrlen;
-	u8 data[0];
-};
-
-enum tsq_enum {
-	TSQ_THROTTLED = 0,
-	TSQ_QUEUED = 1,
-	TCP_TSQ_DEFERRED = 2,
-	TCP_WRITE_TIMER_DEFERRED = 3,
-	TCP_DELACK_TIMER_DEFERRED = 4,
-	TCP_MTU_REDUCED_DEFERRED = 5,
-};
-
-struct ip6_sf_list {
-	struct ip6_sf_list *sf_next;
-	struct in6_addr sf_addr;
-	long unsigned int sf_count[2];
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ifmcaddr6 {
-	struct in6_addr mca_addr;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *next;
-	struct ip6_sf_list *mca_sources;
-	struct ip6_sf_list *mca_tomb;
-	unsigned int mca_sfmode;
-	unsigned char mca_crcount;
-	long unsigned int mca_sfcount[2];
-	struct timer_list mca_timer;
-	unsigned int mca_flags;
-	int mca_users;
-	refcount_t mca_refcnt;
-	spinlock_t mca_lock;
-	long unsigned int mca_cstamp;
-	long unsigned int mca_tstamp;
-};
-
-struct ifacaddr6 {
-	struct in6_addr aca_addr;
-	struct fib6_info *aca_rt;
-	struct ifacaddr6 *aca_next;
-	struct hlist_node aca_addr_lst;
-	int aca_users;
-	refcount_t aca_refcnt;
-	long unsigned int aca_cstamp;
-	long unsigned int aca_tstamp;
-	struct callback_head rcu;
-};
-
-enum {
-	__ND_OPT_PREFIX_INFO_END = 0,
-	ND_OPT_SOURCE_LL_ADDR = 1,
-	ND_OPT_TARGET_LL_ADDR = 2,
-	ND_OPT_PREFIX_INFO = 3,
-	ND_OPT_REDIRECT_HDR = 4,
-	ND_OPT_MTU = 5,
-	ND_OPT_NONCE = 14,
-	__ND_OPT_ARRAY_MAX = 15,
-	ND_OPT_ROUTE_INFO = 24,
-	ND_OPT_RDNSS = 25,
-	ND_OPT_DNSSL = 31,
-	ND_OPT_6CO = 34,
-	ND_OPT_CAPTIVE_PORTAL = 37,
-	ND_OPT_PREF64 = 38,
-	__ND_OPT_MAX = 39,
-};
-
-struct nd_opt_hdr {
-	__u8 nd_opt_type;
-	__u8 nd_opt_len;
-};
-
-struct ndisc_options {
-	struct nd_opt_hdr *nd_opt_array[15];
-	struct nd_opt_hdr *nd_opts_ri;
-	struct nd_opt_hdr *nd_opts_ri_end;
-	struct nd_opt_hdr *nd_useropts;
-	struct nd_opt_hdr *nd_useropts_end;
-	struct nd_opt_hdr *nd_802154_opt_array[3];
-};
-
-struct prefix_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved: 6;
-	__u8 autoconf: 1;
-	__u8 onlink: 1;
-	__be32 valid;
-	__be32 prefered;
-	__be32 reserved2;
-	struct in6_addr prefix;
-};
-
-enum nfs_opnum4 {
-	OP_ACCESS = 3,
-	OP_CLOSE = 4,
-	OP_COMMIT = 5,
-	OP_CREATE = 6,
-	OP_DELEGPURGE = 7,
-	OP_DELEGRETURN = 8,
-	OP_GETATTR = 9,
-	OP_GETFH = 10,
-	OP_LINK = 11,
-	OP_LOCK = 12,
-	OP_LOCKT = 13,
-	OP_LOCKU = 14,
-	OP_LOOKUP = 15,
-	OP_LOOKUPP = 16,
-	OP_NVERIFY = 17,
-	OP_OPEN = 18,
-	OP_OPENATTR = 19,
-	OP_OPEN_CONFIRM = 20,
-	OP_OPEN_DOWNGRADE = 21,
-	OP_PUTFH = 22,
-	OP_PUTPUBFH = 23,
-	OP_PUTROOTFH = 24,
-	OP_READ = 25,
-	OP_READDIR = 26,
-	OP_READLINK = 27,
-	OP_REMOVE = 28,
-	OP_RENAME = 29,
-	OP_RENEW = 30,
-	OP_RESTOREFH = 31,
-	OP_SAVEFH = 32,
-	OP_SECINFO = 33,
-	OP_SETATTR = 34,
-	OP_SETCLIENTID = 35,
-	OP_SETCLIENTID_CONFIRM = 36,
-	OP_VERIFY = 37,
-	OP_WRITE = 38,
-	OP_RELEASE_LOCKOWNER = 39,
-	OP_BACKCHANNEL_CTL = 40,
-	OP_BIND_CONN_TO_SESSION = 41,
-	OP_EXCHANGE_ID = 42,
-	OP_CREATE_SESSION = 43,
-	OP_DESTROY_SESSION = 44,
-	OP_FREE_STATEID = 45,
-	OP_GET_DIR_DELEGATION = 46,
-	OP_GETDEVICEINFO = 47,
-	OP_GETDEVICELIST = 48,
-	OP_LAYOUTCOMMIT = 49,
-	OP_LAYOUTGET = 50,
-	OP_LAYOUTRETURN = 51,
-	OP_SECINFO_NO_NAME = 52,
-	OP_SEQUENCE = 53,
-	OP_SET_SSV = 54,
-	OP_TEST_STATEID = 55,
-	OP_WANT_DELEGATION = 56,
-	OP_DESTROY_CLIENTID = 57,
-	OP_RECLAIM_COMPLETE = 58,
-	OP_ALLOCATE = 59,
-	OP_COPY = 60,
-	OP_COPY_NOTIFY = 61,
-	OP_DEALLOCATE = 62,
-	OP_IO_ADVISE = 63,
-	OP_LAYOUTERROR = 64,
-	OP_LAYOUTSTATS = 65,
-	OP_OFFLOAD_CANCEL = 66,
-	OP_OFFLOAD_STATUS = 67,
-	OP_READ_PLUS = 68,
-	OP_SEEK = 69,
-	OP_WRITE_SAME = 70,
-	OP_CLONE = 71,
-	OP_GETXATTR = 72,
-	OP_SETXATTR = 73,
-	OP_LISTXATTRS = 74,
-	OP_REMOVEXATTR = 75,
-	OP_ILLEGAL = 10044,
-};
-
-enum perf_branch_sample_type_shift {
-	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
-	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
-	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
-	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
-	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
-	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
-	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
-	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
-	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
-	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
-	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
-	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
-	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
-	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
-	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
-	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
-	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
-	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
-};
-
-struct uuidcmp {
-	const char *uuid;
-	int len;
-};
-
-typedef __u64 __le64;
-
-struct minix_super_block {
-	__u16 s_ninodes;
-	__u16 s_nzones;
-	__u16 s_imap_blocks;
-	__u16 s_zmap_blocks;
-	__u16 s_firstdatazone;
-	__u16 s_log_zone_size;
-	__u32 s_max_size;
-	__u16 s_magic;
-	__u16 s_state;
-	__u32 s_zones;
-};
-
-struct romfs_super_block {
-	__be32 word0;
-	__be32 word1;
-	__be32 size;
-	__be32 checksum;
-	char name[0];
-};
-
-struct cramfs_inode {
-	__u32 mode: 16;
-	__u32 uid: 16;
-	__u32 size: 24;
-	__u32 gid: 8;
-	__u32 namelen: 6;
-	__u32 offset: 26;
-};
-
-struct cramfs_info {
-	__u32 crc;
-	__u32 edition;
-	__u32 blocks;
-	__u32 files;
-};
-
-struct cramfs_super {
-	__u32 magic;
-	__u32 size;
-	__u32 flags;
-	__u32 future;
-	__u8 signature[16];
-	struct cramfs_info fsid;
-	__u8 name[16];
-	struct cramfs_inode root;
-};
-
-struct squashfs_super_block {
-	__le32 s_magic;
-	__le32 inodes;
-	__le32 mkfs_time;
-	__le32 block_size;
-	__le32 fragments;
-	__le16 compression;
-	__le16 block_log;
-	__le16 flags;
-	__le16 no_ids;
-	__le16 s_major;
-	__le16 s_minor;
-	__le64 root_inode;
-	__le64 bytes_used;
-	__le64 id_table_start;
-	__le64 xattr_id_table_start;
-	__le64 inode_table_start;
-	__le64 directory_table_start;
-	__le64 fragment_table_start;
-	__le64 lookup_table_start;
-};
-
-typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
-
-struct subprocess_info {
-	struct work_struct work;
-	struct completion *complete;
-	const char *path;
-	char **argv;
-	char **envp;
-	int wait;
-	int retval;
-	int (*init)(struct subprocess_info *, struct cred *);
-	void (*cleanup)(struct subprocess_info *);
-	void *data;
-};
-
-typedef phys_addr_t resource_size_t;
-
-struct resource {
-	resource_size_t start;
-	resource_size_t end;
-	const char *name;
-	long unsigned int flags;
-	long unsigned int desc;
-	struct resource *parent;
-	struct resource *sibling;
-	struct resource *child;
-};
-
-struct hash {
-	int ino;
-	int minor;
-	int major;
-	umode_t mode;
-	struct hash *next;
-	char name[4098];
-};
-
-struct dir_entry {
-	struct list_head list;
-	char *name;
-	time64_t mtime;
-};
-
-enum state {
-	Start = 0,
-	Collect = 1,
-	GotHeader = 2,
-	SkipIt = 3,
-	GotName = 4,
-	CopyFile = 5,
-	GotSymlink = 6,
-	Reset = 7,
-};
-
-enum migratetype {
-	MIGRATE_UNMOVABLE = 0,
-	MIGRATE_MOVABLE = 1,
-	MIGRATE_RECLAIMABLE = 2,
-	MIGRATE_PCPTYPES = 3,
-	MIGRATE_HIGHATOMIC = 3,
-	MIGRATE_CMA = 4,
-	MIGRATE_ISOLATE = 5,
-	MIGRATE_TYPES = 6,
-};
-
-enum numa_stat_item {
-	NUMA_HIT = 0,
-	NUMA_MISS = 1,
-	NUMA_FOREIGN = 2,
-	NUMA_INTERLEAVE_HIT = 3,
-	NUMA_LOCAL = 4,
-	NUMA_OTHER = 5,
-	NR_VM_NUMA_STAT_ITEMS = 6,
-};
-
-enum zone_stat_item {
-	NR_FREE_PAGES = 0,
-	NR_ZONE_LRU_BASE = 1,
-	NR_ZONE_INACTIVE_ANON = 1,
-	NR_ZONE_ACTIVE_ANON = 2,
-	NR_ZONE_INACTIVE_FILE = 3,
-	NR_ZONE_ACTIVE_FILE = 4,
-	NR_ZONE_UNEVICTABLE = 5,
-	NR_ZONE_WRITE_PENDING = 6,
-	NR_MLOCK = 7,
-	NR_PAGETABLE = 8,
-	NR_BOUNCE = 9,
-	NR_ZSPAGES = 10,
-	NR_FREE_CMA_PAGES = 11,
-	NR_VM_ZONE_STAT_ITEMS = 12,
-};
-
-enum zone_watermarks {
-	WMARK_MIN = 0,
-	WMARK_LOW = 1,
-	WMARK_HIGH = 2,
-	NR_WMARK = 3,
-};
-
-enum {
-	ZONELIST_FALLBACK = 0,
-	ZONELIST_NOFALLBACK = 1,
-	MAX_ZONELISTS = 2,
-};
-
-enum {
-	DQF_ROOT_SQUASH_B = 0,
-	DQF_SYS_FILE_B = 16,
-	DQF_PRIVATE = 17,
-};
-
-enum {
-	DQST_LOOKUPS = 0,
-	DQST_DROPS = 1,
-	DQST_READS = 2,
-	DQST_WRITES = 3,
-	DQST_CACHE_HITS = 4,
-	DQST_ALLOC_DQUOTS = 5,
-	DQST_FREE_DQUOTS = 6,
-	DQST_SYNCS = 7,
-	_DQST_DQSTAT_LAST = 8,
-};
-
-enum {
-	SB_UNFROZEN = 0,
-	SB_FREEZE_WRITE = 1,
-	SB_FREEZE_PAGEFAULT = 2,
-	SB_FREEZE_FS = 3,
-	SB_FREEZE_COMPLETE = 4,
-};
-
-enum compound_dtor_id {
-	NULL_COMPOUND_DTOR = 0,
-	COMPOUND_PAGE_DTOR = 1,
-	HUGETLB_PAGE_DTOR = 2,
-	TRANSHUGE_PAGE_DTOR = 3,
-	NR_COMPOUND_DTORS = 4,
-};
-
-enum {
-	TSK_TRACE_FL_TRACE_BIT = 0,
-	TSK_TRACE_FL_GRAPH_BIT = 1,
-};
-
-enum ucount_type {
-	UCOUNT_USER_NAMESPACES = 0,
-	UCOUNT_PID_NAMESPACES = 1,
-	UCOUNT_UTS_NAMESPACES = 2,
-	UCOUNT_IPC_NAMESPACES = 3,
-	UCOUNT_NET_NAMESPACES = 4,
-	UCOUNT_MNT_NAMESPACES = 5,
-	UCOUNT_CGROUP_NAMESPACES = 6,
-	UCOUNT_TIME_NAMESPACES = 7,
-	UCOUNT_INOTIFY_INSTANCES = 8,
-	UCOUNT_INOTIFY_WATCHES = 9,
-	UCOUNT_COUNTS = 10,
-};
-
-enum flow_dissector_key_id {
-	FLOW_DISSECTOR_KEY_CONTROL = 0,
-	FLOW_DISSECTOR_KEY_BASIC = 1,
-	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
-	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
-	FLOW_DISSECTOR_KEY_PORTS = 4,
-	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
-	FLOW_DISSECTOR_KEY_ICMP = 6,
-	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
-	FLOW_DISSECTOR_KEY_TIPC = 8,
-	FLOW_DISSECTOR_KEY_ARP = 9,
-	FLOW_DISSECTOR_KEY_VLAN = 10,
-	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
-	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
-	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
-	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
-	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
-	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
-	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
-	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
-	FLOW_DISSECTOR_KEY_MPLS = 19,
-	FLOW_DISSECTOR_KEY_TCP = 20,
-	FLOW_DISSECTOR_KEY_IP = 21,
-	FLOW_DISSECTOR_KEY_CVLAN = 22,
-	FLOW_DISSECTOR_KEY_ENC_IP = 23,
-	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
-	FLOW_DISSECTOR_KEY_META = 25,
-	FLOW_DISSECTOR_KEY_CT = 26,
-	FLOW_DISSECTOR_KEY_HASH = 27,
-	FLOW_DISSECTOR_KEY_MAX = 28,
-};
-
-enum {
-	IPSTATS_MIB_NUM = 0,
-	IPSTATS_MIB_INPKTS = 1,
-	IPSTATS_MIB_INOCTETS = 2,
-	IPSTATS_MIB_INDELIVERS = 3,
-	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
-	IPSTATS_MIB_OUTPKTS = 5,
-	IPSTATS_MIB_OUTOCTETS = 6,
-	IPSTATS_MIB_INHDRERRORS = 7,
-	IPSTATS_MIB_INTOOBIGERRORS = 8,
-	IPSTATS_MIB_INNOROUTES = 9,
-	IPSTATS_MIB_INADDRERRORS = 10,
-	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
-	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
-	IPSTATS_MIB_INDISCARDS = 13,
-	IPSTATS_MIB_OUTDISCARDS = 14,
-	IPSTATS_MIB_OUTNOROUTES = 15,
-	IPSTATS_MIB_REASMTIMEOUT = 16,
-	IPSTATS_MIB_REASMREQDS = 17,
-	IPSTATS_MIB_REASMOKS = 18,
-	IPSTATS_MIB_REASMFAILS = 19,
-	IPSTATS_MIB_FRAGOKS = 20,
-	IPSTATS_MIB_FRAGFAILS = 21,
-	IPSTATS_MIB_FRAGCREATES = 22,
-	IPSTATS_MIB_INMCASTPKTS = 23,
-	IPSTATS_MIB_OUTMCASTPKTS = 24,
-	IPSTATS_MIB_INBCASTPKTS = 25,
-	IPSTATS_MIB_OUTBCASTPKTS = 26,
-	IPSTATS_MIB_INMCASTOCTETS = 27,
-	IPSTATS_MIB_OUTMCASTOCTETS = 28,
-	IPSTATS_MIB_INBCASTOCTETS = 29,
-	IPSTATS_MIB_OUTBCASTOCTETS = 30,
-	IPSTATS_MIB_CSUMERRORS = 31,
-	IPSTATS_MIB_NOECTPKTS = 32,
-	IPSTATS_MIB_ECT1PKTS = 33,
-	IPSTATS_MIB_ECT0PKTS = 34,
-	IPSTATS_MIB_CEPKTS = 35,
-	IPSTATS_MIB_REASM_OVERLAPS = 36,
-	__IPSTATS_MIB_MAX = 37,
-};
-
-enum {
-	ICMP_MIB_NUM = 0,
-	ICMP_MIB_INMSGS = 1,
-	ICMP_MIB_INERRORS = 2,
-	ICMP_MIB_INDESTUNREACHS = 3,
-	ICMP_MIB_INTIMEEXCDS = 4,
-	ICMP_MIB_INPARMPROBS = 5,
-	ICMP_MIB_INSRCQUENCHS = 6,
-	ICMP_MIB_INREDIRECTS = 7,
-	ICMP_MIB_INECHOS = 8,
-	ICMP_MIB_INECHOREPS = 9,
-	ICMP_MIB_INTIMESTAMPS = 10,
-	ICMP_MIB_INTIMESTAMPREPS = 11,
-	ICMP_MIB_INADDRMASKS = 12,
-	ICMP_MIB_INADDRMASKREPS = 13,
-	ICMP_MIB_OUTMSGS = 14,
-	ICMP_MIB_OUTERRORS = 15,
-	ICMP_MIB_OUTDESTUNREACHS = 16,
-	ICMP_MIB_OUTTIMEEXCDS = 17,
-	ICMP_MIB_OUTPARMPROBS = 18,
-	ICMP_MIB_OUTSRCQUENCHS = 19,
-	ICMP_MIB_OUTREDIRECTS = 20,
-	ICMP_MIB_OUTECHOS = 21,
-	ICMP_MIB_OUTECHOREPS = 22,
-	ICMP_MIB_OUTTIMESTAMPS = 23,
-	ICMP_MIB_OUTTIMESTAMPREPS = 24,
-	ICMP_MIB_OUTADDRMASKS = 25,
-	ICMP_MIB_OUTADDRMASKREPS = 26,
-	ICMP_MIB_CSUMERRORS = 27,
-	__ICMP_MIB_MAX = 28,
-};
-
-enum {
-	ICMP6_MIB_NUM = 0,
-	ICMP6_MIB_INMSGS = 1,
-	ICMP6_MIB_INERRORS = 2,
-	ICMP6_MIB_OUTMSGS = 3,
-	ICMP6_MIB_OUTERRORS = 4,
-	ICMP6_MIB_CSUMERRORS = 5,
-	__ICMP6_MIB_MAX = 6,
-};
-
-enum {
-	TCP_MIB_NUM = 0,
-	TCP_MIB_RTOALGORITHM = 1,
-	TCP_MIB_RTOMIN = 2,
-	TCP_MIB_RTOMAX = 3,
-	TCP_MIB_MAXCONN = 4,
-	TCP_MIB_ACTIVEOPENS = 5,
-	TCP_MIB_PASSIVEOPENS = 6,
-	TCP_MIB_ATTEMPTFAILS = 7,
-	TCP_MIB_ESTABRESETS = 8,
-	TCP_MIB_CURRESTAB = 9,
-	TCP_MIB_INSEGS = 10,
-	TCP_MIB_OUTSEGS = 11,
-	TCP_MIB_RETRANSSEGS = 12,
-	TCP_MIB_INERRS = 13,
-	TCP_MIB_OUTRSTS = 14,
-	TCP_MIB_CSUMERRORS = 15,
-	__TCP_MIB_MAX = 16,
-};
-
-enum {
-	UDP_MIB_NUM = 0,
-	UDP_MIB_INDATAGRAMS = 1,
-	UDP_MIB_NOPORTS = 2,
-	UDP_MIB_INERRORS = 3,
-	UDP_MIB_OUTDATAGRAMS = 4,
-	UDP_MIB_RCVBUFERRORS = 5,
-	UDP_MIB_SNDBUFERRORS = 6,
-	UDP_MIB_CSUMERRORS = 7,
-	UDP_MIB_IGNOREDMULTI = 8,
-	__UDP_MIB_MAX = 9,
-};
-
-enum {
-	LINUX_MIB_NUM = 0,
-	LINUX_MIB_SYNCOOKIESSENT = 1,
-	LINUX_MIB_SYNCOOKIESRECV = 2,
-	LINUX_MIB_SYNCOOKIESFAILED = 3,
-	LINUX_MIB_EMBRYONICRSTS = 4,
-	LINUX_MIB_PRUNECALLED = 5,
-	LINUX_MIB_RCVPRUNED = 6,
-	LINUX_MIB_OFOPRUNED = 7,
-	LINUX_MIB_OUTOFWINDOWICMPS = 8,
-	LINUX_MIB_LOCKDROPPEDICMPS = 9,
-	LINUX_MIB_ARPFILTER = 10,
-	LINUX_MIB_TIMEWAITED = 11,
-	LINUX_MIB_TIMEWAITRECYCLED = 12,
-	LINUX_MIB_TIMEWAITKILLED = 13,
-	LINUX_MIB_PAWSACTIVEREJECTED = 14,
-	LINUX_MIB_PAWSESTABREJECTED = 15,
-	LINUX_MIB_DELAYEDACKS = 16,
-	LINUX_MIB_DELAYEDACKLOCKED = 17,
-	LINUX_MIB_DELAYEDACKLOST = 18,
-	LINUX_MIB_LISTENOVERFLOWS = 19,
-	LINUX_MIB_LISTENDROPS = 20,
-	LINUX_MIB_TCPHPHITS = 21,
-	LINUX_MIB_TCPPUREACKS = 22,
-	LINUX_MIB_TCPHPACKS = 23,
-	LINUX_MIB_TCPRENORECOVERY = 24,
-	LINUX_MIB_TCPSACKRECOVERY = 25,
-	LINUX_MIB_TCPSACKRENEGING = 26,
-	LINUX_MIB_TCPSACKREORDER = 27,
-	LINUX_MIB_TCPRENOREORDER = 28,
-	LINUX_MIB_TCPTSREORDER = 29,
-	LINUX_MIB_TCPFULLUNDO = 30,
-	LINUX_MIB_TCPPARTIALUNDO = 31,
-	LINUX_MIB_TCPDSACKUNDO = 32,
-	LINUX_MIB_TCPLOSSUNDO = 33,
-	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
-	LINUX_MIB_TCPRENOFAILURES = 35,
-	LINUX_MIB_TCPSACKFAILURES = 36,
-	LINUX_MIB_TCPLOSSFAILURES = 37,
-	LINUX_MIB_TCPFASTRETRANS = 38,
-	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
-	LINUX_MIB_TCPTIMEOUTS = 40,
-	LINUX_MIB_TCPLOSSPROBES = 41,
-	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
-	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
-	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
-	LINUX_MIB_TCPRCVCOLLAPSED = 45,
-	LINUX_MIB_TCPDSACKOLDSENT = 46,
-	LINUX_MIB_TCPDSACKOFOSENT = 47,
-	LINUX_MIB_TCPDSACKRECV = 48,
-	LINUX_MIB_TCPDSACKOFORECV = 49,
-	LINUX_MIB_TCPABORTONDATA = 50,
-	LINUX_MIB_TCPABORTONCLOSE = 51,
-	LINUX_MIB_TCPABORTONMEMORY = 52,
-	LINUX_MIB_TCPABORTONTIMEOUT = 53,
-	LINUX_MIB_TCPABORTONLINGER = 54,
-	LINUX_MIB_TCPABORTFAILED = 55,
-	LINUX_MIB_TCPMEMORYPRESSURES = 56,
-	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
-	LINUX_MIB_TCPSACKDISCARD = 58,
-	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
-	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
-	LINUX_MIB_TCPSPURIOUSRTOS = 61,
-	LINUX_MIB_TCPMD5NOTFOUND = 62,
-	LINUX_MIB_TCPMD5UNEXPECTED = 63,
-	LINUX_MIB_TCPMD5FAILURE = 64,
-	LINUX_MIB_SACKSHIFTED = 65,
-	LINUX_MIB_SACKMERGED = 66,
-	LINUX_MIB_SACKSHIFTFALLBACK = 67,
-	LINUX_MIB_TCPBACKLOGDROP = 68,
-	LINUX_MIB_PFMEMALLOCDROP = 69,
-	LINUX_MIB_TCPMINTTLDROP = 70,
-	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
-	LINUX_MIB_IPRPFILTER = 72,
-	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
-	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
-	LINUX_MIB_TCPREQQFULLDROP = 75,
-	LINUX_MIB_TCPRETRANSFAIL = 76,
-	LINUX_MIB_TCPRCVCOALESCE = 77,
-	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
-	LINUX_MIB_TCPOFOQUEUE = 79,
-	LINUX_MIB_TCPOFODROP = 80,
-	LINUX_MIB_TCPOFOMERGE = 81,
-	LINUX_MIB_TCPCHALLENGEACK = 82,
-	LINUX_MIB_TCPSYNCHALLENGE = 83,
-	LINUX_MIB_TCPFASTOPENACTIVE = 84,
-	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
-	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
-	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
-	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
-	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
-	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
-	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
-	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
-	LINUX_MIB_TCPAUTOCORKING = 93,
-	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
-	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
-	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
-	LINUX_MIB_TCPSYNRETRANS = 97,
-	LINUX_MIB_TCPORIGDATASENT = 98,
-	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
-	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
-	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
-	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
-	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
-	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
-	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
-	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
-	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
-	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
-	LINUX_MIB_TCPWINPROBE = 109,
-	LINUX_MIB_TCPKEEPALIVE = 110,
-	LINUX_MIB_TCPMTUPFAIL = 111,
-	LINUX_MIB_TCPMTUPSUCCESS = 112,
-	LINUX_MIB_TCPDELIVERED = 113,
-	LINUX_MIB_TCPDELIVEREDCE = 114,
-	LINUX_MIB_TCPACKCOMPRESSED = 115,
-	LINUX_MIB_TCPZEROWINDOWDROP = 116,
-	LINUX_MIB_TCPRCVQDROP = 117,
-	LINUX_MIB_TCPWQUEUETOOBIG = 118,
-	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
-	LINUX_MIB_TCPTIMEOUTREHASH = 120,
-	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
-	LINUX_MIB_TCPDSACKRECVSEGS = 122,
-	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
-	__LINUX_MIB_MAX = 124,
-};
-
-enum {
-	LINUX_MIB_XFRMNUM = 0,
-	LINUX_MIB_XFRMINERROR = 1,
-	LINUX_MIB_XFRMINBUFFERERROR = 2,
-	LINUX_MIB_XFRMINHDRERROR = 3,
-	LINUX_MIB_XFRMINNOSTATES = 4,
-	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
-	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
-	LINUX_MIB_XFRMINSTATESEQERROR = 7,
-	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
-	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
-	LINUX_MIB_XFRMINSTATEINVALID = 10,
-	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
-	LINUX_MIB_XFRMINNOPOLS = 12,
-	LINUX_MIB_XFRMINPOLBLOCK = 13,
-	LINUX_MIB_XFRMINPOLERROR = 14,
-	LINUX_MIB_XFRMOUTERROR = 15,
-	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
-	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
-	LINUX_MIB_XFRMOUTNOSTATES = 18,
-	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
-	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
-	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
-	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
-	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
-	LINUX_MIB_XFRMOUTPOLDEAD = 24,
-	LINUX_MIB_XFRMOUTPOLERROR = 25,
-	LINUX_MIB_XFRMFWDHDRERROR = 26,
-	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
-	LINUX_MIB_XFRMACQUIREERROR = 28,
-	__LINUX_MIB_XFRMMAX = 29,
-};
-
-enum {
-	LINUX_MIB_TLSNUM = 0,
-	LINUX_MIB_TLSCURRTXSW = 1,
-	LINUX_MIB_TLSCURRRXSW = 2,
-	LINUX_MIB_TLSCURRTXDEVICE = 3,
-	LINUX_MIB_TLSCURRRXDEVICE = 4,
-	LINUX_MIB_TLSTXSW = 5,
-	LINUX_MIB_TLSRXSW = 6,
-	LINUX_MIB_TLSTXDEVICE = 7,
-	LINUX_MIB_TLSRXDEVICE = 8,
-	LINUX_MIB_TLSDECRYPTERROR = 9,
-	LINUX_MIB_TLSRXDEVICERESYNC = 10,
-	__LINUX_MIB_TLSMAX = 11,
-};
-
-enum nf_inet_hooks {
-	NF_INET_PRE_ROUTING = 0,
-	NF_INET_LOCAL_IN = 1,
-	NF_INET_FORWARD = 2,
-	NF_INET_LOCAL_OUT = 3,
-	NF_INET_POST_ROUTING = 4,
-	NF_INET_NUMHOOKS = 5,
-	NF_INET_INGRESS = 5,
-};
-
-enum {
-	NFPROTO_UNSPEC = 0,
-	NFPROTO_INET = 1,
-	NFPROTO_IPV4 = 2,
-	NFPROTO_ARP = 3,
-	NFPROTO_NETDEV = 5,
-	NFPROTO_BRIDGE = 7,
-	NFPROTO_IPV6 = 10,
-	NFPROTO_DECNET = 12,
-	NFPROTO_NUMPROTO = 13,
-};
-
-enum tcp_conntrack {
-	TCP_CONNTRACK_NONE = 0,
-	TCP_CONNTRACK_SYN_SENT = 1,
-	TCP_CONNTRACK_SYN_RECV = 2,
-	TCP_CONNTRACK_ESTABLISHED = 3,
-	TCP_CONNTRACK_FIN_WAIT = 4,
-	TCP_CONNTRACK_CLOSE_WAIT = 5,
-	TCP_CONNTRACK_LAST_ACK = 6,
-	TCP_CONNTRACK_TIME_WAIT = 7,
-	TCP_CONNTRACK_CLOSE = 8,
-	TCP_CONNTRACK_LISTEN = 9,
-	TCP_CONNTRACK_MAX = 10,
-	TCP_CONNTRACK_IGNORE = 11,
-	TCP_CONNTRACK_RETRANS = 12,
-	TCP_CONNTRACK_UNACK = 13,
-	TCP_CONNTRACK_TIMEOUT_MAX = 14,
-};
-
-enum ct_dccp_states {
-	CT_DCCP_NONE = 0,
-	CT_DCCP_REQUEST = 1,
-	CT_DCCP_RESPOND = 2,
-	CT_DCCP_PARTOPEN = 3,
-	CT_DCCP_OPEN = 4,
-	CT_DCCP_CLOSEREQ = 5,
-	CT_DCCP_CLOSING = 6,
-	CT_DCCP_TIMEWAIT = 7,
-	CT_DCCP_IGNORE = 8,
-	CT_DCCP_INVALID = 9,
-	__CT_DCCP_MAX = 10,
-};
-
-enum ip_conntrack_dir {
-	IP_CT_DIR_ORIGINAL = 0,
-	IP_CT_DIR_REPLY = 1,
-	IP_CT_DIR_MAX = 2,
-};
-
-enum sctp_conntrack {
-	SCTP_CONNTRACK_NONE = 0,
-	SCTP_CONNTRACK_CLOSED = 1,
-	SCTP_CONNTRACK_COOKIE_WAIT = 2,
-	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
-	SCTP_CONNTRACK_ESTABLISHED = 4,
-	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
-	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
-	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
-	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
-	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
-	SCTP_CONNTRACK_MAX = 10,
-};
-
-enum udp_conntrack {
-	UDP_CT_UNREPLIED = 0,
-	UDP_CT_REPLIED = 1,
-	UDP_CT_MAX = 2,
-};
-
-enum gre_conntrack {
-	GRE_CT_UNREPLIED = 0,
-	GRE_CT_REPLIED = 1,
-	GRE_CT_MAX = 2,
-};
-
-enum {
-	XFRM_POLICY_IN = 0,
-	XFRM_POLICY_OUT = 1,
-	XFRM_POLICY_FWD = 2,
-	XFRM_POLICY_MASK = 3,
-	XFRM_POLICY_MAX = 3,
-};
-
-enum netns_bpf_attach_type {
-	NETNS_BPF_INVALID = 4294967295,
-	NETNS_BPF_FLOW_DISSECTOR = 0,
-	NETNS_BPF_SK_LOOKUP = 1,
-	MAX_NETNS_BPF_ATTACH_TYPE = 2,
-};
-
-enum cpu_idle_type {
-	CPU_IDLE = 0,
-	CPU_NOT_IDLE = 1,
-	CPU_NEWLY_IDLE = 2,
-	CPU_MAX_IDLE_TYPES = 3,
-};
-
-enum {
-	__SD_BALANCE_NEWIDLE = 0,
-	__SD_BALANCE_EXEC = 1,
-	__SD_BALANCE_FORK = 2,
-	__SD_BALANCE_WAKE = 3,
-	__SD_WAKE_AFFINE = 4,
-	__SD_ASYM_CPUCAPACITY = 5,
-	__SD_SHARE_CPUCAPACITY = 6,
-	__SD_SHARE_PKG_RESOURCES = 7,
-	__SD_SERIALIZE = 8,
-	__SD_ASYM_PACKING = 9,
-	__SD_PREFER_SIBLING = 10,
-	__SD_OVERLAP = 11,
-	__SD_NUMA = 12,
-	__SD_FLAG_CNT = 13,
-};
-
-enum skb_ext_id {
-	SKB_EXT_BRIDGE_NF = 0,
-	SKB_EXT_SEC_PATH = 1,
-	TC_SKB_EXT = 2,
-	SKB_EXT_MPTCP = 3,
-	SKB_EXT_NUM = 4,
-};
-
-enum audit_ntp_type {
-	AUDIT_NTP_OFFSET = 0,
-	AUDIT_NTP_FREQ = 1,
-	AUDIT_NTP_STATUS = 2,
-	AUDIT_NTP_TAI = 3,
-	AUDIT_NTP_TICK = 4,
-	AUDIT_NTP_ADJUST = 5,
-	AUDIT_NTP_NVALS = 6,
-};
-
-typedef long unsigned int uintptr_t;
-
-struct step_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-};
-
-struct break_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-	u16 imm;
-	u16 mask;
-};
-
-enum dbg_active_el {
-	DBG_ACTIVE_EL0 = 0,
-	DBG_ACTIVE_EL1 = 1,
-};
-
-struct nmi_ctx {
-	u64 hcr;
-	unsigned int cnt;
-};
-
-enum {
-	HI_SOFTIRQ = 0,
-	TIMER_SOFTIRQ = 1,
-	NET_TX_SOFTIRQ = 2,
-	NET_RX_SOFTIRQ = 3,
-	BLOCK_SOFTIRQ = 4,
-	IRQ_POLL_SOFTIRQ = 5,
-	TASKLET_SOFTIRQ = 6,
-	SCHED_SOFTIRQ = 7,
-	HRTIMER_SOFTIRQ = 8,
-	RCU_SOFTIRQ = 9,
-	NR_SOFTIRQS = 10,
-};
-
-struct midr_range {
-	u32 model;
-	u32 rv_min;
-	u32 rv_max;
-};
-
-struct arm64_midr_revidr {
-	u32 midr_rv;
-	u32 revidr_mask;
-};
-
-struct arm64_cpu_capabilities {
-	const char *desc;
-	u16 capability;
-	u16 type;
-	bool (*matches)(const struct arm64_cpu_capabilities *, int);
-	void (*cpu_enable)(const struct arm64_cpu_capabilities *);
-	union {
-		struct {
-			struct midr_range midr_range;
-			const struct arm64_midr_revidr * const fixed_revs;
-		};
-		const struct midr_range *midr_range_list;
-		struct {
-			u32 sys_reg;
-			u8 field_pos;
-			u8 min_field_value;
-			u8 hwcap_type;
-			bool sign;
-			long unsigned int hwcap;
-		};
-	};
-	const struct arm64_cpu_capabilities *match_list;
-};
-
-enum cpu_pm_event {
-	CPU_PM_ENTER = 0,
-	CPU_PM_ENTER_FAILED = 1,
-	CPU_PM_EXIT = 2,
-	CPU_CLUSTER_PM_ENTER = 3,
-	CPU_CLUSTER_PM_ENTER_FAILED = 4,
-	CPU_CLUSTER_PM_EXIT = 5,
-};
-
-struct fpsimd_last_state_struct {
-	struct user_fpsimd_state *st;
-	void *sve_state;
-	unsigned int sve_vl;
-};
-
-enum ctx_state {
-	CONTEXT_DISABLED = 4294967295,
-	CONTEXT_KERNEL = 0,
-	CONTEXT_USER = 1,
-	CONTEXT_GUEST = 2,
-};
-
-typedef void (*bp_hardening_cb_t)();
-
-struct bp_hardening_data {
-	int hyp_vectors_slot;
-	bp_hardening_cb_t fn;
-};
-
-enum refcount_saturation_type {
-	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
-	REFCOUNT_ADD_OVF = 1,
-	REFCOUNT_ADD_UAF = 2,
-	REFCOUNT_SUB_UAF = 3,
-	REFCOUNT_DEC_LEAK = 4,
-};
-
-struct plist_head {
-	struct list_head node_list;
-};
-
-typedef struct {
-	__u8 b[16];
-} guid_t;
-
-enum pm_qos_type {
-	PM_QOS_UNITIALIZED = 0,
-	PM_QOS_MAX = 1,
-	PM_QOS_MIN = 2,
-};
-
-struct pm_qos_constraints {
-	struct plist_head list;
-	s32 target_value;
-	s32 default_value;
-	s32 no_constraint_value;
-	enum pm_qos_type type;
-	struct blocking_notifier_head *notifiers;
-};
-
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
-};
-
-struct pm_qos_flags {
-	struct list_head list;
-	s32 effective_flags;
-};
-
-struct dev_pm_qos_request;
-
-struct dev_pm_qos {
-	struct pm_qos_constraints resume_latency;
-	struct pm_qos_constraints latency_tolerance;
-	struct freq_constraints freq;
-	struct pm_qos_flags flags;
-	struct dev_pm_qos_request *resume_latency_req;
-	struct dev_pm_qos_request *latency_tolerance_req;
-	struct dev_pm_qos_request *flags_req;
-};
-
 enum reboot_mode {
 	REBOOT_UNDEFINED = 4294967295,
 	REBOOT_COLD = 0,
@@ -13949,6 +6212,7 @@
 	long unsigned int tpm_log;
 	long unsigned int tpm_final_log;
 	long unsigned int mokvar_table;
+	long unsigned int coco_secret;
 	efi_get_time_t *get_time;
 	efi_set_time_t *set_time;
 	efi_get_wakeup_time_t *get_wakeup_time;
@@ -13967,8 +6231,381 @@
 	long unsigned int flags;
 };
 
-struct arch_elf_state {
-	int flags;
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct cgroup_namespace {
+	struct ns_common ns;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct css_set *root_cset;
+};
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	long unsigned int _flags;
+	struct bin_attribute attr;
+};
+
+enum perf_sw_ids {
+	PERF_COUNT_SW_CPU_CLOCK = 0,
+	PERF_COUNT_SW_TASK_CLOCK = 1,
+	PERF_COUNT_SW_PAGE_FAULTS = 2,
+	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
+	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
+	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
+	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
+	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
+	PERF_COUNT_SW_EMULATION_FAULTS = 8,
+	PERF_COUNT_SW_DUMMY = 9,
+	PERF_COUNT_SW_BPF_OUTPUT = 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+union perf_mem_data_src {
+	__u64 val;
+	struct {
+		__u64 mem_op: 5;
+		__u64 mem_lvl: 14;
+		__u64 mem_snoop: 5;
+		__u64 mem_lock: 2;
+		__u64 mem_dtlb: 7;
+		__u64 mem_lvl_num: 4;
+		__u64 mem_remote: 1;
+		__u64 mem_snoopx: 2;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
+	};
+};
+
+struct perf_branch_entry {
+	__u64 from;
+	__u64 to;
+	__u64 mispred: 1;
+	__u64 predicted: 1;
+	__u64 in_tx: 1;
+	__u64 abort: 1;
+	__u64 cycles: 16;
+	__u64 type: 4;
+	__u64 reserved: 40;
+};
+
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
+};
+
+struct ftrace_regs {
+	struct pt_regs regs;
+};
+
+struct perf_regs {
+	__u64 abi;
+	struct pt_regs *regs;
+};
+
+struct u64_stats_sync {};
+
+struct psi_group_cpu {
+	seqcount_t seq;
+	unsigned int tasks[5];
+	u32 state_mask;
+	u32 times[7];
+	u64 state_start;
+	u32 times_prev[14];
+	long: 64;
+};
+
+struct psi_group {
+	struct mutex avgs_lock;
+	struct psi_group_cpu *pcpu;
+	u64 avg_total[6];
+	u64 avg_last_update;
+	u64 avg_next_update;
+	struct delayed_work avgs_work;
+	u64 total[12];
+	long unsigned int avg[18];
+	struct task_struct *poll_task;
+	struct timer_list poll_timer;
+	wait_queue_head_t poll_wait;
+	atomic_t poll_wakeup;
+	struct mutex trigger_lock;
+	struct list_head triggers;
+	u32 nr_triggers[6];
+	u32 poll_states;
+	u64 poll_min_period;
+	u64 polling_total[6];
+	u64 polling_next_update;
+	u64 polling_until;
+};
+
+struct cgroup_taskset;
+
+struct cftype;
+
+struct cgroup_subsys {
+	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
+	int (*css_online)(struct cgroup_subsys_state *);
+	void (*css_offline)(struct cgroup_subsys_state *);
+	void (*css_released)(struct cgroup_subsys_state *);
+	void (*css_free)(struct cgroup_subsys_state *);
+	void (*css_reset)(struct cgroup_subsys_state *);
+	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
+	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*can_attach)(struct cgroup_taskset *);
+	void (*cancel_attach)(struct cgroup_taskset *);
+	void (*attach)(struct cgroup_taskset *);
+	void (*post_attach)();
+	int (*can_fork)(struct task_struct *, struct css_set *);
+	void (*cancel_fork)(struct task_struct *, struct css_set *);
+	void (*fork)(struct task_struct *);
+	void (*exit)(struct task_struct *);
+	void (*release)(struct task_struct *);
+	void (*bind)(struct cgroup_subsys_state *);
+	bool early_init: 1;
+	bool implicit_on_dfl: 1;
+	bool threaded: 1;
+	int id;
+	const char *name;
+	const char *legacy_name;
+	struct cgroup_root *root;
+	struct idr css_idr;
+	struct list_head cfts;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	unsigned int depends_on;
+};
+
+struct cgroup_rstat_cpu {
+	struct u64_stats_sync bsync;
+	struct cgroup_base_stat bstat;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup *updated_children;
+	struct cgroup *updated_next;
+};
+
+struct cgroup_root {
+	struct kernfs_root *kf_root;
+	unsigned int subsys_mask;
+	int hierarchy_id;
+	struct cgroup cgrp;
+	u64 cgrp_ancestor_id_storage;
+	atomic_t nr_cgrps;
+	struct list_head root_list;
+	unsigned int flags;
+	char release_agent_path[4096];
+	char name[64];
+};
+
+struct cftype {
+	char name[64];
+	long unsigned int private;
+	size_t max_write_len;
+	unsigned int flags;
+	unsigned int file_offset;
+	struct cgroup_subsys *ss;
+	struct list_head node;
+	struct kernfs_ops *kf_ops;
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
+	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
+	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+};
+
+struct perf_callchain_entry {
+	__u64 nr;
+	__u64 ip[0];
+};
+
+typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);
+
+struct perf_raw_frag {
+	union {
+		struct perf_raw_frag *next;
+		long unsigned int pad;
+	};
+	perf_copy_f copy;
+	void *data;
+	u32 size;
+} __attribute__((packed));
+
+struct perf_raw_record {
+	struct perf_raw_frag frag;
+	u32 size;
+};
+
+struct perf_branch_stack {
+	__u64 nr;
+	__u64 hw_idx;
+	struct perf_branch_entry entries[0];
+};
+
+struct perf_cpu_context;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int *pmu_disable_count;
+	struct perf_cpu_context *pmu_cpu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	int (*filter_match)(struct perf_event *);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+struct perf_cpu_context {
+	struct perf_event_context ctx;
+	struct perf_event_context *task_ctx;
+	int active_oncpu;
+	int exclusive;
+	raw_spinlock_t hrtimer_lock;
+	struct hrtimer hrtimer;
+	ktime_t hrtimer_interval;
+	unsigned int hrtimer_active;
+	struct perf_cgroup *cgrp;
+	struct list_head cgrp_cpuctx_entry;
+	struct list_head sched_cb_entry;
+	int sched_cb_usage;
+	int online;
+	int heap_size;
+	struct perf_event **heap;
+	struct perf_event *heap_default[2];
+};
+
+struct perf_output_handle {
+	struct perf_event *event;
+	struct perf_buffer *rb;
+	long unsigned int wakeup;
+	long unsigned int size;
+	u64 aux_flags;
+	union {
+		void *addr;
+		long unsigned int head;
+	};
+	int page;
+};
+
+struct perf_addr_filter_range {
+	long unsigned int start;
+	long unsigned int size;
+};
+
+struct perf_sample_data {
+	u64 addr;
+	struct perf_raw_record *raw;
+	struct perf_branch_stack *br_stack;
+	u64 period;
+	union perf_sample_weight weight;
+	u64 txn;
+	union perf_mem_data_src data_src;
+	u64 type;
+	u64 ip;
+	struct {
+		u32 pid;
+		u32 tid;
+	} tid_entry;
+	u64 time;
+	u64 id;
+	u64 stream_id;
+	struct {
+		u32 cpu;
+		u32 reserved;
+	} cpu_entry;
+	struct perf_callchain_entry *callchain;
+	u64 aux_size;
+	struct perf_regs regs_user;
+	struct perf_regs regs_intr;
+	u64 stack_user_size;
+	u64 phys_addr;
+	u64 cgroup;
+	u64 data_page_size;
+	u64 code_page_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_cgroup_info;
+
+struct perf_cgroup {
+	struct cgroup_subsys_state css;
+	struct perf_cgroup_info *info;
+};
+
+struct perf_cgroup_info {
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	int active;
 };
 
 struct pm_qos_flags_request {
@@ -14005,355 +6642,144 @@
 	struct device *dev;
 };
 
-enum stack_type {
-	STACK_TYPE_UNKNOWN = 0,
-	STACK_TYPE_TASK = 1,
-	STACK_TYPE_IRQ = 2,
-	STACK_TYPE_OVERFLOW = 3,
-	STACK_TYPE_SDEI_NORMAL = 4,
-	STACK_TYPE_SDEI_CRITICAL = 5,
-	__NR_STACK_TYPES = 6,
+struct seq_buf {
+	char *buffer;
+	size_t size;
+	size_t len;
+	loff_t readpos;
 };
 
-struct stackframe {
-	long unsigned int fp;
+struct trace_seq {
+	char buffer[4096];
+	struct seq_buf seq;
+	int full;
+};
+
+struct trace_entry {
+	short unsigned int type;
+	unsigned char flags;
+	unsigned char preempt_count;
+	int pid;
+};
+
+struct trace_array;
+
+struct tracer;
+
+struct array_buffer;
+
+struct ring_buffer_iter;
+
+struct trace_iterator {
+	struct trace_array *tr;
+	struct tracer *trace;
+	struct array_buffer *array_buffer;
+	void *private;
+	int cpu_file;
+	struct mutex mutex;
+	struct ring_buffer_iter **buffer_iter;
+	long unsigned int iter_flags;
+	void *temp;
+	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
+	long int wait_index;
+	struct trace_seq tmp_seq;
+	cpumask_var_t started;
+	bool snapshot;
+	struct trace_seq seq;
+	struct trace_entry *ent;
+	long unsigned int lost_events;
+	int leftover;
+	int ent_size;
+	int cpu;
+	u64 ts;
+	loff_t pos;
+	long int idx;
+};
+
+enum print_line_t {
+	TRACE_TYPE_PARTIAL_LINE = 0,
+	TRACE_TYPE_HANDLED = 1,
+	TRACE_TYPE_UNHANDLED = 2,
+	TRACE_TYPE_NO_CONSUME = 3,
+};
+
+typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
+
+struct trace_event_functions {
+	trace_print_func trace;
+	trace_print_func raw;
+	trace_print_func hex;
+	trace_print_func binary;
+};
+
+enum trace_reg {
+	TRACE_REG_REGISTER = 0,
+	TRACE_REG_UNREGISTER = 1,
+	TRACE_REG_PERF_REGISTER = 2,
+	TRACE_REG_PERF_UNREGISTER = 3,
+	TRACE_REG_PERF_OPEN = 4,
+	TRACE_REG_PERF_CLOSE = 5,
+	TRACE_REG_PERF_ADD = 6,
+	TRACE_REG_PERF_DEL = 7,
+};
+
+struct trace_event_fields {
+	const char *type;
+	union {
+		struct {
+			const char *name;
+			const int size;
+			const int align;
+			const int is_signed;
+			const int filter_type;
+		};
+		int (*define_fields)(struct trace_event_call *);
+	};
+};
+
+struct trace_event_class {
+	const char *system;
+	void *probe;
+	void *perf_probe;
+	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
+	struct trace_event_fields *fields_array;
+	struct list_head * (*get_fields)(struct trace_event_call *);
+	struct list_head fields;
+	int (*raw_init)(struct trace_event_call *);
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED_BIT = 0,
+	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
+	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
+	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
+	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
+	TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+	TRACE_EVENT_FL_KPROBE_BIT = 6,
+	TRACE_EVENT_FL_UPROBE_BIT = 7,
+	TRACE_EVENT_FL_EPROBE_BIT = 8,
+	TRACE_EVENT_FL_CUSTOM_BIT = 9,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED_BIT = 0,
+	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
+	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
+	EVENT_FILE_FL_FILTERED_BIT = 3,
+	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
+	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
+	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
+	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
+	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
+	EVENT_FILE_FL_PID_FILTER_BIT = 9,
+	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
+};
+
+struct wchan_info {
 	long unsigned int pc;
-	long unsigned int stacks_done[1];
-	long unsigned int prev_fp;
-	enum stack_type prev_type;
-	int graph;
-};
-
-struct user_sve_header {
-	__u32 size;
-	__u32 max_size;
-	__u16 vl;
-	__u16 max_vl;
-	__u16 flags;
-	__u16 __reserved;
-};
-
-struct user_pac_mask {
-	__u64 data_mask;
-	__u64 insn_mask;
-};
-
-struct user_pac_address_keys {
-	__int128 unsigned apiakey;
-	__int128 unsigned apibkey;
-	__int128 unsigned apdakey;
-	__int128 unsigned apdbkey;
-};
-
-struct user_pac_generic_keys {
-	__int128 unsigned apgakey;
-};
-
-typedef u32 compat_ulong_t;
-
-enum perf_type_id {
-	PERF_TYPE_HARDWARE = 0,
-	PERF_TYPE_SOFTWARE = 1,
-	PERF_TYPE_TRACEPOINT = 2,
-	PERF_TYPE_HW_CACHE = 3,
-	PERF_TYPE_RAW = 4,
-	PERF_TYPE_BREAKPOINT = 5,
-	PERF_TYPE_MAX = 6,
-};
-
-enum {
-	TASKSTATS_CMD_UNSPEC = 0,
-	TASKSTATS_CMD_GET = 1,
-	TASKSTATS_CMD_NEW = 2,
-	__TASKSTATS_CMD_MAX = 3,
-};
-
-enum cpu_usage_stat {
-	CPUTIME_USER = 0,
-	CPUTIME_NICE = 1,
-	CPUTIME_SYSTEM = 2,
-	CPUTIME_SOFTIRQ = 3,
-	CPUTIME_IRQ = 4,
-	CPUTIME_IDLE = 5,
-	CPUTIME_IOWAIT = 6,
-	CPUTIME_STEAL = 7,
-	CPUTIME_GUEST = 8,
-	CPUTIME_GUEST_NICE = 9,
-	NR_STATS = 10,
-};
-
-enum bpf_cgroup_storage_type {
-	BPF_CGROUP_STORAGE_SHARED = 0,
-	BPF_CGROUP_STORAGE_PERCPU = 1,
-	__BPF_CGROUP_STORAGE_MAX = 2,
-};
-
-enum psi_task_count {
-	NR_IOWAIT = 0,
-	NR_MEMSTALL = 1,
-	NR_RUNNING = 2,
-	NR_ONCPU = 3,
-	NR_PSI_TASK_COUNTS = 4,
-};
-
-enum psi_states {
-	PSI_IO_SOME = 0,
-	PSI_IO_FULL = 1,
-	PSI_MEM_SOME = 2,
-	PSI_MEM_FULL = 3,
-	PSI_CPU_SOME = 4,
-	PSI_NONIDLE = 5,
-	NR_PSI_STATES = 6,
-};
-
-enum psi_aggregators {
-	PSI_AVGS = 0,
-	PSI_POLL = 1,
-	NR_PSI_AGGREGATORS = 2,
-};
-
-enum cgroup_subsys_id {
-	cpuset_cgrp_id = 0,
-	cpu_cgrp_id = 1,
-	cpuacct_cgrp_id = 2,
-	io_cgrp_id = 3,
-	memory_cgrp_id = 4,
-	devices_cgrp_id = 5,
-	freezer_cgrp_id = 6,
-	net_cls_cgrp_id = 7,
-	perf_event_cgrp_id = 8,
-	net_prio_cgrp_id = 9,
-	hugetlb_cgrp_id = 10,
-	pids_cgrp_id = 11,
-	CGROUP_SUBSYS_COUNT = 12,
-};
-
-enum {
-	HW_BREAKPOINT_LEN_1 = 1,
-	HW_BREAKPOINT_LEN_2 = 2,
-	HW_BREAKPOINT_LEN_3 = 3,
-	HW_BREAKPOINT_LEN_4 = 4,
-	HW_BREAKPOINT_LEN_5 = 5,
-	HW_BREAKPOINT_LEN_6 = 6,
-	HW_BREAKPOINT_LEN_7 = 7,
-	HW_BREAKPOINT_LEN_8 = 8,
-};
-
-enum {
-	HW_BREAKPOINT_EMPTY = 0,
-	HW_BREAKPOINT_R = 1,
-	HW_BREAKPOINT_W = 2,
-	HW_BREAKPOINT_RW = 3,
-	HW_BREAKPOINT_X = 4,
-	HW_BREAKPOINT_INVALID = 7,
-};
-
-enum bp_type_idx {
-	TYPE_INST = 0,
-	TYPE_DATA = 1,
-	TYPE_MAX = 2,
-};
-
-struct membuf {
-	void *p;
-	size_t left;
-};
-
-struct user_regset;
-
-typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
-
-typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
-
-typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
-
-typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
-
-struct user_regset {
-	user_regset_get2_fn *regset_get;
-	user_regset_set_fn *set;
-	user_regset_active_fn *active;
-	user_regset_writeback_fn *writeback;
-	unsigned int n;
-	unsigned int size;
-	unsigned int align;
-	unsigned int bias;
-	unsigned int core_note_type;
-};
-
-struct user_regset_view {
-	const char *name;
-	const struct user_regset *regsets;
-	unsigned int n;
-	u32 e_flags;
-	u16 e_machine;
-	u8 ei_osabi;
-};
-
-struct stack_info {
-	long unsigned int low;
-	long unsigned int high;
-	enum stack_type type;
-};
-
-struct trace_event_raw_sys_enter {
-	struct trace_entry ent;
-	long int id;
-	long unsigned int args[6];
-	char __data[0];
-};
-
-struct trace_event_raw_sys_exit {
-	struct trace_entry ent;
-	long int id;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sys_enter {};
-
-struct trace_event_data_offsets_sys_exit {};
-
-typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
-
-typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
-
-struct pt_regs_offset {
-	const char *name;
-	int offset;
-};
-
-enum aarch64_regset {
-	REGSET_GPR = 0,
-	REGSET_FPR = 1,
-	REGSET_TLS = 2,
-	REGSET_HW_BREAK = 3,
-	REGSET_HW_WATCH = 4,
-	REGSET_SYSTEM_CALL = 5,
-	REGSET_SVE = 6,
-	REGSET_PAC_MASK = 7,
-	REGSET_PACA_KEYS = 8,
-	REGSET_PACG_KEYS = 9,
-	REGSET_TAGGED_ADDR_CTRL = 10,
-};
-
-enum compat_regset {
-	REGSET_COMPAT_GPR = 0,
-	REGSET_COMPAT_VFP = 1,
-};
-
-enum ptrace_syscall_dir {
-	PTRACE_SYSCALL_ENTER = 0,
-	PTRACE_SYSCALL_EXIT = 1,
-};
-
-struct atomic_notifier_head {
-	spinlock_t lock;
-	struct notifier_block *head;
-};
-
-typedef struct pglist_data pg_data_t;
-
-enum meminit_context {
-	MEMINIT_EARLY = 0,
-	MEMINIT_HOTPLUG = 1,
-};
-
-enum memblock_flags {
-	MEMBLOCK_NONE = 0,
-	MEMBLOCK_HOTPLUG = 1,
-	MEMBLOCK_MIRROR = 2,
-	MEMBLOCK_NOMAP = 4,
-};
-
-struct memblock_region {
-	phys_addr_t base;
-	phys_addr_t size;
-	enum memblock_flags flags;
-	int nid;
-};
-
-struct memblock_type {
-	long unsigned int cnt;
-	long unsigned int max;
-	phys_addr_t total_size;
-	struct memblock_region *regions;
-	char *name;
-};
-
-struct memblock {
-	bool bottom_up;
-	phys_addr_t current_limit;
-	struct memblock_type memory;
-	struct memblock_type reserved;
-};
-
-struct mpidr_hash {
-	u64 mask;
-	u32 shift_aff[4];
-	u32 bits;
-};
-
-struct cpu {
-	int node_id;
-	int hotpluggable;
-	struct device dev;
-};
-
-struct cpuinfo_arm64 {
-	struct cpu cpu;
-	struct kobject kobj;
-	u32 reg_ctr;
-	u32 reg_cntfrq;
-	u32 reg_dczid;
-	u32 reg_midr;
-	u32 reg_revidr;
-	u64 reg_id_aa64dfr0;
-	u64 reg_id_aa64dfr1;
-	u64 reg_id_aa64isar0;
-	u64 reg_id_aa64isar1;
-	u64 reg_id_aa64mmfr0;
-	u64 reg_id_aa64mmfr1;
-	u64 reg_id_aa64mmfr2;
-	u64 reg_id_aa64pfr0;
-	u64 reg_id_aa64pfr1;
-	u64 reg_id_aa64zfr0;
-	u32 reg_id_dfr0;
-	u32 reg_id_dfr1;
-	u32 reg_id_isar0;
-	u32 reg_id_isar1;
-	u32 reg_id_isar2;
-	u32 reg_id_isar3;
-	u32 reg_id_isar4;
-	u32 reg_id_isar5;
-	u32 reg_id_isar6;
-	u32 reg_id_mmfr0;
-	u32 reg_id_mmfr1;
-	u32 reg_id_mmfr2;
-	u32 reg_id_mmfr3;
-	u32 reg_id_mmfr4;
-	u32 reg_id_mmfr5;
-	u32 reg_id_pfr0;
-	u32 reg_id_pfr1;
-	u32 reg_id_pfr2;
-	u32 reg_mvfr0;
-	u32 reg_mvfr1;
-	u32 reg_mvfr2;
-	u64 reg_zcr;
-};
-
-struct cpu_operations {
-	const char *name;
-	int (*cpu_init)(unsigned int);
-	int (*cpu_prepare)(unsigned int);
-	int (*cpu_boot)(unsigned int);
-	void (*cpu_postboot)();
-	bool (*cpu_can_disable)(unsigned int);
-	int (*cpu_disable)(unsigned int);
-	void (*cpu_die)(unsigned int);
-	int (*cpu_kill)(unsigned int);
-	int (*cpu_init_idle)(unsigned int);
-	int (*cpu_suspend)(long unsigned int);
+	int count;
 };
 
 struct sigcontext {
@@ -14393,13 +6819,20 @@
 struct sve_context {
 	struct _aarch64_ctx head;
 	__u16 vl;
+	__u16 flags;
+	__u16 __reserved[2];
+};
+
+struct za_context {
+	struct _aarch64_ctx head;
+	__u16 vl;
 	__u16 __reserved[3];
 };
 
 struct sigaltstack {
 	void *ss_sp;
 	int ss_flags;
-	size_t ss_size;
+	__kernel_size_t ss_size;
 };
 
 typedef struct sigaltstack stack_t;
@@ -14416,12 +6849,559 @@
 	};
 };
 
+typedef struct siginfo siginfo_t;
+
 struct ksignal {
 	struct k_sigaction ka;
 	kernel_siginfo_t info;
 	int sig;
 };
 
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	long unsigned int state;
+	long unsigned int last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	long unsigned int bw_time_stamp;
+	long unsigned int dirtied_stamp;
+	long unsigned int written_stamp;
+	long unsigned int write_bandwidth;
+	long unsigned int avg_write_bandwidth;
+	long unsigned int dirty_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	long unsigned int dirty_sleep;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	long unsigned int ra_pages;
+	long unsigned int io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long unsigned int min;
+	long unsigned int low;
+	long unsigned int high;
+	long unsigned int max;
+	long unsigned int emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	long unsigned int elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	long unsigned int watermark;
+	long unsigned int failcnt;
+	struct page_counter *parent;
+};
+
+struct vmpressure {
+	long unsigned int scanned;
+	long unsigned int reclaimed;
+	long unsigned int tree_scanned;
+	long unsigned int tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct memcg_padding {
+	char x[0];
+};
+
+struct memcg_vmstats {
+	long int state[48];
+	long unsigned int events[109];
+	long int state_pending[48];
+	long unsigned int events_pending[109];
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	long unsigned int period_time;
+	long unsigned int dirty_limit_tstamp;
+	long unsigned int dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	long unsigned int split_queue_len;
+};
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	long unsigned int zswap_max;
+	long unsigned int soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	long unsigned int move_charge_at_immigrate;
+	spinlock_t move_lock;
+	long unsigned int move_lock_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad1_;
+	struct memcg_vmstats vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	long unsigned int socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct mem_cgroup_per_node *nodeinfo[0];
+	long: 64;
+};
+
+struct free_area {
+	struct list_head free_list[6];
+	long unsigned int nr_free;
+};
+
+struct zone_padding {
+	char x[0];
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	atomic_long_t nonresident_age;
+	long unsigned int refaults[2];
+	long unsigned int flags;
+	struct pglist_data *pgdat;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	long unsigned int _watermark[4];
+	long unsigned int watermark_boost;
+	long unsigned int nr_reserved_highatomic;
+	long int lowmem_reserve[5];
+	int node;
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages *per_cpu_pageset;
+	struct per_cpu_zonestat *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	long unsigned int zone_start_pfn;
+	atomic_long_t managed_pages;
+	long unsigned int spanned_pages;
+	long unsigned int present_pages;
+	long unsigned int present_early_pages;
+	long unsigned int cma_pages;
+	const char *name;
+	long unsigned int nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int initialized;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct free_area free_area[13];
+	long unsigned int flags;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad2_;
+	long unsigned int percpu_drift_mark;
+	long unsigned int compact_cached_free_pfn;
+	long unsigned int compact_cached_migrate_pfn[2];
+	long unsigned int compact_init_migrate_pfn;
+	long unsigned int compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	short: 16;
+	struct zone_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[6];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[2561];
+};
+
+enum zone_type {
+	ZONE_DMA = 0,
+	ZONE_DMA32 = 1,
+	ZONE_NORMAL = 2,
+	ZONE_MOVABLE = 3,
+	ZONE_DEVICE = 4,
+	__MAX_NR_ZONES = 5,
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[5];
+	struct zonelist node_zonelists[2];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	long unsigned int node_start_pfn;
+	long unsigned int node_present_pages;
+	long unsigned int node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	long unsigned int nr_reclaim_start;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	long unsigned int totalreserve_pages;
+	long unsigned int min_unmapped_pages;
+	long unsigned int min_slab_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	long unsigned int flags;
+	long: 64;
+	struct zone_padding _pad2_;
+	struct per_cpu_nodestat *per_cpu_nodestats;
+	atomic_long_t vm_stat[41];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short int free_factor;
+	short int expire;
+	struct list_head lists[13];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+	long unsigned int vm_numa_event[6];
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[41];
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	unsigned int punt_to_cgroup: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+struct disk_stats;
+
+struct gendisk;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct disk_stats *bd_stats;
+	long unsigned int bd_stamp;
+	bool bd_read_only;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	struct inode *bd_inode;
+	struct super_block *bd_super;
+	void *bd_claiming;
+	struct device bd_device;
+	void *bd_holder;
+	int bd_holders;
+	bool bd_write_holder;
+	struct kobject *bd_holder_dir;
+	u8 bd_partno;
+	spinlock_t bd_size_lock;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	int bd_fsfreeze_count;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct blkcg_gq;
+
+struct bio_crypt_ctx;
+
+struct bio_integrity_payload;
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	short unsigned int bi_flags;
+	short unsigned int bi_ioprio;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	struct bio_crypt_ctx *bi_crypt_context;
+	union {
+		struct bio_integrity_payload *bi_integrity;
+	};
+	short unsigned int bi_vcnt;
+	short unsigned int bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	struct bio_vec bi_inline_vecs[0];
+};
+
 enum {
 	EI_ETYPE_NONE = 0,
 	EI_ETYPE_NULL = 1,
@@ -14430,6 +7410,133 @@
 	EI_ETYPE_TRUE = 4,
 };
 
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	short unsigned int bip_vcnt;
+	short unsigned int bip_max_vcnt;
+	short unsigned int bip_flags;
+	struct bvec_iter bio_iter;
+	short: 16;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+} __attribute__((packed));
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	mempool_t bio_integrity_pool;
+	mempool_t bvec_integrity_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+struct memcg_vmstats_percpu {
+	long int state[48];
+	long unsigned int events[109];
+	long int state_prev[48];
+	long unsigned int events_prev[109];
+	long unsigned int nr_page_events;
+	long unsigned int targets[2];
+};
+
+struct mem_cgroup_reclaim_iter {
+	struct mem_cgroup *position;
+	unsigned int generation;
+};
+
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	long unsigned int *map;
+};
+
+struct lruvec_stats_percpu {
+	long int state[41];
+	long int state_prev[41];
+};
+
+struct lruvec_stats {
+	long int state[41];
+	long int state_pending[41];
+};
+
+struct mem_cgroup_per_node {
+	struct lruvec lruvec;
+	struct lruvec_stats_percpu *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	long unsigned int lru_zone_size[25];
+	struct mem_cgroup_reclaim_iter iter;
+	struct shrinker_info *shrinker_info;
+	struct rb_node tree_node;
+	long unsigned int usage_in_excess;
+	bool on_tree;
+	struct mem_cgroup *memcg;
+};
+
+struct eventfd_ctx;
+
+struct mem_cgroup_threshold {
+	struct eventfd_ctx *eventfd;
+	long unsigned int threshold;
+};
+
+struct mem_cgroup_threshold_ary {
+	int current_threshold;
+	unsigned int size;
+	struct mem_cgroup_threshold entries[0];
+};
+
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_CUSTOM = 512,
+};
+
 struct syscall_metadata {
 	const char *name;
 	int syscall_nr;
@@ -14469,6 +7576,7 @@
 	long unsigned int fpsimd_offset;
 	long unsigned int esr_offset;
 	long unsigned int sve_offset;
+	long unsigned int za_offset;
 	long unsigned int extra_offset;
 	long unsigned int end_offset;
 };
@@ -14476,108 +7584,7 @@
 struct user_ctxs {
 	struct fpsimd_context *fpsimd;
 	struct sve_context *sve;
-};
-
-enum {
-	PER_LINUX = 0,
-	PER_LINUX_32BIT = 8388608,
-	PER_LINUX_FDPIC = 524288,
-	PER_SVR4 = 68157441,
-	PER_SVR3 = 83886082,
-	PER_SCOSVR3 = 117440515,
-	PER_OSR5 = 100663299,
-	PER_WYSEV386 = 83886084,
-	PER_ISCR4 = 67108869,
-	PER_BSD = 6,
-	PER_SUNOS = 67108870,
-	PER_XENIX = 83886087,
-	PER_LINUX32 = 8,
-	PER_LINUX32_3GB = 134217736,
-	PER_IRIX32 = 67108873,
-	PER_IRIXN32 = 67108874,
-	PER_IRIX64 = 67108875,
-	PER_RISCOS = 12,
-	PER_SOLARIS = 67108877,
-	PER_UW7 = 68157454,
-	PER_OSF4 = 15,
-	PER_HPUX = 16,
-	PER_MASK = 255,
-};
-
-typedef long int (*syscall_fn_t)(const struct pt_regs *);
-
-typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
-
-typedef bool pstate_check_t(long unsigned int);
-
-enum lockdep_ok {
-	LOCKDEP_STILL_OK = 0,
-	LOCKDEP_NOW_UNRELIABLE = 1,
-};
-
-enum bug_trap_type {
-	BUG_TRAP_TYPE_NONE = 0,
-	BUG_TRAP_TYPE_WARN = 1,
-	BUG_TRAP_TYPE_BUG = 2,
-};
-
-enum ftr_type {
-	FTR_EXACT = 0,
-	FTR_LOWER_SAFE = 1,
-	FTR_HIGHER_SAFE = 2,
-	FTR_HIGHER_OR_ZERO_SAFE = 3,
-};
-
-struct arm64_ftr_bits {
-	bool sign;
-	bool visible;
-	bool strict;
-	enum ftr_type type;
-	u8 shift;
-	u8 width;
-	s64 safe_val;
-};
-
-struct arm64_ftr_reg {
-	const char *name;
-	u64 strict_mask;
-	u64 user_mask;
-	u64 sys_val;
-	u64 user_val;
-	const struct arm64_ftr_bits *ftr_bits;
-};
-
-enum siginfo_layout {
-	SIL_KILL = 0,
-	SIL_TIMER = 1,
-	SIL_POLL = 2,
-	SIL_FAULT = 3,
-	SIL_FAULT_MCEERR = 4,
-	SIL_FAULT_BNDERR = 5,
-	SIL_FAULT_PKUERR = 6,
-	SIL_CHLD = 7,
-	SIL_RT = 8,
-	SIL_SYS = 9,
-};
-
-enum die_val {
-	DIE_UNUSED = 0,
-	DIE_OOPS = 1,
-};
-
-struct undef_hook {
-	struct list_head node;
-	u32 instr_mask;
-	u32 instr_val;
-	u64 pstate_mask;
-	u64 pstate_val;
-	int (*fn)(struct pt_regs *, u32);
-};
-
-struct sys64_hook {
-	unsigned int esr_mask;
-	unsigned int esr_val;
-	void (*handler)(unsigned int, struct pt_regs *);
+	struct za_context *za;
 };
 
 struct timens_offset {
@@ -14599,6 +7606,7 @@
 	VM_FAULT_FALLBACK = 2048,
 	VM_FAULT_DONE_COW = 4096,
 	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
 	VM_FAULT_HINDEX_MASK = 983040,
 };
 
@@ -14615,7 +7623,6 @@
 };
 
 struct time_namespace {
-	struct kref kref;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct ns_common ns;
@@ -14681,23 +7688,1495 @@
 	AA64_MAP_VDSO = 1,
 };
 
-struct psci_operations {
-	u32 (*get_version)();
-	int (*cpu_suspend)(u32, long unsigned int);
-	int (*cpu_off)(u32);
-	int (*cpu_on)(long unsigned int, long unsigned int);
-	int (*migrate)(long unsigned int);
-	int (*affinity_info)(long unsigned int, long unsigned int);
-	int (*migrate_info_type)();
+struct return_address_data {
+	unsigned int level;
+	void *addr;
 };
 
-enum aarch64_insn_encoding_class {
-	AARCH64_INSN_CLS_UNKNOWN = 0,
-	AARCH64_INSN_CLS_DP_IMM = 1,
-	AARCH64_INSN_CLS_DP_REG = 2,
-	AARCH64_INSN_CLS_DP_FPSIMD = 3,
-	AARCH64_INSN_CLS_LDST = 4,
-	AARCH64_INSN_CLS_BR_SYS = 5,
+typedef int (*cmp_func_t)(const void *, const void *);
+
+enum aarch64_insn_imm_type {
+	AARCH64_INSN_IMM_ADR = 0,
+	AARCH64_INSN_IMM_26 = 1,
+	AARCH64_INSN_IMM_19 = 2,
+	AARCH64_INSN_IMM_16 = 3,
+	AARCH64_INSN_IMM_14 = 4,
+	AARCH64_INSN_IMM_12 = 5,
+	AARCH64_INSN_IMM_9 = 6,
+	AARCH64_INSN_IMM_7 = 7,
+	AARCH64_INSN_IMM_6 = 8,
+	AARCH64_INSN_IMM_S = 9,
+	AARCH64_INSN_IMM_R = 10,
+	AARCH64_INSN_IMM_N = 11,
+	AARCH64_INSN_IMM_MAX = 12,
+};
+
+enum aarch64_insn_register_type {
+	AARCH64_INSN_REGTYPE_RT = 0,
+	AARCH64_INSN_REGTYPE_RN = 1,
+	AARCH64_INSN_REGTYPE_RT2 = 2,
+	AARCH64_INSN_REGTYPE_RM = 3,
+	AARCH64_INSN_REGTYPE_RD = 4,
+	AARCH64_INSN_REGTYPE_RA = 5,
+	AARCH64_INSN_REGTYPE_RS = 6,
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+enum {
+	CAP_HWCAP = 1,
+	CAP_COMPAT_HWCAP = 2,
+	CAP_COMPAT_HWCAP2 = 3,
+};
+
+enum ftr_type {
+	FTR_EXACT = 0,
+	FTR_LOWER_SAFE = 1,
+	FTR_HIGHER_SAFE = 2,
+	FTR_HIGHER_OR_ZERO_SAFE = 3,
+};
+
+struct arm64_ftr_bits {
+	bool sign;
+	bool visible;
+	bool strict;
+	enum ftr_type type;
+	u8 shift;
+	u8 width;
+	s64 safe_val;
+};
+
+struct arm64_ftr_override {
+	u64 val;
+	u64 mask;
+};
+
+struct arm64_ftr_reg {
+	const char *name;
+	u64 strict_mask;
+	u64 user_mask;
+	u64 sys_val;
+	u64 user_val;
+	struct arm64_ftr_override *override;
+	const struct arm64_ftr_bits *ftr_bits;
+};
+
+struct secondary_data {
+	struct task_struct *task;
+	long int status;
+};
+
+enum mitigation_state {
+	SPECTRE_UNAFFECTED = 0,
+	SPECTRE_MITIGATED = 1,
+	SPECTRE_VULNERABLE = 2,
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_referenced = 1,
+	PG_uptodate = 2,
+	PG_dirty = 3,
+	PG_lru = 4,
+	PG_active = 5,
+	PG_workingset = 6,
+	PG_waiters = 7,
+	PG_error = 8,
+	PG_slab = 9,
+	PG_owner_priv_1 = 10,
+	PG_arch_1 = 11,
+	PG_reserved = 12,
+	PG_private = 13,
+	PG_private_2 = 14,
+	PG_writeback = 15,
+	PG_head = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_hwpoison = 22,
+	PG_young = 23,
+	PG_idle = 24,
+	PG_arch_2 = 25,
+	__NR_PAGEFLAGS = 26,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 10,
+	PG_swapcache = 10,
+	PG_fscache = 14,
+	PG_pinned = 10,
+	PG_savepinned = 3,
+	PG_foreign = 10,
+	PG_xen_remapped = 10,
+	PG_slob_free = 13,
+	PG_double_map = 6,
+	PG_has_hwpoisoned = 8,
+	PG_isolated = 18,
+	PG_reported = 2,
+	PG_vmemmap_self_hosted = 10,
+};
+
+enum fixed_addresses {
+	FIX_HOLE = 0,
+	FIX_FDT_END = 1,
+	FIX_FDT = 1024,
+	FIX_EARLYCON_MEM_BASE = 1025,
+	FIX_TEXT_POKE0 = 1026,
+	FIX_APEI_GHES_IRQ = 1027,
+	FIX_APEI_GHES_SEA = 1028,
+	FIX_APEI_GHES_SDEI_NORMAL = 1029,
+	FIX_APEI_GHES_SDEI_CRITICAL = 1030,
+	FIX_ENTRY_TRAMP_TEXT4 = 1031,
+	FIX_ENTRY_TRAMP_TEXT3 = 1032,
+	FIX_ENTRY_TRAMP_TEXT2 = 1033,
+	FIX_ENTRY_TRAMP_TEXT1 = 1034,
+	__end_of_permanent_fixed_addresses = 1035,
+	FIX_BTMAP_END = 1035,
+	FIX_BTMAP_BEGIN = 1482,
+	FIX_PTE = 1483,
+	FIX_PMD = 1484,
+	FIX_PUD = 1485,
+	FIX_PGD = 1486,
+	__end_of_fixed_addresses = 1487,
+};
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct cpuinfo_32bit {
+	u32 reg_id_dfr0;
+	u32 reg_id_dfr1;
+	u32 reg_id_isar0;
+	u32 reg_id_isar1;
+	u32 reg_id_isar2;
+	u32 reg_id_isar3;
+	u32 reg_id_isar4;
+	u32 reg_id_isar5;
+	u32 reg_id_isar6;
+	u32 reg_id_mmfr0;
+	u32 reg_id_mmfr1;
+	u32 reg_id_mmfr2;
+	u32 reg_id_mmfr3;
+	u32 reg_id_mmfr4;
+	u32 reg_id_mmfr5;
+	u32 reg_id_pfr0;
+	u32 reg_id_pfr1;
+	u32 reg_id_pfr2;
+	u32 reg_mvfr0;
+	u32 reg_mvfr1;
+	u32 reg_mvfr2;
+};
+
+struct cpuinfo_arm64 {
+	struct cpu cpu;
+	struct kobject kobj;
+	u64 reg_ctr;
+	u64 reg_cntfrq;
+	u64 reg_dczid;
+	u64 reg_midr;
+	u64 reg_revidr;
+	u64 reg_gmid;
+	u64 reg_smidr;
+	u64 reg_id_aa64dfr0;
+	u64 reg_id_aa64dfr1;
+	u64 reg_id_aa64isar0;
+	u64 reg_id_aa64isar1;
+	u64 reg_id_aa64isar2;
+	u64 reg_id_aa64mmfr0;
+	u64 reg_id_aa64mmfr1;
+	u64 reg_id_aa64mmfr2;
+	u64 reg_id_aa64pfr0;
+	u64 reg_id_aa64pfr1;
+	u64 reg_id_aa64zfr0;
+	u64 reg_id_aa64smfr0;
+	struct cpuinfo_32bit aarch32;
+	u64 reg_zcr;
+	u64 reg_smcr;
+};
+
+enum kvm_mode {
+	KVM_MODE_DEFAULT = 0,
+	KVM_MODE_PROTECTED = 1,
+	KVM_MODE_NONE = 2,
+};
+
+enum vcpu_sysreg {
+	__INVALID_SYSREG__ = 0,
+	MPIDR_EL1 = 1,
+	CSSELR_EL1 = 2,
+	SCTLR_EL1 = 3,
+	ACTLR_EL1 = 4,
+	CPACR_EL1 = 5,
+	ZCR_EL1 = 6,
+	TTBR0_EL1 = 7,
+	TTBR1_EL1 = 8,
+	TCR_EL1 = 9,
+	ESR_EL1 = 10,
+	AFSR0_EL1 = 11,
+	AFSR1_EL1 = 12,
+	FAR_EL1 = 13,
+	MAIR_EL1 = 14,
+	VBAR_EL1 = 15,
+	CONTEXTIDR_EL1 = 16,
+	TPIDR_EL0 = 17,
+	TPIDRRO_EL0 = 18,
+	TPIDR_EL1 = 19,
+	AMAIR_EL1 = 20,
+	CNTKCTL_EL1 = 21,
+	PAR_EL1 = 22,
+	MDSCR_EL1 = 23,
+	MDCCINT_EL1 = 24,
+	OSLSR_EL1 = 25,
+	DISR_EL1 = 26,
+	PMCR_EL0 = 27,
+	PMSELR_EL0 = 28,
+	PMEVCNTR0_EL0 = 29,
+	PMEVCNTR30_EL0 = 59,
+	PMCCNTR_EL0 = 60,
+	PMEVTYPER0_EL0 = 61,
+	PMEVTYPER30_EL0 = 91,
+	PMCCFILTR_EL0 = 92,
+	PMCNTENSET_EL0 = 93,
+	PMINTENSET_EL1 = 94,
+	PMOVSSET_EL0 = 95,
+	PMUSERENR_EL0 = 96,
+	APIAKEYLO_EL1 = 97,
+	APIAKEYHI_EL1 = 98,
+	APIBKEYLO_EL1 = 99,
+	APIBKEYHI_EL1 = 100,
+	APDAKEYLO_EL1 = 101,
+	APDAKEYHI_EL1 = 102,
+	APDBKEYLO_EL1 = 103,
+	APDBKEYHI_EL1 = 104,
+	APGAKEYLO_EL1 = 105,
+	APGAKEYHI_EL1 = 106,
+	ELR_EL1 = 107,
+	SP_EL1 = 108,
+	SPSR_EL1 = 109,
+	CNTVOFF_EL2 = 110,
+	CNTV_CVAL_EL0 = 111,
+	CNTV_CTL_EL0 = 112,
+	CNTP_CVAL_EL0 = 113,
+	CNTP_CTL_EL0 = 114,
+	RGSR_EL1 = 115,
+	GCR_EL1 = 116,
+	TFSR_EL1 = 117,
+	TFSRE0_EL1 = 118,
+	DACR32_EL2 = 119,
+	IFSR32_EL2 = 120,
+	FPEXC32_EL2 = 121,
+	DBGVCR32_EL2 = 122,
+	NR_SYS_REGS = 123,
+};
+
+struct undef_hook {
+	struct list_head node;
+	u32 instr_mask;
+	u32 instr_val;
+	u64 pstate_mask;
+	u64 pstate_val;
+	int (*fn)(struct pt_regs *, u32);
+};
+
+enum arm64_bp_harden_el1_vectors {
+	EL1_VECTOR_BHB_LOOP = 0,
+	EL1_VECTOR_BHB_FW = 1,
+	EL1_VECTOR_BHB_CLEAR_INSN = 2,
+	EL1_VECTOR_KPTI = 3,
+};
+
+struct __ftr_reg_entry {
+	u32 sys_id;
+	struct arm64_ftr_reg *reg;
+};
+
+typedef void kpti_remap_fn(int, int, phys_addr_t, long unsigned int);
+
+typedef void ttbr_replace_func(phys_addr_t);
+
+struct arm_cpuidle_irq_context {};
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+struct aarch64_insn_patch {
+	void **text_addrs;
+	u32 *new_insns;
+	int insn_cnt;
+	atomic_t cpu_count;
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+enum perf_event_arm_regs {
+	PERF_REG_ARM64_X0 = 0,
+	PERF_REG_ARM64_X1 = 1,
+	PERF_REG_ARM64_X2 = 2,
+	PERF_REG_ARM64_X3 = 3,
+	PERF_REG_ARM64_X4 = 4,
+	PERF_REG_ARM64_X5 = 5,
+	PERF_REG_ARM64_X6 = 6,
+	PERF_REG_ARM64_X7 = 7,
+	PERF_REG_ARM64_X8 = 8,
+	PERF_REG_ARM64_X9 = 9,
+	PERF_REG_ARM64_X10 = 10,
+	PERF_REG_ARM64_X11 = 11,
+	PERF_REG_ARM64_X12 = 12,
+	PERF_REG_ARM64_X13 = 13,
+	PERF_REG_ARM64_X14 = 14,
+	PERF_REG_ARM64_X15 = 15,
+	PERF_REG_ARM64_X16 = 16,
+	PERF_REG_ARM64_X17 = 17,
+	PERF_REG_ARM64_X18 = 18,
+	PERF_REG_ARM64_X19 = 19,
+	PERF_REG_ARM64_X20 = 20,
+	PERF_REG_ARM64_X21 = 21,
+	PERF_REG_ARM64_X22 = 22,
+	PERF_REG_ARM64_X23 = 23,
+	PERF_REG_ARM64_X24 = 24,
+	PERF_REG_ARM64_X25 = 25,
+	PERF_REG_ARM64_X26 = 26,
+	PERF_REG_ARM64_X27 = 27,
+	PERF_REG_ARM64_X28 = 28,
+	PERF_REG_ARM64_X29 = 29,
+	PERF_REG_ARM64_LR = 30,
+	PERF_REG_ARM64_SP = 31,
+	PERF_REG_ARM64_PC = 32,
+	PERF_REG_ARM64_MAX = 33,
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
+
+typedef __u64 __le64;
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+typedef __u64 Elf64_Off;
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+struct kimage_arch {
+	void *dtb;
+	phys_addr_t dtb_mem;
+	phys_addr_t kern_reloc;
+	phys_addr_t el2_vectors;
+	phys_addr_t ttbr0;
+	phys_addr_t ttbr1;
+	phys_addr_t zero_page;
+	long unsigned int phys_offset;
+	long unsigned int t0sz;
+};
+
+typedef int kexec_probe_t(const char *, long unsigned int);
+
+struct kimage;
+
+typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
+
+typedef int kexec_cleanup_t(void *);
+
+typedef int kexec_verify_sig_t(const char *, long unsigned int);
+
+struct kexec_file_ops {
+	kexec_probe_t *probe;
+	kexec_load_t *load;
+	kexec_cleanup_t *cleanup;
+	kexec_verify_sig_t *verify_sig;
+};
+
+typedef long unsigned int kimage_entry_t;
+
+struct kexec_segment {
+	union {
+		void *buf;
+		void *kbuf;
+	};
+	size_t bufsz;
+	long unsigned int mem;
+	size_t memsz;
+};
+
+struct purgatory_info {
+	const Elf64_Ehdr *ehdr;
+	Elf64_Shdr *sechdrs;
+	void *purgatory_buf;
+};
+
+struct kimage {
+	kimage_entry_t head;
+	kimage_entry_t *entry;
+	kimage_entry_t *last_entry;
+	long unsigned int start;
+	struct page *control_code_page;
+	struct page *swap_page;
+	void *vmcoreinfo_data_copy;
+	long unsigned int nr_segments;
+	struct kexec_segment segment[16];
+	struct list_head control_pages;
+	struct list_head dest_pages;
+	struct list_head unusable_pages;
+	long unsigned int control_page;
+	unsigned int type: 1;
+	unsigned int preserve_context: 1;
+	unsigned int file_mode: 1;
+	struct kimage_arch arch;
+	void *kernel_buf;
+	long unsigned int kernel_buf_len;
+	void *initrd_buf;
+	long unsigned int initrd_buf_len;
+	char *cmdline_buf;
+	long unsigned int cmdline_buf_len;
+	const struct kexec_file_ops *fops;
+	void *image_loader_data;
+	struct purgatory_info purgatory_info;
+	void *ima_buffer;
+	phys_addr_t ima_buffer_addr;
+	size_t ima_buffer_size;
+	void *elf_headers;
+	long unsigned int elf_headers_sz;
+	long unsigned int elf_load_addr;
+};
+
+struct kexec_buf {
+	struct kimage *image;
+	void *buffer;
+	long unsigned int bufsz;
+	long unsigned int mem;
+	long unsigned int memsz;
+	long unsigned int buf_align;
+	long unsigned int buf_min;
+	long unsigned int buf_max;
+	bool top_down;
+};
+
+struct arm64_image_header {
+	__le32 code0;
+	__le32 code1;
+	__le64 text_offset;
+	__le64 image_size;
+	__le64 flags;
+	__le64 res2;
+	__le64 res3;
+	__le64 res4;
+	__le32 magic;
+	__le32 res5;
+};
+
+typedef long unsigned int irq_hw_number_t;
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	unsigned int node;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+	unsigned int ipi_offset;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	long unsigned int hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct proc_dir_entry;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	long unsigned int last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	long unsigned int threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef bool pstate_check_t(long unsigned int);
+
+typedef struct {
+	pgd_t pgd;
+} p4d_t;
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+typedef u32 probe_opcode_t;
+
+typedef void probes_handler_t(u32, long int, struct pt_regs *);
+
+struct arch_probe_insn {
+	probe_opcode_t *insn;
+	pstate_check_t *pstate_cc;
+	probes_handler_t *handler;
+	long unsigned int restore;
+};
+
+typedef u32 kprobe_opcode_t;
+
+struct arch_specific_insn {
+	struct arch_probe_insn api;
+};
+
+struct mempolicy {
+	atomic_t refcnt;
+	short unsigned int mode;
+	short unsigned int flags;
+	nodemask_t nodes;
+	int home_node;
+	union {
+		nodemask_t cpuset_mems_allowed;
+		nodemask_t user_nodemask;
+	} w;
+};
+
+struct reclaim_state {
+	long unsigned int reclaimed_slab;
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+};
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+};
+
+struct irq_domain_chip_generic;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct irq_domain *parent;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct mutex revmap_mutex;
+	struct irq_data *revmap[0];
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_chip_generic;
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	long unsigned int _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int data: 24;
+	unsigned int flags: 8;
+};
+
+struct swap_cluster_list {
+	struct swap_cluster_info head;
+	struct swap_cluster_info tail;
+};
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	long unsigned int flags;
+	short int prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct swap_cluster_list free_clusters;
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int *cluster_next_cpu;
+	struct percpu_cluster *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	long unsigned int *frontswap_map;
+	atomic_t frontswap_pages;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct swap_cluster_list discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct msi_msg;
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	long unsigned int flags;
+};
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	long unsigned int thread_flags;
+	long unsigned int thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+struct irq_chip_regs {
+	long unsigned int enable;
+	long unsigned int disable;
+	long unsigned int mask;
+	long unsigned int ack;
+	long unsigned int eoi;
+	long unsigned int type;
+	long unsigned int polarity;
+};
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	long unsigned int installed;
+	long unsigned int unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
+};
+
+struct kprobe;
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	long unsigned int nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+enum wb_stat_item {
+	WB_RECLAIMABLE = 0,
+	WB_WRITEBACK = 1,
+	WB_DIRTIED = 2,
+	WB_WRITTEN = 3,
+	NR_WB_STAT_ITEMS = 4,
+};
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 41,
+	MEMCG_SOCK = 42,
+	MEMCG_PERCPU_B = 43,
+	MEMCG_VMALLOC = 44,
+	MEMCG_KMEM = 45,
+	MEMCG_ZSWAP_B = 46,
+	MEMCG_ZSWAPPED = 47,
+	MEMCG_NR_STAT = 48,
+};
+
+enum memcg_memory_event {
+	MEMCG_LOW = 0,
+	MEMCG_HIGH = 1,
+	MEMCG_MAX = 2,
+	MEMCG_OOM = 3,
+	MEMCG_OOM_KILL = 4,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+struct percpu_cluster {
+	struct swap_cluster_info index;
+	unsigned int next;
+};
+
+struct hstate {
+	struct mutex resize_lock;
+	int next_nid_to_alloc;
+	int next_nid_to_free;
+	unsigned int order;
+	unsigned int demote_order;
+	long unsigned int mask;
+	long unsigned int max_huge_pages;
+	long unsigned int nr_huge_pages;
+	long unsigned int free_huge_pages;
+	long unsigned int resv_huge_pages;
+	long unsigned int surplus_huge_pages;
+	long unsigned int nr_overcommit_huge_pages;
+	struct list_head hugepage_activelist;
+	struct list_head hugepage_freelists[512];
+	unsigned int max_huge_pages_node[512];
+	unsigned int nr_huge_pages_node[512];
+	unsigned int free_huge_pages_node[512];
+	unsigned int surplus_huge_pages_node[512];
+	char name[32];
+};
+
+struct fault_info {
+	int (*fn)(long unsigned int, long unsigned int, struct pt_regs *);
+	int sig;
+	int code;
+	const char *name;
+};
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __u16 __be16;
+
+typedef __u32 __be32;
+
+typedef __u32 __wsum;
+
+typedef __kernel_off_t off_t;
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	__MAX_BPF_ATTACH_TYPE = 44,
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	MAX_BPF_LINK_TYPE = 10,
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+	};
+	struct {
+		__u32 target_fd;
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		__u32 target_fd;
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		__u32 prog_cnt;
+		__u64 prog_attach_flags;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		__u32 prog_fd;
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		__u32 new_prog_fd;
+		__u32 flags;
+		__u32 old_prog_fd;
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+	};
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
 };
 
 enum aarch64_insn_hint_cr_op {
@@ -14724,38 +9203,13 @@
 	AARCH64_INSN_HINT_PSB = 544,
 	AARCH64_INSN_HINT_TSB = 576,
 	AARCH64_INSN_HINT_CSDB = 640,
+	AARCH64_INSN_HINT_CLEARBHB = 704,
 	AARCH64_INSN_HINT_BTI = 1024,
 	AARCH64_INSN_HINT_BTIC = 1088,
 	AARCH64_INSN_HINT_BTIJ = 1152,
 	AARCH64_INSN_HINT_BTIJC = 1216,
 };
 
-enum aarch64_insn_imm_type {
-	AARCH64_INSN_IMM_ADR = 0,
-	AARCH64_INSN_IMM_26 = 1,
-	AARCH64_INSN_IMM_19 = 2,
-	AARCH64_INSN_IMM_16 = 3,
-	AARCH64_INSN_IMM_14 = 4,
-	AARCH64_INSN_IMM_12 = 5,
-	AARCH64_INSN_IMM_9 = 6,
-	AARCH64_INSN_IMM_7 = 7,
-	AARCH64_INSN_IMM_6 = 8,
-	AARCH64_INSN_IMM_S = 9,
-	AARCH64_INSN_IMM_R = 10,
-	AARCH64_INSN_IMM_N = 11,
-	AARCH64_INSN_IMM_MAX = 12,
-};
-
-enum aarch64_insn_register_type {
-	AARCH64_INSN_REGTYPE_RT = 0,
-	AARCH64_INSN_REGTYPE_RN = 1,
-	AARCH64_INSN_REGTYPE_RT2 = 2,
-	AARCH64_INSN_REGTYPE_RM = 3,
-	AARCH64_INSN_REGTYPE_RD = 4,
-	AARCH64_INSN_REGTYPE_RA = 5,
-	AARCH64_INSN_REGTYPE_RS = 6,
-};
-
 enum aarch64_insn_register {
 	AARCH64_INSN_REG_0 = 0,
 	AARCH64_INSN_REG_1 = 1,
@@ -14835,12 +9289,16 @@
 enum aarch64_insn_ldst_type {
 	AARCH64_INSN_LDST_LOAD_REG_OFFSET = 0,
 	AARCH64_INSN_LDST_STORE_REG_OFFSET = 1,
-	AARCH64_INSN_LDST_LOAD_PAIR_PRE_INDEX = 2,
-	AARCH64_INSN_LDST_STORE_PAIR_PRE_INDEX = 3,
-	AARCH64_INSN_LDST_LOAD_PAIR_POST_INDEX = 4,
-	AARCH64_INSN_LDST_STORE_PAIR_POST_INDEX = 5,
-	AARCH64_INSN_LDST_LOAD_EX = 6,
-	AARCH64_INSN_LDST_STORE_EX = 7,
+	AARCH64_INSN_LDST_LOAD_IMM_OFFSET = 2,
+	AARCH64_INSN_LDST_STORE_IMM_OFFSET = 3,
+	AARCH64_INSN_LDST_LOAD_PAIR_PRE_INDEX = 4,
+	AARCH64_INSN_LDST_STORE_PAIR_PRE_INDEX = 5,
+	AARCH64_INSN_LDST_LOAD_PAIR_POST_INDEX = 6,
+	AARCH64_INSN_LDST_STORE_PAIR_POST_INDEX = 7,
+	AARCH64_INSN_LDST_LOAD_EX = 8,
+	AARCH64_INSN_LDST_LOAD_ACQ_EX = 9,
+	AARCH64_INSN_LDST_STORE_EX = 10,
+	AARCH64_INSN_LDST_STORE_REL_EX = 11,
 };
 
 enum aarch64_insn_adsb_type {
@@ -14893,560 +9351,4824 @@
 	AARCH64_INSN_LOGIC_BIC_SETFLAGS = 7,
 };
 
-enum aarch64_insn_prfm_type {
-	AARCH64_INSN_PRFM_TYPE_PLD = 0,
-	AARCH64_INSN_PRFM_TYPE_PLI = 1,
-	AARCH64_INSN_PRFM_TYPE_PST = 2,
+enum aarch64_insn_mem_atomic_op {
+	AARCH64_INSN_MEM_ATOMIC_ADD = 0,
+	AARCH64_INSN_MEM_ATOMIC_CLR = 1,
+	AARCH64_INSN_MEM_ATOMIC_EOR = 2,
+	AARCH64_INSN_MEM_ATOMIC_SET = 3,
+	AARCH64_INSN_MEM_ATOMIC_SWP = 4,
 };
 
-enum aarch64_insn_prfm_target {
-	AARCH64_INSN_PRFM_TARGET_L1 = 0,
-	AARCH64_INSN_PRFM_TARGET_L2 = 1,
-	AARCH64_INSN_PRFM_TARGET_L3 = 2,
+enum aarch64_insn_mem_order_type {
+	AARCH64_INSN_MEM_ORDER_NONE = 0,
+	AARCH64_INSN_MEM_ORDER_ACQ = 1,
+	AARCH64_INSN_MEM_ORDER_REL = 2,
+	AARCH64_INSN_MEM_ORDER_ACQREL = 3,
 };
 
-enum aarch64_insn_prfm_policy {
-	AARCH64_INSN_PRFM_POLICY_KEEP = 0,
-	AARCH64_INSN_PRFM_POLICY_STRM = 1,
-};
-
-enum aarch64_insn_adr_type {
-	AARCH64_INSN_ADR_TYPE_ADRP = 0,
-	AARCH64_INSN_ADR_TYPE_ADR = 1,
-};
-
-enum fixed_addresses {
-	FIX_HOLE = 0,
-	FIX_FDT_END = 1,
-	FIX_FDT = 1024,
-	FIX_EARLYCON_MEM_BASE = 1025,
-	FIX_TEXT_POKE0 = 1026,
-	FIX_ENTRY_TRAMP_DATA = 1027,
-	FIX_ENTRY_TRAMP_TEXT = 1028,
-	__end_of_permanent_fixed_addresses = 1029,
-	FIX_BTMAP_END = 1029,
-	FIX_BTMAP_BEGIN = 1476,
-	FIX_PTE = 1477,
-	FIX_PMD = 1478,
-	FIX_PUD = 1479,
-	FIX_PGD = 1480,
-	__end_of_fixed_addresses = 1481,
-};
-
-struct aarch64_insn_patch {
-	void **text_addrs;
-	u32 *new_insns;
-	int insn_cnt;
-	atomic_t cpu_count;
-};
-
-struct return_address_data {
-	unsigned int level;
-	void *addr;
-};
-
-struct kobj_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+enum aarch64_insn_mb_type {
+	AARCH64_INSN_MB_SY = 0,
+	AARCH64_INSN_MB_ST = 1,
+	AARCH64_INSN_MB_LD = 2,
+	AARCH64_INSN_MB_ISH = 3,
+	AARCH64_INSN_MB_ISHST = 4,
+	AARCH64_INSN_MB_ISHLD = 5,
+	AARCH64_INSN_MB_NSH = 6,
+	AARCH64_INSN_MB_NSHST = 7,
+	AARCH64_INSN_MB_NSHLD = 8,
+	AARCH64_INSN_MB_OSH = 9,
+	AARCH64_INSN_MB_OSHST = 10,
+	AARCH64_INSN_MB_OSHLD = 11,
 };
 
 enum {
-	CAP_HWCAP = 1,
-	CAP_COMPAT_HWCAP = 2,
-	CAP_COMPAT_HWCAP2 = 3,
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
 };
 
-struct secondary_data {
-	void *stack;
-	struct task_struct *task;
-	long int status;
-};
-
-struct device_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device *, struct device_attribute *, char *);
-	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
-};
-
-struct __ftr_reg_entry {
-	u32 sys_id;
-	struct arm64_ftr_reg *reg;
-};
-
-typedef void kpti_remap_fn(int, int, phys_addr_t);
-
-typedef void ttbr_replace_func(phys_addr_t);
-
-struct alt_instr {
-	s32 orig_offset;
-	s32 alt_offset;
-	u16 cpufeature;
-	u8 orig_len;
-	u8 alt_len;
-};
-
-typedef void (*alternative_cb_t)(struct alt_instr *, __le32 *, __le32 *, int);
-
-struct alt_region {
-	struct alt_instr *begin;
-	struct alt_instr *end;
-};
-
-enum cache_type {
-	CACHE_TYPE_NOCACHE = 0,
-	CACHE_TYPE_INST = 1,
-	CACHE_TYPE_DATA = 2,
-	CACHE_TYPE_SEPARATE = 3,
-	CACHE_TYPE_UNIFIED = 4,
-};
-
-struct cacheinfo {
-	unsigned int id;
-	enum cache_type type;
-	unsigned int level;
-	unsigned int coherency_line_size;
-	unsigned int number_of_sets;
-	unsigned int ways_of_associativity;
-	unsigned int physical_line_partition;
-	unsigned int size;
-	cpumask_t shared_cpu_map;
-	unsigned int attributes;
-	void *fw_token;
-	bool disable_sysfs;
-	void *priv;
-};
-
-struct cpu_cacheinfo {
-	struct cacheinfo *info_list;
-	unsigned int num_levels;
-	unsigned int num_leaves;
-	bool cpu_map_populated;
-};
-
-struct irq_desc;
-
-typedef void (*irq_flow_handler_t)(struct irq_desc *);
-
-struct msi_desc;
-
-struct irq_common_data {
-	unsigned int state_use_accessors;
-	unsigned int node;
-	void *handler_data;
-	struct msi_desc *msi_desc;
-	cpumask_var_t affinity;
-	cpumask_var_t effective_affinity;
-	unsigned int ipi_offset;
-};
-
-struct irq_chip;
-
-struct irq_data {
-	u32 mask;
-	unsigned int irq;
-	long unsigned int hwirq;
-	struct irq_common_data *common;
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	struct irq_data *parent_data;
-	void *chip_data;
-};
-
-struct irqaction;
-
-struct irq_affinity_notify;
-
-struct irq_desc {
-	struct irq_common_data irq_common_data;
-	struct irq_data irq_data;
-	unsigned int *kstat_irqs;
-	irq_flow_handler_t handle_irq;
-	struct irqaction *action;
-	unsigned int status_use_accessors;
-	unsigned int core_internal_state__do_not_mess_with_it;
-	unsigned int depth;
-	unsigned int wake_depth;
-	unsigned int tot_count;
-	unsigned int irq_count;
-	long unsigned int last_unhandled;
-	unsigned int irqs_unhandled;
-	atomic_t threads_handled;
-	int threads_handled_last;
-	raw_spinlock_t lock;
-	struct cpumask *percpu_enabled;
-	const struct cpumask *percpu_affinity;
-	const struct cpumask *affinity_hint;
-	struct irq_affinity_notify *affinity_notify;
-	long unsigned int threads_oneshot;
-	atomic_t threads_active;
-	wait_queue_head_t wait_for_threads;
-	unsigned int nr_actions;
-	unsigned int no_suspend_depth;
-	unsigned int cond_suspend_depth;
-	unsigned int force_resume_depth;
-	struct proc_dir_entry *dir;
-	struct callback_head rcu;
-	struct kobject kobj;
-	struct mutex request_mutex;
-	int parent_irq;
-	struct module *owner;
-	const char *name;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum irq_gc_flags {
-	IRQ_GC_INIT_MASK_CACHE = 1,
-	IRQ_GC_INIT_NESTED_LOCK = 2,
-	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
-	IRQ_GC_NO_MASK = 8,
-	IRQ_GC_BE_IO = 16,
-};
-
-struct irq_chip_generic;
-
-struct irq_domain_chip_generic {
-	unsigned int irqs_per_chip;
-	unsigned int num_chips;
-	unsigned int irq_flags_to_clear;
-	unsigned int irq_flags_to_set;
-	enum irq_gc_flags gc_flags;
-	struct irq_chip_generic *gc[0];
-};
-
-struct acpi_subtable_header {
-	u8 type;
-	u8 length;
-};
-
-struct acpi_hmat_structure {
-	u16 type;
-	u16 reserved;
-	u32 length;
-};
-
-enum acpi_madt_type {
-	ACPI_MADT_TYPE_LOCAL_APIC = 0,
-	ACPI_MADT_TYPE_IO_APIC = 1,
-	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
-	ACPI_MADT_TYPE_NMI_SOURCE = 3,
-	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
-	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
-	ACPI_MADT_TYPE_IO_SAPIC = 6,
-	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
-	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
-	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
-	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
-	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
-	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
-	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
-	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
-	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
-	ACPI_MADT_TYPE_RESERVED = 16,
-};
-
-struct acpi_madt_generic_interrupt {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 cpu_interface_number;
-	u32 uid;
-	u32 flags;
-	u32 parking_version;
-	u32 performance_interrupt;
-	u64 parked_address;
-	u64 base_address;
-	u64 gicv_base_address;
-	u64 gich_base_address;
-	u32 vgic_interrupt;
-	u64 gicr_base_address;
-	u64 arm_mpidr;
-	u8 efficiency_class;
-	u8 reserved2[1];
-	u16 spe_interrupt;
-} __attribute__((packed));
-
-enum irqreturn {
-	IRQ_NONE = 0,
-	IRQ_HANDLED = 1,
-	IRQ_WAKE_THREAD = 2,
-};
-
-typedef enum irqreturn irqreturn_t;
-
-typedef irqreturn_t (*irq_handler_t)(int, void *);
-
-struct irqaction {
-	irq_handler_t handler;
-	void *dev_id;
-	void *percpu_dev_id;
-	struct irqaction *next;
-	irq_handler_t thread_fn;
-	struct task_struct *thread;
-	struct irqaction *secondary;
-	unsigned int irq;
+struct page_pool_params {
 	unsigned int flags;
-	long unsigned int thread_flags;
-	long unsigned int thread_mask;
-	const char *name;
-	struct proc_dir_entry *dir;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct page_pool_alloc_stats {
+	u64 fast;
+	u64 slow;
+	u64 slow_high_order;
+	u64 empty;
+	u64 refill;
+	u64 waive;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 };
 
-struct irq_affinity_notify {
-	unsigned int irq;
-	struct kref kref;
+struct page_pool_recycle_stats;
+
+struct page_pool {
+	struct page_pool_params p;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	long unsigned int defer_start;
+	long unsigned int defer_warn;
+	u32 pages_state_hold_cnt;
+	unsigned int frag_offset;
+	struct page *frag_page;
+	long int frag_users;
+	struct page_pool_alloc_stats alloc_stats;
+	u32 xdp_mem_id;
+	long: 32;
+	long: 64;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	struct page_pool_recycle_stats *recycle_stats;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rhash_head {
+	struct rhash_head *next;
+};
+
+struct rhashtable;
+
+struct rhashtable_compare_arg {
+	struct rhashtable *ht;
+	const void *key;
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
+
+struct rhashtable_params {
+	u16 nelem_hint;
+	u16 key_len;
+	u16 key_offset;
+	u16 head_offset;
+	unsigned int max_size;
+	u16 min_size;
+	bool automatic_shrinking;
+	rht_hashfn_t hashfn;
+	rht_obj_hashfn_t obj_hashfn;
+	rht_obj_cmpfn_t obj_cmpfn;
+};
+
+struct bucket_table;
+
+struct rhashtable {
+	struct bucket_table *tbl;
+	unsigned int key_len;
+	unsigned int max_elems;
+	struct rhashtable_params p;
+	bool rhlist;
+	struct work_struct run_work;
+	struct mutex mutex;
+	spinlock_t lock;
+	atomic_t nelems;
+};
+
+struct pipe_buffer;
+
+struct watch_queue;
+
+struct pipe_inode_info {
+	struct mutex mutex;
+	wait_queue_head_t rd_wait;
+	wait_queue_head_t wr_wait;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int max_usage;
+	unsigned int ring_size;
+	bool note_loss;
+	unsigned int nr_accounted;
+	unsigned int readers;
+	unsigned int writers;
+	unsigned int files;
+	unsigned int r_counter;
+	unsigned int w_counter;
+	bool poll_usage;
+	struct page *tmp_page;
+	struct fasync_struct *fasync_readers;
+	struct fasync_struct *fasync_writers;
+	struct pipe_buffer *bufs;
+	struct user_struct *user;
+	struct watch_queue *watch_queue;
+};
+
+struct bpf_run_ctx {};
+
+struct raw_notifier_head {
+	struct notifier_block *head;
+};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+struct bpf_map;
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+};
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct btf;
+
+struct bpf_prog_aux;
+
+struct bpf_local_storage_map;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_map *, void *);
+	int (*map_push_elem)(struct bpf_map *, void *, u64);
+	int (*map_pop_elem)(struct bpf_map *, void *);
+	int (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(void *);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
+	int (*map_redirect)(struct bpf_map *, u32, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+};
+
+struct bpf_map_value_off;
+
+struct bpf_map_off_arr;
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	void *security;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	int spin_lock_off;
+	struct bpf_map_value_off *kptr_off_tab;
+	int timer_off;
+	u32 id;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	struct bpf_map_off_arr *off_arr;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
 	struct work_struct work;
-	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
-	void (*release)(struct kref *);
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct irq_affinity_desc {
-	struct cpumask mask;
-	unsigned int is_managed: 1;
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
 };
 
-enum irqchip_irq_state {
-	IRQCHIP_STATE_PENDING = 0,
-	IRQCHIP_STATE_ACTIVE = 1,
-	IRQCHIP_STATE_MASKED = 2,
-	IRQCHIP_STATE_LINE_LEVEL = 3,
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
 };
 
-union acpi_subtable_headers {
-	struct acpi_subtable_header common;
-	struct acpi_hmat_structure hmat;
+struct bpf_ksym {
+	long unsigned int start;
+	long unsigned int end;
+	char name[128];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
 };
 
-enum {
-	IRQ_TYPE_NONE = 0,
-	IRQ_TYPE_EDGE_RISING = 1,
-	IRQ_TYPE_EDGE_FALLING = 2,
-	IRQ_TYPE_EDGE_BOTH = 3,
-	IRQ_TYPE_LEVEL_HIGH = 4,
-	IRQ_TYPE_LEVEL_LOW = 8,
-	IRQ_TYPE_LEVEL_MASK = 12,
-	IRQ_TYPE_SENSE_MASK = 15,
-	IRQ_TYPE_DEFAULT = 15,
-	IRQ_TYPE_PROBE = 16,
-	IRQ_LEVEL = 256,
-	IRQ_PER_CPU = 512,
-	IRQ_NOPROBE = 1024,
-	IRQ_NOREQUEST = 2048,
-	IRQ_NOAUTOEN = 4096,
-	IRQ_NO_BALANCING = 8192,
-	IRQ_MOVE_PCNTXT = 16384,
-	IRQ_NESTED_THREAD = 32768,
-	IRQ_NOTHREAD = 65536,
-	IRQ_PER_CPU_DEVID = 131072,
-	IRQ_IS_POLLED = 262144,
-	IRQ_DISABLE_UNLAZY = 524288,
-	IRQ_HIDDEN = 1048576,
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info_aux;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	void *security;
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
 };
 
-struct msi_msg {
-	u32 address_lo;
-	u32 address_hi;
-	u32 data;
+struct bpf_prog_stats;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats *stats;
+	int *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	union {
+		struct {
+			struct {			} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {			} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+enum bpf_kptr_type {
+	BPF_KPTR_UNREF = 0,
+	BPF_KPTR_REF = 1,
+};
+
+struct bpf_map_value_off_desc {
+	u32 offset;
+	enum bpf_kptr_type type;
+	struct {
+		struct btf *btf;
+		struct module *module;
+		btf_dtor_kfunc_t dtor;
+		u32 btf_id;
+	} kptr;
+};
+
+struct bpf_map_value_off {
+	u32 nr_off;
+	struct bpf_map_value_off_desc off[0];
+};
+
+struct bpf_map_off_arr {
+	u32 cnt;
+	u32 field_off[10];
+	u8 field_sz[10];
+};
+
+struct bpf_offloaded_map;
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+};
+
+struct net_device;
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 netdev_features_t;
+
+struct net_device_stats {
+	long unsigned int rx_packets;
+	long unsigned int tx_packets;
+	long unsigned int rx_bytes;
+	long unsigned int tx_bytes;
+	long unsigned int rx_errors;
+	long unsigned int tx_errors;
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int multicast;
+	long unsigned int collisions;
+	long unsigned int rx_length_errors;
+	long unsigned int rx_over_errors;
+	long unsigned int rx_crc_errors;
+	long unsigned int rx_frame_errors;
+	long unsigned int rx_fifo_errors;
+	long unsigned int rx_missed_errors;
+	long unsigned int tx_aborted_errors;
+	long unsigned int tx_carrier_errors;
+	long unsigned int tx_fifo_errors;
+	long unsigned int tx_heartbeat_errors;
+	long unsigned int tx_window_errors;
+	long unsigned int rx_compressed;
+	long unsigned int tx_compressed;
+};
+
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
+
+struct tipc_bearer;
+
+struct mpls_dev;
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+struct sk_buff;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+struct ref_tracker_dir {};
+
+typedef struct {
+	struct net *net;
+} possible_net_t;
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+struct pcpu_dstats;
+
+struct garp_port;
+
+struct mrp_port;
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct macsec_ops;
+
+struct udp_tunnel_nic;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct l3mdev_ops;
+
+struct ndisc_ops;
+
+struct xfrmdev_ops;
+
+struct tlsdev_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct dsa_port;
+
+struct wireless_dev;
+
+struct wpan_dev;
+
+struct mctp_dev;
+
+struct netdev_rx_queue;
+
+struct mini_Qdisc;
+
+struct netdev_queue;
+
+struct nf_hook_entries;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct netpoll_info;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct dm_hw_stat_delta;
+
+struct rtnl_link_ops;
+
+struct dcbnl_rtnl_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct sfp_bus;
+
+struct udp_tunnel_nic_info;
+
+struct rtnl_hw_stats64;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias *ifalias;
+	long unsigned int mem_end;
+	long unsigned int mem_start;
+	long unsigned int base_addr;
+	long unsigned int state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	long long unsigned int priv_flags;
+	const struct net_device_ops *netdev_ops;
+	int ifindex;
+	short unsigned int gflags;
+	short unsigned int hard_header_len;
+	unsigned int mtu;
+	short unsigned int needed_headroom;
+	short unsigned int needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	short unsigned int type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct l3mdev_ops *l3mdev_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct xfrmdev_ops *xfrmdev_ops;
+	const struct tlsdev_ops *tlsdev_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	short unsigned int neigh_priv_len;
+	short unsigned int dev_id;
+	short unsigned int dev_port;
+	short unsigned int padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device *ip_ptr;
+	struct inet6_dev *ip6_ptr;
+	struct vlan_info *vlan_info;
+	struct dsa_port *dsa_ptr;
+	struct tipc_bearer *tipc_ptr;
+	void *ax25_ptr;
+	struct wireless_dev *ieee80211_ptr;
+	struct wpan_dev *ieee802154_ptr;
+	struct mpls_dev *mpls_ptr;
+	struct mctp_dev *mctp_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog *xdp_prog;
+	long unsigned int gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	rx_handler_func_t *rx_handler;
+	void *rx_handler_data;
+	struct mini_Qdisc *miniq_ingress;
+	struct netdev_queue *ingress_queue;
+	struct nf_hook_entries *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue *xdp_bulkq;
+	struct xps_dev_maps *xps_maps[2];
+	struct mini_Qdisc *miniq_egress;
+	struct nf_hook_entries *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	struct netpoll_info *npinfo;
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	union {
+		struct pcpu_lstats *lstats;
+		struct pcpu_sw_netstats *tstats;
+		struct pcpu_dstats *dstats;
+	};
+	struct garp_port *garp_port;
+	struct mrp_port *mrp_port;
+	struct dm_hw_stat_delta *dm_private;
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	const struct dcbnl_rtnl_ops *dcbnl_ops;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	unsigned int fcoe_ddp_xid;
+	struct netprio_map *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct macsec_ops *macsec_ops;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	__BPF_REG_TYPE_MAX = 20,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 524287,
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 nr_args;
+	u8 arg_size[12];
+};
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	struct work_struct work;
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct ftrace_ops *fops;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u32 flags;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	u64 selector;
+	struct module *mod;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+typedef unsigned int sk_buff_data_t;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				long unsigned int dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	union {
+		struct sock *sk;
+		int ip_defrag_offset;
+	};
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			long unsigned int _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		long unsigned int _sk_redir;
+	};
+	long unsigned int _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+typedef short unsigned int __kernel_sa_family_t;
+
+typedef __kernel_sa_family_t sa_family_t;
+
+struct sockaddr {
+	sa_family_t sa_family;
+	char sa_data[14];
+};
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	short unsigned int loopback;
+} sync_serial_settings;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	short unsigned int loopback;
+	unsigned int slot_map;
+} te1_settings;
+
+typedef struct {
+	short unsigned int encoding;
+	short unsigned int parity;
+} raw_hdlc_proto;
+
+typedef struct {
+	unsigned int t391;
+	unsigned int t392;
+	unsigned int n391;
+	unsigned int n392;
+	unsigned int n393;
+	short unsigned int lmi;
+	short unsigned int dce;
+} fr_proto;
+
+typedef struct {
+	unsigned int dlci;
+} fr_proto_pvc;
+
+typedef struct {
+	unsigned int dlci;
+	char master[16];
+} fr_proto_pvc_info;
+
+typedef struct {
+	unsigned int interval;
+	unsigned int timeout;
+} cisco_proto;
+
+typedef struct {
+	short unsigned int dce;
+	unsigned int modulo;
+	unsigned int window;
+	unsigned int t1;
+	unsigned int t2;
+	unsigned int n2;
+} x25_hdlc_proto;
+
+struct ifmap {
+	long unsigned int mem_start;
+	long unsigned int mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct if_settings {
+	unsigned int type;
+	unsigned int size;
+	union {
+		raw_hdlc_proto *raw_hdlc;
+		cisco_proto *cisco;
+		fr_proto *fr;
+		fr_proto_pvc *fr_pvc;
+		fr_proto_pvc_info *fr_pvc_info;
+		x25_hdlc_proto *x25;
+		sync_serial_settings *sync;
+		te1_settings *te1;
+	} ifs_ifsu;
+};
+
+struct ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short int ifru_flags;
+		int ifru_ivalue;
+		int ifru_mtu;
+		struct ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		void *ifru_data;
+		struct if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse *prot_inuse;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_xfrm_mib;
+
+struct linux_tls_mib;
+
+struct mptcp_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct netns_mib {
+	struct ipstats_mib *ip_statistics;
+	struct ipstats_mib *ipv6_statistics;
+	struct tcp_mib *tcp_statistics;
+	struct linux_mib *net_statistics;
+	struct udp_mib *udp_statistics;
+	struct udp_mib *udp_stats_in6;
+	struct linux_xfrm_mib *xfrm_statistics;
+	struct linux_tls_mib *tls_statistics;
+	struct mptcp_mib *mptcp_statistics;
+	struct udp_mib *udplite_statistics;
+	struct udp_mib *udplite_stats_in6;
+	struct icmp_mib *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct inet_timewait_death_row;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row *tcp_death_row;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table *fib_main;
+	struct fib_table *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	atomic_t fib_num_tclassid_users;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_raw_l3mdev_accept;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_l3mdev_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	long unsigned int sysctl_tcp_comp_sack_delay_ns;
+	long unsigned int sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops *tcp_congestion_control;
+	struct tcp_fastopen_context *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	long unsigned int tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_udp_l3mdev_accept;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	long unsigned int *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct list_head mr_tables;
+	struct fib_rules_ops *mr_rules_ops;
+	u32 sysctl_fib_multipath_hash_fields;
+	u8 sysctl_fib_multipath_use_neigh;
+	u8 sysctl_fib_multipath_hash_policy;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+};
+
+struct dst_entry;
+
+struct neighbour;
+
+struct dst_ops {
+	short unsigned int family;
+	unsigned int gc_thresh;
+	int (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *, int);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	long unsigned int icmpv6_ratemask[4];
+	long unsigned int *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	bool skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	long unsigned int ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	bool fib6_has_custom_rules;
+	unsigned int fib6_rules_require_fldissect;
+	unsigned int fib6_routes_require_src;
+	struct rt6_info *ip6_prohibit_entry;
+	struct rt6_info *ip6_blk_hole_entry;
+	struct fib6_table *fib6_local_tbl;
+	struct fib_rules_ops *fib6_rules_ops;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	struct list_head mr6_tables;
+	struct fib_rules_ops *mr6_rules_ops;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_lowpan {
+	struct ctl_table_header *frags_hdr;
+};
+
+struct netns_ieee802154_lowpan {
+	struct netns_sysctl_lowpan sysctl;
+	struct fqdir *fqdir;
+};
+
+struct sctp_mib;
+
+struct netns_sctp {
+	struct sctp_mib *sctp_statistics;
+	struct proc_dir_entry *proc_net_sctp;
+	struct ctl_table_header *sysctl_header;
+	struct sock *ctl_sock;
+	struct sock *udp4_sock;
+	struct sock *udp6_sock;
+	int udp_port;
+	int encap_port;
+	struct list_head local_addr_list;
+	struct list_head addr_waitq;
+	struct timer_list addr_wq_timer;
+	struct list_head auto_asconf_splist;
+	spinlock_t addr_wq_lock;
+	spinlock_t local_addr_lock;
+	unsigned int rto_initial;
+	unsigned int rto_min;
+	unsigned int rto_max;
+	int rto_alpha;
+	int rto_beta;
+	int max_burst;
+	int cookie_preserve_enable;
+	char *sctp_hmac_alg;
+	unsigned int valid_cookie_life;
+	unsigned int sack_timeout;
+	unsigned int hb_interval;
+	unsigned int probe_interval;
+	int max_retrans_association;
+	int max_retrans_path;
+	int max_retrans_init;
+	int pf_retrans;
+	int ps_retrans;
+	int pf_enable;
+	int pf_expose;
+	int sndbuf_policy;
+	int rcvbuf_policy;
+	int default_auto_asconf;
+	int addip_enable;
+	int addip_noauth;
+	int prsctp_enable;
+	int reconf_enable;
+	int auth_enable;
+	int intl_enable;
+	int ecn_enable;
+	int scope_policy;
+	int rwnd_upd_shift;
+	long unsigned int max_autoclose;
+};
+
+struct nf_logger;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger *nf_loggers[13];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries *hooks_ipv4[5];
+	struct nf_hook_entries *hooks_ipv6[5];
+	struct nf_hook_entries *hooks_arp[3];
+	struct nf_hook_entries *hooks_bridge[5];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+};
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+	unsigned int offload_timeout;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+	unsigned int offload_timeout;
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct nf_ct_event_notifier;
+
+struct netns_ct {
+	u8 ctnetlink_has_listener;
+	bool ecache_dwork_pending;
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat *stat;
+	struct nf_ct_event_notifier *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+	unsigned int labels_used;
+};
+
+struct netns_nftables {
+	u8 gencursor;
+};
+
+struct nf_flow_table_stat;
+
+struct netns_ft {
+	struct nf_flow_table_stat *stat;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head *state_bydst;
+	struct hlist_head *state_bysrc;
+	struct hlist_head *state_byspi;
+	struct hlist_head *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	long: 64;
+	long: 64;
+};
+
+struct netns_ipvs;
+
+struct mpls_route;
+
+struct netns_mpls {
+	int ip_ttl_propagate;
+	int default_ttl;
+	size_t platform_labels;
+	struct mpls_route **platform_label;
+	struct ctl_table_header *ctl;
+};
+
+struct can_dev_rcv_lists;
+
+struct can_pkg_stats;
+
+struct can_rcv_lists_stats;
+
+struct netns_can {
+	struct proc_dir_entry *proc_dir;
+	struct proc_dir_entry *pde_stats;
+	struct proc_dir_entry *pde_reset_stats;
+	struct proc_dir_entry *pde_rcvlist_all;
+	struct proc_dir_entry *pde_rcvlist_fil;
+	struct proc_dir_entry *pde_rcvlist_inv;
+	struct proc_dir_entry *pde_rcvlist_sff;
+	struct proc_dir_entry *pde_rcvlist_eff;
+	struct proc_dir_entry *pde_rcvlist_err;
+	struct proc_dir_entry *bcmproc_dir;
+	struct can_dev_rcv_lists *rx_alldev_list;
+	spinlock_t rcvlists_lock;
+	struct timer_list stattimer;
+	struct can_pkg_stats *pkg_stats;
+	struct can_rcv_lists_stats *rcv_lists_stats;
+	struct hlist_head cgw_list;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct netns_mctp {
+	struct list_head routes;
+	struct mutex bind_lock;
+	struct hlist_head binds;
+	spinlock_t keys_lock;
+	struct hlist_head keys;
+	unsigned int default_net;
+	struct mutex neigh_lock;
+	struct list_head neighbours;
+};
+
+struct smc_stats;
+
+struct smc_stats_rsn;
+
+struct netns_smc {
+	struct smc_stats *smc_stats;
+	struct mutex mutex_fback_rsn;
+	struct smc_stats_rsn *fback_rsn;
+	bool limit_smc_hs;
+	struct ctl_table_header *smc_hdr;
+	unsigned int sysctl_autocorking_size;
+	unsigned int sysctl_smcr_buf_type;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	int ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	struct netns_ipv4 ipv4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_ipv6 ipv6;
+	struct netns_ieee802154_lowpan ieee802154_lowpan;
+	struct netns_sctp sctp;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct netns_nftables nft;
+	struct netns_ft ft;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_ipvs *ipvs;
+	struct netns_mpls mpls;
+	struct netns_can can;
+	struct netns_xdp xdp;
+	struct netns_mctp mctp;
+	struct sock *crypto_nlsk;
+	struct sock *diag_nlsk;
+	struct netns_smc smc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+struct scatterlist {
+	long unsigned int page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+	unsigned int dma_length;
+	unsigned int dma_flags;
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	long unsigned int private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct page_pool_recycle_stats {
+	u64 cached;
+	u64 cache_full;
+	u64 ring;
+	u64 ring_full;
+	u64 released_refcnt;
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[4];
+	u8 chunks;
+	long: 56;
+	char data[0];
+};
+
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	long unsigned int slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+struct ipstats_mib {
+	u64 mibs[37];
+	struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+	long unsigned int mibs[28];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	long unsigned int mibs[6];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+	long unsigned int mibs[16];
+};
+
+struct udp_mib {
+	long unsigned int mibs[10];
+};
+
+struct linux_mib {
+	long unsigned int mibs[126];
+};
+
+struct linux_xfrm_mib {
+	long unsigned int mibs[29];
+};
+
+struct linux_tls_mib {
+	long unsigned int mibs[13];
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long int high_thresh;
+	long int low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 56;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+	long: 64;
+	long: 64;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfrm_state;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	long unsigned int _metrics;
+	long unsigned int expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	short unsigned int flags;
+	short int obsolete;
+	short unsigned int header_len;
+	short unsigned int trailer_len;
+	atomic_t __refcnt;
+	int __use;
+	long unsigned int lastuse;
+	struct lwtunnel_state *lwtstate;
+	struct callback_head callback_head;
+	short int error;
+	short int __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+};
+
+struct hh_cache {
+	unsigned int hh_len;
+	seqlock_t hh_lock;
+	long unsigned int hh_data[16];
+};
+
+struct neigh_table;
+
+struct neigh_parms;
+
+struct neigh_ops;
+
+struct neighbour {
+	struct neighbour *next;
+	struct neigh_table *tbl;
+	struct neigh_parms *parms;
+	long unsigned int confirmed;
+	long unsigned int updated;
+	rwlock_t lock;
+	refcount_t refcnt;
+	unsigned int arp_queue_len_bytes;
+	struct sk_buff_head arp_queue;
+	struct timer_list timer;
+	long unsigned int used;
+	atomic_t probes;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	u8 protocol;
+	u32 flags;
+	seqlock_t ha_lock;
+	int: 32;
+	unsigned char ha[32];
+	struct hh_cache hh;
+	int (*output)(struct neighbour *, struct sk_buff *);
+	const struct neigh_ops *ops;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	struct callback_head rcu;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u8 primary_key[0];
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+struct nf_flow_table_stat {
+	unsigned int count_wq_add;
+	unsigned int count_wq_del;
+	unsigned int count_wq_stats;
+};
+
+struct ieee_ets {
+	__u8 willing;
+	__u8 ets_cap;
+	__u8 cbs;
+	__u8 tc_tx_bw[8];
+	__u8 tc_rx_bw[8];
+	__u8 tc_tsa[8];
+	__u8 prio_tc[8];
+	__u8 tc_reco_bw[8];
+	__u8 tc_reco_tsa[8];
+	__u8 reco_prio_tc[8];
+};
+
+struct ieee_maxrate {
+	__u64 tc_maxrate[8];
+};
+
+struct ieee_qcn {
+	__u8 rpg_enable[8];
+	__u32 rppp_max_rps[8];
+	__u32 rpg_time_reset[8];
+	__u32 rpg_byte_reset[8];
+	__u32 rpg_threshold[8];
+	__u32 rpg_max_rate[8];
+	__u32 rpg_ai_rate[8];
+	__u32 rpg_hai_rate[8];
+	__u32 rpg_gd[8];
+	__u32 rpg_min_dec_fac[8];
+	__u32 rpg_min_rate[8];
+	__u32 cndd_state_machine[8];
+};
+
+struct ieee_qcn_stats {
+	__u64 rppp_rp_centiseconds[8];
+	__u32 rppp_created_rps[8];
+};
+
+struct ieee_pfc {
+	__u8 pfc_cap;
+	__u8 pfc_en;
+	__u8 mbc;
+	__u16 delay;
+	__u64 requests[8];
+	__u64 indications[8];
+};
+
+struct dcbnl_buffer {
+	__u8 prio2buffer[8];
+	__u32 buffer_size[8];
+	__u32 total_size;
+};
+
+struct cee_pg {
+	__u8 willing;
+	__u8 error;
+	__u8 pg_en;
+	__u8 tcs_supported;
+	__u8 pg_bw[8];
+	__u8 prio_pg[8];
+};
+
+struct cee_pfc {
+	__u8 willing;
+	__u8 error;
+	__u8 pfc_en;
+	__u8 tcs_supported;
+};
+
+struct dcb_app {
+	__u8 selector;
+	__u8 priority;
+	__u16 protocol;
+};
+
+struct dcb_peer_app_info {
+	__u8 willing;
+	__u8 error;
+};
+
+struct dcbnl_rtnl_ops {
+	int (*ieee_getets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_setets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);
+	int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);
+	int (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);
+	int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);
+	int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);
+	int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);
+	int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);
+	int (*ieee_getapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_setapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_delapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);
+	u8 (*getstate)(struct net_device *);
+	u8 (*setstate)(struct net_device *, u8);
+	void (*getpermhwaddr)(struct net_device *, u8 *);
+	void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
+	void (*setpgbwgcfgtx)(struct net_device *, int, u8);
+	void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
+	void (*setpgbwgcfgrx)(struct net_device *, int, u8);
+	void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
+	void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
+	void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
+	void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
+	void (*setpfccfg)(struct net_device *, int, u8);
+	void (*getpfccfg)(struct net_device *, int, u8 *);
+	u8 (*setall)(struct net_device *);
+	u8 (*getcap)(struct net_device *, int, u8 *);
+	int (*getnumtcs)(struct net_device *, int, u8 *);
+	int (*setnumtcs)(struct net_device *, int, u8);
+	u8 (*getpfcstate)(struct net_device *);
+	void (*setpfcstate)(struct net_device *, u8);
+	void (*getbcncfg)(struct net_device *, int, u32 *);
+	void (*setbcncfg)(struct net_device *, int, u32);
+	void (*getbcnrp)(struct net_device *, int, u8 *);
+	void (*setbcnrp)(struct net_device *, int, u8);
+	int (*setapp)(struct net_device *, u8, u16, u8);
+	int (*getapp)(struct net_device *, u8, u16);
+	u8 (*getfeatcfg)(struct net_device *, int, u8 *);
+	u8 (*setfeatcfg)(struct net_device *, int, u8);
+	u8 (*getdcbx)(struct net_device *);
+	u8 (*setdcbx)(struct net_device *, u8);
+	int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);
+	int (*peer_getapptable)(struct net_device *, struct dcb_app *);
+	int (*cee_peer_getpg)(struct net_device *, struct cee_pg *);
+	int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);
+	int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
+	int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
+};
+
+struct netprio_map {
+	struct callback_head rcu;
+	u32 priomap_len;
+	u32 priomap[0];
+};
+
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
+};
+
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize: 8;
+	u32 frame_sz: 24;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 flags;
+};
+
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
+};
+
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	u8 cookie[20];
+	u8 cookie_len;
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+		u16 strict_start_type;
+	};
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long int args[6];
+	};
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
+};
+
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+};
+
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
+};
+
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short int cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+enum netdev_tx {
+	__NETDEV_TX_MIN = 2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+struct net_device_core_stats {
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int rx_nohandler;
+	long unsigned int rx_otherhost_dropped;
+};
+
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
+};
+
+struct xsk_buff_pool;
+
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc *qdisc;
+	struct Qdisc *qdisc_sleeping;
+	struct kobject kobj;
+	int numa_node;
+	long unsigned int tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	struct xsk_buff_pool *pool;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	long unsigned int trans_start;
+	long unsigned int state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
+};
+
+struct net_rate_estimator;
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator *rate_est;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	long unsigned int state;
+	long unsigned int state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long int privdata[0];
+};
+
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
+};
+
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
+};
+
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
+};
+
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map *rps_map;
+	struct rps_dev_flow_table *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
+};
+
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map *attr_map[0];
+};
+
+struct netdev_fcoe_hbainfo {
+	char manufacturer[64];
+	char serial_number[64];
+	char hardware_version[64];
+	char driver_version[64];
+	char optionrom_version[64];
+	char firmware_version[64];
+	char model[256];
+	char model_description[256];
+};
+
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
+};
+
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
+enum tc_setup_type {
+	TC_SETUP_QDISC_MQPRIO = 0,
+	TC_SETUP_CLSU32 = 1,
+	TC_SETUP_CLSFLOWER = 2,
+	TC_SETUP_CLSMATCHALL = 3,
+	TC_SETUP_CLSBPF = 4,
+	TC_SETUP_BLOCK = 5,
+	TC_SETUP_QDISC_CBS = 6,
+	TC_SETUP_QDISC_RED = 7,
+	TC_SETUP_QDISC_PRIO = 8,
+	TC_SETUP_QDISC_MQ = 9,
+	TC_SETUP_QDISC_ETF = 10,
+	TC_SETUP_ROOT_QDISC = 11,
+	TC_SETUP_QDISC_GRED = 12,
+	TC_SETUP_QDISC_TAPRIO = 13,
+	TC_SETUP_FT = 14,
+	TC_SETUP_QDISC_ETS = 15,
+	TC_SETUP_QDISC_TBF = 16,
+	TC_SETUP_QDISC_FIFO = 17,
+	TC_SETUP_QDISC_HTB = 18,
+	TC_SETUP_ACT = 19,
+};
+
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
+};
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct xfrmdev_ops {
+	int (*xdo_dev_state_add)(struct xfrm_state *);
+	void (*xdo_dev_state_delete)(struct xfrm_state *);
+	void (*xdo_dev_state_free)(struct xfrm_state *);
+	bool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);
+	void (*xdo_dev_state_advance_esn)(struct xfrm_state *);
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+struct devlink_port;
+
+struct ip_tunnel_parm;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	void (*ndo_poll_controller)(struct net_device *);
+	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
+	void (*ndo_netpoll_cleanup)(struct net_device *);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_fcoe_enable)(struct net_device *);
+	int (*ndo_fcoe_disable)(struct net_device *);
+	int (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);
+	int (*ndo_fcoe_ddp_done)(struct net_device *, u16);
+	int (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);
+	int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);
+	int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct iw_request_info;
+
+union iwreq_data;
+
+typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
+
+struct iw_priv_args;
+
+struct iw_statistics;
+
+struct iw_handler_def {
+	const iw_handler *standard;
+	__u16 num_standard;
+	__u16 num_private;
+	__u16 num_private_args;
+	const iw_handler *private;
+	const struct iw_priv_args *private_args;
+	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+};
+
+struct flowi6;
+
+struct l3mdev_ops {
+	u32 (*l3mdev_fib_table)(const struct net_device *);
+	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
+	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
+	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+enum tls_offload_ctx_dir {
+	TLS_OFFLOAD_CTX_DIR_RX = 0,
+	TLS_OFFLOAD_CTX_DIR_TX = 1,
+};
+
+struct tls_crypto_info;
+
+struct tls_context;
+
+struct tlsdev_ops {
+	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
+	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
+	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
+};
+
+struct tcf_proto;
+
+struct tcf_block;
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	long unsigned int rcu_state;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	short unsigned int tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+enum flow_action_hw_stats_bit {
+	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+};
+
+struct qdisc_walker;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+	void (*qlen_notify)(struct Qdisc *, long unsigned int);
+	long unsigned int (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+	struct tcf_proto *next;
+	void *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			long unsigned int class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+		struct {
+			bool ingress;
+			struct gnet_stats_queue *qstats;
+		};
+	};
+};
+
+struct tcf_walker;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	int: 32;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+struct jit_ctx {
+	const struct bpf_prog *prog;
+	int idx;
+	int epilogue_offset;
+	int *offset;
+	int exentry_idx;
+	__le32 *image;
+	u32 stack_size;
+	int fpb_offset;
+};
+
+struct bpf_plt {
+	u32 insn_ldr;
+	u32 insn_br;
+	u64 target;
+};
+
+struct arm64_jit_data {
+	struct bpf_binary_header *header;
+	u8 *image;
+	struct jit_ctx ctx;
+};
+
+struct preempt_notifier;
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
+typedef unsigned int xa_mark_t;
+
+struct interval_tree_node {
+	struct rb_node rb;
+	long unsigned int start;
+	long unsigned int last;
+	long unsigned int __subtree_last;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+};
+
+struct mmu_notifier_range {
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
 };
 
 struct platform_msi_priv_data;
 
-struct platform_msi_desc {
-	struct platform_msi_priv_data *msi_priv_data;
-	u16 msi_index;
+struct msi_device_data {
+	long unsigned int properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct xarray __store;
+	long unsigned int __iter_idx;
 };
 
-struct fsl_mc_msi_desc {
-	u16 msi_index;
+struct kvm_guest_debug_arch {
+	__u64 dbg_bcr[16];
+	__u64 dbg_bvr[16];
+	__u64 dbg_wcr[16];
+	__u64 dbg_wvr[16];
 };
 
-struct ti_sci_inta_msi_desc {
-	u16 dev_index;
+struct kvm_debug_exit_arch {
+	__u32 hsr;
+	__u32 hsr_high;
+	__u64 far;
 };
 
-struct msi_desc {
-	struct list_head list;
-	unsigned int irq;
-	unsigned int nvec_used;
-	struct device *dev;
-	struct msi_msg msg;
-	struct irq_affinity_desc *affinity;
-	const void *iommu_cookie;
-	void (*write_msi_msg)(struct msi_desc *, void *);
-	void *write_msi_msg_data;
+struct kvm_sync_regs {
+	__u64 device_irq_level;
+};
+
+struct kvm_irq_level {
+	union {
+		__u32 irq;
+		__s32 status;
+	};
+	__u32 level;
+};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
 	union {
 		struct {
-			u32 masked;
-			struct {
-				u8 is_msix: 1;
-				u8 multiple: 3;
-				u8 multi_cap: 3;
-				u8 maskbit: 1;
-				u8 is_64: 1;
-				u8 is_virtual: 1;
-				u16 entry_nr;
-				unsigned int default_irq;
-			} msi_attrib;
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			__u32 longmode;
+			__u32 pad;
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
 			union {
-				u8 mask_pos;
-				void *mask_base;
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
 			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			long unsigned int extension_id;
+			long unsigned int function_id;
+			long unsigned int args[6];
+			long unsigned int ret[2];
+		} riscv_sbi;
+		struct {
+			long unsigned int csr_num;
+			long unsigned int new_value;
+			long unsigned int write_mask;
+			long unsigned int ret_value;
+		} riscv_csr;
+		struct {
+			__u32 flags;
+		} notify;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct kvm_coalesced_mmio {
+	__u64 phys_addr;
+	__u32 len;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+	__u8 data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+	__u32 first;
+	__u32 last;
+	struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+struct kvm_mp_state {
+	__u32 mp_state;
+};
+
+struct kvm_device_attr {
+	__u32 flags;
+	__u32 group;
+	__u64 attr;
+	__u64 addr;
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+typedef u64 gpa_t;
+
+typedef u64 gfn_t;
+
+struct kvm_arch_memory_slot {};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	long unsigned int npages;
+	long unsigned int *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	long unsigned int userspace_addr;
+	u32 flags;
+	short int id;
+	u16 as_id;
+};
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
+	void *data;
+	unsigned int len;
+};
+
+struct kvm_vcpu;
+
+struct kvm_cpu_context {
+	struct user_pt_regs regs;
+	u64 spsr_abt;
+	u64 spsr_und;
+	u64 spsr_irq;
+	u64 spsr_fiq;
+	struct user_fpsimd_state fp_regs;
+	u64 sys_regs[123];
+	struct kvm_vcpu *__hyp_running_vcpu;
+};
+
+struct kvm_vcpu_fault_info {
+	u64 esr_el2;
+	u64 far_el2;
+	u64 hpfar_el2;
+	u64 disr_el1;
+};
+
+struct vgic_v2_cpu_if {
+	u32 vgic_hcr;
+	u32 vgic_vmcr;
+	u32 vgic_apr;
+	u32 vgic_lr[64];
+	unsigned int used_lrs;
+};
+
+struct its_vm;
+
+struct its_vpe {
+	struct page *vpt_page;
+	struct its_vm *its_vm;
+	atomic_t vlpi_count;
+	int irq;
+	irq_hw_number_t vpe_db_lpi;
+	bool resident;
+	bool ready;
+	union {
+		struct {
+			int vpe_proxy_event;
+			bool idai;
 		};
-		struct platform_msi_desc platform;
-		struct fsl_mc_msi_desc fsl_mc;
-		struct ti_sci_inta_msi_desc inta;
+		struct {
+			struct fwnode_handle *fwnode;
+			struct irq_domain *sgi_domain;
+			struct {
+				u8 priority;
+				bool enabled;
+				bool group;
+			} sgi_config[16];
+			atomic_t vmapp_count;
+		};
+	};
+	raw_spinlock_t vpe_lock;
+	u16 col_idx;
+	u16 vpe_id;
+	bool pending_last;
+};
+
+struct vgic_v3_cpu_if {
+	u32 vgic_hcr;
+	u32 vgic_vmcr;
+	u32 vgic_sre;
+	u32 vgic_ap0r[4];
+	u32 vgic_ap1r[4];
+	u64 vgic_lr[16];
+	struct its_vpe its_vpe;
+	unsigned int used_lrs;
+};
+
+enum vgic_irq_config {
+	VGIC_CONFIG_EDGE = 0,
+	VGIC_CONFIG_LEVEL = 1,
+};
+
+struct irq_ops;
+
+struct vgic_irq {
+	raw_spinlock_t irq_lock;
+	struct list_head lpi_list;
+	struct list_head ap_list;
+	struct kvm_vcpu *vcpu;
+	struct kvm_vcpu *target_vcpu;
+	u32 intid;
+	bool line_level;
+	bool pending_latch;
+	bool active;
+	bool enabled;
+	bool hw;
+	struct kref refcount;
+	u32 hwintid;
+	unsigned int host_irq;
+	union {
+		u8 targets;
+		u32 mpidr;
+	};
+	u8 source;
+	u8 active_source;
+	u8 priority;
+	u8 group;
+	enum vgic_irq_config config;
+	struct irq_ops *ops;
+	void *owner;
+};
+
+enum iodev_type {
+	IODEV_CPUIF = 0,
+	IODEV_DIST = 1,
+	IODEV_REDIST = 2,
+	IODEV_ITS = 3,
+};
+
+struct kvm_io_device_ops;
+
+struct kvm_io_device {
+	const struct kvm_io_device_ops *ops;
+};
+
+struct vgic_its;
+
+struct vgic_register_region;
+
+struct vgic_io_device {
+	gpa_t base_addr;
+	union {
+		struct kvm_vcpu *redist_vcpu;
+		struct vgic_its *its;
+	};
+	const struct vgic_register_region *regions;
+	enum iodev_type iodev_type;
+	int nr_regions;
+	struct kvm_io_device dev;
+};
+
+struct vgic_redist_region;
+
+struct vgic_cpu {
+	union {
+		struct vgic_v2_cpu_if vgic_v2;
+		struct vgic_v3_cpu_if vgic_v3;
+	};
+	struct vgic_irq private_irqs[32];
+	raw_spinlock_t ap_list_lock;
+	struct list_head ap_list_head;
+	struct vgic_io_device rd_iodev;
+	struct vgic_redist_region *rdreg;
+	u32 rdreg_index;
+	atomic_t syncr_busy;
+	u64 pendbaser;
+	atomic_t ctlr;
+	u32 num_pri_bits;
+	u32 num_id_bits;
+};
+
+struct arch_timer_context {
+	struct kvm_vcpu *vcpu;
+	struct kvm_irq_level irq;
+	struct hrtimer hrtimer;
+	bool loaded;
+	u32 host_timer_irq;
+	u32 host_timer_irq_flags;
+};
+
+struct arch_timer_cpu {
+	struct arch_timer_context timers[2];
+	struct hrtimer bg_timer;
+	bool enabled;
+};
+
+struct kvm_pmu_events {
+	u32 events_host;
+	u32 events_guest;
+};
+
+struct kvm_pmc {
+	u8 idx;
+	struct perf_event *perf_event;
+};
+
+struct kvm_pmu {
+	struct irq_work overflow_work;
+	struct kvm_pmu_events events;
+	struct kvm_pmc pmc[32];
+	long unsigned int chained[1];
+	int irq_num;
+	bool created;
+	bool irq_level;
+};
+
+struct kvm_mmu_memory_cache {
+	int nobjs;
+	gfp_t gfp_zero;
+	gfp_t gfp_custom;
+	struct kmem_cache *kmem_cache;
+	int capacity;
+	void **objects;
+};
+
+struct vcpu_reset_state {
+	long unsigned int pc;
+	long unsigned int r0;
+	bool be;
+	bool reset;
+};
+
+struct kvm_s2_mmu;
+
+struct kvm_vcpu_arch {
+	struct kvm_cpu_context ctxt;
+	void *sve_state;
+	unsigned int sve_max_vl;
+	u64 svcr;
+	struct kvm_s2_mmu *hw_mmu;
+	u64 hcr_el2;
+	u64 mdcr_el2;
+	u64 cptr_el2;
+	u64 mdcr_el2_host;
+	struct kvm_vcpu_fault_info fault;
+	enum {
+		FP_STATE_FREE = 0,
+		FP_STATE_HOST_OWNED = 1,
+		FP_STATE_GUEST_OWNED = 2,
+	} fp_state;
+	u8 cflags;
+	u8 iflags;
+	u8 sflags;
+	bool pause;
+	struct kvm_guest_debug_arch *debug_ptr;
+	struct kvm_guest_debug_arch vcpu_debug_state;
+	struct kvm_guest_debug_arch external_debug_state;
+	struct user_fpsimd_state *host_fpsimd_state;
+	struct task_struct *parent_task;
+	struct {
+		struct kvm_guest_debug_arch regs;
+		u64 pmscr_el1;
+		u64 trfcr_el1;
+	} host_debug_state;
+	struct vgic_cpu vgic_cpu;
+	struct arch_timer_cpu timer_cpu;
+	struct kvm_pmu pmu;
+	struct {
+		u32 mdscr_el1;
+	} guest_debug_preserved;
+	struct kvm_mp_state mp_state;
+	struct kvm_mmu_memory_cache mmu_page_cache;
+	int target;
+	long unsigned int features[1];
+	u64 vsesr_el2;
+	struct vcpu_reset_state reset_state;
+	struct {
+		u64 last_steal;
+		gpa_t base;
+	} steal;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 hvc_exit_stat;
+	u64 wfe_exit_stat;
+	u64 wfi_exit_stat;
+	u64 mmio_exit_user;
+	u64 mmio_exit_kernel;
+	u64 signal_exits;
+	u64 exits;
+};
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm;
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	long unsigned int guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	struct {
+		bool in_spin_loop;
+		bool dy_eligible;
+	} spin_loop;
+	bool preempted;
+	bool ready;
+	long: 32;
+	long: 64;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+	long: 64;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+struct kvm_io_device_ops {
+	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
+	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
+	void (*destructor)(struct kvm_io_device *);
+};
+
+struct its_vm {
+	struct fwnode_handle *fwnode;
+	struct irq_domain *domain;
+	struct page *vprop_page;
+	struct its_vpe **vpes;
+	int nr_vpes;
+	irq_hw_number_t db_lpi_base;
+	long unsigned int *db_bitmap;
+	int nr_db_lpis;
+	u32 vlpi_count[16];
+};
+
+struct irq_ops {
+	long unsigned int flags;
+	bool (*get_input_level)(int);
+};
+
+struct kvm_device;
+
+struct vgic_its {
+	gpa_t vgic_its_base;
+	bool enabled;
+	struct vgic_io_device iodev;
+	struct kvm_device *dev;
+	u64 baser_device_table;
+	u64 baser_coll_table;
+	struct mutex cmd_lock;
+	u64 cbaser;
+	u32 creadr;
+	u32 cwriter;
+	u32 abi_rev;
+	struct mutex its_lock;
+	struct list_head device_list;
+	struct list_head collection_list;
+};
+
+struct vgic_register_region {
+	unsigned int reg_offset;
+	unsigned int len;
+	unsigned int bits_per_irq;
+	unsigned int access_flags;
+	union {
+		long unsigned int (*read)(struct kvm_vcpu *, gpa_t, unsigned int);
+		long unsigned int (*its_read)(struct kvm *, struct vgic_its *, gpa_t, unsigned int);
+	};
+	union {
+		void (*write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
+		void (*its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
+	};
+	long unsigned int (*uaccess_read)(struct kvm_vcpu *, gpa_t, unsigned int);
+	union {
+		int (*uaccess_write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
+		int (*uaccess_its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
 	};
 };
 
-struct irq_chip {
-	struct device *parent_device;
-	const char *name;
-	unsigned int (*irq_startup)(struct irq_data *);
-	void (*irq_shutdown)(struct irq_data *);
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_ack)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-	void (*irq_mask_ack)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_eoi)(struct irq_data *);
-	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
-	int (*irq_retrigger)(struct irq_data *);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	void (*irq_bus_lock)(struct irq_data *);
-	void (*irq_bus_sync_unlock)(struct irq_data *);
-	void (*irq_cpu_online)(struct irq_data *);
-	void (*irq_cpu_offline)(struct irq_data *);
-	void (*irq_suspend)(struct irq_data *);
-	void (*irq_resume)(struct irq_data *);
-	void (*irq_pm_shutdown)(struct irq_data *);
-	void (*irq_calc_mask)(struct irq_data *);
-	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
-	int (*irq_request_resources)(struct irq_data *);
-	void (*irq_release_resources)(struct irq_data *);
-	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
-	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
-	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
-	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
-	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
-	void (*ipi_send_single)(struct irq_data *, unsigned int);
-	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
-	int (*irq_nmi_setup)(struct irq_data *);
-	void (*irq_nmi_teardown)(struct irq_data *);
-	long unsigned int flags;
-};
+struct kvm_device_ops;
 
-struct irq_chip_regs {
-	long unsigned int enable;
-	long unsigned int disable;
-	long unsigned int mask;
-	long unsigned int ack;
-	long unsigned int eoi;
-	long unsigned int type;
-	long unsigned int polarity;
-};
-
-struct irq_chip_type {
-	struct irq_chip chip;
-	struct irq_chip_regs regs;
-	irq_flow_handler_t handler;
-	u32 type;
-	u32 mask_cache_priv;
-	u32 *mask_cache;
-};
-
-struct irq_chip_generic {
-	raw_spinlock_t lock;
-	void *reg_base;
-	u32 (*reg_readl)(void *);
-	void (*reg_writel)(u32, void *);
-	void (*suspend)(struct irq_chip_generic *);
-	void (*resume)(struct irq_chip_generic *);
-	unsigned int irq_base;
-	unsigned int irq_cnt;
-	u32 mask_cache;
-	u32 type_cache;
-	u32 polarity_cache;
-	u32 wake_enabled;
-	u32 wake_active;
-	unsigned int num_ct;
+struct kvm_device {
+	const struct kvm_device_ops *ops;
+	struct kvm *kvm;
 	void *private;
-	long unsigned int installed;
-	long unsigned int unused;
-	struct irq_domain *domain;
-	struct list_head list;
-	struct irq_chip_type chip_types[0];
+	struct list_head vm_node;
 };
 
-enum vcpu_sysreg {
-	__INVALID_SYSREG__ = 0,
-	MPIDR_EL1 = 1,
-	CSSELR_EL1 = 2,
-	SCTLR_EL1 = 3,
-	ACTLR_EL1 = 4,
-	CPACR_EL1 = 5,
-	ZCR_EL1 = 6,
-	TTBR0_EL1 = 7,
-	TTBR1_EL1 = 8,
-	TCR_EL1 = 9,
-	ESR_EL1 = 10,
-	AFSR0_EL1 = 11,
-	AFSR1_EL1 = 12,
-	FAR_EL1 = 13,
-	MAIR_EL1 = 14,
-	VBAR_EL1 = 15,
-	CONTEXTIDR_EL1 = 16,
-	TPIDR_EL0 = 17,
-	TPIDRRO_EL0 = 18,
-	TPIDR_EL1 = 19,
-	AMAIR_EL1 = 20,
-	CNTKCTL_EL1 = 21,
-	PAR_EL1 = 22,
-	MDSCR_EL1 = 23,
-	MDCCINT_EL1 = 24,
-	DISR_EL1 = 25,
-	PMCR_EL0 = 26,
-	PMSELR_EL0 = 27,
-	PMEVCNTR0_EL0 = 28,
-	PMEVCNTR30_EL0 = 58,
-	PMCCNTR_EL0 = 59,
-	PMEVTYPER0_EL0 = 60,
-	PMEVTYPER30_EL0 = 90,
-	PMCCFILTR_EL0 = 91,
-	PMCNTENSET_EL0 = 92,
-	PMINTENSET_EL1 = 93,
-	PMOVSSET_EL0 = 94,
-	PMSWINC_EL0 = 95,
-	PMUSERENR_EL0 = 96,
-	APIAKEYLO_EL1 = 97,
-	APIAKEYHI_EL1 = 98,
-	APIBKEYLO_EL1 = 99,
-	APIBKEYHI_EL1 = 100,
-	APDAKEYLO_EL1 = 101,
-	APDAKEYHI_EL1 = 102,
-	APDBKEYLO_EL1 = 103,
-	APDBKEYHI_EL1 = 104,
-	APGAKEYLO_EL1 = 105,
-	APGAKEYHI_EL1 = 106,
-	ELR_EL1 = 107,
-	SP_EL1 = 108,
-	SPSR_EL1 = 109,
-	CNTVOFF_EL2 = 110,
-	CNTV_CVAL_EL0 = 111,
-	CNTV_CTL_EL0 = 112,
-	CNTP_CVAL_EL0 = 113,
-	CNTP_CTL_EL0 = 114,
-	DACR32_EL2 = 115,
-	IFSR32_EL2 = 116,
-	FPEXC32_EL2 = 117,
-	DBGVCR32_EL2 = 118,
-	NR_SYS_REGS = 119,
+struct vgic_redist_region {
+	u32 index;
+	gpa_t base;
+	u32 count;
+	u32 free_index;
+	struct list_head list;
+};
+
+struct vgic_state_iter;
+
+struct vgic_dist {
+	bool in_kernel;
+	bool ready;
+	bool initialized;
+	u32 vgic_model;
+	u32 implementation_rev;
+	bool v2_groups_user_writable;
+	bool msis_require_devid;
+	int nr_spis;
+	gpa_t vgic_dist_base;
+	union {
+		gpa_t vgic_cpu_base;
+		struct list_head rd_regions;
+	};
+	bool enabled;
+	bool nassgireq;
+	struct vgic_irq *spis;
+	struct vgic_io_device dist_iodev;
+	bool has_its;
+	u64 propbaser;
+	raw_spinlock_t lpi_list_lock;
+	struct list_head lpi_list_head;
+	int lpi_list_count;
+	struct list_head lpi_translation_cache;
+	struct vgic_state_iter *iter;
+	struct its_vm its_vm;
+};
+
+struct kvm_vmid {
+	atomic64_t id;
+};
+
+struct kvm_pgtable;
+
+struct kvm_arch;
+
+struct kvm_s2_mmu {
+	struct kvm_vmid vmid;
+	phys_addr_t pgd_phys;
+	struct kvm_pgtable *pgt;
+	int *last_vcpu_ran;
+	struct kvm_arch *arch;
+};
+
+struct kvm_smccc_features {
+	long unsigned int std_bmap;
+	long unsigned int std_hyp_bmap;
+	long unsigned int vendor_hyp_bmap;
+};
+
+struct arm_pmu;
+
+struct kvm_arch {
+	struct kvm_s2_mmu mmu;
+	u64 vtcr;
+	struct vgic_dist vgic;
+	u32 psci_version;
+	long unsigned int flags;
+	long unsigned int *pmu_filter;
+	struct arm_pmu *arm_pmu;
+	cpumask_var_t supported_cpus;
+	u8 pfr0_csv2;
+	u8 pfr0_csv3;
+	struct kvm_smccc_features smccc_feat;
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+};
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct kvm_irq_routing_table;
+
+struct kvm_stat_data;
+
+struct kvm {
+	rwlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	long unsigned int nr_memslot_pages;
+	struct kvm_memslots __memslots[2];
+	struct kvm_memslots *memslots[1];
+	struct xarray vcpu_array;
+	spinlock_t mn_invalidate_lock;
+	long unsigned int mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	long unsigned int mmu_invalidate_seq;
+	long int mmu_invalidate_in_progress;
+	long unsigned int mmu_invalidate_range_start;
+	long unsigned int mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool vm_bugged;
+	bool vm_dead;
+	char stats_id[48];
+};
+
+struct kvm_irq_routing_table {
+	int chip[988];
+	u32 nr_rt_entries;
+	struct hlist_head map[0];
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+struct kvm_device_ops {
+	const char *name;
+	int (*create)(struct kvm_device *, u32);
+	void (*init)(struct kvm_device *);
+	void (*destroy)(struct kvm_device *);
+	void (*release)(struct kvm_device *);
+	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
+	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
+	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+};
+
+struct arm_smccc_res {
+	long unsigned int a0;
+	long unsigned int a1;
+	long unsigned int a2;
+	long unsigned int a3;
+};
+
+enum __kvm_host_smccc_func {
+	__KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2 = 1,
+	__KVM_HOST_SMCCC_FUNC___pkvm_init = 2,
+	__KVM_HOST_SMCCC_FUNC___pkvm_create_private_mapping = 3,
+	__KVM_HOST_SMCCC_FUNC___pkvm_cpu_set_vector = 4,
+	__KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs = 5,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs = 6,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_get_gic_config = 7,
+	__KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize = 8,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_share_hyp = 9,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_unshare_hyp = 10,
+	__KVM_HOST_SMCCC_FUNC___kvm_adjust_pc = 11,
+	__KVM_HOST_SMCCC_FUNC___kvm_vcpu_run = 12,
+	__KVM_HOST_SMCCC_FUNC___kvm_flush_vm_context = 13,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa = 14,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid = 15,
+	__KVM_HOST_SMCCC_FUNC___kvm_flush_cpu_context = 16,
+	__KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff = 17,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_read_vmcr = 18,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_write_vmcr = 19,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs = 20,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs = 21,
+	__KVM_HOST_SMCCC_FUNC___pkvm_vcpu_init_traps = 22,
 };
 
 enum kvm_bus {
@@ -15457,174 +14179,969 @@
 	KVM_NR_BUSES = 4,
 };
 
-struct trace_event_raw_ipi_raise {
-	struct trace_entry ent;
-	u32 __data_loc_target_cpus;
-	const char *reason;
-	char __data[0];
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
 };
 
-struct trace_event_raw_ipi_handler {
-	struct trace_entry ent;
-	const char *reason;
-	char __data[0];
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
 };
 
-struct trace_event_data_offsets_ipi_raise {
-	u32 target_cpus;
+struct arch_timer_kvm_info {
+	struct timecounter timecounter;
+	int virtual_irq;
+	int physical_irq;
 };
 
-struct trace_event_data_offsets_ipi_handler {};
-
-typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
-
-typedef void (*btf_trace_ipi_entry)(void *, const char *);
-
-typedef void (*btf_trace_ipi_exit)(void *, const char *);
-
-enum ipi_msg_type {
-	IPI_RESCHEDULE = 0,
-	IPI_CALL_FUNC = 1,
-	IPI_CPU_STOP = 2,
-	IPI_CPU_CRASH_STOP = 3,
-	IPI_TIMER = 4,
-	IPI_IRQ_WORK = 5,
-	IPI_WAKEUP = 6,
-	NR_IPI = 7,
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
 };
 
-struct cpu_topology {
-	int thread_id;
-	int core_id;
-	int package_id;
-	int llc_id;
-	cpumask_t thread_sibling;
-	cpumask_t core_sibling;
-	cpumask_t llc_sibling;
+struct arch_msi_msg_addr_lo {
+	u32 address_lo;
 };
 
-enum cpufreq_table_sorting {
-	CPUFREQ_TABLE_UNSORTED = 0,
-	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
-	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+typedef struct arch_msi_msg_addr_lo arch_msi_msg_addr_lo_t;
+
+struct arch_msi_msg_addr_hi {
+	u32 address_hi;
 };
 
-struct cpufreq_cpuinfo {
-	unsigned int max_freq;
-	unsigned int min_freq;
-	unsigned int transition_latency;
+typedef struct arch_msi_msg_addr_hi arch_msi_msg_addr_hi_t;
+
+struct arch_msi_msg_data {
+	u32 data;
 };
 
-struct clk;
+typedef struct arch_msi_msg_data arch_msi_msg_data_t;
 
-struct cpufreq_governor;
-
-struct cpufreq_frequency_table;
-
-struct cpufreq_stats;
-
-struct thermal_cooling_device;
-
-struct cpufreq_policy {
-	cpumask_var_t cpus;
-	cpumask_var_t related_cpus;
-	cpumask_var_t real_cpus;
-	unsigned int shared_type;
-	unsigned int cpu;
-	struct clk *clk;
-	struct cpufreq_cpuinfo cpuinfo;
-	unsigned int min;
-	unsigned int max;
-	unsigned int cur;
-	unsigned int restore_freq;
-	unsigned int suspend_freq;
-	unsigned int policy;
-	unsigned int last_policy;
-	struct cpufreq_governor *governor;
-	void *governor_data;
-	char last_governor[16];
-	struct work_struct update;
-	struct freq_constraints constraints;
-	struct freq_qos_request *min_freq_req;
-	struct freq_qos_request *max_freq_req;
-	struct cpufreq_frequency_table *freq_table;
-	enum cpufreq_table_sorting freq_table_sorted;
-	struct list_head policy_list;
-	struct kobject kobj;
-	struct completion kobj_unregister;
-	struct rw_semaphore rwsem;
-	bool fast_switch_possible;
-	bool fast_switch_enabled;
-	bool strict_target;
-	unsigned int transition_delay_us;
-	bool dvfs_possible_from_any_cpu;
-	unsigned int cached_target_freq;
-	unsigned int cached_resolved_idx;
-	bool transition_ongoing;
-	spinlock_t transition_lock;
-	wait_queue_head_t transition_wait;
-	struct task_struct *transition_task;
-	struct cpufreq_stats *stats;
-	void *driver_data;
-	struct thermal_cooling_device *cdev;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
 };
 
-struct cpufreq_governor {
-	char name[16];
-	int (*init)(struct cpufreq_policy *);
-	void (*exit)(struct cpufreq_policy *);
-	int (*start)(struct cpufreq_policy *);
-	void (*stop)(struct cpufreq_policy *);
-	void (*limits)(struct cpufreq_policy *);
-	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
-	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
-	struct list_head governor_list;
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+struct irq_affinity_desc;
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	const void *iommu_cookie;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	struct pci_msi_desc pci;
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_MSI_NOMASK_QUIRK = 134217728,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
+	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+enum vgic_type {
+	VGIC_V2 = 0,
+	VGIC_V3 = 1,
+};
+
+struct vgic_global {
+	enum vgic_type type;
+	phys_addr_t vcpu_base;
+	void *vcpu_base_va;
+	void *vcpu_hyp_va;
+	void *vctrl_base;
+	void *vctrl_hyp;
+	int nr_lr;
+	unsigned int maint_irq;
+	int max_gic_vcpus;
+	bool can_emulate_gicv2;
+	bool has_gicv4;
+	bool has_gicv4_1;
+	bool no_hw_deactivation;
+	struct static_key_false gicv3_cpuif;
+	u32 ich_vtr_el2;
+};
+
+enum kvm_arch_timers {
+	TIMER_PTIMER = 0,
+	TIMER_VTIMER = 1,
+	NR_KVM_TIMERS = 2,
+};
+
+enum kvm_arch_timer_regs {
+	TIMER_REG_CNT = 0,
+	TIMER_REG_CVAL = 1,
+	TIMER_REG_TVAL = 2,
+	TIMER_REG_CTL = 3,
+};
+
+struct timer_map {
+	struct arch_timer_context *direct_vtimer;
+	struct arch_timer_context *direct_ptimer;
+	struct arch_timer_context *emul_ptimer;
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+struct kvm_arm_device_addr {
+	__u64 id;
+	__u64 addr;
+};
+
+enum kvm_device_type {
+	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
+	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
+	KVM_DEV_TYPE_XICS = 3,
+	KVM_DEV_TYPE_VFIO = 4,
+	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
+	KVM_DEV_TYPE_FLIC = 6,
+	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
+	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
+	KVM_DEV_TYPE_XIVE = 9,
+	KVM_DEV_TYPE_ARM_PV_TIME = 10,
+	KVM_DEV_TYPE_MAX = 11,
+};
+
+typedef u64 kvm_pte_t;
+
+enum kvm_pgtable_stage2_flags {
+	KVM_PGTABLE_S2_NOFWB = 1,
+	KVM_PGTABLE_S2_IDMAP = 2,
+};
+
+enum kvm_pgtable_prot {
+	KVM_PGTABLE_PROT_X = 1,
+	KVM_PGTABLE_PROT_W = 2,
+	KVM_PGTABLE_PROT_R = 4,
+	KVM_PGTABLE_PROT_DEVICE = 8,
+	KVM_PGTABLE_PROT_SW0 = 0,
+	KVM_PGTABLE_PROT_SW1 = 0,
+	KVM_PGTABLE_PROT_SW2 = 0,
+	KVM_PGTABLE_PROT_SW3 = 0,
+};
+
+typedef bool (*kvm_pgtable_force_pte_cb_t)(u64, u64, enum kvm_pgtable_prot);
+
+struct kvm_pgtable_mm_ops;
+
+struct kvm_pgtable {
+	u32 ia_bits;
+	u32 start_level;
+	kvm_pte_t *pgd;
+	struct kvm_pgtable_mm_ops *mm_ops;
+	struct kvm_s2_mmu *mmu;
+	enum kvm_pgtable_stage2_flags flags;
+	kvm_pgtable_force_pte_cb_t force_pte_cb;
+};
+
+struct kvm_pgtable_mm_ops {
+	void * (*zalloc_page)(void *);
+	void * (*zalloc_pages_exact)(size_t);
+	void (*free_pages_exact)(void *, size_t);
+	void (*get_page)(void *);
+	void (*put_page)(void *);
+	int (*page_count)(void *);
+	void * (*phys_to_virt)(phys_addr_t);
+	phys_addr_t (*virt_to_phys)(void *);
+	void (*dcache_clean_inval_poc)(void *, size_t);
+	void (*icache_inval_pou)(void *, size_t);
+};
+
+struct vgic_reg_attr {
+	struct kvm_vcpu *vcpu;
+	gpa_t addr;
+};
+
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+struct kvm_exception_table_entry {
+	int insn;
+	int fixup;
+};
+
+typedef bool (*exit_handler_fn)(struct kvm_vcpu *, u64 *);
+
+struct kvm_nvhe_init_params {
+	long unsigned int mair_el2;
+	long unsigned int tcr_el2;
+	long unsigned int tpidr_el2;
+	long unsigned int stack_hyp_va;
+	long unsigned int stack_pa;
+	phys_addr_t pgd_pa;
+	long unsigned int hcr_el2;
+	long unsigned int vttbr;
+	long unsigned int vtcr;
+};
+
+union hyp_spinlock {
+	u32 __val;
+	struct {
+		u16 owner;
+		u16 next;
+	};
+};
+
+typedef union hyp_spinlock hyp_spinlock_t;
+
+struct host_kvm {
+	struct kvm_arch arch;
+	struct kvm_pgtable pgt;
+	struct kvm_pgtable_mm_ops mm_ops;
+	hyp_spinlock_t lock;
+};
+
+typedef __u64 __be64;
+
+typedef void (*exitcall_t)();
+
+struct crypto_alg;
+
+struct crypto_tfm {
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__crt_ctx[0];
+};
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_istat_aead {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_akcipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t verify_cnt;
+	atomic64_t sign_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_cipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_compress {
+	atomic64_t compress_cnt;
+	atomic64_t compress_tlen;
+	atomic64_t decompress_cnt;
+	atomic64_t decompress_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_hash {
+	atomic64_t hash_cnt;
+	atomic64_t hash_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_kpp {
+	atomic64_t setsecret_cnt;
+	atomic64_t generate_public_key_cnt;
+	atomic64_t compute_shared_secret_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_rng {
+	atomic64_t generate_cnt;
+	atomic64_t generate_tlen;
+	atomic64_t seed_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+	union {
+		struct crypto_istat_aead aead;
+		struct crypto_istat_akcipher akcipher;
+		struct crypto_istat_cipher cipher;
+		struct crypto_istat_compress compress;
+		struct crypto_istat_hash hash;
+		struct crypto_istat_rng rng;
+		struct crypto_istat_kpp kpp;
+	} stats;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init)(struct crypto_tfm *, u32, u32);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
+};
+
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct crypto_shash;
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	unsigned int descsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int digestsize;
+	unsigned int statesize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+typedef void sha256_block_fn(struct sha256_state *, const u8 *, int);
+
+struct cpu_feature {
+	__u16 feature;
+};
+
+struct sha256_ce_state {
+	struct sha256_state sst;
+	u32 finalize;
+};
+
+struct poly1305_key {
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
+};
+
+struct poly1305_state {
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
+};
+
+struct poly1305_desc_ctx {
+	u8 buf[16];
+	unsigned int buflen;
+	short unsigned int rset;
+	bool sset;
+	u32 s[4];
+	struct poly1305_state h;
+	union {
+		struct poly1305_key opaque_r[9];
+		struct poly1305_core_key core_r;
+	};
+};
+
+typedef phys_addr_t resource_size_t;
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	long unsigned int flags;
+	long unsigned int desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	unsigned int lsm_flags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char *uptr;
+	int refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
 	struct module *owner;
-	u8 flags;
+	char *buffer[8];
 };
 
-struct cpufreq_frequency_table {
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	long unsigned int magic;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+typedef unsigned int slab_flags_t;
+
+struct nsset {
 	unsigned int flags;
-	unsigned int driver_data;
-	unsigned int frequency;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
 };
 
-enum arm_smccc_conduit {
-	SMCCC_CONDUIT_NONE = 0,
-	SMCCC_CONDUIT_SMC = 1,
-	SMCCC_CONDUIT_HVC = 2,
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_FANOTIFY_GROUPS = 10,
+	UCOUNT_FANOTIFY_MARKS = 11,
+	UCOUNT_RLIMIT_NPROC = 12,
+	UCOUNT_RLIMIT_MSGQUEUE = 13,
+	UCOUNT_RLIMIT_SIGPENDING = 14,
+	UCOUNT_RLIMIT_MEMLOCK = 15,
+	UCOUNT_COUNTS = 16,
 };
 
-struct arm_smccc_res {
-	long unsigned int a0;
-	long unsigned int a1;
-	long unsigned int a2;
-	long unsigned int a3;
+enum {
+	PROC_ROOT_INO = 1,
+	PROC_IPC_INIT_INO = 4026531839,
+	PROC_UTS_INIT_INO = 4026531838,
+	PROC_USER_INIT_INO = 4026531837,
+	PROC_PID_INIT_INO = 4026531836,
+	PROC_CGROUP_INIT_INO = 4026531835,
+	PROC_TIME_INIT_INO = 4026531834,
 };
 
-enum mitigation_state {
-	SPECTRE_UNAFFECTED = 0,
-	SPECTRE_MITIGATED = 1,
-	SPECTRE_VULNERABLE = 2,
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	long unsigned int min_coredump;
 };
 
-enum spectre_v4_policy {
-	SPECTRE_V4_POLICY_MITIGATION_DYNAMIC = 0,
-	SPECTRE_V4_POLICY_MITIGATION_ENABLED = 1,
-	SPECTRE_V4_POLICY_MITIGATION_DISABLED = 2,
+typedef long unsigned int old_sigset_t;
+
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
 };
 
-struct spectre_v4_param {
-	const char *str;
-	enum spectre_v4_policy policy;
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
+};
+
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
+};
+
+typedef unsigned int tcflag_t;
+
+typedef unsigned char cc_t;
+
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct winsize {
+	short unsigned int ws_row;
+	short unsigned int ws_col;
+	short unsigned int ws_xpixel;
+	short unsigned int ws_ypixel;
+};
+
+struct tty_driver;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct tty_port;
+
+struct tty_struct {
+	int magic;
+	struct kref kref;
+	struct device *dev;
+	struct tty_driver *driver;
+	const struct tty_operations *ops;
+	int index;
+	struct ld_semaphore ldisc_sem;
+	struct tty_ldisc *ldisc;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	long unsigned int flags;
+	int count;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		long unsigned int unused[0];
+	} flow;
+	struct {
+		spinlock_t lock;
+		struct pid *pgrp;
+		struct pid *session;
+		unsigned char pktstatus;
+		bool packet;
+		long unsigned int unused[0];
+	} ctrl;
+	int hw_stopped;
+	unsigned int receive_room;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	struct list_head tty_files;
+	int closing;
+	unsigned char *write_buf;
+	int write_cnt;
+	struct work_struct SAK_work;
+	struct tty_port *port;
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
 };
 
 typedef u32 compat_size_t;
 
-struct compat_statfs64;
-
 typedef s32 compat_clock_t;
 
 typedef s32 compat_pid_t;
@@ -15633,12 +15150,277 @@
 
 typedef s32 compat_int_t;
 
-typedef u64 compat_u64;
+typedef u32 compat_ulong_t;
+
+typedef u32 compat_old_sigset_t;
 
 typedef u32 __compat_uid32_t;
 
 typedef u32 compat_sigset_word;
 
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	int used;
+	int size;
+	int commit;
+	int lookahead;
+	int read;
+	int flags;
+	long unsigned int data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	int (*write)(struct tty_struct *, const unsigned char *, int);
+	int (*put_char)(struct tty_struct *, unsigned char);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*poll_init)(struct tty_driver *, int, char *);
+	int (*poll_get_char)(struct tty_driver *, int);
+	void (*poll_put_char)(struct tty_driver *, int, char);
+	int (*proc_show)(struct seq_file *, void *);
+};
+
+struct tty_driver {
+	int magic;
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short int type;
+	short int subtype;
+	struct ktermios init_termios;
+	long unsigned int flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	long unsigned int flags;
+	long unsigned int iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);
+	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, unsigned int);
+	int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*lookahead_buf)(struct tty_struct *, const unsigned char *, const unsigned char *, unsigned int);
+	struct module *owner;
+};
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_port_operations {
+	int (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, int);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+};
+
+struct tty_port_client_operations {
+	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const unsigned char *, const unsigned char *, unsigned int);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	long unsigned int vma_pages;
+	struct mm_struct *mm;
+	long unsigned int p;
+	long unsigned int argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	long unsigned int loader;
+	long unsigned int exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+struct core_vma_metadata;
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct pt_regs *regs;
+	struct file *file;
+	long unsigned int limit;
+	long unsigned int mm_flags;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct core_vma_metadata {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int flags;
+	long unsigned int dump_size;
+	long unsigned int pgoff;
+	struct file *file;
+};
+
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
+
+enum perf_branch_sample_type_shift {
+	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
+	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
+	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
+	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
+	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
+	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
+	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
+	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
+	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
+	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
+	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
+	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
+	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
+	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
+	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
+	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
+	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
+	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
+};
+
 struct compat_sigaltstack {
 	compat_uptr_t ss_sp;
 	int ss_flags;
@@ -15651,6 +15433,13 @@
 	compat_sigset_word sig[2];
 } compat_sigset_t;
 
+struct compat_sigaction {
+	compat_uptr_t sa_handler;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
+	compat_sigset_t sa_mask;
+};
+
 union compat_sigval {
 	compat_int_t sival_int;
 	compat_uptr_t sival_ptr;
@@ -15688,6 +15477,7 @@
 		struct {
 			compat_uptr_t _addr;
 			union {
+				int _trapno;
 				short int _addr_lsb;
 				struct {
 					char _dummy_bnd[4];
@@ -15698,6 +15488,11 @@
 					char _dummy_pkey[4];
 					u32 _pkey;
 				} _addr_pkey;
+				struct {
+					compat_ulong_t _data;
+					u32 _type;
+					u32 _flags;
+				} _perf;
 			};
 		} _sigfault;
 		struct {
@@ -15712,268 +15507,7506 @@
 	} _sifields;
 };
 
-struct compat_sigcontext {
-	compat_ulong_t trap_no;
-	compat_ulong_t error_code;
-	compat_ulong_t oldmask;
-	compat_ulong_t arm_r0;
-	compat_ulong_t arm_r1;
-	compat_ulong_t arm_r2;
-	compat_ulong_t arm_r3;
-	compat_ulong_t arm_r4;
-	compat_ulong_t arm_r5;
-	compat_ulong_t arm_r6;
-	compat_ulong_t arm_r7;
-	compat_ulong_t arm_r8;
-	compat_ulong_t arm_r9;
-	compat_ulong_t arm_r10;
-	compat_ulong_t arm_fp;
-	compat_ulong_t arm_ip;
-	compat_ulong_t arm_sp;
-	compat_ulong_t arm_lr;
-	compat_ulong_t arm_pc;
-	compat_ulong_t arm_cpsr;
-	compat_ulong_t fault_address;
-};
-
-struct compat_ucontext {
-	compat_ulong_t uc_flags;
-	compat_uptr_t uc_link;
-	compat_stack_t uc_stack;
-	struct compat_sigcontext uc_mcontext;
-	compat_sigset_t uc_sigmask;
-	int __unused[30];
-	compat_ulong_t uc_regspace[128];
-};
-
-struct compat_sigframe {
-	struct compat_ucontext uc;
-	compat_ulong_t retcode[2];
-};
-
-struct compat_rt_sigframe {
-	struct compat_siginfo info;
-	struct compat_sigframe sig;
-};
-
-struct compat_user_vfp {
-	compat_u64 fpregs[32];
-	compat_ulong_t fpscr;
-};
-
-struct compat_user_vfp_exc {
-	compat_ulong_t fpexc;
-	compat_ulong_t fpinst;
-	compat_ulong_t fpinst2;
-};
-
-struct compat_vfp_sigframe {
-	compat_ulong_t magic;
-	compat_ulong_t size;
-	struct compat_user_vfp ufp;
-	struct compat_user_vfp_exc ufp_exc;
-};
-
-struct compat_aux_sigframe {
-	struct compat_vfp_sigframe vfp;
-	long unsigned int end_magic;
-};
-
-union __fpsimd_vreg {
-	__int128 unsigned raw;
-	struct {
-		u64 lo;
-		u64 hi;
-	};
-};
-
-struct dyn_arch_ftrace {};
-
-struct dyn_ftrace {
-	long unsigned int ip;
-	long unsigned int flags;
-	struct dyn_arch_ftrace arch;
+struct compat_old_sigaction {
+	compat_uptr_t sa_handler;
+	compat_old_sigset_t sa_mask;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
 };
 
 enum {
-	FTRACE_UPDATE_CALLS = 1,
-	FTRACE_DISABLE_CALLS = 2,
-	FTRACE_UPDATE_TRACE_FUNC = 4,
-	FTRACE_START_FUNC_RET = 8,
-	FTRACE_STOP_FUNC_RET = 16,
-	FTRACE_MAY_SLEEP = 32,
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
 };
 
-typedef __u64 Elf64_Off;
-
-typedef __s64 Elf64_Sxword;
-
-struct elf64_rela {
-	Elf64_Addr r_offset;
-	Elf64_Xword r_info;
-	Elf64_Sxword r_addend;
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	CPUTIME_FORCEIDLE = 10,
+	NR_STATS = 11,
 };
 
-typedef struct elf64_rela Elf64_Rela;
-
-struct elf64_hdr {
-	unsigned char e_ident[16];
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;
-	Elf64_Off e_phoff;
-	Elf64_Off e_shoff;
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = 4294967295,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 32,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 33,
 };
 
-typedef struct elf64_hdr Elf64_Ehdr;
-
-struct elf64_shdr {
-	Elf64_Word sh_name;
-	Elf64_Word sh_type;
-	Elf64_Xword sh_flags;
-	Elf64_Addr sh_addr;
-	Elf64_Off sh_offset;
-	Elf64_Xword sh_size;
-	Elf64_Word sh_link;
-	Elf64_Word sh_info;
-	Elf64_Xword sh_addralign;
-	Elf64_Xword sh_entsize;
+enum psi_task_count {
+	NR_IOWAIT = 0,
+	NR_MEMSTALL = 1,
+	NR_RUNNING = 2,
+	NR_ONCPU = 3,
+	NR_MEMSTALL_RUNNING = 4,
+	NR_PSI_TASK_COUNTS = 5,
 };
 
-typedef struct elf64_shdr Elf64_Shdr;
-
-enum aarch64_reloc_op {
-	RELOC_OP_NONE = 0,
-	RELOC_OP_ABS = 1,
-	RELOC_OP_PREL = 2,
-	RELOC_OP_PAGE = 3,
+enum psi_states {
+	PSI_IO_SOME = 0,
+	PSI_IO_FULL = 1,
+	PSI_MEM_SOME = 2,
+	PSI_MEM_FULL = 3,
+	PSI_CPU_SOME = 4,
+	PSI_CPU_FULL = 5,
+	PSI_NONIDLE = 6,
+	NR_PSI_STATES = 7,
 };
 
-enum aarch64_insn_movw_imm_type {
-	AARCH64_INSN_IMM_MOVNZ = 0,
-	AARCH64_INSN_IMM_MOVKZ = 1,
+enum psi_aggregators {
+	PSI_AVGS = 0,
+	PSI_POLL = 1,
+	NR_PSI_AGGREGATORS = 2,
 };
 
-enum perf_sample_regs_abi {
-	PERF_SAMPLE_REGS_ABI_NONE = 0,
-	PERF_SAMPLE_REGS_ABI_32 = 1,
-	PERF_SAMPLE_REGS_ABI_64 = 2,
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	devices_cgrp_id = 5,
+	freezer_cgrp_id = 6,
+	net_cls_cgrp_id = 7,
+	perf_event_cgrp_id = 8,
+	net_prio_cgrp_id = 9,
+	pids_cgrp_id = 10,
+	misc_cgrp_id = 11,
+	CGROUP_SUBSYS_COUNT = 12,
 };
 
-enum perf_event_arm_regs {
-	PERF_REG_ARM64_X0 = 0,
-	PERF_REG_ARM64_X1 = 1,
-	PERF_REG_ARM64_X2 = 2,
-	PERF_REG_ARM64_X3 = 3,
-	PERF_REG_ARM64_X4 = 4,
-	PERF_REG_ARM64_X5 = 5,
-	PERF_REG_ARM64_X6 = 6,
-	PERF_REG_ARM64_X7 = 7,
-	PERF_REG_ARM64_X8 = 8,
-	PERF_REG_ARM64_X9 = 9,
-	PERF_REG_ARM64_X10 = 10,
-	PERF_REG_ARM64_X11 = 11,
-	PERF_REG_ARM64_X12 = 12,
-	PERF_REG_ARM64_X13 = 13,
-	PERF_REG_ARM64_X14 = 14,
-	PERF_REG_ARM64_X15 = 15,
-	PERF_REG_ARM64_X16 = 16,
-	PERF_REG_ARM64_X17 = 17,
-	PERF_REG_ARM64_X18 = 18,
-	PERF_REG_ARM64_X19 = 19,
-	PERF_REG_ARM64_X20 = 20,
-	PERF_REG_ARM64_X21 = 21,
-	PERF_REG_ARM64_X22 = 22,
-	PERF_REG_ARM64_X23 = 23,
-	PERF_REG_ARM64_X24 = 24,
-	PERF_REG_ARM64_X25 = 25,
-	PERF_REG_ARM64_X26 = 26,
-	PERF_REG_ARM64_X27 = 27,
-	PERF_REG_ARM64_X28 = 28,
-	PERF_REG_ARM64_X29 = 29,
-	PERF_REG_ARM64_LR = 30,
-	PERF_REG_ARM64_SP = 31,
-	PERF_REG_ARM64_PC = 32,
-	PERF_REG_ARM64_MAX = 33,
+struct trace_buffer;
+
+struct trace_event_file;
+
+struct trace_event_buffer {
+	struct trace_buffer *buffer;
+	struct ring_buffer_event *event;
+	struct trace_event_file *trace_file;
+	void *entry;
+	unsigned int trace_ctx;
+	struct pt_regs *regs;
 };
 
-struct perf_guest_info_callbacks {
-	int (*is_in_guest)();
-	int (*is_user_mode)();
-	long unsigned int (*get_guest_ip)();
-	void (*handle_intel_pt_intr)();
+struct trace_subsystem_dir;
+
+struct trace_event_file {
+	struct list_head list;
+	struct trace_event_call *event_call;
+	struct event_filter *filter;
+	struct dentry *dir;
+	struct trace_array *tr;
+	struct trace_subsystem_dir *system;
+	struct list_head triggers;
+	long unsigned int flags;
+	atomic_t sm_ref;
+	atomic_t tm_ref;
 };
 
-struct perf_callchain_entry_ctx {
-	struct perf_callchain_entry *entry;
-	u32 max_stack;
-	u32 nr;
-	short int contexts;
-	bool contexts_maxed;
+enum {
+	EVENT_FILE_FL_ENABLED = 1,
+	EVENT_FILE_FL_RECORDED_CMD = 2,
+	EVENT_FILE_FL_RECORDED_TGID = 4,
+	EVENT_FILE_FL_FILTERED = 8,
+	EVENT_FILE_FL_NO_SET_FILTER = 16,
+	EVENT_FILE_FL_SOFT_MODE = 32,
+	EVENT_FILE_FL_SOFT_DISABLED = 64,
+	EVENT_FILE_FL_TRIGGER_MODE = 128,
+	EVENT_FILE_FL_TRIGGER_COND = 256,
+	EVENT_FILE_FL_PID_FILTER = 512,
+	EVENT_FILE_FL_WAS_ENABLED = 1024,
 };
 
-struct frame_tail {
-	struct frame_tail *fp;
-	long unsigned int lr;
+enum {
+	FILTER_OTHER = 0,
+	FILTER_STATIC_STRING = 1,
+	FILTER_DYN_STRING = 2,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_COMM = 6,
+	FILTER_CPU = 7,
 };
 
-struct compat_frame_tail {
-	compat_uptr_t fp;
-	u32 sp;
-	u32 lr;
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
 };
 
-struct platform_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
 };
 
-struct pdev_archdata {};
-
-enum perf_hw_id {
-	PERF_COUNT_HW_CPU_CYCLES = 0,
-	PERF_COUNT_HW_INSTRUCTIONS = 1,
-	PERF_COUNT_HW_CACHE_REFERENCES = 2,
-	PERF_COUNT_HW_CACHE_MISSES = 3,
-	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
-	PERF_COUNT_HW_BRANCH_MISSES = 5,
-	PERF_COUNT_HW_BUS_CYCLES = 6,
-	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
-	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
-	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
-	PERF_COUNT_HW_MAX = 10,
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
 };
 
-enum perf_hw_cache_id {
-	PERF_COUNT_HW_CACHE_L1D = 0,
-	PERF_COUNT_HW_CACHE_L1I = 1,
-	PERF_COUNT_HW_CACHE_LL = 2,
-	PERF_COUNT_HW_CACHE_DTLB = 3,
-	PERF_COUNT_HW_CACHE_ITLB = 4,
-	PERF_COUNT_HW_CACHE_BPU = 5,
-	PERF_COUNT_HW_CACHE_NODE = 6,
-	PERF_COUNT_HW_CACHE_MAX = 7,
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	long unsigned int sa_handler;
+	long unsigned int sa_flags;
+	char __data[0];
 };
 
-enum perf_hw_cache_op_id {
-	PERF_COUNT_HW_CACHE_OP_READ = 0,
-	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
-	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
-	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
 };
 
-enum perf_hw_cache_op_result_id {
-	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
-	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
-	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+typedef u64 uint64_t;
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+struct pin_cookie {};
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+typedef void (*smp_call_func_t)(void *);
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
+typedef struct __call_single_data call_single_data_t;
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	long unsigned int timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0,
+	WORK_STRUCT_INACTIVE_BIT = 1,
+	WORK_STRUCT_PWQ_BIT = 2,
+	WORK_STRUCT_LINKED_BIT = 3,
+	WORK_STRUCT_COLOR_SHIFT = 4,
+	WORK_STRUCT_COLOR_BITS = 4,
+	WORK_STRUCT_PENDING = 1,
+	WORK_STRUCT_INACTIVE = 2,
+	WORK_STRUCT_PWQ = 4,
+	WORK_STRUCT_LINKED = 8,
+	WORK_STRUCT_STATIC = 0,
+	WORK_NR_COLORS = 16,
+	WORK_CPU_UNBOUND = 4096,
+	WORK_STRUCT_FLAG_BITS = 8,
+	WORK_OFFQ_FLAG_BASE = 4,
+	__WORK_OFFQ_CANCELING = 4,
+	WORK_OFFQ_CANCELING = 16,
+	WORK_OFFQ_FLAG_BITS = 1,
+	WORK_OFFQ_POOL_SHIFT = 5,
+	WORK_OFFQ_LEFT = 59,
+	WORK_OFFQ_POOL_BITS = 31,
+	WORK_OFFQ_POOL_NONE = 2147483647,
+	WORK_STRUCT_FLAG_MASK = 255,
+	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
+	WORK_STRUCT_NO_POOL = 4294967264,
+	WORK_BUSY_PENDING = 1,
+	WORK_BUSY_RUNNING = 2,
+	WORKER_DESC_LEN = 24,
+};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	long unsigned int max_cpu_capacity;
+	struct perf_domain *pd;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	u64 exec_clock;
+	u64 min_vruntime;
+	unsigned int forceidle_seq;
+	u64 min_vruntime_fi;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	struct sched_entity *last;
+	struct sched_entity *skip;
+	unsigned int nr_spread_over;
+	long: 32;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		long unsigned int load_avg;
+		long unsigned int util_avg;
+		long unsigned int runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	long unsigned int tg_load_avg_contrib;
+	long int propagate;
+	long int prop_runnable_sum;
+	long unsigned int h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	int runtime_enabled;
+	s64 runtime_remaining;
+	u64 throttled_pelt_idle;
+	u64 throttled_clock;
+	u64 throttled_clock_pelt;
+	u64 throttled_clock_pelt_time;
+	int throttled;
+	int throttle_count;
+	struct list_head throttled_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cfs_bandwidth {
+	raw_spinlock_t lock;
+	ktime_t period;
+	u64 quota;
+	u64 runtime;
+	u64 burst;
+	u64 runtime_snap;
+	s64 hierarchical_quota;
+	u8 idle;
+	u8 period_active;
+	u8 slack_started;
+	struct hrtimer period_timer;
+	struct hrtimer slack_timer;
+	struct list_head throttled_cfs_rq;
+	int nr_periods;
+	int nr_throttled;
+	int nr_burst;
+	u64 throttled_time;
+	u64 burst_time;
+};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	long unsigned int shares;
+	int idle;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct autogroup *autogroup;
+	struct cfs_bandwidth cfs_bandwidth;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_idle;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+struct request;
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	short unsigned int nr_ios;
+	short unsigned int rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	bool nowait;
+	struct list_head cb_list;
+};
+
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
+};
+
+struct blk_integrity_profile;
+
+struct blk_integrity {
+	const struct blk_integrity_profile *profile;
+	unsigned char flags;
+	unsigned char tuple_size;
+	unsigned char interval_exp;
+	unsigned char tag_size;
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	long unsigned int seg_boundary_mask;
+	long unsigned int virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	short unsigned int max_segments;
+	short unsigned int max_integrity_segments;
+	short unsigned int max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	enum blk_zoned_model zoned;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct blk_crypto_profile;
+
+struct blk_stat_callback;
+
+struct blk_rq_stat;
+
+struct blk_mq_tags;
+
+struct blk_trace;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	long unsigned int queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	struct kobject kobj;
+	struct kobject *mq_kobj;
+	struct blk_integrity integrity;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	long unsigned int nr_requests;
+	unsigned int dma_pad_mask;
+	unsigned int dma_alignment;
+	struct blk_crypto_profile *crypto_profile;
+	struct kobject *crypto_kobject;
+	unsigned int rq_timeout;
+	int poll_nsec;
+	struct blk_stat_callback *poll_cb;
+	struct blk_rq_stat *poll_stat;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	long unsigned int blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_trace *blk_trace;
+	struct blk_flush_queue *fq;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+	struct srcu_struct srcu[0];
+};
+
+struct cpu_topology {
+	int thread_id;
+	int core_id;
+	int cluster_id;
+	int package_id;
+	cpumask_t thread_sibling;
+	cpumask_t core_sibling;
+	cpumask_t cluster_sibling;
+	cpumask_t llc_sibling;
+};
+
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+struct autogroup {
+	struct kref kref;
+	struct task_group *tg;
+	struct rw_semaphore lock;
+	long unsigned int id;
+	int nice;
+};
+
+typedef int __kernel_rwf_t;
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+struct trace_print_flags {
+	long unsigned int mask;
+	const char *name;
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	union {
+		struct {
+			long unsigned int desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	refcount_t refcnt;
+	u8 flags;
+	struct mmpin mmp;
+};
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+struct sched_group;
+
+struct sched_domain {
+	struct sched_domain *parent;
+	struct sched_domain *child;
+	struct sched_group *groups;
+	long unsigned int min_interval;
+	long unsigned int max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	long unsigned int last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	long unsigned int last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	unsigned int lb_count[3];
+	unsigned int lb_failed[3];
+	unsigned int lb_balanced[3];
+	unsigned int lb_imbalance[3];
+	unsigned int lb_gained[3];
+	unsigned int lb_hot_gained[3];
+	unsigned int lb_nobusyg[3];
+	unsigned int lb_nobusyq[3];
+	unsigned int alb_count;
+	unsigned int alb_failed;
+	unsigned int alb_pushed;
+	unsigned int sbe_count;
+	unsigned int sbe_balanced;
+	unsigned int sbe_pushed;
+	unsigned int sbf_count;
+	unsigned int sbf_balanced;
+	unsigned int sbf_pushed;
+	unsigned int ttwu_wake_remote;
+	unsigned int ttwu_move_affine;
+	unsigned int ttwu_move_balance;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	long unsigned int span[0];
+};
+
+struct sched_group_capacity;
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	long unsigned int cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	long unsigned int capacity;
+	long unsigned int min_capacity;
+	long unsigned int max_capacity;
+	long unsigned int next_update;
+	int imbalance;
+	int id;
+	long unsigned int cpumask[0];
+};
+
+struct kernel_cpustat {
+	u64 cpustat[11];
+};
+
+struct kernel_stat {
+	long unsigned int irqs_sum;
+	unsigned int softirqs[10];
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	CFTYPE_PRESSURE = 64,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+};
+
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct cdrom_device_info;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	short unsigned int events;
+	short unsigned int event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	long unsigned int state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	struct kobject integrity_kobj;
+	unsigned int nr_zones;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	struct cdrom_device_info *cdi;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	struct blk_independent_access_ranges *ia_ranges;
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+struct blk_integrity_iter;
+
+typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+
+typedef void integrity_prepare_fn(struct request *);
+
+typedef void integrity_complete_fn(struct request *, unsigned int);
+
+struct blk_integrity_profile {
+	integrity_processing_fn *generate_fn;
+	integrity_processing_fn *verify_fn;
+	integrity_prepare_fn *prepare_fn;
+	integrity_complete_fn *complete_fn;
+	const char *name;
+};
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct block_device *, fmode_t);
+	void (*release)(struct gendisk *, fmode_t);
+	int (*rw_page)(struct block_device *, sector_t, struct page *, enum req_op);
+	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	int (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_MAX = 30,
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTPKTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	__IPSTATS_MIB_MAX = 37,
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	__ICMP_MIB_MAX = 28,
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	__ICMP6_MIB_MAX = 6,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	__LINUX_MIB_MAX = 126,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+enum {
+	LINUX_MIB_TLSNUM = 0,
+	LINUX_MIB_TLSCURRTXSW = 1,
+	LINUX_MIB_TLSCURRRXSW = 2,
+	LINUX_MIB_TLSCURRTXDEVICE = 3,
+	LINUX_MIB_TLSCURRRXDEVICE = 4,
+	LINUX_MIB_TLSTXSW = 5,
+	LINUX_MIB_TLSRXSW = 6,
+	LINUX_MIB_TLSTXDEVICE = 7,
+	LINUX_MIB_TLSRXDEVICE = 8,
+	LINUX_MIB_TLSDECRYPTERROR = 9,
+	LINUX_MIB_TLSRXDEVICERESYNC = 10,
+	LINUX_MIB_TLSDECRYPTRETRY = 11,
+	LINUX_MIB_TLSRXNOPADVIOL = 12,
+	__LINUX_MIB_TLSMAX = 13,
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_DECNET = 12,
+	NFPROTO_NUMPROTO = 13,
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = 4294967295,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+typedef struct {
+	union {
+		void *kernel;
+		void *user;
+	};
+	bool is_kernel: 1;
+} sockptr_t;
+
+typedef enum {
+	SS_FREE = 0,
+	SS_UNCONNECTED = 1,
+	SS_CONNECTING = 2,
+	SS_CONNECTED = 3,
+	SS_DISCONNECTING = 4,
+} socket_state;
+
+struct socket_wq {
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync_list;
+	long unsigned int flags;
+	struct callback_head rcu;
+	long: 64;
+};
+
+struct proto_ops;
+
+struct socket {
+	socket_state state;
+	short int type;
+	long unsigned int flags;
+	struct file *file;
+	struct sock *sk;
+	const struct proto_ops *ops;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq wq;
+};
+
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
+typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
+
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
+struct proto_ops {
+	int family;
+	struct module *owner;
+	int (*release)(struct socket *);
+	int (*bind)(struct socket *, struct sockaddr *, int);
+	int (*connect)(struct socket *, struct sockaddr *, int, int);
+	int (*socketpair)(struct socket *, struct socket *);
+	int (*accept)(struct socket *, struct socket *, int, bool);
+	int (*getname)(struct socket *, struct sockaddr *, int);
+	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
+	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
+	int (*gettstamp)(struct socket *, void *, bool, bool);
+	int (*listen)(struct socket *, int);
+	int (*shutdown)(struct socket *, int);
+	int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct socket *, int, int, char *, int *);
+	void (*show_fdinfo)(struct seq_file *, struct socket *);
+	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
+	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
+	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
+	ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
+	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	int (*set_peek_off)(struct sock *, int);
+	int (*peek_len)(struct socket *);
+	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
+	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
+	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
+	int (*set_rcvlowat)(struct sock *, int);
+};
+
+enum skb_ext_id {
+	SKB_EXT_BRIDGE_NF = 0,
+	SKB_EXT_SEC_PATH = 1,
+	TC_SKB_EXT = 2,
+	SKB_EXT_MPTCP = 3,
+	SKB_EXT_NUM = 4,
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+};
+
+struct sched_param {
+	int sched_priority;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long int prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 delay;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_sched_stat_template {};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+struct rt_prio_array {
+	long unsigned int bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+};
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 bw_ratio;
+};
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	long unsigned int caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+struct cpuidle_state;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+	unsigned int numa_migrate_on;
+	long unsigned int last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	long unsigned int next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_pelt;
+	long unsigned int lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain *sd;
+	long unsigned int cpu_capacity;
+	long unsigned int cpu_capacity_orig;
+	struct callback_head *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	long unsigned int misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	struct sched_avg avg_irq;
+	struct sched_avg avg_thermal;
+	u64 idle_stamp;
+	u64 avg_idle;
+	long unsigned int wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	u64 prev_irq_time;
+	u64 prev_steal_time;
+	u64 prev_steal_time_rq;
+	long unsigned int calc_load_update;
+	long int calc_load_active;
+	long: 64;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct sched_info rq_sched_info;
+	long long unsigned int rq_cpu_time;
+	unsigned int yld_count;
+	unsigned int sched_count;
+	unsigned int sched_goidle;
+	unsigned int ttwu_count;
+	unsigned int ttwu_local;
+	struct cpuidle_state *idle_state;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	struct rq *core;
+	struct task_struct *core_pick;
+	unsigned int core_enabled;
+	unsigned int core_sched_seq;
+	struct rb_root core_tree;
+	unsigned int core_task_seq;
+	unsigned int core_pick_seq;
+	long unsigned int core_cookie;
+	unsigned int core_forceidle_count;
+	unsigned int core_forceidle_seq;
+	unsigned int core_forceidle_occupation;
+	u64 core_forceidle_start;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct rq_flags {
+	long unsigned int flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+struct sched_entity_stats {
+	struct sched_entity se;
+	struct sched_statistics stats;
+};
+
+enum {
+	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
+	__SCHED_FEAT_START_DEBIT = 1,
+	__SCHED_FEAT_NEXT_BUDDY = 2,
+	__SCHED_FEAT_LAST_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_UTIL_EST_FASTUP = 22,
+	__SCHED_FEAT_LATENCY_WARN = 23,
+	__SCHED_FEAT_ALT_PERIOD = 24,
+	__SCHED_FEAT_BASE_SLICE = 25,
+	__SCHED_FEAT_NR = 26,
+};
+
+struct irqtime {
+	u64 total;
+	u64 tick_delta;
+	u64 irq_start_time;
+	struct u64_stats_sync sync;
+};
+
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
+};
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_LAST = 48,
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_fixed_file {
+	long unsigned int file_ptr;
+};
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	long unsigned int *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_notif_slot;
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	short unsigned int submit_nr;
+	struct blk_plug plug;
+};
+
+struct io_alloc_cache {
+	struct hlist_head list;
+	unsigned int nr_cached;
+};
+
+struct io_restriction {
+	long unsigned int register_op[1];
+	long unsigned int sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_buffer_list;
+
+struct io_sq_data;
+
+struct io_ev_fd;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		struct percpu_ref refs;
+		struct io_rings *rings;
+		unsigned int flags;
+		enum task_work_notify_mode notify_method;
+		unsigned int compat: 1;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int has_evfd: 1;
+		unsigned int syscall_iopoll: 1;
+		long: 56;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		int rsrc_cached_refs;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_notif_slot *notif_slots;
+		unsigned int nr_notif_slots;
+		struct io_submit_state submit_state;
+		struct io_buffer_list *io_bl;
+		struct xarray io_bl_xa;
+		struct list_head io_buffers_cache;
+		struct io_hash_table cancel_table_locked;
+		struct list_head cq_overflow_list;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+	};
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	long unsigned int check_cq;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	long: 32;
+	long: 64;
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd *io_ev_fd;
+		struct wait_queue_head cq_wait;
+		unsigned int cq_extra;
+	};
+	struct {
+		spinlock_t completion_lock;
+		struct io_wq_work_list iopoll_list;
+		struct io_hash_table cancel_table;
+		bool poll_multi_queue;
+		struct list_head io_buffers_comp;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		atomic_t cq_timeouts;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 32;
+		long: 64;
+		long: 64;
+	};
+	struct io_restriction restrictions;
+	struct task_struct *submitter_task;
+	struct io_rsrc_node *rsrc_backup_node;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct delayed_work rsrc_put_work;
+	struct llist_head rsrc_put_llist;
+	struct list_head rsrc_ref_list;
+	spinlock_t rsrc_ref_lock;
+	struct list_head io_buffers_pages;
+	struct socket *ring_sock;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+};
+
+struct io_uring {
+	u32 head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 tail;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, bool *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_buffer;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	union {
+		struct hlist_node hash_node;
+		struct {
+			u64 extra1;
+			u64 extra2;
+		};
+	};
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	long unsigned int map;
+	struct wait_queue_head wait;
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_CQE32_INIT_BIT = 26,
+	REQ_F_APOLL_MULTISHOT_BIT = 27,
+	REQ_F_CLEAR_POLLIN_BIT = 28,
+	REQ_F_HASH_LOCKED_BIT = 29,
+	REQ_F_SUPPORT_NOWAIT_BIT = 30,
+	REQ_F_ISREG_BIT = 31,
+	__REQ_F_LAST_BIT = 32,
+};
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+struct tick_work {
+	int cpu;
+	atomic_t state;
+	struct delayed_work work;
+};
+
+enum {
+	preempt_dynamic_undefined = 4294967295,
+	preempt_dynamic_none = 0,
+	preempt_dynamic_voluntary = 1,
+	preempt_dynamic_full = 2,
+};
+
+struct cfs_schedulable_data {
+	struct task_group *tg;
+	u64 period;
+	u64 quota;
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+enum {
+	IRQTF_RUNTHREAD = 0,
+	IRQTF_WARNED = 1,
+	IRQTF_AFFINITY = 2,
+	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 0,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+struct irq_generic_chip_devres {
+	struct irq_chip_generic *gc;
+	u32 msk;
+	unsigned int clr;
+	unsigned int set;
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+struct node_vectors {
+	unsigned int id;
+	union {
+		unsigned int nvectors;
+		unsigned int ncpus;
+	};
+};
+
+enum {
+	GP_IDLE = 0,
+	GP_ENTER = 1,
+	GP_PASSED = 2,
+	GP_EXIT = 3,
+	GP_REPLAY = 4,
+};
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long int len;
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_mem {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	long unsigned int nslabs;
+	long unsigned int used;
+	struct dentry *debugfs;
+	bool late_alloc;
+	bool force_bounce;
+	bool for_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	long unsigned int attrs;
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	long unsigned int addr_min;
+	long unsigned int addr_max;
+};
+
+struct __va_list {
+	void *__stack;
+	void *__gr_top;
+	void *__vr_top;
+	int __gr_offs;
+	int __vr_offs;
+};
+
+typedef struct __va_list va_list;
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(long unsigned int, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	long unsigned int retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	long unsigned int min_delta_ticks;
+	long unsigned int max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_sched {
+	struct hrtimer sched_timer;
+	long unsigned int check_clocks;
+	enum tick_nohz_mode nohz_mode;
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	long unsigned int idle_jiffies;
+	long unsigned int idle_calls;
+	long unsigned int idle_sleeps;
+	ktime_t idle_entrytime;
+	ktime_t idle_waketime;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	long unsigned int last_jiffies;
+	u64 timer_expires;
+	u64 timer_expires_base;
+	u64 next_timer;
+	ktime_t idle_expires;
+	atomic_t tick_dep_mask;
+	long unsigned int last_tick_jiffies;
+	unsigned int stalled_jiffies;
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct __kernel_old_itimerval {
+	struct __kernel_old_timeval it_interval;
+	struct __kernel_old_timeval it_value;
+};
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
+};
+
+struct old_itimerval32 {
+	struct old_timeval32 it_interval;
+	struct old_timeval32 it_value;
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+struct rt_mutex_base;
+
+struct ww_acquire_ctx;
+
+struct rt_mutex_waiter {
+	struct rb_node tree_entry;
+	struct rb_node pi_tree_entry;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	int prio;
+	u64 deadline;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct robust_list {
+	struct robust_list *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long int futex_offset;
+	struct robust_list *list_op_pending;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		long unsigned int pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		long unsigned int address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		long unsigned int word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
+};
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+typedef u32 note_buf_t[106];
+
+struct crash_mem_range {
+	u64 start;
+	u64 end;
+};
+
+struct crash_mem {
+	unsigned int max_nr_ranges;
+	unsigned int nr_ranges;
+	struct crash_mem_range ranges[0];
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+	int nid;
+};
+
+struct memblock_type {
+	long unsigned int cnt;
+	long unsigned int max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_PCMCIA_CIS = 10,
+	LOCKDOWN_TIOCSSERIAL = 11,
+	LOCKDOWN_MODULE_PARAMETERS = 12,
+	LOCKDOWN_MMIOTRACE = 13,
+	LOCKDOWN_DEBUGFS = 14,
+	LOCKDOWN_XMON_WR = 15,
+	LOCKDOWN_BPF_WRITE_USER = 16,
+	LOCKDOWN_DBG_WRITE_KERNEL = 17,
+	LOCKDOWN_INTEGRITY_MAX = 18,
+	LOCKDOWN_KCORE = 19,
+	LOCKDOWN_KPROBES = 20,
+	LOCKDOWN_BPF_READ_KERNEL = 21,
+	LOCKDOWN_DBG_READ_KERNEL = 22,
+	LOCKDOWN_PERF = 23,
+	LOCKDOWN_TRACEFS = 24,
+	LOCKDOWN_XMON_RW = 25,
+	LOCKDOWN_XFRM_SECRET = 26,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 27,
+};
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct kexec_sha_region {
+	long unsigned int start;
+	long unsigned int len;
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+struct idmap_key {
+	bool map_up;
+	u32 id;
+	u32 count;
+};
+
+typedef int __kernel_mqd_t;
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+enum audit_state {
+	AUDIT_STATE_DISABLED = 0,
+	AUDIT_STATE_BUILD = 1,
+	AUDIT_STATE_RECORD = 2,
+};
+
+struct audit_cap_data {
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	union {
+		unsigned int fE;
+		kernel_cap_t effective;
+	};
+	kernel_cap_t ambient;
+	kuid_t rootid;
+};
+
+struct audit_names {
+	struct list_head list;
+	struct filename *name;
+	int name_len;
+	bool hidden;
+	long unsigned int ino;
+	dev_t dev;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	u32 osid;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	unsigned char type;
+	bool should_free;
+};
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+struct audit_ntp_val {
+	long long int oldval;
+	long long int newval;
+};
+
+struct audit_ntp_data {
+	struct audit_ntp_val vals[6];
+};
+
+struct audit_proctitle {
+	int len;
+	char *value;
+};
+
+struct audit_aux_data;
+
+struct __kernel_sockaddr_storage;
+
+struct audit_tree_refs;
+
+struct audit_context {
+	int dummy;
+	enum {
+		AUDIT_CTX_UNUSED = 0,
+		AUDIT_CTX_SYSCALL = 1,
+		AUDIT_CTX_URING = 2,
+	} context;
+	enum audit_state state;
+	enum audit_state current_state;
+	unsigned int serial;
+	int major;
+	int uring_op;
+	struct timespec64 ctime;
+	long unsigned int argv[4];
+	long int return_code;
+	u64 prio;
+	int return_valid;
+	struct audit_names preallocated_names[5];
+	int name_count;
+	struct list_head names_list;
+	char *filterkey;
+	struct path pwd;
+	struct audit_aux_data *aux;
+	struct audit_aux_data *aux_pids;
+	struct __kernel_sockaddr_storage *sockaddr;
+	size_t sockaddr_len;
+	pid_t pid;
+	pid_t ppid;
+	kuid_t uid;
+	kuid_t euid;
+	kuid_t suid;
+	kuid_t fsuid;
+	kgid_t gid;
+	kgid_t egid;
+	kgid_t sgid;
+	kgid_t fsgid;
+	long unsigned int personality;
+	int arch;
+	pid_t target_pid;
+	kuid_t target_auid;
+	kuid_t target_uid;
+	unsigned int target_sessionid;
+	u32 target_sid;
+	char target_comm[16];
+	struct audit_tree_refs *trees;
+	struct audit_tree_refs *first_trees;
+	struct list_head killed_trees;
+	int tree_count;
+	int type;
+	union {
+		struct {
+			int nargs;
+			long int args[6];
+		} socketcall;
+		struct {
+			kuid_t uid;
+			kgid_t gid;
+			umode_t mode;
+			u32 osid;
+			int has_perm;
+			uid_t perm_uid;
+			gid_t perm_gid;
+			umode_t perm_mode;
+			long unsigned int qbytes;
+		} ipc;
+		struct {
+			mqd_t mqdes;
+			struct mq_attr mqstat;
+		} mq_getsetattr;
+		struct {
+			mqd_t mqdes;
+			int sigev_signo;
+		} mq_notify;
+		struct {
+			mqd_t mqdes;
+			size_t msg_len;
+			unsigned int msg_prio;
+			struct timespec64 abs_timeout;
+		} mq_sendrecv;
+		struct {
+			int oflag;
+			umode_t mode;
+			struct mq_attr attr;
+		} mq_open;
+		struct {
+			pid_t pid;
+			struct audit_cap_data cap;
+		} capset;
+		struct {
+			int fd;
+			int flags;
+		} mmap;
+		struct open_how openat2;
+		struct {
+			int argc;
+		} execve;
+		struct {
+			char *name;
+		} module;
+		struct {
+			struct audit_ntp_data ntp_data;
+			struct timespec64 tk_injoffset;
+		} time;
+	};
+	int fds[2];
+	struct audit_proctitle proctitle;
+};
+
+typedef struct fsnotify_mark_connector *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	short unsigned int type;
+	short unsigned int flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+enum {
+	Audit_equal = 0,
+	Audit_not_equal = 1,
+	Audit_bitmask = 2,
+	Audit_bittest = 3,
+	Audit_lt = 4,
+	Audit_gt = 5,
+	Audit_le = 6,
+	Audit_ge = 7,
+	Audit_bad = 8,
+};
+
+struct audit_field;
+
+struct audit_watch;
+
+struct audit_tree;
+
+struct audit_fsnotify_mark;
+
+struct audit_krule {
+	u32 pflags;
+	u32 flags;
+	u32 listnr;
+	u32 action;
+	u32 mask[64];
+	u32 buflen;
+	u32 field_count;
+	char *filterkey;
+	struct audit_field *fields;
+	struct audit_field *arch_f;
+	struct audit_field *inode_f;
+	struct audit_watch *watch;
+	struct audit_tree *tree;
+	struct audit_fsnotify_mark *exe;
+	struct list_head rlist;
+	struct list_head list;
+	u64 prio;
+};
+
+struct audit_field {
+	u32 type;
+	union {
+		u32 val;
+		kuid_t uid;
+		kgid_t gid;
+		struct {
+			char *lsm_str;
+			void *lsm_rule;
+		};
+	};
+	u32 op;
+};
+
+struct audit_parent;
+
+struct audit_watch {
+	refcount_t count;
+	dev_t dev;
+	char *path;
+	long unsigned int ino;
+	struct audit_parent *parent;
+	struct list_head wlist;
+	struct list_head rules;
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+struct fsnotify_group;
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_event;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
+};
+
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
+};
+
+struct fanotify_group_private_data {
+	struct hlist_head *merge_hash;
+	struct list_head access_list;
+	wait_queue_head_t access_waitq;
+	int flags;
+	int f_flags;
+	struct ucounts *ucounts;
+	mempool_t error_events_pool;
+};
+
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+		struct fanotify_group_private_data fanotify_data;
+	};
+};
+
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
+};
+
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
+	unsigned int flags;
+};
+
+struct fsnotify_event {
+	struct list_head list;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = 4294967295,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
+};
+
+struct audit_entry {
+	struct list_head list;
+	struct callback_head rcu;
+	struct audit_krule rule;
+};
+
+struct audit_parent {
+	struct list_head watches;
+	struct fsnotify_mark mark;
+};
+
+struct audit_buffer;
+
+struct ftrace_hash {
+	long unsigned int size_bits;
+	struct hlist_head *buckets;
+	long unsigned int count;
+	long unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry *prog;
+	char *filter_string;
+};
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct cond_snapshot;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct array_buffer max_buffer;
+	bool allocated_snapshot;
+	long unsigned int max_latency;
+	struct dentry *d_max_latency;
+	struct work_struct fsnotify_work;
+	struct irq_work fsnotify_irqwork;
+	struct trace_pid_list *filtered_pids;
+	struct trace_pid_list *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int sys_refcount_enter;
+	int sys_refcount_exit;
+	struct trace_event_file *enter_syscall_files[451];
+	struct trace_event_file *exit_syscall_files[451];
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct dentry *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	int ref;
+	int trace_ref;
+	struct ftrace_ops *ops;
+	struct trace_pid_list *function_pids;
+	struct trace_pid_list *function_no_pids;
+	struct list_head func_probes;
+	struct list_head mod_trace;
+	struct list_head mod_notrace;
+	int function_enabled;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct cond_snapshot *cond_snapshot;
+	struct trace_func_repeats *last_func_repeats;
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool use_max_tr;
+	bool noboot;
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct dentry *entry;
+	int ref_count;
+	int nr_events;
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	long unsigned int data[256];
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	long unsigned int entries;
+	long unsigned int saved_latency;
+	long unsigned int critical_start;
+	long unsigned int critical_end;
+	long unsigned int critical_sequence;
+	long unsigned int nice;
+	long unsigned int policy;
+	long unsigned int rt_priority;
+	long unsigned int skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	int ftrace_ignore_pid;
+	bool ignore_pid;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct tracer_opt;
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct cond_snapshot {
+	void *cond_data;
+	cond_update_fn_t update;
+};
+
+struct trace_func_repeats {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	long unsigned int count;
+	u64 ts_last_call;
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	long unsigned int caller[8];
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+enum trace_iterator_bits {
+	TRACE_ITER_PRINT_PARENT_BIT = 0,
+	TRACE_ITER_SYM_OFFSET_BIT = 1,
+	TRACE_ITER_SYM_ADDR_BIT = 2,
+	TRACE_ITER_VERBOSE_BIT = 3,
+	TRACE_ITER_RAW_BIT = 4,
+	TRACE_ITER_HEX_BIT = 5,
+	TRACE_ITER_BIN_BIT = 6,
+	TRACE_ITER_BLOCK_BIT = 7,
+	TRACE_ITER_PRINTK_BIT = 8,
+	TRACE_ITER_ANNOTATE_BIT = 9,
+	TRACE_ITER_USERSTACKTRACE_BIT = 10,
+	TRACE_ITER_SYM_USEROBJ_BIT = 11,
+	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
+	TRACE_ITER_CONTEXT_INFO_BIT = 13,
+	TRACE_ITER_LATENCY_FMT_BIT = 14,
+	TRACE_ITER_RECORD_CMD_BIT = 15,
+	TRACE_ITER_RECORD_TGID_BIT = 16,
+	TRACE_ITER_OVERWRITE_BIT = 17,
+	TRACE_ITER_STOP_ON_FREE_BIT = 18,
+	TRACE_ITER_IRQ_INFO_BIT = 19,
+	TRACE_ITER_MARKERS_BIT = 20,
+	TRACE_ITER_EVENT_FORK_BIT = 21,
+	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
+	TRACE_ITER_HASH_PTR_BIT = 23,
+	TRACE_ITER_FUNCTION_BIT = 24,
+	TRACE_ITER_FUNC_FORK_BIT = 25,
+	TRACE_ITER_DISPLAY_GRAPH_BIT = 26,
+	TRACE_ITER_STACKTRACE_BIT = 27,
+	TRACE_ITER_LAST_BIT = 28,
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct trace_event_raw_thread_noise {
+	struct trace_entry ent;
+	char comm[16];
+	u64 start;
+	u64 duration;
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq_noise {
+	struct trace_entry ent;
+	u64 start;
+	u64 duration;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_noise {
+	struct trace_entry ent;
+	u64 start;
+	u64 duration;
+	u32 __data_loc_desc;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_nmi_noise {
+	struct trace_entry ent;
+	u64 start;
+	u64 duration;
+	char __data[0];
+};
+
+struct trace_event_raw_sample_threshold {
+	struct trace_entry ent;
+	u64 start;
+	u64 duration;
+	u64 interference;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thread_noise {};
+
+struct trace_event_data_offsets_softirq_noise {};
+
+struct trace_event_data_offsets_irq_noise {
+	u32 desc;
+};
+
+struct trace_event_data_offsets_nmi_noise {};
+
+struct trace_event_data_offsets_sample_threshold {};
+
+typedef void (*btf_trace_thread_noise)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_softirq_noise)(void *, int, u64, u64);
+
+typedef void (*btf_trace_irq_noise)(void *, int, const char *, u64, u64);
+
+typedef void (*btf_trace_nmi_noise)(void *, u64, u64);
+
+typedef void (*btf_trace_sample_threshold)(void *, u64, u64, u64);
+
+struct osnoise_instance {
+	struct list_head list;
+	struct trace_array *tr;
+};
+
+struct osn_nmi {
+	u64 count;
+	u64 delta_start;
+};
+
+struct osn_irq {
+	u64 count;
+	u64 arrival_time;
+	u64 delta_start;
+};
+
+struct osn_softirq {
+	u64 count;
+	u64 arrival_time;
+	u64 delta_start;
+};
+
+struct osn_thread {
+	u64 count;
+	u64 arrival_time;
+	u64 delta_start;
+};
+
+struct osnoise_variables {
+	struct task_struct *kthread;
+	bool sampling;
+	pid_t pid;
+	struct osn_nmi nmi;
+	struct osn_irq irq;
+	struct osn_softirq softirq;
+	struct osn_thread thread;
+	local_t int_counter;
+};
+
+struct timerlat_variables {
+	struct task_struct *kthread;
+	struct hrtimer timer;
+	u64 rel_period;
+	u64 abs_period;
+	bool tracing_thread;
+	u64 count;
+};
+
+struct osnoise_sample {
+	u64 runtime;
+	u64 noise;
+	u64 max_sample;
+	int hw_count;
+	int nmi_count;
+	int irq_count;
+	int softirq_count;
+	int thread_count;
+};
+
+struct timerlat_sample {
+	u64 timer_latency;
+	unsigned int seqnum;
+	int context;
+};
+
+struct osnoise_data {
+	u64 sample_period;
+	u64 sample_runtime;
+	u64 stop_tracing;
+	u64 stop_tracing_total;
+	u64 timerlat_period;
+	u64 print_stack;
+	int timerlat_tracer;
+	bool tainted;
+};
+
+struct trace_stack {
+	int stack_size;
+	int nr_entries;
+	long unsigned int calls[256];
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
+
+struct regex;
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+struct filter_pred {
+	filter_pred_fn_t fn;
+	u64 val;
+	struct regex regex;
+	short unsigned int *ops;
+	struct ftrace_event_field *field;
+	int offset;
+	int not;
+	int op;
+};
+
+enum regex_type {
+	MATCH_FULL = 0,
+	MATCH_FRONT_ONLY = 1,
+	MATCH_MIDDLE_ONLY = 2,
+	MATCH_END_ONLY = 3,
+	MATCH_GLOB = 4,
+	MATCH_INDEX = 5,
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_OPERAND_TOO_LONG = 5,
+	FILT_ERR_EXPECT_STRING = 6,
+	FILT_ERR_EXPECT_DIGIT = 7,
+	FILT_ERR_ILLEGAL_FIELD_OP = 8,
+	FILT_ERR_FIELD_NOT_FOUND = 9,
+	FILT_ERR_ILLEGAL_INTVAL = 10,
+	FILT_ERR_BAD_SUBSYS_FILTER = 11,
+	FILT_ERR_TOO_MANY_PREDS = 12,
+	FILT_ERR_INVALID_FILTER = 13,
+	FILT_ERR_IP_FIELD_ONLY = 14,
+	FILT_ERR_INVALID_VALUE = 15,
+	FILT_ERR_ERRNO = 16,
+	FILT_ERR_NO_FILTER = 17,
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum {
+	TOO_MANY_CLOSE = 4294967295,
+	TOO_MANY_OPEN = 4294967294,
+	MISSING_QUOTE = 4294967293,
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct function_filter_data {
+	struct ftrace_ops *ops;
+	int first_filter;
+	int first_notrace;
+};
+
+enum pm_qos_req_action {
+	PM_QOS_ADD_REQ = 0,
+	PM_QOS_UPDATE_REQ = 1,
+	PM_QOS_REMOVE_REQ = 2,
+};
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+};
+
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
+};
+
+struct clk;
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_stats;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+struct trace_event_raw_cpu {
+	struct trace_entry ent;
+	u32 state;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
+struct trace_event_raw_powernv_throttle {
+	struct trace_entry ent;
+	int chip_id;
+	u32 __data_loc_reason;
+	int pmax;
+	char __data[0];
+};
+
+struct trace_event_raw_pstate_sample {
+	struct trace_entry ent;
+	u32 core_busy;
+	u32 scaled_busy;
+	u32 from;
+	u32 to;
+	u64 mperf;
+	u64 aperf;
+	u64 tsc;
+	u32 freq;
+	u32 io_boost;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_frequency_limits {
+	struct trace_entry ent;
+	u32 min_freq;
+	u32 max_freq;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_start {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u32 __data_loc_parent;
+	u32 __data_loc_pm_ops;
+	int event;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_end {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_suspend_resume {
+	struct trace_entry ent;
+	const char *action;
+	int val;
+	bool start;
+	char __data[0];
+};
+
+struct trace_event_raw_wakeup_source {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	char __data[0];
+};
+
+struct trace_event_raw_clock {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_power_domain {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_latency_qos_request {
+	struct trace_entry ent;
+	s32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_pm_qos_update {
+	struct trace_entry ent;
+	enum pm_qos_req_action action;
+	int prev_value;
+	int curr_value;
+	char __data[0];
+};
+
+struct trace_event_raw_dev_pm_qos_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	enum dev_pm_qos_req_type type;
+	s32 new_value;
+	char __data[0];
+};
+
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpu {};
+
+struct trace_event_data_offsets_cpu_idle_miss {};
+
+struct trace_event_data_offsets_powernv_throttle {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_pstate_sample {};
+
+struct trace_event_data_offsets_cpu_frequency_limits {};
+
+struct trace_event_data_offsets_device_pm_callback_start {
+	u32 device;
+	u32 driver;
+	u32 parent;
+	u32 pm_ops;
+};
+
+struct trace_event_data_offsets_device_pm_callback_end {
+	u32 device;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_suspend_resume {};
+
+struct trace_event_data_offsets_wakeup_source {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clock {
+	u32 name;
+};
+
+struct trace_event_data_offsets_power_domain {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cpu_latency_qos_request {};
+
+struct trace_event_data_offsets_pm_qos_update {};
+
+struct trace_event_data_offsets_dev_pm_qos_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
+typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
+
+typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
+
+typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
+
+typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
+
+typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
+
+typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
+
+typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	__BPF_FUNC_MAX_ID = 208,
+};
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	struct rhash_lock_head *buckets[0];
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct bpf_verifier_log {
+	u32 level;
+	char kbuf[1024];
+	char *ubuf;
+	u32 len_used;
+	u32 len_total;
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool allow_ptr_to_map_access;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	struct bpf_id_pair idmap_scratch[75];
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u32 prev_log_len;
+	u32 prev_insn_print_len;
+	char type_str_buf[64];
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		u32 mem_size;
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			long unsigned int raw1;
+			long unsigned int raw2;
+		} raw;
+		u32 subprogno;
+	};
+	u32 id;
+	u32 ref_obj_id;
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	bool in_async_callback_fn;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_ALLOC = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	__BPF_TYPE_FLAG_MAX = 262145,
+	__BPF_TYPE_LAST_FLAG = 262144,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_ALLOC_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 271,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 524287,
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_ALLOC_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_ALLOC_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	__BPF_RET_TYPE_LIMIT = 524287,
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+	int callback_ref;
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	u32 active_spin_lock;
+	bool speculative;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		long unsigned int map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool prune_point;
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	long unsigned int bitmap[0];
+};
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct rhash_lock_head {};
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+};
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		char value[0];
+		void *ptrs[0];
+		void *pptrs[0];
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_MAP_VALUE_OFF_MAX = 8,
+	BPF_MAP_OFF_ARR_MAX = 10,
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+typedef struct user_pt_regs bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+typedef struct {} local_lock_t;
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void *slots[64];
+	union {
+		long unsigned int tags[3];
+		long unsigned int marks[3];
+	};
+};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	short unsigned int skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		long unsigned int skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	short unsigned int skc_tx_queue_mapping;
+	short unsigned int skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+	u32 classid;
+	u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct xfrm_policy;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	struct sk_filter *sk_filter;
+	union {
+		struct socket_wq *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy *sk_policy[2];
+	struct dst_entry *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	long unsigned int sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long int sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	long unsigned int sk_pacing_rate;
+	long unsigned int sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	long unsigned int sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long int sk_rcvtimeo;
+	ktime_t sk_stamp;
+	u16 sk_tsflags;
+	u8 sk_shutdown;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	void *sk_security;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport *sk_reuseport_cb;
+	struct bpf_local_storage *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+};
+
+struct btf_id_set8;
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	struct flowi_tunnel flowic_tun_key;
+	__u32 flowic_multipath_hash;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	struct {
+		__le16 dport;
+		__le16 sport;
+	} dnports;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+struct flowidn {
+	struct flowi_common __fl_common;
+	__le16 daddr;
+	__le16 saddr;
+	union flowi_uli uli;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+		struct flowidn dn;
+	} u;
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+struct icmpv6_mib_device {
+	atomic_long_t mibs[6];
+};
+
+struct icmpv6msg_mib_device {
+	atomic_long_t mibs[512];
+};
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+};
+
+struct ip_ra_chain {
+	struct ip_ra_chain *next;
+	struct sock *sk;
+	union {
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
+	struct callback_head rcu;
+};
+
+struct fib_rule;
+
+struct fib_lookup_arg;
+
+struct fib_rule_hdr;
+
+struct fib_rules_ops {
+	int family;
+	struct list_head list;
+	int rule_size;
+	int addr_size;
+	int unresolved_rules;
+	int nr_goto_rules;
+	unsigned int fib_rules_seq;
+	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
+	int (*match)(struct fib_rule *, struct flowi *, int);
+	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*delete)(struct fib_rule *);
+	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
+	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
+	size_t (*nlmsg_payload)(struct fib_rule *);
+	void (*flush_cache)(struct fib_rules_ops *);
+	int nlgroup;
+	struct list_head rules_list;
+	struct module *owner;
+	struct net *fro_net;
+	struct callback_head rcu;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	long unsigned int *tb_data;
+	long unsigned int __data[0];
+};
+
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+struct fib_notifier_ops {
+	int family;
+	struct list_head list;
+	unsigned int (*fib_seq_read)(struct net *);
+	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
+	struct module *owner;
+	struct callback_head rcu;
+};
+
+struct ipv6_stable_secret {
+	bool initialized;
+	struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+	__s32 forwarding;
+	__s32 hop_limit;
+	__s32 mtu6;
+	__s32 accept_ra;
+	__s32 accept_redirects;
+	__s32 autoconf;
+	__s32 dad_transmits;
+	__s32 rtr_solicits;
+	__s32 rtr_solicit_interval;
+	__s32 rtr_solicit_max_interval;
+	__s32 rtr_solicit_delay;
+	__s32 force_mld_version;
+	__s32 mldv1_unsolicited_report_interval;
+	__s32 mldv2_unsolicited_report_interval;
+	__s32 use_tempaddr;
+	__s32 temp_valid_lft;
+	__s32 temp_prefered_lft;
+	__s32 regen_max_retry;
+	__s32 max_desync_factor;
+	__s32 max_addresses;
+	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
+	__s32 accept_ra_min_hop_limit;
+	__s32 accept_ra_pinfo;
+	__s32 ignore_routes_with_linkdown;
+	__s32 accept_ra_rtr_pref;
+	__s32 rtr_probe_interval;
+	__s32 accept_ra_rt_info_min_plen;
+	__s32 accept_ra_rt_info_max_plen;
+	__s32 proxy_ndp;
+	__s32 accept_source_route;
+	__s32 accept_ra_from_local;
+	__s32 optimistic_dad;
+	__s32 use_optimistic;
+	atomic_t mc_forwarding;
+	__s32 disable_ipv6;
+	__s32 drop_unicast_in_l2_multicast;
+	__s32 accept_dad;
+	__s32 force_tllao;
+	__s32 ndisc_notify;
+	__s32 suppress_frag_ndisc;
+	__s32 accept_ra_mtu;
+	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
+	struct ipv6_stable_secret stable_secret;
+	__s32 use_oif_addrs_only;
+	__s32 keep_addr_on_down;
+	__s32 seg6_enabled;
+	__s32 seg6_require_hmac;
+	__u32 enhanced_dad;
+	__u32 addr_gen_mode;
+	__s32 disable_policy;
+	__s32 ndisc_tclass;
+	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
+	struct ctl_table_header *sysctl_header;
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+	int reachable_time;
+	int qlen;
+	int data[14];
+	long unsigned int data_state[1];
+};
+
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 *mc_list;
+	struct ifmcaddr6 *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	long unsigned int mc_v1_seen;
+	long unsigned int mc_qi;
+	long unsigned int mc_qri;
+	long unsigned int mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	long unsigned int tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	long unsigned int last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	long unsigned int last_rand;
+	struct neigh_statistics *stats;
+	struct neigh_hash_table *nht;
+	struct pneigh_entry **phash_buckets;
+};
+
+struct neigh_statistics {
+	long unsigned int allocs;
+	long unsigned int destroys;
+	long unsigned int hash_grows;
+	long unsigned int res_failed;
+	long unsigned int lookups;
+	long unsigned int hits;
+	long unsigned int rcv_probes_mcast;
+	long unsigned int rcv_probes_ucast;
+	long unsigned int periodic_gc_runs;
+	long unsigned int forced_gc_runs;
+	long unsigned int unres_discards;
+	long unsigned int table_fulls;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u8 key[0];
+};
+
+struct neigh_hash_table {
+	struct neighbour **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct fib_rule_hdr {
+	__u8 family;
+	__u8 dst_len;
+	__u8 src_len;
+	__u8 tos;
+	__u8 table;
+	__u8 res1;
+	__u8 res2;
+	__u8 action;
+	__u32 flags;
+};
+
+struct fib_rule_port_range {
+	__u16 start;
+	__u16 end;
+};
+
+struct fib_kuid_range {
+	kuid_t start;
+	kuid_t end;
+};
+
+struct fib_rule {
+	struct list_head list;
+	int iifindex;
+	int oifindex;
+	u32 mark;
+	u32 mark_mask;
+	u32 flags;
+	u32 table;
+	u8 action;
+	u8 l3mdev;
+	u8 proto;
+	u8 ip_proto;
+	u32 target;
+	__be64 tun_id;
+	struct fib_rule *ctarget;
+	struct net *fr_net;
+	refcount_t refcnt;
+	u32 pref;
+	int suppress_ifgroup;
+	int suppress_prefixlen;
+	char iifname[16];
+	char oifname[16];
+	struct fib_kuid_range uid_range;
+	struct fib_rule_port_range sport_range;
+	struct fib_rule_port_range dport_range;
+	struct callback_head rcu;
+};
+
+struct fib_lookup_arg {
+	void *lookup_ptr;
+	const void *lookup_data;
+	void *result;
+	struct fib_rule *rule;
+	u32 table;
+	int flags;
+};
+
+struct smc_hashinfo;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct udp_table;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long int);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, long unsigned int);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*keepalive)(struct sock *, int);
+	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, short unsigned int);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	int (*forward_alloc_get)(const struct sock *);
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	long unsigned int *memory_pressure;
+	long int *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog *prog;
+	struct sock *socks[0];
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct strp_stats {
+	long long unsigned int msgs;
+	long long unsigned int bytes;
+	unsigned int mem_fail;
+	unsigned int need_more_hdr;
+	unsigned int msg_too_big;
+	unsigned int msg_timeouts;
+	unsigned int bad_hdr_len;
+};
+
+struct strparser;
+
+struct strp_callbacks {
+	int (*parse_msg)(struct strparser *, struct sk_buff *);
+	void (*rcv_msg)(struct strparser *, struct sk_buff *);
+	int (*read_sock_done)(struct strparser *, int);
+	void (*abort_parser)(struct strparser *, int);
+	void (*lock)(struct strparser *);
+	void (*unlock)(struct strparser *);
+};
+
+struct strparser {
+	struct sock *sk;
+	u32 stopped: 1;
+	u32 paused: 1;
+	u32 aborted: 1;
+	u32 interrupted: 1;
+	u32 unrecov_intr: 1;
+	struct sk_buff **skb_nextp;
+	struct sk_buff *skb_head;
+	unsigned int need_bytes;
+	struct delayed_work msg_timer_work;
+	struct work_struct work;
+	struct strp_stats stats;
+	struct strp_callbacks cb;
+};
+
+struct sk_psock_work_state {
+	struct sk_buff *skb;
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct strparser strp;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	long unsigned int state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long int);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct work_struct work;
+	struct rcu_work rwork;
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list *sf_next;
+	struct in6_addr sf_addr;
+	long unsigned int sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *next;
+	struct ip6_sf_list *mca_sources;
+	struct ip6_sf_list *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	long unsigned int mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	long unsigned int mca_cstamp;
+	long unsigned int mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	long unsigned int aca_cstamp;
+	long unsigned int aca_tstamp;
+	struct callback_head rcu;
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_opts_ri;
+	struct nd_opt_hdr *nd_opts_ri_end;
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+	struct nd_opt_hdr *nd_802154_opt_array[3];
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved: 6;
+	__u8 autoconf: 1;
+	__u8 onlink: 1;
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long int interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long int rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	long unsigned int copy[1];
+	struct scatterlist data[19];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_XDP = 0,
+	BTF_KFUNC_HOOK_TC = 1,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 2,
+	BTF_KFUNC_HOOK_TRACING = 3,
+	BTF_KFUNC_HOOK_SYSCALL = 4,
+	BTF_KFUNC_HOOK_MAX = 5,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 32,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[5];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, va_list);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+enum btf_field_type {
+	BTF_FIELD_SPIN_LOCK = 0,
+	BTF_FIELD_TIMER = 1,
+	BTF_FIELD_KPTR = 2,
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+struct btf_field_info {
+	u32 type_id;
+	u32 off;
+	enum bpf_kptr_type type;
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	__u32 BPF_PROG_TYPE_LIRC_MODE2_prog;
+	u32 BPF_PROG_TYPE_LIRC_MODE2_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_LSM_prog;
+	void *BPF_PROG_TYPE_LSM_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+};
+
+enum {
+	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
+	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
+	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
+	__ctx_convertBPF_PROG_TYPE_XDP = 3,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
+	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
+	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
+	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
+	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
+	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
+	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
+	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
+	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
+	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
+	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
+	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
+	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
+	__ctx_convertBPF_PROG_TYPE_LIRC_MODE2 = 24,
+	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 25,
+	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 26,
+	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 27,
+	__ctx_convertBPF_PROG_TYPE_EXT = 28,
+	__ctx_convertBPF_PROG_TYPE_LSM = 29,
+	__ctx_convertBPF_PROG_TYPE_SYSCALL = 30,
+	__ctx_convert_unused = 31,
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
 };
 
 struct perf_event_mmap_page {
@@ -16016,12 +23049,12183 @@
 	__u64 aux_size;
 };
 
-struct perf_pmu_events_attr {
-	struct device_attribute attr;
-	u64 id;
-	const char *event_str;
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
 };
 
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long int watermark;
+	long int aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	long unsigned int mmap_locked;
+	struct user_struct *mmap_user;
+	long int aux_head;
+	unsigned int aux_nest;
+	long int aux_wakeup;
+	long unsigned int aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	long unsigned int aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct mem_section_usage {
+	long unsigned int subsection_map[1];
+	long unsigned int pageblock_flags[0];
+};
+
+struct page_ext;
+
+struct mem_section {
+	long unsigned int section_mem_map;
+	struct mem_section_usage *usage;
+	struct page_ext *page_ext;
+	long unsigned int pad;
+};
+
+struct page_ext {
+	long unsigned int flags;
+};
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_TAINT_ZONE_DEVICE_BIT = 4,
+	SECTION_MAP_LAST_BIT = 5,
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	long unsigned int num_children;
+	long unsigned int num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+struct vm_event_state {
+	long unsigned int event[109];
+};
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+};
+
+struct pagevec {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct page *pages[15];
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	long unsigned int free_pfn;
+	long unsigned int migrate_pfn;
+	long unsigned int fast_start_pfn;
+	struct zone *zone;
+	long unsigned int total_migrate_scanned;
+	long unsigned int total_free_scanned;
+	short unsigned int fast_search_fail;
+	short int search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool rescan;
+	bool alloc_contig;
+};
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	enum lru_list lru;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu *cpu_slab;
+	slab_flags_t flags;
+	long unsigned int min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	long unsigned int random;
+	unsigned int remote_node_defrag_ratio;
+	unsigned int *random_seq;
+	unsigned int useroffset;
+	unsigned int usersize;
+	struct kmem_cache_node *node[512];
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct slab {
+	long unsigned int __page_flags;
+	union {
+		struct list_head slab_list;
+		struct callback_head callback_head;
+		struct {
+			struct slab *next;
+			int slabs;
+		};
+	};
+	struct kmem_cache *slab_cache;
+	void *freelist;
+	union {
+		long unsigned int counters;
+		struct {
+			unsigned int inuse: 16;
+			unsigned int objects: 15;
+			unsigned int frozen: 1;
+		};
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	long unsigned int memcg_data;
+};
+
+struct kmem_cache_cpu {
+	void **freelist;
+	long unsigned int tid;
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	long unsigned int nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct kmalloc_info_struct {
+	const char *name[4];
+	unsigned int size;
+};
+
+struct slabinfo {
+	long unsigned int active_objs;
+	long unsigned int num_objs;
+	long unsigned int active_slabs;
+	long unsigned int num_slabs;
+	long unsigned int shared_avail;
+	unsigned int limit;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	long unsigned int kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+struct trace_event_raw_kmem_alloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_alloc_node {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	long unsigned int gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long int size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_alloc {};
+
+struct trace_event_data_offsets_kmem_alloc_node {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t);
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t);
+
+typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const char *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);
+
+typedef long unsigned int vm_flags_t;
+
+typedef struct {
+	long unsigned int val;
+} swp_entry_t;
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+typedef struct {
+	long unsigned int pd;
+} hugepd_t;
+
+typedef struct page *new_page_t(struct page *, long unsigned int);
+
+typedef void free_page_t(struct page *, long unsigned int);
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+struct page_vma_mapped_walk {
+	long unsigned int pfn;
+	long unsigned int nr_pages;
+	long unsigned int pgoff;
+	struct vm_area_struct *vma;
+	long unsigned int address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+struct hugepage_subpool {
+	spinlock_t lock;
+	long int count;
+	long int max_hpages;
+	long int used_hpages;
+	struct hstate *hstate;
+	long int min_hpages;
+	long int rsv_hpages;
+};
+
+struct hugetlbfs_sb_info {
+	long int max_inodes;
+	long int free_inodes;
+	spinlock_t stat_lock;
+	struct hstate *hstate;
+	struct hugepage_subpool *spool;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	long unsigned int xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+struct vma_swap_readahead {
+	short unsigned int win;
+	short unsigned int offset;
+	short unsigned int nr_pte;
+	pte_t *ptes;
+};
+
+struct nodemask_scratch {
+	nodemask_t mask1;
+	nodemask_t mask2;
+};
+
+enum {
+	MPOL_DEFAULT = 0,
+	MPOL_PREFERRED = 1,
+	MPOL_BIND = 2,
+	MPOL_INTERLEAVE = 3,
+	MPOL_LOCAL = 4,
+	MPOL_PREFERRED_MANY = 5,
+	MPOL_MAX = 6,
+};
+
+struct sp_node {
+	struct rb_node nd;
+	long unsigned int start;
+	long unsigned int end;
+	struct mempolicy *policy;
+};
+
+struct shared_policy {
+	struct rb_root root;
+	rwlock_t lock;
+};
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+struct mmu_table_batch {
+	struct callback_head rcu;
+	unsigned int nr;
+	void *tables[0];
+};
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct page *pages[0];
+};
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	struct mmu_table_batch *batch;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+struct mempolicy_operations {
+	int (*create)(struct mempolicy *, const nodemask_t *);
+	void (*rebind)(struct mempolicy *, const nodemask_t *);
+};
+
+struct queue_pages {
+	struct list_head *pagelist;
+	long unsigned int flags;
+	nodemask_t *nmask;
+	long unsigned int start;
+	long unsigned int end;
+	struct vm_area_struct *first;
+};
+
+typedef struct {
+	u64 val;
+} pfn_t;
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_NEVER_DAX = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_IGNORE_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+typedef int rmap_t;
+
+struct simple_xattrs {
+	struct list_head head;
+	spinlock_t lock;
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	long unsigned int flags;
+	long unsigned int alloced;
+	long unsigned int swapped;
+	long unsigned int fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct inode vfs_inode;
+};
+
+struct trace_event_raw_hugepage_set_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	long unsigned int clr;
+	long unsigned int set;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hugepage_set_pmd {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef unsigned int isolate_mode_t;
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+struct balloon_dev_info {
+	long unsigned int isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+struct damon_addr_range {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct damon_region {
+	struct damon_addr_range ar;
+	long unsigned int sampling_addr;
+	unsigned int nr_accesses;
+	struct list_head list;
+	unsigned int age;
+	unsigned int last_nr_accesses;
+};
+
+struct damon_target {
+	struct pid *pid;
+	unsigned int nr_regions;
+	struct list_head regions_list;
+	struct list_head list;
+};
+
+enum damos_action {
+	DAMOS_WILLNEED = 0,
+	DAMOS_COLD = 1,
+	DAMOS_PAGEOUT = 2,
+	DAMOS_HUGEPAGE = 3,
+	DAMOS_NOHUGEPAGE = 4,
+	DAMOS_LRU_PRIO = 5,
+	DAMOS_LRU_DEPRIO = 6,
+	DAMOS_STAT = 7,
+	NR_DAMOS_ACTIONS = 8,
+};
+
+struct damos_quota {
+	long unsigned int ms;
+	long unsigned int sz;
+	long unsigned int reset_interval;
+	unsigned int weight_sz;
+	unsigned int weight_nr_accesses;
+	unsigned int weight_age;
+	long unsigned int total_charged_sz;
+	long unsigned int total_charged_ns;
+	long unsigned int esz;
+	long unsigned int charged_sz;
+	long unsigned int charged_from;
+	struct damon_target *charge_target_from;
+	long unsigned int charge_addr_from;
+	long unsigned int histogram[100];
+	unsigned int min_score;
+};
+
+enum damos_wmark_metric {
+	DAMOS_WMARK_NONE = 0,
+	DAMOS_WMARK_FREE_MEM_RATE = 1,
+	NR_DAMOS_WMARK_METRICS = 2,
+};
+
+struct damos_watermarks {
+	enum damos_wmark_metric metric;
+	long unsigned int interval;
+	long unsigned int high;
+	long unsigned int mid;
+	long unsigned int low;
+	bool activated;
+};
+
+struct damos_stat {
+	long unsigned int nr_tried;
+	long unsigned int sz_tried;
+	long unsigned int nr_applied;
+	long unsigned int sz_applied;
+	long unsigned int qt_exceeds;
+};
+
+struct damos {
+	long unsigned int min_sz_region;
+	long unsigned int max_sz_region;
+	unsigned int min_nr_accesses;
+	unsigned int max_nr_accesses;
+	unsigned int min_age_region;
+	unsigned int max_age_region;
+	enum damos_action action;
+	struct damos_quota quota;
+	struct damos_watermarks wmarks;
+	struct damos_stat stat;
+	struct list_head list;
+};
+
+enum damon_ops_id {
+	DAMON_OPS_VADDR = 0,
+	DAMON_OPS_FVADDR = 1,
+	DAMON_OPS_PADDR = 2,
+	NR_DAMON_OPS = 3,
+};
+
+struct damon_ctx;
+
+struct damon_operations {
+	enum damon_ops_id id;
+	void (*init)(struct damon_ctx *);
+	void (*update)(struct damon_ctx *);
+	void (*prepare_access_checks)(struct damon_ctx *);
+	unsigned int (*check_accesses)(struct damon_ctx *);
+	void (*reset_aggregated)(struct damon_ctx *);
+	int (*get_scheme_score)(struct damon_ctx *, struct damon_target *, struct damon_region *, struct damos *);
+	long unsigned int (*apply_scheme)(struct damon_ctx *, struct damon_target *, struct damon_region *, struct damos *);
+	bool (*target_valid)(void *);
+	void (*cleanup)(struct damon_ctx *);
+};
+
+struct damon_callback {
+	void *private;
+	int (*before_start)(struct damon_ctx *);
+	int (*after_wmarks_check)(struct damon_ctx *);
+	int (*after_sampling)(struct damon_ctx *);
+	int (*after_aggregation)(struct damon_ctx *);
+	void (*before_terminate)(struct damon_ctx *);
+};
+
+struct damon_ctx {
+	long unsigned int sample_interval;
+	long unsigned int aggr_interval;
+	long unsigned int ops_update_interval;
+	struct timespec64 last_aggregation;
+	struct timespec64 last_ops_update;
+	struct task_struct *kdamond;
+	struct mutex kdamond_lock;
+	struct damon_operations ops;
+	struct damon_callback callback;
+	long unsigned int min_nr_regions;
+	long unsigned int max_nr_regions;
+	struct list_head adaptive_targets;
+	struct list_head schemes;
+};
+
+struct damon_young_walk_private {
+	long unsigned int *page_sz;
+	bool young;
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+typedef short unsigned int __kernel_old_uid_t;
+
+typedef short unsigned int __kernel_old_gid_t;
+
+typedef __kernel_old_uid_t old_uid_t;
+
+typedef __kernel_old_gid_t old_gid_t;
+
+struct stat {
+	long unsigned int st_dev;
+	long unsigned int st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	long unsigned int st_rdev;
+	long unsigned int __pad1;
+	long int st_size;
+	int st_blksize;
+	int __pad2;
+	long int st_blocks;
+	long int st_atime;
+	long unsigned int st_atime_nsec;
+	long int st_mtime;
+	long unsigned int st_mtime_nsec;
+	long int st_ctime;
+	long unsigned int st_ctime_nsec;
+	unsigned int __unused4;
+	unsigned int __unused5;
+};
+
+typedef u16 compat_mode_t;
+
+typedef u32 compat_ino_t;
+
+typedef s32 compat_off_t;
+
+typedef u16 compat_ushort_t;
+
+typedef u32 compat_uint_t;
+
+typedef s64 compat_s64;
+
+typedef u64 compat_u64;
+
+typedef u32 compat_dev_t;
+
+typedef u16 __compat_uid16_t;
+
+typedef u16 __compat_gid16_t;
+
+struct compat_stat {
+	compat_dev_t st_dev;
+	compat_ino_t st_ino;
+	compat_mode_t st_mode;
+	compat_ushort_t st_nlink;
+	__compat_uid16_t st_uid;
+	__compat_gid16_t st_gid;
+	compat_dev_t st_rdev;
+	compat_off_t st_size;
+	compat_off_t st_blksize;
+	compat_off_t st_blocks;
+	old_time32_t st_atime;
+	compat_ulong_t st_atime_nsec;
+	old_time32_t st_mtime;
+	compat_ulong_t st_mtime_nsec;
+	old_time32_t st_ctime;
+	compat_ulong_t st_ctime_nsec;
+	compat_ulong_t __unused4[2];
+};
+
+struct stat64 {
+	compat_u64 st_dev;
+	unsigned char __pad0[4];
+	compat_ulong_t __st_ino;
+	compat_uint_t st_mode;
+	compat_uint_t st_nlink;
+	compat_ulong_t st_uid;
+	compat_ulong_t st_gid;
+	compat_u64 st_rdev;
+	unsigned char __pad3[4];
+	compat_s64 st_size;
+	compat_ulong_t st_blksize;
+	compat_u64 st_blocks;
+	compat_ulong_t st_atime;
+	compat_ulong_t st_atime_nsec;
+	compat_ulong_t st_mtime;
+	compat_ulong_t st_mtime_nsec;
+	compat_ulong_t st_ctime;
+	compat_ulong_t st_ctime_nsec;
+	compat_u64 st_ino;
+};
+
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u64 __spare2;
+	__u64 __spare3[12];
+};
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
+};
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct fscrypt_policy_v1 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 master_key_descriptor[8];
+};
+
+struct fscrypt_policy_v2 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 __reserved[4];
+	__u8 master_key_identifier[16];
+};
+
+union fscrypt_policy {
+	u8 version;
+	struct fscrypt_policy_v1 v1;
+	struct fscrypt_policy_v2 v2;
+};
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+struct dentry_stat_t {
+	long int nr_dentry;
+	long int nr_unused;
+	long int age_limit;
+	long int want_pages;
+	long int nr_negative;
+	long int dummy;
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long int found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+typedef __kernel_rwf_t rwf_t;
+
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
+	unsigned int flags;
+	union {
+		void *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
+};
+
+struct partial_page {
+	unsigned int offset;
+	unsigned int len;
+	long unsigned int private;
+};
+
+struct splice_pipe_desc {
+	struct page **pages;
+	struct partial_page *partial;
+	int nr_pages;
+	unsigned int nr_pages_max;
+	const struct pipe_buf_operations *ops;
+	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+};
+
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+struct inotify_event {
+	__s32 wd;
+	__u32 mask;
+	__u32 cookie;
+	__u32 len;
+	char name[0];
+};
+
+typedef struct poll_table_struct poll_table;
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+typedef long unsigned int dax_entry_t;
+
+enum dax_access_mode {
+	DAX_ACCESS = 0,
+	DAX_RECOVERY_WRITE = 1,
+};
+
+struct dax_device;
+
+struct iomap_page_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_page_ops *page_ops;
+};
+
+struct iomap_page_ops {
+	int (*page_prepare)(struct inode *, loff_t, unsigned int);
+	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *);
+};
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+struct trace_event_raw_dax_pmd_fault_class {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	long unsigned int vm_flags;
+	long unsigned int address;
+	long unsigned int pgoff;
+	long unsigned int max_pgoff;
+	dev_t dev;
+	unsigned int flags;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_pmd_load_hole_class {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int vm_flags;
+	long unsigned int address;
+	struct page *zero_page;
+	void *radix_entry;
+	dev_t dev;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_pmd_insert_mapping_class {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int vm_flags;
+	long unsigned int address;
+	long int length;
+	u64 pfn_val;
+	void *radix_entry;
+	dev_t dev;
+	int write;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_pte_fault_class {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int vm_flags;
+	long unsigned int address;
+	long unsigned int pgoff;
+	dev_t dev;
+	unsigned int flags;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_insert_mapping {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int vm_flags;
+	long unsigned int address;
+	void *radix_entry;
+	dev_t dev;
+	int write;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_writeback_range_class {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int start_index;
+	long unsigned int end_index;
+	dev_t dev;
+	char __data[0];
+};
+
+struct trace_event_raw_dax_writeback_one {
+	struct trace_entry ent;
+	long unsigned int ino;
+	long unsigned int pgoff;
+	long unsigned int pglen;
+	dev_t dev;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dax_pmd_fault_class {};
+
+struct trace_event_data_offsets_dax_pmd_load_hole_class {};
+
+struct trace_event_data_offsets_dax_pmd_insert_mapping_class {};
+
+struct trace_event_data_offsets_dax_pte_fault_class {};
+
+struct trace_event_data_offsets_dax_insert_mapping {};
+
+struct trace_event_data_offsets_dax_writeback_range_class {};
+
+struct trace_event_data_offsets_dax_writeback_one {};
+
+typedef void (*btf_trace_dax_pmd_fault)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
+
+typedef void (*btf_trace_dax_pmd_fault_done)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
+
+typedef void (*btf_trace_dax_pmd_load_hole)(void *, struct inode *, struct vm_fault *, struct page *, void *);
+
+typedef void (*btf_trace_dax_pmd_load_hole_fallback)(void *, struct inode *, struct vm_fault *, struct page *, void *);
+
+typedef void (*btf_trace_dax_pmd_insert_mapping)(void *, struct inode *, struct vm_fault *, long int, pfn_t, void *);
+
+typedef void (*btf_trace_dax_pte_fault)(void *, struct inode *, struct vm_fault *, int);
+
+typedef void (*btf_trace_dax_pte_fault_done)(void *, struct inode *, struct vm_fault *, int);
+
+typedef void (*btf_trace_dax_load_hole)(void *, struct inode *, struct vm_fault *, int);
+
+typedef void (*btf_trace_dax_insert_pfn_mkwrite_no_entry)(void *, struct inode *, struct vm_fault *, int);
+
+typedef void (*btf_trace_dax_insert_pfn_mkwrite)(void *, struct inode *, struct vm_fault *, int);
+
+typedef void (*btf_trace_dax_insert_mapping)(void *, struct inode *, struct vm_fault *, void *);
+
+typedef void (*btf_trace_dax_writeback_range)(void *, struct inode *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_dax_writeback_range_done)(void *, struct inode *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_dax_writeback_one)(void *, struct inode *, long unsigned int, long unsigned int);
+
+struct exceptional_entry_key {
+	struct xarray *xa;
+	long unsigned int entry_start;
+};
+
+struct wait_exceptional_entry_queue {
+	wait_queue_entry_t wait;
+	struct exceptional_entry_key key;
+};
+
+enum dax_wake_mode {
+	WAKE_ALL = 0,
+	WAKE_NEXT = 1,
+};
+
+struct fsverity_hash_alg;
+
+struct merkle_tree_params {
+	struct fsverity_hash_alg *hash_alg;
+	const u8 *hashstate;
+	unsigned int digest_size;
+	unsigned int block_size;
+	unsigned int hashes_per_block;
+	unsigned int log_blocksize;
+	unsigned int log_arity;
+	unsigned int num_levels;
+	u64 tree_size;
+	long unsigned int level0_blocks;
+	u64 level_start[8];
+};
+
+struct fsverity_info {
+	struct merkle_tree_params tree_params;
+	u8 root_hash[64];
+	u8 file_digest[64];
+	const struct inode *inode;
+};
+
+struct crypto_ahash;
+
+struct fsverity_hash_alg {
+	struct crypto_ahash *tfm;
+	const char *name;
+	unsigned int digest_size;
+	unsigned int block_size;
+	mempool_t req_pool;
+};
+
+struct ahash_request;
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct crypto_async_request;
+
+typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct fdtable {
+	unsigned int max_fds;
+	struct file **fd;
+	long unsigned int *close_on_exec;
+	long unsigned int *open_fds;
+	long unsigned int *full_fds_bits;
+	struct callback_head rcu;
+};
+
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	long unsigned int close_on_exec_init[1];
+	long unsigned int open_fds_init[1];
+	long unsigned int full_fds_bits_init[1];
+	struct file *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_struct srcu;
+	struct notifier_block *head;
+};
+
+struct flock {
+	short int l_type;
+	short int l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct flock64 {
+	short int l_type;
+	short int l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	long unsigned int fl_break_time;
+	long unsigned int fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent *fi_extents_start;
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+typedef unsigned int uint;
+
+struct fs_disk_quota {
+	__s8 d_version;
+	__s8 d_flags;
+	__u16 d_fieldmask;
+	__u32 d_id;
+	__u64 d_blk_hardlimit;
+	__u64 d_blk_softlimit;
+	__u64 d_ino_hardlimit;
+	__u64 d_ino_softlimit;
+	__u64 d_bcount;
+	__u64 d_icount;
+	__s32 d_itimer;
+	__s32 d_btimer;
+	__u16 d_iwarns;
+	__u16 d_bwarns;
+	__s8 d_itimer_hi;
+	__s8 d_btimer_hi;
+	__s8 d_rtbtimer_hi;
+	__s8 d_padding2;
+	__u64 d_rtb_hardlimit;
+	__u64 d_rtb_softlimit;
+	__u64 d_rtbcount;
+	__s32 d_rtbtimer;
+	__u16 d_rtbwarns;
+	__s16 d_padding3;
+	char d_padding4[8];
+};
+
+struct fs_qfilestat {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+};
+
+typedef struct fs_qfilestat fs_qfilestat_t;
+
+struct fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	fs_qfilestat_t qs_uquota;
+	fs_qfilestat_t qs_gquota;
+	__u32 qs_incoredqs;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+struct fs_qfilestatv {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+	__u32 qfs_pad;
+};
+
+struct fs_quota_statv {
+	__s8 qs_version;
+	__u8 qs_pad1;
+	__u16 qs_flags;
+	__u32 qs_incoredqs;
+	struct fs_qfilestatv qs_uquota;
+	struct fs_qfilestatv qs_gquota;
+	struct fs_qfilestatv qs_pquota;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
+};
+
+enum {
+	QIF_BLIMITS_B = 0,
+	QIF_SPACE_B = 1,
+	QIF_ILIMITS_B = 2,
+	QIF_INODES_B = 3,
+	QIF_BTIME_B = 4,
+	QIF_ITIME_B = 5,
+};
+
+struct if_dqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+};
+
+struct if_nextdqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+	__u32 dqb_id;
+};
+
+struct if_dqinfo {
+	__u64 dqi_bgrace;
+	__u64 dqi_igrace;
+	__u32 dqi_flags;
+	__u32 dqi_valid;
+};
+
+typedef __kernel_uid32_t qid_t;
+
+enum {
+	_DQUOT_USAGE_ENABLED = 0,
+	_DQUOT_LIMITS_ENABLED = 1,
+	_DQUOT_SUSPENDED = 2,
+	_DQUOT_STATE_FLAGS = 3,
+};
+
+struct compat_if_dqblk {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 dqb_bsoftlimit;
+	compat_u64 dqb_curspace;
+	compat_u64 dqb_ihardlimit;
+	compat_u64 dqb_isoftlimit;
+	compat_u64 dqb_curinodes;
+	compat_u64 dqb_btime;
+	compat_u64 dqb_itime;
+	compat_uint_t dqb_valid;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+typedef u32 nlink_t;
+
+struct ctl_path {
+	const char *procname;
+};
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+struct config_group;
+
+struct config_item_type;
+
+struct config_item {
+	char *ci_name;
+	char ci_namebuf[20];
+	struct kref ci_kref;
+	struct list_head ci_entry;
+	struct config_item *ci_parent;
+	struct config_group *ci_group;
+	const struct config_item_type *ci_type;
+	struct dentry *ci_dentry;
+};
+
+struct configfs_subsystem;
+
+struct config_group {
+	struct config_item cg_item;
+	struct list_head cg_children;
+	struct configfs_subsystem *cg_subsys;
+	struct list_head default_groups;
+	struct list_head group_entry;
+};
+
+struct configfs_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_attribute;
+
+struct configfs_bin_attribute;
+
+struct config_item_type {
+	struct module *ct_owner;
+	struct configfs_item_operations *ct_item_ops;
+	struct configfs_group_operations *ct_group_ops;
+	struct configfs_attribute **ct_attrs;
+	struct configfs_bin_attribute **ct_bin_attrs;
+};
+
+struct configfs_item_operations {
+	void (*release)(struct config_item *);
+	int (*allow_link)(struct config_item *, struct config_item *);
+	void (*drop_link)(struct config_item *, struct config_item *);
+};
+
+struct configfs_group_operations {
+	struct config_item * (*make_item)(struct config_group *, const char *);
+	struct config_group * (*make_group)(struct config_group *, const char *);
+	int (*commit_item)(struct config_item *);
+	void (*disconnect_notify)(struct config_group *, struct config_item *);
+	void (*drop_item)(struct config_group *, struct config_item *);
+};
+
+struct configfs_attribute {
+	const char *ca_name;
+	struct module *ca_owner;
+	umode_t ca_mode;
+	ssize_t (*show)(struct config_item *, char *);
+	ssize_t (*store)(struct config_item *, const char *, size_t);
+};
+
+struct configfs_bin_attribute {
+	struct configfs_attribute cb_attr;
+	void *cb_private;
+	size_t cb_max_size;
+	ssize_t (*read)(struct config_item *, void *, size_t);
+	ssize_t (*write)(struct config_item *, const void *, size_t);
+};
+
+struct configfs_subsystem {
+	struct config_group su_group;
+	struct mutex su_mutex;
+};
+
+struct configfs_fragment {
+	atomic_t frag_count;
+	struct rw_semaphore frag_sem;
+	bool frag_dead;
+};
+
+struct configfs_dirent {
+	atomic_t s_count;
+	int s_dependent_count;
+	struct list_head s_sibling;
+	struct list_head s_children;
+	int s_links;
+	void *s_element;
+	int s_type;
+	umode_t s_mode;
+	struct dentry *s_dentry;
+	struct iattr *s_iattr;
+	struct configfs_fragment *s_frag;
+};
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	long unsigned int b_state;
+	struct buffer_head *b_this_page;
+	struct page *b_page;
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+struct utf8data;
+
+struct utf8data_table;
+
+struct unicode_map {
+	unsigned int version;
+	const struct utf8data *ntab[2];
+	const struct utf8data_table *tables;
+};
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+struct utf8data_table {
+	const unsigned int *utf8agetab;
+	int utf8agetab_size;
+	const struct utf8data *utf8nfdicfdata;
+	int utf8nfdicfdata_size;
+	const struct utf8data *utf8nfdidata;
+	int utf8nfdidata_size;
+	const unsigned char *utf8data;
+};
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+	long unsigned int cs_chp_time;
+	__u32 cs_forced_to_close;
+	__u32 cs_written;
+	__u32 cs_dropped;
+};
+
+struct journal_s;
+
+typedef struct journal_s journal_t;
+
+struct journal_head;
+
+struct transaction_s;
+
+typedef struct transaction_s transaction_t;
+
+struct transaction_s {
+	journal_t *t_journal;
+	tid_t t_tid;
+	enum {
+		T_RUNNING = 0,
+		T_LOCKED = 1,
+		T_SWITCH = 2,
+		T_FLUSH = 3,
+		T_COMMIT = 4,
+		T_COMMIT_DFLUSH = 5,
+		T_COMMIT_JFLUSH = 6,
+		T_COMMIT_CALLBACK = 7,
+		T_FINISHED = 8,
+	} t_state;
+	long unsigned int t_log_start;
+	int t_nr_buffers;
+	struct journal_head *t_reserved_list;
+	struct journal_head *t_buffers;
+	struct journal_head *t_forget;
+	struct journal_head *t_checkpoint_list;
+	struct journal_head *t_checkpoint_io_list;
+	struct journal_head *t_shadow_list;
+	struct list_head t_inode_list;
+	spinlock_t t_handle_lock;
+	long unsigned int t_max_wait;
+	long unsigned int t_start;
+	long unsigned int t_requested;
+	struct transaction_chp_stats_s t_chp_stats;
+	atomic_t t_updates;
+	atomic_t t_outstanding_credits;
+	atomic_t t_outstanding_revokes;
+	atomic_t t_handle_count;
+	transaction_t *t_cpnext;
+	transaction_t *t_cpprev;
+	long unsigned int t_expires;
+	ktime_t t_start_time;
+	unsigned int t_synchronous_commit: 1;
+	int t_need_data_flush;
+	struct list_head t_private_list;
+};
+
+struct jbd2_buffer_trigger_type;
+
+struct journal_head {
+	struct buffer_head *b_bh;
+	spinlock_t b_state_lock;
+	int b_jcount;
+	unsigned int b_jlist;
+	unsigned int b_modified;
+	char *b_frozen_data;
+	char *b_committed_data;
+	transaction_t *b_transaction;
+	transaction_t *b_next_transaction;
+	struct journal_head *b_tnext;
+	struct journal_head *b_tprev;
+	transaction_t *b_cp_transaction;
+	struct journal_head *b_cpnext;
+	struct journal_head *b_cpprev;
+	struct jbd2_buffer_trigger_type *b_triggers;
+	struct jbd2_buffer_trigger_type *b_frozen_triggers;
+};
+
+struct jbd2_buffer_trigger_type {
+	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
+	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
+};
+
+struct jbd2_journal_handle;
+
+typedef struct jbd2_journal_handle handle_t;
+
+struct jbd2_journal_handle {
+	union {
+		transaction_t *h_transaction;
+		journal_t *h_journal;
+	};
+	handle_t *h_rsv_handle;
+	int h_total_credits;
+	int h_revoke_credits;
+	int h_revoke_credits_requested;
+	int h_ref;
+	int h_err;
+	unsigned int h_sync: 1;
+	unsigned int h_jdata: 1;
+	unsigned int h_reserved: 1;
+	unsigned int h_aborted: 1;
+	unsigned int h_type: 8;
+	unsigned int h_line_no: 16;
+	long unsigned int h_start_jiffies;
+	unsigned int h_requested_credits;
+	unsigned int saved_alloc_context;
+};
+
+struct transaction_run_stats_s {
+	long unsigned int rs_wait;
+	long unsigned int rs_request_delay;
+	long unsigned int rs_running;
+	long unsigned int rs_locked;
+	long unsigned int rs_flushing;
+	long unsigned int rs_logging;
+	__u32 rs_handle_count;
+	__u32 rs_blocks;
+	__u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+	long unsigned int ts_tid;
+	long unsigned int ts_requested;
+	struct transaction_run_stats_s run;
+};
+
+enum passtype {
+	PASS_SCAN = 0,
+	PASS_REVOKE = 1,
+	PASS_REPLAY = 2,
+};
+
+struct journal_superblock_s;
+
+typedef struct journal_superblock_s journal_superblock_t;
+
+struct jbd2_revoke_table_s;
+
+struct jbd2_inode;
+
+struct journal_s {
+	long unsigned int j_flags;
+	long unsigned int j_atomic_flags;
+	int j_errno;
+	struct mutex j_abort_mutex;
+	struct buffer_head *j_sb_buffer;
+	journal_superblock_t *j_superblock;
+	int j_format_version;
+	rwlock_t j_state_lock;
+	int j_barrier_count;
+	struct mutex j_barrier;
+	transaction_t *j_running_transaction;
+	transaction_t *j_committing_transaction;
+	transaction_t *j_checkpoint_transactions;
+	wait_queue_head_t j_wait_transaction_locked;
+	wait_queue_head_t j_wait_done_commit;
+	wait_queue_head_t j_wait_commit;
+	wait_queue_head_t j_wait_updates;
+	wait_queue_head_t j_wait_reserved;
+	wait_queue_head_t j_fc_wait;
+	struct mutex j_checkpoint_mutex;
+	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
+	long unsigned int j_head;
+	long unsigned int j_tail;
+	long unsigned int j_free;
+	long unsigned int j_first;
+	long unsigned int j_last;
+	long unsigned int j_fc_first;
+	long unsigned int j_fc_off;
+	long unsigned int j_fc_last;
+	struct block_device *j_dev;
+	int j_blocksize;
+	long long unsigned int j_blk_offset;
+	char j_devname[56];
+	struct block_device *j_fs_dev;
+	unsigned int j_total_len;
+	atomic_t j_reserved_credits;
+	spinlock_t j_list_lock;
+	struct inode *j_inode;
+	tid_t j_tail_sequence;
+	tid_t j_transaction_sequence;
+	tid_t j_commit_sequence;
+	tid_t j_commit_request;
+	__u8 j_uuid[16];
+	struct task_struct *j_task;
+	int j_max_transaction_buffers;
+	int j_revoke_records_per_block;
+	long unsigned int j_commit_interval;
+	struct timer_list j_commit_timer;
+	spinlock_t j_revoke_lock;
+	struct jbd2_revoke_table_s *j_revoke;
+	struct jbd2_revoke_table_s *j_revoke_table[2];
+	struct buffer_head **j_wbuf;
+	struct buffer_head **j_fc_wbuf;
+	int j_wbufsize;
+	int j_fc_wbufsize;
+	pid_t j_last_sync_writer;
+	u64 j_average_commit_time;
+	u32 j_min_batch_time;
+	u32 j_max_batch_time;
+	void (*j_commit_callback)(journal_t *, transaction_t *);
+	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
+	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
+	spinlock_t j_history_lock;
+	struct proc_dir_entry *j_proc_entry;
+	struct transaction_stats_s j_stats;
+	unsigned int j_failed_commit;
+	void *j_private;
+	struct crypto_shash *j_chksum_driver;
+	__u32 j_csum_seed;
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
+	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
+};
+
+struct journal_header_s {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+};
+
+typedef struct journal_header_s journal_header_t;
+
+struct journal_superblock_s {
+	journal_header_t s_header;
+	__be32 s_blocksize;
+	__be32 s_maxlen;
+	__be32 s_first;
+	__be32 s_sequence;
+	__be32 s_start;
+	__be32 s_errno;
+	__be32 s_feature_compat;
+	__be32 s_feature_incompat;
+	__be32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	__be32 s_nr_users;
+	__be32 s_dynsuper;
+	__be32 s_max_transaction;
+	__be32 s_max_trans_data;
+	__u8 s_checksum_type;
+	__u8 s_padding2[3];
+	__be32 s_num_fc_blks;
+	__u32 s_padding[41];
+	__be32 s_checksum;
+	__u8 s_users[768];
+};
+
+enum jbd_state_bits {
+	BH_JBD = 16,
+	BH_JWrite = 17,
+	BH_Freed = 18,
+	BH_Revoked = 19,
+	BH_RevokeValid = 20,
+	BH_JBDDirty = 21,
+	BH_JournalHead = 22,
+	BH_Shadow = 23,
+	BH_Verified = 24,
+	BH_JBDPrivateStart = 25,
+};
+
+struct jbd2_inode {
+	transaction_t *i_transaction;
+	transaction_t *i_next_transaction;
+	struct list_head i_list;
+	struct inode *i_vfs_inode;
+	long unsigned int i_flags;
+	loff_t i_dirty_start;
+	loff_t i_dirty_end;
+};
+
+struct bgl_lock {
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blockgroup_lock {
+	struct bgl_lock locks[128];
+};
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+typedef int ext4_grpblk_t;
+
+typedef long long unsigned int ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+typedef unsigned int ext4_group_t;
+
+struct ext4_map_blocks {
+	ext4_fsblk_t m_pblk;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+};
+
+struct ext4_system_blocks {
+	struct rb_root root;
+	struct callback_head rcu;
+};
+
+struct flex_groups {
+	atomic64_t free_clusters;
+	atomic_t free_inodes;
+	atomic_t used_dirs;
+};
+
+enum {
+	EXT4_INODE_SECRM = 0,
+	EXT4_INODE_UNRM = 1,
+	EXT4_INODE_COMPR = 2,
+	EXT4_INODE_SYNC = 3,
+	EXT4_INODE_IMMUTABLE = 4,
+	EXT4_INODE_APPEND = 5,
+	EXT4_INODE_NODUMP = 6,
+	EXT4_INODE_NOATIME = 7,
+	EXT4_INODE_DIRTY = 8,
+	EXT4_INODE_COMPRBLK = 9,
+	EXT4_INODE_NOCOMPR = 10,
+	EXT4_INODE_ENCRYPT = 11,
+	EXT4_INODE_INDEX = 12,
+	EXT4_INODE_IMAGIC = 13,
+	EXT4_INODE_JOURNAL_DATA = 14,
+	EXT4_INODE_NOTAIL = 15,
+	EXT4_INODE_DIRSYNC = 16,
+	EXT4_INODE_TOPDIR = 17,
+	EXT4_INODE_HUGE_FILE = 18,
+	EXT4_INODE_EXTENTS = 19,
+	EXT4_INODE_VERITY = 20,
+	EXT4_INODE_EA_INODE = 21,
+	EXT4_INODE_DAX = 25,
+	EXT4_INODE_INLINE_DATA = 28,
+	EXT4_INODE_PROJINHERIT = 29,
+	EXT4_INODE_CASEFOLD = 30,
+	EXT4_INODE_RESERVED = 31,
+};
+
+struct extent_status {
+	struct rb_node rb_node;
+	ext4_lblk_t es_lblk;
+	ext4_lblk_t es_len;
+	ext4_fsblk_t es_pblk;
+};
+
+struct ext4_es_tree {
+	struct rb_root root;
+	struct extent_status *cache_es;
+};
+
+struct ext4_es_stats {
+	long unsigned int es_stats_shrunk;
+	struct percpu_counter es_stats_cache_hits;
+	struct percpu_counter es_stats_cache_misses;
+	u64 es_stats_scan_time;
+	u64 es_stats_max_scan_time;
+	struct percpu_counter es_stats_all_cnt;
+	struct percpu_counter es_stats_shk_cnt;
+};
+
+struct ext4_pending_tree {
+	struct rb_root root;
+};
+
+enum {
+	EXT4_FC_REASON_XATTR = 0,
+	EXT4_FC_REASON_CROSS_RENAME = 1,
+	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
+	EXT4_FC_REASON_NOMEM = 3,
+	EXT4_FC_REASON_SWAP_BOOT = 4,
+	EXT4_FC_REASON_RESIZE = 5,
+	EXT4_FC_REASON_RENAME_DIR = 6,
+	EXT4_FC_REASON_FALLOC_RANGE = 7,
+	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
+	EXT4_FC_REASON_MAX = 9,
+};
+
+struct ext4_fc_stats {
+	unsigned int fc_ineligible_reason_count[9];
+	long unsigned int fc_num_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_failed_commits;
+	long unsigned int fc_skipped_commits;
+	long unsigned int fc_numblks;
+	u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region {
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	int ino;
+	int len;
+};
+
+struct ext4_fc_replay_state {
+	int fc_replay_num_tags;
+	int fc_replay_expected_off;
+	int fc_current_pass;
+	int fc_cur_tag;
+	int fc_crc;
+	struct ext4_fc_alloc_region *fc_regions;
+	int fc_regions_size;
+	int fc_regions_used;
+	int fc_regions_valid;
+	int *fc_modified_inodes;
+	int fc_modified_inodes_used;
+	int fc_modified_inodes_size;
+};
+
+struct ext4_inode_info {
+	__le32 i_data[15];
+	__u32 i_dtime;
+	ext4_fsblk_t i_file_acl;
+	ext4_group_t i_block_group;
+	ext4_lblk_t i_dir_start_lookup;
+	long unsigned int i_flags;
+	struct rw_semaphore xattr_sem;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
+	struct list_head i_fc_list;
+	ext4_lblk_t i_fc_lblk_start;
+	ext4_lblk_t i_fc_lblk_len;
+	atomic_t i_fc_updates;
+	wait_queue_head_t i_fc_wait;
+	struct mutex i_fc_lock;
+	loff_t i_disksize;
+	struct rw_semaphore i_data_sem;
+	struct inode vfs_inode;
+	struct jbd2_inode *jinode;
+	spinlock_t i_raw_lock;
+	struct timespec64 i_crtime;
+	atomic_t i_prealloc_active;
+	struct list_head i_prealloc_list;
+	spinlock_t i_prealloc_lock;
+	struct ext4_es_tree i_es_tree;
+	rwlock_t i_es_lock;
+	struct list_head i_es_list;
+	unsigned int i_es_all_nr;
+	unsigned int i_es_shk_nr;
+	ext4_lblk_t i_es_shrink_lblk;
+	ext4_group_t i_last_alloc_group;
+	unsigned int i_reserved_data_blocks;
+	struct ext4_pending_tree i_pending_tree;
+	__u16 i_extra_isize;
+	u16 i_inline_off;
+	u16 i_inline_size;
+	qsize_t i_reserved_quota;
+	spinlock_t i_completed_io_lock;
+	struct list_head i_rsv_conversion_list;
+	struct work_struct i_rsv_conversion_work;
+	atomic_t i_unwritten;
+	spinlock_t i_block_reservation_lock;
+	tid_t i_sync_tid;
+	tid_t i_datasync_tid;
+	struct dquot *i_dquot[3];
+	__u32 i_csum_seed;
+	kprojid_t i_projid;
+};
+
+struct ext4_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count_lo;
+	__le32 s_r_blocks_count_lo;
+	__le32 s_free_blocks_count_lo;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_cluster_size;
+	__le32 s_blocks_per_group;
+	__le32 s_clusters_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__le16 s_reserved_gdt_blocks;
+	__u8 s_journal_uuid[16];
+	__le32 s_journal_inum;
+	__le32 s_journal_dev;
+	__le32 s_last_orphan;
+	__le32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_jnl_backup_type;
+	__le16 s_desc_size;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__le32 s_mkfs_time;
+	__le32 s_jnl_blocks[17];
+	__le32 s_blocks_count_hi;
+	__le32 s_r_blocks_count_hi;
+	__le32 s_free_blocks_count_hi;
+	__le16 s_min_extra_isize;
+	__le16 s_want_extra_isize;
+	__le32 s_flags;
+	__le16 s_raid_stride;
+	__le16 s_mmp_update_interval;
+	__le64 s_mmp_block;
+	__le32 s_raid_stripe_width;
+	__u8 s_log_groups_per_flex;
+	__u8 s_checksum_type;
+	__u8 s_encryption_level;
+	__u8 s_reserved_pad;
+	__le64 s_kbytes_written;
+	__le32 s_snapshot_inum;
+	__le32 s_snapshot_id;
+	__le64 s_snapshot_r_blocks_count;
+	__le32 s_snapshot_list;
+	__le32 s_error_count;
+	__le32 s_first_error_time;
+	__le32 s_first_error_ino;
+	__le64 s_first_error_block;
+	__u8 s_first_error_func[32];
+	__le32 s_first_error_line;
+	__le32 s_last_error_time;
+	__le32 s_last_error_ino;
+	__le32 s_last_error_line;
+	__le64 s_last_error_block;
+	__u8 s_last_error_func[32];
+	__u8 s_mount_opts[64];
+	__le32 s_usr_quota_inum;
+	__le32 s_grp_quota_inum;
+	__le32 s_overhead_clusters;
+	__le32 s_backup_bgs[2];
+	__u8 s_encrypt_algos[4];
+	__u8 s_encrypt_pw_salt[16];
+	__le32 s_lpf_ino;
+	__le32 s_prj_quota_inum;
+	__le32 s_checksum_seed;
+	__u8 s_wtime_hi;
+	__u8 s_mtime_hi;
+	__u8 s_mkfs_time_hi;
+	__u8 s_lastcheck_hi;
+	__u8 s_first_error_time_hi;
+	__u8 s_last_error_time_hi;
+	__u8 s_first_error_errcode;
+	__u8 s_last_error_errcode;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
+	__le32 s_checksum;
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
+struct mb_cache;
+
+struct ext4_group_info;
+
+struct ext4_locality_group;
+
+struct ext4_li_request;
+
+struct ext4_sb_info {
+	long unsigned int s_desc_size;
+	long unsigned int s_inodes_per_block;
+	long unsigned int s_blocks_per_group;
+	long unsigned int s_clusters_per_group;
+	long unsigned int s_inodes_per_group;
+	long unsigned int s_itb_per_group;
+	long unsigned int s_gdb_count;
+	long unsigned int s_desc_per_block;
+	ext4_group_t s_groups_count;
+	ext4_group_t s_blockfile_groups;
+	long unsigned int s_overhead;
+	unsigned int s_cluster_ratio;
+	unsigned int s_cluster_bits;
+	loff_t s_bitmap_maxbytes;
+	struct buffer_head *s_sbh;
+	struct ext4_super_block *s_es;
+	struct buffer_head **s_group_desc;
+	unsigned int s_mount_opt;
+	unsigned int s_mount_opt2;
+	long unsigned int s_mount_flags;
+	unsigned int s_def_mount_opt;
+	ext4_fsblk_t s_sb_block;
+	atomic64_t s_resv_clusters;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	short unsigned int s_mount_state;
+	short unsigned int s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_inode_goal;
+	u32 s_hash_seed[4];
+	int s_def_hash_version;
+	int s_hash_unsigned;
+	struct percpu_counter s_freeclusters_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
+	struct blockgroup_lock *s_blockgroup_lock;
+	struct proc_dir_entry *s_proc;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
+	struct journal_s *s_journal;
+	long unsigned int s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
+	long unsigned int s_commit_interval;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	struct block_device *s_journal_bdev;
+	char *s_qf_names[3];
+	int s_jquota_fmt;
+	unsigned int s_want_extra_isize;
+	struct ext4_system_blocks *s_system_blks;
+	struct ext4_group_info ***s_group_info;
+	struct inode *s_buddy_cache;
+	spinlock_t s_md_lock;
+	short unsigned int *s_mb_offsets;
+	unsigned int *s_mb_maxs;
+	unsigned int s_group_info_size;
+	unsigned int s_mb_free_pending;
+	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct list_head *s_mb_avg_fragment_size;
+	rwlock_t *s_mb_avg_fragment_size_locks;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
+	long unsigned int s_stripe;
+	unsigned int s_mb_max_linear_groups;
+	unsigned int s_mb_stream_request;
+	unsigned int s_mb_max_to_scan;
+	unsigned int s_mb_min_to_scan;
+	unsigned int s_mb_stats;
+	unsigned int s_mb_order2_reqs;
+	unsigned int s_mb_group_prealloc;
+	unsigned int s_mb_max_inode_prealloc;
+	unsigned int s_max_dir_size_kb;
+	long unsigned int s_mb_last_group;
+	long unsigned int s_mb_last_start;
+	unsigned int s_mb_prefetch;
+	unsigned int s_mb_prefetch_limit;
+	atomic_t s_bal_reqs;
+	atomic_t s_bal_success;
+	atomic_t s_bal_allocated;
+	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_groups_scanned;
+	atomic_t s_bal_goals;
+	atomic_t s_bal_breaks;
+	atomic_t s_bal_2orders;
+	atomic_t s_bal_cr0_bad_suggestions;
+	atomic_t s_bal_cr1_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[4];
+	atomic64_t s_bal_cX_hits[4];
+	atomic64_t s_bal_cX_failed[4];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
+	atomic_t s_mb_lost_chunks;
+	atomic_t s_mb_preallocated;
+	atomic_t s_mb_discarded;
+	atomic_t s_lock_busy;
+	struct ext4_locality_group *s_locality_groups;
+	long unsigned int s_sectors_written_start;
+	u64 s_kbytes_written;
+	unsigned int s_extent_max_zeroout_kb;
+	unsigned int s_log_groups_per_flex;
+	struct flex_groups **s_flex_groups;
+	ext4_group_t s_flex_groups_allocated;
+	struct workqueue_struct *rsv_conversion_wq;
+	struct timer_list s_err_report;
+	struct ext4_li_request *s_li_request;
+	unsigned int s_li_wait_mult;
+	struct task_struct *s_mmp_tsk;
+	long unsigned int s_last_trim_minblks;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_csum_seed;
+	struct shrinker s_es_shrinker;
+	struct list_head s_es_list;
+	long int s_es_nr_inode;
+	struct ext4_es_stats s_es_stats;
+	struct mb_cache *s_ea_block_cache;
+	struct mb_cache *s_ea_inode_cache;
+	long: 64;
+	long: 64;
+	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
+	struct ratelimit_state s_err_ratelimit_state;
+	struct ratelimit_state s_warning_ratelimit_state;
+	struct ratelimit_state s_msg_ratelimit_state;
+	atomic_t s_warning_count;
+	atomic_t s_msg_count;
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+	struct percpu_rw_semaphore s_writepages_rwsem;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+	errseq_t s_bdev_wb_err;
+	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_error_work;
+	atomic_t s_fc_subtid;
+	struct list_head s_fc_q[2];
+	struct list_head s_fc_dentry_q[2];
+	unsigned int s_fc_bytes;
+	spinlock_t s_fc_lock;
+	struct buffer_head *s_fc_bh;
+	struct ext4_fc_stats s_fc_stats;
+	tid_t s_fc_ineligible_tid;
+	struct ext4_fc_replay_state s_fc_replay_state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ext4_group_info {
+	long unsigned int bb_state;
+	struct rb_root bb_free_root;
+	ext4_grpblk_t bb_first_free;
+	ext4_grpblk_t bb_free;
+	ext4_grpblk_t bb_fragments;
+	int bb_avg_fragment_size_order;
+	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
+	struct list_head bb_prealloc_list;
+	struct rw_semaphore alloc_sem;
+	struct list_head bb_avg_fragment_size_node;
+	struct list_head bb_largest_free_order_node;
+	ext4_grpblk_t bb_counters[0];
+};
+
+enum ext4_li_mode {
+	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+	EXT4_LI_MODE_ITABLE = 1,
+};
+
+struct ext4_li_request {
+	struct super_block *lr_super;
+	enum ext4_li_mode lr_mode;
+	ext4_group_t lr_first_not_zeroed;
+	ext4_group_t lr_next_group;
+	struct list_head lr_request;
+	long unsigned int lr_next_sched;
+	long unsigned int lr_timeout;
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
+struct ext4_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[255];
+};
+
+struct fname;
+
+struct dir_private_info {
+	struct rb_root root;
+	struct rb_node *curr_node;
+	struct fname *extra_fname;
+	loff_t last_pos;
+	__u32 curr_hash;
+	__u32 curr_minor_hash;
+	__u32 next_hash;
+};
+
+struct fname {
+	__u32 hash;
+	__u32 minor_hash;
+	struct rb_node rb_hash;
+	struct fname *next;
+	__u32 inode;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
+};
+
+struct dx_hash_info {
+	u32 hash;
+	u32 minor_hash;
+	int hash_version;
+	u32 *seed;
+};
+
+struct fstrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 minlen;
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_DEF_MAX_SECTORS = 2560,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+struct ext4_allocation_request {
+	struct inode *inode;
+	unsigned int len;
+	ext4_lblk_t logical;
+	ext4_lblk_t lleft;
+	ext4_lblk_t lright;
+	ext4_fsblk_t goal;
+	ext4_fsblk_t pleft;
+	ext4_fsblk_t pright;
+	unsigned int flags;
+};
+
+struct ext4_group_desc {
+	__le32 bg_block_bitmap_lo;
+	__le32 bg_inode_bitmap_lo;
+	__le32 bg_inode_table_lo;
+	__le16 bg_free_blocks_count_lo;
+	__le16 bg_free_inodes_count_lo;
+	__le16 bg_used_dirs_count_lo;
+	__le16 bg_flags;
+	__le32 bg_exclude_bitmap_lo;
+	__le16 bg_block_bitmap_csum_lo;
+	__le16 bg_inode_bitmap_csum_lo;
+	__le16 bg_itable_unused_lo;
+	__le16 bg_checksum;
+	__le32 bg_block_bitmap_hi;
+	__le32 bg_inode_bitmap_hi;
+	__le32 bg_inode_table_hi;
+	__le16 bg_free_blocks_count_hi;
+	__le16 bg_free_inodes_count_hi;
+	__le16 bg_used_dirs_count_hi;
+	__le16 bg_itable_unused_hi;
+	__le32 bg_exclude_bitmap_hi;
+	__le16 bg_block_bitmap_csum_hi;
+	__le16 bg_inode_bitmap_csum_hi;
+	__u32 bg_reserved;
+};
+
+struct ext4_locality_group {
+	struct mutex lg_mutex;
+	struct list_head lg_prealloc_list[10];
+	spinlock_t lg_prealloc_lock;
+};
+
+struct ext4_free_data {
+	struct list_head efd_list;
+	struct rb_node efd_node;
+	ext4_group_t efd_group;
+	ext4_grpblk_t efd_start_cluster;
+	ext4_grpblk_t efd_count;
+	tid_t efd_tid;
+};
+
+struct ext4_prealloc_space {
+	struct list_head pa_inode_list;
+	struct list_head pa_group_list;
+	union {
+		struct list_head pa_tmp_list;
+		struct callback_head pa_rcu;
+	} u;
+	spinlock_t pa_lock;
+	atomic_t pa_count;
+	unsigned int pa_deleted;
+	ext4_fsblk_t pa_pstart;
+	ext4_lblk_t pa_lstart;
+	ext4_grpblk_t pa_len;
+	ext4_grpblk_t pa_free;
+	short unsigned int pa_type;
+	spinlock_t *pa_obj_lock;
+	struct inode *pa_inode;
+};
+
+enum {
+	MB_INODE_PA = 0,
+	MB_GROUP_PA = 1,
+};
+
+struct ext4_free_extent {
+	ext4_lblk_t fe_logical;
+	ext4_grpblk_t fe_start;
+	ext4_group_t fe_group;
+	ext4_grpblk_t fe_len;
+};
+
+struct ext4_allocation_context {
+	struct inode *ac_inode;
+	struct super_block *ac_sb;
+	struct ext4_free_extent ac_o_ex;
+	struct ext4_free_extent ac_g_ex;
+	struct ext4_free_extent ac_b_ex;
+	struct ext4_free_extent ac_f_ex;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
+	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
+	__u16 ac_found;
+	__u16 ac_tail;
+	__u16 ac_buddy;
+	__u8 ac_status;
+	__u8 ac_criteria;
+	__u8 ac_2order;
+	__u8 ac_op;
+	struct page *ac_bitmap_page;
+	struct page *ac_buddy_page;
+	struct ext4_prealloc_space *ac_pa;
+	struct ext4_locality_group *ac_lg;
+};
+
+struct ext4_buddy {
+	struct page *bd_buddy_page;
+	void *bd_buddy;
+	struct page *bd_bitmap_page;
+	void *bd_bitmap;
+	struct ext4_group_info *bd_info;
+	struct super_block *bd_sb;
+	__u16 bd_blkbits;
+	ext4_group_t bd_group;
+};
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+struct sg {
+	struct ext4_group_info info;
+	ext4_grpblk_t counters[18];
+};
+
+struct posix_acl_entry {
+	short int e_tag;
+	short unsigned int e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext4_acl_entry;
+
+typedef struct {
+	__le32 a_version;
+} ext4_acl_header;
+
+struct commit_header {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+	unsigned char h_chksum_type;
+	unsigned char h_chksum_size;
+	unsigned char h_padding[2];
+	__be32 h_chksum[8];
+	__be64 h_commit_sec;
+	__be32 h_commit_nsec;
+};
+
+struct journal_block_tag3_s {
+	__be32 t_blocknr;
+	__be32 t_flags;
+	__be32 t_blocknr_high;
+	__be32 t_checksum;
+};
+
+typedef struct journal_block_tag3_s journal_block_tag3_t;
+
+struct journal_block_tag_s {
+	__be32 t_blocknr;
+	__be16 t_checksum;
+	__be16 t_flags;
+	__be32 t_blocknr_high;
+};
+
+typedef struct journal_block_tag_s journal_block_tag_t;
+
+struct jbd2_journal_block_tail {
+	__be32 t_checksum;
+};
+
+struct jbd2_journal_revoke_header_s {
+	journal_header_t r_header;
+	__be32 r_count;
+};
+
+typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+
+struct recovery_info {
+	tid_t start_transaction;
+	tid_t end_transaction;
+	int nr_replays;
+	int nr_revokes;
+	int nr_revoke_hits;
+};
+
+struct utf8cursor {
+	const struct unicode_map *um;
+	enum utf8_normalization n;
+	const char *s;
+	const char *p;
+	const char *ss;
+	const char *sp;
+	unsigned int len;
+	unsigned int slen;
+	short int ccc;
+	short int nccc;
+	unsigned char hangul[12];
+};
+
+typedef const unsigned char utf8trie_t;
+
+typedef const unsigned char utf8leaf_t;
+
+typedef unsigned int autofs_wqt_t;
+
+struct autofs_packet_hdr {
+	int proto_version;
+	int type;
+};
+
+struct autofs_packet_expire {
+	struct autofs_packet_hdr hdr;
+	int len;
+	char name[256];
+};
+
+enum autofs_notify {
+	NFY_NONE = 0,
+	NFY_MOUNT = 1,
+	NFY_EXPIRE = 2,
+};
+
+struct autofs_sb_info;
+
+struct autofs_info {
+	struct dentry *dentry;
+	int flags;
+	struct completion expire_complete;
+	struct list_head active;
+	struct list_head expiring;
+	struct autofs_sb_info *sbi;
+	long unsigned int last_used;
+	int count;
+	kuid_t uid;
+	kgid_t gid;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue;
+
+struct autofs_sb_info {
+	u32 magic;
+	int pipefd;
+	struct file *pipe;
+	struct pid *oz_pgrp;
+	int version;
+	int sub_version;
+	int min_proto;
+	int max_proto;
+	unsigned int flags;
+	long unsigned int exp_timeout;
+	unsigned int type;
+	struct super_block *sb;
+	struct mutex wq_mutex;
+	struct mutex pipe_mutex;
+	spinlock_t fs_lock;
+	struct autofs_wait_queue *queues;
+	spinlock_t lookup_lock;
+	struct list_head active_list;
+	struct list_head expiring_list;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue {
+	wait_queue_head_t queue;
+	struct autofs_wait_queue *next;
+	autofs_wqt_t wait_queue_token;
+	struct qstr name;
+	u32 offset;
+	u32 dev;
+	u64 ino;
+	kuid_t uid;
+	kgid_t gid;
+	pid_t pid;
+	pid_t tgid;
+	int status;
+	unsigned int wait_ctr;
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+struct btrfs_scrub_progress {
+	__u64 data_extents_scrubbed;
+	__u64 tree_extents_scrubbed;
+	__u64 data_bytes_scrubbed;
+	__u64 tree_bytes_scrubbed;
+	__u64 read_errors;
+	__u64 csum_errors;
+	__u64 verify_errors;
+	__u64 no_csum;
+	__u64 csum_discards;
+	__u64 super_errors;
+	__u64 malloc_errors;
+	__u64 uncorrectable_errors;
+	__u64 corrected_errors;
+	__u64 last_physical;
+	__u64 unverified_errors;
+};
+
+struct btrfs_disk_key {
+	__le64 objectid;
+	__u8 type;
+	__le64 offset;
+} __attribute__((packed));
+
+struct btrfs_key {
+	__u64 objectid;
+	__u8 type;
+	__u64 offset;
+} __attribute__((packed));
+
+struct btrfs_dev_item {
+	__le64 devid;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le32 io_align;
+	__le32 io_width;
+	__le32 sector_size;
+	__le64 type;
+	__le64 generation;
+	__le64 start_offset;
+	__le32 dev_group;
+	__u8 seek_speed;
+	__u8 bandwidth;
+	__u8 uuid[16];
+	__u8 fsid[16];
+} __attribute__((packed));
+
+struct btrfs_stripe {
+	__le64 devid;
+	__le64 offset;
+	__u8 dev_uuid[16];
+};
+
+struct btrfs_chunk {
+	__le64 length;
+	__le64 owner;
+	__le64 stripe_len;
+	__le64 type;
+	__le32 io_align;
+	__le32 io_width;
+	__le32 sector_size;
+	__le16 num_stripes;
+	__le16 sub_stripes;
+	struct btrfs_stripe stripe;
+};
+
+struct btrfs_extent_item {
+	__le64 refs;
+	__le64 generation;
+	__le64 flags;
+};
+
+struct btrfs_tree_block_info {
+	struct btrfs_disk_key key;
+	__u8 level;
+} __attribute__((packed));
+
+struct btrfs_extent_data_ref {
+	__le64 root;
+	__le64 objectid;
+	__le64 offset;
+	__le32 count;
+} __attribute__((packed));
+
+struct btrfs_shared_data_ref {
+	__le32 count;
+};
+
+struct btrfs_extent_inline_ref {
+	__u8 type;
+	__le64 offset;
+} __attribute__((packed));
+
+struct btrfs_dev_extent {
+	__le64 chunk_tree;
+	__le64 chunk_objectid;
+	__le64 chunk_offset;
+	__le64 length;
+	__u8 chunk_tree_uuid[16];
+};
+
+struct btrfs_timespec {
+	__le64 sec;
+	__le32 nsec;
+} __attribute__((packed));
+
+struct btrfs_inode_item {
+	__le64 generation;
+	__le64 transid;
+	__le64 size;
+	__le64 nbytes;
+	__le64 block_group;
+	__le32 nlink;
+	__le32 uid;
+	__le32 gid;
+	__le32 mode;
+	__le64 rdev;
+	__le64 flags;
+	__le64 sequence;
+	__le64 reserved[4];
+	struct btrfs_timespec atime;
+	struct btrfs_timespec ctime;
+	struct btrfs_timespec mtime;
+	struct btrfs_timespec otime;
+} __attribute__((packed));
+
+struct btrfs_dir_item {
+	struct btrfs_disk_key location;
+	__le64 transid;
+	__le16 data_len;
+	__le16 name_len;
+	__u8 type;
+} __attribute__((packed));
+
+struct btrfs_root_item {
+	struct btrfs_inode_item inode;
+	__le64 generation;
+	__le64 root_dirid;
+	__le64 bytenr;
+	__le64 byte_limit;
+	__le64 bytes_used;
+	__le64 last_snapshot;
+	__le64 flags;
+	__le32 refs;
+	struct btrfs_disk_key drop_progress;
+	__u8 drop_level;
+	__u8 level;
+	__le64 generation_v2;
+	__u8 uuid[16];
+	__u8 parent_uuid[16];
+	__u8 received_uuid[16];
+	__le64 ctransid;
+	__le64 otransid;
+	__le64 stransid;
+	__le64 rtransid;
+	struct btrfs_timespec ctime;
+	struct btrfs_timespec otime;
+	struct btrfs_timespec stime;
+	struct btrfs_timespec rtime;
+	__le64 reserved[8];
+} __attribute__((packed));
+
+enum {
+	BTRFS_FILE_EXTENT_INLINE = 0,
+	BTRFS_FILE_EXTENT_REG = 1,
+	BTRFS_FILE_EXTENT_PREALLOC = 2,
+	BTRFS_NR_FILE_EXTENT_TYPES = 3,
+};
+
+struct btrfs_file_extent_item {
+	__le64 generation;
+	__le64 ram_bytes;
+	__u8 compression;
+	__u8 encryption;
+	__le16 other_encoding;
+	__u8 type;
+	__le64 disk_bytenr;
+	__le64 disk_num_bytes;
+	__le64 offset;
+	__le64 num_bytes;
+} __attribute__((packed));
+
+struct btrfs_block_group_item {
+	__le64 used;
+	__le64 chunk_objectid;
+	__le64 flags;
+};
+
+struct btrfs_fs_info;
+
+struct extent_io_tree {
+	struct rb_root state;
+	struct btrfs_fs_info *fs_info;
+	void *private_data;
+	u64 dirty_bytes;
+	bool track_uptodate;
+	u8 owner;
+	spinlock_t lock;
+};
+
+struct extent_map_tree {
+	struct rb_root_cached map;
+	struct list_head modified_extents;
+	rwlock_t lock;
+};
+
+enum btrfs_rsv_type {
+	BTRFS_BLOCK_RSV_GLOBAL = 0,
+	BTRFS_BLOCK_RSV_DELALLOC = 1,
+	BTRFS_BLOCK_RSV_TRANS = 2,
+	BTRFS_BLOCK_RSV_CHUNK = 3,
+	BTRFS_BLOCK_RSV_DELOPS = 4,
+	BTRFS_BLOCK_RSV_DELREFS = 5,
+	BTRFS_BLOCK_RSV_EMPTY = 6,
+	BTRFS_BLOCK_RSV_TEMP = 7,
+};
+
+struct btrfs_space_info;
+
+struct btrfs_block_rsv {
+	u64 size;
+	u64 reserved;
+	struct btrfs_space_info *space_info;
+	spinlock_t lock;
+	bool full;
+	bool failfast;
+	enum btrfs_rsv_type type: 8;
+	u64 qgroup_rsv_size;
+	u64 qgroup_rsv_reserved;
+};
+
+struct btrfs_block_group;
+
+struct btrfs_free_cluster {
+	spinlock_t lock;
+	spinlock_t refill_lock;
+	struct rb_root root;
+	u64 max_size;
+	u64 window_start;
+	bool fragmented;
+	struct btrfs_block_group *block_group;
+	struct list_head block_group_list;
+};
+
+struct btrfs_discard_ctl {
+	struct workqueue_struct *discard_workers;
+	struct delayed_work work;
+	spinlock_t lock;
+	struct btrfs_block_group *block_group;
+	struct list_head discard_list[3];
+	u64 prev_discard;
+	u64 prev_discard_time;
+	atomic_t discardable_extents;
+	atomic64_t discardable_bytes;
+	u64 max_discard_size;
+	u64 delay_ms;
+	u32 iops_limit;
+	u32 kbps_limit;
+	u64 discard_extent_bytes;
+	u64 discard_bitmap_bytes;
+	atomic64_t discard_bytes_saved;
+};
+
+struct btrfs_work;
+
+typedef void (*btrfs_func_t)(struct btrfs_work *);
+
+struct btrfs_workqueue;
+
+struct btrfs_work {
+	btrfs_func_t func;
+	btrfs_func_t ordered_func;
+	btrfs_func_t ordered_free;
+	struct work_struct normal_work;
+	struct list_head ordered_list;
+	struct btrfs_workqueue *wq;
+	long unsigned int flags;
+};
+
+struct btrfs_device;
+
+struct btrfs_dev_replace {
+	u64 replace_state;
+	time64_t time_started;
+	time64_t time_stopped;
+	atomic64_t num_write_errors;
+	atomic64_t num_uncorrectable_read_errors;
+	u64 cursor_left;
+	u64 committed_cursor_left;
+	u64 cursor_left_last_write_of_item;
+	u64 cursor_right;
+	u64 cont_reading_from_srcdev_mode;
+	int is_valid;
+	int item_needs_writeback;
+	struct btrfs_device *srcdev;
+	struct btrfs_device *tgtdev;
+	struct mutex lock_finishing_cancel_unmount;
+	struct rw_semaphore rwsem;
+	struct btrfs_scrub_progress scrub_progress;
+	struct percpu_counter bio_counter;
+	wait_queue_head_t replace_wait;
+};
+
+enum btrfs_exclusive_operation {
+	BTRFS_EXCLOP_NONE = 0,
+	BTRFS_EXCLOP_BALANCE_PAUSED = 1,
+	BTRFS_EXCLOP_BALANCE = 2,
+	BTRFS_EXCLOP_DEV_ADD = 3,
+	BTRFS_EXCLOP_DEV_REMOVE = 4,
+	BTRFS_EXCLOP_DEV_REPLACE = 5,
+	BTRFS_EXCLOP_RESIZE = 6,
+	BTRFS_EXCLOP_SWAP_ACTIVATE = 7,
+};
+
+struct btrfs_commit_stats {
+	u64 commit_count;
+	u64 max_commit_dur;
+	u64 last_commit_dur;
+	u64 total_commit_dur;
+};
+
+struct btrfs_root;
+
+struct btrfs_transaction;
+
+struct btrfs_super_block;
+
+struct btrfs_stripe_hash_table;
+
+struct btrfs_fs_devices;
+
+struct reloc_control;
+
+struct btrfs_balance_control;
+
+struct btrfs_subpage_info;
+
+struct ulist;
+
+struct btrfs_delayed_root;
+
+struct btrfs_fs_info {
+	u8 chunk_tree_uuid[16];
+	long unsigned int flags;
+	struct btrfs_root *tree_root;
+	struct btrfs_root *chunk_root;
+	struct btrfs_root *dev_root;
+	struct btrfs_root *fs_root;
+	struct btrfs_root *quota_root;
+	struct btrfs_root *uuid_root;
+	struct btrfs_root *data_reloc_root;
+	struct btrfs_root *block_group_root;
+	struct btrfs_root *log_root_tree;
+	rwlock_t global_root_lock;
+	struct rb_root global_root_tree;
+	spinlock_t fs_roots_radix_lock;
+	struct xarray fs_roots_radix;
+	rwlock_t block_group_cache_lock;
+	struct rb_root_cached block_group_cache_tree;
+	atomic64_t free_chunk_space;
+	struct extent_io_tree excluded_extents;
+	struct extent_map_tree mapping_tree;
+	struct btrfs_block_rsv global_block_rsv;
+	struct btrfs_block_rsv trans_block_rsv;
+	struct btrfs_block_rsv chunk_block_rsv;
+	struct btrfs_block_rsv delayed_block_rsv;
+	struct btrfs_block_rsv delayed_refs_rsv;
+	struct btrfs_block_rsv empty_block_rsv;
+	u64 generation;
+	u64 last_trans_committed;
+	u64 last_reloc_trans;
+	u64 avg_delayed_ref_runtime;
+	u64 last_trans_log_full_commit;
+	long unsigned int mount_opt;
+	long unsigned int pending_changes;
+	long unsigned int compress_type: 4;
+	unsigned int compress_level;
+	u32 commit_interval;
+	u64 max_inline;
+	struct btrfs_transaction *running_transaction;
+	wait_queue_head_t transaction_throttle;
+	wait_queue_head_t transaction_wait;
+	wait_queue_head_t transaction_blocked_wait;
+	wait_queue_head_t async_submit_wait;
+	spinlock_t super_lock;
+	struct btrfs_super_block *super_copy;
+	struct btrfs_super_block *super_for_commit;
+	struct super_block *sb;
+	struct inode *btree_inode;
+	struct mutex tree_log_mutex;
+	struct mutex transaction_kthread_mutex;
+	struct mutex cleaner_mutex;
+	struct mutex chunk_mutex;
+	struct mutex ro_block_group_mutex;
+	struct btrfs_stripe_hash_table *stripe_hash_table;
+	struct mutex ordered_operations_mutex;
+	struct rw_semaphore commit_root_sem;
+	struct rw_semaphore cleanup_work_sem;
+	struct rw_semaphore subvol_sem;
+	spinlock_t trans_lock;
+	struct mutex reloc_mutex;
+	struct list_head trans_list;
+	struct list_head dead_roots;
+	struct list_head caching_block_groups;
+	spinlock_t delayed_iput_lock;
+	struct list_head delayed_iputs;
+	atomic_t nr_delayed_iputs;
+	wait_queue_head_t delayed_iputs_wait;
+	atomic64_t tree_mod_seq;
+	rwlock_t tree_mod_log_lock;
+	struct rb_root tree_mod_log;
+	struct list_head tree_mod_seq_list;
+	atomic_t async_delalloc_pages;
+	spinlock_t ordered_root_lock;
+	struct list_head ordered_roots;
+	struct mutex delalloc_root_mutex;
+	spinlock_t delalloc_root_lock;
+	struct list_head delalloc_roots;
+	struct btrfs_workqueue *workers;
+	struct btrfs_workqueue *hipri_workers;
+	struct btrfs_workqueue *delalloc_workers;
+	struct btrfs_workqueue *flush_workers;
+	struct workqueue_struct *endio_workers;
+	struct workqueue_struct *endio_meta_workers;
+	struct workqueue_struct *endio_raid56_workers;
+	struct workqueue_struct *rmw_workers;
+	struct workqueue_struct *compressed_write_workers;
+	struct btrfs_workqueue *endio_write_workers;
+	struct btrfs_workqueue *endio_freespace_worker;
+	struct btrfs_workqueue *caching_workers;
+	struct btrfs_workqueue *fixup_workers;
+	struct btrfs_workqueue *delayed_workers;
+	struct task_struct *transaction_kthread;
+	struct task_struct *cleaner_kthread;
+	u32 thread_pool_size;
+	struct kobject *space_info_kobj;
+	struct kobject *qgroups_kobj;
+	struct percpu_counter dirty_metadata_bytes;
+	struct percpu_counter delalloc_bytes;
+	struct percpu_counter ordered_bytes;
+	s32 dirty_metadata_batch;
+	s32 delalloc_batch;
+	struct list_head dirty_cowonly_roots;
+	struct btrfs_fs_devices *fs_devices;
+	struct list_head space_info;
+	struct btrfs_space_info *data_sinfo;
+	struct reloc_control *reloc_ctl;
+	struct btrfs_free_cluster data_alloc_cluster;
+	struct btrfs_free_cluster meta_alloc_cluster;
+	spinlock_t defrag_inodes_lock;
+	struct rb_root defrag_inodes;
+	atomic_t defrag_running;
+	seqlock_t profiles_lock;
+	u64 avail_data_alloc_bits;
+	u64 avail_metadata_alloc_bits;
+	u64 avail_system_alloc_bits;
+	spinlock_t balance_lock;
+	struct mutex balance_mutex;
+	atomic_t balance_pause_req;
+	atomic_t balance_cancel_req;
+	struct btrfs_balance_control *balance_ctl;
+	wait_queue_head_t balance_wait_q;
+	atomic_t reloc_cancel_req;
+	u32 data_chunk_allocations;
+	u32 metadata_ratio;
+	void *bdev_holder;
+	struct mutex scrub_lock;
+	atomic_t scrubs_running;
+	atomic_t scrub_pause_req;
+	atomic_t scrubs_paused;
+	atomic_t scrub_cancel_req;
+	wait_queue_head_t scrub_pause_wait;
+	refcount_t scrub_workers_refcnt;
+	struct workqueue_struct *scrub_workers;
+	struct workqueue_struct *scrub_wr_completion_workers;
+	struct workqueue_struct *scrub_parity_workers;
+	struct btrfs_subpage_info *subpage_info;
+	struct btrfs_discard_ctl discard_ctl;
+	u64 qgroup_flags;
+	struct rb_root qgroup_tree;
+	spinlock_t qgroup_lock;
+	struct ulist *qgroup_ulist;
+	struct mutex qgroup_ioctl_lock;
+	struct list_head dirty_qgroups;
+	u64 qgroup_seq;
+	struct mutex qgroup_rescan_lock;
+	struct btrfs_key qgroup_rescan_progress;
+	struct btrfs_workqueue *qgroup_rescan_workers;
+	struct completion qgroup_rescan_completion;
+	struct btrfs_work qgroup_rescan_work;
+	bool qgroup_rescan_running;
+	long unsigned int fs_state;
+	struct btrfs_delayed_root *delayed_root;
+	spinlock_t buffer_lock;
+	struct xarray buffer_radix;
+	int backup_root_index;
+	struct btrfs_dev_replace dev_replace;
+	struct semaphore uuid_tree_rescan_sem;
+	struct work_struct async_reclaim_work;
+	struct work_struct async_data_reclaim_work;
+	struct work_struct preempt_reclaim_work;
+	struct work_struct reclaim_bgs_work;
+	struct list_head reclaim_bgs;
+	int bg_reclaim_threshold;
+	spinlock_t unused_bgs_lock;
+	struct list_head unused_bgs;
+	struct mutex unused_bg_unpin_mutex;
+	struct mutex reclaim_bgs_lock;
+	u32 nodesize;
+	u32 sectorsize;
+	u32 sectorsize_bits;
+	u32 csum_size;
+	u32 csums_per_leaf;
+	u32 stripesize;
+	u64 max_extent_size;
+	spinlock_t swapfile_pins_lock;
+	struct rb_root swapfile_pins;
+	struct crypto_shash *csum_shash;
+	enum btrfs_exclusive_operation exclusive_operation;
+	u64 zone_size;
+	u64 max_zone_append_size;
+	struct mutex zoned_meta_io_lock;
+	spinlock_t treelog_bg_lock;
+	u64 treelog_bg;
+	spinlock_t relocation_bg_lock;
+	u64 data_reloc_bg;
+	struct mutex zoned_data_reloc_io_lock;
+	u64 nr_global_roots;
+	spinlock_t zone_active_bgs_lock;
+	struct list_head zone_active_bgs;
+	struct btrfs_commit_stats commit_stats;
+};
+
+struct ulist {
+	long unsigned int nnodes;
+	struct list_head nodes;
+	struct rb_root root;
+};
+
+enum {
+	EXTENT_BUFFER_UPTODATE = 0,
+	EXTENT_BUFFER_DIRTY = 1,
+	EXTENT_BUFFER_CORRUPT = 2,
+	EXTENT_BUFFER_READAHEAD = 3,
+	EXTENT_BUFFER_TREE_REF = 4,
+	EXTENT_BUFFER_STALE = 5,
+	EXTENT_BUFFER_WRITEBACK = 6,
+	EXTENT_BUFFER_READ_ERR = 7,
+	EXTENT_BUFFER_UNMAPPED = 8,
+	EXTENT_BUFFER_IN_TREE = 9,
+	EXTENT_BUFFER_WRITE_ERR = 10,
+	EXTENT_BUFFER_NO_CHECK = 11,
+};
+
+struct extent_buffer {
+	u64 start;
+	long unsigned int len;
+	long unsigned int bflags;
+	struct btrfs_fs_info *fs_info;
+	spinlock_t refs_lock;
+	atomic_t refs;
+	atomic_t io_pages;
+	int read_mirror;
+	struct callback_head callback_head;
+	pid_t lock_owner;
+	s8 log_index;
+	struct rw_semaphore lock;
+	struct page *pages[16];
+	struct list_head release_list;
+};
+
+enum btrfs_lock_nesting {
+	BTRFS_NESTING_NORMAL = 0,
+	BTRFS_NESTING_COW = 1,
+	BTRFS_NESTING_LEFT = 2,
+	BTRFS_NESTING_RIGHT = 3,
+	BTRFS_NESTING_LEFT_COW = 4,
+	BTRFS_NESTING_RIGHT_COW = 5,
+	BTRFS_NESTING_SPLIT = 6,
+	BTRFS_NESTING_NEW_ROOT = 7,
+	BTRFS_NESTING_MAX = 8,
+};
+
+struct btrfs_drew_lock {
+	atomic_t readers;
+	struct percpu_counter writers;
+	wait_queue_head_t pending_writers;
+	wait_queue_head_t pending_readers;
+};
+
+struct btrfs_header {
+	u8 csum[32];
+	u8 fsid[16];
+	__le64 bytenr;
+	__le64 flags;
+	u8 chunk_tree_uuid[16];
+	__le64 generation;
+	__le64 owner;
+	__le32 nritems;
+	u8 level;
+} __attribute__((packed));
+
+struct btrfs_root_backup {
+	__le64 tree_root;
+	__le64 tree_root_gen;
+	__le64 chunk_root;
+	__le64 chunk_root_gen;
+	__le64 extent_root;
+	__le64 extent_root_gen;
+	__le64 fs_root;
+	__le64 fs_root_gen;
+	__le64 dev_root;
+	__le64 dev_root_gen;
+	__le64 csum_root;
+	__le64 csum_root_gen;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 num_devices;
+	__le64 unused_64[4];
+	u8 tree_root_level;
+	u8 chunk_root_level;
+	u8 extent_root_level;
+	u8 fs_root_level;
+	u8 dev_root_level;
+	u8 csum_root_level;
+	u8 unused_8[10];
+};
+
+struct btrfs_super_block {
+	u8 csum[32];
+	u8 fsid[16];
+	__le64 bytenr;
+	__le64 flags;
+	__le64 magic;
+	__le64 generation;
+	__le64 root;
+	__le64 chunk_root;
+	__le64 log_root;
+	__le64 __unused_log_root_transid;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 root_dir_objectid;
+	__le64 num_devices;
+	__le32 sectorsize;
+	__le32 nodesize;
+	__le32 __unused_leafsize;
+	__le32 stripesize;
+	__le32 sys_chunk_array_size;
+	__le64 chunk_root_generation;
+	__le64 compat_flags;
+	__le64 compat_ro_flags;
+	__le64 incompat_flags;
+	__le16 csum_type;
+	u8 root_level;
+	u8 chunk_root_level;
+	u8 log_root_level;
+	struct btrfs_dev_item dev_item;
+	char label[256];
+	__le64 cache_generation;
+	__le64 uuid_tree_generation;
+	u8 metadata_uuid[16];
+	__le64 block_group_root;
+	__le64 block_group_root_generation;
+	u8 block_group_root_level;
+	u8 reserved8[7];
+	__le64 reserved[25];
+	u8 sys_chunk_array[2048];
+	struct btrfs_root_backup super_roots[4];
+	u8 padding[565];
+} __attribute__((packed));
+
+struct btrfs_item {
+	struct btrfs_disk_key key;
+	__le32 offset;
+	__le32 size;
+} __attribute__((packed));
+
+struct btrfs_key_ptr {
+	struct btrfs_disk_key key;
+	__le64 blockptr;
+	__le64 generation;
+} __attribute__((packed));
+
+struct btrfs_qgroup_swapped_blocks {
+	spinlock_t lock;
+	bool swapped;
+	struct rb_root blocks[8];
+};
+
+struct btrfs_root {
+	struct rb_node rb_node;
+	struct extent_buffer *node;
+	struct extent_buffer *commit_root;
+	struct btrfs_root *log_root;
+	struct btrfs_root *reloc_root;
+	long unsigned int state;
+	struct btrfs_root_item root_item;
+	struct btrfs_key root_key;
+	struct btrfs_fs_info *fs_info;
+	struct extent_io_tree dirty_log_pages;
+	struct mutex objectid_mutex;
+	spinlock_t accounting_lock;
+	int: 32;
+	struct btrfs_block_rsv *block_rsv;
+	struct mutex log_mutex;
+	wait_queue_head_t log_writer_wait;
+	wait_queue_head_t log_commit_wait[2];
+	struct list_head log_ctxs[2];
+	atomic_t log_writers;
+	atomic_t log_commit[2];
+	atomic_t log_batch;
+	int log_transid;
+	int log_transid_committed;
+	int last_log_commit;
+	pid_t log_start_pid;
+	u64 last_trans;
+	u32 type;
+	int: 32;
+	u64 free_objectid;
+	struct btrfs_key defrag_progress;
+	struct btrfs_key defrag_max;
+	long: 48;
+	struct list_head dirty_list;
+	struct list_head root_list;
+	spinlock_t log_extents_lock[2];
+	struct list_head logged_list[2];
+	spinlock_t inode_lock;
+	int: 32;
+	struct rb_root inode_tree;
+	struct xarray delayed_nodes_tree;
+	dev_t anon_dev;
+	spinlock_t root_item_lock;
+	refcount_t refs;
+	int: 32;
+	struct mutex delalloc_mutex;
+	spinlock_t delalloc_lock;
+	int: 32;
+	struct list_head delalloc_inodes;
+	struct list_head delalloc_root;
+	u64 nr_delalloc_inodes;
+	struct mutex ordered_extent_mutex;
+	spinlock_t ordered_extent_lock;
+	int: 32;
+	struct list_head ordered_extents;
+	struct list_head ordered_root;
+	u64 nr_ordered_extents;
+	struct list_head reloc_dirty_list;
+	int send_in_progress;
+	int dedupe_in_progress;
+	struct btrfs_drew_lock snapshot_lock;
+	atomic_t snapshot_force_cow;
+	spinlock_t qgroup_meta_rsv_lock;
+	u64 qgroup_meta_rsv_pertrans;
+	u64 qgroup_meta_rsv_prealloc;
+	wait_queue_head_t qgroup_flush_wait;
+	atomic_t nr_swapfiles;
+	int: 32;
+	struct btrfs_qgroup_swapped_blocks swapped_blocks;
+	struct extent_io_tree log_csum_range;
+} __attribute__((packed));
+
+struct root_name_map {
+	u64 id;
+	char name[16];
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_MAX_UNBOUND_PER_CPU = 4,
+	WQ_DFL_ACTIVE = 256,
+};
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+enum {
+	BIO_NO_PAGE_REF = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_WORKINGSET = 3,
+	BIO_QUIET = 4,
+	BIO_CHAIN = 5,
+	BIO_REFFED = 6,
+	BIO_BPS_THROTTLED = 7,
+	BIO_TRACE_COMPLETION = 8,
+	BIO_CGROUP_ACCT = 9,
+	BIO_QOS_THROTTLED = 10,
+	BIO_QOS_MERGED = 11,
+	BIO_REMAPPED = 12,
+	BIO_ZONE_WRITE_LOCKED = 13,
+	BIO_FLAG_LAST = 14,
+};
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_CGROUP_PUNT = 22,
+	__REQ_POLLED = 23,
+	__REQ_ALLOC_CACHE = 24,
+	__REQ_SWAP = 25,
+	__REQ_DRV = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+struct btrfs_qgroup_limit {
+	__u64 flags;
+	__u64 max_rfer;
+	__u64 max_excl;
+	__u64 rsv_rfer;
+	__u64 rsv_excl;
+};
+
+struct btrfs_qgroup_inherit {
+	__u64 flags;
+	__u64 num_qgroups;
+	__u64 num_ref_copies;
+	__u64 num_excl_copies;
+	struct btrfs_qgroup_limit lim;
+	__u64 qgroups[0];
+};
+
+struct btrfs_balance_args {
+	__u64 profiles;
+	union {
+		__u64 usage;
+		struct {
+			__u32 usage_min;
+			__u32 usage_max;
+		};
+	};
+	__u64 devid;
+	__u64 pstart;
+	__u64 pend;
+	__u64 vstart;
+	__u64 vend;
+	__u64 target;
+	__u64 flags;
+	union {
+		__u64 limit;
+		struct {
+			__u32 limit_min;
+			__u32 limit_max;
+		};
+	};
+	__u32 stripes_min;
+	__u32 stripes_max;
+	__u64 unused[6];
+};
+
+struct btrfs_balance_progress {
+	__u64 expected;
+	__u64 considered;
+	__u64 completed;
+};
+
+enum btrfs_dev_stat_values {
+	BTRFS_DEV_STAT_WRITE_ERRS = 0,
+	BTRFS_DEV_STAT_READ_ERRS = 1,
+	BTRFS_DEV_STAT_FLUSH_ERRS = 2,
+	BTRFS_DEV_STAT_CORRUPTION_ERRS = 3,
+	BTRFS_DEV_STAT_GENERATION_ERRS = 4,
+	BTRFS_DEV_STAT_VALUES_MAX = 5,
+};
+
+enum btrfs_csum_type {
+	BTRFS_CSUM_TYPE_CRC32 = 0,
+	BTRFS_CSUM_TYPE_XXHASH = 1,
+	BTRFS_CSUM_TYPE_SHA256 = 2,
+	BTRFS_CSUM_TYPE_BLAKE2 = 3,
+};
+
+enum {
+	IO_TREE_FS_PINNED_EXTENTS = 0,
+	IO_TREE_FS_EXCLUDED_EXTENTS = 1,
+	IO_TREE_BTREE_INODE_IO = 2,
+	IO_TREE_INODE_IO = 3,
+	IO_TREE_INODE_IO_FAILURE = 4,
+	IO_TREE_RELOC_BLOCKS = 5,
+	IO_TREE_TRANS_DIRTY_PAGES = 6,
+	IO_TREE_ROOT_DIRTY_LOG_PAGES = 7,
+	IO_TREE_INODE_FILE_EXTENT = 8,
+	IO_TREE_LOG_CSUM_RANGE = 9,
+	IO_TREE_SELFTEST = 10,
+	IO_TREE_DEVICE_ALLOC_STATE = 11,
+};
+
+struct io_failure_record;
+
+struct extent_state {
+	u64 start;
+	u64 end;
+	struct rb_node rb_node;
+	wait_queue_head_t wq;
+	refcount_t refs;
+	u32 state;
+	struct io_failure_record *failrec;
+};
+
+struct io_failure_record {
+	struct page *page;
+	u64 start;
+	u64 len;
+	u64 logical;
+	int this_mirror;
+	int failed_mirror;
+	int num_copies;
+};
+
+enum btrfs_compression_type {
+	BTRFS_COMPRESS_NONE = 0,
+	BTRFS_COMPRESS_ZLIB = 1,
+	BTRFS_COMPRESS_LZO = 2,
+	BTRFS_COMPRESS_ZSTD = 3,
+	BTRFS_NR_COMPRESS_TYPES = 4,
+};
+
+typedef blk_status_t extent_submit_bio_start_t(struct inode *, struct bio *, u64);
+
+struct extent_changeset {
+	u64 bytes_changed;
+	struct ulist range_changed;
+};
+
+struct btrfs_io_context;
+
+struct btrfs_io_stripe {
+	struct btrfs_device *dev;
+	union {
+		u64 physical;
+		struct btrfs_io_context *bioc;
+	};
+};
+
+struct map_lookup {
+	u64 type;
+	int io_align;
+	int io_width;
+	u32 stripe_len;
+	int num_stripes;
+	int sub_stripes;
+	int verified_stripes;
+	struct btrfs_io_stripe stripes[0];
+};
+
+struct btrfs_space_info {
+	spinlock_t lock;
+	u64 total_bytes;
+	u64 bytes_used;
+	u64 bytes_pinned;
+	u64 bytes_reserved;
+	u64 bytes_may_use;
+	u64 bytes_readonly;
+	u64 active_total_bytes;
+	u64 bytes_zone_unusable;
+	u64 max_extent_size;
+	u64 chunk_size;
+	int bg_reclaim_threshold;
+	int clamp;
+	unsigned int full: 1;
+	unsigned int chunk_alloc: 1;
+	unsigned int flush: 1;
+	unsigned int force_alloc;
+	u64 disk_used;
+	u64 disk_total;
+	u64 flags;
+	struct list_head list;
+	struct list_head ro_bgs;
+	struct list_head priority_tickets;
+	struct list_head tickets;
+	u64 reclaim_size;
+	u64 tickets_id;
+	struct rw_semaphore groups_sem;
+	struct list_head block_groups[9];
+	struct kobject kobj;
+	struct kobject *block_group_kobjs[9];
+};
+
+enum {
+	BTRFS_FS_STATE_ERROR = 0,
+	BTRFS_FS_STATE_REMOUNTING = 1,
+	BTRFS_FS_STATE_RO = 2,
+	BTRFS_FS_STATE_TRANS_ABORTED = 3,
+	BTRFS_FS_STATE_DEV_REPLACING = 4,
+	BTRFS_FS_STATE_DUMMY_FS_INFO = 5,
+	BTRFS_FS_STATE_NO_CSUMS = 6,
+	BTRFS_FS_STATE_LOG_CLEANUP_ERROR = 7,
+	BTRFS_FS_STATE_COUNT = 8,
+};
+
+struct btrfs_path {
+	struct extent_buffer *nodes[8];
+	int slots[8];
+	u8 locks[8];
+	u8 reada;
+	u8 lowest_level;
+	unsigned int search_for_split: 1;
+	unsigned int keep_locks: 1;
+	unsigned int skip_locking: 1;
+	unsigned int search_commit_root: 1;
+	unsigned int need_commit_sem: 1;
+	unsigned int skip_release_on_error: 1;
+	unsigned int search_for_extension: 1;
+};
+
+struct rcu_string;
+
+struct btrfs_zoned_device_info;
+
+struct scrub_ctx;
+
+struct btrfs_device {
+	struct list_head dev_list;
+	struct list_head dev_alloc_list;
+	struct list_head post_commit_list;
+	struct btrfs_fs_devices *fs_devices;
+	struct btrfs_fs_info *fs_info;
+	struct rcu_string *name;
+	u64 generation;
+	struct block_device *bdev;
+	struct btrfs_zoned_device_info *zone_info;
+	fmode_t mode;
+	dev_t devt;
+	long unsigned int dev_state;
+	blk_status_t last_flush_error;
+	u64 devid;
+	u64 total_bytes;
+	u64 disk_total_bytes;
+	u64 bytes_used;
+	u32 io_align;
+	u32 io_width;
+	u64 type;
+	u32 sector_size;
+	u8 uuid[16];
+	u64 commit_total_bytes;
+	u64 commit_bytes_used;
+	struct bio flush_bio;
+	struct completion flush_wait;
+	struct scrub_ctx *scrub_ctx;
+	int dev_stats_valid;
+	atomic_t dev_stats_ccnt;
+	atomic_t dev_stat_values[5];
+	struct extent_io_tree alloc_state;
+	struct completion kobj_unregister;
+	struct kobject devid_kobj;
+	u64 scrub_speed_max;
+};
+
+enum btrfs_discard_state {
+	BTRFS_DISCARD_EXTENTS = 0,
+	BTRFS_DISCARD_BITMAPS = 1,
+	BTRFS_DISCARD_RESET_CURSOR = 2,
+};
+
+struct btrfs_io_ctl {
+	void *cur;
+	void *orig;
+	struct page *page;
+	struct page **pages;
+	struct btrfs_fs_info *fs_info;
+	struct inode *inode;
+	long unsigned int size;
+	int index;
+	int num_pages;
+	int entries;
+	int bitmaps;
+};
+
+struct btrfs_full_stripe_locks_tree {
+	struct rb_root root;
+	struct mutex lock;
+};
+
+struct btrfs_caching_control;
+
+struct btrfs_free_space_ctl;
+
+struct btrfs_block_group {
+	struct btrfs_fs_info *fs_info;
+	struct inode *inode;
+	spinlock_t lock;
+	u64 start;
+	u64 length;
+	u64 pinned;
+	u64 reserved;
+	u64 used;
+	u64 delalloc_bytes;
+	u64 bytes_super;
+	u64 flags;
+	u64 cache_generation;
+	u64 global_root_id;
+	u32 bitmap_high_thresh;
+	u32 bitmap_low_thresh;
+	struct rw_semaphore data_rwsem;
+	long unsigned int full_stripe_len;
+	unsigned int ro;
+	unsigned int iref: 1;
+	unsigned int has_caching_ctl: 1;
+	unsigned int removed: 1;
+	unsigned int to_copy: 1;
+	unsigned int relocating_repair: 1;
+	unsigned int chunk_item_inserted: 1;
+	unsigned int zone_is_active: 1;
+	unsigned int zoned_data_reloc_ongoing: 1;
+	int disk_cache_state;
+	int cached;
+	struct btrfs_caching_control *caching_ctl;
+	u64 last_byte_to_unpin;
+	struct btrfs_space_info *space_info;
+	struct btrfs_free_space_ctl *free_space_ctl;
+	struct rb_node cache_node;
+	struct list_head list;
+	refcount_t refs;
+	struct list_head cluster_list;
+	struct list_head bg_list;
+	struct list_head ro_list;
+	atomic_t frozen;
+	struct list_head discard_list;
+	int discard_index;
+	u64 discard_eligible_time;
+	u64 discard_cursor;
+	enum btrfs_discard_state discard_state;
+	struct list_head dirty_list;
+	struct list_head io_list;
+	struct btrfs_io_ctl io_ctl;
+	atomic_t reservations;
+	atomic_t nocow_writers;
+	struct mutex free_space_lock;
+	int needs_free_space;
+	bool seq_zone;
+	int swap_extents;
+	struct btrfs_full_stripe_locks_tree full_stripe_locks_root;
+	u64 alloc_offset;
+	u64 zone_unusable;
+	u64 zone_capacity;
+	u64 meta_write_pointer;
+	struct map_lookup *physical_map;
+	struct list_head active_bg_list;
+	struct work_struct zone_finish_work;
+	struct extent_buffer *last_eb;
+};
+
+enum {
+	BTRFS_FS_CLOSING_START = 0,
+	BTRFS_FS_CLOSING_DONE = 1,
+	BTRFS_FS_LOG_RECOVERING = 2,
+	BTRFS_FS_OPEN = 3,
+	BTRFS_FS_QUOTA_ENABLED = 4,
+	BTRFS_FS_UPDATE_UUID_TREE_GEN = 5,
+	BTRFS_FS_CREATING_FREE_SPACE_TREE = 6,
+	BTRFS_FS_BTREE_ERR = 7,
+	BTRFS_FS_LOG1_ERR = 8,
+	BTRFS_FS_LOG2_ERR = 9,
+	BTRFS_FS_QUOTA_OVERRIDE = 10,
+	BTRFS_FS_FROZEN = 11,
+	BTRFS_FS_BALANCE_RUNNING = 12,
+	BTRFS_FS_RELOC_RUNNING = 13,
+	BTRFS_FS_CLEANER_RUNNING = 14,
+	BTRFS_FS_CSUM_IMPL_FAST = 15,
+	BTRFS_FS_DISCARD_RUNNING = 16,
+	BTRFS_FS_CLEANUP_SPACE_CACHE_V1 = 17,
+	BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED = 18,
+	BTRFS_FS_TREE_MOD_LOG_USERS = 19,
+	BTRFS_FS_COMMIT_TRANS = 20,
+	BTRFS_FS_UNFINISHED_DROPS = 21,
+	BTRFS_FS_NEED_ZONE_FINISH = 22,
+};
+
+enum btrfs_trans_state {
+	TRANS_STATE_RUNNING = 0,
+	TRANS_STATE_COMMIT_START = 1,
+	TRANS_STATE_COMMIT_DOING = 2,
+	TRANS_STATE_UNBLOCKED = 3,
+	TRANS_STATE_SUPER_COMMITTED = 4,
+	TRANS_STATE_COMPLETED = 5,
+	TRANS_STATE_MAX = 6,
+};
+
+struct btrfs_delayed_ref_root {
+	struct rb_root_cached href_root;
+	struct rb_root dirty_extent_root;
+	spinlock_t lock;
+	atomic_t num_entries;
+	long unsigned int num_heads;
+	long unsigned int num_heads_ready;
+	u64 pending_csums;
+	long unsigned int flags;
+	u64 run_delayed_start;
+	u64 qgroup_to_skip;
+};
+
+struct btrfs_transaction {
+	u64 transid;
+	atomic_t num_extwriters;
+	atomic_t num_writers;
+	refcount_t use_count;
+	long unsigned int flags;
+	enum btrfs_trans_state state;
+	int aborted;
+	struct list_head list;
+	struct extent_io_tree dirty_pages;
+	time64_t start_time;
+	wait_queue_head_t writer_wait;
+	wait_queue_head_t commit_wait;
+	struct list_head pending_snapshots;
+	struct list_head dev_update_list;
+	struct list_head switch_commits;
+	struct list_head dirty_bgs;
+	struct list_head io_bgs;
+	struct list_head dropped_roots;
+	struct extent_io_tree pinned_extents;
+	struct mutex cache_write_mutex;
+	spinlock_t dirty_bgs_lock;
+	struct list_head deleted_bgs;
+	spinlock_t dropped_roots_lock;
+	struct btrfs_delayed_ref_root delayed_refs;
+	struct btrfs_fs_info *fs_info;
+	atomic_t pending_ordered;
+	wait_queue_head_t pending_wait;
+	spinlock_t releasing_ebs_lock;
+	struct list_head releasing_ebs;
+};
+
+enum btrfs_chunk_allocation_policy {
+	BTRFS_CHUNK_ALLOC_REGULAR = 0,
+	BTRFS_CHUNK_ALLOC_ZONED = 1,
+};
+
+enum btrfs_read_policy {
+	BTRFS_READ_POLICY_PID = 0,
+	BTRFS_NR_READ_POLICY = 1,
+};
+
+struct btrfs_fs_devices {
+	u8 fsid[16];
+	u8 metadata_uuid[16];
+	bool fsid_change;
+	struct list_head fs_list;
+	u64 num_devices;
+	u64 open_devices;
+	u64 rw_devices;
+	u64 missing_devices;
+	u64 total_rw_bytes;
+	u64 total_devices;
+	u64 latest_generation;
+	struct btrfs_device *latest_dev;
+	struct mutex device_list_mutex;
+	struct list_head devices;
+	struct list_head alloc_list;
+	struct list_head seed_list;
+	bool seeding;
+	int opened;
+	bool rotating;
+	struct btrfs_fs_info *fs_info;
+	struct kobject fsid_kobj;
+	struct kobject *devices_kobj;
+	struct kobject *devinfo_kobj;
+	struct completion kobj_unregister;
+	enum btrfs_chunk_allocation_policy chunk_alloc_policy;
+	enum btrfs_read_policy read_policy;
+};
+
+struct btrfs_balance_control {
+	struct btrfs_balance_args data;
+	struct btrfs_balance_args meta;
+	struct btrfs_balance_args sys;
+	u64 flags;
+	struct btrfs_balance_progress stat;
+};
+
+struct btrfs_subpage_info {
+	unsigned int bitmap_nr_bits;
+	unsigned int total_nr_bits;
+	unsigned int uptodate_offset;
+	unsigned int error_offset;
+	unsigned int dirty_offset;
+	unsigned int writeback_offset;
+	unsigned int ordered_offset;
+	unsigned int checked_offset;
+};
+
+struct btrfs_delayed_root {
+	spinlock_t lock;
+	struct list_head node_list;
+	struct list_head prepare_list;
+	atomic_t items;
+	atomic_t items_seq;
+	int nodes;
+	wait_queue_head_t wait;
+};
+
+enum {
+	BTRFS_ROOT_IN_TRANS_SETUP = 0,
+	BTRFS_ROOT_SHAREABLE = 1,
+	BTRFS_ROOT_TRACK_DIRTY = 2,
+	BTRFS_ROOT_IN_RADIX = 3,
+	BTRFS_ROOT_ORPHAN_ITEM_INSERTED = 4,
+	BTRFS_ROOT_DEFRAG_RUNNING = 5,
+	BTRFS_ROOT_FORCE_COW = 6,
+	BTRFS_ROOT_MULTI_LOG_TASKS = 7,
+	BTRFS_ROOT_DIRTY = 8,
+	BTRFS_ROOT_DELETING = 9,
+	BTRFS_ROOT_DEAD_RELOC_TREE = 10,
+	BTRFS_ROOT_DEAD_TREE = 11,
+	BTRFS_ROOT_HAS_LOG_TREE = 12,
+	BTRFS_ROOT_QGROUP_FLUSHING = 13,
+	BTRFS_ROOT_ORPHAN_CLEANUP = 14,
+	BTRFS_ROOT_UNFINISHED_DROP = 15,
+	BTRFS_ROOT_RESET_LOCKDEP_CLASS = 16,
+};
+
+enum {
+	BTRFS_MOUNT_NODATASUM = 1,
+	BTRFS_MOUNT_NODATACOW = 2,
+	BTRFS_MOUNT_NOBARRIER = 4,
+	BTRFS_MOUNT_SSD = 8,
+	BTRFS_MOUNT_DEGRADED = 16,
+	BTRFS_MOUNT_COMPRESS = 32,
+	BTRFS_MOUNT_NOTREELOG = 64,
+	BTRFS_MOUNT_FLUSHONCOMMIT = 128,
+	BTRFS_MOUNT_SSD_SPREAD = 256,
+	BTRFS_MOUNT_NOSSD = 512,
+	BTRFS_MOUNT_DISCARD_SYNC = 1024,
+	BTRFS_MOUNT_FORCE_COMPRESS = 2048,
+	BTRFS_MOUNT_SPACE_CACHE = 4096,
+	BTRFS_MOUNT_CLEAR_CACHE = 8192,
+	BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED = 16384,
+	BTRFS_MOUNT_ENOSPC_DEBUG = 32768,
+	BTRFS_MOUNT_AUTO_DEFRAG = 65536,
+	BTRFS_MOUNT_USEBACKUPROOT = 131072,
+	BTRFS_MOUNT_SKIP_BALANCE = 262144,
+	BTRFS_MOUNT_CHECK_INTEGRITY = 524288,
+	BTRFS_MOUNT_CHECK_INTEGRITY_DATA = 1048576,
+	BTRFS_MOUNT_PANIC_ON_FATAL_ERROR = 2097152,
+	BTRFS_MOUNT_RESCAN_UUID_TREE = 4194304,
+	BTRFS_MOUNT_FRAGMENT_DATA = 8388608,
+	BTRFS_MOUNT_FRAGMENT_METADATA = 16777216,
+	BTRFS_MOUNT_FREE_SPACE_TREE = 33554432,
+	BTRFS_MOUNT_NOLOGREPLAY = 67108864,
+	BTRFS_MOUNT_REF_VERIFY = 134217728,
+	BTRFS_MOUNT_DISCARD_ASYNC = 268435456,
+	BTRFS_MOUNT_IGNOREBADROOTS = 536870912,
+	BTRFS_MOUNT_IGNOREDATACSUMS = 1073741824,
+};
+
+struct btrfs_ordered_inode_tree {
+	spinlock_t lock;
+	struct rb_root tree;
+	struct rb_node *last;
+};
+
+enum {
+	BTRFS_ORDERED_REGULAR = 0,
+	BTRFS_ORDERED_NOCOW = 1,
+	BTRFS_ORDERED_PREALLOC = 2,
+	BTRFS_ORDERED_COMPRESSED = 3,
+	BTRFS_ORDERED_DIRECT = 4,
+	BTRFS_ORDERED_IO_DONE = 5,
+	BTRFS_ORDERED_COMPLETE = 6,
+	BTRFS_ORDERED_IOERR = 7,
+	BTRFS_ORDERED_TRUNCATED = 8,
+	BTRFS_ORDERED_LOGGED = 9,
+	BTRFS_ORDERED_LOGGED_CSUM = 10,
+	BTRFS_ORDERED_PENDING = 11,
+	BTRFS_ORDERED_ENCODED = 12,
+};
+
+struct btrfs_ordered_extent {
+	u64 file_offset;
+	u64 num_bytes;
+	u64 ram_bytes;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 offset;
+	u64 bytes_left;
+	u64 outstanding_isize;
+	u64 truncated_len;
+	long unsigned int flags;
+	int compress_type;
+	int qgroup_rsv;
+	refcount_t refs;
+	struct inode *inode;
+	struct list_head list;
+	struct list_head log_list;
+	wait_queue_head_t wait;
+	struct rb_node rb_node;
+	struct list_head root_extent_list;
+	struct btrfs_work work;
+	struct completion completion;
+	struct btrfs_work flush_work;
+	struct list_head work_list;
+	u64 physical;
+	struct block_device *bdev;
+};
+
+struct btrfs_delayed_node {
+	u64 inode_id;
+	u64 bytes_reserved;
+	struct btrfs_root *root;
+	struct list_head n_list;
+	struct list_head p_list;
+	struct rb_root_cached ins_root;
+	struct rb_root_cached del_root;
+	struct mutex mutex;
+	struct btrfs_inode_item inode_item;
+	refcount_t refs;
+	u64 index_cnt;
+	long unsigned int flags;
+	int count;
+	u32 curr_index_batch_size;
+	u32 index_item_leaves;
+};
+
+enum {
+	BTRFS_INODE_FLUSH_ON_CLOSE = 0,
+	BTRFS_INODE_DUMMY = 1,
+	BTRFS_INODE_IN_DEFRAG = 2,
+	BTRFS_INODE_HAS_ASYNC_EXTENT = 3,
+	BTRFS_INODE_NEEDS_FULL_SYNC = 4,
+	BTRFS_INODE_COPY_EVERYTHING = 5,
+	BTRFS_INODE_IN_DELALLOC_LIST = 6,
+	BTRFS_INODE_HAS_PROPS = 7,
+	BTRFS_INODE_SNAPSHOT_FLUSH = 8,
+	BTRFS_INODE_NO_XATTRS = 9,
+	BTRFS_INODE_NO_DELALLOC_FLUSH = 10,
+	BTRFS_INODE_VERITY_IN_PROGRESS = 11,
+};
+
+struct btrfs_inode {
+	struct btrfs_root *root;
+	struct btrfs_key location;
+	spinlock_t lock;
+	struct extent_map_tree extent_tree;
+	struct extent_io_tree io_tree;
+	struct extent_io_tree io_failure_tree;
+	struct extent_io_tree file_extent_tree;
+	struct mutex log_mutex;
+	struct btrfs_ordered_inode_tree ordered_tree;
+	struct list_head delalloc_inodes;
+	struct rb_node rb_node;
+	long unsigned int runtime_flags;
+	atomic_t sync_writers;
+	u64 generation;
+	u64 last_trans;
+	u64 logged_trans;
+	int last_sub_trans;
+	int last_log_commit;
+	u64 delalloc_bytes;
+	union {
+		u64 new_delalloc_bytes;
+		u64 last_dir_index_offset;
+	};
+	u64 defrag_bytes;
+	u64 disk_i_size;
+	u64 index_cnt;
+	u64 dir_index;
+	u64 last_unlink_trans;
+	u64 last_reflink_trans;
+	u64 csum_bytes;
+	u32 flags;
+	u32 ro_flags;
+	unsigned int outstanding_extents;
+	struct btrfs_block_rsv block_rsv;
+	unsigned int prop_compress;
+	unsigned int defrag_compress;
+	struct btrfs_delayed_node *delayed_node;
+	struct timespec64 i_otime;
+	struct list_head delayed_iput;
+	struct rw_semaphore i_mmap_lock;
+	struct inode vfs_inode;
+};
+
+struct btrfs_delayed_ref_node {
+	struct rb_node ref_node;
+	struct list_head add_list;
+	u64 bytenr;
+	u64 num_bytes;
+	u64 seq;
+	refcount_t refs;
+	int ref_mod;
+	unsigned int action: 8;
+	unsigned int type: 8;
+	unsigned int is_head: 1;
+	unsigned int in_tree: 1;
+};
+
+struct btrfs_delayed_extent_op {
+	struct btrfs_disk_key key;
+	u8 level;
+	bool update_key;
+	bool update_flags;
+	u64 flags_to_set;
+};
+
+struct btrfs_delayed_ref_head {
+	u64 bytenr;
+	u64 num_bytes;
+	refcount_t refs;
+	struct mutex mutex;
+	spinlock_t lock;
+	struct rb_root_cached ref_tree;
+	struct list_head ref_add_list;
+	struct rb_node href_node;
+	struct btrfs_delayed_extent_op *extent_op;
+	int total_ref_mod;
+	int ref_mod;
+	unsigned int must_insert_reserved: 1;
+	unsigned int is_data: 1;
+	unsigned int is_system: 1;
+	unsigned int processing: 1;
+};
+
+struct btrfs_pending_snapshot;
+
+struct btrfs_trans_handle {
+	u64 transid;
+	u64 bytes_reserved;
+	u64 chunk_bytes_reserved;
+	long unsigned int delayed_ref_updates;
+	struct btrfs_transaction *transaction;
+	struct btrfs_block_rsv *block_rsv;
+	struct btrfs_block_rsv *orig_rsv;
+	struct btrfs_pending_snapshot *pending_snapshot;
+	refcount_t use_count;
+	unsigned int type;
+	short int aborted;
+	bool adding_csums;
+	bool allocating_chunk;
+	bool removing_chunk;
+	bool reloc_reserved;
+	bool in_fsync;
+	struct btrfs_fs_info *fs_info;
+	struct list_head new_bgs;
+};
+
+struct btrfs_pending_snapshot {
+	struct dentry *dentry;
+	struct inode *dir;
+	struct btrfs_root *root;
+	struct btrfs_root_item *root_item;
+	struct btrfs_root *snap;
+	struct btrfs_qgroup_inherit *inherit;
+	struct btrfs_path *path;
+	struct btrfs_block_rsv block_rsv;
+	int error;
+	dev_t anon_dev;
+	bool readonly;
+	struct list_head list;
+};
+
+enum btrfs_raid_types {
+	BTRFS_RAID_SINGLE = 0,
+	BTRFS_RAID_RAID0 = 1,
+	BTRFS_RAID_RAID1 = 2,
+	BTRFS_RAID_DUP = 3,
+	BTRFS_RAID_RAID10 = 4,
+	BTRFS_RAID_RAID5 = 5,
+	BTRFS_RAID_RAID6 = 6,
+	BTRFS_RAID_RAID1C3 = 7,
+	BTRFS_RAID_RAID1C4 = 8,
+	BTRFS_NR_RAID_TYPES = 9,
+};
+
+struct rcu_string {
+	struct callback_head rcu;
+	char str[0];
+};
+
+struct btrfs_zoned_device_info {
+	u64 zone_size;
+	u8 zone_size_shift;
+	u64 max_zone_append_size;
+	u32 nr_zones;
+	unsigned int max_active_zones;
+	atomic_t active_zones_left;
+	long unsigned int *seq_zones;
+	long unsigned int *empty_zones;
+	long unsigned int *active_zones;
+	struct blk_zone *zone_cache;
+	struct blk_zone sb_zones[6];
+};
+
+struct btrfs_bio {
+	unsigned int mirror_num;
+	u64 file_offset;
+	struct btrfs_device *device;
+	u8 *csum;
+	u8 csum_inline[64];
+	struct bvec_iter iter;
+	struct work_struct end_io_work;
+	struct bio bio;
+};
+
+struct btrfs_io_context {
+	refcount_t refs;
+	atomic_t stripes_pending;
+	struct btrfs_fs_info *fs_info;
+	u64 map_type;
+	bio_end_io_t *end_io;
+	struct bio *orig_bio;
+	void *private;
+	atomic_t error;
+	int max_errors;
+	int num_stripes;
+	int mirror_num;
+	int num_tgtdevs;
+	int *tgtdev_map;
+	u64 *raid_map;
+	struct btrfs_io_stripe stripes[0];
+};
+
+struct btrfs_raid_attr {
+	u8 sub_stripes;
+	u8 dev_stripes;
+	u8 devs_max;
+	u8 devs_min;
+	u8 tolerated_failures;
+	u8 devs_increment;
+	u8 ncopies;
+	u8 nparity;
+	u8 mindev_error;
+	const char raid_name[8];
+	u64 bg_flag;
+};
+
+enum btrfs_map_op {
+	BTRFS_MAP_READ = 0,
+	BTRFS_MAP_WRITE = 1,
+	BTRFS_MAP_DISCARD = 2,
+	BTRFS_MAP_GET_READ_MIRRORS = 3,
+};
+
+enum btrfs_trim_state {
+	BTRFS_TRIM_STATE_UNTRIMMED = 0,
+	BTRFS_TRIM_STATE_TRIMMED = 1,
+	BTRFS_TRIM_STATE_TRIMMING = 2,
+};
+
+struct btrfs_free_space {
+	struct rb_node offset_index;
+	struct rb_node bytes_index;
+	u64 offset;
+	u64 bytes;
+	u64 max_extent_size;
+	long unsigned int *bitmap;
+	struct list_head list;
+	enum btrfs_trim_state trim_state;
+	s32 bitmap_extents;
+};
+
+struct btrfs_free_space_op;
+
+struct btrfs_free_space_ctl {
+	spinlock_t tree_lock;
+	struct rb_root free_space_offset;
+	struct rb_root_cached free_space_bytes;
+	u64 free_space;
+	int extents_thresh;
+	int free_extents;
+	int total_bitmaps;
+	int unit;
+	u64 start;
+	s32 discardable_extents[2];
+	s64 discardable_bytes[2];
+	const struct btrfs_free_space_op *op;
+	struct btrfs_block_group *block_group;
+	struct mutex cache_writeout_mutex;
+	struct list_head trimming_ranges;
+};
+
+struct btrfs_free_space_op {
+	bool (*use_bitmap)(struct btrfs_free_space_ctl *, struct btrfs_free_space *);
+};
+
+enum btrfs_qgroup_rsv_type {
+	BTRFS_QGROUP_RSV_DATA = 0,
+	BTRFS_QGROUP_RSV_META_PERTRANS = 1,
+	BTRFS_QGROUP_RSV_META_PREALLOC = 2,
+	BTRFS_QGROUP_RSV_LAST = 3,
+};
+
+enum btrfs_disk_cache_state {
+	BTRFS_DC_WRITTEN = 0,
+	BTRFS_DC_ERROR = 1,
+	BTRFS_DC_CLEAR = 2,
+	BTRFS_DC_SETUP = 3,
+};
+
+struct btrfs_caching_control {
+	struct list_head list;
+	struct mutex mutex;
+	wait_queue_head_t wait;
+	struct btrfs_work work;
+	struct btrfs_block_group *block_group;
+	u64 progress;
+	refcount_t count;
+};
+
+struct async_submit_bio {
+	struct inode *inode;
+	struct bio *bio;
+	extent_submit_bio_start_t *submit_bio_start;
+	int mirror_num;
+	u64 dio_file_offset;
+	struct btrfs_work work;
+	blk_status_t status;
+};
+
+struct btrfs_workqueue {
+	struct workqueue_struct *normal_wq;
+	struct btrfs_fs_info *fs_info;
+	struct list_head ordered_list;
+	spinlock_t list_lock;
+	atomic_t pending;
+	int limit_active;
+	int current_active;
+	int thresh;
+	unsigned int count;
+	spinlock_t thres_lock;
+};
+
+enum {
+	WORK_DONE_BIT = 0,
+	WORK_ORDER_DONE_BIT = 1,
+};
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct btrfs_inode_ref {
+	__le64 index;
+	__le16 name_len;
+} __attribute__((packed));
+
+struct btrfs_inode_extref {
+	__le64 parent_objectid;
+	__le64 index;
+	__le16 name_len;
+	__u8 name[0];
+} __attribute__((packed));
+
+struct btrfs_dir_log_item {
+	__le64 end;
+};
+
+enum {
+	EXTENT_FLAG_PINNED = 0,
+	EXTENT_FLAG_COMPRESSED = 1,
+	EXTENT_FLAG_PREALLOC = 2,
+	EXTENT_FLAG_LOGGING = 3,
+	EXTENT_FLAG_FILLING = 4,
+	EXTENT_FLAG_FS_MAPPING = 5,
+	EXTENT_FLAG_MERGED = 6,
+};
+
+struct extent_map {
+	struct rb_node rb_node;
+	u64 start;
+	u64 len;
+	u64 mod_start;
+	u64 mod_len;
+	u64 orig_start;
+	u64 orig_block_len;
+	u64 ram_bytes;
+	u64 block_start;
+	u64 block_len;
+	u64 generation;
+	long unsigned int flags;
+	struct map_lookup *map_lookup;
+	refcount_t refs;
+	unsigned int compress_type;
+	struct list_head list;
+};
+
+struct btrfs_drop_extents_args {
+	struct btrfs_path *path;
+	u64 start;
+	u64 end;
+	bool drop_cache;
+	bool replace_extent;
+	u32 extent_item_size;
+	u64 drop_end;
+	u64 bytes_found;
+	bool extent_inserted;
+};
+
+struct btrfs_map_token {
+	struct extent_buffer *eb;
+	char *kaddr;
+	long unsigned int offset;
+};
+
+struct btrfs_item_batch {
+	const struct btrfs_key *keys;
+	const u32 *data_sizes;
+	u32 total_data_size;
+	int nr;
+};
+
+struct btrfs_ordered_sum {
+	u64 bytenr;
+	int len;
+	struct list_head list;
+	u8 sums[0];
+};
+
+enum btrfs_ref_type {
+	BTRFS_REF_NOT_SET = 0,
+	BTRFS_REF_DATA = 1,
+	BTRFS_REF_METADATA = 2,
+	BTRFS_REF_LAST = 3,
+};
+
+struct btrfs_data_ref {
+	u64 owning_root;
+	u64 ino;
+	u64 offset;
+};
+
+struct btrfs_tree_ref {
+	int level;
+	u64 owning_root;
+};
+
+struct btrfs_ref {
+	enum btrfs_ref_type type;
+	int action;
+	bool skip_qgroup;
+	u64 bytenr;
+	u64 len;
+	u64 parent;
+	union {
+		struct btrfs_data_ref data_ref;
+		struct btrfs_tree_ref tree_ref;
+	};
+};
+
+struct btrfs_log_ctx {
+	int log_ret;
+	int log_transid;
+	bool log_new_dentries;
+	bool logging_new_name;
+	bool logged_before;
+	u64 last_dir_item_offset;
+	struct inode *inode;
+	struct list_head list;
+	struct list_head ordered_extents;
+};
+
+struct btrfs_truncate_control {
+	struct btrfs_inode *inode;
+	u64 new_size;
+	u64 extents_found;
+	u64 last_size;
+	u64 sub_bytes;
+	u64 ino;
+	u32 min_type;
+	bool skip_ref_updates;
+	bool clear_extent_range;
+};
+
+enum {
+	LOG_INODE_ALL = 0,
+	LOG_INODE_EXISTS = 1,
+	LOG_OTHER_INODE = 2,
+	LOG_OTHER_INODE_ALL = 3,
+};
+
+enum {
+	LOG_WALK_PIN_ONLY = 0,
+	LOG_WALK_REPLAY_INODES = 1,
+	LOG_WALK_REPLAY_DIR_INDEX = 2,
+	LOG_WALK_REPLAY_ALL = 3,
+};
+
+struct walk_control {
+	int free;
+	int pin;
+	int stage;
+	bool ignore_cur_inode;
+	struct btrfs_root *replay_dest;
+	struct btrfs_trans_handle *trans;
+	int (*process_func)(struct btrfs_root *, struct extent_buffer *, struct walk_control *, u64, int);
+};
+
+struct btrfs_ino_list {
+	u64 ino;
+	u64 parent;
+	struct list_head list;
+};
+
+struct btrfs_dir_list {
+	u64 ino;
+	struct list_head list;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+struct btrfs_stream_header {
+	char magic[13];
+	__le32 version;
+} __attribute__((packed));
+
+struct btrfs_cmd_header {
+	__le32 len;
+	__le16 cmd;
+	__le32 crc;
+} __attribute__((packed));
+
+struct btrfs_tlv_header {
+	__le16 tlv_type;
+	__le16 tlv_len;
+};
+
+enum btrfs_send_cmd {
+	BTRFS_SEND_C_UNSPEC = 0,
+	BTRFS_SEND_C_SUBVOL = 1,
+	BTRFS_SEND_C_SNAPSHOT = 2,
+	BTRFS_SEND_C_MKFILE = 3,
+	BTRFS_SEND_C_MKDIR = 4,
+	BTRFS_SEND_C_MKNOD = 5,
+	BTRFS_SEND_C_MKFIFO = 6,
+	BTRFS_SEND_C_MKSOCK = 7,
+	BTRFS_SEND_C_SYMLINK = 8,
+	BTRFS_SEND_C_RENAME = 9,
+	BTRFS_SEND_C_LINK = 10,
+	BTRFS_SEND_C_UNLINK = 11,
+	BTRFS_SEND_C_RMDIR = 12,
+	BTRFS_SEND_C_SET_XATTR = 13,
+	BTRFS_SEND_C_REMOVE_XATTR = 14,
+	BTRFS_SEND_C_WRITE = 15,
+	BTRFS_SEND_C_CLONE = 16,
+	BTRFS_SEND_C_TRUNCATE = 17,
+	BTRFS_SEND_C_CHMOD = 18,
+	BTRFS_SEND_C_CHOWN = 19,
+	BTRFS_SEND_C_UTIMES = 20,
+	BTRFS_SEND_C_END = 21,
+	BTRFS_SEND_C_UPDATE_EXTENT = 22,
+	BTRFS_SEND_C_MAX_V1 = 22,
+	BTRFS_SEND_C_FALLOCATE = 23,
+	BTRFS_SEND_C_FILEATTR = 24,
+	BTRFS_SEND_C_ENCODED_WRITE = 25,
+	BTRFS_SEND_C_MAX_V2 = 25,
+	BTRFS_SEND_C_MAX = 25,
+};
+
+enum {
+	BTRFS_SEND_A_UNSPEC = 0,
+	BTRFS_SEND_A_UUID = 1,
+	BTRFS_SEND_A_CTRANSID = 2,
+	BTRFS_SEND_A_INO = 3,
+	BTRFS_SEND_A_SIZE = 4,
+	BTRFS_SEND_A_MODE = 5,
+	BTRFS_SEND_A_UID = 6,
+	BTRFS_SEND_A_GID = 7,
+	BTRFS_SEND_A_RDEV = 8,
+	BTRFS_SEND_A_CTIME = 9,
+	BTRFS_SEND_A_MTIME = 10,
+	BTRFS_SEND_A_ATIME = 11,
+	BTRFS_SEND_A_OTIME = 12,
+	BTRFS_SEND_A_XATTR_NAME = 13,
+	BTRFS_SEND_A_XATTR_DATA = 14,
+	BTRFS_SEND_A_PATH = 15,
+	BTRFS_SEND_A_PATH_TO = 16,
+	BTRFS_SEND_A_PATH_LINK = 17,
+	BTRFS_SEND_A_FILE_OFFSET = 18,
+	BTRFS_SEND_A_DATA = 19,
+	BTRFS_SEND_A_CLONE_UUID = 20,
+	BTRFS_SEND_A_CLONE_CTRANSID = 21,
+	BTRFS_SEND_A_CLONE_PATH = 22,
+	BTRFS_SEND_A_CLONE_OFFSET = 23,
+	BTRFS_SEND_A_CLONE_LEN = 24,
+	BTRFS_SEND_A_MAX_V1 = 24,
+	BTRFS_SEND_A_FALLOCATE_MODE = 25,
+	BTRFS_SEND_A_FILEATTR = 26,
+	BTRFS_SEND_A_UNENCODED_FILE_LEN = 27,
+	BTRFS_SEND_A_UNENCODED_LEN = 28,
+	BTRFS_SEND_A_UNENCODED_OFFSET = 29,
+	BTRFS_SEND_A_COMPRESSION = 30,
+	BTRFS_SEND_A_ENCRYPTION = 31,
+	BTRFS_SEND_A_MAX_V2 = 31,
+	BTRFS_SEND_A_MAX = 31,
+};
+
+struct btrfs_ioctl_send_args {
+	__s64 send_fd;
+	__u64 clone_sources_count;
+	__u64 *clone_sources;
+	__u64 parent_root;
+	__u64 flags;
+	__u32 version;
+	__u8 reserved[28];
+};
+
+struct btrfs_root_ref {
+	__le64 dirid;
+	__le64 sequence;
+	__le16 name_len;
+} __attribute__((packed));
+
+enum {
+	READA_NONE = 0,
+	READA_BACK = 1,
+	READA_FORWARD = 2,
+	READA_FORWARD_ALWAYS = 3,
+};
+
+typedef int iterate_extent_inodes_t(u64, u64, u64, void *);
+
+struct fs_path {
+	union {
+		struct {
+			char *start;
+			char *end;
+			char *buf;
+			short unsigned int buf_len: 15;
+			short unsigned int reversed: 1;
+			char inline_buf[0];
+		};
+		char pad[256];
+	};
+};
+
+struct clone_root {
+	struct btrfs_root *root;
+	u64 ino;
+	u64 offset;
+	u64 found_refs;
+};
+
+struct send_ctx {
+	struct file *send_filp;
+	loff_t send_off;
+	char *send_buf;
+	u32 send_size;
+	u32 send_max_size;
+	bool put_data;
+	struct page **send_buf_pages;
+	u64 flags;
+	u32 proto;
+	struct btrfs_root *send_root;
+	struct btrfs_root *parent_root;
+	struct clone_root *clone_roots;
+	int clone_roots_cnt;
+	struct btrfs_path *left_path;
+	struct btrfs_path *right_path;
+	struct btrfs_key *cmp_key;
+	u64 last_reloc_trans;
+	u64 cur_ino;
+	u64 cur_inode_gen;
+	u64 cur_inode_size;
+	u64 cur_inode_mode;
+	u64 cur_inode_rdev;
+	u64 cur_inode_last_extent;
+	u64 cur_inode_next_write_offset;
+	bool cur_inode_new;
+	bool cur_inode_new_gen;
+	bool cur_inode_deleted;
+	bool ignore_cur_inode;
+	u64 send_progress;
+	struct list_head new_refs;
+	struct list_head deleted_refs;
+	struct xarray name_cache;
+	struct list_head name_cache_list;
+	int name_cache_size;
+	struct inode *cur_inode;
+	struct file_ra_state ra;
+	u64 page_cache_clear_start;
+	bool clean_page_cache;
+	struct rb_root pending_dir_moves;
+	struct rb_root waiting_dir_moves;
+	struct rb_root orphan_dirs;
+	struct rb_root rbtree_new_refs;
+	struct rb_root rbtree_deleted_refs;
+};
+
+struct pending_dir_move {
+	struct rb_node node;
+	struct list_head list;
+	u64 parent_ino;
+	u64 ino;
+	u64 gen;
+	struct list_head update_refs;
+};
+
+struct waiting_dir_move {
+	struct rb_node node;
+	u64 ino;
+	u64 rmdir_ino;
+	u64 rmdir_gen;
+	bool orphanized;
+};
+
+struct orphan_dir_info {
+	struct rb_node node;
+	u64 ino;
+	u64 gen;
+	u64 last_dir_index_offset;
+};
+
+struct name_cache_entry {
+	struct list_head list;
+	struct list_head radix_list;
+	u64 ino;
+	u64 gen;
+	u64 parent_ino;
+	u64 parent_gen;
+	int ret;
+	int need_later_update;
+	int name_len;
+	char name[0];
+};
+
+enum btrfs_compare_tree_result {
+	BTRFS_COMPARE_TREE_NEW = 0,
+	BTRFS_COMPARE_TREE_DELETED = 1,
+	BTRFS_COMPARE_TREE_CHANGED = 2,
+	BTRFS_COMPARE_TREE_SAME = 3,
+};
+
+typedef int (*iterate_inode_ref_t)(int, u64, int, struct fs_path *, void *);
+
+typedef int (*iterate_dir_item_t)(int, struct btrfs_key *, const char *, int, const char *, int, void *);
+
+struct backref_ctx {
+	struct send_ctx *sctx;
+	u64 found;
+	u64 cur_objectid;
+	u64 cur_offset;
+	u64 extent_len;
+	int found_itself;
+};
+
+enum inode_state {
+	inode_state_no_change = 0,
+	inode_state_will_create = 1,
+	inode_state_did_create = 2,
+	inode_state_will_delete = 3,
+	inode_state_did_delete = 4,
+};
+
+struct recorded_ref {
+	struct list_head list;
+	char *name;
+	struct fs_path *full_path;
+	u64 dir;
+	u64 dir_gen;
+	int name_len;
+	struct rb_node node;
+	struct rb_root *root;
+};
+
+struct find_xattr_ctx {
+	const char *name;
+	int name_len;
+	int found_idx;
+	char *found_data;
+	int found_data_len;
+};
+
+struct parent_paths_ctx {
+	struct list_head *refs;
+	struct send_ctx *sctx;
+};
+
+enum btrfs_caching_type {
+	BTRFS_CACHE_NO = 0,
+	BTRFS_CACHE_STARTED = 1,
+	BTRFS_CACHE_FINISHED = 2,
+	BTRFS_CACHE_ERROR = 3,
+};
+
+enum btrfs_reserve_flush_enum {
+	BTRFS_RESERVE_NO_FLUSH = 0,
+	BTRFS_RESERVE_FLUSH_LIMIT = 1,
+	BTRFS_RESERVE_FLUSH_EVICT = 2,
+	BTRFS_RESERVE_FLUSH_DATA = 3,
+	BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE = 4,
+	BTRFS_RESERVE_FLUSH_ALL = 5,
+	BTRFS_RESERVE_FLUSH_ALL_STEAL = 6,
+};
+
+enum btrfs_chunk_alloc_enum {
+	CHUNK_ALLOC_NO_FORCE = 0,
+	CHUNK_ALLOC_LIMITED = 1,
+	CHUNK_ALLOC_FORCE = 2,
+	CHUNK_ALLOC_FORCE_FOR_EXTENT = 3,
+};
+
+struct efi_generic_dev_path {
+	u8 type;
+	u8 sub_type;
+	u16 length;
+};
+
+typedef u16 ucs2_char_t;
+
+struct efi_variable {
+	efi_char16_t VariableName[512];
+	efi_guid_t VendorGuid;
+	long unsigned int DataSize;
+	__u8 Data[1024];
+	efi_status_t Status;
+	__u32 Attributes;
+} __attribute__((packed));
+
+struct efivar_entry {
+	struct efi_variable var;
+	struct list_head list;
+	struct kobject kobj;
+};
+
+struct variable_validate {
+	efi_guid_t vendor;
+	char *name;
+	bool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);
+};
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
+};
+
+struct ipc_ids {
+	int in_use;
+	short unsigned int seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	int next_id;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	atomic_t msg_bytes;
+	atomic_t msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	long unsigned int shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+struct compat_sigevent {
+	compat_sigval_t sigev_value;
+	compat_int_t sigev_signo;
+	compat_int_t sigev_notify;
+	union {
+		compat_int_t _pad[13];
+		compat_int_t _tid;
+		struct {
+			compat_uptr_t _function;
+			compat_uptr_t _attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long int m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct mqueue_fs_context {
+	struct ipc_namespace *ipc_ns;
+	bool newns;
+};
+
+struct posix_msg_tree_node {
+	struct rb_node rb_node;
+	struct list_head msg_list;
+	int priority;
+};
+
+struct ext_wait_queue {
+	struct task_struct *task;
+	struct list_head list;
+	struct msg_msg *msg;
+	int state;
+};
+
+struct mqueue_inode_info {
+	spinlock_t lock;
+	struct inode vfs_inode;
+	wait_queue_head_t wait_q;
+	struct rb_root msg_tree;
+	struct rb_node *msg_tree_rightmost;
+	struct posix_msg_tree_node *node_cache;
+	struct mq_attr attr;
+	struct sigevent notify;
+	struct pid *notify_owner;
+	u32 notify_self_exec_id;
+	struct user_namespace *notify_user_ns;
+	struct ucounts *ucounts;
+	struct sock *notify_sock;
+	struct sk_buff *notify_cookie;
+	struct ext_wait_queue e_wait_q[2];
+	long unsigned int qsize;
+};
+
+struct compat_mq_attr {
+	compat_long_t mq_flags;
+	compat_long_t mq_maxmsg;
+	compat_long_t mq_msgsize;
+	compat_long_t mq_curmsgs;
+	compat_long_t __reserved[4];
+};
+
+enum tpm_duration {
+	TPM_SHORT = 0,
+	TPM_MEDIUM = 1,
+	TPM_LONG = 2,
+	TPM_LONG_LONG = 3,
+	TPM_UNDEFINED = 4,
+	TPM_NUM_DURATIONS = 4,
+};
+
+struct trusted_key_payload {
+	struct callback_head rcu;
+	unsigned int key_len;
+	unsigned int blob_len;
+	unsigned char migratable;
+	unsigned char old_format;
+	unsigned char key[129];
+	unsigned char blob[512];
+};
+
+struct trusted_key_ops {
+	unsigned char migratable;
+	int (*init)();
+	int (*seal)(struct trusted_key_payload *, char *);
+	int (*unseal)(struct trusted_key_payload *, char *);
+	int (*get_random)(unsigned char *, size_t);
+	void (*exit)();
+};
+
+struct trusted_key_source {
+	char *name;
+	struct trusted_key_ops *ops;
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+enum {
+	Opt_err = 0,
+	Opt_new = 1,
+	Opt_load = 2,
+	Opt_update = 3,
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+struct ethtool_drvinfo {
+	__u32 cmd;
+	char driver[32];
+	char version[32];
+	char fw_version[32];
+	char bus_info[32];
+	char erom_version[32];
+	char reserved2[12];
+	__u32 n_priv_flags;
+	__u32 n_stats;
+	__u32 testinfo_len;
+	__u32 eedump_len;
+	__u32 regdump_len;
+};
+
+struct ethtool_wolinfo {
+	__u32 cmd;
+	__u32 supported;
+	__u32 wolopts;
+	__u8 sopass[6];
+};
+
+struct ethtool_tunable {
+	__u32 cmd;
+	__u32 id;
+	__u32 type_id;
+	__u32 len;
+	void *data[0];
+};
+
+struct ethtool_regs {
+	__u32 cmd;
+	__u32 version;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eeprom {
+	__u32 cmd;
+	__u32 magic;
+	__u32 offset;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eee {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertised;
+	__u32 lp_advertised;
+	__u32 eee_active;
+	__u32 eee_enabled;
+	__u32 tx_lpi_enabled;
+	__u32 tx_lpi_timer;
+	__u32 reserved[2];
+};
+
+struct ethtool_modinfo {
+	__u32 cmd;
+	__u32 type;
+	__u32 eeprom_len;
+	__u32 reserved[8];
+};
+
+struct ethtool_coalesce {
+	__u32 cmd;
+	__u32 rx_coalesce_usecs;
+	__u32 rx_max_coalesced_frames;
+	__u32 rx_coalesce_usecs_irq;
+	__u32 rx_max_coalesced_frames_irq;
+	__u32 tx_coalesce_usecs;
+	__u32 tx_max_coalesced_frames;
+	__u32 tx_coalesce_usecs_irq;
+	__u32 tx_max_coalesced_frames_irq;
+	__u32 stats_block_coalesce_usecs;
+	__u32 use_adaptive_rx_coalesce;
+	__u32 use_adaptive_tx_coalesce;
+	__u32 pkt_rate_low;
+	__u32 rx_coalesce_usecs_low;
+	__u32 rx_max_coalesced_frames_low;
+	__u32 tx_coalesce_usecs_low;
+	__u32 tx_max_coalesced_frames_low;
+	__u32 pkt_rate_high;
+	__u32 rx_coalesce_usecs_high;
+	__u32 rx_max_coalesced_frames_high;
+	__u32 tx_coalesce_usecs_high;
+	__u32 tx_max_coalesced_frames_high;
+	__u32 rate_sample_interval;
+};
+
+struct ethtool_ringparam {
+	__u32 cmd;
+	__u32 rx_max_pending;
+	__u32 rx_mini_max_pending;
+	__u32 rx_jumbo_max_pending;
+	__u32 tx_max_pending;
+	__u32 rx_pending;
+	__u32 rx_mini_pending;
+	__u32 rx_jumbo_pending;
+	__u32 tx_pending;
+};
+
+struct ethtool_channels {
+	__u32 cmd;
+	__u32 max_rx;
+	__u32 max_tx;
+	__u32 max_other;
+	__u32 max_combined;
+	__u32 rx_count;
+	__u32 tx_count;
+	__u32 other_count;
+	__u32 combined_count;
+};
+
+struct ethtool_pauseparam {
+	__u32 cmd;
+	__u32 autoneg;
+	__u32 rx_pause;
+	__u32 tx_pause;
+};
+
+enum ethtool_link_ext_state {
+	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
+	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
+	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
+	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
+	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
+	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
+	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
+	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
+	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
+	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
+};
+
+enum ethtool_link_ext_substate_autoneg {
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
+};
+
+enum ethtool_link_ext_substate_link_training {
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
+};
+
+enum ethtool_link_ext_substate_link_logical_mismatch {
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
+};
+
+enum ethtool_link_ext_substate_bad_signal_integrity {
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
+};
+
+enum ethtool_link_ext_substate_cable_issue {
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
+};
+
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+struct ethtool_test {
+	__u32 cmd;
+	__u32 flags;
+	__u32 reserved;
+	__u32 len;
+	__u64 data[0];
+};
+
+struct ethtool_stats {
+	__u32 cmd;
+	__u32 n_stats;
+	__u64 data[0];
+};
+
+struct ethtool_tcpip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 spi;
+	__u8 tos;
+};
+
+struct ethtool_usrip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 l4_4_bytes;
+	__u8 tos;
+	__u8 ip_ver;
+	__u8 proto;
+};
+
+struct ethtool_tcpip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tclass;
+};
+
+struct ethtool_ah_espip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 spi;
+	__u8 tclass;
+};
+
+struct ethtool_usrip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 l4_4_bytes;
+	__u8 tclass;
+	__u8 l4_proto;
+};
+
+union ethtool_flow_union {
+	struct ethtool_tcpip4_spec tcp_ip4_spec;
+	struct ethtool_tcpip4_spec udp_ip4_spec;
+	struct ethtool_tcpip4_spec sctp_ip4_spec;
+	struct ethtool_ah_espip4_spec ah_ip4_spec;
+	struct ethtool_ah_espip4_spec esp_ip4_spec;
+	struct ethtool_usrip4_spec usr_ip4_spec;
+	struct ethtool_tcpip6_spec tcp_ip6_spec;
+	struct ethtool_tcpip6_spec udp_ip6_spec;
+	struct ethtool_tcpip6_spec sctp_ip6_spec;
+	struct ethtool_ah_espip6_spec ah_ip6_spec;
+	struct ethtool_ah_espip6_spec esp_ip6_spec;
+	struct ethtool_usrip6_spec usr_ip6_spec;
+	struct ethhdr ether_spec;
+	__u8 hdata[52];
+};
+
+struct ethtool_flow_ext {
+	__u8 padding[2];
+	unsigned char h_dest[6];
+	__be16 vlan_etype;
+	__be16 vlan_tci;
+	__be32 data[2];
+};
+
+struct ethtool_rx_flow_spec {
+	__u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	__u64 ring_cookie;
+	__u32 location;
+};
+
+struct ethtool_rxnfc {
+	__u32 cmd;
+	__u32 flow_type;
+	__u64 data;
+	struct ethtool_rx_flow_spec fs;
+	union {
+		__u32 rule_cnt;
+		__u32 rss_context;
+	};
+	__u32 rule_locs[0];
+};
+
+struct ethtool_flash {
+	__u32 cmd;
+	__u32 region;
+	char data[128];
+};
+
+struct ethtool_dump {
+	__u32 cmd;
+	__u32 version;
+	__u32 flag;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_ts_info {
+	__u32 cmd;
+	__u32 so_timestamping;
+	__s32 phc_index;
+	__u32 tx_types;
+	__u32 tx_reserved[3];
+	__u32 rx_filters;
+	__u32 rx_reserved[3];
+};
+
+struct ethtool_fecparam {
+	__u32 cmd;
+	__u32 active_fec;
+	__u32 fec;
+	__u32 reserved;
+};
+
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 93,
+};
+
+struct ethtool_link_settings {
+	__u32 cmd;
+	__u32 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__s8 link_mode_masks_nwords;
+	__u8 transceiver;
+	__u8 master_slave_cfg;
+	__u8 master_slave_state;
+	__u8 reserved1[1];
+	__u32 reserved[7];
+	__u32 link_mode_masks[0];
+};
+
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u32 cqe_size;
+};
+
+struct ethtool_link_ext_state_info {
+	enum ethtool_link_ext_state link_ext_state;
+	union {
+		enum ethtool_link_ext_substate_autoneg autoneg;
+		enum ethtool_link_ext_substate_link_training link_training;
+		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
+		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
+		enum ethtool_link_ext_substate_cable_issue cable_issue;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
+	};
+};
+
+struct ethtool_link_ksettings {
+	struct ethtool_link_settings base;
+	struct {
+		long unsigned int supported[2];
+		long unsigned int advertising[2];
+		long unsigned int lp_advertising[2];
+	} link_modes;
+	u32 lanes;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+};
+
+struct ethtool_eth_mac_stats {
+	u64 FramesTransmittedOK;
+	u64 SingleCollisionFrames;
+	u64 MultipleCollisionFrames;
+	u64 FramesReceivedOK;
+	u64 FrameCheckSequenceErrors;
+	u64 AlignmentErrors;
+	u64 OctetsTransmittedOK;
+	u64 FramesWithDeferredXmissions;
+	u64 LateCollisions;
+	u64 FramesAbortedDueToXSColls;
+	u64 FramesLostDueToIntMACXmitError;
+	u64 CarrierSenseErrors;
+	u64 OctetsReceivedOK;
+	u64 FramesLostDueToIntMACRcvError;
+	u64 MulticastFramesXmittedOK;
+	u64 BroadcastFramesXmittedOK;
+	u64 FramesWithExcessiveDeferral;
+	u64 MulticastFramesReceivedOK;
+	u64 BroadcastFramesReceivedOK;
+	u64 InRangeLengthErrors;
+	u64 OutOfRangeLengthField;
+	u64 FrameTooLongErrors;
+};
+
+struct ethtool_eth_phy_stats {
+	u64 SymbolErrorDuringCarrier;
+};
+
+struct ethtool_eth_ctrl_stats {
+	u64 MACControlFramesTransmitted;
+	u64 MACControlFramesReceived;
+	u64 UnsupportedOpcodesReceived;
+};
+
+struct ethtool_pause_stats {
+	u64 tx_pause_frames;
+	u64 rx_pause_frames;
+};
+
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
+};
+
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
+};
+
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
+};
+
+struct ethtool_rmon_stats {
+	u64 undersize_pkts;
+	u64 oversize_pkts;
+	u64 fragments;
+	u64 jabbers;
+	u64 hist[10];
+	u64 hist_tx[10];
+};
+
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
+};
+
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
+};
+
+enum ib_uverbs_write_cmds {
+	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
+	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
+	IB_USER_VERBS_CMD_QUERY_PORT = 2,
+	IB_USER_VERBS_CMD_ALLOC_PD = 3,
+	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
+	IB_USER_VERBS_CMD_CREATE_AH = 5,
+	IB_USER_VERBS_CMD_MODIFY_AH = 6,
+	IB_USER_VERBS_CMD_QUERY_AH = 7,
+	IB_USER_VERBS_CMD_DESTROY_AH = 8,
+	IB_USER_VERBS_CMD_REG_MR = 9,
+	IB_USER_VERBS_CMD_REG_SMR = 10,
+	IB_USER_VERBS_CMD_REREG_MR = 11,
+	IB_USER_VERBS_CMD_QUERY_MR = 12,
+	IB_USER_VERBS_CMD_DEREG_MR = 13,
+	IB_USER_VERBS_CMD_ALLOC_MW = 14,
+	IB_USER_VERBS_CMD_BIND_MW = 15,
+	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
+	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
+	IB_USER_VERBS_CMD_CREATE_CQ = 18,
+	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
+	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
+	IB_USER_VERBS_CMD_POLL_CQ = 21,
+	IB_USER_VERBS_CMD_PEEK_CQ = 22,
+	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
+	IB_USER_VERBS_CMD_CREATE_QP = 24,
+	IB_USER_VERBS_CMD_QUERY_QP = 25,
+	IB_USER_VERBS_CMD_MODIFY_QP = 26,
+	IB_USER_VERBS_CMD_DESTROY_QP = 27,
+	IB_USER_VERBS_CMD_POST_SEND = 28,
+	IB_USER_VERBS_CMD_POST_RECV = 29,
+	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
+	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
+	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
+	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
+	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
+	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
+	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
+	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
+	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
+	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
+	IB_USER_VERBS_CMD_OPEN_QP = 40,
+};
+
+enum ib_uverbs_wc_opcode {
+	IB_UVERBS_WC_SEND = 0,
+	IB_UVERBS_WC_RDMA_WRITE = 1,
+	IB_UVERBS_WC_RDMA_READ = 2,
+	IB_UVERBS_WC_COMP_SWAP = 3,
+	IB_UVERBS_WC_FETCH_ADD = 4,
+	IB_UVERBS_WC_BIND_MW = 5,
+	IB_UVERBS_WC_LOCAL_INV = 6,
+	IB_UVERBS_WC_TSO = 7,
+};
+
+enum ib_uverbs_create_qp_mask {
+	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
+};
+
+enum ib_uverbs_wr_opcode {
+	IB_UVERBS_WR_RDMA_WRITE = 0,
+	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_UVERBS_WR_SEND = 2,
+	IB_UVERBS_WR_SEND_WITH_IMM = 3,
+	IB_UVERBS_WR_RDMA_READ = 4,
+	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_UVERBS_WR_LOCAL_INV = 7,
+	IB_UVERBS_WR_BIND_MW = 8,
+	IB_UVERBS_WR_SEND_WITH_INV = 9,
+	IB_UVERBS_WR_TSO = 10,
+	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
+	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+};
+
+enum ib_uverbs_device_cap_flags {
+	IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1,
+	IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2,
+	IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4,
+	IB_UVERBS_DEVICE_RAW_MULTI = 8,
+	IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16,
+	IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32,
+	IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64,
+	IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128,
+	IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256,
+	IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024,
+	IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048,
+	IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096,
+	IB_UVERBS_DEVICE_SRQ_RESIZE = 8192,
+	IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384,
+	IB_UVERBS_DEVICE_MEM_WINDOW = 131072,
+	IB_UVERBS_DEVICE_UD_IP_CSUM = 262144,
+	IB_UVERBS_DEVICE_XRC = 1048576,
+	IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216,
+	IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432,
+	IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864,
+	IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912,
+	IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 0,
+	IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 0,
+};
+
+enum ib_uverbs_raw_packet_caps {
+	IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+	IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+	IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+	IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
+};
+
+enum ib_uverbs_access_flags {
+	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
+	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
+	IB_UVERBS_ACCESS_REMOTE_READ = 4,
+	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
+	IB_UVERBS_ACCESS_MW_BIND = 16,
+	IB_UVERBS_ACCESS_ZERO_BASED = 32,
+	IB_UVERBS_ACCESS_ON_DEMAND = 64,
+	IB_UVERBS_ACCESS_HUGETLB = 128,
+	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
+	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
+};
+
+enum ib_uverbs_srq_type {
+	IB_UVERBS_SRQT_BASIC = 0,
+	IB_UVERBS_SRQT_XRC = 1,
+	IB_UVERBS_SRQT_TM = 2,
+};
+
+enum ib_uverbs_wq_type {
+	IB_UVERBS_WQT_RQ = 0,
+};
+
+enum ib_uverbs_wq_flags {
+	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
+	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
+	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
+	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
+};
+
+enum ib_uverbs_qp_type {
+	IB_UVERBS_QPT_RC = 2,
+	IB_UVERBS_QPT_UC = 3,
+	IB_UVERBS_QPT_UD = 4,
+	IB_UVERBS_QPT_RAW_PACKET = 8,
+	IB_UVERBS_QPT_XRC_INI = 9,
+	IB_UVERBS_QPT_XRC_TGT = 10,
+	IB_UVERBS_QPT_DRIVER = 255,
+};
+
+enum ib_uverbs_qp_create_flags {
+	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
+	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
+	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
+	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
+	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
+};
+
+enum ib_uverbs_gid_type {
+	IB_UVERBS_GID_TYPE_IB = 0,
+	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
+	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
+};
+
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
+};
+
+struct lsm_network_audit {
+	int netif;
+	const struct sock *sk;
+	u16 family;
+	__be16 dport;
+	__be16 sport;
+	union {
+		struct {
+			__be32 daddr;
+			__be32 saddr;
+		} v4;
+		struct {
+			struct in6_addr daddr;
+			struct in6_addr saddr;
+		} v6;
+	} fam;
+};
+
+struct lsm_ioctlop_audit {
+	struct path path;
+	u16 cmd;
+};
+
+struct lsm_ibpkey_audit {
+	u64 subnet_prefix;
+	u16 pkey;
+};
+
+struct lsm_ibendport_audit {
+	const char *dev_name;
+	u8 port;
+};
+
+struct selinux_state;
+
+struct selinux_audit_data {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	u32 requested;
+	u32 audited;
+	u32 denied;
+	int result;
+	struct selinux_state *state;
+};
+
+struct common_audit_data {
+	char type;
+	union {
+		struct path path;
+		struct dentry *dentry;
+		struct inode *inode;
+		struct lsm_network_audit *net;
+		int cap;
+		int ipc_id;
+		struct task_struct *tsk;
+		struct {
+			key_serial_t key;
+			char *key_desc;
+		} key_struct;
+		char *kmod_name;
+		struct lsm_ioctlop_audit *op;
+		struct file *file;
+		struct lsm_ibpkey_audit *ibpkey;
+		struct lsm_ibendport_audit *ibendport;
+		int reason;
+		const char *anonclass;
+	} u;
+	union {
+		struct selinux_audit_data *selinux_audit_data;
+	};
+};
+
+enum {
+	POLICYDB_CAP_NETPEER = 0,
+	POLICYDB_CAP_OPENPERM = 1,
+	POLICYDB_CAP_EXTSOCKCLASS = 2,
+	POLICYDB_CAP_ALWAYSNETWORK = 3,
+	POLICYDB_CAP_CGROUPSECLABEL = 4,
+	POLICYDB_CAP_NNP_NOSUID_TRANSITION = 5,
+	POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS = 6,
+	POLICYDB_CAP_IOCTL_SKIP_CLOEXEC = 7,
+	__POLICYDB_CAP_MAX = 8,
+};
+
+struct selinux_avc;
+
+struct selinux_policy;
+
+struct selinux_state {
+	bool enforcing;
+	bool checkreqprot;
+	bool initialized;
+	bool policycap[8];
+	struct page *status_page;
+	struct mutex status_lock;
+	struct selinux_avc *avc;
+	struct selinux_policy *policy;
+	struct mutex policy_mutex;
+};
+
+struct avc_cache {
+	struct hlist_head slots[512];
+	spinlock_t slots_lock[512];
+	atomic_t lru_hint;
+	atomic_t active_nodes;
+	u32 latest_notif;
+};
+
+struct selinux_avc {
+	unsigned int avc_cache_threshold;
+	struct avc_cache avc_cache;
+};
+
+struct av_decision {
+	u32 allowed;
+	u32 auditallow;
+	u32 auditdeny;
+	u32 seqno;
+	u32 flags;
+};
+
+struct extended_perms_data {
+	u32 p[8];
+};
+
+struct extended_perms_decision {
+	u8 used;
+	u8 driver;
+	struct extended_perms_data *allowed;
+	struct extended_perms_data *auditallow;
+	struct extended_perms_data *dontaudit;
+};
+
+struct extended_perms {
+	u16 len;
+	struct extended_perms_data drivers;
+};
+
+struct avc_cache_stats {
+	unsigned int lookups;
+	unsigned int misses;
+	unsigned int allocations;
+	unsigned int reclaims;
+	unsigned int frees;
+};
+
+struct security_class_mapping {
+	const char *name;
+	const char *perms[33];
+};
+
+struct trace_event_raw_selinux_audited {
+	struct trace_entry ent;
+	u32 requested;
+	u32 denied;
+	u32 audited;
+	int result;
+	u32 __data_loc_scontext;
+	u32 __data_loc_tcontext;
+	u32 __data_loc_tclass;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_selinux_audited {
+	u32 scontext;
+	u32 tcontext;
+	u32 tclass;
+};
+
+typedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);
+
+struct avc_xperms_node;
+
+struct avc_entry {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	struct av_decision avd;
+	struct avc_xperms_node *xp_node;
+};
+
+struct avc_xperms_node {
+	struct extended_perms xp;
+	struct list_head xpd_head;
+};
+
+struct avc_node {
+	struct avc_entry ae;
+	struct hlist_node list;
+	struct callback_head rhead;
+};
+
+struct avc_xperms_decision_node {
+	struct extended_perms_decision xpd;
+	struct list_head xpd_list;
+};
+
+struct avc_callback_node {
+	int (*callback)(u32);
+	u32 events;
+	struct avc_callback_node *next;
+};
+
+struct hashtab_key_params {
+	u32 (*hash)(const void *);
+	int (*cmp)(const void *, const void *);
+};
+
+struct hashtab_node {
+	void *key;
+	void *datum;
+	struct hashtab_node *next;
+};
+
+struct hashtab {
+	struct hashtab_node **htable;
+	u32 size;
+	u32 nel;
+};
+
+struct symtab {
+	struct hashtab table;
+	u32 nprim;
+};
+
+struct avtab_key {
+	u16 source_type;
+	u16 target_type;
+	u16 target_class;
+	u16 specified;
+};
+
+struct avtab_extended_perms {
+	u8 specified;
+	u8 driver;
+	struct extended_perms_data perms;
+};
+
+struct avtab_datum {
+	union {
+		u32 data;
+		struct avtab_extended_perms *xperms;
+	} u;
+};
+
+struct avtab_node {
+	struct avtab_key key;
+	struct avtab_datum datum;
+	struct avtab_node *next;
+};
+
+struct avtab {
+	struct avtab_node **htable;
+	u32 nel;
+	u32 nslot;
+	u32 mask;
+};
+
+struct ebitmap_node {
+	struct ebitmap_node *next;
+	long unsigned int maps[6];
+	u32 startbit;
+};
+
+struct ebitmap {
+	struct ebitmap_node *node;
+	u32 highbit;
+};
+
+struct mls_level {
+	u32 sens;
+	struct ebitmap cat;
+};
+
+struct mls_range {
+	struct mls_level level[2];
+};
+
+struct context {
+	u32 user;
+	u32 role;
+	u32 type;
+	u32 len;
+	struct mls_range range;
+	char *str;
+};
+
+struct sidtab_str_cache;
+
+struct sidtab_entry {
+	u32 sid;
+	u32 hash;
+	struct context context;
+	struct sidtab_str_cache *cache;
+	struct hlist_node list;
+};
+
+struct sidtab_node_inner;
+
+struct sidtab_node_leaf;
+
+union sidtab_entry_inner {
+	struct sidtab_node_inner *ptr_inner;
+	struct sidtab_node_leaf *ptr_leaf;
+};
+
+struct sidtab_node_inner {
+	union sidtab_entry_inner entries[512];
+};
+
+struct sidtab_node_leaf {
+	struct sidtab_entry entries[39];
+};
+
+struct sidtab_isid_entry {
+	int set;
+	struct sidtab_entry entry;
+};
+
+struct sidtab;
+
+struct sidtab_convert_params {
+	int (*func)(struct context *, struct context *, void *, gfp_t);
+	void *args;
+	struct sidtab *target;
+};
+
+struct sidtab {
+	union sidtab_entry_inner roots[4];
+	u32 count;
+	struct sidtab_convert_params *convert;
+	bool frozen;
+	spinlock_t lock;
+	u32 cache_free_slots;
+	struct list_head cache_lru_list;
+	spinlock_t cache_lock;
+	struct sidtab_isid_entry isids[27];
+	struct hlist_head context_to_sid[512];
+};
+
+struct type_set;
+
+struct constraint_expr {
+	u32 expr_type;
+	u32 attr;
+	u32 op;
+	struct ebitmap names;
+	struct type_set *type_names;
+	struct constraint_expr *next;
+};
+
+struct type_set {
+	struct ebitmap types;
+	struct ebitmap negset;
+	u32 flags;
+};
+
+struct constraint_node {
+	u32 permissions;
+	struct constraint_expr *expr;
+	struct constraint_node *next;
+};
+
+struct perm_datum {
+	u32 value;
+};
+
+struct common_datum {
+	u32 value;
+	struct symtab permissions;
+};
+
+struct class_datum {
+	u32 value;
+	char *comkey;
+	struct common_datum *comdatum;
+	struct symtab permissions;
+	struct constraint_node *constraints;
+	struct constraint_node *validatetrans;
+	char default_user;
+	char default_role;
+	char default_type;
+	char default_range;
+};
+
+struct role_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap dominates;
+	struct ebitmap types;
+};
+
+struct role_trans_key {
+	u32 role;
+	u32 type;
+	u32 tclass;
+};
+
+struct role_trans_datum {
+	u32 new_role;
+};
+
+struct filename_trans_key {
+	u32 ttype;
+	u16 tclass;
+	const char *name;
+};
+
+struct filename_trans_datum {
+	struct ebitmap stypes;
+	u32 otype;
+	struct filename_trans_datum *next;
+};
+
+struct role_allow {
+	u32 role;
+	u32 new_role;
+	struct role_allow *next;
+};
+
+struct type_datum {
+	u32 value;
+	u32 bounds;
+	unsigned char primary;
+	unsigned char attribute;
+};
+
+struct user_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap roles;
+	struct mls_range range;
+	struct mls_level dfltlevel;
+};
+
+struct level_datum {
+	struct mls_level *level;
+	unsigned char isalias;
+};
+
+struct cat_datum {
+	u32 value;
+	unsigned char isalias;
+};
+
+struct range_trans {
+	u32 source_type;
+	u32 target_type;
+	u32 target_class;
+};
+
+struct cond_bool_datum {
+	__u32 value;
+	int state;
+};
+
+struct ocontext {
+	union {
+		char *name;
+		struct {
+			u8 protocol;
+			u16 low_port;
+			u16 high_port;
+		} port;
+		struct {
+			u32 addr;
+			u32 mask;
+		} node;
+		struct {
+			u32 addr[4];
+			u32 mask[4];
+		} node6;
+		struct {
+			u64 subnet_prefix;
+			u16 low_pkey;
+			u16 high_pkey;
+		} ibpkey;
+		struct {
+			char *dev_name;
+			u8 port;
+		} ibendport;
+	} u;
+	union {
+		u32 sclass;
+		u32 behavior;
+	} v;
+	struct context context[2];
+	u32 sid[2];
+	struct ocontext *next;
+};
+
+struct genfs {
+	char *fstype;
+	struct ocontext *head;
+	struct genfs *next;
+};
+
+struct cond_node;
+
+struct policydb {
+	int mls_enabled;
+	struct symtab symtab[8];
+	char **sym_val_to_name[8];
+	struct class_datum **class_val_to_struct;
+	struct role_datum **role_val_to_struct;
+	struct user_datum **user_val_to_struct;
+	struct type_datum **type_val_to_struct;
+	struct avtab te_avtab;
+	struct hashtab role_tr;
+	struct ebitmap filename_trans_ttypes;
+	struct hashtab filename_trans;
+	u32 compat_filename_trans_count;
+	struct cond_bool_datum **bool_val_to_struct;
+	struct avtab te_cond_avtab;
+	struct cond_node *cond_list;
+	u32 cond_list_len;
+	struct role_allow *role_allow;
+	struct ocontext *ocontexts[9];
+	struct genfs *genfs;
+	struct hashtab range_tr;
+	struct ebitmap *type_attr_map_array;
+	struct ebitmap policycaps;
+	struct ebitmap permissive_map;
+	size_t len;
+	unsigned int policyvers;
+	unsigned int reject_unknown: 1;
+	unsigned int allow_unknown: 1;
+	u16 process_class;
+	u32 process_trans_perms;
+};
+
+struct cond_expr_node;
+
+struct cond_expr {
+	struct cond_expr_node *nodes;
+	u32 len;
+};
+
+struct cond_av_list {
+	struct avtab_node **nodes;
+	u32 len;
+};
+
+struct cond_node {
+	int cur_state;
+	struct cond_expr expr;
+	struct cond_av_list true_list;
+	struct cond_av_list false_list;
+};
+
+struct policy_file {
+	char *data;
+	size_t len;
+};
+
+struct policy_data {
+	struct policydb *p;
+	void *fp;
+};
+
+struct cond_expr_node {
+	u32 expr_type;
+	u32 bool;
+};
+
+struct policydb_compat_info {
+	int version;
+	int sym_num;
+	int ocon_num;
+};
+
+typedef int __kernel_key_t;
+
+typedef __kernel_key_t key_t;
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	long unsigned int seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sembuf {
+	short unsigned int sem_num;
+	short int sem_op;
+	short int sem_flg;
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+struct watch_notification;
+
+struct sctp_association;
+
+struct xfrm_sec_ctx;
+
+struct xfrm_user_sec_ctx;
+
+union security_list_options {
+	int (*binder_set_context_mgr)(const struct cred *);
+	int (*binder_transaction)(const struct cred *, const struct cred *);
+	int (*binder_transfer_binder)(const struct cred *, const struct cred *);
+	int (*binder_transfer_file)(const struct cred *, const struct cred *, struct file *);
+	int (*ptrace_access_check)(struct task_struct *, unsigned int);
+	int (*ptrace_traceme)(struct task_struct *);
+	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
+	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
+	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
+	int (*quotactl)(int, int, int, struct super_block *);
+	int (*quota_on)(struct dentry *);
+	int (*syslog)(int);
+	int (*settime)(const struct timespec64 *, const struct timezone *);
+	int (*vm_enough_memory)(struct mm_struct *, long int);
+	int (*bprm_creds_for_exec)(struct linux_binprm *);
+	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
+	int (*bprm_check_security)(struct linux_binprm *);
+	void (*bprm_committing_creds)(struct linux_binprm *);
+	void (*bprm_committed_creds)(struct linux_binprm *);
+	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
+	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*sb_alloc_security)(struct super_block *);
+	void (*sb_delete)(struct super_block *);
+	void (*sb_free_security)(struct super_block *);
+	void (*sb_free_mnt_opts)(void *);
+	int (*sb_eat_lsm_opts)(char *, void **);
+	int (*sb_mnt_opts_compat)(struct super_block *, void *);
+	int (*sb_remount)(struct super_block *, void *);
+	int (*sb_kern_mount)(struct super_block *);
+	int (*sb_show_options)(struct seq_file *, struct super_block *);
+	int (*sb_statfs)(struct dentry *);
+	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
+	int (*sb_umount)(struct vfsmount *, int);
+	int (*sb_pivotroot)(const struct path *, const struct path *);
+	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
+	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
+	int (*move_mount)(const struct path *, const struct path *);
+	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, const char **, void **, u32 *);
+	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
+	int (*path_unlink)(const struct path *, struct dentry *);
+	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
+	int (*path_rmdir)(const struct path *, struct dentry *);
+	int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
+	int (*path_truncate)(const struct path *);
+	int (*path_symlink)(const struct path *, struct dentry *, const char *);
+	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
+	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *, unsigned int);
+	int (*path_chmod)(const struct path *, umode_t);
+	int (*path_chown)(const struct path *, kuid_t, kgid_t);
+	int (*path_chroot)(const struct path *);
+	int (*path_notify)(const struct path *, u64, unsigned int);
+	int (*inode_alloc_security)(struct inode *);
+	void (*inode_free_security)(struct inode *);
+	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
+	int (*inode_init_security_anon)(struct inode *, const struct qstr *, const struct inode *);
+	int (*inode_create)(struct inode *, struct dentry *, umode_t);
+	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
+	int (*inode_unlink)(struct inode *, struct dentry *);
+	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
+	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*inode_rmdir)(struct inode *, struct dentry *);
+	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
+	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
+	int (*inode_readlink)(struct dentry *);
+	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
+	int (*inode_permission)(struct inode *, int);
+	int (*inode_setattr)(struct dentry *, struct iattr *);
+	int (*inode_getattr)(const struct path *);
+	int (*inode_setxattr)(struct user_namespace *, struct dentry *, const char *, const void *, size_t, int);
+	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
+	int (*inode_getxattr)(struct dentry *, const char *);
+	int (*inode_listxattr)(struct dentry *);
+	int (*inode_removexattr)(struct user_namespace *, struct dentry *, const char *);
+	int (*inode_need_killpriv)(struct dentry *);
+	int (*inode_killpriv)(struct user_namespace *, struct dentry *);
+	int (*inode_getsecurity)(struct user_namespace *, struct inode *, const char *, void **, bool);
+	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
+	int (*inode_listsecurity)(struct inode *, char *, size_t);
+	void (*inode_getsecid)(struct inode *, u32 *);
+	int (*inode_copy_up)(struct dentry *, struct cred **);
+	int (*inode_copy_up_xattr)(const char *);
+	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
+	int (*file_permission)(struct file *, int);
+	int (*file_alloc_security)(struct file *);
+	void (*file_free_security)(struct file *);
+	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*mmap_addr)(long unsigned int);
+	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
+	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
+	int (*file_lock)(struct file *, unsigned int);
+	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
+	void (*file_set_fowner)(struct file *);
+	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
+	int (*file_receive)(struct file *);
+	int (*file_open)(struct file *);
+	int (*task_alloc)(struct task_struct *, long unsigned int);
+	void (*task_free)(struct task_struct *);
+	int (*cred_alloc_blank)(struct cred *, gfp_t);
+	void (*cred_free)(struct cred *);
+	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
+	void (*cred_transfer)(struct cred *, const struct cred *);
+	void (*cred_getsecid)(const struct cred *, u32 *);
+	int (*kernel_act_as)(struct cred *, u32);
+	int (*kernel_create_files_as)(struct cred *, struct inode *);
+	int (*kernel_module_request)(char *);
+	int (*kernel_load_data)(enum kernel_load_data_id, bool);
+	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
+	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
+	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
+	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgroups)(struct cred *, const struct cred *);
+	int (*task_setpgid)(struct task_struct *, pid_t);
+	int (*task_getpgid)(struct task_struct *);
+	int (*task_getsid)(struct task_struct *);
+	void (*current_getsecid_subj)(u32 *);
+	void (*task_getsecid_obj)(struct task_struct *, u32 *);
+	int (*task_setnice)(struct task_struct *, int);
+	int (*task_setioprio)(struct task_struct *, int);
+	int (*task_getioprio)(struct task_struct *);
+	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
+	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
+	int (*task_setscheduler)(struct task_struct *);
+	int (*task_getscheduler)(struct task_struct *);
+	int (*task_movememory)(struct task_struct *);
+	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
+	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	void (*task_to_inode)(struct task_struct *, struct inode *);
+	int (*ipc_permission)(struct kern_ipc_perm *, short int);
+	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
+	int (*msg_msg_alloc_security)(struct msg_msg *);
+	void (*msg_msg_free_security)(struct msg_msg *);
+	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
+	void (*msg_queue_free_security)(struct kern_ipc_perm *);
+	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
+	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
+	int (*shm_alloc_security)(struct kern_ipc_perm *);
+	void (*shm_free_security)(struct kern_ipc_perm *);
+	int (*shm_associate)(struct kern_ipc_perm *, int);
+	int (*shm_shmctl)(struct kern_ipc_perm *, int);
+	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
+	int (*sem_alloc_security)(struct kern_ipc_perm *);
+	void (*sem_free_security)(struct kern_ipc_perm *);
+	int (*sem_associate)(struct kern_ipc_perm *, int);
+	int (*sem_semctl)(struct kern_ipc_perm *, int);
+	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
+	int (*netlink_send)(struct sock *, struct sk_buff *);
+	void (*d_instantiate)(struct dentry *, struct inode *);
+	int (*getprocattr)(struct task_struct *, char *, char **);
+	int (*setprocattr)(const char *, void *, size_t);
+	int (*ismaclabel)(const char *);
+	int (*secid_to_secctx)(u32, char **, u32 *);
+	int (*secctx_to_secid)(const char *, u32, u32 *);
+	void (*release_secctx)(char *, u32);
+	void (*inode_invalidate_secctx)(struct inode *);
+	int (*inode_notifysecctx)(struct inode *, void *, u32);
+	int (*inode_setsecctx)(struct dentry *, void *, u32);
+	int (*inode_getsecctx)(struct inode *, void **, u32 *);
+	int (*post_notification)(const struct cred *, const struct cred *, struct watch_notification *);
+	int (*watch_key)(struct key *);
+	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
+	int (*unix_may_send)(struct socket *, struct socket *);
+	int (*socket_create)(int, int, int, int);
+	int (*socket_post_create)(struct socket *, int, int, int, int);
+	int (*socket_socketpair)(struct socket *, struct socket *);
+	int (*socket_bind)(struct socket *, struct sockaddr *, int);
+	int (*socket_connect)(struct socket *, struct sockaddr *, int);
+	int (*socket_listen)(struct socket *, int);
+	int (*socket_accept)(struct socket *, struct socket *);
+	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
+	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
+	int (*socket_getsockname)(struct socket *);
+	int (*socket_getpeername)(struct socket *);
+	int (*socket_getsockopt)(struct socket *, int, int);
+	int (*socket_setsockopt)(struct socket *, int, int);
+	int (*socket_shutdown)(struct socket *, int);
+	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
+	int (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);
+	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
+	int (*sk_alloc_security)(struct sock *, int, gfp_t);
+	void (*sk_free_security)(struct sock *);
+	void (*sk_clone_security)(const struct sock *, struct sock *);
+	void (*sk_getsecid)(struct sock *, u32 *);
+	void (*sock_graft)(struct sock *, struct socket *);
+	int (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
+	void (*inet_conn_established)(struct sock *, struct sk_buff *);
+	int (*secmark_relabel_packet)(u32);
+	void (*secmark_refcount_inc)();
+	void (*secmark_refcount_dec)();
+	void (*req_classify_flow)(const struct request_sock *, struct flowi_common *);
+	int (*tun_dev_alloc_security)(void **);
+	void (*tun_dev_free_security)(void *);
+	int (*tun_dev_create)();
+	int (*tun_dev_attach_queue)(void *);
+	int (*tun_dev_attach)(struct sock *, void *);
+	int (*tun_dev_open)(void *);
+	int (*sctp_assoc_request)(struct sctp_association *, struct sk_buff *);
+	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
+	void (*sctp_sk_clone)(struct sctp_association *, struct sock *, struct sock *);
+	int (*sctp_assoc_established)(struct sctp_association *, struct sk_buff *);
+	int (*ib_pkey_access)(void *, u64, u16);
+	int (*ib_endport_manage_subnet)(void *, const char *, u8);
+	int (*ib_alloc_security)(void **);
+	void (*ib_free_security)(void *);
+	int (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);
+	int (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);
+	void (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);
+	int (*xfrm_policy_delete_security)(struct xfrm_sec_ctx *);
+	int (*xfrm_state_alloc)(struct xfrm_state *, struct xfrm_user_sec_ctx *);
+	int (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);
+	void (*xfrm_state_free_security)(struct xfrm_state *);
+	int (*xfrm_state_delete_security)(struct xfrm_state *);
+	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32);
+	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi_common *);
+	int (*xfrm_decode_session)(struct sk_buff *, u32 *, int);
+	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
+	void (*key_free)(struct key *);
+	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
+	int (*key_getsecurity)(struct key *, char **);
+	int (*audit_rule_init)(u32, u32, char *, void **);
+	int (*audit_rule_known)(struct audit_krule *);
+	int (*audit_rule_match)(u32, u32, u32, void *);
+	void (*audit_rule_free)(void *);
+	int (*bpf)(int, union bpf_attr *, unsigned int);
+	int (*bpf_map)(struct bpf_map *, fmode_t);
+	int (*bpf_prog)(struct bpf_prog *);
+	int (*bpf_map_alloc_security)(struct bpf_map *);
+	void (*bpf_map_free_security)(struct bpf_map *);
+	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
+	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
+	int (*locked_down)(enum lockdown_reason);
+	int (*lock_kernel_down)(const char *, enum lockdown_reason);
+	int (*perf_event_open)(struct perf_event_attr *, int);
+	int (*perf_event_alloc)(struct perf_event *);
+	void (*perf_event_free)(struct perf_event *);
+	int (*perf_event_read)(struct perf_event *);
+	int (*perf_event_write)(struct perf_event *);
+	int (*uring_override_creds)(const struct cred *);
+	int (*uring_sqpoll)();
+	int (*uring_cmd)(struct io_uring_cmd *);
+};
+
+struct security_hook_heads {
+	struct hlist_head binder_set_context_mgr;
+	struct hlist_head binder_transaction;
+	struct hlist_head binder_transfer_binder;
+	struct hlist_head binder_transfer_file;
+	struct hlist_head ptrace_access_check;
+	struct hlist_head ptrace_traceme;
+	struct hlist_head capget;
+	struct hlist_head capset;
+	struct hlist_head capable;
+	struct hlist_head quotactl;
+	struct hlist_head quota_on;
+	struct hlist_head syslog;
+	struct hlist_head settime;
+	struct hlist_head vm_enough_memory;
+	struct hlist_head bprm_creds_for_exec;
+	struct hlist_head bprm_creds_from_file;
+	struct hlist_head bprm_check_security;
+	struct hlist_head bprm_committing_creds;
+	struct hlist_head bprm_committed_creds;
+	struct hlist_head fs_context_dup;
+	struct hlist_head fs_context_parse_param;
+	struct hlist_head sb_alloc_security;
+	struct hlist_head sb_delete;
+	struct hlist_head sb_free_security;
+	struct hlist_head sb_free_mnt_opts;
+	struct hlist_head sb_eat_lsm_opts;
+	struct hlist_head sb_mnt_opts_compat;
+	struct hlist_head sb_remount;
+	struct hlist_head sb_kern_mount;
+	struct hlist_head sb_show_options;
+	struct hlist_head sb_statfs;
+	struct hlist_head sb_mount;
+	struct hlist_head sb_umount;
+	struct hlist_head sb_pivotroot;
+	struct hlist_head sb_set_mnt_opts;
+	struct hlist_head sb_clone_mnt_opts;
+	struct hlist_head move_mount;
+	struct hlist_head dentry_init_security;
+	struct hlist_head dentry_create_files_as;
+	struct hlist_head path_unlink;
+	struct hlist_head path_mkdir;
+	struct hlist_head path_rmdir;
+	struct hlist_head path_mknod;
+	struct hlist_head path_truncate;
+	struct hlist_head path_symlink;
+	struct hlist_head path_link;
+	struct hlist_head path_rename;
+	struct hlist_head path_chmod;
+	struct hlist_head path_chown;
+	struct hlist_head path_chroot;
+	struct hlist_head path_notify;
+	struct hlist_head inode_alloc_security;
+	struct hlist_head inode_free_security;
+	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
+	struct hlist_head inode_create;
+	struct hlist_head inode_link;
+	struct hlist_head inode_unlink;
+	struct hlist_head inode_symlink;
+	struct hlist_head inode_mkdir;
+	struct hlist_head inode_rmdir;
+	struct hlist_head inode_mknod;
+	struct hlist_head inode_rename;
+	struct hlist_head inode_readlink;
+	struct hlist_head inode_follow_link;
+	struct hlist_head inode_permission;
+	struct hlist_head inode_setattr;
+	struct hlist_head inode_getattr;
+	struct hlist_head inode_setxattr;
+	struct hlist_head inode_post_setxattr;
+	struct hlist_head inode_getxattr;
+	struct hlist_head inode_listxattr;
+	struct hlist_head inode_removexattr;
+	struct hlist_head inode_need_killpriv;
+	struct hlist_head inode_killpriv;
+	struct hlist_head inode_getsecurity;
+	struct hlist_head inode_setsecurity;
+	struct hlist_head inode_listsecurity;
+	struct hlist_head inode_getsecid;
+	struct hlist_head inode_copy_up;
+	struct hlist_head inode_copy_up_xattr;
+	struct hlist_head kernfs_init_security;
+	struct hlist_head file_permission;
+	struct hlist_head file_alloc_security;
+	struct hlist_head file_free_security;
+	struct hlist_head file_ioctl;
+	struct hlist_head mmap_addr;
+	struct hlist_head mmap_file;
+	struct hlist_head file_mprotect;
+	struct hlist_head file_lock;
+	struct hlist_head file_fcntl;
+	struct hlist_head file_set_fowner;
+	struct hlist_head file_send_sigiotask;
+	struct hlist_head file_receive;
+	struct hlist_head file_open;
+	struct hlist_head task_alloc;
+	struct hlist_head task_free;
+	struct hlist_head cred_alloc_blank;
+	struct hlist_head cred_free;
+	struct hlist_head cred_prepare;
+	struct hlist_head cred_transfer;
+	struct hlist_head cred_getsecid;
+	struct hlist_head kernel_act_as;
+	struct hlist_head kernel_create_files_as;
+	struct hlist_head kernel_module_request;
+	struct hlist_head kernel_load_data;
+	struct hlist_head kernel_post_load_data;
+	struct hlist_head kernel_read_file;
+	struct hlist_head kernel_post_read_file;
+	struct hlist_head task_fix_setuid;
+	struct hlist_head task_fix_setgid;
+	struct hlist_head task_fix_setgroups;
+	struct hlist_head task_setpgid;
+	struct hlist_head task_getpgid;
+	struct hlist_head task_getsid;
+	struct hlist_head current_getsecid_subj;
+	struct hlist_head task_getsecid_obj;
+	struct hlist_head task_setnice;
+	struct hlist_head task_setioprio;
+	struct hlist_head task_getioprio;
+	struct hlist_head task_prlimit;
+	struct hlist_head task_setrlimit;
+	struct hlist_head task_setscheduler;
+	struct hlist_head task_getscheduler;
+	struct hlist_head task_movememory;
+	struct hlist_head task_kill;
+	struct hlist_head task_prctl;
+	struct hlist_head task_to_inode;
+	struct hlist_head ipc_permission;
+	struct hlist_head ipc_getsecid;
+	struct hlist_head msg_msg_alloc_security;
+	struct hlist_head msg_msg_free_security;
+	struct hlist_head msg_queue_alloc_security;
+	struct hlist_head msg_queue_free_security;
+	struct hlist_head msg_queue_associate;
+	struct hlist_head msg_queue_msgctl;
+	struct hlist_head msg_queue_msgsnd;
+	struct hlist_head msg_queue_msgrcv;
+	struct hlist_head shm_alloc_security;
+	struct hlist_head shm_free_security;
+	struct hlist_head shm_associate;
+	struct hlist_head shm_shmctl;
+	struct hlist_head shm_shmat;
+	struct hlist_head sem_alloc_security;
+	struct hlist_head sem_free_security;
+	struct hlist_head sem_associate;
+	struct hlist_head sem_semctl;
+	struct hlist_head sem_semop;
+	struct hlist_head netlink_send;
+	struct hlist_head d_instantiate;
+	struct hlist_head getprocattr;
+	struct hlist_head setprocattr;
+	struct hlist_head ismaclabel;
+	struct hlist_head secid_to_secctx;
+	struct hlist_head secctx_to_secid;
+	struct hlist_head release_secctx;
+	struct hlist_head inode_invalidate_secctx;
+	struct hlist_head inode_notifysecctx;
+	struct hlist_head inode_setsecctx;
+	struct hlist_head inode_getsecctx;
+	struct hlist_head post_notification;
+	struct hlist_head watch_key;
+	struct hlist_head unix_stream_connect;
+	struct hlist_head unix_may_send;
+	struct hlist_head socket_create;
+	struct hlist_head socket_post_create;
+	struct hlist_head socket_socketpair;
+	struct hlist_head socket_bind;
+	struct hlist_head socket_connect;
+	struct hlist_head socket_listen;
+	struct hlist_head socket_accept;
+	struct hlist_head socket_sendmsg;
+	struct hlist_head socket_recvmsg;
+	struct hlist_head socket_getsockname;
+	struct hlist_head socket_getpeername;
+	struct hlist_head socket_getsockopt;
+	struct hlist_head socket_setsockopt;
+	struct hlist_head socket_shutdown;
+	struct hlist_head socket_sock_rcv_skb;
+	struct hlist_head socket_getpeersec_stream;
+	struct hlist_head socket_getpeersec_dgram;
+	struct hlist_head sk_alloc_security;
+	struct hlist_head sk_free_security;
+	struct hlist_head sk_clone_security;
+	struct hlist_head sk_getsecid;
+	struct hlist_head sock_graft;
+	struct hlist_head inet_conn_request;
+	struct hlist_head inet_csk_clone;
+	struct hlist_head inet_conn_established;
+	struct hlist_head secmark_relabel_packet;
+	struct hlist_head secmark_refcount_inc;
+	struct hlist_head secmark_refcount_dec;
+	struct hlist_head req_classify_flow;
+	struct hlist_head tun_dev_alloc_security;
+	struct hlist_head tun_dev_free_security;
+	struct hlist_head tun_dev_create;
+	struct hlist_head tun_dev_attach_queue;
+	struct hlist_head tun_dev_attach;
+	struct hlist_head tun_dev_open;
+	struct hlist_head sctp_assoc_request;
+	struct hlist_head sctp_bind_connect;
+	struct hlist_head sctp_sk_clone;
+	struct hlist_head sctp_assoc_established;
+	struct hlist_head ib_pkey_access;
+	struct hlist_head ib_endport_manage_subnet;
+	struct hlist_head ib_alloc_security;
+	struct hlist_head ib_free_security;
+	struct hlist_head xfrm_policy_alloc_security;
+	struct hlist_head xfrm_policy_clone_security;
+	struct hlist_head xfrm_policy_free_security;
+	struct hlist_head xfrm_policy_delete_security;
+	struct hlist_head xfrm_state_alloc;
+	struct hlist_head xfrm_state_alloc_acquire;
+	struct hlist_head xfrm_state_free_security;
+	struct hlist_head xfrm_state_delete_security;
+	struct hlist_head xfrm_policy_lookup;
+	struct hlist_head xfrm_state_pol_flow_match;
+	struct hlist_head xfrm_decode_session;
+	struct hlist_head key_alloc;
+	struct hlist_head key_free;
+	struct hlist_head key_permission;
+	struct hlist_head key_getsecurity;
+	struct hlist_head audit_rule_init;
+	struct hlist_head audit_rule_known;
+	struct hlist_head audit_rule_match;
+	struct hlist_head audit_rule_free;
+	struct hlist_head bpf;
+	struct hlist_head bpf_map;
+	struct hlist_head bpf_prog;
+	struct hlist_head bpf_map_alloc_security;
+	struct hlist_head bpf_map_free_security;
+	struct hlist_head bpf_prog_alloc_security;
+	struct hlist_head bpf_prog_free_security;
+	struct hlist_head locked_down;
+	struct hlist_head lock_kernel_down;
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+	struct hlist_head uring_override_creds;
+	struct hlist_head uring_sqpoll;
+	struct hlist_head uring_cmd;
+};
+
+struct security_hook_list {
+	struct hlist_node list;
+	struct hlist_head *head;
+	union security_list_options hook;
+	const char *lsm;
+};
+
+struct lsm_blob_sizes {
+	int lbs_cred;
+	int lbs_file;
+	int lbs_inode;
+	int lbs_superblock;
+	int lbs_ipc;
+	int lbs_msg_msg;
+	int lbs_task;
+};
+
+enum lsm_order {
+	LSM_ORDER_FIRST = 4294967295,
+	LSM_ORDER_MUTABLE = 0,
+};
+
+struct lsm_info {
+	const char *name;
+	enum lsm_order order;
+	long unsigned int flags;
+	int *enabled;
+	int (*init)();
+	struct lsm_blob_sizes *blobs;
+};
+
+struct modsig;
+
+enum integrity_status {
+	INTEGRITY_PASS = 0,
+	INTEGRITY_PASS_IMMUTABLE = 1,
+	INTEGRITY_FAIL = 2,
+	INTEGRITY_FAIL_IMMUTABLE = 3,
+	INTEGRITY_NOLABEL = 4,
+	INTEGRITY_NOXATTRS = 5,
+	INTEGRITY_UNKNOWN = 6,
+};
+
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	long unsigned int priv;
+	short unsigned int quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+	struct completion dying;
+};
+
+typedef void *acpi_handle;
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+struct tpm_bank_info {
+	u16 alg_id;
+	u16 digest_size;
+	u16 crypto_id;
+};
+
+struct tpm_chip;
+
+struct tpm_class_ops {
+	unsigned int flags;
+	const u8 req_complete_mask;
+	const u8 req_complete_val;
+	bool (*req_canceled)(struct tpm_chip *, u8);
+	int (*recv)(struct tpm_chip *, u8 *, size_t);
+	int (*send)(struct tpm_chip *, u8 *, size_t);
+	void (*cancel)(struct tpm_chip *);
+	u8 (*status)(struct tpm_chip *);
+	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
+	void (*update_durations)(struct tpm_chip *, long unsigned int *);
+	int (*go_idle)(struct tpm_chip *);
+	int (*cmd_ready)(struct tpm_chip *);
+	int (*request_locality)(struct tpm_chip *, int);
+	int (*relinquish_locality)(struct tpm_chip *, int);
+	void (*clk_enable)(struct tpm_chip *, bool);
+};
+
+struct tpm_bios_log {
+	void *bios_event_log;
+	void *bios_event_log_end;
+};
+
+struct tpm_chip_seqops {
+	struct tpm_chip *chip;
+	const struct seq_operations *seqops;
+};
+
+struct tpm_space {
+	u32 context_tbl[3];
+	u8 *context_buf;
+	u32 session_tbl[3];
+	u8 *session_buf;
+	u32 buf_size;
+};
+
+struct tpm_chip {
+	struct device dev;
+	struct device devs;
+	struct cdev cdev;
+	struct cdev cdevs;
+	struct rw_semaphore ops_sem;
+	const struct tpm_class_ops *ops;
+	struct tpm_bios_log log;
+	struct tpm_chip_seqops bin_log_seqops;
+	struct tpm_chip_seqops ascii_log_seqops;
+	unsigned int flags;
+	int dev_num;
+	long unsigned int is_open;
+	char hwrng_name[64];
+	struct hwrng hwrng;
+	struct mutex tpm_mutex;
+	long unsigned int timeout_a;
+	long unsigned int timeout_b;
+	long unsigned int timeout_c;
+	long unsigned int timeout_d;
+	bool timeout_adjusted;
+	long unsigned int duration[4];
+	bool duration_adjusted;
+	struct dentry *bios_dir[3];
+	const struct attribute_group *groups[8];
+	unsigned int groups_cnt;
+	u32 nr_allocated_banks;
+	struct tpm_bank_info *allocated_banks;
+	acpi_handle acpi_dev_handle;
+	char ppi_version[4];
+	struct tpm_space work_space;
+	u32 last_cc;
+	u32 nr_commands;
+	u32 *cc_attrs_tbl;
+	int locality;
+};
+
+struct evm_ima_xattr_data {
+	u8 type;
+	u8 data[0];
+};
+
+struct ima_digest_data {
+	u8 algo;
+	u8 length;
+	union {
+		struct {
+			u8 unused;
+			u8 type;
+		} sha1;
+		struct {
+			u8 type;
+			u8 algo;
+		} ng;
+		u8 data[2];
+	} xattr;
+	u8 digest[0];
+};
+
+struct ima_max_digest_data {
+	struct ima_digest_data hdr;
+	u8 digest[64];
+};
+
+struct integrity_iint_cache {
+	struct rb_node rb_node;
+	struct mutex mutex;
+	struct inode *inode;
+	u64 version;
+	long unsigned int flags;
+	long unsigned int measured_pcrs;
+	long unsigned int atomic_flags;
+	enum integrity_status ima_file_status: 4;
+	enum integrity_status ima_mmap_status: 4;
+	enum integrity_status ima_bprm_status: 4;
+	enum integrity_status ima_read_status: 4;
+	enum integrity_status ima_creds_status: 4;
+	enum integrity_status evm_status: 4;
+	struct ima_digest_data *ima_hash;
+};
+
+enum ima_show_type {
+	IMA_SHOW_BINARY = 0,
+	IMA_SHOW_BINARY_NO_FIELD_LEN = 1,
+	IMA_SHOW_BINARY_OLD_STRING_FMT = 2,
+	IMA_SHOW_ASCII = 3,
+};
+
+struct ima_event_data {
+	struct integrity_iint_cache *iint;
+	struct file *file;
+	const unsigned char *filename;
+	struct evm_ima_xattr_data *xattr_value;
+	int xattr_len;
+	const struct modsig *modsig;
+	const char *violation;
+	const void *buf;
+	int buf_len;
+};
+
+struct ima_field_data {
+	u8 *data;
+	u32 len;
+};
+
+struct ima_template_field {
+	const char field_id[16];
+	int (*field_init)(struct ima_event_data *, struct ima_field_data *);
+	void (*field_show)(struct seq_file *, enum ima_show_type, struct ima_field_data *);
+};
+
+struct ima_template_desc {
+	struct list_head list;
+	char *name;
+	char *fmt;
+	int num_fields;
+	const struct ima_template_field **fields;
+};
+
+struct ima_template_entry {
+	int pcr;
+	struct tpm_digest *digests;
+	struct ima_template_desc *template_desc;
+	u32 template_data_len;
+	struct ima_field_data template_data[0];
+};
+
+struct ima_h_table {
+	atomic_long_t len;
+	atomic_long_t violations;
+	struct hlist_head queue[1024];
+};
+
+enum ima_hooks {
+	NONE = 0,
+	FILE_CHECK = 1,
+	MMAP_CHECK = 2,
+	BPRM_CHECK = 3,
+	CREDS_CHECK = 4,
+	POST_SETATTR = 5,
+	MODULE_CHECK = 6,
+	FIRMWARE_CHECK = 7,
+	KEXEC_KERNEL_CHECK = 8,
+	KEXEC_INITRAMFS_CHECK = 9,
+	POLICY_CHECK = 10,
+	KEXEC_CMDLINE = 11,
+	KEY_CHECK = 12,
+	CRITICAL_DATA = 13,
+	SETXATTR_CHECK = 14,
+	MAX_CHECK = 15,
+};
+
+struct ima_queue_entry {
+	struct hlist_node hnext;
+	struct list_head later;
+	struct ima_template_entry *entry;
+};
+
+struct ima_kexec_hdr {
+	u16 version;
+	u16 _reserved0;
+	u32 _reserved1;
+	u64 buffer_size;
+	u64 count;
+};
+
+struct crypto_cipher {
+	struct crypto_tfm base;
+};
+
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_aead;
+
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct rtattr {
+	short unsigned int rta_len;
+	short unsigned int rta_type;
+};
+
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
+};
+
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[128];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
+	};
+};
+
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
+};
+
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
+};
+
+enum crypto_attr_type_t {
+	CRYPTOCFGA_UNSPEC = 0,
+	CRYPTOCFGA_PRIORITY_VAL = 1,
+	CRYPTOCFGA_REPORT_LARVAL = 2,
+	CRYPTOCFGA_REPORT_HASH = 3,
+	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
+	CRYPTOCFGA_REPORT_AEAD = 5,
+	CRYPTOCFGA_REPORT_COMPRESS = 6,
+	CRYPTOCFGA_REPORT_RNG = 7,
+	CRYPTOCFGA_REPORT_CIPHER = 8,
+	CRYPTOCFGA_REPORT_AKCIPHER = 9,
+	CRYPTOCFGA_REPORT_KPP = 10,
+	CRYPTOCFGA_REPORT_ACOMP = 11,
+	CRYPTOCFGA_STAT_LARVAL = 12,
+	CRYPTOCFGA_STAT_HASH = 13,
+	CRYPTOCFGA_STAT_BLKCIPHER = 14,
+	CRYPTOCFGA_STAT_AEAD = 15,
+	CRYPTOCFGA_STAT_COMPRESS = 16,
+	CRYPTOCFGA_STAT_RNG = 17,
+	CRYPTOCFGA_STAT_CIPHER = 18,
+	CRYPTOCFGA_STAT_AKCIPHER = 19,
+	CRYPTOCFGA_STAT_KPP = 20,
+	CRYPTOCFGA_STAT_ACOMP = 21,
+	__CRYPTOCFGA_MAX = 22,
+};
+
+struct crypto_report_blkcipher {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+};
+
+enum {
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
+};
+
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
+};
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct drbg_string {
+	const unsigned char *buf;
+	size_t len;
+	struct list_head list;
+};
+
+struct drbg_test_data {
+	struct drbg_string *testentropy;
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	struct crypto_tfm base;
+};
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_kpp {
+	struct crypto_tfm base;
+};
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_spnego = 40,
+	OID_IAKerb = 41,
+	OID_PKU2U = 42,
+	OID_Scram = 43,
+	OID_certAuthInfoAccess = 44,
+	OID_sha1 = 45,
+	OID_id_ansip384r1 = 46,
+	OID_sha256 = 47,
+	OID_sha384 = 48,
+	OID_sha512 = 49,
+	OID_sha224 = 50,
+	OID_commonName = 51,
+	OID_surname = 52,
+	OID_countryName = 53,
+	OID_locality = 54,
+	OID_stateOrProvinceName = 55,
+	OID_organizationName = 56,
+	OID_organizationUnitName = 57,
+	OID_title = 58,
+	OID_description = 59,
+	OID_name = 60,
+	OID_givenName = 61,
+	OID_initials = 62,
+	OID_generationalQualifier = 63,
+	OID_subjectKeyIdentifier = 64,
+	OID_keyUsage = 65,
+	OID_subjectAltName = 66,
+	OID_issuerAltName = 67,
+	OID_basicConstraints = 68,
+	OID_crlDistributionPoints = 69,
+	OID_certPolicies = 70,
+	OID_authorityKeyIdentifier = 71,
+	OID_extKeyUsage = 72,
+	OID_NetlogonMechanism = 73,
+	OID_appleLocalKdcSupported = 74,
+	OID_gostCPSignA = 75,
+	OID_gostCPSignB = 76,
+	OID_gostCPSignC = 77,
+	OID_gost2012PKey256 = 78,
+	OID_gost2012PKey512 = 79,
+	OID_gost2012Digest256 = 80,
+	OID_gost2012Digest512 = 81,
+	OID_gost2012Signature256 = 82,
+	OID_gost2012Signature512 = 83,
+	OID_gostTC26Sign256A = 84,
+	OID_gostTC26Sign256B = 85,
+	OID_gostTC26Sign256C = 86,
+	OID_gostTC26Sign256D = 87,
+	OID_gostTC26Sign512A = 88,
+	OID_gostTC26Sign512B = 89,
+	OID_gostTC26Sign512C = 90,
+	OID_sm2 = 91,
+	OID_sm3 = 92,
+	OID_SM2_with_SM3 = 93,
+	OID_sm3WithRSAEncryption = 94,
+	OID_TPMLoadableKey = 95,
+	OID_TPMImportableKey = 96,
+	OID_TPMSealedData = 97,
+	OID__NR = 98,
+};
+
+struct hash_testvec {
+	const char *key;
+	const char *plaintext;
+	const char *digest;
+	unsigned int psize;
+	short unsigned int ksize;
+	int setkey_error;
+	int digest_error;
+	bool fips_skip;
+};
+
+struct cipher_testvec {
+	const char *key;
+	const char *iv;
+	const char *iv_out;
+	const char *ptext;
+	const char *ctext;
+	unsigned char wk;
+	short unsigned int klen;
+	unsigned int len;
+	bool fips_skip;
+	bool generates_iv;
+	int setkey_error;
+	int crypt_error;
+};
+
+struct aead_testvec {
+	const char *key;
+	const char *iv;
+	const char *ptext;
+	const char *assoc;
+	const char *ctext;
+	unsigned char novrfy;
+	unsigned char wk;
+	unsigned char klen;
+	unsigned int plen;
+	unsigned int clen;
+	unsigned int alen;
+	int setkey_error;
+	int setauthsize_error;
+	int crypt_error;
+};
+
+struct cprng_testvec {
+	const char *key;
+	const char *dt;
+	const char *v;
+	const char *result;
+	unsigned char klen;
+	short unsigned int dtlen;
+	short unsigned int vlen;
+	short unsigned int rlen;
+	short unsigned int loops;
+};
+
+struct drbg_testvec {
+	const unsigned char *entropy;
+	size_t entropylen;
+	const unsigned char *entpra;
+	const unsigned char *entprb;
+	size_t entprlen;
+	const unsigned char *addtla;
+	const unsigned char *addtlb;
+	size_t addtllen;
+	const unsigned char *pers;
+	size_t perslen;
+	const unsigned char *expected;
+	size_t expectedlen;
+};
+
+struct akcipher_testvec {
+	const unsigned char *key;
+	const unsigned char *params;
+	const unsigned char *m;
+	const unsigned char *c;
+	unsigned int key_len;
+	unsigned int param_len;
+	unsigned int m_size;
+	unsigned int c_size;
+	bool public_key_vec;
+	bool siggen_sigver_test;
+	enum OID algo;
+};
+
+struct kpp_testvec {
+	const unsigned char *secret;
+	const unsigned char *b_secret;
+	const unsigned char *b_public;
+	const unsigned char *expected_a_public;
+	const unsigned char *expected_ss;
+	short unsigned int secret_size;
+	short unsigned int b_secret_size;
+	short unsigned int b_public_size;
+	short unsigned int expected_a_public_size;
+	short unsigned int expected_ss_size;
+	bool genkey;
+};
+
+struct comp_testvec {
+	int inlen;
+	int outlen;
+	char input[512];
+	char output[512];
+};
+
+struct aead_test_suite {
+	const struct aead_testvec *vecs;
+	unsigned int count;
+	unsigned int einval_allowed: 1;
+	unsigned int aad_iv: 1;
+};
+
+struct cipher_test_suite {
+	const struct cipher_testvec *vecs;
+	unsigned int count;
+};
+
+struct comp_test_suite {
+	struct {
+		const struct comp_testvec *vecs;
+		unsigned int count;
+	} comp;
+	struct {
+		const struct comp_testvec *vecs;
+		unsigned int count;
+	} decomp;
+};
+
+struct hash_test_suite {
+	const struct hash_testvec *vecs;
+	unsigned int count;
+};
+
+struct cprng_test_suite {
+	const struct cprng_testvec *vecs;
+	unsigned int count;
+};
+
+struct drbg_test_suite {
+	const struct drbg_testvec *vecs;
+	unsigned int count;
+};
+
+struct akcipher_test_suite {
+	const struct akcipher_testvec *vecs;
+	unsigned int count;
+};
+
+struct kpp_test_suite {
+	const struct kpp_testvec *vecs;
+	unsigned int count;
+};
+
+struct alg_test_desc {
+	const char *alg;
+	const char *generic_driver;
+	int (*test)(const struct alg_test_desc *, const char *, u32, u32);
+	int fips_allowed;
+	union {
+		struct aead_test_suite aead;
+		struct cipher_test_suite cipher;
+		struct comp_test_suite comp;
+		struct hash_test_suite hash;
+		struct cprng_test_suite cprng;
+		struct drbg_test_suite drbg;
+		struct akcipher_test_suite akcipher;
+		struct kpp_test_suite kpp;
+	} suite;
+};
+
+enum flush_type {
+	FLUSH_TYPE_NONE = 0,
+	FLUSH_TYPE_FLUSH = 1,
+	FLUSH_TYPE_REIMPORT = 2,
+};
+
+enum finalization_type {
+	FINALIZATION_TYPE_FINAL = 0,
+	FINALIZATION_TYPE_FINUP = 1,
+	FINALIZATION_TYPE_DIGEST = 2,
+};
+
+enum inplace_mode {
+	OUT_OF_PLACE = 0,
+	INPLACE_ONE_SGLIST = 1,
+	INPLACE_TWO_SGLISTS = 2,
+};
+
+struct test_sg_division {
+	unsigned int proportion_of_total;
+	unsigned int offset;
+	bool offset_relative_to_alignmask;
+	enum flush_type flush_type;
+	bool nosimd;
+};
+
+struct testvec_config {
+	const char *name;
+	enum inplace_mode inplace_mode;
+	u32 req_flags;
+	struct test_sg_division src_divs[8];
+	struct test_sg_division dst_divs[8];
+	unsigned int iv_offset;
+	unsigned int key_offset;
+	bool iv_offset_relative_to_alignmask;
+	bool key_offset_relative_to_alignmask;
+	enum finalization_type finalization_type;
+	bool nosimd;
+};
+
+struct test_sglist {
+	char *bufs[8];
+	struct scatterlist sgl[8];
+	struct scatterlist sgl_saved[8];
+	struct scatterlist *sgl_ptr;
+	unsigned int nents;
+};
+
+struct cipher_test_sglists {
+	struct test_sglist src;
+	struct test_sglist dst;
+};
+
+typedef unsigned char Byte;
+
+typedef long unsigned int uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef struct z_stream_s z_stream;
+
+typedef z_stream *z_streamp;
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct deflate_ctx {
+	struct z_stream_s comp_stream;
+	struct z_stream_s decomp_stream;
+};
+
+struct lzo_ctx {
+	void *lzo_comp_mem;
+};
+
+struct sockaddr_alg_new {
+	__u16 salg_family;
+	__u8 salg_type[14];
+	__u32 salg_feat;
+	__u32 salg_mask;
+	__u8 salg_name[0];
+};
+
+struct af_alg_iv {
+	__u32 ivlen;
+	__u8 iv[0];
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+struct af_alg_type;
+
+struct alg_sock {
+	struct sock sk;
+	struct sock *parent;
+	atomic_t refcnt;
+	atomic_t nokey_refcnt;
+	const struct af_alg_type *type;
+	void *private;
+};
+
+struct af_alg_type {
+	void * (*bind)(const char *, u32, u32);
+	void (*release)(void *);
+	int (*setkey)(void *, const u8 *, unsigned int);
+	int (*setentropy)(void *, sockptr_t, unsigned int);
+	int (*accept)(void *, struct sock *);
+	int (*accept_nokey)(void *, struct sock *);
+	int (*setauthsize)(void *, unsigned int);
+	struct proto_ops *ops;
+	struct proto_ops *ops_nokey;
+	struct module *owner;
+	char name[14];
+};
+
+struct af_alg_control {
+	struct af_alg_iv *iv;
+	int op;
+	unsigned int aead_assoclen;
+};
+
+struct af_alg_sgl {
+	struct scatterlist sg[17];
+	struct page *pages[16];
+	unsigned int npages;
+};
+
+struct af_alg_tsgl {
+	struct list_head list;
+	unsigned int cur;
+	struct scatterlist sg[0];
+};
+
+struct af_alg_rsgl {
+	struct af_alg_sgl sgl;
+	struct list_head list;
+	size_t sg_num_bytes;
+};
+
+struct af_alg_async_req {
+	struct kiocb *iocb;
+	struct sock *sk;
+	struct af_alg_rsgl first_rsgl;
+	struct af_alg_rsgl *last_rsgl;
+	struct list_head rsgl_list;
+	struct scatterlist *tsgl;
+	unsigned int tsgl_entries;
+	unsigned int outlen;
+	unsigned int areqlen;
+	union {
+		struct aead_request aead_req;
+		struct skcipher_request skcipher_req;
+	} cra_u;
+};
+
+struct af_alg_ctx {
+	struct list_head tsgl_list;
+	void *iv;
+	size_t aead_assoclen;
+	struct crypto_wait wait;
+	size_t used;
+	atomic_t rcvused;
+	bool more;
+	bool merge;
+	bool enc;
+	bool init;
+	unsigned int len;
+};
+
+struct alg_type_list {
+	const struct af_alg_type *type;
+	struct list_head list;
+};
+
+struct asymmetric_key_id {
+	short unsigned int len;
+	unsigned char data[0];
+};
+
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+};
+
+struct public_key_signature {
+	struct asymmetric_key_id *auth_ids[3];
+	u8 *s;
+	u8 *digest;
+	u32 s_size;
+	u32 digest_size;
+	const char *pkey_algo;
+	const char *hash_algo;
+	const char *encoding;
+	const void *data;
+	unsigned int data_size;
+};
+
+struct x509_certificate {
+	struct x509_certificate *next;
+	struct x509_certificate *signer;
+	struct public_key *pub;
+	struct public_key_signature *sig;
+	char *issuer;
+	char *subject;
+	struct asymmetric_key_id *id;
+	struct asymmetric_key_id *skid;
+	time64_t valid_from;
+	time64_t valid_to;
+	const void *tbs;
+	unsigned int tbs_size;
+	unsigned int raw_sig_size;
+	const void *raw_sig;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_subject;
+	unsigned int raw_subject_size;
+	unsigned int raw_skid_size;
+	const void *raw_skid;
+	unsigned int index;
+	bool seen;
+	bool verified;
+	bool self_signed;
+	bool unsupported_sig;
+	bool blacklisted;
+};
+
+struct pkcs7_signed_info {
+	struct pkcs7_signed_info *next;
+	struct x509_certificate *signer;
+	unsigned int index;
+	bool unsupported_crypto;
+	bool blacklisted;
+	const void *msgdigest;
+	unsigned int msgdigest_len;
+	unsigned int authattrs_len;
+	const void *authattrs;
+	long unsigned int aa_set;
+	time64_t signing_time;
+	struct public_key_signature *sig;
+};
+
+struct pkcs7_message {
+	struct x509_certificate *certs;
+	struct x509_certificate *crl;
+	struct pkcs7_signed_info *signed_infos;
+	u8 version;
+	bool have_authattrs;
+	enum OID data_type;
+	size_t data_len;
+	size_t data_hdrlen;
+	const void *data;
+};
+
+struct disk_stats {
+	u64 nsecs[4];
+	long unsigned int sectors[4];
+	long unsigned int ios[4];
+	long unsigned int merges[4];
+	long unsigned int io_ticks;
+	local_t in_flight[2];
+};
+
+struct blk_crypto_key;
+
+struct bio_crypt_ctx {
+	const struct blk_crypto_key *bc_key;
+	u64 bc_dun[4];
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
+};
+
+struct sbitmap_word {
+	long unsigned int word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int *alloc_hint;
+};
+
+struct sbq_wait_state {
+	atomic_t wait_cnt;
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+typedef void rq_end_io_fn(struct request *, blk_status_t);
+
+struct blk_crypto_keyslot;
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	short unsigned int wbt_flags;
+	short unsigned int stats_sectors;
+	short unsigned int nr_phys_segments;
+	short unsigned int nr_integrity_segments;
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_crypto_keyslot *crypt_keyslot;
+	short unsigned int write_hint;
+	short unsigned int ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	long unsigned int deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+		void *completion_data;
+	};
+	union {
+		struct {
+			struct io_cq *icq;
+			void *priv[2];
+		} elv;
+		struct {
+			unsigned int seq;
+			struct list_head list;
+			rq_end_io_fn *saved_end_io;
+		} flush;
+	};
+	union {
+		struct __call_single_data csd;
+		u64 fifo_time;
+	};
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	atomic_t active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+};
+
+struct blk_flush_queue {
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	long unsigned int flush_pending_since;
+	struct list_head flush_queue[2];
+	struct list_head flush_data_in_flight;
+	struct request *flush_rq;
+	spinlock_t mq_flush_lock;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	const struct blk_mq_ops *ops;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		long unsigned int state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	long unsigned int flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	short unsigned int type;
+	short unsigned int nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	long unsigned int queued;
+	long unsigned int run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+struct blk_integrity_iter {
+	void *prot_buf;
+	void *data_buf;
+	sector_t seed;
+	unsigned int data_size;
+	short unsigned int interval;
+	unsigned char tuple_size;
+	const char *disk_name;
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_MAX = 4,
+};
+
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+};
+
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[64];
+};
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+enum {
+	ICQ_EXITED = 4,
+	ICQ_DESTROYED = 8,
+};
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	unsigned int registered: 1;
+	struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	short unsigned int index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+};
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+struct blk_mq_alloc_data;
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+};
+
+struct elv_fs_entry;
+
+struct blk_mq_debugfs_attr;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+};
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx *queue_ctx;
+};
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
+};
+
+typedef struct {
+	struct folio *v;
+} Sector;
+
+struct lvm_rec {
+	char lvm_id[4];
+	char reserved4[16];
+	__be32 lvmarea_len;
+	__be32 vgda_len;
+	__be32 vgda_psn[2];
+	char reserved36[10];
+	__be16 pp_size;
+	char reserved46[12];
+	__be16 version;
+};
+
+struct vgda {
+	__be32 secs;
+	__be32 usec;
+	char reserved8[16];
+	__be16 numlvs;
+	__be16 maxlvs;
+	__be16 pp_size;
+	__be16 numpvs;
+	__be16 total_vgdas;
+	__be16 vgda_size;
+};
+
+struct lvd {
+	__be16 lv_ix;
+	__be16 res2;
+	__be16 res4;
+	__be16 maxsize;
+	__be16 lv_state;
+	__be16 mirror;
+	__be16 mirror_policy;
+	__be16 num_lps;
+	__be16 res10[8];
+};
+
+struct lvname {
+	char name[64];
+};
+
+struct ppe {
+	__be16 lv_ix;
+	short unsigned int res2;
+	short unsigned int res4;
+	__be16 lp_ix;
+	short unsigned int res8[12];
+};
+
+struct pvd {
+	char reserved0[16];
+	__be16 pp_count;
+	char reserved18[2];
+	__be32 psn_part1;
+	char reserved24[8];
+	struct ppe ppe[1016];
+};
+
+struct lv_info {
+	short unsigned int pps_per_lv;
+	short unsigned int pps_found;
+	unsigned char lv_is_contiguous;
+};
+
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+	RQ_QOS_IOPRIO = 3,
+};
+
+struct rq_qos_ops;
+
+struct rq_qos {
+	struct rq_qos_ops *ops;
+	struct request_queue *q;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	spinlock_t async_bio_lock;
+	struct bio_list async_bios;
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+};
+
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	char fc_app_id[129];
+	struct list_head cgwb_list;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct rchan;
+
+struct blk_trace {
+	int trace_state;
+	struct rchan *rchan;
+	long unsigned int *sequence;
+	unsigned char *msg_data;
+	u16 act_mask;
+	u64 start_lba;
+	u64 end_lba;
+	u32 pid;
+	u32 dev;
+	struct dentry *dir;
+	struct list_head running_list;
+	atomic_t dropped;
+};
+
+struct rchan_buf {
+	void *start;
+	void *data;
+	size_t offset;
+	size_t subbufs_produced;
+	size_t subbufs_consumed;
+	struct rchan *chan;
+	wait_queue_head_t read_wait;
+	struct irq_work wakeup_work;
+	struct dentry *dentry;
+	struct kref kref;
+	struct page **page_array;
+	unsigned int page_count;
+	unsigned int finalized;
+	size_t *padding;
+	size_t prev_padding;
+	size_t bytes_consumed;
+	size_t early_bytes;
+	unsigned int cpu;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+struct rchan_callbacks;
+
+struct rchan {
+	u32 version;
+	size_t subbuf_size;
+	size_t n_subbufs;
+	size_t alloc_size;
+	const struct rchan_callbacks *cb;
+	struct kref kref;
+	void *private_data;
+	size_t last_toobig;
+	struct rchan_buf **buf;
+	int is_global;
+	struct list_head list;
+	struct dentry *parent;
+	int has_base_filename;
+	char base_filename[255];
+};
+
+struct rchan_callbacks {
+	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
+	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
+	int (*remove_buf_file)(struct dentry *);
+};
+
+enum blktrace_cat {
+	BLK_TC_READ = 1,
+	BLK_TC_WRITE = 2,
+	BLK_TC_FLUSH = 4,
+	BLK_TC_SYNC = 8,
+	BLK_TC_SYNCIO = 8,
+	BLK_TC_QUEUE = 16,
+	BLK_TC_REQUEUE = 32,
+	BLK_TC_ISSUE = 64,
+	BLK_TC_COMPLETE = 128,
+	BLK_TC_FS = 256,
+	BLK_TC_PC = 512,
+	BLK_TC_NOTIFY = 1024,
+	BLK_TC_AHEAD = 2048,
+	BLK_TC_META = 4096,
+	BLK_TC_DISCARD = 8192,
+	BLK_TC_DRV_DATA = 16384,
+	BLK_TC_FUA = 32768,
+	BLK_TC_END = 32768,
+};
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_init_cpd_fn *cpd_init_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct bfq_entity;
+
+struct bfq_service_tree {
+	struct rb_root active;
+	struct rb_root idle;
+	struct bfq_entity *first_idle;
+	struct bfq_entity *last_idle;
+	u64 vtime;
+	long unsigned int wsum;
+};
+
+struct bfq_sched_data;
+
+struct bfq_queue;
+
+struct bfq_entity {
+	struct rb_node rb_node;
+	bool on_st_or_in_serv;
+	u64 start;
+	u64 finish;
+	struct rb_root *tree;
+	u64 min_start;
+	int service;
+	int budget;
+	int allocated;
+	int dev_weight;
+	int weight;
+	int new_weight;
+	int orig_weight;
+	struct bfq_entity *parent;
+	struct bfq_sched_data *my_sched_data;
+	struct bfq_sched_data *sched_data;
+	int prio_changed;
+	bool in_groups_with_pending_reqs;
+	struct bfq_queue *last_bfqq_created;
+};
+
+struct bfq_sched_data {
+	struct bfq_entity *in_service_entity;
+	struct bfq_entity *next_in_service;
+	struct bfq_service_tree service_tree[3];
+	long unsigned int bfq_class_idle_last_service;
+};
+
+struct bfq_weight_counter {
+	unsigned int weight;
+	unsigned int num_active;
+	struct rb_node weights_node;
+};
+
+struct bfq_ttime {
+	u64 last_end_request;
+	u64 ttime_total;
+	long unsigned int ttime_samples;
+	u64 ttime_mean;
+};
+
+struct bfq_data;
+
+struct bfq_io_cq;
+
+struct bfq_queue {
+	int ref;
+	int stable_ref;
+	struct bfq_data *bfqd;
+	short unsigned int ioprio;
+	short unsigned int ioprio_class;
+	short unsigned int new_ioprio;
+	short unsigned int new_ioprio_class;
+	u64 last_serv_time_ns;
+	unsigned int inject_limit;
+	long unsigned int decrease_time_jif;
+	struct bfq_queue *new_bfqq;
+	struct rb_node pos_node;
+	struct rb_root *pos_root;
+	struct rb_root sort_list;
+	struct request *next_rq;
+	int queued[2];
+	int meta_pending;
+	struct list_head fifo;
+	struct bfq_entity entity;
+	struct bfq_weight_counter *weight_counter;
+	int max_budget;
+	long unsigned int budget_timeout;
+	int dispatched;
+	long unsigned int flags;
+	struct list_head bfqq_list;
+	struct bfq_ttime ttime;
+	u64 io_start_time;
+	u64 tot_idle_time;
+	u32 seek_history;
+	struct hlist_node burst_list_node;
+	sector_t last_request_pos;
+	unsigned int requests_within_timer;
+	pid_t pid;
+	struct bfq_io_cq *bic;
+	long unsigned int wr_cur_max_time;
+	long unsigned int soft_rt_next_start;
+	long unsigned int last_wr_start_finish;
+	unsigned int wr_coeff;
+	long unsigned int last_idle_bklogged;
+	long unsigned int service_from_backlogged;
+	long unsigned int service_from_wr;
+	long unsigned int wr_start_at_switch_to_srt;
+	long unsigned int split_time;
+	long unsigned int first_IO_time;
+	long unsigned int creation_time;
+	u32 max_service_rate;
+	struct bfq_queue *waker_bfqq;
+	struct bfq_queue *tentative_waker_bfqq;
+	unsigned int num_waker_detections;
+	u64 waker_detection_started;
+	struct hlist_node woken_list_node;
+	struct hlist_head woken_list;
+};
+
+struct bfq_group;
+
+struct bfq_data {
+	struct request_queue *queue;
+	struct list_head dispatch;
+	struct bfq_group *root_group;
+	struct rb_root_cached queue_weights_tree;
+	unsigned int num_groups_with_pending_reqs;
+	unsigned int busy_queues[3];
+	int wr_busy_queues;
+	int queued;
+	int rq_in_driver;
+	bool nonrot_with_queueing;
+	int max_rq_in_driver;
+	int hw_tag_samples;
+	int hw_tag;
+	int budgets_assigned;
+	struct hrtimer idle_slice_timer;
+	struct bfq_queue *in_service_queue;
+	sector_t last_position;
+	sector_t in_serv_last_pos;
+	u64 last_completion;
+	struct bfq_queue *last_completed_rq_bfqq;
+	struct bfq_queue *last_bfqq_created;
+	u64 last_empty_occupied_ns;
+	bool wait_dispatch;
+	struct request *waited_rq;
+	bool rqs_injected;
+	u64 first_dispatch;
+	u64 last_dispatch;
+	ktime_t last_budget_start;
+	ktime_t last_idling_start;
+	long unsigned int last_idling_start_jiffies;
+	int peak_rate_samples;
+	u32 sequential_samples;
+	u64 tot_sectors_dispatched;
+	u32 last_rq_max_size;
+	u64 delta_from_first;
+	u32 peak_rate;
+	int bfq_max_budget;
+	struct list_head active_list;
+	struct list_head idle_list;
+	u64 bfq_fifo_expire[2];
+	unsigned int bfq_back_penalty;
+	unsigned int bfq_back_max;
+	u32 bfq_slice_idle;
+	int bfq_user_max_budget;
+	unsigned int bfq_timeout;
+	bool strict_guarantees;
+	long unsigned int last_ins_in_burst;
+	long unsigned int bfq_burst_interval;
+	int burst_size;
+	struct bfq_entity *burst_parent_entity;
+	long unsigned int bfq_large_burst_thresh;
+	bool large_burst;
+	struct hlist_head burst_list;
+	bool low_latency;
+	unsigned int bfq_wr_coeff;
+	unsigned int bfq_wr_max_time;
+	unsigned int bfq_wr_rt_max_time;
+	unsigned int bfq_wr_min_idle_time;
+	long unsigned int bfq_wr_min_inter_arr_async;
+	unsigned int bfq_wr_max_softrt_rate;
+	u64 rate_dur_prod;
+	struct bfq_queue oom_bfqq;
+	spinlock_t lock;
+	struct bfq_io_cq *bio_bic;
+	struct bfq_queue *bio_bfqq;
+	unsigned int word_depths[4];
+	unsigned int full_depth_shift;
+};
+
+struct bfq_io_cq {
+	struct io_cq icq;
+	struct bfq_queue *bfqq[2];
+	int ioprio;
+	uint64_t blkcg_serial_nr;
+	bool saved_has_short_ttime;
+	bool saved_IO_bound;
+	u64 saved_io_start_time;
+	u64 saved_tot_idle_time;
+	bool saved_in_large_burst;
+	bool was_in_burst_list;
+	unsigned int saved_weight;
+	long unsigned int saved_wr_coeff;
+	long unsigned int saved_last_wr_start_finish;
+	long unsigned int saved_service_from_wr;
+	long unsigned int saved_wr_start_at_switch_to_srt;
+	unsigned int saved_wr_cur_max_time;
+	struct bfq_ttime saved_ttime;
+	u64 saved_last_serv_time_ns;
+	unsigned int saved_inject_limit;
+	long unsigned int saved_decrease_time_jif;
+	struct bfq_queue *stable_merge_bfqq;
+	bool stably_merged;
+	unsigned int requests;
+};
+
+struct bfqg_stats {
+	struct blkg_rwstat bytes;
+	struct blkg_rwstat ios;
+};
+
+struct bfq_group {
+	struct blkg_policy_data pd;
+	char blkg_path[128];
+	int ref;
+	bool online;
+	struct bfq_entity entity;
+	struct bfq_sched_data sched_data;
+	void *bfqd;
+	struct bfq_queue *async_bfqq[16];
+	struct bfq_queue *async_idle_bfqq;
+	struct bfq_entity *my_entity;
+	int active_entities;
+	struct rb_root rq_pos_tree;
+	struct bfqg_stats stats;
+};
+
+enum bfqq_state_flags {
+	BFQQF_just_created = 0,
+	BFQQF_busy = 1,
+	BFQQF_wait_request = 2,
+	BFQQF_non_blocking_wait_rq = 3,
+	BFQQF_fifo_expire = 4,
+	BFQQF_has_short_ttime = 5,
+	BFQQF_sync = 6,
+	BFQQF_IO_bound = 7,
+	BFQQF_in_large_burst = 8,
+	BFQQF_softrt_update = 9,
+	BFQQF_coop = 10,
+	BFQQF_split_coop = 11,
+};
+
+enum bfqq_expiration {
+	BFQQE_TOO_IDLE = 0,
+	BFQQE_BUDGET_TIMEOUT = 1,
+	BFQQE_BUDGET_EXHAUSTED = 2,
+	BFQQE_NO_MORE_REQUESTS = 3,
+	BFQQE_PREEMPTED = 4,
+};
+
+enum opal_mbr {
+	OPAL_MBR_ENABLE = 0,
+	OPAL_MBR_DISABLE = 1,
+};
+
+enum opal_mbr_done_flag {
+	OPAL_MBR_NOT_DONE = 0,
+	OPAL_MBR_DONE = 1,
+};
+
+enum opal_user {
+	OPAL_ADMIN1 = 0,
+	OPAL_USER1 = 1,
+	OPAL_USER2 = 2,
+	OPAL_USER3 = 3,
+	OPAL_USER4 = 4,
+	OPAL_USER5 = 5,
+	OPAL_USER6 = 6,
+	OPAL_USER7 = 7,
+	OPAL_USER8 = 8,
+	OPAL_USER9 = 9,
+};
+
+enum opal_lock_state {
+	OPAL_RO = 1,
+	OPAL_RW = 2,
+	OPAL_LK = 4,
+};
+
+struct opal_key {
+	__u8 lr;
+	__u8 key_len;
+	__u8 __align[6];
+	__u8 key[256];
+};
+
+struct opal_lr_act {
+	struct opal_key key;
+	__u32 sum;
+	__u8 num_lrs;
+	__u8 lr[9];
+	__u8 align[2];
+};
+
+struct opal_session_info {
+	__u32 sum;
+	__u32 who;
+	struct opal_key opal_key;
+};
+
+struct opal_user_lr_setup {
+	__u64 range_start;
+	__u64 range_length;
+	__u32 RLE;
+	__u32 WLE;
+	struct opal_session_info session;
+};
+
+struct opal_lock_unlock {
+	struct opal_session_info session;
+	__u32 l_state;
+	__u8 __align[4];
+};
+
+struct opal_new_pw {
+	struct opal_session_info session;
+	struct opal_session_info new_user_pw;
+};
+
+struct opal_mbr_data {
+	struct opal_key key;
+	__u8 enable_disable;
+	__u8 __align[7];
+};
+
+struct opal_mbr_done {
+	struct opal_key key;
+	__u8 done_flag;
+	__u8 __align[7];
+};
+
+struct opal_shadow_mbr {
+	struct opal_key key;
+	const __u64 data;
+	__u64 offset;
+	__u64 size;
+};
+
+enum opal_table_ops {
+	OPAL_READ_TABLE = 0,
+	OPAL_WRITE_TABLE = 1,
+};
+
+struct opal_read_write_table {
+	struct opal_key key;
+	const __u64 data;
+	const __u8 table_uid[8];
+	__u64 offset;
+	__u64 size;
+	__u64 flags;
+	__u64 priv;
+};
+
+typedef int sec_send_recv(void *, u16, u8, void *, size_t, bool);
+
+enum {
+	TCG_SECP_00 = 0,
+	TCG_SECP_01 = 1,
+};
+
+enum opal_response_token {
+	OPAL_DTA_TOKENID_BYTESTRING = 224,
+	OPAL_DTA_TOKENID_SINT = 225,
+	OPAL_DTA_TOKENID_UINT = 226,
+	OPAL_DTA_TOKENID_TOKEN = 227,
+	OPAL_DTA_TOKENID_INVALID = 0,
+};
+
+enum opal_uid {
+	OPAL_SMUID_UID = 0,
+	OPAL_THISSP_UID = 1,
+	OPAL_ADMINSP_UID = 2,
+	OPAL_LOCKINGSP_UID = 3,
+	OPAL_ENTERPRISE_LOCKINGSP_UID = 4,
+	OPAL_ANYBODY_UID = 5,
+	OPAL_SID_UID = 6,
+	OPAL_ADMIN1_UID = 7,
+	OPAL_USER1_UID = 8,
+	OPAL_USER2_UID = 9,
+	OPAL_PSID_UID = 10,
+	OPAL_ENTERPRISE_BANDMASTER0_UID = 11,
+	OPAL_ENTERPRISE_ERASEMASTER_UID = 12,
+	OPAL_TABLE_TABLE = 13,
+	OPAL_LOCKINGRANGE_GLOBAL = 14,
+	OPAL_LOCKINGRANGE_ACE_RDLOCKED = 15,
+	OPAL_LOCKINGRANGE_ACE_WRLOCKED = 16,
+	OPAL_MBRCONTROL = 17,
+	OPAL_MBR = 18,
+	OPAL_AUTHORITY_TABLE = 19,
+	OPAL_C_PIN_TABLE = 20,
+	OPAL_LOCKING_INFO_TABLE = 21,
+	OPAL_ENTERPRISE_LOCKING_INFO_TABLE = 22,
+	OPAL_DATASTORE = 23,
+	OPAL_C_PIN_MSID = 24,
+	OPAL_C_PIN_SID = 25,
+	OPAL_C_PIN_ADMIN1 = 26,
+	OPAL_HALF_UID_AUTHORITY_OBJ_REF = 27,
+	OPAL_HALF_UID_BOOLEAN_ACE = 28,
+	OPAL_UID_HEXFF = 29,
+};
+
+enum opal_method {
+	OPAL_PROPERTIES = 0,
+	OPAL_STARTSESSION = 1,
+	OPAL_REVERT = 2,
+	OPAL_ACTIVATE = 3,
+	OPAL_EGET = 4,
+	OPAL_ESET = 5,
+	OPAL_NEXT = 6,
+	OPAL_EAUTHENTICATE = 7,
+	OPAL_GETACL = 8,
+	OPAL_GENKEY = 9,
+	OPAL_REVERTSP = 10,
+	OPAL_GET = 11,
+	OPAL_SET = 12,
+	OPAL_AUTHENTICATE = 13,
+	OPAL_RANDOM = 14,
+	OPAL_ERASE = 15,
+};
+
+enum opal_token {
+	OPAL_TRUE = 1,
+	OPAL_FALSE = 0,
+	OPAL_BOOLEAN_EXPR = 3,
+	OPAL_TABLE = 0,
+	OPAL_STARTROW = 1,
+	OPAL_ENDROW = 2,
+	OPAL_STARTCOLUMN = 3,
+	OPAL_ENDCOLUMN = 4,
+	OPAL_VALUES = 1,
+	OPAL_TABLE_UID = 0,
+	OPAL_TABLE_NAME = 1,
+	OPAL_TABLE_COMMON = 2,
+	OPAL_TABLE_TEMPLATE = 3,
+	OPAL_TABLE_KIND = 4,
+	OPAL_TABLE_COLUMN = 5,
+	OPAL_TABLE_COLUMNS = 6,
+	OPAL_TABLE_ROWS = 7,
+	OPAL_TABLE_ROWS_FREE = 8,
+	OPAL_TABLE_ROW_BYTES = 9,
+	OPAL_TABLE_LASTID = 10,
+	OPAL_TABLE_MIN = 11,
+	OPAL_TABLE_MAX = 12,
+	OPAL_PIN = 3,
+	OPAL_RANGESTART = 3,
+	OPAL_RANGELENGTH = 4,
+	OPAL_READLOCKENABLED = 5,
+	OPAL_WRITELOCKENABLED = 6,
+	OPAL_READLOCKED = 7,
+	OPAL_WRITELOCKED = 8,
+	OPAL_ACTIVEKEY = 10,
+	OPAL_LIFECYCLE = 6,
+	OPAL_MAXRANGES = 4,
+	OPAL_MBRENABLE = 1,
+	OPAL_MBRDONE = 2,
+	OPAL_HOSTPROPERTIES = 0,
+	OPAL_STARTLIST = 240,
+	OPAL_ENDLIST = 241,
+	OPAL_STARTNAME = 242,
+	OPAL_ENDNAME = 243,
+	OPAL_CALL = 248,
+	OPAL_ENDOFDATA = 249,
+	OPAL_ENDOFSESSION = 250,
+	OPAL_STARTTRANSACTON = 251,
+	OPAL_ENDTRANSACTON = 252,
+	OPAL_EMPTYATOM = 255,
+	OPAL_WHERE = 0,
+};
+
+enum opal_parameter {
+	OPAL_SUM_SET_LIST = 393216,
+};
+
+struct opal_compacket {
+	__be32 reserved0;
+	u8 extendedComID[4];
+	__be32 outstandingData;
+	__be32 minTransfer;
+	__be32 length;
+};
+
+struct opal_packet {
+	__be32 tsn;
+	__be32 hsn;
+	__be32 seq_number;
+	__be16 reserved0;
+	__be16 ack_type;
+	__be32 acknowledgment;
+	__be32 length;
+};
+
+struct opal_data_subpacket {
+	u8 reserved0[6];
+	__be16 kind;
+	__be32 length;
+};
+
+struct opal_header {
+	struct opal_compacket cp;
+	struct opal_packet pkt;
+	struct opal_data_subpacket subpkt;
+};
+
+struct d0_header {
+	__be32 length;
+	__be32 revision;
+	__be32 reserved01;
+	__be32 reserved02;
+	u8 ignored[32];
+};
+
+struct d0_tper_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_locking_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_geometry_features {
+	u8 header[4];
+	u8 reserved01;
+	u8 reserved02[7];
+	__be32 logical_block_size;
+	__be64 alignment_granularity;
+	__be64 lowest_aligned_lba;
+};
+
+struct d0_opal_v100 {
+	__be16 baseComID;
+	__be16 numComIDs;
+};
+
+struct d0_single_user_mode {
+	__be32 num_locking_objects;
+	u8 reserved01;
+	u8 reserved02;
+	__be16 reserved03;
+	__be32 reserved04;
+};
+
+struct d0_opal_v200 {
+	__be16 baseComID;
+	__be16 numComIDs;
+	u8 range_crossing;
+	u8 num_locking_admin_auth[2];
+	u8 num_locking_user_auth[2];
+	u8 initialPIN;
+	u8 revertedPIN;
+	u8 reserved01;
+	__be32 reserved02;
+};
+
+struct d0_features {
+	__be16 code;
+	u8 r_version;
+	u8 length;
+	u8 features[0];
+};
+
+struct opal_dev;
+
+struct opal_step {
+	int (*fn)(struct opal_dev *, void *);
+	void *data;
+};
+
+enum opal_atom_width {
+	OPAL_WIDTH_TINY = 0,
+	OPAL_WIDTH_SHORT = 1,
+	OPAL_WIDTH_MEDIUM = 2,
+	OPAL_WIDTH_LONG = 3,
+	OPAL_WIDTH_TOKEN = 4,
+};
+
+struct opal_resp_tok {
+	const u8 *pos;
+	size_t len;
+	enum opal_response_token type;
+	enum opal_atom_width width;
+	union {
+		u64 u;
+		s64 s;
+	} stored;
+};
+
+struct parsed_resp {
+	int num;
+	struct opal_resp_tok toks[64];
+};
+
+struct opal_dev {
+	bool supported;
+	bool mbr_enabled;
+	void *data;
+	sec_send_recv *send_recv;
+	struct mutex dev_lock;
+	u16 comid;
+	u32 hsn;
+	u32 tsn;
+	u64 align;
+	u64 lowest_lba;
+	size_t pos;
+	u8 cmd[2048];
+	u8 resp[2048];
+	struct parsed_resp parsed;
+	size_t prev_d_len;
+	void *prev_data;
+	struct list_head unlk_lst;
+};
+
+typedef int cont_fn(struct opal_dev *);
+
+struct opal_suspend_data {
+	struct opal_lock_unlock unlk;
+	u8 lr;
+	struct list_head node;
+};
+
+struct io_uring_cmd {
+	struct file *file;
+	const void *cmd;
+	void (*task_work_cb)(struct io_uring_cmd *);
+	u32 cmd_op;
+	u32 pad;
+	u8 pdu[32];
+};
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = 4294966767,
+	IOU_STOP_MULTISHOT = 4294967171,
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_NONBLOCK = 2147483648,
+	IO_URING_F_SQE128 = 4,
+	IO_URING_F_CQE32 = 8,
+	IO_URING_F_IOPOLL = 16,
+};
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+struct io_rsrc_node {
+	struct percpu_ref refs;
+	struct list_head node;
+	struct list_head rsrc_list;
+	struct io_rsrc_data *rsrc_data;
+	struct llist_node llist;
+	bool done;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	long unsigned int acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_rsrc_put;
+
+typedef void rsrc_put_fn(struct io_ring_ctx *, struct io_rsrc_put *);
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	rsrc_put_fn *do_put;
+	atomic_t refs;
+	struct completion done;
+	bool quiesce;
+};
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 1073741824,
+	REQ_F_ISREG = 2147483648,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 134217728,
+	REQ_F_CQE32_INIT = 67108864,
+	REQ_F_CLEAR_POLLIN = 268435456,
+	REQ_F_HASH_LOCKED = 536870912,
+};
+
+struct io_rsrc_put {
+	struct list_head list;
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	long unsigned int nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct io_uring_buf bufs[0];
+	};
+};
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	struct wait_queue_entry wait;
+};
+
+struct io_cache_entry {
+	struct hlist_node node;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_op_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int manual_alloc: 1;
+	short unsigned int async_size;
+	const char *name;
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+	void (*fail)(struct io_kiocb *);
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u32 flags;
+	int seq;
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+enum {
+	IO_WQ_BOUND = 0,
+	IO_WQ_UNBOUND = 1,
+};
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+struct io_wqe;
+
+struct io_wq {
+	long unsigned int state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wqe *wqes[0];
+};
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
+};
+
+enum {
+	IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+	IO_ACCT_STALLED_BIT = 0,
+};
+
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wqe *wqe;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	long unsigned int create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct io_wqe_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	long unsigned int flags;
+};
+
+struct io_wqe {
+	raw_spinlock_t lock;
+	struct io_wqe_acct acct[2];
+	int node;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq *wq;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
+};
+
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+struct once_work {
+	struct work_struct work;
+	struct static_key_true *key;
+	struct module *module;
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+struct assoc_array_ops {
+	long unsigned int (*get_key_chunk)(const void *, int);
+	long unsigned int (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	long unsigned int nr_leaves_on_branch;
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	long unsigned int index_key[0];
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long int adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+enum assoc_array_walk_status {
+	assoc_array_walk_tree_empty = 0,
+	assoc_array_walk_found_terminal_node = 1,
+	assoc_array_walk_found_wrong_shortcut = 2,
+};
+
+struct assoc_array_walk_result {
+	struct {
+		struct assoc_array_node *node;
+		int level;
+		int slot;
+	} terminal_node;
+	struct {
+		struct assoc_array_shortcut *shortcut;
+		int level;
+		int sc_level;
+		long unsigned int sc_segments;
+		long unsigned int dissimilarity;
+	} wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+	struct assoc_array_node *node;
+	const void *skip_leaf;
+	int slot;
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+typedef unsigned int uInt;
+
+typedef struct {
+	unsigned char op;
+	unsigned char bits;
+	short unsigned int val;
+} code;
+
+typedef enum {
+	CODES = 0,
+	LENS = 1,
+	DISTS = 2,
+} codetype;
+
+typedef enum {
+	HEAD = 0,
+	FLAGS = 1,
+	TIME = 2,
+	OS = 3,
+	EXLEN = 4,
+	EXTRA = 5,
+	NAME = 6,
+	COMMENT = 7,
+	HCRC = 8,
+	DICTID = 9,
+	DICT = 10,
+	TYPE = 11,
+	TYPEDO = 12,
+	STORED = 13,
+	COPY = 14,
+	TABLE = 15,
+	LENLENS = 16,
+	CODELENS = 17,
+	LEN = 18,
+	LENEXT = 19,
+	DIST = 20,
+	DISTEXT = 21,
+	MATCH = 22,
+	LIT = 23,
+	CHECK = 24,
+	LENGTH = 25,
+	DONE = 26,
+	BAD = 27,
+	MEM = 28,
+	SYNC = 29,
+} inflate_mode;
+
+struct inflate_state {
+	inflate_mode mode;
+	int last;
+	int wrap;
+	int havedict;
+	int flags;
+	unsigned int dmax;
+	long unsigned int check;
+	long unsigned int total;
+	unsigned int wbits;
+	unsigned int wsize;
+	unsigned int whave;
+	unsigned int write;
+	unsigned char *window;
+	long unsigned int hold;
+	unsigned int bits;
+	unsigned int length;
+	unsigned int offset;
+	unsigned int extra;
+	const code *lencode;
+	const code *distcode;
+	unsigned int lenbits;
+	unsigned int distbits;
+	unsigned int ncode;
+	unsigned int nlen;
+	unsigned int ndist;
+	unsigned int have;
+	code *next;
+	short unsigned int lens[320];
+	short unsigned int work[288];
+	code codes[2048];
+};
+
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
+};
+
+typedef u8 uint8_t;
+
+typedef uint8_t BYTE;
+
+typedef uint32_t U32;
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+typedef enum {
+	trustInput = 0,
+	checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+typedef s16 int16_t;
+
+typedef u16 uint16_t;
+
+typedef uint16_t U16;
+
+typedef int16_t S16;
+
+typedef uint64_t U64;
+
+typedef struct {
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef enum {
+	FSE_repeat_none = 0,
+	FSE_repeat_check = 1,
+	FSE_repeat_valid = 2,
+} FSE_repeat;
+
+struct HUF_CElt_s {
+	U16 val;
+	BYTE nbBits;
+};
+
+typedef struct HUF_CElt_s HUF_CElt;
+
+typedef enum {
+	HUF_repeat_none = 0,
+	HUF_repeat_check = 1,
+	HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef enum {
+	ZSTDcs_created = 0,
+	ZSTDcs_init = 1,
+	ZSTDcs_ongoing = 2,
+	ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_fast = 1,
+	ZSTD_dfast = 2,
+	ZSTD_greedy = 3,
+	ZSTD_lazy = 4,
+	ZSTD_lazy2 = 5,
+	ZSTD_btlazy2 = 6,
+	ZSTD_btopt = 7,
+	ZSTD_btultra = 8,
+	ZSTD_btultra2 = 9,
+} ZSTD_strategy;
+
+typedef struct {
+	unsigned int windowLog;
+	unsigned int chainLog;
+	unsigned int hashLog;
+	unsigned int searchLog;
+	unsigned int minMatch;
+	unsigned int targetLength;
+	ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+typedef struct {
+	int contentSizeFlag;
+	int checksumFlag;
+	int noDictIDFlag;
+} ZSTD_frameParameters;
+
+typedef enum {
+	ZSTD_dictDefaultAttach = 0,
+	ZSTD_dictForceAttach = 1,
+	ZSTD_dictForceCopy = 2,
+	ZSTD_dictForceLoad = 3,
+} ZSTD_dictAttachPref_e;
+
+typedef enum {
+	ZSTD_lcm_auto = 0,
+	ZSTD_lcm_huffman = 1,
+	ZSTD_lcm_uncompressed = 2,
+} ZSTD_literalCompressionMode_e;
+
+typedef struct {
+	U32 enableLdm;
+	U32 hashLog;
+	U32 bucketSizeLog;
+	U32 minMatchLength;
+	U32 hashRateLog;
+	U32 windowLog;
+} ldmParams_t;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+typedef enum {
+	ZSTD_sf_noBlockDelimiters = 0,
+	ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_e;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+struct ZSTD_CCtx_params_s {
+	ZSTD_format_e format;
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+	int compressionLevel;
+	int forceWindow;
+	size_t targetCBlockSize;
+	int srcSizeHint;
+	ZSTD_dictAttachPref_e attachDictPref;
+	ZSTD_literalCompressionMode_e literalCompressionMode;
+	int nbWorkers;
+	size_t jobSize;
+	int overlapLog;
+	int rsyncable;
+	ldmParams_t ldmParams;
+	int enableDedicatedDictSearch;
+	ZSTD_bufferMode_e inBufferMode;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_sequenceFormat_e blockDelimiters;
+	int validateSequences;
+	ZSTD_customMem customMem;
+};
+
+typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
+
+typedef enum {
+	ZSTD_cwksp_alloc_objects = 0,
+	ZSTD_cwksp_alloc_buffers = 1,
+	ZSTD_cwksp_alloc_aligned = 2,
+} ZSTD_cwksp_alloc_phase_e;
+
+typedef enum {
+	ZSTD_cwksp_dynamic_alloc = 0,
+	ZSTD_cwksp_static_alloc = 1,
+} ZSTD_cwksp_static_alloc_e;
+
+typedef struct {
+	void *workspace;
+	void *workspaceEnd;
+	void *objectEnd;
+	void *tableEnd;
+	void *tableValidEnd;
+	void *allocStart;
+	BYTE allocFailed;
+	int workspaceOversizedDuration;
+	ZSTD_cwksp_alloc_phase_e phase;
+	ZSTD_cwksp_static_alloc_e isStatic;
+} ZSTD_cwksp;
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+struct POOL_ctx_s;
+
+typedef struct POOL_ctx_s ZSTD_threadPool;
+
+typedef struct {
+	unsigned int offset;
+	unsigned int litLength;
+	unsigned int matchLength;
+	unsigned int rep;
+} ZSTD_Sequence;
+
+typedef struct {
+	int collectSequences;
+	ZSTD_Sequence *seqStart;
+	size_t seqIndex;
+	size_t maxSequences;
+} SeqCollector;
+
+struct seqDef_s;
+
+typedef struct seqDef_s seqDef;
+
+typedef struct {
+	seqDef *sequencesStart;
+	seqDef *sequences;
+	BYTE *litStart;
+	BYTE *lit;
+	BYTE *llCode;
+	BYTE *mlCode;
+	BYTE *ofCode;
+	size_t maxNbSeq;
+	size_t maxNbLit;
+	U32 longLengthID;
+	U32 longLengthPos;
+} seqStore_t;
+
+typedef struct {
+	const BYTE *nextSrc;
+	const BYTE *base;
+	const BYTE *dictBase;
+	U32 dictLimit;
+	U32 lowLimit;
+} ZSTD_window_t;
+
+typedef struct {
+	U32 offset;
+	U32 checksum;
+} ldmEntry_t;
+
+typedef struct {
+	const BYTE *split;
+	U32 hash;
+	U32 checksum;
+	ldmEntry_t *bucket;
+} ldmMatchCandidate_t;
+
+typedef struct {
+	ZSTD_window_t window;
+	ldmEntry_t *hashTable;
+	U32 loadedDictEnd;
+	BYTE *bucketOffsets;
+	size_t splitIndices[64];
+	ldmMatchCandidate_t matchCandidates[64];
+} ldmState_t;
+
+typedef struct {
+	U32 offset;
+	U32 litLength;
+	U32 matchLength;
+} rawSeq;
+
+typedef struct {
+	rawSeq *seq;
+	size_t pos;
+	size_t posInSequence;
+	size_t size;
+	size_t capacity;
+} rawSeqStore_t;
+
+typedef struct {
+	HUF_CElt CTable[256];
+	HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+typedef struct {
+	FSE_CTable offcodeCTable[193];
+	FSE_CTable matchlengthCTable[363];
+	FSE_CTable litlengthCTable[329];
+	FSE_repeat offcode_repeatMode;
+	FSE_repeat matchlength_repeatMode;
+	FSE_repeat litlength_repeatMode;
+} ZSTD_fseCTables_t;
+
+typedef struct {
+	ZSTD_hufCTables_t huf;
+	ZSTD_fseCTables_t fse;
+} ZSTD_entropyCTables_t;
+
+typedef struct {
+	ZSTD_entropyCTables_t entropy;
+	U32 rep[3];
+} ZSTD_compressedBlockState_t;
+
+typedef struct {
+	U32 off;
+	U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+	int price;
+	U32 off;
+	U32 mlen;
+	U32 litlen;
+	U32 rep[3];
+} ZSTD_optimal_t;
+
+typedef enum {
+	zop_dynamic = 0,
+	zop_predef = 1,
+} ZSTD_OptPrice_e;
+
+typedef struct {
+	unsigned int *litFreq;
+	unsigned int *litLengthFreq;
+	unsigned int *matchLengthFreq;
+	unsigned int *offCodeFreq;
+	ZSTD_match_t *matchTable;
+	ZSTD_optimal_t *priceTable;
+	U32 litSum;
+	U32 litLengthSum;
+	U32 matchLengthSum;
+	U32 offCodeSum;
+	U32 litSumBasePrice;
+	U32 litLengthSumBasePrice;
+	U32 matchLengthSumBasePrice;
+	U32 offCodeSumBasePrice;
+	ZSTD_OptPrice_e priceType;
+	const ZSTD_entropyCTables_t *symbolCosts;
+	ZSTD_literalCompressionMode_e literalCompressionMode;
+} optState_t;
+
+struct ZSTD_matchState_t;
+
+typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+struct ZSTD_matchState_t {
+	ZSTD_window_t window;
+	U32 loadedDictEnd;
+	U32 nextToUpdate;
+	U32 hashLog3;
+	U32 *hashTable;
+	U32 *hashTable3;
+	U32 *chainTable;
+	int dedicatedDictSearch;
+	optState_t opt;
+	const ZSTD_matchState_t *dictMatchState;
+	ZSTD_compressionParameters cParams;
+	const rawSeqStore_t *ldmSeqStore;
+};
+
+typedef struct {
+	ZSTD_compressedBlockState_t *prevCBlock;
+	ZSTD_compressedBlockState_t *nextCBlock;
+	ZSTD_matchState_t matchState;
+} ZSTD_blockState_t;
+
+typedef enum {
+	ZSTDb_not_buffered = 0,
+	ZSTDb_buffered = 1,
+} ZSTD_buffered_policy_e;
+
+typedef enum {
+	zcss_init = 0,
+	zcss_load = 1,
+	zcss_flush = 2,
+} ZSTD_cStreamStage;
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+struct ZSTD_CDict_s;
+
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+typedef struct {
+	void *dictBuffer;
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+	ZSTD_CDict *cdict;
+} ZSTD_localDict;
+
+struct ZSTD_prefixDict_s {
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+};
+
+typedef struct ZSTD_prefixDict_s ZSTD_prefixDict;
+
+struct ZSTD_CCtx_s {
+	ZSTD_compressionStage_e stage;
+	int cParamsChanged;
+	int bmi2;
+	ZSTD_CCtx_params requestedParams;
+	ZSTD_CCtx_params appliedParams;
+	U32 dictID;
+	size_t dictContentSize;
+	ZSTD_cwksp workspace;
+	size_t blockSize;
+	long long unsigned int pledgedSrcSizePlusOne;
+	long long unsigned int consumedSrcSize;
+	long long unsigned int producedCSize;
+	struct xxh64_state xxhState;
+	ZSTD_customMem customMem;
+	ZSTD_threadPool *pool;
+	size_t staticSize;
+	SeqCollector seqCollector;
+	int isFirstBlock;
+	int initialized;
+	seqStore_t seqStore;
+	ldmState_t ldmState;
+	rawSeq *ldmSequences;
+	size_t maxNbLdmSequences;
+	rawSeqStore_t externSeqStore;
+	ZSTD_blockState_t blockState;
+	U32 *entropyWorkspace;
+	ZSTD_buffered_policy_e bufferedPolicy;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inToCompress;
+	size_t inBuffPos;
+	size_t inBuffTarget;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outBuffContentSize;
+	size_t outBuffFlushedSize;
+	ZSTD_cStreamStage streamStage;
+	U32 frameEnded;
+	ZSTD_inBuffer expectedInBuffer;
+	size_t expectedOutBufferSize;
+	ZSTD_localDict localDict;
+	const ZSTD_CDict *cdict;
+	ZSTD_prefixDict prefixDict;
+};
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+
+typedef enum {
+	ZSTD_c_compressionLevel = 100,
+	ZSTD_c_windowLog = 101,
+	ZSTD_c_hashLog = 102,
+	ZSTD_c_chainLog = 103,
+	ZSTD_c_searchLog = 104,
+	ZSTD_c_minMatch = 105,
+	ZSTD_c_targetLength = 106,
+	ZSTD_c_strategy = 107,
+	ZSTD_c_enableLongDistanceMatching = 160,
+	ZSTD_c_ldmHashLog = 161,
+	ZSTD_c_ldmMinMatch = 162,
+	ZSTD_c_ldmBucketSizeLog = 163,
+	ZSTD_c_ldmHashRateLog = 164,
+	ZSTD_c_contentSizeFlag = 200,
+	ZSTD_c_checksumFlag = 201,
+	ZSTD_c_dictIDFlag = 202,
+	ZSTD_c_nbWorkers = 400,
+	ZSTD_c_jobSize = 401,
+	ZSTD_c_overlapLog = 402,
+	ZSTD_c_experimentalParam1 = 500,
+	ZSTD_c_experimentalParam2 = 10,
+	ZSTD_c_experimentalParam3 = 1000,
+	ZSTD_c_experimentalParam4 = 1001,
+	ZSTD_c_experimentalParam5 = 1002,
+	ZSTD_c_experimentalParam6 = 1003,
+	ZSTD_c_experimentalParam7 = 1004,
+	ZSTD_c_experimentalParam8 = 1005,
+	ZSTD_c_experimentalParam9 = 1006,
+	ZSTD_c_experimentalParam10 = 1007,
+	ZSTD_c_experimentalParam11 = 1008,
+	ZSTD_c_experimentalParam12 = 1009,
+} ZSTD_cParameter;
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef enum {
+	ZSTD_e_continue = 0,
+	ZSTD_e_flush = 1,
+	ZSTD_e_end = 2,
+} ZSTD_EndDirective;
+
+struct ZSTD_CDict_s {
+	const void *dictContent;
+	size_t dictContentSize;
+	ZSTD_dictContentType_e dictContentType;
+	U32 *entropyWorkspace;
+	ZSTD_cwksp workspace;
+	ZSTD_matchState_t matchState;
+	ZSTD_compressedBlockState_t cBlockState;
+	ZSTD_customMem customMem;
+	U32 dictID;
+	int compressionLevel;
+};
+
+typedef struct {
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef struct {
+	long long unsigned int ingested;
+	long long unsigned int consumed;
+	long long unsigned int produced;
+	long long unsigned int flushed;
+	unsigned int currentJobID;
+	unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+struct seqDef_s {
+	U32 offset;
+	U16 litLength;
+	U16 matchLength;
+};
+
+typedef enum {
+	ZSTD_dtlm_fast = 0,
+	ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef enum {
+	ZSTD_noDict = 0,
+	ZSTD_extDict = 1,
+	ZSTD_dictMatchState = 2,
+	ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+typedef enum {
+	ZSTD_cpm_noAttachDict = 0,
+	ZSTD_cpm_attachDict = 1,
+	ZSTD_cpm_createCDict = 2,
+	ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
+
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
+
+struct repcodes_s {
+	U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef enum {
+	ZSTD_defaultDisallowed = 0,
+	ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+typedef enum {
+	ZSTDcrp_makeClean = 0,
+	ZSTDcrp_leaveDirty = 1,
+} ZSTD_compResetPolicy_e;
+
+typedef enum {
+	ZSTDirp_continue = 0,
+	ZSTDirp_reset = 1,
+} ZSTD_indexResetPolicy_e;
+
+typedef enum {
+	ZSTD_resetTarget_CDict = 0,
+	ZSTD_resetTarget_CCtx = 1,
+} ZSTD_resetTarget_e;
+
+enum {
+	ZSTDbss_compress = 0,
+	ZSTDbss_noCompress = 1,
+};
+
+typedef struct {
+	U32 idx;
+	U32 posInSequence;
+	size_t posInSrc;
+} ZSTD_sequencePosition;
+
+typedef size_t (*ZSTD_sequenceCopier)(ZSTD_CCtx *, ZSTD_sequencePosition *, const ZSTD_Sequence * const, size_t, const void *, size_t);
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+struct xz_dec_microlzma;
+
+struct xz_dec;
+
+typedef __u16 __sum16;
+
+struct sg_splitter {
+	struct scatterlist *in_sg0;
+	int nents;
+	off_t skip_sg0;
+	unsigned int length_last_sg;
+	struct scatterlist *out_sg;
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+typedef u32 depot_stack_handle_t;
+
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 slabindex: 21;
+		u32 offset: 10;
+		u32 valid: 1;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	long unsigned int entries[0];
+};
+
+struct group_data {
+	int limit[21];
+	int base[20];
+	int permute[258];
+	int minLen;
+	int maxLen;
+};
+
+struct bunzip_data {
+	int writeCopies;
+	int writePos;
+	int writeRunCountdown;
+	int writeCount;
+	int writeCurrent;
+	long int (*fill)(void *, long unsigned int);
+	long int inbufCount;
+	long int inbufPos;
+	unsigned char *inbuf;
+	unsigned int inbufBitCount;
+	unsigned int inbufBits;
+	unsigned int crc32Table[256];
+	unsigned int headerCRC;
+	unsigned int totalCRC;
+	unsigned int writeCRC;
+	unsigned int *dbuf;
+	unsigned int dbufSize;
+	unsigned char selectors[32768];
+	struct group_data groups[6];
+	int io_error;
+	int byteCount[256];
+	unsigned char symToByte[256];
+	unsigned char mtfSymbol[256];
+};
+
+struct rc {
+	long int (*fill)(void *, long unsigned int);
+	uint8_t *ptr;
+	uint8_t *buffer;
+	uint8_t *buffer_end;
+	long int buffer_size;
+	uint32_t code;
+	uint32_t range;
+	uint32_t bound;
+	void (*error)(char *);
+};
+
+struct lzma_header {
+	uint8_t pos;
+	uint32_t dict_size;
+	uint64_t dst_size;
+} __attribute__((packed));
+
+struct writer {
+	uint8_t *buffer;
+	uint8_t previous_byte;
+	size_t buffer_pos;
+	int bufsize;
+	size_t global_pos;
+	long int (*flush)(void *, long unsigned int);
+	struct lzma_header *header;
+};
+
+struct cstate {
+	int state;
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+};
+
+struct word_at_a_time {
+	const long unsigned int one_bits;
+	const long unsigned int high_bits;
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
+
+typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+struct armctrl_ic {
+	void *base;
+	void *pending[3];
+	void *enable[3];
+	void *disable[3];
+	struct irq_domain *domain;
+};
+
+struct gic_quirk {
+	const char *desc;
+	const char *compatible;
+	bool (*init)(void *);
+	u32 iidr;
+	u32 mask;
+};
+
+struct iommu_fault_param;
+
+struct iopf_device_param;
+
+struct iommu_fwspec;
+
+struct dev_iommu {
+	struct mutex lock;
+	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
+	struct iommu_fwspec *fwspec;
+	struct iommu_device *iommu_dev;
+	void *priv;
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+struct iommu_fault_unrecoverable {
+	__u32 reason;
+	__u32 flags;
+	__u32 pasid;
+	__u32 perm;
+	__u64 addr;
+	__u64 fetch_addr;
+};
+
+struct iommu_fault_page_request {
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 perm;
+	__u64 addr;
+	__u64 private_data[2];
+};
+
+struct iommu_fault {
+	__u32 type;
+	__u32 padding;
+	union {
+		struct iommu_fault_unrecoverable event;
+		struct iommu_fault_page_request prm;
+		__u8 padding2[56];
+	};
+};
+
+struct iommu_page_response {
+	__u32 argsz;
+	__u32 version;
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 code;
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
+
+struct iommu_domain_geometry {
+	dma_addr_t aperture_start;
+	dma_addr_t aperture_end;
+	bool force_aperture;
+};
+
+struct iommu_dma_cookie;
+
+struct iommu_domain {
+	unsigned int type;
+	const struct iommu_domain_ops *ops;
+	long unsigned int pgsize_bitmap;
+	iommu_fault_handler_t handler;
+	void *handler_token;
+	struct iommu_domain_geometry geometry;
+	struct iommu_dma_cookie *iova_cookie;
+};
+
+typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
+
+struct iommu_iotlb_gather;
+
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	void (*detach_dev)(struct iommu_domain *, struct device *);
+	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
+	void (*free)(struct iommu_domain *);
+};
+
+struct iommu_iotlb_gather {
+	long unsigned int start;
+	long unsigned int end;
+	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
+};
+
+struct iommu_device {
+	struct list_head list;
+	const struct iommu_ops *ops;
+	struct fwnode_handle *fwnode;
+	struct device *dev;
+};
+
+struct iommu_sva {
+	struct device *dev;
+};
+
+struct iommu_fault_event {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iommu_fault_param {
+	iommu_dev_fault_handler_t handler;
+	void *data;
+	struct list_head faults;
+	struct mutex lock;
+};
+
+struct iommu_fwspec {
+	const struct iommu_ops *ops;
+	struct fwnode_handle *iommu_fwnode;
+	u32 flags;
+	unsigned int num_ids;
+	u32 ids[0];
+};
+
+struct msi_alloc_info {
+	struct msi_desc *desc;
+	irq_hw_number_t hwirq;
+	long unsigned int flags;
+	union {
+		long unsigned int ul;
+		void *ptr;
+	} scratchpad[2];
+};
+
+typedef struct msi_alloc_info msi_alloc_info_t;
+
+struct msi_domain_info;
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+};
+
+struct msi_domain_info {
+	u32 flags;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_MULTI_PCI_MSI = 4,
+	MSI_FLAG_PCI_MSIX = 8,
+	MSI_FLAG_ACTIVATE_EARLY = 16,
+	MSI_FLAG_MUST_REACTIVATE = 32,
+	MSI_FLAG_LEVEL_CAPABLE = 64,
+	MSI_FLAG_DEV_SYSFS = 128,
+	MSI_FLAG_MSIX_CONTIGUOUS = 256,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 512,
+	MSI_FLAG_FREE_MSI_DESCS = 1024,
+};
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+struct mbi_range {
+	u32 spi_start;
+	u32 nr_spis;
+	long unsigned int *bm;
+};
+
+struct partition_affinity {
+	cpumask_t mask;
+	void *partition_id;
+};
+
+struct partition_desc {
+	int nr_parts;
+	struct partition_affinity *parts;
+	struct irq_domain *domain;
+	struct irq_desc *chained_desc;
+	long unsigned int *bitmap;
+	struct irq_domain_ops ops;
+};
+
+struct odmi_data {
+	struct resource res;
+	void *base;
+	unsigned int spi_base;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct pdev_archdata {};
+
 struct mfd_cell;
 
 struct platform_device {
@@ -16034,7 +35238,7 @@
 	u32 num_resources;
 	struct resource *resource;
 	const struct platform_device_id *id_entry;
-	char *driver_override;
+	const char *driver_override;
 	struct mfd_cell *mfd_cell;
 	struct pdev_archdata archdata;
 };
@@ -16048,9 +35252,21842 @@
 	struct device_driver driver;
 	const struct platform_device_id *id_table;
 	bool prevent_deferred_probe;
+	bool driver_managed_dma;
 };
 
-struct arm_pmu;
+struct meson_gpio_irq_controller;
+
+struct irq_ctl_ops {
+	void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *, unsigned int, long unsigned int);
+	void (*gpio_irq_init)(struct meson_gpio_irq_controller *);
+	int (*gpio_irq_set_type)(struct meson_gpio_irq_controller *, unsigned int, u32 *);
+};
+
+struct meson_gpio_irq_params;
+
+struct meson_gpio_irq_controller {
+	const struct meson_gpio_irq_params *params;
+	void *base;
+	u32 channel_irqs[64];
+	long unsigned int channel_map[1];
+	spinlock_t lock;
+};
+
+struct meson_gpio_irq_params {
+	unsigned int nr_hwirq;
+	unsigned int nr_channels;
+	bool support_edge_both;
+	unsigned int edge_both_offset;
+	unsigned int edge_single_offset;
+	unsigned int pol_low_offset;
+	unsigned int pin_sel_mask;
+	struct irq_ctl_ops ops;
+};
+
+typedef u64 acpi_io_address;
+
+typedef u32 acpi_object_type;
+
+union acpi_object {
+	acpi_object_type type;
+	struct {
+		acpi_object_type type;
+		u64 value;
+	} integer;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		char *pointer;
+	} string;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		u8 *pointer;
+	} buffer;
+	struct {
+		acpi_object_type type;
+		u32 count;
+		union acpi_object *elements;
+	} package;
+	struct {
+		acpi_object_type type;
+		acpi_object_type actual_type;
+		acpi_handle handle;
+	} reference;
+	struct {
+		acpi_object_type type;
+		u32 proc_id;
+		acpi_io_address pblk_address;
+		u32 pblk_length;
+	} processor;
+	struct {
+		acpi_object_type type;
+		u32 system_level;
+		u32 resource_order;
+	} power_resource;
+};
+
+struct acpi_resource_irq {
+	u8 descriptor_length;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	u8 interrupts[1];
+};
+
+struct acpi_resource_dma {
+	u8 type;
+	u8 bus_master;
+	u8 transfer;
+	u8 channel_count;
+	u8 channels[1];
+};
+
+struct acpi_resource_start_dependent {
+	u8 descriptor_length;
+	u8 compatibility_priority;
+	u8 performance_robustness;
+};
+
+struct acpi_resource_io {
+	u8 io_decode;
+	u8 alignment;
+	u8 address_length;
+	u16 minimum;
+	u16 maximum;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_io {
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_dma {
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct acpi_resource_vendor {
+	u16 byte_length;
+	u8 byte_data[1];
+} __attribute__((packed));
+
+struct acpi_resource_vendor_typed {
+	u16 byte_length;
+	u8 uuid_subtype;
+	u8 uuid[16];
+	u8 byte_data[1];
+};
+
+struct acpi_resource_end_tag {
+	u8 checksum;
+};
+
+struct acpi_resource_memory24 {
+	u8 write_protect;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_memory32 {
+	u8 write_protect;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_memory32 {
+	u8 write_protect;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_memory_attribute {
+	u8 write_protect;
+	u8 caching;
+	u8 range_type;
+	u8 translation;
+};
+
+struct acpi_io_attribute {
+	u8 range_type;
+	u8 translation;
+	u8 translation_type;
+	u8 reserved1;
+};
+
+union acpi_resource_attribute {
+	struct acpi_memory_attribute mem;
+	struct acpi_io_attribute io;
+	u8 type_specific;
+};
+
+struct acpi_resource_label {
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_resource_source {
+	u8 index;
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_address16_attribute {
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+};
+
+struct acpi_address32_attribute {
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+};
+
+struct acpi_address64_attribute {
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+};
+
+struct acpi_resource_address {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+};
+
+struct acpi_resource_address16 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address16_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_address32 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address32_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address64_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_extended_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	u8 revision_ID;
+	struct acpi_address64_attribute address;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct acpi_resource_extended_irq {
+	u8 producer_consumer;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	struct acpi_resource_source resource_source;
+	u32 interrupts[1];
+} __attribute__((packed));
+
+struct acpi_resource_generic_register {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_resource_gpio {
+	u8 revision_id;
+	u8 connection_type;
+	u8 producer_consumer;
+	u8 pin_config;
+	u8 shareable;
+	u8 wake_capable;
+	u8 io_restriction;
+	u8 triggering;
+	u8 polarity;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_common_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_i2c_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 access_mode;
+	u16 slave_address;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_spi_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 wire_mode;
+	u8 device_polarity;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_uart_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 endian;
+	u8 data_bits;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 parity;
+	u8 lines_enabled;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u32 default_baud_rate;
+} __attribute__((packed));
+
+struct acpi_resource_csi2_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 local_port_instance;
+	u8 phy_type;
+} __attribute__((packed));
+
+struct acpi_resource_pin_function {
+	u8 revision_id;
+	u8 pin_config;
+	u8 shareable;
+	u16 function_number;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group {
+	u8 revision_id;
+	u8 producer_consumer;
+	u16 pin_table_length;
+	u16 vendor_length;
+	u16 *pin_table;
+	struct acpi_resource_label resource_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_function {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u16 function_number;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+union acpi_resource_data {
+	struct acpi_resource_irq irq;
+	struct acpi_resource_dma dma;
+	struct acpi_resource_start_dependent start_dpf;
+	struct acpi_resource_io io;
+	struct acpi_resource_fixed_io fixed_io;
+	struct acpi_resource_fixed_dma fixed_dma;
+	struct acpi_resource_vendor vendor;
+	struct acpi_resource_vendor_typed vendor_typed;
+	struct acpi_resource_end_tag end_tag;
+	struct acpi_resource_memory24 memory24;
+	struct acpi_resource_memory32 memory32;
+	struct acpi_resource_fixed_memory32 fixed_memory32;
+	struct acpi_resource_address16 address16;
+	struct acpi_resource_address32 address32;
+	struct acpi_resource_address64 address64;
+	struct acpi_resource_extended_address64 ext_address64;
+	struct acpi_resource_extended_irq extended_irq;
+	struct acpi_resource_generic_register generic_reg;
+	struct acpi_resource_gpio gpio;
+	struct acpi_resource_i2c_serialbus i2c_serial_bus;
+	struct acpi_resource_spi_serialbus spi_serial_bus;
+	struct acpi_resource_uart_serialbus uart_serial_bus;
+	struct acpi_resource_csi2_serialbus csi2_serial_bus;
+	struct acpi_resource_common_serialbus common_serial_bus;
+	struct acpi_resource_pin_function pin_function;
+	struct acpi_resource_pin_config pin_config;
+	struct acpi_resource_pin_group pin_group;
+	struct acpi_resource_pin_group_function pin_group_function;
+	struct acpi_resource_pin_group_config pin_group_config;
+	struct acpi_resource_address address;
+};
+
+struct acpi_resource {
+	u32 type;
+	u32 length;
+	union acpi_resource_data data;
+} __attribute__((packed));
+
+struct acpi_device;
+
+struct acpi_hotplug_profile {
+	struct kobject kobj;
+	int (*scan_dependent)(struct acpi_device *);
+	void (*notify_online)(struct acpi_device *);
+	bool enabled: 1;
+	bool demand_offline: 1;
+};
+
+struct acpi_device_status {
+	u32 present: 1;
+	u32 enabled: 1;
+	u32 show_in_ui: 1;
+	u32 functional: 1;
+	u32 battery_present: 1;
+	u32 reserved: 27;
+};
+
+struct acpi_device_flags {
+	u32 dynamic_status: 1;
+	u32 removable: 1;
+	u32 ejectable: 1;
+	u32 power_manageable: 1;
+	u32 match_driver: 1;
+	u32 initialized: 1;
+	u32 visited: 1;
+	u32 hotplug_notify: 1;
+	u32 is_dock_station: 1;
+	u32 of_compatible_ok: 1;
+	u32 coherent_dma: 1;
+	u32 cca_seen: 1;
+	u32 enumeration_by_parent: 1;
+	u32 honor_deps: 1;
+	u32 reserved: 18;
+};
+
+typedef char acpi_bus_id[8];
+
+struct acpi_pnp_type {
+	u32 hardware_id: 1;
+	u32 bus_address: 1;
+	u32 platform_id: 1;
+	u32 reserved: 29;
+};
+
+typedef u64 acpi_bus_address;
+
+typedef char acpi_device_name[40];
+
+typedef char acpi_device_class[20];
+
+struct acpi_device_pnp {
+	acpi_bus_id bus_id;
+	int instance_no;
+	struct acpi_pnp_type type;
+	acpi_bus_address bus_address;
+	char *unique_id;
+	struct list_head ids;
+	acpi_device_name device_name;
+	acpi_device_class device_class;
+	union acpi_object *str_obj;
+};
+
+struct acpi_device_power_flags {
+	u32 explicit_get: 1;
+	u32 power_resources: 1;
+	u32 inrush_current: 1;
+	u32 power_removed: 1;
+	u32 ignore_parent: 1;
+	u32 dsw_present: 1;
+	u32 reserved: 26;
+};
+
+struct acpi_device_power_state {
+	struct {
+		u8 valid: 1;
+		u8 explicit_set: 1;
+		u8 reserved: 6;
+	} flags;
+	int power;
+	int latency;
+	struct list_head resources;
+};
+
+struct acpi_device_power {
+	int state;
+	struct acpi_device_power_flags flags;
+	struct acpi_device_power_state states[5];
+	u8 state_for_enumeration;
+};
+
+struct acpi_device_wakeup_flags {
+	u8 valid: 1;
+	u8 notifier_present: 1;
+};
+
+struct acpi_device_wakeup_context {
+	void (*func)(struct acpi_device_wakeup_context *);
+	struct device *dev;
+};
+
+struct acpi_device_wakeup {
+	acpi_handle gpe_device;
+	u64 gpe_number;
+	u64 sleep_state;
+	struct list_head resources;
+	struct acpi_device_wakeup_flags flags;
+	struct acpi_device_wakeup_context context;
+	struct wakeup_source *ws;
+	int prepare_count;
+	int enable_count;
+};
+
+struct acpi_device_perf_flags {
+	u8 reserved: 8;
+};
+
+struct acpi_device_perf_state;
+
+struct acpi_device_perf {
+	int state;
+	struct acpi_device_perf_flags flags;
+	int state_count;
+	struct acpi_device_perf_state *states;
+};
+
+struct acpi_device_dir {
+	struct proc_dir_entry *entry;
+};
+
+struct acpi_device_data {
+	const union acpi_object *pointer;
+	struct list_head properties;
+	const union acpi_object *of_compatible;
+	struct list_head subnodes;
+};
+
+struct acpi_scan_handler;
+
+struct acpi_hotplug_context;
+
+struct acpi_gpio_mapping;
+
+struct acpi_device {
+	u32 pld_crc;
+	int device_type;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct acpi_device *parent;
+	struct list_head wakeup_list;
+	struct list_head del_list;
+	struct acpi_device_status status;
+	struct acpi_device_flags flags;
+	struct acpi_device_pnp pnp;
+	struct acpi_device_power power;
+	struct acpi_device_wakeup wakeup;
+	struct acpi_device_perf performance;
+	struct acpi_device_dir dir;
+	struct acpi_device_data data;
+	struct acpi_scan_handler *handler;
+	struct acpi_hotplug_context *hp;
+	const struct acpi_gpio_mapping *driver_gpios;
+	void *driver_data;
+	struct device dev;
+	unsigned int physical_node_count;
+	unsigned int dep_unmet;
+	struct list_head physical_node_list;
+	struct mutex physical_node_lock;
+	void (*remove)(struct acpi_device *);
+};
+
+struct acpi_scan_handler {
+	const struct acpi_device_id *ids;
+	struct list_head list_node;
+	bool (*match)(const char *, const struct acpi_device_id **);
+	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
+	void (*detach)(struct acpi_device *);
+	void (*bind)(struct device *);
+	void (*unbind)(struct device *);
+	struct acpi_hotplug_profile hotplug;
+};
+
+struct acpi_hotplug_context {
+	struct acpi_device *self;
+	int (*notify)(struct acpi_device *, u32);
+	void (*uevent)(struct acpi_device *, u32);
+	void (*fixup)(struct acpi_device *);
+};
+
+struct acpi_device_perf_state {
+	struct {
+		u8 valid: 1;
+		u8 reserved: 7;
+	} flags;
+	u8 power;
+	u8 performance;
+	int latency;
+};
+
+struct acpi_gpio_params;
+
+struct acpi_gpio_mapping {
+	const char *name;
+	const struct acpi_gpio_params *data;
+	unsigned int size;
+	unsigned int quirks;
+};
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
+	struct fwnode_handle *fwnode;
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	long unsigned int flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+	u32 (*in)(void *, long unsigned int, size_t);
+	void (*out)(void *, long unsigned int, u32, size_t);
+	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
+	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
+};
+
+struct acpi_gpio_params {
+	unsigned int crs_entry_index;
+	unsigned int line_index;
+	bool active_low;
+};
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short int flags;
+	short int index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	long unsigned int dropped;
+	void *data;
+	struct console *next;
+};
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_IOV_RESOURCES = 7,
+	PCI_IOV_RESOURCE_END = 12,
+	PCI_BRIDGE_RESOURCES = 13,
+	PCI_BRIDGE_RESOURCE_END = 16,
+	PCI_NUM_RESOURCES = 17,
+	DEVICE_COUNT_RESOURCE = 17,
+};
+
+typedef unsigned int pci_channel_state_t;
+
+typedef unsigned int pcie_reset_state_t;
+
+typedef short unsigned int pci_dev_flags_t;
+
+typedef short unsigned int pci_bus_flags_t;
+
+typedef unsigned int pci_ers_result_t;
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	long unsigned int iomap_base;
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	union {
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
+	};
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct uart_port;
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
+	int (*poll_init)(struct uart_port *);
+	void (*poll_put_char)(struct uart_port *, unsigned char);
+	int (*poll_get_char)(struct uart_port *);
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+typedef u64 upf_t;
+
+typedef unsigned int upstat_t;
+
+struct uart_state;
+
+struct gpio_desc;
+
+struct uart_port {
+	spinlock_t lock;
+	long unsigned int iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	int hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	long unsigned int sysrq;
+	unsigned int sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct plat_serial8250_port {
+	long unsigned int iobase;
+	void *membase;
+	resource_size_t mapbase;
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	upf_t flags;
+	unsigned int type;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
+struct lpc_cycle_para {
+	unsigned int opflags;
+	unsigned int csize;
+};
+
+struct hisi_lpc_dev {
+	spinlock_t cycle_lock;
+	void *membase;
+	struct logic_pio_hwaddr *io_host;
+};
+
+struct hisi_lpc_acpi_cell {
+	const char *hid;
+	const char *name;
+	void *pdata;
+	size_t pdata_size;
+};
+
+enum device_link_state {
+	DL_STATE_NONE = 4294967295,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+};
+
+struct fsl_mc_command {
+	__le64 header;
+	__le64 params[7];
+};
+
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
+};
+
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_bus;
+
+struct fsl_mc_resource_pool {
+	enum fsl_mc_pool_type type;
+	int max_count;
+	int free_count;
+	struct mutex mutex;
+	struct list_head free_list;
+	struct fsl_mc_bus *mc_bus;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+struct mc_cmd_header {
+	u8 src_id;
+	u8 flags_hw;
+	u8 status;
+	u8 flags_sw;
+	__le16 token;
+	__le16 cmd_id;
+};
+
+enum mc_cmd_status {
+	MC_CMD_STATUS_OK = 0,
+	MC_CMD_STATUS_READY = 1,
+	MC_CMD_STATUS_AUTH_ERR = 3,
+	MC_CMD_STATUS_NO_PRIVILEGE = 4,
+	MC_CMD_STATUS_DMA_ERR = 5,
+	MC_CMD_STATUS_CONFIG_ERR = 6,
+	MC_CMD_STATUS_TIMEOUT = 7,
+	MC_CMD_STATUS_NO_RESOURCE = 8,
+	MC_CMD_STATUS_NO_MEMORY = 9,
+	MC_CMD_STATUS_BUSY = 10,
+	MC_CMD_STATUS_UNSUPPORTED_OP = 11,
+	MC_CMD_STATUS_INVALID_STATE = 12,
+};
+
+struct dpbp_attr {
+	int id;
+	u16 bpid;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+struct dprc_attributes {
+	int container_id;
+	u32 icid;
+	int portal_id;
+	u64 options;
+};
+
+struct dpbp_cmd_open {
+	__le32 dpbp_id;
+};
+
+struct dpbp_rsp_get_attributes {
+	__le16 pad;
+	__le16 bpid;
+	__le32 id;
+	__le16 version_major;
+	__le16 version_minor;
+};
+
+struct fsl_mc_uapi {
+	struct miscdevice misc;
+	struct device *device;
+	struct mutex mutex;
+	u32 local_instance_in_use;
+	struct fsl_mc_io *static_mc_io;
+};
+
+struct fsl_mc_bus {
+	struct fsl_mc_device mc_dev;
+	struct fsl_mc_resource_pool resource_pools[4];
+	struct fsl_mc_device_irq *irq_resources;
+	struct mutex scan_mutex;
+	struct dprc_attributes dprc_attr;
+	struct fsl_mc_uapi uapi_misc;
+	int irq_enabled;
+};
+
+struct fsl_mc_device_id {
+	__u16 vendor;
+	const char obj_type[16];
+};
+
+struct fsl_mc_driver {
+	struct device_driver driver;
+	const struct fsl_mc_device_id *match_id_table;
+	int (*probe)(struct fsl_mc_device *);
+	int (*remove)(struct fsl_mc_device *);
+	void (*shutdown)(struct fsl_mc_device *);
+	int (*suspend)(struct fsl_mc_device *, pm_message_t);
+	int (*resume)(struct fsl_mc_device *);
+	bool driver_managed_dma;
+};
+
+struct fsl_mc_child_objs {
+	int child_count;
+	struct fsl_mc_obj_desc *child_array;
+};
+
+struct dpmcp_cmd_open {
+	__le32 dpmcp_id;
+};
+
+struct pm_domain_data {
+	struct list_head list_node;
+	struct device *dev;
+};
+
+struct reset_control;
+
+struct regmap;
+
+struct qcom_ssc_block_bus_data {
+	const char * const *pd_names;
+	struct device *pds[2];
+	char *reg_mpm_sscaon_config0;
+	char *reg_mpm_sscaon_config1;
+	struct regmap *halt_map;
+	struct clk *xo_clk;
+	struct clk *aggre2_clk;
+	struct clk *gcc_im_sleep_clk;
+	struct clk *aggre2_north_clk;
+	struct clk *ssc_xo_clk;
+	struct clk *ssc_ahbs_clk;
+	struct reset_control *ssc_bcr;
+	struct reset_control *ssc_reset;
+	u32 ssc_axi_halt;
+	int num_pds;
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	long unsigned int differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	long unsigned int hs_clk_rate;
+	long unsigned int lp_clk_rate;
+	unsigned char lanes;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy;
+
+struct phy_ops {
+	int (*init)(struct phy *);
+	int (*exit)(struct phy *);
+	int (*power_on)(struct phy *);
+	int (*power_off)(struct phy *);
+	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
+	int (*configure)(struct phy *, union phy_configure_opts *);
+	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy *);
+	int (*calibrate)(struct phy *);
+	void (*release)(struct phy *);
+	struct module *owner;
+};
+
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
+};
+
+struct regulator;
+
+struct phy {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
+};
+
+struct phy_provider {
+	struct device *dev;
+	struct device_node *children;
+	struct module *owner;
+	struct list_head list;
+	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
+};
+
+struct phy_axg_mipi_pcie_analog_priv {
+	struct phy *phy;
+	struct regmap *regmap;
+	bool dsi_configured;
+	bool dsi_enabled;
+	bool powered;
+	struct phy_configure_opts_mipi_dphy config;
+};
+
+struct tegra_p2u_of_data {
+	bool one_dir_search;
+};
+
+struct tegra_p2u {
+	void *base;
+	bool skip_sz_protection_en;
+	struct tegra_p2u_of_data *of_data;
+};
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct dev_pin_info {
+	struct pinctrl *p;
+	struct pinctrl_state *default_state;
+	struct pinctrl_state *init_state;
+	struct pinctrl_state *sleep_state;
+	struct pinctrl_state *idle_state;
+};
+
+struct pinctrl {
+	struct list_head node;
+	struct device *dev;
+	struct list_head states;
+	struct pinctrl_state *state;
+	struct list_head dt_maps;
+	struct kref users;
+};
+
+struct pinctrl_state {
+	struct list_head node;
+	const char *name;
+	struct list_head settings;
+};
+
+struct pinctrl_pin_desc {
+	unsigned int number;
+	const char *name;
+	void *drv_data;
+};
+
+struct gpio_chip;
+
+struct pinctrl_gpio_range {
+	struct list_head node;
+	const char *name;
+	unsigned int id;
+	unsigned int base;
+	unsigned int pin_base;
+	unsigned int npins;
+	const unsigned int *pins;
+	struct gpio_chip *gc;
+};
+
+union gpio_irq_fwspec;
+
+struct gpio_irq_chip {
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	const struct irq_domain_ops *domain_ops;
+	struct fwnode_handle *fwnode;
+	struct irq_domain *parent_domain;
+	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
+	int (*populate_parent_alloc_arg)(struct gpio_chip *, union gpio_irq_fwspec *, unsigned int, unsigned int);
+	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
+	struct irq_domain_ops child_irq_domain_ops;
+	irq_flow_handler_t handler;
+	unsigned int default_type;
+	struct lock_class_key *lock_key;
+	struct lock_class_key *request_key;
+	irq_flow_handler_t parent_handler;
+	union {
+		void *parent_handler_data;
+		void **parent_handler_data_array;
+	};
+	unsigned int num_parents;
+	unsigned int *parents;
+	unsigned int *map;
+	bool threaded;
+	bool per_parent_data;
+	bool initialized;
+	int (*init_hw)(struct gpio_chip *);
+	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	long unsigned int *valid_mask;
+	unsigned int first;
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+};
+
+struct gpio_device;
+
+struct gpio_chip {
+	const char *label;
+	struct gpio_device *gpiodev;
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	struct module *owner;
+	int (*request)(struct gpio_chip *, unsigned int);
+	void (*free)(struct gpio_chip *, unsigned int);
+	int (*get_direction)(struct gpio_chip *, unsigned int);
+	int (*direction_input)(struct gpio_chip *, unsigned int);
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	int (*get)(struct gpio_chip *, unsigned int);
+	int (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	void (*set)(struct gpio_chip *, unsigned int, int);
+	void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
+	int (*to_irq)(struct gpio_chip *, unsigned int);
+	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int base;
+	u16 ngpio;
+	u16 offset;
+	const char * const *names;
+	bool can_sleep;
+	long unsigned int (*read_reg)(void *);
+	void (*write_reg)(void *, long unsigned int);
+	bool be_bits;
+	void *reg_dat;
+	void *reg_set;
+	void *reg_clr;
+	void *reg_dir_out;
+	void *reg_dir_in;
+	bool bgpio_dir_unreadable;
+	int bgpio_bits;
+	raw_spinlock_t bgpio_lock;
+	long unsigned int bgpio_data;
+	long unsigned int bgpio_dir;
+	struct gpio_irq_chip irq;
+	long unsigned int *valid_mask;
+	struct device_node *of_node;
+	unsigned int of_gpio_n_cells;
+	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+	int (*of_gpio_ranges_fallback)(struct gpio_chip *, struct device_node *);
+};
+
+struct pinctrl_dev;
+
+struct pinctrl_map;
+
+struct pinctrl_ops {
+	int (*get_groups_count)(struct pinctrl_dev *);
+	const char * (*get_group_name)(struct pinctrl_dev *, unsigned int);
+	int (*get_group_pins)(struct pinctrl_dev *, unsigned int, const unsigned int **, unsigned int *);
+	void (*pin_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	int (*dt_node_to_map)(struct pinctrl_dev *, struct device_node *, struct pinctrl_map **, unsigned int *);
+	void (*dt_free_map)(struct pinctrl_dev *, struct pinctrl_map *, unsigned int);
+};
+
+struct pinctrl_desc;
+
+struct pinctrl_dev {
+	struct list_head node;
+	struct pinctrl_desc *desc;
+	struct xarray pin_desc_tree;
+	struct xarray pin_group_tree;
+	unsigned int num_groups;
+	struct xarray pin_function_tree;
+	unsigned int num_functions;
+	struct list_head gpio_ranges;
+	struct device *dev;
+	struct module *owner;
+	void *driver_data;
+	struct pinctrl *p;
+	struct pinctrl_state *hog_default;
+	struct pinctrl_state *hog_sleep;
+	struct mutex mutex;
+	struct dentry *device_root;
+};
+
+enum pinctrl_map_type {
+	PIN_MAP_TYPE_INVALID = 0,
+	PIN_MAP_TYPE_DUMMY_STATE = 1,
+	PIN_MAP_TYPE_MUX_GROUP = 2,
+	PIN_MAP_TYPE_CONFIGS_PIN = 3,
+	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
+};
+
+struct pinctrl_map_mux {
+	const char *group;
+	const char *function;
+};
+
+struct pinctrl_map_configs {
+	const char *group_or_pin;
+	long unsigned int *configs;
+	unsigned int num_configs;
+};
+
+struct pinctrl_map {
+	const char *dev_name;
+	const char *name;
+	enum pinctrl_map_type type;
+	const char *ctrl_dev_name;
+	union {
+		struct pinctrl_map_mux mux;
+		struct pinctrl_map_configs configs;
+	} data;
+};
+
+struct pinmux_ops;
+
+struct pinconf_ops;
+
+struct pinconf_generic_params;
+
+struct pin_config_item;
+
+struct pinctrl_desc {
+	const char *name;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	const struct pinctrl_ops *pctlops;
+	const struct pinmux_ops *pmxops;
+	const struct pinconf_ops *confops;
+	struct module *owner;
+	unsigned int num_custom_params;
+	const struct pinconf_generic_params *custom_params;
+	const struct pin_config_item *custom_conf_items;
+	bool link_consumers;
+};
+
+struct pinmux_ops {
+	int (*request)(struct pinctrl_dev *, unsigned int);
+	int (*free)(struct pinctrl_dev *, unsigned int);
+	int (*get_functions_count)(struct pinctrl_dev *);
+	const char * (*get_function_name)(struct pinctrl_dev *, unsigned int);
+	int (*get_function_groups)(struct pinctrl_dev *, unsigned int, const char * const **, unsigned int *);
+	int (*set_mux)(struct pinctrl_dev *, unsigned int, unsigned int);
+	int (*gpio_request_enable)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
+	void (*gpio_disable_free)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
+	int (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);
+	bool strict;
+};
+
+struct pinconf_ops {
+	bool is_generic;
+	int (*pin_config_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
+	int (*pin_config_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
+	int (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
+	int (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
+	void (*pin_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	void (*pin_config_group_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	void (*pin_config_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, long unsigned int);
+};
+
+enum pin_config_param {
+	PIN_CONFIG_BIAS_BUS_HOLD = 0,
+	PIN_CONFIG_BIAS_DISABLE = 1,
+	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
+	PIN_CONFIG_BIAS_PULL_DOWN = 3,
+	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
+	PIN_CONFIG_BIAS_PULL_UP = 5,
+	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
+	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
+	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
+	PIN_CONFIG_DRIVE_STRENGTH = 9,
+	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
+	PIN_CONFIG_INPUT_DEBOUNCE = 11,
+	PIN_CONFIG_INPUT_ENABLE = 12,
+	PIN_CONFIG_INPUT_SCHMITT = 13,
+	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
+	PIN_CONFIG_OUTPUT = 17,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
+	PIN_CONFIG_END = 127,
+	PIN_CONFIG_MAX = 255,
+};
+
+struct pinconf_generic_params {
+	const char * const property;
+	enum pin_config_param param;
+	u32 default_value;
+};
+
+struct pin_config_item {
+	const enum pin_config_param param;
+	const char * const display;
+	const char * const format;
+	bool has_arg;
+};
+
+union gpio_irq_fwspec {
+	struct irq_fwspec fwspec;
+	msi_alloc_info_t msiinfo;
+};
+
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_COMPRESSED = 2,
+	REGCACHE_FLAT = 3,
+};
+
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
+};
+
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
+};
+
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_downshift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
+};
+
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+enum rockchip_pinctrl_type {
+	PX30 = 0,
+	RV1108 = 1,
+	RK2928 = 2,
+	RK3066B = 3,
+	RK3128 = 4,
+	RK3188 = 5,
+	RK3288 = 6,
+	RK3308 = 7,
+	RK3368 = 8,
+	RK3399 = 9,
+	RK3568 = 10,
+	RK3588 = 11,
+};
+
+struct rockchip_gpio_regs {
+	u32 port_dr;
+	u32 port_ddr;
+	u32 int_en;
+	u32 int_mask;
+	u32 int_type;
+	u32 int_polarity;
+	u32 int_bothedge;
+	u32 int_status;
+	u32 int_rawstatus;
+	u32 debounce;
+	u32 dbclk_div_en;
+	u32 dbclk_div_con;
+	u32 port_eoi;
+	u32 ext_port;
+	u32 version_id;
+};
+
+struct rockchip_iomux {
+	int type;
+	int offset;
+};
+
+enum rockchip_pin_drv_type {
+	DRV_TYPE_IO_DEFAULT = 0,
+	DRV_TYPE_IO_1V8_OR_3V0 = 1,
+	DRV_TYPE_IO_1V8_ONLY = 2,
+	DRV_TYPE_IO_1V8_3V0_AUTO = 3,
+	DRV_TYPE_IO_3V3_ONLY = 4,
+	DRV_TYPE_MAX = 5,
+};
+
+enum rockchip_pin_pull_type {
+	PULL_TYPE_IO_DEFAULT = 0,
+	PULL_TYPE_IO_1V8_ONLY = 1,
+	PULL_TYPE_MAX = 2,
+};
+
+struct rockchip_drv {
+	enum rockchip_pin_drv_type drv_type;
+	int offset;
+};
+
+struct rockchip_pinctrl;
+
+struct rockchip_pin_bank {
+	struct device *dev;
+	void *reg_base;
+	struct regmap *regmap_pull;
+	struct clk *clk;
+	struct clk *db_clk;
+	int irq;
+	u32 saved_masks;
+	u32 pin_base;
+	u8 nr_pins;
+	char *name;
+	u8 bank_num;
+	struct rockchip_iomux iomux[4];
+	struct rockchip_drv drv[4];
+	enum rockchip_pin_pull_type pull_type[4];
+	bool valid;
+	struct device_node *of_node;
+	struct rockchip_pinctrl *drvdata;
+	struct irq_domain *domain;
+	struct gpio_chip gpio_chip;
+	struct pinctrl_gpio_range grange;
+	raw_spinlock_t slock;
+	const struct rockchip_gpio_regs *gpio_regs;
+	u32 gpio_type;
+	u32 toggle_edge_mode;
+	u32 recalced_mask;
+	u32 route_mask;
+	struct list_head deferred_pins;
+	struct mutex deferred_lock;
+};
+
+struct rockchip_pin_ctrl;
+
+struct rockchip_pin_group;
+
+struct rockchip_pmx_func;
+
+struct rockchip_pinctrl {
+	struct regmap *regmap_base;
+	int reg_size;
+	struct regmap *regmap_pull;
+	struct regmap *regmap_pmu;
+	struct device *dev;
+	struct rockchip_pin_ctrl *ctrl;
+	struct pinctrl_desc pctl;
+	struct pinctrl_dev *pctl_dev;
+	struct rockchip_pin_group *groups;
+	unsigned int ngroups;
+	struct rockchip_pmx_func *functions;
+	unsigned int nfunctions;
+};
+
+struct rockchip_mux_recalced_data {
+	u8 num;
+	u8 pin;
+	u32 reg;
+	u8 bit;
+	u8 mask;
+};
+
+enum rockchip_mux_route_location {
+	ROCKCHIP_ROUTE_SAME = 0,
+	ROCKCHIP_ROUTE_PMU = 1,
+	ROCKCHIP_ROUTE_GRF = 2,
+};
+
+struct rockchip_mux_route_data {
+	u8 bank_num;
+	u8 pin;
+	u8 func;
+	enum rockchip_mux_route_location route_location;
+	u32 route_offset;
+	u32 route_val;
+};
+
+struct rockchip_pin_ctrl {
+	struct rockchip_pin_bank *pin_banks;
+	u32 nr_banks;
+	u32 nr_pins;
+	char *label;
+	enum rockchip_pinctrl_type type;
+	int grf_mux_offset;
+	int pmu_mux_offset;
+	int grf_drv_offset;
+	int pmu_drv_offset;
+	struct rockchip_mux_recalced_data *iomux_recalced;
+	u32 niomux_recalced;
+	struct rockchip_mux_route_data *iomux_routes;
+	u32 niomux_routes;
+	int (*pull_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
+	int (*drv_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
+	int (*schmitt_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
+};
+
+struct rockchip_pin_config {
+	unsigned int func;
+	long unsigned int *configs;
+	unsigned int nconfigs;
+};
+
+struct rockchip_pin_deferred {
+	struct list_head head;
+	unsigned int pin;
+	enum pin_config_param param;
+	u32 arg;
+};
+
+struct rockchip_pin_group {
+	const char *name;
+	unsigned int npins;
+	unsigned int *pins;
+	struct rockchip_pin_config *data;
+};
+
+struct rockchip_pmx_func {
+	const char *name;
+	const char **groups;
+	u8 ngroups;
+};
+
+struct imx_pin_mmio {
+	unsigned int mux_mode;
+	u16 input_reg;
+	unsigned int input_val;
+	long unsigned int config;
+};
+
+struct imx_pin_scu {
+	unsigned int mux_mode;
+	long unsigned int config;
+};
+
+struct imx_pin {
+	unsigned int pin;
+	union {
+		struct imx_pin_mmio mmio;
+		struct imx_pin_scu scu;
+	} conf;
+};
+
+struct imx_pin_reg {
+	s16 mux_reg;
+	s16 conf_reg;
+};
+
+struct imx_cfg_params_decode {
+	enum pin_config_param param;
+	u32 mask;
+	u8 shift;
+	bool invert;
+};
+
+struct imx_pinctrl_soc_info;
+
+struct imx_pinctrl {
+	struct device *dev;
+	struct pinctrl_dev *pctl;
+	void *base;
+	void *input_sel_base;
+	const struct imx_pinctrl_soc_info *info;
+	struct imx_pin_reg *pin_regs;
+	unsigned int group_index;
+	struct mutex mutex;
+};
+
+struct imx_pinctrl_soc_info {
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	unsigned int flags;
+	const char *gpr_compatible;
+	unsigned int mux_mask;
+	u8 mux_shift;
+	bool generic_pinconf;
+	const struct pinconf_generic_params *custom_params;
+	unsigned int num_custom_params;
+	const struct imx_cfg_params_decode *decodes;
+	unsigned int num_decodes;
+	void (*fixup)(long unsigned int *, unsigned int, u32 *);
+	int (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);
+	int (*imx_pinconf_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
+	int (*imx_pinconf_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
+	void (*imx_pinctrl_parse_pin)(struct imx_pinctrl *, unsigned int *, struct imx_pin *, const __be32 **);
+};
+
+enum imx8mn_pads {
+	MX8MN_PAD_RESERVE0 = 0,
+	MX8MN_PAD_RESERVE1 = 1,
+	MX8MN_PAD_RESERVE2 = 2,
+	MX8MN_PAD_RESERVE3 = 3,
+	MX8MN_PAD_RESERVE4 = 4,
+	MX8MN_PAD_RESERVE5 = 5,
+	MX8MN_PAD_RESERVE6 = 6,
+	MX8MN_PAD_RESERVE7 = 7,
+	MX8MN_IOMUXC_BOOT_MODE2 = 8,
+	MX8MN_IOMUXC_BOOT_MODE3 = 9,
+	MX8MN_IOMUXC_GPIO1_IO00 = 10,
+	MX8MN_IOMUXC_GPIO1_IO01 = 11,
+	MX8MN_IOMUXC_GPIO1_IO02 = 12,
+	MX8MN_IOMUXC_GPIO1_IO03 = 13,
+	MX8MN_IOMUXC_GPIO1_IO04 = 14,
+	MX8MN_IOMUXC_GPIO1_IO05 = 15,
+	MX8MN_IOMUXC_GPIO1_IO06 = 16,
+	MX8MN_IOMUXC_GPIO1_IO07 = 17,
+	MX8MN_IOMUXC_GPIO1_IO08 = 18,
+	MX8MN_IOMUXC_GPIO1_IO09 = 19,
+	MX8MN_IOMUXC_GPIO1_IO10 = 20,
+	MX8MN_IOMUXC_GPIO1_IO11 = 21,
+	MX8MN_IOMUXC_GPIO1_IO12 = 22,
+	MX8MN_IOMUXC_GPIO1_IO13 = 23,
+	MX8MN_IOMUXC_GPIO1_IO14 = 24,
+	MX8MN_IOMUXC_GPIO1_IO15 = 25,
+	MX8MN_IOMUXC_ENET_MDC = 26,
+	MX8MN_IOMUXC_ENET_MDIO = 27,
+	MX8MN_IOMUXC_ENET_TD3 = 28,
+	MX8MN_IOMUXC_ENET_TD2 = 29,
+	MX8MN_IOMUXC_ENET_TD1 = 30,
+	MX8MN_IOMUXC_ENET_TD0 = 31,
+	MX8MN_IOMUXC_ENET_TX_CTL = 32,
+	MX8MN_IOMUXC_ENET_TXC = 33,
+	MX8MN_IOMUXC_ENET_RX_CTL = 34,
+	MX8MN_IOMUXC_ENET_RXC = 35,
+	MX8MN_IOMUXC_ENET_RD0 = 36,
+	MX8MN_IOMUXC_ENET_RD1 = 37,
+	MX8MN_IOMUXC_ENET_RD2 = 38,
+	MX8MN_IOMUXC_ENET_RD3 = 39,
+	MX8MN_IOMUXC_SD1_CLK = 40,
+	MX8MN_IOMUXC_SD1_CMD = 41,
+	MX8MN_IOMUXC_SD1_DATA0 = 42,
+	MX8MN_IOMUXC_SD1_DATA1 = 43,
+	MX8MN_IOMUXC_SD1_DATA2 = 44,
+	MX8MN_IOMUXC_SD1_DATA3 = 45,
+	MX8MN_IOMUXC_SD1_DATA4 = 46,
+	MX8MN_IOMUXC_SD1_DATA5 = 47,
+	MX8MN_IOMUXC_SD1_DATA6 = 48,
+	MX8MN_IOMUXC_SD1_DATA7 = 49,
+	MX8MN_IOMUXC_SD1_RESET_B = 50,
+	MX8MN_IOMUXC_SD1_STROBE = 51,
+	MX8MN_IOMUXC_SD2_CD_B = 52,
+	MX8MN_IOMUXC_SD2_CLK = 53,
+	MX8MN_IOMUXC_SD2_CMD = 54,
+	MX8MN_IOMUXC_SD2_DATA0 = 55,
+	MX8MN_IOMUXC_SD2_DATA1 = 56,
+	MX8MN_IOMUXC_SD2_DATA2 = 57,
+	MX8MN_IOMUXC_SD2_DATA3 = 58,
+	MX8MN_IOMUXC_SD2_RESET_B = 59,
+	MX8MN_IOMUXC_SD2_WP = 60,
+	MX8MN_IOMUXC_NAND_ALE = 61,
+	MX8MN_IOMUXC_NAND_CE0 = 62,
+	MX8MN_IOMUXC_NAND_CE1 = 63,
+	MX8MN_IOMUXC_NAND_CE2 = 64,
+	MX8MN_IOMUXC_NAND_CE3 = 65,
+	MX8MN_IOMUXC_NAND_CLE = 66,
+	MX8MN_IOMUXC_NAND_DATA00 = 67,
+	MX8MN_IOMUXC_NAND_DATA01 = 68,
+	MX8MN_IOMUXC_NAND_DATA02 = 69,
+	MX8MN_IOMUXC_NAND_DATA03 = 70,
+	MX8MN_IOMUXC_NAND_DATA04 = 71,
+	MX8MN_IOMUXC_NAND_DATA05 = 72,
+	MX8MN_IOMUXC_NAND_DATA06 = 73,
+	MX8MN_IOMUXC_NAND_DATA07 = 74,
+	MX8MN_IOMUXC_NAND_DQS = 75,
+	MX8MN_IOMUXC_NAND_RE_B = 76,
+	MX8MN_IOMUXC_NAND_READY_B = 77,
+	MX8MN_IOMUXC_NAND_WE_B = 78,
+	MX8MN_IOMUXC_NAND_WP_B = 79,
+	MX8MN_IOMUXC_SAI5_RXFS = 80,
+	MX8MN_IOMUXC_SAI5_RXC = 81,
+	MX8MN_IOMUXC_SAI5_RXD0 = 82,
+	MX8MN_IOMUXC_SAI5_RXD1 = 83,
+	MX8MN_IOMUXC_SAI5_RXD2 = 84,
+	MX8MN_IOMUXC_SAI5_RXD3 = 85,
+	MX8MN_IOMUXC_SAI5_MCLK = 86,
+	MX8MN_IOMUXC_SAI1_RXFS = 87,
+	MX8MN_IOMUXC_SAI1_RXC = 88,
+	MX8MN_IOMUXC_SAI1_RXD0 = 89,
+	MX8MN_IOMUXC_SAI1_RXD1 = 90,
+	MX8MN_IOMUXC_SAI1_RXD2 = 91,
+	MX8MN_IOMUXC_SAI1_RXD3 = 92,
+	MX8MN_IOMUXC_SAI1_RXD4 = 93,
+	MX8MN_IOMUXC_SAI1_RXD5 = 94,
+	MX8MN_IOMUXC_SAI1_RXD6 = 95,
+	MX8MN_IOMUXC_SAI1_RXD7 = 96,
+	MX8MN_IOMUXC_SAI1_TXFS = 97,
+	MX8MN_IOMUXC_SAI1_TXC = 98,
+	MX8MN_IOMUXC_SAI1_TXD0 = 99,
+	MX8MN_IOMUXC_SAI1_TXD1 = 100,
+	MX8MN_IOMUXC_SAI1_TXD2 = 101,
+	MX8MN_IOMUXC_SAI1_TXD3 = 102,
+	MX8MN_IOMUXC_SAI1_TXD4 = 103,
+	MX8MN_IOMUXC_SAI1_TXD5 = 104,
+	MX8MN_IOMUXC_SAI1_TXD6 = 105,
+	MX8MN_IOMUXC_SAI1_TXD7 = 106,
+	MX8MN_IOMUXC_SAI1_MCLK = 107,
+	MX8MN_IOMUXC_SAI2_RXFS = 108,
+	MX8MN_IOMUXC_SAI2_RXC = 109,
+	MX8MN_IOMUXC_SAI2_RXD0 = 110,
+	MX8MN_IOMUXC_SAI2_TXFS = 111,
+	MX8MN_IOMUXC_SAI2_TXC = 112,
+	MX8MN_IOMUXC_SAI2_TXD0 = 113,
+	MX8MN_IOMUXC_SAI2_MCLK = 114,
+	MX8MN_IOMUXC_SAI3_RXFS = 115,
+	MX8MN_IOMUXC_SAI3_RXC = 116,
+	MX8MN_IOMUXC_SAI3_RXD = 117,
+	MX8MN_IOMUXC_SAI3_TXFS = 118,
+	MX8MN_IOMUXC_SAI3_TXC = 119,
+	MX8MN_IOMUXC_SAI3_TXD = 120,
+	MX8MN_IOMUXC_SAI3_MCLK = 121,
+	MX8MN_IOMUXC_SPDIF_TX = 122,
+	MX8MN_IOMUXC_SPDIF_RX = 123,
+	MX8MN_IOMUXC_SPDIF_EXT_CLK = 124,
+	MX8MN_IOMUXC_ECSPI1_SCLK = 125,
+	MX8MN_IOMUXC_ECSPI1_MOSI = 126,
+	MX8MN_IOMUXC_ECSPI1_MISO = 127,
+	MX8MN_IOMUXC_ECSPI1_SS0 = 128,
+	MX8MN_IOMUXC_ECSPI2_SCLK = 129,
+	MX8MN_IOMUXC_ECSPI2_MOSI = 130,
+	MX8MN_IOMUXC_ECSPI2_MISO = 131,
+	MX8MN_IOMUXC_ECSPI2_SS0 = 132,
+	MX8MN_IOMUXC_I2C1_SCL = 133,
+	MX8MN_IOMUXC_I2C1_SDA = 134,
+	MX8MN_IOMUXC_I2C2_SCL = 135,
+	MX8MN_IOMUXC_I2C2_SDA = 136,
+	MX8MN_IOMUXC_I2C3_SCL = 137,
+	MX8MN_IOMUXC_I2C3_SDA = 138,
+	MX8MN_IOMUXC_I2C4_SCL = 139,
+	MX8MN_IOMUXC_I2C4_SDA = 140,
+	MX8MN_IOMUXC_UART1_RXD = 141,
+	MX8MN_IOMUXC_UART1_TXD = 142,
+	MX8MN_IOMUXC_UART2_RXD = 143,
+	MX8MN_IOMUXC_UART2_TXD = 144,
+	MX8MN_IOMUXC_UART3_RXD = 145,
+	MX8MN_IOMUXC_UART3_TXD = 146,
+	MX8MN_IOMUXC_UART4_RXD = 147,
+	MX8MN_IOMUXC_UART4_TXD = 148,
+};
+
+struct meson_pmx_group {
+	const char *name;
+	const unsigned int *pins;
+	unsigned int num_pins;
+	const void *data;
+};
+
+struct meson_pmx_func {
+	const char *name;
+	const char * const *groups;
+	unsigned int num_groups;
+};
+
+struct meson_reg_desc {
+	unsigned int reg;
+	unsigned int bit;
+};
+
+enum meson_reg_type {
+	MESON_REG_PULLEN = 0,
+	MESON_REG_PULL = 1,
+	MESON_REG_DIR = 2,
+	MESON_REG_OUT = 3,
+	MESON_REG_IN = 4,
+	MESON_REG_DS = 5,
+	MESON_NUM_REG = 6,
+};
+
+struct meson_bank {
+	const char *name;
+	unsigned int first;
+	unsigned int last;
+	int irq_first;
+	int irq_last;
+	struct meson_reg_desc regs[6];
+};
+
+struct meson_pinctrl;
+
+struct meson_pinctrl_data {
+	const char *name;
+	const struct pinctrl_pin_desc *pins;
+	struct meson_pmx_group *groups;
+	struct meson_pmx_func *funcs;
+	unsigned int num_pins;
+	unsigned int num_groups;
+	unsigned int num_funcs;
+	struct meson_bank *banks;
+	unsigned int num_banks;
+	const struct pinmux_ops *pmx_ops;
+	void *pmx_data;
+	int (*parse_dt)(struct meson_pinctrl *);
+};
+
+struct meson_pinctrl {
+	struct device *dev;
+	struct pinctrl_dev *pcdev;
+	struct pinctrl_desc desc;
+	struct meson_pinctrl_data *data;
+	struct regmap *reg_mux;
+	struct regmap *reg_pullen;
+	struct regmap *reg_pull;
+	struct regmap *reg_gpio;
+	struct regmap *reg_ds;
+	struct gpio_chip chip;
+	struct device_node *of_node;
+};
+
+struct meson8_pmx_data {
+	bool is_gpio;
+	unsigned int reg;
+	unsigned int bit;
+};
+
+struct mvebu_mpp_ctrl_data {
+	union {
+		void *base;
+		struct {
+			struct regmap *map;
+			u32 offset;
+		} regmap;
+	};
+};
+
+struct mvebu_mpp_ctrl {
+	const char *name;
+	u8 pid;
+	u8 npins;
+	unsigned int *pins;
+	int (*mpp_get)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int *);
+	int (*mpp_set)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int);
+	int (*mpp_gpio_req)(struct mvebu_mpp_ctrl_data *, unsigned int);
+	int (*mpp_gpio_dir)(struct mvebu_mpp_ctrl_data *, unsigned int, bool);
+};
+
+struct mvebu_mpp_ctrl_setting {
+	u8 val;
+	const char *name;
+	const char *subname;
+	u8 variant;
+	u8 flags;
+};
+
+struct mvebu_mpp_mode {
+	u8 pid;
+	struct mvebu_mpp_ctrl_setting *settings;
+};
+
+struct mvebu_pinctrl_soc_info {
+	u8 variant;
+	const struct mvebu_mpp_ctrl *controls;
+	struct mvebu_mpp_ctrl_data *control_data;
+	int ncontrols;
+	struct mvebu_mpp_mode *modes;
+	int nmodes;
+	struct pinctrl_gpio_range *gpioranges;
+	int ngpioranges;
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
+	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
+	IRQ_DOMAIN_FLAG_NO_MAP = 128,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+struct msm_function {
+	const char *name;
+	const char * const *groups;
+	unsigned int ngroups;
+};
+
+struct msm_pingroup {
+	const char *name;
+	const unsigned int *pins;
+	unsigned int npins;
+	unsigned int *funcs;
+	unsigned int nfuncs;
+	u32 ctl_reg;
+	u32 io_reg;
+	u32 intr_cfg_reg;
+	u32 intr_status_reg;
+	u32 intr_target_reg;
+	unsigned int tile: 2;
+	unsigned int mux_bit: 5;
+	unsigned int pull_bit: 5;
+	unsigned int drv_bit: 5;
+	unsigned int od_bit: 5;
+	unsigned int egpio_enable: 5;
+	unsigned int egpio_present: 5;
+	unsigned int oe_bit: 5;
+	unsigned int in_bit: 5;
+	unsigned int out_bit: 5;
+	unsigned int intr_enable_bit: 5;
+	unsigned int intr_status_bit: 5;
+	unsigned int intr_ack_high: 1;
+	unsigned int intr_target_bit: 5;
+	char: 1;
+	unsigned int intr_target_kpss_val: 5;
+	unsigned int intr_raw_status_bit: 5;
+	unsigned int intr_polarity_bit: 5;
+	unsigned int intr_detection_bit: 5;
+	unsigned int intr_detection_width: 5;
+};
+
+struct msm_gpio_wakeirq_map {
+	unsigned int gpio;
+	unsigned int wakeirq;
+};
+
+struct msm_pinctrl_soc_data {
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	const struct msm_function *functions;
+	unsigned int nfunctions;
+	const struct msm_pingroup *groups;
+	unsigned int ngroups;
+	unsigned int ngpios;
+	bool pull_no_keeper;
+	const char * const *tiles;
+	unsigned int ntiles;
+	const int *reserved_gpios;
+	const struct msm_gpio_wakeirq_map *wakeirq_map;
+	unsigned int nwakeirq_map;
+	bool wakeirq_dual_edge_errata;
+	unsigned int gpio_func;
+	unsigned int egpio_func;
+};
+
+struct msm_pinctrl {
+	struct device *dev;
+	struct pinctrl_dev *pctrl;
+	struct gpio_chip chip;
+	struct pinctrl_desc desc;
+	struct notifier_block restart_nb;
+	int irq;
+	bool intr_target_use_scm;
+	raw_spinlock_t lock;
+	long unsigned int dual_edge_irqs[5];
+	long unsigned int enabled_irqs[5];
+	long unsigned int skip_wake_irqs[5];
+	long unsigned int disabled_for_mux[5];
+	long unsigned int ever_gpio[5];
+	const struct msm_pinctrl_soc_data *soc;
+	void *regs[4];
+	u32 phys_base[4];
+};
+
+enum sunxi_desc_bias_voltage {
+	BIAS_VOLTAGE_NONE = 0,
+	BIAS_VOLTAGE_GRP_CONFIG = 1,
+	BIAS_VOLTAGE_PIO_POW_MODE_SEL = 2,
+	BIAS_VOLTAGE_PIO_POW_MODE_CTL = 3,
+};
+
+struct sunxi_desc_function {
+	long unsigned int variant;
+	const char *name;
+	u8 muxval;
+	u8 irqbank;
+	u8 irqnum;
+};
+
+struct sunxi_desc_pin {
+	struct pinctrl_pin_desc pin;
+	long unsigned int variant;
+	struct sunxi_desc_function *functions;
+};
+
+struct sunxi_pinctrl_desc {
+	const struct sunxi_desc_pin *pins;
+	int npins;
+	unsigned int pin_base;
+	unsigned int irq_banks;
+	const unsigned int *irq_bank_map;
+	bool irq_read_needs_mux;
+	bool disable_strict_mode;
+	enum sunxi_desc_bias_voltage io_bias_cfg_variant;
+};
+
+struct gpio_device {
+	int id;
+	struct device dev;
+	struct cdev chrdev;
+	struct device *mockdev;
+	struct module *owner;
+	struct gpio_chip *chip;
+	struct gpio_desc *descs;
+	int base;
+	u16 ngpio;
+	const char *label;
+	void *data;
+	struct list_head list;
+	struct blocking_notifier_head notifier;
+	struct list_head pin_ranges;
+};
+
+struct gpio_array;
+
+struct gpio_descs {
+	struct gpio_array *info;
+	unsigned int ndescs;
+	struct gpio_desc *desc[0];
+};
+
+struct gpio_array {
+	struct gpio_desc **desc;
+	unsigned int size;
+	struct gpio_chip *chip;
+	long unsigned int *get_mask;
+	long unsigned int *set_mask;
+	long unsigned int invert_mask[0];
+};
+
+struct gpio_desc {
+	struct gpio_device *gdev;
+	long unsigned int flags;
+	const char *label;
+	const char *name;
+	struct device_node *hog;
+	unsigned int debounce_period_us;
+};
+
+enum gpiod_flags {
+	GPIOD_ASIS = 0,
+	GPIOD_IN = 1,
+	GPIOD_OUT_LOW = 3,
+	GPIOD_OUT_HIGH = 7,
+	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
+	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
+};
+
+struct devres;
+
+struct bgpio_pdata {
+	const char *label;
+	int base;
+	int ngpio;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry;
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+enum i2c_slave_event {
+	I2C_SLAVE_READ_REQUESTED = 0,
+	I2C_SLAVE_WRITE_REQUESTED = 1,
+	I2C_SLAVE_READ_PROCESSED = 2,
+	I2C_SLAVE_WRITE_RECEIVED = 3,
+	I2C_SLAVE_STOP = 4,
+};
+
+struct i2c_client;
+
+typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
+
+struct i2c_adapter;
+
+struct i2c_client {
+	short unsigned int flags;
+	short unsigned int addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	i2c_slave_cb_t slave_cb;
+	void *devres_group_id;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_board_info;
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
+	int (*remove)(struct i2c_client *);
+	int (*probe_new)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const short unsigned int *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_board_info {
+	char type[20];
+	short unsigned int flags;
+	short unsigned int addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	long unsigned int locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+	int (*reg_slave)(struct i2c_client *);
+	int (*unreg_slave)(struct i2c_client *);
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+struct pca953x_platform_data {
+	unsigned int gpio_base;
+	u32 invert;
+	int irq_base;
+	void *context;
+	int (*setup)(struct i2c_client *, unsigned int, unsigned int, void *);
+	int (*teardown)(struct i2c_client *, unsigned int, unsigned int, void *);
+	const char * const *names;
+};
+
+struct pca953x_reg_config {
+	int direction;
+	int output;
+	int input;
+	int invert;
+};
+
+struct pca953x_chip {
+	unsigned int gpio_start;
+	struct mutex i2c_lock;
+	struct regmap *regmap;
+	struct mutex irq_lock;
+	long unsigned int irq_mask[1];
+	long unsigned int irq_stat[1];
+	long unsigned int irq_trig_raise[1];
+	long unsigned int irq_trig_fall[1];
+	atomic_t wakeup_path;
+	struct i2c_client *client;
+	struct gpio_chip gpio_chip;
+	const char * const *names;
+	long unsigned int driver_data;
+	struct regulator *regulator;
+	const struct pca953x_reg_config *regs;
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+enum pwm_polarity {
+	PWM_POLARITY_NORMAL = 0,
+	PWM_POLARITY_INVERSED = 1,
+};
+
+struct pwm_args {
+	u64 period;
+	enum pwm_polarity polarity;
+};
+
+enum {
+	PWMF_REQUESTED = 1,
+	PWMF_EXPORTED = 2,
+};
+
+struct pwm_state {
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	bool usage_power;
+};
+
+struct pwm_chip;
+
+struct pwm_device {
+	const char *label;
+	long unsigned int flags;
+	unsigned int hwpwm;
+	unsigned int pwm;
+	struct pwm_chip *chip;
+	void *chip_data;
+	struct pwm_args args;
+	struct pwm_state state;
+	struct pwm_state last;
+};
+
+struct pwm_ops;
+
+struct pwm_chip {
+	struct device *dev;
+	const struct pwm_ops *ops;
+	int base;
+	unsigned int npwm;
+	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
+	unsigned int of_pwm_n_cells;
+	struct list_head list;
+	struct pwm_device *pwms;
+};
+
+struct pwm_capture {
+	unsigned int period;
+	unsigned int duty_cycle;
+};
+
+struct pwm_ops {
+	int (*request)(struct pwm_chip *, struct pwm_device *);
+	void (*free)(struct pwm_chip *, struct pwm_device *);
+	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
+	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
+	void (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
+	struct module *owner;
+};
+
+struct pwm_export {
+	struct device child;
+	struct pwm_device *pwm;
+	struct mutex lock;
+	struct pwm_state suspend;
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+struct pci_bus;
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+struct pci_dev;
+
+struct pci_ops;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	int domain_nr;
+	char name[48];
+	short unsigned int bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+};
+
+typedef int pci_power_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct pci_sriov {
+	int pos;
+	int nres;
+	u32 cap;
+	u16 ctrl;
+	u16 total_VFs;
+	u16 initial_VFs;
+	u16 num_VFs;
+	u16 offset;
+	u16 stride;
+	u16 vf_device;
+	u32 pgsz;
+	u8 link;
+	u8 max_VF_buses;
+	u16 driver_max_VFs;
+	struct pci_dev *dev;
+	struct pci_dev *self;
+	u32 class;
+	u8 hdr_type;
+	u16 subsystem_vendor;
+	u16 subsystem_device;
+	resource_size_t barsz[6];
+	bool drivers_autoprobe;
+};
+
+struct aer_stats;
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+struct pci_p2pdma;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int subsystem_vendor;
+	short unsigned int subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u16 aer_cap;
+	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	long unsigned int *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	unsigned int imm_ready: 1;
+	u8 pm_cap;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	struct pcie_link_state *link_state;
+	unsigned int ltr_path: 1;
+	u16 l1ss;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[17];
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	int rom_attr_enabled;
+	struct bin_attribute *res_attr[17];
+	struct bin_attribute *res_attr_wc[17];
+	unsigned int broken_cmd_compl: 1;
+	u16 ptm_cap;
+	unsigned int ptm_root: 1;
+	unsigned int ptm_enabled: 1;
+	u8 ptm_granularity;
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	u16 dpc_cap;
+	unsigned int dpc_rp_extensions: 1;
+	u8 dpc_rp_log_size;
+	union {
+		struct pci_sriov *sriov;
+		struct pci_dev *physfn;
+	};
+	u16 ats_cap;
+	u8 ats_stu;
+	u16 pri_cap;
+	u32 pri_reqs_alloc;
+	unsigned int pasid_required: 1;
+	u16 pasid_cap;
+	u16 pasid_features;
+	struct pci_p2pdma *p2pdma;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	long unsigned int priv_flags;
+	u8 reset_methods[7];
+};
+
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+};
+
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	long unsigned int flags;
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+enum enable_type {
+	undefined = 4294967295,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+enum {
+	CPER_SEV_RECOVERABLE = 0,
+	CPER_SEV_FATAL = 1,
+	CPER_SEV_CORRECTED = 2,
+	CPER_SEV_INFORMATIONAL = 3,
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+struct aer_stats {
+	u64 dev_cor_errs[16];
+	u64 dev_fatal_errs[27];
+	u64 dev_nonfatal_errs[27];
+	u64 dev_total_cor_errs;
+	u64 dev_total_fatal_errs;
+	u64 dev_total_nonfatal_errs;
+	u64 rootport_total_cor_errs;
+	u64 rootport_total_fatal_errs;
+	u64 rootport_total_nonfatal_errs;
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
+};
+
+struct aer_capability_regs {
+	u32 header;
+	u32 uncor_status;
+	u32 uncor_mask;
+	u32 uncor_severity;
+	u32 cor_status;
+	u32 cor_mask;
+	u32 cap_control;
+	struct aer_header_log_regs header_log;
+	u32 root_command;
+	u32 root_status;
+	u16 cor_err_source;
+	u16 uncor_err_source;
+};
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct aer_err_info {
+	struct pci_dev *dev[5];
+	int error_dev_num;
+	unsigned int id: 16;
+	unsigned int severity: 2;
+	unsigned int __pad1: 5;
+	unsigned int multi_error_valid: 1;
+	unsigned int first_error: 5;
+	unsigned int __pad2: 2;
+	unsigned int tlp_header_valid: 1;
+	unsigned int status;
+	unsigned int mask;
+	struct aer_header_log_regs tlp;
+};
+
+struct pcie_device {
+	int irq;
+	struct pci_dev *port;
+	u32 service;
+	void *priv_data;
+	struct device device;
+};
+
+struct pcie_port_service_driver {
+	const char *name;
+	int (*probe)(struct pcie_device *);
+	void (*remove)(struct pcie_device *);
+	int (*suspend)(struct pcie_device *);
+	int (*resume_noirq)(struct pcie_device *);
+	int (*resume)(struct pcie_device *);
+	int (*runtime_suspend)(struct pcie_device *);
+	int (*runtime_resume)(struct pcie_device *);
+	int (*slot_reset)(struct pcie_device *);
+	int port_type;
+	u32 service;
+	struct device_driver driver;
+};
+
+struct aer_err_source {
+	unsigned int status;
+	unsigned int id;
+};
+
+struct aer_rpc {
+	struct pci_dev *rpd;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct aer_err_source *type;
+			const struct aer_err_source *const_type;
+			char (*rectype)[0];
+			struct aer_err_source *ptr;
+			const struct aer_err_source *ptr_const;
+		};
+		struct aer_err_source buf[128];
+	} aer_fifo;
+};
+
+struct aer_recover_entry {
+	u8 bus;
+	u8 devfn;
+	u16 domain;
+	int severity;
+	struct aer_capability_regs *regs;
+};
+
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
+};
+
+struct hotplug_slot_ops {
+	int (*enable_slot)(struct hotplug_slot *);
+	int (*disable_slot)(struct hotplug_slot *);
+	int (*set_attention_status)(struct hotplug_slot *, u8);
+	int (*hardware_test)(struct hotplug_slot *, u32);
+	int (*get_power_status)(struct hotplug_slot *, u8 *);
+	int (*get_attention_status)(struct hotplug_slot *, u8 *);
+	int (*get_latch_status)(struct hotplug_slot *, u8 *);
+	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
+	int (*reset_slot)(struct hotplug_slot *, bool);
+};
+
+struct controller {
+	struct pcie_device *pcie;
+	u32 slot_cap;
+	unsigned int inband_presence_disabled: 1;
+	u16 slot_ctrl;
+	struct mutex ctrl_lock;
+	long unsigned int cmd_started;
+	unsigned int cmd_busy: 1;
+	wait_queue_head_t queue;
+	atomic_t pending_events;
+	unsigned int notification_enabled: 1;
+	unsigned int power_fault_detected;
+	struct task_struct *poll_thread;
+	u8 state;
+	struct mutex state_lock;
+	struct delayed_work button_work;
+	struct hotplug_slot hotplug_slot;
+	struct rw_semaphore reset_lock;
+	unsigned int depth;
+	unsigned int ist_running;
+	int request_result;
+	wait_queue_head_t requester;
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+struct gen_pool;
+
+struct pci_p2pdma {
+	struct gen_pool *pool;
+	bool p2pmem_published;
+	struct xarray map_types;
+};
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+struct pci_p2pdma_pagemap {
+	struct dev_pagemap pgmap;
+	struct pci_dev *provider;
+	u64 bus_offset;
+};
+
+struct pci_p2pdma_whitelist_entry {
+	short unsigned int vendor;
+	short unsigned int device;
+	enum {
+		REQ_SAME_HOST_BRIDGE = 1,
+	} flags;
+};
+
+enum pci_barno {
+	NO_BAR = 4294967295,
+	BAR_0 = 0,
+	BAR_1 = 1,
+	BAR_2 = 2,
+	BAR_3 = 3,
+	BAR_4 = 4,
+	BAR_5 = 5,
+};
+
+struct pci_epf_bar {
+	dma_addr_t phys_addr;
+	void *addr;
+	size_t size;
+	enum pci_barno barno;
+	int flags;
+};
+
+struct cdns_pcie;
+
+struct cdns_pcie_ops {
+	int (*start_link)(struct cdns_pcie *);
+	void (*stop_link)(struct cdns_pcie *);
+	bool (*link_up)(struct cdns_pcie *);
+	u64 (*cpu_addr_fixup)(struct cdns_pcie *, u64);
+};
+
+struct cdns_pcie {
+	void *reg_base;
+	struct resource *mem_res;
+	struct device *dev;
+	bool is_rc;
+	int phy_count;
+	struct phy **phy;
+	struct device_link **link;
+	const struct cdns_pcie_ops *ops;
+};
+
+struct cdns_pcie_rc {
+	struct cdns_pcie pcie;
+	struct resource *cfg_res;
+	void *cfg_base;
+	u32 vendor_id;
+	u32 device_id;
+	bool avail_ib_bar[3];
+	unsigned int quirk_retrain_flag: 1;
+	unsigned int quirk_detect_quiet_flag: 1;
+};
+
+struct cdns_pcie_epf {
+	struct cdns_pcie_epf *epf;
+	struct pci_epf_bar *epf_bar[6];
+};
+
+struct cdns_pcie_ep {
+	struct cdns_pcie pcie;
+	u32 max_regions;
+	long unsigned int ob_region_map;
+	phys_addr_t *ob_addr;
+	phys_addr_t irq_phys_addr;
+	void *irq_cpu_addr;
+	u64 irq_pci_addr;
+	u8 irq_pci_fn;
+	u8 irq_pending;
+	spinlock_t lock;
+	struct cdns_pcie_epf *epf;
+	unsigned int quirk_detect_quiet_flag: 1;
+	unsigned int quirk_disable_flr: 1;
+};
+
+enum link_status {
+	NO_RECEIVERS_DETECTED = 0,
+	LINK_TRAINING_IN_PROGRESS = 1,
+	LINK_UP_DL_IN_PROGRESS = 2,
+	LINK_UP_DL_COMPLETED = 3,
+};
+
+struct j721e_pcie {
+	struct cdns_pcie *cdns_pcie;
+	struct clk *refclk;
+	u32 mode;
+	u32 num_lanes;
+	void *user_cfg_base;
+	void *intd_cfg_base;
+	u32 linkdown_irq_regfield;
+};
+
+enum j721e_pcie_mode {
+	PCI_MODE_RC = 0,
+	PCI_MODE_EP = 1,
+};
+
+struct j721e_pcie_data {
+	enum j721e_pcie_mode mode;
+	unsigned int quirk_retrain_flag: 1;
+	unsigned int quirk_detect_quiet_flag: 1;
+	unsigned int quirk_disable_flr: 1;
+	u32 linkdown_irq_regfield;
+	unsigned int byte_access_allowed: 1;
+};
+
+enum pci_interrupt_pin {
+	PCI_INTERRUPT_UNKNOWN = 0,
+	PCI_INTERRUPT_INTA = 1,
+	PCI_INTERRUPT_INTB = 2,
+	PCI_INTERRUPT_INTC = 3,
+	PCI_INTERRUPT_INTD = 4,
+};
+
+struct xilinx_pcie {
+	struct device *dev;
+	void *reg_base;
+	long unsigned int msi_map[2];
+	struct mutex map_lock;
+	struct irq_domain *msi_domain;
+	struct irq_domain *leg_domain;
+	struct list_head resources;
+};
+
+struct pci_config_window;
+
+struct pci_ecam_ops {
+	unsigned int bus_shift;
+	struct pci_ops pci_ops;
+	int (*init)(struct pci_config_window *);
+};
+
+struct pci_config_window {
+	struct resource res;
+	struct resource busr;
+	unsigned int bus_shift;
+	void *priv;
+	const struct pci_ecam_ops *ops;
+	union {
+		void *win;
+		void **winp;
+	};
+	struct device *parent;
+};
+
+struct event_map {
+	u32 reg_mask;
+	u32 event_bit;
+};
+
+struct mc_msi {
+	struct mutex lock;
+	struct irq_domain *msi_domain;
+	struct irq_domain *dev_domain;
+	u32 num_vectors;
+	u64 vector_phy;
+	long unsigned int used[1];
+};
+
+struct mc_pcie {
+	void *axi_base_addr;
+	struct device *dev;
+	struct irq_domain *intx_domain;
+	struct irq_domain *event_domain;
+	raw_spinlock_t lock;
+	struct mc_msi msi;
+};
+
+struct cause {
+	const char *sym;
+	const char *str;
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block *head;
+};
+
+struct pci_epf_header {
+	u16 vendorid;
+	u16 deviceid;
+	u8 revid;
+	u8 progif_code;
+	u8 subclass_code;
+	u8 baseclass_code;
+	u8 cache_line_size;
+	u16 subsys_vendor_id;
+	u16 subsys_id;
+	enum pci_interrupt_pin interrupt_pin;
+};
+
+struct pci_epc_ops;
+
+struct pci_epc_mem;
+
+struct pci_epc {
+	struct device dev;
+	struct list_head pci_epf;
+	const struct pci_epc_ops *ops;
+	struct pci_epc_mem **windows;
+	struct pci_epc_mem *mem;
+	unsigned int num_windows;
+	u8 max_functions;
+	u8 *max_vfs;
+	struct config_group *group;
+	struct mutex lock;
+	long unsigned int function_num_map;
+	struct atomic_notifier_head notifier;
+};
+
+enum pci_epc_irq_type {
+	PCI_EPC_IRQ_UNKNOWN = 0,
+	PCI_EPC_IRQ_LEGACY = 1,
+	PCI_EPC_IRQ_MSI = 2,
+	PCI_EPC_IRQ_MSIX = 3,
+};
+
+struct pci_epc_features;
+
+struct pci_epc_ops {
+	int (*write_header)(struct pci_epc *, u8, u8, struct pci_epf_header *);
+	int (*set_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	void (*clear_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	int (*map_addr)(struct pci_epc *, u8, u8, phys_addr_t, u64, size_t);
+	void (*unmap_addr)(struct pci_epc *, u8, u8, phys_addr_t);
+	int (*set_msi)(struct pci_epc *, u8, u8, u8);
+	int (*get_msi)(struct pci_epc *, u8, u8);
+	int (*set_msix)(struct pci_epc *, u8, u8, u16, enum pci_barno, u32);
+	int (*get_msix)(struct pci_epc *, u8, u8);
+	int (*raise_irq)(struct pci_epc *, u8, u8, enum pci_epc_irq_type, u16);
+	int (*map_msi_irq)(struct pci_epc *, u8, u8, phys_addr_t, u8, u32, u32 *, u32 *);
+	int (*start)(struct pci_epc *);
+	void (*stop)(struct pci_epc *);
+	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8, u8);
+	struct module *owner;
+};
+
+struct pci_epc_features {
+	unsigned int linkup_notifier: 1;
+	unsigned int core_init_notifier: 1;
+	unsigned int msi_capable: 1;
+	unsigned int msix_capable: 1;
+	u8 reserved_bar;
+	u8 bar_fixed_64bit;
+	u64 bar_fixed_size[6];
+	size_t align;
+};
+
+struct pci_epc_mem_window {
+	phys_addr_t phys_base;
+	size_t size;
+	size_t page_size;
+};
+
+struct pci_epc_mem {
+	struct pci_epc_mem_window window;
+	long unsigned int *bitmap;
+	int pages;
+	struct mutex lock;
+};
+
+enum dw_pcie_device_mode {
+	DW_PCIE_UNKNOWN_TYPE = 0,
+	DW_PCIE_EP_TYPE = 1,
+	DW_PCIE_LEG_EP_TYPE = 2,
+	DW_PCIE_RC_TYPE = 3,
+};
+
+struct dw_pcie_rp;
+
+struct dw_pcie_host_ops {
+	int (*host_init)(struct dw_pcie_rp *);
+	void (*host_deinit)(struct dw_pcie_rp *);
+	int (*msi_host_init)(struct dw_pcie_rp *);
+};
+
+struct dw_pcie_rp {
+	bool has_msi_ctrl: 1;
+	bool cfg0_io_shared: 1;
+	u64 cfg0_base;
+	void *va_cfg0_base;
+	u32 cfg0_size;
+	resource_size_t io_base;
+	phys_addr_t io_bus_addr;
+	u32 io_size;
+	int irq;
+	const struct dw_pcie_host_ops *ops;
+	int msi_irq[8];
+	struct irq_domain *irq_domain;
+	struct irq_domain *msi_domain;
+	dma_addr_t msi_data;
+	struct page *msi_page;
+	struct irq_chip *msi_irq_chip;
+	u32 num_vectors;
+	u32 irq_mask[8];
+	struct pci_host_bridge *bridge;
+	raw_spinlock_t lock;
+	long unsigned int msi_irq_in_use[4];
+};
+
+struct dw_pcie_ep;
+
+struct dw_pcie_ep_ops {
+	void (*ep_init)(struct dw_pcie_ep *);
+	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
+	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
+	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
+};
+
+struct dw_pcie_ep {
+	struct pci_epc *epc;
+	struct list_head func_list;
+	const struct dw_pcie_ep_ops *ops;
+	phys_addr_t phys_base;
+	size_t addr_size;
+	size_t page_size;
+	u8 bar_to_atu[6];
+	phys_addr_t *outbound_addr;
+	long unsigned int *ib_window_map;
+	long unsigned int *ob_window_map;
+	void *msi_mem;
+	phys_addr_t msi_mem_phys;
+	struct pci_epf_bar *epf_bar[6];
+};
+
+struct dw_pcie;
+
+struct dw_pcie_ops {
+	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
+	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
+	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
+	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
+	int (*link_up)(struct dw_pcie *);
+	int (*start_link)(struct dw_pcie *);
+	void (*stop_link)(struct dw_pcie *);
+};
+
+struct dw_pcie {
+	struct device *dev;
+	void *dbi_base;
+	void *dbi_base2;
+	void *atu_base;
+	size_t atu_size;
+	u32 num_ib_windows;
+	u32 num_ob_windows;
+	u32 region_align;
+	u64 region_limit;
+	struct dw_pcie_rp pp;
+	struct dw_pcie_ep ep;
+	const struct dw_pcie_ops *ops;
+	u32 version;
+	u32 type;
+	int num_lanes;
+	int link_gen;
+	u8 n_fts[2];
+	bool iatu_unroll_enabled: 1;
+};
+
+struct ks_pcie_of_data {
+	enum dw_pcie_device_mode mode;
+	const struct dw_pcie_host_ops *host_ops;
+	const struct dw_pcie_ep_ops *ep_ops;
+	u32 version;
+};
+
+struct keystone_pcie {
+	struct dw_pcie *pci;
+	u32 device_id;
+	int legacy_host_irqs[4];
+	struct device_node *legacy_intc_np;
+	int msi_host_irq;
+	int num_lanes;
+	u32 num_viewport;
+	struct phy **phy;
+	struct device_link **link;
+	struct device_node *msi_intc_np;
+	struct irq_domain *legacy_irq_domain;
+	struct device_node *np;
+	void *va_app_base;
+	struct resource app;
+	bool is_am6;
+};
+
+enum pcie_data_rate {
+	PCIE_GEN1 = 0,
+	PCIE_GEN2 = 1,
+	PCIE_GEN3 = 2,
+	PCIE_GEN4 = 3,
+};
+
+struct meson_pcie_clk_res {
+	struct clk *clk;
+	struct clk *port_clk;
+	struct clk *general_clk;
+};
+
+struct meson_pcie_rc_reset {
+	struct reset_control *port;
+	struct reset_control *apb;
+};
+
+struct meson_pcie {
+	struct dw_pcie pci;
+	void *cfg_base;
+	struct meson_pcie_clk_res clk_res;
+	struct meson_pcie_rc_reset mrst;
+	struct gpio_desc *reset_gpio;
+	struct phy *phy;
+};
+
+struct mobiveil_msi {
+	struct mutex lock;
+	struct irq_domain *msi_domain;
+	struct irq_domain *dev_domain;
+	phys_addr_t msi_pages_phys;
+	int num_of_vectors;
+	long unsigned int msi_irq_in_use[1];
+};
+
+struct mobiveil_pcie;
+
+struct mobiveil_rp_ops {
+	int (*interrupt_init)(struct mobiveil_pcie *);
+};
+
+struct mobiveil_root_port {
+	void *config_axi_slave_base;
+	struct resource *ob_io_res;
+	struct mobiveil_rp_ops *ops;
+	int irq;
+	raw_spinlock_t intx_mask_lock;
+	struct irq_domain *intx_domain;
+	struct mobiveil_msi msi;
+	struct pci_host_bridge *bridge;
+};
+
+struct mobiveil_pab_ops;
+
+struct mobiveil_pcie {
+	struct platform_device *pdev;
+	void *csr_axi_slave_base;
+	void *apb_csr_base;
+	phys_addr_t pcie_reg_base;
+	int apio_wins;
+	int ppio_wins;
+	int ob_wins_configured;
+	int ib_wins_configured;
+	const struct mobiveil_pab_ops *ops;
+	struct mobiveil_root_port rp;
+};
+
+struct mobiveil_pab_ops {
+	int (*link_up)(struct mobiveil_pcie *);
+};
+
+typedef u32 compat_caddr_t;
+
+struct linux_logo {
+	int type;
+	unsigned int width;
+	unsigned int height;
+	unsigned int clutsize;
+	const unsigned char *clut;
+	const unsigned char *data;
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	long unsigned int smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	long unsigned int mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+struct backlight_device;
+
+struct fb_info;
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_deferred_io_pageref;
+
+struct fb_deferred_io;
+
+struct fb_ops;
+
+struct fb_tile_ops;
+
+struct apertures_struct;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	struct backlight_device *bl_dev;
+	struct mutex bl_curve_mutex;
+	u8 bl_curve[128];
+	struct delayed_work deferred_work;
+	long unsigned int npagerefs;
+	struct fb_deferred_io_pageref *pagerefs;
+	struct fb_deferred_io *fbdefio;
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	struct fb_tile_ops *tileops;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	long unsigned int screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	struct apertures_struct *apertures;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_cmap_user {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_event {
+	struct fb_info *info;
+	void *data;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+struct fb_deferred_io_pageref {
+	struct page *page;
+	long unsigned int offset;
+	struct list_head list;
+};
+
+struct fb_deferred_io {
+	long unsigned int delay;
+	bool sort_pagereflist;
+	struct mutex lock;
+	struct list_head pagereflist;
+	void (*first_io)(struct fb_info *);
+	void (*deferred_io)(struct fb_info *, struct list_head *);
+};
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct fb_tilemap {
+	__u32 width;
+	__u32 height;
+	__u32 depth;
+	__u32 length;
+	const __u8 *data;
+};
+
+struct fb_tilerect {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 index;
+	__u32 fg;
+	__u32 bg;
+	__u32 rop;
+};
+
+struct fb_tilearea {
+	__u32 sx;
+	__u32 sy;
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+};
+
+struct fb_tileblit {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 fg;
+	__u32 bg;
+	__u32 length;
+	__u32 *indices;
+};
+
+struct fb_tilecursor {
+	__u32 sx;
+	__u32 sy;
+	__u32 mode;
+	__u32 shape;
+	__u32 fg;
+	__u32 bg;
+};
+
+struct fb_tile_ops {
+	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
+	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
+	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
+	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
+	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
+	int (*fb_get_tilemax)(struct fb_info *);
+};
+
+struct aperture {
+	resource_size_t base;
+	resource_size_t size;
+};
+
+struct apertures_struct {
+	unsigned int count;
+	struct aperture ranges[0];
+};
+
+struct fb_modelist {
+	struct list_head list;
+	struct fb_videomode mode;
+};
+
+struct logo_data {
+	int depth;
+	int needs_directpalette;
+	int needs_truepalette;
+	int needs_cmapreset;
+	const struct linux_logo *logo;
+};
+
+struct fb_fix_screeninfo32 {
+	char id[16];
+	compat_caddr_t smem_start;
+	u32 smem_len;
+	u32 type;
+	u32 type_aux;
+	u32 visual;
+	u16 xpanstep;
+	u16 ypanstep;
+	u16 ywrapstep;
+	u32 line_length;
+	compat_caddr_t mmio_start;
+	u32 mmio_len;
+	u32 accel;
+	u16 reserved[3];
+};
+
+struct fb_cmap32 {
+	u32 start;
+	u32 len;
+	compat_caddr_t red;
+	compat_caddr_t green;
+	compat_caddr_t blue;
+	compat_caddr_t transp;
+};
+
+typedef unsigned char u_char;
+
+typedef short unsigned int u_short;
+
+struct vt_mode {
+	char mode;
+	char waitv;
+	short int relsig;
+	short int acqsig;
+	short int frsig;
+};
+
+struct console_font {
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+enum vc_intensity {
+	VCI_HALF_BRIGHT = 0,
+	VCI_NORMAL = 1,
+	VCI_BOLD = 2,
+	VCI_MASK = 3,
+};
+
+struct vc_state {
+	unsigned int x;
+	unsigned int y;
+	unsigned char color;
+	unsigned char Gx_charset[2];
+	unsigned int charset: 1;
+	enum vc_intensity intensity;
+	bool italic;
+	bool underline;
+	bool blink;
+	bool reverse;
+};
+
+struct consw;
+
+struct uni_pagedict;
+
+struct uni_screen;
+
+struct vc_data {
+	struct tty_port port;
+	struct vc_state state;
+	struct vc_state saved_state;
+	short unsigned int vc_num;
+	unsigned int vc_cols;
+	unsigned int vc_rows;
+	unsigned int vc_size_row;
+	unsigned int vc_scan_lines;
+	unsigned int vc_cell_height;
+	long unsigned int vc_origin;
+	long unsigned int vc_scr_end;
+	long unsigned int vc_visible_origin;
+	unsigned int vc_top;
+	unsigned int vc_bottom;
+	const struct consw *vc_sw;
+	short unsigned int *vc_screenbuf;
+	unsigned int vc_screenbuf_size;
+	unsigned char vc_mode;
+	unsigned char vc_attr;
+	unsigned char vc_def_color;
+	unsigned char vc_ulcolor;
+	unsigned char vc_itcolor;
+	unsigned char vc_halfcolor;
+	unsigned int vc_cursor_type;
+	short unsigned int vc_complement_mask;
+	short unsigned int vc_s_complement_mask;
+	long unsigned int vc_pos;
+	short unsigned int vc_hi_font_mask;
+	struct console_font vc_font;
+	short unsigned int vc_video_erase_char;
+	unsigned int vc_state;
+	unsigned int vc_npar;
+	unsigned int vc_par[16];
+	struct vt_mode vt_mode;
+	struct pid *vt_pid;
+	int vt_newvt;
+	wait_queue_head_t paste_wait;
+	unsigned int vc_disp_ctrl: 1;
+	unsigned int vc_toggle_meta: 1;
+	unsigned int vc_decscnm: 1;
+	unsigned int vc_decom: 1;
+	unsigned int vc_decawm: 1;
+	unsigned int vc_deccm: 1;
+	unsigned int vc_decim: 1;
+	unsigned int vc_priv: 3;
+	unsigned int vc_need_wrap: 1;
+	unsigned int vc_can_do_color: 1;
+	unsigned int vc_report_mouse: 2;
+	unsigned char vc_utf: 1;
+	unsigned char vc_utf_count;
+	int vc_utf_char;
+	long unsigned int vc_tab_stop[4];
+	unsigned char vc_palette[48];
+	short unsigned int *vc_translate;
+	unsigned int vc_resize_user;
+	unsigned int vc_bell_pitch;
+	unsigned int vc_bell_duration;
+	short unsigned int vc_cur_blink_ms;
+	struct vc_data **vc_display_fg;
+	struct uni_pagedict *uni_pagedict;
+	struct uni_pagedict **uni_pagedict_loc;
+	struct uni_screen *vc_uni_screen;
+};
+
+enum con_scroll {
+	SM_UP = 0,
+	SM_DOWN = 1,
+};
+
+struct consw {
+	struct module *owner;
+	const char * (*con_startup)();
+	void (*con_init)(struct vc_data *, int);
+	void (*con_deinit)(struct vc_data *);
+	void (*con_clear)(struct vc_data *, int, int, int, int);
+	void (*con_putc)(struct vc_data *, int, int, int);
+	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
+	void (*con_cursor)(struct vc_data *, int);
+	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+	int (*con_switch)(struct vc_data *);
+	int (*con_blank)(struct vc_data *, int, int);
+	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
+	int (*con_font_get)(struct vc_data *, struct console_font *);
+	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
+	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+	void (*con_set_palette)(struct vc_data *, const unsigned char *);
+	void (*con_scrolldelta)(struct vc_data *, int);
+	int (*con_set_origin)(struct vc_data *);
+	void (*con_save_screen)(struct vc_data *);
+	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+	void (*con_invert_region)(struct vc_data *, u16 *, int);
+	u16 * (*con_screen_pos)(const struct vc_data *, int);
+	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
+	void (*con_flush_scrollback)(struct vc_data *);
+	int (*con_debug_enter)(struct vc_data *);
+	int (*con_debug_leave)(struct vc_data *);
+};
+
+struct fbcon_display {
+	const u_char *fontdata;
+	int userfont;
+	u_short inverse;
+	short int yscroll;
+	int vrows;
+	int cursor_shape;
+	int con_rotate;
+	u32 xres_virtual;
+	u32 yres_virtual;
+	u32 height;
+	u32 width;
+	u32 bits_per_pixel;
+	u32 grayscale;
+	u32 nonstd;
+	u32 accel_flags;
+	u32 rotate;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	const struct fb_videomode *mode;
+};
+
+struct fbcon_ops {
+	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
+	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
+	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
+	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
+	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
+	int (*update_start)(struct fb_info *);
+	int (*rotate_font)(struct fb_info *, struct vc_data *);
+	struct fb_var_screeninfo var;
+	struct delayed_work cursor_work;
+	struct fb_cursor cursor_state;
+	struct fbcon_display *p;
+	struct fb_info *info;
+	int currcon;
+	int cur_blink_jiffies;
+	int cursor_flash;
+	int cursor_reset;
+	int blank_state;
+	int graphics;
+	int save_graphics;
+	bool initialized;
+	int rotate;
+	int cur_rotate;
+	char *cursor_data;
+	u8 *fontbuffer;
+	u8 *fontdata;
+	u8 *cursor_src;
+	u32 cursor_size;
+	u32 fd_size;
+};
+
+enum display_flags {
+	DISPLAY_FLAGS_HSYNC_LOW = 1,
+	DISPLAY_FLAGS_HSYNC_HIGH = 2,
+	DISPLAY_FLAGS_VSYNC_LOW = 4,
+	DISPLAY_FLAGS_VSYNC_HIGH = 8,
+	DISPLAY_FLAGS_DE_LOW = 16,
+	DISPLAY_FLAGS_DE_HIGH = 32,
+	DISPLAY_FLAGS_PIXDATA_POSEDGE = 64,
+	DISPLAY_FLAGS_PIXDATA_NEGEDGE = 128,
+	DISPLAY_FLAGS_INTERLACED = 256,
+	DISPLAY_FLAGS_DOUBLESCAN = 512,
+	DISPLAY_FLAGS_DOUBLECLK = 1024,
+	DISPLAY_FLAGS_SYNC_POSEDGE = 2048,
+	DISPLAY_FLAGS_SYNC_NEGEDGE = 4096,
+};
+
+struct timing_entry {
+	u32 min;
+	u32 typ;
+	u32 max;
+};
+
+struct display_timing {
+	struct timing_entry pixelclock;
+	struct timing_entry hactive;
+	struct timing_entry hfront_porch;
+	struct timing_entry hback_porch;
+	struct timing_entry hsync_len;
+	struct timing_entry vactive;
+	struct timing_entry vfront_porch;
+	struct timing_entry vback_porch;
+	struct timing_entry vsync_len;
+	enum display_flags flags;
+};
+
+struct display_timings {
+	unsigned int num_timings;
+	unsigned int native_mode;
+	struct display_timing **timings;
+};
+
+struct videomode {
+	long unsigned int pixelclock;
+	u32 hactive;
+	u32 hfront_porch;
+	u32 hback_porch;
+	u32 hsync_len;
+	u32 vactive;
+	u32 vfront_porch;
+	u32 vback_porch;
+	u32 vsync_len;
+	enum display_flags flags;
+};
+
+enum ipmi_addr_src {
+	SI_INVALID = 0,
+	SI_HOTMOD = 1,
+	SI_HARDCODED = 2,
+	SI_SPMI = 3,
+	SI_ACPI = 4,
+	SI_SMBIOS = 5,
+	SI_PCI = 6,
+	SI_DEVICETREE = 7,
+	SI_PLATFORM = 8,
+	SI_LAST = 9,
+};
+
+enum dmi_device_type {
+	DMI_DEV_TYPE_ANY = 0,
+	DMI_DEV_TYPE_OTHER = 1,
+	DMI_DEV_TYPE_UNKNOWN = 2,
+	DMI_DEV_TYPE_VIDEO = 3,
+	DMI_DEV_TYPE_SCSI = 4,
+	DMI_DEV_TYPE_ETHERNET = 5,
+	DMI_DEV_TYPE_TOKENRING = 6,
+	DMI_DEV_TYPE_SOUND = 7,
+	DMI_DEV_TYPE_PATA = 8,
+	DMI_DEV_TYPE_SATA = 9,
+	DMI_DEV_TYPE_SAS = 10,
+	DMI_DEV_TYPE_IPMI = 4294967295,
+	DMI_DEV_TYPE_OEM_STRING = 4294967294,
+	DMI_DEV_TYPE_DEV_ONBOARD = 4294967293,
+	DMI_DEV_TYPE_DEV_SLOT = 4294967292,
+};
+
+struct dmi_header {
+	u8 type;
+	u8 length;
+	u16 handle;
+};
+
+struct dmi_device {
+	struct list_head list;
+	int type;
+	const char *name;
+	void *device_data;
+};
+
+enum si_type {
+	SI_TYPE_INVALID = 0,
+	SI_KCS = 1,
+	SI_SMIC = 2,
+	SI_BT = 3,
+	SI_TYPE_MAX = 4,
+};
+
+enum ipmi_addr_space {
+	IPMI_IO_ADDR_SPACE = 0,
+	IPMI_MEM_ADDR_SPACE = 1,
+};
+
+enum ipmi_plat_interface_type {
+	IPMI_PLAT_IF_SI = 0,
+	IPMI_PLAT_IF_SSIF = 1,
+};
+
+struct ipmi_plat_data {
+	enum ipmi_plat_interface_type iftype;
+	unsigned int type;
+	unsigned int space;
+	long unsigned int addr;
+	unsigned int regspacing;
+	unsigned int regsize;
+	unsigned int regshift;
+	unsigned int irq;
+	unsigned int slave_addr;
+	enum ipmi_addr_src addr_source;
+};
+
+struct ipmi_dmi_info {
+	enum si_type si_type;
+	unsigned int space;
+	long unsigned int addr;
+	u8 slave_addr;
+	struct ipmi_dmi_info *next;
+};
+
+typedef u64 acpi_size;
+
+typedef u32 acpi_status;
+
+typedef char *acpi_string;
+
+struct acpi_object_list {
+	u32 count;
+	union acpi_object *pointer;
+};
+
+struct acpi_buffer {
+	acpi_size length;
+	void *pointer;
+};
+
+typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
+
+enum pm_qos_flags_status {
+	PM_QOS_FLAGS_UNDEFINED = 4294967295,
+	PM_QOS_FLAGS_NONE = 0,
+	PM_QOS_FLAGS_SOME = 1,
+	PM_QOS_FLAGS_ALL = 2,
+};
+
+struct acpi_table_header {
+	char signature[4];
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	char oem_id[6];
+	char oem_table_id[8];
+	u32 oem_revision;
+	char asl_compiler_id[4];
+	u32 asl_compiler_revision;
+};
+
+struct acpi_generic_address {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_table_fadt {
+	struct acpi_table_header header;
+	u32 facs;
+	u32 dsdt;
+	u8 model;
+	u8 preferred_profile;
+	u16 sci_interrupt;
+	u32 smi_command;
+	u8 acpi_enable;
+	u8 acpi_disable;
+	u8 s4_bios_request;
+	u8 pstate_control;
+	u32 pm1a_event_block;
+	u32 pm1b_event_block;
+	u32 pm1a_control_block;
+	u32 pm1b_control_block;
+	u32 pm2_control_block;
+	u32 pm_timer_block;
+	u32 gpe0_block;
+	u32 gpe1_block;
+	u8 pm1_event_length;
+	u8 pm1_control_length;
+	u8 pm2_control_length;
+	u8 pm_timer_length;
+	u8 gpe0_block_length;
+	u8 gpe1_block_length;
+	u8 gpe1_base;
+	u8 cst_control;
+	u16 c2_latency;
+	u16 c3_latency;
+	u16 flush_size;
+	u16 flush_stride;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 day_alarm;
+	u8 month_alarm;
+	u8 century;
+	u16 boot_flags;
+	u8 reserved;
+	u32 flags;
+	struct acpi_generic_address reset_register;
+	u8 reset_value;
+	u16 arm_boot_flags;
+	u8 minor_revision;
+	u64 Xfacs;
+	u64 Xdsdt;
+	struct acpi_generic_address xpm1a_event_block;
+	struct acpi_generic_address xpm1b_event_block;
+	struct acpi_generic_address xpm1a_control_block;
+	struct acpi_generic_address xpm1b_control_block;
+	struct acpi_generic_address xpm2_control_block;
+	struct acpi_generic_address xpm_timer_block;
+	struct acpi_generic_address xgpe0_block;
+	struct acpi_generic_address xgpe1_block;
+	struct acpi_generic_address sleep_control;
+	struct acpi_generic_address sleep_status;
+	u64 hypervisor_id;
+} __attribute__((packed));
+
+typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
+
+enum acpi_bridge_type {
+	ACPI_BRIDGE_TYPE_PCIE = 1,
+	ACPI_BRIDGE_TYPE_CXL = 2,
+};
+
+struct acpi_pci_root {
+	struct acpi_device *device;
+	struct pci_bus *bus;
+	u16 segment;
+	int bridge_type;
+	struct resource secondary;
+	u32 osc_support_set;
+	u32 osc_control_set;
+	u32 osc_ext_support_set;
+	u32 osc_ext_control_set;
+	phys_addr_t mcfg_addr;
+};
+
+struct acpi_osc_context {
+	char *uuid_str;
+	int rev;
+	struct acpi_buffer cap;
+	struct acpi_buffer ret;
+};
+
+struct acpi_pci_root_ops;
+
+struct acpi_pci_root_info {
+	struct acpi_pci_root *root;
+	struct acpi_device *bridge;
+	struct acpi_pci_root_ops *ops;
+	struct list_head resources;
+	char name[16];
+};
+
+struct acpi_pci_root_ops {
+	struct pci_ops *pci_ops;
+	int (*init_info)(struct acpi_pci_root_info *);
+	void (*release_info)(struct acpi_pci_root_info *);
+	int (*prepare_resources)(struct acpi_pci_root_info *);
+};
+
+struct pci_osc_bit_struct {
+	u32 bit;
+	char *desc;
+};
+
+struct acpi_handle_node {
+	struct list_head node;
+	acpi_handle handle;
+};
+
+struct amba_cs_uci_id {
+	unsigned int devarch;
+	unsigned int devarch_mask;
+	unsigned int devtype;
+	void *data;
+};
+
+struct amba_device {
+	struct device dev;
+	struct resource res;
+	struct clk *pclk;
+	struct device_dma_parameters dma_parms;
+	unsigned int periphid;
+	struct mutex periphid_lock;
+	unsigned int cid;
+	struct amba_cs_uci_id uci;
+	unsigned int irq[9];
+	const char *driver_override;
+};
+
+typedef u64 acpi_physical_address;
+
+typedef u64 acpi_integer;
+
+typedef u8 acpi_adr_space_type;
+
+typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
+
+typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
+
+struct acpi_subtable_header {
+	u8 type;
+	u8 length;
+};
+
+struct acpi_cedt_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+struct acpi_hmat_structure {
+	u16 type;
+	u16 reserved;
+	u32 length;
+};
+
+struct acpi_prmt_module_header {
+	u16 revision;
+	u16 length;
+};
+
+struct acpi_prmt_module_info {
+	u16 revision;
+	u16 length;
+	u8 module_guid[16];
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_info_count;
+	u32 handler_info_offset;
+	u64 mmio_list_pointer;
+} __attribute__((packed));
+
+struct acpi_prmt_handler_info {
+	u16 revision;
+	u16 length;
+	u8 handler_guid[16];
+	u64 handler_address;
+	u64 static_data_buffer_address;
+	u64 acpi_param_buffer_address;
+} __attribute__((packed));
+
+union acpi_subtable_headers {
+	struct acpi_subtable_header common;
+	struct acpi_hmat_structure hmat;
+	struct acpi_prmt_module_header prmt;
+	struct acpi_cedt_header cedt;
+};
+
+typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
+
+struct prm_mmio_addr_range {
+	u64 phys_addr;
+	u64 virt_addr;
+	u32 length;
+} __attribute__((packed));
+
+struct prm_mmio_info {
+	u64 mmio_count;
+	struct prm_mmio_addr_range addr_ranges[0];
+};
+
+struct prm_buffer {
+	u8 prm_status;
+	u64 efi_status;
+	u8 prm_cmd;
+	guid_t handler_guid;
+} __attribute__((packed));
+
+struct prm_context_buffer {
+	char signature[4];
+	u16 revision;
+	u16 reserved;
+	guid_t identifier;
+	u64 static_data_buffer;
+	struct prm_mmio_info *mmio_ranges;
+};
+
+struct prm_handler_info {
+	guid_t guid;
+	void *handler_addr;
+	u64 static_data_buffer_addr;
+	u64 acpi_param_buffer_addr;
+	struct list_head handler_list;
+};
+
+struct prm_module_info {
+	guid_t guid;
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_count;
+	struct prm_mmio_info *mmio_info;
+	bool updatable;
+	struct list_head module_list;
+	struct prm_handler_info handlers[0];
+};
+
+typedef u16 acpi_owner_id;
+
+typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
+
+typedef void (*acpi_object_handler)(acpi_handle, void *);
+
+union acpi_name_union {
+	u32 integer;
+	char ascii[4];
+};
+
+union acpi_operand_object;
+
+struct acpi_namespace_node {
+	union acpi_operand_object *object;
+	u8 descriptor_type;
+	u8 type;
+	u16 flags;
+	union acpi_name_union name;
+	struct acpi_namespace_node *parent;
+	struct acpi_namespace_node *child;
+	struct acpi_namespace_node *peer;
+	acpi_owner_id owner_id;
+};
+
+struct acpi_object_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+};
+
+struct acpi_object_integer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 fill[3];
+	u64 value;
+};
+
+struct acpi_object_string {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	char *pointer;
+	u32 length;
+};
+
+struct acpi_object_buffer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 *pointer;
+	u32 length;
+	u32 aml_length;
+	u8 *aml_start;
+	struct acpi_namespace_node *node;
+};
+
+struct acpi_object_package {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **elements;
+	u8 *aml_start;
+	u32 aml_length;
+	u32 count;
+};
+
+struct acpi_object_event {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	void *os_semaphore;
+};
+
+struct acpi_walk_state;
+
+typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
+
+struct acpi_object_method {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 info_flags;
+	u8 param_count;
+	u8 sync_level;
+	union acpi_operand_object *mutex;
+	union acpi_operand_object *node;
+	u8 *aml_start;
+	union {
+		acpi_internal_method implementation;
+		union acpi_operand_object *handler;
+	} dispatch;
+	u32 aml_length;
+	acpi_owner_id owner_id;
+	u8 thread_count;
+};
+
+struct acpi_thread_state;
+
+struct acpi_object_mutex {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 sync_level;
+	u16 acquisition_depth;
+	void *os_mutex;
+	u64 thread_id;
+	struct acpi_thread_state *owner_thread;
+	union acpi_operand_object *prev;
+	union acpi_operand_object *next;
+	struct acpi_namespace_node *node;
+	u8 original_sync_level;
+};
+
+struct acpi_object_region {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler;
+	union acpi_operand_object *next;
+	acpi_physical_address address;
+	u32 length;
+	void *pointer;
+};
+
+struct acpi_object_notify_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_gpe_block_info;
+
+struct acpi_object_device {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	struct acpi_gpe_block_info *gpe_block;
+};
+
+struct acpi_object_power_resource {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	u32 system_level;
+	u32 resource_order;
+};
+
+struct acpi_object_processor {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 proc_id;
+	u8 length;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	acpi_io_address address;
+};
+
+struct acpi_object_thermal_zone {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_object_field_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+};
+
+struct acpi_object_region_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u16 resource_length;
+	union acpi_operand_object *region_obj;
+	u8 *resource_buffer;
+	u16 pin_number_index;
+	u8 *internal_pcc_buffer;
+};
+
+struct acpi_object_buffer_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u8 is_create_field;
+	union acpi_operand_object *buffer_obj;
+};
+
+struct acpi_object_bank_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+	union acpi_operand_object *bank_obj;
+};
+
+struct acpi_object_index_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *index_obj;
+	union acpi_operand_object *data_obj;
+};
+
+struct acpi_object_notify_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	u32 handler_type;
+	acpi_notify_handler handler;
+	void *context;
+	union acpi_operand_object *next[2];
+};
+
+struct acpi_object_addr_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	u8 handler_flags;
+	acpi_adr_space_handler handler;
+	struct acpi_namespace_node *node;
+	void *context;
+	void *context_mutex;
+	acpi_adr_space_setup setup;
+	union acpi_operand_object *region_list;
+	union acpi_operand_object *next;
+};
+
+struct acpi_object_reference {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 class;
+	u8 target_type;
+	u8 resolved;
+	void *object;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **where;
+	u8 *index_pointer;
+	u8 *aml;
+	u32 value;
+};
+
+struct acpi_object_extra {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *method_REG;
+	struct acpi_namespace_node *scope_node;
+	void *region_context;
+	u8 *aml_start;
+	u32 aml_length;
+};
+
+struct acpi_object_data {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	acpi_object_handler handler;
+	void *pointer;
+};
+
+struct acpi_object_cache_list {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *next;
+};
+
+union acpi_operand_object {
+	struct acpi_object_common common;
+	struct acpi_object_integer integer;
+	struct acpi_object_string string;
+	struct acpi_object_buffer buffer;
+	struct acpi_object_package package;
+	struct acpi_object_event event;
+	struct acpi_object_method method;
+	struct acpi_object_mutex mutex;
+	struct acpi_object_region region;
+	struct acpi_object_notify_common common_notify;
+	struct acpi_object_device device;
+	struct acpi_object_power_resource power_resource;
+	struct acpi_object_processor processor;
+	struct acpi_object_thermal_zone thermal_zone;
+	struct acpi_object_field_common common_field;
+	struct acpi_object_region_field field;
+	struct acpi_object_buffer_field buffer_field;
+	struct acpi_object_bank_field bank_field;
+	struct acpi_object_index_field index_field;
+	struct acpi_object_notify_handler notify;
+	struct acpi_object_addr_handler address_space;
+	struct acpi_object_reference reference;
+	struct acpi_object_extra extra;
+	struct acpi_object_data data;
+	struct acpi_object_cache_list cache;
+	struct acpi_namespace_node node;
+};
+
+union acpi_parse_object;
+
+union acpi_generic_state;
+
+struct acpi_parse_state {
+	u8 *aml_start;
+	u8 *aml;
+	u8 *aml_end;
+	u8 *pkg_start;
+	u8 *pkg_end;
+	union acpi_parse_object *start_op;
+	struct acpi_namespace_node *start_node;
+	union acpi_generic_state *scope;
+	union acpi_parse_object *start_scope;
+	u32 aml_size;
+};
+
+typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
+
+typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
+
+struct acpi_opcode_info;
+
+struct acpi_walk_state {
+	struct acpi_walk_state *next;
+	u8 descriptor_type;
+	u8 walk_type;
+	u16 opcode;
+	u8 next_op_info;
+	u8 num_operands;
+	u8 operand_index;
+	acpi_owner_id owner_id;
+	u8 last_predicate;
+	u8 current_result;
+	u8 return_used;
+	u8 scope_depth;
+	u8 pass_number;
+	u8 namespace_override;
+	u8 result_size;
+	u8 result_count;
+	u8 *aml;
+	u32 arg_types;
+	u32 method_breakpoint;
+	u32 user_breakpoint;
+	u32 parse_flags;
+	struct acpi_parse_state parser_state;
+	u32 prev_arg_types;
+	u32 arg_count;
+	u16 method_nesting_depth;
+	u8 method_is_nested;
+	struct acpi_namespace_node arguments[7];
+	struct acpi_namespace_node local_variables[8];
+	union acpi_operand_object *operands[9];
+	union acpi_operand_object **params;
+	u8 *aml_last_while;
+	union acpi_operand_object **caller_return_desc;
+	union acpi_generic_state *control_state;
+	struct acpi_namespace_node *deferred_node;
+	union acpi_operand_object *implicit_return_obj;
+	struct acpi_namespace_node *method_call_node;
+	union acpi_parse_object *method_call_op;
+	union acpi_operand_object *method_desc;
+	struct acpi_namespace_node *method_node;
+	char *method_pathname;
+	union acpi_parse_object *op;
+	const struct acpi_opcode_info *op_info;
+	union acpi_parse_object *origin;
+	union acpi_operand_object *result_obj;
+	union acpi_generic_state *results;
+	union acpi_operand_object *return_desc;
+	union acpi_generic_state *scope_info;
+	union acpi_parse_object *prev_op;
+	union acpi_parse_object *next_op;
+	struct acpi_thread_state *thread;
+	acpi_parse_downwards descending_callback;
+	acpi_parse_upwards ascending_callback;
+};
+
+struct acpi_gpe_handler_info {
+	acpi_gpe_handler address;
+	void *context;
+	struct acpi_namespace_node *method_node;
+	u8 original_flags;
+	u8 originally_enabled;
+};
+
+struct acpi_gpe_notify_info {
+	struct acpi_namespace_node *device_node;
+	struct acpi_gpe_notify_info *next;
+};
+
+union acpi_gpe_dispatch_info {
+	struct acpi_namespace_node *method_node;
+	struct acpi_gpe_handler_info *handler;
+	struct acpi_gpe_notify_info *notify_list;
+};
+
+struct acpi_gpe_register_info;
+
+struct acpi_gpe_event_info {
+	union acpi_gpe_dispatch_info dispatch;
+	struct acpi_gpe_register_info *register_info;
+	u8 flags;
+	u8 gpe_number;
+	u8 runtime_count;
+	u8 disable_for_dispatch;
+};
+
+struct acpi_gpe_address {
+	u8 space_id;
+	u64 address;
+};
+
+struct acpi_gpe_register_info {
+	struct acpi_gpe_address status_address;
+	struct acpi_gpe_address enable_address;
+	u16 base_gpe_number;
+	u8 enable_for_wake;
+	u8 enable_for_run;
+	u8 mask_for_run;
+	u8 enable_mask;
+};
+
+struct acpi_gpe_xrupt_info;
+
+struct acpi_gpe_block_info {
+	struct acpi_namespace_node *node;
+	struct acpi_gpe_block_info *previous;
+	struct acpi_gpe_block_info *next;
+	struct acpi_gpe_xrupt_info *xrupt_block;
+	struct acpi_gpe_register_info *register_info;
+	struct acpi_gpe_event_info *event_info;
+	u64 address;
+	u32 register_count;
+	u16 gpe_count;
+	u16 block_base_number;
+	u8 space_id;
+	u8 initialized;
+};
+
+struct acpi_gpe_xrupt_info {
+	struct acpi_gpe_xrupt_info *previous;
+	struct acpi_gpe_xrupt_info *next;
+	struct acpi_gpe_block_info *gpe_block_list_head;
+	u32 interrupt_number;
+};
+
+struct acpi_common_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+};
+
+struct acpi_update_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *object;
+};
+
+struct acpi_pkg_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 index;
+	union acpi_operand_object *source_object;
+	union acpi_operand_object *dest_object;
+	struct acpi_walk_state *walk_state;
+	void *this_target_obj;
+	u32 num_packages;
+};
+
+struct acpi_control_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u16 opcode;
+	union acpi_parse_object *predicate_op;
+	u8 *aml_predicate_start;
+	u8 *package_end;
+	u64 loop_timeout;
+};
+
+union acpi_parse_value {
+	u64 integer;
+	u32 size;
+	char *string;
+	u8 *buffer;
+	char *name;
+	union acpi_parse_object *arg;
+};
+
+struct acpi_parse_obj_common {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+};
+
+struct acpi_parse_obj_named {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	char *path;
+	u8 *data;
+	u32 length;
+	u32 name;
+};
+
+struct acpi_parse_obj_asl {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	union acpi_parse_object *child;
+	union acpi_parse_object *parent_method;
+	char *filename;
+	u8 file_changed;
+	char *parent_filename;
+	char *external_name;
+	char *namepath;
+	char name_seg[4];
+	u32 extra_value;
+	u32 column;
+	u32 line_number;
+	u32 logical_line_number;
+	u32 logical_byte_offset;
+	u32 end_line;
+	u32 end_logical_line;
+	u32 acpi_btype;
+	u32 aml_length;
+	u32 aml_subtree_length;
+	u32 final_aml_length;
+	u32 final_aml_offset;
+	u32 compile_flags;
+	u16 parse_opcode;
+	u8 aml_opcode_length;
+	u8 aml_pkg_len_bytes;
+	u8 extra;
+	char parse_op_name[20];
+};
+
+union acpi_parse_object {
+	struct acpi_parse_obj_common common;
+	struct acpi_parse_obj_named named;
+	struct acpi_parse_obj_asl asl;
+};
+
+struct acpi_scope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	struct acpi_namespace_node *node;
+};
+
+struct acpi_pscope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 arg_count;
+	union acpi_parse_object *op;
+	u8 *arg_end;
+	u8 *pkg_end;
+	u32 arg_list;
+};
+
+struct acpi_thread_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 current_sync_level;
+	struct acpi_walk_state *walk_state_list;
+	union acpi_operand_object *acquired_mutex_list;
+	u64 thread_id;
+};
+
+struct acpi_result_values {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *obj_desc[8];
+};
+
+struct acpi_global_notify_handler {
+	acpi_notify_handler handler;
+	void *context;
+};
+
+struct acpi_notify_info {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 handler_list_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler_list_head;
+	struct acpi_global_notify_handler *global;
+};
+
+union acpi_generic_state {
+	struct acpi_common_state common;
+	struct acpi_control_state control;
+	struct acpi_update_state update;
+	struct acpi_scope_state scope;
+	struct acpi_pscope_state parse_scope;
+	struct acpi_pkg_state pkg;
+	struct acpi_thread_state thread;
+	struct acpi_result_values results;
+	struct acpi_notify_info notify;
+};
+
+struct acpi_opcode_info {
+	u32 parse_args;
+	u32 runtime_args;
+	u16 flags;
+	u8 object_type;
+	u8 class;
+	u8 type;
+};
+
+enum {
+	ACPI_REFCLASS_LOCAL = 0,
+	ACPI_REFCLASS_ARG = 1,
+	ACPI_REFCLASS_REFOF = 2,
+	ACPI_REFCLASS_INDEX = 3,
+	ACPI_REFCLASS_TABLE = 4,
+	ACPI_REFCLASS_NAME = 5,
+	ACPI_REFCLASS_DEBUG = 6,
+	ACPI_REFCLASS_MAX = 6,
+};
+
+struct acpi_common_descriptor {
+	void *common_pointer;
+	u8 descriptor_type;
+};
+
+union acpi_descriptor {
+	struct acpi_common_descriptor common;
+	union acpi_operand_object object;
+	struct acpi_namespace_node node;
+	union acpi_parse_object op;
+};
+
+typedef enum {
+	ACPI_IMODE_LOAD_PASS1 = 1,
+	ACPI_IMODE_LOAD_PASS2 = 2,
+	ACPI_IMODE_EXECUTE = 3,
+} acpi_interpreter_mode;
+
+struct acpi_create_field_info {
+	struct acpi_namespace_node *region_node;
+	struct acpi_namespace_node *field_node;
+	struct acpi_namespace_node *register_node;
+	struct acpi_namespace_node *data_register_node;
+	struct acpi_namespace_node *connection_node;
+	u8 *resource_buffer;
+	u32 bank_value;
+	u32 field_bit_position;
+	u32 field_bit_length;
+	u16 resource_length;
+	u16 pin_number_index;
+	u8 field_flags;
+	u8 attribute;
+	u8 field_type;
+	u8 access_length;
+};
+
+enum {
+	AML_FIELD_ACCESS_ANY = 0,
+	AML_FIELD_ACCESS_BYTE = 1,
+	AML_FIELD_ACCESS_WORD = 2,
+	AML_FIELD_ACCESS_DWORD = 3,
+	AML_FIELD_ACCESS_QWORD = 4,
+	AML_FIELD_ACCESS_BUFFER = 5,
+};
+
+typedef void (*acpi_osd_exec_callback)(void *);
+
+typedef enum {
+	OSL_GLOBAL_LOCK_HANDLER = 0,
+	OSL_NOTIFY_HANDLER = 1,
+	OSL_GPE_HANDLER = 2,
+	OSL_DEBUGGER_MAIN_THREAD = 3,
+	OSL_DEBUGGER_EXEC_THREAD = 4,
+	OSL_EC_POLL_HANDLER = 5,
+	OSL_EC_BURST_HANDLER = 6,
+} acpi_execute_type;
+
+enum {
+	MATCH_MTR = 0,
+	MATCH_MEQ = 1,
+	MATCH_MLE = 2,
+	MATCH_MLT = 3,
+	MATCH_MGE = 4,
+	MATCH_MGT = 5,
+};
+
+struct acpi_port_info {
+	char *name;
+	u16 start;
+	u16 end;
+	u8 osi_dependency;
+};
+
+typedef u32 acpi_mutex_handle;
+
+typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
+
+struct acpi_pnp_device_id {
+	u32 length;
+	char *string;
+};
+
+struct acpi_pnp_device_id_list {
+	u32 count;
+	u32 list_size;
+	struct acpi_pnp_device_id ids[0];
+};
+
+struct acpi_rw_lock {
+	void *writer_mutex;
+	void *reader_mutex;
+	u32 num_readers;
+};
+
+struct acpi_name_info {
+	char name[4];
+	u16 argument_list;
+	u8 expected_btypes;
+} __attribute__((packed));
+
+struct acpi_package_info {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 object_type2;
+	u8 count2;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info2 {
+	u8 type;
+	u8 count;
+	u8 object_type[4];
+	u8 reserved;
+};
+
+struct acpi_package_info3 {
+	u8 type;
+	u8 count;
+	u8 object_type[2];
+	u8 tail_object_type;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info4 {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 sub_object_types;
+	u8 pkg_count;
+	u16 reserved;
+} __attribute__((packed));
+
+union acpi_predefined_info {
+	struct acpi_name_info info;
+	struct acpi_package_info ret_info;
+	struct acpi_package_info2 ret_info2;
+	struct acpi_package_info3 ret_info3;
+	struct acpi_package_info4 ret_info4;
+};
+
+struct acpi_get_devices_info {
+	acpi_walk_callback user_function;
+	void *context;
+	const char *hid;
+};
+
+struct acpi_evaluate_info {
+	struct acpi_namespace_node *prefix_node;
+	const char *relative_pathname;
+	union acpi_operand_object **parameters;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *obj_desc;
+	char *full_pathname;
+	const union acpi_predefined_info *predefined;
+	union acpi_operand_object *return_object;
+	union acpi_operand_object *parent_package;
+	u32 return_flags;
+	u32 return_btype;
+	u16 param_count;
+	u16 node_flags;
+	u8 pass_number;
+	u8 return_object_type;
+	u8 flags;
+};
+
+typedef u16 acpi_rs_length;
+
+typedef u32 acpi_rsdesc_size;
+
+struct aml_resource_small_header {
+	u8 descriptor_type;
+};
+
+struct aml_resource_irq {
+	u8 descriptor_type;
+	u16 irq_mask;
+	u8 flags;
+} __attribute__((packed));
+
+struct aml_resource_dma {
+	u8 descriptor_type;
+	u8 dma_channel_mask;
+	u8 flags;
+};
+
+struct aml_resource_start_dependent {
+	u8 descriptor_type;
+	u8 flags;
+};
+
+struct aml_resource_end_dependent {
+	u8 descriptor_type;
+};
+
+struct aml_resource_io {
+	u8 descriptor_type;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u8 alignment;
+	u8 address_length;
+};
+
+struct aml_resource_fixed_io {
+	u8 descriptor_type;
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct aml_resource_vendor_small {
+	u8 descriptor_type;
+};
+
+struct aml_resource_end_tag {
+	u8 descriptor_type;
+	u8 checksum;
+};
+
+struct aml_resource_fixed_dma {
+	u8 descriptor_type;
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct aml_resource_large_header {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_memory24 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_vendor_large {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_fixed_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+} __attribute__((packed));
+
+struct aml_resource_extended_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u8 revision_ID;
+	u8 reserved;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct aml_resource_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address16 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_extended_irq {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u8 interrupt_count;
+	u32 interrupts[1];
+} __attribute__((packed));
+
+struct aml_resource_generic_register {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 address_space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct aml_resource_gpio {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 connection_type;
+	u16 flags;
+	u16 int_flags;
+	u8 pin_config;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_common_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_csi2_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_i2c_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u16 slave_address;
+} __attribute__((packed));
+
+struct aml_resource_spi_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+} __attribute__((packed));
+
+struct aml_resource_uart_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 default_baud_rate;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u8 parity;
+	u8 lines_enabled;
+} __attribute__((packed));
+
+struct aml_resource_pin_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config;
+	u16 function_number;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 pin_table_offset;
+	u16 label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 function_number;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+union aml_resource {
+	u8 descriptor_type;
+	struct aml_resource_small_header small_header;
+	struct aml_resource_large_header large_header;
+	struct aml_resource_irq irq;
+	struct aml_resource_dma dma;
+	struct aml_resource_start_dependent start_dpf;
+	struct aml_resource_end_dependent end_dpf;
+	struct aml_resource_io io;
+	struct aml_resource_fixed_io fixed_io;
+	struct aml_resource_fixed_dma fixed_dma;
+	struct aml_resource_vendor_small vendor_small;
+	struct aml_resource_end_tag end_tag;
+	struct aml_resource_memory24 memory24;
+	struct aml_resource_generic_register generic_reg;
+	struct aml_resource_vendor_large vendor_large;
+	struct aml_resource_memory32 memory32;
+	struct aml_resource_fixed_memory32 fixed_memory32;
+	struct aml_resource_address16 address16;
+	struct aml_resource_address32 address32;
+	struct aml_resource_address64 address64;
+	struct aml_resource_extended_address64 ext_address64;
+	struct aml_resource_extended_irq extended_irq;
+	struct aml_resource_gpio gpio;
+	struct aml_resource_i2c_serialbus i2c_serial_bus;
+	struct aml_resource_spi_serialbus spi_serial_bus;
+	struct aml_resource_uart_serialbus uart_serial_bus;
+	struct aml_resource_csi2_serialbus csi2_serial_bus;
+	struct aml_resource_common_serialbus common_serial_bus;
+	struct aml_resource_pin_function pin_function;
+	struct aml_resource_pin_config pin_config;
+	struct aml_resource_pin_group pin_group;
+	struct aml_resource_pin_group_function pin_group_function;
+	struct aml_resource_pin_group_config pin_group_config;
+	struct aml_resource_address address;
+	u32 dword_item;
+	u16 word_item;
+	u8 byte_item;
+};
+
+struct acpi_rsconvert_info {
+	u8 opcode;
+	u8 resource_offset;
+	u8 aml_offset;
+	u8 value;
+};
+
+enum {
+	ACPI_RSC_INITGET = 0,
+	ACPI_RSC_INITSET = 1,
+	ACPI_RSC_FLAGINIT = 2,
+	ACPI_RSC_1BITFLAG = 3,
+	ACPI_RSC_2BITFLAG = 4,
+	ACPI_RSC_3BITFLAG = 5,
+	ACPI_RSC_6BITFLAG = 6,
+	ACPI_RSC_ADDRESS = 7,
+	ACPI_RSC_BITMASK = 8,
+	ACPI_RSC_BITMASK16 = 9,
+	ACPI_RSC_COUNT = 10,
+	ACPI_RSC_COUNT16 = 11,
+	ACPI_RSC_COUNT_GPIO_PIN = 12,
+	ACPI_RSC_COUNT_GPIO_RES = 13,
+	ACPI_RSC_COUNT_GPIO_VEN = 14,
+	ACPI_RSC_COUNT_SERIAL_RES = 15,
+	ACPI_RSC_COUNT_SERIAL_VEN = 16,
+	ACPI_RSC_DATA8 = 17,
+	ACPI_RSC_EXIT_EQ = 18,
+	ACPI_RSC_EXIT_LE = 19,
+	ACPI_RSC_EXIT_NE = 20,
+	ACPI_RSC_LENGTH = 21,
+	ACPI_RSC_MOVE_GPIO_PIN = 22,
+	ACPI_RSC_MOVE_GPIO_RES = 23,
+	ACPI_RSC_MOVE_SERIAL_RES = 24,
+	ACPI_RSC_MOVE_SERIAL_VEN = 25,
+	ACPI_RSC_MOVE8 = 26,
+	ACPI_RSC_MOVE16 = 27,
+	ACPI_RSC_MOVE32 = 28,
+	ACPI_RSC_MOVE64 = 29,
+	ACPI_RSC_SET8 = 30,
+	ACPI_RSC_SOURCE = 31,
+	ACPI_RSC_SOURCEX = 32,
+};
+
+struct acpi_table_desc {
+	acpi_physical_address address;
+	struct acpi_table_header *pointer;
+	u32 length;
+	union acpi_name_union signature;
+	acpi_owner_id owner_id;
+	u8 flags;
+	u16 validation_count;
+};
+
+struct acpi_table_list {
+	struct acpi_table_desc *tables;
+	u32 current_table_count;
+	u32 max_table_count;
+	u8 flags;
+};
+
+struct acpi_table_rsdp {
+	char signature[8];
+	u8 checksum;
+	char oem_id[6];
+	u8 revision;
+	u32 rsdt_physical_address;
+	u32 length;
+	u64 xsdt_physical_address;
+	u8 extended_checksum;
+	u8 reserved[3];
+} __attribute__((packed));
+
+typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
+
+struct acpi_pci_slot {
+	struct pci_slot *pci_slot;
+	struct list_head list;
+};
+
+enum acpi_hmat_type {
+	ACPI_HMAT_TYPE_PROXIMITY = 0,
+	ACPI_HMAT_TYPE_LOCALITY = 1,
+	ACPI_HMAT_TYPE_CACHE = 2,
+	ACPI_HMAT_TYPE_RESERVED = 3,
+};
+
+struct acpi_hmat_proximity_domain {
+	struct acpi_hmat_structure header;
+	u16 flags;
+	u16 reserved1;
+	u32 processor_PD;
+	u32 memory_PD;
+	u32 reserved2;
+	u64 reserved3;
+	u64 reserved4;
+};
+
+struct acpi_hmat_locality {
+	struct acpi_hmat_structure header;
+	u8 flags;
+	u8 data_type;
+	u8 min_transfer_size;
+	u8 reserved1;
+	u32 number_of_initiator_Pds;
+	u32 number_of_target_Pds;
+	u32 reserved2;
+	u64 entry_base_unit;
+};
+
+struct acpi_hmat_cache {
+	struct acpi_hmat_structure header;
+	u32 memory_PD;
+	u32 reserved1;
+	u64 cache_size;
+	u32 cache_attributes;
+	u16 reserved2;
+	u16 number_of_SMBIOShandles;
+};
+
+enum acpi_srat_type {
+	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
+	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
+	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
+	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
+	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
+	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
+	ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6,
+	ACPI_SRAT_TYPE_RESERVED = 7,
+};
+
+struct acpi_srat_mem_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u16 reserved;
+	u64 base_address;
+	u64 length;
+	u32 reserved1;
+	u32 flags;
+	u64 reserved2;
+} __attribute__((packed));
+
+struct node_hmem_attrs {
+	unsigned int read_bandwidth;
+	unsigned int write_bandwidth;
+	unsigned int read_latency;
+	unsigned int write_latency;
+};
+
+enum cache_indexing {
+	NODE_CACHE_DIRECT_MAP = 0,
+	NODE_CACHE_INDEXED = 1,
+	NODE_CACHE_OTHER = 2,
+};
+
+enum cache_write_policy {
+	NODE_CACHE_WRITE_BACK = 0,
+	NODE_CACHE_WRITE_THROUGH = 1,
+	NODE_CACHE_WRITE_OTHER = 2,
+};
+
+struct node_cache_attrs {
+	enum cache_indexing indexing;
+	enum cache_write_policy write_policy;
+	u64 size;
+	u16 line_size;
+	u8 level;
+};
+
+struct memory_notify {
+	long unsigned int start_pfn;
+	long unsigned int nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+enum locality_types {
+	WRITE_LATENCY = 0,
+	READ_LATENCY = 1,
+	WRITE_BANDWIDTH = 2,
+	READ_BANDWIDTH = 3,
+};
+
+struct memory_locality {
+	struct list_head node;
+	struct acpi_hmat_locality *hmat_loc;
+};
+
+struct target_cache {
+	struct list_head node;
+	struct node_cache_attrs cache_attrs;
+};
+
+struct memory_target {
+	struct list_head node;
+	unsigned int memory_pxm;
+	unsigned int processor_pxm;
+	struct resource memregions;
+	struct node_hmem_attrs hmem_attrs[2];
+	struct list_head caches;
+	struct node_cache_attrs cache_attrs;
+	bool registered;
+};
+
+struct memory_initiator {
+	struct list_head node;
+	unsigned int processor_pxm;
+	bool has_cpu;
+};
+
+struct acpi_table_bgrt {
+	struct acpi_table_header header;
+	u16 version;
+	u8 status;
+	u8 image_type;
+	u64 image_address;
+	u32 image_offset_x;
+	u32 image_offset_y;
+};
+
+struct acpi_table_spcr {
+	struct acpi_table_header header;
+	u8 interface_type;
+	u8 reserved[3];
+	struct acpi_generic_address serial_port;
+	u8 interrupt_type;
+	u8 pc_interrupt;
+	u32 interrupt;
+	u8 baud_rate;
+	u8 parity;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 terminal_type;
+	u8 reserved1;
+	u16 pci_device_id;
+	u16 pci_vendor_id;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u32 pci_flags;
+	u8 pci_segment;
+	u32 reserved2;
+} __attribute__((packed));
+
+struct acpi_whea_header {
+	u8 action;
+	u8 instruction;
+	u8 flags;
+	u8 reserved;
+	struct acpi_generic_address register_region;
+	u64 value;
+	u64 mask;
+} __attribute__((packed));
+
+struct acpi_hest_header {
+	u16 type;
+	u16 source_id;
+};
+
+struct cper_sec_mem_err {
+	u64 validation_bits;
+	u64 error_status;
+	u64 physical_addr;
+	u64 physical_addr_mask;
+	u16 node;
+	u16 card;
+	u16 module;
+	u16 bank;
+	u16 device;
+	u16 row;
+	u16 column;
+	u16 bit_pos;
+	u64 requestor_id;
+	u64 responder_id;
+	u64 target_id;
+	u8 error_type;
+	u8 extended;
+	u16 rank;
+	u16 mem_array_handle;
+	u16 mem_dev_handle;
+};
+
+struct apei_exec_context;
+
+typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);
+
+struct apei_exec_ins_type;
+
+struct apei_exec_context {
+	u32 ip;
+	u64 value;
+	u64 var1;
+	u64 var2;
+	u64 src_base;
+	u64 dst_base;
+	struct apei_exec_ins_type *ins_table;
+	u32 instructions;
+	struct acpi_whea_header *action_table;
+	u32 entries;
+};
+
+struct apei_exec_ins_type {
+	u32 flags;
+	apei_exec_ins_func_t run;
+};
+
+struct apei_resources {
+	struct list_head iomem;
+	struct list_head ioport;
+};
+
+typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);
+
+struct apei_res {
+	struct list_head list;
+	long unsigned int start;
+	long unsigned int end;
+};
+
+enum arch_timer_ppi_nr {
+	ARCH_TIMER_PHYS_SECURE_PPI = 0,
+	ARCH_TIMER_PHYS_NONSECURE_PPI = 1,
+	ARCH_TIMER_VIRT_PPI = 2,
+	ARCH_TIMER_HYP_PPI = 3,
+	ARCH_TIMER_HYP_VIRT_PPI = 4,
+	ARCH_TIMER_MAX_TIMER_PPI = 5,
+};
+
+struct arch_timer_mem_frame {
+	bool valid;
+	phys_addr_t cntbase;
+	size_t size;
+	int phys_irq;
+	int virt_irq;
+};
+
+struct arch_timer_mem {
+	phys_addr_t cntctlbase;
+	size_t size;
+	struct arch_timer_mem_frame frame[8];
+};
+
+struct acpi_table_gtdt {
+	struct acpi_table_header header;
+	u64 counter_block_addresss;
+	u32 reserved;
+	u32 secure_el1_interrupt;
+	u32 secure_el1_flags;
+	u32 non_secure_el1_interrupt;
+	u32 non_secure_el1_flags;
+	u32 virtual_timer_interrupt;
+	u32 virtual_timer_flags;
+	u32 non_secure_el2_interrupt;
+	u32 non_secure_el2_flags;
+	u64 counter_read_block_address;
+	u32 platform_timer_count;
+	u32 platform_timer_offset;
+} __attribute__((packed));
+
+struct acpi_gtdt_header {
+	u8 type;
+	u16 length;
+} __attribute__((packed));
+
+enum acpi_gtdt_type {
+	ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
+	ACPI_GTDT_TYPE_WATCHDOG = 1,
+	ACPI_GTDT_TYPE_RESERVED = 2,
+};
+
+struct acpi_gtdt_timer_block {
+	struct acpi_gtdt_header header;
+	u8 reserved;
+	u64 block_address;
+	u32 timer_count;
+	u32 timer_offset;
+} __attribute__((packed));
+
+struct acpi_gtdt_timer_entry {
+	u8 frame_number;
+	u8 reserved[3];
+	u64 base_address;
+	u64 el0_base_address;
+	u32 timer_interrupt;
+	u32 timer_flags;
+	u32 virtual_timer_interrupt;
+	u32 virtual_timer_flags;
+	u32 common_flags;
+} __attribute__((packed));
+
+struct acpi_gtdt_watchdog {
+	struct acpi_gtdt_header header;
+	u8 reserved;
+	u64 refresh_frame_address;
+	u64 control_frame_address;
+	u32 timer_interrupt;
+	u32 timer_flags;
+} __attribute__((packed));
+
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
+};
+
+struct acpi_gtdt_descriptor {
+	struct acpi_table_gtdt *gtdt;
+	void *gtdt_end;
+	void *platform_timer;
+};
+
+struct pnp_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+};
+
+struct pnp_card_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+	struct {
+		__u8 id[8];
+	} devs[8];
+};
+
+struct pnp_protocol;
+
+struct pnp_id;
+
+struct pnp_card {
+	struct device dev;
+	unsigned char number;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head devices;
+	struct pnp_protocol *protocol;
+	struct pnp_id *id;
+	char name[50];
+	unsigned char pnpver;
+	unsigned char productver;
+	unsigned int serial;
+	unsigned char checksum;
+	struct proc_dir_entry *procdir;
+};
+
+struct pnp_dev;
+
+struct pnp_protocol {
+	struct list_head protocol_list;
+	char *name;
+	int (*get)(struct pnp_dev *);
+	int (*set)(struct pnp_dev *);
+	int (*disable)(struct pnp_dev *);
+	bool (*can_wakeup)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	unsigned char number;
+	struct device dev;
+	struct list_head cards;
+	struct list_head devices;
+};
+
+struct pnp_id {
+	char id[8];
+	struct pnp_id *next;
+};
+
+struct pnp_card_driver;
+
+struct pnp_card_link {
+	struct pnp_card *card;
+	struct pnp_card_driver *driver;
+	void *driver_data;
+	pm_message_t pm_state;
+};
+
+struct pnp_driver {
+	const char *name;
+	const struct pnp_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
+	void (*remove)(struct pnp_dev *);
+	void (*shutdown)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	struct device_driver driver;
+};
+
+struct pnp_card_driver {
+	struct list_head global_list;
+	char *name;
+	const struct pnp_card_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
+	void (*remove)(struct pnp_card_link *);
+	int (*suspend)(struct pnp_card_link *, pm_message_t);
+	int (*resume)(struct pnp_card_link *);
+	struct pnp_driver link;
+};
+
+struct pnp_dev {
+	struct device dev;
+	u64 dma_mask;
+	unsigned int number;
+	int status;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head card_list;
+	struct list_head rdev_list;
+	struct pnp_protocol *protocol;
+	struct pnp_card *card;
+	struct pnp_driver *driver;
+	struct pnp_card_link *card_link;
+	struct pnp_id *id;
+	int active;
+	int capabilities;
+	unsigned int num_dependent_sets;
+	struct list_head resources;
+	struct list_head options;
+	char name[50];
+	int flags;
+	struct proc_dir_entry *procent;
+	void *data;
+};
+
+struct pnp_port {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+typedef struct {
+	long unsigned int bits[4];
+} pnp_irq_mask_t;
+
+struct pnp_irq {
+	pnp_irq_mask_t map;
+	unsigned char flags;
+};
+
+struct pnp_dma {
+	unsigned char map;
+	unsigned char flags;
+};
+
+struct pnp_mem {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+struct pnp_option {
+	struct list_head list;
+	unsigned int flags;
+	long unsigned int type;
+	union {
+		struct pnp_port port;
+		struct pnp_irq irq;
+		struct pnp_dma dma;
+		struct pnp_mem mem;
+	} u;
+};
+
+struct pnp_resource {
+	struct list_head list;
+	struct resource res;
+};
+
+struct amba_id {
+	unsigned int id;
+	unsigned int mask;
+	void *data;
+};
+
+struct amba_driver {
+	struct device_driver drv;
+	int (*probe)(struct amba_device *, const struct amba_id *);
+	void (*remove)(struct amba_device *);
+	void (*shutdown)(struct amba_device *);
+	const struct amba_id *id_table;
+	bool driver_managed_dma;
+};
+
+struct clk_hw;
+
+struct clk_rate_request {
+	long unsigned int rate;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int best_parent_rate;
+	struct clk_hw *best_parent_hw;
+};
+
+struct clk_core;
+
+struct clk_init_data;
+
+struct clk_hw {
+	struct clk_core *core;
+	struct clk *clk;
+	const struct clk_init_data *init;
+};
+
+struct clk_duty {
+	unsigned int num;
+	unsigned int den;
+};
+
+struct clk_ops {
+	int (*prepare)(struct clk_hw *);
+	void (*unprepare)(struct clk_hw *);
+	int (*is_prepared)(struct clk_hw *);
+	void (*unprepare_unused)(struct clk_hw *);
+	int (*enable)(struct clk_hw *);
+	void (*disable)(struct clk_hw *);
+	int (*is_enabled)(struct clk_hw *);
+	void (*disable_unused)(struct clk_hw *);
+	int (*save_context)(struct clk_hw *);
+	void (*restore_context)(struct clk_hw *);
+	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
+	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
+	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
+	int (*set_parent)(struct clk_hw *, u8);
+	u8 (*get_parent)(struct clk_hw *);
+	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
+	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
+	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
+	int (*get_phase)(struct clk_hw *);
+	int (*set_phase)(struct clk_hw *, int);
+	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*init)(struct clk_hw *);
+	void (*terminate)(struct clk_hw *);
+	void (*debug_init)(struct clk_hw *, struct dentry *);
+};
+
+struct clk_parent_data {
+	const struct clk_hw *hw;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct clk_init_data {
+	const char *name;
+	const struct clk_ops *ops;
+	const char * const *parent_names;
+	const struct clk_parent_data *parent_data;
+	const struct clk_hw **parent_hws;
+	u8 num_parents;
+	long unsigned int flags;
+};
+
+struct clk_fractional_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 mshift;
+	u8 mwidth;
+	u32 mmask;
+	u8 nshift;
+	u8 nwidth;
+	u32 nmask;
+	u8 flags;
+	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
+	spinlock_t *lock;
+};
+
+typedef void (*of_init_fn_1)(struct device_node *);
+
+enum xgene_pll_type {
+	PLL_TYPE_PCP = 0,
+	PLL_TYPE_SOC = 1,
+};
+
+struct xgene_clk_pll {
+	struct clk_hw hw;
+	void *reg;
+	spinlock_t *lock;
+	u32 pll_offset;
+	enum xgene_pll_type type;
+	int version;
+};
+
+struct xgene_clk_pmd {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u32 mask;
+	u64 denom;
+	u32 flags;
+	spinlock_t *lock;
+};
+
+struct xgene_dev_parameters {
+	void *csr_reg;
+	u32 reg_clk_offset;
+	u32 reg_clk_mask;
+	u32 reg_csr_offset;
+	u32 reg_csr_mask;
+	void *divider_reg;
+	u32 reg_divider_offset;
+	u32 reg_divider_shift;
+	u32 reg_divider_width;
+};
+
+struct xgene_clk {
+	struct clk_hw hw;
+	spinlock_t *lock;
+	struct xgene_dev_parameters param;
+};
+
+struct clk_div_table {
+	unsigned int val;
+	unsigned int div;
+};
+
+struct clk_onecell_data {
+	struct clk **clks;
+	unsigned int clk_num;
+};
+
+struct hisi_clock_data {
+	struct clk_onecell_data clk_data;
+	void *base;
+};
+
+struct hisi_fixed_rate_clock {
+	unsigned int id;
+	char *name;
+	const char *parent_name;
+	long unsigned int flags;
+	long unsigned int fixed_rate;
+};
+
+struct hisi_fixed_factor_clock {
+	unsigned int id;
+	char *name;
+	const char *parent_name;
+	long unsigned int mult;
+	long unsigned int div;
+	long unsigned int flags;
+};
+
+struct hisi_mux_clock {
+	unsigned int id;
+	const char *name;
+	const char * const *parent_names;
+	u8 num_parents;
+	long unsigned int flags;
+	long unsigned int offset;
+	u8 shift;
+	u8 width;
+	u8 mux_flags;
+	const u32 *table;
+	const char *alias;
+};
+
+struct hisi_divider_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	long unsigned int flags;
+	long unsigned int offset;
+	u8 shift;
+	u8 width;
+	u8 div_flags;
+	struct clk_div_table *table;
+	const char *alias;
+};
+
+struct hisi_gate_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	long unsigned int flags;
+	long unsigned int offset;
+	u8 bit_idx;
+	u8 gate_flags;
+	const char *alias;
+};
+
+struct clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_mux {
+	struct clk_hw hw;
+	void *reg;
+	const u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_busy_divider {
+	struct clk_divider div;
+	const struct clk_ops *div_ops;
+	void *reg;
+	u8 shift;
+};
+
+struct clk_busy_mux {
+	struct clk_mux mux;
+	const struct clk_ops *mux_ops;
+	void *reg;
+	u8 shift;
+};
+
+struct imx_fracn_gppll_rate_table {
+	unsigned int rate;
+	unsigned int mfi;
+	unsigned int mfn;
+	unsigned int mfd;
+	unsigned int rdiv;
+	unsigned int odiv;
+};
+
+struct imx_fracn_gppll_clk {
+	const struct imx_fracn_gppll_rate_table *rate_table;
+	int rate_count;
+	int flags;
+};
+
+struct clk_fracn_gppll {
+	struct clk_hw hw;
+	void *base;
+	const struct imx_fracn_gppll_rate_table *rate_table;
+	int rate_count;
+};
+
+struct clk_gate2 {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 cgr_val;
+	u8 cgr_mask;
+	u8 flags;
+	spinlock_t *lock;
+	unsigned int *share_count;
+};
+
+struct clk_hw_onecell_data {
+	unsigned int num;
+	struct clk_hw *hws[0];
+};
+
+struct imx8qxp_lpcg_data {
+	int id;
+	char *name;
+	char *parent;
+	long unsigned int flags;
+	u32 offset;
+	u8 bit_idx;
+	bool hw_gate;
+};
+
+struct imx8qxp_ss_lpcg {
+	const struct imx8qxp_lpcg_data *lpcg;
+	u8 num_lpcg;
+	u8 num_max;
+};
+
+struct clk_fixed_factor {
+	struct clk_hw hw;
+	unsigned int mult;
+	unsigned int div;
+};
+
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
+struct clk_regmap {
+	struct clk_hw hw;
+	struct regmap *map;
+	void *data;
+};
+
+struct clk_regmap_gate_data {
+	unsigned int offset;
+	u8 bit_idx;
+	u8 flags;
+};
+
+struct clk_regmap_div_data {
+	unsigned int offset;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+};
+
+struct clk_regmap_mux_data {
+	unsigned int offset;
+	u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+};
+
+struct parm {
+	u16 reg_off;
+	u8 shift;
+	u8 width;
+};
+
+struct pll_params_table {
+	unsigned int m;
+	unsigned int n;
+};
+
+struct pll_mult_range {
+	unsigned int min;
+	unsigned int max;
+};
+
+struct meson_clk_pll_data {
+	struct parm en;
+	struct parm m;
+	struct parm n;
+	struct parm frac;
+	struct parm l;
+	struct parm rst;
+	const struct reg_sequence *init_regs;
+	unsigned int init_count;
+	const struct pll_params_table *table;
+	const struct pll_mult_range *range;
+	u8 flags;
+};
+
+struct meson_clk_mpll_data {
+	struct parm sdm;
+	struct parm sdm_en;
+	struct parm n2;
+	struct parm ssen;
+	struct parm misc;
+	const struct reg_sequence *init_regs;
+	unsigned int init_count;
+	spinlock_t *lock;
+	u8 flags;
+};
+
+struct meson_eeclkc_data {
+	struct clk_regmap * const *regmap_clks;
+	unsigned int regmap_clk_num;
+	const struct reg_sequence *init_regs;
+	unsigned int init_count;
+	struct clk_hw_onecell_data *hw_onecell_data;
+};
+
+struct clk_regmap___2 {
+	struct clk_hw hw;
+	struct regmap *regmap;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	bool enable_is_inverted;
+};
+
+enum {
+	CLK_ALPHA_PLL_TYPE_DEFAULT = 0,
+	CLK_ALPHA_PLL_TYPE_HUAYRA = 1,
+	CLK_ALPHA_PLL_TYPE_BRAMMO = 2,
+	CLK_ALPHA_PLL_TYPE_FABIA = 3,
+	CLK_ALPHA_PLL_TYPE_TRION = 4,
+	CLK_ALPHA_PLL_TYPE_LUCID = 4,
+	CLK_ALPHA_PLL_TYPE_AGERA = 5,
+	CLK_ALPHA_PLL_TYPE_ZONDA = 6,
+	CLK_ALPHA_PLL_TYPE_LUCID_EVO = 7,
+	CLK_ALPHA_PLL_TYPE_RIVIAN_EVO = 8,
+	CLK_ALPHA_PLL_TYPE_MAX = 9,
+};
+
+enum {
+	PLL_OFF_L_VAL = 0,
+	PLL_OFF_CAL_L_VAL = 1,
+	PLL_OFF_ALPHA_VAL = 2,
+	PLL_OFF_ALPHA_VAL_U = 3,
+	PLL_OFF_USER_CTL = 4,
+	PLL_OFF_USER_CTL_U = 5,
+	PLL_OFF_USER_CTL_U1 = 6,
+	PLL_OFF_CONFIG_CTL = 7,
+	PLL_OFF_CONFIG_CTL_U = 8,
+	PLL_OFF_CONFIG_CTL_U1 = 9,
+	PLL_OFF_TEST_CTL = 10,
+	PLL_OFF_TEST_CTL_U = 11,
+	PLL_OFF_TEST_CTL_U1 = 12,
+	PLL_OFF_STATUS = 13,
+	PLL_OFF_OPMODE = 14,
+	PLL_OFF_FRAC = 15,
+	PLL_OFF_CAL_VAL = 16,
+	PLL_OFF_MAX_REGS = 17,
+};
+
+struct pll_vco {
+	long unsigned int min_freq;
+	long unsigned int max_freq;
+	u32 val;
+};
+
+struct clk_alpha_pll {
+	u32 offset;
+	const u8 *regs;
+	const struct pll_vco *vco_table;
+	size_t num_vco;
+	u8 flags;
+	struct clk_regmap___2 clkr;
+};
+
+struct clk_alpha_pll_postdiv {
+	u32 offset;
+	u8 width;
+	const u8 *regs;
+	struct clk_regmap___2 clkr;
+	int post_div_shift;
+	const struct clk_div_table *post_div_table;
+	size_t num_post_div;
+};
+
+struct alpha_pll_config {
+	u32 l;
+	u32 alpha;
+	u32 alpha_hi;
+	u32 config_ctl_val;
+	u32 config_ctl_hi_val;
+	u32 config_ctl_hi1_val;
+	u32 user_ctl_val;
+	u32 user_ctl_hi_val;
+	u32 user_ctl_hi1_val;
+	u32 test_ctl_val;
+	u32 test_ctl_hi_val;
+	u32 test_ctl_hi1_val;
+	u32 main_output_mask;
+	u32 aux_output_mask;
+	u32 aux2_output_mask;
+	u32 early_output_mask;
+	u32 alpha_en_mask;
+	u32 alpha_mode_mask;
+	u32 pre_div_val;
+	u32 pre_div_mask;
+	u32 post_div_val;
+	u32 post_div_mask;
+	u32 vco_val;
+	u32 vco_mask;
+};
+
+struct clk_regmap_mux_div {
+	u32 reg_offset;
+	u32 hid_width;
+	u32 hid_shift;
+	u32 src_width;
+	u32 src_shift;
+	u32 div;
+	u32 src;
+	const u32 *parent_map;
+	struct clk_regmap___2 clkr;
+	struct clk *pclk;
+	struct notifier_block clk_nb;
+};
+
+struct qcom_reset_map;
+
+struct gdsc;
+
+struct qcom_cc_desc {
+	const struct regmap_config *config;
+	struct clk_regmap___2 **clks;
+	size_t num_clks;
+	const struct qcom_reset_map *resets;
+	size_t num_resets;
+	struct gdsc **gdscs;
+	size_t num_gdscs;
+	struct clk_hw **clk_hws;
+	size_t num_clk_hws;
+};
+
+struct qcom_reset_map {
+	unsigned int reg;
+	u8 bit;
+};
+
+struct parent_map {
+	u8 src;
+	u8 cfg;
+};
+
+struct pll_freq_tbl {
+	long unsigned int freq;
+	u16 l;
+	u16 m;
+	u16 n;
+	u32 ibits;
+};
+
+struct clk_pll {
+	u32 l_reg;
+	u32 m_reg;
+	u32 n_reg;
+	u32 config_reg;
+	u32 mode_reg;
+	u32 status_reg;
+	u8 status_bit;
+	u8 post_div_width;
+	u8 post_div_shift;
+	const struct pll_freq_tbl *freq_tbl;
+	struct clk_regmap___2 clkr;
+};
+
+struct freq_tbl {
+	long unsigned int freq;
+	u8 src;
+	u8 pre_div;
+	u16 m;
+	u16 n;
+};
+
+struct mn {
+	u8 mnctr_en_bit;
+	u8 mnctr_reset_bit;
+	u8 mnctr_mode_shift;
+	u8 n_val_shift;
+	u8 m_val_shift;
+	u8 width;
+	bool reset_in_cc;
+};
+
+struct pre_div {
+	u8 pre_div_shift;
+	u8 pre_div_width;
+};
+
+struct src_sel {
+	u8 src_sel_shift;
+	const struct parent_map *parent_map;
+};
+
+struct clk_rcg {
+	u32 ns_reg;
+	u32 md_reg;
+	struct mn mn;
+	struct pre_div p;
+	struct src_sel s;
+	const struct freq_tbl *freq_tbl;
+	struct clk_regmap___2 clkr;
+};
+
+struct clk_branch {
+	u32 hwcg_reg;
+	u32 halt_reg;
+	u8 hwcg_bit;
+	u8 halt_bit;
+	u8 halt_check;
+	struct clk_regmap___2 clkr;
+};
+
+enum {
+	P_PXO = 0,
+	P_PLL8 = 1,
+	P_CXO = 2,
+};
+
+enum rpmh_state {
+	RPMH_SLEEP_STATE = 0,
+	RPMH_WAKE_ONLY_STATE = 1,
+	RPMH_ACTIVE_ONLY_STATE = 2,
+};
+
+struct tcs_cmd {
+	u32 addr;
+	u32 data;
+	u32 wait;
+};
+
+struct bcm_db {
+	__le32 unit;
+	__le16 width;
+	u8 vcd;
+	u8 reserved;
+};
+
+struct clk_rpmh {
+	struct clk_hw hw;
+	const char *res_name;
+	u8 div;
+	u32 res_addr;
+	u32 res_on_val;
+	u32 state;
+	u32 aggr_state;
+	u32 last_sent_aggr_state;
+	u32 valid_state_mask;
+	u32 unit;
+	struct device *dev;
+	struct clk_rpmh *peer;
+};
+
+struct clk_rpmh_desc {
+	struct clk_hw **clks;
+	size_t num_clks;
+};
+
+enum rockchip_pll_type {
+	pll_rk3036 = 0,
+	pll_rk3066 = 1,
+	pll_rk3328 = 2,
+	pll_rk3399 = 3,
+};
+
+struct rockchip_clk_provider {
+	void *reg_base;
+	struct clk_onecell_data clk_data;
+	struct device_node *cru_node;
+	struct regmap *grf;
+	spinlock_t lock;
+};
+
+struct rockchip_pll_rate_table {
+	long unsigned int rate;
+	union {
+		struct {
+			unsigned int nr;
+			unsigned int nf;
+			unsigned int no;
+			unsigned int nb;
+		};
+		struct {
+			unsigned int fbdiv;
+			unsigned int postdiv1;
+			unsigned int refdiv;
+			unsigned int postdiv2;
+			unsigned int dsmpd;
+			unsigned int frac;
+		};
+	};
+};
+
+struct rockchip_pll_clock {
+	unsigned int id;
+	const char *name;
+	const char * const *parent_names;
+	u8 num_parents;
+	long unsigned int flags;
+	int con_offset;
+	int mode_offset;
+	int mode_shift;
+	int lock_shift;
+	enum rockchip_pll_type type;
+	u8 pll_flags;
+	struct rockchip_pll_rate_table *rate_table;
+};
+
+struct rockchip_cpuclk_clksel {
+	int reg;
+	u32 val;
+};
+
+struct rockchip_cpuclk_rate_table {
+	long unsigned int prate;
+	struct rockchip_cpuclk_clksel divs[5];
+};
+
+struct rockchip_cpuclk_reg_data {
+	int core_reg[4];
+	u8 div_core_shift[4];
+	u32 div_core_mask[4];
+	int num_cores;
+	u8 mux_core_alt;
+	u8 mux_core_main;
+	u8 mux_core_shift;
+	u32 mux_core_mask;
+};
+
+enum rockchip_clk_branch_type {
+	branch_composite = 0,
+	branch_mux = 1,
+	branch_muxgrf = 2,
+	branch_divider = 3,
+	branch_fraction_divider = 4,
+	branch_gate = 5,
+	branch_mmc = 6,
+	branch_inverter = 7,
+	branch_factor = 8,
+	branch_ddrclk = 9,
+	branch_half_divider = 10,
+};
+
+struct rockchip_clk_branch {
+	unsigned int id;
+	enum rockchip_clk_branch_type branch_type;
+	const char *name;
+	const char * const *parent_names;
+	u8 num_parents;
+	long unsigned int flags;
+	int muxdiv_offset;
+	u8 mux_shift;
+	u8 mux_width;
+	u8 mux_flags;
+	int div_offset;
+	u8 div_shift;
+	u8 div_width;
+	u8 div_flags;
+	struct clk_div_table *div_table;
+	int gate_offset;
+	u8 gate_shift;
+	u8 gate_flags;
+	struct rockchip_clk_branch *child;
+};
+
+enum rk3368_plls {
+	apllb = 0,
+	aplll = 1,
+	dpll = 2,
+	cpll = 3,
+	gpll = 4,
+	npll = 5,
+};
+
+struct ccu_common {
+	void *base;
+	u16 reg;
+	u16 lock_reg;
+	u32 prediv;
+	long unsigned int features;
+	spinlock_t *lock;
+	struct clk_hw hw;
+};
+
+struct ccu_reset_map;
+
+struct sunxi_ccu_desc {
+	struct ccu_common **ccu_clks;
+	long unsigned int num_ccu_clks;
+	struct clk_hw_onecell_data *hw_clks;
+	struct ccu_reset_map *resets;
+	long unsigned int num_resets;
+};
+
+struct ccu_reset_map {
+	u16 reg;
+	u32 bit;
+};
+
+struct ccu_mux_fixed_prediv {
+	u8 index;
+	u16 div;
+};
+
+struct ccu_mux_var_prediv {
+	u8 index;
+	u8 shift;
+	u8 width;
+};
+
+struct ccu_mux_internal {
+	u8 shift;
+	u8 width;
+	const u8 *table;
+	const struct ccu_mux_fixed_prediv *fixed_predivs;
+	u8 n_predivs;
+	const struct ccu_mux_var_prediv *var_predivs;
+	u8 n_var_predivs;
+};
+
+struct ccu_div_internal {
+	u8 shift;
+	u8 width;
+	u32 max;
+	u32 offset;
+	u32 flags;
+	struct clk_div_table *table;
+};
+
+struct ccu_div {
+	u32 enable;
+	struct ccu_div_internal div;
+	struct ccu_mux_internal mux;
+	struct ccu_common common;
+	unsigned int fixed_post_div;
+};
+
+struct ccu_gate {
+	u32 enable;
+	struct ccu_common common;
+};
+
+struct ccu_mp {
+	u32 enable;
+	struct ccu_div_internal m;
+	struct ccu_div_internal p;
+	struct ccu_mux_internal mux;
+	unsigned int fixed_post_div;
+	struct ccu_common common;
+};
+
+struct rail_alignment {
+	int offset_uv;
+	int step_uv;
+};
+
+struct cvb_coefficients {
+	int c0;
+	int c1;
+	int c2;
+};
+
+struct cvb_table_freq_entry {
+	long unsigned int freq;
+	struct cvb_coefficients coefficients;
+};
+
+struct cvb_cpu_dfll_data {
+	u32 tune0_low;
+	u32 tune0_high;
+	u32 tune1;
+	unsigned int tune_high_min_millivolts;
+};
+
+struct cvb_table {
+	int speedo_id;
+	int process_id;
+	int min_millivolts;
+	int max_millivolts;
+	int speedo_scale;
+	int voltage_scale;
+	struct cvb_table_freq_entry entries[40];
+	struct cvb_cpu_dfll_data cpu_dfll_data;
+};
+
+struct tegra_dfll_soc_data {
+	struct device *dev;
+	long unsigned int max_freq;
+	const struct cvb_table *cvb;
+	struct rail_alignment alignment;
+	void (*init_clock_trimmers)();
+	void (*set_clock_trimmers_high)();
+	void (*set_clock_trimmers_low)();
+};
+
+enum dfll_ctrl_mode {
+	DFLL_UNINITIALIZED = 0,
+	DFLL_DISABLED = 1,
+	DFLL_OPEN_LOOP = 2,
+	DFLL_CLOSED_LOOP = 3,
+};
+
+enum dfll_tune_range {
+	DFLL_TUNE_UNINITIALIZED = 0,
+	DFLL_TUNE_LOW = 1,
+};
+
+enum tegra_dfll_pmu_if {
+	TEGRA_DFLL_PMU_I2C = 0,
+	TEGRA_DFLL_PMU_PWM = 1,
+};
+
+struct dfll_rate_req {
+	long unsigned int rate;
+	long unsigned int dvco_target_rate;
+	int lut_index;
+	u8 mult_bits;
+	u8 scale_bits;
+};
+
+struct tegra_dfll {
+	struct device *dev;
+	struct tegra_dfll_soc_data *soc;
+	void *base;
+	void *i2c_base;
+	void *i2c_controller_base;
+	void *lut_base;
+	struct regulator *vdd_reg;
+	struct clk *soc_clk;
+	struct clk *ref_clk;
+	struct clk *i2c_clk;
+	struct clk *dfll_clk;
+	struct reset_control *dfll_rst;
+	struct reset_control *dvco_rst;
+	long unsigned int ref_rate;
+	long unsigned int i2c_clk_rate;
+	long unsigned int dvco_rate_min;
+	enum dfll_ctrl_mode mode;
+	enum dfll_tune_range tune_range;
+	struct dentry *debugfs_dir;
+	struct clk_hw dfll_clk_hw;
+	const char *output_clock_name;
+	struct dfll_rate_req last_req;
+	long unsigned int last_unrounded_rate;
+	u32 droop_ctrl;
+	u32 sample_rate;
+	u32 force_mode;
+	u32 cf;
+	u32 ci;
+	u32 cg;
+	bool cg_scale;
+	u32 i2c_fs_rate;
+	u32 i2c_reg;
+	u32 i2c_slave_addr;
+	unsigned int lut[33];
+	long unsigned int lut_uv[33];
+	int lut_size;
+	u8 lut_bottom;
+	u8 lut_min;
+	u8 lut_max;
+	u8 lut_safe;
+	enum tegra_dfll_pmu_if pmu_if;
+	long unsigned int pwm_rate;
+	struct pinctrl *pwm_pin;
+	struct pinctrl_state *pwm_enable_state;
+	struct pinctrl_state *pwm_disable_state;
+	u32 reg_init_uV;
+};
+
+struct clock_topology {
+	u32 type;
+	u32 flag;
+	u32 type_flag;
+	u8 custom_type_flag;
+};
+
+struct zynqmp_pll {
+	struct clk_hw hw;
+	u32 clk_id;
+	bool set_pll_mode;
+};
+
+enum pll_mode {
+	PLL_MODE_INT = 0,
+	PLL_MODE_FRAC = 1,
+	PLL_MODE_ERROR = 2,
+};
+
+typedef s32 dma_cookie_t;
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+enum sum_check_bits {
+	SUM_CHECK_P = 0,
+	SUM_CHECK_Q = 1,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
+};
+
+typedef struct {
+	long unsigned int bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
+};
+
+struct dma_chan_percpu {
+	long unsigned int memcpy_count;
+	long unsigned int bytes_transferred;
+};
+
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
+};
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+struct dma_chan {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_slave_caps;
+
+struct dma_slave_config;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	short unsigned int max_xor;
+	short unsigned int max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan *);
+	int (*device_router_config)(struct dma_chan *);
+	void (*device_free_chan_resources)(struct dma_chan *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
+	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan *);
+	int (*device_resume)(struct dma_chan *);
+	int (*device_terminate_all)(struct dma_chan *);
+	void (*device_synchronize)(struct dma_chan *);
+	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_chan_dev {
+	struct dma_chan *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data {
+	u16 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+	struct dma_async_tx_descriptor *next;
+	struct dma_async_tx_descriptor *parent;
+	spinlock_t lock;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+struct tasklet_struct {
+	struct tasklet_struct *next;
+	long unsigned int state;
+	atomic_t count;
+	bool use_callback;
+	union {
+		void (*func)(long unsigned int);
+		void (*callback)(struct tasklet_struct *);
+	};
+	long unsigned int data;
+};
+
+struct dmaengine_desc_callback {
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+};
+
+struct virt_dma_desc {
+	struct dma_async_tx_descriptor tx;
+	struct dmaengine_result tx_result;
+	struct list_head node;
+};
+
+struct virt_dma_chan {
+	struct dma_chan chan;
+	struct tasklet_struct task;
+	void (*desc_free)(struct virt_dma_desc *);
+	spinlock_t lock;
+	struct list_head desc_allocated;
+	struct list_head desc_submitted;
+	struct list_head desc_issued;
+	struct list_head desc_completed;
+	struct list_head desc_terminated;
+	struct virt_dma_desc *cyclic;
+};
+
+enum {
+	TASKLET_STATE_SCHED = 0,
+	TASKLET_STATE_RUN = 1,
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct bam_desc_hw {
+	__le32 addr;
+	__le16 size;
+	__le16 flags;
+};
+
+struct bam_async_desc {
+	struct virt_dma_desc vd;
+	u32 num_desc;
+	u32 xfer_len;
+	u16 flags;
+	struct bam_desc_hw *curr_desc;
+	struct list_head desc_node;
+	enum dma_transfer_direction dir;
+	size_t length;
+	struct bam_desc_hw desc[0];
+};
+
+enum bam_reg {
+	BAM_CTRL = 0,
+	BAM_REVISION = 1,
+	BAM_NUM_PIPES = 2,
+	BAM_DESC_CNT_TRSHLD = 3,
+	BAM_IRQ_SRCS = 4,
+	BAM_IRQ_SRCS_MSK = 5,
+	BAM_IRQ_SRCS_UNMASKED = 6,
+	BAM_IRQ_STTS = 7,
+	BAM_IRQ_CLR = 8,
+	BAM_IRQ_EN = 9,
+	BAM_CNFG_BITS = 10,
+	BAM_IRQ_SRCS_EE = 11,
+	BAM_IRQ_SRCS_MSK_EE = 12,
+	BAM_P_CTRL = 13,
+	BAM_P_RST = 14,
+	BAM_P_HALT = 15,
+	BAM_P_IRQ_STTS = 16,
+	BAM_P_IRQ_CLR = 17,
+	BAM_P_IRQ_EN = 18,
+	BAM_P_EVNT_DEST_ADDR = 19,
+	BAM_P_EVNT_REG = 20,
+	BAM_P_SW_OFSTS = 21,
+	BAM_P_DATA_FIFO_ADDR = 22,
+	BAM_P_DESC_FIFO_ADDR = 23,
+	BAM_P_EVNT_GEN_TRSHLD = 24,
+	BAM_P_FIFO_SIZES = 25,
+};
+
+struct reg_offset_data {
+	u32 base_offset;
+	unsigned int pipe_mult;
+	unsigned int evnt_mult;
+	unsigned int ee_mult;
+};
+
+struct bam_device;
+
+struct bam_chan {
+	struct virt_dma_chan vc;
+	struct bam_device *bdev;
+	u32 id;
+	struct dma_slave_config slave;
+	struct bam_desc_hw *fifo_virt;
+	dma_addr_t fifo_phys;
+	short unsigned int head;
+	short unsigned int tail;
+	unsigned int initialized;
+	unsigned int paused;
+	unsigned int reconfigure;
+	struct list_head desc_list;
+	struct list_head node;
+};
+
+struct bam_device {
+	void *regs;
+	struct device *dev;
+	struct dma_device common;
+	struct bam_chan *channels;
+	u32 num_channels;
+	u32 num_ees;
+	u32 ee;
+	bool controlled_remotely;
+	bool powered_remotely;
+	u32 active_channels;
+	const struct reg_offset_data *layout;
+	struct clk *bamclk;
+	int irq;
+	struct tasklet_struct task;
+};
+
+struct bm_portal_config {
+	void *addr_virt_ce;
+	void *addr_virt_ci;
+	struct list_head list;
+	struct device *dev;
+	int cpu;
+	int irq;
+};
+
+struct bman_portal;
+
+struct arm_smccc_quirk {
+	int id;
+	union {
+		long unsigned int a6;
+	} state;
+};
+
+struct soc_device_attribute {
+	const char *machine;
+	const char *family;
+	const char *revision;
+	const char *serial_number;
+	const char *soc_id;
+	const void *data;
+	const struct attribute_group *custom_attr_group;
+};
+
+struct imx8_soc_data {
+	char *name;
+	u32 (*soc_revision)();
+};
+
+struct soc_device;
+
+enum gpd_status {
+	GENPD_STATE_ON = 0,
+	GENPD_STATE_OFF = 1,
+};
+
+struct dev_power_governor {
+	bool (*power_down_ok)(struct dev_pm_domain *);
+	bool (*suspend_ok)(struct device *);
+};
+
+struct gpd_dev_ops {
+	int (*start)(struct device *);
+	int (*stop)(struct device *);
+};
+
+struct genpd_governor_data {
+	s64 max_off_time_ns;
+	bool max_off_time_changed;
+	ktime_t next_wakeup;
+	bool cached_power_down_ok;
+	bool cached_power_down_state_idx;
+};
+
+struct genpd_power_state {
+	s64 power_off_latency_ns;
+	s64 power_on_latency_ns;
+	s64 residency_ns;
+	u64 usage;
+	u64 rejected;
+	struct fwnode_handle *fwnode;
+	u64 idle_time;
+	void *data;
+};
+
+struct opp_table;
+
+struct dev_pm_opp;
+
+struct genpd_lock_ops;
+
+struct generic_pm_domain {
+	struct device dev;
+	struct dev_pm_domain domain;
+	struct list_head gpd_list_node;
+	struct list_head parent_links;
+	struct list_head child_links;
+	struct list_head dev_list;
+	struct dev_power_governor *gov;
+	struct genpd_governor_data *gd;
+	struct work_struct power_off_work;
+	struct fwnode_handle *provider;
+	bool has_provider;
+	const char *name;
+	atomic_t sd_count;
+	enum gpd_status status;
+	unsigned int device_count;
+	unsigned int suspended_count;
+	unsigned int prepared_count;
+	unsigned int performance_state;
+	cpumask_var_t cpus;
+	int (*power_off)(struct generic_pm_domain *);
+	int (*power_on)(struct generic_pm_domain *);
+	struct raw_notifier_head power_notifiers;
+	struct opp_table *opp_table;
+	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
+	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
+	struct gpd_dev_ops dev_ops;
+	int (*attach_dev)(struct generic_pm_domain *, struct device *);
+	void (*detach_dev)(struct generic_pm_domain *, struct device *);
+	unsigned int flags;
+	struct genpd_power_state *states;
+	void (*free_states)(struct genpd_power_state *, unsigned int);
+	unsigned int state_count;
+	unsigned int state_idx;
+	u64 on_time;
+	u64 accounting_time;
+	const struct genpd_lock_ops *lock_ops;
+	union {
+		struct mutex mlock;
+		struct {
+			spinlock_t slock;
+			long unsigned int lock_flags;
+		};
+	};
+};
+
+struct genpd_lock_ops {
+	void (*lock)(struct generic_pm_domain *);
+	void (*lock_nested)(struct generic_pm_domain *, int);
+	int (*lock_interruptible)(struct generic_pm_domain *);
+	void (*unlock)(struct generic_pm_domain *);
+};
+
+typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
+
+struct genpd_onecell_data {
+	struct generic_pm_domain **domains;
+	unsigned int num_domains;
+	genpd_xlate_t xlate;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+struct meson_ee_pwrc_mem_domain {
+	unsigned int reg;
+	unsigned int mask;
+};
+
+struct meson_ee_pwrc_top_domain {
+	unsigned int sleep_reg;
+	unsigned int sleep_mask;
+	unsigned int iso_reg;
+	unsigned int iso_mask;
+};
+
+struct meson_ee_pwrc_domain;
+
+struct meson_ee_pwrc_domain_desc {
+	char *name;
+	unsigned int reset_names_count;
+	unsigned int clk_names_count;
+	struct meson_ee_pwrc_top_domain *top_pd;
+	unsigned int mem_pd_count;
+	struct meson_ee_pwrc_mem_domain *mem_pd;
+	bool (*is_powered_off)(struct meson_ee_pwrc_domain *);
+};
+
+struct meson_ee_pwrc;
+
+struct meson_ee_pwrc_domain {
+	struct generic_pm_domain base;
+	bool enabled;
+	struct meson_ee_pwrc *pwrc;
+	struct meson_ee_pwrc_domain_desc desc;
+	struct clk_bulk_data *clks;
+	int num_clks;
+	struct reset_control *rstc;
+	int num_rstc;
+};
+
+struct meson_ee_pwrc_domain_data {
+	unsigned int count;
+	struct meson_ee_pwrc_domain_desc *domains;
+};
+
+struct meson_ee_pwrc {
+	struct regmap *regmap_ao;
+	struct regmap *regmap_hhi;
+	struct meson_ee_pwrc_domain *domains;
+	struct genpd_onecell_data xlate;
+};
+
+enum pm_sleep_mode {
+	PM_SLEEP_MODE_STBY = 0,
+	PM_SLEEP_MODE_RET = 1,
+	PM_SLEEP_MODE_SPC = 2,
+	PM_SLEEP_MODE_PC = 3,
+	PM_SLEEP_MODE_NR = 4,
+};
+
+struct spm_reg_data {
+	const u16 *reg_offset;
+	u32 spm_cfg;
+	u32 spm_dly;
+	u32 pmic_dly;
+	u32 pmic_data[2];
+	u32 avs_ctl;
+	u32 avs_limit;
+	u8 seq[64];
+	u8 start_index[4];
+};
+
+struct spm_driver_data {
+	void *reg_base;
+	const struct spm_reg_data *reg_data;
+};
+
+enum spm_reg {
+	SPM_REG_CFG = 0,
+	SPM_REG_SPM_CTL = 1,
+	SPM_REG_DLY = 2,
+	SPM_REG_PMIC_DLY = 3,
+	SPM_REG_PMIC_DATA_0 = 4,
+	SPM_REG_PMIC_DATA_1 = 5,
+	SPM_REG_VCTL = 6,
+	SPM_REG_SEQ_ENTRY = 7,
+	SPM_REG_SPM_STS = 8,
+	SPM_REG_PMIC_STS = 9,
+	SPM_REG_AVS_CTL = 10,
+	SPM_REG_AVS_LIMIT = 11,
+	SPM_REG_NR = 12,
+};
+
+struct sunxi_sram_func {
+	char *func;
+	u8 val;
+	u32 reg_val;
+};
+
+struct sunxi_sram_data {
+	char *name;
+	u8 reg;
+	u8 offset;
+	u8 width;
+	struct sunxi_sram_func *func;
+	struct list_head list;
+};
+
+struct sunxi_sram_desc {
+	struct sunxi_sram_data data;
+	bool claimed;
+};
+
+struct sunxi_sramc_variant {
+	int num_emac_clocks;
+};
+
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
+};
+
+struct ti_sci_resource_desc {
+	u16 start;
+	u16 num;
+	u16 start_sec;
+	u16 num_sec;
+	long unsigned int *res_map;
+};
+
+struct ti_sci_resource {
+	u16 sets;
+	raw_spinlock_t lock;
+	struct ti_sci_resource_desc *desc;
+};
+
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct virtio_device;
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	void *priv;
+	bool reset;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+typedef __u16 __virtio16;
+
+typedef __u32 __virtio32;
+
+typedef __u64 __virtio64;
+
+struct vring_desc {
+	__virtio64 addr;
+	__virtio32 len;
+	__virtio16 flags;
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[0];
+};
+
+struct vring_used_elem {
+	__virtio32 id;
+	__virtio32 len;
+};
+
+typedef struct vring_used_elem vring_used_elem_t;
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	vring_used_elem_t ring[0];
+};
+
+typedef struct vring_desc vring_desc_t;
+
+typedef struct vring_avail vring_avail_t;
+
+typedef struct vring_used vring_used_t;
+
+struct vring {
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+};
+
+struct vring_packed_desc_event {
+	__le16 off_wrap;
+	__le16 flags;
+};
+
+struct vring_packed_desc {
+	__le64 addr;
+	__le32 len;
+	__le16 id;
+	__le16 flags;
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+enum xen_domain_type {
+	XEN_NATIVE = 0,
+	XEN_PV_DOMAIN = 1,
+	XEN_HVM_DOMAIN = 2,
+};
+
+struct vring_desc_state_split {
+	void *data;
+	struct vring_desc *indir_desc;
+};
+
+struct vring_desc_state_packed {
+	void *data;
+	struct vring_packed_desc *indir_desc;
+	u16 num;
+	u16 last;
+};
+
+struct vring_desc_extra {
+	dma_addr_t addr;
+	u32 len;
+	u16 flags;
+	u16 next;
+};
+
+struct vring_virtqueue_split {
+	struct vring vring;
+	u16 avail_flags_shadow;
+	u16 avail_idx_shadow;
+	struct vring_desc_state_split *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t queue_dma_addr;
+	size_t queue_size_in_bytes;
+	u32 vring_align;
+	bool may_reduce_num;
+};
+
+struct vring_virtqueue_packed {
+	struct {
+		unsigned int num;
+		struct vring_packed_desc *desc;
+		struct vring_packed_desc_event *driver;
+		struct vring_packed_desc_event *device;
+	} vring;
+	bool avail_wrap_counter;
+	u16 avail_used_flags;
+	u16 next_avail_idx;
+	u16 event_flags_shadow;
+	struct vring_desc_state_packed *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t ring_dma_addr;
+	dma_addr_t driver_event_dma_addr;
+	dma_addr_t device_event_dma_addr;
+	size_t ring_size_in_bytes;
+	size_t event_size_in_bytes;
+};
+
+struct vring_virtqueue {
+	struct virtqueue vq;
+	bool packed_ring;
+	bool use_dma_api;
+	bool weak_barriers;
+	bool broken;
+	bool indirect;
+	bool event;
+	unsigned int free_head;
+	unsigned int num_added;
+	u16 last_used_idx;
+	bool event_triggered;
+	union {
+		struct vring_virtqueue_split split;
+		struct vring_virtqueue_packed packed;
+	};
+	bool (*notify)(struct virtqueue *);
+	bool we_own_ring;
+};
+
+typedef int suspend_state_t;
+
+struct regulator_bulk_data {
+	const char *supply;
+	int init_load_uA;
+	struct regulator *consumer;
+	int ret;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator_dev;
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct linear_range {
+	unsigned int min;
+	unsigned int min_sel;
+	unsigned int max_sel;
+	unsigned int step;
+};
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	long unsigned int stamp;
+	unsigned int acquired;
+	short unsigned int wounded;
+	short unsigned int is_wait_die;
+};
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+};
+
+struct regulator_coupler;
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+};
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	long unsigned int notifs;
+	long unsigned int errors;
+	int possible_errs;
+};
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long int opaque;
+};
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, long unsigned int *);
+	int (*renable)(struct regulator_irq_data *);
+};
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+enum rpmh_regulator_type {
+	VRM = 0,
+	XOB = 1,
+};
+
+struct rpmh_vreg_hw_data {
+	enum rpmh_regulator_type regulator_type;
+	const struct regulator_ops *ops;
+	const struct linear_range voltage_range;
+	int n_voltages;
+	int hpm_min_load_uA;
+	const int *pmic_mode_map;
+	unsigned int (*of_map_mode)(unsigned int);
+};
+
+struct rpmh_vreg {
+	struct device *dev;
+	u32 addr;
+	struct regulator_desc rdesc;
+	const struct rpmh_vreg_hw_data *hw_data;
+	bool always_wait_for_ack;
+	int enabled;
+	bool bypassed;
+	int voltage_selector;
+	unsigned int mode;
+};
+
+struct rpmh_vreg_init_data {
+	const char *name;
+	const char *resource_name;
+	const char *supply_name;
+	const struct rpmh_vreg_hw_data *hw_data;
+};
+
+struct reset_controller_dev;
+
+struct reset_control_ops {
+	int (*reset)(struct reset_controller_dev *, long unsigned int);
+	int (*assert)(struct reset_controller_dev *, long unsigned int);
+	int (*deassert)(struct reset_controller_dev *, long unsigned int);
+	int (*status)(struct reset_controller_dev *, long unsigned int);
+};
+
+struct reset_controller_dev {
+	const struct reset_control_ops *ops;
+	struct module *owner;
+	struct list_head list;
+	struct list_head reset_control_head;
+	struct device *dev;
+	struct device_node *of_node;
+	int of_reset_n_cells;
+	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+	unsigned int nr_resets;
+};
+
+enum rpi_firmware_property_tag {
+	RPI_FIRMWARE_PROPERTY_END = 0,
+	RPI_FIRMWARE_GET_FIRMWARE_REVISION = 1,
+	RPI_FIRMWARE_SET_CURSOR_INFO = 32784,
+	RPI_FIRMWARE_SET_CURSOR_STATE = 32785,
+	RPI_FIRMWARE_GET_BOARD_MODEL = 65537,
+	RPI_FIRMWARE_GET_BOARD_REVISION = 65538,
+	RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 65539,
+	RPI_FIRMWARE_GET_BOARD_SERIAL = 65540,
+	RPI_FIRMWARE_GET_ARM_MEMORY = 65541,
+	RPI_FIRMWARE_GET_VC_MEMORY = 65542,
+	RPI_FIRMWARE_GET_CLOCKS = 65543,
+	RPI_FIRMWARE_GET_POWER_STATE = 131073,
+	RPI_FIRMWARE_GET_TIMING = 131074,
+	RPI_FIRMWARE_SET_POWER_STATE = 163841,
+	RPI_FIRMWARE_GET_CLOCK_STATE = 196609,
+	RPI_FIRMWARE_GET_CLOCK_RATE = 196610,
+	RPI_FIRMWARE_GET_VOLTAGE = 196611,
+	RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 196612,
+	RPI_FIRMWARE_GET_MAX_VOLTAGE = 196613,
+	RPI_FIRMWARE_GET_TEMPERATURE = 196614,
+	RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 196615,
+	RPI_FIRMWARE_GET_MIN_VOLTAGE = 196616,
+	RPI_FIRMWARE_GET_TURBO = 196617,
+	RPI_FIRMWARE_GET_MAX_TEMPERATURE = 196618,
+	RPI_FIRMWARE_GET_STC = 196619,
+	RPI_FIRMWARE_ALLOCATE_MEMORY = 196620,
+	RPI_FIRMWARE_LOCK_MEMORY = 196621,
+	RPI_FIRMWARE_UNLOCK_MEMORY = 196622,
+	RPI_FIRMWARE_RELEASE_MEMORY = 196623,
+	RPI_FIRMWARE_EXECUTE_CODE = 196624,
+	RPI_FIRMWARE_EXECUTE_QPU = 196625,
+	RPI_FIRMWARE_SET_ENABLE_QPU = 196626,
+	RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 196628,
+	RPI_FIRMWARE_GET_EDID_BLOCK = 196640,
+	RPI_FIRMWARE_GET_CUSTOMER_OTP = 196641,
+	RPI_FIRMWARE_GET_DOMAIN_STATE = 196656,
+	RPI_FIRMWARE_GET_THROTTLED = 196678,
+	RPI_FIRMWARE_GET_CLOCK_MEASURED = 196679,
+	RPI_FIRMWARE_NOTIFY_REBOOT = 196680,
+	RPI_FIRMWARE_SET_CLOCK_STATE = 229377,
+	RPI_FIRMWARE_SET_CLOCK_RATE = 229378,
+	RPI_FIRMWARE_SET_VOLTAGE = 229379,
+	RPI_FIRMWARE_SET_TURBO = 229385,
+	RPI_FIRMWARE_SET_CUSTOMER_OTP = 229409,
+	RPI_FIRMWARE_SET_DOMAIN_STATE = 229424,
+	RPI_FIRMWARE_GET_GPIO_STATE = 196673,
+	RPI_FIRMWARE_SET_GPIO_STATE = 229441,
+	RPI_FIRMWARE_SET_SDHOST_CLOCK = 229442,
+	RPI_FIRMWARE_GET_GPIO_CONFIG = 196675,
+	RPI_FIRMWARE_SET_GPIO_CONFIG = 229443,
+	RPI_FIRMWARE_GET_PERIPH_REG = 196677,
+	RPI_FIRMWARE_SET_PERIPH_REG = 229445,
+	RPI_FIRMWARE_GET_POE_HAT_VAL = 196681,
+	RPI_FIRMWARE_SET_POE_HAT_VAL = 196688,
+	RPI_FIRMWARE_NOTIFY_XHCI_RESET = 196696,
+	RPI_FIRMWARE_NOTIFY_DISPLAY_DONE = 196710,
+	RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 262145,
+	RPI_FIRMWARE_FRAMEBUFFER_BLANK = 262146,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 262147,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 262148,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 262149,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 262150,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 262151,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 262152,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 262153,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 262154,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 262155,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 262159,
+	RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 262160,
+	RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 294913,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 278531,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 278532,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 278533,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 278534,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 278535,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 278537,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 278538,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 278539,
+	RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 278542,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 294915,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 294916,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 294917,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 294918,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 294919,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 294921,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 294922,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 294923,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 294943,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 294944,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 294926,
+	RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 294927,
+	RPI_FIRMWARE_VCHIQ_INIT = 294928,
+	RPI_FIRMWARE_GET_COMMAND_LINE = 327681,
+	RPI_FIRMWARE_GET_DMA_CHANNELS = 393217,
+};
+
+struct rpi_firmware;
+
+struct rpi_reset {
+	struct reset_controller_dev rcdev;
+	struct rpi_firmware *fw;
+};
+
+struct vc {
+	struct vc_data *d;
+	struct work_struct SAK_work;
+};
+
+struct tiocl_selection {
+	short unsigned int xs;
+	short unsigned int ys;
+	short unsigned int xe;
+	short unsigned int ye;
+	short unsigned int sel_mode;
+};
+
+struct vc_selection {
+	struct mutex lock;
+	struct vc_data *cons;
+	char *buffer;
+	unsigned int buf_len;
+	volatile int start;
+	int end;
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[16];
+	unsigned int baud;
+};
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct uart_8250_port;
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+	void (*setup_timer)(struct uart_8250_port *);
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	short unsigned int bugs;
+	bool fifo_bug;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	int (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, int);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan *rxchan;
+	struct dma_chan *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+struct serial_private;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct timedia_struct {
+	int num;
+	const short unsigned int *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+};
+
+struct amba_pl011_data {
+	bool (*dma_filter)(struct dma_chan *, void *);
+	void *dma_rx_param;
+	void *dma_tx_param;
+	bool dma_rx_poll_enable;
+	unsigned int dma_rx_poll_rate;
+	unsigned int dma_rx_poll_timeout;
+	void (*init)();
+	void (*exit)();
+};
+
+enum {
+	REG_DR = 0,
+	REG_ST_DMAWM = 1,
+	REG_ST_TIMEOUT = 2,
+	REG_FR = 3,
+	REG_LCRH_RX = 4,
+	REG_LCRH_TX = 5,
+	REG_IBRD = 6,
+	REG_FBRD = 7,
+	REG_CR = 8,
+	REG_IFLS = 9,
+	REG_IMSC = 10,
+	REG_RIS = 11,
+	REG_MIS = 12,
+	REG_ICR = 13,
+	REG_DMACR = 14,
+	REG_ST_XFCR = 15,
+	REG_ST_XON1 = 16,
+	REG_ST_XON2 = 17,
+	REG_ST_XOFF1 = 18,
+	REG_ST_XOFF2 = 19,
+	REG_ST_ITCR = 20,
+	REG_ST_ITIP = 21,
+	REG_ST_ABCR = 22,
+	REG_ST_ABIMSC = 23,
+	REG_ARRAY_SIZE = 24,
+};
+
+struct vendor_data {
+	const u16 *reg_offset;
+	unsigned int ifls;
+	unsigned int fr_busy;
+	unsigned int fr_dsr;
+	unsigned int fr_cts;
+	unsigned int fr_ri;
+	unsigned int inv_fr;
+	bool access_32b;
+	bool oversampling;
+	bool dma_threshold;
+	bool cts_event_workaround;
+	bool always_enabled;
+	bool fixed_options;
+	unsigned int (*get_fifosize)(struct amba_device *);
+};
+
+struct pl011_sgbuf {
+	struct scatterlist sg;
+	char *buf;
+};
+
+struct pl011_dmarx_data {
+	struct dma_chan *chan;
+	struct completion complete;
+	bool use_buf_b;
+	struct pl011_sgbuf sgbuf_a;
+	struct pl011_sgbuf sgbuf_b;
+	dma_cookie_t cookie;
+	bool running;
+	struct timer_list timer;
+	unsigned int last_residue;
+	long unsigned int last_jiffies;
+	bool auto_poll_rate;
+	unsigned int poll_rate;
+	unsigned int poll_timeout;
+};
+
+struct pl011_dmatx_data {
+	struct dma_chan *chan;
+	struct scatterlist sg;
+	char *buf;
+	bool queued;
+};
+
+struct uart_amba_port {
+	struct uart_port port;
+	const u16 *reg_offset;
+	struct clk *clk;
+	const struct vendor_data *vendor;
+	unsigned int dmacr;
+	unsigned int im;
+	unsigned int old_status;
+	unsigned int fifosize;
+	unsigned int fixed_baud;
+	char type[12];
+	bool rs485_tx_started;
+	unsigned int rs485_tx_drain_interval;
+	bool using_tx_dma;
+	bool using_rx_dma;
+	struct pl011_dmarx_data dmarx;
+	struct pl011_dmatx_data dmatx;
+	bool dma_probed;
+};
+
+enum mctrl_gpio_idx {
+	UART_GPIO_CTS = 0,
+	UART_GPIO_DSR = 1,
+	UART_GPIO_DCD = 2,
+	UART_GPIO_RNG = 3,
+	UART_GPIO_RI = 3,
+	UART_GPIO_RTS = 4,
+	UART_GPIO_DTR = 5,
+	UART_GPIO_MAX = 6,
+};
+
+struct mctrl_gpios {
+	struct uart_port *port;
+	struct gpio_desc *gpio[6];
+	int irq[6];
+	unsigned int mctrl_prev;
+	bool mctrl_on;
+};
+
+enum TPM_OPS_FLAGS {
+	TPM_OPS_AUTO_STARTUP = 1,
+};
+
+enum tpm2_timeouts {
+	TPM2_TIMEOUT_A = 750,
+	TPM2_TIMEOUT_B = 2000,
+	TPM2_TIMEOUT_C = 200,
+	TPM2_TIMEOUT_D = 30,
+	TPM2_DURATION_SHORT = 20,
+	TPM2_DURATION_MEDIUM = 750,
+	TPM2_DURATION_LONG = 2000,
+	TPM2_DURATION_LONG_LONG = 300000,
+	TPM2_DURATION_DEFAULT = 120000,
+};
+
+enum tpm2_return_codes {
+	TPM2_RC_SUCCESS = 0,
+	TPM2_RC_HASH = 131,
+	TPM2_RC_HANDLE = 139,
+	TPM2_RC_INITIALIZE = 256,
+	TPM2_RC_FAILURE = 257,
+	TPM2_RC_DISABLED = 288,
+	TPM2_RC_UPGRADE = 301,
+	TPM2_RC_COMMAND_CODE = 323,
+	TPM2_RC_TESTING = 2314,
+	TPM2_RC_REFERENCE_H0 = 2320,
+	TPM2_RC_RETRY = 2338,
+};
+
+enum tpm2_command_codes {
+	TPM2_CC_FIRST = 287,
+	TPM2_CC_HIERARCHY_CONTROL = 289,
+	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
+	TPM2_CC_CREATE_PRIMARY = 305,
+	TPM2_CC_SEQUENCE_COMPLETE = 318,
+	TPM2_CC_SELF_TEST = 323,
+	TPM2_CC_STARTUP = 324,
+	TPM2_CC_SHUTDOWN = 325,
+	TPM2_CC_NV_READ = 334,
+	TPM2_CC_CREATE = 339,
+	TPM2_CC_LOAD = 343,
+	TPM2_CC_SEQUENCE_UPDATE = 348,
+	TPM2_CC_UNSEAL = 350,
+	TPM2_CC_CONTEXT_LOAD = 353,
+	TPM2_CC_CONTEXT_SAVE = 354,
+	TPM2_CC_FLUSH_CONTEXT = 357,
+	TPM2_CC_VERIFY_SIGNATURE = 375,
+	TPM2_CC_GET_CAPABILITY = 378,
+	TPM2_CC_GET_RANDOM = 379,
+	TPM2_CC_PCR_READ = 382,
+	TPM2_CC_PCR_EXTEND = 386,
+	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
+	TPM2_CC_HASH_SEQUENCE_START = 390,
+	TPM2_CC_CREATE_LOADED = 401,
+	TPM2_CC_LAST = 403,
+};
+
+enum tpm2_startup_types {
+	TPM2_SU_CLEAR = 0,
+	TPM2_SU_STATE = 1,
+};
+
+enum tpm_chip_flags {
+	TPM_CHIP_FLAG_TPM2 = 2,
+	TPM_CHIP_FLAG_IRQ = 4,
+	TPM_CHIP_FLAG_VIRTUAL = 8,
+	TPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,
+	TPM_CHIP_FLAG_ALWAYS_POWERED = 32,
+	TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,
+	TPM_CHIP_FLAG_FIRMWARE_UPGRADE = 128,
+};
+
+struct tpm_header {
+	__be16 tag;
+	__be32 length;
+	union {
+		__be32 ordinal;
+		__be32 return_code;
+	};
+} __attribute__((packed));
+
+struct tpm_buf {
+	unsigned int flags;
+	u8 *data;
+};
+
+enum tpm_timeout {
+	TPM_TIMEOUT = 5,
+	TPM_TIMEOUT_RETRY = 100,
+	TPM_TIMEOUT_RANGE_US = 300,
+	TPM_TIMEOUT_POLL = 1,
+	TPM_TIMEOUT_USECS_MIN = 100,
+	TPM_TIMEOUT_USECS_MAX = 500,
+};
+
+struct acpi_iort_node {
+	u8 type;
+	u16 length;
+	u8 revision;
+	u32 identifier;
+	u32 mapping_count;
+	u32 mapping_offset;
+	char node_data[1];
+} __attribute__((packed));
+
+struct acpi_iort_smmu {
+	u64 base_address;
+	u64 span;
+	u32 model;
+	u32 flags;
+	u32 global_interrupt_offset;
+	u32 context_interrupt_count;
+	u32 context_interrupt_offset;
+	u32 pmu_interrupt_count;
+	u32 pmu_interrupt_offset;
+	u64 interrupts[1];
+} __attribute__((packed));
+
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
+};
+
+struct iommu_iort_rmr_data {
+	struct iommu_resv_region rr;
+	const u32 *sids;
+	u32 num_sids;
+};
+
+enum io_pgtable_fmt {
+	ARM_32_LPAE_S1 = 0,
+	ARM_32_LPAE_S2 = 1,
+	ARM_64_LPAE_S1 = 2,
+	ARM_64_LPAE_S2 = 3,
+	ARM_V7S = 4,
+	ARM_MALI_LPAE = 5,
+	AMD_IOMMU_V1 = 6,
+	APPLE_DART = 7,
+	IO_PGTABLE_NUM_FMTS = 8,
+};
+
+struct iommu_flush_ops {
+	void (*tlb_flush_all)(void *);
+	void (*tlb_flush_walk)(long unsigned int, size_t, size_t, void *);
+	void (*tlb_add_page)(struct iommu_iotlb_gather *, long unsigned int, size_t, void *);
+};
+
+struct io_pgtable_cfg {
+	long unsigned int quirks;
+	long unsigned int pgsize_bitmap;
+	unsigned int ias;
+	unsigned int oas;
+	bool coherent_walk;
+	const struct iommu_flush_ops *tlb;
+	struct device *iommu_dev;
+	union {
+		struct {
+			u64 ttbr;
+			struct {
+				u32 ips: 3;
+				u32 tg: 2;
+				u32 sh: 2;
+				u32 orgn: 2;
+				u32 irgn: 2;
+				u32 tsz: 6;
+			} tcr;
+			u64 mair;
+		} arm_lpae_s1_cfg;
+		struct {
+			u64 vttbr;
+			struct {
+				u32 ps: 3;
+				u32 tg: 2;
+				u32 sh: 2;
+				u32 orgn: 2;
+				u32 irgn: 2;
+				u32 sl: 2;
+				u32 tsz: 6;
+			} vtcr;
+		} arm_lpae_s2_cfg;
+		struct {
+			u32 ttbr;
+			u32 tcr;
+			u32 nmrr;
+			u32 prrr;
+		} arm_v7s_cfg;
+		struct {
+			u64 transtab;
+			u64 memattr;
+		} arm_mali_lpae_cfg;
+		struct {
+			u64 ttbr[4];
+			u32 n_ttbrs;
+		} apple_dart_cfg;
+	};
+};
+
+struct io_pgtable_ops {
+	int (*map)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct io_pgtable_ops *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct io_pgtable_ops *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *, long unsigned int);
+};
+
+enum arm_smmu_s2cr_privcfg {
+	S2CR_PRIVCFG_DEFAULT = 0,
+	S2CR_PRIVCFG_DIPAN = 1,
+	S2CR_PRIVCFG_UNPRIV = 2,
+	S2CR_PRIVCFG_PRIV = 3,
+};
+
+enum arm_smmu_s2cr_type {
+	S2CR_TYPE_TRANS = 0,
+	S2CR_TYPE_BYPASS = 1,
+	S2CR_TYPE_FAULT = 2,
+};
+
+enum arm_smmu_cbar_type {
+	CBAR_TYPE_S2_TRANS = 0,
+	CBAR_TYPE_S1_TRANS_S2_BYPASS = 1,
+	CBAR_TYPE_S1_TRANS_S2_FAULT = 2,
+	CBAR_TYPE_S1_TRANS_S2_TRANS = 3,
+};
+
+enum arm_smmu_arch_version {
+	ARM_SMMU_V1 = 0,
+	ARM_SMMU_V1_64K = 1,
+	ARM_SMMU_V2 = 2,
+};
+
+enum arm_smmu_implementation {
+	GENERIC_SMMU = 0,
+	ARM_MMU500 = 1,
+	CAVIUM_SMMUV2 = 2,
+	QCOM_SMMUV2 = 3,
+};
+
+struct arm_smmu_s2cr {
+	struct iommu_group *group;
+	int count;
+	enum arm_smmu_s2cr_type type;
+	enum arm_smmu_s2cr_privcfg privcfg;
+	u8 cbndx;
+};
+
+struct arm_smmu_smr {
+	u16 mask;
+	u16 id;
+	bool valid;
+	bool pinned;
+};
+
+struct arm_smmu_impl;
+
+struct arm_smmu_cb;
+
+struct arm_smmu_device {
+	struct device *dev;
+	void *base;
+	phys_addr_t ioaddr;
+	unsigned int numpage;
+	unsigned int pgshift;
+	u32 features;
+	enum arm_smmu_arch_version version;
+	enum arm_smmu_implementation model;
+	const struct arm_smmu_impl *impl;
+	u32 num_context_banks;
+	u32 num_s2_context_banks;
+	long unsigned int context_map[2];
+	struct arm_smmu_cb *cbs;
+	atomic_t irptndx;
+	u32 num_mapping_groups;
+	u16 streamid_mask;
+	u16 smr_mask_mask;
+	struct arm_smmu_smr *smrs;
+	struct arm_smmu_s2cr *s2crs;
+	struct mutex stream_map_mutex;
+	long unsigned int va_size;
+	long unsigned int ipa_size;
+	long unsigned int pa_size;
+	long unsigned int pgsize_bitmap;
+	int num_context_irqs;
+	int num_clks;
+	unsigned int *irqs;
+	struct clk_bulk_data *clks;
+	spinlock_t global_sync_lock;
+	struct iommu_device iommu;
+};
+
+struct arm_smmu_domain;
+
+struct arm_smmu_impl {
+	u32 (*read_reg)(struct arm_smmu_device *, int, int);
+	void (*write_reg)(struct arm_smmu_device *, int, int, u32);
+	u64 (*read_reg64)(struct arm_smmu_device *, int, int);
+	void (*write_reg64)(struct arm_smmu_device *, int, int, u64);
+	int (*cfg_probe)(struct arm_smmu_device *);
+	int (*reset)(struct arm_smmu_device *);
+	int (*init_context)(struct arm_smmu_domain *, struct io_pgtable_cfg *, struct device *);
+	void (*tlb_sync)(struct arm_smmu_device *, int, int, int);
+	int (*def_domain_type)(struct device *);
+	irqreturn_t (*global_fault)(int, void *);
+	irqreturn_t (*context_fault)(int, void *);
+	int (*alloc_context_bank)(struct arm_smmu_domain *, struct arm_smmu_device *, struct device *, int);
+	void (*write_s2cr)(struct arm_smmu_device *, int);
+	void (*write_sctlr)(struct arm_smmu_device *, int, u32);
+	void (*probe_finalize)(struct arm_smmu_device *, struct device *);
+};
+
+struct arm_smmu_cfg;
+
+struct arm_smmu_cb {
+	u64 ttbr[2];
+	u32 tcr[2];
+	u32 mair[2];
+	struct arm_smmu_cfg *cfg;
+};
+
+enum arm_smmu_context_fmt {
+	ARM_SMMU_CTX_FMT_NONE = 0,
+	ARM_SMMU_CTX_FMT_AARCH64 = 1,
+	ARM_SMMU_CTX_FMT_AARCH32_L = 2,
+	ARM_SMMU_CTX_FMT_AARCH32_S = 3,
+};
+
+struct arm_smmu_cfg {
+	u8 cbndx;
+	u8 irptndx;
+	union {
+		u16 asid;
+		u16 vmid;
+	};
+	enum arm_smmu_cbar_type cbar;
+	enum arm_smmu_context_fmt fmt;
+	bool flush_walk_prefer_tlbiasid;
+};
+
+enum arm_smmu_domain_stage {
+	ARM_SMMU_DOMAIN_S1 = 0,
+	ARM_SMMU_DOMAIN_S2 = 1,
+	ARM_SMMU_DOMAIN_NESTED = 2,
+	ARM_SMMU_DOMAIN_BYPASS = 3,
+};
+
+struct arm_smmu_domain {
+	struct arm_smmu_device *smmu;
+	struct io_pgtable_ops *pgtbl_ops;
+	long unsigned int pgtbl_quirks;
+	const struct iommu_flush_ops *flush_ops;
+	struct arm_smmu_cfg cfg;
+	enum arm_smmu_domain_stage stage;
+	struct mutex init_mutex;
+	spinlock_t cb_lock;
+	struct iommu_domain domain;
+};
+
+struct arm_smmu_master_cfg {
+	struct arm_smmu_device *smmu;
+	s16 smendx[0];
+};
+
+struct arm_smmu_match_data {
+	enum arm_smmu_arch_version version;
+	enum arm_smmu_implementation model;
+};
+
+typedef unsigned int ioasid_t;
+
+typedef ioasid_t (*ioasid_alloc_fn_t)(ioasid_t, ioasid_t, void *);
+
+typedef void (*ioasid_free_fn_t)(ioasid_t, void *);
+
+struct ioasid_set {
+	int dummy;
+};
+
+struct ioasid_allocator_ops {
+	ioasid_alloc_fn_t alloc;
+	ioasid_free_fn_t free;
+	struct list_head list;
+	void *pdata;
+};
+
+struct ioasid_data {
+	ioasid_t id;
+	struct ioasid_set *set;
+	void *private;
+	struct callback_head rcu;
+};
+
+struct ioasid_allocator_data {
+	struct ioasid_allocator_ops *ops;
+	struct list_head list;
+	struct list_head slist;
+	long unsigned int flags;
+	struct xarray xa;
+	struct callback_head rcu;
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+typedef unsigned int drm_magic_t;
+
+struct drm_prime_file_private {
+	struct mutex lock;
+	struct rb_root dmabufs;
+	struct rb_root handles;
+};
+
+struct drm_master;
+
+struct drm_minor;
+
+struct drm_file {
+	bool authenticated;
+	bool stereo_allowed;
+	bool universal_planes;
+	bool atomic;
+	bool aspect_ratio_allowed;
+	bool writeback_connectors;
+	bool was_master;
+	bool is_master;
+	struct drm_master *master;
+	spinlock_t master_lookup_lock;
+	struct pid *pid;
+	drm_magic_t magic;
+	struct list_head lhead;
+	struct drm_minor *minor;
+	struct idr object_idr;
+	spinlock_t table_lock;
+	struct idr syncobj_idr;
+	spinlock_t syncobj_table_lock;
+	struct file *filp;
+	void *driver_priv;
+	struct list_head fbs;
+	struct mutex fbs_lock;
+	struct list_head blobs;
+	wait_queue_head_t event_wait;
+	struct list_head pending_event_list;
+	struct list_head event_list;
+	int event_space;
+	struct mutex event_read_lock;
+	struct drm_prime_file_private prime;
+};
+
+struct drm_device;
+
+struct drm_master {
+	struct kref refcount;
+	struct drm_device *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+};
+
+struct drm_modeset_lock {
+	struct ww_mutex mutex;
+	struct list_head head;
+};
+
+struct drm_modeset_acquire_ctx;
+
+struct drm_mode_config_funcs;
+
+struct drm_property;
+
+struct drm_atomic_state;
+
+struct drm_mode_config_helper_funcs;
+
+struct drm_mode_config {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs *funcs;
+	resource_size_t fb_base;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool prefer_shadow_fbdev;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_vram_mm;
+
+enum switch_power_state {
+	DRM_SWITCH_POWER_ON = 0,
+	DRM_SWITCH_POWER_OFF = 1,
+	DRM_SWITCH_POWER_CHANGING = 2,
+	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
+};
+
+struct drm_driver;
+
+struct drm_vblank_crtc;
+
+struct drm_vma_offset_manager;
+
+struct drm_fb_helper;
+
+struct drm_device {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	bool registered;
+	struct drm_master *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+};
+
+struct drm_auth {
+	drm_magic_t magic;
+};
+
+struct drm_mode_fb_cmd2 {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pixel_format;
+	__u32 flags;
+	__u32 handles[4];
+	__u32 pitches[4];
+	__u32 offsets[4];
+	__u64 modifier[4];
+};
+
+struct drm_mode_create_dumb {
+	__u32 height;
+	__u32 width;
+	__u32 bpp;
+	__u32 flags;
+	__u32 handle;
+	__u32 pitch;
+	__u64 size;
+};
+
+struct drm_modeset_acquire_ctx {
+	struct ww_acquire_ctx ww_ctx;
+	struct drm_modeset_lock *contended;
+	depot_stack_handle_t stack_depot;
+	struct list_head locked;
+	bool trylock_only;
+	bool interruptible;
+};
+
+enum drm_mode_status {
+	MODE_OK = 0,
+	MODE_HSYNC = 1,
+	MODE_VSYNC = 2,
+	MODE_H_ILLEGAL = 3,
+	MODE_V_ILLEGAL = 4,
+	MODE_BAD_WIDTH = 5,
+	MODE_NOMODE = 6,
+	MODE_NO_INTERLACE = 7,
+	MODE_NO_DBLESCAN = 8,
+	MODE_NO_VSCAN = 9,
+	MODE_MEM = 10,
+	MODE_VIRTUAL_X = 11,
+	MODE_VIRTUAL_Y = 12,
+	MODE_MEM_VIRT = 13,
+	MODE_NOCLOCK = 14,
+	MODE_CLOCK_HIGH = 15,
+	MODE_CLOCK_LOW = 16,
+	MODE_CLOCK_RANGE = 17,
+	MODE_BAD_HVALUE = 18,
+	MODE_BAD_VVALUE = 19,
+	MODE_BAD_VSCAN = 20,
+	MODE_HSYNC_NARROW = 21,
+	MODE_HSYNC_WIDE = 22,
+	MODE_HBLANK_NARROW = 23,
+	MODE_HBLANK_WIDE = 24,
+	MODE_VSYNC_NARROW = 25,
+	MODE_VSYNC_WIDE = 26,
+	MODE_VBLANK_NARROW = 27,
+	MODE_VBLANK_WIDE = 28,
+	MODE_PANEL = 29,
+	MODE_INTERLACE_WIDTH = 30,
+	MODE_ONE_WIDTH = 31,
+	MODE_ONE_HEIGHT = 32,
+	MODE_ONE_SIZE = 33,
+	MODE_NO_REDUCED = 34,
+	MODE_NO_STEREO = 35,
+	MODE_NO_420 = 36,
+	MODE_STALE = 4294967293,
+	MODE_BAD = 4294967294,
+	MODE_ERROR = 4294967295,
+};
+
+struct drm_framebuffer;
+
+struct drm_format_info;
+
+struct drm_display_mode;
+
+struct drm_mode_config_funcs {
+	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device *);
+	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_format_info {
+	u32 format;
+	u8 depth;
+	u8 num_planes;
+	union {
+		u8 cpp[4];
+		u8 char_per_block[4];
+	};
+	u8 block_w[4];
+	u8 block_h[4];
+	u8 hsub;
+	u8 vsub;
+	bool has_alpha;
+	bool is_yuv;
+};
+
+enum hdmi_picture_aspect {
+	HDMI_PICTURE_ASPECT_NONE = 0,
+	HDMI_PICTURE_ASPECT_4_3 = 1,
+	HDMI_PICTURE_ASPECT_16_9 = 2,
+	HDMI_PICTURE_ASPECT_64_27 = 3,
+	HDMI_PICTURE_ASPECT_256_135 = 4,
+	HDMI_PICTURE_ASPECT_RESERVED = 5,
+};
+
+struct drm_display_mode {
+	int clock;
+	u16 hdisplay;
+	u16 hsync_start;
+	u16 hsync_end;
+	u16 htotal;
+	u16 hskew;
+	u16 vdisplay;
+	u16 vsync_start;
+	u16 vsync_end;
+	u16 vtotal;
+	u16 vscan;
+	u32 flags;
+	int crtc_clock;
+	u16 crtc_hdisplay;
+	u16 crtc_hblank_start;
+	u16 crtc_hblank_end;
+	u16 crtc_hsync_start;
+	u16 crtc_hsync_end;
+	u16 crtc_htotal;
+	u16 crtc_hskew;
+	u16 crtc_vdisplay;
+	u16 crtc_vblank_start;
+	u16 crtc_vblank_end;
+	u16 crtc_vsync_start;
+	u16 crtc_vsync_end;
+	u16 crtc_vtotal;
+	u16 width_mm;
+	u16 height_mm;
+	u8 type;
+	bool expose_to_userspace;
+	struct list_head head;
+	char name[32];
+	enum drm_mode_status status;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+};
+
+struct drm_mode_config_helper_funcs {
+	void (*atomic_commit_tail)(struct drm_atomic_state *);
+	int (*atomic_commit_setup)(struct drm_atomic_state *);
+};
+
+struct drm_gem_object;
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct drm_ioctl_desc;
+
+struct drm_driver {
+	int (*load)(struct drm_device *, long unsigned int);
+	int (*open)(struct drm_device *, struct drm_file *);
+	void (*postclose)(struct drm_device *, struct drm_file *);
+	void (*lastclose)(struct drm_device *);
+	void (*unload)(struct drm_device *);
+	void (*release)(struct drm_device *);
+	void (*master_set)(struct drm_device *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
+	int (*gem_prime_mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
+	int (*dumb_destroy)(struct drm_file *, struct drm_device *, uint32_t);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+};
+
+struct drm_minor {
+	int index;
+	int type;
+	struct device *kdev;
+	struct drm_device *dev;
+	struct dentry *debugfs_root;
+	struct list_head debugfs_list;
+	struct mutex debugfs_lock;
+};
+
+struct drm_vblank_crtc {
+	struct drm_device *dev;
+	wait_queue_head_t queue;
+	struct timer_list disable_timer;
+	seqlock_t seqlock;
+	atomic64_t count;
+	ktime_t time;
+	atomic_t refcount;
+	u32 last;
+	u32 max_vblank_count;
+	unsigned int inmodeset;
+	unsigned int pipe;
+	int framedur_ns;
+	int linedur_ns;
+	struct drm_display_mode hwmode;
+	bool enabled;
+	struct kthread_worker *worker;
+	struct list_head pending_work;
+	wait_queue_head_t work_wait_queue;
+};
+
+enum drm_driver_feature {
+	DRIVER_GEM = 1,
+	DRIVER_MODESET = 2,
+	DRIVER_RENDER = 8,
+	DRIVER_ATOMIC = 16,
+	DRIVER_SYNCOBJ = 32,
+	DRIVER_SYNCOBJ_TIMELINE = 64,
+	DRIVER_USE_AGP = 33554432,
+	DRIVER_LEGACY = 67108864,
+	DRIVER_PCI_DMA = 134217728,
+	DRIVER_SG = 268435456,
+	DRIVER_HAVE_DMA = 536870912,
+	DRIVER_HAVE_IRQ = 1073741824,
+	DRIVER_KMS_LEGACY_CONTEXT = 2147483648,
+};
+
+enum drm_ioctl_flags {
+	DRM_AUTH = 1,
+	DRM_MASTER = 2,
+	DRM_ROOT_ONLY = 4,
+	DRM_UNLOCKED = 16,
+	DRM_RENDER_ALLOW = 32,
+};
+
+typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
+
+struct drm_ioctl_desc {
+	unsigned int cmd;
+	enum drm_ioctl_flags flags;
+	drm_ioctl_t *func;
+	const char *name;
+};
+
+enum drm_debug_category {
+	DRM_UT_CORE = 1,
+	DRM_UT_DRIVER = 2,
+	DRM_UT_KMS = 4,
+	DRM_UT_PRIME = 8,
+	DRM_UT_ATOMIC = 16,
+	DRM_UT_VBL = 32,
+	DRM_UT_STATE = 64,
+	DRM_UT_LEASE = 128,
+	DRM_UT_DP = 256,
+	DRM_UT_DRMRES = 512,
+};
+
+enum hdmi_infoframe_type {
+	HDMI_INFOFRAME_TYPE_VENDOR = 129,
+	HDMI_INFOFRAME_TYPE_AVI = 130,
+	HDMI_INFOFRAME_TYPE_SPD = 131,
+	HDMI_INFOFRAME_TYPE_AUDIO = 132,
+	HDMI_INFOFRAME_TYPE_DRM = 135,
+};
+
+enum hdmi_colorspace {
+	HDMI_COLORSPACE_RGB = 0,
+	HDMI_COLORSPACE_YUV422 = 1,
+	HDMI_COLORSPACE_YUV444 = 2,
+	HDMI_COLORSPACE_YUV420 = 3,
+	HDMI_COLORSPACE_RESERVED4 = 4,
+	HDMI_COLORSPACE_RESERVED5 = 5,
+	HDMI_COLORSPACE_RESERVED6 = 6,
+	HDMI_COLORSPACE_IDO_DEFINED = 7,
+};
+
+enum hdmi_scan_mode {
+	HDMI_SCAN_MODE_NONE = 0,
+	HDMI_SCAN_MODE_OVERSCAN = 1,
+	HDMI_SCAN_MODE_UNDERSCAN = 2,
+	HDMI_SCAN_MODE_RESERVED = 3,
+};
+
+enum hdmi_colorimetry {
+	HDMI_COLORIMETRY_NONE = 0,
+	HDMI_COLORIMETRY_ITU_601 = 1,
+	HDMI_COLORIMETRY_ITU_709 = 2,
+	HDMI_COLORIMETRY_EXTENDED = 3,
+};
+
+enum hdmi_active_aspect {
+	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
+	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
+	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
+	HDMI_ACTIVE_ASPECT_PICTURE = 8,
+	HDMI_ACTIVE_ASPECT_4_3 = 9,
+	HDMI_ACTIVE_ASPECT_16_9 = 10,
+	HDMI_ACTIVE_ASPECT_14_9 = 11,
+	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
+	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
+	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
+};
+
+enum hdmi_extended_colorimetry {
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
+	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
+	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
+	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
+	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
+	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
+	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
+};
+
+enum hdmi_quantization_range {
+	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
+	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
+	HDMI_QUANTIZATION_RANGE_FULL = 2,
+	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
+};
+
+enum hdmi_nups {
+	HDMI_NUPS_UNKNOWN = 0,
+	HDMI_NUPS_HORIZONTAL = 1,
+	HDMI_NUPS_VERTICAL = 2,
+	HDMI_NUPS_BOTH = 3,
+};
+
+enum hdmi_ycc_quantization_range {
+	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
+	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
+};
+
+enum hdmi_content_type {
+	HDMI_CONTENT_TYPE_GRAPHICS = 0,
+	HDMI_CONTENT_TYPE_PHOTO = 1,
+	HDMI_CONTENT_TYPE_CINEMA = 2,
+	HDMI_CONTENT_TYPE_GAME = 3,
+};
+
+enum hdmi_metadata_type {
+	HDMI_STATIC_METADATA_TYPE1 = 0,
+};
+
+enum hdmi_eotf {
+	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
+	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
+	HDMI_EOTF_SMPTE_ST2084 = 2,
+	HDMI_EOTF_BT_2100_HLG = 3,
+};
+
+struct hdmi_avi_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_colorspace colorspace;
+	enum hdmi_scan_mode scan_mode;
+	enum hdmi_colorimetry colorimetry;
+	enum hdmi_picture_aspect picture_aspect;
+	enum hdmi_active_aspect active_aspect;
+	bool itc;
+	enum hdmi_extended_colorimetry extended_colorimetry;
+	enum hdmi_quantization_range quantization_range;
+	enum hdmi_nups nups;
+	unsigned char video_code;
+	enum hdmi_ycc_quantization_range ycc_quantization_range;
+	enum hdmi_content_type content_type;
+	unsigned char pixel_repeat;
+	short unsigned int top_bar;
+	short unsigned int bottom_bar;
+	short unsigned int left_bar;
+	short unsigned int right_bar;
+};
+
+enum hdmi_3d_structure {
+	HDMI_3D_STRUCTURE_INVALID = 4294967295,
+	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
+	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
+	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
+	HDMI_3D_STRUCTURE_L_DEPTH = 4,
+	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
+	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
+};
+
+struct hdmi_vendor_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned int oui;
+	u8 vic;
+	enum hdmi_3d_structure s3d_struct;
+	unsigned int s3d_ext_data;
+};
+
+struct hdr_static_metadata {
+	__u8 eotf;
+	__u8 metadata_type;
+	__u16 max_cll;
+	__u16 max_fall;
+	__u16 min_cll;
+};
+
+struct hdr_sink_metadata {
+	__u32 metadata_type;
+	union {
+		struct hdr_static_metadata hdmi_type1;
+	};
+};
+
+struct displayid_block {
+	u8 tag;
+	u8 rev;
+	u8 num_bytes;
+};
+
+struct displayid_tiled_block {
+	struct displayid_block base;
+	u8 tile_cap;
+	u8 topo[3];
+	u8 tile_size[4];
+	u8 tile_pixel_bezel[5];
+	u8 topology_id[8];
+};
+
+struct displayid_detailed_timings_1 {
+	u8 pixel_clock[3];
+	u8 flags;
+	u8 hactive[2];
+	u8 hblank[2];
+	u8 hsync[2];
+	u8 hsw[2];
+	u8 vactive[2];
+	u8 vblank[2];
+	u8 vsync[2];
+	u8 vsw[2];
+};
+
+struct displayid_detailed_timing_block {
+	struct displayid_block base;
+	struct displayid_detailed_timings_1 timings[0];
+};
+
+struct displayid_vesa_vendor_specific_block {
+	struct displayid_block base;
+	u8 oui[3];
+	u8 data_structure_type;
+	u8 mso;
+};
+
+struct drm_edid;
+
+struct displayid_iter {
+	const struct drm_edid *drm_edid;
+	const u8 *section;
+	int length;
+	int idx;
+	int ext_index;
+};
+
+struct edid;
+
+struct drm_edid {
+	size_t size;
+	const struct edid *edid;
+};
+
+enum drm_mode_subconnector {
+	DRM_MODE_SUBCONNECTOR_Automatic = 0,
+	DRM_MODE_SUBCONNECTOR_Unknown = 0,
+	DRM_MODE_SUBCONNECTOR_VGA = 1,
+	DRM_MODE_SUBCONNECTOR_DVID = 3,
+	DRM_MODE_SUBCONNECTOR_DVIA = 4,
+	DRM_MODE_SUBCONNECTOR_Composite = 5,
+	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+	DRM_MODE_SUBCONNECTOR_Component = 8,
+	DRM_MODE_SUBCONNECTOR_SCART = 9,
+	DRM_MODE_SUBCONNECTOR_DisplayPort = 10,
+	DRM_MODE_SUBCONNECTOR_HDMIA = 11,
+	DRM_MODE_SUBCONNECTOR_Native = 15,
+	DRM_MODE_SUBCONNECTOR_Wireless = 18,
+};
+
+struct drm_object_properties;
+
+struct drm_mode_object {
+	uint32_t id;
+	uint32_t type;
+	struct drm_object_properties *properties;
+	struct kref refcount;
+	void (*free_cb)(struct kref *);
+};
+
+struct drm_property {
+	struct list_head head;
+	struct drm_mode_object base;
+	uint32_t flags;
+	char name[32];
+	uint32_t num_values;
+	uint64_t *values;
+	struct drm_device *dev;
+	struct list_head enum_list;
+};
+
+struct est_timings {
+	u8 t1;
+	u8 t2;
+	u8 mfg_rsvd;
+};
+
+struct std_timing {
+	u8 hsize;
+	u8 vfreq_aspect;
+};
+
+struct detailed_pixel_timing {
+	u8 hactive_lo;
+	u8 hblank_lo;
+	u8 hactive_hblank_hi;
+	u8 vactive_lo;
+	u8 vblank_lo;
+	u8 vactive_vblank_hi;
+	u8 hsync_offset_lo;
+	u8 hsync_pulse_width_lo;
+	u8 vsync_offset_pulse_width_lo;
+	u8 hsync_vsync_offset_pulse_width_hi;
+	u8 width_mm_lo;
+	u8 height_mm_lo;
+	u8 width_height_mm_hi;
+	u8 hborder;
+	u8 vborder;
+	u8 misc;
+};
+
+struct detailed_data_string {
+	u8 str[13];
+};
+
+struct detailed_data_monitor_range {
+	u8 min_vfreq;
+	u8 max_vfreq;
+	u8 min_hfreq_khz;
+	u8 max_hfreq_khz;
+	u8 pixel_clock_mhz;
+	u8 flags;
+	union {
+		struct {
+			u8 reserved;
+			u8 hfreq_start_khz;
+			u8 c;
+			__le16 m;
+			u8 k;
+			u8 j;
+		} __attribute__((packed)) gtf2;
+		struct {
+			u8 version;
+			u8 data1;
+			u8 data2;
+			u8 supported_aspects;
+			u8 flags;
+			u8 supported_scalings;
+			u8 preferred_refresh;
+		} cvt;
+	} formula;
+} __attribute__((packed));
+
+struct detailed_data_wpindex {
+	u8 white_yx_lo;
+	u8 white_x_hi;
+	u8 white_y_hi;
+	u8 gamma;
+};
+
+struct cvt_timing {
+	u8 code[3];
+};
+
+struct detailed_non_pixel {
+	u8 pad1;
+	u8 type;
+	u8 pad2;
+	union {
+		struct detailed_data_string str;
+		struct detailed_data_monitor_range range;
+		struct detailed_data_wpindex color;
+		struct std_timing timings[6];
+		struct cvt_timing cvt[4];
+	} data;
+} __attribute__((packed));
+
+struct detailed_timing {
+	__le16 pixel_clock;
+	union {
+		struct detailed_pixel_timing pixel_data;
+		struct detailed_non_pixel other_data;
+	} data;
+};
+
+struct edid {
+	u8 header[8];
+	u8 mfg_id[2];
+	u8 prod_code[2];
+	u32 serial;
+	u8 mfg_week;
+	u8 mfg_year;
+	u8 version;
+	u8 revision;
+	u8 input;
+	u8 width_cm;
+	u8 height_cm;
+	u8 gamma;
+	u8 features;
+	u8 red_green_lo;
+	u8 blue_white_lo;
+	u8 red_x;
+	u8 red_y;
+	u8 green_x;
+	u8 green_y;
+	u8 blue_x;
+	u8 blue_y;
+	u8 white_x;
+	u8 white_y;
+	struct est_timings established_timings;
+	struct std_timing standard_timings[8];
+	struct detailed_timing detailed_timings[4];
+	u8 extensions;
+	u8 checksum;
+};
+
+struct cea_sad {
+	u8 format;
+	u8 channels;
+	u8 freq;
+	u8 byte2;
+};
+
+struct drm_object_properties {
+	int count;
+	struct drm_property *properties[24];
+	uint64_t values[24];
+};
+
+enum drm_connector_force {
+	DRM_FORCE_UNSPECIFIED = 0,
+	DRM_FORCE_OFF = 1,
+	DRM_FORCE_ON = 2,
+	DRM_FORCE_ON_DIGITAL = 3,
+};
+
+enum drm_connector_status {
+	connector_status_connected = 1,
+	connector_status_disconnected = 2,
+	connector_status_unknown = 3,
+};
+
+enum drm_connector_registration_state {
+	DRM_CONNECTOR_INITIALIZING = 0,
+	DRM_CONNECTOR_REGISTERED = 1,
+	DRM_CONNECTOR_UNREGISTERED = 2,
+};
+
+enum subpixel_order {
+	SubPixelUnknown = 0,
+	SubPixelHorizontalRGB = 1,
+	SubPixelHorizontalBGR = 2,
+	SubPixelVerticalRGB = 3,
+	SubPixelVerticalBGR = 4,
+	SubPixelNone = 5,
+};
+
+struct drm_scrambling {
+	bool supported;
+	bool low_rates;
+};
+
+struct drm_scdc {
+	bool supported;
+	bool read_request;
+	struct drm_scrambling scrambling;
+};
+
+struct drm_hdmi_dsc_cap {
+	bool v_1p2;
+	bool native_420;
+	bool all_bpp;
+	u8 bpc_supported;
+	u8 max_slices;
+	int clk_per_slice;
+	u8 max_lanes;
+	u8 max_frl_rate_per_lane;
+	u8 total_chunk_kbytes;
+};
+
+struct drm_hdmi_info {
+	struct drm_scdc scdc;
+	long unsigned int y420_vdb_modes[4];
+	long unsigned int y420_cmdb_modes[4];
+	u64 y420_cmdb_map;
+	u8 y420_dc_modes;
+	u8 max_frl_rate_per_lane;
+	u8 max_lanes;
+	struct drm_hdmi_dsc_cap dsc_cap;
+};
+
+enum drm_link_status {
+	DRM_LINK_STATUS_GOOD = 0,
+	DRM_LINK_STATUS_BAD = 1,
+};
+
+enum drm_panel_orientation {
+	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,
+	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
+	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
+	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
+	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
+};
+
+struct drm_monitor_range_info {
+	u16 min_vfreq;
+	u16 max_vfreq;
+};
+
+enum drm_privacy_screen_status {
+	PRIVACY_SCREEN_DISABLED = 0,
+	PRIVACY_SCREEN_ENABLED = 1,
+	PRIVACY_SCREEN_DISABLED_LOCKED = 2,
+	PRIVACY_SCREEN_ENABLED_LOCKED = 3,
+};
+
+struct drm_display_info {
+	unsigned int width_mm;
+	unsigned int height_mm;
+	unsigned int bpc;
+	enum subpixel_order subpixel_order;
+	int panel_orientation;
+	u32 color_formats;
+	const u32 *bus_formats;
+	unsigned int num_bus_formats;
+	u32 bus_flags;
+	int max_tmds_clock;
+	bool dvi_dual;
+	bool is_hdmi;
+	bool has_hdmi_infoframe;
+	bool rgb_quant_range_selectable;
+	u8 edid_hdmi_rgb444_dc_modes;
+	u8 edid_hdmi_ycbcr444_dc_modes;
+	u8 cea_rev;
+	struct drm_hdmi_info hdmi;
+	bool non_desktop;
+	struct drm_monitor_range_info monitor_range;
+	u8 mso_stream_count;
+	u8 mso_pixel_overlap;
+};
+
+struct drm_connector_tv_margins {
+	unsigned int bottom;
+	unsigned int left;
+	unsigned int right;
+	unsigned int top;
+};
+
+struct drm_tv_connector_state {
+	enum drm_mode_subconnector subconnector;
+	struct drm_connector_tv_margins margins;
+	unsigned int mode;
+	unsigned int brightness;
+	unsigned int contrast;
+	unsigned int flicker_reduction;
+	unsigned int overscan;
+	unsigned int saturation;
+	unsigned int hue;
+};
+
+struct drm_connector;
+
+struct drm_crtc;
+
+struct drm_encoder;
+
+struct drm_crtc_commit;
+
+struct drm_writeback_job;
+
+struct drm_property_blob;
+
+struct drm_connector_state {
+	struct drm_connector *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	u32 colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_privacy_screen;
+
+struct drm_cmdline_mode {
+	char name[32];
+	bool specified;
+	bool refresh_specified;
+	bool bpp_specified;
+	int xres;
+	int yres;
+	int bpp;
+	int refresh;
+	bool rb;
+	bool interlace;
+	bool cvt;
+	bool margins;
+	enum drm_connector_force force;
+	unsigned int rotation_reflection;
+	enum drm_panel_orientation panel_orientation;
+	struct drm_connector_tv_margins tv_margins;
+};
+
+struct drm_connector_funcs;
+
+struct drm_connector_helper_funcs;
+
+struct drm_tile_group;
+
+struct drm_connector {
+	struct drm_device *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	bool override_edid;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+struct drm_crtc_crc_entry;
+
+struct drm_crtc_crc {
+	spinlock_t lock;
+	const char *source;
+	bool opened;
+	bool overflow;
+	struct drm_crtc_crc_entry *entries;
+	int head;
+	int tail;
+	size_t values_cnt;
+	wait_queue_head_t wq;
+};
+
+struct drm_plane;
+
+struct drm_crtc_funcs;
+
+struct drm_crtc_helper_funcs;
+
+struct drm_crtc_state;
+
+struct drm_self_refresh_data;
+
+struct drm_crtc {
+	struct drm_device *dev;
+	struct device_node *port;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	struct drm_plane *primary;
+	struct drm_plane *cursor;
+	unsigned int index;
+	int cursor_x;
+	int cursor_y;
+	bool enabled;
+	struct drm_display_mode mode;
+	struct drm_display_mode hwmode;
+	int x;
+	int y;
+	const struct drm_crtc_funcs *funcs;
+	uint32_t gamma_size;
+	uint16_t *gamma_store;
+	const struct drm_crtc_helper_funcs *helper_private;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_filter_property;
+	struct drm_crtc_state *state;
+	struct list_head commit_list;
+	spinlock_t commit_lock;
+	struct dentry *debugfs_entry;
+	struct drm_crtc_crc crc;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
+	struct drm_self_refresh_data *self_refresh_data;
+};
+
+struct drm_encoder_funcs;
+
+struct drm_encoder_helper_funcs;
+
+struct drm_encoder {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char *name;
+	int encoder_type;
+	unsigned int index;
+	uint32_t possible_crtcs;
+	uint32_t possible_clones;
+	struct drm_crtc *crtc;
+	struct list_head bridge_chain;
+	const struct drm_encoder_funcs *funcs;
+	const struct drm_encoder_helper_funcs *helper_private;
+};
+
+struct drm_property_blob {
+	struct drm_mode_object base;
+	struct drm_device *dev;
+	struct list_head head_global;
+	struct list_head head_file;
+	size_t length;
+	void *data;
+};
+
+struct drm_printer;
+
+struct drm_connector_funcs {
+	int (*dpms)(struct drm_connector *, int);
+	void (*reset)(struct drm_connector *);
+	enum drm_connector_status (*detect)(struct drm_connector *, bool);
+	void (*force)(struct drm_connector *);
+	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector *);
+	void (*early_unregister)(struct drm_connector *);
+	void (*destroy)(struct drm_connector *);
+	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
+	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
+	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
+	void (*oob_hotplug_event)(struct drm_connector *);
+	void (*debugfs_init)(struct drm_connector *, struct dentry *);
+};
+
+struct drm_printer {
+	void (*printfn)(struct drm_printer *, struct va_format *);
+	void (*puts)(struct drm_printer *, const char *);
+	void *arg;
+	const char *prefix;
+};
+
+struct drm_writeback_connector;
+
+struct drm_connector_helper_funcs {
+	int (*get_modes)(struct drm_connector *);
+	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
+	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
+	int (*mode_valid_ctx)(struct drm_connector *, struct drm_display_mode *, struct drm_modeset_acquire_ctx *, enum drm_mode_status *);
+	struct drm_encoder * (*best_encoder)(struct drm_connector *);
+	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_atomic_state *);
+	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
+	void (*atomic_commit)(struct drm_connector *, struct drm_atomic_state *);
+	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+};
+
+struct drm_tile_group {
+	struct kref refcount;
+	struct drm_device *dev;
+	int id;
+	u8 group_data[8];
+};
+
+enum drm_color_encoding {
+	DRM_COLOR_YCBCR_BT601 = 0,
+	DRM_COLOR_YCBCR_BT709 = 1,
+	DRM_COLOR_YCBCR_BT2020 = 2,
+	DRM_COLOR_ENCODING_MAX = 3,
+};
+
+enum drm_color_range {
+	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
+	DRM_COLOR_YCBCR_FULL_RANGE = 1,
+	DRM_COLOR_RANGE_MAX = 2,
+};
+
+struct drm_rect {
+	int x1;
+	int y1;
+	int x2;
+	int y2;
+};
+
+enum drm_scaling_filter {
+	DRM_SCALING_FILTER_DEFAULT = 0,
+	DRM_SCALING_FILTER_NEAREST_NEIGHBOR = 1,
+};
+
+struct dma_fence;
+
+struct drm_plane_state {
+	struct drm_plane *plane;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct dma_fence *fence;
+	int32_t crtc_x;
+	int32_t crtc_y;
+	uint32_t crtc_w;
+	uint32_t crtc_h;
+	uint32_t src_x;
+	uint32_t src_y;
+	uint32_t src_h;
+	uint32_t src_w;
+	u16 alpha;
+	uint16_t pixel_blend_mode;
+	unsigned int rotation;
+	unsigned int zpos;
+	unsigned int normalized_zpos;
+	enum drm_color_encoding color_encoding;
+	enum drm_color_range color_range;
+	struct drm_property_blob *fb_damage_clips;
+	struct drm_rect src;
+	struct drm_rect dst;
+	bool visible;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+enum drm_plane_type {
+	DRM_PLANE_TYPE_OVERLAY = 0,
+	DRM_PLANE_TYPE_PRIMARY = 1,
+	DRM_PLANE_TYPE_CURSOR = 2,
+};
+
+struct drm_plane_funcs;
+
+struct drm_plane_helper_funcs;
+
+struct drm_plane {
+	struct drm_device *dev;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	uint32_t possible_crtcs;
+	uint32_t *format_types;
+	unsigned int format_count;
+	bool format_default;
+	uint64_t *modifiers;
+	unsigned int modifier_count;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct drm_framebuffer *old_fb;
+	const struct drm_plane_funcs *funcs;
+	struct drm_object_properties properties;
+	enum drm_plane_type type;
+	unsigned int index;
+	const struct drm_plane_helper_funcs *helper_private;
+	struct drm_plane_state *state;
+	struct drm_property *alpha_property;
+	struct drm_property *zpos_property;
+	struct drm_property *rotation_property;
+	struct drm_property *blend_mode_property;
+	struct drm_property *color_encoding_property;
+	struct drm_property *color_range_property;
+	struct drm_property *scaling_filter_property;
+};
+
+struct drm_plane_funcs {
+	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_plane *);
+	void (*reset)(struct drm_plane *);
+	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
+	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
+	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_plane *);
+	void (*early_unregister)(struct drm_plane *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
+	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
+};
+
+struct drm_plane_helper_funcs {
+	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_update)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_plane *, struct drm_atomic_state *);
+	int (*atomic_async_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_async_update)(struct drm_plane *, struct drm_atomic_state *);
+};
+
+struct drm_crtc_crc_entry {
+	bool has_frame_counter;
+	uint32_t frame;
+	uint32_t crcs[10];
+};
+
+struct drm_pending_vblank_event;
+
+struct drm_crtc_state {
+	struct drm_crtc *crtc;
+	bool enable;
+	bool active;
+	bool planes_changed: 1;
+	bool mode_changed: 1;
+	bool active_changed: 1;
+	bool connectors_changed: 1;
+	bool zpos_changed: 1;
+	bool color_mgmt_changed: 1;
+	bool no_vblank: 1;
+	u32 plane_mask;
+	u32 connector_mask;
+	u32 encoder_mask;
+	struct drm_display_mode adjusted_mode;
+	struct drm_display_mode mode;
+	struct drm_property_blob *mode_blob;
+	struct drm_property_blob *degamma_lut;
+	struct drm_property_blob *ctm;
+	struct drm_property_blob *gamma_lut;
+	u32 target_vblank;
+	bool async_flip;
+	bool vrr_enabled;
+	bool self_refresh_active;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_pending_vblank_event *event;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct drm_mode_set;
+
+struct drm_crtc_funcs {
+	void (*reset)(struct drm_crtc *);
+	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
+	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
+	int (*cursor_move)(struct drm_crtc *, int, int);
+	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_crtc *);
+	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
+	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
+	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
+	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
+	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_crtc *);
+	void (*early_unregister)(struct drm_crtc *);
+	int (*set_crc_source)(struct drm_crtc *, const char *);
+	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
+	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
+	u32 (*get_vblank_counter)(struct drm_crtc *);
+	int (*enable_vblank)(struct drm_crtc *);
+	void (*disable_vblank)(struct drm_crtc *);
+	bool (*get_vblank_timestamp)(struct drm_crtc *, int *, ktime_t *, bool);
+};
+
+struct drm_mode_set {
+	struct drm_framebuffer *fb;
+	struct drm_crtc *crtc;
+	struct drm_display_mode *mode;
+	uint32_t x;
+	uint32_t y;
+	struct drm_connector **connectors;
+	size_t num_connectors;
+};
+
+enum mode_set_atomic {
+	LEAVE_ATOMIC_MODE_SET = 0,
+	ENTER_ATOMIC_MODE_SET = 1,
+};
+
+struct drm_crtc_helper_funcs {
+	void (*dpms)(struct drm_crtc *, int);
+	void (*prepare)(struct drm_crtc *);
+	void (*commit)(struct drm_crtc *);
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
+	void (*mode_set_nofb)(struct drm_crtc *);
+	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
+	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
+	void (*disable)(struct drm_crtc *);
+	int (*atomic_check)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_begin)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_flush)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_crtc *, struct drm_atomic_state *);
+	bool (*get_scanout_position)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+};
+
+struct drm_encoder_funcs {
+	void (*reset)(struct drm_encoder *);
+	void (*destroy)(struct drm_encoder *);
+	int (*late_register)(struct drm_encoder *);
+	void (*early_unregister)(struct drm_encoder *);
+};
+
+struct drm_encoder_helper_funcs {
+	void (*dpms)(struct drm_encoder *, int);
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*prepare)(struct drm_encoder *);
+	void (*commit)(struct drm_encoder *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*disable)(struct drm_encoder *);
+	void (*enable)(struct drm_encoder *);
+	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+};
+
+struct detailed_mode_closure {
+	struct drm_connector *connector;
+	const struct drm_edid *drm_edid;
+	bool preferred;
+	u32 quirks;
+	int modes;
+};
+
+struct edid_quirk {
+	u32 panel_id;
+	u32 quirks;
+};
+
+struct minimode {
+	short int w;
+	short int h;
+	short int r;
+	short int rb;
+};
+
+struct drm_edid_iter {
+	const struct drm_edid *drm_edid;
+	int index;
+};
+
+enum edid_block_status {
+	EDID_BLOCK_OK = 0,
+	EDID_BLOCK_READ_FAIL = 1,
+	EDID_BLOCK_NULL = 2,
+	EDID_BLOCK_ZERO = 3,
+	EDID_BLOCK_HEADER_CORRUPT = 4,
+	EDID_BLOCK_HEADER_REPAIR = 5,
+	EDID_BLOCK_HEADER_FIXED = 6,
+	EDID_BLOCK_CHECKSUM = 7,
+	EDID_BLOCK_VERSION = 8,
+};
+
+typedef int read_block_fn(void *, u8 *, unsigned int, size_t);
+
+typedef void detailed_cb(const struct detailed_timing *, void *);
+
+struct stereo_mandatory_mode {
+	int width;
+	int height;
+	int vrefresh;
+	unsigned int flags;
+};
+
+struct cea_db_iter {
+	struct drm_edid_iter edid_iter;
+	struct displayid_iter displayid_iter;
+	const u8 *collection;
+	int index;
+	int end;
+};
+
+struct cea_db {
+	u8 tag_length;
+	u8 data[0];
+};
+
+struct drm_clip_rect {
+	short unsigned int x1;
+	short unsigned int y1;
+	short unsigned int x2;
+	short unsigned int y2;
+};
+
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+struct drm_event_vblank {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 sequence;
+	__u32 crtc_id;
+};
+
+struct drm_event_crtc_sequence {
+	struct drm_event base;
+	__u64 user_data;
+	__s64 time_ns;
+	__u64 sequence;
+};
+
+struct drm_mode_set_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__s32 crtc_x;
+	__s32 crtc_y;
+	__u32 crtc_w;
+	__u32 crtc_h;
+	__u32 src_x;
+	__u32 src_y;
+	__u32 src_h;
+	__u32 src_w;
+};
+
+struct drm_mode_get_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 possible_crtcs;
+	__u32 gamma_size;
+	__u32 count_format_types;
+	__u64 format_type_ptr;
+};
+
+struct drm_mode_get_plane_res {
+	__u64 plane_id_ptr;
+	__u32 count_planes;
+};
+
+struct drm_mode_cursor {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+};
+
+struct drm_mode_cursor2 {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+	__s32 hot_x;
+	__s32 hot_y;
+};
+
+struct drm_mode_crtc_page_flip_target {
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__u32 sequence;
+	__u64 user_data;
+};
+
+struct drm_format_modifier_blob {
+	__u32 version;
+	__u32 flags;
+	__u32 count_formats;
+	__u32 formats_offset;
+	__u32 count_modifiers;
+	__u32 modifiers_offset;
+};
+
+struct drm_format_modifier {
+	__u64 formats;
+	__u32 offset;
+	__u32 pad;
+	__u64 modifier;
+};
+
+struct drm_mode_rect {
+	__s32 x1;
+	__s32 y1;
+	__s32 x2;
+	__s32 y2;
+};
+
+struct drm_prop_enum_list {
+	int type;
+	const char *name;
+};
+
+struct drm_framebuffer_funcs;
+
+struct drm_framebuffer {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char comm[16];
+	const struct drm_format_info *format;
+	const struct drm_framebuffer_funcs *funcs;
+	unsigned int pitches[4];
+	unsigned int offsets[4];
+	uint64_t modifier;
+	unsigned int width;
+	unsigned int height;
+	int flags;
+	int hot_x;
+	int hot_y;
+	struct list_head filp_head;
+	struct drm_gem_object *obj[4];
+};
+
+struct drm_framebuffer_funcs {
+	void (*destroy)(struct drm_framebuffer *);
+	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
+	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
+};
+
+struct drm_pending_event {
+	struct completion *completion;
+	void (*completion_release)(struct completion *);
+	struct drm_event *event;
+	struct dma_fence *fence;
+	struct drm_file *file_priv;
+	struct list_head link;
+	struct list_head pending_link;
+};
+
+struct drm_pending_vblank_event {
+	struct drm_pending_event base;
+	unsigned int pipe;
+	u64 sequence;
+	union {
+		struct drm_event base;
+		struct drm_event_vblank vbl;
+		struct drm_event_crtc_sequence seq;
+	} event;
+};
+
+typedef void (*drmres_release_t)(struct drm_device *, void *);
+
+struct __drm_planes_state;
+
+struct __drm_crtcs_state;
+
+struct __drm_connnectors_state;
+
+struct __drm_private_objs_state;
+
+struct drm_atomic_state {
+	struct kref ref;
+	struct drm_device *dev;
+	bool allow_modeset: 1;
+	bool legacy_cursor_update: 1;
+	bool async_update: 1;
+	bool duplicated: 1;
+	struct __drm_planes_state *planes;
+	struct __drm_crtcs_state *crtcs;
+	int num_connector;
+	struct __drm_connnectors_state *connectors;
+	int num_private_objs;
+	struct __drm_private_objs_state *private_objs;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct drm_crtc_commit *fake_commit;
+	struct work_struct commit_work;
+};
+
+struct drm_crtc_commit {
+	struct drm_crtc *crtc;
+	struct kref ref;
+	struct completion flip_done;
+	struct completion hw_done;
+	struct completion cleanup_done;
+	struct list_head commit_entry;
+	struct drm_pending_vblank_event *event;
+	bool abort_completion;
+};
+
+struct drm_connector_list_iter {
+	struct drm_device *dev;
+	struct drm_connector *conn;
+};
+
+struct __drm_planes_state {
+	struct drm_plane *ptr;
+	struct drm_plane_state *state;
+	struct drm_plane_state *old_state;
+	struct drm_plane_state *new_state;
+};
+
+struct __drm_crtcs_state {
+	struct drm_crtc *ptr;
+	struct drm_crtc_state *state;
+	struct drm_crtc_state *old_state;
+	struct drm_crtc_state *new_state;
+	struct drm_crtc_commit *commit;
+	s32 *out_fence_ptr;
+	u64 last_vblank_count;
+};
+
+struct __drm_connnectors_state {
+	struct drm_connector *ptr;
+	struct drm_connector_state *state;
+	struct drm_connector_state *old_state;
+	struct drm_connector_state *new_state;
+	s32 *out_fence_ptr;
+};
+
+struct drm_private_state;
+
+struct drm_private_obj;
+
+struct drm_private_state_funcs {
+	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
+	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_private_state *);
+};
+
+struct drm_private_state {
+	struct drm_atomic_state *state;
+	struct drm_private_obj *obj;
+};
+
+struct drm_private_obj {
+	struct list_head head;
+	struct drm_modeset_lock lock;
+	struct drm_private_state *state;
+	const struct drm_private_state_funcs *funcs;
+};
+
+struct __drm_private_objs_state {
+	struct drm_private_obj *ptr;
+	struct drm_private_state *state;
+	struct drm_private_state *old_state;
+	struct drm_private_state *new_state;
+};
+
+struct drm_client_dev;
+
+struct drm_client_funcs {
+	struct module *owner;
+	void (*unregister)(struct drm_client_dev *);
+	int (*restore)(struct drm_client_dev *);
+	int (*hotplug)(struct drm_client_dev *);
+};
+
+struct drm_client_dev {
+	struct drm_device *dev;
+	const char *name;
+	struct list_head list;
+	const struct drm_client_funcs *funcs;
+	struct drm_file *file;
+	struct mutex modeset_mutex;
+	struct drm_mode_set *modesets;
+};
+
+struct drm_client_offset {
+	int x;
+	int y;
+};
+
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+struct drm_bus_cfg {
+	u32 format;
+	u32 flags;
+};
+
+struct drm_bridge;
+
+struct drm_bridge_state {
+	struct drm_private_state base;
+	struct drm_bridge *bridge;
+	struct drm_bus_cfg input_bus_cfg;
+	struct drm_bus_cfg output_bus_cfg;
+};
+
+enum drm_bridge_ops {
+	DRM_BRIDGE_OP_DETECT = 1,
+	DRM_BRIDGE_OP_EDID = 2,
+	DRM_BRIDGE_OP_HPD = 4,
+	DRM_BRIDGE_OP_MODES = 8,
+};
+
+struct drm_bridge_timings;
+
+struct drm_bridge_funcs;
+
+struct drm_bridge {
+	struct drm_private_obj base;
+	struct drm_device *dev;
+	struct drm_encoder *encoder;
+	struct list_head chain_node;
+	struct device_node *of_node;
+	struct list_head list;
+	const struct drm_bridge_timings *timings;
+	const struct drm_bridge_funcs *funcs;
+	void *driver_private;
+	enum drm_bridge_ops ops;
+	int type;
+	bool interlace_allowed;
+	struct i2c_adapter *ddc;
+	struct mutex hpd_mutex;
+	void (*hpd_cb)(void *, enum drm_connector_status);
+	void *hpd_data;
+};
+
+enum drm_bridge_attach_flags {
+	DRM_BRIDGE_ATTACH_NO_CONNECTOR = 1,
+};
+
+struct drm_bridge_funcs {
+	int (*attach)(struct drm_bridge *, enum drm_bridge_attach_flags);
+	void (*detach)(struct drm_bridge *);
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*disable)(struct drm_bridge *);
+	void (*post_disable)(struct drm_bridge *);
+	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
+	void (*pre_enable)(struct drm_bridge *);
+	void (*enable)(struct drm_bridge *);
+	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_post_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	struct drm_bridge_state * (*atomic_duplicate_state)(struct drm_bridge *);
+	void (*atomic_destroy_state)(struct drm_bridge *, struct drm_bridge_state *);
+	u32 * (*atomic_get_output_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, unsigned int *);
+	u32 * (*atomic_get_input_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, u32, unsigned int *);
+	int (*atomic_check)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *);
+	struct drm_bridge_state * (*atomic_reset)(struct drm_bridge *);
+	enum drm_connector_status (*detect)(struct drm_bridge *);
+	int (*get_modes)(struct drm_bridge *, struct drm_connector *);
+	struct edid * (*get_edid)(struct drm_bridge *, struct drm_connector *);
+	void (*hpd_notify)(struct drm_bridge *, enum drm_connector_status);
+	void (*hpd_enable)(struct drm_bridge *);
+	void (*hpd_disable)(struct drm_bridge *);
+	void (*debugfs_init)(struct drm_bridge *, struct dentry *);
+};
+
+struct drm_bridge_timings {
+	u32 input_bus_flags;
+	u32 setup_time_ps;
+	u32 hold_time_ps;
+	bool dual_link;
+};
+
+enum drm_lvds_dual_link_pixels {
+	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
+	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
+};
+
+struct display_timing;
+
+struct drm_panel;
+
+struct drm_panel_funcs {
+	int (*prepare)(struct drm_panel *);
+	int (*enable)(struct drm_panel *);
+	int (*disable)(struct drm_panel *);
+	int (*unprepare)(struct drm_panel *);
+	int (*get_modes)(struct drm_panel *, struct drm_connector *);
+	enum drm_panel_orientation (*get_orientation)(struct drm_panel *);
+	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
+	void (*debugfs_init)(struct drm_panel *, struct dentry *);
+};
+
+struct drm_dsc_config;
+
+struct drm_panel {
+	struct device *dev;
+	struct backlight_device *backlight;
+	const struct drm_panel_funcs *funcs;
+	int connector_type;
+	struct list_head list;
+	struct drm_dsc_config *dsc;
+};
+
+enum drm_of_lvds_pixels {
+	DRM_OF_LVDS_EVEN = 1,
+	DRM_OF_LVDS_ODD = 2,
+};
+
+struct component_match;
+
+struct drm_bridge_connector {
+	struct drm_connector base;
+	struct drm_encoder *encoder;
+	struct drm_bridge *bridge_edid;
+	struct drm_bridge *bridge_hpd;
+	struct drm_bridge *bridge_detect;
+	struct drm_bridge *bridge_modes;
+};
+
+struct drm_simple_display_pipe;
+
+struct drm_simple_display_pipe_funcs {
+	enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *, const struct drm_display_mode *);
+	void (*enable)(struct drm_simple_display_pipe *, struct drm_crtc_state *, struct drm_plane_state *);
+	void (*disable)(struct drm_simple_display_pipe *);
+	int (*check)(struct drm_simple_display_pipe *, struct drm_plane_state *, struct drm_crtc_state *);
+	void (*update)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*prepare_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*enable_vblank)(struct drm_simple_display_pipe *);
+	void (*disable_vblank)(struct drm_simple_display_pipe *);
+	void (*reset_crtc)(struct drm_simple_display_pipe *);
+	struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *);
+	void (*destroy_crtc_state)(struct drm_simple_display_pipe *, struct drm_crtc_state *);
+	void (*reset_plane)(struct drm_simple_display_pipe *);
+	struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *);
+	void (*destroy_plane_state)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+};
+
+struct drm_simple_display_pipe {
+	struct drm_crtc crtc;
+	struct drm_plane plane;
+	struct drm_encoder encoder;
+	struct drm_connector *connector;
+	const struct drm_simple_display_pipe_funcs *funcs;
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_DROP_REASON_NOT_SPECIFIED = 1,
+	SKB_DROP_REASON_NO_SOCKET = 2,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 3,
+	SKB_DROP_REASON_TCP_CSUM = 4,
+	SKB_DROP_REASON_SOCKET_FILTER = 5,
+	SKB_DROP_REASON_UDP_CSUM = 6,
+	SKB_DROP_REASON_NETFILTER_DROP = 7,
+	SKB_DROP_REASON_OTHERHOST = 8,
+	SKB_DROP_REASON_IP_CSUM = 9,
+	SKB_DROP_REASON_IP_INHDR = 10,
+	SKB_DROP_REASON_IP_RPFILTER = 11,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 12,
+	SKB_DROP_REASON_XFRM_POLICY = 13,
+	SKB_DROP_REASON_IP_NOPROTO = 14,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 15,
+	SKB_DROP_REASON_PROTO_MEM = 16,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 17,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 18,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 19,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 20,
+	SKB_DROP_REASON_TCP_FLAGS = 21,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 22,
+	SKB_DROP_REASON_TCP_OLD_DATA = 23,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 24,
+	SKB_DROP_REASON_TCP_OFOMERGE = 25,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 26,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 27,
+	SKB_DROP_REASON_TCP_RESET = 28,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 29,
+	SKB_DROP_REASON_TCP_CLOSE = 30,
+	SKB_DROP_REASON_TCP_FASTOPEN = 31,
+	SKB_DROP_REASON_TCP_OLD_ACK = 32,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 33,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 34,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 35,
+	SKB_DROP_REASON_TCP_OFO_DROP = 36,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 37,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 38,
+	SKB_DROP_REASON_IPV6DISABLED = 39,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 40,
+	SKB_DROP_REASON_NEIGH_FAILED = 41,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 42,
+	SKB_DROP_REASON_NEIGH_DEAD = 43,
+	SKB_DROP_REASON_TC_EGRESS = 44,
+	SKB_DROP_REASON_QDISC_DROP = 45,
+	SKB_DROP_REASON_CPU_BACKLOG = 46,
+	SKB_DROP_REASON_XDP = 47,
+	SKB_DROP_REASON_TC_INGRESS = 48,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 49,
+	SKB_DROP_REASON_SKB_CSUM = 50,
+	SKB_DROP_REASON_SKB_GSO_SEG = 51,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 52,
+	SKB_DROP_REASON_DEV_HDR = 53,
+	SKB_DROP_REASON_DEV_READY = 54,
+	SKB_DROP_REASON_FULL_RING = 55,
+	SKB_DROP_REASON_NOMEM = 56,
+	SKB_DROP_REASON_HDR_TRUNC = 57,
+	SKB_DROP_REASON_TAP_FILTER = 58,
+	SKB_DROP_REASON_TAP_TXFILTER = 59,
+	SKB_DROP_REASON_ICMP_CSUM = 60,
+	SKB_DROP_REASON_INVALID_PROTO = 61,
+	SKB_DROP_REASON_IP_INADDRERRORS = 62,
+	SKB_DROP_REASON_IP_INNOROUTES = 63,
+	SKB_DROP_REASON_PKT_TOO_BIG = 64,
+	SKB_DROP_REASON_MAX = 65,
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+};
+
+struct cb_id {
+	__u32 idx;
+	__u32 val;
+};
+
+struct cn_msg {
+	struct cb_id id;
+	__u32 seq;
+	__u32 ack;
+	__u16 len;
+	__u16 flags;
+	__u8 data[0];
+};
+
+struct cn_queue_dev {
+	atomic_t refcnt;
+	unsigned char name[32];
+	struct list_head queue_list;
+	spinlock_t queue_lock;
+	struct sock *nls;
+};
+
+struct cn_callback_id {
+	unsigned char name[32];
+	struct cb_id id;
+};
+
+struct cn_callback_entry {
+	struct list_head callback_entry;
+	refcount_t refcnt;
+	struct cn_queue_dev *pdev;
+	struct cn_callback_id id;
+	void (*callback)(struct cn_msg *, struct netlink_skb_parms *);
+	u32 seq;
+	u32 group;
+};
+
+struct cn_dev {
+	struct cb_id id;
+	u32 seq;
+	u32 groups;
+	struct sock *nls;
+	struct cn_queue_dev *cbdev;
+};
+
+struct klist_node;
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
+	struct mutex mutex;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	struct bus_type *bus;
+	struct kset glue_dirs;
+	struct class *class;
+};
+
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
+};
+
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
+};
+
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
+};
+
+struct wake_irq {
+	struct device *dev;
+	unsigned int status;
+	int irq;
+	const char *name;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+enum genpd_notication {
+	GENPD_NOTIFY_PRE_OFF = 0,
+	GENPD_NOTIFY_OFF = 1,
+	GENPD_NOTIFY_PRE_ON = 2,
+	GENPD_NOTIFY_ON = 3,
+};
+
+struct gpd_link {
+	struct generic_pm_domain *parent;
+	struct list_head parent_node;
+	struct generic_pm_domain *child;
+	struct list_head child_node;
+	unsigned int performance_state;
+	unsigned int prev_performance_state;
+};
+
+struct gpd_timing_data {
+	s64 suspend_latency_ns;
+	s64 resume_latency_ns;
+	s64 effective_constraint_ns;
+	ktime_t next_wakeup;
+	bool constraint_changed;
+	bool cached_suspend_ok;
+};
+
+struct generic_pm_domain_data {
+	struct pm_domain_data base;
+	struct gpd_timing_data *td;
+	struct notifier_block nb;
+	struct notifier_block *power_nb;
+	int cpu;
+	unsigned int performance_state;
+	unsigned int default_pstate;
+	unsigned int rpm_pstate;
+	void *data;
+};
+
+struct of_genpd_provider {
+	struct list_head link;
+	struct device_node *node;
+	genpd_xlate_t xlate;
+	void *data;
+};
+
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+struct regmap;
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
+};
+
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
+
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+typedef void (*regmap_hw_free_context)(void *);
+
+struct regmap_bus {
+	bool fast_io;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool free_on_exit;
+};
+
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t reg_downshift;
+	size_t val_bytes;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
+};
+
+struct hwspinlock;
+
+struct regcache_ops;
+
+struct regmap {
+	union {
+		struct mutex mutex;
+		struct {
+			spinlock_t spinlock;
+			long unsigned int spinlock_flags;
+		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			long unsigned int raw_spinlock_flags;
+		};
+	};
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
+	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
+};
+
+struct regcache_ops {
+	const char *name;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
+};
+
+struct regcache_rbtree_node {
+	void *block;
+	long int *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct soc_device {
+	struct device dev;
+	struct soc_device_attribute *attr;
+	int soc_dev_num;
+};
+
+struct acpi_pld_info {
+	u8 revision;
+	u8 ignore_color;
+	u8 red;
+	u8 green;
+	u8 blue;
+	u16 width;
+	u16 height;
+	u8 user_visible;
+	u8 dock;
+	u8 lid;
+	u8 panel;
+	u8 vertical_position;
+	u8 horizontal_position;
+	u8 shape;
+	u8 group_orientation;
+	u8 group_token;
+	u8 group_position;
+	u8 bay;
+	u8 ejectable;
+	u8 ospm_eject_required;
+	u8 cabinet_number;
+	u8 card_cage_number;
+	u8 reference;
+	u8 rotation;
+	u8 order;
+	u8 reserved;
+	u16 vertical_offset;
+	u16 horizontal_offset;
+};
+
+struct mfd_cell_acpi_match;
+
+struct mfd_cell {
+	const char *name;
+	int id;
+	int level;
+	int (*enable)(struct platform_device *);
+	int (*disable)(struct platform_device *);
+	int (*suspend)(struct platform_device *);
+	int (*resume)(struct platform_device *);
+	void *platform_data;
+	size_t pdata_size;
+	const struct software_node *swnode;
+	const char *of_compatible;
+	const u64 of_reg;
+	bool use_of_reg;
+	const struct mfd_cell_acpi_match *acpi_match;
+	int num_resources;
+	const struct resource *resources;
+	bool ignore_resource_conflicts;
+	bool pm_runtime_no_callbacks;
+	const char * const *parent_supplies;
+	int num_parent_supplies;
+};
+
+struct mfd_cell_acpi_match {
+	const char *pnpid;
+	const long long unsigned int adr;
+};
+
+enum {
+	MAX77620_IRQ_TOP_GLBL = 0,
+	MAX77620_IRQ_TOP_SD = 1,
+	MAX77620_IRQ_TOP_LDO = 2,
+	MAX77620_IRQ_TOP_GPIO = 3,
+	MAX77620_IRQ_TOP_RTC = 4,
+	MAX77620_IRQ_TOP_32K = 5,
+	MAX77620_IRQ_TOP_ONOFF = 6,
+	MAX77620_IRQ_LBT_MBATLOW = 7,
+	MAX77620_IRQ_LBT_TJALRM1 = 8,
+	MAX77620_IRQ_LBT_TJALRM2 = 9,
+};
+
+enum max77620_chip_id {
+	MAX77620 = 0,
+	MAX20024 = 1,
+	MAX77663 = 2,
+};
+
+struct regmap_irq_chip_data;
+
+struct max77620_chip {
+	struct device *dev;
+	struct regmap *rmap;
+	int chip_irq;
+	enum max77620_chip_id chip_id;
+	bool sleep_enable;
+	bool enable_global_lpm;
+	int shutdown_fps_period[3];
+	int suspend_fps_period[3];
+	struct regmap_irq_chip_data *top_irq_data;
+	struct regmap_irq_chip_data *gpio_irq_data;
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	unsigned int type_base;
+	unsigned int *virt_reg_base;
+	const unsigned int *config_base;
+	unsigned int irq_reg_stride;
+	unsigned int init_ack_masked: 1;
+	unsigned int mask_invert: 1;
+	unsigned int mask_unmask_non_inverted: 1;
+	unsigned int use_ack: 1;
+	unsigned int ack_invert: 1;
+	unsigned int clear_ack: 1;
+	unsigned int wake_invert: 1;
+	unsigned int runtime_pm: 1;
+	unsigned int type_invert: 1;
+	unsigned int type_in_mask: 1;
+	unsigned int clear_on_unmask: 1;
+	unsigned int not_fixed_stride: 1;
+	unsigned int status_invert: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_type_reg;
+	int num_virt_regs;
+	int num_config_bases;
+	int num_config_regs;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*set_type_virt)(unsigned int **, unsigned int, long unsigned int, int);
+	int (*set_type_config)(unsigned int **, unsigned int, const struct regmap_irq *, int);
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+struct dax_operations {
+	long int (*direct_access)(struct dax_device *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
+	int (*zero_page_range)(struct dax_device *, long unsigned int, size_t);
+	size_t (*recovery_write)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
+};
+
+struct dax_region {
+	int id;
+	int target_node;
+	struct kref kref;
+	struct device *dev;
+	unsigned int align;
+	struct ida ida;
+	struct resource res;
+	struct device *seed;
+	struct device *youngest;
+};
+
+struct dax_mapping {
+	struct device dev;
+	int range_id;
+	int id;
+};
+
+struct dev_dax_range {
+	long unsigned int pgoff;
+	struct range range;
+	struct dax_mapping *mapping;
+};
+
+struct dev_dax {
+	struct dax_region *region;
+	struct dax_device *dax_dev;
+	unsigned int align;
+	int target_node;
+	int id;
+	struct ida ida;
+	struct device dev;
+	struct dev_pagemap *pgmap;
+	int nr_range;
+	struct dev_dax_range *ranges;
+};
+
+struct dev_dax_data {
+	struct dax_region *dax_region;
+	struct dev_pagemap *pgmap;
+	resource_size_t size;
+	int id;
+};
+
+struct dax_device_driver {
+	struct device_driver drv;
+	struct list_head ids;
+	int match_always;
+	int (*probe)(struct dev_dax *);
+	void (*remove)(struct dev_dax *);
+};
+
+struct dax_id {
+	struct list_head list;
+	char dev_name[30];
+};
+
+enum id_action {
+	ID_REMOVE = 0,
+	ID_ADD = 1,
+};
+
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
+};
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	long unsigned int flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long int (*wait)(struct dma_fence *, bool, long int);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_resv;
+
+struct dma_buf_sysfs_entry;
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	struct mutex lock;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+	struct dma_buf_sysfs_entry *sysfs_entry;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+};
+
+struct dma_buf_sysfs_entry {
+	struct kobject kobj;
+	struct dma_buf *dmabuf;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+};
+
+struct dma_buf_export_info {
+	const char *exp_name;
+	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
+};
+
+struct dma_heap;
+
+struct dma_heap_ops {
+	struct dma_buf * (*allocate)(struct dma_heap *, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+struct system_heap_buffer {
+	struct dma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	long unsigned int len;
+	struct sg_table sg_table;
+	int vmap_cnt;
+	void *vaddr;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped;
+};
+
+enum {
+	CXL_MEM_COMMAND_ID_INVALID = 0,
+	CXL_MEM_COMMAND_ID_IDENTIFY = 1,
+	CXL_MEM_COMMAND_ID_RAW = 2,
+	CXL_MEM_COMMAND_ID_GET_SUPPORTED_LOGS = 3,
+	CXL_MEM_COMMAND_ID_GET_FW_INFO = 4,
+	CXL_MEM_COMMAND_ID_GET_PARTITION_INFO = 5,
+	CXL_MEM_COMMAND_ID_GET_LSA = 6,
+	CXL_MEM_COMMAND_ID_GET_HEALTH_INFO = 7,
+	CXL_MEM_COMMAND_ID_GET_LOG = 8,
+	CXL_MEM_COMMAND_ID_SET_PARTITION_INFO = 9,
+	CXL_MEM_COMMAND_ID_SET_LSA = 10,
+	CXL_MEM_COMMAND_ID_GET_ALERT_CONFIG = 11,
+	CXL_MEM_COMMAND_ID_SET_ALERT_CONFIG = 12,
+	CXL_MEM_COMMAND_ID_GET_SHUTDOWN_STATE = 13,
+	CXL_MEM_COMMAND_ID_SET_SHUTDOWN_STATE = 14,
+	CXL_MEM_COMMAND_ID_GET_POISON = 15,
+	CXL_MEM_COMMAND_ID_INJECT_POISON = 16,
+	CXL_MEM_COMMAND_ID_CLEAR_POISON = 17,
+	CXL_MEM_COMMAND_ID_GET_SCAN_MEDIA_CAPS = 18,
+	CXL_MEM_COMMAND_ID_SCAN_MEDIA = 19,
+	CXL_MEM_COMMAND_ID_GET_SCAN_MEDIA = 20,
+	CXL_MEM_COMMAND_ID_MAX = 21,
+};
+
+struct cxl_command_info {
+	__u32 id;
+	__u32 flags;
+	__u32 size_in;
+	__u32 size_out;
+};
+
+struct cxl_mem_query_commands {
+	__u32 n_commands;
+	__u32 rsvd;
+	struct cxl_command_info commands[0];
+};
+
+struct cxl_send_command {
+	__u32 id;
+	__u32 flags;
+	union {
+		struct {
+			__u16 opcode;
+			__u16 rsvd;
+		} raw;
+		__u32 rsvd;
+	};
+	__u32 retval;
+	struct {
+		__u32 size;
+		__u32 rsvd;
+		__u64 payload;
+	} in;
+	struct {
+		__u32 size;
+		__u32 rsvd;
+		__u64 payload;
+	} out;
+};
+
+struct cxl_component_regs {
+	void *hdm_decoder;
+};
+
+struct cxl_device_regs {
+	void *status;
+	void *mbox;
+	void *memdev;
+};
+
+struct cxl_regs {
+	union {
+		struct {
+			void *hdm_decoder;
+		};
+		struct cxl_component_regs component;
+	};
+	union {
+		struct {
+			void *status;
+			void *mbox;
+			void *memdev;
+		};
+		struct cxl_device_regs device_regs;
+	};
+};
+
+struct cxl_dev_state;
+
+struct cxl_memdev {
+	struct device dev;
+	struct cdev cdev;
+	struct cxl_dev_state *cxlds;
+	struct work_struct detach_work;
+	int id;
+};
+
+struct cxl_mbox_cmd;
+
+struct cxl_dev_state {
+	struct device *dev;
+	struct cxl_regs regs;
+	int cxl_dvsec;
+	size_t payload_size;
+	size_t lsa_size;
+	struct mutex mbox_mutex;
+	char firmware_version[16];
+	long unsigned int enabled_cmds[1];
+	long unsigned int exclusive_cmds[1];
+	struct resource dpa_res;
+	struct resource pmem_res;
+	struct resource ram_res;
+	u64 total_bytes;
+	u64 volatile_only_bytes;
+	u64 persistent_only_bytes;
+	u64 partition_align_bytes;
+	u64 active_volatile_bytes;
+	u64 active_persistent_bytes;
+	u64 next_volatile_bytes;
+	u64 next_persistent_bytes;
+	resource_size_t component_reg_phys;
+	u64 serial;
+	struct xarray doe_mbs;
+	int (*mbox_send)(struct cxl_dev_state *, struct cxl_mbox_cmd *);
+};
+
+struct cxl_mbox_cmd {
+	u16 opcode;
+	void *payload_in;
+	void *payload_out;
+	size_t size_in;
+	size_t size_out;
+	u16 return_code;
+};
+
+struct cxl_mbox_cmd_rc {
+	int err;
+	const char *desc;
+};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TARGET_FAILURE = 16,
+	DID_NEXUS_FAILURE = 17,
+	DID_ALLOC_FAILURE = 18,
+	DID_MEDIUM_ERROR = 19,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+};
+
+struct bsg_device;
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	short unsigned int queue_depth;
+	short unsigned int max_queue_depth;
+	short unsigned int last_queue_full_depth;
+	short unsigned int last_queue_full_count;
+	long unsigned int last_queue_full_time;
+	long unsigned int queue_ramp_up_period;
+	long unsigned int last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd *vpd_pg0;
+	struct scsi_vpd *vpd_pg83;
+	struct scsi_vpd *vpd_pg80;
+	struct scsi_vpd *vpd_pg89;
+	struct scsi_vpd *vpd_pgb0;
+	struct scsi_vpd *vpd_pgb1;
+	struct scsi_vpd *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int manage_start_stop: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	long unsigned int supported_events[1];
+	long unsigned int pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct execute_work ew;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	long unsigned int sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	long unsigned int last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	short unsigned int max_cmd_len;
+	int this_id;
+	int can_queue;
+	short int cmd_per_lun;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	long unsigned int base;
+	long unsigned int io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	long unsigned int hostdata[0];
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	long unsigned int starget_data[0];
+};
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+};
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	long unsigned int jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	short unsigned int cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	long unsigned int state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*compat_ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	int (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	struct proc_dir_entry *proc_dir;
+	int can_queue;
+	int this_id;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	short int cmd_per_lun;
+	unsigned char present;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	int rpm_autosuspend_delay;
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+struct scsi_nl_hdr {
+	__u8 version;
+	__u8 transport;
+	__u16 magic;
+	__u16 msgtype;
+	__u16 msglen;
+};
+
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+	const struct cdrom_device_ops *ops;
+	struct list_head list;
+	struct gendisk *disk;
+	void *handle;
+	int mask;
+	int speed;
+	int capacity;
+	unsigned int options: 30;
+	unsigned int mc_flags: 2;
+	unsigned int vfs_events;
+	unsigned int ioctl_events;
+	int use_count;
+	char name[20];
+	__u8 sanyo_slot: 2;
+	__u8 keeplocked: 1;
+	__u8 reserved: 5;
+	int cdda_method;
+	__u8 last_sense;
+	__u8 media_written;
+	short unsigned int mmc3_profile;
+	int for_data;
+	int (*exit)(struct cdrom_device_info *);
+	int mrw_mode_page;
+	__s64 last_media_change_ms;
+};
+
+struct cdrom_msf0 {
+	__u8 minute;
+	__u8 second;
+	__u8 frame;
+};
+
+union cdrom_addr {
+	struct cdrom_msf0 msf;
+	int lba;
+};
+
+struct cdrom_ti {
+	__u8 cdti_trk0;
+	__u8 cdti_ind0;
+	__u8 cdti_trk1;
+	__u8 cdti_ind1;
+};
+
+struct cdrom_tochdr {
+	__u8 cdth_trk0;
+	__u8 cdth_trk1;
+};
+
+struct cdrom_tocentry {
+	__u8 cdte_track;
+	__u8 cdte_adr: 4;
+	__u8 cdte_ctrl: 4;
+	__u8 cdte_format;
+	union cdrom_addr cdte_addr;
+	__u8 cdte_datamode;
+};
+
+struct cdrom_multisession {
+	union cdrom_addr addr;
+	__u8 xa_flag;
+	__u8 addr_format;
+};
+
+struct cdrom_mcn {
+	__u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct scsi_sense_hdr *sshdr;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	void *reserved[1];
+};
+
+struct cdrom_device_ops {
+	int (*open)(struct cdrom_device_info *, int);
+	void (*release)(struct cdrom_device_info *);
+	int (*drive_status)(struct cdrom_device_info *, int);
+	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+	int (*tray_move)(struct cdrom_device_info *, int);
+	int (*lock_door)(struct cdrom_device_info *, int);
+	int (*select_speed)(struct cdrom_device_info *, int);
+	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+	int (*reset)(struct cdrom_device_info *);
+	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+	int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+	const int capability;
+};
+
+struct media_event_desc {
+	__u8 media_event_code: 4;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 media_present: 1;
+	__u8 reserved2: 6;
+	__u8 start_slot;
+	__u8 end_slot;
+};
+
+struct scsi_cd {
+	unsigned int capacity;
+	struct scsi_device *device;
+	unsigned int vendor;
+	long unsigned int ms_offset;
+	unsigned int writeable: 1;
+	unsigned int use: 1;
+	unsigned int xa_flag: 1;
+	unsigned int readcd_known: 1;
+	unsigned int readcd_cdda: 1;
+	unsigned int media_present: 1;
+	int tur_mismatch;
+	bool tur_changed: 1;
+	bool get_event_changed: 1;
+	bool ignore_get_event: 1;
+	struct cdrom_device_info cdi;
+	struct mutex lock;
+	struct gendisk *disk;
+};
+
+typedef struct scsi_cd Scsi_CD;
+
+enum {
+	ATA_MAX_DEVICES = 2,
+	ATA_MAX_PRD = 256,
+	ATA_SECT_SIZE = 512,
+	ATA_MAX_SECTORS_128 = 128,
+	ATA_MAX_SECTORS = 256,
+	ATA_MAX_SECTORS_1024 = 1024,
+	ATA_MAX_SECTORS_LBA48 = 65535,
+	ATA_MAX_SECTORS_TAPE = 65535,
+	ATA_MAX_TRIM_RNUM = 64,
+	ATA_ID_WORDS = 256,
+	ATA_ID_CONFIG = 0,
+	ATA_ID_CYLS = 1,
+	ATA_ID_HEADS = 3,
+	ATA_ID_SECTORS = 6,
+	ATA_ID_SERNO = 10,
+	ATA_ID_BUF_SIZE = 21,
+	ATA_ID_FW_REV = 23,
+	ATA_ID_PROD = 27,
+	ATA_ID_MAX_MULTSECT = 47,
+	ATA_ID_DWORD_IO = 48,
+	ATA_ID_TRUSTED = 48,
+	ATA_ID_CAPABILITY = 49,
+	ATA_ID_OLD_PIO_MODES = 51,
+	ATA_ID_OLD_DMA_MODES = 52,
+	ATA_ID_FIELD_VALID = 53,
+	ATA_ID_CUR_CYLS = 54,
+	ATA_ID_CUR_HEADS = 55,
+	ATA_ID_CUR_SECTORS = 56,
+	ATA_ID_MULTSECT = 59,
+	ATA_ID_LBA_CAPACITY = 60,
+	ATA_ID_SWDMA_MODES = 62,
+	ATA_ID_MWDMA_MODES = 63,
+	ATA_ID_PIO_MODES = 64,
+	ATA_ID_EIDE_DMA_MIN = 65,
+	ATA_ID_EIDE_DMA_TIME = 66,
+	ATA_ID_EIDE_PIO = 67,
+	ATA_ID_EIDE_PIO_IORDY = 68,
+	ATA_ID_ADDITIONAL_SUPP = 69,
+	ATA_ID_QUEUE_DEPTH = 75,
+	ATA_ID_SATA_CAPABILITY = 76,
+	ATA_ID_SATA_CAPABILITY_2 = 77,
+	ATA_ID_FEATURE_SUPP = 78,
+	ATA_ID_MAJOR_VER = 80,
+	ATA_ID_COMMAND_SET_1 = 82,
+	ATA_ID_COMMAND_SET_2 = 83,
+	ATA_ID_CFSSE = 84,
+	ATA_ID_CFS_ENABLE_1 = 85,
+	ATA_ID_CFS_ENABLE_2 = 86,
+	ATA_ID_CSF_DEFAULT = 87,
+	ATA_ID_UDMA_MODES = 88,
+	ATA_ID_HW_CONFIG = 93,
+	ATA_ID_SPG = 98,
+	ATA_ID_LBA_CAPACITY_2 = 100,
+	ATA_ID_SECTOR_SIZE = 106,
+	ATA_ID_WWN = 108,
+	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+	ATA_ID_COMMAND_SET_3 = 119,
+	ATA_ID_COMMAND_SET_4 = 120,
+	ATA_ID_LAST_LUN = 126,
+	ATA_ID_DLF = 128,
+	ATA_ID_CSFO = 129,
+	ATA_ID_CFA_POWER = 160,
+	ATA_ID_CFA_KEY_MGMT = 162,
+	ATA_ID_CFA_MODES = 163,
+	ATA_ID_DATA_SET_MGMT = 169,
+	ATA_ID_SCT_CMD_XPORT = 206,
+	ATA_ID_ROT_SPEED = 217,
+	ATA_ID_PIO4 = 2,
+	ATA_ID_SERNO_LEN = 20,
+	ATA_ID_FW_REV_LEN = 8,
+	ATA_ID_PROD_LEN = 40,
+	ATA_ID_WWN_LEN = 8,
+	ATA_PCI_CTL_OFS = 2,
+	ATA_PIO0 = 1,
+	ATA_PIO1 = 3,
+	ATA_PIO2 = 7,
+	ATA_PIO3 = 15,
+	ATA_PIO4 = 31,
+	ATA_PIO5 = 63,
+	ATA_PIO6 = 127,
+	ATA_PIO4_ONLY = 16,
+	ATA_SWDMA0 = 1,
+	ATA_SWDMA1 = 3,
+	ATA_SWDMA2 = 7,
+	ATA_SWDMA2_ONLY = 4,
+	ATA_MWDMA0 = 1,
+	ATA_MWDMA1 = 3,
+	ATA_MWDMA2 = 7,
+	ATA_MWDMA3 = 15,
+	ATA_MWDMA4 = 31,
+	ATA_MWDMA12_ONLY = 6,
+	ATA_MWDMA2_ONLY = 4,
+	ATA_UDMA0 = 1,
+	ATA_UDMA1 = 3,
+	ATA_UDMA2 = 7,
+	ATA_UDMA3 = 15,
+	ATA_UDMA4 = 31,
+	ATA_UDMA5 = 63,
+	ATA_UDMA6 = 127,
+	ATA_UDMA7 = 255,
+	ATA_UDMA24_ONLY = 20,
+	ATA_UDMA_MASK_40C = 7,
+	ATA_PRD_SZ = 8,
+	ATA_PRD_TBL_SZ = 2048,
+	ATA_PRD_EOT = 2147483648,
+	ATA_DMA_TABLE_OFS = 4,
+	ATA_DMA_STATUS = 2,
+	ATA_DMA_CMD = 0,
+	ATA_DMA_WR = 8,
+	ATA_DMA_START = 1,
+	ATA_DMA_INTR = 4,
+	ATA_DMA_ERR = 2,
+	ATA_DMA_ACTIVE = 1,
+	ATA_HOB = 128,
+	ATA_NIEN = 2,
+	ATA_LBA = 64,
+	ATA_DEV1 = 16,
+	ATA_DEVICE_OBS = 160,
+	ATA_DEVCTL_OBS = 8,
+	ATA_BUSY = 128,
+	ATA_DRDY = 64,
+	ATA_DF = 32,
+	ATA_DSC = 16,
+	ATA_DRQ = 8,
+	ATA_CORR = 4,
+	ATA_SENSE = 2,
+	ATA_ERR = 1,
+	ATA_SRST = 4,
+	ATA_ICRC = 128,
+	ATA_BBK = 128,
+	ATA_UNC = 64,
+	ATA_MC = 32,
+	ATA_IDNF = 16,
+	ATA_MCR = 8,
+	ATA_ABORTED = 4,
+	ATA_TRK0NF = 2,
+	ATA_AMNF = 1,
+	ATAPI_LFS = 240,
+	ATAPI_EOM = 2,
+	ATAPI_ILI = 1,
+	ATAPI_IO = 2,
+	ATAPI_COD = 1,
+	ATA_REG_DATA = 0,
+	ATA_REG_ERR = 1,
+	ATA_REG_NSECT = 2,
+	ATA_REG_LBAL = 3,
+	ATA_REG_LBAM = 4,
+	ATA_REG_LBAH = 5,
+	ATA_REG_DEVICE = 6,
+	ATA_REG_STATUS = 7,
+	ATA_REG_FEATURE = 1,
+	ATA_REG_CMD = 7,
+	ATA_REG_BYTEL = 4,
+	ATA_REG_BYTEH = 5,
+	ATA_REG_DEVSEL = 6,
+	ATA_REG_IRQ = 2,
+	ATA_CMD_DEV_RESET = 8,
+	ATA_CMD_CHK_POWER = 229,
+	ATA_CMD_STANDBY = 226,
+	ATA_CMD_IDLE = 227,
+	ATA_CMD_EDD = 144,
+	ATA_CMD_DOWNLOAD_MICRO = 146,
+	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+	ATA_CMD_NOP = 0,
+	ATA_CMD_FLUSH = 231,
+	ATA_CMD_FLUSH_EXT = 234,
+	ATA_CMD_ID_ATA = 236,
+	ATA_CMD_ID_ATAPI = 161,
+	ATA_CMD_SERVICE = 162,
+	ATA_CMD_READ = 200,
+	ATA_CMD_READ_EXT = 37,
+	ATA_CMD_READ_QUEUED = 38,
+	ATA_CMD_READ_STREAM_EXT = 43,
+	ATA_CMD_READ_STREAM_DMA_EXT = 42,
+	ATA_CMD_WRITE = 202,
+	ATA_CMD_WRITE_EXT = 53,
+	ATA_CMD_WRITE_QUEUED = 54,
+	ATA_CMD_WRITE_STREAM_EXT = 59,
+	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+	ATA_CMD_WRITE_FUA_EXT = 61,
+	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+	ATA_CMD_FPDMA_READ = 96,
+	ATA_CMD_FPDMA_WRITE = 97,
+	ATA_CMD_NCQ_NON_DATA = 99,
+	ATA_CMD_FPDMA_SEND = 100,
+	ATA_CMD_FPDMA_RECV = 101,
+	ATA_CMD_PIO_READ = 32,
+	ATA_CMD_PIO_READ_EXT = 36,
+	ATA_CMD_PIO_WRITE = 48,
+	ATA_CMD_PIO_WRITE_EXT = 52,
+	ATA_CMD_READ_MULTI = 196,
+	ATA_CMD_READ_MULTI_EXT = 41,
+	ATA_CMD_WRITE_MULTI = 197,
+	ATA_CMD_WRITE_MULTI_EXT = 57,
+	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+	ATA_CMD_SET_FEATURES = 239,
+	ATA_CMD_SET_MULTI = 198,
+	ATA_CMD_PACKET = 160,
+	ATA_CMD_VERIFY = 64,
+	ATA_CMD_VERIFY_EXT = 66,
+	ATA_CMD_WRITE_UNCORR_EXT = 69,
+	ATA_CMD_STANDBYNOW1 = 224,
+	ATA_CMD_IDLEIMMEDIATE = 225,
+	ATA_CMD_SLEEP = 230,
+	ATA_CMD_INIT_DEV_PARAMS = 145,
+	ATA_CMD_READ_NATIVE_MAX = 248,
+	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+	ATA_CMD_SET_MAX = 249,
+	ATA_CMD_SET_MAX_EXT = 55,
+	ATA_CMD_READ_LOG_EXT = 47,
+	ATA_CMD_WRITE_LOG_EXT = 63,
+	ATA_CMD_READ_LOG_DMA_EXT = 71,
+	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+	ATA_CMD_TRUSTED_NONDATA = 91,
+	ATA_CMD_TRUSTED_RCV = 92,
+	ATA_CMD_TRUSTED_RCV_DMA = 93,
+	ATA_CMD_TRUSTED_SND = 94,
+	ATA_CMD_TRUSTED_SND_DMA = 95,
+	ATA_CMD_PMP_READ = 228,
+	ATA_CMD_PMP_READ_DMA = 233,
+	ATA_CMD_PMP_WRITE = 232,
+	ATA_CMD_PMP_WRITE_DMA = 235,
+	ATA_CMD_CONF_OVERLAY = 177,
+	ATA_CMD_SEC_SET_PASS = 241,
+	ATA_CMD_SEC_UNLOCK = 242,
+	ATA_CMD_SEC_ERASE_PREP = 243,
+	ATA_CMD_SEC_ERASE_UNIT = 244,
+	ATA_CMD_SEC_FREEZE_LOCK = 245,
+	ATA_CMD_SEC_DISABLE_PASS = 246,
+	ATA_CMD_CONFIG_STREAM = 81,
+	ATA_CMD_SMART = 176,
+	ATA_CMD_MEDIA_LOCK = 222,
+	ATA_CMD_MEDIA_UNLOCK = 223,
+	ATA_CMD_DSM = 6,
+	ATA_CMD_CHK_MED_CRD_TYP = 209,
+	ATA_CMD_CFA_REQ_EXT_ERR = 3,
+	ATA_CMD_CFA_WRITE_NE = 56,
+	ATA_CMD_CFA_TRANS_SECT = 135,
+	ATA_CMD_CFA_ERASE = 192,
+	ATA_CMD_CFA_WRITE_MULT_NE = 205,
+	ATA_CMD_REQ_SENSE_DATA = 11,
+	ATA_CMD_SANITIZE_DEVICE = 180,
+	ATA_CMD_ZAC_MGMT_IN = 74,
+	ATA_CMD_ZAC_MGMT_OUT = 159,
+	ATA_CMD_RESTORE = 16,
+	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+	ATA_LOG_DIRECTORY = 0,
+	ATA_LOG_SATA_NCQ = 16,
+	ATA_LOG_NCQ_NON_DATA = 18,
+	ATA_LOG_NCQ_SEND_RECV = 19,
+	ATA_LOG_IDENTIFY_DEVICE = 48,
+	ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+	ATA_LOG_SECURITY = 6,
+	ATA_LOG_SATA_SETTINGS = 8,
+	ATA_LOG_ZONED_INFORMATION = 9,
+	ATA_LOG_DEVSLP_OFFSET = 48,
+	ATA_LOG_DEVSLP_SIZE = 8,
+	ATA_LOG_DEVSLP_MDAT = 0,
+	ATA_LOG_DEVSLP_MDAT_MASK = 31,
+	ATA_LOG_DEVSLP_DETO = 1,
+	ATA_LOG_DEVSLP_VALID = 7,
+	ATA_LOG_DEVSLP_VALID_MASK = 128,
+	ATA_LOG_NCQ_PRIO_OFFSET = 9,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+	ATA_CMD_READ_LONG = 34,
+	ATA_CMD_READ_LONG_ONCE = 35,
+	ATA_CMD_WRITE_LONG = 50,
+	ATA_CMD_WRITE_LONG_ONCE = 51,
+	SETFEATURES_XFER = 3,
+	XFER_UDMA_7 = 71,
+	XFER_UDMA_6 = 70,
+	XFER_UDMA_5 = 69,
+	XFER_UDMA_4 = 68,
+	XFER_UDMA_3 = 67,
+	XFER_UDMA_2 = 66,
+	XFER_UDMA_1 = 65,
+	XFER_UDMA_0 = 64,
+	XFER_MW_DMA_4 = 36,
+	XFER_MW_DMA_3 = 35,
+	XFER_MW_DMA_2 = 34,
+	XFER_MW_DMA_1 = 33,
+	XFER_MW_DMA_0 = 32,
+	XFER_SW_DMA_2 = 18,
+	XFER_SW_DMA_1 = 17,
+	XFER_SW_DMA_0 = 16,
+	XFER_PIO_6 = 14,
+	XFER_PIO_5 = 13,
+	XFER_PIO_4 = 12,
+	XFER_PIO_3 = 11,
+	XFER_PIO_2 = 10,
+	XFER_PIO_1 = 9,
+	XFER_PIO_0 = 8,
+	XFER_PIO_SLOW = 0,
+	SETFEATURES_WC_ON = 2,
+	SETFEATURES_WC_OFF = 130,
+	SETFEATURES_RA_ON = 170,
+	SETFEATURES_RA_OFF = 85,
+	SETFEATURES_AAM_ON = 66,
+	SETFEATURES_AAM_OFF = 194,
+	SETFEATURES_SPINUP = 7,
+	SETFEATURES_SPINUP_TIMEOUT = 30000,
+	SETFEATURES_SATA_ENABLE = 16,
+	SETFEATURES_SATA_DISABLE = 144,
+	SATA_FPDMA_OFFSET = 1,
+	SATA_FPDMA_AA = 2,
+	SATA_DIPM = 3,
+	SATA_FPDMA_IN_ORDER = 4,
+	SATA_AN = 5,
+	SATA_SSP = 6,
+	SATA_DEVSLP = 9,
+	SETFEATURE_SENSE_DATA = 195,
+	ATA_SET_MAX_ADDR = 0,
+	ATA_SET_MAX_PASSWD = 1,
+	ATA_SET_MAX_LOCK = 2,
+	ATA_SET_MAX_UNLOCK = 3,
+	ATA_SET_MAX_FREEZE_LOCK = 4,
+	ATA_SET_MAX_PASSWD_DMA = 5,
+	ATA_SET_MAX_UNLOCK_DMA = 6,
+	ATA_DCO_RESTORE = 192,
+	ATA_DCO_FREEZE_LOCK = 193,
+	ATA_DCO_IDENTIFY = 194,
+	ATA_DCO_SET = 195,
+	ATA_SMART_ENABLE = 216,
+	ATA_SMART_READ_VALUES = 208,
+	ATA_SMART_READ_THRESHOLDS = 209,
+	ATA_DSM_TRIM = 1,
+	ATA_SMART_LBAM_PASS = 79,
+	ATA_SMART_LBAH_PASS = 194,
+	ATAPI_PKT_DMA = 1,
+	ATAPI_DMADIR = 4,
+	ATAPI_CDB_LEN = 16,
+	SATA_PMP_MAX_PORTS = 15,
+	SATA_PMP_CTRL_PORT = 15,
+	SATA_PMP_GSCR_DWORDS = 128,
+	SATA_PMP_GSCR_PROD_ID = 0,
+	SATA_PMP_GSCR_REV = 1,
+	SATA_PMP_GSCR_PORT_INFO = 2,
+	SATA_PMP_GSCR_ERROR = 32,
+	SATA_PMP_GSCR_ERROR_EN = 33,
+	SATA_PMP_GSCR_FEAT = 64,
+	SATA_PMP_GSCR_FEAT_EN = 96,
+	SATA_PMP_PSCR_STATUS = 0,
+	SATA_PMP_PSCR_ERROR = 1,
+	SATA_PMP_PSCR_CONTROL = 2,
+	SATA_PMP_FEAT_BIST = 1,
+	SATA_PMP_FEAT_PMREQ = 2,
+	SATA_PMP_FEAT_DYNSSC = 4,
+	SATA_PMP_FEAT_NOTIFY = 8,
+	ATA_CBL_NONE = 0,
+	ATA_CBL_PATA40 = 1,
+	ATA_CBL_PATA80 = 2,
+	ATA_CBL_PATA40_SHORT = 3,
+	ATA_CBL_PATA_UNK = 4,
+	ATA_CBL_PATA_IGN = 5,
+	ATA_CBL_SATA = 6,
+	SCR_STATUS = 0,
+	SCR_ERROR = 1,
+	SCR_CONTROL = 2,
+	SCR_ACTIVE = 3,
+	SCR_NOTIFICATION = 4,
+	SERR_DATA_RECOVERED = 1,
+	SERR_COMM_RECOVERED = 2,
+	SERR_DATA = 256,
+	SERR_PERSISTENT = 512,
+	SERR_PROTOCOL = 1024,
+	SERR_INTERNAL = 2048,
+	SERR_PHYRDY_CHG = 65536,
+	SERR_PHY_INT_ERR = 131072,
+	SERR_COMM_WAKE = 262144,
+	SERR_10B_8B_ERR = 524288,
+	SERR_DISPARITY = 1048576,
+	SERR_CRC = 2097152,
+	SERR_HANDSHAKE = 4194304,
+	SERR_LINK_SEQ_ERR = 8388608,
+	SERR_TRANS_ST_ERROR = 16777216,
+	SERR_UNRECOG_FIS = 33554432,
+	SERR_DEV_XCHG = 67108864,
+};
+
+enum ata_prot_flags {
+	ATA_PROT_FLAG_PIO = 1,
+	ATA_PROT_FLAG_DMA = 2,
+	ATA_PROT_FLAG_NCQ = 4,
+	ATA_PROT_FLAG_ATAPI = 8,
+	ATA_PROT_UNKNOWN = 255,
+	ATA_PROT_NODATA = 0,
+	ATA_PROT_PIO = 1,
+	ATA_PROT_DMA = 2,
+	ATA_PROT_NCQ_NODATA = 4,
+	ATA_PROT_NCQ = 6,
+	ATAPI_PROT_NODATA = 8,
+	ATAPI_PROT_PIO = 9,
+	ATAPI_PROT_DMA = 10,
+};
+
+struct ata_bmdma_prd {
+	__le32 addr;
+	__le32 flags_len;
+};
+
+typedef u64 async_cookie_t;
+
+enum {
+	LIBATA_MAX_PRD = 128,
+	LIBATA_DUMB_MAX_PRD = 64,
+	ATA_DEF_QUEUE = 1,
+	ATA_MAX_QUEUE = 32,
+	ATA_TAG_INTERNAL = 32,
+	ATA_SHORT_PAUSE = 16,
+	ATAPI_MAX_DRAIN = 16384,
+	ATA_ALL_DEVICES = 3,
+	ATA_SHT_EMULATED = 1,
+	ATA_SHT_THIS_ID = 4294967295,
+	ATA_TFLAG_LBA48 = 1,
+	ATA_TFLAG_ISADDR = 2,
+	ATA_TFLAG_DEVICE = 4,
+	ATA_TFLAG_WRITE = 8,
+	ATA_TFLAG_LBA = 16,
+	ATA_TFLAG_FUA = 32,
+	ATA_TFLAG_POLLING = 64,
+	ATA_DFLAG_LBA = 1,
+	ATA_DFLAG_LBA48 = 2,
+	ATA_DFLAG_CDB_INTR = 4,
+	ATA_DFLAG_NCQ = 8,
+	ATA_DFLAG_FLUSH_EXT = 16,
+	ATA_DFLAG_ACPI_PENDING = 32,
+	ATA_DFLAG_ACPI_FAILED = 64,
+	ATA_DFLAG_AN = 128,
+	ATA_DFLAG_TRUSTED = 256,
+	ATA_DFLAG_DMADIR = 1024,
+	ATA_DFLAG_CFG_MASK = 4095,
+	ATA_DFLAG_PIO = 4096,
+	ATA_DFLAG_NCQ_OFF = 8192,
+	ATA_DFLAG_SLEEPING = 32768,
+	ATA_DFLAG_DUBIOUS_XFER = 65536,
+	ATA_DFLAG_NO_UNLOAD = 131072,
+	ATA_DFLAG_UNLOCK_HPA = 262144,
+	ATA_DFLAG_NCQ_SEND_RECV = 524288,
+	ATA_DFLAG_NCQ_PRIO = 1048576,
+	ATA_DFLAG_NCQ_PRIO_ENABLE = 2097152,
+	ATA_DFLAG_INIT_MASK = 16777215,
+	ATA_DFLAG_DETACH = 16777216,
+	ATA_DFLAG_DETACHED = 33554432,
+	ATA_DFLAG_DA = 67108864,
+	ATA_DFLAG_DEVSLP = 134217728,
+	ATA_DFLAG_ACPI_DISABLED = 268435456,
+	ATA_DFLAG_D_SENSE = 536870912,
+	ATA_DFLAG_ZAC = 1073741824,
+	ATA_DFLAG_FEATURES_MASK = 202899712,
+	ATA_DEV_UNKNOWN = 0,
+	ATA_DEV_ATA = 1,
+	ATA_DEV_ATA_UNSUP = 2,
+	ATA_DEV_ATAPI = 3,
+	ATA_DEV_ATAPI_UNSUP = 4,
+	ATA_DEV_PMP = 5,
+	ATA_DEV_PMP_UNSUP = 6,
+	ATA_DEV_SEMB = 7,
+	ATA_DEV_SEMB_UNSUP = 8,
+	ATA_DEV_ZAC = 9,
+	ATA_DEV_ZAC_UNSUP = 10,
+	ATA_DEV_NONE = 11,
+	ATA_LFLAG_NO_HRST = 2,
+	ATA_LFLAG_NO_SRST = 4,
+	ATA_LFLAG_ASSUME_ATA = 8,
+	ATA_LFLAG_ASSUME_SEMB = 16,
+	ATA_LFLAG_ASSUME_CLASS = 24,
+	ATA_LFLAG_NO_RETRY = 32,
+	ATA_LFLAG_DISABLED = 64,
+	ATA_LFLAG_SW_ACTIVITY = 128,
+	ATA_LFLAG_NO_LPM = 256,
+	ATA_LFLAG_RST_ONCE = 512,
+	ATA_LFLAG_CHANGED = 1024,
+	ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+	ATA_FLAG_SLAVE_POSS = 1,
+	ATA_FLAG_SATA = 2,
+	ATA_FLAG_NO_LPM = 4,
+	ATA_FLAG_NO_LOG_PAGE = 32,
+	ATA_FLAG_NO_ATAPI = 64,
+	ATA_FLAG_PIO_DMA = 128,
+	ATA_FLAG_PIO_LBA48 = 256,
+	ATA_FLAG_PIO_POLLING = 512,
+	ATA_FLAG_NCQ = 1024,
+	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+	ATA_FLAG_DEBUGMSG = 8192,
+	ATA_FLAG_FPDMA_AA = 16384,
+	ATA_FLAG_IGN_SIMPLEX = 32768,
+	ATA_FLAG_NO_IORDY = 65536,
+	ATA_FLAG_ACPI_SATA = 131072,
+	ATA_FLAG_AN = 262144,
+	ATA_FLAG_PMP = 524288,
+	ATA_FLAG_FPDMA_AUX = 1048576,
+	ATA_FLAG_EM = 2097152,
+	ATA_FLAG_SW_ACTIVITY = 4194304,
+	ATA_FLAG_NO_DIPM = 8388608,
+	ATA_FLAG_SAS_HOST = 16777216,
+	ATA_PFLAG_EH_PENDING = 1,
+	ATA_PFLAG_EH_IN_PROGRESS = 2,
+	ATA_PFLAG_FROZEN = 4,
+	ATA_PFLAG_RECOVERED = 8,
+	ATA_PFLAG_LOADING = 16,
+	ATA_PFLAG_SCSI_HOTPLUG = 64,
+	ATA_PFLAG_INITIALIZING = 128,
+	ATA_PFLAG_RESETTING = 256,
+	ATA_PFLAG_UNLOADING = 512,
+	ATA_PFLAG_UNLOADED = 1024,
+	ATA_PFLAG_SUSPENDED = 131072,
+	ATA_PFLAG_PM_PENDING = 262144,
+	ATA_PFLAG_INIT_GTM_VALID = 524288,
+	ATA_PFLAG_PIO32 = 1048576,
+	ATA_PFLAG_PIO32CHANGE = 2097152,
+	ATA_PFLAG_EXTERNAL = 4194304,
+	ATA_QCFLAG_ACTIVE = 1,
+	ATA_QCFLAG_DMAMAP = 2,
+	ATA_QCFLAG_IO = 8,
+	ATA_QCFLAG_RESULT_TF = 16,
+	ATA_QCFLAG_CLEAR_EXCL = 32,
+	ATA_QCFLAG_QUIET = 64,
+	ATA_QCFLAG_RETRY = 128,
+	ATA_QCFLAG_FAILED = 65536,
+	ATA_QCFLAG_SENSE_VALID = 131072,
+	ATA_QCFLAG_EH_SCHEDULED = 262144,
+	ATA_HOST_SIMPLEX = 1,
+	ATA_HOST_STARTED = 2,
+	ATA_HOST_PARALLEL_SCAN = 4,
+	ATA_HOST_IGNORE_ATA = 8,
+	ATA_TMOUT_BOOT = 30000,
+	ATA_TMOUT_BOOT_QUICK = 7000,
+	ATA_TMOUT_INTERNAL_QUICK = 5000,
+	ATA_TMOUT_MAX_PARK = 30000,
+	ATA_TMOUT_FF_WAIT_LONG = 2000,
+	ATA_TMOUT_FF_WAIT = 800,
+	ATA_WAIT_AFTER_RESET = 150,
+	ATA_TMOUT_PMP_SRST_WAIT = 5000,
+	ATA_TMOUT_SPURIOUS_PHY = 10000,
+	BUS_UNKNOWN = 0,
+	BUS_DMA = 1,
+	BUS_IDLE = 2,
+	BUS_NOINTR = 3,
+	BUS_NODATA = 4,
+	BUS_TIMER = 5,
+	BUS_PIO = 6,
+	BUS_EDD = 7,
+	BUS_IDENTIFY = 8,
+	BUS_PACKET = 9,
+	PORT_UNKNOWN = 0,
+	PORT_ENABLED = 1,
+	PORT_DISABLED = 2,
+	ATA_NR_PIO_MODES = 7,
+	ATA_NR_MWDMA_MODES = 5,
+	ATA_NR_UDMA_MODES = 8,
+	ATA_SHIFT_PIO = 0,
+	ATA_SHIFT_MWDMA = 7,
+	ATA_SHIFT_UDMA = 12,
+	ATA_SHIFT_PRIO = 6,
+	ATA_PRIO_HIGH = 2,
+	ATA_DMA_PAD_SZ = 4,
+	ATA_ERING_SIZE = 32,
+	ATA_DEFER_LINK = 1,
+	ATA_DEFER_PORT = 2,
+	ATA_EH_DESC_LEN = 80,
+	ATA_EH_REVALIDATE = 1,
+	ATA_EH_SOFTRESET = 2,
+	ATA_EH_HARDRESET = 4,
+	ATA_EH_RESET = 6,
+	ATA_EH_ENABLE_LINK = 8,
+	ATA_EH_PARK = 32,
+	ATA_EH_PERDEV_MASK = 33,
+	ATA_EH_ALL_ACTIONS = 15,
+	ATA_EHI_HOTPLUGGED = 1,
+	ATA_EHI_NO_AUTOPSY = 4,
+	ATA_EHI_QUIET = 8,
+	ATA_EHI_NO_RECOVERY = 16,
+	ATA_EHI_DID_SOFTRESET = 65536,
+	ATA_EHI_DID_HARDRESET = 131072,
+	ATA_EHI_PRINTINFO = 262144,
+	ATA_EHI_SETMODE = 524288,
+	ATA_EHI_POST_SETMODE = 1048576,
+	ATA_EHI_DID_RESET = 196608,
+	ATA_EHI_TO_SLAVE_MASK = 12,
+	ATA_EH_MAX_TRIES = 5,
+	ATA_LINK_RESUME_TRIES = 5,
+	ATA_PROBE_MAX_TRIES = 3,
+	ATA_EH_DEV_TRIES = 3,
+	ATA_EH_PMP_TRIES = 5,
+	ATA_EH_PMP_LINK_TRIES = 3,
+	SATA_PMP_RW_TIMEOUT = 3000,
+	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
+	ATA_HORKAGE_DIAGNOSTIC = 1,
+	ATA_HORKAGE_NODMA = 2,
+	ATA_HORKAGE_NONCQ = 4,
+	ATA_HORKAGE_MAX_SEC_128 = 8,
+	ATA_HORKAGE_BROKEN_HPA = 16,
+	ATA_HORKAGE_DISABLE = 32,
+	ATA_HORKAGE_HPA_SIZE = 64,
+	ATA_HORKAGE_IVB = 256,
+	ATA_HORKAGE_STUCK_ERR = 512,
+	ATA_HORKAGE_BRIDGE_OK = 1024,
+	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
+	ATA_HORKAGE_FIRMWARE_WARN = 4096,
+	ATA_HORKAGE_1_5_GBPS = 8192,
+	ATA_HORKAGE_NOSETXFER = 16384,
+	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
+	ATA_HORKAGE_DUMP_ID = 65536,
+	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
+	ATA_HORKAGE_ATAPI_DMADIR = 262144,
+	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
+	ATA_HORKAGE_NOLPM = 1048576,
+	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
+	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
+	ATA_HORKAGE_NO_DMA_LOG = 8388608,
+	ATA_HORKAGE_NOTRIM = 16777216,
+	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
+	ATA_HORKAGE_MAX_TRIM_128M = 67108864,
+	ATA_HORKAGE_NO_NCQ_ON_ATI = 134217728,
+	ATA_HORKAGE_NO_ID_DEV_LOG = 268435456,
+	ATA_HORKAGE_NO_LOG_DIR = 536870912,
+	ATA_DMA_MASK_ATA = 1,
+	ATA_DMA_MASK_ATAPI = 2,
+	ATA_DMA_MASK_CFA = 4,
+	ATAPI_READ = 0,
+	ATAPI_WRITE = 1,
+	ATAPI_READ_CD = 2,
+	ATAPI_PASS_THRU = 3,
+	ATAPI_MISC = 4,
+	ATA_TIMING_SETUP = 1,
+	ATA_TIMING_ACT8B = 2,
+	ATA_TIMING_REC8B = 4,
+	ATA_TIMING_CYC8B = 8,
+	ATA_TIMING_8BIT = 14,
+	ATA_TIMING_ACTIVE = 16,
+	ATA_TIMING_RECOVER = 32,
+	ATA_TIMING_DMACK_HOLD = 64,
+	ATA_TIMING_CYCLE = 128,
+	ATA_TIMING_UDMA = 256,
+	ATA_TIMING_ALL = 511,
+	ATA_ACPI_FILTER_SETXFER = 1,
+	ATA_ACPI_FILTER_LOCK = 2,
+	ATA_ACPI_FILTER_DIPM = 4,
+	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+	ATA_ACPI_FILTER_FPDMA_AA = 16,
+	ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum hsm_task_states {
+	HSM_ST_IDLE = 0,
+	HSM_ST_FIRST = 1,
+	HSM_ST = 2,
+	HSM_ST_LAST = 3,
+	HSM_ST_ERR = 4,
+};
+
+enum ata_completion_errors {
+	AC_ERR_OK = 0,
+	AC_ERR_DEV = 1,
+	AC_ERR_HSM = 2,
+	AC_ERR_TIMEOUT = 4,
+	AC_ERR_MEDIA = 8,
+	AC_ERR_ATA_BUS = 16,
+	AC_ERR_HOST_BUS = 32,
+	AC_ERR_SYSTEM = 64,
+	AC_ERR_INVALID = 128,
+	AC_ERR_OTHER = 256,
+	AC_ERR_NODEV_HINT = 512,
+	AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+	ATA_LPM_UNKNOWN = 0,
+	ATA_LPM_MAX_POWER = 1,
+	ATA_LPM_MED_POWER = 2,
+	ATA_LPM_MED_POWER_WITH_DIPM = 3,
+	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+	ATA_LPM_MIN_POWER = 5,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
+	long unsigned int flags;
+	u8 protocol;
+	u8 ctl;
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+	union {
+		u8 error;
+		u8 feature;
+	};
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	union {
+		u8 status;
+		u8 command;
+	};
+	u32 auxiliary;
+};
+
+struct ata_port;
+
+struct ata_device;
+
+struct ata_queued_cmd {
+	struct ata_port *ap;
+	struct ata_device *dev;
+	struct scsi_cmnd *scsicmd;
+	void (*scsidone)(struct scsi_cmnd *);
+	struct ata_taskfile tf;
+	u8 cdb[16];
+	long unsigned int flags;
+	unsigned int tag;
+	unsigned int hw_tag;
+	unsigned int n_elem;
+	unsigned int orig_n_elem;
+	int dma_dir;
+	unsigned int sect_size;
+	unsigned int nbytes;
+	unsigned int extrabytes;
+	unsigned int curbytes;
+	struct scatterlist sgent;
+	struct scatterlist *sg;
+	struct scatterlist *cursg;
+	unsigned int cursg_ofs;
+	unsigned int err_mask;
+	struct ata_taskfile result_tf;
+	ata_qc_cb_t complete_fn;
+	void *private_data;
+	void *lldd_task;
+};
+
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+	struct ata_device *dev;
+	u32 serror;
+	unsigned int err_mask;
+	unsigned int action;
+	unsigned int dev_action[2];
+	unsigned int flags;
+	unsigned int probe_mask;
+	char desc[80];
+	int desc_len;
+};
+
+struct ata_eh_context {
+	struct ata_eh_info i;
+	int tries[2];
+	int cmd_timeout_idx[14];
+	unsigned int classes[2];
+	unsigned int did_probe_mask;
+	unsigned int unloaded_mask;
+	unsigned int saved_ncq_enabled;
+	u8 saved_xfer_mode[2];
+	long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+	unsigned int eflags;
+	unsigned int err_mask;
+	u64 timestamp;
+};
+
+struct ata_ering {
+	int cursor;
+	struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_device {
+	struct ata_link *link;
+	unsigned int devno;
+	unsigned int horkage;
+	long unsigned int flags;
+	struct scsi_device *sdev;
+	void *private_data;
+	union acpi_object *gtf_cache;
+	unsigned int gtf_filter;
+	struct device tdev;
+	u64 n_sectors;
+	u64 n_native_sectors;
+	unsigned int class;
+	long unsigned int unpark_deadline;
+	u8 pio_mode;
+	u8 dma_mode;
+	u8 xfer_mode;
+	unsigned int xfer_shift;
+	unsigned int multi_count;
+	unsigned int max_sectors;
+	unsigned int cdb_len;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	u16 cylinders;
+	u16 heads;
+	u16 sectors;
+	long: 16;
+	long: 64;
+	union {
+		u16 id[256];
+		u32 gscr[128];
+	};
+	u8 devslp_timing[8];
+	u8 ncq_send_recv_cmds[20];
+	u8 ncq_non_data_cmds[64];
+	u32 zac_zoned_cap;
+	u32 zac_zones_optimal_open;
+	u32 zac_zones_optimal_nonseq;
+	u32 zac_zones_max_open;
+	struct ata_cpr_log *cpr_log;
+	int spdn_cnt;
+	struct ata_ering ering;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ata_link {
+	struct ata_port *ap;
+	int pmp;
+	struct device tdev;
+	unsigned int active_tag;
+	u32 sactive;
+	unsigned int flags;
+	u32 saved_scontrol;
+	unsigned int hw_sata_spd_limit;
+	unsigned int sata_spd_limit;
+	unsigned int sata_spd;
+	enum ata_lpm_policy lpm_policy;
+	struct ata_eh_info eh_info;
+	struct ata_eh_context eh_context;
+	long: 64;
+	struct ata_device device[2];
+	long unsigned int last_lpm_change;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+	OFF = 0,
+	BLINK_ON = 1,
+	BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+	void *cmd_addr;
+	void *data_addr;
+	void *error_addr;
+	void *feature_addr;
+	void *nsect_addr;
+	void *lbal_addr;
+	void *lbam_addr;
+	void *lbah_addr;
+	void *device_addr;
+	void *status_addr;
+	void *command_addr;
+	void *altstatus_addr;
+	void *ctl_addr;
+	void *bmdma_addr;
+	void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+	spinlock_t lock;
+	struct device *dev;
+	void * const *iomap;
+	unsigned int n_ports;
+	unsigned int n_tags;
+	void *private_data;
+	struct ata_port_operations *ops;
+	long unsigned int flags;
+	struct kref kref;
+	struct mutex eh_mutex;
+	struct task_struct *eh_owner;
+	struct ata_port *simplex_claimed;
+	struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+	int (*qc_defer)(struct ata_queued_cmd *);
+	int (*check_atapi_dma)(struct ata_queued_cmd *);
+	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+	unsigned int (*qc_issue)(struct ata_queued_cmd *);
+	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
+	int (*cable_detect)(struct ata_port *);
+	unsigned int (*mode_filter)(struct ata_device *, unsigned int);
+	void (*set_piomode)(struct ata_port *, struct ata_device *);
+	void (*set_dmamode)(struct ata_port *, struct ata_device *);
+	int (*set_mode)(struct ata_link *, struct ata_device **);
+	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+	void (*dev_config)(struct ata_device *);
+	void (*freeze)(struct ata_port *);
+	void (*thaw)(struct ata_port *);
+	ata_prereset_fn_t prereset;
+	ata_reset_fn_t softreset;
+	ata_reset_fn_t hardreset;
+	ata_postreset_fn_t postreset;
+	ata_prereset_fn_t pmp_prereset;
+	ata_reset_fn_t pmp_softreset;
+	ata_reset_fn_t pmp_hardreset;
+	ata_postreset_fn_t pmp_postreset;
+	void (*error_handler)(struct ata_port *);
+	void (*lost_interrupt)(struct ata_port *);
+	void (*post_internal_cmd)(struct ata_queued_cmd *);
+	void (*sched_eh)(struct ata_port *);
+	void (*end_eh)(struct ata_port *);
+	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+	int (*scr_write)(struct ata_link *, unsigned int, u32);
+	void (*pmp_attach)(struct ata_port *);
+	void (*pmp_detach)(struct ata_port *);
+	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+	int (*port_suspend)(struct ata_port *, pm_message_t);
+	int (*port_resume)(struct ata_port *);
+	int (*port_start)(struct ata_port *);
+	void (*port_stop)(struct ata_port *);
+	void (*host_stop)(struct ata_host *);
+	void (*sff_dev_select)(struct ata_port *, unsigned int);
+	void (*sff_set_devctl)(struct ata_port *, u8);
+	u8 (*sff_check_status)(struct ata_port *);
+	u8 (*sff_check_altstatus)(struct ata_port *);
+	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+	void (*sff_irq_on)(struct ata_port *);
+	bool (*sff_irq_check)(struct ata_port *);
+	void (*sff_irq_clear)(struct ata_port *);
+	void (*sff_drain_fifo)(struct ata_queued_cmd *);
+	void (*bmdma_setup)(struct ata_queued_cmd *);
+	void (*bmdma_start)(struct ata_queued_cmd *);
+	void (*bmdma_stop)(struct ata_queued_cmd *);
+	u8 (*bmdma_status)(struct ata_port *);
+	ssize_t (*em_show)(struct ata_port *, char *);
+	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+	ssize_t (*sw_activity_show)(struct ata_device *, char *);
+	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+	void (*phy_reset)(struct ata_port *);
+	void (*eng_timeout)(struct ata_port *);
+	const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+	long unsigned int unhandled_irq;
+	long unsigned int idle_irq;
+	long unsigned int rw_reqbuf;
+};
+
+struct ata_acpi_drive {
+	u32 pio;
+	u32 dma;
+};
+
+struct ata_acpi_gtm {
+	struct ata_acpi_drive drive[2];
+	u32 flags;
+};
+
+struct ata_port {
+	struct Scsi_Host *scsi_host;
+	struct ata_port_operations *ops;
+	spinlock_t *lock;
+	long unsigned int flags;
+	unsigned int pflags;
+	unsigned int print_id;
+	unsigned int local_port_no;
+	unsigned int port_no;
+	struct ata_ioports ioaddr;
+	u8 ctl;
+	u8 last_ctl;
+	struct ata_link *sff_pio_task_link;
+	struct delayed_work sff_pio_task;
+	struct ata_bmdma_prd *bmdma_prd;
+	dma_addr_t bmdma_prd_dma;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	unsigned int cbl;
+	struct ata_queued_cmd qcmd[33];
+	u64 qc_active;
+	int nr_active_links;
+	long: 32;
+	long: 64;
+	long: 64;
+	struct ata_link link;
+	struct ata_link *slave_link;
+	int nr_pmp_links;
+	struct ata_link *pmp_link;
+	struct ata_link *excl_link;
+	struct ata_port_stats stats;
+	struct ata_host *host;
+	struct device *dev;
+	struct device tdev;
+	struct mutex scsi_scan_mutex;
+	struct delayed_work hotplug_task;
+	struct work_struct scsi_rescan_task;
+	unsigned int hsm_task_state;
+	struct list_head eh_done_q;
+	wait_queue_head_t eh_wait_q;
+	int eh_tries;
+	struct completion park_req_pending;
+	pm_message_t pm_mesg;
+	enum ata_lpm_policy target_lpm_policy;
+	struct timer_list fastdrain_timer;
+	unsigned int fastdrain_cnt;
+	async_cookie_t cookie;
+	int em_message_type;
+	void *private_data;
+	struct ata_acpi_gtm __acpi_init_gtm;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 sector_buf[512];
+};
+
+struct ata_cpr {
+	u8 num;
+	u8 num_storage_elements;
+	u64 start_lba;
+	u64 num_lbas;
+};
+
+struct ata_cpr_log {
+	u8 nr_cpr;
+	struct ata_cpr cpr[0];
+};
+
+struct ata_port_info {
+	long unsigned int flags;
+	long unsigned int link_flags;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	struct ata_port_operations *port_ops;
+	void *private_data;
+};
+
+struct pci_bits {
+	unsigned int reg;
+	unsigned int width;
+	long unsigned int mask;
+	long unsigned int val;
+};
+
+enum {
+	PIIX_IOCFG = 84,
+	ICH5_PMR = 144,
+	ICH5_PCS = 146,
+	PIIX_SIDPR_BAR = 5,
+	PIIX_SIDPR_LEN = 16,
+	PIIX_SIDPR_IDX = 0,
+	PIIX_SIDPR_DATA = 4,
+	PIIX_FLAG_CHECKINTR = 268435456,
+	PIIX_FLAG_SIDPR = 536870912,
+	PIIX_PATA_FLAGS = 1,
+	PIIX_SATA_FLAGS = 268435458,
+	PIIX_FLAG_PIO16 = 1073741824,
+	PIIX_80C_PRI = 48,
+	PIIX_80C_SEC = 192,
+	P0 = 0,
+	P1 = 1,
+	P2 = 2,
+	P3 = 3,
+	IDE = 4294967295,
+	NA = 4294967294,
+	RV = 4294967293,
+	PIIX_AHCI_DEVICE = 6,
+	PIIX_HOST_BROKEN_SUSPEND = 16777216,
+};
+
+enum piix_controller_ids {
+	piix_pata_mwdma = 0,
+	piix_pata_33 = 1,
+	ich_pata_33 = 2,
+	ich_pata_66 = 3,
+	ich_pata_100 = 4,
+	ich_pata_100_nomwdma1 = 5,
+	ich5_sata = 6,
+	ich6_sata = 7,
+	ich6m_sata = 8,
+	ich8_sata = 9,
+	ich8_2port_sata = 10,
+	ich8m_apple_sata = 11,
+	tolapai_sata = 12,
+	piix_pata_vmw = 13,
+	ich8_sata_snb = 14,
+	ich8_2port_sata_snb = 15,
+	ich8_2port_sata_byt = 16,
+};
+
+struct piix_map_db {
+	const u32 mask;
+	const u16 port_enable;
+	const int map[0];
+};
+
+struct piix_host_priv {
+	const int *map;
+	u32 saved_iocfg;
+	void *sidpr;
+};
+
+struct ich_laptop {
+	u16 device;
+	u16 subvendor;
+	u16 subdevice;
+};
+
+struct mii_bus;
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct phy_package_shared;
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22 = 1,
+		MDIOBUS_C45 = 2,
+		MDIOBUS_C22_C45 = 3,
+	} probe_capabilities;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	long unsigned int flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_UP = 3,
+	PHY_RUNNING = 4,
+	PHY_NOLINK = 5,
+	PHY_CABLETEST = 6,
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_QSGMII = 18,
+	PHY_INTERFACE_MODE_TRGMII = 19,
+	PHY_INTERFACE_MODE_100BASEX = 20,
+	PHY_INTERFACE_MODE_1000BASEX = 21,
+	PHY_INTERFACE_MODE_2500BASEX = 22,
+	PHY_INTERFACE_MODE_5GBASER = 23,
+	PHY_INTERFACE_MODE_RXAUI = 24,
+	PHY_INTERFACE_MODE_XAUI = 25,
+	PHY_INTERFACE_MODE_10GBASER = 26,
+	PHY_INTERFACE_MODE_25GBASER = 27,
+	PHY_INTERFACE_MODE_USXGMII = 28,
+	PHY_INTERFACE_MODE_10GKR = 29,
+	PHY_INTERFACE_MODE_MAX = 30,
+} phy_interface_t;
+
+struct phylink;
+
+struct phy_driver;
+
+struct phy_led_trigger;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	long unsigned int supported[2];
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	long unsigned int adv_old[2];
+	u32 eee_broken_modes;
+	struct phy_led_trigger *phy_led_triggers;
+	unsigned int phy_num_led_triggers;
+	struct phy_led_trigger *last_triggered;
+	struct phy_led_trigger *led_link_trigger;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+	const struct macsec_ops *macsec_ops;
+};
+
+struct phy_tdr_config;
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const long unsigned int * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+};
+
+struct led_classdev;
+
+struct led_hw_trigger_type;
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+struct phy_led_trigger {
+	struct led_trigger trigger;
+	char name[76];
+	unsigned int speed;
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+struct led_pattern;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	int flags;
+	long unsigned int work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	long unsigned int blink_delay_on;
+	long unsigned int blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	int brightness_hw_changed;
+	struct kernfs_node *brightness_hw_changed_kn;
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+struct wl1251_platform_data {
+	int power_gpio;
+	int irq;
+	bool use_eeprom;
+};
+
+struct cdrom_msf {
+	__u8 cdmsf_min0;
+	__u8 cdmsf_sec0;
+	__u8 cdmsf_frame0;
+	__u8 cdmsf_min1;
+	__u8 cdmsf_sec1;
+	__u8 cdmsf_frame1;
+};
+
+struct cdrom_volctrl {
+	__u8 channel0;
+	__u8 channel1;
+	__u8 channel2;
+	__u8 channel3;
+};
+
+struct cdrom_subchnl {
+	__u8 cdsc_format;
+	__u8 cdsc_audiostatus;
+	__u8 cdsc_adr: 4;
+	__u8 cdsc_ctrl: 4;
+	__u8 cdsc_trk;
+	__u8 cdsc_ind;
+	union cdrom_addr cdsc_absaddr;
+	union cdrom_addr cdsc_reladdr;
+};
+
+struct cdrom_read_audio {
+	union cdrom_addr addr;
+	__u8 addr_format;
+	int nframes;
+	__u8 *buf;
+};
+
+struct cdrom_blk {
+	unsigned int from;
+	short unsigned int len;
+};
+
+struct cdrom_timed_media_change_info {
+	__s64 last_media_change;
+	__u64 media_flags;
+};
+
+struct dvd_layer {
+	__u8 book_version: 4;
+	__u8 book_type: 4;
+	__u8 min_rate: 4;
+	__u8 disc_size: 4;
+	__u8 layer_type: 4;
+	__u8 track_path: 1;
+	__u8 nlayers: 2;
+	char: 1;
+	__u8 track_density: 4;
+	__u8 linear_density: 4;
+	__u8 bca: 1;
+	__u32 start_sector;
+	__u32 end_sector;
+	__u32 end_sector_l0;
+};
+
+struct dvd_physical {
+	__u8 type;
+	__u8 layer_num;
+	struct dvd_layer layer[4];
+};
+
+struct dvd_copyright {
+	__u8 type;
+	__u8 layer_num;
+	__u8 cpst;
+	__u8 rmi;
+};
+
+struct dvd_disckey {
+	__u8 type;
+	unsigned int agid: 2;
+	__u8 value[2048];
+};
+
+struct dvd_bca {
+	__u8 type;
+	int len;
+	__u8 value[188];
+};
+
+struct dvd_manufact {
+	__u8 type;
+	__u8 layer_num;
+	int len;
+	__u8 value[2048];
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_physical physical;
+	struct dvd_copyright copyright;
+	struct dvd_disckey disckey;
+	struct dvd_bca bca;
+	struct dvd_manufact manufact;
+} dvd_struct;
+
+typedef __u8 dvd_key[5];
+
+typedef __u8 dvd_challenge[10];
+
+struct dvd_lu_send_agid {
+	__u8 type;
+	unsigned int agid: 2;
+};
+
+struct dvd_host_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_send_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_lu_send_title_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key title_key;
+	int lba;
+	unsigned int cpm: 1;
+	unsigned int cp_sec: 1;
+	unsigned int cgms: 2;
+};
+
+struct dvd_lu_send_asf {
+	__u8 type;
+	unsigned int agid: 2;
+	unsigned int asf: 1;
+};
+
+struct dvd_host_send_rpcstate {
+	__u8 type;
+	__u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+	__u8 type: 2;
+	__u8 vra: 3;
+	__u8 ucca: 3;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_lu_send_agid lsa;
+	struct dvd_host_send_challenge hsc;
+	struct dvd_send_key lsk;
+	struct dvd_lu_send_challenge lsc;
+	struct dvd_send_key hsk;
+	struct dvd_lu_send_title_key lstk;
+	struct dvd_lu_send_asf lsasf;
+	struct dvd_host_send_rpcstate hrpcs;
+	struct dvd_lu_send_rpcstate lrpcs;
+} dvd_authinfo;
+
+struct mrw_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u8 write: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+	__u8 reserved4;
+	__u8 reserved5;
+};
+
+struct rwrt_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u32 last_lba;
+	__u32 block_size;
+	__u16 blocking;
+	__u8 page_present: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+};
+
+typedef struct {
+	__be16 disc_information_length;
+	__u8 disc_status: 2;
+	__u8 border_status: 2;
+	__u8 erasable: 1;
+	__u8 reserved1: 3;
+	__u8 n_first_track;
+	__u8 n_sessions_lsb;
+	__u8 first_track_lsb;
+	__u8 last_track_lsb;
+	__u8 mrw_status: 2;
+	__u8 dbit: 1;
+	__u8 reserved2: 2;
+	__u8 uru: 1;
+	__u8 dbc_v: 1;
+	__u8 did_v: 1;
+	__u8 disc_type;
+	__u8 n_sessions_msb;
+	__u8 first_track_msb;
+	__u8 last_track_msb;
+	__u32 disc_id;
+	__u32 lead_in;
+	__u32 lead_out;
+	__u8 disc_bar_code[8];
+	__u8 reserved3;
+	__u8 n_opc;
+} disc_information;
+
+typedef struct {
+	__be16 track_information_length;
+	__u8 track_lsb;
+	__u8 session_lsb;
+	__u8 reserved1;
+	__u8 track_mode: 4;
+	__u8 copy: 1;
+	__u8 damage: 1;
+	__u8 reserved2: 2;
+	__u8 data_mode: 4;
+	__u8 fp: 1;
+	__u8 packet: 1;
+	__u8 blank: 1;
+	__u8 rt: 1;
+	__u8 nwa_v: 1;
+	__u8 lra_v: 1;
+	__u8 reserved3: 6;
+	__be32 track_start;
+	__be32 next_writable;
+	__be32 free_blocks;
+	__be32 fixed_packet_size;
+	__be32 track_size;
+	__be32 last_rec_address;
+} track_information;
+
+struct mode_page_header {
+	__be16 mode_data_length;
+	__u8 medium_type;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 reserved3;
+	__be16 desc_length;
+};
+
+typedef struct {
+	int data;
+	int audio;
+	int cdi;
+	int xa;
+	long int error;
+} tracktype;
+
+struct cdrom_mechstat_header {
+	__u8 curslot: 5;
+	__u8 changer_state: 2;
+	__u8 fault: 1;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 mech_state: 3;
+	__u8 curlba[3];
+	__u8 nslots;
+	__u16 slot_tablelen;
+};
+
+struct cdrom_slot {
+	__u8 change: 1;
+	__u8 reserved1: 6;
+	__u8 disc_present: 1;
+	__u8 reserved2[3];
+};
+
+struct cdrom_changer_info {
+	struct cdrom_mechstat_header hdr;
+	struct cdrom_slot slots[256];
+};
+
+struct modesel_head {
+	__u8 reserved1;
+	__u8 medium;
+	__u8 reserved2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_of_blocks_hi;
+	__u8 number_of_blocks_med;
+	__u8 number_of_blocks_lo;
+	__u8 reserved3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+typedef struct {
+	__u16 report_key_length;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 ucca: 3;
+	__u8 vra: 3;
+	__u8 type_code: 2;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+	__u8 reserved3;
+} rpc_state_t;
+
+struct event_header {
+	__be16 data_len;
+	__u8 notification_class: 3;
+	__u8 reserved1: 4;
+	__u8 nea: 1;
+	__u8 supp_event_class;
+};
+
+struct cdrom_sysctl_settings {
+	char info[1000];
+	int autoclose;
+	int autoeject;
+	int debug;
+	int lock;
+	int check;
+};
+
+enum cdrom_print_option {
+	CTL_NAME = 0,
+	CTL_SPEED = 1,
+	CTL_SLOTS = 2,
+	CTL_CAPABILITY = 3,
+};
+
+struct compat_cdrom_read_audio {
+	union cdrom_addr addr;
+	u8 addr_format;
+	compat_int_t nframes;
+	compat_caddr_t buf;
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	__le32 bmSublinkSpeedAttr[1];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	char: 8;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	int: 32;
+} __attribute__((packed));
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+};
+
+struct usb_devmap {
+	long unsigned int devicemap[2];
+};
+
+struct usb_device;
+
+struct mon_bus;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+};
+
+struct wusb_dev;
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	short unsigned int bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int wusb: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	long unsigned int active_duration;
+	long unsigned int connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	struct wusb_dev *wusb_dev;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+};
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct usb_phy_roothub;
+
+struct dma_pool;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	long unsigned int flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int wireless: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	long unsigned int hcd_priv[0];
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+struct extcon_dev;
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+};
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+struct mon_bus {
+	struct list_head bus_link;
+	spinlock_t lock;
+	struct usb_bus *u_bus;
+	int text_inited;
+	int bin_inited;
+	struct dentry *dent_s;
+	struct dentry *dent_t;
+	struct dentry *dent_u;
+	struct device *classdev;
+	int nreaders;
+	struct list_head r_list;
+	struct kref ref;
+	unsigned int cnt_events;
+	unsigned int cnt_text_lost;
+};
+
+struct mon_reader {
+	struct list_head r_link;
+	struct mon_bus *m_bus;
+	void *r_data;
+	void (*rnf_submit)(void *, struct urb *);
+	void (*rnf_error)(void *, struct urb *, int);
+	void (*rnf_complete)(void *, struct urb *, int);
+};
+
+struct iso_rec {
+	int error_count;
+	int numdesc;
+};
+
+struct mon_bin_hdr {
+	u64 id;
+	unsigned char type;
+	unsigned char xfer_type;
+	unsigned char epnum;
+	unsigned char devnum;
+	short unsigned int busnum;
+	char flag_setup;
+	char flag_data;
+	s64 ts_sec;
+	s32 ts_usec;
+	int status;
+	unsigned int len_urb;
+	unsigned int len_cap;
+	union {
+		unsigned char setup[8];
+		struct iso_rec iso;
+	} s;
+	int interval;
+	int start_frame;
+	unsigned int xfer_flags;
+	unsigned int ndesc;
+};
+
+struct mon_bin_isodesc {
+	int iso_status;
+	unsigned int iso_off;
+	unsigned int iso_len;
+	u32 _pad;
+};
+
+struct mon_bin_stats {
+	u32 queued;
+	u32 dropped;
+};
+
+struct mon_bin_get {
+	struct mon_bin_hdr *hdr;
+	void *data;
+	size_t alloc;
+};
+
+struct mon_bin_mfetch {
+	u32 *offvec;
+	u32 nfetch;
+	u32 nflush;
+};
+
+struct mon_bin_get32 {
+	u32 hdr32;
+	u32 data32;
+	u32 alloc32;
+};
+
+struct mon_bin_mfetch32 {
+	u32 offvec32;
+	u32 nfetch32;
+	u32 nflush32;
+};
+
+struct mon_pgmap {
+	struct page *pg;
+	unsigned char *ptr;
+};
+
+struct mon_reader_bin {
+	spinlock_t b_lock;
+	unsigned int b_size;
+	unsigned int b_cnt;
+	unsigned int b_in;
+	unsigned int b_out;
+	unsigned int b_read;
+	struct mon_pgmap *b_vec;
+	wait_queue_head_t b_wait;
+	struct mutex fetch_lock;
+	int mmap_active;
+	struct mon_reader r;
+	unsigned int cnt_lost;
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+union xhci_trb;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_ring;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+struct xhci_segment;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int err_count;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int num_trbs_free_temp;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_virt_device;
+
+struct xhci_hcd;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	long unsigned int flags;
+	u16 current_mel;
+	void *debugfs_private;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+	u32 irq_pending;
+	u32 irq_control;
+	u32 erst_size;
+	u64 erst_base;
+	u64 erst_dequeue;
+};
+
+struct xhci_bus_state {
+	long unsigned int bus_suspended;
+	long unsigned int next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	long unsigned int resume_done[31];
+	long unsigned int resuming_ports;
+	long unsigned int rexit_ports;
+	struct completion rexit_done[31];
+	struct completion u3exit_done[31];
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_device_context_array;
+
+struct xhci_scratchpad;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	struct xhci_intr_reg *ir_set;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u8 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	u32 isoc_bei_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_scratchpad *scratchpad;
+	struct list_head lpm_failed_devs;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool *device_pool;
+	struct dma_pool *segment_pool;
+	struct dma_pool *small_streams_pool;
+	struct dma_pool *medium_streams_pool;
+	unsigned int xhc_state;
+	long unsigned int run_graceperiod;
+	u32 command;
+	struct s3_save s3;
+	long long unsigned int quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	long unsigned int priv[0];
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct xhci_dbc;
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_port {
+	struct tty_port port;
+	spinlock_t port_lock;
+	int minor;
+	struct list_head read_pool;
+	struct list_head read_queue;
+	unsigned int n_read;
+	struct tasklet_struct push;
+	struct list_head write_pool;
+	struct kfifo write_fifo;
+	bool registered;
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+};
+
+struct async_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 tx;
+	__u32 rx;
+	__u32 frame;
+	__u32 parity;
+	__u32 overrun;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+struct usb_serial;
+
+struct usb_serial_port {
+	struct usb_serial *serial;
+	struct tty_port port;
+	spinlock_t lock;
+	u32 minor;
+	u8 port_number;
+	unsigned char *interrupt_in_buffer;
+	struct urb *interrupt_in_urb;
+	__u8 interrupt_in_endpointAddress;
+	unsigned char *interrupt_out_buffer;
+	int interrupt_out_size;
+	struct urb *interrupt_out_urb;
+	__u8 interrupt_out_endpointAddress;
+	unsigned char *bulk_in_buffer;
+	int bulk_in_size;
+	struct urb *read_urb;
+	__u8 bulk_in_endpointAddress;
+	unsigned char *bulk_in_buffers[2];
+	struct urb *read_urbs[2];
+	long unsigned int read_urbs_free;
+	unsigned char *bulk_out_buffer;
+	int bulk_out_size;
+	struct urb *write_urb;
+	struct kfifo write_fifo;
+	unsigned char *bulk_out_buffers[2];
+	struct urb *write_urbs[2];
+	long unsigned int write_urbs_free;
+	__u8 bulk_out_endpointAddress;
+	struct async_icount icount;
+	int tx_bytes;
+	long unsigned int flags;
+	struct work_struct work;
+	long unsigned int sysrq;
+	struct device dev;
+};
+
+struct usb_serial_driver;
+
+struct usb_serial {
+	struct usb_device *dev;
+	struct usb_serial_driver *type;
+	struct usb_interface *interface;
+	struct usb_interface *sibling;
+	unsigned int suspend_count;
+	unsigned char disconnected: 1;
+	unsigned char attached: 1;
+	unsigned char minors_reserved: 1;
+	unsigned char num_ports;
+	unsigned char num_port_pointers;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	struct usb_serial_port *port[16];
+	struct kref kref;
+	struct mutex disc_mutex;
+	void *private;
+};
+
+struct usb_serial_endpoints;
+
+struct usb_serial_driver {
+	const char *description;
+	const struct usb_device_id *id_table;
+	struct list_head driver_list;
+	struct device_driver driver;
+	struct usb_driver *usb_driver;
+	struct usb_dynids dynids;
+	unsigned char num_ports;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	size_t bulk_in_size;
+	size_t bulk_out_size;
+	int (*probe)(struct usb_serial *, const struct usb_device_id *);
+	int (*attach)(struct usb_serial *);
+	int (*calc_num_ports)(struct usb_serial *, struct usb_serial_endpoints *);
+	void (*disconnect)(struct usb_serial *);
+	void (*release)(struct usb_serial *);
+	int (*port_probe)(struct usb_serial_port *);
+	void (*port_remove)(struct usb_serial_port *);
+	int (*suspend)(struct usb_serial *, pm_message_t);
+	int (*resume)(struct usb_serial *);
+	int (*reset_resume)(struct usb_serial *);
+	int (*open)(struct tty_struct *, struct usb_serial_port *);
+	void (*close)(struct usb_serial_port *);
+	int (*write)(struct tty_struct *, struct usb_serial_port *, const unsigned char *, int);
+	unsigned int (*write_room)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*set_termios)(struct tty_struct *, struct usb_serial_port *, struct ktermios *);
+	void (*break_ctl)(struct tty_struct *, int);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, long int);
+	bool (*tx_empty)(struct usb_serial_port *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*tiocmiwait)(struct tty_struct *, long unsigned int);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	void (*dtr_rts)(struct usb_serial_port *, int);
+	int (*carrier_raised)(struct usb_serial_port *);
+	void (*init_termios)(struct tty_struct *);
+	void (*read_int_callback)(struct urb *);
+	void (*write_int_callback)(struct urb *);
+	void (*read_bulk_callback)(struct urb *);
+	void (*write_bulk_callback)(struct urb *);
+	void (*process_read_urb)(struct urb *);
+	int (*prepare_write_buffer)(struct usb_serial_port *, void *, size_t);
+};
+
+struct usb_serial_endpoints {
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	struct usb_endpoint_descriptor *bulk_in[16];
+	struct usb_endpoint_descriptor *bulk_out[16];
+	struct usb_endpoint_descriptor *interrupt_in[16];
+	struct usb_endpoint_descriptor *interrupt_out[16];
+};
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 *custom_data;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_handle;
+
+struct input_dev {
+	const char *name;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	long unsigned int propbit[1];
+	long unsigned int evbit[1];
+	long unsigned int keybit[12];
+	long unsigned int relbit[1];
+	long unsigned int absbit[1];
+	long unsigned int mscbit[1];
+	long unsigned int ledbit[1];
+	long unsigned int sndbit[1];
+	long unsigned int ffbit[2];
+	long unsigned int swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	long unsigned int key[12];
+	long unsigned int led[1];
+	long unsigned int snd[1];
+	long unsigned int sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
+};
+
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	long unsigned int ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	struct file *effect_owners[0];
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct input_handler;
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+};
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+};
+
+typedef __u64 timeu64_t;
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, long unsigned int);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long int *);
+	int (*set_offset)(struct device *, long int);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	long unsigned int flags;
+	long unsigned int irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	long unsigned int set_offset_nsec;
+	long unsigned int features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+};
+
+struct acpi_connection_info {
+	u8 *connection;
+	u16 length;
+	u8 access_length;
+};
+
+enum acpi_reconfig_event {
+	ACPI_RECONFIG_DEVICE_ADD = 0,
+	ACPI_RECONFIG_DEVICE_REMOVE = 1,
+};
+
+enum i2c_driver_flags {
+	I2C_DRV_ACPI_WAIVE_D0_PROBE = 1,
+};
+
+struct i2c_acpi_handler_data {
+	struct acpi_connection_info info;
+	struct i2c_adapter *adapter;
+};
+
+struct gsb_buffer {
+	u8 status;
+	u8 len;
+	union {
+		u16 wdata;
+		u8 bdata;
+		u8 data[0];
+	};
+};
+
+struct i2c_acpi_lookup {
+	struct i2c_board_info *info;
+	acpi_handle adapter_handle;
+	acpi_handle device_handle;
+	acpi_handle search_handle;
+	int n;
+	int index;
+	u32 speed;
+	u32 min_speed;
+	u32 force_speed;
+};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct dw_i2c_dev {
+	struct device *dev;
+	struct regmap *map;
+	struct regmap *sysmap;
+	void *base;
+	void *ext;
+	struct completion cmd_complete;
+	struct clk *clk;
+	struct clk *pclk;
+	struct reset_control *rst;
+	struct i2c_client *slave;
+	u32 (*get_clk_rate_khz)(struct dw_i2c_dev *);
+	int cmd_err;
+	struct i2c_msg *msgs;
+	int msgs_num;
+	int msg_write_idx;
+	u32 tx_buf_len;
+	u8 *tx_buf;
+	int msg_read_idx;
+	u32 rx_buf_len;
+	u8 *rx_buf;
+	int msg_err;
+	unsigned int status;
+	u32 abort_source;
+	int irq;
+	u32 flags;
+	struct i2c_adapter adapter;
+	u32 functionality;
+	u32 master_cfg;
+	u32 slave_cfg;
+	unsigned int tx_fifo_depth;
+	unsigned int rx_fifo_depth;
+	int rx_outstanding;
+	struct i2c_timings timings;
+	u32 sda_hold_time;
+	u16 ss_hcnt;
+	u16 ss_lcnt;
+	u16 fs_hcnt;
+	u16 fs_lcnt;
+	u16 fp_hcnt;
+	u16 fp_lcnt;
+	u16 hs_hcnt;
+	u16 hs_lcnt;
+	int (*acquire_lock)();
+	void (*release_lock)();
+	int semaphore_idx;
+	bool shared_with_punit;
+	void (*disable)(struct dw_i2c_dev *);
+	void (*disable_int)(struct dw_i2c_dev *);
+	int (*init)(struct dw_i2c_dev *);
+	int (*set_sda_hold_time)(struct dw_i2c_dev *);
+	int mode;
+	struct i2c_bus_recovery_info rinfo;
+};
+
+struct pps_ktime {
+	__s64 sec;
+	__s32 nsec;
+	__u32 flags;
+};
+
+struct pps_ktime_compat {
+	__s64 sec;
+	__s32 nsec;
+	__u32 flags;
+};
+
+struct pps_kinfo {
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime assert_tu;
+	struct pps_ktime clear_tu;
+	int current_mode;
+};
+
+struct pps_kinfo_compat {
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime_compat assert_tu;
+	struct pps_ktime_compat clear_tu;
+	int current_mode;
+} __attribute__((packed));
+
+struct pps_kparams {
+	int api_version;
+	int mode;
+	struct pps_ktime assert_off_tu;
+	struct pps_ktime clear_off_tu;
+};
+
+struct pps_fdata {
+	struct pps_kinfo info;
+	struct pps_ktime timeout;
+};
+
+struct pps_fdata_compat {
+	struct pps_kinfo_compat info;
+	struct pps_ktime_compat timeout;
+} __attribute__((packed));
+
+struct pps_bind_args {
+	int tsformat;
+	int edge;
+	int consumer;
+};
+
+struct pps_device;
+
+struct pps_source_info {
+	char name[32];
+	char path[32];
+	int mode;
+	void (*echo)(struct pps_device *, int, void *);
+	struct module *owner;
+	struct device *dev;
+};
+
+struct pps_device {
+	struct pps_source_info info;
+	struct pps_kparams params;
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime assert_tu;
+	struct pps_ktime clear_tu;
+	int current_mode;
+	unsigned int last_ev;
+	wait_queue_head_t queue;
+	unsigned int id;
+	const void *lookup_cookie;
+	struct cdev cdev;
+	struct device *dev;
+	struct fasync_struct *async_queue;
+	spinlock_t lock;
+};
+
+enum vexpress_reset_func {
+	FUNC_RESET = 0,
+	FUNC_SHUTDOWN = 1,
+	FUNC_REBOOT = 2,
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+enum power_supply_notifier_events {
+	PSY_EVENT_PROP_CHANGED = 0,
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+};
+
+struct power_supply;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+};
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
+	struct device dev;
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_attr;
+
+struct thermal_trip;
+
+struct thermal_zone_device_ops;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	struct thermal_trip *trips;
+	int num_trips;
+	long unsigned int trips_disabled;
+	long unsigned int passive_delay_jiffies;
+	long unsigned int polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+};
+
+struct power_supply_battery_ocv_table {
+	int ocv;
+	int capacity;
+};
+
+struct power_supply_resistance_temp_table {
+	int temp;
+	int resistance;
+};
+
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
+struct power_supply_battery_info {
+	unsigned int technology;
+	int energy_full_design_uwh;
+	int charge_full_design_uah;
+	int voltage_min_design_uv;
+	int voltage_max_design_uv;
+	int tricklecharge_current_ua;
+	int precharge_current_ua;
+	int precharge_voltage_max_uv;
+	int charge_term_current_ua;
+	int charge_restart_voltage_uv;
+	int overvoltage_limit_uv;
+	int constant_charge_current_max_ua;
+	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
+	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
+	int ocv_temp[20];
+	int temp_ambient_alert_min;
+	int temp_ambient_alert_max;
+	int temp_alert_min;
+	int temp_alert_max;
+	int temp_min;
+	int temp_max;
+	struct power_supply_battery_ocv_table *ocv_table[20];
+	int ocv_table_size[20];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+};
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
+	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+};
+
+struct thermal_trip {
+	int temperature;
+	int hysteresis;
+	enum thermal_trip_type type;
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
+};
+
+struct thermal_bind_params;
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	int num_tbps;
+	struct thermal_bind_params *tbp;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+};
+
+struct thermal_bind_params {
+	struct thermal_cooling_device *cdev;
+	int weight;
+	int trip_mask;
+	long unsigned int *binding_limits;
+	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
+};
+
+struct psy_am_i_supplied_data {
+	struct power_supply *psy;
+	unsigned int count;
+};
+
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	__NLA_TYPE_MAX = 18,
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+};
+
+struct genl_ops;
+
+struct genl_info;
+
+struct genl_small_ops;
+
+struct genl_family {
+	int id;
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	unsigned int mcgrp_offset;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_mcgrps;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	void *userhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+struct genl_dumpit_info {
+	const struct genl_family *family;
+	struct genl_ops op;
+	struct nlattr **attrs;
+};
+
+enum thermal_genl_attr {
+	THERMAL_GENL_ATTR_UNSPEC = 0,
+	THERMAL_GENL_ATTR_TZ = 1,
+	THERMAL_GENL_ATTR_TZ_ID = 2,
+	THERMAL_GENL_ATTR_TZ_TEMP = 3,
+	THERMAL_GENL_ATTR_TZ_TRIP = 4,
+	THERMAL_GENL_ATTR_TZ_TRIP_ID = 5,
+	THERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,
+	THERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,
+	THERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,
+	THERMAL_GENL_ATTR_TZ_MODE = 9,
+	THERMAL_GENL_ATTR_TZ_NAME = 10,
+	THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,
+	THERMAL_GENL_ATTR_TZ_GOV = 12,
+	THERMAL_GENL_ATTR_TZ_GOV_NAME = 13,
+	THERMAL_GENL_ATTR_CDEV = 14,
+	THERMAL_GENL_ATTR_CDEV_ID = 15,
+	THERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,
+	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
+	THERMAL_GENL_ATTR_CDEV_NAME = 18,
+	THERMAL_GENL_ATTR_GOV_NAME = 19,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY = 20,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_ID = 21,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_PERFORMANCE = 22,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_EFFICIENCY = 23,
+	__THERMAL_GENL_ATTR_MAX = 24,
+};
+
+enum thermal_genl_sampling {
+	THERMAL_GENL_SAMPLING_TEMP = 0,
+	__THERMAL_GENL_SAMPLING_MAX = 1,
+};
+
+enum thermal_genl_event {
+	THERMAL_GENL_EVENT_UNSPEC = 0,
+	THERMAL_GENL_EVENT_TZ_CREATE = 1,
+	THERMAL_GENL_EVENT_TZ_DELETE = 2,
+	THERMAL_GENL_EVENT_TZ_DISABLE = 3,
+	THERMAL_GENL_EVENT_TZ_ENABLE = 4,
+	THERMAL_GENL_EVENT_TZ_TRIP_UP = 5,
+	THERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,
+	THERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,
+	THERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,
+	THERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,
+	THERMAL_GENL_EVENT_CDEV_ADD = 10,
+	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
+	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
+	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
+	THERMAL_GENL_EVENT_CPU_CAPABILITY_CHANGE = 14,
+	__THERMAL_GENL_EVENT_MAX = 15,
+};
+
+enum thermal_genl_cmd {
+	THERMAL_GENL_CMD_UNSPEC = 0,
+	THERMAL_GENL_CMD_TZ_GET_ID = 1,
+	THERMAL_GENL_CMD_TZ_GET_TRIP = 2,
+	THERMAL_GENL_CMD_TZ_GET_TEMP = 3,
+	THERMAL_GENL_CMD_TZ_GET_GOV = 4,
+	THERMAL_GENL_CMD_TZ_GET_MODE = 5,
+	THERMAL_GENL_CMD_CDEV_GET = 6,
+	__THERMAL_GENL_CMD_MAX = 7,
+};
+
+struct thermal_attr {
+	struct device_attribute attr;
+	char name[20];
+};
+
+struct thermal_genl_cpu_caps {
+	int cpu;
+	int performance;
+	int efficiency;
+};
+
+struct param {
+	struct nlattr **attrs;
+	struct sk_buff *msg;
+	const char *name;
+	int tz_id;
+	int cdev_id;
+	int trip_id;
+	int trip_temp;
+	int trip_type;
+	int trip_hyst;
+	int temp;
+	int cdev_state;
+	int cdev_max_state;
+	struct thermal_genl_cpu_caps *cpu_capabilities;
+	int cpu_capabilities_count;
+};
+
+typedef int (*cb_t)(struct param *);
+
+struct watchdog_info {
+	__u32 options;
+	__u32 firmware_version;
+	__u8 identity[32];
+};
+
+struct watchdog_device;
+
+struct watchdog_ops {
+	struct module *owner;
+	int (*start)(struct watchdog_device *);
+	int (*stop)(struct watchdog_device *);
+	int (*ping)(struct watchdog_device *);
+	unsigned int (*status)(struct watchdog_device *);
+	int (*set_timeout)(struct watchdog_device *, unsigned int);
+	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
+	unsigned int (*get_timeleft)(struct watchdog_device *);
+	int (*restart)(struct watchdog_device *, long unsigned int, void *);
+	long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);
+};
+
+struct watchdog_governor;
+
+struct watchdog_core_data;
+
+struct watchdog_device {
+	int id;
+	struct device *parent;
+	const struct attribute_group **groups;
+	const struct watchdog_info *info;
+	const struct watchdog_ops *ops;
+	const struct watchdog_governor *gov;
+	unsigned int bootstatus;
+	unsigned int timeout;
+	unsigned int pretimeout;
+	unsigned int min_timeout;
+	unsigned int max_timeout;
+	unsigned int min_hw_heartbeat_ms;
+	unsigned int max_hw_heartbeat_ms;
+	struct notifier_block reboot_nb;
+	struct notifier_block restart_nb;
+	struct notifier_block pm_nb;
+	void *driver_data;
+	struct watchdog_core_data *wd_data;
+	long unsigned int status;
+	struct list_head deferred;
+};
+
+struct watchdog_governor {
+	const char name[20];
+	void (*pretimeout)(struct watchdog_device *);
+};
+
+struct watchdog_core_data {
+	struct device dev;
+	struct cdev cdev;
+	struct watchdog_device *wdd;
+	struct mutex lock;
+	ktime_t last_keepalive;
+	ktime_t last_hw_keepalive;
+	ktime_t open_deadline;
+	struct hrtimer timer;
+	struct kthread_work work;
+	long unsigned int status;
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+typedef u16 blk_short_t;
+
+enum blk_zone_type {
+	BLK_ZONE_TYPE_CONVENTIONAL = 1,
+	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
+	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
+};
+
+enum blk_zone_cond {
+	BLK_ZONE_COND_NOT_WP = 0,
+	BLK_ZONE_COND_EMPTY = 1,
+	BLK_ZONE_COND_IMP_OPEN = 2,
+	BLK_ZONE_COND_EXP_OPEN = 3,
+	BLK_ZONE_COND_CLOSED = 4,
+	BLK_ZONE_COND_READONLY = 13,
+	BLK_ZONE_COND_FULL = 14,
+	BLK_ZONE_COND_OFFLINE = 15,
+};
+
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+};
+
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int modes_supported[4];
+	struct device *dev;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
+};
+
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
+	long unsigned int start;
+};
+
+enum blktrace_act {
+	__BLK_TA_QUEUE = 1,
+	__BLK_TA_BACKMERGE = 2,
+	__BLK_TA_FRONTMERGE = 3,
+	__BLK_TA_GETRQ = 4,
+	__BLK_TA_SLEEPRQ = 5,
+	__BLK_TA_REQUEUE = 6,
+	__BLK_TA_ISSUE = 7,
+	__BLK_TA_COMPLETE = 8,
+	__BLK_TA_PLUG = 9,
+	__BLK_TA_UNPLUG_IO = 10,
+	__BLK_TA_UNPLUG_TIMER = 11,
+	__BLK_TA_INSERT = 12,
+	__BLK_TA_SPLIT = 13,
+	__BLK_TA_BOUNCE = 14,
+	__BLK_TA_REMAP = 15,
+	__BLK_TA_ABORT = 16,
+	__BLK_TA_DRV_DATA = 17,
+	__BLK_TA_CGROUP = 256,
+};
+
+enum dm_queue_mode {
+	DM_TYPE_NONE = 0,
+	DM_TYPE_BIO_BASED = 1,
+	DM_TYPE_REQUEST_BASED = 2,
+	DM_TYPE_DAX_BIO_BASED = 3,
+};
+
+typedef enum {
+	STATUSTYPE_INFO = 0,
+	STATUSTYPE_TABLE = 1,
+	STATUSTYPE_IMA = 2,
+} status_type_t;
+
+union map_info {
+	void *ptr;
+};
+
+struct dm_target;
+
+typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
+
+struct dm_table;
+
+struct target_type;
+
+struct dm_target {
+	struct dm_table *table;
+	struct target_type *type;
+	sector_t begin;
+	sector_t len;
+	uint32_t max_io_len;
+	unsigned int num_flush_bios;
+	unsigned int num_discard_bios;
+	unsigned int num_secure_erase_bios;
+	unsigned int num_write_zeroes_bios;
+	unsigned int per_io_data_size;
+	void *private;
+	char *error;
+	bool flush_supported: 1;
+	bool discards_supported: 1;
+	bool limit_swap_bios: 1;
+	bool emulate_zone_append: 1;
+	bool accounts_remapped_io: 1;
+	bool needs_bio_set_dev: 1;
+};
+
+typedef void (*dm_dtr_fn)(struct dm_target *);
+
+typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
+
+typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info *, struct request **);
+
+typedef void (*dm_release_clone_request_fn)(struct request *, union map_info *);
+
+typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
+
+typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info *);
+
+typedef void (*dm_presuspend_fn)(struct dm_target *);
+
+typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
+
+typedef void (*dm_postsuspend_fn)(struct dm_target *);
+
+typedef int (*dm_preresume_fn)(struct dm_target *);
+
+typedef void (*dm_resume_fn)(struct dm_target *);
+
+typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
+
+typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
+
+typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
+
+struct dm_report_zones_args;
+
+typedef int (*dm_report_zones_fn)(struct dm_target *, struct dm_report_zones_args *, unsigned int);
+
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+	sector_t start;
+};
+
+struct dm_dev;
+
+typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
+
+struct dm_dev {
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	fmode_t mode;
+	char name[16];
+};
+
+typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
+
+typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
+
+typedef int (*dm_busy_fn)(struct dm_target *);
+
+typedef long int (*dm_dax_direct_access_fn)(struct dm_target *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+
+typedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, long unsigned int, size_t);
+
+typedef size_t (*dm_dax_recovery_write_fn)(struct dm_target *, long unsigned int, void *, size_t, struct iov_iter *);
+
+struct target_type {
+	uint64_t features;
+	const char *name;
+	struct module *module;
+	unsigned int version[3];
+	dm_ctr_fn ctr;
+	dm_dtr_fn dtr;
+	dm_map_fn map;
+	dm_clone_and_map_request_fn clone_and_map_rq;
+	dm_release_clone_request_fn release_clone_rq;
+	dm_endio_fn end_io;
+	dm_request_endio_fn rq_end_io;
+	dm_presuspend_fn presuspend;
+	dm_presuspend_undo_fn presuspend_undo;
+	dm_postsuspend_fn postsuspend;
+	dm_preresume_fn preresume;
+	dm_resume_fn resume;
+	dm_status_fn status;
+	dm_message_fn message;
+	dm_prepare_ioctl_fn prepare_ioctl;
+	dm_report_zones_fn report_zones;
+	dm_busy_fn busy;
+	dm_iterate_devices_fn iterate_devices;
+	dm_io_hints_fn io_hints;
+	dm_dax_direct_access_fn direct_access;
+	dm_dax_zero_page_range_fn dax_zero_page_range;
+	dm_dax_recovery_write_fn dax_recovery_write;
+	struct list_head list;
+};
+
+struct mapped_device;
+
+struct dm_md_mempools;
+
+struct dm_table {
+	struct mapped_device *md;
+	enum dm_queue_mode type;
+	unsigned int depth;
+	unsigned int counts[16];
+	sector_t *index[16];
+	unsigned int num_targets;
+	unsigned int num_allocated;
+	sector_t *highs;
+	struct dm_target *targets;
+	struct target_type *immutable_target_type;
+	bool integrity_supported: 1;
+	bool singleton: 1;
+	unsigned int integrity_added: 1;
+	fmode_t mode;
+	struct list_head devices;
+	void (*event_fn)(void *);
+	void *event_context;
+	struct dm_md_mempools *mempools;
+	struct blk_crypto_profile *crypto_profile;
+};
+
+struct dm_stats_last_position;
+
+struct dm_stats {
+	struct mutex mutex;
+	struct list_head list;
+	struct dm_stats_last_position *last;
+	bool precise_timestamps;
+};
+
+struct dm_stats_aux {
+	bool merged;
+	long long unsigned int duration_ns;
+};
+
+struct dm_ima_device_table_metadata {
+	char *device_metadata;
+	unsigned int device_metadata_len;
+	unsigned int num_targets;
+	char *hash;
+	unsigned int hash_len;
+};
+
+struct dm_ima_measurements {
+	struct dm_ima_device_table_metadata active_table;
+	struct dm_ima_device_table_metadata inactive_table;
+	unsigned int dm_version_str_len;
+};
+
+struct dm_kobject_holder {
+	struct kobject kobj;
+	struct completion completion;
+};
+
+struct dm_md_mempools {
+	struct bio_set bs;
+	struct bio_set io_bs;
+};
+
+struct dm_io;
+
+struct mapped_device {
+	struct mutex suspend_lock;
+	struct mutex table_devices_lock;
+	struct list_head table_devices;
+	void *map;
+	long unsigned int flags;
+	struct mutex type_lock;
+	enum dm_queue_mode type;
+	int numa_node_id;
+	struct request_queue *queue;
+	atomic_t holders;
+	atomic_t open_count;
+	struct dm_target *immutable_target;
+	struct target_type *immutable_target_type;
+	char name[16];
+	struct gendisk *disk;
+	struct dax_device *dax_dev;
+	wait_queue_head_t wait;
+	long unsigned int *pending_io;
+	struct hd_geometry geometry;
+	struct workqueue_struct *wq;
+	struct work_struct work;
+	spinlock_t deferred_lock;
+	struct bio_list deferred;
+	struct work_struct requeue_work;
+	struct dm_io *requeue_list;
+	void *interface_ptr;
+	wait_queue_head_t eventq;
+	atomic_t event_nr;
+	atomic_t uevent_seq;
+	struct list_head uevent_list;
+	spinlock_t uevent_lock;
+	bool init_tio_pdu: 1;
+	struct blk_mq_tag_set *tag_set;
+	struct dm_stats stats;
+	unsigned int internal_suspend_count;
+	int swap_bios;
+	struct semaphore swap_bios_semaphore;
+	struct mutex swap_bios_lock;
+	struct dm_md_mempools *mempools;
+	struct dm_kobject_holder kobj_holder;
+	struct srcu_struct io_barrier;
+	unsigned int nr_zones;
+	unsigned int *zwp_offset;
+	struct dm_ima_measurements ima;
+};
+
+struct dm_target_io {
+	short unsigned int magic;
+	blk_short_t flags;
+	unsigned int target_bio_nr;
+	struct dm_io *io;
+	struct dm_target *ti;
+	unsigned int *len_ptr;
+	sector_t old_sector;
+	struct bio clone;
+};
+
+struct dm_io {
+	short unsigned int magic;
+	blk_short_t flags;
+	spinlock_t lock;
+	long unsigned int start_time;
+	void *data;
+	struct dm_io *next;
+	struct dm_stats_aux stats_aux;
+	blk_status_t status;
+	atomic_t io_count;
+	struct mapped_device *md;
+	struct bio *orig_bio;
+	unsigned int sector_offset;
+	unsigned int sectors;
+	struct dm_target_io tio;
+};
+
+struct orig_bio_details {
+	enum req_op op;
+	unsigned int nr_sectors;
+};
+
+struct stripe {
+	struct dm_dev *dev;
+	sector_t physical_start;
+	atomic_t error_count;
+};
+
+struct stripe_c {
+	uint32_t stripes;
+	int stripes_shift;
+	sector_t stripe_width;
+	uint32_t chunk_size;
+	int chunk_size_shift;
+	struct dm_target *ti;
+	struct work_struct trigger_event;
+	struct stripe stripe[0];
+};
+
+struct dm_arg_set {
+	unsigned int argc;
+	char **argv;
+};
+
+struct dm_stats_last_position {
+	sector_t last_sector;
+	unsigned int last_rw;
+};
+
+struct dm_stat_percpu {
+	long long unsigned int sectors[2];
+	long long unsigned int ios[2];
+	long long unsigned int merges[2];
+	long long unsigned int ticks[2];
+	long long unsigned int io_ticks[2];
+	long long unsigned int io_ticks_total;
+	long long unsigned int time_in_queue;
+	long long unsigned int *histogram;
+};
+
+struct dm_stat_shared {
+	atomic_t in_flight[2];
+	long long unsigned int stamp;
+	struct dm_stat_percpu tmp;
+};
+
+struct dm_stat {
+	struct list_head list_entry;
+	int id;
+	unsigned int stat_flags;
+	size_t n_entries;
+	sector_t start;
+	sector_t end;
+	sector_t step;
+	unsigned int n_histogram_entries;
+	long long unsigned int *histogram_boundaries;
+	const char *program_id;
+	const char *aux_data;
+	struct callback_head callback_head;
+	size_t shared_alloc_size;
+	size_t percpu_alloc_size;
+	size_t histogram_alloc_size;
+	struct dm_stat_percpu *stat_percpu[4096];
+	struct dm_stat_shared stat_shared[0];
+};
+
+typedef sector_t chunk_t;
+
+struct dm_exception {
+	struct hlist_bl_node hash_list;
+	chunk_t old_chunk;
+	chunk_t new_chunk;
+};
+
+struct dm_exception_store;
+
+struct dm_exception_store_type {
+	const char *name;
+	struct module *module;
+	int (*ctr)(struct dm_exception_store *, char *);
+	void (*dtr)(struct dm_exception_store *);
+	int (*read_metadata)(struct dm_exception_store *, int (*)(void *, chunk_t, chunk_t), void *);
+	int (*prepare_exception)(struct dm_exception_store *, struct dm_exception *);
+	void (*commit_exception)(struct dm_exception_store *, struct dm_exception *, int, void (*)(void *, int), void *);
+	int (*prepare_merge)(struct dm_exception_store *, chunk_t *, chunk_t *);
+	int (*commit_merge)(struct dm_exception_store *, int);
+	void (*drop_snapshot)(struct dm_exception_store *);
+	unsigned int (*status)(struct dm_exception_store *, status_type_t, char *, unsigned int);
+	void (*usage)(struct dm_exception_store *, sector_t *, sector_t *, sector_t *);
+	struct list_head list;
+};
+
+struct dm_snapshot;
+
+struct dm_exception_store {
+	struct dm_exception_store_type *type;
+	struct dm_snapshot *snap;
+	unsigned int chunk_size;
+	unsigned int chunk_mask;
+	unsigned int chunk_shift;
+	void *context;
+	bool userspace_supports_overflow;
+};
+
+struct dm_io_region {
+	struct block_device *bdev;
+	sector_t sector;
+	sector_t count;
+};
+
+struct page_list {
+	struct page_list *next;
+	struct page *page;
+};
+
+typedef void (*io_notify_fn)(long unsigned int, void *);
+
+enum dm_io_mem_type {
+	DM_IO_PAGE_LIST = 0,
+	DM_IO_BIO = 1,
+	DM_IO_VMA = 2,
+	DM_IO_KMEM = 3,
+};
+
+struct dm_io_memory {
+	enum dm_io_mem_type type;
+	unsigned int offset;
+	union {
+		struct page_list *pl;
+		struct bio *bio;
+		void *vma;
+		void *addr;
+	} ptr;
+};
+
+struct dm_io_notify {
+	io_notify_fn fn;
+	void *context;
+};
+
+struct dm_io_client;
+
+struct dm_io_request {
+	blk_opf_t bi_opf;
+	struct dm_io_memory mem;
+	struct dm_io_notify notify;
+	struct dm_io_client *client;
+};
+
+struct disk_header {
+	__le32 magic;
+	__le32 valid;
+	__le32 version;
+	__le32 chunk_size;
+};
+
+struct disk_exception {
+	__le64 old_chunk;
+	__le64 new_chunk;
+};
+
+struct core_exception {
+	uint64_t old_chunk;
+	uint64_t new_chunk;
+};
+
+struct commit_callback {
+	void (*callback)(void *, int);
+	void *context;
+};
+
+struct pstore {
+	struct dm_exception_store *store;
+	int version;
+	int valid;
+	uint32_t exceptions_per_area;
+	void *area;
+	void *zero_area;
+	void *header_area;
+	chunk_t current_area;
+	chunk_t next_free;
+	uint32_t current_committed;
+	atomic_t pending_count;
+	uint32_t callback_count;
+	struct commit_callback *callbacks;
+	struct dm_io_client *io_client;
+	struct workqueue_struct *metadata_wq;
+};
+
+struct mdata_req {
+	struct dm_io_region *where;
+	struct dm_io_request *io_req;
+	struct work_struct work;
+	int result;
+};
+
+struct dm_bufio_client;
+
+struct dm_buffer;
+
+enum dev_type {
+	DEV_UNKNOWN = 0,
+	DEV_X1 = 1,
+	DEV_X2 = 2,
+	DEV_X4 = 3,
+	DEV_X8 = 4,
+	DEV_X16 = 5,
+	DEV_X32 = 6,
+	DEV_X64 = 7,
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+enum mem_type {
+	MEM_EMPTY = 0,
+	MEM_RESERVED = 1,
+	MEM_UNKNOWN = 2,
+	MEM_FPM = 3,
+	MEM_EDO = 4,
+	MEM_BEDO = 5,
+	MEM_SDR = 6,
+	MEM_RDR = 7,
+	MEM_DDR = 8,
+	MEM_RDDR = 9,
+	MEM_RMBS = 10,
+	MEM_DDR2 = 11,
+	MEM_FB_DDR2 = 12,
+	MEM_RDDR2 = 13,
+	MEM_XDR = 14,
+	MEM_DDR3 = 15,
+	MEM_RDDR3 = 16,
+	MEM_LRDDR3 = 17,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
+};
+
+enum edac_type {
+	EDAC_UNKNOWN = 0,
+	EDAC_NONE = 1,
+	EDAC_RESERVED = 2,
+	EDAC_PARITY = 3,
+	EDAC_EC = 4,
+	EDAC_SECDED = 5,
+	EDAC_S2ECD2ED = 6,
+	EDAC_S4ECD4ED = 7,
+	EDAC_S8ECD8ED = 8,
+	EDAC_S16ECD16ED = 9,
+};
+
+enum scrub_type {
+	SCRUB_UNKNOWN = 0,
+	SCRUB_NONE = 1,
+	SCRUB_SW_PROG = 2,
+	SCRUB_SW_SRC = 3,
+	SCRUB_SW_PROG_SRC = 4,
+	SCRUB_SW_TUNABLE = 5,
+	SCRUB_HW_PROG = 6,
+	SCRUB_HW_SRC = 7,
+	SCRUB_HW_PROG_SRC = 8,
+	SCRUB_HW_TUNABLE = 9,
+};
+
+enum edac_mc_layer_type {
+	EDAC_MC_LAYER_BRANCH = 0,
+	EDAC_MC_LAYER_CHANNEL = 1,
+	EDAC_MC_LAYER_SLOT = 2,
+	EDAC_MC_LAYER_CHIP_SELECT = 3,
+	EDAC_MC_LAYER_ALL_MEM = 4,
+};
+
+struct edac_mc_layer {
+	enum edac_mc_layer_type type;
+	unsigned int size;
+	bool is_virt_csrow;
+};
+
+struct mem_ctl_info;
+
+struct dimm_info {
+	struct device dev;
+	char label[32];
+	unsigned int location[3];
+	struct mem_ctl_info *mci;
+	unsigned int idx;
+	u32 grain;
+	enum dev_type dtype;
+	enum mem_type mtype;
+	enum edac_type edac_mode;
+	u32 nr_pages;
+	unsigned int csrow;
+	unsigned int cschannel;
+	u16 smbios_handle;
+	u32 ce_count;
+	u32 ue_count;
+};
+
+struct mcidev_sysfs_attribute;
+
+struct edac_raw_error_desc {
+	char location[256];
+	char label[296];
+	long int grain;
+	u16 error_count;
+	enum hw_event_mc_err_type type;
+	int top_layer;
+	int mid_layer;
+	int low_layer;
+	long unsigned int page_frame_number;
+	long unsigned int offset_in_page;
+	long unsigned int syndrome;
+	const char *msg;
+	const char *other_detail;
+};
+
+struct csrow_info;
+
+struct mem_ctl_info {
+	struct device dev;
+	struct bus_type *bus;
+	struct list_head link;
+	struct module *owner;
+	long unsigned int mtype_cap;
+	long unsigned int edac_ctl_cap;
+	long unsigned int edac_cap;
+	long unsigned int scrub_cap;
+	enum scrub_type scrub_mode;
+	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
+	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
+	void (*edac_check)(struct mem_ctl_info *);
+	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
+	int mc_idx;
+	struct csrow_info **csrows;
+	unsigned int nr_csrows;
+	unsigned int num_cschannel;
+	unsigned int n_layers;
+	struct edac_mc_layer *layers;
+	bool csbased;
+	unsigned int tot_dimms;
+	struct dimm_info **dimms;
+	struct device *pdev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	u32 ce_noinfo_count;
+	u32 ue_noinfo_count;
+	u32 ue_mc;
+	u32 ce_mc;
+	struct completion complete;
+	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
+	struct delayed_work work;
+	struct edac_raw_error_desc error_desc;
+	int op_state;
+	struct dentry *debugfs;
+	u8 fake_inject_layer[3];
+	bool fake_inject_ue;
+	u16 fake_inject_count;
+};
+
+struct rank_info {
+	int chan_idx;
+	struct csrow_info *csrow;
+	struct dimm_info *dimm;
+	u32 ce_count;
+};
+
+struct csrow_info {
+	struct device dev;
+	long unsigned int first_page;
+	long unsigned int last_page;
+	long unsigned int page_mask;
+	int csrow_idx;
+	u32 ue_count;
+	u32 ce_count;
+	struct mem_ctl_info *mci;
+	u32 nr_channels;
+	struct rank_info **channels;
+};
+
+struct edac_pci_counter {
+	atomic_t pe_count;
+	atomic_t npe_count;
+};
+
+struct edac_pci_ctl_info {
+	struct list_head link;
+	int pci_idx;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_pci_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	struct completion complete;
+	char name[32];
+	struct edac_pci_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_pci_gen_data {
+	int edac_idx;
+};
+
+struct icc_path;
+
+struct dev_pm_opp_supply {
+	long unsigned int u_volt;
+	long unsigned int u_volt_min;
+	long unsigned int u_volt_max;
+	long unsigned int u_amp;
+	long unsigned int u_watt;
+};
+
+struct dev_pm_opp_icc_bw {
+	u32 avg;
+	u32 peak;
+};
+
+typedef int (*config_regulators_t)(struct device *, struct dev_pm_opp *, struct dev_pm_opp *, struct regulator **, unsigned int);
+
+struct dev_pm_opp {
+	struct list_head node;
+	struct kref kref;
+	bool available;
+	bool dynamic;
+	bool turbo;
+	bool suspend;
+	bool removed;
+	unsigned int pstate;
+	long unsigned int *rates;
+	unsigned int level;
+	struct dev_pm_opp_supply *supplies;
+	struct dev_pm_opp_icc_bw *bandwidth;
+	long unsigned int clock_latency_ns;
+	struct dev_pm_opp **required_opps;
+	struct opp_table *opp_table;
+	struct device_node *np;
+	struct dentry *dentry;
+	const char *of_name;
+};
+
+typedef int (*config_clks_t)(struct device *, struct opp_table *, struct dev_pm_opp *, void *, bool);
+
+enum opp_table_access {
+	OPP_TABLE_ACCESS_UNKNOWN = 0,
+	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
+	OPP_TABLE_ACCESS_SHARED = 2,
+};
+
+struct opp_table {
+	struct list_head node;
+	struct list_head lazy;
+	struct blocking_notifier_head head;
+	struct list_head dev_list;
+	struct list_head opp_list;
+	struct kref kref;
+	struct mutex lock;
+	struct device_node *np;
+	long unsigned int clock_latency_ns_max;
+	unsigned int voltage_tolerance_v1;
+	unsigned int parsed_static_opps;
+	enum opp_table_access shared_opp;
+	long unsigned int rate_clk_single;
+	struct dev_pm_opp *current_opp;
+	struct dev_pm_opp *suspend_opp;
+	struct mutex genpd_virt_dev_lock;
+	struct device **genpd_virt_devs;
+	struct opp_table **required_opp_tables;
+	unsigned int required_opp_count;
+	unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char *prop_name;
+	config_clks_t config_clks;
+	struct clk **clks;
+	struct clk *clk;
+	int clk_count;
+	config_regulators_t config_regulators;
+	struct regulator **regulators;
+	int regulator_count;
+	struct icc_path **paths;
+	unsigned int path_count;
+	bool enabled;
+	bool genpd_performance_state;
+	bool is_genpd;
+	struct dentry *dentry;
+	char dentry_name[255];
+};
+
+struct opp_device {
+	struct list_head node;
+	const struct device *dev;
+	struct dentry *dentry;
+};
+
+struct gov_attr_set {
+	struct kobject kobj;
+	struct list_head policy_list;
+	struct mutex update_lock;
+	int usage_count;
+};
+
+struct governor_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct gov_attr_set *, char *);
+	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
+};
+
+struct cpuidle_state_usage {
+	long long unsigned int disable;
+	long long unsigned int usage;
+	u64 time_ns;
+	long long unsigned int above;
+	long long unsigned int below;
+	long long unsigned int rejected;
+	long long unsigned int s2idle_usage;
+	long long unsigned int s2idle_time;
+};
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+};
+
+struct cpuidle_governor {
+	char name[16];
+	struct list_head governor_list;
+	unsigned int rating;
+	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
+	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
+	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
+	void (*reflect)(struct cpuidle_device *, int);
+};
+
+struct psci_pd_provider {
+	struct list_head link;
+	struct device_node *node;
+};
+
+struct mmc_data;
+
+struct mmc_request;
+
+struct mmc_command {
+	u32 opcode;
+	u32 arg;
+	u32 resp[4];
+	unsigned int flags;
+	unsigned int retries;
+	int error;
+	unsigned int busy_timeout;
+	struct mmc_data *data;
+	struct mmc_request *mrq;
+};
+
+struct mmc_data {
+	unsigned int timeout_ns;
+	unsigned int timeout_clks;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	int error;
+	unsigned int flags;
+	unsigned int bytes_xfered;
+	struct mmc_command *stop;
+	struct mmc_request *mrq;
+	unsigned int sg_len;
+	int sg_count;
+	struct scatterlist *sg;
+	s32 host_cookie;
+};
+
+struct mmc_host;
+
+struct mmc_request {
+	struct mmc_command *sbc;
+	struct mmc_command *cmd;
+	struct mmc_data *data;
+	struct mmc_command *stop;
+	struct completion completion;
+	struct completion cmd_completion;
+	void (*done)(struct mmc_request *);
+	void (*recovery_notifier)(struct mmc_request *);
+	struct mmc_host *host;
+	bool cap_cmd_during_tfr;
+	int tag;
+};
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+	unsigned int clock;
+	short unsigned int vdd;
+	unsigned int power_delay_ms;
+	unsigned char bus_mode;
+	unsigned char chip_select;
+	unsigned char power_mode;
+	unsigned char bus_width;
+	unsigned char timing;
+	unsigned char signal_voltage;
+	unsigned char drv_type;
+	bool enhanced_strobe;
+};
+
+struct mmc_ctx {
+	struct task_struct *task;
+};
+
+struct mmc_slot {
+	int cd_irq;
+	bool cd_wake_enabled;
+	void *handler_priv;
+};
+
+struct mmc_supply {
+	struct regulator *vmmc;
+	struct regulator *vqmmc;
+};
+
+struct mmc_host_ops;
+
+struct mmc_pwrseq;
+
+struct mmc_card;
+
+struct mmc_bus_ops;
+
+struct mmc_cqe_ops;
+
+struct mmc_host {
+	struct device *parent;
+	struct device class_dev;
+	int index;
+	const struct mmc_host_ops *ops;
+	struct mmc_pwrseq *pwrseq;
+	unsigned int f_min;
+	unsigned int f_max;
+	unsigned int f_init;
+	u32 ocr_avail;
+	u32 ocr_avail_sdio;
+	u32 ocr_avail_sd;
+	u32 ocr_avail_mmc;
+	struct wakeup_source *ws;
+	u32 max_current_330;
+	u32 max_current_300;
+	u32 max_current_180;
+	u32 caps;
+	u32 caps2;
+	int fixed_drv_type;
+	mmc_pm_flag_t pm_caps;
+	unsigned int max_seg_size;
+	short unsigned int max_segs;
+	short unsigned int unused;
+	unsigned int max_req_size;
+	unsigned int max_blk_size;
+	unsigned int max_blk_count;
+	unsigned int max_busy_timeout;
+	spinlock_t lock;
+	struct mmc_ios ios;
+	unsigned int use_spi_crc: 1;
+	unsigned int claimed: 1;
+	unsigned int doing_init_tune: 1;
+	unsigned int can_retune: 1;
+	unsigned int doing_retune: 1;
+	unsigned int retune_now: 1;
+	unsigned int retune_paused: 1;
+	unsigned int retune_crc_disable: 1;
+	unsigned int can_dma_map_merge: 1;
+	int rescan_disable;
+	int rescan_entered;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct timer_list retune_timer;
+	bool trigger_card_event;
+	struct mmc_card *card;
+	wait_queue_head_t wq;
+	struct mmc_ctx *claimer;
+	int claim_cnt;
+	struct mmc_ctx default_ctx;
+	struct delayed_work detect;
+	int detect_change;
+	struct mmc_slot slot;
+	const struct mmc_bus_ops *bus_ops;
+	unsigned int sdio_irqs;
+	struct task_struct *sdio_irq_thread;
+	struct delayed_work sdio_irq_work;
+	bool sdio_irq_pending;
+	atomic_t sdio_irq_thread_abort;
+	mmc_pm_flag_t pm_flags;
+	struct led_trigger *led;
+	bool regulator_enabled;
+	struct mmc_supply supply;
+	struct dentry *debugfs_root;
+	struct mmc_request *ongoing_mrq;
+	unsigned int actual_clock;
+	unsigned int slotno;
+	int dsr_req;
+	u32 dsr;
+	const struct mmc_cqe_ops *cqe_ops;
+	void *cqe_private;
+	int cqe_qdepth;
+	bool cqe_enabled;
+	bool cqe_on;
+	bool hsq_enabled;
+	u32 err_stats[15];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
+};
+
+struct mmc_cid {
+	unsigned int manfid;
+	char prod_name[8];
+	unsigned char prv;
+	unsigned int serial;
+	short unsigned int oemid;
+	short unsigned int year;
+	unsigned char hwrev;
+	unsigned char fwrev;
+	unsigned char month;
+};
+
+struct mmc_csd {
+	unsigned char structure;
+	unsigned char mmca_vsn;
+	short unsigned int cmdclass;
+	short unsigned int taac_clks;
+	unsigned int taac_ns;
+	unsigned int c_size;
+	unsigned int r2w_factor;
+	unsigned int max_dtr;
+	unsigned int erase_size;
+	unsigned int read_blkbits;
+	unsigned int write_blkbits;
+	unsigned int capacity;
+	unsigned int read_partial: 1;
+	unsigned int read_misalign: 1;
+	unsigned int write_partial: 1;
+	unsigned int write_misalign: 1;
+	unsigned int dsr_imp: 1;
+};
+
+struct mmc_ext_csd {
+	u8 rev;
+	u8 erase_group_def;
+	u8 sec_feature_support;
+	u8 rel_sectors;
+	u8 rel_param;
+	bool enhanced_rpmb_supported;
+	u8 part_config;
+	u8 cache_ctrl;
+	u8 rst_n_function;
+	u8 max_packed_writes;
+	u8 max_packed_reads;
+	u8 packed_event_en;
+	unsigned int part_time;
+	unsigned int sa_timeout;
+	unsigned int generic_cmd6_time;
+	unsigned int power_off_longtime;
+	u8 power_off_notification;
+	unsigned int hs_max_dtr;
+	unsigned int hs200_max_dtr;
+	unsigned int sectors;
+	unsigned int hc_erase_size;
+	unsigned int hc_erase_timeout;
+	unsigned int sec_trim_mult;
+	unsigned int sec_erase_mult;
+	unsigned int trim_timeout;
+	bool partition_setting_completed;
+	long long unsigned int enhanced_area_offset;
+	unsigned int enhanced_area_size;
+	unsigned int cache_size;
+	bool hpi_en;
+	bool hpi;
+	unsigned int hpi_cmd;
+	bool bkops;
+	bool man_bkops_en;
+	bool auto_bkops_en;
+	unsigned int data_sector_size;
+	unsigned int data_tag_unit_size;
+	unsigned int boot_ro_lock;
+	bool boot_ro_lockable;
+	bool ffu_capable;
+	bool cmdq_en;
+	bool cmdq_support;
+	unsigned int cmdq_depth;
+	u8 fwrev[8];
+	u8 raw_exception_status;
+	u8 raw_partition_support;
+	u8 raw_rpmb_size_mult;
+	u8 raw_erased_mem_count;
+	u8 strobe_support;
+	u8 raw_ext_csd_structure;
+	u8 raw_card_type;
+	u8 raw_driver_strength;
+	u8 out_of_int_time;
+	u8 raw_pwr_cl_52_195;
+	u8 raw_pwr_cl_26_195;
+	u8 raw_pwr_cl_52_360;
+	u8 raw_pwr_cl_26_360;
+	u8 raw_s_a_timeout;
+	u8 raw_hc_erase_gap_size;
+	u8 raw_erase_timeout_mult;
+	u8 raw_hc_erase_grp_size;
+	u8 raw_boot_mult;
+	u8 raw_sec_trim_mult;
+	u8 raw_sec_erase_mult;
+	u8 raw_sec_feature_support;
+	u8 raw_trim_mult;
+	u8 raw_pwr_cl_200_195;
+	u8 raw_pwr_cl_200_360;
+	u8 raw_pwr_cl_ddr_52_195;
+	u8 raw_pwr_cl_ddr_52_360;
+	u8 raw_pwr_cl_ddr_200_360;
+	u8 raw_bkops_status;
+	u8 raw_sectors[4];
+	u8 pre_eol_info;
+	u8 device_life_time_est_typ_a;
+	u8 device_life_time_est_typ_b;
+	unsigned int feature_support;
+};
+
+struct sd_scr {
+	unsigned char sda_vsn;
+	unsigned char sda_spec3;
+	unsigned char sda_spec4;
+	unsigned char sda_specx;
+	unsigned char bus_widths;
+	unsigned char cmds;
+};
+
+struct sd_ssr {
+	unsigned int au;
+	unsigned int erase_timeout;
+	unsigned int erase_offset;
+};
+
+struct sd_switch_caps {
+	unsigned int hs_max_dtr;
+	unsigned int uhs_max_dtr;
+	unsigned int sd3_bus_mode;
+	unsigned int sd3_drv_type;
+	unsigned int sd3_curr_limit;
+};
+
+struct sd_ext_reg {
+	u8 fno;
+	u8 page;
+	u16 offset;
+	u8 rev;
+	u8 feature_enabled;
+	u8 feature_support;
+};
+
+struct sdio_cccr {
+	unsigned int sdio_vsn;
+	unsigned int sd_vsn;
+	unsigned int multi_block: 1;
+	unsigned int low_speed: 1;
+	unsigned int wide_bus: 1;
+	unsigned int high_power: 1;
+	unsigned int high_speed: 1;
+	unsigned int disable_cd: 1;
+	unsigned int enable_async_irq: 1;
+};
+
+struct sdio_cis {
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int blksize;
+	unsigned int max_dtr;
+};
+
+struct mmc_part {
+	u64 size;
+	unsigned int part_cfg;
+	char name[20];
+	bool force_ro;
+	unsigned int area_type;
+};
+
+struct sdio_func;
+
+struct sdio_func_tuple;
+
+struct mmc_card {
+	struct mmc_host *host;
+	struct device dev;
+	u32 ocr;
+	unsigned int rca;
+	unsigned int type;
+	unsigned int state;
+	unsigned int quirks;
+	unsigned int quirk_max_rate;
+	bool reenable_cmdq;
+	unsigned int erase_size;
+	unsigned int erase_shift;
+	unsigned int pref_erase;
+	unsigned int eg_boundary;
+	unsigned int erase_arg;
+	u8 erased_byte;
+	u32 raw_cid[4];
+	u32 raw_csd[4];
+	u32 raw_scr[2];
+	u32 raw_ssr[16];
+	struct mmc_cid cid;
+	struct mmc_csd csd;
+	struct mmc_ext_csd ext_csd;
+	struct sd_scr scr;
+	struct sd_ssr ssr;
+	struct sd_switch_caps sw_caps;
+	struct sd_ext_reg ext_power;
+	struct sd_ext_reg ext_perf;
+	unsigned int sdio_funcs;
+	atomic_t sdio_funcs_probed;
+	struct sdio_cccr cccr;
+	struct sdio_cis cis;
+	struct sdio_func *sdio_func[7];
+	struct sdio_func *sdio_single_irq;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+	unsigned int sd_bus_speed;
+	unsigned int mmc_avail_type;
+	unsigned int drive_strength;
+	struct dentry *debugfs_root;
+	struct mmc_part part[7];
+	unsigned int nr_parts;
+	struct workqueue_struct *complete_wq;
+};
+
+enum mmc_err_stat {
+	MMC_ERR_CMD_TIMEOUT = 0,
+	MMC_ERR_CMD_CRC = 1,
+	MMC_ERR_DAT_TIMEOUT = 2,
+	MMC_ERR_DAT_CRC = 3,
+	MMC_ERR_AUTO_CMD = 4,
+	MMC_ERR_ADMA = 5,
+	MMC_ERR_TUNING = 6,
+	MMC_ERR_CMDQ_RED = 7,
+	MMC_ERR_CMDQ_GCE = 8,
+	MMC_ERR_CMDQ_ICCE = 9,
+	MMC_ERR_REQ_TIMEOUT = 10,
+	MMC_ERR_CMDQ_REQ_TIMEOUT = 11,
+	MMC_ERR_ICE_CFG = 12,
+	MMC_ERR_CTRL_TIMEOUT = 13,
+	MMC_ERR_UNEXPECTED_IRQ = 14,
+	MMC_ERR_MAX = 15,
+};
+
+struct mmc_host_ops {
+	void (*post_req)(struct mmc_host *, struct mmc_request *, int);
+	void (*pre_req)(struct mmc_host *, struct mmc_request *);
+	void (*request)(struct mmc_host *, struct mmc_request *);
+	int (*request_atomic)(struct mmc_host *, struct mmc_request *);
+	void (*set_ios)(struct mmc_host *, struct mmc_ios *);
+	int (*get_ro)(struct mmc_host *);
+	int (*get_cd)(struct mmc_host *);
+	void (*enable_sdio_irq)(struct mmc_host *, int);
+	void (*ack_sdio_irq)(struct mmc_host *);
+	void (*init_card)(struct mmc_host *, struct mmc_card *);
+	int (*start_signal_voltage_switch)(struct mmc_host *, struct mmc_ios *);
+	int (*card_busy)(struct mmc_host *);
+	int (*execute_tuning)(struct mmc_host *, u32);
+	int (*prepare_hs400_tuning)(struct mmc_host *, struct mmc_ios *);
+	int (*execute_hs400_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*hs400_prepare_ddr)(struct mmc_host *);
+	void (*hs400_downgrade)(struct mmc_host *);
+	void (*hs400_complete)(struct mmc_host *);
+	void (*hs400_enhanced_strobe)(struct mmc_host *, struct mmc_ios *);
+	int (*select_drive_strength)(struct mmc_card *, unsigned int, int, int, int *);
+	void (*card_hw_reset)(struct mmc_host *);
+	void (*card_event)(struct mmc_host *);
+	int (*multi_io_quirk)(struct mmc_card *, unsigned int, int);
+	int (*init_sd_express)(struct mmc_host *, struct mmc_ios *);
+};
+
+struct mmc_cqe_ops {
+	int (*cqe_enable)(struct mmc_host *, struct mmc_card *);
+	void (*cqe_disable)(struct mmc_host *);
+	int (*cqe_request)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_post_req)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_off)(struct mmc_host *);
+	int (*cqe_wait_for_idle)(struct mmc_host *);
+	bool (*cqe_timeout)(struct mmc_host *, struct mmc_request *, bool *);
+	void (*cqe_recovery_start)(struct mmc_host *);
+	void (*cqe_recovery_finish)(struct mmc_host *);
+};
+
+struct mmc_bus_ops {
+	void (*remove)(struct mmc_host *);
+	void (*detect)(struct mmc_host *);
+	int (*pre_suspend)(struct mmc_host *);
+	int (*suspend)(struct mmc_host *);
+	int (*resume)(struct mmc_host *);
+	int (*runtime_suspend)(struct mmc_host *);
+	int (*runtime_resume)(struct mmc_host *);
+	int (*alive)(struct mmc_host *);
+	int (*shutdown)(struct mmc_host *);
+	int (*hw_reset)(struct mmc_host *);
+	int (*sw_reset)(struct mmc_host *);
+	bool (*cache_enabled)(struct mmc_host *);
+	int (*flush_cache)(struct mmc_host *);
+};
+
+enum mmc_busy_cmd {
+	MMC_BUSY_CMD6 = 0,
+	MMC_BUSY_ERASE = 1,
+	MMC_BUSY_HPI = 2,
+	MMC_BUSY_EXTR_SINGLE = 3,
+	MMC_BUSY_IO = 4,
+};
+
+struct sd_busy_data {
+	struct mmc_card *card;
+	u8 *reg_buf;
+};
+
+typedef void sdio_irq_handler_t(struct sdio_func *);
+
+struct sdio_func {
+	struct mmc_card *card;
+	struct device dev;
+	sdio_irq_handler_t *irq_handler;
+	unsigned int num;
+	unsigned char class;
+	short unsigned int vendor;
+	short unsigned int device;
+	unsigned int max_blksize;
+	unsigned int cur_blksize;
+	unsigned int enable_timeout;
+	unsigned int state;
+	u8 *tmpbuf;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+};
+
+struct sdio_func_tuple {
+	struct sdio_func_tuple *next;
+	unsigned char code;
+	unsigned char size;
+	unsigned char data[0];
+};
+
+enum dmi_entry_type {
+	DMI_ENTRY_BIOS = 0,
+	DMI_ENTRY_SYSTEM = 1,
+	DMI_ENTRY_BASEBOARD = 2,
+	DMI_ENTRY_CHASSIS = 3,
+	DMI_ENTRY_PROCESSOR = 4,
+	DMI_ENTRY_MEM_CONTROLLER = 5,
+	DMI_ENTRY_MEM_MODULE = 6,
+	DMI_ENTRY_CACHE = 7,
+	DMI_ENTRY_PORT_CONNECTOR = 8,
+	DMI_ENTRY_SYSTEM_SLOT = 9,
+	DMI_ENTRY_ONBOARD_DEVICE = 10,
+	DMI_ENTRY_OEMSTRINGS = 11,
+	DMI_ENTRY_SYSCONF = 12,
+	DMI_ENTRY_BIOS_LANG = 13,
+	DMI_ENTRY_GROUP_ASSOC = 14,
+	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
+	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
+	DMI_ENTRY_MEM_DEVICE = 17,
+	DMI_ENTRY_32_MEM_ERROR = 18,
+	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
+	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
+	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
+	DMI_ENTRY_PORTABLE_BATTERY = 22,
+	DMI_ENTRY_SYSTEM_RESET = 23,
+	DMI_ENTRY_HW_SECURITY = 24,
+	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
+	DMI_ENTRY_VOLTAGE_PROBE = 26,
+	DMI_ENTRY_COOLING_DEV = 27,
+	DMI_ENTRY_TEMP_PROBE = 28,
+	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
+	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
+	DMI_ENTRY_BIS_ENTRY = 31,
+	DMI_ENTRY_SYSTEM_BOOT = 32,
+	DMI_ENTRY_MGMT_DEV = 33,
+	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
+	DMI_ENTRY_MGMT_DEV_THRES = 35,
+	DMI_ENTRY_MEM_CHANNEL = 36,
+	DMI_ENTRY_IPMI_DEV = 37,
+	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
+	DMI_ENTRY_ADDITIONAL = 39,
+	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
+	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
+	DMI_ENTRY_INACTIVE = 126,
+	DMI_ENTRY_END_OF_TABLE = 127,
+};
+
+struct dmi_sysfs_entry {
+	struct dmi_header dh;
+	struct kobject kobj;
+	int instance;
+	int position;
+	struct list_head list;
+	struct kobject *child;
+};
+
+struct dmi_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dmi_sysfs_entry *, char *);
+};
+
+struct dmi_sysfs_mapped_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dmi_sysfs_entry *, const struct dmi_header *, char *);
+};
+
+typedef ssize_t (*dmi_callback)(struct dmi_sysfs_entry *, const struct dmi_header *, void *);
+
+struct find_dmi_data {
+	struct dmi_sysfs_entry *entry;
+	dmi_callback callback;
+	void *private;
+	int instance_countdown;
+	ssize_t ret;
+};
+
+struct dmi_read_state {
+	char *buf;
+	loff_t pos;
+	size_t count;
+};
+
+struct dmi_entry_attr_show_data {
+	struct attribute *attr;
+	char *buf;
+};
+
+struct dmi_system_event_log {
+	struct dmi_header header;
+	u16 area_length;
+	u16 header_start_offset;
+	u16 data_start_offset;
+	u8 access_method;
+	u8 status;
+	u32 change_token;
+	union {
+		struct {
+			u16 index_addr;
+			u16 data_addr;
+		} io;
+		u32 phys_addr32;
+		u16 gpnv_handle;
+		u32 access_method_address;
+	};
+	u8 header_format;
+	u8 type_descriptors_supported_count;
+	u8 per_log_type_descriptor_length;
+	u8 supported_log_type_descriptos[0];
+} __attribute__((packed));
+
+typedef u8 (*sel_io_reader)(const struct dmi_system_event_log *, loff_t);
+
+struct qcom_scm_desc {
+	u32 svc;
+	u32 cmd;
+	u32 arginfo;
+	u64 args[10];
+	u32 owner;
+};
+
+struct qcom_scm_res {
+	u64 result[3];
+};
+
+struct arm_smccc_args {
+	long unsigned int args[8];
+};
+
+struct scm_legacy_command {
+	__le32 len;
+	__le32 buf_offset;
+	__le32 resp_hdr_offset;
+	__le32 id;
+	__le32 buf[0];
+};
+
+struct scm_legacy_response {
+	__le32 len;
+	__le32 buf_offset;
+	__le32 is_complete;
+};
+
+struct scmi_revision_info {
+	u16 major_ver;
+	u16 minor_ver;
+	u8 num_protocols;
+	u8 num_agents;
+	u32 impl_ver;
+	char vendor_id[16];
+	char sub_vendor_id[16];
+};
+
+struct scmi_xfer_ops;
+
+struct scmi_proto_helpers_ops;
+
+struct scmi_protocol_handle {
+	struct device *dev;
+	const struct scmi_xfer_ops *xops;
+	const struct scmi_proto_helpers_ops *hops;
+	int (*set_priv)(const struct scmi_protocol_handle *, void *);
+	void * (*get_priv)(const struct scmi_protocol_handle *);
+};
+
+enum scmi_std_protocol {
+	SCMI_PROTOCOL_BASE = 16,
+	SCMI_PROTOCOL_POWER = 17,
+	SCMI_PROTOCOL_SYSTEM = 18,
+	SCMI_PROTOCOL_PERF = 19,
+	SCMI_PROTOCOL_CLOCK = 20,
+	SCMI_PROTOCOL_SENSOR = 21,
+	SCMI_PROTOCOL_RESET = 22,
+	SCMI_PROTOCOL_VOLTAGE = 23,
+	SCMI_PROTOCOL_POWERCAP = 24,
+};
+
+enum scmi_notification_events {
+	SCMI_EVENT_POWER_STATE_CHANGED = 0,
+	SCMI_EVENT_CLOCK_RATE_CHANGED = 0,
+	SCMI_EVENT_CLOCK_RATE_CHANGE_REQUESTED = 1,
+	SCMI_EVENT_PERFORMANCE_LIMITS_CHANGED = 0,
+	SCMI_EVENT_PERFORMANCE_LEVEL_CHANGED = 1,
+	SCMI_EVENT_SENSOR_TRIP_POINT_EVENT = 0,
+	SCMI_EVENT_SENSOR_UPDATE = 1,
+	SCMI_EVENT_RESET_ISSUED = 0,
+	SCMI_EVENT_BASE_ERROR_EVENT = 0,
+	SCMI_EVENT_SYSTEM_POWER_STATE_NOTIFIER = 0,
+	SCMI_EVENT_POWERCAP_CAP_CHANGED = 0,
+	SCMI_EVENT_POWERCAP_MEASUREMENTS_CHANGED = 1,
+};
+
+struct scmi_base_error_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	bool fatal;
+	unsigned int cmd_count;
+	long long unsigned int reports[0];
+};
+
+enum scmi_common_cmd {
+	PROTOCOL_VERSION = 0,
+	PROTOCOL_ATTRIBUTES = 1,
+	PROTOCOL_MESSAGE_ATTRIBUTES = 2,
+};
+
+struct scmi_msg {
+	void *buf;
+	size_t len;
+};
+
+struct scmi_msg_hdr {
+	u8 id;
+	u8 protocol_id;
+	u8 type;
+	u16 seq;
+	u32 status;
+	bool poll_completion;
+};
+
+struct scmi_xfer {
+	int transfer_id;
+	struct scmi_msg_hdr hdr;
+	struct scmi_msg tx;
+	struct scmi_msg rx;
+	struct completion done;
+	struct completion *async_done;
+	bool pending;
+	struct hlist_node node;
+	refcount_t users;
+	atomic_t busy;
+	int state;
+	spinlock_t lock;
+	void *priv;
+};
+
+struct scmi_xfer_ops {
+	int (*version_get)(const struct scmi_protocol_handle *, u32 *);
+	int (*xfer_get_init)(const struct scmi_protocol_handle *, u8, size_t, size_t, struct scmi_xfer **);
+	void (*reset_rx_to_maxsz)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	int (*do_xfer)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	int (*do_xfer_with_response)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	void (*xfer_put)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+};
+
+struct scmi_iterator_ops;
+
+struct scmi_fc_db_info;
+
+struct scmi_proto_helpers_ops {
+	int (*extended_name_get)(const struct scmi_protocol_handle *, u8, u32, char *, size_t);
+	void * (*iter_response_init)(const struct scmi_protocol_handle *, struct scmi_iterator_ops *, unsigned int, u8, size_t, void *);
+	int (*iter_response_run)(void *);
+	void (*fastchannel_init)(const struct scmi_protocol_handle *, u8, u32, u32, u32, void **, struct scmi_fc_db_info **);
+	void (*fastchannel_db_ring)(struct scmi_fc_db_info *);
+};
+
+struct scmi_iterator_state {
+	unsigned int desc_index;
+	unsigned int num_returned;
+	unsigned int num_remaining;
+	unsigned int max_resources;
+	unsigned int loop_idx;
+	size_t rx_len;
+	void *priv;
+};
+
+struct scmi_iterator_ops {
+	void (*prepare_message)(void *, unsigned int, const void *);
+	int (*update_state)(struct scmi_iterator_state *, const void *, void *);
+	int (*process_response)(const struct scmi_protocol_handle *, const void *, struct scmi_iterator_state *, void *);
+};
+
+struct scmi_fc_db_info {
+	int width;
+	u64 set;
+	u64 mask;
+	void *addr;
+};
+
+typedef int (*scmi_prot_init_ph_fn_t)(const struct scmi_protocol_handle *);
+
+struct scmi_protocol_events;
+
+struct scmi_protocol {
+	const u8 id;
+	struct module *owner;
+	const scmi_prot_init_ph_fn_t instance_init;
+	const scmi_prot_init_ph_fn_t instance_deinit;
+	const void *ops;
+	const struct scmi_protocol_events *events;
+};
+
+struct scmi_event_ops;
+
+struct scmi_event;
+
+struct scmi_protocol_events {
+	size_t queue_sz;
+	const struct scmi_event_ops *ops;
+	const struct scmi_event *evts;
+	unsigned int num_events;
+	unsigned int num_sources;
+};
+
+struct scmi_event {
+	u8 id;
+	size_t max_payld_sz;
+	size_t max_report_sz;
+};
+
+struct scmi_event_ops {
+	int (*get_num_sources)(const struct scmi_protocol_handle *);
+	int (*set_notify_enabled)(const struct scmi_protocol_handle *, u8, u32, bool);
+	void * (*fill_custom_report)(const struct scmi_protocol_handle *, u8, ktime_t, const void *, size_t, void *, u32 *);
+};
+
+enum scmi_base_protocol_cmd {
+	BASE_DISCOVER_VENDOR = 3,
+	BASE_DISCOVER_SUB_VENDOR = 4,
+	BASE_DISCOVER_IMPLEMENT_VERSION = 5,
+	BASE_DISCOVER_LIST_PROTOCOLS = 6,
+	BASE_DISCOVER_AGENT = 7,
+	BASE_NOTIFY_ERRORS = 8,
+	BASE_SET_DEVICE_PERMISSIONS = 9,
+	BASE_SET_PROTOCOL_PERMISSIONS = 10,
+	BASE_RESET_AGENT_CONFIGURATION = 11,
+};
+
+struct scmi_msg_resp_base_attributes {
+	u8 num_protocols;
+	u8 num_agents;
+	__le16 reserved;
+};
+
+struct scmi_msg_resp_base_discover_agent {
+	__le32 agent_id;
+	u8 name[16];
+};
+
+struct scmi_msg_base_error_notify {
+	__le32 event_control;
+};
+
+struct scmi_base_error_notify_payld {
+	__le32 agent_id;
+	__le32 error_status;
+	__le64 msg_reports[1024];
+};
+
+struct scmi_reset_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const char * (*name_get)(const struct scmi_protocol_handle *, u32);
+	int (*latency_get)(const struct scmi_protocol_handle *, u32);
+	int (*reset)(const struct scmi_protocol_handle *, u32);
+	int (*assert)(const struct scmi_protocol_handle *, u32);
+	int (*deassert)(const struct scmi_protocol_handle *, u32);
+};
+
+struct scmi_reset_issued_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int reset_state;
+};
+
+enum scmi_reset_protocol_cmd {
+	RESET_DOMAIN_ATTRIBUTES = 3,
+	RESET = 4,
+	RESET_NOTIFY = 5,
+	RESET_DOMAIN_NAME_GET = 6,
+};
+
+struct scmi_msg_resp_reset_domain_attributes {
+	__le32 attributes;
+	__le32 latency;
+	u8 name[16];
+};
+
+struct scmi_msg_reset_domain_reset {
+	__le32 domain_id;
+	__le32 flags;
+	__le32 reset_state;
+};
+
+struct scmi_msg_reset_notify {
+	__le32 id;
+	__le32 event_control;
+};
+
+struct scmi_reset_issued_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 reset_state;
+};
+
+struct reset_dom_info {
+	bool async_reset;
+	bool reset_notify;
+	u32 latency_us;
+	char name[64];
+};
+
+struct scmi_reset_info {
+	u32 version;
+	int num_domains;
+	struct reset_dom_info *dom_info;
+};
+
+struct mbox_client {
+	struct device *dev;
+	bool tx_block;
+	long unsigned int tx_tout;
+	bool knows_txdone;
+	void (*rx_callback)(struct mbox_client *, void *);
+	void (*tx_prepare)(struct mbox_client *, void *);
+	void (*tx_done)(struct mbox_client *, void *, int);
+};
+
+struct scmi_device;
+
+struct scmi_handle;
+
+struct scmi_notify_ops {
+	int (*devm_event_notifier_register)(struct scmi_device *, u8, u8, const u32 *, struct notifier_block *);
+	int (*devm_event_notifier_unregister)(struct scmi_device *, u8, u8, const u32 *, struct notifier_block *);
+	int (*event_notifier_register)(const struct scmi_handle *, u8, u8, const u32 *, struct notifier_block *);
+	int (*event_notifier_unregister)(const struct scmi_handle *, u8, u8, const u32 *, struct notifier_block *);
+};
+
+struct scmi_device {
+	u32 id;
+	u8 protocol_id;
+	const char *name;
+	struct device dev;
+	struct scmi_handle *handle;
+};
+
+struct scmi_handle {
+	struct device *dev;
+	struct scmi_revision_info *version;
+	int (*devm_protocol_acquire)(struct scmi_device *, u8);
+	const void * (*devm_protocol_get)(struct scmi_device *, u8, struct scmi_protocol_handle **);
+	void (*devm_protocol_put)(struct scmi_device *, u8);
+	bool (*is_transport_atomic)(const struct scmi_handle *, unsigned int *);
+	const struct scmi_notify_ops *notify_ops;
+};
+
+struct scmi_chan_info {
+	struct device *dev;
+	struct scmi_handle *handle;
+	bool no_completion_irq;
+	void *transport_info;
+};
+
+struct scmi_transport_ops {
+	int (*link_supplier)(struct device *);
+	bool (*chan_available)(struct device *, int);
+	int (*chan_setup)(struct scmi_chan_info *, struct device *, bool);
+	int (*chan_free)(int, void *, void *);
+	unsigned int (*get_max_msg)(struct scmi_chan_info *);
+	int (*send_message)(struct scmi_chan_info *, struct scmi_xfer *);
+	void (*mark_txdone)(struct scmi_chan_info *, int, struct scmi_xfer *);
+	void (*fetch_response)(struct scmi_chan_info *, struct scmi_xfer *);
+	void (*fetch_notification)(struct scmi_chan_info *, size_t, struct scmi_xfer *);
+	void (*clear_channel)(struct scmi_chan_info *);
+	bool (*poll_done)(struct scmi_chan_info *, struct scmi_xfer *);
+};
+
+struct scmi_desc {
+	int (*transport_init)();
+	void (*transport_exit)();
+	const struct scmi_transport_ops *ops;
+	int max_rx_timeout_ms;
+	int max_msg;
+	int max_msg_size;
+	const bool force_polling;
+	const bool sync_cmds_completed_on_ret;
+	const bool atomic_enabled;
+};
+
+struct scmi_shared_mem;
+
+struct mbox_chan;
+
+struct scmi_mailbox {
+	struct mbox_client cl;
+	struct mbox_chan *chan;
+	struct scmi_chan_info *cinfo;
+	struct scmi_shared_mem *shmem;
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART = 2,
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct sys_off_handler;
+
+struct linux_efi_tpm_eventlog {
+	u32 size;
+	u32 final_events_preboot_size;
+	u8 version;
+	u8 log[0];
+};
+
+struct efi_tcg2_final_events_table {
+	u64 version;
+	u64 nr_events;
+	u8 events[0];
+};
+
+enum tcpa_event_types {
+	PREBOOT = 0,
+	POST_CODE = 1,
+	UNUSED = 2,
+	NO_ACTION = 3,
+	SEPARATOR = 4,
+	ACTION = 5,
+	EVENT_TAG = 6,
+	SCRTM_CONTENTS = 7,
+	SCRTM_VERSION = 8,
+	CPU_MICROCODE = 9,
+	PLATFORM_CONFIG_FLAGS = 10,
+	TABLE_OF_DEVICES = 11,
+	COMPACT_HASH = 12,
+	IPL = 13,
+	IPL_PARTITION_DATA = 14,
+	NONHOST_CODE = 15,
+	NONHOST_CONFIG = 16,
+	NONHOST_INFO = 17,
+};
+
+struct tcg_efi_specid_event_algs {
+	u16 alg_id;
+	u16 digest_size;
+};
+
+struct tcg_efi_specid_event_head {
+	u8 signature[16];
+	u32 platform_class;
+	u8 spec_version_minor;
+	u8 spec_version_major;
+	u8 spec_errata;
+	u8 uintnsize;
+	u32 num_algs;
+	struct tcg_efi_specid_event_algs digest_sizes[0];
+};
+
+struct tcg_pcr_event {
+	u32 pcr_idx;
+	u32 event_type;
+	u8 digest[20];
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_event_field {
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_pcr_event2_head {
+	u32 pcr_idx;
+	u32 event_type;
+	u32 count;
+	struct tpm_digest digests[0];
+};
+
+struct efi_system_resource_entry_v1 {
+	efi_guid_t fw_class;
+	u32 fw_type;
+	u32 fw_version;
+	u32 lowest_supported_fw_version;
+	u32 capsule_flags;
+	u32 last_attempt_version;
+	u32 last_attempt_status;
+};
+
+struct efi_system_resource_table {
+	u32 fw_resource_count;
+	u32 fw_resource_count_max;
+	u64 fw_resource_version;
+	u8 entries[0];
+};
+
+struct esre_entry {
+	union {
+		struct efi_system_resource_entry_v1 *esre1;
+	} esre;
+	struct kobject kobj;
+	struct list_head list;
+};
+
+struct esre_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct esre_entry *, char *);
+	ssize_t (*store)(struct esre_entry *, const char *, size_t);
+};
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+struct cper_arm_err_info {
+	u8 version;
+	u8 length;
+	u16 validation_bits;
+	u8 type;
+	u16 multiple_error;
+	u8 flags;
+	u64 error_info;
+	u64 virt_fault_addr;
+	u64 physical_fault_addr;
+} __attribute__((packed));
+
+struct cper_arm_ctx_info {
+	u16 version;
+	u16 type;
+	u32 size;
+};
+
+enum imx_sc_rpc_svc {
+	IMX_SC_RPC_SVC_UNKNOWN = 0,
+	IMX_SC_RPC_SVC_RETURN = 1,
+	IMX_SC_RPC_SVC_PM = 2,
+	IMX_SC_RPC_SVC_RM = 3,
+	IMX_SC_RPC_SVC_TIMER = 5,
+	IMX_SC_RPC_SVC_PAD = 6,
+	IMX_SC_RPC_SVC_MISC = 7,
+	IMX_SC_RPC_SVC_IRQ = 8,
+};
+
+struct imx_sc_rpc_msg {
+	uint8_t ver;
+	uint8_t size;
+	uint8_t svc;
+	uint8_t func;
+};
+
+enum imx_misc_func {
+	IMX_SC_MISC_FUNC_UNKNOWN = 0,
+	IMX_SC_MISC_FUNC_SET_CONTROL = 1,
+	IMX_SC_MISC_FUNC_GET_CONTROL = 2,
+	IMX_SC_MISC_FUNC_SET_MAX_DMA_GROUP = 4,
+	IMX_SC_MISC_FUNC_SET_DMA_GROUP = 5,
+	IMX_SC_MISC_FUNC_SECO_IMAGE_LOAD = 8,
+	IMX_SC_MISC_FUNC_SECO_AUTHENTICATE = 9,
+	IMX_SC_MISC_FUNC_DEBUG_OUT = 10,
+	IMX_SC_MISC_FUNC_WAVEFORM_CAPTURE = 6,
+	IMX_SC_MISC_FUNC_BUILD_INFO = 15,
+	IMX_SC_MISC_FUNC_UNIQUE_ID = 19,
+	IMX_SC_MISC_FUNC_SET_ARI = 3,
+	IMX_SC_MISC_FUNC_BOOT_STATUS = 7,
+	IMX_SC_MISC_FUNC_BOOT_DONE = 14,
+	IMX_SC_MISC_FUNC_OTP_FUSE_READ = 11,
+	IMX_SC_MISC_FUNC_OTP_FUSE_WRITE = 17,
+	IMX_SC_MISC_FUNC_SET_TEMP = 12,
+	IMX_SC_MISC_FUNC_GET_TEMP = 13,
+	IMX_SC_MISC_FUNC_GET_BOOT_DEV = 16,
+	IMX_SC_MISC_FUNC_GET_BUTTON_STATUS = 18,
+};
+
+struct imx_sc_ipc;
+
+struct imx_sc_chan {
+	struct imx_sc_ipc *sc_ipc;
+	struct mbox_client cl;
+	struct mbox_chan *ch;
+	int idx;
+	struct completion tx_done;
+};
+
+struct imx_sc_ipc {
+	struct imx_sc_chan chans[8];
+	struct device *dev;
+	struct mutex lock;
+	struct completion done;
+	bool fast_ipc;
+	u32 *msg;
+	u8 rx_size;
+	u8 count;
+};
+
+enum imx_sc_error_codes {
+	IMX_SC_ERR_NONE = 0,
+	IMX_SC_ERR_VERSION = 1,
+	IMX_SC_ERR_CONFIG = 2,
+	IMX_SC_ERR_PARM = 3,
+	IMX_SC_ERR_NOACCESS = 4,
+	IMX_SC_ERR_LOCKED = 5,
+	IMX_SC_ERR_UNAVAILABLE = 6,
+	IMX_SC_ERR_NOTFOUND = 7,
+	IMX_SC_ERR_NOPOWER = 8,
+	IMX_SC_ERR_IPC = 9,
+	IMX_SC_ERR_BUSY = 10,
+	IMX_SC_ERR_FAIL = 11,
+	IMX_SC_ERR_LAST = 12,
+};
+
+enum imx_sc_pm_func {
+	IMX_SC_PM_FUNC_UNKNOWN = 0,
+	IMX_SC_PM_FUNC_SET_SYS_POWER_MODE = 19,
+	IMX_SC_PM_FUNC_SET_PARTITION_POWER_MODE = 1,
+	IMX_SC_PM_FUNC_GET_SYS_POWER_MODE = 2,
+	IMX_SC_PM_FUNC_SET_RESOURCE_POWER_MODE = 3,
+	IMX_SC_PM_FUNC_GET_RESOURCE_POWER_MODE = 4,
+	IMX_SC_PM_FUNC_REQ_LOW_POWER_MODE = 16,
+	IMX_SC_PM_FUNC_SET_CPU_RESUME_ADDR = 17,
+	IMX_SC_PM_FUNC_REQ_SYS_IF_POWER_MODE = 18,
+	IMX_SC_PM_FUNC_SET_CLOCK_RATE = 5,
+	IMX_SC_PM_FUNC_GET_CLOCK_RATE = 6,
+	IMX_SC_PM_FUNC_CLOCK_ENABLE = 7,
+	IMX_SC_PM_FUNC_SET_CLOCK_PARENT = 14,
+	IMX_SC_PM_FUNC_GET_CLOCK_PARENT = 15,
+	IMX_SC_PM_FUNC_RESET = 13,
+	IMX_SC_PM_FUNC_RESET_REASON = 10,
+	IMX_SC_PM_FUNC_BOOT = 8,
+	IMX_SC_PM_FUNC_REBOOT = 9,
+	IMX_SC_PM_FUNC_REBOOT_PARTITION = 12,
+	IMX_SC_PM_FUNC_CPU_START = 11,
+};
+
+struct imx_sc_msg_req_set_resource_power_mode {
+	struct imx_sc_rpc_msg hdr;
+	u16 resource;
+	u8 mode;
+};
+
+struct imx_sc_pm_domain {
+	struct generic_pm_domain pd;
+	char name[20];
+	u32 rsrc;
+};
+
+struct imx_sc_pd_range {
+	char *name;
+	u32 rsrc;
+	u8 num;
+	bool postfix;
+	u8 start_from;
+};
+
+struct imx_sc_pd_soc {
+	const struct imx_sc_pd_range *pd_ranges;
+	u8 num_ranges;
+};
+
+struct imx_sc_ipc;
+
+enum mrq_debugfs_commands {
+	CMD_DEBUGFS_READ = 1,
+	CMD_DEBUGFS_WRITE = 2,
+	CMD_DEBUGFS_DUMPDIR = 3,
+	CMD_DEBUGFS_MAX = 4,
+};
+
+struct cmd_debugfs_fileop_request {
+	uint32_t fnameaddr;
+	uint32_t fnamelen;
+	uint32_t dataaddr;
+	uint32_t datalen;
+};
+
+struct cmd_debugfs_dumpdir_request {
+	uint32_t dataaddr;
+	uint32_t datalen;
+};
+
+struct cmd_debugfs_fileop_response {
+	uint32_t reserved;
+	uint32_t nbytes;
+};
+
+struct cmd_debugfs_dumpdir_response {
+	uint32_t reserved;
+	uint32_t nbytes;
+};
+
+struct mrq_debugfs_request {
+	uint32_t cmd;
+	union {
+		struct cmd_debugfs_fileop_request fop;
+		struct cmd_debugfs_dumpdir_request dumpdir;
+	};
+};
+
+struct mrq_debugfs_response {
+	int32_t reserved;
+	union {
+		struct cmd_debugfs_fileop_response fop;
+		struct cmd_debugfs_dumpdir_response dumpdir;
+	};
+};
+
+enum mrq_debug_commands {
+	CMD_DEBUG_OPEN_RO = 0,
+	CMD_DEBUG_OPEN_WO = 1,
+	CMD_DEBUG_READ = 2,
+	CMD_DEBUG_WRITE = 3,
+	CMD_DEBUG_CLOSE = 4,
+	CMD_DEBUG_MAX = 5,
+};
+
+struct cmd_debug_fopen_request {
+	char name[116];
+};
+
+struct cmd_debug_fopen_response {
+	uint32_t fd;
+	uint32_t datalen;
+};
+
+struct cmd_debug_fread_request {
+	uint32_t fd;
+};
+
+struct cmd_debug_fread_response {
+	uint32_t readlen;
+	char data[116];
+};
+
+struct cmd_debug_fwrite_request {
+	uint32_t fd;
+	uint32_t datalen;
+	char data[108];
+};
+
+struct cmd_debug_fclose_request {
+	uint32_t fd;
+};
+
+struct mrq_debug_request {
+	uint32_t cmd;
+	union {
+		struct cmd_debug_fopen_request fop;
+		struct cmd_debug_fread_request frd;
+		struct cmd_debug_fwrite_request fwr;
+		struct cmd_debug_fclose_request fcl;
+	};
+};
+
+struct mrq_debug_response {
+	union {
+		struct cmd_debug_fopen_response fop;
+		struct cmd_debug_fread_response frd;
+	};
+};
+
+struct tegra_bpmp_ops;
+
+struct tegra_bpmp_soc {
+	struct {
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} cpu_tx;
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} thread;
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} cpu_rx;
+	} channels;
+	const struct tegra_bpmp_ops *ops;
+	unsigned int num_resets;
+};
+
+struct tegra_bpmp;
+
+struct tegra_bpmp_channel;
+
+struct tegra_bpmp_ops {
+	int (*init)(struct tegra_bpmp *);
+	void (*deinit)(struct tegra_bpmp *);
+	bool (*is_response_ready)(struct tegra_bpmp_channel *);
+	bool (*is_request_ready)(struct tegra_bpmp_channel *);
+	int (*ack_response)(struct tegra_bpmp_channel *);
+	int (*ack_request)(struct tegra_bpmp_channel *);
+	bool (*is_response_channel_free)(struct tegra_bpmp_channel *);
+	bool (*is_request_channel_free)(struct tegra_bpmp_channel *);
+	int (*post_response)(struct tegra_bpmp_channel *);
+	int (*post_request)(struct tegra_bpmp_channel *);
+	int (*ring_doorbell)(struct tegra_bpmp *);
+	int (*resume)(struct tegra_bpmp *);
+};
+
+struct tegra_bpmp_mb_data {
+	u32 code;
+	u32 flags;
+	u8 data[120];
+};
+
+struct tegra_ivc;
+
+struct tegra_bpmp_channel {
+	struct tegra_bpmp *bpmp;
+	struct tegra_bpmp_mb_data *ib;
+	struct tegra_bpmp_mb_data *ob;
+	struct completion completion;
+	struct tegra_ivc *ivc;
+	unsigned int index;
+};
+
+struct tegra_bpmp_clk;
+
+struct tegra_bpmp {
+	const struct tegra_bpmp_soc *soc;
+	struct device *dev;
+	void *priv;
+	struct {
+		struct mbox_client client;
+		struct mbox_chan *channel;
+	} mbox;
+	spinlock_t atomic_tx_lock;
+	struct tegra_bpmp_channel *tx_channel;
+	struct tegra_bpmp_channel *rx_channel;
+	struct tegra_bpmp_channel *threaded_channels;
+	struct {
+		long unsigned int *allocated;
+		long unsigned int *busy;
+		unsigned int count;
+		struct semaphore lock;
+	} threaded;
+	struct list_head mrqs;
+	spinlock_t lock;
+	struct tegra_bpmp_clk **clocks;
+	unsigned int num_clocks;
+	struct reset_controller_dev rstc;
+	struct genpd_onecell_data genpd;
+	struct dentry *debugfs_mirror;
+};
+
+struct tegra_bpmp_message {
+	unsigned int mrq;
+	struct {
+		const void *data;
+		size_t size;
+	} tx;
+	struct {
+		void *data;
+		size_t size;
+		int ret;
+	} rx;
+};
+
+struct seqbuf {
+	char *buf;
+	size_t pos;
+	size_t size;
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_ARCHTIMER = 1,
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = 2,
+	VDSO_CLOCKMODE_MAX = 3,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	long unsigned int flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct module *owner;
+};
+
+struct clocksource_mmio {
+	void *reg;
+	struct clocksource clksrc;
+};
+
+enum arm_smccc_conduit {
+	SMCCC_CONDUIT_NONE = 0,
+	SMCCC_CONDUIT_SMC = 1,
+	SMCCC_CONDUIT_HVC = 2,
+};
+
+enum arch_timer_reg {
+	ARCH_TIMER_REG_CTRL = 0,
+	ARCH_TIMER_REG_CVAL = 1,
+};
+
+enum arch_timer_spi_nr {
+	ARCH_TIMER_PHYS_SPI = 0,
+	ARCH_TIMER_VIRT_SPI = 1,
+	ARCH_TIMER_MAX_TIMER_SPI = 2,
+};
+
+enum arch_timer_erratum_match_type {
+	ate_match_dt = 0,
+	ate_match_local_cap_id = 1,
+	ate_match_acpi_oem_info = 2,
+};
+
+struct arch_timer_erratum_workaround {
+	enum arch_timer_erratum_match_type match_type;
+	const void *id;
+	const char *desc;
+	u64 (*read_cntpct_el0)();
+	u64 (*read_cntvct_el0)();
+	int (*set_next_event_phys)(long unsigned int, struct clock_event_device *);
+	int (*set_next_event_virt)(long unsigned int, struct clock_event_device *);
+	bool disable_compat_vdso;
+};
+
+typedef int (*of_init_fn_1_ret)(struct device_node *);
+
+typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
+
+struct acpi_probe_entry;
+
+typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
+
+struct acpi_probe_entry {
+	__u8 id[5];
+	__u8 type;
+	acpi_probe_entry_validate_subtbl subtable_valid;
+	union {
+		acpi_tbl_table_handler probe_table;
+		acpi_tbl_entry_handler probe_subtbl;
+	};
+	kernel_ulong_t driver_data;
+};
+
+struct arch_timer {
+	void *base;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct clock_event_device evt;
+};
+
+struct ate_acpi_oem_info {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+};
+
+typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, const void *);
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_report;
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_field_entry;
+
+struct hid_device;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	unsigned int type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	bool registered;
+	struct list_head reports;
+	unsigned int application;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+enum hid_battery_status {
+	HID_BATTERY_UNKNOWN = 0,
+	HID_BATTERY_QUERIED = 1,
+	HID_BATTERY_REPORTED = 2,
+};
+
+struct hid_driver;
+
+struct hid_ll_driver;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	struct power_supply *battery;
+	__s32 battery_capacity;
+	__s32 battery_min;
+	__s32 battery_max;
+	__s32 battery_report_type;
+	__s32 battery_report_id;
+	enum hid_battery_status battery_status;
+	bool battery_avoid_query;
+	ktime_t battery_ratelimit_time;
+	long unsigned int status;
+	unsigned int claimed;
+	unsigned int quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	short unsigned int debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+};
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	int (*suspend)(struct hid_device *, pm_message_t);
+	int (*resume)(struct hid_device *);
+	int (*reset_resume)(struct hid_device *);
+	struct device_driver driver;
+};
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct ntrig_data {
+	__u16 x;
+	__u16 y;
+	__u16 w;
+	__u16 h;
+	__u16 id;
+	bool tipswitch;
+	bool confidence;
+	bool first_contact_touch;
+	bool reading_mt;
+	__u8 mt_footer[4];
+	__u8 mt_foot_count;
+	__s8 act_state;
+	__s8 deactivate_slack;
+	__s8 activate_slack;
+	__u16 min_width;
+	__u16 min_height;
+	__u16 activation_width;
+	__u16 activation_height;
+	__u16 sensor_logical_width;
+	__u16 sensor_logical_height;
+	__u16 sensor_physical_width;
+	__u16 sensor_physical_height;
+};
+
+struct of_reconfig_data {
+	struct device_node *dn;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+enum of_reconfig_change {
+	OF_RECONFIG_NO_CHANGE = 0,
+	OF_RECONFIG_CHANGE_ADD = 1,
+	OF_RECONFIG_CHANGE_REMOVE = 2,
+};
+
+struct of_changeset_entry {
+	struct list_head node;
+	long unsigned int action;
+	struct device_node *np;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+struct of_changeset {
+	struct list_head entries;
+};
+
+enum of_overlay_notify_action {
+	OF_OVERLAY_INIT = 0,
+	OF_OVERLAY_PRE_APPLY = 1,
+	OF_OVERLAY_POST_APPLY = 2,
+	OF_OVERLAY_PRE_REMOVE = 3,
+	OF_OVERLAY_POST_REMOVE = 4,
+};
+
+struct of_overlay_notify_data {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+typedef __be32 fdt32_t;
+
+struct fdt_header {
+	fdt32_t magic;
+	fdt32_t totalsize;
+	fdt32_t off_dt_struct;
+	fdt32_t off_dt_strings;
+	fdt32_t off_mem_rsvmap;
+	fdt32_t version;
+	fdt32_t last_comp_version;
+	fdt32_t boot_cpuid_phys;
+	fdt32_t size_dt_strings;
+	fdt32_t size_dt_struct;
+};
+
+struct target {
+	struct device_node *np;
+	bool in_livetree;
+};
+
+struct fragment {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+struct overlay_changeset {
+	int id;
+	struct list_head ovcs_list;
+	const void *new_fdt;
+	const void *overlay_mem;
+	struct device_node *overlay_root;
+	enum of_overlay_notify_action notify_state;
+	int count;
+	struct fragment *fragments;
+	bool symbols_fragment;
+	struct of_changeset cset;
+};
+
+struct mbox_chan_ops {
+	int (*send_data)(struct mbox_chan *, void *);
+	int (*flush)(struct mbox_chan *, long unsigned int);
+	int (*startup)(struct mbox_chan *);
+	void (*shutdown)(struct mbox_chan *);
+	bool (*last_tx_done)(struct mbox_chan *);
+	bool (*peek_data)(struct mbox_chan *);
+};
+
+struct mbox_controller;
+
+struct mbox_chan {
+	struct mbox_controller *mbox;
+	unsigned int txdone_method;
+	struct mbox_client *cl;
+	struct completion tx_complete;
+	void *active_req;
+	unsigned int msg_count;
+	unsigned int msg_free;
+	void *msg_data[20];
+	spinlock_t lock;
+	void *con_priv;
+};
+
+struct mbox_controller {
+	struct device *dev;
+	const struct mbox_chan_ops *ops;
+	struct mbox_chan *chans;
+	int num_chans;
+	bool txdone_irq;
+	bool txdone_poll;
+	unsigned int txpoll_period;
+	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
+	struct hrtimer poll_hrt;
+	spinlock_t poll_hrt_lock;
+	struct list_head node;
+};
+
+struct rockchip_mbox_msg {
+	u32 cmd;
+	int rx_size;
+};
+
+struct rockchip_mbox_data {
+	int num_chans;
+};
+
+struct rockchip_mbox;
+
+struct rockchip_mbox_chan {
+	int idx;
+	int irq;
+	struct rockchip_mbox_msg *msg;
+	struct rockchip_mbox *mb;
+};
+
+struct rockchip_mbox {
+	struct mbox_controller mbox;
+	struct clk *pclk;
+	void *mbox_base;
+	u32 buf_size;
+	struct rockchip_mbox_chan *chans;
+};
+
+struct zynqmp_ipi_message {
+	size_t len;
+	u8 data[0];
+};
+
+struct zynqmp_ipi_mchan {
+	int is_opened;
+	void *req_buf;
+	void *resp_buf;
+	void *rx_buf;
+	size_t req_buf_size;
+	size_t resp_buf_size;
+	unsigned int chan_type;
+};
+
+struct zynqmp_ipi_pdata;
+
+struct zynqmp_ipi_mbox {
+	struct zynqmp_ipi_pdata *pdata;
+	struct device dev;
+	u32 remote_id;
+	struct mbox_controller mbox;
+	struct zynqmp_ipi_mchan mchans[2];
+};
+
+struct zynqmp_ipi_pdata {
+	struct device *dev;
+	int irq;
+	unsigned int method;
+	u32 local_id;
+	int num_mboxes;
+	struct zynqmp_ipi_mbox *ipi_mboxes;
+};
+
+struct resource_table {
+	u32 ver;
+	u32 num;
+	u32 reserved[2];
+	u32 offset[0];
+};
+
+enum rproc_dump_mechanism {
+	RPROC_COREDUMP_DISABLED = 0,
+	RPROC_COREDUMP_ENABLED = 1,
+	RPROC_COREDUMP_INLINE = 2,
+};
+
+struct rproc_ops;
+
+struct rproc {
+	struct list_head node;
+	struct iommu_domain *domain;
+	const char *name;
+	const char *firmware;
+	void *priv;
+	struct rproc_ops *ops;
+	struct device dev;
+	atomic_t power;
+	unsigned int state;
+	enum rproc_dump_mechanism dump_conf;
+	struct mutex lock;
+	struct dentry *dbg_dir;
+	struct list_head traces;
+	int num_traces;
+	struct list_head carveouts;
+	struct list_head mappings;
+	u64 bootaddr;
+	struct list_head rvdevs;
+	struct list_head subdevs;
+	struct idr notifyids;
+	int index;
+	struct work_struct crash_handler;
+	unsigned int crash_cnt;
+	bool recovery_disabled;
+	int max_notifyid;
+	struct resource_table *table_ptr;
+	struct resource_table *clean_table;
+	struct resource_table *cached_table;
+	size_t table_sz;
+	bool has_iommu;
+	bool auto_boot;
+	bool sysfs_read_only;
+	struct list_head dump_segments;
+	int nb_vdev;
+	u8 elf_class;
+	u16 elf_machine;
+	struct cdev cdev;
+	bool cdev_put_on_release;
+};
+
+struct firmware;
+
+struct rproc_ops {
+	int (*prepare)(struct rproc *);
+	int (*unprepare)(struct rproc *);
+	int (*start)(struct rproc *);
+	int (*stop)(struct rproc *);
+	int (*attach)(struct rproc *);
+	int (*detach)(struct rproc *);
+	void (*kick)(struct rproc *, int);
+	void * (*da_to_va)(struct rproc *, u64, size_t, bool *);
+	int (*parse_fw)(struct rproc *, const struct firmware *);
+	int (*handle_rsc)(struct rproc *, u32, void *, int, int);
+	struct resource_table * (*find_loaded_rsc_table)(struct rproc *, const struct firmware *);
+	struct resource_table * (*get_loaded_rsc_table)(struct rproc *, size_t *);
+	int (*load)(struct rproc *, const struct firmware *);
+	int (*sanity_check)(struct rproc *, const struct firmware *);
+	u64 (*get_boot_addr)(struct rproc *, const struct firmware *);
+	long unsigned int (*panic)(struct rproc *);
+	void (*coredump)(struct rproc *);
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+enum rproc_state {
+	RPROC_OFFLINE = 0,
+	RPROC_SUSPENDED = 1,
+	RPROC_RUNNING = 2,
+	RPROC_CRASHED = 3,
+	RPROC_DELETED = 4,
+	RPROC_ATTACHED = 5,
+	RPROC_DETACHED = 6,
+	RPROC_LAST = 7,
+};
+
+struct devfreq_event_desc;
+
+struct devfreq_event_dev {
+	struct list_head node;
+	struct device dev;
+	struct mutex lock;
+	u32 enable_count;
+	const struct devfreq_event_desc *desc;
+};
+
+struct devfreq_event_ops;
+
+struct devfreq_event_desc {
+	const char *name;
+	u32 event_type;
+	void *driver_data;
+	const struct devfreq_event_ops *ops;
+};
+
+struct devfreq_event_data {
+	long unsigned int load_count;
+	long unsigned int total_count;
+};
+
+struct devfreq_event_ops {
+	int (*enable)(struct devfreq_event_dev *);
+	int (*disable)(struct devfreq_event_dev *);
+	int (*reset)(struct devfreq_event_dev *);
+	int (*set_event)(struct devfreq_event_dev *);
+	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
+};
+
+struct icc_node;
+
+struct icc_node_data {
+	struct icc_node *node;
+	u32 tag;
+};
+
+struct icc_provider;
+
+struct icc_node {
+	int id;
+	const char *name;
+	struct icc_node **links;
+	size_t num_links;
+	struct icc_provider *provider;
+	struct list_head node_list;
+	struct list_head search_list;
+	struct icc_node *reverse;
+	u8 is_traversed: 1;
+	struct hlist_head req_list;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 init_avg;
+	u32 init_peak;
+	void *data;
+};
+
+struct icc_provider {
+	struct list_head provider_list;
+	struct list_head nodes;
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	void (*pre_aggregate)(struct icc_node *);
+	int (*get_bw)(struct icc_node *, u32 *, u32 *);
+	struct icc_node * (*xlate)(struct of_phandle_args *, void *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+	struct device *dev;
+	int users;
+	bool inter_set;
+	void *data;
+};
+
+struct tegra_mc_timing {
+	long unsigned int rate;
+	u32 *emem_data;
+};
+
+struct tegra_mc_client {
+	unsigned int id;
+	const char *name;
+	union {
+		unsigned int swgroup;
+		unsigned int sid;
+	};
+	unsigned int fifo_size;
+	struct {
+		struct {
+			unsigned int reg;
+			unsigned int bit;
+		} smmu;
+		struct {
+			unsigned int reg;
+			unsigned int shift;
+			unsigned int mask;
+			unsigned int def;
+		} la;
+		struct {
+			unsigned int override;
+			unsigned int security;
+		} sid;
+	} regs;
+};
+
+struct tegra_smmu_swgroup {
+	const char *name;
+	unsigned int swgroup;
+	unsigned int reg;
+};
+
+struct tegra_smmu_group_soc {
+	const char *name;
+	const unsigned int *swgroups;
+	unsigned int num_swgroups;
+};
+
+struct tegra_smmu_soc {
+	const struct tegra_mc_client *clients;
+	unsigned int num_clients;
+	const struct tegra_smmu_swgroup *swgroups;
+	unsigned int num_swgroups;
+	const struct tegra_smmu_group_soc *groups;
+	unsigned int num_groups;
+	bool supports_round_robin_arbitration;
+	bool supports_request_limit;
+	unsigned int num_tlb_lines;
+	unsigned int num_asids;
+};
+
+struct tegra_mc_reset {
+	const char *name;
+	long unsigned int id;
+	unsigned int control;
+	unsigned int status;
+	unsigned int reset;
+	unsigned int bit;
+};
+
+struct tegra_mc;
+
+struct tegra_mc_reset_ops {
+	int (*hotreset_assert)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*hotreset_deassert)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*block_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
+	bool (*dma_idling)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*unblock_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*reset_status)(struct tegra_mc *, const struct tegra_mc_reset *);
+};
+
+struct gart_device;
+
+struct tegra_smmu;
+
+struct tegra_mc_soc;
+
+struct tegra_mc {
+	struct device *dev;
+	struct tegra_smmu *smmu;
+	struct gart_device *gart;
+	void *regs;
+	void *bcast_ch_regs;
+	void **ch_regs;
+	struct clk *clk;
+	int irq;
+	const struct tegra_mc_soc *soc;
+	long unsigned int tick;
+	struct tegra_mc_timing *timings;
+	unsigned int num_timings;
+	struct reset_controller_dev reset;
+	struct icc_provider provider;
+	spinlock_t lock;
+	struct {
+		struct dentry *root;
+	} debugfs;
+};
+
+struct tegra_mc_icc_ops {
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+};
+
+struct tegra_mc_ops {
+	int (*probe)(struct tegra_mc *);
+	void (*remove)(struct tegra_mc *);
+	int (*suspend)(struct tegra_mc *);
+	int (*resume)(struct tegra_mc *);
+	irqreturn_t (*handle_irq)(int, void *);
+	int (*probe_device)(struct tegra_mc *, struct device *);
+};
+
+struct tegra_mc_soc {
+	const struct tegra_mc_client *clients;
+	unsigned int num_clients;
+	const long unsigned int *emem_regs;
+	unsigned int num_emem_regs;
+	unsigned int num_address_bits;
+	unsigned int atom_size;
+	u16 client_id_mask;
+	u8 num_channels;
+	const struct tegra_smmu_soc *smmu;
+	u32 intmask;
+	u32 ch_intmask;
+	u32 global_intstatus_channel_shift;
+	bool has_addr_hi_reg;
+	const struct tegra_mc_reset_ops *reset_ops;
+	const struct tegra_mc_reset *resets;
+	unsigned int num_resets;
+	const struct tegra_mc_icc_ops *icc_ops;
+	const struct tegra_mc_ops *ops;
+};
+
+struct emc_dvfs_latency {
+	uint32_t freq;
+	uint32_t latency;
+};
+
+struct mrq_emc_dvfs_latency_response {
+	uint32_t num_pairs;
+	struct emc_dvfs_latency pairs[14];
+};
+
+struct tegra186_emc_dvfs {
+	long unsigned int latency;
+	long unsigned int rate;
+};
+
+struct tegra186_emc {
+	struct tegra_bpmp *bpmp;
+	struct device *dev;
+	struct clk *clk;
+	struct tegra186_emc_dvfs *dvfs;
+	unsigned int num_dvfs;
+	struct {
+		struct dentry *root;
+		long unsigned int min_rate;
+		long unsigned int max_rate;
+	} debugfs;
+};
 
 struct pmu_hw_events {
 	struct perf_event *events[32];
@@ -16091,73 +57128,9073 @@
 	long unsigned int acpi_cpuid;
 };
 
-enum armpmu_attr_groups {
-	ARMPMU_ATTR_GROUP_COMMON = 0,
-	ARMPMU_ATTR_GROUP_EVENTS = 1,
-	ARMPMU_ATTR_GROUP_FORMATS = 2,
-	ARMPMU_ATTR_GROUP_CAPS = 3,
-	ARMPMU_NR_ATTR_GROUPS = 4,
+typedef int (*armpmu_init_fn)(struct arm_pmu *);
+
+struct pmu_probe_info {
+	unsigned int cpuid;
+	unsigned int mask;
+	armpmu_init_fn init;
 };
 
-struct clock_read_data {
-	u64 epoch_ns;
-	u64 epoch_cyc;
-	u64 sched_clock_mask;
-	u64 (*read_sched_clock)();
-	u32 mult;
-	u32 shift;
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
 };
 
-struct armv8pmu_probe_info {
-	struct arm_pmu *pmu;
-	bool present;
+struct hisi_pmu;
+
+struct hisi_uncore_ops {
+	void (*write_evtype)(struct hisi_pmu *, int, u32);
+	int (*get_event_idx)(struct perf_event *);
+	u64 (*read_counter)(struct hisi_pmu *, struct hw_perf_event *);
+	void (*write_counter)(struct hisi_pmu *, struct hw_perf_event *, u64);
+	void (*enable_counter)(struct hisi_pmu *, struct hw_perf_event *);
+	void (*disable_counter)(struct hisi_pmu *, struct hw_perf_event *);
+	void (*enable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
+	void (*disable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
+	void (*start_counters)(struct hisi_pmu *);
+	void (*stop_counters)(struct hisi_pmu *);
+	u32 (*get_int_status)(struct hisi_pmu *);
+	void (*clear_int_status)(struct hisi_pmu *, int);
+	void (*enable_filter)(struct perf_event *);
+	void (*disable_filter)(struct perf_event *);
 };
 
-enum hw_breakpoint_ops {
-	HW_BREAKPOINT_INSTALL = 0,
-	HW_BREAKPOINT_UNINSTALL = 1,
-	HW_BREAKPOINT_RESTORE = 2,
+struct hisi_pmu_hwevents {
+	struct perf_event *hw_events[16];
+	long unsigned int used_mask[1];
+	const struct attribute_group **attr_groups;
 };
 
-struct cpu_suspend_ctx {
-	u64 ctx_regs[13];
-	u64 sp;
+struct hisi_pmu {
+	struct pmu pmu;
+	const struct hisi_uncore_ops *ops;
+	struct hisi_pmu_hwevents pmu_events;
+	cpumask_t associated_cpus;
+	int on_cpu;
+	int irq;
+	struct device *dev;
+	struct hlist_node node;
+	int sccl_id;
+	int sicl_id;
+	int ccl_id;
+	void *base;
+	u32 index_id;
+	u32 sub_id;
+	int num_counters;
+	int counter_bits;
+	int check_event;
+	u32 identifier;
 };
 
-struct sleep_stack_data {
-	struct cpu_suspend_ctx system_regs;
-	long unsigned int callee_saved_regs[12];
+enum tb_cfg_pkg_type {
+	TB_CFG_PKG_READ = 1,
+	TB_CFG_PKG_WRITE = 2,
+	TB_CFG_PKG_ERROR = 3,
+	TB_CFG_PKG_NOTIFY_ACK = 4,
+	TB_CFG_PKG_EVENT = 5,
+	TB_CFG_PKG_XDOMAIN_REQ = 6,
+	TB_CFG_PKG_XDOMAIN_RESP = 7,
+	TB_CFG_PKG_OVERRIDE = 8,
+	TB_CFG_PKG_RESET = 9,
+	TB_CFG_PKG_ICM_EVENT = 10,
+	TB_CFG_PKG_ICM_CMD = 11,
+	TB_CFG_PKG_ICM_RESP = 12,
+	TB_CFG_PKG_PREPARE_TO_SLEEP = 13,
 };
 
-typedef void *acpi_handle;
+struct tb_nhi_ops;
+
+struct tb_ring;
+
+struct tb_nhi {
+	spinlock_t lock;
+	struct pci_dev *pdev;
+	const struct tb_nhi_ops *ops;
+	void *iobase;
+	struct tb_ring **tx_rings;
+	struct tb_ring **rx_rings;
+	struct ida msix_ida;
+	bool going_away;
+	bool iommu_dma_protection;
+	struct work_struct interrupt_work;
+	u32 hop_count;
+	long unsigned int quirks;
+};
+
+typedef bool (*event_cb)(void *, enum tb_cfg_pkg_type, const void *, size_t);
+
+struct ctl_pkg;
+
+struct tb_ctl {
+	struct tb_nhi *nhi;
+	struct tb_ring *tx;
+	struct tb_ring *rx;
+	struct dma_pool *frame_pool;
+	struct ctl_pkg *rx_packets[10];
+	struct mutex request_queue_lock;
+	struct list_head request_queue;
+	bool running;
+	int timeout_msec;
+	event_cb callback;
+	void *callback_data;
+};
+
+struct tb_nhi_ops {
+	int (*init)(struct tb_nhi *);
+	int (*suspend_noirq)(struct tb_nhi *, bool);
+	int (*resume_noirq)(struct tb_nhi *);
+	int (*runtime_suspend)(struct tb_nhi *);
+	int (*runtime_resume)(struct tb_nhi *);
+	void (*shutdown)(struct tb_nhi *);
+};
+
+struct ring_desc;
+
+struct tb_ring {
+	spinlock_t lock;
+	struct tb_nhi *nhi;
+	int size;
+	int hop;
+	int head;
+	int tail;
+	struct ring_desc *descriptors;
+	dma_addr_t descriptors_dma;
+	struct list_head queue;
+	struct list_head in_flight;
+	struct work_struct work;
+	bool is_tx: 1;
+	bool running: 1;
+	int irq;
+	u8 vector;
+	unsigned int flags;
+	int e2e_tx_hop;
+	u16 sof_mask;
+	u16 eof_mask;
+	void (*start_poll)(void *);
+	void *poll_data;
+};
+
+struct ring_frame;
+
+typedef void (*ring_cb)(struct tb_ring *, struct ring_frame *, bool);
+
+struct ring_frame {
+	dma_addr_t buffer_phy;
+	ring_cb callback;
+	struct list_head list;
+	u32 size: 12;
+	u32 flags: 12;
+	u32 eof: 4;
+	u32 sof: 4;
+};
+
+enum tb_cfg_space {
+	TB_CFG_HOPS = 0,
+	TB_CFG_PORT = 1,
+	TB_CFG_SWITCH = 2,
+	TB_CFG_COUNTERS = 3,
+};
+
+enum tb_cfg_error {
+	TB_CFG_ERROR_PORT_NOT_CONNECTED = 0,
+	TB_CFG_ERROR_LINK_ERROR = 1,
+	TB_CFG_ERROR_INVALID_CONFIG_SPACE = 2,
+	TB_CFG_ERROR_NO_SUCH_PORT = 4,
+	TB_CFG_ERROR_ACK_PLUG_EVENT = 7,
+	TB_CFG_ERROR_LOOP = 8,
+	TB_CFG_ERROR_HEC_ERROR_DETECTED = 12,
+	TB_CFG_ERROR_FLOW_CONTROL_ERROR = 13,
+	TB_CFG_ERROR_LOCK = 15,
+};
+
+struct tb_cfg_header {
+	u32 route_hi: 22;
+	u32 unknown: 10;
+	u32 route_lo;
+};
+
+struct tb_cfg_address {
+	u32 offset: 13;
+	u32 length: 6;
+	u32 port: 6;
+	enum tb_cfg_space space: 2;
+	u32 seq: 2;
+	u32 zero: 3;
+};
+
+struct cfg_read_pkg {
+	struct tb_cfg_header header;
+	struct tb_cfg_address addr;
+};
+
+struct cfg_write_pkg {
+	struct tb_cfg_header header;
+	struct tb_cfg_address addr;
+	u32 data[64];
+};
+
+struct cfg_error_pkg {
+	struct tb_cfg_header header;
+	enum tb_cfg_error error: 4;
+	u32 zero1: 4;
+	u32 port: 6;
+	u32 zero2: 2;
+	u32 zero3: 14;
+	u32 pg: 2;
+};
+
+struct cfg_reset_pkg {
+	struct tb_cfg_header header;
+};
+
+struct tb_cfg_result {
+	u64 response_route;
+	u32 response_port;
+	int err;
+	enum tb_cfg_error tb_error;
+};
+
+struct ctl_pkg {
+	struct tb_ctl *ctl;
+	void *buffer;
+	struct ring_frame frame;
+};
+
+struct tb_cfg_request {
+	struct kref kref;
+	struct tb_ctl *ctl;
+	const void *request;
+	size_t request_size;
+	enum tb_cfg_pkg_type request_type;
+	void *response;
+	size_t response_size;
+	enum tb_cfg_pkg_type response_type;
+	size_t npackets;
+	bool (*match)(const struct tb_cfg_request *, const struct ctl_pkg *);
+	bool (*copy)(struct tb_cfg_request *, const struct ctl_pkg *);
+	void (*callback)(void *);
+	void *callback_data;
+	long unsigned int flags;
+	struct work_struct work;
+	struct tb_cfg_result result;
+	struct list_head list;
+};
+
+enum tb_security_level {
+	TB_SECURITY_NONE = 0,
+	TB_SECURITY_USER = 1,
+	TB_SECURITY_SECURE = 2,
+	TB_SECURITY_DPONLY = 3,
+	TB_SECURITY_USBONLY = 4,
+	TB_SECURITY_NOPCIE = 5,
+};
+
+struct tb_switch;
+
+struct tb_cm_ops;
+
+struct tb {
+	struct device dev;
+	struct mutex lock;
+	struct tb_nhi *nhi;
+	struct tb_ctl *ctl;
+	struct workqueue_struct *wq;
+	struct tb_switch *root_switch;
+	const struct tb_cm_ops *cm_ops;
+	int index;
+	enum tb_security_level security_level;
+	size_t nboot_acl;
+	long unsigned int privdata[0];
+};
+
+struct tb_regs_switch_header {
+	u16 vendor_id;
+	u16 device_id;
+	u32 first_cap_offset: 8;
+	u32 upstream_port_number: 6;
+	u32 max_port_number: 6;
+	u32 depth: 3;
+	u32 __unknown1: 1;
+	u32 revision: 8;
+	u32 route_lo;
+	u32 route_hi: 31;
+	bool enabled: 1;
+	u32 plug_events_delay: 8;
+	u32 cmuv: 8;
+	u32 __unknown4: 8;
+	u32 thunderbolt_version: 8;
+};
+
+enum tb_switch_tmu_rate {
+	TB_SWITCH_TMU_RATE_OFF = 0,
+	TB_SWITCH_TMU_RATE_HIFI = 16,
+	TB_SWITCH_TMU_RATE_NORMAL = 1000,
+};
+
+struct tb_switch_tmu {
+	int cap;
+	bool has_ucap;
+	enum tb_switch_tmu_rate rate;
+	bool unidirectional;
+	bool unidirectional_request;
+	enum tb_switch_tmu_rate rate_request;
+};
+
+enum tb_clx {
+	TB_CLX_DISABLE = 0,
+	TB_CL1 = 1,
+	TB_CL2 = 2,
+};
+
+struct tb_port;
+
+struct tb_dma_port;
+
+struct tb_nvm;
+
+struct tb_switch {
+	struct device dev;
+	struct tb_regs_switch_header config;
+	struct tb_port *ports;
+	struct tb_dma_port *dma_port;
+	struct tb_switch_tmu tmu;
+	struct tb *tb;
+	u64 uid;
+	uuid_t *uuid;
+	u16 vendor;
+	u16 device;
+	const char *vendor_name;
+	const char *device_name;
+	unsigned int link_speed;
+	unsigned int link_width;
+	bool link_usb4;
+	unsigned int generation;
+	int cap_plug_events;
+	int cap_vsec_tmu;
+	int cap_lc;
+	int cap_lp;
+	bool is_unplugged;
+	u8 *drom;
+	struct tb_nvm *nvm;
+	bool no_nvm_upgrade;
+	bool safe_mode;
+	bool boot;
+	bool rpm;
+	unsigned int authorized;
+	enum tb_security_level security_level;
+	struct dentry *debugfs_dir;
+	u8 *key;
+	u8 connection_id;
+	u8 connection_key;
+	u8 link;
+	u8 depth;
+	struct completion rpm_complete;
+	long unsigned int quirks;
+	bool credit_allocation;
+	unsigned int max_usb3_credits;
+	unsigned int min_dp_aux_credits;
+	unsigned int min_dp_main_credits;
+	unsigned int max_pcie_credits;
+	unsigned int max_dma_credits;
+	enum tb_clx clx;
+};
+
+struct tb_xdomain;
+
+struct tb_cm_ops {
+	int (*driver_ready)(struct tb *);
+	int (*start)(struct tb *);
+	void (*stop)(struct tb *);
+	int (*suspend_noirq)(struct tb *);
+	int (*resume_noirq)(struct tb *);
+	int (*suspend)(struct tb *);
+	int (*freeze_noirq)(struct tb *);
+	int (*thaw_noirq)(struct tb *);
+	void (*complete)(struct tb *);
+	int (*runtime_suspend)(struct tb *);
+	int (*runtime_resume)(struct tb *);
+	int (*runtime_suspend_switch)(struct tb_switch *);
+	int (*runtime_resume_switch)(struct tb_switch *);
+	void (*handle_event)(struct tb *, enum tb_cfg_pkg_type, const void *, size_t);
+	int (*get_boot_acl)(struct tb *, uuid_t *, size_t);
+	int (*set_boot_acl)(struct tb *, const uuid_t *, size_t);
+	int (*disapprove_switch)(struct tb *, struct tb_switch *);
+	int (*approve_switch)(struct tb *, struct tb_switch *);
+	int (*add_switch_key)(struct tb *, struct tb_switch *);
+	int (*challenge_switch_key)(struct tb *, struct tb_switch *, const u8 *, u8 *);
+	int (*disconnect_pcie_paths)(struct tb *);
+	int (*approve_xdomain_paths)(struct tb *, struct tb_xdomain *, int, int, int, int);
+	int (*disconnect_xdomain_paths)(struct tb *, struct tb_xdomain *, int, int, int, int);
+	int (*usb4_switch_op)(struct tb_switch *, u16, u32 *, u8 *, const void *, size_t, void *, size_t);
+	int (*usb4_switch_nvm_authenticate_status)(struct tb_switch *, u32 *);
+};
+
+struct tb_property_dir {
+	const uuid_t *uuid;
+	struct list_head properties;
+};
+
+struct tb_xdomain {
+	struct device dev;
+	struct tb *tb;
+	uuid_t *remote_uuid;
+	const uuid_t *local_uuid;
+	u64 route;
+	u16 vendor;
+	u16 device;
+	unsigned int local_max_hopid;
+	unsigned int remote_max_hopid;
+	struct mutex lock;
+	const char *vendor_name;
+	const char *device_name;
+	unsigned int link_speed;
+	unsigned int link_width;
+	bool is_unplugged;
+	bool needs_uuid;
+	struct ida service_ids;
+	struct ida in_hopids;
+	struct ida out_hopids;
+	u32 *local_property_block;
+	u32 local_property_block_gen;
+	u32 local_property_block_len;
+	struct tb_property_dir *remote_properties;
+	u32 remote_property_block_gen;
+	int state;
+	struct delayed_work state_work;
+	int state_retries;
+	struct delayed_work properties_changed_work;
+	int properties_changed_retries;
+	bool bonding_possible;
+	u8 target_link_width;
+	u8 link;
+	u8 depth;
+};
+
+struct tb_cap_extended_short {
+	u8 next;
+	u8 cap;
+	u8 vsec_id;
+	u8 length;
+};
+
+struct tb_eeprom_ctl {
+	bool fl_sk: 1;
+	bool fl_cs: 1;
+	bool fl_di: 1;
+	bool fl_do: 1;
+	bool bit_banging_enable: 1;
+	bool not_present: 1;
+	bool unknown1: 1;
+	bool present: 1;
+	u32 unknown2: 24;
+};
+
+struct tb_cap_plug_events {
+	struct tb_cap_extended_short cap_header;
+	u32 __unknown1: 2;
+	u32 plug_events: 5;
+	u32 __unknown2: 25;
+	u32 vsc_cs_2;
+	u32 vsc_cs_3;
+	struct tb_eeprom_ctl eeprom_ctl;
+	u32 __unknown5[7];
+	u32 drom_offset;
+};
+
+enum tb_port_type {
+	TB_TYPE_INACTIVE = 0,
+	TB_TYPE_PORT = 1,
+	TB_TYPE_NHI = 2,
+	TB_TYPE_DP_HDMI_IN = 917761,
+	TB_TYPE_DP_HDMI_OUT = 917762,
+	TB_TYPE_PCIE_DOWN = 1048833,
+	TB_TYPE_PCIE_UP = 1048834,
+	TB_TYPE_USB3_DOWN = 2097409,
+	TB_TYPE_USB3_UP = 2097410,
+};
+
+struct tb_regs_port_header {
+	u16 vendor_id;
+	u16 device_id;
+	u32 first_cap_offset: 8;
+	u32 max_counters: 11;
+	u32 counters_support: 1;
+	u32 __unknown1: 4;
+	u32 revision: 8;
+	enum tb_port_type type: 24;
+	u32 thunderbolt_version: 8;
+	u32 __unknown2: 20;
+	u32 port_number: 6;
+	u32 __unknown3: 6;
+	u32 nfc_credits;
+	u32 max_in_hop_id: 11;
+	u32 max_out_hop_id: 11;
+	u32 __unknown4: 10;
+	u32 __unknown5;
+	u32 __unknown6;
+};
+
+struct nvmem_device;
+
+struct tb_nvm {
+	struct device *dev;
+	u8 major;
+	u8 minor;
+	int id;
+	struct nvmem_device *active;
+	struct nvmem_device *non_active;
+	void *buf;
+	size_t buf_data_size;
+	bool authenticating;
+	bool flushed;
+};
+
+struct usb4_port;
+
+struct tb_port {
+	struct tb_regs_port_header config;
+	struct tb_switch *sw;
+	struct tb_port *remote;
+	struct tb_xdomain *xdomain;
+	int cap_phy;
+	int cap_tmu;
+	int cap_adap;
+	int cap_usb4;
+	struct usb4_port *usb4;
+	u8 port;
+	bool disabled;
+	bool bonded;
+	struct tb_port *dual_link_port;
+	u8 link_nr: 1;
+	struct ida in_hopids;
+	struct ida out_hopids;
+	struct list_head list;
+	unsigned int total_credits;
+	unsigned int ctl_credits;
+	unsigned int dma_credits;
+};
+
+struct usb4_port {
+	struct device dev;
+	struct tb_port *port;
+	bool can_offline;
+	bool offline;
+};
+
+enum tb_eeprom_transfer {
+	TB_EEPROM_IN = 0,
+	TB_EEPROM_OUT = 1,
+};
+
+struct tb_drom_header {
+	u8 uid_crc8;
+	u64 uid;
+	u32 data_crc32;
+	u8 device_rom_revision;
+	u16 data_len: 12;
+	u8 reserved: 4;
+	u16 vendor_id;
+	u16 model_id;
+	u8 model_rev;
+	u8 eeprom_rev;
+} __attribute__((packed));
+
+enum tb_drom_entry_type {
+	TB_DROM_ENTRY_GENERIC = 0,
+	TB_DROM_ENTRY_PORT = 1,
+};
+
+struct tb_drom_entry_header {
+	u8 len;
+	u8 index: 6;
+	bool port_disabled: 1;
+	enum tb_drom_entry_type type: 1;
+} __attribute__((packed));
+
+struct tb_drom_entry_generic {
+	struct tb_drom_entry_header header;
+	u8 data[0];
+} __attribute__((packed));
+
+struct tb_drom_entry_port {
+	struct tb_drom_entry_header header;
+	u8 dual_link_port_rid: 4;
+	u8 link_nr: 1;
+	u8 unknown1: 2;
+	bool has_dual_link_port: 1;
+	u8 dual_link_port_nr: 6;
+	u8 unknown2: 2;
+	u8 micro2: 4;
+	u8 micro1: 4;
+	u8 micro3;
+	u8 peer_port_rid: 4;
+	u8 unknown3: 3;
+	bool has_peer_port: 1;
+	u8 peer_port_nr: 6;
+	u8 unknown4: 2;
+};
+
+struct tb_drom_entry_desc {
+	struct tb_drom_entry_header header;
+	u16 bcdUSBSpec;
+	u16 idVendor;
+	u16 idProduct;
+	u16 bcdProductFWRevision;
+	u32 TID;
+	u8 productHWRevision;
+};
+
+enum usb4_sb_opcode {
+	USB4_SB_OPCODE_ERR = 542265925,
+	USB4_SB_OPCODE_ONS = 1145914145,
+	USB4_SB_OPCODE_ROUTER_OFFLINE = 1313166156,
+	USB4_SB_OPCODE_ENUMERATE_RETIMERS = 1297436229,
+	USB4_SB_OPCODE_SET_INBOUND_SBTX = 1347769164,
+	USB4_SB_OPCODE_QUERY_LAST_RETIMER = 1414742348,
+	USB4_SB_OPCODE_GET_NVM_SECTOR_SIZE = 1397968455,
+	USB4_SB_OPCODE_NVM_SET_OFFSET = 1397772098,
+	USB4_SB_OPCODE_NVM_BLOCK_WRITE = 1464552514,
+	USB4_SB_OPCODE_NVM_AUTH_WRITE = 1213486401,
+	USB4_SB_OPCODE_NVM_READ = 1381123649,
+};
+
+enum usb4_switch_op {
+	USB4_SWITCH_OP_QUERY_DP_RESOURCE = 16,
+	USB4_SWITCH_OP_ALLOC_DP_RESOURCE = 17,
+	USB4_SWITCH_OP_DEALLOC_DP_RESOURCE = 18,
+	USB4_SWITCH_OP_NVM_WRITE = 32,
+	USB4_SWITCH_OP_NVM_AUTH = 33,
+	USB4_SWITCH_OP_NVM_READ = 34,
+	USB4_SWITCH_OP_NVM_SET_OFFSET = 35,
+	USB4_SWITCH_OP_DROM_READ = 36,
+	USB4_SWITCH_OP_NVM_SECTOR_SIZE = 37,
+	USB4_SWITCH_OP_BUFFER_ALLOC = 51,
+};
+
+typedef int (*read_block_fn___2)(void *, unsigned int, void *, size_t);
+
+typedef int (*write_block_fn)(void *, unsigned int, const void *, size_t);
+
+enum usb4_sb_target {
+	USB4_SB_TARGET_ROUTER = 0,
+	USB4_SB_TARGET_PARTNER = 1,
+	USB4_SB_TARGET_RETIMER = 2,
+};
+
+enum usb4_ba_index {
+	USB4_BA_MAX_USB3 = 1,
+	USB4_BA_MIN_DP_AUX = 2,
+	USB4_BA_MIN_DP_MAIN = 3,
+	USB4_BA_MAX_PCIE = 4,
+	USB4_BA_MAX_HI = 5,
+};
+
+struct retimer_info {
+	struct tb_port *port;
+	u8 index;
+};
+
+typedef __u64 binder_uintptr_t;
+
+enum binder_driver_return_protocol {
+	BR_ERROR = 2147774976,
+	BR_OK = 29185,
+	BR_TRANSACTION_SEC_CTX = 2152231426,
+	BR_TRANSACTION = 2151707138,
+	BR_REPLY = 2151707139,
+	BR_ACQUIRE_RESULT = 2147774980,
+	BR_DEAD_REPLY = 29189,
+	BR_TRANSACTION_COMPLETE = 29190,
+	BR_INCREFS = 2148561415,
+	BR_ACQUIRE = 2148561416,
+	BR_RELEASE = 2148561417,
+	BR_DECREFS = 2148561418,
+	BR_ATTEMPT_ACQUIRE = 2149085707,
+	BR_NOOP = 29196,
+	BR_SPAWN_LOOPER = 29197,
+	BR_FINISHED = 29198,
+	BR_DEAD_BINDER = 2148037135,
+	BR_CLEAR_DEATH_NOTIFICATION_DONE = 2148037136,
+	BR_FAILED_REPLY = 29201,
+	BR_FROZEN_REPLY = 29202,
+	BR_ONEWAY_SPAM_SUSPECT = 29203,
+};
+
+enum binder_driver_command_protocol {
+	BC_TRANSACTION = 1077961472,
+	BC_REPLY = 1077961473,
+	BC_ACQUIRE_RESULT = 1074029314,
+	BC_FREE_BUFFER = 1074291459,
+	BC_INCREFS = 1074029316,
+	BC_ACQUIRE = 1074029317,
+	BC_RELEASE = 1074029318,
+	BC_DECREFS = 1074029319,
+	BC_INCREFS_DONE = 1074815752,
+	BC_ACQUIRE_DONE = 1074815753,
+	BC_ATTEMPT_ACQUIRE = 1074291466,
+	BC_REGISTER_LOOPER = 25355,
+	BC_ENTER_LOOPER = 25356,
+	BC_EXIT_LOOPER = 25357,
+	BC_REQUEST_DEATH_NOTIFICATION = 1074553614,
+	BC_CLEAR_DEATH_NOTIFICATION = 1074553615,
+	BC_DEAD_BINDER_DONE = 1074291472,
+	BC_TRANSACTION_SG = 1078485777,
+	BC_REPLY_SG = 1078485778,
+};
+
+struct binderfs_device {
+	char name[256];
+	__u32 major;
+	__u32 minor;
+};
+
+enum binder_work_type {
+	BINDER_WORK_TRANSACTION = 1,
+	BINDER_WORK_TRANSACTION_COMPLETE = 2,
+	BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT = 3,
+	BINDER_WORK_RETURN_ERROR = 4,
+	BINDER_WORK_NODE = 5,
+	BINDER_WORK_DEAD_BINDER = 6,
+	BINDER_WORK_DEAD_BINDER_AND_CLEAR = 7,
+	BINDER_WORK_CLEAR_DEATH_NOTIFICATION = 8,
+};
+
+struct binder_work {
+	struct list_head entry;
+	enum binder_work_type type;
+};
+
+struct binder_proc;
+
+struct binder_node {
+	int debug_id;
+	spinlock_t lock;
+	struct binder_work work;
+	union {
+		struct rb_node rb_node;
+		struct hlist_node dead_node;
+	};
+	struct binder_proc *proc;
+	struct hlist_head refs;
+	int internal_strong_refs;
+	int local_weak_refs;
+	int local_strong_refs;
+	int tmp_refs;
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	struct {
+		u8 has_strong_ref: 1;
+		u8 pending_strong_ref: 1;
+		u8 has_weak_ref: 1;
+		u8 pending_weak_ref: 1;
+	};
+	struct {
+		u8 accept_fds: 1;
+		u8 txn_security_ctx: 1;
+		u8 min_priority;
+	};
+	bool has_async_transaction;
+	struct list_head async_todo;
+};
+
+struct binder_alloc;
+
+struct binder_lru_page {
+	struct list_head lru;
+	struct page *page_ptr;
+	struct binder_alloc *alloc;
+};
+
+struct binder_alloc {
+	struct mutex mutex;
+	long unsigned int vma_addr;
+	struct mm_struct *vma_vm_mm;
+	void *buffer;
+	struct list_head buffers;
+	struct rb_root free_buffers;
+	struct rb_root allocated_buffers;
+	size_t free_async_space;
+	struct binder_lru_page *pages;
+	size_t buffer_size;
+	uint32_t buffer_free;
+	int pid;
+	size_t pages_high;
+	bool oneway_spam_detected;
+};
+
+struct binder_context {
+	struct binder_node *binder_context_mgr_node;
+	struct mutex context_mgr_node_lock;
+	kuid_t binder_context_mgr_uid;
+	const char *name;
+};
+
+struct binder_device {
+	struct hlist_node hlist;
+	struct miscdevice miscdev;
+	struct binder_context context;
+	struct inode *binderfs_inode;
+	refcount_t ref;
+};
+
+struct binderfs_mount_opts {
+	int max;
+	int stats_mode;
+};
+
+struct binderfs_info {
+	struct ipc_namespace *ipc_ns;
+	struct dentry *control_dentry;
+	kuid_t root_uid;
+	kgid_t root_gid;
+	struct binderfs_mount_opts mount_opts;
+	int device_count;
+	struct dentry *proc_log_dir;
+};
+
+struct binder_debugfs_entry {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	void *data;
+};
+
+enum binder_stat_types {
+	BINDER_STAT_PROC = 0,
+	BINDER_STAT_THREAD = 1,
+	BINDER_STAT_NODE = 2,
+	BINDER_STAT_REF = 3,
+	BINDER_STAT_DEATH = 4,
+	BINDER_STAT_TRANSACTION = 5,
+	BINDER_STAT_TRANSACTION_COMPLETE = 6,
+	BINDER_STAT_COUNT = 7,
+};
+
+struct binder_stats {
+	atomic_t br[20];
+	atomic_t bc[19];
+	atomic_t obj_created[7];
+	atomic_t obj_deleted[7];
+};
+
+struct binder_proc {
+	struct hlist_node proc_node;
+	struct rb_root threads;
+	struct rb_root nodes;
+	struct rb_root refs_by_desc;
+	struct rb_root refs_by_node;
+	struct list_head waiting_threads;
+	int pid;
+	struct task_struct *tsk;
+	const struct cred *cred;
+	struct hlist_node deferred_work_node;
+	int deferred_work;
+	int outstanding_txns;
+	bool is_dead;
+	bool is_frozen;
+	bool sync_recv;
+	bool async_recv;
+	wait_queue_head_t freeze_wait;
+	struct list_head todo;
+	struct binder_stats stats;
+	struct list_head delivered_death;
+	int max_threads;
+	int requested_threads;
+	int requested_threads_started;
+	int tmp_ref;
+	long int default_priority;
+	struct dentry *debugfs_entry;
+	struct binder_alloc alloc;
+	struct binder_context *context;
+	spinlock_t inner_lock;
+	spinlock_t outer_lock;
+	struct dentry *binderfs_entry;
+	bool oneway_spam_detection_enabled;
+};
+
+enum binderfs_param {
+	Opt_max = 0,
+	Opt_stats_mode = 1,
+};
+
+enum binderfs_stats_mode {
+	binderfs_stats_mode_unset = 0,
+	binderfs_stats_mode_global = 1,
+};
+
+struct binder_features {
+	bool oneway_spam_detection;
+	bool extended_error;
+};
+
+struct qcom_icc_node;
+
+struct qcom_icc_bcm {
+	const char *name;
+	u32 type;
+	u32 addr;
+	u64 vote_x[3];
+	u64 vote_y[3];
+	u64 vote_scale;
+	bool dirty;
+	bool keepalive;
+	struct bcm_db aux_data;
+	struct list_head list;
+	struct list_head ws_list;
+	size_t num_nodes;
+	struct qcom_icc_node *nodes[0];
+};
+
+struct qcom_icc_node {
+	const char *name;
+	u16 links[128];
+	u16 id;
+	u16 num_links;
+	u16 channels;
+	u16 buswidth;
+	u64 sum_avg[3];
+	u64 max_peak[3];
+	struct qcom_icc_bcm *bcms[3];
+	size_t num_bcms;
+};
+
+struct qcom_icc_desc {
+	struct qcom_icc_node * const *nodes;
+	size_t num_nodes;
+	struct qcom_icc_bcm * const *bcms;
+	size_t num_bcms;
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+struct page_frag_cache {
+	void *va;
+	__u16 offset;
+	__u16 size;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable **nhc_pcpu_rth_output;
+	struct rtable *nhc_rth_input;
+	struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	long unsigned int last_probe;
+	struct rt6_info **rt6i_pcpu;
+	struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info *fib6_next;
+	struct fib6_node *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	long unsigned int expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct uncached_list;
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	struct list_head rt6i_uncached;
+	struct uncached_list *rt6i_uncached_list;
+	short unsigned int rt6i_nfheader_len;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct fib6_node {
+	struct fib6_node *parent;
+	struct fib6_node *left;
+	struct fib6_node *right;
+	struct fib6_node *subtree;
+	struct fib6_info *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info *rr_ptr;
+	struct callback_head rcu;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_config;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+typedef struct bio_vec skb_frag_t;
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	short unsigned int gso_size;
+	short unsigned int gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	skb_frag_t frags[17];
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	long unsigned int state;
+	int weight;
+	int defer_hard_irqs_count;
+	long unsigned int gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int poll_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	struct hrtimer timer;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	unsigned int napi_id;
+	struct task_struct *thread;
+};
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	long unsigned int offload_handle;
+	u8 dir: 2;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long int saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	unsigned int received_rps;
+	struct softnet_data *rps_ipi_list;
+	struct sd_flow_limit *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct sk_buff_head xfrm_backlog;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	int: 32;
+	unsigned int input_queue_head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+enum skb_free_reason {
+	SKB_REASON_CONSUMED = 0,
+	SKB_REASON_DROPPED = 1,
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_LAST = 32768,
+	SOF_TIMESTAMPING_MASK = 65535,
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	short unsigned int encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
+};
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	__be32 saddr;
+	__be32 daddr;
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 dsthao;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	long unsigned int fnhe_expires;
+	struct rtable *fnhe_rth_input;
+	struct rtable *fnhe_rth_output;
+	long unsigned int fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+};
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception *chain;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t);
+
+typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int);
+
+typedef __kernel_clock_t clock_t;
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	__IFLA_MAX = 61,
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	__IFLA_BRPORT_MAX = 40,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1,
+	IFF_EBRIDGE = 2,
+	IFF_BONDING = 4,
+	IFF_ISATAP = 8,
+	IFF_WAN_HDLC = 16,
+	IFF_XMIT_DST_RELEASE = 32,
+	IFF_DONT_BRIDGE = 64,
+	IFF_DISABLE_NETPOLL = 128,
+	IFF_MACVLAN_PORT = 256,
+	IFF_BRIDGE_PORT = 512,
+	IFF_OVS_DATAPATH = 1024,
+	IFF_TX_SKB_SHARING = 2048,
+	IFF_UNICAST_FLT = 4096,
+	IFF_TEAM_PORT = 8192,
+	IFF_SUPP_NOFCS = 16384,
+	IFF_LIVE_ADDR_CHANGE = 32768,
+	IFF_MACVLAN = 65536,
+	IFF_XMIT_DST_RELEASE_PERM = 131072,
+	IFF_L3MDEV_MASTER = 262144,
+	IFF_NO_QUEUE = 524288,
+	IFF_OPENVSWITCH = 1048576,
+	IFF_L3MDEV_SLAVE = 2097152,
+	IFF_TEAM = 4194304,
+	IFF_RXFH_CONFIGURED = 8388608,
+	IFF_PHONY_HEADROOM = 16777216,
+	IFF_MACSEC = 33554432,
+	IFF_NO_RX_HANDLER = 67108864,
+	IFF_FAILOVER = 134217728,
+	IFF_FAILOVER_SLAVE = 268435456,
+	IFF_L3MDEV_RX_HANDLER = 536870912,
+	IFF_LIVE_RENAME_OK = 1073741824,
+	IFF_TX_SKB_NO_LINEAR = 2147483648,
+	IFF_CHANGE_PROTO_DOWN = 0,
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_RELEASE = 18,
+	NETDEV_NOTIFY_PEERS = 19,
+	NETDEV_JOIN = 20,
+	NETDEV_CHANGEUPPER = 21,
+	NETDEV_RESEND_IGMP = 22,
+	NETDEV_PRECHANGEMTU = 23,
+	NETDEV_CHANGEINFODATA = 24,
+	NETDEV_BONDING_INFO = 25,
+	NETDEV_PRECHANGEUPPER = 26,
+	NETDEV_CHANGELOWERSTATE = 27,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 35,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 38,
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	short unsigned int ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[61];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[41];
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head *next;
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
+struct xdp_attachment_info {
+	struct bpf_prog *prog;
+	u32 flags;
+};
+
+struct xdp_umem;
+
+struct xsk_queue;
+
+struct xdp_buff_xsk;
+
+struct xdp_desc;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u32 flags;
+	u32 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	u32 kern_flags;
+	struct bpf_nh_params nh;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+};
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	long unsigned int state[1];
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+struct netpoll;
+
+struct netpoll_info {
+	refcount_t refcnt;
+	struct semaphore dev_lock;
+	struct sk_buff_head txq;
+	struct delayed_work tx_work;
+	struct netpoll *netpoll;
+	struct callback_head rcu;
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	void *type_dev;
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr *ifa_list;
+	struct ip_mc_list *mc_list;
+	struct ip_mc_list **mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	long unsigned int mr_v1_seen;
+	long unsigned int mr_v2_seen;
+	long unsigned int mr_maxdelay;
+	long unsigned int mr_qi;
+	long unsigned int mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+struct dm_hw_stat_delta {
+	long unsigned int last_rx;
+	long unsigned int last_drop_val;
+	struct callback_head rcu;
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	long unsigned int ifa_cstamp;
+	long unsigned int ifa_tstamp;
+};
+
+union inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct netpoll {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	char dev_name[16];
+	const char *name;
+	union inet_addr local_ip;
+	union inet_addr remote_ip;
+	bool ipv6;
+	u16 local_port;
+	u16 remote_port;
+	u8 remote_mac[6];
+};
+
+struct net_dm_drop_point {
+	__u8 pc[8];
+	__u32 count;
+};
+
+struct net_dm_alert_msg {
+	__u32 entries;
+	struct net_dm_drop_point points[0];
+};
+
+enum {
+	NET_DM_CMD_UNSPEC = 0,
+	NET_DM_CMD_ALERT = 1,
+	NET_DM_CMD_CONFIG = 2,
+	NET_DM_CMD_START = 3,
+	NET_DM_CMD_STOP = 4,
+	NET_DM_CMD_PACKET_ALERT = 5,
+	NET_DM_CMD_CONFIG_GET = 6,
+	NET_DM_CMD_CONFIG_NEW = 7,
+	NET_DM_CMD_STATS_GET = 8,
+	NET_DM_CMD_STATS_NEW = 9,
+	_NET_DM_CMD_MAX = 10,
+};
+
+enum net_dm_attr {
+	NET_DM_ATTR_UNSPEC = 0,
+	NET_DM_ATTR_ALERT_MODE = 1,
+	NET_DM_ATTR_PC = 2,
+	NET_DM_ATTR_SYMBOL = 3,
+	NET_DM_ATTR_IN_PORT = 4,
+	NET_DM_ATTR_TIMESTAMP = 5,
+	NET_DM_ATTR_PROTO = 6,
+	NET_DM_ATTR_PAYLOAD = 7,
+	NET_DM_ATTR_PAD = 8,
+	NET_DM_ATTR_TRUNC_LEN = 9,
+	NET_DM_ATTR_ORIG_LEN = 10,
+	NET_DM_ATTR_QUEUE_LEN = 11,
+	NET_DM_ATTR_STATS = 12,
+	NET_DM_ATTR_HW_STATS = 13,
+	NET_DM_ATTR_ORIGIN = 14,
+	NET_DM_ATTR_HW_TRAP_GROUP_NAME = 15,
+	NET_DM_ATTR_HW_TRAP_NAME = 16,
+	NET_DM_ATTR_HW_ENTRIES = 17,
+	NET_DM_ATTR_HW_ENTRY = 18,
+	NET_DM_ATTR_HW_TRAP_COUNT = 19,
+	NET_DM_ATTR_SW_DROPS = 20,
+	NET_DM_ATTR_HW_DROPS = 21,
+	NET_DM_ATTR_FLOW_ACTION_COOKIE = 22,
+	NET_DM_ATTR_REASON = 23,
+	__NET_DM_ATTR_MAX = 24,
+	NET_DM_ATTR_MAX = 23,
+};
+
+enum net_dm_alert_mode {
+	NET_DM_ALERT_MODE_SUMMARY = 0,
+	NET_DM_ALERT_MODE_PACKET = 1,
+};
+
+enum {
+	NET_DM_ATTR_PORT_NETDEV_IFINDEX = 0,
+	NET_DM_ATTR_PORT_NETDEV_NAME = 1,
+	__NET_DM_ATTR_PORT_MAX = 2,
+	NET_DM_ATTR_PORT_MAX = 1,
+};
+
+enum {
+	NET_DM_ATTR_STATS_DROPPED = 0,
+	__NET_DM_ATTR_STATS_MAX = 1,
+	NET_DM_ATTR_STATS_MAX = 0,
+};
+
+enum net_dm_origin {
+	NET_DM_ORIGIN_SW = 0,
+	NET_DM_ORIGIN_HW = 1,
+};
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct list_head port_list;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	struct mutex linecards_lock;
+	const struct devlink_ops *ops;
+	u64 features;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct completion comp;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	char priv[0];
+};
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct net_dm_stats {
+	u64_stats_t dropped;
+	struct u64_stats_sync syncp;
+};
+
+struct net_dm_hw_entry {
+	char trap_name[40];
+	u32 count;
+};
+
+struct net_dm_hw_entries {
+	u32 num_entries;
+	struct net_dm_hw_entry entries[0];
+};
+
+struct per_cpu_dm_data {
+	spinlock_t lock;
+	union {
+		struct sk_buff *skb;
+		struct net_dm_hw_entries *hw_entries;
+	};
+	struct sk_buff_head drop_queue;
+	struct work_struct dm_alert_work;
+	struct timer_list send_timer;
+	struct net_dm_stats stats;
+};
+
+struct net_dm_alert_ops {
+	void (*kfree_skb_probe)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+	void (*napi_poll_probe)(void *, struct napi_struct *, int, int);
+	void (*work_item_func)(struct work_struct *);
+	void (*hw_work_item_func)(struct work_struct *);
+	void (*hw_trap_probe)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+};
+
+struct net_dm_skb_cb {
+	union {
+		struct devlink_trap_metadata *hw_metadata;
+		void *pc;
+	};
+	enum skb_drop_reason reason;
+};
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+};
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		void *ptr[0];
+	};
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	__LWTUNNEL_ENCAP_MAX = 10,
+};
+
+enum {
+	LWT_BPF_PROG_UNSPEC = 0,
+	LWT_BPF_PROG_FD = 1,
+	LWT_BPF_PROG_NAME = 2,
+	__LWT_BPF_PROG_MAX = 3,
+};
+
+enum {
+	LWT_BPF_UNSPEC = 0,
+	LWT_BPF_IN = 1,
+	LWT_BPF_OUT = 2,
+	LWT_BPF_XMIT = 3,
+	LWT_BPF_XMIT_HEADROOM = 4,
+	__LWT_BPF_MAX = 5,
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__u32 nh_tclassid;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info *nh_info;
+		struct nh_group *nh_grp;
+	};
+};
+
+struct fib6_result;
+
+struct fib6_config;
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	long unsigned int fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+};
+
+enum {
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 1,
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct nh_grp_entry;
+
+struct nh_res_bucket {
+	struct nh_grp_entry *nh_entry;
+	atomic_long_t used_time;
+	long unsigned int migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	long unsigned int unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+struct bpf_lwt_prog {
+	struct bpf_prog *prog;
+	char *name;
+};
+
+struct bpf_lwt {
+	struct bpf_lwt_prog in;
+	struct bpf_lwt_prog out;
+	struct bpf_lwt_prog xmit;
+	int family;
+};
+
+struct fch_hdr {
+	__u8 daddr[6];
+	__u8 saddr[6];
+};
+
+struct fcllc {
+	__u8 dsap;
+	__u8 ssap;
+	__u8 llc;
+	__u8 protid[3];
+	__be16 ethertype;
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	long unsigned int cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
+};
+
+struct tc_mq_opt_offload_graft_params {
+	long unsigned int queue;
+	u32 child_handle;
+};
+
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
+};
+
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	__TCA_MAX = 16,
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data *cache[16];
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map *smap;
+	u8 data[0];
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	struct xdp_frame frm;
+	u8 data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct prog_test_pass1 {
+	int x0;
+	struct {
+		int x1;
+		struct {
+			int x2;
+			struct {
+				int x3;
+			};
+		};
+	};
+};
+
+struct prog_test_pass2 {
+	int len;
+	short int arr1[4];
+	struct {
+		char arr2[4];
+		long unsigned int arr3[8];
+	} x;
+};
+
+struct prog_test_fail1 {
+	void *p;
+	int x;
+};
+
+struct prog_test_fail2 {
+	int x8;
+	struct prog_test_pass1 x;
+};
+
+struct prog_test_fail3 {
+	int len;
+	char arr1[2];
+	char arr2[0];
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+enum {
+	ETH_RSS_HASH_TOP_BIT = 0,
+	ETH_RSS_HASH_XOR_BIT = 1,
+	ETH_RSS_HASH_CRC32_BIT = 2,
+	ETH_RSS_HASH_FUNCS_COUNT = 3,
+};
+
+enum {
+	ETHTOOL_MSG_USER_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET = 1,
+	ETHTOOL_MSG_LINKINFO_GET = 2,
+	ETHTOOL_MSG_LINKINFO_SET = 3,
+	ETHTOOL_MSG_LINKMODES_GET = 4,
+	ETHTOOL_MSG_LINKMODES_SET = 5,
+	ETHTOOL_MSG_LINKSTATE_GET = 6,
+	ETHTOOL_MSG_DEBUG_GET = 7,
+	ETHTOOL_MSG_DEBUG_SET = 8,
+	ETHTOOL_MSG_WOL_GET = 9,
+	ETHTOOL_MSG_WOL_SET = 10,
+	ETHTOOL_MSG_FEATURES_GET = 11,
+	ETHTOOL_MSG_FEATURES_SET = 12,
+	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
+	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
+	ETHTOOL_MSG_RINGS_GET = 15,
+	ETHTOOL_MSG_RINGS_SET = 16,
+	ETHTOOL_MSG_CHANNELS_GET = 17,
+	ETHTOOL_MSG_CHANNELS_SET = 18,
+	ETHTOOL_MSG_COALESCE_GET = 19,
+	ETHTOOL_MSG_COALESCE_SET = 20,
+	ETHTOOL_MSG_PAUSE_GET = 21,
+	ETHTOOL_MSG_PAUSE_SET = 22,
+	ETHTOOL_MSG_EEE_GET = 23,
+	ETHTOOL_MSG_EEE_SET = 24,
+	ETHTOOL_MSG_TSINFO_GET = 25,
+	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
+	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
+	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
+	ETHTOOL_MSG_FEC_GET = 29,
+	ETHTOOL_MSG_FEC_SET = 30,
+	ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+	ETHTOOL_MSG_STATS_GET = 32,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+	ETHTOOL_MSG_MODULE_GET = 34,
+	ETHTOOL_MSG_MODULE_SET = 35,
+	__ETHTOOL_MSG_USER_CNT = 36,
+	ETHTOOL_MSG_USER_MAX = 35,
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	__ETHTOOL_MSG_KERNEL_CNT = 37,
+	ETHTOOL_MSG_KERNEL_MAX = 36,
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	__ETHTOOL_A_LINKMODES_CNT = 10,
+	ETHTOOL_A_LINKMODES_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	__ETHTOOL_A_LINKSTATE_CNT = 7,
+	ETHTOOL_A_LINKSTATE_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	__ETHTOOL_A_RINGS_CNT = 14,
+	ETHTOOL_A_RINGS_MAX = 13,
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	__ETHTOOL_A_COALESCE_CNT = 26,
+	ETHTOOL_A_COALESCE_MAX = 25,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	__ETHTOOL_A_PAUSE_CNT = 6,
+	ETHTOOL_A_PAUSE_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	__ETHTOOL_A_STATS_CNT = 5,
+	ETHTOOL_A_STATS_MAX = 4,
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+struct debug_reply_data {
+	struct ethnl_reply_data base;
+	u32 msg_mask;
+};
+
+struct eee_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_eee eee;
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+typedef u16 u_int16_t;
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+struct xt_action_param;
+
+struct xt_mtchk_param;
+
+struct xt_mtdtor_param;
+
+struct xt_match {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	bool (*match)(const struct sk_buff *, struct xt_action_param *);
+	int (*checkentry)(const struct xt_mtchk_param *);
+	void (*destroy)(const struct xt_mtdtor_param *);
+	void (*compat_from_user)(void *, const void *);
+	int (*compat_to_user)(void *, const void *);
+	struct module *me;
+	const char *table;
+	unsigned int matchsize;
+	unsigned int usersize;
+	unsigned int compatsize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_tgchk_param;
+
+struct xt_tgdtor_param;
+
+struct xt_target {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
+	int (*checkentry)(const struct xt_tgchk_param *);
+	void (*destroy)(const struct xt_tgdtor_param *);
+	void (*compat_from_user)(void *, const void *);
+	int (*compat_to_user)(void *, const void *);
+	struct module *me;
+	const char *table;
+	unsigned int targetsize;
+	unsigned int usersize;
+	unsigned int compatsize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_action_param {
+	union {
+		const struct xt_match *match;
+		const struct xt_target *target;
+	};
+	union {
+		const void *matchinfo;
+		const void *targinfo;
+	};
+	const struct nf_hook_state *state;
+	unsigned int thoff;
+	u16 fragoff;
+	bool hotdrop;
+};
+
+struct xt_mtchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_match *match;
+	void *matchinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_mtdtor_param {
+	struct net *net;
+	const struct xt_match *match;
+	void *matchinfo;
+	u_int8_t family;
+};
+
+struct xt_tgchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_target *target;
+	void *targinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_tgdtor_param {
+	struct net *net;
+	const struct xt_target *target;
+	void *targinfo;
+	u_int8_t family;
+};
+
+struct xt_tcp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 option;
+	__u8 flg_mask;
+	__u8 flg_cmp;
+	__u8 invflags;
+};
+
+struct xt_udp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 invflags;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u16 tsflags;
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+struct ipv6_rt_hdr;
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct ip_mc_socklist;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__u16 cmsg_flags;
+	struct ip_options_rcu *inet_opt;
+	__be16 inet_sport;
+	__u16 inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct ip_mc_socklist *mc_list;
+	struct inet_cork_full cork;
+};
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	const struct in6_addr *saddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist *ipv6_fl_list;
+	struct ipv6_txoptions *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct ip_sf_socklist;
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist *next;
+	struct ip6_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	long unsigned int linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	long unsigned int lastuse;
+	long unsigned int expires;
+	struct net *fl_net;
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+enum l2tp_debug_flags {
+	L2TP_MSG_DEBUG = 1,
+	L2TP_MSG_CONTROL = 2,
+	L2TP_MSG_SEQ = 4,
+	L2TP_MSG_DATA = 8,
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	long unsigned int icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		long unsigned int timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 icsk_ca_priv[13];
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	short unsigned int fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(const struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	bool drop_req;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_md5sig_key;
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
+	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
+	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct tcp_sock_af_ops;
+
+struct tcp_md5sig_info;
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 cwnd_usage_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 mtu_info;
+	bool is_mptcp;
+	bool (*smc_hs_congested)(const struct sock *);
+	bool syn_smc;
+	const struct tcp_sock_af_ops *af_specific;
+	struct tcp_md5sig_info *md5sig_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock *fastopen_rsk;
+	struct saved_syn *saved_syn;
+};
+
+struct tcp_sock_af_ops {
+	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
+	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
+	int (*md5_parse)(struct sock *, int, sockptr_t, int);
+};
+
+struct tcp_md5sig_info {
+	struct hlist_head head;
+	struct callback_head rcu;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+	struct tcp_md5sig_key *tw_md5_key;
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
+};
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct napi_gro_cb {
+	void *frag0;
+	unsigned int frag0_len;
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	long unsigned int age;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+	struct sk_buff *last;
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+typedef u32 u_int32_t;
+
+typedef u64 u_int64_t;
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+enum ip_conntrack_status {
+	IPS_EXPECTED_BIT = 0,
+	IPS_EXPECTED = 1,
+	IPS_SEEN_REPLY_BIT = 1,
+	IPS_SEEN_REPLY = 2,
+	IPS_ASSURED_BIT = 2,
+	IPS_ASSURED = 4,
+	IPS_CONFIRMED_BIT = 3,
+	IPS_CONFIRMED = 8,
+	IPS_SRC_NAT_BIT = 4,
+	IPS_SRC_NAT = 16,
+	IPS_DST_NAT_BIT = 5,
+	IPS_DST_NAT = 32,
+	IPS_NAT_MASK = 48,
+	IPS_SEQ_ADJUST_BIT = 6,
+	IPS_SEQ_ADJUST = 64,
+	IPS_SRC_NAT_DONE_BIT = 7,
+	IPS_SRC_NAT_DONE = 128,
+	IPS_DST_NAT_DONE_BIT = 8,
+	IPS_DST_NAT_DONE = 256,
+	IPS_NAT_DONE_MASK = 384,
+	IPS_DYING_BIT = 9,
+	IPS_DYING = 512,
+	IPS_FIXED_TIMEOUT_BIT = 10,
+	IPS_FIXED_TIMEOUT = 1024,
+	IPS_TEMPLATE_BIT = 11,
+	IPS_TEMPLATE = 2048,
+	IPS_UNTRACKED_BIT = 12,
+	IPS_UNTRACKED = 4096,
+	IPS_NAT_CLASH_BIT = 12,
+	IPS_NAT_CLASH = 4096,
+	IPS_HELPER_BIT = 13,
+	IPS_HELPER = 8192,
+	IPS_OFFLOAD_BIT = 14,
+	IPS_OFFLOAD = 16384,
+	IPS_HW_OFFLOAD_BIT = 15,
+	IPS_HW_OFFLOAD = 32768,
+	IPS_UNCHANGEABLE_MASK = 56313,
+	__IPS_MAX_BIT = 16,
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
+};
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_udp {
+	long unsigned int stream_ts;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_zone zone;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	long unsigned int status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {	} __nfct_init_offset;
+	struct nf_conn *master;
+	u_int32_t mark;
+	u_int32_t secmark;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	struct hlist_nulls_head ht[256];
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	long unsigned int rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct icmp_ext_hdr {
+	__u8 reserved1: 4;
+	__u8 version: 4;
+	__u8 reserved2;
+	__sum16 checksum;
+};
+
+struct icmp_extobj_hdr {
+	__be16 length;
+	__u8 class_num;
+	__u8 class_type;
+};
+
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+struct icmp_bxm {
+	struct sk_buff *skb;
+	int offset;
+	int data_len;
+	struct {
+		struct icmphdr icmph;
+		__be32 times[3];
+	} data;
+	int head_len;
+	struct ip_options_data replyopts;
+};
+
+struct icmp_control {
+	enum skb_drop_reason (*handler)(struct sk_buff *);
+	short int error;
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+struct rtnexthop {
+	short unsigned int rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+typedef u8 dscp_t;
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct key_vector *tnode[0];
+	};
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector *parent;
+	struct key_vector kv[1];
+};
+
+struct trie_use_stats {
+	unsigned int gets;
+	unsigned int backtrack;
+	unsigned int semantic_match_passed;
+	unsigned int semantic_match_miss;
+	unsigned int null_node_hit;
+	unsigned int resize_node_skipped;
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct trie {
+	struct key_vector kv[1];
+	struct trie_use_stats *stats;
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+enum {
+	FRA_UNSPEC = 0,
+	FRA_DST = 1,
+	FRA_SRC = 2,
+	FRA_IIFNAME = 3,
+	FRA_GOTO = 4,
+	FRA_UNUSED2 = 5,
+	FRA_PRIORITY = 6,
+	FRA_UNUSED3 = 7,
+	FRA_UNUSED4 = 8,
+	FRA_UNUSED5 = 9,
+	FRA_FWMARK = 10,
+	FRA_FLOW = 11,
+	FRA_TUN_ID = 12,
+	FRA_SUPPRESS_IFGROUP = 13,
+	FRA_SUPPRESS_PREFIXLEN = 14,
+	FRA_TABLE = 15,
+	FRA_FWMASK = 16,
+	FRA_OIFNAME = 17,
+	FRA_PAD = 18,
+	FRA_L3MDEV = 19,
+	FRA_UID_RANGE = 20,
+	FRA_PROTOCOL = 21,
+	FRA_IP_PROTO = 22,
+	FRA_SPORT_RANGE = 23,
+	FRA_DPORT_RANGE = 24,
+	__FRA_MAX = 25,
+};
+
+enum {
+	FR_ACT_UNSPEC = 0,
+	FR_ACT_TO_TBL = 1,
+	FR_ACT_GOTO = 2,
+	FR_ACT_NOP = 3,
+	FR_ACT_RES3 = 4,
+	FR_ACT_RES4 = 5,
+	FR_ACT_BLACKHOLE = 6,
+	FR_ACT_UNREACHABLE = 7,
+	FR_ACT_PROHIBIT = 8,
+	__FR_ACT_MAX = 9,
+};
+
+struct fib4_rule {
+	struct fib_rule common;
+	u8 dst_len;
+	u8 src_len;
+	dscp_t dscp;
+	__be32 src;
+	__be32 srcmask;
+	__be32 dst;
+	__be32 dstmask;
+	u32 tclassid;
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_req_raw {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 sdiag_raw_protocol;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct bpf_sk_storage_diag;
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct xfrm_dst;
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+struct gro_cell;
+
+struct gro_cells {
+	struct gro_cell *cells;
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu *cache;
+	long unsigned int reset_ts;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_6rd_parm {
+	struct in6_addr prefix;
+	__be32 relay_prefix;
+	u16 prefixlen;
+	u16 relay_prefixlen;
+};
+
+struct ip_tunnel_prl_entry;
+
+struct ip_tunnel {
+	struct ip_tunnel *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	long unsigned int err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_6rd_parm ip6rd;
+	struct ip_tunnel_prl_entry *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct __ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	bool collect_md;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	__u32 fwmark;
+	__u32 index;
+	__u8 erspan_ver;
+	__u8 dir;
+	__u16 hwid;
+};
+
+struct ip6_tnl {
+	struct ip6_tnl *next;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	struct __ip6_tnl_parm parms;
+	struct flowi fl;
+	struct dst_cache dst_cache;
+	struct gro_cells gro_cells;
+	int err_count;
+	long unsigned int err_time;
+	__u32 i_seqno;
+	atomic_t o_seqno;
+	int hlen;
+	int tun_hlen;
+	int encap_hlen;
+	struct ip_tunnel_encap encap;
+	int mlink;
+};
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct xfrm_trans_tasklet {
+	struct work_struct work;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+};
+
+struct xfrm_trans_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	int (*finish)(struct net *, struct sock *, struct sk_buff *);
+	struct net *net;
+};
+
+struct strp_msg {
+	int full_len;
+	int offset;
+};
+
+struct espintcp_msg {
+	struct sk_buff *skb;
+	struct sk_msg skmsg;
+	int offset;
+	int len;
+};
+
+struct espintcp_ctx {
+	struct strparser strp;
+	struct sk_buff_head ike_queue;
+	struct sk_buff_head out_queue;
+	struct espintcp_msg partial;
+	void (*saved_data_ready)(struct sock *);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_destruct)(struct sock *);
+	struct work_struct work;
+	bool tx_running;
+};
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
+};
+
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+};
+
+struct flow_dissector_key_tags {
+	u32 flow_label;
+};
+
+struct flow_dissector_key_vlan {
+	union {
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
+	};
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
+};
+
+struct flow_dissector_key_keyid {
+	__be32 keyid;
+};
+
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
+};
+
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	int: 32;
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
+	refcount_t refcnt;
+	spinlock_t lock;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	long unsigned int cstamp;
+	long unsigned int tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+struct sockaddr_in6 {
+	short unsigned int sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	short unsigned int type;
+	short unsigned int protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+typedef int mh_filter_t(struct sock *, struct sk_buff *);
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+enum nl80211_iftype {
+	NL80211_IFTYPE_UNSPECIFIED = 0,
+	NL80211_IFTYPE_ADHOC = 1,
+	NL80211_IFTYPE_STATION = 2,
+	NL80211_IFTYPE_AP = 3,
+	NL80211_IFTYPE_AP_VLAN = 4,
+	NL80211_IFTYPE_WDS = 5,
+	NL80211_IFTYPE_MONITOR = 6,
+	NL80211_IFTYPE_MESH_POINT = 7,
+	NL80211_IFTYPE_P2P_CLIENT = 8,
+	NL80211_IFTYPE_P2P_GO = 9,
+	NL80211_IFTYPE_P2P_DEVICE = 10,
+	NL80211_IFTYPE_OCB = 11,
+	NL80211_IFTYPE_NAN = 12,
+	NUM_NL80211_IFTYPES = 13,
+	NL80211_IFTYPE_MAX = 12,
+};
+
+struct cfg80211_conn;
+
+struct cfg80211_cached_keys;
+
+enum ieee80211_bss_type {
+	IEEE80211_BSS_TYPE_ESS = 0,
+	IEEE80211_BSS_TYPE_PBSS = 1,
+	IEEE80211_BSS_TYPE_IBSS = 2,
+	IEEE80211_BSS_TYPE_MBSS = 3,
+	IEEE80211_BSS_TYPE_ANY = 4,
+};
+
+enum nl80211_chan_width {
+	NL80211_CHAN_WIDTH_20_NOHT = 0,
+	NL80211_CHAN_WIDTH_20 = 1,
+	NL80211_CHAN_WIDTH_40 = 2,
+	NL80211_CHAN_WIDTH_80 = 3,
+	NL80211_CHAN_WIDTH_80P80 = 4,
+	NL80211_CHAN_WIDTH_160 = 5,
+	NL80211_CHAN_WIDTH_5 = 6,
+	NL80211_CHAN_WIDTH_10 = 7,
+	NL80211_CHAN_WIDTH_1 = 8,
+	NL80211_CHAN_WIDTH_2 = 9,
+	NL80211_CHAN_WIDTH_4 = 10,
+	NL80211_CHAN_WIDTH_8 = 11,
+	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
+};
+
+enum ieee80211_edmg_bw_config {
+	IEEE80211_EDMG_BW_CONFIG_4 = 4,
+	IEEE80211_EDMG_BW_CONFIG_5 = 5,
+	IEEE80211_EDMG_BW_CONFIG_6 = 6,
+	IEEE80211_EDMG_BW_CONFIG_7 = 7,
+	IEEE80211_EDMG_BW_CONFIG_8 = 8,
+	IEEE80211_EDMG_BW_CONFIG_9 = 9,
+	IEEE80211_EDMG_BW_CONFIG_10 = 10,
+	IEEE80211_EDMG_BW_CONFIG_11 = 11,
+	IEEE80211_EDMG_BW_CONFIG_12 = 12,
+	IEEE80211_EDMG_BW_CONFIG_13 = 13,
+	IEEE80211_EDMG_BW_CONFIG_14 = 14,
+	IEEE80211_EDMG_BW_CONFIG_15 = 15,
+};
+
+struct ieee80211_edmg {
+	u8 channels;
+	enum ieee80211_edmg_bw_config bw_config;
+};
+
+struct ieee80211_channel;
+
+struct cfg80211_chan_def {
+	struct ieee80211_channel *chan;
+	enum nl80211_chan_width width;
+	u32 center_freq1;
+	u32 center_freq2;
+	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
+};
+
+struct ieee80211_mcs_info {
+	u8 rx_mask[10];
+	__le16 rx_highest;
+	u8 tx_params;
+	u8 reserved[3];
+};
+
+struct ieee80211_ht_cap {
+	__le16 cap_info;
+	u8 ampdu_params_info;
+	struct ieee80211_mcs_info mcs;
+	__le16 extended_ht_cap_info;
+	__le32 tx_BF_cap_info;
+	u8 antenna_selection_info;
+} __attribute__((packed));
+
+struct key_params;
+
+struct cfg80211_ibss_params {
+	const u8 *ssid;
+	const u8 *bssid;
+	struct cfg80211_chan_def chandef;
+	const u8 *ie;
+	u8 ssid_len;
+	u8 ie_len;
+	u16 beacon_interval;
+	u32 basic_rates;
+	bool channel_fixed;
+	bool privacy;
+	bool control_port;
+	bool control_port_over_nl80211;
+	bool userspace_handles_dfs;
+	int: 24;
+	int mcast_rate[6];
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	int: 32;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	int: 32;
+} __attribute__((packed));
+
+enum nl80211_auth_type {
+	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
+	NL80211_AUTHTYPE_SHARED_KEY = 1,
+	NL80211_AUTHTYPE_FT = 2,
+	NL80211_AUTHTYPE_NETWORK_EAP = 3,
+	NL80211_AUTHTYPE_SAE = 4,
+	NL80211_AUTHTYPE_FILS_SK = 5,
+	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
+	NL80211_AUTHTYPE_FILS_PK = 7,
+	__NL80211_AUTHTYPE_NUM = 8,
+	NL80211_AUTHTYPE_MAX = 7,
+	NL80211_AUTHTYPE_AUTOMATIC = 8,
+};
+
+enum nl80211_mfp {
+	NL80211_MFP_NO = 0,
+	NL80211_MFP_REQUIRED = 1,
+	NL80211_MFP_OPTIONAL = 2,
+};
+
+enum nl80211_sae_pwe_mechanism {
+	NL80211_SAE_PWE_UNSPECIFIED = 0,
+	NL80211_SAE_PWE_HUNT_AND_PECK = 1,
+	NL80211_SAE_PWE_HASH_TO_ELEMENT = 2,
+	NL80211_SAE_PWE_BOTH = 3,
+};
+
+struct cfg80211_crypto_settings {
+	u32 wpa_versions;
+	u32 cipher_group;
+	int n_ciphers_pairwise;
+	u32 ciphers_pairwise[5];
+	int n_akm_suites;
+	u32 akm_suites[10];
+	bool control_port;
+	__be16 control_port_ethertype;
+	bool control_port_no_encrypt;
+	bool control_port_over_nl80211;
+	bool control_port_no_preauth;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	const u8 *psk;
+	const u8 *sae_pwd;
+	u8 sae_pwd_len;
+	enum nl80211_sae_pwe_mechanism sae_pwe;
+};
+
+struct ieee80211_vht_mcs_info {
+	__le16 rx_mcs_map;
+	__le16 rx_highest;
+	__le16 tx_mcs_map;
+	__le16 tx_highest;
+};
+
+struct ieee80211_vht_cap {
+	__le32 vht_cap_info;
+	struct ieee80211_vht_mcs_info supp_mcs;
+};
+
+enum nl80211_bss_select_attr {
+	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
+	NL80211_BSS_SELECT_ATTR_RSSI = 1,
+	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
+	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
+	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
+	NL80211_BSS_SELECT_ATTR_MAX = 3,
+};
+
+enum nl80211_band {
+	NL80211_BAND_2GHZ = 0,
+	NL80211_BAND_5GHZ = 1,
+	NL80211_BAND_60GHZ = 2,
+	NL80211_BAND_6GHZ = 3,
+	NL80211_BAND_S1GHZ = 4,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
+};
+
+struct cfg80211_bss_select_adjust {
+	enum nl80211_band band;
+	s8 delta;
+};
+
+struct cfg80211_bss_selection {
+	enum nl80211_bss_select_attr behaviour;
+	union {
+		enum nl80211_band band_pref;
+		struct cfg80211_bss_select_adjust adjust;
+	} param;
+};
+
+struct cfg80211_connect_params {
+	struct ieee80211_channel *channel;
+	struct ieee80211_channel *channel_hint;
+	const u8 *bssid;
+	const u8 *bssid_hint;
+	const u8 *ssid;
+	size_t ssid_len;
+	enum nl80211_auth_type auth_type;
+	int: 32;
+	const u8 *ie;
+	size_t ie_len;
+	bool privacy;
+	int: 24;
+	enum nl80211_mfp mfp;
+	struct cfg80211_crypto_settings crypto;
+	const u8 *key;
+	u8 key_len;
+	u8 key_idx;
+	short: 16;
+	u32 flags;
+	int bg_scan_period;
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	struct ieee80211_vht_cap vht_capa;
+	struct ieee80211_vht_cap vht_capa_mask;
+	bool pbss;
+	int: 24;
+	struct cfg80211_bss_selection bss_select;
+	const u8 *prev_bssid;
+	const u8 *fils_erp_username;
+	size_t fils_erp_username_len;
+	const u8 *fils_erp_realm;
+	size_t fils_erp_realm_len;
+	u16 fils_erp_next_seq_num;
+	long: 48;
+	const u8 *fils_erp_rrk;
+	size_t fils_erp_rrk_len;
+	bool want_1x;
+	int: 24;
+	struct ieee80211_edmg edmg;
+	int: 32;
+} __attribute__((packed));
+
+struct cfg80211_cqm_config;
+
+struct cfg80211_internal_bss;
+
+struct wiphy;
+
+struct wireless_dev {
+	struct wiphy *wiphy;
+	enum nl80211_iftype iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	u32 identifier;
+	struct list_head mgmt_registrations;
+	u8 mgmt_registrations_need_update: 1;
+	struct mutex mtx;
+	bool use_4addr;
+	bool is_running;
+	bool registered;
+	bool registering;
+	u8 address[6];
+	struct cfg80211_conn *conn;
+	struct cfg80211_cached_keys *connect_keys;
+	enum ieee80211_bss_type conn_bss_type;
+	u32 conn_owner_nlportid;
+	struct work_struct disconnect_wk;
+	u8 disconnect_bssid[6];
+	struct list_head event_list;
+	spinlock_t event_lock;
+	u8 connected: 1;
+	bool ps;
+	int ps_timeout;
+	u32 ap_unexpected_nlportid;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	bool cac_started;
+	long unsigned int cac_start_time;
+	unsigned int cac_time_ms;
+	struct {
+		struct cfg80211_ibss_params ibss;
+		struct cfg80211_connect_params connect;
+		struct cfg80211_cached_keys *keys;
+		const u8 *ie;
+		size_t ie_len;
+		u8 bssid[6];
+		u8 prev_bssid[6];
+		u8 ssid[32];
+		s8 default_key;
+		s8 default_mgmt_key;
+		bool prev_bssid_valid;
+	} wext;
+	struct cfg80211_cqm_config *cqm_config;
+	struct list_head pmsr_list;
+	spinlock_t pmsr_lock;
+	struct work_struct pmsr_free_wk;
+	long unsigned int unprot_beacon_reported;
+	union {
+		struct {
+			u8 connected_addr[6];
+			u8 ssid[32];
+			u8 ssid_len;
+			char: 8;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[32];
+			u8 id_len;
+			u8 id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+	struct {
+		u8 addr[6];
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[15];
+	u16 valid_links;
+};
+
+struct iw_param {
+	__s32 value;
+	__u8 fixed;
+	__u8 disabled;
+	__u16 flags;
+};
+
+struct iw_point {
+	void *pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iw_freq {
+	__s32 m;
+	__s16 e;
+	__u8 i;
+	__u8 flags;
+};
+
+struct iw_quality {
+	__u8 qual;
+	__u8 level;
+	__u8 noise;
+	__u8 updated;
+};
+
+struct iw_discarded {
+	__u32 nwid;
+	__u32 code;
+	__u32 fragment;
+	__u32 retries;
+	__u32 misc;
+};
+
+struct iw_missed {
+	__u32 beacon;
+};
+
+struct iw_encode_ext {
+	__u32 ext_flags;
+	__u8 tx_seq[8];
+	__u8 rx_seq[8];
+	struct sockaddr addr;
+	__u16 alg;
+	__u16 key_len;
+	__u8 key[0];
+};
+
+struct iw_statistics {
+	__u16 status;
+	struct iw_quality qual;
+	struct iw_discarded discard;
+	struct iw_missed miss;
+};
+
+union iwreq_data {
+	char name[16];
+	struct iw_point essid;
+	struct iw_param nwid;
+	struct iw_freq freq;
+	struct iw_param sens;
+	struct iw_param bitrate;
+	struct iw_param txpower;
+	struct iw_param rts;
+	struct iw_param frag;
+	__u32 mode;
+	struct iw_param retry;
+	struct iw_point encoding;
+	struct iw_param power;
+	struct iw_quality qual;
+	struct sockaddr ap_addr;
+	struct sockaddr addr;
+	struct iw_param param;
+	struct iw_point data;
+};
+
+struct iwreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union iwreq_data u;
+};
+
+struct iw_priv_args {
+	__u32 cmd;
+	__u16 set_args;
+	__u16 get_args;
+	char name[16];
+};
+
+struct iw_event {
+	__u16 len;
+	__u16 cmd;
+	union iwreq_data u;
+};
+
+struct compat_iw_point {
+	compat_caddr_t pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct __compat_iw_event {
+	__u16 len;
+	__u16 cmd;
+	compat_caddr_t pointer;
+};
+
+enum nl80211_reg_initiator {
+	NL80211_REGDOM_SET_BY_CORE = 0,
+	NL80211_REGDOM_SET_BY_USER = 1,
+	NL80211_REGDOM_SET_BY_DRIVER = 2,
+	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
+};
+
+enum nl80211_dfs_regions {
+	NL80211_DFS_UNSET = 0,
+	NL80211_DFS_FCC = 1,
+	NL80211_DFS_ETSI = 2,
+	NL80211_DFS_JP = 3,
+};
+
+enum nl80211_user_reg_hint_type {
+	NL80211_USER_REG_HINT_USER = 0,
+	NL80211_USER_REG_HINT_CELL_BASE = 1,
+	NL80211_USER_REG_HINT_INDOOR = 2,
+};
+
+enum nl80211_mntr_flags {
+	__NL80211_MNTR_FLAG_INVALID = 0,
+	NL80211_MNTR_FLAG_FCSFAIL = 1,
+	NL80211_MNTR_FLAG_PLCPFAIL = 2,
+	NL80211_MNTR_FLAG_CONTROL = 3,
+	NL80211_MNTR_FLAG_OTHER_BSS = 4,
+	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
+	NL80211_MNTR_FLAG_ACTIVE = 6,
+	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
+	NL80211_MNTR_FLAG_MAX = 6,
+};
+
+enum nl80211_key_mode {
+	NL80211_KEY_RX_TX = 0,
+	NL80211_KEY_NO_TX = 1,
+	NL80211_KEY_SET_TX = 2,
+};
+
+enum nl80211_bss_scan_width {
+	NL80211_BSS_CHAN_WIDTH_20 = 0,
+	NL80211_BSS_CHAN_WIDTH_10 = 1,
+	NL80211_BSS_CHAN_WIDTH_5 = 2,
+	NL80211_BSS_CHAN_WIDTH_1 = 3,
+	NL80211_BSS_CHAN_WIDTH_2 = 4,
+};
+
+struct nl80211_wowlan_tcp_data_seq {
+	__u32 start;
+	__u32 offset;
+	__u32 len;
+};
+
+struct nl80211_wowlan_tcp_data_token {
+	__u32 offset;
+	__u32 len;
+	__u8 token_stream[0];
+};
+
+struct nl80211_wowlan_tcp_data_token_feature {
+	__u32 min_len;
+	__u32 max_len;
+	__u32 bufsize;
+};
+
+enum nl80211_ext_feature_index {
+	NL80211_EXT_FEATURE_VHT_IBSS = 0,
+	NL80211_EXT_FEATURE_RRM = 1,
+	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
+	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
+	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
+	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
+	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
+	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
+	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
+	NL80211_EXT_FEATURE_FILS_STA = 9,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
+	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
+	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
+	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
+	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
+	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
+	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
+	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
+	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
+	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
+	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
+	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_TXQS = 28,
+	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
+	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
+	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
+	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
+	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
+	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
+	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
+	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
+	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
+	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
+	NL80211_EXT_FEATURE_AQL = 40,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
+	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
+	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
+	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
+	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
+	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
+	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
+	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
+	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
+	NL80211_EXT_FEATURE_BEACON_RATE_HE = 54,
+	NL80211_EXT_FEATURE_SECURE_LTF = 55,
+	NL80211_EXT_FEATURE_SECURE_RTT = 56,
+	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 57,
+	NL80211_EXT_FEATURE_BSS_COLOR = 58,
+	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD = 59,
+	NL80211_EXT_FEATURE_RADAR_BACKGROUND = 60,
+	NUM_NL80211_EXT_FEATURES = 61,
+	MAX_NL80211_EXT_FEATURES = 60,
+};
+
+enum nl80211_dfs_state {
+	NL80211_DFS_USABLE = 0,
+	NL80211_DFS_UNAVAILABLE = 1,
+	NL80211_DFS_AVAILABLE = 2,
+};
+
+struct nl80211_vendor_cmd_info {
+	__u32 vendor_id;
+	__u32 subcmd;
+};
+
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
+struct ieee80211_he_cap_elem {
+	u8 mac_cap_info[6];
+	u8 phy_cap_info[11];
+};
+
+struct ieee80211_he_mcs_nss_supp {
+	__le16 rx_mcs_80;
+	__le16 tx_mcs_80;
+	__le16 rx_mcs_160;
+	__le16 tx_mcs_160;
+	__le16 rx_mcs_80p80;
+	__le16 tx_mcs_80p80;
+};
+
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	u8 rx_tx_mcs7_max_nss;
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
+struct ieee80211_he_6ghz_capa {
+	__le16 capa;
+};
+
+struct rfkill;
+
+enum environment_cap {
+	ENVIRON_ANY = 0,
+	ENVIRON_INDOOR = 1,
+	ENVIRON_OUTDOOR = 2,
+};
+
+struct regulatory_request {
+	struct callback_head callback_head;
+	int wiphy_idx;
+	enum nl80211_reg_initiator initiator;
+	enum nl80211_user_reg_hint_type user_reg_hint_type;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	bool intersect;
+	bool processed;
+	enum environment_cap country_ie_env;
+	struct list_head list;
+};
+
+struct ieee80211_freq_range {
+	u32 start_freq_khz;
+	u32 end_freq_khz;
+	u32 max_bandwidth_khz;
+};
+
+struct ieee80211_power_rule {
+	u32 max_antenna_gain;
+	u32 max_eirp;
+};
+
+struct ieee80211_wmm_ac {
+	u16 cw_min;
+	u16 cw_max;
+	u16 cot;
+	u8 aifsn;
+};
+
+struct ieee80211_wmm_rule {
+	struct ieee80211_wmm_ac client[4];
+	struct ieee80211_wmm_ac ap[4];
+};
+
+struct ieee80211_reg_rule {
+	struct ieee80211_freq_range freq_range;
+	struct ieee80211_power_rule power_rule;
+	struct ieee80211_wmm_rule wmm_rule;
+	u32 flags;
+	u32 dfs_cac_ms;
+	bool has_wmm;
+};
+
+struct ieee80211_regdomain {
+	struct callback_head callback_head;
+	u32 n_reg_rules;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	struct ieee80211_reg_rule reg_rules[0];
+};
+
+struct ieee80211_channel {
+	enum nl80211_band band;
+	u32 center_freq;
+	u16 freq_offset;
+	u16 hw_value;
+	u32 flags;
+	int max_antenna_gain;
+	int max_power;
+	int max_reg_power;
+	bool beacon_found;
+	u32 orig_flags;
+	int orig_mag;
+	int orig_mpwr;
+	enum nl80211_dfs_state dfs_state;
+	long unsigned int dfs_state_entered;
+	unsigned int dfs_cac_ms;
+};
+
+struct ieee80211_rate {
+	u32 flags;
+	u16 bitrate;
+	u16 hw_value;
+	u16 hw_value_short;
+};
+
+struct ieee80211_sta_ht_cap {
+	u16 cap;
+	bool ht_supported;
+	u8 ampdu_factor;
+	u8 ampdu_density;
+	struct ieee80211_mcs_info mcs;
+	char: 8;
+} __attribute__((packed));
+
+struct ieee80211_sta_vht_cap {
+	bool vht_supported;
+	u32 cap;
+	struct ieee80211_vht_mcs_info vht_mcs;
+};
+
+struct ieee80211_sta_he_cap {
+	bool has_he;
+	struct ieee80211_he_cap_elem he_cap_elem;
+	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
+	u8 ppe_thres[25];
+} __attribute__((packed));
+
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
+struct ieee80211_sband_iftype_data {
+	u16 types_mask;
+	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
+} __attribute__((packed));
+
+struct ieee80211_sta_s1g_cap {
+	bool s1g;
+	u8 cap[10];
+	u8 nss_mcs[5];
+};
+
+struct ieee80211_supported_band {
+	struct ieee80211_channel *channels;
+	struct ieee80211_rate *bitrates;
+	enum nl80211_band band;
+	int n_channels;
+	int n_bitrates;
+	struct ieee80211_sta_ht_cap ht_cap;
+	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_s1g_cap s1g_cap;
+	struct ieee80211_edmg edmg_cap;
+	u16 n_iftype_data;
+	const struct ieee80211_sband_iftype_data *iftype_data;
+};
+
+struct key_params {
+	const u8 *key;
+	const u8 *seq;
+	int key_len;
+	int seq_len;
+	u16 vlan_id;
+	u32 cipher;
+	enum nl80211_key_mode mode;
+};
+
+struct mac_address {
+	u8 addr[6];
+};
+
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
+struct cfg80211_ssid {
+	u8 ssid[32];
+	u8 ssid_len;
+};
+
+enum cfg80211_signal_type {
+	CFG80211_SIGNAL_TYPE_NONE = 0,
+	CFG80211_SIGNAL_TYPE_MBM = 1,
+	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+};
+
+struct ieee80211_txrx_stypes;
+
+struct ieee80211_iface_combination;
+
+struct wiphy_iftype_akm_suites;
+
+struct wiphy_wowlan_support;
+
+struct cfg80211_wowlan;
+
+struct wiphy_iftype_ext_capab;
+
+struct wiphy_coalesce_support;
+
+struct wiphy_vendor_command;
+
+struct cfg80211_pmsr_capabilities;
+
+struct wiphy {
+	struct mutex mtx;
+	u8 perm_addr[6];
+	u8 addr_mask[6];
+	struct mac_address *addresses;
+	const struct ieee80211_txrx_stypes *mgmt_stypes;
+	const struct ieee80211_iface_combination *iface_combinations;
+	int n_iface_combinations;
+	u16 software_iftypes;
+	u16 n_addresses;
+	u16 interface_modes;
+	u16 max_acl_mac_addrs;
+	u32 flags;
+	u32 regulatory_flags;
+	u32 features;
+	u8 ext_features[8];
+	u32 ap_sme_capa;
+	enum cfg80211_signal_type signal_type;
+	int bss_priv_size;
+	u8 max_scan_ssids;
+	u8 max_sched_scan_reqs;
+	u8 max_sched_scan_ssids;
+	u8 max_match_sets;
+	u16 max_scan_ie_len;
+	u16 max_sched_scan_ie_len;
+	u32 max_sched_scan_plans;
+	u32 max_sched_scan_plan_interval;
+	u32 max_sched_scan_plan_iterations;
+	int n_cipher_suites;
+	const u32 *cipher_suites;
+	int n_akm_suites;
+	const u32 *akm_suites;
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+	u8 retry_short;
+	u8 retry_long;
+	u32 frag_threshold;
+	u32 rts_threshold;
+	u8 coverage_class;
+	char fw_version[32];
+	u32 hw_version;
+	const struct wiphy_wowlan_support *wowlan;
+	struct cfg80211_wowlan *wowlan_config;
+	u16 max_remain_on_channel_duration;
+	u8 max_num_pmkids;
+	u32 available_antennas_tx;
+	u32 available_antennas_rx;
+	u32 probe_resp_offload;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+	unsigned int num_iftype_ext_capab;
+	const void *privid;
+	struct ieee80211_supported_band *bands[6];
+	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
+	const struct ieee80211_regdomain *regd;
+	struct device dev;
+	bool registered;
+	struct dentry *debugfsdir;
+	const struct ieee80211_ht_cap *ht_capa_mod_mask;
+	const struct ieee80211_vht_cap *vht_capa_mod_mask;
+	struct list_head wdev_list;
+	possible_net_t _net;
+	const struct iw_handler_def *wext;
+	const struct wiphy_coalesce_support *coalesce;
+	const struct wiphy_vendor_command *vendor_commands;
+	const struct nl80211_vendor_cmd_info *vendor_events;
+	int n_vendor_commands;
+	int n_vendor_events;
+	u16 max_ap_assoc_sta;
+	u8 max_num_csa_counters;
+	u32 bss_select_support;
+	u8 nan_supported_bands;
+	u32 txq_limit;
+	u32 txq_memory_limit;
+	u32 txq_quantum;
+	long unsigned int tx_queue_len;
+	u8 support_mbssid: 1;
+	u8 support_only_he_mbssid: 1;
+	const struct cfg80211_pmsr_capabilities *pmsr_capa;
+	struct {
+		u64 peer;
+		u64 vif;
+		u8 max_retry;
+	} tid_config_support;
+	u8 max_data_retry_count;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	u16 max_num_akm_suites;
+	long: 32;
+	long: 64;
+	char priv[0];
+};
+
+struct cfg80211_match_set {
+	struct cfg80211_ssid ssid;
+	u8 bssid[6];
+	s32 rssi_thold;
+	s32 per_band_rssi_thold[6];
+};
+
+struct cfg80211_sched_scan_plan {
+	u32 interval;
+	u32 iterations;
+};
+
+struct cfg80211_sched_scan_request {
+	u64 reqid;
+	struct cfg80211_ssid *ssids;
+	int n_ssids;
+	u32 n_channels;
+	enum nl80211_bss_scan_width scan_width;
+	const u8 *ie;
+	size_t ie_len;
+	u32 flags;
+	struct cfg80211_match_set *match_sets;
+	int n_match_sets;
+	s32 min_rssi_thold;
+	u32 delay;
+	struct cfg80211_sched_scan_plan *scan_plans;
+	int n_scan_plans;
+	u8 mac_addr[6];
+	u8 mac_addr_mask[6];
+	bool relative_rssi_set;
+	s8 relative_rssi;
+	struct cfg80211_bss_select_adjust rssi_adjust;
+	struct wiphy *wiphy;
+	struct net_device *dev;
+	long unsigned int scan_start;
+	bool report_results;
+	struct callback_head callback_head;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	struct list_head list;
+	struct ieee80211_channel *channels[0];
+};
+
+struct cfg80211_pkt_pattern {
+	const u8 *mask;
+	const u8 *pattern;
+	int pattern_len;
+	int pkt_offset;
+};
+
+struct cfg80211_wowlan_tcp {
+	struct socket *sock;
+	__be32 src;
+	__be32 dst;
+	u16 src_port;
+	u16 dst_port;
+	u8 dst_mac[6];
+	int payload_len;
+	const u8 *payload;
+	struct nl80211_wowlan_tcp_data_seq payload_seq;
+	u32 data_interval;
+	u32 wake_len;
+	const u8 *wake_data;
+	const u8 *wake_mask;
+	u32 tokens_size;
+	struct nl80211_wowlan_tcp_data_token payload_tok;
+};
+
+struct cfg80211_wowlan {
+	bool any;
+	bool disconnect;
+	bool magic_pkt;
+	bool gtk_rekey_failure;
+	bool eap_identity_req;
+	bool four_way_handshake;
+	bool rfkill_release;
+	struct cfg80211_pkt_pattern *patterns;
+	struct cfg80211_wowlan_tcp *tcp;
+	int n_patterns;
+	struct cfg80211_sched_scan_request *nd_config;
+};
+
+struct ieee80211_iface_limit {
+	u16 max;
+	u16 types;
+};
+
+struct ieee80211_iface_combination {
+	const struct ieee80211_iface_limit *limits;
+	u32 num_different_channels;
+	u16 max_interfaces;
+	u8 n_limits;
+	bool beacon_int_infra_match;
+	u8 radar_detect_widths;
+	u8 radar_detect_regions;
+	u32 beacon_int_min_gcd;
+};
+
+struct ieee80211_txrx_stypes {
+	u16 tx;
+	u16 rx;
+};
+
+struct wiphy_wowlan_tcp_support {
+	const struct nl80211_wowlan_tcp_data_token_feature *tok;
+	u32 data_payload_max;
+	u32 data_interval_max;
+	u32 wake_payload_max;
+	bool seq;
+};
+
+struct wiphy_wowlan_support {
+	u32 flags;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+	int max_nd_match_sets;
+	const struct wiphy_wowlan_tcp_support *tcp;
+};
+
+struct wiphy_coalesce_support {
+	int n_rules;
+	int max_delay;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+};
+
+struct wiphy_vendor_command {
+	struct nl80211_vendor_cmd_info info;
+	u32 flags;
+	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
+	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+};
+
+struct wiphy_iftype_ext_capab {
+	enum nl80211_iftype iftype;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	u16 eml_capabilities;
+	u16 mld_capa_and_ops;
+};
+
+struct cfg80211_pmsr_capabilities {
+	unsigned int max_peers;
+	u8 report_ap_tsf: 1;
+	u8 randomize_mac_addr: 1;
+	struct {
+		u32 preambles;
+		u32 bandwidths;
+		s8 max_bursts_exponent;
+		u8 max_ftms_per_burst;
+		u8 supported: 1;
+		u8 asap: 1;
+		u8 non_asap: 1;
+		u8 request_lci: 1;
+		u8 request_civicloc: 1;
+		u8 trigger_based: 1;
+		u8 non_trigger_based: 1;
+	} ftm;
+};
+
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+struct iw_request_info {
+	__u16 cmd;
+	__u16 flags;
+};
+
+struct iw_ioctl_description {
+	__u8 header_type;
+	__u8 token_type;
+	__u16 token_size;
+	__u16 min_tokens;
+	__u16 max_tokens;
+	__u32 flags;
+};
+
+struct iw_spy_data {
+	int spy_number;
+	u_char spy_address[48];
+	struct iw_quality spy_stat[8];
+	struct iw_quality spy_thr_low;
+	struct iw_quality spy_thr_high;
+	u_char spy_thr_under[8];
+};
+
+typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
+
+struct netlbl_audit {
+	u32 secid;
+	kuid_t loginuid;
+	unsigned int sessionid;
+};
+
+struct cipso_v4_std_map_tbl {
+	struct {
+		u32 *cipso;
+		u32 *local;
+		u32 cipso_size;
+		u32 local_size;
+	} lvl;
+	struct {
+		u32 *cipso;
+		u32 *local;
+		u32 cipso_size;
+		u32 local_size;
+	} cat;
+};
+
+struct cipso_v4_doi {
+	u32 doi;
+	u32 type;
+	union {
+		struct cipso_v4_std_map_tbl *std;
+	} map;
+	u8 tags[5];
+	refcount_t refcount;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+enum {
+	NLBL_CIPSOV4_C_UNSPEC = 0,
+	NLBL_CIPSOV4_C_ADD = 1,
+	NLBL_CIPSOV4_C_REMOVE = 2,
+	NLBL_CIPSOV4_C_LIST = 3,
+	NLBL_CIPSOV4_C_LISTALL = 4,
+	__NLBL_CIPSOV4_C_MAX = 5,
+};
+
+enum {
+	NLBL_CIPSOV4_A_UNSPEC = 0,
+	NLBL_CIPSOV4_A_DOI = 1,
+	NLBL_CIPSOV4_A_MTYPE = 2,
+	NLBL_CIPSOV4_A_TAG = 3,
+	NLBL_CIPSOV4_A_TAGLST = 4,
+	NLBL_CIPSOV4_A_MLSLVLLOC = 5,
+	NLBL_CIPSOV4_A_MLSLVLREM = 6,
+	NLBL_CIPSOV4_A_MLSLVL = 7,
+	NLBL_CIPSOV4_A_MLSLVLLST = 8,
+	NLBL_CIPSOV4_A_MLSCATLOC = 9,
+	NLBL_CIPSOV4_A_MLSCATREM = 10,
+	NLBL_CIPSOV4_A_MLSCAT = 11,
+	NLBL_CIPSOV4_A_MLSCATLST = 12,
+	__NLBL_CIPSOV4_A_MAX = 13,
+};
+
+struct netlbl_domaddr_map {
+	struct list_head list4;
+	struct list_head list6;
+};
+
+struct calipso_doi;
+
+struct netlbl_dommap_def {
+	u32 type;
+	union {
+		struct netlbl_domaddr_map *addrsel;
+		struct cipso_v4_doi *cipso;
+		struct calipso_doi *calipso;
+	};
+};
+
+struct netlbl_dom_map {
+	char *domain;
+	u16 family;
+	struct netlbl_dommap_def def;
+	u32 valid;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct netlbl_cipsov4_doiwalk_arg {
+	struct netlink_callback *nl_cb;
+	struct sk_buff *skb;
+	u32 seq;
+};
+
+struct netlbl_domhsh_walk_arg {
+	struct netlbl_audit *audit_info;
+	u32 doi;
+};
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+};
+
+struct ncsi_dev {
+	int state;
+	int link_up;
+	struct net_device *dev;
+	void (*handler)(struct ncsi_dev *);
+};
+
+enum {
+	NCSI_CAP_BASE = 0,
+	NCSI_CAP_GENERIC = 0,
+	NCSI_CAP_BC = 1,
+	NCSI_CAP_MC = 2,
+	NCSI_CAP_BUFFER = 3,
+	NCSI_CAP_AEN = 4,
+	NCSI_CAP_VLAN = 5,
+	NCSI_CAP_MAX = 6,
+};
+
+enum {
+	NCSI_MODE_BASE = 0,
+	NCSI_MODE_ENABLE = 0,
+	NCSI_MODE_TX_ENABLE = 1,
+	NCSI_MODE_LINK = 2,
+	NCSI_MODE_VLAN = 3,
+	NCSI_MODE_BC = 4,
+	NCSI_MODE_MC = 5,
+	NCSI_MODE_AEN = 6,
+	NCSI_MODE_FC = 7,
+	NCSI_MODE_MAX = 8,
+};
+
+struct ncsi_channel_version {
+	u32 version;
+	u32 alpha2;
+	u8 fw_name[12];
+	u32 fw_version;
+	u16 pci_ids[4];
+	u32 mf_id;
+};
+
+struct ncsi_channel_cap {
+	u32 index;
+	u32 cap;
+};
+
+struct ncsi_channel_mode {
+	u32 index;
+	u32 enable;
+	u32 size;
+	u32 data[8];
+};
+
+struct ncsi_channel_mac_filter {
+	u8 n_uc;
+	u8 n_mc;
+	u8 n_mixed;
+	u64 bitmap;
+	unsigned char *addrs;
+};
+
+struct ncsi_channel_vlan_filter {
+	u8 n_vids;
+	u64 bitmap;
+	u16 *vids;
+};
+
+struct ncsi_channel_stats {
+	u32 hnc_cnt_hi;
+	u32 hnc_cnt_lo;
+	u32 hnc_rx_bytes;
+	u32 hnc_tx_bytes;
+	u32 hnc_rx_uc_pkts;
+	u32 hnc_rx_mc_pkts;
+	u32 hnc_rx_bc_pkts;
+	u32 hnc_tx_uc_pkts;
+	u32 hnc_tx_mc_pkts;
+	u32 hnc_tx_bc_pkts;
+	u32 hnc_fcs_err;
+	u32 hnc_align_err;
+	u32 hnc_false_carrier;
+	u32 hnc_runt_pkts;
+	u32 hnc_jabber_pkts;
+	u32 hnc_rx_pause_xon;
+	u32 hnc_rx_pause_xoff;
+	u32 hnc_tx_pause_xon;
+	u32 hnc_tx_pause_xoff;
+	u32 hnc_tx_s_collision;
+	u32 hnc_tx_m_collision;
+	u32 hnc_l_collision;
+	u32 hnc_e_collision;
+	u32 hnc_rx_ctl_frames;
+	u32 hnc_rx_64_frames;
+	u32 hnc_rx_127_frames;
+	u32 hnc_rx_255_frames;
+	u32 hnc_rx_511_frames;
+	u32 hnc_rx_1023_frames;
+	u32 hnc_rx_1522_frames;
+	u32 hnc_rx_9022_frames;
+	u32 hnc_tx_64_frames;
+	u32 hnc_tx_127_frames;
+	u32 hnc_tx_255_frames;
+	u32 hnc_tx_511_frames;
+	u32 hnc_tx_1023_frames;
+	u32 hnc_tx_1522_frames;
+	u32 hnc_tx_9022_frames;
+	u32 hnc_rx_valid_bytes;
+	u32 hnc_rx_runt_pkts;
+	u32 hnc_rx_jabber_pkts;
+	u32 ncsi_rx_cmds;
+	u32 ncsi_dropped_cmds;
+	u32 ncsi_cmd_type_errs;
+	u32 ncsi_cmd_csum_errs;
+	u32 ncsi_rx_pkts;
+	u32 ncsi_tx_pkts;
+	u32 ncsi_tx_aen_pkts;
+	u32 pt_tx_pkts;
+	u32 pt_tx_dropped;
+	u32 pt_tx_channel_err;
+	u32 pt_tx_us_err;
+	u32 pt_rx_pkts;
+	u32 pt_rx_dropped;
+	u32 pt_rx_channel_err;
+	u32 pt_rx_us_err;
+	u32 pt_rx_os_err;
+};
+
+struct ncsi_package;
+
+struct ncsi_channel {
+	unsigned char id;
+	int state;
+	bool reconfigure_needed;
+	spinlock_t lock;
+	struct ncsi_package *package;
+	struct ncsi_channel_version version;
+	struct ncsi_channel_cap caps[6];
+	struct ncsi_channel_mode modes[8];
+	struct ncsi_channel_mac_filter mac_filter;
+	struct ncsi_channel_vlan_filter vlan_filter;
+	struct ncsi_channel_stats stats;
+	struct {
+		struct timer_list timer;
+		bool enabled;
+		unsigned int state;
+	} monitor;
+	struct list_head node;
+	struct list_head link;
+};
+
+struct ncsi_dev_priv;
+
+struct ncsi_package {
+	unsigned char id;
+	unsigned char uuid[16];
+	struct ncsi_dev_priv *ndp;
+	spinlock_t lock;
+	unsigned int channel_num;
+	struct list_head channels;
+	struct list_head node;
+	bool multi_channel;
+	u32 channel_whitelist;
+	struct ncsi_channel *preferred_channel;
+};
+
+struct ncsi_request {
+	unsigned char id;
+	bool used;
+	unsigned int flags;
+	struct ncsi_dev_priv *ndp;
+	struct sk_buff *cmd;
+	struct sk_buff *rsp;
+	struct timer_list timer;
+	bool enabled;
+	u32 snd_seq;
+	u32 snd_portid;
+	struct nlmsghdr nlhdr;
+};
+
+struct ncsi_dev_priv {
+	struct ncsi_dev ndev;
+	unsigned int flags;
+	unsigned int gma_flag;
+	spinlock_t lock;
+	unsigned int package_probe_id;
+	unsigned int package_num;
+	struct list_head packages;
+	struct ncsi_channel *hot_channel;
+	struct ncsi_request requests[256];
+	unsigned int request_id;
+	unsigned int pending_req_num;
+	struct ncsi_package *active_package;
+	struct ncsi_channel *active_channel;
+	struct list_head channel_queue;
+	struct work_struct work;
+	struct packet_type ptype;
+	struct list_head node;
+	struct list_head vlan_vids;
+	bool multi_package;
+	bool mlx_multi_host;
+	u32 package_whitelist;
+};
+
+struct ncsi_pkt_hdr {
+	unsigned char mc_id;
+	unsigned char revision;
+	unsigned char reserved;
+	unsigned char id;
+	unsigned char type;
+	unsigned char channel;
+	__be16 length;
+	__be32 reserved1[2];
+};
+
+struct ncsi_aen_pkt_hdr {
+	struct ncsi_pkt_hdr common;
+	unsigned char reserved2[3];
+	unsigned char type;
+};
+
+struct ncsi_aen_lsc_pkt {
+	struct ncsi_aen_pkt_hdr aen;
+	__be32 status;
+	__be32 oem_status;
+	__be32 checksum;
+	unsigned char pad[14];
+};
+
+struct ncsi_aen_hncdsc_pkt {
+	struct ncsi_aen_pkt_hdr aen;
+	__be32 status;
+	__be32 checksum;
+	unsigned char pad[18];
+};
+
+struct ncsi_aen_handler {
+	unsigned char type;
+	int payload;
+	int (*handler)(struct ncsi_dev_priv *, struct ncsi_aen_pkt_hdr *);
+};
+
+struct mptcp_mib {
+	long unsigned int mibs[52];
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+	long: 64;
+};
+
+struct mptcp_ext {
+	union {
+		u64 data_ack;
+		u32 data_ack32;
+	};
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	__sum16 csum;
+	u8 use_map: 1;
+	u8 dsn64: 1;
+	u8 data_fin: 1;
+	u8 use_ack: 1;
+	u8 ack64: 1;
+	u8 mpc_map: 1;
+	u8 frozen: 1;
+	u8 reset_transient: 1;
+	u8 reset_reason: 4;
+	u8 csum_reqd: 1;
+	u8 infinite_map: 1;
+};
+
+struct mptcp_rm_list {
+	u8 ids[8];
+	u8 nr;
+};
+
+struct mptcp_addr_info {
+	u8 id;
+	sa_family_t family;
+	__be16 port;
+	union {
+		struct in_addr addr;
+		struct in6_addr addr6;
+	};
+};
+
+struct mptcp_options_received {
+	u64 sndr_key;
+	u64 rcvr_key;
+	u64 data_ack;
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	__sum16 csum;
+	u16 suboptions;
+	u32 token;
+	u32 nonce;
+	u16 use_map: 1;
+	u16 dsn64: 1;
+	u16 data_fin: 1;
+	u16 use_ack: 1;
+	u16 ack64: 1;
+	u16 mpc_map: 1;
+	u16 reset_reason: 4;
+	u16 reset_transient: 1;
+	u16 echo: 1;
+	u16 backup: 1;
+	u16 deny_join_id0: 1;
+	u16 __unused: 2;
+	u8 join_id;
+	u64 thmac;
+	u8 hmac[20];
+	struct mptcp_addr_info addr;
+	struct mptcp_rm_list rm_list;
+	u64 ahmac;
+	u64 fail_seq;
+};
+
+enum mptcp_pm_type {
+	MPTCP_PM_TYPE_KERNEL = 0,
+	MPTCP_PM_TYPE_USERSPACE = 1,
+	__MPTCP_PM_TYPE_NR = 2,
+	__MPTCP_PM_TYPE_MAX = 1,
+};
+
+struct mptcp_pm_data {
+	struct mptcp_addr_info local;
+	struct mptcp_addr_info remote;
+	struct list_head anno_list;
+	struct list_head userspace_pm_local_addr_list;
+	spinlock_t lock;
+	u8 addr_signal;
+	bool server_side;
+	bool work_pending;
+	bool accept_addr;
+	bool accept_subflow;
+	bool remote_deny_join_id0;
+	u8 add_addr_signaled;
+	u8 add_addr_accepted;
+	u8 local_addr_used;
+	u8 pm_type;
+	u8 subflows;
+	u8 status;
+	long unsigned int id_avail_bitmap[4];
+	struct mptcp_rm_list rm_list_tx;
+	struct mptcp_rm_list rm_list_rx;
+};
+
+struct mptcp_data_frag {
+	struct list_head list;
+	u64 data_seq;
+	u16 data_len;
+	u16 offset;
+	u16 overhead;
+	u16 already_sent;
+	struct page *page;
+};
+
+struct mptcp_sock {
+	struct inet_connection_sock sk;
+	u64 local_key;
+	u64 remote_key;
+	u64 write_seq;
+	u64 snd_nxt;
+	u64 ack_seq;
+	atomic64_t rcv_wnd_sent;
+	u64 rcv_data_fin_seq;
+	int rmem_fwd_alloc;
+	struct sock *last_snd;
+	int snd_burst;
+	int old_wspace;
+	u64 recovery_snd_nxt;
+	u64 snd_una;
+	u64 wnd_end;
+	long unsigned int timer_ival;
+	u32 token;
+	int rmem_released;
+	long unsigned int flags;
+	long unsigned int cb_flags;
+	long unsigned int push_pending;
+	bool recovery;
+	bool can_ack;
+	bool fully_established;
+	bool rcv_data_fin;
+	bool snd_data_fin_enable;
+	bool rcv_fastclose;
+	bool use_64bit_ack;
+	bool csum_enabled;
+	bool allow_infinite_fallback;
+	u8 mpc_endpoint_id;
+	u8 recvmsg_inq: 1;
+	u8 cork: 1;
+	u8 nodelay: 1;
+	struct work_struct work;
+	struct sk_buff *ooo_last_skb;
+	struct rb_root out_of_order_queue;
+	struct sk_buff_head receive_queue;
+	struct list_head conn_list;
+	struct list_head rtx_queue;
+	struct mptcp_data_frag *first_pending;
+	struct list_head join_list;
+	struct socket *subflow;
+	struct sock *first;
+	struct mptcp_pm_data pm;
+	struct {
+		u32 space;
+		u32 copied;
+		u64 time;
+		u64 rtt_us;
+	} rcvq_space;
+	u32 setsockopt_seq;
+	char ca_name[16];
+	struct mptcp_sock *dl_next;
+};
+
+struct mptcp_subflow_request_sock {
+	struct tcp_request_sock sk;
+	u16 mp_capable: 1;
+	u16 mp_join: 1;
+	u16 backup: 1;
+	u16 csum_reqd: 1;
+	u16 allow_join_id0: 1;
+	u8 local_id;
+	u8 remote_id;
+	u64 local_key;
+	u64 idsn;
+	u32 token;
+	u32 ssn_offset;
+	u64 thmac;
+	u32 local_nonce;
+	u32 remote_nonce;
+	struct mptcp_sock *msk;
+	struct hlist_nulls_node token_node;
+};
+
+enum mptcp_data_avail {
+	MPTCP_SUBFLOW_NODATA = 0,
+	MPTCP_SUBFLOW_DATA_AVAIL = 1,
+};
+
+struct mptcp_subflow_context {
+	struct list_head node;
+	union {
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 can_ack: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			enum mptcp_data_avail data_avail;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			u8 hmac[20];
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+			long unsigned int fail_tout;
+		};
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 can_ack: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			enum mptcp_data_avail data_avail;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			u8 hmac[20];
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+			long unsigned int fail_tout;
+		} reset;
+	};
+	struct list_head delegated_node;
+	u32 setsockopt_seq;
+	u32 stale_rcv_tstamp;
+	struct sock *tcp_sock;
+	struct sock *conn;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	void (*tcp_state_change)(struct sock *);
+	void (*tcp_error_report)(struct sock *);
+	struct callback_head rcu;
+};
+
+enum linux_mptcp_mib_field {
+	MPTCP_MIB_NUM = 0,
+	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
+	MPTCP_MIB_MPCAPABLEACTIVE = 2,
+	MPTCP_MIB_MPCAPABLEACTIVEACK = 3,
+	MPTCP_MIB_MPCAPABLEPASSIVEACK = 4,
+	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 5,
+	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 6,
+	MPTCP_MIB_TOKENFALLBACKINIT = 7,
+	MPTCP_MIB_RETRANSSEGS = 8,
+	MPTCP_MIB_JOINNOTOKEN = 9,
+	MPTCP_MIB_JOINSYNRX = 10,
+	MPTCP_MIB_JOINSYNACKRX = 11,
+	MPTCP_MIB_JOINSYNACKMAC = 12,
+	MPTCP_MIB_JOINACKRX = 13,
+	MPTCP_MIB_JOINACKMAC = 14,
+	MPTCP_MIB_DSSNOMATCH = 15,
+	MPTCP_MIB_INFINITEMAPTX = 16,
+	MPTCP_MIB_INFINITEMAPRX = 17,
+	MPTCP_MIB_DSSTCPMISMATCH = 18,
+	MPTCP_MIB_DATACSUMERR = 19,
+	MPTCP_MIB_OFOQUEUETAIL = 20,
+	MPTCP_MIB_OFOQUEUE = 21,
+	MPTCP_MIB_OFOMERGE = 22,
+	MPTCP_MIB_NODSSWINDOW = 23,
+	MPTCP_MIB_DUPDATA = 24,
+	MPTCP_MIB_ADDADDR = 25,
+	MPTCP_MIB_ECHOADD = 26,
+	MPTCP_MIB_PORTADD = 27,
+	MPTCP_MIB_ADDADDRDROP = 28,
+	MPTCP_MIB_JOINPORTSYNRX = 29,
+	MPTCP_MIB_JOINPORTSYNACKRX = 30,
+	MPTCP_MIB_JOINPORTACKRX = 31,
+	MPTCP_MIB_MISMATCHPORTSYNRX = 32,
+	MPTCP_MIB_MISMATCHPORTACKRX = 33,
+	MPTCP_MIB_RMADDR = 34,
+	MPTCP_MIB_RMADDRDROP = 35,
+	MPTCP_MIB_RMSUBFLOW = 36,
+	MPTCP_MIB_MPPRIOTX = 37,
+	MPTCP_MIB_MPPRIORX = 38,
+	MPTCP_MIB_MPFAILTX = 39,
+	MPTCP_MIB_MPFAILRX = 40,
+	MPTCP_MIB_MPFASTCLOSETX = 41,
+	MPTCP_MIB_MPFASTCLOSERX = 42,
+	MPTCP_MIB_MPRSTTX = 43,
+	MPTCP_MIB_MPRSTRX = 44,
+	MPTCP_MIB_RCVPRUNED = 45,
+	MPTCP_MIB_SUBFLOWSTALE = 46,
+	MPTCP_MIB_SUBFLOWRECOVER = 47,
+	MPTCP_MIB_SNDWNDSHARED = 48,
+	MPTCP_MIB_RCVWNDSHARED = 49,
+	MPTCP_MIB_RCVWNDCONFLICTUPDATE = 50,
+	MPTCP_MIB_RCVWNDCONFLICT = 51,
+	__MPTCP_MIB_MAX = 52,
+};
+
+enum mapping_status {
+	MAPPING_OK = 0,
+	MAPPING_INVALID = 1,
+	MAPPING_EMPTY = 2,
+	MAPPING_DATA_FIN = 3,
+	MAPPING_DUMMY = 4,
+	MAPPING_BAD_CSUM = 5,
+};
+
+struct join_entry {
+	u32 token;
+	u32 remote_nonce;
+	u32 local_nonce;
+	u8 join_id;
+	u8 local_id;
+	u8 backup;
+	u8 valid;
+};
+
+struct mctp_netdev_ops;
+
+struct mctp_dev {
+	struct net_device *dev;
+	refcount_t refs;
+	unsigned int net;
+	const struct mctp_netdev_ops *ops;
+	u8 *addrs;
+	size_t num_addrs;
+	spinlock_t addrs_lock;
+	struct callback_head rcu;
+};
+
+typedef __u8 mctp_eid_t;
+
+struct mctp_sk_key {
+	mctp_eid_t peer_addr;
+	mctp_eid_t local_addr;
+	__u8 tag;
+	struct sock *sk;
+	struct hlist_node hlist;
+	struct hlist_node sklist;
+	spinlock_t lock;
+	refcount_t refs;
+	struct sk_buff *reasm_head;
+	struct sk_buff **reasm_tailp;
+	bool reasm_dead;
+	u8 last_seq;
+	bool valid;
+	long unsigned int expiry;
+	long unsigned int dev_flow_state;
+	struct mctp_dev *dev;
+	bool manual_alloc;
+};
+
+enum mctp_neigh_source {
+	MCTP_NEIGH_STATIC = 0,
+	MCTP_NEIGH_DISCOVER = 1,
+};
+
+struct mctp_neigh {
+	struct mctp_dev *dev;
+	mctp_eid_t eid;
+	enum mctp_neigh_source source;
+	unsigned char ha[32];
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct mctp_netdev_ops {
+	void (*release_flow)(struct mctp_dev *, struct mctp_sk_key *);
+};
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct user_sve_header {
+	__u32 size;
+	__u32 max_size;
+	__u16 vl;
+	__u16 max_vl;
+	__u16 flags;
+	__u16 __reserved;
+};
+
+struct user_pac_mask {
+	__u64 data_mask;
+	__u64 insn_mask;
+};
+
+struct user_pac_address_keys {
+	__int128 unsigned apiakey;
+	__int128 unsigned apibkey;
+	__int128 unsigned apdakey;
+	__int128 unsigned apdbkey;
+};
+
+struct user_pac_generic_keys {
+	__int128 unsigned apgakey;
+};
+
+struct user_za_header {
+	__u32 size;
+	__u32 max_size;
+	__u16 vl;
+	__u16 max_vl;
+	__u16 flags;
+	__u16 __reserved;
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
+
+enum {
+	HW_BREAKPOINT_LEN_1 = 1,
+	HW_BREAKPOINT_LEN_2 = 2,
+	HW_BREAKPOINT_LEN_3 = 3,
+	HW_BREAKPOINT_LEN_4 = 4,
+	HW_BREAKPOINT_LEN_5 = 5,
+	HW_BREAKPOINT_LEN_6 = 6,
+	HW_BREAKPOINT_LEN_7 = 7,
+	HW_BREAKPOINT_LEN_8 = 8,
+};
+
+enum {
+	HW_BREAKPOINT_EMPTY = 0,
+	HW_BREAKPOINT_R = 1,
+	HW_BREAKPOINT_W = 2,
+	HW_BREAKPOINT_RW = 3,
+	HW_BREAKPOINT_X = 4,
+	HW_BREAKPOINT_INVALID = 7,
+};
+
+enum bp_type_idx {
+	TYPE_INST = 0,
+	TYPE_DATA = 1,
+	TYPE_MAX = 2,
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+struct user_regset;
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long int id;
+	long unsigned int args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long int id;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+enum aarch64_regset {
+	REGSET_GPR = 0,
+	REGSET_FPR = 1,
+	REGSET_TLS = 2,
+	REGSET_HW_BREAK = 3,
+	REGSET_HW_WATCH = 4,
+	REGSET_SYSTEM_CALL = 5,
+	REGSET_SVE = 6,
+	REGSET_SSVE = 7,
+	REGSET_ZA = 8,
+	REGSET_PAC_MASK = 9,
+	REGSET_PAC_ENABLED_KEYS = 10,
+	REGSET_PACA_KEYS = 11,
+	REGSET_PACG_KEYS = 12,
+	REGSET_TAGGED_ADDR_CTRL = 13,
+};
+
+enum compat_regset {
+	REGSET_COMPAT_GPR = 0,
+	REGSET_COMPAT_VFP = 1,
+};
+
+enum ptrace_syscall_dir {
+	PTRACE_SYSCALL_ENTER = 0,
+	PTRACE_SYSCALL_EXIT = 1,
+};
+
+struct unwind_state {
+	long unsigned int fp;
+	long unsigned int pc;
+	long unsigned int stacks_done[1];
+	long unsigned int prev_fp;
+	enum stack_type prev_type;
+	struct llist_node *kr_cur;
+	struct task_struct *task;
+};
+
+typedef bool (*stack_trace_translate_fp_fn)(long unsigned int *, enum stack_type);
+
+typedef bool (*on_accessible_stack_fn)(const struct task_struct *, long unsigned int, long unsigned int, struct stack_info *);
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+enum die_val {
+	DIE_UNUSED = 0,
+	DIE_OOPS = 1,
+};
+
+struct sys64_hook {
+	long unsigned int esr_mask;
+	long unsigned int esr_val;
+	void (*handler)(long unsigned int, struct pt_regs *);
+};
+
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+};
+
+enum acpi_madt_type {
+	ACPI_MADT_TYPE_LOCAL_APIC = 0,
+	ACPI_MADT_TYPE_IO_APIC = 1,
+	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
+	ACPI_MADT_TYPE_NMI_SOURCE = 3,
+	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
+	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
+	ACPI_MADT_TYPE_IO_SAPIC = 6,
+	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
+	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
+	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
+	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
+	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
+	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
+	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
+	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
+	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
+	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
+	ACPI_MADT_TYPE_RESERVED = 17,
+	ACPI_MADT_TYPE_OEM_RESERVED = 128,
+};
+
+struct acpi_madt_generic_interrupt {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 cpu_interface_number;
+	u32 uid;
+	u32 flags;
+	u32 parking_version;
+	u32 performance_interrupt;
+	u64 parked_address;
+	u64 base_address;
+	u64 gicv_base_address;
+	u64 gich_base_address;
+	u32 vgic_interrupt;
+	u64 gicr_base_address;
+	u64 arm_mpidr;
+	u8 efficiency_class;
+	u8 reserved2[1];
+	u16 spe_interrupt;
+} __attribute__((packed));
+
+struct cpu_operations {
+	const char *name;
+	int (*cpu_init)(unsigned int);
+	int (*cpu_prepare)(unsigned int);
+	int (*cpu_boot)(unsigned int);
+	void (*cpu_postboot)();
+	bool (*cpu_can_disable)(unsigned int);
+	int (*cpu_disable)(unsigned int);
+	void (*cpu_die)(unsigned int);
+	int (*cpu_kill)(unsigned int);
+};
+
+struct trace_event_raw_ipi_raise {
+	struct trace_entry ent;
+	u32 __data_loc_target_cpus;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_handler {
+	struct trace_entry ent;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ipi_raise {
+	u32 target_cpus;
+};
+
+struct trace_event_data_offsets_ipi_handler {};
+
+typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
+
+typedef void (*btf_trace_ipi_entry)(void *, const char *);
+
+typedef void (*btf_trace_ipi_exit)(void *, const char *);
+
+enum ipi_msg_type {
+	IPI_RESCHEDULE = 0,
+	IPI_CALL_FUNC = 1,
+	IPI_CPU_STOP = 2,
+	IPI_CPU_CRASH_STOP = 3,
+	IPI_TIMER = 4,
+	IPI_IRQ_WORK = 5,
+	IPI_WAKEUP = 6,
+	NR_IPI = 7,
+};
+
+struct psci_operations {
+	u32 (*get_version)();
+	int (*cpu_suspend)(u32, long unsigned int);
+	int (*cpu_off)(u32);
+	int (*cpu_on)(long unsigned int, long unsigned int);
+	int (*migrate)(long unsigned int);
+	int (*affinity_info)(long unsigned int, long unsigned int);
+	int (*migrate_info_type)();
+};
 
 typedef u64 phys_cpuid_t;
 
-struct thermal_cooling_device_ops;
-
-struct thermal_cooling_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct device_node *np;
-	void *devdata;
-	void *stats;
-	const struct thermal_cooling_device_ops *ops;
-	bool updated;
-	struct mutex lock;
-	struct list_head thermal_instances;
-	struct list_head node;
-};
-
-struct thermal_cooling_device_ops {
-	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
-	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
-	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
-	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
-};
-
 struct acpi_processor_cx {
 	u8 valid;
 	u8 type;
@@ -16323,871 +66360,6 @@
 	struct freq_qos_request thermal_req;
 };
 
-enum jump_label_type {
-	JUMP_LABEL_NOP = 0,
-	JUMP_LABEL_JMP = 1,
-};
-
-struct die_args {
-	struct pt_regs *regs;
-	const char *str;
-	long int err;
-	int trapnr;
-	int signr;
-};
-
-enum kgdb_bptype {
-	BP_BREAKPOINT = 0,
-	BP_HARDWARE_BREAKPOINT = 1,
-	BP_WRITE_WATCHPOINT = 2,
-	BP_READ_WATCHPOINT = 3,
-	BP_ACCESS_WATCHPOINT = 4,
-	BP_POKE_BREAKPOINT = 5,
-};
-
-enum kgdb_bpstate {
-	BP_UNDEFINED = 0,
-	BP_REMOVED = 1,
-	BP_SET = 2,
-	BP_ACTIVE = 3,
-};
-
-struct kgdb_bkpt {
-	long unsigned int bpt_addr;
-	unsigned char saved_instr[4];
-	enum kgdb_bptype type;
-	enum kgdb_bpstate state;
-};
-
-struct dbg_reg_def_t {
-	char *name;
-	int size;
-	int offset;
-};
-
-struct kgdb_arch {
-	unsigned char gdb_bpt_instr[4];
-	long unsigned int flags;
-	int (*set_breakpoint)(long unsigned int, char *);
-	int (*remove_breakpoint)(long unsigned int, char *);
-	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	void (*disable_hw_break)(struct pt_regs *);
-	void (*remove_all_hw_break)();
-	void (*correct_hw_break)();
-	void (*enable_nmi)(bool);
-};
-
-struct screen_info {
-	__u8 orig_x;
-	__u8 orig_y;
-	__u16 ext_mem_k;
-	__u16 orig_video_page;
-	__u8 orig_video_mode;
-	__u8 orig_video_cols;
-	__u8 flags;
-	__u8 unused2;
-	__u16 orig_video_ega_bx;
-	__u16 unused3;
-	__u8 orig_video_lines;
-	__u8 orig_video_isVGA;
-	__u16 orig_video_points;
-	__u16 lfb_width;
-	__u16 lfb_height;
-	__u16 lfb_depth;
-	__u32 lfb_base;
-	__u32 lfb_size;
-	__u16 cl_magic;
-	__u16 cl_offset;
-	__u16 lfb_linelength;
-	__u8 red_size;
-	__u8 red_pos;
-	__u8 green_size;
-	__u8 green_pos;
-	__u8 blue_size;
-	__u8 blue_pos;
-	__u8 rsvd_size;
-	__u8 rsvd_pos;
-	__u16 vesapm_seg;
-	__u16 vesapm_off;
-	__u16 pages;
-	__u16 vesa_attributes;
-	__u32 capabilities;
-	__u32 ext_lfb_base;
-	__u8 _reserved[2];
-} __attribute__((packed));
-
-struct pci_device_id {
-	__u32 vendor;
-	__u32 device;
-	__u32 subvendor;
-	__u32 subdevice;
-	__u32 class;
-	__u32 class_mask;
-	kernel_ulong_t driver_data;
-};
-
-struct resource_entry {
-	struct list_head node;
-	struct resource *res;
-	resource_size_t offset;
-	struct resource __res;
-};
-
-typedef u64 acpi_io_address;
-
-typedef u32 acpi_object_type;
-
-union acpi_object {
-	acpi_object_type type;
-	struct {
-		acpi_object_type type;
-		u64 value;
-	} integer;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		char *pointer;
-	} string;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		u8 *pointer;
-	} buffer;
-	struct {
-		acpi_object_type type;
-		u32 count;
-		union acpi_object *elements;
-	} package;
-	struct {
-		acpi_object_type type;
-		acpi_object_type actual_type;
-		acpi_handle handle;
-	} reference;
-	struct {
-		acpi_object_type type;
-		u32 proc_id;
-		acpi_io_address pblk_address;
-		u32 pblk_length;
-	} processor;
-	struct {
-		acpi_object_type type;
-		u32 system_level;
-		u32 resource_order;
-	} power_resource;
-};
-
-struct acpi_device;
-
-struct acpi_hotplug_profile {
-	struct kobject kobj;
-	int (*scan_dependent)(struct acpi_device *);
-	void (*notify_online)(struct acpi_device *);
-	bool enabled: 1;
-	bool demand_offline: 1;
-};
-
-struct acpi_device_status {
-	u32 present: 1;
-	u32 enabled: 1;
-	u32 show_in_ui: 1;
-	u32 functional: 1;
-	u32 battery_present: 1;
-	u32 reserved: 27;
-};
-
-struct acpi_device_flags {
-	u32 dynamic_status: 1;
-	u32 removable: 1;
-	u32 ejectable: 1;
-	u32 power_manageable: 1;
-	u32 match_driver: 1;
-	u32 initialized: 1;
-	u32 visited: 1;
-	u32 hotplug_notify: 1;
-	u32 is_dock_station: 1;
-	u32 of_compatible_ok: 1;
-	u32 coherent_dma: 1;
-	u32 cca_seen: 1;
-	u32 enumeration_by_parent: 1;
-	u32 reserved: 19;
-};
-
-typedef char acpi_bus_id[8];
-
-struct acpi_pnp_type {
-	u32 hardware_id: 1;
-	u32 bus_address: 1;
-	u32 platform_id: 1;
-	u32 reserved: 29;
-};
-
-typedef u64 acpi_bus_address;
-
-typedef char acpi_device_name[40];
-
-typedef char acpi_device_class[20];
-
-struct acpi_device_pnp {
-	acpi_bus_id bus_id;
-	struct acpi_pnp_type type;
-	acpi_bus_address bus_address;
-	char *unique_id;
-	struct list_head ids;
-	acpi_device_name device_name;
-	acpi_device_class device_class;
-	union acpi_object *str_obj;
-};
-
-struct acpi_device_power_flags {
-	u32 explicit_get: 1;
-	u32 power_resources: 1;
-	u32 inrush_current: 1;
-	u32 power_removed: 1;
-	u32 ignore_parent: 1;
-	u32 dsw_present: 1;
-	u32 reserved: 26;
-};
-
-struct acpi_device_power_state {
-	struct {
-		u8 valid: 1;
-		u8 explicit_set: 1;
-		u8 reserved: 6;
-	} flags;
-	int power;
-	int latency;
-	struct list_head resources;
-};
-
-struct acpi_device_power {
-	int state;
-	struct acpi_device_power_flags flags;
-	struct acpi_device_power_state states[5];
-};
-
-struct acpi_device_wakeup_flags {
-	u8 valid: 1;
-	u8 notifier_present: 1;
-};
-
-struct acpi_device_wakeup_context {
-	void (*func)(struct acpi_device_wakeup_context *);
-	struct device *dev;
-};
-
-struct acpi_device_wakeup {
-	acpi_handle gpe_device;
-	u64 gpe_number;
-	u64 sleep_state;
-	struct list_head resources;
-	struct acpi_device_wakeup_flags flags;
-	struct acpi_device_wakeup_context context;
-	struct wakeup_source *ws;
-	int prepare_count;
-	int enable_count;
-};
-
-struct acpi_device_perf_flags {
-	u8 reserved: 8;
-};
-
-struct acpi_device_perf_state;
-
-struct acpi_device_perf {
-	int state;
-	struct acpi_device_perf_flags flags;
-	int state_count;
-	struct acpi_device_perf_state *states;
-};
-
-struct acpi_device_dir {
-	struct proc_dir_entry *entry;
-};
-
-struct acpi_device_data {
-	const union acpi_object *pointer;
-	struct list_head properties;
-	const union acpi_object *of_compatible;
-	struct list_head subnodes;
-};
-
-struct acpi_scan_handler;
-
-struct acpi_hotplug_context;
-
-struct acpi_driver;
-
-struct acpi_gpio_mapping;
-
-struct acpi_device {
-	int device_type;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct acpi_device *parent;
-	struct list_head children;
-	struct list_head node;
-	struct list_head wakeup_list;
-	struct list_head del_list;
-	struct acpi_device_status status;
-	struct acpi_device_flags flags;
-	struct acpi_device_pnp pnp;
-	struct acpi_device_power power;
-	struct acpi_device_wakeup wakeup;
-	struct acpi_device_perf performance;
-	struct acpi_device_dir dir;
-	struct acpi_device_data data;
-	struct acpi_scan_handler *handler;
-	struct acpi_hotplug_context *hp;
-	struct acpi_driver *driver;
-	const struct acpi_gpio_mapping *driver_gpios;
-	void *driver_data;
-	struct device dev;
-	unsigned int physical_node_count;
-	unsigned int dep_unmet;
-	struct list_head physical_node_list;
-	struct mutex physical_node_lock;
-	void (*remove)(struct acpi_device *);
-};
-
-struct acpi_scan_handler {
-	const struct acpi_device_id *ids;
-	struct list_head list_node;
-	bool (*match)(const char *, const struct acpi_device_id **);
-	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
-	void (*detach)(struct acpi_device *);
-	void (*bind)(struct device *);
-	void (*unbind)(struct device *);
-	struct acpi_hotplug_profile hotplug;
-};
-
-struct acpi_hotplug_context {
-	struct acpi_device *self;
-	int (*notify)(struct acpi_device *, u32);
-	void (*uevent)(struct acpi_device *, u32);
-	void (*fixup)(struct acpi_device *);
-};
-
-typedef int (*acpi_op_add)(struct acpi_device *);
-
-typedef int (*acpi_op_remove)(struct acpi_device *);
-
-typedef void (*acpi_op_notify)(struct acpi_device *, u32);
-
-struct acpi_device_ops {
-	acpi_op_add add;
-	acpi_op_remove remove;
-	acpi_op_notify notify;
-};
-
-struct acpi_driver {
-	char name[80];
-	char class[80];
-	const struct acpi_device_id *ids;
-	unsigned int flags;
-	struct acpi_device_ops ops;
-	struct device_driver drv;
-	struct module *owner;
-};
-
-struct acpi_device_perf_state {
-	struct {
-		u8 valid: 1;
-		u8 reserved: 7;
-	} flags;
-	u8 power;
-	u8 performance;
-	int latency;
-};
-
-struct acpi_gpio_params;
-
-struct acpi_gpio_mapping {
-	const char *name;
-	const struct acpi_gpio_params *data;
-	unsigned int size;
-	unsigned int quirks;
-};
-
-struct pci_bus;
-
-struct acpi_pci_root {
-	struct acpi_device *device;
-	struct pci_bus *bus;
-	u16 segment;
-	struct resource secondary;
-	u32 osc_support_set;
-	u32 osc_control_set;
-	phys_addr_t mcfg_addr;
-};
-
-typedef short unsigned int pci_bus_flags_t;
-
-struct pci_dev;
-
-struct pci_ops;
-
-struct msi_controller;
-
-struct pci_bus {
-	struct list_head node;
-	struct pci_bus *parent;
-	struct list_head children;
-	struct list_head devices;
-	struct pci_dev *self;
-	struct list_head slots;
-	struct resource *resource[4];
-	struct list_head resources;
-	struct resource busn_res;
-	struct pci_ops *ops;
-	struct msi_controller *msi;
-	void *sysdata;
-	struct proc_dir_entry *procdir;
-	unsigned char number;
-	unsigned char primary;
-	unsigned char max_bus_speed;
-	unsigned char cur_bus_speed;
-	int domain_nr;
-	char name[48];
-	short unsigned int bridge_ctl;
-	pci_bus_flags_t bus_flags;
-	struct device *bridge;
-	struct device dev;
-	struct bin_attribute *legacy_io;
-	struct bin_attribute *legacy_mem;
-	unsigned int is_added: 1;
-};
-
-struct acpi_gpio_params {
-	unsigned int crs_entry_index;
-	unsigned int line_index;
-	bool active_low;
-};
-
-struct hotplug_slot;
-
-struct pci_slot {
-	struct pci_bus *bus;
-	struct list_head list;
-	struct hotplug_slot *hotplug;
-	unsigned char number;
-	struct kobject kobj;
-};
-
-enum {
-	PCI_STD_RESOURCES = 0,
-	PCI_STD_RESOURCE_END = 5,
-	PCI_ROM_RESOURCE = 6,
-	PCI_IOV_RESOURCES = 7,
-	PCI_IOV_RESOURCE_END = 12,
-	PCI_BRIDGE_RESOURCES = 13,
-	PCI_BRIDGE_RESOURCE_END = 16,
-	PCI_NUM_RESOURCES = 17,
-	DEVICE_COUNT_RESOURCE = 17,
-};
-
-typedef int pci_power_t;
-
-typedef unsigned int pci_channel_state_t;
-
-typedef unsigned int pcie_reset_state_t;
-
-typedef short unsigned int pci_dev_flags_t;
-
-struct aer_stats;
-
-struct pci_driver;
-
-struct pcie_link_state;
-
-struct pci_vpd;
-
-struct pci_sriov;
-
-struct pci_dev {
-	struct list_head bus_list;
-	struct pci_bus *bus;
-	struct pci_bus *subordinate;
-	void *sysdata;
-	struct proc_dir_entry *procent;
-	struct pci_slot *slot;
-	unsigned int devfn;
-	short unsigned int vendor;
-	short unsigned int device;
-	short unsigned int subsystem_vendor;
-	short unsigned int subsystem_device;
-	unsigned int class;
-	u8 revision;
-	u8 hdr_type;
-	u16 aer_cap;
-	struct aer_stats *aer_stats;
-	u8 pcie_cap;
-	u8 msi_cap;
-	u8 msix_cap;
-	u8 pcie_mpss: 3;
-	u8 rom_base_reg;
-	u8 pin;
-	u16 pcie_flags_reg;
-	long unsigned int *dma_alias_mask;
-	struct pci_driver *driver;
-	u64 dma_mask;
-	struct device_dma_parameters dma_parms;
-	pci_power_t current_state;
-	unsigned int imm_ready: 1;
-	u8 pm_cap;
-	unsigned int pme_support: 5;
-	unsigned int pme_poll: 1;
-	unsigned int d1_support: 1;
-	unsigned int d2_support: 1;
-	unsigned int no_d1d2: 1;
-	unsigned int no_d3cold: 1;
-	unsigned int bridge_d3: 1;
-	unsigned int d3cold_allowed: 1;
-	unsigned int mmio_always_on: 1;
-	unsigned int wakeup_prepared: 1;
-	unsigned int runtime_d3cold: 1;
-	unsigned int skip_bus_pm: 1;
-	unsigned int ignore_hotplug: 1;
-	unsigned int hotplug_user_indicators: 1;
-	unsigned int clear_retrain_link: 1;
-	unsigned int d3hot_delay;
-	unsigned int d3cold_delay;
-	struct pcie_link_state *link_state;
-	unsigned int ltr_path: 1;
-	int l1ss;
-	unsigned int eetlp_prefix_path: 1;
-	pci_channel_state_t error_state;
-	struct device dev;
-	int cfg_size;
-	unsigned int irq;
-	struct resource resource[17];
-	bool match_driver;
-	unsigned int transparent: 1;
-	unsigned int io_window: 1;
-	unsigned int pref_window: 1;
-	unsigned int pref_64_window: 1;
-	unsigned int multifunction: 1;
-	unsigned int is_busmaster: 1;
-	unsigned int no_msi: 1;
-	unsigned int no_64bit_msi: 1;
-	unsigned int block_cfg_access: 1;
-	unsigned int broken_parity_status: 1;
-	unsigned int irq_reroute_variant: 2;
-	unsigned int msi_enabled: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int ari_enabled: 1;
-	unsigned int ats_enabled: 1;
-	unsigned int pasid_enabled: 1;
-	unsigned int pri_enabled: 1;
-	unsigned int is_managed: 1;
-	unsigned int needs_freset: 1;
-	unsigned int state_saved: 1;
-	unsigned int is_physfn: 1;
-	unsigned int is_virtfn: 1;
-	unsigned int reset_fn: 1;
-	unsigned int is_hotplug_bridge: 1;
-	unsigned int shpc_managed: 1;
-	unsigned int is_thunderbolt: 1;
-	unsigned int untrusted: 1;
-	unsigned int external_facing: 1;
-	unsigned int broken_intx_masking: 1;
-	unsigned int io_window_1k: 1;
-	unsigned int irq_managed: 1;
-	unsigned int non_compliant_bars: 1;
-	unsigned int is_probed: 1;
-	unsigned int link_active_reporting: 1;
-	unsigned int no_vf_scan: 1;
-	unsigned int no_command_memory: 1;
-	pci_dev_flags_t dev_flags;
-	atomic_t enable_cnt;
-	u32 saved_config_space[16];
-	struct hlist_head saved_cap_space;
-	struct bin_attribute *rom_attr;
-	int rom_attr_enabled;
-	struct bin_attribute *res_attr[17];
-	struct bin_attribute *res_attr_wc[17];
-	unsigned int broken_cmd_compl: 1;
-	unsigned int ptm_root: 1;
-	unsigned int ptm_enabled: 1;
-	u8 ptm_granularity;
-	const struct attribute_group **msi_irq_groups;
-	struct pci_vpd *vpd;
-	u16 dpc_cap;
-	unsigned int dpc_rp_extensions: 1;
-	u8 dpc_rp_log_size;
-	union {
-		struct pci_sriov *sriov;
-		struct pci_dev *physfn;
-	};
-	u16 ats_cap;
-	u8 ats_stu;
-	u16 pri_cap;
-	u32 pri_reqs_alloc;
-	unsigned int pasid_required: 1;
-	u16 pasid_cap;
-	u16 pasid_features;
-	u16 acs_cap;
-	phys_addr_t rom;
-	size_t romlen;
-	char *driver_override;
-	long unsigned int priv_flags;
-};
-
-struct pci_dynids {
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct pci_error_handlers;
-
-struct pci_driver {
-	struct list_head node;
-	const char *name;
-	const struct pci_device_id *id_table;
-	int (*probe)(struct pci_dev *, const struct pci_device_id *);
-	void (*remove)(struct pci_dev *);
-	int (*suspend)(struct pci_dev *, pm_message_t);
-	int (*resume)(struct pci_dev *);
-	void (*shutdown)(struct pci_dev *);
-	int (*sriov_configure)(struct pci_dev *, int);
-	const struct pci_error_handlers *err_handler;
-	const struct attribute_group **groups;
-	struct device_driver driver;
-	struct pci_dynids dynids;
-};
-
-struct pci_host_bridge {
-	struct device dev;
-	struct pci_bus *bus;
-	struct pci_ops *ops;
-	struct pci_ops *child_ops;
-	void *sysdata;
-	int busnr;
-	struct list_head windows;
-	struct list_head dma_ranges;
-	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
-	int (*map_irq)(const struct pci_dev *, u8, u8);
-	void (*release_fn)(struct pci_host_bridge *);
-	void *release_data;
-	struct msi_controller *msi;
-	unsigned int ignore_reset_delay: 1;
-	unsigned int no_ext_tags: 1;
-	unsigned int native_aer: 1;
-	unsigned int native_pcie_hotplug: 1;
-	unsigned int native_shpc_hotplug: 1;
-	unsigned int native_pme: 1;
-	unsigned int native_ltr: 1;
-	unsigned int native_dpc: 1;
-	unsigned int preserve_config: 1;
-	unsigned int size_windows: 1;
-	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
-	long: 64;
-	long unsigned int private[0];
-};
-
-struct pci_ops {
-	int (*add_bus)(struct pci_bus *);
-	void (*remove_bus)(struct pci_bus *);
-	void * (*map_bus)(struct pci_bus *, unsigned int, int);
-	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
-	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
-};
-
-typedef unsigned int pci_ers_result_t;
-
-struct pci_error_handlers {
-	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
-	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
-	pci_ers_result_t (*slot_reset)(struct pci_dev *);
-	void (*reset_prepare)(struct pci_dev *);
-	void (*reset_done)(struct pci_dev *);
-	void (*resume)(struct pci_dev *);
-};
-
-struct acpi_pci_root_ops;
-
-struct acpi_pci_root_info {
-	struct acpi_pci_root *root;
-	struct acpi_device *bridge;
-	struct acpi_pci_root_ops *ops;
-	struct list_head resources;
-	char name[16];
-};
-
-struct acpi_pci_root_ops {
-	struct pci_ops *pci_ops;
-	int (*init_info)(struct acpi_pci_root_info *);
-	void (*release_info)(struct acpi_pci_root_info *);
-	int (*prepare_resources)(struct acpi_pci_root_info *);
-};
-
-struct pci_config_window;
-
-struct pci_ecam_ops {
-	unsigned int bus_shift;
-	struct pci_ops pci_ops;
-	int (*init)(struct pci_config_window *);
-};
-
-struct pci_config_window {
-	struct resource res;
-	struct resource busr;
-	void *priv;
-	const struct pci_ecam_ops *ops;
-	union {
-		void *win;
-		void **winp;
-	};
-	struct device *parent;
-};
-
-struct acpi_pci_generic_root_info {
-	struct acpi_pci_root_info common;
-	struct pci_config_window *cfg;
-};
-
-struct trace_event_raw_instruction_emulation {
-	struct trace_entry ent;
-	u32 __data_loc_instr;
-	u64 addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_instruction_emulation {
-	u32 instr;
-};
-
-typedef void (*btf_trace_instruction_emulation)(void *, const char *, u64);
-
-enum insn_emulation_mode {
-	INSN_UNDEF = 0,
-	INSN_EMULATE = 1,
-	INSN_HW = 2,
-};
-
-enum legacy_insn_status {
-	INSN_DEPRECATED = 0,
-	INSN_OBSOLETE = 1,
-};
-
-struct insn_emulation_ops {
-	const char *name;
-	enum legacy_insn_status status;
-	struct undef_hook *hooks;
-	int (*set_hw_mode)(bool);
-};
-
-struct insn_emulation {
-	struct list_head node;
-	struct insn_emulation_ops *ops;
-	int current_mode;
-	int min;
-	int max;
-};
-
-typedef u64 acpi_size;
-
-typedef u64 acpi_physical_address;
-
-typedef u32 acpi_status;
-
-struct acpi_table_header {
-	char signature[4];
-	u32 length;
-	u8 revision;
-	u8 checksum;
-	char oem_id[6];
-	char oem_table_id[8];
-	u32 oem_revision;
-	char asl_compiler_id[4];
-	u32 asl_compiler_revision;
-};
-
-struct acpi_generic_address {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_table_fadt {
-	struct acpi_table_header header;
-	u32 facs;
-	u32 dsdt;
-	u8 model;
-	u8 preferred_profile;
-	u16 sci_interrupt;
-	u32 smi_command;
-	u8 acpi_enable;
-	u8 acpi_disable;
-	u8 s4_bios_request;
-	u8 pstate_control;
-	u32 pm1a_event_block;
-	u32 pm1b_event_block;
-	u32 pm1a_control_block;
-	u32 pm1b_control_block;
-	u32 pm2_control_block;
-	u32 pm_timer_block;
-	u32 gpe0_block;
-	u32 gpe1_block;
-	u8 pm1_event_length;
-	u8 pm1_control_length;
-	u8 pm2_control_length;
-	u8 pm_timer_length;
-	u8 gpe0_block_length;
-	u8 gpe1_block_length;
-	u8 gpe1_base;
-	u8 cst_control;
-	u16 c2_latency;
-	u16 c3_latency;
-	u16 flush_size;
-	u16 flush_stride;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 day_alarm;
-	u8 month_alarm;
-	u8 century;
-	u16 boot_flags;
-	u8 reserved;
-	u32 flags;
-	struct acpi_generic_address reset_register;
-	u8 reset_value;
-	u16 arm_boot_flags;
-	u8 minor_revision;
-	u64 Xfacs;
-	u64 Xdsdt;
-	struct acpi_generic_address xpm1a_event_block;
-	struct acpi_generic_address xpm1b_event_block;
-	struct acpi_generic_address xpm1a_control_block;
-	struct acpi_generic_address xpm1b_control_block;
-	struct acpi_generic_address xpm2_control_block;
-	struct acpi_generic_address xpm_timer_block;
-	struct acpi_generic_address xgpe0_block;
-	struct acpi_generic_address xgpe1_block;
-	struct acpi_generic_address sleep_control;
-	struct acpi_generic_address sleep_status;
-	u64 hypervisor_id;
-} __attribute__((packed));
-
-enum acpi_srat_type {
-	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
-	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
-	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
-	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
-	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
-	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
-	ACPI_SRAT_TYPE_RESERVED = 6,
-};
-
-struct acpi_srat_gicc_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u32 acpi_processor_uid;
-	u32 flags;
-	u32 clock_domain;
-} __attribute__((packed));
-
 struct parking_protocol_mailbox {
 	__le32 cpu_id;
 	__le32 reserved;
@@ -17202,389 +66374,70 @@
 };
 
 enum {
-	MEMREMAP_WB = 1,
-	MEMREMAP_WT = 2,
-	MEMREMAP_WC = 4,
-	MEMREMAP_ENC = 8,
-	MEMREMAP_DEC = 16,
+	ASSUME_PERFECT = 255,
+	ASSUME_VALID_DTB = 1,
+	ASSUME_VALID_INPUT = 2,
+	ASSUME_LATEST = 4,
+	ASSUME_NO_ROLLBACK = 8,
+	ASSUME_LIBFDT_ORDER = 16,
+	ASSUME_LIBFDT_FLAWLESS = 32,
 };
 
-struct pv_time_ops {
-	long long unsigned int (*steal_clock)(int);
+typedef int sdei_event_callback(u32, struct pt_regs *, void *);
+
+struct sdei_registered_event {
+	struct pt_regs interrupted_regs;
+	sdei_event_callback *callback;
+	void *callback_arg;
+	u32 event_num;
+	u8 priority;
 };
 
-struct paravirt_patch_template {
-	struct pv_time_ops time;
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
 };
 
-struct pvclock_vcpu_stolen_time {
-	__le32 revision;
-	__le32 attributes;
-	__le64 stolen_time;
-	u8 padding[48];
+struct freelist_head {
+	struct freelist_node *head;
 };
 
-struct pv_time_stolen_time_region {
-	struct pvclock_vcpu_stolen_time *kaddr;
-};
-
-typedef u64 p4dval_t;
-
-typedef struct {
-	pgd_t pgd;
-} p4d_t;
-
-enum pageflags {
-	PG_locked = 0,
-	PG_referenced = 1,
-	PG_uptodate = 2,
-	PG_dirty = 3,
-	PG_lru = 4,
-	PG_active = 5,
-	PG_workingset = 6,
-	PG_waiters = 7,
-	PG_error = 8,
-	PG_slab = 9,
-	PG_owner_priv_1 = 10,
-	PG_arch_1 = 11,
-	PG_reserved = 12,
-	PG_private = 13,
-	PG_private_2 = 14,
-	PG_writeback = 15,
-	PG_head = 16,
-	PG_mappedtodisk = 17,
-	PG_reclaim = 18,
-	PG_swapbacked = 19,
-	PG_unevictable = 20,
-	PG_mlocked = 21,
-	PG_hwpoison = 22,
-	PG_young = 23,
-	PG_idle = 24,
-	PG_arch_2 = 25,
-	__NR_PAGEFLAGS = 26,
-	PG_checked = 10,
-	PG_swapcache = 10,
-	PG_fscache = 14,
-	PG_pinned = 10,
-	PG_savepinned = 3,
-	PG_foreign = 10,
-	PG_xen_remapped = 10,
-	PG_slob_free = 13,
-	PG_double_map = 6,
-	PG_isolated = 18,
-	PG_reported = 2,
-};
-
-struct mem_section_usage {
-	long unsigned int subsection_map[8];
-	long unsigned int pageblock_flags[0];
-};
-
-struct page_ext;
-
-struct mem_section {
-	long unsigned int section_mem_map;
-	struct mem_section_usage *usage;
-	struct page_ext *page_ext;
-	long unsigned int pad;
-};
-
-struct page_ext {
-	long unsigned int flags;
-};
-
-struct xa_node {
-	unsigned char shift;
-	unsigned char offset;
-	unsigned char count;
-	unsigned char nr_values;
-	struct xa_node *parent;
-	struct xarray *array;
-	union {
-		struct list_head private_list;
-		struct callback_head callback_head;
-	};
-	void *slots[64];
-	union {
-		long unsigned int tags[3];
-		long unsigned int marks[3];
-	};
-};
-
-typedef void (*xa_update_node_t)(struct xa_node *);
-
-struct xa_state {
-	struct xarray *xa;
-	long unsigned int xa_index;
-	unsigned char xa_shift;
-	unsigned char xa_sibs;
-	unsigned char xa_offset;
-	unsigned char xa_pad;
-	struct xa_node *xa_node;
-	struct xa_node *xa_alloc;
-	xa_update_node_t xa_update;
-};
-
-struct pbe {
-	void *address;
-	void *orig_address;
-	struct pbe *next;
-};
-
-struct arch_hibernate_hdr_invariants {
-	char uts_version[65];
-};
-
-struct arch_hibernate_hdr {
-	struct arch_hibernate_hdr_invariants invariants;
-	phys_addr_t ttbr1_el1;
-	void (*reenter_kernel)();
-	phys_addr_t __hyp_stub_vectors;
-	u64 sleep_cpu_mpidr;
-};
-
-enum {
-	IRQD_TRIGGER_MASK = 15,
-	IRQD_SETAFFINITY_PENDING = 256,
-	IRQD_ACTIVATED = 512,
-	IRQD_NO_BALANCING = 1024,
-	IRQD_PER_CPU = 2048,
-	IRQD_AFFINITY_SET = 4096,
-	IRQD_LEVEL = 8192,
-	IRQD_WAKEUP_STATE = 16384,
-	IRQD_MOVE_PCNTXT = 32768,
-	IRQD_IRQ_DISABLED = 65536,
-	IRQD_IRQ_MASKED = 131072,
-	IRQD_IRQ_INPROGRESS = 262144,
-	IRQD_WAKEUP_ARMED = 524288,
-	IRQD_FORWARDED_TO_VCPU = 1048576,
-	IRQD_AFFINITY_MANAGED = 2097152,
-	IRQD_IRQ_STARTED = 4194304,
-	IRQD_MANAGED_SHUTDOWN = 8388608,
-	IRQD_SINGLE_TARGET = 16777216,
-	IRQD_DEFAULT_TRIGGER_SET = 33554432,
-	IRQD_CAN_RESERVE = 67108864,
-	IRQD_MSI_NOMASK_QUIRK = 134217728,
-	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
-	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
-	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
-};
-
-struct kimage_arch {
-	void *dtb;
-	long unsigned int dtb_mem;
-	void *elf_headers;
-	long unsigned int elf_headers_mem;
-	long unsigned int elf_headers_sz;
-};
-
-typedef int kexec_probe_t(const char *, long unsigned int);
-
-struct kimage;
-
-typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
-
-typedef int kexec_cleanup_t(void *);
-
-struct kexec_file_ops {
-	kexec_probe_t *probe;
-	kexec_load_t *load;
-	kexec_cleanup_t *cleanup;
-};
-
-typedef long unsigned int kimage_entry_t;
-
-struct kexec_segment {
-	union {
-		void *buf;
-		void *kbuf;
-	};
-	size_t bufsz;
-	long unsigned int mem;
-	size_t memsz;
-};
-
-struct purgatory_info {
-	const Elf64_Ehdr *ehdr;
-	Elf64_Shdr *sechdrs;
-	void *purgatory_buf;
-};
-
-struct kimage {
-	kimage_entry_t head;
-	kimage_entry_t *entry;
-	kimage_entry_t *last_entry;
-	long unsigned int start;
-	struct page *control_code_page;
-	struct page *swap_page;
-	void *vmcoreinfo_data_copy;
-	long unsigned int nr_segments;
-	struct kexec_segment segment[16];
-	struct list_head control_pages;
-	struct list_head dest_pages;
-	struct list_head unusable_pages;
-	long unsigned int control_page;
-	unsigned int type: 1;
-	unsigned int preserve_context: 1;
-	unsigned int file_mode: 1;
-	struct kimage_arch arch;
-	void *kernel_buf;
-	long unsigned int kernel_buf_len;
-	void *initrd_buf;
-	long unsigned int initrd_buf_len;
-	char *cmdline_buf;
-	long unsigned int cmdline_buf_len;
-	const struct kexec_file_ops *fops;
-	void *image_loader_data;
-	struct purgatory_info purgatory_info;
-};
-
-typedef u8 uint8_t;
-
-typedef u64 uint64_t;
-
-struct kexec_buf {
-	struct kimage *image;
-	void *buffer;
-	long unsigned int bufsz;
-	long unsigned int mem;
-	long unsigned int memsz;
-	long unsigned int buf_align;
-	long unsigned int buf_min;
-	long unsigned int buf_max;
-	bool top_down;
-};
-
-struct crash_mem_range {
-	u64 start;
-	u64 end;
-};
-
-struct crash_mem {
-	unsigned int max_nr_ranges;
-	unsigned int nr_ranges;
-	struct crash_mem_range ranges[0];
-};
-
-typedef __be32 fdt32_t;
-
-typedef __be64 fdt64_t;
-
-struct fdt_header {
-	fdt32_t magic;
-	fdt32_t totalsize;
-	fdt32_t off_dt_struct;
-	fdt32_t off_dt_strings;
-	fdt32_t off_mem_rsvmap;
-	fdt32_t version;
-	fdt32_t last_comp_version;
-	fdt32_t boot_cpuid_phys;
-	fdt32_t size_dt_strings;
-	fdt32_t size_dt_struct;
-};
-
-enum key_being_used_for {
-	VERIFYING_MODULE_SIGNATURE = 0,
-	VERIFYING_FIRMWARE_SIGNATURE = 1,
-	VERIFYING_KEXEC_PE_SIGNATURE = 2,
-	VERIFYING_KEY_SIGNATURE = 3,
-	VERIFYING_KEY_SELF_SIGNATURE = 4,
-	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
-	NR__KEY_BEING_USED_FOR = 6,
-};
-
-struct arm64_image_header {
-	__le32 code0;
-	__le32 code1;
-	__le64 text_offset;
-	__le64 image_size;
-	__le64 flags;
-	__le64 res2;
-	__le64 res3;
-	__le64 res4;
-	__le32 magic;
-	__le32 res5;
-};
-
-typedef struct {
-	long unsigned int val;
-} swp_entry_t;
-
-typedef u32 probe_opcode_t;
-
-typedef void probes_handler_t(u32, long int, struct pt_regs *);
-
-struct arch_probe_insn {
-	probe_opcode_t *insn;
-	pstate_check_t *pstate_cc;
-	probes_handler_t *handler;
-	long unsigned int restore;
-};
-
-typedef u32 kprobe_opcode_t;
-
-struct arch_specific_insn {
-	struct arch_probe_insn api;
-};
-
-struct kprobe;
-
 struct prev_kprobe {
 	struct kprobe *kp;
 	unsigned int status;
 };
 
-typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
-
-typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
-
-typedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);
-
-struct kprobe {
-	struct hlist_node hlist;
-	struct list_head list;
-	long unsigned int nmissed;
-	kprobe_opcode_t *addr;
-	const char *symbol_name;
-	unsigned int offset;
-	kprobe_pre_handler_t pre_handler;
-	kprobe_post_handler_t post_handler;
-	kprobe_fault_handler_t fault_handler;
-	kprobe_opcode_t opcode;
-	struct arch_specific_insn ainsn;
-	u32 flags;
-};
-
-struct kprobe_step_ctx {
-	long unsigned int ss_pending;
-	long unsigned int match_addr;
-};
-
 struct kprobe_ctlblk {
 	unsigned int kprobe_status;
 	long unsigned int saved_irqflag;
 	struct prev_kprobe prev_kprobe;
-	struct kprobe_step_ctx ss_ctx;
 };
 
 struct kretprobe_instance;
 
 typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
 
-struct kretprobe;
+struct kretprobe_holder;
 
 struct kretprobe_instance {
 	union {
-		struct hlist_node hlist;
+		struct freelist_node freelist;
 		struct callback_head rcu;
 	};
-	struct kretprobe *rp;
+	struct llist_node llist;
+	struct kretprobe_holder *rph;
 	kprobe_opcode_t *ret_addr;
-	struct task_struct *task;
 	void *fp;
 	char data[0];
 };
 
+struct kretprobe;
+
+struct kretprobe_holder {
+	struct kretprobe *rp;
+	refcount_t ref;
+};
+
 struct kretprobe {
 	struct kprobe kp;
 	kretprobe_handler_t handler;
@@ -17592,8 +66445,8 @@
 	int maxactive;
 	int nmissed;
 	size_t data_size;
-	struct hlist_head free_instances;
-	raw_spinlock_t lock;
+	struct freelist_head freelist;
+	struct kretprobe_holder *rph;
 };
 
 struct kprobe_insn_cache {
@@ -17612,358 +66465,14 @@
 	INSN_GOOD = 2,
 };
 
-enum aarch64_insn_special_register {
-	AARCH64_INSN_SPCLREG_SPSR_EL1 = 49664,
-	AARCH64_INSN_SPCLREG_ELR_EL1 = 49665,
-	AARCH64_INSN_SPCLREG_SP_EL0 = 49672,
-	AARCH64_INSN_SPCLREG_SPSEL = 49680,
-	AARCH64_INSN_SPCLREG_CURRENTEL = 49682,
-	AARCH64_INSN_SPCLREG_DAIF = 55825,
-	AARCH64_INSN_SPCLREG_NZCV = 55824,
-	AARCH64_INSN_SPCLREG_FPCR = 55840,
-	AARCH64_INSN_SPCLREG_DSPSR_EL0 = 55848,
-	AARCH64_INSN_SPCLREG_DLR_EL0 = 55849,
-	AARCH64_INSN_SPCLREG_SPSR_EL2 = 57856,
-	AARCH64_INSN_SPCLREG_ELR_EL2 = 57857,
-	AARCH64_INSN_SPCLREG_SP_EL1 = 57864,
-	AARCH64_INSN_SPCLREG_SPSR_INQ = 57880,
-	AARCH64_INSN_SPCLREG_SPSR_ABT = 57881,
-	AARCH64_INSN_SPCLREG_SPSR_UND = 57882,
-	AARCH64_INSN_SPCLREG_SPSR_FIQ = 57883,
-	AARCH64_INSN_SPCLREG_SPSR_EL3 = 61952,
-	AARCH64_INSN_SPCLREG_ELR_EL3 = 61953,
-	AARCH64_INSN_SPCLREG_SP_EL2 = 61968,
-};
-
-struct arch_uprobe {
-	union {
-		u8 insn[4];
-		u8 ixol[4];
-	};
-	struct arch_probe_insn api;
-	bool simulate;
-};
-
-enum rp_check {
-	RP_CHECK_CALL = 0,
-	RP_CHECK_CHAIN_CALL = 1,
-	RP_CHECK_RET = 2,
-};
-
-struct iommu_fault_param;
-
-struct iommu_fwspec;
-
-struct dev_iommu {
-	struct mutex lock;
-	struct iommu_fault_param *fault_param;
-	struct iommu_fwspec *fwspec;
-	struct iommu_device *iommu_dev;
-	void *priv;
-};
-
-struct sg_table {
-	struct scatterlist *sgl;
-	unsigned int nents;
-	unsigned int orig_nents;
-};
-
-struct of_phandle_args {
-	struct device_node *np;
-	int args_count;
-	uint32_t args[16];
-};
-
-struct iommu_fault_unrecoverable {
-	__u32 reason;
-	__u32 flags;
-	__u32 pasid;
-	__u32 perm;
-	__u64 addr;
-	__u64 fetch_addr;
-};
-
-struct iommu_fault_page_request {
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 perm;
-	__u64 addr;
-	__u64 private_data[2];
-};
-
-struct iommu_fault {
-	__u32 type;
-	__u32 padding;
-	union {
-		struct iommu_fault_unrecoverable event;
-		struct iommu_fault_page_request prm;
-		__u8 padding2[56];
-	};
-};
-
-struct iommu_page_response {
-	__u32 argsz;
-	__u32 version;
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 code;
-};
-
-struct iommu_inv_addr_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-	__u64 addr;
-	__u64 granule_size;
-	__u64 nb_granules;
-};
-
-struct iommu_inv_pasid_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-};
-
-struct iommu_cache_invalidate_info {
-	__u32 argsz;
-	__u32 version;
-	__u8 cache;
-	__u8 granularity;
-	__u8 padding[6];
-	union {
-		struct iommu_inv_pasid_info pasid_info;
-		struct iommu_inv_addr_info addr_info;
-	} granu;
-};
-
-struct iommu_gpasid_bind_data_vtd {
-	__u64 flags;
-	__u32 pat;
-	__u32 emt;
-};
-
-struct iommu_gpasid_bind_data {
-	__u32 argsz;
-	__u32 version;
-	__u32 format;
-	__u32 addr_width;
-	__u64 flags;
-	__u64 gpgd;
-	__u64 hpasid;
-	__u64 gpasid;
-	__u8 padding[8];
-	union {
-		struct iommu_gpasid_bind_data_vtd vtd;
-	} vendor;
-};
-
-typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
-
-struct iommu_domain_geometry {
-	dma_addr_t aperture_start;
-	dma_addr_t aperture_end;
-	bool force_aperture;
-};
-
-struct iommu_domain {
-	unsigned int type;
-	const struct iommu_ops *ops;
-	long unsigned int pgsize_bitmap;
-	iommu_fault_handler_t handler;
-	void *handler_token;
-	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
-};
-
-typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
-
-enum iommu_resv_type {
-	IOMMU_RESV_DIRECT = 0,
-	IOMMU_RESV_DIRECT_RELAXABLE = 1,
-	IOMMU_RESV_RESERVED = 2,
-	IOMMU_RESV_MSI = 3,
-	IOMMU_RESV_SW_MSI = 4,
-};
-
-struct iommu_resv_region {
-	struct list_head list;
-	phys_addr_t start;
-	size_t length;
-	int prot;
-	enum iommu_resv_type type;
-};
-
-struct iommu_iotlb_gather {
-	long unsigned int start;
-	long unsigned int end;
-	size_t pgsize;
-};
-
-struct iommu_device {
-	struct list_head list;
-	const struct iommu_ops *ops;
-	struct fwnode_handle *fwnode;
-	struct device *dev;
-};
-
-struct iommu_sva {
-	struct device *dev;
-};
-
-struct iommu_fault_event {
-	struct iommu_fault fault;
-	struct list_head list;
-};
-
-struct iommu_fault_param {
-	iommu_dev_fault_handler_t handler;
-	void *data;
-	struct list_head faults;
-	struct mutex lock;
-};
-
-struct iommu_fwspec {
-	const struct iommu_ops *ops;
-	struct fwnode_handle *iommu_fwnode;
-	u32 flags;
-	u32 num_pasid_bits;
-	unsigned int num_ids;
-	u32 ids[0];
-};
-
-enum xen_domain_type {
-	XEN_NATIVE = 0,
-	XEN_PV_DOMAIN = 1,
-	XEN_HVM_DOMAIN = 2,
-};
-
-struct hstate {
-	int next_nid_to_alloc;
-	int next_nid_to_free;
-	unsigned int order;
-	long unsigned int mask;
-	long unsigned int max_huge_pages;
-	long unsigned int nr_huge_pages;
-	long unsigned int free_huge_pages;
-	long unsigned int resv_huge_pages;
-	long unsigned int surplus_huge_pages;
-	long unsigned int nr_overcommit_huge_pages;
-	struct list_head hugepage_activelist;
-	struct list_head hugepage_freelists[128];
-	unsigned int nr_huge_pages_node[128];
-	unsigned int free_huge_pages_node[128];
-	unsigned int surplus_huge_pages_node[128];
-	struct cftype cgroup_files_dfl[7];
-	struct cftype cgroup_files_legacy[9];
-	char name[32];
-};
-
-struct fault_info {
-	int (*fn)(long unsigned int, unsigned int, struct pt_regs *);
-	int sig;
-	int code;
-	const char *name;
-};
-
-enum swiotlb_force {
-	SWIOTLB_NORMAL = 0,
-	SWIOTLB_FORCE = 1,
-	SWIOTLB_NO_FORCE = 2,
-};
-
-struct mhp_params {
-	struct vmem_altmap *altmap;
-	pgprot_t pgprot;
-};
-
-struct memory_notify {
-	long unsigned int start_pfn;
-	long unsigned int nr_pages;
-	int status_change_nid_normal;
-	int status_change_nid_high;
-	int status_change_nid;
-};
-
 struct page_change_data {
 	pgprot_t set_mask;
 	pgprot_t clear_mask;
 };
 
-struct hugepage_subpool {
-	spinlock_t lock;
-	long int count;
-	long int max_hpages;
-	long int used_hpages;
-	struct hstate *hstate;
-	long int min_hpages;
-	long int rsv_hpages;
-};
+typedef bool (*smp_cond_func_t)(int, void *);
 
-struct hugetlbfs_sb_info {
-	long int max_inodes;
-	long int free_inodes;
-	spinlock_t stat_lock;
-	struct hstate *hstate;
-	struct hugepage_subpool *spool;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-typedef __kernel_long_t __kernel_off_t;
-
-typedef __kernel_off_t off_t;
-
-enum {
-	BPF_REG_0 = 0,
-	BPF_REG_1 = 1,
-	BPF_REG_2 = 2,
-	BPF_REG_3 = 3,
-	BPF_REG_4 = 4,
-	BPF_REG_5 = 5,
-	BPF_REG_6 = 6,
-	BPF_REG_7 = 7,
-	BPF_REG_8 = 8,
-	BPF_REG_9 = 9,
-	BPF_REG_10 = 10,
-	__MAX_BPF_REG = 11,
-};
-
-enum {
-	DUMP_PREFIX_NONE = 0,
-	DUMP_PREFIX_ADDRESS = 1,
-	DUMP_PREFIX_OFFSET = 2,
-};
-
-struct bpf_binary_header {
-	u32 pages;
-	int: 32;
-	u8 image[0];
-};
-
-struct jit_ctx {
-	const struct bpf_prog *prog;
-	int idx;
-	int epilogue_offset;
-	int *offset;
-	int exentry_idx;
-	__le32 *image;
-	u32 stack_size;
-};
-
-struct arm64_jit_data {
-	struct bpf_binary_header *header;
-	u8 *image;
-	struct jit_ctx ctx;
-};
-
-typedef long unsigned int ulong;
-
-typedef u64 gpa_t;
-
-typedef u64 gfn_t;
+typedef long unsigned int hva_t;
 
 typedef u64 hpa_t;
 
@@ -17971,8 +66480,6 @@
 
 typedef hfn_t kvm_pfn_t;
 
-struct kvm_memory_slot;
-
 struct gfn_to_hva_cache {
 	u64 generation;
 	gpa_t gpa;
@@ -17981,420 +66488,6 @@
 	struct kvm_memory_slot *memslot;
 };
 
-struct kvm_arch_memory_slot {};
-
-struct kvm_memory_slot {
-	gfn_t base_gfn;
-	long unsigned int npages;
-	long unsigned int *dirty_bitmap;
-	struct kvm_arch_memory_slot arch;
-	long unsigned int userspace_addr;
-	u32 flags;
-	short int id;
-	u16 as_id;
-};
-
-struct gfn_to_pfn_cache {
-	u64 generation;
-	gfn_t gfn;
-	kvm_pfn_t pfn;
-	bool dirty;
-};
-
-struct kvm_mmu_memory_cache {
-	int nobjs;
-	gfp_t gfp_zero;
-	struct kmem_cache *kmem_cache;
-	void *objects[40];
-};
-
-struct kvm_vcpu;
-
-struct kvm_io_device;
-
-struct kvm_io_device_ops {
-	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
-	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
-	void (*destructor)(struct kvm_io_device *);
-};
-
-struct preempt_ops;
-
-struct preempt_notifier {
-	struct hlist_node link;
-	struct preempt_ops *ops;
-};
-
-struct kvm_vcpu_stat {
-	u64 halt_successful_poll;
-	u64 halt_attempted_poll;
-	u64 halt_poll_success_ns;
-	u64 halt_poll_fail_ns;
-	u64 halt_poll_invalid;
-	u64 halt_wakeup;
-	u64 hvc_exit_stat;
-	u64 wfe_exit_stat;
-	u64 wfi_exit_stat;
-	u64 mmio_exit_user;
-	u64 mmio_exit_kernel;
-	u64 exits;
-};
-
-struct kvm_mmio_fragment {
-	gpa_t gpa;
-	void *data;
-	unsigned int len;
-};
-
-struct kvm_cpu_context {
-	struct user_pt_regs regs;
-	u64 spsr_abt;
-	u64 spsr_und;
-	u64 spsr_irq;
-	u64 spsr_fiq;
-	struct user_fpsimd_state fp_regs;
-	union {
-		u64 sys_regs[119];
-		u32 copro[238];
-	};
-	struct kvm_vcpu *__hyp_running_vcpu;
-};
-
-struct kvm_vcpu_fault_info {
-	u32 esr_el2;
-	u64 far_el2;
-	u64 hpfar_el2;
-	u64 disr_el1;
-};
-
-struct kvm_guest_debug_arch {
-	__u64 dbg_bcr[16];
-	__u64 dbg_bvr[16];
-	__u64 dbg_wcr[16];
-	__u64 dbg_wvr[16];
-};
-
-struct vgic_v2_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_apr;
-	u32 vgic_lr[64];
-	unsigned int used_lrs;
-};
-
-struct its_vm;
-
-struct its_vpe {
-	struct page *vpt_page;
-	struct its_vm *its_vm;
-	atomic_t vlpi_count;
-	int irq;
-	irq_hw_number_t vpe_db_lpi;
-	bool resident;
-	union {
-		struct {
-			int vpe_proxy_event;
-			bool idai;
-		};
-		struct {
-			struct fwnode_handle *fwnode;
-			struct irq_domain *sgi_domain;
-			struct {
-				u8 priority;
-				bool enabled;
-				bool group;
-			} sgi_config[16];
-			atomic_t vmapp_count;
-		};
-	};
-	raw_spinlock_t vpe_lock;
-	u16 col_idx;
-	u16 vpe_id;
-	bool pending_last;
-};
-
-struct vgic_v3_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_sre;
-	u32 vgic_ap0r[4];
-	u32 vgic_ap1r[4];
-	u64 vgic_lr[16];
-	struct its_vpe its_vpe;
-	unsigned int used_lrs;
-};
-
-enum vgic_irq_config {
-	VGIC_CONFIG_EDGE = 0,
-	VGIC_CONFIG_LEVEL = 1,
-};
-
-struct vgic_irq {
-	raw_spinlock_t irq_lock;
-	struct list_head lpi_list;
-	struct list_head ap_list;
-	struct kvm_vcpu *vcpu;
-	struct kvm_vcpu *target_vcpu;
-	u32 intid;
-	bool line_level;
-	bool pending_latch;
-	bool active;
-	bool enabled;
-	bool hw;
-	struct kref refcount;
-	u32 hwintid;
-	unsigned int host_irq;
-	union {
-		u8 targets;
-		u32 mpidr;
-	};
-	u8 source;
-	u8 active_source;
-	u8 priority;
-	u8 group;
-	enum vgic_irq_config config;
-	bool (*get_input_level)(int);
-	void *owner;
-};
-
-enum iodev_type {
-	IODEV_CPUIF = 0,
-	IODEV_DIST = 1,
-	IODEV_REDIST = 2,
-	IODEV_ITS = 3,
-};
-
-struct kvm_io_device {
-	const struct kvm_io_device_ops *ops;
-};
-
-struct vgic_its;
-
-struct vgic_register_region;
-
-struct vgic_io_device {
-	gpa_t base_addr;
-	union {
-		struct kvm_vcpu *redist_vcpu;
-		struct vgic_its *its;
-	};
-	const struct vgic_register_region *regions;
-	enum iodev_type iodev_type;
-	int nr_regions;
-	struct kvm_io_device dev;
-};
-
-struct vgic_redist_region;
-
-struct vgic_cpu {
-	union {
-		struct vgic_v2_cpu_if vgic_v2;
-		struct vgic_v3_cpu_if vgic_v3;
-	};
-	struct vgic_irq private_irqs[32];
-	raw_spinlock_t ap_list_lock;
-	struct list_head ap_list_head;
-	struct vgic_io_device rd_iodev;
-	struct vgic_redist_region *rdreg;
-	u64 pendbaser;
-	bool lpis_enabled;
-	u32 num_pri_bits;
-	u32 num_id_bits;
-};
-
-struct kvm_irq_level {
-	union {
-		__u32 irq;
-		__s32 status;
-	};
-	__u32 level;
-};
-
-struct arch_timer_context {
-	struct kvm_vcpu *vcpu;
-	struct kvm_irq_level irq;
-	struct hrtimer hrtimer;
-	bool loaded;
-	u32 host_timer_irq;
-	u32 host_timer_irq_flags;
-};
-
-struct arch_timer_cpu {
-	struct arch_timer_context timers[2];
-	struct hrtimer bg_timer;
-	bool enabled;
-};
-
-struct kvm_pmc {
-	u8 idx;
-	struct perf_event *perf_event;
-};
-
-struct kvm_pmu {
-	int irq_num;
-	struct kvm_pmc pmc[32];
-	long unsigned int chained[1];
-	bool ready;
-	bool created;
-	bool irq_level;
-	struct irq_work overflow_work;
-};
-
-struct vcpu_reset_state {
-	long unsigned int pc;
-	long unsigned int r0;
-	bool be;
-	bool reset;
-};
-
-struct kvm_s2_mmu;
-
-struct kvm_vcpu_arch {
-	struct kvm_cpu_context ctxt;
-	void *sve_state;
-	unsigned int sve_max_vl;
-	struct kvm_s2_mmu *hw_mmu;
-	u64 hcr_el2;
-	u32 mdcr_el2;
-	struct kvm_vcpu_fault_info fault;
-	u64 workaround_flags;
-	u64 flags;
-	struct kvm_guest_debug_arch *debug_ptr;
-	struct kvm_guest_debug_arch vcpu_debug_state;
-	struct kvm_guest_debug_arch external_debug_state;
-	struct thread_info *host_thread_info;
-	struct user_fpsimd_state *host_fpsimd_state;
-	struct {
-		struct kvm_guest_debug_arch regs;
-		u64 pmscr_el1;
-	} host_debug_state;
-	struct vgic_cpu vgic_cpu;
-	struct arch_timer_cpu timer_cpu;
-	struct kvm_pmu pmu;
-	struct {
-		u32 mdscr_el1;
-	} guest_debug_preserved;
-	bool power_off;
-	bool pause;
-	struct kvm_mmu_memory_cache mmu_page_cache;
-	int target;
-	long unsigned int features[1];
-	bool has_run_once;
-	u64 vsesr_el2;
-	struct vcpu_reset_state reset_state;
-	bool sysregs_loaded_on_cpu;
-	struct {
-		u64 last_steal;
-		gpa_t base;
-	} steal;
-};
-
-struct kvm;
-
-struct kvm_run;
-
-struct kvm_vcpu {
-	struct kvm *kvm;
-	struct preempt_notifier preempt_notifier;
-	int cpu;
-	int vcpu_id;
-	int vcpu_idx;
-	int srcu_idx;
-	int mode;
-	u64 requests;
-	long unsigned int guest_debug;
-	int pre_pcpu;
-	struct list_head blocked_vcpu_list;
-	struct mutex mutex;
-	struct kvm_run *run;
-	struct rcuwait wait;
-	struct pid *pid;
-	int sigset_active;
-	sigset_t sigset;
-	struct kvm_vcpu_stat stat;
-	unsigned int halt_poll_ns;
-	bool valid_wakeup;
-	int mmio_needed;
-	int mmio_read_completed;
-	int mmio_is_write;
-	int mmio_cur_fragment;
-	int mmio_nr_fragments;
-	struct kvm_mmio_fragment mmio_fragments[2];
-	struct {
-		bool in_spin_loop;
-		bool dy_eligible;
-	} spin_loop;
-	bool preempted;
-	bool ready;
-	struct kvm_vcpu_arch arch;
-};
-
-struct preempt_ops {
-	void (*sched_in)(struct preempt_notifier *, int);
-	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
-};
-
-struct trace_print_flags {
-	long unsigned int mask;
-	const char *name;
-};
-
-enum mmu_notifier_event {
-	MMU_NOTIFY_UNMAP = 0,
-	MMU_NOTIFY_CLEAR = 1,
-	MMU_NOTIFY_PROTECTION_VMA = 2,
-	MMU_NOTIFY_PROTECTION_PAGE = 3,
-	MMU_NOTIFY_SOFT_DIRTY = 4,
-	MMU_NOTIFY_RELEASE = 5,
-	MMU_NOTIFY_MIGRATE = 6,
-};
-
-struct mmu_notifier;
-
-struct mmu_notifier_range;
-
-struct mmu_notifier_ops {
-	void (*release)(struct mmu_notifier *, struct mm_struct *);
-	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
-	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
-	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
-	void (*free_notifier)(struct mmu_notifier *);
-};
-
-struct mmu_notifier {
-	struct hlist_node hlist;
-	const struct mmu_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct callback_head rcu;
-	unsigned int users;
-};
-
-struct mmu_notifier_range {
-	struct vm_area_struct *vma;
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int flags;
-	enum mmu_notifier_event event;
-	void *migrate_pgmap_owner;
-};
-
-enum kobject_action {
-	KOBJ_ADD = 0,
-	KOBJ_REMOVE = 1,
-	KOBJ_CHANGE = 2,
-	KOBJ_MOVE = 3,
-	KOBJ_ONLINE = 4,
-	KOBJ_OFFLINE = 5,
-	KOBJ_BIND = 6,
-	KOBJ_UNBIND = 7,
-};
-
 struct kvm_regs {
 	struct user_pt_regs regs;
 	__u64 sp_el1;
@@ -18408,15 +66501,6 @@
 
 struct kvm_fpu {};
 
-struct kvm_debug_exit_arch {
-	__u32 hsr;
-	__u64 far;
-};
-
-struct kvm_sync_regs {
-	__u64 device_irq_level;
-};
-
 struct kvm_userspace_memory_region {
 	__u32 slot;
 	__u32 flags;
@@ -18425,160 +66509,6 @@
 	__u64 userspace_addr;
 };
 
-struct kvm_hyperv_exit {
-	__u32 type;
-	__u32 pad1;
-	union {
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 evt_page;
-			__u64 msg_page;
-		} synic;
-		struct {
-			__u64 input;
-			__u64 result;
-			__u64 params[2];
-		} hcall;
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 status;
-			__u64 send_page;
-			__u64 recv_page;
-			__u64 pending_page;
-		} syndbg;
-	} u;
-};
-
-struct kvm_run {
-	__u8 request_interrupt_window;
-	__u8 immediate_exit;
-	__u8 padding1[6];
-	__u32 exit_reason;
-	__u8 ready_for_interrupt_injection;
-	__u8 if_flag;
-	__u16 flags;
-	__u64 cr8;
-	__u64 apic_base;
-	union {
-		struct {
-			__u64 hardware_exit_reason;
-		} hw;
-		struct {
-			__u64 hardware_entry_failure_reason;
-			__u32 cpu;
-		} fail_entry;
-		struct {
-			__u32 exception;
-			__u32 error_code;
-		} ex;
-		struct {
-			__u8 direction;
-			__u8 size;
-			__u16 port;
-			__u32 count;
-			__u64 data_offset;
-		} io;
-		struct {
-			struct kvm_debug_exit_arch arch;
-		} debug;
-		struct {
-			__u64 phys_addr;
-			__u8 data[8];
-			__u32 len;
-			__u8 is_write;
-		} mmio;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u64 ret;
-			__u32 longmode;
-			__u32 pad;
-		} hypercall;
-		struct {
-			__u64 rip;
-			__u32 is_write;
-			__u32 pad;
-		} tpr_access;
-		struct {
-			__u8 icptcode;
-			__u16 ipa;
-			__u32 ipb;
-		} s390_sieic;
-		__u64 s390_reset_flags;
-		struct {
-			__u64 trans_exc_code;
-			__u32 pgm_code;
-		} s390_ucontrol;
-		struct {
-			__u32 dcrn;
-			__u32 data;
-			__u8 is_write;
-		} dcr;
-		struct {
-			__u32 suberror;
-			__u32 ndata;
-			__u64 data[16];
-		} internal;
-		struct {
-			__u64 gprs[32];
-		} osi;
-		struct {
-			__u64 nr;
-			__u64 ret;
-			__u64 args[9];
-		} papr_hcall;
-		struct {
-			__u16 subchannel_id;
-			__u16 subchannel_nr;
-			__u32 io_int_parm;
-			__u32 io_int_word;
-			__u32 ipb;
-			__u8 dequeued;
-		} s390_tsch;
-		struct {
-			__u32 epr;
-		} epr;
-		struct {
-			__u32 type;
-			__u64 flags;
-		} system_event;
-		struct {
-			__u64 addr;
-			__u8 ar;
-			__u8 reserved;
-			__u8 fc;
-			__u8 sel1;
-			__u16 sel2;
-		} s390_stsi;
-		struct {
-			__u8 vector;
-		} eoi;
-		struct kvm_hyperv_exit hyperv;
-		struct {
-			__u64 esr_iss;
-			__u64 fault_ipa;
-		} arm_nisv;
-		struct {
-			__u8 error;
-			__u8 pad[7];
-			__u32 reason;
-			__u32 index;
-			__u64 data;
-		} msr;
-		char padding[256];
-	};
-	__u64 kvm_valid_regs;
-	__u64 kvm_dirty_regs;
-	union {
-		struct kvm_sync_regs regs;
-		char padding[2048];
-	} s;
-};
-
 struct kvm_coalesced_mmio_zone {
 	__u64 addr;
 	__u32 size;
@@ -18588,22 +66518,6 @@
 	};
 };
 
-struct kvm_coalesced_mmio {
-	__u64 phys_addr;
-	__u32 len;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-	__u8 data[8];
-};
-
-struct kvm_coalesced_mmio_ring {
-	__u32 first;
-	__u32 last;
-	struct kvm_coalesced_mmio coalesced_mmio[0];
-};
-
 struct kvm_translation {
 	__u64 linear_address;
 	__u64 physical_address;
@@ -18637,10 +66551,6 @@
 	__u8 sigset[0];
 };
 
-struct kvm_mp_state {
-	__u32 mp_state;
-};
-
 struct kvm_guest_debug {
 	__u32 control;
 	__u32 pad;
@@ -18691,6 +66601,12 @@
 	__u32 sint;
 };
 
+struct kvm_irq_routing_xen_evtchn {
+	__u32 port;
+	__u32 vcpu;
+	__u32 priority;
+};
+
 struct kvm_irq_routing_entry {
 	__u32 gsi;
 	__u32 type;
@@ -18701,6 +66617,7 @@
 		struct kvm_irq_routing_msi msi;
 		struct kvm_irq_routing_s390_adapter adapter;
 		struct kvm_irq_routing_hv_sint hv_sint;
+		struct kvm_irq_routing_xen_evtchn xen_evtchn;
 		__u32 pad[8];
 	} u;
 };
@@ -18734,216 +66651,27 @@
 	__u32 flags;
 };
 
-struct kvm_device_attr {
+struct kvm_stats_header {
 	__u32 flags;
-	__u32 group;
-	__u64 attr;
-	__u64 addr;
+	__u32 name_size;
+	__u32 num_desc;
+	__u32 id_offset;
+	__u32 desc_offset;
+	__u32 data_offset;
 };
 
-enum kvm_device_type {
-	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
-	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
-	KVM_DEV_TYPE_XICS = 3,
-	KVM_DEV_TYPE_VFIO = 4,
-	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
-	KVM_DEV_TYPE_FLIC = 6,
-	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
-	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
-	KVM_DEV_TYPE_XIVE = 9,
-	KVM_DEV_TYPE_ARM_PV_TIME = 10,
-	KVM_DEV_TYPE_MAX = 11,
+struct perf_guest_info_callbacks {
+	unsigned int (*state)();
+	long unsigned int (*get_ip)();
+	unsigned int (*handle_intel_pt_intr)();
 };
 
-struct its_vm {
-	struct fwnode_handle *fwnode;
-	struct irq_domain *domain;
-	struct page *vprop_page;
-	struct its_vpe **vpes;
-	int nr_vpes;
-	irq_hw_number_t db_lpi_base;
-	long unsigned int *db_bitmap;
-	int nr_db_lpis;
-	u32 vlpi_count[16];
-};
-
-struct kvm_device;
-
-struct vgic_its {
-	gpa_t vgic_its_base;
-	bool enabled;
-	struct vgic_io_device iodev;
-	struct kvm_device *dev;
-	u64 baser_device_table;
-	u64 baser_coll_table;
-	struct mutex cmd_lock;
-	u64 cbaser;
-	u32 creadr;
-	u32 cwriter;
-	u32 abi_rev;
-	struct mutex its_lock;
-	struct list_head device_list;
-	struct list_head collection_list;
-};
-
-struct vgic_register_region {
-	unsigned int reg_offset;
-	unsigned int len;
-	unsigned int bits_per_irq;
-	unsigned int access_flags;
-	union {
-		long unsigned int (*read)(struct kvm_vcpu *, gpa_t, unsigned int);
-		long unsigned int (*its_read)(struct kvm *, struct vgic_its *, gpa_t, unsigned int);
-	};
-	union {
-		void (*write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		void (*its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-	long unsigned int (*uaccess_read)(struct kvm_vcpu *, gpa_t, unsigned int);
-	union {
-		int (*uaccess_write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		int (*uaccess_its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-};
-
-struct kvm_device_ops;
-
-struct kvm_device {
-	const struct kvm_device_ops *ops;
-	struct kvm *kvm;
-	void *private;
-	struct list_head vm_node;
-};
-
-struct vgic_redist_region {
-	u32 index;
-	gpa_t base;
-	u32 count;
-	u32 free_index;
-	struct list_head list;
-};
-
-struct vgic_state_iter;
-
-struct vgic_dist {
-	bool in_kernel;
-	bool ready;
-	bool initialized;
-	u32 vgic_model;
-	u32 implementation_rev;
-	bool v2_groups_user_writable;
-	bool msis_require_devid;
-	int nr_spis;
-	gpa_t vgic_dist_base;
-	union {
-		gpa_t vgic_cpu_base;
-		struct list_head rd_regions;
-	};
-	bool enabled;
-	bool nassgireq;
-	struct vgic_irq *spis;
-	struct vgic_io_device dist_iodev;
-	bool has_its;
-	u64 propbaser;
-	raw_spinlock_t lpi_list_lock;
-	struct list_head lpi_list_head;
-	int lpi_list_count;
-	struct list_head lpi_translation_cache;
-	struct vgic_state_iter *iter;
-	struct its_vm its_vm;
-};
-
-struct kvm_vmid {
-	u64 vmid_gen;
-	u32 vmid;
-};
-
-struct kvm_pgtable;
-
-struct kvm_s2_mmu {
-	struct kvm_vmid vmid;
-	phys_addr_t pgd_phys;
-	struct kvm_pgtable *pgt;
-	int *last_vcpu_ran;
-	struct kvm *kvm;
-};
-
-struct kvm_vm_stat {
-	ulong remote_tlb_flush;
-};
-
-struct kvm_arch {
-	struct kvm_s2_mmu mmu;
-	u64 vtcr;
-	int max_vcpus;
-	struct vgic_dist vgic;
-	u32 psci_version;
-	bool return_nisv_io_abort_to_user;
-	long unsigned int *pmu_filter;
-	unsigned int pmuver;
-	u8 pfr0_csv2;
-};
-
-struct kvm_memslots;
-
-struct kvm_io_bus;
-
-struct kvm_irq_routing_table;
-
-struct kvm_stat_data;
-
-struct kvm {
-	spinlock_t mmu_lock;
-	struct mutex slots_lock;
-	struct mm_struct *mm;
-	struct kvm_memslots *memslots[1];
-	struct kvm_vcpu *vcpus[512];
-	atomic_t online_vcpus;
-	int created_vcpus;
-	int last_boosted_vcpu;
-	struct list_head vm_list;
-	struct mutex lock;
-	struct kvm_io_bus *buses[4];
-	struct {
-		spinlock_t lock;
-		struct list_head items;
-		struct list_head resampler_list;
-		struct mutex resampler_lock;
-	} irqfds;
-	struct list_head ioeventfds;
-	struct kvm_vm_stat stat;
-	struct kvm_arch arch;
-	refcount_t users_count;
-	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
-	spinlock_t ring_lock;
-	struct list_head coalesced_zones;
-	struct mutex irq_lock;
-	struct kvm_irq_routing_table *irq_routing;
-	struct hlist_head irq_ack_notifier_list;
-	struct mmu_notifier mmu_notifier;
-	long unsigned int mmu_notifier_seq;
-	long int mmu_notifier_count;
-	long int tlbs_dirty;
-	struct list_head devices;
-	u64 manual_dirty_log_protect;
-	struct dentry *debugfs_dentry;
-	struct kvm_stat_data **debugfs_stat_data;
-	struct srcu_struct srcu;
-	struct srcu_struct irq_srcu;
-	pid_t userspace_pid;
-	unsigned int max_halt_poll_ns;
-};
-
-struct kvm_io_range {
-	gpa_t addr;
-	int len;
-	struct kvm_io_device *dev;
-};
-
-struct kvm_io_bus {
-	int dev_count;
-	int ioeventfd_count;
-	struct kvm_io_range range[0];
+struct kvm_gfn_range {
+	struct kvm_memory_slot *slot;
+	gfn_t start;
+	gfn_t end;
+	pte_t pte;
+	bool may_block;
 };
 
 enum {
@@ -18960,25 +66688,10 @@
 	kvm_pfn_t gfn;
 };
 
-struct kvm_irq_routing_table {
-	int chip[988];
-	u32 nr_rt_entries;
-	struct hlist_head map[0];
-};
-
-struct kvm_memslots {
-	u64 generation;
-	short int id_to_index[512];
-	atomic_t lru_slot;
-	int used_slots;
-	struct kvm_memory_slot memslots[0];
-};
-
-struct kvm_stats_debugfs_item;
-
-struct kvm_stat_data {
-	struct kvm *kvm;
-	struct kvm_stats_debugfs_item *dbgfs_item;
+struct kvm_memslot_iter {
+	struct kvm_memslots *slots;
+	struct rb_node *node;
+	struct kvm_memory_slot *slot;
 };
 
 enum kvm_mr_change {
@@ -18988,52 +66701,8 @@
 	KVM_MR_FLAGS_ONLY = 3,
 };
 
-enum kvm_stat_kind {
-	KVM_STAT_VM = 0,
-	KVM_STAT_VCPU = 1,
-};
-
-struct kvm_stats_debugfs_item {
-	const char *name;
-	int offset;
-	enum kvm_stat_kind kind;
-	int mode;
-};
-
-struct kvm_device_ops {
-	const char *name;
-	int (*create)(struct kvm_device *, u32);
-	void (*init)(struct kvm_device *);
-	void (*destroy)(struct kvm_device *);
-	void (*release)(struct kvm_device *);
-	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
-	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
-	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
-};
-
 typedef int (*kvm_vm_thread_fn_t)(struct kvm *, uintptr_t);
 
-struct miscdevice {
-	int minor;
-	const char *name;
-	const struct file_operations *fops;
-	struct list_head list;
-	struct device *parent;
-	struct device *this_device;
-	const struct attribute_group **groups;
-	const char *nodename;
-	umode_t mode;
-};
-
-struct syscore_ops {
-	struct list_head node;
-	int (*suspend)();
-	void (*resume)();
-	void (*shutdown)();
-};
-
 struct trace_event_raw_kvm_userspace_exit {
 	struct trace_entry ent;
 	__u32 reason;
@@ -19079,15 +66748,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_kvm_age_page {
-	struct trace_entry ent;
-	u64 hva;
-	u64 gfn;
-	u8 level;
-	u8 referenced;
-	char __data[0];
-};
-
 struct trace_event_raw_kvm_halt_poll_ns {
 	struct trace_entry ent;
 	bool grow;
@@ -19097,340 +66757,27 @@
 	char __data[0];
 };
 
-struct trace_event_data_offsets_kvm_userspace_exit {};
-
-struct trace_event_data_offsets_kvm_vcpu_wakeup {};
-
-struct trace_event_data_offsets_kvm_set_irq {};
-
-struct trace_event_data_offsets_kvm_ack_irq {};
-
-struct trace_event_data_offsets_kvm_mmio {};
-
-struct trace_event_data_offsets_kvm_fpu {};
-
-struct trace_event_data_offsets_kvm_age_page {};
-
-struct trace_event_data_offsets_kvm_halt_poll_ns {};
-
-typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
-
-typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
-
-typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
-
-typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
-
-typedef void (*btf_trace_kvm_fpu)(void *, int);
-
-typedef void (*btf_trace_kvm_age_page)(void *, ulong, int, struct kvm_memory_slot *, int);
-
-typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
-
-struct kvm_cpu_compat_check {
-	void *opaque;
-	int *ret;
-};
-
-struct kvm_vm_worker_thread_context {
-	struct kvm *kvm;
-	struct task_struct *parent;
-	struct completion init_done;
-	kvm_vm_thread_fn_t thread_fn;
-	uintptr_t data;
-	int err;
-};
-
-struct kvm_coalesced_mmio_dev {
-	struct list_head list;
-	struct kvm_io_device dev;
-	struct kvm *kvm;
-	struct kvm_coalesced_mmio_zone zone;
-};
-
-enum {
-	WORK_STRUCT_PENDING_BIT = 0,
-	WORK_STRUCT_DELAYED_BIT = 1,
-	WORK_STRUCT_PWQ_BIT = 2,
-	WORK_STRUCT_LINKED_BIT = 3,
-	WORK_STRUCT_COLOR_SHIFT = 4,
-	WORK_STRUCT_COLOR_BITS = 4,
-	WORK_STRUCT_PENDING = 1,
-	WORK_STRUCT_DELAYED = 2,
-	WORK_STRUCT_PWQ = 4,
-	WORK_STRUCT_LINKED = 8,
-	WORK_STRUCT_STATIC = 0,
-	WORK_NR_COLORS = 15,
-	WORK_NO_COLOR = 15,
-	WORK_CPU_UNBOUND = 128,
-	WORK_STRUCT_FLAG_BITS = 8,
-	WORK_OFFQ_FLAG_BASE = 4,
-	__WORK_OFFQ_CANCELING = 4,
-	WORK_OFFQ_CANCELING = 16,
-	WORK_OFFQ_FLAG_BITS = 1,
-	WORK_OFFQ_POOL_SHIFT = 5,
-	WORK_OFFQ_LEFT = 59,
-	WORK_OFFQ_POOL_BITS = 31,
-	WORK_OFFQ_POOL_NONE = 2147483647,
-	WORK_STRUCT_FLAG_MASK = 255,
-	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
-	WORK_STRUCT_NO_POOL = 4294967264,
-	WORK_BUSY_PENDING = 1,
-	WORK_BUSY_RUNNING = 2,
-	WORKER_DESC_LEN = 24,
-};
-
-struct irq_bypass_consumer;
-
-struct irq_bypass_producer {
-	struct list_head node;
-	void *token;
-	int irq;
-	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*stop)(struct irq_bypass_producer *);
-	void (*start)(struct irq_bypass_producer *);
-};
-
-struct irq_bypass_consumer {
-	struct list_head node;
-	void *token;
-	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*stop)(struct irq_bypass_consumer *);
-	void (*start)(struct irq_bypass_consumer *);
-};
-
-enum {
-	kvm_ioeventfd_flag_nr_datamatch = 0,
-	kvm_ioeventfd_flag_nr_pio = 1,
-	kvm_ioeventfd_flag_nr_deassign = 2,
-	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
-	kvm_ioeventfd_flag_nr_fast_mmio = 4,
-	kvm_ioeventfd_flag_nr_max = 5,
-};
-
-struct fd {
-	struct file *file;
-	unsigned int flags;
-};
-
-struct kvm_s390_adapter_int {
-	u64 ind_addr;
-	u64 summary_addr;
-	u64 ind_offset;
-	u32 summary_offset;
-	u32 adapter_id;
-};
-
-struct kvm_hv_sint {
-	u32 vcpu;
-	u32 sint;
-};
-
-struct kvm_kernel_irq_routing_entry {
-	u32 gsi;
-	u32 type;
-	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
-	union {
-		struct {
-			unsigned int irqchip;
-			unsigned int pin;
-		} irqchip;
-		struct {
-			u32 address_lo;
-			u32 address_hi;
-			u32 data;
-			u32 flags;
-			u32 devid;
-		} msi;
-		struct kvm_s390_adapter_int adapter;
-		struct kvm_hv_sint hv_sint;
-	};
-	struct hlist_node link;
-};
-
-struct kvm_irq_ack_notifier {
-	struct hlist_node link;
-	unsigned int gsi;
-	void (*irq_acked)(struct kvm_irq_ack_notifier *);
-};
-
-typedef struct poll_table_struct poll_table;
-
-struct kvm_kernel_irqfd_resampler {
-	struct kvm *kvm;
-	struct list_head list;
-	struct kvm_irq_ack_notifier notifier;
-	struct list_head link;
-};
-
-struct kvm_kernel_irqfd {
-	struct kvm *kvm;
-	wait_queue_entry_t wait;
-	struct kvm_kernel_irq_routing_entry irq_entry;
-	seqcount_spinlock_t irq_entry_sc;
-	int gsi;
-	struct work_struct inject;
-	struct kvm_kernel_irqfd_resampler *resampler;
-	struct eventfd_ctx *resamplefd;
-	struct list_head resampler_link;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	poll_table pt;
-	struct work_struct shutdown;
-	struct irq_bypass_consumer consumer;
-	struct irq_bypass_producer *producer;
-};
-
-struct _ioeventfd {
-	struct list_head list;
-	u64 addr;
-	int length;
-	struct eventfd_ctx *eventfd;
-	u64 datamatch;
-	struct kvm_io_device dev;
-	u8 bus_idx;
-	bool wildcard;
-};
-
-struct vfio_group;
-
-struct kvm_vfio_group {
-	struct list_head node;
-	struct vfio_group *vfio_group;
-};
-
-struct kvm_vfio {
-	struct list_head group_list;
-	struct mutex lock;
-	bool noncoherent;
-};
-
-struct kvm_vcpu_init {
-	__u32 target;
-	__u32 features[7];
-};
-
-struct kvm_vcpu_events {
-	struct {
-		__u8 serror_pending;
-		__u8 serror_has_esr;
-		__u8 ext_dabt_pending;
-		__u8 pad[5];
-		__u64 serror_esr;
-	} exception;
-	__u32 reserved[12];
-};
-
-struct kvm_reg_list {
-	__u64 n;
-	__u64 reg[0];
-};
-
-struct kvm_one_reg {
-	__u64 id;
-	__u64 addr;
-};
-
-struct kvm_arm_device_addr {
-	__u64 id;
-	__u64 addr;
-};
-
-enum vgic_type {
-	VGIC_V2 = 0,
-	VGIC_V3 = 1,
-};
-
-struct vgic_global {
-	enum vgic_type type;
-	phys_addr_t vcpu_base;
-	void *vcpu_base_va;
-	void *vcpu_hyp_va;
-	void *vctrl_base;
-	void *vctrl_hyp;
-	int nr_lr;
-	unsigned int maint_irq;
-	int max_gic_vcpus;
-	bool can_emulate_gicv2;
-	bool has_gicv4;
-	bool has_gicv4_1;
-	struct static_key_false gicv3_cpuif;
-	u32 ich_vtr_el2;
-};
-
-struct timer_map {
-	struct arch_timer_context *direct_vtimer;
-	struct arch_timer_context *direct_ptimer;
-	struct arch_timer_context *emul_ptimer;
-};
-
-typedef u64 kvm_pte_t;
-
-struct kvm_pgtable {
-	u32 ia_bits;
-	u32 start_level;
-	kvm_pte_t *pgd;
-	struct kvm_s2_mmu *mmu;
-};
-
-struct kvm_pmu_events {
-	u32 events_host;
-	u32 events_guest;
-};
-
-struct kvm_host_data {
-	struct kvm_cpu_context host_ctxt;
-	struct kvm_pmu_events pmu_events;
-	long: 64;
-};
-
-struct trace_event_raw_kvm_entry {
+struct trace_event_raw_kvm_dirty_ring_push {
 	struct trace_entry ent;
-	long unsigned int vcpu_pc;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
+	u32 slot;
+	u64 offset;
 	char __data[0];
 };
 
-struct trace_event_raw_kvm_exit {
+struct trace_event_raw_kvm_dirty_ring_reset {
 	struct trace_entry ent;
-	int ret;
-	unsigned int esr_ec;
-	long unsigned int vcpu_pc;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
 	char __data[0];
 };
 
-struct trace_event_raw_kvm_guest_fault {
+struct trace_event_raw_kvm_dirty_ring_exit {
 	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int hsr;
-	long unsigned int hxfar;
-	long long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_access_fault {
-	struct trace_entry ent;
-	long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_irq_line {
-	struct trace_entry ent;
-	unsigned int type;
-	int vcpu_idx;
-	int irq_num;
-	int level;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_mmio_emulate {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int instr;
-	long unsigned int cpsr;
+	int vcpu_id;
 	char __data[0];
 };
 
@@ -19460,78 +66807,25 @@
 	char __data[0];
 };
 
-struct trace_event_raw_kvm_set_way_flush {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool cache;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_userspace_exit {};
 
-struct trace_event_raw_kvm_toggle_cache {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool was;
-	bool now;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_vcpu_wakeup {};
 
-struct trace_event_raw_kvm_timer_update_irq {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	int level;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_set_irq {};
 
-struct trace_event_raw_kvm_get_timer_map {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	int direct_vtimer;
-	int direct_ptimer;
-	int emul_ptimer;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_ack_irq {};
 
-struct trace_event_raw_kvm_timer_save_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_mmio {};
 
-struct trace_event_raw_kvm_timer_restore_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_fpu {};
 
-struct trace_event_raw_kvm_timer_hrtimer_expire {
-	struct trace_entry ent;
-	int timer_idx;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_halt_poll_ns {};
 
-struct trace_event_raw_kvm_timer_emulate {
-	struct trace_entry ent;
-	int timer_idx;
-	bool should_fire;
-	char __data[0];
-};
+struct trace_event_data_offsets_kvm_dirty_ring_push {};
 
-struct trace_event_data_offsets_kvm_entry {};
+struct trace_event_data_offsets_kvm_dirty_ring_reset {};
 
-struct trace_event_data_offsets_kvm_exit {};
-
-struct trace_event_data_offsets_kvm_guest_fault {};
-
-struct trace_event_data_offsets_kvm_access_fault {};
-
-struct trace_event_data_offsets_kvm_irq_line {};
-
-struct trace_event_data_offsets_kvm_mmio_emulate {};
+struct trace_event_data_offsets_kvm_dirty_ring_exit {};
 
 struct trace_event_data_offsets_kvm_unmap_hva_range {};
 
@@ -19541,33 +66835,25 @@
 
 struct trace_event_data_offsets_kvm_test_age_hva {};
 
-struct trace_event_data_offsets_kvm_set_way_flush {};
+typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
 
-struct trace_event_data_offsets_kvm_toggle_cache {};
+typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
 
-struct trace_event_data_offsets_kvm_timer_update_irq {};
+typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
 
-struct trace_event_data_offsets_kvm_get_timer_map {};
+typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
 
-struct trace_event_data_offsets_kvm_timer_save_state {};
+typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
 
-struct trace_event_data_offsets_kvm_timer_restore_state {};
+typedef void (*btf_trace_kvm_fpu)(void *, int);
 
-struct trace_event_data_offsets_kvm_timer_hrtimer_expire {};
+typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
 
-struct trace_event_data_offsets_kvm_timer_emulate {};
+typedef void (*btf_trace_kvm_dirty_ring_push)(void *, struct kvm_dirty_ring *, u32, u64);
 
-typedef void (*btf_trace_kvm_entry)(void *, long unsigned int);
+typedef void (*btf_trace_kvm_dirty_ring_reset)(void *, struct kvm_dirty_ring *);
 
-typedef void (*btf_trace_kvm_exit)(void *, int, unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_guest_fault)(void *, long unsigned int, long unsigned int, long unsigned int, long long unsigned int);
-
-typedef void (*btf_trace_kvm_access_fault)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_irq_line)(void *, unsigned int, int, int, int);
-
-typedef void (*btf_trace_kvm_mmio_emulate)(void *, long unsigned int, long unsigned int, long unsigned int);
+typedef void (*btf_trace_kvm_dirty_ring_exit)(void *, struct kvm_vcpu *);
 
 typedef void (*btf_trace_kvm_unmap_hva_range)(void *, long unsigned int, long unsigned int);
 
@@ -19577,300 +66863,35 @@
 
 typedef void (*btf_trace_kvm_test_age_hva)(void *, long unsigned int);
 
-typedef void (*btf_trace_kvm_set_way_flush)(void *, long unsigned int, bool);
+typedef bool (*hva_handler_t)(struct kvm *, struct kvm_gfn_range *);
 
-typedef void (*btf_trace_kvm_toggle_cache)(void *, long unsigned int, bool, bool);
+typedef void (*on_lock_fn_t)(struct kvm *, long unsigned int, long unsigned int);
 
-typedef void (*btf_trace_kvm_timer_update_irq)(void *, long unsigned int, __u32, int);
+typedef void (*on_unlock_fn_t)(struct kvm *);
 
-typedef void (*btf_trace_kvm_get_timer_map)(void *, long unsigned int, struct timer_map *);
-
-typedef void (*btf_trace_kvm_timer_save_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_restore_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_hrtimer_expire)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_emulate)(void *, struct arch_timer_context *, bool);
-
-enum kvm_pgtable_prot {
-	KVM_PGTABLE_PROT_X = 1,
-	KVM_PGTABLE_PROT_W = 2,
-	KVM_PGTABLE_PROT_R = 4,
-	KVM_PGTABLE_PROT_DEVICE = 8,
+struct kvm_hva_range {
+	long unsigned int start;
+	long unsigned int end;
+	pte_t pte;
+	hva_handler_t handler;
+	on_lock_fn_t on_lock;
+	on_unlock_fn_t on_unlock;
+	bool flush_on_ret;
+	bool may_block;
 };
 
-typedef long unsigned int hva_t;
-
-enum kvm_arch_timers {
-	TIMER_PTIMER = 0,
-	TIMER_VTIMER = 1,
-	NR_KVM_TIMERS = 2,
+struct kvm_cpu_compat_check {
+	void *opaque;
+	int *ret;
 };
 
-enum exception_type {
-	except_type_sync = 0,
-	except_type_irq = 128,
-	except_type_fiq = 256,
-	except_type_serror = 384,
-};
-
-struct sys_reg_params;
-
-struct sys_reg_desc {
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	bool (*access)(struct kvm_vcpu *, struct sys_reg_params *, const struct sys_reg_desc *);
-	void (*reset)(struct kvm_vcpu *, const struct sys_reg_desc *);
-	int reg;
-	u64 val;
-	int (*__get_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	int (*set_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	unsigned int (*visibility)(const struct kvm_vcpu *, const struct sys_reg_desc *);
-};
-
-struct sys_reg_params {
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	u64 regval;
-	bool is_write;
-	bool is_aarch32;
-	bool is_32bit;
-};
-
-struct trace_event_raw_kvm_wfx_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_wfe;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_hvc_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int r0;
-	long unsigned int imm;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_setup_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_clear_debug {
-	struct trace_entry ent;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_set_dreg32 {
-	struct trace_entry ent;
-	const char *name;
-	__u32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_set_regset {
-	struct trace_entry ent;
-	const char *name;
-	int len;
-	u64 ctrls[16];
-	u64 values[16];
-	char __data[0];
-};
-
-struct trace_event_raw_trap_reg {
-	struct trace_entry ent;
-	const char *fn;
-	int reg;
-	bool is_write;
-	u64 write_value;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_handle_sys_reg {
-	struct trace_entry ent;
-	long unsigned int hsr;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_sys_access {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_write;
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_guest_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_wfx_arm64 {};
-
-struct trace_event_data_offsets_kvm_hvc_arm64 {};
-
-struct trace_event_data_offsets_kvm_arm_setup_debug {};
-
-struct trace_event_data_offsets_kvm_arm_clear_debug {};
-
-struct trace_event_data_offsets_kvm_arm_set_dreg32 {};
-
-struct trace_event_data_offsets_kvm_arm_set_regset {};
-
-struct trace_event_data_offsets_trap_reg {};
-
-struct trace_event_data_offsets_kvm_handle_sys_reg {};
-
-struct trace_event_data_offsets_kvm_sys_access {};
-
-struct trace_event_data_offsets_kvm_set_guest_debug {};
-
-typedef void (*btf_trace_kvm_wfx_arm64)(void *, long unsigned int, bool);
-
-typedef void (*btf_trace_kvm_hvc_arm64)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_arm_setup_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef void (*btf_trace_kvm_arm_clear_debug)(void *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_dreg32)(void *, const char *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_regset)(void *, const char *, int, __u64 *, __u64 *);
-
-typedef void (*btf_trace_trap_reg)(void *, const char *, int, bool, u64);
-
-typedef void (*btf_trace_kvm_handle_sys_reg)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_sys_access)(void *, long unsigned int, struct sys_reg_params *, const struct sys_reg_desc *);
-
-typedef void (*btf_trace_kvm_set_guest_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef int (*exit_handle_fn)(struct kvm_vcpu *);
-
-struct sve_state_reg_region {
-	unsigned int koffset;
-	unsigned int klen;
-	unsigned int upad;
-};
-
-struct __va_list {
-	void *__stack;
-	void *__gr_top;
-	void *__vr_top;
-	int __gr_offs;
-	int __vr_offs;
-};
-
-typedef struct __va_list __gnuc_va_list;
-
-typedef __gnuc_va_list va_list;
-
-struct va_format {
-	const char *fmt;
-	va_list *va;
-};
-
-enum kvm_arch_timer_regs {
-	TIMER_REG_CNT = 0,
-	TIMER_REG_CVAL = 1,
-	TIMER_REG_TVAL = 2,
-	TIMER_REG_CTL = 3,
-};
-
-struct vgic_vmcr {
-	u32 grpen0;
-	u32 grpen1;
-	u32 ackctl;
-	u32 fiqen;
-	u32 cbpr;
-	u32 eoim;
-	u32 abpr;
-	u32 bpr;
-	u32 pmr;
-};
-
-struct cyclecounter {
-	u64 (*read)(const struct cyclecounter *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-};
-
-struct timecounter {
-	const struct cyclecounter *cc;
-	u64 cycle_last;
-	u64 nsec;
-	u64 mask;
-	u64 frac;
-};
-
-struct arch_timer_kvm_info {
-	struct timecounter timecounter;
-	int virtual_irq;
-	int physical_irq;
-};
-
-enum hrtimer_mode {
-	HRTIMER_MODE_ABS = 0,
-	HRTIMER_MODE_REL = 1,
-	HRTIMER_MODE_PINNED = 2,
-	HRTIMER_MODE_SOFT = 4,
-	HRTIMER_MODE_HARD = 8,
-	HRTIMER_MODE_ABS_PINNED = 2,
-	HRTIMER_MODE_REL_PINNED = 3,
-	HRTIMER_MODE_ABS_SOFT = 4,
-	HRTIMER_MODE_REL_SOFT = 5,
-	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
-	HRTIMER_MODE_REL_PINNED_SOFT = 7,
-	HRTIMER_MODE_ABS_HARD = 8,
-	HRTIMER_MODE_REL_HARD = 9,
-	HRTIMER_MODE_ABS_PINNED_HARD = 10,
-	HRTIMER_MODE_REL_PINNED_HARD = 11,
-};
-
-struct trace_event_raw_vgic_update_irq_pending {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	bool level;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_vgic_update_irq_pending {};
-
-typedef void (*btf_trace_vgic_update_irq_pending)(void *, long unsigned int, __u32, bool);
-
-enum gic_type {
-	GIC_V2 = 0,
-	GIC_V3 = 1,
-};
-
-struct gic_kvm_info {
-	enum gic_type type;
-	struct resource vcpu;
-	unsigned int maint_irq;
-	struct resource vctrl;
-	bool has_v4;
-	bool has_v4_1;
+struct kvm_vm_worker_thread_context {
+	struct kvm *kvm;
+	struct task_struct *parent;
+	struct completion init_done;
+	kvm_vm_thread_fn_t thread_fn;
+	uintptr_t data;
+	int err;
 };
 
 struct its_vlpi_map {
@@ -19881,1271 +66902,75 @@
 	bool db_enabled;
 };
 
-struct vgic_reg_attr {
-	struct kvm_vcpu *vcpu;
-	gpa_t addr;
+struct kvm_s390_adapter_int {
+	u64 ind_addr;
+	u64 summary_addr;
+	u64 ind_offset;
+	u32 summary_offset;
+	u32 adapter_id;
 };
 
-struct its_device {
-	struct list_head dev_list;
-	struct list_head itt_head;
-	u32 num_eventid_bits;
-	gpa_t itt_addr;
-	u32 device_id;
+struct kvm_hv_sint {
+	u32 vcpu;
+	u32 sint;
 };
 
-struct its_collection {
-	struct list_head coll_list;
-	u32 collection_id;
-	u32 target_addr;
+struct kvm_xen_evtchn {
+	u32 port;
+	u32 vcpu_id;
+	int vcpu_idx;
+	u32 priority;
 };
 
-struct its_ite {
-	struct list_head ite_list;
-	struct vgic_irq *irq;
-	struct its_collection *collection;
-	u32 event_id;
-};
-
-struct vgic_translation_cache_entry {
-	struct list_head entry;
-	phys_addr_t db;
-	u32 devid;
-	u32 eventid;
-	struct vgic_irq *irq;
-};
-
-struct vgic_its_abi {
-	int cte_esz;
-	int dte_esz;
-	int ite_esz;
-	int (*save_tables)(struct vgic_its *);
-	int (*restore_tables)(struct vgic_its *);
-	int (*commit)(struct vgic_its *);
-};
-
-typedef int (*entry_fn_t)(struct vgic_its *, u32, void *, void *);
-
-struct vgic_state_iter {
-	int nr_cpus;
-	int nr_spis;
-	int nr_lpis;
-	int dist_id;
-	int vcpu_id;
-	int intid;
-	int lpi_idx;
-	u32 *lpi_array;
-};
-
-struct kvm_pmu_event_filter {
-	__u16 base_event;
-	__u16 nevents;
-	__u8 action;
-	__u8 pad[3];
-};
-
-struct tlb_inv_context {
-	long unsigned int flags;
-	u64 tcr;
-	u64 sctlr;
-};
-
-struct tlb_inv_context___2 {
-	u64 tcr;
-};
-
-enum kvm_pgtable_walk_flags {
-	KVM_PGTABLE_WALK_LEAF = 1,
-	KVM_PGTABLE_WALK_TABLE_PRE = 2,
-	KVM_PGTABLE_WALK_TABLE_POST = 4,
-};
-
-typedef int (*kvm_pgtable_visitor_fn_t)(u64, u64, u32, kvm_pte_t *, enum kvm_pgtable_walk_flags, void * const);
-
-struct kvm_pgtable_walker {
-	const kvm_pgtable_visitor_fn_t cb;
-	void * const arg;
-	const enum kvm_pgtable_walk_flags flags;
-};
-
-struct kvm_pgtable_walk_data {
-	struct kvm_pgtable *pgt;
-	struct kvm_pgtable_walker *walker;
-	u64 addr;
-	u64 end;
-};
-
-struct hyp_map_data {
-	u64 phys;
-	kvm_pte_t attr;
-};
-
-struct stage2_map_data {
-	u64 phys;
-	kvm_pte_t attr;
-	kvm_pte_t *anchor;
-	struct kvm_s2_mmu *mmu;
-	struct kvm_mmu_memory_cache *memcache;
-};
-
-struct stage2_attr_data {
-	kvm_pte_t attr_set;
-	kvm_pte_t attr_clr;
-	kvm_pte_t pte;
-	u32 level;
-};
-
-typedef s8 int8_t;
-
-typedef s16 int16_t;
-
-typedef u16 uint16_t;
-
-typedef uint64_t xen_pfn_t;
-
-typedef uint64_t xen_ulong_t;
-
-typedef struct {
+struct kvm_kernel_irq_routing_entry {
+	u32 gsi;
+	u32 type;
+	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
 	union {
-		unsigned char *p;
-		uint64_t q;
+		struct {
+			unsigned int irqchip;
+			unsigned int pin;
+		} irqchip;
+		struct {
+			u32 address_lo;
+			u32 address_hi;
+			u32 data;
+			u32 flags;
+			u32 devid;
+		} msi;
+		struct kvm_s390_adapter_int adapter;
+		struct kvm_hv_sint hv_sint;
+		struct kvm_xen_evtchn xen_evtchn;
 	};
-} __guest_handle_uchar;
+	struct hlist_node link;
+};
 
-typedef struct {
-	union {
-		char *p;
-		uint64_t q;
-	};
-} __guest_handle_char;
+struct psci_0_1_function_ids {
+	u32 cpu_suspend;
+	u32 cpu_on;
+	u32 cpu_off;
+	u32 migrate;
+};
 
-typedef struct {
-	union {
-		void *p;
-		uint64_t q;
-	};
-} __guest_handle_void;
-
-typedef struct {
-	union {
-		uint64_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint64_t;
-
-typedef struct {
-	union {
-		uint32_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint32_t;
-
-struct arch_vcpu_info {};
-
-struct arch_shared_info {};
-
-struct pvclock_vcpu_time_info {
+struct kvm_host_psci_config {
 	u32 version;
-	u32 pad0;
-	u64 tsc_timestamp;
-	u64 system_time;
-	u32 tsc_to_system_mul;
-	s8 tsc_shift;
-	u8 flags;
-	u8 pad[2];
+	struct psci_0_1_function_ids function_ids_0_1;
+	bool psci_0_1_cpu_suspend_implemented;
+	bool psci_0_1_cpu_on_implemented;
+	bool psci_0_1_cpu_off_implemented;
+	bool psci_0_1_migrate_implemented;
 };
 
-struct pvclock_wall_clock {
-	u32 version;
-	u32 sec;
-	u32 nsec;
-	u32 sec_hi;
+struct psci_boot_args {
+	atomic_t lock;
+	long unsigned int pc;
+	long unsigned int r0;
 };
 
-typedef uint16_t domid_t;
-
-struct vcpu_info {
-	uint8_t evtchn_upcall_pending;
-	uint8_t evtchn_upcall_mask;
-	xen_ulong_t evtchn_pending_sel;
-	struct arch_vcpu_info arch;
-	struct pvclock_vcpu_time_info time;
-};
-
-struct shared_info {
-	struct vcpu_info vcpu_info[1];
-	xen_ulong_t evtchn_pending[64];
-	xen_ulong_t evtchn_mask[64];
-	struct pvclock_wall_clock wc;
-	struct arch_shared_info arch;
-};
-
-struct start_info {
-	char magic[32];
-	long unsigned int nr_pages;
-	long unsigned int shared_info;
-	uint32_t flags;
-	xen_pfn_t store_mfn;
-	uint32_t store_evtchn;
-	union {
-		struct {
-			xen_pfn_t mfn;
-			uint32_t evtchn;
-		} domU;
-		struct {
-			uint32_t info_off;
-			uint32_t info_size;
-		} dom0;
-	} console;
-	long unsigned int pt_base;
-	long unsigned int nr_pt_frames;
-	long unsigned int mfn_list;
-	long unsigned int mod_start;
-	long unsigned int mod_len;
-	int8_t cmd_line[1024];
-	long unsigned int first_p2m_pfn;
-	long unsigned int nr_p2m_frames;
-};
-
-enum vdso_clock_mode {
-	VDSO_CLOCKMODE_NONE = 0,
-	VDSO_CLOCKMODE_ARCHTIMER = 1,
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = 2,
-	VDSO_CLOCKMODE_MAX = 3,
-	VDSO_CLOCKMODE_TIMENS = 2147483647,
-};
-
-struct clocksource {
-	u64 (*read)(struct clocksource *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	u64 max_idle_ns;
-	u32 maxadj;
-	u64 max_cycles;
-	const char *name;
-	struct list_head list;
-	int rating;
-	enum vdso_clock_mode vdso_clock_mode;
-	long unsigned int flags;
-	int (*enable)(struct clocksource *);
-	void (*disable)(struct clocksource *);
-	void (*suspend)(struct clocksource *);
-	void (*resume)(struct clocksource *);
-	void (*mark_unstable)(struct clocksource *);
-	void (*tick_stable)(struct clocksource *);
-	struct module *owner;
-};
-
-struct sched_shutdown {
-	unsigned int reason;
-};
-
-struct xenpf_settime32 {
-	uint32_t secs;
-	uint32_t nsecs;
-	uint64_t system_time;
-};
-
-struct xenpf_settime64 {
-	uint64_t secs;
-	uint32_t nsecs;
-	uint32_t mbz;
-	uint64_t system_time;
-};
-
-struct xenpf_add_memtype {
-	xen_pfn_t mfn;
-	uint64_t nr_mfns;
-	uint32_t type;
-	uint32_t handle;
-	uint32_t reg;
-};
-
-struct xenpf_del_memtype {
-	uint32_t handle;
-	uint32_t reg;
-};
-
-struct xenpf_read_memtype {
-	uint32_t reg;
-	xen_pfn_t mfn;
-	uint64_t nr_mfns;
-	uint32_t type;
-};
-
-struct xenpf_microcode_update {
-	__guest_handle_void data;
-	uint32_t length;
-};
-
-struct xenpf_platform_quirk {
-	uint32_t quirk_id;
-};
-
-struct xenpf_efi_time {
-	uint16_t year;
-	uint8_t month;
-	uint8_t day;
-	uint8_t hour;
-	uint8_t min;
-	uint8_t sec;
-	uint32_t ns;
-	int16_t tz;
-	uint8_t daylight;
-};
-
-struct xenpf_efi_guid {
-	uint32_t data1;
-	uint16_t data2;
-	uint16_t data3;
-	uint8_t data4[8];
-};
-
-struct xenpf_efi_runtime_call {
-	uint32_t function;
-	uint32_t misc;
-	xen_ulong_t status;
-	union {
-		struct {
-			struct xenpf_efi_time time;
-			uint32_t resolution;
-			uint32_t accuracy;
-		} get_time;
-		struct xenpf_efi_time set_time;
-		struct xenpf_efi_time get_wakeup_time;
-		struct xenpf_efi_time set_wakeup_time;
-		struct {
-			__guest_handle_void name;
-			xen_ulong_t size;
-			__guest_handle_void data;
-			struct xenpf_efi_guid vendor_guid;
-		} get_variable;
-		struct {
-			__guest_handle_void name;
-			xen_ulong_t size;
-			__guest_handle_void data;
-			struct xenpf_efi_guid vendor_guid;
-		} set_variable;
-		struct {
-			xen_ulong_t size;
-			__guest_handle_void name;
-			struct xenpf_efi_guid vendor_guid;
-		} get_next_variable_name;
-		struct {
-			uint32_t attr;
-			uint64_t max_store_size;
-			uint64_t remain_store_size;
-			uint64_t max_size;
-		} query_variable_info;
-		struct {
-			__guest_handle_void capsule_header_array;
-			xen_ulong_t capsule_count;
-			uint64_t max_capsule_size;
-			uint32_t reset_type;
-		} query_capsule_capabilities;
-		struct {
-			__guest_handle_void capsule_header_array;
-			xen_ulong_t capsule_count;
-			uint64_t sg_list;
-		} update_capsule;
-	} u;
-};
-
-union xenpf_efi_info {
-	uint32_t version;
-	struct {
-		uint64_t addr;
-		uint32_t nent;
-	} cfg;
-	struct {
-		uint32_t revision;
-		uint32_t bufsz;
-		__guest_handle_void name;
-	} vendor;
-	struct {
-		uint64_t addr;
-		uint64_t size;
-		uint64_t attr;
-		uint32_t type;
-	} mem;
-};
-
-struct xenpf_firmware_info {
-	uint32_t type;
-	uint32_t index;
-	union {
-		struct {
-			uint8_t device;
-			uint8_t version;
-			uint16_t interface_support;
-			uint16_t legacy_max_cylinder;
-			uint8_t legacy_max_head;
-			uint8_t legacy_sectors_per_track;
-			__guest_handle_void edd_params;
-		} disk_info;
-		struct {
-			uint8_t device;
-			uint32_t mbr_signature;
-		} disk_mbr_signature;
-		struct {
-			uint8_t capabilities;
-			uint8_t edid_transfer_time;
-			__guest_handle_uchar edid;
-		} vbeddc_info;
-		union xenpf_efi_info efi_info;
-		uint8_t kbd_shift_flags;
-	} u;
-};
-
-struct xenpf_enter_acpi_sleep {
-	uint16_t val_a;
-	uint16_t val_b;
-	uint32_t sleep_state;
-	uint32_t flags;
-};
-
-struct xenpf_change_freq {
-	uint32_t flags;
-	uint32_t cpu;
-	uint64_t freq;
-};
-
-struct xenpf_getidletime {
-	__guest_handle_uchar cpumap_bitmap;
-	uint32_t cpumap_nr_cpus;
-	__guest_handle_uint64_t idletime;
-	uint64_t now;
-};
-
-struct xen_power_register {
-	uint32_t space_id;
-	uint32_t bit_width;
-	uint32_t bit_offset;
-	uint32_t access_size;
-	uint64_t address;
-};
-
-struct xen_processor_csd {
-	uint32_t domain;
-	uint32_t coord_type;
-	uint32_t num;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_csd *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_csd;
-
-struct xen_processor_cx {
-	struct xen_power_register reg;
-	uint8_t type;
-	uint32_t latency;
-	uint32_t power;
-	uint32_t dpcnt;
-	__guest_handle_xen_processor_csd dp;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_cx *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_cx;
-
-struct xen_processor_flags {
-	uint32_t bm_control: 1;
-	uint32_t bm_check: 1;
-	uint32_t has_cst: 1;
-	uint32_t power_setup_done: 1;
-	uint32_t bm_rld_set: 1;
-};
-
-struct xen_processor_power {
-	uint32_t count;
-	struct xen_processor_flags flags;
-	__guest_handle_xen_processor_cx states;
-};
-
-struct xen_pct_register {
-	uint8_t descriptor;
-	uint16_t length;
-	uint8_t space_id;
-	uint8_t bit_width;
-	uint8_t bit_offset;
-	uint8_t reserved;
-	uint64_t address;
-};
-
-struct xen_processor_px {
-	uint64_t core_frequency;
-	uint64_t power;
-	uint64_t transition_latency;
-	uint64_t bus_master_latency;
-	uint64_t control;
-	uint64_t status;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_px *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_px;
-
-struct xen_psd_package {
-	uint64_t num_entries;
-	uint64_t revision;
-	uint64_t domain;
-	uint64_t coord_type;
-	uint64_t num_processors;
-};
-
-struct xen_processor_performance {
-	uint32_t flags;
-	uint32_t platform_limit;
-	struct xen_pct_register control_register;
-	struct xen_pct_register status_register;
-	uint32_t state_count;
-	__guest_handle_xen_processor_px states;
-	struct xen_psd_package domain_info;
-	uint32_t shared_type;
-};
-
-struct xenpf_set_processor_pminfo {
-	uint32_t id;
-	uint32_t type;
-	union {
-		struct xen_processor_power power;
-		struct xen_processor_performance perf;
-		__guest_handle_uint32_t pdc;
-	};
-};
-
-struct xenpf_pcpuinfo {
-	uint32_t xen_cpuid;
-	uint32_t max_present;
-	uint32_t flags;
-	uint32_t apic_id;
-	uint32_t acpi_id;
-};
-
-struct xenpf_cpu_ol {
-	uint32_t cpuid;
-};
-
-struct xenpf_cpu_hotadd {
-	uint32_t apic_id;
-	uint32_t acpi_id;
-	uint32_t pxm;
-};
-
-struct xenpf_mem_hotadd {
-	uint64_t spfn;
-	uint64_t epfn;
-	uint32_t pxm;
-	uint32_t flags;
-};
-
-struct xenpf_core_parking {
-	uint32_t type;
-	uint32_t idle_nums;
-};
-
-struct xenpf_symdata {
-	uint32_t namelen;
-	uint32_t symnum;
-	__guest_handle_char name;
-	uint64_t address;
-	char type;
-};
-
-struct xen_platform_op {
-	uint32_t cmd;
-	uint32_t interface_version;
-	union {
-		struct xenpf_settime32 settime32;
-		struct xenpf_settime64 settime64;
-		struct xenpf_add_memtype add_memtype;
-		struct xenpf_del_memtype del_memtype;
-		struct xenpf_read_memtype read_memtype;
-		struct xenpf_microcode_update microcode;
-		struct xenpf_platform_quirk platform_quirk;
-		struct xenpf_efi_runtime_call efi_runtime_call;
-		struct xenpf_firmware_info firmware_info;
-		struct xenpf_enter_acpi_sleep enter_acpi_sleep;
-		struct xenpf_change_freq change_freq;
-		struct xenpf_getidletime getidletime;
-		struct xenpf_set_processor_pminfo set_pminfo;
-		struct xenpf_pcpuinfo pcpu_info;
-		struct xenpf_cpu_ol cpu_ol;
-		struct xenpf_cpu_hotadd cpu_add;
-		struct xenpf_mem_hotadd mem_add;
-		struct xenpf_core_parking core_parking;
-		struct xenpf_symdata symdata;
-		uint8_t pad[128];
-	} u;
-};
-
-struct xen_memory_region {
-	long unsigned int start_pfn;
-	long unsigned int n_pfns;
-};
-
-struct grant_frames {
-	xen_pfn_t *pfn;
-	unsigned int count;
-	void *vaddr;
-};
-
-struct xen_hvm_param {
-	domid_t domid;
-	uint32_t index;
-	uint64_t value;
-};
-
-struct vcpu_register_vcpu_info {
-	uint64_t mfn;
-	uint32_t offset;
-	uint32_t rsvd;
-};
-
-struct xen_add_to_physmap {
-	domid_t domid;
-	uint16_t size;
-	unsigned int space;
-	xen_ulong_t idx;
-	xen_pfn_t gpfn;
-};
-
-struct xsd_errors {
-	int errnum;
-	const char *errstring;
-};
-
-struct tk_read_base {
-	struct clocksource *clock;
-	u64 mask;
-	u64 cycle_last;
-	u32 mult;
-	u32 shift;
-	u64 xtime_nsec;
-	ktime_t base;
-	u64 base_real;
-};
-
-struct timekeeper {
-	struct tk_read_base tkr_mono;
-	struct tk_read_base tkr_raw;
-	u64 xtime_sec;
-	long unsigned int ktime_sec;
-	struct timespec64 wall_to_monotonic;
-	ktime_t offs_real;
-	ktime_t offs_boot;
-	ktime_t offs_tai;
-	s32 tai_offset;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-	ktime_t next_leap_ktime;
-	u64 raw_sec;
-	struct timespec64 monotonic_to_boot;
-	u64 cycle_interval;
-	u64 xtime_interval;
-	s64 xtime_remainder;
-	u64 raw_interval;
-	u64 ntp_tick;
-	s64 ntp_error;
-	u32 ntp_error_shift;
-	u32 ntp_err_mult;
-	u32 skip_second_overflow;
-};
-
-typedef uint16_t grant_status_t;
-
-typedef uint32_t grant_ref_t;
-
-typedef uint32_t grant_handle_t;
-
-struct gnttab_map_grant_ref {
-	uint64_t host_addr;
-	uint32_t flags;
-	grant_ref_t ref;
-	domid_t dom;
-	int16_t status;
-	grant_handle_t handle;
-	uint64_t dev_bus_addr;
-};
-
-struct gnttab_unmap_grant_ref {
-	uint64_t host_addr;
-	uint64_t dev_bus_addr;
-	grant_handle_t handle;
-	int16_t status;
-};
-
-struct xen_p2m_entry {
-	long unsigned int pfn;
-	long unsigned int mfn;
-	long unsigned int nr_pages;
-	struct rb_node rbnode_phys;
-};
-
-struct gnttab_cache_flush {
-	union {
-		uint64_t dev_bus_addr;
-		grant_ref_t ref;
-	} a;
-	uint16_t offset;
-	uint16_t length;
-	uint32_t op;
-};
-
-struct static_key_true {
-	struct static_key key;
-};
-
-enum tk_offsets {
-	TK_OFFS_REAL = 0,
-	TK_OFFS_BOOT = 1,
-	TK_OFFS_TAI = 2,
-	TK_OFFS_MAX = 3,
-};
-
-struct clone_args {
-	__u64 flags;
-	__u64 pidfd;
-	__u64 child_tid;
-	__u64 parent_tid;
-	__u64 exit_signal;
-	__u64 stack;
-	__u64 stack_size;
-	__u64 tls;
-	__u64 set_tid;
-	__u64 set_tid_size;
-	__u64 cgroup;
-};
-
-struct fdtable {
-	unsigned int max_fds;
-	struct file **fd;
-	long unsigned int *close_on_exec;
-	long unsigned int *open_fds;
-	long unsigned int *full_fds_bits;
-	struct callback_head rcu;
-};
-
-struct files_struct {
-	atomic_t count;
-	bool resize_in_progress;
-	wait_queue_head_t resize_wait;
-	struct fdtable *fdt;
-	struct fdtable fdtab;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t file_lock;
-	unsigned int next_fd;
-	long unsigned int close_on_exec_init[1];
-	long unsigned int open_fds_init[1];
-	long unsigned int full_fds_bits_init[1];
-	struct file *fd_array[64];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_identity {
-	struct files_struct *files;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *creds;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	long unsigned int fsize;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	refcount_t count;
-};
-
-struct io_uring_task {
-	struct xarray xa;
-	struct wait_queue_head wait;
-	struct file *last;
-	struct percpu_counter inflight;
-	struct io_identity __identity;
-	struct io_identity *identity;
-	atomic_t in_idle;
-	bool sqpoll;
-};
-
-struct robust_list {
-	struct robust_list *next;
-};
-
-struct robust_list_head {
-	struct robust_list list;
-	long int futex_offset;
-	struct robust_list *list_op_pending;
-};
-
-struct kernel_clone_args {
-	u64 flags;
-	int *pidfd;
-	int *child_tid;
-	int *parent_tid;
-	int exit_signal;
-	long unsigned int stack;
-	long unsigned int stack_size;
-	long unsigned int tls;
-	pid_t *set_tid;
-	size_t set_tid_size;
-	int cgroup;
-	struct cgroup *cgrp;
-	struct css_set *cset;
-};
-
-struct multiprocess_signals {
-	sigset_t signal;
-	struct hlist_node node;
-};
-
-typedef int (*proc_visitor)(struct task_struct *, void *);
-
-enum {
-	IOPRIO_CLASS_NONE = 0,
-	IOPRIO_CLASS_RT = 1,
-	IOPRIO_CLASS_BE = 2,
-	IOPRIO_CLASS_IDLE = 3,
-};
-
-enum {
-	FUTEX_STATE_OK = 0,
-	FUTEX_STATE_EXITING = 1,
-	FUTEX_STATE_DEAD = 2,
-};
-
-enum proc_hidepid {
-	HIDEPID_OFF = 0,
-	HIDEPID_NO_ACCESS = 1,
-	HIDEPID_INVISIBLE = 2,
-	HIDEPID_NOT_PTRACEABLE = 4,
-};
-
-enum proc_pidonly {
-	PROC_PIDONLY_OFF = 0,
-	PROC_PIDONLY_ON = 1,
-};
-
-struct proc_fs_info {
-	struct pid_namespace *pid_ns;
-	struct dentry *proc_self;
-	struct dentry *proc_thread_self;
-	kgid_t pid_gid;
-	enum proc_hidepid hide_pid;
-	enum proc_pidonly pidonly;
-};
-
-struct trace_event_raw_task_newtask {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	long unsigned int clone_flags;
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_task_rename {
-	struct trace_entry ent;
-	pid_t pid;
-	char oldcomm[16];
-	char newcomm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_task_newtask {};
-
-struct trace_event_data_offsets_task_rename {};
-
-typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
-
-typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
-
-struct taint_flag {
-	char c_true;
-	char c_false;
-	bool module;
-};
-
-enum ftrace_dump_mode {
-	DUMP_NONE = 0,
-	DUMP_ALL = 1,
-	DUMP_ORIG = 2,
-};
-
-enum kmsg_dump_reason {
-	KMSG_DUMP_UNDEF = 0,
-	KMSG_DUMP_PANIC = 1,
-	KMSG_DUMP_OOPS = 2,
-	KMSG_DUMP_EMERG = 3,
-	KMSG_DUMP_SHUTDOWN = 4,
-	KMSG_DUMP_MAX = 5,
-};
-
-enum con_flush_mode {
-	CONSOLE_FLUSH_PENDING = 0,
-	CONSOLE_REPLAY_ALL = 1,
-};
-
-struct warn_args {
-	const char *fmt;
-	va_list args;
-};
-
-enum hk_flags {
-	HK_FLAG_TIMER = 1,
-	HK_FLAG_RCU = 2,
-	HK_FLAG_MISC = 4,
-	HK_FLAG_SCHED = 8,
-	HK_FLAG_TICK = 16,
-	HK_FLAG_DOMAIN = 32,
-	HK_FLAG_WQ = 64,
-	HK_FLAG_MANAGED_IRQ = 128,
-	HK_FLAG_KTHREAD = 256,
-};
-
-enum cpuhp_smt_control {
-	CPU_SMT_ENABLED = 0,
-	CPU_SMT_DISABLED = 1,
-	CPU_SMT_FORCE_DISABLED = 2,
-	CPU_SMT_NOT_SUPPORTED = 3,
-	CPU_SMT_NOT_IMPLEMENTED = 4,
-};
-
-struct smp_hotplug_thread {
-	struct task_struct **store;
-	struct list_head list;
-	int (*thread_should_run)(unsigned int);
-	void (*thread_fn)(unsigned int);
-	void (*create)(unsigned int);
-	void (*setup)(unsigned int);
-	void (*cleanup)(unsigned int, bool);
-	void (*park)(unsigned int);
-	void (*unpark)(unsigned int);
-	bool selfparking;
-	const char *thread_comm;
-};
-
-struct trace_event_raw_cpuhp_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_multi_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_exit {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int state;
-	int idx;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpuhp_enter {};
-
-struct trace_event_data_offsets_cpuhp_multi_enter {};
-
-struct trace_event_data_offsets_cpuhp_exit {};
-
-typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
-
-typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
-
-typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
-
-struct cpuhp_cpu_state {
-	enum cpuhp_state state;
-	enum cpuhp_state target;
-	enum cpuhp_state fail;
-	struct task_struct *thread;
-	bool should_run;
-	bool rollback;
-	bool single;
-	bool bringup;
-	struct hlist_node *node;
-	struct hlist_node *last;
-	enum cpuhp_state cb_state;
-	int result;
-	struct completion done_up;
-	struct completion done_down;
-};
-
-struct cpuhp_step {
-	const char *name;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} startup;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} teardown;
-	struct hlist_head list;
-	bool cant_stop;
-	bool multi_instance;
-};
-
-enum cpu_mitigations {
-	CPU_MITIGATIONS_OFF = 0,
-	CPU_MITIGATIONS_AUTO = 1,
-	CPU_MITIGATIONS_AUTO_NOSMT = 2,
-};
-
-struct __kernel_old_timeval {
-	__kernel_long_t tv_sec;
-	__kernel_long_t tv_usec;
-};
-
-struct old_timeval32 {
-	old_time32_t tv_sec;
-	s32 tv_usec;
-};
-
-struct rusage {
-	struct __kernel_old_timeval ru_utime;
-	struct __kernel_old_timeval ru_stime;
-	__kernel_long_t ru_maxrss;
-	__kernel_long_t ru_ixrss;
-	__kernel_long_t ru_idrss;
-	__kernel_long_t ru_isrss;
-	__kernel_long_t ru_minflt;
-	__kernel_long_t ru_majflt;
-	__kernel_long_t ru_nswap;
-	__kernel_long_t ru_inblock;
-	__kernel_long_t ru_oublock;
-	__kernel_long_t ru_msgsnd;
-	__kernel_long_t ru_msgrcv;
-	__kernel_long_t ru_nsignals;
-	__kernel_long_t ru_nvcsw;
-	__kernel_long_t ru_nivcsw;
-};
-
-typedef u32 compat_uint_t;
-
-struct compat_rusage {
-	struct old_timeval32 ru_utime;
-	struct old_timeval32 ru_stime;
-	compat_long_t ru_maxrss;
-	compat_long_t ru_ixrss;
-	compat_long_t ru_idrss;
-	compat_long_t ru_isrss;
-	compat_long_t ru_minflt;
-	compat_long_t ru_majflt;
-	compat_long_t ru_nswap;
-	compat_long_t ru_inblock;
-	compat_long_t ru_oublock;
-	compat_long_t ru_msgsnd;
-	compat_long_t ru_msgrcv;
-	compat_long_t ru_nsignals;
-	compat_long_t ru_nvcsw;
-	compat_long_t ru_nivcsw;
-};
-
-struct waitid_info {
-	pid_t pid;
-	uid_t uid;
-	int status;
-	int cause;
-};
-
-struct wait_opts {
-	enum pid_type wo_type;
-	int wo_flags;
-	struct pid *wo_pid;
-	struct waitid_info *wo_info;
-	int wo_stat;
-	struct rusage *wo_rusage;
-	wait_queue_entry_t child_wait;
-	int notask_error;
-};
-
-typedef struct {
-	unsigned int __softirq_pending;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-} irq_cpustat_t;
-
-struct softirq_action {
-	void (*action)(struct softirq_action *);
-};
-
-struct tasklet_struct {
-	struct tasklet_struct *next;
-	long unsigned int state;
-	atomic_t count;
-	bool use_callback;
-	union {
-		void (*func)(long unsigned int);
-		void (*callback)(struct tasklet_struct *);
-	};
-	long unsigned int data;
-};
-
-enum {
-	TASKLET_STATE_SCHED = 0,
-	TASKLET_STATE_RUN = 1,
-};
-
-struct kernel_stat {
-	long unsigned int irqs_sum;
-	unsigned int softirqs[10];
-};
-
-struct trace_event_raw_irq_handler_entry {
-	struct trace_entry ent;
-	int irq;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_irq_handler_exit {
-	struct trace_entry ent;
-	int irq;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_softirq {
-	struct trace_entry ent;
-	unsigned int vec;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_irq_handler_entry {
-	u32 name;
-};
-
-struct trace_event_data_offsets_irq_handler_exit {};
-
-struct trace_event_data_offsets_softirq {};
-
-typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
-
-typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
-
-typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
-
-struct tasklet_head {
-	struct tasklet_struct *head;
-	struct tasklet_struct **tail;
-};
-
-enum {
-	IORES_DESC_NONE = 0,
-	IORES_DESC_CRASH_KERNEL = 1,
-	IORES_DESC_ACPI_TABLES = 2,
-	IORES_DESC_ACPI_NV_STORAGE = 3,
-	IORES_DESC_PERSISTENT_MEMORY = 4,
-	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
-	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
-	IORES_DESC_RESERVED = 7,
-	IORES_DESC_SOFT_RESERVED = 8,
-};
-
-typedef void (*dr_release_t)(struct device *, void *);
-
-enum {
-	REGION_INTERSECTS = 0,
-	REGION_DISJOINT = 1,
-	REGION_MIXED = 2,
-};
-
-struct resource_constraint {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
-	void *alignf_data;
-};
-
-enum {
-	MAX_IORES_LEVEL = 5,
-};
-
-struct region_devres {
-	struct resource *parent;
-	resource_size_t start;
-	resource_size_t n;
-};
-
-struct dentry_stat_t {
-	long int nr_dentry;
-	long int nr_unused;
-	long int age_limit;
-	long int want_pages;
-	long int nr_negative;
-	long int dummy;
-};
-
-struct files_stat_struct {
-	long unsigned int nr_files;
-	long unsigned int nr_free_files;
-	long unsigned int max_files;
-};
-
-struct inodes_stat_t {
-	long int nr_inodes;
-	long int nr_unused;
-	long int dummy[5];
-};
-
-enum sched_tunable_scaling {
-	SCHED_TUNABLESCALING_NONE = 0,
-	SCHED_TUNABLESCALING_LOG = 1,
-	SCHED_TUNABLESCALING_LINEAR = 2,
-	SCHED_TUNABLESCALING_END = 3,
-};
-
-enum sysctl_writes_mode {
-	SYSCTL_WRITES_LEGACY = 4294967295,
-	SYSCTL_WRITES_WARN = 0,
-	SYSCTL_WRITES_STRICT = 1,
-};
-
-struct do_proc_dointvec_minmax_conv_param {
-	int *min;
-	int *max;
-};
-
-struct do_proc_douintvec_minmax_conv_param {
-	unsigned int *min;
-	unsigned int *max;
+struct crypto_aes_ctx {
+	u32 key_enc[60];
+	u32 key_dec[60];
+	u32 key_length;
 };
 
 struct __user_cap_header_struct {
@@ -21163,1934 +66988,48 @@
 
 typedef struct __user_cap_data_struct *cap_user_data_t;
 
-typedef struct siginfo siginfo_t;
-
-struct sigqueue {
-	struct list_head list;
-	int flags;
-	kernel_siginfo_t info;
-	struct user_struct *user;
-};
-
-struct ptrace_peeksiginfo_args {
-	__u64 off;
-	__u32 flags;
-	__s32 nr;
-};
-
-struct ptrace_syscall_info {
-	__u8 op;
-	__u8 pad[3];
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 stack_pointer;
-	union {
-		struct {
-			__u64 nr;
-			__u64 args[6];
-		} entry;
-		struct {
-			__s64 rval;
-			__u8 is_error;
-		} exit;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u32 ret_data;
-		} seccomp;
-	};
-};
-
-struct compat_iovec {
-	compat_uptr_t iov_base;
-	compat_size_t iov_len;
-};
-
-typedef struct compat_siginfo compat_siginfo_t;
-
-typedef long unsigned int old_sigset_t;
-
-typedef u32 compat_old_sigset_t;
-
-struct compat_sigaction {
-	compat_uptr_t sa_handler;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-	compat_sigset_t sa_mask;
-};
-
-struct compat_old_sigaction {
-	compat_uptr_t sa_handler;
-	compat_old_sigset_t sa_mask;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-};
-
-enum {
-	TRACE_SIGNAL_DELIVERED = 0,
-	TRACE_SIGNAL_IGNORED = 1,
-	TRACE_SIGNAL_ALREADY_PENDING = 2,
-	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
-	TRACE_SIGNAL_LOSE_INFO = 4,
-};
-
-struct trace_event_raw_signal_generate {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	char comm[16];
-	pid_t pid;
-	int group;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_signal_deliver {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	long unsigned int sa_handler;
-	long unsigned int sa_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_signal_generate {};
-
-struct trace_event_data_offsets_signal_deliver {};
-
-typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
-
-typedef __kernel_clock_t clock_t;
-
-struct sysinfo {
-	__kernel_long_t uptime;
-	__kernel_ulong_t loads[3];
-	__kernel_ulong_t totalram;
-	__kernel_ulong_t freeram;
-	__kernel_ulong_t sharedram;
-	__kernel_ulong_t bufferram;
-	__kernel_ulong_t totalswap;
-	__kernel_ulong_t freeswap;
-	__u16 procs;
-	__u16 pad;
-	__kernel_ulong_t totalhigh;
-	__kernel_ulong_t freehigh;
-	__u32 mem_unit;
-	char _f[0];
-};
-
-struct rlimit64 {
-	__u64 rlim_cur;
-	__u64 rlim_max;
-};
-
-enum uts_proc {
-	UTS_PROC_OSTYPE = 0,
-	UTS_PROC_OSRELEASE = 1,
-	UTS_PROC_VERSION = 2,
-	UTS_PROC_HOSTNAME = 3,
-	UTS_PROC_DOMAINNAME = 4,
-};
-
-struct prctl_mm_map {
-	__u64 start_code;
-	__u64 end_code;
-	__u64 start_data;
-	__u64 end_data;
-	__u64 start_brk;
-	__u64 brk;
-	__u64 start_stack;
-	__u64 arg_start;
-	__u64 arg_end;
-	__u64 env_start;
-	__u64 env_end;
-	__u64 *auxv;
-	__u32 auxv_size;
-	__u32 exe_fd;
-};
-
-struct compat_tms {
-	compat_clock_t tms_utime;
-	compat_clock_t tms_stime;
-	compat_clock_t tms_cutime;
-	compat_clock_t tms_cstime;
-};
-
-struct compat_rlimit {
-	compat_ulong_t rlim_cur;
-	compat_ulong_t rlim_max;
-};
-
-struct tms {
-	__kernel_clock_t tms_utime;
-	__kernel_clock_t tms_stime;
-	__kernel_clock_t tms_cutime;
-	__kernel_clock_t tms_cstime;
-};
-
-struct getcpu_cache {
-	long unsigned int blob[16];
-};
-
-struct compat_sysinfo {
-	s32 uptime;
-	u32 loads[3];
-	u32 totalram;
-	u32 freeram;
-	u32 sharedram;
-	u32 bufferram;
-	u32 totalswap;
-	u32 freeswap;
-	u16 procs;
-	u16 pad;
-	u32 totalhigh;
-	u32 freehigh;
-	u32 mem_unit;
-	char _f[8];
-};
-
-struct wq_flusher;
-
-struct worker;
-
-struct workqueue_attrs;
-
-struct pool_workqueue;
-
-struct wq_device;
-
-struct workqueue_struct {
-	struct list_head pwqs;
-	struct list_head list;
-	struct mutex mutex;
-	int work_color;
-	int flush_color;
-	atomic_t nr_pwqs_to_flush;
-	struct wq_flusher *first_flusher;
-	struct list_head flusher_queue;
-	struct list_head flusher_overflow;
-	struct list_head maydays;
-	struct worker *rescuer;
-	int nr_drainers;
-	int saved_max_active;
-	struct workqueue_attrs *unbound_attrs;
-	struct pool_workqueue *dfl_pwq;
-	struct wq_device *wq_dev;
-	char name[24];
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int flags;
-	struct pool_workqueue *cpu_pwqs;
-	struct pool_workqueue *numa_pwq_tbl[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct workqueue_attrs {
-	int nice;
-	cpumask_var_t cpumask;
-	bool no_numa;
-};
-
-struct execute_work {
+struct subprocess_info {
 	struct work_struct work;
-};
-
-enum {
-	WQ_UNBOUND = 2,
-	WQ_FREEZABLE = 4,
-	WQ_MEM_RECLAIM = 8,
-	WQ_HIGHPRI = 16,
-	WQ_CPU_INTENSIVE = 32,
-	WQ_SYSFS = 64,
-	WQ_POWER_EFFICIENT = 128,
-	__WQ_DRAINING = 65536,
-	__WQ_ORDERED = 131072,
-	__WQ_LEGACY = 262144,
-	__WQ_ORDERED_EXPLICIT = 524288,
-	WQ_MAX_ACTIVE = 512,
-	WQ_MAX_UNBOUND_PER_CPU = 4,
-	WQ_DFL_ACTIVE = 256,
-};
-
-typedef unsigned int xa_mark_t;
-
-enum xa_lock_type {
-	XA_LOCK_IRQ = 1,
-	XA_LOCK_BH = 2,
-};
-
-struct ida {
-	struct xarray xa;
-};
-
-struct __una_u32 {
-	u32 x;
-};
-
-struct worker_pool;
-
-struct worker {
-	union {
-		struct list_head entry;
-		struct hlist_node hentry;
-	};
-	struct work_struct *current_work;
-	work_func_t current_func;
-	struct pool_workqueue *current_pwq;
-	struct list_head scheduled;
-	struct task_struct *task;
-	struct worker_pool *pool;
-	struct list_head node;
-	long unsigned int last_active;
-	unsigned int flags;
-	int id;
-	int sleeping;
-	char desc[24];
-	struct workqueue_struct *rescue_wq;
-	work_func_t last_func;
-};
-
-struct pool_workqueue {
-	struct worker_pool *pool;
-	struct workqueue_struct *wq;
-	int work_color;
-	int flush_color;
-	int refcnt;
-	int nr_in_flight[15];
-	int nr_active;
-	int max_active;
-	struct list_head delayed_works;
-	struct list_head pwqs_node;
-	struct list_head mayday_node;
-	struct work_struct unbound_release_work;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct worker_pool {
-	raw_spinlock_t lock;
-	int cpu;
-	int node;
-	int id;
-	unsigned int flags;
-	long unsigned int watchdog_ts;
-	struct list_head worklist;
-	int nr_workers;
-	int nr_idle;
-	struct list_head idle_list;
-	struct timer_list idle_timer;
-	struct timer_list mayday_timer;
-	struct hlist_head busy_hash[64];
-	struct worker *manager;
-	struct list_head workers;
-	struct completion *detach_completion;
-	struct ida worker_ida;
-	struct workqueue_attrs *attrs;
-	struct hlist_node hash_node;
-	int refcnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_t nr_running;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	POOL_MANAGER_ACTIVE = 1,
-	POOL_DISASSOCIATED = 4,
-	WORKER_DIE = 2,
-	WORKER_IDLE = 4,
-	WORKER_PREP = 8,
-	WORKER_CPU_INTENSIVE = 64,
-	WORKER_UNBOUND = 128,
-	WORKER_REBOUND = 256,
-	WORKER_NOT_RUNNING = 456,
-	NR_STD_WORKER_POOLS = 2,
-	UNBOUND_POOL_HASH_ORDER = 6,
-	BUSY_WORKER_HASH_ORDER = 6,
-	MAX_IDLE_WORKERS_RATIO = 4,
-	IDLE_WORKER_TIMEOUT = 300000,
-	MAYDAY_INITIAL_TIMEOUT = 10,
-	MAYDAY_INTERVAL = 100,
-	CREATE_COOLDOWN = 1000,
-	RESCUER_NICE_LEVEL = 4294967276,
-	HIGHPRI_NICE_LEVEL = 4294967276,
-	WQ_NAME_LEN = 24,
-};
-
-struct wq_flusher {
-	struct list_head list;
-	int flush_color;
-	struct completion done;
-};
-
-struct wq_device {
-	struct workqueue_struct *wq;
-	struct device dev;
-};
-
-struct trace_event_raw_workqueue_queue_work {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	void *workqueue;
-	unsigned int req_cpu;
-	unsigned int cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_activate_work {
-	struct trace_entry ent;
-	void *work;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_start {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_end {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_workqueue_queue_work {};
-
-struct trace_event_data_offsets_workqueue_activate_work {};
-
-struct trace_event_data_offsets_workqueue_execute_start {};
-
-struct trace_event_data_offsets_workqueue_execute_end {};
-
-typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
-
-struct wq_barrier {
-	struct work_struct work;
-	struct completion done;
-	struct task_struct *task;
-};
-
-struct cwt_wait {
-	wait_queue_entry_t wait;
-	struct work_struct *work;
-};
-
-struct apply_wqattrs_ctx {
-	struct workqueue_struct *wq;
-	struct workqueue_attrs *attrs;
-	struct list_head list;
-	struct pool_workqueue *dfl_pwq;
-	struct pool_workqueue *pwq_tbl[0];
-};
-
-struct work_for_cpu {
-	struct work_struct work;
-	long int (*fn)(void *);
-	void *arg;
-	long int ret;
-};
-
-typedef void (*task_work_func_t)(struct callback_head *);
-
-enum task_work_notify_mode {
-	TWA_NONE = 0,
-	TWA_RESUME = 1,
-	TWA_SIGNAL = 2,
-};
-
-enum {
-	KERNEL_PARAM_OPS_FL_NOARG = 1,
-};
-
-enum {
-	KERNEL_PARAM_FL_UNSAFE = 1,
-	KERNEL_PARAM_FL_HWPARAM = 2,
-};
-
-struct param_attribute {
-	struct module_attribute mattr;
-	const struct kernel_param *param;
-};
-
-struct module_param_attrs {
-	unsigned int num;
-	struct attribute_group grp;
-	struct param_attribute attrs[0];
-};
-
-struct module_version_attribute {
-	struct module_attribute mattr;
-	const char *module_name;
-	const char *version;
-};
-
-enum lockdown_reason {
-	LOCKDOWN_NONE = 0,
-	LOCKDOWN_MODULE_SIGNATURE = 1,
-	LOCKDOWN_DEV_MEM = 2,
-	LOCKDOWN_EFI_TEST = 3,
-	LOCKDOWN_KEXEC = 4,
-	LOCKDOWN_HIBERNATION = 5,
-	LOCKDOWN_PCI_ACCESS = 6,
-	LOCKDOWN_IOPORT = 7,
-	LOCKDOWN_MSR = 8,
-	LOCKDOWN_ACPI_TABLES = 9,
-	LOCKDOWN_PCMCIA_CIS = 10,
-	LOCKDOWN_TIOCSSERIAL = 11,
-	LOCKDOWN_MODULE_PARAMETERS = 12,
-	LOCKDOWN_MMIOTRACE = 13,
-	LOCKDOWN_DEBUGFS = 14,
-	LOCKDOWN_XMON_WR = 15,
-	LOCKDOWN_INTEGRITY_MAX = 16,
-	LOCKDOWN_KCORE = 17,
-	LOCKDOWN_KPROBES = 18,
-	LOCKDOWN_BPF_READ = 19,
-	LOCKDOWN_PERF = 20,
-	LOCKDOWN_TRACEFS = 21,
-	LOCKDOWN_XMON_RW = 22,
-	LOCKDOWN_CONFIDENTIALITY_MAX = 23,
-};
-
-struct kmalloced_param {
-	struct list_head list;
-	char val[0];
-};
-
-struct sched_param {
-	int sched_priority;
-};
-
-enum {
-	__PERCPU_REF_ATOMIC = 1,
-	__PERCPU_REF_DEAD = 2,
-	__PERCPU_REF_ATOMIC_DEAD = 3,
-	__PERCPU_REF_FLAG_BITS = 2,
-};
-
-struct kthread_work;
-
-typedef void (*kthread_work_func_t)(struct kthread_work *);
-
-struct kthread_worker;
-
-struct kthread_work {
-	struct list_head node;
-	kthread_work_func_t func;
-	struct kthread_worker *worker;
-	int canceling;
-};
-
-enum {
-	KTW_FREEZABLE = 1,
-};
-
-struct kthread_worker {
-	unsigned int flags;
-	raw_spinlock_t lock;
-	struct list_head work_list;
-	struct list_head delayed_work_list;
-	struct task_struct *task;
-	struct kthread_work *current_work;
-};
-
-struct kthread_delayed_work {
-	struct kthread_work work;
-	struct timer_list timer;
-};
-
-enum {
-	CSS_NO_REF = 1,
-	CSS_ONLINE = 2,
-	CSS_RELEASED = 4,
-	CSS_VISIBLE = 8,
-	CSS_DYING = 16,
-};
-
-struct kthread_create_info {
-	int (*threadfn)(void *);
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
 	void *data;
-	int node;
-	struct task_struct *result;
-	struct completion *done;
-	struct list_head list;
 };
 
-struct kthread {
-	long unsigned int flags;
-	unsigned int cpu;
-	int (*threadfn)(void *);
-	void *data;
-	mm_segment_t oldfs;
-	struct completion parked;
-	struct completion exited;
-	struct cgroup_subsys_state *blkcg_css;
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
 };
 
-enum KTHREAD_BITS {
-	KTHREAD_IS_PER_CPU = 0,
-	KTHREAD_SHOULD_STOP = 1,
-	KTHREAD_SHOULD_PARK = 2,
-};
+struct pt_regs;
 
-struct kthread_flush_work {
-	struct kthread_work work;
-	struct completion done;
-};
-
-struct pt_regs___2;
-
-struct ipc_ids {
-	int in_use;
-	short unsigned int seq;
-	struct rw_semaphore rwsem;
-	struct idr ipcs_idr;
-	int max_idx;
-	int last_idx;
-	int next_id;
-	struct rhashtable key_ht;
-};
-
-struct ipc_namespace {
-	refcount_t count;
-	struct ipc_ids ids[3];
-	int sem_ctls[4];
-	int used_sems;
-	unsigned int msg_ctlmax;
-	unsigned int msg_ctlmnb;
-	unsigned int msg_ctlmni;
-	atomic_t msg_bytes;
-	atomic_t msg_hdrs;
-	size_t shm_ctlmax;
-	size_t shm_ctlall;
-	long unsigned int shm_tot;
-	int shm_ctlmni;
-	int shm_rmid_forced;
-	struct notifier_block ipcns_nb;
-	struct vfsmount *mq_mnt;
-	unsigned int mq_queues_count;
-	unsigned int mq_queues_max;
-	unsigned int mq_msg_max;
-	unsigned int mq_msgsize_max;
-	unsigned int mq_msg_default;
-	unsigned int mq_msgsize_default;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct llist_node mnt_llist;
-	struct ns_common ns;
-};
-
-struct srcu_notifier_head {
-	struct mutex mutex;
-	struct srcu_struct srcu;
-	struct notifier_block *head;
-};
-
-enum what {
-	PROC_EVENT_NONE = 0,
-	PROC_EVENT_FORK = 1,
-	PROC_EVENT_EXEC = 2,
-	PROC_EVENT_UID = 4,
-	PROC_EVENT_GID = 64,
-	PROC_EVENT_SID = 128,
-	PROC_EVENT_PTRACE = 256,
-	PROC_EVENT_COMM = 512,
-	PROC_EVENT_COREDUMP = 1073741824,
-	PROC_EVENT_EXIT = 2147483648,
-};
-
-enum reboot_type {
-	BOOT_TRIPLE = 116,
-	BOOT_KBD = 107,
-	BOOT_BIOS = 98,
-	BOOT_ACPI = 97,
-	BOOT_EFI = 101,
-	BOOT_CF9_FORCE = 112,
-	BOOT_CF9_SAFE = 113,
-};
-
-typedef u64 async_cookie_t;
-
-typedef void (*async_func_t)(void *, async_cookie_t);
-
-struct async_domain {
-	struct list_head pending;
-	unsigned int registered: 1;
-};
-
-struct async_entry {
-	struct list_head domain_list;
-	struct list_head global_list;
-	struct work_struct work;
-	async_cookie_t cookie;
-	async_func_t func;
-	void *data;
-	struct async_domain *domain;
-};
-
-struct smpboot_thread_data {
-	unsigned int cpu;
-	unsigned int status;
-	struct smp_hotplug_thread *ht;
-};
-
-enum {
-	HP_THREAD_NONE = 0,
-	HP_THREAD_ACTIVE = 1,
-	HP_THREAD_PARKED = 2,
-};
-
-struct umd_info {
-	const char *driver_name;
-	struct file *pipe_to_umh;
-	struct file *pipe_from_umh;
-	struct path wd;
-	struct pid *tgid;
-};
-
-struct pin_cookie {};
-
-enum {
-	CSD_FLAG_LOCK = 1,
-	IRQ_WORK_PENDING = 1,
-	IRQ_WORK_BUSY = 2,
-	IRQ_WORK_LAZY = 4,
-	IRQ_WORK_HARD_IRQ = 8,
-	IRQ_WORK_CLAIMED = 3,
-	CSD_TYPE_ASYNC = 0,
-	CSD_TYPE_SYNC = 16,
-	CSD_TYPE_IRQ_WORK = 32,
-	CSD_TYPE_TTWU = 48,
-	CSD_FLAG_TYPE_MASK = 240,
-};
-
-typedef struct __call_single_data call_single_data_t;
-
-struct dl_bw {
-	raw_spinlock_t lock;
-	u64 bw;
-	u64 total_bw;
-};
-
-struct cpudl_item;
-
-struct cpudl {
-	raw_spinlock_t lock;
-	int size;
-	cpumask_var_t free_cpus;
-	struct cpudl_item *elements;
-};
-
-struct cpupri_vec {
-	atomic_t count;
-	cpumask_var_t mask;
-};
-
-struct cpupri {
-	struct cpupri_vec pri_to_cpu[102];
-	int *cpu_to_pri;
-};
-
-struct perf_domain;
-
-struct root_domain {
-	atomic_t refcount;
-	atomic_t rto_count;
-	struct callback_head rcu;
-	cpumask_var_t span;
-	cpumask_var_t online;
-	int overload;
-	int overutilized;
-	cpumask_var_t dlo_mask;
-	atomic_t dlo_count;
-	struct dl_bw dl_bw;
-	struct cpudl cpudl;
-	struct irq_work rto_push_work;
-	raw_spinlock_t rto_lock;
-	int rto_loop;
-	int rto_cpu;
-	atomic_t rto_loop_next;
-	atomic_t rto_loop_start;
-	cpumask_var_t rto_mask;
-	struct cpupri cpupri;
-	long unsigned int max_cpu_capacity;
-	struct perf_domain *pd;
-};
-
-struct cfs_rq {
-	struct load_weight load;
-	unsigned int nr_running;
-	unsigned int h_nr_running;
-	unsigned int idle_h_nr_running;
-	u64 exec_clock;
-	u64 min_vruntime;
-	struct rb_root_cached tasks_timeline;
-	struct sched_entity *curr;
-	struct sched_entity *next;
-	struct sched_entity *last;
-	struct sched_entity *skip;
-	unsigned int nr_spread_over;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg;
-	struct {
-		raw_spinlock_t lock;
-		int nr;
-		long unsigned int load_avg;
-		long unsigned int util_avg;
-		long unsigned int runnable_avg;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	} removed;
-	long unsigned int tg_load_avg_contrib;
-	long int propagate;
-	long int prop_runnable_sum;
-	long unsigned int h_load;
-	u64 last_h_load_update;
-	struct sched_entity *h_load_next;
-	struct rq *rq;
-	int on_list;
-	struct list_head leaf_cfs_rq_list;
-	struct task_group *tg;
-	int runtime_enabled;
-	s64 runtime_remaining;
-	u64 throttled_clock;
-	u64 throttled_clock_task;
-	u64 throttled_clock_task_time;
-	int throttled;
-	int throttle_count;
-	struct list_head throttled_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cfs_bandwidth {
-	raw_spinlock_t lock;
-	ktime_t period;
-	u64 quota;
-	u64 runtime;
-	s64 hierarchical_quota;
-	u8 idle;
-	u8 period_active;
-	u8 slack_started;
-	struct hrtimer period_timer;
-	struct hrtimer slack_timer;
-	struct list_head throttled_cfs_rq;
-	int nr_periods;
-	int nr_throttled;
-	u64 throttled_time;
-};
-
-struct task_group {
-	struct cgroup_subsys_state css;
-	struct sched_entity **se;
-	struct cfs_rq **cfs_rq;
-	long unsigned int shares;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t load_avg;
-	struct callback_head rcu;
-	struct list_head list;
-	struct task_group *parent;
-	struct list_head siblings;
-	struct list_head children;
-	struct autogroup *autogroup;
-	struct cfs_bandwidth cfs_bandwidth;
-	unsigned int uclamp_pct[2];
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
-};
-
-enum {
-	SD_BALANCE_NEWIDLE = 1,
-	SD_BALANCE_EXEC = 2,
-	SD_BALANCE_FORK = 4,
-	SD_BALANCE_WAKE = 8,
-	SD_WAKE_AFFINE = 16,
-	SD_ASYM_CPUCAPACITY = 32,
-	SD_SHARE_CPUCAPACITY = 64,
-	SD_SHARE_PKG_RESOURCES = 128,
-	SD_SERIALIZE = 256,
-	SD_ASYM_PACKING = 512,
-	SD_PREFER_SIBLING = 1024,
-	SD_OVERLAP = 2048,
-	SD_NUMA = 4096,
-};
-
-struct sched_domain_shared {
-	atomic_t ref;
-	atomic_t nr_busy_cpus;
-	int has_idle_cores;
-};
-
-struct sched_group;
-
-struct sched_domain {
-	struct sched_domain *parent;
-	struct sched_domain *child;
-	struct sched_group *groups;
-	long unsigned int min_interval;
-	long unsigned int max_interval;
-	unsigned int busy_factor;
-	unsigned int imbalance_pct;
-	unsigned int cache_nice_tries;
-	int nohz_idle;
-	int flags;
-	int level;
-	long unsigned int last_balance;
-	unsigned int balance_interval;
-	unsigned int nr_balance_failed;
-	u64 max_newidle_lb_cost;
-	long unsigned int next_decay_max_lb_cost;
-	u64 avg_scan_cost;
-	unsigned int lb_count[3];
-	unsigned int lb_failed[3];
-	unsigned int lb_balanced[3];
-	unsigned int lb_imbalance[3];
-	unsigned int lb_gained[3];
-	unsigned int lb_hot_gained[3];
-	unsigned int lb_nobusyg[3];
-	unsigned int lb_nobusyq[3];
-	unsigned int alb_count;
-	unsigned int alb_failed;
-	unsigned int alb_pushed;
-	unsigned int sbe_count;
-	unsigned int sbe_balanced;
-	unsigned int sbe_pushed;
-	unsigned int sbf_count;
-	unsigned int sbf_balanced;
-	unsigned int sbf_pushed;
-	unsigned int ttwu_wake_remote;
-	unsigned int ttwu_move_affine;
-	unsigned int ttwu_move_balance;
-	char *name;
-	union {
-		void *private;
-		struct callback_head rcu;
-	};
-	struct sched_domain_shared *shared;
-	unsigned int span_weight;
-	long unsigned int span[0];
-};
-
-struct sched_group_capacity;
-
-struct sched_group {
-	struct sched_group *next;
-	atomic_t ref;
-	unsigned int group_weight;
-	struct sched_group_capacity *sgc;
-	int asym_prefer_cpu;
-	long unsigned int cpumask[0];
-};
-
-struct sched_group_capacity {
-	atomic_t ref;
-	long unsigned int capacity;
-	long unsigned int min_capacity;
-	long unsigned int max_capacity;
-	long unsigned int next_update;
-	int imbalance;
-	int id;
-	long unsigned int cpumask[0];
-};
-
-struct autogroup {
-	struct kref kref;
-	struct task_group *tg;
-	struct rw_semaphore lock;
-	long unsigned int id;
-	int nice;
-};
-
-struct kernel_cpustat {
-	u64 cpustat[10];
-};
-
-enum {
-	CFTYPE_ONLY_ON_ROOT = 1,
-	CFTYPE_NOT_ON_ROOT = 2,
-	CFTYPE_NS_DELEGATABLE = 4,
-	CFTYPE_NO_PREFIX = 8,
-	CFTYPE_WORLD_WRITABLE = 16,
-	CFTYPE_DEBUG = 32,
-	__CFTYPE_ONLY_ON_DFL = 65536,
-	__CFTYPE_NOT_ON_DFL = 131072,
-};
-
-struct css_task_iter {
-	struct cgroup_subsys *ss;
-	unsigned int flags;
-	struct list_head *cset_pos;
-	struct list_head *cset_head;
-	struct list_head *tcset_pos;
-	struct list_head *tcset_head;
-	struct list_head *task_pos;
-	struct list_head *cur_tasks_head;
-	struct css_set *cur_cset;
-	struct css_set *cur_dcset;
-	struct task_struct *cur_task;
-	struct list_head iters_node;
-};
-
-struct trace_event_raw_sched_kthread_stop {
+struct trace_event_raw_contention_begin {
 	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
+	void *lock_addr;
+	unsigned int flags;
 	char __data[0];
 };
 
-struct trace_event_raw_sched_kthread_stop_ret {
+struct trace_event_raw_contention_end {
 	struct trace_entry ent;
+	void *lock_addr;
 	int ret;
 	char __data[0];
 };
 
-struct trace_event_raw_sched_wakeup_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int success;
-	int target_cpu;
-	char __data[0];
-};
+struct trace_event_data_offsets_contention_begin {};
 
-struct trace_event_raw_sched_switch {
-	struct trace_entry ent;
-	char prev_comm[16];
-	pid_t prev_pid;
-	int prev_prio;
-	long int prev_state;
-	char next_comm[16];
-	pid_t next_pid;
-	int next_prio;
-	char __data[0];
-};
+struct trace_event_data_offsets_contention_end {};
 
-struct trace_event_raw_sched_migrate_task {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int orig_cpu;
-	int dest_cpu;
-	char __data[0];
-};
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
 
-struct trace_event_raw_sched_process_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_wait {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_fork {
-	struct trace_entry ent;
-	char parent_comm[16];
-	pid_t parent_pid;
-	char child_comm[16];
-	pid_t child_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_exec {
-	struct trace_entry ent;
-	u32 __data_loc_filename;
-	pid_t pid;
-	pid_t old_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 delay;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_runtime {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 runtime;
-	u64 vruntime;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_pi_setprio {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int oldprio;
-	int newprio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_hang {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_move_numa {
-	struct trace_entry ent;
-	pid_t pid;
-	pid_t tgid;
-	pid_t ngid;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_numa_pair_template {
-	struct trace_entry ent;
-	pid_t src_pid;
-	pid_t src_tgid;
-	pid_t src_ngid;
-	int src_cpu;
-	int src_nid;
-	pid_t dst_pid;
-	pid_t dst_tgid;
-	pid_t dst_ngid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wake_idle_without_ipi {
-	struct trace_entry ent;
-	int cpu;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sched_kthread_stop {};
-
-struct trace_event_data_offsets_sched_kthread_stop_ret {};
-
-struct trace_event_data_offsets_sched_wakeup_template {};
-
-struct trace_event_data_offsets_sched_switch {};
-
-struct trace_event_data_offsets_sched_migrate_task {};
-
-struct trace_event_data_offsets_sched_process_template {};
-
-struct trace_event_data_offsets_sched_process_wait {};
-
-struct trace_event_data_offsets_sched_process_fork {};
-
-struct trace_event_data_offsets_sched_process_exec {
-	u32 filename;
-};
-
-struct trace_event_data_offsets_sched_stat_template {};
-
-struct trace_event_data_offsets_sched_stat_runtime {};
-
-struct trace_event_data_offsets_sched_pi_setprio {};
-
-struct trace_event_data_offsets_sched_process_hang {};
-
-struct trace_event_data_offsets_sched_move_numa {};
-
-struct trace_event_data_offsets_sched_numa_pair_template {};
-
-struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
-
-typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
-
-typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
-
-typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
-
-typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
-
-typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
-
-enum {
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
-};
-
-struct wake_q_head {
-	struct wake_q_node *first;
-	struct wake_q_node **lastp;
-};
-
-struct sched_attr {
-	__u32 size;
-	__u32 sched_policy;
-	__u64 sched_flags;
-	__s32 sched_nice;
-	__u32 sched_priority;
-	__u64 sched_runtime;
-	__u64 sched_deadline;
-	__u64 sched_period;
-	__u32 sched_util_min;
-	__u32 sched_util_max;
-};
-
-struct cpuidle_state_usage {
-	long long unsigned int disable;
-	long long unsigned int usage;
-	u64 time_ns;
-	long long unsigned int above;
-	long long unsigned int below;
-	long long unsigned int rejected;
-	long long unsigned int s2idle_usage;
-	long long unsigned int s2idle_time;
-};
-
-struct cpuidle_device;
-
-struct cpuidle_driver;
-
-struct cpuidle_state {
-	char name[16];
-	char desc[32];
-	u64 exit_latency_ns;
-	u64 target_residency_ns;
-	unsigned int flags;
-	unsigned int exit_latency;
-	int power_usage;
-	unsigned int target_residency;
-	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
-	int (*enter_dead)(struct cpuidle_device *, int);
-	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
-};
-
-struct cpuidle_state_kobj;
-
-struct cpuidle_driver_kobj;
-
-struct cpuidle_device_kobj;
-
-struct cpuidle_device {
-	unsigned int registered: 1;
-	unsigned int enabled: 1;
-	unsigned int poll_time_limit: 1;
-	unsigned int cpu;
-	ktime_t next_hrtimer;
-	int last_state_idx;
-	u64 last_residency_ns;
-	u64 poll_limit_ns;
-	u64 forced_idle_latency_limit_ns;
-	struct cpuidle_state_usage states_usage[10];
-	struct cpuidle_state_kobj *kobjs[10];
-	struct cpuidle_driver_kobj *kobj_driver;
-	struct cpuidle_device_kobj *kobj_dev;
-	struct list_head device_list;
-};
-
-struct cpuidle_driver {
-	const char *name;
-	struct module *owner;
-	unsigned int bctimer: 1;
-	struct cpuidle_state states[10];
-	int state_count;
-	int safe_state_index;
-	struct cpumask *cpumask;
-	const char *governor;
-};
-
-typedef int (*cpu_stop_fn_t)(void *);
-
-struct cpu_stop_done;
-
-struct cpu_stop_work {
-	struct list_head list;
-	cpu_stop_fn_t fn;
-	void *arg;
-	struct cpu_stop_done *done;
-};
-
-struct cpudl_item {
-	u64 dl;
-	int cpu;
-	int idx;
-};
-
-struct rt_prio_array {
-	long unsigned int bitmap[2];
-	struct list_head queue[100];
-};
-
-struct rt_bandwidth {
-	raw_spinlock_t rt_runtime_lock;
-	ktime_t rt_period;
-	u64 rt_runtime;
-	struct hrtimer rt_period_timer;
-	unsigned int rt_period_active;
-};
-
-struct dl_bandwidth {
-	raw_spinlock_t dl_runtime_lock;
-	u64 dl_runtime;
-	u64 dl_period;
-};
-
-typedef int (*tg_visitor)(struct task_group *, void *);
-
-struct uclamp_bucket {
-	long unsigned int value: 11;
-	long unsigned int tasks: 53;
-};
-
-struct uclamp_rq {
-	unsigned int value;
-	struct uclamp_bucket bucket[5];
-};
-
-struct rt_rq {
-	struct rt_prio_array active;
-	unsigned int rt_nr_running;
-	unsigned int rr_nr_running;
-	struct {
-		int curr;
-		int next;
-	} highest_prio;
-	long unsigned int rt_nr_migratory;
-	long unsigned int rt_nr_total;
-	int overloaded;
-	struct plist_head pushable_tasks;
-	int rt_queued;
-	int rt_throttled;
-	u64 rt_time;
-	u64 rt_runtime;
-	raw_spinlock_t rt_runtime_lock;
-};
-
-struct dl_rq {
-	struct rb_root_cached root;
-	long unsigned int dl_nr_running;
-	struct {
-		u64 curr;
-		u64 next;
-	} earliest_dl;
-	long unsigned int dl_nr_migratory;
-	int overloaded;
-	struct rb_root_cached pushable_dl_tasks_root;
-	u64 running_bw;
-	u64 this_bw;
-	u64 extra_bw;
-	u64 bw_ratio;
-};
-
-struct rq {
-	raw_spinlock_t lock;
-	unsigned int nr_running;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-	unsigned int numa_migrate_on;
-	long unsigned int last_blocked_load_update_tick;
-	unsigned int has_blocked_load;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t nohz_csd;
-	unsigned int nohz_tick_stopped;
-	atomic_t nohz_flags;
-	unsigned int ttwu_pending;
-	u64 nr_switches;
-	long: 64;
-	struct uclamp_rq uclamp[2];
-	unsigned int uclamp_flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct cfs_rq cfs;
-	struct rt_rq rt;
-	struct dl_rq dl;
-	struct list_head leaf_cfs_rq_list;
-	struct list_head *tmp_alone_branch;
-	long unsigned int nr_uninterruptible;
-	struct task_struct *curr;
-	struct task_struct *idle;
-	struct task_struct *stop;
-	long unsigned int next_balance;
-	struct mm_struct *prev_mm;
-	unsigned int clock_update_flags;
-	u64 clock;
-	long: 64;
-	long: 64;
-	long: 64;
-	u64 clock_task;
-	u64 clock_pelt;
-	long unsigned int lost_idle_time;
-	atomic_t nr_iowait;
-	int membarrier_state;
-	struct root_domain *rd;
-	struct sched_domain *sd;
-	long unsigned int cpu_capacity;
-	long unsigned int cpu_capacity_orig;
-	struct callback_head *balance_callback;
-	unsigned char nohz_idle_balance;
-	unsigned char idle_balance;
-	long unsigned int misfit_task_load;
-	int active_balance;
-	int push_cpu;
-	struct cpu_stop_work active_balance_work;
-	int cpu;
-	int online;
-	struct list_head cfs_tasks;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg_rt;
-	struct sched_avg avg_dl;
-	struct sched_avg avg_irq;
-	struct sched_avg avg_thermal;
-	u64 idle_stamp;
-	u64 avg_idle;
-	u64 max_idle_balance_cost;
-	u64 prev_steal_time;
-	u64 prev_steal_time_rq;
-	long unsigned int calc_load_update;
-	long int calc_load_active;
-	long: 64;
-	call_single_data_t hrtick_csd;
-	struct hrtimer hrtick_timer;
-	struct sched_info rq_sched_info;
-	long long unsigned int rq_cpu_time;
-	unsigned int yld_count;
-	unsigned int sched_count;
-	unsigned int sched_goidle;
-	unsigned int ttwu_count;
-	unsigned int ttwu_local;
-	struct cpuidle_state *idle_state;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct perf_domain {
-	struct em_perf_domain *em_pd;
-	struct perf_domain *next;
-	struct callback_head rcu;
-};
-
-struct rq_flags {
-	long unsigned int flags;
-	struct pin_cookie cookie;
-	unsigned int clock_update_flags;
-};
-
-enum {
-	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
-	__SCHED_FEAT_START_DEBIT = 1,
-	__SCHED_FEAT_NEXT_BUDDY = 2,
-	__SCHED_FEAT_LAST_BUDDY = 3,
-	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
-	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
-	__SCHED_FEAT_HRTICK = 6,
-	__SCHED_FEAT_DOUBLE_TICK = 7,
-	__SCHED_FEAT_NONTASK_CAPACITY = 8,
-	__SCHED_FEAT_TTWU_QUEUE = 9,
-	__SCHED_FEAT_SIS_AVG_CPU = 10,
-	__SCHED_FEAT_SIS_PROP = 11,
-	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
-	__SCHED_FEAT_RT_PUSH_IPI = 13,
-	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
-	__SCHED_FEAT_LB_MIN = 15,
-	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
-	__SCHED_FEAT_WA_IDLE = 17,
-	__SCHED_FEAT_WA_WEIGHT = 18,
-	__SCHED_FEAT_WA_BIAS = 19,
-	__SCHED_FEAT_UTIL_EST = 20,
-	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
-	__SCHED_FEAT_NR = 22,
-};
-
-struct migration_arg {
-	struct task_struct *task;
-	int dest_cpu;
-};
-
-struct migration_swap_arg {
-	struct task_struct *src_task;
-	struct task_struct *dst_task;
-	int src_cpu;
-	int dst_cpu;
-};
-
-struct uclamp_request {
-	s64 percent;
-	u64 util;
-	int ret;
-};
-
-struct cfs_schedulable_data {
-	struct task_group *tg;
-	u64 period;
-	u64 quota;
-};
-
-enum {
-	cpuset = 0,
-	possible = 1,
-	fail = 2,
-};
-
-enum s2idle_states {
-	S2IDLE_STATE_NONE = 0,
-	S2IDLE_STATE_ENTER = 1,
-	S2IDLE_STATE_WAKE = 2,
-};
-
-struct idle_timer {
-	struct hrtimer timer;
-	int done;
-};
-
-typedef void (*rcu_callback_t)(struct callback_head *);
-
-struct numa_group {
-	refcount_t refcount;
-	spinlock_t lock;
-	int nr_tasks;
-	pid_t gid;
-	int active_nodes;
-	struct callback_head rcu;
-	long unsigned int total_faults;
-	long unsigned int max_faults_cpu;
-	long unsigned int *faults_cpu;
-	long unsigned int faults[0];
-};
-
-struct update_util_data {
-	void (*func)(struct update_util_data *, u64, unsigned int);
-};
-
-enum numa_topology_type {
-	NUMA_DIRECT = 0,
-	NUMA_GLUELESS_MESH = 1,
-	NUMA_BACKPLANE = 2,
-};
-
-enum numa_faults_stats {
-	NUMA_MEM = 0,
-	NUMA_CPU = 1,
-	NUMA_MEMBUF = 2,
-	NUMA_CPUBUF = 3,
-};
-
-enum schedutil_type {
-	FREQUENCY_UTIL = 0,
-	ENERGY_UTIL = 1,
-};
-
-enum numa_type {
-	node_has_spare = 0,
-	node_fully_busy = 1,
-	node_overloaded = 2,
-};
-
-struct numa_stats {
-	long unsigned int load;
-	long unsigned int runnable;
-	long unsigned int util;
-	long unsigned int compute_capacity;
-	unsigned int nr_running;
-	unsigned int weight;
-	enum numa_type node_type;
-	int idle_cpu;
-};
-
-struct task_numa_env {
-	struct task_struct *p;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	struct numa_stats src_stats;
-	struct numa_stats dst_stats;
-	int imbalance_pct;
-	int dist;
-	struct task_struct *best_task;
-	long int best_imp;
-	int best_cpu;
-};
-
-enum fbq_type {
-	regular = 0,
-	remote = 1,
-	all = 2,
-};
-
-enum group_type {
-	group_has_spare = 0,
-	group_fully_busy = 1,
-	group_misfit_task = 2,
-	group_asym_packing = 3,
-	group_imbalanced = 4,
-	group_overloaded = 5,
-};
-
-enum migration_type {
-	migrate_load = 0,
-	migrate_util = 1,
-	migrate_task = 2,
-	migrate_misfit = 3,
-};
-
-struct lb_env {
-	struct sched_domain *sd;
-	struct rq *src_rq;
-	int src_cpu;
-	int dst_cpu;
-	struct rq *dst_rq;
-	struct cpumask *dst_grpmask;
-	int new_dst_cpu;
-	enum cpu_idle_type idle;
-	long int imbalance;
-	struct cpumask *cpus;
-	unsigned int flags;
-	unsigned int loop;
-	unsigned int loop_break;
-	unsigned int loop_max;
-	enum fbq_type fbq_type;
-	enum migration_type migration_type;
-	struct list_head tasks;
-};
-
-struct sg_lb_stats {
-	long unsigned int avg_load;
-	long unsigned int group_load;
-	long unsigned int group_capacity;
-	long unsigned int group_util;
-	long unsigned int group_runnable;
-	unsigned int sum_nr_running;
-	unsigned int sum_h_nr_running;
-	unsigned int idle_cpus;
-	unsigned int group_weight;
-	enum group_type group_type;
-	unsigned int group_asym_packing;
-	long unsigned int group_misfit_task_load;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-};
-
-struct sd_lb_stats {
-	struct sched_group *busiest;
-	struct sched_group *local;
-	long unsigned int total_load;
-	long unsigned int total_capacity;
-	long unsigned int avg_load;
-	unsigned int prefer_sibling;
-	struct sg_lb_stats busiest_stat;
-	struct sg_lb_stats local_stat;
-};
-
-typedef struct rt_rq *rt_rq_iter_t;
-
-struct wait_bit_key {
-	void *flags;
-	int bit_nr;
-	long unsigned int timeout;
-};
-
-struct wait_bit_queue_entry {
-	struct wait_bit_key key;
-	struct wait_queue_entry wq_entry;
-};
-
-typedef int wait_bit_action_f(struct wait_bit_key *, int);
-
-struct swait_queue {
-	struct task_struct *task;
-	struct list_head task_list;
-};
-
-struct sd_flag_debug {
-	unsigned int meta_flags;
-	char *name;
-};
-
-struct sched_domain_attr {
-	int relax_domain_level;
-};
-
-typedef const struct cpumask * (*sched_domain_mask_f)(int);
-
-typedef int (*sched_domain_flags_f)();
-
-struct sd_data {
-	struct sched_domain **sd;
-	struct sched_domain_shared **sds;
-	struct sched_group **sg;
-	struct sched_group_capacity **sgc;
-};
-
-struct sched_domain_topology_level {
-	sched_domain_mask_f mask;
-	sched_domain_flags_f sd_flags;
-	int flags;
-	int numa_level;
-	struct sd_data data;
-	char *name;
-};
-
-struct s_data {
-	struct sched_domain **sd;
-	struct root_domain *rd;
-};
-
-enum s_alloc {
-	sa_rootdomain = 0,
-	sa_sd = 1,
-	sa_sd_storage = 2,
-	sa_none = 3,
-};
-
-enum cpuacct_stat_index {
-	CPUACCT_STAT_USER = 0,
-	CPUACCT_STAT_SYSTEM = 1,
-	CPUACCT_STAT_NSTATS = 2,
-};
-
-struct cpuacct_usage {
-	u64 usages[2];
-};
-
-struct cpuacct {
-	struct cgroup_subsys_state css;
-	struct cpuacct_usage *cpuusage;
-	struct kernel_cpustat *cpustat;
-};
-
-struct gov_attr_set {
-	struct kobject kobj;
-	struct list_head policy_list;
-	struct mutex update_lock;
-	int usage_count;
-};
-
-struct governor_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct gov_attr_set *, char *);
-	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
-};
-
-struct sugov_tunables {
-	struct gov_attr_set attr_set;
-	unsigned int rate_limit_us;
-};
-
-struct sugov_policy {
-	struct cpufreq_policy *policy;
-	struct sugov_tunables *tunables;
-	struct list_head tunables_hook;
-	raw_spinlock_t update_lock;
-	u64 last_freq_update_time;
-	s64 freq_update_delay_ns;
-	unsigned int next_freq;
-	unsigned int cached_raw_freq;
-	struct irq_work irq_work;
-	struct kthread_work work;
-	struct mutex work_lock;
-	struct kthread_worker worker;
-	struct task_struct *thread;
-	bool work_in_progress;
-	bool limits_changed;
-	bool need_freq_update;
-};
-
-struct sugov_cpu {
-	struct update_util_data update_util;
-	struct sugov_policy *sg_policy;
-	unsigned int cpu;
-	bool iowait_boost_pending;
-	unsigned int iowait_boost;
-	u64 last_update;
-	long unsigned int bw_dl;
-	long unsigned int max;
-	long unsigned int saved_idle_calls;
-};
-
-enum {
-	MEMBARRIER_FLAG_SYNC_CORE = 1,
-	MEMBARRIER_FLAG_RSEQ = 2,
-};
-
-enum membarrier_cmd {
-	MEMBARRIER_CMD_QUERY = 0,
-	MEMBARRIER_CMD_GLOBAL = 1,
-	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
-	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
-	MEMBARRIER_CMD_SHARED = 1,
-};
-
-enum membarrier_cmd_flag {
-	MEMBARRIER_CMD_FLAG_CPU = 1,
-};
-
-struct proc_ops {
-	unsigned int proc_flags;
-	int (*proc_open)(struct inode *, struct file *);
-	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
-	loff_t (*proc_lseek)(struct file *, loff_t, int);
-	int (*proc_release)(struct inode *, struct file *);
-	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
-	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*proc_mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-};
-
-enum psi_res {
-	PSI_IO = 0,
-	PSI_MEM = 1,
-	PSI_CPU = 2,
-	NR_PSI_RESOURCES = 3,
-};
-
-struct psi_window {
-	u64 size;
-	u64 start_time;
-	u64 start_value;
-	u64 prev_growth;
-};
-
-struct psi_trigger {
-	enum psi_states state;
-	u64 threshold;
-	struct list_head node;
-	struct psi_group *group;
-	wait_queue_head_t event_wait;
-	int event;
-	struct psi_window win;
-	u64 last_event_time;
-	struct kref refcount;
-};
-
-struct ww_acquire_ctx;
-
-struct ww_mutex {
-	struct mutex base;
-	struct ww_acquire_ctx *ctx;
-};
-
-struct ww_acquire_ctx {
-	struct task_struct *task;
-	long unsigned int stamp;
-	unsigned int acquired;
-	short unsigned int wounded;
-	short unsigned int is_wait_die;
-};
+typedef void (*btf_trace_contention_end)(void *, void *, int);
 
 struct mutex_waiter {
 	struct list_head list;
@@ -23098,207 +67037,12 @@
 	struct ww_acquire_ctx *ww_ctx;
 };
 
-enum mutex_trylock_recursive_enum {
-	MUTEX_TRYLOCK_FAILED = 0,
-	MUTEX_TRYLOCK_SUCCESS = 1,
-	MUTEX_TRYLOCK_RECURSIVE = 2,
-};
-
-struct semaphore {
-	raw_spinlock_t lock;
-	unsigned int count;
-	struct list_head wait_list;
-};
-
-struct semaphore_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	bool up;
-};
-
-enum rwsem_waiter_type {
-	RWSEM_WAITING_FOR_WRITE = 0,
-	RWSEM_WAITING_FOR_READ = 1,
-};
-
-struct rwsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	enum rwsem_waiter_type type;
-	long unsigned int timeout;
-	long unsigned int last_rowner;
-};
-
-enum rwsem_wake_type {
-	RWSEM_WAKE_ANY = 0,
-	RWSEM_WAKE_READERS = 1,
-	RWSEM_WAKE_READ_OWNED = 2,
-};
-
-enum writer_wait_state {
-	WRITER_NOT_FIRST = 0,
-	WRITER_FIRST = 1,
-	WRITER_HANDOFF = 2,
-};
-
-enum owner_state {
-	OWNER_NULL = 1,
-	OWNER_WRITER = 2,
-	OWNER_READER = 4,
-	OWNER_NONSPINNABLE = 8,
-};
-
-struct optimistic_spin_node {
-	struct optimistic_spin_node *next;
-	struct optimistic_spin_node *prev;
-	int locked;
-	int cpu;
-};
-
-struct mcs_spinlock {
-	struct mcs_spinlock *next;
-	int locked;
-	int count;
-};
-
-struct qnode {
-	struct mcs_spinlock mcs;
-};
-
-struct hrtimer_sleeper {
-	struct hrtimer timer;
-	struct task_struct *task;
-};
-
-struct rt_mutex;
-
-struct rt_mutex_waiter {
-	struct rb_node tree_entry;
-	struct rb_node pi_tree_entry;
-	struct task_struct *task;
-	struct rt_mutex *lock;
-	int prio;
-	u64 deadline;
-};
-
-struct rt_mutex {
-	raw_spinlock_t wait_lock;
-	struct rb_root_cached waiters;
-	struct task_struct *owner;
-};
-
-enum rtmutex_chainwalk {
-	RT_MUTEX_MIN_CHAINWALK = 0,
-	RT_MUTEX_FULL_CHAINWALK = 1,
-};
-
-struct task_struct___2;
-
-struct pm_qos_request {
-	struct plist_node node;
-	struct pm_qos_constraints *qos;
-};
-
-enum pm_qos_req_action {
-	PM_QOS_ADD_REQ = 0,
-	PM_QOS_UPDATE_REQ = 1,
-	PM_QOS_REMOVE_REQ = 2,
-};
-
-typedef int suspend_state_t;
-
-enum suspend_stat_step {
-	SUSPEND_FREEZE = 1,
-	SUSPEND_PREPARE = 2,
-	SUSPEND_SUSPEND = 3,
-	SUSPEND_SUSPEND_LATE = 4,
-	SUSPEND_SUSPEND_NOIRQ = 5,
-	SUSPEND_RESUME_NOIRQ = 6,
-	SUSPEND_RESUME_EARLY = 7,
-	SUSPEND_RESUME = 8,
-};
-
-struct suspend_stats {
-	int success;
-	int fail;
-	int failed_freeze;
-	int failed_prepare;
-	int failed_suspend;
-	int failed_suspend_late;
-	int failed_suspend_noirq;
-	int failed_resume;
-	int failed_resume_early;
-	int failed_resume_noirq;
-	int last_failed_dev;
-	char failed_devs[80];
-	int last_failed_errno;
-	int errno[2];
-	int last_failed_step;
-	enum suspend_stat_step failed_steps[2];
-};
-
-enum {
-	TEST_NONE = 0,
-	TEST_CORE = 1,
-	TEST_CPUS = 2,
-	TEST_PLATFORM = 3,
-	TEST_DEVICES = 4,
-	TEST_FREEZER = 5,
-	__TEST_AFTER_LAST = 6,
-};
-
 struct pm_vt_switch {
 	struct list_head head;
 	struct device *dev;
 	bool required;
 };
 
-struct platform_suspend_ops {
-	int (*valid)(suspend_state_t);
-	int (*begin)(suspend_state_t);
-	int (*prepare)();
-	int (*prepare_late)();
-	int (*enter)(suspend_state_t);
-	void (*wake)();
-	void (*finish)();
-	bool (*suspend_again)();
-	void (*end)();
-	void (*recover)();
-};
-
-struct platform_s2idle_ops {
-	int (*begin)();
-	int (*prepare)();
-	int (*prepare_late)();
-	bool (*wake)();
-	void (*restore_early)();
-	void (*restore)();
-	void (*end)();
-};
-
-struct platform_hibernation_ops {
-	int (*begin)(pm_message_t);
-	void (*end)();
-	int (*pre_snapshot)();
-	void (*finish)();
-	int (*prepare)();
-	int (*enter)();
-	void (*leave)();
-	int (*pre_restore)();
-	void (*restore_cleanup)();
-	void (*recover)();
-};
-
-enum {
-	HIBERNATION_INVALID = 0,
-	HIBERNATION_PLATFORM = 1,
-	HIBERNATION_SHUTDOWN = 2,
-	HIBERNATION_REBOOT = 3,
-	HIBERNATION_SUSPEND = 4,
-	HIBERNATION_TEST_RESUME = 5,
-	__HIBERNATION_AFTER_LAST = 6,
-};
-
 struct swsusp_info {
 	struct new_utsname uts;
 	u32 version_code;
@@ -23772,118 +67516,6 @@
 	int sync_read;
 };
 
-struct linked_page {
-	struct linked_page *next;
-	char data[4088];
-};
-
-struct chain_allocator {
-	struct linked_page *chain;
-	unsigned int used_space;
-	gfp_t gfp_mask;
-	int safe_needed;
-};
-
-struct rtree_node {
-	struct list_head list;
-	long unsigned int *data;
-};
-
-struct mem_zone_bm_rtree {
-	struct list_head list;
-	struct list_head nodes;
-	struct list_head leaves;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	struct rtree_node *rtree;
-	int levels;
-	unsigned int blocks;
-};
-
-struct bm_position {
-	struct mem_zone_bm_rtree *zone;
-	struct rtree_node *node;
-	long unsigned int node_pfn;
-	int node_bit;
-};
-
-struct memory_bitmap {
-	struct list_head zones;
-	struct linked_page *p_list;
-	struct bm_position cur;
-};
-
-struct mem_extent {
-	struct list_head hook;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct nosave_region {
-	struct list_head list;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-};
-
-enum {
-	BIO_NO_PAGE_REF = 0,
-	BIO_CLONED = 1,
-	BIO_BOUNCED = 2,
-	BIO_WORKINGSET = 3,
-	BIO_QUIET = 4,
-	BIO_CHAIN = 5,
-	BIO_REFFED = 6,
-	BIO_THROTTLED = 7,
-	BIO_TRACE_COMPLETION = 8,
-	BIO_CGROUP_ACCT = 9,
-	BIO_TRACKED = 10,
-	BIO_FLAG_LAST = 11,
-};
-
-enum req_opf {
-	REQ_OP_READ = 0,
-	REQ_OP_WRITE = 1,
-	REQ_OP_FLUSH = 2,
-	REQ_OP_DISCARD = 3,
-	REQ_OP_SECURE_ERASE = 5,
-	REQ_OP_WRITE_SAME = 7,
-	REQ_OP_WRITE_ZEROES = 9,
-	REQ_OP_ZONE_OPEN = 10,
-	REQ_OP_ZONE_CLOSE = 11,
-	REQ_OP_ZONE_FINISH = 12,
-	REQ_OP_ZONE_APPEND = 13,
-	REQ_OP_ZONE_RESET = 15,
-	REQ_OP_ZONE_RESET_ALL = 17,
-	REQ_OP_SCSI_IN = 32,
-	REQ_OP_SCSI_OUT = 33,
-	REQ_OP_DRV_IN = 34,
-	REQ_OP_DRV_OUT = 35,
-	REQ_OP_LAST = 36,
-};
-
-enum req_flag_bits {
-	__REQ_FAILFAST_DEV = 8,
-	__REQ_FAILFAST_TRANSPORT = 9,
-	__REQ_FAILFAST_DRIVER = 10,
-	__REQ_SYNC = 11,
-	__REQ_META = 12,
-	__REQ_PRIO = 13,
-	__REQ_NOMERGE = 14,
-	__REQ_IDLE = 15,
-	__REQ_INTEGRITY = 16,
-	__REQ_FUA = 17,
-	__REQ_PREFLUSH = 18,
-	__REQ_RAHEAD = 19,
-	__REQ_BACKGROUND = 20,
-	__REQ_NOWAIT = 21,
-	__REQ_CGROUP_PUNT = 22,
-	__REQ_NOUNMAP = 23,
-	__REQ_HIPRI = 24,
-	__REQ_DRV = 25,
-	__REQ_SWAP = 26,
-	__REQ_NR_BITS = 27,
-};
-
 struct swap_map_page {
 	sector_t entries[511];
 	sector_t next_swap;
@@ -23905,7 +67537,8 @@
 };
 
 struct swsusp_header {
-	char reserved[4060];
+	char reserved[4056];
+	u32 hw_sig;
 	u32 crc32;
 	sector_t image;
 	unsigned int flags;
@@ -23965,85 +67598,11 @@
 	unsigned char cmp[143360];
 };
 
-typedef s64 compat_loff_t;
-
-struct resume_swap_area {
-	__kernel_loff_t offset;
-	__u32 dev;
-} __attribute__((packed));
-
-struct snapshot_data {
-	struct snapshot_handle handle;
-	int swap;
-	int mode;
-	bool frozen;
-	bool ready;
-	bool platform_support;
-	bool free_bitmaps;
-	dev_t dev;
-};
-
-struct compat_resume_swap_area {
-	compat_loff_t offset;
-	u32 dev;
-} __attribute__((packed));
-
-struct sysrq_key_op {
-	void (* const handler)(int);
-	const char * const help_msg;
-	const char * const action_msg;
-	const int enable_mask;
-};
-
-struct em_data_callback {
-	int (*active_power)(long unsigned int *, long unsigned int *, struct device *);
-};
-
 struct dev_printk_info {
 	char subsystem[16];
 	char device[48];
 };
 
-struct console {
-	char name[16];
-	void (*write)(struct console *, const char *, unsigned int);
-	int (*read)(struct console *, char *, unsigned int);
-	struct tty_driver * (*device)(struct console *, int *);
-	void (*unblank)();
-	int (*setup)(struct console *, char *);
-	int (*exit)(struct console *);
-	int (*match)(struct console *, char *, int, char *);
-	short int flags;
-	short int index;
-	int cflag;
-	void *data;
-	struct console *next;
-};
-
-struct kmsg_dumper {
-	struct list_head list;
-	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
-	enum kmsg_dump_reason max_reason;
-	bool active;
-	bool registered;
-	u32 cur_idx;
-	u32 next_idx;
-	u64 cur_seq;
-	u64 next_seq;
-};
-
-struct trace_event_raw_console {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_console {
-	u32 msg;
-};
-
-typedef void (*btf_trace_console)(void *, const char *, size_t);
-
 struct printk_info {
 	u64 seq;
 	u64 ts_nsec;
@@ -24084,6 +67643,7 @@
 	struct printk_info *infos;
 	atomic_long_t head_id;
 	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
 };
 
 struct printk_ringbuffer {
@@ -24107,617 +67667,50 @@
 	desc_reusable = 3,
 };
 
-struct console_cmdline {
-	char name[16];
-	int index;
-	bool user_specified;
-	char *options;
-	char *brl_options;
-};
-
-enum devkmsg_log_bits {
-	__DEVKMSG_LOG_BIT_ON = 0,
-	__DEVKMSG_LOG_BIT_OFF = 1,
-	__DEVKMSG_LOG_BIT_LOCK = 2,
-};
-
-enum devkmsg_log_masks {
-	DEVKMSG_LOG_MASK_ON = 1,
-	DEVKMSG_LOG_MASK_OFF = 2,
-	DEVKMSG_LOG_MASK_LOCK = 4,
-};
-
-enum con_msg_format_flags {
-	MSG_FORMAT_DEFAULT = 0,
-	MSG_FORMAT_SYSLOG = 1,
-};
-
-enum log_flags {
-	LOG_NEWLINE = 2,
-	LOG_CONT = 8,
-};
-
-struct devkmsg_user {
-	u64 seq;
-	struct ratelimit_state rs;
-	struct mutex lock;
-	char buf[8192];
-	struct printk_info info;
-	char text_buf[8192];
-	struct printk_record record;
-};
-
-struct printk_safe_seq_buf {
-	atomic_t len;
-	atomic_t message_lost;
-	struct irq_work work;
-	unsigned char buffer[8160];
-};
-
 struct prb_data_block {
 	long unsigned int id;
 	char data[0];
 };
 
-enum {
-	IRQS_AUTODETECT = 1,
-	IRQS_SPURIOUS_DISABLED = 2,
-	IRQS_POLL_INPROGRESS = 8,
-	IRQS_ONESHOT = 32,
-	IRQS_REPLAY = 64,
-	IRQS_WAITING = 128,
-	IRQS_PENDING = 512,
-	IRQS_SUSPENDED = 2048,
-	IRQS_TIMINGS = 4096,
-	IRQS_NMI = 8192,
-};
+struct cma_kobject;
 
-enum {
-	_IRQ_DEFAULT_INIT_FLAGS = 0,
-	_IRQ_PER_CPU = 512,
-	_IRQ_LEVEL = 256,
-	_IRQ_NOPROBE = 1024,
-	_IRQ_NOREQUEST = 2048,
-	_IRQ_NOTHREAD = 65536,
-	_IRQ_NOAUTOEN = 4096,
-	_IRQ_MOVE_PCNTXT = 16384,
-	_IRQ_NO_BALANCING = 8192,
-	_IRQ_NESTED_THREAD = 32768,
-	_IRQ_PER_CPU_DEVID = 131072,
-	_IRQ_IS_POLLED = 262144,
-	_IRQ_DISABLE_UNLAZY = 524288,
-	_IRQ_HIDDEN = 1048576,
-	_IRQF_MODIFY_MASK = 2096911,
-};
-
-enum {
-	IRQTF_RUNTHREAD = 0,
-	IRQTF_WARNED = 1,
-	IRQTF_AFFINITY = 2,
-	IRQTF_FORCED_THREAD = 3,
-};
-
-enum {
-	IRQ_SET_MASK_OK = 0,
-	IRQ_SET_MASK_OK_NOCOPY = 1,
-	IRQ_SET_MASK_OK_DONE = 2,
-};
-
-enum {
-	IRQCHIP_SET_TYPE_MASKED = 1,
-	IRQCHIP_EOI_IF_HANDLED = 2,
-	IRQCHIP_MASK_ON_SUSPEND = 4,
-	IRQCHIP_ONOFFLINE_ENABLED = 8,
-	IRQCHIP_SKIP_SET_WAKE = 16,
-	IRQCHIP_ONESHOT_SAFE = 32,
-	IRQCHIP_EOI_THREADED = 64,
-	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
-	IRQCHIP_SUPPORTS_NMI = 256,
-	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
-};
-
-enum {
-	IRQC_IS_HARDIRQ = 0,
-	IRQC_IS_NESTED = 1,
-};
-
-enum {
-	IRQ_STARTUP_NORMAL = 0,
-	IRQ_STARTUP_MANAGED = 1,
-	IRQ_STARTUP_ABORT = 2,
-};
-
-struct irq_devres {
-	unsigned int irq;
-	void *dev_id;
-};
-
-struct irq_desc_devres {
-	unsigned int from;
-	unsigned int cnt;
-};
-
-struct irq_generic_chip_devres {
-	struct irq_chip_generic *gc;
-	u32 msk;
-	unsigned int clr;
-	unsigned int set;
-};
-
-enum {
-	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
-	IRQ_DOMAIN_NAME_ALLOCATED = 2,
-	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
-	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
-	IRQ_DOMAIN_FLAG_MSI = 16,
-	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
-	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
-	IRQ_DOMAIN_FLAG_NONCORE = 65536,
-};
-
-enum {
-	IRQCHIP_FWNODE_REAL = 0,
-	IRQCHIP_FWNODE_NAMED = 1,
-	IRQCHIP_FWNODE_NAMED_ID = 2,
-};
-
-struct irqchip_fwid {
-	struct fwnode_handle fwnode;
-	unsigned int type;
-	char *name;
-	phys_addr_t *pa;
-};
-
-enum {
-	AFFINITY = 0,
-	AFFINITY_LIST = 1,
-	EFFECTIVE = 2,
-	EFFECTIVE_LIST = 3,
-};
-
-struct msi_alloc_info {
-	struct msi_desc *desc;
-	irq_hw_number_t hwirq;
-	union {
-		long unsigned int ul;
-		void *ptr;
-	} scratchpad[2];
-};
-
-typedef struct msi_alloc_info msi_alloc_info_t;
-
-struct msi_domain_info;
-
-struct msi_domain_ops {
-	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
-	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
-	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
-	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
-	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
-	void (*msi_finish)(msi_alloc_info_t *, int);
-	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
-	int (*handle_error)(struct irq_domain *, struct msi_desc *, int);
-	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
-	void (*domain_free_irqs)(struct irq_domain *, struct device *);
-};
-
-struct msi_domain_info {
-	u32 flags;
-	struct msi_domain_ops *ops;
-	struct irq_chip *chip;
-	void *chip_data;
-	irq_flow_handler_t handler;
-	void *handler_data;
-	const char *handler_name;
-	void *data;
-};
-
-enum {
-	MSI_FLAG_USE_DEF_DOM_OPS = 1,
-	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
-	MSI_FLAG_MULTI_PCI_MSI = 4,
-	MSI_FLAG_PCI_MSIX = 8,
-	MSI_FLAG_ACTIVATE_EARLY = 16,
-	MSI_FLAG_MUST_REACTIVATE = 32,
-	MSI_FLAG_LEVEL_CAPABLE = 64,
-};
-
-struct irq_affinity {
-	unsigned int pre_vectors;
-	unsigned int post_vectors;
-	unsigned int nr_sets;
-	unsigned int set_size[4];
-	void (*calc_sets)(struct irq_affinity *, unsigned int);
-	void *priv;
-};
-
-struct node_vectors {
-	unsigned int id;
-	union {
-		unsigned int nvectors;
-		unsigned int ncpus;
-	};
-};
-
-typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
-
-struct rcu_synchronize {
-	struct callback_head head;
-	struct completion completion;
-};
-
-struct trace_event_raw_rcu_utilization {
-	struct trace_entry ent;
-	const char *s;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rcu_utilization {};
-
-typedef void (*btf_trace_rcu_utilization)(void *, const char *);
-
-struct rcu_tasks;
-
-typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
-
-typedef void (*pregp_func_t)();
-
-typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
-
-typedef void (*postscan_func_t)(struct list_head *);
-
-typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
-
-typedef void (*postgp_func_t)(struct rcu_tasks *);
-
-struct rcu_tasks {
-	struct callback_head *cbs_head;
-	struct callback_head **cbs_tail;
-	struct wait_queue_head cbs_wq;
-	raw_spinlock_t cbs_lock;
-	int gp_state;
-	int gp_sleep;
-	int init_fract;
-	long unsigned int gp_jiffies;
-	long unsigned int gp_start;
-	long unsigned int n_gps;
-	long unsigned int n_ipis;
-	long unsigned int n_ipis_fails;
-	struct task_struct *kthread_ptr;
-	rcu_tasks_gp_func_t gp_func;
-	pregp_func_t pregp_func;
-	pertask_func_t pertask_func;
-	postscan_func_t postscan_func;
-	holdouts_func_t holdouts_func;
-	postgp_func_t postgp_func;
-	call_rcu_func_t call_func;
-	char *name;
-	char *kname;
-};
-
-enum {
-	GP_IDLE = 0,
-	GP_ENTER = 1,
-	GP_PASSED = 2,
-	GP_EXIT = 3,
-	GP_REPLAY = 4,
-};
-
-struct rcu_cblist {
-	struct callback_head *head;
-	struct callback_head **tail;
-	long int len;
-};
-
-enum rcutorture_type {
-	RCU_FLAVOR = 0,
-	RCU_TASKS_FLAVOR = 1,
-	RCU_TASKS_RUDE_FLAVOR = 2,
-	RCU_TASKS_TRACING_FLAVOR = 3,
-	RCU_TRIVIAL_FLAVOR = 4,
-	SRCU_FLAVOR = 5,
-	INVALID_RCU_FLAVOR = 6,
-};
-
-enum tick_dep_bits {
-	TICK_DEP_BIT_POSIX_TIMER = 0,
-	TICK_DEP_BIT_PERF_EVENTS = 1,
-	TICK_DEP_BIT_SCHED = 2,
-	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
-	TICK_DEP_BIT_RCU = 4,
-	TICK_DEP_BIT_RCU_EXP = 5,
-};
-
-struct rcu_exp_work {
-	long unsigned int rew_s;
-	struct work_struct rew_work;
-};
-
-struct rcu_node {
-	raw_spinlock_t lock;
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	long unsigned int completedqs;
-	long unsigned int qsmask;
-	long unsigned int rcu_gp_init_mask;
-	long unsigned int qsmaskinit;
-	long unsigned int qsmaskinitnext;
-	long unsigned int expmask;
-	long unsigned int expmaskinit;
-	long unsigned int expmaskinitnext;
-	long unsigned int cbovldmask;
-	long unsigned int ffmask;
-	long unsigned int grpmask;
-	int grplo;
-	int grphi;
-	u8 grpnum;
-	u8 level;
-	bool wait_blkd_tasks;
-	struct rcu_node *parent;
-	struct list_head blkd_tasks;
-	struct list_head *gp_tasks;
-	struct list_head *exp_tasks;
-	struct list_head *boost_tasks;
-	struct rt_mutex boost_mtx;
-	long unsigned int boost_time;
-	struct task_struct *boost_kthread_task;
-	unsigned int boost_kthread_status;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	raw_spinlock_t fqslock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t exp_lock;
-	long unsigned int exp_seq_rq;
-	wait_queue_head_t exp_wq[4];
-	struct rcu_exp_work rew;
-	bool exp_need_flush;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-union rcu_noqs {
-	struct {
-		u8 norm;
-		u8 exp;
-	} b;
-	u16 s;
-};
-
-struct rcu_data {
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	union rcu_noqs cpu_no_qs;
-	bool core_needs_qs;
-	bool beenonline;
-	bool gpwrap;
-	bool exp_deferred_qs;
-	bool cpu_started;
-	struct rcu_node *mynode;
-	long unsigned int grpmask;
-	long unsigned int ticks_this_gp;
-	struct irq_work defer_qs_iw;
-	bool defer_qs_iw_pending;
-	struct work_struct strict_work;
-	struct rcu_segcblist cblist;
-	long int qlen_last_fqs_check;
-	long unsigned int n_cbs_invoked;
-	long unsigned int n_force_qs_snap;
-	long int blimit;
-	int dynticks_snap;
-	long int dynticks_nesting;
-	long int dynticks_nmi_nesting;
-	atomic_t dynticks;
-	bool rcu_need_heavy_qs;
-	bool rcu_urgent_qs;
-	bool rcu_forced_tick;
-	bool rcu_forced_tick_exp;
-	struct callback_head barrier_head;
-	int exp_dynticks_snap;
-	struct task_struct *rcu_cpu_kthread_task;
-	unsigned int rcu_cpu_kthread_status;
-	char rcu_cpu_has_work;
-	unsigned int softirq_snap;
-	struct irq_work rcu_iw;
-	bool rcu_iw_pending;
-	long unsigned int rcu_iw_gp_seq;
-	long unsigned int rcu_ofl_gp_seq;
-	short int rcu_ofl_gp_flags;
-	long unsigned int rcu_onl_gp_seq;
-	short int rcu_onl_gp_flags;
-	long unsigned int last_fqs_resched;
-	int cpu;
-};
-
-struct rcu_state {
-	struct rcu_node node[9];
-	struct rcu_node *level[3];
-	int ncpus;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u8 boost;
-	long unsigned int gp_seq;
-	long unsigned int gp_max;
-	struct task_struct *gp_kthread;
-	struct swait_queue_head gp_wq;
-	short int gp_flags;
-	short int gp_state;
-	long unsigned int gp_wake_time;
-	long unsigned int gp_wake_seq;
-	struct mutex barrier_mutex;
-	atomic_t barrier_cpu_count;
-	struct completion barrier_completion;
-	long unsigned int barrier_sequence;
-	struct mutex exp_mutex;
-	struct mutex exp_wake_mutex;
-	long unsigned int expedited_sequence;
-	atomic_t expedited_need_qs;
-	struct swait_queue_head expedited_wq;
-	int ncpus_snap;
-	u8 cbovld;
-	u8 cbovldnext;
-	long unsigned int jiffies_force_qs;
-	long unsigned int jiffies_kick_kthreads;
-	long unsigned int n_force_qs;
-	long unsigned int gp_start;
-	long unsigned int gp_end;
-	long unsigned int gp_activity;
-	long unsigned int gp_req_activity;
-	long unsigned int jiffies_stall;
-	long unsigned int jiffies_resched;
-	long unsigned int n_force_qs_gpstart;
-	const char *name;
-	char abbr;
-	long: 56;
-	long: 64;
-	long: 64;
-	raw_spinlock_t ofl_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kvfree_rcu_bulk_data {
-	long unsigned int nr_records;
-	struct kvfree_rcu_bulk_data *next;
-	void *records[0];
-};
-
-struct kfree_rcu_cpu;
-
-struct kfree_rcu_cpu_work {
-	struct rcu_work rcu_work;
-	struct callback_head *head_free;
-	struct kvfree_rcu_bulk_data *bkvhead_free[2];
-	struct kfree_rcu_cpu *krcp;
-};
-
-struct kfree_rcu_cpu {
-	struct callback_head *head;
-	struct kvfree_rcu_bulk_data *bkvhead[2];
-	struct kfree_rcu_cpu_work krw_arr[2];
-	raw_spinlock_t lock;
-	struct delayed_work monitor_work;
-	bool monitor_todo;
-	bool initialized;
-	int count;
-	struct work_struct page_cache_work;
-	atomic_t work_in_progress;
-	struct hrtimer hrtimer;
-	struct llist_head bkvcache;
-	int nr_bkv_objs;
-};
-
-enum dma_sync_target {
-	SYNC_FOR_CPU = 0,
-	SYNC_FOR_DEVICE = 1,
-};
-
-struct dma_devres {
-	size_t size;
-	void *vaddr;
-	dma_addr_t dma_handle;
-	long unsigned int attrs;
-};
-
-struct reserved_mem_ops;
-
-struct reserved_mem {
-	const char *name;
-	long unsigned int fdt_node;
-	long unsigned int phandle;
-	const struct reserved_mem_ops *ops;
-	phys_addr_t base;
-	phys_addr_t size;
-	void *priv;
-};
-
-struct reserved_mem_ops {
-	int (*device_init)(struct reserved_mem *, struct device *);
-	void (*device_release)(struct reserved_mem *, struct device *);
-};
-
-typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
-
-struct dma_coherent_mem {
-	void *virt_base;
-	dma_addr_t device_base;
-	long unsigned int pfn_base;
-	int size;
+struct cma {
+	long unsigned int base_pfn;
+	long unsigned int count;
 	long unsigned int *bitmap;
-	spinlock_t spinlock;
-	bool use_dev_dma_pfn_offset;
-};
-
-struct trace_event_raw_swiotlb_bounced {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u64 dma_mask;
-	dma_addr_t dev_addr;
-	size_t size;
-	enum swiotlb_force swiotlb_force;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_swiotlb_bounced {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);
-
-struct gen_pool;
-
-typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
-
-struct gen_pool {
+	unsigned int order_per_bit;
 	spinlock_t lock;
-	struct list_head chunks;
-	int min_alloc_order;
-	genpool_algo_t algo;
-	void *data;
+	char name[64];
+	atomic64_t nr_pages_succeeded;
+	atomic64_t nr_pages_failed;
+	struct cma_kobject *cma_kobj;
+	bool reserve_pages_on_error;
+};
+
+struct load_info {
 	const char *name;
-};
-
-enum kcmp_type {
-	KCMP_FILE = 0,
-	KCMP_VM = 1,
-	KCMP_FILES = 2,
-	KCMP_FS = 3,
-	KCMP_SIGHAND = 4,
-	KCMP_IO = 5,
-	KCMP_SYSVSEM = 6,
-	KCMP_EPOLL_TFD = 7,
-	KCMP_TYPES = 8,
-};
-
-struct kcmp_epoll_slot {
-	__u32 efd;
-	__u32 tfd;
-	__u32 toff;
-};
-
-enum profile_type {
-	PROFILE_TASK_EXIT = 0,
-	PROFILE_MUNMAP = 1,
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	long unsigned int len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	long unsigned int symoffs;
+	long unsigned int stroffs;
+	long unsigned int init_typeoffs;
+	long unsigned int core_typeoffs;
+	struct _ddebug *debug;
+	unsigned int num_debug;
+	bool sig_ok;
+	long unsigned int mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
 };
 
 struct profile_hit {
@@ -24725,68 +67718,6 @@
 	u32 hits;
 };
 
-struct stacktrace_cookie {
-	long unsigned int *store;
-	unsigned int size;
-	unsigned int skip;
-	unsigned int len;
-};
-
-typedef __kernel_long_t __kernel_suseconds_t;
-
-typedef __kernel_suseconds_t suseconds_t;
-
-typedef __u64 timeu64_t;
-
-struct __kernel_itimerspec {
-	struct __kernel_timespec it_interval;
-	struct __kernel_timespec it_value;
-};
-
-struct timezone {
-	int tz_minuteswest;
-	int tz_dsttime;
-};
-
-struct itimerspec64 {
-	struct timespec64 it_interval;
-	struct timespec64 it_value;
-};
-
-struct old_itimerspec32 {
-	struct old_timespec32 it_interval;
-	struct old_timespec32 it_value;
-};
-
-struct old_timex32 {
-	u32 modes;
-	s32 offset;
-	s32 freq;
-	s32 maxerror;
-	s32 esterror;
-	s32 status;
-	s32 constant;
-	s32 precision;
-	s32 tolerance;
-	struct old_timeval32 time;
-	s32 tick;
-	s32 ppsfreq;
-	s32 jitter;
-	s32 shift;
-	s32 stabil;
-	s32 jitcnt;
-	s32 calcnt;
-	s32 errcnt;
-	s32 stbcnt;
-	s32 tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct __kernel_timex_timeval {
 	__kernel_time64_t tv_sec;
 	long long int tv_usec;
@@ -24821,327 +67752,8 @@
 	long: 64;
 };
 
-struct trace_event_raw_timer_class {
-	struct trace_entry ent;
-	void *timer;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_start {
-	struct trace_entry ent;
-	void *timer;
-	void *function;
-	long unsigned int expires;
-	long unsigned int now;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_expire_entry {
-	struct trace_entry ent;
-	void *timer;
-	long unsigned int now;
-	void *function;
-	long unsigned int baseclk;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_init {
-	struct trace_entry ent;
-	void *hrtimer;
-	clockid_t clockid;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_start {
-	struct trace_entry ent;
-	void *hrtimer;
-	void *function;
-	s64 expires;
-	s64 softexpires;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_expire_entry {
-	struct trace_entry ent;
-	void *hrtimer;
-	s64 now;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_class {
-	struct trace_entry ent;
-	void *hrtimer;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_state {
-	struct trace_entry ent;
-	int which;
-	long long unsigned int expires;
-	long int value_sec;
-	long int value_nsec;
-	long int interval_sec;
-	long int interval_nsec;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_expire {
-	struct trace_entry ent;
-	int which;
-	pid_t pid;
-	long long unsigned int now;
-	char __data[0];
-};
-
-struct trace_event_raw_tick_stop {
-	struct trace_entry ent;
-	int success;
-	int dependency;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_timer_class {};
-
-struct trace_event_data_offsets_timer_start {};
-
-struct trace_event_data_offsets_timer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_init {};
-
-struct trace_event_data_offsets_hrtimer_start {};
-
-struct trace_event_data_offsets_hrtimer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_class {};
-
-struct trace_event_data_offsets_itimer_state {};
-
-struct trace_event_data_offsets_itimer_expire {};
-
-struct trace_event_data_offsets_tick_stop {};
-
-typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
-
-typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
-
-typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
-
-typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
-
-typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
-
-typedef void (*btf_trace_tick_stop)(void *, int, int);
-
-struct timer_base {
-	raw_spinlock_t lock;
-	struct timer_list *running_timer;
-	long unsigned int clk;
-	long unsigned int next_expiry;
-	unsigned int cpu;
-	bool next_expiry_recalc;
-	bool is_idle;
-	long unsigned int pending_map[9];
-	struct hlist_head vectors[576];
-	long: 64;
-	long: 64;
-};
-
-struct process_timer {
-	struct timer_list timer;
-	struct task_struct *task;
-};
-
-enum clock_event_state {
-	CLOCK_EVT_STATE_DETACHED = 0,
-	CLOCK_EVT_STATE_SHUTDOWN = 1,
-	CLOCK_EVT_STATE_PERIODIC = 2,
-	CLOCK_EVT_STATE_ONESHOT = 3,
-	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
-};
-
-struct clock_event_device {
-	void (*event_handler)(struct clock_event_device *);
-	int (*set_next_event)(long unsigned int, struct clock_event_device *);
-	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
-	ktime_t next_event;
-	u64 max_delta_ns;
-	u64 min_delta_ns;
-	u32 mult;
-	u32 shift;
-	enum clock_event_state state_use_accessors;
-	unsigned int features;
-	long unsigned int retries;
-	int (*set_state_periodic)(struct clock_event_device *);
-	int (*set_state_oneshot)(struct clock_event_device *);
-	int (*set_state_oneshot_stopped)(struct clock_event_device *);
-	int (*set_state_shutdown)(struct clock_event_device *);
-	int (*tick_resume)(struct clock_event_device *);
-	void (*broadcast)(const struct cpumask *);
-	void (*suspend)(struct clock_event_device *);
-	void (*resume)(struct clock_event_device *);
-	long unsigned int min_delta_ticks;
-	long unsigned int max_delta_ticks;
-	const char *name;
-	int rating;
-	int irq;
-	int bound_on;
-	const struct cpumask *cpumask;
-	struct list_head list;
-	struct module *owner;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum tick_device_mode {
-	TICKDEV_MODE_PERIODIC = 0,
-	TICKDEV_MODE_ONESHOT = 1,
-};
-
-struct tick_device {
-	struct clock_event_device *evtdev;
-	enum tick_device_mode mode;
-};
-
-struct ktime_timestamps {
-	u64 mono;
-	u64 boot;
-	u64 real;
-};
-
-struct system_time_snapshot {
-	u64 cycles;
-	ktime_t real;
-	ktime_t raw;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-};
-
-struct system_device_crosststamp {
-	ktime_t device;
-	ktime_t sys_realtime;
-	ktime_t sys_monoraw;
-};
-
-struct system_counterval_t {
-	u64 cycles;
-	struct clocksource *cs;
-};
-
-typedef struct {
-	seqcount_t seqcount;
-} seqcount_latch_t;
-
-struct audit_ntp_val {
-	long long int oldval;
-	long long int newval;
-};
-
-struct audit_ntp_data {
-	struct audit_ntp_val vals[6];
-};
-
-enum timekeeping_adv_mode {
-	TK_ADV_TICK = 0,
-	TK_ADV_FREQ = 1,
-};
-
-struct tk_fast {
-	seqcount_latch_t seq;
-	struct tk_read_base base[2];
-};
-
-enum tick_nohz_mode {
-	NOHZ_MODE_INACTIVE = 0,
-	NOHZ_MODE_LOWRES = 1,
-	NOHZ_MODE_HIGHRES = 2,
-};
-
-struct tick_sched {
-	struct hrtimer sched_timer;
-	long unsigned int check_clocks;
-	enum tick_nohz_mode nohz_mode;
-	unsigned int inidle: 1;
-	unsigned int tick_stopped: 1;
-	unsigned int idle_active: 1;
-	unsigned int do_timer_last: 1;
-	unsigned int got_idle_tick: 1;
-	ktime_t last_tick;
-	ktime_t next_tick;
-	long unsigned int idle_jiffies;
-	long unsigned int idle_calls;
-	long unsigned int idle_sleeps;
-	ktime_t idle_entrytime;
-	ktime_t idle_waketime;
-	ktime_t idle_exittime;
-	ktime_t idle_sleeptime;
-	ktime_t iowait_sleeptime;
-	long unsigned int last_jiffies;
-	u64 timer_expires;
-	u64 timer_expires_base;
-	u64 next_timer;
-	ktime_t idle_expires;
-	atomic_t tick_dep_mask;
-};
-
-struct timer_list_iter {
-	int cpu;
-	bool second_pass;
-	u64 now;
-};
-
-struct tm {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	long int tm_year;
-	int tm_wday;
-	int tm_yday;
-};
-
 typedef __kernel_timer_t timer_t;
 
-struct rtc_time {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	int tm_year;
-	int tm_wday;
-	int tm_yday;
-	int tm_isdst;
-};
-
-struct rtc_wkalrm {
-	unsigned char enabled;
-	unsigned char pending;
-	struct rtc_time time;
-};
-
 enum alarmtimer_type {
 	ALARM_REALTIME = 0,
 	ALARM_BOOTTIME = 1,
@@ -25224,526 +67836,28 @@
 	void (*timer_wait_running)(struct k_itimer *);
 };
 
-struct class_interface {
-	struct list_head node;
-	struct class *class;
-	int (*add_dev)(struct device *, struct class_interface *);
-	void (*remove_dev)(struct device *, struct class_interface *);
-};
-
-struct rtc_class_ops {
-	int (*ioctl)(struct device *, unsigned int, long unsigned int);
-	int (*read_time)(struct device *, struct rtc_time *);
-	int (*set_time)(struct device *, struct rtc_time *);
-	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*proc)(struct device *, struct seq_file *);
-	int (*alarm_irq_enable)(struct device *, unsigned int);
-	int (*read_offset)(struct device *, long int *);
-	int (*set_offset)(struct device *, long int);
-};
-
-struct rtc_device;
-
-struct rtc_timer {
-	struct timerqueue_node node;
-	ktime_t period;
-	void (*func)(struct rtc_device *);
-	struct rtc_device *rtc;
-	int enabled;
-};
-
-struct rtc_device {
-	struct device dev;
-	struct module *owner;
-	int id;
-	const struct rtc_class_ops *ops;
-	struct mutex ops_lock;
-	struct cdev char_dev;
-	long unsigned int flags;
-	long unsigned int irq_data;
-	spinlock_t irq_lock;
-	wait_queue_head_t irq_queue;
-	struct fasync_struct *async_queue;
-	int irq_freq;
-	int max_user_freq;
-	struct timerqueue_head timerqueue;
-	struct rtc_timer aie_timer;
-	struct rtc_timer uie_rtctimer;
-	struct hrtimer pie_timer;
-	int pie_enabled;
-	struct work_struct irqwork;
-	int uie_unsupported;
-	long int set_offset_nsec;
-	bool registered;
-	bool nvram_old_abi;
-	struct bin_attribute *nvram;
-	time64_t range_min;
-	timeu64_t range_max;
-	time64_t start_secs;
-	time64_t offset_secs;
-	bool set_start_time;
-	struct work_struct uie_task;
-	struct timer_list uie_timer;
-	unsigned int oldsecs;
-	unsigned int uie_irq_active: 1;
-	unsigned int stop_uie_polling: 1;
-	unsigned int uie_task_active: 1;
-	unsigned int uie_timer_active: 1;
-};
-
-struct property_entry;
-
-struct platform_device_info {
-	struct device *parent;
-	struct fwnode_handle *fwnode;
-	bool of_node_reused;
-	const char *name;
-	int id;
-	const struct resource *res;
-	unsigned int num_res;
-	const void *data;
-	size_t size_data;
-	u64 dma_mask;
-	const struct property_entry *properties;
-};
-
-enum dev_prop_type {
-	DEV_PROP_U8 = 0,
-	DEV_PROP_U16 = 1,
-	DEV_PROP_U32 = 2,
-	DEV_PROP_U64 = 3,
-	DEV_PROP_STRING = 4,
-	DEV_PROP_REF = 5,
-};
-
-struct property_entry {
-	const char *name;
-	size_t length;
-	bool is_inline;
-	enum dev_prop_type type;
-	union {
-		const void *pointer;
-		union {
-			u8 u8_data[8];
-			u16 u16_data[4];
-			u32 u32_data[2];
-			u64 u64_data[1];
-			const char *str[1];
-		} value;
-	};
-};
-
-struct trace_event_raw_alarmtimer_suspend {
-	struct trace_entry ent;
-	s64 expires;
-	unsigned char alarm_type;
-	char __data[0];
-};
-
-struct trace_event_raw_alarm_class {
-	struct trace_entry ent;
-	void *alarm;
-	unsigned char alarm_type;
-	s64 expires;
-	s64 now;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_alarmtimer_suspend {};
-
-struct trace_event_data_offsets_alarm_class {};
-
-typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
-
-typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
-
-struct alarm_base {
-	spinlock_t lock;
-	struct timerqueue_head timerqueue;
-	ktime_t (*get_ktime)();
-	void (*get_timespec)(struct timespec64 *);
-	clockid_t base_clockid;
-};
-
-struct sigevent {
-	sigval_t sigev_value;
-	int sigev_signo;
-	int sigev_notify;
-	union {
-		int _pad[12];
-		int _tid;
-		struct {
-			void (*_function)(sigval_t);
-			void *_attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef struct sigevent sigevent_t;
-
-struct compat_sigevent {
-	compat_sigval_t sigev_value;
-	compat_int_t sigev_signo;
-	compat_int_t sigev_notify;
-	union {
-		compat_int_t _pad[13];
-		compat_int_t _tid;
-		struct {
-			compat_uptr_t _function;
-			compat_uptr_t _attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef unsigned int uint;
-
-struct posix_clock;
-
-struct posix_clock_operations {
-	struct module *owner;
-	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
-	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
-	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
-	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
-	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
-	int (*open)(struct posix_clock *, fmode_t);
-	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
-	int (*release)(struct posix_clock *);
-	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
-};
-
-struct posix_clock {
-	struct posix_clock_operations ops;
-	struct cdev cdev;
-	struct device *dev;
-	struct rw_semaphore rwsem;
-	bool zombie;
-};
-
-struct posix_clock_desc {
-	struct file *fp;
-	struct posix_clock *clk;
-};
-
-struct __kernel_old_itimerval {
-	struct __kernel_old_timeval it_interval;
-	struct __kernel_old_timeval it_value;
-};
-
-struct old_itimerval32 {
-	struct old_timeval32 it_interval;
-	struct old_timeval32 it_value;
-};
-
-typedef s64 int64_t;
-
-struct ce_unbind {
-	struct clock_event_device *ce;
-	int res;
-};
-
-enum tick_broadcast_state {
-	TICK_BROADCAST_EXIT = 0,
-	TICK_BROADCAST_ENTER = 1,
-};
-
-enum tick_broadcast_mode {
-	TICK_BROADCAST_OFF = 0,
-	TICK_BROADCAST_ON = 1,
-	TICK_BROADCAST_FORCE = 2,
-};
-
-struct clock_data {
-	seqcount_latch_t seq;
-	struct clock_read_data read_data[2];
-	ktime_t wrap_kt;
-	long unsigned int rate;
-	u64 (*actual_read_sched_clock)();
-};
-
-struct proc_timens_offset {
-	int clockid;
-	struct timespec64 val;
-};
-
-union futex_key {
-	struct {
-		u64 i_seq;
-		long unsigned int pgoff;
-		unsigned int offset;
-	} shared;
-	struct {
-		union {
-			struct mm_struct *mm;
-			u64 __tmp;
-		};
-		long unsigned int address;
-		unsigned int offset;
-	} private;
-	struct {
-		u64 ptr;
-		long unsigned int word;
-		unsigned int offset;
-	} both;
-};
-
-struct futex_pi_state {
-	struct list_head list;
-	struct rt_mutex pi_mutex;
-	struct task_struct *owner;
-	refcount_t refcount;
-	union futex_key key;
-};
-
-struct futex_q {
-	struct plist_node list;
-	struct task_struct *task;
-	spinlock_t *lock_ptr;
-	union futex_key key;
-	struct futex_pi_state *pi_state;
-	struct rt_mutex_waiter *rt_waiter;
-	union futex_key *requeue_pi_key;
-	u32 bitset;
-};
-
-struct futex_hash_bucket {
-	atomic_t waiters;
-	spinlock_t lock;
-	struct plist_head chain;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum futex_access {
-	FUTEX_READ = 0,
-	FUTEX_WRITE = 1,
-};
-
-typedef bool (*smp_cond_func_t)(int, void *);
-
-struct call_function_data {
-	call_single_data_t *csd;
-	cpumask_var_t cpumask;
-	cpumask_var_t cpumask_ipi;
-};
-
-struct smp_call_on_cpu_struct {
-	struct work_struct work;
-	struct completion done;
-	int (*func)(void *);
-	void *data;
-	int ret;
-	int cpu;
-};
-
-typedef short unsigned int __kernel_old_uid_t;
-
-typedef short unsigned int __kernel_old_gid_t;
-
-typedef __kernel_old_uid_t old_uid_t;
-
-typedef __kernel_old_gid_t old_gid_t;
-
-struct latch_tree_root {
-	seqcount_latch_t seq;
-	struct rb_root tree[2];
-};
-
-struct latch_tree_ops {
-	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
-	int (*comp)(void *, struct latch_tree_node *);
-};
-
-struct modversion_info {
-	long unsigned int crc;
-	char name[56];
-};
-
-struct module_use {
-	struct list_head source_list;
-	struct list_head target_list;
-	struct module *source;
-	struct module *target;
-};
-
-struct module_sect_attr {
-	struct bin_attribute battr;
-	long unsigned int address;
-};
-
-struct module_sect_attrs {
-	struct attribute_group grp;
-	unsigned int nsections;
-	struct module_sect_attr attrs[0];
-};
-
-struct module_notes_attrs {
-	struct kobject *dir;
-	unsigned int notes;
-	struct bin_attribute attrs[0];
-};
-
-enum mod_license {
-	NOT_GPL_ONLY = 0,
-	GPL_ONLY = 1,
-	WILL_BE_GPL_ONLY = 2,
-};
-
-struct symsearch {
-	const struct kernel_symbol *start;
-	const struct kernel_symbol *stop;
-	const s32 *crcs;
-	enum mod_license license;
-	bool unused;
-};
-
-enum kernel_read_file_id {
-	READING_UNKNOWN = 0,
-	READING_FIRMWARE = 1,
-	READING_MODULE = 2,
-	READING_KEXEC_IMAGE = 3,
-	READING_KEXEC_INITRAMFS = 4,
-	READING_POLICY = 5,
-	READING_X509_CERTIFICATE = 6,
-	READING_MAX_ID = 7,
-};
-
-enum kernel_load_data_id {
-	LOADING_UNKNOWN = 0,
-	LOADING_FIRMWARE = 1,
-	LOADING_MODULE = 2,
-	LOADING_KEXEC_IMAGE = 3,
-	LOADING_KEXEC_INITRAMFS = 4,
-	LOADING_POLICY = 5,
-	LOADING_X509_CERTIFICATE = 6,
-	LOADING_MAX_ID = 7,
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
 };
 
 enum {
-	PROC_ENTRY_PERMANENT = 1,
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
 };
 
-struct _ddebug {
-	const char *modname;
-	const char *function;
-	const char *filename;
-	const char *format;
-	unsigned int lineno: 18;
-	unsigned int flags: 8;
-	union {
-		struct static_key_true dd_key_true;
-		struct static_key_false dd_key_false;
-	} key;
-};
-
-struct load_info {
-	const char *name;
-	struct module *mod;
-	Elf64_Ehdr *hdr;
-	long unsigned int len;
-	Elf64_Shdr *sechdrs;
-	char *secstrings;
-	char *strtab;
-	long unsigned int symoffs;
-	long unsigned int stroffs;
-	long unsigned int init_typeoffs;
-	long unsigned int core_typeoffs;
-	struct _ddebug *debug;
-	unsigned int num_debug;
-	bool sig_ok;
-	long unsigned int mod_kallsyms_init_off;
-	struct {
-		unsigned int sym;
-		unsigned int str;
-		unsigned int mod;
-		unsigned int vers;
-		unsigned int info;
-		unsigned int pcpu;
-	} index;
-};
-
-struct trace_event_raw_module_load {
-	struct trace_entry ent;
-	unsigned int taints;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_free {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_refcnt {
-	struct trace_entry ent;
-	long unsigned int ip;
-	int refcnt;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_request {
-	struct trace_entry ent;
-	long unsigned int ip;
-	bool wait;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_module_load {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_free {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_refcnt {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_module_load)(void *, struct module *);
-
-typedef void (*btf_trace_module_free)(void *, struct module *);
-
-typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
-
-struct mod_tree_root {
-	struct latch_tree_root root;
-	long unsigned int addr_min;
-	long unsigned int addr_max;
-};
-
-struct find_symbol_arg {
-	const char *name;
-	bool gplok;
-	bool warn;
-	struct module *owner;
-	const s32 *crc;
-	const struct kernel_symbol *sym;
-	enum mod_license license;
-};
-
-struct mod_initfree {
-	struct llist_node node;
-	void *module_init;
+enum pkey_id_type {
+	PKEY_ID_PGP = 0,
+	PKEY_ID_X509 = 1,
+	PKEY_ID_PKCS7 = 2,
 };
 
 struct module_signature {
@@ -25756,10 +67870,8 @@
 	__be32 sig_len;
 };
 
-enum pkey_id_type {
-	PKEY_ID_PGP = 0,
-	PKEY_ID_X509 = 1,
-	PKEY_ID_PKCS7 = 2,
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
 };
 
 struct kallsym_iter {
@@ -25777,552 +67889,16 @@
 	int show_value;
 };
 
-typedef struct {
-	int val[2];
-} __kernel_fsid_t;
-
-struct kstatfs {
-	long int f_type;
-	long int f_bsize;
-	u64 f_blocks;
-	u64 f_bfree;
-	u64 f_bavail;
-	u64 f_files;
-	u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	long int f_namelen;
-	long int f_frsize;
-	long int f_flags;
-	long int f_spare[4];
-};
-
-typedef __u16 comp_t;
-
-struct acct_v3 {
-	char ac_flag;
-	char ac_version;
-	__u16 ac_tty;
-	__u32 ac_exitcode;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u32 ac_etime;
-	comp_t ac_utime;
-	comp_t ac_stime;
-	comp_t ac_mem;
-	comp_t ac_io;
-	comp_t ac_rw;
-	comp_t ac_minflt;
-	comp_t ac_majflt;
-	comp_t ac_swaps;
-	char ac_comm[16];
-};
-
-typedef struct acct_v3 acct_t;
-
-struct fs_pin {
-	wait_queue_head_t wait;
-	int done;
-	struct hlist_node s_list;
-	struct hlist_node m_list;
-	void (*kill)(struct fs_pin *);
-};
-
-struct bsd_acct_struct {
-	struct fs_pin pin;
-	atomic_long_t count;
-	struct callback_head rcu;
-	struct mutex lock;
-	int active;
-	long unsigned int needcheck;
-	struct file *file;
-	struct pid_namespace *ns;
-	struct work_struct work;
-	struct completion done;
-};
-
-struct elf64_note {
-	Elf64_Word n_namesz;
-	Elf64_Word n_descsz;
-	Elf64_Word n_type;
-};
-
-struct elf_note_section {
-	struct elf64_note n_hdr;
-	u8 n_data[0];
-};
-
-typedef long unsigned int elf_greg_t;
-
-typedef elf_greg_t elf_gregset_t[34];
-
-struct elf_siginfo {
-	int si_signo;
-	int si_code;
-	int si_errno;
-};
-
-struct elf_prstatus {
-	struct elf_siginfo pr_info;
-	short int pr_cursig;
-	long unsigned int pr_sigpend;
-	long unsigned int pr_sighold;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	struct __kernel_old_timeval pr_utime;
-	struct __kernel_old_timeval pr_stime;
-	struct __kernel_old_timeval pr_cutime;
-	struct __kernel_old_timeval pr_cstime;
-	elf_gregset_t pr_reg;
-	int pr_fpvalid;
-};
-
-typedef u32 note_buf_t[106];
-
-struct compat_kexec_segment {
-	compat_uptr_t buf;
-	compat_size_t bufsz;
-	compat_ulong_t mem;
-	compat_size_t memsz;
-};
-
-struct elf64_phdr {
-	Elf64_Word p_type;
-	Elf64_Word p_flags;
-	Elf64_Off p_offset;
-	Elf64_Addr p_vaddr;
-	Elf64_Addr p_paddr;
-	Elf64_Xword p_filesz;
-	Elf64_Xword p_memsz;
-	Elf64_Xword p_align;
-};
-
-typedef struct elf64_phdr Elf64_Phdr;
-
-struct crypto_alg;
-
-struct crypto_tfm {
-	u32 crt_flags;
-	int node;
-	void (*exit)(struct crypto_tfm *);
-	struct crypto_alg *__crt_alg;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__crt_ctx[0];
-};
-
-struct cipher_alg {
-	unsigned int cia_min_keysize;
-	unsigned int cia_max_keysize;
-	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_alg {
-	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_type;
-
-struct crypto_alg {
-	struct list_head cra_list;
-	struct list_head cra_users;
-	u32 cra_flags;
-	unsigned int cra_blocksize;
-	unsigned int cra_ctxsize;
-	unsigned int cra_alignmask;
-	int cra_priority;
-	refcount_t cra_refcnt;
-	char cra_name[128];
-	char cra_driver_name[128];
-	const struct crypto_type *cra_type;
+struct bpf_iter__ksym {
 	union {
-		struct cipher_alg cipher;
-		struct compress_alg compress;
-	} cra_u;
-	int (*cra_init)(struct crypto_tfm *);
-	void (*cra_exit)(struct crypto_tfm *);
-	void (*cra_destroy)(struct crypto_alg *);
-	struct module *cra_module;
-};
-
-struct crypto_instance;
-
-struct crypto_type {
-	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
-	unsigned int (*extsize)(struct crypto_alg *);
-	int (*init)(struct crypto_tfm *, u32, u32);
-	int (*init_tfm)(struct crypto_tfm *);
-	void (*show)(struct seq_file *, struct crypto_alg *);
-	int (*report)(struct sk_buff *, struct crypto_alg *);
-	void (*free)(struct crypto_instance *);
-	unsigned int type;
-	unsigned int maskclear;
-	unsigned int maskset;
-	unsigned int tfmsize;
-};
-
-struct crypto_shash;
-
-struct shash_desc {
-	struct crypto_shash *tfm;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_shash {
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct kexec_sha_region {
-	long unsigned int start;
-	long unsigned int len;
-};
-
-enum migrate_reason {
-	MR_COMPACTION = 0,
-	MR_MEMORY_FAILURE = 1,
-	MR_MEMORY_HOTPLUG = 2,
-	MR_SYSCALL = 3,
-	MR_MEMPOLICY_MBIND = 4,
-	MR_NUMA_MISPLACED = 5,
-	MR_CONTIG_RANGE = 6,
-	MR_TYPES = 7,
-};
-
-typedef __kernel_ulong_t __kernel_ino_t;
-
-typedef __kernel_ino_t ino_t;
-
-enum kernfs_node_type {
-	KERNFS_DIR = 1,
-	KERNFS_FILE = 2,
-	KERNFS_LINK = 4,
-};
-
-enum kernfs_root_flag {
-	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
-	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
-	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
-	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
-};
-
-struct kernfs_fs_context {
-	struct kernfs_root *root;
-	void *ns_tag;
-	long unsigned int magic;
-	bool new_sb_created;
-};
-
-enum bpf_link_type {
-	BPF_LINK_TYPE_UNSPEC = 0,
-	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
-	BPF_LINK_TYPE_TRACING = 2,
-	BPF_LINK_TYPE_CGROUP = 3,
-	BPF_LINK_TYPE_ITER = 4,
-	BPF_LINK_TYPE_NETNS = 5,
-	BPF_LINK_TYPE_XDP = 6,
-	MAX_BPF_LINK_TYPE = 7,
-};
-
-struct bpf_link_info {
-	__u32 type;
-	__u32 id;
-	__u32 prog_id;
+		struct bpf_iter_meta *meta;
+	};
 	union {
-		struct {
-			__u64 tp_name;
-			__u32 tp_name_len;
-		} raw_tracepoint;
-		struct {
-			__u32 attach_type;
-		} tracing;
-		struct {
-			__u64 cgroup_id;
-			__u32 attach_type;
-		} cgroup;
-		struct {
-			__u64 target_name;
-			__u32 target_name_len;
-			union {
-				struct {
-					__u32 map_id;
-				} map;
-			};
-		} iter;
-		struct {
-			__u32 netns_ino;
-			__u32 attach_type;
-		} netns;
-		struct {
-			__u32 ifindex;
-		} xdp;
+		struct kallsym_iter *ksym;
 	};
 };
 
-struct bpf_link_ops;
-
-struct bpf_link {
-	atomic64_t refcnt;
-	u32 id;
-	enum bpf_link_type type;
-	const struct bpf_link_ops *ops;
-	struct bpf_prog *prog;
-	struct work_struct work;
-};
-
-struct bpf_link_ops {
-	void (*release)(struct bpf_link *);
-	void (*dealloc)(struct bpf_link *);
-	int (*detach)(struct bpf_link *);
-	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
-	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
-	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
-};
-
-struct bpf_cgroup_link {
-	struct bpf_link link;
-	struct cgroup *cgroup;
-	enum bpf_attach_type type;
-};
-
-enum {
-	CGRP_NOTIFY_ON_RELEASE = 0,
-	CGRP_CPUSET_CLONE_CHILDREN = 1,
-	CGRP_FREEZE = 2,
-	CGRP_FROZEN = 3,
-};
-
-enum {
-	CGRP_ROOT_NOPREFIX = 2,
-	CGRP_ROOT_XATTR = 4,
-	CGRP_ROOT_NS_DELEGATE = 8,
-	CGRP_ROOT_CPUSET_V2_MODE = 16,
-	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 32,
-	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 64,
-};
-
-struct cgroup_taskset {
-	struct list_head src_csets;
-	struct list_head dst_csets;
-	int nr_tasks;
-	int ssid;
-	struct list_head *csets;
-	struct css_set *cur_cset;
-	struct task_struct *cur_task;
-};
-
-struct cgroup_fs_context {
-	struct kernfs_fs_context kfc;
-	struct cgroup_root *root;
-	struct cgroup_namespace *ns;
-	unsigned int flags;
-	bool cpuset_clone_children;
-	bool none;
-	bool all_ss;
-	u16 subsys_mask;
-	char *name;
-	char *release_agent;
-};
-
-struct cgrp_cset_link {
-	struct cgroup *cgrp;
-	struct css_set *cset;
-	struct list_head cset_link;
-	struct list_head cgrp_link;
-};
-
-struct cgroup_mgctx {
-	struct list_head preloaded_src_csets;
-	struct list_head preloaded_dst_csets;
-	struct cgroup_taskset tset;
-	u16 ss_mask;
-};
-
-struct trace_event_raw_cgroup_root {
-	struct trace_entry ent;
-	int root;
-	u16 ss_mask;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_migrate {
-	struct trace_entry ent;
-	int dst_root;
-	int dst_id;
-	int dst_level;
-	int pid;
-	u32 __data_loc_dst_path;
-	u32 __data_loc_comm;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_event {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cgroup_root {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cgroup {
-	u32 path;
-};
-
-struct trace_event_data_offsets_cgroup_migrate {
-	u32 dst_path;
-	u32 comm;
-};
-
-struct trace_event_data_offsets_cgroup_event {
-	u32 path;
-};
-
-typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
-
-typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
-
-enum cgroup2_param {
-	Opt_nsdelegate = 0,
-	Opt_memory_localevents = 1,
-	Opt_memory_recursiveprot = 2,
-	nr__cgroup2_params = 3,
-};
-
-struct cgroupstats {
-	__u64 nr_sleeping;
-	__u64 nr_running;
-	__u64 nr_stopped;
-	__u64 nr_uninterruptible;
-	__u64 nr_io_wait;
-};
-
-enum cgroup_filetype {
-	CGROUP_FILE_PROCS = 0,
-	CGROUP_FILE_TASKS = 1,
-};
-
-struct cgroup_pidlist {
-	struct {
-		enum cgroup_filetype type;
-		struct pid_namespace *ns;
-	} key;
-	pid_t *list;
-	int length;
-	struct list_head links;
-	struct cgroup *owner;
-	struct delayed_work destroy_dwork;
-};
-
-enum cgroup1_param {
-	Opt_all = 0,
-	Opt_clone_children = 1,
-	Opt_cpuset_v2_mode = 2,
-	Opt_name = 3,
-	Opt_none = 4,
-	Opt_noprefix = 5,
-	Opt_release_agent = 6,
-	Opt_xattr = 7,
-};
-
-enum freezer_state_flags {
-	CGROUP_FREEZER_ONLINE = 1,
-	CGROUP_FREEZING_SELF = 2,
-	CGROUP_FREEZING_PARENT = 4,
-	CGROUP_FROZEN = 8,
-	CGROUP_FREEZING = 6,
-};
-
-struct freezer {
-	struct cgroup_subsys_state css;
-	unsigned int state;
-};
+typedef s64 int64_t;
 
 struct pids_cgroup {
 	struct cgroup_subsys_state css;
@@ -26332,337 +67908,6 @@
 	atomic64_t events_limit;
 };
 
-struct root_domain___2;
-
-struct fmeter {
-	int cnt;
-	int val;
-	time64_t time;
-	spinlock_t lock;
-};
-
-struct cpuset {
-	struct cgroup_subsys_state css;
-	long unsigned int flags;
-	cpumask_var_t cpus_allowed;
-	nodemask_t mems_allowed;
-	cpumask_var_t effective_cpus;
-	nodemask_t effective_mems;
-	cpumask_var_t subparts_cpus;
-	nodemask_t old_mems_allowed;
-	struct fmeter fmeter;
-	int attach_in_progress;
-	int pn;
-	int relax_domain_level;
-	int nr_subparts_cpus;
-	int partition_root_state;
-	int use_parent_ecpus;
-	int child_ecpus_count;
-};
-
-struct tmpmasks {
-	cpumask_var_t addmask;
-	cpumask_var_t delmask;
-	cpumask_var_t new_cpus;
-};
-
-typedef enum {
-	CS_ONLINE = 0,
-	CS_CPU_EXCLUSIVE = 1,
-	CS_MEM_EXCLUSIVE = 2,
-	CS_MEM_HARDWALL = 3,
-	CS_MEMORY_MIGRATE = 4,
-	CS_SCHED_LOAD_BALANCE = 5,
-	CS_SPREAD_PAGE = 6,
-	CS_SPREAD_SLAB = 7,
-} cpuset_flagbits_t;
-
-enum subparts_cmd {
-	partcmd_enable = 0,
-	partcmd_disable = 1,
-	partcmd_update = 2,
-};
-
-struct cpuset_migrate_mm_work {
-	struct work_struct work;
-	struct mm_struct *mm;
-	nodemask_t from;
-	nodemask_t to;
-};
-
-typedef enum {
-	FILE_MEMORY_MIGRATE = 0,
-	FILE_CPULIST = 1,
-	FILE_MEMLIST = 2,
-	FILE_EFFECTIVE_CPULIST = 3,
-	FILE_EFFECTIVE_MEMLIST = 4,
-	FILE_SUBPARTS_CPULIST = 5,
-	FILE_CPU_EXCLUSIVE = 6,
-	FILE_MEM_EXCLUSIVE = 7,
-	FILE_MEM_HARDWALL = 8,
-	FILE_SCHED_LOAD_BALANCE = 9,
-	FILE_PARTITION_ROOT = 10,
-	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
-	FILE_MEMORY_PRESSURE_ENABLED = 12,
-	FILE_MEMORY_PRESSURE = 13,
-	FILE_SPREAD_PAGE = 14,
-	FILE_SPREAD_SLAB = 15,
-} cpuset_filetype_t;
-
-struct kernel_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-};
-
-enum kernel_pkey_operation {
-	kernel_pkey_encrypt = 0,
-	kernel_pkey_decrypt = 1,
-	kernel_pkey_sign = 2,
-	kernel_pkey_verify = 3,
-};
-
-struct kernel_pkey_params {
-	struct key *key;
-	const char *encoding;
-	const char *hash_algo;
-	char *info;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	enum kernel_pkey_operation op: 8;
-};
-
-struct key_preparsed_payload {
-	char *description;
-	union key_payload payload;
-	const void *data;
-	size_t datalen;
-	size_t quotalen;
-	time64_t expiry;
-};
-
-struct key_match_data {
-	bool (*cmp)(const struct key *, const struct key_match_data *);
-	const void *raw_data;
-	void *preparsed;
-	unsigned int lookup_type;
-};
-
-struct idmap_key {
-	bool map_up;
-	u32 id;
-	u32 count;
-};
-
-struct ctl_path {
-	const char *procname;
-};
-
-typedef void (*exitcall_t)();
-
-struct cpu_stop_done {
-	atomic_t nr_todo;
-	int ret;
-	struct completion completion;
-};
-
-struct cpu_stopper {
-	struct task_struct *thread;
-	raw_spinlock_t lock;
-	bool enabled;
-	struct list_head works;
-	struct cpu_stop_work stop_work;
-};
-
-enum multi_stop_state {
-	MULTI_STOP_NONE = 0,
-	MULTI_STOP_PREPARE = 1,
-	MULTI_STOP_DISABLE_IRQ = 2,
-	MULTI_STOP_RUN = 3,
-	MULTI_STOP_EXIT = 4,
-};
-
-struct multi_stop_data {
-	cpu_stop_fn_t fn;
-	void *data;
-	unsigned int num_threads;
-	const struct cpumask *active_cpus;
-	enum multi_stop_state state;
-	atomic_t thread_ack;
-};
-
-typedef int __kernel_mqd_t;
-
-typedef __kernel_mqd_t mqd_t;
-
-enum audit_state {
-	AUDIT_DISABLED = 0,
-	AUDIT_BUILD_CONTEXT = 1,
-	AUDIT_RECORD_CONTEXT = 2,
-};
-
-struct audit_cap_data {
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	union {
-		unsigned int fE;
-		kernel_cap_t effective;
-	};
-	kernel_cap_t ambient;
-	kuid_t rootid;
-};
-
-struct audit_names {
-	struct list_head list;
-	struct filename *name;
-	int name_len;
-	bool hidden;
-	long unsigned int ino;
-	dev_t dev;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	dev_t rdev;
-	u32 osid;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	unsigned char type;
-	bool should_free;
-};
-
-struct mq_attr {
-	__kernel_long_t mq_flags;
-	__kernel_long_t mq_maxmsg;
-	__kernel_long_t mq_msgsize;
-	__kernel_long_t mq_curmsgs;
-	__kernel_long_t __reserved[4];
-};
-
-struct audit_proctitle {
-	int len;
-	char *value;
-};
-
-struct audit_aux_data;
-
-struct __kernel_sockaddr_storage;
-
-struct audit_tree_refs;
-
-struct audit_context {
-	int dummy;
-	int in_syscall;
-	enum audit_state state;
-	enum audit_state current_state;
-	unsigned int serial;
-	int major;
-	struct timespec64 ctime;
-	long unsigned int argv[4];
-	long int return_code;
-	u64 prio;
-	int return_valid;
-	struct audit_names preallocated_names[5];
-	int name_count;
-	struct list_head names_list;
-	char *filterkey;
-	struct path pwd;
-	struct audit_aux_data *aux;
-	struct audit_aux_data *aux_pids;
-	struct __kernel_sockaddr_storage *sockaddr;
-	size_t sockaddr_len;
-	pid_t pid;
-	pid_t ppid;
-	kuid_t uid;
-	kuid_t euid;
-	kuid_t suid;
-	kuid_t fsuid;
-	kgid_t gid;
-	kgid_t egid;
-	kgid_t sgid;
-	kgid_t fsgid;
-	long unsigned int personality;
-	int arch;
-	pid_t target_pid;
-	kuid_t target_auid;
-	kuid_t target_uid;
-	unsigned int target_sessionid;
-	u32 target_sid;
-	char target_comm[16];
-	struct audit_tree_refs *trees;
-	struct audit_tree_refs *first_trees;
-	struct list_head killed_trees;
-	int tree_count;
-	int type;
-	union {
-		struct {
-			int nargs;
-			long int args[6];
-		} socketcall;
-		struct {
-			kuid_t uid;
-			kgid_t gid;
-			umode_t mode;
-			u32 osid;
-			int has_perm;
-			uid_t perm_uid;
-			gid_t perm_gid;
-			umode_t perm_mode;
-			long unsigned int qbytes;
-		} ipc;
-		struct {
-			mqd_t mqdes;
-			struct mq_attr mqstat;
-		} mq_getsetattr;
-		struct {
-			mqd_t mqdes;
-			int sigev_signo;
-		} mq_notify;
-		struct {
-			mqd_t mqdes;
-			size_t msg_len;
-			unsigned int msg_prio;
-			struct timespec64 abs_timeout;
-		} mq_sendrecv;
-		struct {
-			int oflag;
-			umode_t mode;
-			struct mq_attr attr;
-		} mq_open;
-		struct {
-			pid_t pid;
-			struct audit_cap_data cap;
-		} capset;
-		struct {
-			int fd;
-			int flags;
-		} mmap;
-		struct {
-			int argc;
-		} execve;
-		struct {
-			char *name;
-		} module;
-	};
-	int fds[2];
-	struct audit_proctitle proctitle;
-};
-
-struct __kernel_sockaddr_storage {
-	union {
-		struct {
-			__kernel_sa_family_t ss_family;
-			char __data[126];
-		};
-		void *__align;
-	};
-};
-
 enum audit_nlgrps {
 	AUDIT_NLGRP_NONE = 0,
 	AUDIT_NLGRP_READLOG = 1,
@@ -26704,52 +67949,6 @@
 	char ctx[0];
 };
 
-struct net_generic {
-	union {
-		struct {
-			unsigned int len;
-			struct callback_head rcu;
-		} s;
-		void *ptr[0];
-	};
-};
-
-struct pernet_operations {
-	struct list_head list;
-	int (*init)(struct net *);
-	void (*pre_exit)(struct net *);
-	void (*exit)(struct net *);
-	void (*exit_batch)(struct list_head *);
-	unsigned int *id;
-	size_t size;
-};
-
-struct scm_creds {
-	u32 pid;
-	kuid_t uid;
-	kgid_t gid;
-};
-
-struct netlink_skb_parms {
-	struct scm_creds creds;
-	__u32 portid;
-	__u32 dst_group;
-	__u32 flags;
-	struct sock *sk;
-	bool nsid_is_set;
-	int nsid;
-};
-
-struct netlink_kernel_cfg {
-	unsigned int groups;
-	unsigned int flags;
-	void (*input)(struct sk_buff *);
-	struct mutex *cb_mutex;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-};
-
 struct audit_netlink_list {
 	__u32 portid;
 	struct net *net;
@@ -26785,791 +67984,41 @@
 };
 
 enum {
-	Audit_equal = 0,
-	Audit_not_equal = 1,
-	Audit_bitmask = 2,
-	Audit_bittest = 3,
-	Audit_lt = 4,
-	Audit_gt = 5,
-	Audit_le = 6,
-	Audit_ge = 7,
-	Audit_bad = 8,
-};
-
-struct audit_rule_data {
-	__u32 flags;
-	__u32 action;
-	__u32 field_count;
-	__u32 mask[64];
-	__u32 fields[64];
-	__u32 values[64];
-	__u32 fieldflags[64];
-	__u32 buflen;
-	char buf[0];
-};
-
-struct audit_field;
-
-struct audit_watch;
-
-struct audit_tree;
-
-struct audit_fsnotify_mark;
-
-struct audit_krule {
-	u32 pflags;
-	u32 flags;
-	u32 listnr;
-	u32 action;
-	u32 mask[64];
-	u32 buflen;
-	u32 field_count;
-	char *filterkey;
-	struct audit_field *fields;
-	struct audit_field *arch_f;
-	struct audit_field *inode_f;
-	struct audit_watch *watch;
-	struct audit_tree *tree;
-	struct audit_fsnotify_mark *exe;
-	struct list_head rlist;
-	struct list_head list;
-	u64 prio;
-};
-
-struct audit_field {
-	u32 type;
-	union {
-		u32 val;
-		kuid_t uid;
-		kgid_t gid;
-		struct {
-			char *lsm_str;
-			void *lsm_rule;
-		};
-	};
-	u32 op;
-};
-
-struct audit_entry {
-	struct list_head list;
-	struct callback_head rcu;
-	struct audit_krule rule;
-};
-
-struct audit_buffer___2;
-
-typedef int __kernel_key_t;
-
-typedef __kernel_key_t key_t;
-
-struct kern_ipc_perm {
-	spinlock_t lock;
-	bool deleted;
-	int id;
-	key_t key;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t cuid;
-	kgid_t cgid;
-	umode_t mode;
-	long unsigned int seq;
-	void *security;
-	struct rhash_head khtnode;
-	struct callback_head rcu;
-	refcount_t refcount;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cpu_vfs_cap_data {
-	__u32 magic_etc;
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	kuid_t rootid;
-};
-
-typedef struct fsnotify_mark_connector *fsnotify_connp_t;
-
-struct fsnotify_mark_connector {
-	spinlock_t lock;
-	short unsigned int type;
-	short unsigned int flags;
-	__kernel_fsid_t fsid;
-	union {
-		fsnotify_connp_t *obj;
-		struct fsnotify_mark_connector *destroy_next;
-	};
-	struct hlist_head list;
-};
-
-enum audit_nfcfgop {
-	AUDIT_XT_OP_REGISTER = 0,
-	AUDIT_XT_OP_REPLACE = 1,
-	AUDIT_XT_OP_UNREGISTER = 2,
-	AUDIT_NFT_OP_TABLE_REGISTER = 3,
-	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
-	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
-	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
-	AUDIT_NFT_OP_RULE_REGISTER = 7,
-	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
-	AUDIT_NFT_OP_SET_REGISTER = 9,
-	AUDIT_NFT_OP_SET_UNREGISTER = 10,
-	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
-	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
-	AUDIT_NFT_OP_GEN_REGISTER = 13,
-	AUDIT_NFT_OP_OBJ_REGISTER = 14,
-	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
-	AUDIT_NFT_OP_OBJ_RESET = 16,
-	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
-	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
-	AUDIT_NFT_OP_INVALID = 19,
-};
-
-enum fsnotify_obj_type {
-	FSNOTIFY_OBJ_TYPE_INODE = 0,
-	FSNOTIFY_OBJ_TYPE_PARENT = 1,
-	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 2,
-	FSNOTIFY_OBJ_TYPE_SB = 3,
-	FSNOTIFY_OBJ_TYPE_COUNT = 4,
-	FSNOTIFY_OBJ_TYPE_DETACHED = 4,
-};
-
-struct audit_aux_data {
-	struct audit_aux_data *next;
-	int type;
-};
-
-struct audit_chunk;
-
-struct audit_tree_refs {
-	struct audit_tree_refs *next;
-	struct audit_chunk *c[31];
-};
-
-struct audit_aux_data_pids {
-	struct audit_aux_data d;
-	pid_t target_pid[16];
-	kuid_t target_auid[16];
-	kuid_t target_uid[16];
-	unsigned int target_sessionid[16];
-	u32 target_sid[16];
-	char target_comm[256];
-	int pid_count;
-};
-
-struct audit_aux_data_bprm_fcaps {
-	struct audit_aux_data d;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	struct audit_cap_data old_pcap;
-	struct audit_cap_data new_pcap;
-};
-
-struct audit_nfcfgop_tab {
-	enum audit_nfcfgop op;
-	const char *s;
-};
-
-struct audit_parent;
-
-struct audit_watch {
-	refcount_t count;
-	dev_t dev;
-	char *path;
-	long unsigned int ino;
-	struct audit_parent *parent;
-	struct list_head wlist;
-	struct list_head rules;
-};
-
-struct fsnotify_group;
-
-struct fsnotify_iter_info;
-
-struct fsnotify_mark;
-
-struct fsnotify_event;
-
-struct fsnotify_ops {
-	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
-	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
-	void (*free_group_priv)(struct fsnotify_group *);
-	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
-	void (*free_event)(struct fsnotify_event *);
-	void (*free_mark)(struct fsnotify_mark *);
-};
-
-struct inotify_group_private_data {
-	spinlock_t idr_lock;
-	struct idr idr;
-	struct ucounts *ucounts;
-};
-
-struct fanotify_group_private_data {
-	struct list_head access_list;
-	wait_queue_head_t access_waitq;
-	int flags;
-	int f_flags;
-	unsigned int max_marks;
-	struct user_struct *user;
-};
-
-struct fsnotify_group {
-	const struct fsnotify_ops *ops;
-	refcount_t refcnt;
-	spinlock_t notification_lock;
-	struct list_head notification_list;
-	wait_queue_head_t notification_waitq;
-	unsigned int q_len;
-	unsigned int max_events;
-	unsigned int priority;
-	bool shutdown;
-	struct mutex mark_mutex;
-	atomic_t num_marks;
-	atomic_t user_waits;
-	struct list_head marks_list;
-	struct fasync_struct *fsn_fa;
-	struct fsnotify_event *overflow_event;
-	struct mem_cgroup *memcg;
-	union {
-		void *private;
-		struct inotify_group_private_data inotify_data;
-		struct fanotify_group_private_data fanotify_data;
-	};
-};
-
-struct fsnotify_iter_info {
-	struct fsnotify_mark *marks[4];
-	unsigned int report_mask;
-	int srcu_idx;
-};
-
-struct fsnotify_mark {
-	__u32 mask;
-	refcount_t refcnt;
-	struct fsnotify_group *group;
-	struct list_head g_list;
-	spinlock_t lock;
-	struct hlist_node obj_list;
-	struct fsnotify_mark_connector *connector;
-	__u32 ignored_mask;
-	unsigned int flags;
-};
-
-struct fsnotify_event {
-	struct list_head list;
-	long unsigned int objectid;
-};
-
-struct audit_parent {
-	struct list_head watches;
-	struct fsnotify_mark mark;
-};
-
-struct audit_fsnotify_mark {
-	dev_t dev;
-	long unsigned int ino;
-	char *path;
-	struct fsnotify_mark mark;
-	struct audit_krule *rule;
-};
-
-struct audit_chunk___2;
-
-struct audit_tree {
-	refcount_t count;
-	int goner;
-	struct audit_chunk___2 *root;
-	struct list_head chunks;
-	struct list_head rules;
-	struct list_head list;
-	struct list_head same_root;
-	struct callback_head head;
-	char pathname[0];
-};
-
-struct node {
-	struct list_head list;
-	struct audit_tree *owner;
-	unsigned int index;
-};
-
-struct audit_chunk___2 {
-	struct list_head hash;
-	long unsigned int key;
-	struct fsnotify_mark *mark;
-	struct list_head trees;
-	int count;
-	atomic_long_t refs;
-	struct callback_head head;
-	struct node owners[0];
-};
-
-struct audit_tree_mark {
-	struct fsnotify_mark mark;
-	struct audit_chunk___2 *chunk;
+	TRACE_FTRACE_BIT = 0,
+	TRACE_FTRACE_NMI_BIT = 1,
+	TRACE_FTRACE_IRQ_BIT = 2,
+	TRACE_FTRACE_SIRQ_BIT = 3,
+	TRACE_FTRACE_TRANSITION_BIT = 4,
+	TRACE_INTERNAL_BIT = 5,
+	TRACE_INTERNAL_NMI_BIT = 6,
+	TRACE_INTERNAL_IRQ_BIT = 7,
+	TRACE_INTERNAL_SIRQ_BIT = 8,
+	TRACE_INTERNAL_TRANSITION_BIT = 9,
+	TRACE_BRANCH_BIT = 10,
+	TRACE_IRQ_BIT = 11,
+	TRACE_GRAPH_BIT = 12,
+	TRACE_GRAPH_DEPTH_START_BIT = 13,
+	TRACE_GRAPH_DEPTH_END_BIT = 14,
+	TRACE_GRAPH_NOTRACE_BIT = 15,
+	TRACE_RECORD_RECURSION_BIT = 16,
 };
 
 enum {
-	HASH_SIZE = 128,
+	TRACE_CTX_NMI = 0,
+	TRACE_CTX_IRQ = 1,
+	TRACE_CTX_SOFTIRQ = 2,
+	TRACE_CTX_NORMAL = 3,
+	TRACE_CTX_TRANSITION = 4,
 };
 
-struct kprobe_blacklist_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-};
-
-enum perf_record_ksymbol_type {
-	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
-	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
-	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
-	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
-};
-
-struct kprobe_insn_page {
-	struct list_head list;
-	kprobe_opcode_t *insns;
-	struct kprobe_insn_cache *cache;
-	int nused;
-	int ngarbage;
-	char slot_used[0];
-};
-
-enum kprobe_slot_state {
-	SLOT_CLEAN = 0,
-	SLOT_DIRTY = 1,
-	SLOT_USED = 2,
-};
-
-struct serial_icounter_struct {
-	int cts;
-	int dsr;
-	int rng;
-	int dcd;
-	int rx;
-	int tx;
-	int frame;
-	int overrun;
-	int parity;
-	int brk;
-	int buf_overrun;
-	int reserved[9];
-};
-
-struct serial_struct {
-	int type;
-	int line;
-	unsigned int port;
-	int irq;
-	int flags;
-	int xmit_fifo_size;
-	int custom_divisor;
-	int baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	int hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	long unsigned int iomap_base;
-};
-
-struct kgdb_io {
-	const char *name;
-	int (*read_char)();
-	void (*write_char)(u8);
-	void (*flush)();
-	int (*init)();
-	void (*deinit)();
-	void (*pre_exception)();
-	void (*post_exception)();
-	struct console *cons;
-};
-
-enum {
-	KDB_NOT_INITIALIZED = 0,
-	KDB_INIT_EARLY = 1,
-	KDB_INIT_FULL = 2,
-};
-
-struct kgdb_state {
-	int ex_vector;
-	int signo;
-	int err_code;
-	int cpu;
-	int pass_exception;
-	long unsigned int thr_query;
-	long unsigned int threadid;
-	long int kgdb_usethreadid;
-	struct pt_regs *linux_regs;
-	atomic_t *send_ready;
-};
-
-struct debuggerinfo_struct {
-	void *debuggerinfo;
-	struct task_struct *task;
-	int exception_state;
-	int ret_state;
-	int irq_depth;
-	int enter_kgdb;
-	bool rounding_up;
-};
-
-struct seccomp_data {
-	int nr;
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 args[6];
-};
-
-struct seccomp_notif_sizes {
-	__u16 seccomp_notif;
-	__u16 seccomp_notif_resp;
-	__u16 seccomp_data;
-};
-
-struct seccomp_notif {
-	__u64 id;
-	__u32 pid;
-	__u32 flags;
-	struct seccomp_data data;
-};
-
-struct seccomp_notif_resp {
-	__u64 id;
-	__s64 val;
-	__s32 error;
-	__u32 flags;
-};
-
-struct seccomp_notif_addfd {
-	__u64 id;
-	__u32 flags;
-	__u32 srcfd;
-	__u32 newfd;
-	__u32 newfd_flags;
-};
-
-struct notification;
-
-struct seccomp_filter {
-	refcount_t refs;
-	refcount_t users;
-	bool log;
-	struct seccomp_filter *prev;
-	struct bpf_prog *prog;
-	struct notification *notif;
-	struct mutex notify_lock;
-	wait_queue_head_t wqh;
-};
-
-struct seccomp_metadata {
-	__u64 filter_off;
-	__u64 flags;
-};
-
-struct sock_fprog {
-	short unsigned int len;
-	struct sock_filter *filter;
-};
-
-struct compat_sock_fprog {
-	u16 len;
-	compat_uptr_t filter;
-};
-
-enum notify_state {
-	SECCOMP_NOTIFY_INIT = 0,
-	SECCOMP_NOTIFY_SENT = 1,
-	SECCOMP_NOTIFY_REPLIED = 2,
-};
-
-struct seccomp_knotif {
-	struct task_struct *task;
-	u64 id;
-	const struct seccomp_data *data;
-	enum notify_state state;
-	int error;
-	long int val;
-	u32 flags;
-	struct completion ready;
-	struct list_head list;
-	struct list_head addfd;
-};
-
-struct seccomp_kaddfd {
-	struct file *file;
-	int fd;
-	unsigned int flags;
-	int ret;
-	struct completion completion;
-	struct list_head list;
-};
-
-struct notification {
-	struct semaphore request;
-	u64 next_id;
-	struct list_head notifications;
-};
-
-struct seccomp_log_name {
-	u32 log;
-	const char *name;
-};
-
-struct rchan;
-
-struct rchan_buf {
-	void *start;
-	void *data;
-	size_t offset;
-	size_t subbufs_produced;
-	size_t subbufs_consumed;
-	struct rchan *chan;
-	wait_queue_head_t read_wait;
-	struct irq_work wakeup_work;
-	struct dentry *dentry;
-	struct kref kref;
-	struct page **page_array;
-	unsigned int page_count;
-	unsigned int finalized;
-	size_t *padding;
-	size_t prev_padding;
-	size_t bytes_consumed;
-	size_t early_bytes;
-	unsigned int cpu;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rchan_callbacks;
-
-struct rchan {
-	u32 version;
-	size_t subbuf_size;
-	size_t n_subbufs;
-	size_t alloc_size;
-	struct rchan_callbacks *cb;
-	struct kref kref;
-	void *private_data;
-	size_t last_toobig;
-	struct rchan_buf **buf;
-	int is_global;
-	struct list_head list;
-	struct dentry *parent;
-	int has_base_filename;
-	char base_filename[255];
-};
-
-struct rchan_callbacks {
-	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
-	void (*buf_mapped)(struct rchan_buf *, struct file *);
-	void (*buf_unmapped)(struct rchan_buf *, struct file *);
-	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
-	int (*remove_buf_file)(struct dentry *);
-};
-
-struct partial_page {
-	unsigned int offset;
-	unsigned int len;
-	long unsigned int private;
-};
-
-struct splice_pipe_desc {
-	struct page **pages;
-	struct partial_page *partial;
-	int nr_pages;
-	unsigned int nr_pages_max;
-	const struct pipe_buf_operations *ops;
-	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
-};
-
-struct rchan_percpu_buf_dispatcher {
-	struct rchan_buf *buf;
-	struct dentry *dentry;
-};
-
-enum {
-	TASKSTATS_TYPE_UNSPEC = 0,
-	TASKSTATS_TYPE_PID = 1,
-	TASKSTATS_TYPE_TGID = 2,
-	TASKSTATS_TYPE_STATS = 3,
-	TASKSTATS_TYPE_AGGR_PID = 4,
-	TASKSTATS_TYPE_AGGR_TGID = 5,
-	TASKSTATS_TYPE_NULL = 6,
-	__TASKSTATS_TYPE_MAX = 7,
-};
-
-enum {
-	TASKSTATS_CMD_ATTR_UNSPEC = 0,
-	TASKSTATS_CMD_ATTR_PID = 1,
-	TASKSTATS_CMD_ATTR_TGID = 2,
-	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
-	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
-	__TASKSTATS_CMD_ATTR_MAX = 5,
-};
-
-enum {
-	CGROUPSTATS_CMD_UNSPEC = 3,
-	CGROUPSTATS_CMD_GET = 4,
-	CGROUPSTATS_CMD_NEW = 5,
-	__CGROUPSTATS_CMD_MAX = 6,
-};
-
-enum {
-	CGROUPSTATS_TYPE_UNSPEC = 0,
-	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
-	__CGROUPSTATS_TYPE_MAX = 2,
-};
-
-enum {
-	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
-	CGROUPSTATS_CMD_ATTR_FD = 1,
-	__CGROUPSTATS_CMD_ATTR_MAX = 2,
-};
-
-struct genlmsghdr {
-	__u8 cmd;
-	__u8 version;
-	__u16 reserved;
-};
-
-enum {
-	NLA_UNSPEC = 0,
-	NLA_U8 = 1,
-	NLA_U16 = 2,
-	NLA_U32 = 3,
-	NLA_U64 = 4,
-	NLA_STRING = 5,
-	NLA_FLAG = 6,
-	NLA_MSECS = 7,
-	NLA_NESTED = 8,
-	NLA_NESTED_ARRAY = 9,
-	NLA_NUL_STRING = 10,
-	NLA_BINARY = 11,
-	NLA_S8 = 12,
-	NLA_S16 = 13,
-	NLA_S32 = 14,
-	NLA_S64 = 15,
-	NLA_BITFIELD32 = 16,
-	NLA_REJECT = 17,
-	__NLA_TYPE_MAX = 18,
-};
-
-struct genl_multicast_group {
-	char name[16];
-};
-
-struct genl_ops;
-
-struct genl_info;
-
-struct genl_small_ops;
-
-struct genl_family {
-	int id;
-	unsigned int hdrsize;
-	char name[16];
-	unsigned int version;
-	unsigned int maxattr;
-	unsigned int mcgrp_offset;
-	u8 netnsok: 1;
-	u8 parallel_ops: 1;
-	u8 n_ops;
-	u8 n_small_ops;
-	u8 n_mcgrps;
-	const struct nla_policy *policy;
-	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	const struct genl_ops *ops;
-	const struct genl_small_ops *small_ops;
-	const struct genl_multicast_group *mcgrps;
-	struct module *module;
-};
-
-struct genl_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*start)(struct netlink_callback *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-struct genl_info {
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr *nlhdr;
-	struct genlmsghdr *genlhdr;
-	void *userhdr;
-	struct nlattr **attrs;
-	possible_net_t _net;
-	void *user_ptr[2];
-	struct netlink_ext_ack *extack;
-};
-
-struct genl_small_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-enum genl_validate_flags {
-	GENL_DONT_VALIDATE_STRICT = 1,
-	GENL_DONT_VALIDATE_DUMP = 2,
-	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
-};
-
-struct listener {
-	struct list_head list;
-	pid_t pid;
-	char valid;
-};
-
-struct listener_list {
-	struct rw_semaphore sem;
-	struct list_head list;
-};
-
-enum actions {
-	REGISTER = 0,
-	DEREGISTER = 1,
-	CPU_DONT_CARE = 2,
-};
-
-struct tp_module {
-	struct list_head list;
-	struct module *mod;
-};
-
-struct tp_probes {
-	struct callback_head rcu;
-	struct tracepoint_func probes[0];
-};
+struct dyn_arch_ftrace {};
 
 enum {
 	FTRACE_OPS_FL_ENABLED = 1,
 	FTRACE_OPS_FL_DYNAMIC = 2,
 	FTRACE_OPS_FL_SAVE_REGS = 4,
 	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
-	FTRACE_OPS_FL_RECURSION_SAFE = 16,
+	FTRACE_OPS_FL_RECURSION = 16,
 	FTRACE_OPS_FL_STUB = 32,
 	FTRACE_OPS_FL_INITIALIZED = 64,
 	FTRACE_OPS_FL_DELETED = 128,
@@ -27585,14 +68034,6 @@
 	FTRACE_OPS_FL_DIRECT = 131072,
 };
 
-struct ftrace_hash {
-	long unsigned int size_bits;
-	struct hlist_head *buckets;
-	long unsigned int count;
-	long unsigned int flags;
-	struct callback_head rcu;
-};
-
 struct ftrace_func_entry {
 	struct hlist_node hlist;
 	long unsigned int ip;
@@ -27619,6 +68060,21 @@
 	FTRACE_FL_DIRECT_EN = 8388608,
 };
 
+struct dyn_ftrace {
+	long unsigned int ip;
+	long unsigned int flags;
+	struct dyn_arch_ftrace arch;
+};
+
+enum {
+	FTRACE_UPDATE_CALLS = 1,
+	FTRACE_DISABLE_CALLS = 2,
+	FTRACE_UPDATE_TRACE_FUNC = 4,
+	FTRACE_START_FUNC_RET = 8,
+	FTRACE_STOP_FUNC_RET = 16,
+	FTRACE_MAY_SLEEP = 32,
+};
+
 enum {
 	FTRACE_UPDATE_IGNORE = 0,
 	FTRACE_UPDATE_MAKE_CALL = 1,
@@ -27636,150 +68092,33 @@
 	FTRACE_ITER_ENABLED = 64,
 };
 
-struct prog_entry;
+struct ftrace_graph_ent {
+	long unsigned int func;
+	int depth;
+} __attribute__((packed));
 
-struct event_filter {
-	struct prog_entry *prog;
-	char *filter_string;
+struct ftrace_graph_ret {
+	long unsigned int func;
+	int depth;
+	unsigned int overrun;
+	long long unsigned int calltime;
+	long long unsigned int rettime;
 };
 
-struct trace_array_cpu;
+typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
 
-struct array_buffer {
-	struct trace_array *tr;
-	struct trace_buffer *buffer;
-	struct trace_array_cpu *data;
-	u64 time_start;
-	int cpu;
+typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
+
+struct fgraph_ops {
+	trace_func_graph_ent_t entryfunc;
+	trace_func_graph_ret_t retfunc;
 };
 
-struct trace_pid_list;
-
-struct trace_options;
-
-struct trace_array {
-	struct list_head list;
-	char *name;
-	struct array_buffer array_buffer;
-	struct trace_pid_list *filtered_pids;
-	struct trace_pid_list *filtered_no_pids;
-	arch_spinlock_t max_lock;
-	int buffer_disabled;
-	int sys_refcount_enter;
-	int sys_refcount_exit;
-	struct trace_event_file *enter_syscall_files[441];
-	struct trace_event_file *exit_syscall_files[441];
-	int stop_count;
-	int clock_id;
-	int nr_topts;
-	bool clear_trace;
-	int buffer_percent;
-	unsigned int n_err_log_entries;
-	struct tracer *current_trace;
-	unsigned int trace_flags;
-	unsigned char trace_flags_index[32];
-	unsigned int flags;
-	raw_spinlock_t start_lock;
-	struct list_head err_log;
-	struct dentry *dir;
-	struct dentry *options;
-	struct dentry *percpu_dir;
-	struct dentry *event_dir;
-	struct trace_options *topts;
-	struct list_head systems;
-	struct list_head events;
-	struct trace_event_file *trace_marker_file;
-	cpumask_var_t tracing_cpumask;
-	int ref;
-	int trace_ref;
-	struct ftrace_ops *ops;
-	struct trace_pid_list *function_pids;
-	struct trace_pid_list *function_no_pids;
-	struct list_head func_probes;
-	struct list_head mod_trace;
-	struct list_head mod_notrace;
-	int function_enabled;
-	int time_stamp_abs_ref;
-	struct list_head hist_vars;
-};
-
-struct tracer_flags;
-
-struct tracer {
-	const char *name;
-	int (*init)(struct trace_array *);
-	void (*reset)(struct trace_array *);
-	void (*start)(struct trace_array *);
-	void (*stop)(struct trace_array *);
-	int (*update_thresh)(struct trace_array *);
-	void (*open)(struct trace_iterator *);
-	void (*pipe_open)(struct trace_iterator *);
-	void (*close)(struct trace_iterator *);
-	void (*pipe_close)(struct trace_iterator *);
-	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
-	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	void (*print_header)(struct seq_file *);
-	enum print_line_t (*print_line)(struct trace_iterator *);
-	int (*set_flag)(struct trace_array *, u32, u32, int);
-	int (*flag_changed)(struct trace_array *, u32, int);
-	struct tracer *next;
-	struct tracer_flags *flags;
-	int enabled;
-	bool print_max;
-	bool allow_instances;
-	bool noboot;
-};
-
-struct event_subsystem;
-
-struct trace_subsystem_dir {
-	struct list_head list;
-	struct event_subsystem *subsystem;
-	struct trace_array *tr;
-	struct dentry *entry;
-	int ref_count;
-	int nr_events;
-};
-
-struct trace_array_cpu {
-	atomic_t disabled;
-	void *buffer_page;
-	long unsigned int entries;
-	long unsigned int saved_latency;
-	long unsigned int critical_start;
-	long unsigned int critical_end;
-	long unsigned int critical_sequence;
-	long unsigned int nice;
-	long unsigned int policy;
-	long unsigned int rt_priority;
-	long unsigned int skipped_entries;
-	u64 preempt_timestamp;
-	pid_t pid;
-	kuid_t uid;
-	char comm[16];
-	int ftrace_ignore_pid;
-	bool ignore_pid;
-};
-
-struct trace_option_dentry;
-
-struct trace_options {
-	struct tracer *tracer;
-	struct trace_option_dentry *topts;
-};
-
-struct tracer_opt;
-
-struct trace_option_dentry {
-	struct tracer_opt *opt;
-	struct tracer_flags *flags;
-	struct trace_array *tr;
-	struct dentry *entry;
-};
-
-struct trace_pid_list {
-	int pid_max;
-	long unsigned int *pids;
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
 };
 
 enum {
@@ -27791,35 +68130,6 @@
 	TRACE_ARRAY_FL_GLOBAL = 1,
 };
 
-struct tracer_opt {
-	const char *name;
-	u32 bit;
-};
-
-struct tracer_flags {
-	u32 val;
-	struct tracer_opt *opts;
-	struct tracer *trace;
-};
-
-enum {
-	TRACE_FTRACE_BIT = 0,
-	TRACE_FTRACE_NMI_BIT = 1,
-	TRACE_FTRACE_IRQ_BIT = 2,
-	TRACE_FTRACE_SIRQ_BIT = 3,
-	TRACE_INTERNAL_BIT = 4,
-	TRACE_INTERNAL_NMI_BIT = 5,
-	TRACE_INTERNAL_IRQ_BIT = 6,
-	TRACE_INTERNAL_SIRQ_BIT = 7,
-	TRACE_BRANCH_BIT = 8,
-	TRACE_IRQ_BIT = 9,
-	TRACE_GRAPH_BIT = 10,
-	TRACE_GRAPH_DEPTH_START_BIT = 11,
-	TRACE_GRAPH_DEPTH_END_BIT = 12,
-	TRACE_GRAPH_NOTRACE_BIT = 13,
-	TRACE_TRANSITION_BIT = 14,
-};
-
 struct ftrace_mod_load {
 	struct list_head list;
 	char *func;
@@ -27853,51 +68163,14 @@
 	unsigned int size;
 };
 
-enum trace_iterator_bits {
-	TRACE_ITER_PRINT_PARENT_BIT = 0,
-	TRACE_ITER_SYM_OFFSET_BIT = 1,
-	TRACE_ITER_SYM_ADDR_BIT = 2,
-	TRACE_ITER_VERBOSE_BIT = 3,
-	TRACE_ITER_RAW_BIT = 4,
-	TRACE_ITER_HEX_BIT = 5,
-	TRACE_ITER_BIN_BIT = 6,
-	TRACE_ITER_BLOCK_BIT = 7,
-	TRACE_ITER_PRINTK_BIT = 8,
-	TRACE_ITER_ANNOTATE_BIT = 9,
-	TRACE_ITER_USERSTACKTRACE_BIT = 10,
-	TRACE_ITER_SYM_USEROBJ_BIT = 11,
-	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
-	TRACE_ITER_CONTEXT_INFO_BIT = 13,
-	TRACE_ITER_LATENCY_FMT_BIT = 14,
-	TRACE_ITER_RECORD_CMD_BIT = 15,
-	TRACE_ITER_RECORD_TGID_BIT = 16,
-	TRACE_ITER_OVERWRITE_BIT = 17,
-	TRACE_ITER_STOP_ON_FREE_BIT = 18,
-	TRACE_ITER_IRQ_INFO_BIT = 19,
-	TRACE_ITER_MARKERS_BIT = 20,
-	TRACE_ITER_EVENT_FORK_BIT = 21,
-	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
-	TRACE_ITER_FUNCTION_BIT = 23,
-	TRACE_ITER_FUNC_FORK_BIT = 24,
-	TRACE_ITER_DISPLAY_GRAPH_BIT = 25,
-	TRACE_ITER_STACKTRACE_BIT = 26,
-	TRACE_ITER_LAST_BIT = 27,
-};
-
-struct event_subsystem {
-	struct list_head list;
+struct tracer_stat {
 	const char *name;
-	struct event_filter *filter;
-	int ref_count;
-};
-
-enum regex_type {
-	MATCH_FULL = 0,
-	MATCH_FRONT_ONLY = 1,
-	MATCH_MIDDLE_ONLY = 2,
-	MATCH_END_ONLY = 3,
-	MATCH_GLOB = 4,
-	MATCH_INDEX = 5,
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
 };
 
 enum {
@@ -27905,6 +68178,28 @@
 	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
 };
 
+struct ftrace_profile {
+	struct hlist_node node;
+	long unsigned int ip;
+	long unsigned int counter;
+	long long unsigned int time;
+	long long unsigned int time_squared;
+};
+
+struct ftrace_profile_page {
+	struct ftrace_profile_page *next;
+	long unsigned int index;
+	struct ftrace_profile records[0];
+};
+
+struct ftrace_profile_stat {
+	atomic_t disabled;
+	struct hlist_head *hash;
+	struct ftrace_profile_page *pages;
+	struct ftrace_profile_page *start;
+	struct tracer_stat stat;
+};
+
 struct ftrace_func_probe {
 	struct ftrace_probe_ops *probe_ops;
 	struct ftrace_ops ops;
@@ -27918,7 +68213,7 @@
 	struct ftrace_page *next;
 	struct dyn_ftrace *records;
 	int index;
-	int size;
+	int order;
 };
 
 struct ftrace_rec_iter {
@@ -27996,243 +68291,32 @@
 	long unsigned int ip;
 };
 
-enum ring_buffer_type {
-	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
-	RINGBUF_TYPE_PADDING = 29,
-	RINGBUF_TYPE_TIME_EXTEND = 30,
-	RINGBUF_TYPE_TIME_STAMP = 31,
-};
-
-enum ring_buffer_flags {
-	RB_FL_OVERWRITE = 1,
-};
-
-struct ring_buffer_per_cpu;
-
-struct buffer_page;
-
-struct ring_buffer_iter {
-	struct ring_buffer_per_cpu *cpu_buffer;
-	long unsigned int head;
-	long unsigned int next_event;
-	struct buffer_page *head_page;
-	struct buffer_page *cache_reader_page;
-	long unsigned int cache_read;
-	u64 read_stamp;
-	u64 page_stamp;
-	struct ring_buffer_event *event;
-	int missed_events;
-};
-
-struct rb_irq_work {
-	struct irq_work work;
-	wait_queue_head_t waiters;
-	wait_queue_head_t full_waiters;
-	bool waiters_pending;
-	bool full_waiters_pending;
-	bool wakeup_full;
-};
-
-struct trace_buffer___2 {
-	unsigned int flags;
-	int cpus;
-	atomic_t record_disabled;
-	cpumask_var_t cpumask;
-	struct lock_class_key *reader_lock_key;
-	struct mutex mutex;
-	struct ring_buffer_per_cpu **buffers;
-	struct hlist_node node;
-	u64 (*clock)();
-	struct rb_irq_work irq_work;
-	bool time_stamp_abs;
+struct kallsyms_data {
+	long unsigned int *addrs;
+	const char **syms;
+	size_t cnt;
+	size_t found;
 };
 
 enum {
-	RB_LEN_TIME_EXTEND = 8,
-	RB_LEN_TIME_STAMP = 8,
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
 };
 
-struct buffer_data_page {
-	u64 time_stamp;
-	local_t commit;
-	unsigned char data[0];
-};
+typedef long int (*syscall_fn_t)(const struct pt_regs *);
 
-struct buffer_page {
-	struct list_head list;
-	local_t write;
-	unsigned int read;
-	local_t entries;
-	long unsigned int real_end;
-	struct buffer_data_page *page;
-};
-
-struct rb_event_info {
-	u64 ts;
-	u64 delta;
-	u64 before;
-	u64 after;
-	long unsigned int length;
-	struct buffer_page *tail_page;
-	int add_timestamp;
-};
-
-enum {
-	RB_ADD_STAMP_NONE = 0,
-	RB_ADD_STAMP_EXTEND = 2,
-	RB_ADD_STAMP_ABSOLUTE = 4,
-	RB_ADD_STAMP_FORCE = 8,
-};
-
-enum {
-	RB_CTX_TRANSITION = 0,
-	RB_CTX_NMI = 1,
-	RB_CTX_IRQ = 2,
-	RB_CTX_SOFTIRQ = 3,
-	RB_CTX_NORMAL = 4,
-	RB_CTX_MAX = 5,
-};
-
-struct rb_time_struct {
-	local64_t time;
-};
-
-typedef struct rb_time_struct rb_time_t;
-
-struct ring_buffer_per_cpu {
-	int cpu;
-	atomic_t record_disabled;
-	atomic_t resize_disabled;
-	struct trace_buffer___2 *buffer;
-	raw_spinlock_t reader_lock;
-	arch_spinlock_t lock;
-	struct lock_class_key lock_key;
-	struct buffer_data_page *free_page;
-	long unsigned int nr_pages;
-	unsigned int current_context;
-	struct list_head *pages;
-	struct buffer_page *head_page;
-	struct buffer_page *tail_page;
-	struct buffer_page *commit_page;
-	struct buffer_page *reader_page;
-	long unsigned int lost_events;
-	long unsigned int last_overrun;
-	long unsigned int nest;
-	local_t entries_bytes;
-	local_t entries;
-	local_t overrun;
-	local_t commit_overrun;
-	local_t dropped_events;
-	local_t committing;
-	local_t commits;
-	local_t pages_touched;
-	local_t pages_read;
-	long int last_pages_touch;
-	size_t shortest_full;
-	long unsigned int read;
-	long unsigned int read_bytes;
-	rb_time_t write_stamp;
-	rb_time_t before_stamp;
-	u64 read_stamp;
-	long int nr_pages_to_update;
-	struct list_head new_pages;
-	struct work_struct update_pages_work;
-	struct completion update_done;
-	struct rb_irq_work irq_work;
-};
-
-struct trace_export {
-	struct trace_export *next;
-	void (*write)(struct trace_export *, const void *, unsigned int);
-	int flags;
-};
-
-enum trace_iter_flags {
-	TRACE_FILE_LAT_FMT = 1,
-	TRACE_FILE_ANNOTATE = 2,
-	TRACE_FILE_TIME_IN_NS = 4,
-};
-
-enum event_trigger_type {
-	ETT_NONE = 0,
-	ETT_TRACE_ONOFF = 1,
-	ETT_SNAPSHOT = 2,
-	ETT_STACKTRACE = 4,
-	ETT_EVENT_ENABLE = 8,
-	ETT_EVENT_HIST = 16,
-	ETT_HIST_ENABLE = 32,
-};
-
-enum trace_type {
-	__TRACE_FIRST_TYPE = 0,
-	TRACE_FN = 1,
-	TRACE_CTX = 2,
-	TRACE_WAKE = 3,
-	TRACE_STACK = 4,
-	TRACE_PRINT = 5,
-	TRACE_BPRINT = 6,
-	TRACE_MMIO_RW = 7,
-	TRACE_MMIO_MAP = 8,
-	TRACE_BRANCH = 9,
-	TRACE_GRAPH_RET = 10,
-	TRACE_GRAPH_ENT = 11,
-	TRACE_USER_STACK = 12,
-	TRACE_BLK = 13,
-	TRACE_BPUTS = 14,
-	TRACE_HWLAT = 15,
-	TRACE_RAW_DATA = 16,
-	__TRACE_LAST_TYPE = 17,
-};
-
-struct ftrace_entry {
+struct syscall_trace_enter {
 	struct trace_entry ent;
-	long unsigned int ip;
-	long unsigned int parent_ip;
+	int nr;
+	long unsigned int args[0];
 };
 
-struct stack_entry {
+struct syscall_trace_exit {
 	struct trace_entry ent;
-	int size;
-	long unsigned int caller[8];
+	int nr;
+	long int ret;
 };
 
-struct bprint_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *fmt;
-	u32 buf[0];
-};
-
-struct print_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	char buf[0];
-};
-
-struct raw_data_entry {
-	struct trace_entry ent;
-	unsigned int id;
-	char buf[0];
-};
-
-struct bputs_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *str;
-};
-
-enum trace_flag_type {
-	TRACE_FLAG_IRQS_OFF = 1,
-	TRACE_FLAG_IRQS_NOSUPPORT = 2,
-	TRACE_FLAG_NEED_RESCHED = 4,
-	TRACE_FLAG_HARDIRQ = 8,
-	TRACE_FLAG_SOFTIRQ = 16,
-	TRACE_FLAG_PREEMPT_RESCHED = 32,
-	TRACE_FLAG_NMI = 64,
-};
-
-typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
-
 enum trace_iterator_flags {
 	TRACE_ITER_PRINT_PARENT = 1,
 	TRACE_ITER_SYM_OFFSET = 2,
@@ -28257,580 +68341,11 @@
 	TRACE_ITER_MARKERS = 1048576,
 	TRACE_ITER_EVENT_FORK = 2097152,
 	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
-	TRACE_ITER_FUNCTION = 8388608,
-	TRACE_ITER_FUNC_FORK = 16777216,
-	TRACE_ITER_DISPLAY_GRAPH = 33554432,
-	TRACE_ITER_STACKTRACE = 67108864,
-};
-
-struct saved_cmdlines_buffer {
-	unsigned int map_pid_to_cmdline[32769];
-	unsigned int *map_cmdline_to_pid;
-	unsigned int cmdline_num;
-	int cmdline_idx;
-	char *saved_cmdlines;
-};
-
-struct ftrace_stack {
-	long unsigned int calls[1024];
-};
-
-struct ftrace_stacks {
-	struct ftrace_stack stacks[4];
-};
-
-struct trace_buffer_struct {
-	int nesting;
-	char buffer[4096];
-};
-
-struct ftrace_buffer_info {
-	struct trace_iterator iter;
-	void *spare;
-	unsigned int spare_cpu;
-	unsigned int read;
-};
-
-struct err_info {
-	const char **errs;
-	u8 type;
-	u8 pos;
-	u64 ts;
-};
-
-struct tracing_log_err {
-	struct list_head list;
-	struct err_info info;
-	char loc[128];
-	char cmd[256];
-};
-
-struct buffer_ref {
-	struct trace_buffer *buffer;
-	void *page;
-	int cpu;
-	refcount_t refcount;
-};
-
-struct ctx_switch_entry {
-	struct trace_entry ent;
-	unsigned int prev_pid;
-	unsigned int next_pid;
-	unsigned int next_cpu;
-	unsigned char prev_prio;
-	unsigned char prev_state;
-	unsigned char next_prio;
-	unsigned char next_state;
-};
-
-struct userstack_entry {
-	struct trace_entry ent;
-	unsigned int tgid;
-	long unsigned int caller[8];
-};
-
-struct hwlat_entry {
-	struct trace_entry ent;
-	u64 duration;
-	u64 outer_duration;
-	u64 nmi_total_ts;
-	struct timespec64 timestamp;
-	unsigned int nmi_count;
-	unsigned int seqnum;
-	unsigned int count;
-};
-
-struct trace_mark {
-	long long unsigned int val;
-	char sym;
-};
-
-typedef int (*cmp_func_t)(const void *, const void *);
-
-struct tracer_stat {
-	const char *name;
-	void * (*stat_start)(struct tracer_stat *);
-	void * (*stat_next)(void *, int);
-	cmp_func_t stat_cmp;
-	int (*stat_show)(struct seq_file *, void *);
-	void (*stat_release)(void *);
-	int (*stat_headers)(struct seq_file *);
-};
-
-struct stat_node {
-	struct rb_node node;
-	void *stat;
-};
-
-struct stat_session {
-	struct list_head session_list;
-	struct tracer_stat *ts;
-	struct rb_root stat_root;
-	struct mutex stat_mutex;
-	struct dentry *file;
-};
-
-struct trace_bprintk_fmt {
-	struct list_head list;
-	const char *fmt;
-};
-
-enum {
-	TRACE_FUNC_OPT_STACK = 1,
-};
-
-struct ftrace_func_mapper___2;
-
-enum {
-	TRACE_NOP_OPT_ACCEPT = 1,
-	TRACE_NOP_OPT_REFUSE = 2,
-};
-
-struct ftrace_graph_ent {
-	long unsigned int func;
-	int depth;
-} __attribute__((packed));
-
-struct ftrace_graph_ret {
-	long unsigned int func;
-	long unsigned int overrun;
-	long long unsigned int calltime;
-	long long unsigned int rettime;
-	int depth;
-} __attribute__((packed));
-
-typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
-
-typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
-
-struct fgraph_ops {
-	trace_func_graph_ent_t entryfunc;
-	trace_func_graph_ret_t retfunc;
-};
-
-struct ftrace_graph_ent_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ent graph_ent;
-} __attribute__((packed));
-
-struct ftrace_graph_ret_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ret ret;
-} __attribute__((packed));
-
-struct fgraph_cpu_data {
-	pid_t last_pid;
-	int depth;
-	int depth_irq;
-	int ignore;
-	long unsigned int enter_funcs[50];
-};
-
-struct fgraph_data {
-	struct fgraph_cpu_data *cpu_data;
-	struct ftrace_graph_ent_entry ent;
-	struct ftrace_graph_ret_entry ret;
-	int failed;
-	int cpu;
-} __attribute__((packed));
-
-enum {
-	FLAGS_FILL_FULL = 268435456,
-	FLAGS_FILL_START = 536870912,
-	FLAGS_FILL_END = 805306368,
-};
-
-struct blk_crypto_key;
-
-struct bio_crypt_ctx {
-	const struct blk_crypto_key *bc_key;
-	u64 bc_dun[4];
-};
-
-typedef __u32 blk_mq_req_flags_t;
-
-struct disk_stats {
-	u64 nsecs[4];
-	long unsigned int sectors[4];
-	long unsigned int ios[4];
-	long unsigned int merges[4];
-	long unsigned int io_ticks;
-	local_t in_flight[2];
-};
-
-struct blk_mq_ctxs;
-
-struct blk_mq_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head rq_lists[3];
-		long: 64;
-	};
-	unsigned int cpu;
-	short unsigned int index_hw[3];
-	struct blk_mq_hw_ctx *hctxs[3];
-	long unsigned int rq_dispatched[2];
-	long unsigned int rq_merged;
-	long unsigned int rq_completed[2];
-	struct request_queue *queue;
-	struct blk_mq_ctxs *ctxs;
-	struct kobject kobj;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbitmap_word;
-
-struct sbitmap {
-	unsigned int depth;
-	unsigned int shift;
-	unsigned int map_nr;
-	struct sbitmap_word *map;
-};
-
-struct blk_mq_tags;
-
-struct blk_mq_hw_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head dispatch;
-		long unsigned int state;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct delayed_work run_work;
-	cpumask_var_t cpumask;
-	int next_cpu;
-	int next_cpu_batch;
-	long unsigned int flags;
-	void *sched_data;
-	struct request_queue *queue;
-	struct blk_flush_queue *fq;
-	void *driver_data;
-	struct sbitmap ctx_map;
-	struct blk_mq_ctx *dispatch_from;
-	unsigned int dispatch_busy;
-	short unsigned int type;
-	short unsigned int nr_ctx;
-	struct blk_mq_ctx **ctxs;
-	spinlock_t dispatch_wait_lock;
-	wait_queue_entry_t dispatch_wait;
-	atomic_t wait_index;
-	struct blk_mq_tags *tags;
-	struct blk_mq_tags *sched_tags;
-	long unsigned int queued;
-	long unsigned int run;
-	long unsigned int dispatched[7];
-	unsigned int numa_node;
-	unsigned int queue_num;
-	atomic_t nr_active;
-	atomic_t elevator_queued;
-	struct hlist_node cpuhp_online;
-	struct hlist_node cpuhp_dead;
-	struct kobject kobj;
-	long unsigned int poll_considered;
-	long unsigned int poll_invoked;
-	long unsigned int poll_success;
-	struct list_head hctx_list;
-	struct srcu_struct srcu[0];
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_alloc_data {
-	struct request_queue *q;
-	blk_mq_req_flags_t flags;
-	unsigned int shallow_depth;
-	unsigned int cmd_flags;
-	struct blk_mq_ctx *ctx;
-	struct blk_mq_hw_ctx *hctx;
-};
-
-struct blk_stat_callback {
-	struct list_head list;
-	struct timer_list timer;
-	struct blk_rq_stat *cpu_stat;
-	int (*bucket_fn)(const struct request *);
-	unsigned int buckets;
-	struct blk_rq_stat *stat;
-	void (*timer_fn)(struct blk_stat_callback *);
-	void *data;
-	struct callback_head rcu;
-};
-
-struct blk_trace {
-	int trace_state;
-	struct rchan *rchan;
-	long unsigned int *sequence;
-	unsigned char *msg_data;
-	u16 act_mask;
-	u64 start_lba;
-	u64 end_lba;
-	u32 pid;
-	u32 dev;
-	struct dentry *dir;
-	struct dentry *dropped_file;
-	struct dentry *msg_file;
-	struct list_head running_list;
-	atomic_t dropped;
-};
-
-struct blk_flush_queue {
-	unsigned int flush_pending_idx: 1;
-	unsigned int flush_running_idx: 1;
-	blk_status_t rq_status;
-	long unsigned int flush_pending_since;
-	struct list_head flush_queue[2];
-	struct list_head flush_data_in_flight;
-	struct request *flush_rq;
-	struct lock_class_key key;
-	spinlock_t mq_flush_lock;
-};
-
-struct blk_mq_queue_map {
-	unsigned int *mq_map;
-	unsigned int nr_queues;
-	unsigned int queue_offset;
-};
-
-struct sbq_wait_state;
-
-struct sbitmap_queue {
-	struct sbitmap sb;
-	unsigned int *alloc_hint;
-	unsigned int wake_batch;
-	atomic_t wake_index;
-	struct sbq_wait_state *ws;
-	atomic_t ws_active;
-	bool round_robin;
-	unsigned int min_shallow_depth;
-};
-
-struct blk_mq_tag_set {
-	struct blk_mq_queue_map map[3];
-	unsigned int nr_maps;
-	const struct blk_mq_ops *ops;
-	unsigned int nr_hw_queues;
-	unsigned int queue_depth;
-	unsigned int reserved_tags;
-	unsigned int cmd_size;
-	int numa_node;
-	unsigned int timeout;
-	unsigned int flags;
-	void *driver_data;
-	atomic_t active_queues_shared_sbitmap;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct blk_mq_tags **tags;
-	struct mutex tag_list_lock;
-	struct list_head tag_list;
-};
-
-enum blktrace_cat {
-	BLK_TC_READ = 1,
-	BLK_TC_WRITE = 2,
-	BLK_TC_FLUSH = 4,
-	BLK_TC_SYNC = 8,
-	BLK_TC_SYNCIO = 8,
-	BLK_TC_QUEUE = 16,
-	BLK_TC_REQUEUE = 32,
-	BLK_TC_ISSUE = 64,
-	BLK_TC_COMPLETE = 128,
-	BLK_TC_FS = 256,
-	BLK_TC_PC = 512,
-	BLK_TC_NOTIFY = 1024,
-	BLK_TC_AHEAD = 2048,
-	BLK_TC_META = 4096,
-	BLK_TC_DISCARD = 8192,
-	BLK_TC_DRV_DATA = 16384,
-	BLK_TC_FUA = 32768,
-	BLK_TC_END = 32768,
-};
-
-enum blktrace_act {
-	__BLK_TA_QUEUE = 1,
-	__BLK_TA_BACKMERGE = 2,
-	__BLK_TA_FRONTMERGE = 3,
-	__BLK_TA_GETRQ = 4,
-	__BLK_TA_SLEEPRQ = 5,
-	__BLK_TA_REQUEUE = 6,
-	__BLK_TA_ISSUE = 7,
-	__BLK_TA_COMPLETE = 8,
-	__BLK_TA_PLUG = 9,
-	__BLK_TA_UNPLUG_IO = 10,
-	__BLK_TA_UNPLUG_TIMER = 11,
-	__BLK_TA_INSERT = 12,
-	__BLK_TA_SPLIT = 13,
-	__BLK_TA_BOUNCE = 14,
-	__BLK_TA_REMAP = 15,
-	__BLK_TA_ABORT = 16,
-	__BLK_TA_DRV_DATA = 17,
-	__BLK_TA_CGROUP = 256,
-};
-
-enum blktrace_notify {
-	__BLK_TN_PROCESS = 0,
-	__BLK_TN_TIMESTAMP = 1,
-	__BLK_TN_MESSAGE = 2,
-	__BLK_TN_CGROUP = 256,
-};
-
-struct blk_io_trace {
-	__u32 magic;
-	__u32 sequence;
-	__u64 time;
-	__u64 sector;
-	__u32 bytes;
-	__u32 action;
-	__u32 pid;
-	__u32 device;
-	__u32 cpu;
-	__u16 error;
-	__u16 pdu_len;
-};
-
-struct blk_io_trace_remap {
-	__be32 device_from;
-	__be32 device_to;
-	__be64 sector_from;
-};
-
-enum {
-	Blktrace_setup = 1,
-	Blktrace_running = 2,
-	Blktrace_stopped = 3,
-};
-
-struct blk_user_trace_setup {
-	char name[32];
-	__u16 act_mask;
-	__u32 buf_size;
-	__u32 buf_nr;
-	__u64 start_lba;
-	__u64 end_lba;
-	__u32 pid;
-};
-
-struct sbitmap_word {
-	long unsigned int depth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int word;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int cleared;
-	spinlock_t swap_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbq_wait_state {
-	atomic_t wait_cnt;
-	wait_queue_head_t wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_tags {
-	unsigned int nr_tags;
-	unsigned int nr_reserved_tags;
-	atomic_t active_queues;
-	struct sbitmap_queue *bitmap_tags;
-	struct sbitmap_queue *breserved_tags;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct request **rqs;
-	struct request **static_rqs;
-	struct list_head page_list;
-};
-
-struct blk_mq_queue_data {
-	struct request *rq;
-	bool last;
-};
-
-enum blk_crypto_mode_num {
-	BLK_ENCRYPTION_MODE_INVALID = 0,
-	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
-	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
-	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
-	BLK_ENCRYPTION_MODE_MAX = 4,
-};
-
-struct blk_crypto_config {
-	enum blk_crypto_mode_num crypto_mode;
-	unsigned int data_unit_size;
-	unsigned int dun_bytes;
-};
-
-struct blk_crypto_key {
-	struct blk_crypto_config crypto_cfg;
-	unsigned int data_unit_size_bits;
-	unsigned int size;
-	u8 raw[64];
-};
-
-struct blk_mq_ctxs {
-	struct kobject kobj;
-	struct blk_mq_ctx *queue_ctx;
-};
-
-typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
-
-struct ftrace_event_field {
-	struct list_head link;
-	const char *name;
-	const char *type;
-	int filter_type;
-	int offset;
-	int size;
-	int is_signed;
-};
-
-enum {
-	FORMAT_HEADER = 1,
-	FORMAT_FIELD_SEPERATOR = 2,
-	FORMAT_PRINTFMT = 3,
-};
-
-struct event_probe_data {
-	struct trace_event_file *file;
-	long unsigned int count;
-	int ref;
-	bool enable;
-};
-
-struct syscall_trace_enter {
-	struct trace_entry ent;
-	int nr;
-	long unsigned int args[0];
-};
-
-struct syscall_trace_exit {
-	struct trace_entry ent;
-	int nr;
-	long int ret;
+	TRACE_ITER_HASH_PTR = 8388608,
+	TRACE_ITER_FUNCTION = 16777216,
+	TRACE_ITER_FUNC_FORK = 33554432,
+	TRACE_ITER_DISPLAY_GRAPH = 67108864,
+	TRACE_ITER_STACKTRACE = 134217728,
 };
 
 struct syscall_tp_t {
@@ -28845,357 +68360,22 @@
 	long unsigned int args[6];
 };
 
-enum perf_event_sample_format {
-	PERF_SAMPLE_IP = 1,
-	PERF_SAMPLE_TID = 2,
-	PERF_SAMPLE_TIME = 4,
-	PERF_SAMPLE_ADDR = 8,
-	PERF_SAMPLE_READ = 16,
-	PERF_SAMPLE_CALLCHAIN = 32,
-	PERF_SAMPLE_ID = 64,
-	PERF_SAMPLE_CPU = 128,
-	PERF_SAMPLE_PERIOD = 256,
-	PERF_SAMPLE_STREAM_ID = 512,
-	PERF_SAMPLE_RAW = 1024,
-	PERF_SAMPLE_BRANCH_STACK = 2048,
-	PERF_SAMPLE_REGS_USER = 4096,
-	PERF_SAMPLE_STACK_USER = 8192,
-	PERF_SAMPLE_WEIGHT = 16384,
-	PERF_SAMPLE_DATA_SRC = 32768,
-	PERF_SAMPLE_IDENTIFIER = 65536,
-	PERF_SAMPLE_TRANSACTION = 131072,
-	PERF_SAMPLE_REGS_INTR = 262144,
-	PERF_SAMPLE_PHYS_ADDR = 524288,
-	PERF_SAMPLE_AUX = 1048576,
-	PERF_SAMPLE_CGROUP = 2097152,
-	PERF_SAMPLE_MAX = 4194304,
-	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
-};
-
-typedef long unsigned int perf_trace_t[256];
-
-struct filter_pred;
-
-struct prog_entry {
-	int target;
-	int when_to_branch;
-	struct filter_pred *pred;
-};
-
-typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
-
-struct regex;
-
-typedef int (*regex_match_func)(char *, struct regex *, int);
-
-struct regex {
-	char pattern[256];
-	int len;
-	int field_len;
-	regex_match_func match;
-};
-
-struct filter_pred {
-	filter_pred_fn_t fn;
-	u64 val;
-	struct regex regex;
-	short unsigned int *ops;
-	struct ftrace_event_field *field;
-	int offset;
-	int not;
-	int op;
-};
-
-enum filter_op_ids {
-	OP_GLOB = 0,
-	OP_NE = 1,
-	OP_EQ = 2,
-	OP_LE = 3,
-	OP_LT = 4,
-	OP_GE = 5,
-	OP_GT = 6,
-	OP_BAND = 7,
-	OP_MAX = 8,
-};
-
-enum {
-	FILT_ERR_NONE = 0,
-	FILT_ERR_INVALID_OP = 1,
-	FILT_ERR_TOO_MANY_OPEN = 2,
-	FILT_ERR_TOO_MANY_CLOSE = 3,
-	FILT_ERR_MISSING_QUOTE = 4,
-	FILT_ERR_OPERAND_TOO_LONG = 5,
-	FILT_ERR_EXPECT_STRING = 6,
-	FILT_ERR_EXPECT_DIGIT = 7,
-	FILT_ERR_ILLEGAL_FIELD_OP = 8,
-	FILT_ERR_FIELD_NOT_FOUND = 9,
-	FILT_ERR_ILLEGAL_INTVAL = 10,
-	FILT_ERR_BAD_SUBSYS_FILTER = 11,
-	FILT_ERR_TOO_MANY_PREDS = 12,
-	FILT_ERR_INVALID_FILTER = 13,
-	FILT_ERR_IP_FIELD_ONLY = 14,
-	FILT_ERR_INVALID_VALUE = 15,
-	FILT_ERR_ERRNO = 16,
-	FILT_ERR_NO_FILTER = 17,
-};
-
-struct filter_parse_error {
-	int lasterr;
-	int lasterr_pos;
-};
-
-typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
-
-enum {
-	INVERT = 1,
-	PROCESS_AND = 2,
-	PROCESS_OR = 4,
-};
-
-enum {
-	TOO_MANY_CLOSE = 4294967295,
-	TOO_MANY_OPEN = 4294967294,
-	MISSING_QUOTE = 4294967293,
-};
-
-struct filter_list {
-	struct list_head list;
-	struct event_filter *filter;
-};
-
-struct function_filter_data {
-	struct ftrace_ops *ops;
-	int first_filter;
-	int first_notrace;
-};
-
-struct event_trigger_ops;
-
-struct event_command;
-
-struct event_trigger_data {
-	long unsigned int count;
-	int ref;
-	struct event_trigger_ops *ops;
-	struct event_command *cmd_ops;
-	struct event_filter *filter;
-	char *filter_str;
-	void *private_data;
-	bool paused;
-	bool paused_tmp;
-	struct list_head list;
-	char *name;
-	struct list_head named_list;
-	struct event_trigger_data *named_data;
-};
-
-struct event_trigger_ops {
-	void (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);
-	int (*init)(struct event_trigger_ops *, struct event_trigger_data *);
-	void (*free)(struct event_trigger_ops *, struct event_trigger_data *);
-	int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);
-};
-
-struct event_command {
-	struct list_head list;
-	char *name;
-	enum event_trigger_type trigger_type;
-	int flags;
-	int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);
-	int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg_all)(struct trace_event_file *);
-	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
-	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
-};
-
-struct enable_trigger_data {
-	struct trace_event_file *file;
-	bool enable;
-	bool hist;
-};
-
-enum event_command_flags {
-	EVENT_CMD_FL_POST_TRIGGER = 1,
-	EVENT_CMD_FL_NEEDS_REC = 2,
-};
-
-enum bpf_func_id {
-	BPF_FUNC_unspec = 0,
-	BPF_FUNC_map_lookup_elem = 1,
-	BPF_FUNC_map_update_elem = 2,
-	BPF_FUNC_map_delete_elem = 3,
-	BPF_FUNC_probe_read = 4,
-	BPF_FUNC_ktime_get_ns = 5,
-	BPF_FUNC_trace_printk = 6,
-	BPF_FUNC_get_prandom_u32 = 7,
-	BPF_FUNC_get_smp_processor_id = 8,
-	BPF_FUNC_skb_store_bytes = 9,
-	BPF_FUNC_l3_csum_replace = 10,
-	BPF_FUNC_l4_csum_replace = 11,
-	BPF_FUNC_tail_call = 12,
-	BPF_FUNC_clone_redirect = 13,
-	BPF_FUNC_get_current_pid_tgid = 14,
-	BPF_FUNC_get_current_uid_gid = 15,
-	BPF_FUNC_get_current_comm = 16,
-	BPF_FUNC_get_cgroup_classid = 17,
-	BPF_FUNC_skb_vlan_push = 18,
-	BPF_FUNC_skb_vlan_pop = 19,
-	BPF_FUNC_skb_get_tunnel_key = 20,
-	BPF_FUNC_skb_set_tunnel_key = 21,
-	BPF_FUNC_perf_event_read = 22,
-	BPF_FUNC_redirect = 23,
-	BPF_FUNC_get_route_realm = 24,
-	BPF_FUNC_perf_event_output = 25,
-	BPF_FUNC_skb_load_bytes = 26,
-	BPF_FUNC_get_stackid = 27,
-	BPF_FUNC_csum_diff = 28,
-	BPF_FUNC_skb_get_tunnel_opt = 29,
-	BPF_FUNC_skb_set_tunnel_opt = 30,
-	BPF_FUNC_skb_change_proto = 31,
-	BPF_FUNC_skb_change_type = 32,
-	BPF_FUNC_skb_under_cgroup = 33,
-	BPF_FUNC_get_hash_recalc = 34,
-	BPF_FUNC_get_current_task = 35,
-	BPF_FUNC_probe_write_user = 36,
-	BPF_FUNC_current_task_under_cgroup = 37,
-	BPF_FUNC_skb_change_tail = 38,
-	BPF_FUNC_skb_pull_data = 39,
-	BPF_FUNC_csum_update = 40,
-	BPF_FUNC_set_hash_invalid = 41,
-	BPF_FUNC_get_numa_node_id = 42,
-	BPF_FUNC_skb_change_head = 43,
-	BPF_FUNC_xdp_adjust_head = 44,
-	BPF_FUNC_probe_read_str = 45,
-	BPF_FUNC_get_socket_cookie = 46,
-	BPF_FUNC_get_socket_uid = 47,
-	BPF_FUNC_set_hash = 48,
-	BPF_FUNC_setsockopt = 49,
-	BPF_FUNC_skb_adjust_room = 50,
-	BPF_FUNC_redirect_map = 51,
-	BPF_FUNC_sk_redirect_map = 52,
-	BPF_FUNC_sock_map_update = 53,
-	BPF_FUNC_xdp_adjust_meta = 54,
-	BPF_FUNC_perf_event_read_value = 55,
-	BPF_FUNC_perf_prog_read_value = 56,
-	BPF_FUNC_getsockopt = 57,
-	BPF_FUNC_override_return = 58,
-	BPF_FUNC_sock_ops_cb_flags_set = 59,
-	BPF_FUNC_msg_redirect_map = 60,
-	BPF_FUNC_msg_apply_bytes = 61,
-	BPF_FUNC_msg_cork_bytes = 62,
-	BPF_FUNC_msg_pull_data = 63,
-	BPF_FUNC_bind = 64,
-	BPF_FUNC_xdp_adjust_tail = 65,
-	BPF_FUNC_skb_get_xfrm_state = 66,
-	BPF_FUNC_get_stack = 67,
-	BPF_FUNC_skb_load_bytes_relative = 68,
-	BPF_FUNC_fib_lookup = 69,
-	BPF_FUNC_sock_hash_update = 70,
-	BPF_FUNC_msg_redirect_hash = 71,
-	BPF_FUNC_sk_redirect_hash = 72,
-	BPF_FUNC_lwt_push_encap = 73,
-	BPF_FUNC_lwt_seg6_store_bytes = 74,
-	BPF_FUNC_lwt_seg6_adjust_srh = 75,
-	BPF_FUNC_lwt_seg6_action = 76,
-	BPF_FUNC_rc_repeat = 77,
-	BPF_FUNC_rc_keydown = 78,
-	BPF_FUNC_skb_cgroup_id = 79,
-	BPF_FUNC_get_current_cgroup_id = 80,
-	BPF_FUNC_get_local_storage = 81,
-	BPF_FUNC_sk_select_reuseport = 82,
-	BPF_FUNC_skb_ancestor_cgroup_id = 83,
-	BPF_FUNC_sk_lookup_tcp = 84,
-	BPF_FUNC_sk_lookup_udp = 85,
-	BPF_FUNC_sk_release = 86,
-	BPF_FUNC_map_push_elem = 87,
-	BPF_FUNC_map_pop_elem = 88,
-	BPF_FUNC_map_peek_elem = 89,
-	BPF_FUNC_msg_push_data = 90,
-	BPF_FUNC_msg_pop_data = 91,
-	BPF_FUNC_rc_pointer_rel = 92,
-	BPF_FUNC_spin_lock = 93,
-	BPF_FUNC_spin_unlock = 94,
-	BPF_FUNC_sk_fullsock = 95,
-	BPF_FUNC_tcp_sock = 96,
-	BPF_FUNC_skb_ecn_set_ce = 97,
-	BPF_FUNC_get_listener_sock = 98,
-	BPF_FUNC_skc_lookup_tcp = 99,
-	BPF_FUNC_tcp_check_syncookie = 100,
-	BPF_FUNC_sysctl_get_name = 101,
-	BPF_FUNC_sysctl_get_current_value = 102,
-	BPF_FUNC_sysctl_get_new_value = 103,
-	BPF_FUNC_sysctl_set_new_value = 104,
-	BPF_FUNC_strtol = 105,
-	BPF_FUNC_strtoul = 106,
-	BPF_FUNC_sk_storage_get = 107,
-	BPF_FUNC_sk_storage_delete = 108,
-	BPF_FUNC_send_signal = 109,
-	BPF_FUNC_tcp_gen_syncookie = 110,
-	BPF_FUNC_skb_output = 111,
-	BPF_FUNC_probe_read_user = 112,
-	BPF_FUNC_probe_read_kernel = 113,
-	BPF_FUNC_probe_read_user_str = 114,
-	BPF_FUNC_probe_read_kernel_str = 115,
-	BPF_FUNC_tcp_send_ack = 116,
-	BPF_FUNC_send_signal_thread = 117,
-	BPF_FUNC_jiffies64 = 118,
-	BPF_FUNC_read_branch_records = 119,
-	BPF_FUNC_get_ns_current_pid_tgid = 120,
-	BPF_FUNC_xdp_output = 121,
-	BPF_FUNC_get_netns_cookie = 122,
-	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
-	BPF_FUNC_sk_assign = 124,
-	BPF_FUNC_ktime_get_boot_ns = 125,
-	BPF_FUNC_seq_printf = 126,
-	BPF_FUNC_seq_write = 127,
-	BPF_FUNC_sk_cgroup_id = 128,
-	BPF_FUNC_sk_ancestor_cgroup_id = 129,
-	BPF_FUNC_ringbuf_output = 130,
-	BPF_FUNC_ringbuf_reserve = 131,
-	BPF_FUNC_ringbuf_submit = 132,
-	BPF_FUNC_ringbuf_discard = 133,
-	BPF_FUNC_ringbuf_query = 134,
-	BPF_FUNC_csum_level = 135,
-	BPF_FUNC_skc_to_tcp6_sock = 136,
-	BPF_FUNC_skc_to_tcp_sock = 137,
-	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
-	BPF_FUNC_skc_to_tcp_request_sock = 139,
-	BPF_FUNC_skc_to_udp6_sock = 140,
-	BPF_FUNC_get_task_stack = 141,
-	BPF_FUNC_load_hdr_opt = 142,
-	BPF_FUNC_store_hdr_opt = 143,
-	BPF_FUNC_reserve_hdr_opt = 144,
-	BPF_FUNC_inode_storage_get = 145,
-	BPF_FUNC_inode_storage_delete = 146,
-	BPF_FUNC_d_path = 147,
-	BPF_FUNC_copy_from_user = 148,
-	BPF_FUNC_snprintf_btf = 149,
-	BPF_FUNC_seq_printf_btf = 150,
-	BPF_FUNC_skb_cgroup_classid = 151,
-	BPF_FUNC_redirect_neigh = 152,
-	BPF_FUNC_per_cpu_ptr = 153,
-	BPF_FUNC_this_cpu_ptr = 154,
-	BPF_FUNC_redirect_peer = 155,
-	__BPF_FUNC_MAX_ID = 156,
-};
-
 enum {
 	BPF_F_INDEX_MASK = 4294967295,
 	BPF_F_CURRENT_CPU = 4294967295,
 	BPF_F_CTXLEN_MASK = 0,
 };
 
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
 struct bpf_perf_event_value {
 	__u64 counter;
 	__u64 enabled;
 	__u64 running;
 };
 
-struct bpf_raw_tracepoint_args {
-	__u64 args[0];
-};
-
 enum bpf_task_fd_type {
 	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
 	BPF_FD_TYPE_TRACEPOINT = 1,
@@ -29211,138 +68391,6 @@
 	__u32 flags;
 };
 
-enum {
-	BTF_F_COMPACT = 1,
-	BTF_F_NONAME = 2,
-	BTF_F_PTR_RAW = 4,
-	BTF_F_ZERO = 8,
-};
-
-enum bpf_arg_type {
-	ARG_DONTCARE = 0,
-	ARG_CONST_MAP_PTR = 1,
-	ARG_PTR_TO_MAP_KEY = 2,
-	ARG_PTR_TO_MAP_VALUE = 3,
-	ARG_PTR_TO_UNINIT_MAP_VALUE = 4,
-	ARG_PTR_TO_MAP_VALUE_OR_NULL = 5,
-	ARG_PTR_TO_MEM = 6,
-	ARG_PTR_TO_MEM_OR_NULL = 7,
-	ARG_PTR_TO_UNINIT_MEM = 8,
-	ARG_CONST_SIZE = 9,
-	ARG_CONST_SIZE_OR_ZERO = 10,
-	ARG_PTR_TO_CTX = 11,
-	ARG_PTR_TO_CTX_OR_NULL = 12,
-	ARG_ANYTHING = 13,
-	ARG_PTR_TO_SPIN_LOCK = 14,
-	ARG_PTR_TO_SOCK_COMMON = 15,
-	ARG_PTR_TO_INT = 16,
-	ARG_PTR_TO_LONG = 17,
-	ARG_PTR_TO_SOCKET = 18,
-	ARG_PTR_TO_SOCKET_OR_NULL = 19,
-	ARG_PTR_TO_BTF_ID = 20,
-	ARG_PTR_TO_ALLOC_MEM = 21,
-	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 22,
-	ARG_CONST_ALLOC_SIZE_OR_ZERO = 23,
-	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 24,
-	ARG_PTR_TO_PERCPU_BTF_ID = 25,
-	__BPF_ARG_TYPE_MAX = 26,
-};
-
-enum bpf_return_type {
-	RET_INTEGER = 0,
-	RET_VOID = 1,
-	RET_PTR_TO_MAP_VALUE = 2,
-	RET_PTR_TO_MAP_VALUE_OR_NULL = 3,
-	RET_PTR_TO_SOCKET_OR_NULL = 4,
-	RET_PTR_TO_TCP_SOCK_OR_NULL = 5,
-	RET_PTR_TO_SOCK_COMMON_OR_NULL = 6,
-	RET_PTR_TO_ALLOC_MEM_OR_NULL = 7,
-	RET_PTR_TO_BTF_ID_OR_NULL = 8,
-	RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9,
-	RET_PTR_TO_MEM_OR_BTF_ID = 10,
-};
-
-struct bpf_func_proto {
-	u64 (*func)(u64, u64, u64, u64, u64);
-	bool gpl_only;
-	bool pkt_access;
-	enum bpf_return_type ret_type;
-	union {
-		struct {
-			enum bpf_arg_type arg1_type;
-			enum bpf_arg_type arg2_type;
-			enum bpf_arg_type arg3_type;
-			enum bpf_arg_type arg4_type;
-			enum bpf_arg_type arg5_type;
-		};
-		enum bpf_arg_type arg_type[5];
-	};
-	union {
-		struct {
-			u32 *arg1_btf_id;
-			u32 *arg2_btf_id;
-			u32 *arg3_btf_id;
-			u32 *arg4_btf_id;
-			u32 *arg5_btf_id;
-		};
-		u32 *arg_btf_id[5];
-	};
-	int *ret_btf_id;
-	bool (*allowed)(const struct bpf_prog *);
-};
-
-enum bpf_access_type {
-	BPF_READ = 1,
-	BPF_WRITE = 2,
-};
-
-struct bpf_verifier_log;
-
-struct bpf_insn_access_aux {
-	enum bpf_reg_type reg_type;
-	union {
-		int ctx_field_size;
-		u32 btf_id;
-	};
-	struct bpf_verifier_log *log;
-};
-
-struct bpf_verifier_ops {
-	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
-	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
-	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
-	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
-	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
-};
-
-struct bpf_array_aux {
-	enum bpf_prog_type type;
-	bool jited;
-	struct list_head poke_progs;
-	struct bpf_map *map;
-	struct mutex poke_mutex;
-	struct work_struct work;
-};
-
-struct bpf_array {
-	struct bpf_map map;
-	u32 elem_size;
-	u32 index_mask;
-	struct bpf_array_aux *aux;
-	union {
-		char value[0];
-		void *ptrs[0];
-		void *pptrs[0];
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct bpf_event_entry {
 	struct perf_event *event;
 	struct file *perf_file;
@@ -29350,31 +68398,24 @@
 	struct callback_head rcu;
 };
 
-typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
-
-typedef struct user_pt_regs bpf_user_pt_regs_t;
-
-struct bpf_perf_event_data {
-	bpf_user_pt_regs_t regs;
-	__u64 sample_period;
-	__u64 addr;
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
 };
 
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
 struct perf_event_query_bpf {
 	__u32 ids_len;
 	__u32 prog_cnt;
 	__u32 ids[0];
 };
 
-struct bpf_perf_event_data_kern {
-	bpf_user_pt_regs_t *regs;
-	struct perf_sample_data *data;
-	struct perf_event *event;
-};
-
-struct btf_id_set {
-	u32 cnt;
-	u32 ids[0];
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
 };
 
 struct trace_event_raw_bpf_trace_printk {
@@ -29394,8 +68435,6 @@
 	struct list_head list;
 };
 
-typedef u64 (*btf_bpf_override_return)(struct pt_regs *, long unsigned int);
-
 typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
 
 typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
@@ -29412,9 +68451,7 @@
 
 typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
 
-struct bpf_seq_printf_buf {
-	char buf[768];
-};
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
 
 typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
 
@@ -29438,6 +68475,10 @@
 
 typedef u64 (*btf_bpf_get_current_task)();
 
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
 typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
 
 struct send_signal_irq_work {
@@ -29455,6 +68496,28 @@
 
 typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
 
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
 typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
 
 typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
@@ -29475,762 +68538,17 @@
 
 typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
 
-enum dynevent_type {
-	DYNEVENT_TYPE_SYNTH = 1,
-	DYNEVENT_TYPE_KPROBE = 2,
-	DYNEVENT_TYPE_NONE = 3,
-};
-
-struct dynevent_cmd;
-
-typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
-
-struct dynevent_cmd {
-	struct seq_buf seq;
-	const char *event_name;
-	unsigned int n_fields;
-	enum dynevent_type type;
-	dynevent_create_fn_t run_command;
-	void *private_data;
-};
-
-struct kprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int ip;
-};
-
-struct kretprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int func;
-	long unsigned int ret_ip;
-};
-
-struct dyn_event;
-
-struct dyn_event_operations {
-	struct list_head list;
-	int (*create)(int, const char **);
-	int (*show)(struct seq_file *, struct dyn_event *);
-	bool (*is_busy)(struct dyn_event *);
-	int (*free)(struct dyn_event *);
-	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
-};
-
-struct dyn_event {
-	struct list_head list;
-	struct dyn_event_operations *ops;
-};
-
-struct dynevent_arg {
-	const char *str;
-	char separator;
-};
-
-typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
-
-enum fetch_op {
-	FETCH_OP_NOP = 0,
-	FETCH_OP_REG = 1,
-	FETCH_OP_STACK = 2,
-	FETCH_OP_STACKP = 3,
-	FETCH_OP_RETVAL = 4,
-	FETCH_OP_IMM = 5,
-	FETCH_OP_COMM = 6,
-	FETCH_OP_ARG = 7,
-	FETCH_OP_FOFFS = 8,
-	FETCH_OP_DATA = 9,
-	FETCH_OP_DEREF = 10,
-	FETCH_OP_UDEREF = 11,
-	FETCH_OP_ST_RAW = 12,
-	FETCH_OP_ST_MEM = 13,
-	FETCH_OP_ST_UMEM = 14,
-	FETCH_OP_ST_STRING = 15,
-	FETCH_OP_ST_USTRING = 16,
-	FETCH_OP_MOD_BF = 17,
-	FETCH_OP_LP_ARRAY = 18,
-	FETCH_OP_END = 19,
-	FETCH_NOP_SYMBOL = 20,
-};
-
-struct fetch_insn {
-	enum fetch_op op;
-	union {
-		unsigned int param;
-		struct {
-			unsigned int size;
-			int offset;
-		};
-		struct {
-			unsigned char basesize;
-			unsigned char lshift;
-			unsigned char rshift;
-		};
-		long unsigned int immediate;
-		void *data;
-	};
-};
-
-struct fetch_type {
-	const char *name;
-	size_t size;
-	int is_signed;
-	print_type_func_t print;
-	const char *fmt;
-	const char *fmttype;
-};
-
-struct probe_arg {
-	struct fetch_insn *code;
-	bool dynamic;
-	unsigned int offset;
-	unsigned int count;
-	const char *name;
-	const char *comm;
-	char *fmt;
-	const struct fetch_type *type;
-};
-
-struct trace_uprobe_filter {
-	rwlock_t rwlock;
-	int nr_systemwide;
-	struct list_head perf_events;
-};
-
-struct trace_probe_event {
-	unsigned int flags;
-	struct trace_event_class class;
-	struct trace_event_call call;
-	struct list_head files;
-	struct list_head probes;
-	struct trace_uprobe_filter filter[0];
-};
-
-struct trace_probe {
-	struct list_head list;
-	struct trace_probe_event *event;
-	ssize_t size;
-	unsigned int nr_args;
-	struct probe_arg args[0];
-};
-
-struct event_file_link {
-	struct trace_event_file *file;
-	struct list_head list;
-};
-
-enum {
-	TP_ERR_FILE_NOT_FOUND = 0,
-	TP_ERR_NO_REGULAR_FILE = 1,
-	TP_ERR_BAD_REFCNT = 2,
-	TP_ERR_REFCNT_OPEN_BRACE = 3,
-	TP_ERR_BAD_REFCNT_SUFFIX = 4,
-	TP_ERR_BAD_UPROBE_OFFS = 5,
-	TP_ERR_MAXACT_NO_KPROBE = 6,
-	TP_ERR_BAD_MAXACT = 7,
-	TP_ERR_MAXACT_TOO_BIG = 8,
-	TP_ERR_BAD_PROBE_ADDR = 9,
-	TP_ERR_BAD_RETPROBE = 10,
-	TP_ERR_BAD_ADDR_SUFFIX = 11,
-	TP_ERR_NO_GROUP_NAME = 12,
-	TP_ERR_GROUP_TOO_LONG = 13,
-	TP_ERR_BAD_GROUP_NAME = 14,
-	TP_ERR_NO_EVENT_NAME = 15,
-	TP_ERR_EVENT_TOO_LONG = 16,
-	TP_ERR_BAD_EVENT_NAME = 17,
-	TP_ERR_RETVAL_ON_PROBE = 18,
-	TP_ERR_BAD_STACK_NUM = 19,
-	TP_ERR_BAD_ARG_NUM = 20,
-	TP_ERR_BAD_VAR = 21,
-	TP_ERR_BAD_REG_NAME = 22,
-	TP_ERR_BAD_MEM_ADDR = 23,
-	TP_ERR_BAD_IMM = 24,
-	TP_ERR_IMMSTR_NO_CLOSE = 25,
-	TP_ERR_FILE_ON_KPROBE = 26,
-	TP_ERR_BAD_FILE_OFFS = 27,
-	TP_ERR_SYM_ON_UPROBE = 28,
-	TP_ERR_TOO_MANY_OPS = 29,
-	TP_ERR_DEREF_NEED_BRACE = 30,
-	TP_ERR_BAD_DEREF_OFFS = 31,
-	TP_ERR_DEREF_OPEN_BRACE = 32,
-	TP_ERR_COMM_CANT_DEREF = 33,
-	TP_ERR_BAD_FETCH_ARG = 34,
-	TP_ERR_ARRAY_NO_CLOSE = 35,
-	TP_ERR_BAD_ARRAY_SUFFIX = 36,
-	TP_ERR_BAD_ARRAY_NUM = 37,
-	TP_ERR_ARRAY_TOO_BIG = 38,
-	TP_ERR_BAD_TYPE = 39,
-	TP_ERR_BAD_STRING = 40,
-	TP_ERR_BAD_BITFIELD = 41,
-	TP_ERR_ARG_NAME_TOO_LONG = 42,
-	TP_ERR_NO_ARG_NAME = 43,
-	TP_ERR_BAD_ARG_NAME = 44,
-	TP_ERR_USED_ARG_NAME = 45,
-	TP_ERR_ARG_TOO_LONG = 46,
-	TP_ERR_NO_ARG_BODY = 47,
-	TP_ERR_BAD_INSN_BNDRY = 48,
-	TP_ERR_FAIL_REG_PROBE = 49,
-	TP_ERR_DIFF_PROBE_TYPE = 50,
-	TP_ERR_DIFF_ARG_TYPE = 51,
-	TP_ERR_SAME_PROBE = 52,
-};
-
-struct trace_kprobe {
-	struct dyn_event devent;
-	struct kretprobe rp;
-	long unsigned int *nhit;
-	const char *symbol;
-	struct trace_probe tp;
-};
-
-struct trace_event_raw_cpu {
-	struct trace_entry ent;
-	u32 state;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_powernv_throttle {
-	struct trace_entry ent;
-	int chip_id;
-	u32 __data_loc_reason;
-	int pmax;
-	char __data[0];
-};
-
-struct trace_event_raw_pstate_sample {
-	struct trace_entry ent;
-	u32 core_busy;
-	u32 scaled_busy;
-	u32 from;
-	u32 to;
-	u64 mperf;
-	u64 aperf;
-	u64 tsc;
-	u32 freq;
-	u32 io_boost;
-	char __data[0];
-};
-
-struct trace_event_raw_cpu_frequency_limits {
-	struct trace_entry ent;
-	u32 min_freq;
-	u32 max_freq;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_start {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u32 __data_loc_parent;
-	u32 __data_loc_pm_ops;
-	int event;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_end {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_suspend_resume {
-	struct trace_entry ent;
-	const char *action;
-	int val;
-	bool start;
-	char __data[0];
-};
-
-struct trace_event_raw_wakeup_source {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	char __data[0];
-};
-
-struct trace_event_raw_clock {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_power_domain {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_cpu_latency_qos_request {
-	struct trace_entry ent;
-	s32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_pm_qos_update {
-	struct trace_entry ent;
-	enum pm_qos_req_action action;
-	int prev_value;
-	int curr_value;
-	char __data[0];
-};
-
-struct trace_event_raw_dev_pm_qos_request {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	enum dev_pm_qos_req_type type;
-	s32 new_value;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpu {};
-
-struct trace_event_data_offsets_powernv_throttle {
-	u32 reason;
-};
-
-struct trace_event_data_offsets_pstate_sample {};
-
-struct trace_event_data_offsets_cpu_frequency_limits {};
-
-struct trace_event_data_offsets_device_pm_callback_start {
-	u32 device;
-	u32 driver;
-	u32 parent;
-	u32 pm_ops;
-};
-
-struct trace_event_data_offsets_device_pm_callback_end {
-	u32 device;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_suspend_resume {};
-
-struct trace_event_data_offsets_wakeup_source {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clock {
-	u32 name;
-};
-
-struct trace_event_data_offsets_power_domain {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cpu_latency_qos_request {};
-
-struct trace_event_data_offsets_pm_qos_update {};
-
-struct trace_event_data_offsets_dev_pm_qos_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
-
-typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
-
-typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
-
-typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
-
-typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
-
-typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
-
-typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-struct trace_event_raw_rpm_internal {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flags;
-	int usage_count;
-	int disable_depth;
-	int runtime_auto;
-	int request_pending;
-	int irq_safe;
-	int child_count;
-	char __data[0];
-};
-
-struct trace_event_raw_rpm_return_int {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int ip;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rpm_internal {
-	u32 name;
-};
-
-struct trace_event_data_offsets_rpm_return_int {
-	u32 name;
-};
-
-typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
-
-typedef int (*dynevent_check_arg_fn_t)(void *);
-
-struct dynevent_arg_pair {
-	const char *lhs;
-	const char *rhs;
-	char operator;
-	char separator;
-};
-
-struct trace_probe_log {
-	const char *subsystem;
-	const char **argv;
-	int argc;
-	int index;
-};
-
-enum uprobe_filter_ctx {
-	UPROBE_FILTER_REGISTER = 0,
-	UPROBE_FILTER_UNREGISTER = 1,
-	UPROBE_FILTER_MMAP = 2,
-};
-
-struct uprobe_consumer {
-	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
-	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
-	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-	struct uprobe_consumer *next;
-};
-
-struct uprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int vaddr[0];
-};
-
-struct trace_uprobe {
-	struct dyn_event devent;
-	struct uprobe_consumer consumer;
-	struct path path;
-	struct inode *inode;
-	char *filename;
-	long unsigned int offset;
-	long unsigned int ref_ctr_offset;
-	long unsigned int nhit;
-	struct trace_probe tp;
-};
-
-struct uprobe_dispatch_data {
-	struct trace_uprobe *tu;
-	long unsigned int bp_addr;
-};
-
-struct uprobe_cpu_buffer {
-	struct mutex mutex;
-	void *buf;
-};
-
-typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-
-struct rnd_state {
-	__u32 s1;
-	__u32 s2;
-	__u32 s3;
-	__u32 s4;
-};
-
-struct rhash_lock_head;
-
-struct bucket_table {
-	unsigned int size;
-	unsigned int nest;
-	u32 hash_rnd;
-	struct list_head walkers;
-	struct callback_head rcu;
-	struct bucket_table *future_tbl;
-	struct lockdep_map dep_map;
-	long: 64;
-	struct rhash_lock_head *buckets[0];
-};
-
-enum xdp_action {
-	XDP_ABORTED = 0,
-	XDP_DROP = 1,
-	XDP_PASS = 2,
-	XDP_TX = 3,
-	XDP_REDIRECT = 4,
-};
-
-enum bpf_jit_poke_reason {
-	BPF_POKE_REASON_TAIL_CALL = 0,
-};
-
-enum bpf_text_poke_type {
-	BPF_MOD_CALL = 0,
-	BPF_MOD_JUMP = 1,
-};
-
-enum xdp_mem_type {
-	MEM_TYPE_PAGE_SHARED = 0,
-	MEM_TYPE_PAGE_ORDER0 = 1,
-	MEM_TYPE_PAGE_POOL = 2,
-	MEM_TYPE_XSK_BUFF_POOL = 3,
-	MEM_TYPE_MAX = 4,
-};
-
-struct xdp_cpumap_stats {
-	unsigned int redirect;
-	unsigned int pass;
-	unsigned int drop;
-};
-
-typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
-
-struct bpf_prog_dummy {
-	struct bpf_prog prog;
-};
-
-typedef u64 (*btf_bpf_user_rnd_u32)();
-
-typedef u64 (*btf_bpf_get_raw_cpu_id)();
-
-struct _bpf_dtab_netdev {
-	struct net_device *dev;
-};
-
-struct rhash_lock_head {};
-
-struct zero_copy_allocator;
-
-struct page_pool;
-
-struct xdp_mem_allocator {
-	struct xdp_mem_info mem;
-	union {
-		void *allocator;
-		struct page_pool *page_pool;
-		struct zero_copy_allocator *zc_alloc;
-	};
-	struct rhash_head node;
-	struct callback_head rcu;
-};
-
-struct trace_event_raw_xdp_exception {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_bulk_tx {
-	struct trace_entry ent;
-	int ifindex;
-	u32 act;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_redirect_template {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	int err;
-	int to_ifindex;
+struct bpf_iter_seq_map_info {
 	u32 map_id;
-	int map_index;
-	char __data[0];
 };
 
-struct trace_event_raw_xdp_cpumap_kthread {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int sched;
-	unsigned int xdp_pass;
-	unsigned int xdp_drop;
-	unsigned int xdp_redirect;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_enqueue {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int to_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_devmap_xmit {
-	struct trace_entry ent;
-	int from_ifindex;
-	u32 act;
-	int to_ifindex;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_disconnect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_connect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	const struct xdp_rxq_info *rxq;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_return_failed {
-	struct trace_entry ent;
-	const struct page *page;
-	u32 mem_id;
-	u32 mem_type;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_xdp_exception {};
-
-struct trace_event_data_offsets_xdp_bulk_tx {};
-
-struct trace_event_data_offsets_xdp_redirect_template {};
-
-struct trace_event_data_offsets_xdp_cpumap_kthread {};
-
-struct trace_event_data_offsets_xdp_cpumap_enqueue {};
-
-struct trace_event_data_offsets_xdp_devmap_xmit {};
-
-struct trace_event_data_offsets_mem_disconnect {};
-
-struct trace_event_data_offsets_mem_connect {};
-
-struct trace_event_data_offsets_mem_return_failed {};
-
-typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
-
-typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
-
-typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
-
-typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
-
-typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
-
-enum bpf_cmd {
-	BPF_MAP_CREATE = 0,
-	BPF_MAP_LOOKUP_ELEM = 1,
-	BPF_MAP_UPDATE_ELEM = 2,
-	BPF_MAP_DELETE_ELEM = 3,
-	BPF_MAP_GET_NEXT_KEY = 4,
-	BPF_PROG_LOAD = 5,
-	BPF_OBJ_PIN = 6,
-	BPF_OBJ_GET = 7,
-	BPF_PROG_ATTACH = 8,
-	BPF_PROG_DETACH = 9,
-	BPF_PROG_TEST_RUN = 10,
-	BPF_PROG_GET_NEXT_ID = 11,
-	BPF_MAP_GET_NEXT_ID = 12,
-	BPF_PROG_GET_FD_BY_ID = 13,
-	BPF_MAP_GET_FD_BY_ID = 14,
-	BPF_OBJ_GET_INFO_BY_FD = 15,
-	BPF_PROG_QUERY = 16,
-	BPF_RAW_TRACEPOINT_OPEN = 17,
-	BPF_BTF_LOAD = 18,
-	BPF_BTF_GET_FD_BY_ID = 19,
-	BPF_TASK_FD_QUERY = 20,
-	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
-	BPF_MAP_FREEZE = 22,
-	BPF_BTF_GET_NEXT_ID = 23,
-	BPF_MAP_LOOKUP_BATCH = 24,
-	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
-	BPF_MAP_UPDATE_BATCH = 26,
-	BPF_MAP_DELETE_BATCH = 27,
-	BPF_LINK_CREATE = 28,
-	BPF_LINK_UPDATE = 29,
-	BPF_LINK_GET_FD_BY_ID = 30,
-	BPF_LINK_GET_NEXT_ID = 31,
-	BPF_ENABLE_STATS = 32,
-	BPF_ITER_CREATE = 33,
-	BPF_LINK_DETACH = 34,
-	BPF_PROG_BIND_MAP = 35,
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
 };
 
 enum {
@@ -30256,636 +68574,6 @@
 	BPF_F_INNER_MAP = 4096,
 };
 
-enum bpf_stats_type {
-	BPF_STATS_RUN_TIME = 0,
-};
-
-struct bpf_prog_info {
-	__u32 type;
-	__u32 id;
-	__u8 tag[8];
-	__u32 jited_prog_len;
-	__u32 xlated_prog_len;
-	__u64 jited_prog_insns;
-	__u64 xlated_prog_insns;
-	__u64 load_time;
-	__u32 created_by_uid;
-	__u32 nr_map_ids;
-	__u64 map_ids;
-	char name[16];
-	__u32 ifindex;
-	__u32 gpl_compatible: 1;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 nr_jited_ksyms;
-	__u32 nr_jited_func_lens;
-	__u64 jited_ksyms;
-	__u64 jited_func_lens;
-	__u32 btf_id;
-	__u32 func_info_rec_size;
-	__u64 func_info;
-	__u32 nr_func_info;
-	__u32 nr_line_info;
-	__u64 line_info;
-	__u64 jited_line_info;
-	__u32 nr_jited_line_info;
-	__u32 line_info_rec_size;
-	__u32 jited_line_info_rec_size;
-	__u32 nr_prog_tags;
-	__u64 prog_tags;
-	__u64 run_time_ns;
-	__u64 run_cnt;
-};
-
-struct bpf_map_info {
-	__u32 type;
-	__u32 id;
-	__u32 key_size;
-	__u32 value_size;
-	__u32 max_entries;
-	__u32 map_flags;
-	char name[16];
-	__u32 ifindex;
-	__u32 btf_vmlinux_value_type_id;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 btf_id;
-	__u32 btf_key_type_id;
-	__u32 btf_value_type_id;
-};
-
-struct bpf_btf_info {
-	__u64 btf;
-	__u32 btf_size;
-	__u32 id;
-};
-
-struct bpf_spin_lock {
-	__u32 val;
-};
-
-struct bpf_attach_target_info {
-	struct btf_func_model fmodel;
-	long int tgt_addr;
-	const char *tgt_name;
-	const struct btf_type *tgt_type;
-};
-
-struct bpf_link_primer {
-	struct bpf_link *link;
-	struct file *file;
-	int fd;
-	u32 id;
-};
-
-enum perf_bpf_event_type {
-	PERF_BPF_EVENT_UNKNOWN = 0,
-	PERF_BPF_EVENT_PROG_LOAD = 1,
-	PERF_BPF_EVENT_PROG_UNLOAD = 2,
-	PERF_BPF_EVENT_MAX = 3,
-};
-
-enum bpf_audit {
-	BPF_AUDIT_LOAD = 0,
-	BPF_AUDIT_UNLOAD = 1,
-	BPF_AUDIT_MAX = 2,
-};
-
-struct bpf_tracing_link {
-	struct bpf_link link;
-	enum bpf_attach_type attach_type;
-	struct bpf_trampoline *trampoline;
-	struct bpf_prog *tgt_prog;
-};
-
-struct bpf_raw_tp_link {
-	struct bpf_link link;
-	struct bpf_raw_event_map *btp;
-};
-
-struct btf_member {
-	__u32 name_off;
-	__u32 type;
-	__u32 offset;
-};
-
-enum btf_func_linkage {
-	BTF_FUNC_STATIC = 0,
-	BTF_FUNC_GLOBAL = 1,
-	BTF_FUNC_EXTERN = 2,
-};
-
-struct btf_var_secinfo {
-	__u32 type;
-	__u32 offset;
-	__u32 size;
-};
-
-enum sk_action {
-	SK_DROP = 0,
-	SK_PASS = 1,
-};
-
-struct bpf_verifier_log {
-	u32 level;
-	char kbuf[1024];
-	char *ubuf;
-	u32 len_used;
-	u32 len_total;
-};
-
-struct bpf_subprog_info {
-	u32 start;
-	u32 linfo_idx;
-	u16 stack_depth;
-	bool has_tail_call;
-	bool tail_call_reachable;
-	bool has_ld_abs;
-};
-
-struct bpf_verifier_stack_elem;
-
-struct bpf_verifier_state;
-
-struct bpf_verifier_state_list;
-
-struct bpf_insn_aux_data;
-
-struct bpf_verifier_env {
-	u32 insn_idx;
-	u32 prev_insn_idx;
-	struct bpf_prog *prog;
-	const struct bpf_verifier_ops *ops;
-	struct bpf_verifier_stack_elem *head;
-	int stack_size;
-	bool strict_alignment;
-	bool test_state_freq;
-	struct bpf_verifier_state *cur_state;
-	struct bpf_verifier_state_list **explored_states;
-	struct bpf_verifier_state_list *free_list;
-	struct bpf_map *used_maps[64];
-	u32 used_map_cnt;
-	u32 id_gen;
-	bool allow_ptr_leaks;
-	bool allow_ptr_to_map_access;
-	bool bpf_capable;
-	bool bypass_spec_v1;
-	bool bypass_spec_v4;
-	bool seen_direct_write;
-	struct bpf_insn_aux_data *insn_aux_data;
-	const struct bpf_line_info *prev_linfo;
-	struct bpf_verifier_log log;
-	struct bpf_subprog_info subprog_info[257];
-	struct {
-		int *insn_state;
-		int *insn_stack;
-		int cur_stack;
-	} cfg;
-	u32 pass_cnt;
-	u32 subprog_cnt;
-	u32 prev_insn_processed;
-	u32 insn_processed;
-	u32 prev_jmps_processed;
-	u32 jmps_processed;
-	u64 verification_time;
-	u32 max_states_per_insn;
-	u32 total_states;
-	u32 peak_states;
-	u32 longest_mark_read_walk;
-};
-
-struct bpf_struct_ops {
-	const struct bpf_verifier_ops *verifier_ops;
-	int (*init)(struct btf *);
-	int (*check_member)(const struct btf_type *, const struct btf_member *);
-	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
-	int (*reg)(void *);
-	void (*unreg)(void *);
-	const struct btf_type *type;
-	const struct btf_type *value_type;
-	const char *name;
-	struct btf_func_model func_models[64];
-	u32 type_id;
-	u32 value_id;
-};
-
-typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-
-struct tnum {
-	u64 value;
-	u64 mask;
-};
-
-enum bpf_reg_liveness {
-	REG_LIVE_NONE = 0,
-	REG_LIVE_READ32 = 1,
-	REG_LIVE_READ64 = 2,
-	REG_LIVE_READ = 3,
-	REG_LIVE_WRITTEN = 4,
-	REG_LIVE_DONE = 8,
-};
-
-struct bpf_reg_state {
-	enum bpf_reg_type type;
-	union {
-		u16 range;
-		struct bpf_map *map_ptr;
-		u32 btf_id;
-		u32 mem_size;
-		long unsigned int raw;
-	};
-	s32 off;
-	u32 id;
-	u32 ref_obj_id;
-	struct tnum var_off;
-	s64 smin_value;
-	s64 smax_value;
-	u64 umin_value;
-	u64 umax_value;
-	s32 s32_min_value;
-	s32 s32_max_value;
-	u32 u32_min_value;
-	u32 u32_max_value;
-	struct bpf_reg_state *parent;
-	u32 frameno;
-	s32 subreg_def;
-	enum bpf_reg_liveness live;
-	bool precise;
-};
-
-enum bpf_stack_slot_type {
-	STACK_INVALID = 0,
-	STACK_SPILL = 1,
-	STACK_MISC = 2,
-	STACK_ZERO = 3,
-};
-
-struct bpf_stack_state {
-	struct bpf_reg_state spilled_ptr;
-	u8 slot_type[8];
-};
-
-struct bpf_reference_state {
-	int id;
-	int insn_idx;
-};
-
-struct bpf_func_state {
-	struct bpf_reg_state regs[11];
-	int callsite;
-	u32 frameno;
-	u32 subprogno;
-	int acquired_refs;
-	struct bpf_reference_state *refs;
-	int allocated_stack;
-	struct bpf_stack_state *stack;
-};
-
-struct bpf_idx_pair {
-	u32 prev_idx;
-	u32 idx;
-};
-
-struct bpf_verifier_state {
-	struct bpf_func_state *frame[8];
-	struct bpf_verifier_state *parent;
-	u32 branches;
-	u32 insn_idx;
-	u32 curframe;
-	u32 active_spin_lock;
-	bool speculative;
-	u32 first_insn_idx;
-	u32 last_insn_idx;
-	struct bpf_idx_pair *jmp_history;
-	u32 jmp_history_cnt;
-};
-
-struct bpf_verifier_state_list {
-	struct bpf_verifier_state state;
-	struct bpf_verifier_state_list *next;
-	int miss_cnt;
-	int hit_cnt;
-};
-
-struct bpf_insn_aux_data {
-	union {
-		enum bpf_reg_type ptr_type;
-		long unsigned int map_ptr_state;
-		s32 call_imm;
-		u32 alu_limit;
-		struct {
-			u32 map_index;
-			u32 map_off;
-		};
-		struct {
-			enum bpf_reg_type reg_type;
-			union {
-				u32 btf_id;
-				u32 mem_size;
-			};
-		} btf_var;
-	};
-	u64 map_key_state;
-	int ctx_field_size;
-	int sanitize_stack_off;
-	u32 seen;
-	bool zext_dst;
-	u8 alu_state;
-	unsigned int orig_idx;
-	bool prune_point;
-};
-
-struct bpf_verifier_stack_elem {
-	struct bpf_verifier_state st;
-	int insn_idx;
-	int prev_insn_idx;
-	struct bpf_verifier_stack_elem *next;
-	u32 log_pos;
-};
-
-enum {
-	BTF_SOCK_TYPE_INET = 0,
-	BTF_SOCK_TYPE_INET_CONN = 1,
-	BTF_SOCK_TYPE_INET_REQ = 2,
-	BTF_SOCK_TYPE_INET_TW = 3,
-	BTF_SOCK_TYPE_REQ = 4,
-	BTF_SOCK_TYPE_SOCK = 5,
-	BTF_SOCK_TYPE_SOCK_COMMON = 6,
-	BTF_SOCK_TYPE_TCP = 7,
-	BTF_SOCK_TYPE_TCP_REQ = 8,
-	BTF_SOCK_TYPE_TCP_TW = 9,
-	BTF_SOCK_TYPE_TCP6 = 10,
-	BTF_SOCK_TYPE_UDP = 11,
-	BTF_SOCK_TYPE_UDP6 = 12,
-	MAX_BTF_SOCK_TYPE = 13,
-};
-
-typedef void (*bpf_insn_print_t)(void *, const char *, ...);
-
-typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
-
-typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
-
-struct bpf_insn_cbs {
-	bpf_insn_print_t cb_print;
-	bpf_insn_revmap_call_t cb_call;
-	bpf_insn_print_imm_t cb_imm;
-	void *private_data;
-};
-
-struct bpf_call_arg_meta {
-	struct bpf_map *map_ptr;
-	bool raw_mode;
-	bool pkt_access;
-	int regno;
-	int access_size;
-	int mem_size;
-	u64 msize_max_value;
-	int ref_obj_id;
-	int func_id;
-	u32 btf_id;
-	u32 ret_btf_id;
-};
-
-enum reg_arg_type {
-	SRC_OP = 0,
-	DST_OP = 1,
-	DST_OP_NO_MARK = 2,
-};
-
-struct bpf_reg_types {
-	const enum bpf_reg_type types[10];
-	u32 *btf_id;
-};
-
-enum {
-	DISCOVERED = 16,
-	EXPLORED = 32,
-	FALLTHROUGH = 1,
-	BRANCH = 2,
-};
-
-struct idpair {
-	u32 old;
-	u32 cur;
-};
-
-struct tree_descr {
-	const char *name;
-	const struct file_operations *ops;
-	int mode;
-};
-
-struct bpf_preload_info {
-	char link_name[16];
-	int link_id;
-};
-
-struct bpf_preload_ops {
-	struct umd_info info;
-	int (*preload)(struct bpf_preload_info *);
-	int (*finish)();
-	struct module *owner;
-};
-
-enum bpf_type {
-	BPF_TYPE_UNSPEC = 0,
-	BPF_TYPE_PROG = 1,
-	BPF_TYPE_MAP = 2,
-	BPF_TYPE_LINK = 3,
-};
-
-struct map_iter {
-	void *key;
-	bool done;
-};
-
-enum {
-	OPT_MODE = 0,
-};
-
-struct bpf_mount_opts {
-	umode_t mode;
-};
-
-struct bpf_pidns_info {
-	__u32 pid;
-	__u32 tgid;
-};
-
-typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
-
-typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_get_smp_processor_id)();
-
-typedef u64 (*btf_bpf_get_numa_node_id)();
-
-typedef u64 (*btf_bpf_ktime_get_ns)();
-
-typedef u64 (*btf_bpf_ktime_get_boot_ns)();
-
-typedef u64 (*btf_bpf_get_current_pid_tgid)();
-
-typedef u64 (*btf_bpf_get_current_uid_gid)();
-
-typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
-
-typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_jiffies64)();
-
-typedef u64 (*btf_bpf_get_current_cgroup_id)();
-
-typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
-
-typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
-
-typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
-
-typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
-
-typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
-
-typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
-
-union bpf_iter_link_info {
-	struct {
-		__u32 map_fd;
-	} map;
-};
-
-typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
-
-typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
-
-typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
-
-typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
-
-struct bpf_iter_reg {
-	const char *target;
-	bpf_iter_attach_target_t attach_target;
-	bpf_iter_detach_target_t detach_target;
-	bpf_iter_show_fdinfo_t show_fdinfo;
-	bpf_iter_fill_link_info_t fill_link_info;
-	u32 ctx_arg_info_size;
-	struct bpf_ctx_arg_aux ctx_arg_info[2];
-	const struct bpf_iter_seq_info *seq_info;
-};
-
-struct bpf_iter_meta {
-	union {
-		struct seq_file *seq;
-	};
-	u64 session_id;
-	u64 seq_num;
-};
-
-struct bpf_iter_target_info {
-	struct list_head list;
-	const struct bpf_iter_reg *reg_info;
-	u32 btf_id;
-};
-
-struct bpf_iter_link {
-	struct bpf_link link;
-	struct bpf_iter_aux_info aux;
-	struct bpf_iter_target_info *tinfo;
-};
-
-struct bpf_iter_priv_data {
-	struct bpf_iter_target_info *tinfo;
-	const struct bpf_iter_seq_info *seq_info;
-	struct bpf_prog *prog;
-	u64 session_id;
-	u64 seq_num;
-	bool done_stop;
-	long: 56;
-	u8 target_private[0];
-};
-
-struct bpf_iter_seq_map_info {
-	u32 map_id;
-};
-
-struct bpf_iter__bpf_map {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-};
-
-struct bpf_iter_seq_task_common {
-	struct pid_namespace *ns;
-};
-
-struct bpf_iter_seq_task_info {
-	struct bpf_iter_seq_task_common common;
-	u32 tid;
-};
-
-struct bpf_iter__task {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-};
-
-struct bpf_iter_seq_task_file_info {
-	struct bpf_iter_seq_task_common common;
-	struct task_struct *task;
-	struct files_struct *files;
-	u32 tid;
-	u32 fd;
-};
-
-struct bpf_iter__task_file {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-	u32 fd;
-	union {
-		struct file *file;
-	};
-};
-
-struct bpf_iter_seq_prog_info {
-	u32 prog_id;
-};
-
-struct bpf_iter__bpf_prog {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_prog *prog;
-	};
-};
-
 struct bpf_iter__bpf_map_elem {
 	union {
 		struct bpf_iter_meta *meta;
@@ -31005,6 +68693,8 @@
 	u32 n_buckets;
 	u32 elem_size;
 	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int *map_locked[8];
 	long: 64;
 	long: 64;
 	long: 64;
@@ -31041,75 +68731,18190 @@
 	u32 skip_elems;
 };
 
-struct bpf_iter_seq_array_map_info {
-	struct bpf_map *map;
-	void *percpu_value_buf;
-	u32 index;
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
 };
 
-struct prog_poke_elem {
-	struct list_head list;
-	struct bpf_prog_aux *aux;
-};
-
-enum bpf_lru_list_type {
-	BPF_LRU_LIST_T_ACTIVE = 0,
-	BPF_LRU_LIST_T_INACTIVE = 1,
-	BPF_LRU_LIST_T_FREE = 2,
-	BPF_LRU_LOCAL_LIST_T_FREE = 3,
-	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
-};
-
-struct bpf_lpm_trie_key {
-	__u32 prefixlen;
-	__u8 data[0];
-};
-
-struct lpm_trie_node {
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage *local_storage;
 	struct callback_head rcu;
-	struct lpm_trie_node *child[2];
-	u32 prefixlen;
-	u32 flags;
-	u8 data[0];
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct lpm_trie {
-	struct bpf_map map;
-	struct lpm_trie_node *root;
-	size_t n_entries;
-	size_t max_prefixlen;
-	size_t data_size;
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+};
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_MAX = 262144,
+};
+
+enum perf_event_read_format {
+	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
+	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
+	PERF_FORMAT_ID = 4,
+	PERF_FORMAT_GROUP = 8,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
+};
+
+enum perf_event_ioc_flags {
+	PERF_IOC_FLAG_GROUP = 1,
+};
+
+struct perf_ns_link_info {
+	__u64 dev;
+	__u64 ino;
+};
+
+enum {
+	NET_NS_INDEX = 0,
+	UTS_NS_INDEX = 1,
+	IPC_NS_INDEX = 2,
+	PID_NS_INDEX = 3,
+	USER_NS_INDEX = 4,
+	MNT_NS_INDEX = 5,
+	CGROUP_NS_INDEX = 6,
+	NR_NAMESPACES = 7,
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	long unsigned int offset;
+	long unsigned int size;
+	enum perf_addr_filter_action_t action;
+};
+
+struct swevent_hlist {
+	struct hlist_head heads[256];
+	struct callback_head callback_head;
+};
+
+struct pmu_event_list {
+	raw_spinlock_t lock;
+	struct list_head list;
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+};
+
+struct min_heap {
+	void *data;
+	int nr;
+	int size;
+};
+
+struct min_heap_callbacks {
+	int elem_size;
+	bool (*less)(const void *, const void *);
+	void (*swp)(void *, void *);
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+	struct task_struct *p;
+	remote_function_f func;
+	void *info;
+	int ret;
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct event_function_struct {
+	struct perf_event *event;
+	event_f func;
+	void *data;
+};
+
+enum event_type_t {
+	EVENT_FLEXIBLE = 1,
+	EVENT_PINNED = 2,
+	EVENT_TIME = 4,
+	EVENT_CPU = 8,
+	EVENT_ALL = 3,
+};
+
+struct __group_key {
+	int cpu;
+	struct cgroup *cgroup;
+};
+
+struct stop_event_data {
+	struct perf_event *event;
+	unsigned int restart;
+};
+
+struct perf_read_data {
+	struct perf_event *event;
+	bool group;
+	int ret;
+};
+
+struct perf_read_event {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct remote_output {
+	struct perf_buffer *rb;
+	int err;
+};
+
+struct perf_task_event {
+	struct task_struct *task;
+	struct perf_event_context *task_ctx;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 ppid;
+		u32 tid;
+		u32 ptid;
+		u64 time;
+	} event_id;
+};
+
+struct perf_comm_event {
+	struct task_struct *task;
+	char *comm;
+	int comm_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+	} event_id;
+};
+
+struct perf_namespaces_event {
+	struct task_struct *task;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 nr_namespaces;
+		struct perf_ns_link_info link_info[7];
+	} event_id;
+};
+
+struct perf_cgroup_event {
+	char *path;
+	int path_size;
+	struct {
+		struct perf_event_header header;
+		u64 id;
+		char path[0];
+	} event_id;
+};
+
+struct perf_mmap_event {
+	struct vm_area_struct *vma;
+	const char *file_name;
+	int file_size;
+	int maj;
+	int min;
+	u64 ino;
+	u64 ino_generation;
+	u32 prot;
+	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 start;
+		u64 len;
+		u64 pgoff;
+	} event_id;
+};
+
+struct perf_switch_event {
+	struct task_struct *task;
+	struct task_struct *next_prev;
+	struct {
+		struct perf_event_header header;
+		u32 next_prev_pid;
+		u32 next_prev_tid;
+	} event_id;
+};
+
+struct perf_ksymbol_event {
+	const char *name;
+	int name_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+		u32 len;
+		u16 ksym_type;
+		u16 flags;
+	} event_id;
+};
+
+struct perf_bpf_event {
+	struct bpf_prog *prog;
+	struct {
+		struct perf_event_header header;
+		u16 type;
+		u16 flags;
+		u32 id;
+		u8 tag[8];
+	} event_id;
+};
+
+struct perf_text_poke_event {
+	const void *old_bytes;
+	const void *new_bytes;
+	size_t pad;
+	u16 old_len;
+	u16 new_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+	} event_id;
+};
+
+struct swevent_htable {
+	struct swevent_hlist *swevent_hlist;
+	struct mutex hlist_mutex;
+	int hlist_refcount;
+	int recursion[4];
+};
+
+enum perf_probe_config {
+	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
+	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
+	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
+};
+
+enum {
+	IF_ACT_NONE = 4294967295,
+	IF_ACT_FILTER = 0,
+	IF_ACT_START = 1,
+	IF_ACT_STOP = 2,
+	IF_SRC_FILE = 3,
+	IF_SRC_KERNEL = 4,
+	IF_SRC_FILEADDR = 5,
+	IF_SRC_KERNELADDR = 6,
+};
+
+enum {
+	IF_STATE_ACTION = 0,
+	IF_STATE_SOURCE = 1,
+	IF_STATE_END = 2,
+};
+
+struct perf_aux_event {
+	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+struct perf_aux_event___3 {
+	struct perf_event_header header;
+	u64 offset;
+	u64 size;
+	u64 flags;
+};
+
+enum pageblock_bits {
+	PB_migrate = 0,
+	PB_migrate_end = 2,
+	PB_migrate_skip = 3,
+	NR_PAGEBLOCK_BITS = 4,
+};
+
+struct node {
+	struct device dev;
+	struct list_head access_list;
+	struct work_struct node_work;
+	struct list_head cache_attrs;
+	struct device *cache_dev;
+};
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int nr_scanned;
+	long unsigned int nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	long unsigned int nr_migrated;
+	long unsigned int nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, long unsigned int, long unsigned int, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, long unsigned int, long unsigned int, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	long unsigned int rb_subtree_last;
+};
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	long unsigned int pages;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	long unsigned int succeeded;
+	long unsigned int failed;
+	long unsigned int thp_succeeded;
+	long unsigned int thp_failed;
+	long unsigned int thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+struct folio_referenced_arg {
+	int mapcount;
+	int referenced;
+	long unsigned int vm_flags;
+	struct mem_cgroup *memcg;
+};
+
+struct make_exclusive_args {
+	struct mm_struct *mm;
+	long unsigned int address;
+	void *owner;
+	bool valid;
+};
+
+struct frontswap_ops {
+	void (*init)(unsigned int);
+	int (*store)(unsigned int, long unsigned int, struct page *);
+	int (*load)(unsigned int, long unsigned int, struct page *);
+	void (*invalidate_page)(unsigned int, long unsigned int);
+	void (*invalidate_area)(unsigned int);
+};
+
+typedef u64 p4dval_t;
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+typedef void (*kunit_try_catch_func_t)(void *);
+
+struct kunit_try_catch {
+	struct kunit *test;
+	struct completion *try_completion;
+	int try_result;
+	kunit_try_catch_func_t try;
+	kunit_try_catch_func_t catch;
+	void *context;
+};
+
+enum kunit_status {
+	KUNIT_SUCCESS = 0,
+	KUNIT_FAILURE = 1,
+	KUNIT_SKIPPED = 2,
+};
+
+struct kunit {
+	void *priv;
+	const char *name;
+	char *log;
+	struct kunit_try_catch try_catch;
+	const void *param_value;
+	int param_index;
 	spinlock_t lock;
+	enum kunit_status status;
+	struct list_head resources;
+	char status_comment[256];
+};
+
+struct kunit_case;
+
+struct kunit_suite {
+	const char name[256];
+	int (*suite_init)(struct kunit_suite *);
+	void (*suite_exit)(struct kunit_suite *);
+	int (*init)(struct kunit *);
+	void (*exit)(struct kunit *);
+	struct kunit_case *test_cases;
+	char status_comment[256];
+	struct dentry *debugfs;
+	char *log;
+	int suite_init_err;
+};
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+struct kunit_case {
+	void (*run_case)(struct kunit *);
+	const char *name;
+	const void * (*generate_params)(const void *, char *);
+	enum kunit_status status;
+	char *log;
+};
+
+struct kunit_resource;
+
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+struct kunit_resource {
+	void *data;
+	const char *name;
+	kunit_resource_free_t free;
+	struct kref refcount;
+	struct list_head node;
+	bool should_kfree;
+};
+
+typedef bool (*kunit_resource_match_t)(struct kunit *, struct kunit_resource *, void *);
+
+struct track {
+	long unsigned int addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	long unsigned int when;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+struct location {
+	depot_stack_handle_t handle;
+	long unsigned int count;
+	long unsigned int addr;
+	long long int sum_time;
+	long int min_time;
+	long int max_time;
+	long int min_pid;
+	long int max_pid;
+	long unsigned int cpus[64];
+	nodemask_t nodes;
+};
+
+struct loc_track {
+	long unsigned int max;
+	long unsigned int count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FULL = 2,
+	M_FREE = 3,
+	M_FULL_NOLIST = 4,
+};
+
+struct zpool;
+
+struct zpool_ops {
+	int (*evict)(struct zpool *, long unsigned int);
+};
+
+struct zpool_driver;
+
+struct zpool {
+	struct zpool_driver *driver;
+	void *pool;
+	const struct zpool_ops *ops;
+	bool evictable;
+	bool can_sleep_mapped;
+};
+
+enum zpool_mapmode {
+	ZPOOL_MM_RW = 0,
+	ZPOOL_MM_RO = 1,
+	ZPOOL_MM_WO = 2,
+	ZPOOL_MM_DEFAULT = 0,
+};
+
+struct zpool_driver {
+	char *type;
+	struct module *owner;
+	atomic_t refcount;
+	struct list_head list;
+	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
+	void (*destroy)(void *);
+	bool malloc_support_movable;
+	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
+	void (*free)(void *, long unsigned int);
+	int (*shrink)(void *, unsigned int, unsigned int *);
+	bool sleep_mapped;
+	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
+	void (*unmap)(void *, long unsigned int);
+	u64 (*total_size)(void *);
+};
+
+struct z3fold_pool;
+
+struct z3fold_ops {
+	int (*evict)(struct z3fold_pool *, long unsigned int);
+};
+
+struct z3fold_pool {
+	const char *name;
+	spinlock_t lock;
+	spinlock_t stale_lock;
+	struct list_head *unbuddied;
+	struct list_head lru;
+	struct list_head stale;
+	atomic64_t pages_nr;
+	struct kmem_cache *c_handle;
+	const struct z3fold_ops *ops;
+	struct zpool *zpool;
+	const struct zpool_ops *zpool_ops;
+	struct workqueue_struct *compact_wq;
+	struct workqueue_struct *release_wq;
+	struct work_struct work;
+};
+
+enum buddy {
+	HEADLESS = 0,
+	FIRST = 1,
+	MIDDLE = 2,
+	LAST = 3,
+	BUDDIES_MAX = 3,
+};
+
+struct z3fold_buddy_slots {
+	long unsigned int slot[4];
+	long unsigned int pool;
+	rwlock_t lock;
+};
+
+struct z3fold_header {
+	struct list_head buddy;
+	spinlock_t page_lock;
+	struct kref refcount;
+	struct work_struct work;
+	struct z3fold_buddy_slots *slots;
+	struct z3fold_pool *pool;
+	short int cpu;
+	short unsigned int first_chunks;
+	short unsigned int middle_chunks;
+	short unsigned int last_chunks;
+	short unsigned int start_middle;
+	short unsigned int first_num: 2;
+	short unsigned int mapped_count: 2;
+	short unsigned int foreign_handles: 2;
+};
+
+enum z3fold_page_flags {
+	PAGE_HEADLESS = 0,
+	MIDDLE_CHUNK_MAPPED = 1,
+	NEEDS_COMPACTING = 2,
+	PAGE_STALE = 3,
+	PAGE_CLAIMED = 4,
+	PAGE_MIGRATED = 5,
+};
+
+enum z3fold_handle_flags {
+	HANDLES_NOFREE = 0,
+};
+
+struct damon_sysfs_ul_range {
+	struct kobject kobj;
+	long unsigned int min;
+	long unsigned int max;
+};
+
+struct damon_sysfs_stats {
+	struct kobject kobj;
+	long unsigned int nr_tried;
+	long unsigned int sz_tried;
+	long unsigned int nr_applied;
+	long unsigned int sz_applied;
+	long unsigned int qt_exceeds;
+};
+
+struct damon_sysfs_watermarks {
+	struct kobject kobj;
+	enum damos_wmark_metric metric;
+	long unsigned int interval_us;
+	long unsigned int high;
+	long unsigned int mid;
+	long unsigned int low;
+};
+
+struct damon_sysfs_weights {
+	struct kobject kobj;
+	unsigned int sz;
+	unsigned int nr_accesses;
+	unsigned int age;
+};
+
+struct damon_sysfs_quotas {
+	struct kobject kobj;
+	struct damon_sysfs_weights *weights;
+	long unsigned int ms;
+	long unsigned int sz;
+	long unsigned int reset_interval_ms;
+};
+
+struct damon_sysfs_access_pattern {
+	struct kobject kobj;
+	struct damon_sysfs_ul_range *sz;
+	struct damon_sysfs_ul_range *nr_accesses;
+	struct damon_sysfs_ul_range *age;
+};
+
+struct damon_sysfs_scheme {
+	struct kobject kobj;
+	enum damos_action action;
+	struct damon_sysfs_access_pattern *access_pattern;
+	struct damon_sysfs_quotas *quotas;
+	struct damon_sysfs_watermarks *watermarks;
+	struct damon_sysfs_stats *stats;
+};
+
+struct damon_sysfs_schemes {
+	struct kobject kobj;
+	struct damon_sysfs_scheme **schemes_arr;
+	int nr;
+};
+
+struct damon_sysfs_region {
+	struct kobject kobj;
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct damon_sysfs_regions {
+	struct kobject kobj;
+	struct damon_sysfs_region **regions_arr;
+	int nr;
+};
+
+struct damon_sysfs_target {
+	struct kobject kobj;
+	struct damon_sysfs_regions *regions;
+	int pid;
+};
+
+struct damon_sysfs_targets {
+	struct kobject kobj;
+	struct damon_sysfs_target **targets_arr;
+	int nr;
+};
+
+struct damon_sysfs_intervals {
+	struct kobject kobj;
+	long unsigned int sample_us;
+	long unsigned int aggr_us;
+	long unsigned int update_us;
+};
+
+struct damon_sysfs_attrs {
+	struct kobject kobj;
+	struct damon_sysfs_intervals *intervals;
+	struct damon_sysfs_ul_range *nr_regions_range;
+};
+
+struct damon_sysfs_context {
+	struct kobject kobj;
+	enum damon_ops_id ops_id;
+	struct damon_sysfs_attrs *attrs;
+	struct damon_sysfs_targets *targets;
+	struct damon_sysfs_schemes *schemes;
+};
+
+struct damon_sysfs_contexts {
+	struct kobject kobj;
+	struct damon_sysfs_context **contexts_arr;
+	int nr;
+};
+
+struct damon_sysfs_kdamond {
+	struct kobject kobj;
+	struct damon_sysfs_contexts *contexts;
+	struct damon_ctx *damon_ctx;
+};
+
+enum damon_sysfs_cmd {
+	DAMON_SYSFS_CMD_ON = 0,
+	DAMON_SYSFS_CMD_OFF = 1,
+	DAMON_SYSFS_CMD_COMMIT = 2,
+	DAMON_SYSFS_CMD_UPDATE_SCHEMES_STATS = 3,
+	NR_DAMON_SYSFS_CMDS = 4,
+};
+
+struct damon_sysfs_cmd_request {
+	enum damon_sysfs_cmd cmd;
+	struct damon_sysfs_kdamond *kdamond;
+};
+
+struct damon_sysfs_kdamonds {
+	struct kobject kobj;
+	struct damon_sysfs_kdamond **kdamonds_arr;
+	int nr;
+};
+
+struct damon_sysfs_ui_dir {
+	struct kobject kobj;
+	struct damon_sysfs_kdamonds *kdamonds;
+};
+
+enum {
+	BAD_STACK = 4294967295,
+	NOT_STACK = 0,
+	GOOD_FRAME = 1,
+	GOOD_STACK = 2,
+};
+
+struct vmap_area {
+	long unsigned int va_start;
+	long unsigned int va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		long unsigned int subtree_max_size;
+		struct vm_struct *vm;
+	};
+};
+
+typedef s64 compat_loff_t;
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_PIPE = 3,
+	ITER_XARRAY = 4,
+	ITER_DISCARD = 5,
+	ITER_UBUF = 6,
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	short unsigned int d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	struct linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct compat_old_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_offset;
+	short unsigned int d_namlen;
+	char d_name[1];
+};
+
+struct compat_readdir_callback {
+	struct dir_context ctx;
+	struct compat_old_linux_dirent *dirent;
+	int result;
+};
+
+struct compat_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct compat_getdents_callback {
+	struct dir_context ctx;
+	struct compat_linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct tm {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	long int tm_year;
+	int tm_wday;
+	int tm_yday;
+};
+
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+};
+
+enum umount_tree_flags {
+	UMOUNT_SYNC = 1,
+	UMOUNT_PROPAGATE = 2,
+	UMOUNT_CONNECTED = 4,
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+	__kernel_daddr_t f_tfree;
+	long unsigned int f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+typedef s32 compat_daddr_t;
+
+typedef __kernel_fsid_t compat_fsid_t;
+
+struct compat_statfs {
+	int f_type;
+	int f_bsize;
+	int f_blocks;
+	int f_bfree;
+	int f_bavail;
+	int f_files;
+	int f_ffree;
+	compat_fsid_t f_fsid;
+	int f_namelen;
+	int f_frsize;
+	int f_flags;
+	int f_spare[4];
+};
+
+struct kstatfs {
+	long int f_type;
+	long int f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long int f_namelen;
+	long int f_frsize;
+	long int f_flags;
+	long int f_spare[4];
+};
+
+struct compat_ustat {
+	compat_daddr_t f_tfree;
+	compat_ino_t f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+struct statfs {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__kernel_long_t f_blocks;
+	__kernel_long_t f_bfree;
+	__kernel_long_t f_bavail;
+	__kernel_long_t f_files;
+	__kernel_long_t f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct statfs64 {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct compat_statfs64 {
+	__u32 f_type;
+	__u32 f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__u32 f_namelen;
+	__u32 f_frsize;
+	__u32 f_flags;
+	__u32 f_spare[4];
+} __attribute__((packed));
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
+
+struct mpage_readpage_args {
+	struct bio *bio;
+	struct folio *folio;
+	unsigned int nr_pages;
+	bool is_readahead;
+	sector_t last_block_in_bio;
+	struct buffer_head map_bh;
+	long unsigned int first_logical_block;
+	get_block_t *get_block;
+};
+
+struct mpage_data {
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	get_block_t *get_block;
+};
+
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		__u32 raw[0];
+	};
+};
+
+enum {
+	FAN_EVENT_INIT = 0,
+	FAN_EVENT_REPORTED = 1,
+	FAN_EVENT_ANSWERED = 2,
+	FAN_EVENT_CANCELED = 3,
+};
+
+struct fanotify_fh {
+	u8 type;
+	u8 len;
+	u8 flags;
+	u8 pad;
+	unsigned char buf[0];
+};
+
+struct fanotify_info {
+	u8 dir_fh_totlen;
+	u8 dir2_fh_totlen;
+	u8 file_fh_totlen;
+	u8 name_len;
+	u8 name2_len;
+	u8 pad[3];
+	unsigned char buf[0];
+};
+
+enum fanotify_event_type {
+	FANOTIFY_EVENT_TYPE_FID = 0,
+	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
+	FANOTIFY_EVENT_TYPE_PATH = 2,
+	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
+	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
+	FANOTIFY_EVENT_TYPE_FS_ERROR = 5,
+	__FANOTIFY_EVENT_TYPE_NUM = 6,
+};
+
+struct fanotify_event {
+	struct fsnotify_event fse;
+	struct hlist_node merge_list;
+	u32 mask;
+	struct {
+		unsigned int type: 3;
+		unsigned int hash: 29;
+	};
+	struct pid *pid;
+};
+
+struct fanotify_fid_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[12];
+	};
+};
+
+struct fanotify_name_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct fanotify_info info;
+};
+
+struct fanotify_error_event {
+	struct fanotify_event fae;
+	s32 error;
+	u32 err_count;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[128];
+	};
+};
+
+struct fanotify_path_event {
+	struct fanotify_event fae;
+	struct path path;
+};
+
+struct fanotify_perm_event {
+	struct fanotify_event fae;
+	struct path path;
+	short unsigned int response;
+	short unsigned int state;
+	int fd;
+};
+
+struct userfaultfd_ctx {
+	wait_queue_head_t fault_pending_wqh;
+	wait_queue_head_t fault_wqh;
+	wait_queue_head_t fd_wqh;
+	wait_queue_head_t event_wqh;
+	seqcount_spinlock_t refile_seq;
+	refcount_t refcount;
+	unsigned int flags;
+	unsigned int features;
+	bool released;
+	atomic_t mmap_changing;
+	struct mm_struct *mm;
+};
+
+struct uffd_msg {
+	__u8 event;
+	__u8 reserved1;
+	__u16 reserved2;
+	__u32 reserved3;
+	union {
+		struct {
+			__u64 flags;
+			__u64 address;
+			union {
+				__u32 ptid;
+			} feat;
+		} pagefault;
+		struct {
+			__u32 ufd;
+		} fork;
+		struct {
+			__u64 from;
+			__u64 to;
+			__u64 len;
+		} remap;
+		struct {
+			__u64 start;
+			__u64 end;
+		} remove;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+			__u64 reserved3;
+		} reserved;
+	} arg;
+};
+
+struct uffdio_api {
+	__u64 api;
+	__u64 features;
+	__u64 ioctls;
+};
+
+struct uffdio_range {
+	__u64 start;
+	__u64 len;
+};
+
+struct uffdio_register {
+	struct uffdio_range range;
+	__u64 mode;
+	__u64 ioctls;
+};
+
+struct uffdio_copy {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 copy;
+};
+
+struct uffdio_zeropage {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 zeropage;
+};
+
+struct uffdio_writeprotect {
+	struct uffdio_range range;
+	__u64 mode;
+};
+
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
+struct userfaultfd_fork_ctx {
+	struct userfaultfd_ctx *orig;
+	struct userfaultfd_ctx *new;
+	struct list_head list;
+};
+
+struct userfaultfd_unmap_ctx {
+	struct userfaultfd_ctx *ctx;
+	long unsigned int start;
+	long unsigned int end;
+	struct list_head list;
+};
+
+struct userfaultfd_wait_queue {
+	struct uffd_msg msg;
+	wait_queue_entry_t wq;
+	struct userfaultfd_ctx *ctx;
+	bool waken;
+};
+
+struct userfaultfd_wake_range {
+	long unsigned int start;
+	long unsigned int len;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	short unsigned int datalen;
+	long: 48;
+	char data[0];
+};
+
+struct fscrypt_blk_crypto_key;
+
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+	struct fscrypt_blk_crypto_key *blk_key;
+};
+
+struct fscrypt_mode;
+
+struct fscrypt_master_key;
+
+struct fscrypt_direct_key;
+
+struct fscrypt_info {
+	struct fscrypt_prepared_key ci_enc_key;
+	bool ci_owns_key;
+	bool ci_inlinecrypt;
+	struct fscrypt_mode *ci_mode;
+	struct inode *ci_inode;
+	struct fscrypt_master_key *ci_master_key;
+	struct list_head ci_master_key_link;
+	struct fscrypt_direct_key *ci_direct_key;
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+	union fscrypt_policy ci_policy;
+	u8 ci_nonce[16];
+	u32 ci_hashed_ino;
+};
+
+struct fscrypt_key {
+	__u32 mode;
+	__u8 raw[64];
+	__u32 size;
+};
+
+struct fscrypt_key_specifier {
+	__u32 type;
+	__u32 __reserved;
+	union {
+		__u8 __reserved[32];
+		__u8 descriptor[8];
+		__u8 identifier[16];
+	} u;
+};
+
+struct fscrypt_mode {
+	const char *friendly_name;
+	const char *cipher_str;
+	int keysize;
+	int security_strength;
+	int ivsize;
+	int logged_cryptoapi_impl;
+	int logged_blk_crypto_native;
+	int logged_blk_crypto_fallback;
+	enum blk_crypto_mode_num blk_crypto_mode;
+};
+
+struct fscrypt_hkdf {
+	struct crypto_shash *hmac_tfm;
+};
+
+struct fscrypt_master_key_secret {
+	struct fscrypt_hkdf hkdf;
+	u32 size;
+	u8 raw[64];
+};
+
+struct fscrypt_master_key {
+	struct super_block *mk_sb;
+	struct hlist_node mk_node;
+	struct rw_semaphore mk_sem;
+	refcount_t mk_active_refs;
+	refcount_t mk_struct_refs;
+	struct callback_head mk_rcu_head;
+	struct fscrypt_master_key_secret mk_secret;
+	struct fscrypt_key_specifier mk_spec;
+	struct key *mk_users;
+	struct list_head mk_decrypted_inodes;
+	spinlock_t mk_decrypted_inodes_lock;
+	struct fscrypt_prepared_key mk_direct_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[11];
+	siphash_key_t mk_ino_hash_key;
+	bool mk_ino_hash_key_initialized;
+};
+
+struct fscrypt_direct_key {
+	struct hlist_node dk_node;
+	refcount_t dk_refcount;
+	const struct fscrypt_mode *dk_mode;
+	struct fscrypt_prepared_key dk_key;
+	u8 dk_descriptor[8];
+	u8 dk_raw[64];
+};
+
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
+struct mb_cache_entry {
+	struct list_head e_list;
+	struct hlist_bl_node e_hash_list;
+	atomic_t e_refcnt;
+	u32 e_key;
+	u32 e_referenced: 1;
+	u32 e_reusable: 1;
+	u64 e_value;
+};
+
+struct mb_cache {
+	struct hlist_bl_head *c_hash;
+	int c_bucket_bits;
+	long unsigned int c_max_entries;
+	spinlock_t c_list_lock;
+	struct list_head c_list;
+	long unsigned int c_entry_count;
+	struct shrinker c_shrink;
+	struct work_struct c_shrink_work;
+};
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct proc_fs_context {
+	struct pid_namespace *pid_ns;
+	unsigned int mask;
+	enum proc_hidepid hidepid;
+	int gid;
+	enum proc_pidonly pidonly;
+};
+
+enum proc_param {
+	Opt_gid = 0,
+	Opt_hidepid = 1,
+	Opt_subset = 2,
+};
+
+struct vmcore {
+	struct list_head list;
+	long long unsigned int paddr;
+	long long unsigned int size;
+	loff_t offset;
+};
+
+struct vmcoredd_node {
+	struct list_head list;
+	void *buf;
+	unsigned int size;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
+};
+
+typedef struct elf64_note Elf64_Nhdr;
+
+struct vmcoredd_header {
+	__u32 n_namesz;
+	__u32 n_descsz;
+	__u32 n_type;
+	__u8 name[8];
+	__u8 dump_name[44];
+};
+
+struct vmcore_cb {
+	bool (*pfn_is_ram)(struct vmcore_cb *, long unsigned int);
+	struct list_head next;
+};
+
+struct vmcoredd_data {
+	char dump_name[44];
+	unsigned int size;
+	int (*vmcoredd_callback)(struct vmcoredd_data *, void *);
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+};
+
+struct kernfs_syscall_ops;
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+};
+
+enum {
+	ES_WRITTEN_B = 0,
+	ES_UNWRITTEN_B = 1,
+	ES_DELAYED_B = 2,
+	ES_HOLE_B = 3,
+	ES_REFERENCED_B = 4,
+	ES_FLAGS = 5,
+};
+
+struct pending_reservation {
+	struct rb_node rb_node;
+	ext4_lblk_t lclu;
+};
+
+enum {
+	EXT4_STATE_JDATA = 0,
+	EXT4_STATE_NEW = 1,
+	EXT4_STATE_XATTR = 2,
+	EXT4_STATE_NO_EXPAND = 3,
+	EXT4_STATE_DA_ALLOC_CLOSE = 4,
+	EXT4_STATE_EXT_MIGRATE = 5,
+	EXT4_STATE_NEWENTRY = 6,
+	EXT4_STATE_MAY_INLINE_DATA = 7,
+	EXT4_STATE_EXT_PRECACHED = 8,
+	EXT4_STATE_LUSTRE_EA_INODE = 9,
+	EXT4_STATE_VERITY_IN_PROGRESS = 10,
+	EXT4_STATE_FC_COMMITTING = 11,
+	EXT4_STATE_ORPHAN_FILE = 12,
+};
+
+struct rsvd_count {
+	int ndelonly;
+	bool first_do_lblk_found;
+	ext4_lblk_t first_do_lblk;
+	ext4_lblk_t last_do_lblk;
+	struct extent_status *left_es;
+	bool partial;
+	ext4_lblk_t lclu;
+};
+
+struct ext4_inode {
+	__le16 i_mode;
+	__le16 i_uid;
+	__le32 i_size_lo;
+	__le32 i_atime;
+	__le32 i_ctime;
+	__le32 i_mtime;
+	__le32 i_dtime;
+	__le16 i_gid;
+	__le16 i_links_count;
+	__le32 i_blocks_lo;
+	__le32 i_flags;
+	union {
+		struct {
+			__le32 l_i_version;
+		} linux1;
+		struct {
+			__u32 h_i_translator;
+		} hurd1;
+		struct {
+			__u32 m_i_reserved1;
+		} masix1;
+	} osd1;
+	__le32 i_block[15];
+	__le32 i_generation;
+	__le32 i_file_acl_lo;
+	__le32 i_size_high;
+	__le32 i_obso_faddr;
+	union {
+		struct {
+			__le16 l_i_blocks_high;
+			__le16 l_i_file_acl_high;
+			__le16 l_i_uid_high;
+			__le16 l_i_gid_high;
+			__le16 l_i_checksum_lo;
+			__le16 l_i_reserved;
+		} linux2;
+		struct {
+			__le16 h_i_reserved1;
+			__u16 h_i_mode_high;
+			__u16 h_i_uid_high;
+			__u16 h_i_gid_high;
+			__u32 h_i_author;
+		} hurd2;
+		struct {
+			__le16 h_i_reserved1;
+			__le16 m_i_file_acl_high;
+			__u32 m_i_reserved2[2];
+		} masix2;
+	} osd2;
+	__le16 i_extra_isize;
+	__le16 i_checksum_hi;
+	__le32 i_ctime_extra;
+	__le32 i_mtime_extra;
+	__le32 i_atime_extra;
+	__le32 i_crtime;
+	__le32 i_crtime_extra;
+	__le32 i_version_hi;
+	__le32 i_projid;
+};
+
+struct ext4_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	struct dx_hash_info hinfo;
+	struct fscrypt_str crypto_buf;
+	struct fscrypt_str cf_name;
+};
+
+struct ext4_iloc {
+	struct buffer_head *bh;
+	long unsigned int offset;
+	ext4_group_t block_group;
+};
+
+struct ext4_xattr_ibody_header {
+	__le32 h_magic;
+};
+
+struct ext4_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_inum;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct ext4_xattr_info {
+	const char *name;
+	const void *value;
+	size_t value_len;
+	int name_index;
+	int in_inode;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
+struct ext4_io_end_vec {
+	struct list_head list;
+	loff_t offset;
+	ssize_t size;
+};
+
+struct ext4_io_end {
+	struct list_head list;
+	handle_t *handle;
+	struct inode *inode;
+	struct bio *bio;
+	unsigned int flag;
+	refcount_t count;
+	struct list_head list_vec;
+};
+
+typedef struct ext4_io_end ext4_io_end_t;
+
+struct ext4_io_submit {
+	struct writeback_control *io_wbc;
+	struct bio *io_bio;
+	ext4_io_end_t *io_end;
+	sector_t io_next_block;
+};
+
+enum {
+	attr_noop = 0,
+	attr_delayed_allocation_blocks = 1,
+	attr_session_write_kbytes = 2,
+	attr_lifetime_write_kbytes = 3,
+	attr_reserved_clusters = 4,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
+};
+
+enum {
+	ptr_explicit = 0,
+	ptr_ext4_sb_info_offset = 1,
+	ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_attr {
+	struct attribute attr;
+	short int attr_id;
+	short int attr_ptr;
+	short unsigned int attr_size;
+	union {
+		int offset;
+		void *explicit_ptr;
+	} u;
+};
+
+struct xattr;
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+struct autofs_packet_missing {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+struct autofs_packet_expire_multi {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+union autofs_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_packet_missing missing;
+	struct autofs_packet_expire expire;
+	struct autofs_packet_expire_multi expire_multi;
+};
+
+struct autofs_v5_packet {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	__u32 dev;
+	__u64 ino;
+	__u32 uid;
+	__u32 gid;
+	__u32 pid;
+	__u32 tgid;
+	__u32 len;
+	char name[256];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_v5_packet v5_packet;
+	autofs_packet_missing_indirect_t missing_indirect;
+	autofs_packet_expire_indirect_t expire_indirect;
+	autofs_packet_missing_direct_t missing_direct;
+	autofs_packet_expire_direct_t expire_direct;
+};
+
+enum btrfs_inline_ref_type {
+	BTRFS_REF_TYPE_INVALID = 0,
+	BTRFS_REF_TYPE_BLOCK = 1,
+	BTRFS_REF_TYPE_DATA = 2,
+	BTRFS_REF_TYPE_ANY = 3,
+};
+
+struct btrfs_delayed_tree_ref {
+	struct btrfs_delayed_ref_node node;
+	u64 root;
+	u64 parent;
+	int level;
+};
+
+struct btrfs_delayed_data_ref {
+	struct btrfs_delayed_ref_node node;
+	u64 root;
+	u64 parent;
+	u64 objectid;
+	u64 offset;
+};
+
+struct btrfs_discard_stripe {
+	struct btrfs_device *dev;
+	u64 physical;
+	u64 length;
+};
+
+enum btrfs_loop_type {
+	LOOP_CACHING_NOWAIT = 0,
+	LOOP_CACHING_WAIT = 1,
+	LOOP_ALLOC_CHUNK = 2,
+	LOOP_NO_EMPTY_SIZE = 3,
+};
+
+enum btrfs_extent_allocation_policy {
+	BTRFS_EXTENT_ALLOC_CLUSTERED = 0,
+	BTRFS_EXTENT_ALLOC_ZONED = 1,
+};
+
+struct find_free_extent_ctl {
+	u64 ram_bytes;
+	u64 num_bytes;
+	u64 min_alloc_size;
+	u64 empty_size;
+	u64 flags;
+	int delalloc;
+	u64 search_start;
+	u64 empty_cluster;
+	struct btrfs_free_cluster *last_ptr;
+	bool use_cluster;
+	bool have_caching_bg;
+	bool orig_have_caching_bg;
+	bool for_treelog;
+	bool for_data_reloc;
+	int index;
+	int loop;
+	bool retry_clustered;
+	bool retry_unclustered;
+	int cached;
+	u64 max_extent_size;
+	u64 total_free_space;
+	u64 found_offset;
+	u64 hint_byte;
+	enum btrfs_extent_allocation_policy policy;
+};
+
+struct walk_control___2 {
+	u64 refs[8];
+	u64 flags[8];
+	struct btrfs_key update_progress;
+	struct btrfs_key drop_progress;
+	short: 16;
+	int drop_level;
+	int stage;
+	int level;
+	int shared_level;
+	int update_ref;
+	int keep_locks;
+	int reada_slot;
+	int reada_count;
+	int restarted;
+} __attribute__((packed));
+
+enum btrfs_feature_set {
+	FEAT_COMPAT = 0,
+	FEAT_COMPAT_RO = 1,
+	FEAT_INCOMPAT = 2,
+	FEAT_MAX = 3,
+};
+
+struct btrfs_qgroup_rsv {
+	u64 values[3];
+};
+
+struct btrfs_qgroup {
+	u64 qgroupid;
+	u64 rfer;
+	u64 rfer_cmpr;
+	u64 excl;
+	u64 excl_cmpr;
+	u64 lim_flags;
+	u64 max_rfer;
+	u64 max_excl;
+	u64 rsv_rfer;
+	u64 rsv_excl;
+	struct btrfs_qgroup_rsv rsv;
+	struct list_head groups;
+	struct list_head members;
+	struct list_head dirty;
+	struct rb_node node;
+	u64 old_refcnt;
+	u64 new_refcnt;
+	struct kobject kobj;
+};
+
+struct btrfs_feature_attr {
+	struct kobj_attribute kobj_attr;
+	enum btrfs_feature_set feature_set;
+	u64 feature_bit;
+};
+
+struct raid_kobject {
+	u64 flags;
+	struct kobject kobj;
+};
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct btrfs_ioctl_vol_args {
+	__s64 fd;
+	char name[4088];
+};
+
+struct btrfs_ioctl_qgroup_limit_args {
+	__u64 qgroupid;
+	struct btrfs_qgroup_limit lim;
+};
+
+struct btrfs_ioctl_vol_args_v2 {
+	__s64 fd;
+	__u64 transid;
+	__u64 flags;
+	union {
+		struct {
+			__u64 size;
+			struct btrfs_qgroup_inherit *qgroup_inherit;
+		};
+		__u64 unused[4];
+	};
+	union {
+		char name[4040];
+		__u64 devid;
+		__u64 subvolid;
+	};
+};
+
+struct btrfs_ioctl_scrub_args {
+	__u64 devid;
+	__u64 start;
+	__u64 end;
+	__u64 flags;
+	struct btrfs_scrub_progress progress;
+	__u64 unused[109];
+};
+
+struct btrfs_ioctl_dev_replace_start_params {
+	__u64 srcdevid;
+	__u64 cont_reading_from_srcdev_mode;
+	__u8 srcdev_name[1025];
+	__u8 tgtdev_name[1025];
+};
+
+struct btrfs_ioctl_dev_replace_status_params {
+	__u64 replace_state;
+	__u64 progress_1000;
+	__u64 time_started;
+	__u64 time_stopped;
+	__u64 num_write_errors;
+	__u64 num_uncorrectable_read_errors;
+};
+
+struct btrfs_ioctl_dev_replace_args {
+	__u64 cmd;
+	__u64 result;
+	union {
+		struct btrfs_ioctl_dev_replace_start_params start;
+		struct btrfs_ioctl_dev_replace_status_params status;
+	};
+	__u64 spare[64];
+};
+
+struct btrfs_ioctl_dev_info_args {
+	__u64 devid;
+	__u8 uuid[16];
+	__u64 bytes_used;
+	__u64 total_bytes;
+	__u64 unused[379];
+	__u8 path[1024];
+};
+
+struct btrfs_ioctl_fs_info_args {
+	__u64 max_id;
+	__u64 num_devices;
+	__u8 fsid[16];
+	__u32 nodesize;
+	__u32 sectorsize;
+	__u32 clone_alignment;
+	__u16 csum_type;
+	__u16 csum_size;
+	__u64 flags;
+	__u64 generation;
+	__u8 metadata_uuid[16];
+	__u8 reserved[944];
+};
+
+struct btrfs_ioctl_feature_flags {
+	__u64 compat_flags;
+	__u64 compat_ro_flags;
+	__u64 incompat_flags;
+};
+
+struct btrfs_ioctl_balance_args {
+	__u64 flags;
+	__u64 state;
+	struct btrfs_balance_args data;
+	struct btrfs_balance_args meta;
+	struct btrfs_balance_args sys;
+	struct btrfs_balance_progress stat;
+	__u64 unused[72];
+};
+
+struct btrfs_ioctl_ino_lookup_args {
+	__u64 treeid;
+	__u64 objectid;
+	char name[4080];
+};
+
+struct btrfs_ioctl_ino_lookup_user_args {
+	__u64 dirid;
+	__u64 treeid;
+	char name[256];
+	char path[3824];
+};
+
+struct btrfs_ioctl_search_key {
+	__u64 tree_id;
+	__u64 min_objectid;
+	__u64 max_objectid;
+	__u64 min_offset;
+	__u64 max_offset;
+	__u64 min_transid;
+	__u64 max_transid;
+	__u32 min_type;
+	__u32 max_type;
+	__u32 nr_items;
+	__u32 unused;
+	__u64 unused1;
+	__u64 unused2;
+	__u64 unused3;
+	__u64 unused4;
+};
+
+struct btrfs_ioctl_search_header {
+	__u64 transid;
+	__u64 objectid;
+	__u64 offset;
+	__u32 type;
+	__u32 len;
+};
+
+struct btrfs_ioctl_search_args {
+	struct btrfs_ioctl_search_key key;
+	char buf[3992];
+};
+
+struct btrfs_ioctl_search_args_v2 {
+	struct btrfs_ioctl_search_key key;
+	__u64 buf_size;
+	__u64 buf[0];
+};
+
+struct btrfs_ioctl_defrag_range_args {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+	__u32 extent_thresh;
+	__u32 compress_type;
+	__u32 unused[4];
+};
+
+struct btrfs_ioctl_space_info {
+	__u64 flags;
+	__u64 total_bytes;
+	__u64 used_bytes;
+};
+
+struct btrfs_ioctl_space_args {
+	__u64 space_slots;
+	__u64 total_spaces;
+	struct btrfs_ioctl_space_info spaces[0];
+};
+
+struct btrfs_data_container {
+	__u32 bytes_left;
+	__u32 bytes_missing;
+	__u32 elem_cnt;
+	__u32 elem_missed;
+	__u64 val[0];
+};
+
+struct btrfs_ioctl_ino_path_args {
+	__u64 inum;
+	__u64 size;
+	__u64 reserved[4];
+	__u64 fspath;
+};
+
+struct btrfs_ioctl_logical_ino_args {
+	__u64 logical;
+	__u64 size;
+	__u64 reserved[3];
+	__u64 flags;
+	__u64 inodes;
+};
+
+struct btrfs_ioctl_get_dev_stats {
+	__u64 devid;
+	__u64 nr_items;
+	__u64 flags;
+	__u64 values[5];
+	__u64 unused[121];
+};
+
+struct btrfs_ioctl_quota_ctl_args {
+	__u64 cmd;
+	__u64 status;
+};
+
+struct btrfs_ioctl_quota_rescan_args {
+	__u64 flags;
+	__u64 progress;
+	__u64 reserved[6];
+};
+
+struct btrfs_ioctl_qgroup_assign_args {
+	__u64 assign;
+	__u64 src;
+	__u64 dst;
+};
+
+struct btrfs_ioctl_qgroup_create_args {
+	__u64 create;
+	__u64 qgroupid;
+};
+
+struct btrfs_ioctl_timespec {
+	__u64 sec;
+	__u32 nsec;
+};
+
+struct btrfs_ioctl_received_subvol_args {
+	char uuid[16];
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec stime;
+	struct btrfs_ioctl_timespec rtime;
+	__u64 flags;
+	__u64 reserved[16];
+};
+
+struct btrfs_ioctl_get_subvol_info_args {
+	__u64 treeid;
+	char name[256];
+	__u64 parent_id;
+	__u64 dirid;
+	__u64 generation;
+	__u64 flags;
+	__u8 uuid[16];
+	__u8 parent_uuid[16];
+	__u8 received_uuid[16];
+	__u64 ctransid;
+	__u64 otransid;
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec ctime;
+	struct btrfs_ioctl_timespec otime;
+	struct btrfs_ioctl_timespec stime;
+	struct btrfs_ioctl_timespec rtime;
+	__u64 reserved[8];
+};
+
+struct btrfs_ioctl_get_subvol_rootref_args {
+	__u64 min_treeid;
+	struct {
+		__u64 treeid;
+		__u64 dirid;
+	} rootref[255];
+	__u8 num_items;
+	__u8 align[7];
+};
+
+struct btrfs_ioctl_encoded_io_args {
+	const struct iovec *iov;
+	long unsigned int iovcnt;
+	__s64 offset;
+	__u64 flags;
+	__u64 len;
+	__u64 unencoded_len;
+	__u64 unencoded_offset;
+	__u32 compression;
+	__u32 encryption;
+	__u8 reserved[64];
+};
+
+enum btrfs_err_code {
+	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
+	BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET = 2,
+	BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET = 3,
+	BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET = 4,
+	BTRFS_ERROR_DEV_TGT_REPLACE = 5,
+	BTRFS_ERROR_DEV_MISSING_NOT_FOUND = 6,
+	BTRFS_ERROR_DEV_ONLY_WRITABLE = 7,
+	BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS = 8,
+	BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET = 9,
+	BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET = 10,
+};
+
+struct btrfs_new_inode_args {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool orphan;
+	bool subvol;
+	struct posix_acl *default_acl;
+	struct posix_acl *acl;
+};
+
+struct btrfs_dev_lookup_args {
+	u64 devid;
+	u8 *uuid;
+	u8 *fsid;
+	bool missing;
+};
+
+struct inode_fs_paths {
+	struct btrfs_path *btrfs_path;
+	struct btrfs_root *fs_root;
+	struct btrfs_data_container *fspath;
+};
+
+struct btrfs_ioctl_timespec_32 {
+	__u64 sec;
+	__u32 nsec;
+} __attribute__((packed));
+
+struct btrfs_ioctl_received_subvol_args_32 {
+	char uuid[16];
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec_32 stime;
+	struct btrfs_ioctl_timespec_32 rtime;
+	__u64 flags;
+	__u64 reserved[16];
+} __attribute__((packed));
+
+struct btrfs_ioctl_send_args_32 {
+	__s64 send_fd;
+	__u64 clone_sources_count;
+	compat_uptr_t clone_sources;
+	__u64 parent_root;
+	__u64 flags;
+	__u32 version;
+	__u8 reserved[28];
+} __attribute__((packed));
+
+struct btrfs_ioctl_encoded_io_args_32 {
+	compat_uptr_t iov;
+	compat_ulong_t iovcnt;
+	__s64 offset;
+	__u64 flags;
+	__u64 len;
+	__u64 unencoded_len;
+	__u64 unencoded_offset;
+	__u32 compression;
+	__u32 encryption;
+	__u8 reserved[64];
+};
+
+struct defrag_target_range {
+	struct list_head list;
+	u64 start;
+	u64 len;
+};
+
+struct btrfs_delayed_item {
+	struct rb_node rb_node;
+	struct btrfs_key key;
+	struct list_head tree_list;
+	struct list_head readdir_list;
+	u64 bytes_reserved;
+	struct btrfs_delayed_node *delayed_node;
+	refcount_t refs;
+	int ins_or_del;
+	u32 data_len;
+	char data[0];
+};
+
+struct btrfs_async_delayed_work {
+	struct btrfs_delayed_root *delayed_root;
+	int nr;
+	struct btrfs_work work;
+};
+
+struct prop_handler {
+	struct hlist_node node;
+	const char *xattr_name;
+	int (*validate)(const struct btrfs_inode *, const char *, size_t);
+	int (*apply)(struct inode *, const char *, size_t);
+	const char * (*extract)(struct inode *);
+	bool (*ignore)(const struct btrfs_inode *);
+	int inheritable;
+};
+
+struct btrfs_replace_extent_info {
+	u64 disk_offset;
+	u64 disk_len;
+	u64 data_offset;
+	u64 data_len;
+	u64 file_offset;
+	char *extent_buf;
+	bool is_new_extent;
+	bool update_times;
+	int qgroup_reserved;
+	int insertions;
+};
+
+typedef unsigned int __kernel_mode_t;
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+typedef short unsigned int ushort;
+
+typedef u16 __compat_uid_t;
+
+typedef u16 __compat_gid_t;
+
+typedef s32 compat_key_t;
+
+typedef u32 __compat_gid32_t;
+
+struct compat_ipc64_perm {
+	compat_key_t key;
+	__compat_uid32_t uid;
+	__compat_gid32_t gid;
+	__compat_uid32_t cuid;
+	__compat_gid32_t cgid;
+	compat_mode_t mode;
+	unsigned char __pad1[2];
+	compat_ushort_t seq;
+	compat_ushort_t __pad2;
+	compat_ulong_t unused1;
+	compat_ulong_t unused2;
+};
+
+struct compat_semid64_ds {
+	struct compat_ipc64_perm sem_perm;
+	compat_ulong_t sem_otime;
+	compat_ulong_t sem_otime_high;
+	compat_ulong_t sem_ctime;
+	compat_ulong_t sem_ctime_high;
+	compat_ulong_t sem_nsems;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct ipc_perm {
+	__kernel_key_t key;
+	__kernel_uid_t uid;
+	__kernel_gid_t gid;
+	__kernel_uid_t cuid;
+	__kernel_gid_t cgid;
+	__kernel_mode_t mode;
+	short unsigned int seq;
+};
+
+struct ipc64_perm {
+	__kernel_key_t key;
+	__kernel_uid32_t uid;
+	__kernel_gid32_t gid;
+	__kernel_uid32_t cuid;
+	__kernel_gid32_t cgid;
+	__kernel_mode_t mode;
+	unsigned char __pad1[0];
+	short unsigned int seq;
+	short unsigned int __pad2;
+	__kernel_ulong_t __unused1;
+	__kernel_ulong_t __unused2;
+};
+
+struct sem;
+
+struct sem_queue;
+
+struct sem_undo;
+
+struct semid_ds {
+	struct ipc_perm sem_perm;
+	__kernel_old_time_t sem_otime;
+	__kernel_old_time_t sem_ctime;
+	struct sem *sem_base;
+	struct sem_queue *sem_pending;
+	struct sem_queue **sem_pending_last;
+	struct sem_undo *undo;
+	short unsigned int sem_nsems;
+};
+
+struct sem {
+	int semval;
+	struct pid *sempid;
+	spinlock_t lock;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	time64_t sem_otime;
+};
+
+struct sem_queue {
+	struct list_head list;
+	struct task_struct *sleeper;
+	struct sem_undo *undo;
+	struct pid *pid;
+	int status;
+	struct sembuf *sops;
+	struct sembuf *blocking;
+	int nsops;
+	bool alter;
+	bool dupsop;
+};
+
+struct sem_undo {
+	struct list_head list_proc;
+	struct callback_head rcu;
+	struct sem_undo_list *ulp;
+	struct list_head list_id;
+	int semid;
+	short int *semadj;
+};
+
+struct semid64_ds {
+	struct ipc64_perm sem_perm;
+	long int sem_otime;
+	long int sem_ctime;
+	long unsigned int sem_nsems;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct seminfo {
+	int semmap;
+	int semmni;
+	int semmns;
+	int semmnu;
+	int semmsl;
+	int semopm;
+	int semume;
+	int semusz;
+	int semvmx;
+	int semaem;
+};
+
+struct sem_undo_list {
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct list_head list_proc;
+};
+
+struct ipc_params {
+	key_t key;
+	int flg;
+	union {
+		size_t size;
+		int nsems;
+	} u;
+};
+
+struct ipc_ops {
+	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
+	int (*associate)(struct kern_ipc_perm *, int);
+	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+};
+
+struct compat_ipc_perm {
+	key_t key;
+	__compat_uid_t uid;
+	__compat_gid_t gid;
+	__compat_uid_t cuid;
+	__compat_gid_t cgid;
+	compat_mode_t mode;
+	short unsigned int seq;
+};
+
+struct sem_array {
+	struct kern_ipc_perm sem_perm;
+	time64_t sem_ctime;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	struct list_head list_id;
+	int sem_nsems;
+	int complex_count;
+	unsigned int use_global_lock;
 	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sem sems[0];
 };
 
-struct bpf_cgroup_storage_map {
-	struct bpf_map map;
+struct compat_semid_ds {
+	struct compat_ipc_perm sem_perm;
+	old_time32_t sem_otime;
+	old_time32_t sem_ctime;
+	compat_uptr_t sem_base;
+	compat_uptr_t sem_pending;
+	compat_uptr_t sem_pending_last;
+	compat_uptr_t undo;
+	short unsigned int sem_nsems;
+};
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+struct watch;
+
+struct watch_list {
+	struct callback_head rcu;
+	struct hlist_head watchers;
+	void (*release_watch)(struct watch *);
 	spinlock_t lock;
-	struct rb_root root;
+};
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+enum watch_notification_type {
+	WATCH_TYPE_META = 0,
+	WATCH_TYPE_KEY_NOTIFY = 1,
+	WATCH_TYPE__NR = 2,
+};
+
+struct watch_type_filter {
+	enum watch_notification_type type;
+	__u32 subtype_filter[1];
+	__u32 info_filter;
+	__u32 info_mask;
+};
+
+struct watch_filter {
+	union {
+		struct callback_head rcu;
+		long unsigned int type_filter[1];
+	};
+	u32 nr_filters;
+	struct watch_type_filter filters[0];
+};
+
+struct watch_queue {
+	struct callback_head rcu;
+	struct watch_filter *filter;
+	struct pipe_inode_info *pipe;
+	struct hlist_head watches;
+	struct page **notes;
+	long unsigned int *notes_bitmap;
+	struct kref usage;
+	spinlock_t lock;
+	unsigned int nr_notes;
+	unsigned int nr_pages;
+	bool defunct;
+};
+
+struct watch {
+	union {
+		struct callback_head rcu;
+		u32 info_id;
+	};
+	struct watch_queue *queue;
+	struct hlist_node queue_node;
+	struct watch_list *watch_list;
+	struct hlist_node list_node;
+	const struct cred *cred;
+	void *private;
+	u64 id;
+	struct kref usage;
+};
+
+struct keyctl_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+	__u32 __spare[10];
+};
+
+struct keyctl_pkey_params {
+	__s32 key_id;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	__u32 __spare[7];
+};
+
+enum {
+	Opt_err___2 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
+};
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+struct netif_security_struct {
+	struct net *ns;
+	int ifindex;
+	u32 sid;
+};
+
+struct sel_netif {
 	struct list_head list;
+	struct netif_security_struct nsec;
+	struct callback_head callback_head;
+};
+
+struct netlbl_lsm_cache {
+	refcount_t refcount;
+	void (*free)(const void *);
+	void *data;
+};
+
+struct netlbl_lsm_catmap {
+	u32 startbit;
+	u64 bitmap[4];
+	struct netlbl_lsm_catmap *next;
+};
+
+struct netlbl_lsm_secattr {
+	u32 flags;
+	u32 type;
+	char *domain;
+	struct netlbl_lsm_cache *cache;
+	struct {
+		struct {
+			struct netlbl_lsm_catmap *cat;
+			u32 lvl;
+		} mls;
+		u32 secid;
+	} attr;
+};
+
+enum sctp_endpoint_type {
+	SCTP_EP_TYPE_SOCKET = 0,
+	SCTP_EP_TYPE_ASSOCIATION = 1,
+};
+
+struct sctp_chunk;
+
+struct sctp_inq {
+	struct list_head in_chunk_list;
+	struct sctp_chunk *in_progress;
+	struct work_struct immediate;
+};
+
+struct sctp_bind_addr {
+	__u16 port;
+	struct list_head address_list;
+};
+
+struct sctp_ep_common {
+	enum sctp_endpoint_type type;
+	refcount_t refcnt;
+	bool dead;
+	struct sock *sk;
+	struct net *net;
+	struct sctp_inq inqueue;
+	struct sctp_bind_addr bind_addr;
+};
+
+typedef __s32 sctp_assoc_t;
+
+union sctp_addr {
+	struct sockaddr_in v4;
+	struct sockaddr_in6 v6;
+	struct sockaddr sa;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+	__u8 params[0];
+};
+
+struct sctp_init_chunk {
+	struct sctp_chunkhdr chunk_hdr;
+	struct sctp_inithdr init_hdr;
+};
+
+struct sctp_cookie {
+	__u32 my_vtag;
+	__u32 peer_vtag;
+	__u32 my_ttag;
+	__u32 peer_ttag;
+	ktime_t expiration;
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u32 initial_tsn;
+	union sctp_addr peer_addr;
+	__u16 my_port;
+	__u8 prsctp_capable;
+	__u8 padding;
+	__u32 adaptation_ind;
+	__u8 auth_random[36];
+	__u8 auth_hmacs[10];
+	__u8 auth_chunks[20];
+	__u32 raw_addr_list_len;
+	struct sctp_init_chunk peer_init[0];
+};
+
+struct sctp_tsnmap {
+	long unsigned int *tsn_map;
+	__u32 base_tsn;
+	__u32 cumulative_tsn_ack_point;
+	__u32 max_tsn_seen;
+	__u16 len;
+	__u16 pending_data;
+	__u16 num_dup_tsns;
+	__be32 dup_tsns[16];
+};
+
+struct sctp_inithdr_host {
+	__u32 init_tag;
+	__u32 a_rwnd;
+	__u16 num_outbound_streams;
+	__u16 num_inbound_streams;
+	__u32 initial_tsn;
+};
+
+enum sctp_state {
+	SCTP_STATE_CLOSED = 0,
+	SCTP_STATE_COOKIE_WAIT = 1,
+	SCTP_STATE_COOKIE_ECHOED = 2,
+	SCTP_STATE_ESTABLISHED = 3,
+	SCTP_STATE_SHUTDOWN_PENDING = 4,
+	SCTP_STATE_SHUTDOWN_SENT = 5,
+	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
+	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+struct sctp_stream_out_ext;
+
+struct sctp_stream_out {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	struct sctp_stream_out_ext *ext;
+	__u8 state;
+};
+
+struct sctp_stream_in {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	__u32 fsn;
+	__u32 fsn_uo;
+	char pd_mode;
+	char pd_mode_uo;
+};
+
+struct sctp_stream_interleave;
+
+struct sctp_stream {
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_out type[0];
+	} out;
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_in type[0];
+	} in;
+	__u16 outcnt;
+	__u16 incnt;
+	struct sctp_stream_out *out_curr;
+	union {
+		struct {
+			struct list_head prio_list;
+		};
+		struct {
+			struct list_head rr_list;
+			struct sctp_stream_out_ext *rr_next;
+		};
+	};
+	struct sctp_stream_interleave *si;
+};
+
+struct sctp_sched_ops;
+
+struct sctp_outq {
+	struct sctp_association *asoc;
+	struct list_head out_chunk_list;
+	struct sctp_sched_ops *sched;
+	unsigned int out_qlen;
+	unsigned int error;
+	struct list_head control_chunk_list;
+	struct list_head sacked;
+	struct list_head retransmit;
+	struct list_head abandoned;
+	__u32 outstanding_bytes;
+	char fast_rtx;
+	char cork;
+};
+
+struct sctp_ulpq {
+	char pd_mode;
+	struct sctp_association *asoc;
+	struct sk_buff_head reasm;
+	struct sk_buff_head reasm_uo;
+	struct sk_buff_head lobby;
+};
+
+struct sctp_priv_assoc_stats {
+	struct __kernel_sockaddr_storage obs_rto_ipaddr;
+	__u64 max_obs_rto;
+	__u64 isacks;
+	__u64 osacks;
+	__u64 opackets;
+	__u64 ipackets;
+	__u64 rtxchunks;
+	__u64 outofseqtsns;
+	__u64 idupchunks;
+	__u64 gapcnt;
+	__u64 ouodchunks;
+	__u64 iuodchunks;
+	__u64 oodchunks;
+	__u64 iodchunks;
+	__u64 octrlchunks;
+	__u64 ictrlchunks;
+};
+
+struct sctp_endpoint;
+
+struct sctp_transport;
+
+struct sctp_random_param;
+
+struct sctp_chunks_param;
+
+struct sctp_hmac_algo_param;
+
+struct sctp_auth_bytes;
+
+struct sctp_shared_key;
+
+struct sctp_association {
+	struct sctp_ep_common base;
+	struct list_head asocs;
+	sctp_assoc_t assoc_id;
+	struct sctp_endpoint *ep;
+	struct sctp_cookie c;
+	struct {
+		struct list_head transport_addr_list;
+		__u32 rwnd;
+		__u16 transport_count;
+		__u16 port;
+		struct sctp_transport *primary_path;
+		union sctp_addr primary_addr;
+		struct sctp_transport *active_path;
+		struct sctp_transport *retran_path;
+		struct sctp_transport *last_sent_to;
+		struct sctp_transport *last_data_from;
+		struct sctp_tsnmap tsn_map;
+		__be16 addip_disabled_mask;
+		__u16 ecn_capable: 1;
+		__u16 ipv4_address: 1;
+		__u16 ipv6_address: 1;
+		__u16 hostname_address: 1;
+		__u16 asconf_capable: 1;
+		__u16 prsctp_capable: 1;
+		__u16 reconf_capable: 1;
+		__u16 intl_capable: 1;
+		__u16 auth_capable: 1;
+		__u16 sack_needed: 1;
+		__u16 sack_generation: 1;
+		__u16 zero_window_announced: 1;
+		__u32 sack_cnt;
+		__u32 adaptation_ind;
+		struct sctp_inithdr_host i;
+		void *cookie;
+		int cookie_len;
+		__u32 addip_serial;
+		struct sctp_random_param *peer_random;
+		struct sctp_chunks_param *peer_chunks;
+		struct sctp_hmac_algo_param *peer_hmacs;
+	} peer;
+	enum sctp_state state;
+	int overall_error_count;
+	ktime_t cookie_life;
+	long unsigned int rto_initial;
+	long unsigned int rto_max;
+	long unsigned int rto_min;
+	int max_burst;
+	int max_retrans;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u16 max_init_attempts;
+	__u16 init_retries;
+	long unsigned int max_init_timeo;
+	long unsigned int hbinterval;
+	long unsigned int probe_interval;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u8 pmtu_pending;
+	__u32 pathmtu;
+	__u32 param_flags;
+	__u32 sackfreq;
+	long unsigned int sackdelay;
+	long unsigned int timeouts[12];
+	struct timer_list timers[12];
+	struct sctp_transport *shutdown_last_sent_to;
+	struct sctp_transport *init_last_sent_to;
+	int shutdown_retries;
+	__u32 next_tsn;
+	__u32 ctsn_ack_point;
+	__u32 adv_peer_ack_point;
+	__u32 highest_sacked;
+	__u32 fast_recovery_exit;
+	__u8 fast_recovery;
+	__u16 unack_data;
+	__u32 rtx_data_chunks;
+	__u32 rwnd;
+	__u32 a_rwnd;
+	__u32 rwnd_over;
+	__u32 rwnd_press;
+	int sndbuf_used;
+	atomic_t rmem_alloc;
+	wait_queue_head_t wait;
+	__u32 frag_point;
+	__u32 user_frag;
+	int init_err_counter;
+	int init_cycle;
+	__u16 default_stream;
+	__u16 default_flags;
+	__u32 default_ppid;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	struct sctp_stream stream;
+	struct sctp_outq outqueue;
+	struct sctp_ulpq ulpq;
+	__u32 last_ecne_tsn;
+	__u32 last_cwr_tsn;
+	int numduptsns;
+	struct sctp_chunk *addip_last_asconf;
+	struct list_head asconf_ack_list;
+	struct list_head addip_chunk_list;
+	__u32 addip_serial;
+	int src_out_of_asoc_ok;
+	union sctp_addr *asconf_addr_del_pending;
+	struct sctp_transport *new_transport;
+	struct list_head endpoint_shared_keys;
+	struct sctp_auth_bytes *asoc_shared_key;
+	struct sctp_shared_key *shkey;
+	__u16 default_hmac_id;
+	__u16 active_key_id;
+	__u8 need_ecne: 1;
+	__u8 temp: 1;
+	__u8 pf_expose: 2;
+	__u8 force_delay: 1;
+	__u8 strreset_enable;
+	__u8 strreset_outstanding;
+	__u32 strreset_outseq;
+	__u32 strreset_inseq;
+	__u32 strreset_result[2];
+	struct sctp_chunk *strreset_chunk;
+	struct sctp_priv_assoc_stats stats;
+	int sent_cnt_removable;
+	__u16 subscribe;
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	u32 secid;
+	u32 peer_secid;
+	struct callback_head rcu;
+};
+
+struct sk_security_struct {
+	enum {
+		NLBL_UNSET = 0,
+		NLBL_REQUIRE = 1,
+		NLBL_LABELED = 2,
+		NLBL_REQSKB = 3,
+		NLBL_CONNLABELED = 4,
+	} nlbl_state;
+	struct netlbl_lsm_secattr *nlbl_secattr;
+	u32 sid;
+	u32 peer_sid;
+	u16 sclass;
+	enum {
+		SCTP_ASSOC_UNSET = 0,
+		SCTP_ASSOC_SET = 1,
+	} sctp_assoc_state;
+};
+
+struct sctp_initmsg {
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u16 sinit_max_attempts;
+	__u16 sinit_max_init_timeo;
+};
+
+struct sctp_sndrcvinfo {
+	__u16 sinfo_stream;
+	__u16 sinfo_ssn;
+	__u16 sinfo_flags;
+	__u32 sinfo_ppid;
+	__u32 sinfo_context;
+	__u32 sinfo_timetolive;
+	__u32 sinfo_tsn;
+	__u32 sinfo_cumtsn;
+	sctp_assoc_t sinfo_assoc_id;
+};
+
+struct sctp_rtoinfo {
+	sctp_assoc_t srto_assoc_id;
+	__u32 srto_initial;
+	__u32 srto_max;
+	__u32 srto_min;
+};
+
+struct sctp_assocparams {
+	sctp_assoc_t sasoc_assoc_id;
+	__u16 sasoc_asocmaxrxt;
+	__u16 sasoc_number_peer_destinations;
+	__u32 sasoc_peer_rwnd;
+	__u32 sasoc_local_rwnd;
+	__u32 sasoc_cookie_life;
+};
+
+struct sctp_paddrparams {
+	sctp_assoc_t spp_assoc_id;
+	struct __kernel_sockaddr_storage spp_address;
+	__u32 spp_hbinterval;
+	__u16 spp_pathmaxrxt;
+	__u32 spp_pathmtu;
+	__u32 spp_sackdelay;
+	__u32 spp_flags;
+	__u32 spp_ipv6_flowlabel;
+	__u8 spp_dscp;
+	char: 8;
+} __attribute__((packed));
+
+struct sctphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 vtag;
+	__le32 checksum;
+};
+
+struct sctp_paramhdr {
+	__be16 type;
+	__be16 length;
+};
+
+struct sctp_datahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 ssn;
+	__u32 ppid;
+	__u8 payload[0];
+};
+
+struct sctp_idatahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 reserved;
+	__be32 mid;
+	union {
+		__u32 ppid;
+		__be32 fsn;
+	};
+	__u8 payload[0];
+};
+
+struct sctp_ipv4addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in_addr addr;
+};
+
+struct sctp_ipv6addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in6_addr addr;
+};
+
+struct sctp_cookie_preserve_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 lifespan_increment;
+};
+
+struct sctp_hostname_param {
+	struct sctp_paramhdr param_hdr;
+	uint8_t hostname[0];
+};
+
+struct sctp_supported_addrs_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 types[0];
+};
+
+struct sctp_adaptation_ind_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 adaptation_ind;
+};
+
+struct sctp_supported_ext_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_random_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 random_val[0];
+};
+
+struct sctp_chunks_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_hmac_algo_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 hmac_ids[0];
+};
+
+struct sctp_cookie_param {
+	struct sctp_paramhdr p;
+	__u8 body[0];
+};
+
+struct sctp_gap_ack_block {
+	__be16 start;
+	__be16 end;
+};
+
+union sctp_sack_variable {
+	struct sctp_gap_ack_block gab;
+	__be32 dup;
+};
+
+struct sctp_sackhdr {
+	__be32 cum_tsn_ack;
+	__be32 a_rwnd;
+	__be16 num_gap_ack_blocks;
+	__be16 num_dup_tsns;
+	union sctp_sack_variable variable[0];
+};
+
+struct sctp_heartbeathdr {
+	struct sctp_paramhdr info;
+};
+
+struct sctp_shutdownhdr {
+	__be32 cum_tsn_ack;
+};
+
+struct sctp_errhdr {
+	__be16 cause;
+	__be16 length;
+	__u8 variable[0];
+};
+
+struct sctp_ecnehdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_cwrhdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_fwdtsn_skip {
+	__be16 stream;
+	__be16 ssn;
+};
+
+struct sctp_fwdtsn_hdr {
+	__be32 new_cum_tsn;
+	struct sctp_fwdtsn_skip skip[0];
+};
+
+struct sctp_ifwdtsn_skip {
+	__be16 stream;
+	__u8 reserved;
+	__u8 flags;
+	__be32 mid;
+};
+
+struct sctp_ifwdtsn_hdr {
+	__be32 new_cum_tsn;
+	struct sctp_ifwdtsn_skip skip[0];
+};
+
+struct sctp_addip_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 crr_id;
+};
+
+struct sctp_addiphdr {
+	__be32 serial;
+	__u8 params[0];
+};
+
+struct sctp_authhdr {
+	__be16 shkey_id;
+	__be16 hmac_id;
+	__u8 hmac[0];
+};
+
+struct sctp_auth_bytes {
+	refcount_t refcnt;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct sctp_shared_key {
+	struct list_head key_list;
+	struct sctp_auth_bytes *key;
+	refcount_t refcnt;
+	__u16 key_id;
+	__u8 deactivated;
+};
+
+enum sctp_scope {
+	SCTP_SCOPE_GLOBAL = 0,
+	SCTP_SCOPE_PRIVATE = 1,
+	SCTP_SCOPE_LINK = 2,
+	SCTP_SCOPE_LOOPBACK = 3,
+	SCTP_SCOPE_UNUSABLE = 4,
+};
+
+struct sctp_ulpevent {
+	struct sctp_association *asoc;
+	struct sctp_chunk *chunk;
+	unsigned int rmem_len;
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	union {
+		__u32 ppid;
+		__u32 fsn;
+	};
+	__u32 tsn;
+	__u32 cumtsn;
+	__u16 stream;
+	__u16 flags;
+	__u16 msg_flags;
+} __attribute__((packed));
+
+union sctp_addr_param;
+
+union sctp_params {
+	void *v;
+	struct sctp_paramhdr *p;
+	struct sctp_cookie_preserve_param *life;
+	struct sctp_hostname_param *dns;
+	struct sctp_cookie_param *cookie;
+	struct sctp_supported_addrs_param *sat;
+	struct sctp_ipv4addr_param *v4;
+	struct sctp_ipv6addr_param *v6;
+	union sctp_addr_param *addr;
+	struct sctp_adaptation_ind_param *aind;
+	struct sctp_supported_ext_param *ext;
+	struct sctp_random_param *random;
+	struct sctp_chunks_param *chunks;
+	struct sctp_hmac_algo_param *hmac_algo;
+	struct sctp_addip_param *addip;
+};
+
+struct sctp_sender_hb_info;
+
+struct sctp_signed_cookie;
+
+struct sctp_datamsg;
+
+struct sctp_chunk {
+	struct list_head list;
+	refcount_t refcnt;
+	int sent_count;
+	union {
+		struct list_head transmitted_list;
+		struct list_head stream_list;
+	};
+	struct list_head frag_list;
+	struct sk_buff *skb;
+	union {
+		struct sk_buff *head_skb;
+		struct sctp_shared_key *shkey;
+	};
+	union sctp_params param_hdr;
+	union {
+		__u8 *v;
+		struct sctp_datahdr *data_hdr;
+		struct sctp_inithdr *init_hdr;
+		struct sctp_sackhdr *sack_hdr;
+		struct sctp_heartbeathdr *hb_hdr;
+		struct sctp_sender_hb_info *hbs_hdr;
+		struct sctp_shutdownhdr *shutdown_hdr;
+		struct sctp_signed_cookie *cookie_hdr;
+		struct sctp_ecnehdr *ecne_hdr;
+		struct sctp_cwrhdr *ecn_cwr_hdr;
+		struct sctp_errhdr *err_hdr;
+		struct sctp_addiphdr *addip_hdr;
+		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
+		struct sctp_authhdr *auth_hdr;
+		struct sctp_idatahdr *idata_hdr;
+		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
+	} subh;
+	__u8 *chunk_end;
+	struct sctp_chunkhdr *chunk_hdr;
+	struct sctphdr *sctp_hdr;
+	struct sctp_sndrcvinfo sinfo;
+	struct sctp_association *asoc;
+	struct sctp_ep_common *rcvr;
+	long unsigned int sent_at;
+	union sctp_addr source;
+	union sctp_addr dest;
+	struct sctp_datamsg *msg;
+	struct sctp_transport *transport;
+	struct sk_buff *auth_chunk;
+	__u16 rtt_in_progress: 1;
+	__u16 has_tsn: 1;
+	__u16 has_ssn: 1;
+	__u16 singleton: 1;
+	__u16 end_of_packet: 1;
+	__u16 ecn_ce_done: 1;
+	__u16 pdiscard: 1;
+	__u16 tsn_gap_acked: 1;
+	__u16 data_accepted: 1;
+	__u16 auth: 1;
+	__u16 has_asconf: 1;
+	__u16 pmtu_probe: 1;
+	__u16 tsn_missing_report: 2;
+	__u16 fast_retransmit: 2;
+};
+
+struct sctp_stream_interleave {
+	__u16 data_chunk_len;
+	__u16 ftsn_chunk_len;
+	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
+	void (*assign_number)(struct sctp_chunk *);
+	bool (*validate_data)(struct sctp_chunk *);
+	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
+	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	void (*start_pd)(struct sctp_ulpq *, gfp_t);
+	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
+	void (*generate_ftsn)(struct sctp_outq *, __u32);
+	bool (*validate_ftsn)(struct sctp_chunk *);
+	void (*report_ftsn)(struct sctp_ulpq *, __u32);
+	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
+};
+
+struct sctp_bind_bucket {
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct hlist_node node;
+	struct hlist_head owner;
+	struct net *net;
+};
+
+enum sctp_socket_type {
+	SCTP_SOCKET_UDP = 0,
+	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
+	SCTP_SOCKET_TCP = 2,
+};
+
+struct sctp_pf;
+
+struct sctp_sock {
+	struct inet_sock inet;
+	enum sctp_socket_type type;
+	int: 32;
+	struct sctp_pf *pf;
+	struct crypto_shash *hmac;
+	char *sctp_hmac_alg;
+	struct sctp_endpoint *ep;
+	struct sctp_bind_bucket *bind_hash;
+	__u16 default_stream;
+	short: 16;
+	__u32 default_ppid;
+	__u16 default_flags;
+	short: 16;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	int max_burst;
+	__u32 hbinterval;
+	__u32 probe_interval;
+	__be16 udp_port;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	short: 16;
+	__u32 flowlabel;
+	__u8 dscp;
+	char: 8;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	short: 16;
+	__u32 pathmtu;
+	__u32 sackdelay;
+	__u32 sackfreq;
+	__u32 param_flags;
+	__u32 default_ss;
+	struct sctp_rtoinfo rtoinfo;
+	struct sctp_paddrparams paddrparam;
+	struct sctp_assocparams assocparams;
+	__u16 subscribe;
+	struct sctp_initmsg initmsg;
+	short: 16;
+	int user_frag;
+	__u32 autoclose;
+	__u32 adaptation_ind;
+	__u32 pd_point;
+	__u16 nodelay: 1;
+	__u16 pf_expose: 2;
+	__u16 reuse: 1;
+	__u16 disable_fragments: 1;
+	__u16 v4mapped: 1;
+	__u16 frag_interleave: 1;
+	__u16 recvrcvinfo: 1;
+	__u16 recvnxtinfo: 1;
+	__u16 data_ready_signalled: 1;
+	int: 22;
+	atomic_t pd_mode;
+	struct sk_buff_head pd_lobby;
+	struct list_head auto_asconf_list;
+	int do_auto_asconf;
+	int: 32;
+} __attribute__((packed));
+
+struct sctp_af;
+
+struct sctp_pf {
+	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
+	void (*skb_msgname)(struct sk_buff *, char *, int *);
+	int (*af_supported)(sa_family_t, struct sctp_sock *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
+	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
+	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
+	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
+	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
+	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
+	void (*copy_ip_options)(struct sock *, struct sock *);
+	struct sctp_af *af;
+};
+
+struct sctp_endpoint {
+	struct sctp_ep_common base;
+	struct hlist_node node;
+	int hashent;
+	struct list_head asocs;
+	__u8 secret_key[32];
+	__u8 *digest;
+	__u32 sndbuf_policy;
+	__u32 rcvbuf_policy;
+	struct crypto_shash **auth_hmacs;
+	struct sctp_hmac_algo_param *auth_hmacs_list;
+	struct sctp_chunks_param *auth_chunk_list;
+	struct list_head endpoint_shared_keys;
+	__u16 active_key_id;
+	__u8 ecn_enable: 1;
+	__u8 auth_enable: 1;
+	__u8 intl_enable: 1;
+	__u8 prsctp_enable: 1;
+	__u8 asconf_enable: 1;
+	__u8 reconf_enable: 1;
+	__u8 strreset_enable;
+	struct callback_head rcu;
+};
+
+struct sctp_signed_cookie {
+	__u8 signature[32];
+	__u32 __pad;
+	struct sctp_cookie c;
+} __attribute__((packed));
+
+union sctp_addr_param {
+	struct sctp_paramhdr p;
+	struct sctp_ipv4addr_param v4;
+	struct sctp_ipv6addr_param v6;
+};
+
+struct sctp_sender_hb_info {
+	struct sctp_paramhdr param_hdr;
+	union sctp_addr daddr;
+	long unsigned int sent_at;
+	__u64 hb_nonce;
+	__u32 probe_size;
+};
+
+struct sctp_af {
+	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
+	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
+	void (*copy_addrlist)(struct list_head *, struct net_device *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
+	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
+	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
+	void (*from_sk)(union sctp_addr *, struct sock *);
+	bool (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
+	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
+	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
+	enum sctp_scope (*scope)(union sctp_addr *);
+	void (*inaddr_any)(union sctp_addr *, __be16);
+	int (*is_any)(const union sctp_addr *);
+	int (*available)(union sctp_addr *, struct sctp_sock *);
+	int (*skb_iif)(const struct sk_buff *);
+	int (*is_ce)(const struct sk_buff *);
+	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
+	void (*ecn_capable)(struct sock *);
+	__u16 net_header_len;
+	int sockaddr_len;
+	int (*ip_options_len)(struct sock *);
+	sa_family_t sa_family;
+	struct list_head list;
+};
+
+struct sctp_packet {
+	__u16 source_port;
+	__u16 destination_port;
+	__u32 vtag;
+	struct list_head chunk_list;
+	size_t overhead;
+	size_t size;
+	size_t max_size;
+	struct sctp_transport *transport;
+	struct sctp_chunk *auth;
+	u8 has_cookie_echo: 1;
+	u8 has_sack: 1;
+	u8 has_auth: 1;
+	u8 has_data: 1;
+	u8 ipfragok: 1;
+};
+
+struct sctp_transport {
+	struct list_head transports;
+	struct rhlist_head node;
+	refcount_t refcnt;
+	__u32 rto_pending: 1;
+	__u32 hb_sent: 1;
+	__u32 pmtu_pending: 1;
+	__u32 dst_pending_confirm: 1;
+	__u32 sack_generation: 1;
+	u32 dst_cookie;
+	struct flowi fl;
+	union sctp_addr ipaddr;
+	struct sctp_af *af_specific;
+	struct sctp_association *asoc;
+	long unsigned int rto;
+	__u32 rtt;
+	__u32 rttvar;
+	__u32 srtt;
+	__u32 cwnd;
+	__u32 ssthresh;
+	__u32 partial_bytes_acked;
+	__u32 flight_size;
+	__u32 burst_limited;
+	struct dst_entry *dst;
+	union sctp_addr saddr;
+	long unsigned int hbinterval;
+	long unsigned int probe_interval;
+	long unsigned int sackdelay;
+	__u32 sackfreq;
+	atomic_t mtu_info;
+	ktime_t last_time_heard;
+	long unsigned int last_time_sent;
+	long unsigned int last_time_ecne_reduced;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 param_flags;
+	int init_sent_count;
+	int state;
+	short unsigned int error_count;
+	struct timer_list T3_rtx_timer;
+	struct timer_list hb_timer;
+	struct timer_list proto_unreach_timer;
+	struct timer_list reconf_timer;
+	struct timer_list probe_timer;
+	struct list_head transmitted;
+	struct sctp_packet packet;
+	struct list_head send_ready;
+	struct {
+		__u32 next_tsn_at_change;
+		char changeover_active;
+		char cycling_changeover;
+		char cacc_saw_newack;
+	} cacc;
+	struct {
+		__u16 pmtu;
+		__u16 probe_size;
+		__u16 probe_high;
+		__u8 probe_count;
+		__u8 state;
+	} pl;
+	__u64 hb_nonce;
+	struct callback_head rcu;
+};
+
+struct sctp_datamsg {
+	struct list_head chunks;
+	refcount_t refcnt;
+	long unsigned int expires_at;
+	int send_error;
+	u8 send_failed: 1;
+	u8 can_delay: 1;
+	u8 abandoned: 1;
+};
+
+struct sctp_stream_priorities {
+	struct list_head prio_sched;
+	struct list_head active;
+	struct sctp_stream_out_ext *next;
+	__u16 prio;
+};
+
+struct sctp_stream_out_ext {
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	struct list_head outq;
+	union {
+		struct {
+			struct list_head prio_list;
+			struct sctp_stream_priorities *prio_head;
+		};
+		struct {
+			struct list_head rr_list;
+		};
+	};
+};
+
+typedef u16 access_mask_t;
+
+struct landlock_hierarchy {
+	struct landlock_hierarchy *parent;
+	refcount_t usage;
+};
+
+struct landlock_ruleset {
+	struct rb_root root;
+	struct landlock_hierarchy *hierarchy;
+	union {
+		struct work_struct work_free;
+		struct {
+			struct mutex lock;
+			refcount_t usage;
+			u32 num_rules;
+			u32 num_layers;
+			access_mask_t fs_access_masks[0];
+		};
+	};
+};
+
+struct landlock_cred_security {
+	struct landlock_ruleset *domain;
+};
+
+enum tpm_algorithms {
+	TPM_ALG_ERROR = 0,
+	TPM_ALG_SHA1 = 4,
+	TPM_ALG_KEYEDHASH = 8,
+	TPM_ALG_SHA256 = 11,
+	TPM_ALG_SHA384 = 12,
+	TPM_ALG_SHA512 = 13,
+	TPM_ALG_NULL = 16,
+	TPM_ALG_SM3_256 = 18,
+};
+
+enum tpm_pcrs {
+	TPM_PCR0 = 0,
+	TPM_PCR8 = 8,
+	TPM_PCR10 = 10,
+};
+
+struct ima_algo_desc {
+	struct crypto_shash *tfm;
+	enum hash_algo algo;
+};
+
+enum efi_secureboot_mode {
+	efi_secureboot_mode_unset = 0,
+	efi_secureboot_mode_unknown = 1,
+	efi_secureboot_mode_disabled = 2,
+	efi_secureboot_mode_enabled = 3,
+};
+
+struct encrypted_key_payload {
+	struct callback_head rcu;
+	char *format;
+	char *master_desc;
+	char *datalen;
+	u8 *iv;
+	u8 *encrypted_data;
+	short unsigned int datablob_len;
+	short unsigned int decrypted_datalen;
+	short unsigned int payload_datalen;
+	short unsigned int encrypted_key_format;
+	u8 *decrypted_data;
+	u8 payload_data[0];
+};
+
+enum evm_ima_xattr_type {
+	IMA_XATTR_DIGEST = 1,
+	EVM_XATTR_HMAC = 2,
+	EVM_IMA_XATTR_DIGSIG = 3,
+	IMA_XATTR_DIGEST_NG = 4,
+	EVM_XATTR_PORTABLE_DIGSIG = 5,
+	IMA_VERITY_DIGSIG = 6,
+	IMA_XATTR_LAST = 7,
+};
+
+struct xattr_list {
+	struct list_head list;
+	char *name;
+	bool enabled;
+};
+
+struct evm_digest {
+	struct ima_digest_data hdr;
+	char digest[64];
+};
+
+struct h_misc {
+	long unsigned int ino;
+	__u32 generation;
+	uid_t uid;
+	gid_t gid;
+	umode_t mode;
+};
+
+struct crypto_report_akcipher {
+	char type[64];
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[128];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum rsapubkey_actions {
+	ACT_rsa_get_e = 0,
+	ACT_rsa_get_n = 1,
+	NR__rsapubkey_actions = 2,
+};
+
+enum rsaprivkey_actions {
+	ACT_rsa_get_d = 0,
+	ACT_rsa_get_dp = 1,
+	ACT_rsa_get_dq = 2,
+	ACT_rsa_get_e___2 = 3,
+	ACT_rsa_get_n___2 = 4,
+	ACT_rsa_get_p = 5,
+	ACT_rsa_get_q = 6,
+	ACT_rsa_get_qinv = 7,
+	NR__rsaprivkey_actions = 8,
+};
+
+struct ecc_point {
+	u64 *x;
+	u64 *y;
+	u8 ndigits;
+};
+
+struct ecc_curve {
+	char *name;
+	struct ecc_point g;
+	u64 *p;
+	u64 *n;
+	u64 *a;
+	u64 *b;
+};
+
+struct asn1_decoder;
+
+struct ecc_ctx {
+	unsigned int curve_id;
+	const struct ecc_curve *curve;
+	bool pub_key_set;
+	u64 x[8];
+	u64 y[8];
+	struct ecc_point pub_key;
+};
+
+struct ecdsa_signature_ctx {
+	const struct ecc_curve *curve;
+	u64 r[8];
+	u64 s[8];
+};
+
+struct sha1_state {
+	u32 state[5];
+	u64 count;
+	u8 buffer[64];
+};
+
+typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
+
+struct crypto_cts_ctx {
+	struct crypto_skcipher *child;
+};
+
+struct crypto_cts_reqctx {
+	struct scatterlist sg[2];
+	unsigned int offset;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+struct chksum_ctx {
+	u32 key;
+};
+
+struct chksum_desc_ctx {
+	u32 crc;
+};
+
+struct lzorle_ctx {
+	void *lzorle_comp_mem;
+};
+
+typedef struct {
+	__be64 a;
+	__be64 b;
+} be128;
+
+struct gf128mul_4k {
+	be128 t[256];
+};
+
+struct ghash_ctx {
+	struct gf128mul_4k *gf128;
+};
+
+struct ghash_desc_ctx {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+typedef struct {
+	u64 m_low;
+	u64 m_high;
+} uint128_t;
+
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
+struct asymmetric_key_ids {
+	void *id[3];
+};
+
+struct asymmetric_key_subtype {
+	struct module *owner;
+	const char *name;
+	short unsigned int name_len;
+	void (*describe)(const struct key *, struct seq_file *);
+	void (*destroy)(void *, void *);
+	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+};
+
+struct pkcs7_parse_context {
+	struct pkcs7_message *msg;
+	struct pkcs7_signed_info *sinfo;
+	struct pkcs7_signed_info **ppsinfo;
+	struct x509_certificate *certs;
+	struct x509_certificate **ppcerts;
+	long unsigned int data;
+	enum OID last_oid;
+	unsigned int x509_index;
+	unsigned int sinfo_index;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_skid;
+	unsigned int raw_skid_size;
+	bool expect_skid;
+};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
+
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
+};
+
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 };
 
-struct bpf_queue_stack {
-	struct bpf_map map;
-	raw_spinlock_t lock;
-	u32 head;
-	u32 tail;
+struct rq_map_data {
+	struct page **pages;
+	int page_order;
+	int nr_entries;
+	long unsigned int offset;
+	int null_mapped;
+	int from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	long unsigned int first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct latency_bucket {
+	long unsigned int total_latency;
+	int samples;
+};
+
+struct avg_latency_bucket {
+	long unsigned int latency;
+	bool valid;
+};
+
+struct throtl_data {
+	struct throtl_service_queue service_queue;
+	struct request_queue *queue;
+	unsigned int nr_queued[2];
+	unsigned int throtl_slice;
+	struct work_struct dispatch_work;
+	unsigned int limit_index;
+	bool limit_valid[2];
+	long unsigned int low_upgrade_time;
+	long unsigned int low_downgrade_time;
+	unsigned int scale;
+	struct latency_bucket tmp_buckets[18];
+	struct avg_latency_bucket avg_buckets[18];
+	struct latency_bucket *latency_buckets[2];
+	long unsigned int last_calculate_time;
+	long unsigned int filtered_latency;
+	bool track_bio_latency;
+};
+
+struct blkg_conf_ctx {
+	struct block_device *bdev;
+	struct blkcg_gq *blkg;
+	char *body;
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+struct blkg_rwstat_sample {
+	u64 cnt[5];
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	long unsigned int disptime;
+	unsigned int flags;
+	bool has_rules[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	long unsigned int last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	long unsigned int last_check_time;
+	long unsigned int latency_target;
+	long unsigned int latency_target_conf;
+	long unsigned int slice_start[2];
+	long unsigned int slice_end[2];
+	long unsigned int last_finish_time;
+	long unsigned int checked_last_finish_time;
+	long unsigned int avg_idletime;
+	long unsigned int idletime_threshold;
+	long unsigned int idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	long unsigned int bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_HAS_IOPS_LIMIT = 4,
+	THROTL_TG_CANCELING = 8,
+};
+
+enum {
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
+};
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+enum blk_integrity_flags {
+	BLK_INTEGRITY_VERIFY = 1,
+	BLK_INTEGRITY_GENERATE = 2,
+	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
+	BLK_INTEGRITY_IP_CHECKSUM = 8,
+};
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
+	struct list_head list;
+	long unsigned int state;
+	int weight;
+	irq_poll_fn *poll;
+};
+
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+enum rdma_nl_counter_mode {
+	RDMA_COUNTER_MODE_NONE = 0,
+	RDMA_COUNTER_MODE_AUTO = 1,
+	RDMA_COUNTER_MODE_MANUAL = 2,
+	RDMA_COUNTER_MODE_MAX = 3,
+};
+
+enum rdma_nl_counter_mask {
+	RDMA_COUNTER_MASK_QP_TYPE = 1,
+	RDMA_COUNTER_MASK_PID = 2,
+};
+
+enum rdma_restrack_type {
+	RDMA_RESTRACK_PD = 0,
+	RDMA_RESTRACK_CQ = 1,
+	RDMA_RESTRACK_QP = 2,
+	RDMA_RESTRACK_CM_ID = 3,
+	RDMA_RESTRACK_MR = 4,
+	RDMA_RESTRACK_CTX = 5,
+	RDMA_RESTRACK_COUNTER = 6,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
+};
+
+struct rdma_restrack_entry {
+	bool valid;
+	u8 no_track: 1;
+	struct kref kref;
+	struct completion comp;
+	struct task_struct *task;
+	const char *kern_name;
+	enum rdma_restrack_type type;
+	bool user;
+	u32 id;
+};
+
+struct rdma_link_ops {
+	struct list_head list;
+	const char *type;
+	int (*newlink)(const char *, struct net_device *);
+};
+
+struct auto_mode_param {
+	int qp_type;
+};
+
+struct rdma_counter_mode {
+	enum rdma_nl_counter_mode mode;
+	enum rdma_nl_counter_mask mask;
+	struct auto_mode_param param;
+};
+
+struct rdma_hw_stats;
+
+struct rdma_port_counter {
+	struct rdma_counter_mode mode;
+	struct rdma_hw_stats *hstats;
+	unsigned int num_counters;
+	struct mutex lock;
+};
+
+struct rdma_stat_desc;
+
+struct rdma_hw_stats {
+	struct mutex lock;
+	long unsigned int timestamp;
+	long unsigned int lifespan;
+	const struct rdma_stat_desc *descs;
+	long unsigned int *is_disabled;
+	int num_counters;
+	u64 value[0];
+};
+
+struct ib_device;
+
+struct rdma_counter {
+	struct rdma_restrack_entry res;
+	struct ib_device *device;
+	uint32_t id;
+	struct kref kref;
+	struct rdma_counter_mode mode;
+	struct mutex lock;
+	struct rdma_hw_stats *stats;
+	u32 port;
+};
+
+enum rdma_driver_id {
+	RDMA_DRIVER_UNKNOWN = 0,
+	RDMA_DRIVER_MLX5 = 1,
+	RDMA_DRIVER_MLX4 = 2,
+	RDMA_DRIVER_CXGB3 = 3,
+	RDMA_DRIVER_CXGB4 = 4,
+	RDMA_DRIVER_MTHCA = 5,
+	RDMA_DRIVER_BNXT_RE = 6,
+	RDMA_DRIVER_OCRDMA = 7,
+	RDMA_DRIVER_NES = 8,
+	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
+	RDMA_DRIVER_VMW_PVRDMA = 10,
+	RDMA_DRIVER_QEDR = 11,
+	RDMA_DRIVER_HNS = 12,
+	RDMA_DRIVER_USNIC = 13,
+	RDMA_DRIVER_RXE = 14,
+	RDMA_DRIVER_HFI1 = 15,
+	RDMA_DRIVER_QIB = 16,
+	RDMA_DRIVER_EFA = 17,
+	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
+};
+
+enum ib_cq_notify_flags {
+	IB_CQ_SOLICITED = 1,
+	IB_CQ_NEXT_COMP = 2,
+	IB_CQ_SOLICITED_MASK = 3,
+	IB_CQ_REPORT_MISSED_EVENTS = 4,
+};
+
+struct ib_mad;
+
+enum rdma_link_layer {
+	IB_LINK_LAYER_UNSPECIFIED = 0,
+	IB_LINK_LAYER_INFINIBAND = 1,
+	IB_LINK_LAYER_ETHERNET = 2,
+};
+
+enum rdma_netdev_t {
+	RDMA_NETDEV_OPA_VNIC = 0,
+	RDMA_NETDEV_IPOIB = 1,
+};
+
+enum ib_srq_attr_mask {
+	IB_SRQ_MAX_WR = 1,
+	IB_SRQ_LIMIT = 2,
+};
+
+enum ib_mr_type {
+	IB_MR_TYPE_MEM_REG = 0,
+	IB_MR_TYPE_SG_GAPS = 1,
+	IB_MR_TYPE_DM = 2,
+	IB_MR_TYPE_USER = 3,
+	IB_MR_TYPE_DMA = 4,
+	IB_MR_TYPE_INTEGRITY = 5,
+};
+
+enum ib_uverbs_advise_mr_advice {
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
+};
+
+struct uverbs_attr_bundle;
+
+struct rdma_cm_id;
+
+struct iw_cm_id;
+
+struct iw_cm_conn_param;
+
+struct ib_qp;
+
+struct ib_send_wr;
+
+struct ib_recv_wr;
+
+struct ib_cq;
+
+struct ib_wc;
+
+struct ib_srq;
+
+struct ib_grh;
+
+struct ib_device_attr;
+
+struct ib_udata;
+
+struct ib_device_modify;
+
+struct ib_port_attr;
+
+struct ib_port_modify;
+
+struct ib_port_immutable;
+
+struct rdma_netdev_alloc_params;
+
+union ib_gid;
+
+struct ib_gid_attr;
+
+struct ib_ucontext;
+
+struct rdma_user_mmap_entry;
+
+struct ib_pd;
+
+struct ib_ah;
+
+struct rdma_ah_init_attr;
+
+struct rdma_ah_attr;
+
+struct ib_srq_init_attr;
+
+struct ib_srq_attr;
+
+struct ib_qp_init_attr;
+
+struct ib_qp_attr;
+
+struct ib_cq_init_attr;
+
+struct ib_mr;
+
+struct ib_sge;
+
+struct ib_mr_status;
+
+struct ib_mw;
+
+struct ib_xrcd;
+
+struct ib_flow;
+
+struct ib_flow_attr;
+
+struct ib_flow_action;
+
+struct ib_wq;
+
+struct ib_wq_init_attr;
+
+struct ib_wq_attr;
+
+struct ib_rwq_ind_table;
+
+struct ib_rwq_ind_table_init_attr;
+
+struct ib_dm;
+
+struct ib_dm_alloc_attr;
+
+struct ib_dm_mr_attr;
+
+struct ib_counters;
+
+struct ib_counters_read_attr;
+
+struct ib_device_ops {
+	struct module *owner;
+	enum rdma_driver_id driver_id;
+	u32 uverbs_abi_ver;
+	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
+	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
+	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	void (*drain_rq)(struct ib_qp *);
+	void (*drain_sq)(struct ib_qp *);
+	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
+	int (*peek_cq)(struct ib_cq *, int);
+	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
+	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
+	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
+	void (*get_dev_fw_str)(struct ib_device *, char *);
+	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
+	int (*add_gid)(const struct ib_gid_attr *, void **);
+	int (*del_gid)(const struct ib_gid_attr *, void **);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
+	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
+	void (*dealloc_ucontext)(struct ib_ucontext *);
+	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
+	void (*mmap_free)(struct rdma_user_mmap_entry *);
+	void (*disassociate_ucontext)(struct ib_ucontext *);
+	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*destroy_ah)(struct ib_ah *, u32);
+	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
+	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
+	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
+	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
+	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
+	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
+	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
+	int (*modify_cq)(struct ib_cq *, u16, u16);
+	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
+	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
+	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
+	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
+	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
+	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
+	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
+	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
+	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
+	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
+	int (*dealloc_mw)(struct ib_mw *);
+	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
+	int (*destroy_flow)(struct ib_flow *);
+	int (*destroy_flow_action)(struct ib_flow_action *);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
+	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
+	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
+	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
+	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
+	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
+	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
+	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
+	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
+	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
+	int (*destroy_counters)(struct ib_counters *);
+	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
+	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
+	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
+	int (*enable_driver)(struct ib_device *);
+	void (*dealloc_driver)(struct ib_device *);
+	void (*iw_add_ref)(struct ib_qp *);
+	void (*iw_rem_ref)(struct ib_qp *);
+	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
+	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
+	int (*iw_create_listen)(struct iw_cm_id *, int);
+	int (*iw_destroy_listen)(struct iw_cm_id *);
+	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
+	int (*counter_unbind_qp)(struct ib_qp *);
+	int (*counter_dealloc)(struct rdma_counter *);
+	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
+	int (*counter_update_stats)(struct rdma_counter *);
+	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
+	size_t size_ib_ah;
+	size_t size_ib_counters;
+	size_t size_ib_cq;
+	size_t size_ib_mw;
+	size_t size_ib_pd;
+	size_t size_ib_qp;
+	size_t size_ib_rwq_ind_table;
+	size_t size_ib_srq;
+	size_t size_ib_ucontext;
+	size_t size_ib_xrcd;
+};
+
+struct ib_core_device {
+	struct device dev;
+	possible_net_t rdma_net;
+	struct kobject *ports_kobj;
+	struct list_head port_list;
+	struct ib_device *owner;
+};
+
+enum ib_atomic_cap {
+	IB_ATOMIC_NONE = 0,
+	IB_ATOMIC_HCA = 1,
+	IB_ATOMIC_GLOB = 2,
+};
+
+struct ib_odp_caps {
+	uint64_t general_caps;
+	struct {
+		uint32_t rc_odp_caps;
+		uint32_t uc_odp_caps;
+		uint32_t ud_odp_caps;
+		uint32_t xrc_odp_caps;
+	} per_transport_caps;
+};
+
+struct ib_rss_caps {
+	u32 supported_qpts;
+	u32 max_rwq_indirection_tables;
+	u32 max_rwq_indirection_table_size;
+};
+
+struct ib_tm_caps {
+	u32 max_rndv_hdr_size;
+	u32 max_num_tags;
+	u32 flags;
+	u32 max_ops;
+	u32 max_sge;
+};
+
+struct ib_cq_caps {
+	u16 max_cq_moderation_count;
+	u16 max_cq_moderation_period;
+};
+
+struct ib_device_attr {
+	u64 fw_ver;
+	__be64 sys_image_guid;
+	u64 max_mr_size;
+	u64 page_size_cap;
+	u32 vendor_id;
+	u32 vendor_part_id;
+	u32 hw_ver;
+	int max_qp;
+	int max_qp_wr;
+	u64 device_cap_flags;
+	u64 kernel_cap_flags;
+	int max_send_sge;
+	int max_recv_sge;
+	int max_sge_rd;
+	int max_cq;
+	int max_cqe;
+	int max_mr;
+	int max_pd;
+	int max_qp_rd_atom;
+	int max_ee_rd_atom;
+	int max_res_rd_atom;
+	int max_qp_init_rd_atom;
+	int max_ee_init_rd_atom;
+	enum ib_atomic_cap atomic_cap;
+	enum ib_atomic_cap masked_atomic_cap;
+	int max_ee;
+	int max_rdd;
+	int max_mw;
+	int max_raw_ipv6_qp;
+	int max_raw_ethy_qp;
+	int max_mcast_grp;
+	int max_mcast_qp_attach;
+	int max_total_mcast_qp_attach;
+	int max_ah;
+	int max_srq;
+	int max_srq_wr;
+	int max_srq_sge;
+	unsigned int max_fast_reg_page_list_len;
+	unsigned int max_pi_fast_reg_page_list_len;
+	u16 max_pkeys;
+	u8 local_ca_ack_delay;
+	int sig_prot_cap;
+	int sig_guard_cap;
+	struct ib_odp_caps odp_caps;
+	uint64_t timestamp_mask;
+	uint64_t hca_core_clock;
+	struct ib_rss_caps rss_caps;
+	u32 max_wq_type_rq;
+	u32 raw_packet_caps;
+	struct ib_tm_caps tm_caps;
+	struct ib_cq_caps cq_caps;
+	u64 max_dm_size;
+	u32 max_sgl_rd;
+};
+
+struct hw_stats_device_data;
+
+struct rdma_restrack_root;
+
+struct uapi_definition;
+
+struct ib_port_data;
+
+struct ib_device {
+	struct device *dma_device;
+	struct ib_device_ops ops;
+	char name[64];
+	struct callback_head callback_head;
+	struct list_head event_handler_list;
+	struct rw_semaphore event_handler_rwsem;
+	spinlock_t qp_open_list_lock;
+	struct rw_semaphore client_data_rwsem;
+	struct xarray client_data;
+	struct mutex unregistration_lock;
+	rwlock_t cache_lock;
+	struct ib_port_data *port_data;
+	int num_comp_vectors;
+	union {
+		struct device dev;
+		struct ib_core_device coredev;
+	};
+	const struct attribute_group *groups[4];
+	u64 uverbs_cmd_mask;
+	char node_desc[64];
+	__be64 node_guid;
+	u32 local_dma_lkey;
+	u16 is_switch: 1;
+	u16 kverbs_provider: 1;
+	u16 use_cq_dim: 1;
+	u8 node_type;
+	u32 phys_port_cnt;
+	struct ib_device_attr attrs;
+	struct hw_stats_device_data *hw_stats_data;
+	u32 index;
+	spinlock_t cq_pools_lock;
+	struct list_head cq_pools[3];
+	struct rdma_restrack_root *res;
+	const struct uapi_definition *driver_def;
+	refcount_t refcount;
+	struct completion unreg_completion;
+	struct work_struct unregistration_work;
+	const struct rdma_link_ops *link_ops;
+	struct mutex compat_devs_mutex;
+	struct xarray compat_devs;
+	char iw_ifname[16];
+	u32 iw_driver_flags;
+	u32 lag_flags;
+};
+
+enum ib_signature_type {
+	IB_SIG_TYPE_NONE = 0,
+	IB_SIG_TYPE_T10_DIF = 1,
+};
+
+enum ib_t10_dif_bg_type {
+	IB_T10DIF_CRC = 0,
+	IB_T10DIF_CSUM = 1,
+};
+
+struct ib_t10_dif_domain {
+	enum ib_t10_dif_bg_type bg_type;
+	u16 pi_interval;
+	u16 bg;
+	u16 app_tag;
+	u32 ref_tag;
+	bool ref_remap;
+	bool app_escape;
+	bool ref_escape;
+	u16 apptag_check_mask;
+};
+
+struct ib_sig_domain {
+	enum ib_signature_type sig_type;
+	union {
+		struct ib_t10_dif_domain dif;
+	} sig;
+};
+
+struct ib_sig_attrs {
+	u8 check_mask;
+	struct ib_sig_domain mem;
+	struct ib_sig_domain wire;
+	int meta_length;
+};
+
+enum ib_sig_err_type {
+	IB_SIG_BAD_GUARD = 0,
+	IB_SIG_BAD_REFTAG = 1,
+	IB_SIG_BAD_APPTAG = 2,
+};
+
+struct ib_sig_err {
+	enum ib_sig_err_type err_type;
+	u32 expected;
+	u32 actual;
+	u64 sig_err_offset;
+	u32 key;
+};
+
+union ib_gid {
+	u8 raw[16];
+	struct {
+		__be64 subnet_prefix;
+		__be64 interface_id;
+	} global;
+};
+
+enum ib_gid_type {
+	IB_GID_TYPE_IB = 0,
+	IB_GID_TYPE_ROCE = 1,
+	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
+	IB_GID_TYPE_SIZE = 3,
+};
+
+struct ib_gid_attr {
+	struct net_device *ndev;
+	struct ib_device *device;
+	union ib_gid gid;
+	enum ib_gid_type gid_type;
+	u16 index;
+	u32 port_num;
+};
+
+struct ib_cq_init_attr {
+	unsigned int cqe;
+	u32 comp_vector;
+	u32 flags;
+};
+
+struct ib_dm_mr_attr {
+	u64 length;
+	u64 offset;
+	u32 access_flags;
+};
+
+struct ib_dm_alloc_attr {
+	u64 length;
+	u32 alignment;
+	u32 flags;
+};
+
+enum ib_mtu {
+	IB_MTU_256 = 1,
+	IB_MTU_512 = 2,
+	IB_MTU_1024 = 3,
+	IB_MTU_2048 = 4,
+	IB_MTU_4096 = 5,
+};
+
+enum ib_port_state {
+	IB_PORT_NOP = 0,
+	IB_PORT_DOWN = 1,
+	IB_PORT_INIT = 2,
+	IB_PORT_ARMED = 3,
+	IB_PORT_ACTIVE = 4,
+	IB_PORT_ACTIVE_DEFER = 5,
+};
+
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
+struct ib_port_attr {
+	u64 subnet_prefix;
+	enum ib_port_state state;
+	enum ib_mtu max_mtu;
+	enum ib_mtu active_mtu;
+	u32 phys_mtu;
+	int gid_tbl_len;
+	unsigned int ip_gids: 1;
+	u32 port_cap_flags;
+	u32 max_msg_sz;
+	u32 bad_pkey_cntr;
+	u32 qkey_viol_cntr;
+	u16 pkey_tbl_len;
+	u32 sm_lid;
+	u32 lid;
+	u8 lmc;
+	u8 max_vl_num;
+	u8 sm_sl;
+	u8 subnet_timeout;
+	u8 init_type_reply;
+	u8 active_width;
+	u16 active_speed;
+	u8 phys_state;
+	u16 port_cap_flags2;
+};
+
+struct ib_device_modify {
+	u64 sys_image_guid;
+	char node_desc[64];
+};
+
+struct ib_port_modify {
+	u32 set_port_cap_mask;
+	u32 clr_port_cap_mask;
+	u8 init_type;
+};
+
+enum ib_event_type {
+	IB_EVENT_CQ_ERR = 0,
+	IB_EVENT_QP_FATAL = 1,
+	IB_EVENT_QP_REQ_ERR = 2,
+	IB_EVENT_QP_ACCESS_ERR = 3,
+	IB_EVENT_COMM_EST = 4,
+	IB_EVENT_SQ_DRAINED = 5,
+	IB_EVENT_PATH_MIG = 6,
+	IB_EVENT_PATH_MIG_ERR = 7,
+	IB_EVENT_DEVICE_FATAL = 8,
+	IB_EVENT_PORT_ACTIVE = 9,
+	IB_EVENT_PORT_ERR = 10,
+	IB_EVENT_LID_CHANGE = 11,
+	IB_EVENT_PKEY_CHANGE = 12,
+	IB_EVENT_SM_CHANGE = 13,
+	IB_EVENT_SRQ_ERR = 14,
+	IB_EVENT_SRQ_LIMIT_REACHED = 15,
+	IB_EVENT_QP_LAST_WQE_REACHED = 16,
+	IB_EVENT_CLIENT_REREGISTER = 17,
+	IB_EVENT_GID_CHANGE = 18,
+	IB_EVENT_WQ_FATAL = 19,
+};
+
+struct ib_ucq_object;
+
+typedef void (*ib_comp_handler)(struct ib_cq *, void *);
+
+struct ib_event;
+
+struct ib_cq {
+	struct ib_device *device;
+	struct ib_ucq_object *uobject;
+	ib_comp_handler comp_handler;
+	void (*event_handler)(struct ib_event *, void *);
+	void *cq_context;
+	int cqe;
+	unsigned int cqe_used;
+	atomic_t usecnt;
+	enum ib_poll_context poll_ctx;
+	struct ib_wc *wc;
+	struct list_head pool_entry;
+	union {
+		struct irq_poll iop;
+		struct work_struct work;
+	};
+	struct workqueue_struct *comp_wq;
+	struct dim *dim;
+	ktime_t timestamp;
+	u8 interrupt: 1;
+	u8 shared: 1;
+	unsigned int comp_vector;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uqp_object;
+
+enum ib_qp_type {
+	IB_QPT_SMI = 0,
+	IB_QPT_GSI = 1,
+	IB_QPT_RC = 2,
+	IB_QPT_UC = 3,
+	IB_QPT_UD = 4,
+	IB_QPT_RAW_IPV6 = 5,
+	IB_QPT_RAW_ETHERTYPE = 6,
+	IB_QPT_RAW_PACKET = 8,
+	IB_QPT_XRC_INI = 9,
+	IB_QPT_XRC_TGT = 10,
+	IB_QPT_MAX = 11,
+	IB_QPT_DRIVER = 255,
+	IB_QPT_RESERVED1 = 4096,
+	IB_QPT_RESERVED2 = 4097,
+	IB_QPT_RESERVED3 = 4098,
+	IB_QPT_RESERVED4 = 4099,
+	IB_QPT_RESERVED5 = 4100,
+	IB_QPT_RESERVED6 = 4101,
+	IB_QPT_RESERVED7 = 4102,
+	IB_QPT_RESERVED8 = 4103,
+	IB_QPT_RESERVED9 = 4104,
+	IB_QPT_RESERVED10 = 4105,
+};
+
+struct ib_qp_security;
+
+struct ib_qp {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	spinlock_t mr_lock;
+	int mrs_used;
+	struct list_head rdma_mrs;
+	struct list_head sig_mrs;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct list_head xrcd_list;
+	atomic_t usecnt;
+	struct list_head open_list;
+	struct ib_qp *real_qp;
+	struct ib_uqp_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	const struct ib_gid_attr *av_sgid_attr;
+	const struct ib_gid_attr *alt_path_sgid_attr;
+	u32 qp_num;
+	u32 max_write_sge;
+	u32 max_read_sge;
+	enum ib_qp_type qp_type;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	struct ib_qp_security *qp_sec;
+	u32 port;
+	bool integrity_en;
+	struct rdma_restrack_entry res;
+	struct rdma_counter *counter;
+};
+
+struct ib_usrq_object;
+
+enum ib_srq_type {
+	IB_SRQT_BASIC = 0,
+	IB_SRQT_XRC = 1,
+	IB_SRQT_TM = 2,
+};
+
+struct ib_srq {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_usrq_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	enum ib_srq_type srq_type;
+	atomic_t usecnt;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+				u32 srq_num;
+			} xrc;
+		};
+	} ext;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uwq_object;
+
+enum ib_wq_state {
+	IB_WQS_RESET = 0,
+	IB_WQS_RDY = 1,
+	IB_WQS_ERR = 2,
+};
+
+enum ib_wq_type {
+	IB_WQT_RQ = 0,
+};
+
+struct ib_wq {
+	struct ib_device *device;
+	struct ib_uwq_object *uobject;
+	void *wq_context;
+	void (*event_handler)(struct ib_event *, void *);
+	struct ib_pd *pd;
+	struct ib_cq *cq;
+	u32 wq_num;
+	enum ib_wq_state state;
+	enum ib_wq_type wq_type;
+	atomic_t usecnt;
+};
+
+struct ib_event {
+	struct ib_device *device;
+	union {
+		struct ib_cq *cq;
+		struct ib_qp *qp;
+		struct ib_srq *srq;
+		struct ib_wq *wq;
+		u32 port_num;
+	} element;
+	enum ib_event_type event;
+};
+
+struct ib_global_route {
+	const struct ib_gid_attr *sgid_attr;
+	union ib_gid dgid;
+	u32 flow_label;
+	u8 sgid_index;
+	u8 hop_limit;
+	u8 traffic_class;
+};
+
+struct ib_grh {
+	__be32 version_tclass_flow;
+	__be16 paylen;
+	u8 next_hdr;
+	u8 hop_limit;
+	union ib_gid sgid;
+	union ib_gid dgid;
+};
+
+struct ib_mr_status {
+	u32 fail_status;
+	struct ib_sig_err sig_err;
+};
+
+struct rdma_ah_init_attr {
+	struct rdma_ah_attr *ah_attr;
+	u32 flags;
+	struct net_device *xmit_slave;
+};
+
+enum rdma_ah_attr_type {
+	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
+	RDMA_AH_ATTR_TYPE_IB = 1,
+	RDMA_AH_ATTR_TYPE_ROCE = 2,
+	RDMA_AH_ATTR_TYPE_OPA = 3,
+};
+
+struct ib_ah_attr {
+	u16 dlid;
+	u8 src_path_bits;
+};
+
+struct roce_ah_attr {
+	u8 dmac[6];
+};
+
+struct opa_ah_attr {
+	u32 dlid;
+	u8 src_path_bits;
+	bool make_grd;
+};
+
+struct rdma_ah_attr {
+	struct ib_global_route grh;
+	u8 sl;
+	u8 static_rate;
+	u32 port_num;
+	u8 ah_flags;
+	enum rdma_ah_attr_type type;
+	union {
+		struct ib_ah_attr ib;
+		struct roce_ah_attr roce;
+		struct opa_ah_attr opa;
+	};
+};
+
+enum ib_wc_status {
+	IB_WC_SUCCESS = 0,
+	IB_WC_LOC_LEN_ERR = 1,
+	IB_WC_LOC_QP_OP_ERR = 2,
+	IB_WC_LOC_EEC_OP_ERR = 3,
+	IB_WC_LOC_PROT_ERR = 4,
+	IB_WC_WR_FLUSH_ERR = 5,
+	IB_WC_MW_BIND_ERR = 6,
+	IB_WC_BAD_RESP_ERR = 7,
+	IB_WC_LOC_ACCESS_ERR = 8,
+	IB_WC_REM_INV_REQ_ERR = 9,
+	IB_WC_REM_ACCESS_ERR = 10,
+	IB_WC_REM_OP_ERR = 11,
+	IB_WC_RETRY_EXC_ERR = 12,
+	IB_WC_RNR_RETRY_EXC_ERR = 13,
+	IB_WC_LOC_RDD_VIOL_ERR = 14,
+	IB_WC_REM_INV_RD_REQ_ERR = 15,
+	IB_WC_REM_ABORT_ERR = 16,
+	IB_WC_INV_EECN_ERR = 17,
+	IB_WC_INV_EEC_STATE_ERR = 18,
+	IB_WC_FATAL_ERR = 19,
+	IB_WC_RESP_TIMEOUT_ERR = 20,
+	IB_WC_GENERAL_ERR = 21,
+};
+
+enum ib_wc_opcode {
+	IB_WC_SEND = 0,
+	IB_WC_RDMA_WRITE = 1,
+	IB_WC_RDMA_READ = 2,
+	IB_WC_COMP_SWAP = 3,
+	IB_WC_FETCH_ADD = 4,
+	IB_WC_BIND_MW = 5,
+	IB_WC_LOCAL_INV = 6,
+	IB_WC_LSO = 7,
+	IB_WC_REG_MR = 8,
+	IB_WC_MASKED_COMP_SWAP = 9,
+	IB_WC_MASKED_FETCH_ADD = 10,
+	IB_WC_RECV = 128,
+	IB_WC_RECV_RDMA_WITH_IMM = 129,
+};
+
+struct ib_cqe {
+	void (*done)(struct ib_cq *, struct ib_wc *);
+};
+
+struct ib_wc {
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	enum ib_wc_status status;
+	enum ib_wc_opcode opcode;
+	u32 vendor_err;
+	u32 byte_len;
+	struct ib_qp *qp;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+	u32 src_qp;
+	u32 slid;
+	int wc_flags;
+	u16 pkey_index;
+	u8 sl;
+	u8 dlid_path_bits;
+	u32 port_num;
+	u8 smac[6];
+	u16 vlan_id;
+	u8 network_hdr_type;
+};
+
+struct ib_srq_attr {
+	u32 max_wr;
+	u32 max_sge;
+	u32 srq_limit;
+};
+
+struct ib_xrcd {
+	struct ib_device *device;
+	atomic_t usecnt;
+	struct inode *inode;
+	struct rw_semaphore tgt_qps_rwsem;
+	struct xarray tgt_qps;
+};
+
+struct ib_srq_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	struct ib_srq_attr attr;
+	enum ib_srq_type srq_type;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+			} xrc;
+			struct {
+				u32 max_num_tags;
+			} tag_matching;
+		};
+	} ext;
+};
+
+struct ib_qp_cap {
+	u32 max_send_wr;
+	u32 max_recv_wr;
+	u32 max_send_sge;
+	u32 max_recv_sge;
+	u32 max_inline_data;
+	u32 max_rdma_ctxs;
+};
+
+enum ib_sig_type {
+	IB_SIGNAL_ALL_WR = 0,
+	IB_SIGNAL_REQ_WR = 1,
+};
+
+struct ib_qp_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct ib_qp_cap cap;
+	enum ib_sig_type sq_sig_type;
+	enum ib_qp_type qp_type;
+	u32 create_flags;
+	u32 port_num;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	u32 source_qpn;
+};
+
+struct ib_uobject;
+
+struct ib_rwq_ind_table {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 ind_tbl_num;
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum ib_qp_state {
+	IB_QPS_RESET = 0,
+	IB_QPS_INIT = 1,
+	IB_QPS_RTR = 2,
+	IB_QPS_RTS = 3,
+	IB_QPS_SQD = 4,
+	IB_QPS_SQE = 5,
+	IB_QPS_ERR = 6,
+};
+
+enum ib_mig_state {
+	IB_MIG_MIGRATED = 0,
+	IB_MIG_REARM = 1,
+	IB_MIG_ARMED = 2,
+};
+
+enum ib_mw_type {
+	IB_MW_TYPE_1 = 1,
+	IB_MW_TYPE_2 = 2,
+};
+
+struct ib_qp_attr {
+	enum ib_qp_state qp_state;
+	enum ib_qp_state cur_qp_state;
+	enum ib_mtu path_mtu;
+	enum ib_mig_state path_mig_state;
+	u32 qkey;
+	u32 rq_psn;
+	u32 sq_psn;
+	u32 dest_qp_num;
+	int qp_access_flags;
+	struct ib_qp_cap cap;
+	struct rdma_ah_attr ah_attr;
+	struct rdma_ah_attr alt_ah_attr;
+	u16 pkey_index;
+	u16 alt_pkey_index;
+	u8 en_sqd_async_notify;
+	u8 sq_draining;
+	u8 max_rd_atomic;
+	u8 max_dest_rd_atomic;
+	u8 min_rnr_timer;
+	u32 port_num;
+	u8 timeout;
+	u8 retry_cnt;
+	u8 rnr_retry;
+	u32 alt_port_num;
+	u8 alt_timeout;
+	u32 rate_limit;
+	struct net_device *xmit_slave;
+};
+
+enum ib_wr_opcode {
+	IB_WR_RDMA_WRITE = 0,
+	IB_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_WR_SEND = 2,
+	IB_WR_SEND_WITH_IMM = 3,
+	IB_WR_RDMA_READ = 4,
+	IB_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_WR_BIND_MW = 8,
+	IB_WR_LSO = 10,
+	IB_WR_SEND_WITH_INV = 9,
+	IB_WR_RDMA_READ_WITH_INV = 11,
+	IB_WR_LOCAL_INV = 7,
+	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_WR_REG_MR = 32,
+	IB_WR_REG_MR_INTEGRITY = 33,
+	IB_WR_RESERVED1 = 240,
+	IB_WR_RESERVED2 = 241,
+	IB_WR_RESERVED3 = 242,
+	IB_WR_RESERVED4 = 243,
+	IB_WR_RESERVED5 = 244,
+	IB_WR_RESERVED6 = 245,
+	IB_WR_RESERVED7 = 246,
+	IB_WR_RESERVED8 = 247,
+	IB_WR_RESERVED9 = 248,
+	IB_WR_RESERVED10 = 249,
+};
+
+struct ib_sge {
+	u64 addr;
+	u32 length;
+	u32 lkey;
+};
+
+struct ib_send_wr {
+	struct ib_send_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+	enum ib_wr_opcode opcode;
+	int send_flags;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+};
+
+struct ib_ah {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_ah_attr_type type;
+};
+
+struct ib_mr {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	u32 lkey;
+	u32 rkey;
+	u64 iova;
+	u64 length;
+	unsigned int page_size;
+	enum ib_mr_type type;
+	bool need_inval;
+	union {
+		struct ib_uobject *uobject;
+		struct list_head qp_entry;
+	};
+	struct ib_dm *dm;
+	struct ib_sig_attrs *sig_attrs;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_recv_wr {
+	struct ib_recv_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+};
+
+struct ib_rdmacg_object {};
+
+struct ib_uverbs_file;
+
+struct ib_ucontext {
+	struct ib_device *device;
+	struct ib_uverbs_file *ufile;
+	struct ib_rdmacg_object cg_obj;
+	struct rdma_restrack_entry res;
+	struct xarray mmap_xa;
+};
+
+struct uverbs_api_object;
+
+struct ib_uobject {
+	u64 user_handle;
+	struct ib_uverbs_file *ufile;
+	struct ib_ucontext *context;
+	void *object;
+	struct list_head list;
+	struct ib_rdmacg_object cg_obj;
+	int id;
+	struct kref ref;
+	atomic_t usecnt;
+	struct callback_head rcu;
+	const struct uverbs_api_object *uapi_object;
+};
+
+struct ib_udata {
+	const void *inbuf;
+	void *outbuf;
+	size_t inlen;
+	size_t outlen;
+};
+
+struct ib_pd {
+	u32 local_dma_lkey;
+	u32 flags;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 unsafe_global_rkey;
+	struct ib_mr *__internal_mr;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_wq_init_attr {
+	void *wq_context;
+	enum ib_wq_type wq_type;
+	u32 max_wr;
+	u32 max_sge;
+	struct ib_cq *cq;
+	void (*event_handler)(struct ib_event *, void *);
+	u32 create_flags;
+};
+
+struct ib_wq_attr {
+	enum ib_wq_state wq_state;
+	enum ib_wq_state curr_wq_state;
+	u32 flags;
+	u32 flags_mask;
+};
+
+struct ib_rwq_ind_table_init_attr {
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum port_pkey_state {
+	IB_PORT_PKEY_NOT_VALID = 0,
+	IB_PORT_PKEY_VALID = 1,
+	IB_PORT_PKEY_LISTED = 2,
+};
+
+struct ib_port_pkey {
+	enum port_pkey_state state;
+	u16 pkey_index;
+	u32 port_num;
+	struct list_head qp_list;
+	struct list_head to_error_list;
+	struct ib_qp_security *sec;
+};
+
+struct ib_ports_pkeys;
+
+struct ib_qp_security {
+	struct ib_qp *qp;
+	struct ib_device *dev;
+	struct mutex mutex;
+	struct ib_ports_pkeys *ports_pkeys;
+	struct list_head shared_qp_list;
+	void *security;
+	bool destroying;
+	atomic_t error_list_count;
+	struct completion error_complete;
+	int error_comps_pending;
+};
+
+struct ib_ports_pkeys {
+	struct ib_port_pkey main;
+	struct ib_port_pkey alt;
+};
+
+struct ib_dm {
+	struct ib_device *device;
+	u32 length;
+	u32 flags;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+struct ib_mw {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	u32 rkey;
+	enum ib_mw_type type;
+};
+
+enum ib_flow_attr_type {
+	IB_FLOW_ATTR_NORMAL = 0,
+	IB_FLOW_ATTR_ALL_DEFAULT = 1,
+	IB_FLOW_ATTR_MC_DEFAULT = 2,
+	IB_FLOW_ATTR_SNIFFER = 3,
+};
+
+enum ib_flow_spec_type {
+	IB_FLOW_SPEC_ETH = 32,
+	IB_FLOW_SPEC_IB = 34,
+	IB_FLOW_SPEC_IPV4 = 48,
+	IB_FLOW_SPEC_IPV6 = 49,
+	IB_FLOW_SPEC_ESP = 52,
+	IB_FLOW_SPEC_TCP = 64,
+	IB_FLOW_SPEC_UDP = 65,
+	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
+	IB_FLOW_SPEC_GRE = 81,
+	IB_FLOW_SPEC_MPLS = 96,
+	IB_FLOW_SPEC_INNER = 256,
+	IB_FLOW_SPEC_ACTION_TAG = 4096,
+	IB_FLOW_SPEC_ACTION_DROP = 4097,
+	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
+	IB_FLOW_SPEC_ACTION_COUNT = 4099,
+};
+
+struct ib_flow_eth_filter {
+	u8 dst_mac[6];
+	u8 src_mac[6];
+	__be16 ether_type;
+	__be16 vlan_tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_eth {
+	u32 type;
+	u16 size;
+	struct ib_flow_eth_filter val;
+	struct ib_flow_eth_filter mask;
+};
+
+struct ib_flow_ib_filter {
+	__be16 dlid;
+	__u8 sl;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ib {
+	u32 type;
+	u16 size;
+	struct ib_flow_ib_filter val;
+	struct ib_flow_ib_filter mask;
+};
+
+struct ib_flow_ipv4_filter {
+	__be32 src_ip;
+	__be32 dst_ip;
+	u8 proto;
+	u8 tos;
+	u8 ttl;
+	u8 flags;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv4 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv4_filter val;
+	struct ib_flow_ipv4_filter mask;
+};
+
+struct ib_flow_ipv6_filter {
+	u8 src_ip[16];
+	u8 dst_ip[16];
+	__be32 flow_label;
+	u8 next_hdr;
+	u8 traffic_class;
+	u8 hop_limit;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv6 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv6_filter val;
+	struct ib_flow_ipv6_filter mask;
+};
+
+struct ib_flow_tcp_udp_filter {
+	__be16 dst_port;
+	__be16 src_port;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tcp_udp {
+	u32 type;
+	u16 size;
+	struct ib_flow_tcp_udp_filter val;
+	struct ib_flow_tcp_udp_filter mask;
+};
+
+struct ib_flow_tunnel_filter {
+	__be32 tunnel_id;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tunnel {
+	u32 type;
+	u16 size;
+	struct ib_flow_tunnel_filter val;
+	struct ib_flow_tunnel_filter mask;
+};
+
+struct ib_flow_esp_filter {
+	__be32 spi;
+	__be32 seq;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_esp {
+	u32 type;
+	u16 size;
+	struct ib_flow_esp_filter val;
+	struct ib_flow_esp_filter mask;
+};
+
+struct ib_flow_gre_filter {
+	__be16 c_ks_res0_ver;
+	__be16 protocol;
+	__be32 key;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_gre {
+	u32 type;
+	u16 size;
+	struct ib_flow_gre_filter val;
+	struct ib_flow_gre_filter mask;
+};
+
+struct ib_flow_mpls_filter {
+	__be32 tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_mpls {
+	u32 type;
+	u16 size;
+	struct ib_flow_mpls_filter val;
+	struct ib_flow_mpls_filter mask;
+};
+
+struct ib_flow_spec_action_tag {
+	enum ib_flow_spec_type type;
+	u16 size;
+	u32 tag_id;
+};
+
+struct ib_flow_spec_action_drop {
+	enum ib_flow_spec_type type;
+	u16 size;
+};
+
+struct ib_flow_spec_action_handle {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_flow_action *act;
+};
+
+enum ib_flow_action_type {
+	IB_FLOW_ACTION_UNSPECIFIED = 0,
+	IB_FLOW_ACTION_ESP = 1,
+};
+
+struct ib_flow_action {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	enum ib_flow_action_type type;
+	atomic_t usecnt;
+};
+
+struct ib_flow_spec_action_count {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_counters *counters;
+};
+
+struct ib_counters {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+union ib_flow_spec {
+	struct {
+		u32 type;
+		u16 size;
+	};
+	struct ib_flow_spec_eth eth;
+	struct ib_flow_spec_ib ib;
+	struct ib_flow_spec_ipv4 ipv4;
+	struct ib_flow_spec_tcp_udp tcp_udp;
+	struct ib_flow_spec_ipv6 ipv6;
+	struct ib_flow_spec_tunnel tunnel;
+	struct ib_flow_spec_esp esp;
+	struct ib_flow_spec_gre gre;
+	struct ib_flow_spec_mpls mpls;
+	struct ib_flow_spec_action_tag flow_tag;
+	struct ib_flow_spec_action_drop drop;
+	struct ib_flow_spec_action_handle action;
+	struct ib_flow_spec_action_count flow_count;
+};
+
+struct ib_flow_attr {
+	enum ib_flow_attr_type type;
+	u16 size;
+	u16 priority;
+	u32 flags;
+	u8 num_of_specs;
+	u32 port;
+	union ib_flow_spec flows[0];
+};
+
+struct ib_flow {
+	struct ib_qp *qp;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+};
+
+struct ib_pkey_cache;
+
+struct ib_gid_table;
+
+struct ib_port_cache {
+	u64 subnet_prefix;
+	struct ib_pkey_cache *pkey;
+	struct ib_gid_table *gid;
+	u8 lmc;
+	enum ib_port_state port_state;
+};
+
+struct ib_port_immutable {
+	int pkey_tbl_len;
+	int gid_tbl_len;
+	u32 core_cap_flags;
+	u32 max_mad_size;
+};
+
+struct ib_port;
+
+struct ib_port_data {
+	struct ib_device *ib_dev;
+	struct ib_port_immutable immutable;
+	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
+	struct list_head pkey_list;
+	struct ib_port_cache cache;
+	struct net_device *netdev;
+	struct hlist_node ndev_hash_link;
+	struct rdma_port_counter port_counter;
+	struct ib_port *sysfs;
+};
+
+struct rdma_netdev_alloc_params {
+	size_t sizeof_priv;
+	unsigned int txqs;
+	unsigned int rxqs;
+	void *param;
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
+};
+
+struct ib_counters_read_attr {
+	u64 *counters_buff;
+	u32 ncounters;
+	u32 flags;
+};
+
+struct rdma_user_mmap_entry {
+	struct kref ref;
+	struct ib_ucontext *ucontext;
+	long unsigned int start_pgoff;
+	size_t npages;
+	bool driver_removed;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	long unsigned int state;
+	struct completion exited;
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+union nested_table {
+	union nested_table *table;
+	struct rhash_lock_head *bucket;
+};
+
+struct sw842_hlist_node8 {
+	struct hlist_node node;
+	u64 data;
+	u8 index;
+};
+
+struct sw842_hlist_node4 {
+	struct hlist_node node;
+	u32 data;
+	u16 index;
+};
+
+struct sw842_hlist_node2 {
+	struct hlist_node node;
+	u16 data;
+	u8 index;
+};
+
+struct sw842_param {
+	u8 *in;
+	u8 *instart;
+	u64 ilen;
+	u8 *out;
+	u64 olen;
+	u8 bit;
+	u64 data8[1];
+	u32 data4[2];
+	u16 data2[4];
+	int index8[1];
+	int index4[2];
+	int index2[4];
+	struct hlist_head htable8[1024];
+	struct hlist_head htable4[2048];
+	struct hlist_head htable2[1024];
+	struct sw842_hlist_node8 node8[256];
+	struct sw842_hlist_node4 node4[512];
+	struct sw842_hlist_node2 node2[256];
+};
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	BYTE maxTableLog;
+	BYTE tableType;
+	BYTE tableLog;
+	BYTE reserved;
+} DTableDesc;
+
+typedef struct {
+	BYTE byte;
+	BYTE nbBits;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[16];
+	U32 rankStart[16];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
+
+typedef struct {
+	U16 sequence;
+	BYTE nbBits;
+	BYTE length;
+} HUF_DEltX2;
+
+typedef struct {
+	BYTE symbol;
+	BYTE weight;
+} sortedSymbol_t;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+	U32 rankVal[156];
+	U32 rankStats[13];
+	U32 rankStart0[14];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+	U32 tableTime;
+	U32 decode256Time;
+} algo_time_t;
+
+struct raid6_calls {
+	void (*gen_syndrome)(int, size_t, void **);
+	void (*xor_syndrome)(int, int, int, size_t, void **);
+	int (*valid)();
+	const char *name;
+	int priority;
+};
+
+struct raid6_recov_calls {
+	void (*data2)(int, size_t, int, int, void **);
+	void (*datap)(int, size_t, int, void **);
+	int (*valid)();
+	const char *name;
+	int priority;
+};
+
+typedef unsigned char uint8_t___2;
+
+typedef signed char int8x16_t[16];
+
+typedef unsigned char __Poly8_t;
+
+typedef __Poly8_t poly8x16_t[16];
+
+typedef unsigned char uint8x16_t[16];
+
+typedef uint8x16_t unative_t;
+
+struct ddebug_table {
+	struct list_head link;
+	const char *mod_name;
+	unsigned int num_ddebugs;
+	struct _ddebug *ddebugs;
+};
+
+struct ddebug_query {
+	const char *filename;
+	const char *module;
+	const char *function;
+	const char *format;
+	unsigned int first_lineno;
+	unsigned int last_lineno;
+};
+
+struct ddebug_iter {
+	struct ddebug_table *table;
+	unsigned int idx;
+};
+
+struct flag_settings {
+	unsigned int flags;
+	unsigned int mask;
+};
+
+struct flagsbuf {
+	char buf[7];
+};
+
+struct fdt_errtabent {
+	const char *str;
+};
+
+typedef __be64 fdt64_t;
+
+struct fdt_reserve_entry {
+	fdt64_t address;
+	fdt64_t size;
+};
+
+struct fdt_node_header {
+	fdt32_t tag;
+	char name[0];
+};
+
+struct fdt_property {
+	fdt32_t tag;
+	fdt32_t len;
+	fdt32_t nameoff;
+	char data[0];
+};
+
+enum al_fic_state {
+	AL_FIC_UNCONFIGURED = 0,
+	AL_FIC_CONFIGURED_LEVEL = 1,
+	AL_FIC_CONFIGURED_RISING_EDGE = 2,
+};
+
+struct al_fic {
+	void *base;
+	struct irq_domain *domain;
+	const char *name;
+	unsigned int parent_irq;
+	enum al_fic_state state;
+};
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+struct acpi_madt_generic_distributor {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 gic_id;
+	u64 base_address;
+	u32 global_irq_base;
+	u8 version;
+	u8 reserved2[3];
+};
+
+enum acpi_madt_gic_version {
+	ACPI_MADT_GIC_VERSION_NONE = 0,
+	ACPI_MADT_GIC_VERSION_V1 = 1,
+	ACPI_MADT_GIC_VERSION_V2 = 2,
+	ACPI_MADT_GIC_VERSION_V3 = 3,
+	ACPI_MADT_GIC_VERSION_V4 = 4,
+	ACPI_MADT_GIC_VERSION_RESERVED = 5,
+};
+
+enum acpi_irq_model_id {
+	ACPI_IRQ_MODEL_PIC = 0,
+	ACPI_IRQ_MODEL_IOAPIC = 1,
+	ACPI_IRQ_MODEL_IOSAPIC = 2,
+	ACPI_IRQ_MODEL_PLATFORM = 3,
+	ACPI_IRQ_MODEL_GIC = 4,
+	ACPI_IRQ_MODEL_LPIC = 5,
+	ACPI_IRQ_MODEL_COUNT = 6,
+};
+
+enum gic_type {
+	GIC_V2 = 0,
+	GIC_V3 = 1,
+};
+
+struct gic_kvm_info {
+	enum gic_type type;
+	struct resource vcpu;
+	unsigned int maint_irq;
+	bool no_maint_irq_mask;
+	struct resource vctrl;
+	bool has_v4;
+	bool has_v4_1;
+	bool no_hw_deactivation;
+};
+
+union gic_base {
+	void *common_base;
+	void **percpu_base;
+};
+
+struct gic_chip_data {
+	union gic_base dist_base;
+	union gic_base cpu_base;
+	void *raw_dist_base;
+	void *raw_cpu_base;
+	u32 percpu_offset;
+	u32 saved_spi_enable[32];
+	u32 saved_spi_active[32];
+	u32 saved_spi_conf[64];
+	u32 saved_spi_target[255];
+	u32 *saved_ppi_enable;
+	u32 *saved_ppi_active;
+	u32 *saved_ppi_conf;
+	struct irq_domain *domain;
+	unsigned int gic_irqs;
+};
+
+enum its_vcpu_info_cmd_type {
+	MAP_VLPI = 0,
+	GET_VLPI = 1,
+	PROP_UPDATE_VLPI = 2,
+	PROP_UPDATE_AND_INV_VLPI = 3,
+	SCHEDULE_VPE = 4,
+	DESCHEDULE_VPE = 5,
+	COMMIT_VPE = 6,
+	INVALL_VPE = 7,
+	PROP_UPDATE_VSGI = 8,
+};
+
+struct its_cmd_info {
+	enum its_vcpu_info_cmd_type cmd_type;
+	union {
+		struct its_vlpi_map *map;
+		u8 config;
+		bool req_db;
+		struct {
+			bool g0en;
+			bool g1en;
+		};
+		struct {
+			u8 priority;
+			bool group;
+		};
+	};
+};
+
+struct xintc_irq_chip {
+	void *base;
+	struct irq_domain *root_domain;
+	u32 intr_mask;
+	u32 nr_irq;
+};
+
+struct mvebu_sei_interrupt_range {
+	u32 first;
 	u32 size;
-	char elements[0];
+};
+
+struct mvebu_sei_caps {
+	struct mvebu_sei_interrupt_range ap_range;
+	struct mvebu_sei_interrupt_range cp_range;
+};
+
+struct mvebu_sei {
+	struct device *dev;
+	void *base;
+	struct resource *res;
+	struct irq_domain *sei_domain;
+	struct irq_domain *ap_domain;
+	struct irq_domain *cp_domain;
+	const struct mvebu_sei_caps *caps;
+	struct mutex cp_msi_lock;
+	long unsigned int cp_msi_bitmap[1];
+	raw_spinlock_t mask_lock;
+};
+
+struct ti_sci_version_info {
+	u8 abi_major;
+	u8 abi_minor;
+	u16 firmware_revision;
+	char firmware_description[32];
+};
+
+struct ti_sci_handle;
+
+struct ti_sci_core_ops {
+	int (*reboot_device)(const struct ti_sci_handle *);
+};
+
+struct ti_sci_dev_ops {
+	int (*get_device)(const struct ti_sci_handle *, u32);
+	int (*get_device_exclusive)(const struct ti_sci_handle *, u32);
+	int (*idle_device)(const struct ti_sci_handle *, u32);
+	int (*idle_device_exclusive)(const struct ti_sci_handle *, u32);
+	int (*put_device)(const struct ti_sci_handle *, u32);
+	int (*is_valid)(const struct ti_sci_handle *, u32);
+	int (*get_context_loss_count)(const struct ti_sci_handle *, u32, u32 *);
+	int (*is_idle)(const struct ti_sci_handle *, u32, bool *);
+	int (*is_stop)(const struct ti_sci_handle *, u32, bool *, bool *);
+	int (*is_on)(const struct ti_sci_handle *, u32, bool *, bool *);
+	int (*is_transitioning)(const struct ti_sci_handle *, u32, bool *);
+	int (*set_device_resets)(const struct ti_sci_handle *, u32, u32);
+	int (*get_device_resets)(const struct ti_sci_handle *, u32, u32 *);
+};
+
+struct ti_sci_clk_ops {
+	int (*get_clock)(const struct ti_sci_handle *, u32, u32, bool, bool, bool);
+	int (*idle_clock)(const struct ti_sci_handle *, u32, u32);
+	int (*put_clock)(const struct ti_sci_handle *, u32, u32);
+	int (*is_auto)(const struct ti_sci_handle *, u32, u32, bool *);
+	int (*is_on)(const struct ti_sci_handle *, u32, u32, bool *, bool *);
+	int (*is_off)(const struct ti_sci_handle *, u32, u32, bool *, bool *);
+	int (*set_parent)(const struct ti_sci_handle *, u32, u32, u32);
+	int (*get_parent)(const struct ti_sci_handle *, u32, u32, u32 *);
+	int (*get_num_parents)(const struct ti_sci_handle *, u32, u32, u32 *);
+	int (*get_best_match_freq)(const struct ti_sci_handle *, u32, u32, u64, u64, u64, u64 *);
+	int (*set_freq)(const struct ti_sci_handle *, u32, u32, u64, u64, u64);
+	int (*get_freq)(const struct ti_sci_handle *, u32, u32, u64 *);
+};
+
+struct ti_sci_rm_core_ops {
+	int (*get_range)(const struct ti_sci_handle *, u32, u8, struct ti_sci_resource_desc *);
+	int (*get_range_from_shost)(const struct ti_sci_handle *, u32, u8, u8, struct ti_sci_resource_desc *);
+};
+
+struct ti_sci_rm_irq_ops {
+	int (*set_irq)(const struct ti_sci_handle *, u16, u16, u16, u16);
+	int (*set_event_map)(const struct ti_sci_handle *, u16, u16, u16, u16, u16, u8);
+	int (*free_irq)(const struct ti_sci_handle *, u16, u16, u16, u16);
+	int (*free_event_map)(const struct ti_sci_handle *, u16, u16, u16, u16, u16, u8);
+};
+
+struct ti_sci_msg_rm_ring_cfg;
+
+struct ti_sci_rm_ringacc_ops {
+	int (*set_cfg)(const struct ti_sci_handle *, const struct ti_sci_msg_rm_ring_cfg *);
+};
+
+struct ti_sci_rm_psil_ops {
+	int (*pair)(const struct ti_sci_handle *, u32, u32, u32);
+	int (*unpair)(const struct ti_sci_handle *, u32, u32, u32);
+};
+
+struct ti_sci_msg_rm_udmap_tx_ch_cfg;
+
+struct ti_sci_msg_rm_udmap_rx_ch_cfg;
+
+struct ti_sci_msg_rm_udmap_flow_cfg;
+
+struct ti_sci_rm_udmap_ops {
+	int (*tx_ch_cfg)(const struct ti_sci_handle *, const struct ti_sci_msg_rm_udmap_tx_ch_cfg *);
+	int (*rx_ch_cfg)(const struct ti_sci_handle *, const struct ti_sci_msg_rm_udmap_rx_ch_cfg *);
+	int (*rx_flow_cfg)(const struct ti_sci_handle *, const struct ti_sci_msg_rm_udmap_flow_cfg *);
+};
+
+struct ti_sci_proc_ops {
+	int (*request)(const struct ti_sci_handle *, u8);
+	int (*release)(const struct ti_sci_handle *, u8);
+	int (*handover)(const struct ti_sci_handle *, u8, u8);
+	int (*set_config)(const struct ti_sci_handle *, u8, u64, u32, u32);
+	int (*set_control)(const struct ti_sci_handle *, u8, u32, u32);
+	int (*get_status)(const struct ti_sci_handle *, u8, u64 *, u32 *, u32 *, u32 *);
+};
+
+struct ti_sci_ops {
+	struct ti_sci_core_ops core_ops;
+	struct ti_sci_dev_ops dev_ops;
+	struct ti_sci_clk_ops clk_ops;
+	struct ti_sci_rm_core_ops rm_core_ops;
+	struct ti_sci_rm_irq_ops rm_irq_ops;
+	struct ti_sci_rm_ringacc_ops rm_ring_ops;
+	struct ti_sci_rm_psil_ops rm_psil_ops;
+	struct ti_sci_rm_udmap_ops rm_udmap_ops;
+	struct ti_sci_proc_ops proc_ops;
+};
+
+struct ti_sci_handle {
+	struct ti_sci_version_info version;
+	struct ti_sci_ops ops;
+};
+
+struct ti_sci_msg_rm_ring_cfg {
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u32 addr_lo;
+	u32 addr_hi;
+	u32 count;
+	u8 mode;
+	u8 size;
+	u8 order_id;
+	u16 virtid;
+	u8 asel;
+};
+
+struct ti_sci_msg_rm_udmap_tx_ch_cfg {
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u8 tx_pause_on_err;
+	u8 tx_filt_einfo;
+	u8 tx_filt_pswords;
+	u8 tx_atype;
+	u8 tx_chan_type;
+	u8 tx_supr_tdpkt;
+	u16 tx_fetch_size;
+	u8 tx_credit_count;
+	u16 txcq_qnum;
+	u8 tx_priority;
+	u8 tx_qos;
+	u8 tx_orderid;
+	u16 fdepth;
+	u8 tx_sched_priority;
+	u8 tx_burst_size;
+	u8 tx_tdtype;
+	u8 extended_ch_type;
+};
+
+struct ti_sci_msg_rm_udmap_rx_ch_cfg {
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u16 rx_fetch_size;
+	u16 rxcq_qnum;
+	u8 rx_priority;
+	u8 rx_qos;
+	u8 rx_orderid;
+	u8 rx_sched_priority;
+	u16 flowid_start;
+	u16 flowid_cnt;
+	u8 rx_pause_on_err;
+	u8 rx_atype;
+	u8 rx_chan_type;
+	u8 rx_ignore_short;
+	u8 rx_ignore_long;
+	u8 rx_burst_size;
+};
+
+struct ti_sci_msg_rm_udmap_flow_cfg {
+	u32 valid_params;
+	u16 nav_id;
+	u16 flow_index;
+	u8 rx_einfo_present;
+	u8 rx_psinfo_present;
+	u8 rx_error_handling;
+	u8 rx_desc_type;
+	u16 rx_sop_offset;
+	u16 rx_dest_qnum;
+	u8 rx_src_tag_hi;
+	u8 rx_src_tag_lo;
+	u8 rx_dest_tag_hi;
+	u8 rx_dest_tag_lo;
+	u8 rx_src_tag_hi_sel;
+	u8 rx_src_tag_lo_sel;
+	u8 rx_dest_tag_hi_sel;
+	u8 rx_dest_tag_lo_sel;
+	u16 rx_fdq0_sz0_qnum;
+	u16 rx_fdq1_qnum;
+	u16 rx_fdq2_qnum;
+	u16 rx_fdq3_qnum;
+	u8 rx_ps_location;
+};
+
+struct ti_sci_inta_event_desc {
+	u16 global_event;
+	u32 hwirq;
+	u8 vint_bit;
+};
+
+struct ti_sci_inta_vint_desc {
+	struct irq_domain *domain;
+	struct list_head list;
+	long unsigned int event_map[1];
+	struct ti_sci_inta_event_desc events[64];
+	unsigned int parent_virq;
+	u16 vint_id;
+};
+
+struct ti_sci_inta_irq_domain {
+	const struct ti_sci_handle *sci;
+	struct ti_sci_resource *vint;
+	struct ti_sci_resource *global_event;
+	struct list_head vint_list;
+	struct mutex vint_mutex;
+	void *base;
+	struct platform_device *pdev;
+	u32 ti_sci_id;
+	int unmapped_cnt;
+	u16 *unmapped_dev_ids;
+};
+
+enum cmu_type_t {
+	REF_CMU = 0,
+	PHY_CMU = 1,
+};
+
+enum clk_type_t {
+	CLK_EXT_DIFF = 0,
+	CLK_INT_DIFF = 1,
+	CLK_INT_SING = 2,
+};
+
+enum xgene_phy_mode {
+	MODE_SATA = 0,
+	MODE_SGMII = 1,
+	MODE_PCIE = 2,
+	MODE_USB = 3,
+	MODE_XFI = 4,
+	MODE_MAX = 5,
+};
+
+struct xgene_sata_override_param {
+	u32 speed[2];
+	u32 txspeed[3];
+	u32 txboostgain[6];
+	u32 txeyetuning[6];
+	u32 txeyedirection[6];
+	u32 txamplitude[6];
+	u32 txprecursor_cn1[6];
+	u32 txprecursor_cn2[6];
+	u32 txpostcursor_cp1[6];
+};
+
+struct xgene_phy_ctx {
+	struct device *dev;
+	struct phy *phy;
+	enum xgene_phy_mode mode;
+	enum clk_type_t clk_type;
+	void *sds_base;
+	struct clk *clk;
+	struct xgene_sata_override_param sata_param;
+};
+
+struct pinctrl_setting_mux {
+	unsigned int group;
+	unsigned int func;
+};
+
+struct pinctrl_setting_configs {
+	unsigned int group_or_pin;
+	long unsigned int *configs;
+	unsigned int num_configs;
+};
+
+struct pinctrl_setting {
+	struct list_head node;
+	enum pinctrl_map_type type;
+	struct pinctrl_dev *pctldev;
+	const char *dev_name;
+	union {
+		struct pinctrl_setting_mux mux;
+		struct pinctrl_setting_configs configs;
+	} data;
+};
+
+struct pin_desc {
+	struct pinctrl_dev *pctldev;
+	const char *name;
+	bool dynamic_name;
+	void *drv_data;
+	unsigned int mux_usecount;
+	const char *mux_owner;
+	const struct pinctrl_setting_mux *mux_setting;
+	const char *gpio_owner;
+};
+
+struct as3722 {
+	struct device *dev;
+	struct regmap *regmap;
+	int chip_irq;
+	long unsigned int irq_flags;
+	bool en_intern_int_pullup;
+	bool en_intern_i2c_pullup;
+	bool en_ac_ok_pwr_on;
+	struct regmap_irq_chip_data *irq_data;
+};
+
+struct as3722_pin_function {
+	const char *name;
+	const char * const *groups;
+	unsigned int ngroups;
+	int mux_option;
+};
+
+struct as3722_gpio_pin_control {
+	unsigned int mode_prop;
+	int io_function;
+};
+
+struct as3722_pingroup {
+	const char *name;
+	const unsigned int pins[1];
+	unsigned int npins;
+};
+
+struct as3722_pctrl_info {
+	struct device *dev;
+	struct pinctrl_dev *pctl;
+	struct as3722 *as3722;
+	struct gpio_chip gpio_chip;
+	int pins_current_opt[8];
+	const struct as3722_pin_function *functions;
+	unsigned int num_functions;
+	const struct as3722_pingroup *pin_groups;
+	int num_pin_groups;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int num_pins;
+	struct as3722_gpio_pin_control gpio_control[8];
+};
+
+enum as3722_pinmux_option {
+	AS3722_PINMUX_GPIO = 0,
+	AS3722_PINMUX_INTERRUPT_OUT = 1,
+	AS3722_PINMUX_VSUB_VBAT_UNDEB_LOW_OUT = 2,
+	AS3722_PINMUX_GPIO_INTERRUPT = 3,
+	AS3722_PINMUX_PWM_INPUT = 4,
+	AS3722_PINMUX_VOLTAGE_IN_STBY = 5,
+	AS3722_PINMUX_OC_PG_SD0 = 6,
+	AS3722_PINMUX_PG_OUT = 7,
+	AS3722_PINMUX_CLK32K_OUT = 8,
+	AS3722_PINMUX_WATCHDOG_INPUT = 9,
+	AS3722_PINMUX_SOFT_RESET_IN = 11,
+	AS3722_PINMUX_PWM_OUTPUT = 12,
+	AS3722_PINMUX_VSUB_VBAT_LOW_DEB_OUT = 13,
+	AS3722_PINMUX_OC_PG_SD6 = 14,
+};
+
+enum pad_func_e {
+	IMX_SC_PAD_FUNC_SET = 15,
+	IMX_SC_PAD_FUNC_GET = 16,
+};
+
+struct imx_sc_msg_req_pad_set {
+	struct imx_sc_rpc_msg hdr;
+	u32 val;
+	u16 pad;
+};
+
+struct imx_sc_msg_req_pad_get {
+	struct imx_sc_rpc_msg hdr;
+	u16 pad;
+	short: 16;
+};
+
+struct imx_sc_msg_resp_pad_get {
+	struct imx_sc_rpc_msg hdr;
+	u32 val;
+};
+
+struct meson_pmx_bank {
+	const char *name;
+	unsigned int first;
+	unsigned int last;
+	unsigned int reg;
+	unsigned int offset;
+};
+
+struct meson_axg_pmx_data {
+	struct meson_pmx_bank *pmx_banks;
+	unsigned int num_pmx_banks;
+};
+
+struct meson_pmx_axg_data {
+	unsigned int func;
+};
+
+struct sunxi_pinctrl_function {
+	const char *name;
+	const char **groups;
+	unsigned int ngroups;
+};
+
+struct sunxi_pinctrl_group {
+	const char *name;
+	unsigned int pin;
+};
+
+struct sunxi_pinctrl_regulator {
+	struct regulator *regulator;
+	refcount_t refcount;
+};
+
+struct sunxi_pinctrl {
+	void *membase;
+	struct gpio_chip *chip;
+	const struct sunxi_pinctrl_desc *desc;
+	struct device *dev;
+	struct sunxi_pinctrl_regulator regulators[9];
+	struct irq_domain *domain;
+	struct sunxi_pinctrl_function *functions;
+	unsigned int nfunctions;
+	struct sunxi_pinctrl_group *groups;
+	unsigned int ngroups;
+	int *irq;
+	unsigned int *irq_array;
+	raw_spinlock_t lock;
+	struct pinctrl_dev *pctl_dev;
+	long unsigned int variant;
+	u32 bank_mem_size;
+	u32 pull_regs_offset;
+	u32 dlevel_field_width;
+};
+
+struct tegra_function;
+
+struct tegra_pingroup;
+
+struct tegra_pinctrl_soc_data {
+	unsigned int ngpios;
+	const char *gpio_compatible;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	struct tegra_function *functions;
+	unsigned int nfunctions;
+	const struct tegra_pingroup *groups;
+	unsigned int ngroups;
+	bool hsm_in_mux;
+	bool schmitt_in_mux;
+	bool drvtype_in_mux;
+	bool sfsel_in_mux;
+};
+
+struct tegra_function {
+	const char *name;
+	const char **groups;
+	unsigned int ngroups;
+};
+
+struct tegra_pingroup {
+	const char *name;
+	const unsigned int *pins;
+	u8 npins;
+	u8 funcs[4];
+	s32 mux_reg;
+	s32 pupd_reg;
+	s32 tri_reg;
+	s32 drv_reg;
+	u32 mux_bank: 2;
+	u32 pupd_bank: 2;
+	u32 tri_bank: 2;
+	u32 drv_bank: 2;
+	s32 mux_bit: 6;
+	s32 pupd_bit: 6;
+	s32 tri_bit: 6;
+	s32 einput_bit: 6;
+	s32 odrain_bit: 6;
+	s32 lock_bit: 6;
+	s32 ioreset_bit: 6;
+	s32 rcv_sel_bit: 6;
+	s32 hsm_bit: 6;
+	char: 2;
+	s32 sfsel_bit: 6;
+	s32 schmitt_bit: 6;
+	s32 lpmd_bit: 6;
+	s32 drvdn_bit: 6;
+	s32 drvup_bit: 6;
+	char: 2;
+	s32 slwr_bit: 6;
+	s32 slwf_bit: 6;
+	s32 lpdr_bit: 6;
+	s32 drvtype_bit: 6;
+	s32 drvdn_width: 6;
+	char: 2;
+	s32 drvup_width: 6;
+	s32 slwr_width: 6;
+	s32 slwf_width: 6;
+	u32 parked_bitmask;
+};
+
+enum tegra_mux {
+	TEGRA_MUX_AUD = 0,
+	TEGRA_MUX_BCL = 1,
+	TEGRA_MUX_BLINK = 2,
+	TEGRA_MUX_CCLA = 3,
+	TEGRA_MUX_CEC = 4,
+	TEGRA_MUX_CLDVFS = 5,
+	TEGRA_MUX_CLK = 6,
+	TEGRA_MUX_CORE = 7,
+	TEGRA_MUX_CPU = 8,
+	TEGRA_MUX_DISPLAYA = 9,
+	TEGRA_MUX_DISPLAYB = 10,
+	TEGRA_MUX_DMIC1 = 11,
+	TEGRA_MUX_DMIC2 = 12,
+	TEGRA_MUX_DMIC3 = 13,
+	TEGRA_MUX_DP = 14,
+	TEGRA_MUX_DTV = 15,
+	TEGRA_MUX_EXTPERIPH3 = 16,
+	TEGRA_MUX_I2C1 = 17,
+	TEGRA_MUX_I2C2 = 18,
+	TEGRA_MUX_I2C3 = 19,
+	TEGRA_MUX_I2CPMU = 20,
+	TEGRA_MUX_I2CVI = 21,
+	TEGRA_MUX_I2S1 = 22,
+	TEGRA_MUX_I2S2 = 23,
+	TEGRA_MUX_I2S3 = 24,
+	TEGRA_MUX_I2S4A = 25,
+	TEGRA_MUX_I2S4B = 26,
+	TEGRA_MUX_I2S5A = 27,
+	TEGRA_MUX_I2S5B = 28,
+	TEGRA_MUX_IQC0 = 29,
+	TEGRA_MUX_IQC1 = 30,
+	TEGRA_MUX_JTAG = 31,
+	TEGRA_MUX_PE = 32,
+	TEGRA_MUX_PE0 = 33,
+	TEGRA_MUX_PE1 = 34,
+	TEGRA_MUX_PMI = 35,
+	TEGRA_MUX_PWM0 = 36,
+	TEGRA_MUX_PWM1 = 37,
+	TEGRA_MUX_PWM2 = 38,
+	TEGRA_MUX_PWM3 = 39,
+	TEGRA_MUX_QSPI = 40,
+	TEGRA_MUX_RSVD0 = 41,
+	TEGRA_MUX_RSVD1 = 42,
+	TEGRA_MUX_RSVD2 = 43,
+	TEGRA_MUX_RSVD3 = 44,
+	TEGRA_MUX_SATA = 45,
+	TEGRA_MUX_SDMMC1 = 46,
+	TEGRA_MUX_SDMMC3 = 47,
+	TEGRA_MUX_SHUTDOWN = 48,
+	TEGRA_MUX_SOC = 49,
+	TEGRA_MUX_SOR0 = 50,
+	TEGRA_MUX_SOR1 = 51,
+	TEGRA_MUX_SPDIF = 52,
+	TEGRA_MUX_SPI1 = 53,
+	TEGRA_MUX_SPI2 = 54,
+	TEGRA_MUX_SPI3 = 55,
+	TEGRA_MUX_SPI4 = 56,
+	TEGRA_MUX_SYS = 57,
+	TEGRA_MUX_TOUCH = 58,
+	TEGRA_MUX_UART = 59,
+	TEGRA_MUX_UARTA = 60,
+	TEGRA_MUX_UARTB = 61,
+	TEGRA_MUX_UARTC = 62,
+	TEGRA_MUX_UARTD = 63,
+	TEGRA_MUX_USB = 64,
+	TEGRA_MUX_VGP1 = 65,
+	TEGRA_MUX_VGP2 = 66,
+	TEGRA_MUX_VGP3 = 67,
+	TEGRA_MUX_VGP4 = 68,
+	TEGRA_MUX_VGP5 = 69,
+	TEGRA_MUX_VGP6 = 70,
+	TEGRA_MUX_VIMCLK = 71,
+	TEGRA_MUX_VIMCLK2 = 72,
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+	OF_GPIO_PULL_DISABLE = 64,
+};
+
+struct of_mm_gpio_chip {
+	struct gpio_chip gc;
+	void (*save_regs)(struct of_mm_gpio_chip *);
+	void *regs;
+};
+
+enum gpio_lookup_flags {
+	GPIO_ACTIVE_HIGH = 0,
+	GPIO_ACTIVE_LOW = 1,
+	GPIO_OPEN_DRAIN = 2,
+	GPIO_OPEN_SOURCE = 4,
+	GPIO_PERSISTENT = 0,
+	GPIO_TRANSITORY = 8,
+	GPIO_PULL_UP = 16,
+	GPIO_PULL_DOWN = 32,
+	GPIO_PULL_DISABLE = 64,
+	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
+};
+
+struct mpc8xxx_gpio_chip {
+	struct gpio_chip gc;
+	void *regs;
+	raw_spinlock_t lock;
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	struct irq_domain *irq;
+	int irqn;
+};
+
+struct mpc8xxx_gpio_devtype {
+	int (*gpio_dir_out)(struct gpio_chip *, unsigned int, int);
+	int (*gpio_get)(struct gpio_chip *, unsigned int);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+};
+
+enum hte_edge {
+	HTE_EDGE_NO_SETUP = 1,
+	HTE_RISING_EDGE_TS = 2,
+	HTE_FALLING_EDGE_TS = 4,
+};
+
+struct tegra_gpio_port {
+	const char *name;
+	unsigned int bank;
+	unsigned int port;
+	unsigned int pins;
+};
+
+struct tegra186_pin_range {
+	unsigned int offset;
+	const char *group;
+};
+
+struct tegra_gpio_soc {
+	const struct tegra_gpio_port *ports;
+	unsigned int num_ports;
+	const char *name;
+	unsigned int instance;
+	unsigned int num_irqs_per_bank;
+	const struct tegra186_pin_range *pin_ranges;
+	unsigned int num_pin_ranges;
+	const char *pinmux;
+	bool has_gte;
+};
+
+struct tegra_gpio {
+	struct gpio_chip gpio;
+	unsigned int num_irq;
+	unsigned int *irq;
+	const struct tegra_gpio_soc *soc;
+	unsigned int num_irqs_per_bank;
+	unsigned int num_banks;
+	void *secure;
+	void *base;
+};
+
+struct tegra_core_opp_params {
+	bool init_state;
+};
+
+struct tegra_pwm_soc {
+	unsigned int num_channels;
+	long unsigned int max_frequency;
+};
+
+struct tegra_pwm_chip {
+	struct pwm_chip chip;
+	struct device *dev;
+	struct clk *clk;
+	struct reset_control *rst;
+	long unsigned int clk_rate;
+	long unsigned int min_period_ns;
+	void *regs;
+	const struct tegra_pwm_soc *soc;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct bus_type *, char *);
+	ssize_t (*store)(struct bus_type *, const char *, size_t);
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+struct portdrv_service_data {
+	struct pcie_port_service_driver *drv;
+	struct device *dev;
+	u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	int hook_offset;
+};
+
+enum {
+	NVME_REG_CAP = 0,
+	NVME_REG_VS = 8,
+	NVME_REG_INTMS = 12,
+	NVME_REG_INTMC = 16,
+	NVME_REG_CC = 20,
+	NVME_REG_CSTS = 28,
+	NVME_REG_NSSR = 32,
+	NVME_REG_AQA = 36,
+	NVME_REG_ASQ = 40,
+	NVME_REG_ACQ = 48,
+	NVME_REG_CMBLOC = 56,
+	NVME_REG_CMBSZ = 60,
+	NVME_REG_BPINFO = 64,
+	NVME_REG_BPRSEL = 68,
+	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
+	NVME_REG_PMRCAP = 3584,
+	NVME_REG_PMRCTL = 3588,
+	NVME_REG_PMRSTS = 3592,
+	NVME_REG_PMREBS = 3596,
+	NVME_REG_PMRSWTP = 3600,
+	NVME_REG_DBS = 4096,
+};
+
+enum {
+	NVME_CC_ENABLE = 1,
+	NVME_CC_EN_SHIFT = 0,
+	NVME_CC_CSS_SHIFT = 4,
+	NVME_CC_MPS_SHIFT = 7,
+	NVME_CC_AMS_SHIFT = 11,
+	NVME_CC_SHN_SHIFT = 14,
+	NVME_CC_IOSQES_SHIFT = 16,
+	NVME_CC_IOCQES_SHIFT = 20,
+	NVME_CC_CSS_NVM = 0,
+	NVME_CC_CSS_CSI = 96,
+	NVME_CC_CSS_MASK = 112,
+	NVME_CC_AMS_RR = 0,
+	NVME_CC_AMS_WRRU = 2048,
+	NVME_CC_AMS_VS = 14336,
+	NVME_CC_SHN_NONE = 0,
+	NVME_CC_SHN_NORMAL = 16384,
+	NVME_CC_SHN_ABRUPT = 32768,
+	NVME_CC_SHN_MASK = 49152,
+	NVME_CC_IOSQES = 393216,
+	NVME_CC_IOCQES = 4194304,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
+	NVME_CSTS_RDY = 1,
+	NVME_CSTS_CFS = 2,
+	NVME_CSTS_NSSRO = 16,
+	NVME_CSTS_PP = 32,
+	NVME_CSTS_SHST_NORMAL = 0,
+	NVME_CSTS_SHST_OCCUR = 4,
+	NVME_CSTS_SHST_CMPLT = 8,
+	NVME_CSTS_SHST_MASK = 12,
+};
+
+enum {
+	NVME_AEN_BIT_NS_ATTR = 8,
+	NVME_AEN_BIT_FW_ACT = 9,
+	NVME_AEN_BIT_ANA_CHANGE = 11,
+	NVME_AEN_BIT_DISC_CHANGE = 31,
+};
+
+enum {
+	SWITCHTEC_GAS_MRPC_OFFSET = 0,
+	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
+	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
+	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
+	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
+	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
+	SWITCHTEC_GAS_NTB_OFFSET = 65536,
+	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
+};
+
+enum {
+	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
+	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
+	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
+};
+
+struct nt_partition_info {
+	u32 xlink_enabled;
+	u32 target_part_low;
+	u32 target_part_high;
+	u32 reserved;
+};
+
+struct ntb_info_regs {
+	u8 partition_count;
+	u8 partition_id;
+	u16 reserved1;
+	u64 ep_map;
+	u16 requester_id;
+	u16 reserved2;
+	u32 reserved3[4];
+	struct nt_partition_info ntp_info[48];
+} __attribute__((packed));
+
+struct ntb_ctrl_regs {
+	u32 partition_status;
+	u32 partition_op;
+	u32 partition_ctrl;
+	u32 bar_setup;
+	u32 bar_error;
+	u16 lut_table_entries;
+	u16 lut_table_offset;
+	u32 lut_error;
+	u16 req_id_table_size;
+	u16 req_id_table_offset;
+	u32 req_id_error;
+	u32 reserved1[7];
+	struct {
+		u32 ctl;
+		u32 win_size;
+		u64 xlate_addr;
+	} bar_entry[6];
+	struct {
+		u32 win_size;
+		u32 reserved[3];
+	} bar_ext_entry[6];
+	u32 reserved2[192];
+	u32 req_id_table[512];
+	u32 reserved3[256];
+	u64 lut_entry[512];
+};
+
+struct pci_dev_reset_methods {
+	u16 vendor;
+	u16 device;
+	int (*reset)(struct pci_dev *, bool);
+};
+
+struct pci_dev_acs_enabled {
+	u16 vendor;
+	u16 device;
+	int (*acs_enabled)(struct pci_dev *, u16);
+};
+
+struct pci_dev_acs_ops {
+	u16 vendor;
+	u16 device;
+	int (*enable_acs)(struct pci_dev *);
+	int (*disable_acs_redir)(struct pci_dev *);
+};
+
+struct dmi_dev_onboard {
+	struct dmi_device dev;
+	int instance;
+	int segment;
+	int bus;
+	int devfn;
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+enum smbios_attr_enum {
+	SMBIOS_ATTR_NONE = 0,
+	SMBIOS_ATTR_LABEL_SHOW = 1,
+	SMBIOS_ATTR_INSTANCE_SHOW = 2,
+};
+
+enum acpi_attr_enum {
+	ACPI_ATTR_LABEL_SHOW = 0,
+	ACPI_ATTR_INDEX_SHOW = 1,
+};
+
+struct pci_doe_protocol {
+	u16 vid;
+	u8 type;
+};
+
+struct pci_doe_mb;
+
+struct pci_doe_task {
+	struct pci_doe_protocol prot;
+	u32 *request_pl;
+	size_t request_pl_sz;
+	u32 *response_pl;
+	size_t response_pl_sz;
+	int rv;
+	void (*complete)(struct pci_doe_task *);
+	void *private;
+	struct work_struct work;
+	struct pci_doe_mb *doe_mb;
+};
+
+struct pci_doe_mb {
+	struct pci_dev *pdev;
+	u16 cap_offset;
+	struct xarray prots;
+	wait_queue_head_t wq;
+	struct workqueue_struct *work_queue;
+	long unsigned int flags;
+};
+
+struct nwl_msi {
+	struct irq_domain *msi_domain;
+	long unsigned int bitmap[1];
+	struct irq_domain *dev_domain;
+	struct mutex lock;
+	int irq_msi0;
+	int irq_msi1;
+};
+
+struct nwl_pcie {
+	struct device *dev;
+	void *breg_base;
+	void *pcireg_base;
+	void *ecam_base;
+	phys_addr_t phys_breg_base;
+	phys_addr_t phys_pcie_reg_base;
+	phys_addr_t phys_ecam_base;
+	u32 breg_size;
+	u32 pcie_reg_size;
+	u32 ecam_size;
+	int irq_intx;
+	int irq_misc;
+	u32 ecam_value;
+	u8 last_busno;
+	struct nwl_msi msi;
+	struct irq_domain *legacy_irq_domain;
+	struct clk *clk;
+	raw_spinlock_t leg_mask_lock;
+};
+
+struct apple_pcie {
+	struct mutex lock;
+	struct device *dev;
+	void *base;
+	struct irq_domain *domain;
+	long unsigned int *bitmap;
+	struct list_head ports;
+	struct completion event;
+	struct irq_fwspec fwspec;
+	u32 nvecs;
+};
+
+struct apple_pcie_port {
+	struct apple_pcie *pcie;
+	struct device_node *np;
+	void *base;
+	struct irq_domain *domain;
+	struct list_head entry;
+	long unsigned int sid_map[1];
+	int sid_map_sz;
+	int idx;
+};
+
+struct ls_pcie {
+	struct dw_pcie *pci;
+};
+
+struct histb_pcie {
+	struct dw_pcie *pci;
+	struct clk *aux_clk;
+	struct clk *pipe_clk;
+	struct clk *sys_clk;
+	struct clk *bus_clk;
+	struct phy *phy;
+	struct reset_control *soft_reset;
+	struct reset_control *sys_reset;
+	struct reset_control *bus_reset;
+	void *ctrl;
+	int reset_gpio;
+	struct regulator *vpcie;
+};
+
+struct tegra194_pcie_ecam {
+	void *config_base;
+	void *iatu_base;
+	void *dbi_base;
+};
+
+struct dmt_videomode {
+	u32 dmt_id;
+	u32 std_2byte_code;
+	u32 cvt_3byte_code;
+	const struct fb_videomode *mode;
+};
+
+struct broken_edid {
+	u8 manufacturer[4];
+	u32 model;
+	u32 fix;
+};
+
+struct __fb_timings {
+	u32 dclk;
+	u32 hfreq;
+	u32 vfreq;
+	u32 hactive;
+	u32 vactive;
+	u32 hblank;
+	u32 vblank;
+	u32 htotal;
+	u32 vtotal;
+};
+
+struct nvs_region {
+	__u64 phys_start;
+	__u64 size;
+	struct list_head node;
+};
+
+struct acpi_wakeup_handler {
+	struct list_head list_node;
+	bool (*wakeup)(void *);
+	void *context;
+};
+
+struct resource_win {
+	struct resource res;
+	resource_size_t offset;
+};
+
+struct irq_override_cmp {
+	const struct dmi_system_id *system;
+	unsigned char irq;
+	unsigned char triggering;
+	unsigned char polarity;
+	unsigned char shareable;
+};
+
+struct res_proc_context {
+	struct list_head *list;
+	int (*preproc)(struct acpi_resource *, void *);
+	void *preproc_data;
+	int count;
+	int error;
+};
+
+struct acpi_pci_id {
+	u16 segment;
+	u16 bus;
+	u16 device;
+	u16 function;
+};
+
+struct acpi_pci_routing_table {
+	u32 length;
+	u32 pin;
+	u64 address;
+	u32 source_index;
+	char source[4];
+};
+
+struct acpi_prt_entry {
+	struct acpi_pci_id id;
+	u8 pin;
+	acpi_handle link;
+	u32 index;
+};
+
+struct prt_quirk {
+	const struct dmi_system_id *system;
+	unsigned int segment;
+	unsigned int bus;
+	unsigned int device;
+	unsigned char pin;
+	const char *source;
+	const char *actual_source;
+};
+
+struct acpi_bus_event {
+	struct list_head node;
+	acpi_device_class device_class;
+	acpi_bus_id bus_id;
+	u32 type;
+	u32 data;
+};
+
+struct acpi_genl_event {
+	acpi_device_class device_class;
+	char bus_id[15];
+	u32 type;
+	u32 data;
+};
+
+enum {
+	ACPI_GENL_ATTR_UNSPEC = 0,
+	ACPI_GENL_ATTR_EVENT = 1,
+	__ACPI_GENL_ATTR_MAX = 2,
+};
+
+enum {
+	ACPI_GENL_CMD_UNSPEC = 0,
+	ACPI_GENL_CMD_EVENT = 1,
+	__ACPI_GENL_CMD_MAX = 2,
+};
+
+typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);
+
+struct acpi_simple_repair_info {
+	char name[4];
+	u32 unexpected_btypes;
+	u32 package_index;
+	acpi_object_converter object_converter;
+};
+
+enum acpi_return_package_types {
+	ACPI_PTYPE1_FIXED = 1,
+	ACPI_PTYPE1_VAR = 2,
+	ACPI_PTYPE1_OPTION = 3,
+	ACPI_PTYPE2 = 4,
+	ACPI_PTYPE2_COUNT = 5,
+	ACPI_PTYPE2_PKG_COUNT = 6,
+	ACPI_PTYPE2_FIXED = 7,
+	ACPI_PTYPE2_MIN = 8,
+	ACPI_PTYPE2_REV_FIXED = 9,
+	ACPI_PTYPE2_FIX_VAR = 10,
+	ACPI_PTYPE2_VAR_VAR = 11,
+	ACPI_PTYPE2_UUID_PAIR = 12,
+	ACPI_PTYPE_CUSTOM = 13,
+};
+
+typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
+
+struct acpi_pkg_info {
+	u8 *free_space;
+	acpi_size length;
+	u32 object_space;
+	u32 num_packages;
+};
+
+typedef int (*acpi_op_add)(struct acpi_device *);
+
+typedef int (*acpi_op_remove)(struct acpi_device *);
+
+typedef void (*acpi_op_notify)(struct acpi_device *, u32);
+
+struct acpi_device_ops {
+	acpi_op_add add;
+	acpi_op_remove remove;
+	acpi_op_notify notify;
+};
+
+struct acpi_driver {
+	char name[80];
+	char class[80];
+	const struct acpi_device_id *ids;
+	unsigned int flags;
+	struct acpi_device_ops ops;
+	struct device_driver drv;
+	struct module *owner;
+};
+
+enum {
+	ACPI_BUTTON_LID_INIT_IGNORE = 0,
+	ACPI_BUTTON_LID_INIT_OPEN = 1,
+	ACPI_BUTTON_LID_INIT_METHOD = 2,
+	ACPI_BUTTON_LID_INIT_DISABLED = 3,
+};
+
+struct acpi_button {
+	unsigned int type;
+	struct input_dev *input;
+	char phys[32];
+	long unsigned int pushed;
+	int last_state;
+	ktime_t last_time;
+	bool suspended;
+	bool lid_state_initialized;
+};
+
+enum acpi_cedt_type {
+	ACPI_CEDT_TYPE_CHBS = 0,
+	ACPI_CEDT_TYPE_CFMWS = 1,
+	ACPI_CEDT_TYPE_RESERVED = 2,
+};
+
+struct acpi_cedt_cfmws {
+	struct acpi_cedt_header header;
+	u32 reserved1;
+	u64 base_hpa;
+	u64 window_size;
+	u8 interleave_ways;
+	u8 interleave_arithmetic;
+	u16 reserved2;
+	u32 granularity;
+	u16 restrictions;
+	u16 qtg_id;
+	u32 interleave_targets[0];
+} __attribute__((packed));
+
+struct acpi_table_slit {
+	struct acpi_table_header header;
+	u64 locality_count;
+	u8 entry[1];
+} __attribute__((packed));
+
+struct acpi_table_srat {
+	struct acpi_table_header header;
+	u32 table_revision;
+	u64 reserved;
+};
+
+struct acpi_srat_cpu_affinity {
+	struct acpi_subtable_header header;
+	u8 proximity_domain_lo;
+	u8 apic_id;
+	u32 flags;
+	u8 local_sapic_eid;
+	u8 proximity_domain_hi[3];
+	u32 clock_domain;
+};
+
+struct acpi_srat_x2apic_cpu_affinity {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 proximity_domain;
+	u32 apic_id;
+	u32 flags;
+	u32 clock_domain;
+	u32 reserved2;
+};
+
+struct acpi_srat_gicc_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u32 acpi_processor_uid;
+	u32 flags;
+	u32 clock_domain;
+} __attribute__((packed));
+
+struct acpi_srat_generic_affinity {
+	struct acpi_subtable_header header;
+	u8 reserved;
+	u8 device_handle_type;
+	u32 proximity_domain;
+	u8 device_handle[16];
+	u32 flags;
+	u32 reserved1;
+};
+
+typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, void *, const long unsigned int);
+
+struct acpi_subtable_proc {
+	int id;
+	acpi_tbl_entry_handler handler;
+	acpi_tbl_entry_handler_arg handler_arg;
+	void *arg;
+	int count;
+};
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+struct acpi_battery_hook {
+	const char *name;
+	int (*add_battery)(struct power_supply *);
+	int (*remove_battery)(struct power_supply *);
+	struct list_head list;
+};
+
+enum {
+	ACPI_BATTERY_ALARM_PRESENT = 0,
+	ACPI_BATTERY_XINFO_PRESENT = 1,
+	ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,
+	ACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,
+	ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,
+};
+
+struct acpi_battery {
+	struct mutex lock;
+	struct mutex sysfs_lock;
+	struct power_supply *bat;
+	struct power_supply_desc bat_desc;
+	struct acpi_device *device;
+	struct notifier_block pm_nb;
+	struct list_head list;
+	long unsigned int update_time;
+	int revision;
+	int rate_now;
+	int capacity_now;
+	int voltage_now;
+	int design_capacity;
+	int full_charge_capacity;
+	int technology;
+	int design_voltage;
+	int design_capacity_warning;
+	int design_capacity_low;
+	int cycle_count;
+	int measurement_accuracy;
+	int max_sampling_time;
+	int min_sampling_time;
+	int max_averaging_interval;
+	int min_averaging_interval;
+	int capacity_granularity_1;
+	int capacity_granularity_2;
+	int alarm;
+	char model_number[32];
+	char serial_number[32];
+	char type[32];
+	char oem_info[32];
+	int state;
+	int power_unit;
+	long unsigned int flags;
+};
+
+struct acpi_offsets {
+	size_t offset;
+	u8 mode;
+};
+
+struct acpi_table_iort {
+	struct acpi_table_header header;
+	u32 node_count;
+	u32 node_offset;
+	u32 reserved;
+};
+
+enum acpi_iort_node_type {
+	ACPI_IORT_NODE_ITS_GROUP = 0,
+	ACPI_IORT_NODE_NAMED_COMPONENT = 1,
+	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 2,
+	ACPI_IORT_NODE_SMMU = 3,
+	ACPI_IORT_NODE_SMMU_V3 = 4,
+	ACPI_IORT_NODE_PMCG = 5,
+	ACPI_IORT_NODE_RMR = 6,
+};
+
+struct acpi_iort_id_mapping {
+	u32 input_base;
+	u32 id_count;
+	u32 output_base;
+	u32 output_reference;
+	u32 flags;
+};
+
+struct acpi_iort_its_group {
+	u32 its_count;
+	u32 identifiers[1];
+};
+
+struct acpi_iort_named_component {
+	u32 node_flags;
+	u64 memory_properties;
+	u8 memory_address_limit;
+	char device_name[1];
+} __attribute__((packed));
+
+struct acpi_iort_root_complex {
+	u64 memory_properties;
+	u32 ats_attribute;
+	u32 pci_segment_number;
+	u8 memory_address_limit;
+	u16 pasid_capabilities;
+	u8 reserved[1];
+} __attribute__((packed));
+
+struct acpi_iort_smmu_v3 {
+	u64 base_address;
+	u32 flags;
+	u32 reserved;
+	u64 vatos_address;
+	u32 model;
+	u32 event_gsiv;
+	u32 pri_gsiv;
+	u32 gerr_gsiv;
+	u32 sync_gsiv;
+	u32 pxm;
+	u32 id_mapping_index;
+} __attribute__((packed));
+
+struct acpi_iort_pmcg {
+	u64 page0_base_address;
+	u32 overflow_gsiv;
+	u32 node_reference;
+	u64 page1_base_address;
+};
+
+struct acpi_iort_rmr {
+	u32 flags;
+	u32 rmr_count;
+	u32 rmr_offset;
+};
+
+struct acpi_iort_rmr_desc {
+	u64 base_address;
+	u64 length;
+	u32 reserved;
+} __attribute__((packed));
+
+enum acpi_predicate {
+	all_versions = 0,
+	less_than_or_equal = 1,
+	equal = 2,
+	greater_than_or_equal = 3,
+};
+
+struct acpi_platform_list {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	char *table;
+	enum acpi_predicate pred;
+	char *reason;
+	u32 data;
+};
+
+struct iort_its_msi_chip {
+	struct list_head list;
+	struct fwnode_handle *fw_node;
+	phys_addr_t base_addr;
+	u32 translation_id;
+};
+
+struct iort_fwnode {
+	struct list_head list;
+	struct acpi_iort_node *iort_node;
+	struct fwnode_handle *fwnode;
+};
+
+typedef acpi_status (*iort_find_node_callback)(struct acpi_iort_node *, void *);
+
+struct iort_pci_alias_info {
+	struct device *dev;
+	struct acpi_iort_node *node;
+};
+
+struct iort_dev_config {
+	const char *name;
+	int (*dev_init)(struct acpi_iort_node *);
+	void (*dev_dma_configure)(struct device *, struct acpi_iort_node *);
+	int (*dev_count_resources)(struct acpi_iort_node *);
+	void (*dev_init_resources)(struct resource *, struct acpi_iort_node *);
+	int (*dev_set_proximity)(struct device *, struct acpi_iort_node *);
+	int (*dev_add_platdata)(struct platform_device *);
+};
+
+struct devm_clk_state {
+	struct clk *clk;
+	void (*exit)(struct clk *);
+};
+
+struct clk_bulk_devres {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_gate {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_plldig {
+	struct clk_hw hw;
+	void *regs;
+	unsigned int vco_freq;
+};
+
+struct clk {
+	struct clk_core *core;
+	struct device *dev;
+	const char *dev_id;
+	const char *con_id;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	unsigned int exclusive_count;
+	struct hlist_node clks_node;
+};
+
+struct hi6220_divider_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	long unsigned int flags;
+	long unsigned int offset;
+	u8 shift;
+	u8 width;
+	u32 mask_bit;
+	const char *alias;
+};
+
+struct clk_cpu {
+	struct clk_hw hw;
+	struct clk *div;
+	struct clk *mux;
+	struct clk *pll;
+	struct clk *step;
+};
+
+struct clk_fixup_div {
+	struct clk_divider divider;
+	const struct clk_ops *ops;
+	void (*fixup)(u32 *);
+};
+
+struct clk_pfd {
+	struct clk_hw hw;
+	void *reg;
+	u8 idx;
+};
+
+enum imx_pllv3_type {
+	IMX_PLLV3_GENERIC = 0,
+	IMX_PLLV3_SYS = 1,
+	IMX_PLLV3_USB = 2,
+	IMX_PLLV3_USB_VF610 = 3,
+	IMX_PLLV3_AV = 4,
+	IMX_PLLV3_ENET = 5,
+	IMX_PLLV3_ENET_IMX7 = 6,
+	IMX_PLLV3_SYS_VF610 = 7,
+	IMX_PLLV3_DDR_IMX7 = 8,
+	IMX_PLLV3_AV_IMX7 = 9,
+};
+
+struct clk_pllv3 {
+	struct clk_hw hw;
+	void *base;
+	u32 power_bit;
+	bool powerup_set;
+	u32 div_mask;
+	u32 div_shift;
+	long unsigned int ref_clock;
+	u32 num_offset;
+	u32 denom_offset;
+};
+
+struct clk_pllv3_vf610_mf {
+	u32 mfi;
+	u32 mfn;
+	u32 mfd;
+};
+
+enum imx_pll14xx_type {
+	PLL_1416X = 0,
+	PLL_1443X = 1,
+};
+
+struct imx_pll14xx_rate_table {
+	unsigned int rate;
+	unsigned int pdiv;
+	unsigned int mdiv;
+	unsigned int sdiv;
+	unsigned int kdiv;
+};
+
+struct imx_pll14xx_clk {
+	enum imx_pll14xx_type type;
+	const struct imx_pll14xx_rate_table *rate_table;
+	int rate_count;
+	int flags;
+};
+
+struct meson_clk_cpu_dyndiv_data {
+	struct parm div;
+	struct parm dyn;
+};
+
+struct meson_vid_pll_div_data {
+	struct parm val;
+	struct parm sel;
+};
+
+struct g12a_cpu_clk_postmux_nb_data {
+	struct notifier_block nb;
+	struct clk_hw *xtal;
+	struct clk_hw *cpu_clk_dyn;
+	struct clk_hw *cpu_clk_postmux0;
+	struct clk_hw *cpu_clk_postmux1;
+	struct clk_hw *cpu_clk_premux1;
+};
+
+struct g12a_sys_pll_nb_data {
+	struct notifier_block nb;
+	struct clk_hw *sys_pll;
+	struct clk_hw *cpu_clk;
+	struct clk_hw *cpu_clk_dyn;
+};
+
+struct meson_g12a_data {
+	const struct meson_eeclkc_data eeclkc_data;
+	int (*dvfs_setup)(struct platform_device *);
+};
+
+struct gdsc {
+	struct generic_pm_domain pd;
+	struct generic_pm_domain *parent;
+	struct regmap *regmap;
+	unsigned int gdscr;
+	unsigned int collapse_ctrl;
+	unsigned int collapse_mask;
+	unsigned int gds_hw_ctrl;
+	unsigned int clamp_io_ctrl;
+	unsigned int *cxcs;
+	unsigned int cxc_count;
+	unsigned int en_rest_wait_val;
+	unsigned int en_few_wait_val;
+	unsigned int clk_dis_wait_val;
+	const u8 pwrsts;
+	const u16 flags;
+	struct reset_controller_dev *rcdev;
+	unsigned int *resets;
+	unsigned int reset_count;
+	const char *supply;
+	struct regulator *rsupply;
+	struct device *dev;
+};
+
+struct clk_rcg2 {
+	u32 cmd_rcgr;
+	u8 mnd_width;
+	u8 hid_width;
+	u8 safe_src_index;
+	const struct parent_map *parent_map;
+	const struct freq_tbl *freq_tbl;
+	struct clk_regmap___2 clkr;
+	u8 cfg_off;
+	u32 parked_cfg;
+};
+
+enum {
+	P_XO = 0,
+	P_GPLL0 = 1,
+	P_GPLL0_EARLY_DIV = 2,
+	P_SLEEP_CLK = 3,
+	P_GPLL4 = 4,
+	P_AUD_REF_CLK = 5,
+};
+
+struct rockchip_clk_pll {
+	struct clk_hw hw;
+	struct clk_mux pll_mux;
+	const struct clk_ops *pll_mux_ops;
+	struct notifier_block clk_nb;
+	void *reg_base;
+	int lock_offset;
+	unsigned int lock_shift;
+	enum rockchip_pll_type type;
+	u8 flags;
+	const struct rockchip_pll_rate_table *rate_table;
+	unsigned int rate_count;
+	spinlock_t *lock;
+	struct rockchip_clk_provider *ctx;
+};
+
+enum rk3328_plls {
+	apll = 0,
+	dpll___2 = 1,
+	cpll___2 = 2,
+	gpll___2 = 3,
+	npll___2 = 4,
+};
+
+struct ccu_mux {
+	u32 enable;
+	struct ccu_mux_internal mux;
+	struct ccu_common common;
+};
+
+struct ccu_mux_nb {
+	struct notifier_block clk_nb;
+	struct ccu_common *common;
+	struct ccu_mux_internal *cm;
+	u32 delay_us;
+	u8 bypass_index;
+	u8 original_index;
+};
+
+struct ccu_mult_internal {
+	u8 offset;
+	u8 shift;
+	u8 width;
+	u8 min;
+	u8 max;
+};
+
+struct ccu_nkmp {
+	u32 enable;
+	u32 lock;
+	struct ccu_mult_internal n;
+	struct ccu_mult_internal k;
+	struct ccu_div_internal m;
+	struct ccu_div_internal p;
+	unsigned int fixed_post_div;
+	unsigned int max_rate;
+	struct ccu_common common;
+};
+
+struct _ccu_nkmp {
+	long unsigned int n;
+	long unsigned int min_n;
+	long unsigned int max_n;
+	long unsigned int k;
+	long unsigned int min_k;
+	long unsigned int max_k;
+	long unsigned int m;
+	long unsigned int min_m;
+	long unsigned int max_m;
+	long unsigned int p;
+	long unsigned int min_p;
+	long unsigned int max_p;
+};
+
+struct ccu_pll_nb {
+	struct notifier_block clk_nb;
+	struct ccu_common *common;
+	u32 enable;
+	u32 lock;
+};
+
+struct ccu_frac_internal {
+	u32 enable;
+	u32 select;
+	long unsigned int rates[2];
+};
+
+struct ccu_mult {
+	u32 enable;
+	u32 lock;
+	struct ccu_frac_internal frac;
+	struct ccu_mult_internal mult;
+	struct ccu_mux_internal mux;
+	struct ccu_common common;
+};
+
+struct ccu_sdm_setting {
+	long unsigned int rate;
+	u32 pattern;
+	u32 m;
+	u32 n;
+};
+
+struct ccu_sdm_internal {
+	struct ccu_sdm_setting *table;
+	u32 table_size;
+	u32 enable;
+	u32 tuning_enable;
+	u16 tuning_reg;
+};
+
+struct ccu_nm {
+	u32 enable;
+	u32 lock;
+	struct ccu_mult_internal n;
+	struct ccu_div_internal m;
+	struct ccu_frac_internal frac;
+	struct ccu_sdm_internal sdm;
+	unsigned int fixed_post_div;
+	unsigned int min_rate;
+	unsigned int max_rate;
+	struct ccu_common common;
+};
+
+struct clk_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct clk *clk;
+	struct clk_hw *clk_hw;
+};
+
+struct tegra_cpu_car_ops {
+	void (*wait_for_reset)(u32);
+	void (*put_in_reset)(u32);
+	void (*out_of_reset)(u32);
+	void (*enable_clock)(u32);
+	void (*disable_clock)(u32);
+	bool (*rail_off_ready)();
+	void (*suspend)();
+	void (*resume)();
+};
+
+struct tegra_clk_periph_regs {
+	u32 enb_reg;
+	u32 enb_set_reg;
+	u32 enb_clr_reg;
+	u32 rst_reg;
+	u32 rst_set_reg;
+	u32 rst_clr_reg;
+};
+
+struct tegra_clk_init_table {
+	unsigned int clk_id;
+	unsigned int parent_id;
+	long unsigned int rate;
+	int state;
+};
+
+struct tegra_clk_duplicate {
+	int clk_id;
+	struct clk_lookup lookup;
+};
+
+struct tegra_clk {
+	int dt_id;
+	bool present;
+};
+
+struct tegra_devclk {
+	int dt_id;
+	char *dev_id;
+	char *con_id;
+};
+
+typedef void (*tegra_clk_apply_init_table_func)();
+
+enum tegra_revision {
+	TEGRA_REVISION_UNKNOWN = 0,
+	TEGRA_REVISION_A01 = 1,
+	TEGRA_REVISION_A02 = 2,
+	TEGRA_REVISION_A03 = 3,
+	TEGRA_REVISION_A03p = 4,
+	TEGRA_REVISION_A04 = 5,
+	TEGRA_REVISION_MAX = 6,
+};
+
+struct tegra_sku_info {
+	int sku_id;
+	int cpu_process_id;
+	int cpu_speedo_id;
+	int cpu_speedo_value;
+	int cpu_iddq_value;
+	int soc_process_id;
+	int soc_speedo_id;
+	int soc_speedo_value;
+	int gpu_process_id;
+	int gpu_speedo_id;
+	int gpu_speedo_value;
+	enum tegra_revision revision;
+};
+
+struct dfll_fcpu_data {
+	const long unsigned int *cpu_max_freq_table;
+	unsigned int cpu_max_freq_table_size;
+	const struct cvb_table *cpu_cvb_tables;
+	unsigned int cpu_cvb_tables_size;
+};
+
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
+
+struct mv_xor_v2_descriptor {
+	u16 desc_id;
+	u16 flags;
+	u32 crc32_result;
+	u32 desc_ctrl;
+	u32 buff_size;
+	u32 fill_pattern_src_addr[4];
+	u32 data_buff_addr[12];
+	u32 reserved[12];
+};
+
+struct mv_xor_v2_sw_desc;
+
+struct mv_xor_v2_device {
+	spinlock_t lock;
+	void *dma_base;
+	void *glob_base;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct tasklet_struct irq_tasklet;
+	struct list_head free_sw_desc;
+	struct dma_device dmadev;
+	struct dma_chan dmachan;
+	dma_addr_t hw_desq;
+	struct mv_xor_v2_descriptor *hw_desq_virt;
+	struct mv_xor_v2_sw_desc *sw_desq;
+	int desc_size;
+	unsigned int npendings;
+	unsigned int hw_queue_idx;
+	unsigned int irq;
+};
+
+struct mv_xor_v2_sw_desc {
+	int idx;
+	struct dma_async_tx_descriptor async_tx;
+	struct mv_xor_v2_descriptor hw_desc;
+	struct list_head free_list;
+};
+
+enum udma_tp_level {
+	UDMA_TP_NORMAL = 0,
+	UDMA_TP_HIGH = 1,
+	UDMA_TP_ULTRAHIGH = 2,
+	UDMA_TP_LAST = 3,
+};
+
+enum psil_endpoint_type {
+	PSIL_EP_NATIVE = 0,
+	PSIL_EP_PDMA_XY = 1,
+	PSIL_EP_PDMA_MCAN = 2,
+	PSIL_EP_PDMA_AASRC = 3,
+};
+
+struct psil_endpoint_config {
+	enum psil_endpoint_type ep_type;
+	enum udma_tp_level channel_tpl;
+	unsigned int pkt_mode: 1;
+	unsigned int notdpkt: 1;
+	unsigned int needs_epib: 1;
+	unsigned int pdma_acc32: 1;
+	unsigned int pdma_burst: 1;
+	u32 psd_size;
+	s16 mapped_channel_id;
+	u16 flow_start;
+	u16 flow_num;
+	s16 default_flow_id;
+};
+
+struct psil_ep {
+	u32 thread_id;
+	struct psil_endpoint_config ep_config;
+};
+
+struct psil_ep_map {
+	char *name;
+	struct psil_ep *src;
+	int src_count;
+	struct psil_ep *dst;
+	int dst_count;
+};
+
+struct bcm2835_pm {
+	struct device *dev;
+	void *base;
+	void *asb;
+	void *rpivid_asb;
+};
+
+struct bcm2835_power;
+
+struct bcm2835_power_domain {
+	struct generic_pm_domain base;
+	struct bcm2835_power *power;
+	u32 domain;
+	struct clk *clk;
+};
+
+struct bcm2835_power {
+	struct device *dev;
+	void *base;
+	void *asb;
+	void *rpivid_asb;
+	struct genpd_onecell_data pd_xlate;
+	struct bcm2835_power_domain domains[13];
+	struct reset_controller_dev reset;
+};
+
+struct bm_buffer {
+	union {
+		struct {
+			__be16 bpid;
+			__be16 hi;
+			__be32 lo;
+		};
+		__be64 data;
+	};
+};
+
+enum bm_rcr_pmode {
+	bm_rcr_pci = 0,
+	bm_rcr_pce = 1,
+	bm_rcr_pvb = 2,
+};
+
+enum bm_rcr_cmode {
+	bm_rcr_cci = 0,
+	bm_rcr_cce = 1,
+};
+
+struct bm_rcr_entry {
+	union {
+		struct {
+			u8 _ncw_verb;
+			u8 bpid;
+			u8 __reserved1[62];
+		};
+		struct bm_buffer bufs[8];
+	};
+};
+
+struct bm_rcr {
+	struct bm_rcr_entry *ring;
+	struct bm_rcr_entry *cursor;
+	u8 ci;
+	u8 available;
+	u8 ithresh;
+	u8 vbit;
+};
+
+struct bm_mc_command {
+	u8 _ncw_verb;
+	u8 bpid;
+	u8 __reserved[62];
+};
+
+union bm_mc_result {
+	struct {
+		u8 verb;
+		u8 bpid;
+		u8 __reserved[62];
+	};
+	struct bm_buffer bufs[8];
+};
+
+struct bm_mc {
+	struct bm_mc_command *cr;
+	union bm_mc_result *rr;
+	u8 rridx;
+	u8 vbit;
+};
+
+struct bm_addr {
+	void *ce;
+	__be32 *ce_be;
+	void *ci;
+};
+
+struct bm_portal {
+	struct bm_addr addr;
+	struct bm_rcr rcr;
+	struct bm_mc mc;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+};
+
+struct bman_portal {
+	struct bm_portal p;
+	long unsigned int irq_sources;
+	const struct bm_portal_config *config;
+	char irqname[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bman_pool {
+	u32 bpid;
+	struct bman_portal *portal;
+	struct bman_pool *next;
+};
+
+struct imx8mp_blk_ctrl_domain;
+
+struct imx8mp_blk_ctrl {
+	struct device *dev;
+	struct notifier_block power_nb;
+	struct device *bus_power_dev;
+	struct regmap *regmap;
+	struct imx8mp_blk_ctrl_domain *domains;
+	struct genpd_onecell_data onecell_data;
+	void (*power_off)(struct imx8mp_blk_ctrl *, struct imx8mp_blk_ctrl_domain *);
+	void (*power_on)(struct imx8mp_blk_ctrl *, struct imx8mp_blk_ctrl_domain *);
+};
+
+struct imx8mp_blk_ctrl_domain_data;
+
+struct imx8mp_blk_ctrl_domain {
+	struct generic_pm_domain genpd;
+	const struct imx8mp_blk_ctrl_domain_data *data;
+	struct clk_bulk_data clks[2];
+	struct device *power_dev;
+	struct imx8mp_blk_ctrl *bc;
+	int id;
+};
+
+struct imx8mp_blk_ctrl_domain_data {
+	const char *name;
+	const char * const *clk_names;
+	int num_clks;
+	const char *gpc_name;
+};
+
+struct imx8mp_blk_ctrl_data {
+	int max_reg;
+	notifier_fn_t power_notifier_fn;
+	void (*power_off)(struct imx8mp_blk_ctrl *, struct imx8mp_blk_ctrl_domain *);
+	void (*power_on)(struct imx8mp_blk_ctrl *, struct imx8mp_blk_ctrl_domain *);
+	const struct imx8mp_blk_ctrl_domain_data *domains;
+	int num_domains;
+};
+
+struct crci_config {
+	u32 num_rows;
+	const u32 (*array)[12];
+};
+
+struct gsbi_info {
+	struct clk *hclk;
+	u32 mode;
+	u32 crci;
+	struct regmap *tcsr;
+};
+
+struct rockchip_domain_info {
+	const char *name;
+	int pwr_mask;
+	int status_mask;
+	int req_mask;
+	int idle_mask;
+	int ack_mask;
+	bool active_wakeup;
+	int pwr_w_mask;
+	int req_w_mask;
+};
+
+struct rockchip_pmu_info {
+	u32 pwr_offset;
+	u32 status_offset;
+	u32 req_offset;
+	u32 idle_offset;
+	u32 ack_offset;
+	u32 core_pwrcnt_offset;
+	u32 gpu_pwrcnt_offset;
+	unsigned int core_power_transition_time;
+	unsigned int gpu_power_transition_time;
+	int num_domains;
+	const struct rockchip_domain_info *domain_info;
+};
+
+struct rockchip_pmu;
+
+struct rockchip_pm_domain {
+	struct generic_pm_domain genpd;
+	const struct rockchip_domain_info *info;
+	struct rockchip_pmu *pmu;
+	int num_qos;
+	struct regmap **qos_regmap;
+	u32 *qos_save_regs[5];
+	int num_clks;
+	struct clk_bulk_data *clks;
+};
+
+struct rockchip_pmu {
+	struct device *dev;
+	struct regmap *regmap;
+	const struct rockchip_pmu_info *info;
+	struct mutex mutex;
+	struct genpd_onecell_data genpd_data;
+	struct generic_pm_domain *domains[0];
+};
+
+enum mrq_pg_cmd {
+	CMD_PG_QUERY_ABI = 0,
+	CMD_PG_SET_STATE = 1,
+	CMD_PG_GET_STATE = 2,
+	CMD_PG_GET_NAME = 3,
+	CMD_PG_GET_MAX_ID = 4,
+};
+
+enum pg_states {
+	PG_STATE_OFF = 0,
+	PG_STATE_ON = 1,
+	PG_STATE_RUNNING = 2,
+};
+
+struct cmd_pg_query_abi_request {
+	uint32_t type;
+};
+
+struct cmd_pg_set_state_request {
+	uint32_t state;
+};
+
+struct cmd_pg_get_state_response {
+	uint32_t state;
+};
+
+struct cmd_pg_get_name_response {
+	uint8_t name[40];
+};
+
+struct cmd_pg_get_max_id_response {
+	uint32_t max_id;
+};
+
+struct mrq_pg_request {
+	uint32_t cmd;
+	uint32_t id;
+	union {
+		struct cmd_pg_query_abi_request query_abi;
+		struct cmd_pg_set_state_request set_state;
+	};
+};
+
+struct mrq_pg_response {
+	union {
+		struct cmd_pg_get_state_response get_state;
+		struct cmd_pg_get_name_response get_name;
+		struct cmd_pg_get_max_id_response get_max_id;
+	};
+};
+
+struct tegra_powergate_info {
+	unsigned int id;
+	char *name;
+};
+
+struct tegra_powergate {
+	struct generic_pm_domain genpd;
+	struct tegra_bpmp *bpmp;
+	unsigned int id;
+};
+
+struct virtio_driver {
+	struct device_driver driver;
+	const struct virtio_device_id *id_table;
+	const unsigned int *feature_table;
+	unsigned int feature_table_size;
+	const unsigned int *feature_table_legacy;
+	unsigned int feature_table_size_legacy;
+	int (*validate)(struct virtio_device *);
+	int (*probe)(struct virtio_device *);
+	void (*scan)(struct virtio_device *);
+	void (*remove)(struct virtio_device *);
+	void (*config_changed)(struct virtio_device *);
+	int (*freeze)(struct virtio_device *);
+	int (*restore)(struct virtio_device *);
+};
+
+struct virtio_pci_common_cfg {
+	__le32 device_feature_select;
+	__le32 device_feature;
+	__le32 guest_feature_select;
+	__le32 guest_feature;
+	__le16 msix_config;
+	__le16 num_queues;
+	__u8 device_status;
+	__u8 config_generation;
+	__le16 queue_select;
+	__le16 queue_size;
+	__le16 queue_msix_vector;
+	__le16 queue_enable;
+	__le16 queue_notify_off;
+	__le32 queue_desc_lo;
+	__le32 queue_desc_hi;
+	__le32 queue_avail_lo;
+	__le32 queue_avail_hi;
+	__le32 queue_used_lo;
+	__le32 queue_used_hi;
+};
+
+struct virtio_pci_legacy_device {
+	struct pci_dev *pci_dev;
+	u8 *isr;
+	void *ioaddr;
+	struct virtio_device_id id;
+};
+
+struct virtio_pci_modern_device {
+	struct pci_dev *pci_dev;
+	struct virtio_pci_common_cfg *common;
+	void *device;
+	void *notify_base;
+	resource_size_t notify_pa;
+	u8 *isr;
+	size_t notify_len;
+	size_t device_len;
+	int notify_map_cap;
+	u32 notify_offset_multiplier;
+	int modern_bars;
+	struct virtio_device_id id;
+};
+
+struct virtio_pci_vq_info {
+	struct virtqueue *vq;
+	struct list_head node;
+	unsigned int msix_vector;
+};
+
+struct virtio_pci_device {
+	struct virtio_device vdev;
+	struct pci_dev *pci_dev;
+	struct virtio_pci_legacy_device ldev;
+	struct virtio_pci_modern_device mdev;
+	bool is_legacy;
+	u8 *isr;
+	spinlock_t lock;
+	struct list_head virtqueues;
+	struct virtio_pci_vq_info **vqs;
+	int msix_enabled;
+	int intx_enabled;
+	cpumask_var_t *msix_affinity_masks;
+	char (*msix_names)[256];
+	unsigned int msix_vectors;
+	unsigned int msix_used_vectors;
+	bool per_vq_vectors;
+	struct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16);
+	void (*del_vq)(struct virtio_pci_vq_info *);
+	u16 (*config_vector)(struct virtio_pci_device *, u16);
+};
+
+enum {
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
+};
+
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
+};
+
+struct pwm_continuous_reg_data {
+	unsigned int min_uV_dutycycle;
+	unsigned int max_uV_dutycycle;
+	unsigned int dutycycle_unit;
+};
+
+struct pwm_voltages;
+
+struct pwm_regulator_data {
+	struct pwm_device *pwm;
+	struct pwm_voltages *duty_cycle_table;
+	struct pwm_continuous_reg_data continuous;
+	struct regulator_desc desc;
+	int state;
+	struct gpio_desc *enb_gpio;
+};
+
+struct pwm_voltages {
+	unsigned int uV;
+	unsigned int dutycycle;
+};
+
+struct reset_simple_data {
+	spinlock_t lock;
+	void *membase;
+	struct reset_controller_dev rcdev;
+	bool active_low;
+	bool status_active_low;
+	unsigned int reset_us;
+};
+
+struct reset_simple_devdata {
+	u32 reg_offset;
+	u32 nr_resets;
+	bool active_low;
+	bool status_active_low;
+};
+
+struct tty_audit_buf {
+	struct mutex mutex;
+	dev_t dev;
+	unsigned int icanon: 1;
+	size_t valid;
+	unsigned char *data;
+};
+
+struct unipair {
+	short unsigned int unicode;
+	short unsigned int fontpos;
+};
+
+enum translation_map {
+	LAT1_MAP = 0,
+	GRAF_MAP = 1,
+	IBMPC_MAP = 2,
+	USER_MAP = 3,
+	FIRST_MAP = 0,
+	LAST_MAP = 3,
+};
+
+struct uni_pagedict {
+	u16 **uni_pgdir[32];
+	long unsigned int refcount;
+	long unsigned int sum;
+	unsigned char *inverse_translations[4];
+	u16 *inverse_trans_unicode;
+};
+
+struct s3c2410_uartcfg {
+	unsigned char hwport;
+	unsigned char unused;
+	short unsigned int flags;
+	upf_t uart_flags;
+	unsigned int clk_sel;
+	unsigned int has_fracval;
+	long unsigned int ucon;
+	long unsigned int ulcon;
+	long unsigned int ufcon;
+};
+
+enum s3c24xx_port_type {
+	TYPE_S3C24XX = 0,
+	TYPE_S3C6400 = 1,
+	TYPE_APPLE_S5L = 2,
+};
+
+struct s3c24xx_uart_info {
+	const char *name;
+	enum s3c24xx_port_type type;
+	unsigned int port_type;
+	unsigned int fifosize;
+	long unsigned int rx_fifomask;
+	long unsigned int rx_fifoshift;
+	long unsigned int rx_fifofull;
+	long unsigned int tx_fifomask;
+	long unsigned int tx_fifoshift;
+	long unsigned int tx_fifofull;
+	unsigned int def_clk_sel;
+	long unsigned int num_clks;
+	long unsigned int clksel_mask;
+	long unsigned int clksel_shift;
+	long unsigned int ucon_mask;
+	unsigned int has_divslot: 1;
+};
+
+struct s3c24xx_serial_drv_data {
+	const struct s3c24xx_uart_info info;
+	const struct s3c2410_uartcfg def_cfg;
+	const unsigned int fifosize[12];
+};
+
+struct s3c24xx_uart_dma {
+	unsigned int rx_chan_id;
+	unsigned int tx_chan_id;
+	struct dma_slave_config rx_conf;
+	struct dma_slave_config tx_conf;
+	struct dma_chan *rx_chan;
+	struct dma_chan *tx_chan;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	char *rx_buf;
+	dma_addr_t tx_transfer_addr;
+	size_t rx_size;
+	size_t tx_size;
+	struct dma_async_tx_descriptor *tx_desc;
+	struct dma_async_tx_descriptor *rx_desc;
+	int tx_bytes_requested;
+	int rx_bytes_requested;
+};
+
+struct s3c24xx_uart_port {
+	unsigned char rx_claimed;
+	unsigned char tx_claimed;
+	unsigned char rx_enabled;
+	unsigned char tx_enabled;
+	unsigned int pm_level;
+	long unsigned int baudclk_rate;
+	unsigned int min_dma_size;
+	unsigned int rx_irq;
+	unsigned int tx_irq;
+	unsigned int tx_in_progress;
+	unsigned int tx_mode;
+	unsigned int rx_mode;
+	const struct s3c24xx_uart_info *info;
+	struct clk *clk;
+	struct clk *baudclk;
+	struct uart_port port;
+	const struct s3c24xx_serial_drv_data *drv_data;
+	const struct s3c2410_uartcfg *cfg;
+	struct s3c24xx_uart_dma *dma;
+};
+
+struct samsung_early_console_data {
+	u32 txfull_mask;
+	u32 rxfifo_mask;
+};
+
+struct tegra_tcu {
+	struct uart_driver driver;
+	struct console console;
+	struct uart_port port;
+	struct mbox_client tx_client;
+	struct mbox_client rx_client;
+	struct mbox_chan *tx;
+	struct mbox_chan *rx;
+};
+
+struct timer_rand_state {
+	long unsigned int last_time;
+	long int last_delta;
+	long int last_delta2;
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 100,
+	CRNG_RESEED_INTERVAL = 6000,
+};
+
+struct crng {
+	u8 key[32];
+	long unsigned int generation;
+	local_lock_t lock;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+struct fast_pool {
+	long unsigned int pool[4];
+	long unsigned int last;
+	unsigned int count;
+	struct timer_list mix;
+};
+
+struct entropy_timer_state {
+	long unsigned int entropy;
+	struct timer_list timer;
+	unsigned int samples;
+	unsigned int samples_per_bit;
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 6,
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+enum tpm2_structures {
+	TPM2_ST_NO_SESSIONS = 32769,
+	TPM2_ST_SESSIONS = 32770,
+};
+
+enum tpm2_capabilities {
+	TPM2_CAP_HANDLES = 1,
+	TPM2_CAP_COMMANDS = 2,
+	TPM2_CAP_PCRS = 5,
+	TPM2_CAP_TPM_PROPERTIES = 6,
+};
+
+enum tpm2_cc_attrs {
+	TPM2_CC_ATTR_CHANDLES = 25,
+	TPM2_CC_ATTR_RHANDLE = 28,
+};
+
+enum tpm_buf_flags {
+	TPM_BUF_OVERFLOW = 1,
+};
+
+enum tpm2_handle_types {
+	TPM2_HT_HMAC_SESSION = 33554432,
+	TPM2_HT_POLICY_SESSION = 50331648,
+	TPM2_HT_TRANSIENT = 2147483648,
+};
+
+struct tpm2_context {
+	__be64 sequence;
+	__be32 saved_handle;
+	__be32 hierarchy;
+	__be16 blob_size;
+} __attribute__((packed));
+
+struct tpm2_cap_handles {
+	u8 more_data;
+	__be32 capability;
+	__be32 count;
+	__be32 handles[0];
+} __attribute__((packed));
+
+struct nvidia_smmu {
+	struct arm_smmu_device smmu;
+	void *bases[2];
+	unsigned int num_instances;
+	struct tegra_mc *mc;
+};
+
+enum iommu_dma_cookie_type {
+	IOMMU_DMA_IOVA_COOKIE = 0,
+	IOMMU_DMA_MSI_COOKIE = 1,
+};
+
+struct iova {
+	struct rb_node node;
+	long unsigned int pfn_hi;
+	long unsigned int pfn_lo;
+};
+
+struct iova_rcache;
+
+struct iova_domain {
+	spinlock_t iova_rbtree_lock;
+	struct rb_root rbroot;
+	struct rb_node *cached_node;
+	struct rb_node *cached32_node;
+	long unsigned int granule;
+	long unsigned int start_pfn;
+	long unsigned int dma_32bit_pfn;
+	long unsigned int max32_alloc_size;
+	struct iova anchor;
+	struct iova_rcache *rcaches;
+	struct hlist_node cpuhp_dead;
+};
+
+struct iova_fq;
+
+struct iommu_dma_cookie {
+	enum iommu_dma_cookie_type type;
+	union {
+		struct {
+			struct iova_domain iovad;
+			struct iova_fq *fq;
+			atomic64_t fq_flush_start_cnt;
+			atomic64_t fq_flush_finish_cnt;
+			struct timer_list fq_timer;
+			atomic_t fq_timer_on;
+		};
+		dma_addr_t msi_iova;
+	};
+	struct list_head msi_page_list;
+	struct iommu_domain *fq_domain;
+	struct mutex mutex;
+};
+
+struct iommu_dma_msi_page {
+	struct list_head list;
+	dma_addr_t iova;
+	phys_addr_t phys;
+};
+
+struct iova_fq_entry {
+	long unsigned int iova_pfn;
+	long unsigned int pages;
+	struct list_head freelist;
+	u64 counter;
+};
+
+struct iova_fq {
+	struct iova_fq_entry entries[256];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t lock;
+};
+
+struct pci_dev;
+
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct class *, struct class_attribute *, char *);
+	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct acpi_bus_type {
+	struct list_head list;
+	const char *name;
+	bool (*match)(struct device *);
+	struct acpi_device * (*find_companion)(struct device *);
+	void (*setup)(struct device *);
+};
+
+enum drm_minor_type {
+	DRM_MINOR_PRIMARY = 0,
+	DRM_MINOR_CONTROL = 1,
+	DRM_MINOR_RENDER = 2,
+};
+
+struct drm_mode_fb_cmd {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pitch;
+	__u32 bpp;
+	__u32 depth;
+	__u32 handle;
+};
+
+struct drm_mode_fb_dirty_cmd {
+	__u32 fb_id;
+	__u32 flags;
+	__u32 color;
+	__u32 num_clips;
+	__u64 clips_ptr;
+};
+
+struct drm_mm;
+
+struct drm_mm_node {
+	long unsigned int color;
+	u64 start;
+	u64 size;
+	struct drm_mm *mm;
+	struct list_head node_list;
+	struct list_head hole_stack;
+	struct rb_node rb;
+	struct rb_node rb_hole_size;
+	struct rb_node rb_hole_addr;
+	u64 __subtree_last;
+	u64 hole_size;
+	u64 subtree_max_hole;
+	long unsigned int flags;
+};
+
+struct drm_mm {
+	void (*color_adjust)(const struct drm_mm_node *, long unsigned int, u64 *, u64 *);
+	struct list_head hole_stack;
+	struct drm_mm_node head_node;
+	struct rb_root_cached interval_tree;
+	struct rb_root_cached holes_size;
+	struct rb_root holes_addr;
+	long unsigned int scan_active;
+};
+
+struct drm_vma_offset_manager {
+	rwlock_t vm_lock;
+	struct drm_mm vm_addr_space_mm;
+};
+
+struct drm_info_list {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+struct drm_info_node {
+	struct drm_minor *minor;
+	const struct drm_info_list *info_ent;
+	struct list_head list;
+	struct dentry *dent;
+};
+
+struct drm_vma_offset_node {
+	rwlock_t vm_lock;
+	struct drm_mm_node vm_node;
+	struct rb_root vm_files;
+	void *driver_private;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list *fences;
+};
+
+struct drm_gem_object_funcs;
+
+struct drm_gem_object {
+	struct kref refcount;
+	unsigned int handle_count;
+	struct drm_device *dev;
+	struct file *filp;
+	struct drm_vma_offset_node vma_node;
+	size_t size;
+	int name;
+	struct dma_buf *dma_buf;
+	struct dma_buf_attachment *import_attach;
+	struct dma_resv *resv;
+	struct dma_resv _resv;
+	const struct drm_gem_object_funcs *funcs;
+};
+
+struct drm_gem_object_funcs {
+	void (*free)(struct drm_gem_object *);
+	int (*open)(struct drm_gem_object *, struct drm_file *);
+	void (*close)(struct drm_gem_object *, struct drm_file *);
+	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
+	struct dma_buf * (*export)(struct drm_gem_object *, int);
+	int (*pin)(struct drm_gem_object *);
+	void (*unpin)(struct drm_gem_object *);
+	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
+	int (*vmap)(struct drm_gem_object *, struct iosys_map *);
+	void (*vunmap)(struct drm_gem_object *, struct iosys_map *);
+	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct drm_mode_rmfb_work {
+	struct work_struct work;
+	struct list_head fbs;
+};
+
+struct drm_mode_card_res {
+	__u64 fb_id_ptr;
+	__u64 crtc_id_ptr;
+	__u64 connector_id_ptr;
+	__u64 encoder_id_ptr;
+	__u32 count_fbs;
+	__u32 count_crtcs;
+	__u32 count_connectors;
+	__u32 count_encoders;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+};
+
+struct drmres_node {
+	struct list_head entry;
+	drmres_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct drmres {
+	struct drmres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+struct drm_client_buffer;
+
+struct drm_fb_helper_funcs;
+
+struct drm_fb_helper {
+	struct drm_client_dev client;
+	struct drm_client_buffer *buffer;
+	struct drm_framebuffer *fb;
+	struct drm_device *dev;
+	const struct drm_fb_helper_funcs *funcs;
+	struct fb_info *fbdev;
+	u32 pseudo_palette[17];
+	struct drm_clip_rect damage_clip;
+	spinlock_t damage_lock;
+	struct work_struct damage_work;
+	struct work_struct resume_work;
+	struct mutex lock;
+	struct list_head kernel_fb_list;
+	bool delayed_hotplug;
+	bool deferred_setup;
+	int preferred_bpp;
+};
+
+struct drm_client_buffer {
+	struct drm_client_dev *client;
+	u32 handle;
+	u32 pitch;
+	struct drm_gem_object *gem;
+	struct iosys_map map;
+	struct drm_framebuffer *fb;
+};
+
+struct drm_fb_helper_surface_size {
+	u32 fb_width;
+	u32 fb_height;
+	u32 surface_width;
+	u32 surface_height;
+	u32 surface_bpp;
+	u32 surface_depth;
+};
+
+struct drm_fb_helper_funcs {
+	int (*fb_probe)(struct drm_fb_helper *, struct drm_fb_helper_surface_size *);
+};
+
+struct drm_atomic_helper_damage_iter {
+	struct drm_rect plane_src;
+	const struct drm_rect *clips;
+	uint32_t num_clips;
+	uint32_t curr_clip;
+	bool full_update;
+};
+
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	long unsigned int size;
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+typedef void (*node_registration_func_t)(struct node *);
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	long unsigned int present_kernel_pages;
+	long unsigned int present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			long unsigned int max_pages;
+		} s;
+		struct {
+			long unsigned int unit_pages;
+		} d;
+	};
+};
+
+struct memory_block {
+	long unsigned int start_section_nr;
+	long unsigned int state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	long unsigned int nr_vmemmap_pages;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
+
+struct node_access_nodes {
+	struct device dev;
+	struct list_head list_node;
+	unsigned int access;
+	struct node_hmem_attrs hmem_attrs;
+};
+
+struct node_cache_info {
+	struct device dev;
+	struct list_head node;
+	struct node_cache_attrs cache_attrs;
+};
+
+struct node_attr {
+	struct device_attribute attr;
+	enum node_states state;
+};
+
+struct regmap_irq_chip_data {
+	struct mutex lock;
+	struct irq_chip irq_chip;
+	struct regmap *map;
+	const struct regmap_irq_chip *chip;
+	int irq_base;
+	struct irq_domain *domain;
+	int irq;
+	int wake_count;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	void *status_reg_buf;
+	unsigned int *main_status_buf;
+	unsigned int *status_buf;
+	unsigned int *mask_buf;
+	unsigned int *mask_buf_def;
+	unsigned int *wake_buf;
+	unsigned int *type_buf;
+	unsigned int *type_buf_def;
+	unsigned int **virt_buf;
+	unsigned int **config_buf;
+	unsigned int irq_reg_stride;
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	unsigned int clear_status: 1;
+};
+
+struct sram_config {
+	int (*init)();
+	bool map_only_reserved;
+};
+
+struct sram_partition {
+	void *base;
+	struct gen_pool *pool;
+	struct bin_attribute battr;
+	struct mutex lock;
+	struct list_head list;
+};
+
+struct sram_dev {
+	const struct sram_config *config;
+	struct device *dev;
+	void *virt_base;
+	bool no_memory_wc;
+	struct gen_pool *pool;
+	struct clk *clk;
+	struct sram_partition *partition;
+	u32 partitions;
+};
+
+struct sram_reserve {
+	struct list_head list;
+	u32 start;
+	u32 size;
+	struct resource res;
+	bool export;
+	bool pool;
+	bool protect_exec;
+	const char *label;
+};
+
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct spi_statistics {
+	struct u64_stats_sync syncp;
+	u64_stats_t messages;
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t timedout;
+	u64_stats_t spi_sync;
+	u64_stats_t spi_sync_immediate;
+	u64_stats_t spi_async;
+	u64_stats_t bytes;
+	u64_stats_t bytes_rx;
+	u64_stats_t bytes_tx;
+	u64_stats_t transfer_bytes_histo[17];
+	u64_stats_t transfers_split_maxsize;
+};
+
+struct spi_delay {
+	u16 value;
+	u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics *pcpu_statistics;
+};
+
+struct spi_message;
+
+struct spi_transfer;
+
+struct spi_controller_mem_ops;
+
+struct spi_controller_mem_caps;
+
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	bool slave;
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
+	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	struct completion cur_msg_completion;
+	bool cur_msg_incomplete;
+	bool cur_msg_need_completion;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	int (*slave_abort)(struct spi_controller *);
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics *pcpu_statistics;
+	struct dma_chan *dma_tx;
+	struct dma_chan *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	long unsigned int irq_flags;
+	bool queue_empty;
+	bool must_async;
+};
+
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	int status;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+	bool prepared;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	bool timestamped;
+	struct list_head transfer_list;
+	u16 error;
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+enum stmpe_block {
+	STMPE_BLOCK_GPIO = 1,
+	STMPE_BLOCK_KEYPAD = 2,
+	STMPE_BLOCK_TOUCHSCREEN = 4,
+	STMPE_BLOCK_ADC = 8,
+	STMPE_BLOCK_PWM = 16,
+	STMPE_BLOCK_ROTATOR = 32,
+};
+
+enum stmpe_partnum {
+	STMPE610 = 0,
+	STMPE801 = 1,
+	STMPE811 = 2,
+	STMPE1600 = 3,
+	STMPE1601 = 4,
+	STMPE1801 = 5,
+	STMPE2401 = 6,
+	STMPE2403 = 7,
+	STMPE_NBR_PARTS = 8,
+};
+
+struct stmpe_client_info;
+
+struct stmpe_variant_info;
+
+struct stmpe_platform_data;
+
+struct stmpe {
+	struct regulator *vcc;
+	struct regulator *vio;
+	struct mutex lock;
+	struct mutex irq_lock;
+	struct device *dev;
+	struct irq_domain *domain;
+	void *client;
+	struct stmpe_client_info *ci;
+	enum stmpe_partnum partnum;
+	struct stmpe_variant_info *variant;
+	const u8 *regs;
+	int irq;
+	int num_gpios;
+	u8 ier[2];
+	u8 oldier[2];
+	struct stmpe_platform_data *pdata;
+	u8 sample_time;
+	u8 mod_12b;
+	u8 ref_sel;
+	u8 adc_freq;
+};
+
+struct stmpe_client_info {
+	void *data;
+	int irq;
+	void *client;
+	struct device *dev;
+	int (*read_byte)(struct stmpe *, u8);
+	int (*write_byte)(struct stmpe *, u8, u8);
+	int (*read_block)(struct stmpe *, u8, u8, u8 *);
+	int (*write_block)(struct stmpe *, u8, u8, const u8 *);
+	void (*init)(struct stmpe *);
+};
+
+struct stmpe_variant_block;
+
+struct stmpe_variant_info {
+	const char *name;
+	u16 id_val;
+	u16 id_mask;
+	int num_gpios;
+	int af_bits;
+	const u8 *regs;
+	struct stmpe_variant_block *blocks;
+	int num_blocks;
+	int num_irqs;
+	int (*enable)(struct stmpe *, unsigned int, bool);
+	int (*get_altfunc)(struct stmpe *, enum stmpe_block);
+	int (*enable_autosleep)(struct stmpe *, int);
+};
+
+struct stmpe_variant_block {
+	const struct mfd_cell *cell;
+	int irq;
+	enum stmpe_block block;
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct trace_event_raw_dma_fence {
+	struct trace_entry ent;
+	u32 __data_loc_driver;
+	u32 __data_loc_timeline;
+	unsigned int context;
+	unsigned int seqno;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dma_fence {
+	u32 driver;
+	u32 timeline;
+};
+
+typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
+
+struct default_wait_cb {
+	struct dma_fence_cb base;
+	struct task_struct *task;
+};
+
+struct cxl_reg_map {
+	bool valid;
+	long unsigned int offset;
+	long unsigned int size;
+};
+
+struct cxl_component_reg_map {
+	struct cxl_reg_map hdm_decoder;
+};
+
+struct cxl_device_reg_map {
+	struct cxl_reg_map status;
+	struct cxl_reg_map mbox;
+	struct cxl_reg_map memdev;
+};
+
+struct cxl_register_map {
+	void *base;
+	u64 block_offset;
+	u8 reg_type;
+	u8 barno;
+	union {
+		struct cxl_component_reg_map component_map;
+		struct cxl_device_reg_map device_map;
+	};
+};
+
+enum cxl_decoder_type {
+	CXL_DECODER_ACCELERATOR = 2,
+	CXL_DECODER_EXPANDER = 3,
+};
+
+struct cxl_region;
+
+struct cxl_decoder {
+	struct device dev;
+	int id;
+	struct range hpa_range;
+	int interleave_ways;
+	int interleave_granularity;
+	enum cxl_decoder_type target_type;
+	struct cxl_region *region;
+	long unsigned int flags;
+	int (*commit)(struct cxl_decoder *);
+	int (*reset)(struct cxl_decoder *);
+};
+
+enum cxl_decoder_mode {
+	CXL_DECODER_NONE = 0,
+	CXL_DECODER_RAM = 1,
+	CXL_DECODER_PMEM = 2,
+	CXL_DECODER_MIXED = 3,
+	CXL_DECODER_DEAD = 4,
+};
+
+enum cxl_config_state {
+	CXL_CONFIG_IDLE = 0,
+	CXL_CONFIG_INTERLEAVE_ACTIVE = 1,
+	CXL_CONFIG_ACTIVE = 2,
+	CXL_CONFIG_RESET_PENDING = 3,
+	CXL_CONFIG_COMMIT = 4,
+};
+
+struct cxl_endpoint_decoder;
+
+struct cxl_region_params {
+	enum cxl_config_state state;
+	uuid_t uuid;
+	int interleave_ways;
+	int interleave_granularity;
+	struct resource *res;
+	struct cxl_endpoint_decoder *targets[16];
+	int nr_targets;
+};
+
+struct cxl_region {
+	struct device dev;
+	int id;
+	enum cxl_decoder_mode mode;
+	enum cxl_decoder_type type;
+	struct cxl_region_params params;
+};
+
+struct cxl_endpoint_decoder {
+	struct cxl_decoder cxld;
+	struct resource *dpa_res;
+	resource_size_t skip;
+	enum cxl_decoder_mode mode;
+	int pos;
+};
+
+struct cxl_dport;
+
+struct cxl_switch_decoder {
+	struct cxl_decoder cxld;
+	seqlock_t target_lock;
+	int nr_targets;
+	struct cxl_dport *target[0];
+};
+
+struct cxl_port;
+
+struct cxl_dport {
+	struct device *dport;
+	int port_id;
+	resource_size_t component_reg_phys;
+	struct cxl_port *port;
+};
+
+struct cxl_root_decoder {
+	struct resource *res;
+	atomic_t region_id;
+	struct cxl_dport * (*calc_hb)(struct cxl_root_decoder *, int);
+	struct cxl_switch_decoder cxlsd;
+};
+
+struct cxl_cdat {
+	void *table;
+	size_t length;
+};
+
+struct cxl_port {
+	struct device dev;
+	struct device *uport;
+	struct device *host_bridge;
+	int id;
+	struct xarray dports;
+	struct xarray endpoints;
+	struct xarray regions;
+	struct cxl_dport *parent_dport;
+	struct ida decoder_ida;
+	int nr_dports;
+	int hdm_end;
+	int commit_end;
+	resource_size_t component_reg_phys;
+	bool dead;
+	unsigned int depth;
+	struct cxl_cdat cdat;
+	bool cdat_available;
+};
+
+struct cxl_ep {
+	struct device *ep;
+	struct cxl_dport *dport;
+	struct cxl_port *next;
+};
+
+struct cxl_driver {
+	const char *name;
+	int (*probe)(struct device *);
+	void (*remove)(struct device *);
+	struct device_driver drv;
+	int id;
+};
+
+enum cxl_regloc_type {
+	CXL_REGLOC_RBI_EMPTY = 0,
+	CXL_REGLOC_RBI_COMPONENT = 1,
+	CXL_REGLOC_RBI_VIRT = 2,
+	CXL_REGLOC_RBI_MEMDEV = 3,
+	CXL_REGLOC_RBI_TYPES = 4,
+};
+
+struct cxl_find_port_ctx {
+	const struct device *dport_dev;
+	const struct cxl_port *parent_port;
+	struct cxl_dport **dport;
+};
+
+struct acpi_cedt_chbs {
+	struct acpi_cedt_header header;
+	u32 uid;
+	u32 cxl_version;
+	u32 reserved;
+	u64 base;
+	u64 length;
+};
+
+struct nvdimm;
+
+struct nvdimm_bus_descriptor;
+
+typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *, unsigned int, int *);
+
+struct nvdimm_bus_fw_ops;
+
+struct nvdimm_bus_descriptor {
+	const struct attribute_group **attr_groups;
+	long unsigned int cmd_mask;
+	long unsigned int dimm_family_mask;
+	long unsigned int bus_family_mask;
+	struct module *module;
+	char *provider_name;
+	struct device_node *of_node;
+	ndctl_fn ndctl;
+	int (*flush_probe)(struct nvdimm_bus_descriptor *);
+	int (*clear_to_send)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *);
+	const struct nvdimm_bus_fw_ops *fw_ops;
+};
+
+enum nvdimm_fwa_state {
+	NVDIMM_FWA_INVALID = 0,
+	NVDIMM_FWA_IDLE = 1,
+	NVDIMM_FWA_ARMED = 2,
+	NVDIMM_FWA_BUSY = 3,
+	NVDIMM_FWA_ARM_OVERFLOW = 4,
+};
+
+enum nvdimm_fwa_capability {
+	NVDIMM_FWA_CAP_INVALID = 0,
+	NVDIMM_FWA_CAP_NONE = 1,
+	NVDIMM_FWA_CAP_QUIESCE = 2,
+	NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+struct nvdimm_bus_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm_bus_descriptor *);
+	enum nvdimm_fwa_capability (*capability)(struct nvdimm_bus_descriptor *);
+	int (*activate)(struct nvdimm_bus_descriptor *);
+};
+
+enum cxl_nvdimm_brige_state {
+	CXL_NVB_NEW = 0,
+	CXL_NVB_DEAD = 1,
+	CXL_NVB_ONLINE = 2,
+	CXL_NVB_OFFLINE = 3,
+};
+
+struct nvdimm_bus;
+
+struct cxl_nvdimm_bridge {
+	int id;
+	struct device dev;
+	struct cxl_port *port;
+	struct nvdimm_bus *nvdimm_bus;
+	struct nvdimm_bus_descriptor nd_desc;
+	struct work_struct state_work;
+	enum cxl_nvdimm_brige_state state;
+};
+
+struct cxl_cfmws_context {
+	struct device *dev;
+	struct cxl_port *root_port;
+	struct resource *cxl_res;
+	int id;
+};
+
+struct cxl_chbs_context {
+	struct device *dev;
+	long long unsigned int uid;
+	resource_size_t chbcr;
+};
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct opal_dev;
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+};
+
+enum ata_lpm_hints {
+	ATA_LPM_EMPTY = 1,
+	ATA_LPM_HIPM = 2,
+	ATA_LPM_WAKE_ONLY = 4,
+};
+
+enum ata_link_iter_mode {
+	ATA_LITER_EDGE = 0,
+	ATA_LITER_HOST_FIRST = 1,
+	ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+	ATA_DITER_ENABLED = 0,
+	ATA_DITER_ENABLED_REVERSE = 1,
+	ATA_DITER_ALL = 2,
+	ATA_DITER_ALL_REVERSE = 3,
+};
+
+enum {
+	ATA_READID_POSTRESET = 1,
+	ATA_DNXFER_PIO = 0,
+	ATA_DNXFER_DMA = 1,
+	ATA_DNXFER_40C = 2,
+	ATA_DNXFER_FORCE_PIO = 3,
+	ATA_DNXFER_FORCE_PIO0 = 4,
+	ATA_DNXFER_QUIET = 2147483648,
+};
+
+enum {
+	ATA_EH_SPDN_NCQ_OFF = 1,
+	ATA_EH_SPDN_SPEED_DOWN = 2,
+	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+	ATA_EH_SPDN_KEEP_ERRORS = 8,
+	ATA_EFLAG_IS_IO = 1,
+	ATA_EFLAG_DUBIOUS_XFER = 2,
+	ATA_EFLAG_OLD_ER = 2147483648,
+	ATA_ECAT_NONE = 0,
+	ATA_ECAT_ATA_BUS = 1,
+	ATA_ECAT_TOUT_HSM = 2,
+	ATA_ECAT_UNK_DEV = 3,
+	ATA_ECAT_DUBIOUS_NONE = 4,
+	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+	ATA_ECAT_NR = 8,
+	ATA_EH_CMD_DFL_TIMEOUT = 5000,
+	ATA_EH_RESET_COOL_DOWN = 5000,
+	ATA_EH_PRERESET_TIMEOUT = 10000,
+	ATA_EH_FASTDRAIN_INTERVAL = 3000,
+	ATA_EH_UA_TRIES = 5,
+	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+	ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+	const u8 *commands;
+	const unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+	u64 since;
+	int xfer_ok;
+	int nr_errors[8];
+};
+
+enum {
+	AHCI_MAX_PORTS = 32,
+	AHCI_MAX_CLKS = 5,
+	AHCI_MAX_SG = 168,
+	AHCI_DMA_BOUNDARY = 4294967295,
+	AHCI_MAX_CMDS = 32,
+	AHCI_CMD_SZ = 32,
+	AHCI_CMD_SLOT_SZ = 1024,
+	AHCI_RX_FIS_SZ = 256,
+	AHCI_CMD_TBL_CDB = 64,
+	AHCI_CMD_TBL_HDR_SZ = 128,
+	AHCI_CMD_TBL_SZ = 2816,
+	AHCI_CMD_TBL_AR_SZ = 90112,
+	AHCI_PORT_PRIV_DMA_SZ = 91392,
+	AHCI_PORT_PRIV_FBS_DMA_SZ = 95232,
+	AHCI_IRQ_ON_SG = 2147483648,
+	AHCI_CMD_ATAPI = 32,
+	AHCI_CMD_WRITE = 64,
+	AHCI_CMD_PREFETCH = 128,
+	AHCI_CMD_RESET = 256,
+	AHCI_CMD_CLR_BUSY = 1024,
+	RX_FIS_PIO_SETUP = 32,
+	RX_FIS_D2H_REG = 64,
+	RX_FIS_SDB = 88,
+	RX_FIS_UNK = 96,
+	HOST_CAP = 0,
+	HOST_CTL = 4,
+	HOST_IRQ_STAT = 8,
+	HOST_PORTS_IMPL = 12,
+	HOST_VERSION = 16,
+	HOST_EM_LOC = 28,
+	HOST_EM_CTL = 32,
+	HOST_CAP2 = 36,
+	HOST_RESET = 1,
+	HOST_IRQ_EN = 2,
+	HOST_MRSM = 4,
+	HOST_AHCI_EN = 2147483648,
+	HOST_CAP_SXS = 32,
+	HOST_CAP_EMS = 64,
+	HOST_CAP_CCC = 128,
+	HOST_CAP_PART = 8192,
+	HOST_CAP_SSC = 16384,
+	HOST_CAP_PIO_MULTI = 32768,
+	HOST_CAP_FBS = 65536,
+	HOST_CAP_PMP = 131072,
+	HOST_CAP_ONLY = 262144,
+	HOST_CAP_CLO = 16777216,
+	HOST_CAP_LED = 33554432,
+	HOST_CAP_ALPM = 67108864,
+	HOST_CAP_SSS = 134217728,
+	HOST_CAP_MPS = 268435456,
+	HOST_CAP_SNTF = 536870912,
+	HOST_CAP_NCQ = 1073741824,
+	HOST_CAP_64 = 2147483648,
+	HOST_CAP2_BOH = 1,
+	HOST_CAP2_NVMHCI = 2,
+	HOST_CAP2_APST = 4,
+	HOST_CAP2_SDS = 8,
+	HOST_CAP2_SADM = 16,
+	HOST_CAP2_DESO = 32,
+	PORT_LST_ADDR = 0,
+	PORT_LST_ADDR_HI = 4,
+	PORT_FIS_ADDR = 8,
+	PORT_FIS_ADDR_HI = 12,
+	PORT_IRQ_STAT = 16,
+	PORT_IRQ_MASK = 20,
+	PORT_CMD = 24,
+	PORT_TFDATA = 32,
+	PORT_SIG = 36,
+	PORT_CMD_ISSUE = 56,
+	PORT_SCR_STAT = 40,
+	PORT_SCR_CTL = 44,
+	PORT_SCR_ERR = 48,
+	PORT_SCR_ACT = 52,
+	PORT_SCR_NTF = 60,
+	PORT_FBS = 64,
+	PORT_DEVSLP = 68,
+	PORT_IRQ_COLD_PRES = 2147483648,
+	PORT_IRQ_TF_ERR = 1073741824,
+	PORT_IRQ_HBUS_ERR = 536870912,
+	PORT_IRQ_HBUS_DATA_ERR = 268435456,
+	PORT_IRQ_IF_ERR = 134217728,
+	PORT_IRQ_IF_NONFATAL = 67108864,
+	PORT_IRQ_OVERFLOW = 16777216,
+	PORT_IRQ_BAD_PMP = 8388608,
+	PORT_IRQ_PHYRDY = 4194304,
+	PORT_IRQ_DEV_ILCK = 128,
+	PORT_IRQ_CONNECT = 64,
+	PORT_IRQ_SG_DONE = 32,
+	PORT_IRQ_UNK_FIS = 16,
+	PORT_IRQ_SDB_FIS = 8,
+	PORT_IRQ_DMAS_FIS = 4,
+	PORT_IRQ_PIOS_FIS = 2,
+	PORT_IRQ_D2H_REG_FIS = 1,
+	PORT_IRQ_FREEZE = 683671632,
+	PORT_IRQ_ERROR = 2025848912,
+	DEF_PORT_IRQ = 2025848959,
+	PORT_CMD_ASP = 134217728,
+	PORT_CMD_ALPE = 67108864,
+	PORT_CMD_ATAPI = 16777216,
+	PORT_CMD_FBSCP = 4194304,
+	PORT_CMD_ESP = 2097152,
+	PORT_CMD_HPCP = 262144,
+	PORT_CMD_PMP = 131072,
+	PORT_CMD_LIST_ON = 32768,
+	PORT_CMD_FIS_ON = 16384,
+	PORT_CMD_FIS_RX = 16,
+	PORT_CMD_CLO = 8,
+	PORT_CMD_POWER_ON = 4,
+	PORT_CMD_SPIN_UP = 2,
+	PORT_CMD_START = 1,
+	PORT_CMD_ICC_MASK = 4026531840,
+	PORT_CMD_ICC_ACTIVE = 268435456,
+	PORT_CMD_ICC_PARTIAL = 536870912,
+	PORT_CMD_ICC_SLUMBER = 1610612736,
+	PORT_FBS_DWE_OFFSET = 16,
+	PORT_FBS_ADO_OFFSET = 12,
+	PORT_FBS_DEV_OFFSET = 8,
+	PORT_FBS_DEV_MASK = 3840,
+	PORT_FBS_SDE = 4,
+	PORT_FBS_DEC = 2,
+	PORT_FBS_EN = 1,
+	PORT_DEVSLP_DM_OFFSET = 25,
+	PORT_DEVSLP_DM_MASK = 503316480,
+	PORT_DEVSLP_DITO_OFFSET = 15,
+	PORT_DEVSLP_MDAT_OFFSET = 10,
+	PORT_DEVSLP_DETO_OFFSET = 2,
+	PORT_DEVSLP_DSP = 2,
+	PORT_DEVSLP_ADSE = 1,
+	AHCI_HFLAG_NO_NCQ = 1,
+	AHCI_HFLAG_IGN_IRQ_IF_ERR = 2,
+	AHCI_HFLAG_IGN_SERR_INTERNAL = 4,
+	AHCI_HFLAG_32BIT_ONLY = 8,
+	AHCI_HFLAG_MV_PATA = 16,
+	AHCI_HFLAG_NO_MSI = 32,
+	AHCI_HFLAG_NO_PMP = 64,
+	AHCI_HFLAG_SECT255 = 256,
+	AHCI_HFLAG_YES_NCQ = 512,
+	AHCI_HFLAG_NO_SUSPEND = 1024,
+	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,
+	AHCI_HFLAG_NO_SNTF = 4096,
+	AHCI_HFLAG_NO_FPDMA_AA = 8192,
+	AHCI_HFLAG_YES_FBS = 16384,
+	AHCI_HFLAG_DELAY_ENGINE = 32768,
+	AHCI_HFLAG_NO_DEVSLP = 131072,
+	AHCI_HFLAG_NO_FBS = 262144,
+	AHCI_HFLAG_MULTI_MSI = 1048576,
+	AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,
+	AHCI_HFLAG_YES_ALPM = 8388608,
+	AHCI_HFLAG_NO_WRITE_TO_RO = 16777216,
+	AHCI_HFLAG_USE_LPM_POLICY = 33554432,
+	AHCI_HFLAG_SUSPEND_PHYS = 67108864,
+	AHCI_HFLAG_NO_SXS = 268435456,
+	AHCI_FLAG_COMMON = 393346,
+	ICH_MAP = 144,
+	PCS_6 = 146,
+	PCS_7 = 148,
+	EM_MAX_SLOTS = 15,
+	EM_MAX_RETRY = 5,
+	EM_CTL_RST = 512,
+	EM_CTL_TM = 256,
+	EM_CTL_MR = 1,
+	EM_CTL_ALHD = 67108864,
+	EM_CTL_XMT = 33554432,
+	EM_CTL_SMB = 16777216,
+	EM_CTL_SGPIO = 524288,
+	EM_CTL_SES = 262144,
+	EM_CTL_SAFTE = 131072,
+	EM_CTL_LED = 65536,
+	EM_MSG_TYPE_LED = 1,
+	EM_MSG_TYPE_SAFTE = 2,
+	EM_MSG_TYPE_SES2 = 4,
+	EM_MSG_TYPE_SGPIO = 8,
+};
+
+struct ahci_cmd_hdr {
+	__le32 opts;
+	__le32 status;
+	__le32 tbl_addr;
+	__le32 tbl_addr_hi;
+	__le32 reserved[4];
+};
+
+struct ahci_em_priv {
+	enum sw_activity blink_policy;
+	struct timer_list timer;
+	long unsigned int saved_activity;
+	long unsigned int activity;
+	long unsigned int led_state;
+	struct ata_link *link;
+};
+
+struct ahci_port_priv {
+	struct ata_link *active_link;
+	struct ahci_cmd_hdr *cmd_slot;
+	dma_addr_t cmd_slot_dma;
+	void *cmd_tbl;
+	dma_addr_t cmd_tbl_dma;
+	void *rx_fis;
+	dma_addr_t rx_fis_dma;
+	unsigned int ncq_saw_d2h: 1;
+	unsigned int ncq_saw_dmas: 1;
+	unsigned int ncq_saw_sdb: 1;
+	spinlock_t lock;
+	u32 intr_mask;
+	bool fbs_supported;
+	bool fbs_enabled;
+	int fbs_last_dev;
+	struct ahci_em_priv em_priv[15];
+	char *irq_desc;
+};
+
+struct ahci_host_priv {
+	unsigned int flags;
+	u32 force_port_map;
+	u32 mask_port_map;
+	void *mmio;
+	u32 cap;
+	u32 cap2;
+	u32 version;
+	u32 port_map;
+	u32 saved_cap;
+	u32 saved_cap2;
+	u32 saved_port_map;
+	u32 em_loc;
+	u32 em_buf_sz;
+	u32 em_msg_type;
+	u32 remapped_nvme;
+	bool got_runtime_pm;
+	struct clk *clks[5];
+	struct reset_control *rsts;
+	struct regulator **target_pwrs;
+	struct regulator *ahci_regulator;
+	struct regulator *phy_regulator;
+	struct phy **phys;
+	unsigned int nports;
+	void *plat_data;
+	unsigned int irq;
+	void (*start_engine)(struct ata_port *);
+	int (*stop_engine)(struct ata_port *);
+	irqreturn_t (*irq_handler)(int, void *);
+	int (*get_irq_vector)(struct ata_host *, int);
+};
+
+enum {
+	AHCI_PCI_BAR_STA2X11 = 0,
+	AHCI_PCI_BAR_CAVIUM = 0,
+	AHCI_PCI_BAR_LOONGSON = 0,
+	AHCI_PCI_BAR_ENMOTUS = 2,
+	AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
+	AHCI_PCI_BAR_STANDARD = 5,
+};
+
+enum board_ids {
+	board_ahci = 0,
+	board_ahci_ign_iferr = 1,
+	board_ahci_low_power = 2,
+	board_ahci_no_debounce_delay = 3,
+	board_ahci_nomsi = 4,
+	board_ahci_noncq = 5,
+	board_ahci_nosntf = 6,
+	board_ahci_yes_fbs = 7,
+	board_ahci_al = 8,
+	board_ahci_avn = 9,
+	board_ahci_mcp65 = 10,
+	board_ahci_mcp77 = 11,
+	board_ahci_mcp89 = 12,
+	board_ahci_mv = 13,
+	board_ahci_sb600 = 14,
+	board_ahci_sb700 = 15,
+	board_ahci_vt8251 = 16,
+	board_ahci_pcs7 = 17,
+	board_ahci_mcp_linux = 10,
+	board_ahci_mcp67 = 10,
+	board_ahci_mcp73 = 10,
+	board_ahci_mcp79 = 11,
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+typedef unsigned int u_int;
+
+struct socket_state_t {
+	u_int flags;
+	u_int csc_mask;
+	u_char Vcc;
+	u_char Vpp;
+	u_char io_irq;
+};
+
+typedef struct socket_state_t socket_state_t;
+
+struct pccard_io_map {
+	u_char map;
+	u_char flags;
+	u_short speed;
+	phys_addr_t start;
+	phys_addr_t stop;
+};
+
+struct pccard_mem_map {
+	u_char map;
+	u_char flags;
+	u_short speed;
+	phys_addr_t static_start;
+	u_int card_start;
+	struct resource *res;
+};
+
+typedef struct pccard_mem_map pccard_mem_map;
+
+struct io_window_t {
+	u_int InUse;
+	u_int Config;
+	struct resource *res;
+};
+
+typedef struct io_window_t io_window_t;
+
+struct pcmcia_socket;
+
+struct pccard_operations {
+	int (*init)(struct pcmcia_socket *);
+	int (*suspend)(struct pcmcia_socket *);
+	int (*get_status)(struct pcmcia_socket *, u_int *);
+	int (*set_socket)(struct pcmcia_socket *, socket_state_t *);
+	int (*set_io_map)(struct pcmcia_socket *, struct pccard_io_map *);
+	int (*set_mem_map)(struct pcmcia_socket *, struct pccard_mem_map *);
+};
+
+struct pccard_resource_ops;
+
+struct pcmcia_callback;
+
+struct pcmcia_socket {
+	struct module *owner;
+	socket_state_t socket;
+	u_int state;
+	u_int suspended_state;
+	u_short functions;
+	u_short lock_count;
+	pccard_mem_map cis_mem;
+	void *cis_virt;
+	io_window_t io[2];
+	pccard_mem_map win[4];
+	struct list_head cis_cache;
+	size_t fake_cis_len;
+	u8 *fake_cis;
+	struct list_head socket_list;
+	struct completion socket_released;
+	unsigned int sock;
+	u_int features;
+	u_int irq_mask;
+	u_int map_size;
+	u_int io_offset;
+	u_int pci_irq;
+	struct pci_dev *cb_dev;
+	u8 resource_setup_done;
+	struct pccard_operations *ops;
+	struct pccard_resource_ops *resource_ops;
+	void *resource_data;
+	void (*zoom_video)(struct pcmcia_socket *, int);
+	int (*power_hook)(struct pcmcia_socket *, int);
+	void (*tune_bridge)(struct pcmcia_socket *, struct pci_bus *);
+	struct task_struct *thread;
+	struct completion thread_done;
+	unsigned int thread_events;
+	unsigned int sysfs_events;
+	struct mutex skt_mutex;
+	struct mutex ops_mutex;
+	spinlock_t thread_lock;
+	struct pcmcia_callback *callback;
+	struct device dev;
+	void *driver_data;
+	int resume_status;
+};
+
+struct pccard_resource_ops {
+	int (*validate_mem)(struct pcmcia_socket *);
+	int (*find_io)(struct pcmcia_socket *, unsigned int, unsigned int *, unsigned int, unsigned int, struct resource **);
+	struct resource * (*find_mem)(long unsigned int, long unsigned int, long unsigned int, int, struct pcmcia_socket *);
+	int (*init)(struct pcmcia_socket *);
+	void (*exit)(struct pcmcia_socket *);
+};
+
+struct pcmcia_callback {
+	struct module *owner;
+	int (*add)(struct pcmcia_socket *);
+	int (*remove)(struct pcmcia_socket *);
+	void (*requery)(struct pcmcia_socket *);
+	int (*validate)(struct pcmcia_socket *, unsigned int *);
+	int (*suspend)(struct pcmcia_socket *);
+	int (*early_resume)(struct pcmcia_socket *);
+	int (*resume)(struct pcmcia_socket *);
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+};
+
+typedef u32 usb_port_location_t;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	long unsigned int event_bits[1];
+	long unsigned int change_bits[1];
+	long unsigned int removed_bits[1];
+	long unsigned int wakeup_bits[1];
+	long unsigned int power_bits[1];
+	long unsigned int child_usage_bits[1];
+	long unsigned int warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	unsigned int num_trbs;
+};
+
+struct urb_priv {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_event_compat {
+	compat_ulong_t sec;
+	compat_ulong_t usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct ff_periodic_effect_compat {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	compat_uptr_t custom_data;
+};
+
+struct ff_effect_compat {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect_compat periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+struct evdev_client;
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	long unsigned int *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t);
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+struct nvmem_cell_info;
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	struct gpio_desc *wp_gpio;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+};
+
+struct sun6i_rtc_clk_data {
+	long unsigned int rc_osc_rate;
+	unsigned int fixed_prescaler: 16;
+	unsigned int has_prescaler: 1;
+	unsigned int has_out_clk: 1;
+	unsigned int export_iosc: 1;
+	unsigned int has_losc_en: 1;
+	unsigned int has_auto_swt: 1;
+};
+
+struct sun6i_rtc_dev {
+	struct rtc_device *rtc;
+	const struct sun6i_rtc_clk_data *data;
+	void *base;
+	int irq;
+	time64_t alarm;
+	long unsigned int flags;
+	struct clk_hw hw;
+	struct clk_hw *int_osc;
+	struct clk *losc;
+	struct clk *ext_losc;
+	spinlock_t lock;
+};
+
+struct i2c_algo_bit_data {
+	void *data;
+	void (*setsda)(void *, int);
+	void (*setscl)(void *, int);
+	int (*getsda)(void *);
+	int (*getscl)(void *);
+	int (*pre_xfer)(struct i2c_adapter *);
+	void (*post_xfer)(struct i2c_adapter *);
+	int udelay;
+	int timeout;
+	bool can_do_atomic;
+};
+
+struct bsc_regs {
+	u32 chip_address;
+	u32 data_in[8];
+	u32 cnt_reg;
+	u32 ctl_reg;
+	u32 iic_enable;
+	u32 data_out[8];
+	u32 ctlhi_reg;
+	u32 scl_param;
+};
+
+struct bsc_clk_param {
+	u32 hz;
+	u32 scl_mask;
+	u32 div_mask;
+};
+
+enum bsc_xfer_cmd {
+	CMD_WR = 0,
+	CMD_RD = 1,
+	CMD_WR_NOACK = 2,
+	CMD_RD_NOACK = 3,
+};
+
+enum bus_speeds {
+	SPD_375K = 0,
+	SPD_390K = 1,
+	SPD_187K = 2,
+	SPD_200K = 3,
+	SPD_93K = 4,
+	SPD_97K = 5,
+	SPD_46K = 6,
+	SPD_50K = 7,
+};
+
+struct brcmstb_i2c_dev {
+	struct device *device;
+	void *base;
+	int irq;
+	struct bsc_regs *bsc_regmap;
+	struct i2c_adapter adapter;
+	struct completion done;
+	u32 clk_freq_hz;
+	int data_regsz;
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+};
+
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
+};
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct pps_event_time {
+	struct timespec64 ts_real;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+struct ptp_clock_time {
+	__s64 sec;
+	__u32 nsec;
+	__u32 reserved;
+};
+
+struct ptp_extts_request {
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+	union {
+		struct ptp_clock_time start;
+		struct ptp_clock_time phase;
+	};
+	struct ptp_clock_time period;
+	unsigned int index;
+	unsigned int flags;
+	union {
+		struct ptp_clock_time on;
+		unsigned int rsv[4];
+	};
+};
+
+enum ptp_pin_function {
+	PTP_PF_NONE = 0,
+	PTP_PF_EXTTS = 1,
+	PTP_PF_PEROUT = 2,
+	PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+	char name[64];
+	unsigned int index;
+	unsigned int func;
+	unsigned int chan;
+	unsigned int rsv[5];
+};
+
+struct ptp_extts_event {
+	struct ptp_clock_time t;
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_clock_request {
+	enum {
+		PTP_CLK_REQ_EXTTS = 0,
+		PTP_CLK_REQ_PEROUT = 1,
+		PTP_CLK_REQ_PPS = 2,
+	} type;
+	union {
+		struct ptp_extts_request extts;
+		struct ptp_perout_request perout;
+	};
+};
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct ptp_clock_info {
+	struct module *owner;
+	char name[32];
+	s32 max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int n_pins;
+	int pps;
+	struct ptp_pin_desc *pin_config;
+	int (*adjfine)(struct ptp_clock_info *, long int);
+	int (*adjfreq)(struct ptp_clock_info *, s32);
+	int (*adjphase)(struct ptp_clock_info *, s32);
+	int (*adjtime)(struct ptp_clock_info *, s64);
+	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+	int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+	long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
+enum ptp_clock_events {
+	PTP_CLOCK_ALARM = 0,
+	PTP_CLOCK_EXTTS = 1,
+	PTP_CLOCK_PPS = 2,
+	PTP_CLOCK_PPSUSR = 3,
+};
+
+struct ptp_clock_event {
+	int type;
+	int index;
+	union {
+		u64 timestamp;
+		struct pps_event_time pps_times;
+	};
+};
+
+struct timestamp_event_queue {
+	struct ptp_extts_event buf[128];
+	int head;
+	int tail;
+	spinlock_t lock;
+};
+
+struct ptp_clock {
+	struct posix_clock clock;
+	struct device dev;
+	struct ptp_clock_info *info;
+	dev_t devid;
+	int index;
+	struct pps_device *pps_source;
+	long int dialed_frequency;
+	struct timestamp_event_queue tsevq;
+	struct mutex tsevq_mux;
+	struct mutex pincfg_mux;
+	wait_queue_head_t tsev_wq;
+	int defunct;
+	struct device_attribute *pin_dev_attr;
+	struct attribute **pin_attr;
+	struct attribute_group pin_attr_group;
+	const struct attribute_group *pin_attr_groups[2];
+	struct kthread_worker *kworker;
+	struct kthread_delayed_work aux_work;
+	unsigned int max_vclocks;
+	unsigned int n_vclocks;
+	int *vclock_index;
+	struct mutex n_vclocks_mux;
+	bool is_virtual_clock;
+	bool has_cycles;
+};
+
+struct ptp_vclock {
+	struct ptp_clock *pclock;
+	struct ptp_clock_info info;
+	struct ptp_clock *clock;
+	struct hlist_node vclock_hash_node;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	spinlock_t lock;
+};
+
+struct reboot_mode_driver {
+	struct device *dev;
+	struct list_head head;
+	int (*write)(struct reboot_mode_driver *, unsigned int);
+	struct notifier_block reboot_notifier;
+};
+
+struct mode_info {
+	const char *mode;
+	u32 magic;
+	struct list_head list;
+};
+
+struct samsung_sdi_battery {
+	char *compatible;
+	char *name;
+	struct power_supply_battery_info info;
+};
+
+struct thermal_zone_of_device_ops {
+	int (*get_temp)(void *, int *);
+	int (*get_trend)(void *, int, enum thermal_trend *);
+	int (*set_trips)(void *, int, int);
+	int (*set_emul_temp)(void *, int);
+	int (*set_trip_temp)(void *, int, int);
+	int (*change_mode)(void *, enum thermal_device_mode);
+};
+
+struct __thermal_cooling_bind_param {
+	struct device_node *cooling_device;
+	long unsigned int min;
+	long unsigned int max;
+};
+
+struct __thermal_bind_params {
+	struct __thermal_cooling_bind_param *tcbp;
+	unsigned int count;
+	unsigned int trip_id;
+	unsigned int usage;
+};
+
+struct __thermal_zone {
+	int passive_delay;
+	int polling_delay;
+	int slope;
+	int offset;
+	int ntrips;
+	struct thermal_trip *trips;
+	int num_tbps;
+	struct __thermal_bind_params *tbps;
+	void *sensor_data;
+	const struct thermal_zone_of_device_ops *ops;
+};
+
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED = 1,
+	DEVFREQ_TIMER_NUM = 2,
+};
+
+struct devfreq_dev_status {
+	long unsigned int total_time;
+	long unsigned int busy_time;
+	long unsigned int current_frequency;
+	void *private_data;
+};
+
+struct devfreq_dev_profile {
+	long unsigned int initial_freq;
+	unsigned int polling_ms;
+	enum devfreq_timer timer;
+	bool is_cooling_device;
+	int (*target)(struct device *, long unsigned int *, u32);
+	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
+	int (*get_cur_freq)(struct device *, long unsigned int *);
+	void (*exit)(struct device *);
+	long unsigned int *freq_table;
+	unsigned int max_state;
+};
+
+struct devfreq_stats {
+	unsigned int total_trans;
+	unsigned int *trans_table;
+	u64 *time_in_state;
+	u64 last_update;
+};
+
+struct devfreq_governor;
+
+struct devfreq {
+	struct list_head node;
+	struct mutex lock;
+	struct device dev;
+	struct devfreq_dev_profile *profile;
+	const struct devfreq_governor *governor;
+	struct opp_table *opp_table;
+	struct notifier_block nb;
+	struct delayed_work work;
+	long unsigned int *freq_table;
+	unsigned int max_state;
+	long unsigned int previous_freq;
+	struct devfreq_dev_status last_status;
+	void *data;
+	struct dev_pm_qos_request user_min_freq_req;
+	struct dev_pm_qos_request user_max_freq_req;
+	long unsigned int scaling_min_freq;
+	long unsigned int scaling_max_freq;
+	bool stop_polling;
+	long unsigned int suspend_freq;
+	long unsigned int resume_freq;
+	atomic_t suspend_count;
+	struct devfreq_stats stats;
+	struct srcu_notifier_head transition_notifier_list;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct devfreq_governor {
+	struct list_head node;
+	const char name[16];
+	const u64 attrs;
+	const u64 flags;
+	int (*get_target_freq)(struct devfreq *, long unsigned int *);
+	int (*event_handler)(struct devfreq *, unsigned int, void *);
+};
+
+struct devfreq_cooling_power {
+	int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
+};
+
+struct devfreq_cooling_device {
+	struct thermal_cooling_device *cdev;
+	struct thermal_cooling_device_ops cooling_ops;
+	struct devfreq *devfreq;
+	long unsigned int cooling_state;
+	u32 *freq_table;
+	size_t max_state;
+	struct devfreq_cooling_power *power_ops;
+	u32 res_util;
+	int capped_state;
+	struct dev_pm_qos_request req_max_freq;
+	struct em_perf_domain *em_pd;
+};
+
+struct dm_ioctl {
+	__u32 version[3];
+	__u32 data_size;
+	__u32 data_start;
+	__u32 target_count;
+	__s32 open_count;
+	__u32 flags;
+	__u32 event_nr;
+	__u32 padding;
+	__u64 dev;
+	char name[128];
+	char uuid[129];
+	char data[7];
+};
+
+struct dm_target_spec {
+	__u64 sector_start;
+	__u64 length;
+	__s32 status;
+	__u32 next;
+	char target_type[16];
+};
+
+struct dm_device {
+	struct dm_ioctl dmi;
+	struct dm_target_spec *table[256];
+	char *target_args_array[256];
+	struct list_head list;
+};
+
+typedef long unsigned int ulong;
+
+struct dm_target_deps {
+	__u32 count;
+	__u32 padding;
+	__u64 dev[0];
+};
+
+struct dm_name_list {
+	__u64 dev;
+	__u32 next;
+	char name[0];
+};
+
+struct dm_target_versions {
+	__u32 next;
+	__u32 version[3];
+	char name[0];
+};
+
+struct dm_target_msg {
+	__u64 sector;
+	char message[0];
+};
+
+enum {
+	DM_VERSION_CMD = 0,
+	DM_REMOVE_ALL_CMD = 1,
+	DM_LIST_DEVICES_CMD = 2,
+	DM_DEV_CREATE_CMD = 3,
+	DM_DEV_REMOVE_CMD = 4,
+	DM_DEV_RENAME_CMD = 5,
+	DM_DEV_SUSPEND_CMD = 6,
+	DM_DEV_STATUS_CMD = 7,
+	DM_DEV_WAIT_CMD = 8,
+	DM_TABLE_LOAD_CMD = 9,
+	DM_TABLE_CLEAR_CMD = 10,
+	DM_TABLE_DEPS_CMD = 11,
+	DM_TABLE_STATUS_CMD = 12,
+	DM_LIST_VERSIONS_CMD = 13,
+	DM_TARGET_MSG_CMD = 14,
+	DM_DEV_SET_GEOMETRY_CMD = 15,
+	DM_DEV_ARM_POLL_CMD = 16,
+	DM_GET_TARGET_VERSION_CMD = 17,
+};
+
+struct dm_dev_internal {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev *dm_dev;
+};
+
+struct dm_file {
+	volatile unsigned int global_event_nr;
+};
+
+struct hash_cell {
+	struct rb_node name_node;
+	struct rb_node uuid_node;
+	bool name_set;
+	bool uuid_set;
+	char *name;
+	char *uuid;
+	struct mapped_device *md;
+	struct dm_table *new_map;
+};
+
+struct vers_iter {
+	size_t param_size;
+	struct dm_target_versions *vers;
+	struct dm_target_versions *old_vers;
+	char *end;
+	uint32_t flags;
+};
+
+typedef int (*ioctl_fn)(struct file *, struct dm_ioctl *, size_t);
+
+typedef sector_t region_t;
+
+struct dm_dirty_log_type;
+
+struct dm_dirty_log {
+	struct dm_dirty_log_type *type;
+	int (*flush_callback_fn)(struct dm_target *);
+	void *context;
+};
+
+struct dm_dirty_log_type {
+	const char *name;
+	struct module *module;
+	struct list_head list;
+	int (*ctr)(struct dm_dirty_log *, struct dm_target *, unsigned int, char **);
+	void (*dtr)(struct dm_dirty_log *);
+	int (*presuspend)(struct dm_dirty_log *);
+	int (*postsuspend)(struct dm_dirty_log *);
+	int (*resume)(struct dm_dirty_log *);
+	uint32_t (*get_region_size)(struct dm_dirty_log *);
+	int (*is_clean)(struct dm_dirty_log *, region_t);
+	int (*in_sync)(struct dm_dirty_log *, region_t, int);
+	int (*flush)(struct dm_dirty_log *);
+	void (*mark_region)(struct dm_dirty_log *, region_t);
+	void (*clear_region)(struct dm_dirty_log *, region_t);
+	int (*get_resync_work)(struct dm_dirty_log *, region_t *);
+	void (*set_region_sync)(struct dm_dirty_log *, region_t, int);
+	region_t (*get_sync_count)(struct dm_dirty_log *);
+	int (*status)(struct dm_dirty_log *, status_type_t, char *, unsigned int);
+	int (*is_remote_recovering)(struct dm_dirty_log *, region_t);
+};
+
+struct log_header_disk {
+	__le32 magic;
+	__le32 version;
+	__le64 nr_regions;
+};
+
+struct log_header_core {
+	uint32_t magic;
+	uint32_t version;
+	uint64_t nr_regions;
+};
+
+enum sync {
+	DEFAULTSYNC = 0,
+	NOSYNC = 1,
+	FORCESYNC = 2,
+};
+
+struct log_c {
+	struct dm_target *ti;
+	int touched_dirtied;
+	int touched_cleaned;
+	int flush_failed;
+	uint32_t region_size;
+	unsigned int region_count;
+	region_t sync_count;
+	unsigned int bitset_uint32_count;
+	uint32_t *clean_bits;
+	uint32_t *sync_bits;
+	uint32_t *recovering_bits;
+	int sync_search;
+	enum sync sync;
+	struct dm_io_request io_req;
+	int log_dev_failed;
+	int log_dev_flush_failed;
+	struct dm_dev *log_dev;
+	struct log_header_core header;
+	struct dm_io_region header_location;
+	struct log_header_disk *disk_header;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct cpufreq_policy_data {
+	struct cpufreq_cpuinfo cpuinfo;
+	struct cpufreq_frequency_table *freq_table;
+	unsigned int cpu;
+	unsigned int min;
+	unsigned int max;
+};
+
+struct cpufreq_freqs {
+	struct cpufreq_policy *policy;
+	unsigned int old;
+	unsigned int new;
+	u8 flags;
+};
+
+struct freq_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpufreq_policy *, char *);
+	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
+};
+
+struct cpufreq_driver {
+	char name[16];
+	u16 flags;
+	void *driver_data;
+	int (*init)(struct cpufreq_policy *);
+	int (*verify)(struct cpufreq_policy_data *);
+	int (*setpolicy)(struct cpufreq_policy *);
+	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
+	int (*target_index)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
+	void (*adjust_perf)(unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*get)(unsigned int);
+	void (*update_limits)(unsigned int);
+	int (*bios_limit)(int, unsigned int *);
+	int (*online)(struct cpufreq_policy *);
+	int (*offline)(struct cpufreq_policy *);
+	int (*exit)(struct cpufreq_policy *);
+	int (*suspend)(struct cpufreq_policy *);
+	int (*resume)(struct cpufreq_policy *);
+	void (*ready)(struct cpufreq_policy *);
+	struct freq_attr **attr;
+	bool boost_enabled;
+	int (*set_boost)(struct cpufreq_policy *, int);
+	void (*register_em)(struct cpufreq_policy *);
+};
+
+struct cpuidle_state_kobj {
+	struct cpuidle_state *state;
+	struct cpuidle_state_usage *state_usage;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+	struct cpuidle_device *device;
+};
+
+struct cpuidle_driver_kobj {
+	struct cpuidle_driver *drv;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_device_kobj {
+	struct cpuidle_device *dev;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_device *, char *);
+	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
+};
+
+struct cpuidle_state_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
+	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
+};
+
+struct cpuidle_driver_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_driver *, char *);
+	ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
+};
+
+struct mmc_pwrseq_ops;
+
+struct mmc_pwrseq {
+	const struct mmc_pwrseq_ops *ops;
+	struct device *dev;
+	struct list_head pwrseq_node;
+	struct module *owner;
+};
+
+struct trace_event_raw_mmc_request_start {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	u32 cmd_arg;
+	unsigned int cmd_flags;
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	u32 stop_arg;
+	unsigned int stop_flags;
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	u32 sbc_arg;
+	unsigned int sbc_flags;
+	unsigned int sbc_retries;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	unsigned int blksz;
+	unsigned int data_flags;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mmc_request_done {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	int cmd_err;
+	u32 cmd_resp[4];
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	int stop_err;
+	u32 stop_resp[4];
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	int sbc_err;
+	u32 sbc_resp[4];
+	unsigned int sbc_retries;
+	unsigned int bytes_xfered;
+	int data_err;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmc_request_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mmc_request_done {
+	u32 name;
+};
+
+typedef void (*btf_trace_mmc_request_start)(void *, struct mmc_host *, struct mmc_request *);
+
+typedef void (*btf_trace_mmc_request_done)(void *, struct mmc_host *, struct mmc_request *);
+
+struct mmc_pwrseq_ops {
+	void (*pre_power_on)(struct mmc_host *);
+	void (*post_power_on)(struct mmc_host *);
+	void (*power_off)(struct mmc_host *);
+	void (*reset)(struct mmc_host *);
+};
+
+struct mmc_gpio {
+	struct gpio_desc *ro_gpio;
+	struct gpio_desc *cd_gpio;
+	irqreturn_t (*cd_gpio_isr)(int, void *);
+	char *ro_label;
+	char *cd_label;
+	u32 cd_debounce_delay_ms;
+};
+
+struct mmc_pwrseq_emmc {
+	struct mmc_pwrseq pwrseq;
+	struct notifier_block reset_nb;
+	struct gpio_desc *reset_gpio;
+};
+
+enum cpu_led_event {
+	CPU_LED_IDLE_START = 0,
+	CPU_LED_IDLE_END = 1,
+	CPU_LED_START = 2,
+	CPU_LED_STOP = 3,
+	CPU_LED_HALTED = 4,
+};
+
+struct led_trigger_cpu {
+	bool is_active;
+	char name[8];
+	struct led_trigger *_trig;
+};
+
+struct qcom_scm_hdcp_req {
+	u32 addr;
+	u32 val;
+};
+
+struct qcom_scm_vmperm {
+	int vmid;
+	int perm;
+};
+
+enum qcom_scm_ocmem_client {
+	QCOM_SCM_OCMEM_UNUSED_ID = 0,
+	QCOM_SCM_OCMEM_GRAPHICS_ID = 1,
+	QCOM_SCM_OCMEM_VIDEO_ID = 2,
+	QCOM_SCM_OCMEM_LP_AUDIO_ID = 3,
+	QCOM_SCM_OCMEM_SENSORS_ID = 4,
+	QCOM_SCM_OCMEM_OTHER_OS_ID = 5,
+	QCOM_SCM_OCMEM_DEBUG_ID = 6,
+};
+
+enum qcom_scm_ice_cipher {
+	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
+	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
+	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
+	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
+};
+
+struct qcom_scm_pas_metadata {
+	void *ptr;
+	dma_addr_t phys;
+	ssize_t size;
+};
+
+enum qcom_scm_convention {
+	SMC_CONVENTION_UNKNOWN = 0,
+	SMC_CONVENTION_LEGACY = 1,
+	SMC_CONVENTION_ARM_32 = 2,
+	SMC_CONVENTION_ARM_64 = 3,
+};
+
+enum qcom_scm_arg_types {
+	QCOM_SCM_VAL = 0,
+	QCOM_SCM_RO = 1,
+	QCOM_SCM_RW = 2,
+	QCOM_SCM_BUFVAL = 3,
+};
+
+struct qcom_scm {
+	struct device *dev;
+	struct clk *core_clk;
+	struct clk *iface_clk;
+	struct clk *bus_clk;
+	struct icc_path *path;
+	struct reset_controller_dev reset;
+	struct mutex scm_bw_lock;
+	int scm_vote_count;
+	u64 dload_mode_addr;
+};
+
+struct qcom_scm_current_perm_info {
+	__le32 vmid;
+	__le32 perm;
+	__le64 ctx;
+	__le32 ctx_size;
+	__le32 unused;
+};
+
+struct qcom_scm_mem_map_info {
+	__le64 mem_addr;
+	__le64 mem_size;
+};
+
+struct scmi_device_id {
+	u8 protocol_id;
+	const char *name;
+};
+
+struct trace_event_raw_scmi_fc_call {
+	struct trace_entry ent;
+	u8 protocol_id;
+	u8 msg_id;
+	u32 res_id;
+	u32 val1;
+	u32 val2;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_begin {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	bool poll;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_response_wait {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	u32 timeout;
+	bool poll;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_end {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_rx_done {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	u8 msg_type;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_msg_dump {
+	struct trace_entry ent;
+	u8 protocol_id;
+	u8 msg_id;
+	char tag[5];
+	u16 seq;
+	int status;
+	size_t len;
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scmi_fc_call {};
+
+struct trace_event_data_offsets_scmi_xfer_begin {};
+
+struct trace_event_data_offsets_scmi_xfer_response_wait {};
+
+struct trace_event_data_offsets_scmi_xfer_end {};
+
+struct trace_event_data_offsets_scmi_rx_done {};
+
+struct trace_event_data_offsets_scmi_msg_dump {
+	u32 cmd;
+};
+
+typedef void (*btf_trace_scmi_fc_call)(void *, u8, u8, u32, u32, u32);
+
+typedef void (*btf_trace_scmi_xfer_begin)(void *, int, u8, u8, u16, bool);
+
+typedef void (*btf_trace_scmi_xfer_response_wait)(void *, int, u8, u8, u16, u32, bool);
+
+typedef void (*btf_trace_scmi_xfer_end)(void *, int, u8, u8, u16, int);
+
+typedef void (*btf_trace_scmi_rx_done)(void *, int, u8, u8, u16, u8);
+
+typedef void (*btf_trace_scmi_msg_dump)(void *, u8, u8, unsigned char *, u16, int, void *, size_t);
+
+enum scmi_error_codes {
+	SCMI_SUCCESS = 0,
+	SCMI_ERR_SUPPORT = 4294967295,
+	SCMI_ERR_PARAMS = 4294967294,
+	SCMI_ERR_ACCESS = 4294967293,
+	SCMI_ERR_ENTRY = 4294967292,
+	SCMI_ERR_RANGE = 4294967291,
+	SCMI_ERR_BUSY = 4294967290,
+	SCMI_ERR_COMMS = 4294967289,
+	SCMI_ERR_GENERIC = 4294967288,
+	SCMI_ERR_HARDWARE = 4294967287,
+	SCMI_ERR_PROTOCOL = 4294967286,
+};
+
+struct scmi_requested_dev {
+	const struct scmi_device_id *id_table;
+	struct list_head node;
+};
+
+struct scmi_xfers_info {
+	long unsigned int *xfer_alloc_table;
+	spinlock_t xfer_lock;
+	int max_msg;
+	struct hlist_head free_xfers;
+	struct hlist_head pending_xfers[512];
+};
+
+struct scmi_protocol_instance {
+	const struct scmi_handle *handle;
+	const struct scmi_protocol *proto;
+	void *gid;
+	refcount_t users;
+	void *priv;
+	struct scmi_protocol_handle ph;
+};
+
+struct scmi_info {
+	struct device *dev;
+	const struct scmi_desc *desc;
+	struct scmi_revision_info version;
+	struct scmi_handle handle;
+	struct scmi_xfers_info tx_minfo;
+	struct scmi_xfers_info rx_minfo;
+	struct idr tx_idr;
+	struct idr rx_idr;
+	struct idr protocols;
+	struct mutex protocols_mtx;
+	u8 *protocols_imp;
+	struct idr active_protocols;
+	unsigned int atomic_threshold;
+	void *notify_priv;
+	struct list_head node;
+	int users;
+};
+
+struct scmi_msg_resp_domain_name_get {
+	__le32 flags;
+	u8 name[64];
+};
+
+struct scmi_iterator {
+	void *msg;
+	void *resp;
+	struct scmi_xfer *t;
+	const struct scmi_protocol_handle *ph;
+	struct scmi_iterator_ops *ops;
+	struct scmi_iterator_state state;
+	void *priv;
+};
+
+struct scmi_msg_get_fc_info {
+	__le32 domain;
+	__le32 message_id;
+};
+
+struct scmi_msg_resp_desc_fc {
+	__le32 attr;
+	__le32 rate_limit;
+	__le32 chan_addr_low;
+	__le32 chan_addr_high;
+	__le32 chan_size;
+	__le32 db_addr_low;
+	__le32 db_addr_high;
+	__le32 db_set_lmask;
+	__le32 db_set_hmask;
+	__le32 db_preserve_lmask;
+	__le32 db_preserve_hmask;
+};
+
+struct scmi_protocol_devres {
+	const struct scmi_handle *handle;
+	u8 protocol_id;
+};
+
+struct scmi_shared_mem {
+	__le32 reserved;
+	__le32 channel_status;
+	__le32 reserved1[2];
+	__le32 flags;
+	__le32 length;
+	__le32 msg_header;
+	u8 msg_payload[0];
+};
+
+struct scmi_smc {
+	struct scmi_chan_info *cinfo;
+	struct scmi_shared_mem *shmem;
+	struct mutex shmem_lock;
+	atomic_t inflight;
+	u32 func_id;
+};
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	long unsigned int size;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
+};
+
+enum {
+	SYSTAB = 0,
+	MMBASE = 1,
+	MMSIZE = 2,
+	DCSIZE = 3,
+	DCVERS = 4,
+	PARAMCOUNT = 5,
+};
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+enum pstore_type_id {
+	PSTORE_TYPE_DMESG = 0,
+	PSTORE_TYPE_MCE = 1,
+	PSTORE_TYPE_CONSOLE = 2,
+	PSTORE_TYPE_FTRACE = 3,
+	PSTORE_TYPE_PPC_RTAS = 4,
+	PSTORE_TYPE_PPC_OF = 5,
+	PSTORE_TYPE_PPC_COMMON = 6,
+	PSTORE_TYPE_PMSG = 7,
+	PSTORE_TYPE_PPC_OPAL = 8,
+	PSTORE_TYPE_MAX = 9,
+};
+
+struct pstore_info;
+
+struct pstore_record {
+	struct pstore_info *psi;
+	enum pstore_type_id type;
+	u64 id;
+	struct timespec64 time;
+	char *buf;
+	ssize_t size;
+	ssize_t ecc_notice_size;
+	void *priv;
+	int count;
+	enum kmsg_dump_reason reason;
+	unsigned int part;
+	bool compressed;
+};
+
+struct pstore_info {
+	struct module *owner;
+	const char *name;
+	spinlock_t buf_lock;
+	char *buf;
+	size_t bufsize;
+	struct mutex read_mutex;
+	int flags;
+	int max_reason;
+	void *data;
+	int (*open)(struct pstore_info *);
+	int (*close)(struct pstore_info *);
+	ssize_t (*read)(struct pstore_record *);
+	int (*write)(struct pstore_record *);
+	int (*write_user)(struct pstore_record *, const char *);
+	int (*erase)(struct pstore_record *);
+};
+
+typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
+
+enum imx_sc_rm_func {
+	IMX_SC_RM_FUNC_UNKNOWN = 0,
+	IMX_SC_RM_FUNC_PARTITION_ALLOC = 1,
+	IMX_SC_RM_FUNC_SET_CONFIDENTIAL = 31,
+	IMX_SC_RM_FUNC_PARTITION_FREE = 2,
+	IMX_SC_RM_FUNC_GET_DID = 26,
+	IMX_SC_RM_FUNC_PARTITION_STATIC = 3,
+	IMX_SC_RM_FUNC_PARTITION_LOCK = 4,
+	IMX_SC_RM_FUNC_GET_PARTITION = 5,
+	IMX_SC_RM_FUNC_SET_PARENT = 6,
+	IMX_SC_RM_FUNC_MOVE_ALL = 7,
+	IMX_SC_RM_FUNC_ASSIGN_RESOURCE = 8,
+	IMX_SC_RM_FUNC_SET_RESOURCE_MOVABLE = 9,
+	IMX_SC_RM_FUNC_SET_SUBSYS_RSRC_MOVABLE = 28,
+	IMX_SC_RM_FUNC_SET_MASTER_ATTRIBUTES = 10,
+	IMX_SC_RM_FUNC_SET_MASTER_SID = 11,
+	IMX_SC_RM_FUNC_SET_PERIPHERAL_PERMISSIONS = 12,
+	IMX_SC_RM_FUNC_IS_RESOURCE_OWNED = 13,
+	IMX_SC_RM_FUNC_GET_RESOURCE_OWNER = 33,
+	IMX_SC_RM_FUNC_IS_RESOURCE_MASTER = 14,
+	IMX_SC_RM_FUNC_IS_RESOURCE_PERIPHERAL = 15,
+	IMX_SC_RM_FUNC_GET_RESOURCE_INFO = 16,
+	IMX_SC_RM_FUNC_MEMREG_ALLOC = 17,
+	IMX_SC_RM_FUNC_MEMREG_SPLIT = 29,
+	IMX_SC_RM_FUNC_MEMREG_FRAG = 32,
+	IMX_SC_RM_FUNC_MEMREG_FREE = 18,
+	IMX_SC_RM_FUNC_FIND_MEMREG = 30,
+	IMX_SC_RM_FUNC_ASSIGN_MEMREG = 19,
+	IMX_SC_RM_FUNC_SET_MEMREG_PERMISSIONS = 20,
+	IMX_SC_RM_FUNC_IS_MEMREG_OWNED = 21,
+	IMX_SC_RM_FUNC_GET_MEMREG_INFO = 22,
+	IMX_SC_RM_FUNC_ASSIGN_PAD = 23,
+	IMX_SC_RM_FUNC_SET_PAD_MOVABLE = 24,
+	IMX_SC_RM_FUNC_IS_PAD_OWNED = 25,
+	IMX_SC_RM_FUNC_DUMP = 27,
+};
+
+struct imx_sc_msg_rm_rsrc_owned {
+	struct imx_sc_rpc_msg hdr;
+	u16 resource;
+	short: 16;
+};
+
+struct imx_sc_msg_rm_get_resource_owner {
+	struct imx_sc_rpc_msg hdr;
+	union {
+		struct {
+			u16 resource;
+		} req;
+		struct {
+			u8 val;
+		} resp;
+	} data;
+	short: 16;
+};
+
+struct imx_sc_msg_misc_get_soc_id {
+	struct imx_sc_rpc_msg hdr;
+	union {
+		struct {
+			u32 control;
+			u16 resource;
+		} __attribute__((packed)) req;
+		struct {
+			u32 id;
+		} resp;
+	} data;
+};
+
+struct imx_sc_msg_misc_get_soc_uid {
+	struct imx_sc_rpc_msg hdr;
+	u32 uid_low;
+	u32 uid_high;
+};
+
+struct tegra210_bpmp {
+	void *atomics;
+	void *arb_sema;
+	struct irq_data *tx_irq_data;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct crypto_engine {
+	char name[30];
+	bool idling;
+	bool busy;
+	bool running;
+	bool retry_support;
+	struct list_head list;
+	spinlock_t queue_lock;
+	struct crypto_queue queue;
+	struct device *dev;
+	bool rt;
+	int (*prepare_crypt_hardware)(struct crypto_engine *);
+	int (*unprepare_crypt_hardware)(struct crypto_engine *);
+	int (*do_batch_requests)(struct crypto_engine *);
+	struct kthread_worker *kworker;
+	struct kthread_work pump_requests;
+	void *priv_data;
+	struct crypto_async_request *cur_req;
+};
+
+struct meson_desc {
+	__le32 t_status;
+	__le32 t_src;
+	__le32 t_dst;
+};
+
+struct meson_flow {
+	struct crypto_engine *engine;
+	struct completion complete;
+	int status;
+	unsigned int keylen;
+	dma_addr_t t_phy;
+	struct meson_desc *tl;
+};
+
+struct meson_dev {
+	void *base;
+	struct clk *busclk;
+	struct device *dev;
+	struct meson_flow *chanlist;
+	atomic_t flow;
+	int *irqs;
+};
+
+struct meson_alg_template {
+	u32 type;
+	u32 blockmode;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct skcipher_alg skcipher;
+	} alg;
+	struct meson_dev *mc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct of_timer_irq {
+	int irq;
+	int index;
+	int percpu;
+	const char *name;
+	long unsigned int flags;
+	irq_handler_t handler;
+};
+
+struct of_timer_base {
+	void *base;
+	const char *name;
+	int index;
+};
+
+struct of_timer_clk {
+	struct clk *clk;
+	const char *name;
+	int index;
+	long unsigned int rate;
+	long unsigned int period;
+};
+
+struct timer_of {
+	unsigned int flags;
+	struct device_node *np;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct clock_event_device clkevt;
+	struct of_timer_base of_base;
+	struct of_timer_irq of_irq;
+	struct of_timer_clk of_clk;
+	void *private_data;
+	long: 64;
+	long: 64;
+};
+
+struct sp804_timer {
+	int load;
+	int load_h;
+	int value;
+	int value_h;
+	int ctrl;
+	int intclr;
+	int ris;
+	int mis;
+	int bgload;
+	int bgload_h;
+	int timer_base[2];
+	int width;
+};
+
+struct sp804_clkevt {
+	void *base;
+	void *load;
+	void *load_h;
+	void *value;
+	void *value_h;
+	void *ctrl;
+	void *intclr;
+	void *ris;
+	void *mis;
+	void *bgload;
+	void *bgload_h;
+	long unsigned int reload;
+	int width;
+};
+
+struct hidraw_devinfo {
+	__u32 bustype;
+	__s16 vendor;
+	__s16 product;
+};
+
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
+};
+
+struct hidraw_report {
+	__u8 *value;
+	int len;
+};
+
+struct hidraw_list {
+	struct hidraw_report buffer[64];
+	int head;
+	int tail;
+	struct fasync_struct *fasync;
+	struct hidraw *hidraw;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hid_control_fifo {
+	unsigned char dir;
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_output_fifo {
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_class_descriptor {
+	__u8 bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__((packed));
+
+struct hid_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdHID;
+	__u8 bCountryCode;
+	__u8 bNumDescriptors;
+	struct hid_class_descriptor desc[1];
+} __attribute__((packed));
+
+struct usbhid_device {
+	struct hid_device *hid;
+	struct usb_interface *intf;
+	int ifnum;
+	unsigned int bufsize;
+	struct urb *urbin;
+	char *inbuf;
+	dma_addr_t inbuf_dma;
+	struct urb *urbctrl;
+	struct usb_ctrlrequest *cr;
+	struct hid_control_fifo ctrl[256];
+	unsigned char ctrlhead;
+	unsigned char ctrltail;
+	char *ctrlbuf;
+	dma_addr_t ctrlbuf_dma;
+	long unsigned int last_ctrl;
+	struct urb *urbout;
+	struct hid_output_fifo out[256];
+	unsigned char outhead;
+	unsigned char outtail;
+	char *outbuf;
+	dma_addr_t outbuf_dma;
+	long unsigned int last_out;
+	struct mutex mutex;
+	spinlock_t lock;
+	long unsigned int iofl;
+	struct timer_list io_retry;
+	long unsigned int stop_retry;
+	unsigned int retry_delay;
+	struct work_struct reset_work;
+	wait_queue_head_t wait;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	long unsigned int fdt_node;
+	long unsigned int phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct rmem_assigned_device {
+	struct device *dev;
+	struct reserved_mem *rmem;
+	struct list_head list;
+};
+
+typedef s8 int8_t;
+
+enum ec_status {
+	EC_RES_SUCCESS = 0,
+	EC_RES_INVALID_COMMAND = 1,
+	EC_RES_ERROR = 2,
+	EC_RES_INVALID_PARAM = 3,
+	EC_RES_ACCESS_DENIED = 4,
+	EC_RES_INVALID_RESPONSE = 5,
+	EC_RES_INVALID_VERSION = 6,
+	EC_RES_INVALID_CHECKSUM = 7,
+	EC_RES_IN_PROGRESS = 8,
+	EC_RES_UNAVAILABLE = 9,
+	EC_RES_TIMEOUT = 10,
+	EC_RES_OVERFLOW = 11,
+	EC_RES_INVALID_HEADER = 12,
+	EC_RES_REQUEST_TRUNCATED = 13,
+	EC_RES_RESPONSE_TOO_BIG = 14,
+	EC_RES_BUS_ERROR = 15,
+	EC_RES_BUSY = 16,
+	EC_RES_INVALID_HEADER_VERSION = 17,
+	EC_RES_INVALID_HEADER_CRC = 18,
+	EC_RES_INVALID_DATA_CRC = 19,
+	EC_RES_DUP_UNAVAILABLE = 20,
+};
+
+enum host_event_code {
+	EC_HOST_EVENT_LID_CLOSED = 1,
+	EC_HOST_EVENT_LID_OPEN = 2,
+	EC_HOST_EVENT_POWER_BUTTON = 3,
+	EC_HOST_EVENT_AC_CONNECTED = 4,
+	EC_HOST_EVENT_AC_DISCONNECTED = 5,
+	EC_HOST_EVENT_BATTERY_LOW = 6,
+	EC_HOST_EVENT_BATTERY_CRITICAL = 7,
+	EC_HOST_EVENT_BATTERY = 8,
+	EC_HOST_EVENT_THERMAL_THRESHOLD = 9,
+	EC_HOST_EVENT_DEVICE = 10,
+	EC_HOST_EVENT_THERMAL = 11,
+	EC_HOST_EVENT_USB_CHARGER = 12,
+	EC_HOST_EVENT_KEY_PRESSED = 13,
+	EC_HOST_EVENT_INTERFACE_READY = 14,
+	EC_HOST_EVENT_KEYBOARD_RECOVERY = 15,
+	EC_HOST_EVENT_THERMAL_SHUTDOWN = 16,
+	EC_HOST_EVENT_BATTERY_SHUTDOWN = 17,
+	EC_HOST_EVENT_THROTTLE_START = 18,
+	EC_HOST_EVENT_THROTTLE_STOP = 19,
+	EC_HOST_EVENT_HANG_DETECT = 20,
+	EC_HOST_EVENT_HANG_REBOOT = 21,
+	EC_HOST_EVENT_PD_MCU = 22,
+	EC_HOST_EVENT_BATTERY_STATUS = 23,
+	EC_HOST_EVENT_PANIC = 24,
+	EC_HOST_EVENT_KEYBOARD_FASTBOOT = 25,
+	EC_HOST_EVENT_RTC = 26,
+	EC_HOST_EVENT_MKBP = 27,
+	EC_HOST_EVENT_USB_MUX = 28,
+	EC_HOST_EVENT_MODE_CHANGE = 29,
+	EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT = 30,
+	EC_HOST_EVENT_WOV = 31,
+	EC_HOST_EVENT_INVALID = 32,
+};
+
+struct ec_host_request {
+	uint8_t struct_version;
+	uint8_t checksum;
+	uint16_t command;
+	uint8_t command_version;
+	uint8_t reserved;
+	uint16_t data_len;
+};
+
+struct ec_params_hello {
+	uint32_t in_data;
+};
+
+struct ec_response_hello {
+	uint32_t out_data;
+};
+
+struct ec_params_get_cmd_versions {
+	uint8_t cmd;
+};
+
+struct ec_response_get_cmd_versions {
+	uint32_t version_mask;
+};
+
+enum ec_comms_status {
+	EC_COMMS_STATUS_PROCESSING = 1,
+};
+
+struct ec_response_get_comms_status {
+	uint32_t flags;
+};
+
+struct ec_response_get_protocol_info {
+	uint32_t protocol_versions;
+	uint16_t max_request_packet_size;
+	uint16_t max_response_packet_size;
+	uint32_t flags;
+};
+
+struct ec_response_get_features {
+	uint32_t flags[2];
+};
+
+enum ec_led_colors {
+	EC_LED_COLOR_RED = 0,
+	EC_LED_COLOR_GREEN = 1,
+	EC_LED_COLOR_BLUE = 2,
+	EC_LED_COLOR_YELLOW = 3,
+	EC_LED_COLOR_WHITE = 4,
+	EC_LED_COLOR_AMBER = 5,
+	EC_LED_COLOR_COUNT = 6,
+};
+
+enum motionsense_command {
+	MOTIONSENSE_CMD_DUMP = 0,
+	MOTIONSENSE_CMD_INFO = 1,
+	MOTIONSENSE_CMD_EC_RATE = 2,
+	MOTIONSENSE_CMD_SENSOR_ODR = 3,
+	MOTIONSENSE_CMD_SENSOR_RANGE = 4,
+	MOTIONSENSE_CMD_KB_WAKE_ANGLE = 5,
+	MOTIONSENSE_CMD_DATA = 6,
+	MOTIONSENSE_CMD_FIFO_INFO = 7,
+	MOTIONSENSE_CMD_FIFO_FLUSH = 8,
+	MOTIONSENSE_CMD_FIFO_READ = 9,
+	MOTIONSENSE_CMD_PERFORM_CALIB = 10,
+	MOTIONSENSE_CMD_SENSOR_OFFSET = 11,
+	MOTIONSENSE_CMD_LIST_ACTIVITIES = 12,
+	MOTIONSENSE_CMD_SET_ACTIVITY = 13,
+	MOTIONSENSE_CMD_LID_ANGLE = 14,
+	MOTIONSENSE_CMD_FIFO_INT_ENABLE = 15,
+	MOTIONSENSE_CMD_SPOOF = 16,
+	MOTIONSENSE_CMD_TABLET_MODE_LID_ANGLE = 17,
+	MOTIONSENSE_CMD_SENSOR_SCALE = 18,
+	MOTIONSENSE_NUM_CMDS = 19,
+};
+
+struct ec_response_motion_sensor_data {
+	uint8_t flags;
+	uint8_t sensor_num;
+	union {
+		int16_t data[3];
+		struct {
+			uint16_t reserved;
+			uint32_t timestamp;
+		} __attribute__((packed));
+		struct {
+			uint8_t activity;
+			uint8_t state;
+			int16_t add_info[2];
+		};
+	};
+} __attribute__((packed));
+
+struct ec_response_motion_sense_fifo_info {
+	uint16_t size;
+	uint16_t count;
+	uint32_t timestamp;
+	uint16_t total_lost;
+	uint16_t lost[0];
+} __attribute__((packed));
+
+struct ec_response_motion_sense_fifo_data {
+	uint32_t number_data;
+	struct ec_response_motion_sensor_data data[0];
+};
+
+struct ec_motion_sense_activity {
+	uint8_t sensor_num;
+	uint8_t activity;
+	uint8_t enable;
+	uint8_t reserved;
+	uint16_t parameters[3];
+};
+
+struct ec_params_motion_sense {
+	uint8_t cmd;
+	union {
+		struct {
+			uint8_t max_sensor_count;
+		} dump;
+		struct {
+			int16_t data;
+		} kb_wake_angle;
+		struct {
+			uint8_t sensor_num;
+		} info;
+		struct {
+			uint8_t sensor_num;
+		} info_3;
+		struct {
+			uint8_t sensor_num;
+		} data;
+		struct {
+			uint8_t sensor_num;
+		} fifo_flush;
+		struct {
+			uint8_t sensor_num;
+		} perform_calib;
+		struct {
+			uint8_t sensor_num;
+		} list_activities;
+		struct {
+			uint8_t sensor_num;
+			uint8_t roundup;
+			uint16_t reserved;
+			int32_t data;
+		} ec_rate;
+		struct {
+			uint8_t sensor_num;
+			uint8_t roundup;
+			uint16_t reserved;
+			int32_t data;
+		} sensor_odr;
+		struct {
+			uint8_t sensor_num;
+			uint8_t roundup;
+			uint16_t reserved;
+			int32_t data;
+		} sensor_range;
+		struct {
+			uint8_t sensor_num;
+			uint16_t flags;
+			int16_t temp;
+			int16_t offset[3];
+		} __attribute__((packed)) sensor_offset;
+		struct {
+			uint8_t sensor_num;
+			uint16_t flags;
+			int16_t temp;
+			uint16_t scale[3];
+		} __attribute__((packed)) sensor_scale;
+		struct {
+			uint32_t max_data_vector;
+		} fifo_read;
+		struct ec_motion_sense_activity set_activity;
+		struct {
+			int8_t enable;
+		} fifo_int_enable;
+		struct {
+			uint8_t sensor_id;
+			uint8_t spoof_enable;
+			uint8_t reserved;
+			int16_t components[3];
+		} __attribute__((packed)) spoof;
+		struct {
+			int16_t lid_angle;
+			int16_t hys_degree;
+		} tablet_mode_threshold;
+	};
+} __attribute__((packed));
+
+struct ec_response_motion_sense {
+	union {
+		struct {
+			uint8_t module_flags;
+			uint8_t sensor_count;
+			struct ec_response_motion_sensor_data sensor[0];
+		} __attribute__((packed)) dump;
+		struct {
+			uint8_t type;
+			uint8_t location;
+			uint8_t chip;
+		} info;
+		struct {
+			uint8_t type;
+			uint8_t location;
+			uint8_t chip;
+			uint32_t min_frequency;
+			uint32_t max_frequency;
+			uint32_t fifo_max_event_count;
+		} info_3;
+		struct ec_response_motion_sensor_data data;
+		struct {
+			int32_t ret;
+		} ec_rate;
+		struct {
+			int32_t ret;
+		} sensor_odr;
+		struct {
+			int32_t ret;
+		} sensor_range;
+		struct {
+			int32_t ret;
+		} kb_wake_angle;
+		struct {
+			int32_t ret;
+		} fifo_int_enable;
+		struct {
+			int32_t ret;
+		} spoof;
+		struct {
+			int16_t temp;
+			int16_t offset[3];
+		} sensor_offset;
+		struct {
+			int16_t temp;
+			int16_t offset[3];
+		} perform_calib;
+		struct {
+			int16_t temp;
+			uint16_t scale[3];
+		} sensor_scale;
+		struct ec_response_motion_sense_fifo_info fifo_info;
+		struct ec_response_motion_sense_fifo_info fifo_flush;
+		struct ec_response_motion_sense_fifo_data fifo_read;
+		struct {
+			uint16_t reserved;
+			uint32_t enabled;
+			uint32_t disabled;
+		} __attribute__((packed)) list_activities;
+		struct {
+			uint16_t value;
+		} lid_angle;
+		struct {
+			uint16_t lid_angle;
+			uint16_t hys_degree;
+		} tablet_mode_threshold;
+	};
+};
+
+enum ec_temp_thresholds {
+	EC_TEMP_THRESH_WARN = 0,
+	EC_TEMP_THRESH_HIGH = 1,
+	EC_TEMP_THRESH_HALT = 2,
+	EC_TEMP_THRESH_COUNT = 3,
+};
+
+enum ec_mkbp_event {
+	EC_MKBP_EVENT_KEY_MATRIX = 0,
+	EC_MKBP_EVENT_HOST_EVENT = 1,
+	EC_MKBP_EVENT_SENSOR_FIFO = 2,
+	EC_MKBP_EVENT_BUTTON = 3,
+	EC_MKBP_EVENT_SWITCH = 4,
+	EC_MKBP_EVENT_FINGERPRINT = 5,
+	EC_MKBP_EVENT_SYSRQ = 6,
+	EC_MKBP_EVENT_HOST_EVENT64 = 7,
+	EC_MKBP_EVENT_CEC_EVENT = 8,
+	EC_MKBP_EVENT_CEC_MESSAGE = 9,
+	EC_MKBP_EVENT_PCHG = 12,
+	EC_MKBP_EVENT_COUNT = 13,
+};
+
+union ec_response_get_next_data_v1 {
+	uint8_t key_matrix[16];
+	uint32_t host_event;
+	uint64_t host_event64;
+	struct {
+		uint8_t reserved[3];
+		struct ec_response_motion_sense_fifo_info info;
+	} __attribute__((packed)) sensor_fifo;
+	uint32_t buttons;
+	uint32_t switches;
+	uint32_t fp_events;
+	uint32_t sysrq;
+	uint32_t cec_events;
+	uint8_t cec_message[16];
+};
+
+struct ec_response_get_next_event_v1 {
+	uint8_t event_type;
+	union ec_response_get_next_data_v1 data;
+} __attribute__((packed));
+
+struct ec_response_host_event_mask {
+	uint32_t mask;
+};
+
+enum {
+	EC_MSG_TX_HEADER_BYTES = 3,
+	EC_MSG_TX_TRAILER_BYTES = 1,
+	EC_MSG_TX_PROTO_BYTES = 4,
+	EC_MSG_RX_PROTO_BYTES = 3,
+	EC_PROTO2_MSG_BYTES = 256,
+	EC_MAX_MSG_BYTES = 65536,
+};
+
+struct cros_ec_command {
+	uint32_t version;
+	uint32_t command;
+	uint32_t outsize;
+	uint32_t insize;
+	uint32_t result;
+	uint8_t data[0];
+};
+
+struct platform_device;
+
+struct cros_ec_device {
+	const char *phys_name;
+	struct device *dev;
+	struct class *cros_class;
+	int (*cmd_readmem)(struct cros_ec_device *, unsigned int, unsigned int, void *);
+	u16 max_request;
+	u16 max_response;
+	u16 max_passthru;
+	u16 proto_version;
+	void *priv;
+	int irq;
+	u8 *din;
+	u8 *dout;
+	int din_size;
+	int dout_size;
+	bool wake_enabled;
+	bool suspended;
+	int (*cmd_xfer)(struct cros_ec_device *, struct cros_ec_command *);
+	int (*pkt_xfer)(struct cros_ec_device *, struct cros_ec_command *);
+	struct mutex lock;
+	u8 mkbp_event_supported;
+	bool host_sleep_v1;
+	struct blocking_notifier_head event_notifier;
+	struct ec_response_get_next_event_v1 event_data;
+	int event_size;
+	u32 host_event_wake_mask;
+	u32 last_resume_result;
+	ktime_t last_event_time;
+	struct notifier_block notifier_ready;
+	struct platform_device *ec;
+	struct platform_device *pd;
+};
+
+struct cros_ec_debugfs;
+
+struct cros_ec_dev {
+	struct device class_dev;
+	struct cros_ec_device *ec_dev;
+	struct device *dev;
+	struct cros_ec_debugfs *debug_info;
+	bool has_kb_wake_angle;
+	u16 cmd_offset;
+	struct ec_response_get_features features;
+};
+
+struct hi6220_mbox;
+
+struct hi6220_mbox_chan {
+	unsigned int dir;
+	unsigned int dst_irq;
+	unsigned int ack_irq;
+	unsigned int slot;
+	struct hi6220_mbox *parent;
+};
+
+struct hi6220_mbox {
+	struct device *dev;
+	int irq;
+	bool tx_irq_mode;
+	void *ipc;
+	void *base;
+	unsigned int chan_num;
+	struct hi6220_mbox_chan *mchan;
+	void *irq_map_chan[32];
+	struct mbox_chan *chan;
+	struct mbox_controller controller;
+};
+
+struct elf32_shdr {
+	Elf32_Word sh_name;
+	Elf32_Word sh_type;
+	Elf32_Word sh_flags;
+	Elf32_Addr sh_addr;
+	Elf32_Off sh_offset;
+	Elf32_Word sh_size;
+	Elf32_Word sh_link;
+	Elf32_Word sh_info;
+	Elf32_Word sh_addralign;
+	Elf32_Word sh_entsize;
+};
+
+struct rproc_dump_segment {
+	struct list_head node;
+	dma_addr_t da;
+	size_t size;
+	void *priv;
+	void (*dump)(struct rproc *, struct rproc_dump_segment *, void *, size_t, size_t);
+	loff_t offset;
+};
+
+struct rproc_coredump_state {
+	struct rproc *rproc;
+	void *header;
+	struct completion dump_done;
+};
+
+enum {
+	VMGENID_SIZE = 16,
+};
+
+struct vmgenid_state {
+	u8 *next_id;
+	u8 this_id[16];
+};
+
+struct gpmc_bool_timings {
+	bool cycle2cyclediffcsen;
+	bool cycle2cyclesamecsen;
+	bool we_extra_delay;
+	bool oe_extra_delay;
+	bool adv_extra_delay;
+	bool cs_extra_delay;
+	bool time_para_granularity;
+};
+
+struct gpmc_timings {
+	u32 sync_clk;
+	u32 cs_on;
+	u32 cs_rd_off;
+	u32 cs_wr_off;
+	u32 adv_on;
+	u32 adv_rd_off;
+	u32 adv_wr_off;
+	u32 adv_aad_mux_on;
+	u32 adv_aad_mux_rd_off;
+	u32 adv_aad_mux_wr_off;
+	u32 we_on;
+	u32 we_off;
+	u32 oe_on;
+	u32 oe_off;
+	u32 oe_aad_mux_on;
+	u32 oe_aad_mux_off;
+	u32 page_burst_access;
+	u32 access;
+	u32 rd_cycle;
+	u32 wr_cycle;
+	u32 bus_turnaround;
+	u32 cycle2cycle_delay;
+	u32 wait_monitoring;
+	u32 clk_activation;
+	u32 wr_access;
+	u32 wr_data_mux_bus;
+	struct gpmc_bool_timings bool_timings;
+};
+
+struct gpmc_device_timings {
+	u32 t_ceasu;
+	u32 t_avdasu;
+	u32 t_avdp_r;
+	u32 t_avdp_w;
+	u32 t_aavdh;
+	u32 t_oeasu;
+	u32 t_aa;
+	u32 t_iaa;
+	u32 t_oe;
+	u32 t_ce;
+	u32 t_rd_cycle;
+	u32 t_cez_r;
+	u32 t_cez_w;
+	u32 t_oez;
+	u32 t_weasu;
+	u32 t_wpl;
+	u32 t_wph;
+	u32 t_wr_cycle;
+	u32 clk;
+	u32 t_bacc;
+	u32 t_ces;
+	u32 t_avds;
+	u32 t_avdh;
+	u32 t_ach;
+	u32 t_rdyo;
+	u32 t_ce_rdyz;
+	u32 t_ce_avd;
+	u8 cyc_aavdh_oe;
+	u8 cyc_aavdh_we;
+	u8 cyc_oe;
+	u8 cyc_wpl;
+	u32 cyc_iaa;
+	bool ce_xdelay;
+	bool avd_xdelay;
+	bool oe_xdelay;
+	bool we_xdelay;
+};
+
+struct gpmc_settings {
+	bool burst_wrap;
+	bool burst_read;
+	bool burst_write;
+	bool device_nand;
+	bool sync_read;
+	bool sync_write;
+	bool wait_on_read;
+	bool wait_on_write;
+	u32 burst_len;
+	u32 device_width;
+	u32 mux_add_data;
+	u32 wait_pin;
+};
+
+struct gpmc_nand_ops {
+	bool (*nand_writebuffer_empty)();
+};
+
+struct gpmc_onenand_info {
+	bool sync_read;
+	bool sync_write;
+	int burst_len;
+};
+
+struct gpmc_nand_regs {
+	void *gpmc_nand_command;
+	void *gpmc_nand_address;
+	void *gpmc_nand_data;
+	void *gpmc_prefetch_config1;
+	void *gpmc_prefetch_config2;
+	void *gpmc_prefetch_control;
+	void *gpmc_prefetch_status;
+	void *gpmc_ecc_config;
+	void *gpmc_ecc_control;
+	void *gpmc_ecc_size_config;
+	void *gpmc_ecc1_result;
+	void *gpmc_bch_result0[8];
+	void *gpmc_bch_result1[8];
+	void *gpmc_bch_result2[8];
+	void *gpmc_bch_result3[8];
+	void *gpmc_bch_result4[8];
+	void *gpmc_bch_result5[8];
+	void *gpmc_bch_result6[8];
+};
+
+enum gpmc_clk_domain {
+	GPMC_CD_FCLK = 0,
+	GPMC_CD_CLK = 1,
+};
+
+struct gpmc_cs_data {
+	const char *name;
+	u32 flags;
+	struct resource mem;
+};
+
+struct gpmc_cs_config {
+	u32 config1;
+	u32 config2;
+	u32 config3;
+	u32 config4;
+	u32 config5;
+	u32 config6;
+	u32 config7;
+	int is_valid;
+};
+
+struct omap3_gpmc_regs {
+	u32 sysconfig;
+	u32 irqenable;
+	u32 timeout_ctrl;
+	u32 config;
+	u32 prefetch_config1;
+	u32 prefetch_config2;
+	u32 prefetch_control;
+	struct gpmc_cs_config cs_context[8];
+};
+
+struct gpmc_device {
+	struct device *dev;
+	int irq;
+	struct irq_chip irq_chip;
+	struct gpio_chip gpio_chip;
+	struct notifier_block nb;
+	struct omap3_gpmc_regs context;
+	int nirqs;
+	unsigned int is_suspended: 1;
+	struct resource *data;
+};
+
+struct powercap_control_type;
+
+struct powercap_control_type_ops {
+	int (*set_enable)(struct powercap_control_type *, bool);
+	int (*get_enable)(struct powercap_control_type *, bool *);
+	int (*release)(struct powercap_control_type *);
+};
+
+struct powercap_control_type {
+	struct device dev;
+	struct idr idr;
+	int nr_zones;
+	const struct powercap_control_type_ops *ops;
+	struct mutex lock;
+	bool allocated;
+	struct list_head node;
+};
+
+struct powercap_zone;
+
+struct powercap_zone_ops {
+	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
+	int (*get_energy_uj)(struct powercap_zone *, u64 *);
+	int (*reset_energy_uj)(struct powercap_zone *);
+	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
+	int (*get_power_uw)(struct powercap_zone *, u64 *);
+	int (*set_enable)(struct powercap_zone *, bool);
+	int (*get_enable)(struct powercap_zone *, bool *);
+	int (*release)(struct powercap_zone *);
+};
+
+struct powercap_zone_constraint;
+
+struct powercap_zone {
+	int id;
+	char *name;
+	void *control_type_inst;
+	const struct powercap_zone_ops *ops;
+	struct device dev;
+	int const_id_cnt;
+	struct idr idr;
+	struct idr *parent_idr;
+	void *private_data;
+	struct attribute **zone_dev_attrs;
+	int zone_attr_count;
+	struct attribute_group dev_zone_attr_group;
+	const struct attribute_group *dev_attr_groups[2];
+	bool allocated;
+	struct powercap_zone_constraint *constraints;
+};
+
+struct powercap_zone_constraint_ops;
+
+struct powercap_zone_constraint {
+	int id;
+	struct powercap_zone *power_zone;
+	const struct powercap_zone_constraint_ops *ops;
+};
+
+struct powercap_zone_constraint_ops {
+	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
+	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
+	int (*set_time_window_us)(struct powercap_zone *, int, u64);
+	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
+	const char * (*get_name)(struct powercap_zone *, int);
+};
+
+struct dtpm_ops;
+
+struct dtpm {
+	struct powercap_zone zone;
+	struct dtpm *parent;
+	struct list_head sibling;
+	struct list_head children;
+	struct dtpm_ops *ops;
+	long unsigned int flags;
+	u64 power_limit;
+	u64 power_max;
+	u64 power_min;
+	int weight;
+};
+
+struct dtpm_ops {
+	u64 (*set_power_uw)(struct dtpm *, u64);
+	u64 (*get_power_uw)(struct dtpm *);
+	int (*update_power_uw)(struct dtpm *);
+	void (*release)(struct dtpm *);
+};
+
+struct dtpm_subsys_ops {
+	const char *name;
+	int (*init)();
+	void (*exit)();
+	int (*setup)(struct dtpm *, struct device_node *);
+};
+
+enum DTPM_NODE_TYPE {
+	DTPM_NODE_VIRTUAL = 0,
+	DTPM_NODE_DT = 1,
+};
+
+struct dtpm_node {
+	enum DTPM_NODE_TYPE type;
+	const char *name;
+	struct dtpm_node *parent;
+};
+
+typedef struct dtpm * (*dtpm_node_callback_t)(const struct dtpm_node *, struct dtpm *);
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
+};
+
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+};
+
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+};
+
+enum armpmu_attr_groups {
+	ARMPMU_ATTR_GROUP_COMMON = 0,
+	ARMPMU_ATTR_GROUP_EVENTS = 1,
+	ARMPMU_ATTR_GROUP_FORMATS = 2,
+	ARMPMU_ATTR_GROUP_CAPS = 3,
+	ARMPMU_NR_ATTR_GROUPS = 4,
+};
+
+enum ring_desc_flags {
+	RING_DESC_ISOCH = 1,
+	RING_DESC_CRC_ERROR = 1,
+	RING_DESC_COMPLETED = 2,
+	RING_DESC_POSTED = 4,
+	RING_DESC_BUFFER_OVERRUN = 4,
+	RING_DESC_INTERRUPT = 8,
+};
+
+struct ring_desc {
+	u64 phys;
+	u32 length: 12;
+	u32 eof: 4;
+	u32 sof: 4;
+	enum ring_desc_flags flags: 12;
+	u32 time;
+};
+
+enum nhi_fw_mode {
+	NHI_FW_SAFE_MODE = 0,
+	NHI_FW_AUTH_MODE = 1,
+	NHI_FW_EP_MODE = 2,
+	NHI_FW_CM_MODE = 3,
+};
+
+enum nhi_mailbox_cmd {
+	NHI_MAILBOX_SAVE_DEVS = 5,
+	NHI_MAILBOX_DISCONNECT_PCIE_PATHS = 6,
+	NHI_MAILBOX_DRV_UNLOADS = 7,
+	NHI_MAILBOX_DISCONNECT_PA = 16,
+	NHI_MAILBOX_DISCONNECT_PB = 17,
+	NHI_MAILBOX_ALLOW_ALL_DEVS = 35,
+};
+
+enum ring_flags {
+	RING_FLAG_ISOCH_ENABLE = 134217728,
+	RING_FLAG_E2E_FLOW_CONTROL = 268435456,
+	RING_FLAG_PCI_NO_SNOOP = 536870912,
+	RING_FLAG_RAW = 1073741824,
+	RING_FLAG_ENABLE = 2147483648,
+};
+
+struct tb_path_hop {
+	struct tb_port *in_port;
+	struct tb_port *out_port;
+	int in_hop_index;
+	int in_counter_index;
+	int next_hop_index;
+	unsigned int initial_credits;
+	unsigned int nfc_credits;
+};
+
+enum tb_path_port {
+	TB_PATH_NONE = 0,
+	TB_PATH_SOURCE = 1,
+	TB_PATH_INTERNAL = 2,
+	TB_PATH_DESTINATION = 4,
+	TB_PATH_ALL = 7,
+};
+
+struct tb_path {
+	struct tb *tb;
+	const char *name;
+	enum tb_path_port ingress_shared_buffer;
+	enum tb_path_port egress_shared_buffer;
+	enum tb_path_port ingress_fc_enable;
+	enum tb_path_port egress_fc_enable;
+	unsigned int priority: 3;
+	int weight: 4;
+	bool drop_packages;
+	bool activated;
+	bool clear_fc;
+	struct tb_path_hop *hops;
+	int path_length;
+	bool alloc_hopid;
+};
+
+enum tb_tunnel_type {
+	TB_TUNNEL_PCI = 0,
+	TB_TUNNEL_DP = 1,
+	TB_TUNNEL_DMA = 2,
+	TB_TUNNEL_USB3 = 3,
+};
+
+struct tb_tunnel {
+	struct tb *tb;
+	struct tb_port *src_port;
+	struct tb_port *dst_port;
+	struct tb_path **paths;
+	size_t npaths;
+	int (*init)(struct tb_tunnel *);
+	void (*deinit)(struct tb_tunnel *);
+	int (*activate)(struct tb_tunnel *, bool);
+	int (*consumed_bandwidth)(struct tb_tunnel *, int *, int *);
+	int (*release_unused_bandwidth)(struct tb_tunnel *);
+	void (*reclaim_available_bandwidth)(struct tb_tunnel *, int *, int *);
+	struct list_head list;
+	enum tb_tunnel_type type;
+	int max_up;
+	int max_down;
+	int allocated_up;
+	int allocated_down;
+};
+
+enum tb_switch_cap {
+	TB_SWITCH_CAP_TMU = 3,
+	TB_SWITCH_CAP_VSE = 5,
+};
+
+enum tb_port_cap {
+	TB_PORT_CAP_PHY = 1,
+	TB_PORT_CAP_POWER = 2,
+	TB_PORT_CAP_TIME1 = 3,
+	TB_PORT_CAP_ADAP = 4,
+	TB_PORT_CAP_VSE = 5,
+	TB_PORT_CAP_USB4 = 6,
+};
+
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	bool enabled;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_path {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[0];
+};
+
+struct icc_onecell_data {
+	unsigned int num_nodes;
+	struct icc_node *nodes[0];
+};
+
+struct trace_event_raw_icc_set_bw {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	u32 __data_loc_node_name;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 node_avg_bw;
+	u32 node_peak_bw;
+	char __data[0];
+};
+
+struct trace_event_raw_icc_set_bw_end {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_icc_set_bw {
+	u32 path_name;
+	u32 dev;
+	u32 node_name;
+};
+
+struct trace_event_data_offsets_icc_set_bw_end {
+	u32 path_name;
+	u32 dev;
+};
+
+typedef void (*btf_trace_icc_set_bw)(void *, struct icc_path *, struct icc_node *, int, u32, u32);
+
+typedef void (*btf_trace_icc_set_bw_end)(void *, struct icc_path *, int);
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+struct ahash_request;
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neighbour_cb {
+	long unsigned int sched_next;
+	unsigned int flags;
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+struct page_pool_stats {
+	struct page_pool_alloc_stats alloc_stats;
+	struct page_pool_recycle_stats recycle_stats;
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	short unsigned int protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long int sysctl_mem[3];
+	long int allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	long unsigned int txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+typedef __u16 port_id;
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	long unsigned int delay_time;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge_port;
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+};
+
+struct net_bridge;
+
+struct net_bridge_vlan_group;
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	long unsigned int flags;
+	struct net_bridge_vlan_group *vlgrp;
+	struct net_bridge_port *backup_port;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	long unsigned int designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	struct netpoll *np;
+	int hwdom;
+	int offload_count;
+	struct netdev_phys_item_id ppid;
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct metadata_dst;
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst *tunnel_dst;
+};
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	long unsigned int multicast_last_member_interval;
+	long unsigned int multicast_membership_interval;
+	long unsigned int multicast_querier_interval;
+	long unsigned int multicast_query_interval;
+	long unsigned int multicast_query_response_interval;
+	long unsigned int multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	long unsigned int options;
+	__be16 vlan_proto;
+	u16 default_pvid;
+	struct net_bridge_vlan_group *vlgrp;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	union {
+		struct rtable fake_rtable;
+		struct rt6_info fake_rt6_info;
+	};
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	long unsigned int max_age;
+	long unsigned int hello_time;
+	long unsigned int forward_delay;
+	long unsigned int ageing_time;
+	long unsigned int bridge_max_age;
+	long unsigned int bridge_hello_time;
+	long unsigned int bridge_forward_delay;
+	long unsigned int bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	int last_hwdom;
+	long unsigned int busy_hwdoms;
+	struct hlist_head fdb_list;
+	struct hlist_head mrp_list;
+	struct hlist_head mep_list;
+};
+
+struct net_bridge_vlan_group {
+	struct rhashtable vlan_hash;
+	struct rhashtable tunnel_hash;
+	struct list_head vlan_list;
+	u16 num_vlans;
+	u16 pvid;
+	u8 pvid_state;
+};
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long unsigned int updated;
+	long unsigned int used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+struct nvmem_cell;
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	short unsigned int overhead;
+	short int cell_align;
+	short unsigned int mpu;
+	__u32 rate;
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc **p_miniq;
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+struct scm_fp_list {
+	short int count;
+	short int max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+	u32 secid;
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	short unsigned int nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	__NLMSGERR_ATTR_MAX = 5,
+	NLMSGERR_ATTR_MAX = 4,
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct netlink_sock {
+	struct sock sk;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 flags;
+	u32 subscriptions;
+	u32 ngroups;
+	long unsigned int *groups;
+	long unsigned int state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	long unsigned int masks[0];
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 4,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	long unsigned int stat_mask[1];
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct nf_queue_entry;
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct net_device *physin;
+	struct net_device *physout;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_out_options {
+	u16 suboptions;
+	struct mptcp_rm_list rm_list;
+	u8 join_id;
+	u8 backup;
+	u8 reset_reason: 4;
+	u8 reset_transient: 1;
+	u8 csum_reqd: 1;
+	u8 allow_join_id0: 1;
+	union {
+		struct {
+			u64 sndr_key;
+			u64 rcvr_key;
+			u64 data_seq;
+			u32 subflow_seq;
+			u16 data_len;
+			__sum16 csum;
+		};
+		struct {
+			struct mptcp_addr_info addr;
+			u64 ahmac;
+		};
+		struct {
+			struct mptcp_ext ext_copy;
+			u64 fail_seq;
+		};
+		struct {
+			u32 nonce;
+			u32 token;
+			u64 thmac;
+			u8 hmac[20];
+		};
+	};
+};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	int pending;
+	unsigned int corkflag;
+	__u8 encap_type;
+	unsigned char no_check6_tx: 1;
+	unsigned char no_check6_rx: 1;
+	unsigned char encap_enabled: 1;
+	unsigned char gro_enabled: 1;
+	unsigned char accept_udp_l4: 1;
+	unsigned char accept_udp_fraglist: 1;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	__u8 pcflag;
+	__u8 unused[3];
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, unsigned int);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+struct flow_dissector {
+	unsigned int used_keys;
+	short unsigned int offset[30];
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct rtentry {
+	long unsigned int rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	long unsigned int rt_pad3;
+	void *rt_pad4;
+	short int rt_metric;
+	char *rt_dev;
+	long unsigned int rt_mtu;
+	long unsigned int rt_window;
+	short unsigned int rt_irtt;
+};
+
+struct cipso_v4_map_cache_bkt {
+	spinlock_t lock;
+	u32 size;
+	struct list_head list;
+};
+
+struct cipso_v4_map_cache_entry {
+	u32 hash;
+	unsigned char *key;
+	size_t key_len;
+	struct netlbl_lsm_cache *lsm_data;
+	u32 activity;
+	struct list_head list;
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct sadb_alg {
+	__u8 sadb_alg_id;
+	__u8 sadb_alg_ivlen;
+	__u16 sadb_alg_minbits;
+	__u16 sadb_alg_maxbits;
+	__u16 sadb_alg_reserved;
+};
+
+enum {
+	XFRM_SHARE_ANY = 0,
+	XFRM_SHARE_SESSION = 1,
+	XFRM_SHARE_USER = 2,
+	XFRM_SHARE_UNIQUE = 3,
+};
+
+struct xfrm_user_sec_ctx {
+	__u16 len;
+	__u16 exttype;
+	__u8 ctx_alg;
+	__u8 ctx_doi;
+	__u16 ctx_len;
+};
+
+struct xfrm_user_tmpl {
+	struct xfrm_id id;
+	__u16 family;
+	xfrm_address_t saddr;
+	__u32 reqid;
+	__u8 mode;
+	__u8 share;
+	__u8 optional;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+};
+
+struct xfrm_userpolicy_type {
+	__u8 type;
+	__u16 reserved1;
+	__u8 reserved2;
+};
+
+enum xfrm_sadattr_type_t {
+	XFRMA_SAD_UNSPEC = 0,
+	XFRMA_SAD_CNT = 1,
+	XFRMA_SAD_HINFO = 2,
+	__XFRMA_SAD_MAX = 3,
+};
+
+struct xfrmu_sadhinfo {
+	__u32 sadhcnt;
+	__u32 sadhmcnt;
+};
+
+enum xfrm_spdattr_type_t {
+	XFRMA_SPD_UNSPEC = 0,
+	XFRMA_SPD_INFO = 1,
+	XFRMA_SPD_HINFO = 2,
+	XFRMA_SPD_IPV4_HTHRESH = 3,
+	XFRMA_SPD_IPV6_HTHRESH = 4,
+	__XFRMA_SPD_MAX = 5,
+};
+
+struct xfrmu_spdinfo {
+	__u32 incnt;
+	__u32 outcnt;
+	__u32 fwdcnt;
+	__u32 inscnt;
+	__u32 outscnt;
+	__u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+	__u32 spdhcnt;
+	__u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+	__u8 lbits;
+	__u8 rbits;
+};
+
+struct xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq;
+	__u32 reqid;
+	__u16 family;
+	__u8 mode;
+	__u8 replay_window;
+	__u8 flags;
+};
+
+struct xfrm_usersa_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u16 family;
+	__u8 proto;
+};
+
+struct xfrm_aevent_id {
+	struct xfrm_usersa_id sa_id;
+	xfrm_address_t saddr;
+	__u32 flags;
+	__u32 reqid;
+};
+
+struct xfrm_userspi_info {
+	struct xfrm_usersa_info info;
+	__u32 min;
+	__u32 max;
+};
+
+struct xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	__u32 priority;
+	__u32 index;
+	__u8 dir;
+	__u8 action;
+	__u8 flags;
+	__u8 share;
+};
+
+struct xfrm_userpolicy_id {
+	struct xfrm_selector sel;
+	__u32 index;
+	__u8 dir;
+};
+
+struct xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct xfrm_userpolicy_info policy;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+	__u32 seq;
+};
+
+struct xfrm_user_expire {
+	struct xfrm_usersa_info state;
+	__u8 hard;
+};
+
+struct xfrm_user_polexpire {
+	struct xfrm_userpolicy_info pol;
+	__u8 hard;
+};
+
+struct xfrm_usersa_flush {
+	__u8 proto;
+};
+
+struct xfrm_user_report {
+	__u8 proto;
+	struct xfrm_selector sel;
+};
+
+struct xfrm_user_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	__u32 reserved;
+	__u16 family;
+};
+
+struct xfrm_user_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	__u8 proto;
+	__u8 mode;
+	__u16 reserved;
+	__u32 reqid;
+	__u16 old_family;
+	__u16 new_family;
+};
+
+struct xfrm_user_mapping {
+	struct xfrm_usersa_id id;
+	__u32 reqid;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_saddr;
+	__be16 old_sport;
+	__be16 new_sport;
+};
+
+struct xfrm_user_offload {
+	int ifindex;
+	__u8 flags;
+};
+
+struct xfrm_userpolicy_default {
+	__u8 in;
+	__u8 fwd;
+	__u8 out;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct xfrm_algo_aead_info {
+	char *geniv;
+	u16 icv_truncbits;
+};
+
+struct xfrm_algo_auth_info {
+	u16 icv_truncbits;
+	u16 icv_fullbits;
+};
+
+struct xfrm_algo_encr_info {
+	char *geniv;
+	u16 blockbits;
+	u16 defkeybits;
+};
+
+struct xfrm_algo_comp_info {
+	u16 threshold;
+};
+
+struct xfrm_algo_desc {
+	char *name;
+	char *compat;
+	u8 available: 1;
+	u8 pfkey_supported: 1;
+	union {
+		struct xfrm_algo_aead_info aead;
+		struct xfrm_algo_auth_info auth;
+		struct xfrm_algo_encr_info encr;
+		struct xfrm_algo_comp_info comp;
+	} uinfo;
+	struct sadb_alg desc;
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct xfrm_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct xfrm_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *nla_pol;
+	int nla_max;
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+};
+
+enum ip6_defrag_users {
+	IP6_DEFRAG_LOCAL_DELIVER = 0,
+	IP6_DEFRAG_CONNTRACK_IN = 1,
+	__IP6_DEFRAG_CONNTRACK_IN = 65536,
+	IP6_DEFRAG_CONNTRACK_OUT = 65537,
+	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
+	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
+	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
+};
+
+struct frag_queue {
+	struct inet_frag_queue q;
+	int iif;
+	__u16 nhoffset;
+	u8 ecn;
+};
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+struct rt2_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr;
+};
+
+struct ipv6_destopt_hao {
+	__u8 type;
+	__u8 length;
+	struct in6_addr addr;
+} __attribute__((packed));
+
+struct ip6_mh {
+	__u8 ip6mh_proto;
+	__u8 ip6mh_hdrlen;
+	__u8 ip6mh_type;
+	__u8 ip6mh_reserved;
+	__u16 ip6mh_cksum;
+	__u8 data[0];
+};
+
+struct mip6_report_rate_limiter {
+	spinlock_t lock;
+	ktime_t stamp;
+	int iif;
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct calipso_doi {
+	u32 doi;
+	u32 type;
+	refcount_t refcount;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct netlbl_af4list {
+	__be32 addr;
+	__be32 mask;
+	u32 valid;
+	struct list_head list;
+};
+
+struct netlbl_af6list {
+	struct in6_addr addr;
+	struct in6_addr mask;
+	u32 valid;
+	struct list_head list;
+};
+
+struct netlbl_domaddr4_map {
+	struct netlbl_dommap_def def;
+	struct netlbl_af4list list;
+};
+
+struct netlbl_domaddr6_map {
+	struct netlbl_dommap_def def;
+	struct netlbl_af6list list;
+};
+
+struct netlbl_domhsh_tbl {
+	struct list_head *tbl;
+	u32 size;
+};
+
+enum {
+	NLBL_UNLABEL_C_UNSPEC = 0,
+	NLBL_UNLABEL_C_ACCEPT = 1,
+	NLBL_UNLABEL_C_LIST = 2,
+	NLBL_UNLABEL_C_STATICADD = 3,
+	NLBL_UNLABEL_C_STATICREMOVE = 4,
+	NLBL_UNLABEL_C_STATICLIST = 5,
+	NLBL_UNLABEL_C_STATICADDDEF = 6,
+	NLBL_UNLABEL_C_STATICREMOVEDEF = 7,
+	NLBL_UNLABEL_C_STATICLISTDEF = 8,
+	__NLBL_UNLABEL_C_MAX = 9,
+};
+
+enum {
+	NLBL_UNLABEL_A_UNSPEC = 0,
+	NLBL_UNLABEL_A_ACPTFLG = 1,
+	NLBL_UNLABEL_A_IPV6ADDR = 2,
+	NLBL_UNLABEL_A_IPV6MASK = 3,
+	NLBL_UNLABEL_A_IPV4ADDR = 4,
+	NLBL_UNLABEL_A_IPV4MASK = 5,
+	NLBL_UNLABEL_A_IFACE = 6,
+	NLBL_UNLABEL_A_SECCTX = 7,
+	__NLBL_UNLABEL_A_MAX = 8,
+};
+
+struct netlbl_unlhsh_tbl {
+	struct list_head *tbl;
+	u32 size;
+};
+
+struct netlbl_unlhsh_addr4 {
+	u32 secid;
+	struct netlbl_af4list list;
+	struct callback_head rcu;
+};
+
+struct netlbl_unlhsh_addr6 {
+	u32 secid;
+	struct netlbl_af6list list;
+	struct callback_head rcu;
+};
+
+struct netlbl_unlhsh_iface {
+	int ifindex;
+	struct list_head addr4_list;
+	struct list_head addr6_list;
+	u32 valid;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct netlbl_unlhsh_walk_arg {
+	struct netlink_callback *nl_cb;
+	struct sk_buff *skb;
+	u32 seq;
+};
+
+enum {
+	NCSI_CAP_GENERIC_HWA = 1,
+	NCSI_CAP_GENERIC_HDS = 2,
+	NCSI_CAP_GENERIC_FC = 4,
+	NCSI_CAP_GENERIC_FC1 = 8,
+	NCSI_CAP_GENERIC_MC = 16,
+	NCSI_CAP_GENERIC_HWA_UNKNOWN = 0,
+	NCSI_CAP_GENERIC_HWA_SUPPORT = 32,
+	NCSI_CAP_GENERIC_HWA_NOT_SUPPORT = 64,
+	NCSI_CAP_GENERIC_HWA_RESERVED = 96,
+	NCSI_CAP_GENERIC_HWA_MASK = 96,
+	NCSI_CAP_GENERIC_MASK = 127,
+	NCSI_CAP_BC_ARP = 1,
+	NCSI_CAP_BC_DHCPC = 2,
+	NCSI_CAP_BC_DHCPS = 4,
+	NCSI_CAP_BC_NETBIOS = 8,
+	NCSI_CAP_BC_MASK = 15,
+	NCSI_CAP_MC_IPV6_NEIGHBOR = 1,
+	NCSI_CAP_MC_IPV6_ROUTER = 2,
+	NCSI_CAP_MC_DHCPV6_RELAY = 4,
+	NCSI_CAP_MC_DHCPV6_WELL_KNOWN = 8,
+	NCSI_CAP_MC_IPV6_MLD = 16,
+	NCSI_CAP_MC_IPV6_NEIGHBOR_S = 32,
+	NCSI_CAP_MC_MASK = 63,
+	NCSI_CAP_AEN_LSC = 1,
+	NCSI_CAP_AEN_CR = 2,
+	NCSI_CAP_AEN_HDS = 4,
+	NCSI_CAP_AEN_MASK = 7,
+	NCSI_CAP_VLAN_ONLY = 1,
+	NCSI_CAP_VLAN_NO = 2,
+	NCSI_CAP_VLAN_ANY = 4,
+	NCSI_CAP_VLAN_MASK = 7,
+};
+
+struct ncsi_cmd_pkt_hdr {
+	struct ncsi_pkt_hdr common;
+};
+
+struct ncsi_rsp_pkt_hdr {
+	struct ncsi_pkt_hdr common;
+	__be16 code;
+	__be16 reason;
+};
+
+struct ncsi_rsp_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_ae_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char reserved[3];
+	unsigned char mc_id;
+	__be32 mode;
+	__be32 checksum;
+	unsigned char pad[18];
+};
+
+struct ncsi_cmd_sl_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 mode;
+	__be32 oem_mode;
+	__be32 checksum;
+	unsigned char pad[18];
+};
+
+struct ncsi_cmd_svf_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be16 reserved;
+	__be16 vlan;
+	__be16 reserved1;
+	unsigned char index;
+	unsigned char enable;
+	__be32 checksum;
+	unsigned char pad[18];
+};
+
+struct ncsi_cmd_ev_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char reserved[3];
+	unsigned char mode;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_sma_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char mac[6];
+	unsigned char index;
+	unsigned char at_e;
+	__be32 checksum;
+	unsigned char pad[18];
+};
+
+struct ncsi_cmd_ebf_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 mode;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_egmf_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 mode;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_snfc_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char reserved[3];
+	unsigned char mode;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_rsp_oem_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 mfr_id;
+	unsigned char data[0];
+};
+
+struct ncsi_rsp_oem_mlx_pkt {
+	unsigned char cmd_rev;
+	unsigned char cmd;
+	unsigned char param;
+	unsigned char optional;
+	unsigned char data[0];
+};
+
+struct ncsi_rsp_oem_bcm_pkt {
+	unsigned char ver;
+	unsigned char type;
+	__be16 len;
+	unsigned char data[0];
+};
+
+struct ncsi_rsp_oem_intel_pkt {
+	unsigned char cmd;
+	unsigned char data[0];
+};
+
+struct ncsi_rsp_gls_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 status;
+	__be32 other;
+	__be32 oem_status;
+	__be32 checksum;
+	unsigned char pad[10];
+};
+
+struct ncsi_rsp_gvi_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 ncsi_version;
+	unsigned char reserved[3];
+	unsigned char alpha2;
+	unsigned char fw_name[12];
+	__be32 fw_version;
+	__be16 pci_ids[4];
+	__be32 mf_id;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gc_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 cap;
+	__be32 bc_cap;
+	__be32 mc_cap;
+	__be32 buf_cap;
+	__be32 aen_cap;
+	unsigned char vlan_cnt;
+	unsigned char mixed_cnt;
+	unsigned char mc_cnt;
+	unsigned char uc_cnt;
+	unsigned char reserved[2];
+	unsigned char vlan_mode;
+	unsigned char channel_cnt;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gp_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	unsigned char mac_cnt;
+	unsigned char reserved[2];
+	unsigned char mac_enable;
+	unsigned char vlan_cnt;
+	unsigned char reserved1;
+	__be16 vlan_enable;
+	__be32 link_mode;
+	__be32 bc_mode;
+	__be32 valid_modes;
+	unsigned char vlan_mode;
+	unsigned char fc_mode;
+	unsigned char reserved2[2];
+	__be32 aen_mode;
+	unsigned char mac[6];
+	__be16 vlan;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gcps_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 cnt_hi;
+	__be32 cnt_lo;
+	__be32 rx_bytes;
+	__be32 tx_bytes;
+	__be32 rx_uc_pkts;
+	__be32 rx_mc_pkts;
+	__be32 rx_bc_pkts;
+	__be32 tx_uc_pkts;
+	__be32 tx_mc_pkts;
+	__be32 tx_bc_pkts;
+	__be32 fcs_err;
+	__be32 align_err;
+	__be32 false_carrier;
+	__be32 runt_pkts;
+	__be32 jabber_pkts;
+	__be32 rx_pause_xon;
+	__be32 rx_pause_xoff;
+	__be32 tx_pause_xon;
+	__be32 tx_pause_xoff;
+	__be32 tx_s_collision;
+	__be32 tx_m_collision;
+	__be32 l_collision;
+	__be32 e_collision;
+	__be32 rx_ctl_frames;
+	__be32 rx_64_frames;
+	__be32 rx_127_frames;
+	__be32 rx_255_frames;
+	__be32 rx_511_frames;
+	__be32 rx_1023_frames;
+	__be32 rx_1522_frames;
+	__be32 rx_9022_frames;
+	__be32 tx_64_frames;
+	__be32 tx_127_frames;
+	__be32 tx_255_frames;
+	__be32 tx_511_frames;
+	__be32 tx_1023_frames;
+	__be32 tx_1522_frames;
+	__be32 tx_9022_frames;
+	__be32 rx_valid_bytes;
+	__be32 rx_runt_pkts;
+	__be32 rx_jabber_pkts;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gns_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 rx_cmds;
+	__be32 dropped_cmds;
+	__be32 cmd_type_errs;
+	__be32 cmd_csum_errs;
+	__be32 rx_pkts;
+	__be32 tx_pkts;
+	__be32 tx_aen_pkts;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gnpts_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 tx_pkts;
+	__be32 tx_dropped;
+	__be32 tx_channel_err;
+	__be32 tx_us_err;
+	__be32 rx_pkts;
+	__be32 rx_dropped;
+	__be32 rx_channel_err;
+	__be32 rx_us_err;
+	__be32 rx_os_err;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gps_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	__be32 status;
+	__be32 checksum;
+};
+
+struct ncsi_rsp_gpuuid_pkt {
+	struct ncsi_rsp_pkt_hdr rsp;
+	unsigned char uuid[16];
+	__be32 checksum;
+};
+
+struct ncsi_rsp_oem_handler {
+	unsigned int mfr_id;
+	int (*handler)(struct ncsi_request *);
+};
+
+struct ncsi_rsp_handler {
+	unsigned char type;
+	int payload;
+	int (*handler)(struct ncsi_request *);
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+enum mptcp_event_type {
+	MPTCP_EVENT_UNSPEC = 0,
+	MPTCP_EVENT_CREATED = 1,
+	MPTCP_EVENT_ESTABLISHED = 2,
+	MPTCP_EVENT_CLOSED = 3,
+	MPTCP_EVENT_ANNOUNCED = 6,
+	MPTCP_EVENT_REMOVED = 7,
+	MPTCP_EVENT_SUB_ESTABLISHED = 10,
+	MPTCP_EVENT_SUB_CLOSED = 11,
+	MPTCP_EVENT_SUB_PRIORITY = 13,
+};
+
+struct mptcp_delegated_action {
+	struct napi_struct napi;
+	struct list_head head;
+};
+
+struct trace_event_raw_mptcp_subflow_get_send {
+	struct trace_entry ent;
+	bool active;
+	bool free;
+	u32 snd_wnd;
+	u32 pace;
+	u8 backup;
+	u64 ratio;
+	char __data[0];
+};
+
+struct trace_event_raw_mptcp_dump_mpext {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	u16 csum;
+	u8 use_map;
+	u8 dsn64;
+	u8 data_fin;
+	u8 use_ack;
+	u8 ack64;
+	u8 mpc_map;
+	u8 frozen;
+	u8 reset_transient;
+	u8 reset_reason;
+	u8 csum_reqd;
+	u8 infinite_map;
+	char __data[0];
+};
+
+struct trace_event_raw_ack_update_msk {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 old_snd_una;
+	u64 new_snd_una;
+	u64 new_wnd_end;
+	u64 msk_wnd_end;
+	char __data[0];
+};
+
+struct trace_event_raw_subflow_check_data_avail {
+	struct trace_entry ent;
+	u8 status;
+	const void *skb;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mptcp_subflow_get_send {};
+
+struct trace_event_data_offsets_mptcp_dump_mpext {};
+
+struct trace_event_data_offsets_ack_update_msk {};
+
+struct trace_event_data_offsets_subflow_check_data_avail {};
+
+typedef void (*btf_trace_mptcp_subflow_get_send)(void *, struct mptcp_subflow_context *);
+
+typedef void (*btf_trace_mptcp_sendmsg_frag)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_get_mapping_status)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_ack_update_msk)(void *, u64, u64, u64, u64, u64);
+
+typedef void (*btf_trace_subflow_check_data_avail)(void *, __u8, struct sk_buff *);
+
+struct mptcp_skb_cb {
+	u64 map_seq;
+	u64 end_seq;
+	u32 offset;
+	u8 has_rxtstamp: 1;
+};
+
+enum {
+	MPTCP_CMSG_TS = 1,
+	MPTCP_CMSG_INQ = 2,
+};
+
+struct mptcp_sendmsg_info {
+	int mss_now;
+	int size_goal;
+	u16 limit;
+	u16 sent;
+	unsigned int flags;
+	bool data_lock_held;
+};
+
+struct subflow_send_info {
+	struct sock *ssk;
+	u64 linger_time;
+};
+
+enum {
+	IFLA_MCTP_UNSPEC = 0,
+	IFLA_MCTP_NET = 1,
+	__IFLA_MCTP_MAX = 2,
+};
+
+struct mctp_addr {
+	mctp_eid_t s_addr;
+};
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+struct mctp_dump_cb {
+	int h;
+	int idx;
+	size_t a_idx;
+};
+
+typedef u64 efi_physical_addr_t;
+
+typedef void *efi_handle_t;
+
+typedef void *efi_event_t;
+
+typedef void (*efi_event_notify_t)(efi_event_t, void *);
+
+typedef enum {
+	EfiTimerCancel = 0,
+	EfiTimerPeriodic = 1,
+	EfiTimerRelative = 2,
+} EFI_TIMER_DELAY;
+
+typedef struct efi_generic_dev_path efi_device_path_protocol_t;
+
+union efi_boot_services {
+	struct {
+		efi_table_hdr_t hdr;
+		void *raise_tpl;
+		void *restore_tpl;
+		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
+		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
+		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
+		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
+		efi_status_t (*free_pool)(void *);
+		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
+		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
+		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
+		void *signal_event;
+		efi_status_t (*close_event)(efi_event_t);
+		void *check_event;
+		void *install_protocol_interface;
+		void *reinstall_protocol_interface;
+		void *uninstall_protocol_interface;
+		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
+		void *__reserved;
+		void *register_protocol_notify;
+		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
+		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
+		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
+		void *load_image;
+		void *start_image;
+		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
+		void *unload_image;
+		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
+		void *get_next_monotonic_count;
+		efi_status_t (*stall)(long unsigned int);
+		void *set_watchdog_timer;
+		void *connect_controller;
+		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
+		void *open_protocol;
+		void *close_protocol;
+		void *open_protocol_information;
+		void *protocols_per_handle;
+		void *locate_handle_buffer;
+		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
+		void *install_multiple_protocol_interfaces;
+		void *uninstall_multiple_protocol_interfaces;
+		void *calculate_crc32;
+		void *copy_mem;
+		void *set_mem;
+		void *create_event_ex;
+	};
+	struct {
+		efi_table_hdr_t hdr;
+		u32 raise_tpl;
+		u32 restore_tpl;
+		u32 allocate_pages;
+		u32 free_pages;
+		u32 get_memory_map;
+		u32 allocate_pool;
+		u32 free_pool;
+		u32 create_event;
+		u32 set_timer;
+		u32 wait_for_event;
+		u32 signal_event;
+		u32 close_event;
+		u32 check_event;
+		u32 install_protocol_interface;
+		u32 reinstall_protocol_interface;
+		u32 uninstall_protocol_interface;
+		u32 handle_protocol;
+		u32 __reserved;
+		u32 register_protocol_notify;
+		u32 locate_handle;
+		u32 locate_device_path;
+		u32 install_configuration_table;
+		u32 load_image;
+		u32 start_image;
+		u32 exit;
+		u32 unload_image;
+		u32 exit_boot_services;
+		u32 get_next_monotonic_count;
+		u32 stall;
+		u32 set_watchdog_timer;
+		u32 connect_controller;
+		u32 disconnect_controller;
+		u32 open_protocol;
+		u32 close_protocol;
+		u32 open_protocol_information;
+		u32 protocols_per_handle;
+		u32 locate_handle_buffer;
+		u32 locate_protocol;
+		u32 install_multiple_protocol_interfaces;
+		u32 uninstall_multiple_protocol_interfaces;
+		u32 calculate_crc32;
+		u32 copy_mem;
+		u32 set_mem;
+		u32 create_event_ex;
+	} mixed_mode;
+};
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+typedef struct {
+	u16 scan_code;
+	efi_char16_t unicode_char;
+} efi_input_key_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_input_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
+		efi_event_t wait_for_key;
+	};
+	struct {
+		u32 reset;
+		u32 read_keystroke;
+		u32 wait_for_key;
+	} mixed_mode;
+};
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+union efi_simple_text_output_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
+		void *test_string;
+	};
+	struct {
+		u32 reset;
+		u32 output_string;
+		u32 test_string;
+	} mixed_mode;
+};
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		long unsigned int fw_vendor;
+		u32 fw_revision;
+		long unsigned int con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		long unsigned int con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		long unsigned int stderr_handle;
+		long unsigned int stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		long unsigned int nr_tables;
+		long unsigned int tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+typedef struct {
+	u32 red_mask;
+	u32 green_mask;
+	u32 blue_mask;
+	u32 reserved_mask;
+} efi_pixel_bitmask_t;
+
+typedef struct {
+	u32 version;
+	u32 horizontal_resolution;
+	u32 vertical_resolution;
+	int pixel_format;
+	efi_pixel_bitmask_t pixel_information;
+	u32 pixels_per_scan_line;
+} efi_graphics_output_mode_info_t;
+
+union efi_graphics_output_protocol_mode {
+	struct {
+		u32 max_mode;
+		u32 mode;
+		efi_graphics_output_mode_info_t *info;
+		long unsigned int size_of_info;
+		efi_physical_addr_t frame_buffer_base;
+		long unsigned int frame_buffer_size;
+	};
+	struct {
+		u32 max_mode;
+		u32 mode;
+		u32 info;
+		u32 size_of_info;
+		u64 frame_buffer_base;
+		u32 frame_buffer_size;
+	} mixed_mode;
+};
+
+typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
+
+union efi_graphics_output_protocol;
+
+typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
+
+union efi_graphics_output_protocol {
+	struct {
+		efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, long unsigned int *, efi_graphics_output_mode_info_t **);
+		efi_status_t (*set_mode)(efi_graphics_output_protocol_t *, u32);
+		void *blt;
+		efi_graphics_output_protocol_mode_t *mode;
+	};
+	struct {
+		u32 query_mode;
+		u32 set_mode;
+		u32 blt;
+		u32 mode;
+	} mixed_mode;
+};
+
+enum efi_cmdline_option {
+	EFI_CMDLINE_NONE = 0,
+	EFI_CMDLINE_MODE_NUM = 1,
+	EFI_CMDLINE_RES = 2,
+	EFI_CMDLINE_AUTO = 3,
+	EFI_CMDLINE_LIST = 4,
+};
+
+typedef int (*initcall_t)();
+
+typedef int initcall_entry_t;
+
+struct xbc_node {
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
+};
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+struct compat_sigcontext {
+	compat_ulong_t trap_no;
+	compat_ulong_t error_code;
+	compat_ulong_t oldmask;
+	compat_ulong_t arm_r0;
+	compat_ulong_t arm_r1;
+	compat_ulong_t arm_r2;
+	compat_ulong_t arm_r3;
+	compat_ulong_t arm_r4;
+	compat_ulong_t arm_r5;
+	compat_ulong_t arm_r6;
+	compat_ulong_t arm_r7;
+	compat_ulong_t arm_r8;
+	compat_ulong_t arm_r9;
+	compat_ulong_t arm_r10;
+	compat_ulong_t arm_fp;
+	compat_ulong_t arm_ip;
+	compat_ulong_t arm_sp;
+	compat_ulong_t arm_lr;
+	compat_ulong_t arm_pc;
+	compat_ulong_t arm_cpsr;
+	compat_ulong_t fault_address;
+};
+
+struct compat_ucontext {
+	compat_ulong_t uc_flags;
+	compat_uptr_t uc_link;
+	compat_stack_t uc_stack;
+	struct compat_sigcontext uc_mcontext;
+	compat_sigset_t uc_sigmask;
+	int __unused[30];
+	compat_ulong_t uc_regspace[128];
+};
+
+struct compat_sigframe {
+	struct compat_ucontext uc;
+	compat_ulong_t retcode[2];
+};
+
+struct compat_rt_sigframe {
+	struct compat_siginfo info;
+	struct compat_sigframe sig;
+};
+
+struct compat_user_vfp {
+	compat_u64 fpregs[32];
+	compat_ulong_t fpscr;
+};
+
+struct compat_user_vfp_exc {
+	compat_ulong_t fpexc;
+	compat_ulong_t fpinst;
+	compat_ulong_t fpinst2;
+};
+
+struct compat_vfp_sigframe {
+	compat_ulong_t magic;
+	compat_ulong_t size;
+	struct compat_user_vfp ufp;
+	struct compat_user_vfp_exc ufp_exc;
+};
+
+struct compat_aux_sigframe {
+	struct compat_vfp_sigframe vfp;
+	long unsigned int end_magic;
+};
+
+union __fpsimd_vreg {
+	__int128 unsigned raw;
+	struct {
+		u64 lo;
+		u64 hi;
+	};
+};
+
+struct hyp_shared_pfn {
+	u64 pfn;
+	int count;
+	struct rb_node node;
+};
+
+struct kvm_vcpu_init {
+	__u32 target;
+	__u32 features[7];
+};
+
+struct kvm_vcpu_events {
+	struct {
+		__u8 serror_pending;
+		__u8 serror_has_esr;
+		__u8 ext_dabt_pending;
+		__u8 pad[5];
+		__u64 serror_esr;
+	} exception;
+	__u32 reserved[12];
+};
+
+struct kvm_arm_copy_mte_tags {
+	__u64 guest_ipa;
+	__u64 length;
+	void *addr;
+	__u64 flags;
+	__u64 reserved[2];
+};
+
+struct kvm_one_reg {
+	__u64 id;
+	__u64 addr;
+};
+
+struct sve_state_reg_region {
+	unsigned int koffset;
+	unsigned int klen;
+	unsigned int upad;
+};
+
+struct vgic_vmcr {
+	u32 grpen0;
+	u32 grpen1;
+	u32 ackctl;
+	u32 fiqen;
+	u32 cbpr;
+	u32 eoim;
+	u32 abpr;
+	u32 bpr;
+	u32 pmr;
+};
+
+struct trace_event_raw_vgic_update_irq_pending {
+	struct trace_entry ent;
+	long unsigned int vcpu_id;
+	__u32 irq;
+	bool level;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vgic_update_irq_pending {};
+
+typedef void (*btf_trace_vgic_update_irq_pending)(void *, long unsigned int, __u32, bool);
+
+struct its_device {
+	struct list_head dev_list;
+	struct list_head itt_head;
+	u32 num_eventid_bits;
+	gpa_t itt_addr;
+	u32 device_id;
+};
+
+struct its_collection {
+	struct list_head coll_list;
+	u32 collection_id;
+	u32 target_addr;
+};
+
+struct its_ite {
+	struct list_head ite_list;
+	struct vgic_irq *irq;
+	struct its_collection *collection;
+	u32 event_id;
+};
+
+struct vgic_translation_cache_entry {
+	struct list_head entry;
+	phys_addr_t db;
+	u32 devid;
+	u32 eventid;
+	struct vgic_irq *irq;
+};
+
+struct vgic_its_abi {
+	int cte_esz;
+	int dte_esz;
+	int ite_esz;
+	int (*save_tables)(struct vgic_its *);
+	int (*restore_tables)(struct vgic_its *);
+	int (*commit)(struct vgic_its *);
+};
+
+typedef int (*entry_fn_t)(struct vgic_its *, u32, void *, void *);
+
+typedef void (*hcall_t)(struct kvm_cpu_context *);
+
+struct kvm_nvhe_stacktrace_info {
+	long unsigned int stack_base;
+	long unsigned int overflow_stack_base;
+	long unsigned int fp;
+	long unsigned int pc;
+};
+
+struct crypto_aes_xts_ctx {
+	struct crypto_aes_ctx key1;
+	int: 32;
+	struct crypto_aes_ctx key2;
+	int: 32;
+};
+
+struct crypto_aes_essiv_cbc_ctx {
+	struct crypto_aes_ctx key1;
+	int: 32;
+	struct crypto_aes_ctx key2;
+	struct crypto_shash *hash;
+};
+
+struct mac_tfm_ctx {
+	struct crypto_aes_ctx key;
+	int: 32;
+	u8 consts[0];
+};
+
+struct mac_desc_ctx {
+	unsigned int len;
+	u8 dg[16];
+};
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
+	union {
+		struct {
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
+	};
+};
+
+struct ptrace_rseq_configuration {
+	__u64 rseq_abi_pointer;
+	__u32 rseq_abi_size;
+	__u32 signature;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+typedef struct compat_siginfo compat_siginfo_t;
+
+struct umd_info {
+	const char *driver_name;
+	struct file *pipe_to_umh;
+	struct file *pipe_from_umh;
+	struct path wd;
+	struct pid *tgid;
+};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+struct sysrq_key_op {
+	void (* const handler)(int);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+	char *brl_options;
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum devkmsg_log_bits {
+	__DEVKMSG_LOG_BIT_ON = 0,
+	__DEVKMSG_LOG_BIT_OFF = 1,
+	__DEVKMSG_LOG_BIT_LOCK = 2,
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	char buf[8192];
+	struct printk_info info;
+	char text_buf[8192];
+	struct printk_record record;
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+struct io_tlb_area {
+	long unsigned int used;
+	unsigned int index;
+	spinlock_t lock;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+struct trace_event_raw_swiotlb_bounced {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u64 dma_mask;
+	dma_addr_t dev_addr;
+	size_t size;
+	bool force;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_swiotlb_bounced {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	long unsigned int address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
+};
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
+};
+
+struct compat_rusage {
+	struct old_timeval32 ru_utime;
+	struct old_timeval32 ru_stime;
+	compat_long_t ru_maxrss;
+	compat_long_t ru_ixrss;
+	compat_long_t ru_idrss;
+	compat_long_t ru_isrss;
+	compat_long_t ru_minflt;
+	compat_long_t ru_majflt;
+	compat_long_t ru_nswap;
+	compat_long_t ru_inblock;
+	compat_long_t ru_oublock;
+	compat_long_t ru_msgsnd;
+	compat_long_t ru_msgrcv;
+	compat_long_t ru_nsignals;
+	compat_long_t ru_nvcsw;
+	compat_long_t ru_nivcsw;
+};
+
+struct root_domain;
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	long unsigned int flags;
+	cpumask_var_t cpus_allowed;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	struct cgroup_file partition_file;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+enum ring_buffer_flags {
+	RB_FL_OVERWRITE = 1,
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct trace_export {
+	struct trace_export *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	char buf[0];
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *str;
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+struct trace_eval_map_head {
+	struct module *mod;
+	long unsigned int length;
+};
+
+union trace_eval_map_item;
+
+struct trace_eval_map_tail {
+	union trace_eval_map_item *next;
+	const char *end;
+};
+
+union trace_eval_map_item {
+	struct trace_eval_map map;
+	struct trace_eval_map_head head;
+	struct trace_eval_map_tail tail;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char *saved_cmdlines;
+};
+
+struct ftrace_stack {
+	long unsigned int calls[1024];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+struct ftrace_func_mapper;
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+struct synth_field_desc {
+	const char *type;
+	const char *name;
+};
+
+struct synth_trace_event;
+
+struct synth_event;
+
+struct synth_event_trace_state {
+	struct trace_event_buffer fbuffer;
+	struct synth_trace_event *entry;
+	struct trace_buffer *buffer;
+	struct synth_event *event;
+	unsigned int cur_field;
+	unsigned int n_u64;
+	bool disabled;
+	bool add_next;
+	bool add_name;
+};
+
+struct synth_trace_event {
+	struct trace_entry ent;
+	u64 fields[0];
+};
+
+struct dyn_event_operations;
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+struct synth_field;
+
+struct synth_event {
+	struct dyn_event devent;
+	int ref;
+	char *name;
+	struct synth_field **fields;
+	unsigned int n_fields;
+	struct synth_field **dynamic_fields;
+	unsigned int n_dynamic_fields;
+	unsigned int n_u64;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct tracepoint *tp;
+	struct module *mod;
+};
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+typedef int (*dynevent_check_arg_fn_t)(void *);
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+struct synth_field {
+	char *type;
+	char *name;
+	size_t size;
+	unsigned int offset;
+	unsigned int field_pos;
+	bool is_signed;
+	bool is_string;
+	bool is_dynamic;
+};
+
+enum {
+	SYNTH_ERR_BAD_NAME = 0,
+	SYNTH_ERR_INVALID_CMD = 1,
+	SYNTH_ERR_INVALID_DYN_CMD = 2,
+	SYNTH_ERR_EVENT_EXISTS = 3,
+	SYNTH_ERR_TOO_MANY_FIELDS = 4,
+	SYNTH_ERR_INCOMPLETE_TYPE = 5,
+	SYNTH_ERR_INVALID_TYPE = 6,
+	SYNTH_ERR_INVALID_FIELD = 7,
+	SYNTH_ERR_INVALID_ARRAY_SPEC = 8,
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_MOD_BF = 17,
+	FETCH_OP_LP_ARRAY = 18,
+	FETCH_OP_TP_ARG = 19,
+	FETCH_OP_END = 20,
+	FETCH_NOP_SYMBOL = 21,
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		long unsigned int immediate;
+		void *data;
+	};
+};
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	int is_signed;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_MAXACT_NO_KPROBE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_BAD_RETPROBE = 10,
+	TP_ERR_BAD_ADDR_SUFFIX = 11,
+	TP_ERR_NO_GROUP_NAME = 12,
+	TP_ERR_GROUP_TOO_LONG = 13,
+	TP_ERR_BAD_GROUP_NAME = 14,
+	TP_ERR_NO_EVENT_NAME = 15,
+	TP_ERR_EVENT_TOO_LONG = 16,
+	TP_ERR_BAD_EVENT_NAME = 17,
+	TP_ERR_EVENT_EXIST = 18,
+	TP_ERR_RETVAL_ON_PROBE = 19,
+	TP_ERR_BAD_STACK_NUM = 20,
+	TP_ERR_BAD_ARG_NUM = 21,
+	TP_ERR_BAD_VAR = 22,
+	TP_ERR_BAD_REG_NAME = 23,
+	TP_ERR_BAD_MEM_ADDR = 24,
+	TP_ERR_BAD_IMM = 25,
+	TP_ERR_IMMSTR_NO_CLOSE = 26,
+	TP_ERR_FILE_ON_KPROBE = 27,
+	TP_ERR_BAD_FILE_OFFS = 28,
+	TP_ERR_SYM_ON_UPROBE = 29,
+	TP_ERR_TOO_MANY_OPS = 30,
+	TP_ERR_DEREF_NEED_BRACE = 31,
+	TP_ERR_BAD_DEREF_OFFS = 32,
+	TP_ERR_DEREF_OPEN_BRACE = 33,
+	TP_ERR_COMM_CANT_DEREF = 34,
+	TP_ERR_BAD_FETCH_ARG = 35,
+	TP_ERR_ARRAY_NO_CLOSE = 36,
+	TP_ERR_BAD_ARRAY_SUFFIX = 37,
+	TP_ERR_BAD_ARRAY_NUM = 38,
+	TP_ERR_ARRAY_TOO_BIG = 39,
+	TP_ERR_BAD_TYPE = 40,
+	TP_ERR_BAD_STRING = 41,
+	TP_ERR_BAD_BITFIELD = 42,
+	TP_ERR_ARG_NAME_TOO_LONG = 43,
+	TP_ERR_NO_ARG_NAME = 44,
+	TP_ERR_BAD_ARG_NAME = 45,
+	TP_ERR_USED_ARG_NAME = 46,
+	TP_ERR_ARG_TOO_LONG = 47,
+	TP_ERR_NO_ARG_BODY = 48,
+	TP_ERR_BAD_INSN_BNDRY = 49,
+	TP_ERR_FAIL_REG_PROBE = 50,
+	TP_ERR_DIFF_PROBE_TYPE = 51,
+	TP_ERR_DIFF_ARG_TYPE = 52,
+	TP_ERR_SAME_PROBE = 53,
+	TP_ERR_NO_EVENT_INFO = 54,
+	TP_ERR_BAD_ATTACH_EVENT = 55,
+	TP_ERR_BAD_ATTACH_ARG = 56,
+};
+
+struct trace_probe_log {
+	const char *subsystem;
+	const char **argv;
+	int argc;
+	int index;
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long int tgt_addr;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct bpf_map_value_off_desc *kptr_off_desc;
+	u8 uninit_dynptr_regno;
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum {
+	AT_PKT_END = 4294967295,
+	BEYOND_PKT_END = 4294967294,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+enum {
+	REASON_BOUNDS = 4294967295,
+	REASON_TYPE = 4294967294,
+	REASON_PATHS = 4294967293,
+	REASON_LIMIT = 4294967292,
+	REASON_STACK = 4294967291,
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
 };
 
 enum {
@@ -31130,6 +86935,12 @@
 	BPF_RINGBUF_HDR_SZ = 8,
 };
 
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
 struct bpf_ringbuf {
 	wait_queue_head_t waitq;
 	struct irq_work work;
@@ -31143,7 +86954,6 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
 	spinlock_t spinlock;
 	long: 32;
 	long: 64;
@@ -32670,13 +88480,14 @@
 
 struct bpf_ringbuf_map {
 	struct bpf_map map;
-	struct bpf_map_memory memory;
 	struct bpf_ringbuf *rb;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct bpf_ringbuf_hdr {
@@ -32694,760 +88505,15 @@
 
 typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
 
-enum {
-	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
-	BPF_SK_STORAGE_GET_F_CREATE = 1,
-};
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
 
-struct bpf_local_storage_map_bucket;
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_map {
-	struct bpf_map map;
-	struct bpf_local_storage_map_bucket *buckets;
-	u32 bucket_log;
-	u16 elem_size;
-	u16 cache_idx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_local_storage_data;
-
-struct bpf_local_storage {
-	struct bpf_local_storage_data *cache[16];
-	struct hlist_head list;
-	void *owner;
-	struct callback_head rcu;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_map_bucket {
-	struct hlist_head list;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_data {
-	struct bpf_local_storage_map *smap;
-	u8 data[0];
-};
-
-struct bpf_local_storage_elem {
-	struct hlist_node map_node;
-	struct hlist_node snode;
-	struct bpf_local_storage *local_storage;
-	struct callback_head rcu;
-	long: 64;
-	struct bpf_local_storage_data sdata;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_local_storage_cache {
-	spinlock_t idx_lock;
-	u64 idx_usage_counts[16];
-};
-
-struct lsm_blob_sizes {
-	int lbs_cred;
-	int lbs_file;
-	int lbs_inode;
-	int lbs_ipc;
-	int lbs_msg_msg;
-	int lbs_task;
-};
-
-struct bpf_storage_blob {
-	struct bpf_local_storage *storage;
-};
-
-typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64);
-
-typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
-
-struct bpf_tramp_progs {
-	struct bpf_prog *progs[40];
-	int nr_progs;
-};
-
-struct btf_enum {
-	__u32 name_off;
-	__s32 val;
-};
-
-struct btf_array {
-	__u32 type;
-	__u32 index_type;
-	__u32 nelems;
-};
-
-struct btf_param {
-	__u32 name_off;
-	__u32 type;
-};
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
 
 enum {
-	BTF_VAR_STATIC = 0,
-	BTF_VAR_GLOBAL_ALLOCATED = 1,
-	BTF_VAR_GLOBAL_EXTERN = 2,
-};
-
-struct btf_var {
-	__u32 linkage;
-};
-
-struct bpf_flow_keys {
-	__u16 nhoff;
-	__u16 thoff;
-	__u16 addr_proto;
-	__u8 is_frag;
-	__u8 is_first_frag;
-	__u8 is_encap;
-	__u8 ip_proto;
-	__be16 n_proto;
-	__be16 sport;
-	__be16 dport;
-	union {
-		struct {
-			__be32 ipv4_src;
-			__be32 ipv4_dst;
-		};
-		struct {
-			__u32 ipv6_src[4];
-			__u32 ipv6_dst[4];
-		};
-	};
-	__u32 flags;
-	__be32 flow_label;
-};
-
-struct bpf_sock {
-	__u32 bound_dev_if;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 mark;
-	__u32 priority;
-	__u32 src_ip4;
-	__u32 src_ip6[4];
-	__u32 src_port;
-	__u32 dst_port;
-	__u32 dst_ip4;
-	__u32 dst_ip6[4];
-	__u32 state;
-	__s32 rx_queue_mapping;
-};
-
-struct __sk_buff {
-	__u32 len;
-	__u32 pkt_type;
-	__u32 mark;
-	__u32 queue_mapping;
-	__u32 protocol;
-	__u32 vlan_present;
-	__u32 vlan_tci;
-	__u32 vlan_proto;
-	__u32 priority;
-	__u32 ingress_ifindex;
-	__u32 ifindex;
-	__u32 tc_index;
-	__u32 cb[5];
-	__u32 hash;
-	__u32 tc_classid;
-	__u32 data;
-	__u32 data_end;
-	__u32 napi_id;
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 data_meta;
-	union {
-		struct bpf_flow_keys *flow_keys;
-	};
-	__u64 tstamp;
-	__u32 wire_len;
-	__u32 gso_segs;
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 gso_size;
-};
-
-struct xdp_md {
-	__u32 data;
-	__u32 data_end;
-	__u32 data_meta;
-	__u32 ingress_ifindex;
-	__u32 rx_queue_index;
-	__u32 egress_ifindex;
-};
-
-struct sk_msg_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 size;
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct sk_reuseport_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 len;
-	__u32 eth_protocol;
-	__u32 ip_protocol;
-	__u32 bind_inany;
-	__u32 hash;
-};
-
-struct bpf_sock_addr {
-	__u32 user_family;
-	__u32 user_ip4;
-	__u32 user_ip6[4];
-	__u32 user_port;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 msg_src_ip4;
-	__u32 msg_src_ip6[4];
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct bpf_sock_ops {
-	__u32 op;
-	union {
-		__u32 args[4];
-		__u32 reply;
-		__u32 replylong[4];
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 is_fullsock;
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 bpf_sock_ops_cb_flags;
-	__u32 state;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u32 sk_txhash;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *skb_data;
-	};
-	union {
-		void *skb_data_end;
-	};
-	__u32 skb_len;
-	__u32 skb_tcp_flags;
-};
-
-struct bpf_cgroup_dev_ctx {
-	__u32 access_type;
-	__u32 major;
-	__u32 minor;
-};
-
-struct bpf_sysctl {
-	__u32 write;
-	__u32 file_pos;
-};
-
-struct bpf_sockopt {
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *optval;
-	};
-	union {
-		void *optval_end;
-	};
-	__s32 level;
-	__s32 optname;
-	__s32 optlen;
-	__s32 retval;
-};
-
-struct bpf_sk_lookup {
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 family;
-	__u32 protocol;
-	__u32 remote_ip4;
-	__u32 remote_ip6[4];
-	__u32 remote_port;
-	__u32 local_ip4;
-	__u32 local_ip6[4];
-	__u32 local_port;
-};
-
-struct sk_reuseport_kern {
-	struct sk_buff *skb;
-	struct sock *sk;
-	struct sock *selected_sk;
-	void *data_end;
-	u32 hash;
-	u32 reuseport_id;
-	bool bind_inany;
-};
-
-struct bpf_flow_dissector {
-	struct bpf_flow_keys *flow_keys;
-	const struct sk_buff *skb;
-	void *data;
-	void *data_end;
-};
-
-struct inet_listen_hashbucket {
-	spinlock_t lock;
-	unsigned int count;
-	union {
-		struct hlist_head head;
-		struct hlist_nulls_head nulls_head;
-	};
-};
-
-struct inet_ehash_bucket;
-
-struct inet_bind_hashbucket;
-
-struct inet_hashinfo {
-	struct inet_ehash_bucket *ehash;
-	spinlock_t *ehash_locks;
-	unsigned int ehash_mask;
-	unsigned int ehash_locks_mask;
-	struct kmem_cache *bind_bucket_cachep;
-	struct inet_bind_hashbucket *bhash;
-	unsigned int bhash_size;
-	unsigned int lhash2_mask;
-	struct inet_listen_hashbucket *lhash2;
-	long: 64;
-	struct inet_listen_hashbucket listening_hash[32];
-};
-
-struct ip_ra_chain {
-	struct ip_ra_chain *next;
-	struct sock *sk;
-	union {
-		void (*destructor)(struct sock *);
-		struct sock *saved_sk;
-	};
-	struct callback_head rcu;
-};
-
-struct fib_table {
-	struct hlist_node tb_hlist;
-	u32 tb_id;
-	int tb_num_default;
-	struct callback_head rcu;
-	long unsigned int *tb_data;
-	long unsigned int __data[0];
-};
-
-struct inet_peer_base {
-	struct rb_root rb_root;
-	seqlock_t lock;
-	int total;
-};
-
-struct tcp_fastopen_context {
-	siphash_key_t key[2];
-	int num;
-	struct callback_head rcu;
-};
-
-struct xdp_txq_info {
-	struct net_device *dev;
-};
-
-struct xdp_buff {
-	void *data;
-	void *data_end;
-	void *data_meta;
-	void *data_hard_start;
-	struct xdp_rxq_info *rxq;
-	struct xdp_txq_info *txq;
-	u32 frame_sz;
-};
-
-struct bpf_sock_addr_kern {
-	struct sock *sk;
-	struct sockaddr *uaddr;
-	u64 tmp_reg;
-	void *t_ctx;
-};
-
-struct bpf_sock_ops_kern {
-	struct sock *sk;
-	union {
-		u32 args[4];
-		u32 reply;
-		u32 replylong[4];
-	};
-	struct sk_buff *syn_skb;
-	struct sk_buff *skb;
-	void *skb_data_end;
-	u8 op;
-	u8 is_fullsock;
-	u8 remaining_opt_len;
-	u64 temp;
-};
-
-struct bpf_sysctl_kern {
-	struct ctl_table_header *head;
-	struct ctl_table *table;
-	void *cur_val;
-	size_t cur_len;
-	void *new_val;
-	size_t new_len;
-	int new_updated;
-	int write;
-	loff_t *ppos;
-	u64 tmp_reg;
-};
-
-struct bpf_sockopt_kern {
-	struct sock *sk;
-	u8 *optval;
-	u8 *optval_end;
-	s32 level;
-	s32 optname;
-	s32 optlen;
-	s32 retval;
-};
-
-struct bpf_sk_lookup_kern {
-	u16 family;
-	u16 protocol;
-	__be16 sport;
-	u16 dport;
-	struct {
-		__be32 saddr;
-		__be32 daddr;
-	} v4;
-	struct {
-		const struct in6_addr *saddr;
-		const struct in6_addr *daddr;
-	} v6;
-	struct sock *selected_sk;
-	bool no_reuseport;
-};
-
-struct sock_reuseport {
-	struct callback_head rcu;
-	u16 max_socks;
-	u16 num_socks;
-	unsigned int synq_overflow_ts;
-	unsigned int reuseport_id;
-	unsigned int bind_inany: 1;
-	unsigned int has_conns: 1;
-	struct bpf_prog *prog;
-	struct sock *socks[0];
-};
-
-struct inet_ehash_bucket {
-	struct hlist_nulls_head chain;
-};
-
-struct inet_bind_hashbucket {
-	spinlock_t lock;
-	struct hlist_head chain;
-};
-
-struct ack_sample {
-	u32 pkts_acked;
-	s32 rtt_us;
-	u32 in_flight;
-};
-
-struct rate_sample {
-	u64 prior_mstamp;
-	u32 prior_delivered;
-	s32 delivered;
-	long int interval_us;
-	u32 snd_interval_us;
-	u32 rcv_interval_us;
-	long int rtt_us;
-	int losses;
-	u32 acked_sacked;
-	u32 prior_in_flight;
-	bool is_app_limited;
-	bool is_retrans;
-	bool is_ack_delayed;
-};
-
-struct sk_msg_sg {
-	u32 start;
-	u32 curr;
-	u32 end;
-	u32 size;
-	u32 copybreak;
-	long unsigned int copy;
-	struct scatterlist data[19];
-};
-
-struct sk_msg {
-	struct sk_msg_sg sg;
-	void *data;
-	void *data_end;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 flags;
-	struct sk_buff *skb;
-	struct sock *sk_redir;
-	struct sock *sk;
-	struct list_head list;
-};
-
-enum verifier_phase {
-	CHECK_META = 0,
-	CHECK_TYPE = 1,
-};
-
-struct resolve_vertex {
-	const struct btf_type *t;
-	u32 type_id;
-	u16 next_member;
-};
-
-enum visit_state {
-	NOT_VISITED = 0,
-	VISITED = 1,
-	RESOLVED = 2,
-};
-
-enum resolve_mode {
-	RESOLVE_TBD = 0,
-	RESOLVE_PTR = 1,
-	RESOLVE_STRUCT_OR_ARRAY = 2,
-};
-
-struct btf_sec_info {
-	u32 off;
-	u32 len;
-};
-
-struct btf_verifier_env {
-	struct btf *btf;
-	u8 *visit_states;
-	struct resolve_vertex stack[32];
-	struct bpf_verifier_log log;
-	u32 log_type_id;
-	u32 top_stack;
-	enum verifier_phase phase;
-	enum resolve_mode resolve_mode;
-};
-
-struct btf_show {
-	u64 flags;
-	void *target;
-	void (*showfn)(struct btf_show *, const char *, va_list);
-	const struct btf *btf;
-	struct {
-		u8 depth;
-		u8 depth_to_show;
-		u8 depth_check;
-		u8 array_member: 1;
-		u8 array_terminated: 1;
-		u16 array_encoding;
-		u32 type_id;
-		int status;
-		const struct btf_type *type;
-		const struct btf_member *member;
-		char name[80];
-	} state;
-	struct {
-		u32 size;
-		void *head;
-		void *data;
-		u8 safe[32];
-	} obj;
-};
-
-struct btf_kind_operations {
-	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
-	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
-	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
-	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
-};
-
-struct bpf_ctx_convert {
-	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
-	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
-	struct xdp_md BPF_PROG_TYPE_XDP_prog;
-	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
-	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
-	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
-	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
-	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
-	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
-	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
-	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
-	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
-	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
-	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
-	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
-	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
-	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
-	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
-	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
-	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
-	void *BPF_PROG_TYPE_TRACING_prog;
-	void *BPF_PROG_TYPE_TRACING_kern;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
-	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
-	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
-	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
-	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
-	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
-	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
-	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
-	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
-	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
-	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
-	void *BPF_PROG_TYPE_EXT_prog;
-	void *BPF_PROG_TYPE_EXT_kern;
-	void *BPF_PROG_TYPE_LSM_prog;
-	void *BPF_PROG_TYPE_LSM_kern;
-};
-
-enum {
-	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
-	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
-	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
-	__ctx_convertBPF_PROG_TYPE_XDP = 3,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
-	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
-	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
-	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
-	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
-	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
-	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
-	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
-	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
-	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
-	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
-	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
-	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
-	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
-	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
-	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
-	__ctx_convertBPF_PROG_TYPE_EXT = 27,
-	__ctx_convertBPF_PROG_TYPE_LSM = 28,
-	__ctx_convert_unused = 29,
-};
-
-enum bpf_struct_walk_result {
-	WALK_SCALAR = 0,
-	WALK_PTR = 1,
-	WALK_STRUCT = 2,
-};
-
-struct btf_show_snprintf {
-	struct btf_show show;
-	int len_left;
-	int len;
-};
-
-struct bpf_dispatcher_prog {
-	struct bpf_prog *prog;
-	refcount_t users;
-};
-
-struct bpf_dispatcher {
-	struct mutex mutex;
-	void *func;
-	struct bpf_dispatcher_prog progs[48];
-	int num_progs;
-	void *image;
-	u32 image_off;
-	struct bpf_ksym ksym;
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
 };
 
 struct bpf_devmap_val {
@@ -33458,78 +88524,15 @@
 	} bpf_prog;
 };
 
-enum net_device_flags {
-	IFF_UP = 1,
-	IFF_BROADCAST = 2,
-	IFF_DEBUG = 4,
-	IFF_LOOPBACK = 8,
-	IFF_POINTOPOINT = 16,
-	IFF_NOTRAILERS = 32,
-	IFF_RUNNING = 64,
-	IFF_NOARP = 128,
-	IFF_PROMISC = 256,
-	IFF_ALLMULTI = 512,
-	IFF_MASTER = 1024,
-	IFF_SLAVE = 2048,
-	IFF_MULTICAST = 4096,
-	IFF_PORTSEL = 8192,
-	IFF_AUTOMEDIA = 16384,
-	IFF_DYNAMIC = 32768,
-	IFF_LOWER_UP = 65536,
-	IFF_DORMANT = 131072,
-	IFF_ECHO = 262144,
-};
-
 struct xdp_dev_bulk_queue {
 	struct xdp_frame *q[16];
 	struct list_head flush_node;
 	struct net_device *dev;
 	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
 	unsigned int count;
 };
 
-enum netdev_cmd {
-	NETDEV_UP = 1,
-	NETDEV_DOWN = 2,
-	NETDEV_REBOOT = 3,
-	NETDEV_CHANGE = 4,
-	NETDEV_REGISTER = 5,
-	NETDEV_UNREGISTER = 6,
-	NETDEV_CHANGEMTU = 7,
-	NETDEV_CHANGEADDR = 8,
-	NETDEV_PRE_CHANGEADDR = 9,
-	NETDEV_GOING_DOWN = 10,
-	NETDEV_CHANGENAME = 11,
-	NETDEV_FEAT_CHANGE = 12,
-	NETDEV_BONDING_FAILOVER = 13,
-	NETDEV_PRE_UP = 14,
-	NETDEV_PRE_TYPE_CHANGE = 15,
-	NETDEV_POST_TYPE_CHANGE = 16,
-	NETDEV_POST_INIT = 17,
-	NETDEV_RELEASE = 18,
-	NETDEV_NOTIFY_PEERS = 19,
-	NETDEV_JOIN = 20,
-	NETDEV_CHANGEUPPER = 21,
-	NETDEV_RESEND_IGMP = 22,
-	NETDEV_PRECHANGEMTU = 23,
-	NETDEV_CHANGEINFODATA = 24,
-	NETDEV_BONDING_INFO = 25,
-	NETDEV_PRECHANGEUPPER = 26,
-	NETDEV_CHANGELOWERSTATE = 27,
-	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
-	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
-	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
-	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
-	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
-	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
-	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
-};
-
-struct netdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
 struct bpf_dtab;
 
 struct bpf_dtab_netdev {
@@ -33555,399 +88558,13 @@
 	long: 64;
 };
 
-struct bpf_cpumap_val {
-	__u32 qsize;
-	union {
-		int fd;
-		__u32 id;
-	} bpf_prog;
+struct bpf_dummy_ops_state {
+	int val;
 };
 
-typedef struct bio_vec skb_frag_t;
-
-struct skb_shared_hwtstamps {
-	ktime_t hwtstamp;
-};
-
-struct skb_shared_info {
-	__u8 __unused;
-	__u8 meta_len;
-	__u8 nr_frags;
-	__u8 tx_flags;
-	short unsigned int gso_size;
-	short unsigned int gso_segs;
-	struct sk_buff *frag_list;
-	struct skb_shared_hwtstamps hwtstamps;
-	unsigned int gso_type;
-	u32 tskey;
-	atomic_t dataref;
-	void *destructor_arg;
-	skb_frag_t frags[17];
-};
-
-struct bpf_nh_params {
-	u32 nh_family;
-	union {
-		u32 ipv4_nh;
-		struct in6_addr ipv6_nh;
-	};
-};
-
-struct bpf_redirect_info {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map *map;
-	u32 kern_flags;
-	struct bpf_nh_params nh;
-};
-
-struct ptr_ring {
-	int producer;
-	spinlock_t producer_lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int consumer_head;
-	int consumer_tail;
-	spinlock_t consumer_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int size;
-	int batch;
-	void **queue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_cpu_map_entry;
-
-struct xdp_bulk_queue {
-	void *q[8];
-	struct list_head flush_node;
-	struct bpf_cpu_map_entry *obj;
-	unsigned int count;
-};
-
-struct bpf_cpu_map;
-
-struct bpf_cpu_map_entry {
-	u32 cpu;
-	int map_id;
-	struct xdp_bulk_queue *bulkq;
-	struct bpf_cpu_map *cmap;
-	struct ptr_ring *queue;
-	struct task_struct *kthread;
-	struct bpf_cpumap_val value;
-	struct bpf_prog *prog;
-	atomic_t refcnt;
-	struct callback_head rcu;
-	struct work_struct kthread_stop_wq;
-};
-
-struct bpf_cpu_map {
-	struct bpf_map map;
-	struct bpf_cpu_map_entry **cpu_map;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rhlist_head {
-	struct rhash_head rhead;
-	struct rhlist_head *next;
-};
-
-struct bpf_prog_offload_ops {
-	int (*insn_hook)(struct bpf_verifier_env *, int, int);
-	int (*finalize)(struct bpf_verifier_env *);
-	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
-	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
-	int (*prepare)(struct bpf_prog *);
-	int (*translate)(struct bpf_prog *);
-	void (*destroy)(struct bpf_prog *);
-};
-
-struct bpf_offload_dev {
-	const struct bpf_prog_offload_ops *ops;
-	struct list_head netdevs;
-	void *priv;
-};
-
-struct bpf_offload_netdev {
-	struct rhash_head l;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	struct list_head progs;
-	struct list_head maps;
-	struct list_head offdev_netdevs;
-};
-
-struct ns_get_path_bpf_prog_args {
-	struct bpf_prog *prog;
-	struct bpf_prog_info *info;
-};
-
-struct ns_get_path_bpf_map_args {
-	struct bpf_offloaded_map *offmap;
-	struct bpf_map_info *info;
-};
-
-struct bpf_netns_link {
-	struct bpf_link link;
-	enum bpf_attach_type type;
-	enum netns_bpf_attach_type netns_type;
-	struct net *net;
-	struct list_head node;
-};
-
-enum bpf_stack_build_id_status {
-	BPF_STACK_BUILD_ID_EMPTY = 0,
-	BPF_STACK_BUILD_ID_VALID = 1,
-	BPF_STACK_BUILD_ID_IP = 2,
-};
-
-struct bpf_stack_build_id {
-	__s32 status;
-	unsigned char build_id[20];
-	union {
-		__u64 offset;
-		__u64 ip;
-	};
-};
-
-enum {
-	BPF_F_SKIP_FIELD_MASK = 255,
-	BPF_F_USER_STACK = 256,
-	BPF_F_FAST_STACK_CMP = 512,
-	BPF_F_REUSE_STACKID = 1024,
-	BPF_F_USER_BUILD_ID = 2048,
-};
-
-typedef __u32 Elf32_Addr;
-
-typedef __u16 Elf32_Half;
-
-typedef __u32 Elf32_Off;
-
-struct elf32_hdr {
-	unsigned char e_ident[16];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-};
-
-typedef struct elf32_hdr Elf32_Ehdr;
-
-struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-};
-
-typedef struct elf32_phdr Elf32_Phdr;
-
-typedef struct elf32_note Elf32_Nhdr;
-
-enum perf_callchain_context {
-	PERF_CONTEXT_HV = 4294967264,
-	PERF_CONTEXT_KERNEL = 4294967168,
-	PERF_CONTEXT_USER = 4294966784,
-	PERF_CONTEXT_GUEST = 4294965248,
-	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
-	PERF_CONTEXT_GUEST_USER = 4294964736,
-	PERF_CONTEXT_MAX = 4294963201,
-};
-
-struct stack_map_bucket {
-	struct pcpu_freelist_node fnode;
-	u32 hash;
-	u32 nr;
-	u64 data[0];
-};
-
-struct bpf_stack_map {
-	struct bpf_map map;
-	void *elems;
-	struct pcpu_freelist freelist;
-	u32 n_buckets;
-	struct stack_map_bucket *buckets[0];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct stack_map_irq_work {
-	struct irq_work irq_work;
-	struct mm_struct *mm;
-};
-
-typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
-
-enum {
-	BPF_F_SYSCTL_BASE_NAME = 1,
-};
-
-struct bpf_prog_list {
-	struct list_head node;
-	struct bpf_prog *prog;
-	struct bpf_cgroup_link *link;
-	struct bpf_cgroup_storage *storage[2];
-};
-
-struct qdisc_skb_cb {
-	struct {
-		unsigned int pkt_len;
-		u16 slave_dev_queue_mapping;
-		u16 tc_classid;
-	};
-	unsigned char data[20];
-	u16 mru;
-};
-
-struct bpf_skb_data_end {
-	struct qdisc_skb_cb qdisc_cb;
-	void *data_meta;
-	void *data_end;
-};
-
-enum {
-	TCPF_ESTABLISHED = 2,
-	TCPF_SYN_SENT = 4,
-	TCPF_SYN_RECV = 8,
-	TCPF_FIN_WAIT1 = 16,
-	TCPF_FIN_WAIT2 = 32,
-	TCPF_TIME_WAIT = 64,
-	TCPF_CLOSE = 128,
-	TCPF_CLOSE_WAIT = 256,
-	TCPF_LAST_ACK = 512,
-	TCPF_LISTEN = 1024,
-	TCPF_CLOSING = 2048,
-	TCPF_NEW_SYN_RECV = 4096,
-};
-
-typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
-
-typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
-
-enum sock_type {
-	SOCK_STREAM = 1,
-	SOCK_DGRAM = 2,
-	SOCK_RAW = 3,
-	SOCK_RDM = 4,
-	SOCK_SEQPACKET = 5,
-	SOCK_DCCP = 6,
-	SOCK_PACKET = 10,
-};
-
-enum {
-	IPPROTO_IP = 0,
-	IPPROTO_ICMP = 1,
-	IPPROTO_IGMP = 2,
-	IPPROTO_IPIP = 4,
-	IPPROTO_TCP = 6,
-	IPPROTO_EGP = 8,
-	IPPROTO_PUP = 12,
-	IPPROTO_UDP = 17,
-	IPPROTO_IDP = 22,
-	IPPROTO_TP = 29,
-	IPPROTO_DCCP = 33,
-	IPPROTO_IPV6 = 41,
-	IPPROTO_RSVP = 46,
-	IPPROTO_GRE = 47,
-	IPPROTO_ESP = 50,
-	IPPROTO_AH = 51,
-	IPPROTO_MTP = 92,
-	IPPROTO_BEETPH = 94,
-	IPPROTO_ENCAP = 98,
-	IPPROTO_PIM = 103,
-	IPPROTO_COMP = 108,
-	IPPROTO_SCTP = 132,
-	IPPROTO_UDPLITE = 136,
-	IPPROTO_MPLS = 137,
-	IPPROTO_ETHERNET = 143,
-	IPPROTO_RAW = 255,
-	IPPROTO_MPTCP = 262,
-	IPPROTO_MAX = 263,
-};
-
-enum sock_flags {
-	SOCK_DEAD = 0,
-	SOCK_DONE = 1,
-	SOCK_URGINLINE = 2,
-	SOCK_KEEPOPEN = 3,
-	SOCK_LINGER = 4,
-	SOCK_DESTROY = 5,
-	SOCK_BROADCAST = 6,
-	SOCK_TIMESTAMP = 7,
-	SOCK_ZAPPED = 8,
-	SOCK_USE_WRITE_QUEUE = 9,
-	SOCK_DBG = 10,
-	SOCK_RCVTSTAMP = 11,
-	SOCK_RCVTSTAMPNS = 12,
-	SOCK_LOCALROUTE = 13,
-	SOCK_MEMALLOC = 14,
-	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
-	SOCK_FASYNC = 16,
-	SOCK_RXQ_OVFL = 17,
-	SOCK_ZEROCOPY = 18,
-	SOCK_WIFI_STATUS = 19,
-	SOCK_NOFCS = 20,
-	SOCK_FILTER_LOCKED = 21,
-	SOCK_SELECT_ERR_QUEUE = 22,
-	SOCK_RCU_FREE = 23,
-	SOCK_TXTIME = 24,
-	SOCK_XDP = 25,
-	SOCK_TSTAMP_NEW = 26,
-};
-
-struct reuseport_array {
-	struct bpf_map map;
-	struct sock *ptrs[0];
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int);
 };
 
 enum bpf_struct_ops_state {
@@ -33971,14 +88588,40 @@
 
 struct bpf_struct_ops_map {
 	struct bpf_map map;
+	struct callback_head rcu;
 	const struct bpf_struct_ops *st_ops;
 	struct mutex lock;
-	struct bpf_prog **progs;
+	struct bpf_link **links;
 	void *image;
 	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct bpf_struct_ops_value kvalue;
 };
 
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct bpf_struct_ops_tcp_congestion_ops {
 	refcount_t refcnt;
 	enum bpf_struct_ops_state state;
@@ -33990,643 +88633,12 @@
 	long: 64;
 	long: 64;
 	struct tcp_congestion_ops data;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sembuf {
-	short unsigned int sem_num;
-	short int sem_op;
-	short int sem_flg;
-};
-
-enum key_need_perm {
-	KEY_NEED_UNSPECIFIED = 0,
-	KEY_NEED_VIEW = 1,
-	KEY_NEED_READ = 2,
-	KEY_NEED_WRITE = 3,
-	KEY_NEED_SEARCH = 4,
-	KEY_NEED_LINK = 5,
-	KEY_NEED_SETATTR = 6,
-	KEY_NEED_UNLINK = 7,
-	KEY_SYSADMIN_OVERRIDE = 8,
-	KEY_AUTHTOKEN_OVERRIDE = 9,
-	KEY_DEFER_PERM_CHECK = 10,
-};
-
-struct __key_reference_with_attributes;
-
-typedef struct __key_reference_with_attributes *key_ref_t;
-
-struct xfrm_sec_ctx {
-	__u8 ctx_doi;
-	__u8 ctx_alg;
-	__u16 ctx_len;
-	__u32 ctx_sid;
-	char ctx_str[0];
-};
-
-struct xfrm_user_sec_ctx {
-	__u16 len;
-	__u16 exttype;
-	__u8 ctx_alg;
-	__u8 ctx_doi;
-	__u16 ctx_len;
-};
-
-enum perf_branch_sample_type {
-	PERF_SAMPLE_BRANCH_USER = 1,
-	PERF_SAMPLE_BRANCH_KERNEL = 2,
-	PERF_SAMPLE_BRANCH_HV = 4,
-	PERF_SAMPLE_BRANCH_ANY = 8,
-	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
-	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
-	PERF_SAMPLE_BRANCH_IND_CALL = 64,
-	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
-	PERF_SAMPLE_BRANCH_IN_TX = 256,
-	PERF_SAMPLE_BRANCH_NO_TX = 512,
-	PERF_SAMPLE_BRANCH_COND = 1024,
-	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
-	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
-	PERF_SAMPLE_BRANCH_CALL = 8192,
-	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
-	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
-	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
-	PERF_SAMPLE_BRANCH_MAX = 262144,
-};
-
-enum perf_event_read_format {
-	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
-	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
-	PERF_FORMAT_ID = 4,
-	PERF_FORMAT_GROUP = 8,
-	PERF_FORMAT_MAX = 16,
-};
-
-enum perf_event_ioc_flags {
-	PERF_IOC_FLAG_GROUP = 1,
-};
-
-struct perf_event_header {
-	__u32 type;
-	__u16 misc;
-	__u16 size;
-};
-
-struct perf_ns_link_info {
-	__u64 dev;
-	__u64 ino;
 };
 
 enum {
-	NET_NS_INDEX = 0,
-	UTS_NS_INDEX = 1,
-	IPC_NS_INDEX = 2,
-	PID_NS_INDEX = 3,
-	USER_NS_INDEX = 4,
-	MNT_NS_INDEX = 5,
-	CGROUP_NS_INDEX = 6,
-	NR_NAMESPACES = 7,
-};
-
-enum perf_event_type {
-	PERF_RECORD_MMAP = 1,
-	PERF_RECORD_LOST = 2,
-	PERF_RECORD_COMM = 3,
-	PERF_RECORD_EXIT = 4,
-	PERF_RECORD_THROTTLE = 5,
-	PERF_RECORD_UNTHROTTLE = 6,
-	PERF_RECORD_FORK = 7,
-	PERF_RECORD_READ = 8,
-	PERF_RECORD_SAMPLE = 9,
-	PERF_RECORD_MMAP2 = 10,
-	PERF_RECORD_AUX = 11,
-	PERF_RECORD_ITRACE_START = 12,
-	PERF_RECORD_LOST_SAMPLES = 13,
-	PERF_RECORD_SWITCH = 14,
-	PERF_RECORD_SWITCH_CPU_WIDE = 15,
-	PERF_RECORD_NAMESPACES = 16,
-	PERF_RECORD_KSYMBOL = 17,
-	PERF_RECORD_BPF_EVENT = 18,
-	PERF_RECORD_CGROUP = 19,
-	PERF_RECORD_TEXT_POKE = 20,
-	PERF_RECORD_MAX = 21,
-};
-
-enum perf_addr_filter_action_t {
-	PERF_ADDR_FILTER_ACTION_STOP = 0,
-	PERF_ADDR_FILTER_ACTION_START = 1,
-	PERF_ADDR_FILTER_ACTION_FILTER = 2,
-};
-
-struct perf_addr_filter {
-	struct list_head entry;
-	struct path path;
-	long unsigned int offset;
-	long unsigned int size;
-	enum perf_addr_filter_action_t action;
-};
-
-struct swevent_hlist {
-	struct hlist_head heads[256];
-	struct callback_head callback_head;
-};
-
-struct pmu_event_list {
-	raw_spinlock_t lock;
-	struct list_head list;
-};
-
-struct perf_buffer {
-	refcount_t refcount;
-	struct callback_head callback_head;
-	int nr_pages;
-	int overwrite;
-	int paused;
-	atomic_t poll;
-	local_t head;
-	unsigned int nest;
-	local_t events;
-	local_t wakeup;
-	local_t lost;
-	long int watermark;
-	long int aux_watermark;
-	spinlock_t event_lock;
-	struct list_head event_list;
-	atomic_t mmap_count;
-	long unsigned int mmap_locked;
-	struct user_struct *mmap_user;
-	long int aux_head;
-	unsigned int aux_nest;
-	long int aux_wakeup;
-	long unsigned int aux_pgoff;
-	int aux_nr_pages;
-	int aux_overwrite;
-	atomic_t aux_mmap_count;
-	long unsigned int aux_mmap_locked;
-	void (*free_aux)(void *);
-	refcount_t aux_refcount;
-	int aux_in_sampling;
-	void **aux_pages;
-	void *aux_priv;
-	struct perf_event_mmap_page *user_page;
-	void *data_pages[0];
-};
-
-struct match_token {
-	int token;
-	const char *pattern;
-};
-
-enum {
-	MAX_OPT_ARGS = 3,
-};
-
-typedef struct {
-	char *from;
-	char *to;
-} substring_t;
-
-struct min_heap {
-	void *data;
-	int nr;
-	int size;
-};
-
-struct min_heap_callbacks {
-	int elem_size;
-	bool (*less)(const void *, const void *);
-	void (*swp)(void *, void *);
-};
-
-typedef int (*remote_function_f)(void *);
-
-struct remote_function_call {
-	struct task_struct *p;
-	remote_function_f func;
-	void *info;
-	int ret;
-};
-
-typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
-
-struct event_function_struct {
-	struct perf_event *event;
-	event_f func;
-	void *data;
-};
-
-enum event_type_t {
-	EVENT_FLEXIBLE = 1,
-	EVENT_PINNED = 2,
-	EVENT_TIME = 4,
-	EVENT_CPU = 8,
-	EVENT_ALL = 3,
-};
-
-struct stop_event_data {
-	struct perf_event *event;
-	unsigned int restart;
-};
-
-struct perf_read_data {
-	struct perf_event *event;
-	bool group;
-	int ret;
-};
-
-struct perf_read_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-typedef void perf_iterate_f(struct perf_event *, void *);
-
-struct remote_output {
-	struct perf_buffer *rb;
-	int err;
-};
-
-struct perf_task_event {
-	struct task_struct *task;
-	struct perf_event_context *task_ctx;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 ppid;
-		u32 tid;
-		u32 ptid;
-		u64 time;
-	} event_id;
-};
-
-struct perf_comm_event {
-	struct task_struct *task;
-	char *comm;
-	int comm_size;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-	} event_id;
-};
-
-struct perf_namespaces_event {
-	struct task_struct *task;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 nr_namespaces;
-		struct perf_ns_link_info link_info[7];
-	} event_id;
-};
-
-struct perf_cgroup_event {
-	char *path;
-	int path_size;
-	struct {
-		struct perf_event_header header;
-		u64 id;
-		char path[0];
-	} event_id;
-};
-
-struct perf_mmap_event {
-	struct vm_area_struct *vma;
-	const char *file_name;
-	int file_size;
-	int maj;
-	int min;
-	u64 ino;
-	u64 ino_generation;
-	u32 prot;
-	u32 flags;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 start;
-		u64 len;
-		u64 pgoff;
-	} event_id;
-};
-
-struct perf_switch_event {
-	struct task_struct *task;
-	struct task_struct *next_prev;
-	struct {
-		struct perf_event_header header;
-		u32 next_prev_pid;
-		u32 next_prev_tid;
-	} event_id;
-};
-
-struct perf_ksymbol_event {
-	const char *name;
-	int name_len;
-	struct {
-		struct perf_event_header header;
-		u64 addr;
-		u32 len;
-		u16 ksym_type;
-		u16 flags;
-	} event_id;
-};
-
-struct perf_bpf_event {
-	struct bpf_prog *prog;
-	struct {
-		struct perf_event_header header;
-		u16 type;
-		u16 flags;
-		u32 id;
-		u8 tag[8];
-	} event_id;
-};
-
-struct perf_text_poke_event {
-	const void *old_bytes;
-	const void *new_bytes;
-	size_t pad;
-	u16 old_len;
-	u16 new_len;
-	struct {
-		struct perf_event_header header;
-		u64 addr;
-	} event_id;
-};
-
-struct swevent_htable {
-	struct swevent_hlist *swevent_hlist;
-	struct mutex hlist_mutex;
-	int hlist_refcount;
-	int recursion[4];
-};
-
-enum perf_probe_config {
-	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
-	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
-	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
-};
-
-enum {
-	IF_ACT_NONE = 4294967295,
-	IF_ACT_FILTER = 0,
-	IF_ACT_START = 1,
-	IF_ACT_STOP = 2,
-	IF_SRC_FILE = 3,
-	IF_SRC_KERNEL = 4,
-	IF_SRC_FILEADDR = 5,
-	IF_SRC_KERNELADDR = 6,
-};
-
-enum {
-	IF_STATE_ACTION = 0,
-	IF_STATE_SOURCE = 1,
-	IF_STATE_END = 2,
-};
-
-struct perf_aux_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-struct perf_aux_event___2 {
-	struct perf_event_header header;
-	u64 offset;
-	u64 size;
-	u64 flags;
-};
-
-struct callchain_cpus_entries {
-	struct callback_head callback_head;
-	struct perf_callchain_entry *cpu_entries[0];
-};
-
-struct bp_cpuinfo {
-	unsigned int cpu_pinned;
-	unsigned int *tsk_pinned;
-	unsigned int flexible;
-};
-
-struct bp_busy_slots {
-	unsigned int pinned;
-	unsigned int flexible;
-};
-
-struct compact_control;
-
-struct capture_control {
-	struct compact_control *cc;
-	struct page *page;
-};
-
-typedef u32 uprobe_opcode_t;
-
-struct uprobe {
-	struct rb_node rb_node;
-	refcount_t ref;
-	struct rw_semaphore register_rwsem;
-	struct rw_semaphore consumer_rwsem;
-	struct list_head pending_list;
-	struct uprobe_consumer *consumers;
-	struct inode *inode;
-	loff_t offset;
-	loff_t ref_ctr_offset;
-	long unsigned int flags;
-	struct arch_uprobe arch;
-};
-
-struct xol_area {
-	wait_queue_head_t wq;
-	atomic_t slot_count;
-	long unsigned int *bitmap;
-	struct vm_special_mapping xol_mapping;
-	struct page *pages[2];
-	long unsigned int vaddr;
-};
-
-typedef long unsigned int vm_flags_t;
-
-struct page_vma_mapped_walk {
-	struct page *page;
-	struct vm_area_struct *vma;
-	long unsigned int address;
-	pmd_t *pmd;
-	pte_t *pte;
-	spinlock_t *ptl;
-	unsigned int flags;
-};
-
-struct compact_control {
-	struct list_head freepages;
-	struct list_head migratepages;
-	unsigned int nr_freepages;
-	unsigned int nr_migratepages;
-	long unsigned int free_pfn;
-	long unsigned int migrate_pfn;
-	long unsigned int fast_start_pfn;
-	struct zone *zone;
-	long unsigned int total_migrate_scanned;
-	long unsigned int total_free_scanned;
-	short unsigned int fast_search_fail;
-	short int search_order;
-	const gfp_t gfp_mask;
-	int order;
-	int migratetype;
-	const unsigned int alloc_flags;
-	const int highest_zoneidx;
-	enum migrate_mode mode;
-	bool ignore_skip_hint;
-	bool no_set_skip_hint;
-	bool ignore_block_suitable;
-	bool direct_compaction;
-	bool proactive_compaction;
-	bool whole_zone;
-	bool contended;
-	bool rescan;
-	bool alloc_contig;
-};
-
-struct delayed_uprobe {
-	struct list_head list;
-	struct uprobe *uprobe;
-	struct mm_struct *mm;
-};
-
-struct map_info {
-	struct map_info *next;
-	struct mm_struct *mm;
-	long unsigned int vaddr;
-};
-
-struct parallel_data;
-
-struct padata_priv {
-	struct list_head list;
-	struct parallel_data *pd;
-	int cb_cpu;
-	unsigned int seq_nr;
-	int info;
-	void (*parallel)(struct padata_priv *);
-	void (*serial)(struct padata_priv *);
-};
-
-struct padata_cpumask {
-	cpumask_var_t pcpu;
-	cpumask_var_t cbcpu;
-};
-
-struct padata_shell;
-
-struct padata_list;
-
-struct padata_serial_queue;
-
-struct parallel_data {
-	struct padata_shell *ps;
-	struct padata_list *reorder_list;
-	struct padata_serial_queue *squeue;
-	atomic_t refcnt;
-	unsigned int seq_nr;
-	unsigned int processed;
-	int cpu;
-	struct padata_cpumask cpumask;
-	struct work_struct reorder_work;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct padata_list {
-	struct list_head list;
-	spinlock_t lock;
-};
-
-struct padata_serial_queue {
-	struct padata_list serial;
-	struct work_struct work;
-	struct parallel_data *pd;
-};
-
-struct padata_instance;
-
-struct padata_shell {
-	struct padata_instance *pinst;
-	struct parallel_data *pd;
-	struct parallel_data *opd;
-	struct list_head list;
-};
-
-struct padata_instance {
-	struct hlist_node cpu_online_node;
-	struct hlist_node cpu_dead_node;
-	struct workqueue_struct *parallel_wq;
-	struct workqueue_struct *serial_wq;
-	struct list_head pslist;
-	struct padata_cpumask cpumask;
-	struct kobject kobj;
-	struct mutex lock;
-	u8 flags;
-};
-
-struct padata_mt_job {
-	void (*thread_fn)(long unsigned int, long unsigned int, void *);
-	void *fn_arg;
-	long unsigned int start;
-	long unsigned int size;
-	long unsigned int align;
-	long unsigned int min_chunk;
-	int max_threads;
-};
-
-struct padata_work {
-	struct work_struct pw_work;
-	struct list_head pw_list;
-	void *pw_data;
-};
-
-struct padata_mt_job_state {
-	spinlock_t lock;
-	struct completion completion;
-	struct padata_mt_job *job;
-	int nworks;
-	int nworks_fini;
-	long unsigned int chunk_size;
-};
-
-struct padata_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
-	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
-};
-
-struct static_key_mod {
-	struct static_key_mod *next;
-	struct jump_entry *entries;
-	struct module *mod;
-};
-
-struct static_key_deferred {
-	struct static_key key;
-	long unsigned int timeout;
-	struct delayed_work work;
+	BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0,
+	BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1,
+	__NR_BPF_STRUCT_OPS_TYPE = 2,
 };
 
 enum rseq_cpu_id_state {
@@ -34675,512 +88687,6 @@
 
 typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
 
-struct watch;
-
-struct watch_list {
-	struct callback_head rcu;
-	struct hlist_head watchers;
-	void (*release_watch)(struct watch *);
-	spinlock_t lock;
-};
-
-enum watch_notification_type {
-	WATCH_TYPE_META = 0,
-	WATCH_TYPE_KEY_NOTIFY = 1,
-	WATCH_TYPE__NR = 2,
-};
-
-enum watch_meta_notification_subtype {
-	WATCH_META_REMOVAL_NOTIFICATION = 0,
-	WATCH_META_LOSS_NOTIFICATION = 1,
-};
-
-struct watch_notification {
-	__u32 type: 24;
-	__u32 subtype: 8;
-	__u32 info;
-};
-
-struct watch_notification_type_filter {
-	__u32 type;
-	__u32 info_filter;
-	__u32 info_mask;
-	__u32 subtype_filter[8];
-};
-
-struct watch_notification_filter {
-	__u32 nr_filters;
-	__u32 __reserved;
-	struct watch_notification_type_filter filters[0];
-};
-
-struct watch_notification_removal {
-	struct watch_notification watch;
-	__u64 id;
-};
-
-struct watch_type_filter {
-	enum watch_notification_type type;
-	__u32 subtype_filter[1];
-	__u32 info_filter;
-	__u32 info_mask;
-};
-
-struct watch_filter {
-	union {
-		struct callback_head rcu;
-		long unsigned int type_filter[2];
-	};
-	u32 nr_filters;
-	struct watch_type_filter filters[0];
-};
-
-struct watch_queue {
-	struct callback_head rcu;
-	struct watch_filter *filter;
-	struct pipe_inode_info *pipe;
-	struct hlist_head watches;
-	struct page **notes;
-	long unsigned int *notes_bitmap;
-	struct kref usage;
-	spinlock_t lock;
-	unsigned int nr_notes;
-	unsigned int nr_pages;
-	bool defunct;
-};
-
-struct watch {
-	union {
-		struct callback_head rcu;
-		u32 info_id;
-	};
-	struct watch_queue *queue;
-	struct hlist_node queue_node;
-	struct watch_list *watch_list;
-	struct hlist_node list_node;
-	const struct cred *cred;
-	void *private;
-	u64 id;
-	struct kref usage;
-};
-
-struct pkcs7_message;
-
-typedef int __kernel_rwf_t;
-
-enum positive_aop_returns {
-	AOP_WRITEPAGE_ACTIVATE = 524288,
-	AOP_TRUNCATED_PAGE = 524289,
-};
-
-struct vm_event_state {
-	long unsigned int event[95];
-};
-
-enum iter_type {
-	ITER_IOVEC = 4,
-	ITER_KVEC = 8,
-	ITER_BVEC = 16,
-	ITER_PIPE = 32,
-	ITER_DISCARD = 64,
-};
-
-enum mapping_flags {
-	AS_EIO = 0,
-	AS_ENOSPC = 1,
-	AS_MM_ALL_LOCKS = 2,
-	AS_UNEVICTABLE = 3,
-	AS_EXITING = 4,
-	AS_NO_WRITEBACK_TAGS = 5,
-	AS_THP_SUPPORT = 6,
-};
-
-struct wait_page_key {
-	struct page *page;
-	int bit_nr;
-	int page_match;
-};
-
-struct pagevec {
-	unsigned char nr;
-	bool percpu_pvec_drained;
-	struct page *pages[15];
-};
-
-struct fid {
-	union {
-		struct {
-			u32 ino;
-			u32 gen;
-			u32 parent_ino;
-			u32 parent_gen;
-		} i32;
-		struct {
-			u32 block;
-			u16 partref;
-			u16 parent_partref;
-			u32 generation;
-			u32 parent_block;
-			u32 parent_generation;
-		} udf;
-		__u32 raw[0];
-	};
-};
-
-struct trace_event_raw_mm_filemap_op_page_cache {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	long unsigned int i_ino;
-	long unsigned int index;
-	dev_t s_dev;
-	char __data[0];
-};
-
-struct trace_event_raw_filemap_set_wb_err {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t errseq;
-	char __data[0];
-};
-
-struct trace_event_raw_file_check_and_advance_wb_err {
-	struct trace_entry ent;
-	struct file *file;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t old;
-	errseq_t new;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_filemap_op_page_cache {};
-
-struct trace_event_data_offsets_filemap_set_wb_err {};
-
-struct trace_event_data_offsets_file_check_and_advance_wb_err {};
-
-typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
-
-typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
-
-enum behavior {
-	EXCLUSIVE = 0,
-	SHARED = 1,
-	DROP = 2,
-};
-
-struct reciprocal_value {
-	u32 m;
-	u8 sh1;
-	u8 sh2;
-};
-
-struct array_cache;
-
-struct kmem_cache_node;
-
-struct kmem_cache {
-	struct array_cache *cpu_cache;
-	unsigned int batchcount;
-	unsigned int limit;
-	unsigned int shared;
-	unsigned int size;
-	struct reciprocal_value reciprocal_buffer_size;
-	slab_flags_t flags;
-	unsigned int num;
-	unsigned int gfporder;
-	gfp_t allocflags;
-	size_t colour;
-	unsigned int colour_off;
-	struct kmem_cache *freelist_cache;
-	unsigned int freelist_size;
-	void (*ctor)(void *);
-	const char *name;
-	struct list_head list;
-	int refcount;
-	int object_size;
-	int align;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct kmem_cache_node *node[128];
-};
-
-struct alien_cache;
-
-struct kmem_cache_node {
-	spinlock_t list_lock;
-	struct list_head slabs_partial;
-	struct list_head slabs_full;
-	struct list_head slabs_free;
-	long unsigned int total_slabs;
-	long unsigned int free_slabs;
-	long unsigned int free_objects;
-	unsigned int free_limit;
-	unsigned int colour_next;
-	struct array_cache *shared;
-	struct alien_cache **alien;
-	long unsigned int next_reap;
-	int free_touched;
-};
-
-enum oom_constraint {
-	CONSTRAINT_NONE = 0,
-	CONSTRAINT_CPUSET = 1,
-	CONSTRAINT_MEMORY_POLICY = 2,
-	CONSTRAINT_MEMCG = 3,
-};
-
-struct oom_control {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct mem_cgroup *memcg;
-	const gfp_t gfp_mask;
-	const int order;
-	long unsigned int totalpages;
-	struct task_struct *chosen;
-	long int chosen_points;
-	enum oom_constraint constraint;
-};
-
-struct mmu_table_batch {
-	struct callback_head rcu;
-	unsigned int nr;
-	void *tables[0];
-};
-
-struct mmu_gather_batch {
-	struct mmu_gather_batch *next;
-	unsigned int nr;
-	unsigned int max;
-	struct page *pages[0];
-};
-
-struct mmu_gather {
-	struct mm_struct *mm;
-	struct mmu_table_batch *batch;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int fullmm: 1;
-	unsigned int need_flush_all: 1;
-	unsigned int freed_tables: 1;
-	unsigned int cleared_ptes: 1;
-	unsigned int cleared_pmds: 1;
-	unsigned int cleared_puds: 1;
-	unsigned int cleared_p4ds: 1;
-	unsigned int vma_exec: 1;
-	unsigned int vma_huge: 1;
-	unsigned int batch_count;
-	struct mmu_gather_batch *active;
-	struct mmu_gather_batch local;
-	struct page *__pages[8];
-};
-
-enum compact_priority {
-	COMPACT_PRIO_SYNC_FULL = 0,
-	MIN_COMPACT_PRIORITY = 0,
-	COMPACT_PRIO_SYNC_LIGHT = 1,
-	MIN_COMPACT_COSTLY_PRIORITY = 1,
-	DEF_COMPACT_PRIORITY = 1,
-	COMPACT_PRIO_ASYNC = 2,
-	INIT_COMPACT_PRIORITY = 2,
-};
-
-enum compact_result {
-	COMPACT_NOT_SUITABLE_ZONE = 0,
-	COMPACT_SKIPPED = 1,
-	COMPACT_DEFERRED = 2,
-	COMPACT_NO_SUITABLE_PAGE = 3,
-	COMPACT_CONTINUE = 4,
-	COMPACT_COMPLETE = 5,
-	COMPACT_PARTIAL_SKIPPED = 6,
-	COMPACT_CONTENDED = 7,
-	COMPACT_SUCCESS = 8,
-};
-
-struct trace_event_raw_oom_score_adj_update {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_reclaim_retry_zone {
-	struct trace_entry ent;
-	int node;
-	int zone_idx;
-	int order;
-	long unsigned int reclaimable;
-	long unsigned int available;
-	long unsigned int min_wmark;
-	int no_progress_loops;
-	bool wmark_check;
-	char __data[0];
-};
-
-struct trace_event_raw_mark_victim {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_wake_reaper {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_start_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_finish_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_skip_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_compact_retry {
-	struct trace_entry ent;
-	int order;
-	int priority;
-	int result;
-	int retries;
-	int max_retries;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_oom_score_adj_update {};
-
-struct trace_event_data_offsets_reclaim_retry_zone {};
-
-struct trace_event_data_offsets_mark_victim {};
-
-struct trace_event_data_offsets_wake_reaper {};
-
-struct trace_event_data_offsets_start_task_reaping {};
-
-struct trace_event_data_offsets_finish_task_reaping {};
-
-struct trace_event_data_offsets_skip_task_reaping {};
-
-struct trace_event_data_offsets_compact_retry {};
-
-typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
-
-typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
-
-typedef void (*btf_trace_mark_victim)(void *, int);
-
-typedef void (*btf_trace_wake_reaper)(void *, int);
-
-typedef void (*btf_trace_start_task_reaping)(void *, int);
-
-typedef void (*btf_trace_finish_task_reaping)(void *, int);
-
-typedef void (*btf_trace_skip_task_reaping)(void *, int);
-
-typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
-
-enum wb_congested_state {
-	WB_async_congested = 0,
-	WB_sync_congested = 1,
-};
-
-enum {
-	XA_CHECK_SCHED = 4096,
-};
-
-enum wb_state {
-	WB_registered = 0,
-	WB_writeback_running = 1,
-	WB_has_dirty_io = 2,
-	WB_start_all = 3,
-};
-
-enum {
-	BLK_RW_ASYNC = 0,
-	BLK_RW_SYNC = 1,
-};
-
-struct wb_lock_cookie {
-	bool locked;
-	long unsigned int flags;
-};
-
-typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
-
-struct dirty_throttle_control {
-	struct wb_domain *dom;
-	struct dirty_throttle_control *gdtc;
-	struct bdi_writeback *wb;
-	struct fprop_local_percpu *wb_completions;
-	long unsigned int avail;
-	long unsigned int dirty;
-	long unsigned int thresh;
-	long unsigned int bg_thresh;
-	long unsigned int wb_dirty;
-	long unsigned int wb_thresh;
-	long unsigned int wb_bg_thresh;
-	long unsigned int pos_ratio;
-};
-
-typedef void compound_page_dtor(struct page *);
-
-typedef struct {} local_lock_t;
-
-struct trace_event_raw_mm_lru_insertion {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	int lru;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_lru_activate {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_lru_insertion {};
-
-struct trace_event_data_offsets_mm_lru_activate {};
-
-typedef void (*btf_trace_mm_lru_insertion)(void *, struct page *, int);
-
-typedef void (*btf_trace_mm_lru_activate)(void *, struct page *);
-
-struct lru_rotate {
-	local_lock_t lock;
-	struct pagevec pvec;
-};
-
-struct lru_pvecs {
-	local_lock_t lock;
-	struct pagevec lru_add;
-	struct pagevec lru_deactivate_file;
-	struct pagevec lru_deactivate;
-	struct pagevec lru_lazyfree;
-	struct pagevec activate_page;
-};
-
 enum lruvec_flags {
 	LRUVEC_CONGESTED = 0,
 };
@@ -35191,6 +88697,16 @@
 	PGDAT_RECLAIM_LOCKED = 2,
 };
 
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
 struct reclaim_stat {
 	unsigned int nr_dirty;
 	unsigned int nr_unqueued_dirty;
@@ -35204,15 +88720,26 @@
 	unsigned int nr_lazyfree_fail;
 };
 
-enum ttu_flags {
-	TTU_MIGRATION = 1,
-	TTU_MUNLOCK = 2,
-	TTU_SPLIT_HUGE_PMD = 4,
-	TTU_IGNORE_MLOCK = 8,
-	TTU_IGNORE_HWPOISON = 32,
-	TTU_BATCH_FLUSH = 64,
-	TTU_RMAP_LOCKED = 128,
-	TTU_SPLIT_FREEZE = 256,
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
 };
 
 struct trace_event_raw_mm_vmscan_kswapd_sleep {
@@ -35234,14 +88761,14 @@
 	int nid;
 	int zid;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
 struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
 	struct trace_entry ent;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
@@ -35257,7 +88784,7 @@
 	void *shrink;
 	int nid;
 	long int nr_objects_to_shrink;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	long unsigned int cache_items;
 	long long unsigned int delta;
 	long unsigned int total_scan;
@@ -35285,12 +88812,12 @@
 	long unsigned int nr_scanned;
 	long unsigned int nr_skipped;
 	long unsigned int nr_taken;
-	isolate_mode_t isolate_mode;
+	unsigned int isolate_mode;
 	int lru;
 	char __data[0];
 };
 
-struct trace_event_raw_mm_vmscan_writepage {
+struct trace_event_raw_mm_vmscan_write_folio {
 	struct trace_entry ent;
 	long unsigned int pfn;
 	int reclaim_flags;
@@ -35327,24 +88854,20 @@
 	char __data[0];
 };
 
-struct trace_event_raw_mm_vmscan_inactive_list_is_low {
-	struct trace_entry ent;
-	int nid;
-	int reclaim_idx;
-	long unsigned int total_inactive;
-	long unsigned int inactive;
-	long unsigned int total_active;
-	long unsigned int active;
-	long unsigned int ratio;
-	int reclaim_flags;
-	char __data[0];
-};
-
 struct trace_event_raw_mm_vmscan_node_reclaim_begin {
 	struct trace_entry ent;
 	int nid;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
 	char __data[0];
 };
 
@@ -35364,16 +88887,16 @@
 
 struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
 
-struct trace_event_data_offsets_mm_vmscan_writepage {};
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
 
 struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
 
 struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
 
-struct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};
-
 struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
 
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
 typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
 
 typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
@@ -35398,18 +88921,18 @@
 
 typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
 
-typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *);
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
 
 typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
 
 typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
 
-typedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
-
 typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
 
 typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
 
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
 struct scan_control {
 	long unsigned int nr_to_reclaim;
 	nodemask_t *nodemask;
@@ -35422,12 +88945,14 @@
 	unsigned int may_writepage: 1;
 	unsigned int may_unmap: 1;
 	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
 	unsigned int memcg_low_reclaim: 1;
 	unsigned int memcg_low_skipped: 1;
 	unsigned int hibernation_mode: 1;
 	unsigned int compaction_ready: 1;
 	unsigned int cache_trim_mode: 1;
 	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
 	s8 order;
 	s8 priority;
 	s8 reclaim_idx;
@@ -35467,851 +88992,54 @@
 	SCAN_FILE = 3,
 };
 
-enum transparent_hugepage_flag {
-	TRANSPARENT_HUGEPAGE_FLAG = 0,
-	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 1,
-	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 2,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 3,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 4,
-	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 5,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 6,
-	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 7,
-};
-
-struct xattr {
-	const char *name;
-	void *value;
-	size_t value_len;
-};
-
-struct constant_table {
-	const char *name;
-	int value;
-};
-
-enum {
-	MPOL_DEFAULT = 0,
-	MPOL_PREFERRED = 1,
-	MPOL_BIND = 2,
-	MPOL_INTERLEAVE = 3,
-	MPOL_LOCAL = 4,
-	MPOL_MAX = 5,
-};
-
-struct shared_policy {
-	struct rb_root root;
-	rwlock_t lock;
-};
-
-struct simple_xattrs {
-	struct list_head head;
-	spinlock_t lock;
-};
-
-struct simple_xattr {
-	struct list_head list;
-	char *name;
-	size_t size;
-	char value[0];
-};
-
-enum fid_type {
-	FILEID_ROOT = 0,
-	FILEID_INO32_GEN = 1,
-	FILEID_INO32_GEN_PARENT = 2,
-	FILEID_BTRFS_WITHOUT_PARENT = 77,
-	FILEID_BTRFS_WITH_PARENT = 78,
-	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
-	FILEID_UDF_WITHOUT_PARENT = 81,
-	FILEID_UDF_WITH_PARENT = 82,
-	FILEID_NILFS_WITHOUT_PARENT = 97,
-	FILEID_NILFS_WITH_PARENT = 98,
-	FILEID_FAT_WITHOUT_PARENT = 113,
-	FILEID_FAT_WITH_PARENT = 114,
-	FILEID_LUSTRE = 151,
-	FILEID_KERNFS = 254,
-	FILEID_INVALID = 255,
-};
-
-struct shmem_inode_info {
-	spinlock_t lock;
-	unsigned int seals;
-	long unsigned int flags;
-	long unsigned int alloced;
-	long unsigned int swapped;
-	struct list_head shrinklist;
-	struct list_head swaplist;
-	struct shared_policy policy;
-	struct simple_xattrs xattrs;
-	atomic_t stop_eviction;
-	struct inode vfs_inode;
-};
-
-struct shmem_sb_info {
-	long unsigned int max_blocks;
-	struct percpu_counter used_blocks;
-	long unsigned int max_inodes;
-	long unsigned int free_inodes;
-	spinlock_t stat_lock;
-	umode_t mode;
-	unsigned char huge;
-	kuid_t uid;
-	kgid_t gid;
-	bool full_inums;
-	ino_t next_ino;
-	ino_t *ino_batch;
-	struct mempolicy *mpol;
-	spinlock_t shrinklist_lock;
-	struct list_head shrinklist;
-	long unsigned int shrinklist_len;
-};
-
-enum sgp_type {
-	SGP_READ = 0,
-	SGP_CACHE = 1,
-	SGP_NOHUGE = 2,
-	SGP_HUGE = 3,
-	SGP_WRITE = 4,
-	SGP_FALLOC = 5,
-};
-
-struct shmem_falloc {
-	wait_queue_head_t *waitq;
-	long unsigned int start;
-	long unsigned int next;
-	long unsigned int nr_falloced;
-	long unsigned int nr_unswapped;
-};
-
-struct shmem_options {
-	long long unsigned int blocks;
-	long long unsigned int inodes;
-	struct mempolicy *mpol;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-	bool full_inums;
-	int huge;
-	int seen;
-};
-
-enum shmem_param {
-	Opt_gid = 0,
-	Opt_huge = 1,
-	Opt_mode = 2,
-	Opt_mpol = 3,
-	Opt_nr_blocks = 4,
-	Opt_nr_inodes = 5,
-	Opt_size = 6,
-	Opt_uid = 7,
-	Opt_inode32 = 8,
-	Opt_inode64 = 9,
-};
-
-enum writeback_stat_item {
-	NR_DIRTY_THRESHOLD = 0,
-	NR_DIRTY_BG_THRESHOLD = 1,
-	NR_VM_WRITEBACK_STAT_ITEMS = 2,
-};
-
-struct contig_page_info {
-	long unsigned int free_pages;
-	long unsigned int free_blocks_total;
-	long unsigned int free_blocks_suitable;
-};
-
-struct radix_tree_iter {
-	long unsigned int index;
-	long unsigned int next_index;
-	long unsigned int tags;
-	struct xa_node *node;
-};
-
-enum {
-	RADIX_TREE_ITER_TAG_MASK = 15,
-	RADIX_TREE_ITER_TAGGED = 16,
-	RADIX_TREE_ITER_CONTIG = 32,
-};
-
-enum mminit_level {
-	MMINIT_WARNING = 0,
-	MMINIT_VERIFY = 1,
-	MMINIT_TRACE = 2,
-};
-
-struct pcpu_group_info {
-	int nr_units;
-	long unsigned int base_offset;
-	unsigned int *cpu_map;
-};
-
-struct pcpu_alloc_info {
-	size_t static_size;
-	size_t reserved_size;
-	size_t dyn_size;
-	size_t unit_size;
-	size_t atom_size;
-	size_t alloc_size;
-	size_t __ai_size;
-	int nr_groups;
-	struct pcpu_group_info groups[0];
-};
-
-typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);
-
-typedef void (*pcpu_fc_free_fn_t)(void *, size_t);
-
-typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
-
-struct trace_event_raw_percpu_alloc_percpu {
+struct trace_event_raw_mmap_lock {
 	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_free_percpu {
-	struct trace_entry ent;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_alloc_percpu_fail {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_create_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_destroy_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_percpu_alloc_percpu {};
-
-struct trace_event_data_offsets_percpu_free_percpu {};
-
-struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
-
-struct trace_event_data_offsets_percpu_create_chunk {};
-
-struct trace_event_data_offsets_percpu_destroy_chunk {};
-
-typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);
-
-typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
-
-typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
-
-typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
-
-typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
-
-enum pcpu_chunk_type {
-	PCPU_CHUNK_ROOT = 0,
-	PCPU_CHUNK_MEMCG = 1,
-	PCPU_NR_CHUNK_TYPES = 2,
-	PCPU_FAIL_ALLOC = 2,
-};
-
-struct pcpu_block_md {
-	int scan_hint;
-	int scan_hint_start;
-	int contig_hint;
-	int contig_hint_start;
-	int left_free;
-	int right_free;
-	int first_free;
-	int nr_bits;
-};
-
-struct pcpu_chunk {
-	struct list_head list;
-	int free_bytes;
-	struct pcpu_block_md chunk_md;
-	void *base_addr;
-	long unsigned int *alloc_map;
-	long unsigned int *bound_map;
-	struct pcpu_block_md *md_blocks;
-	void *data;
-	bool immutable;
-	int start_offset;
-	int end_offset;
-	struct obj_cgroup **obj_cgroups;
-	int nr_pages;
-	int nr_populated;
-	int nr_empty_pop_pages;
-	long unsigned int populated[0];
-};
-
-struct trace_event_raw_kmem_alloc {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_alloc_node {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	int node;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_free {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free_batched {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	gfp_t gfp_flags;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_pcpu_drain {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc_extfrag {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int alloc_order;
-	int fallback_order;
-	int alloc_migratetype;
-	int fallback_migratetype;
-	int change_ownership;
-	char __data[0];
-};
-
-struct trace_event_raw_rss_stat {
-	struct trace_entry ent;
-	unsigned int mm_id;
-	unsigned int curr;
-	int member;
-	long int size;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kmem_alloc {};
-
-struct trace_event_data_offsets_kmem_alloc_node {};
-
-struct trace_event_data_offsets_kmem_free {};
-
-struct trace_event_data_offsets_mm_page_free {};
-
-struct trace_event_data_offsets_mm_page_free_batched {};
-
-struct trace_event_data_offsets_mm_page_alloc {};
-
-struct trace_event_data_offsets_mm_page {};
-
-struct trace_event_data_offsets_mm_page_pcpu_drain {};
-
-struct trace_event_data_offsets_mm_page_alloc_extfrag {};
-
-struct trace_event_data_offsets_rss_stat {};
-
-typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
-
-typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
-
-typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
-
-typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
-
-typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);
-
-enum slab_state {
-	DOWN = 0,
-	PARTIAL = 1,
-	PARTIAL_NODE = 2,
-	UP = 3,
-	FULL = 4,
-};
-
-struct kmalloc_info_struct {
-	const char *name[3];
-	unsigned int size;
-};
-
-struct slabinfo {
-	long unsigned int active_objs;
-	long unsigned int num_objs;
-	long unsigned int active_slabs;
-	long unsigned int num_slabs;
-	long unsigned int shared_avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int shared;
-	unsigned int objects_per_slab;
-	unsigned int cache_order;
-};
-
-enum pageblock_bits {
-	PB_migrate = 0,
-	PB_migrate_end = 2,
-	PB_migrate_skip = 3,
-	NR_PAGEBLOCK_BITS = 4,
-};
-
-struct node___2 {
-	struct device dev;
-	struct list_head access_list;
-	struct work_struct node_work;
-	struct list_head cache_attrs;
-	struct device *cache_dev;
-};
-
-struct alloc_context {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct zoneref *preferred_zoneref;
-	int migratetype;
-	enum zone_type highest_zoneidx;
-	bool spread_dirty_pages;
-};
-
-struct trace_event_raw_mm_compaction_isolate_template {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int nr_scanned;
-	long unsigned int nr_taken;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_migratepages {
-	struct trace_entry ent;
-	long unsigned int nr_migrated;
-	long unsigned int nr_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_begin {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_end {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_try_to_compact_pages {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_mask;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_suitable_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_defer_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	unsigned int considered;
-	unsigned int defer_shift;
-	int order_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_kcompactd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_kcompactd_wake_template {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	enum zone_type highest_zoneidx;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_compaction_isolate_template {};
-
-struct trace_event_data_offsets_mm_compaction_migratepages {};
-
-struct trace_event_data_offsets_mm_compaction_begin {};
-
-struct trace_event_data_offsets_mm_compaction_end {};
-
-struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
-
-struct trace_event_data_offsets_mm_compaction_suitable_template {};
-
-struct trace_event_data_offsets_mm_compaction_defer_template {};
-
-struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
-
-struct trace_event_data_offsets_kcompactd_wake_template {};
-
-typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);
-
-typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);
-
-typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);
-
-typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
-
-typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
-
-typedef enum {
-	ISOLATE_ABORT = 0,
-	ISOLATE_NONE = 1,
-	ISOLATE_SUCCESS = 2,
-} isolate_migrate_t;
-
-struct anon_vma_chain {
-	struct vm_area_struct *vma;
-	struct anon_vma *anon_vma;
-	struct list_head same_vma;
-	struct rb_node rb;
-	long unsigned int rb_subtree_last;
-};
-
-struct rb_augment_callbacks {
-	void (*propagate)(struct rb_node *, struct rb_node *);
-	void (*copy)(struct rb_node *, struct rb_node *);
-	void (*rotate)(struct rb_node *, struct rb_node *);
-};
-
-enum lru_status {
-	LRU_REMOVED = 0,
-	LRU_REMOVED_RETRY = 1,
-	LRU_ROTATE = 2,
-	LRU_SKIP = 3,
-	LRU_RETRY = 4,
-};
-
-typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
-
-typedef struct {
-	long unsigned int pd;
-} hugepd_t;
-
-struct migration_target_control {
-	int nid;
-	nodemask_t *nmask;
-	gfp_t gfp_mask;
-};
-
-struct follow_page_context {
-	struct dev_pagemap *pgmap;
-	unsigned int page_mask;
-};
-
-typedef struct {
-	u64 val;
-} pfn_t;
-
-typedef unsigned int pgtbl_mod_mask;
-
-struct zap_details {
-	struct address_space *check_mapping;
-	long unsigned int first_index;
-	long unsigned int last_index;
-};
-
-typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
-
-enum {
-	SWP_USED = 1,
-	SWP_WRITEOK = 2,
-	SWP_DISCARDABLE = 4,
-	SWP_DISCARDING = 8,
-	SWP_SOLIDSTATE = 16,
-	SWP_CONTINUED = 32,
-	SWP_BLKDEV = 64,
-	SWP_ACTIVATED = 128,
-	SWP_FS_OPS = 256,
-	SWP_AREA_DISCARD = 512,
-	SWP_PAGE_DISCARD = 1024,
-	SWP_STABLE_WRITES = 2048,
-	SWP_SYNCHRONOUS_IO = 4096,
-	SWP_VALID = 8192,
-	SWP_SCANNING = 16384,
-};
-
-struct copy_subpage_arg {
-	struct page *dst;
-	struct page *src;
-	struct vm_area_struct *vma;
-};
-
-struct mm_walk;
-
-struct mm_walk_ops {
-	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
-	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
-	void (*post_vma)(struct mm_walk *);
-};
-
-enum page_walk_action {
-	ACTION_SUBTREE = 0,
-	ACTION_CONTINUE = 1,
-	ACTION_AGAIN = 2,
-};
-
-struct mm_walk {
-	const struct mm_walk_ops *ops;
 	struct mm_struct *mm;
-	pgd_t *pgd;
-	struct vm_area_struct *vma;
-	enum page_walk_action action;
-	bool no_vma;
-	void *private;
-};
-
-struct vm_unmapped_area_info {
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
-};
-
-enum {
-	HUGETLB_SHMFS_INODE = 1,
-	HUGETLB_ANONHUGE_INODE = 2,
-};
-
-struct trace_event_raw_vm_unmapped_area {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int total_vm;
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
+	u32 __data_loc_memcg_path;
+	bool write;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_vm_unmapped_area {};
-
-typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
-
-struct rmap_walk_control {
-	void *arg;
-	bool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *);
-	int (*done)(struct page *);
-	struct anon_vma * (*anon_lock)(struct page *);
-	bool (*invalid_vma)(struct vm_area_struct *, void *);
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
 };
 
-struct page_referenced_arg {
-	int mapcount;
-	int referenced;
-	long unsigned int vm_flags;
-	struct mem_cgroup *memcg;
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
 };
 
-struct vmap_area {
-	long unsigned int va_start;
-	long unsigned int va_end;
-	struct rb_node rb_node;
-	struct list_head list;
-	union {
-		long unsigned int subtree_max_size;
-		struct vm_struct *vm;
-		struct llist_node purge_list;
-	};
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
 };
 
-struct vfree_deferred {
-	struct llist_head list;
-	struct work_struct wq;
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char *buf;
+	local_t buf_idx;
 };
 
-enum fit_type {
-	NOTHING_FIT = 0,
-	FL_FIT_TYPE = 1,
-	LE_FIT_TYPE = 2,
-	RE_FIT_TYPE = 3,
-	NE_FIT_TYPE = 4,
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
 };
 
-struct vmap_block_queue {
-	spinlock_t lock;
-	struct list_head free;
-};
-
-struct vmap_block {
-	spinlock_t lock;
-	struct vmap_area *va;
-	long unsigned int free;
-	long unsigned int dirty;
-	long unsigned int dirty_min;
-	long unsigned int dirty_max;
-	struct list_head free_list;
-	struct callback_head callback_head;
-	struct list_head purge;
-};
-
-struct page_frag_cache {
-	void *va;
-	__u16 offset;
-	__u16 size;
-	unsigned int pagecnt_bias;
-	bool pfmemalloc;
-};
-
-enum zone_flags {
-	ZONE_BOOSTED_WATERMARK = 0,
-};
-
-struct mminit_pfnnid_cache {
-	long unsigned int last_start;
-	long unsigned int last_end;
-	int last_nid;
-};
-
-typedef int fpi_t;
-
-struct pcpu_drain {
-	struct zone *zone;
-	struct work_struct work;
-};
-
-enum mf_flags {
-	MF_COUNT_INCREASED = 1,
-	MF_ACTION_REQUIRED = 2,
-	MF_MUST_KILL = 4,
-	MF_SOFT_OFFLINE = 8,
-};
-
-struct madvise_walk_private {
-	struct mmu_gather *tlb;
-	bool pageout;
-};
-
-struct vma_swap_readahead {
-	short unsigned int win;
-	short unsigned int offset;
-	short unsigned int nr_pte;
-	pte_t *ptes;
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
 };
 
 union swap_header {
@@ -36338,215 +89066,6 @@
 	sector_t start_block;
 };
 
-struct swap_slots_cache {
-	bool lock_initialized;
-	struct mutex alloc_lock;
-	swp_entry_t *slots;
-	int nr;
-	int cur;
-	spinlock_t free_lock;
-	swp_entry_t *slots_ret;
-	int n_ret;
-};
-
-struct frontswap_ops {
-	void (*init)(unsigned int);
-	int (*store)(unsigned int, long unsigned int, struct page *);
-	int (*load)(unsigned int, long unsigned int, struct page *);
-	void (*invalidate_page)(unsigned int, long unsigned int);
-	void (*invalidate_area)(unsigned int);
-	struct frontswap_ops *next;
-};
-
-struct crypto_comp {
-	struct crypto_tfm base;
-};
-
-struct zpool;
-
-struct zpool_ops {
-	int (*evict)(struct zpool *, long unsigned int);
-};
-
-enum zpool_mapmode {
-	ZPOOL_MM_RW = 0,
-	ZPOOL_MM_RO = 1,
-	ZPOOL_MM_WO = 2,
-	ZPOOL_MM_DEFAULT = 0,
-};
-
-struct zswap_pool {
-	struct zpool *zpool;
-	struct crypto_comp **tfm;
-	struct kref kref;
-	struct list_head list;
-	struct work_struct release_work;
-	struct work_struct shrink_work;
-	struct hlist_node node;
-	char tfm_name[128];
-};
-
-struct zswap_entry {
-	struct rb_node rbnode;
-	long unsigned int offset;
-	int refcount;
-	unsigned int length;
-	struct zswap_pool *pool;
-	union {
-		long unsigned int handle;
-		long unsigned int value;
-	};
-};
-
-struct zswap_header {
-	swp_entry_t swpentry;
-};
-
-struct zswap_tree {
-	struct rb_root rbroot;
-	spinlock_t lock;
-};
-
-enum zswap_get_swap_ret {
-	ZSWAP_SWAPCACHE_NEW = 0,
-	ZSWAP_SWAPCACHE_EXIST = 1,
-	ZSWAP_SWAPCACHE_FAIL = 2,
-};
-
-struct dma_pool {
-	struct list_head page_list;
-	spinlock_t lock;
-	size_t size;
-	struct device *dev;
-	size_t allocation;
-	size_t boundary;
-	char name[32];
-	struct list_head pools;
-};
-
-struct dma_page {
-	struct list_head page_list;
-	void *vaddr;
-	dma_addr_t dma;
-	unsigned int in_use;
-	unsigned int offset;
-};
-
-enum string_size_units {
-	STRING_UNITS_10 = 0,
-	STRING_UNITS_2 = 1,
-};
-
-struct resv_map {
-	struct kref refs;
-	spinlock_t lock;
-	struct list_head regions;
-	long int adds_in_progress;
-	struct list_head region_cache;
-	long int region_cache_count;
-	struct page_counter *reservation_counter;
-	long unsigned int pages_per_hpage;
-	struct cgroup_subsys_state *css;
-};
-
-struct file_region {
-	struct list_head link;
-	long int from;
-	long int to;
-	struct page_counter *reservation_counter;
-	struct cgroup_subsys_state *css;
-};
-
-struct huge_bootmem_page {
-	struct list_head list;
-	struct hstate *hstate;
-};
-
-enum hugetlb_memory_event {
-	HUGETLB_MAX = 0,
-	HUGETLB_NR_MEMORY_EVENTS = 1,
-};
-
-struct hugetlb_cgroup {
-	struct cgroup_subsys_state css;
-	struct page_counter hugepage[4];
-	struct page_counter rsvd_hugepage[4];
-	atomic_long_t events[4];
-	atomic_long_t events_local[4];
-	struct cgroup_file events_file[4];
-	struct cgroup_file events_local_file[4];
-};
-
-enum vma_resv_mode {
-	VMA_NEEDS_RESV = 0,
-	VMA_COMMIT_RESV = 1,
-	VMA_END_RESV = 2,
-	VMA_ADD_RESV = 3,
-};
-
-struct node_hstate {
-	struct kobject *hugepages_kobj;
-	struct kobject *hstate_kobjs[4];
-};
-
-struct nodemask_scratch {
-	nodemask_t mask1;
-	nodemask_t mask2;
-};
-
-struct sp_node {
-	struct rb_node nd;
-	long unsigned int start;
-	long unsigned int end;
-	struct mempolicy *policy;
-};
-
-struct mempolicy_operations {
-	int (*create)(struct mempolicy *, const nodemask_t *);
-	void (*rebind)(struct mempolicy *, const nodemask_t *);
-};
-
-struct queue_pages {
-	struct list_head *pagelist;
-	long unsigned int flags;
-	nodemask_t *nmask;
-	long unsigned int start;
-	long unsigned int end;
-	struct vm_area_struct *first;
-};
-
-struct mmu_notifier_subscriptions {
-	struct hlist_head list;
-	bool has_itree;
-	spinlock_t lock;
-	long unsigned int invalidate_seq;
-	long unsigned int active_invalidate_ranges;
-	struct rb_root_cached itree;
-	wait_queue_head_t wq;
-	struct hlist_head deferred_list;
-};
-
-struct interval_tree_node {
-	struct rb_node rb;
-	long unsigned int start;
-	long unsigned int last;
-	long unsigned int __subtree_last;
-};
-
-struct mmu_interval_notifier;
-
-struct mmu_interval_notifier_ops {
-	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
-};
-
-struct mmu_interval_notifier {
-	struct interval_tree_node interval_tree;
-	const struct mmu_interval_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct hlist_node deferred_item;
-	long unsigned int invalidate_seq;
-};
-
 struct rmap_item;
 
 struct mm_slot {
@@ -36609,342 +89128,6 @@
 	GET_KSM_PAGE_TRYLOCK = 2,
 };
 
-struct array_cache {
-	unsigned int avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int touched;
-	void *entry[0];
-};
-
-struct alien_cache {
-	spinlock_t lock;
-	struct array_cache ac;
-};
-
-typedef unsigned char freelist_idx_t;
-
-enum {
-	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
-	SECTION_INFO = 12,
-	MIX_SECTION_INFO = 13,
-	NODE_INFO = 14,
-	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
-};
-
-enum {
-	MMOP_OFFLINE = 0,
-	MMOP_ONLINE = 1,
-	MMOP_ONLINE_KERNEL = 2,
-	MMOP_ONLINE_MOVABLE = 3,
-};
-
-typedef int mhp_t;
-
-typedef void (*online_page_callback_t)(struct page *, unsigned int);
-
-struct memory_block {
-	long unsigned int start_section_nr;
-	long unsigned int state;
-	int online_type;
-	int phys_device;
-	struct device dev;
-	int nid;
-};
-
-struct buffer_head;
-
-typedef void bh_end_io_t(struct buffer_head *, int);
-
-struct buffer_head {
-	long unsigned int b_state;
-	struct buffer_head *b_this_page;
-	struct page *b_page;
-	sector_t b_blocknr;
-	size_t b_size;
-	char *b_data;
-	struct block_device *b_bdev;
-	bh_end_io_t *b_end_io;
-	void *b_private;
-	struct list_head b_assoc_buffers;
-	struct address_space *b_assoc_map;
-	atomic_t b_count;
-	spinlock_t b_uptodate_lock;
-};
-
-typedef struct page *new_page_t(struct page *, long unsigned int);
-
-typedef void free_page_t(struct page *, long unsigned int);
-
-enum bh_state_bits {
-	BH_Uptodate = 0,
-	BH_Dirty = 1,
-	BH_Lock = 2,
-	BH_Req = 3,
-	BH_Mapped = 4,
-	BH_New = 5,
-	BH_Async_Read = 6,
-	BH_Async_Write = 7,
-	BH_Delay = 8,
-	BH_Boundary = 9,
-	BH_Write_EIO = 10,
-	BH_Unwritten = 11,
-	BH_Quiet = 12,
-	BH_Meta = 13,
-	BH_Prio = 14,
-	BH_Defer_Completion = 15,
-	BH_PrivateStart = 16,
-};
-
-struct trace_event_raw_mm_migrate_pages {
-	struct trace_entry ent;
-	long unsigned int succeeded;
-	long unsigned int failed;
-	long unsigned int thp_succeeded;
-	long unsigned int thp_failed;
-	long unsigned int thp_split;
-	enum migrate_mode mode;
-	int reason;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_migrate_pages {};
-
-typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
-
-enum scan_result {
-	SCAN_FAIL = 0,
-	SCAN_SUCCEED = 1,
-	SCAN_PMD_NULL = 2,
-	SCAN_EXCEED_NONE_PTE = 3,
-	SCAN_EXCEED_SWAP_PTE = 4,
-	SCAN_EXCEED_SHARED_PTE = 5,
-	SCAN_PTE_NON_PRESENT = 6,
-	SCAN_PTE_UFFD_WP = 7,
-	SCAN_PAGE_RO = 8,
-	SCAN_LACK_REFERENCED_PAGE = 9,
-	SCAN_PAGE_NULL = 10,
-	SCAN_SCAN_ABORT = 11,
-	SCAN_PAGE_COUNT = 12,
-	SCAN_PAGE_LRU = 13,
-	SCAN_PAGE_LOCK = 14,
-	SCAN_PAGE_ANON = 15,
-	SCAN_PAGE_COMPOUND = 16,
-	SCAN_ANY_PROCESS = 17,
-	SCAN_VMA_NULL = 18,
-	SCAN_VMA_CHECK = 19,
-	SCAN_ADDRESS_RANGE = 20,
-	SCAN_SWAP_CACHE_PAGE = 21,
-	SCAN_DEL_PAGE_LRU = 22,
-	SCAN_ALLOC_HUGE_PAGE_FAIL = 23,
-	SCAN_CGROUP_CHARGE_FAIL = 24,
-	SCAN_TRUNCATED = 25,
-	SCAN_PAGE_HAS_PRIVATE = 26,
-};
-
-struct trace_event_raw_mm_khugepaged_scan_pmd {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	long unsigned int pfn;
-	bool writable;
-	int referenced;
-	int none_or_zero;
-	int status;
-	int unmapped;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	int isolated;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page_isolate {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int none_or_zero;
-	int referenced;
-	bool writable;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page_swapin {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	int swapped_in;
-	int referenced;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
-
-typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
-
-struct mm_slot___2 {
-	struct hlist_node hash;
-	struct list_head mm_node;
-	struct mm_struct *mm;
-	int nr_pte_mapped_thp;
-	long unsigned int pte_mapped_thp[8];
-};
-
-struct khugepaged_scan {
-	struct list_head mm_head;
-	struct mm_slot___2 *mm_slot;
-	long unsigned int address;
-};
-
-struct mem_cgroup_reclaim_cookie {
-	pg_data_t *pgdat;
-	unsigned int generation;
-};
-
-struct mem_cgroup_tree_per_node {
-	struct rb_root rb_root;
-	struct rb_node *rb_rightmost;
-	spinlock_t lock;
-};
-
-struct mem_cgroup_tree {
-	struct mem_cgroup_tree_per_node *rb_tree_per_node[128];
-};
-
-struct mem_cgroup_eventfd_list {
-	struct list_head list;
-	struct eventfd_ctx *eventfd;
-};
-
-struct mem_cgroup_event {
-	struct mem_cgroup *memcg;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
-	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
-	poll_table pt;
-	wait_queue_head_t *wqh;
-	wait_queue_entry_t wait;
-	struct work_struct remove;
-};
-
-struct move_charge_struct {
-	spinlock_t lock;
-	struct mm_struct *mm;
-	struct mem_cgroup *from;
-	struct mem_cgroup *to;
-	long unsigned int flags;
-	long unsigned int precharge;
-	long unsigned int moved_charge;
-	long unsigned int moved_swap;
-	struct task_struct *moving_task;
-	wait_queue_head_t waitq;
-};
-
-enum res_type {
-	_MEM = 0,
-	_MEMSWAP = 1,
-	_OOM_TYPE = 2,
-	_KMEM = 3,
-	_TCP = 4,
-};
-
-struct memory_stat {
-	const char *name;
-	unsigned int ratio;
-	unsigned int idx;
-};
-
-struct oom_wait_info {
-	struct mem_cgroup *memcg;
-	wait_queue_entry_t wait;
-};
-
-enum oom_status {
-	OOM_SUCCESS = 0,
-	OOM_FAILED = 1,
-	OOM_ASYNC = 2,
-	OOM_SKIPPED = 3,
-};
-
-struct memcg_stock_pcp {
-	struct mem_cgroup *cached;
-	unsigned int nr_pages;
-	struct obj_cgroup *cached_objcg;
-	unsigned int nr_bytes;
-	struct work_struct work;
-	long unsigned int flags;
-};
-
-enum {
-	RES_USAGE = 0,
-	RES_LIMIT = 1,
-	RES_MAX_USAGE = 2,
-	RES_FAILCNT = 3,
-	RES_SOFT_LIMIT = 4,
-};
-
-union mc_target {
-	struct page *page;
-	swp_entry_t ent;
-};
-
-enum mc_target_type {
-	MC_TARGET_NONE = 0,
-	MC_TARGET_PAGE = 1,
-	MC_TARGET_SWAP = 2,
-	MC_TARGET_DEVICE = 3,
-};
-
-struct uncharge_gather {
-	struct mem_cgroup *memcg;
-	long unsigned int nr_pages;
-	long unsigned int pgpgout;
-	long unsigned int nr_kmem;
-	struct page *dummy_page;
-};
-
-struct numa_stat {
-	const char *name;
-	unsigned int lru_mask;
-};
-
-enum vmpressure_levels {
-	VMPRESSURE_LOW = 0,
-	VMPRESSURE_MEDIUM = 1,
-	VMPRESSURE_CRITICAL = 2,
-	VMPRESSURE_NUM_LEVELS = 3,
-};
-
-enum vmpressure_modes {
-	VMPRESSURE_NO_PASSTHROUGH = 0,
-	VMPRESSURE_HIERARCHY = 1,
-	VMPRESSURE_LOCAL = 2,
-	VMPRESSURE_NUM_MODES = 3,
-};
-
-struct vmpressure_event {
-	struct eventfd_ctx *efd;
-	enum vmpressure_levels level;
-	enum vmpressure_modes mode;
-	struct list_head node;
-};
-
 struct swap_cgroup_ctrl {
 	struct page **map;
 	long unsigned int length;
@@ -36955,151 +89138,6 @@
 	short unsigned int id;
 };
 
-enum {
-	RES_USAGE___2 = 0,
-	RES_RSVD_USAGE = 1,
-	RES_LIMIT___2 = 2,
-	RES_RSVD_LIMIT = 3,
-	RES_MAX_USAGE___2 = 4,
-	RES_RSVD_MAX_USAGE = 5,
-	RES_FAILCNT___2 = 6,
-	RES_RSVD_FAILCNT = 7,
-};
-
-enum mf_result {
-	MF_IGNORED = 0,
-	MF_FAILED = 1,
-	MF_DELAYED = 2,
-	MF_RECOVERED = 3,
-};
-
-enum mf_action_page_type {
-	MF_MSG_KERNEL = 0,
-	MF_MSG_KERNEL_HIGH_ORDER = 1,
-	MF_MSG_SLAB = 2,
-	MF_MSG_DIFFERENT_COMPOUND = 3,
-	MF_MSG_POISONED_HUGE = 4,
-	MF_MSG_HUGE = 5,
-	MF_MSG_FREE_HUGE = 6,
-	MF_MSG_NON_PMD_HUGE = 7,
-	MF_MSG_UNMAP_FAILED = 8,
-	MF_MSG_DIRTY_SWAPCACHE = 9,
-	MF_MSG_CLEAN_SWAPCACHE = 10,
-	MF_MSG_DIRTY_MLOCKED_LRU = 11,
-	MF_MSG_CLEAN_MLOCKED_LRU = 12,
-	MF_MSG_DIRTY_UNEVICTABLE_LRU = 13,
-	MF_MSG_CLEAN_UNEVICTABLE_LRU = 14,
-	MF_MSG_DIRTY_LRU = 15,
-	MF_MSG_CLEAN_LRU = 16,
-	MF_MSG_TRUNCATED_LRU = 17,
-	MF_MSG_BUDDY = 18,
-	MF_MSG_BUDDY_2ND = 19,
-	MF_MSG_DAX = 20,
-	MF_MSG_UNSPLIT_THP = 21,
-	MF_MSG_UNKNOWN = 22,
-};
-
-typedef long unsigned int dax_entry_t;
-
-struct __kfifo {
-	unsigned int in;
-	unsigned int out;
-	unsigned int mask;
-	unsigned int esize;
-	void *data;
-};
-
-struct to_kill {
-	struct list_head nd;
-	struct task_struct *tsk;
-	long unsigned int addr;
-	short int size_shift;
-};
-
-struct page_state {
-	long unsigned int mask;
-	long unsigned int res;
-	enum mf_action_page_type type;
-	int (*action)(struct page *, long unsigned int);
-};
-
-struct memory_failure_entry {
-	long unsigned int pfn;
-	int flags;
-};
-
-struct memory_failure_cpu {
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct memory_failure_entry *type;
-			const struct memory_failure_entry *const_type;
-			char (*rectype)[0];
-			struct memory_failure_entry *ptr;
-			const struct memory_failure_entry *ptr_const;
-		};
-		struct memory_failure_entry buf[16];
-	} fifo;
-	spinlock_t lock;
-	struct work_struct work;
-};
-
-struct cleancache_filekey {
-	union {
-		ino_t ino;
-		__u32 fh[6];
-		u32 key[6];
-	} u;
-};
-
-struct cleancache_ops {
-	int (*init_fs)(size_t);
-	int (*init_shared_fs)(uuid_t *, size_t);
-	int (*get_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*put_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*invalidate_page)(int, struct cleancache_filekey, long unsigned int);
-	void (*invalidate_inode)(int, struct cleancache_filekey);
-	void (*invalidate_fs)(int);
-};
-
-struct trace_event_raw_test_pages_isolated {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int fin_pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_test_pages_isolated {};
-
-typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-struct zpool_driver;
-
-struct zpool {
-	struct zpool_driver *driver;
-	void *pool;
-	const struct zpool_ops *ops;
-	bool evictable;
-	struct list_head list;
-};
-
-struct zpool_driver {
-	char *type;
-	struct module *owner;
-	atomic_t refcount;
-	struct list_head list;
-	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
-	void (*destroy)(void *);
-	bool malloc_support_movable;
-	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
-	void (*free)(void *, long unsigned int);
-	int (*shrink)(void *, unsigned int, unsigned int *);
-	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
-	void (*unmap)(void *, long unsigned int);
-	u64 (*total_size)(void *);
-};
-
 struct zbud_pool;
 
 struct zbud_ops {
@@ -37108,8 +89146,10 @@
 
 struct zbud_pool {
 	spinlock_t lock;
-	struct list_head unbuddied[63];
-	struct list_head buddied;
+	union {
+		struct list_head buddied;
+		struct list_head unbuddied[63];
+	};
 	struct list_head lru;
 	u64 pages_nr;
 	const struct zbud_ops *ops;
@@ -37125,489 +89165,72 @@
 	bool under_reclaim;
 };
 
-enum buddy {
-	FIRST = 0,
-	LAST = 1,
+enum buddy___2 {
+	FIRST___2 = 0,
+	LAST___2 = 1,
 };
 
-enum zs_mapmode {
-	ZS_MM_RW = 0,
-	ZS_MM_RO = 1,
-	ZS_MM_WO = 2,
-};
-
-struct zs_pool_stats {
-	long unsigned int pages_compacted;
-};
-
-enum fullness_group {
-	ZS_EMPTY = 0,
-	ZS_ALMOST_EMPTY = 1,
-	ZS_ALMOST_FULL = 2,
-	ZS_FULL = 3,
-	NR_ZS_FULLNESS = 4,
-};
-
-enum zs_stat_type {
-	CLASS_EMPTY = 0,
-	CLASS_ALMOST_EMPTY = 1,
-	CLASS_ALMOST_FULL = 2,
-	CLASS_FULL = 3,
-	OBJ_ALLOCATED = 4,
-	OBJ_USED = 5,
-	NR_ZS_STAT_TYPE = 6,
-};
-
-struct zs_size_stat {
-	long unsigned int objs[6];
-};
-
-struct size_class {
-	spinlock_t lock;
-	struct list_head fullness_list[4];
-	int size;
-	int objs_per_zspage;
-	int pages_per_zspage;
-	unsigned int index;
-	struct zs_size_stat stats;
-};
-
-struct link_free {
-	union {
-		long unsigned int next;
-		long unsigned int handle;
-	};
-};
-
-struct zs_pool {
-	const char *name;
-	struct size_class *size_class[255];
-	struct kmem_cache *handle_cachep;
-	struct kmem_cache *zspage_cachep;
-	atomic_long_t pages_allocated;
-	struct zs_pool_stats stats;
-	struct shrinker shrinker;
-	struct inode *inode;
-	struct work_struct free_work;
-	struct wait_queue_head migration_wait;
-	atomic_long_t isolated_pages;
-	bool destroying;
-};
-
-struct zspage {
-	struct {
-		unsigned int fullness: 2;
-		unsigned int class: 9;
-		unsigned int isolated: 3;
-		unsigned int magic: 8;
-	};
-	unsigned int inuse;
-	unsigned int freeobj;
-	struct page *first_page;
-	struct list_head list;
-	rwlock_t lock;
-};
-
-struct mapping_area {
-	char *vm_buf;
-	char *vm_addr;
-	enum zs_mapmode vm_mm;
-};
-
-struct zs_compact_control {
-	struct page *s_page;
-	struct page *d_page;
-	int obj_idx;
-};
-
-struct cma {
-	long unsigned int base_pfn;
-	long unsigned int count;
-	long unsigned int *bitmap;
-	unsigned int order_per_bit;
-	struct mutex lock;
-	char name[64];
-};
-
-struct trace_event_raw_cma_alloc {
+struct trace_event_raw_cma_alloc_class {
 	struct trace_entry ent;
+	u32 __data_loc_name;
 	long unsigned int pfn;
 	const struct page *page;
-	unsigned int count;
+	long unsigned int count;
 	unsigned int align;
 	char __data[0];
 };
 
 struct trace_event_raw_cma_release {
 	struct trace_entry ent;
+	u32 __data_loc_name;
 	long unsigned int pfn;
 	const struct page *page;
-	unsigned int count;
+	long unsigned int count;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_cma_alloc {};
-
-struct trace_event_data_offsets_cma_release {};
-
-typedef void (*btf_trace_cma_alloc)(void *, long unsigned int, const struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cma_release)(void *, long unsigned int, const struct page *, unsigned int);
-
-struct balloon_dev_info {
-	long unsigned int isolated_pages;
-	spinlock_t pages_lock;
-	struct list_head pages;
-	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
-	struct inode *inode;
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
 };
 
-struct page_ext_operations {
-	size_t offset;
-	size_t size;
-	bool (*need)();
-	void (*init)();
+struct trace_event_data_offsets_cma_alloc_class {
+	u32 name;
 };
 
-struct frame_vector {
-	unsigned int nr_allocated;
-	unsigned int nr_frames;
-	bool got_ref;
-	bool is_pfns;
-	void *ptrs[0];
+struct trace_event_data_offsets_cma_release {
+	u32 name;
 };
 
-enum {
-	BAD_STACK = 4294967295,
-	NOT_STACK = 0,
-	GOOD_FRAME = 1,
-	GOOD_STACK = 2,
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
 };
 
-enum hmm_pfn_flags {
-	HMM_PFN_VALID = 0,
-	HMM_PFN_WRITE = 0,
-	HMM_PFN_ERROR = 0,
-	HMM_PFN_ORDER_SHIFT = 56,
-	HMM_PFN_REQ_FAULT = 0,
-	HMM_PFN_REQ_WRITE = 0,
-	HMM_PFN_FLAGS = 0,
+typedef void (*btf_trace_cma_release)(void *, const char *, long unsigned int, const struct page *, long unsigned int);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+struct cma_kobject {
+	struct kobject kobj;
+	struct cma *cma;
 };
 
-struct hmm_range {
-	struct mmu_interval_notifier *notifier;
-	long unsigned int notifier_seq;
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int *hmm_pfns;
-	long unsigned int default_flags;
-	long unsigned int pfn_flags_mask;
-	void *dev_private_owner;
+struct damon_pa_access_chk_result {
+	long unsigned int page_sz;
+	bool accessed;
 };
 
-struct hmm_vma_walk {
-	struct hmm_range *range;
-	long unsigned int last;
-};
-
-enum {
-	HMM_NEED_FAULT = 1,
-	HMM_NEED_WRITE_FAULT = 2,
-	HMM_NEED_ALL_BITS = 3,
-};
-
-struct hugetlbfs_inode_info {
-	struct shared_policy policy;
-	struct inode vfs_inode;
-	unsigned int seals;
-};
-
-struct page_reporting_dev_info {
-	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
-	struct delayed_work work;
-	atomic_t state;
-};
-
-enum {
-	PAGE_REPORTING_IDLE = 0,
-	PAGE_REPORTING_REQUESTED = 1,
-	PAGE_REPORTING_ACTIVE = 2,
-};
-
-typedef s32 compat_off_t;
-
-struct open_how {
-	__u64 flags;
-	__u64 mode;
-	__u64 resolve;
-};
-
-enum fsnotify_data_type {
-	FSNOTIFY_EVENT_NONE = 0,
-	FSNOTIFY_EVENT_PATH = 1,
-	FSNOTIFY_EVENT_INODE = 2,
-};
-
-struct open_flags {
-	int open_flag;
-	umode_t mode;
-	int acc_mode;
-	int intent;
-	int lookup_flags;
-};
-
-typedef __kernel_rwf_t rwf_t;
-
-struct fscrypt_policy_v1 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 master_key_descriptor[8];
-};
-
-struct fscrypt_policy_v2 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 __reserved[4];
-	__u8 master_key_identifier[16];
-};
-
-union fscrypt_policy {
-	u8 version;
-	struct fscrypt_policy_v1 v1;
-	struct fscrypt_policy_v2 v2;
-};
-
-enum vfs_get_super_keying {
-	vfs_get_single_super = 0,
-	vfs_get_single_reconf_super = 1,
-	vfs_get_keyed_super = 2,
-	vfs_get_independent_super = 3,
-};
-
-struct kobj_map;
-
-struct char_device_struct {
-	struct char_device_struct *next;
-	unsigned int major;
-	unsigned int baseminor;
-	int minorct;
-	char name[64];
-	struct cdev *cdev;
-};
-
-struct stat {
-	long unsigned int st_dev;
-	long unsigned int st_ino;
-	unsigned int st_mode;
-	unsigned int st_nlink;
-	unsigned int st_uid;
-	unsigned int st_gid;
-	long unsigned int st_rdev;
-	long unsigned int __pad1;
-	long int st_size;
-	int st_blksize;
-	int __pad2;
-	long int st_blocks;
-	long int st_atime;
-	long unsigned int st_atime_nsec;
-	long int st_mtime;
-	long unsigned int st_mtime_nsec;
-	long int st_ctime;
-	long unsigned int st_ctime_nsec;
-	unsigned int __unused4;
-	unsigned int __unused5;
-};
-
-typedef u32 compat_ino_t;
-
-typedef u16 compat_ushort_t;
-
-typedef s64 compat_s64;
-
-typedef u16 __compat_uid16_t;
-
-typedef u16 __compat_gid16_t;
-
-typedef u16 compat_mode_t;
-
-typedef u32 compat_dev_t;
-
-struct compat_stat {
-	compat_dev_t st_dev;
-	compat_ino_t st_ino;
-	compat_mode_t st_mode;
-	compat_ushort_t st_nlink;
-	__compat_uid16_t st_uid;
-	__compat_gid16_t st_gid;
-	compat_dev_t st_rdev;
-	compat_off_t st_size;
-	compat_off_t st_blksize;
-	compat_off_t st_blocks;
-	old_time32_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	old_time32_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	old_time32_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_ulong_t __unused4[2];
-};
-
-struct stat64 {
-	compat_u64 st_dev;
-	unsigned char __pad0[4];
-	compat_ulong_t __st_ino;
-	compat_uint_t st_mode;
-	compat_uint_t st_nlink;
-	compat_ulong_t st_uid;
-	compat_ulong_t st_gid;
-	compat_u64 st_rdev;
-	unsigned char __pad3[4];
-	compat_s64 st_size;
-	compat_ulong_t st_blksize;
-	compat_u64 st_blocks;
-	compat_ulong_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	compat_ulong_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	compat_ulong_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_u64 st_ino;
-};
-
-struct statx_timestamp {
-	__s64 tv_sec;
-	__u32 tv_nsec;
-	__s32 __reserved;
-};
-
-struct statx {
-	__u32 stx_mask;
-	__u32 stx_blksize;
-	__u64 stx_attributes;
-	__u32 stx_nlink;
-	__u32 stx_uid;
-	__u32 stx_gid;
-	__u16 stx_mode;
-	__u16 __spare0[1];
-	__u64 stx_ino;
-	__u64 stx_size;
-	__u64 stx_blocks;
-	__u64 stx_attributes_mask;
-	struct statx_timestamp stx_atime;
-	struct statx_timestamp stx_btime;
-	struct statx_timestamp stx_ctime;
-	struct statx_timestamp stx_mtime;
-	__u32 stx_rdev_major;
-	__u32 stx_rdev_minor;
-	__u32 stx_dev_major;
-	__u32 stx_dev_minor;
-	__u64 stx_mnt_id;
-	__u64 __spare2;
-	__u64 __spare3[12];
-};
-
-struct mount;
-
-struct mnt_namespace {
-	atomic_t count;
-	struct ns_common ns;
-	struct mount *root;
-	struct list_head list;
-	spinlock_t ns_lock;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	u64 seq;
-	wait_queue_head_t poll;
-	u64 event;
-	unsigned int mounts;
-	unsigned int pending_mounts;
-};
-
-struct mnt_pcp;
-
-struct mountpoint;
-
-struct mount {
-	struct hlist_node mnt_hash;
-	struct mount *mnt_parent;
-	struct dentry *mnt_mountpoint;
-	struct vfsmount mnt;
-	union {
-		struct callback_head mnt_rcu;
-		struct llist_node mnt_llist;
-	};
-	struct mnt_pcp *mnt_pcp;
-	struct list_head mnt_mounts;
-	struct list_head mnt_child;
-	struct list_head mnt_instance;
-	const char *mnt_devname;
-	struct list_head mnt_list;
-	struct list_head mnt_expire;
-	struct list_head mnt_share;
-	struct list_head mnt_slave_list;
-	struct list_head mnt_slave;
-	struct mount *mnt_master;
-	struct mnt_namespace *mnt_ns;
-	struct mountpoint *mnt_mp;
-	union {
-		struct hlist_node mnt_mp_list;
-		struct hlist_node mnt_umount;
-	};
-	struct list_head mnt_umounting;
-	struct fsnotify_mark_connector *mnt_fsnotify_marks;
-	__u32 mnt_fsnotify_mask;
-	int mnt_id;
-	int mnt_group_id;
-	int mnt_expiry_mark;
-	struct hlist_head mnt_pins;
-	struct hlist_head mnt_stuck_children;
-};
-
-struct mnt_pcp {
-	int mnt_count;
-	int mnt_writers;
-};
-
-struct mountpoint {
-	struct hlist_node m_hash;
-	struct dentry *m_dentry;
-	struct hlist_head m_list;
-	int m_count;
-};
-
-typedef short unsigned int ushort;
-
-struct user_arg_ptr {
-	bool is_compat;
-	union {
-		const char * const *native;
-		const compat_uptr_t *compat;
-	} ptr;
-};
-
-enum inode_i_mutex_lock_class {
-	I_MUTEX_NORMAL = 0,
-	I_MUTEX_PARENT = 1,
-	I_MUTEX_CHILD = 2,
-	I_MUTEX_XATTR = 3,
-	I_MUTEX_NONDIR2 = 4,
-	I_MUTEX_PARENT2 = 5,
-};
-
-struct pseudo_fs_context {
-	const struct super_operations *ops;
-	const struct xattr_handler **xattr;
-	const struct dentry_operations *dops;
-	long unsigned int magic;
-};
-
-struct name_snapshot {
-	struct qstr name;
-	unsigned char inline_name[32];
+struct files_stat_struct {
+	long unsigned int nr_files;
+	long unsigned int nr_free_files;
+	long unsigned int max_files;
 };
 
 struct saved {
@@ -37623,7 +89246,9 @@
 	struct path root;
 	struct inode *inode;
 	unsigned int flags;
+	unsigned int state;
 	unsigned int seq;
+	unsigned int next_seq;
 	unsigned int m_seq;
 	unsigned int r_seq;
 	int last_type;
@@ -37639,6 +89264,17 @@
 	umode_t dir_mode;
 };
 
+struct renamedata {
+	struct user_namespace *old_mnt_userns;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct user_namespace *new_mnt_userns;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
 enum {
 	LAST_NORM = 0,
 	LAST_ROOT = 1,
@@ -37652,302 +89288,6 @@
 	WALK_NOFOLLOW = 4,
 };
 
-struct word_at_a_time {
-	const long unsigned int one_bits;
-	const long unsigned int high_bits;
-};
-
-struct compat_flock {
-	short int l_type;
-	short int l_whence;
-	compat_off_t l_start;
-	compat_off_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct compat_flock64 {
-	short int l_type;
-	short int l_whence;
-	compat_loff_t l_start;
-	compat_loff_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct f_owner_ex {
-	int type;
-	__kernel_pid_t pid;
-};
-
-struct flock {
-	short int l_type;
-	short int l_whence;
-	__kernel_off_t l_start;
-	__kernel_off_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct file_clone_range {
-	__s64 src_fd;
-	__u64 src_offset;
-	__u64 src_length;
-	__u64 dest_offset;
-};
-
-struct file_dedupe_range_info {
-	__s64 dest_fd;
-	__u64 dest_offset;
-	__u64 bytes_deduped;
-	__s32 status;
-	__u32 reserved;
-};
-
-struct file_dedupe_range {
-	__u64 src_offset;
-	__u64 src_length;
-	__u16 dest_count;
-	__u16 reserved1;
-	__u32 reserved2;
-	struct file_dedupe_range_info info[0];
-};
-
-typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
-
-struct fiemap_extent;
-
-struct fiemap_extent_info {
-	unsigned int fi_flags;
-	unsigned int fi_extents_mapped;
-	unsigned int fi_extents_max;
-	struct fiemap_extent *fi_extents_start;
-};
-
-struct space_resv {
-	__s16 l_type;
-	__s16 l_whence;
-	__s64 l_start;
-	__s64 l_len;
-	__s32 l_sysid;
-	__u32 l_pid;
-	__s32 l_pad[4];
-};
-
-struct fiemap_extent {
-	__u64 fe_logical;
-	__u64 fe_physical;
-	__u64 fe_length;
-	__u64 fe_reserved64[2];
-	__u32 fe_flags;
-	__u32 fe_reserved[3];
-};
-
-struct fiemap {
-	__u64 fm_start;
-	__u64 fm_length;
-	__u32 fm_flags;
-	__u32 fm_mapped_extents;
-	__u32 fm_extent_count;
-	__u32 fm_reserved;
-	struct fiemap_extent fm_extents[0];
-};
-
-struct linux_dirent64 {
-	u64 d_ino;
-	s64 d_off;
-	short unsigned int d_reclen;
-	unsigned char d_type;
-	char d_name[0];
-};
-
-struct linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct getdents_callback {
-	struct dir_context ctx;
-	struct linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct getdents_callback64 {
-	struct dir_context ctx;
-	struct linux_dirent64 *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct compat_old_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct compat_readdir_callback {
-	struct dir_context ctx;
-	struct compat_old_linux_dirent *dirent;
-	int result;
-};
-
-struct compat_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct compat_getdents_callback {
-	struct dir_context ctx;
-	struct compat_linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-typedef struct {
-	long unsigned int fds_bits[16];
-} __kernel_fd_set;
-
-typedef __kernel_fd_set fd_set;
-
-struct poll_table_entry {
-	struct file *filp;
-	__poll_t key;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *wait_address;
-};
-
-struct poll_table_page;
-
-struct poll_wqueues {
-	poll_table pt;
-	struct poll_table_page *table;
-	struct task_struct *polling_task;
-	int triggered;
-	int error;
-	int inline_index;
-	struct poll_table_entry inline_entries[9];
-};
-
-struct poll_table_page {
-	struct poll_table_page *next;
-	struct poll_table_entry *entry;
-	struct poll_table_entry entries[0];
-};
-
-enum poll_time_type {
-	PT_TIMEVAL = 0,
-	PT_OLD_TIMEVAL = 1,
-	PT_TIMESPEC = 2,
-	PT_OLD_TIMESPEC = 3,
-};
-
-typedef struct {
-	long unsigned int *in;
-	long unsigned int *out;
-	long unsigned int *ex;
-	long unsigned int *res_in;
-	long unsigned int *res_out;
-	long unsigned int *res_ex;
-} fd_set_bits;
-
-struct sigset_argpack {
-	sigset_t *p;
-	size_t size;
-};
-
-struct poll_list {
-	struct poll_list *next;
-	int len;
-	struct pollfd entries[0];
-};
-
-struct compat_sel_arg_struct {
-	compat_ulong_t n;
-	compat_uptr_t inp;
-	compat_uptr_t outp;
-	compat_uptr_t exp;
-	compat_uptr_t tvp;
-};
-
-struct compat_sigset_argpack {
-	compat_uptr_t p;
-	compat_size_t size;
-};
-
-enum dentry_d_lock_class {
-	DENTRY_D_LOCK_NORMAL = 0,
-	DENTRY_D_LOCK_NESTED = 1,
-};
-
-struct external_name {
-	union {
-		atomic_t count;
-		struct callback_head head;
-	} u;
-	unsigned char name[0];
-};
-
-enum d_walk_ret {
-	D_WALK_CONTINUE = 0,
-	D_WALK_QUIT = 1,
-	D_WALK_NORETRY = 2,
-	D_WALK_SKIP = 3,
-};
-
-struct check_mount {
-	struct vfsmount *mnt;
-	unsigned int mounted;
-};
-
-struct select_data {
-	struct dentry *start;
-	union {
-		long int found;
-		struct dentry *victim;
-	};
-	struct list_head dispose;
-};
-
-struct fsxattr {
-	__u32 fsx_xflags;
-	__u32 fsx_extsize;
-	__u32 fsx_nextents;
-	__u32 fsx_projid;
-	__u32 fsx_cowextsize;
-	unsigned char fsx_pad[8];
-};
-
-enum file_time_flags {
-	S_ATIME = 1,
-	S_MTIME = 2,
-	S_CTIME = 4,
-	S_VERSION = 8,
-};
-
-struct proc_mounts {
-	struct mnt_namespace *ns;
-	struct path root;
-	int (*show)(struct seq_file *, struct vfsmount *);
-	struct mount cursor;
-};
-
-enum umount_tree_flags {
-	UMOUNT_SYNC = 1,
-	UMOUNT_PROPAGATE = 2,
-	UMOUNT_CONNECTED = 4,
-};
-
-struct unicode_map {
-	const char *charset;
-	int version;
-};
-
 struct simple_transaction_argresp {
 	ssize_t size;
 	char data[0];
@@ -37963,501 +89303,11 @@
 	struct mutex mutex;
 };
 
-struct wb_writeback_work {
-	long int nr_pages;
-	struct super_block *sb;
-	enum writeback_sync_modes sync_mode;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_kupdate: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_background: 1;
-	unsigned int for_sync: 1;
-	unsigned int auto_free: 1;
-	enum wb_reason reason;
-	struct list_head list;
-	struct wb_completion *done;
-};
-
-struct trace_event_raw_writeback_page_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_dirty_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_foreign_history {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t cgroup_ino;
-	unsigned int history;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_switch_wbs {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t old_cgroup_ino;
-	ino_t new_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_track_foreign_dirty {
-	struct trace_entry ent;
-	char name[32];
-	u64 bdi_id;
-	ino_t ino;
-	unsigned int memcg_id;
-	ino_t cgroup_ino;
-	ino_t page_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_flush_foreign {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	unsigned int frn_bdi_id;
-	unsigned int frn_memcg_id;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_write_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	int sync_mode;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_work_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_pages;
-	dev_t sb_dev;
-	int sync_mode;
-	int for_kupdate;
-	int range_cyclic;
-	int for_background;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_pages_written {
-	struct trace_entry ent;
-	long int pages;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_class {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_bdi_register {
-	struct trace_entry ent;
-	char name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wbc_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_to_write;
-	long int pages_skipped;
-	int sync_mode;
-	int for_kupdate;
-	int for_background;
-	int for_reclaim;
-	int range_cyclic;
-	long int range_start;
-	long int range_end;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_queue_io {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int older;
-	long int age;
-	int moved;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_global_dirty_state {
-	struct trace_entry ent;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int background_thresh;
-	long unsigned int dirty_thresh;
-	long unsigned int dirty_limit;
-	long unsigned int nr_dirtied;
-	long unsigned int nr_written;
-	char __data[0];
-};
-
-struct trace_event_raw_bdi_dirty_ratelimit {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int write_bw;
-	long unsigned int avg_write_bw;
-	long unsigned int dirty_rate;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_balance_dirty_pages {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int limit;
-	long unsigned int setpoint;
-	long unsigned int dirty;
-	long unsigned int bdi_setpoint;
-	long unsigned int bdi_dirty;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	unsigned int dirtied;
-	unsigned int dirtied_pause;
-	long unsigned int paused;
-	long int pause;
-	long unsigned int period;
-	long int think;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_sb_inodes_requeue {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_congest_waited_template {
-	struct trace_entry ent;
-	unsigned int usec_timeout;
-	unsigned int usec_delayed;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_single_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	long unsigned int writeback_index;
-	long int nr_to_write;
-	long unsigned int wrote;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_inode_template {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int state;
-	__u16 mode;
-	long unsigned int dirtied_when;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_writeback_page_template {};
-
-struct trace_event_data_offsets_writeback_dirty_inode_template {};
-
-struct trace_event_data_offsets_inode_foreign_history {};
-
-struct trace_event_data_offsets_inode_switch_wbs {};
-
-struct trace_event_data_offsets_track_foreign_dirty {};
-
-struct trace_event_data_offsets_flush_foreign {};
-
-struct trace_event_data_offsets_writeback_write_inode_template {};
-
-struct trace_event_data_offsets_writeback_work_class {};
-
-struct trace_event_data_offsets_writeback_pages_written {};
-
-struct trace_event_data_offsets_writeback_class {};
-
-struct trace_event_data_offsets_writeback_bdi_register {};
-
-struct trace_event_data_offsets_wbc_class {};
-
-struct trace_event_data_offsets_writeback_queue_io {};
-
-struct trace_event_data_offsets_global_dirty_state {};
-
-struct trace_event_data_offsets_bdi_dirty_ratelimit {};
-
-struct trace_event_data_offsets_balance_dirty_pages {};
-
-struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
-
-struct trace_event_data_offsets_writeback_congest_waited_template {};
-
-struct trace_event_data_offsets_writeback_single_inode_template {};
-
-struct trace_event_data_offsets_writeback_inode_template {};
-
-typedef void (*btf_trace_writeback_dirty_page)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_wait_on_page_writeback)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
-
-typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
-
-typedef void (*btf_trace_track_foreign_dirty)(void *, struct page *, struct bdi_writeback *);
-
-typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_pages_written)(void *, long int);
-
-typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
-
-typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
-
-typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
-
-typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
-
-typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
-
-typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
-
-struct inode_switch_wbs_context {
-	struct inode *inode;
-	struct bdi_writeback *new_wb;
-	struct callback_head callback_head;
-	struct work_struct work;
-};
-
-struct splice_desc {
-	size_t total_len;
-	unsigned int len;
-	unsigned int flags;
-	union {
-		void *userptr;
-		struct file *file;
-		void *data;
-	} u;
-	loff_t pos;
-	loff_t *opos;
-	size_t num_spliced;
-	bool need_wakeup;
-};
-
-typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
-
-typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
-
-struct old_utimbuf32 {
-	old_time32_t actime;
-	old_time32_t modtime;
-};
-
-typedef int __kernel_daddr_t;
-
-struct ustat {
-	__kernel_daddr_t f_tfree;
-	__kernel_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-typedef s32 compat_daddr_t;
-
-typedef __kernel_fsid_t compat_fsid_t;
-
-struct compat_statfs {
-	int f_type;
-	int f_bsize;
-	int f_blocks;
-	int f_bfree;
-	int f_bavail;
-	int f_files;
-	int f_ffree;
-	compat_fsid_t f_fsid;
-	int f_namelen;
-	int f_frsize;
-	int f_flags;
-	int f_spare[4];
-};
-
-struct compat_ustat {
-	compat_daddr_t f_tfree;
-	compat_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-struct statfs {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__kernel_long_t f_blocks;
-	__kernel_long_t f_bfree;
-	__kernel_long_t f_bavail;
-	__kernel_long_t f_files;
-	__kernel_long_t f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct statfs64 {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct compat_statfs64___2 {
-	__u32 f_type;
-	__u32 f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__u32 f_namelen;
-	__u32 f_frsize;
-	__u32 f_flags;
-	__u32 f_spare[4];
-} __attribute__((packed));
-
-typedef struct ns_common *ns_get_path_helper_t(void *);
-
 struct ns_get_path_task_args {
 	const struct proc_ns_operations *ns_ops;
 	struct task_struct *task;
 };
 
-enum legacy_fs_param {
-	LEGACY_FS_UNSET_PARAMS = 0,
-	LEGACY_FS_MONOLITHIC_PARAMS = 1,
-	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
-};
-
-struct legacy_fs_context {
-	char *legacy_data;
-	size_t data_size;
-	enum legacy_fs_param param_type;
-};
-
-enum fsconfig_command {
-	FSCONFIG_SET_FLAG = 0,
-	FSCONFIG_SET_STRING = 1,
-	FSCONFIG_SET_BINARY = 2,
-	FSCONFIG_SET_PATH = 3,
-	FSCONFIG_SET_PATH_EMPTY = 4,
-	FSCONFIG_SET_FD = 5,
-	FSCONFIG_CMD_CREATE = 6,
-	FSCONFIG_CMD_RECONFIGURE = 7,
-};
-
-struct dax_device;
-
-struct iomap_page_ops;
-
-struct iomap___2 {
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	struct block_device *bdev;
-	struct dax_device *dax_dev;
-	void *inline_data;
-	void *private;
-	const struct iomap_page_ops *page_ops;
-};
-
-struct iomap_page_ops {
-	int (*page_prepare)(struct inode *, loff_t, unsigned int, struct iomap___2 *);
-	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *, struct iomap___2 *);
-};
-
 struct decrypt_bh_ctx {
 	struct work_struct work;
 	struct buffer_head *bh;
@@ -38472,442 +89322,7 @@
 	int ratelimit;
 };
 
-enum {
-	DISK_EVENT_MEDIA_CHANGE = 1,
-	DISK_EVENT_EJECT_REQUEST = 2,
-};
-
-enum {
-	BIOSET_NEED_BVECS = 1,
-	BIOSET_NEED_RESCUER = 2,
-};
-
-struct bdev_inode {
-	struct block_device bdev;
-	struct inode vfs_inode;
-};
-
-struct blkdev_dio {
-	union {
-		struct kiocb *iocb;
-		struct task_struct *waiter;
-	};
-	size_t size;
-	atomic_t ref;
-	bool multi_bio: 1;
-	bool should_dirty: 1;
-	bool is_sync: 1;
-	struct bio bio;
-};
-
-struct bd_holder_disk {
-	struct list_head list;
-	struct gendisk *disk;
-	int refcnt;
-};
-
-typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
-
-typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
-
-enum {
-	DIO_LOCKING = 1,
-	DIO_SKIP_HOLES = 2,
-};
-
-struct dio_submit {
-	struct bio *bio;
-	unsigned int blkbits;
-	unsigned int blkfactor;
-	unsigned int start_zero_done;
-	int pages_in_io;
-	sector_t block_in_file;
-	unsigned int blocks_available;
-	int reap_counter;
-	sector_t final_block_in_request;
-	int boundary;
-	get_block_t *get_block;
-	dio_submit_t *submit_io;
-	loff_t logical_offset_in_bio;
-	sector_t final_block_in_bio;
-	sector_t next_block_for_io;
-	struct page *cur_page;
-	unsigned int cur_page_offset;
-	unsigned int cur_page_len;
-	sector_t cur_page_block;
-	loff_t cur_page_fs_offset;
-	struct iov_iter *iter;
-	unsigned int head;
-	unsigned int tail;
-	size_t from;
-	size_t to;
-};
-
-struct dio {
-	int flags;
-	int op;
-	int op_flags;
-	blk_qc_t bio_cookie;
-	struct gendisk *bio_disk;
-	struct inode *inode;
-	loff_t i_size;
-	dio_iodone_t *end_io;
-	void *private;
-	spinlock_t bio_lock;
-	int page_errors;
-	int is_async;
-	bool defer_completion;
-	bool should_dirty;
-	int io_error;
-	long unsigned int refcount;
-	struct bio *bio_list;
-	struct task_struct *waiter;
-	struct kiocb *iocb;
-	ssize_t result;
-	union {
-		struct page *pages[64];
-		struct work_struct complete_work;
-	};
-	long: 64;
-};
-
-struct bvec_iter_all {
-	struct bio_vec bv;
-	int idx;
-	unsigned int done;
-};
-
-struct mpage_readpage_args {
-	struct bio *bio;
-	struct page *page;
-	unsigned int nr_pages;
-	bool is_readahead;
-	sector_t last_block_in_bio;
-	struct buffer_head map_bh;
-	long unsigned int first_logical_block;
-	get_block_t *get_block;
-};
-
-struct mpage_data {
-	struct bio *bio;
-	sector_t last_block_in_bio;
-	get_block_t *get_block;
-	unsigned int use_writepage;
-};
-
-typedef u32 nlink_t;
-
-typedef int (*proc_write_t)(struct file *, char *, size_t);
-
-struct proc_dir_entry {
-	atomic_t in_use;
-	refcount_t refcnt;
-	struct list_head pde_openers;
-	spinlock_t pde_unload_lock;
-	struct completion *pde_unload_completion;
-	const struct inode_operations *proc_iops;
-	union {
-		const struct proc_ops *proc_ops;
-		const struct file_operations *proc_dir_ops;
-	};
-	const struct dentry_operations *proc_dops;
-	union {
-		const struct seq_operations *seq_ops;
-		int (*single_show)(struct seq_file *, void *);
-	};
-	proc_write_t write;
-	void *data;
-	unsigned int state_size;
-	unsigned int low_ino;
-	nlink_t nlink;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct proc_dir_entry *parent;
-	struct rb_root subdir;
-	struct rb_node subdir_node;
-	char *name;
-	umode_t mode;
-	u8 flags;
-	u8 namelen;
-	char inline_name[0];
-};
-
-union proc_op {
-	int (*proc_get_link)(struct dentry *, struct path *);
-	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
-	const char *lsm;
-};
-
-struct proc_inode {
-	struct pid *pid;
-	unsigned int fd;
-	union proc_op op;
-	struct proc_dir_entry *pde;
-	struct ctl_table_header *sysctl;
-	struct ctl_table *sysctl_entry;
-	struct hlist_node sibling_inodes;
-	const struct proc_ns_operations *ns_ops;
-	struct inode vfs_inode;
-};
-
-struct proc_fs_opts {
-	int flag;
-	const char *str;
-};
-
-struct file_handle {
-	__u32 handle_bytes;
-	int handle_type;
-	unsigned char f_handle[0];
-};
-
-struct inotify_inode_mark {
-	struct fsnotify_mark fsn_mark;
-	int wd;
-};
-
-struct dnotify_struct {
-	struct dnotify_struct *dn_next;
-	__u32 dn_mask;
-	int dn_fd;
-	struct file *dn_filp;
-	fl_owner_t dn_owner;
-};
-
-struct dnotify_mark {
-	struct fsnotify_mark fsn_mark;
-	struct dnotify_struct *dn;
-};
-
-struct inotify_event_info {
-	struct fsnotify_event fse;
-	u32 mask;
-	int wd;
-	u32 sync_cookie;
-	int name_len;
-	char name[0];
-};
-
-struct inotify_event {
-	__s32 wd;
-	__u32 mask;
-	__u32 cookie;
-	__u32 len;
-	char name[0];
-};
-
-enum {
-	FAN_EVENT_INIT = 0,
-	FAN_EVENT_REPORTED = 1,
-	FAN_EVENT_ANSWERED = 2,
-	FAN_EVENT_CANCELED = 3,
-};
-
-struct fanotify_fh {
-	u8 type;
-	u8 len;
-	u8 flags;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-struct fanotify_info {
-	u8 dir_fh_totlen;
-	u8 file_fh_totlen;
-	u8 name_len;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-enum fanotify_event_type {
-	FANOTIFY_EVENT_TYPE_FID = 0,
-	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
-	FANOTIFY_EVENT_TYPE_PATH = 2,
-	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
-	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
-};
-
-struct fanotify_event {
-	struct fsnotify_event fse;
-	u32 mask;
-	enum fanotify_event_type type;
-	struct pid *pid;
-};
-
-struct fanotify_fid_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_fh object_fh;
-	unsigned char _inline_fh_buf[12];
-};
-
-struct fanotify_name_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_info info;
-};
-
-struct fanotify_path_event {
-	struct fanotify_event fae;
-	struct path path;
-};
-
-struct fanotify_perm_event {
-	struct fanotify_event fae;
-	struct path path;
-	short unsigned int response;
-	short unsigned int state;
-	int fd;
-};
-
-struct fanotify_event_metadata {
-	__u32 event_len;
-	__u8 vers;
-	__u8 reserved;
-	__u16 metadata_len;
-	__u64 mask;
-	__s32 fd;
-	__s32 pid;
-};
-
-struct fanotify_event_info_header {
-	__u8 info_type;
-	__u8 pad;
-	__u16 len;
-};
-
-struct fanotify_event_info_fid {
-	struct fanotify_event_info_header hdr;
-	__kernel_fsid_t fsid;
-	unsigned char handle[0];
-};
-
-struct fanotify_response {
-	__s32 fd;
-	__u32 response;
-};
-
-struct epoll_event {
-	__poll_t events;
-	__u64 data;
-};
-
-struct epoll_filefd {
-	struct file *file;
-	int fd;
-} __attribute__((packed));
-
-struct nested_call_node {
-	struct list_head llink;
-	void *cookie;
-	void *ctx;
-};
-
-struct nested_calls {
-	struct list_head tasks_call_list;
-	spinlock_t lock;
-};
-
-struct eventpoll;
-
-struct epitem {
-	union {
-		struct rb_node rbn;
-		struct callback_head rcu;
-	};
-	struct list_head rdllink;
-	struct epitem *next;
-	struct epoll_filefd ffd;
-	int nwait;
-	struct list_head pwqlist;
-	struct eventpoll *ep;
-	struct list_head fllink;
-	struct wakeup_source *ws;
-	struct epoll_event event;
-};
-
-struct eventpoll {
-	struct mutex mtx;
-	wait_queue_head_t wq;
-	wait_queue_head_t poll_wait;
-	struct list_head rdllist;
-	rwlock_t lock;
-	struct rb_root_cached rbr;
-	struct epitem *ovflist;
-	struct wakeup_source *ws;
-	struct user_struct *user;
-	struct file *file;
-	u64 gen;
-	unsigned int napi_id;
-};
-
-struct eppoll_entry {
-	struct list_head llink;
-	struct epitem *base;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *whead;
-};
-
-struct ep_pqueue {
-	poll_table pt;
-	struct epitem *epi;
-};
-
-struct ep_send_events_data {
-	int maxevents;
-	struct epoll_event *events;
-	int res;
-};
-
-struct signalfd_siginfo {
-	__u32 ssi_signo;
-	__s32 ssi_errno;
-	__s32 ssi_code;
-	__u32 ssi_pid;
-	__u32 ssi_uid;
-	__s32 ssi_fd;
-	__u32 ssi_tid;
-	__u32 ssi_band;
-	__u32 ssi_overrun;
-	__u32 ssi_trapno;
-	__s32 ssi_status;
-	__s32 ssi_int;
-	__u64 ssi_ptr;
-	__u64 ssi_utime;
-	__u64 ssi_stime;
-	__u64 ssi_addr;
-	__u16 ssi_addr_lsb;
-	__u16 __pad2;
-	__s32 ssi_syscall;
-	__u64 ssi_call_addr;
-	__u32 ssi_arch;
-	__u8 __pad[28];
-};
-
-struct signalfd_ctx {
-	sigset_t sigmask;
-};
-
-struct timerfd_ctx {
-	union {
-		struct hrtimer tmr;
-		struct alarm alarm;
-	} t;
-	ktime_t tintv;
-	ktime_t moffs;
-	wait_queue_head_t wqh;
-	u64 ticks;
-	int clockid;
-	short unsigned int expired;
-	short unsigned int settime_flags;
-	struct callback_head rcu;
-	struct list_head clist;
-	spinlock_t cancel_lock;
-	bool might_cancel;
-};
-
-struct eventfd_ctx___2 {
+struct eventfd_ctx {
 	struct kref kref;
 	wait_queue_head_t wqh;
 	__u64 count;
@@ -38915,1658 +89330,6 @@
 	int id;
 };
 
-enum userfaultfd_state {
-	UFFD_STATE_WAIT_API = 0,
-	UFFD_STATE_RUNNING = 1,
-};
-
-struct userfaultfd_ctx {
-	wait_queue_head_t fault_pending_wqh;
-	wait_queue_head_t fault_wqh;
-	wait_queue_head_t fd_wqh;
-	wait_queue_head_t event_wqh;
-	seqcount_spinlock_t refile_seq;
-	refcount_t refcount;
-	unsigned int flags;
-	unsigned int features;
-	enum userfaultfd_state state;
-	bool released;
-	bool mmap_changing;
-	struct mm_struct *mm;
-};
-
-struct uffd_msg {
-	__u8 event;
-	__u8 reserved1;
-	__u16 reserved2;
-	__u32 reserved3;
-	union {
-		struct {
-			__u64 flags;
-			__u64 address;
-			union {
-				__u32 ptid;
-			} feat;
-		} pagefault;
-		struct {
-			__u32 ufd;
-		} fork;
-		struct {
-			__u64 from;
-			__u64 to;
-			__u64 len;
-		} remap;
-		struct {
-			__u64 start;
-			__u64 end;
-		} remove;
-		struct {
-			__u64 reserved1;
-			__u64 reserved2;
-			__u64 reserved3;
-		} reserved;
-	} arg;
-};
-
-struct uffdio_api {
-	__u64 api;
-	__u64 features;
-	__u64 ioctls;
-};
-
-struct uffdio_range {
-	__u64 start;
-	__u64 len;
-};
-
-struct uffdio_register {
-	struct uffdio_range range;
-	__u64 mode;
-	__u64 ioctls;
-};
-
-struct uffdio_copy {
-	__u64 dst;
-	__u64 src;
-	__u64 len;
-	__u64 mode;
-	__s64 copy;
-};
-
-struct uffdio_zeropage {
-	struct uffdio_range range;
-	__u64 mode;
-	__s64 zeropage;
-};
-
-struct uffdio_writeprotect {
-	struct uffdio_range range;
-	__u64 mode;
-};
-
-struct userfaultfd_fork_ctx {
-	struct userfaultfd_ctx *orig;
-	struct userfaultfd_ctx *new;
-	struct list_head list;
-};
-
-struct userfaultfd_unmap_ctx {
-	struct userfaultfd_ctx *ctx;
-	long unsigned int start;
-	long unsigned int end;
-	struct list_head list;
-};
-
-struct userfaultfd_wait_queue {
-	struct uffd_msg msg;
-	wait_queue_entry_t wq;
-	struct userfaultfd_ctx *ctx;
-	bool waken;
-};
-
-struct userfaultfd_wake_range {
-	long unsigned int start;
-	long unsigned int len;
-};
-
-typedef u32 compat_aio_context_t;
-
-struct kioctx;
-
-struct kioctx_table {
-	struct callback_head rcu;
-	unsigned int nr;
-	struct kioctx *table[0];
-};
-
-typedef __kernel_ulong_t aio_context_t;
-
-enum {
-	IOCB_CMD_PREAD = 0,
-	IOCB_CMD_PWRITE = 1,
-	IOCB_CMD_FSYNC = 2,
-	IOCB_CMD_FDSYNC = 3,
-	IOCB_CMD_POLL = 5,
-	IOCB_CMD_NOOP = 6,
-	IOCB_CMD_PREADV = 7,
-	IOCB_CMD_PWRITEV = 8,
-};
-
-struct io_event {
-	__u64 data;
-	__u64 obj;
-	__s64 res;
-	__s64 res2;
-};
-
-struct iocb {
-	__u64 aio_data;
-	__u32 aio_key;
-	__kernel_rwf_t aio_rw_flags;
-	__u16 aio_lio_opcode;
-	__s16 aio_reqprio;
-	__u32 aio_fildes;
-	__u64 aio_buf;
-	__u64 aio_nbytes;
-	__s64 aio_offset;
-	__u64 aio_reserved2;
-	__u32 aio_flags;
-	__u32 aio_resfd;
-};
-
-typedef int kiocb_cancel_fn(struct kiocb *);
-
-struct aio_ring {
-	unsigned int id;
-	unsigned int nr;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int magic;
-	unsigned int compat_features;
-	unsigned int incompat_features;
-	unsigned int header_length;
-	struct io_event io_events[0];
-};
-
-struct kioctx_cpu;
-
-struct ctx_rq_wait;
-
-struct kioctx {
-	struct percpu_ref users;
-	atomic_t dead;
-	struct percpu_ref reqs;
-	long unsigned int user_id;
-	struct kioctx_cpu *cpu;
-	unsigned int req_batch;
-	unsigned int max_reqs;
-	unsigned int nr_events;
-	long unsigned int mmap_base;
-	long unsigned int mmap_size;
-	struct page **ring_pages;
-	long int nr_pages;
-	struct rcu_work free_rwork;
-	struct ctx_rq_wait *rq_wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct {
-		atomic_t reqs_available;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		spinlock_t ctx_lock;
-		struct list_head active_reqs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex ring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		unsigned int tail;
-		unsigned int completed_events;
-		spinlock_t completion_lock;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct page *internal_pages[8];
-	struct file *aio_ring_file;
-	unsigned int id;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kioctx_cpu {
-	unsigned int reqs_available;
-};
-
-struct ctx_rq_wait {
-	struct completion comp;
-	atomic_t count;
-};
-
-struct fsync_iocb {
-	struct file *file;
-	struct work_struct work;
-	bool datasync;
-	struct cred *creds;
-};
-
-struct poll_iocb {
-	struct file *file;
-	struct wait_queue_head *head;
-	__poll_t events;
-	bool done;
-	bool cancelled;
-	struct wait_queue_entry wait;
-	struct work_struct work;
-};
-
-struct aio_kiocb {
-	union {
-		struct file *ki_filp;
-		struct kiocb rw;
-		struct fsync_iocb fsync;
-		struct poll_iocb poll;
-	};
-	struct kioctx *ki_ctx;
-	kiocb_cancel_fn *ki_cancel;
-	struct io_event ki_res;
-	struct list_head ki_list;
-	refcount_t ki_refcnt;
-	struct eventfd_ctx *ki_eventfd;
-};
-
-struct aio_poll_table {
-	struct poll_table_struct pt;
-	struct aio_kiocb *iocb;
-	int error;
-};
-
-struct __aio_sigset {
-	const sigset_t *sigmask;
-	size_t sigsetsize;
-};
-
-struct __compat_aio_sigset {
-	compat_uptr_t sigmask;
-	compat_size_t sigsetsize;
-};
-
-typedef s32 compat_ssize_t;
-
-enum {
-	PERCPU_REF_INIT_ATOMIC = 1,
-	PERCPU_REF_INIT_DEAD = 2,
-	PERCPU_REF_ALLOW_REINIT = 4,
-};
-
-struct user_msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iovec *msg_iov;
-	__kernel_size_t msg_iovlen;
-	void *msg_control;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-};
-
-struct compat_msghdr {
-	compat_uptr_t msg_name;
-	compat_int_t msg_namelen;
-	compat_uptr_t msg_iov;
-	compat_size_t msg_iovlen;
-	compat_uptr_t msg_control;
-	compat_size_t msg_controllen;
-	compat_uint_t msg_flags;
-};
-
-struct scm_fp_list {
-	short int count;
-	short int max;
-	struct user_struct *user;
-	struct file *fp[253];
-};
-
-struct unix_skb_parms {
-	struct pid *pid;
-	kuid_t uid;
-	kgid_t gid;
-	struct scm_fp_list *fp;
-	u32 secid;
-	u32 consumed;
-};
-
-struct trace_event_raw_io_uring_create {
-	struct trace_entry ent;
-	int fd;
-	void *ctx;
-	u32 sq_entries;
-	u32 cq_entries;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_register {
-	struct trace_entry ent;
-	void *ctx;
-	unsigned int opcode;
-	unsigned int nr_files;
-	unsigned int nr_bufs;
-	bool eventfd;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_file_get {
-	struct trace_entry ent;
-	void *ctx;
-	int fd;
-	char __data[0];
-};
-
-struct io_wq_work;
-
-struct trace_event_raw_io_uring_queue_async_work {
-	struct trace_entry ent;
-	void *ctx;
-	int rw;
-	void *req;
-	struct io_wq_work *work;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct io_wq_work_node {
-	struct io_wq_work_node *next;
-};
-
-struct io_wq_work {
-	struct io_wq_work_node list;
-	struct io_identity *identity;
-	unsigned int flags;
-};
-
-struct trace_event_raw_io_uring_defer {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	long long unsigned int data;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_link {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	void *target_req;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_cqring_wait {
-	struct trace_entry ent;
-	void *ctx;
-	int min_events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_fail_link {
-	struct trace_entry ent;
-	void *req;
-	void *link;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_complete {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	long int res;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_submit_sqe {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	bool force_nonblock;
-	bool sq_thread;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_arm {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	int events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_wake {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_add {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_run {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_io_uring_create {};
-
-struct trace_event_data_offsets_io_uring_register {};
-
-struct trace_event_data_offsets_io_uring_file_get {};
-
-struct trace_event_data_offsets_io_uring_queue_async_work {};
-
-struct trace_event_data_offsets_io_uring_defer {};
-
-struct trace_event_data_offsets_io_uring_link {};
-
-struct trace_event_data_offsets_io_uring_cqring_wait {};
-
-struct trace_event_data_offsets_io_uring_fail_link {};
-
-struct trace_event_data_offsets_io_uring_complete {};
-
-struct trace_event_data_offsets_io_uring_submit_sqe {};
-
-struct trace_event_data_offsets_io_uring_poll_arm {};
-
-struct trace_event_data_offsets_io_uring_poll_wake {};
-
-struct trace_event_data_offsets_io_uring_task_add {};
-
-struct trace_event_data_offsets_io_uring_task_run {};
-
-typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
-
-typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);
-
-typedef void (*btf_trace_io_uring_file_get)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);
-
-typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);
-
-typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);
-
-typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u8, u64, bool, bool);
-
-typedef void (*btf_trace_io_uring_poll_arm)(void *, void *, u8, u64, int, int);
-
-typedef void (*btf_trace_io_uring_poll_wake)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_add)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_run)(void *, void *, u8, u64);
-
-struct io_uring_sqe {
-	__u8 opcode;
-	__u8 flags;
-	__u16 ioprio;
-	__s32 fd;
-	union {
-		__u64 off;
-		__u64 addr2;
-	};
-	union {
-		__u64 addr;
-		__u64 splice_off_in;
-	};
-	__u32 len;
-	union {
-		__kernel_rwf_t rw_flags;
-		__u32 fsync_flags;
-		__u16 poll_events;
-		__u32 poll32_events;
-		__u32 sync_range_flags;
-		__u32 msg_flags;
-		__u32 timeout_flags;
-		__u32 accept_flags;
-		__u32 cancel_flags;
-		__u32 open_flags;
-		__u32 statx_flags;
-		__u32 fadvise_advice;
-		__u32 splice_flags;
-	};
-	__u64 user_data;
-	union {
-		struct {
-			union {
-				__u16 buf_index;
-				__u16 buf_group;
-			};
-			__u16 personality;
-			__s32 splice_fd_in;
-		};
-		__u64 __pad2[3];
-	};
-};
-
-enum {
-	IOSQE_FIXED_FILE_BIT = 0,
-	IOSQE_IO_DRAIN_BIT = 1,
-	IOSQE_IO_LINK_BIT = 2,
-	IOSQE_IO_HARDLINK_BIT = 3,
-	IOSQE_ASYNC_BIT = 4,
-	IOSQE_BUFFER_SELECT_BIT = 5,
-};
-
-enum {
-	IORING_OP_NOP = 0,
-	IORING_OP_READV = 1,
-	IORING_OP_WRITEV = 2,
-	IORING_OP_FSYNC = 3,
-	IORING_OP_READ_FIXED = 4,
-	IORING_OP_WRITE_FIXED = 5,
-	IORING_OP_POLL_ADD = 6,
-	IORING_OP_POLL_REMOVE = 7,
-	IORING_OP_SYNC_FILE_RANGE = 8,
-	IORING_OP_SENDMSG = 9,
-	IORING_OP_RECVMSG = 10,
-	IORING_OP_TIMEOUT = 11,
-	IORING_OP_TIMEOUT_REMOVE = 12,
-	IORING_OP_ACCEPT = 13,
-	IORING_OP_ASYNC_CANCEL = 14,
-	IORING_OP_LINK_TIMEOUT = 15,
-	IORING_OP_CONNECT = 16,
-	IORING_OP_FALLOCATE = 17,
-	IORING_OP_OPENAT = 18,
-	IORING_OP_CLOSE = 19,
-	IORING_OP_FILES_UPDATE = 20,
-	IORING_OP_STATX = 21,
-	IORING_OP_READ = 22,
-	IORING_OP_WRITE = 23,
-	IORING_OP_FADVISE = 24,
-	IORING_OP_MADVISE = 25,
-	IORING_OP_SEND = 26,
-	IORING_OP_RECV = 27,
-	IORING_OP_OPENAT2 = 28,
-	IORING_OP_EPOLL_CTL = 29,
-	IORING_OP_SPLICE = 30,
-	IORING_OP_PROVIDE_BUFFERS = 31,
-	IORING_OP_REMOVE_BUFFERS = 32,
-	IORING_OP_TEE = 33,
-	IORING_OP_LAST = 34,
-};
-
-struct io_uring_cqe {
-	__u64 user_data;
-	__s32 res;
-	__u32 flags;
-};
-
-enum {
-	IORING_CQE_BUFFER_SHIFT = 16,
-};
-
-struct io_sqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 flags;
-	__u32 dropped;
-	__u32 array;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_cqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 overflow;
-	__u32 cqes;
-	__u32 flags;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_uring_params {
-	__u32 sq_entries;
-	__u32 cq_entries;
-	__u32 flags;
-	__u32 sq_thread_cpu;
-	__u32 sq_thread_idle;
-	__u32 features;
-	__u32 wq_fd;
-	__u32 resv[3];
-	struct io_sqring_offsets sq_off;
-	struct io_cqring_offsets cq_off;
-};
-
-enum {
-	IORING_REGISTER_BUFFERS = 0,
-	IORING_UNREGISTER_BUFFERS = 1,
-	IORING_REGISTER_FILES = 2,
-	IORING_UNREGISTER_FILES = 3,
-	IORING_REGISTER_EVENTFD = 4,
-	IORING_UNREGISTER_EVENTFD = 5,
-	IORING_REGISTER_FILES_UPDATE = 6,
-	IORING_REGISTER_EVENTFD_ASYNC = 7,
-	IORING_REGISTER_PROBE = 8,
-	IORING_REGISTER_PERSONALITY = 9,
-	IORING_UNREGISTER_PERSONALITY = 10,
-	IORING_REGISTER_RESTRICTIONS = 11,
-	IORING_REGISTER_ENABLE_RINGS = 12,
-	IORING_REGISTER_LAST = 13,
-};
-
-struct io_uring_files_update {
-	__u32 offset;
-	__u32 resv;
-	__u64 fds;
-};
-
-struct io_uring_probe_op {
-	__u8 op;
-	__u8 resv;
-	__u16 flags;
-	__u32 resv2;
-};
-
-struct io_uring_probe {
-	__u8 last_op;
-	__u8 ops_len;
-	__u16 resv;
-	__u32 resv2[3];
-	struct io_uring_probe_op ops[0];
-};
-
-struct io_uring_restriction {
-	__u16 opcode;
-	union {
-		__u8 register_op;
-		__u8 sqe_op;
-		__u8 sqe_flags;
-	};
-	__u8 resv;
-	__u32 resv2[3];
-};
-
-enum {
-	IORING_RESTRICTION_REGISTER_OP = 0,
-	IORING_RESTRICTION_SQE_OP = 1,
-	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
-	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
-	IORING_RESTRICTION_LAST = 4,
-};
-
-enum {
-	IO_WQ_WORK_CANCEL = 1,
-	IO_WQ_WORK_HASHED = 2,
-	IO_WQ_WORK_UNBOUND = 4,
-	IO_WQ_WORK_NO_CANCEL = 8,
-	IO_WQ_WORK_CONCURRENT = 16,
-	IO_WQ_WORK_FILES = 32,
-	IO_WQ_WORK_FS = 64,
-	IO_WQ_WORK_MM = 128,
-	IO_WQ_WORK_CREDS = 256,
-	IO_WQ_WORK_BLKCG = 512,
-	IO_WQ_WORK_FSIZE = 1024,
-	IO_WQ_HASH_SHIFT = 24,
-};
-
-enum io_wq_cancel {
-	IO_WQ_CANCEL_OK = 0,
-	IO_WQ_CANCEL_RUNNING = 1,
-	IO_WQ_CANCEL_NOTFOUND = 2,
-};
-
-typedef void free_work_fn(struct io_wq_work *);
-
-typedef struct io_wq_work *io_wq_work_fn(struct io_wq_work *);
-
-struct io_wq_data {
-	struct user_struct *user;
-	io_wq_work_fn *do_work;
-	free_work_fn *free_work;
-};
-
-struct io_uring {
-	u32 head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 tail;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_rings {
-	struct io_uring sq;
-	struct io_uring cq;
-	u32 sq_ring_mask;
-	u32 cq_ring_mask;
-	u32 sq_ring_entries;
-	u32 cq_ring_entries;
-	u32 sq_dropped;
-	u32 sq_flags;
-	u32 cq_flags;
-	u32 cq_overflow;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct io_uring_cqe cqes[0];
-};
-
-struct io_mapped_ubuf {
-	u64 ubuf;
-	size_t len;
-	struct bio_vec *bvec;
-	unsigned int nr_bvecs;
-	long unsigned int acct_pages;
-};
-
-struct fixed_file_table {
-	struct file **files;
-};
-
-struct fixed_file_data;
-
-struct fixed_file_ref_node {
-	struct percpu_ref refs;
-	struct list_head node;
-	struct list_head file_list;
-	struct fixed_file_data *file_data;
-	struct llist_node llist;
-	bool done;
-};
-
-struct io_ring_ctx;
-
-struct fixed_file_data {
-	struct fixed_file_table *table;
-	struct io_ring_ctx *ctx;
-	struct fixed_file_ref_node *node;
-	struct percpu_ref refs;
-	struct completion done;
-	struct list_head ref_list;
-	spinlock_t lock;
-};
-
-struct io_wq;
-
-struct io_restriction {
-	long unsigned int register_op[1];
-	long unsigned int sqe_op[1];
-	u8 sqe_flags_allowed;
-	u8 sqe_flags_required;
-	bool registered;
-};
-
-struct io_sq_data;
-
-struct io_kiocb;
-
-struct io_ring_ctx {
-	struct {
-		struct percpu_ref refs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		unsigned int flags;
-		unsigned int compat: 1;
-		unsigned int limit_mem: 1;
-		unsigned int cq_overflow_flushed: 1;
-		unsigned int drain_next: 1;
-		unsigned int eventfd_async: 1;
-		unsigned int restricted: 1;
-		unsigned int sqo_dead: 1;
-		u32 *sq_array;
-		unsigned int cached_sq_head;
-		unsigned int sq_entries;
-		unsigned int sq_mask;
-		unsigned int sq_thread_idle;
-		unsigned int cached_sq_dropped;
-		unsigned int cached_cq_overflow;
-		long unsigned int sq_check_overflow;
-		struct list_head defer_list;
-		struct list_head timeout_list;
-		struct list_head cq_overflow_list;
-		wait_queue_head_t inflight_wait;
-		struct io_uring_sqe *sq_sqes;
-	};
-	struct io_rings *rings;
-	struct io_wq *io_wq;
-	struct task_struct *sqo_task;
-	struct mm_struct *mm_account;
-	struct cgroup_subsys_state *sqo_blkcg_css;
-	struct io_sq_data *sq_data;
-	struct wait_queue_head sqo_sq_wait;
-	struct wait_queue_entry sqo_wait_entry;
-	struct list_head sqd_list;
-	struct fixed_file_data *file_data;
-	unsigned int nr_user_files;
-	unsigned int nr_user_bufs;
-	struct io_mapped_ubuf *user_bufs;
-	struct user_struct *user;
-	const struct cred *creds;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct completion ref_comp;
-	struct completion sq_thread_comp;
-	struct io_kiocb *fallback_req;
-	struct socket *ring_sock;
-	struct idr io_buffer_idr;
-	struct idr personality_idr;
-	long: 64;
-	long: 64;
-	struct {
-		unsigned int cached_cq_tail;
-		unsigned int cq_entries;
-		unsigned int cq_mask;
-		atomic_t cq_timeouts;
-		unsigned int cq_last_tm_flush;
-		long unsigned int cq_check_overflow;
-		struct wait_queue_head cq_wait;
-		struct fasync_struct *cq_fasync;
-		struct eventfd_ctx *cq_ev_fd;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex uring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		spinlock_t completion_lock;
-		struct list_head iopoll_list;
-		struct hlist_head *cancel_hash;
-		unsigned int cancel_hash_bits;
-		bool poll_multi_file;
-		spinlock_t inflight_lock;
-		struct list_head inflight_list;
-	};
-	struct delayed_work file_put_work;
-	struct llist_head file_put_llist;
-	struct work_struct exit_work;
-	struct io_restriction restrictions;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_buffer {
-	struct list_head list;
-	__u64 addr;
-	__s32 len;
-	__u16 bid;
-};
-
-struct io_sq_data {
-	refcount_t refs;
-	struct mutex lock;
-	struct list_head ctx_list;
-	struct list_head ctx_new_list;
-	struct mutex ctx_lock;
-	struct task_struct *thread;
-	struct wait_queue_head wait;
-};
-
-struct io_rw {
-	struct kiocb kiocb;
-	u64 addr;
-	u64 len;
-};
-
-struct io_poll_iocb {
-	struct file *file;
-	union {
-		struct wait_queue_head *head;
-		u64 addr;
-	};
-	__poll_t events;
-	bool done;
-	bool canceled;
-	struct wait_queue_entry wait;
-};
-
-struct io_accept {
-	struct file *file;
-	struct sockaddr *addr;
-	int *addr_len;
-	int flags;
-	long unsigned int nofile;
-};
-
-struct io_sync {
-	struct file *file;
-	loff_t len;
-	loff_t off;
-	int flags;
-	int mode;
-};
-
-struct io_cancel {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_timeout {
-	struct file *file;
-	u32 off;
-	u32 target_seq;
-	struct list_head list;
-};
-
-struct io_timeout_rem {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_connect {
-	struct file *file;
-	struct sockaddr *addr;
-	int addr_len;
-};
-
-struct io_sr_msg {
-	struct file *file;
-	union {
-		struct user_msghdr *umsg;
-		void *buf;
-	};
-	int msg_flags;
-	int bgid;
-	size_t len;
-	struct io_buffer *kbuf;
-};
-
-struct io_open {
-	struct file *file;
-	int dfd;
-	bool ignore_nonblock;
-	struct filename *filename;
-	struct open_how how;
-	long unsigned int nofile;
-};
-
-struct io_close {
-	struct file *file;
-	struct file *put_file;
-	int fd;
-};
-
-struct io_files_update {
-	struct file *file;
-	u64 arg;
-	u32 nr_args;
-	u32 offset;
-};
-
-struct io_fadvise {
-	struct file *file;
-	u64 offset;
-	u32 len;
-	u32 advice;
-};
-
-struct io_madvise {
-	struct file *file;
-	u64 addr;
-	u32 len;
-	u32 advice;
-};
-
-struct io_epoll {
-	struct file *file;
-	int epfd;
-	int op;
-	int fd;
-	struct epoll_event event;
-};
-
-struct io_splice {
-	struct file *file_out;
-	struct file *file_in;
-	loff_t off_out;
-	loff_t off_in;
-	u64 len;
-	unsigned int flags;
-};
-
-struct io_provide_buf {
-	struct file *file;
-	__u64 addr;
-	__s32 len;
-	__u32 bgid;
-	__u16 nbufs;
-	__u16 bid;
-};
-
-struct io_statx {
-	struct file *file;
-	int dfd;
-	unsigned int mask;
-	unsigned int flags;
-	const char *filename;
-	struct statx *buffer;
-};
-
-struct io_completion {
-	struct file *file;
-	struct list_head list;
-	int cflags;
-};
-
-struct async_poll;
-
-struct io_kiocb {
-	union {
-		struct file *file;
-		struct io_rw rw;
-		struct io_poll_iocb poll;
-		struct io_accept accept;
-		struct io_sync sync;
-		struct io_cancel cancel;
-		struct io_timeout timeout;
-		struct io_timeout_rem timeout_rem;
-		struct io_connect connect;
-		struct io_sr_msg sr_msg;
-		struct io_open open;
-		struct io_close close;
-		struct io_files_update files_update;
-		struct io_fadvise fadvise;
-		struct io_madvise madvise;
-		struct io_epoll epoll;
-		struct io_splice splice;
-		struct io_provide_buf pbuf;
-		struct io_statx statx;
-		struct io_completion compl;
-	};
-	void *async_data;
-	u8 opcode;
-	u8 iopoll_completed;
-	u16 buf_index;
-	u32 result;
-	struct io_ring_ctx *ctx;
-	unsigned int flags;
-	refcount_t refs;
-	struct task_struct *task;
-	u64 user_data;
-	struct list_head link_list;
-	struct list_head inflight_entry;
-	struct percpu_ref *fixed_file_refs;
-	struct callback_head task_work;
-	struct hlist_node hash_node;
-	struct async_poll *apoll;
-	struct io_wq_work work;
-};
-
-struct io_timeout_data {
-	struct io_kiocb *req;
-	struct hrtimer timer;
-	struct timespec64 ts;
-	enum hrtimer_mode mode;
-};
-
-struct io_async_connect {
-	struct __kernel_sockaddr_storage address;
-};
-
-struct io_async_msghdr {
-	struct iovec fast_iov[8];
-	struct iovec *iov;
-	struct sockaddr *uaddr;
-	struct msghdr msg;
-	struct __kernel_sockaddr_storage addr;
-};
-
-struct io_async_rw {
-	struct iovec fast_iov[8];
-	const struct iovec *free_iovec;
-	struct iov_iter iter;
-	size_t bytes_done;
-	struct wait_page_queue wpq;
-};
-
-enum {
-	REQ_F_FIXED_FILE_BIT = 0,
-	REQ_F_IO_DRAIN_BIT = 1,
-	REQ_F_LINK_BIT = 2,
-	REQ_F_HARDLINK_BIT = 3,
-	REQ_F_FORCE_ASYNC_BIT = 4,
-	REQ_F_BUFFER_SELECT_BIT = 5,
-	REQ_F_LINK_HEAD_BIT = 6,
-	REQ_F_FAIL_LINK_BIT = 7,
-	REQ_F_INFLIGHT_BIT = 8,
-	REQ_F_CUR_POS_BIT = 9,
-	REQ_F_NOWAIT_BIT = 10,
-	REQ_F_LINK_TIMEOUT_BIT = 11,
-	REQ_F_ISREG_BIT = 12,
-	REQ_F_NEED_CLEANUP_BIT = 13,
-	REQ_F_POLLED_BIT = 14,
-	REQ_F_BUFFER_SELECTED_BIT = 15,
-	REQ_F_NO_FILE_TABLE_BIT = 16,
-	REQ_F_WORK_INITIALIZED_BIT = 17,
-	REQ_F_LTIMEOUT_ACTIVE_BIT = 18,
-	__REQ_F_LAST_BIT = 19,
-};
-
-enum {
-	REQ_F_FIXED_FILE = 1,
-	REQ_F_IO_DRAIN = 2,
-	REQ_F_LINK = 4,
-	REQ_F_HARDLINK = 8,
-	REQ_F_FORCE_ASYNC = 16,
-	REQ_F_BUFFER_SELECT = 32,
-	REQ_F_LINK_HEAD = 64,
-	REQ_F_FAIL_LINK = 128,
-	REQ_F_INFLIGHT = 256,
-	REQ_F_CUR_POS = 512,
-	REQ_F_NOWAIT = 1024,
-	REQ_F_LINK_TIMEOUT = 2048,
-	REQ_F_ISREG = 4096,
-	REQ_F_NEED_CLEANUP = 8192,
-	REQ_F_POLLED = 16384,
-	REQ_F_BUFFER_SELECTED = 32768,
-	REQ_F_NO_FILE_TABLE = 65536,
-	REQ_F_WORK_INITIALIZED = 131072,
-	REQ_F_LTIMEOUT_ACTIVE = 262144,
-};
-
-struct async_poll {
-	struct io_poll_iocb poll;
-	struct io_poll_iocb *double_poll;
-};
-
-struct io_defer_entry {
-	struct list_head list;
-	struct io_kiocb *req;
-	u32 seq;
-};
-
-struct io_comp_state {
-	unsigned int nr;
-	struct list_head list;
-	struct io_ring_ctx *ctx;
-};
-
-struct io_submit_state {
-	struct blk_plug plug;
-	void *reqs[8];
-	unsigned int free_reqs;
-	struct io_comp_state comp;
-	struct file *file;
-	unsigned int fd;
-	unsigned int has_refs;
-	unsigned int ios_left;
-};
-
-struct io_op_def {
-	unsigned int needs_file: 1;
-	unsigned int needs_file_no_error: 1;
-	unsigned int hash_reg_file: 1;
-	unsigned int unbound_nonreg_file: 1;
-	unsigned int not_supported: 1;
-	unsigned int pollin: 1;
-	unsigned int pollout: 1;
-	unsigned int buffer_select: 1;
-	unsigned int needs_async_data: 1;
-	short unsigned int async_size;
-	unsigned int work_flags;
-};
-
-enum io_mem_account {
-	ACCT_LOCKED = 0,
-	ACCT_PINNED = 1,
-};
-
-struct req_batch {
-	void *reqs[8];
-	int to_free;
-	struct task_struct *task;
-	int task_refs;
-};
-
-struct io_poll_table {
-	struct poll_table_struct pt;
-	struct io_kiocb *req;
-	int error;
-};
-
-enum sq_ret {
-	SQT_IDLE = 1,
-	SQT_SPIN = 2,
-	SQT_DID_WORK = 4,
-};
-
-struct io_wait_queue {
-	struct wait_queue_entry wq;
-	struct io_ring_ctx *ctx;
-	unsigned int to_wait;
-	unsigned int nr_timeouts;
-};
-
-struct io_file_put {
-	struct list_head list;
-	struct file *file;
-};
-
-struct io_wq_work_list {
-	struct io_wq_work_node *first;
-	struct io_wq_work_node *last;
-};
-
-typedef bool work_cancel_fn(struct io_wq_work *, void *);
-
-enum {
-	IO_WORKER_F_UP = 1,
-	IO_WORKER_F_RUNNING = 2,
-	IO_WORKER_F_FREE = 4,
-	IO_WORKER_F_FIXED = 8,
-	IO_WORKER_F_BOUND = 16,
-};
-
-enum {
-	IO_WQ_BIT_EXIT = 0,
-	IO_WQ_BIT_CANCEL = 1,
-	IO_WQ_BIT_ERROR = 2,
-};
-
-enum {
-	IO_WQE_FLAG_STALLED = 1,
-};
-
-struct io_wqe;
-
-struct io_worker {
-	refcount_t ref;
-	unsigned int flags;
-	struct hlist_nulls_node nulls_node;
-	struct list_head all_list;
-	struct task_struct *task;
-	struct io_wqe *wqe;
-	struct io_wq_work *cur_work;
-	spinlock_t lock;
-	struct callback_head rcu;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *cur_creds;
-	const struct cred *saved_creds;
-	struct files_struct *restore_files;
-	struct nsproxy *restore_nsproxy;
-	struct fs_struct *restore_fs;
-};
-
-struct io_wqe_acct {
-	unsigned int nr_workers;
-	unsigned int max_workers;
-	atomic_t nr_running;
-};
-
-struct io_wq___2;
-
-struct io_wqe {
-	struct {
-		raw_spinlock_t lock;
-		struct io_wq_work_list work_list;
-		long unsigned int hash_map;
-		unsigned int flags;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	int node;
-	struct io_wqe_acct acct[2];
-	struct hlist_nulls_head free_list;
-	struct list_head all_list;
-	struct io_wq___2 *wq;
-	struct io_wq_work *hash_tail[64];
-};
-
-enum {
-	IO_WQ_ACCT_BOUND = 0,
-	IO_WQ_ACCT_UNBOUND = 1,
-};
-
-struct io_wq___2 {
-	struct io_wqe **wqes;
-	long unsigned int state;
-	free_work_fn *free_work;
-	io_wq_work_fn *do_work;
-	struct task_struct *manager;
-	struct user_struct *user;
-	refcount_t refs;
-	struct completion done;
-	struct hlist_node cpuhp_node;
-	refcount_t use_refs;
-};
-
-struct io_cb_cancel_data {
-	work_cancel_fn *fn;
-	void *data;
-	int nr_running;
-	int nr_pending;
-	bool cancel_all;
-};
-
-struct iomap_ops {
-	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap___2 *, struct iomap___2 *);
-	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap___2 *);
-};
-
-struct trace_event_raw_dax_pmd_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	long unsigned int max_pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_load_hole_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	struct page *zero_page;
-	void *radix_entry;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_insert_mapping_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long int length;
-	u64 pfn_val;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pte_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_insert_mapping {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_range_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int start_index;
-	long unsigned int end_index;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_one {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int pgoff;
-	long unsigned int pglen;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dax_pmd_fault_class {};
-
-struct trace_event_data_offsets_dax_pmd_load_hole_class {};
-
-struct trace_event_data_offsets_dax_pmd_insert_mapping_class {};
-
-struct trace_event_data_offsets_dax_pte_fault_class {};
-
-struct trace_event_data_offsets_dax_insert_mapping {};
-
-struct trace_event_data_offsets_dax_writeback_range_class {};
-
-struct trace_event_data_offsets_dax_writeback_one {};
-
-typedef void (*btf_trace_dax_pmd_fault)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_fault_done)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_load_hole)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_load_hole_fallback)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_insert_mapping)(void *, struct inode *, struct vm_fault *, long int, pfn_t, void *);
-
-typedef void (*btf_trace_dax_pte_fault)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_pte_fault_done)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_load_hole)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite_no_entry)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_mapping)(void *, struct inode *, struct vm_fault *, void *);
-
-typedef void (*btf_trace_dax_writeback_range)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_range_done)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_one)(void *, struct inode *, long unsigned int, long unsigned int);
-
-struct exceptional_entry_key {
-	struct xarray *xa;
-	long unsigned int entry_start;
-};
-
-struct wait_exceptional_entry_queue {
-	wait_queue_entry_t wait;
-	struct exceptional_entry_key key;
-};
-
-struct crypto_skcipher;
-
-struct fscrypt_blk_crypto_key;
-
-struct fscrypt_prepared_key {
-	struct crypto_skcipher *tfm;
-	struct fscrypt_blk_crypto_key *blk_key;
-};
-
-struct fscrypt_mode;
-
-struct fscrypt_direct_key;
-
-struct fscrypt_info {
-	struct fscrypt_prepared_key ci_enc_key;
-	bool ci_owns_key;
-	bool ci_inlinecrypt;
-	struct fscrypt_mode *ci_mode;
-	struct inode *ci_inode;
-	struct key *ci_master_key;
-	struct list_head ci_master_key_link;
-	struct fscrypt_direct_key *ci_direct_key;
-	siphash_key_t ci_dirhash_key;
-	bool ci_dirhash_key_initialized;
-	union fscrypt_policy ci_policy;
-	u8 ci_nonce[16];
-	u32 ci_hashed_ino;
-};
-
-struct crypto_async_request;
-
-typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
-
-struct crypto_async_request {
-	struct list_head list;
-	crypto_completion_t complete;
-	void *data;
-	struct crypto_tfm *tfm;
-	u32 flags;
-};
-
-struct crypto_wait {
-	struct completion completion;
-	int err;
-};
-
-struct skcipher_request {
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	struct crypto_async_request base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_skcipher {
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct fscrypt_mode {
-	const char *friendly_name;
-	const char *cipher_str;
-	int keysize;
-	int ivsize;
-	int logged_impl_name;
-	enum blk_crypto_mode_num blk_crypto_mode;
-};
-
-typedef enum {
-	FS_DECRYPT = 0,
-	FS_ENCRYPT = 1,
-} fscrypt_direction_t;
-
-union fscrypt_iv {
-	struct {
-		__le64 lblk_num;
-		u8 nonce[16];
-	};
-	u8 raw[32];
-	__le64 dun[4];
-};
-
-struct fscrypt_str {
-	unsigned char *name;
-	u32 len;
-};
-
 struct fscrypt_name {
 	const struct qstr *usr_fname;
 	struct fscrypt_str disk_name;
@@ -40576,844 +89339,1785 @@
 	bool is_nokey_name;
 };
 
-struct fscrypt_nokey_name {
-	u32 dirhash[2];
-	u8 bytes[149];
-	u8 sha256[32];
-};
-
-struct shash_alg {
-	int (*init)(struct shash_desc *);
-	int (*update)(struct shash_desc *, const u8 *, unsigned int);
-	int (*final)(struct shash_desc *, u8 *);
-	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*export)(struct shash_desc *, void *);
-	int (*import)(struct shash_desc *, const void *);
-	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_shash *);
-	void (*exit_tfm)(struct crypto_shash *);
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int digestsize;
-	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fscrypt_hkdf {
-	struct crypto_shash *hmac_tfm;
-};
-
-struct fscrypt_key_specifier {
-	__u32 type;
-	__u32 __reserved;
-	union {
-		__u8 __reserved[32];
-		__u8 descriptor[8];
-		__u8 identifier[16];
-	} u;
-};
-
 struct fscrypt_symlink_data {
 	__le16 len;
 	char encrypted_path[1];
 } __attribute__((packed));
 
-struct fscrypt_master_key_secret {
-	struct fscrypt_hkdf hkdf;
-	u32 size;
-	u8 raw[64];
-};
-
-struct fscrypt_master_key {
-	struct fscrypt_master_key_secret mk_secret;
-	struct rw_semaphore mk_secret_sem;
-	struct fscrypt_key_specifier mk_spec;
-	struct key *mk_users;
-	refcount_t mk_refcount;
-	struct list_head mk_decrypted_inodes;
-	spinlock_t mk_decrypted_inodes_lock;
-	struct fscrypt_prepared_key mk_direct_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[10];
-	siphash_key_t mk_ino_hash_key;
-	bool mk_ino_hash_key_initialized;
-};
-
-enum key_state {
-	KEY_IS_UNINSTANTIATED = 0,
-	KEY_IS_POSITIVE = 1,
-};
-
-struct fscrypt_provisioning_key_payload {
-	__u32 type;
-	__u32 __reserved;
-	__u8 raw[0];
-};
-
-struct fscrypt_add_key_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 raw_size;
-	__u32 key_id;
-	__u32 __reserved[8];
-	__u8 raw[0];
-};
-
-struct fscrypt_remove_key_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 removal_status_flags;
-	__u32 __reserved[5];
-};
-
-struct fscrypt_get_key_status_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 __reserved[6];
-	__u32 status;
-	__u32 status_flags;
-	__u32 user_count;
-	__u32 __out_reserved[13];
-};
-
-struct skcipher_alg {
-	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
-	int (*encrypt)(struct skcipher_request *);
-	int (*decrypt)(struct skcipher_request *);
-	int (*init)(struct crypto_skcipher *);
-	void (*exit)(struct crypto_skcipher *);
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-	unsigned int chunksize;
-	unsigned int walksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fscrypt_context_v1 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 master_key_descriptor[8];
-	u8 nonce[16];
-};
-
-struct fscrypt_context_v2 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 __reserved[4];
-	u8 master_key_identifier[16];
-	u8 nonce[16];
-};
-
-union fscrypt_context {
-	u8 version;
-	struct fscrypt_context_v1 v1;
-	struct fscrypt_context_v2 v2;
-};
-
-struct crypto_template;
-
-struct crypto_spawn;
-
-struct crypto_instance {
-	struct crypto_alg alg;
-	struct crypto_template *tmpl;
-	union {
-		struct hlist_node list;
-		struct crypto_spawn *spawns;
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_spawn {
-	struct list_head list;
-	struct crypto_alg *alg;
-	union {
-		struct crypto_instance *inst;
-		struct crypto_spawn *next;
-	};
-	const struct crypto_type *frontend;
-	u32 mask;
-	bool dead;
-	bool registered;
-};
-
-struct rtattr;
-
-struct crypto_template {
-	struct list_head list;
-	struct hlist_head instances;
-	struct module *module;
-	int (*create)(struct crypto_template *, struct rtattr **);
-	char name[128];
-};
-
-struct user_key_payload {
-	struct callback_head rcu;
-	short unsigned int datalen;
-	long: 48;
-	char data[0];
-};
-
-struct fscrypt_key {
-	__u32 mode;
-	__u8 raw[64];
-	__u32 size;
-};
-
-struct fscrypt_direct_key {
-	struct hlist_node dk_node;
-	refcount_t dk_refcount;
-	const struct fscrypt_mode *dk_mode;
-	struct fscrypt_prepared_key dk_key;
-	u8 dk_descriptor[8];
-	u8 dk_raw[64];
-};
-
-struct fscrypt_get_policy_ex_arg {
-	__u64 policy_size;
-	union {
-		__u8 version;
-		struct fscrypt_policy_v1 v1;
-		struct fscrypt_policy_v2 v2;
-	} policy;
-};
-
-struct fscrypt_dummy_policy {
-	const union fscrypt_policy *policy;
-};
-
 struct fscrypt_blk_crypto_key {
 	struct blk_crypto_key base;
 	int num_devs;
 	struct request_queue *devs[0];
 };
 
-struct fsverity_hash_alg;
-
-struct merkle_tree_params {
-	struct fsverity_hash_alg *hash_alg;
-	const u8 *hashstate;
-	unsigned int digest_size;
-	unsigned int block_size;
-	unsigned int hashes_per_block;
-	unsigned int log_blocksize;
-	unsigned int log_arity;
-	unsigned int num_levels;
-	u64 tree_size;
-	long unsigned int level0_blocks;
-	u64 level_start[8];
+union fscrypt_iv {
+	struct {
+		__le64 lblk_num;
+		u8 nonce[16];
+	};
+	u8 raw[32];
+	__le64 dun[4];
 };
 
-struct fsverity_info {
-	struct merkle_tree_params tree_params;
-	u8 root_hash[64];
-	u8 measurement[64];
-	const struct inode *inode;
+struct rpc_timer {
+	struct list_head list;
+	long unsigned int expires;
+	struct delayed_work dwork;
 };
 
-struct fsverity_enable_arg {
-	__u32 version;
-	__u32 hash_algorithm;
-	__u32 block_size;
-	__u32 salt_size;
-	__u64 salt_ptr;
-	__u32 sig_size;
-	__u32 __reserved1;
-	__u64 sig_ptr;
-	__u64 __reserved2[11];
-};
-
-struct crypto_ahash;
-
-struct fsverity_hash_alg {
-	struct crypto_ahash *tfm;
-	const char *name;
-	unsigned int digest_size;
-	unsigned int block_size;
-	mempool_t req_pool;
-};
-
-struct ahash_request;
-
-struct crypto_ahash {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct fsverity_descriptor {
-	__u8 version;
-	__u8 hash_algorithm;
-	__u8 log_blocksize;
-	__u8 salt_size;
-	__le32 sig_size;
-	__le64 data_size;
-	__u8 root_hash[64];
-	__u8 salt[32];
-	__u8 __reserved[144];
-	__u8 signature[0];
-};
-
-struct ahash_request {
-	struct crypto_async_request base;
-	unsigned int nbytes;
-	struct scatterlist *src;
-	u8 *result;
-	void *priv;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct hash_alg_common {
-	unsigned int digestsize;
-	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fsverity_digest {
-	__u16 digest_algorithm;
-	__u16 digest_size;
-	__u8 digest[0];
-};
-
-struct flock64 {
-	short int l_type;
-	short int l_whence;
-	__kernel_loff_t l_start;
-	__kernel_loff_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct trace_event_raw_locks_get_lock_context {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	unsigned char type;
-	struct file_lock_context *ctx;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lock {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_pid;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	loff_t fl_start;
-	loff_t fl_end;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lease {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	char __data[0];
-};
-
-struct trace_event_raw_generic_add_lease {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	int wcount;
-	int rcount;
-	int icount;
-	dev_t s_dev;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	char __data[0];
-};
-
-struct trace_event_raw_leases_conflict {
-	struct trace_entry ent;
-	void *lease;
-	void *breaker;
-	unsigned int l_fl_flags;
-	unsigned int b_fl_flags;
-	unsigned char l_fl_type;
-	unsigned char b_fl_type;
-	bool conflict;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_locks_get_lock_context {};
-
-struct trace_event_data_offsets_filelock_lock {};
-
-struct trace_event_data_offsets_filelock_lease {};
-
-struct trace_event_data_offsets_generic_add_lease {};
-
-struct trace_event_data_offsets_leases_conflict {};
-
-typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
-
-typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
-
-struct file_lock_list_struct {
+struct rpc_wait_queue {
 	spinlock_t lock;
-	struct hlist_head hlist;
-};
-
-struct locks_iterator {
-	int li_cpu;
-	loff_t li_pos;
-};
-
-typedef unsigned int __kernel_uid_t;
-
-typedef unsigned int __kernel_gid_t;
-
-struct gnu_property {
-	u32 pr_type;
-	u32 pr_datasz;
-};
-
-struct elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	long unsigned int pr_flag;
-	__kernel_uid_t pr_uid;
-	__kernel_gid_t pr_gid;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct core_vma_metadata {
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int flags;
-	long unsigned int dump_size;
-};
-
-struct memelfnote {
+	struct list_head tasks[4];
+	unsigned char maxpriority;
+	unsigned char priority;
+	unsigned char nr;
+	short unsigned int qlen;
+	struct rpc_timer timer_list;
 	const char *name;
-	int type;
-	unsigned int datasz;
-	void *data;
 };
 
-struct elf_thread_core_info {
-	struct elf_thread_core_info *next;
-	struct task_struct *task;
-	struct elf_prstatus prstatus;
-	struct memelfnote notes[0];
+struct nfs_seqid_counter {
+	ktime_t create_time;
+	int owner_id;
+	int flags;
+	u32 counter;
+	spinlock_t lock;
+	struct list_head list;
+	struct rpc_wait_queue wait;
 };
 
-struct elf_note_info {
-	struct elf_thread_core_info *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
+struct nfs4_stateid_struct {
+	union {
+		char data[16];
+		struct {
+			__be32 seqid;
+			char other[12];
+		};
+	};
+	enum {
+		NFS4_INVALID_STATEID_TYPE = 0,
+		NFS4_SPECIAL_STATEID_TYPE = 1,
+		NFS4_OPEN_STATEID_TYPE = 2,
+		NFS4_LOCK_STATEID_TYPE = 3,
+		NFS4_DELEGATION_STATEID_TYPE = 4,
+		NFS4_LAYOUT_STATEID_TYPE = 5,
+		NFS4_PNFS_DS_STATEID_TYPE = 6,
+		NFS4_REVOKED_STATEID_TYPE = 7,
+	} type;
 };
 
-struct elf32_shdr {
-	Elf32_Word sh_name;
-	Elf32_Word sh_type;
-	Elf32_Word sh_flags;
-	Elf32_Addr sh_addr;
-	Elf32_Off sh_offset;
-	Elf32_Word sh_size;
-	Elf32_Word sh_link;
-	Elf32_Word sh_info;
-	Elf32_Word sh_addralign;
-	Elf32_Word sh_entsize;
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+struct nfs4_state;
+
+struct nfs4_lock_state {
+	struct list_head ls_locks;
+	struct nfs4_state *ls_state;
+	long unsigned int ls_flags;
+	struct nfs_seqid_counter ls_seqid;
+	nfs4_stateid ls_stateid;
+	refcount_t ls_count;
+	fl_owner_t ls_owner;
 };
 
-typedef u16 __compat_uid_t;
-
-typedef u16 __compat_gid_t;
-
-typedef unsigned int compat_elf_greg_t;
-
-typedef compat_elf_greg_t compat_elf_gregset_t[18];
-
-struct compat_elf_siginfo {
-	compat_int_t si_signo;
-	compat_int_t si_code;
-	compat_int_t si_errno;
+struct xdr_netobj {
+	unsigned int len;
+	u8 *data;
 };
 
-struct compat_elf_prstatus {
-	struct compat_elf_siginfo pr_info;
-	short int pr_cursig;
-	compat_ulong_t pr_sigpend;
-	compat_ulong_t pr_sighold;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	struct old_timeval32 pr_utime;
-	struct old_timeval32 pr_stime;
-	struct old_timeval32 pr_cutime;
-	struct old_timeval32 pr_cstime;
-	compat_elf_gregset_t pr_reg;
-	compat_int_t pr_fpvalid;
-};
-
-struct compat_elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	compat_ulong_t pr_flag;
-	__compat_uid_t pr_uid;
-	__compat_gid_t pr_gid;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct elf_thread_core_info___2 {
-	struct elf_thread_core_info___2 *next;
-	struct task_struct *task;
-	struct compat_elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info___2 {
-	struct elf_thread_core_info___2 *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	compat_siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct mb_cache_entry {
-	struct list_head e_list;
-	struct hlist_bl_node e_hash_list;
-	atomic_t e_refcnt;
-	u32 e_key;
-	u32 e_referenced: 1;
-	u32 e_reusable: 1;
-	u64 e_value;
-};
-
-struct mb_cache {
-	struct hlist_bl_head *c_hash;
-	int c_bucket_bits;
-	long unsigned int c_max_entries;
-	spinlock_t c_list_lock;
-	struct list_head c_list;
-	long unsigned int c_entry_count;
-	struct shrinker c_shrink;
-	struct work_struct c_shrink_work;
-};
-
-struct posix_acl_xattr_entry {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-};
-
-struct posix_acl_xattr_header {
-	__le32 a_version;
-};
-
-struct core_name {
-	char *corename;
-	int used;
-	int size;
-};
-
-struct trace_event_raw_iomap_readpage_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	int nr_pages;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_range_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t size;
-	long unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	dev_t bdev;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_apply {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t pos;
-	loff_t length;
+struct xdr_buf {
+	struct kvec head[1];
+	struct kvec tail[1];
+	struct bio_vec *bvec;
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
 	unsigned int flags;
-	const void *ops;
-	void *actor;
-	long unsigned int caller;
-	char __data[0];
+	unsigned int buflen;
+	unsigned int len;
 };
 
-struct trace_event_data_offsets_iomap_readpage_class {};
+struct rpc_rqst;
 
-struct trace_event_data_offsets_iomap_range_class {};
-
-struct trace_event_data_offsets_iomap_class {};
-
-struct trace_event_data_offsets_iomap_apply {};
-
-typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_releasepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply)(void *, struct inode *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);
-
-typedef loff_t (*iomap_actor_t)(struct inode *, loff_t, loff_t, void *, struct iomap___2 *, struct iomap___2 *);
-
-struct iomap_ioend {
-	struct list_head io_list;
-	u16 io_type;
-	u16 io_flags;
-	struct inode *io_inode;
-	size_t io_size;
-	loff_t io_offset;
-	void *io_private;
-	struct bio *io_bio;
-	struct bio io_inline_bio;
+struct xdr_stream {
+	__be32 *p;
+	struct xdr_buf *buf;
+	__be32 *end;
+	struct kvec *iov;
+	struct kvec scratch;
+	struct page **page_ptr;
+	unsigned int nwords;
+	struct rpc_rqst *rqst;
 };
 
-struct iomap_writepage_ctx;
+struct rpc_xprt;
 
-struct iomap_writeback_ops {
-	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
-	int (*prepare_ioend)(struct iomap_ioend *, int);
-	void (*discard_page)(struct page *, loff_t);
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+	struct rpc_xprt *rq_xprt;
+	struct xdr_buf rq_snd_buf;
+	struct xdr_buf rq_rcv_buf;
+	struct rpc_task *rq_task;
+	struct rpc_cred *rq_cred;
+	__be32 rq_xid;
+	int rq_cong;
+	u32 rq_seqno;
+	int rq_enc_pages_num;
+	struct page **rq_enc_pages;
+	void (*rq_release_snd_buf)(struct rpc_rqst *);
+	union {
+		struct list_head rq_list;
+		struct rb_node rq_recv;
+	};
+	struct list_head rq_xmit;
+	struct list_head rq_xmit2;
+	void *rq_buffer;
+	size_t rq_callsize;
+	void *rq_rbuffer;
+	size_t rq_rcvsize;
+	size_t rq_xmit_bytes_sent;
+	size_t rq_reply_bytes_recvd;
+	struct xdr_buf rq_private_buf;
+	long unsigned int rq_majortimeo;
+	long unsigned int rq_minortimeo;
+	long unsigned int rq_timeout;
+	ktime_t rq_rtt;
+	unsigned int rq_retries;
+	unsigned int rq_connect_cookie;
+	atomic_t rq_pin;
+	u32 rq_bytes_sent;
+	ktime_t rq_xtime;
+	int rq_ntrans;
+	struct list_head rq_bc_list;
+	long unsigned int rq_bc_pa_state;
+	struct list_head rq_bc_pa_list;
 };
 
-struct iomap_writepage_ctx {
-	struct iomap___2 iomap;
-	struct iomap_ioend *ioend;
-	const struct iomap_writeback_ops *ops;
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+	const struct rpc_procinfo *rpc_proc;
+	void *rpc_argp;
+	void *rpc_resp;
+	const struct cred *rpc_cred;
 };
 
-struct iomap_page {
-	atomic_t read_bytes_pending;
-	atomic_t write_bytes_pending;
-	spinlock_t uptodate_lock;
-	long unsigned int uptodate[0];
+struct rpc_procinfo {
+	u32 p_proc;
+	kxdreproc_t p_encode;
+	kxdrdproc_t p_decode;
+	unsigned int p_arglen;
+	unsigned int p_replen;
+	unsigned int p_timer;
+	u32 p_statidx;
+	const char *p_name;
 };
 
-struct iomap_readpage_ctx {
-	struct page *cur_page;
-	bool cur_page_in_bio;
-	struct bio *bio;
-	struct readahead_control *rac;
+struct rpc_wait {
+	struct list_head list;
+	struct list_head links;
+	struct list_head timer_list;
 };
 
-enum {
-	IOMAP_WRITE_F_UNSHARE = 1,
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+	atomic_t tk_count;
+	int tk_status;
+	struct list_head tk_task;
+	void (*tk_callback)(struct rpc_task *);
+	void (*tk_action)(struct rpc_task *);
+	long unsigned int tk_timeout;
+	long unsigned int tk_runstate;
+	struct rpc_wait_queue *tk_waitqueue;
+	union {
+		struct work_struct tk_work;
+		struct rpc_wait tk_wait;
+	} u;
+	struct rpc_message tk_msg;
+	void *tk_calldata;
+	const struct rpc_call_ops *tk_ops;
+	struct rpc_clnt *tk_client;
+	struct rpc_xprt *tk_xprt;
+	struct rpc_cred *tk_op_cred;
+	struct rpc_rqst *tk_rqstp;
+	struct workqueue_struct *tk_workqueue;
+	ktime_t tk_start;
+	pid_t tk_owner;
+	int tk_rpc_status;
+	short unsigned int tk_flags;
+	short unsigned int tk_timeouts;
+	short unsigned int tk_pid;
+	unsigned char tk_priority: 2;
+	unsigned char tk_garb_retry: 2;
+	unsigned char tk_cred_retry: 2;
+	unsigned char tk_rebind_retry: 2;
 };
 
-struct iomap_dio_ops {
-	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
-	blk_qc_t (*submit_io)(struct inode *, struct iomap___2 *, struct bio *, loff_t);
+struct rpc_call_ops {
+	void (*rpc_call_prepare)(struct rpc_task *, void *);
+	void (*rpc_call_done)(struct rpc_task *, void *);
+	void (*rpc_count_stats)(struct rpc_task *, void *);
+	void (*rpc_release)(void *);
 };
 
-struct iomap_dio {
-	struct kiocb *iocb;
-	const struct iomap_dio_ops *dops;
-	loff_t i_size;
-	loff_t size;
-	atomic_t ref;
+struct rpc_iostats;
+
+struct rpc_pipe_dir_head {
+	struct list_head pdh_entries;
+	struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+	long unsigned int timeo;
+	long unsigned int srtt[5];
+	long unsigned int sdrtt[5];
+	int ntimeouts[5];
+};
+
+struct rpc_timeout {
+	long unsigned int to_initval;
+	long unsigned int to_maxval;
+	long unsigned int to_increment;
+	unsigned int to_retries;
+	unsigned char to_exponential;
+};
+
+struct rpc_sysfs_client;
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+	struct rpc_xprt_switch *xpi_xpswitch;
+	struct rpc_xprt *xpi_cursor;
+	const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_program;
+
+struct rpc_clnt {
+	refcount_t cl_count;
+	unsigned int cl_clid;
+	struct list_head cl_clients;
+	struct list_head cl_tasks;
+	atomic_t cl_pid;
+	spinlock_t cl_lock;
+	struct rpc_xprt *cl_xprt;
+	const struct rpc_procinfo *cl_procinfo;
+	u32 cl_prog;
+	u32 cl_vers;
+	u32 cl_maxproc;
+	struct rpc_auth *cl_auth;
+	struct rpc_stat *cl_stats;
+	struct rpc_iostats *cl_metrics;
+	unsigned int cl_softrtry: 1;
+	unsigned int cl_softerr: 1;
+	unsigned int cl_discrtry: 1;
+	unsigned int cl_noretranstimeo: 1;
+	unsigned int cl_autobind: 1;
+	unsigned int cl_chatty: 1;
+	struct rpc_rtt *cl_rtt;
+	const struct rpc_timeout *cl_timeout;
+	atomic_t cl_swapper;
+	int cl_nodelen;
+	char cl_nodename[65];
+	struct rpc_pipe_dir_head cl_pipedir_objects;
+	struct rpc_clnt *cl_parent;
+	struct rpc_rtt cl_rtt_default;
+	struct rpc_timeout cl_timeout_default;
+	const struct rpc_program *cl_program;
+	const char *cl_principal;
+	struct dentry *cl_debugfs;
+	struct rpc_sysfs_client *cl_sysfs;
+	union {
+		struct rpc_xprt_iter cl_xpi;
+		struct work_struct cl_work;
+	};
+	const struct cred *cl_cred;
+	unsigned int cl_max_connect;
+};
+
+struct svc_xprt;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt_ops;
+
+struct svc_serv;
+
+struct xprt_class;
+
+struct rpc_xprt {
+	struct kref kref;
+	const struct rpc_xprt_ops *ops;
+	unsigned int id;
+	const struct rpc_timeout *timeout;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	int prot;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	size_t max_payload;
+	struct rpc_wait_queue binding;
+	struct rpc_wait_queue sending;
+	struct rpc_wait_queue pending;
+	struct rpc_wait_queue backlog;
+	struct list_head free;
+	unsigned int max_reqs;
+	unsigned int min_reqs;
+	unsigned int num_reqs;
+	long unsigned int state;
+	unsigned char resvport: 1;
+	unsigned char reuseport: 1;
+	atomic_t swapper;
+	unsigned int bind_index;
+	struct list_head xprt_switch;
+	long unsigned int bind_timeout;
+	long unsigned int reestablish_timeout;
+	unsigned int connect_cookie;
+	struct work_struct task_cleanup;
+	struct timer_list timer;
+	long unsigned int last_used;
+	long unsigned int idle_timeout;
+	long unsigned int connect_timeout;
+	long unsigned int max_reconnect_timeout;
+	atomic_long_t queuelen;
+	spinlock_t transport_lock;
+	spinlock_t reserve_lock;
+	spinlock_t queue_lock;
+	u32 xid;
+	struct rpc_task *snd_task;
+	struct list_head xmit_queue;
+	atomic_long_t xmit_queuelen;
+	struct svc_xprt *bc_xprt;
+	struct svc_serv *bc_serv;
+	unsigned int bc_alloc_max;
+	unsigned int bc_alloc_count;
+	atomic_t bc_slot_count;
+	spinlock_t bc_pa_lock;
+	struct list_head bc_pa_list;
+	struct rb_root recv_queue;
+	struct {
+		long unsigned int bind_count;
+		long unsigned int connect_count;
+		long unsigned int connect_start;
+		long unsigned int connect_time;
+		long unsigned int sends;
+		long unsigned int recvs;
+		long unsigned int bad_xids;
+		long unsigned int max_slots;
+		long long unsigned int req_u;
+		long long unsigned int bklog_u;
+		long long unsigned int sending_u;
+		long long unsigned int pending_u;
+	} stat;
+	struct net *xprt_net;
+	netns_tracker ns_tracker;
+	const char *servername;
+	const char *address_strings[6];
+	struct dentry *debugfs;
+	struct callback_head rcu;
+	const struct xprt_class *xprt_class;
+	struct rpc_sysfs_xprt *xprt_sysfs;
+	bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+	struct hlist_node cr_hash;
+	struct list_head cr_lru;
+	struct callback_head cr_rcu;
+	struct rpc_auth *cr_auth;
+	const struct rpc_credops *cr_ops;
+	long unsigned int cr_expire;
+	long unsigned int cr_flags;
+	refcount_t cr_count;
+	const struct cred *cr_cred;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+	const struct cred *cred;
+	const char *principal;
+};
+
+struct rpc_cred_cache;
+
+struct rpc_authops;
+
+struct rpc_auth {
+	unsigned int au_cslack;
+	unsigned int au_rslack;
+	unsigned int au_verfsize;
+	unsigned int au_ralign;
+	long unsigned int au_flags;
+	const struct rpc_authops *au_ops;
+	rpc_authflavor_t au_flavor;
+	refcount_t au_count;
+	struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+	const char *cr_name;
+	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+	void (*crdestroy)(struct rpc_cred *);
+	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+	int (*crrefresh)(struct rpc_task *);
+	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+	int (*crkey_timeout)(struct rpc_cred *);
+	char * (*crstringify_acceptor)(struct rpc_cred *);
+	bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+	struct module *owner;
+	rpc_authflavor_t au_flavor;
+	char *au_name;
+	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+	void (*destroy)(struct rpc_auth *);
+	int (*hash_cred)(struct auth_cred *, unsigned int);
+	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+};
+
+struct rpc_auth_create_args {
+	rpc_authflavor_t pseudoflavor;
+	const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+	unsigned int len;
+	u8 data[32];
+};
+
+struct rpcsec_gss_info {
+	struct rpcsec_gss_oid oid;
+	u32 qop;
+	u32 service;
+};
+
+struct rpc_xprt_ops {
+	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+	void (*rpcbind)(struct rpc_task *);
+	void (*set_port)(struct rpc_xprt *, short unsigned int);
+	void (*connect)(struct rpc_xprt *, struct rpc_task *);
+	int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+	short unsigned int (*get_srcport)(struct rpc_xprt *);
+	int (*buf_alloc)(struct rpc_task *);
+	void (*buf_free)(struct rpc_task *);
+	int (*prepare_request)(struct rpc_rqst *, struct xdr_buf *);
+	int (*send_request)(struct rpc_rqst *);
+	void (*wait_for_reply_request)(struct rpc_task *);
+	void (*timer)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_request)(struct rpc_task *);
+	void (*close)(struct rpc_xprt *);
+	void (*destroy)(struct rpc_xprt *);
+	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+	int (*enable_swap)(struct rpc_xprt *);
+	void (*disable_swap)(struct rpc_xprt *);
+	void (*inject_disconnect)(struct rpc_xprt *);
+	int (*bc_setup)(struct rpc_xprt *, unsigned int);
+	size_t (*bc_maxpayload)(struct rpc_xprt *);
+	unsigned int (*bc_num_slots)(struct rpc_xprt *);
+	void (*bc_free_rqst)(struct rpc_rqst *);
+	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_pool;
+
+struct svc_serv {
+	struct svc_program *sv_program;
+	struct svc_stat *sv_stats;
+	spinlock_t sv_lock;
+	struct kref sv_refcnt;
+	unsigned int sv_nrthreads;
+	unsigned int sv_maxconn;
+	unsigned int sv_max_payload;
+	unsigned int sv_max_mesg;
+	unsigned int sv_xdrsize;
+	struct list_head sv_permsocks;
+	struct list_head sv_tempsocks;
+	int sv_tmpcnt;
+	struct timer_list sv_temptimer;
+	char *sv_name;
+	unsigned int sv_nrpools;
+	struct svc_pool *sv_pools;
+	int (*sv_threadfn)(void *);
+	struct list_head sv_cb_list;
+	spinlock_t sv_cb_lock;
+	wait_queue_head_t sv_cb_waitq;
+	bool sv_bc_enabled;
+};
+
+struct xprt_create;
+
+struct xprt_class {
+	struct list_head list;
+	int ident;
+	struct rpc_xprt * (*setup)(struct xprt_create *);
+	struct module *owner;
+	char name[32];
+	const char *netid[0];
+};
+
+struct xprt_create {
+	int ident;
+	struct net *net;
+	struct sockaddr *srcaddr;
+	struct sockaddr *dstaddr;
+	size_t addrlen;
+	const char *servername;
+	struct svc_xprt *bc_xprt;
+	struct rpc_xprt_switch *bc_xps;
 	unsigned int flags;
-	int error;
-	bool wait_for_completion;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+	spinlock_t xps_lock;
+	struct kref xps_kref;
+	unsigned int xps_id;
+	unsigned int xps_nxprts;
+	unsigned int xps_nactive;
+	unsigned int xps_nunique_destaddr_xprts;
+	atomic_long_t xps_queuelen;
+	struct list_head xps_xprt_list;
+	struct net *xps_net;
+	const struct rpc_xprt_iter_ops *xps_iter_ops;
+	struct rpc_sysfs_xprt_switch *xps_sysfs;
+	struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+	const struct rpc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int netreconn;
+	unsigned int rpccnt;
+	unsigned int rpcretrans;
+	unsigned int rpcauthrefresh;
+	unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+	const char *name;
+	u32 number;
+	unsigned int nrvers;
+	const struct rpc_version **version;
+	struct rpc_stat *stats;
+	const char *pipe_dir_name;
+};
+
+struct svc_stat {
+	struct svc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int rpccnt;
+	unsigned int rpcbadfmt;
+	unsigned int rpcbadauth;
+	unsigned int rpcbadclnt;
+};
+
+struct svc_version;
+
+struct svc_rqst;
+
+struct svc_process_info;
+
+struct svc_program {
+	struct svc_program *pg_next;
+	u32 pg_prog;
+	unsigned int pg_lovers;
+	unsigned int pg_hivers;
+	unsigned int pg_nvers;
+	const struct svc_version **pg_vers;
+	char *pg_name;
+	char *pg_class;
+	struct svc_stat *pg_stats;
+	int (*pg_authenticate)(struct svc_rqst *);
+	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct rpc_xprt_iter_ops {
+	void (*xpi_rewind)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_version {
+	u32 number;
+	unsigned int nrprocs;
+	const struct rpc_procinfo *procs;
+	unsigned int *counts;
+};
+
+struct nfs_fh {
+	short unsigned int size;
+	unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+	NFS_UNSTABLE = 0,
+	NFS_DATA_SYNC = 1,
+	NFS_FILE_SYNC = 2,
+	NFS_INVALID_STABLE_HOW = 4294967295,
+};
+
+struct nfs4_label {
+	uint32_t lfs;
+	uint32_t pi;
+	u32 len;
+	char *label;
+};
+
+typedef struct {
+	char data[8];
+} nfs4_verifier;
+
+enum nfs_opnum4 {
+	OP_ACCESS = 3,
+	OP_CLOSE = 4,
+	OP_COMMIT = 5,
+	OP_CREATE = 6,
+	OP_DELEGPURGE = 7,
+	OP_DELEGRETURN = 8,
+	OP_GETATTR = 9,
+	OP_GETFH = 10,
+	OP_LINK = 11,
+	OP_LOCK = 12,
+	OP_LOCKT = 13,
+	OP_LOCKU = 14,
+	OP_LOOKUP = 15,
+	OP_LOOKUPP = 16,
+	OP_NVERIFY = 17,
+	OP_OPEN = 18,
+	OP_OPENATTR = 19,
+	OP_OPEN_CONFIRM = 20,
+	OP_OPEN_DOWNGRADE = 21,
+	OP_PUTFH = 22,
+	OP_PUTPUBFH = 23,
+	OP_PUTROOTFH = 24,
+	OP_READ = 25,
+	OP_READDIR = 26,
+	OP_READLINK = 27,
+	OP_REMOVE = 28,
+	OP_RENAME = 29,
+	OP_RENEW = 30,
+	OP_RESTOREFH = 31,
+	OP_SAVEFH = 32,
+	OP_SECINFO = 33,
+	OP_SETATTR = 34,
+	OP_SETCLIENTID = 35,
+	OP_SETCLIENTID_CONFIRM = 36,
+	OP_VERIFY = 37,
+	OP_WRITE = 38,
+	OP_RELEASE_LOCKOWNER = 39,
+	OP_BACKCHANNEL_CTL = 40,
+	OP_BIND_CONN_TO_SESSION = 41,
+	OP_EXCHANGE_ID = 42,
+	OP_CREATE_SESSION = 43,
+	OP_DESTROY_SESSION = 44,
+	OP_FREE_STATEID = 45,
+	OP_GET_DIR_DELEGATION = 46,
+	OP_GETDEVICEINFO = 47,
+	OP_GETDEVICELIST = 48,
+	OP_LAYOUTCOMMIT = 49,
+	OP_LAYOUTGET = 50,
+	OP_LAYOUTRETURN = 51,
+	OP_SECINFO_NO_NAME = 52,
+	OP_SEQUENCE = 53,
+	OP_SET_SSV = 54,
+	OP_TEST_STATEID = 55,
+	OP_WANT_DELEGATION = 56,
+	OP_DESTROY_CLIENTID = 57,
+	OP_RECLAIM_COMPLETE = 58,
+	OP_ALLOCATE = 59,
+	OP_COPY = 60,
+	OP_COPY_NOTIFY = 61,
+	OP_DEALLOCATE = 62,
+	OP_IO_ADVISE = 63,
+	OP_LAYOUTERROR = 64,
+	OP_LAYOUTSTATS = 65,
+	OP_OFFLOAD_CANCEL = 66,
+	OP_OFFLOAD_STATUS = 67,
+	OP_READ_PLUS = 68,
+	OP_SEEK = 69,
+	OP_WRITE_SAME = 70,
+	OP_CLONE = 71,
+	OP_GETXATTR = 72,
+	OP_SETXATTR = 73,
+	OP_LISTXATTRS = 74,
+	OP_REMOVEXATTR = 75,
+	OP_ILLEGAL = 10044,
+};
+
+enum nfs4_change_attr_type {
+	NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+	NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+	NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+	struct gss_api_mech *mech_type;
+	void *internal_ctx_id;
+	unsigned int slack;
+	unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+	struct list_head gm_list;
+	struct module *gm_owner;
+	struct rpcsec_gss_oid gm_oid;
+	char *gm_name;
+	const struct gss_api_ops *gm_ops;
+	int gm_pf_num;
+	struct pf_desc *gm_pfs;
+	const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+	u32 pseudoflavor;
+	u32 qop;
+	u32 service;
+	char *name;
+	char *auth_domain_name;
+	struct auth_domain *domain;
+	bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+	struct kref ref;
+	struct hlist_node hash;
+	char *name;
+	struct auth_ops *flavour;
+	struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+	u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+	void (*gss_delete_sec_context)(void *);
+};
+
+struct nfs4_string {
+	unsigned int len;
+	char *data;
+};
+
+struct nfs_fsid {
+	uint64_t major;
+	uint64_t minor;
+};
+
+struct nfs4_threshold {
+	__u32 bm;
+	__u32 l_type;
+	__u64 rd_sz;
+	__u64 wr_sz;
+	__u64 rd_io_sz;
+	__u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+	unsigned int valid;
+	umode_t mode;
+	__u32 nlink;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	__u64 size;
 	union {
 		struct {
-			struct iov_iter *iter;
-			struct task_struct *waiter;
-			struct request_queue *last_queue;
-			blk_qc_t cookie;
-		} submit;
+			__u32 blocksize;
+			__u32 blocks;
+		} nfs2;
 		struct {
-			struct work_struct work;
-		} aio;
+			__u64 used;
+		} nfs3;
+	} du;
+	struct nfs_fsid fsid;
+	__u64 fileid;
+	__u64 mounted_on_fileid;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	__u64 change_attr;
+	__u64 pre_change_attr;
+	__u64 pre_size;
+	struct timespec64 pre_mtime;
+	struct timespec64 pre_ctime;
+	long unsigned int time_start;
+	long unsigned int gencount;
+	struct nfs4_string *owner_name;
+	struct nfs4_string *group_name;
+	struct nfs4_threshold *mdsthreshold;
+	struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+	struct nfs_fattr *fattr;
+	__u32 rtmax;
+	__u32 rtpref;
+	__u32 rtmult;
+	__u32 wtmax;
+	__u32 wtpref;
+	__u32 wtmult;
+	__u32 dtpref;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	__u32 lease_time;
+	__u32 nlayouttypes;
+	__u32 layouttype[8];
+	__u32 blksize;
+	__u32 clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	__u32 xattr_support;
+};
+
+struct nfs_fsstat {
+	struct nfs_fattr *fattr;
+	__u64 tbytes;
+	__u64 fbytes;
+	__u64 abytes;
+	__u64 tfiles;
+	__u64 ffiles;
+	__u64 afiles;
+};
+
+struct nfs_pathconf {
+	struct nfs_fattr *fattr;
+	__u32 max_link;
+	__u32 max_namelen;
+};
+
+struct nfs4_change_info {
+	u32 atomic;
+	u64 before;
+	u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+	struct nfs4_slot *sa_slot;
+	u8 sa_cache_this: 1;
+	u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+	struct nfs4_slot *sr_slot;
+	long unsigned int sr_timestamp;
+	int sr_status;
+	u32 sr_status_flags;
+	u32 sr_highest_slotid;
+	u32 sr_target_highest_slotid;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+	refcount_t count;
+	struct list_head list;
+	struct nfs_open_context *open_context;
+	fl_owner_t lockowner;
+	atomic_t io_count;
+	struct callback_head callback_head;
+};
+
+struct nfs_open_context {
+	struct nfs_lock_context lock_context;
+	fl_owner_t flock_owner;
+	struct dentry *dentry;
+	const struct cred *cred;
+	struct rpc_cred *ll_cred;
+	struct nfs4_state *state;
+	fmode_t mode;
+	long unsigned int flags;
+	int error;
+	struct list_head list;
+	struct nfs4_threshold *mdsthreshold;
+	struct callback_head callback_head;
+};
+
+struct nlm_host;
+
+struct nfs_iostats;
+
+struct nfs_auth_info {
+	unsigned int flavor_len;
+	rpc_authflavor_t flavors[12];
+};
+
+struct fscache_volume;
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_client;
+
+struct nfs_server {
+	struct nfs_client *nfs_client;
+	struct list_head client_link;
+	struct list_head master_link;
+	struct rpc_clnt *client;
+	struct rpc_clnt *client_acl;
+	struct nlm_host *nlm_host;
+	struct nfs_iostats *io_stats;
+	atomic_long_t writeback;
+	unsigned int write_congested;
+	unsigned int flags;
+	unsigned int fattr_valid;
+	unsigned int caps;
+	unsigned int rsize;
+	unsigned int rpages;
+	unsigned int wsize;
+	unsigned int wpages;
+	unsigned int wtmult;
+	unsigned int dtsize;
+	short unsigned int port;
+	unsigned int bsize;
+	unsigned int gxasize;
+	unsigned int sxasize;
+	unsigned int lxasize;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namelen;
+	unsigned int options;
+	unsigned int clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	struct nfs_fsid fsid;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	long unsigned int mount_time;
+	struct super_block *super;
+	dev_t s_dev;
+	struct nfs_auth_info auth_info;
+	struct fscache_volume *fscache;
+	char *fscache_uniq;
+	u32 pnfs_blksize;
+	u32 attr_bitmask[3];
+	u32 attr_bitmask_nl[3];
+	u32 exclcreat_bitmask[3];
+	u32 cache_consistency_bitmask[3];
+	u32 acl_bitmask;
+	u32 fh_expire_type;
+	struct pnfs_layoutdriver_type *pnfs_curr_ld;
+	struct rpc_wait_queue roc_rpcwaitq;
+	void *pnfs_ld_data;
+	struct rb_root state_owners;
+	struct ida openowner_id;
+	struct ida lockowner_id;
+	struct list_head state_owners_lru;
+	struct list_head layouts;
+	struct list_head delegations;
+	struct list_head ss_copies;
+	long unsigned int mig_gen;
+	long unsigned int mig_status;
+	void (*destroy)(struct nfs_server *);
+	atomic_t active;
+	struct __kernel_sockaddr_storage mountd_address;
+	size_t mountd_addrlen;
+	u32 mountd_version;
+	short unsigned int mountd_port;
+	short unsigned int mountd_protocol;
+	struct rpc_wait_queue uoc_rpcwaitq;
+	unsigned int read_hdrsize;
+	const struct cred *cred;
+	bool has_sec_mnt_opts;
+};
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs_rpc_ops;
+
+struct nfs4_minor_version_ops;
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_client {
+	refcount_t cl_count;
+	atomic_t cl_mds_count;
+	int cl_cons_state;
+	long unsigned int cl_res_state;
+	long unsigned int cl_flags;
+	struct __kernel_sockaddr_storage cl_addr;
+	size_t cl_addrlen;
+	char *cl_hostname;
+	char *cl_acceptor;
+	struct list_head cl_share_link;
+	struct list_head cl_superblocks;
+	struct rpc_clnt *cl_rpcclient;
+	const struct nfs_rpc_ops *rpc_ops;
+	int cl_proto;
+	struct nfs_subversion *cl_nfs_mod;
+	u32 cl_minorversion;
+	unsigned int cl_nconnect;
+	unsigned int cl_max_connect;
+	const char *cl_principal;
+	struct list_head cl_ds_clients;
+	u64 cl_clientid;
+	nfs4_verifier cl_confirm;
+	long unsigned int cl_state;
+	spinlock_t cl_lock;
+	long unsigned int cl_lease_time;
+	long unsigned int cl_last_renewal;
+	struct delayed_work cl_renewd;
+	struct rpc_wait_queue cl_rpcwaitq;
+	struct idmap *cl_idmap;
+	const char *cl_owner_id;
+	u32 cl_cb_ident;
+	const struct nfs4_minor_version_ops *cl_mvops;
+	long unsigned int cl_mig_gen;
+	struct nfs4_slot_table *cl_slot_tbl;
+	u32 cl_seqid;
+	u32 cl_exchange_flags;
+	struct nfs4_session *cl_session;
+	bool cl_preserve_clid;
+	struct nfs41_server_owner *cl_serverowner;
+	struct nfs41_server_scope *cl_serverscope;
+	struct nfs41_impl_id *cl_implid;
+	long unsigned int cl_sp4_flags;
+	wait_queue_head_t cl_lock_waitq;
+	char cl_ipaddr[48];
+	struct net *cl_net;
+	struct list_head pending_cb_stateids;
+};
+
+struct pnfs_layout_segment;
+
+struct nfs_seqid {
+	struct nfs_seqid_counter *sequence;
+	struct list_head list;
+	struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+	char data[8];
+};
+
+struct nfs_writeverf {
+	struct nfs_write_verifier verifier;
+	enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct nfs_open_context *context;
+	struct nfs_lock_context *lock_context;
+	nfs4_stateid stateid;
+	__u64 offset;
+	__u32 count;
+	unsigned int pgbase;
+	struct page **pages;
+	union {
+		unsigned int replen;
+		struct {
+			const u32 *bitmask;
+			u32 bitmask_store[3];
+			enum nfs3_stable_how stable;
+		};
 	};
 };
 
-struct fiemap_ctx {
-	struct fiemap_extent_info *fi;
-	struct iomap___2 prev;
+struct nfs_pgio_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	__u64 count;
+	__u32 op_status;
+	union {
+		struct {
+			unsigned int replen;
+			int eof;
+		};
+		struct {
+			struct nfs_writeverf *verf;
+			const struct nfs_server *server;
+		};
+	};
 };
 
-struct iomap_swapfile_info {
-	struct iomap___2 iomap;
-	struct swap_info_struct *sis;
-	uint64_t lowest_ppage;
-	uint64_t highest_ppage;
-	long unsigned int nr_pages;
-	int nr_extents;
+struct nfs_commitargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	__u64 offset;
+	__u32 count;
+	const u32 *bitmask;
 };
 
-enum {
-	QIF_BLIMITS_B = 0,
-	QIF_SPACE_B = 1,
-	QIF_ILIMITS_B = 2,
-	QIF_INODES_B = 3,
-	QIF_BTIME_B = 4,
-	QIF_ITIME_B = 5,
+struct nfs_commitres {
+	struct nfs4_sequence_res seq_res;
+	__u32 op_status;
+	struct nfs_fattr *fattr;
+	struct nfs_writeverf *verf;
+	const struct nfs_server *server;
 };
 
-typedef __kernel_uid32_t qid_t;
+struct nfs_removeargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct qstr name;
+};
 
-enum {
-	DQF_INFO_DIRTY_B = 17,
+struct nfs_removeres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs_fattr *dir_attr;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *old_dir;
+	const struct nfs_fh *new_dir;
+	const struct qstr *old_name;
+	const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs4_change_info old_cinfo;
+	struct nfs_fattr *old_fattr;
+	struct nfs4_change_info new_cinfo;
+	struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+	__u64 ino;
+	__u64 cookie;
+	const char *name;
+	unsigned int len;
+	int eof;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	unsigned char d_type;
+	struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+	struct dentry *dentry;
+	const struct cred *cred;
+	__be32 *verf;
+	u64 cookie;
+	struct page **pages;
+	unsigned int page_len;
+	bool plus;
+};
+
+struct nfs_readdir_res {
+	__be32 *verf;
+};
+
+struct nfs4_pathname {
+	unsigned int ncomponents;
+	struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+	unsigned int nservers;
+	struct nfs4_string servers[10];
+	struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	struct nfs4_pathname fs_path;
+	int nlocations;
+	struct nfs4_fs_location locations[10];
+};
+
+struct nfstime4 {
+	u64 seconds;
+	u32 nseconds;
+};
+
+struct pnfs_commit_ops;
+
+struct pnfs_ds_commit_info {
+	struct list_head commits;
+	unsigned int nwritten;
+	unsigned int ncommitting;
+	const struct pnfs_commit_ops *ops;
+};
+
+struct nfs41_server_owner {
+	uint64_t minor_id;
+	uint32_t major_id_sz;
+	char major_id[1024];
+};
+
+struct nfs41_server_scope {
+	uint32_t server_scope_sz;
+	char server_scope[1024];
+};
+
+struct nfs41_impl_id {
+	char domain[1025];
+	char name[1025];
+	struct nfstime4 date;
+};
+
+struct nfs_page_array {
+	struct page **pagevec;
+	unsigned int npages;
+	struct page *page_array[8];
+};
+
+struct nfs_page;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_pgio_header {
+	struct inode *inode;
+	const struct cred *cred;
+	struct list_head pages;
+	struct nfs_page *req;
+	struct nfs_writeverf verf;
+	fmode_t rw_mode;
+	struct pnfs_layout_segment *lseg;
+	loff_t io_start;
+	const struct rpc_call_ops *mds_ops;
+	void (*release)(struct nfs_pgio_header *);
+	const struct nfs_pgio_completion_ops *completion_ops;
+	const struct nfs_rw_ops *rw_ops;
+	struct nfs_io_completion *io_completion;
+	struct nfs_direct_req *dreq;
+	int pnfs_error;
+	int error;
+	unsigned int good_bytes;
+	long unsigned int flags;
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct nfs_pgio_args args;
+	struct nfs_pgio_res res;
+	long unsigned int timestamp;
+	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+	__u64 mds_offset;
+	struct nfs_page_array page_array;
+	struct nfs_client *ds_clp;
+	u32 ds_commit_idx;
+	u32 pgio_mirror_idx;
+};
+
+struct nfs_pgio_completion_ops {
+	void (*error_cleanup)(struct list_head *, int);
+	void (*init_hdr)(struct nfs_pgio_header *);
+	void (*completion)(struct nfs_pgio_header *);
+	void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct nfs_mds_commit_info {
+	atomic_t rpcs_out;
+	atomic_long_t ncommit;
+	struct list_head list;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_info;
+
+struct nfs_commit_completion_ops {
+	void (*completion)(struct nfs_commit_data *);
+	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+	struct rpc_task task;
+	struct inode *inode;
+	const struct cred *cred;
+	struct nfs_fattr fattr;
+	struct nfs_writeverf verf;
+	struct list_head pages;
+	struct list_head list;
+	struct nfs_direct_req *dreq;
+	struct nfs_commitargs args;
+	struct nfs_commitres res;
+	struct nfs_open_context *context;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_client *ds_clp;
+	int ds_commit_index;
+	loff_t lwb;
+	const struct rpc_call_ops *mds_ops;
+	const struct nfs_commit_completion_ops *completion_ops;
+	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+	long unsigned int flags;
+};
+
+struct nfs_commit_info {
+	struct inode *inode;
+	struct nfs_mds_commit_info *mds;
+	struct pnfs_ds_commit_info *ds;
+	struct nfs_direct_req *dreq;
+	const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+	struct nfs_removeargs args;
+	struct nfs_removeres res;
+	struct dentry *dentry;
+	wait_queue_head_t wq;
+	const struct cred *cred;
+	struct nfs_fattr dir_attr;
+	long int timeout;
+};
+
+struct nfs_renamedata {
+	struct nfs_renameargs args;
+	struct nfs_renameres res;
+	struct rpc_task task;
+	const struct cred *cred;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct nfs_fattr old_fattr;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct nfs_fattr new_fattr;
+	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+	long int timeout;
+	bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_client_initdata;
+
+struct nfs_access_entry;
+
+struct nfs_rpc_ops {
+	u32 version;
+	const struct dentry_operations *dentry_ops;
+	const struct inode_operations *dir_inode_ops;
+	const struct inode_operations *file_inode_ops;
+	const struct file_operations *file_ops;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*submount)(struct fs_context *, struct nfs_server *);
+	int (*try_get_tree)(struct fs_context *);
+	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+	int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+	int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+	int (*remove)(struct inode *, struct dentry *);
+	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+	int (*unlink_done)(struct rpc_task *, struct inode *);
+	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+	int (*link)(struct inode *, struct inode *, const struct qstr *);
+	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
+	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+	int (*rmdir)(struct inode *, const struct qstr *);
+	int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+	int (*lock)(struct file *, int, struct file_lock *);
+	int (*lock_check_bounds)(const struct file_lock *);
+	void (*clear_acl_cache)(struct inode *);
+	void (*close_context)(struct nfs_open_context *, int);
+	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+	int (*have_delegation)(struct inode *, fmode_t);
+	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+	void (*free_client)(struct nfs_client *);
+	struct nfs_server * (*create_server)(struct fs_context *);
+	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+	int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+	void (*enable_swap)(struct inode *);
+	void (*disable_swap)(struct inode *);
+};
+
+struct nfs_access_entry {
+	struct rb_node rb_node;
+	struct list_head lru;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	struct group_info *group_info;
+	__u32 mask;
+	struct callback_head callback_head;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+	u32 minor_version;
+	unsigned int init_caps;
+	int (*init_client)(struct nfs_client *);
+	void (*shutdown_client)(struct nfs_client *);
+	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
+	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	const struct rpc_call_ops *call_sync_ops;
+	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+	const struct nfs4_state_maintenance_ops *state_renewal_ops;
+	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+	struct list_head open_states;
+	struct list_head inode_states;
+	struct list_head lock_states;
+	struct nfs4_state_owner *owner;
+	struct inode *inode;
+	long unsigned int flags;
+	spinlock_t state_lock;
+	seqlock_t seqlock;
+	nfs4_stateid stateid;
+	nfs4_stateid open_stateid;
+	unsigned int n_rdonly;
+	unsigned int n_wronly;
+	unsigned int n_rdwr;
+	fmode_t state;
+	refcount_t count;
+	wait_queue_head_t waitq;
+	struct callback_head callback_head;
+};
+
+struct cache_head {
+	struct hlist_node cache_list;
+	time64_t expiry_time;
+	time64_t last_refresh;
+	struct kref ref;
+	long unsigned int flags;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+	struct cache_deferred_req * (*defer)(struct cache_req *);
+	long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+	struct hlist_node hash;
+	struct list_head recent;
+	struct cache_head *item;
+	void *owner;
+	void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct svc_cred {
+	kuid_t cr_uid;
+	kgid_t cr_gid;
+	struct group_info *cr_group_info;
+	u32 cr_flavor;
+	char *cr_raw_principal;
+	char *cr_principal;
+	char *cr_targ_princ;
+	struct gss_api_mech *cr_gss_mech;
+};
+
+struct auth_ops {
+	char *name;
+	struct module *owner;
+	int flavour;
+	int (*accept)(struct svc_rqst *);
+	int (*release)(struct svc_rqst *);
+	void (*domain_release)(struct auth_domain *);
+	int (*set_client)(struct svc_rqst *);
+};
+
+struct svc_cacherep;
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_rqst {
+	struct list_head rq_all;
+	struct callback_head rq_rcu_head;
+	struct svc_xprt *rq_xprt;
+	struct __kernel_sockaddr_storage rq_addr;
+	size_t rq_addrlen;
+	struct __kernel_sockaddr_storage rq_daddr;
+	size_t rq_daddrlen;
+	struct svc_serv *rq_server;
+	struct svc_pool *rq_pool;
+	const struct svc_procedure *rq_procinfo;
+	struct auth_ops *rq_authop;
+	struct svc_cred rq_cred;
+	void *rq_xprt_ctxt;
+	struct svc_deferred_req *rq_deferred;
+	struct xdr_buf rq_arg;
+	struct xdr_stream rq_arg_stream;
+	struct xdr_stream rq_res_stream;
+	struct page *rq_scratch_page;
+	struct xdr_buf rq_res;
+	struct page *rq_pages[260];
+	struct page **rq_respages;
+	struct page **rq_next_page;
+	struct page **rq_page_end;
+	struct pagevec rq_pvec;
+	struct kvec rq_vec[259];
+	struct bio_vec rq_bvec[259];
+	__be32 rq_xid;
+	u32 rq_prog;
+	u32 rq_vers;
+	u32 rq_proc;
+	u32 rq_prot;
+	int rq_cachetype;
+	long unsigned int rq_flags;
+	ktime_t rq_qtime;
+	void *rq_argp;
+	void *rq_resp;
+	void *rq_auth_data;
+	__be32 rq_auth_stat;
+	int rq_auth_slack;
+	int rq_reserved;
+	ktime_t rq_stime;
+	struct cache_req rq_chandle;
+	struct auth_domain *rq_client;
+	struct auth_domain *rq_gssclient;
+	struct svc_cacherep *rq_cacherep;
+	struct task_struct *rq_task;
+	spinlock_t rq_lock;
+	struct net *rq_bc_net;
+	void **rq_lease_breaker;
+};
+
+struct svc_pool_stats {
+	atomic_long_t packets;
+	long unsigned int sockets_queued;
+	atomic_long_t threads_woken;
+	atomic_long_t threads_timedout;
+};
+
+struct svc_pool {
+	unsigned int sp_id;
+	spinlock_t sp_lock;
+	struct list_head sp_sockets;
+	unsigned int sp_nrthreads;
+	struct list_head sp_all_threads;
+	struct svc_pool_stats sp_stats;
+	long unsigned int sp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct svc_procedure {
+	__be32 (*pc_func)(struct svc_rqst *);
+	bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+	bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+	void (*pc_release)(struct svc_rqst *);
+	unsigned int pc_argsize;
+	unsigned int pc_ressize;
+	unsigned int pc_cachetype;
+	unsigned int pc_xdrressize;
+	const char *pc_name;
+};
+
+struct svc_deferred_req {
+	u32 prot;
+	struct svc_xprt *xprt;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	struct __kernel_sockaddr_storage daddr;
+	size_t daddrlen;
+	void *xprt_ctxt;
+	struct cache_deferred_req handle;
+	int argslen;
+	__be32 args[0];
+};
+
+struct svc_process_info {
+	union {
+		int (*dispatch)(struct svc_rqst *, __be32 *);
+		struct {
+			unsigned int lovers;
+			unsigned int hivers;
+		} mismatch;
+	};
+};
+
+struct svc_version {
+	u32 vs_vers;
+	u32 vs_nproc;
+	const struct svc_procedure *vs_proc;
+	unsigned int *vs_count;
+	u32 vs_xdrsize;
+	bool vs_hidden;
+	bool vs_rpcb_optnl;
+	bool vs_need_cong_ctrl;
+	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
+};
+
+struct nfs4_ssc_client_ops;
+
+struct nfs_ssc_client_ops;
+
+struct nfs_ssc_client_ops_tbl {
+	const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
+	const struct nfs_ssc_client_ops *ssc_nfs_ops;
+};
+
+struct nfs4_ssc_client_ops {
+	struct file * (*sco_open)(struct vfsmount *, struct nfs_fh *, nfs4_stateid *);
+	void (*sco_close)(struct file *);
+};
+
+struct nfs_ssc_client_ops {
+	void (*sco_sb_deactive)(struct super_block *);
+};
+
+struct nfs4_state_recovery_ops {
+	int owner_flag_bit;
+	int state_flag_bit;
+	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+	int (*establish_clid)(struct nfs_client *, const struct cred *);
+	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+	int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+	int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+	int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+	struct nfs_server *so_server;
+	struct list_head so_lru;
+	long unsigned int so_expires;
+	struct rb_node so_server_node;
+	const struct cred *so_cred;
+	spinlock_t so_lock;
+	atomic_t so_count;
+	long unsigned int so_flags;
+	struct list_head so_states;
+	struct nfs_seqid_counter so_seqid;
+	seqcount_spinlock_t so_reclaim_seqcount;
+	struct mutex so_delegreturn_mutex;
+};
+
+struct qtree_fmt_operations {
+	void (*mem2disk_dqblk)(void *, struct dquot *);
+	void (*disk2mem_dqblk)(struct dquot *, void *);
+	int (*is_id)(void *, struct dquot *);
+};
+
+struct qtree_mem_dqinfo {
+	struct super_block *dqi_sb;
+	int dqi_type;
+	unsigned int dqi_blocks;
+	unsigned int dqi_free_blk;
+	unsigned int dqi_free_entry;
+	unsigned int dqi_blocksize_bits;
+	unsigned int dqi_entry_size;
+	unsigned int dqi_usable_bs;
+	unsigned int dqi_qtree_depth;
+	const struct qtree_fmt_operations *dqi_ops;
 };
 
 struct dqstats {
@@ -41421,345 +91125,26 @@
 	struct percpu_counter counter[8];
 };
 
-enum {
-	_DQUOT_USAGE_ENABLED = 0,
-	_DQUOT_LIMITS_ENABLED = 1,
-	_DQUOT_SUSPENDED = 2,
-	_DQUOT_STATE_FLAGS = 3,
+struct qt_disk_dqdbheader {
+	__le32 dqdh_next_free;
+	__le32 dqdh_prev_free;
+	__le16 dqdh_entries;
+	__le16 dqdh_pad1;
+	__le32 dqdh_pad2;
 };
 
-struct quota_module_name {
-	int qm_fmt_id;
-	char *qm_mod_name;
-};
-
-struct dquot_warn {
-	struct super_block *w_sb;
-	struct kqid w_dq_id;
-	short int w_type;
-};
-
-struct fs_disk_quota {
-	__s8 d_version;
-	__s8 d_flags;
-	__u16 d_fieldmask;
-	__u32 d_id;
-	__u64 d_blk_hardlimit;
-	__u64 d_blk_softlimit;
-	__u64 d_ino_hardlimit;
-	__u64 d_ino_softlimit;
-	__u64 d_bcount;
-	__u64 d_icount;
-	__s32 d_itimer;
-	__s32 d_btimer;
-	__u16 d_iwarns;
-	__u16 d_bwarns;
-	__s8 d_itimer_hi;
-	__s8 d_btimer_hi;
-	__s8 d_rtbtimer_hi;
-	__s8 d_padding2;
-	__u64 d_rtb_hardlimit;
-	__u64 d_rtb_softlimit;
-	__u64 d_rtbcount;
-	__s32 d_rtbtimer;
-	__u16 d_rtbwarns;
-	__s16 d_padding3;
-	char d_padding4[8];
-};
-
-struct fs_qfilestat {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-};
-
-typedef struct fs_qfilestat fs_qfilestat_t;
-
-struct fs_quota_stat {
-	__s8 qs_version;
-	__u16 qs_flags;
-	__s8 qs_pad;
-	fs_qfilestat_t qs_uquota;
-	fs_qfilestat_t qs_gquota;
-	__u32 qs_incoredqs;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-};
-
-struct fs_qfilestatv {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-	__u32 qfs_pad;
-};
-
-struct fs_quota_statv {
-	__s8 qs_version;
-	__u8 qs_pad1;
-	__u16 qs_flags;
-	__u32 qs_incoredqs;
-	struct fs_qfilestatv qs_uquota;
-	struct fs_qfilestatv qs_gquota;
-	struct fs_qfilestatv qs_pquota;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-	__u64 qs_pad2[8];
-};
-
-struct if_dqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-};
-
-struct if_nextdqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-	__u32 dqb_id;
-};
-
-struct if_dqinfo {
-	__u64 dqi_bgrace;
-	__u64 dqi_igrace;
-	__u32 dqi_flags;
-	__u32 dqi_valid;
-};
-
-struct compat_if_dqblk {
-	compat_u64 dqb_bhardlimit;
-	compat_u64 dqb_bsoftlimit;
-	compat_u64 dqb_curspace;
-	compat_u64 dqb_ihardlimit;
-	compat_u64 dqb_isoftlimit;
-	compat_u64 dqb_curinodes;
-	compat_u64 dqb_btime;
-	compat_u64 dqb_itime;
-	compat_uint_t dqb_valid;
-};
-
-enum {
-	QUOTA_NL_C_UNSPEC = 0,
-	QUOTA_NL_C_WARNING = 1,
-	__QUOTA_NL_C_MAX = 2,
-};
-
-enum {
-	QUOTA_NL_A_UNSPEC = 0,
-	QUOTA_NL_A_QTYPE = 1,
-	QUOTA_NL_A_EXCESS_ID = 2,
-	QUOTA_NL_A_WARNING = 3,
-	QUOTA_NL_A_DEV_MAJOR = 4,
-	QUOTA_NL_A_DEV_MINOR = 5,
-	QUOTA_NL_A_CAUSED_ID = 6,
-	QUOTA_NL_A_PAD = 7,
-	__QUOTA_NL_A_MAX = 8,
-};
-
-struct proc_maps_private {
-	struct inode *inode;
-	struct task_struct *task;
-	struct mm_struct *mm;
-	struct vm_area_struct *tail_vma;
-	struct mempolicy *task_mempolicy;
-};
-
-struct mem_size_stats {
-	long unsigned int resident;
-	long unsigned int shared_clean;
-	long unsigned int shared_dirty;
-	long unsigned int private_clean;
-	long unsigned int private_dirty;
-	long unsigned int referenced;
-	long unsigned int anonymous;
-	long unsigned int lazyfree;
-	long unsigned int anonymous_thp;
-	long unsigned int shmem_thp;
-	long unsigned int file_thp;
-	long unsigned int swap;
-	long unsigned int shared_hugetlb;
-	long unsigned int private_hugetlb;
-	u64 pss;
-	u64 pss_anon;
-	u64 pss_file;
-	u64 pss_shmem;
-	u64 pss_locked;
-	u64 swap_pss;
-	bool check_shmem_swap;
-};
-
-enum clear_refs_types {
-	CLEAR_REFS_ALL = 1,
-	CLEAR_REFS_ANON = 2,
-	CLEAR_REFS_MAPPED = 3,
-	CLEAR_REFS_SOFT_DIRTY = 4,
-	CLEAR_REFS_MM_HIWATER_RSS = 5,
-	CLEAR_REFS_LAST = 6,
-};
-
-struct clear_refs_private {
-	enum clear_refs_types type;
-};
-
-typedef struct {
-	u64 pme;
-} pagemap_entry_t;
-
-struct pagemapread {
-	int pos;
-	int len;
-	pagemap_entry_t *buffer;
-	bool show_pfn;
-};
-
-struct numa_maps {
-	long unsigned int pages;
-	long unsigned int anon;
-	long unsigned int active;
-	long unsigned int writeback;
-	long unsigned int mapcount_max;
-	long unsigned int dirty;
-	long unsigned int swapcache;
-	long unsigned int node[128];
-};
-
-struct numa_maps_private {
-	struct proc_maps_private proc_maps;
-	struct numa_maps md;
-};
-
-struct pde_opener {
-	struct list_head lh;
-	struct file *file;
-	bool closing;
-	struct completion *c;
-};
-
-enum {
-	BIAS = 2147483648,
-};
-
-struct proc_fs_context {
-	struct pid_namespace *pid_ns;
-	unsigned int mask;
-	enum proc_hidepid hidepid;
-	int gid;
-	enum proc_pidonly pidonly;
-};
-
-enum proc_param {
-	Opt_gid___2 = 0,
-	Opt_hidepid = 1,
-	Opt_subset = 2,
-};
-
-struct genradix_root;
-
-struct __genradix {
-	struct genradix_root *root;
-};
-
-struct syscall_info {
-	__u64 sp;
-	struct seccomp_data data;
-};
-
-typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
-
-struct pid_entry {
-	const char *name;
-	unsigned int len;
-	umode_t mode;
-	const struct inode_operations *iop;
-	const struct file_operations *fop;
-	union proc_op op;
-};
-
-struct limit_names {
-	const char *name;
-	const char *unit;
-};
-
-struct map_files_info {
-	long unsigned int start;
-	long unsigned int end;
-	fmode_t mode;
-};
-
-struct timers_private {
-	struct pid *pid;
-	struct task_struct *task;
-	struct sighand_struct *sighand;
-	struct pid_namespace *ns;
-	long unsigned int flags;
-};
-
-struct tgid_iter {
-	unsigned int tgid;
-	struct task_struct *task;
-};
-
-struct fd_data {
-	fmode_t mode;
-	unsigned int fd;
-};
-
-struct sysctl_alias {
-	const char *kernel_param;
-	const char *sysctl_param;
-};
-
-struct seq_net_private {
-	struct net *net;
-};
-
-struct bpf_iter_aux_info___2;
-
-enum kcore_type {
-	KCORE_TEXT = 0,
-	KCORE_VMALLOC = 1,
-	KCORE_RAM = 2,
-	KCORE_VMEMMAP = 3,
-	KCORE_USER = 4,
-	KCORE_OTHER = 5,
-	KCORE_REMAP = 6,
-};
-
-struct kcore_list {
+struct simple_xattr {
 	struct list_head list;
-	long unsigned int addr;
-	long unsigned int vaddr;
+	char *name;
 	size_t size;
-	int type;
+	char value[0];
 };
 
-struct kernfs_iattrs {
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct simple_xattrs xattrs;
-	atomic_t nr_user_xattrs;
-	atomic_t user_xattr_size;
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
 };
 
 struct kernfs_super_info {
@@ -41769,121 +91154,6 @@
 	struct list_head node;
 };
 
-enum kernfs_node_flag {
-	KERNFS_ACTIVATED = 16,
-	KERNFS_NS = 32,
-	KERNFS_HAS_SEQ_SHOW = 64,
-	KERNFS_HAS_MMAP = 128,
-	KERNFS_LOCKDEP = 256,
-	KERNFS_SUICIDAL = 1024,
-	KERNFS_SUICIDED = 2048,
-	KERNFS_EMPTY_DIR = 4096,
-	KERNFS_HAS_RELEASE = 8192,
-};
-
-struct kernfs_open_node {
-	atomic_t refcnt;
-	atomic_t event;
-	wait_queue_head_t poll;
-	struct list_head files;
-};
-
-struct config_group;
-
-struct config_item_type;
-
-struct config_item {
-	char *ci_name;
-	char ci_namebuf[20];
-	struct kref ci_kref;
-	struct list_head ci_entry;
-	struct config_item *ci_parent;
-	struct config_group *ci_group;
-	const struct config_item_type *ci_type;
-	struct dentry *ci_dentry;
-};
-
-struct configfs_subsystem;
-
-struct config_group {
-	struct config_item cg_item;
-	struct list_head cg_children;
-	struct configfs_subsystem *cg_subsys;
-	struct list_head default_groups;
-	struct list_head group_entry;
-};
-
-struct configfs_item_operations;
-
-struct configfs_group_operations;
-
-struct configfs_attribute;
-
-struct configfs_bin_attribute;
-
-struct config_item_type {
-	struct module *ct_owner;
-	struct configfs_item_operations *ct_item_ops;
-	struct configfs_group_operations *ct_group_ops;
-	struct configfs_attribute **ct_attrs;
-	struct configfs_bin_attribute **ct_bin_attrs;
-};
-
-struct configfs_item_operations {
-	void (*release)(struct config_item *);
-	int (*allow_link)(struct config_item *, struct config_item *);
-	void (*drop_link)(struct config_item *, struct config_item *);
-};
-
-struct configfs_group_operations {
-	struct config_item * (*make_item)(struct config_group *, const char *);
-	struct config_group * (*make_group)(struct config_group *, const char *);
-	int (*commit_item)(struct config_item *);
-	void (*disconnect_notify)(struct config_group *, struct config_item *);
-	void (*drop_item)(struct config_group *, struct config_item *);
-};
-
-struct configfs_attribute {
-	const char *ca_name;
-	struct module *ca_owner;
-	umode_t ca_mode;
-	ssize_t (*show)(struct config_item *, char *);
-	ssize_t (*store)(struct config_item *, const char *, size_t);
-};
-
-struct configfs_bin_attribute {
-	struct configfs_attribute cb_attr;
-	void *cb_private;
-	size_t cb_max_size;
-	ssize_t (*read)(struct config_item *, void *, size_t);
-	ssize_t (*write)(struct config_item *, const void *, size_t);
-};
-
-struct configfs_subsystem {
-	struct config_group su_group;
-	struct mutex su_mutex;
-};
-
-struct configfs_fragment {
-	atomic_t frag_count;
-	struct rw_semaphore frag_sem;
-	bool frag_dead;
-};
-
-struct configfs_dirent {
-	atomic_t s_count;
-	int s_dependent_count;
-	struct list_head s_sibling;
-	struct list_head s_children;
-	int s_links;
-	void *s_element;
-	int s_type;
-	umode_t s_mode;
-	struct dentry *s_dentry;
-	struct iattr *s_iattr;
-	struct configfs_fragment *s_frag;
-};
-
 struct configfs_buffer {
 	size_t count;
 	loff_t pos;
@@ -41916,13 +91186,13 @@
 };
 
 enum {
-	Opt_uid___2 = 0,
-	Opt_gid___3 = 1,
-	Opt_mode___2 = 2,
+	Opt_uid = 0,
+	Opt_gid___2 = 1,
+	Opt_mode = 2,
 	Opt_ptmxmode = 3,
 	Opt_newinstance = 4,
-	Opt_max = 5,
-	Opt_err = 6,
+	Opt_max___2 = 5,
+	Opt_err___3 = 6,
 };
 
 struct pts_fs_info {
@@ -41932,1187 +91202,26 @@
 	struct dentry *ptmx_dentry;
 };
 
-struct dcookie_struct {
-	struct path path;
-	struct list_head hash_list;
-};
-
-struct dcookie_user {
-	struct list_head next;
-};
-
-typedef unsigned int tid_t;
-
-struct transaction_chp_stats_s {
-	long unsigned int cs_chp_time;
-	__u32 cs_forced_to_close;
-	__u32 cs_written;
-	__u32 cs_dropped;
-};
-
-struct journal_s;
-
-typedef struct journal_s journal_t;
-
-struct journal_head;
-
-struct transaction_s;
-
-typedef struct transaction_s transaction_t;
-
-struct transaction_s {
-	journal_t *t_journal;
-	tid_t t_tid;
-	enum {
-		T_RUNNING = 0,
-		T_LOCKED = 1,
-		T_SWITCH = 2,
-		T_FLUSH = 3,
-		T_COMMIT = 4,
-		T_COMMIT_DFLUSH = 5,
-		T_COMMIT_JFLUSH = 6,
-		T_COMMIT_CALLBACK = 7,
-		T_FINISHED = 8,
-	} t_state;
-	long unsigned int t_log_start;
-	int t_nr_buffers;
-	struct journal_head *t_reserved_list;
-	struct journal_head *t_buffers;
-	struct journal_head *t_forget;
-	struct journal_head *t_checkpoint_list;
-	struct journal_head *t_checkpoint_io_list;
-	struct journal_head *t_shadow_list;
-	struct list_head t_inode_list;
-	spinlock_t t_handle_lock;
-	long unsigned int t_max_wait;
-	long unsigned int t_start;
-	long unsigned int t_requested;
-	struct transaction_chp_stats_s t_chp_stats;
-	atomic_t t_updates;
-	atomic_t t_outstanding_credits;
-	atomic_t t_outstanding_revokes;
-	atomic_t t_handle_count;
-	transaction_t *t_cpnext;
-	transaction_t *t_cpprev;
-	long unsigned int t_expires;
-	ktime_t t_start_time;
-	unsigned int t_synchronous_commit: 1;
-	int t_need_data_flush;
-	struct list_head t_private_list;
-};
-
-struct jbd2_buffer_trigger_type;
-
-struct journal_head {
-	struct buffer_head *b_bh;
-	spinlock_t b_state_lock;
-	int b_jcount;
-	unsigned int b_jlist;
-	unsigned int b_modified;
-	char *b_frozen_data;
-	char *b_committed_data;
-	transaction_t *b_transaction;
-	transaction_t *b_next_transaction;
-	struct journal_head *b_tnext;
-	struct journal_head *b_tprev;
-	transaction_t *b_cp_transaction;
-	struct journal_head *b_cpnext;
-	struct journal_head *b_cpprev;
-	struct jbd2_buffer_trigger_type *b_triggers;
-	struct jbd2_buffer_trigger_type *b_frozen_triggers;
-};
-
-struct jbd2_buffer_trigger_type {
-	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
-	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
-};
-
-struct jbd2_journal_handle;
-
-typedef struct jbd2_journal_handle handle_t;
-
-struct jbd2_journal_handle {
-	union {
-		transaction_t *h_transaction;
-		journal_t *h_journal;
-	};
-	handle_t *h_rsv_handle;
-	int h_total_credits;
-	int h_revoke_credits;
-	int h_revoke_credits_requested;
-	int h_ref;
-	int h_err;
-	unsigned int h_sync: 1;
-	unsigned int h_jdata: 1;
-	unsigned int h_reserved: 1;
-	unsigned int h_aborted: 1;
-	unsigned int h_type: 8;
-	unsigned int h_line_no: 16;
-	long unsigned int h_start_jiffies;
-	unsigned int h_requested_credits;
-	unsigned int saved_alloc_context;
-};
-
-struct transaction_run_stats_s {
-	long unsigned int rs_wait;
-	long unsigned int rs_request_delay;
-	long unsigned int rs_running;
-	long unsigned int rs_locked;
-	long unsigned int rs_flushing;
-	long unsigned int rs_logging;
-	__u32 rs_handle_count;
-	__u32 rs_blocks;
-	__u32 rs_blocks_logged;
-};
-
-struct transaction_stats_s {
-	long unsigned int ts_tid;
-	long unsigned int ts_requested;
-	struct transaction_run_stats_s run;
-};
-
-enum passtype {
-	PASS_SCAN = 0,
-	PASS_REVOKE = 1,
-	PASS_REPLAY = 2,
-};
-
-struct journal_superblock_s;
-
-typedef struct journal_superblock_s journal_superblock_t;
-
-struct jbd2_revoke_table_s;
-
-struct jbd2_inode;
-
-struct journal_s {
-	long unsigned int j_flags;
-	int j_errno;
-	struct mutex j_abort_mutex;
-	struct buffer_head *j_sb_buffer;
-	journal_superblock_t *j_superblock;
-	int j_format_version;
-	rwlock_t j_state_lock;
-	int j_barrier_count;
-	struct mutex j_barrier;
-	transaction_t *j_running_transaction;
-	transaction_t *j_committing_transaction;
-	transaction_t *j_checkpoint_transactions;
-	wait_queue_head_t j_wait_transaction_locked;
-	wait_queue_head_t j_wait_done_commit;
-	wait_queue_head_t j_wait_commit;
-	wait_queue_head_t j_wait_updates;
-	wait_queue_head_t j_wait_reserved;
-	wait_queue_head_t j_fc_wait;
-	struct mutex j_checkpoint_mutex;
-	struct buffer_head *j_chkpt_bhs[64];
-	long unsigned int j_head;
-	long unsigned int j_tail;
-	long unsigned int j_free;
-	long unsigned int j_first;
-	long unsigned int j_last;
-	long unsigned int j_fc_first;
-	long unsigned int j_fc_off;
-	long unsigned int j_fc_last;
-	struct block_device *j_dev;
-	int j_blocksize;
-	long long unsigned int j_blk_offset;
-	char j_devname[56];
-	struct block_device *j_fs_dev;
-	unsigned int j_total_len;
-	atomic_t j_reserved_credits;
-	spinlock_t j_list_lock;
-	struct inode *j_inode;
-	tid_t j_tail_sequence;
-	tid_t j_transaction_sequence;
-	tid_t j_commit_sequence;
-	tid_t j_commit_request;
-	__u8 j_uuid[16];
-	struct task_struct *j_task;
-	int j_max_transaction_buffers;
-	int j_revoke_records_per_block;
-	long unsigned int j_commit_interval;
-	struct timer_list j_commit_timer;
-	spinlock_t j_revoke_lock;
-	struct jbd2_revoke_table_s *j_revoke;
-	struct jbd2_revoke_table_s *j_revoke_table[2];
-	struct buffer_head **j_wbuf;
-	struct buffer_head **j_fc_wbuf;
-	int j_wbufsize;
-	int j_fc_wbufsize;
-	pid_t j_last_sync_writer;
-	u64 j_average_commit_time;
-	u32 j_min_batch_time;
-	u32 j_max_batch_time;
-	void (*j_commit_callback)(journal_t *, transaction_t *);
-	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
-	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
-	spinlock_t j_history_lock;
-	struct proc_dir_entry *j_proc_entry;
-	struct transaction_stats_s j_stats;
-	unsigned int j_failed_commit;
-	void *j_private;
-	struct crypto_shash *j_chksum_driver;
-	__u32 j_csum_seed;
-	void (*j_fc_cleanup_callback)(struct journal_s *, int);
-	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
-};
-
-struct journal_header_s {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-};
-
-typedef struct journal_header_s journal_header_t;
-
-struct journal_superblock_s {
-	journal_header_t s_header;
-	__be32 s_blocksize;
-	__be32 s_maxlen;
-	__be32 s_first;
-	__be32 s_sequence;
-	__be32 s_start;
-	__be32 s_errno;
-	__be32 s_feature_compat;
-	__be32 s_feature_incompat;
-	__be32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	__be32 s_nr_users;
-	__be32 s_dynsuper;
-	__be32 s_max_transaction;
-	__be32 s_max_trans_data;
-	__u8 s_checksum_type;
-	__u8 s_padding2[3];
-	__be32 s_num_fc_blks;
-	__u32 s_padding[41];
-	__be32 s_checksum;
-	__u8 s_users[768];
-};
-
-enum jbd_state_bits {
-	BH_JBD = 16,
-	BH_JWrite = 17,
-	BH_Freed = 18,
-	BH_Revoked = 19,
-	BH_RevokeValid = 20,
-	BH_JBDDirty = 21,
-	BH_JournalHead = 22,
-	BH_Shadow = 23,
-	BH_Verified = 24,
-	BH_JBDPrivateStart = 25,
-};
-
-struct jbd2_inode {
-	transaction_t *i_transaction;
-	transaction_t *i_next_transaction;
-	struct list_head i_list;
-	struct inode *i_vfs_inode;
-	long unsigned int i_flags;
-	loff_t i_dirty_start;
-	loff_t i_dirty_end;
-};
-
-struct bgl_lock {
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blockgroup_lock {
-	struct bgl_lock locks[128];
-};
-
-typedef int ext4_grpblk_t;
-
-typedef long long unsigned int ext4_fsblk_t;
-
-typedef __u32 ext4_lblk_t;
-
-typedef unsigned int ext4_group_t;
-
-struct ext4_allocation_request {
-	struct inode *inode;
-	unsigned int len;
-	ext4_lblk_t logical;
-	ext4_lblk_t lleft;
-	ext4_lblk_t lright;
-	ext4_fsblk_t goal;
-	ext4_fsblk_t pleft;
-	ext4_fsblk_t pright;
-	unsigned int flags;
-};
-
-struct ext4_system_blocks {
-	struct rb_root root;
-	struct callback_head rcu;
-};
-
-struct ext4_group_desc {
-	__le32 bg_block_bitmap_lo;
-	__le32 bg_inode_bitmap_lo;
-	__le32 bg_inode_table_lo;
-	__le16 bg_free_blocks_count_lo;
-	__le16 bg_free_inodes_count_lo;
-	__le16 bg_used_dirs_count_lo;
-	__le16 bg_flags;
-	__le32 bg_exclude_bitmap_lo;
-	__le16 bg_block_bitmap_csum_lo;
-	__le16 bg_inode_bitmap_csum_lo;
-	__le16 bg_itable_unused_lo;
-	__le16 bg_checksum;
-	__le32 bg_block_bitmap_hi;
-	__le32 bg_inode_bitmap_hi;
-	__le32 bg_inode_table_hi;
-	__le16 bg_free_blocks_count_hi;
-	__le16 bg_free_inodes_count_hi;
-	__le16 bg_used_dirs_count_hi;
-	__le16 bg_itable_unused_hi;
-	__le32 bg_exclude_bitmap_hi;
-	__le16 bg_block_bitmap_csum_hi;
-	__le16 bg_inode_bitmap_csum_hi;
-	__u32 bg_reserved;
-};
-
-struct flex_groups {
-	atomic64_t free_clusters;
-	atomic_t free_inodes;
-	atomic_t used_dirs;
-};
-
-struct extent_status {
-	struct rb_node rb_node;
-	ext4_lblk_t es_lblk;
-	ext4_lblk_t es_len;
-	ext4_fsblk_t es_pblk;
-};
-
-struct ext4_es_tree {
-	struct rb_root root;
-	struct extent_status *cache_es;
-};
-
-struct ext4_es_stats {
-	long unsigned int es_stats_shrunk;
-	struct percpu_counter es_stats_cache_hits;
-	struct percpu_counter es_stats_cache_misses;
-	u64 es_stats_scan_time;
-	u64 es_stats_max_scan_time;
-	struct percpu_counter es_stats_all_cnt;
-	struct percpu_counter es_stats_shk_cnt;
-};
-
-struct ext4_pending_tree {
-	struct rb_root root;
-};
-
-struct ext4_fc_stats {
-	unsigned int fc_ineligible_reason_count[10];
-	long unsigned int fc_num_commits;
-	long unsigned int fc_ineligible_commits;
-	long unsigned int fc_numblks;
-};
-
-struct ext4_fc_alloc_region {
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	int ino;
-	int len;
-};
-
-struct ext4_fc_replay_state {
-	int fc_replay_num_tags;
-	int fc_replay_expected_off;
-	int fc_current_pass;
-	int fc_cur_tag;
-	int fc_crc;
-	struct ext4_fc_alloc_region *fc_regions;
-	int fc_regions_size;
-	int fc_regions_used;
-	int fc_regions_valid;
-	int *fc_modified_inodes;
-	int fc_modified_inodes_used;
-	int fc_modified_inodes_size;
-};
-
-struct ext4_inode_info {
-	__le32 i_data[15];
-	__u32 i_dtime;
-	ext4_fsblk_t i_file_acl;
-	ext4_group_t i_block_group;
-	ext4_lblk_t i_dir_start_lookup;
-	long unsigned int i_flags;
-	struct rw_semaphore xattr_sem;
-	struct list_head i_orphan;
-	struct list_head i_fc_list;
-	ext4_lblk_t i_fc_lblk_start;
-	ext4_lblk_t i_fc_lblk_len;
-	atomic_t i_fc_updates;
-	wait_queue_head_t i_fc_wait;
-	struct mutex i_fc_lock;
-	loff_t i_disksize;
-	struct rw_semaphore i_data_sem;
-	struct rw_semaphore i_mmap_sem;
-	struct inode vfs_inode;
-	struct jbd2_inode *jinode;
-	spinlock_t i_raw_lock;
-	struct timespec64 i_crtime;
-	atomic_t i_prealloc_active;
-	struct list_head i_prealloc_list;
-	spinlock_t i_prealloc_lock;
-	struct ext4_es_tree i_es_tree;
-	rwlock_t i_es_lock;
-	struct list_head i_es_list;
-	unsigned int i_es_all_nr;
-	unsigned int i_es_shk_nr;
-	ext4_lblk_t i_es_shrink_lblk;
-	ext4_group_t i_last_alloc_group;
-	unsigned int i_reserved_data_blocks;
-	struct ext4_pending_tree i_pending_tree;
-	__u16 i_extra_isize;
-	u16 i_inline_off;
-	u16 i_inline_size;
-	qsize_t i_reserved_quota;
-	spinlock_t i_completed_io_lock;
-	struct list_head i_rsv_conversion_list;
-	struct work_struct i_rsv_conversion_work;
-	atomic_t i_unwritten;
-	spinlock_t i_block_reservation_lock;
-	tid_t i_sync_tid;
-	tid_t i_datasync_tid;
-	struct dquot *i_dquot[3];
-	__u32 i_csum_seed;
-	kprojid_t i_projid;
-};
-
-struct ext4_super_block {
-	__le32 s_inodes_count;
-	__le32 s_blocks_count_lo;
-	__le32 s_r_blocks_count_lo;
-	__le32 s_free_blocks_count_lo;
-	__le32 s_free_inodes_count;
-	__le32 s_first_data_block;
-	__le32 s_log_block_size;
-	__le32 s_log_cluster_size;
-	__le32 s_blocks_per_group;
-	__le32 s_clusters_per_group;
-	__le32 s_inodes_per_group;
-	__le32 s_mtime;
-	__le32 s_wtime;
-	__le16 s_mnt_count;
-	__le16 s_max_mnt_count;
-	__le16 s_magic;
-	__le16 s_state;
-	__le16 s_errors;
-	__le16 s_minor_rev_level;
-	__le32 s_lastcheck;
-	__le32 s_checkinterval;
-	__le32 s_creator_os;
-	__le32 s_rev_level;
-	__le16 s_def_resuid;
-	__le16 s_def_resgid;
-	__le32 s_first_ino;
-	__le16 s_inode_size;
-	__le16 s_block_group_nr;
-	__le32 s_feature_compat;
-	__le32 s_feature_incompat;
-	__le32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	char s_volume_name[16];
-	char s_last_mounted[64];
-	__le32 s_algorithm_usage_bitmap;
-	__u8 s_prealloc_blocks;
-	__u8 s_prealloc_dir_blocks;
-	__le16 s_reserved_gdt_blocks;
-	__u8 s_journal_uuid[16];
-	__le32 s_journal_inum;
-	__le32 s_journal_dev;
-	__le32 s_last_orphan;
-	__le32 s_hash_seed[4];
-	__u8 s_def_hash_version;
-	__u8 s_jnl_backup_type;
-	__le16 s_desc_size;
-	__le32 s_default_mount_opts;
-	__le32 s_first_meta_bg;
-	__le32 s_mkfs_time;
-	__le32 s_jnl_blocks[17];
-	__le32 s_blocks_count_hi;
-	__le32 s_r_blocks_count_hi;
-	__le32 s_free_blocks_count_hi;
-	__le16 s_min_extra_isize;
-	__le16 s_want_extra_isize;
-	__le32 s_flags;
-	__le16 s_raid_stride;
-	__le16 s_mmp_update_interval;
-	__le64 s_mmp_block;
-	__le32 s_raid_stripe_width;
-	__u8 s_log_groups_per_flex;
-	__u8 s_checksum_type;
-	__u8 s_encryption_level;
-	__u8 s_reserved_pad;
-	__le64 s_kbytes_written;
-	__le32 s_snapshot_inum;
-	__le32 s_snapshot_id;
-	__le64 s_snapshot_r_blocks_count;
-	__le32 s_snapshot_list;
-	__le32 s_error_count;
-	__le32 s_first_error_time;
-	__le32 s_first_error_ino;
-	__le64 s_first_error_block;
-	__u8 s_first_error_func[32];
-	__le32 s_first_error_line;
-	__le32 s_last_error_time;
-	__le32 s_last_error_ino;
-	__le32 s_last_error_line;
-	__le64 s_last_error_block;
-	__u8 s_last_error_func[32];
-	__u8 s_mount_opts[64];
-	__le32 s_usr_quota_inum;
-	__le32 s_grp_quota_inum;
-	__le32 s_overhead_clusters;
-	__le32 s_backup_bgs[2];
-	__u8 s_encrypt_algos[4];
-	__u8 s_encrypt_pw_salt[16];
-	__le32 s_lpf_ino;
-	__le32 s_prj_quota_inum;
-	__le32 s_checksum_seed;
-	__u8 s_wtime_hi;
-	__u8 s_mtime_hi;
-	__u8 s_mkfs_time_hi;
-	__u8 s_lastcheck_hi;
-	__u8 s_first_error_time_hi;
-	__u8 s_last_error_time_hi;
-	__u8 s_first_error_errcode;
-	__u8 s_last_error_errcode;
-	__le16 s_encoding;
-	__le16 s_encoding_flags;
-	__le32 s_reserved[95];
-	__le32 s_checksum;
-};
-
-struct mb_cache___2;
-
-struct ext4_group_info;
-
-struct ext4_locality_group;
-
-struct ext4_li_request;
-
-struct ext4_sb_info {
-	long unsigned int s_desc_size;
-	long unsigned int s_inodes_per_block;
-	long unsigned int s_blocks_per_group;
-	long unsigned int s_clusters_per_group;
-	long unsigned int s_inodes_per_group;
-	long unsigned int s_itb_per_group;
-	long unsigned int s_gdb_count;
-	long unsigned int s_desc_per_block;
-	ext4_group_t s_groups_count;
-	ext4_group_t s_blockfile_groups;
-	long unsigned int s_overhead;
-	unsigned int s_cluster_ratio;
-	unsigned int s_cluster_bits;
-	loff_t s_bitmap_maxbytes;
-	struct buffer_head *s_sbh;
-	struct ext4_super_block *s_es;
-	struct buffer_head **s_group_desc;
-	unsigned int s_mount_opt;
-	unsigned int s_mount_opt2;
-	long unsigned int s_mount_flags;
-	unsigned int s_def_mount_opt;
-	ext4_fsblk_t s_sb_block;
-	atomic64_t s_resv_clusters;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	short unsigned int s_mount_state;
-	short unsigned int s_pad;
-	int s_addr_per_block_bits;
-	int s_desc_per_block_bits;
-	int s_inode_size;
-	int s_first_ino;
-	unsigned int s_inode_readahead_blks;
-	unsigned int s_inode_goal;
-	u32 s_hash_seed[4];
-	int s_def_hash_version;
-	int s_hash_unsigned;
-	struct percpu_counter s_freeclusters_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
-	struct percpu_counter s_dirtyclusters_counter;
-	struct blockgroup_lock *s_blockgroup_lock;
-	struct proc_dir_entry *s_proc;
-	struct kobject s_kobj;
-	struct completion s_kobj_unregister;
-	struct super_block *s_sb;
-	struct journal_s *s_journal;
-	struct list_head s_orphan;
-	struct mutex s_orphan_lock;
-	long unsigned int s_ext4_flags;
-	long unsigned int s_commit_interval;
-	u32 s_max_batch_time;
-	u32 s_min_batch_time;
-	struct block_device *s_journal_bdev;
-	char *s_qf_names[3];
-	int s_jquota_fmt;
-	unsigned int s_want_extra_isize;
-	struct ext4_system_blocks *s_system_blks;
-	struct ext4_group_info ***s_group_info;
-	struct inode *s_buddy_cache;
-	spinlock_t s_md_lock;
-	short unsigned int *s_mb_offsets;
-	unsigned int *s_mb_maxs;
-	unsigned int s_group_info_size;
-	unsigned int s_mb_free_pending;
-	struct list_head s_freed_data_list;
-	long unsigned int s_stripe;
-	unsigned int s_mb_stream_request;
-	unsigned int s_mb_max_to_scan;
-	unsigned int s_mb_min_to_scan;
-	unsigned int s_mb_stats;
-	unsigned int s_mb_order2_reqs;
-	unsigned int s_mb_group_prealloc;
-	unsigned int s_mb_max_inode_prealloc;
-	unsigned int s_max_dir_size_kb;
-	long unsigned int s_mb_last_group;
-	long unsigned int s_mb_last_start;
-	unsigned int s_mb_prefetch;
-	unsigned int s_mb_prefetch_limit;
-	atomic_t s_bal_reqs;
-	atomic_t s_bal_success;
-	atomic_t s_bal_allocated;
-	atomic_t s_bal_ex_scanned;
-	atomic_t s_bal_goals;
-	atomic_t s_bal_breaks;
-	atomic_t s_bal_2orders;
-	spinlock_t s_bal_lock;
-	long unsigned int s_mb_buddies_generated;
-	long long unsigned int s_mb_generation_time;
-	atomic_t s_mb_lost_chunks;
-	atomic_t s_mb_preallocated;
-	atomic_t s_mb_discarded;
-	atomic_t s_lock_busy;
-	struct ext4_locality_group *s_locality_groups;
-	long unsigned int s_sectors_written_start;
-	u64 s_kbytes_written;
-	unsigned int s_extent_max_zeroout_kb;
-	unsigned int s_log_groups_per_flex;
-	struct flex_groups **s_flex_groups;
-	ext4_group_t s_flex_groups_allocated;
-	struct workqueue_struct *rsv_conversion_wq;
-	struct timer_list s_err_report;
-	struct ext4_li_request *s_li_request;
-	unsigned int s_li_wait_mult;
-	struct task_struct *s_mmp_tsk;
-	atomic_t s_last_trim_minblks;
-	struct crypto_shash *s_chksum_driver;
-	__u32 s_csum_seed;
-	struct shrinker s_es_shrinker;
-	struct list_head s_es_list;
-	long int s_es_nr_inode;
-	struct ext4_es_stats s_es_stats;
-	struct mb_cache___2 *s_ea_block_cache;
-	struct mb_cache___2 *s_ea_inode_cache;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_es_lock;
-	struct ratelimit_state s_err_ratelimit_state;
-	struct ratelimit_state s_warning_ratelimit_state;
-	struct ratelimit_state s_msg_ratelimit_state;
-	atomic_t s_warning_count;
-	atomic_t s_msg_count;
-	struct fscrypt_dummy_policy s_dummy_enc_policy;
-	struct percpu_rw_semaphore s_writepages_rwsem;
-	struct dax_device *s_daxdev;
-	errseq_t s_bdev_wb_err;
-	spinlock_t s_bdev_wb_lock;
-	atomic_t s_fc_subtid;
-	atomic_t s_fc_ineligible_updates;
-	struct list_head s_fc_q[2];
-	struct list_head s_fc_dentry_q[2];
-	unsigned int s_fc_bytes;
-	spinlock_t s_fc_lock;
-	struct buffer_head *s_fc_bh;
-	struct ext4_fc_stats s_fc_stats;
-	u64 s_fc_avg_commit_time;
-	struct ext4_fc_replay_state s_fc_replay_state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ext4_group_info {
-	long unsigned int bb_state;
-	struct rb_root bb_free_root;
-	ext4_grpblk_t bb_first_free;
-	ext4_grpblk_t bb_free;
-	ext4_grpblk_t bb_fragments;
-	ext4_grpblk_t bb_largest_free_order;
-	struct list_head bb_prealloc_list;
-	struct rw_semaphore alloc_sem;
-	ext4_grpblk_t bb_counters[0];
-};
-
-struct ext4_locality_group {
-	struct mutex lg_mutex;
-	struct list_head lg_prealloc_list[10];
-	spinlock_t lg_prealloc_lock;
-};
-
-enum ext4_li_mode {
-	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
-	EXT4_LI_MODE_ITABLE = 1,
-};
-
-struct ext4_li_request {
-	struct super_block *lr_super;
-	enum ext4_li_mode lr_mode;
-	ext4_group_t lr_first_not_zeroed;
-	ext4_group_t lr_next_group;
-	struct list_head lr_request;
-	long unsigned int lr_next_sched;
-	long unsigned int lr_timeout;
-};
-
-struct ext4_map_blocks {
-	ext4_fsblk_t m_pblk;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	unsigned int m_flags;
-};
-
-struct ext4_system_zone {
-	struct rb_node node;
-	ext4_fsblk_t start_blk;
-	unsigned int count;
-	u32 ino;
-};
-
-enum {
-	EXT4_INODE_SECRM = 0,
-	EXT4_INODE_UNRM = 1,
-	EXT4_INODE_COMPR = 2,
-	EXT4_INODE_SYNC = 3,
-	EXT4_INODE_IMMUTABLE = 4,
-	EXT4_INODE_APPEND = 5,
-	EXT4_INODE_NODUMP = 6,
-	EXT4_INODE_NOATIME = 7,
-	EXT4_INODE_DIRTY = 8,
-	EXT4_INODE_COMPRBLK = 9,
-	EXT4_INODE_NOCOMPR = 10,
-	EXT4_INODE_ENCRYPT = 11,
-	EXT4_INODE_INDEX = 12,
-	EXT4_INODE_IMAGIC = 13,
-	EXT4_INODE_JOURNAL_DATA = 14,
-	EXT4_INODE_NOTAIL = 15,
-	EXT4_INODE_DIRSYNC = 16,
-	EXT4_INODE_TOPDIR = 17,
-	EXT4_INODE_HUGE_FILE = 18,
-	EXT4_INODE_EXTENTS = 19,
-	EXT4_INODE_VERITY = 20,
-	EXT4_INODE_EA_INODE = 21,
-	EXT4_INODE_DAX = 25,
-	EXT4_INODE_INLINE_DATA = 28,
-	EXT4_INODE_PROJINHERIT = 29,
-	EXT4_INODE_CASEFOLD = 30,
-	EXT4_INODE_RESERVED = 31,
-};
-
-enum {
-	EXT4_FC_REASON_OK = 0,
-	EXT4_FC_REASON_INELIGIBLE = 1,
-	EXT4_FC_REASON_ALREADY_COMMITTED = 2,
-	EXT4_FC_REASON_FC_START_FAILED = 3,
-	EXT4_FC_REASON_FC_FAILED = 4,
-	EXT4_FC_REASON_XATTR = 0,
-	EXT4_FC_REASON_CROSS_RENAME = 1,
-	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
-	EXT4_FC_REASON_NOMEM = 3,
-	EXT4_FC_REASON_SWAP_BOOT = 4,
-	EXT4_FC_REASON_RESIZE = 5,
-	EXT4_FC_REASON_RENAME_DIR = 6,
-	EXT4_FC_REASON_FALLOC_RANGE = 7,
-	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
-	EXT4_FC_COMMIT_FAILED = 9,
-	EXT4_FC_REASON_MAX = 10,
-};
-
-struct ext4_dir_entry_2 {
-	__le32 inode;
-	__le16 rec_len;
-	__u8 name_len;
-	__u8 file_type;
-	char name[255];
-};
-
-struct fname;
-
-struct dir_private_info {
-	struct rb_root root;
-	struct rb_node *curr_node;
-	struct fname *extra_fname;
-	loff_t last_pos;
-	__u32 curr_hash;
-	__u32 curr_minor_hash;
-	__u32 next_hash;
-};
-
-struct fname {
-	__u32 hash;
-	__u32 minor_hash;
-	struct rb_node rb_hash;
-	struct fname *next;
-	__u32 inode;
-	__u8 name_len;
-	__u8 file_type;
-	char name[0];
-};
-
-enum SHIFT_DIRECTION {
-	SHIFT_LEFT = 0,
-	SHIFT_RIGHT = 1,
-};
-
-struct ext4_io_end_vec {
-	struct list_head list;
-	loff_t offset;
-	ssize_t size;
-};
-
-struct ext4_io_end {
-	struct list_head list;
-	handle_t *handle;
-	struct inode *inode;
-	struct bio *bio;
-	unsigned int flag;
-	atomic_t count;
-	struct list_head list_vec;
-};
-
-typedef struct ext4_io_end ext4_io_end_t;
-
-enum {
-	ES_WRITTEN_B = 0,
-	ES_UNWRITTEN_B = 1,
-	ES_DELAYED_B = 2,
-	ES_HOLE_B = 3,
-	ES_REFERENCED_B = 4,
-	ES_FLAGS = 5,
-};
-
-enum {
-	EXT4_STATE_JDATA = 0,
-	EXT4_STATE_NEW = 1,
-	EXT4_STATE_XATTR = 2,
-	EXT4_STATE_NO_EXPAND = 3,
-	EXT4_STATE_DA_ALLOC_CLOSE = 4,
-	EXT4_STATE_EXT_MIGRATE = 5,
-	EXT4_STATE_NEWENTRY = 6,
-	EXT4_STATE_MAY_INLINE_DATA = 7,
-	EXT4_STATE_EXT_PRECACHED = 8,
-	EXT4_STATE_LUSTRE_EA_INODE = 9,
-	EXT4_STATE_VERITY_IN_PROGRESS = 10,
-	EXT4_STATE_FC_COMMITTING = 11,
-};
-
-struct ext4_iloc {
-	struct buffer_head *bh;
-	long unsigned int offset;
-	ext4_group_t block_group;
-};
-
-struct ext4_extent_tail {
-	__le32 et_checksum;
-};
-
-struct ext4_extent {
-	__le32 ee_block;
-	__le16 ee_len;
-	__le16 ee_start_hi;
-	__le32 ee_start_lo;
-};
-
-struct ext4_extent_idx {
-	__le32 ei_block;
-	__le32 ei_leaf_lo;
-	__le16 ei_leaf_hi;
-	__u16 ei_unused;
-};
-
-struct ext4_extent_header {
-	__le16 eh_magic;
-	__le16 eh_entries;
-	__le16 eh_max;
-	__le16 eh_depth;
-	__le32 eh_generation;
-};
-
-struct ext4_ext_path {
-	ext4_fsblk_t p_block;
-	__u16 p_depth;
-	__u16 p_maxdepth;
-	struct ext4_extent *p_ext;
-	struct ext4_extent_idx *p_idx;
-	struct ext4_extent_header *p_hdr;
-	struct buffer_head *p_bh;
-};
-
-struct partial_cluster {
-	ext4_fsblk_t pclu;
-	ext4_lblk_t lblk;
-	enum {
-		initial = 0,
-		tofree = 1,
-		nofree = 2,
-	} state;
-};
-
-struct pending_reservation {
-	struct rb_node rb_node;
-	ext4_lblk_t lclu;
-};
-
-struct rsvd_count {
-	int ndelonly;
-	bool first_do_lblk_found;
-	ext4_lblk_t first_do_lblk;
-	ext4_lblk_t last_do_lblk;
-	struct extent_status *left_es;
-	bool partial;
-	ext4_lblk_t lclu;
+struct iomap_dio_ops {
+	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
 };
 
 enum {
 	EXT4_MF_MNTDIR_SAMPLED = 0,
 	EXT4_MF_FS_ABORTED = 1,
 	EXT4_MF_FC_INELIGIBLE = 2,
-	EXT4_MF_FC_COMMITTING = 3,
 };
 
-struct fsmap {
-	__u32 fmr_device;
-	__u32 fmr_flags;
-	__u64 fmr_physical;
-	__u64 fmr_owner;
-	__u64 fmr_offset;
-	__u64 fmr_length;
-	__u64 fmr_reserved[3];
-};
-
-struct ext4_fsmap {
-	struct list_head fmr_list;
-	dev_t fmr_device;
-	uint32_t fmr_flags;
-	uint64_t fmr_physical;
-	uint64_t fmr_owner;
-	uint64_t fmr_length;
-};
-
-struct ext4_fsmap_head {
-	uint32_t fmh_iflags;
-	uint32_t fmh_oflags;
-	unsigned int fmh_count;
-	unsigned int fmh_entries;
-	struct ext4_fsmap fmh_keys[2];
-};
-
-typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
-
-struct ext4_getfsmap_info {
-	struct ext4_fsmap_head *gfi_head;
-	ext4_fsmap_format_t gfi_formatter;
-	void *gfi_format_arg;
-	ext4_fsblk_t gfi_next_fsblk;
-	u32 gfi_dev;
-	ext4_group_t gfi_agno;
-	struct ext4_fsmap gfi_low;
-	struct ext4_fsmap gfi_high;
-	struct ext4_fsmap gfi_lastfree;
-	struct list_head gfi_meta_list;
-	bool gfi_last;
-};
-
-struct ext4_getfsmap_dev {
-	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
-	u32 gfd_dev;
-};
-
-struct dx_hash_info {
-	u32 hash;
-	u32 minor_hash;
-	int hash_version;
-	u32 *seed;
-};
-
-typedef unsigned int __kernel_mode_t;
-
-typedef __kernel_mode_t mode_t;
-
-struct ext4_inode {
-	__le16 i_mode;
-	__le16 i_uid;
-	__le32 i_size_lo;
-	__le32 i_atime;
-	__le32 i_ctime;
-	__le32 i_mtime;
-	__le32 i_dtime;
-	__le16 i_gid;
-	__le16 i_links_count;
-	__le32 i_blocks_lo;
-	__le32 i_flags;
-	union {
-		struct {
-			__le32 l_i_version;
-		} linux1;
-		struct {
-			__u32 h_i_translator;
-		} hurd1;
-		struct {
-			__u32 m_i_reserved1;
-		} masix1;
-	} osd1;
-	__le32 i_block[15];
-	__le32 i_generation;
-	__le32 i_file_acl_lo;
-	__le32 i_size_high;
-	__le32 i_obso_faddr;
-	union {
-		struct {
-			__le16 l_i_blocks_high;
-			__le16 l_i_file_acl_high;
-			__le16 l_i_uid_high;
-			__le16 l_i_gid_high;
-			__le16 l_i_checksum_lo;
-			__le16 l_i_reserved;
-		} linux2;
-		struct {
-			__le16 h_i_reserved1;
-			__u16 h_i_mode_high;
-			__u16 h_i_uid_high;
-			__u16 h_i_gid_high;
-			__u32 h_i_author;
-		} hurd2;
-		struct {
-			__le16 h_i_reserved1;
-			__le16 m_i_file_acl_high;
-			__u32 m_i_reserved2[2];
-		} masix2;
-	} osd2;
-	__le16 i_extra_isize;
-	__le16 i_checksum_hi;
-	__le32 i_ctime_extra;
-	__le32 i_mtime_extra;
-	__le32 i_atime_extra;
-	__le32 i_crtime;
-	__le32 i_crtime_extra;
-	__le32 i_version_hi;
-	__le32 i_projid;
-};
-
-struct orlov_stats {
-	__u64 free_clusters;
-	__u32 free_inodes;
-	__u32 used_dirs;
-};
-
-typedef struct {
-	__le32 *p;
-	__le32 key;
-	struct buffer_head *bh;
-} Indirect;
-
-struct ext4_filename {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	struct dx_hash_info hinfo;
-	struct fscrypt_str crypto_buf;
-	struct fscrypt_str cf_name;
-};
-
-struct ext4_xattr_ibody_header {
-	__le32 h_magic;
-};
-
-struct ext4_xattr_entry {
-	__u8 e_name_len;
-	__u8 e_name_index;
-	__le16 e_value_offs;
-	__le32 e_value_inum;
-	__le32 e_value_size;
-	__le32 e_hash;
-	char e_name[0];
-};
-
-struct ext4_xattr_info {
-	const char *name;
-	const void *value;
-	size_t value_len;
-	int name_index;
-	int in_inode;
-};
-
-struct ext4_xattr_search {
-	struct ext4_xattr_entry *first;
-	void *base;
-	void *end;
-	struct ext4_xattr_entry *here;
-	int not_found;
-};
-
-struct ext4_xattr_ibody_find {
-	struct ext4_xattr_search s;
-	struct ext4_iloc iloc;
-};
-
-typedef short unsigned int __kernel_uid16_t;
-
-typedef short unsigned int __kernel_gid16_t;
-
-typedef __kernel_uid16_t uid16_t;
-
-typedef __kernel_gid16_t gid16_t;
-
-struct ext4_io_submit {
-	struct writeback_control *io_wbc;
-	struct bio *io_bio;
-	ext4_io_end_t *io_end;
-	sector_t io_next_block;
-};
-
-typedef enum {
-	EXT4_IGET_NORMAL = 0,
-	EXT4_IGET_SPECIAL = 1,
-	EXT4_IGET_HANDLE = 2,
-} ext4_iget_flags;
-
-struct ext4_xattr_inode_array {
-	unsigned int count;
-	struct inode *inodes[0];
-};
-
-struct mpage_da_data {
-	struct inode *inode;
-	struct writeback_control *wbc;
-	long unsigned int first_page;
-	long unsigned int next_page;
-	long unsigned int last_page;
-	struct ext4_map_blocks map;
-	struct ext4_io_submit io_submit;
-	unsigned int do_map: 1;
-	unsigned int scanned_until_end: 1;
-};
-
-struct fstrim_range {
-	__u64 start;
-	__u64 len;
-	__u64 minlen;
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0];
 };
 
 struct ext4_new_group_input {
@@ -43146,6 +91255,12 @@
 	__u32 free_clusters_count;
 };
 
+struct fsuuid {
+	__u32 fsu_len;
+	__u32 fsu_flags;
+	__u8 fsu_uuid[0];
+};
+
 struct move_extent {
 	__u32 reserved;
 	__u32 donor_fd;
@@ -43155,6 +91270,22 @@
 	__u64 moved_len;
 };
 
+typedef enum {
+	EXT4_IGET_NORMAL = 0,
+	EXT4_IGET_SPECIAL = 1,
+	EXT4_IGET_HANDLE = 2,
+} ext4_iget_flags;
+
+struct fsmap {
+	__u32 fmr_device;
+	__u32 fmr_flags;
+	__u64 fmr_physical;
+	__u64 fmr_owner;
+	__u64 fmr_offset;
+	__u64 fmr_length;
+	__u64 fmr_reserved[3];
+};
+
 struct fsmap_head {
 	__u32 fmh_iflags;
 	__u32 fmh_oflags;
@@ -43165,6 +91296,27 @@
 	struct fsmap fmh_recs[0];
 };
 
+struct ext4_fsmap {
+	struct list_head fmr_list;
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	uint64_t fmr_length;
+};
+
+struct ext4_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct ext4_fsmap fmh_keys[2];
+};
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
 struct getfsmap_info {
 	struct super_block *gi_sb;
 	struct fsmap_head *gi_data;
@@ -43172,249 +91324,8 @@
 	__u32 gi_last_flags;
 };
 
-enum blk_default_limits {
-	BLK_MAX_SEGMENTS = 128,
-	BLK_SAFE_MAX_SECTORS = 255,
-	BLK_DEF_MAX_SECTORS = 2560,
-	BLK_MAX_SEGMENT_SIZE = 65536,
-	BLK_SEG_BOUNDARY_MASK = 4294967295,
-};
-
-struct ext4_free_data {
-	struct list_head efd_list;
-	struct rb_node efd_node;
-	ext4_group_t efd_group;
-	ext4_grpblk_t efd_start_cluster;
-	ext4_grpblk_t efd_count;
-	tid_t efd_tid;
-};
-
-struct ext4_prealloc_space {
-	struct list_head pa_inode_list;
-	struct list_head pa_group_list;
-	union {
-		struct list_head pa_tmp_list;
-		struct callback_head pa_rcu;
-	} u;
-	spinlock_t pa_lock;
-	atomic_t pa_count;
-	unsigned int pa_deleted;
-	ext4_fsblk_t pa_pstart;
-	ext4_lblk_t pa_lstart;
-	ext4_grpblk_t pa_len;
-	ext4_grpblk_t pa_free;
-	short unsigned int pa_type;
-	spinlock_t *pa_obj_lock;
-	struct inode *pa_inode;
-};
-
-enum {
-	MB_INODE_PA = 0,
-	MB_GROUP_PA = 1,
-};
-
-struct ext4_free_extent {
-	ext4_lblk_t fe_logical;
-	ext4_grpblk_t fe_start;
-	ext4_group_t fe_group;
-	ext4_grpblk_t fe_len;
-};
-
-struct ext4_allocation_context {
-	struct inode *ac_inode;
-	struct super_block *ac_sb;
-	struct ext4_free_extent ac_o_ex;
-	struct ext4_free_extent ac_g_ex;
-	struct ext4_free_extent ac_b_ex;
-	struct ext4_free_extent ac_f_ex;
-	__u16 ac_groups_scanned;
-	__u16 ac_found;
-	__u16 ac_tail;
-	__u16 ac_buddy;
-	__u16 ac_flags;
-	__u8 ac_status;
-	__u8 ac_criteria;
-	__u8 ac_2order;
-	__u8 ac_op;
-	struct page *ac_bitmap_page;
-	struct page *ac_buddy_page;
-	struct ext4_prealloc_space *ac_pa;
-	struct ext4_locality_group *ac_lg;
-};
-
-struct ext4_buddy {
-	struct page *bd_buddy_page;
-	void *bd_buddy;
-	struct page *bd_bitmap_page;
-	void *bd_bitmap;
-	struct ext4_group_info *bd_info;
-	struct super_block *bd_sb;
-	__u16 bd_blkbits;
-	ext4_group_t bd_group;
-};
-
-typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
-
-struct sg {
-	struct ext4_group_info info;
-	ext4_grpblk_t counters[18];
-};
-
-struct migrate_struct {
-	ext4_lblk_t first_block;
-	ext4_lblk_t last_block;
-	ext4_lblk_t curr_block;
-	ext4_fsblk_t first_pblock;
-	ext4_fsblk_t last_pblock;
-};
-
-struct mmp_struct {
-	__le32 mmp_magic;
-	__le32 mmp_seq;
-	__le64 mmp_time;
-	char mmp_nodename[64];
-	char mmp_bdevname[32];
-	__le16 mmp_check_interval;
-	__le16 mmp_pad1;
-	__le32 mmp_pad2[226];
-	__le32 mmp_checksum;
-};
-
-struct mmpd_data {
-	struct buffer_head *bh;
-	struct super_block *sb;
-};
-
-struct ext4_dir_entry {
-	__le32 inode;
-	__le16 rec_len;
-	__le16 name_len;
-	char name[255];
-};
-
-struct ext4_dir_entry_tail {
-	__le32 det_reserved_zero1;
-	__le16 det_rec_len;
-	__u8 det_reserved_zero2;
-	__u8 det_reserved_ft;
-	__le32 det_checksum;
-};
-
-typedef enum {
-	EITHER = 0,
-	INDEX = 1,
-	DIRENT = 2,
-	DIRENT_HTREE = 3,
-} dirblock_type_t;
-
-struct fake_dirent {
-	__le32 inode;
-	__le16 rec_len;
-	u8 name_len;
-	u8 file_type;
-};
-
-struct dx_countlimit {
-	__le16 limit;
-	__le16 count;
-};
-
-struct dx_entry {
-	__le32 hash;
-	__le32 block;
-};
-
-struct dx_root_info {
-	__le32 reserved_zero;
-	u8 hash_version;
-	u8 info_length;
-	u8 indirect_levels;
-	u8 unused_flags;
-};
-
-struct dx_root {
-	struct fake_dirent dot;
-	char dot_name[4];
-	struct fake_dirent dotdot;
-	char dotdot_name[4];
-	struct dx_root_info info;
-	struct dx_entry entries[0];
-};
-
-struct dx_node {
-	struct fake_dirent fake;
-	struct dx_entry entries[0];
-};
-
-struct dx_frame {
-	struct buffer_head *bh;
-	struct dx_entry *entries;
-	struct dx_entry *at;
-};
-
-struct dx_map_entry {
-	u32 hash;
-	u16 offs;
-	u16 size;
-};
-
-struct dx_tail {
-	u32 dt_reserved;
-	__le32 dt_checksum;
-};
-
-struct ext4_renament {
-	struct inode *dir;
-	struct dentry *dentry;
-	struct inode *inode;
-	bool is_dir;
-	int dir_nlink_delta;
-	struct buffer_head *bh;
-	struct ext4_dir_entry_2 *de;
-	int inlined;
-	struct buffer_head *dir_bh;
-	struct ext4_dir_entry_2 *parent_de;
-	int dir_inlined;
-};
-
-enum bio_post_read_step {
-	STEP_INITIAL = 0,
-	STEP_DECRYPT = 1,
-	STEP_VERITY = 2,
-	STEP_MAX = 3,
-};
-
-struct bio_post_read_ctx {
-	struct bio *bio;
-	struct work_struct work;
-	unsigned int cur_step;
-	unsigned int enabled_steps;
-};
-
-enum {
-	BLOCK_BITMAP = 0,
-	INODE_BITMAP = 1,
-	INODE_TABLE = 2,
-	GROUP_TABLE_COUNT = 3,
-};
-
-struct ext4_rcu_ptr {
-	struct callback_head rcu;
-	void *ptr;
-};
-
-struct ext4_new_flex_group_data {
-	struct ext4_new_group_data *groups;
-	__u16 *bg_flags;
-	ext4_group_t count;
-};
-
-enum stat_group {
-	STAT_READ = 0,
-	STAT_WRITE = 1,
-	STAT_DISCARD = 2,
-	STAT_FLUSH = 3,
-	NR_STAT_GROUPS = 4,
+struct dax_holder_operations {
+	int (*notify_failure)(struct dax_device *, u64, u64, int);
 };
 
 enum {
@@ -43429,6 +91340,23 @@
 	struct mutex li_list_mtx;
 };
 
+struct ext4_extent {
+	__le32 ee_block;
+	__le16 ee_len;
+	__le16 ee_start_hi;
+	__le32 ee_start_lo;
+};
+
+struct partial_cluster {
+	ext4_fsblk_t pclu;
+	ext4_lblk_t lblk;
+	enum {
+		initial = 0,
+		tofree = 1,
+		nofree = 2,
+	} state;
+};
+
 struct ext4_journal_cb_entry {
 	struct list_head jce_list;
 	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
@@ -43518,7 +91446,6 @@
 	ino_t ino;
 	loff_t pos;
 	unsigned int len;
-	unsigned int flags;
 	char __data[0];
 };
 
@@ -43587,13 +91514,13 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_invalidatepage_op {
+struct trace_event_raw_ext4_invalidate_folio_op {
 	struct trace_entry ent;
 	dev_t dev;
 	ino_t ino;
 	long unsigned int index;
-	unsigned int offset;
-	unsigned int length;
+	size_t offset;
+	size_t length;
 	char __data[0];
 };
 
@@ -43830,27 +91757,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_direct_IO_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	int ret;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4__fallocate_mode {
 	struct trace_entry ent;
 	dev_t dev;
@@ -44014,46 +91920,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_ext_put_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	ext4_fsblk_t start;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_find_delalloc_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	int reverse;
-	int found;
-	ext4_lblk_t found_blk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_reserved_cluster_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4_ext_show_extent {
 	struct trace_entry ent;
 	dev_t dev;
@@ -44314,6 +92180,7 @@
 struct trace_event_raw_ext4_fc_commit_start {
 	struct trace_entry ent;
 	dev_t dev;
+	tid_t tid;
 	char __data[0];
 };
 
@@ -44325,37 +92192,26 @@
 	int num_fc;
 	int num_fc_ineligible;
 	int nblks_agg;
+	tid_t tid;
 	char __data[0];
 };
 
 struct trace_event_raw_ext4_fc_stats {
 	struct trace_entry ent;
 	dev_t dev;
-	struct ext4_sb_info *sbi;
-	int count;
+	unsigned int fc_ineligible_rc[9];
+	long unsigned int fc_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_numblks;
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_fc_track_create {
+struct trace_event_raw_ext4_fc_track_dentry {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_link {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_unlink {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -44363,7 +92219,9 @@
 struct trace_event_raw_ext4_fc_track_inode {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -44371,13 +92229,32 @@
 struct trace_event_raw_ext4_fc_track_range {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	long int start;
 	long int end;
 	int error;
 	char __data[0];
 };
 
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_ext4_other_inode_update_time {};
 
 struct trace_event_data_offsets_ext4_free_inode {};
@@ -44410,7 +92287,7 @@
 
 struct trace_event_data_offsets_ext4__page_op {};
 
-struct trace_event_data_offsets_ext4_invalidatepage_op {};
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
 
 struct trace_event_data_offsets_ext4_discard_blocks {};
 
@@ -44456,10 +92333,6 @@
 
 struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
 
-struct trace_event_data_offsets_ext4_direct_IO_enter {};
-
-struct trace_event_data_offsets_ext4_direct_IO_exit {};
-
 struct trace_event_data_offsets_ext4__fallocate_mode {};
 
 struct trace_event_data_offsets_ext4_fallocate_exit {};
@@ -44492,14 +92365,6 @@
 
 struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
 
-struct trace_event_data_offsets_ext4_ext_put_in_cache {};
-
-struct trace_event_data_offsets_ext4_ext_in_cache {};
-
-struct trace_event_data_offsets_ext4_find_delalloc_range {};
-
-struct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};
-
 struct trace_event_data_offsets_ext4_ext_show_extent {};
 
 struct trace_event_data_offsets_ext4_remove_blocks {};
@@ -44558,16 +92423,16 @@
 
 struct trace_event_data_offsets_ext4_fc_stats {};
 
-struct trace_event_data_offsets_ext4_fc_track_create {};
-
-struct trace_event_data_offsets_ext4_fc_track_link {};
-
-struct trace_event_data_offsets_ext4_fc_track_unlink {};
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
 
 struct trace_event_data_offsets_ext4_fc_track_inode {};
 
 struct trace_event_data_offsets_ext4_fc_track_range {};
 
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
 typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
 
 typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
@@ -44586,9 +92451,9 @@
 
 typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
 
-typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
-typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
 typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
 
@@ -44610,9 +92475,9 @@
 
 typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
 
-typedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
-typedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
 typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
 
@@ -44666,10 +92531,6 @@
 
 typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);
 
-typedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
-
 typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
 
 typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
@@ -44714,14 +92575,6 @@
 
 typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
 
-typedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);
-
 typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
 
 typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
@@ -44786,21 +92639,30 @@
 
 typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
 
-typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *);
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
 
-typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int);
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
 
 typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
 
-typedef void (*btf_trace_ext4_fc_track_create)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_link)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_unlink)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_inode)(void *, struct inode *, int);
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
 
-typedef void (*btf_trace_ext4_fc_track_range)(void *, struct inode *, long int, long int, int);
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long int, long int, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
 
 enum {
 	Opt_bsd_df = 0,
@@ -44810,78 +92672,73 @@
 	Opt_resgid = 4,
 	Opt_resuid = 5,
 	Opt_sb = 6,
-	Opt_err_cont = 7,
-	Opt_err_panic = 8,
-	Opt_err_ro = 9,
-	Opt_nouid32 = 10,
-	Opt_debug = 11,
-	Opt_removed = 12,
-	Opt_user_xattr = 13,
-	Opt_nouser_xattr = 14,
-	Opt_acl = 15,
-	Opt_noacl = 16,
-	Opt_auto_da_alloc = 17,
-	Opt_noauto_da_alloc = 18,
-	Opt_noload = 19,
-	Opt_commit = 20,
-	Opt_min_batch_time = 21,
-	Opt_max_batch_time = 22,
-	Opt_journal_dev = 23,
-	Opt_journal_path = 24,
-	Opt_journal_checksum = 25,
-	Opt_journal_async_commit = 26,
-	Opt_abort = 27,
-	Opt_data_journal = 28,
-	Opt_data_ordered = 29,
-	Opt_data_writeback = 30,
-	Opt_data_err_abort = 31,
-	Opt_data_err_ignore = 32,
-	Opt_test_dummy_encryption = 33,
-	Opt_inlinecrypt = 34,
-	Opt_usrjquota = 35,
-	Opt_grpjquota = 36,
-	Opt_offusrjquota = 37,
-	Opt_offgrpjquota = 38,
-	Opt_jqfmt_vfsold = 39,
-	Opt_jqfmt_vfsv0 = 40,
-	Opt_jqfmt_vfsv1 = 41,
-	Opt_quota = 42,
-	Opt_noquota = 43,
-	Opt_barrier = 44,
-	Opt_nobarrier = 45,
-	Opt_err___2 = 46,
-	Opt_usrquota = 47,
-	Opt_grpquota = 48,
-	Opt_prjquota = 49,
-	Opt_i_version = 50,
-	Opt_dax = 51,
-	Opt_dax_always = 52,
-	Opt_dax_inode = 53,
-	Opt_dax_never = 54,
-	Opt_stripe = 55,
-	Opt_delalloc = 56,
-	Opt_nodelalloc = 57,
-	Opt_warn_on_error = 58,
-	Opt_nowarn_on_error = 59,
-	Opt_mblk_io_submit = 60,
-	Opt_lazytime = 61,
-	Opt_nolazytime = 62,
-	Opt_debug_want_extra_isize = 63,
-	Opt_nomblk_io_submit = 64,
-	Opt_block_validity = 65,
-	Opt_noblock_validity = 66,
-	Opt_inode_readahead_blks = 67,
-	Opt_journal_ioprio = 68,
-	Opt_dioread_nolock = 69,
-	Opt_dioread_lock = 70,
-	Opt_discard = 71,
-	Opt_nodiscard = 72,
-	Opt_init_itable = 73,
-	Opt_noinit_itable = 74,
-	Opt_max_dir_size_kb = 75,
-	Opt_nojournal_checksum = 76,
-	Opt_nombcache = 77,
-	Opt_prefetch_block_bitmaps = 78,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_nouser_xattr = 11,
+	Opt_acl = 12,
+	Opt_noacl = 13,
+	Opt_auto_da_alloc = 14,
+	Opt_noauto_da_alloc = 15,
+	Opt_noload = 16,
+	Opt_commit = 17,
+	Opt_min_batch_time = 18,
+	Opt_max_batch_time = 19,
+	Opt_journal_dev = 20,
+	Opt_journal_path = 21,
+	Opt_journal_checksum = 22,
+	Opt_journal_async_commit = 23,
+	Opt_abort = 24,
+	Opt_data_journal = 25,
+	Opt_data_ordered = 26,
+	Opt_data_writeback = 27,
+	Opt_data_err_abort = 28,
+	Opt_data_err_ignore = 29,
+	Opt_test_dummy_encryption = 30,
+	Opt_inlinecrypt = 31,
+	Opt_usrjquota = 32,
+	Opt_grpjquota = 33,
+	Opt_quota = 34,
+	Opt_noquota = 35,
+	Opt_barrier = 36,
+	Opt_nobarrier = 37,
+	Opt_err___4 = 38,
+	Opt_usrquota = 39,
+	Opt_grpquota = 40,
+	Opt_prjquota = 41,
+	Opt_dax = 42,
+	Opt_dax_always = 43,
+	Opt_dax_inode = 44,
+	Opt_dax_never = 45,
+	Opt_stripe = 46,
+	Opt_delalloc = 47,
+	Opt_nodelalloc = 48,
+	Opt_warn_on_error = 49,
+	Opt_nowarn_on_error = 50,
+	Opt_mblk_io_submit = 51,
+	Opt_debug_want_extra_isize = 52,
+	Opt_nomblk_io_submit = 53,
+	Opt_block_validity = 54,
+	Opt_noblock_validity = 55,
+	Opt_inode_readahead_blks = 56,
+	Opt_journal_ioprio = 57,
+	Opt_dioread_nolock = 58,
+	Opt_dioread_lock = 59,
+	Opt_discard = 60,
+	Opt_nodiscard = 61,
+	Opt_init_itable = 62,
+	Opt_noinit_itable = 63,
+	Opt_max_dir_size_kb = 64,
+	Opt_nojournal_checksum = 65,
+	Opt_nombcache = 66,
+	Opt_no_prefetch_block_bitmaps = 67,
+	Opt_mb_optimize_scan = 68,
+	Opt_errors = 69,
+	Opt_data = 70,
+	Opt_data_err = 71,
+	Opt_jqfmt = 72,
+	Opt_dax_type = 73,
 };
 
 struct mount_opts {
@@ -44893,7 +92750,37 @@
 struct ext4_sb_encodings {
 	__u16 magic;
 	char *name;
-	char *version;
+	unsigned int version;
+};
+
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	int s_jquota_fmt;
+	short unsigned int qname_spec;
+	long unsigned int vals_s_flags;
+	long unsigned int mask_s_flags;
+	long unsigned int journal_devnum;
+	long unsigned int s_commit_interval;
+	long unsigned int s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	long unsigned int vals_s_mount_flags;
+	long unsigned int mask_s_mount_flags;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
 };
 
 struct ext4_mount_options {
@@ -44908,1228 +92795,143 @@
 	char *s_qf_names[3];
 };
 
-enum {
-	attr_noop = 0,
-	attr_delayed_allocation_blocks = 1,
-	attr_session_write_kbytes = 2,
-	attr_lifetime_write_kbytes = 3,
-	attr_reserved_clusters = 4,
-	attr_inode_readahead = 5,
-	attr_trigger_test_error = 6,
-	attr_first_error_time = 7,
-	attr_last_error_time = 8,
-	attr_feature = 9,
-	attr_pointer_ui = 10,
-	attr_pointer_ul = 11,
-	attr_pointer_u64 = 12,
-	attr_pointer_u8 = 13,
-	attr_pointer_string = 14,
-	attr_pointer_atomic = 15,
-	attr_journal_task = 16,
+enum btrfs_mod_log_op {
+	BTRFS_MOD_LOG_KEY_REPLACE = 0,
+	BTRFS_MOD_LOG_KEY_ADD = 1,
+	BTRFS_MOD_LOG_KEY_REMOVE = 2,
+	BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING = 3,
+	BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING = 4,
+	BTRFS_MOD_LOG_MOVE_KEYS = 5,
+	BTRFS_MOD_LOG_ROOT_REPLACE = 6,
 };
 
-enum {
-	ptr_explicit = 0,
-	ptr_ext4_sb_info_offset = 1,
-	ptr_ext4_super_block_offset = 2,
+struct btrfs_csums {
+	u16 size;
+	const char name[10];
+	const char driver[12];
 };
 
-struct ext4_attr {
-	struct attribute attr;
-	short int attr_id;
-	short int attr_ptr;
-	short unsigned int attr_size;
-	union {
-		int offset;
-		void *explicit_ptr;
-	} u;
-};
+struct btrfs_free_space_entry {
+	__le64 offset;
+	__le64 bytes;
+	__u8 type;
+} __attribute__((packed));
 
-struct ext4_xattr_header {
-	__le32 h_magic;
-	__le32 h_refcount;
-	__le32 h_blocks;
-	__le32 h_hash;
-	__le32 h_checksum;
-	__u32 h_reserved[3];
-};
+struct btrfs_free_space_header {
+	struct btrfs_disk_key location;
+	__le64 generation;
+	__le64 num_entries;
+	__le64 num_bitmaps;
+} __attribute__((packed));
 
-struct ext4_xattr_block_find {
-	struct ext4_xattr_search s;
-	struct buffer_head *bh;
-};
-
-struct ext4_fc_tl {
-	__le16 fc_tag;
-	__le16 fc_len;
-};
-
-struct ext4_fc_head {
-	__le32 fc_features;
-	__le32 fc_tid;
-};
-
-struct ext4_fc_add_range {
-	__le32 fc_ino;
-	__u8 fc_ex[12];
-};
-
-struct ext4_fc_del_range {
-	__le32 fc_ino;
-	__le32 fc_lblk;
-	__le32 fc_len;
-};
-
-struct ext4_fc_dentry_info {
-	__le32 fc_parent_ino;
-	__le32 fc_ino;
-	u8 fc_dname[0];
-};
-
-struct ext4_fc_inode {
-	__le32 fc_ino;
-	__u8 fc_raw_inode[0];
-};
-
-struct ext4_fc_tail {
-	__le32 fc_tid;
-	__le32 fc_crc;
-};
-
-struct ext4_fc_dentry_update {
-	int fcd_op;
-	int fcd_parent;
-	int fcd_ino;
-	struct qstr fcd_name;
-	unsigned char fcd_iname[32];
-	struct list_head fcd_list;
-};
-
-struct __track_dentry_update_args {
-	struct dentry *dentry;
-	int op;
-};
-
-struct __track_range_args {
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-};
-
-struct dentry_info_args {
-	int parent_ino;
-	int dname_len;
-	int ino;
-	int inode_len;
-	char *dname;
-};
-
-typedef struct {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-} ext4_acl_entry;
-
-typedef struct {
-	__le32 a_version;
-} ext4_acl_header;
-
-struct commit_header {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-	unsigned char h_chksum_type;
-	unsigned char h_chksum_size;
-	unsigned char h_padding[2];
-	__be32 h_chksum[8];
-	__be64 h_commit_sec;
-	__be32 h_commit_nsec;
-};
-
-struct journal_block_tag3_s {
-	__be32 t_blocknr;
-	__be32 t_flags;
-	__be32 t_blocknr_high;
-	__be32 t_checksum;
-};
-
-typedef struct journal_block_tag3_s journal_block_tag3_t;
-
-struct journal_block_tag_s {
-	__be32 t_blocknr;
-	__be16 t_checksum;
-	__be16 t_flags;
-	__be32 t_blocknr_high;
-};
-
-typedef struct journal_block_tag_s journal_block_tag_t;
-
-struct jbd2_journal_block_tail {
-	__be32 t_checksum;
-};
-
-struct jbd2_journal_revoke_header_s {
-	journal_header_t r_header;
-	__be32 r_count;
-};
-
-typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
-
-struct recovery_info {
-	tid_t start_transaction;
-	tid_t end_transaction;
-	int nr_replays;
-	int nr_revokes;
-	int nr_revoke_hits;
-};
-
-struct jbd2_revoke_table_s {
-	int hash_size;
-	int hash_shift;
-	struct list_head *hash_table;
-};
-
-struct jbd2_revoke_record_s {
-	struct list_head hash;
-	tid_t sequence;
-	long long unsigned int blocknr;
-};
-
-struct trace_event_raw_jbd2_checkpoint {
-	struct trace_entry ent;
-	dev_t dev;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_end_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	int head;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_submit_inode_data {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_start_class {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_extend {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int buffer_credits;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int interval;
-	int sync;
-	int requested_blocks;
-	int dirtied_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_run_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int wait;
-	long unsigned int request_delay;
-	long unsigned int running;
-	long unsigned int locked;
-	long unsigned int flushing;
-	long unsigned int logging;
-	__u32 handle_count;
-	__u32 blocks;
-	__u32 blocks_logged;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_checkpoint_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int chp_time;
-	__u32 forced_to_close;
-	__u32 written;
-	__u32 dropped;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_update_log_tail {
-	struct trace_entry ent;
-	dev_t dev;
-	tid_t tail_sequence;
-	tid_t first_tid;
-	long unsigned int block_nr;
-	long unsigned int freed;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_write_superblock {
-	struct trace_entry ent;
-	dev_t dev;
-	int write_op;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_lock_buffer_stall {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int stall_ms;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_jbd2_checkpoint {};
-
-struct trace_event_data_offsets_jbd2_commit {};
-
-struct trace_event_data_offsets_jbd2_end_commit {};
-
-struct trace_event_data_offsets_jbd2_submit_inode_data {};
-
-struct trace_event_data_offsets_jbd2_handle_start_class {};
-
-struct trace_event_data_offsets_jbd2_handle_extend {};
-
-struct trace_event_data_offsets_jbd2_handle_stats {};
-
-struct trace_event_data_offsets_jbd2_run_stats {};
-
-struct trace_event_data_offsets_jbd2_checkpoint_stats {};
-
-struct trace_event_data_offsets_jbd2_update_log_tail {};
-
-struct trace_event_data_offsets_jbd2_write_superblock {};
-
-struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
-
-typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
-
-typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
-
-typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
-
-typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
-
-typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
-
-typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
-
-struct jbd2_stats_proc_session {
-	journal_t *journal;
-	struct transaction_stats_s *stats;
-	int start;
-	int max;
-};
-
-struct ramfs_mount_opts {
-	umode_t mode;
-};
-
-struct ramfs_fs_info {
-	struct ramfs_mount_opts mount_opts;
-};
-
-enum ramfs_param {
-	Opt_mode___3 = 0,
-};
-
-enum hugetlbfs_size_type {
-	NO_SIZE = 0,
-	SIZE_STD = 1,
-	SIZE_PERCENT = 2,
-};
-
-struct hugetlbfs_fs_context {
-	struct hstate *hstate;
-	long long unsigned int max_size_opt;
-	long long unsigned int min_size_opt;
-	long int max_hpages;
-	long int nr_inodes;
-	long int min_hpages;
-	enum hugetlbfs_size_type max_val_type;
-	enum hugetlbfs_size_type min_val_type;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-enum hugetlb_param {
-	Opt_gid___4 = 0,
-	Opt_min_size = 1,
-	Opt_mode___4 = 2,
-	Opt_nr_inodes___2 = 3,
-	Opt_pagesize = 4,
-	Opt_size___2 = 5,
-	Opt_uid___3 = 6,
-};
-
-struct getdents_callback___2 {
-	struct dir_context ctx;
-	char *name;
-	u64 ino;
-	int found;
-	int sequence;
-};
-
-typedef u16 wchar_t;
-
-typedef u32 unicode_t;
-
-struct nls_table {
-	const char *charset;
-	const char *alias;
-	int (*uni2char)(wchar_t, unsigned char *, int);
-	int (*char2uni)(const unsigned char *, int, wchar_t *);
-	const unsigned char *charset2lower;
-	const unsigned char *charset2upper;
-	struct module *owner;
-	struct nls_table *next;
-};
-
-enum utf16_endian {
-	UTF16_HOST_ENDIAN = 0,
-	UTF16_LITTLE_ENDIAN = 1,
-	UTF16_BIG_ENDIAN = 2,
-};
-
-struct utf8_table {
-	int cmask;
-	int cval;
-	int shift;
-	long int lmask;
-	long int lval;
-};
-
-struct utf8data;
-
-struct utf8cursor {
-	const struct utf8data *data;
-	const char *s;
-	const char *p;
-	const char *ss;
-	const char *sp;
-	unsigned int len;
-	unsigned int slen;
-	short int ccc;
-	short int nccc;
-	unsigned char hangul[12];
-};
-
-struct utf8data {
-	unsigned int maxage;
-	unsigned int offset;
-};
-
-typedef const unsigned char utf8trie_t;
-
-typedef const unsigned char utf8leaf_t;
-
-typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
-
-struct debugfs_fsdata {
-	const struct file_operations *real_fops;
-	refcount_t active_users;
-	struct completion active_users_drained;
-};
-
-struct debugfs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-enum {
-	Opt_uid___4 = 0,
-	Opt_gid___5 = 1,
-	Opt_mode___5 = 2,
-	Opt_err___3 = 3,
-};
-
-struct debugfs_fs_info {
-	struct debugfs_mount_opts mount_opts;
-};
-
-struct debugfs_blob_wrapper {
-	void *data;
-	long unsigned int size;
-};
-
-struct debugfs_reg32 {
-	char *name;
-	long unsigned int offset;
-};
-
-struct debugfs_regset32 {
-	const struct debugfs_reg32 *regs;
-	int nregs;
-	void *base;
-	struct device *dev;
-};
-
-struct debugfs_u32_array {
-	u32 *array;
-	u32 n_elements;
-};
-
-struct debugfs_devm_entry {
-	int (*read)(struct seq_file *, void *);
-	struct device *dev;
-};
-
-struct tracefs_dir_ops {
-	int (*mkdir)(const char *);
-	int (*rmdir)(const char *);
-};
-
-struct tracefs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-struct tracefs_fs_info {
-	struct tracefs_mount_opts mount_opts;
-};
-
-enum pstore_type_id {
-	PSTORE_TYPE_DMESG = 0,
-	PSTORE_TYPE_MCE = 1,
-	PSTORE_TYPE_CONSOLE = 2,
-	PSTORE_TYPE_FTRACE = 3,
-	PSTORE_TYPE_PPC_RTAS = 4,
-	PSTORE_TYPE_PPC_OF = 5,
-	PSTORE_TYPE_PPC_COMMON = 6,
-	PSTORE_TYPE_PMSG = 7,
-	PSTORE_TYPE_PPC_OPAL = 8,
-	PSTORE_TYPE_MAX = 9,
-};
-
-struct pstore_info;
-
-struct pstore_record {
-	struct pstore_info *psi;
-	enum pstore_type_id type;
-	u64 id;
-	struct timespec64 time;
-	char *buf;
-	ssize_t size;
-	ssize_t ecc_notice_size;
-	int count;
-	enum kmsg_dump_reason reason;
-	unsigned int part;
-	bool compressed;
-};
-
-struct pstore_info {
-	struct module *owner;
-	const char *name;
-	struct semaphore buf_lock;
-	char *buf;
-	size_t bufsize;
-	struct mutex read_mutex;
-	int flags;
-	int max_reason;
-	void *data;
-	int (*open)(struct pstore_info *);
-	int (*close)(struct pstore_info *);
-	ssize_t (*read)(struct pstore_record *);
-	int (*write)(struct pstore_record *);
-	int (*write_user)(struct pstore_record *, const char *);
-	int (*erase)(struct pstore_record *);
-};
-
-struct pstore_ftrace_record {
-	long unsigned int ip;
-	long unsigned int parent_ip;
-	u64 ts;
-};
-
-struct pstore_private {
+struct btrfs_trim_range {
+	u64 start;
+	u64 bytes;
 	struct list_head list;
-	struct dentry *dentry;
-	struct pstore_record *record;
-	size_t total_size;
 };
 
-struct pstore_ftrace_seq_data {
-	const void *ptr;
-	size_t off;
-	size_t size;
+struct ulist_iterator {
+	struct list_head *cur_list;
 };
 
-enum {
-	Opt_kmsg_bytes = 0,
-	Opt_err___4 = 1,
-};
-
-struct pstore_zbackend {
-	int (*zbufsize)(size_t);
-	const char *name;
-};
-
-typedef s32 compat_key_t;
-
-struct ipc64_perm {
-	__kernel_key_t key;
-	__kernel_uid32_t uid;
-	__kernel_gid32_t gid;
-	__kernel_uid32_t cuid;
-	__kernel_gid32_t cgid;
-	__kernel_mode_t mode;
-	unsigned char __pad1[0];
-	short unsigned int seq;
-	short unsigned int __pad2;
-	__kernel_ulong_t __unused1;
-	__kernel_ulong_t __unused2;
-};
-
-typedef u32 __compat_gid32_t;
-
-struct compat_ipc64_perm {
-	compat_key_t key;
-	__compat_uid32_t uid;
-	__compat_gid32_t gid;
-	__compat_uid32_t cuid;
-	__compat_gid32_t cgid;
-	short unsigned int mode;
-	short unsigned int __pad1;
-	short unsigned int seq;
-	short unsigned int __pad2;
-	compat_ulong_t unused1;
-	compat_ulong_t unused2;
-};
-
-struct compat_ipc_perm {
-	key_t key;
-	__compat_uid_t uid;
-	__compat_gid_t gid;
-	__compat_uid_t cuid;
-	__compat_gid_t cgid;
-	compat_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_perm {
-	__kernel_key_t key;
-	__kernel_uid_t uid;
-	__kernel_gid_t gid;
-	__kernel_uid_t cuid;
-	__kernel_gid_t cgid;
-	__kernel_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_params {
-	key_t key;
-	int flg;
-	union {
-		size_t size;
-		int nsems;
-	} u;
-};
-
-struct ipc_ops {
-	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
-	int (*associate)(struct kern_ipc_perm *, int);
-	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
-};
-
-struct ipc_proc_iface {
-	const char *path;
-	const char *header;
-	int ids;
-	int (*show)(struct seq_file *, void *);
-};
-
-struct ipc_proc_iter {
-	struct ipc_namespace *ns;
-	struct pid_namespace *pid_ns;
-	struct ipc_proc_iface *iface;
-};
-
-struct msg_msgseg;
-
-struct msg_msg {
-	struct list_head m_list;
-	long int m_type;
-	size_t m_ts;
-	struct msg_msgseg *next;
-	void *security;
-};
-
-struct msg_msgseg {
-	struct msg_msgseg *next;
-};
-
-typedef int __kernel_ipc_pid_t;
-
-typedef __kernel_long_t __kernel_old_time_t;
-
-struct msgbuf {
-	__kernel_long_t mtype;
-	char mtext[1];
-};
-
-struct msg;
-
-struct msqid_ds {
-	struct ipc_perm msg_perm;
-	struct msg *msg_first;
-	struct msg *msg_last;
-	__kernel_old_time_t msg_stime;
-	__kernel_old_time_t msg_rtime;
-	__kernel_old_time_t msg_ctime;
-	long unsigned int msg_lcbytes;
-	long unsigned int msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	__kernel_ipc_pid_t msg_lspid;
-	__kernel_ipc_pid_t msg_lrpid;
-};
-
-struct msqid64_ds {
-	struct ipc64_perm msg_perm;
-	long int msg_stime;
-	long int msg_rtime;
-	long int msg_ctime;
-	long unsigned int msg_cbytes;
-	long unsigned int msg_qnum;
-	long unsigned int msg_qbytes;
-	__kernel_pid_t msg_lspid;
-	__kernel_pid_t msg_lrpid;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-};
-
-struct msginfo {
-	int msgpool;
-	int msgmap;
-	int msgmax;
-	int msgmnb;
-	int msgmni;
-	int msgssz;
-	int msgtql;
-	short unsigned int msgseg;
-};
-
-typedef u16 compat_ipc_pid_t;
-
-struct compat_msqid64_ds {
-	struct compat_ipc64_perm msg_perm;
-	compat_ulong_t msg_stime;
-	compat_ulong_t msg_stime_high;
-	compat_ulong_t msg_rtime;
-	compat_ulong_t msg_rtime_high;
-	compat_ulong_t msg_ctime;
-	compat_ulong_t msg_ctime_high;
-	compat_ulong_t msg_cbytes;
-	compat_ulong_t msg_qnum;
-	compat_ulong_t msg_qbytes;
-	compat_pid_t msg_lspid;
-	compat_pid_t msg_lrpid;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct msg_queue {
-	struct kern_ipc_perm q_perm;
-	time64_t q_stime;
-	time64_t q_rtime;
-	time64_t q_ctime;
-	long unsigned int q_cbytes;
-	long unsigned int q_qnum;
-	long unsigned int q_qbytes;
-	struct pid *q_lspid;
-	struct pid *q_lrpid;
-	struct list_head q_messages;
-	struct list_head q_receivers;
-	struct list_head q_senders;
-	long: 64;
-	long: 64;
-};
-
-struct msg_receiver {
-	struct list_head r_list;
-	struct task_struct *r_tsk;
-	int r_mode;
-	long int r_msgtype;
-	long int r_maxsize;
-	struct msg_msg *r_msg;
-};
-
-struct msg_sender {
+struct ulist_node {
+	u64 val;
+	u64 aux;
 	struct list_head list;
-	struct task_struct *tsk;
-	size_t msgsz;
-};
-
-struct compat_msqid_ds {
-	struct compat_ipc_perm msg_perm;
-	compat_uptr_t msg_first;
-	compat_uptr_t msg_last;
-	old_time32_t msg_stime;
-	old_time32_t msg_rtime;
-	old_time32_t msg_ctime;
-	compat_ulong_t msg_lcbytes;
-	compat_ulong_t msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	compat_ipc_pid_t msg_lspid;
-	compat_ipc_pid_t msg_lrpid;
-};
-
-struct compat_msgbuf {
-	compat_long_t mtype;
-	char mtext[1];
-};
-
-struct sem;
-
-struct sem_queue;
-
-struct sem_undo;
-
-struct semid_ds {
-	struct ipc_perm sem_perm;
-	__kernel_old_time_t sem_otime;
-	__kernel_old_time_t sem_ctime;
-	struct sem *sem_base;
-	struct sem_queue *sem_pending;
-	struct sem_queue **sem_pending_last;
-	struct sem_undo *undo;
-	short unsigned int sem_nsems;
-};
-
-struct sem {
-	int semval;
-	struct pid *sempid;
-	spinlock_t lock;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	time64_t sem_otime;
-};
-
-struct sem_queue {
-	struct list_head list;
-	struct task_struct *sleeper;
-	struct sem_undo *undo;
-	struct pid *pid;
-	int status;
-	struct sembuf *sops;
-	struct sembuf *blocking;
-	int nsops;
-	bool alter;
-	bool dupsop;
-};
-
-struct sem_undo {
-	struct list_head list_proc;
-	struct callback_head rcu;
-	struct sem_undo_list *ulp;
-	struct list_head list_id;
-	int semid;
-	short int *semadj;
-};
-
-struct semid64_ds {
-	struct ipc64_perm sem_perm;
-	long int sem_otime;
-	long int sem_ctime;
-	long unsigned int sem_nsems;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct seminfo {
-	int semmap;
-	int semmni;
-	int semmns;
-	int semmnu;
-	int semmsl;
-	int semopm;
-	int semume;
-	int semusz;
-	int semvmx;
-	int semaem;
-};
-
-struct sem_undo_list {
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct list_head list_proc;
-};
-
-struct compat_semid64_ds {
-	struct compat_ipc64_perm sem_perm;
-	compat_ulong_t sem_otime;
-	compat_ulong_t sem_otime_high;
-	compat_ulong_t sem_ctime;
-	compat_ulong_t sem_ctime_high;
-	compat_ulong_t sem_nsems;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct sem_array {
-	struct kern_ipc_perm sem_perm;
-	time64_t sem_ctime;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	struct list_head list_id;
-	int sem_nsems;
-	int complex_count;
-	unsigned int use_global_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sem sems[0];
-};
-
-struct compat_semid_ds {
-	struct compat_ipc_perm sem_perm;
-	old_time32_t sem_otime;
-	old_time32_t sem_ctime;
-	compat_uptr_t sem_base;
-	compat_uptr_t sem_pending;
-	compat_uptr_t sem_pending_last;
-	compat_uptr_t undo;
-	short unsigned int sem_nsems;
-};
-
-struct shmid_ds {
-	struct ipc_perm shm_perm;
-	int shm_segsz;
-	__kernel_old_time_t shm_atime;
-	__kernel_old_time_t shm_dtime;
-	__kernel_old_time_t shm_ctime;
-	__kernel_ipc_pid_t shm_cpid;
-	__kernel_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	void *shm_unused2;
-	void *shm_unused3;
-};
-
-struct shmid64_ds {
-	struct ipc64_perm shm_perm;
-	size_t shm_segsz;
-	long int shm_atime;
-	long int shm_dtime;
-	long int shm_ctime;
-	__kernel_pid_t shm_cpid;
-	__kernel_pid_t shm_lpid;
-	long unsigned int shm_nattch;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-};
-
-struct shminfo64 {
-	long unsigned int shmmax;
-	long unsigned int shmmin;
-	long unsigned int shmmni;
-	long unsigned int shmseg;
-	long unsigned int shmall;
-	long unsigned int __unused1;
-	long unsigned int __unused2;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct shminfo {
-	int shmmax;
-	int shmmin;
-	int shmmni;
-	int shmseg;
-	int shmall;
-};
-
-struct shm_info {
-	int used_ids;
-	__kernel_ulong_t shm_tot;
-	__kernel_ulong_t shm_rss;
-	__kernel_ulong_t shm_swp;
-	__kernel_ulong_t swap_attempts;
-	__kernel_ulong_t swap_successes;
-};
-
-struct compat_shmid64_ds {
-	struct compat_ipc64_perm shm_perm;
-	compat_size_t shm_segsz;
-	compat_ulong_t shm_atime;
-	compat_ulong_t shm_atime_high;
-	compat_ulong_t shm_dtime;
-	compat_ulong_t shm_dtime_high;
-	compat_ulong_t shm_ctime;
-	compat_ulong_t shm_ctime_high;
-	compat_pid_t shm_cpid;
-	compat_pid_t shm_lpid;
-	compat_ulong_t shm_nattch;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct shmid_kernel {
-	struct kern_ipc_perm shm_perm;
-	struct file *shm_file;
-	long unsigned int shm_nattch;
-	long unsigned int shm_segsz;
-	time64_t shm_atim;
-	time64_t shm_dtim;
-	time64_t shm_ctim;
-	struct pid *shm_cprid;
-	struct pid *shm_lprid;
-	struct user_struct *mlock_user;
-	struct task_struct *shm_creator;
-	struct list_head shm_clist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct shm_file_data {
-	int id;
-	struct ipc_namespace *ns;
-	struct file *file;
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct compat_shmid_ds {
-	struct compat_ipc_perm shm_perm;
-	int shm_segsz;
-	old_time32_t shm_atime;
-	old_time32_t shm_dtime;
-	old_time32_t shm_ctime;
-	compat_ipc_pid_t shm_cpid;
-	compat_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	compat_uptr_t shm_unused2;
-	compat_uptr_t shm_unused3;
-};
-
-struct compat_shminfo64 {
-	compat_ulong_t shmmax;
-	compat_ulong_t shmmin;
-	compat_ulong_t shmmni;
-	compat_ulong_t shmseg;
-	compat_ulong_t shmall;
-	compat_ulong_t __unused1;
-	compat_ulong_t __unused2;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct compat_shm_info {
-	compat_int_t used_ids;
-	compat_ulong_t shm_tot;
-	compat_ulong_t shm_rss;
-	compat_ulong_t shm_swp;
-	compat_ulong_t swap_attempts;
-	compat_ulong_t swap_successes;
-};
-
-struct mqueue_fs_context {
-	struct ipc_namespace *ipc_ns;
-};
-
-struct posix_msg_tree_node {
 	struct rb_node rb_node;
-	struct list_head msg_list;
-	int priority;
 };
 
-struct ext_wait_queue {
-	struct task_struct *task;
-	struct list_head list;
-	struct msg_msg *msg;
-	int state;
+struct btrfs_qgroup_status_item {
+	__le64 version;
+	__le64 generation;
+	__le64 flags;
+	__le64 rescan;
 };
 
-struct mqueue_inode_info {
-	spinlock_t lock;
-	struct inode vfs_inode;
-	wait_queue_head_t wait_q;
-	struct rb_root msg_tree;
-	struct rb_node *msg_tree_rightmost;
-	struct posix_msg_tree_node *node_cache;
-	struct mq_attr attr;
-	struct sigevent notify;
-	struct pid *notify_owner;
-	u32 notify_self_exec_id;
-	struct user_namespace *notify_user_ns;
-	struct user_struct *user;
-	struct sock *notify_sock;
-	struct sk_buff *notify_cookie;
-	struct ext_wait_queue e_wait_q[2];
-	long unsigned int qsize;
+struct btrfs_qgroup_info_item {
+	__le64 generation;
+	__le64 rfer;
+	__le64 rfer_cmpr;
+	__le64 excl;
+	__le64 excl_cmpr;
 };
 
-struct compat_mq_attr {
-	compat_long_t mq_flags;
-	compat_long_t mq_maxmsg;
-	compat_long_t mq_msgsize;
-	compat_long_t mq_curmsgs;
-	compat_long_t __reserved[4];
+struct btrfs_qgroup_limit_item {
+	__le64 flags;
+	__le64 max_rfer;
+	__le64 max_excl;
+	__le64 rsv_rfer;
+	__le64 rsv_excl;
 };
 
-struct key_user {
+struct btrfs_qgroup_extent_record {
 	struct rb_node node;
-	struct mutex cons_lock;
-	spinlock_t lock;
-	refcount_t usage;
-	atomic_t nkeys;
-	atomic_t nikeys;
-	kuid_t uid;
-	int qnkeys;
-	int qnbytes;
+	u64 bytenr;
+	u64 num_bytes;
+	u32 data_rsv;
+	u64 data_rsv_refroot;
+	struct ulist *old_roots;
 };
 
-enum key_notification_subtype {
-	NOTIFY_KEY_INSTANTIATED = 0,
-	NOTIFY_KEY_UPDATED = 1,
-	NOTIFY_KEY_LINKED = 2,
-	NOTIFY_KEY_UNLINKED = 3,
-	NOTIFY_KEY_CLEARED = 4,
-	NOTIFY_KEY_REVOKED = 5,
-	NOTIFY_KEY_INVALIDATED = 6,
-	NOTIFY_KEY_SETATTR = 7,
+struct btrfs_qgroup_swapped_block {
+	struct rb_node node;
+	int level;
+	bool trace_leaf;
+	u64 subvol_bytenr;
+	u64 subvol_generation;
+	u64 reloc_bytenr;
+	u64 reloc_generation;
+	u64 last_snapshot;
+	struct btrfs_key first_key;
 };
 
-struct key_notification {
-	struct watch_notification watch;
-	__u32 key_id;
-	__u32 aux;
+struct btrfs_qgroup_list {
+	struct list_head next_group;
+	struct list_head next_member;
+	struct btrfs_qgroup *group;
+	struct btrfs_qgroup *member;
 };
 
-struct assoc_array_edit;
-
-struct assoc_array_ops {
-	long unsigned int (*get_key_chunk)(const void *, int);
-	long unsigned int (*get_object_key_chunk)(const void *, int);
-	bool (*compare_object)(const void *, const void *);
-	int (*diff_objects)(const void *, const void *);
-	void (*free_object)(void *);
+enum btrfs_flush_state {
+	FLUSH_DELAYED_ITEMS_NR = 1,
+	FLUSH_DELAYED_ITEMS = 2,
+	FLUSH_DELAYED_REFS_NR = 3,
+	FLUSH_DELAYED_REFS = 4,
+	FLUSH_DELALLOC = 5,
+	FLUSH_DELALLOC_WAIT = 6,
+	FLUSH_DELALLOC_FULL = 7,
+	ALLOC_CHUNK = 8,
+	ALLOC_CHUNK_FORCE = 9,
+	RUN_DELAYED_IPUTS = 10,
+	COMMIT_TRANS = 11,
 };
 
-struct assoc_array_node {
-	struct assoc_array_ptr *back_pointer;
-	u8 parent_slot;
-	struct assoc_array_ptr *slots[16];
-	long unsigned int nr_leaves_on_branch;
+struct reserve_ticket {
+	u64 bytes;
+	int error;
+	bool steal;
+	struct list_head list;
+	wait_queue_head_t wait;
 };
 
-struct assoc_array_shortcut {
-	struct assoc_array_ptr *back_pointer;
-	int parent_slot;
-	int skip_to_level;
-	struct assoc_array_ptr *next_node;
-	long unsigned int index_key[0];
+struct radix_tree_iter {
+	long unsigned int index;
+	long unsigned int next_index;
+	long unsigned int tags;
+	struct xa_node *node;
 };
 
-struct assoc_array_edit___2 {
-	struct callback_head rcu;
-	struct assoc_array *array;
-	const struct assoc_array_ops *ops;
-	const struct assoc_array_ops *ops_for_excised_subtree;
-	struct assoc_array_ptr *leaf;
-	struct assoc_array_ptr **leaf_p;
-	struct assoc_array_ptr *dead_leaf;
-	struct assoc_array_ptr *new_meta[3];
-	struct assoc_array_ptr *excised_meta[1];
-	struct assoc_array_ptr *excised_subtree;
-	struct assoc_array_ptr **set_backpointers[16];
-	struct assoc_array_ptr *set_backpointers_to;
-	struct assoc_array_node *adjust_count_on;
-	long int adjust_count_by;
-	struct {
-		struct assoc_array_ptr **ptr;
-		struct assoc_array_ptr *to;
-	} set[2];
-	struct {
-		u8 *p;
-		u8 to;
-	} set_parent_slot[1];
-	u8 segment_cache[17];
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
 };
 
-struct keyring_search_context {
-	struct keyring_index_key index_key;
-	const struct cred *cred;
-	struct key_match_data match_data;
-	unsigned int flags;
-	int (*iterator)(const void *, void *);
-	int skipped_ret;
-	bool possessed;
-	key_ref_t result;
-	time64_t now;
-};
-
-struct keyring_read_iterator_context {
-	size_t buflen;
-	size_t count;
-	key_serial_t *buffer;
+struct compat_keyctl_kdf_params {
+	compat_uptr_t hashname;
+	compat_uptr_t otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
 };
 
 struct keyctl_dh_params {
@@ -46148,1122 +92950,33 @@
 	__u32 __spare[8];
 };
 
-struct keyctl_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-	__u32 __spare[10];
+enum chacha20poly1305_lengths {
+	XCHACHA20POLY1305_NONCE_SIZE = 24,
+	CHACHA20POLY1305_KEY_SIZE = 32,
+	CHACHA20POLY1305_AUTHTAG_SIZE = 16,
 };
 
-struct keyctl_pkey_params {
-	__s32 key_id;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	__u32 __spare[7];
-};
-
-struct request_key_auth {
-	struct callback_head rcu;
-	struct key *target_key;
-	struct key *dest_keyring;
-	const struct cred *cred;
-	void *callout_info;
-	size_t callout_len;
-	pid_t pid;
-	char op[8];
-};
-
-enum {
-	Opt_err___5 = 0,
-	Opt_enc = 1,
-	Opt_hash = 2,
-};
-
-enum hash_algo {
-	HASH_ALGO_MD4 = 0,
-	HASH_ALGO_MD5 = 1,
-	HASH_ALGO_SHA1 = 2,
-	HASH_ALGO_RIPE_MD_160 = 3,
-	HASH_ALGO_SHA256 = 4,
-	HASH_ALGO_SHA384 = 5,
-	HASH_ALGO_SHA512 = 6,
-	HASH_ALGO_SHA224 = 7,
-	HASH_ALGO_RIPE_MD_128 = 8,
-	HASH_ALGO_RIPE_MD_256 = 9,
-	HASH_ALGO_RIPE_MD_320 = 10,
-	HASH_ALGO_WP_256 = 11,
-	HASH_ALGO_WP_384 = 12,
-	HASH_ALGO_WP_512 = 13,
-	HASH_ALGO_TGR_128 = 14,
-	HASH_ALGO_TGR_160 = 15,
-	HASH_ALGO_TGR_192 = 16,
-	HASH_ALGO_SM3_256 = 17,
-	HASH_ALGO_STREEBOG_256 = 18,
-	HASH_ALGO_STREEBOG_512 = 19,
-	HASH_ALGO__LAST = 20,
-};
-
-enum tpm_duration {
-	TPM_SHORT = 0,
-	TPM_MEDIUM = 1,
-	TPM_LONG = 2,
-	TPM_LONG_LONG = 3,
-	TPM_UNDEFINED = 4,
-	TPM_NUM_DURATIONS = 4,
-};
-
-struct encrypted_key_payload {
-	struct callback_head rcu;
-	char *format;
-	char *master_desc;
-	char *datalen;
-	u8 *iv;
-	u8 *encrypted_data;
-	short unsigned int datablob_len;
-	short unsigned int decrypted_datalen;
-	short unsigned int payload_datalen;
-	short unsigned int encrypted_key_format;
-	u8 *decrypted_data;
-	u8 payload_data[0];
-};
-
-struct ecryptfs_session_key {
-	u32 flags;
-	u32 encrypted_key_size;
-	u32 decrypted_key_size;
-	u8 encrypted_key[512];
-	u8 decrypted_key[64];
-};
-
-struct ecryptfs_password {
-	u32 password_bytes;
-	s32 hash_algo;
-	u32 hash_iterations;
-	u32 session_key_encryption_key_bytes;
-	u32 flags;
-	u8 session_key_encryption_key[64];
-	u8 signature[17];
-	u8 salt[8];
-};
-
-struct ecryptfs_private_key {
-	u32 key_size;
-	u32 data_len;
-	u8 signature[17];
-	char pki_type[17];
-	u8 data[0];
-};
-
-struct ecryptfs_auth_tok {
-	u16 version;
-	u16 token_type;
-	u32 flags;
-	struct ecryptfs_session_key session_key;
-	u8 reserved[32];
-	union {
-		struct ecryptfs_password password;
-		struct ecryptfs_private_key private_key;
-	} token;
-};
-
-enum {
-	Opt_new = 0,
-	Opt_load = 1,
-	Opt_update = 2,
-	Opt_err___6 = 3,
-};
-
-enum {
-	Opt_default = 0,
-	Opt_ecryptfs = 1,
-	Opt_enc32 = 2,
-	Opt_error = 3,
-};
-
-enum derived_key_type {
-	ENC_KEY = 0,
-	AUTH_KEY = 1,
-};
-
-enum ecryptfs_token_types {
-	ECRYPTFS_PASSWORD = 0,
-	ECRYPTFS_PRIVATE_KEY = 1,
-};
-
-struct vfs_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-};
-
-struct vfs_ns_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-	__le32 rootid;
-};
-
-struct sctp_endpoint;
-
-union security_list_options {
-	int (*binder_set_context_mgr)(struct task_struct *);
-	int (*binder_transaction)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_binder)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);
-	int (*ptrace_access_check)(struct task_struct *, unsigned int);
-	int (*ptrace_traceme)(struct task_struct *);
-	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
-	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
-	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
-	int (*quotactl)(int, int, int, struct super_block *);
-	int (*quota_on)(struct dentry *);
-	int (*syslog)(int);
-	int (*settime)(const struct timespec64 *, const struct timezone *);
-	int (*vm_enough_memory)(struct mm_struct *, long int);
-	int (*bprm_creds_for_exec)(struct linux_binprm *);
-	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
-	int (*bprm_check_security)(struct linux_binprm *);
-	void (*bprm_committing_creds)(struct linux_binprm *);
-	void (*bprm_committed_creds)(struct linux_binprm *);
-	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
-	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*sb_alloc_security)(struct super_block *);
-	void (*sb_free_security)(struct super_block *);
-	void (*sb_free_mnt_opts)(void *);
-	int (*sb_eat_lsm_opts)(char *, void **);
-	int (*sb_remount)(struct super_block *, void *);
-	int (*sb_kern_mount)(struct super_block *);
-	int (*sb_show_options)(struct seq_file *, struct super_block *);
-	int (*sb_statfs)(struct dentry *);
-	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
-	int (*sb_umount)(struct vfsmount *, int);
-	int (*sb_pivotroot)(const struct path *, const struct path *);
-	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
-	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
-	int (*sb_add_mnt_opt)(const char *, const char *, int, void **);
-	int (*move_mount)(const struct path *, const struct path *);
-	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);
-	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
-	int (*path_unlink)(const struct path *, struct dentry *);
-	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
-	int (*path_rmdir)(const struct path *, struct dentry *);
-	int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
-	int (*path_truncate)(const struct path *);
-	int (*path_symlink)(const struct path *, struct dentry *, const char *);
-	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
-	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *);
-	int (*path_chmod)(const struct path *, umode_t);
-	int (*path_chown)(const struct path *, kuid_t, kgid_t);
-	int (*path_chroot)(const struct path *);
-	int (*path_notify)(const struct path *, u64, unsigned int);
-	int (*inode_alloc_security)(struct inode *);
-	void (*inode_free_security)(struct inode *);
-	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
-	int (*inode_create)(struct inode *, struct dentry *, umode_t);
-	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
-	int (*inode_unlink)(struct inode *, struct dentry *);
-	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
-	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
-	int (*inode_rmdir)(struct inode *, struct dentry *);
-	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
-	int (*inode_readlink)(struct dentry *);
-	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
-	int (*inode_permission)(struct inode *, int);
-	int (*inode_setattr)(struct dentry *, struct iattr *);
-	int (*inode_getattr)(const struct path *);
-	int (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	int (*inode_getxattr)(struct dentry *, const char *);
-	int (*inode_listxattr)(struct dentry *);
-	int (*inode_removexattr)(struct dentry *, const char *);
-	int (*inode_need_killpriv)(struct dentry *);
-	int (*inode_killpriv)(struct dentry *);
-	int (*inode_getsecurity)(struct inode *, const char *, void **, bool);
-	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
-	int (*inode_listsecurity)(struct inode *, char *, size_t);
-	void (*inode_getsecid)(struct inode *, u32 *);
-	int (*inode_copy_up)(struct dentry *, struct cred **);
-	int (*inode_copy_up_xattr)(const char *);
-	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
-	int (*file_permission)(struct file *, int);
-	int (*file_alloc_security)(struct file *);
-	void (*file_free_security)(struct file *);
-	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap_addr)(long unsigned int);
-	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
-	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
-	int (*file_lock)(struct file *, unsigned int);
-	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
-	void (*file_set_fowner)(struct file *);
-	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
-	int (*file_receive)(struct file *);
-	int (*file_open)(struct file *);
-	int (*task_alloc)(struct task_struct *, long unsigned int);
-	void (*task_free)(struct task_struct *);
-	int (*cred_alloc_blank)(struct cred *, gfp_t);
-	void (*cred_free)(struct cred *);
-	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
-	void (*cred_transfer)(struct cred *, const struct cred *);
-	void (*cred_getsecid)(const struct cred *, u32 *);
-	int (*kernel_act_as)(struct cred *, u32);
-	int (*kernel_create_files_as)(struct cred *, struct inode *);
-	int (*kernel_module_request)(char *);
-	int (*kernel_load_data)(enum kernel_load_data_id, bool);
-	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
-	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
-	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
-	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
-	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
-	int (*task_setpgid)(struct task_struct *, pid_t);
-	int (*task_getpgid)(struct task_struct *);
-	int (*task_getsid)(struct task_struct *);
-	void (*task_getsecid)(struct task_struct *, u32 *);
-	int (*task_setnice)(struct task_struct *, int);
-	int (*task_setioprio)(struct task_struct *, int);
-	int (*task_getioprio)(struct task_struct *);
-	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
-	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
-	int (*task_setscheduler)(struct task_struct *);
-	int (*task_getscheduler)(struct task_struct *);
-	int (*task_movememory)(struct task_struct *);
-	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
-	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	void (*task_to_inode)(struct task_struct *, struct inode *);
-	int (*ipc_permission)(struct kern_ipc_perm *, short int);
-	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
-	int (*msg_msg_alloc_security)(struct msg_msg *);
-	void (*msg_msg_free_security)(struct msg_msg *);
-	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
-	void (*msg_queue_free_security)(struct kern_ipc_perm *);
-	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
-	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
-	int (*shm_alloc_security)(struct kern_ipc_perm *);
-	void (*shm_free_security)(struct kern_ipc_perm *);
-	int (*shm_associate)(struct kern_ipc_perm *, int);
-	int (*shm_shmctl)(struct kern_ipc_perm *, int);
-	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
-	int (*sem_alloc_security)(struct kern_ipc_perm *);
-	void (*sem_free_security)(struct kern_ipc_perm *);
-	int (*sem_associate)(struct kern_ipc_perm *, int);
-	int (*sem_semctl)(struct kern_ipc_perm *, int);
-	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
-	int (*netlink_send)(struct sock *, struct sk_buff *);
-	void (*d_instantiate)(struct dentry *, struct inode *);
-	int (*getprocattr)(struct task_struct *, char *, char **);
-	int (*setprocattr)(const char *, void *, size_t);
-	int (*ismaclabel)(const char *);
-	int (*secid_to_secctx)(u32, char **, u32 *);
-	int (*secctx_to_secid)(const char *, u32, u32 *);
-	void (*release_secctx)(char *, u32);
-	void (*inode_invalidate_secctx)(struct inode *);
-	int (*inode_notifysecctx)(struct inode *, void *, u32);
-	int (*inode_setsecctx)(struct dentry *, void *, u32);
-	int (*inode_getsecctx)(struct inode *, void **, u32 *);
-	int (*post_notification)(const struct cred *, const struct cred *, struct watch_notification *);
-	int (*watch_key)(struct key *);
-	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
-	int (*unix_may_send)(struct socket *, struct socket *);
-	int (*socket_create)(int, int, int, int);
-	int (*socket_post_create)(struct socket *, int, int, int, int);
-	int (*socket_socketpair)(struct socket *, struct socket *);
-	int (*socket_bind)(struct socket *, struct sockaddr *, int);
-	int (*socket_connect)(struct socket *, struct sockaddr *, int);
-	int (*socket_listen)(struct socket *, int);
-	int (*socket_accept)(struct socket *, struct socket *);
-	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
-	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
-	int (*socket_getsockname)(struct socket *);
-	int (*socket_getpeername)(struct socket *);
-	int (*socket_getsockopt)(struct socket *, int, int);
-	int (*socket_setsockopt)(struct socket *, int, int);
-	int (*socket_shutdown)(struct socket *, int);
-	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
-	int (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);
-	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
-	int (*sk_alloc_security)(struct sock *, int, gfp_t);
-	void (*sk_free_security)(struct sock *);
-	void (*sk_clone_security)(const struct sock *, struct sock *);
-	void (*sk_getsecid)(struct sock *, u32 *);
-	void (*sock_graft)(struct sock *, struct socket *);
-	int (*inet_conn_request)(struct sock *, struct sk_buff *, struct request_sock *);
-	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
-	void (*inet_conn_established)(struct sock *, struct sk_buff *);
-	int (*secmark_relabel_packet)(u32);
-	void (*secmark_refcount_inc)();
-	void (*secmark_refcount_dec)();
-	void (*req_classify_flow)(const struct request_sock *, struct flowi *);
-	int (*tun_dev_alloc_security)(void **);
-	void (*tun_dev_free_security)(void *);
-	int (*tun_dev_create)();
-	int (*tun_dev_attach_queue)(void *);
-	int (*tun_dev_attach)(struct sock *, void *);
-	int (*tun_dev_open)(void *);
-	int (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);
-	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
-	void (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);
-	int (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);
-	int (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);
-	void (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_policy_delete_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_state_alloc)(struct xfrm_state *, struct xfrm_user_sec_ctx *);
-	int (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);
-	void (*xfrm_state_free_security)(struct xfrm_state *);
-	int (*xfrm_state_delete_security)(struct xfrm_state *);
-	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32, u8);
-	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi *);
-	int (*xfrm_decode_session)(struct sk_buff *, u32 *, int);
-	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
-	void (*key_free)(struct key *);
-	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
-	int (*key_getsecurity)(struct key *, char **);
-	int (*audit_rule_init)(u32, u32, char *, void **);
-	int (*audit_rule_known)(struct audit_krule *);
-	int (*audit_rule_match)(u32, u32, u32, void *);
-	void (*audit_rule_free)(void *);
-	int (*bpf)(int, union bpf_attr *, unsigned int);
-	int (*bpf_map)(struct bpf_map *, fmode_t);
-	int (*bpf_prog)(struct bpf_prog *);
-	int (*bpf_map_alloc_security)(struct bpf_map *);
-	void (*bpf_map_free_security)(struct bpf_map *);
-	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
-	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
-	int (*locked_down)(enum lockdown_reason);
-	int (*perf_event_open)(struct perf_event_attr *, int);
-	int (*perf_event_alloc)(struct perf_event *);
-	void (*perf_event_free)(struct perf_event *);
-	int (*perf_event_read)(struct perf_event *);
-	int (*perf_event_write)(struct perf_event *);
-};
-
-struct security_hook_heads {
-	struct hlist_head binder_set_context_mgr;
-	struct hlist_head binder_transaction;
-	struct hlist_head binder_transfer_binder;
-	struct hlist_head binder_transfer_file;
-	struct hlist_head ptrace_access_check;
-	struct hlist_head ptrace_traceme;
-	struct hlist_head capget;
-	struct hlist_head capset;
-	struct hlist_head capable;
-	struct hlist_head quotactl;
-	struct hlist_head quota_on;
-	struct hlist_head syslog;
-	struct hlist_head settime;
-	struct hlist_head vm_enough_memory;
-	struct hlist_head bprm_creds_for_exec;
-	struct hlist_head bprm_creds_from_file;
-	struct hlist_head bprm_check_security;
-	struct hlist_head bprm_committing_creds;
-	struct hlist_head bprm_committed_creds;
-	struct hlist_head fs_context_dup;
-	struct hlist_head fs_context_parse_param;
-	struct hlist_head sb_alloc_security;
-	struct hlist_head sb_free_security;
-	struct hlist_head sb_free_mnt_opts;
-	struct hlist_head sb_eat_lsm_opts;
-	struct hlist_head sb_remount;
-	struct hlist_head sb_kern_mount;
-	struct hlist_head sb_show_options;
-	struct hlist_head sb_statfs;
-	struct hlist_head sb_mount;
-	struct hlist_head sb_umount;
-	struct hlist_head sb_pivotroot;
-	struct hlist_head sb_set_mnt_opts;
-	struct hlist_head sb_clone_mnt_opts;
-	struct hlist_head sb_add_mnt_opt;
-	struct hlist_head move_mount;
-	struct hlist_head dentry_init_security;
-	struct hlist_head dentry_create_files_as;
-	struct hlist_head path_unlink;
-	struct hlist_head path_mkdir;
-	struct hlist_head path_rmdir;
-	struct hlist_head path_mknod;
-	struct hlist_head path_truncate;
-	struct hlist_head path_symlink;
-	struct hlist_head path_link;
-	struct hlist_head path_rename;
-	struct hlist_head path_chmod;
-	struct hlist_head path_chown;
-	struct hlist_head path_chroot;
-	struct hlist_head path_notify;
-	struct hlist_head inode_alloc_security;
-	struct hlist_head inode_free_security;
-	struct hlist_head inode_init_security;
-	struct hlist_head inode_create;
-	struct hlist_head inode_link;
-	struct hlist_head inode_unlink;
-	struct hlist_head inode_symlink;
-	struct hlist_head inode_mkdir;
-	struct hlist_head inode_rmdir;
-	struct hlist_head inode_mknod;
-	struct hlist_head inode_rename;
-	struct hlist_head inode_readlink;
-	struct hlist_head inode_follow_link;
-	struct hlist_head inode_permission;
-	struct hlist_head inode_setattr;
-	struct hlist_head inode_getattr;
-	struct hlist_head inode_setxattr;
-	struct hlist_head inode_post_setxattr;
-	struct hlist_head inode_getxattr;
-	struct hlist_head inode_listxattr;
-	struct hlist_head inode_removexattr;
-	struct hlist_head inode_need_killpriv;
-	struct hlist_head inode_killpriv;
-	struct hlist_head inode_getsecurity;
-	struct hlist_head inode_setsecurity;
-	struct hlist_head inode_listsecurity;
-	struct hlist_head inode_getsecid;
-	struct hlist_head inode_copy_up;
-	struct hlist_head inode_copy_up_xattr;
-	struct hlist_head kernfs_init_security;
-	struct hlist_head file_permission;
-	struct hlist_head file_alloc_security;
-	struct hlist_head file_free_security;
-	struct hlist_head file_ioctl;
-	struct hlist_head mmap_addr;
-	struct hlist_head mmap_file;
-	struct hlist_head file_mprotect;
-	struct hlist_head file_lock;
-	struct hlist_head file_fcntl;
-	struct hlist_head file_set_fowner;
-	struct hlist_head file_send_sigiotask;
-	struct hlist_head file_receive;
-	struct hlist_head file_open;
-	struct hlist_head task_alloc;
-	struct hlist_head task_free;
-	struct hlist_head cred_alloc_blank;
-	struct hlist_head cred_free;
-	struct hlist_head cred_prepare;
-	struct hlist_head cred_transfer;
-	struct hlist_head cred_getsecid;
-	struct hlist_head kernel_act_as;
-	struct hlist_head kernel_create_files_as;
-	struct hlist_head kernel_module_request;
-	struct hlist_head kernel_load_data;
-	struct hlist_head kernel_post_load_data;
-	struct hlist_head kernel_read_file;
-	struct hlist_head kernel_post_read_file;
-	struct hlist_head task_fix_setuid;
-	struct hlist_head task_fix_setgid;
-	struct hlist_head task_setpgid;
-	struct hlist_head task_getpgid;
-	struct hlist_head task_getsid;
-	struct hlist_head task_getsecid;
-	struct hlist_head task_setnice;
-	struct hlist_head task_setioprio;
-	struct hlist_head task_getioprio;
-	struct hlist_head task_prlimit;
-	struct hlist_head task_setrlimit;
-	struct hlist_head task_setscheduler;
-	struct hlist_head task_getscheduler;
-	struct hlist_head task_movememory;
-	struct hlist_head task_kill;
-	struct hlist_head task_prctl;
-	struct hlist_head task_to_inode;
-	struct hlist_head ipc_permission;
-	struct hlist_head ipc_getsecid;
-	struct hlist_head msg_msg_alloc_security;
-	struct hlist_head msg_msg_free_security;
-	struct hlist_head msg_queue_alloc_security;
-	struct hlist_head msg_queue_free_security;
-	struct hlist_head msg_queue_associate;
-	struct hlist_head msg_queue_msgctl;
-	struct hlist_head msg_queue_msgsnd;
-	struct hlist_head msg_queue_msgrcv;
-	struct hlist_head shm_alloc_security;
-	struct hlist_head shm_free_security;
-	struct hlist_head shm_associate;
-	struct hlist_head shm_shmctl;
-	struct hlist_head shm_shmat;
-	struct hlist_head sem_alloc_security;
-	struct hlist_head sem_free_security;
-	struct hlist_head sem_associate;
-	struct hlist_head sem_semctl;
-	struct hlist_head sem_semop;
-	struct hlist_head netlink_send;
-	struct hlist_head d_instantiate;
-	struct hlist_head getprocattr;
-	struct hlist_head setprocattr;
-	struct hlist_head ismaclabel;
-	struct hlist_head secid_to_secctx;
-	struct hlist_head secctx_to_secid;
-	struct hlist_head release_secctx;
-	struct hlist_head inode_invalidate_secctx;
-	struct hlist_head inode_notifysecctx;
-	struct hlist_head inode_setsecctx;
-	struct hlist_head inode_getsecctx;
-	struct hlist_head post_notification;
-	struct hlist_head watch_key;
-	struct hlist_head unix_stream_connect;
-	struct hlist_head unix_may_send;
-	struct hlist_head socket_create;
-	struct hlist_head socket_post_create;
-	struct hlist_head socket_socketpair;
-	struct hlist_head socket_bind;
-	struct hlist_head socket_connect;
-	struct hlist_head socket_listen;
-	struct hlist_head socket_accept;
-	struct hlist_head socket_sendmsg;
-	struct hlist_head socket_recvmsg;
-	struct hlist_head socket_getsockname;
-	struct hlist_head socket_getpeername;
-	struct hlist_head socket_getsockopt;
-	struct hlist_head socket_setsockopt;
-	struct hlist_head socket_shutdown;
-	struct hlist_head socket_sock_rcv_skb;
-	struct hlist_head socket_getpeersec_stream;
-	struct hlist_head socket_getpeersec_dgram;
-	struct hlist_head sk_alloc_security;
-	struct hlist_head sk_free_security;
-	struct hlist_head sk_clone_security;
-	struct hlist_head sk_getsecid;
-	struct hlist_head sock_graft;
-	struct hlist_head inet_conn_request;
-	struct hlist_head inet_csk_clone;
-	struct hlist_head inet_conn_established;
-	struct hlist_head secmark_relabel_packet;
-	struct hlist_head secmark_refcount_inc;
-	struct hlist_head secmark_refcount_dec;
-	struct hlist_head req_classify_flow;
-	struct hlist_head tun_dev_alloc_security;
-	struct hlist_head tun_dev_free_security;
-	struct hlist_head tun_dev_create;
-	struct hlist_head tun_dev_attach_queue;
-	struct hlist_head tun_dev_attach;
-	struct hlist_head tun_dev_open;
-	struct hlist_head sctp_assoc_request;
-	struct hlist_head sctp_bind_connect;
-	struct hlist_head sctp_sk_clone;
-	struct hlist_head xfrm_policy_alloc_security;
-	struct hlist_head xfrm_policy_clone_security;
-	struct hlist_head xfrm_policy_free_security;
-	struct hlist_head xfrm_policy_delete_security;
-	struct hlist_head xfrm_state_alloc;
-	struct hlist_head xfrm_state_alloc_acquire;
-	struct hlist_head xfrm_state_free_security;
-	struct hlist_head xfrm_state_delete_security;
-	struct hlist_head xfrm_policy_lookup;
-	struct hlist_head xfrm_state_pol_flow_match;
-	struct hlist_head xfrm_decode_session;
-	struct hlist_head key_alloc;
-	struct hlist_head key_free;
-	struct hlist_head key_permission;
-	struct hlist_head key_getsecurity;
-	struct hlist_head audit_rule_init;
-	struct hlist_head audit_rule_known;
-	struct hlist_head audit_rule_match;
-	struct hlist_head audit_rule_free;
-	struct hlist_head bpf;
-	struct hlist_head bpf_map;
-	struct hlist_head bpf_prog;
-	struct hlist_head bpf_map_alloc_security;
-	struct hlist_head bpf_map_free_security;
-	struct hlist_head bpf_prog_alloc_security;
-	struct hlist_head bpf_prog_free_security;
-	struct hlist_head locked_down;
-	struct hlist_head perf_event_open;
-	struct hlist_head perf_event_alloc;
-	struct hlist_head perf_event_free;
-	struct hlist_head perf_event_read;
-	struct hlist_head perf_event_write;
-};
-
-struct security_hook_list {
-	struct hlist_node list;
-	struct hlist_head *head;
-	union security_list_options hook;
-	char *lsm;
-};
-
-enum lsm_order {
-	LSM_ORDER_FIRST = 4294967295,
-	LSM_ORDER_MUTABLE = 0,
-};
-
-struct lsm_info {
-	const char *name;
-	enum lsm_order order;
-	long unsigned int flags;
-	int *enabled;
-	int (*init)();
-	struct lsm_blob_sizes *blobs;
+struct big_key_payload {
+	u8 *data;
+	struct path path;
+	size_t length;
 };
 
 enum lsm_event {
 	LSM_POLICY_CHANGE = 0,
 };
 
-typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
-
-enum ib_uverbs_write_cmds {
-	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
-	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
-	IB_USER_VERBS_CMD_QUERY_PORT = 2,
-	IB_USER_VERBS_CMD_ALLOC_PD = 3,
-	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
-	IB_USER_VERBS_CMD_CREATE_AH = 5,
-	IB_USER_VERBS_CMD_MODIFY_AH = 6,
-	IB_USER_VERBS_CMD_QUERY_AH = 7,
-	IB_USER_VERBS_CMD_DESTROY_AH = 8,
-	IB_USER_VERBS_CMD_REG_MR = 9,
-	IB_USER_VERBS_CMD_REG_SMR = 10,
-	IB_USER_VERBS_CMD_REREG_MR = 11,
-	IB_USER_VERBS_CMD_QUERY_MR = 12,
-	IB_USER_VERBS_CMD_DEREG_MR = 13,
-	IB_USER_VERBS_CMD_ALLOC_MW = 14,
-	IB_USER_VERBS_CMD_BIND_MW = 15,
-	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
-	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
-	IB_USER_VERBS_CMD_CREATE_CQ = 18,
-	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
-	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
-	IB_USER_VERBS_CMD_POLL_CQ = 21,
-	IB_USER_VERBS_CMD_PEEK_CQ = 22,
-	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
-	IB_USER_VERBS_CMD_CREATE_QP = 24,
-	IB_USER_VERBS_CMD_QUERY_QP = 25,
-	IB_USER_VERBS_CMD_MODIFY_QP = 26,
-	IB_USER_VERBS_CMD_DESTROY_QP = 27,
-	IB_USER_VERBS_CMD_POST_SEND = 28,
-	IB_USER_VERBS_CMD_POST_RECV = 29,
-	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
-	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
-	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
-	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
-	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
-	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
-	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
-	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
-	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
-	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
-	IB_USER_VERBS_CMD_OPEN_QP = 40,
-};
-
-enum ib_uverbs_wc_opcode {
-	IB_UVERBS_WC_SEND = 0,
-	IB_UVERBS_WC_RDMA_WRITE = 1,
-	IB_UVERBS_WC_RDMA_READ = 2,
-	IB_UVERBS_WC_COMP_SWAP = 3,
-	IB_UVERBS_WC_FETCH_ADD = 4,
-	IB_UVERBS_WC_BIND_MW = 5,
-	IB_UVERBS_WC_LOCAL_INV = 6,
-	IB_UVERBS_WC_TSO = 7,
-};
-
-enum ib_uverbs_create_qp_mask {
-	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
-};
-
-enum ib_uverbs_wr_opcode {
-	IB_UVERBS_WR_RDMA_WRITE = 0,
-	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
-	IB_UVERBS_WR_SEND = 2,
-	IB_UVERBS_WR_SEND_WITH_IMM = 3,
-	IB_UVERBS_WR_RDMA_READ = 4,
-	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
-	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
-	IB_UVERBS_WR_LOCAL_INV = 7,
-	IB_UVERBS_WR_BIND_MW = 8,
-	IB_UVERBS_WR_SEND_WITH_INV = 9,
-	IB_UVERBS_WR_TSO = 10,
-	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
-	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
-	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
-};
-
-enum ib_uverbs_access_flags {
-	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
-	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
-	IB_UVERBS_ACCESS_REMOTE_READ = 4,
-	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
-	IB_UVERBS_ACCESS_MW_BIND = 16,
-	IB_UVERBS_ACCESS_ZERO_BASED = 32,
-	IB_UVERBS_ACCESS_ON_DEMAND = 64,
-	IB_UVERBS_ACCESS_HUGETLB = 128,
-	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
-	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
-};
-
-enum ib_uverbs_srq_type {
-	IB_UVERBS_SRQT_BASIC = 0,
-	IB_UVERBS_SRQT_XRC = 1,
-	IB_UVERBS_SRQT_TM = 2,
-};
-
-enum ib_uverbs_wq_type {
-	IB_UVERBS_WQT_RQ = 0,
-};
-
-enum ib_uverbs_wq_flags {
-	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
-	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
-	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
-	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
-};
-
-enum ib_uverbs_qp_type {
-	IB_UVERBS_QPT_RC = 2,
-	IB_UVERBS_QPT_UC = 3,
-	IB_UVERBS_QPT_UD = 4,
-	IB_UVERBS_QPT_RAW_PACKET = 8,
-	IB_UVERBS_QPT_XRC_INI = 9,
-	IB_UVERBS_QPT_XRC_TGT = 10,
-	IB_UVERBS_QPT_DRIVER = 255,
-};
-
-enum ib_uverbs_qp_create_flags {
-	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
-	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
-	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
-	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
-	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
-};
-
-enum ib_uverbs_gid_type {
-	IB_UVERBS_GID_TYPE_IB = 0,
-	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
-	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
-};
-
-enum ib_poll_context {
-	IB_POLL_SOFTIRQ = 0,
-	IB_POLL_WORKQUEUE = 1,
-	IB_POLL_UNBOUND_WORKQUEUE = 2,
-	IB_POLL_LAST_POOL_TYPE = 2,
-	IB_POLL_DIRECT = 3,
-};
-
-struct lsm_network_audit {
-	int netif;
-	struct sock *sk;
-	u16 family;
-	__be16 dport;
-	__be16 sport;
-	union {
-		struct {
-			__be32 daddr;
-			__be32 saddr;
-		} v4;
-		struct {
-			struct in6_addr daddr;
-			struct in6_addr saddr;
-		} v6;
-	} fam;
-};
-
-struct lsm_ioctlop_audit {
-	struct path path;
-	u16 cmd;
-};
-
-struct lsm_ibpkey_audit {
-	u64 subnet_prefix;
-	u16 pkey;
-};
-
-struct lsm_ibendport_audit {
-	char dev_name[64];
-	u8 port;
-};
-
-struct selinux_state;
-
-struct selinux_audit_data {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	u32 requested;
-	u32 audited;
-	u32 denied;
-	int result;
-	struct selinux_state *state;
-};
-
-struct smack_audit_data;
-
-struct apparmor_audit_data;
-
-struct common_audit_data {
-	char type;
-	union {
-		struct path path;
-		struct dentry *dentry;
-		struct inode *inode;
-		struct lsm_network_audit *net;
-		int cap;
-		int ipc_id;
-		struct task_struct *tsk;
-		struct {
-			key_serial_t key;
-			char *key_desc;
-		} key_struct;
-		char *kmod_name;
-		struct lsm_ioctlop_audit *op;
-		struct file *file;
-		struct lsm_ibpkey_audit *ibpkey;
-		struct lsm_ibendport_audit *ibendport;
-		int reason;
-	} u;
-	union {
-		struct smack_audit_data *smack_audit_data;
-		struct selinux_audit_data *selinux_audit_data;
-		struct apparmor_audit_data *apparmor_audit_data;
-	};
-};
-
-enum {
-	POLICYDB_CAPABILITY_NETPEER = 0,
-	POLICYDB_CAPABILITY_OPENPERM = 1,
-	POLICYDB_CAPABILITY_EXTSOCKCLASS = 2,
-	POLICYDB_CAPABILITY_ALWAYSNETWORK = 3,
-	POLICYDB_CAPABILITY_CGROUPSECLABEL = 4,
-	POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,
-	POLICYDB_CAPABILITY_GENFS_SECLABEL_SYMLINKS = 6,
-	__POLICYDB_CAPABILITY_MAX = 7,
-};
-
-struct selinux_avc;
-
-struct selinux_policy;
-
-struct selinux_state {
-	bool disabled;
-	bool enforcing;
-	bool checkreqprot;
-	bool initialized;
-	bool policycap[7];
-	struct page *status_page;
-	struct mutex status_lock;
-	struct selinux_avc *avc;
-	struct selinux_policy *policy;
-	struct mutex policy_mutex;
-};
-
-struct avc_cache {
-	struct hlist_head slots[512];
-	spinlock_t slots_lock[512];
-	atomic_t lru_hint;
-	atomic_t active_nodes;
-	u32 latest_notif;
-};
-
-struct selinux_avc {
-	unsigned int avc_cache_threshold;
-	struct avc_cache avc_cache;
-};
-
-struct av_decision {
-	u32 allowed;
-	u32 auditallow;
-	u32 auditdeny;
-	u32 seqno;
-	u32 flags;
-};
-
-struct extended_perms_data {
-	u32 p[8];
-};
-
-struct extended_perms_decision {
-	u8 used;
-	u8 driver;
-	struct extended_perms_data *allowed;
-	struct extended_perms_data *auditallow;
-	struct extended_perms_data *dontaudit;
-};
-
-struct extended_perms {
-	u16 len;
-	struct extended_perms_data drivers;
-};
-
-struct avc_cache_stats {
-	unsigned int lookups;
-	unsigned int misses;
-	unsigned int allocations;
-	unsigned int reclaims;
-	unsigned int frees;
-};
-
-struct security_class_mapping {
-	const char *name;
-	const char *perms[33];
-};
-
-struct trace_event_raw_selinux_audited {
-	struct trace_entry ent;
-	u32 requested;
-	u32 denied;
-	u32 audited;
-	int result;
-	u32 __data_loc_scontext;
-	u32 __data_loc_tcontext;
-	u32 __data_loc_tclass;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_selinux_audited {
-	u32 scontext;
-	u32 tcontext;
-	u32 tclass;
-};
-
-typedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);
-
-struct avc_xperms_node;
-
-struct avc_entry {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	struct av_decision avd;
-	struct avc_xperms_node *xp_node;
-};
-
-struct avc_xperms_node {
-	struct extended_perms xp;
-	struct list_head xpd_head;
-};
-
-struct avc_node {
-	struct avc_entry ae;
-	struct hlist_node list;
-	struct callback_head rhead;
-};
-
-struct avc_xperms_decision_node {
-	struct extended_perms_decision xpd;
-	struct list_head xpd_list;
-};
-
-struct avc_callback_node {
-	int (*callback)(u32);
-	u32 events;
-	struct avc_callback_node *next;
-};
-
-typedef __u16 __sum16;
-
-enum sctp_endpoint_type {
-	SCTP_EP_TYPE_SOCKET = 0,
-	SCTP_EP_TYPE_ASSOCIATION = 1,
-};
-
-struct sctp_chunk;
-
-struct sctp_inq {
-	struct list_head in_chunk_list;
-	struct sctp_chunk *in_progress;
-	struct work_struct immediate;
-};
-
-struct sctp_bind_addr {
-	__u16 port;
-	struct list_head address_list;
-};
-
-struct sctp_ep_common {
-	struct hlist_node node;
-	int hashent;
-	enum sctp_endpoint_type type;
-	refcount_t refcnt;
-	bool dead;
-	struct sock *sk;
-	struct net *net;
-	struct sctp_inq inqueue;
-	struct sctp_bind_addr bind_addr;
-};
-
-struct crypto_shash___2;
-
-struct sctp_hmac_algo_param;
-
-struct sctp_chunks_param;
-
-struct sctp_endpoint {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	__u8 secret_key[32];
-	__u8 *digest;
-	__u32 sndbuf_policy;
-	__u32 rcvbuf_policy;
-	struct crypto_shash___2 **auth_hmacs;
-	struct sctp_hmac_algo_param *auth_hmacs_list;
-	struct sctp_chunks_param *auth_chunk_list;
-	struct list_head endpoint_shared_keys;
-	__u16 active_key_id;
-	__u8 ecn_enable: 1;
-	__u8 auth_enable: 1;
-	__u8 intl_enable: 1;
-	__u8 prsctp_enable: 1;
-	__u8 asconf_enable: 1;
-	__u8 reconf_enable: 1;
-	__u8 strreset_enable;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct sockaddr_in6 {
-	short unsigned int sin6_family;
-	__be16 sin6_port;
-	__be32 sin6_flowinfo;
-	struct in6_addr sin6_addr;
-	__u32 sin6_scope_id;
-};
-
-struct in_addr {
-	__be32 s_addr;
-};
-
-struct sockaddr_in {
-	__kernel_sa_family_t sin_family;
-	__be16 sin_port;
-	struct in_addr sin_addr;
-	unsigned char __pad[8];
-};
-
-struct nf_hook_state;
-
-typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
-
-struct nf_hook_entry {
-	nf_hookfn *hook;
-	void *priv;
-};
-
-struct nf_hook_entries {
-	u16 num_hook_entries;
-	struct nf_hook_entry hooks[0];
-};
-
-struct nf_hook_state {
-	unsigned int hook;
-	u_int8_t pf;
-	struct net_device *in;
-	struct net_device *out;
-	struct sock *sk;
-	struct net *net;
-	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
 };
 
 struct nf_hook_ops {
 	nf_hookfn *hook;
 	struct net_device *dev;
 	void *priv;
-	u_int8_t pf;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
 	unsigned int hooknum;
 	int priority;
 };
@@ -47303,323 +93016,44 @@
 	NF_IP6_PRI_LAST = 2147483647,
 };
 
-struct socket_alloc {
-	struct socket socket;
-	struct inode vfs_inode;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ip_options {
-	__be32 faddr;
-	__be32 nexthop;
-	unsigned char optlen;
-	unsigned char srr;
-	unsigned char rr;
-	unsigned char ts;
-	unsigned char is_strictroute: 1;
-	unsigned char srr_is_hit: 1;
-	unsigned char is_changed: 1;
-	unsigned char rr_needaddr: 1;
-	unsigned char ts_needtime: 1;
-	unsigned char ts_needaddr: 1;
-	unsigned char router_alert;
-	unsigned char cipso;
-	unsigned char __pad2;
-	unsigned char __data[0];
-};
-
-struct ip_options_rcu {
-	struct callback_head rcu;
-	struct ip_options opt;
-};
-
-struct ipv6_opt_hdr;
-
-struct ipv6_rt_hdr;
-
-struct ipv6_txoptions {
-	refcount_t refcnt;
-	int tot_len;
-	__u16 opt_flen;
-	__u16 opt_nflen;
-	struct ipv6_opt_hdr *hopopt;
-	struct ipv6_opt_hdr *dst0opt;
-	struct ipv6_rt_hdr *srcrt;
-	struct ipv6_opt_hdr *dst1opt;
-	struct callback_head rcu;
-};
-
-struct inet_cork {
-	unsigned int flags;
-	__be32 addr;
-	struct ip_options *opt;
-	unsigned int fragsize;
-	int length;
-	struct dst_entry *dst;
-	u8 tx_flags;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-	u64 transmit_time;
-	u32 mark;
-};
-
-struct inet_cork_full {
-	struct inet_cork base;
-	struct flowi fl;
-};
-
-struct ipv6_pinfo;
-
-struct ip_mc_socklist;
-
-struct inet_sock {
-	struct sock sk;
-	struct ipv6_pinfo *pinet6;
-	__be32 inet_saddr;
-	__s16 uc_ttl;
-	__u16 cmsg_flags;
-	__be16 inet_sport;
-	__u16 inet_id;
-	struct ip_options_rcu *inet_opt;
-	int rx_dst_ifindex;
-	__u8 tos;
-	__u8 min_ttl;
-	__u8 mc_ttl;
-	__u8 pmtudisc;
-	__u8 recverr: 1;
-	__u8 is_icsk: 1;
-	__u8 freebind: 1;
-	__u8 hdrincl: 1;
-	__u8 mc_loop: 1;
-	__u8 transparent: 1;
-	__u8 mc_all: 1;
-	__u8 nodefrag: 1;
-	__u8 bind_address_no_port: 1;
-	__u8 recverr_rfc4884: 1;
-	__u8 defer_connect: 1;
-	__u8 rcv_tos;
-	__u8 convert_csum;
-	int uc_index;
-	int mc_index;
-	__be32 mc_addr;
-	struct ip_mc_socklist *mc_list;
-	struct inet_cork_full cork;
-};
-
-struct in6_pktinfo {
-	struct in6_addr ipi6_addr;
-	int ipi6_ifindex;
-};
-
-struct inet6_cork {
-	struct ipv6_txoptions *opt;
-	u8 hop_limit;
-	u8 tclass;
-};
-
-struct ipv6_mc_socklist;
-
-struct ipv6_ac_socklist;
-
-struct ipv6_fl_socklist;
-
-struct ipv6_pinfo {
-	struct in6_addr saddr;
-	struct in6_pktinfo sticky_pktinfo;
-	const struct in6_addr *daddr_cache;
-	const struct in6_addr *saddr_cache;
-	__be32 flow_label;
-	__u32 frag_size;
-	__u16 __unused_1: 7;
-	__s16 hop_limit: 9;
-	__u16 mc_loop: 1;
-	__u16 __unused_2: 6;
-	__s16 mcast_hops: 9;
-	int ucast_oif;
-	int mcast_oif;
-	union {
-		struct {
-			__u16 srcrt: 1;
-			__u16 osrcrt: 1;
-			__u16 rxinfo: 1;
-			__u16 rxoinfo: 1;
-			__u16 rxhlim: 1;
-			__u16 rxohlim: 1;
-			__u16 hopopts: 1;
-			__u16 ohopopts: 1;
-			__u16 dstopts: 1;
-			__u16 odstopts: 1;
-			__u16 rxflow: 1;
-			__u16 rxtclass: 1;
-			__u16 rxpmtu: 1;
-			__u16 rxorigdstaddr: 1;
-			__u16 recvfragsize: 1;
-		} bits;
-		__u16 all;
-	} rxopt;
-	__u16 recverr: 1;
-	__u16 sndflow: 1;
-	__u16 repflow: 1;
-	__u16 pmtudisc: 3;
-	__u16 padding: 1;
-	__u16 srcprefs: 3;
-	__u16 dontfrag: 1;
-	__u16 autoflowlabel: 1;
-	__u16 autoflowlabel_set: 1;
-	__u16 mc_all: 1;
-	__u16 recverr_rfc4884: 1;
-	__u16 rtalert_isolate: 1;
-	__u8 min_hopcount;
-	__u8 tclass;
-	__be32 rcv_flowinfo;
-	__u32 dst_cookie;
-	__u32 rx_dst_cookie;
-	struct ipv6_mc_socklist *ipv6_mc_list;
-	struct ipv6_ac_socklist *ipv6_ac_list;
-	struct ipv6_fl_socklist *ipv6_fl_list;
-	struct ipv6_txoptions *opt;
-	struct sk_buff *pktoptions;
-	struct sk_buff *rxpmtu;
-	struct inet6_cork cork;
-};
-
-struct tcphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 seq;
-	__be32 ack_seq;
-	__u16 res1: 4;
-	__u16 doff: 4;
-	__u16 fin: 1;
-	__u16 syn: 1;
-	__u16 rst: 1;
-	__u16 psh: 1;
-	__u16 ack: 1;
-	__u16 urg: 1;
-	__u16 ece: 1;
-	__u16 cwr: 1;
-	__be16 window;
-	__sum16 check;
-	__be16 urg_ptr;
-};
-
-struct iphdr {
-	__u8 ihl: 4;
-	__u8 version: 4;
-	__u8 tos;
-	__be16 tot_len;
-	__be16 id;
-	__be16 frag_off;
-	__u8 ttl;
-	__u8 protocol;
-	__sum16 check;
-	__be32 saddr;
-	__be32 daddr;
-};
-
-struct ipv6_rt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-};
-
-struct ipv6_opt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-};
-
-struct ipv6hdr {
-	__u8 priority: 4;
-	__u8 version: 4;
-	__u8 flow_lbl[3];
-	__be16 payload_len;
-	__u8 nexthdr;
-	__u8 hop_limit;
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-};
-
-struct udphdr {
-	__be16 source;
-	__be16 dest;
-	__be16 len;
-	__sum16 check;
-};
-
-struct inet6_skb_parm {
-	int iif;
-	__be16 ra;
-	__u16 dst0;
-	__u16 srcrt;
-	__u16 dst1;
-	__u16 lastopt;
-	__u16 nhoff;
-	__u16 flags;
-	__u16 dsthao;
-	__u16 frag_max_size;
-};
-
-struct ip6_sf_socklist;
-
-struct ipv6_mc_socklist {
-	struct in6_addr addr;
-	int ifindex;
-	unsigned int sfmode;
-	struct ipv6_mc_socklist *next;
-	rwlock_t sflock;
-	struct ip6_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ipv6_ac_socklist {
-	struct in6_addr acl_addr;
-	int acl_ifindex;
-	struct ipv6_ac_socklist *acl_next;
-};
-
-struct ip6_flowlabel;
-
-struct ipv6_fl_socklist {
-	struct ipv6_fl_socklist *next;
-	struct ip6_flowlabel *fl;
-	struct callback_head rcu;
-};
-
-struct ip6_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct in6_addr sl_addr[0];
-};
-
-struct ip6_flowlabel {
-	struct ip6_flowlabel *next;
-	__be32 label;
-	atomic_t users;
-	struct in6_addr dst;
-	struct ipv6_txoptions *opt;
-	long unsigned int linger;
-	struct callback_head rcu;
-	u8 share;
-	union {
-		struct pid *pid;
-		kuid_t uid;
-	} owner;
-	long unsigned int lastuse;
-	long unsigned int expires;
-	struct net *fl_net;
-};
-
-struct inet_skb_parm {
-	int iif;
-	struct ip_options opt;
-	u16 flags;
-	u16 frag_max_size;
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
 };
 
 struct tty_file_private {
@@ -47628,32 +93062,6 @@
 	struct list_head list;
 };
 
-struct netlbl_lsm_cache {
-	refcount_t refcount;
-	void (*free)(const void *);
-	void *data;
-};
-
-struct netlbl_lsm_catmap {
-	u32 startbit;
-	u64 bitmap[4];
-	struct netlbl_lsm_catmap *next;
-};
-
-struct netlbl_lsm_secattr {
-	u32 flags;
-	u32 type;
-	char *domain;
-	struct netlbl_lsm_cache *cache;
-	struct {
-		struct {
-			struct netlbl_lsm_catmap *cat;
-			u32 lvl;
-		} mls;
-		u32 secid;
-	} attr;
-};
-
 struct dccp_hdr {
 	__be16 dccph_sport;
 	__be16 dccph_dport;
@@ -47684,73 +93092,10 @@
 	DCCP_MAX_STATES = 15,
 };
 
-typedef __s32 sctp_assoc_t;
-
 enum sctp_msg_flags {
 	MSG_NOTIFICATION = 32768,
 };
 
-struct sctp_initmsg {
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u16 sinit_max_attempts;
-	__u16 sinit_max_init_timeo;
-};
-
-struct sctp_sndrcvinfo {
-	__u16 sinfo_stream;
-	__u16 sinfo_ssn;
-	__u16 sinfo_flags;
-	__u32 sinfo_ppid;
-	__u32 sinfo_context;
-	__u32 sinfo_timetolive;
-	__u32 sinfo_tsn;
-	__u32 sinfo_cumtsn;
-	sctp_assoc_t sinfo_assoc_id;
-};
-
-struct sctp_rtoinfo {
-	sctp_assoc_t srto_assoc_id;
-	__u32 srto_initial;
-	__u32 srto_max;
-	__u32 srto_min;
-};
-
-struct sctp_assocparams {
-	sctp_assoc_t sasoc_assoc_id;
-	__u16 sasoc_asocmaxrxt;
-	__u16 sasoc_number_peer_destinations;
-	__u32 sasoc_peer_rwnd;
-	__u32 sasoc_local_rwnd;
-	__u32 sasoc_cookie_life;
-};
-
-struct sctp_paddrparams {
-	sctp_assoc_t spp_assoc_id;
-	struct __kernel_sockaddr_storage spp_address;
-	__u32 spp_hbinterval;
-	__u16 spp_pathmaxrxt;
-	__u32 spp_pathmtu;
-	__u32 spp_sackdelay;
-	__u32 spp_flags;
-	__u32 spp_ipv6_flowlabel;
-	__u8 spp_dscp;
-	char: 8;
-} __attribute__((packed));
-
-struct sctphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 vtag;
-	__le32 checksum;
-};
-
-struct sctp_chunkhdr {
-	__u8 type;
-	__u8 flags;
-	__be16 length;
-};
-
 enum sctp_cid {
 	SCTP_CID_DATA = 0,
 	SCTP_CID_INIT = 1,
@@ -47774,11 +93119,7 @@
 	SCTP_CID_I_FWD_TSN = 194,
 	SCTP_CID_ASCONF_ACK = 128,
 	SCTP_CID_RECONF = 130,
-};
-
-struct sctp_paramhdr {
-	__be16 type;
-	__be16 length;
+	SCTP_CID_PAD = 132,
 };
 
 enum sctp_param {
@@ -47810,475 +93151,6 @@
 	SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
 };
 
-struct sctp_datahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 ssn;
-	__u32 ppid;
-	__u8 payload[0];
-};
-
-struct sctp_idatahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 reserved;
-	__be32 mid;
-	union {
-		__u32 ppid;
-		__be32 fsn;
-	};
-	__u8 payload[0];
-};
-
-struct sctp_inithdr {
-	__be32 init_tag;
-	__be32 a_rwnd;
-	__be16 num_outbound_streams;
-	__be16 num_inbound_streams;
-	__be32 initial_tsn;
-	__u8 params[0];
-};
-
-struct sctp_init_chunk {
-	struct sctp_chunkhdr chunk_hdr;
-	struct sctp_inithdr init_hdr;
-};
-
-struct sctp_ipv4addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in_addr addr;
-};
-
-struct sctp_ipv6addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in6_addr addr;
-};
-
-struct sctp_cookie_preserve_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 lifespan_increment;
-};
-
-struct sctp_hostname_param {
-	struct sctp_paramhdr param_hdr;
-	uint8_t hostname[0];
-};
-
-struct sctp_supported_addrs_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 types[0];
-};
-
-struct sctp_adaptation_ind_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 adaptation_ind;
-};
-
-struct sctp_supported_ext_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_random_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 random_val[0];
-};
-
-struct sctp_chunks_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_hmac_algo_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 hmac_ids[0];
-};
-
-struct sctp_cookie_param {
-	struct sctp_paramhdr p;
-	__u8 body[0];
-};
-
-struct sctp_gap_ack_block {
-	__be16 start;
-	__be16 end;
-};
-
-union sctp_sack_variable {
-	struct sctp_gap_ack_block gab;
-	__be32 dup;
-};
-
-struct sctp_sackhdr {
-	__be32 cum_tsn_ack;
-	__be32 a_rwnd;
-	__be16 num_gap_ack_blocks;
-	__be16 num_dup_tsns;
-	union sctp_sack_variable variable[0];
-};
-
-struct sctp_heartbeathdr {
-	struct sctp_paramhdr info;
-};
-
-struct sctp_shutdownhdr {
-	__be32 cum_tsn_ack;
-};
-
-struct sctp_errhdr {
-	__be16 cause;
-	__be16 length;
-	__u8 variable[0];
-};
-
-struct sctp_ecnehdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_cwrhdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_fwdtsn_skip {
-	__be16 stream;
-	__be16 ssn;
-};
-
-struct sctp_fwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_fwdtsn_skip skip[0];
-};
-
-struct sctp_ifwdtsn_skip {
-	__be16 stream;
-	__u8 reserved;
-	__u8 flags;
-	__be32 mid;
-};
-
-struct sctp_ifwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_ifwdtsn_skip skip[0];
-};
-
-struct sctp_addip_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 crr_id;
-};
-
-struct sctp_addiphdr {
-	__be32 serial;
-	__u8 params[0];
-};
-
-struct sctp_authhdr {
-	__be16 shkey_id;
-	__be16 hmac_id;
-	__u8 hmac[0];
-};
-
-union sctp_addr {
-	struct sockaddr_in v4;
-	struct sockaddr_in6 v6;
-	struct sockaddr sa;
-};
-
-struct sctp_cookie {
-	__u32 my_vtag;
-	__u32 peer_vtag;
-	__u32 my_ttag;
-	__u32 peer_ttag;
-	ktime_t expiration;
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u32 initial_tsn;
-	union sctp_addr peer_addr;
-	__u16 my_port;
-	__u8 prsctp_capable;
-	__u8 padding;
-	__u32 adaptation_ind;
-	__u8 auth_random[36];
-	__u8 auth_hmacs[10];
-	__u8 auth_chunks[20];
-	__u32 raw_addr_list_len;
-	struct sctp_init_chunk peer_init[0];
-};
-
-struct sctp_tsnmap {
-	long unsigned int *tsn_map;
-	__u32 base_tsn;
-	__u32 cumulative_tsn_ack_point;
-	__u32 max_tsn_seen;
-	__u16 len;
-	__u16 pending_data;
-	__u16 num_dup_tsns;
-	__be32 dup_tsns[16];
-};
-
-struct sctp_inithdr_host {
-	__u32 init_tag;
-	__u32 a_rwnd;
-	__u16 num_outbound_streams;
-	__u16 num_inbound_streams;
-	__u32 initial_tsn;
-};
-
-enum sctp_state {
-	SCTP_STATE_CLOSED = 0,
-	SCTP_STATE_COOKIE_WAIT = 1,
-	SCTP_STATE_COOKIE_ECHOED = 2,
-	SCTP_STATE_ESTABLISHED = 3,
-	SCTP_STATE_SHUTDOWN_PENDING = 4,
-	SCTP_STATE_SHUTDOWN_SENT = 5,
-	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
-	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
-};
-
-struct sctp_stream_out_ext;
-
-struct sctp_stream_out {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	struct sctp_stream_out_ext *ext;
-	__u8 state;
-};
-
-struct sctp_stream_in {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	__u32 fsn;
-	__u32 fsn_uo;
-	char pd_mode;
-	char pd_mode_uo;
-};
-
-struct sctp_stream_interleave;
-
-struct sctp_stream {
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_out type[0];
-	} out;
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_in type[0];
-	} in;
-	__u16 outcnt;
-	__u16 incnt;
-	struct sctp_stream_out *out_curr;
-	union {
-		struct {
-			struct list_head prio_list;
-		};
-		struct {
-			struct list_head rr_list;
-			struct sctp_stream_out_ext *rr_next;
-		};
-	};
-	struct sctp_stream_interleave *si;
-};
-
-struct sctp_sched_ops;
-
-struct sctp_association;
-
-struct sctp_outq {
-	struct sctp_association *asoc;
-	struct list_head out_chunk_list;
-	struct sctp_sched_ops *sched;
-	unsigned int out_qlen;
-	unsigned int error;
-	struct list_head control_chunk_list;
-	struct list_head sacked;
-	struct list_head retransmit;
-	struct list_head abandoned;
-	__u32 outstanding_bytes;
-	char fast_rtx;
-	char cork;
-};
-
-struct sctp_ulpq {
-	char pd_mode;
-	struct sctp_association *asoc;
-	struct sk_buff_head reasm;
-	struct sk_buff_head reasm_uo;
-	struct sk_buff_head lobby;
-};
-
-struct sctp_priv_assoc_stats {
-	struct __kernel_sockaddr_storage obs_rto_ipaddr;
-	__u64 max_obs_rto;
-	__u64 isacks;
-	__u64 osacks;
-	__u64 opackets;
-	__u64 ipackets;
-	__u64 rtxchunks;
-	__u64 outofseqtsns;
-	__u64 idupchunks;
-	__u64 gapcnt;
-	__u64 ouodchunks;
-	__u64 iuodchunks;
-	__u64 oodchunks;
-	__u64 iodchunks;
-	__u64 octrlchunks;
-	__u64 ictrlchunks;
-};
-
-struct sctp_transport;
-
-struct sctp_auth_bytes;
-
-struct sctp_shared_key;
-
-struct sctp_association {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	sctp_assoc_t assoc_id;
-	struct sctp_endpoint *ep;
-	struct sctp_cookie c;
-	struct {
-		struct list_head transport_addr_list;
-		__u32 rwnd;
-		__u16 transport_count;
-		__u16 port;
-		struct sctp_transport *primary_path;
-		union sctp_addr primary_addr;
-		struct sctp_transport *active_path;
-		struct sctp_transport *retran_path;
-		struct sctp_transport *last_sent_to;
-		struct sctp_transport *last_data_from;
-		struct sctp_tsnmap tsn_map;
-		__be16 addip_disabled_mask;
-		__u16 ecn_capable: 1;
-		__u16 ipv4_address: 1;
-		__u16 ipv6_address: 1;
-		__u16 hostname_address: 1;
-		__u16 asconf_capable: 1;
-		__u16 prsctp_capable: 1;
-		__u16 reconf_capable: 1;
-		__u16 intl_capable: 1;
-		__u16 auth_capable: 1;
-		__u16 sack_needed: 1;
-		__u16 sack_generation: 1;
-		__u16 zero_window_announced: 1;
-		__u32 sack_cnt;
-		__u32 adaptation_ind;
-		struct sctp_inithdr_host i;
-		void *cookie;
-		int cookie_len;
-		__u32 addip_serial;
-		struct sctp_random_param *peer_random;
-		struct sctp_chunks_param *peer_chunks;
-		struct sctp_hmac_algo_param *peer_hmacs;
-	} peer;
-	enum sctp_state state;
-	int overall_error_count;
-	ktime_t cookie_life;
-	long unsigned int rto_initial;
-	long unsigned int rto_max;
-	long unsigned int rto_min;
-	int max_burst;
-	int max_retrans;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u16 max_init_attempts;
-	__u16 init_retries;
-	long unsigned int max_init_timeo;
-	long unsigned int hbinterval;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u8 pmtu_pending;
-	__u32 pathmtu;
-	__u32 param_flags;
-	__u32 sackfreq;
-	long unsigned int sackdelay;
-	long unsigned int timeouts[11];
-	struct timer_list timers[11];
-	struct sctp_transport *shutdown_last_sent_to;
-	struct sctp_transport *init_last_sent_to;
-	int shutdown_retries;
-	__u32 next_tsn;
-	__u32 ctsn_ack_point;
-	__u32 adv_peer_ack_point;
-	__u32 highest_sacked;
-	__u32 fast_recovery_exit;
-	__u8 fast_recovery;
-	__u16 unack_data;
-	__u32 rtx_data_chunks;
-	__u32 rwnd;
-	__u32 a_rwnd;
-	__u32 rwnd_over;
-	__u32 rwnd_press;
-	int sndbuf_used;
-	atomic_t rmem_alloc;
-	wait_queue_head_t wait;
-	__u32 frag_point;
-	__u32 user_frag;
-	int init_err_counter;
-	int init_cycle;
-	__u16 default_stream;
-	__u16 default_flags;
-	__u32 default_ppid;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	struct sctp_stream stream;
-	struct sctp_outq outqueue;
-	struct sctp_ulpq ulpq;
-	__u32 last_ecne_tsn;
-	__u32 last_cwr_tsn;
-	int numduptsns;
-	struct sctp_chunk *addip_last_asconf;
-	struct list_head asconf_ack_list;
-	struct list_head addip_chunk_list;
-	__u32 addip_serial;
-	int src_out_of_asoc_ok;
-	union sctp_addr *asconf_addr_del_pending;
-	struct sctp_transport *new_transport;
-	struct list_head endpoint_shared_keys;
-	struct sctp_auth_bytes *asoc_shared_key;
-	struct sctp_shared_key *shkey;
-	__u16 default_hmac_id;
-	__u16 active_key_id;
-	__u8 need_ecne: 1;
-	__u8 temp: 1;
-	__u8 pf_expose: 2;
-	__u8 force_delay: 1;
-	__u8 strreset_enable;
-	__u8 strreset_outstanding;
-	__u32 strreset_outseq;
-	__u32 strreset_inseq;
-	__u32 strreset_result[2];
-	struct sctp_chunk *strreset_chunk;
-	struct sctp_priv_assoc_stats stats;
-	int sent_cnt_removable;
-	__u16 subscribe;
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct callback_head rcu;
-};
-
-struct sctp_auth_bytes {
-	refcount_t refcnt;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct sctp_shared_key {
-	struct list_head key_list;
-	struct sctp_auth_bytes *key;
-	refcount_t refcnt;
-	__u16 key_id;
-	__u8 deactivated;
-};
-
 enum {
 	SCTP_MAX_STREAM = 65535,
 };
@@ -48293,22 +93165,15 @@
 	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
 	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
 	SCTP_EVENT_TIMEOUT_RECONF = 8,
-	SCTP_EVENT_TIMEOUT_SACK = 9,
-	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,
+	SCTP_EVENT_TIMEOUT_PROBE = 9,
+	SCTP_EVENT_TIMEOUT_SACK = 10,
+	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 11,
 };
 
 enum {
 	SCTP_MAX_DUP_TSNS = 16,
 };
 
-enum sctp_scope {
-	SCTP_SCOPE_GLOBAL = 0,
-	SCTP_SCOPE_PRIVATE = 1,
-	SCTP_SCOPE_LINK = 2,
-	SCTP_SCOPE_LOOPBACK = 3,
-	SCTP_SCOPE_UNUSABLE = 4,
-};
-
 enum {
 	SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
 	SCTP_AUTH_HMAC_ID_SHA1 = 1,
@@ -48317,379 +93182,6 @@
 	__SCTP_AUTH_HMAC_MAX = 4,
 };
 
-struct sctp_ulpevent {
-	struct sctp_association *asoc;
-	struct sctp_chunk *chunk;
-	unsigned int rmem_len;
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	union {
-		__u32 ppid;
-		__u32 fsn;
-	};
-	__u32 tsn;
-	__u32 cumtsn;
-	__u16 stream;
-	__u16 flags;
-	__u16 msg_flags;
-} __attribute__((packed));
-
-union sctp_addr_param;
-
-union sctp_params {
-	void *v;
-	struct sctp_paramhdr *p;
-	struct sctp_cookie_preserve_param *life;
-	struct sctp_hostname_param *dns;
-	struct sctp_cookie_param *cookie;
-	struct sctp_supported_addrs_param *sat;
-	struct sctp_ipv4addr_param *v4;
-	struct sctp_ipv6addr_param *v6;
-	union sctp_addr_param *addr;
-	struct sctp_adaptation_ind_param *aind;
-	struct sctp_supported_ext_param *ext;
-	struct sctp_random_param *random;
-	struct sctp_chunks_param *chunks;
-	struct sctp_hmac_algo_param *hmac_algo;
-	struct sctp_addip_param *addip;
-};
-
-struct sctp_sender_hb_info;
-
-struct sctp_signed_cookie;
-
-struct sctp_datamsg;
-
-struct sctp_chunk {
-	struct list_head list;
-	refcount_t refcnt;
-	int sent_count;
-	union {
-		struct list_head transmitted_list;
-		struct list_head stream_list;
-	};
-	struct list_head frag_list;
-	struct sk_buff *skb;
-	union {
-		struct sk_buff *head_skb;
-		struct sctp_shared_key *shkey;
-	};
-	union sctp_params param_hdr;
-	union {
-		__u8 *v;
-		struct sctp_datahdr *data_hdr;
-		struct sctp_inithdr *init_hdr;
-		struct sctp_sackhdr *sack_hdr;
-		struct sctp_heartbeathdr *hb_hdr;
-		struct sctp_sender_hb_info *hbs_hdr;
-		struct sctp_shutdownhdr *shutdown_hdr;
-		struct sctp_signed_cookie *cookie_hdr;
-		struct sctp_ecnehdr *ecne_hdr;
-		struct sctp_cwrhdr *ecn_cwr_hdr;
-		struct sctp_errhdr *err_hdr;
-		struct sctp_addiphdr *addip_hdr;
-		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
-		struct sctp_authhdr *auth_hdr;
-		struct sctp_idatahdr *idata_hdr;
-		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
-	} subh;
-	__u8 *chunk_end;
-	struct sctp_chunkhdr *chunk_hdr;
-	struct sctphdr *sctp_hdr;
-	struct sctp_sndrcvinfo sinfo;
-	struct sctp_association *asoc;
-	struct sctp_ep_common *rcvr;
-	long unsigned int sent_at;
-	union sctp_addr source;
-	union sctp_addr dest;
-	struct sctp_datamsg *msg;
-	struct sctp_transport *transport;
-	struct sk_buff *auth_chunk;
-	__u16 rtt_in_progress: 1;
-	__u16 has_tsn: 1;
-	__u16 has_ssn: 1;
-	__u16 singleton: 1;
-	__u16 end_of_packet: 1;
-	__u16 ecn_ce_done: 1;
-	__u16 pdiscard: 1;
-	__u16 tsn_gap_acked: 1;
-	__u16 data_accepted: 1;
-	__u16 auth: 1;
-	__u16 has_asconf: 1;
-	__u16 tsn_missing_report: 2;
-	__u16 fast_retransmit: 2;
-};
-
-struct sctp_stream_interleave {
-	__u16 data_chunk_len;
-	__u16 ftsn_chunk_len;
-	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
-	void (*assign_number)(struct sctp_chunk *);
-	bool (*validate_data)(struct sctp_chunk *);
-	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
-	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	void (*start_pd)(struct sctp_ulpq *, gfp_t);
-	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
-	void (*generate_ftsn)(struct sctp_outq *, __u32);
-	bool (*validate_ftsn)(struct sctp_chunk *);
-	void (*report_ftsn)(struct sctp_ulpq *, __u32);
-	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
-};
-
-struct sctp_bind_bucket {
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct hlist_node node;
-	struct hlist_head owner;
-	struct net *net;
-};
-
-enum sctp_socket_type {
-	SCTP_SOCKET_UDP = 0,
-	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
-	SCTP_SOCKET_TCP = 2,
-};
-
-struct sctp_pf;
-
-struct sctp_sock {
-	struct inet_sock inet;
-	enum sctp_socket_type type;
-	int: 32;
-	struct sctp_pf *pf;
-	struct crypto_shash___2 *hmac;
-	char *sctp_hmac_alg;
-	struct sctp_endpoint *ep;
-	struct sctp_bind_bucket *bind_hash;
-	__u16 default_stream;
-	short: 16;
-	__u32 default_ppid;
-	__u16 default_flags;
-	short: 16;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	int max_burst;
-	__u32 hbinterval;
-	__u16 pathmaxrxt;
-	short: 16;
-	__u32 flowlabel;
-	__u8 dscp;
-	char: 8;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	short: 16;
-	__u32 pathmtu;
-	__u32 sackdelay;
-	__u32 sackfreq;
-	__u32 param_flags;
-	__u32 default_ss;
-	struct sctp_rtoinfo rtoinfo;
-	struct sctp_paddrparams paddrparam;
-	struct sctp_assocparams assocparams;
-	__u16 subscribe;
-	struct sctp_initmsg initmsg;
-	short: 16;
-	int user_frag;
-	__u32 autoclose;
-	__u32 adaptation_ind;
-	__u32 pd_point;
-	__u16 nodelay: 1;
-	__u16 pf_expose: 2;
-	__u16 reuse: 1;
-	__u16 disable_fragments: 1;
-	__u16 v4mapped: 1;
-	__u16 frag_interleave: 1;
-	__u16 recvrcvinfo: 1;
-	__u16 recvnxtinfo: 1;
-	__u16 data_ready_signalled: 1;
-	int: 22;
-	atomic_t pd_mode;
-	struct sk_buff_head pd_lobby;
-	struct list_head auto_asconf_list;
-	int do_auto_asconf;
-	int: 32;
-} __attribute__((packed));
-
-struct sctp_af;
-
-struct sctp_pf {
-	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
-	void (*skb_msgname)(struct sk_buff *, char *, int *);
-	int (*af_supported)(sa_family_t, struct sctp_sock *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
-	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
-	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
-	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
-	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
-	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
-	void (*copy_ip_options)(struct sock *, struct sock *);
-	struct sctp_af *af;
-};
-
-struct sctp_signed_cookie {
-	__u8 signature[32];
-	__u32 __pad;
-	struct sctp_cookie c;
-} __attribute__((packed));
-
-union sctp_addr_param {
-	struct sctp_paramhdr p;
-	struct sctp_ipv4addr_param v4;
-	struct sctp_ipv6addr_param v6;
-};
-
-struct sctp_sender_hb_info {
-	struct sctp_paramhdr param_hdr;
-	union sctp_addr daddr;
-	long unsigned int sent_at;
-	__u64 hb_nonce;
-};
-
-struct sctp_af {
-	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
-	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
-	void (*copy_addrlist)(struct list_head *, struct net_device *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
-	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
-	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
-	void (*from_sk)(union sctp_addr *, struct sock *);
-	void (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
-	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
-	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
-	enum sctp_scope (*scope)(union sctp_addr *);
-	void (*inaddr_any)(union sctp_addr *, __be16);
-	int (*is_any)(const union sctp_addr *);
-	int (*available)(union sctp_addr *, struct sctp_sock *);
-	int (*skb_iif)(const struct sk_buff *);
-	int (*is_ce)(const struct sk_buff *);
-	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
-	void (*ecn_capable)(struct sock *);
-	__u16 net_header_len;
-	int sockaddr_len;
-	int (*ip_options_len)(struct sock *);
-	sa_family_t sa_family;
-	struct list_head list;
-};
-
-struct sctp_packet {
-	__u16 source_port;
-	__u16 destination_port;
-	__u32 vtag;
-	struct list_head chunk_list;
-	size_t overhead;
-	size_t size;
-	size_t max_size;
-	struct sctp_transport *transport;
-	struct sctp_chunk *auth;
-	u8 has_cookie_echo: 1;
-	u8 has_sack: 1;
-	u8 has_auth: 1;
-	u8 has_data: 1;
-	u8 ipfragok: 1;
-};
-
-struct sctp_transport {
-	struct list_head transports;
-	struct rhlist_head node;
-	refcount_t refcnt;
-	__u32 rto_pending: 1;
-	__u32 hb_sent: 1;
-	__u32 pmtu_pending: 1;
-	__u32 dst_pending_confirm: 1;
-	__u32 sack_generation: 1;
-	u32 dst_cookie;
-	struct flowi fl;
-	union sctp_addr ipaddr;
-	struct sctp_af *af_specific;
-	struct sctp_association *asoc;
-	long unsigned int rto;
-	__u32 rtt;
-	__u32 rttvar;
-	__u32 srtt;
-	__u32 cwnd;
-	__u32 ssthresh;
-	__u32 partial_bytes_acked;
-	__u32 flight_size;
-	__u32 burst_limited;
-	struct dst_entry *dst;
-	union sctp_addr saddr;
-	long unsigned int hbinterval;
-	long unsigned int sackdelay;
-	__u32 sackfreq;
-	atomic_t mtu_info;
-	ktime_t last_time_heard;
-	long unsigned int last_time_sent;
-	long unsigned int last_time_ecne_reduced;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u32 pathmtu;
-	__u32 param_flags;
-	int init_sent_count;
-	int state;
-	short unsigned int error_count;
-	struct timer_list T3_rtx_timer;
-	struct timer_list hb_timer;
-	struct timer_list proto_unreach_timer;
-	struct timer_list reconf_timer;
-	struct list_head transmitted;
-	struct sctp_packet packet;
-	struct list_head send_ready;
-	struct {
-		__u32 next_tsn_at_change;
-		char changeover_active;
-		char cycling_changeover;
-		char cacc_saw_newack;
-	} cacc;
-	__u64 hb_nonce;
-	struct callback_head rcu;
-};
-
-struct sctp_datamsg {
-	struct list_head chunks;
-	refcount_t refcnt;
-	long unsigned int expires_at;
-	int send_error;
-	u8 send_failed: 1;
-	u8 can_delay: 1;
-	u8 abandoned: 1;
-};
-
-struct sctp_stream_priorities {
-	struct list_head prio_sched;
-	struct list_head active;
-	struct sctp_stream_out_ext *next;
-	__u16 prio;
-};
-
-struct sctp_stream_out_ext {
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct list_head outq;
-	union {
-		struct {
-			struct list_head prio_list;
-			struct sctp_stream_priorities *prio_head;
-		};
-		struct {
-			struct list_head rr_list;
-		};
-	};
-};
-
 struct task_security_struct {
 	u32 osid;
 	u32 sid;
@@ -48723,7 +93215,6 @@
 };
 
 struct superblock_security_struct {
-	struct super_block *sb;
 	u32 sid;
 	u32 def_sid;
 	u32 mntpoint_sid;
@@ -48743,24 +93234,6 @@
 	u32 sid;
 };
 
-struct sk_security_struct {
-	enum {
-		NLBL_UNSET = 0,
-		NLBL_REQUIRE = 1,
-		NLBL_LABELED = 2,
-		NLBL_REQSKB = 3,
-		NLBL_CONNLABELED = 4,
-	} nlbl_state;
-	struct netlbl_lsm_secattr *nlbl_secattr;
-	u32 sid;
-	u32 peer_sid;
-	u16 sclass;
-	enum {
-		SCTP_ASSOC_UNSET = 0,
-		SCTP_ASSOC_SET = 1,
-	} sctp_assoc_state;
-};
-
 struct tun_security_struct {
 	u32 sid;
 };
@@ -48769,6 +93242,10 @@
 	u32 sid;
 };
 
+struct ib_security_struct {
+	u32 sid;
+};
+
 struct bpf_security_struct {
 	u32 sid;
 };
@@ -48778,14 +93255,14 @@
 };
 
 struct selinux_mnt_opts {
-	const char *fscontext;
-	const char *context;
-	const char *rootcontext;
-	const char *defcontext;
+	u32 fscontext_sid;
+	u32 context_sid;
+	u32 rootcontext_sid;
+	u32 defcontext_sid;
 };
 
 enum {
-	Opt_error___2 = 4294967295,
+	Opt_error = 4294967295,
 	Opt_context = 0,
 	Opt_defcontext = 1,
 	Opt_fscontext = 2,
@@ -48793,2035 +93270,18 @@
 	Opt_seclabel = 4,
 };
 
-enum sel_inos {
-	SEL_ROOT_INO = 2,
-	SEL_LOAD = 3,
-	SEL_ENFORCE = 4,
-	SEL_CONTEXT = 5,
-	SEL_ACCESS = 6,
-	SEL_CREATE = 7,
-	SEL_RELABEL = 8,
-	SEL_USER = 9,
-	SEL_POLICYVERS = 10,
-	SEL_COMMIT_BOOLS = 11,
-	SEL_MLS = 12,
-	SEL_DISABLE = 13,
-	SEL_MEMBER = 14,
-	SEL_CHECKREQPROT = 15,
-	SEL_COMPAT_NET = 16,
-	SEL_REJECT_UNKNOWN = 17,
-	SEL_DENY_UNKNOWN = 18,
-	SEL_STATUS = 19,
-	SEL_POLICY = 20,
-	SEL_VALIDATE_TRANS = 21,
-	SEL_INO_NEXT = 22,
+struct landlock_ruleset_attr {
+	__u64 handled_access_fs;
 };
 
-struct selinux_fs_info {
-	struct dentry *bool_dir;
-	unsigned int bool_num;
-	char **bool_pending_names;
-	unsigned int *bool_pending_values;
-	struct dentry *class_dir;
-	long unsigned int last_class_ino;
-	bool policy_opened;
-	struct dentry *policycap_dir;
-	long unsigned int last_ino;
-	struct selinux_state *state;
-	struct super_block *sb;
+enum landlock_rule_type {
+	LANDLOCK_RULE_PATH_BENEATH = 1,
 };
 
-struct policy_load_memory {
-	size_t len;
-	void *data;
-};
-
-enum {
-	SELNL_MSG_SETENFORCE = 16,
-	SELNL_MSG_POLICYLOAD = 17,
-	SELNL_MSG_MAX = 18,
-};
-
-enum selinux_nlgroups {
-	SELNLGRP_NONE = 0,
-	SELNLGRP_AVC = 1,
-	__SELNLGRP_MAX = 2,
-};
-
-struct selnl_msg_setenforce {
-	__s32 val;
-};
-
-struct selnl_msg_policyload {
-	__u32 seqno;
-};
-
-enum {
-	XFRM_MSG_BASE = 16,
-	XFRM_MSG_NEWSA = 16,
-	XFRM_MSG_DELSA = 17,
-	XFRM_MSG_GETSA = 18,
-	XFRM_MSG_NEWPOLICY = 19,
-	XFRM_MSG_DELPOLICY = 20,
-	XFRM_MSG_GETPOLICY = 21,
-	XFRM_MSG_ALLOCSPI = 22,
-	XFRM_MSG_ACQUIRE = 23,
-	XFRM_MSG_EXPIRE = 24,
-	XFRM_MSG_UPDPOLICY = 25,
-	XFRM_MSG_UPDSA = 26,
-	XFRM_MSG_POLEXPIRE = 27,
-	XFRM_MSG_FLUSHSA = 28,
-	XFRM_MSG_FLUSHPOLICY = 29,
-	XFRM_MSG_NEWAE = 30,
-	XFRM_MSG_GETAE = 31,
-	XFRM_MSG_REPORT = 32,
-	XFRM_MSG_MIGRATE = 33,
-	XFRM_MSG_NEWSADINFO = 34,
-	XFRM_MSG_GETSADINFO = 35,
-	XFRM_MSG_NEWSPDINFO = 36,
-	XFRM_MSG_GETSPDINFO = 37,
-	XFRM_MSG_MAPPING = 38,
-	__XFRM_MSG_MAX = 39,
-};
-
-enum {
-	RTM_BASE = 16,
-	RTM_NEWLINK = 16,
-	RTM_DELLINK = 17,
-	RTM_GETLINK = 18,
-	RTM_SETLINK = 19,
-	RTM_NEWADDR = 20,
-	RTM_DELADDR = 21,
-	RTM_GETADDR = 22,
-	RTM_NEWROUTE = 24,
-	RTM_DELROUTE = 25,
-	RTM_GETROUTE = 26,
-	RTM_NEWNEIGH = 28,
-	RTM_DELNEIGH = 29,
-	RTM_GETNEIGH = 30,
-	RTM_NEWRULE = 32,
-	RTM_DELRULE = 33,
-	RTM_GETRULE = 34,
-	RTM_NEWQDISC = 36,
-	RTM_DELQDISC = 37,
-	RTM_GETQDISC = 38,
-	RTM_NEWTCLASS = 40,
-	RTM_DELTCLASS = 41,
-	RTM_GETTCLASS = 42,
-	RTM_NEWTFILTER = 44,
-	RTM_DELTFILTER = 45,
-	RTM_GETTFILTER = 46,
-	RTM_NEWACTION = 48,
-	RTM_DELACTION = 49,
-	RTM_GETACTION = 50,
-	RTM_NEWPREFIX = 52,
-	RTM_GETMULTICAST = 58,
-	RTM_GETANYCAST = 62,
-	RTM_NEWNEIGHTBL = 64,
-	RTM_GETNEIGHTBL = 66,
-	RTM_SETNEIGHTBL = 67,
-	RTM_NEWNDUSEROPT = 68,
-	RTM_NEWADDRLABEL = 72,
-	RTM_DELADDRLABEL = 73,
-	RTM_GETADDRLABEL = 74,
-	RTM_GETDCB = 78,
-	RTM_SETDCB = 79,
-	RTM_NEWNETCONF = 80,
-	RTM_DELNETCONF = 81,
-	RTM_GETNETCONF = 82,
-	RTM_NEWMDB = 84,
-	RTM_DELMDB = 85,
-	RTM_GETMDB = 86,
-	RTM_NEWNSID = 88,
-	RTM_DELNSID = 89,
-	RTM_GETNSID = 90,
-	RTM_NEWSTATS = 92,
-	RTM_GETSTATS = 94,
-	RTM_NEWCACHEREPORT = 96,
-	RTM_NEWCHAIN = 100,
-	RTM_DELCHAIN = 101,
-	RTM_GETCHAIN = 102,
-	RTM_NEWNEXTHOP = 104,
-	RTM_DELNEXTHOP = 105,
-	RTM_GETNEXTHOP = 106,
-	RTM_NEWLINKPROP = 108,
-	RTM_DELLINKPROP = 109,
-	RTM_GETLINKPROP = 110,
-	RTM_NEWVLAN = 112,
-	RTM_DELVLAN = 113,
-	RTM_GETVLAN = 114,
-	__RTM_MAX = 115,
-};
-
-struct nlmsg_perm {
-	u16 nlmsg_type;
-	u32 perm;
-};
-
-struct netif_security_struct {
-	struct net *ns;
-	int ifindex;
-	u32 sid;
-};
-
-struct sel_netif {
-	struct list_head list;
-	struct netif_security_struct nsec;
-	struct callback_head callback_head;
-};
-
-struct netnode_security_struct {
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} addr;
-	u32 sid;
-	u16 family;
-};
-
-struct sel_netnode_bkt {
-	unsigned int size;
-	struct list_head list;
-};
-
-struct sel_netnode {
-	struct netnode_security_struct nsec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netport_security_struct {
-	u32 sid;
-	u16 port;
-	u8 protocol;
-};
-
-struct sel_netport_bkt {
-	int size;
-	struct list_head list;
-};
-
-struct sel_netport {
-	struct netport_security_struct psec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct selinux_kernel_status {
-	u32 version;
-	u32 sequence;
-	u32 enforcing;
-	u32 policyload;
-	u32 deny_unknown;
-};
-
-struct ebitmap_node {
-	struct ebitmap_node *next;
-	long unsigned int maps[6];
-	u32 startbit;
-};
-
-struct ebitmap {
-	struct ebitmap_node *node;
-	u32 highbit;
-};
-
-struct policy_file {
-	char *data;
-	size_t len;
-};
-
-struct hashtab_node {
-	void *key;
-	void *datum;
-	struct hashtab_node *next;
-};
-
-struct hashtab {
-	struct hashtab_node **htable;
-	u32 size;
-	u32 nel;
-};
-
-struct hashtab_info {
-	u32 slots_used;
-	u32 max_chain_len;
-};
-
-struct hashtab_key_params {
-	u32 (*hash)(const void *);
-	int (*cmp)(const void *, const void *);
-};
-
-struct symtab {
-	struct hashtab table;
-	u32 nprim;
-};
-
-struct mls_level {
-	u32 sens;
-	struct ebitmap cat;
-};
-
-struct mls_range {
-	struct mls_level level[2];
-};
-
-struct context {
-	u32 user;
-	u32 role;
-	u32 type;
-	u32 len;
-	struct mls_range range;
-	char *str;
-};
-
-struct sidtab_str_cache;
-
-struct sidtab_entry {
-	u32 sid;
-	u32 hash;
-	struct context context;
-	struct sidtab_str_cache *cache;
-	struct hlist_node list;
-};
-
-struct sidtab_str_cache {
-	struct callback_head rcu_member;
-	struct list_head lru_member;
-	struct sidtab_entry *parent;
-	u32 len;
-	char str[0];
-};
-
-struct sidtab_node_inner;
-
-struct sidtab_node_leaf;
-
-union sidtab_entry_inner {
-	struct sidtab_node_inner *ptr_inner;
-	struct sidtab_node_leaf *ptr_leaf;
-};
-
-struct sidtab_node_inner {
-	union sidtab_entry_inner entries[512];
-};
-
-struct sidtab_node_leaf {
-	struct sidtab_entry entries[39];
-};
-
-struct sidtab_isid_entry {
-	int set;
-	struct sidtab_entry entry;
-};
-
-struct sidtab;
-
-struct sidtab_convert_params {
-	int (*func)(struct context *, struct context *, void *);
-	void *args;
-	struct sidtab *target;
-};
-
-struct sidtab {
-	union sidtab_entry_inner roots[4];
-	u32 count;
-	struct sidtab_convert_params *convert;
-	spinlock_t lock;
-	u32 cache_free_slots;
-	struct list_head cache_lru_list;
-	spinlock_t cache_lock;
-	struct sidtab_isid_entry isids[27];
-	struct hlist_head context_to_sid[512];
-};
-
-struct avtab_key {
-	u16 source_type;
-	u16 target_type;
-	u16 target_class;
-	u16 specified;
-};
-
-struct avtab_extended_perms {
-	u8 specified;
-	u8 driver;
-	struct extended_perms_data perms;
-};
-
-struct avtab_datum {
-	union {
-		u32 data;
-		struct avtab_extended_perms *xperms;
-	} u;
-};
-
-struct avtab_node {
-	struct avtab_key key;
-	struct avtab_datum datum;
-	struct avtab_node *next;
-};
-
-struct avtab {
-	struct avtab_node **htable;
-	u32 nel;
-	u32 nslot;
-	u32 mask;
-};
-
-struct type_set;
-
-struct constraint_expr {
-	u32 expr_type;
-	u32 attr;
-	u32 op;
-	struct ebitmap names;
-	struct type_set *type_names;
-	struct constraint_expr *next;
-};
-
-struct type_set {
-	struct ebitmap types;
-	struct ebitmap negset;
-	u32 flags;
-};
-
-struct constraint_node {
-	u32 permissions;
-	struct constraint_expr *expr;
-	struct constraint_node *next;
-};
-
-struct common_datum {
-	u32 value;
-	struct symtab permissions;
-};
-
-struct class_datum {
-	u32 value;
-	char *comkey;
-	struct common_datum *comdatum;
-	struct symtab permissions;
-	struct constraint_node *constraints;
-	struct constraint_node *validatetrans;
-	char default_user;
-	char default_role;
-	char default_type;
-	char default_range;
-};
-
-struct role_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap dominates;
-	struct ebitmap types;
-};
-
-struct role_allow {
-	u32 role;
-	u32 new_role;
-	struct role_allow *next;
-};
-
-struct type_datum {
-	u32 value;
-	u32 bounds;
-	unsigned char primary;
-	unsigned char attribute;
-};
-
-struct user_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap roles;
-	struct mls_range range;
-	struct mls_level dfltlevel;
-};
-
-struct cond_bool_datum {
-	__u32 value;
-	int state;
-};
-
-struct ocontext {
-	union {
-		char *name;
-		struct {
-			u8 protocol;
-			u16 low_port;
-			u16 high_port;
-		} port;
-		struct {
-			u32 addr;
-			u32 mask;
-		} node;
-		struct {
-			u32 addr[4];
-			u32 mask[4];
-		} node6;
-		struct {
-			u64 subnet_prefix;
-			u16 low_pkey;
-			u16 high_pkey;
-		} ibpkey;
-		struct {
-			char *dev_name;
-			u8 port;
-		} ibendport;
-	} u;
-	union {
-		u32 sclass;
-		u32 behavior;
-	} v;
-	struct context context[2];
-	u32 sid[2];
-	struct ocontext *next;
-};
-
-struct genfs {
-	char *fstype;
-	struct ocontext *head;
-	struct genfs *next;
-};
-
-struct cond_node;
-
-struct policydb {
-	int mls_enabled;
-	struct symtab symtab[8];
-	char **sym_val_to_name[8];
-	struct class_datum **class_val_to_struct;
-	struct role_datum **role_val_to_struct;
-	struct user_datum **user_val_to_struct;
-	struct type_datum **type_val_to_struct;
-	struct avtab te_avtab;
-	struct hashtab role_tr;
-	struct ebitmap filename_trans_ttypes;
-	struct hashtab filename_trans;
-	u32 compat_filename_trans_count;
-	struct cond_bool_datum **bool_val_to_struct;
-	struct avtab te_cond_avtab;
-	struct cond_node *cond_list;
-	u32 cond_list_len;
-	struct role_allow *role_allow;
-	struct ocontext *ocontexts[9];
-	struct genfs *genfs;
-	struct hashtab range_tr;
-	struct ebitmap *type_attr_map_array;
-	struct ebitmap policycaps;
-	struct ebitmap permissive_map;
-	size_t len;
-	unsigned int policyvers;
-	unsigned int reject_unknown: 1;
-	unsigned int allow_unknown: 1;
-	u16 process_class;
-	u32 process_trans_perms;
-};
-
-struct perm_datum {
-	u32 value;
-};
-
-struct role_trans_key {
-	u32 role;
-	u32 type;
-	u32 tclass;
-};
-
-struct role_trans_datum {
-	u32 new_role;
-};
-
-struct filename_trans_key {
-	u32 ttype;
-	u16 tclass;
-	const char *name;
-};
-
-struct filename_trans_datum {
-	struct ebitmap stypes;
-	u32 otype;
-	struct filename_trans_datum *next;
-};
-
-struct level_datum {
-	struct mls_level *level;
-	unsigned char isalias;
-};
-
-struct cat_datum {
-	u32 value;
-	unsigned char isalias;
-};
-
-struct range_trans {
-	u32 source_type;
-	u32 target_type;
-	u32 target_class;
-};
-
-struct cond_expr_node;
-
-struct cond_expr {
-	struct cond_expr_node *nodes;
-	u32 len;
-};
-
-struct cond_av_list {
-	struct avtab_node **nodes;
-	u32 len;
-};
-
-struct cond_node {
-	int cur_state;
-	struct cond_expr expr;
-	struct cond_av_list true_list;
-	struct cond_av_list false_list;
-};
-
-struct policy_data {
-	struct policydb *p;
-	void *fp;
-};
-
-struct cond_expr_node {
-	u32 expr_type;
-	u32 bool;
-};
-
-struct policydb_compat_info {
-	int version;
-	int sym_num;
-	int ocon_num;
-};
-
-struct selinux_mapping;
-
-struct selinux_map {
-	struct selinux_mapping *mapping;
-	u16 size;
-};
-
-struct selinux_policy {
-	struct sidtab *sidtab;
-	struct policydb policydb;
-	struct selinux_map map;
-	u32 latest_granting;
-};
-
-struct selinux_mapping {
-	u16 value;
-	unsigned int num_perms;
-	u32 perms[32];
-};
-
-struct convert_context_args {
-	struct selinux_state *state;
-	struct policydb *oldp;
-	struct policydb *newp;
-};
-
-struct selinux_audit_rule {
-	u32 au_seqno;
-	struct context au_ctxt;
-};
-
-struct cond_insertf_data {
-	struct policydb *p;
-	struct avtab_node **dst;
-	struct cond_av_list *other;
-};
-
-struct rt6key {
-	struct in6_addr addr;
-	int plen;
-};
-
-struct rtable;
-
-struct fnhe_hash_bucket;
-
-struct fib_nh_common {
-	struct net_device *nhc_dev;
-	int nhc_oif;
-	unsigned char nhc_scope;
-	u8 nhc_family;
-	u8 nhc_gw_family;
-	unsigned char nhc_flags;
-	struct lwtunnel_state *nhc_lwtstate;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} nhc_gw;
-	int nhc_weight;
-	atomic_t nhc_upper_bound;
-	struct rtable **nhc_pcpu_rth_output;
-	struct rtable *nhc_rth_input;
-	struct fnhe_hash_bucket *nhc_exceptions;
-};
-
-struct rt6_exception_bucket;
-
-struct fib6_nh {
-	struct fib_nh_common nh_common;
-	long unsigned int last_probe;
-	struct rt6_info **rt6i_pcpu;
-	struct rt6_exception_bucket *rt6i_exception_bucket;
-};
-
-struct fib6_node;
-
-struct dst_metrics;
-
-struct nexthop;
-
-struct fib6_info {
-	struct fib6_table *fib6_table;
-	struct fib6_info *fib6_next;
-	struct fib6_node *fib6_node;
-	union {
-		struct list_head fib6_siblings;
-		struct list_head nh_list;
-	};
-	unsigned int fib6_nsiblings;
-	refcount_t fib6_ref;
-	long unsigned int expires;
-	struct dst_metrics *fib6_metrics;
-	struct rt6key fib6_dst;
-	u32 fib6_flags;
-	struct rt6key fib6_src;
-	struct rt6key fib6_prefsrc;
-	u32 fib6_metric;
-	u8 fib6_protocol;
-	u8 fib6_type;
-	u8 should_flush: 1;
-	u8 dst_nocount: 1;
-	u8 dst_nopolicy: 1;
-	u8 fib6_destroying: 1;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 2;
-	struct callback_head rcu;
-	struct nexthop *nh;
-	struct fib6_nh fib6_nh[0];
-};
-
-struct uncached_list;
-
-struct rt6_info {
-	struct dst_entry dst;
-	struct fib6_info *from;
-	int sernum;
-	struct rt6key rt6i_dst;
-	struct rt6key rt6i_src;
-	struct in6_addr rt6i_gateway;
-	struct inet6_dev *rt6i_idev;
-	u32 rt6i_flags;
-	struct list_head rt6i_uncached;
-	struct uncached_list *rt6i_uncached_list;
-	short unsigned int rt6i_nfheader_len;
-};
-
-struct rt6_statistics {
-	__u32 fib_nodes;
-	__u32 fib_route_nodes;
-	__u32 fib_rt_entries;
-	__u32 fib_rt_cache;
-	__u32 fib_discarded_routes;
-	atomic_t fib_rt_alloc;
-	atomic_t fib_rt_uncache;
-};
-
-struct fib6_node {
-	struct fib6_node *parent;
-	struct fib6_node *left;
-	struct fib6_node *right;
-	struct fib6_node *subtree;
-	struct fib6_info *leaf;
-	__u16 fn_bit;
-	__u16 fn_flags;
-	int fn_sernum;
-	struct fib6_info *rr_ptr;
-	struct callback_head rcu;
-};
-
-struct fib6_table {
-	struct hlist_node tb6_hlist;
-	u32 tb6_id;
-	spinlock_t tb6_lock;
-	struct fib6_node tb6_root;
-	struct inet_peer_base tb6_peers;
-	unsigned int flags;
-	unsigned int fib_seq;
-};
-
-typedef union {
-	__be32 a4;
-	__be32 a6[4];
-	struct in6_addr in6;
-} xfrm_address_t;
-
-struct xfrm_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u8 proto;
-};
-
-struct xfrm_selector {
-	xfrm_address_t daddr;
-	xfrm_address_t saddr;
-	__be16 dport;
-	__be16 dport_mask;
-	__be16 sport;
-	__be16 sport_mask;
-	__u16 family;
-	__u8 prefixlen_d;
-	__u8 prefixlen_s;
-	__u8 proto;
-	int ifindex;
-	__kernel_uid32_t user;
-};
-
-struct xfrm_lifetime_cfg {
-	__u64 soft_byte_limit;
-	__u64 hard_byte_limit;
-	__u64 soft_packet_limit;
-	__u64 hard_packet_limit;
-	__u64 soft_add_expires_seconds;
-	__u64 hard_add_expires_seconds;
-	__u64 soft_use_expires_seconds;
-	__u64 hard_use_expires_seconds;
-};
-
-struct xfrm_lifetime_cur {
-	__u64 bytes;
-	__u64 packets;
-	__u64 add_time;
-	__u64 use_time;
-};
-
-struct xfrm_replay_state {
-	__u32 oseq;
-	__u32 seq;
-	__u32 bitmap;
-};
-
-struct xfrm_replay_state_esn {
-	unsigned int bmp_len;
-	__u32 oseq;
-	__u32 seq;
-	__u32 oseq_hi;
-	__u32 seq_hi;
-	__u32 replay_window;
-	__u32 bmp[0];
-};
-
-struct xfrm_algo {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_auth {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_trunc_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_aead {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_icv_len;
-	char alg_key[0];
-};
-
-struct xfrm_stats {
-	__u32 replay_window;
-	__u32 replay;
-	__u32 integrity_failed;
-};
-
-enum {
-	XFRM_POLICY_TYPE_MAIN = 0,
-	XFRM_POLICY_TYPE_SUB = 1,
-	XFRM_POLICY_TYPE_MAX = 2,
-	XFRM_POLICY_TYPE_ANY = 255,
-};
-
-struct xfrm_encap_tmpl {
-	__u16 encap_type;
-	__be16 encap_sport;
-	__be16 encap_dport;
-	xfrm_address_t encap_oa;
-};
-
-enum xfrm_attr_type_t {
-	XFRMA_UNSPEC = 0,
-	XFRMA_ALG_AUTH = 1,
-	XFRMA_ALG_CRYPT = 2,
-	XFRMA_ALG_COMP = 3,
-	XFRMA_ENCAP = 4,
-	XFRMA_TMPL = 5,
-	XFRMA_SA = 6,
-	XFRMA_POLICY = 7,
-	XFRMA_SEC_CTX = 8,
-	XFRMA_LTIME_VAL = 9,
-	XFRMA_REPLAY_VAL = 10,
-	XFRMA_REPLAY_THRESH = 11,
-	XFRMA_ETIMER_THRESH = 12,
-	XFRMA_SRCADDR = 13,
-	XFRMA_COADDR = 14,
-	XFRMA_LASTUSED = 15,
-	XFRMA_POLICY_TYPE = 16,
-	XFRMA_MIGRATE = 17,
-	XFRMA_ALG_AEAD = 18,
-	XFRMA_KMADDRESS = 19,
-	XFRMA_ALG_AUTH_TRUNC = 20,
-	XFRMA_MARK = 21,
-	XFRMA_TFCPAD = 22,
-	XFRMA_REPLAY_ESN_VAL = 23,
-	XFRMA_SA_EXTRA_FLAGS = 24,
-	XFRMA_PROTO = 25,
-	XFRMA_ADDRESS_FILTER = 26,
-	XFRMA_PAD = 27,
-	XFRMA_OFFLOAD_DEV = 28,
-	XFRMA_SET_MARK = 29,
-	XFRMA_SET_MARK_MASK = 30,
-	XFRMA_IF_ID = 31,
-	__XFRMA_MAX = 32,
-};
-
-struct xfrm_mark {
-	__u32 v;
-	__u32 m;
-};
-
-struct xfrm_address_filter {
-	xfrm_address_t saddr;
-	xfrm_address_t daddr;
-	__u16 family;
-	__u8 splen;
-	__u8 dplen;
-};
-
-struct xfrm_state_walk {
-	struct list_head all;
-	u8 state;
-	u8 dying;
-	u8 proto;
-	u32 seq;
-	struct xfrm_address_filter *filter;
-};
-
-struct xfrm_state_offload {
-	struct net_device *dev;
-	struct net_device *real_dev;
-	long unsigned int offload_handle;
-	unsigned int num_exthdrs;
-	u8 flags;
-};
-
-struct xfrm_mode {
-	u8 encap;
-	u8 family;
-	u8 flags;
-};
-
-struct xfrm_replay;
-
-struct xfrm_type;
-
-struct xfrm_type_offload;
-
-struct xfrm_state {
-	possible_net_t xs_net;
-	union {
-		struct hlist_node gclist;
-		struct hlist_node bydst;
-	};
-	struct hlist_node bysrc;
-	struct hlist_node byspi;
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct xfrm_id id;
-	struct xfrm_selector sel;
-	struct xfrm_mark mark;
-	u32 if_id;
-	u32 tfcpad;
-	u32 genid;
-	struct xfrm_state_walk km;
-	struct {
-		u32 reqid;
-		u8 mode;
-		u8 replay_window;
-		u8 aalgo;
-		u8 ealgo;
-		u8 calgo;
-		u8 flags;
-		u16 family;
-		xfrm_address_t saddr;
-		int header_len;
-		int trailer_len;
-		u32 extra_flags;
-		struct xfrm_mark smark;
-	} props;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_algo_auth *aalg;
-	struct xfrm_algo *ealg;
-	struct xfrm_algo *calg;
-	struct xfrm_algo_aead *aead;
-	const char *geniv;
-	struct xfrm_encap_tmpl *encap;
-	struct sock *encap_sk;
-	xfrm_address_t *coaddr;
-	struct xfrm_state *tunnel;
-	atomic_t tunnel_users;
-	struct xfrm_replay_state replay;
-	struct xfrm_replay_state_esn *replay_esn;
-	struct xfrm_replay_state preplay;
-	struct xfrm_replay_state_esn *preplay_esn;
-	const struct xfrm_replay *repl;
-	u32 xflags;
-	u32 replay_maxage;
-	u32 replay_maxdiff;
-	struct timer_list rtimer;
-	struct xfrm_stats stats;
-	struct xfrm_lifetime_cur curlft;
-	struct hrtimer mtimer;
-	struct xfrm_state_offload xso;
-	long int saved_tmo;
-	time64_t lastused;
-	struct page_frag xfrag;
-	const struct xfrm_type *type;
-	struct xfrm_mode inner_mode;
-	struct xfrm_mode inner_mode_iaf;
-	struct xfrm_mode outer_mode;
-	const struct xfrm_type_offload *type_offload;
-	struct xfrm_sec_ctx *security;
-	void *data;
-};
-
-struct dst_metrics {
-	u32 metrics[17];
-	refcount_t refcnt;
-};
-
-struct xfrm_policy_walk_entry {
-	struct list_head all;
-	u8 dead;
-};
-
-struct xfrm_policy_queue {
-	struct sk_buff_head hold_queue;
-	struct timer_list hold_timer;
-	long unsigned int timeout;
-};
-
-struct xfrm_tmpl {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	short unsigned int encap_family;
-	u32 reqid;
-	u8 mode;
-	u8 share;
-	u8 optional;
-	u8 allalgs;
-	u32 aalgos;
-	u32 ealgos;
-	u32 calgos;
-};
-
-struct xfrm_policy {
-	possible_net_t xp_net;
-	struct hlist_node bydst;
-	struct hlist_node byidx;
-	rwlock_t lock;
-	refcount_t refcnt;
-	u32 pos;
-	struct timer_list timer;
-	atomic_t genid;
-	u32 priority;
-	u32 index;
-	u32 if_id;
-	struct xfrm_mark mark;
-	struct xfrm_selector selector;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_policy_walk_entry walk;
-	struct xfrm_policy_queue polq;
-	bool bydst_reinsert;
-	u8 type;
-	u8 action;
-	u8 flags;
-	u8 xfrm_nr;
-	u16 family;
-	struct xfrm_sec_ctx *security;
-	struct xfrm_tmpl xfrm_vec[6];
-	struct hlist_node bydst_inexact_list;
-	struct callback_head rcu;
-};
-
-struct udp_hslot;
-
-struct udp_table {
-	struct udp_hslot *hash;
-	struct udp_hslot *hash2;
-	unsigned int mask;
-	unsigned int log;
-};
-
-struct fib_nh_exception {
-	struct fib_nh_exception *fnhe_next;
-	int fnhe_genid;
-	__be32 fnhe_daddr;
-	u32 fnhe_pmtu;
-	bool fnhe_mtu_locked;
-	__be32 fnhe_gw;
-	long unsigned int fnhe_expires;
-	struct rtable *fnhe_rth_input;
-	struct rtable *fnhe_rth_output;
-	long unsigned int fnhe_stamp;
-	struct callback_head rcu;
-};
-
-struct rtable {
-	struct dst_entry dst;
-	int rt_genid;
-	unsigned int rt_flags;
-	__u16 rt_type;
-	__u8 rt_is_input;
-	__u8 rt_uses_gateway;
-	int rt_iif;
-	u8 rt_gw_family;
-	union {
-		__be32 rt_gw4;
-		struct in6_addr rt_gw6;
-	};
-	u32 rt_mtu_locked: 1;
-	u32 rt_pmtu: 31;
-	struct list_head rt_uncached;
-	struct uncached_list *rt_uncached_list;
-};
-
-struct fnhe_hash_bucket {
-	struct fib_nh_exception *chain;
-};
-
-struct rt6_exception_bucket {
-	struct hlist_head chain;
-	int depth;
-};
-
-struct xfrm_replay {
-	void (*advance)(struct xfrm_state *, __be32);
-	int (*check)(struct xfrm_state *, struct sk_buff *, __be32);
-	int (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);
-	void (*notify)(struct xfrm_state *, int);
-	int (*overflow)(struct xfrm_state *, struct sk_buff *);
-};
-
-struct xfrm_type {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	u8 flags;
-	int (*init_state)(struct xfrm_state *);
-	void (*destructor)(struct xfrm_state *);
-	int (*input)(struct xfrm_state *, struct sk_buff *);
-	int (*output)(struct xfrm_state *, struct sk_buff *);
-	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
-	int (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);
-};
-
-struct xfrm_type_offload {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	void (*encap)(struct xfrm_state *, struct sk_buff *);
-	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
-	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
-};
-
-struct xfrm_dst {
-	union {
-		struct dst_entry dst;
-		struct rtable rt;
-		struct rt6_info rt6;
-	} u;
-	struct dst_entry *route;
-	struct dst_entry *child;
-	struct dst_entry *path;
-	struct xfrm_policy *pols[2];
-	int num_pols;
-	int num_xfrms;
-	u32 xfrm_genid;
-	u32 policy_genid;
-	u32 route_mtu_cached;
-	u32 child_mtu_cached;
-	u32 route_cookie;
-	u32 path_cookie;
-};
-
-struct xfrm_offload {
-	struct {
-		__u32 low;
-		__u32 hi;
-	} seq;
-	__u32 flags;
-	__u32 status;
-	__u8 proto;
-};
-
-struct sec_path {
-	int len;
-	int olen;
-	struct xfrm_state *xvec[6];
-	struct xfrm_offload ovec[1];
-};
-
-struct udp_hslot {
-	struct hlist_head head;
-	int count;
-	spinlock_t lock;
-};
-
-struct smack_audit_data {
-	const char *function;
-	char *subject;
-	char *object;
-	char *request;
-	int result;
-};
-
-struct smack_known {
-	struct list_head list;
-	struct hlist_node smk_hashed;
-	char *smk_known;
-	u32 smk_secid;
-	struct netlbl_lsm_secattr smk_netlabel;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-};
-
-struct superblock_smack {
-	struct smack_known *smk_root;
-	struct smack_known *smk_floor;
-	struct smack_known *smk_hat;
-	struct smack_known *smk_default;
-	int smk_flags;
-};
-
-struct socket_smack {
-	struct smack_known *smk_out;
-	struct smack_known *smk_in;
-	struct smack_known *smk_packet;
-	int smk_state;
-};
-
-struct inode_smack {
-	struct smack_known *smk_inode;
-	struct smack_known *smk_task;
-	struct smack_known *smk_mmap;
-	int smk_flags;
-};
-
-struct task_smack {
-	struct smack_known *smk_task;
-	struct smack_known *smk_forked;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-	struct list_head smk_relabel;
-};
-
-struct smack_rule {
-	struct list_head list;
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access;
-};
-
-struct smk_net4addr {
-	struct list_head list;
-	struct in_addr smk_host;
-	struct in_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smk_net6addr {
-	struct list_head list;
-	struct in6_addr smk_host;
-	struct in6_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smack_known_list_elem {
-	struct list_head list;
-	struct smack_known *smk_label;
-};
-
-enum {
-	Opt_error___3 = 4294967295,
-	Opt_fsdefault = 0,
-	Opt_fsfloor = 1,
-	Opt_fshat = 2,
-	Opt_fsroot = 3,
-	Opt_fstransmute = 4,
-};
-
-struct smk_audit_info {
-	struct common_audit_data a;
-	struct smack_audit_data sad;
-};
-
-struct smack_mnt_opts {
-	const char *fsdefault;
-	const char *fsfloor;
-	const char *fshat;
-	const char *fsroot;
-	const char *fstransmute;
-};
-
-struct netlbl_audit {
-	u32 secid;
-	kuid_t loginuid;
-	unsigned int sessionid;
-};
-
-struct cipso_v4_std_map_tbl {
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} lvl;
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} cat;
-};
-
-struct cipso_v4_doi {
-	u32 doi;
-	u32 type;
-	union {
-		struct cipso_v4_std_map_tbl *std;
-	} map;
-	u8 tags[5];
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-enum smk_inos {
-	SMK_ROOT_INO = 2,
-	SMK_LOAD = 3,
-	SMK_CIPSO = 4,
-	SMK_DOI = 5,
-	SMK_DIRECT = 6,
-	SMK_AMBIENT = 7,
-	SMK_NET4ADDR = 8,
-	SMK_ONLYCAP = 9,
-	SMK_LOGGING = 10,
-	SMK_LOAD_SELF = 11,
-	SMK_ACCESSES = 12,
-	SMK_MAPPED = 13,
-	SMK_LOAD2 = 14,
-	SMK_LOAD_SELF2 = 15,
-	SMK_ACCESS2 = 16,
-	SMK_CIPSO2 = 17,
-	SMK_REVOKE_SUBJ = 18,
-	SMK_CHANGE_RULE = 19,
-	SMK_SYSLOG = 20,
-	SMK_PTRACE = 21,
-	SMK_NET6ADDR = 23,
-	SMK_RELABEL_SELF = 24,
-};
-
-struct smack_parsed_rule {
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access1;
-	int smk_access2;
-};
-
-struct sockaddr_un {
-	__kernel_sa_family_t sun_family;
-	char sun_path[108];
-};
-
-struct unix_address {
-	refcount_t refcnt;
-	int len;
-	unsigned int hash;
-	struct sockaddr_un name[0];
-};
-
-struct scm_stat {
-	atomic_t nr_fds;
-};
-
-struct unix_sock {
-	struct sock sk;
-	struct unix_address *addr;
-	struct path path;
-	struct mutex iolock;
-	struct mutex bindlock;
-	struct sock *peer;
-	struct list_head link;
-	atomic_long_t inflight;
-	spinlock_t lock;
-	long unsigned int gc_flags;
-	struct socket_wq peer_wq;
-	wait_queue_entry_t peer_wake;
-	struct scm_stat scm_stat;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef unsigned char Byte;
-
-typedef long unsigned int uLong;
-
-struct internal_state;
-
-struct z_stream_s {
-	const Byte *next_in;
-	uLong avail_in;
-	uLong total_in;
-	Byte *next_out;
-	uLong avail_out;
-	uLong total_out;
-	char *msg;
-	struct internal_state *state;
-	void *workspace;
-	int data_type;
-	uLong adler;
-	uLong reserved;
-};
-
-struct internal_state {
-	int dummy;
-};
-
-enum audit_mode {
-	AUDIT_NORMAL = 0,
-	AUDIT_QUIET_DENIED = 1,
-	AUDIT_QUIET = 2,
-	AUDIT_NOQUIET = 3,
-	AUDIT_ALL = 4,
-};
-
-enum aa_sfs_type {
-	AA_SFS_TYPE_BOOLEAN = 0,
-	AA_SFS_TYPE_STRING = 1,
-	AA_SFS_TYPE_U64 = 2,
-	AA_SFS_TYPE_FOPS = 3,
-	AA_SFS_TYPE_DIR = 4,
-};
-
-struct aa_sfs_entry {
-	const char *name;
-	struct dentry *dentry;
-	umode_t mode;
-	enum aa_sfs_type v_type;
-	union {
-		bool boolean;
-		char *string;
-		long unsigned int u64;
-		struct aa_sfs_entry *files;
-	} v;
-	const struct file_operations *file_ops;
-};
-
-enum aafs_ns_type {
-	AAFS_NS_DIR = 0,
-	AAFS_NS_PROFS = 1,
-	AAFS_NS_NS = 2,
-	AAFS_NS_RAW_DATA = 3,
-	AAFS_NS_LOAD = 4,
-	AAFS_NS_REPLACE = 5,
-	AAFS_NS_REMOVE = 6,
-	AAFS_NS_REVISION = 7,
-	AAFS_NS_COUNT = 8,
-	AAFS_NS_MAX_COUNT = 9,
-	AAFS_NS_SIZE = 10,
-	AAFS_NS_MAX_SIZE = 11,
-	AAFS_NS_OWNER = 12,
-	AAFS_NS_SIZEOF = 13,
-};
-
-enum aafs_prof_type {
-	AAFS_PROF_DIR = 0,
-	AAFS_PROF_PROFS = 1,
-	AAFS_PROF_NAME = 2,
-	AAFS_PROF_MODE = 3,
-	AAFS_PROF_ATTACH = 4,
-	AAFS_PROF_HASH = 5,
-	AAFS_PROF_RAW_DATA = 6,
-	AAFS_PROF_RAW_HASH = 7,
-	AAFS_PROF_RAW_ABI = 8,
-	AAFS_PROF_SIZEOF = 9,
-};
-
-struct table_header {
-	u16 td_id;
-	u16 td_flags;
-	u32 td_hilen;
-	u32 td_lolen;
-	char td_data[0];
-};
-
-struct aa_dfa {
-	struct kref count;
-	u16 flags;
-	u32 max_oob;
-	struct table_header *tables[8];
-};
-
-struct aa_policy {
-	const char *name;
-	char *hname;
-	struct list_head list;
-	struct list_head profiles;
-};
-
-struct aa_labelset {
-	rwlock_t lock;
-	struct rb_root root;
-};
-
-enum label_flags {
-	FLAG_HAT = 1,
-	FLAG_UNCONFINED = 2,
-	FLAG_NULL = 4,
-	FLAG_IX_ON_NAME_ERROR = 8,
-	FLAG_IMMUTIBLE = 16,
-	FLAG_USER_DEFINED = 32,
-	FLAG_NO_LIST_REF = 64,
-	FLAG_NS_COUNT = 128,
-	FLAG_IN_TREE = 256,
-	FLAG_PROFILE = 512,
-	FLAG_EXPLICIT = 1024,
-	FLAG_STALE = 2048,
-	FLAG_RENAMED = 4096,
-	FLAG_REVOKED = 8192,
-};
-
-struct aa_label;
-
-struct aa_proxy {
-	struct kref count;
-	struct aa_label *label;
-};
-
-struct aa_profile;
-
-struct aa_label {
-	struct kref count;
-	struct rb_node node;
-	struct callback_head rcu;
-	struct aa_proxy *proxy;
-	char *hname;
-	long int flags;
-	u32 secid;
-	int size;
-	struct aa_profile *vec[0];
-};
-
-struct label_it {
-	int i;
-	int j;
-};
-
-struct aa_policydb {
-	struct aa_dfa *dfa;
-	unsigned int start[17];
-};
-
-struct aa_domain {
-	int size;
-	char **table;
-};
-
-struct aa_file_rules {
-	unsigned int start;
-	struct aa_dfa *dfa;
-	struct aa_domain trans;
-};
-
-struct aa_caps {
-	kernel_cap_t allow;
-	kernel_cap_t audit;
-	kernel_cap_t denied;
-	kernel_cap_t quiet;
-	kernel_cap_t kill;
-	kernel_cap_t extended;
-};
-
-struct aa_rlimit {
-	unsigned int mask;
-	struct rlimit limits[16];
-};
-
-struct aa_ns;
-
-struct aa_secmark;
-
-struct aa_loaddata;
-
-struct aa_profile {
-	struct aa_policy base;
-	struct aa_profile *parent;
-	struct aa_ns *ns;
-	const char *rename;
-	const char *attach;
-	struct aa_dfa *xmatch;
-	int xmatch_len;
-	enum audit_mode audit;
-	long int mode;
-	u32 path_flags;
-	const char *disconnected;
-	int size;
-	struct aa_policydb policy;
-	struct aa_file_rules file;
-	struct aa_caps caps;
-	int xattr_count;
-	char **xattrs;
-	struct aa_rlimit rlimits;
-	int secmark_count;
-	struct aa_secmark *secmark;
-	struct aa_loaddata *rawdata;
-	unsigned char *hash;
-	char *dirname;
-	struct dentry *dents[9];
-	struct rhashtable *data;
-	struct aa_label label;
-};
-
-struct aa_perms {
-	u32 allow;
-	u32 audit;
-	u32 deny;
-	u32 quiet;
-	u32 kill;
-	u32 stop;
-	u32 complain;
-	u32 cond;
-	u32 hide;
-	u32 prompt;
-	u16 xindex;
-};
-
-struct path_cond {
-	kuid_t uid;
-	umode_t mode;
-};
-
-struct aa_secmark {
-	u8 audit;
-	u8 deny;
-	u32 secid;
-	char *label;
-};
-
-enum profile_mode {
-	APPARMOR_ENFORCE = 0,
-	APPARMOR_COMPLAIN = 1,
-	APPARMOR_KILL = 2,
-	APPARMOR_UNCONFINED = 3,
-};
-
-struct aa_data {
-	char *key;
-	u32 size;
-	char *data;
-	struct rhash_head head;
-};
-
-struct aa_ns_acct {
-	int max_size;
-	int max_count;
-	int size;
-	int count;
-};
-
-struct aa_ns {
-	struct aa_policy base;
-	struct aa_ns *parent;
-	struct mutex lock;
-	struct aa_ns_acct acct;
-	struct aa_profile *unconfined;
-	struct list_head sub_ns;
-	atomic_t uniq_null;
-	long int uniq_id;
-	int level;
-	long int revision;
-	wait_queue_head_t wait;
-	struct aa_labelset labels;
-	struct list_head rawdata_list;
-	struct dentry *dents[13];
-};
-
-struct aa_loaddata {
-	struct kref count;
-	struct list_head list;
-	struct work_struct work;
-	struct dentry *dents[6];
-	struct aa_ns *ns;
-	char *name;
-	size_t size;
-	size_t compressed_size;
-	long int revision;
-	int abi;
-	unsigned char *hash;
-	char *data;
-};
-
-enum {
-	AAFS_LOADDATA_ABI = 0,
-	AAFS_LOADDATA_REVISION = 1,
-	AAFS_LOADDATA_HASH = 2,
-	AAFS_LOADDATA_DATA = 3,
-	AAFS_LOADDATA_COMPRESSED_SIZE = 4,
-	AAFS_LOADDATA_DIR = 5,
-	AAFS_LOADDATA_NDENTS = 6,
-};
-
-struct rawdata_f_data {
-	struct aa_loaddata *loaddata;
-};
-
-struct aa_revision {
-	struct aa_ns *ns;
-	long int last_read;
-};
-
-struct multi_transaction {
-	struct kref count;
-	ssize_t size;
-	char data[0];
-};
-
-struct apparmor_audit_data {
-	int error;
-	int type;
-	const char *op;
-	struct aa_label *label;
-	const char *name;
-	const char *info;
-	u32 request;
-	u32 denied;
-	union {
-		struct {
-			struct aa_label *peer;
-			union {
-				struct {
-					const char *target;
-					kuid_t ouid;
-				} fs;
-				struct {
-					int rlim;
-					long unsigned int max;
-				} rlim;
-				struct {
-					int signal;
-					int unmappedsig;
-				};
-				struct {
-					int type;
-					int protocol;
-					struct sock *peer_sk;
-					void *addr;
-					int addrlen;
-				} net;
-			};
-		};
-		struct {
-			struct aa_profile *profile;
-			const char *ns;
-			long int pos;
-		} iface;
-		struct {
-			const char *src_name;
-			const char *type;
-			const char *trans;
-			const char *data;
-			long unsigned int flags;
-		} mnt;
-	};
-};
-
-enum audit_type {
-	AUDIT_APPARMOR_AUDIT = 0,
-	AUDIT_APPARMOR_ALLOWED = 1,
-	AUDIT_APPARMOR_DENIED = 2,
-	AUDIT_APPARMOR_HINT = 3,
-	AUDIT_APPARMOR_STATUS = 4,
-	AUDIT_APPARMOR_ERROR = 5,
-	AUDIT_APPARMOR_KILL = 6,
-	AUDIT_APPARMOR_AUTO = 7,
-};
-
-struct aa_audit_rule {
-	struct aa_label *label;
-};
-
-struct audit_cache {
-	struct aa_profile *profile;
-	kernel_cap_t caps;
-};
-
-struct aa_task_ctx {
-	struct aa_label *nnp;
-	struct aa_label *onexec;
-	struct aa_label *previous;
-	u64 token;
-};
-
-struct counted_str {
-	struct kref count;
-	char name[0];
-};
-
-struct match_workbuf {
-	unsigned int count;
-	unsigned int pos;
-	unsigned int len;
-	unsigned int size;
-	unsigned int history[24];
-};
-
-enum path_flags {
-	PATH_IS_DIR = 1,
-	PATH_CONNECT_PATH = 4,
-	PATH_CHROOT_REL = 8,
-	PATH_CHROOT_NSCONNECT = 16,
-	PATH_DELEGATE_DELETED = 32768,
-	PATH_MEDIATE_DELETED = 65536,
-};
-
-struct aa_load_ent {
-	struct list_head list;
-	struct aa_profile *new;
-	struct aa_profile *old;
-	struct aa_profile *rename;
-	const char *ns_name;
-};
-
-enum aa_code {
-	AA_U8 = 0,
-	AA_U16 = 1,
-	AA_U32 = 2,
-	AA_U64 = 3,
-	AA_NAME = 4,
-	AA_STRING = 5,
-	AA_BLOB = 6,
-	AA_STRUCT = 7,
-	AA_STRUCTEND = 8,
-	AA_LIST = 9,
-	AA_LISTEND = 10,
-	AA_ARRAY = 11,
-	AA_ARRAYEND = 12,
-};
-
-struct aa_ext {
-	void *start;
-	void *end;
-	void *pos;
-	u32 version;
-};
-
-struct aa_file_ctx {
-	spinlock_t lock;
-	struct aa_label *label;
-	u32 allow;
-};
-
-struct aa_sk_ctx {
-	struct aa_label *label;
-	struct aa_label *peer;
-};
-
-union aa_buffer {
-	struct list_head list;
-	char buffer[1];
-};
-
-struct ptrace_relation {
-	struct task_struct *tracer;
-	struct task_struct *tracee;
-	bool invalid;
-	struct list_head node;
-	struct callback_head rcu;
-};
-
-struct access_report_info {
-	struct callback_head work;
-	const char *access;
-	struct task_struct *target;
-	struct task_struct *agent;
-};
-
-enum sid_policy_type {
-	SIDPOL_DEFAULT = 0,
-	SIDPOL_CONSTRAINED = 1,
-	SIDPOL_ALLOWED = 2,
-};
-
-typedef union {
-	kuid_t uid;
-	kgid_t gid;
-} kid_t;
-
-enum setid_type {
-	UID = 0,
-	GID = 1,
-};
-
-struct setid_rule {
-	struct hlist_node next;
-	kid_t src_id;
-	kid_t dst_id;
-	enum setid_type type;
-};
-
-struct setid_ruleset {
-	struct hlist_head rules[256];
-	char *policy_str;
-	struct callback_head rcu;
-	enum setid_type type;
-};
-
-enum devcg_behavior {
-	DEVCG_DEFAULT_NONE = 0,
-	DEVCG_DEFAULT_ALLOW = 1,
-	DEVCG_DEFAULT_DENY = 2,
-};
-
-struct dev_exception_item {
-	u32 major;
-	u32 minor;
-	short int type;
-	short int access;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct dev_cgroup {
-	struct cgroup_subsys_state css;
-	struct list_head exceptions;
-	enum devcg_behavior behavior;
-};
-
-struct altha_list_struct {
-	struct path path;
-	char *spath;
-	char *spath_p;
-	struct list_head list;
-};
-
-struct kiosk_list_struct {
-	struct path path;
-	struct list_head list;
-};
-
-enum kiosk_cmd {
-	KIOSK_UNSPEC = 0,
-	KIOSK_REQUEST = 1,
-	KIOSK_REPLY = 2,
-	KIOSK_CMD_LAST = 3,
-};
-
-enum kiosk_mode {
-	KIOSK_PERMISSIVE = 0,
-	KIOSK_NONSYSTEM = 1,
-	KIOSK_MODE_LAST = 2,
-};
-
-enum kiosk_action {
-	KIOSK_SET_MODE = 0,
-	KIOSK_USERLIST_ADD = 1,
-	KIOSK_USERLIST_DEL = 2,
-	KIOSK_USER_LIST = 3,
-};
-
-enum kiosk_attrs {
-	KIOSK_NOATTR = 0,
-	KIOSK_ACTION = 1,
-	KIOSK_DATA = 2,
-	KIOSK_MAX_ATTR = 3,
-};
-
-enum integrity_status {
-	INTEGRITY_PASS = 0,
-	INTEGRITY_PASS_IMMUTABLE = 1,
-	INTEGRITY_FAIL = 2,
-	INTEGRITY_NOLABEL = 3,
-	INTEGRITY_NOXATTRS = 4,
-	INTEGRITY_UNKNOWN = 5,
-};
-
-struct ima_digest_data {
-	u8 algo;
-	u8 length;
-	union {
-		struct {
-			u8 unused;
-			u8 type;
-		} sha1;
-		struct {
-			u8 type;
-			u8 algo;
-		} ng;
-		u8 data[2];
-	} xattr;
-	u8 digest[0];
-};
-
-struct integrity_iint_cache {
-	struct rb_node rb_node;
-	struct mutex mutex;
-	struct inode *inode;
-	u64 version;
-	long unsigned int flags;
-	long unsigned int measured_pcrs;
-	long unsigned int atomic_flags;
-	enum integrity_status ima_file_status: 4;
-	enum integrity_status ima_mmap_status: 4;
-	enum integrity_status ima_bprm_status: 4;
-	enum integrity_status ima_read_status: 4;
-	enum integrity_status ima_creds_status: 4;
-	enum integrity_status evm_status: 4;
-	struct ima_digest_data *ima_hash;
-};
-
-struct modsig;
-
-struct asymmetric_key_id;
-
-struct public_key_signature {
-	struct asymmetric_key_id *auth_ids[2];
-	u8 *s;
-	u32 s_size;
-	u8 *digest;
-	u8 digest_size;
-	const char *pkey_algo;
-	const char *hash_algo;
-	const char *encoding;
-	const void *data;
-	unsigned int data_size;
-};
-
-struct asymmetric_key_id {
-	short unsigned int len;
-	unsigned char data[0];
-};
+struct landlock_path_beneath_attr {
+	__u64 allowed_access;
+	__s32 parent_fd;
+} __attribute__((packed));
 
 struct signature_v2_hdr {
 	uint8_t type;
@@ -50832,750 +93292,22 @@
 	uint8_t sig[0];
 } __attribute__((packed));
 
-struct tpm_digest {
-	u16 alg_id;
-	u8 digest[64];
-};
-
-struct evm_ima_xattr_data {
-	u8 type;
+struct efi_mokvar_table_entry {
+	char name[256];
+	u64 data_size;
 	u8 data[0];
 };
 
-enum ima_show_type {
-	IMA_SHOW_BINARY = 0,
-	IMA_SHOW_BINARY_NO_FIELD_LEN = 1,
-	IMA_SHOW_BINARY_OLD_STRING_FMT = 2,
-	IMA_SHOW_ASCII = 3,
-};
+typedef void (*efi_element_handler_t)(const char *, const void *, size_t);
 
-struct ima_event_data {
-	struct integrity_iint_cache *iint;
-	struct file *file;
-	const unsigned char *filename;
-	struct evm_ima_xattr_data *xattr_value;
-	int xattr_len;
-	const struct modsig *modsig;
-	const char *violation;
-	const void *buf;
-	int buf_len;
+struct crypto_engine_op {
+	int (*prepare_request)(struct crypto_engine *, void *);
+	int (*unprepare_request)(struct crypto_engine *, void *);
+	int (*do_one_request)(struct crypto_engine *, void *);
 };
 
-struct ima_field_data {
-	u8 *data;
-	u32 len;
-};
-
-struct ima_template_field {
-	const char field_id[16];
-	int (*field_init)(struct ima_event_data *, struct ima_field_data *);
-	void (*field_show)(struct seq_file *, enum ima_show_type, struct ima_field_data *);
-};
-
-struct ima_template_desc {
-	struct list_head list;
-	char *name;
-	char *fmt;
-	int num_fields;
-	const struct ima_template_field **fields;
-};
-
-struct ima_template_entry {
-	int pcr;
-	struct tpm_digest *digests;
-	struct ima_template_desc *template_desc;
-	u32 template_data_len;
-	struct ima_field_data template_data[0];
-};
-
-struct ima_queue_entry {
-	struct hlist_node hnext;
-	struct list_head later;
-	struct ima_template_entry *entry;
-};
-
-struct ima_h_table {
-	atomic_long_t len;
-	atomic_long_t violations;
-	struct hlist_head queue[1024];
-};
-
-enum ima_fs_flags {
-	IMA_FS_BUSY = 0,
-};
-
-struct hwrng {
-	const char *name;
-	int (*init)(struct hwrng *);
-	void (*cleanup)(struct hwrng *);
-	int (*data_present)(struct hwrng *, int);
-	int (*data_read)(struct hwrng *, u32 *);
-	int (*read)(struct hwrng *, void *, size_t, bool);
-	long unsigned int priv;
-	short unsigned int quality;
-	struct list_head list;
-	struct kref ref;
-	struct completion cleanup_done;
-};
-
-struct tpm_bank_info {
-	u16 alg_id;
-	u16 digest_size;
-	u16 crypto_id;
-};
-
-struct tpm_chip;
-
-struct tpm_class_ops {
-	unsigned int flags;
-	const u8 req_complete_mask;
-	const u8 req_complete_val;
-	bool (*req_canceled)(struct tpm_chip *, u8);
-	int (*recv)(struct tpm_chip *, u8 *, size_t);
-	int (*send)(struct tpm_chip *, u8 *, size_t);
-	void (*cancel)(struct tpm_chip *);
-	u8 (*status)(struct tpm_chip *);
-	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
-	void (*update_durations)(struct tpm_chip *, long unsigned int *);
-	int (*go_idle)(struct tpm_chip *);
-	int (*cmd_ready)(struct tpm_chip *);
-	int (*request_locality)(struct tpm_chip *, int);
-	int (*relinquish_locality)(struct tpm_chip *, int);
-	void (*clk_enable)(struct tpm_chip *, bool);
-};
-
-struct tpm_bios_log {
-	void *bios_event_log;
-	void *bios_event_log_end;
-};
-
-struct tpm_chip_seqops {
-	struct tpm_chip *chip;
-	const struct seq_operations *seqops;
-};
-
-struct tpm_space {
-	u32 context_tbl[3];
-	u8 *context_buf;
-	u32 session_tbl[3];
-	u8 *session_buf;
-	u32 buf_size;
-};
-
-struct tpm_chip {
-	struct device dev;
-	struct device devs;
-	struct cdev cdev;
-	struct cdev cdevs;
-	struct rw_semaphore ops_sem;
-	const struct tpm_class_ops *ops;
-	struct tpm_bios_log log;
-	struct tpm_chip_seqops bin_log_seqops;
-	struct tpm_chip_seqops ascii_log_seqops;
-	unsigned int flags;
-	int dev_num;
-	long unsigned int is_open;
-	char hwrng_name[64];
-	struct hwrng hwrng;
-	struct mutex tpm_mutex;
-	long unsigned int timeout_a;
-	long unsigned int timeout_b;
-	long unsigned int timeout_c;
-	long unsigned int timeout_d;
-	bool timeout_adjusted;
-	long unsigned int duration[4];
-	bool duration_adjusted;
-	struct dentry *bios_dir[3];
-	const struct attribute_group *groups[3];
-	unsigned int groups_cnt;
-	u32 nr_allocated_banks;
-	struct tpm_bank_info *allocated_banks;
-	acpi_handle acpi_dev_handle;
-	char ppi_version[4];
-	struct tpm_space work_space;
-	u32 last_cc;
-	u32 nr_commands;
-	u32 *cc_attrs_tbl;
-	int locality;
-};
-
-enum evm_ima_xattr_type {
-	IMA_XATTR_DIGEST = 1,
-	EVM_XATTR_HMAC = 2,
-	EVM_IMA_XATTR_DIGSIG = 3,
-	IMA_XATTR_DIGEST_NG = 4,
-	EVM_XATTR_PORTABLE_DIGSIG = 5,
-	IMA_XATTR_LAST = 6,
-};
-
-enum ima_hooks {
-	NONE = 0,
-	FILE_CHECK = 1,
-	MMAP_CHECK = 2,
-	BPRM_CHECK = 3,
-	CREDS_CHECK = 4,
-	POST_SETATTR = 5,
-	MODULE_CHECK = 6,
-	FIRMWARE_CHECK = 7,
-	KEXEC_KERNEL_CHECK = 8,
-	KEXEC_INITRAMFS_CHECK = 9,
-	POLICY_CHECK = 10,
-	KEXEC_CMDLINE = 11,
-	KEY_CHECK = 12,
-	MAX_CHECK = 13,
-};
-
-enum tpm_algorithms {
-	TPM_ALG_ERROR = 0,
-	TPM_ALG_SHA1 = 4,
-	TPM_ALG_KEYEDHASH = 8,
-	TPM_ALG_SHA256 = 11,
-	TPM_ALG_SHA384 = 12,
-	TPM_ALG_SHA512 = 13,
-	TPM_ALG_NULL = 16,
-	TPM_ALG_SM3_256 = 18,
-};
-
-enum tpm_pcrs {
-	TPM_PCR0 = 0,
-	TPM_PCR8 = 8,
-	TPM_PCR10 = 10,
-};
-
-struct ima_algo_desc {
-	struct crypto_shash *tfm;
-	enum hash_algo algo;
-};
-
-enum lsm_rule_types {
-	LSM_OBJ_USER = 0,
-	LSM_OBJ_ROLE = 1,
-	LSM_OBJ_TYPE = 2,
-	LSM_SUBJ_USER = 3,
-	LSM_SUBJ_ROLE = 4,
-	LSM_SUBJ_TYPE = 5,
-};
-
-enum policy_types {
-	ORIGINAL_TCB = 1,
-	DEFAULT_TCB = 2,
-};
-
-enum policy_rule_list {
-	IMA_DEFAULT_POLICY = 1,
-	IMA_CUSTOM_POLICY = 2,
-};
-
-struct ima_rule_opt_list {
-	size_t count;
-	char *items[0];
-};
-
-struct ima_rule_entry {
-	struct list_head list;
-	int action;
-	unsigned int flags;
-	enum ima_hooks func;
-	int mask;
-	long unsigned int fsmagic;
-	uuid_t fsuuid;
-	kuid_t uid;
-	kuid_t fowner;
-	bool (*uid_op)(kuid_t, kuid_t);
-	bool (*fowner_op)(kuid_t, kuid_t);
-	int pcr;
-	struct {
-		void *rule;
-		char *args_p;
-		int type;
-	} lsm[6];
-	char *fsname;
-	struct ima_rule_opt_list *keyrings;
-	struct ima_template_desc *template;
-};
-
-enum {
-	Opt_measure = 0,
-	Opt_dont_measure = 1,
-	Opt_appraise = 2,
-	Opt_dont_appraise = 3,
-	Opt_audit = 4,
-	Opt_hash___2 = 5,
-	Opt_dont_hash = 6,
-	Opt_obj_user = 7,
-	Opt_obj_role = 8,
-	Opt_obj_type = 9,
-	Opt_subj_user = 10,
-	Opt_subj_role = 11,
-	Opt_subj_type = 12,
-	Opt_func = 13,
-	Opt_mask = 14,
-	Opt_fsmagic = 15,
-	Opt_fsname = 16,
-	Opt_fsuuid = 17,
-	Opt_uid_eq = 18,
-	Opt_euid_eq = 19,
-	Opt_fowner_eq = 20,
-	Opt_uid_gt = 21,
-	Opt_euid_gt = 22,
-	Opt_fowner_gt = 23,
-	Opt_uid_lt = 24,
-	Opt_euid_lt = 25,
-	Opt_fowner_lt = 26,
-	Opt_appraise_type = 27,
-	Opt_appraise_flag = 28,
-	Opt_permit_directio = 29,
-	Opt_pcr = 30,
-	Opt_template = 31,
-	Opt_keyrings = 32,
-	Opt_err___7 = 33,
-};
-
-enum {
-	mask_exec = 0,
-	mask_write = 1,
-	mask_read = 2,
-	mask_append = 3,
-};
-
-struct ima_kexec_hdr {
-	u16 version;
-	u16 _reserved0;
-	u32 _reserved1;
-	u64 buffer_size;
-	u64 count;
-};
-
-enum header_fields {
-	HDR_PCR = 0,
-	HDR_DIGEST = 1,
-	HDR_TEMPLATE_NAME = 2,
-	HDR_TEMPLATE_DATA = 3,
-	HDR__LAST = 4,
-};
-
-enum data_formats {
-	DATA_FMT_DIGEST = 0,
-	DATA_FMT_DIGEST_WITH_ALGO = 1,
-	DATA_FMT_STRING = 2,
-	DATA_FMT_HEX = 3,
-};
-
-struct ima_key_entry {
-	struct list_head list;
-	void *payload;
-	size_t payload_len;
-	char *keyring_name;
-};
-
-struct evm_xattr {
-	struct evm_ima_xattr_data data;
-	u8 digest[20];
-};
-
-struct xattr_list {
-	struct list_head list;
-	char *name;
-};
-
-struct evm_digest {
-	struct ima_digest_data hdr;
-	char digest[64];
-};
-
-struct h_misc {
-	long unsigned int ino;
-	__u32 generation;
-	uid_t uid;
-	gid_t gid;
-	umode_t mode;
-};
-
-enum {
-	CRYPTO_MSG_ALG_REQUEST = 0,
-	CRYPTO_MSG_ALG_REGISTER = 1,
-	CRYPTO_MSG_ALG_LOADED = 2,
-};
-
-struct crypto_larval {
-	struct crypto_alg alg;
-	struct crypto_alg *adult;
-	struct completion completion;
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct crypto_cipher {
-	struct crypto_tfm base;
-};
-
-enum {
-	CRYPTOA_UNSPEC = 0,
-	CRYPTOA_ALG = 1,
-	CRYPTOA_TYPE = 2,
-	CRYPTOA_U32 = 3,
-	__CRYPTOA_MAX = 4,
-};
-
-struct crypto_attr_alg {
-	char name[128];
-};
-
-struct crypto_attr_type {
-	u32 type;
-	u32 mask;
-};
-
-struct crypto_attr_u32 {
-	u32 num;
-};
-
-struct rtattr {
-	short unsigned int rta_len;
-	short unsigned int rta_type;
-};
-
-struct crypto_queue {
-	struct list_head list;
-	struct list_head *backlog;
-	unsigned int qlen;
-	unsigned int max_qlen;
-};
-
-enum {
-	NAPI_STATE_SCHED = 0,
-	NAPI_STATE_MISSED = 1,
-	NAPI_STATE_DISABLE = 2,
-	NAPI_STATE_NPSVC = 3,
-	NAPI_STATE_LISTED = 4,
-	NAPI_STATE_NO_BUSY_POLL = 5,
-	NAPI_STATE_IN_BUSY_POLL = 6,
-};
-
-enum bpf_xdp_mode {
-	XDP_MODE_SKB = 0,
-	XDP_MODE_DRV = 1,
-	XDP_MODE_HW = 2,
-	__MAX_XDP_MODE = 3,
-};
-
-enum {
-	NETIF_MSG_DRV_BIT = 0,
-	NETIF_MSG_PROBE_BIT = 1,
-	NETIF_MSG_LINK_BIT = 2,
-	NETIF_MSG_TIMER_BIT = 3,
-	NETIF_MSG_IFDOWN_BIT = 4,
-	NETIF_MSG_IFUP_BIT = 5,
-	NETIF_MSG_RX_ERR_BIT = 6,
-	NETIF_MSG_TX_ERR_BIT = 7,
-	NETIF_MSG_TX_QUEUED_BIT = 8,
-	NETIF_MSG_INTR_BIT = 9,
-	NETIF_MSG_TX_DONE_BIT = 10,
-	NETIF_MSG_RX_STATUS_BIT = 11,
-	NETIF_MSG_PKTDATA_BIT = 12,
-	NETIF_MSG_HW_BIT = 13,
-	NETIF_MSG_WOL_BIT = 14,
-	NETIF_MSG_CLASS_COUNT = 15,
-};
-
-struct scatter_walk {
-	struct scatterlist *sg;
-	unsigned int offset;
-};
-
-struct aead_request {
-	struct crypto_async_request base;
-	unsigned int assoclen;
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_aead;
-
-struct aead_alg {
-	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
-	int (*setauthsize)(struct crypto_aead *, unsigned int);
-	int (*encrypt)(struct aead_request *);
-	int (*decrypt)(struct aead_request *);
-	int (*init)(struct crypto_aead *);
-	void (*exit)(struct crypto_aead *);
-	unsigned int ivsize;
-	unsigned int maxauthsize;
-	unsigned int chunksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct crypto_aead {
-	unsigned int authsize;
-	unsigned int reqsize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct aead_instance {
-	void (*free)(struct aead_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct aead_alg alg;
-	};
-};
-
-struct crypto_aead_spawn {
-	struct crypto_spawn base;
-};
-
-enum crypto_attr_type_t {
-	CRYPTOCFGA_UNSPEC = 0,
-	CRYPTOCFGA_PRIORITY_VAL = 1,
-	CRYPTOCFGA_REPORT_LARVAL = 2,
-	CRYPTOCFGA_REPORT_HASH = 3,
-	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
-	CRYPTOCFGA_REPORT_AEAD = 5,
-	CRYPTOCFGA_REPORT_COMPRESS = 6,
-	CRYPTOCFGA_REPORT_RNG = 7,
-	CRYPTOCFGA_REPORT_CIPHER = 8,
-	CRYPTOCFGA_REPORT_AKCIPHER = 9,
-	CRYPTOCFGA_REPORT_KPP = 10,
-	CRYPTOCFGA_REPORT_ACOMP = 11,
-	CRYPTOCFGA_STAT_LARVAL = 12,
-	CRYPTOCFGA_STAT_HASH = 13,
-	CRYPTOCFGA_STAT_BLKCIPHER = 14,
-	CRYPTOCFGA_STAT_AEAD = 15,
-	CRYPTOCFGA_STAT_COMPRESS = 16,
-	CRYPTOCFGA_STAT_RNG = 17,
-	CRYPTOCFGA_STAT_CIPHER = 18,
-	CRYPTOCFGA_STAT_AKCIPHER = 19,
-	CRYPTOCFGA_STAT_KPP = 20,
-	CRYPTOCFGA_STAT_ACOMP = 21,
-	__CRYPTOCFGA_MAX = 22,
-};
-
-struct crypto_report_aead {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int maxauthsize;
-	unsigned int ivsize;
-};
-
-struct crypto_sync_skcipher;
-
-struct aead_geniv_ctx {
-	spinlock_t lock;
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *sknull;
-	u8 salt[0];
-};
-
-struct crypto_rng;
-
-struct rng_alg {
-	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
-	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
-	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
-	unsigned int seedsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct crypto_rng {
-	struct crypto_tfm base;
-};
-
-struct crypto_cipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_sync_skcipher {
-	struct crypto_skcipher base;
-};
-
-struct skcipher_instance {
-	void (*free)(struct skcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct skcipher_alg alg;
-	};
-};
-
-struct crypto_skcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct skcipher_walk {
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} src;
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} dst;
-	struct scatter_walk in;
-	unsigned int nbytes;
-	struct scatter_walk out;
-	unsigned int total;
-	struct list_head buffers;
-	u8 *page;
-	u8 *buffer;
-	u8 *oiv;
-	void *iv;
-	unsigned int ivsize;
-	int flags;
-	unsigned int blocksize;
-	unsigned int stride;
-	unsigned int alignmask;
-};
-
-struct skcipher_ctx_simple {
-	struct crypto_cipher *cipher;
-};
-
-struct crypto_report_blkcipher {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-};
-
-enum {
-	SKCIPHER_WALK_PHYS = 1,
-	SKCIPHER_WALK_SLOW = 2,
-	SKCIPHER_WALK_COPY = 4,
-	SKCIPHER_WALK_DIFF = 8,
-	SKCIPHER_WALK_SLEEP = 16,
-};
-
-struct skcipher_walk_buffer {
-	struct list_head entry;
-	struct scatter_walk dst;
-	unsigned int len;
-	u8 *data;
-	u8 buffer[0];
-};
-
-struct ahash_alg {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_ahash *);
-	void (*exit_tfm)(struct crypto_ahash *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct hash_alg_common halg;
+struct crypto_engine_ctx {
+	struct crypto_engine_op op;
 };
 
 struct crypto_hash_walk {
@@ -51589,63 +93321,6 @@
 	unsigned int flags;
 };
 
-struct ahash_instance {
-	void (*free)(struct ahash_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[256];
-			struct crypto_instance base;
-		} s;
-		struct ahash_alg alg;
-	};
-};
-
-struct crypto_ahash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_hash {
-	char type[64];
-	unsigned int blocksize;
-	unsigned int digestsize;
-};
-
-struct ahash_request_priv {
-	crypto_completion_t complete;
-	void *data;
-	u8 *result;
-	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *ubuf[0];
-};
-
 struct shash_instance {
 	void (*free)(struct shash_instance *);
 	long: 64;
@@ -51676,244 +93351,12 @@
 	struct crypto_spawn base;
 };
 
-struct crypto_report_akcipher {
+struct crypto_report_hash {
 	char type[64];
+	unsigned int blocksize;
+	unsigned int digestsize;
 };
 
-struct akcipher_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_akcipher {
-	struct crypto_tfm base;
-};
-
-struct akcipher_alg {
-	int (*sign)(struct akcipher_request *);
-	int (*verify)(struct akcipher_request *);
-	int (*encrypt)(struct akcipher_request *);
-	int (*decrypt)(struct akcipher_request *);
-	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
-	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
-	unsigned int (*max_size)(struct crypto_akcipher *);
-	int (*init)(struct crypto_akcipher *);
-	void (*exit)(struct crypto_akcipher *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct akcipher_instance {
-	void (*free)(struct akcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct akcipher_alg alg;
-	};
-};
-
-struct crypto_akcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_kpp {
-	char type[64];
-};
-
-struct kpp_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_kpp {
-	struct crypto_tfm base;
-};
-
-struct kpp_alg {
-	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
-	int (*generate_public_key)(struct kpp_request *);
-	int (*compute_shared_secret)(struct kpp_request *);
-	unsigned int (*max_size)(struct crypto_kpp *);
-	int (*init)(struct crypto_kpp *);
-	void (*exit)(struct crypto_kpp *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-enum asn1_class {
-	ASN1_UNIV = 0,
-	ASN1_APPL = 1,
-	ASN1_CONT = 2,
-	ASN1_PRIV = 3,
-};
-
-enum asn1_method {
-	ASN1_PRIM = 0,
-	ASN1_CONS = 1,
-};
-
-enum asn1_tag {
-	ASN1_EOC = 0,
-	ASN1_BOOL = 1,
-	ASN1_INT = 2,
-	ASN1_BTS = 3,
-	ASN1_OTS = 4,
-	ASN1_NULL = 5,
-	ASN1_OID = 6,
-	ASN1_ODE = 7,
-	ASN1_EXT = 8,
-	ASN1_REAL = 9,
-	ASN1_ENUM = 10,
-	ASN1_EPDV = 11,
-	ASN1_UTF8STR = 12,
-	ASN1_RELOID = 13,
-	ASN1_SEQ = 16,
-	ASN1_SET = 17,
-	ASN1_NUMSTR = 18,
-	ASN1_PRNSTR = 19,
-	ASN1_TEXSTR = 20,
-	ASN1_VIDSTR = 21,
-	ASN1_IA5STR = 22,
-	ASN1_UNITIM = 23,
-	ASN1_GENTIM = 24,
-	ASN1_GRASTR = 25,
-	ASN1_VISSTR = 26,
-	ASN1_GENSTR = 27,
-	ASN1_UNISTR = 28,
-	ASN1_CHRSTR = 29,
-	ASN1_BMPSTR = 30,
-	ASN1_LONG_TAG = 31,
-};
-
-typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
-
-struct asn1_decoder {
-	const unsigned char *machine;
-	size_t machlen;
-	const asn1_action_t *actions;
-};
-
-enum asn1_opcode {
-	ASN1_OP_MATCH = 0,
-	ASN1_OP_MATCH_OR_SKIP = 1,
-	ASN1_OP_MATCH_ACT = 2,
-	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
-	ASN1_OP_MATCH_JUMP = 4,
-	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
-	ASN1_OP_MATCH_ANY = 8,
-	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
-	ASN1_OP_MATCH_ANY_ACT = 10,
-	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
-	ASN1_OP_COND_MATCH_OR_SKIP = 17,
-	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
-	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
-	ASN1_OP_COND_MATCH_ANY = 24,
-	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
-	ASN1_OP_COND_MATCH_ANY_ACT = 26,
-	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
-	ASN1_OP_COND_FAIL = 28,
-	ASN1_OP_COMPLETE = 29,
-	ASN1_OP_ACT = 30,
-	ASN1_OP_MAYBE_ACT = 31,
-	ASN1_OP_END_SEQ = 32,
-	ASN1_OP_END_SET = 33,
-	ASN1_OP_END_SEQ_OF = 34,
-	ASN1_OP_END_SET_OF = 35,
-	ASN1_OP_END_SEQ_ACT = 36,
-	ASN1_OP_END_SET_ACT = 37,
-	ASN1_OP_END_SEQ_OF_ACT = 38,
-	ASN1_OP_END_SET_OF_ACT = 39,
-	ASN1_OP_RETURN = 40,
-	ASN1_OP__NR = 41,
-};
-
-enum rsapubkey_actions {
-	ACT_rsa_get_e = 0,
-	ACT_rsa_get_n = 1,
-	NR__rsapubkey_actions = 2,
-};
-
-enum rsaprivkey_actions {
-	ACT_rsa_get_d = 0,
-	ACT_rsa_get_dp = 1,
-	ACT_rsa_get_dq = 2,
-	ACT_rsa_get_e___2 = 3,
-	ACT_rsa_get_n___2 = 4,
-	ACT_rsa_get_p = 5,
-	ACT_rsa_get_q = 6,
-	ACT_rsa_get_qinv = 7,
-	NR__rsaprivkey_actions = 8,
-};
-
-typedef long unsigned int mpi_limb_t;
-
-struct gcry_mpi {
-	int alloced;
-	int nlimbs;
-	int nbits;
-	int sign;
-	unsigned int flags;
-	mpi_limb_t *d;
-};
-
-typedef struct gcry_mpi *MPI;
-
 struct rsa_key {
 	const u8 *n;
 	const u8 *e;
@@ -51933,82 +93376,16 @@
 	size_t qinv_sz;
 };
 
-struct rsa_mpi_key {
-	MPI n;
-	MPI e;
-	MPI d;
-};
-
-struct asn1_decoder___2;
-
-struct rsa_asn1_template {
-	const char *name;
-	const u8 *data;
-	size_t size;
-};
-
-struct pkcs1pad_ctx {
-	struct crypto_akcipher *child;
-	unsigned int key_size;
-};
-
-struct pkcs1pad_inst_ctx {
-	struct crypto_akcipher_spawn spawn;
-	const struct rsa_asn1_template *digest_info;
-};
-
-struct pkcs1pad_request {
-	struct scatterlist in_sg[2];
-	struct scatterlist out_sg[1];
-	uint8_t *in_buf;
-	uint8_t *out_buf;
-	long: 64;
-	long: 64;
-	struct akcipher_request child_req;
+enum ecdsasignature_actions {
+	ACT_ecdsa_get_signature_r = 0,
+	ACT_ecdsa_get_signature_s = 1,
+	NR__ecdsasignature_actions = 2,
 };
 
 struct crypto_report_acomp {
 	char type[64];
 };
 
-struct acomp_req {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int slen;
-	unsigned int dlen;
-	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_acomp {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
 struct acomp_alg {
 	int (*compress)(struct acomp_req *);
 	int (*decompress)(struct acomp_req *);
@@ -52030,132 +93407,28 @@
 	struct crypto_alg base;
 };
 
-struct crypto_report_comp {
-	char type[64];
-};
-
-struct crypto_scomp {
-	struct crypto_tfm base;
-};
-
-struct scomp_alg {
-	void * (*alloc_ctx)(struct crypto_scomp *);
-	void (*free_ctx)(struct crypto_scomp *, void *);
-	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct scomp_scratch {
-	spinlock_t lock;
-	void *src;
-	void *dst;
-};
-
-struct cryptomgr_param {
-	struct rtattr *tb[34];
-	struct {
-		struct rtattr attr;
-		struct crypto_attr_type data;
-	} type;
-	union {
-		struct rtattr attr;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_alg data;
-		} alg;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_u32 data;
-		} nu32;
-	} attrs[32];
-	char template[128];
-	struct crypto_larval *larval;
-	u32 otype;
-	u32 omask;
-};
-
-struct crypto_test_param {
-	char driver[128];
-	char alg[128];
-	u32 type;
-};
-
-struct hmac_ctx {
-	struct crypto_shash *hash;
-};
-
 struct md5_state {
 	u32 hash[4];
 	u32 block[16];
 	u64 byte_count;
 };
 
-struct sha1_state {
-	u32 state[5];
-	u64 count;
-	u8 buffer[64];
-};
-
-typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
-
-struct sha256_state {
-	u32 state[8];
-	u64 count;
-	u8 buf[64];
-};
-
-struct sha512_state {
-	u64 state[8];
-	u64 count[2];
-	u8 buf[128];
-};
-
-typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
-
 typedef struct {
 	u64 a;
 	u64 b;
 } u128;
 
 typedef struct {
-	__be64 a;
-	__be64 b;
-} be128;
-
-typedef struct {
 	__le64 b;
 	__le64 a;
 } le128;
 
-struct gf128mul_4k {
-	be128 t[256];
-};
-
 struct gf128mul_64k {
 	struct gf128mul_4k *t[16];
 };
 
-struct crypto_cts_ctx {
-	struct crypto_skcipher *child;
-};
-
-struct crypto_cts_reqctx {
-	struct scatterlist sg[2];
-	unsigned int offset;
-	long: 32;
+struct aead_instance {
+	void (*free)(struct aead_instance *);
 	long: 64;
 	long: 64;
 	long: 64;
@@ -52163,115 +93436,6 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	struct skcipher_request subreq;
-};
-
-struct xts_tfm_ctx {
-	struct crypto_skcipher *child;
-	struct crypto_cipher *tweak;
-};
-
-struct xts_instance_ctx {
-	struct crypto_skcipher_spawn spawn;
-	char name[128];
-};
-
-struct xts_request_ctx {
-	le128 t;
-	struct scatterlist *tail;
-	struct scatterlist sg[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct skcipher_request subreq;
-};
-
-struct crypto_rfc3686_ctx {
-	struct crypto_skcipher *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc3686_req_ctx {
-	u8 iv[16];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct skcipher_request subreq;
-};
-
-struct gcm_instance_ctx {
-	struct crypto_skcipher_spawn ctr;
-	struct crypto_ahash_spawn ghash;
-};
-
-struct crypto_gcm_ctx {
-	struct crypto_skcipher *ctr;
-	struct crypto_ahash *ghash;
-};
-
-struct crypto_rfc4106_ctx {
-	struct crypto_aead *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4106_req_ctx {
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct aead_request subreq;
-};
-
-struct crypto_rfc4543_instance_ctx {
-	struct crypto_aead_spawn aead;
-};
-
-struct crypto_rfc4543_ctx {
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *null;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4543_req_ctx {
-	struct aead_request subreq;
-};
-
-struct crypto_gcm_ghash_ctx {
-	unsigned int cryptlen;
-	struct scatterlist *src;
-	int (*complete)(struct aead_request *, u32);
-};
-
-struct crypto_gcm_req_priv_ctx {
-	u8 iv[16];
-	u8 auth_tag[16];
-	u8 iauth_tag[16];
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct scatterlist sg;
-	struct crypto_gcm_ghash_ctx ghash_ctx;
-	long: 64;
-	long: 64;
-	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -52281,223 +93445,52 @@
 	long: 64;
 	long: 64;
 	union {
-		struct ahash_request ahreq;
-		struct skcipher_request skreq;
-	} u;
+		struct {
+			char head[128];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
 };
 
-struct crypto_aes_ctx {
-	u32 key_enc[60];
-	u32 key_dec[60];
-	u32 key_length;
+struct crypto_ahash_spawn {
+	struct crypto_spawn base;
 };
 
-struct chksum_ctx {
-	u32 key;
+struct crypto_authenc_keys {
+	const u8 *authkey;
+	const u8 *enckey;
+	unsigned int authkeylen;
+	unsigned int enckeylen;
 };
 
-struct chksum_desc_ctx {
-	u32 crc;
+struct authenc_esn_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
 };
 
-struct chksum_desc_ctx___2 {
-	__u16 crc;
+struct crypto_authenc_esn_ctx {
+	unsigned int reqoff;
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
 };
 
-struct lzo_ctx {
-	void *lzo_comp_mem;
+struct authenc_esn_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
 };
 
-struct lzorle_ctx {
-	void *lzorle_comp_mem;
+struct ecdh {
+	char *key;
+	short unsigned int key_size;
 };
 
-struct crypto_report_rng {
-	char type[64];
-	unsigned int seedsize;
-};
-
-struct random_ready_callback {
-	struct list_head list;
-	void (*func)(struct random_ready_callback *);
-	struct module *owner;
-};
-
-struct drbg_string {
-	const unsigned char *buf;
-	size_t len;
-	struct list_head list;
-};
-
-typedef uint32_t drbg_flag_t;
-
-struct drbg_core {
-	drbg_flag_t flags;
-	__u8 statelen;
-	__u8 blocklen_bytes;
-	char cra_name[128];
-	char backend_cra_name[128];
-};
-
-struct drbg_state;
-
-struct drbg_state_ops {
-	int (*update)(struct drbg_state *, struct list_head *, int);
-	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
-	int (*crypto_init)(struct drbg_state *);
-	int (*crypto_fini)(struct drbg_state *);
-};
-
-struct drbg_state {
-	struct mutex drbg_mutex;
-	unsigned char *V;
-	unsigned char *Vbuf;
-	unsigned char *C;
-	unsigned char *Cbuf;
-	size_t reseed_ctr;
-	size_t reseed_threshold;
-	unsigned char *scratchpad;
-	unsigned char *scratchpadbuf;
-	void *priv_data;
-	struct crypto_skcipher *ctr_handle;
-	struct skcipher_request *ctr_req;
-	__u8 *outscratchpadbuf;
-	__u8 *outscratchpad;
-	struct crypto_wait ctr_wait;
-	struct scatterlist sg_in;
-	struct scatterlist sg_out;
-	bool seeded;
-	bool pr;
-	bool fips_primed;
-	unsigned char *prev;
-	struct work_struct seed_work;
-	struct crypto_rng *jent;
-	const struct drbg_state_ops *d_ops;
-	const struct drbg_core *core;
-	struct drbg_string test_data;
-	struct random_ready_callback random_ready;
-};
-
-enum drbg_prefixes {
-	DRBG_PREFIX0 = 0,
-	DRBG_PREFIX1 = 1,
-	DRBG_PREFIX2 = 2,
-	DRBG_PREFIX3 = 3,
-};
-
-struct sdesc {
-	struct shash_desc shash;
-	char ctx[0];
-};
-
-struct s {
-	__be32 conv;
-};
-
-struct rand_data {
-	__u64 data;
-	__u64 old_data;
-	__u64 prev_time;
-	__u64 last_delta;
-	__s64 last_delta2;
-	unsigned int osr;
-	unsigned char *mem;
-	unsigned int memlocation;
-	unsigned int memblocks;
-	unsigned int memblocksize;
-	unsigned int memaccessloops;
-	int rct_count;
-	unsigned int apt_observations;
-	unsigned int apt_count;
-	unsigned int apt_base;
-	unsigned int apt_base_set: 1;
-	unsigned int health_failure: 1;
-};
-
-struct rand_data___2;
-
-struct jitterentropy {
-	spinlock_t jent_lock;
-	struct rand_data___2 *entropy_collector;
-	unsigned int reset_cnt;
-};
-
-struct ghash_ctx {
-	struct gf128mul_4k *gf128;
-};
-
-struct ghash_desc_ctx {
-	u8 buffer[16];
-	u32 bytes;
-};
-
-typedef enum {
-	ZSTD_fast = 0,
-	ZSTD_dfast = 1,
-	ZSTD_greedy = 2,
-	ZSTD_lazy = 3,
-	ZSTD_lazy2 = 4,
-	ZSTD_btlazy2 = 5,
-	ZSTD_btopt = 6,
-	ZSTD_btopt2 = 7,
-} ZSTD_strategy;
-
-typedef struct {
-	unsigned int windowLog;
-	unsigned int chainLog;
-	unsigned int hashLog;
-	unsigned int searchLog;
-	unsigned int searchLength;
-	unsigned int targetLength;
-	ZSTD_strategy strategy;
-} ZSTD_compressionParameters;
-
-typedef struct {
-	unsigned int contentSizeFlag;
-	unsigned int checksumFlag;
-	unsigned int noDictIDFlag;
-} ZSTD_frameParameters;
-
-typedef struct {
-	ZSTD_compressionParameters cParams;
-	ZSTD_frameParameters fParams;
-} ZSTD_parameters;
-
-struct ZSTD_CCtx_s;
-
-typedef struct ZSTD_CCtx_s ZSTD_CCtx;
-
-struct ZSTD_DCtx_s;
-
-typedef struct ZSTD_DCtx_s ZSTD_DCtx;
-
-struct zstd_ctx {
-	ZSTD_CCtx *cctx;
-	ZSTD_DCtx *dctx;
-	void *cwksp;
-	void *dwksp;
-};
-
-enum asymmetric_payload_bits {
-	asym_crypto = 0,
-	asym_subtype = 1,
-	asym_key_ids = 2,
-	asym_auth = 3,
-};
-
-struct asymmetric_key_ids {
-	void *id[2];
-};
-
-struct asymmetric_key_subtype {
-	struct module *owner;
-	const char *name;
-	short unsigned int name_len;
-	void (*describe)(const struct key *, struct seq_file *);
-	void (*destroy)(void *, void *);
-	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
-	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
-	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+struct ecdh_ctx {
+	unsigned int curve_id;
+	unsigned int ndigits;
+	u64 private_key[8];
 };
 
 struct asymmetric_key_parser {
@@ -52507,299 +93500,64 @@
 	int (*parse)(struct key_preparsed_payload *);
 };
 
-enum OID {
-	OID_id_dsa_with_sha1 = 0,
-	OID_id_dsa = 1,
-	OID_id_ecdsa_with_sha1 = 2,
-	OID_id_ecPublicKey = 3,
-	OID_rsaEncryption = 4,
-	OID_md2WithRSAEncryption = 5,
-	OID_md3WithRSAEncryption = 6,
-	OID_md4WithRSAEncryption = 7,
-	OID_sha1WithRSAEncryption = 8,
-	OID_sha256WithRSAEncryption = 9,
-	OID_sha384WithRSAEncryption = 10,
-	OID_sha512WithRSAEncryption = 11,
-	OID_sha224WithRSAEncryption = 12,
-	OID_data = 13,
-	OID_signed_data = 14,
-	OID_email_address = 15,
-	OID_contentType = 16,
-	OID_messageDigest = 17,
-	OID_signingTime = 18,
-	OID_smimeCapabilites = 19,
-	OID_smimeAuthenticatedAttrs = 20,
-	OID_md2 = 21,
-	OID_md4 = 22,
-	OID_md5 = 23,
-	OID_msIndirectData = 24,
-	OID_msStatementType = 25,
-	OID_msSpOpusInfo = 26,
-	OID_msPeImageDataObjId = 27,
-	OID_msIndividualSPKeyPurpose = 28,
-	OID_msOutlookExpress = 29,
-	OID_certAuthInfoAccess = 30,
-	OID_sha1 = 31,
-	OID_sha256 = 32,
-	OID_sha384 = 33,
-	OID_sha512 = 34,
-	OID_sha224 = 35,
-	OID_commonName = 36,
-	OID_surname = 37,
-	OID_countryName = 38,
-	OID_locality = 39,
-	OID_stateOrProvinceName = 40,
-	OID_organizationName = 41,
-	OID_organizationUnitName = 42,
-	OID_title = 43,
-	OID_description = 44,
-	OID_name = 45,
-	OID_givenName = 46,
-	OID_initials = 47,
-	OID_generationalQualifier = 48,
-	OID_subjectKeyIdentifier = 49,
-	OID_keyUsage = 50,
-	OID_subjectAltName = 51,
-	OID_issuerAltName = 52,
-	OID_basicConstraints = 53,
-	OID_crlDistributionPoints = 54,
-	OID_certPolicies = 55,
-	OID_authorityKeyIdentifier = 56,
-	OID_extKeyUsage = 57,
-	OID_gostCPSignA = 58,
-	OID_gostCPSignB = 59,
-	OID_gostCPSignC = 60,
-	OID_gost2012PKey256 = 61,
-	OID_gost2012PKey512 = 62,
-	OID_gost2012Digest256 = 63,
-	OID_gost2012Digest512 = 64,
-	OID_gost2012Signature256 = 65,
-	OID_gost2012Signature512 = 66,
-	OID_gostTC26Sign256A = 67,
-	OID_gostTC26Sign256B = 68,
-	OID_gostTC26Sign256C = 69,
-	OID_gostTC26Sign256D = 70,
-	OID_gostTC26Sign512A = 71,
-	OID_gostTC26Sign512B = 72,
-	OID_gostTC26Sign512C = 73,
-	OID_sm2 = 74,
-	OID_sm3 = 75,
-	OID_SM2_with_SM3 = 76,
-	OID_sm3WithRSAEncryption = 77,
-	OID__NR = 78,
+struct section_header;
+
+struct pefile_context {
+	unsigned int header_size;
+	unsigned int image_checksum_offset;
+	unsigned int cert_dirent_offset;
+	unsigned int n_data_dirents;
+	unsigned int n_sections;
+	unsigned int certs_size;
+	unsigned int sig_offset;
+	unsigned int sig_len;
+	const struct section_header *secs;
+	const void *digest;
+	unsigned int digest_len;
+	const char *digest_algo;
 };
 
-struct public_key {
-	void *key;
-	u32 keylen;
-	enum OID algo;
-	void *params;
-	u32 paramlen;
-	bool key_is_private;
-	const char *id_type;
-	const char *pkey_algo;
-};
-
-enum x509_actions {
-	ACT_x509_extract_key_data = 0,
-	ACT_x509_extract_name_segment = 1,
-	ACT_x509_note_OID = 2,
-	ACT_x509_note_issuer = 3,
-	ACT_x509_note_not_after = 4,
-	ACT_x509_note_not_before = 5,
-	ACT_x509_note_params = 6,
-	ACT_x509_note_pkey_algo = 7,
-	ACT_x509_note_serial = 8,
-	ACT_x509_note_signature = 9,
-	ACT_x509_note_subject = 10,
-	ACT_x509_note_tbs_certificate = 11,
-	ACT_x509_process_extension = 12,
-	NR__x509_actions = 13,
-};
-
-enum x509_akid_actions {
-	ACT_x509_akid_note_kid = 0,
-	ACT_x509_akid_note_name = 1,
-	ACT_x509_akid_note_serial = 2,
-	ACT_x509_extract_name_segment___2 = 3,
-	ACT_x509_note_OID___2 = 4,
-	NR__x509_akid_actions = 5,
-};
-
-struct x509_certificate {
-	struct x509_certificate *next;
-	struct x509_certificate *signer;
-	struct public_key *pub;
-	struct public_key_signature *sig;
-	char *issuer;
-	char *subject;
-	struct asymmetric_key_id *id;
-	struct asymmetric_key_id *skid;
-	time64_t valid_from;
-	time64_t valid_to;
-	const void *tbs;
-	unsigned int tbs_size;
-	unsigned int raw_sig_size;
-	const void *raw_sig;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_subject;
-	unsigned int raw_subject_size;
-	unsigned int raw_skid_size;
-	const void *raw_skid;
-	unsigned int index;
-	bool seen;
-	bool verified;
-	bool self_signed;
-	bool unsupported_key;
-	bool unsupported_sig;
-	bool blacklisted;
-};
-
-struct x509_parse_context {
-	struct x509_certificate *cert;
-	long unsigned int data;
-	const void *cert_start;
-	const void *key;
-	size_t key_size;
-	const void *params;
-	size_t params_size;
-	enum OID key_algo;
-	enum OID last_oid;
-	enum OID algo_oid;
-	unsigned char nr_mpi;
-	u8 o_size;
-	u8 cn_size;
-	u8 email_size;
-	u16 o_offset;
-	u16 cn_offset;
-	u16 email_offset;
-	unsigned int raw_akid_size;
-	const void *raw_akid;
-	const void *akid_raw_issuer;
-	unsigned int akid_raw_issuer_size;
-};
-
-enum pkcs7_actions {
-	ACT_pkcs7_check_content_type = 0,
-	ACT_pkcs7_extract_cert = 1,
-	ACT_pkcs7_note_OID = 2,
-	ACT_pkcs7_note_certificate_list = 3,
-	ACT_pkcs7_note_content = 4,
-	ACT_pkcs7_note_data = 5,
-	ACT_pkcs7_note_signed_info = 6,
-	ACT_pkcs7_note_signeddata_version = 7,
-	ACT_pkcs7_note_signerinfo_version = 8,
-	ACT_pkcs7_sig_note_authenticated_attr = 9,
-	ACT_pkcs7_sig_note_digest_algo = 10,
-	ACT_pkcs7_sig_note_issuer = 11,
-	ACT_pkcs7_sig_note_pkey_algo = 12,
-	ACT_pkcs7_sig_note_serial = 13,
-	ACT_pkcs7_sig_note_set_of_authattrs = 14,
-	ACT_pkcs7_sig_note_signature = 15,
-	ACT_pkcs7_sig_note_skid = 16,
-	NR__pkcs7_actions = 17,
-};
-
-struct pkcs7_signed_info {
-	struct pkcs7_signed_info *next;
-	struct x509_certificate *signer;
-	unsigned int index;
-	bool unsupported_crypto;
-	bool blacklisted;
-	const void *msgdigest;
-	unsigned int msgdigest_len;
-	unsigned int authattrs_len;
-	const void *authattrs;
-	long unsigned int aa_set;
-	time64_t signing_time;
-	struct public_key_signature *sig;
-};
-
-struct pkcs7_message___2 {
-	struct x509_certificate *certs;
-	struct x509_certificate *crl;
-	struct pkcs7_signed_info *signed_infos;
-	u8 version;
-	bool have_authattrs;
-	enum OID data_type;
-	size_t data_len;
-	size_t data_hdrlen;
-	const void *data;
-};
-
-struct pkcs7_parse_context {
-	struct pkcs7_message___2 *msg;
-	struct pkcs7_signed_info *sinfo;
-	struct pkcs7_signed_info **ppsinfo;
-	struct x509_certificate *certs;
-	struct x509_certificate **ppcerts;
-	long unsigned int data;
-	enum OID last_oid;
-	unsigned int x509_index;
-	unsigned int sinfo_index;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_skid;
-	unsigned int raw_skid_size;
-	bool expect_skid;
-};
-
-struct biovec_slab {
-	int nr_vecs;
-	char *name;
-	struct kmem_cache *slab;
-};
-
-enum rq_qos_id {
-	RQ_QOS_WBT = 0,
-	RQ_QOS_LATENCY = 1,
-	RQ_QOS_COST = 2,
-};
-
-struct rq_qos_ops;
-
-struct rq_qos {
-	struct rq_qos_ops *ops;
-	struct request_queue *q;
-	enum rq_qos_id id;
-	struct rq_qos *next;
-};
-
-enum hctx_type {
-	HCTX_TYPE_DEFAULT = 0,
-	HCTX_TYPE_READ = 1,
-	HCTX_TYPE_POLL = 2,
-	HCTX_MAX_TYPES = 3,
-};
-
-struct blk_mq_debugfs_attr;
-
-struct rq_qos_ops {
-	void (*throttle)(struct rq_qos *, struct bio *);
-	void (*track)(struct rq_qos *, struct request *, struct bio *);
-	void (*merge)(struct rq_qos *, struct request *, struct bio *);
-	void (*issue)(struct rq_qos *, struct request *);
-	void (*requeue)(struct rq_qos *, struct request *);
-	void (*done)(struct rq_qos *, struct request *);
-	void (*done_bio)(struct rq_qos *, struct bio *);
-	void (*cleanup)(struct rq_qos *, struct bio *);
-	void (*queue_depth_changed)(struct rq_qos *);
-	void (*exit)(struct rq_qos *);
-	const struct blk_mq_debugfs_attr *debugfs_attrs;
-};
-
-struct bio_slab {
-	struct kmem_cache *slab;
-	unsigned int slab_ref;
-	unsigned int slab_size;
+struct section_header {
 	char name[8];
+	uint32_t virtual_size;
+	uint32_t virtual_address;
+	uint32_t raw_data_size;
+	uint32_t data_addr;
+	uint32_t relocs;
+	uint32_t line_numbers;
+	uint16_t num_relocs;
+	uint16_t num_lin_numbers;
+	uint32_t flags;
 };
 
+enum mscode_actions {
+	ACT_mscode_note_content_type = 0,
+	ACT_mscode_note_digest = 1,
+	ACT_mscode_note_digest_algo = 2,
+	NR__mscode_actions = 3,
+};
+
+struct kdf_testvec {
+	unsigned char *key;
+	size_t keylen;
+	unsigned char *ikm;
+	size_t ikmlen;
+	struct kvec info;
+	unsigned char *expected;
+	size_t expectedlen;
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
 enum {
 	BLK_MQ_F_SHOULD_MERGE = 1,
 	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
@@ -52807,6 +93565,7 @@
 	BLK_MQ_F_TAG_HCTX_SHARED = 8,
 	BLK_MQ_F_BLOCKING = 32,
 	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
 	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
 	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
 	BLK_MQ_S_STOPPED = 0,
@@ -52818,302 +93577,36 @@
 };
 
 enum {
-	WBT_RWQ_BG = 0,
-	WBT_RWQ_KSWAPD = 1,
-	WBT_RWQ_DISCARD = 2,
-	WBT_NUM_RWQ = 3,
-};
-
-struct req_iterator {
-	struct bvec_iter iter;
-	struct bio *bio;
-};
-
-struct blk_plug_cb;
-
-typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
-
-struct blk_plug_cb {
-	struct list_head list;
-	blk_plug_cb_fn callback;
-	void *data;
-};
-
-enum {
 	BLK_MQ_REQ_NOWAIT = 1,
 	BLK_MQ_REQ_RESERVED = 2,
 	BLK_MQ_REQ_PM = 4,
 };
 
-struct trace_event_raw_block_buffer {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	size_t size;
-	char __data[0];
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
 };
 
-struct trace_event_raw_block_rq_requeue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
+enum {
+	sysctl_hung_task_timeout_secs = 0,
 };
 
-struct trace_event_raw_block_rq_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	unsigned int bytes;
-	char rwbs[8];
-	char comm[16];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_bounce {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_merge {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_queue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_get_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_plug {
-	struct trace_entry ent;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_unplug {
-	struct trace_entry ent;
-	int nr_rq;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_split {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	sector_t new_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	unsigned int nr_bios;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_block_buffer {};
-
-struct trace_event_data_offsets_block_rq_requeue {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq_complete {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_bio_bounce {};
-
-struct trace_event_data_offsets_block_bio_complete {};
-
-struct trace_event_data_offsets_block_bio_merge {};
-
-struct trace_event_data_offsets_block_bio_queue {};
-
-struct trace_event_data_offsets_block_get_rq {};
-
-struct trace_event_data_offsets_block_plug {};
-
-struct trace_event_data_offsets_block_unplug {};
-
-struct trace_event_data_offsets_block_split {};
-
-struct trace_event_data_offsets_block_bio_remap {};
-
-struct trace_event_data_offsets_block_rq_remap {};
-
-typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_rq_requeue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);
-
-typedef void (*btf_trace_block_rq_insert)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_issue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_merge)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_bio_bounce)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_backmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_frontmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_queue)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_getrq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_sleeprq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
-
-typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
-
-typedef void (*btf_trace_block_split)(void *, struct request_queue *, struct bio *, unsigned int);
-
-typedef void (*btf_trace_block_bio_remap)(void *, struct request_queue *, struct bio *, dev_t, sector_t);
-
-typedef void (*btf_trace_block_rq_remap)(void *, struct request_queue *, struct request *, dev_t, sector_t);
-
 enum {
 	BLK_MQ_NO_TAG = 4294967295,
 	BLK_MQ_TAG_MIN = 1,
 	BLK_MQ_TAG_MAX = 4294967294,
 };
 
-struct queue_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct request_queue *, char *);
-	ssize_t (*store)(struct request_queue *, const char *, size_t);
-};
-
-enum {
-	REQ_FSEQ_PREFLUSH = 1,
-	REQ_FSEQ_DATA = 2,
-	REQ_FSEQ_POSTFLUSH = 4,
-	REQ_FSEQ_DONE = 8,
-	REQ_FSEQ_ACTIONS = 7,
-	FLUSH_PENDING_TIMEOUT = 5000,
-};
-
-enum {
-	ICQ_EXITED = 4,
-	ICQ_DESTROYED = 8,
-};
-
-struct rq_map_data {
-	struct page **pages;
-	int page_order;
-	int nr_entries;
-	long unsigned int offset;
-	int null_mapped;
-	int from_user;
-};
-
-struct bio_map_data {
-	bool is_our_pages: 1;
-	bool is_null_mapped: 1;
-	struct iov_iter iter;
-	struct iovec iov[0];
-};
-
-enum bio_merge_status {
-	BIO_MERGE_OK = 0,
-	BIO_MERGE_NONE = 1,
-	BIO_MERGE_FAILED = 2,
-};
-
-typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
-
-enum {
-	BLK_MQ_UNIQUE_TAG_BITS = 16,
-	BLK_MQ_UNIQUE_TAG_MASK = 65535,
-};
-
 struct mq_inflight {
-	struct hd_struct *part;
+	struct block_device *part;
 	unsigned int inflight[2];
 };
 
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
 struct flush_busy_ctx_data {
 	struct blk_mq_hw_ctx *hctx;
 	struct list_head *list;
@@ -53141,621 +93634,8 @@
 	struct elevator_type *type;
 };
 
-struct sbq_wait {
-	struct sbitmap_queue *sbq;
-	struct wait_queue_entry wait;
-};
-
-typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);
-
-typedef bool busy_tag_iter_fn(struct request *, void *, bool);
-
-struct bt_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	busy_iter_fn *fn;
-	void *data;
-	bool reserved;
-};
-
-struct bt_tags_iter_data {
-	struct blk_mq_tags *tags;
-	busy_tag_iter_fn *fn;
-	void *data;
-	unsigned int flags;
-};
-
-struct blk_queue_stats {
-	struct list_head callbacks;
-	spinlock_t lock;
-	bool enable_accounting;
-};
-
-struct blk_mq_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);
-};
-
-struct blk_mq_hw_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
-};
-
-typedef u32 compat_caddr_t;
-
-struct hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	long unsigned int start;
-};
-
-struct blkpg_ioctl_arg {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-};
-
-struct blkpg_partition {
-	long long int start;
-	long long int length;
-	int pno;
-	char devname[64];
-	char volname[64];
-};
-
-struct pr_reservation {
-	__u64 key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_registration {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct pr_preempt {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_clear {
-	__u64 key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct compat_blkpg_ioctl_arg {
-	compat_int_t op;
-	compat_int_t flags;
-	compat_int_t datalen;
-	compat_caddr_t data;
-};
-
-struct compat_hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	u32 start;
-};
-
-struct klist_node;
-
-struct klist {
-	spinlock_t k_lock;
-	struct list_head k_list;
-	void (*get)(struct klist_node *);
-	void (*put)(struct klist_node *);
-};
-
-struct klist_node {
-	void *n_klist;
-	struct list_head n_node;
-	struct kref n_ref;
-};
-
-struct klist_iter {
-	struct klist *i_klist;
-	struct klist_node *i_cur;
-};
-
-struct class_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
 enum {
-	DISK_EVENT_FLAG_POLL = 1,
-	DISK_EVENT_FLAG_UEVENT = 2,
-};
-
-struct disk_events {
-	struct list_head node;
-	struct gendisk *disk;
-	spinlock_t lock;
-	struct mutex block_mutex;
-	int block;
-	unsigned int pending;
-	unsigned int clearing;
-	long int poll_msecs;
-	struct delayed_work dwork;
-};
-
-struct badblocks {
-	struct device *dev;
-	int count;
-	int unacked_exist;
-	int shift;
-	u64 *page;
-	int changed;
-	seqlock_t lock;
-	sector_t sector;
-	sector_t size;
-};
-
-struct disk_part_iter {
-	struct gendisk *disk;
-	struct hd_struct *part;
-	int idx;
-	unsigned int flags;
-};
-
-struct blk_major_name {
-	struct blk_major_name *next;
-	int major;
-	char name[16];
-};
-
-enum {
-	IOPRIO_WHO_PROCESS = 1,
-	IOPRIO_WHO_PGRP = 2,
-	IOPRIO_WHO_USER = 3,
-};
-
-struct parsed_partitions {
-	struct block_device *bdev;
-	char name[32];
-	struct {
-		sector_t from;
-		sector_t size;
-		int flags;
-		bool has_info;
-		struct partition_meta_info info;
-	} *parts;
-	int next;
-	int limit;
-	bool access_beyond_eod;
-	char *pp_buf;
-};
-
-typedef struct {
-	struct page *v;
-} Sector;
-
-struct RigidDiskBlock {
-	__u32 rdb_ID;
-	__be32 rdb_SummedLongs;
-	__s32 rdb_ChkSum;
-	__u32 rdb_HostID;
-	__be32 rdb_BlockBytes;
-	__u32 rdb_Flags;
-	__u32 rdb_BadBlockList;
-	__be32 rdb_PartitionList;
-	__u32 rdb_FileSysHeaderList;
-	__u32 rdb_DriveInit;
-	__u32 rdb_Reserved1[6];
-	__u32 rdb_Cylinders;
-	__u32 rdb_Sectors;
-	__u32 rdb_Heads;
-	__u32 rdb_Interleave;
-	__u32 rdb_Park;
-	__u32 rdb_Reserved2[3];
-	__u32 rdb_WritePreComp;
-	__u32 rdb_ReducedWrite;
-	__u32 rdb_StepRate;
-	__u32 rdb_Reserved3[5];
-	__u32 rdb_RDBBlocksLo;
-	__u32 rdb_RDBBlocksHi;
-	__u32 rdb_LoCylinder;
-	__u32 rdb_HiCylinder;
-	__u32 rdb_CylBlocks;
-	__u32 rdb_AutoParkSeconds;
-	__u32 rdb_HighRDSKBlock;
-	__u32 rdb_Reserved4;
-	char rdb_DiskVendor[8];
-	char rdb_DiskProduct[16];
-	char rdb_DiskRevision[4];
-	char rdb_ControllerVendor[8];
-	char rdb_ControllerProduct[16];
-	char rdb_ControllerRevision[4];
-	__u32 rdb_Reserved5[10];
-};
-
-struct PartitionBlock {
-	__be32 pb_ID;
-	__be32 pb_SummedLongs;
-	__s32 pb_ChkSum;
-	__u32 pb_HostID;
-	__be32 pb_Next;
-	__u32 pb_Flags;
-	__u32 pb_Reserved1[2];
-	__u32 pb_DevFlags;
-	__u8 pb_DriveName[32];
-	__u32 pb_Reserved2[15];
-	__be32 pb_Environment[17];
-	__u32 pb_EReserved[15];
-};
-
-struct partition_info {
-	u8 flg;
-	char id[3];
-	__be32 st;
-	__be32 siz;
-};
-
-struct rootsector {
-	char unused[342];
-	struct partition_info icdpart[8];
-	char unused2[12];
-	u32 hd_siz;
-	struct partition_info part[4];
-	u32 bsl_st;
-	u32 bsl_cnt;
-	u16 checksum;
-} __attribute__((packed));
-
-struct mac_partition {
-	__be16 signature;
-	__be16 res1;
-	__be32 map_count;
-	__be32 start_block;
-	__be32 block_count;
-	char name[32];
-	char type[32];
-	__be32 data_start;
-	__be32 data_count;
-	__be32 status;
-	__be32 boot_start;
-	__be32 boot_size;
-	__be32 boot_load;
-	__be32 boot_load2;
-	__be32 boot_entry;
-	__be32 boot_entry2;
-	__be32 boot_cksum;
-	char processor[16];
-};
-
-struct mac_driver_desc {
-	__be16 signature;
-	__be16 block_size;
-	__be32 block_count;
-};
-
-struct msdos_partition {
-	u8 boot_ind;
-	u8 head;
-	u8 sector;
-	u8 cyl;
-	u8 sys_ind;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_cyl;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct frag {
-	struct list_head list;
-	u32 group;
-	u8 num;
-	u8 rec;
-	u8 map;
-	u8 data[0];
-};
-
-struct privhead {
-	u16 ver_major;
-	u16 ver_minor;
-	u64 logical_disk_start;
-	u64 logical_disk_size;
-	u64 config_start;
-	u64 config_size;
-	uuid_t disk_id;
-};
-
-struct tocblock {
-	u8 bitmap1_name[16];
-	u64 bitmap1_start;
-	u64 bitmap1_size;
-	u8 bitmap2_name[16];
-	u64 bitmap2_start;
-	u64 bitmap2_size;
-};
-
-struct vmdb {
-	u16 ver_major;
-	u16 ver_minor;
-	u32 vblk_size;
-	u32 vblk_offset;
-	u32 last_vblk_seq;
-};
-
-struct vblk_comp {
-	u8 state[16];
-	u64 parent_id;
-	u8 type;
-	u8 children;
-	u16 chunksize;
-};
-
-struct vblk_dgrp {
-	u8 disk_id[64];
-};
-
-struct vblk_disk {
-	uuid_t disk_id;
-	u8 alt_name[128];
-};
-
-struct vblk_part {
-	u64 start;
-	u64 size;
-	u64 volume_offset;
-	u64 parent_id;
-	u64 disk_id;
-	u8 partnum;
-};
-
-struct vblk_volu {
-	u8 volume_type[16];
-	u8 volume_state[16];
-	u8 guid[16];
-	u8 drive_hint[4];
-	u64 size;
-	u8 partition_type;
-};
-
-struct vblk {
-	u8 name[64];
-	u64 obj_id;
-	u32 sequence;
-	u8 flags;
-	u8 type;
-	union {
-		struct vblk_comp comp;
-		struct vblk_dgrp dgrp;
-		struct vblk_disk disk;
-		struct vblk_part part;
-		struct vblk_volu volu;
-	} vblk;
-	struct list_head list;
-};
-
-struct ldmdb {
-	struct privhead ph;
-	struct tocblock toc;
-	struct vmdb vm;
-	struct list_head v_dgrp;
-	struct list_head v_disk;
-	struct list_head v_volu;
-	struct list_head v_comp;
-	struct list_head v_part;
-};
-
-struct fat_boot_sector {
-	__u8 ignored[3];
-	__u8 system_id[8];
-	__u8 sector_size[2];
-	__u8 sec_per_clus;
-	__le16 reserved;
-	__u8 fats;
-	__u8 dir_entries[2];
-	__u8 sectors[2];
-	__u8 media;
-	__le16 fat_length;
-	__le16 secs_track;
-	__le16 heads;
-	__le32 hidden;
-	__le32 total_sect;
-	union {
-		struct {
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat16;
-		struct {
-			__le32 length;
-			__le16 flags;
-			__u8 version[2];
-			__le32 root_cluster;
-			__le16 info_sector;
-			__le16 backup_boot;
-			__le16 reserved2[6];
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat32;
-	};
-};
-
-enum msdos_sys_ind {
-	DOS_EXTENDED_PARTITION = 5,
-	LINUX_EXTENDED_PARTITION = 133,
-	WIN98_EXTENDED_PARTITION = 15,
-	LINUX_DATA_PARTITION = 131,
-	LINUX_LVM_PARTITION = 142,
 	LINUX_RAID_PARTITION = 253,
-	SOLARIS_X86_PARTITION = 130,
-	NEW_SOLARIS_X86_PARTITION = 191,
-	DM6_AUX1PARTITION = 81,
-	DM6_AUX3PARTITION = 83,
-	DM6_PARTITION = 84,
-	EZD_PARTITION = 85,
-	FREEBSD_PARTITION = 165,
-	OPENBSD_PARTITION = 166,
-	NETBSD_PARTITION = 169,
-	BSDI_PARTITION = 183,
-	MINIX_PARTITION = 129,
-	UNIXWARE_PARTITION = 99,
-};
-
-struct solaris_x86_slice {
-	__le16 s_tag;
-	__le16 s_flag;
-	__le32 s_start;
-	__le32 s_size;
-};
-
-struct solaris_x86_vtoc {
-	unsigned int v_bootinfo[3];
-	__le32 v_sanity;
-	__le32 v_version;
-	char v_volume[8];
-	__le16 v_sectorsz;
-	__le16 v_nparts;
-	unsigned int v_reserved[10];
-	struct solaris_x86_slice v_slice[16];
-	unsigned int timestamp[16];
-	char v_asciilabel[128];
-};
-
-struct bsd_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	__u8 p_fstype;
-	__u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct bsd_disklabel {
-	__le32 d_magic;
-	__s16 d_type;
-	__s16 d_subtype;
-	char d_typename[16];
-	char d_packname[16];
-	__u32 d_secsize;
-	__u32 d_nsectors;
-	__u32 d_ntracks;
-	__u32 d_ncylinders;
-	__u32 d_secpercyl;
-	__u32 d_secperunit;
-	__u16 d_sparespertrack;
-	__u16 d_sparespercyl;
-	__u32 d_acylinders;
-	__u16 d_rpm;
-	__u16 d_interleave;
-	__u16 d_trackskew;
-	__u16 d_cylskew;
-	__u32 d_headswitch;
-	__u32 d_trkseek;
-	__u32 d_flags;
-	__u32 d_drivedata[5];
-	__u32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct bsd_partition d_partitions[16];
-};
-
-struct unixware_slice {
-	__le16 s_label;
-	__le16 s_flags;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct unixware_vtoc {
-	__le32 v_magic;
-	__le32 v_version;
-	char v_name[8];
-	__le16 v_nslices;
-	__le16 v_unknown1;
-	__le32 v_reserved[10];
-	struct unixware_slice v_slice[16];
-};
-
-struct unixware_disklabel {
-	__le32 d_type;
-	__le32 d_magic;
-	__le32 d_version;
-	char d_serial[12];
-	__le32 d_ncylinders;
-	__le32 d_ntracks;
-	__le32 d_nsectors;
-	__le32 d_secsize;
-	__le32 d_part_start;
-	__le32 d_unknown1[12];
-	__le32 d_alt_tbl;
-	__le32 d_alt_len;
-	__le32 d_phys_cyl;
-	__le32 d_phys_trk;
-	__le32 d_phys_sec;
-	__le32 d_phys_bytes;
-	__le32 d_unknown2;
-	__le32 d_unknown3;
-	__le32 d_pad[8];
-	struct unixware_vtoc vtoc;
-};
-
-struct d_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	u8 p_fstype;
-	u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct disklabel {
-	__le32 d_magic;
-	__le16 d_type;
-	__le16 d_subtype;
-	u8 d_typename[16];
-	u8 d_packname[16];
-	__le32 d_secsize;
-	__le32 d_nsectors;
-	__le32 d_ntracks;
-	__le32 d_ncylinders;
-	__le32 d_secpercyl;
-	__le32 d_secprtunit;
-	__le16 d_sparespertrack;
-	__le16 d_sparespercyl;
-	__le32 d_acylinders;
-	__le16 d_rpm;
-	__le16 d_interleave;
-	__le16 d_trackskew;
-	__le16 d_cylskew;
-	__le32 d_headswitch;
-	__le32 d_trkseek;
-	__le32 d_flags;
-	__le32 d_drivedata[5];
-	__le32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct d_partition d_partitions[18];
-};
-
-enum {
-	LINUX_RAID_PARTITION___2 = 253,
 };
 
 struct sgi_volume {
@@ -53782,3748 +93662,103 @@
 	__be32 _unused1;
 };
 
-enum {
-	SUN_WHOLE_DISK = 5,
-	LINUX_RAID_PARTITION___3 = 253,
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
 };
 
-struct sun_info {
-	__be16 id;
-	__be16 flags;
-};
-
-struct sun_vtoc {
-	__be32 version;
-	char volume[8];
-	__be16 nparts;
-	struct sun_info infos[8];
-	__be16 padding;
-	__be32 bootinfo[3];
-	__be32 sanity;
-	__be32 reserved[10];
-	__be32 timestamp[8];
-};
-
-struct sun_partition {
-	__be32 start_cylinder;
-	__be32 num_sectors;
-};
-
-struct sun_disklabel {
-	unsigned char info[128];
-	struct sun_vtoc vtoc;
-	__be32 write_reinstruct;
-	__be32 read_reinstruct;
-	unsigned char spare[148];
-	__be16 rspeed;
-	__be16 pcylcount;
-	__be16 sparecyl;
-	__be16 obs1;
-	__be16 obs2;
-	__be16 ilfact;
-	__be16 ncyl;
-	__be16 nacyl;
-	__be16 ntrks;
-	__be16 nsect;
-	__be16 obs3;
-	__be16 obs4;
-	struct sun_partition partitions[8];
-	__be16 magic;
-	__be16 csum;
-};
-
-struct pt_info {
-	s32 pi_nblocks;
-	u32 pi_blkoff;
-};
-
-struct ultrix_disklabel {
-	s32 pt_magic;
-	s32 pt_valid;
-	struct pt_info pt_part[8];
-};
-
-struct _gpt_header {
-	__le64 signature;
-	__le32 revision;
-	__le32 header_size;
-	__le32 header_crc32;
-	__le32 reserved1;
-	__le64 my_lba;
-	__le64 alternate_lba;
-	__le64 first_usable_lba;
-	__le64 last_usable_lba;
-	efi_guid_t disk_guid;
-	__le64 partition_entry_lba;
-	__le32 num_partition_entries;
-	__le32 sizeof_partition_entry;
-	__le32 partition_entry_array_crc32;
-} __attribute__((packed));
-
-typedef struct _gpt_header gpt_header;
-
-struct _gpt_entry_attributes {
-	u64 required_to_function: 1;
-	u64 reserved: 47;
-	u64 type_guid_specific: 16;
-};
-
-typedef struct _gpt_entry_attributes gpt_entry_attributes;
-
-struct _gpt_entry {
-	efi_guid_t partition_type_guid;
-	efi_guid_t unique_partition_guid;
-	__le64 starting_lba;
-	__le64 ending_lba;
-	gpt_entry_attributes attributes;
-	__le16 partition_name[36];
-};
-
-typedef struct _gpt_entry gpt_entry;
-
-struct _gpt_mbr_record {
-	u8 boot_indicator;
-	u8 start_head;
-	u8 start_sector;
-	u8 start_track;
-	u8 os_type;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_track;
-	__le32 starting_lba;
-	__le32 size_in_lba;
-};
-
-typedef struct _gpt_mbr_record gpt_mbr_record;
-
-struct _legacy_mbr {
-	u8 boot_code[440];
-	__le32 unique_mbr_signature;
-	__le16 unknown;
-	gpt_mbr_record partition_record[4];
-	__le16 signature;
-} __attribute__((packed));
-
-typedef struct _legacy_mbr legacy_mbr;
-
-struct d_partition___2 {
-	__le32 p_res;
-	u8 p_fstype;
-	u8 p_res2[3];
-	__le32 p_offset;
-	__le32 p_size;
-};
-
-struct disklabel___2 {
-	u8 d_reserved[270];
-	struct d_partition___2 d_partitions[2];
-	u8 d_blank[208];
-	__le16 d_magic;
-} __attribute__((packed));
-
-struct volumeid {
-	u8 vid_unused[248];
-	u8 vid_mac[8];
-};
-
-struct dkconfig {
-	u8 ios_unused0[128];
-	__be32 ios_slcblk;
-	__be16 ios_slccnt;
-	u8 ios_unused1[122];
-};
-
-struct dkblk0 {
-	struct volumeid dk_vid;
-	struct dkconfig dk_ios;
-};
-
-struct slice {
-	__be32 nblocks;
-	__be32 blkoff;
-};
-
-struct rq_wait {
-	wait_queue_head_t wait;
-	atomic_t inflight;
-};
-
-struct rq_depth {
-	unsigned int max_depth;
-	int scale_step;
-	bool scaled_max;
-	unsigned int queue_depth;
-	unsigned int default_depth;
-};
-
-typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
-
-typedef void cleanup_cb_t(struct rq_wait *, void *);
-
-struct rq_qos_wait_data {
-	struct wait_queue_entry wq;
-	struct task_struct *task;
-	struct rq_wait *rqw;
-	acquire_inflight_cb_t *cb;
-	void *private_data;
-	bool got_token;
-};
-
-struct cdrom_device_ops;
-
-struct cdrom_device_info {
-	const struct cdrom_device_ops *ops;
-	struct list_head list;
-	struct gendisk *disk;
-	void *handle;
-	int mask;
-	int speed;
-	int capacity;
-	unsigned int options: 30;
-	unsigned int mc_flags: 2;
-	unsigned int vfs_events;
-	unsigned int ioctl_events;
-	int use_count;
-	char name[20];
-	__u8 sanyo_slot: 2;
-	__u8 keeplocked: 1;
-	__u8 reserved: 5;
-	int cdda_method;
-	__u8 last_sense;
-	__u8 media_written;
-	short unsigned int mmc3_profile;
-	int for_data;
-	int (*exit)(struct cdrom_device_info *);
-	int mrw_mode_page;
-};
-
-struct scsi_sense_hdr {
-	u8 response_code;
-	u8 sense_key;
-	u8 asc;
-	u8 ascq;
-	u8 byte4;
-	u8 byte5;
-	u8 byte6;
-	u8 additional_length;
-};
-
-struct cdrom_msf0 {
-	__u8 minute;
-	__u8 second;
-	__u8 frame;
-};
-
-union cdrom_addr {
-	struct cdrom_msf0 msf;
-	int lba;
-};
-
-struct cdrom_multisession {
-	union cdrom_addr addr;
-	__u8 xa_flag;
-	__u8 addr_format;
-};
-
-struct cdrom_mcn {
-	__u8 medium_catalog_number[14];
-};
-
-struct request_sense;
-
-struct cdrom_generic_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct request_sense *sense;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	union {
-		void *reserved[1];
-		void *unused;
-	};
-};
-
-struct request_sense {
-	__u8 error_code: 7;
-	__u8 valid: 1;
-	__u8 segment_number;
-	__u8 sense_key: 4;
-	__u8 reserved2: 1;
-	__u8 ili: 1;
-	__u8 reserved1: 2;
-	__u8 information[4];
-	__u8 add_sense_len;
-	__u8 command_info[4];
-	__u8 asc;
-	__u8 ascq;
-	__u8 fruc;
-	__u8 sks[3];
-	__u8 asb[46];
-};
-
-struct packet_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct scsi_sense_hdr *sshdr;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct cdrom_device_ops {
-	int (*open)(struct cdrom_device_info *, int);
-	void (*release)(struct cdrom_device_info *);
-	int (*drive_status)(struct cdrom_device_info *, int);
-	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
-	int (*tray_move)(struct cdrom_device_info *, int);
-	int (*lock_door)(struct cdrom_device_info *, int);
-	int (*select_speed)(struct cdrom_device_info *, int);
-	int (*select_disc)(struct cdrom_device_info *, int);
-	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
-	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
-	int (*reset)(struct cdrom_device_info *);
-	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
-	const int capability;
-	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
-};
-
-struct scsi_ioctl_command {
-	unsigned int inlen;
-	unsigned int outlen;
-	unsigned char data[0];
-};
-
-enum scsi_device_event {
-	SDEV_EVT_MEDIA_CHANGE = 1,
-	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
-	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
-	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
-	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
-	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
-	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
-	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
-	SDEV_EVT_FIRST = 1,
-	SDEV_EVT_LAST = 8,
-	SDEV_EVT_MAXBITS = 9,
-};
-
-struct scsi_request {
-	unsigned char __cmd[16];
-	unsigned char *cmd;
-	short unsigned int cmd_len;
-	int result;
-	unsigned int sense_len;
-	unsigned int resid_len;
-	int retries;
-	void *sense;
-};
-
-struct sg_io_hdr {
-	int interface_id;
-	int dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	unsigned int dxfer_len;
-	void *dxferp;
-	unsigned char *cmdp;
-	void *sbp;
-	unsigned int timeout;
-	unsigned int flags;
-	int pack_id;
-	void *usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	int resid;
-	unsigned int duration;
-	unsigned int info;
-};
-
-struct compat_sg_io_hdr {
-	compat_int_t interface_id;
-	compat_int_t dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	compat_uint_t dxfer_len;
-	compat_uint_t dxferp;
-	compat_uptr_t cmdp;
-	compat_uptr_t sbp;
-	compat_uint_t timeout;
-	compat_uint_t flags;
-	compat_int_t pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	compat_int_t resid;
-	compat_uint_t duration;
-	compat_uint_t info;
-};
-
-struct blk_cmd_filter {
-	long unsigned int read_ok[4];
-	long unsigned int write_ok[4];
-};
-
-struct compat_cdrom_generic_command {
-	unsigned char cmd[12];
-	compat_caddr_t buffer;
-	compat_uint_t buflen;
-	compat_int_t stat;
-	compat_caddr_t sense;
-	unsigned char data_direction;
-	unsigned char pad[3];
-	compat_int_t quiet;
-	compat_int_t timeout;
-	compat_caddr_t unused;
-};
-
-enum {
-	OMAX_SB_LEN = 16,
-};
-
-struct bsg_device {
-	struct request_queue *queue;
-	spinlock_t lock;
-	struct hlist_node dev_list;
-	refcount_t ref_count;
-	char name[20];
-	int max_queue;
-};
-
-struct bsg_job;
-
-typedef int bsg_job_fn(struct bsg_job *);
-
-struct bsg_buffer {
-	unsigned int payload_len;
-	int sg_cnt;
-	struct scatterlist *sg_list;
-};
-
-struct bsg_job {
-	struct device *dev;
-	struct kref kref;
-	unsigned int timeout;
-	void *request;
-	void *reply;
-	unsigned int request_len;
-	unsigned int reply_len;
-	struct bsg_buffer request_payload;
-	struct bsg_buffer reply_payload;
-	int result;
-	unsigned int reply_payload_rcv_len;
-	struct request *bidi_rq;
-	struct bio *bidi_bio;
-	void *dd_data;
-};
-
-typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
-
-struct bsg_set {
-	struct blk_mq_tag_set tag_set;
-	bsg_job_fn *job_fn;
-	bsg_timeout_fn *timeout_fn;
-};
-
-typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
-
-typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
-
-typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
-
-typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
-
-typedef size_t blkcg_pol_stat_pd_fn(struct blkg_policy_data *, char *, size_t);
-
-struct blkcg_policy {
-	int plid;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
-	blkcg_pol_init_cpd_fn *cpd_init_fn;
-	blkcg_pol_free_cpd_fn *cpd_free_fn;
-	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
-	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
-	blkcg_pol_init_pd_fn *pd_init_fn;
-	blkcg_pol_online_pd_fn *pd_online_fn;
-	blkcg_pol_offline_pd_fn *pd_offline_fn;
-	blkcg_pol_free_pd_fn *pd_free_fn;
-	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
-	blkcg_pol_stat_pd_fn *pd_stat_fn;
-};
-
-struct blkg_conf_ctx {
-	struct gendisk *disk;
-	struct blkcg_gq *blkg;
-	char *body;
-};
-
-enum blkg_rwstat_type {
-	BLKG_RWSTAT_READ = 0,
-	BLKG_RWSTAT_WRITE = 1,
-	BLKG_RWSTAT_SYNC = 2,
-	BLKG_RWSTAT_ASYNC = 3,
-	BLKG_RWSTAT_DISCARD = 4,
-	BLKG_RWSTAT_NR = 5,
-	BLKG_RWSTAT_TOTAL = 5,
-};
-
-struct blkg_rwstat {
-	struct percpu_counter cpu_cnt[5];
-	atomic64_t aux_cnt[5];
-};
-
-struct blkg_rwstat_sample {
-	u64 cnt[5];
-};
-
-struct throtl_service_queue {
-	struct throtl_service_queue *parent_sq;
-	struct list_head queued[2];
-	unsigned int nr_queued[2];
-	struct rb_root_cached pending_tree;
-	unsigned int nr_pending;
-	long unsigned int first_pending_disptime;
-	struct timer_list pending_timer;
-};
-
-struct latency_bucket {
-	long unsigned int total_latency;
-	int samples;
-};
-
-struct avg_latency_bucket {
-	long unsigned int latency;
-	bool valid;
-};
-
-struct throtl_data {
-	struct throtl_service_queue service_queue;
-	struct request_queue *queue;
-	unsigned int nr_queued[2];
-	unsigned int throtl_slice;
-	struct work_struct dispatch_work;
-	unsigned int limit_index;
-	bool limit_valid[2];
-	long unsigned int low_upgrade_time;
-	long unsigned int low_downgrade_time;
-	unsigned int scale;
-	struct latency_bucket tmp_buckets[18];
-	struct avg_latency_bucket avg_buckets[18];
-	struct latency_bucket *latency_buckets[2];
-	long unsigned int last_calculate_time;
-	long unsigned int filtered_latency;
-	bool track_bio_latency;
-};
-
-struct throtl_grp;
-
-struct throtl_qnode {
-	struct list_head node;
-	struct bio_list bios;
-	struct throtl_grp *tg;
-};
-
-struct throtl_grp {
-	struct blkg_policy_data pd;
-	struct rb_node rb_node;
-	struct throtl_data *td;
-	struct throtl_service_queue service_queue;
-	struct throtl_qnode qnode_on_self[2];
-	struct throtl_qnode qnode_on_parent[2];
-	long unsigned int disptime;
-	unsigned int flags;
-	bool has_rules[2];
-	uint64_t bps[4];
-	uint64_t bps_conf[4];
-	unsigned int iops[4];
-	unsigned int iops_conf[4];
-	uint64_t bytes_disp[2];
-	unsigned int io_disp[2];
-	long unsigned int last_low_overflow_time[2];
-	uint64_t last_bytes_disp[2];
-	unsigned int last_io_disp[2];
-	long unsigned int last_check_time;
-	long unsigned int latency_target;
-	long unsigned int latency_target_conf;
-	long unsigned int slice_start[2];
-	long unsigned int slice_end[2];
-	long unsigned int last_finish_time;
-	long unsigned int checked_last_finish_time;
-	long unsigned int avg_idletime;
-	long unsigned int idletime_threshold;
-	long unsigned int idletime_threshold_conf;
-	unsigned int bio_cnt;
-	unsigned int bad_bio_cnt;
-	long unsigned int bio_cnt_reset_time;
-	struct blkg_rwstat stat_bytes;
-	struct blkg_rwstat stat_ios;
-};
-
-enum tg_state_flags {
-	THROTL_TG_PENDING = 1,
-	THROTL_TG_WAS_EMPTY = 2,
-};
-
-enum {
-	LIMIT_LOW = 0,
-	LIMIT_MAX = 1,
-	LIMIT_CNT = 2,
-};
-
-struct blk_iolatency {
-	struct rq_qos rqos;
-	struct timer_list timer;
-	atomic_t enabled;
-};
-
-struct iolatency_grp;
-
-struct child_latency_info {
-	spinlock_t lock;
-	u64 last_scale_event;
-	u64 scale_lat;
-	u64 nr_samples;
-	struct iolatency_grp *scale_grp;
-	atomic_t scale_cookie;
-};
-
-struct percentile_stats {
-	u64 total;
-	u64 missed;
-};
-
-struct latency_stat {
-	union {
-		struct percentile_stats ps;
-		struct blk_rq_stat rqs;
-	};
-};
-
-struct iolatency_grp {
-	struct blkg_policy_data pd;
-	struct latency_stat *stats;
-	struct latency_stat cur_stat;
-	struct blk_iolatency *blkiolat;
-	struct rq_depth rq_depth;
-	struct rq_wait rq_wait;
-	atomic64_t window_start;
-	atomic_t scale_cookie;
-	u64 min_lat_nsec;
-	u64 cur_win_nsec;
-	u64 lat_avg;
-	u64 nr_samples;
-	bool ssd;
-	struct child_latency_info child_lat;
-};
-
-enum {
-	MILLION = 1000000,
-	MIN_PERIOD = 1000,
-	MAX_PERIOD = 1000000,
-	MARGIN_MIN_PCT = 10,
-	MARGIN_LOW_PCT = 20,
-	MARGIN_TARGET_PCT = 50,
-	INUSE_ADJ_STEP_PCT = 25,
-	TIMER_SLACK_PCT = 1,
-	WEIGHT_ONE = 65536,
-	VTIME_PER_SEC_SHIFT = 37,
-	VTIME_PER_SEC = 0,
-	VTIME_PER_USEC = 137438,
-	VTIME_PER_NSEC = 137,
-	VRATE_MIN_PPM = 10000,
-	VRATE_MAX_PPM = 100000000,
-	VRATE_MIN = 1374,
-	VRATE_CLAMP_ADJ_PCT = 4,
-	RQ_WAIT_BUSY_PCT = 5,
-	UNBUSY_THR_PCT = 75,
-	MIN_DELAY_THR_PCT = 500,
-	MAX_DELAY_THR_PCT = 25000,
-	MIN_DELAY = 250,
-	MAX_DELAY = 250000,
-	DFGV_USAGE_PCT = 50,
-	DFGV_PERIOD = 100000,
-	MAX_LAGGING_PERIODS = 10,
-	AUTOP_CYCLE_NSEC = 1410065408,
-	IOC_PAGE_SHIFT = 12,
-	IOC_PAGE_SIZE = 4096,
-	IOC_SECT_TO_PAGE_SHIFT = 3,
-	LCOEF_RANDIO_PAGES = 4096,
-};
-
-enum ioc_running {
-	IOC_IDLE = 0,
-	IOC_RUNNING = 1,
-	IOC_STOP = 2,
-};
-
-enum {
-	QOS_ENABLE = 0,
-	QOS_CTRL = 1,
-	NR_QOS_CTRL_PARAMS = 2,
-};
-
-enum {
-	QOS_RPPM = 0,
-	QOS_RLAT = 1,
-	QOS_WPPM = 2,
-	QOS_WLAT = 3,
-	QOS_MIN = 4,
-	QOS_MAX = 5,
-	NR_QOS_PARAMS = 6,
-};
-
-enum {
-	COST_CTRL = 0,
-	COST_MODEL = 1,
-	NR_COST_CTRL_PARAMS = 2,
-};
-
-enum {
-	I_LCOEF_RBPS = 0,
-	I_LCOEF_RSEQIOPS = 1,
-	I_LCOEF_RRANDIOPS = 2,
-	I_LCOEF_WBPS = 3,
-	I_LCOEF_WSEQIOPS = 4,
-	I_LCOEF_WRANDIOPS = 5,
-	NR_I_LCOEFS = 6,
-};
-
-enum {
-	LCOEF_RPAGE = 0,
-	LCOEF_RSEQIO = 1,
-	LCOEF_RRANDIO = 2,
-	LCOEF_WPAGE = 3,
-	LCOEF_WSEQIO = 4,
-	LCOEF_WRANDIO = 5,
-	NR_LCOEFS = 6,
-};
-
-enum {
-	AUTOP_INVALID = 0,
-	AUTOP_HDD = 1,
-	AUTOP_SSD_QD1 = 2,
-	AUTOP_SSD_DFL = 3,
-	AUTOP_SSD_FAST = 4,
-};
-
-struct ioc_params {
-	u32 qos[6];
-	u64 i_lcoefs[6];
-	u64 lcoefs[6];
-	u32 too_fast_vrate_pct;
-	u32 too_slow_vrate_pct;
-};
-
-struct ioc_margins {
-	s64 min;
-	s64 low;
-	s64 target;
-};
-
-struct ioc_missed {
-	local_t nr_met;
-	local_t nr_missed;
-	u32 last_met;
-	u32 last_missed;
-};
-
-struct ioc_pcpu_stat {
-	struct ioc_missed missed[2];
-	local64_t rq_wait_ns;
-	u64 last_rq_wait_ns;
-};
-
-struct ioc {
-	struct rq_qos rqos;
-	bool enabled;
-	struct ioc_params params;
-	struct ioc_margins margins;
-	u32 period_us;
-	u32 timer_slack_ns;
-	u64 vrate_min;
-	u64 vrate_max;
-	spinlock_t lock;
-	struct timer_list timer;
-	struct list_head active_iocgs;
-	struct ioc_pcpu_stat *pcpu_stat;
-	enum ioc_running running;
-	atomic64_t vtime_rate;
-	u64 vtime_base_rate;
-	s64 vtime_err;
-	seqcount_spinlock_t period_seqcount;
-	u64 period_at;
-	u64 period_at_vtime;
-	atomic64_t cur_period;
-	int busy_level;
-	bool weights_updated;
-	atomic_t hweight_gen;
-	u64 dfgv_period_at;
-	u64 dfgv_period_rem;
-	u64 dfgv_usage_us_sum;
-	u64 autop_too_fast_at;
-	u64 autop_too_slow_at;
-	int autop_idx;
-	bool user_qos_params: 1;
-	bool user_cost_model: 1;
-};
-
-struct iocg_pcpu_stat {
-	local64_t abs_vusage;
-};
-
-struct iocg_stat {
-	u64 usage_us;
-	u64 wait_us;
-	u64 indebt_us;
-	u64 indelay_us;
-};
-
-struct ioc_gq {
-	struct blkg_policy_data pd;
-	struct ioc *ioc;
-	u32 cfg_weight;
-	u32 weight;
-	u32 active;
-	u32 inuse;
-	u32 last_inuse;
-	s64 saved_margin;
-	sector_t cursor;
-	atomic64_t vtime;
-	atomic64_t done_vtime;
-	u64 abs_vdebt;
-	u64 delay;
-	u64 delay_at;
-	atomic64_t active_period;
-	struct list_head active_list;
-	u64 child_active_sum;
-	u64 child_inuse_sum;
-	u64 child_adjusted_sum;
-	int hweight_gen;
-	u32 hweight_active;
-	u32 hweight_inuse;
-	u32 hweight_donating;
-	u32 hweight_after_donation;
-	struct list_head walk_list;
-	struct list_head surplus_list;
-	struct wait_queue_head waitq;
-	struct hrtimer waitq_timer;
-	u64 activated_at;
-	struct iocg_pcpu_stat *pcpu_stat;
-	struct iocg_stat local_stat;
-	struct iocg_stat desc_stat;
-	struct iocg_stat last_stat;
-	u64 last_stat_abs_vusage;
-	u64 usage_delta_us;
-	u64 wait_since;
-	u64 indebt_since;
-	u64 indelay_since;
-	int level;
-	struct ioc_gq *ancestors[0];
-};
-
-struct ioc_cgrp {
-	struct blkcg_policy_data cpd;
-	unsigned int dfl_weight;
-};
-
-struct ioc_now {
-	u64 now_ns;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-};
-
-struct iocg_wait {
-	struct wait_queue_entry wait;
-	struct bio *bio;
-	u64 abs_cost;
-	bool committed;
-};
-
-struct iocg_wake_ctx {
-	struct ioc_gq *iocg;
-	u32 hw_inuse;
-	s64 vbudget;
-};
-
-struct trace_event_raw_iocost_iocg_activate {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-	u64 last_period;
-	u64 cur_period;
-	u64 vtime;
-	u32 weight;
-	u32 inuse;
-	u64 hweight_active;
-	u64 hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocg_inuse_update {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u32 old_inuse;
-	u32 new_inuse;
-	u64 old_hweight_inuse;
-	u64 new_hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_ioc_vrate_adj {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u64 old_vrate;
-	u64 new_vrate;
-	int busy_level;
-	u32 read_missed_ppm;
-	u32 write_missed_ppm;
-	u32 rq_wait_pct;
-	int nr_lagging;
-	int nr_shortages;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_iocg_forgive_debt {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u32 usage_pct;
-	u64 old_debt;
-	u64 new_debt;
-	u64 old_delay;
-	u64 new_delay;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iocost_iocg_activate {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocg_inuse_update {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocost_ioc_vrate_adj {
-	u32 devname;
-};
-
-struct trace_event_data_offsets_iocost_iocg_forgive_debt {
-	u32 devname;
-	u32 cgroup;
-};
-
-typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
-
-typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
-
-struct deadline_data {
-	struct rb_root sort_list[2];
-	struct list_head fifo_list[2];
-	struct request *next_rq[2];
-	unsigned int batching;
-	unsigned int starved;
-	int fifo_expire[2];
-	int fifo_batch;
-	int writes_starved;
-	int front_merges;
-	spinlock_t lock;
-	spinlock_t zone_lock;
-	struct list_head dispatch;
-};
-
-struct bfq_entity;
-
-struct bfq_service_tree {
-	struct rb_root active;
-	struct rb_root idle;
-	struct bfq_entity *first_idle;
-	struct bfq_entity *last_idle;
-	u64 vtime;
-	long unsigned int wsum;
-};
-
-struct bfq_sched_data;
-
-struct bfq_entity {
-	struct rb_node rb_node;
-	bool on_st_or_in_serv;
-	u64 start;
-	u64 finish;
-	struct rb_root *tree;
-	u64 min_start;
-	int service;
-	int budget;
-	int dev_weight;
-	int weight;
-	int new_weight;
-	int orig_weight;
-	struct bfq_entity *parent;
-	struct bfq_sched_data *my_sched_data;
-	struct bfq_sched_data *sched_data;
-	int prio_changed;
-	bool in_groups_with_pending_reqs;
-};
-
-struct bfq_sched_data {
-	struct bfq_entity *in_service_entity;
-	struct bfq_entity *next_in_service;
-	struct bfq_service_tree service_tree[3];
-	long unsigned int bfq_class_idle_last_service;
-};
-
-struct bfq_weight_counter {
-	unsigned int weight;
-	unsigned int num_active;
-	struct rb_node weights_node;
-};
-
-struct bfq_ttime {
-	u64 last_end_request;
-	u64 ttime_total;
-	long unsigned int ttime_samples;
-	u64 ttime_mean;
-};
-
-struct bfq_data;
-
-struct bfq_io_cq;
-
-struct bfq_queue {
-	int ref;
-	struct bfq_data *bfqd;
-	short unsigned int ioprio;
-	short unsigned int ioprio_class;
-	short unsigned int new_ioprio;
-	short unsigned int new_ioprio_class;
-	u64 last_serv_time_ns;
-	unsigned int inject_limit;
-	long unsigned int decrease_time_jif;
-	struct bfq_queue *new_bfqq;
-	struct rb_node pos_node;
-	struct rb_root *pos_root;
-	struct rb_root sort_list;
-	struct request *next_rq;
-	int queued[2];
-	int allocated;
-	int meta_pending;
-	struct list_head fifo;
-	struct bfq_entity entity;
-	struct bfq_weight_counter *weight_counter;
-	int max_budget;
-	long unsigned int budget_timeout;
-	int dispatched;
-	long unsigned int flags;
-	struct list_head bfqq_list;
-	struct bfq_ttime ttime;
-	u32 seek_history;
-	struct hlist_node burst_list_node;
-	sector_t last_request_pos;
-	unsigned int requests_within_timer;
-	pid_t pid;
-	struct bfq_io_cq *bic;
-	long unsigned int wr_cur_max_time;
-	long unsigned int soft_rt_next_start;
-	long unsigned int last_wr_start_finish;
-	unsigned int wr_coeff;
-	long unsigned int last_idle_bklogged;
-	long unsigned int service_from_backlogged;
-	long unsigned int service_from_wr;
-	long unsigned int wr_start_at_switch_to_srt;
-	long unsigned int split_time;
-	long unsigned int first_IO_time;
-	u32 max_service_rate;
-	struct bfq_queue *waker_bfqq;
-	struct hlist_node woken_list_node;
-	struct hlist_head woken_list;
-};
-
-struct bfq_group;
-
-struct bfq_data {
-	struct request_queue *queue;
-	struct list_head dispatch;
-	struct bfq_group *root_group;
-	struct rb_root_cached queue_weights_tree;
-	unsigned int num_groups_with_pending_reqs;
-	unsigned int busy_queues[3];
-	int wr_busy_queues;
-	int queued;
-	int rq_in_driver;
-	bool nonrot_with_queueing;
-	int max_rq_in_driver;
-	int hw_tag_samples;
-	int hw_tag;
-	int budgets_assigned;
-	struct hrtimer idle_slice_timer;
-	struct bfq_queue *in_service_queue;
-	sector_t last_position;
-	sector_t in_serv_last_pos;
-	u64 last_completion;
-	struct bfq_queue *last_completed_rq_bfqq;
-	u64 last_empty_occupied_ns;
-	bool wait_dispatch;
-	struct request *waited_rq;
-	bool rqs_injected;
-	u64 first_dispatch;
-	u64 last_dispatch;
-	ktime_t last_budget_start;
-	ktime_t last_idling_start;
-	long unsigned int last_idling_start_jiffies;
-	int peak_rate_samples;
-	u32 sequential_samples;
-	u64 tot_sectors_dispatched;
-	u32 last_rq_max_size;
-	u64 delta_from_first;
-	u32 peak_rate;
-	int bfq_max_budget;
-	struct list_head active_list;
-	struct list_head idle_list;
-	u64 bfq_fifo_expire[2];
-	unsigned int bfq_back_penalty;
-	unsigned int bfq_back_max;
-	u32 bfq_slice_idle;
-	int bfq_user_max_budget;
-	unsigned int bfq_timeout;
-	unsigned int bfq_requests_within_timer;
-	bool strict_guarantees;
-	long unsigned int last_ins_in_burst;
-	long unsigned int bfq_burst_interval;
-	int burst_size;
-	struct bfq_entity *burst_parent_entity;
-	long unsigned int bfq_large_burst_thresh;
-	bool large_burst;
-	struct hlist_head burst_list;
-	bool low_latency;
-	unsigned int bfq_wr_coeff;
-	unsigned int bfq_wr_max_time;
-	unsigned int bfq_wr_rt_max_time;
-	unsigned int bfq_wr_min_idle_time;
-	long unsigned int bfq_wr_min_inter_arr_async;
-	unsigned int bfq_wr_max_softrt_rate;
-	u64 rate_dur_prod;
-	struct bfq_queue oom_bfqq;
-	spinlock_t lock;
-	struct bfq_io_cq *bio_bic;
-	struct bfq_queue *bio_bfqq;
-	unsigned int word_depths[4];
-};
-
-struct bfq_io_cq {
-	struct io_cq icq;
-	struct bfq_queue *bfqq[2];
-	int ioprio;
-	uint64_t blkcg_serial_nr;
-	bool saved_has_short_ttime;
-	bool saved_IO_bound;
-	bool saved_in_large_burst;
-	bool was_in_burst_list;
-	unsigned int saved_weight;
-	long unsigned int saved_wr_coeff;
-	long unsigned int saved_last_wr_start_finish;
-	long unsigned int saved_wr_start_at_switch_to_srt;
-	unsigned int saved_wr_cur_max_time;
-	struct bfq_ttime saved_ttime;
-};
-
-struct bfqg_stats {
-	struct blkg_rwstat bytes;
-	struct blkg_rwstat ios;
-};
-
-struct bfq_group {
-	struct blkg_policy_data pd;
-	char blkg_path[128];
-	int ref;
-	struct bfq_entity entity;
-	struct bfq_sched_data sched_data;
-	void *bfqd;
-	struct bfq_queue *async_bfqq[16];
-	struct bfq_queue *async_idle_bfqq;
-	struct bfq_entity *my_entity;
-	int active_entities;
-	struct rb_root rq_pos_tree;
-	struct bfqg_stats stats;
-};
-
-enum bfqq_state_flags {
-	BFQQF_just_created = 0,
-	BFQQF_busy = 1,
-	BFQQF_wait_request = 2,
-	BFQQF_non_blocking_wait_rq = 3,
-	BFQQF_fifo_expire = 4,
-	BFQQF_has_short_ttime = 5,
-	BFQQF_sync = 6,
-	BFQQF_IO_bound = 7,
-	BFQQF_in_large_burst = 8,
-	BFQQF_softrt_update = 9,
-	BFQQF_coop = 10,
-	BFQQF_split_coop = 11,
-	BFQQF_has_waker = 12,
-};
-
-enum bfqq_expiration {
-	BFQQE_TOO_IDLE = 0,
-	BFQQE_BUDGET_TIMEOUT = 1,
-	BFQQE_BUDGET_EXHAUSTED = 2,
-	BFQQE_NO_MORE_REQUESTS = 3,
-	BFQQE_PREEMPTED = 4,
-};
-
-struct bfq_group_data {
-	struct blkcg_policy_data pd;
-	unsigned int weight;
-};
-
-enum bip_flags {
-	BIP_BLOCK_INTEGRITY = 1,
-	BIP_MAPPED_INTEGRITY = 2,
-	BIP_CTRL_NOCHECK = 4,
-	BIP_DISK_NOCHECK = 8,
-	BIP_IP_CHECKSUM = 16,
-};
-
-enum blk_integrity_flags {
-	BLK_INTEGRITY_VERIFY = 1,
-	BLK_INTEGRITY_GENERATE = 2,
-	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
-	BLK_INTEGRITY_IP_CHECKSUM = 8,
-};
-
-struct integrity_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_integrity *, char *);
-	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
-};
-
-enum t10_dif_type {
-	T10_PI_TYPE0_PROTECTION = 0,
-	T10_PI_TYPE1_PROTECTION = 1,
-	T10_PI_TYPE2_PROTECTION = 2,
-	T10_PI_TYPE3_PROTECTION = 3,
-};
-
-struct t10_pi_tuple {
-	__be16 guard_tag;
-	__be16 app_tag;
-	__be32 ref_tag;
-};
-
-typedef __be16 csum_fn(void *, unsigned int);
-
-struct virtio_device_id {
-	__u32 device;
-	__u32 vendor;
-};
-
-struct virtio_device;
-
-struct virtqueue {
-	struct list_head list;
-	void (*callback)(struct virtqueue *);
-	const char *name;
-	struct virtio_device *vdev;
-	unsigned int index;
-	unsigned int num_free;
-	void *priv;
-};
-
-struct vringh_config_ops;
-
-struct virtio_config_ops;
-
-struct virtio_device {
-	int index;
-	bool failed;
-	bool config_enabled;
-	bool config_change_pending;
-	spinlock_t config_lock;
-	struct device dev;
-	struct virtio_device_id id;
-	const struct virtio_config_ops *config;
-	const struct vringh_config_ops *vringh_config;
-	struct list_head vqs;
-	u64 features;
-	void *priv;
-};
-
-typedef void vq_callback_t(struct virtqueue *);
-
-struct irq_affinity___2;
-
-struct virtio_shm_region;
-
-struct virtio_config_ops {
-	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
-	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
-	u32 (*generation)(struct virtio_device *);
-	u8 (*get_status)(struct virtio_device *);
-	void (*set_status)(struct virtio_device *, u8);
-	void (*reset)(struct virtio_device *);
-	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity___2 *);
-	void (*del_vqs)(struct virtio_device *);
-	u64 (*get_features)(struct virtio_device *);
-	int (*finalize_features)(struct virtio_device *);
-	const char * (*bus_name)(struct virtio_device *);
-	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
-	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
-	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
-};
-
-struct virtio_shm_region {
-	u64 addr;
-	u64 len;
-};
-
-struct irq_poll;
-
-typedef int irq_poll_fn(struct irq_poll *, int);
-
-struct irq_poll {
-	struct list_head list;
-	long unsigned int state;
-	int weight;
-	irq_poll_fn *poll;
-};
-
-struct dim_sample {
-	ktime_t time;
-	u32 pkt_ctr;
-	u32 byte_ctr;
-	u16 event_ctr;
-	u32 comp_ctr;
-};
-
-struct dim_stats {
-	int ppms;
-	int bpms;
-	int epms;
-	int cpms;
-	int cpe_ratio;
-};
-
-struct dim {
-	u8 state;
-	struct dim_stats prev_stats;
-	struct dim_sample start_sample;
-	struct dim_sample measuring_sample;
-	struct work_struct work;
-	void *priv;
-	u8 profile_ix;
-	u8 mode;
-	u8 tune_state;
-	u8 steps_right;
-	u8 steps_left;
-	u8 tired;
-};
-
-enum rdma_nl_counter_mode {
-	RDMA_COUNTER_MODE_NONE = 0,
-	RDMA_COUNTER_MODE_AUTO = 1,
-	RDMA_COUNTER_MODE_MANUAL = 2,
-	RDMA_COUNTER_MODE_MAX = 3,
-};
-
-enum rdma_nl_counter_mask {
-	RDMA_COUNTER_MASK_QP_TYPE = 1,
-	RDMA_COUNTER_MASK_PID = 2,
-};
-
-enum rdma_restrack_type {
-	RDMA_RESTRACK_PD = 0,
-	RDMA_RESTRACK_CQ = 1,
-	RDMA_RESTRACK_QP = 2,
-	RDMA_RESTRACK_CM_ID = 3,
-	RDMA_RESTRACK_MR = 4,
-	RDMA_RESTRACK_CTX = 5,
-	RDMA_RESTRACK_COUNTER = 6,
-	RDMA_RESTRACK_MAX = 7,
-};
-
-struct rdma_restrack_entry {
-	bool valid;
-	struct kref kref;
-	struct completion comp;
-	struct task_struct *task;
-	const char *kern_name;
-	enum rdma_restrack_type type;
-	bool user;
-	u32 id;
-};
-
-struct rdma_link_ops {
-	struct list_head list;
-	const char *type;
-	int (*newlink)(const char *, struct net_device *);
-};
-
-struct auto_mode_param {
-	int qp_type;
-};
-
-struct rdma_counter_mode {
-	enum rdma_nl_counter_mode mode;
-	enum rdma_nl_counter_mask mask;
-	struct auto_mode_param param;
-};
-
-struct rdma_hw_stats;
-
-struct rdma_port_counter {
-	struct rdma_counter_mode mode;
-	struct rdma_hw_stats *hstats;
-	unsigned int num_counters;
-	struct mutex lock;
-};
-
-struct rdma_hw_stats {
-	struct mutex lock;
-	long unsigned int timestamp;
-	long unsigned int lifespan;
-	const char * const *names;
-	int num_counters;
-	u64 value[0];
-};
-
-struct ib_device;
-
-struct rdma_counter {
-	struct rdma_restrack_entry res;
-	struct ib_device *device;
-	uint32_t id;
-	struct kref kref;
-	struct rdma_counter_mode mode;
-	struct mutex lock;
-	struct rdma_hw_stats *stats;
-	u8 port;
-};
-
-enum rdma_driver_id {
-	RDMA_DRIVER_UNKNOWN = 0,
-	RDMA_DRIVER_MLX5 = 1,
-	RDMA_DRIVER_MLX4 = 2,
-	RDMA_DRIVER_CXGB3 = 3,
-	RDMA_DRIVER_CXGB4 = 4,
-	RDMA_DRIVER_MTHCA = 5,
-	RDMA_DRIVER_BNXT_RE = 6,
-	RDMA_DRIVER_OCRDMA = 7,
-	RDMA_DRIVER_NES = 8,
-	RDMA_DRIVER_I40IW = 9,
-	RDMA_DRIVER_VMW_PVRDMA = 10,
-	RDMA_DRIVER_QEDR = 11,
-	RDMA_DRIVER_HNS = 12,
-	RDMA_DRIVER_USNIC = 13,
-	RDMA_DRIVER_RXE = 14,
-	RDMA_DRIVER_HFI1 = 15,
-	RDMA_DRIVER_QIB = 16,
-	RDMA_DRIVER_EFA = 17,
-	RDMA_DRIVER_SIW = 18,
-};
-
-enum ib_cq_notify_flags {
-	IB_CQ_SOLICITED = 1,
-	IB_CQ_NEXT_COMP = 2,
-	IB_CQ_SOLICITED_MASK = 3,
-	IB_CQ_REPORT_MISSED_EVENTS = 4,
-};
-
-struct ib_mad;
-
-enum rdma_link_layer {
-	IB_LINK_LAYER_UNSPECIFIED = 0,
-	IB_LINK_LAYER_INFINIBAND = 1,
-	IB_LINK_LAYER_ETHERNET = 2,
-};
-
-enum rdma_netdev_t {
-	RDMA_NETDEV_OPA_VNIC = 0,
-	RDMA_NETDEV_IPOIB = 1,
-};
-
-enum ib_srq_attr_mask {
-	IB_SRQ_MAX_WR = 1,
-	IB_SRQ_LIMIT = 2,
-};
-
-enum ib_mr_type {
-	IB_MR_TYPE_MEM_REG = 0,
-	IB_MR_TYPE_SG_GAPS = 1,
-	IB_MR_TYPE_DM = 2,
-	IB_MR_TYPE_USER = 3,
-	IB_MR_TYPE_DMA = 4,
-	IB_MR_TYPE_INTEGRITY = 5,
-};
-
-enum ib_uverbs_advise_mr_advice {
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
-};
-
-struct uverbs_attr_bundle;
-
-struct rdma_cm_id;
-
-struct iw_cm_id;
-
-struct iw_cm_conn_param;
-
-struct ib_qp;
-
-struct ib_send_wr;
-
-struct ib_recv_wr;
-
-struct ib_cq;
-
-struct ib_wc;
-
-struct ib_srq;
-
-struct ib_grh;
-
-struct ib_device_attr;
-
-struct ib_udata;
-
-struct ib_device_modify;
-
-struct ib_port_attr;
-
-struct ib_port_modify;
-
-struct ib_port_immutable;
-
-struct rdma_netdev_alloc_params;
-
-union ib_gid;
-
-struct ib_gid_attr;
-
-struct ib_ucontext;
-
-struct rdma_user_mmap_entry;
-
-struct ib_pd;
-
-struct ib_ah;
-
-struct rdma_ah_init_attr;
-
-struct rdma_ah_attr;
-
-struct ib_srq_init_attr;
-
-struct ib_srq_attr;
-
-struct ib_qp_init_attr;
-
-struct ib_qp_attr;
-
-struct ib_cq_init_attr;
-
-struct ib_mr;
-
-struct ib_sge;
-
-struct ib_mr_status;
-
-struct ib_mw;
-
-struct ib_xrcd;
-
-struct ib_flow;
-
-struct ib_flow_attr;
-
-struct ib_flow_action;
-
-struct ib_flow_action_attrs_esp;
-
-struct ib_wq;
-
-struct ib_wq_init_attr;
-
-struct ib_wq_attr;
-
-struct ib_rwq_ind_table;
-
-struct ib_rwq_ind_table_init_attr;
-
-struct ib_dm;
-
-struct ib_dm_alloc_attr;
-
-struct ib_dm_mr_attr;
-
-struct ib_counters;
-
-struct ib_counters_read_attr;
-
-struct ib_device_ops {
-	struct module *owner;
-	enum rdma_driver_id driver_id;
-	u32 uverbs_abi_ver;
-	unsigned int uverbs_no_driver_id_binding: 1;
-	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
-	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	void (*drain_rq)(struct ib_qp *);
-	void (*drain_sq)(struct ib_qp *);
-	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
-	int (*peek_cq)(struct ib_cq *, int);
-	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
-	int (*req_ncomp_notif)(struct ib_cq *, int);
-	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	int (*process_mad)(struct ib_device *, int, u8, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
-	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
-	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
-	void (*get_dev_fw_str)(struct ib_device *, char *);
-	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
-	int (*query_port)(struct ib_device *, u8, struct ib_port_attr *);
-	int (*modify_port)(struct ib_device *, u8, int, struct ib_port_modify *);
-	int (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);
-	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u8);
-	struct net_device * (*get_netdev)(struct ib_device *, u8);
-	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u8, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
-	int (*rdma_netdev_get_params)(struct ib_device *, u8, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
-	int (*query_gid)(struct ib_device *, u8, int, union ib_gid *);
-	int (*add_gid)(const struct ib_gid_attr *, void **);
-	int (*del_gid)(const struct ib_gid_attr *, void **);
-	int (*query_pkey)(struct ib_device *, u8, u16, u16 *);
-	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
-	void (*dealloc_ucontext)(struct ib_ucontext *);
-	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
-	void (*mmap_free)(struct rdma_user_mmap_entry *);
-	void (*disassociate_ucontext)(struct ib_ucontext *);
-	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
-	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
-	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
-	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
-	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
-	int (*destroy_ah)(struct ib_ah *, u32);
-	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
-	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
-	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
-	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
-	struct ib_qp * (*create_qp)(struct ib_pd *, struct ib_qp_init_attr *, struct ib_udata *);
-	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
-	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
-	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
-	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
-	int (*modify_cq)(struct ib_cq *, u16, u16);
-	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
-	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
-	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
-	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
-	int (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
-	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
-	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
-	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
-	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
-	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
-	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
-	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
-	int (*dealloc_mw)(struct ib_mw *);
-	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
-	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
-	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
-	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
-	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
-	int (*destroy_flow)(struct ib_flow *);
-	struct ib_flow_action * (*create_flow_action_esp)(struct ib_device *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*destroy_flow_action)(struct ib_flow_action *);
-	int (*modify_flow_action_esp)(struct ib_flow_action *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*set_vf_link_state)(struct ib_device *, int, u8, int);
-	int (*get_vf_config)(struct ib_device *, int, u8, struct ifla_vf_info *);
-	int (*get_vf_stats)(struct ib_device *, int, u8, struct ifla_vf_stats *);
-	int (*get_vf_guid)(struct ib_device *, int, u8, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*set_vf_guid)(struct ib_device *, int, u8, u64, int);
-	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
-	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
-	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
-	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
-	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
-	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
-	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
-	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
-	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
-	int (*destroy_counters)(struct ib_counters *);
-	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
-	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
-	struct rdma_hw_stats * (*alloc_hw_stats)(struct ib_device *, u8);
-	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u8, int);
-	int (*init_port)(struct ib_device *, u8, struct kobject *);
-	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
-	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
-	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
-	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
-	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
-	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
-	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
-	int (*enable_driver)(struct ib_device *);
-	void (*dealloc_driver)(struct ib_device *);
-	void (*iw_add_ref)(struct ib_qp *);
-	void (*iw_rem_ref)(struct ib_qp *);
-	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
-	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
-	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
-	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
-	int (*iw_create_listen)(struct iw_cm_id *, int);
-	int (*iw_destroy_listen)(struct iw_cm_id *);
-	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
-	int (*counter_unbind_qp)(struct ib_qp *);
-	int (*counter_dealloc)(struct rdma_counter *);
-	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
-	int (*counter_update_stats)(struct rdma_counter *);
-	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
-	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
-	size_t size_ib_ah;
-	size_t size_ib_counters;
-	size_t size_ib_cq;
-	size_t size_ib_mw;
-	size_t size_ib_pd;
-	size_t size_ib_rwq_ind_table;
-	size_t size_ib_srq;
-	size_t size_ib_ucontext;
-	size_t size_ib_xrcd;
-};
-
-struct ib_core_device {
-	struct device dev;
-	possible_net_t rdma_net;
-	struct kobject *ports_kobj;
-	struct list_head port_list;
-	struct ib_device *owner;
-};
-
-enum ib_atomic_cap {
-	IB_ATOMIC_NONE = 0,
-	IB_ATOMIC_HCA = 1,
-	IB_ATOMIC_GLOB = 2,
-};
-
-struct ib_odp_caps {
-	uint64_t general_caps;
-	struct {
-		uint32_t rc_odp_caps;
-		uint32_t uc_odp_caps;
-		uint32_t ud_odp_caps;
-		uint32_t xrc_odp_caps;
-	} per_transport_caps;
-};
-
-struct ib_rss_caps {
-	u32 supported_qpts;
-	u32 max_rwq_indirection_tables;
-	u32 max_rwq_indirection_table_size;
-};
-
-struct ib_tm_caps {
-	u32 max_rndv_hdr_size;
-	u32 max_num_tags;
-	u32 flags;
-	u32 max_ops;
-	u32 max_sge;
-};
-
-struct ib_cq_caps {
-	u16 max_cq_moderation_count;
-	u16 max_cq_moderation_period;
-};
-
-struct ib_device_attr {
-	u64 fw_ver;
-	__be64 sys_image_guid;
-	u64 max_mr_size;
-	u64 page_size_cap;
-	u32 vendor_id;
-	u32 vendor_part_id;
-	u32 hw_ver;
-	int max_qp;
-	int max_qp_wr;
-	u64 device_cap_flags;
-	int max_send_sge;
-	int max_recv_sge;
-	int max_sge_rd;
-	int max_cq;
-	int max_cqe;
-	int max_mr;
-	int max_pd;
-	int max_qp_rd_atom;
-	int max_ee_rd_atom;
-	int max_res_rd_atom;
-	int max_qp_init_rd_atom;
-	int max_ee_init_rd_atom;
-	enum ib_atomic_cap atomic_cap;
-	enum ib_atomic_cap masked_atomic_cap;
-	int max_ee;
-	int max_rdd;
-	int max_mw;
-	int max_raw_ipv6_qp;
-	int max_raw_ethy_qp;
-	int max_mcast_grp;
-	int max_mcast_qp_attach;
-	int max_total_mcast_qp_attach;
-	int max_ah;
-	int max_srq;
-	int max_srq_wr;
-	int max_srq_sge;
-	unsigned int max_fast_reg_page_list_len;
-	unsigned int max_pi_fast_reg_page_list_len;
-	u16 max_pkeys;
-	u8 local_ca_ack_delay;
-	int sig_prot_cap;
-	int sig_guard_cap;
-	struct ib_odp_caps odp_caps;
-	uint64_t timestamp_mask;
-	uint64_t hca_core_clock;
-	struct ib_rss_caps rss_caps;
-	u32 max_wq_type_rq;
-	u32 raw_packet_caps;
-	struct ib_tm_caps tm_caps;
-	struct ib_cq_caps cq_caps;
-	u64 max_dm_size;
-	u32 max_sgl_rd;
-};
-
-struct rdma_restrack_root;
-
-struct uapi_definition;
-
-struct ib_port_data;
-
-struct ib_device {
-	struct device *dma_device;
-	struct ib_device_ops ops;
-	char name[64];
-	struct callback_head callback_head;
-	struct list_head event_handler_list;
-	struct rw_semaphore event_handler_rwsem;
-	spinlock_t qp_open_list_lock;
-	struct rw_semaphore client_data_rwsem;
-	struct xarray client_data;
-	struct mutex unregistration_lock;
-	rwlock_t cache_lock;
-	struct ib_port_data *port_data;
-	int num_comp_vectors;
-	union {
-		struct device dev;
-		struct ib_core_device coredev;
-	};
-	const struct attribute_group *groups[3];
-	u64 uverbs_cmd_mask;
-	u64 uverbs_ex_cmd_mask;
-	char node_desc[64];
-	__be64 node_guid;
-	u32 local_dma_lkey;
-	u16 is_switch: 1;
-	u16 kverbs_provider: 1;
-	u16 use_cq_dim: 1;
-	u8 node_type;
-	u8 phys_port_cnt;
-	struct ib_device_attr attrs;
-	struct attribute_group *hw_stats_ag;
-	struct rdma_hw_stats *hw_stats;
-	u32 index;
-	spinlock_t cq_pools_lock;
-	struct list_head cq_pools[3];
-	struct rdma_restrack_root *res;
-	const struct uapi_definition *driver_def;
-	refcount_t refcount;
-	struct completion unreg_completion;
-	struct work_struct unregistration_work;
-	const struct rdma_link_ops *link_ops;
-	struct mutex compat_devs_mutex;
-	struct xarray compat_devs;
-	char iw_ifname[16];
-	u32 iw_driver_flags;
-	u32 lag_flags;
-};
-
-enum ib_signature_type {
-	IB_SIG_TYPE_NONE = 0,
-	IB_SIG_TYPE_T10_DIF = 1,
-};
-
-enum ib_t10_dif_bg_type {
-	IB_T10DIF_CRC = 0,
-	IB_T10DIF_CSUM = 1,
-};
-
-struct ib_t10_dif_domain {
-	enum ib_t10_dif_bg_type bg_type;
-	u16 pi_interval;
-	u16 bg;
-	u16 app_tag;
-	u32 ref_tag;
-	bool ref_remap;
-	bool app_escape;
-	bool ref_escape;
-	u16 apptag_check_mask;
-};
-
-struct ib_sig_domain {
-	enum ib_signature_type sig_type;
-	union {
-		struct ib_t10_dif_domain dif;
-	} sig;
-};
-
-struct ib_sig_attrs {
-	u8 check_mask;
-	struct ib_sig_domain mem;
-	struct ib_sig_domain wire;
-	int meta_length;
-};
-
-enum ib_sig_err_type {
-	IB_SIG_BAD_GUARD = 0,
-	IB_SIG_BAD_REFTAG = 1,
-	IB_SIG_BAD_APPTAG = 2,
-};
-
-struct ib_sig_err {
-	enum ib_sig_err_type err_type;
-	u32 expected;
-	u32 actual;
-	u64 sig_err_offset;
-	u32 key;
-};
-
-enum ib_uverbs_flow_action_esp_keymat {
-	IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM = 0,
-};
-
-struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
-	__u64 iv;
-	__u32 iv_algo;
-	__u32 salt;
-	__u32 icv_len;
-	__u32 key_len;
-	__u32 aes_key[8];
-};
-
-enum ib_uverbs_flow_action_esp_replay {
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE = 0,
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP = 1,
-};
-
-struct ib_uverbs_flow_action_esp_replay_bmp {
-	__u32 size;
-};
-
-union ib_gid {
-	u8 raw[16];
-	struct {
-		__be64 subnet_prefix;
-		__be64 interface_id;
-	} global;
-};
-
-enum ib_gid_type {
-	IB_GID_TYPE_IB = 0,
-	IB_GID_TYPE_ROCE = 1,
-	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
-	IB_GID_TYPE_SIZE = 3,
-};
-
-struct ib_gid_attr {
-	struct net_device *ndev;
-	struct ib_device *device;
-	union ib_gid gid;
-	enum ib_gid_type gid_type;
-	u16 index;
-	u8 port_num;
-};
-
-struct ib_cq_init_attr {
-	unsigned int cqe;
-	u32 comp_vector;
-	u32 flags;
-};
-
-struct ib_dm_mr_attr {
-	u64 length;
-	u64 offset;
-	u32 access_flags;
-};
-
-struct ib_dm_alloc_attr {
-	u64 length;
-	u32 alignment;
-	u32 flags;
-};
-
-enum ib_mtu {
-	IB_MTU_256 = 1,
-	IB_MTU_512 = 2,
-	IB_MTU_1024 = 3,
-	IB_MTU_2048 = 4,
-	IB_MTU_4096 = 5,
-};
-
-enum ib_port_state {
-	IB_PORT_NOP = 0,
-	IB_PORT_DOWN = 1,
-	IB_PORT_INIT = 2,
-	IB_PORT_ARMED = 3,
-	IB_PORT_ACTIVE = 4,
-	IB_PORT_ACTIVE_DEFER = 5,
-};
-
-struct ib_port_attr {
-	u64 subnet_prefix;
-	enum ib_port_state state;
-	enum ib_mtu max_mtu;
-	enum ib_mtu active_mtu;
-	u32 phys_mtu;
-	int gid_tbl_len;
-	unsigned int ip_gids: 1;
-	u32 port_cap_flags;
-	u32 max_msg_sz;
-	u32 bad_pkey_cntr;
-	u32 qkey_viol_cntr;
-	u16 pkey_tbl_len;
-	u32 sm_lid;
-	u32 lid;
-	u8 lmc;
-	u8 max_vl_num;
-	u8 sm_sl;
-	u8 subnet_timeout;
-	u8 init_type_reply;
-	u8 active_width;
-	u16 active_speed;
-	u8 phys_state;
-	u16 port_cap_flags2;
-};
-
-struct ib_device_modify {
-	u64 sys_image_guid;
-	char node_desc[64];
-};
-
-struct ib_port_modify {
-	u32 set_port_cap_mask;
-	u32 clr_port_cap_mask;
-	u8 init_type;
-};
-
-enum ib_event_type {
-	IB_EVENT_CQ_ERR = 0,
-	IB_EVENT_QP_FATAL = 1,
-	IB_EVENT_QP_REQ_ERR = 2,
-	IB_EVENT_QP_ACCESS_ERR = 3,
-	IB_EVENT_COMM_EST = 4,
-	IB_EVENT_SQ_DRAINED = 5,
-	IB_EVENT_PATH_MIG = 6,
-	IB_EVENT_PATH_MIG_ERR = 7,
-	IB_EVENT_DEVICE_FATAL = 8,
-	IB_EVENT_PORT_ACTIVE = 9,
-	IB_EVENT_PORT_ERR = 10,
-	IB_EVENT_LID_CHANGE = 11,
-	IB_EVENT_PKEY_CHANGE = 12,
-	IB_EVENT_SM_CHANGE = 13,
-	IB_EVENT_SRQ_ERR = 14,
-	IB_EVENT_SRQ_LIMIT_REACHED = 15,
-	IB_EVENT_QP_LAST_WQE_REACHED = 16,
-	IB_EVENT_CLIENT_REREGISTER = 17,
-	IB_EVENT_GID_CHANGE = 18,
-	IB_EVENT_WQ_FATAL = 19,
-};
-
-struct ib_ucq_object;
-
-typedef void (*ib_comp_handler)(struct ib_cq *, void *);
-
-struct ib_event;
-
-struct ib_cq {
-	struct ib_device *device;
-	struct ib_ucq_object *uobject;
-	ib_comp_handler comp_handler;
-	void (*event_handler)(struct ib_event *, void *);
-	void *cq_context;
-	int cqe;
-	unsigned int cqe_used;
-	atomic_t usecnt;
-	enum ib_poll_context poll_ctx;
-	struct ib_wc *wc;
-	struct list_head pool_entry;
-	union {
-		struct irq_poll iop;
-		struct work_struct work;
-	};
-	struct workqueue_struct *comp_wq;
-	struct dim *dim;
-	ktime_t timestamp;
-	u8 interrupt: 1;
-	u8 shared: 1;
-	unsigned int comp_vector;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_uqp_object;
-
-enum ib_qp_type {
-	IB_QPT_SMI = 0,
-	IB_QPT_GSI = 1,
-	IB_QPT_RC = 2,
-	IB_QPT_UC = 3,
-	IB_QPT_UD = 4,
-	IB_QPT_RAW_IPV6 = 5,
-	IB_QPT_RAW_ETHERTYPE = 6,
-	IB_QPT_RAW_PACKET = 8,
-	IB_QPT_XRC_INI = 9,
-	IB_QPT_XRC_TGT = 10,
-	IB_QPT_MAX = 11,
-	IB_QPT_DRIVER = 255,
-	IB_QPT_RESERVED1 = 4096,
-	IB_QPT_RESERVED2 = 4097,
-	IB_QPT_RESERVED3 = 4098,
-	IB_QPT_RESERVED4 = 4099,
-	IB_QPT_RESERVED5 = 4100,
-	IB_QPT_RESERVED6 = 4101,
-	IB_QPT_RESERVED7 = 4102,
-	IB_QPT_RESERVED8 = 4103,
-	IB_QPT_RESERVED9 = 4104,
-	IB_QPT_RESERVED10 = 4105,
-};
-
-struct ib_qp_security;
-
-struct ib_qp {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_cq *send_cq;
-	struct ib_cq *recv_cq;
-	spinlock_t mr_lock;
-	int mrs_used;
-	struct list_head rdma_mrs;
-	struct list_head sig_mrs;
-	struct ib_srq *srq;
-	struct ib_xrcd *xrcd;
-	struct list_head xrcd_list;
-	atomic_t usecnt;
-	struct list_head open_list;
-	struct ib_qp *real_qp;
-	struct ib_uqp_object *uobject;
-	void (*event_handler)(struct ib_event *, void *);
-	void *qp_context;
-	const struct ib_gid_attr *av_sgid_attr;
-	const struct ib_gid_attr *alt_path_sgid_attr;
-	u32 qp_num;
-	u32 max_write_sge;
-	u32 max_read_sge;
-	enum ib_qp_type qp_type;
-	struct ib_rwq_ind_table *rwq_ind_tbl;
-	struct ib_qp_security *qp_sec;
-	u8 port;
-	bool integrity_en;
-	struct rdma_restrack_entry res;
-	struct rdma_counter *counter;
-};
-
-struct ib_usrq_object;
-
-enum ib_srq_type {
-	IB_SRQT_BASIC = 0,
-	IB_SRQT_XRC = 1,
-	IB_SRQT_TM = 2,
-};
-
-struct ib_srq {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_usrq_object *uobject;
-	void (*event_handler)(struct ib_event *, void *);
-	void *srq_context;
-	enum ib_srq_type srq_type;
-	atomic_t usecnt;
-	struct {
-		struct ib_cq *cq;
-		union {
-			struct {
-				struct ib_xrcd *xrcd;
-				u32 srq_num;
-			} xrc;
-		};
-	} ext;
-};
-
-struct ib_uwq_object;
-
-enum ib_wq_state {
-	IB_WQS_RESET = 0,
-	IB_WQS_RDY = 1,
-	IB_WQS_ERR = 2,
-};
-
-enum ib_wq_type {
-	IB_WQT_RQ = 0,
-};
-
-struct ib_wq {
-	struct ib_device *device;
-	struct ib_uwq_object *uobject;
-	void *wq_context;
-	void (*event_handler)(struct ib_event *, void *);
-	struct ib_pd *pd;
-	struct ib_cq *cq;
-	u32 wq_num;
-	enum ib_wq_state state;
-	enum ib_wq_type wq_type;
-	atomic_t usecnt;
-};
-
-struct ib_event {
-	struct ib_device *device;
-	union {
-		struct ib_cq *cq;
-		struct ib_qp *qp;
-		struct ib_srq *srq;
-		struct ib_wq *wq;
-		u8 port_num;
-	} element;
-	enum ib_event_type event;
-};
-
-struct ib_global_route {
-	const struct ib_gid_attr *sgid_attr;
-	union ib_gid dgid;
-	u32 flow_label;
-	u8 sgid_index;
-	u8 hop_limit;
-	u8 traffic_class;
-};
-
-struct ib_grh {
-	__be32 version_tclass_flow;
-	__be16 paylen;
-	u8 next_hdr;
-	u8 hop_limit;
-	union ib_gid sgid;
-	union ib_gid dgid;
-};
-
-struct ib_mr_status {
-	u32 fail_status;
-	struct ib_sig_err sig_err;
-};
-
-struct rdma_ah_init_attr {
-	struct rdma_ah_attr *ah_attr;
-	u32 flags;
-	struct net_device *xmit_slave;
-};
-
-enum rdma_ah_attr_type {
-	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
-	RDMA_AH_ATTR_TYPE_IB = 1,
-	RDMA_AH_ATTR_TYPE_ROCE = 2,
-	RDMA_AH_ATTR_TYPE_OPA = 3,
-};
-
-struct ib_ah_attr {
-	u16 dlid;
-	u8 src_path_bits;
-};
-
-struct roce_ah_attr {
-	u8 dmac[6];
-};
-
-struct opa_ah_attr {
-	u32 dlid;
-	u8 src_path_bits;
-	bool make_grd;
-};
-
-struct rdma_ah_attr {
-	struct ib_global_route grh;
-	u8 sl;
-	u8 static_rate;
-	u8 port_num;
-	u8 ah_flags;
-	enum rdma_ah_attr_type type;
-	union {
-		struct ib_ah_attr ib;
-		struct roce_ah_attr roce;
-		struct opa_ah_attr opa;
-	};
-};
-
-enum ib_wc_status {
-	IB_WC_SUCCESS = 0,
-	IB_WC_LOC_LEN_ERR = 1,
-	IB_WC_LOC_QP_OP_ERR = 2,
-	IB_WC_LOC_EEC_OP_ERR = 3,
-	IB_WC_LOC_PROT_ERR = 4,
-	IB_WC_WR_FLUSH_ERR = 5,
-	IB_WC_MW_BIND_ERR = 6,
-	IB_WC_BAD_RESP_ERR = 7,
-	IB_WC_LOC_ACCESS_ERR = 8,
-	IB_WC_REM_INV_REQ_ERR = 9,
-	IB_WC_REM_ACCESS_ERR = 10,
-	IB_WC_REM_OP_ERR = 11,
-	IB_WC_RETRY_EXC_ERR = 12,
-	IB_WC_RNR_RETRY_EXC_ERR = 13,
-	IB_WC_LOC_RDD_VIOL_ERR = 14,
-	IB_WC_REM_INV_RD_REQ_ERR = 15,
-	IB_WC_REM_ABORT_ERR = 16,
-	IB_WC_INV_EECN_ERR = 17,
-	IB_WC_INV_EEC_STATE_ERR = 18,
-	IB_WC_FATAL_ERR = 19,
-	IB_WC_RESP_TIMEOUT_ERR = 20,
-	IB_WC_GENERAL_ERR = 21,
-};
-
-enum ib_wc_opcode {
-	IB_WC_SEND = 0,
-	IB_WC_RDMA_WRITE = 1,
-	IB_WC_RDMA_READ = 2,
-	IB_WC_COMP_SWAP = 3,
-	IB_WC_FETCH_ADD = 4,
-	IB_WC_BIND_MW = 5,
-	IB_WC_LOCAL_INV = 6,
-	IB_WC_LSO = 7,
-	IB_WC_REG_MR = 8,
-	IB_WC_MASKED_COMP_SWAP = 9,
-	IB_WC_MASKED_FETCH_ADD = 10,
-	IB_WC_RECV = 128,
-	IB_WC_RECV_RDMA_WITH_IMM = 129,
-};
-
-struct ib_cqe {
-	void (*done)(struct ib_cq *, struct ib_wc *);
-};
-
-struct ib_wc {
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	enum ib_wc_status status;
-	enum ib_wc_opcode opcode;
-	u32 vendor_err;
-	u32 byte_len;
-	struct ib_qp *qp;
-	union {
-		__be32 imm_data;
-		u32 invalidate_rkey;
-	} ex;
-	u32 src_qp;
-	u32 slid;
-	int wc_flags;
-	u16 pkey_index;
-	u8 sl;
-	u8 dlid_path_bits;
-	u8 port_num;
-	u8 smac[6];
-	u16 vlan_id;
-	u8 network_hdr_type;
-};
-
-struct ib_srq_attr {
-	u32 max_wr;
-	u32 max_sge;
-	u32 srq_limit;
-};
-
-struct ib_xrcd {
-	struct ib_device *device;
-	atomic_t usecnt;
-	struct inode *inode;
-	struct rw_semaphore tgt_qps_rwsem;
-	struct xarray tgt_qps;
-};
-
-struct ib_srq_init_attr {
-	void (*event_handler)(struct ib_event *, void *);
-	void *srq_context;
-	struct ib_srq_attr attr;
-	enum ib_srq_type srq_type;
-	struct {
-		struct ib_cq *cq;
-		union {
-			struct {
-				struct ib_xrcd *xrcd;
-			} xrc;
-			struct {
-				u32 max_num_tags;
-			} tag_matching;
-		};
-	} ext;
-};
-
-struct ib_qp_cap {
-	u32 max_send_wr;
-	u32 max_recv_wr;
-	u32 max_send_sge;
-	u32 max_recv_sge;
-	u32 max_inline_data;
-	u32 max_rdma_ctxs;
-};
-
-enum ib_sig_type {
-	IB_SIGNAL_ALL_WR = 0,
-	IB_SIGNAL_REQ_WR = 1,
-};
-
-struct ib_qp_init_attr {
-	void (*event_handler)(struct ib_event *, void *);
-	void *qp_context;
-	struct ib_cq *send_cq;
-	struct ib_cq *recv_cq;
-	struct ib_srq *srq;
-	struct ib_xrcd *xrcd;
-	struct ib_qp_cap cap;
-	enum ib_sig_type sq_sig_type;
-	enum ib_qp_type qp_type;
-	u32 create_flags;
-	u8 port_num;
-	struct ib_rwq_ind_table *rwq_ind_tbl;
-	u32 source_qpn;
-};
-
-struct ib_uobject;
-
-struct ib_rwq_ind_table {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-	u32 ind_tbl_num;
-	u32 log_ind_tbl_size;
-	struct ib_wq **ind_tbl;
-};
-
-enum ib_qp_state {
-	IB_QPS_RESET = 0,
-	IB_QPS_INIT = 1,
-	IB_QPS_RTR = 2,
-	IB_QPS_RTS = 3,
-	IB_QPS_SQD = 4,
-	IB_QPS_SQE = 5,
-	IB_QPS_ERR = 6,
-};
-
-enum ib_mig_state {
-	IB_MIG_MIGRATED = 0,
-	IB_MIG_REARM = 1,
-	IB_MIG_ARMED = 2,
-};
-
-enum ib_mw_type {
-	IB_MW_TYPE_1 = 1,
-	IB_MW_TYPE_2 = 2,
-};
-
-struct ib_qp_attr {
-	enum ib_qp_state qp_state;
-	enum ib_qp_state cur_qp_state;
-	enum ib_mtu path_mtu;
-	enum ib_mig_state path_mig_state;
-	u32 qkey;
-	u32 rq_psn;
-	u32 sq_psn;
-	u32 dest_qp_num;
-	int qp_access_flags;
-	struct ib_qp_cap cap;
-	struct rdma_ah_attr ah_attr;
-	struct rdma_ah_attr alt_ah_attr;
-	u16 pkey_index;
-	u16 alt_pkey_index;
-	u8 en_sqd_async_notify;
-	u8 sq_draining;
-	u8 max_rd_atomic;
-	u8 max_dest_rd_atomic;
-	u8 min_rnr_timer;
-	u8 port_num;
-	u8 timeout;
-	u8 retry_cnt;
-	u8 rnr_retry;
-	u8 alt_port_num;
-	u8 alt_timeout;
-	u32 rate_limit;
-	struct net_device *xmit_slave;
-};
-
-enum ib_wr_opcode {
-	IB_WR_RDMA_WRITE = 0,
-	IB_WR_RDMA_WRITE_WITH_IMM = 1,
-	IB_WR_SEND = 2,
-	IB_WR_SEND_WITH_IMM = 3,
-	IB_WR_RDMA_READ = 4,
-	IB_WR_ATOMIC_CMP_AND_SWP = 5,
-	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
-	IB_WR_BIND_MW = 8,
-	IB_WR_LSO = 10,
-	IB_WR_SEND_WITH_INV = 9,
-	IB_WR_RDMA_READ_WITH_INV = 11,
-	IB_WR_LOCAL_INV = 7,
-	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
-	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
-	IB_WR_REG_MR = 32,
-	IB_WR_REG_MR_INTEGRITY = 33,
-	IB_WR_RESERVED1 = 240,
-	IB_WR_RESERVED2 = 241,
-	IB_WR_RESERVED3 = 242,
-	IB_WR_RESERVED4 = 243,
-	IB_WR_RESERVED5 = 244,
-	IB_WR_RESERVED6 = 245,
-	IB_WR_RESERVED7 = 246,
-	IB_WR_RESERVED8 = 247,
-	IB_WR_RESERVED9 = 248,
-	IB_WR_RESERVED10 = 249,
-};
-
-struct ib_sge {
-	u64 addr;
-	u32 length;
-	u32 lkey;
-};
-
-struct ib_send_wr {
-	struct ib_send_wr *next;
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	struct ib_sge *sg_list;
-	int num_sge;
-	enum ib_wr_opcode opcode;
-	int send_flags;
-	union {
-		__be32 imm_data;
-		u32 invalidate_rkey;
-	} ex;
-};
-
-struct ib_ah {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_uobject *uobject;
-	const struct ib_gid_attr *sgid_attr;
-	enum rdma_ah_attr_type type;
-};
-
-struct ib_mr {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	u32 lkey;
-	u32 rkey;
-	u64 iova;
-	u64 length;
-	unsigned int page_size;
-	enum ib_mr_type type;
-	bool need_inval;
-	union {
-		struct ib_uobject *uobject;
-		struct list_head qp_entry;
-	};
-	struct ib_dm *dm;
-	struct ib_sig_attrs *sig_attrs;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_recv_wr {
-	struct ib_recv_wr *next;
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	struct ib_sge *sg_list;
-	int num_sge;
-};
-
-struct ib_rdmacg_object {};
-
-struct ib_uverbs_file;
-
-struct ib_ucontext {
-	struct ib_device *device;
-	struct ib_uverbs_file *ufile;
-	bool cleanup_retryable;
-	struct ib_rdmacg_object cg_obj;
-	struct rdma_restrack_entry res;
-	struct xarray mmap_xa;
-};
-
-struct uverbs_api_object;
-
-struct ib_uobject {
-	u64 user_handle;
-	struct ib_uverbs_file *ufile;
-	struct ib_ucontext *context;
-	void *object;
-	struct list_head list;
-	struct ib_rdmacg_object cg_obj;
-	int id;
-	struct kref ref;
-	atomic_t usecnt;
-	struct callback_head rcu;
-	const struct uverbs_api_object *uapi_object;
-};
-
-struct ib_udata {
-	const void *inbuf;
-	void *outbuf;
-	size_t inlen;
-	size_t outlen;
-};
-
-struct ib_pd {
-	u32 local_dma_lkey;
-	u32 flags;
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-	u32 unsafe_global_rkey;
-	struct ib_mr *__internal_mr;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_wq_init_attr {
-	void *wq_context;
-	enum ib_wq_type wq_type;
-	u32 max_wr;
-	u32 max_sge;
-	struct ib_cq *cq;
-	void (*event_handler)(struct ib_event *, void *);
-	u32 create_flags;
-};
-
-struct ib_wq_attr {
-	enum ib_wq_state wq_state;
-	enum ib_wq_state curr_wq_state;
-	u32 flags;
-	u32 flags_mask;
-};
-
-struct ib_rwq_ind_table_init_attr {
-	u32 log_ind_tbl_size;
-	struct ib_wq **ind_tbl;
-};
-
-enum port_pkey_state {
-	IB_PORT_PKEY_NOT_VALID = 0,
-	IB_PORT_PKEY_VALID = 1,
-	IB_PORT_PKEY_LISTED = 2,
-};
-
-struct ib_port_pkey {
-	enum port_pkey_state state;
-	u16 pkey_index;
-	u8 port_num;
-	struct list_head qp_list;
-	struct list_head to_error_list;
-	struct ib_qp_security *sec;
-};
-
-struct ib_ports_pkeys;
-
-struct ib_qp_security {
-	struct ib_qp *qp;
-	struct ib_device *dev;
-	struct mutex mutex;
-	struct ib_ports_pkeys *ports_pkeys;
-	struct list_head shared_qp_list;
-	void *security;
-	bool destroying;
-	atomic_t error_list_count;
-	struct completion error_complete;
-	int error_comps_pending;
-};
-
-struct ib_ports_pkeys {
-	struct ib_port_pkey main;
-	struct ib_port_pkey alt;
-};
-
-struct ib_dm {
-	struct ib_device *device;
-	u32 length;
-	u32 flags;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-};
-
-struct ib_mw {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_uobject *uobject;
-	u32 rkey;
-	enum ib_mw_type type;
-};
-
-enum ib_flow_attr_type {
-	IB_FLOW_ATTR_NORMAL = 0,
-	IB_FLOW_ATTR_ALL_DEFAULT = 1,
-	IB_FLOW_ATTR_MC_DEFAULT = 2,
-	IB_FLOW_ATTR_SNIFFER = 3,
-};
-
-enum ib_flow_spec_type {
-	IB_FLOW_SPEC_ETH = 32,
-	IB_FLOW_SPEC_IB = 34,
-	IB_FLOW_SPEC_IPV4 = 48,
-	IB_FLOW_SPEC_IPV6 = 49,
-	IB_FLOW_SPEC_ESP = 52,
-	IB_FLOW_SPEC_TCP = 64,
-	IB_FLOW_SPEC_UDP = 65,
-	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
-	IB_FLOW_SPEC_GRE = 81,
-	IB_FLOW_SPEC_MPLS = 96,
-	IB_FLOW_SPEC_INNER = 256,
-	IB_FLOW_SPEC_ACTION_TAG = 4096,
-	IB_FLOW_SPEC_ACTION_DROP = 4097,
-	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
-	IB_FLOW_SPEC_ACTION_COUNT = 4099,
-};
-
-struct ib_flow_eth_filter {
-	u8 dst_mac[6];
-	u8 src_mac[6];
-	__be16 ether_type;
-	__be16 vlan_tag;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_eth {
-	u32 type;
-	u16 size;
-	struct ib_flow_eth_filter val;
-	struct ib_flow_eth_filter mask;
-};
-
-struct ib_flow_ib_filter {
-	__be16 dlid;
-	__u8 sl;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ib {
-	u32 type;
-	u16 size;
-	struct ib_flow_ib_filter val;
-	struct ib_flow_ib_filter mask;
-};
-
-struct ib_flow_ipv4_filter {
-	__be32 src_ip;
-	__be32 dst_ip;
-	u8 proto;
-	u8 tos;
-	u8 ttl;
-	u8 flags;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ipv4 {
-	u32 type;
-	u16 size;
-	struct ib_flow_ipv4_filter val;
-	struct ib_flow_ipv4_filter mask;
-};
-
-struct ib_flow_ipv6_filter {
-	u8 src_ip[16];
-	u8 dst_ip[16];
-	__be32 flow_label;
-	u8 next_hdr;
-	u8 traffic_class;
-	u8 hop_limit;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ipv6 {
-	u32 type;
-	u16 size;
-	struct ib_flow_ipv6_filter val;
-	struct ib_flow_ipv6_filter mask;
-};
-
-struct ib_flow_tcp_udp_filter {
-	__be16 dst_port;
-	__be16 src_port;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_tcp_udp {
-	u32 type;
-	u16 size;
-	struct ib_flow_tcp_udp_filter val;
-	struct ib_flow_tcp_udp_filter mask;
-};
-
-struct ib_flow_tunnel_filter {
-	__be32 tunnel_id;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_tunnel {
-	u32 type;
-	u16 size;
-	struct ib_flow_tunnel_filter val;
-	struct ib_flow_tunnel_filter mask;
-};
-
-struct ib_flow_esp_filter {
-	__be32 spi;
-	__be32 seq;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_esp {
-	u32 type;
-	u16 size;
-	struct ib_flow_esp_filter val;
-	struct ib_flow_esp_filter mask;
-};
-
-struct ib_flow_gre_filter {
-	__be16 c_ks_res0_ver;
-	__be16 protocol;
-	__be32 key;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_gre {
-	u32 type;
-	u16 size;
-	struct ib_flow_gre_filter val;
-	struct ib_flow_gre_filter mask;
-};
-
-struct ib_flow_mpls_filter {
-	__be32 tag;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_mpls {
-	u32 type;
-	u16 size;
-	struct ib_flow_mpls_filter val;
-	struct ib_flow_mpls_filter mask;
-};
-
-struct ib_flow_spec_action_tag {
-	enum ib_flow_spec_type type;
-	u16 size;
-	u32 tag_id;
-};
-
-struct ib_flow_spec_action_drop {
-	enum ib_flow_spec_type type;
-	u16 size;
-};
-
-struct ib_flow_spec_action_handle {
-	enum ib_flow_spec_type type;
-	u16 size;
-	struct ib_flow_action *act;
-};
-
-enum ib_flow_action_type {
-	IB_FLOW_ACTION_UNSPECIFIED = 0,
-	IB_FLOW_ACTION_ESP = 1,
-};
-
-struct ib_flow_action {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	enum ib_flow_action_type type;
-	atomic_t usecnt;
-};
-
-struct ib_flow_spec_action_count {
-	enum ib_flow_spec_type type;
-	u16 size;
-	struct ib_counters *counters;
-};
-
-struct ib_counters {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-};
-
-union ib_flow_spec {
-	struct {
-		u32 type;
-		u16 size;
-	};
-	struct ib_flow_spec_eth eth;
-	struct ib_flow_spec_ib ib;
-	struct ib_flow_spec_ipv4 ipv4;
-	struct ib_flow_spec_tcp_udp tcp_udp;
-	struct ib_flow_spec_ipv6 ipv6;
-	struct ib_flow_spec_tunnel tunnel;
-	struct ib_flow_spec_esp esp;
-	struct ib_flow_spec_gre gre;
-	struct ib_flow_spec_mpls mpls;
-	struct ib_flow_spec_action_tag flow_tag;
-	struct ib_flow_spec_action_drop drop;
-	struct ib_flow_spec_action_handle action;
-	struct ib_flow_spec_action_count flow_count;
-};
-
-struct ib_flow_attr {
-	enum ib_flow_attr_type type;
-	u16 size;
-	u16 priority;
-	u32 flags;
-	u8 num_of_specs;
-	u8 port;
-	union ib_flow_spec flows[0];
-};
-
-struct ib_flow {
-	struct ib_qp *qp;
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-};
-
-struct ib_flow_action_attrs_esp_keymats {
-	enum ib_uverbs_flow_action_esp_keymat protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;
-	} keymat;
-};
-
-struct ib_flow_action_attrs_esp_replays {
-	enum ib_uverbs_flow_action_esp_replay protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_replay_bmp bmp;
-	} replay;
-};
-
-struct ib_flow_spec_list {
-	struct ib_flow_spec_list *next;
-	union ib_flow_spec spec;
-};
-
-struct ib_flow_action_attrs_esp {
-	struct ib_flow_action_attrs_esp_keymats *keymat;
-	struct ib_flow_action_attrs_esp_replays *replay;
-	struct ib_flow_spec_list *encap;
-	u32 esn;
-	u32 spi;
-	u32 seq;
-	u32 tfc_pad;
-	u64 flags;
-	u64 hard_limit_pkts;
-};
-
-struct ib_pkey_cache;
-
-struct ib_gid_table;
-
-struct ib_port_cache {
-	u64 subnet_prefix;
-	struct ib_pkey_cache *pkey;
-	struct ib_gid_table *gid;
-	u8 lmc;
-	enum ib_port_state port_state;
-};
-
-struct ib_port_immutable {
-	int pkey_tbl_len;
-	int gid_tbl_len;
-	u32 core_cap_flags;
-	u32 max_mad_size;
-};
-
-struct ib_port_data {
-	struct ib_device *ib_dev;
-	struct ib_port_immutable immutable;
-	spinlock_t pkey_list_lock;
-	struct list_head pkey_list;
-	struct ib_port_cache cache;
-	spinlock_t netdev_lock;
-	struct net_device *netdev;
-	struct hlist_node ndev_hash_link;
-	struct rdma_port_counter port_counter;
-	struct rdma_hw_stats *hw_stats;
-};
-
-struct rdma_netdev_alloc_params {
-	size_t sizeof_priv;
-	unsigned int txqs;
-	unsigned int rxqs;
-	void *param;
-	int (*initialize_rdma_netdev)(struct ib_device *, u8, struct net_device *, void *);
-};
-
-struct ib_counters_read_attr {
-	u64 *counters_buff;
-	u32 ncounters;
-	u32 flags;
-};
-
-struct rdma_user_mmap_entry {
-	struct kref ref;
-	struct ib_ucontext *ucontext;
-	long unsigned int start_pgoff;
-	size_t npages;
-	bool driver_removed;
-};
-
-enum blk_zone_type {
-	BLK_ZONE_TYPE_CONVENTIONAL = 1,
-	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
-	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
-};
-
-enum blk_zone_cond {
-	BLK_ZONE_COND_NOT_WP = 0,
-	BLK_ZONE_COND_EMPTY = 1,
-	BLK_ZONE_COND_IMP_OPEN = 2,
-	BLK_ZONE_COND_EXP_OPEN = 3,
-	BLK_ZONE_COND_CLOSED = 4,
-	BLK_ZONE_COND_READONLY = 13,
-	BLK_ZONE_COND_FULL = 14,
-	BLK_ZONE_COND_OFFLINE = 15,
-};
-
-enum blk_zone_report_flags {
-	BLK_ZONE_REP_CAPACITY = 1,
-};
-
-struct blk_zone_report {
-	__u64 sector;
-	__u32 nr_zones;
-	__u32 flags;
-	struct blk_zone zones[0];
-};
-
-struct blk_zone_range {
-	__u64 sector;
-	__u64 nr_sectors;
-};
-
-struct zone_report_args {
-	struct blk_zone *zones;
-};
-
-struct blk_revalidate_zone_args {
-	struct gendisk *disk;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int nr_zones;
-	sector_t zone_sectors;
-	sector_t sector;
-};
-
-enum wbt_flags {
-	WBT_TRACKED = 1,
-	WBT_READ = 2,
-	WBT_KSWAPD = 4,
-	WBT_DISCARD = 8,
-	WBT_NR_BITS = 4,
-};
-
-enum {
-	WBT_STATE_ON_DEFAULT = 1,
-	WBT_STATE_ON_MANUAL = 2,
-};
-
-struct rq_wb {
-	unsigned int wb_background;
-	unsigned int wb_normal;
-	short int enable_state;
-	unsigned int unknown_cnt;
-	u64 win_nsec;
-	u64 cur_win_nsec;
-	struct blk_stat_callback *cb;
-	u64 sync_issue;
-	void *sync_cookie;
-	unsigned int wc;
-	long unsigned int last_issue;
-	long unsigned int last_comp;
-	long unsigned int min_lat_nsec;
-	struct rq_qos rqos;
-	struct rq_wait rq_wait[3];
-	struct rq_depth rq_depth;
-};
-
-struct trace_event_raw_wbt_stat {
-	struct trace_entry ent;
-	char name[32];
-	s64 rmean;
-	u64 rmin;
-	u64 rmax;
-	s64 rnr_samples;
-	s64 rtime;
-	s64 wmean;
-	u64 wmin;
-	u64 wmax;
-	s64 wnr_samples;
-	s64 wtime;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_lat {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int lat;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_step {
-	struct trace_entry ent;
-	char name[32];
-	const char *msg;
-	int step;
-	long unsigned int window;
-	unsigned int bg;
-	unsigned int normal;
-	unsigned int max;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_timer {
-	struct trace_entry ent;
-	char name[32];
-	unsigned int status;
-	int step;
-	unsigned int inflight;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_wbt_stat {};
-
-struct trace_event_data_offsets_wbt_lat {};
-
-struct trace_event_data_offsets_wbt_step {};
-
-struct trace_event_data_offsets_wbt_timer {};
-
-typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
-
-typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
-
-typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
-
-enum {
-	RWB_DEF_DEPTH = 16,
-	RWB_WINDOW_NSEC = 100000000,
-	RWB_MIN_WRITE_SAMPLES = 3,
-	RWB_UNKNOWN_BUMP = 5,
-};
-
-enum {
-	LAT_OK = 1,
-	LAT_UNKNOWN = 2,
-	LAT_UNKNOWN_WRITES = 3,
-	LAT_EXCEEDED = 4,
-};
-
-struct wbt_wait_data {
-	struct rq_wb *rwb;
-	enum wbt_flags wb_acct;
-	long unsigned int rw;
-};
-
-struct blk_ksm_keyslot {
-	atomic_t slot_refs;
-	struct list_head idle_slot_node;
-	struct hlist_node hash_node;
-	const struct blk_crypto_key *key;
-	struct blk_keyslot_manager *ksm;
-};
-
-struct blk_ksm_ll_ops {
-	int (*keyslot_program)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-	int (*keyslot_evict)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-};
-
-struct blk_keyslot_manager {
-	struct blk_ksm_ll_ops ksm_ll_ops;
-	unsigned int max_dun_bytes_supported;
-	unsigned int crypto_modes_supported[4];
-	struct device *dev;
-	unsigned int num_slots;
-	struct rw_semaphore lock;
-	wait_queue_head_t idle_slots_wait_queue;
-	struct list_head idle_slots;
-	spinlock_t idle_slots_lock;
-	struct hlist_head *slot_hashtable;
-	unsigned int log_slot_ht_size;
-	struct blk_ksm_keyslot *slots;
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
 };
 
 struct blk_crypto_mode {
+	const char *name;
 	const char *cipher_str;
 	unsigned int keysize;
 	unsigned int ivsize;
 };
 
-struct bio_fallback_crypt_ctx {
-	struct bio_crypt_ctx crypt_ctx;
-	struct bvec_iter crypt_iter;
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
 	union {
-		struct {
-			struct work_struct work;
-			struct bio *bio;
-		};
-		struct {
-			void *bi_private_orig;
-			bio_end_io_t *bi_end_io_orig;
-		};
+		const void *cvalue;
+		void *value;
 	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
 };
 
-struct blk_crypto_keyslot {
-	enum blk_crypto_mode_num crypto_mode;
-	struct crypto_skcipher *tfms[4];
-};
-
-union blk_crypto_iv {
-	__le64 dun[4];
-	u8 bytes[32];
-};
-
-typedef void (*swap_func_t)(void *, void *, int);
-
-typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
-
-struct siprand_state {
-	long unsigned int v0;
-	long unsigned int v1;
-	long unsigned int v2;
-	long unsigned int v3;
-};
-
-typedef __kernel_long_t __kernel_ptrdiff_t;
-
-typedef __kernel_ptrdiff_t ptrdiff_t;
-
-struct region {
-	unsigned int start;
-	unsigned int off;
-	unsigned int group_len;
-	unsigned int end;
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
 };
 
 enum {
-	REG_OP_ISFREE = 0,
-	REG_OP_ALLOC = 1,
-	REG_OP_RELEASE = 2,
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
 };
 
-typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
-
-typedef void sg_free_fn(struct scatterlist *, unsigned int);
-
-struct sg_page_iter {
-	struct scatterlist *sg;
-	unsigned int sg_pgoffset;
-	unsigned int __nents;
-	int __pg_advance;
+struct io_msg {
+	struct file *file;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	u32 dst_fd;
+	u32 flags;
 };
 
-struct sg_dma_page_iter {
-	struct sg_page_iter base;
+typedef s32 compat_ssize_t;
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	long unsigned int nr_segs;
 };
 
-struct sg_mapping_iter {
-	struct page *page;
-	void *addr;
-	size_t length;
-	size_t consumed;
-	struct sg_page_iter piter;
-	unsigned int __offset;
-	unsigned int __remaining;
-	unsigned int __flags;
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
 };
 
-typedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);
-
-struct rhltable {
-	struct rhashtable ht;
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
 };
 
-struct rhashtable_walker {
-	struct list_head list;
-	struct bucket_table *tbl;
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
 };
 
-struct rhashtable_iter {
-	struct rhashtable *ht;
-	struct rhash_head *p;
-	struct rhlist_head *list;
-	struct rhashtable_walker walker;
-	unsigned int slot;
-	unsigned int skip;
-	bool end_of_table;
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
 };
 
-union nested_table {
-	union nested_table *table;
-	struct rhash_lock_head *bucket;
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
 };
 
-struct once_work {
-	struct work_struct work;
-	struct static_key_true *key;
+struct strarray {
+	char **array;
+	size_t n;
 };
 
-struct genradix_iter {
-	size_t offset;
-	size_t pos;
-};
-
-struct genradix_node {
-	union {
-		struct genradix_node *children[512];
-		u8 data[4096];
-	};
-};
-
-struct reciprocal_value_adv {
-	u32 m;
-	u8 sh;
-	u8 exp;
-	bool is_wide_m;
-};
-
-enum devm_ioremap_type {
-	DEVM_IOREMAP = 0,
-	DEVM_IOREMAP_UC = 1,
-	DEVM_IOREMAP_WC = 2,
-};
-
-struct pcim_iomap_devres {
-	void *table[6];
-};
-
-struct btree_head {
-	long unsigned int *node;
-	mempool_t *mempool;
-	int height;
-};
-
-struct btree_geo {
-	int keylen;
-	int no_pairs;
-	int no_longs;
-};
-
-typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
-
-typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
-
-typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
-
-typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
-
-enum assoc_array_walk_status {
-	assoc_array_walk_tree_empty = 0,
-	assoc_array_walk_found_terminal_node = 1,
-	assoc_array_walk_found_wrong_shortcut = 2,
-};
-
-struct assoc_array_walk_result {
-	struct {
-		struct assoc_array_node *node;
-		int level;
-		int slot;
-	} terminal_node;
-	struct {
-		struct assoc_array_shortcut *shortcut;
-		int level;
-		int sc_level;
-		long unsigned int sc_segments;
-		long unsigned int dissimilarity;
-	} wrong_shortcut;
-};
-
-struct assoc_array_delete_collapse_context {
-	struct assoc_array_node *node;
-	const void *skip_leaf;
-	int slot;
-};
-
-struct linear_range {
-	unsigned int min;
-	unsigned int min_sel;
-	unsigned int max_sel;
-	unsigned int step;
-};
-
-enum packing_op {
-	PACK = 0,
-	UNPACK = 1,
-};
-
-struct crc_test {
-	u32 crc;
-	u32 start;
-	u32 length;
-	u32 crc_le;
-	u32 crc_be;
-	u32 crc32c_le;
-};
-
-struct xxh32_state {
-	uint32_t total_len_32;
-	uint32_t large_len;
-	uint32_t v1;
-	uint32_t v2;
-	uint32_t v3;
-	uint32_t v4;
-	uint32_t mem32[4];
-	uint32_t memsize;
-};
-
-struct xxh64_state {
-	uint64_t total_len;
-	uint64_t v1;
-	uint64_t v2;
-	uint64_t v3;
-	uint64_t v4;
-	uint64_t mem64[4];
-	uint32_t memsize;
-};
-
-struct gen_pool_chunk {
-	struct list_head next_chunk;
-	atomic_long_t avail;
-	phys_addr_t phys_addr;
-	void *owner;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	long unsigned int bits[0];
-};
-
-struct genpool_data_align {
-	int align;
-};
-
-struct genpool_data_fixed {
-	long unsigned int offset;
-};
-
-typedef struct z_stream_s z_stream;
-
-typedef z_stream *z_streamp;
-
-typedef struct {
-	unsigned char op;
-	unsigned char bits;
-	short unsigned int val;
-} code;
-
-typedef enum {
-	HEAD = 0,
-	FLAGS = 1,
-	TIME = 2,
-	OS = 3,
-	EXLEN = 4,
-	EXTRA = 5,
-	NAME = 6,
-	COMMENT = 7,
-	HCRC = 8,
-	DICTID = 9,
-	DICT = 10,
-	TYPE = 11,
-	TYPEDO = 12,
-	STORED = 13,
-	COPY = 14,
-	TABLE = 15,
-	LENLENS = 16,
-	CODELENS = 17,
-	LEN = 18,
-	LENEXT = 19,
-	DIST = 20,
-	DISTEXT = 21,
-	MATCH = 22,
-	LIT = 23,
-	CHECK = 24,
-	LENGTH = 25,
-	DONE = 26,
-	BAD = 27,
-	MEM = 28,
-	SYNC = 29,
-} inflate_mode;
-
-struct inflate_state {
-	inflate_mode mode;
-	int last;
-	int wrap;
-	int havedict;
-	int flags;
-	unsigned int dmax;
-	long unsigned int check;
-	long unsigned int total;
-	unsigned int wbits;
-	unsigned int wsize;
-	unsigned int whave;
-	unsigned int write;
-	unsigned char *window;
-	long unsigned int hold;
-	unsigned int bits;
-	unsigned int length;
-	unsigned int offset;
-	unsigned int extra;
-	const code *lencode;
-	const code *distcode;
-	unsigned int lenbits;
-	unsigned int distbits;
-	unsigned int ncode;
-	unsigned int nlen;
-	unsigned int ndist;
-	unsigned int have;
-	code *next;
-	short unsigned int lens[320];
-	short unsigned int work[288];
-	code codes[2048];
-};
-
-union uu {
-	short unsigned int us;
-	unsigned char b[2];
-};
-
-typedef unsigned int uInt;
-
-struct inflate_workspace {
-	struct inflate_state inflate_state;
-	unsigned char working_window[32768];
-};
-
-typedef enum {
-	CODES = 0,
-	LENS = 1,
-	DISTS = 2,
-} codetype;
-
-typedef unsigned char uch;
-
-typedef short unsigned int ush;
-
-typedef long unsigned int ulg;
-
-struct ct_data_s {
-	union {
-		ush freq;
-		ush code;
-	} fc;
-	union {
-		ush dad;
-		ush len;
-	} dl;
-};
-
-typedef struct ct_data_s ct_data;
-
-struct static_tree_desc_s {
-	const ct_data *static_tree;
-	const int *extra_bits;
-	int extra_base;
-	int elems;
-	int max_length;
-};
-
-typedef struct static_tree_desc_s static_tree_desc;
-
-struct tree_desc_s {
-	ct_data *dyn_tree;
-	int max_code;
-	static_tree_desc *stat_desc;
-};
-
-typedef ush Pos;
-
-typedef unsigned int IPos;
-
-struct deflate_state {
-	z_streamp strm;
-	int status;
-	Byte *pending_buf;
-	ulg pending_buf_size;
-	Byte *pending_out;
-	int pending;
-	int noheader;
-	Byte data_type;
-	Byte method;
-	int last_flush;
-	uInt w_size;
-	uInt w_bits;
-	uInt w_mask;
-	Byte *window;
-	ulg window_size;
-	Pos *prev;
-	Pos *head;
-	uInt ins_h;
-	uInt hash_size;
-	uInt hash_bits;
-	uInt hash_mask;
-	uInt hash_shift;
-	long int block_start;
-	uInt match_length;
-	IPos prev_match;
-	int match_available;
-	uInt strstart;
-	uInt match_start;
-	uInt lookahead;
-	uInt prev_length;
-	uInt max_chain_length;
-	uInt max_lazy_match;
-	int level;
-	int strategy;
-	uInt good_match;
-	int nice_match;
-	struct ct_data_s dyn_ltree[573];
-	struct ct_data_s dyn_dtree[61];
-	struct ct_data_s bl_tree[39];
-	struct tree_desc_s l_desc;
-	struct tree_desc_s d_desc;
-	struct tree_desc_s bl_desc;
-	ush bl_count[16];
-	int heap[573];
-	int heap_len;
-	int heap_max;
-	uch depth[573];
-	uch *l_buf;
-	uInt lit_bufsize;
-	uInt last_lit;
-	ush *d_buf;
-	ulg opt_len;
-	ulg static_len;
-	ulg compressed_len;
-	uInt matches;
-	int last_eob_len;
-	ush bi_buf;
-	int bi_valid;
-};
-
-typedef struct deflate_state deflate_state;
-
-typedef enum {
-	need_more = 0,
-	block_done = 1,
-	finish_started = 2,
-	finish_done = 3,
-} block_state;
-
-typedef block_state (*compress_func)(deflate_state *, int);
-
-struct deflate_workspace {
-	deflate_state deflate_memory;
-	Byte *window_memory;
-	Pos *prev_memory;
-	Pos *head_memory;
-	char *overlay_memory;
-};
-
-typedef struct deflate_workspace deflate_workspace;
-
-struct config_s {
-	ush good_length;
-	ush max_lazy;
-	ush nice_length;
-	ush max_chain;
-	compress_func func;
-};
-
-typedef struct config_s config;
-
-typedef struct tree_desc_s tree_desc;
-
-typedef struct {
-	uint32_t hashTable[4096];
-	uint32_t currentOffset;
-	uint32_t initCheck;
-	const uint8_t *dictionary;
-	uint8_t *bufferStart;
-	uint32_t dictSize;
-} LZ4_stream_t_internal;
-
-typedef union {
-	long long unsigned int table[2052];
-	LZ4_stream_t_internal internal_donotuse;
-} LZ4_stream_t;
-
-typedef uint8_t BYTE;
-
-typedef uint16_t U16;
-
-typedef uint32_t U32;
-
-typedef uint64_t U64;
-
-typedef uintptr_t uptrval;
-
-typedef enum {
-	noLimit = 0,
-	limitedOutput = 1,
-} limitedOutput_directive;
-
-typedef enum {
-	byPtr = 0,
-	byU32 = 1,
-	byU16 = 2,
-} tableType_t;
-
-typedef enum {
-	noDict = 0,
-	withPrefix64k = 1,
-	usingExtDict = 2,
-} dict_directive;
-
-typedef enum {
-	noDictIssue = 0,
-	dictSmall = 1,
-} dictIssue_directive;
-
 typedef struct {
 	const uint8_t *externalDict;
 	size_t extDictSize;
@@ -57536,6 +93771,14 @@
 	LZ4_streamDecode_t_internal internal_donotuse;
 } LZ4_streamDecode_t;
 
+typedef uintptr_t uptrval;
+
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
+
 typedef enum {
 	endOnOutputSize = 0,
 	endOnInputSize = 1,
@@ -57548,14 +93791,12 @@
 
 typedef struct {
 	size_t bitContainer;
-	int bitPos;
+	unsigned int bitPos;
 	char *startPtr;
 	char *ptr;
 	char *endPtr;
 } BIT_CStream_t;
 
-typedef unsigned int FSE_CTable;
-
 typedef struct {
 	ptrdiff_t value;
 	const void *stateTable;
@@ -57568,734 +93809,17 @@
 	U32 deltaNbBits;
 } FSE_symbolCompressionTransform;
 
-typedef int16_t S16;
-
-struct HUF_CElt_s {
-	U16 val;
-	BYTE nbBits;
-};
-
-typedef struct HUF_CElt_s HUF_CElt;
+typedef struct {
+	S16 norm[53];
+	U32 wksp[182];
+} ZSTD_BuildCTableWksp;
 
 typedef enum {
-	HUF_repeat_none = 0,
-	HUF_repeat_check = 1,
-	HUF_repeat_valid = 2,
-} HUF_repeat;
+	search_hashChain = 0,
+	search_binaryTree = 1,
+} searchMethod_e;
 
-struct nodeElt_s {
-	U32 count;
-	U16 parent;
-	BYTE byte;
-	BYTE nbBits;
-};
-
-typedef struct nodeElt_s nodeElt;
-
-typedef struct {
-	U32 base;
-	U32 curr;
-} rankPos;
-
-typedef enum {
-	ZSTDcs_created = 0,
-	ZSTDcs_init = 1,
-	ZSTDcs_ongoing = 2,
-	ZSTDcs_ending = 3,
-} ZSTD_compressionStage_e;
-
-typedef void * (*ZSTD_allocFunction)(void *, size_t);
-
-typedef void (*ZSTD_freeFunction)(void *, void *);
-
-typedef struct {
-	ZSTD_allocFunction customAlloc;
-	ZSTD_freeFunction customFree;
-	void *opaque;
-} ZSTD_customMem;
-
-typedef struct {
-	U32 price;
-	U32 off;
-	U32 mlen;
-	U32 litlen;
-	U32 rep[3];
-} ZSTD_optimal_t;
-
-typedef struct {
-	U32 off;
-	U32 len;
-} ZSTD_match_t;
-
-struct seqDef_s;
-
-typedef struct seqDef_s seqDef;
-
-typedef struct {
-	seqDef *sequencesStart;
-	seqDef *sequences;
-	BYTE *litStart;
-	BYTE *lit;
-	BYTE *llCode;
-	BYTE *mlCode;
-	BYTE *ofCode;
-	U32 longLengthID;
-	U32 longLengthPos;
-	ZSTD_optimal_t *priceTable;
-	ZSTD_match_t *matchTable;
-	U32 *matchLengthFreq;
-	U32 *litLengthFreq;
-	U32 *litFreq;
-	U32 *offCodeFreq;
-	U32 matchLengthSum;
-	U32 matchSum;
-	U32 litLengthSum;
-	U32 litSum;
-	U32 offCodeSum;
-	U32 log2matchLengthSum;
-	U32 log2matchSum;
-	U32 log2litLengthSum;
-	U32 log2litSum;
-	U32 log2offCodeSum;
-	U32 factor;
-	U32 staticPrices;
-	U32 cachedPrice;
-	U32 cachedLitLength;
-	const BYTE *cachedLiterals;
-} seqStore_t;
-
-struct HUF_CElt_s___2;
-
-typedef struct HUF_CElt_s___2 HUF_CElt___2;
-
-struct ZSTD_CCtx_s___2 {
-	const BYTE *nextSrc;
-	const BYTE *base;
-	const BYTE *dictBase;
-	U32 dictLimit;
-	U32 lowLimit;
-	U32 nextToUpdate;
-	U32 nextToUpdate3;
-	U32 hashLog3;
-	U32 loadedDictEnd;
-	U32 forceWindow;
-	U32 forceRawDict;
-	ZSTD_compressionStage_e stage;
-	U32 rep[3];
-	U32 repToConfirm[3];
-	U32 dictID;
-	ZSTD_parameters params;
-	void *workSpace;
-	size_t workSpaceSize;
-	size_t blockSize;
-	U64 frameContentSize;
-	struct xxh64_state xxhState;
-	ZSTD_customMem customMem;
-	seqStore_t seqStore;
-	U32 *hashTable;
-	U32 *hashTable3;
-	U32 *chainTable;
-	HUF_CElt___2 *hufTable;
-	U32 flagStaticTables;
-	HUF_repeat flagStaticHufTable;
-	FSE_CTable offcodeCTable[187];
-	FSE_CTable matchlengthCTable[363];
-	FSE_CTable litlengthCTable[329];
-	unsigned int tmpCounters[1536];
-};
-
-typedef struct ZSTD_CCtx_s___2 ZSTD_CCtx___2;
-
-struct ZSTD_CDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictContentSize;
-	ZSTD_CCtx___2 *refContext;
-};
-
-typedef struct ZSTD_CDict_s ZSTD_CDict;
-
-struct ZSTD_inBuffer_s {
-	const void *src;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
-
-struct ZSTD_outBuffer_s {
-	void *dst;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
-
-typedef enum {
-	zcss_init = 0,
-	zcss_load = 1,
-	zcss_flush = 2,
-	zcss_final = 3,
-} ZSTD_cStreamStage;
-
-struct ZSTD_CStream_s {
-	ZSTD_CCtx___2 *cctx;
-	ZSTD_CDict *cdictLocal;
-	const ZSTD_CDict *cdict;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inToCompress;
-	size_t inBuffPos;
-	size_t inBuffTarget;
-	size_t blockSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outBuffContentSize;
-	size_t outBuffFlushedSize;
-	ZSTD_cStreamStage stage;
-	U32 checksum;
-	U32 frameEnded;
-	U64 pledgedSrcSize;
-	U64 inputProcessed;
-	ZSTD_parameters params;
-	ZSTD_customMem customMem;
-};
-
-typedef struct ZSTD_CStream_s ZSTD_CStream;
-
-typedef int32_t S32;
-
-typedef enum {
-	set_basic = 0,
-	set_rle = 1,
-	set_compressed = 2,
-	set_repeat = 3,
-} symbolEncodingType_e;
-
-struct seqDef_s {
-	U32 offset;
-	U16 litLength;
-	U16 matchLength;
-};
-
-typedef enum {
-	ZSTDcrp_continue = 0,
-	ZSTDcrp_noMemset = 1,
-	ZSTDcrp_fullReset = 2,
-} ZSTD_compResetPolicy_e;
-
-typedef void (*ZSTD_blockCompressor)(ZSTD_CCtx___2 *, const void *, size_t);
-
-typedef enum {
-	zsf_gather = 0,
-	zsf_flush = 1,
-	zsf_end = 2,
-} ZSTD_flush_e;
-
-typedef size_t (*searchMax_f)(ZSTD_CCtx___2 *, const BYTE *, const BYTE *, size_t *, U32, U32);
-
-typedef struct {
-	size_t bitContainer;
-	unsigned int bitsConsumed;
-	const char *ptr;
-	const char *start;
-} BIT_DStream_t;
-
-typedef enum {
-	BIT_DStream_unfinished = 0,
-	BIT_DStream_endOfBuffer = 1,
-	BIT_DStream_completed = 2,
-	BIT_DStream_overflow = 3,
-} BIT_DStream_status;
-
-typedef unsigned int FSE_DTable;
-
-typedef struct {
-	size_t state;
-	const void *table;
-} FSE_DState_t;
-
-typedef struct {
-	U16 tableLog;
-	U16 fastMode;
-} FSE_DTableHeader;
-
-typedef struct {
-	short unsigned int newState;
-	unsigned char symbol;
-	unsigned char nbBits;
-} FSE_decode_t;
-
-typedef struct {
-	void *ptr;
-	const void *end;
-} ZSTD_stack;
-
-typedef U32 HUF_DTable;
-
-typedef struct {
-	BYTE maxTableLog;
-	BYTE tableType;
-	BYTE tableLog;
-	BYTE reserved;
-} DTableDesc;
-
-typedef struct {
-	BYTE byte;
-	BYTE nbBits;
-} HUF_DEltX2;
-
-typedef struct {
-	U16 sequence;
-	BYTE nbBits;
-	BYTE length;
-} HUF_DEltX4;
-
-typedef struct {
-	BYTE symbol;
-	BYTE weight;
-} sortedSymbol_t;
-
-typedef U32 rankValCol_t[13];
-
-typedef struct {
-	U32 tableTime;
-	U32 decode256Time;
-} algo_time_t;
-
-typedef struct {
-	FSE_DTable LLTable[513];
-	FSE_DTable OFTable[257];
-	FSE_DTable MLTable[513];
-	HUF_DTable hufTable[4097];
-	U64 workspace[384];
-	U32 rep[3];
-} ZSTD_entropyTables_t;
-
-typedef struct {
-	long long unsigned int frameContentSize;
-	unsigned int windowSize;
-	unsigned int dictID;
-	unsigned int checksumFlag;
-} ZSTD_frameParams;
-
-typedef enum {
-	bt_raw = 0,
-	bt_rle = 1,
-	bt_compressed = 2,
-	bt_reserved = 3,
-} blockType_e;
-
-typedef enum {
-	ZSTDds_getFrameHeaderSize = 0,
-	ZSTDds_decodeFrameHeader = 1,
-	ZSTDds_decodeBlockHeader = 2,
-	ZSTDds_decompressBlock = 3,
-	ZSTDds_decompressLastBlock = 4,
-	ZSTDds_checkChecksum = 5,
-	ZSTDds_decodeSkippableHeader = 6,
-	ZSTDds_skipFrame = 7,
-} ZSTD_dStage;
-
-struct ZSTD_DCtx_s___2 {
-	const FSE_DTable *LLTptr;
-	const FSE_DTable *MLTptr;
-	const FSE_DTable *OFTptr;
-	const HUF_DTable *HUFptr;
-	ZSTD_entropyTables_t entropy;
-	const void *previousDstEnd;
-	const void *base;
-	const void *vBase;
-	const void *dictEnd;
-	size_t expected;
-	ZSTD_frameParams fParams;
-	blockType_e bType;
-	ZSTD_dStage stage;
-	U32 litEntropy;
-	U32 fseEntropy;
-	struct xxh64_state xxhState;
-	size_t headerSize;
-	U32 dictID;
-	const BYTE *litPtr;
-	ZSTD_customMem customMem;
-	size_t litSize;
-	size_t rleSize;
-	BYTE litBuffer[131080];
-	BYTE headerBuffer[18];
-};
-
-typedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;
-
-struct ZSTD_DDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictSize;
-	ZSTD_entropyTables_t entropy;
-	U32 dictID;
-	U32 entropyPresent;
-	ZSTD_customMem cMem;
-};
-
-typedef struct ZSTD_DDict_s ZSTD_DDict;
-
-typedef enum {
-	zdss_init = 0,
-	zdss_loadHeader = 1,
-	zdss_read = 2,
-	zdss_load = 3,
-	zdss_flush = 4,
-} ZSTD_dStreamStage;
-
-struct ZSTD_DStream_s {
-	ZSTD_DCtx___2 *dctx;
-	ZSTD_DDict *ddictLocal;
-	const ZSTD_DDict *ddict;
-	ZSTD_frameParams fParams;
-	ZSTD_dStreamStage stage;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inPos;
-	size_t maxWindowSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outStart;
-	size_t outEnd;
-	size_t blockSize;
-	BYTE headerBuffer[18];
-	size_t lhSize;
-	ZSTD_customMem customMem;
-	void *legacyContext;
-	U32 previousLegacyVersion;
-	U32 legacyVersion;
-	U32 hostageByte;
-};
-
-typedef struct ZSTD_DStream_s ZSTD_DStream;
-
-typedef enum {
-	ZSTDnit_frameHeader = 0,
-	ZSTDnit_blockHeader = 1,
-	ZSTDnit_block = 2,
-	ZSTDnit_lastBlock = 3,
-	ZSTDnit_checksum = 4,
-	ZSTDnit_skippableFrame = 5,
-} ZSTD_nextInputType_e;
-
-typedef uintptr_t uPtrDiff;
-
-typedef struct {
-	blockType_e blockType;
-	U32 lastBlock;
-	U32 origSize;
-} blockProperties_t;
-
-typedef union {
-	FSE_decode_t realData;
-	U32 alignedBy4;
-} FSE_decode_t4;
-
-typedef struct {
-	size_t litLength;
-	size_t matchLength;
-	size_t offset;
-	const BYTE *match;
-} seq_t;
-
-typedef struct {
-	BIT_DStream_t DStream;
-	FSE_DState_t stateLL;
-	FSE_DState_t stateOffb;
-	FSE_DState_t stateML;
-	size_t prevOffset[3];
-	const BYTE *base;
-	size_t pos;
-	uPtrDiff gotoDict;
-} seqState_t;
-
-enum xz_mode {
-	XZ_SINGLE = 0,
-	XZ_PREALLOC = 1,
-	XZ_DYNALLOC = 2,
-};
-
-enum xz_ret {
-	XZ_OK = 0,
-	XZ_STREAM_END = 1,
-	XZ_UNSUPPORTED_CHECK = 2,
-	XZ_MEM_ERROR = 3,
-	XZ_MEMLIMIT_ERROR = 4,
-	XZ_FORMAT_ERROR = 5,
-	XZ_OPTIONS_ERROR = 6,
-	XZ_DATA_ERROR = 7,
-	XZ_BUF_ERROR = 8,
-};
-
-struct xz_buf {
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_size;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-};
-
-typedef uint64_t vli_type;
-
-enum xz_check {
-	XZ_CHECK_NONE = 0,
-	XZ_CHECK_CRC32 = 1,
-	XZ_CHECK_CRC64 = 4,
-	XZ_CHECK_SHA256 = 10,
-};
-
-struct xz_dec_hash {
-	vli_type unpadded;
-	vli_type uncompressed;
-	uint32_t crc32;
-};
-
-struct xz_dec_lzma2;
-
-struct xz_dec_bcj;
-
-struct xz_dec {
-	enum {
-		SEQ_STREAM_HEADER = 0,
-		SEQ_BLOCK_START = 1,
-		SEQ_BLOCK_HEADER = 2,
-		SEQ_BLOCK_UNCOMPRESS = 3,
-		SEQ_BLOCK_PADDING = 4,
-		SEQ_BLOCK_CHECK = 5,
-		SEQ_INDEX = 6,
-		SEQ_INDEX_PADDING = 7,
-		SEQ_INDEX_CRC32 = 8,
-		SEQ_STREAM_FOOTER = 9,
-	} sequence;
-	uint32_t pos;
-	vli_type vli;
-	size_t in_start;
-	size_t out_start;
-	uint32_t crc32;
-	enum xz_check check_type;
-	enum xz_mode mode;
-	bool allow_buf_error;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		uint32_t size;
-	} block_header;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} block;
-	struct {
-		enum {
-			SEQ_INDEX_COUNT = 0,
-			SEQ_INDEX_UNPADDED = 1,
-			SEQ_INDEX_UNCOMPRESSED = 2,
-		} sequence;
-		vli_type size;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} index;
-	struct {
-		size_t pos;
-		size_t size;
-		uint8_t buf[1024];
-	} temp;
-	struct xz_dec_lzma2 *lzma2;
-	struct xz_dec_bcj *bcj;
-	bool bcj_active;
-};
-
-enum lzma_state {
-	STATE_LIT_LIT = 0,
-	STATE_MATCH_LIT_LIT = 1,
-	STATE_REP_LIT_LIT = 2,
-	STATE_SHORTREP_LIT_LIT = 3,
-	STATE_MATCH_LIT = 4,
-	STATE_REP_LIT = 5,
-	STATE_SHORTREP_LIT = 6,
-	STATE_LIT_MATCH = 7,
-	STATE_LIT_LONGREP = 8,
-	STATE_LIT_SHORTREP = 9,
-	STATE_NONLIT_MATCH = 10,
-	STATE_NONLIT_REP = 11,
-};
-
-struct dictionary {
-	uint8_t *buf;
-	size_t start;
-	size_t pos;
-	size_t full;
-	size_t limit;
-	size_t end;
-	uint32_t size;
-	uint32_t size_max;
-	uint32_t allocated;
-	enum xz_mode mode;
-};
-
-struct rc_dec {
-	uint32_t range;
-	uint32_t code;
-	uint32_t init_bytes_left;
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_limit;
-};
-
-struct lzma_len_dec {
-	uint16_t choice;
-	uint16_t choice2;
-	uint16_t low[128];
-	uint16_t mid[128];
-	uint16_t high[256];
-};
-
-struct lzma_dec {
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-	enum lzma_state state;
-	uint32_t len;
-	uint32_t lc;
-	uint32_t literal_pos_mask;
-	uint32_t pos_mask;
-	uint16_t is_match[192];
-	uint16_t is_rep[12];
-	uint16_t is_rep0[12];
-	uint16_t is_rep1[12];
-	uint16_t is_rep2[12];
-	uint16_t is_rep0_long[192];
-	uint16_t dist_slot[256];
-	uint16_t dist_special[114];
-	uint16_t dist_align[16];
-	struct lzma_len_dec match_len_dec;
-	struct lzma_len_dec rep_len_dec;
-	uint16_t literal[12288];
-};
-
-enum lzma2_seq {
-	SEQ_CONTROL = 0,
-	SEQ_UNCOMPRESSED_1 = 1,
-	SEQ_UNCOMPRESSED_2 = 2,
-	SEQ_COMPRESSED_0 = 3,
-	SEQ_COMPRESSED_1 = 4,
-	SEQ_PROPERTIES = 5,
-	SEQ_LZMA_PREPARE = 6,
-	SEQ_LZMA_RUN = 7,
-	SEQ_COPY = 8,
-};
-
-struct lzma2_dec {
-	enum lzma2_seq sequence;
-	enum lzma2_seq next_sequence;
-	uint32_t uncompressed;
-	uint32_t compressed;
-	bool need_dict_reset;
-	bool need_props;
-};
-
-struct xz_dec_lzma2___2 {
-	struct rc_dec rc;
-	struct dictionary dict;
-	struct lzma2_dec lzma2;
-	struct lzma_dec lzma;
-	struct {
-		uint32_t size;
-		uint8_t buf[63];
-	} temp;
-};
-
-struct xz_dec_bcj___2 {
-	enum {
-		BCJ_X86 = 4,
-		BCJ_POWERPC = 5,
-		BCJ_IA64 = 6,
-		BCJ_ARM = 7,
-		BCJ_ARMTHUMB = 8,
-		BCJ_SPARC = 9,
-	} type;
-	enum xz_ret ret;
-	bool single_call;
-	uint32_t pos;
-	uint32_t x86_prev_mask;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-	struct {
-		size_t filtered;
-		size_t size;
-		uint8_t buf[16];
-	} temp;
-};
-
-struct ts_state {
-	unsigned int offset;
-	char cb[40];
-};
-
-struct ts_config;
-
-struct ts_ops {
-	const char *name;
-	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
-	unsigned int (*find)(struct ts_config *, struct ts_state *);
-	void (*destroy)(struct ts_config *);
-	void * (*get_pattern)(struct ts_config *);
-	unsigned int (*get_pattern_len)(struct ts_config *);
-	struct module *owner;
-	struct list_head list;
-};
-
-struct ts_config {
-	struct ts_ops *ops;
-	int flags;
-	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
-	void (*finish)(struct ts_config *, struct ts_state *);
-};
-
-struct ts_linear_state {
-	unsigned int len;
-	const void *data;
-};
-
-struct ei_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	int etype;
-	void *priv;
-};
-
-struct nla_bitfield32 {
-	__u32 value;
-	__u32 selector;
-};
-
-enum nla_policy_validation {
-	NLA_VALIDATE_NONE = 0,
-	NLA_VALIDATE_RANGE = 1,
-	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
-	NLA_VALIDATE_MIN = 3,
-	NLA_VALIDATE_MAX = 4,
-	NLA_VALIDATE_MASK = 5,
-	NLA_VALIDATE_RANGE_PTR = 6,
-	NLA_VALIDATE_FUNCTION = 7,
-};
-
-enum netlink_validation {
-	NL_VALIDATE_LIBERAL = 0,
-	NL_VALIDATE_TRAILING = 1,
-	NL_VALIDATE_MAXTYPE = 2,
-	NL_VALIDATE_UNSPEC = 4,
-	NL_VALIDATE_STRICT_ATTRS = 8,
-	NL_VALIDATE_NESTED = 16,
-};
+typedef size_t (*searchMax_f)(ZSTD_matchState_t *, const BYTE *, const BYTE *, size_t *);
 
 struct cpu_rmap {
 	struct kref refcount;
@@ -58314,6 +93838,8 @@
 	u16 index;
 };
 
+typedef long unsigned int mpi_limb_t;
+
 typedef mpi_limb_t *mpi_ptr_t;
 
 typedef int mpi_size_t;
@@ -58322,6 +93848,17 @@
 
 typedef unsigned int UHWtype;
 
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
+};
+
+typedef struct gcry_mpi *MPI;
+
 enum gcry_mpi_constants {
 	MPI_C_ZERO = 0,
 	MPI_C_ONE = 1,
@@ -58395,47 +93932,6 @@
 	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
 };
 
-enum gcry_mpi_format {
-	GCRYMPI_FMT_NONE = 0,
-	GCRYMPI_FMT_STD = 1,
-	GCRYMPI_FMT_PGP = 2,
-	GCRYMPI_FMT_SSH = 3,
-	GCRYMPI_FMT_HEX = 4,
-	GCRYMPI_FMT_USG = 5,
-	GCRYMPI_FMT_OPAQUE = 8,
-};
-
-struct barrett_ctx_s___2;
-
-typedef struct barrett_ctx_s___2 *mpi_barrett_t___2;
-
-struct barrett_ctx_s___2 {
-	MPI m;
-	int m_copied;
-	int k;
-	MPI y;
-	MPI r1;
-	MPI r2;
-	MPI r3;
-};
-
-struct karatsuba_ctx {
-	struct karatsuba_ctx *next;
-	mpi_ptr_t tspace;
-	mpi_size_t tspace_size;
-	mpi_ptr_t tp;
-	mpi_size_t tp_size;
-};
-
-typedef long int mpi_limb_signed_t;
-
-enum dim_tune_state {
-	DIM_PARKING_ON_TOP = 0,
-	DIM_PARKING_TIRED = 1,
-	DIM_GOING_RIGHT = 2,
-	DIM_GOING_LEFT = 3,
-};
-
 struct dim_cq_moder {
 	u16 usec;
 	u16 pkts;
@@ -58455,6 +93951,13 @@
 	DIM_APPLY_NEW_PROFILE = 2,
 };
 
+enum dim_tune_state {
+	DIM_PARKING_ON_TOP = 0,
+	DIM_PARKING_TIRED = 1,
+	DIM_GOING_RIGHT = 2,
+	DIM_GOING_LEFT = 3,
+};
+
 enum dim_stats_state {
 	DIM_STATS_WORSE = 0,
 	DIM_STATS_SAME = 1,
@@ -58467,421 +93970,6 @@
 	DIM_ON_EDGE = 2,
 };
 
-enum pubkey_algo {
-	PUBKEY_ALGO_RSA = 0,
-	PUBKEY_ALGO_MAX = 1,
-};
-
-struct pubkey_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct signature_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t hash;
-	uint8_t keyid[8];
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct sg_splitter {
-	struct scatterlist *in_sg0;
-	int nents;
-	off_t skip_sg0;
-	unsigned int length_last_sg;
-	struct scatterlist *out_sg;
-};
-
-struct sg_pool {
-	size_t size;
-	char *name;
-	struct kmem_cache *slab;
-	mempool_t *pool;
-};
-
-enum {
-	IRQ_POLL_F_SCHED = 0,
-	IRQ_POLL_F_DISABLE = 1,
-};
-
-struct font_desc {
-	int idx;
-	const char *name;
-	int width;
-	int height;
-	const void *data;
-	int pref;
-};
-
-struct font_data {
-	unsigned int extra[4];
-	const unsigned char data[0];
-};
-
-typedef u16 ucs2_char_t;
-
-struct firmware {
-	size_t size;
-	const u8 *data;
-	void *priv;
-};
-
-struct pldmfw_record {
-	struct list_head entry;
-	struct list_head descs;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u16 package_data_len;
-	u32 device_update_flags;
-	const u8 *package_data;
-	long unsigned int *component_bitmap;
-	u16 component_bitmap_len;
-};
-
-struct pldmfw_desc_tlv {
-	struct list_head entry;
-	const u8 *data;
-	u16 type;
-	u16 size;
-};
-
-struct pldmfw_component {
-	struct list_head entry;
-	u16 classification;
-	u16 identifier;
-	u16 options;
-	u16 activation_method;
-	u32 comparison_stamp;
-	u32 component_size;
-	const u8 *component_data;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u8 index;
-};
-
-struct pldmfw_ops;
-
-struct pldmfw {
-	const struct pldmfw_ops *ops;
-	struct device *dev;
-};
-
-struct pldmfw_ops {
-	bool (*match_record)(struct pldmfw *, struct pldmfw_record *);
-	int (*send_package_data)(struct pldmfw *, const u8 *, u16);
-	int (*send_component_table)(struct pldmfw *, struct pldmfw_component *, u8);
-	int (*flash_component)(struct pldmfw *, struct pldmfw_component *);
-	int (*finalize_update)(struct pldmfw *);
-};
-
-struct __pldm_timestamp {
-	u8 b[13];
-};
-
-struct __pldm_header {
-	uuid_t id;
-	u8 revision;
-	__le16 size;
-	struct __pldm_timestamp release_date;
-	__le16 component_bitmap_len;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_record_info {
-	__le16 record_len;
-	u8 descriptor_count;
-	__le32 device_update_flags;
-	u8 version_type;
-	u8 version_len;
-	__le16 package_data_len;
-	u8 variable_record_data[0];
-} __attribute__((packed));
-
-struct __pldmfw_desc_tlv {
-	__le16 type;
-	__le16 size;
-	u8 data[0];
-};
-
-struct __pldmfw_record_area {
-	u8 record_count;
-	u8 records[0];
-};
-
-struct __pldmfw_component_info {
-	__le16 classification;
-	__le16 identifier;
-	__le32 comparison_stamp;
-	__le16 options;
-	__le16 activation_method;
-	__le32 location_offset;
-	__le32 size;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_component_area {
-	__le16 component_image_count;
-	u8 components[0];
-};
-
-struct pldmfw_priv {
-	struct pldmfw *context;
-	const struct firmware *fw;
-	size_t offset;
-	struct list_head records;
-	struct list_head components;
-	const struct __pldm_header *header;
-	u16 total_header_size;
-	u16 component_bitmap_len;
-	u16 bitmap_size;
-	u16 component_count;
-	const u8 *component_start;
-	const u8 *record_start;
-	u8 record_count;
-	u32 header_crc;
-	struct pldmfw_record *matching_record;
-};
-
-struct pldm_pci_record_id {
-	int vendor;
-	int device;
-	int subsystem_vendor;
-	int subsystem_device;
-};
-
-typedef long unsigned int cycles_t;
-
-struct compress_format {
-	unsigned char magic[2];
-	const char *name;
-	decompress_fn decompressor;
-};
-
-struct group_data {
-	int limit[21];
-	int base[20];
-	int permute[258];
-	int minLen;
-	int maxLen;
-};
-
-struct bunzip_data {
-	int writeCopies;
-	int writePos;
-	int writeRunCountdown;
-	int writeCount;
-	int writeCurrent;
-	long int (*fill)(void *, long unsigned int);
-	long int inbufCount;
-	long int inbufPos;
-	unsigned char *inbuf;
-	unsigned int inbufBitCount;
-	unsigned int inbufBits;
-	unsigned int crc32Table[256];
-	unsigned int headerCRC;
-	unsigned int totalCRC;
-	unsigned int writeCRC;
-	unsigned int *dbuf;
-	unsigned int dbufSize;
-	unsigned char selectors[32768];
-	struct group_data groups[6];
-	int io_error;
-	int byteCount[256];
-	unsigned char symToByte[256];
-	unsigned char mtfSymbol[256];
-};
-
-struct rc {
-	long int (*fill)(void *, long unsigned int);
-	uint8_t *ptr;
-	uint8_t *buffer;
-	uint8_t *buffer_end;
-	long int buffer_size;
-	uint32_t code;
-	uint32_t range;
-	uint32_t bound;
-	void (*error)(char *);
-};
-
-struct lzma_header {
-	uint8_t pos;
-	uint32_t dict_size;
-	uint64_t dst_size;
-} __attribute__((packed));
-
-struct writer {
-	uint8_t *buffer;
-	uint8_t previous_byte;
-	size_t buffer_pos;
-	int bufsize;
-	size_t global_pos;
-	long int (*flush)(void *, long unsigned int);
-	struct lzma_header *header;
-};
-
-struct cstate {
-	int state;
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-};
-
-struct xz_dec___2;
-
-typedef enum {
-	ZSTD_error_no_error = 0,
-	ZSTD_error_GENERIC = 1,
-	ZSTD_error_prefix_unknown = 2,
-	ZSTD_error_version_unsupported = 3,
-	ZSTD_error_parameter_unknown = 4,
-	ZSTD_error_frameParameter_unsupported = 5,
-	ZSTD_error_frameParameter_unsupportedBy32bits = 6,
-	ZSTD_error_frameParameter_windowTooLarge = 7,
-	ZSTD_error_compressionParameter_unsupported = 8,
-	ZSTD_error_init_missing = 9,
-	ZSTD_error_memory_allocation = 10,
-	ZSTD_error_stage_wrong = 11,
-	ZSTD_error_dstSize_tooSmall = 12,
-	ZSTD_error_srcSize_wrong = 13,
-	ZSTD_error_corruption_detected = 14,
-	ZSTD_error_checksum_wrong = 15,
-	ZSTD_error_tableLog_tooLarge = 16,
-	ZSTD_error_maxSymbolValue_tooLarge = 17,
-	ZSTD_error_maxSymbolValue_tooSmall = 18,
-	ZSTD_error_dictionary_corrupted = 19,
-	ZSTD_error_dictionary_wrong = 20,
-	ZSTD_error_dictionaryCreation_failed = 21,
-	ZSTD_error_maxCode = 22,
-} ZSTD_ErrorCode;
-
-struct ZSTD_DStream_s___2;
-
-typedef struct ZSTD_DStream_s___2 ZSTD_DStream___2;
-
-struct cpio_data {
-	void *data;
-	size_t size;
-	char name[18];
-};
-
-enum cpio_fields {
-	C_MAGIC = 0,
-	C_INO = 1,
-	C_MODE = 2,
-	C_UID = 3,
-	C_GID = 4,
-	C_NLINK = 5,
-	C_MTIME = 6,
-	C_FILESIZE = 7,
-	C_MAJ = 8,
-	C_MIN = 9,
-	C_RMAJ = 10,
-	C_RMIN = 11,
-	C_NAMESIZE = 12,
-	C_CHKSUM = 13,
-	C_NFIELDS = 14,
-};
-
-enum {
-	ASSUME_PERFECT = 255,
-	ASSUME_VALID_DTB = 1,
-	ASSUME_VALID_INPUT = 2,
-	ASSUME_LATEST = 4,
-	ASSUME_NO_ROLLBACK = 8,
-	ASSUME_LIBFDT_ORDER = 16,
-	ASSUME_LIBFDT_FLAWLESS = 32,
-};
-
-struct fdt_reserve_entry {
-	fdt64_t address;
-	fdt64_t size;
-};
-
-struct fdt_node_header {
-	fdt32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	fdt32_t tag;
-	fdt32_t len;
-	fdt32_t nameoff;
-	char data[0];
-};
-
-struct fdt_errtabent {
-	const char *str;
-};
-
-struct fprop_local_single {
-	long unsigned int events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-struct ida_bitmap {
-	long unsigned int bitmap[16];
-};
-
-struct klist_waiter {
-	struct list_head list;
-	struct klist_node *node;
-	struct task_struct *process;
-	int woken;
-};
-
-struct uevent_sock {
-	struct list_head list;
-	struct sock *sk;
-};
-
-enum {
-	LOGIC_PIO_INDIRECT = 0,
-	LOGIC_PIO_CPU_MMIO = 1,
-};
-
-struct logic_pio_host_ops;
-
-struct logic_pio_hwaddr {
-	struct list_head list;
-	struct fwnode_handle *fwnode;
-	resource_size_t hw_start;
-	resource_size_t io_start;
-	resource_size_t size;
-	long unsigned int flags;
-	void *hostdata;
-	const struct logic_pio_host_ops *ops;
-};
-
-struct logic_pio_host_ops {
-	u32 (*in)(void *, long unsigned int, size_t);
-	void (*out)(void *, long unsigned int, u32, size_t);
-	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
-	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
-};
-
-struct radix_tree_preload {
-	unsigned int nr;
-	struct xa_node *nodes;
-};
-
-typedef struct {
-	long unsigned int key[2];
-} hsiphash_key_t;
-
 enum format_type {
 	FORMAT_TYPE_NONE = 0,
 	FORMAT_TYPE_WIDTH = 1,
@@ -58912,263 +94000,12 @@
 	int precision: 16;
 };
 
-struct minmax_sample {
-	u32 t;
-	u32 v;
-};
-
-struct minmax {
-	struct minmax_sample s[3];
-};
-
-struct xa_limit {
-	u32 max;
-	u32 min;
-};
-
-typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
-
-typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
-
-struct acpi_probe_entry;
-
-typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
-
-struct acpi_probe_entry {
-	__u8 id[5];
-	__u8 type;
-	acpi_probe_entry_validate_subtbl subtable_valid;
-	union {
-		acpi_tbl_table_handler probe_table;
-		acpi_tbl_entry_handler probe_subtbl;
-	};
-	kernel_ulong_t driver_data;
-};
-
-typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
-
-typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
-
-struct armctrl_ic {
-	void *base;
-	void *pending[3];
-	void *enable[3];
-	void *disable[3];
-	struct irq_domain *domain;
-};
-
-struct bcm2836_arm_irqchip_intc {
-	struct irq_domain *domain;
-	void *base;
-};
-
-struct tegra_ictlr_soc {
-	unsigned int num_ictlrs;
-};
-
-struct tegra_ictlr_info {
-	void *base[6];
-	u32 cop_ier[6];
-	u32 cop_iep[6];
-	u32 cpu_ier[6];
-	u32 cpu_iep[6];
-	u32 ictlr_wake_mask[6];
-};
-
-struct sun4i_irq_chip_data {
-	void *irq_base;
-	struct irq_domain *irq_domain;
-	u32 enable_reg_offset;
-	u32 mask_reg_offset;
-};
-
-enum {
-	SUNXI_SRC_TYPE_LEVEL_LOW = 0,
-	SUNXI_SRC_TYPE_EDGE_FALLING = 1,
-	SUNXI_SRC_TYPE_LEVEL_HIGH = 2,
-	SUNXI_SRC_TYPE_EDGE_RISING = 3,
-};
-
-struct sunxi_sc_nmi_reg_offs {
-	u32 ctrl;
-	u32 pend;
-	u32 enable;
-};
-
-struct acpi_madt_generic_distributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 gic_id;
-	u64 base_address;
-	u32 global_irq_base;
-	u8 version;
-	u8 reserved2[3];
-};
-
-enum acpi_madt_gic_version {
-	ACPI_MADT_GIC_VERSION_NONE = 0,
-	ACPI_MADT_GIC_VERSION_V1 = 1,
-	ACPI_MADT_GIC_VERSION_V2 = 2,
-	ACPI_MADT_GIC_VERSION_V3 = 3,
-	ACPI_MADT_GIC_VERSION_V4 = 4,
-	ACPI_MADT_GIC_VERSION_RESERVED = 5,
-};
-
-enum acpi_irq_model_id {
-	ACPI_IRQ_MODEL_PIC = 0,
-	ACPI_IRQ_MODEL_IOAPIC = 1,
-	ACPI_IRQ_MODEL_IOSAPIC = 2,
-	ACPI_IRQ_MODEL_PLATFORM = 3,
-	ACPI_IRQ_MODEL_GIC = 4,
-	ACPI_IRQ_MODEL_COUNT = 5,
-};
-
-union gic_base {
-	void *common_base;
-	void **percpu_base;
-};
-
-struct gic_chip_data {
-	struct irq_chip chip;
-	union gic_base dist_base;
-	union gic_base cpu_base;
-	void *raw_dist_base;
-	void *raw_cpu_base;
-	u32 percpu_offset;
-	u32 saved_spi_enable[32];
-	u32 saved_spi_active[32];
-	u32 saved_spi_conf[64];
-	u32 saved_spi_target[255];
-	u32 *saved_ppi_enable;
-	u32 *saved_ppi_active;
-	u32 *saved_ppi_conf;
-	struct irq_domain *domain;
-	unsigned int gic_irqs;
-};
-
-struct gic_quirk {
-	const char *desc;
-	const char *compatible;
-	bool (*init)(void *);
-	u32 iidr;
-	u32 mask;
-};
-
-struct clk_bulk_data {
-	const char *id;
-	struct clk *clk;
-};
-
-struct gic_clk_data {
-	unsigned int num_clocks;
-	const char * const *clocks;
-};
-
-struct gic_chip_data___2;
-
-struct gic_chip_pm {
-	struct gic_chip_data___2 *chip_data;
-	const struct gic_clk_data *clk_data;
-	struct clk_bulk_data *clks;
-};
-
-struct acpi_table_madt {
-	struct acpi_table_header header;
-	u32 address;
-	u32 flags;
-};
-
-struct acpi_madt_generic_msi_frame {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 msi_frame_id;
-	u64 base_address;
-	u32 flags;
-	u16 spi_count;
-	u16 spi_base;
-};
-
-struct v2m_data {
-	struct list_head entry;
-	struct fwnode_handle *fwnode;
-	struct resource res;
-	void *base;
-	u32 spi_start;
-	u32 nr_spis;
-	u32 spi_offset;
-	long unsigned int *bm;
-	u32 flags;
-};
-
-struct acpi_madt_generic_redistributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 base_address;
-	u32 length;
-} __attribute__((packed));
-
-struct rdists {
-	struct {
-		raw_spinlock_t rd_lock;
-		void *rd_base;
-		struct page *pend_page;
-		phys_addr_t phys_base;
-		bool lpi_enabled;
-		cpumask_t *vpe_table_mask;
-		void *vpe_l1_base;
-	} *rdist;
-	phys_addr_t prop_table_pa;
-	void *prop_table_va;
-	u64 flags;
-	u32 gicd_typer;
-	u32 gicd_typer2;
-	bool has_vlpis;
-	bool has_rvpeid;
-	bool has_direct_lpi;
-	bool has_vpend_valid_dirty;
-};
-
-struct partition_affinity {
-	cpumask_t mask;
-	void *partition_id;
-};
-
-struct redist_region {
-	void *redist_base;
-	phys_addr_t phys_base;
-	bool single_redist;
-};
-
-struct partition_desc;
-
-struct gic_chip_data___3 {
-	struct fwnode_handle *fwnode;
-	void *dist_base;
-	struct redist_region *redist_regions;
-	struct rdists rdists;
-	struct irq_domain *domain;
-	u64 redist_stride;
-	u32 nr_redist_regions;
-	u64 flags;
-	bool has_rss;
-	unsigned int ppi_nr;
-	struct partition_desc **ppi_descs;
-};
-
-enum gic_intid_range {
-	SGI_RANGE = 0,
-	PPI_RANGE = 1,
-	SPI_RANGE = 2,
-	EPPI_RANGE = 3,
-	ESPI_RANGE = 4,
-	LPI_RANGE = 5,
-	__INVALID_RANGE__ = 6,
-};
-
-struct mbi_range {
-	u32 spi_start;
-	u32 nr_spis;
-	long unsigned int *bm;
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
 };
 
 struct acpi_madt_generic_translator {
@@ -59179,266 +94016,6 @@
 	u32 reserved2;
 } __attribute__((packed));
 
-struct acpi_srat_gic_its_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u32 its_id;
-} __attribute__((packed));
-
-enum its_vcpu_info_cmd_type {
-	MAP_VLPI = 0,
-	GET_VLPI = 1,
-	PROP_UPDATE_VLPI = 2,
-	PROP_UPDATE_AND_INV_VLPI = 3,
-	SCHEDULE_VPE = 4,
-	DESCHEDULE_VPE = 5,
-	INVALL_VPE = 6,
-	PROP_UPDATE_VSGI = 7,
-};
-
-struct its_cmd_info {
-	enum its_vcpu_info_cmd_type cmd_type;
-	union {
-		struct its_vlpi_map *map;
-		u8 config;
-		bool req_db;
-		struct {
-			bool g0en;
-			bool g1en;
-		};
-		struct {
-			u8 priority;
-			bool group;
-		};
-	};
-};
-
-struct its_collection___2 {
-	u64 target_address;
-	u16 col_id;
-};
-
-struct its_baser {
-	void *base;
-	u64 val;
-	u32 order;
-	u32 psz;
-};
-
-struct its_cmd_block;
-
-struct its_device___2;
-
-struct its_node {
-	raw_spinlock_t lock;
-	struct mutex dev_alloc_lock;
-	struct list_head entry;
-	void *base;
-	void *sgir_base;
-	phys_addr_t phys_base;
-	struct its_cmd_block *cmd_base;
-	struct its_cmd_block *cmd_write;
-	struct its_baser tables[8];
-	struct its_collection___2 *collections;
-	struct fwnode_handle *fwnode_handle;
-	u64 (*get_msi_base)(struct its_device___2 *);
-	u64 typer;
-	u64 cbaser_save;
-	u32 ctlr_save;
-	u32 mpidr;
-	struct list_head its_device_list;
-	u64 flags;
-	long unsigned int list_nr;
-	int numa_node;
-	unsigned int msi_domain_flags;
-	u32 pre_its_base;
-	int vlpi_redist_offset;
-};
-
-struct its_cmd_block {
-	union {
-		u64 raw_cmd[4];
-		__le64 raw_cmd_le[4];
-	};
-};
-
-struct event_lpi_map {
-	long unsigned int *lpi_map;
-	u16 *col_map;
-	irq_hw_number_t lpi_base;
-	int nr_lpis;
-	raw_spinlock_t vlpi_lock;
-	struct its_vm *vm;
-	struct its_vlpi_map *vlpi_maps;
-	int nr_vlpis;
-};
-
-struct its_device___2 {
-	struct list_head entry;
-	struct its_node *its;
-	struct event_lpi_map event_map;
-	void *itt;
-	u32 nr_ites;
-	u32 device_id;
-	bool shared;
-};
-
-struct cpu_lpi_count {
-	atomic_t managed;
-	atomic_t unmanaged;
-};
-
-struct its_cmd_desc {
-	union {
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_inv_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_clear_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_int_cmd;
-		struct {
-			struct its_device___2 *dev;
-			int valid;
-		} its_mapd_cmd;
-		struct {
-			struct its_collection___2 *col;
-			int valid;
-		} its_mapc_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 phys_id;
-			u32 event_id;
-		} its_mapti_cmd;
-		struct {
-			struct its_device___2 *dev;
-			struct its_collection___2 *col;
-			u32 event_id;
-		} its_movi_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_discard_cmd;
-		struct {
-			struct its_collection___2 *col;
-		} its_invall_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_vinvall_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			bool valid;
-		} its_vmapp_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 virt_id;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmapti_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmovi_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			u16 seq_num;
-			u16 its_list;
-		} its_vmovp_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_invdb_cmd;
-		struct {
-			struct its_vpe *vpe;
-			u8 sgi;
-			u8 priority;
-			bool enable;
-			bool group;
-			bool clear;
-		} its_vsgi_cmd;
-	};
-};
-
-typedef struct its_collection___2 * (*its_cmd_builder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-typedef struct its_vpe * (*its_cmd_vbuilder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-struct lpi_range {
-	struct list_head entry;
-	u32 base_id;
-	u32 span;
-};
-
-struct its_srat_map {
-	u32 numa_node;
-	u32 its_id;
-};
-
-struct msi_controller {
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct list_head list;
-	int (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);
-	int (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);
-	void (*teardown_irq)(struct msi_controller *, unsigned int);
-};
-
-struct partition_desc___2 {
-	int nr_parts;
-	struct partition_affinity *parts;
-	struct irq_domain *domain;
-	struct irq_desc *chained_desc;
-	long unsigned int *bitmap;
-	struct irq_domain_ops ops;
-};
-
-struct mbigen_device {
-	struct platform_device *pdev;
-	void *base;
-};
-
-struct mtk_sysirq_chip_data {
-	raw_spinlock_t lock;
-	u32 nr_intpol_bases;
-	void **intpol_bases;
-	u32 *intpol_words;
-	u8 *intpol_idx;
-	u16 *which_word;
-};
-
-struct mtk_cirq_chip_data {
-	void *base;
-	unsigned int ext_irq_start;
-	unsigned int ext_irq_end;
-	struct irq_domain *domain;
-};
-
-struct mvebu_gicp_spi_range {
-	unsigned int start;
-	unsigned int count;
-};
-
-struct mvebu_gicp {
-	struct mvebu_gicp_spi_range *spi_ranges;
-	unsigned int spi_ranges_cnt;
-	unsigned int spi_cnt;
-	long unsigned int *spi_bitmap;
-	spinlock_t spi_lock;
-	struct resource *res;
-	struct device *dev;
-};
-
 struct mvebu_icu_subset_data {
 	unsigned int icu_group;
 	unsigned int offset_set_ah;
@@ -59464,800 +94041,18 @@
 	unsigned int type;
 };
 
-struct odmi_data {
-	struct resource res;
-	void *base;
-	unsigned int spi_base;
+struct pdc_pin_region {
+	u32 pin_base;
+	u32 parent_base;
+	u32 cnt;
 };
 
-struct mvebu_pic {
-	void *base;
-	u32 parent_irq;
-	struct irq_domain *domain;
-	struct irq_chip irq_chip;
-};
-
-struct mvebu_sei_interrupt_range {
-	u32 first;
-	u32 size;
-};
-
-struct mvebu_sei_caps {
-	struct mvebu_sei_interrupt_range ap_range;
-	struct mvebu_sei_interrupt_range cp_range;
-};
-
-struct mvebu_sei {
-	struct device *dev;
-	void *base;
-	struct resource *res;
-	struct irq_domain *sei_domain;
-	struct irq_domain *ap_domain;
-	struct irq_domain *cp_domain;
-	const struct mvebu_sei_caps *caps;
-	struct mutex cp_msi_lock;
-	long unsigned int cp_msi_bitmap[1];
-	raw_spinlock_t mask_lock;
-};
-
-struct meson_gpio_irq_controller;
-
-struct irq_ctl_ops {
-	void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *, unsigned int, long unsigned int);
-	void (*gpio_irq_init)(struct meson_gpio_irq_controller *);
-};
-
-struct meson_gpio_irq_params;
-
-struct meson_gpio_irq_controller {
-	const struct meson_gpio_irq_params *params;
-	void *base;
-	u32 channel_irqs[8];
-	long unsigned int channel_map[1];
-	spinlock_t lock;
-};
-
-struct meson_gpio_irq_params {
-	unsigned int nr_hwirq;
-	bool support_edge_both;
-	unsigned int edge_both_offset;
-	unsigned int edge_single_offset;
-	unsigned int pol_low_offset;
-	unsigned int pin_sel_mask;
-	struct irq_ctl_ops ops;
-};
-
-struct regmap_irq_type {
-	unsigned int type_reg_offset;
-	unsigned int type_reg_mask;
-	unsigned int type_rising_val;
-	unsigned int type_falling_val;
-	unsigned int type_level_low_val;
-	unsigned int type_level_high_val;
-	unsigned int types_supported;
-};
-
-struct regmap_irq {
-	unsigned int reg_offset;
-	unsigned int mask;
-	struct regmap_irq_type type;
-};
-
-struct regmap_irq_sub_irq_map {
-	unsigned int num_regs;
-	unsigned int *offset;
-};
-
-struct regmap_irq_chip {
-	const char *name;
-	unsigned int main_status;
-	unsigned int num_main_status_bits;
-	struct regmap_irq_sub_irq_map *sub_reg_offsets;
-	int num_main_regs;
-	unsigned int status_base;
-	unsigned int mask_base;
-	unsigned int unmask_base;
-	unsigned int ack_base;
-	unsigned int wake_base;
-	unsigned int type_base;
-	unsigned int irq_reg_stride;
-	bool mask_writeonly: 1;
-	bool init_ack_masked: 1;
-	bool mask_invert: 1;
-	bool use_ack: 1;
-	bool ack_invert: 1;
-	bool clear_ack: 1;
-	bool wake_invert: 1;
-	bool runtime_pm: 1;
-	bool type_invert: 1;
-	bool type_in_mask: 1;
-	bool clear_on_unmask: 1;
-	int num_regs;
-	const struct regmap_irq *irqs;
-	int num_irqs;
-	int num_type_reg;
-	unsigned int type_reg_stride;
-	int (*handle_pre_irq)(void *);
-	int (*handle_post_irq)(void *);
-	void *irq_drv_data;
-};
-
-struct gpio_desc;
-
-struct regulator_init_data;
-
-struct arizona_ldo1_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator_state {
-	int uV;
-	int min_uV;
-	int max_uV;
-	unsigned int mode;
-	int enabled;
-	bool changeable;
-};
-
-struct regulation_constraints {
-	const char *name;
-	int min_uV;
-	int max_uV;
-	int uV_offset;
-	int min_uA;
-	int max_uA;
-	int ilim_uA;
-	int system_load;
-	u32 *max_spread;
-	int max_uV_step;
-	unsigned int valid_modes_mask;
-	unsigned int valid_ops_mask;
-	int input_uV;
-	struct regulator_state state_disk;
-	struct regulator_state state_mem;
-	struct regulator_state state_standby;
-	suspend_state_t initial_state;
-	unsigned int initial_mode;
-	unsigned int ramp_delay;
-	unsigned int settling_time;
-	unsigned int settling_time_up;
-	unsigned int settling_time_down;
-	unsigned int enable_time;
-	unsigned int active_discharge;
-	unsigned int always_on: 1;
-	unsigned int boot_on: 1;
-	unsigned int apply_uV: 1;
-	unsigned int ramp_disable: 1;
-	unsigned int soft_start: 1;
-	unsigned int pull_down: 1;
-	unsigned int over_current_protection: 1;
-};
-
-struct regulator_consumer_supply;
-
-struct regulator_init_data {
-	const char *supply_regulator;
-	struct regulation_constraints constraints;
-	int num_consumer_supplies;
-	struct regulator_consumer_supply *consumer_supplies;
-	int (*regulator_init)(void *);
-	void *driver_data;
-};
-
-struct arizona_micsupp_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator;
-
-struct regulator_bulk_data {
-	const char *supply;
-	struct regulator *consumer;
-	int ret;
-};
-
-struct regulator_consumer_supply {
-	const char *dev_name;
-	const char *supply;
-};
-
-struct madera_codec_pdata {
-	u32 max_channels_clocked[4];
-	u32 dmic_ref[6];
-	u32 inmode[24];
-	bool out_mono[6];
-	u32 pdm_fmt[2];
-	u32 pdm_mute[2];
-};
-
-struct pinctrl_map;
-
-struct madera_pdata {
-	struct gpio_desc *reset;
-	struct arizona_ldo1_pdata ldo1;
-	struct arizona_micsupp_pdata micvdd;
-	unsigned int irq_flags;
-	int gpio_base;
-	const struct pinctrl_map *gpio_configs;
-	int n_gpio_configs;
-	u32 gpsw[2];
-	struct madera_codec_pdata codec;
-};
-
-enum pinctrl_map_type {
-	PIN_MAP_TYPE_INVALID = 0,
-	PIN_MAP_TYPE_DUMMY_STATE = 1,
-	PIN_MAP_TYPE_MUX_GROUP = 2,
-	PIN_MAP_TYPE_CONFIGS_PIN = 3,
-	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
-};
-
-struct pinctrl_map_mux {
-	const char *group;
-	const char *function;
-};
-
-struct pinctrl_map_configs {
-	const char *group_or_pin;
-	long unsigned int *configs;
-	unsigned int num_configs;
-};
-
-struct pinctrl_map {
-	const char *dev_name;
-	const char *name;
-	enum pinctrl_map_type type;
-	const char *ctrl_dev_name;
-	union {
-		struct pinctrl_map_mux mux;
-		struct pinctrl_map_configs configs;
-	} data;
-};
-
-enum madera_type {
-	CS47L35 = 1,
-	CS47L85 = 2,
-	CS47L90 = 3,
-	CS47L91 = 4,
-	CS47L92 = 5,
-	CS47L93 = 6,
-	WM1840 = 7,
-	CS47L15 = 8,
-	CS42L92 = 9,
-};
-
-enum {
-	MADERA_MCLK1 = 0,
-	MADERA_MCLK2 = 1,
-	MADERA_MCLK3 = 2,
-	MADERA_NUM_MCLK = 3,
-};
-
-struct regmap;
-
-struct regmap_irq_chip_data;
-
-struct snd_soc_dapm_context;
-
-struct madera {
-	struct regmap *regmap;
-	struct regmap *regmap_32bit;
-	struct device *dev;
-	enum madera_type type;
-	unsigned int rev;
-	const char *type_name;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool internal_dcvdd;
-	struct madera_pdata pdata;
-	struct device *irq_dev;
-	struct regmap_irq_chip_data *irq_data;
-	int irq;
-	struct clk_bulk_data mclk[3];
-	unsigned int num_micbias;
-	unsigned int num_childbias[4];
-	struct snd_soc_dapm_context *dapm;
-	struct mutex dapm_ptr_lock;
-	unsigned int hp_ena;
-	bool out_clamp[3];
-	bool out_shorted[3];
-	struct blocking_notifier_head notifier;
-};
-
-struct mst_intc_chip_data {
-	raw_spinlock_t lock;
-	unsigned int irq_start;
-	unsigned int nr_irqs;
-	void *base;
-	bool no_eoi;
-};
-
-struct of_dev_auxdata {
-	char *compatible;
-	resource_size_t phys_addr;
-	char *name;
-	void *platform_data;
-};
-
-struct circ_buf {
-	char *buf;
-	int head;
-	int tail;
-};
-
-struct serial_rs485 {
-	__u32 flags;
-	__u32 delay_rts_before_send;
-	__u32 delay_rts_after_send;
-	__u32 padding[5];
-};
-
-struct serial_iso7816 {
-	__u32 flags;
-	__u32 tg;
-	__u32 sc_fi;
-	__u32 sc_di;
-	__u32 clk;
-	__u32 reserved[5];
-};
-
-struct uart_port;
-
-struct uart_ops {
-	unsigned int (*tx_empty)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*stop_tx)(struct uart_port *);
-	void (*start_tx)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	void (*send_xchar)(struct uart_port *, char);
-	void (*stop_rx)(struct uart_port *);
-	void (*enable_ms)(struct uart_port *);
-	void (*break_ctl)(struct uart_port *, int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*flush_buffer)(struct uart_port *);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	const char * (*type)(struct uart_port *);
-	void (*release_port)(struct uart_port *);
-	int (*request_port)(struct uart_port *);
-	void (*config_port)(struct uart_port *, int);
-	int (*verify_port)(struct uart_port *, struct serial_struct *);
-	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
-	int (*poll_init)(struct uart_port *);
-	void (*poll_put_char)(struct uart_port *, unsigned char);
-	int (*poll_get_char)(struct uart_port *);
-};
-
-struct uart_icount {
-	__u32 cts;
-	__u32 dsr;
-	__u32 rng;
-	__u32 dcd;
-	__u32 rx;
-	__u32 tx;
-	__u32 frame;
-	__u32 overrun;
-	__u32 parity;
-	__u32 brk;
-	__u32 buf_overrun;
-};
-
-typedef unsigned int upf_t;
-
-typedef unsigned int upstat_t;
-
-struct uart_state;
-
-struct uart_port {
-	spinlock_t lock;
-	long unsigned int iobase;
-	unsigned char *membase;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
-	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	unsigned int fifosize;
-	unsigned char x_char;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char quirks;
-	unsigned int read_status_mask;
-	unsigned int ignore_status_mask;
-	struct uart_state *state;
-	struct uart_icount icount;
-	struct console *cons;
-	upf_t flags;
-	upstat_t status;
-	int hw_stopped;
-	unsigned int mctrl;
-	unsigned int timeout;
-	unsigned int type;
-	const struct uart_ops *ops;
-	unsigned int custom_divisor;
-	unsigned int line;
-	unsigned int minor;
-	resource_size_t mapbase;
-	resource_size_t mapsize;
-	struct device *dev;
-	long unsigned int sysrq;
-	unsigned int sysrq_ch;
-	unsigned char has_sysrq;
-	unsigned char sysrq_seq;
-	unsigned char hub6;
-	unsigned char suspended;
-	unsigned char console_reinit;
-	const char *name;
-	struct attribute_group *attr_group;
-	const struct attribute_group **tty_groups;
-	struct serial_rs485 rs485;
-	struct gpio_desc *rs485_term_gpio;
-	struct serial_iso7816 iso7816;
-	void *private_data;
-};
-
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3,
-	UART_PM_STATE_UNDEFINED = 4,
-};
-
-struct uart_state {
-	struct tty_port port;
-	enum uart_pm_state pm_state;
-	struct circ_buf xmit;
-	atomic_t refcount;
-	wait_queue_head_t remove_wait;
-	struct uart_port *uart_port;
-};
-
-struct plat_serial8250_port {
-	long unsigned int iobase;
-	void *membase;
-	resource_size_t mapbase;
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	void *private_data;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char hub6;
-	unsigned char has_sysrq;
-	upf_t flags;
-	unsigned int type;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-};
-
-struct lpc_cycle_para {
-	unsigned int opflags;
-	unsigned int csize;
-};
-
-struct hisi_lpc_dev {
-	spinlock_t cycle_lock;
-	void *membase;
-	struct logic_pio_hwaddr *io_host;
-};
-
-struct hisi_lpc_acpi_cell {
-	const char *hid;
-	const char *name;
-	void *pdata;
-	size_t pdata_size;
-};
-
-enum regcache_type {
-	REGCACHE_NONE = 0,
-	REGCACHE_RBTREE = 1,
-	REGCACHE_COMPRESSED = 2,
-	REGCACHE_FLAT = 3,
-};
-
-struct reg_default {
-	unsigned int reg;
-	unsigned int def;
-};
-
-enum regmap_endian {
-	REGMAP_ENDIAN_DEFAULT = 0,
-	REGMAP_ENDIAN_BIG = 1,
-	REGMAP_ENDIAN_LITTLE = 2,
-	REGMAP_ENDIAN_NATIVE = 3,
-};
-
-struct regmap_range {
-	unsigned int range_min;
-	unsigned int range_max;
-};
-
-struct regmap_access_table {
-	const struct regmap_range *yes_ranges;
-	unsigned int n_yes_ranges;
-	const struct regmap_range *no_ranges;
-	unsigned int n_no_ranges;
-};
-
-typedef void (*regmap_lock)(void *);
-
-typedef void (*regmap_unlock)(void *);
-
-struct regmap_range_cfg;
-
-struct regmap_config {
-	const char *name;
-	int reg_bits;
-	int reg_stride;
-	int pad_bits;
-	int val_bits;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	bool disable_locking;
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	bool fast_io;
-	unsigned int max_register;
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	const struct reg_default *reg_defaults;
-	unsigned int num_reg_defaults;
-	enum regcache_type cache_type;
-	const void *reg_defaults_raw;
-	unsigned int num_reg_defaults_raw;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	bool zero_flag_mask;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	enum regmap_endian reg_format_endian;
-	enum regmap_endian val_format_endian;
-	const struct regmap_range_cfg *ranges;
-	unsigned int num_ranges;
-	bool use_hwlock;
-	unsigned int hwlock_id;
-	unsigned int hwlock_mode;
-	bool can_sleep;
-};
-
-struct regmap_range_cfg {
-	const char *name;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct vexpress_syscfg {
-	struct device *dev;
-	void *base;
-	struct list_head funcs;
-};
-
-struct vexpress_syscfg_func {
-	struct list_head list;
-	struct vexpress_syscfg *syscfg;
-	struct regmap *regmap;
-	int num_templates;
-	u32 template[0];
-};
-
-struct vexpress_config_bridge_ops {
-	struct regmap * (*regmap_init)(struct device *, void *);
-	void (*regmap_exit)(struct regmap *, void *);
-};
-
-struct vexpress_config_bridge {
-	struct vexpress_config_bridge_ops *ops;
-	void *context;
-};
-
-enum device_link_state {
-	DL_STATE_NONE = 4294967295,
-	DL_STATE_DORMANT = 0,
-	DL_STATE_AVAILABLE = 1,
-	DL_STATE_CONSUMER_PROBE = 2,
-	DL_STATE_ACTIVE = 3,
-	DL_STATE_SUPPLIER_UNBIND = 4,
-};
-
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	struct device link_dev;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-	struct callback_head callback_head;
-	bool supplier_preactivated;
-};
-
-struct phy_configure_opts_dp {
-	unsigned int link_rate;
-	unsigned int lanes;
-	unsigned int voltage[4];
-	unsigned int pre[4];
-	u8 ssc: 1;
-	u8 set_rate: 1;
-	u8 set_lanes: 1;
-	u8 set_voltages: 1;
-};
-
-struct phy_configure_opts_mipi_dphy {
-	unsigned int clk_miss;
-	unsigned int clk_post;
-	unsigned int clk_pre;
-	unsigned int clk_prepare;
-	unsigned int clk_settle;
-	unsigned int clk_term_en;
-	unsigned int clk_trail;
-	unsigned int clk_zero;
-	unsigned int d_term_en;
-	unsigned int eot;
-	unsigned int hs_exit;
-	unsigned int hs_prepare;
-	unsigned int hs_settle;
-	unsigned int hs_skip;
-	unsigned int hs_trail;
-	unsigned int hs_zero;
-	unsigned int init;
-	unsigned int lpx;
-	unsigned int ta_get;
-	unsigned int ta_go;
-	unsigned int ta_sure;
-	unsigned int wakeup;
-	long unsigned int hs_clk_rate;
-	long unsigned int lp_clk_rate;
-	unsigned char lanes;
-};
-
-enum phy_mode {
-	PHY_MODE_INVALID = 0,
-	PHY_MODE_USB_HOST = 1,
-	PHY_MODE_USB_HOST_LS = 2,
-	PHY_MODE_USB_HOST_FS = 3,
-	PHY_MODE_USB_HOST_HS = 4,
-	PHY_MODE_USB_HOST_SS = 5,
-	PHY_MODE_USB_DEVICE = 6,
-	PHY_MODE_USB_DEVICE_LS = 7,
-	PHY_MODE_USB_DEVICE_FS = 8,
-	PHY_MODE_USB_DEVICE_HS = 9,
-	PHY_MODE_USB_DEVICE_SS = 10,
-	PHY_MODE_USB_OTG = 11,
-	PHY_MODE_UFS_HS_A = 12,
-	PHY_MODE_UFS_HS_B = 13,
-	PHY_MODE_PCIE = 14,
-	PHY_MODE_ETHERNET = 15,
-	PHY_MODE_MIPI_DPHY = 16,
-	PHY_MODE_SATA = 17,
-	PHY_MODE_LVDS = 18,
-	PHY_MODE_DP = 19,
-};
-
-union phy_configure_opts {
-	struct phy_configure_opts_mipi_dphy mipi_dphy;
-	struct phy_configure_opts_dp dp;
-};
-
-struct phy;
-
-struct phy_ops {
-	int (*init)(struct phy *);
-	int (*exit)(struct phy *);
-	int (*power_on)(struct phy *);
-	int (*power_off)(struct phy *);
-	int (*set_mode)(struct phy *, enum phy_mode, int);
-	int (*configure)(struct phy *, union phy_configure_opts *);
-	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
-	int (*reset)(struct phy *);
-	int (*calibrate)(struct phy *);
-	void (*release)(struct phy *);
-	struct module *owner;
-};
-
-struct phy_attrs {
-	u32 bus_width;
-	u32 max_link_rate;
-	enum phy_mode mode;
-};
-
-struct phy {
-	struct device dev;
-	int id;
-	const struct phy_ops *ops;
-	struct mutex mutex;
-	int init_count;
-	int power_count;
-	struct phy_attrs attrs;
-	struct regulator *pwr;
-};
-
-struct phy_provider {
-	struct device *dev;
-	struct device_node *children;
-	struct module *owner;
-	struct list_head list;
-	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
-};
-
-struct phy_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct phy *phy;
-};
-
-enum usb_dr_mode {
-	USB_DR_MODE_UNKNOWN = 0,
-	USB_DR_MODE_HOST = 1,
-	USB_DR_MODE_PERIPHERAL = 2,
-	USB_DR_MODE_OTG = 3,
-};
-
-struct phy_meson8b_usb2_match_data {
-	bool host_enable_aca;
-};
-
-struct reset_control;
-
-struct phy_meson8b_usb2_priv {
-	struct regmap *regmap;
-	enum usb_dr_mode dr_mode;
-	struct clk *clk_usb_general;
-	struct clk *clk_usb;
-	struct reset_control *reset;
-	const struct phy_meson8b_usb2_match_data *match;
-};
-
-struct phy_meson_gxl_usb2_priv {
-	struct regmap *regmap;
-	enum phy_mode mode;
-	int is_enabled;
-	struct clk *clk;
-	struct reset_control *reset;
+enum pdc_irq_config_bits {
+	PDC_LEVEL_LOW = 0,
+	PDC_EDGE_FALLING = 2,
+	PDC_LEVEL_HIGH = 4,
+	PDC_EDGE_RISING = 6,
+	PDC_EDGE_DUAL = 7,
 };
 
 enum meson_soc_id {
@@ -60273,549 +94068,24 @@
 	int soc_id;
 };
 
-struct phy_g12a_usb3_pcie_priv {
-	struct regmap *regmap;
-	struct regmap *regmap_cr;
-	struct clk *clk_ref;
-	struct reset_control *reset;
-	struct phy *phy;
-	unsigned int mode;
-};
-
-struct phy_axg_pcie_priv {
-	struct phy *phy;
-	struct phy *analog;
-	struct regmap *regmap;
-	struct reset_control *reset;
-};
-
-struct phy_axg_mipi_pcie_analog_priv {
-	struct phy *phy;
-	unsigned int mode;
-	struct regmap *regmap;
-};
-
-enum ethtool_link_mode_bit_indices {
-	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
-	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
-	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
-	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
-	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
-	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
-	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
-	ETHTOOL_LINK_MODE_TP_BIT = 7,
-	ETHTOOL_LINK_MODE_AUI_BIT = 8,
-	ETHTOOL_LINK_MODE_MII_BIT = 9,
-	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
-	ETHTOOL_LINK_MODE_BNC_BIT = 11,
-	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
-	ETHTOOL_LINK_MODE_Pause_BIT = 13,
-	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
-	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
-	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
-	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
-	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
-	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
-	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
-	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
-	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
-	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
-	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
-	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
-	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
-	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
-	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
-	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
-	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
-	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
-	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
-	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
-	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
-	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
-	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
-	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
-	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
-	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
-	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
-	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
-	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
-	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
-	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
-	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
-	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
-	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
-	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
-	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
-	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
-	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
-	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
-	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
-	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
-	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
-	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
-	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
-	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
-	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
-	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
-	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
-	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
-	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
-	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
-	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
-	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
-	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
-	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
-	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
-	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
-	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
-	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
-	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
-	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
-	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
-	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
-	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
-	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
-	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
-	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
-	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
-	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
-	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
-	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
-	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
-	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
-	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
-	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
-	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
-	__ETHTOOL_LINK_MODE_MASK_NBITS = 92,
-};
-
-struct mvebu_a3700_comphy_conf {
-	unsigned int lane;
-	enum phy_mode mode;
-	int submode;
-	unsigned int port;
-	u32 fw_mode;
-};
-
-struct mvebu_a3700_comphy_lane {
-	struct device *dev;
-	unsigned int id;
-	enum phy_mode mode;
-	int submode;
-	int port;
-};
-
-struct mvebu_a3700_utmi_caps {
-	int usb32;
-	const struct phy_ops *ops;
-};
-
-struct mvebu_a3700_utmi {
-	void *regs;
-	struct regmap *usb_misc;
-	const struct mvebu_a3700_utmi_caps *caps;
-	struct phy *phy;
-};
-
-struct exynos_dp_video_phy_drvdata {
-	u32 phy_ctrl_offset;
-};
-
-struct exynos_dp_video_phy {
-	struct regmap *regs;
-	const struct exynos_dp_video_phy_drvdata *drvdata;
-};
-
-enum exynos_mipi_phy_id {
-	EXYNOS_MIPI_PHY_ID_NONE = 4294967295,
-	EXYNOS_MIPI_PHY_ID_CSIS0 = 0,
-	EXYNOS_MIPI_PHY_ID_DSIM0 = 1,
-	EXYNOS_MIPI_PHY_ID_CSIS1 = 2,
-	EXYNOS_MIPI_PHY_ID_DSIM1 = 3,
-	EXYNOS_MIPI_PHY_ID_CSIS2 = 4,
-	EXYNOS_MIPI_PHYS_NUM = 5,
-};
-
-enum exynos_mipi_phy_regmap_id {
-	EXYNOS_MIPI_REGMAP_PMU = 0,
-	EXYNOS_MIPI_REGMAP_DISP = 1,
-	EXYNOS_MIPI_REGMAP_CAM0 = 2,
-	EXYNOS_MIPI_REGMAP_CAM1 = 3,
-	EXYNOS_MIPI_REGMAPS_NUM = 4,
-};
-
-struct exynos_mipi_phy_desc {
-	enum exynos_mipi_phy_id coupled_phy_id;
-	u32 enable_val;
-	unsigned int enable_reg;
-	enum exynos_mipi_phy_regmap_id enable_map;
-	u32 resetn_val;
-	unsigned int resetn_reg;
-	enum exynos_mipi_phy_regmap_id resetn_map;
-};
-
-struct mipi_phy_device_desc {
-	int num_phys;
-	int num_regmaps;
-	const char *regmap_names[4];
-	struct exynos_mipi_phy_desc phys[5];
-};
-
-struct video_phy_desc {
-	struct phy *phy;
-	unsigned int index;
-	const struct exynos_mipi_phy_desc *data;
-};
-
-struct exynos_mipi_video_phy {
-	struct regmap *regmaps[4];
-	int num_phys;
-	struct video_phy_desc phys[5];
-	spinlock_t slock;
-};
-
-struct pinctrl;
-
-struct pinctrl_state;
-
-struct dev_pin_info {
-	struct pinctrl *p;
-	struct pinctrl_state *default_state;
-	struct pinctrl_state *init_state;
-	struct pinctrl_state *sleep_state;
-	struct pinctrl_state *idle_state;
-};
-
-struct pinctrl {
-	struct list_head node;
-	struct device *dev;
-	struct list_head states;
-	struct pinctrl_state *state;
-	struct list_head dt_maps;
-	struct kref users;
-};
-
-struct pinctrl_state {
-	struct list_head node;
-	const char *name;
-	struct list_head settings;
-};
-
-struct pinctrl_pin_desc {
-	unsigned int number;
-	const char *name;
-	void *drv_data;
-};
-
-struct gpio_chip;
-
-struct pinctrl_gpio_range {
-	struct list_head node;
-	const char *name;
-	unsigned int id;
-	unsigned int base;
-	unsigned int pin_base;
-	const unsigned int *pins;
-	unsigned int npins;
-	struct gpio_chip *gc;
-};
-
-struct gpio_irq_chip {
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	const struct irq_domain_ops *domain_ops;
-	struct fwnode_handle *fwnode;
-	struct irq_domain *parent_domain;
-	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
-	void * (*populate_parent_alloc_arg)(struct gpio_chip *, unsigned int, unsigned int);
-	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
-	struct irq_domain_ops child_irq_domain_ops;
-	irq_flow_handler_t handler;
-	unsigned int default_type;
-	struct lock_class_key *lock_key;
-	struct lock_class_key *request_key;
-	irq_flow_handler_t parent_handler;
-	void *parent_handler_data;
-	unsigned int num_parents;
-	unsigned int *parents;
-	unsigned int *map;
-	bool threaded;
-	int (*init_hw)(struct gpio_chip *);
-	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
-	long unsigned int *valid_mask;
-	unsigned int first;
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-};
-
-struct gpio_device;
-
-struct gpio_chip {
-	const char *label;
-	struct gpio_device *gpiodev;
-	struct device *parent;
-	struct module *owner;
-	int (*request)(struct gpio_chip *, unsigned int);
-	void (*free)(struct gpio_chip *, unsigned int);
-	int (*get_direction)(struct gpio_chip *, unsigned int);
-	int (*direction_input)(struct gpio_chip *, unsigned int);
-	int (*direction_output)(struct gpio_chip *, unsigned int, int);
-	int (*get)(struct gpio_chip *, unsigned int);
-	int (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
-	void (*set)(struct gpio_chip *, unsigned int, int);
-	void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
-	int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
-	int (*to_irq)(struct gpio_chip *, unsigned int);
-	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
-	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
-	int (*add_pin_ranges)(struct gpio_chip *);
-	int base;
-	u16 ngpio;
-	const char * const *names;
-	bool can_sleep;
-	long unsigned int (*read_reg)(void *);
-	void (*write_reg)(void *, long unsigned int);
-	bool be_bits;
-	void *reg_dat;
-	void *reg_set;
-	void *reg_clr;
-	void *reg_dir_out;
-	void *reg_dir_in;
-	bool bgpio_dir_unreadable;
-	int bgpio_bits;
-	spinlock_t bgpio_lock;
-	long unsigned int bgpio_data;
-	long unsigned int bgpio_dir;
-	struct gpio_irq_chip irq;
-	long unsigned int *valid_mask;
-	struct device_node *of_node;
-	unsigned int of_gpio_n_cells;
-	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
-};
-
-struct pinctrl_dev;
-
-struct pinctrl_ops {
-	int (*get_groups_count)(struct pinctrl_dev *);
-	const char * (*get_group_name)(struct pinctrl_dev *, unsigned int);
-	int (*get_group_pins)(struct pinctrl_dev *, unsigned int, const unsigned int **, unsigned int *);
-	void (*pin_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	int (*dt_node_to_map)(struct pinctrl_dev *, struct device_node *, struct pinctrl_map **, unsigned int *);
-	void (*dt_free_map)(struct pinctrl_dev *, struct pinctrl_map *, unsigned int);
-};
-
-struct pinctrl_desc;
-
-struct pinctrl_dev {
-	struct list_head node;
-	struct pinctrl_desc *desc;
-	struct xarray pin_desc_tree;
-	struct xarray pin_group_tree;
-	unsigned int num_groups;
-	struct xarray pin_function_tree;
-	unsigned int num_functions;
-	struct list_head gpio_ranges;
-	struct device *dev;
-	struct module *owner;
-	void *driver_data;
-	struct pinctrl *p;
-	struct pinctrl_state *hog_default;
-	struct pinctrl_state *hog_sleep;
-	struct mutex mutex;
-	struct dentry *device_root;
-};
-
-struct pinmux_ops;
-
-struct pinconf_ops;
-
-struct pinconf_generic_params;
-
-struct pin_config_item;
-
-struct pinctrl_desc {
-	const char *name;
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	const struct pinctrl_ops *pctlops;
-	const struct pinmux_ops *pmxops;
-	const struct pinconf_ops *confops;
-	struct module *owner;
-	unsigned int num_custom_params;
-	const struct pinconf_generic_params *custom_params;
-	const struct pin_config_item *custom_conf_items;
-	bool link_consumers;
-};
-
-struct pinmux_ops {
-	int (*request)(struct pinctrl_dev *, unsigned int);
-	int (*free)(struct pinctrl_dev *, unsigned int);
-	int (*get_functions_count)(struct pinctrl_dev *);
-	const char * (*get_function_name)(struct pinctrl_dev *, unsigned int);
-	int (*get_function_groups)(struct pinctrl_dev *, unsigned int, const char * const **, unsigned int *);
-	int (*set_mux)(struct pinctrl_dev *, unsigned int, unsigned int);
-	int (*gpio_request_enable)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
-	void (*gpio_disable_free)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
-	int (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);
-	bool strict;
-};
-
-struct pinconf_ops {
-	bool is_generic;
-	int (*pin_config_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
-	int (*pin_config_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
-	int (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
-	int (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
-	void (*pin_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	void (*pin_config_group_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	void (*pin_config_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, long unsigned int);
-};
-
-enum pin_config_param {
-	PIN_CONFIG_BIAS_BUS_HOLD = 0,
-	PIN_CONFIG_BIAS_DISABLE = 1,
-	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
-	PIN_CONFIG_BIAS_PULL_DOWN = 3,
-	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
-	PIN_CONFIG_BIAS_PULL_UP = 5,
-	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
-	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
-	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
-	PIN_CONFIG_DRIVE_STRENGTH = 9,
-	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
-	PIN_CONFIG_INPUT_DEBOUNCE = 11,
-	PIN_CONFIG_INPUT_ENABLE = 12,
-	PIN_CONFIG_INPUT_SCHMITT = 13,
-	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
-	PIN_CONFIG_LOW_POWER_MODE = 15,
-	PIN_CONFIG_OUTPUT_ENABLE = 16,
-	PIN_CONFIG_OUTPUT = 17,
-	PIN_CONFIG_POWER_SOURCE = 18,
-	PIN_CONFIG_SLEEP_HARDWARE_STATE = 19,
-	PIN_CONFIG_SLEW_RATE = 20,
-	PIN_CONFIG_SKEW_DELAY = 21,
-	PIN_CONFIG_PERSIST_STATE = 22,
-	PIN_CONFIG_END = 127,
-	PIN_CONFIG_MAX = 255,
-};
-
-struct pinconf_generic_params {
-	const char * const property;
-	enum pin_config_param param;
-	u32 default_value;
-};
-
-struct pin_config_item {
-	const enum pin_config_param param;
-	const char * const display;
-	const char * const format;
-	bool has_arg;
-};
-
-struct gpio_desc___2;
-
-struct gpio_device {
-	int id;
-	struct device dev;
-	struct cdev chrdev;
-	struct device *mockdev;
-	struct module *owner;
-	struct gpio_chip *chip;
-	struct gpio_desc___2 *descs;
-	int base;
-	u16 ngpio;
-	const char *label;
-	void *data;
-	struct list_head list;
-	struct blocking_notifier_head notifier;
-	struct list_head pin_ranges;
-};
-
-struct gpio_desc___2 {
-	struct gpio_device *gdev;
-	long unsigned int flags;
-	const char *label;
-	const char *name;
-	struct device_node *hog;
-	unsigned int debounce_period_us;
-};
-
-struct pinctrl_setting_mux {
-	unsigned int group;
-	unsigned int func;
-};
-
-struct pinctrl_setting_configs {
-	unsigned int group_or_pin;
-	long unsigned int *configs;
-	unsigned int num_configs;
-};
-
-struct pinctrl_setting {
-	struct list_head node;
-	enum pinctrl_map_type type;
-	struct pinctrl_dev *pctldev;
-	const char *dev_name;
-	union {
-		struct pinctrl_setting_mux mux;
-		struct pinctrl_setting_configs configs;
-	} data;
-};
-
-struct pin_desc {
-	struct pinctrl_dev *pctldev;
-	const char *name;
-	bool dynamic_name;
-	void *drv_data;
-	unsigned int mux_usecount;
-	const char *mux_owner;
-	const struct pinctrl_setting_mux *mux_setting;
-	const char *gpio_owner;
-};
-
-struct pinctrl_maps {
-	struct list_head node;
-	const struct pinctrl_map *maps;
-	unsigned int num_maps;
-};
-
-struct group_desc {
-	const char *name;
-	int *pins;
-	int num_pins;
-	void *data;
-};
-
-struct pctldev;
-
-struct function_desc {
-	const char *name;
-	const char **group_names;
-	int num_group_names;
-	void *data;
-};
-
-struct pinctrl_dt_map {
-	struct list_head node;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_map *map;
-	unsigned int num_maps;
-};
-
-struct amd_pingroup {
+struct pingroup {
 	const char *name;
 	const unsigned int *pins;
-	unsigned int npins;
+	size_t npins;
+};
+
+struct amd_function {
+	const char *name;
+	const char * const groups[4];
+	unsigned int ngroups;
+	int index;
 };
 
 struct amd_gpio {
 	raw_spinlock_t lock;
 	void *base;
-	const struct amd_pingroup *groups;
+	void *iomux_base;
+	const struct pingroup *groups;
 	u32 ngroups;
 	struct pinctrl_dev *pctrl;
 	struct gpio_chip gc;
@@ -60823,2030 +94093,1049 @@
 	struct resource *res;
 	struct platform_device *pdev;
 	u32 *saved_regs;
-};
-
-struct meson_pmx_group {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int num_pins;
-	const void *data;
-};
-
-struct meson_pmx_func {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct meson_reg_desc {
-	unsigned int reg;
-	unsigned int bit;
-};
-
-enum meson_reg_type {
-	REG_PULLEN = 0,
-	REG_PULL = 1,
-	REG_DIR = 2,
-	REG_OUT = 3,
-	REG_IN = 4,
-	REG_DS = 5,
-	NUM_REG = 6,
-};
-
-enum meson_pinconf_drv {
-	MESON_PINCONF_DRV_500UA = 0,
-	MESON_PINCONF_DRV_2500UA = 1,
-	MESON_PINCONF_DRV_3000UA = 2,
-	MESON_PINCONF_DRV_4000UA = 3,
-};
-
-struct meson_bank {
-	const char *name;
-	unsigned int first;
-	unsigned int last;
-	int irq_first;
-	int irq_last;
-	struct meson_reg_desc regs[6];
-};
-
-struct meson_pinctrl;
-
-struct meson_pinctrl_data {
-	const char *name;
-	const struct pinctrl_pin_desc *pins;
-	struct meson_pmx_group *groups;
-	struct meson_pmx_func *funcs;
-	unsigned int num_pins;
-	unsigned int num_groups;
-	unsigned int num_funcs;
-	struct meson_bank *banks;
-	unsigned int num_banks;
-	const struct pinmux_ops *pmx_ops;
-	void *pmx_data;
-	int (*parse_dt)(struct meson_pinctrl *);
-};
-
-struct meson_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pcdev;
-	struct pinctrl_desc desc;
-	struct meson_pinctrl_data *data;
-	struct regmap *reg_mux;
-	struct regmap *reg_pullen;
-	struct regmap *reg_pull;
-	struct regmap *reg_gpio;
-	struct regmap *reg_ds;
-	struct gpio_chip chip;
-	struct device_node *of_node;
-};
-
-struct meson8_pmx_data {
-	bool is_gpio;
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct meson_pmx_bank {
-	const char *name;
-	unsigned int first;
-	unsigned int last;
-	unsigned int reg;
-	unsigned int offset;
-};
-
-struct meson_axg_pmx_data {
-	struct meson_pmx_bank *pmx_banks;
-	unsigned int num_pmx_banks;
-};
-
-struct meson_pmx_axg_data {
-	unsigned int func;
-};
-
-enum rockchip_pinctrl_type {
-	PX30 = 0,
-	RV1108 = 1,
-	RK2928 = 2,
-	RK3066B = 3,
-	RK3128 = 4,
-	RK3188 = 5,
-	RK3288 = 6,
-	RK3308 = 7,
-	RK3368 = 8,
-	RK3399 = 9,
-};
-
-struct rockchip_iomux {
-	int type;
-	int offset;
-};
-
-enum rockchip_pin_drv_type {
-	DRV_TYPE_IO_DEFAULT = 0,
-	DRV_TYPE_IO_1V8_OR_3V0 = 1,
-	DRV_TYPE_IO_1V8_ONLY = 2,
-	DRV_TYPE_IO_1V8_3V0_AUTO = 3,
-	DRV_TYPE_IO_3V3_ONLY = 4,
-	DRV_TYPE_MAX = 5,
-};
-
-enum rockchip_pin_pull_type {
-	PULL_TYPE_IO_DEFAULT = 0,
-	PULL_TYPE_IO_1V8_ONLY = 1,
-	PULL_TYPE_MAX = 2,
-};
-
-struct rockchip_drv {
-	enum rockchip_pin_drv_type drv_type;
-	int offset;
-};
-
-struct rockchip_pinctrl;
-
-struct rockchip_pin_bank {
-	void *reg_base;
-	struct regmap *regmap_pull;
-	struct clk *clk;
 	int irq;
-	u32 saved_masks;
-	u32 pin_base;
-	u8 nr_pins;
-	char *name;
-	u8 bank_num;
-	struct rockchip_iomux iomux[4];
-	struct rockchip_drv drv[4];
-	enum rockchip_pin_pull_type pull_type[4];
-	bool valid;
-	struct device_node *of_node;
-	struct rockchip_pinctrl *drvdata;
-	struct irq_domain *domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	raw_spinlock_t slock;
-	u32 toggle_edge_mode;
-	u32 recalced_mask;
-	u32 route_mask;
 };
 
-struct rockchip_pin_ctrl;
-
-struct rockchip_pin_group;
-
-struct rockchip_pmx_func;
-
-struct rockchip_pinctrl {
-	struct regmap *regmap_base;
-	int reg_size;
-	struct regmap *regmap_pull;
-	struct regmap *regmap_pmu;
-	struct device *dev;
-	struct rockchip_pin_ctrl *ctrl;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct rockchip_pin_group *groups;
-	unsigned int ngroups;
-	struct rockchip_pmx_func *functions;
-	unsigned int nfunctions;
+enum amd_functions {
+	IMX_F0_GPIO0 = 0,
+	IMX_F1_GPIO0 = 1,
+	IMX_F2_GPIO0 = 2,
+	IMX_F3_GPIO0 = 3,
+	IMX_F0_GPIO1 = 4,
+	IMX_F1_GPIO1 = 5,
+	IMX_F2_GPIO1 = 6,
+	IMX_F3_GPIO1 = 7,
+	IMX_F0_GPIO2 = 8,
+	IMX_F1_GPIO2 = 9,
+	IMX_F2_GPIO2 = 10,
+	IMX_F3_GPIO2 = 11,
+	IMX_F0_GPIO3 = 12,
+	IMX_F1_GPIO3 = 13,
+	IMX_F2_GPIO3 = 14,
+	IMX_F3_GPIO3 = 15,
+	IMX_F0_GPIO4 = 16,
+	IMX_F1_GPIO4 = 17,
+	IMX_F2_GPIO4 = 18,
+	IMX_F3_GPIO4 = 19,
+	IMX_F0_GPIO5 = 20,
+	IMX_F1_GPIO5 = 21,
+	IMX_F2_GPIO5 = 22,
+	IMX_F3_GPIO5 = 23,
+	IMX_F0_GPIO6 = 24,
+	IMX_F1_GPIO6 = 25,
+	IMX_F2_GPIO6 = 26,
+	IMX_F3_GPIO6 = 27,
+	IMX_F0_GPIO7 = 28,
+	IMX_F1_GPIO7 = 29,
+	IMX_F2_GPIO7 = 30,
+	IMX_F3_GPIO7 = 31,
+	IMX_F0_GPIO8 = 32,
+	IMX_F1_GPIO8 = 33,
+	IMX_F2_GPIO8 = 34,
+	IMX_F3_GPIO8 = 35,
+	IMX_F0_GPIO9 = 36,
+	IMX_F1_GPIO9 = 37,
+	IMX_F2_GPIO9 = 38,
+	IMX_F3_GPIO9 = 39,
+	IMX_F0_GPIO10 = 40,
+	IMX_F1_GPIO10 = 41,
+	IMX_F2_GPIO10 = 42,
+	IMX_F3_GPIO10 = 43,
+	IMX_F0_GPIO11 = 44,
+	IMX_F1_GPIO11 = 45,
+	IMX_F2_GPIO11 = 46,
+	IMX_F3_GPIO11 = 47,
+	IMX_F0_GPIO12 = 48,
+	IMX_F1_GPIO12 = 49,
+	IMX_F2_GPIO12 = 50,
+	IMX_F3_GPIO12 = 51,
+	IMX_F0_GPIO13 = 52,
+	IMX_F1_GPIO13 = 53,
+	IMX_F2_GPIO13 = 54,
+	IMX_F3_GPIO13 = 55,
+	IMX_F0_GPIO14 = 56,
+	IMX_F1_GPIO14 = 57,
+	IMX_F2_GPIO14 = 58,
+	IMX_F3_GPIO14 = 59,
+	IMX_F0_GPIO15 = 60,
+	IMX_F1_GPIO15 = 61,
+	IMX_F2_GPIO15 = 62,
+	IMX_F3_GPIO15 = 63,
+	IMX_F0_GPIO16 = 64,
+	IMX_F1_GPIO16 = 65,
+	IMX_F2_GPIO16 = 66,
+	IMX_F3_GPIO16 = 67,
+	IMX_F0_GPIO17 = 68,
+	IMX_F1_GPIO17 = 69,
+	IMX_F2_GPIO17 = 70,
+	IMX_F3_GPIO17 = 71,
+	IMX_F0_GPIO18 = 72,
+	IMX_F1_GPIO18 = 73,
+	IMX_F2_GPIO18 = 74,
+	IMX_F3_GPIO18 = 75,
+	IMX_F0_GPIO19 = 76,
+	IMX_F1_GPIO19 = 77,
+	IMX_F2_GPIO19 = 78,
+	IMX_F3_GPIO19 = 79,
+	IMX_F0_GPIO20 = 80,
+	IMX_F1_GPIO20 = 81,
+	IMX_F2_GPIO20 = 82,
+	IMX_F3_GPIO20 = 83,
+	IMX_F0_GPIO21 = 84,
+	IMX_F1_GPIO21 = 85,
+	IMX_F2_GPIO21 = 86,
+	IMX_F3_GPIO21 = 87,
+	IMX_F0_GPIO22 = 88,
+	IMX_F1_GPIO22 = 89,
+	IMX_F2_GPIO22 = 90,
+	IMX_F3_GPIO22 = 91,
+	IMX_F0_GPIO23 = 92,
+	IMX_F1_GPIO23 = 93,
+	IMX_F2_GPIO23 = 94,
+	IMX_F3_GPIO23 = 95,
+	IMX_F0_GPIO24 = 96,
+	IMX_F1_GPIO24 = 97,
+	IMX_F2_GPIO24 = 98,
+	IMX_F3_GPIO24 = 99,
+	IMX_F0_GPIO25 = 100,
+	IMX_F1_GPIO25 = 101,
+	IMX_F2_GPIO25 = 102,
+	IMX_F3_GPIO25 = 103,
+	IMX_F0_GPIO26 = 104,
+	IMX_F1_GPIO26 = 105,
+	IMX_F2_GPIO26 = 106,
+	IMX_F3_GPIO26 = 107,
+	IMX_F0_GPIO27 = 108,
+	IMX_F1_GPIO27 = 109,
+	IMX_F2_GPIO27 = 110,
+	IMX_F3_GPIO27 = 111,
+	IMX_F0_GPIO28 = 112,
+	IMX_F1_GPIO28 = 113,
+	IMX_F2_GPIO28 = 114,
+	IMX_F3_GPIO28 = 115,
+	IMX_F0_GPIO29 = 116,
+	IMX_F1_GPIO29 = 117,
+	IMX_F2_GPIO29 = 118,
+	IMX_F3_GPIO29 = 119,
+	IMX_F0_GPIO30 = 120,
+	IMX_F1_GPIO30 = 121,
+	IMX_F2_GPIO30 = 122,
+	IMX_F3_GPIO30 = 123,
+	IMX_F0_GPIO31 = 124,
+	IMX_F1_GPIO31 = 125,
+	IMX_F2_GPIO31 = 126,
+	IMX_F3_GPIO31 = 127,
+	IMX_F0_GPIO32 = 128,
+	IMX_F1_GPIO32 = 129,
+	IMX_F2_GPIO32 = 130,
+	IMX_F3_GPIO32 = 131,
+	IMX_F0_GPIO33 = 132,
+	IMX_F1_GPIO33 = 133,
+	IMX_F2_GPIO33 = 134,
+	IMX_F3_GPIO33 = 135,
+	IMX_F0_GPIO34 = 136,
+	IMX_F1_GPIO34 = 137,
+	IMX_F2_GPIO34 = 138,
+	IMX_F3_GPIO34 = 139,
+	IMX_F0_GPIO35 = 140,
+	IMX_F1_GPIO35 = 141,
+	IMX_F2_GPIO35 = 142,
+	IMX_F3_GPIO35 = 143,
+	IMX_F0_GPIO36 = 144,
+	IMX_F1_GPIO36 = 145,
+	IMX_F2_GPIO36 = 146,
+	IMX_F3_GPIO36 = 147,
+	IMX_F0_GPIO37 = 148,
+	IMX_F1_GPIO37 = 149,
+	IMX_F2_GPIO37 = 150,
+	IMX_F3_GPIO37 = 151,
+	IMX_F0_GPIO38 = 152,
+	IMX_F1_GPIO38 = 153,
+	IMX_F2_GPIO38 = 154,
+	IMX_F3_GPIO38 = 155,
+	IMX_F0_GPIO39 = 156,
+	IMX_F1_GPIO39 = 157,
+	IMX_F2_GPIO39 = 158,
+	IMX_F3_GPIO39 = 159,
+	IMX_F0_GPIO40 = 160,
+	IMX_F1_GPIO40 = 161,
+	IMX_F2_GPIO40 = 162,
+	IMX_F3_GPIO40 = 163,
+	IMX_F0_GPIO41 = 164,
+	IMX_F1_GPIO41 = 165,
+	IMX_F2_GPIO41 = 166,
+	IMX_F3_GPIO41 = 167,
+	IMX_F0_GPIO42 = 168,
+	IMX_F1_GPIO42 = 169,
+	IMX_F2_GPIO42 = 170,
+	IMX_F3_GPIO42 = 171,
+	IMX_F0_GPIO43 = 172,
+	IMX_F1_GPIO43 = 173,
+	IMX_F2_GPIO43 = 174,
+	IMX_F3_GPIO43 = 175,
+	IMX_F0_GPIO44 = 176,
+	IMX_F1_GPIO44 = 177,
+	IMX_F2_GPIO44 = 178,
+	IMX_F3_GPIO44 = 179,
+	IMX_F0_GPIO45 = 180,
+	IMX_F1_GPIO45 = 181,
+	IMX_F2_GPIO45 = 182,
+	IMX_F3_GPIO45 = 183,
+	IMX_F0_GPIO46 = 184,
+	IMX_F1_GPIO46 = 185,
+	IMX_F2_GPIO46 = 186,
+	IMX_F3_GPIO46 = 187,
+	IMX_F0_GPIO47 = 188,
+	IMX_F1_GPIO47 = 189,
+	IMX_F2_GPIO47 = 190,
+	IMX_F3_GPIO47 = 191,
+	IMX_F0_GPIO48 = 192,
+	IMX_F1_GPIO48 = 193,
+	IMX_F2_GPIO48 = 194,
+	IMX_F3_GPIO48 = 195,
+	IMX_F0_GPIO49 = 196,
+	IMX_F1_GPIO49 = 197,
+	IMX_F2_GPIO49 = 198,
+	IMX_F3_GPIO49 = 199,
+	IMX_F0_GPIO50 = 200,
+	IMX_F1_GPIO50 = 201,
+	IMX_F2_GPIO50 = 202,
+	IMX_F3_GPIO50 = 203,
+	IMX_F0_GPIO51 = 204,
+	IMX_F1_GPIO51 = 205,
+	IMX_F2_GPIO51 = 206,
+	IMX_F3_GPIO51 = 207,
+	IMX_F0_GPIO52 = 208,
+	IMX_F1_GPIO52 = 209,
+	IMX_F2_GPIO52 = 210,
+	IMX_F3_GPIO52 = 211,
+	IMX_F0_GPIO53 = 212,
+	IMX_F1_GPIO53 = 213,
+	IMX_F2_GPIO53 = 214,
+	IMX_F3_GPIO53 = 215,
+	IMX_F0_GPIO54 = 216,
+	IMX_F1_GPIO54 = 217,
+	IMX_F2_GPIO54 = 218,
+	IMX_F3_GPIO54 = 219,
+	IMX_F0_GPIO55 = 220,
+	IMX_F1_GPIO55 = 221,
+	IMX_F2_GPIO55 = 222,
+	IMX_F3_GPIO55 = 223,
+	IMX_F0_GPIO56 = 224,
+	IMX_F1_GPIO56 = 225,
+	IMX_F2_GPIO56 = 226,
+	IMX_F3_GPIO56 = 227,
+	IMX_F0_GPIO57 = 228,
+	IMX_F1_GPIO57 = 229,
+	IMX_F2_GPIO57 = 230,
+	IMX_F3_GPIO57 = 231,
+	IMX_F0_GPIO58 = 232,
+	IMX_F1_GPIO58 = 233,
+	IMX_F2_GPIO58 = 234,
+	IMX_F3_GPIO58 = 235,
+	IMX_F0_GPIO59 = 236,
+	IMX_F1_GPIO59 = 237,
+	IMX_F2_GPIO59 = 238,
+	IMX_F3_GPIO59 = 239,
+	IMX_F0_GPIO60 = 240,
+	IMX_F1_GPIO60 = 241,
+	IMX_F2_GPIO60 = 242,
+	IMX_F3_GPIO60 = 243,
+	IMX_F0_GPIO61 = 244,
+	IMX_F1_GPIO61 = 245,
+	IMX_F2_GPIO61 = 246,
+	IMX_F3_GPIO61 = 247,
+	IMX_F0_GPIO62 = 248,
+	IMX_F1_GPIO62 = 249,
+	IMX_F2_GPIO62 = 250,
+	IMX_F3_GPIO62 = 251,
+	IMX_F0_GPIO64 = 252,
+	IMX_F1_GPIO64 = 253,
+	IMX_F2_GPIO64 = 254,
+	IMX_F3_GPIO64 = 255,
+	IMX_F0_GPIO65 = 256,
+	IMX_F1_GPIO65 = 257,
+	IMX_F2_GPIO65 = 258,
+	IMX_F3_GPIO65 = 259,
+	IMX_F0_GPIO66 = 260,
+	IMX_F1_GPIO66 = 261,
+	IMX_F2_GPIO66 = 262,
+	IMX_F3_GPIO66 = 263,
+	IMX_F0_GPIO67 = 264,
+	IMX_F1_GPIO67 = 265,
+	IMX_F2_GPIO67 = 266,
+	IMX_F3_GPIO67 = 267,
+	IMX_F0_GPIO68 = 268,
+	IMX_F1_GPIO68 = 269,
+	IMX_F2_GPIO68 = 270,
+	IMX_F3_GPIO68 = 271,
+	IMX_F0_GPIO69 = 272,
+	IMX_F1_GPIO69 = 273,
+	IMX_F2_GPIO69 = 274,
+	IMX_F3_GPIO69 = 275,
+	IMX_F0_GPIO70 = 276,
+	IMX_F1_GPIO70 = 277,
+	IMX_F2_GPIO70 = 278,
+	IMX_F3_GPIO70 = 279,
+	IMX_F0_GPIO71 = 280,
+	IMX_F1_GPIO71 = 281,
+	IMX_F2_GPIO71 = 282,
+	IMX_F3_GPIO71 = 283,
+	IMX_F0_GPIO72 = 284,
+	IMX_F1_GPIO72 = 285,
+	IMX_F2_GPIO72 = 286,
+	IMX_F3_GPIO72 = 287,
+	IMX_F0_GPIO73 = 288,
+	IMX_F1_GPIO73 = 289,
+	IMX_F2_GPIO73 = 290,
+	IMX_F3_GPIO73 = 291,
+	IMX_F0_GPIO74 = 292,
+	IMX_F1_GPIO74 = 293,
+	IMX_F2_GPIO74 = 294,
+	IMX_F3_GPIO74 = 295,
+	IMX_F0_GPIO75 = 296,
+	IMX_F1_GPIO75 = 297,
+	IMX_F2_GPIO75 = 298,
+	IMX_F3_GPIO75 = 299,
+	IMX_F0_GPIO76 = 300,
+	IMX_F1_GPIO76 = 301,
+	IMX_F2_GPIO76 = 302,
+	IMX_F3_GPIO76 = 303,
+	IMX_F0_GPIO77 = 304,
+	IMX_F1_GPIO77 = 305,
+	IMX_F2_GPIO77 = 306,
+	IMX_F3_GPIO77 = 307,
+	IMX_F0_GPIO78 = 308,
+	IMX_F1_GPIO78 = 309,
+	IMX_F2_GPIO78 = 310,
+	IMX_F3_GPIO78 = 311,
+	IMX_F0_GPIO79 = 312,
+	IMX_F1_GPIO79 = 313,
+	IMX_F2_GPIO79 = 314,
+	IMX_F3_GPIO79 = 315,
+	IMX_F0_GPIO80 = 316,
+	IMX_F1_GPIO80 = 317,
+	IMX_F2_GPIO80 = 318,
+	IMX_F3_GPIO80 = 319,
+	IMX_F0_GPIO81 = 320,
+	IMX_F1_GPIO81 = 321,
+	IMX_F2_GPIO81 = 322,
+	IMX_F3_GPIO81 = 323,
+	IMX_F0_GPIO82 = 324,
+	IMX_F1_GPIO82 = 325,
+	IMX_F2_GPIO82 = 326,
+	IMX_F3_GPIO82 = 327,
+	IMX_F0_GPIO83 = 328,
+	IMX_F1_GPIO83 = 329,
+	IMX_F2_GPIO83 = 330,
+	IMX_F3_GPIO83 = 331,
+	IMX_F0_GPIO84 = 332,
+	IMX_F1_GPIO84 = 333,
+	IMX_F2_GPIO84 = 334,
+	IMX_F3_GPIO84 = 335,
+	IMX_F0_GPIO85 = 336,
+	IMX_F1_GPIO85 = 337,
+	IMX_F2_GPIO85 = 338,
+	IMX_F3_GPIO85 = 339,
+	IMX_F0_GPIO86 = 340,
+	IMX_F1_GPIO86 = 341,
+	IMX_F2_GPIO86 = 342,
+	IMX_F3_GPIO86 = 343,
+	IMX_F0_GPIO87 = 344,
+	IMX_F1_GPIO87 = 345,
+	IMX_F2_GPIO87 = 346,
+	IMX_F3_GPIO87 = 347,
+	IMX_F0_GPIO88 = 348,
+	IMX_F1_GPIO88 = 349,
+	IMX_F2_GPIO88 = 350,
+	IMX_F3_GPIO88 = 351,
+	IMX_F0_GPIO89 = 352,
+	IMX_F1_GPIO89 = 353,
+	IMX_F2_GPIO89 = 354,
+	IMX_F3_GPIO89 = 355,
+	IMX_F0_GPIO90 = 356,
+	IMX_F1_GPIO90 = 357,
+	IMX_F2_GPIO90 = 358,
+	IMX_F3_GPIO90 = 359,
+	IMX_F0_GPIO91 = 360,
+	IMX_F1_GPIO91 = 361,
+	IMX_F2_GPIO91 = 362,
+	IMX_F3_GPIO91 = 363,
+	IMX_F0_GPIO92 = 364,
+	IMX_F1_GPIO92 = 365,
+	IMX_F2_GPIO92 = 366,
+	IMX_F3_GPIO92 = 367,
+	IMX_F0_GPIO93 = 368,
+	IMX_F1_GPIO93 = 369,
+	IMX_F2_GPIO93 = 370,
+	IMX_F3_GPIO93 = 371,
+	IMX_F0_GPIO94 = 372,
+	IMX_F1_GPIO94 = 373,
+	IMX_F2_GPIO94 = 374,
+	IMX_F3_GPIO94 = 375,
+	IMX_F0_GPIO95 = 376,
+	IMX_F1_GPIO95 = 377,
+	IMX_F2_GPIO95 = 378,
+	IMX_F3_GPIO95 = 379,
+	IMX_F0_GPIO96 = 380,
+	IMX_F1_GPIO96 = 381,
+	IMX_F2_GPIO96 = 382,
+	IMX_F3_GPIO96 = 383,
+	IMX_F0_GPIO97 = 384,
+	IMX_F1_GPIO97 = 385,
+	IMX_F2_GPIO97 = 386,
+	IMX_F3_GPIO97 = 387,
+	IMX_F0_GPIO98 = 388,
+	IMX_F1_GPIO98 = 389,
+	IMX_F2_GPIO98 = 390,
+	IMX_F3_GPIO98 = 391,
+	IMX_F0_GPIO99 = 392,
+	IMX_F1_GPIO99 = 393,
+	IMX_F2_GPIO99 = 394,
+	IMX_F3_GPIO99 = 395,
+	IMX_F0_GPIO100 = 396,
+	IMX_F1_GPIO100 = 397,
+	IMX_F2_GPIO100 = 398,
+	IMX_F3_GPIO100 = 399,
+	IMX_F0_GPIO101 = 400,
+	IMX_F1_GPIO101 = 401,
+	IMX_F2_GPIO101 = 402,
+	IMX_F3_GPIO101 = 403,
+	IMX_F0_GPIO102 = 404,
+	IMX_F1_GPIO102 = 405,
+	IMX_F2_GPIO102 = 406,
+	IMX_F3_GPIO102 = 407,
+	IMX_F0_GPIO103 = 408,
+	IMX_F1_GPIO103 = 409,
+	IMX_F2_GPIO103 = 410,
+	IMX_F3_GPIO103 = 411,
+	IMX_F0_GPIO104 = 412,
+	IMX_F1_GPIO104 = 413,
+	IMX_F2_GPIO104 = 414,
+	IMX_F3_GPIO104 = 415,
+	IMX_F0_GPIO105 = 416,
+	IMX_F1_GPIO105 = 417,
+	IMX_F2_GPIO105 = 418,
+	IMX_F3_GPIO105 = 419,
+	IMX_F0_GPIO106 = 420,
+	IMX_F1_GPIO106 = 421,
+	IMX_F2_GPIO106 = 422,
+	IMX_F3_GPIO106 = 423,
+	IMX_F0_GPIO107 = 424,
+	IMX_F1_GPIO107 = 425,
+	IMX_F2_GPIO107 = 426,
+	IMX_F3_GPIO107 = 427,
+	IMX_F0_GPIO108 = 428,
+	IMX_F1_GPIO108 = 429,
+	IMX_F2_GPIO108 = 430,
+	IMX_F3_GPIO108 = 431,
+	IMX_F0_GPIO109 = 432,
+	IMX_F1_GPIO109 = 433,
+	IMX_F2_GPIO109 = 434,
+	IMX_F3_GPIO109 = 435,
+	IMX_F0_GPIO110 = 436,
+	IMX_F1_GPIO110 = 437,
+	IMX_F2_GPIO110 = 438,
+	IMX_F3_GPIO110 = 439,
+	IMX_F0_GPIO111 = 440,
+	IMX_F1_GPIO111 = 441,
+	IMX_F2_GPIO111 = 442,
+	IMX_F3_GPIO111 = 443,
+	IMX_F0_GPIO112 = 444,
+	IMX_F1_GPIO112 = 445,
+	IMX_F2_GPIO112 = 446,
+	IMX_F3_GPIO112 = 447,
+	IMX_F0_GPIO113 = 448,
+	IMX_F1_GPIO113 = 449,
+	IMX_F2_GPIO113 = 450,
+	IMX_F3_GPIO113 = 451,
+	IMX_F0_GPIO114 = 452,
+	IMX_F1_GPIO114 = 453,
+	IMX_F2_GPIO114 = 454,
+	IMX_F3_GPIO114 = 455,
+	IMX_F0_GPIO115 = 456,
+	IMX_F1_GPIO115 = 457,
+	IMX_F2_GPIO115 = 458,
+	IMX_F3_GPIO115 = 459,
+	IMX_F0_GPIO116 = 460,
+	IMX_F1_GPIO116 = 461,
+	IMX_F2_GPIO116 = 462,
+	IMX_F3_GPIO116 = 463,
+	IMX_F0_GPIO117 = 464,
+	IMX_F1_GPIO117 = 465,
+	IMX_F2_GPIO117 = 466,
+	IMX_F3_GPIO117 = 467,
+	IMX_F0_GPIO118 = 468,
+	IMX_F1_GPIO118 = 469,
+	IMX_F2_GPIO118 = 470,
+	IMX_F3_GPIO118 = 471,
+	IMX_F0_GPIO119 = 472,
+	IMX_F1_GPIO119 = 473,
+	IMX_F2_GPIO119 = 474,
+	IMX_F3_GPIO119 = 475,
+	IMX_F0_GPIO120 = 476,
+	IMX_F1_GPIO120 = 477,
+	IMX_F2_GPIO120 = 478,
+	IMX_F3_GPIO120 = 479,
+	IMX_F0_GPIO121 = 480,
+	IMX_F1_GPIO121 = 481,
+	IMX_F2_GPIO121 = 482,
+	IMX_F3_GPIO121 = 483,
+	IMX_F0_GPIO122 = 484,
+	IMX_F1_GPIO122 = 485,
+	IMX_F2_GPIO122 = 486,
+	IMX_F3_GPIO122 = 487,
+	IMX_F0_GPIO123 = 488,
+	IMX_F1_GPIO123 = 489,
+	IMX_F2_GPIO123 = 490,
+	IMX_F3_GPIO123 = 491,
+	IMX_F0_GPIO124 = 492,
+	IMX_F1_GPIO124 = 493,
+	IMX_F2_GPIO124 = 494,
+	IMX_F3_GPIO124 = 495,
+	IMX_F0_GPIO125 = 496,
+	IMX_F1_GPIO125 = 497,
+	IMX_F2_GPIO125 = 498,
+	IMX_F3_GPIO125 = 499,
+	IMX_F0_GPIO126 = 500,
+	IMX_F1_GPIO126 = 501,
+	IMX_F2_GPIO126 = 502,
+	IMX_F3_GPIO126 = 503,
+	IMX_F0_GPIO127 = 504,
+	IMX_F1_GPIO127 = 505,
+	IMX_F2_GPIO127 = 506,
+	IMX_F3_GPIO127 = 507,
+	IMX_F0_GPIO128 = 508,
+	IMX_F1_GPIO128 = 509,
+	IMX_F2_GPIO128 = 510,
+	IMX_F3_GPIO128 = 511,
+	IMX_F0_GPIO129 = 512,
+	IMX_F1_GPIO129 = 513,
+	IMX_F2_GPIO129 = 514,
+	IMX_F3_GPIO129 = 515,
+	IMX_F0_GPIO130 = 516,
+	IMX_F1_GPIO130 = 517,
+	IMX_F2_GPIO130 = 518,
+	IMX_F3_GPIO130 = 519,
+	IMX_F0_GPIO131 = 520,
+	IMX_F1_GPIO131 = 521,
+	IMX_F2_GPIO131 = 522,
+	IMX_F3_GPIO131 = 523,
+	IMX_F0_GPIO132 = 524,
+	IMX_F1_GPIO132 = 525,
+	IMX_F2_GPIO132 = 526,
+	IMX_F3_GPIO132 = 527,
+	IMX_F0_GPIO133 = 528,
+	IMX_F1_GPIO133 = 529,
+	IMX_F2_GPIO133 = 530,
+	IMX_F3_GPIO133 = 531,
+	IMX_F0_GPIO134 = 532,
+	IMX_F1_GPIO134 = 533,
+	IMX_F2_GPIO134 = 534,
+	IMX_F3_GPIO134 = 535,
+	IMX_F0_GPIO135 = 536,
+	IMX_F1_GPIO135 = 537,
+	IMX_F2_GPIO135 = 538,
+	IMX_F3_GPIO135 = 539,
+	IMX_F0_GPIO136 = 540,
+	IMX_F1_GPIO136 = 541,
+	IMX_F2_GPIO136 = 542,
+	IMX_F3_GPIO136 = 543,
+	IMX_F0_GPIO137 = 544,
+	IMX_F1_GPIO137 = 545,
+	IMX_F2_GPIO137 = 546,
+	IMX_F3_GPIO137 = 547,
+	IMX_F0_GPIO138 = 548,
+	IMX_F1_GPIO138 = 549,
+	IMX_F2_GPIO138 = 550,
+	IMX_F3_GPIO138 = 551,
+	IMX_F0_GPIO139 = 552,
+	IMX_F1_GPIO139 = 553,
+	IMX_F2_GPIO139 = 554,
+	IMX_F3_GPIO139 = 555,
+	IMX_F0_GPIO140 = 556,
+	IMX_F1_GPIO140 = 557,
+	IMX_F2_GPIO140 = 558,
+	IMX_F3_GPIO140 = 559,
+	IMX_F0_GPIO141 = 560,
+	IMX_F1_GPIO141 = 561,
+	IMX_F2_GPIO141 = 562,
+	IMX_F3_GPIO141 = 563,
+	IMX_F0_GPIO142 = 564,
+	IMX_F1_GPIO142 = 565,
+	IMX_F2_GPIO142 = 566,
+	IMX_F3_GPIO142 = 567,
+	IMX_F0_GPIO143 = 568,
+	IMX_F1_GPIO143 = 569,
+	IMX_F2_GPIO143 = 570,
+	IMX_F3_GPIO143 = 571,
+	IMX_F0_GPIO144 = 572,
+	IMX_F1_GPIO144 = 573,
+	IMX_F2_GPIO144 = 574,
+	IMX_F3_GPIO144 = 575,
 };
 
-struct rockchip_mux_recalced_data {
-	u8 num;
-	u8 pin;
-	u32 reg;
-	u8 bit;
-	u8 mask;
+enum imx8mm_pads {
+	MX8MM_PAD_RESERVE0 = 0,
+	MX8MM_PAD_RESERVE1 = 1,
+	MX8MM_PAD_RESERVE2 = 2,
+	MX8MM_PAD_RESERVE3 = 3,
+	MX8MM_PAD_RESERVE4 = 4,
+	MX8MM_PAD_RESERVE5 = 5,
+	MX8MM_PAD_RESERVE6 = 6,
+	MX8MM_PAD_RESERVE7 = 7,
+	MX8MM_PAD_RESERVE8 = 8,
+	MX8MM_PAD_RESERVE9 = 9,
+	MX8MM_IOMUXC_GPIO1_IO00 = 10,
+	MX8MM_IOMUXC_GPIO1_IO01 = 11,
+	MX8MM_IOMUXC_GPIO1_IO02 = 12,
+	MX8MM_IOMUXC_GPIO1_IO03 = 13,
+	MX8MM_IOMUXC_GPIO1_IO04 = 14,
+	MX8MM_IOMUXC_GPIO1_IO05 = 15,
+	MX8MM_IOMUXC_GPIO1_IO06 = 16,
+	MX8MM_IOMUXC_GPIO1_IO07 = 17,
+	MX8MM_IOMUXC_GPIO1_IO08 = 18,
+	MX8MM_IOMUXC_GPIO1_IO09 = 19,
+	MX8MM_IOMUXC_GPIO1_IO10 = 20,
+	MX8MM_IOMUXC_GPIO1_IO11 = 21,
+	MX8MM_IOMUXC_GPIO1_IO12 = 22,
+	MX8MM_IOMUXC_GPIO1_IO13 = 23,
+	MX8MM_IOMUXC_GPIO1_IO14 = 24,
+	MX8MM_IOMUXC_GPIO1_IO15 = 25,
+	MX8MM_IOMUXC_ENET_MDC = 26,
+	MX8MM_IOMUXC_ENET_MDIO = 27,
+	MX8MM_IOMUXC_ENET_TD3 = 28,
+	MX8MM_IOMUXC_ENET_TD2 = 29,
+	MX8MM_IOMUXC_ENET_TD1 = 30,
+	MX8MM_IOMUXC_ENET_TD0 = 31,
+	MX8MM_IOMUXC_ENET_TX_CTL = 32,
+	MX8MM_IOMUXC_ENET_TXC = 33,
+	MX8MM_IOMUXC_ENET_RX_CTL = 34,
+	MX8MM_IOMUXC_ENET_RXC = 35,
+	MX8MM_IOMUXC_ENET_RD0 = 36,
+	MX8MM_IOMUXC_ENET_RD1 = 37,
+	MX8MM_IOMUXC_ENET_RD2 = 38,
+	MX8MM_IOMUXC_ENET_RD3 = 39,
+	MX8MM_IOMUXC_SD1_CLK = 40,
+	MX8MM_IOMUXC_SD1_CMD = 41,
+	MX8MM_IOMUXC_SD1_DATA0 = 42,
+	MX8MM_IOMUXC_SD1_DATA1 = 43,
+	MX8MM_IOMUXC_SD1_DATA2 = 44,
+	MX8MM_IOMUXC_SD1_DATA3 = 45,
+	MX8MM_IOMUXC_SD1_DATA4 = 46,
+	MX8MM_IOMUXC_SD1_DATA5 = 47,
+	MX8MM_IOMUXC_SD1_DATA6 = 48,
+	MX8MM_IOMUXC_SD1_DATA7 = 49,
+	MX8MM_IOMUXC_SD1_RESET_B = 50,
+	MX8MM_IOMUXC_SD1_STROBE = 51,
+	MX8MM_IOMUXC_SD2_CD_B = 52,
+	MX8MM_IOMUXC_SD2_CLK = 53,
+	MX8MM_IOMUXC_SD2_CMD = 54,
+	MX8MM_IOMUXC_SD2_DATA0 = 55,
+	MX8MM_IOMUXC_SD2_DATA1 = 56,
+	MX8MM_IOMUXC_SD2_DATA2 = 57,
+	MX8MM_IOMUXC_SD2_DATA3 = 58,
+	MX8MM_IOMUXC_SD2_RESET_B = 59,
+	MX8MM_IOMUXC_SD2_WP = 60,
+	MX8MM_IOMUXC_NAND_ALE = 61,
+	MX8MM_IOMUXC_NAND_CE0 = 62,
+	MX8MM_IOMUXC_NAND_CE1 = 63,
+	MX8MM_IOMUXC_NAND_CE2 = 64,
+	MX8MM_IOMUXC_NAND_CE3 = 65,
+	MX8MM_IOMUXC_NAND_CLE = 66,
+	MX8MM_IOMUXC_NAND_DATA00 = 67,
+	MX8MM_IOMUXC_NAND_DATA01 = 68,
+	MX8MM_IOMUXC_NAND_DATA02 = 69,
+	MX8MM_IOMUXC_NAND_DATA03 = 70,
+	MX8MM_IOMUXC_NAND_DATA04 = 71,
+	MX8MM_IOMUXC_NAND_DATA05 = 72,
+	MX8MM_IOMUXC_NAND_DATA06 = 73,
+	MX8MM_IOMUXC_NAND_DATA07 = 74,
+	MX8MM_IOMUXC_NAND_DQS = 75,
+	MX8MM_IOMUXC_NAND_RE_B = 76,
+	MX8MM_IOMUXC_NAND_READY_B = 77,
+	MX8MM_IOMUXC_NAND_WE_B = 78,
+	MX8MM_IOMUXC_NAND_WP_B = 79,
+	MX8MM_IOMUXC_SAI5_RXFS = 80,
+	MX8MM_IOMUXC_SAI5_RXC = 81,
+	MX8MM_IOMUXC_SAI5_RXD0 = 82,
+	MX8MM_IOMUXC_SAI5_RXD1 = 83,
+	MX8MM_IOMUXC_SAI5_RXD2 = 84,
+	MX8MM_IOMUXC_SAI5_RXD3 = 85,
+	MX8MM_IOMUXC_SAI5_MCLK = 86,
+	MX8MM_IOMUXC_SAI1_RXFS = 87,
+	MX8MM_IOMUXC_SAI1_RXC = 88,
+	MX8MM_IOMUXC_SAI1_RXD0 = 89,
+	MX8MM_IOMUXC_SAI1_RXD1 = 90,
+	MX8MM_IOMUXC_SAI1_RXD2 = 91,
+	MX8MM_IOMUXC_SAI1_RXD3 = 92,
+	MX8MM_IOMUXC_SAI1_RXD4 = 93,
+	MX8MM_IOMUXC_SAI1_RXD5 = 94,
+	MX8MM_IOMUXC_SAI1_RXD6 = 95,
+	MX8MM_IOMUXC_SAI1_RXD7 = 96,
+	MX8MM_IOMUXC_SAI1_TXFS = 97,
+	MX8MM_IOMUXC_SAI1_TXC = 98,
+	MX8MM_IOMUXC_SAI1_TXD0 = 99,
+	MX8MM_IOMUXC_SAI1_TXD1 = 100,
+	MX8MM_IOMUXC_SAI1_TXD2 = 101,
+	MX8MM_IOMUXC_SAI1_TXD3 = 102,
+	MX8MM_IOMUXC_SAI1_TXD4 = 103,
+	MX8MM_IOMUXC_SAI1_TXD5 = 104,
+	MX8MM_IOMUXC_SAI1_TXD6 = 105,
+	MX8MM_IOMUXC_SAI1_TXD7 = 106,
+	MX8MM_IOMUXC_SAI1_MCLK = 107,
+	MX8MM_IOMUXC_SAI2_RXFS = 108,
+	MX8MM_IOMUXC_SAI2_RXC = 109,
+	MX8MM_IOMUXC_SAI2_RXD0 = 110,
+	MX8MM_IOMUXC_SAI2_TXFS = 111,
+	MX8MM_IOMUXC_SAI2_TXC = 112,
+	MX8MM_IOMUXC_SAI2_TXD0 = 113,
+	MX8MM_IOMUXC_SAI2_MCLK = 114,
+	MX8MM_IOMUXC_SAI3_RXFS = 115,
+	MX8MM_IOMUXC_SAI3_RXC = 116,
+	MX8MM_IOMUXC_SAI3_RXD = 117,
+	MX8MM_IOMUXC_SAI3_TXFS = 118,
+	MX8MM_IOMUXC_SAI3_TXC = 119,
+	MX8MM_IOMUXC_SAI3_TXD = 120,
+	MX8MM_IOMUXC_SAI3_MCLK = 121,
+	MX8MM_IOMUXC_SPDIF_TX = 122,
+	MX8MM_IOMUXC_SPDIF_RX = 123,
+	MX8MM_IOMUXC_SPDIF_EXT_CLK = 124,
+	MX8MM_IOMUXC_ECSPI1_SCLK = 125,
+	MX8MM_IOMUXC_ECSPI1_MOSI = 126,
+	MX8MM_IOMUXC_ECSPI1_MISO = 127,
+	MX8MM_IOMUXC_ECSPI1_SS0 = 128,
+	MX8MM_IOMUXC_ECSPI2_SCLK = 129,
+	MX8MM_IOMUXC_ECSPI2_MOSI = 130,
+	MX8MM_IOMUXC_ECSPI2_MISO = 131,
+	MX8MM_IOMUXC_ECSPI2_SS0 = 132,
+	MX8MM_IOMUXC_I2C1_SCL = 133,
+	MX8MM_IOMUXC_I2C1_SDA = 134,
+	MX8MM_IOMUXC_I2C2_SCL = 135,
+	MX8MM_IOMUXC_I2C2_SDA = 136,
+	MX8MM_IOMUXC_I2C3_SCL = 137,
+	MX8MM_IOMUXC_I2C3_SDA = 138,
+	MX8MM_IOMUXC_I2C4_SCL = 139,
+	MX8MM_IOMUXC_I2C4_SDA = 140,
+	MX8MM_IOMUXC_UART1_RXD = 141,
+	MX8MM_IOMUXC_UART1_TXD = 142,
+	MX8MM_IOMUXC_UART2_RXD = 143,
+	MX8MM_IOMUXC_UART2_TXD = 144,
+	MX8MM_IOMUXC_UART3_RXD = 145,
+	MX8MM_IOMUXC_UART3_TXD = 146,
+	MX8MM_IOMUXC_UART4_RXD = 147,
+	MX8MM_IOMUXC_UART4_TXD = 148,
 };
 
-enum rockchip_mux_route_location {
-	ROCKCHIP_ROUTE_SAME = 0,
-	ROCKCHIP_ROUTE_PMU = 1,
-	ROCKCHIP_ROUTE_GRF = 2,
+enum pin_id {
+	TEGRA_PIN_DAP6_SCLK_PA0 = 0,
+	TEGRA_PIN_DAP6_DOUT_PA1 = 1,
+	TEGRA_PIN_DAP6_DIN_PA2 = 2,
+	TEGRA_PIN_DAP6_FS_PA3 = 3,
+	TEGRA_PIN_DAP4_SCLK_PA4 = 4,
+	TEGRA_PIN_DAP4_DOUT_PA5 = 5,
+	TEGRA_PIN_DAP4_DIN_PA6 = 6,
+	TEGRA_PIN_DAP4_FS_PA7 = 7,
+	TEGRA_PIN_CPU_PWR_REQ_0_PB0 = 8,
+	TEGRA_PIN_CPU_PWR_REQ_1_PB1 = 9,
+	TEGRA_PIN_QSPI0_SCK_PC0 = 10,
+	TEGRA_PIN_QSPI0_CS_N_PC1 = 11,
+	TEGRA_PIN_QSPI0_IO0_PC2 = 12,
+	TEGRA_PIN_QSPI0_IO1_PC3 = 13,
+	TEGRA_PIN_QSPI0_IO2_PC4 = 14,
+	TEGRA_PIN_QSPI0_IO3_PC5 = 15,
+	TEGRA_PIN_QSPI1_SCK_PC6 = 16,
+	TEGRA_PIN_QSPI1_CS_N_PC7 = 17,
+	TEGRA_PIN_QSPI1_IO0_PD0 = 18,
+	TEGRA_PIN_QSPI1_IO1_PD1 = 19,
+	TEGRA_PIN_QSPI1_IO2_PD2 = 20,
+	TEGRA_PIN_QSPI1_IO3_PD3 = 21,
+	TEGRA_PIN_EQOS_TXC_PE0 = 22,
+	TEGRA_PIN_EQOS_TD0_PE1 = 23,
+	TEGRA_PIN_EQOS_TD1_PE2 = 24,
+	TEGRA_PIN_EQOS_TD2_PE3 = 25,
+	TEGRA_PIN_EQOS_TD3_PE4 = 26,
+	TEGRA_PIN_EQOS_TX_CTL_PE5 = 27,
+	TEGRA_PIN_EQOS_RD0_PE6 = 28,
+	TEGRA_PIN_EQOS_RD1_PE7 = 29,
+	TEGRA_PIN_EQOS_RD2_PF0 = 30,
+	TEGRA_PIN_EQOS_RD3_PF1 = 31,
+	TEGRA_PIN_EQOS_RX_CTL_PF2 = 32,
+	TEGRA_PIN_EQOS_RXC_PF3 = 33,
+	TEGRA_PIN_EQOS_SMA_MDIO_PF4 = 34,
+	TEGRA_PIN_EQOS_SMA_MDC_PF5 = 35,
+	TEGRA_PIN_SOC_GPIO00_PG0 = 36,
+	TEGRA_PIN_SOC_GPIO01_PG1 = 37,
+	TEGRA_PIN_SOC_GPIO02_PG2 = 38,
+	TEGRA_PIN_SOC_GPIO03_PG3 = 39,
+	TEGRA_PIN_SOC_GPIO08_PG4 = 40,
+	TEGRA_PIN_SOC_GPIO09_PG5 = 41,
+	TEGRA_PIN_SOC_GPIO10_PG6 = 42,
+	TEGRA_PIN_SOC_GPIO11_PG7 = 43,
+	TEGRA_PIN_SOC_GPIO12_PH0 = 44,
+	TEGRA_PIN_SOC_GPIO13_PH1 = 45,
+	TEGRA_PIN_SOC_GPIO14_PH2 = 46,
+	TEGRA_PIN_UART4_TX_PH3 = 47,
+	TEGRA_PIN_UART4_RX_PH4 = 48,
+	TEGRA_PIN_UART4_RTS_PH5 = 49,
+	TEGRA_PIN_UART4_CTS_PH6 = 50,
+	TEGRA_PIN_DAP2_SCLK_PH7 = 51,
+	TEGRA_PIN_DAP2_DOUT_PI0 = 52,
+	TEGRA_PIN_DAP2_DIN_PI1 = 53,
+	TEGRA_PIN_DAP2_FS_PI2 = 54,
+	TEGRA_PIN_GEN1_I2C_SCL_PI3 = 55,
+	TEGRA_PIN_GEN1_I2C_SDA_PI4 = 56,
+	TEGRA_PIN_SDMMC1_CLK_PJ0 = 57,
+	TEGRA_PIN_SDMMC1_CMD_PJ1 = 58,
+	TEGRA_PIN_SDMMC1_DAT0_PJ2 = 59,
+	TEGRA_PIN_SDMMC1_DAT1_PJ3 = 60,
+	TEGRA_PIN_SDMMC1_DAT2_PJ4 = 61,
+	TEGRA_PIN_SDMMC1_DAT3_PJ5 = 62,
+	TEGRA_PIN_PEX_L0_CLKREQ_N_PK0 = 63,
+	TEGRA_PIN_PEX_L0_RST_N_PK1 = 64,
+	TEGRA_PIN_PEX_L1_CLKREQ_N_PK2 = 65,
+	TEGRA_PIN_PEX_L1_RST_N_PK3 = 66,
+	TEGRA_PIN_PEX_L2_CLKREQ_N_PK4 = 67,
+	TEGRA_PIN_PEX_L2_RST_N_PK5 = 68,
+	TEGRA_PIN_PEX_L3_CLKREQ_N_PK6 = 69,
+	TEGRA_PIN_PEX_L3_RST_N_PK7 = 70,
+	TEGRA_PIN_PEX_L4_CLKREQ_N_PL0 = 71,
+	TEGRA_PIN_PEX_L4_RST_N_PL1 = 72,
+	TEGRA_PIN_PEX_WAKE_N_PL2 = 73,
+	TEGRA_PIN_SATA_DEV_SLP_PL3 = 74,
+	TEGRA_PIN_DP_AUX_CH0_HPD_PM0 = 75,
+	TEGRA_PIN_DP_AUX_CH1_HPD_PM1 = 76,
+	TEGRA_PIN_DP_AUX_CH2_HPD_PM2 = 77,
+	TEGRA_PIN_DP_AUX_CH3_HPD_PM3 = 78,
+	TEGRA_PIN_HDMI_CEC_PM4 = 79,
+	TEGRA_PIN_SOC_GPIO50_PM5 = 80,
+	TEGRA_PIN_SOC_GPIO51_PM6 = 81,
+	TEGRA_PIN_SOC_GPIO52_PM7 = 82,
+	TEGRA_PIN_SOC_GPIO53_PN0 = 83,
+	TEGRA_PIN_SOC_GPIO54_PN1 = 84,
+	TEGRA_PIN_SOC_GPIO55_PN2 = 85,
+	TEGRA_PIN_SDMMC3_CLK_PO0 = 86,
+	TEGRA_PIN_SDMMC3_CMD_PO1 = 87,
+	TEGRA_PIN_SDMMC3_DAT0_PO2 = 88,
+	TEGRA_PIN_SDMMC3_DAT1_PO3 = 89,
+	TEGRA_PIN_SDMMC3_DAT2_PO4 = 90,
+	TEGRA_PIN_SDMMC3_DAT3_PO5 = 91,
+	TEGRA_PIN_EXTPERIPH1_CLK_PP0 = 92,
+	TEGRA_PIN_EXTPERIPH2_CLK_PP1 = 93,
+	TEGRA_PIN_CAM_I2C_SCL_PP2 = 94,
+	TEGRA_PIN_CAM_I2C_SDA_PP3 = 95,
+	TEGRA_PIN_SOC_GPIO04_PP4 = 96,
+	TEGRA_PIN_SOC_GPIO05_PP5 = 97,
+	TEGRA_PIN_SOC_GPIO06_PP6 = 98,
+	TEGRA_PIN_SOC_GPIO07_PP7 = 99,
+	TEGRA_PIN_SOC_GPIO20_PQ0 = 100,
+	TEGRA_PIN_SOC_GPIO21_PQ1 = 101,
+	TEGRA_PIN_SOC_GPIO22_PQ2 = 102,
+	TEGRA_PIN_SOC_GPIO23_PQ3 = 103,
+	TEGRA_PIN_SOC_GPIO40_PQ4 = 104,
+	TEGRA_PIN_SOC_GPIO41_PQ5 = 105,
+	TEGRA_PIN_SOC_GPIO42_PQ6 = 106,
+	TEGRA_PIN_SOC_GPIO43_PQ7 = 107,
+	TEGRA_PIN_SOC_GPIO44_PR0 = 108,
+	TEGRA_PIN_SOC_GPIO45_PR1 = 109,
+	TEGRA_PIN_UART1_TX_PR2 = 110,
+	TEGRA_PIN_UART1_RX_PR3 = 111,
+	TEGRA_PIN_UART1_RTS_PR4 = 112,
+	TEGRA_PIN_UART1_CTS_PR5 = 113,
+	TEGRA_PIN_DAP1_SCLK_PS0 = 114,
+	TEGRA_PIN_DAP1_DOUT_PS1 = 115,
+	TEGRA_PIN_DAP1_DIN_PS2 = 116,
+	TEGRA_PIN_DAP1_FS_PS3 = 117,
+	TEGRA_PIN_AUD_MCLK_PS4 = 118,
+	TEGRA_PIN_SOC_GPIO30_PS5 = 119,
+	TEGRA_PIN_SOC_GPIO31_PS6 = 120,
+	TEGRA_PIN_SOC_GPIO32_PS7 = 121,
+	TEGRA_PIN_SOC_GPIO33_PT0 = 122,
+	TEGRA_PIN_DAP3_SCLK_PT1 = 123,
+	TEGRA_PIN_DAP3_DOUT_PT2 = 124,
+	TEGRA_PIN_DAP3_DIN_PT3 = 125,
+	TEGRA_PIN_DAP3_FS_PT4 = 126,
+	TEGRA_PIN_DAP5_SCLK_PT5 = 127,
+	TEGRA_PIN_DAP5_DOUT_PT6 = 128,
+	TEGRA_PIN_DAP5_DIN_PT7 = 129,
+	TEGRA_PIN_DAP5_FS_PU0 = 130,
+	TEGRA_PIN_DIRECTDC1_CLK_PV0 = 131,
+	TEGRA_PIN_DIRECTDC1_IN_PV1 = 132,
+	TEGRA_PIN_DIRECTDC1_OUT0_PV2 = 133,
+	TEGRA_PIN_DIRECTDC1_OUT1_PV3 = 134,
+	TEGRA_PIN_DIRECTDC1_OUT2_PV4 = 135,
+	TEGRA_PIN_DIRECTDC1_OUT3_PV5 = 136,
+	TEGRA_PIN_DIRECTDC1_OUT4_PV6 = 137,
+	TEGRA_PIN_DIRECTDC1_OUT5_PV7 = 138,
+	TEGRA_PIN_DIRECTDC1_OUT6_PW0 = 139,
+	TEGRA_PIN_DIRECTDC1_OUT7_PW1 = 140,
+	TEGRA_PIN_GPU_PWR_REQ_PX0 = 141,
+	TEGRA_PIN_CV_PWR_REQ_PX1 = 142,
+	TEGRA_PIN_GP_PWM2_PX2 = 143,
+	TEGRA_PIN_GP_PWM3_PX3 = 144,
+	TEGRA_PIN_UART2_TX_PX4 = 145,
+	TEGRA_PIN_UART2_RX_PX5 = 146,
+	TEGRA_PIN_UART2_RTS_PX6 = 147,
+	TEGRA_PIN_UART2_CTS_PX7 = 148,
+	TEGRA_PIN_SPI3_SCK_PY0 = 149,
+	TEGRA_PIN_SPI3_MISO_PY1 = 150,
+	TEGRA_PIN_SPI3_MOSI_PY2 = 151,
+	TEGRA_PIN_SPI3_CS0_PY3 = 152,
+	TEGRA_PIN_SPI3_CS1_PY4 = 153,
+	TEGRA_PIN_UART5_TX_PY5 = 154,
+	TEGRA_PIN_UART5_RX_PY6 = 155,
+	TEGRA_PIN_UART5_RTS_PY7 = 156,
+	TEGRA_PIN_UART5_CTS_PZ0 = 157,
+	TEGRA_PIN_USB_VBUS_EN0_PZ1 = 158,
+	TEGRA_PIN_USB_VBUS_EN1_PZ2 = 159,
+	TEGRA_PIN_SPI1_SCK_PZ3 = 160,
+	TEGRA_PIN_SPI1_MISO_PZ4 = 161,
+	TEGRA_PIN_SPI1_MOSI_PZ5 = 162,
+	TEGRA_PIN_SPI1_CS0_PZ6 = 163,
+	TEGRA_PIN_SPI1_CS1_PZ7 = 164,
+	TEGRA_PIN_CAN1_DOUT_PAA0 = 165,
+	TEGRA_PIN_CAN1_DIN_PAA1 = 166,
+	TEGRA_PIN_CAN0_DOUT_PAA2 = 167,
+	TEGRA_PIN_CAN0_DIN_PAA3 = 168,
+	TEGRA_PIN_CAN0_STB_PAA4 = 169,
+	TEGRA_PIN_CAN0_EN_PAA5 = 170,
+	TEGRA_PIN_CAN0_WAKE_PAA6 = 171,
+	TEGRA_PIN_CAN0_ERR_PAA7 = 172,
+	TEGRA_PIN_CAN1_STB_PBB0 = 173,
+	TEGRA_PIN_CAN1_EN_PBB1 = 174,
+	TEGRA_PIN_CAN1_WAKE_PBB2 = 175,
+	TEGRA_PIN_CAN1_ERR_PBB3 = 176,
+	TEGRA_PIN_SPI2_SCK_PCC0 = 177,
+	TEGRA_PIN_SPI2_MISO_PCC1 = 178,
+	TEGRA_PIN_SPI2_MOSI_PCC2 = 179,
+	TEGRA_PIN_SPI2_CS0_PCC3 = 180,
+	TEGRA_PIN_TOUCH_CLK_PCC4 = 181,
+	TEGRA_PIN_UART3_TX_PCC5 = 182,
+	TEGRA_PIN_UART3_RX_PCC6 = 183,
+	TEGRA_PIN_GEN2_I2C_SCL_PCC7 = 184,
+	TEGRA_PIN_GEN2_I2C_SDA_PDD0 = 185,
+	TEGRA_PIN_GEN8_I2C_SCL_PDD1 = 186,
+	TEGRA_PIN_GEN8_I2C_SDA_PDD2 = 187,
+	TEGRA_PIN_SAFE_STATE_PEE0 = 188,
+	TEGRA_PIN_VCOMP_ALERT_PEE1 = 189,
+	TEGRA_PIN_AO_RETENTION_N_PEE2 = 190,
+	TEGRA_PIN_BATT_OC_PEE3 = 191,
+	TEGRA_PIN_POWER_ON_PEE4 = 192,
+	TEGRA_PIN_PWR_I2C_SCL_PEE5 = 193,
+	TEGRA_PIN_PWR_I2C_SDA_PEE6 = 194,
+	TEGRA_PIN_UFS0_REF_CLK_PFF0 = 195,
+	TEGRA_PIN_UFS0_RST_PFF1 = 196,
+	TEGRA_PIN_PEX_L5_CLKREQ_N_PGG0 = 197,
+	TEGRA_PIN_PEX_L5_RST_N_PGG1 = 198,
+	TEGRA_PIN_DIRECTDC_COMP = 199,
+	TEGRA_PIN_SDMMC4_CLK = 200,
+	TEGRA_PIN_SDMMC4_CMD = 201,
+	TEGRA_PIN_SDMMC4_DQS = 202,
+	TEGRA_PIN_SDMMC4_DAT7 = 203,
+	TEGRA_PIN_SDMMC4_DAT6 = 204,
+	TEGRA_PIN_SDMMC4_DAT5 = 205,
+	TEGRA_PIN_SDMMC4_DAT4 = 206,
+	TEGRA_PIN_SDMMC4_DAT3 = 207,
+	TEGRA_PIN_SDMMC4_DAT2 = 208,
+	TEGRA_PIN_SDMMC4_DAT1 = 209,
+	TEGRA_PIN_SDMMC4_DAT0 = 210,
+	TEGRA_PIN_SDMMC1_COMP = 211,
+	TEGRA_PIN_SDMMC1_HV_TRIM = 212,
+	TEGRA_PIN_SDMMC3_COMP = 213,
+	TEGRA_PIN_SDMMC3_HV_TRIM = 214,
+	TEGRA_PIN_EQOS_COMP = 215,
+	TEGRA_PIN_QSPI_COMP = 216,
+	TEGRA_PIN_SYS_RESET_N = 217,
+	TEGRA_PIN_SHUTDOWN_N = 218,
+	TEGRA_PIN_PMU_INT_N = 219,
+	TEGRA_PIN_SOC_PWR_REQ = 220,
+	TEGRA_PIN_CLK_32K_IN = 221,
 };
 
-struct rockchip_mux_route_data {
-	u8 bank_num;
-	u8 pin;
-	u8 func;
-	enum rockchip_mux_route_location route_location;
-	u32 route_offset;
-	u32 route_val;
-};
-
-struct rockchip_pin_ctrl {
-	struct rockchip_pin_bank *pin_banks;
-	u32 nr_banks;
-	u32 nr_pins;
-	char *label;
-	enum rockchip_pinctrl_type type;
-	int grf_mux_offset;
-	int pmu_mux_offset;
-	int grf_drv_offset;
-	int pmu_drv_offset;
-	struct rockchip_mux_recalced_data *iomux_recalced;
-	u32 niomux_recalced;
-	struct rockchip_mux_route_data *iomux_routes;
-	u32 niomux_routes;
-	void (*pull_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	void (*drv_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	int (*schmitt_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-};
-
-struct rockchip_pin_config {
-	unsigned int func;
-	long unsigned int *configs;
-	unsigned int nconfigs;
-};
-
-struct rockchip_pin_group {
-	const char *name;
-	unsigned int npins;
-	unsigned int *pins;
-	struct rockchip_pin_config *data;
-};
-
-struct rockchip_pmx_func {
-	const char *name;
-	const char **groups;
-	u8 ngroups;
-};
-
-struct pcs_pdata {
-	int irq;
-	void (*rearm)();
-};
-
-struct pcs_func_vals {
-	void *reg;
-	unsigned int val;
-	unsigned int mask;
-};
-
-struct pcs_conf_vals {
-	enum pin_config_param param;
-	unsigned int val;
-	unsigned int enable;
-	unsigned int disable;
-	unsigned int mask;
-};
-
-struct pcs_conf_type {
-	const char *name;
-	enum pin_config_param param;
-};
-
-struct pcs_function {
-	const char *name;
-	struct pcs_func_vals *vals;
-	unsigned int nvals;
-	const char **pgnames;
-	int npgnames;
-	struct pcs_conf_vals *conf;
-	int nconfs;
-	struct list_head node;
-};
-
-struct pcs_gpiofunc_range {
-	unsigned int offset;
-	unsigned int npins;
-	unsigned int gpiofunc;
-	struct list_head node;
-};
-
-struct pcs_data {
-	struct pinctrl_pin_desc *pa;
-	int cur;
-};
-
-struct pcs_soc_data {
-	unsigned int flags;
-	int irq;
-	unsigned int irq_enable_mask;
-	unsigned int irq_status_mask;
-	void (*rearm)();
-};
-
-struct pcs_device {
-	struct resource *res;
-	void *base;
-	void *saved_vals;
-	unsigned int size;
-	struct device *dev;
-	struct device_node *np;
-	struct pinctrl_dev *pctl;
-	unsigned int flags;
-	struct property *missing_nr_pinctrl_cells;
-	struct pcs_soc_data socdata;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	unsigned int width;
-	unsigned int fmask;
-	unsigned int fshift;
-	unsigned int foff;
-	unsigned int fmax;
-	bool bits_per_mux;
-	unsigned int bits_per_pin;
-	struct pcs_data pins;
-	struct list_head gpiofuncs;
-	struct list_head irqs;
-	struct irq_chip chip;
-	struct irq_domain *domain;
-	struct pinctrl_desc desc;
-	unsigned int (*read)(void *);
-	void (*write)(unsigned int, void *);
-};
-
-struct pcs_interrupt {
-	void *reg;
-	irq_hw_number_t hwirq;
-	unsigned int irq;
-	struct list_head node;
-};
-
-struct tegra_pinctrl_soc_data;
-
-struct tegra_pmx {
-	struct device *dev;
-	struct pinctrl_dev *pctl;
-	const struct tegra_pinctrl_soc_data *soc;
-	const char **group_pins;
-	int nbanks;
-	void **regs;
-	u32 *backup_regs;
-};
-
-struct tegra_function;
-
-struct tegra_pingroup;
-
-struct tegra_pinctrl_soc_data {
-	unsigned int ngpios;
-	const char *gpio_compatible;
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	struct tegra_function *functions;
-	unsigned int nfunctions;
-	const struct tegra_pingroup *groups;
-	unsigned int ngroups;
-	bool hsm_in_mux;
-	bool schmitt_in_mux;
-	bool drvtype_in_mux;
-	bool sfsel_in_mux;
-};
-
-enum tegra_pinconf_param {
-	TEGRA_PINCONF_PARAM_PULL = 0,
-	TEGRA_PINCONF_PARAM_TRISTATE = 1,
-	TEGRA_PINCONF_PARAM_ENABLE_INPUT = 2,
-	TEGRA_PINCONF_PARAM_OPEN_DRAIN = 3,
-	TEGRA_PINCONF_PARAM_LOCK = 4,
-	TEGRA_PINCONF_PARAM_IORESET = 5,
-	TEGRA_PINCONF_PARAM_RCV_SEL = 6,
-	TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE = 7,
-	TEGRA_PINCONF_PARAM_SCHMITT = 8,
-	TEGRA_PINCONF_PARAM_LOW_POWER_MODE = 9,
-	TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH = 10,
-	TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH = 11,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING = 12,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_RISING = 13,
-	TEGRA_PINCONF_PARAM_DRIVE_TYPE = 14,
-};
-
-struct tegra_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct tegra_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	u8 npins;
-	u8 funcs[4];
-	s32 mux_reg;
-	s32 pupd_reg;
-	s32 tri_reg;
-	s32 drv_reg;
-	u32 mux_bank: 2;
-	u32 pupd_bank: 2;
-	u32 tri_bank: 2;
-	u32 drv_bank: 2;
-	s32 mux_bit: 6;
-	s32 pupd_bit: 6;
-	s32 tri_bit: 6;
-	s32 einput_bit: 6;
-	s32 odrain_bit: 6;
-	s32 lock_bit: 6;
-	s32 ioreset_bit: 6;
-	s32 rcv_sel_bit: 6;
-	s32 hsm_bit: 6;
-	char: 2;
-	s32 sfsel_bit: 6;
-	s32 schmitt_bit: 6;
-	s32 lpmd_bit: 6;
-	s32 drvdn_bit: 6;
-	s32 drvup_bit: 6;
-	char: 2;
-	s32 slwr_bit: 6;
-	s32 slwf_bit: 6;
-	s32 drvtype_bit: 6;
-	s32 drvdn_width: 6;
-	s32 drvup_width: 6;
-	char: 2;
-	s32 slwr_width: 6;
-	s32 slwf_width: 6;
-	u32 parked_bitmask;
-};
-
-struct cfg_param {
-	const char *property;
-	enum tegra_pinconf_param param;
-};
-
-enum tegra_mux {
-	TEGRA_MUX_BLINK = 0,
-	TEGRA_MUX_CCLA = 1,
-	TEGRA_MUX_CEC = 2,
-	TEGRA_MUX_CLDVFS = 3,
-	TEGRA_MUX_CLK = 4,
-	TEGRA_MUX_CLK12 = 5,
-	TEGRA_MUX_CPU = 6,
-	TEGRA_MUX_CSI = 7,
-	TEGRA_MUX_DAP = 8,
-	TEGRA_MUX_DAP1 = 9,
-	TEGRA_MUX_DAP2 = 10,
-	TEGRA_MUX_DEV3 = 11,
-	TEGRA_MUX_DISPLAYA = 12,
-	TEGRA_MUX_DISPLAYA_ALT = 13,
-	TEGRA_MUX_DISPLAYB = 14,
-	TEGRA_MUX_DP = 15,
-	TEGRA_MUX_DSI_B = 16,
-	TEGRA_MUX_DTV = 17,
-	TEGRA_MUX_EXTPERIPH1 = 18,
-	TEGRA_MUX_EXTPERIPH2 = 19,
-	TEGRA_MUX_EXTPERIPH3 = 20,
-	TEGRA_MUX_GMI = 21,
-	TEGRA_MUX_GMI_ALT = 22,
-	TEGRA_MUX_HDA = 23,
-	TEGRA_MUX_HSI = 24,
-	TEGRA_MUX_I2C1 = 25,
-	TEGRA_MUX_I2C2 = 26,
-	TEGRA_MUX_I2C3 = 27,
-	TEGRA_MUX_I2C4 = 28,
-	TEGRA_MUX_I2CPWR = 29,
-	TEGRA_MUX_I2S0 = 30,
-	TEGRA_MUX_I2S1 = 31,
-	TEGRA_MUX_I2S2 = 32,
-	TEGRA_MUX_I2S3 = 33,
-	TEGRA_MUX_I2S4 = 34,
-	TEGRA_MUX_IRDA = 35,
-	TEGRA_MUX_KBC = 36,
-	TEGRA_MUX_OWR = 37,
-	TEGRA_MUX_PE = 38,
-	TEGRA_MUX_PE0 = 39,
-	TEGRA_MUX_PE1 = 40,
-	TEGRA_MUX_PMI = 41,
-	TEGRA_MUX_PWM0 = 42,
-	TEGRA_MUX_PWM1 = 43,
-	TEGRA_MUX_PWM2 = 44,
-	TEGRA_MUX_PWM3 = 45,
-	TEGRA_MUX_PWRON = 46,
-	TEGRA_MUX_RESET_OUT_N = 47,
-	TEGRA_MUX_RSVD1 = 48,
-	TEGRA_MUX_RSVD2 = 49,
-	TEGRA_MUX_RSVD3 = 50,
-	TEGRA_MUX_RSVD4 = 51,
-	TEGRA_MUX_RTCK = 52,
-	TEGRA_MUX_SATA = 53,
-	TEGRA_MUX_SDMMC1 = 54,
-	TEGRA_MUX_SDMMC2 = 55,
-	TEGRA_MUX_SDMMC3 = 56,
-	TEGRA_MUX_SDMMC4 = 57,
-	TEGRA_MUX_SOC = 58,
-	TEGRA_MUX_SPDIF = 59,
-	TEGRA_MUX_SPI1 = 60,
-	TEGRA_MUX_SPI2 = 61,
-	TEGRA_MUX_SPI3 = 62,
-	TEGRA_MUX_SPI4 = 63,
-	TEGRA_MUX_SPI5 = 64,
-	TEGRA_MUX_SPI6 = 65,
-	TEGRA_MUX_SYS = 66,
-	TEGRA_MUX_TMDS = 67,
-	TEGRA_MUX_TRACE = 68,
-	TEGRA_MUX_UARTA = 69,
-	TEGRA_MUX_UARTB = 70,
-	TEGRA_MUX_UARTC = 71,
-	TEGRA_MUX_UARTD = 72,
-	TEGRA_MUX_ULPI = 73,
-	TEGRA_MUX_USB = 74,
-	TEGRA_MUX_VGP1 = 75,
-	TEGRA_MUX_VGP2 = 76,
-	TEGRA_MUX_VGP3 = 77,
-	TEGRA_MUX_VGP4 = 78,
-	TEGRA_MUX_VGP5 = 79,
-	TEGRA_MUX_VGP6 = 80,
-	TEGRA_MUX_VI = 81,
-	TEGRA_MUX_VI_ALT1 = 82,
-	TEGRA_MUX_VI_ALT3 = 83,
-	TEGRA_MUX_VIMCLK2 = 84,
-	TEGRA_MUX_VIMCLK2_ALT = 85,
-};
-
-enum tegra_mux___2 {
-	TEGRA_MUX_AUD = 0,
-	TEGRA_MUX_BCL = 1,
-	TEGRA_MUX_BLINK___2 = 2,
-	TEGRA_MUX_CCLA___2 = 3,
-	TEGRA_MUX_CEC___2 = 4,
-	TEGRA_MUX_CLDVFS___2 = 5,
-	TEGRA_MUX_CLK___2 = 6,
-	TEGRA_MUX_CORE = 7,
-	TEGRA_MUX_CPU___2 = 8,
-	TEGRA_MUX_DISPLAYA___2 = 9,
-	TEGRA_MUX_DISPLAYB___2 = 10,
-	TEGRA_MUX_DMIC1 = 11,
-	TEGRA_MUX_DMIC2 = 12,
-	TEGRA_MUX_DMIC3 = 13,
-	TEGRA_MUX_DP___2 = 14,
-	TEGRA_MUX_DTV___2 = 15,
-	TEGRA_MUX_EXTPERIPH3___2 = 16,
-	TEGRA_MUX_I2C1___2 = 17,
-	TEGRA_MUX_I2C2___2 = 18,
-	TEGRA_MUX_I2C3___2 = 19,
-	TEGRA_MUX_I2CPMU = 20,
-	TEGRA_MUX_I2CVI = 21,
+enum tegra_mux_dt {
+	TEGRA_MUX_RSVD0___2 = 0,
+	TEGRA_MUX_RSVD1___2 = 1,
+	TEGRA_MUX_RSVD2___2 = 2,
+	TEGRA_MUX_RSVD3___2 = 3,
+	TEGRA_MUX_TOUCH___2 = 4,
+	TEGRA_MUX_UARTC___2 = 5,
+	TEGRA_MUX_I2C8 = 6,
+	TEGRA_MUX_UARTG = 7,
+	TEGRA_MUX_SPI2___2 = 8,
+	TEGRA_MUX_GP = 9,
+	TEGRA_MUX_DCA = 10,
+	TEGRA_MUX_WDT = 11,
+	TEGRA_MUX_I2C2___2 = 12,
+	TEGRA_MUX_CAN1 = 13,
+	TEGRA_MUX_CAN0 = 14,
+	TEGRA_MUX_DMIC3___2 = 15,
+	TEGRA_MUX_DMIC5 = 16,
+	TEGRA_MUX_GPIO = 17,
+	TEGRA_MUX_DSPK1 = 18,
+	TEGRA_MUX_DSPK0 = 19,
+	TEGRA_MUX_SPDIF___2 = 20,
+	TEGRA_MUX_AUD___2 = 21,
 	TEGRA_MUX_I2S1___2 = 22,
-	TEGRA_MUX_I2S2___2 = 23,
-	TEGRA_MUX_I2S3___2 = 24,
-	TEGRA_MUX_I2S4A = 25,
-	TEGRA_MUX_I2S4B = 26,
-	TEGRA_MUX_I2S5A = 27,
-	TEGRA_MUX_I2S5B = 28,
-	TEGRA_MUX_IQC0 = 29,
-	TEGRA_MUX_IQC1 = 30,
-	TEGRA_MUX_JTAG = 31,
-	TEGRA_MUX_PE___2 = 32,
-	TEGRA_MUX_PE0___2 = 33,
-	TEGRA_MUX_PE1___2 = 34,
-	TEGRA_MUX_PMI___2 = 35,
-	TEGRA_MUX_PWM0___2 = 36,
-	TEGRA_MUX_PWM1___2 = 37,
-	TEGRA_MUX_PWM2___2 = 38,
-	TEGRA_MUX_PWM3___2 = 39,
-	TEGRA_MUX_QSPI = 40,
-	TEGRA_MUX_RSVD0 = 41,
-	TEGRA_MUX_RSVD1___2 = 42,
-	TEGRA_MUX_RSVD2___2 = 43,
-	TEGRA_MUX_RSVD3___2 = 44,
-	TEGRA_MUX_SATA___2 = 45,
-	TEGRA_MUX_SDMMC1___2 = 46,
-	TEGRA_MUX_SDMMC3___2 = 47,
-	TEGRA_MUX_SHUTDOWN = 48,
-	TEGRA_MUX_SOC___2 = 49,
-	TEGRA_MUX_SOR0 = 50,
-	TEGRA_MUX_SOR1 = 51,
-	TEGRA_MUX_SPDIF___2 = 52,
-	TEGRA_MUX_SPI1___2 = 53,
-	TEGRA_MUX_SPI2___2 = 54,
-	TEGRA_MUX_SPI3___2 = 55,
-	TEGRA_MUX_SPI4___2 = 56,
-	TEGRA_MUX_SYS___2 = 57,
-	TEGRA_MUX_TOUCH = 58,
-	TEGRA_MUX_UART = 59,
-	TEGRA_MUX_UARTA___2 = 60,
-	TEGRA_MUX_UARTB___2 = 61,
-	TEGRA_MUX_UARTC___2 = 62,
-	TEGRA_MUX_UARTD___2 = 63,
-	TEGRA_MUX_USB___2 = 64,
-	TEGRA_MUX_VGP1___2 = 65,
-	TEGRA_MUX_VGP2___2 = 66,
-	TEGRA_MUX_VGP3___2 = 67,
-	TEGRA_MUX_VGP4___2 = 68,
-	TEGRA_MUX_VGP5___2 = 69,
-	TEGRA_MUX_VGP6___2 = 70,
-	TEGRA_MUX_VIMCLK = 71,
-	TEGRA_MUX_VIMCLK2___2 = 72,
-};
-
-struct tegra_xusb_padctl_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct tegra_xusb_padctl_lane;
-
-struct tegra_xusb_padctl_soc {
-	const struct pinctrl_pin_desc *pins;
-	unsigned int num_pins;
-	const struct tegra_xusb_padctl_function *functions;
-	unsigned int num_functions;
-	const struct tegra_xusb_padctl_lane *lanes;
-	unsigned int num_lanes;
-};
-
-struct tegra_xusb_padctl_lane {
-	const char *name;
-	unsigned int offset;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int iddq;
-	const unsigned int *funcs;
-	unsigned int num_funcs;
-};
-
-struct tegra_xusb_padctl {
-	struct device *dev;
-	void *regs;
-	struct mutex lock;
-	struct reset_control *rst;
-	const struct tegra_xusb_padctl_soc *soc;
-	struct pinctrl_dev *pinctrl;
-	struct pinctrl_desc desc;
-	struct phy_provider *provider;
-	struct phy *phys[2];
-	unsigned int enable;
-};
-
-enum tegra_xusb_padctl_param {
-	TEGRA_XUSB_PADCTL_IDDQ = 0,
-};
-
-struct tegra_xusb_padctl_property {
-	const char *name;
-	enum tegra_xusb_padctl_param param;
-};
-
-enum tegra124_function {
-	TEGRA124_FUNC_SNPS = 0,
-	TEGRA124_FUNC_XUSB = 1,
-	TEGRA124_FUNC_UART = 2,
-	TEGRA124_FUNC_PCIE = 3,
-	TEGRA124_FUNC_USB3 = 4,
-	TEGRA124_FUNC_SATA = 5,
-	TEGRA124_FUNC_RSVD = 6,
-};
-
-struct bcm2835_pinctrl {
-	struct device *dev;
-	void *base;
-	int *wake_irq;
-	long unsigned int enabled_irq_map[2];
-	unsigned int irq_type[58];
-	struct pinctrl_dev *pctl_dev;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_desc pctl_desc;
-	struct pinctrl_gpio_range gpio_range;
-	raw_spinlock_t irq_lock[2];
-};
-
-enum bcm2835_fsel {
-	BCM2835_FSEL_COUNT = 8,
-	BCM2835_FSEL_MASK = 7,
-};
-
-struct bcm_plat_data {
-	const struct gpio_chip *gpio_chip;
-	const struct pinctrl_desc *pctl_desc;
-	const struct pinctrl_gpio_range *gpio_range;
-};
-
-struct mvebu_mpp_ctrl_data {
-	union {
-		void *base;
-		struct {
-			struct regmap *map;
-			u32 offset;
-		} regmap;
-	};
-};
-
-struct mvebu_mpp_ctrl {
-	const char *name;
-	u8 pid;
-	u8 npins;
-	unsigned int *pins;
-	int (*mpp_get)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int *);
-	int (*mpp_set)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int);
-	int (*mpp_gpio_req)(struct mvebu_mpp_ctrl_data *, unsigned int);
-	int (*mpp_gpio_dir)(struct mvebu_mpp_ctrl_data *, unsigned int, bool);
-};
-
-struct mvebu_mpp_ctrl_setting {
-	u8 val;
-	const char *name;
-	const char *subname;
-	u8 variant;
-	u8 flags;
-};
-
-struct mvebu_mpp_mode {
-	u8 pid;
-	struct mvebu_mpp_ctrl_setting *settings;
-};
-
-struct mvebu_pinctrl_soc_info {
-	u8 variant;
-	const struct mvebu_mpp_ctrl *controls;
-	struct mvebu_mpp_ctrl_data *control_data;
-	int ncontrols;
-	struct mvebu_mpp_mode *modes;
-	int nmodes;
-	struct pinctrl_gpio_range *gpioranges;
-	int ngpioranges;
-};
-
-struct mvebu_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int num_groups;
-};
-
-struct mvebu_pinctrl_group {
-	const char *name;
-	const struct mvebu_mpp_ctrl *ctrl;
-	struct mvebu_mpp_ctrl_data *data;
-	struct mvebu_mpp_ctrl_setting *settings;
-	unsigned int num_settings;
-	unsigned int gid;
-	unsigned int *pins;
-	unsigned int npins;
-};
-
-struct mvebu_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_desc desc;
-	struct mvebu_pinctrl_group *groups;
-	unsigned int num_groups;
-	struct mvebu_pinctrl_function *functions;
-	unsigned int num_functions;
-	u8 variant;
-};
-
-enum {
-	V_ARMADA_7K = 1,
-	V_ARMADA_8K_CPM = 2,
-	V_ARMADA_8K_CPS = 4,
-	V_CP115_STANDALONE = 8,
-	V_ARMADA_7K_8K_CPM = 3,
-	V_ARMADA_7K_8K_CPS = 5,
-};
-
-struct armada_37xx_pin_group {
-	const char *name;
-	unsigned int start_pin;
-	unsigned int npins;
-	u32 reg_mask;
-	u32 val[3];
-	unsigned int extra_pin;
-	unsigned int extra_npins;
-	const char *funcs[3];
-	unsigned int *pins;
-};
-
-struct armada_37xx_pin_data {
-	u8 nr_pins;
-	char *name;
-	struct armada_37xx_pin_group *groups;
-	int ngroups;
-};
-
-struct armada_37xx_pmx_func {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct armada_37xx_pm_state {
-	u32 out_en_l;
-	u32 out_en_h;
-	u32 out_val_l;
-	u32 out_val_h;
-	u32 irq_en_l;
-	u32 irq_en_h;
-	u32 irq_pol_l;
-	u32 irq_pol_h;
-	u32 selection;
-};
-
-struct armada_37xx_pinctrl {
-	struct regmap *regmap;
-	void *base;
-	const struct armada_37xx_pin_data *data;
-	struct device *dev;
-	struct gpio_chip gpio_chip;
-	struct irq_chip irq_chip;
-	spinlock_t irq_lock;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct armada_37xx_pin_group *groups;
-	unsigned int ngroups;
-	struct armada_37xx_pmx_func *funcs;
-	unsigned int nfuncs;
-	struct armada_37xx_pm_state pm;
-};
-
-struct msm_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int ngroups;
-};
-
-struct msm_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int npins;
-	unsigned int *funcs;
-	unsigned int nfuncs;
-	u32 ctl_reg;
-	u32 io_reg;
-	u32 intr_cfg_reg;
-	u32 intr_status_reg;
-	u32 intr_target_reg;
-	unsigned int tile: 2;
-	unsigned int mux_bit: 5;
-	unsigned int pull_bit: 5;
-	unsigned int drv_bit: 5;
-	unsigned int od_bit: 5;
-	unsigned int oe_bit: 5;
-	unsigned int in_bit: 5;
-	unsigned int out_bit: 5;
-	unsigned int intr_enable_bit: 5;
-	unsigned int intr_status_bit: 5;
-	unsigned int intr_ack_high: 1;
-	unsigned int intr_target_bit: 5;
-	unsigned int intr_target_kpss_val: 5;
-	unsigned int intr_raw_status_bit: 5;
-	char: 1;
-	unsigned int intr_polarity_bit: 5;
-	unsigned int intr_detection_bit: 5;
-	unsigned int intr_detection_width: 5;
-};
-
-struct msm_gpio_wakeirq_map {
-	unsigned int gpio;
-	unsigned int wakeirq;
-};
-
-struct msm_pinctrl_soc_data {
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	const struct msm_function *functions;
-	unsigned int nfunctions;
-	const struct msm_pingroup *groups;
-	unsigned int ngroups;
-	unsigned int ngpios;
-	bool pull_no_keeper;
-	const char * const *tiles;
-	unsigned int ntiles;
-	const int *reserved_gpios;
-	const struct msm_gpio_wakeirq_map *wakeirq_map;
-	unsigned int nwakeirq_map;
-	bool wakeirq_dual_edge_errata;
-	unsigned int gpio_func;
-};
-
-struct msm_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pctrl;
-	struct gpio_chip chip;
-	struct pinctrl_desc desc;
-	struct notifier_block restart_nb;
-	struct irq_chip irq_chip;
-	int irq;
-	bool intr_target_use_scm;
-	raw_spinlock_t lock;
-	long unsigned int dual_edge_irqs[5];
-	long unsigned int enabled_irqs[5];
-	long unsigned int skip_wake_irqs[5];
-	long unsigned int disabled_for_mux[5];
-	const struct msm_pinctrl_soc_data *soc;
-	void *regs[4];
-	u32 phys_base[4];
-};
-
-enum msm8916_functions {
-	MSM_MUX_adsp_ext = 0,
-	MSM_MUX_alsp_int = 1,
-	MSM_MUX_atest_bbrx0 = 2,
-	MSM_MUX_atest_bbrx1 = 3,
-	MSM_MUX_atest_char = 4,
-	MSM_MUX_atest_char0 = 5,
-	MSM_MUX_atest_char1 = 6,
-	MSM_MUX_atest_char2 = 7,
-	MSM_MUX_atest_char3 = 8,
-	MSM_MUX_atest_combodac = 9,
-	MSM_MUX_atest_gpsadc0 = 10,
-	MSM_MUX_atest_gpsadc1 = 11,
-	MSM_MUX_atest_tsens = 12,
-	MSM_MUX_atest_wlan0 = 13,
-	MSM_MUX_atest_wlan1 = 14,
-	MSM_MUX_backlight_en = 15,
-	MSM_MUX_bimc_dte0 = 16,
-	MSM_MUX_bimc_dte1 = 17,
-	MSM_MUX_blsp_i2c1 = 18,
-	MSM_MUX_blsp_i2c2 = 19,
-	MSM_MUX_blsp_i2c3 = 20,
-	MSM_MUX_blsp_i2c4 = 21,
-	MSM_MUX_blsp_i2c5 = 22,
-	MSM_MUX_blsp_i2c6 = 23,
-	MSM_MUX_blsp_spi1 = 24,
-	MSM_MUX_blsp_spi1_cs1 = 25,
-	MSM_MUX_blsp_spi1_cs2 = 26,
-	MSM_MUX_blsp_spi1_cs3 = 27,
-	MSM_MUX_blsp_spi2 = 28,
-	MSM_MUX_blsp_spi2_cs1 = 29,
-	MSM_MUX_blsp_spi2_cs2 = 30,
-	MSM_MUX_blsp_spi2_cs3 = 31,
-	MSM_MUX_blsp_spi3 = 32,
-	MSM_MUX_blsp_spi3_cs1 = 33,
-	MSM_MUX_blsp_spi3_cs2 = 34,
-	MSM_MUX_blsp_spi3_cs3 = 35,
-	MSM_MUX_blsp_spi4 = 36,
-	MSM_MUX_blsp_spi5 = 37,
-	MSM_MUX_blsp_spi6 = 38,
-	MSM_MUX_blsp_uart1 = 39,
-	MSM_MUX_blsp_uart2 = 40,
-	MSM_MUX_blsp_uim1 = 41,
-	MSM_MUX_blsp_uim2 = 42,
-	MSM_MUX_cam1_rst = 43,
-	MSM_MUX_cam1_standby = 44,
-	MSM_MUX_cam_mclk0 = 45,
-	MSM_MUX_cam_mclk1 = 46,
-	MSM_MUX_cci_async = 47,
-	MSM_MUX_cci_i2c = 48,
-	MSM_MUX_cci_timer0 = 49,
-	MSM_MUX_cci_timer1 = 50,
-	MSM_MUX_cci_timer2 = 51,
-	MSM_MUX_cdc_pdm0 = 52,
-	MSM_MUX_codec_mad = 53,
-	MSM_MUX_dbg_out = 54,
-	MSM_MUX_display_5v = 55,
-	MSM_MUX_dmic0_clk = 56,
-	MSM_MUX_dmic0_data = 57,
-	MSM_MUX_dsi_rst = 58,
-	MSM_MUX_ebi0_wrcdc = 59,
-	MSM_MUX_euro_us = 60,
-	MSM_MUX_ext_lpass = 61,
-	MSM_MUX_flash_strobe = 62,
-	MSM_MUX_gcc_gp1_clk_a = 63,
-	MSM_MUX_gcc_gp1_clk_b = 64,
-	MSM_MUX_gcc_gp2_clk_a = 65,
-	MSM_MUX_gcc_gp2_clk_b = 66,
-	MSM_MUX_gcc_gp3_clk_a = 67,
-	MSM_MUX_gcc_gp3_clk_b = 68,
-	MSM_MUX_gpio = 69,
-	MSM_MUX_gsm0_tx0 = 70,
-	MSM_MUX_gsm0_tx1 = 71,
-	MSM_MUX_gsm1_tx0 = 72,
-	MSM_MUX_gsm1_tx1 = 73,
-	MSM_MUX_gyro_accl = 74,
-	MSM_MUX_kpsns0 = 75,
-	MSM_MUX_kpsns1 = 76,
-	MSM_MUX_kpsns2 = 77,
-	MSM_MUX_ldo_en = 78,
-	MSM_MUX_ldo_update = 79,
-	MSM_MUX_mag_int = 80,
-	MSM_MUX_mdp_vsync = 81,
-	MSM_MUX_modem_tsync = 82,
-	MSM_MUX_m_voc = 83,
-	MSM_MUX_nav_pps = 84,
-	MSM_MUX_nav_tsync = 85,
-	MSM_MUX_pa_indicator = 86,
-	MSM_MUX_pbs0 = 87,
-	MSM_MUX_pbs1 = 88,
-	MSM_MUX_pbs2 = 89,
-	MSM_MUX_pri_mi2s = 90,
-	MSM_MUX_pri_mi2s_ws = 91,
-	MSM_MUX_prng_rosc = 92,
-	MSM_MUX_pwr_crypto_enabled_a = 93,
-	MSM_MUX_pwr_crypto_enabled_b = 94,
-	MSM_MUX_pwr_modem_enabled_a = 95,
-	MSM_MUX_pwr_modem_enabled_b = 96,
-	MSM_MUX_pwr_nav_enabled_a = 97,
-	MSM_MUX_pwr_nav_enabled_b = 98,
-	MSM_MUX_qdss_ctitrig_in_a0 = 99,
-	MSM_MUX_qdss_ctitrig_in_a1 = 100,
-	MSM_MUX_qdss_ctitrig_in_b0 = 101,
-	MSM_MUX_qdss_ctitrig_in_b1 = 102,
-	MSM_MUX_qdss_ctitrig_out_a0 = 103,
-	MSM_MUX_qdss_ctitrig_out_a1 = 104,
-	MSM_MUX_qdss_ctitrig_out_b0 = 105,
-	MSM_MUX_qdss_ctitrig_out_b1 = 106,
-	MSM_MUX_qdss_traceclk_a = 107,
-	MSM_MUX_qdss_traceclk_b = 108,
-	MSM_MUX_qdss_tracectl_a = 109,
-	MSM_MUX_qdss_tracectl_b = 110,
-	MSM_MUX_qdss_tracedata_a = 111,
-	MSM_MUX_qdss_tracedata_b = 112,
-	MSM_MUX_reset_n = 113,
-	MSM_MUX_sd_card = 114,
-	MSM_MUX_sd_write = 115,
-	MSM_MUX_sec_mi2s = 116,
-	MSM_MUX_smb_int = 117,
-	MSM_MUX_ssbi_wtr0 = 118,
-	MSM_MUX_ssbi_wtr1 = 119,
-	MSM_MUX_uim1 = 120,
-	MSM_MUX_uim2 = 121,
-	MSM_MUX_uim3 = 122,
-	MSM_MUX_uim_batt = 123,
-	MSM_MUX_wcss_bt = 124,
-	MSM_MUX_wcss_fm = 125,
-	MSM_MUX_wcss_wlan = 126,
-	MSM_MUX_webcam1_rst = 127,
-	MSM_MUX_NA = 128,
-};
-
-enum msm8994_functions {
-	MSM_MUX_audio_ref_clk = 0,
-	MSM_MUX_blsp_i2c1___2 = 1,
-	MSM_MUX_blsp_i2c2___2 = 2,
-	MSM_MUX_blsp_i2c3___2 = 3,
-	MSM_MUX_blsp_i2c4___2 = 4,
-	MSM_MUX_blsp_i2c5___2 = 5,
-	MSM_MUX_blsp_i2c6___2 = 6,
-	MSM_MUX_blsp_i2c7 = 7,
-	MSM_MUX_blsp_i2c8 = 8,
-	MSM_MUX_blsp_i2c9 = 9,
-	MSM_MUX_blsp_i2c10 = 10,
-	MSM_MUX_blsp_i2c11 = 11,
-	MSM_MUX_blsp_i2c12 = 12,
-	MSM_MUX_blsp_spi1___2 = 13,
-	MSM_MUX_blsp_spi1_cs1___2 = 14,
-	MSM_MUX_blsp_spi1_cs2___2 = 15,
-	MSM_MUX_blsp_spi1_cs3___2 = 16,
-	MSM_MUX_blsp_spi2___2 = 17,
-	MSM_MUX_blsp_spi2_cs1___2 = 18,
-	MSM_MUX_blsp_spi2_cs2___2 = 19,
-	MSM_MUX_blsp_spi2_cs3___2 = 20,
-	MSM_MUX_blsp_spi3___2 = 21,
-	MSM_MUX_blsp_spi4___2 = 22,
-	MSM_MUX_blsp_spi5___2 = 23,
-	MSM_MUX_blsp_spi6___2 = 24,
-	MSM_MUX_blsp_spi7 = 25,
-	MSM_MUX_blsp_spi8 = 26,
-	MSM_MUX_blsp_spi9 = 27,
-	MSM_MUX_blsp_spi10 = 28,
-	MSM_MUX_blsp_spi10_cs1 = 29,
-	MSM_MUX_blsp_spi10_cs2 = 30,
-	MSM_MUX_blsp_spi10_cs3 = 31,
-	MSM_MUX_blsp_spi11 = 32,
-	MSM_MUX_blsp_spi12 = 33,
-	MSM_MUX_blsp_uart1___2 = 34,
-	MSM_MUX_blsp_uart2___2 = 35,
-	MSM_MUX_blsp_uart3 = 36,
-	MSM_MUX_blsp_uart4 = 37,
-	MSM_MUX_blsp_uart5 = 38,
-	MSM_MUX_blsp_uart6 = 39,
-	MSM_MUX_blsp_uart7 = 40,
-	MSM_MUX_blsp_uart8 = 41,
-	MSM_MUX_blsp_uart9 = 42,
-	MSM_MUX_blsp_uart10 = 43,
-	MSM_MUX_blsp_uart11 = 44,
-	MSM_MUX_blsp_uart12 = 45,
-	MSM_MUX_blsp_uim1___2 = 46,
-	MSM_MUX_blsp_uim2___2 = 47,
-	MSM_MUX_blsp_uim3 = 48,
-	MSM_MUX_blsp_uim4 = 49,
-	MSM_MUX_blsp_uim5 = 50,
-	MSM_MUX_blsp_uim6 = 51,
-	MSM_MUX_blsp_uim7 = 52,
-	MSM_MUX_blsp_uim8 = 53,
-	MSM_MUX_blsp_uim9 = 54,
-	MSM_MUX_blsp_uim10 = 55,
-	MSM_MUX_blsp_uim11 = 56,
-	MSM_MUX_blsp_uim12 = 57,
-	MSM_MUX_blsp11_i2c_scl_b = 58,
-	MSM_MUX_blsp11_i2c_sda_b = 59,
-	MSM_MUX_blsp11_uart_rx_b = 60,
-	MSM_MUX_blsp11_uart_tx_b = 61,
-	MSM_MUX_cam_mclk0___2 = 62,
-	MSM_MUX_cam_mclk1___2 = 63,
-	MSM_MUX_cam_mclk2 = 64,
-	MSM_MUX_cam_mclk3 = 65,
-	MSM_MUX_cci_async_in0 = 66,
-	MSM_MUX_cci_async_in1 = 67,
-	MSM_MUX_cci_async_in2 = 68,
-	MSM_MUX_cci_i2c0 = 69,
-	MSM_MUX_cci_i2c1 = 70,
-	MSM_MUX_cci_timer0___2 = 71,
-	MSM_MUX_cci_timer1___2 = 72,
-	MSM_MUX_cci_timer2___2 = 73,
-	MSM_MUX_cci_timer3 = 74,
-	MSM_MUX_cci_timer4 = 75,
-	MSM_MUX_gcc_gp1_clk_a___2 = 76,
-	MSM_MUX_gcc_gp1_clk_b___2 = 77,
-	MSM_MUX_gcc_gp2_clk_a___2 = 78,
-	MSM_MUX_gcc_gp2_clk_b___2 = 79,
-	MSM_MUX_gcc_gp3_clk_a___2 = 80,
-	MSM_MUX_gcc_gp3_clk_b___2 = 81,
-	MSM_MUX_gp_mn = 82,
-	MSM_MUX_gp_pdm0 = 83,
-	MSM_MUX_gp_pdm1 = 84,
-	MSM_MUX_gp_pdm2 = 85,
-	MSM_MUX_gp0_clk = 86,
-	MSM_MUX_gp1_clk = 87,
-	MSM_MUX_gps_tx = 88,
-	MSM_MUX_gsm_tx = 89,
-	MSM_MUX_hdmi_cec = 90,
-	MSM_MUX_hdmi_ddc = 91,
-	MSM_MUX_hdmi_hpd = 92,
-	MSM_MUX_hdmi_rcv = 93,
-	MSM_MUX_mdp_vsync___2 = 94,
-	MSM_MUX_mss_lte = 95,
-	MSM_MUX_nav_pps___2 = 96,
-	MSM_MUX_nav_tsync___2 = 97,
-	MSM_MUX_qdss_cti_trig_in_a = 98,
-	MSM_MUX_qdss_cti_trig_in_b = 99,
-	MSM_MUX_qdss_cti_trig_in_c = 100,
-	MSM_MUX_qdss_cti_trig_in_d = 101,
-	MSM_MUX_qdss_cti_trig_out_a = 102,
-	MSM_MUX_qdss_cti_trig_out_b = 103,
-	MSM_MUX_qdss_cti_trig_out_c = 104,
-	MSM_MUX_qdss_cti_trig_out_d = 105,
-	MSM_MUX_qdss_traceclk_a___2 = 106,
-	MSM_MUX_qdss_traceclk_b___2 = 107,
-	MSM_MUX_qdss_tracectl_a___2 = 108,
-	MSM_MUX_qdss_tracectl_b___2 = 109,
-	MSM_MUX_qdss_tracedata_a___2 = 110,
-	MSM_MUX_qdss_tracedata_b___2 = 111,
-	MSM_MUX_qua_mi2s = 112,
-	MSM_MUX_pci_e0 = 113,
-	MSM_MUX_pci_e1 = 114,
-	MSM_MUX_pri_mi2s___2 = 115,
-	MSM_MUX_sdc4 = 116,
-	MSM_MUX_sec_mi2s___2 = 117,
-	MSM_MUX_slimbus = 118,
-	MSM_MUX_spkr_i2s = 119,
-	MSM_MUX_ter_mi2s = 120,
-	MSM_MUX_tsif1 = 121,
-	MSM_MUX_tsif2 = 122,
-	MSM_MUX_uim1___2 = 123,
-	MSM_MUX_uim2___2 = 124,
-	MSM_MUX_uim3___2 = 125,
-	MSM_MUX_uim4 = 126,
-	MSM_MUX_uim_batt_alarm = 127,
-	MSM_MUX_gpio___2 = 128,
-	MSM_MUX_NA___2 = 129,
-};
-
-enum msm8996_functions {
-	msm_mux_adsp_ext = 0,
-	msm_mux_atest_bbrx0 = 1,
-	msm_mux_atest_bbrx1 = 2,
-	msm_mux_atest_char = 3,
-	msm_mux_atest_char0 = 4,
-	msm_mux_atest_char1 = 5,
-	msm_mux_atest_char2 = 6,
-	msm_mux_atest_char3 = 7,
-	msm_mux_atest_gpsadc0 = 8,
-	msm_mux_atest_gpsadc1 = 9,
-	msm_mux_atest_tsens = 10,
-	msm_mux_atest_tsens2 = 11,
-	msm_mux_atest_usb1 = 12,
-	msm_mux_atest_usb10 = 13,
-	msm_mux_atest_usb11 = 14,
-	msm_mux_atest_usb12 = 15,
-	msm_mux_atest_usb13 = 16,
-	msm_mux_atest_usb2 = 17,
-	msm_mux_atest_usb20 = 18,
-	msm_mux_atest_usb21 = 19,
-	msm_mux_atest_usb22 = 20,
-	msm_mux_atest_usb23 = 21,
-	msm_mux_audio_ref = 22,
-	msm_mux_bimc_dte0 = 23,
-	msm_mux_bimc_dte1 = 24,
-	msm_mux_blsp10_spi = 25,
-	msm_mux_blsp11_i2c_scl_b = 26,
-	msm_mux_blsp11_i2c_sda_b = 27,
-	msm_mux_blsp11_uart_rx_b = 28,
-	msm_mux_blsp11_uart_tx_b = 29,
-	msm_mux_blsp1_spi = 30,
-	msm_mux_blsp2_spi = 31,
-	msm_mux_blsp_i2c1 = 32,
-	msm_mux_blsp_i2c10 = 33,
-	msm_mux_blsp_i2c11 = 34,
-	msm_mux_blsp_i2c12 = 35,
-	msm_mux_blsp_i2c2 = 36,
-	msm_mux_blsp_i2c3 = 37,
-	msm_mux_blsp_i2c4 = 38,
-	msm_mux_blsp_i2c5 = 39,
-	msm_mux_blsp_i2c6 = 40,
-	msm_mux_blsp_i2c7 = 41,
-	msm_mux_blsp_i2c8 = 42,
-	msm_mux_blsp_i2c9 = 43,
-	msm_mux_blsp_spi1 = 44,
-	msm_mux_blsp_spi10 = 45,
-	msm_mux_blsp_spi11 = 46,
-	msm_mux_blsp_spi12 = 47,
-	msm_mux_blsp_spi2 = 48,
-	msm_mux_blsp_spi3 = 49,
-	msm_mux_blsp_spi4 = 50,
-	msm_mux_blsp_spi5 = 51,
-	msm_mux_blsp_spi6 = 52,
-	msm_mux_blsp_spi7 = 53,
-	msm_mux_blsp_spi8 = 54,
-	msm_mux_blsp_spi9 = 55,
-	msm_mux_blsp_uart1 = 56,
-	msm_mux_blsp_uart10 = 57,
-	msm_mux_blsp_uart11 = 58,
-	msm_mux_blsp_uart12 = 59,
-	msm_mux_blsp_uart2 = 60,
-	msm_mux_blsp_uart3 = 61,
-	msm_mux_blsp_uart4 = 62,
-	msm_mux_blsp_uart5 = 63,
-	msm_mux_blsp_uart6 = 64,
-	msm_mux_blsp_uart7 = 65,
-	msm_mux_blsp_uart8 = 66,
-	msm_mux_blsp_uart9 = 67,
-	msm_mux_blsp_uim1 = 68,
-	msm_mux_blsp_uim10 = 69,
-	msm_mux_blsp_uim11 = 70,
-	msm_mux_blsp_uim12 = 71,
-	msm_mux_blsp_uim2 = 72,
-	msm_mux_blsp_uim3 = 73,
-	msm_mux_blsp_uim4 = 74,
-	msm_mux_blsp_uim5 = 75,
-	msm_mux_blsp_uim6 = 76,
-	msm_mux_blsp_uim7 = 77,
-	msm_mux_blsp_uim8 = 78,
-	msm_mux_blsp_uim9 = 79,
-	msm_mux_btfm_slimbus = 80,
-	msm_mux_cam_mclk = 81,
-	msm_mux_cci_async = 82,
-	msm_mux_cci_i2c = 83,
-	msm_mux_cci_timer0 = 84,
-	msm_mux_cci_timer1 = 85,
-	msm_mux_cci_timer2 = 86,
-	msm_mux_cci_timer3 = 87,
-	msm_mux_cci_timer4 = 88,
-	msm_mux_cri_trng = 89,
-	msm_mux_cri_trng0 = 90,
-	msm_mux_cri_trng1 = 91,
-	msm_mux_dac_calib0 = 92,
-	msm_mux_dac_calib1 = 93,
-	msm_mux_dac_calib10 = 94,
-	msm_mux_dac_calib11 = 95,
-	msm_mux_dac_calib12 = 96,
-	msm_mux_dac_calib13 = 97,
-	msm_mux_dac_calib14 = 98,
-	msm_mux_dac_calib15 = 99,
-	msm_mux_dac_calib16 = 100,
-	msm_mux_dac_calib17 = 101,
-	msm_mux_dac_calib18 = 102,
-	msm_mux_dac_calib19 = 103,
-	msm_mux_dac_calib2 = 104,
-	msm_mux_dac_calib20 = 105,
-	msm_mux_dac_calib21 = 106,
-	msm_mux_dac_calib22 = 107,
-	msm_mux_dac_calib23 = 108,
-	msm_mux_dac_calib24 = 109,
-	msm_mux_dac_calib25 = 110,
-	msm_mux_dac_calib26 = 111,
-	msm_mux_dac_calib3 = 112,
-	msm_mux_dac_calib4 = 113,
-	msm_mux_dac_calib5 = 114,
-	msm_mux_dac_calib6 = 115,
-	msm_mux_dac_calib7 = 116,
-	msm_mux_dac_calib8 = 117,
-	msm_mux_dac_calib9 = 118,
-	msm_mux_dac_gpio = 119,
-	msm_mux_dbg_out = 120,
-	msm_mux_ddr_bist = 121,
-	msm_mux_edp_hot = 122,
-	msm_mux_edp_lcd = 123,
-	msm_mux_gcc_gp1_clk_a = 124,
-	msm_mux_gcc_gp1_clk_b = 125,
-	msm_mux_gcc_gp2_clk_a = 126,
-	msm_mux_gcc_gp2_clk_b = 127,
-	msm_mux_gcc_gp3_clk_a = 128,
-	msm_mux_gcc_gp3_clk_b = 129,
-	msm_mux_gsm_tx = 130,
-	msm_mux_hdmi_cec = 131,
-	msm_mux_hdmi_ddc = 132,
-	msm_mux_hdmi_hot = 133,
-	msm_mux_hdmi_rcv = 134,
-	msm_mux_isense_dbg = 135,
-	msm_mux_ldo_en = 136,
-	msm_mux_ldo_update = 137,
-	msm_mux_lpass_slimbus = 138,
-	msm_mux_m_voc = 139,
-	msm_mux_mdp_vsync = 140,
-	msm_mux_mdp_vsync_p_b = 141,
-	msm_mux_mdp_vsync_s_b = 142,
-	msm_mux_modem_tsync = 143,
-	msm_mux_mss_lte = 144,
-	msm_mux_nav_dr = 145,
-	msm_mux_nav_pps = 146,
-	msm_mux_pa_indicator = 147,
-	msm_mux_pci_e0 = 148,
-	msm_mux_pci_e1 = 149,
-	msm_mux_pci_e2 = 150,
-	msm_mux_pll_bypassnl = 151,
-	msm_mux_pll_reset = 152,
-	msm_mux_pri_mi2s = 153,
-	msm_mux_prng_rosc = 154,
-	msm_mux_pwr_crypto = 155,
-	msm_mux_pwr_modem = 156,
-	msm_mux_pwr_nav = 157,
-	msm_mux_qdss_cti = 158,
-	msm_mux_qdss_cti_trig_in_a = 159,
-	msm_mux_qdss_cti_trig_in_b = 160,
-	msm_mux_qdss_cti_trig_out_a = 161,
-	msm_mux_qdss_cti_trig_out_b = 162,
-	msm_mux_qdss_stm0 = 163,
-	msm_mux_qdss_stm1 = 164,
-	msm_mux_qdss_stm10 = 165,
-	msm_mux_qdss_stm11 = 166,
-	msm_mux_qdss_stm12 = 167,
-	msm_mux_qdss_stm13 = 168,
-	msm_mux_qdss_stm14 = 169,
-	msm_mux_qdss_stm15 = 170,
-	msm_mux_qdss_stm16 = 171,
-	msm_mux_qdss_stm17 = 172,
-	msm_mux_qdss_stm18 = 173,
-	msm_mux_qdss_stm19 = 174,
-	msm_mux_qdss_stm2 = 175,
-	msm_mux_qdss_stm20 = 176,
-	msm_mux_qdss_stm21 = 177,
-	msm_mux_qdss_stm22 = 178,
-	msm_mux_qdss_stm23 = 179,
-	msm_mux_qdss_stm24 = 180,
-	msm_mux_qdss_stm25 = 181,
-	msm_mux_qdss_stm26 = 182,
-	msm_mux_qdss_stm27 = 183,
-	msm_mux_qdss_stm28 = 184,
-	msm_mux_qdss_stm29 = 185,
-	msm_mux_qdss_stm3 = 186,
-	msm_mux_qdss_stm30 = 187,
-	msm_mux_qdss_stm31 = 188,
-	msm_mux_qdss_stm4 = 189,
-	msm_mux_qdss_stm5 = 190,
-	msm_mux_qdss_stm6 = 191,
-	msm_mux_qdss_stm7 = 192,
-	msm_mux_qdss_stm8 = 193,
-	msm_mux_qdss_stm9 = 194,
-	msm_mux_qdss_traceclk_a = 195,
-	msm_mux_qdss_traceclk_b = 196,
-	msm_mux_qdss_tracectl_a = 197,
-	msm_mux_qdss_tracectl_b = 198,
-	msm_mux_qdss_tracedata_11 = 199,
-	msm_mux_qdss_tracedata_12 = 200,
-	msm_mux_qdss_tracedata_a = 201,
-	msm_mux_qdss_tracedata_b = 202,
-	msm_mux_qspi0 = 203,
-	msm_mux_qspi1 = 204,
-	msm_mux_qspi2 = 205,
-	msm_mux_qspi3 = 206,
-	msm_mux_qspi_clk = 207,
-	msm_mux_qspi_cs = 208,
-	msm_mux_qua_mi2s = 209,
-	msm_mux_sd_card = 210,
-	msm_mux_sd_write = 211,
-	msm_mux_sdc40 = 212,
-	msm_mux_sdc41 = 213,
-	msm_mux_sdc42 = 214,
-	msm_mux_sdc43 = 215,
-	msm_mux_sdc4_clk = 216,
-	msm_mux_sdc4_cmd = 217,
-	msm_mux_sec_mi2s = 218,
-	msm_mux_spkr_i2s = 219,
-	msm_mux_ssbi1 = 220,
-	msm_mux_ssbi2 = 221,
-	msm_mux_ssc_irq = 222,
-	msm_mux_ter_mi2s = 223,
-	msm_mux_tsense_pwm1 = 224,
-	msm_mux_tsense_pwm2 = 225,
-	msm_mux_tsif1_clk = 226,
-	msm_mux_tsif1_data = 227,
-	msm_mux_tsif1_en = 228,
-	msm_mux_tsif1_error = 229,
-	msm_mux_tsif1_sync = 230,
-	msm_mux_tsif2_clk = 231,
-	msm_mux_tsif2_data = 232,
-	msm_mux_tsif2_en = 233,
-	msm_mux_tsif2_error = 234,
-	msm_mux_tsif2_sync = 235,
-	msm_mux_uim1 = 236,
-	msm_mux_uim2 = 237,
-	msm_mux_uim3 = 238,
-	msm_mux_uim4 = 239,
-	msm_mux_uim_batt = 240,
-	msm_mux_vfr_1 = 241,
-	msm_mux_gpio = 242,
-	msm_mux_NA = 243,
-};
-
-enum pincfg_type {
-	PINCFG_TYPE_FUNC = 0,
-	PINCFG_TYPE_DAT = 1,
-	PINCFG_TYPE_PUD = 2,
-	PINCFG_TYPE_DRV = 3,
-	PINCFG_TYPE_CON_PDN = 4,
-	PINCFG_TYPE_PUD_PDN = 5,
-	PINCFG_TYPE_NUM = 6,
-};
-
-enum eint_type {
-	EINT_TYPE_NONE = 0,
-	EINT_TYPE_GPIO = 1,
-	EINT_TYPE_WKUP = 2,
-	EINT_TYPE_WKUP_MUX = 3,
-};
-
-struct samsung_pin_bank_type {
-	u8 fld_width[6];
-	u8 reg_offset[6];
-};
-
-struct samsung_pin_bank_data {
-	const struct samsung_pin_bank_type *type;
-	u32 pctl_offset;
-	u8 pctl_res_idx;
-	u8 nr_pins;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-};
-
-struct samsung_pinctrl_drv_data;
-
-struct exynos_irq_chip;
-
-struct samsung_pin_bank {
-	const struct samsung_pin_bank_type *type;
-	void *pctl_base;
-	u32 pctl_offset;
-	u8 nr_pins;
-	void *eint_base;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-	u32 pin_base;
-	void *soc_priv;
-	struct device_node *of_node;
-	struct samsung_pinctrl_drv_data *drvdata;
-	struct irq_domain *irq_domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	struct exynos_irq_chip *irq_chip;
-	spinlock_t slock;
-	u32 pm_save[7];
-};
-
-struct samsung_pin_group;
-
-struct samsung_pmx_func;
-
-struct samsung_retention_ctrl;
-
-struct samsung_pinctrl_drv_data {
-	struct list_head node;
-	void *virt_base;
-	struct device *dev;
-	int irq;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	const struct samsung_pin_group *pin_groups;
-	unsigned int nr_groups;
-	const struct samsung_pmx_func *pmx_functions;
-	unsigned int nr_functions;
-	struct samsung_pin_bank *pin_banks;
-	unsigned int nr_banks;
-	unsigned int pin_base;
-	unsigned int nr_pins;
-	struct samsung_retention_ctrl *retention_ctrl;
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_ctrl {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	void *priv;
-	void (*enable)(struct samsung_pinctrl_drv_data *);
-	void (*disable)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_data {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	struct samsung_retention_ctrl * (*init)(struct samsung_pinctrl_drv_data *, const struct samsung_retention_data *);
-};
-
-struct samsung_pin_ctrl {
-	const struct samsung_pin_bank_data *pin_banks;
-	unsigned int nr_banks;
-	unsigned int nr_ext_resources;
-	const struct samsung_retention_data *retention_data;
-	int (*eint_gpio_init)(struct samsung_pinctrl_drv_data *);
-	int (*eint_wkup_init)(struct samsung_pinctrl_drv_data *);
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_pin_group {
-	const char *name;
-	const unsigned int *pins;
-	u8 num_pins;
-	u8 func;
-};
-
-struct samsung_pmx_func {
-	const char *name;
-	const char **groups;
-	u8 num_groups;
-	u32 val;
-};
-
-struct samsung_pinctrl_of_match_data {
-	const struct samsung_pin_ctrl *ctrl;
-	unsigned int num_ctrl;
-};
-
-struct pin_config {
-	const char *property;
-	enum pincfg_type param;
-};
-
-struct exynos_irq_chip {
-	struct irq_chip chip;
-	u32 eint_con;
-	u32 eint_mask;
-	u32 eint_pend;
-	u32 *eint_wake_mask_value;
-	u32 eint_wake_mask_reg;
-	void (*set_eint_wakeup_mask)(struct samsung_pinctrl_drv_data *, struct exynos_irq_chip *);
-};
-
-struct exynos_weint_data {
-	unsigned int irq;
-	struct samsung_pin_bank *bank;
-};
-
-struct exynos_muxed_weint_data {
-	unsigned int nr_banks;
-	struct samsung_pin_bank *banks[0];
-};
-
-struct exynos_eint_gpio_save {
-	u32 eint_con;
-	u32 eint_fltcon0;
-	u32 eint_fltcon1;
-	u32 eint_mask;
-};
-
-enum sunxi_desc_bias_voltage {
-	BIAS_VOLTAGE_NONE = 0,
-	BIAS_VOLTAGE_GRP_CONFIG = 1,
-	BIAS_VOLTAGE_PIO_POW_MODE_SEL = 2,
-};
-
-struct sunxi_desc_function {
-	long unsigned int variant;
-	const char *name;
-	u8 muxval;
-	u8 irqbank;
-	u8 irqnum;
-};
-
-struct sunxi_desc_pin {
-	struct pinctrl_pin_desc pin;
-	long unsigned int variant;
-	struct sunxi_desc_function *functions;
-};
-
-struct sunxi_pinctrl_desc {
-	const struct sunxi_desc_pin *pins;
-	int npins;
-	unsigned int pin_base;
-	unsigned int irq_banks;
-	const unsigned int *irq_bank_map;
-	bool irq_read_needs_mux;
-	bool disable_strict_mode;
-	enum sunxi_desc_bias_voltage io_bias_cfg_variant;
-};
-
-struct sunxi_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct sunxi_pinctrl_group {
-	const char *name;
-	unsigned int pin;
-};
-
-struct sunxi_pinctrl_regulator {
-	struct regulator *regulator;
-	refcount_t refcount;
-};
-
-struct sunxi_pinctrl {
-	void *membase;
-	struct gpio_chip *chip;
-	const struct sunxi_pinctrl_desc *desc;
-	struct device *dev;
-	struct sunxi_pinctrl_regulator regulators[9];
-	struct irq_domain *domain;
-	struct sunxi_pinctrl_function *functions;
-	unsigned int nfunctions;
-	struct sunxi_pinctrl_group *groups;
-	unsigned int ngroups;
-	int *irq;
-	unsigned int *irq_array;
-	raw_spinlock_t lock;
-	struct pinctrl_dev *pctl_dev;
-	long unsigned int variant;
-};
-
-struct mtk_eint_regs {
-	unsigned int stat;
-	unsigned int ack;
-	unsigned int mask;
-	unsigned int mask_set;
-	unsigned int mask_clr;
-	unsigned int sens;
-	unsigned int sens_set;
-	unsigned int sens_clr;
-	unsigned int soft;
-	unsigned int soft_set;
-	unsigned int soft_clr;
-	unsigned int pol;
-	unsigned int pol_set;
-	unsigned int pol_clr;
-	unsigned int dom_en;
-	unsigned int dbnc_ctrl;
-	unsigned int dbnc_set;
-	unsigned int dbnc_clr;
-};
-
-struct mtk_eint_hw {
-	u8 port_mask;
-	u8 ports;
-	unsigned int ap_num;
-	unsigned int db_cnt;
-};
-
-struct mtk_eint_xt {
-	int (*get_gpio_n)(void *, long unsigned int, unsigned int *, struct gpio_chip **);
-	int (*get_gpio_state)(void *, long unsigned int);
-	int (*set_gpio_as_eint)(void *, long unsigned int);
-};
-
-struct mtk_eint {
-	struct device *dev;
-	void *base;
-	struct irq_domain *domain;
-	int irq;
-	int *dual_edge;
-	u32 *wake_mask;
-	u32 *cur_mask;
-	const struct mtk_eint_hw *hw;
-	const struct mtk_eint_regs *regs;
-	void *pctl;
-	const struct mtk_eint_xt *gpio_xlate;
-};
-
-struct mtk_desc_function {
-	const char *name;
-	unsigned char muxval;
-};
-
-struct mtk_desc_eint {
-	unsigned char eintmux;
-	unsigned char eintnum;
-};
-
-struct mtk_desc_pin {
-	struct pinctrl_pin_desc pin;
-	const struct mtk_desc_eint eint;
-	const struct mtk_desc_function *functions;
-};
-
-struct mtk_pinctrl_group {
-	const char *name;
-	long unsigned int config;
-	unsigned int pin;
-};
-
-struct mtk_drv_group_desc {
-	unsigned char min_drv;
-	unsigned char max_drv;
-	unsigned char low_bit;
-	unsigned char high_bit;
-	unsigned char step;
-};
-
-struct mtk_pin_drv_grp {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char bit;
-	unsigned char grp;
-};
-
-struct mtk_pin_spec_pupd_set_samereg {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char pupd_bit;
-	unsigned char r1_bit;
-	unsigned char r0_bit;
-};
-
-struct mtk_pin_ies_smt_set {
-	short unsigned int start;
-	short unsigned int end;
-	short unsigned int offset;
-	unsigned char bit;
-};
-
-struct mtk_pinctrl_devdata {
-	const struct mtk_desc_pin *pins;
-	unsigned int npins;
-	const struct mtk_drv_group_desc *grp_desc;
-	unsigned int n_grp_cls;
-	const struct mtk_pin_drv_grp *pin_drv_grp;
-	unsigned int n_pin_drv_grps;
-	int (*spec_pull_set)(struct regmap *, unsigned int, unsigned char, bool, unsigned int);
-	int (*spec_ies_smt_set)(struct regmap *, unsigned int, unsigned char, int, enum pin_config_param);
-	void (*spec_pinmux_set)(struct regmap *, unsigned int, unsigned int);
-	void (*spec_dir_set)(unsigned int *, unsigned int);
-	unsigned int dir_offset;
-	unsigned int ies_offset;
-	unsigned int smt_offset;
-	unsigned int pullen_offset;
-	unsigned int pullsel_offset;
-	unsigned int drv_offset;
-	unsigned int dout_offset;
-	unsigned int din_offset;
-	unsigned int pinmux_offset;
-	short unsigned int type1_start;
-	short unsigned int type1_end;
-	unsigned char port_shf;
-	unsigned char port_mask;
-	unsigned char port_align;
-	struct mtk_eint_hw eint_hw;
-	struct mtk_eint_regs *eint_regs;
-};
-
-struct mtk_pinctrl {
-	struct regmap *regmap1;
-	struct regmap *regmap2;
-	struct pinctrl_desc pctl_desc;
-	struct device *dev;
-	struct gpio_chip *chip;
-	struct mtk_pinctrl_group *groups;
-	unsigned int ngroups;
-	const char **grp_names;
-	struct pinctrl_dev *pctl_dev;
-	const struct mtk_pinctrl_devdata *devdata;
-	struct mtk_eint *eint;
-};
-
-enum {
-	PINCTRL_PIN_REG_MODE = 0,
-	PINCTRL_PIN_REG_DIR = 1,
-	PINCTRL_PIN_REG_DI = 2,
-	PINCTRL_PIN_REG_DO = 3,
-	PINCTRL_PIN_REG_SR = 4,
-	PINCTRL_PIN_REG_SMT = 5,
-	PINCTRL_PIN_REG_PD = 6,
-	PINCTRL_PIN_REG_PU = 7,
-	PINCTRL_PIN_REG_E4 = 8,
-	PINCTRL_PIN_REG_E8 = 9,
-	PINCTRL_PIN_REG_TDSEL = 10,
-	PINCTRL_PIN_REG_RDSEL = 11,
-	PINCTRL_PIN_REG_DRV = 12,
-	PINCTRL_PIN_REG_PUPD = 13,
-	PINCTRL_PIN_REG_R0 = 14,
-	PINCTRL_PIN_REG_R1 = 15,
-	PINCTRL_PIN_REG_IES = 16,
-	PINCTRL_PIN_REG_PULLEN = 17,
-	PINCTRL_PIN_REG_PULLSEL = 18,
-	PINCTRL_PIN_REG_DRV_EN = 19,
-	PINCTRL_PIN_REG_DRV_E0 = 20,
-	PINCTRL_PIN_REG_DRV_E1 = 21,
-	PINCTRL_PIN_REG_MAX = 22,
-};
-
-enum {
-	DRV_FIXED = 0,
-	DRV_GRP0 = 1,
-	DRV_GRP1 = 2,
-	DRV_GRP2 = 3,
-	DRV_GRP3 = 4,
-	DRV_GRP4 = 5,
-	DRV_GRP_MAX = 6,
-};
-
-struct mtk_pin_field {
-	u8 index;
-	u32 offset;
-	u32 mask;
-	u8 bitpos;
-	u8 next;
-};
-
-struct mtk_pin_field_calc {
-	u16 s_pin;
-	u16 e_pin;
-	u8 i_base;
-	u32 s_addr;
-	u8 x_addrs;
-	u8 s_bit;
-	u8 x_bits;
-	u8 sz_reg;
-	u8 fixed;
-};
-
-struct mtk_pin_reg_calc {
-	const struct mtk_pin_field_calc *range;
-	unsigned int nranges;
-};
-
-struct mtk_func_desc {
-	const char *name;
-	u8 muxval;
-};
-
-struct mtk_eint_desc {
-	u16 eint_m;
-	u16 eint_n;
-};
-
-struct mtk_pin_desc {
-	unsigned int number;
-	const char *name;
-	struct mtk_eint_desc eint;
-	u8 drv_n;
-	struct mtk_func_desc *funcs;
-};
-
-struct mtk_pinctrl___2;
-
-struct mtk_pin_soc {
-	const struct mtk_pin_reg_calc *reg_cal;
-	const struct mtk_pin_desc *pins;
-	unsigned int npins;
-	const struct group_desc *grps;
-	unsigned int ngrps;
-	const struct function_desc *funcs;
-	unsigned int nfuncs;
-	const struct mtk_eint_regs *eint_regs;
-	const struct mtk_eint_hw *eint_hw;
-	u8 gpio_m;
-	bool ies_present;
-	const char * const *base_names;
-	unsigned int nbase_names;
-	int (*bias_disable_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *);
-	int (*bias_disable_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*bias_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool);
-	int (*bias_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, int *);
-	int (*bias_set_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32, u32);
-	int (*bias_get_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *, u32 *);
-	int (*drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*adv_pull_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32);
-	int (*adv_pull_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32 *);
-	int (*adv_drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*adv_drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *);
-	void *driver_data;
-};
-
-struct mtk_pinctrl___2 {
-	struct pinctrl_dev *pctrl;
-	void **base;
-	u8 nbase;
-	struct device *dev;
-	struct gpio_chip chip;
-	const struct mtk_pin_soc *soc;
-	struct mtk_eint *eint;
-	struct mtk_pinctrl_group *groups;
-	const char **grp_names;
-};
-
-struct mtk_drive_desc {
-	u8 min;
-	u8 max;
-	u8 step;
-	u8 scal;
-};
-
-struct mt6397_chip {
-	struct device *dev;
-	struct regmap *regmap;
-	struct notifier_block pm_nb;
-	int irq;
-	struct irq_domain *irq_domain;
-	struct mutex irqlock;
-	u16 wake_mask[2];
-	u16 irq_masks_cur[2];
-	u16 irq_masks_cache[2];
-	u16 int_con[2];
-	u16 int_status[2];
-	u16 chip_id;
-	void *irq_data;
-};
-
-struct madera_pin_groups {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int n_pins;
-};
-
-struct madera_pin_chip {
-	unsigned int n_pins;
-	const struct madera_pin_groups *pin_groups;
-	unsigned int n_pin_groups;
-};
-
-struct madera_pin_private {
-	struct madera *madera;
-	const struct madera_pin_chip *chip;
-	struct device *dev;
-	struct pinctrl_dev *pctl;
-};
-
-struct gpio_pin_range {
-	struct list_head node;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_gpio_range range;
-};
-
-struct gpio_array;
-
-struct gpio_descs {
-	struct gpio_array *info;
-	unsigned int ndescs;
-	struct gpio_desc___2 *desc[0];
-};
-
-struct gpio_array {
-	struct gpio_desc___2 **desc;
-	unsigned int size;
-	struct gpio_chip *chip;
-	long unsigned int *get_mask;
-	long unsigned int *set_mask;
-	long unsigned int invert_mask[0];
-};
-
-enum gpiod_flags {
-	GPIOD_ASIS = 0,
-	GPIOD_IN = 1,
-	GPIOD_OUT_LOW = 3,
-	GPIOD_OUT_HIGH = 7,
-	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
-	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
-};
-
-enum gpio_lookup_flags {
-	GPIO_ACTIVE_HIGH = 0,
-	GPIO_ACTIVE_LOW = 1,
-	GPIO_OPEN_DRAIN = 2,
-	GPIO_OPEN_SOURCE = 4,
-	GPIO_PERSISTENT = 0,
-	GPIO_TRANSITORY = 8,
-	GPIO_PULL_UP = 16,
-	GPIO_PULL_DOWN = 32,
-	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
-};
-
-struct gpiod_lookup {
-	const char *key;
-	u16 chip_hwnum;
-	const char *con_id;
-	unsigned int idx;
-	long unsigned int flags;
-};
-
-struct gpiod_lookup_table {
-	struct list_head list;
-	const char *dev_id;
-	struct gpiod_lookup table[0];
-};
-
-struct gpiod_hog {
-	struct list_head list;
-	const char *chip_label;
-	u16 chip_hwnum;
-	const char *line_name;
-	long unsigned int lflags;
-	int dflags;
-};
-
-enum {
-	GPIOLINE_CHANGED_REQUESTED = 1,
-	GPIOLINE_CHANGED_RELEASED = 2,
-	GPIOLINE_CHANGED_CONFIG = 3,
+	TEGRA_MUX_DMIC1___2 = 23,
+	TEGRA_MUX_DMIC2___2 = 24,
+	TEGRA_MUX_I2S3___2 = 25,
+	TEGRA_MUX_DMIC4 = 26,
+	TEGRA_MUX_I2S4 = 27,
+	TEGRA_MUX_EXTPERIPH2 = 28,
+	TEGRA_MUX_EXTPERIPH1 = 29,
+	TEGRA_MUX_I2C3___2 = 30,
+	TEGRA_MUX_VGP1___2 = 31,
+	TEGRA_MUX_VGP2___2 = 32,
+	TEGRA_MUX_VGP3___2 = 33,
+	TEGRA_MUX_VGP4___2 = 34,
+	TEGRA_MUX_VGP5___2 = 35,
+	TEGRA_MUX_VGP6___2 = 36,
+	TEGRA_MUX_SLVS = 37,
+	TEGRA_MUX_EXTPERIPH3___2 = 38,
+	TEGRA_MUX_EXTPERIPH4 = 39,
+	TEGRA_MUX_I2S2___2 = 40,
+	TEGRA_MUX_UARTD___2 = 41,
+	TEGRA_MUX_I2C1___2 = 42,
+	TEGRA_MUX_UARTA___2 = 43,
+	TEGRA_MUX_DIRECTDC1 = 44,
+	TEGRA_MUX_DIRECTDC = 45,
+	TEGRA_MUX_IQC1___2 = 46,
+	TEGRA_MUX_IQC2 = 47,
+	TEGRA_MUX_I2S6 = 48,
+	TEGRA_MUX_SDMMC3___2 = 49,
+	TEGRA_MUX_SDMMC1___2 = 50,
+	TEGRA_MUX_DP___2 = 51,
+	TEGRA_MUX_HDMI = 52,
+	TEGRA_MUX_PE2 = 53,
+	TEGRA_MUX_IGPU = 54,
+	TEGRA_MUX_SATA___2 = 55,
+	TEGRA_MUX_PE1___2 = 56,
+	TEGRA_MUX_PE0___2 = 57,
+	TEGRA_MUX_PE3 = 58,
+	TEGRA_MUX_PE4 = 59,
+	TEGRA_MUX_PE5 = 60,
+	TEGRA_MUX_SOC___2 = 61,
+	TEGRA_MUX_EQOS = 62,
+	TEGRA_MUX_QSPI___2 = 63,
+	TEGRA_MUX_QSPI0 = 64,
+	TEGRA_MUX_QSPI1 = 65,
+	TEGRA_MUX_MIPI = 66,
+	TEGRA_MUX_SCE = 67,
+	TEGRA_MUX_I2C5 = 68,
+	TEGRA_MUX_DISPLAYA___2 = 69,
+	TEGRA_MUX_DISPLAYB___2 = 70,
+	TEGRA_MUX_DCB = 71,
+	TEGRA_MUX_SPI1___2 = 72,
+	TEGRA_MUX_UARTB___2 = 73,
+	TEGRA_MUX_UARTE = 74,
+	TEGRA_MUX_SPI3___2 = 75,
+	TEGRA_MUX_NV = 76,
+	TEGRA_MUX_CCLA___2 = 77,
+	TEGRA_MUX_I2S5 = 78,
+	TEGRA_MUX_USB___2 = 79,
+	TEGRA_MUX_UFS0 = 80,
+	TEGRA_MUX_DGPU = 81,
+	TEGRA_MUX_SDMMC4 = 82,
 };
 
 struct acpi_gpio_info {
@@ -62856,760 +95145,14 @@
 	int pin_config;
 	int polarity;
 	int triggering;
+	unsigned int debounce;
 	unsigned int quirks;
 };
 
-struct trace_event_raw_gpio_direction {
-	struct trace_entry ent;
-	unsigned int gpio;
-	int in;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_gpio_value {
-	struct trace_entry ent;
-	unsigned int gpio;
-	int get;
-	int value;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_gpio_direction {};
-
-struct trace_event_data_offsets_gpio_value {};
-
-typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
-
-typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
-
-struct devres;
-
-struct gpio {
-	unsigned int gpio;
-	long unsigned int flags;
-	const char *label;
-};
-
-struct of_reconfig_data {
-	struct device_node *dn;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-enum of_reconfig_change {
-	OF_RECONFIG_NO_CHANGE = 0,
-	OF_RECONFIG_CHANGE_ADD = 1,
-	OF_RECONFIG_CHANGE_REMOVE = 2,
-};
-
-enum of_gpio_flags {
-	OF_GPIO_ACTIVE_LOW = 1,
-	OF_GPIO_SINGLE_ENDED = 2,
-	OF_GPIO_OPEN_DRAIN = 4,
-	OF_GPIO_TRANSITORY = 8,
-	OF_GPIO_PULL_UP = 16,
-	OF_GPIO_PULL_DOWN = 32,
-};
-
-struct of_mm_gpio_chip {
-	struct gpio_chip gc;
-	void (*save_regs)(struct of_mm_gpio_chip *);
-	void *regs;
-};
-
-struct gpiochip_info {
-	char name[32];
-	char label[32];
-	__u32 lines;
-};
-
-enum gpio_v2_line_flag {
-	GPIO_V2_LINE_FLAG_USED = 1,
-	GPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,
-	GPIO_V2_LINE_FLAG_INPUT = 4,
-	GPIO_V2_LINE_FLAG_OUTPUT = 8,
-	GPIO_V2_LINE_FLAG_EDGE_RISING = 16,
-	GPIO_V2_LINE_FLAG_EDGE_FALLING = 32,
-	GPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,
-	GPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,
-	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
-	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
-	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
-};
-
-struct gpio_v2_line_values {
-	__u64 bits;
-	__u64 mask;
-};
-
-enum gpio_v2_line_attr_id {
-	GPIO_V2_LINE_ATTR_ID_FLAGS = 1,
-	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,
-	GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,
-};
-
-struct gpio_v2_line_attribute {
-	__u32 id;
-	__u32 padding;
-	union {
-		__u64 flags;
-		__u64 values;
-		__u32 debounce_period_us;
-	};
-};
-
-struct gpio_v2_line_config_attribute {
-	struct gpio_v2_line_attribute attr;
-	__u64 mask;
-};
-
-struct gpio_v2_line_config {
-	__u64 flags;
-	__u32 num_attrs;
-	__u32 padding[5];
-	struct gpio_v2_line_config_attribute attrs[10];
-};
-
-struct gpio_v2_line_request {
-	__u32 offsets[64];
-	char consumer[32];
-	struct gpio_v2_line_config config;
-	__u32 num_lines;
-	__u32 event_buffer_size;
-	__u32 padding[5];
-	__s32 fd;
-};
-
-struct gpio_v2_line_info {
-	char name[32];
-	char consumer[32];
-	__u32 offset;
-	__u32 num_attrs;
-	__u64 flags;
-	struct gpio_v2_line_attribute attrs[10];
-	__u32 padding[4];
-};
-
-enum gpio_v2_line_changed_type {
-	GPIO_V2_LINE_CHANGED_REQUESTED = 1,
-	GPIO_V2_LINE_CHANGED_RELEASED = 2,
-	GPIO_V2_LINE_CHANGED_CONFIG = 3,
-};
-
-struct gpio_v2_line_info_changed {
-	struct gpio_v2_line_info info;
-	__u64 timestamp_ns;
-	__u32 event_type;
-	__u32 padding[5];
-};
-
-enum gpio_v2_line_event_id {
-	GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
-	GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
-};
-
-struct gpio_v2_line_event {
-	__u64 timestamp_ns;
-	__u32 id;
-	__u32 offset;
-	__u32 seqno;
-	__u32 line_seqno;
-	__u32 padding[6];
-};
-
-struct gpioline_info {
-	__u32 line_offset;
-	__u32 flags;
-	char name[32];
-	char consumer[32];
-};
-
-struct gpioline_info_changed {
-	struct gpioline_info info;
-	__u64 timestamp;
-	__u32 event_type;
-	__u32 padding[5];
-};
-
-struct gpiohandle_request {
-	__u32 lineoffsets[64];
-	__u32 flags;
-	__u8 default_values[64];
-	char consumer_label[32];
-	__u32 lines;
-	int fd;
-};
-
-struct gpiohandle_config {
-	__u32 flags;
-	__u8 default_values[64];
-	__u32 padding[4];
-};
-
-struct gpiohandle_data {
-	__u8 values[64];
-};
-
-struct gpioevent_request {
-	__u32 lineoffset;
-	__u32 handleflags;
-	__u32 eventflags;
-	char consumer_label[32];
-	int fd;
-};
-
-struct gpioevent_data {
-	__u64 timestamp;
-	__u32 id;
-};
-
-struct linehandle_state {
-	struct gpio_device *gdev;
-	const char *label;
-	struct gpio_desc___2 *descs[64];
-	u32 num_descs;
-};
-
-struct linereq;
-
-struct line {
-	struct gpio_desc___2 *desc;
-	struct linereq *req;
-	unsigned int irq;
-	u64 eflags;
-	u64 timestamp_ns;
-	u32 req_seqno;
-	u32 line_seqno;
-	struct delayed_work work;
-	unsigned int sw_debounced;
-	unsigned int level;
-};
-
-struct linereq {
-	struct gpio_device *gdev;
-	const char *label;
-	u32 num_lines;
-	wait_queue_head_t wait;
-	u32 event_buffer_size;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct gpio_v2_line_event *type;
-			const struct gpio_v2_line_event *const_type;
-			char (*rectype)[0];
-			struct gpio_v2_line_event *ptr;
-			const struct gpio_v2_line_event *ptr_const;
-		};
-		struct gpio_v2_line_event buf[0];
-	} events;
-	atomic_t seqno;
-	struct mutex config_mutex;
-	struct line lines[0];
-};
-
-struct lineevent_state {
-	struct gpio_device *gdev;
-	const char *label;
-	struct gpio_desc___2 *desc;
-	u32 eflags;
-	int irq;
-	wait_queue_head_t wait;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct gpioevent_data *type;
-			const struct gpioevent_data *const_type;
-			char (*rectype)[0];
-			struct gpioevent_data *ptr;
-			const struct gpioevent_data *ptr_const;
-		};
-		struct gpioevent_data buf[16];
-	} events;
-	u64 timestamp;
-};
-
-struct gpio_chardev_data {
-	struct gpio_device *gdev;
-	wait_queue_head_t wait;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct gpio_v2_line_info_changed *type;
-			const struct gpio_v2_line_info_changed *const_type;
-			char (*rectype)[0];
-			struct gpio_v2_line_info_changed *ptr;
-			const struct gpio_v2_line_info_changed *ptr_const;
-		};
-		struct gpio_v2_line_info_changed buf[32];
-	} events;
-	struct notifier_block lineinfo_changed_nb;
-	long unsigned int *watched_lines;
-	atomic_t watch_abi_version;
-};
-
-struct class_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct class *, struct class_attribute *, char *);
-	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
-};
-
-struct gpiod_data {
-	struct gpio_desc___2 *desc;
-	struct mutex mutex;
-	struct kernfs_node *value_kn;
-	int irq;
-	unsigned char irq_flags;
-	bool direction_can_change;
-};
-
-enum dmi_field {
-	DMI_NONE = 0,
-	DMI_BIOS_VENDOR = 1,
-	DMI_BIOS_VERSION = 2,
-	DMI_BIOS_DATE = 3,
-	DMI_BIOS_RELEASE = 4,
-	DMI_EC_FIRMWARE_RELEASE = 5,
-	DMI_SYS_VENDOR = 6,
-	DMI_PRODUCT_NAME = 7,
-	DMI_PRODUCT_VERSION = 8,
-	DMI_PRODUCT_SERIAL = 9,
-	DMI_PRODUCT_UUID = 10,
-	DMI_PRODUCT_SKU = 11,
-	DMI_PRODUCT_FAMILY = 12,
-	DMI_BOARD_VENDOR = 13,
-	DMI_BOARD_NAME = 14,
-	DMI_BOARD_VERSION = 15,
-	DMI_BOARD_SERIAL = 16,
-	DMI_BOARD_ASSET_TAG = 17,
-	DMI_CHASSIS_VENDOR = 18,
-	DMI_CHASSIS_TYPE = 19,
-	DMI_CHASSIS_VERSION = 20,
-	DMI_CHASSIS_SERIAL = 21,
-	DMI_CHASSIS_ASSET_TAG = 22,
-	DMI_STRING_MAX = 23,
-	DMI_OEM_STRING = 24,
-};
-
-struct dmi_strmatch {
-	unsigned char slot: 7;
-	unsigned char exact_match: 1;
-	char substr[79];
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-typedef u8 acpi_adr_space_type;
-
-struct acpi_connection_info {
-	u8 *connection;
-	u16 length;
-	u8 access_length;
-};
-
-struct acpi_resource_irq {
-	u8 descriptor_length;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	u8 interrupts[1];
-};
-
-struct acpi_resource_dma {
-	u8 type;
-	u8 bus_master;
-	u8 transfer;
-	u8 channel_count;
-	u8 channels[1];
-};
-
-struct acpi_resource_start_dependent {
-	u8 descriptor_length;
-	u8 compatibility_priority;
-	u8 performance_robustness;
-};
-
-struct acpi_resource_io {
-	u8 io_decode;
-	u8 alignment;
-	u8 address_length;
-	u16 minimum;
-	u16 maximum;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_io {
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_dma {
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct acpi_resource_vendor {
-	u16 byte_length;
-	u8 byte_data[1];
-} __attribute__((packed));
-
-struct acpi_resource_vendor_typed {
-	u16 byte_length;
-	u8 uuid_subtype;
-	u8 uuid[16];
-	u8 byte_data[1];
-};
-
-struct acpi_resource_end_tag {
-	u8 checksum;
-};
-
-struct acpi_resource_memory24 {
-	u8 write_protect;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_memory32 {
-	u8 write_protect;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_memory32 {
-	u8 write_protect;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_memory_attribute {
-	u8 write_protect;
-	u8 caching;
-	u8 range_type;
-	u8 translation;
-};
-
-struct acpi_io_attribute {
-	u8 range_type;
-	u8 translation;
-	u8 translation_type;
-	u8 reserved1;
-};
-
-union acpi_resource_attribute {
-	struct acpi_memory_attribute mem;
-	struct acpi_io_attribute io;
-	u8 type_specific;
-};
-
-struct acpi_resource_label {
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_resource_source {
-	u8 index;
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_address16_attribute {
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-};
-
-struct acpi_address32_attribute {
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-};
-
-struct acpi_address64_attribute {
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-};
-
-struct acpi_resource_address {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-};
-
-struct acpi_resource_address16 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address16_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address32 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address32_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address64_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_extended_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	u8 revision_ID;
-	struct acpi_address64_attribute address;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct acpi_resource_extended_irq {
-	u8 producer_consumer;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	struct acpi_resource_source resource_source;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_resource_generic_register {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_resource_gpio {
-	u8 revision_id;
-	u8 connection_type;
-	u8 producer_consumer;
-	u8 pin_config;
-	u8 shareable;
-	u8 wake_capable;
-	u8 io_restriction;
-	u8 triggering;
-	u8 polarity;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_common_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_i2c_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 access_mode;
-	u16 slave_address;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_spi_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 wire_mode;
-	u8 device_polarity;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_uart_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 endian;
-	u8 data_bits;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 parity;
-	u8 lines_enabled;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u32 default_baud_rate;
-} __attribute__((packed));
-
-struct acpi_resource_pin_function {
-	u8 revision_id;
-	u8 pin_config;
-	u8 shareable;
-	u16 function_number;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group {
-	u8 revision_id;
-	u8 producer_consumer;
-	u16 pin_table_length;
-	u16 vendor_length;
-	u16 *pin_table;
-	struct acpi_resource_label resource_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_function {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u16 function_number;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-union acpi_resource_data {
-	struct acpi_resource_irq irq;
-	struct acpi_resource_dma dma;
-	struct acpi_resource_start_dependent start_dpf;
-	struct acpi_resource_io io;
-	struct acpi_resource_fixed_io fixed_io;
-	struct acpi_resource_fixed_dma fixed_dma;
-	struct acpi_resource_vendor vendor;
-	struct acpi_resource_vendor_typed vendor_typed;
-	struct acpi_resource_end_tag end_tag;
-	struct acpi_resource_memory24 memory24;
-	struct acpi_resource_memory32 memory32;
-	struct acpi_resource_fixed_memory32 fixed_memory32;
-	struct acpi_resource_address16 address16;
-	struct acpi_resource_address32 address32;
-	struct acpi_resource_address64 address64;
-	struct acpi_resource_extended_address64 ext_address64;
-	struct acpi_resource_extended_irq extended_irq;
-	struct acpi_resource_generic_register generic_reg;
-	struct acpi_resource_gpio gpio;
-	struct acpi_resource_i2c_serialbus i2c_serial_bus;
-	struct acpi_resource_spi_serialbus spi_serial_bus;
-	struct acpi_resource_uart_serialbus uart_serial_bus;
-	struct acpi_resource_common_serialbus common_serial_bus;
-	struct acpi_resource_pin_function pin_function;
-	struct acpi_resource_pin_config pin_config;
-	struct acpi_resource_pin_group pin_group;
-	struct acpi_resource_pin_group_function pin_group_function;
-	struct acpi_resource_pin_group_config pin_group_config;
-	struct acpi_resource_address address;
-};
-
-struct acpi_resource {
-	u32 type;
-	u32 length;
-	union acpi_resource_data data;
-} __attribute__((packed));
-
 struct acpi_gpiolib_dmi_quirk {
 	bool no_edge_events_on_boot;
 	char *ignore_wake;
+	char *ignore_interrupt;
 };
 
 struct acpi_gpio_event {
@@ -63621,13 +95164,13 @@
 	long unsigned int irqflags;
 	bool irq_is_wake;
 	bool irq_requested;
-	struct gpio_desc___2 *desc;
+	struct gpio_desc *desc;
 };
 
 struct acpi_gpio_connection {
 	struct list_head node;
 	unsigned int pin;
-	struct gpio_desc___2 *desc;
+	struct gpio_desc *desc;
 };
 
 struct acpi_gpio_chip {
@@ -63642,86 +95185,17 @@
 struct acpi_gpio_lookup {
 	struct acpi_gpio_info info;
 	int index;
-	int pin_index;
+	u16 pin_index;
 	bool active_low;
-	struct gpio_desc___2 *desc;
+	struct gpio_desc *desc;
 	int n;
 };
 
-struct bgpio_pdata {
-	const char *label;
-	int base;
-	int ngpio;
-};
-
-enum pwm_polarity {
-	PWM_POLARITY_NORMAL = 0,
-	PWM_POLARITY_INVERSED = 1,
-};
-
-struct pwm_args {
-	u64 period;
-	enum pwm_polarity polarity;
-};
-
-struct pwm_state {
-	u64 period;
-	u64 duty_cycle;
-	enum pwm_polarity polarity;
-	bool enabled;
-};
-
-struct pwm_chip;
-
-struct pwm_device {
-	const char *label;
-	long unsigned int flags;
-	unsigned int hwpwm;
-	unsigned int pwm;
-	struct pwm_chip *chip;
-	void *chip_data;
-	struct pwm_args args;
-	struct pwm_state state;
-	struct pwm_state last;
-};
-
-struct pwm_ops;
-
-struct pwm_chip {
-	struct device *dev;
-	const struct pwm_ops *ops;
-	int base;
-	unsigned int npwm;
-	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
-	unsigned int of_pwm_n_cells;
-	struct list_head list;
-	struct pwm_device *pwms;
-};
-
-struct pwm_capture;
-
-struct pwm_ops {
-	int (*request)(struct pwm_chip *, struct pwm_device *);
-	void (*free)(struct pwm_chip *, struct pwm_device *);
-	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
-	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
-	void (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
-	struct module *owner;
-	int (*config)(struct pwm_chip *, struct pwm_device *, int, int);
-	int (*set_polarity)(struct pwm_chip *, struct pwm_device *, enum pwm_polarity);
-	int (*enable)(struct pwm_chip *, struct pwm_device *);
-	void (*disable)(struct pwm_chip *, struct pwm_device *);
-};
-
-struct pwm_capture {
-	unsigned int period;
-	unsigned int duty_cycle;
-};
-
 struct mvebu_gpio_chip;
 
 struct mvebu_pwm {
-	void *membase;
+	struct regmap *regs;
+	u32 offset;
 	long unsigned int clk_rate;
 	struct gpio_desc *gpiod;
 	struct pwm_chip chip;
@@ -63750,770 +95224,20 @@
 	u32 level_mask_regs[4];
 };
 
-struct amba_id {
-	unsigned int id;
-	unsigned int mask;
-	void *data;
+struct fsl_gpio_soc_data {
+	bool have_paddr;
 };
 
-struct amba_cs_uci_id {
-	unsigned int devarch;
-	unsigned int devarch_mask;
-	unsigned int devtype;
-	void *data;
-};
-
-struct amba_device {
-	struct device dev;
-	struct resource res;
-	struct clk *pclk;
-	struct device_dma_parameters dma_parms;
-	unsigned int periphid;
-	unsigned int cid;
-	struct amba_cs_uci_id uci;
-	unsigned int irq[9];
-	char *driver_override;
-};
-
-struct amba_driver {
-	struct device_driver drv;
-	int (*probe)(struct amba_device *, const struct amba_id *);
-	int (*remove)(struct amba_device *);
-	void (*shutdown)(struct amba_device *);
-	const struct amba_id *id_table;
-};
-
-struct pl061_context_save_regs {
-	u8 gpio_data;
-	u8 gpio_dir;
-	u8 gpio_is;
-	u8 gpio_ibe;
-	u8 gpio_iev;
-	u8 gpio_ie;
-};
-
-struct pl061 {
-	raw_spinlock_t lock;
-	void *base;
-	struct gpio_chip gc;
-	struct irq_chip irq_chip;
-	int parent_irq;
-	struct pl061_context_save_regs csave_regs;
-};
-
-enum rpi_firmware_property_tag {
-	RPI_FIRMWARE_PROPERTY_END = 0,
-	RPI_FIRMWARE_GET_FIRMWARE_REVISION = 1,
-	RPI_FIRMWARE_SET_CURSOR_INFO = 32784,
-	RPI_FIRMWARE_SET_CURSOR_STATE = 32785,
-	RPI_FIRMWARE_GET_BOARD_MODEL = 65537,
-	RPI_FIRMWARE_GET_BOARD_REVISION = 65538,
-	RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 65539,
-	RPI_FIRMWARE_GET_BOARD_SERIAL = 65540,
-	RPI_FIRMWARE_GET_ARM_MEMORY = 65541,
-	RPI_FIRMWARE_GET_VC_MEMORY = 65542,
-	RPI_FIRMWARE_GET_CLOCKS = 65543,
-	RPI_FIRMWARE_GET_POWER_STATE = 131073,
-	RPI_FIRMWARE_GET_TIMING = 131074,
-	RPI_FIRMWARE_SET_POWER_STATE = 163841,
-	RPI_FIRMWARE_GET_CLOCK_STATE = 196609,
-	RPI_FIRMWARE_GET_CLOCK_RATE = 196610,
-	RPI_FIRMWARE_GET_VOLTAGE = 196611,
-	RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 196612,
-	RPI_FIRMWARE_GET_MAX_VOLTAGE = 196613,
-	RPI_FIRMWARE_GET_TEMPERATURE = 196614,
-	RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 196615,
-	RPI_FIRMWARE_GET_MIN_VOLTAGE = 196616,
-	RPI_FIRMWARE_GET_TURBO = 196617,
-	RPI_FIRMWARE_GET_MAX_TEMPERATURE = 196618,
-	RPI_FIRMWARE_GET_STC = 196619,
-	RPI_FIRMWARE_ALLOCATE_MEMORY = 196620,
-	RPI_FIRMWARE_LOCK_MEMORY = 196621,
-	RPI_FIRMWARE_UNLOCK_MEMORY = 196622,
-	RPI_FIRMWARE_RELEASE_MEMORY = 196623,
-	RPI_FIRMWARE_EXECUTE_CODE = 196624,
-	RPI_FIRMWARE_EXECUTE_QPU = 196625,
-	RPI_FIRMWARE_SET_ENABLE_QPU = 196626,
-	RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 196628,
-	RPI_FIRMWARE_GET_EDID_BLOCK = 196640,
-	RPI_FIRMWARE_GET_CUSTOMER_OTP = 196641,
-	RPI_FIRMWARE_GET_DOMAIN_STATE = 196656,
-	RPI_FIRMWARE_GET_THROTTLED = 196678,
-	RPI_FIRMWARE_GET_CLOCK_MEASURED = 196679,
-	RPI_FIRMWARE_NOTIFY_REBOOT = 196680,
-	RPI_FIRMWARE_SET_CLOCK_STATE = 229377,
-	RPI_FIRMWARE_SET_CLOCK_RATE = 229378,
-	RPI_FIRMWARE_SET_VOLTAGE = 229379,
-	RPI_FIRMWARE_SET_TURBO = 229385,
-	RPI_FIRMWARE_SET_CUSTOMER_OTP = 229409,
-	RPI_FIRMWARE_SET_DOMAIN_STATE = 229424,
-	RPI_FIRMWARE_GET_GPIO_STATE = 196673,
-	RPI_FIRMWARE_SET_GPIO_STATE = 229441,
-	RPI_FIRMWARE_SET_SDHOST_CLOCK = 229442,
-	RPI_FIRMWARE_GET_GPIO_CONFIG = 196675,
-	RPI_FIRMWARE_SET_GPIO_CONFIG = 229443,
-	RPI_FIRMWARE_GET_PERIPH_REG = 196677,
-	RPI_FIRMWARE_SET_PERIPH_REG = 229445,
-	RPI_FIRMWARE_GET_POE_HAT_VAL = 196681,
-	RPI_FIRMWARE_SET_POE_HAT_VAL = 196688,
-	RPI_FIRMWARE_NOTIFY_XHCI_RESET = 196696,
-	RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 262145,
-	RPI_FIRMWARE_FRAMEBUFFER_BLANK = 262146,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 262147,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 262148,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 262149,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 262150,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 262151,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 262152,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 262153,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 262154,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 262155,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 262159,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 262160,
-	RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 294913,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 278531,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 278532,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 278533,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 278534,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 278535,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 278537,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 278538,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 278539,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 278542,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 294915,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 294916,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 294917,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 294918,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 294919,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 294921,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 294922,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 294923,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 294943,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 294944,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 294926,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 294927,
-	RPI_FIRMWARE_VCHIQ_INIT = 294928,
-	RPI_FIRMWARE_GET_COMMAND_LINE = 327681,
-	RPI_FIRMWARE_GET_DMA_CHANNELS = 393217,
-};
-
-struct rpi_firmware;
-
-struct rpi_exp_gpio {
-	struct gpio_chip gc;
-	struct rpi_firmware *fw;
-};
-
-struct gpio_set_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-	u32 state;
-};
-
-struct gpio_get_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-};
-
-struct gpio_get_set_state {
-	u32 gpio;
-	u32 state;
-};
-
-struct tegra_gpio_port {
-	const char *name;
-	unsigned int bank;
-	unsigned int port;
-	unsigned int pins;
-};
-
-struct tegra186_pin_range {
-	unsigned int offset;
-	const char *group;
-};
-
-struct tegra_gpio_soc {
-	const struct tegra_gpio_port *ports;
-	unsigned int num_ports;
-	const char *name;
-	unsigned int instance;
-	const struct tegra186_pin_range *pin_ranges;
-	unsigned int num_pin_ranges;
-	const char *pinmux;
-};
-
-struct tegra_gpio {
-	struct gpio_chip gpio;
-	struct irq_chip intc;
-	unsigned int num_irq;
-	unsigned int *irq;
-	const struct tegra_gpio_soc *soc;
-	void *secure;
-	void *base;
-};
-
-struct tegra_gpio_info;
-
-struct tegra_gpio_bank {
-	unsigned int bank;
-	unsigned int irq;
-	spinlock_t lvl_lock[4];
-	spinlock_t dbc_lock[4];
-	u32 cnf[4];
-	u32 out[4];
-	u32 oe[4];
-	u32 int_enb[4];
-	u32 int_lvl[4];
-	u32 wake_enb[4];
-	u32 dbc_enb[4];
-	u32 dbc_cnt[4];
-	struct tegra_gpio_info *tgi;
-};
-
-struct tegra_gpio_soc_config;
-
-struct tegra_gpio_info {
-	struct device *dev;
-	void *regs;
-	struct irq_domain *irq_domain;
-	struct tegra_gpio_bank *bank_info;
-	const struct tegra_gpio_soc_config *soc;
+struct vf610_gpio_port {
 	struct gpio_chip gc;
 	struct irq_chip ic;
-	u32 bank_count;
-};
-
-struct tegra_gpio_soc_config {
-	bool debounce_supported;
-	u32 bank_stride;
-	u32 upper_offset;
-};
-
-struct msix_entry {
-	u32 vector;
-	u16 entry;
-};
-
-struct thunderx_gpio;
-
-struct thunderx_line {
-	struct thunderx_gpio *txgpio;
-	unsigned int line;
-	unsigned int fil_bits;
-};
-
-struct thunderx_gpio {
-	struct gpio_chip chip;
-	u8 *register_base;
-	struct msix_entry *msix_entries;
-	struct thunderx_line *line_entries;
-	raw_spinlock_t lock;
-	long unsigned int invert_mask[2];
-	long unsigned int od_mask[2];
-	int base_msi;
-};
-
-struct xgene_gpio {
-	struct gpio_chip chip;
 	void *base;
-	spinlock_t lock;
-	u32 set_dr_val[3];
-};
-
-enum {
-	PWMF_REQUESTED = 1,
-	PWMF_EXPORTED = 2,
-};
-
-struct pwm_lookup {
-	struct list_head list;
-	const char *provider;
-	unsigned int index;
-	const char *dev_id;
-	const char *con_id;
-	unsigned int period;
-	enum pwm_polarity polarity;
-	const char *module;
-};
-
-struct trace_event_raw_pwm {
-	struct trace_entry ent;
-	struct pwm_device *pwm;
-	u64 period;
-	u64 duty_cycle;
-	enum pwm_polarity polarity;
-	bool enabled;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_pwm {};
-
-typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *);
-
-typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *);
-
-struct pwm_export {
-	struct device child;
-	struct pwm_device *pwm;
-	struct mutex lock;
-	struct pwm_state suspend;
-};
-
-enum {
-	pci_channel_io_normal = 1,
-	pci_channel_io_frozen = 2,
-	pci_channel_io_perm_failure = 3,
-};
-
-struct pci_sriov {
-	int pos;
-	int nres;
-	u32 cap;
-	u16 ctrl;
-	u16 total_VFs;
-	u16 initial_VFs;
-	u16 num_VFs;
-	u16 offset;
-	u16 stride;
-	u16 vf_device;
-	u32 pgsz;
-	u8 link;
-	u8 max_VF_buses;
-	u16 driver_max_VFs;
-	struct pci_dev *dev;
-	struct pci_dev *self;
-	u32 class;
-	u8 hdr_type;
-	u16 subsystem_vendor;
-	u16 subsystem_device;
-	resource_size_t barsz[6];
-	bool drivers_autoprobe;
-};
-
-struct pci_bus_resource {
-	struct list_head list;
-	struct resource *res;
-	unsigned int flags;
-};
-
-typedef u64 pci_bus_addr_t;
-
-struct pci_bus_region {
-	pci_bus_addr_t start;
-	pci_bus_addr_t end;
-};
-
-enum pci_fixup_pass {
-	pci_fixup_early = 0,
-	pci_fixup_header = 1,
-	pci_fixup_final = 2,
-	pci_fixup_enable = 3,
-	pci_fixup_resume = 4,
-	pci_fixup_suspend = 5,
-	pci_fixup_resume_early = 6,
-	pci_fixup_suspend_late = 7,
-};
-
-struct hotplug_slot_ops;
-
-struct hotplug_slot {
-	const struct hotplug_slot_ops *ops;
-	struct list_head slot_list;
-	struct pci_slot *pci_slot;
-	struct module *owner;
-	const char *mod_name;
-};
-
-enum pci_dev_flags {
-	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
-	PCI_DEV_FLAGS_NO_D3 = 2,
-	PCI_DEV_FLAGS_ASSIGNED = 4,
-	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
-	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
-	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
-	PCI_DEV_FLAGS_NO_PM_RESET = 128,
-	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
-	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
-	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
-	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
-};
-
-enum pci_bus_flags {
-	PCI_BUS_FLAGS_NO_MSI = 1,
-	PCI_BUS_FLAGS_NO_MMRBC = 2,
-	PCI_BUS_FLAGS_NO_AERSID = 4,
-	PCI_BUS_FLAGS_NO_EXTCFG = 8,
-};
-
-enum pci_bus_speed {
-	PCI_SPEED_33MHz = 0,
-	PCI_SPEED_66MHz = 1,
-	PCI_SPEED_66MHz_PCIX = 2,
-	PCI_SPEED_100MHz_PCIX = 3,
-	PCI_SPEED_133MHz_PCIX = 4,
-	PCI_SPEED_66MHz_PCIX_ECC = 5,
-	PCI_SPEED_100MHz_PCIX_ECC = 6,
-	PCI_SPEED_133MHz_PCIX_ECC = 7,
-	PCI_SPEED_66MHz_PCIX_266 = 9,
-	PCI_SPEED_100MHz_PCIX_266 = 10,
-	PCI_SPEED_133MHz_PCIX_266 = 11,
-	AGP_UNKNOWN = 12,
-	AGP_1X = 13,
-	AGP_2X = 14,
-	AGP_4X = 15,
-	AGP_8X = 16,
-	PCI_SPEED_66MHz_PCIX_533 = 17,
-	PCI_SPEED_100MHz_PCIX_533 = 18,
-	PCI_SPEED_133MHz_PCIX_533 = 19,
-	PCIE_SPEED_2_5GT = 20,
-	PCIE_SPEED_5_0GT = 21,
-	PCIE_SPEED_8_0GT = 22,
-	PCIE_SPEED_16_0GT = 23,
-	PCIE_SPEED_32_0GT = 24,
-	PCI_SPEED_UNKNOWN = 255,
-};
-
-enum {
-	PCI_REASSIGN_ALL_RSRC = 1,
-	PCI_REASSIGN_ALL_BUS = 2,
-	PCI_PROBE_ONLY = 4,
-	PCI_CAN_SKIP_ISA_ALIGN = 8,
-	PCI_ENABLE_PROC_DOMAINS = 16,
-	PCI_COMPAT_DOMAIN_0 = 32,
-	PCI_SCAN_ALL_PCIE_DEVS = 64,
-};
-
-enum pcie_bus_config_types {
-	PCIE_BUS_TUNE_OFF = 0,
-	PCIE_BUS_DEFAULT = 1,
-	PCIE_BUS_SAFE = 2,
-	PCIE_BUS_PERFORMANCE = 3,
-	PCIE_BUS_PEER2PEER = 4,
-};
-
-struct hotplug_slot_ops {
-	int (*enable_slot)(struct hotplug_slot *);
-	int (*disable_slot)(struct hotplug_slot *);
-	int (*set_attention_status)(struct hotplug_slot *, u8);
-	int (*hardware_test)(struct hotplug_slot *, u32);
-	int (*get_power_status)(struct hotplug_slot *, u8 *);
-	int (*get_attention_status)(struct hotplug_slot *, u8 *);
-	int (*get_latch_status)(struct hotplug_slot *, u8 *);
-	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
-	int (*reset_slot)(struct hotplug_slot *, int);
-};
-
-enum pci_bar_type {
-	pci_bar_unknown = 0,
-	pci_bar_io = 1,
-	pci_bar_mem32 = 2,
-	pci_bar_mem64 = 3,
-};
-
-struct pci_domain_busn_res {
-	struct list_head list;
-	struct resource res;
-	int domain_nr;
-};
-
-struct bus_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct bus_type *, char *);
-	ssize_t (*store)(struct bus_type *, const char *, size_t);
-};
-
-enum pcie_reset_state {
-	pcie_deassert_reset = 1,
-	pcie_warm_reset = 2,
-	pcie_hot_reset = 3,
-};
-
-enum pcie_link_width {
-	PCIE_LNK_WIDTH_RESRV = 0,
-	PCIE_LNK_X1 = 1,
-	PCIE_LNK_X2 = 2,
-	PCIE_LNK_X4 = 4,
-	PCIE_LNK_X8 = 8,
-	PCIE_LNK_X12 = 12,
-	PCIE_LNK_X16 = 16,
-	PCIE_LNK_X32 = 32,
-	PCIE_LNK_WIDTH_UNKNOWN = 255,
-};
-
-struct pci_cap_saved_data {
-	u16 cap_nr;
-	bool cap_extended;
-	unsigned int size;
-	u32 data[0];
-};
-
-struct pci_cap_saved_state {
-	struct hlist_node next;
-	struct pci_cap_saved_data cap;
-};
-
-typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
-
-struct pci_platform_pm_ops {
-	bool (*bridge_d3)(struct pci_dev *);
-	bool (*is_manageable)(struct pci_dev *);
-	int (*set_state)(struct pci_dev *, pci_power_t);
-	pci_power_t (*get_state)(struct pci_dev *);
-	void (*refresh_state)(struct pci_dev *);
-	pci_power_t (*choose_state)(struct pci_dev *);
-	int (*set_wakeup)(struct pci_dev *, bool);
-	bool (*need_resume)(struct pci_dev *);
-};
-
-struct pci_pme_device {
-	struct list_head list;
-	struct pci_dev *dev;
-};
-
-struct pci_saved_state {
-	u32 config_space[16];
-	struct pci_cap_saved_data cap[0];
-};
-
-struct pci_devres {
-	unsigned int enabled: 1;
-	unsigned int pinned: 1;
-	unsigned int orig_intx: 1;
-	unsigned int restore_intx: 1;
-	unsigned int mwi: 1;
-	u32 region_mask;
-};
-
-struct driver_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device_driver *, char *);
-	ssize_t (*store)(struct device_driver *, const char *, size_t);
-};
-
-enum pci_ers_result {
-	PCI_ERS_RESULT_NONE = 1,
-	PCI_ERS_RESULT_CAN_RECOVER = 2,
-	PCI_ERS_RESULT_NEED_RESET = 3,
-	PCI_ERS_RESULT_DISCONNECT = 4,
-	PCI_ERS_RESULT_RECOVERED = 5,
-	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
-};
-
-enum dev_dma_attr {
-	DEV_DMA_NOT_SUPPORTED = 0,
-	DEV_DMA_NON_COHERENT = 1,
-	DEV_DMA_COHERENT = 2,
-};
-
-struct pcie_device {
+	void *gpio_base;
+	const struct fsl_gpio_soc_data *sdata;
+	u8 irqc[32];
+	struct clk *clk_port;
+	struct clk *clk_gpio;
 	int irq;
-	struct pci_dev *port;
-	u32 service;
-	void *priv_data;
-	struct device device;
-};
-
-struct pcie_port_service_driver {
-	const char *name;
-	int (*probe)(struct pcie_device *);
-	void (*remove)(struct pcie_device *);
-	int (*suspend)(struct pcie_device *);
-	int (*resume_noirq)(struct pcie_device *);
-	int (*resume)(struct pcie_device *);
-	int (*runtime_suspend)(struct pcie_device *);
-	int (*runtime_resume)(struct pcie_device *);
-	void (*error_resume)(struct pci_dev *);
-	int port_type;
-	u32 service;
-	struct device_driver driver;
-};
-
-struct pci_dynid {
-	struct list_head node;
-	struct pci_device_id id;
-};
-
-struct drv_dev_and_id {
-	struct pci_driver *drv;
-	struct pci_dev *dev;
-	const struct pci_device_id *id;
-};
-
-enum pci_mmap_state {
-	pci_mmap_io = 0,
-	pci_mmap_mem = 1,
-};
-
-enum pci_mmap_api {
-	PCI_MMAP_SYSFS = 0,
-	PCI_MMAP_PROCFS = 1,
-};
-
-struct pci_vpd_ops;
-
-struct pci_vpd {
-	const struct pci_vpd_ops *ops;
-	struct bin_attribute *attr;
-	struct mutex lock;
-	unsigned int len;
-	u16 flag;
-	u8 cap;
-	unsigned int busy: 1;
-	unsigned int valid: 1;
-};
-
-struct pci_vpd_ops {
-	ssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);
-	ssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);
-	int (*set_size)(struct pci_dev *, size_t);
-};
-
-struct pci_dev_resource {
-	struct list_head list;
-	struct resource *res;
-	struct pci_dev *dev;
-	resource_size_t start;
-	resource_size_t end;
-	resource_size_t add_size;
-	resource_size_t min_align;
-	long unsigned int flags;
-};
-
-enum release_type {
-	leaf_only = 0,
-	whole_subtree = 1,
-};
-
-enum enable_type {
-	undefined = 4294967295,
-	user_disabled = 0,
-	auto_disabled = 1,
-	user_enabled = 2,
-	auto_enabled = 3,
-};
-
-struct portdrv_service_data {
-	struct pcie_port_service_driver *drv;
-	struct device *dev;
-	u32 service;
-};
-
-typedef int (*pcie_pm_callback_t)(struct pcie_device *);
-
-struct aspm_latency {
-	u32 l0s;
-	u32 l1;
-};
-
-struct pcie_link_state {
-	struct pci_dev *pdev;
-	struct pci_dev *downstream;
-	struct pcie_link_state *root;
-	struct pcie_link_state *parent;
-	struct list_head sibling;
-	u32 aspm_support: 7;
-	u32 aspm_enabled: 7;
-	u32 aspm_capable: 7;
-	u32 aspm_default: 7;
-	char: 4;
-	u32 aspm_disable: 7;
-	u32 clkpm_capable: 1;
-	u32 clkpm_enabled: 1;
-	u32 clkpm_default: 1;
-	u32 clkpm_disable: 1;
-	struct aspm_latency latency_up;
-	struct aspm_latency latency_dw;
-	struct aspm_latency acceptable[8];
-};
-
-enum {
-	CPER_SEV_RECOVERABLE = 0,
-	CPER_SEV_FATAL = 1,
-	CPER_SEV_CORRECTED = 2,
-	CPER_SEV_INFORMATIONAL = 3,
-};
-
-struct aer_stats {
-	u64 dev_cor_errs[16];
-	u64 dev_fatal_errs[27];
-	u64 dev_nonfatal_errs[27];
-	u64 dev_total_cor_errs;
-	u64 dev_total_fatal_errs;
-	u64 dev_total_nonfatal_errs;
-	u64 rootport_total_cor_errs;
-	u64 rootport_total_fatal_errs;
-	u64 rootport_total_nonfatal_errs;
-};
-
-struct aer_header_log_regs {
-	unsigned int dw0;
-	unsigned int dw1;
-	unsigned int dw2;
-	unsigned int dw3;
-};
-
-struct aer_capability_regs {
-	u32 header;
-	u32 uncor_status;
-	u32 uncor_mask;
-	u32 uncor_severity;
-	u32 cor_status;
-	u32 cor_mask;
-	u32 cap_control;
-	struct aer_header_log_regs header_log;
-	u32 root_command;
-	u32 root_status;
-	u16 cor_err_source;
-	u16 uncor_err_source;
-};
-
-struct aer_err_info {
-	struct pci_dev *dev[5];
-	int error_dev_num;
-	unsigned int id: 16;
-	unsigned int severity: 2;
-	unsigned int __pad1: 5;
-	unsigned int multi_error_valid: 1;
-	unsigned int first_error: 5;
-	unsigned int __pad2: 2;
-	unsigned int tlp_header_valid: 1;
-	unsigned int status;
-	unsigned int mask;
-	struct aer_header_log_regs tlp;
-};
-
-struct aer_err_source {
-	unsigned int status;
-	unsigned int id;
-};
-
-struct aer_rpc {
-	struct pci_dev *rpd;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct aer_err_source *type;
-			const struct aer_err_source *const_type;
-			char (*rectype)[0];
-			struct aer_err_source *ptr;
-			const struct aer_err_source *ptr_const;
-		};
-		struct aer_err_source buf[128];
-	} aer_fifo;
-};
-
-struct aer_recover_entry {
-	u8 bus;
-	u8 devfn;
-	u16 domain;
-	int severity;
-	struct aer_capability_regs *regs;
 };
 
 struct pcie_pme_service_data {
@@ -64523,33 +95247,6 @@
 	bool noirq;
 };
 
-struct pci_slot_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct pci_slot *, char *);
-	ssize_t (*store)(struct pci_slot *, const char *, size_t);
-};
-
-struct acpi_buffer {
-	acpi_size length;
-	void *pointer;
-};
-
-struct acpi_bus_type {
-	struct list_head list;
-	const char *name;
-	bool (*match)(struct device *);
-	struct acpi_device * (*find_companion)(struct device *);
-	void (*setup)(struct device *);
-	void (*cleanup)(struct device *);
-};
-
-enum pm_qos_flags_status {
-	PM_QOS_FLAGS_UNDEFINED = 4294967295,
-	PM_QOS_FLAGS_NONE = 0,
-	PM_QOS_FLAGS_SOME = 1,
-	PM_QOS_FLAGS_ALL = 2,
-};
-
 struct hpx_type0 {
 	u32 revision;
 	u8 cache_line_size;
@@ -64629,1095 +95326,26 @@
 	HPX_CFG_MAX = 5,
 };
 
-struct of_bus;
-
-struct of_pci_range_parser {
-	struct device_node *node;
-	struct of_bus *bus;
-	const __be32 *range;
-	const __be32 *end;
-	int na;
-	int ns;
-	int pna;
-	bool dma;
+enum xilinx_cpm_version {
+	CPM = 0,
+	CPM5 = 1,
 };
 
-struct of_pci_range {
-	union {
-		u64 pci_addr;
-		u64 bus_addr;
-	};
-	u64 cpu_addr;
-	u64 size;
-	u32 flags;
+struct xilinx_cpm_variant {
+	enum xilinx_cpm_version version;
 };
 
-struct pci_fixup {
-	u16 vendor;
-	u16 device;
-	u32 class;
-	unsigned int class_shift;
-	int hook_offset;
-};
-
-enum {
-	NVME_REG_CAP = 0,
-	NVME_REG_VS = 8,
-	NVME_REG_INTMS = 12,
-	NVME_REG_INTMC = 16,
-	NVME_REG_CC = 20,
-	NVME_REG_CSTS = 28,
-	NVME_REG_NSSR = 32,
-	NVME_REG_AQA = 36,
-	NVME_REG_ASQ = 40,
-	NVME_REG_ACQ = 48,
-	NVME_REG_CMBLOC = 56,
-	NVME_REG_CMBSZ = 60,
-	NVME_REG_BPINFO = 64,
-	NVME_REG_BPRSEL = 68,
-	NVME_REG_BPMBL = 72,
-	NVME_REG_PMRCAP = 3584,
-	NVME_REG_PMRCTL = 3588,
-	NVME_REG_PMRSTS = 3592,
-	NVME_REG_PMREBS = 3596,
-	NVME_REG_PMRSWTP = 3600,
-	NVME_REG_DBS = 4096,
-};
-
-enum {
-	NVME_CC_ENABLE = 1,
-	NVME_CC_EN_SHIFT = 0,
-	NVME_CC_CSS_SHIFT = 4,
-	NVME_CC_MPS_SHIFT = 7,
-	NVME_CC_AMS_SHIFT = 11,
-	NVME_CC_SHN_SHIFT = 14,
-	NVME_CC_IOSQES_SHIFT = 16,
-	NVME_CC_IOCQES_SHIFT = 20,
-	NVME_CC_CSS_NVM = 0,
-	NVME_CC_CSS_CSI = 96,
-	NVME_CC_CSS_MASK = 112,
-	NVME_CC_AMS_RR = 0,
-	NVME_CC_AMS_WRRU = 2048,
-	NVME_CC_AMS_VS = 14336,
-	NVME_CC_SHN_NONE = 0,
-	NVME_CC_SHN_NORMAL = 16384,
-	NVME_CC_SHN_ABRUPT = 32768,
-	NVME_CC_SHN_MASK = 49152,
-	NVME_CC_IOSQES = 393216,
-	NVME_CC_IOCQES = 4194304,
-	NVME_CAP_CSS_NVM = 1,
-	NVME_CAP_CSS_CSI = 64,
-	NVME_CSTS_RDY = 1,
-	NVME_CSTS_CFS = 2,
-	NVME_CSTS_NSSRO = 16,
-	NVME_CSTS_PP = 32,
-	NVME_CSTS_SHST_NORMAL = 0,
-	NVME_CSTS_SHST_OCCUR = 4,
-	NVME_CSTS_SHST_CMPLT = 8,
-	NVME_CSTS_SHST_MASK = 12,
-};
-
-enum {
-	NVME_AEN_BIT_NS_ATTR = 8,
-	NVME_AEN_BIT_FW_ACT = 9,
-	NVME_AEN_BIT_ANA_CHANGE = 11,
-	NVME_AEN_BIT_DISC_CHANGE = 31,
-};
-
-enum {
-	SWITCHTEC_GAS_MRPC_OFFSET = 0,
-	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
-	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
-	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
-	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
-	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
-	SWITCHTEC_GAS_NTB_OFFSET = 65536,
-	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
-};
-
-enum {
-	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
-	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
-	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
-};
-
-struct nt_partition_info {
-	u32 xlink_enabled;
-	u32 target_part_low;
-	u32 target_part_high;
-	u32 reserved;
-};
-
-struct ntb_info_regs {
-	u8 partition_count;
-	u8 partition_id;
-	u16 reserved1;
-	u64 ep_map;
-	u16 requester_id;
-	u16 reserved2;
-	u32 reserved3[4];
-	struct nt_partition_info ntp_info[48];
-} __attribute__((packed));
-
-struct ntb_ctrl_regs {
-	u32 partition_status;
-	u32 partition_op;
-	u32 partition_ctrl;
-	u32 bar_setup;
-	u32 bar_error;
-	u16 lut_table_entries;
-	u16 lut_table_offset;
-	u32 lut_error;
-	u16 req_id_table_size;
-	u16 req_id_table_offset;
-	u32 req_id_error;
-	u32 reserved1[7];
-	struct {
-		u32 ctl;
-		u32 win_size;
-		u64 xlate_addr;
-	} bar_entry[6];
-	struct {
-		u32 win_size;
-		u32 reserved[3];
-	} bar_ext_entry[6];
-	u32 reserved2[192];
-	u32 req_id_table[512];
-	u32 reserved3[256];
-	u64 lut_entry[512];
-};
-
-struct pci_dev_reset_methods {
-	u16 vendor;
-	u16 device;
-	int (*reset)(struct pci_dev *, int);
-};
-
-struct acs_on_id {
-	short unsigned int vendor;
-	short unsigned int device;
-};
-
-struct pci_dev_acs_enabled {
-	u16 vendor;
-	u16 device;
-	int (*acs_enabled)(struct pci_dev *, u16);
-};
-
-struct pci_dev_acs_ops {
-	u16 vendor;
-	u16 device;
-	int (*enable_acs)(struct pci_dev *);
-	int (*disable_acs_redir)(struct pci_dev *);
-};
-
-struct slot {
-	u8 number;
-	unsigned int devfn;
-	struct pci_bus *bus;
-	struct pci_dev *dev;
-	unsigned int latch_status: 1;
-	unsigned int adapter_status: 1;
-	unsigned int extracting;
-	struct hotplug_slot hotplug_slot;
-	struct list_head slot_list;
-};
-
-struct cpci_hp_controller_ops {
-	int (*query_enum)();
-	int (*enable_irq)();
-	int (*disable_irq)();
-	int (*check_irq)(void *);
-	int (*hardware_test)(struct slot *, u32);
-	u8 (*get_power)(struct slot *);
-	int (*set_power)(struct slot *, int);
-};
-
-struct cpci_hp_controller {
-	unsigned int irq;
-	long unsigned int irq_flags;
-	char *devname;
-	void *dev_id;
-	char *name;
-	struct cpci_hp_controller_ops *ops;
-};
-
-struct controller {
-	struct pcie_device *pcie;
-	u32 slot_cap;
-	unsigned int inband_presence_disabled: 1;
-	u16 slot_ctrl;
-	struct mutex ctrl_lock;
-	long unsigned int cmd_started;
-	unsigned int cmd_busy: 1;
-	wait_queue_head_t queue;
-	atomic_t pending_events;
-	unsigned int notification_enabled: 1;
-	unsigned int power_fault_detected;
-	struct task_struct *poll_thread;
-	u8 state;
-	struct mutex state_lock;
-	struct delayed_work button_work;
-	struct hotplug_slot hotplug_slot;
-	struct rw_semaphore reset_lock;
-	unsigned int ist_running;
-	int request_result;
-	wait_queue_head_t requester;
-};
-
-struct acpiphp_slot;
-
-struct slot___2 {
-	struct hotplug_slot hotplug_slot;
-	struct acpiphp_slot *acpi_slot;
-	unsigned int sun;
-};
-
-struct acpiphp_slot {
-	struct list_head node;
-	struct pci_bus *bus;
-	struct list_head funcs;
-	struct slot___2 *slot;
-	u8 device;
-	u32 flags;
-};
-
-struct acpiphp_attention_info {
-	int (*set_attn)(struct hotplug_slot *, u8);
-	int (*get_attn)(struct hotplug_slot *, u8 *);
-	struct module *owner;
-};
-
-struct acpiphp_context;
-
-struct acpiphp_bridge {
-	struct list_head list;
-	struct list_head slots;
-	struct kref ref;
-	struct acpiphp_context *context;
-	int nr_slots;
-	struct pci_bus *pci_bus;
-	struct pci_dev *pci_dev;
-	bool is_going_away;
-};
-
-struct acpiphp_func {
-	struct acpiphp_bridge *parent;
-	struct acpiphp_slot *slot;
-	struct list_head sibling;
-	u8 function;
-	u32 flags;
-};
-
-struct acpiphp_context {
-	struct acpi_hotplug_context hp;
-	struct acpiphp_func func;
-	struct acpiphp_bridge *bridge;
-	unsigned int refcount;
-};
-
-struct acpiphp_root_context {
-	struct acpi_hotplug_context hp;
-	struct acpiphp_bridge *root_bridge;
-};
-
-struct pci_bridge_emul_conf {
-	__le16 vendor;
-	__le16 device;
-	__le16 command;
-	__le16 status;
-	__le32 class_revision;
-	u8 cache_line_size;
-	u8 latency_timer;
-	u8 header_type;
-	u8 bist;
-	__le32 bar[2];
-	u8 primary_bus;
-	u8 secondary_bus;
-	u8 subordinate_bus;
-	u8 secondary_latency_timer;
-	u8 iobase;
-	u8 iolimit;
-	__le16 secondary_status;
-	__le16 membase;
-	__le16 memlimit;
-	__le16 pref_mem_base;
-	__le16 pref_mem_limit;
-	__le32 prefbaseupper;
-	__le32 preflimitupper;
-	__le16 iobaseupper;
-	__le16 iolimitupper;
-	u8 capabilities_pointer;
-	u8 reserve[3];
-	__le32 romaddr;
-	u8 intline;
-	u8 intpin;
-	__le16 bridgectrl;
-};
-
-struct pci_bridge_emul_pcie_conf {
-	u8 cap_id;
-	u8 next;
-	__le16 cap;
-	__le32 devcap;
-	__le16 devctl;
-	__le16 devsta;
-	__le32 lnkcap;
-	__le16 lnkctl;
-	__le16 lnksta;
-	__le32 slotcap;
-	__le16 slotctl;
-	__le16 slotsta;
-	__le16 rootctl;
-	__le16 rsvd;
-	__le32 rootsta;
-	__le32 devcap2;
-	__le16 devctl2;
-	__le16 devsta2;
-	__le32 lnkcap2;
-	__le16 lnkctl2;
-	__le16 lnksta2;
-	__le32 slotcap2;
-	__le16 slotctl2;
-	__le16 slotsta2;
-};
-
-typedef enum {
-	PCI_BRIDGE_EMUL_HANDLED = 0,
-	PCI_BRIDGE_EMUL_NOT_HANDLED = 1,
-} pci_bridge_emul_read_status_t;
-
-struct pci_bridge_emul;
-
-struct pci_bridge_emul_ops {
-	pci_bridge_emul_read_status_t (*read_base)(struct pci_bridge_emul *, int, u32 *);
-	pci_bridge_emul_read_status_t (*read_pcie)(struct pci_bridge_emul *, int, u32 *);
-	void (*write_base)(struct pci_bridge_emul *, int, u32, u32, u32);
-	void (*write_pcie)(struct pci_bridge_emul *, int, u32, u32, u32);
-};
-
-struct pci_bridge_reg_behavior;
-
-struct pci_bridge_emul {
-	struct pci_bridge_emul_conf conf;
-	struct pci_bridge_emul_pcie_conf pcie_conf;
-	struct pci_bridge_emul_ops *ops;
-	struct pci_bridge_reg_behavior *pci_regs_behavior;
-	struct pci_bridge_reg_behavior *pcie_cap_regs_behavior;
-	void *data;
-	bool has_pcie;
-};
-
-struct pci_bridge_reg_behavior {
-	u32 ro;
-	u32 rw;
-	u32 w1c;
-};
-
-enum {
-	PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR = 1,
-};
-
-enum dmi_device_type {
-	DMI_DEV_TYPE_ANY = 0,
-	DMI_DEV_TYPE_OTHER = 1,
-	DMI_DEV_TYPE_UNKNOWN = 2,
-	DMI_DEV_TYPE_VIDEO = 3,
-	DMI_DEV_TYPE_SCSI = 4,
-	DMI_DEV_TYPE_ETHERNET = 5,
-	DMI_DEV_TYPE_TOKENRING = 6,
-	DMI_DEV_TYPE_SOUND = 7,
-	DMI_DEV_TYPE_PATA = 8,
-	DMI_DEV_TYPE_SATA = 9,
-	DMI_DEV_TYPE_SAS = 10,
-	DMI_DEV_TYPE_IPMI = 4294967295,
-	DMI_DEV_TYPE_OEM_STRING = 4294967294,
-	DMI_DEV_TYPE_DEV_ONBOARD = 4294967293,
-	DMI_DEV_TYPE_DEV_SLOT = 4294967292,
-};
-
-struct dmi_device {
-	struct list_head list;
-	int type;
-	const char *name;
-	void *device_data;
-};
-
-struct dmi_dev_onboard {
-	struct dmi_device dev;
-	int instance;
-	int segment;
-	int bus;
-	int devfn;
-};
-
-enum smbios_attr_enum {
-	SMBIOS_ATTR_NONE = 0,
-	SMBIOS_ATTR_LABEL_SHOW = 1,
-	SMBIOS_ATTR_INSTANCE_SHOW = 2,
-};
-
-enum acpi_attr_enum {
-	ACPI_ATTR_LABEL_SHOW = 0,
-	ACPI_ATTR_INDEX_SHOW = 1,
-};
-
-struct pci_epf_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-enum pci_interrupt_pin {
-	PCI_INTERRUPT_UNKNOWN = 0,
-	PCI_INTERRUPT_INTA = 1,
-	PCI_INTERRUPT_INTB = 2,
-	PCI_INTERRUPT_INTC = 3,
-	PCI_INTERRUPT_INTD = 4,
-};
-
-enum pci_barno {
-	BAR_0 = 0,
-	BAR_1 = 1,
-	BAR_2 = 2,
-	BAR_3 = 3,
-	BAR_4 = 4,
-	BAR_5 = 5,
-};
-
-struct pci_epf_header {
-	u16 vendorid;
-	u16 deviceid;
-	u8 revid;
-	u8 progif_code;
-	u8 subclass_code;
-	u8 baseclass_code;
-	u8 cache_line_size;
-	u16 subsys_vendor_id;
-	u16 subsys_id;
-	enum pci_interrupt_pin interrupt_pin;
-};
-
-struct pci_epf;
-
-struct pci_epf_ops {
-	int (*bind)(struct pci_epf *);
-	void (*unbind)(struct pci_epf *);
-};
-
-struct pci_epf_bar {
-	dma_addr_t phys_addr;
-	void *addr;
-	size_t size;
-	enum pci_barno barno;
-	int flags;
-};
-
-struct pci_epc;
-
-struct pci_epf_driver;
-
-struct pci_epf {
-	struct device dev;
-	const char *name;
-	struct pci_epf_header *header;
-	struct pci_epf_bar bar[6];
-	u8 msi_interrupts;
-	u16 msix_interrupts;
-	u8 func_no;
-	struct pci_epc *epc;
-	struct pci_epf_driver *driver;
-	struct list_head list;
-	struct notifier_block nb;
-	struct mutex lock;
-};
-
-struct pci_epf_driver {
-	int (*probe)(struct pci_epf *);
-	int (*remove)(struct pci_epf *);
-	struct device_driver driver;
-	struct pci_epf_ops *ops;
-	struct module *owner;
-	struct list_head epf_group;
-	const struct pci_epf_device_id *id_table;
-};
-
-struct pci_epc_ops;
-
-struct pci_epc_mem;
-
-struct pci_epc {
-	struct device dev;
-	struct list_head pci_epf;
-	const struct pci_epc_ops *ops;
-	struct pci_epc_mem **windows;
-	struct pci_epc_mem *mem;
-	unsigned int num_windows;
-	u8 max_functions;
-	struct config_group *group;
-	struct mutex lock;
-	long unsigned int function_num_map;
-	struct atomic_notifier_head notifier;
-};
-
-enum pci_epc_irq_type {
-	PCI_EPC_IRQ_UNKNOWN = 0,
-	PCI_EPC_IRQ_LEGACY = 1,
-	PCI_EPC_IRQ_MSI = 2,
-	PCI_EPC_IRQ_MSIX = 3,
-};
-
-struct pci_epc_features;
-
-struct pci_epc_ops {
-	int (*write_header)(struct pci_epc *, u8, struct pci_epf_header *);
-	int (*set_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	void (*clear_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	int (*map_addr)(struct pci_epc *, u8, phys_addr_t, u64, size_t);
-	void (*unmap_addr)(struct pci_epc *, u8, phys_addr_t);
-	int (*set_msi)(struct pci_epc *, u8, u8);
-	int (*get_msi)(struct pci_epc *, u8);
-	int (*set_msix)(struct pci_epc *, u8, u16, enum pci_barno, u32);
-	int (*get_msix)(struct pci_epc *, u8);
-	int (*raise_irq)(struct pci_epc *, u8, enum pci_epc_irq_type, u16);
-	int (*start)(struct pci_epc *);
-	void (*stop)(struct pci_epc *);
-	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8);
-	struct module *owner;
-};
-
-struct pci_epc_features {
-	unsigned int linkup_notifier: 1;
-	unsigned int core_init_notifier: 1;
-	unsigned int msi_capable: 1;
-	unsigned int msix_capable: 1;
-	u8 reserved_bar;
-	u8 bar_fixed_64bit;
-	u64 bar_fixed_size[6];
-	size_t align;
-};
-
-struct pci_epc_mem_window {
-	phys_addr_t phys_base;
-	size_t size;
-	size_t page_size;
-};
-
-struct pci_epc_mem {
-	struct pci_epc_mem_window window;
-	long unsigned int *bitmap;
-	int pages;
-	struct mutex lock;
-};
-
-struct pci_epf_group {
-	struct config_group group;
-	struct pci_epf *epf;
-	int index;
-};
-
-struct pci_epc_group {
-	struct config_group group;
-	struct pci_epc *epc;
-	bool start;
-};
-
-enum pci_notify_event {
-	CORE_INIT = 0,
-	LINK_UP = 1,
-};
-
-struct advk_pcie {
-	struct platform_device *pdev;
-	void *base;
-	struct irq_domain *irq_domain;
-	struct irq_chip irq_chip;
-	struct irq_domain *msi_domain;
-	struct irq_domain *msi_inner_domain;
-	struct irq_chip msi_bottom_irq_chip;
-	struct irq_chip msi_irq_chip;
-	struct msi_domain_info msi_domain_info;
-	long unsigned int msi_used[1];
-	struct mutex msi_used_lock;
-	u16 msi_msg;
-	int link_gen;
-	struct pci_bridge_emul bridge;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
-};
-
-struct tegra_msi {
-	struct msi_controller chip;
-	long unsigned int used[4];
-	struct irq_domain *domain;
-	struct mutex lock;
-	void *virt;
-	dma_addr_t phys;
-	int irq;
-};
-
-struct tegra_pcie_port_soc {
-	struct {
-		u8 turnoff_bit;
-		u8 ack_bit;
-	} pme;
-};
-
-struct tegra_pcie_soc {
-	unsigned int num_ports;
-	const struct tegra_pcie_port_soc *ports;
-	unsigned int msi_base_shift;
-	long unsigned int afi_pex2_ctrl;
-	u32 pads_pll_ctl;
-	u32 tx_ref_sel;
-	u32 pads_refclk_cfg0;
-	u32 pads_refclk_cfg1;
-	u32 update_fc_threshold;
-	bool has_pex_clkreq_en;
-	bool has_pex_bias_ctrl;
-	bool has_intr_prsnt_sense;
-	bool has_cml_clk;
-	bool has_gen2;
-	bool force_pca_enable;
-	bool program_uphy;
-	bool update_clamp_threshold;
-	bool program_deskew_time;
-	bool update_fc_timer;
-	bool has_cache_bars;
-	struct {
-		struct {
-			u32 rp_ectl_2_r1;
-			u32 rp_ectl_4_r1;
-			u32 rp_ectl_5_r1;
-			u32 rp_ectl_6_r1;
-			u32 rp_ectl_2_r2;
-			u32 rp_ectl_4_r2;
-			u32 rp_ectl_5_r2;
-			u32 rp_ectl_6_r2;
-		} regs;
-		bool enable;
-	} ectl;
-};
-
-struct tegra_pcie {
+struct xilinx_cpm_pcie {
 	struct device *dev;
-	void *pads;
-	void *afi;
-	void *cfg;
-	int irq;
-	struct resource cs;
-	struct clk *pex_clk;
-	struct clk *afi_clk;
-	struct clk *pll_e;
-	struct clk *cml_clk;
-	struct reset_control *pex_rst;
-	struct reset_control *afi_rst;
-	struct reset_control *pcie_xrst;
-	bool legacy_phy;
-	struct phy *phy;
-	struct tegra_msi msi;
-	struct list_head ports;
-	u32 xbar_config;
-	struct regulator_bulk_data *supplies;
-	unsigned int num_supplies;
-	const struct tegra_pcie_soc *soc;
-	struct dentry *debugfs;
-};
-
-struct tegra_pcie_port {
-	struct tegra_pcie *pcie;
-	struct device_node *np;
-	struct list_head list;
-	struct resource regs;
-	void *base;
-	unsigned int index;
-	unsigned int lanes;
-	struct phy **phys;
-	struct gpio_desc *reset_gpio;
-};
-
-struct xgene_msi;
-
-struct xgene_msi_group {
-	struct xgene_msi *msi;
-	int gic_irq;
-	u32 msi_grp;
-};
-
-struct xgene_msi {
-	struct device_node *node;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	u64 msi_addr;
-	void *msi_regs;
-	long unsigned int *bitmap;
-	struct mutex bitmap_lock;
-	struct xgene_msi_group *msi_groups;
-	int num_cpus;
-};
-
-struct rockchip_pcie {
 	void *reg_base;
-	void *apb_base;
-	bool legacy_phy;
-	struct phy *phys[4];
-	struct reset_control *core_rst;
-	struct reset_control *mgmt_rst;
-	struct reset_control *mgmt_sticky_rst;
-	struct reset_control *pipe_rst;
-	struct reset_control *pm_rst;
-	struct reset_control *aclk_rst;
-	struct reset_control *pclk_rst;
-	struct clk *aclk_pcie;
-	struct clk *aclk_perf_pcie;
-	struct clk *hclk_pcie;
-	struct clk *clk_pcie_pm;
-	struct regulator *vpcie12v;
-	struct regulator *vpcie3v3;
-	struct regulator *vpcie1v8;
-	struct regulator *vpcie0v9;
-	struct gpio_desc *ep_gpio;
-	u32 lanes;
-	u8 lanes_map;
-	int link_gen;
-	struct device *dev;
-	struct irq_domain *irq_domain;
-	int offset;
-	void *msg_region;
-	phys_addr_t msg_bus_addr;
-	bool is_rc;
-	struct resource *mem_res;
-};
-
-struct rockchip_pcie_ep {
-	struct rockchip_pcie rockchip;
-	struct pci_epc *epc;
-	u32 max_regions;
-	long unsigned int ob_region_map;
-	phys_addr_t *ob_addr;
-	phys_addr_t irq_phys_addr;
-	void *irq_cpu_addr;
-	u64 irq_pci_addr;
-	u8 irq_pci_fn;
-	u8 irq_pending;
-};
-
-struct mtk_pcie_port;
-
-struct mtk_pcie_soc {
-	bool need_fix_class_id;
-	bool need_fix_device_id;
-	unsigned int device_id;
-	struct pci_ops *ops;
-	int (*startup)(struct mtk_pcie_port *);
-	int (*setup_irq)(struct mtk_pcie_port *, struct device_node *);
-};
-
-struct mtk_pcie;
-
-struct mtk_pcie_port {
-	void *base;
-	struct list_head list;
-	struct mtk_pcie *pcie;
-	struct reset_control *reset;
-	struct clk *sys_ck;
-	struct clk *ahb_ck;
-	struct clk *axi_ck;
-	struct clk *aux_ck;
-	struct clk *obff_ck;
-	struct clk *pipe_ck;
-	struct phy *phy;
-	u32 slot;
+	void *cpm_base;
+	struct irq_domain *intx_domain;
+	struct irq_domain *cpm_domain;
+	struct pci_config_window *cfg;
+	int intx_irq;
 	int irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	struct mutex lock;
-	long unsigned int msi_irq_in_use[1];
-};
-
-struct mtk_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *free_ck;
-	struct list_head ports;
-	const struct mtk_pcie_soc *soc;
-};
-
-enum {
-	RGR1_SW_INIT_1 = 0,
-	EXT_CFG_INDEX = 1,
-	EXT_CFG_DATA = 2,
-};
-
-enum pcie_type {
-	GENERIC = 0,
-	BCM7278 = 1,
-	BCM2711 = 2,
-};
-
-struct brcm_pcie;
-
-struct pcie_cfg_data {
-	const int *offsets;
-	const enum pcie_type type;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi;
-
-struct brcm_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *clk;
-	struct device_node *np;
-	bool ssc;
-	int gen;
-	u64 msi_target_addr;
-	struct brcm_msi *msi;
-	const int *reg_offsets;
-	enum pcie_type type;
-	struct reset_control *rescal;
-	int num_memc;
-	u64 memc_size[3];
-	u32 hw_rev;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi {
-	struct device *dev;
-	void *base;
-	struct device_node *np;
-	struct irq_domain *msi_domain;
-	struct irq_domain *inner_domain;
-	struct mutex lock;
-	u64 target_addr;
-	int irq;
-	long unsigned int used;
-	bool legacy;
-	int legacy_shift;
-	int nr;
-	void *intr_base;
-};
-
-enum dw_pcie_region_type {
-	DW_PCIE_REGION_UNKNOWN = 0,
-	DW_PCIE_REGION_INBOUND = 1,
-	DW_PCIE_REGION_OUTBOUND = 2,
-};
-
-struct pcie_port;
-
-struct dw_pcie_host_ops {
-	int (*host_init)(struct pcie_port *);
-	void (*set_num_vectors)(struct pcie_port *);
-	int (*msi_host_init)(struct pcie_port *);
-};
-
-struct pcie_port {
-	u64 cfg0_base;
-	void *va_cfg0_base;
-	u32 cfg0_size;
-	resource_size_t io_base;
-	phys_addr_t io_bus_addr;
-	u32 io_size;
-	int irq;
-	const struct dw_pcie_host_ops *ops;
-	int msi_irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *msi_domain;
-	u16 msi_msg;
-	dma_addr_t msi_data;
-	struct irq_chip *msi_irq_chip;
-	u32 num_vectors;
-	u32 irq_mask[8];
-	struct pci_host_bridge *bridge;
 	raw_spinlock_t lock;
-	long unsigned int msi_irq_in_use[4];
-};
-
-enum dw_pcie_as_type {
-	DW_PCIE_AS_UNKNOWN = 0,
-	DW_PCIE_AS_MEM = 1,
-	DW_PCIE_AS_IO = 2,
-};
-
-struct dw_pcie_ep;
-
-struct dw_pcie_ep_ops {
-	void (*ep_init)(struct dw_pcie_ep *);
-	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
-	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
-	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
-};
-
-struct dw_pcie_ep {
-	struct pci_epc *epc;
-	struct list_head func_list;
-	const struct dw_pcie_ep_ops *ops;
-	phys_addr_t phys_base;
-	size_t addr_size;
-	size_t page_size;
-	u8 bar_to_atu[6];
-	phys_addr_t *outbound_addr;
-	long unsigned int *ib_window_map;
-	long unsigned int *ob_window_map;
-	u32 num_ib_windows;
-	u32 num_ob_windows;
-	void *msi_mem;
-	phys_addr_t msi_mem_phys;
-	struct pci_epf_bar *epf_bar[6];
-};
-
-struct dw_pcie;
-
-struct dw_pcie_ops {
-	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
-	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
-	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
-	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
-	int (*link_up)(struct dw_pcie *);
-	int (*start_link)(struct dw_pcie *);
-	void (*stop_link)(struct dw_pcie *);
-};
-
-struct dw_pcie {
-	struct device *dev;
-	void *dbi_base;
-	void *dbi_base2;
-	void *atu_base;
-	u32 num_viewport;
-	u8 iatu_unroll_enabled;
-	struct pcie_port pp;
-	struct dw_pcie_ep ep;
-	const struct dw_pcie_ops *ops;
-	unsigned int version;
-	int num_lanes;
-	int link_gen;
-	u8 n_fts[2];
-};
-
-struct pci_epf_msix_tbl {
-	u64 msg_addr;
-	u32 msg_data;
-	u32 vector_ctrl;
-};
-
-struct dw_pcie_ep_func {
-	struct list_head list;
-	u8 func_no;
-	u8 msi_cap;
-	u8 msix_cap;
-};
-
-enum dw_pcie_device_mode {
-	DW_PCIE_UNKNOWN_TYPE = 0,
-	DW_PCIE_EP_TYPE = 1,
-	DW_PCIE_LEG_EP_TYPE = 2,
-	DW_PCIE_RC_TYPE = 3,
-};
-
-struct dw_plat_pcie {
-	struct dw_pcie *pci;
-	struct regmap *regmap;
-	enum dw_pcie_device_mode mode;
-};
-
-struct dw_plat_pcie_of_data {
-	enum dw_pcie_device_mode mode;
-};
-
-struct qcom_pcie_resources_2_1_0 {
-	struct clk_bulk_data clks[5];
-	struct reset_control *pci_reset;
-	struct reset_control *axi_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *por_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *ext_reset;
-	struct regulator_bulk_data supplies[3];
-};
-
-struct qcom_pcie_resources_1_0_0 {
-	struct clk *iface;
-	struct clk *aux;
-	struct clk *master_bus;
-	struct clk *slave_bus;
-	struct reset_control *core;
-	struct regulator *vdda;
-};
-
-struct qcom_pcie_resources_2_3_2 {
-	struct clk *aux_clk;
-	struct clk *master_clk;
-	struct clk *slave_clk;
-	struct clk *cfg_clk;
-	struct clk *pipe_clk;
-	struct regulator_bulk_data supplies[2];
-};
-
-struct qcom_pcie_resources_2_4_0 {
-	struct clk_bulk_data clks[4];
-	int num_clks;
-	struct reset_control *axi_m_reset;
-	struct reset_control *axi_s_reset;
-	struct reset_control *pipe_reset;
-	struct reset_control *axi_m_vmid_reset;
-	struct reset_control *axi_s_xpu_reset;
-	struct reset_control *parf_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *axi_m_sticky_reset;
-	struct reset_control *pipe_sticky_reset;
-	struct reset_control *pwr_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *phy_ahb_reset;
-};
-
-struct qcom_pcie_resources_2_3_3 {
-	struct clk *iface;
-	struct clk *axi_m_clk;
-	struct clk *axi_s_clk;
-	struct clk *ahb_clk;
-	struct clk *aux_clk;
-	struct reset_control *rst[7];
-};
-
-struct qcom_pcie_resources_2_7_0 {
-	struct clk_bulk_data clks[6];
-	struct regulator_bulk_data supplies[2];
-	struct reset_control *pci_reset;
-	struct clk *pipe_clk;
-};
-
-union qcom_pcie_resources {
-	struct qcom_pcie_resources_1_0_0 v1_0_0;
-	struct qcom_pcie_resources_2_1_0 v2_1_0;
-	struct qcom_pcie_resources_2_3_2 v2_3_2;
-	struct qcom_pcie_resources_2_3_3 v2_3_3;
-	struct qcom_pcie_resources_2_4_0 v2_4_0;
-	struct qcom_pcie_resources_2_7_0 v2_7_0;
-};
-
-struct qcom_pcie;
-
-struct qcom_pcie_ops {
-	int (*get_resources)(struct qcom_pcie *);
-	int (*init)(struct qcom_pcie *);
-	int (*post_init)(struct qcom_pcie *);
-	void (*deinit)(struct qcom_pcie *);
-	void (*post_deinit)(struct qcom_pcie *);
-	void (*ltssm_enable)(struct qcom_pcie *);
-};
-
-struct qcom_pcie {
-	struct dw_pcie *pci;
-	void *parf;
-	void *elbi;
-	union qcom_pcie_resources res;
-	struct phy *phy;
-	struct gpio_desc *reset;
-	const struct qcom_pcie_ops *ops;
+	const struct xilinx_cpm_variant *variant;
 };
 
 struct armada8k_pcie {
@@ -65728,2338 +95356,107 @@
 	unsigned int phy_count;
 };
 
-struct kirin_pcie {
-	struct dw_pcie *pci;
-	void *apb_base;
-	void *phy_base;
-	struct regmap *crgctrl;
-	struct regmap *sysctrl;
-	struct clk *apb_sys_clk;
-	struct clk *apb_phy_clk;
-	struct clk *phy_ref_clk;
-	struct clk *pcie_aclk;
-	struct clk *pcie_aux_clk;
-	int gpio_id_reset;
+enum {
+	CMD_UPHY_PCIE_LANE_MARGIN_CONTROL = 1,
+	CMD_UPHY_PCIE_LANE_MARGIN_STATUS = 2,
+	CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT = 3,
+	CMD_UPHY_PCIE_CONTROLLER_STATE = 4,
+	CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF = 5,
+	CMD_UPHY_MAX = 6,
 };
 
-struct histb_pcie {
-	struct dw_pcie *pci;
-	struct clk *aux_clk;
-	struct clk *pipe_clk;
-	struct clk *sys_clk;
-	struct clk *bus_clk;
-	struct phy *phy;
-	struct reset_control *soft_reset;
-	struct reset_control *sys_reset;
-	struct reset_control *bus_reset;
-	void *ctrl;
-	int reset_gpio;
-	struct regulator *vpcie;
+struct cmd_uphy_margin_control_request {
+	int32_t en;
+	int32_t clr;
+	uint32_t x;
+	uint32_t y;
+	uint32_t nblks;
 };
 
-enum pcie_data_rate {
-	PCIE_GEN1 = 0,
-	PCIE_GEN2 = 1,
-	PCIE_GEN3 = 2,
-	PCIE_GEN4 = 3,
+struct cmd_uphy_margin_status_response {
+	uint32_t status;
 };
 
-struct meson_pcie_clk_res {
-	struct clk *clk;
-	struct clk *port_clk;
-	struct clk *general_clk;
+struct cmd_uphy_ep_controller_pll_init_request {
+	uint8_t ep_controller;
 };
 
-struct meson_pcie_rc_reset {
-	struct reset_control *port;
-	struct reset_control *apb;
+struct cmd_uphy_pcie_controller_state_request {
+	uint8_t pcie_controller;
+	uint8_t enable;
 };
 
-struct meson_pcie {
-	struct dw_pcie pci;
-	void *cfg_base;
-	struct meson_pcie_clk_res clk_res;
-	struct meson_pcie_rc_reset mrst;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
+struct cmd_uphy_ep_controller_pll_off_request {
+	uint8_t ep_controller;
 };
 
-struct al_pcie_acpi {
-	void *dbi_base;
+struct mrq_uphy_request {
+	uint16_t lane;
+	uint16_t cmd;
+	union {
+		struct cmd_uphy_margin_control_request uphy_set_margin_control;
+		struct cmd_uphy_ep_controller_pll_init_request ep_ctrlr_pll_init;
+		struct cmd_uphy_pcie_controller_state_request controller_state;
+		struct cmd_uphy_ep_controller_pll_off_request ep_ctrlr_pll_off;
+	};
 };
 
-struct thunder_pem_pci {
-	u32 ea_entry[3];
-	void *pem_reg_base;
+struct mrq_uphy_response {
+	union {
+		struct cmd_uphy_margin_status_response uphy_get_margin_status;
+	};
 };
 
-struct xgene_pcie_port {
-	struct device_node *node;
-	struct device *dev;
-	struct clk *clk;
-	void *csr_base;
-	void *cfg_base;
-	long unsigned int cfg_addr;
-	bool link_up;
+struct tegra_pcie_dw_of_data {
 	u32 version;
+	enum dw_pcie_device_mode mode;
+	bool has_msix_doorbell_access_fix;
+	bool has_sbr_reset_fix;
+	bool has_l1ss_exit_fix;
+	bool has_ltr_req_fix;
+	u32 cdm_chk_int_en_bit;
+	u32 gen4_preset_vec;
+	u8 n_fts[2];
 };
 
-struct rio_device_id {
-	__u16 did;
-	__u16 vid;
-	__u16 asm_did;
-	__u16 asm_vid;
-};
-
-typedef s32 dma_cookie_t;
-
-enum dma_status {
-	DMA_COMPLETE = 0,
-	DMA_IN_PROGRESS = 1,
-	DMA_PAUSED = 2,
-	DMA_ERROR = 3,
-	DMA_OUT_OF_ORDER = 4,
-};
-
-enum dma_transaction_type {
-	DMA_MEMCPY = 0,
-	DMA_XOR = 1,
-	DMA_PQ = 2,
-	DMA_XOR_VAL = 3,
-	DMA_PQ_VAL = 4,
-	DMA_MEMSET = 5,
-	DMA_MEMSET_SG = 6,
-	DMA_INTERRUPT = 7,
-	DMA_PRIVATE = 8,
-	DMA_ASYNC_TX = 9,
-	DMA_SLAVE = 10,
-	DMA_CYCLIC = 11,
-	DMA_INTERLEAVE = 12,
-	DMA_COMPLETION_NO_ORDER = 13,
-	DMA_REPEAT = 14,
-	DMA_LOAD_EOT = 15,
-	DMA_TX_TYPE_END = 16,
-};
-
-enum dma_transfer_direction {
-	DMA_MEM_TO_MEM = 0,
-	DMA_MEM_TO_DEV = 1,
-	DMA_DEV_TO_MEM = 2,
-	DMA_DEV_TO_DEV = 3,
-	DMA_TRANS_NONE = 4,
-};
-
-struct data_chunk {
-	size_t size;
-	size_t icg;
-	size_t dst_icg;
-	size_t src_icg;
-};
-
-struct dma_interleaved_template {
-	dma_addr_t src_start;
-	dma_addr_t dst_start;
-	enum dma_transfer_direction dir;
-	bool src_inc;
-	bool dst_inc;
-	bool src_sgl;
-	bool dst_sgl;
-	size_t numf;
-	size_t frame_size;
-	struct data_chunk sgl[0];
-};
-
-enum dma_ctrl_flags {
-	DMA_PREP_INTERRUPT = 1,
-	DMA_CTRL_ACK = 2,
-	DMA_PREP_PQ_DISABLE_P = 4,
-	DMA_PREP_PQ_DISABLE_Q = 8,
-	DMA_PREP_CONTINUE = 16,
-	DMA_PREP_FENCE = 32,
-	DMA_CTRL_REUSE = 64,
-	DMA_PREP_CMD = 128,
-	DMA_PREP_REPEAT = 256,
-	DMA_PREP_LOAD_EOT = 512,
-};
-
-enum sum_check_bits {
-	SUM_CHECK_P = 0,
-	SUM_CHECK_Q = 1,
-};
-
-enum sum_check_flags {
-	SUM_CHECK_P_RESULT = 1,
-	SUM_CHECK_Q_RESULT = 2,
-};
-
-typedef struct {
-	long unsigned int bits[1];
-} dma_cap_mask_t;
-
-enum dma_desc_metadata_mode {
-	DESC_METADATA_NONE = 0,
-	DESC_METADATA_CLIENT = 1,
-	DESC_METADATA_ENGINE = 2,
-};
-
-struct dma_chan_percpu {
-	long unsigned int memcpy_count;
-	long unsigned int bytes_transferred;
-};
-
-struct dma_router {
+struct tegra_pcie_dw {
 	struct device *dev;
-	void (*route_free)(struct device *, void *);
-};
-
-struct dma_device;
-
-struct dma_chan_dev;
-
-struct dma_chan {
-	struct dma_device *device;
-	struct device *slave;
-	dma_cookie_t cookie;
-	dma_cookie_t completed_cookie;
-	int chan_id;
-	struct dma_chan_dev *dev;
-	const char *name;
-	char *dbg_client_name;
-	struct list_head device_node;
-	struct dma_chan_percpu *local;
-	int client_count;
-	int table_count;
-	struct dma_router *router;
-	void *route_data;
-	void *private;
-};
-
-typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
-
-struct dma_slave_map;
-
-struct dma_filter {
-	dma_filter_fn fn;
-	int mapcnt;
-	const struct dma_slave_map *map;
-};
-
-enum dmaengine_alignment {
-	DMAENGINE_ALIGN_1_BYTE = 0,
-	DMAENGINE_ALIGN_2_BYTES = 1,
-	DMAENGINE_ALIGN_4_BYTES = 2,
-	DMAENGINE_ALIGN_8_BYTES = 3,
-	DMAENGINE_ALIGN_16_BYTES = 4,
-	DMAENGINE_ALIGN_32_BYTES = 5,
-	DMAENGINE_ALIGN_64_BYTES = 6,
-};
-
-enum dma_residue_granularity {
-	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
-	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
-	DMA_RESIDUE_GRANULARITY_BURST = 2,
-};
-
-struct dma_async_tx_descriptor;
-
-struct dma_slave_caps;
-
-struct dma_slave_config;
-
-struct dma_tx_state;
-
-struct dma_device {
-	struct kref ref;
-	unsigned int chancnt;
-	unsigned int privatecnt;
-	struct list_head channels;
-	struct list_head global_node;
-	struct dma_filter filter;
-	dma_cap_mask_t cap_mask;
-	enum dma_desc_metadata_mode desc_metadata_modes;
-	short unsigned int max_xor;
-	short unsigned int max_pq;
-	enum dmaengine_alignment copy_align;
-	enum dmaengine_alignment xor_align;
-	enum dmaengine_alignment pq_align;
-	enum dmaengine_alignment fill_align;
-	int dev_id;
-	struct device *dev;
-	struct module *owner;
-	struct ida chan_ida;
-	struct mutex chan_mutex;
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool descriptor_reuse;
-	enum dma_residue_granularity residue_granularity;
-	int (*device_alloc_chan_resources)(struct dma_chan *);
-	void (*device_free_chan_resources)(struct dma_chan *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
-	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
-	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
-	int (*device_pause)(struct dma_chan *);
-	int (*device_resume)(struct dma_chan *);
-	int (*device_terminate_all)(struct dma_chan *);
-	void (*device_synchronize)(struct dma_chan *);
-	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
-	void (*device_issue_pending)(struct dma_chan *);
-	void (*device_release)(struct dma_device *);
-	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
-	struct dentry *dbg_dev_root;
-};
-
-struct dma_chan_dev {
-	struct dma_chan *chan;
-	struct device device;
-	int dev_id;
-};
-
-enum dma_slave_buswidth {
-	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
-	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
-	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
-	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
-	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
-	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
-	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
-	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
-	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
-};
-
-struct dma_slave_config {
-	enum dma_transfer_direction direction;
-	phys_addr_t src_addr;
-	phys_addr_t dst_addr;
-	enum dma_slave_buswidth src_addr_width;
-	enum dma_slave_buswidth dst_addr_width;
-	u32 src_maxburst;
-	u32 dst_maxburst;
-	u32 src_port_window_size;
-	u32 dst_port_window_size;
-	bool device_fc;
-	unsigned int slave_id;
-};
-
-struct dma_slave_caps {
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool cmd_pause;
-	bool cmd_resume;
-	bool cmd_terminate;
-	enum dma_residue_granularity residue_granularity;
-	bool descriptor_reuse;
-};
-
-typedef void (*dma_async_tx_callback)(void *);
-
-enum dmaengine_tx_result {
-	DMA_TRANS_NOERROR = 0,
-	DMA_TRANS_READ_FAILED = 1,
-	DMA_TRANS_WRITE_FAILED = 2,
-	DMA_TRANS_ABORTED = 3,
-};
-
-struct dmaengine_result {
-	enum dmaengine_tx_result result;
-	u32 residue;
-};
-
-typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
-
-struct dmaengine_unmap_data {
-	u16 map_cnt;
-	u8 to_cnt;
-	u8 from_cnt;
-	u8 bidi_cnt;
-	struct device *dev;
-	struct kref kref;
-	size_t len;
-	dma_addr_t addr[0];
-};
-
-struct dma_descriptor_metadata_ops {
-	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
-	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
-	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
-};
-
-struct dma_async_tx_descriptor {
-	dma_cookie_t cookie;
-	enum dma_ctrl_flags flags;
-	dma_addr_t phys;
-	struct dma_chan *chan;
-	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
-	int (*desc_free)(struct dma_async_tx_descriptor *);
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-	struct dmaengine_unmap_data *unmap;
-	enum dma_desc_metadata_mode desc_metadata_mode;
-	struct dma_descriptor_metadata_ops *metadata_ops;
-	struct dma_async_tx_descriptor *next;
-	struct dma_async_tx_descriptor *parent;
-	spinlock_t lock;
-};
-
-struct dma_tx_state {
-	dma_cookie_t last;
-	dma_cookie_t used;
-	u32 residue;
-	u32 in_flight_bytes;
-};
-
-struct dma_slave_map {
-	const char *devname;
-	const char *slave;
-	void *param;
-};
-
-struct rio_switch_ops;
-
-struct rio_dev;
-
-struct rio_switch {
-	struct list_head node;
-	u8 *route_table;
-	u32 port_ok;
-	struct rio_switch_ops *ops;
-	spinlock_t lock;
-	struct rio_dev *nextdev[0];
-};
-
-struct rio_mport;
-
-struct rio_switch_ops {
-	struct module *owner;
-	int (*add_entry)(struct rio_mport *, u16, u8, u16, u16, u8);
-	int (*get_entry)(struct rio_mport *, u16, u8, u16, u16, u8 *);
-	int (*clr_table)(struct rio_mport *, u16, u8, u16);
-	int (*set_domain)(struct rio_mport *, u16, u8, u8);
-	int (*get_domain)(struct rio_mport *, u16, u8, u8 *);
-	int (*em_init)(struct rio_dev *);
-	int (*em_handle)(struct rio_dev *, u8);
-};
-
-struct rio_net;
-
-struct rio_driver;
-
-union rio_pw_msg;
-
-struct rio_dev {
-	struct list_head global_list;
-	struct list_head net_list;
-	struct rio_net *net;
-	bool do_enum;
-	u16 did;
-	u16 vid;
-	u32 device_rev;
-	u16 asm_did;
-	u16 asm_vid;
-	u16 asm_rev;
-	u16 efptr;
-	u32 pef;
-	u32 swpinfo;
-	u32 src_ops;
-	u32 dst_ops;
-	u32 comp_tag;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	u32 em_efptr;
-	u64 dma_mask;
-	struct rio_driver *driver;
-	struct device dev;
-	struct resource riores[16];
-	int (*pwcback)(struct rio_dev *, union rio_pw_msg *, int);
-	u16 destid;
-	u8 hopcount;
-	struct rio_dev *prev;
-	atomic_t state;
-	struct rio_switch rswitch[0];
-};
-
-struct rio_msg {
-	struct resource *res;
-	void (*mcback)(struct rio_mport *, void *, int, int);
-};
-
-struct rio_ops;
-
-struct rio_scan;
-
-struct rio_mport {
-	struct list_head dbells;
-	struct list_head pwrites;
-	struct list_head node;
-	struct list_head nnode;
-	struct rio_net *net;
-	struct mutex lock;
-	struct resource iores;
-	struct resource riores[16];
-	struct rio_msg inb_msg[4];
-	struct rio_msg outb_msg[4];
-	int host_deviceid;
-	struct rio_ops *ops;
-	unsigned char id;
-	unsigned char index;
-	unsigned int sys_size;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	unsigned char name[40];
-	struct device dev;
-	void *priv;
-	struct dma_device dma;
-	struct rio_scan *nscan;
-	atomic_t state;
-	unsigned int pwe_refcnt;
-};
-
-enum rio_device_state {
-	RIO_DEVICE_INITIALIZING = 0,
-	RIO_DEVICE_RUNNING = 1,
-	RIO_DEVICE_GONE = 2,
-	RIO_DEVICE_SHUTDOWN = 3,
-};
-
-struct rio_net {
-	struct list_head node;
-	struct list_head devices;
-	struct list_head switches;
-	struct list_head mports;
-	struct rio_mport *hport;
-	unsigned char id;
-	struct device dev;
-	void *enum_data;
-	void (*release)(struct rio_net *);
-};
-
-struct rio_driver {
-	struct list_head node;
-	char *name;
-	const struct rio_device_id *id_table;
-	int (*probe)(struct rio_dev *, const struct rio_device_id *);
-	void (*remove)(struct rio_dev *);
-	void (*shutdown)(struct rio_dev *);
-	int (*suspend)(struct rio_dev *, u32);
-	int (*resume)(struct rio_dev *);
-	int (*enable_wake)(struct rio_dev *, u32, int);
-	struct device_driver driver;
-};
-
-union rio_pw_msg {
-	struct {
-		u32 comptag;
-		u32 errdetect;
-		u32 is_port;
-		u32 ltlerrdet;
-		u32 padding[12];
-	} em;
-	u32 raw[16];
-};
-
-struct rio_dbell {
-	struct list_head node;
-	struct resource *res;
-	void (*dinb)(struct rio_mport *, void *, u16, u16, u16);
-	void *dev_id;
-};
-
-struct rio_mport_attr;
-
-struct rio_ops {
-	int (*lcread)(struct rio_mport *, int, u32, int, u32 *);
-	int (*lcwrite)(struct rio_mport *, int, u32, int, u32);
-	int (*cread)(struct rio_mport *, int, u16, u8, u32, int, u32 *);
-	int (*cwrite)(struct rio_mport *, int, u16, u8, u32, int, u32);
-	int (*dsend)(struct rio_mport *, int, u16, u16);
-	int (*pwenable)(struct rio_mport *, int);
-	int (*open_outb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_outb_mbox)(struct rio_mport *, int);
-	int (*open_inb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_inb_mbox)(struct rio_mport *, int);
-	int (*add_outb_message)(struct rio_mport *, struct rio_dev *, int, void *, size_t);
-	int (*add_inb_buffer)(struct rio_mport *, int, void *);
-	void * (*get_inb_message)(struct rio_mport *, int);
-	int (*map_inb)(struct rio_mport *, dma_addr_t, u64, u64, u32);
-	void (*unmap_inb)(struct rio_mport *, dma_addr_t);
-	int (*query_mport)(struct rio_mport *, struct rio_mport_attr *);
-	int (*map_outb)(struct rio_mport *, u16, u64, u32, u32, dma_addr_t *);
-	void (*unmap_outb)(struct rio_mport *, u16, u64);
-};
-
-struct rio_scan {
-	struct module *owner;
-	int (*enumerate)(struct rio_mport *, u32);
-	int (*discover)(struct rio_mport *, u32);
-};
-
-struct rio_mport_attr {
-	int flags;
-	int link_speed;
-	int link_width;
-	int dma_max_sge;
-	int dma_max_size;
-	int dma_align;
-};
-
-enum rio_write_type {
-	RDW_DEFAULT = 0,
-	RDW_ALL_NWRITE = 1,
-	RDW_ALL_NWRITE_R = 2,
-	RDW_LAST_NWRITE_R = 3,
-};
-
-struct rio_dma_ext {
-	u16 destid;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum rio_write_type wr_type;
-};
-
-struct rio_dma_data {
-	struct scatterlist *sg;
-	unsigned int sg_len;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum rio_write_type wr_type;
-};
-
-struct rio_scan_node {
-	int mport_id;
-	struct list_head node;
-	struct rio_scan *ops;
-};
-
-struct rio_pwrite {
-	struct list_head node;
-	int (*pwcback)(struct rio_mport *, void *, union rio_pw_msg *, int);
-	void *context;
-};
-
-struct rio_disc_work {
-	struct work_struct work;
-	struct rio_mport *mport;
-};
-
-enum rio_link_speed {
-	RIO_LINK_DOWN = 0,
-	RIO_LINK_125 = 1,
-	RIO_LINK_250 = 2,
-	RIO_LINK_312 = 3,
-	RIO_LINK_500 = 4,
-	RIO_LINK_625 = 5,
-};
-
-enum rio_mport_flags {
-	RIO_MPORT_DMA = 1,
-	RIO_MPORT_DMA_SG = 2,
-	RIO_MPORT_IBSG = 4,
-};
-
-struct kfifo {
-	union {
-		struct __kfifo kfifo;
-		unsigned char *type;
-		const unsigned char *const_type;
-		char (*rectype)[0];
-		void *ptr;
-		const void *ptr_const;
-	};
-	unsigned char buf[0];
-};
-
-enum {
-	DBG_NONE = 0,
-	DBG_INIT = 1,
-	DBG_EXIT = 2,
-	DBG_MPORT = 4,
-	DBG_MAINT = 8,
-	DBG_DMA = 16,
-	DBG_DMAV = 32,
-	DBG_IBW = 64,
-	DBG_EVENT = 128,
-	DBG_OBW = 256,
-	DBG_DBELL = 512,
-	DBG_OMSG = 1024,
-	DBG_IMSG = 2048,
-	DBG_ALL = 4294967295,
-};
-
-struct tsi721_dma_desc {
-	__le32 type_id;
-	__le32 bcount;
-	union {
-		__le32 raddr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 raddr_hi;
-		__le32 next_hi;
-	};
-	union {
-		struct {
-			__le32 bufptr_lo;
-			__le32 bufptr_hi;
-			__le32 s_dist;
-			__le32 s_size;
-		} t1;
-		__le32 data[4];
-		u32 reserved[4];
-	};
-};
-
-struct tsi721_imsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	__le32 bufptr_lo;
-	__le32 bufptr_hi;
-	u32 reserved[12];
-};
-
-struct tsi721_omsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	union {
-		__le32 bufptr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 bufptr_hi;
-		__le32 next_hi;
-	};
-};
-
-enum dma_dtype {
-	DTYPE1 = 1,
-	DTYPE2 = 2,
-	DTYPE3 = 3,
-	DTYPE4 = 4,
-	DTYPE5 = 5,
-	DTYPE6 = 6,
-};
-
-enum dma_rtype {
-	NREAD = 0,
-	LAST_NWRITE_R = 1,
-	ALL_NWRITE = 2,
-	ALL_NWRITE_R = 3,
-	MAINT_RD = 4,
-	MAINT_WR = 5,
-};
-
-struct tsi721_tx_desc {
-	struct dma_async_tx_descriptor txd;
-	u16 destid;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum dma_rtype rtype;
-	struct list_head desc_node;
-	struct scatterlist *sg;
-	unsigned int sg_len;
-	enum dma_status status;
-};
-
-struct tsi721_bdma_chan {
-	int id;
-	void *regs;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-	u32 sts_rdptr;
-	u32 wr_count;
-	u32 wr_count_next;
-	struct dma_chan dchan;
-	struct tsi721_tx_desc *tx_desc;
-	spinlock_t lock;
-	struct tsi721_tx_desc *active_tx;
-	struct list_head queue;
-	struct list_head free_list;
-	struct tasklet_struct tasklet;
-	bool active;
-};
-
-struct tsi721_bdma_maint {
-	int ch_id;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-};
-
-struct tsi721_imsg_ring {
-	u32 size;
-	void *buf_base;
-	dma_addr_t buf_phys;
-	void *imfq_base;
-	dma_addr_t imfq_phys;
-	void *imd_base;
-	dma_addr_t imd_phys;
-	void *imq_base[512];
-	u32 rx_slot;
-	void *dev_id;
-	u32 fq_wrptr;
-	u32 desc_rdptr;
-	spinlock_t lock;
-};
-
-struct tsi721_omsg_ring {
-	u32 size;
-	void *omd_base;
-	dma_addr_t omd_phys;
-	void *omq_base[512];
-	dma_addr_t omq_phys[512];
-	void *sts_base;
-	dma_addr_t sts_phys;
-	u32 sts_size;
-	u32 sts_rdptr;
-	u32 tx_slot;
-	void *dev_id;
-	u32 wr_count;
-	spinlock_t lock;
-};
-
-enum tsi721_flags {
-	TSI721_USING_MSI = 1,
-	TSI721_USING_MSIX = 2,
-	TSI721_IMSGID_SET = 4,
-};
-
-enum tsi721_msix_vect {
-	TSI721_VECT_IDB = 0,
-	TSI721_VECT_PWRX = 1,
-	TSI721_VECT_OMB0_DONE = 2,
-	TSI721_VECT_OMB1_DONE = 3,
-	TSI721_VECT_OMB2_DONE = 4,
-	TSI721_VECT_OMB3_DONE = 5,
-	TSI721_VECT_OMB0_INT = 6,
-	TSI721_VECT_OMB1_INT = 7,
-	TSI721_VECT_OMB2_INT = 8,
-	TSI721_VECT_OMB3_INT = 9,
-	TSI721_VECT_IMB0_RCV = 10,
-	TSI721_VECT_IMB1_RCV = 11,
-	TSI721_VECT_IMB2_RCV = 12,
-	TSI721_VECT_IMB3_RCV = 13,
-	TSI721_VECT_IMB0_INT = 14,
-	TSI721_VECT_IMB1_INT = 15,
-	TSI721_VECT_IMB2_INT = 16,
-	TSI721_VECT_IMB3_INT = 17,
-	TSI721_VECT_DMA0_DONE = 18,
-	TSI721_VECT_DMA1_DONE = 19,
-	TSI721_VECT_DMA2_DONE = 20,
-	TSI721_VECT_DMA3_DONE = 21,
-	TSI721_VECT_DMA4_DONE = 22,
-	TSI721_VECT_DMA5_DONE = 23,
-	TSI721_VECT_DMA6_DONE = 24,
-	TSI721_VECT_DMA7_DONE = 25,
-	TSI721_VECT_DMA0_INT = 26,
-	TSI721_VECT_DMA1_INT = 27,
-	TSI721_VECT_DMA2_INT = 28,
-	TSI721_VECT_DMA3_INT = 29,
-	TSI721_VECT_DMA4_INT = 30,
-	TSI721_VECT_DMA5_INT = 31,
-	TSI721_VECT_DMA6_INT = 32,
-	TSI721_VECT_DMA7_INT = 33,
-	TSI721_VECT_MAX = 34,
-};
-
-struct msix_irq {
-	u16 vector;
-	char irq_name[64];
-};
-
-struct tsi721_ib_win_mapping {
-	struct list_head node;
-	dma_addr_t lstart;
-};
-
-struct tsi721_ib_win {
-	u64 rstart;
-	u32 size;
-	dma_addr_t lstart;
-	bool active;
-	bool xlat;
-	struct list_head mappings;
-};
-
-struct tsi721_obw_bar {
-	u64 base;
-	u64 size;
-	u64 free;
-};
-
-struct tsi721_ob_win {
-	u64 base;
-	u32 size;
-	u16 destid;
-	u64 rstart;
-	bool active;
-	struct tsi721_obw_bar *pbar;
-};
-
-struct tsi721_device {
-	struct pci_dev *pdev;
-	struct rio_mport mport;
-	u32 flags;
-	void *regs;
-	struct msix_irq msix[34];
-	void *odb_base;
-	void *idb_base;
-	dma_addr_t idb_dma;
-	struct work_struct idb_work;
-	u32 db_discard_count;
-	struct work_struct pw_work;
-	struct kfifo pw_fifo;
-	spinlock_t pw_fifo_lock;
-	u32 pw_discard_count;
-	struct tsi721_bdma_maint mdma;
-	struct tsi721_bdma_chan bdma[8];
-	int imsg_init[8];
-	struct tsi721_imsg_ring imsg_ring[8];
-	int omsg_init[4];
-	struct tsi721_omsg_ring omsg_ring[4];
-	struct tsi721_ib_win ib_win[8];
-	int ibwin_cnt;
-	struct tsi721_obw_bar p2r_bar[2];
-	struct tsi721_ob_win ob_win[8];
-	int obwin_cnt;
-};
-
-enum hdmi_infoframe_type {
-	HDMI_INFOFRAME_TYPE_VENDOR = 129,
-	HDMI_INFOFRAME_TYPE_AVI = 130,
-	HDMI_INFOFRAME_TYPE_SPD = 131,
-	HDMI_INFOFRAME_TYPE_AUDIO = 132,
-	HDMI_INFOFRAME_TYPE_DRM = 135,
-};
-
-struct hdmi_any_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-};
-
-enum hdmi_colorspace {
-	HDMI_COLORSPACE_RGB = 0,
-	HDMI_COLORSPACE_YUV422 = 1,
-	HDMI_COLORSPACE_YUV444 = 2,
-	HDMI_COLORSPACE_YUV420 = 3,
-	HDMI_COLORSPACE_RESERVED4 = 4,
-	HDMI_COLORSPACE_RESERVED5 = 5,
-	HDMI_COLORSPACE_RESERVED6 = 6,
-	HDMI_COLORSPACE_IDO_DEFINED = 7,
-};
-
-enum hdmi_scan_mode {
-	HDMI_SCAN_MODE_NONE = 0,
-	HDMI_SCAN_MODE_OVERSCAN = 1,
-	HDMI_SCAN_MODE_UNDERSCAN = 2,
-	HDMI_SCAN_MODE_RESERVED = 3,
-};
-
-enum hdmi_colorimetry {
-	HDMI_COLORIMETRY_NONE = 0,
-	HDMI_COLORIMETRY_ITU_601 = 1,
-	HDMI_COLORIMETRY_ITU_709 = 2,
-	HDMI_COLORIMETRY_EXTENDED = 3,
-};
-
-enum hdmi_picture_aspect {
-	HDMI_PICTURE_ASPECT_NONE = 0,
-	HDMI_PICTURE_ASPECT_4_3 = 1,
-	HDMI_PICTURE_ASPECT_16_9 = 2,
-	HDMI_PICTURE_ASPECT_64_27 = 3,
-	HDMI_PICTURE_ASPECT_256_135 = 4,
-	HDMI_PICTURE_ASPECT_RESERVED = 5,
-};
-
-enum hdmi_active_aspect {
-	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
-	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
-	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
-	HDMI_ACTIVE_ASPECT_PICTURE = 8,
-	HDMI_ACTIVE_ASPECT_4_3 = 9,
-	HDMI_ACTIVE_ASPECT_16_9 = 10,
-	HDMI_ACTIVE_ASPECT_14_9 = 11,
-	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
-	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
-	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
-};
-
-enum hdmi_extended_colorimetry {
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
-	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
-	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
-	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
-	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
-	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
-	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
-};
-
-enum hdmi_quantization_range {
-	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
-	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
-	HDMI_QUANTIZATION_RANGE_FULL = 2,
-	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
-};
-
-enum hdmi_nups {
-	HDMI_NUPS_UNKNOWN = 0,
-	HDMI_NUPS_HORIZONTAL = 1,
-	HDMI_NUPS_VERTICAL = 2,
-	HDMI_NUPS_BOTH = 3,
-};
-
-enum hdmi_ycc_quantization_range {
-	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
-	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
-};
-
-enum hdmi_content_type {
-	HDMI_CONTENT_TYPE_GRAPHICS = 0,
-	HDMI_CONTENT_TYPE_PHOTO = 1,
-	HDMI_CONTENT_TYPE_CINEMA = 2,
-	HDMI_CONTENT_TYPE_GAME = 3,
-};
-
-enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
-};
-
-enum hdmi_eotf {
-	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
-	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
-	HDMI_EOTF_SMPTE_ST2084 = 2,
-	HDMI_EOTF_BT_2100_HLG = 3,
-};
-
-struct hdmi_avi_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_colorspace colorspace;
-	enum hdmi_scan_mode scan_mode;
-	enum hdmi_colorimetry colorimetry;
-	enum hdmi_picture_aspect picture_aspect;
-	enum hdmi_active_aspect active_aspect;
-	bool itc;
-	enum hdmi_extended_colorimetry extended_colorimetry;
-	enum hdmi_quantization_range quantization_range;
-	enum hdmi_nups nups;
-	unsigned char video_code;
-	enum hdmi_ycc_quantization_range ycc_quantization_range;
-	enum hdmi_content_type content_type;
-	unsigned char pixel_repeat;
-	short unsigned int top_bar;
-	short unsigned int bottom_bar;
-	short unsigned int left_bar;
-	short unsigned int right_bar;
-};
-
-struct hdmi_drm_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_eotf eotf;
-	enum hdmi_metadata_type metadata_type;
-	struct {
-		u16 x;
-		u16 y;
-	} display_primaries[3];
-	struct {
-		u16 x;
-		u16 y;
-	} white_point;
-	u16 max_display_mastering_luminance;
-	u16 min_display_mastering_luminance;
-	u16 max_cll;
-	u16 max_fall;
-};
-
-enum hdmi_spd_sdi {
-	HDMI_SPD_SDI_UNKNOWN = 0,
-	HDMI_SPD_SDI_DSTB = 1,
-	HDMI_SPD_SDI_DVDP = 2,
-	HDMI_SPD_SDI_DVHS = 3,
-	HDMI_SPD_SDI_HDDVR = 4,
-	HDMI_SPD_SDI_DVC = 5,
-	HDMI_SPD_SDI_DSC = 6,
-	HDMI_SPD_SDI_VCD = 7,
-	HDMI_SPD_SDI_GAME = 8,
-	HDMI_SPD_SDI_PC = 9,
-	HDMI_SPD_SDI_BD = 10,
-	HDMI_SPD_SDI_SACD = 11,
-	HDMI_SPD_SDI_HDDVD = 12,
-	HDMI_SPD_SDI_PMP = 13,
-};
-
-struct hdmi_spd_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	char vendor[8];
-	char product[16];
-	enum hdmi_spd_sdi sdi;
-};
-
-enum hdmi_audio_coding_type {
-	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
-	HDMI_AUDIO_CODING_TYPE_PCM = 1,
-	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
-	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
-	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
-	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
-	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_DTS = 7,
-	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
-	HDMI_AUDIO_CODING_TYPE_DSD = 9,
-	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
-	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
-	HDMI_AUDIO_CODING_TYPE_MLP = 12,
-	HDMI_AUDIO_CODING_TYPE_DST = 13,
-	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
-	HDMI_AUDIO_CODING_TYPE_CXT = 15,
-};
-
-enum hdmi_audio_sample_size {
-	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
-	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
-	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
-};
-
-enum hdmi_audio_sample_frequency {
-	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
-};
-
-enum hdmi_audio_coding_type_ext {
-	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
-};
-
-struct hdmi_audio_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned char channels;
-	enum hdmi_audio_coding_type coding_type;
-	enum hdmi_audio_sample_size sample_size;
-	enum hdmi_audio_sample_frequency sample_frequency;
-	enum hdmi_audio_coding_type_ext coding_type_ext;
-	unsigned char channel_allocation;
-	unsigned char level_shift_value;
-	bool downmix_inhibit;
-};
-
-enum hdmi_3d_structure {
-	HDMI_3D_STRUCTURE_INVALID = 4294967295,
-	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
-	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
-	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
-	HDMI_3D_STRUCTURE_L_DEPTH = 4,
-	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
-	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
-};
-
-struct hdmi_vendor_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned int oui;
-	u8 vic;
-	enum hdmi_3d_structure s3d_struct;
-	unsigned int s3d_ext_data;
-};
-
-union hdmi_vendor_any_infoframe {
-	struct {
-		enum hdmi_infoframe_type type;
-		unsigned char version;
-		unsigned char length;
-		unsigned int oui;
-	} any;
-	struct hdmi_vendor_infoframe hdmi;
-};
-
-union hdmi_infoframe {
-	struct hdmi_any_infoframe any;
-	struct hdmi_avi_infoframe avi;
-	struct hdmi_spd_infoframe spd;
-	union hdmi_vendor_any_infoframe vendor;
-	struct hdmi_audio_infoframe audio;
-	struct hdmi_drm_infoframe drm;
-};
-
-enum con_scroll {
-	SM_UP = 0,
-	SM_DOWN = 1,
-};
-
-enum vc_intensity {
-	VCI_HALF_BRIGHT = 0,
-	VCI_NORMAL = 1,
-	VCI_BOLD = 2,
-	VCI_MASK = 3,
-};
-
-struct vc_data;
-
-struct console_font;
-
-struct consw {
-	struct module *owner;
-	const char * (*con_startup)();
-	void (*con_init)(struct vc_data *, int);
-	void (*con_deinit)(struct vc_data *);
-	void (*con_clear)(struct vc_data *, int, int, int, int);
-	void (*con_putc)(struct vc_data *, int, int, int);
-	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
-	void (*con_cursor)(struct vc_data *, int);
-	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
-	int (*con_switch)(struct vc_data *);
-	int (*con_blank)(struct vc_data *, int, int);
-	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
-	int (*con_font_get)(struct vc_data *, struct console_font *);
-	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
-	int (*con_font_copy)(struct vc_data *, int);
-	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
-	void (*con_set_palette)(struct vc_data *, const unsigned char *);
-	void (*con_scrolldelta)(struct vc_data *, int);
-	int (*con_set_origin)(struct vc_data *);
-	void (*con_save_screen)(struct vc_data *);
-	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
-	void (*con_invert_region)(struct vc_data *, u16 *, int);
-	u16 * (*con_screen_pos)(const struct vc_data *, int);
-	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
-	void (*con_flush_scrollback)(struct vc_data *);
-	int (*con_debug_enter)(struct vc_data *);
-	int (*con_debug_leave)(struct vc_data *);
-};
-
-struct vc_state {
-	unsigned int x;
-	unsigned int y;
-	unsigned char color;
-	unsigned char Gx_charset[2];
-	unsigned int charset: 1;
-	enum vc_intensity intensity;
-	bool italic;
-	bool underline;
-	bool blink;
-	bool reverse;
-};
-
-struct console_font {
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_mode {
-	char mode;
-	char waitv;
-	short int relsig;
-	short int acqsig;
-	short int frsig;
-};
-
-struct uni_pagedir;
-
-struct uni_screen;
-
-struct vc_data {
-	struct tty_port port;
-	struct vc_state state;
-	struct vc_state saved_state;
-	short unsigned int vc_num;
-	unsigned int vc_cols;
-	unsigned int vc_rows;
-	unsigned int vc_size_row;
-	unsigned int vc_scan_lines;
-	long unsigned int vc_origin;
-	long unsigned int vc_scr_end;
-	long unsigned int vc_visible_origin;
-	unsigned int vc_top;
-	unsigned int vc_bottom;
-	const struct consw *vc_sw;
-	short unsigned int *vc_screenbuf;
-	unsigned int vc_screenbuf_size;
-	unsigned char vc_mode;
-	unsigned char vc_attr;
-	unsigned char vc_def_color;
-	unsigned char vc_ulcolor;
-	unsigned char vc_itcolor;
-	unsigned char vc_halfcolor;
-	unsigned int vc_cursor_type;
-	short unsigned int vc_complement_mask;
-	short unsigned int vc_s_complement_mask;
-	long unsigned int vc_pos;
-	short unsigned int vc_hi_font_mask;
-	struct console_font vc_font;
-	short unsigned int vc_video_erase_char;
-	unsigned int vc_state;
-	unsigned int vc_npar;
-	unsigned int vc_par[16];
-	struct vt_mode vt_mode;
-	struct pid *vt_pid;
-	int vt_newvt;
-	wait_queue_head_t paste_wait;
-	unsigned int vc_disp_ctrl: 1;
-	unsigned int vc_toggle_meta: 1;
-	unsigned int vc_decscnm: 1;
-	unsigned int vc_decom: 1;
-	unsigned int vc_decawm: 1;
-	unsigned int vc_deccm: 1;
-	unsigned int vc_decim: 1;
-	unsigned int vc_priv: 3;
-	unsigned int vc_need_wrap: 1;
-	unsigned int vc_can_do_color: 1;
-	unsigned int vc_report_mouse: 2;
-	unsigned char vc_utf: 1;
-	unsigned char vc_utf_count;
-	int vc_utf_char;
-	long unsigned int vc_tab_stop[4];
-	unsigned char vc_palette[48];
-	short unsigned int *vc_translate;
-	unsigned int vc_resize_user;
-	unsigned int vc_bell_pitch;
-	unsigned int vc_bell_duration;
-	short unsigned int vc_cur_blink_ms;
-	struct vc_data **vc_display_fg;
-	struct uni_pagedir *vc_uni_pagedir;
-	struct uni_pagedir **vc_uni_pagedir_loc;
-	struct uni_screen *vc_uni_screen;
-};
-
-struct linux_logo {
-	int type;
-	unsigned int width;
-	unsigned int height;
-	unsigned int clutsize;
-	const unsigned char *clut;
-	const unsigned char *data;
-};
-
-struct fb_fix_screeninfo {
-	char id[16];
-	long unsigned int smem_start;
-	__u32 smem_len;
-	__u32 type;
-	__u32 type_aux;
-	__u32 visual;
-	__u16 xpanstep;
-	__u16 ypanstep;
-	__u16 ywrapstep;
-	__u32 line_length;
-	long unsigned int mmio_start;
-	__u32 mmio_len;
-	__u32 accel;
-	__u16 capabilities;
-	__u16 reserved[2];
-};
-
-struct fb_bitfield {
-	__u32 offset;
-	__u32 length;
-	__u32 msb_right;
-};
-
-struct fb_var_screeninfo {
-	__u32 xres;
-	__u32 yres;
-	__u32 xres_virtual;
-	__u32 yres_virtual;
-	__u32 xoffset;
-	__u32 yoffset;
-	__u32 bits_per_pixel;
-	__u32 grayscale;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	__u32 nonstd;
-	__u32 activate;
-	__u32 height;
-	__u32 width;
-	__u32 accel_flags;
-	__u32 pixclock;
-	__u32 left_margin;
-	__u32 right_margin;
-	__u32 upper_margin;
-	__u32 lower_margin;
-	__u32 hsync_len;
-	__u32 vsync_len;
-	__u32 sync;
-	__u32 vmode;
-	__u32 rotate;
-	__u32 colorspace;
-	__u32 reserved[4];
-};
-
-struct fb_cmap {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-enum {
-	FB_BLANK_UNBLANK = 0,
-	FB_BLANK_NORMAL = 1,
-	FB_BLANK_VSYNC_SUSPEND = 2,
-	FB_BLANK_HSYNC_SUSPEND = 3,
-	FB_BLANK_POWERDOWN = 4,
-};
-
-struct fb_copyarea {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 sx;
-	__u32 sy;
-};
-
-struct fb_fillrect {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 color;
-	__u32 rop;
-};
-
-struct fb_image {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 fg_color;
-	__u32 bg_color;
-	__u8 depth;
-	const char *data;
-	struct fb_cmap cmap;
-};
-
-struct fbcurpos {
-	__u16 x;
-	__u16 y;
-};
-
-struct fb_cursor {
-	__u16 set;
-	__u16 enable;
-	__u16 rop;
-	const char *mask;
-	struct fbcurpos hot;
-	struct fb_image image;
-};
-
-struct fb_chroma {
-	__u32 redx;
-	__u32 greenx;
-	__u32 bluex;
-	__u32 whitex;
-	__u32 redy;
-	__u32 greeny;
-	__u32 bluey;
-	__u32 whitey;
-};
-
-struct fb_videomode;
-
-struct fb_monspecs {
-	struct fb_chroma chroma;
-	struct fb_videomode *modedb;
-	__u8 manufacturer[4];
-	__u8 monitor[14];
-	__u8 serial_no[14];
-	__u8 ascii[14];
-	__u32 modedb_len;
-	__u32 model;
-	__u32 serial;
-	__u32 year;
-	__u32 week;
-	__u32 hfmin;
-	__u32 hfmax;
-	__u32 dclkmin;
-	__u32 dclkmax;
-	__u16 input;
-	__u16 dpms;
-	__u16 signal;
-	__u16 vfmin;
-	__u16 vfmax;
-	__u16 gamma;
-	__u16 gtf: 1;
-	__u16 misc;
-	__u8 version;
-	__u8 revision;
-	__u8 max_x;
-	__u8 max_y;
-};
-
-struct fb_videomode {
-	const char *name;
-	u32 refresh;
-	u32 xres;
-	u32 yres;
-	u32 pixclock;
-	u32 left_margin;
-	u32 right_margin;
-	u32 upper_margin;
-	u32 lower_margin;
-	u32 hsync_len;
-	u32 vsync_len;
-	u32 sync;
-	u32 vmode;
-	u32 flag;
-};
-
-struct fb_info;
-
-struct fb_event {
-	struct fb_info *info;
-	void *data;
-};
-
-struct fb_pixmap {
-	u8 *addr;
-	u32 size;
-	u32 offset;
-	u32 buf_align;
-	u32 scan_align;
-	u32 access_align;
-	u32 flags;
-	u32 blit_x;
-	u32 blit_y;
-	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
-	void (*readio)(struct fb_info *, void *, void *, unsigned int);
-};
-
-struct backlight_device;
-
-struct fb_deferred_io;
-
-struct fb_ops;
-
-struct fb_tile_ops;
-
-struct apertures_struct;
-
-struct fb_info {
-	atomic_t count;
-	int node;
-	int flags;
-	int fbcon_rotate_hint;
-	struct mutex lock;
-	struct mutex mm_lock;
-	struct fb_var_screeninfo var;
-	struct fb_fix_screeninfo fix;
-	struct fb_monspecs monspecs;
-	struct work_struct queue;
-	struct fb_pixmap pixmap;
-	struct fb_pixmap sprite;
-	struct fb_cmap cmap;
-	struct list_head modelist;
-	struct fb_videomode *mode;
-	struct backlight_device *bl_dev;
-	struct mutex bl_curve_mutex;
-	u8 bl_curve[128];
-	struct delayed_work deferred_work;
-	struct fb_deferred_io *fbdefio;
-	const struct fb_ops *fbops;
-	struct device *device;
-	struct device *dev;
-	int class_flag;
-	struct fb_tile_ops *tileops;
-	union {
-		char *screen_base;
-		char *screen_buffer;
-	};
-	long unsigned int screen_size;
-	void *pseudo_palette;
-	u32 state;
-	void *fbcon_par;
-	void *par;
-	struct apertures_struct *apertures;
-	bool skip_vt_switch;
-};
-
-struct fb_blit_caps {
-	u32 x;
-	u32 y;
-	u32 len;
-	u32 flags;
-};
-
-struct fb_deferred_io {
-	long unsigned int delay;
-	struct mutex lock;
-	struct list_head pagelist;
-	void (*first_io)(struct fb_info *);
-	void (*deferred_io)(struct fb_info *, struct list_head *);
-};
-
-struct fb_ops {
-	struct module *owner;
-	int (*fb_open)(struct fb_info *, int);
-	int (*fb_release)(struct fb_info *, int);
-	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
-	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
-	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
-	int (*fb_set_par)(struct fb_info *);
-	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
-	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
-	int (*fb_blank)(int, struct fb_info *);
-	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
-	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
-	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
-	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
-	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
-	int (*fb_sync)(struct fb_info *);
-	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
-	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
-	void (*fb_destroy)(struct fb_info *);
-	int (*fb_debug_enter)(struct fb_info *);
-	int (*fb_debug_leave)(struct fb_info *);
-};
-
-struct fb_tilemap {
-	__u32 width;
-	__u32 height;
-	__u32 depth;
-	__u32 length;
-	const __u8 *data;
-};
-
-struct fb_tilerect {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 index;
-	__u32 fg;
-	__u32 bg;
-	__u32 rop;
-};
-
-struct fb_tilearea {
-	__u32 sx;
-	__u32 sy;
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-};
-
-struct fb_tileblit {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 fg;
-	__u32 bg;
-	__u32 length;
-	__u32 *indices;
-};
-
-struct fb_tilecursor {
-	__u32 sx;
-	__u32 sy;
-	__u32 mode;
-	__u32 shape;
-	__u32 fg;
-	__u32 bg;
-};
-
-struct fb_tile_ops {
-	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
-	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
-	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
-	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
-	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
-	int (*fb_get_tilemax)(struct fb_info *);
-};
-
-struct aperture {
-	resource_size_t base;
-	resource_size_t size;
-};
-
-struct apertures_struct {
-	unsigned int count;
-	struct aperture ranges[0];
-};
-
-enum backlight_type {
-	BACKLIGHT_RAW = 1,
-	BACKLIGHT_PLATFORM = 2,
-	BACKLIGHT_FIRMWARE = 3,
-	BACKLIGHT_TYPE_MAX = 4,
-};
-
-enum backlight_scale {
-	BACKLIGHT_SCALE_UNKNOWN = 0,
-	BACKLIGHT_SCALE_LINEAR = 1,
-	BACKLIGHT_SCALE_NON_LINEAR = 2,
-};
-
-struct backlight_properties {
-	int brightness;
-	int max_brightness;
-	int power;
-	int fb_blank;
-	enum backlight_type type;
-	unsigned int state;
-	enum backlight_scale scale;
-};
-
-struct backlight_ops;
-
-struct backlight_device {
-	struct backlight_properties props;
-	struct mutex update_lock;
-	struct mutex ops_lock;
-	const struct backlight_ops *ops;
-	struct notifier_block fb_notif;
-	struct list_head entry;
-	struct device dev;
-	bool fb_bl_on[32];
-	int use_count;
-};
-
-enum backlight_update_reason {
-	BACKLIGHT_UPDATE_HOTKEY = 0,
-	BACKLIGHT_UPDATE_SYSFS = 1,
-};
-
-enum backlight_notification {
-	BACKLIGHT_REGISTERED = 0,
-	BACKLIGHT_UNREGISTERED = 1,
-};
-
-struct backlight_ops {
-	unsigned int options;
-	int (*update_status)(struct backlight_device *);
-	int (*get_brightness)(struct backlight_device *);
-	int (*check_fb)(struct backlight_device *, struct fb_info *);
-};
-
-struct fb_cmap_user {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-struct fb_modelist {
-	struct list_head list;
-	struct fb_videomode mode;
-};
-
-struct logo_data {
-	int depth;
-	int needs_directpalette;
-	int needs_truepalette;
-	int needs_cmapreset;
-	const struct linux_logo *logo;
-};
-
-struct fb_fix_screeninfo32 {
-	char id[16];
-	compat_caddr_t smem_start;
-	u32 smem_len;
-	u32 type;
-	u32 type_aux;
-	u32 visual;
-	u16 xpanstep;
-	u16 ypanstep;
-	u16 ywrapstep;
-	u32 line_length;
-	compat_caddr_t mmio_start;
-	u32 mmio_len;
-	u32 accel;
-	u16 reserved[3];
-};
-
-struct fb_cmap32 {
-	u32 start;
-	u32 len;
-	compat_caddr_t red;
-	compat_caddr_t green;
-	compat_caddr_t blue;
-	compat_caddr_t transp;
-};
-
-struct dmt_videomode {
-	u32 dmt_id;
-	u32 std_2byte_code;
-	u32 cvt_3byte_code;
-	const struct fb_videomode *mode;
-};
-
-enum display_flags {
-	DISPLAY_FLAGS_HSYNC_LOW = 1,
-	DISPLAY_FLAGS_HSYNC_HIGH = 2,
-	DISPLAY_FLAGS_VSYNC_LOW = 4,
-	DISPLAY_FLAGS_VSYNC_HIGH = 8,
-	DISPLAY_FLAGS_DE_LOW = 16,
-	DISPLAY_FLAGS_DE_HIGH = 32,
-	DISPLAY_FLAGS_PIXDATA_POSEDGE = 64,
-	DISPLAY_FLAGS_PIXDATA_NEGEDGE = 128,
-	DISPLAY_FLAGS_INTERLACED = 256,
-	DISPLAY_FLAGS_DOUBLESCAN = 512,
-	DISPLAY_FLAGS_DOUBLECLK = 1024,
-	DISPLAY_FLAGS_SYNC_POSEDGE = 2048,
-	DISPLAY_FLAGS_SYNC_NEGEDGE = 4096,
-};
-
-struct videomode {
-	long unsigned int pixelclock;
-	u32 hactive;
-	u32 hfront_porch;
-	u32 hback_porch;
-	u32 hsync_len;
-	u32 vactive;
-	u32 vfront_porch;
-	u32 vback_porch;
-	u32 vsync_len;
-	enum display_flags flags;
-};
-
-struct broken_edid {
-	u8 manufacturer[4];
-	u32 model;
-	u32 fix;
-};
-
-struct __fb_timings {
-	u32 dclk;
-	u32 hfreq;
-	u32 vfreq;
-	u32 hactive;
-	u32 vactive;
-	u32 hblank;
-	u32 vblank;
-	u32 htotal;
-	u32 vtotal;
-};
-
-typedef unsigned int u_int;
-
-struct fb_cvt_data {
-	u32 xres;
-	u32 yres;
-	u32 refresh;
-	u32 f_refresh;
-	u32 pixclock;
-	u32 hperiod;
-	u32 hblank;
-	u32 hfreq;
-	u32 htotal;
-	u32 vtotal;
-	u32 vsync;
-	u32 hsync;
-	u32 h_front_porch;
-	u32 h_back_porch;
-	u32 v_front_porch;
-	u32 v_back_porch;
-	u32 h_margin;
-	u32 v_margin;
-	u32 interlace;
-	u32 aspect_ratio;
-	u32 active_pixels;
-	u32 flags;
-	u32 status;
-};
-
-typedef unsigned char u_char;
-
-typedef short unsigned int u_short;
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
-};
-
-struct vc {
-	struct vc_data *d;
-	struct work_struct SAK_work;
-};
-
-struct fbcon_display {
-	const u_char *fontdata;
-	int userfont;
-	u_short scrollmode;
-	u_short inverse;
-	short int yscroll;
-	int vrows;
-	int cursor_shape;
-	int con_rotate;
-	u32 xres_virtual;
-	u32 yres_virtual;
-	u32 height;
-	u32 width;
-	u32 bits_per_pixel;
-	u32 grayscale;
-	u32 nonstd;
-	u32 accel_flags;
-	u32 rotate;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	const struct fb_videomode *mode;
-};
-
-struct fbcon_ops {
-	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
-	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
-	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
-	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
-	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
-	int (*update_start)(struct fb_info *);
-	int (*rotate_font)(struct fb_info *, struct vc_data *);
-	struct fb_var_screeninfo var;
-	struct timer_list cursor_timer;
-	struct fb_cursor cursor_state;
-	struct fbcon_display *p;
-	struct fb_info *info;
-	int currcon;
-	int cur_blink_jiffies;
-	int cursor_flash;
-	int cursor_reset;
-	int blank_state;
-	int graphics;
-	int save_graphics;
-	int flags;
-	int rotate;
-	int cur_rotate;
-	char *cursor_data;
-	u8 *fontbuffer;
-	u8 *fontdata;
-	u8 *cursor_src;
-	u32 cursor_size;
-	u32 fd_size;
-};
-
-enum {
-	FBCON_LOGO_CANSHOW = 4294967295,
-	FBCON_LOGO_DRAW = 4294967294,
-	FBCON_LOGO_DONTSHOW = 4294967293,
-};
-
-enum {
-	CLCD_CAP_RGB444 = 1,
-	CLCD_CAP_RGB5551 = 2,
-	CLCD_CAP_RGB565 = 4,
-	CLCD_CAP_RGB888 = 8,
-	CLCD_CAP_BGR444 = 16,
-	CLCD_CAP_BGR5551 = 32,
-	CLCD_CAP_BGR565 = 64,
-	CLCD_CAP_BGR888 = 128,
-	CLCD_CAP_444 = 17,
-	CLCD_CAP_5551 = 34,
-	CLCD_CAP_565 = 68,
-	CLCD_CAP_888 = 136,
-	CLCD_CAP_RGB = 15,
-	CLCD_CAP_BGR = 240,
-	CLCD_CAP_ALL = 255,
-};
-
-struct clcd_panel {
-	struct fb_videomode mode;
-	short int width;
-	short int height;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	u32 caps;
-	unsigned int bpp: 8;
-	unsigned int fixedtimings: 1;
-	unsigned int grayscale: 1;
-	unsigned int connector;
-	struct backlight_device *backlight;
-	bool bgr_connection;
-};
-
-struct clcd_regs {
-	u32 tim0;
-	u32 tim1;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	long unsigned int pixclock;
-};
-
-struct clcd_fb;
-
-struct clcd_board {
-	const char *name;
-	u32 caps;
-	int (*check)(struct clcd_fb *, struct fb_var_screeninfo *);
-	void (*decode)(struct clcd_fb *, struct clcd_regs *);
-	void (*disable)(struct clcd_fb *);
-	void (*enable)(struct clcd_fb *);
-	int (*setup)(struct clcd_fb *);
-	int (*mmap)(struct clcd_fb *, struct vm_area_struct *);
-	void (*remove)(struct clcd_fb *);
-};
-
-struct clcd_fb {
-	struct fb_info fb;
-	struct amba_device *dev;
-	struct clk *clk;
-	struct clcd_panel *panel;
-	struct clcd_board *board;
-	void *board_data;
-	void *regs;
-	u16 off_ienb;
-	u16 off_cntl;
-	u32 clcd_cntl;
-	u32 cmap[16];
-	bool clk_enabled;
-};
-
-struct timing_entry {
-	u32 min;
-	u32 typ;
-	u32 max;
-};
-
-struct display_timing {
-	struct timing_entry pixelclock;
-	struct timing_entry hactive;
-	struct timing_entry hfront_porch;
-	struct timing_entry hback_porch;
-	struct timing_entry hsync_len;
-	struct timing_entry vactive;
-	struct timing_entry vfront_porch;
-	struct timing_entry vback_porch;
-	struct timing_entry vsync_len;
-	enum display_flags flags;
-};
-
-struct xenfb_update {
-	uint8_t type;
-	int32_t x;
-	int32_t y;
-	int32_t width;
-	int32_t height;
-};
-
-struct xenfb_resize {
-	uint8_t type;
-	int32_t width;
-	int32_t height;
-	int32_t stride;
-	int32_t depth;
-	int32_t offset;
-};
-
-union xenfb_out_event {
-	uint8_t type;
-	struct xenfb_update update;
-	struct xenfb_resize resize;
-	char pad[40];
-};
-
-struct xenfb_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-	int32_t width;
-	int32_t height;
-	uint32_t line_length;
-	uint32_t mem_length;
-	uint8_t depth;
-	long unsigned int pd[256];
-};
-
-enum xenbus_state {
-	XenbusStateUnknown = 0,
-	XenbusStateInitialising = 1,
-	XenbusStateInitWait = 2,
-	XenbusStateInitialised = 3,
-	XenbusStateConnected = 4,
-	XenbusStateClosing = 5,
-	XenbusStateClosed = 6,
-	XenbusStateReconfiguring = 7,
-	XenbusStateReconfigured = 8,
-};
-
-struct xenbus_watch {
-	struct list_head list;
-	const char *node;
-	unsigned int nr_pending;
-	bool (*will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*callback)(struct xenbus_watch *, const char *, const char *);
-};
-
-struct xenbus_device {
-	const char *devicetype;
-	const char *nodename;
-	const char *otherend;
-	int otherend_id;
-	struct xenbus_watch otherend_watch;
-	struct device dev;
-	enum xenbus_state state;
-	struct completion down;
-	struct work_struct work;
-	struct semaphore reclaim_sem;
-};
-
-struct xenbus_device_id {
-	char devicetype[32];
-};
-
-struct xenbus_driver {
-	const char *name;
-	const struct xenbus_device_id *ids;
-	bool allow_rebind;
-	int (*probe)(struct xenbus_device *, const struct xenbus_device_id *);
-	void (*otherend_changed)(struct xenbus_device *, enum xenbus_state);
-	int (*remove)(struct xenbus_device *);
-	int (*suspend)(struct xenbus_device *);
-	int (*resume)(struct xenbus_device *);
-	int (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);
-	struct device_driver driver;
-	int (*read_otherend_details)(struct xenbus_device *);
-	int (*is_ready)(struct xenbus_device *);
-	void (*reclaim_memory)(struct xenbus_device *);
-};
-
-struct xenbus_transaction {
-	u32 id;
-};
-
-struct xenfb_info {
-	unsigned char *fb;
-	struct fb_info *fb_info;
-	int x1;
-	int y1;
-	int x2;
-	int y2;
-	spinlock_t dirty_lock;
-	int nr_pages;
-	int irq;
-	struct xenfb_page *page;
-	long unsigned int *gfns;
-	int update_wanted;
-	int feature_resize;
-	struct xenfb_resize resize;
-	int resize_dpy;
-	spinlock_t resize_lock;
-	struct xenbus_device *xbdev;
-};
-
-enum {
-	KPARAM_MEM = 0,
-	KPARAM_WIDTH = 1,
-	KPARAM_HEIGHT = 2,
-	KPARAM_CNT = 3,
-};
-
-struct acpi_table_bgrt {
-	struct acpi_table_header header;
-	u16 version;
-	u8 status;
-	u8 image_type;
-	u64 image_address;
-	u32 image_offset_x;
-	u32 image_offset_y;
-};
-
-enum drm_panel_orientation {
-	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,
-	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
-	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
-	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
-	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
-};
-
-struct bmp_file_header {
-	u16 id;
-	u32 file_size;
-	u32 reserved;
-	u32 bitmap_offset;
-} __attribute__((packed));
-
-struct bmp_dib_header {
-	u32 dib_header_size;
-	s32 width;
-	s32 height;
-	u16 planes;
-	u16 bpp;
-	u32 compression;
-	u32 bitmap_size;
-	u32 horz_resolution;
-	u32 vert_resolution;
-	u32 colors_used;
-	u32 colors_important;
-};
-
-struct simplefb_format {
-	const char *name;
-	u32 bits_per_pixel;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	u32 fourcc;
-};
-
-struct simplefb_platform_data {
-	u32 width;
-	u32 height;
-	u32 stride;
-	const char *format;
-};
-
-struct simplefb_params {
-	u32 width;
-	u32 height;
-	u32 stride;
-	struct simplefb_format *format;
-};
-
-struct simplefb_par {
-	u32 palette[16];
-	bool clks_enabled;
-	unsigned int clk_count;
-	struct clk **clks;
-	bool regulators_enabled;
-	u32 regulator_count;
-	struct regulator **regulators;
-};
-
-struct display_timings {
-	unsigned int num_timings;
-	unsigned int native_mode;
-	struct display_timing **timings;
-};
-
-enum ipmi_addr_src {
-	SI_INVALID = 0,
-	SI_HOTMOD = 1,
-	SI_HARDCODED = 2,
-	SI_SPMI = 3,
-	SI_ACPI = 4,
-	SI_SMBIOS = 5,
-	SI_PCI = 6,
-	SI_DEVICETREE = 7,
-	SI_PLATFORM = 8,
-	SI_LAST = 9,
-};
-
-struct dmi_header {
-	u8 type;
-	u8 length;
-	u16 handle;
-};
-
-enum si_type {
-	SI_TYPE_INVALID = 0,
-	SI_KCS = 1,
-	SI_SMIC = 2,
-	SI_BT = 3,
-};
-
-enum ipmi_addr_space {
-	IPMI_IO_ADDR_SPACE = 0,
-	IPMI_MEM_ADDR_SPACE = 1,
-};
-
-enum ipmi_plat_interface_type {
-	IPMI_PLAT_IF_SI = 0,
-	IPMI_PLAT_IF_SSIF = 1,
-};
-
-struct ipmi_plat_data {
-	enum ipmi_plat_interface_type iftype;
-	unsigned int type;
-	unsigned int space;
-	long unsigned int addr;
-	unsigned int regspacing;
-	unsigned int regsize;
-	unsigned int regshift;
-	unsigned int irq;
-	unsigned int slave_addr;
-	enum ipmi_addr_src addr_source;
-};
-
-struct ipmi_dmi_info {
-	enum si_type si_type;
-	unsigned int space;
-	long unsigned int addr;
-	u8 slave_addr;
-	struct ipmi_dmi_info *next;
-};
-
-typedef u16 acpi_owner_id;
-
-union acpi_name_union {
-	u32 integer;
-	char ascii[4];
-};
-
-struct acpi_table_desc {
-	acpi_physical_address address;
-	struct acpi_table_header *pointer;
-	u32 length;
-	union acpi_name_union signature;
-	acpi_owner_id owner_id;
-	u8 flags;
-	u16 validation_count;
+	struct resource *appl_res;
+	struct resource *dbi_res;
+	struct resource *atu_dma_res;
+	void *appl_base;
+	struct clk *core_clk;
+	struct reset_control *core_apb_rst;
+	struct reset_control *core_rst;
+	struct dw_pcie pci;
+	struct tegra_bpmp *bpmp;
+	struct tegra_pcie_dw_of_data *of_data;
+	bool supports_clkreq;
+	bool enable_cdm_check;
+	bool enable_srns;
+	bool link_state;
+	bool update_fc_fixup;
+	bool enable_ext_refclk;
+	u8 init_link_width;
+	u32 msi_ctrl_int;
+	u32 num_lanes;
+	u32 cid;
+	u32 cfg_link_cap_l1sub;
+	u32 ras_des_cap;
+	u32 pcie_cap_base;
+	u32 aspm_cmrt;
+	u32 aspm_pwr_on_t;
+	u32 aspm_l0s_enter_lat;
+	struct regulator *pex_ctl_supply;
+	struct regulator *slot_ctl_3v3;
+	struct regulator *slot_ctl_12v;
+	unsigned int phy_count;
+	struct phy **phys;
+	struct dentry *debugfs;
+	struct gpio_desc *pex_rst_gpiod;
+	struct gpio_desc *pex_refclk_sel_gpiod;
+	unsigned int pex_rst_irq;
+	int ep_state;
 };
 
 struct acpi_madt_local_apic {
@@ -68150,15 +95547,17 @@
 	u8 reserved[3];
 };
 
-struct acpi_subtable_proc {
-	int id;
-	acpi_tbl_entry_handler handler;
-	int count;
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
 };
 
 enum acpi_subtable_type {
 	ACPI_SUBTABLE_COMMON = 0,
 	ACPI_SUBTABLE_HMAT = 1,
+	ACPI_SUBTABLE_PRMT = 2,
+	ACPI_SUBTABLE_CEDT = 3,
 };
 
 struct acpi_subtable_entry {
@@ -68166,969 +95565,6 @@
 	enum acpi_subtable_type type;
 };
 
-typedef char *acpi_string;
-
-struct acpi_osi_entry {
-	char string[64];
-	bool enable;
-};
-
-struct acpi_osi_config {
-	u8 default_disabling;
-	unsigned int linux_enable: 1;
-	unsigned int linux_dmi: 1;
-	unsigned int linux_cmdline: 1;
-	unsigned int darwin_enable: 1;
-	unsigned int darwin_dmi: 1;
-	unsigned int darwin_cmdline: 1;
-};
-
-struct acpi_predefined_names {
-	const char *name;
-	u8 type;
-	char *val;
-};
-
-typedef u32 (*acpi_osd_handler)(void *);
-
-typedef void (*acpi_osd_exec_callback)(void *);
-
-typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_object_handler)(acpi_handle, void *);
-
-typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
-
-typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
-
-struct acpi_pci_id {
-	u16 segment;
-	u16 bus;
-	u16 device;
-	u16 function;
-};
-
-struct acpi_mem_mapping {
-	acpi_physical_address physical_address;
-	u8 *logical_address;
-	acpi_size length;
-	struct acpi_mem_mapping *next_mm;
-};
-
-struct acpi_mem_space_context {
-	u32 length;
-	acpi_physical_address address;
-	struct acpi_mem_mapping *cur_mm;
-	struct acpi_mem_mapping *first_mm;
-};
-
-typedef enum {
-	OSL_GLOBAL_LOCK_HANDLER = 0,
-	OSL_NOTIFY_HANDLER = 1,
-	OSL_GPE_HANDLER = 2,
-	OSL_DEBUGGER_MAIN_THREAD = 3,
-	OSL_DEBUGGER_EXEC_THREAD = 4,
-	OSL_EC_POLL_HANDLER = 5,
-	OSL_EC_BURST_HANDLER = 6,
-} acpi_execute_type;
-
-union acpi_operand_object;
-
-struct acpi_namespace_node {
-	union acpi_operand_object *object;
-	u8 descriptor_type;
-	u8 type;
-	u16 flags;
-	union acpi_name_union name;
-	struct acpi_namespace_node *parent;
-	struct acpi_namespace_node *child;
-	struct acpi_namespace_node *peer;
-	acpi_owner_id owner_id;
-};
-
-struct acpi_object_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-};
-
-struct acpi_object_integer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 fill[3];
-	u64 value;
-};
-
-struct acpi_object_string {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	char *pointer;
-	u32 length;
-};
-
-struct acpi_object_buffer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 *pointer;
-	u32 length;
-	u32 aml_length;
-	u8 *aml_start;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_object_package {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **elements;
-	u8 *aml_start;
-	u32 aml_length;
-	u32 count;
-};
-
-struct acpi_object_event {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	void *os_semaphore;
-};
-
-struct acpi_walk_state;
-
-typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
-
-struct acpi_object_method {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 info_flags;
-	u8 param_count;
-	u8 sync_level;
-	union acpi_operand_object *mutex;
-	union acpi_operand_object *node;
-	u8 *aml_start;
-	union {
-		acpi_internal_method implementation;
-		union acpi_operand_object *handler;
-	} dispatch;
-	u32 aml_length;
-	acpi_owner_id owner_id;
-	u8 thread_count;
-};
-
-struct acpi_thread_state;
-
-struct acpi_object_mutex {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 sync_level;
-	u16 acquisition_depth;
-	void *os_mutex;
-	u64 thread_id;
-	struct acpi_thread_state *owner_thread;
-	union acpi_operand_object *prev;
-	union acpi_operand_object *next;
-	struct acpi_namespace_node *node;
-	u8 original_sync_level;
-};
-
-struct acpi_object_region {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler;
-	union acpi_operand_object *next;
-	acpi_physical_address address;
-	u32 length;
-};
-
-struct acpi_object_notify_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_gpe_block_info;
-
-struct acpi_object_device {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	struct acpi_gpe_block_info *gpe_block;
-};
-
-struct acpi_object_power_resource {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	u32 system_level;
-	u32 resource_order;
-};
-
-struct acpi_object_processor {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 proc_id;
-	u8 length;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	acpi_io_address address;
-};
-
-struct acpi_object_thermal_zone {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_object_field_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-};
-
-struct acpi_object_region_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	u16 resource_length;
-	union acpi_operand_object *region_obj;
-	u8 *resource_buffer;
-	u16 pin_number_index;
-	u8 *internal_pcc_buffer;
-};
-
-struct acpi_object_buffer_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	u8 is_create_field;
-	union acpi_operand_object *buffer_obj;
-};
-
-struct acpi_object_bank_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-	union acpi_operand_object *bank_obj;
-};
-
-struct acpi_object_index_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *index_obj;
-	union acpi_operand_object *data_obj;
-};
-
-struct acpi_object_notify_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	u32 handler_type;
-	acpi_notify_handler handler;
-	void *context;
-	union acpi_operand_object *next[2];
-};
-
-struct acpi_object_addr_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	u8 handler_flags;
-	acpi_adr_space_handler handler;
-	struct acpi_namespace_node *node;
-	void *context;
-	acpi_adr_space_setup setup;
-	union acpi_operand_object *region_list;
-	union acpi_operand_object *next;
-};
-
-struct acpi_object_reference {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 class;
-	u8 target_type;
-	u8 resolved;
-	void *object;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **where;
-	u8 *index_pointer;
-	u8 *aml;
-	u32 value;
-};
-
-struct acpi_object_extra {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *method_REG;
-	struct acpi_namespace_node *scope_node;
-	void *region_context;
-	u8 *aml_start;
-	u32 aml_length;
-};
-
-struct acpi_object_data {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	acpi_object_handler handler;
-	void *pointer;
-};
-
-struct acpi_object_cache_list {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *next;
-};
-
-union acpi_operand_object {
-	struct acpi_object_common common;
-	struct acpi_object_integer integer;
-	struct acpi_object_string string;
-	struct acpi_object_buffer buffer;
-	struct acpi_object_package package;
-	struct acpi_object_event event;
-	struct acpi_object_method method;
-	struct acpi_object_mutex mutex;
-	struct acpi_object_region region;
-	struct acpi_object_notify_common common_notify;
-	struct acpi_object_device device;
-	struct acpi_object_power_resource power_resource;
-	struct acpi_object_processor processor;
-	struct acpi_object_thermal_zone thermal_zone;
-	struct acpi_object_field_common common_field;
-	struct acpi_object_region_field field;
-	struct acpi_object_buffer_field buffer_field;
-	struct acpi_object_bank_field bank_field;
-	struct acpi_object_index_field index_field;
-	struct acpi_object_notify_handler notify;
-	struct acpi_object_addr_handler address_space;
-	struct acpi_object_reference reference;
-	struct acpi_object_extra extra;
-	struct acpi_object_data data;
-	struct acpi_object_cache_list cache;
-	struct acpi_namespace_node node;
-};
-
-union acpi_parse_object;
-
-union acpi_generic_state;
-
-struct acpi_parse_state {
-	u8 *aml_start;
-	u8 *aml;
-	u8 *aml_end;
-	u8 *pkg_start;
-	u8 *pkg_end;
-	union acpi_parse_object *start_op;
-	struct acpi_namespace_node *start_node;
-	union acpi_generic_state *scope;
-	union acpi_parse_object *start_scope;
-	u32 aml_size;
-};
-
-typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
-
-typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
-
-struct acpi_opcode_info;
-
-struct acpi_walk_state {
-	struct acpi_walk_state *next;
-	u8 descriptor_type;
-	u8 walk_type;
-	u16 opcode;
-	u8 next_op_info;
-	u8 num_operands;
-	u8 operand_index;
-	acpi_owner_id owner_id;
-	u8 last_predicate;
-	u8 current_result;
-	u8 return_used;
-	u8 scope_depth;
-	u8 pass_number;
-	u8 namespace_override;
-	u8 result_size;
-	u8 result_count;
-	u8 *aml;
-	u32 arg_types;
-	u32 method_breakpoint;
-	u32 user_breakpoint;
-	u32 parse_flags;
-	struct acpi_parse_state parser_state;
-	u32 prev_arg_types;
-	u32 arg_count;
-	u16 method_nesting_depth;
-	u8 method_is_nested;
-	struct acpi_namespace_node arguments[7];
-	struct acpi_namespace_node local_variables[8];
-	union acpi_operand_object *operands[9];
-	union acpi_operand_object **params;
-	u8 *aml_last_while;
-	union acpi_operand_object **caller_return_desc;
-	union acpi_generic_state *control_state;
-	struct acpi_namespace_node *deferred_node;
-	union acpi_operand_object *implicit_return_obj;
-	struct acpi_namespace_node *method_call_node;
-	union acpi_parse_object *method_call_op;
-	union acpi_operand_object *method_desc;
-	struct acpi_namespace_node *method_node;
-	char *method_pathname;
-	union acpi_parse_object *op;
-	const struct acpi_opcode_info *op_info;
-	union acpi_parse_object *origin;
-	union acpi_operand_object *result_obj;
-	union acpi_generic_state *results;
-	union acpi_operand_object *return_desc;
-	union acpi_generic_state *scope_info;
-	union acpi_parse_object *prev_op;
-	union acpi_parse_object *next_op;
-	struct acpi_thread_state *thread;
-	acpi_parse_downwards descending_callback;
-	acpi_parse_upwards ascending_callback;
-};
-
-struct acpi_gpe_handler_info {
-	acpi_gpe_handler address;
-	void *context;
-	struct acpi_namespace_node *method_node;
-	u8 original_flags;
-	u8 originally_enabled;
-};
-
-struct acpi_gpe_notify_info {
-	struct acpi_namespace_node *device_node;
-	struct acpi_gpe_notify_info *next;
-};
-
-union acpi_gpe_dispatch_info {
-	struct acpi_namespace_node *method_node;
-	struct acpi_gpe_handler_info *handler;
-	struct acpi_gpe_notify_info *notify_list;
-};
-
-struct acpi_gpe_register_info;
-
-struct acpi_gpe_event_info {
-	union acpi_gpe_dispatch_info dispatch;
-	struct acpi_gpe_register_info *register_info;
-	u8 flags;
-	u8 gpe_number;
-	u8 runtime_count;
-	u8 disable_for_dispatch;
-};
-
-struct acpi_gpe_address {
-	u8 space_id;
-	u64 address;
-};
-
-struct acpi_gpe_register_info {
-	struct acpi_gpe_address status_address;
-	struct acpi_gpe_address enable_address;
-	u16 base_gpe_number;
-	u8 enable_for_wake;
-	u8 enable_for_run;
-	u8 mask_for_run;
-	u8 enable_mask;
-};
-
-struct acpi_gpe_xrupt_info;
-
-struct acpi_gpe_block_info {
-	struct acpi_namespace_node *node;
-	struct acpi_gpe_block_info *previous;
-	struct acpi_gpe_block_info *next;
-	struct acpi_gpe_xrupt_info *xrupt_block;
-	struct acpi_gpe_register_info *register_info;
-	struct acpi_gpe_event_info *event_info;
-	u64 address;
-	u32 register_count;
-	u16 gpe_count;
-	u16 block_base_number;
-	u8 space_id;
-	u8 initialized;
-};
-
-struct acpi_gpe_xrupt_info {
-	struct acpi_gpe_xrupt_info *previous;
-	struct acpi_gpe_xrupt_info *next;
-	struct acpi_gpe_block_info *gpe_block_list_head;
-	u32 interrupt_number;
-};
-
-struct acpi_common_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-};
-
-struct acpi_update_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *object;
-};
-
-struct acpi_pkg_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 index;
-	union acpi_operand_object *source_object;
-	union acpi_operand_object *dest_object;
-	struct acpi_walk_state *walk_state;
-	void *this_target_obj;
-	u32 num_packages;
-};
-
-struct acpi_control_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u16 opcode;
-	union acpi_parse_object *predicate_op;
-	u8 *aml_predicate_start;
-	u8 *package_end;
-	u64 loop_timeout;
-};
-
-union acpi_parse_value {
-	u64 integer;
-	u32 size;
-	char *string;
-	u8 *buffer;
-	char *name;
-	union acpi_parse_object *arg;
-};
-
-struct acpi_parse_obj_common {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-};
-
-struct acpi_parse_obj_named {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	char *path;
-	u8 *data;
-	u32 length;
-	u32 name;
-};
-
-struct acpi_parse_obj_asl {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	union acpi_parse_object *child;
-	union acpi_parse_object *parent_method;
-	char *filename;
-	u8 file_changed;
-	char *parent_filename;
-	char *external_name;
-	char *namepath;
-	char name_seg[4];
-	u32 extra_value;
-	u32 column;
-	u32 line_number;
-	u32 logical_line_number;
-	u32 logical_byte_offset;
-	u32 end_line;
-	u32 end_logical_line;
-	u32 acpi_btype;
-	u32 aml_length;
-	u32 aml_subtree_length;
-	u32 final_aml_length;
-	u32 final_aml_offset;
-	u32 compile_flags;
-	u16 parse_opcode;
-	u8 aml_opcode_length;
-	u8 aml_pkg_len_bytes;
-	u8 extra;
-	char parse_op_name[20];
-};
-
-union acpi_parse_object {
-	struct acpi_parse_obj_common common;
-	struct acpi_parse_obj_named named;
-	struct acpi_parse_obj_asl asl;
-};
-
-struct acpi_scope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_pscope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 arg_count;
-	union acpi_parse_object *op;
-	u8 *arg_end;
-	u8 *pkg_end;
-	u32 arg_list;
-};
-
-struct acpi_thread_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 current_sync_level;
-	struct acpi_walk_state *walk_state_list;
-	union acpi_operand_object *acquired_mutex_list;
-	u64 thread_id;
-};
-
-struct acpi_result_values {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *obj_desc[8];
-};
-
-struct acpi_global_notify_handler {
-	acpi_notify_handler handler;
-	void *context;
-};
-
-struct acpi_notify_info {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 handler_list_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler_list_head;
-	struct acpi_global_notify_handler *global;
-};
-
-union acpi_generic_state {
-	struct acpi_common_state common;
-	struct acpi_control_state control;
-	struct acpi_update_state update;
-	struct acpi_scope_state scope;
-	struct acpi_pscope_state parse_scope;
-	struct acpi_pkg_state pkg;
-	struct acpi_thread_state thread;
-	struct acpi_result_values results;
-	struct acpi_notify_info notify;
-};
-
-struct acpi_opcode_info {
-	u32 parse_args;
-	u32 runtime_args;
-	u16 flags;
-	u8 object_type;
-	u8 class;
-	u8 type;
-};
-
-struct acpi_os_dpc {
-	acpi_osd_exec_callback function;
-	void *context;
-	struct work_struct work;
-};
-
-struct acpi_ioremap {
-	struct list_head list;
-	void *virt;
-	acpi_physical_address phys;
-	acpi_size size;
-	union {
-		long unsigned int refcount;
-		struct rcu_work rwork;
-	} track;
-};
-
-struct acpi_hp_work {
-	struct work_struct work;
-	struct acpi_device *adev;
-	u32 src;
-};
-
-struct acpi_object_list {
-	u32 count;
-	union acpi_object *pointer;
-};
-
-struct acpi_pld_info {
-	u8 revision;
-	u8 ignore_color;
-	u8 red;
-	u8 green;
-	u8 blue;
-	u16 width;
-	u16 height;
-	u8 user_visible;
-	u8 dock;
-	u8 lid;
-	u8 panel;
-	u8 vertical_position;
-	u8 horizontal_position;
-	u8 shape;
-	u8 group_orientation;
-	u8 group_token;
-	u8 group_position;
-	u8 bay;
-	u8 ejectable;
-	u8 ospm_eject_required;
-	u8 cabinet_number;
-	u8 card_cage_number;
-	u8 reference;
-	u8 rotation;
-	u8 order;
-	u8 reserved;
-	u16 vertical_offset;
-	u16 horizontal_offset;
-};
-
-struct acpi_handle_list {
-	u32 count;
-	acpi_handle handles[10];
-};
-
-enum acpi_predicate {
-	all_versions = 0,
-	less_than_or_equal = 1,
-	equal = 2,
-	greater_than_or_equal = 3,
-};
-
-struct acpi_platform_list {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	char *table;
-	enum acpi_predicate pred;
-	char *reason;
-	u32 data;
-};
-
-struct acpi_device_bus_id {
-	const char *bus_id;
-	unsigned int instance_no;
-	struct list_head node;
-};
-
-struct acpi_dev_match_info {
-	struct acpi_device_id hid[2];
-	const char *uid;
-	s64 hrv;
-};
-
-struct nvs_region {
-	__u64 phys_start;
-	__u64 size;
-	struct list_head node;
-};
-
-struct acpi_wakeup_handler {
-	struct list_head list_node;
-	bool (*wakeup)(void *);
-	void *context;
-};
-
-struct acpi_hardware_id {
-	struct list_head list;
-	const char *id;
-};
-
-struct acpi_data_node {
-	const char *name;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct fwnode_handle *parent;
-	struct acpi_device_data data;
-	struct list_head sibling;
-	struct kobject kobj;
-	struct completion kobj_done;
-};
-
-struct acpi_data_node_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct acpi_data_node *, char *);
-	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
-};
-
-struct pm_domain_data {
-	struct list_head list_node;
-	struct device *dev;
-};
-
-typedef u32 (*acpi_event_handler)(void *);
-
-enum acpi_bus_device_type {
-	ACPI_BUS_TYPE_DEVICE = 0,
-	ACPI_BUS_TYPE_POWER = 1,
-	ACPI_BUS_TYPE_PROCESSOR = 2,
-	ACPI_BUS_TYPE_THERMAL = 3,
-	ACPI_BUS_TYPE_POWER_BUTTON = 4,
-	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
-	ACPI_BUS_TYPE_ECDT_EC = 6,
-	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
-};
-
 struct acpi_device_physical_node {
 	unsigned int node_id;
 	struct list_head node;
@@ -69136,190 +95572,12 @@
 	bool put_online: 1;
 };
 
-struct acpi_osc_context {
-	char *uuid_str;
-	int rev;
-	struct acpi_buffer cap;
-	struct acpi_buffer ret;
-};
-
-struct acpi_pnp_device_id {
-	u32 length;
-	char *string;
-};
-
-struct acpi_pnp_device_id_list {
-	u32 count;
-	u32 list_size;
-	struct acpi_pnp_device_id ids[0];
-};
-
-struct acpi_device_info {
-	u32 info_size;
-	u32 name;
-	acpi_object_type type;
-	u8 param_count;
-	u16 valid;
-	u8 flags;
-	u8 highest_dstates[4];
-	u8 lowest_dstates[5];
+struct find_child_walk_data {
+	struct acpi_device *adev;
 	u64 address;
-	struct acpi_pnp_device_id hardware_id;
-	struct acpi_pnp_device_id unique_id;
-	struct acpi_pnp_device_id class_code;
-	struct acpi_pnp_device_id_list compatible_id_list;
-};
-
-struct acpi_table_spcr {
-	struct acpi_table_header header;
-	u8 interface_type;
-	u8 reserved[3];
-	struct acpi_generic_address serial_port;
-	u8 interrupt_type;
-	u8 pc_interrupt;
-	u32 interrupt;
-	u8 baud_rate;
-	u8 parity;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 terminal_type;
-	u8 reserved1;
-	u16 pci_device_id;
-	u16 pci_vendor_id;
-	u8 pci_bus;
-	u8 pci_device;
-	u8 pci_function;
-	u32 pci_flags;
-	u8 pci_segment;
-	u32 reserved2;
-} __attribute__((packed));
-
-struct acpi_table_stao {
-	struct acpi_table_header header;
-	u8 ignore_uart;
-} __attribute__((packed));
-
-enum acpi_reconfig_event {
-	ACPI_RECONFIG_DEVICE_ADD = 0,
-	ACPI_RECONFIG_DEVICE_REMOVE = 1,
-};
-
-struct acpi_dep_data {
-	struct list_head node;
-	acpi_handle master;
-	acpi_handle slave;
-};
-
-struct acpi_table_events_work {
-	struct work_struct work;
-	void *table;
-	u32 event;
-};
-
-struct resource_win {
-	struct resource res;
-	resource_size_t offset;
-};
-
-struct res_proc_context {
-	struct list_head *list;
-	int (*preproc)(struct acpi_resource *, void *);
-	void *preproc_data;
-	int count;
-	int error;
-};
-
-struct acpi_processor_errata {
-	u8 smp;
-	struct {
-		u8 throttle: 1;
-		u8 fdma: 1;
-		u8 reserved: 6;
-		u32 bmisx;
-	} piix4;
-};
-
-typedef u32 acpi_event_status;
-
-struct acpi_table_ecdt {
-	struct acpi_table_header header;
-	struct acpi_generic_address control;
-	struct acpi_generic_address data;
-	u32 uid;
-	u8 gpe;
-	u8 id[1];
-} __attribute__((packed));
-
-struct transaction;
-
-struct acpi_ec {
-	acpi_handle handle;
-	int gpe;
-	int irq;
-	long unsigned int command_addr;
-	long unsigned int data_addr;
-	bool global_lock;
-	long unsigned int flags;
-	long unsigned int reference_count;
-	struct mutex mutex;
-	wait_queue_head_t wait;
-	struct list_head list;
-	struct transaction *curr;
-	spinlock_t lock;
-	struct work_struct work;
-	long unsigned int timestamp;
-	long unsigned int nr_pending_queries;
-	bool busy_polling;
-	unsigned int polling_guard;
-};
-
-struct transaction {
-	const u8 *wdata;
-	u8 *rdata;
-	short unsigned int irq_count;
-	u8 command;
-	u8 wi;
-	u8 ri;
-	u8 wlen;
-	u8 rlen;
-	u8 flags;
-};
-
-typedef int (*acpi_ec_query_func)(void *);
-
-enum ec_command {
-	ACPI_EC_COMMAND_READ = 128,
-	ACPI_EC_COMMAND_WRITE = 129,
-	ACPI_EC_BURST_ENABLE = 130,
-	ACPI_EC_BURST_DISABLE = 131,
-	ACPI_EC_COMMAND_QUERY = 132,
-};
-
-enum {
-	EC_FLAGS_QUERY_ENABLED = 0,
-	EC_FLAGS_QUERY_PENDING = 1,
-	EC_FLAGS_QUERY_GUARDING = 2,
-	EC_FLAGS_EVENT_HANDLER_INSTALLED = 3,
-	EC_FLAGS_EC_HANDLER_INSTALLED = 4,
-	EC_FLAGS_QUERY_METHODS_INSTALLED = 5,
-	EC_FLAGS_STARTED = 6,
-	EC_FLAGS_STOPPED = 7,
-	EC_FLAGS_EVENTS_MASKED = 8,
-};
-
-struct acpi_ec_query_handler {
-	struct list_head node;
-	acpi_ec_query_func func;
-	acpi_handle handle;
-	void *data;
-	u8 query_bit;
-	struct kref kref;
-};
-
-struct acpi_ec_query {
-	struct transaction transaction;
-	struct work_struct work;
-	struct acpi_ec_query_handler *handler;
+	int score;
+	bool check_sta;
+	bool check_children;
 };
 
 struct dock_station {
@@ -69342,346 +95600,26 @@
 	DOCK_CALL_UEVENT = 2,
 };
 
-struct pci_osc_bit_struct {
-	u32 bit;
-	char *desc;
-};
-
-struct acpi_handle_node {
-	struct list_head node;
-	acpi_handle handle;
-};
-
-struct acpi_pci_link_irq {
-	u32 active;
-	u8 triggering;
-	u8 polarity;
-	u8 resource_type;
-	u8 possible_count;
-	u32 possible[16];
-	u8 initialized: 1;
-	u8 reserved: 7;
-};
-
-struct acpi_pci_link {
-	struct list_head list;
-	struct acpi_device *device;
-	struct acpi_pci_link_irq irq;
-	int refcnt;
-};
-
-struct acpi_pci_routing_table {
-	u32 length;
-	u32 pin;
-	u64 address;
-	u32 source_index;
-	char source[4];
-};
-
-struct acpi_prt_entry {
-	struct acpi_pci_id id;
-	u8 pin;
-	acpi_handle link;
-	u32 index;
-};
-
-struct prt_quirk {
-	const struct dmi_system_id *system;
-	unsigned int segment;
-	unsigned int bus;
-	unsigned int device;
-	unsigned char pin;
-	const char *source;
-	const char *actual_source;
-};
-
-struct apd_private_data;
-
-struct apd_device_desc {
-	unsigned int fixed_clk_rate;
-	struct property_entry *properties;
-	int (*setup)(struct apd_private_data *);
-};
-
-struct apd_private_data {
-	struct clk *clk;
-	struct acpi_device *adev;
-	const struct apd_device_desc *dev_desc;
-};
-
-struct acpi_power_dependent_device {
-	struct device *dev;
-	struct list_head node;
-};
-
-struct acpi_power_resource {
-	struct acpi_device device;
-	struct list_head list_node;
-	char *name;
-	u32 system_level;
-	u32 order;
-	unsigned int ref_count;
-	bool wakeup_enabled;
-	struct mutex resource_lock;
-	struct list_head dependents;
-};
-
-struct acpi_power_resource_entry {
-	struct list_head node;
-	struct acpi_power_resource *resource;
-};
-
-struct acpi_bus_event {
-	struct list_head node;
-	acpi_device_class device_class;
-	acpi_bus_id bus_id;
-	u32 type;
-	u32 data;
-};
-
-struct acpi_genl_event {
-	acpi_device_class device_class;
-	char bus_id[15];
-	u32 type;
-	u32 data;
-};
-
-enum {
-	ACPI_GENL_ATTR_UNSPEC = 0,
-	ACPI_GENL_ATTR_EVENT = 1,
-	__ACPI_GENL_ATTR_MAX = 2,
-};
-
-enum {
-	ACPI_GENL_CMD_UNSPEC = 0,
-	ACPI_GENL_CMD_EVENT = 1,
-	__ACPI_GENL_CMD_MAX = 2,
-};
-
-struct acpi_ged_device {
-	struct device *dev;
-	struct list_head event_list;
-};
-
-struct acpi_ged_event {
-	struct list_head node;
-	struct device *dev;
-	unsigned int gsi;
-	unsigned int irq;
-	acpi_handle handle;
-};
-
-typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
-
-struct acpi_table_bert {
-	struct acpi_table_header header;
-	u32 region_length;
-	u64 address;
-};
-
-struct acpi_table_attr {
-	struct bin_attribute attr;
-	char name[4];
-	int instance;
-	char filename[8];
-	struct list_head node;
-};
-
-struct acpi_data_attr {
-	struct bin_attribute attr;
-	u64 addr;
-};
-
-struct acpi_data_obj {
-	char *name;
-	int (*fn)(void *, struct acpi_data_attr *);
-};
-
-struct event_counter {
-	u32 count;
-	u32 flags;
-};
-
-struct acpi_device_properties {
-	const guid_t *guid;
-	const union acpi_object *properties;
-	struct list_head list;
-};
-
-struct acpi_lpat {
-	int temp;
-	int raw;
-};
-
-struct acpi_lpat_conversion_table {
-	struct acpi_lpat *lpat;
-	int lpat_count;
-};
-
-struct acpi_irq_parse_one_ctx {
-	int rc;
-	unsigned int index;
-	long unsigned int *res_flags;
-	struct irq_fwspec *fwspec;
-};
-
-enum {
-	ACPI_REFCLASS_LOCAL = 0,
-	ACPI_REFCLASS_ARG = 1,
-	ACPI_REFCLASS_REFOF = 2,
-	ACPI_REFCLASS_INDEX = 3,
-	ACPI_REFCLASS_TABLE = 4,
-	ACPI_REFCLASS_NAME = 5,
-	ACPI_REFCLASS_DEBUG = 6,
-	ACPI_REFCLASS_MAX = 6,
-};
-
-struct acpi_common_descriptor {
-	void *common_pointer;
-	u8 descriptor_type;
-};
-
-union acpi_descriptor {
-	struct acpi_common_descriptor common;
-	union acpi_operand_object object;
-	struct acpi_namespace_node node;
-	union acpi_parse_object op;
-};
-
-struct acpi_create_field_info {
-	struct acpi_namespace_node *region_node;
-	struct acpi_namespace_node *field_node;
-	struct acpi_namespace_node *register_node;
-	struct acpi_namespace_node *data_register_node;
-	struct acpi_namespace_node *connection_node;
-	u8 *resource_buffer;
-	u32 bank_value;
-	u32 field_bit_position;
-	u32 field_bit_length;
-	u16 resource_length;
-	u16 pin_number_index;
-	u8 field_flags;
-	u8 attribute;
-	u8 field_type;
-	u8 access_length;
-};
-
-struct acpi_init_walk_info {
-	u32 table_index;
-	u32 object_count;
-	u32 method_count;
-	u32 serial_method_count;
-	u32 non_serial_method_count;
-	u32 serialized_method_count;
-	u32 device_count;
-	u32 op_region_count;
-	u32 field_count;
-	u32 buffer_count;
-	u32 package_count;
-	u32 op_region_init;
-	u32 field_init;
-	u32 buffer_init;
-	u32 package_init;
-	acpi_owner_id owner_id;
-};
-
 typedef u32 acpi_name;
 
 typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
 
-struct acpi_name_info {
-	char name[4];
-	u16 argument_list;
-	u8 expected_btypes;
-} __attribute__((packed));
-
-struct acpi_package_info {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 object_type2;
-	u8 count2;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info2 {
-	u8 type;
-	u8 count;
-	u8 object_type[4];
-	u8 reserved;
+struct acpi_mem_mapping {
+	acpi_physical_address physical_address;
+	u8 *logical_address;
+	acpi_size length;
+	struct acpi_mem_mapping *next_mm;
 };
 
-struct acpi_package_info3 {
-	u8 type;
-	u8 count;
-	u8 object_type[2];
-	u8 tail_object_type;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info4 {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 sub_object_types;
-	u8 pkg_count;
-	u16 reserved;
-} __attribute__((packed));
-
-union acpi_predefined_info {
-	struct acpi_name_info info;
-	struct acpi_package_info ret_info;
-	struct acpi_package_info2 ret_info2;
-	struct acpi_package_info3 ret_info3;
-	struct acpi_package_info4 ret_info4;
+struct acpi_mem_space_context {
+	u32 length;
+	acpi_physical_address address;
+	struct acpi_mem_mapping *cur_mm;
+	struct acpi_mem_mapping *first_mm;
 };
 
-struct acpi_evaluate_info {
-	struct acpi_namespace_node *prefix_node;
-	const char *relative_pathname;
-	union acpi_operand_object **parameters;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *obj_desc;
-	char *full_pathname;
-	const union acpi_predefined_info *predefined;
-	union acpi_operand_object *return_object;
-	union acpi_operand_object *parent_package;
-	u32 return_flags;
-	u32 return_btype;
-	u16 param_count;
-	u16 node_flags;
-	u8 pass_number;
-	u8 return_object_type;
-	u8 flags;
-};
-
-enum {
-	AML_FIELD_ACCESS_ANY = 0,
-	AML_FIELD_ACCESS_BYTE = 1,
-	AML_FIELD_ACCESS_WORD = 2,
-	AML_FIELD_ACCESS_DWORD = 3,
-	AML_FIELD_ACCESS_QWORD = 4,
-	AML_FIELD_ACCESS_BUFFER = 5,
-};
-
-typedef enum {
-	ACPI_IMODE_LOAD_PASS1 = 1,
-	ACPI_IMODE_LOAD_PASS2 = 2,
-	ACPI_IMODE_EXECUTE = 3,
-} acpi_interpreter_mode;
-
-typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
-
-struct acpi_reg_walk_info {
-	u32 function;
-	u32 reg_run_count;
-	acpi_adr_space_type space_id;
-};
-
-enum {
-	AML_FIELD_UPDATE_PRESERVE = 0,
-	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
-	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
+struct acpi_data_table_space_context {
+	void *pointer;
 };
 
 struct acpi_signal_fatal_info {
@@ -69690,584 +95628,36 @@
 	u32 argument;
 };
 
-enum {
-	MATCH_MTR = 0,
-	MATCH_MEQ = 1,
-	MATCH_MLE = 2,
-	MATCH_MLT = 3,
-	MATCH_MGE = 4,
-	MATCH_MGT = 5,
-};
-
-enum {
-	AML_FIELD_ATTRIB_QUICK = 2,
-	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
-	AML_FIELD_ATTRIB_BYTE = 6,
-	AML_FIELD_ATTRIB_WORD = 8,
-	AML_FIELD_ATTRIB_BLOCK = 10,
-	AML_FIELD_ATTRIB_BYTES = 11,
-	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
-	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
-	AML_FIELD_ATTRIB_RAW_BYTES = 14,
-	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
-};
-
-typedef enum {
-	ACPI_TRACE_AML_METHOD = 0,
-	ACPI_TRACE_AML_OPCODE = 1,
-	ACPI_TRACE_AML_REGION = 2,
-} acpi_trace_event_type;
-
-struct acpi_port_info {
-	char *name;
-	u16 start;
-	u16 end;
-	u8 osi_dependency;
-};
-
-struct acpi_pci_device {
-	acpi_handle device;
-	struct acpi_pci_device *next;
-};
-
-typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
-
-struct acpi_device_walk_info {
-	struct acpi_table_desc *table_desc;
-	struct acpi_evaluate_info *evaluate_info;
-	u32 device_count;
-	u32 num_STA;
-	u32 num_INI;
-};
-
-struct acpi_table_list {
-	struct acpi_table_desc *tables;
-	u32 current_table_count;
-	u32 max_table_count;
+struct acpi_device_info {
+	u32 info_size;
+	u32 name;
+	acpi_object_type type;
+	u8 param_count;
+	u16 valid;
 	u8 flags;
-};
-
-enum acpi_return_package_types {
-	ACPI_PTYPE1_FIXED = 1,
-	ACPI_PTYPE1_VAR = 2,
-	ACPI_PTYPE1_OPTION = 3,
-	ACPI_PTYPE2 = 4,
-	ACPI_PTYPE2_COUNT = 5,
-	ACPI_PTYPE2_PKG_COUNT = 6,
-	ACPI_PTYPE2_FIXED = 7,
-	ACPI_PTYPE2_MIN = 8,
-	ACPI_PTYPE2_REV_FIXED = 9,
-	ACPI_PTYPE2_FIX_VAR = 10,
-	ACPI_PTYPE2_VAR_VAR = 11,
-	ACPI_PTYPE2_UUID_PAIR = 12,
-	ACPI_PTYPE_CUSTOM = 13,
-};
-
-typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);
-
-struct acpi_simple_repair_info {
-	char name[4];
-	u32 unexpected_btypes;
-	u32 package_index;
-	acpi_object_converter object_converter;
-};
-
-typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
-
-struct acpi_repair_info {
-	char name[4];
-	acpi_repair_function repair_function;
-};
-
-struct acpi_namestring_info {
-	const char *external_name;
-	const char *next_external_char;
-	char *internal_name;
-	u32 length;
-	u32 num_segments;
-	u32 num_carats;
-	u8 fully_qualified;
-};
-
-typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
-
-struct acpi_rw_lock {
-	void *writer_mutex;
-	void *reader_mutex;
-	u32 num_readers;
-};
-
-struct acpi_get_devices_info {
-	acpi_walk_callback user_function;
-	void *context;
-	const char *hid;
-};
-
-struct aml_resource_small_header {
-	u8 descriptor_type;
-};
-
-struct aml_resource_irq {
-	u8 descriptor_type;
-	u16 irq_mask;
-	u8 flags;
-} __attribute__((packed));
-
-struct aml_resource_dma {
-	u8 descriptor_type;
-	u8 dma_channel_mask;
-	u8 flags;
-};
-
-struct aml_resource_start_dependent {
-	u8 descriptor_type;
-	u8 flags;
-};
-
-struct aml_resource_end_dependent {
-	u8 descriptor_type;
-};
-
-struct aml_resource_io {
-	u8 descriptor_type;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u8 alignment;
-	u8 address_length;
-};
-
-struct aml_resource_fixed_io {
-	u8 descriptor_type;
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_small {
-	u8 descriptor_type;
-};
-
-struct aml_resource_end_tag {
-	u8 descriptor_type;
-	u8 checksum;
-};
-
-struct aml_resource_fixed_dma {
-	u8 descriptor_type;
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct aml_resource_large_header {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory24 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_large {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_fixed_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-} __attribute__((packed));
-
-struct aml_resource_extended_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u8 revision_ID;
-	u8 reserved;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct aml_resource_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address16 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_extended_irq {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u8 interrupt_count;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct aml_resource_generic_register {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 address_space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
+	u8 highest_dstates[4];
+	u8 lowest_dstates[5];
 	u64 address;
-} __attribute__((packed));
-
-struct aml_resource_gpio {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 connection_type;
-	u16 flags;
-	u16 int_flags;
-	u8 pin_config;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_common_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-} __attribute__((packed));
-
-struct aml_resource_i2c_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u16 slave_address;
-} __attribute__((packed));
-
-struct aml_resource_spi_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-} __attribute__((packed));
-
-struct aml_resource_uart_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 default_baud_rate;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u8 parity;
-	u8 lines_enabled;
-} __attribute__((packed));
-
-struct aml_resource_pin_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config;
-	u16 function_number;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 pin_table_offset;
-	u16 label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 function_number;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-union aml_resource {
-	u8 descriptor_type;
-	struct aml_resource_small_header small_header;
-	struct aml_resource_large_header large_header;
-	struct aml_resource_irq irq;
-	struct aml_resource_dma dma;
-	struct aml_resource_start_dependent start_dpf;
-	struct aml_resource_end_dependent end_dpf;
-	struct aml_resource_io io;
-	struct aml_resource_fixed_io fixed_io;
-	struct aml_resource_fixed_dma fixed_dma;
-	struct aml_resource_vendor_small vendor_small;
-	struct aml_resource_end_tag end_tag;
-	struct aml_resource_memory24 memory24;
-	struct aml_resource_generic_register generic_reg;
-	struct aml_resource_vendor_large vendor_large;
-	struct aml_resource_memory32 memory32;
-	struct aml_resource_fixed_memory32 fixed_memory32;
-	struct aml_resource_address16 address16;
-	struct aml_resource_address32 address32;
-	struct aml_resource_address64 address64;
-	struct aml_resource_extended_address64 ext_address64;
-	struct aml_resource_extended_irq extended_irq;
-	struct aml_resource_gpio gpio;
-	struct aml_resource_i2c_serialbus i2c_serial_bus;
-	struct aml_resource_spi_serialbus spi_serial_bus;
-	struct aml_resource_uart_serialbus uart_serial_bus;
-	struct aml_resource_common_serialbus common_serial_bus;
-	struct aml_resource_pin_function pin_function;
-	struct aml_resource_pin_config pin_config;
-	struct aml_resource_pin_group pin_group;
-	struct aml_resource_pin_group_function pin_group_function;
-	struct aml_resource_pin_group_config pin_group_config;
-	struct aml_resource_address address;
-	u32 dword_item;
-	u16 word_item;
-	u8 byte_item;
-};
-
-struct acpi_rsconvert_info {
-	u8 opcode;
-	u8 resource_offset;
-	u8 aml_offset;
-	u8 value;
-};
-
-enum {
-	ACPI_RSC_INITGET = 0,
-	ACPI_RSC_INITSET = 1,
-	ACPI_RSC_FLAGINIT = 2,
-	ACPI_RSC_1BITFLAG = 3,
-	ACPI_RSC_2BITFLAG = 4,
-	ACPI_RSC_3BITFLAG = 5,
-	ACPI_RSC_ADDRESS = 6,
-	ACPI_RSC_BITMASK = 7,
-	ACPI_RSC_BITMASK16 = 8,
-	ACPI_RSC_COUNT = 9,
-	ACPI_RSC_COUNT16 = 10,
-	ACPI_RSC_COUNT_GPIO_PIN = 11,
-	ACPI_RSC_COUNT_GPIO_RES = 12,
-	ACPI_RSC_COUNT_GPIO_VEN = 13,
-	ACPI_RSC_COUNT_SERIAL_RES = 14,
-	ACPI_RSC_COUNT_SERIAL_VEN = 15,
-	ACPI_RSC_DATA8 = 16,
-	ACPI_RSC_EXIT_EQ = 17,
-	ACPI_RSC_EXIT_LE = 18,
-	ACPI_RSC_EXIT_NE = 19,
-	ACPI_RSC_LENGTH = 20,
-	ACPI_RSC_MOVE_GPIO_PIN = 21,
-	ACPI_RSC_MOVE_GPIO_RES = 22,
-	ACPI_RSC_MOVE_SERIAL_RES = 23,
-	ACPI_RSC_MOVE_SERIAL_VEN = 24,
-	ACPI_RSC_MOVE8 = 25,
-	ACPI_RSC_MOVE16 = 26,
-	ACPI_RSC_MOVE32 = 27,
-	ACPI_RSC_MOVE64 = 28,
-	ACPI_RSC_SET8 = 29,
-	ACPI_RSC_SOURCE = 30,
-	ACPI_RSC_SOURCEX = 31,
-};
-
-typedef u16 acpi_rs_length;
-
-typedef u32 acpi_rsdesc_size;
-
-struct acpi_vendor_uuid {
-	u8 subtype;
-	u8 data[16];
-};
-
-typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
-
-struct acpi_vendor_walk_info {
-	struct acpi_vendor_uuid *uuid;
-	struct acpi_buffer *buffer;
-	acpi_status status;
-};
-
-typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
-
-struct acpi_fadt_info {
-	const char *name;
-	u16 address64;
-	u16 address32;
-	u16 length;
-	u8 default_length;
-	u8 flags;
-};
-
-struct acpi_fadt_pm_info {
-	struct acpi_generic_address *target;
-	u16 source;
-	u8 register_num;
-};
-
-struct acpi_table_rsdp {
-	char signature[8];
-	u8 checksum;
-	char oem_id[6];
-	u8 revision;
-	u32 rsdt_physical_address;
-	u32 length;
-	u64 xsdt_physical_address;
-	u8 extended_checksum;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_address_range {
-	struct acpi_address_range *next;
-	struct acpi_namespace_node *region_node;
-	acpi_physical_address start_address;
-	acpi_physical_address end_address;
-};
-
-struct acpi_pkg_info {
-	u8 *free_space;
-	acpi_size length;
-	u32 object_space;
-	u32 num_packages;
+	struct acpi_pnp_device_id hardware_id;
+	struct acpi_pnp_device_id unique_id;
+	struct acpi_pnp_device_id class_code;
+	struct acpi_pnp_device_id_list compatible_id_list;
 };
 
 struct acpi_exception_info {
 	char *name;
 };
 
+struct acpi_predefined_names {
+	const char *name;
+	u8 type;
+	char *val;
+};
+
 typedef u32 (*acpi_sci_handler)(void *);
 
+typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
+
 typedef u32 (*acpi_interface_handler)(acpi_string, u32);
 
 struct acpi_mutex_info {
@@ -70282,6 +95672,13 @@
 	void *context;
 };
 
+struct acpi_address_range {
+	struct acpi_address_range *next;
+	struct acpi_namespace_node *region_node;
+	acpi_physical_address start_address;
+	acpi_physical_address end_address;
+};
+
 struct acpi_comment_node {
 	char *comment;
 	struct acpi_comment_node *next;
@@ -70294,522 +95691,115 @@
 	u8 value;
 };
 
-typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
-
-typedef u32 acpi_mutex_handle;
-
 typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
 
-struct acpi_table_mcfg {
-	struct acpi_table_header header;
-	u8 reserved[8];
+struct acpi_fan_fps {
+	u64 control;
+	u64 trip_point;
+	u64 speed;
+	u64 noise_level;
+	u64 power;
+	char name[20];
+	struct device_attribute dev_attr;
 };
 
-struct acpi_mcfg_allocation {
-	u64 address;
-	u16 pci_segment;
-	u8 start_bus_number;
-	u8 end_bus_number;
-	u32 reserved;
+struct acpi_fan_fif {
+	u8 revision;
+	u8 fine_grain_ctrl;
+	u8 step_size;
+	u8 low_speed_notification;
 };
 
-struct mcfg_entry {
-	struct list_head list;
-	phys_addr_t addr;
-	u16 segment;
-	u8 bus_start;
-	u8 bus_end;
+struct acpi_fan_fst {
+	u64 revision;
+	u64 control;
+	u64 speed;
 };
 
-struct mcfg_fixup {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	u16 segment;
-	struct resource bus_range;
-	const struct pci_ecam_ops *ops;
-	struct resource cfgres;
+struct acpi_fan {
+	bool acpi4;
+	struct acpi_fan_fif fif;
+	struct acpi_fan_fps *fps;
+	int fps_count;
+	struct thermal_cooling_device *cdev;
+	struct device_attribute fst_speed;
+	struct device_attribute fine_grain_control;
 };
 
-struct acpi_pci_slot {
-	struct pci_slot *pci_slot;
-	struct list_head list;
+struct acpi_handle_list {
+	u32 count;
+	acpi_handle handles[10];
 };
 
-struct acpi_power_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_lpi_states_array {
-	unsigned int size;
-	unsigned int composite_states_size;
-	struct acpi_lpi_state *entries;
-	struct acpi_lpi_state *composite_states[8];
+struct acpi_thermal_state {
+	u8 critical: 1;
+	u8 hot: 1;
+	u8 passive: 1;
+	u8 active: 1;
+	u8 reserved: 4;
+	int active_index;
 };
 
-struct container_dev {
-	struct device dev;
-	int (*offline)(struct container_dev *);
+struct acpi_thermal_state_flags {
+	u8 valid: 1;
+	u8 enabled: 1;
+	u8 reserved: 6;
 };
 
-struct acpi_table_slit {
-	struct acpi_table_header header;
-	u64 locality_count;
-	u8 entry[1];
-} __attribute__((packed));
-
-struct acpi_table_srat {
-	struct acpi_table_header header;
-	u32 table_revision;
-	u64 reserved;
+struct acpi_thermal_critical {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
 };
 
-struct acpi_srat_cpu_affinity {
-	struct acpi_subtable_header header;
-	u8 proximity_domain_lo;
-	u8 apic_id;
-	u32 flags;
-	u8 local_sapic_eid;
-	u8 proximity_domain_hi[3];
-	u32 clock_domain;
+struct acpi_thermal_hot {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
 };
 
-struct acpi_srat_mem_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u64 base_address;
-	u64 length;
-	u32 reserved1;
-	u32 flags;
-	u64 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_x2apic_cpu_affinity {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 proximity_domain;
-	u32 apic_id;
-	u32 flags;
-	u32 clock_domain;
-	u32 reserved2;
+struct acpi_thermal_passive {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	long unsigned int tc1;
+	long unsigned int tc2;
+	long unsigned int tsp;
+	struct acpi_handle_list devices;
 };
 
-struct acpi_srat_generic_affinity {
-	struct acpi_subtable_header header;
-	u8 reserved;
-	u8 device_handle_type;
-	u32 proximity_domain;
-	u8 device_handle[16];
-	u32 flags;
-	u32 reserved1;
+struct acpi_thermal_active {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	struct acpi_handle_list devices;
 };
 
-enum acpi_hmat_type {
-	ACPI_HMAT_TYPE_PROXIMITY = 0,
-	ACPI_HMAT_TYPE_LOCALITY = 1,
-	ACPI_HMAT_TYPE_CACHE = 2,
-	ACPI_HMAT_TYPE_RESERVED = 3,
+struct acpi_thermal_trips {
+	struct acpi_thermal_critical critical;
+	struct acpi_thermal_hot hot;
+	struct acpi_thermal_passive passive;
+	struct acpi_thermal_active active[10];
 };
 
-struct acpi_hmat_proximity_domain {
-	struct acpi_hmat_structure header;
-	u16 flags;
-	u16 reserved1;
-	u32 processor_PD;
-	u32 memory_PD;
-	u32 reserved2;
-	u64 reserved3;
-	u64 reserved4;
+struct acpi_thermal_flags {
+	u8 cooling_mode: 1;
+	u8 devices: 1;
+	u8 reserved: 6;
 };
 
-struct acpi_hmat_locality {
-	struct acpi_hmat_structure header;
-	u8 flags;
-	u8 data_type;
-	u16 reserved1;
-	u32 number_of_initiator_Pds;
-	u32 number_of_target_Pds;
-	u32 reserved2;
-	u64 entry_base_unit;
-};
-
-struct acpi_hmat_cache {
-	struct acpi_hmat_structure header;
-	u32 memory_PD;
-	u32 reserved1;
-	u64 cache_size;
-	u32 cache_attributes;
-	u16 reserved2;
-	u16 number_of_SMBIOShandles;
-};
-
-struct node_hmem_attrs {
-	unsigned int read_bandwidth;
-	unsigned int write_bandwidth;
-	unsigned int read_latency;
-	unsigned int write_latency;
-};
-
-enum cache_indexing {
-	NODE_CACHE_DIRECT_MAP = 0,
-	NODE_CACHE_INDEXED = 1,
-	NODE_CACHE_OTHER = 2,
-};
-
-enum cache_write_policy {
-	NODE_CACHE_WRITE_BACK = 0,
-	NODE_CACHE_WRITE_THROUGH = 1,
-	NODE_CACHE_WRITE_OTHER = 2,
-};
-
-struct node_cache_attrs {
-	enum cache_indexing indexing;
-	enum cache_write_policy write_policy;
-	u64 size;
-	u16 line_size;
-	u8 level;
-};
-
-enum locality_types {
-	WRITE_LATENCY = 0,
-	READ_LATENCY = 1,
-	WRITE_BANDWIDTH = 2,
-	READ_BANDWIDTH = 3,
-};
-
-struct memory_locality {
-	struct list_head node;
-	struct acpi_hmat_locality *hmat_loc;
-};
-
-struct target_cache {
-	struct list_head node;
-	struct node_cache_attrs cache_attrs;
-};
-
-struct memory_target {
-	struct list_head node;
-	unsigned int memory_pxm;
-	unsigned int processor_pxm;
-	struct resource memregions;
-	struct node_hmem_attrs hmem_attrs[2];
-	struct list_head caches;
-	struct node_cache_attrs cache_attrs;
-	bool registered;
-};
-
-struct memory_initiator {
-	struct list_head node;
-	unsigned int processor_pxm;
-	bool has_cpu;
-};
-
-struct acpi_memory_info {
-	struct list_head list;
-	u64 start_addr;
-	u64 length;
-	short unsigned int caching;
-	short unsigned int write_protect;
-	unsigned int enabled: 1;
-};
-
-struct acpi_memory_device {
+struct acpi_thermal {
 	struct acpi_device *device;
-	struct list_head res_list;
-};
-
-struct acpi_pcct_hw_reduced {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_shared_memory {
-	u32 signature;
-	u16 command;
-	u16 status;
-};
-
-struct mbox_chan;
-
-struct mbox_chan_ops {
-	int (*send_data)(struct mbox_chan *, void *);
-	int (*flush)(struct mbox_chan *, long unsigned int);
-	int (*startup)(struct mbox_chan *);
-	void (*shutdown)(struct mbox_chan *);
-	bool (*last_tx_done)(struct mbox_chan *);
-	bool (*peek_data)(struct mbox_chan *);
-};
-
-struct mbox_controller;
-
-struct mbox_client;
-
-struct mbox_chan {
-	struct mbox_controller *mbox;
-	unsigned int txdone_method;
-	struct mbox_client *cl;
-	struct completion tx_complete;
-	void *active_req;
-	unsigned int msg_count;
-	unsigned int msg_free;
-	void *msg_data[20];
-	spinlock_t lock;
-	void *con_priv;
-};
-
-struct mbox_controller {
-	struct device *dev;
-	const struct mbox_chan_ops *ops;
-	struct mbox_chan *chans;
-	int num_chans;
-	bool txdone_irq;
-	bool txdone_poll;
-	unsigned int txpoll_period;
-	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
-	struct hrtimer poll_hrt;
-	struct list_head node;
-};
-
-struct mbox_client {
-	struct device *dev;
-	bool tx_block;
-	long unsigned int tx_tout;
-	bool knows_txdone;
-	void (*rx_callback)(struct mbox_client *, void *);
-	void (*tx_prepare)(struct mbox_client *, void *);
-	void (*tx_done)(struct mbox_client *, void *, int);
-};
-
-struct cpc_reg {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct cpc_register_resource {
-	acpi_object_type type;
-	u64 *sys_mem_vaddr;
-	union {
-		struct cpc_reg reg;
-		u64 int_value;
-	} cpc_entry;
-};
-
-struct cpc_desc {
-	int num_entries;
-	int version;
-	int cpu_id;
-	int write_cmd_status;
-	int write_cmd_id;
-	struct cpc_register_resource cpc_regs[21];
-	struct acpi_psd_package domain_info;
-	struct kobject kobj;
-};
-
-enum cppc_regs {
-	HIGHEST_PERF = 0,
-	NOMINAL_PERF = 1,
-	LOW_NON_LINEAR_PERF = 2,
-	LOWEST_PERF = 3,
-	GUARANTEED_PERF = 4,
-	DESIRED_PERF = 5,
-	MIN_PERF = 6,
-	MAX_PERF = 7,
-	PERF_REDUC_TOLERANCE = 8,
-	TIME_WINDOW = 9,
-	CTR_WRAP_TIME = 10,
-	REFERENCE_CTR = 11,
-	DELIVERED_CTR = 12,
-	PERF_LIMITED = 13,
-	ENABLE = 14,
-	AUTO_SEL_ENABLE = 15,
-	AUTO_ACT_WINDOW = 16,
-	ENERGY_PERF = 17,
-	REFERENCE_PERF = 18,
-	LOWEST_FREQ = 19,
-	NOMINAL_FREQ = 20,
-};
-
-struct cppc_perf_caps {
-	u32 guaranteed_perf;
-	u32 highest_perf;
-	u32 nominal_perf;
-	u32 lowest_perf;
-	u32 lowest_nonlinear_perf;
-	u32 lowest_freq;
-	u32 nominal_freq;
-};
-
-struct cppc_perf_ctrls {
-	u32 max_perf;
-	u32 min_perf;
-	u32 desired_perf;
-};
-
-struct cppc_perf_fb_ctrs {
-	u64 reference;
-	u64 delivered;
-	u64 reference_perf;
-	u64 wraparound_time;
-};
-
-struct cppc_cpudata {
-	int cpu;
-	struct cppc_perf_caps perf_caps;
-	struct cppc_perf_ctrls perf_ctrls;
-	struct cppc_perf_fb_ctrs perf_fb_ctrs;
-	struct cpufreq_policy *cur_policy;
-	unsigned int shared_type;
-	cpumask_var_t shared_cpu_map;
-};
-
-struct cppc_pcc_data {
-	struct mbox_chan *pcc_channel;
-	void *pcc_comm_addr;
-	bool pcc_channel_acquired;
-	unsigned int deadline_us;
-	unsigned int pcc_mpar;
-	unsigned int pcc_mrtt;
-	unsigned int pcc_nominal;
-	bool pending_pcc_write_cmd;
-	bool platform_owns_pcc;
-	unsigned int pcc_write_cnt;
-	struct rw_semaphore pcc_lock;
-	wait_queue_head_t pcc_write_wait_q;
-	ktime_t last_cmd_cmpl_time;
-	ktime_t last_mpar_reset;
-	int mpar_count;
-	int refcount;
-};
-
-struct cppc_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, ssize_t);
-};
-
-enum acpi_pptt_type {
-	ACPI_PPTT_TYPE_PROCESSOR = 0,
-	ACPI_PPTT_TYPE_CACHE = 1,
-	ACPI_PPTT_TYPE_ID = 2,
-	ACPI_PPTT_TYPE_RESERVED = 3,
-};
-
-struct acpi_pptt_processor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 parent;
-	u32 acpi_processor_id;
-	u32 number_of_priv_resources;
-};
-
-struct acpi_pptt_cache {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 next_level_of_cache;
-	u32 size;
-	u32 number_of_sets;
-	u8 associativity;
-	u8 attributes;
-	u16 line_size;
-};
-
-struct acpi_whea_header {
-	u8 action;
-	u8 instruction;
-	u8 flags;
-	u8 reserved;
-	struct acpi_generic_address register_region;
-	u64 value;
-	u64 mask;
-} __attribute__((packed));
-
-struct acpi_hest_header {
-	u16 type;
-	u16 source_id;
-};
-
-struct cper_sec_mem_err {
-	u64 validation_bits;
-	u64 error_status;
-	u64 physical_addr;
-	u64 physical_addr_mask;
-	u16 node;
-	u16 card;
-	u16 module;
-	u16 bank;
-	u16 device;
-	u16 row;
-	u16 column;
-	u16 bit_pos;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 target_id;
-	u8 error_type;
-	u8 extended;
-	u16 rank;
-	u16 mem_array_handle;
-	u16 mem_dev_handle;
-};
-
-struct apei_exec_context;
-
-typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);
-
-struct apei_exec_ins_type;
-
-struct apei_exec_context {
-	u32 ip;
-	u64 value;
-	u64 var1;
-	u64 var2;
-	u64 src_base;
-	u64 dst_base;
-	struct apei_exec_ins_type *ins_table;
-	u32 instructions;
-	struct acpi_whea_header *action_table;
-	u32 entries;
-};
-
-struct apei_exec_ins_type {
-	u32 flags;
-	apei_exec_ins_func_t run;
-};
-
-struct apei_resources {
-	struct list_head iomem;
-	struct list_head ioport;
-};
-
-typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);
-
-struct apei_res {
-	struct list_head list;
-	long unsigned int start;
-	long unsigned int end;
+	acpi_bus_id name;
+	long unsigned int temperature;
+	long unsigned int last_temperature;
+	long unsigned int polling_frequency;
+	volatile u8 zombie;
+	struct acpi_thermal_flags flags;
+	struct acpi_thermal_state state;
+	struct acpi_thermal_trips trips;
+	struct acpi_handle_list devices;
+	struct thermal_zone_device *thermal_zone;
+	int kelvin_offset;
+	struct work_struct thermal_check_work;
+	struct mutex thermal_check_lock;
+	refcount_t thermal_check_count;
 };
 
 struct acpi_table_hest {
@@ -70870,6 +95860,19 @@
 	u8 reserved2[3];
 };
 
+struct acpi_hest_generic {
+	struct acpi_hest_header header;
+	u16 related_source_id;
+	u8 reserved;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	u32 max_raw_data_length;
+	struct acpi_generic_address error_status_address;
+	struct acpi_hest_notify notify;
+	u32 error_block_length;
+} __attribute__((packed));
+
 struct acpi_hest_ia_deferred_check {
 	struct acpi_hest_header header;
 	u16 reserved1;
@@ -70890,921 +95893,22 @@
 
 typedef int (*apei_hest_func_t)(struct acpi_hest_header *, void *);
 
-struct acpi_table_erst {
-	struct acpi_table_header header;
-	u32 header_length;
-	u32 reserved;
-	u32 entries;
+struct ghes_arr {
+	struct platform_device **ghes_devs;
+	unsigned int count;
 };
 
-enum acpi_erst_actions {
-	ACPI_ERST_BEGIN_WRITE = 0,
-	ACPI_ERST_BEGIN_READ = 1,
-	ACPI_ERST_BEGIN_CLEAR = 2,
-	ACPI_ERST_END = 3,
-	ACPI_ERST_SET_RECORD_OFFSET = 4,
-	ACPI_ERST_EXECUTE_OPERATION = 5,
-	ACPI_ERST_CHECK_BUSY_STATUS = 6,
-	ACPI_ERST_GET_COMMAND_STATUS = 7,
-	ACPI_ERST_GET_RECORD_ID = 8,
-	ACPI_ERST_SET_RECORD_ID = 9,
-	ACPI_ERST_GET_RECORD_COUNT = 10,
-	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
-	ACPI_ERST_NOT_USED = 12,
-	ACPI_ERST_GET_ERROR_RANGE = 13,
-	ACPI_ERST_GET_ERROR_LENGTH = 14,
-	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
-	ACPI_ERST_EXECUTE_TIMINGS = 16,
-	ACPI_ERST_ACTION_RESERVED = 17,
-};
-
-enum acpi_erst_instructions {
-	ACPI_ERST_READ_REGISTER = 0,
-	ACPI_ERST_READ_REGISTER_VALUE = 1,
-	ACPI_ERST_WRITE_REGISTER = 2,
-	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
-	ACPI_ERST_NOOP = 4,
-	ACPI_ERST_LOAD_VAR1 = 5,
-	ACPI_ERST_LOAD_VAR2 = 6,
-	ACPI_ERST_STORE_VAR1 = 7,
-	ACPI_ERST_ADD = 8,
-	ACPI_ERST_SUBTRACT = 9,
-	ACPI_ERST_ADD_VALUE = 10,
-	ACPI_ERST_SUBTRACT_VALUE = 11,
-	ACPI_ERST_STALL = 12,
-	ACPI_ERST_STALL_WHILE_TRUE = 13,
-	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
-	ACPI_ERST_GOTO = 15,
-	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
-	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
-	ACPI_ERST_MOVE_DATA = 18,
-	ACPI_ERST_INSTRUCTION_RESERVED = 19,
-};
-
-struct cper_record_header {
-	char signature[4];
-	u16 revision;
-	u32 signature_end;
-	u16 section_count;
-	u32 error_severity;
-	u32 validation_bits;
-	u32 record_length;
-	u64 timestamp;
-	guid_t platform_id;
-	guid_t partition_id;
-	guid_t creator_id;
-	guid_t notification_type;
-	u64 record_id;
-	u32 flags;
-	u64 persistence_information;
-	u8 reserved[12];
-} __attribute__((packed));
-
-struct cper_section_descriptor {
-	u32 section_offset;
-	u32 section_length;
-	u16 revision;
-	u8 validation_bits;
-	u8 reserved;
-	u32 flags;
-	guid_t section_type;
-	guid_t fru_id;
-	u32 section_severity;
-	u8 fru_text[20];
-};
-
-struct erst_erange {
-	u64 base;
-	u64 size;
-	void *vaddr;
-	u32 attr;
-};
-
-struct erst_record_id_cache {
-	struct mutex lock;
-	u64 *entries;
-	int len;
-	int size;
-	int refcount;
-};
-
-struct cper_pstore_record {
-	struct cper_record_header hdr;
-	struct cper_section_descriptor sec_hdr;
-	char data[0];
-};
-
-struct acpi_bert_region {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct acpi_hest_generic_status {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct pmic_table {
-	int address;
-	int reg;
-	int bit;
-};
-
-struct intel_pmic_opregion_data {
-	int (*get_power)(struct regmap *, int, int, u64 *);
-	int (*update_power)(struct regmap *, int, int, bool);
-	int (*get_raw_temp)(struct regmap *, int);
-	int (*update_aux)(struct regmap *, int, int);
-	int (*get_policy)(struct regmap *, int, int, u64 *);
-	int (*update_policy)(struct regmap *, int, int, int);
-	int (*exec_mipi_pmic_seq_element)(struct regmap *, u16, u32, u32, u32);
-	struct pmic_table *power_table;
-	int power_table_count;
-	struct pmic_table *thermal_table;
-	int thermal_table_count;
-	int pmic_i2c_address;
-};
-
-struct intel_pmic_regs_handler_ctx {
-	unsigned int val;
-	u16 addr;
-};
-
-struct intel_pmic_opregion {
-	struct mutex lock;
-	struct acpi_lpat_conversion_table *lpat_table;
-	struct regmap *regmap;
-	struct intel_pmic_opregion_data *data;
-	struct intel_pmic_regs_handler_ctx ctx;
-};
-
-struct acpi_table_iort {
-	struct acpi_table_header header;
-	u32 node_count;
-	u32 node_offset;
-	u32 reserved;
-};
-
-struct acpi_iort_node {
-	u8 type;
-	u16 length;
-	u8 revision;
-	u32 reserved;
-	u32 mapping_count;
-	u32 mapping_offset;
-	char node_data[1];
-} __attribute__((packed));
-
-enum acpi_iort_node_type {
-	ACPI_IORT_NODE_ITS_GROUP = 0,
-	ACPI_IORT_NODE_NAMED_COMPONENT = 1,
-	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 2,
-	ACPI_IORT_NODE_SMMU = 3,
-	ACPI_IORT_NODE_SMMU_V3 = 4,
-	ACPI_IORT_NODE_PMCG = 5,
-};
-
-struct acpi_iort_id_mapping {
-	u32 input_base;
-	u32 id_count;
-	u32 output_base;
-	u32 output_reference;
-	u32 flags;
-};
-
-struct acpi_iort_its_group {
-	u32 its_count;
-	u32 identifiers[1];
-};
-
-struct acpi_iort_named_component {
-	u32 node_flags;
-	u64 memory_properties;
-	u8 memory_address_limit;
-	char device_name[1];
-} __attribute__((packed));
-
-struct acpi_iort_root_complex {
-	u64 memory_properties;
-	u32 ats_attribute;
-	u32 pci_segment_number;
-	u8 memory_address_limit;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_iort_smmu {
-	u64 base_address;
-	u64 span;
-	u32 model;
-	u32 flags;
-	u32 global_interrupt_offset;
-	u32 context_interrupt_count;
-	u32 context_interrupt_offset;
-	u32 pmu_interrupt_count;
-	u32 pmu_interrupt_offset;
-	u64 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_iort_smmu_v3 {
-	u64 base_address;
-	u32 flags;
-	u32 reserved;
-	u64 vatos_address;
-	u32 model;
-	u32 event_gsiv;
-	u32 pri_gsiv;
-	u32 gerr_gsiv;
-	u32 sync_gsiv;
-	u32 pxm;
-	u32 id_mapping_index;
-} __attribute__((packed));
-
-struct acpi_iort_pmcg {
-	u64 page0_base_address;
-	u32 overflow_gsiv;
-	u32 node_reference;
-	u64 page1_base_address;
-};
-
-struct iort_its_msi_chip {
-	struct list_head list;
-	struct fwnode_handle *fw_node;
-	phys_addr_t base_addr;
-	u32 translation_id;
-};
-
-struct iort_fwnode {
-	struct list_head list;
-	struct acpi_iort_node *iort_node;
-	struct fwnode_handle *fwnode;
-};
-
-typedef acpi_status (*iort_find_node_callback)(struct acpi_iort_node *, void *);
-
-struct iort_pci_alias_info {
-	struct device *dev;
-	struct acpi_iort_node *node;
-};
-
-struct iort_dev_config {
-	const char *name;
-	int (*dev_init)(struct acpi_iort_node *);
-	void (*dev_dma_configure)(struct device *, struct acpi_iort_node *);
-	int (*dev_count_resources)(struct acpi_iort_node *);
-	void (*dev_init_resources)(struct resource *, struct acpi_iort_node *);
-	int (*dev_set_proximity)(struct device *, struct acpi_iort_node *);
-	int (*dev_add_platdata)(struct platform_device *);
-};
-
-enum arch_timer_ppi_nr {
-	ARCH_TIMER_PHYS_SECURE_PPI = 0,
-	ARCH_TIMER_PHYS_NONSECURE_PPI = 1,
-	ARCH_TIMER_VIRT_PPI = 2,
-	ARCH_TIMER_HYP_PPI = 3,
-	ARCH_TIMER_MAX_TIMER_PPI = 4,
-};
-
-struct arch_timer_mem_frame {
-	bool valid;
-	phys_addr_t cntbase;
-	size_t size;
-	int phys_irq;
-	int virt_irq;
-};
-
-struct arch_timer_mem {
-	phys_addr_t cntctlbase;
-	size_t size;
-	struct arch_timer_mem_frame frame[8];
-};
-
-struct acpi_table_gtdt {
-	struct acpi_table_header header;
-	u64 counter_block_addresss;
-	u32 reserved;
-	u32 secure_el1_interrupt;
-	u32 secure_el1_flags;
-	u32 non_secure_el1_interrupt;
-	u32 non_secure_el1_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 non_secure_el2_interrupt;
-	u32 non_secure_el2_flags;
-	u64 counter_read_block_address;
-	u32 platform_timer_count;
-	u32 platform_timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_header {
-	u8 type;
-	u16 length;
-} __attribute__((packed));
-
-enum acpi_gtdt_type {
-	ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
-	ACPI_GTDT_TYPE_WATCHDOG = 1,
-	ACPI_GTDT_TYPE_RESERVED = 2,
-};
-
-struct acpi_gtdt_timer_block {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 block_address;
-	u32 timer_count;
-	u32 timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_timer_entry {
-	u8 frame_number;
-	u8 reserved[3];
-	u64 base_address;
-	u64 el0_base_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 common_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_watchdog {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 refresh_frame_address;
-	u64 control_frame_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_descriptor {
-	struct acpi_table_gtdt *gtdt;
-	void *gtdt_end;
-	void *platform_timer;
-};
-
-struct pnp_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-};
-
-struct pnp_card_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-	struct {
-		__u8 id[8];
-	} devs[8];
-};
-
-struct pnp_protocol;
-
-struct pnp_id;
-
-struct pnp_card {
-	struct device dev;
-	unsigned char number;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head devices;
-	struct pnp_protocol *protocol;
-	struct pnp_id *id;
-	char name[50];
-	unsigned char pnpver;
-	unsigned char productver;
-	unsigned int serial;
-	unsigned char checksum;
-	struct proc_dir_entry *procdir;
-};
-
-struct pnp_dev;
-
-struct pnp_protocol {
-	struct list_head protocol_list;
-	char *name;
-	int (*get)(struct pnp_dev *);
-	int (*set)(struct pnp_dev *);
-	int (*disable)(struct pnp_dev *);
-	bool (*can_wakeup)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	unsigned char number;
-	struct device dev;
-	struct list_head cards;
-	struct list_head devices;
-};
-
-struct pnp_id {
-	char id[8];
-	struct pnp_id *next;
-};
-
-struct pnp_card_driver;
-
-struct pnp_card_link {
-	struct pnp_card *card;
-	struct pnp_card_driver *driver;
-	void *driver_data;
-	pm_message_t pm_state;
-};
-
-struct pnp_driver {
-	const char *name;
-	const struct pnp_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
-	void (*remove)(struct pnp_dev *);
-	void (*shutdown)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	struct device_driver driver;
-};
-
-struct pnp_card_driver {
-	struct list_head global_list;
-	char *name;
-	const struct pnp_card_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
-	void (*remove)(struct pnp_card_link *);
-	int (*suspend)(struct pnp_card_link *, pm_message_t);
-	int (*resume)(struct pnp_card_link *);
-	struct pnp_driver link;
-};
-
-struct pnp_dev {
-	struct device dev;
-	u64 dma_mask;
-	unsigned int number;
-	int status;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head card_list;
-	struct list_head rdev_list;
-	struct pnp_protocol *protocol;
-	struct pnp_card *card;
-	struct pnp_driver *driver;
-	struct pnp_card_link *card_link;
-	struct pnp_id *id;
-	int active;
-	int capabilities;
-	unsigned int num_dependent_sets;
-	struct list_head resources;
-	struct list_head options;
-	char name[50];
-	int flags;
-	struct proc_dir_entry *procent;
-	void *data;
-};
-
-struct pnp_resource {
-	struct list_head list;
-	struct resource res;
-};
-
-struct pnp_port {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-typedef struct {
-	long unsigned int bits[4];
-} pnp_irq_mask_t;
-
-struct pnp_irq {
-	pnp_irq_mask_t map;
-	unsigned char flags;
-};
-
-struct pnp_dma {
-	unsigned char map;
-	unsigned char flags;
-};
-
-struct pnp_mem {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-struct pnp_option {
-	struct list_head list;
-	unsigned int flags;
-	long unsigned int type;
-	union {
-		struct pnp_port port;
-		struct pnp_irq irq;
-		struct pnp_dma dma;
-		struct pnp_mem mem;
-	} u;
-};
-
-struct pnp_info_buffer {
-	char *buffer;
-	char *curr;
-	long unsigned int size;
-	long unsigned int len;
-	int stop;
-	int error;
-};
-
-typedef struct pnp_info_buffer pnp_info_buffer_t;
-
 struct pnp_fixup {
 	char id[7];
 	void (*quirk_function)(struct pnp_dev *);
 };
 
-struct acpipnp_parse_option_s {
-	struct pnp_dev *dev;
-	unsigned int option_flags;
-};
-
-struct deferred_device {
-	struct amba_device *dev;
-	struct resource *parent;
-	struct list_head node;
-};
-
-struct find_data {
-	struct amba_device *dev;
-	struct device *parent;
-	const char *busid;
-	unsigned int id;
-	unsigned int mask;
-};
-
-struct tegra_ahb {
-	void *regs;
-	struct device *dev;
-	u32 ctx[0];
-};
-
-struct clk_bulk_devres {
-	struct clk_bulk_data *clks;
-	int num_clks;
-};
-
-struct clk_hw;
-
-struct clk_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct clk *clk;
-	struct clk_hw *clk_hw;
-};
-
-struct clk_core;
-
-struct clk_init_data;
-
-struct clk_hw {
-	struct clk_core *core;
-	struct clk *clk;
-	const struct clk_init_data *init;
-};
-
-struct clk_rate_request {
-	long unsigned int rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int best_parent_rate;
-	struct clk_hw *best_parent_hw;
-};
-
-struct clk_duty {
-	unsigned int num;
-	unsigned int den;
-};
-
-struct clk_ops {
-	int (*prepare)(struct clk_hw *);
-	void (*unprepare)(struct clk_hw *);
-	int (*is_prepared)(struct clk_hw *);
-	void (*unprepare_unused)(struct clk_hw *);
-	int (*enable)(struct clk_hw *);
-	void (*disable)(struct clk_hw *);
-	int (*is_enabled)(struct clk_hw *);
-	void (*disable_unused)(struct clk_hw *);
-	int (*save_context)(struct clk_hw *);
-	void (*restore_context)(struct clk_hw *);
-	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
-	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
-	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
-	int (*set_parent)(struct clk_hw *, u8);
-	u8 (*get_parent)(struct clk_hw *);
-	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
-	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
-	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
-	int (*get_phase)(struct clk_hw *);
-	int (*set_phase)(struct clk_hw *, int);
-	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*init)(struct clk_hw *);
-	void (*terminate)(struct clk_hw *);
-	void (*debug_init)(struct clk_hw *, struct dentry *);
-};
-
-struct clk_parent_data {
-	const struct clk_hw *hw;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct clk_init_data {
-	const char *name;
-	const struct clk_ops *ops;
-	const char * const *parent_names;
-	const struct clk_parent_data *parent_data;
-	const struct clk_hw **parent_hws;
-	u8 num_parents;
-	long unsigned int flags;
-};
-
 struct clk_lookup_alloc {
 	struct clk_lookup cl;
 	char dev_id[20];
 	char con_id[16];
 };
 
-struct clk_notifier {
-	struct clk *clk;
-	struct srcu_notifier_head notifier_head;
-	struct list_head node;
-};
-
-struct clk {
-	struct clk_core *core;
-	struct device *dev;
-	const char *dev_id;
-	const char *con_id;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	unsigned int exclusive_count;
-	struct hlist_node clks_node;
-};
-
-struct clk_notifier_data {
-	struct clk *clk;
-	long unsigned int old_rate;
-	long unsigned int new_rate;
-};
-
-struct clk_parent_map;
-
-struct clk_core {
-	const char *name;
-	const struct clk_ops *ops;
-	struct clk_hw *hw;
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct clk_core *parent;
-	struct clk_parent_map *parents;
-	u8 num_parents;
-	u8 new_parent_index;
-	long unsigned int rate;
-	long unsigned int req_rate;
-	long unsigned int new_rate;
-	struct clk_core *new_parent;
-	struct clk_core *new_child;
-	long unsigned int flags;
-	bool orphan;
-	bool rpm_enabled;
-	unsigned int enable_count;
-	unsigned int prepare_count;
-	unsigned int protect_count;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int accuracy;
-	int phase;
-	struct clk_duty duty;
-	struct hlist_head children;
-	struct hlist_node child_node;
-	struct hlist_head clks;
-	unsigned int notifier_count;
-	struct dentry *dentry;
-	struct hlist_node debug_node;
-	struct kref ref;
-};
-
-struct clk_onecell_data {
-	struct clk **clks;
-	unsigned int clk_num;
-};
-
-struct clk_hw_onecell_data {
-	unsigned int num;
-	struct clk_hw *hws[0];
-};
-
-struct clk_parent_map {
-	const struct clk_hw *hw;
-	struct clk_core *core;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct trace_event_raw_clk {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_rate {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int rate;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_parent {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_pname;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_phase {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int phase;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_duty_cycle {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int num;
-	unsigned int den;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_clk {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_rate {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_parent {
-	u32 name;
-	u32 pname;
-};
-
-struct trace_event_data_offsets_clk_phase {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_duty_cycle {
-	u32 name;
-};
-
-typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
-
-typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
-
-struct of_clk_provider {
-	struct list_head link;
-	struct device_node *node;
-	struct clk * (*get)(struct of_phandle_args *, void *);
-	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
-	void *data;
-};
-
-struct clock_provider {
-	void (*clk_init_cb)(struct device_node *);
-	struct device_node *np;
-	struct list_head node;
-};
-
-struct clk_div_table {
-	unsigned int val;
-	unsigned int div;
-};
-
-struct clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-typedef void (*of_init_fn_1)(struct device_node *);
-
-struct clk_fixed_factor {
-	struct clk_hw hw;
-	unsigned int mult;
-	unsigned int div;
-};
-
-struct clk_fixed_rate {
-	struct clk_hw hw;
-	long unsigned int fixed_rate;
-	long unsigned int fixed_accuracy;
-	long unsigned int flags;
-};
-
-struct clk_gate {
-	struct clk_hw hw;
-	void *reg;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_multiplier {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_mux {
-	struct clk_hw hw;
-	void *reg;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_composite {
-	struct clk_hw hw;
-	struct clk_ops ops;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *rate_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct clk_fractional_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 mshift;
-	u8 mwidth;
-	u32 mmask;
-	u8 nshift;
-	u8 nwidth;
-	u32 nmask;
-	u8 flags;
-	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
-	spinlock_t *lock;
-};
-
-struct clk_gpio {
-	struct clk_hw hw;
-	struct gpio_desc *gpiod;
-};
-
 struct ccsr_guts {
 	u32 porpllsr;
 	u32 porbmsr;
@@ -71934,313 +96038,6 @@
 	int num_parents;
 };
 
-struct scpi_opp {
-	u32 freq;
-	u32 m_volt;
-};
-
-struct scpi_dvfs_info {
-	unsigned int count;
-	unsigned int latency;
-	struct scpi_opp *opps;
-};
-
-struct scpi_sensor_info {
-	u16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct scpi_ops {
-	u32 (*get_version)();
-	int (*clk_get_range)(u16, long unsigned int *, long unsigned int *);
-	long unsigned int (*clk_get_val)(u16);
-	int (*clk_set_val)(u16, long unsigned int);
-	int (*dvfs_get_idx)(u8);
-	int (*dvfs_set_idx)(u8, u8);
-	struct scpi_dvfs_info * (*dvfs_get_info)(u8);
-	int (*device_domain_id)(struct device *);
-	int (*get_transition_latency)(struct device *);
-	int (*add_opps_to_device)(struct device *);
-	int (*sensor_get_capability)(u16 *);
-	int (*sensor_get_info)(u16, struct scpi_sensor_info *);
-	int (*sensor_get_value)(u16, u64 *);
-	int (*device_get_power_state)(u16);
-	int (*device_set_power_state)(u16, u8);
-};
-
-struct scpi_clk {
-	u32 id;
-	struct clk_hw hw;
-	struct scpi_dvfs_info *info;
-	struct scpi_ops *scpi_ops;
-};
-
-struct scpi_clk_data {
-	struct scpi_clk **clk;
-	unsigned int clk_num;
-};
-
-enum xgene_pll_type {
-	PLL_TYPE_PCP = 0,
-	PLL_TYPE_SOC = 1,
-};
-
-struct xgene_clk_pll {
-	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	u32 pll_offset;
-	enum xgene_pll_type type;
-	int version;
-};
-
-struct xgene_clk_pmd {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u32 mask;
-	u64 denom;
-	u32 flags;
-	spinlock_t *lock;
-};
-
-struct xgene_dev_parameters {
-	void *csr_reg;
-	u32 reg_clk_offset;
-	u32 reg_clk_mask;
-	u32 reg_csr_offset;
-	u32 reg_csr_mask;
-	void *divider_reg;
-	u32 reg_divider_offset;
-	u32 reg_divider_shift;
-	u32 reg_divider_width;
-};
-
-struct xgene_clk {
-	struct clk_hw hw;
-	spinlock_t *lock;
-	struct xgene_dev_parameters param;
-};
-
-struct reset_controller_dev;
-
-struct reset_control_ops {
-	int (*reset)(struct reset_controller_dev *, long unsigned int);
-	int (*assert)(struct reset_controller_dev *, long unsigned int);
-	int (*deassert)(struct reset_controller_dev *, long unsigned int);
-	int (*status)(struct reset_controller_dev *, long unsigned int);
-};
-
-struct reset_controller_dev {
-	const struct reset_control_ops *ops;
-	struct module *owner;
-	struct list_head list;
-	struct list_head reset_control_head;
-	struct device *dev;
-	struct device_node *of_node;
-	int of_reset_n_cells;
-	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
-	unsigned int nr_resets;
-};
-
-struct reset_simple_data {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-	bool active_low;
-	bool status_active_low;
-	unsigned int reset_us;
-};
-
-struct clk_dvp {
-	struct clk_hw_onecell_data *data;
-	struct reset_simple_data reset;
-};
-
-struct bcm2835_cprman {
-	struct device *dev;
-	void *regs;
-	spinlock_t regs_lock;
-	unsigned int soc;
-	const char *real_parent_names[7];
-	struct clk_hw_onecell_data onecell;
-};
-
-struct cprman_plat_data {
-	unsigned int soc;
-};
-
-struct bcm2835_pll_ana_bits;
-
-struct bcm2835_pll_data {
-	const char *name;
-	u32 cm_ctrl_reg;
-	u32 a2w_ctrl_reg;
-	u32 frac_reg;
-	u32 ana_reg_base;
-	u32 reference_enable_mask;
-	u32 lock_mask;
-	u32 flags;
-	const struct bcm2835_pll_ana_bits *ana;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int max_fb_rate;
-};
-
-struct bcm2835_pll_ana_bits {
-	u32 mask0;
-	u32 set0;
-	u32 mask1;
-	u32 set1;
-	u32 mask3;
-	u32 set3;
-	u32 fb_prediv_mask;
-};
-
-struct bcm2835_pll_divider_data {
-	const char *name;
-	const char *source_pll;
-	u32 cm_reg;
-	u32 a2w_reg;
-	u32 load_mask;
-	u32 hold_mask;
-	u32 fixed_divider;
-	u32 flags;
-};
-
-struct bcm2835_clock_data {
-	const char *name;
-	const char * const *parents;
-	int num_mux_parents;
-	unsigned int set_rate_parent;
-	u32 ctl_reg;
-	u32 div_reg;
-	u32 int_bits;
-	u32 frac_bits;
-	u32 flags;
-	bool is_vpu_clock;
-	bool is_mash_clock;
-	bool low_jitter;
-	u32 tcnt_mux;
-};
-
-struct bcm2835_gate_data {
-	const char *name;
-	const char *parent;
-	u32 ctl_reg;
-};
-
-struct bcm2835_pll {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_data *data;
-};
-
-struct bcm2835_pll_divider {
-	struct clk_divider div;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_divider_data *data;
-};
-
-struct bcm2835_clock {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_clock_data *data;
-};
-
-struct bcm2835_clk_desc {
-	struct clk_hw * (*clk_register)(struct bcm2835_cprman *, const void *);
-	unsigned int supported;
-	const void *data;
-};
-
-struct hisi_clock_data {
-	struct clk_onecell_data clk_data;
-	void *base;
-};
-
-struct hisi_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct hisi_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct hisi_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-	u32 *table;
-	const char *alias;
-};
-
-struct hisi_phase_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_names;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 *phase_degrees;
-	u32 *phase_regvals;
-	u8 phase_num;
-};
-
-struct hisi_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-	const char *alias;
-};
-
-struct hi6220_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 mask_bit;
-	const char *alias;
-};
-
-struct hisi_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-	const char *alias;
-};
-
 struct clkgate_separated {
 	struct clk_hw hw;
 	void *enable;
@@ -72259,6 +96056,19 @@
 	spinlock_t *lock;
 };
 
+struct hisi_phase_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_names;
+	long unsigned int flags;
+	long unsigned int offset;
+	u8 shift;
+	u8 width;
+	u32 *phase_degrees;
+	u32 *phase_regvals;
+	u8 phase_num;
+};
+
 struct clk_hisi_phase {
 	struct clk_hw hw;
 	void *reg;
@@ -72271,245 +96081,17 @@
 	spinlock_t *lock;
 };
 
-struct hisi_crg_funcs {
-	struct hisi_clock_data * (*register_clks)(struct platform_device *);
-	void (*unregister_clks)(struct platform_device *);
+struct imx_clk_scu_rsrc_table {
+	const u32 *rsrc;
+	u8 num;
 };
 
-struct hisi_reset_controller;
-
-struct hisi_crg_dev {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-	const struct hisi_crg_funcs *funcs;
-};
-
-struct hi3519_crg_data {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-};
-
-struct hisi_reset_controller___2 {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-};
-
-struct mbox_chan___2;
-
-struct hi6220_stub_clk {
-	u32 id;
-	struct device *dev;
+struct clk_lpcg_scu {
 	struct clk_hw hw;
-	struct regmap *dfs_map;
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi6220_mbox_msg {
-	unsigned char type;
-	unsigned char cmd;
-	unsigned char obj;
-	unsigned char src;
-	unsigned char para[4];
-};
-
-union hi6220_mbox_data {
-	unsigned int data[8];
-	struct hi6220_mbox_msg msg;
-};
-
-struct hi3660_stub_clk_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi3660_stub_clk {
-	unsigned int id;
-	struct clk_hw hw;
-	unsigned int cmd;
-	unsigned int msg[8];
-	unsigned int rate;
-};
-
-struct mtk_fixed_clk {
-	int id;
-	const char *name;
-	const char *parent;
-	long unsigned int rate;
-};
-
-struct mtk_fixed_factor {
-	int id;
-	const char *name;
-	const char *parent_name;
-	int mult;
-	int div;
-};
-
-struct mtk_composite {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	const char *parent;
-	unsigned int flags;
-	uint32_t mux_reg;
-	uint32_t divider_reg;
-	uint32_t gate_reg;
-	signed char mux_shift;
-	signed char mux_width;
-	signed char gate_shift;
-	signed char divider_shift;
-	signed char divider_width;
-	u8 mux_flags;
-	signed char num_parents;
-};
-
-struct mtk_gate_regs {
-	u32 sta_ofs;
-	u32 clr_ofs;
-	u32 set_ofs;
-};
-
-struct mtk_gate {
-	int id;
-	const char *name;
-	const char *parent_name;
-	const struct mtk_gate_regs *regs;
-	int shift;
-	const struct clk_ops *ops;
-	long unsigned int flags;
-};
-
-struct mtk_clk_divider {
-	int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	u32 div_reg;
-	unsigned char div_shift;
-	unsigned char div_width;
-	unsigned char clk_divider_flags;
-	const struct clk_div_table *clk_div_table;
-};
-
-struct mtk_pll_div_table {
-	u32 div;
-	long unsigned int freq;
-};
-
-struct mtk_pll_data {
-	int id;
-	const char *name;
-	uint32_t reg;
-	uint32_t pwr_reg;
-	uint32_t en_mask;
-	uint32_t pd_reg;
-	uint32_t tuner_reg;
-	uint32_t tuner_en_reg;
-	uint8_t tuner_en_bit;
-	int pd_shift;
-	unsigned int flags;
-	const struct clk_ops *ops;
-	u32 rst_bar_mask;
-	long unsigned int fmin;
-	long unsigned int fmax;
-	int pcwbits;
-	int pcwibits;
-	uint32_t pcw_reg;
-	int pcw_shift;
-	uint32_t pcw_chg_reg;
-	const struct mtk_pll_div_table *div_table;
-	const char *parent_name;
-};
-
-struct mtk_clk_pll {
-	struct clk_hw hw;
-	void *base_addr;
-	void *pd_addr;
-	void *pwr_addr;
-	void *tuner_addr;
-	void *tuner_en_addr;
-	void *pcw_addr;
-	void *pcw_chg_addr;
-	const struct mtk_pll_data *data;
-};
-
-struct mtk_clk_gate {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	int set_ofs;
-	int clr_ofs;
-	int sta_ofs;
-	u8 bit;
-};
-
-struct mtk_ref2usb_tx {
-	struct clk_hw hw;
-	void *base_addr;
-};
-
-struct mtk_clk_cpumux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 mask;
-	u8 shift;
-};
-
-struct mtk_reset {
-	struct regmap *regmap;
-	int regofs;
-	struct reset_controller_dev rcdev;
-};
-
-struct mtk_mux;
-
-struct mtk_clk_mux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	const struct mtk_mux *data;
-	spinlock_t *lock;
-};
-
-struct mtk_mux {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	unsigned int flags;
-	u32 mux_ofs;
-	u32 set_ofs;
-	u32 clr_ofs;
-	u32 upd_ofs;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 gate_shift;
-	s8 upd_shift;
-	const struct clk_ops *ops;
-	signed char num_parents;
-};
-
-struct clk_mt8167_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct mtk_clk_usb {
-	int id;
-	const char *name;
-	const char *parent;
-	u32 reg_ofs;
-};
-
-struct clk_mt8173_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct clk_regmap {
-	struct clk_hw hw;
-	struct regmap *map;
-	void *data;
+	void *reg;
+	u8 bit_idx;
+	bool hw_gate;
+	u32 state;
 };
 
 struct meson_aoclk_data {
@@ -72521,23 +96103,6 @@
 	const struct clk_hw_onecell_data *hw_data;
 };
 
-struct meson_aoclk_reset_controller {
-	struct reset_controller_dev reset;
-	const struct meson_aoclk_data *data;
-	struct regmap *regmap;
-};
-
-struct parm {
-	u16 reg_off;
-	u8 shift;
-	u8 width;
-};
-
-struct meson_clk_cpu_dyndiv_data {
-	struct parm div;
-	struct parm dyn;
-};
-
 struct meson_clk_dualdiv_param {
 	unsigned int n1;
 	unsigned int n2;
@@ -72555,119 +96120,6 @@
 	const struct meson_clk_dualdiv_param *table;
 };
 
-struct reg_sequence {
-	unsigned int reg;
-	unsigned int def;
-	unsigned int delay_us;
-};
-
-struct meson_eeclkc_data {
-	struct clk_regmap * const *regmap_clks;
-	unsigned int regmap_clk_num;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	struct clk_hw_onecell_data *hw_onecell_data;
-};
-
-struct meson_clk_mpll_data {
-	struct parm sdm;
-	struct parm sdm_en;
-	struct parm n2;
-	struct parm ssen;
-	struct parm misc;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	spinlock_t *lock;
-	u8 flags;
-};
-
-struct pll_params_table {
-	unsigned int m;
-	unsigned int n;
-};
-
-struct pll_mult_range {
-	unsigned int min;
-	unsigned int max;
-};
-
-struct meson_clk_pll_data {
-	struct parm en;
-	struct parm m;
-	struct parm n;
-	struct parm frac;
-	struct parm l;
-	struct parm rst;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	const struct pll_params_table *table;
-	const struct pll_mult_range *range;
-	u8 flags;
-};
-
-struct clk_regmap_gate_data {
-	unsigned int offset;
-	u8 bit_idx;
-	u8 flags;
-};
-
-struct clk_regmap_div_data {
-	unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-};
-
-struct clk_regmap_mux_data {
-	unsigned int offset;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-};
-
-struct meson_vid_pll_div_data {
-	struct parm val;
-	struct parm sel;
-};
-
-struct vid_pll_div {
-	unsigned int shift_val;
-	unsigned int shift_sel;
-	unsigned int divider;
-	unsigned int multiplier;
-};
-
-struct g12a_cpu_clk_postmux_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *xtal;
-	struct clk_hw *cpu_clk_dyn;
-	struct clk_hw *cpu_clk_postmux0;
-	struct clk_hw *cpu_clk_postmux1;
-	struct clk_hw *cpu_clk_premux1;
-};
-
-struct g12a_sys_pll_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *sys_pll;
-	struct clk_hw *cpu_clk;
-	struct clk_hw *cpu_clk_dyn;
-};
-
-struct meson_g12a_data {
-	const struct meson_eeclkc_data eeclkc_data;
-	int (*dvfs_setup)(struct platform_device *);
-};
-
-struct tbg_def {
-	char *name;
-	u32 refdiv_offset;
-	u32 fbdiv_offset;
-	u32 vcodiv_reg;
-	u32 vcodiv_offset;
-};
-
 struct clk_periph_driver_data {
 	struct clk_hw_onecell_data *hw_data;
 	spinlock_t lock;
@@ -72696,6 +96148,7 @@
 	void *reg_div;
 	u8 shift_div;
 	struct regmap *nb_pm_base;
+	long unsigned int l1_expiration;
 };
 
 struct clk_periph_data {
@@ -72709,417 +96162,6 @@
 	bool is_double_div;
 };
 
-struct cpu_dfs_regs {
-	unsigned int divider_reg;
-	unsigned int force_reg;
-	unsigned int ratio_reg;
-	unsigned int ratio_state_reg;
-	unsigned int divider_mask;
-	unsigned int cluster_offset;
-	unsigned int force_mask;
-	int divider_offset;
-	int divider_ratio;
-	int ratio_offset;
-	int ratio_state_offset;
-	int ratio_state_cluster_offset;
-};
-
-struct ap_cpu_clk {
-	unsigned int cluster;
-	const char *clk_name;
-	struct device *dev;
-	struct clk_hw hw;
-	struct regmap *pll_cr_base;
-	const struct cpu_dfs_regs *pll_regs;
-};
-
-enum {
-	CP110_CLK_TYPE_CORE = 0,
-	CP110_CLK_TYPE_GATABLE = 1,
-};
-
-struct cp110_gate_clk {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u8 bit_idx;
-};
-
-struct clk_regmap___2;
-
-struct qcom_reset_map;
-
-struct gdsc;
-
-struct qcom_cc_desc {
-	const struct regmap_config *config;
-	struct clk_regmap___2 **clks;
-	size_t num_clks;
-	const struct qcom_reset_map *resets;
-	size_t num_resets;
-	struct gdsc **gdscs;
-	size_t num_gdscs;
-	struct clk_hw **clk_hws;
-	size_t num_clk_hws;
-};
-
-struct clk_regmap___2 {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	bool enable_is_inverted;
-};
-
-struct qcom_reset_map {
-	unsigned int reg;
-	u8 bit;
-};
-
-enum gpd_status {
-	GENPD_STATE_ON = 0,
-	GENPD_STATE_OFF = 1,
-};
-
-struct opp_table;
-
-struct dev_pm_opp;
-
-struct gpd_dev_ops {
-	int (*start)(struct device *);
-	int (*stop)(struct device *);
-};
-
-struct dev_power_governor;
-
-struct genpd_power_state;
-
-struct genpd_lock_ops;
-
-struct generic_pm_domain {
-	struct device dev;
-	struct dev_pm_domain domain;
-	struct list_head gpd_list_node;
-	struct list_head parent_links;
-	struct list_head child_links;
-	struct list_head dev_list;
-	struct dev_power_governor *gov;
-	struct work_struct power_off_work;
-	struct fwnode_handle *provider;
-	bool has_provider;
-	const char *name;
-	atomic_t sd_count;
-	enum gpd_status status;
-	unsigned int device_count;
-	unsigned int suspended_count;
-	unsigned int prepared_count;
-	unsigned int performance_state;
-	cpumask_var_t cpus;
-	int (*power_off)(struct generic_pm_domain *);
-	int (*power_on)(struct generic_pm_domain *);
-	struct raw_notifier_head power_notifiers;
-	struct opp_table *opp_table;
-	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
-	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
-	struct gpd_dev_ops dev_ops;
-	s64 max_off_time_ns;
-	bool max_off_time_changed;
-	bool cached_power_down_ok;
-	bool cached_power_down_state_idx;
-	int (*attach_dev)(struct generic_pm_domain *, struct device *);
-	void (*detach_dev)(struct generic_pm_domain *, struct device *);
-	unsigned int flags;
-	struct genpd_power_state *states;
-	void (*free_states)(struct genpd_power_state *, unsigned int);
-	unsigned int state_count;
-	unsigned int state_idx;
-	ktime_t on_time;
-	ktime_t accounting_time;
-	const struct genpd_lock_ops *lock_ops;
-	union {
-		struct mutex mlock;
-		struct {
-			spinlock_t slock;
-			long unsigned int lock_flags;
-		};
-	};
-};
-
-struct gdsc {
-	struct generic_pm_domain pd;
-	struct generic_pm_domain *parent;
-	struct regmap *regmap;
-	unsigned int gdscr;
-	unsigned int gds_hw_ctrl;
-	unsigned int clamp_io_ctrl;
-	unsigned int *cxcs;
-	unsigned int cxc_count;
-	const u8 pwrsts;
-	const u8 flags;
-	struct reset_controller_dev *rcdev;
-	unsigned int *resets;
-	unsigned int reset_count;
-	const char *supply;
-	struct regulator *rsupply;
-};
-
-struct parent_map {
-	u8 src;
-	u8 cfg;
-};
-
-struct freq_tbl {
-	long unsigned int freq;
-	u8 src;
-	u8 pre_div;
-	u16 m;
-	u16 n;
-};
-
-struct qcom_reset_controller {
-	const struct qcom_reset_map *reset_map;
-	struct regmap *regmap;
-	struct reset_controller_dev rcdev;
-};
-
-struct dev_power_governor {
-	bool (*power_down_ok)(struct dev_pm_domain *);
-	bool (*suspend_ok)(struct device *);
-};
-
-struct genpd_power_state {
-	s64 power_off_latency_ns;
-	s64 power_on_latency_ns;
-	s64 residency_ns;
-	u64 usage;
-	u64 rejected;
-	struct fwnode_handle *fwnode;
-	ktime_t idle_time;
-	void *data;
-};
-
-struct genpd_lock_ops {
-	void (*lock)(struct generic_pm_domain *);
-	void (*lock_nested)(struct generic_pm_domain *, int);
-	int (*lock_interruptible)(struct generic_pm_domain *);
-	void (*unlock)(struct generic_pm_domain *);
-};
-
-struct gdsc_desc {
-	struct device *dev;
-	struct gdsc **scs;
-	size_t num;
-};
-
-struct qcom_cc {
-	struct qcom_reset_controller reset;
-	struct clk_regmap___2 **rclks;
-	size_t num_rclks;
-};
-
-enum {
-	CLK_ALPHA_PLL_TYPE_DEFAULT = 0,
-	CLK_ALPHA_PLL_TYPE_HUAYRA = 1,
-	CLK_ALPHA_PLL_TYPE_BRAMMO = 2,
-	CLK_ALPHA_PLL_TYPE_FABIA = 3,
-	CLK_ALPHA_PLL_TYPE_TRION = 4,
-	CLK_ALPHA_PLL_TYPE_LUCID = 4,
-	CLK_ALPHA_PLL_TYPE_MAX = 5,
-};
-
-enum {
-	PLL_OFF_L_VAL = 0,
-	PLL_OFF_CAL_L_VAL = 1,
-	PLL_OFF_ALPHA_VAL = 2,
-	PLL_OFF_ALPHA_VAL_U = 3,
-	PLL_OFF_USER_CTL = 4,
-	PLL_OFF_USER_CTL_U = 5,
-	PLL_OFF_USER_CTL_U1 = 6,
-	PLL_OFF_CONFIG_CTL = 7,
-	PLL_OFF_CONFIG_CTL_U = 8,
-	PLL_OFF_CONFIG_CTL_U1 = 9,
-	PLL_OFF_TEST_CTL = 10,
-	PLL_OFF_TEST_CTL_U = 11,
-	PLL_OFF_TEST_CTL_U1 = 12,
-	PLL_OFF_STATUS = 13,
-	PLL_OFF_OPMODE = 14,
-	PLL_OFF_FRAC = 15,
-	PLL_OFF_CAL_VAL = 16,
-	PLL_OFF_MAX_REGS = 17,
-};
-
-struct pll_vco {
-	long unsigned int min_freq;
-	long unsigned int max_freq;
-	u32 val;
-};
-
-struct clk_alpha_pll {
-	u32 offset;
-	const u8 *regs;
-	const struct pll_vco *vco_table;
-	size_t num_vco;
-	u8 flags;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_alpha_pll_postdiv {
-	u32 offset;
-	u8 width;
-	const u8 *regs;
-	struct clk_regmap___2 clkr;
-	int post_div_shift;
-	const struct clk_div_table *post_div_table;
-	size_t num_post_div;
-};
-
-struct alpha_pll_config {
-	u32 l;
-	u32 alpha;
-	u32 alpha_hi;
-	u32 config_ctl_val;
-	u32 config_ctl_hi_val;
-	u32 config_ctl_hi1_val;
-	u32 user_ctl_val;
-	u32 user_ctl_hi_val;
-	u32 user_ctl_hi1_val;
-	u32 test_ctl_val;
-	u32 test_ctl_hi_val;
-	u32 test_ctl_hi1_val;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-	u32 aux2_output_mask;
-	u32 early_output_mask;
-	u32 alpha_en_mask;
-	u32 alpha_mode_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 vco_val;
-	u32 vco_mask;
-};
-
-struct pll_freq_tbl {
-	long unsigned int freq;
-	u16 l;
-	u16 m;
-	u16 n;
-	u32 ibits;
-};
-
-struct clk_pll {
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 config_reg;
-	u32 mode_reg;
-	u32 status_reg;
-	u8 status_bit;
-	u8 post_div_width;
-	u8 post_div_shift;
-	const struct pll_freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct pll_config {
-	u16 l;
-	u32 m;
-	u32 n;
-	u32 vco_val;
-	u32 vco_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 mn_ena_mask;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-};
-
-struct mn {
-	u8 mnctr_en_bit;
-	u8 mnctr_reset_bit;
-	u8 mnctr_mode_shift;
-	u8 n_val_shift;
-	u8 m_val_shift;
-	u8 width;
-	bool reset_in_cc;
-};
-
-struct pre_div {
-	u8 pre_div_shift;
-	u8 pre_div_width;
-};
-
-struct src_sel {
-	u8 src_sel_shift;
-	const struct parent_map *parent_map;
-};
-
-struct clk_rcg {
-	u32 ns_reg;
-	u32 md_reg;
-	struct mn mn;
-	struct pre_div p;
-	struct src_sel s;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_dyn_rcg {
-	u32 ns_reg[2];
-	u32 md_reg[2];
-	u32 bank_reg;
-	u8 mux_sel_bit;
-	struct mn mn[2];
-	struct pre_div p[2];
-	struct src_sel s[2];
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct frac_entry {
-	int num;
-	int den;
-};
-
-struct clk_rcg2 {
-	u32 cmd_rcgr;
-	u8 mnd_width;
-	u8 hid_width;
-	u8 safe_src_index;
-	const struct parent_map *parent_map;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-	u8 cfg_off;
-};
-
-struct clk_rcg_dfs_data {
-	struct clk_rcg2 *rcg;
-	struct clk_init_data *init;
-};
-
-enum freq_policy {
-	FLOOR = 0,
-	CEIL = 1,
-};
-
-struct clk_branch {
-	u32 hwcg_reg;
-	u32 halt_reg;
-	u8 hwcg_bit;
-	u8 halt_bit;
-	u8 halt_check;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_div {
-	u32 reg;
-	u32 shift;
-	u32 width;
-	struct clk_regmap___2 clkr;
-};
-
 struct clk_regmap_mux {
 	u32 reg;
 	u32 shift;
@@ -73128,890 +96170,58 @@
 	struct clk_regmap___2 clkr;
 };
 
-struct clk_regmap_mux_div {
-	u32 reg_offset;
-	u32 hid_width;
-	u32 hid_shift;
-	u32 src_width;
-	u32 src_shift;
-	u32 div;
-	u32 src;
-	const u32 *parent_map;
-	struct clk_regmap___2 clkr;
-	struct clk *pclk;
-	struct notifier_block clk_nb;
-};
-
-struct hfpll_data {
-	u32 mode_reg;
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 user_reg;
-	u32 droop_reg;
-	u32 config_reg;
-	u32 status_reg;
-	u8 lock_bit;
-	u32 droop_val;
-	u32 config_val;
-	u32 user_val;
-	u32 user_vco_mask;
-	long unsigned int low_vco_max_rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-};
-
-struct clk_hfpll {
-	const struct hfpll_data *d;
-	int init_done;
-	struct clk_regmap___2 clkr;
-	spinlock_t lock;
-};
-
-typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
-
-struct genpd_onecell_data {
-	struct generic_pm_domain **domains;
-	unsigned int num_domains;
-	genpd_xlate_t xlate;
-};
-
-enum gdsc_status {
-	GDSC_OFF = 0,
-	GDSC_ON = 1,
-};
-
-enum {
-	P_XO = 0,
-	P_GPLL0 = 1,
-	P_GPLL0_AUX = 2,
-	P_BIMC = 3,
-	P_GPLL1 = 4,
-	P_GPLL1_AUX = 5,
-	P_GPLL2 = 6,
-	P_GPLL2_AUX = 7,
-	P_SLEEP_CLK = 8,
-	P_DSI0_PHYPLL_BYTE = 9,
-	P_DSI0_PHYPLL_DSI = 10,
-	P_EXT_PRI_I2S = 11,
-	P_EXT_SEC_I2S = 12,
-	P_EXT_MCLK = 13,
+struct qcom_reset_controller {
+	const struct qcom_reset_map *reset_map;
+	struct regmap *regmap;
+	struct reset_controller_dev rcdev;
 };
 
 enum {
 	P_XO___2 = 0,
 	P_GPLL0___2 = 1,
-	P_GPLL4 = 2,
-};
-
-enum {
-	P_XO___3 = 0,
-	P_GPLL0___3 = 1,
-	P_GPLL2___2 = 2,
-	P_GPLL3 = 3,
-	P_GPLL1___2 = 4,
-	P_GPLL2_EARLY = 5,
-	P_GPLL0_EARLY_DIV = 6,
+	P_GPLL1 = 2,
+	P_GPLL4___2 = 3,
+	P_PCIE_0_1_PIPE_CLK = 4,
+	P_SATA_ASIC0_CLK = 5,
+	P_SATA_RX_CLK = 6,
 	P_SLEEP_CLK___2 = 7,
-	P_GPLL4___2 = 8,
-	P_AUD_REF_CLK = 9,
-	P_GPLL1_EARLY_DIV = 10,
+};
+
+struct clk_rcg_dfs_data {
+	struct clk_rcg2 *rcg;
+	struct clk_init_data *init;
 };
 
 enum {
-	P_XO___4 = 0,
-	P_MMPLL0 = 1,
-	P_GPLL0___4 = 2,
-	P_GPLL0_DIV = 3,
-	P_MMPLL1 = 4,
-	P_MMPLL9 = 5,
-	P_MMPLL2 = 6,
-	P_MMPLL8 = 7,
-	P_MMPLL3 = 8,
-	P_DSI0PLL = 9,
-	P_DSI1PLL = 10,
-	P_MMPLL5 = 11,
-	P_HDMIPLL = 12,
-	P_DSI0PLL_BYTE = 13,
-	P_DSI1PLL_BYTE = 14,
-	P_MMPLL4 = 15,
+	P_BI_TCXO = 0,
+	P_CORE_BI_PLL_TEST_SE = 1,
+	P_GPLL0_OUT_EVEN = 2,
+	P_GPLL0_OUT_MAIN = 3,
+	P_GPLL1_OUT_MAIN = 4,
+	P_GPLL4_OUT_MAIN = 5,
+	P_GPLL6_OUT_MAIN = 6,
+	P_GPLL7_OUT_MAIN = 7,
+	P_SLEEP_CLK___3 = 8,
 };
 
-enum rockchip_pll_type {
-	pll_rk3036 = 0,
-	pll_rk3066 = 1,
-	pll_rk3328 = 2,
-	pll_rk3399 = 3,
+enum rk3568_pmu_plls {
+	ppll = 0,
+	hpll = 1,
 };
 
-struct rockchip_clk_provider {
-	void *reg_base;
-	struct clk_onecell_data clk_data;
-	struct device_node *cru_node;
-	struct regmap *grf;
-	spinlock_t lock;
-};
-
-struct rockchip_pll_rate_table {
-	long unsigned int rate;
-	unsigned int nr;
-	unsigned int nf;
-	unsigned int no;
-	unsigned int nb;
-	unsigned int fbdiv;
-	unsigned int postdiv1;
-	unsigned int refdiv;
-	unsigned int postdiv2;
-	unsigned int dsmpd;
-	unsigned int frac;
-};
-
-struct rockchip_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int con_offset;
-	int mode_offset;
-	int mode_shift;
-	int lock_shift;
-	enum rockchip_pll_type type;
-	u8 pll_flags;
-	struct rockchip_pll_rate_table *rate_table;
-};
-
-struct rockchip_cpuclk_clksel {
-	int reg;
-	u32 val;
-};
-
-struct rockchip_cpuclk_rate_table {
-	long unsigned int prate;
-	struct rockchip_cpuclk_clksel divs[2];
-};
-
-struct rockchip_cpuclk_reg_data {
-	int core_reg;
-	u8 div_core_shift;
-	u32 div_core_mask;
-	u8 mux_core_alt;
-	u8 mux_core_main;
-	u8 mux_core_shift;
-	u32 mux_core_mask;
-};
-
-enum rockchip_clk_branch_type {
-	branch_composite = 0,
-	branch_mux = 1,
-	branch_muxgrf = 2,
-	branch_divider = 3,
-	branch_fraction_divider = 4,
-	branch_gate = 5,
-	branch_mmc = 6,
-	branch_inverter = 7,
-	branch_factor = 8,
-	branch_ddrclk = 9,
-	branch_half_divider = 10,
-};
-
-struct rockchip_clk_branch {
-	unsigned int id;
-	enum rockchip_clk_branch_type branch_type;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int muxdiv_offset;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 mux_flags;
-	int div_offset;
-	u8 div_shift;
-	u8 div_width;
-	u8 div_flags;
-	struct clk_div_table *div_table;
-	int gate_offset;
-	u8 gate_shift;
-	u8 gate_flags;
-	struct rockchip_clk_branch *child;
-};
-
-struct rockchip_clk_frac {
-	struct notifier_block clk_nb;
-	struct clk_fractional_divider div;
-	struct clk_gate gate;
-	struct clk_mux mux;
-	const struct clk_ops *mux_ops;
-	int mux_frac_idx;
-	bool rate_change_remuxed;
-	int rate_change_idx;
-};
-
-struct rockchip_clk_pll {
-	struct clk_hw hw;
-	struct clk_mux pll_mux;
-	const struct clk_ops *pll_mux_ops;
-	struct notifier_block clk_nb;
-	void *reg_base;
-	int lock_offset;
-	unsigned int lock_shift;
-	enum rockchip_pll_type type;
-	u8 flags;
-	const struct rockchip_pll_rate_table *rate_table;
-	unsigned int rate_count;
-	spinlock_t *lock;
-	struct rockchip_clk_provider *ctx;
-};
-
-struct rockchip_cpuclk {
-	struct clk_hw hw;
-	struct clk_mux cpu_mux;
-	const struct clk_ops *cpu_mux_ops;
-	struct clk *alt_parent;
-	void *reg_base;
-	struct notifier_block clk_nb;
-	unsigned int rate_count;
-	struct rockchip_cpuclk_rate_table *rate_table;
-	const struct rockchip_cpuclk_reg_data *reg_data;
-	spinlock_t *lock;
-};
-
-struct rockchip_inv_clock {
-	struct clk_hw hw;
-	void *reg;
-	int shift;
-	int flags;
-	spinlock_t *lock;
-};
-
-struct rockchip_mmc_clock {
-	struct clk_hw hw;
-	void *reg;
-	int id;
-	int shift;
-	int cached_phase;
-	struct notifier_block clk_rate_change_nb;
-};
-
-struct rockchip_muxgrf_clock {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 shift;
-	u32 width;
-	int flags;
-};
-
-struct rockchip_ddrclk {
-	struct clk_hw hw;
-	void *reg_base;
-	int mux_offset;
-	int mux_shift;
-	int mux_width;
-	int div_shift;
-	int div_width;
-	int ddr_flag;
-	spinlock_t *lock;
-};
-
-struct rockchip_softrst {
-	struct reset_controller_dev rcdev;
-	void *reg_base;
-	int num_regs;
-	int num_per_reg;
-	u8 flags;
-	spinlock_t lock;
-};
-
-enum px30_plls {
-	apll = 0,
-	dpll = 1,
-	cpll = 2,
-	npll = 3,
-	apll_b_h = 4,
-	apll_b_l = 5,
-};
-
-enum px30_pmu_plls {
-	gpll = 0,
-};
-
-enum rv1108_plls {
+enum rk3568_plls {
 	apll___2 = 0,
-	dpll___2 = 1,
-	gpll___2 = 2,
-};
-
-enum rk3036_plls {
-	apll___3 = 0,
 	dpll___3 = 1,
 	gpll___3 = 2,
+	cpll___3 = 3,
+	npll___3 = 4,
+	vpll = 5,
 };
 
-enum rk3128_plls {
-	apll___4 = 0,
-	dpll___4 = 1,
-	cpll___2 = 2,
-	gpll___4 = 3,
-};
-
-enum rk3188_plls {
-	apll___5 = 0,
-	cpll___3 = 1,
-	dpll___5 = 2,
-	gpll___5 = 3,
-};
-
-enum rk3228_plls {
-	apll___6 = 0,
-	dpll___6 = 1,
-	cpll___4 = 2,
-	gpll___6 = 3,
-};
-
-enum rk3308_plls {
-	apll___7 = 0,
-	dpll___7 = 1,
-	vpll0 = 2,
-	vpll1 = 3,
-};
-
-enum rk3328_plls {
-	apll___8 = 0,
-	dpll___8 = 1,
-	cpll___5 = 2,
-	gpll___7 = 3,
-	npll___2 = 4,
-};
-
-enum rk3368_plls {
-	apllb = 0,
-	aplll = 1,
-	dpll___9 = 2,
-	cpll___6 = 3,
-	gpll___8 = 4,
-	npll___3 = 5,
-};
-
-enum rk3399_plls {
-	lpll = 0,
-	bpll = 1,
-	dpll___10 = 2,
-	cpll___7 = 3,
-	gpll___9 = 4,
-	npll___4 = 5,
-	vpll = 6,
-};
-
-enum rk3399_pmu_plls {
-	ppll = 0,
-};
-
-struct clk_rk3399_inits {
+struct clk_rk3568_inits {
 	void (*inits)(struct device_node *);
 };
 
-enum samsung_pll_type {
-	pll_2126 = 0,
-	pll_3000 = 1,
-	pll_35xx = 2,
-	pll_36xx = 3,
-	pll_2550 = 4,
-	pll_2650 = 5,
-	pll_4500 = 6,
-	pll_4502 = 7,
-	pll_4508 = 8,
-	pll_4600 = 9,
-	pll_4650 = 10,
-	pll_4650c = 11,
-	pll_6552 = 12,
-	pll_6552_s3c2416 = 13,
-	pll_6553 = 14,
-	pll_s3c2410_mpll = 15,
-	pll_s3c2410_upll = 16,
-	pll_s3c2440_mpll = 17,
-	pll_2550x = 18,
-	pll_2550xx = 19,
-	pll_2650x = 20,
-	pll_2650xx = 21,
-	pll_1450x = 22,
-	pll_1451x = 23,
-	pll_1452x = 24,
-	pll_1460x = 25,
-};
-
-struct samsung_pll_rate_table {
-	unsigned int rate;
-	unsigned int pdiv;
-	unsigned int mdiv;
-	unsigned int sdiv;
-	unsigned int kdiv;
-	unsigned int afc;
-	unsigned int mfr;
-	unsigned int mrr;
-	unsigned int vsel;
-};
-
-struct samsung_clk_provider {
-	void *reg_base;
-	struct device *dev;
-	spinlock_t lock;
-	struct clk_hw_onecell_data clk_data;
-};
-
-struct samsung_clock_alias {
-	unsigned int id;
-	const char *dev_name;
-	const char *alias;
-};
-
-struct samsung_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct samsung_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct samsung_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-};
-
-struct samsung_div_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-};
-
-struct samsung_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-};
-
-struct samsung_clk_reg_dump {
-	u32 offset;
-	u32 value;
-};
-
-struct samsung_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	int con_offset;
-	int lock_offset;
-	enum samsung_pll_type type;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct samsung_clock_reg_cache {
-	struct list_head node;
-	void *reg_base;
-	struct samsung_clk_reg_dump *rdump;
-	unsigned int rd_num;
-	const struct samsung_clk_reg_dump *rsuspend;
-	unsigned int rsuspend_num;
-};
-
-struct samsung_cmu_info {
-	const struct samsung_pll_clock *pll_clks;
-	unsigned int nr_pll_clks;
-	const struct samsung_mux_clock *mux_clks;
-	unsigned int nr_mux_clks;
-	const struct samsung_div_clock *div_clks;
-	unsigned int nr_div_clks;
-	const struct samsung_gate_clock *gate_clks;
-	unsigned int nr_gate_clks;
-	const struct samsung_fixed_rate_clock *fixed_clks;
-	unsigned int nr_fixed_clks;
-	const struct samsung_fixed_factor_clock *fixed_factor_clks;
-	unsigned int nr_fixed_factor_clks;
-	unsigned int nr_clk_ids;
-	const long unsigned int *clk_regs;
-	unsigned int nr_clk_regs;
-	const struct samsung_clk_reg_dump *suspend_regs;
-	unsigned int nr_suspend_regs;
-	const char *clk_name;
-};
-
-struct samsung_clk_pll {
-	struct clk_hw hw;
-	void *lock_reg;
-	void *con_reg;
-	short unsigned int enable_offs;
-	short unsigned int lock_offs;
-	enum samsung_pll_type type;
-	unsigned int rate_count;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct exynos_cpuclk_cfg_data {
-	long unsigned int prate;
-	long unsigned int div0;
-	long unsigned int div1;
-};
-
-struct exynos_cpuclk {
-	struct clk_hw hw;
-	const struct clk_hw *alt_parent;
-	void *ctrl_base;
-	spinlock_t *lock;
-	const struct exynos_cpuclk_cfg_data *cfg;
-	const long unsigned int num_cfgs;
-	struct notifier_block clk_nb;
-	long unsigned int flags;
-};
-
-struct exynos5433_cmu_data {
-	struct samsung_clk_reg_dump *clk_save;
-	unsigned int nr_clk_save;
-	const struct samsung_clk_reg_dump *clk_suspend;
-	unsigned int nr_clk_suspend;
-	struct clk *clk;
-	struct clk **pclks;
-	int nr_pclks;
-	struct samsung_clk_provider ctx;
-};
-
-struct exynos_audss_clk_drvdata {
-	unsigned int has_adma_clk: 1;
-	unsigned int has_mst_clk: 1;
-	unsigned int enable_epll: 1;
-	unsigned int num_clks;
-};
-
-struct exynos_clkout {
-	struct clk_gate gate;
-	struct clk_mux mux;
-	spinlock_t slock;
-	void *reg;
-	u32 pmu_debug_save;
-	struct clk_hw_onecell_data data;
-};
-
-struct clk_factors_config {
-	u8 nshift;
-	u8 nwidth;
-	u8 kshift;
-	u8 kwidth;
-	u8 mshift;
-	u8 mwidth;
-	u8 pshift;
-	u8 pwidth;
-	u8 n_start;
-};
-
-struct factors_request {
-	long unsigned int rate;
-	long unsigned int parent_rate;
-	u8 parent_index;
-	u8 n;
-	u8 k;
-	u8 m;
-	u8 p;
-};
-
-struct factors_data {
-	int enable;
-	int mux;
-	int muxmask;
-	const struct clk_factors_config *table;
-	void (*getter)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	const char *name;
-};
-
-struct clk_factors {
-	struct clk_hw hw;
-	void *reg;
-	const struct clk_factors_config *config;
-	void (*get_factors)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	spinlock_t *lock;
-	struct clk_mux *mux;
-	struct clk_gate *gate;
-};
-
-struct mux_data {
-	u8 shift;
-};
-
-struct div_data {
-	u8 shift;
-	u8 pow;
-	u8 width;
-	const struct clk_div_table *table;
-};
-
-struct divs_data {
-	const struct factors_data *factors;
-	int ndivs;
-	struct {
-		u8 self;
-		u8 fixed;
-		struct clk_div_table *table;
-		u8 shift;
-		u8 pow;
-		u8 gate;
-		bool critical;
-	} div[4];
-};
-
-struct ve_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct mmc_phase {
-	struct clk_hw hw;
-	u8 offset;
-	void *reg;
-	spinlock_t *lock;
-};
-
-struct sun4i_a10_display_clk_data {
-	bool has_div;
-	u8 num_rst;
-	u8 parents;
-	u8 offset_en;
-	u8 offset_div;
-	u8 offset_mux;
-	u8 offset_rst;
-	u8 width_div;
-	u8 width_mux;
-	u32 flags;
-};
-
-struct reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-	u8 offset;
-};
-
-struct tcon_ch1_clk {
-	struct clk_hw hw;
-	spinlock_t lock;
-	void *reg;
-};
-
-enum {
-	AHB1 = 0,
-	AHB2 = 1,
-	APB1 = 2,
-	APB2 = 3,
-	PARENT_MAX = 4,
-};
-
-struct sun9i_mmc_clk_data {
-	spinlock_t lock;
-	void *membase;
-	struct clk *clk;
-	struct reset_control *reset;
-	struct clk_onecell_data clk_data;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct clk *clk;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_clk_data {
-	u32 clk_mask;
-	u32 reset_mask;
-	bool reset_needs_clk;
-};
-
-struct sun9i_a80_cpus_clk {
-	struct clk_hw hw;
-	void *reg;
-};
-
-struct gates_data {
-	long unsigned int mask[1];
-};
-
-struct ccu_common {
-	void *base;
-	u16 reg;
-	u16 lock_reg;
-	u32 prediv;
-	long unsigned int features;
-	spinlock_t *lock;
-	struct clk_hw hw;
-};
-
-struct ccu_reset_map;
-
-struct sunxi_ccu_desc {
-	struct ccu_common **ccu_clks;
-	long unsigned int num_ccu_clks;
-	struct clk_hw_onecell_data *hw_clks;
-	struct ccu_reset_map *resets;
-	long unsigned int num_resets;
-};
-
-struct ccu_reset_map {
-	u16 reg;
-	u32 bit;
-};
-
-struct ccu_pll_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	u32 enable;
-	u32 lock;
-};
-
-struct ccu_reset {
-	void *base;
-	struct ccu_reset_map *reset_map;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct ccu_mux_fixed_prediv {
-	u8 index;
-	u16 div;
-};
-
-struct ccu_mux_var_prediv {
-	u8 index;
-	u8 shift;
-	u8 width;
-};
-
-struct ccu_mux_internal {
-	u8 shift;
-	u8 width;
-	const u8 *table;
-	const struct ccu_mux_fixed_prediv *fixed_predivs;
-	u8 n_predivs;
-	const struct ccu_mux_var_prediv *var_predivs;
-	u8 n_var_predivs;
-};
-
-struct ccu_div_internal {
-	u8 shift;
-	u8 width;
-	u32 max;
-	u32 offset;
-	u32 flags;
-	struct clk_div_table *table;
-};
-
-struct ccu_div {
-	u32 enable;
-	struct ccu_div_internal div;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-	unsigned int fixed_post_div;
-};
-
-struct ccu_frac_internal {
-	u32 enable;
-	u32 select;
-	long unsigned int rates[2];
-};
-
-struct ccu_gate {
-	u32 enable;
-	struct ccu_common common;
-};
-
-struct ccu_mux {
-	u16 reg;
-	u32 enable;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct ccu_mux_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	struct ccu_mux_internal *cm;
-	u32 delay_us;
-	u8 bypass_index;
-	u8 original_index;
-};
-
-struct ccu_mult_internal {
-	u8 offset;
-	u8 shift;
-	u8 width;
-	u8 min;
-	u8 max;
-};
-
-struct ccu_mult {
-	u32 enable;
-	u32 lock;
-	struct ccu_frac_internal frac;
-	struct ccu_mult_internal mult;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct _ccu_mult {
-	long unsigned int mult;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct ccu_phase {
-	u8 shift;
-	u8 width;
-	struct ccu_common common;
-};
-
-struct ccu_sdm_setting {
-	long unsigned int rate;
-	u32 pattern;
-	u32 m;
-	u32 n;
-};
-
-struct ccu_sdm_internal {
-	struct ccu_sdm_setting *table;
-	u32 table_size;
-	u32 enable;
-	u32 tuning_enable;
-	u16 tuning_reg;
-};
-
 struct ccu_nk {
 	u16 reg;
 	u32 enable;
@@ -74022,15 +96232,6 @@
 	struct ccu_common common;
 };
 
-struct _ccu_nk {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-};
-
 struct ccu_nkm {
 	u32 enable;
 	u32 lock;
@@ -74042,352 +96243,28 @@
 	struct ccu_common common;
 };
 
-struct _ccu_nkm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_nkmp {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	unsigned int fixed_post_div;
-	unsigned int max_rate;
+struct ccu_phase {
+	u8 shift;
+	u8 width;
 	struct ccu_common common;
 };
 
-struct _ccu_nkmp {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-	long unsigned int p;
-	long unsigned int min_p;
-	long unsigned int max_p;
-};
-
-struct ccu_nm {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_div_internal m;
-	struct ccu_frac_internal frac;
-	struct ccu_sdm_internal sdm;
-	unsigned int fixed_post_div;
-	unsigned int min_rate;
-	unsigned int max_rate;
-	struct ccu_common common;
-};
-
-struct _ccu_nm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_mp {
-	u32 enable;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	struct ccu_mux_internal mux;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct tegra_cpu_car_ops {
-	void (*wait_for_reset)(u32);
-	void (*put_in_reset)(u32);
-	void (*out_of_reset)(u32);
-	void (*enable_clock)(u32);
-	void (*disable_clock)(u32);
-	bool (*rail_off_ready)();
-	void (*suspend)();
-	void (*resume)();
-};
-
-struct tegra_clk_periph_regs {
-	u32 enb_reg;
-	u32 enb_set_reg;
-	u32 enb_clr_reg;
-	u32 rst_reg;
-	u32 rst_set_reg;
-	u32 rst_clr_reg;
-};
-
-struct tegra_clk_init_table {
-	unsigned int clk_id;
-	unsigned int parent_id;
-	long unsigned int rate;
-	int state;
-};
-
-struct tegra_clk_duplicate {
-	int clk_id;
-	struct clk_lookup lookup;
-};
-
-struct tegra_clk {
-	int dt_id;
-	bool present;
-};
-
-struct tegra_devclk {
-	int dt_id;
-	char *dev_id;
-	char *con_id;
-};
-
-typedef void (*tegra_clk_apply_init_table_func)();
-
-struct tegra_clk_sync_source {
+struct tegra_clk_periph_fixed {
 	struct clk_hw hw;
-	long unsigned int rate;
-	long unsigned int max_rate;
-};
-
-struct i2c_msg {
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	__u8 *buf;
-};
-
-union i2c_smbus_data {
-	__u8 byte;
-	__u16 word;
-	__u8 block[34];
-};
-
-enum i2c_slave_event {
-	I2C_SLAVE_READ_REQUESTED = 0,
-	I2C_SLAVE_WRITE_REQUESTED = 1,
-	I2C_SLAVE_READ_PROCESSED = 2,
-	I2C_SLAVE_WRITE_RECEIVED = 3,
-	I2C_SLAVE_STOP = 4,
-};
-
-struct i2c_client;
-
-typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
-
-struct i2c_adapter;
-
-struct i2c_client {
-	short unsigned int flags;
-	short unsigned int addr;
-	char name[20];
-	struct i2c_adapter *adapter;
-	struct device dev;
-	int init_irq;
-	int irq;
-	struct list_head detected;
-	i2c_slave_cb_t slave_cb;
-};
-
-struct i2c_algorithm;
-
-struct i2c_lock_operations;
-
-struct i2c_bus_recovery_info;
-
-struct i2c_adapter_quirks;
-
-struct i2c_adapter {
-	struct module *owner;
-	unsigned int class;
-	const struct i2c_algorithm *algo;
-	void *algo_data;
-	const struct i2c_lock_operations *lock_ops;
-	struct rt_mutex bus_lock;
-	struct rt_mutex mux_lock;
-	int timeout;
-	int retries;
-	struct device dev;
-	long unsigned int locked_flags;
-	int nr;
-	char name[48];
-	struct completion dev_released;
-	struct mutex userspace_clients_lock;
-	struct list_head userspace_clients;
-	struct i2c_bus_recovery_info *bus_recovery_info;
-	const struct i2c_adapter_quirks *quirks;
-	struct irq_domain *host_notify_domain;
-};
-
-struct i2c_algorithm {
-	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	u32 (*functionality)(struct i2c_adapter *);
-	int (*reg_slave)(struct i2c_client *);
-	int (*unreg_slave)(struct i2c_client *);
-};
-
-struct i2c_lock_operations {
-	void (*lock_bus)(struct i2c_adapter *, unsigned int);
-	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
-	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
-};
-
-struct i2c_bus_recovery_info {
-	int (*recover_bus)(struct i2c_adapter *);
-	int (*get_scl)(struct i2c_adapter *);
-	void (*set_scl)(struct i2c_adapter *, int);
-	int (*get_sda)(struct i2c_adapter *);
-	void (*set_sda)(struct i2c_adapter *, int);
-	int (*get_bus_free)(struct i2c_adapter *);
-	void (*prepare_recovery)(struct i2c_adapter *);
-	void (*unprepare_recovery)(struct i2c_adapter *);
-	struct gpio_desc *scl_gpiod;
-	struct gpio_desc *sda_gpiod;
-	struct pinctrl *pinctrl;
-	struct pinctrl_state *pins_default;
-	struct pinctrl_state *pins_gpio;
-};
-
-struct i2c_adapter_quirks {
-	u64 flags;
-	int max_num_msgs;
-	u16 max_write_len;
-	u16 max_read_len;
-	u16 max_comb_1st_msg_len;
-	u16 max_comb_2nd_msg_len;
-};
-
-struct rail_alignment {
-	int offset_uv;
-	int step_uv;
-};
-
-struct cvb_coefficients {
-	int c0;
-	int c1;
-	int c2;
-};
-
-struct cvb_table_freq_entry {
-	long unsigned int freq;
-	struct cvb_coefficients coefficients;
-};
-
-struct cvb_cpu_dfll_data {
-	u32 tune0_low;
-	u32 tune0_high;
-	u32 tune1;
-	unsigned int tune_high_min_millivolts;
-};
-
-struct cvb_table {
-	int speedo_id;
-	int process_id;
-	int min_millivolts;
-	int max_millivolts;
-	int speedo_scale;
-	int voltage_scale;
-	struct cvb_table_freq_entry entries[40];
-	struct cvb_cpu_dfll_data cpu_dfll_data;
-};
-
-struct tegra_dfll_soc_data {
-	struct device *dev;
-	long unsigned int max_freq;
-	const struct cvb_table *cvb;
-	struct rail_alignment alignment;
-	void (*init_clock_trimmers)();
-	void (*set_clock_trimmers_high)();
-	void (*set_clock_trimmers_low)();
-};
-
-enum dfll_ctrl_mode {
-	DFLL_UNINITIALIZED = 0,
-	DFLL_DISABLED = 1,
-	DFLL_OPEN_LOOP = 2,
-	DFLL_CLOSED_LOOP = 3,
-};
-
-enum dfll_tune_range {
-	DFLL_TUNE_UNINITIALIZED = 0,
-	DFLL_TUNE_LOW = 1,
-};
-
-enum tegra_dfll_pmu_if {
-	TEGRA_DFLL_PMU_I2C = 0,
-	TEGRA_DFLL_PMU_PWM = 1,
-};
-
-struct dfll_rate_req {
-	long unsigned int rate;
-	long unsigned int dvco_target_rate;
-	int lut_index;
-	u8 mult_bits;
-	u8 scale_bits;
-};
-
-struct tegra_dfll {
-	struct device *dev;
-	struct tegra_dfll_soc_data *soc;
 	void *base;
-	void *i2c_base;
-	void *i2c_controller_base;
-	void *lut_base;
-	struct regulator *vdd_reg;
-	struct clk *soc_clk;
-	struct clk *ref_clk;
-	struct clk *i2c_clk;
-	struct clk *dfll_clk;
-	struct reset_control *dvco_rst;
-	long unsigned int ref_rate;
-	long unsigned int i2c_clk_rate;
-	long unsigned int dvco_rate_min;
-	enum dfll_ctrl_mode mode;
-	enum dfll_tune_range tune_range;
-	struct dentry *debugfs_dir;
-	struct clk_hw dfll_clk_hw;
-	const char *output_clock_name;
-	struct dfll_rate_req last_req;
-	long unsigned int last_unrounded_rate;
-	u32 droop_ctrl;
-	u32 sample_rate;
-	u32 force_mode;
-	u32 cf;
-	u32 ci;
-	u32 cg;
-	bool cg_scale;
-	u32 i2c_fs_rate;
-	u32 i2c_reg;
-	u32 i2c_slave_addr;
-	unsigned int lut[33];
-	long unsigned int lut_uv[33];
-	int lut_size;
-	u8 lut_bottom;
-	u8 lut_min;
-	u8 lut_max;
-	u8 lut_safe;
-	enum tegra_dfll_pmu_if pmu_if;
-	long unsigned int pwm_rate;
-	struct pinctrl *pwm_pin;
-	struct pinctrl_state *pwm_enable_state;
-	struct pinctrl_state *pwm_disable_state;
-	u32 reg_init_uV;
+	const struct tegra_clk_periph_regs *regs;
+	unsigned int mul;
+	unsigned int div;
+	unsigned int num;
+};
+
+struct tegra_clk_pll_out {
+	struct clk_hw hw;
+	void *reg;
+	u8 enb_bit_idx;
+	u8 rst_bit_idx;
+	spinlock_t *lock;
+	u8 flags;
 };
 
 struct tegra_clk_frac_div {
@@ -74400,49 +96277,16 @@
 	spinlock_t *lock;
 };
 
-struct tegra_clk_periph_gate {
-	u32 magic;
+struct tegra_clk_super_mux {
 	struct clk_hw hw;
-	void *clk_base;
-	u8 flags;
-	int clk_num;
-	int *enable_refcnt;
-	const struct tegra_clk_periph_regs *regs;
-};
-
-struct tegra_clk_periph {
-	u32 magic;
-	struct clk_hw hw;
-	struct clk_mux mux;
-	struct tegra_clk_frac_div divider;
-	struct tegra_clk_periph_gate gate;
-	const struct clk_ops *mux_ops;
+	void *reg;
+	struct tegra_clk_frac_div frac_div;
 	const struct clk_ops *div_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct tegra_periph_init_data {
-	const char *name;
-	int clk_id;
-	union {
-		const char * const *parent_names;
-		const char *parent_name;
-	} p;
-	int num_parents;
-	struct tegra_clk_periph periph;
-	u32 offset;
-	const char *con_id;
-	const char *dev_id;
-	long unsigned int flags;
-};
-
-struct tegra_clk_periph_fixed {
-	struct clk_hw hw;
-	void *base;
-	const struct tegra_clk_periph_regs *regs;
-	unsigned int mul;
-	unsigned int div;
-	unsigned int num;
+	u8 width;
+	u8 flags;
+	u8 div2_index;
+	u8 pllx_index;
+	spinlock_t *lock;
 };
 
 struct tegra_clk_pll_freq_table {
@@ -74530,49 +96374,40 @@
 	struct tegra_clk_pll_params *params;
 };
 
-struct utmi_clk_param {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u8 stable_count;
-	u8 active_delay_count;
-	u8 xtal_freq_count;
-};
-
-struct tegra_clk_pll_out {
+struct tegra_clk_periph_gate {
+	u32 magic;
 	struct clk_hw hw;
-	void *reg;
-	u8 enb_bit_idx;
-	u8 rst_bit_idx;
-	spinlock_t *lock;
+	void *clk_base;
 	u8 flags;
+	int clk_num;
+	int *enable_refcnt;
+	const struct tegra_clk_periph_regs *regs;
 };
 
-struct tegra_sdmmc_mux {
+struct tegra_clk_periph {
+	u32 magic;
 	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	const struct clk_ops *gate_ops;
+	struct clk_mux mux;
+	struct tegra_clk_frac_div divider;
 	struct tegra_clk_periph_gate gate;
-	u8 div_flags;
-};
-
-struct tegra_clk_super_mux {
-	struct clk_hw hw;
-	void *reg;
-	struct tegra_clk_frac_div frac_div;
+	const struct clk_ops *mux_ops;
 	const struct clk_ops *div_ops;
-	u8 width;
-	u8 flags;
-	u8 div2_index;
-	u8 pllx_index;
-	spinlock_t *lock;
+	const struct clk_ops *gate_ops;
 };
 
-struct tegra_audio_clk_info {
-	char *name;
-	struct tegra_clk_pll_params *pll_params;
+struct tegra_periph_init_data {
+	const char *name;
 	int clk_id;
-	char *parent;
+	union {
+		const char * const *parent_names;
+		const char *parent_name;
+	} p;
+	int num_parents;
+	struct tegra_clk_periph periph;
+	u32 offset;
+	const char *con_id;
+	const char *dev_id;
+	long unsigned int flags;
 };
 
 enum clk_id {
@@ -74892,31 +96727,6 @@
 	tegra_clk_max = 313,
 };
 
-struct tegra_sync_source_initdata {
-	char *name;
-	long unsigned int rate;
-	long unsigned int max_rate;
-	int clk_id;
-};
-
-struct tegra_audio_clk_initdata {
-	char *gate_name;
-	char *mux_name;
-	u32 offset;
-	int gate_clk_id;
-	int mux_clk_id;
-};
-
-struct tegra_audio2x_clk_initdata {
-	char *parent;
-	char *gate_name;
-	char *name_2x;
-	char *div_name;
-	int clk_id;
-	int clk_num;
-	u8 div_offset;
-};
-
 struct pll_out_data {
 	char *div_name;
 	char *pll_out_name;
@@ -74928,51 +96738,11 @@
 	spinlock_t *lock;
 };
 
-enum tegra_super_gen {
-	gen4 = 4,
-	gen5 = 5,
-};
-
-struct tegra_super_gen_info {
-	enum tegra_super_gen gen;
-	const char **sclk_parents;
-	const char **cclk_g_parents;
-	const char **cclk_lp_parents;
-	int num_sclk_parents;
-	int num_cclk_g_parents;
-	int num_cclk_lp_parents;
-};
-
-enum tegra_revision {
-	TEGRA_REVISION_UNKNOWN = 0,
-	TEGRA_REVISION_A01 = 1,
-	TEGRA_REVISION_A02 = 2,
-	TEGRA_REVISION_A03 = 3,
-	TEGRA_REVISION_A03p = 4,
-	TEGRA_REVISION_A04 = 5,
-	TEGRA_REVISION_MAX = 6,
-};
-
-struct tegra_sku_info {
-	int sku_id;
-	int cpu_process_id;
-	int cpu_speedo_id;
-	int cpu_speedo_value;
-	int cpu_iddq_value;
-	int soc_process_id;
-	int soc_speedo_id;
-	int soc_speedo_value;
-	int gpu_process_id;
-	int gpu_speedo_id;
-	int gpu_speedo_value;
-	enum tegra_revision revision;
-};
-
-struct dfll_fcpu_data {
-	const long unsigned int *cpu_max_freq_table;
-	unsigned int cpu_max_freq_table_size;
-	const struct cvb_table *cpu_cvb_tables;
-	unsigned int cpu_cvb_tables_size;
+struct tegra_audio_clk_info {
+	char *name;
+	struct tegra_clk_pll_params *pll_params;
+	int clk_id;
+	char *parent;
 };
 
 struct cpu_clk_suspend_context {
@@ -74981,665 +96751,478 @@
 	u32 cclkg_divider;
 };
 
-enum {
-	DOWN___2 = 0,
-	UP___2 = 1,
+struct icst_params {
+	long unsigned int ref;
+	long unsigned int vco_max;
+	long unsigned int vco_min;
+	short unsigned int vd_min;
+	short unsigned int vd_max;
+	unsigned char rd_min;
+	unsigned char rd_max;
+	const unsigned char *s2div;
+	const unsigned char *idx2s;
 };
 
-struct cpu_clk_suspend_context___2 {
-	u32 clk_csite_src;
+struct clk_icst_desc {
+	const struct icst_params *params;
+	u32 vco_offset;
+	u32 lock_offset;
 };
 
-struct tegra210_domain_mbist_war {
-	void (*handle_lvl2_ovr)(struct tegra210_domain_mbist_war *);
-	const u32 lvl2_offset;
-	const u32 lvl2_mask;
-	const unsigned int num_clks;
-	const unsigned int *clk_init_data;
-	struct clk_bulk_data *clks;
-};
-
-struct utmi_clk_param___2 {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u16 stable_count;
-	u8 active_delay_count;
-	u16 xtal_freq_count;
-};
-
-struct tegra210_clk_emc_config {
-	long unsigned int rate;
-	bool same_freq;
-	u32 value;
-	long unsigned int parent_rate;
-	u8 parent;
-};
-
-struct tegra210_clk_emc_provider {
-	struct module *owner;
-	struct device *dev;
-	struct tegra210_clk_emc_config *configs;
-	unsigned int num_configs;
-	int (*set_rate)(struct device *, const struct tegra210_clk_emc_config *);
-};
-
-struct tegra210_clk_emc {
+struct zynqmp_clk_gate {
 	struct clk_hw hw;
-	void *regs;
-	struct tegra210_clk_emc_provider *provider;
-	struct clk *parents[8];
+	u8 flags;
+	u32 clk_id;
 };
 
-enum {
-	CMD_CLK_GET_RATE = 1,
-	CMD_CLK_SET_RATE = 2,
-	CMD_CLK_ROUND_RATE = 3,
-	CMD_CLK_GET_PARENT = 4,
-	CMD_CLK_SET_PARENT = 5,
-	CMD_CLK_IS_ENABLED = 6,
-	CMD_CLK_ENABLE = 7,
-	CMD_CLK_DISABLE = 8,
-	CMD_CLK_GET_ALL_INFO = 14,
-	CMD_CLK_GET_MAX_CLK_ID = 15,
-	CMD_CLK_GET_FMAX_AT_VMIN = 16,
-	CMD_CLK_MAX = 17,
+enum pm_query_id {
+	PM_QID_INVALID = 0,
+	PM_QID_CLOCK_GET_NAME = 1,
+	PM_QID_CLOCK_GET_TOPOLOGY = 2,
+	PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS = 3,
+	PM_QID_CLOCK_GET_PARENTS = 4,
+	PM_QID_CLOCK_GET_ATTRIBUTES = 5,
+	PM_QID_PINCTRL_GET_NUM_PINS = 6,
+	PM_QID_PINCTRL_GET_NUM_FUNCTIONS = 7,
+	PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS = 8,
+	PM_QID_PINCTRL_GET_FUNCTION_NAME = 9,
+	PM_QID_PINCTRL_GET_FUNCTION_GROUPS = 10,
+	PM_QID_PINCTRL_GET_PIN_GROUPS = 11,
+	PM_QID_CLOCK_GET_NUM_CLOCKS = 12,
+	PM_QID_CLOCK_GET_MAX_DIVISOR = 13,
 };
 
-struct cmd_clk_get_rate_request {};
-
-struct cmd_clk_get_rate_response {
-	int64_t rate;
+struct zynqmp_pm_query_data {
+	u32 qid;
+	u32 arg1;
+	u32 arg2;
+	u32 arg3;
 };
 
-struct cmd_clk_set_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_set_rate_response {
-	int64_t rate;
+enum topology_type {
+	TYPE_INVALID = 0,
+	TYPE_MUX = 1,
+	TYPE_PLL = 2,
+	TYPE_FIXEDFACTOR = 3,
+	TYPE_DIV1 = 4,
+	TYPE_DIV2 = 5,
+	TYPE_GATE = 6,
 };
 
-struct cmd_clk_round_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_round_rate_response {
-	int64_t rate;
+enum clk_type {
+	CLK_TYPE_OUTPUT = 0,
+	CLK_TYPE_EXTERNAL = 1,
 };
 
-struct cmd_clk_get_parent_request {};
-
-struct cmd_clk_get_parent_response {
-	uint32_t parent_id;
+struct clock_parent {
+	char name[50];
+	int id;
+	u32 flag;
 };
 
-struct cmd_clk_set_parent_request {
-	uint32_t parent_id;
+struct zynqmp_clock {
+	char clk_name[50];
+	u32 valid;
+	enum clk_type type;
+	struct clock_topology node[6];
+	u32 num_nodes;
+	struct clock_parent parent[100];
+	u32 num_parents;
+	u32 clk_id;
 };
 
-struct cmd_clk_set_parent_response {
-	uint32_t parent_id;
+struct name_resp {
+	char name[16];
 };
 
-struct cmd_clk_is_enabled_request {};
-
-struct cmd_clk_is_enabled_response {
-	int32_t state;
+struct topology_resp {
+	u32 topology[3];
 };
 
-struct cmd_clk_enable_request {};
-
-struct cmd_clk_disable_request {};
-
-struct cmd_clk_get_all_info_request {};
-
-struct cmd_clk_get_all_info_response {
-	uint32_t flags;
-	uint32_t parent;
-	uint32_t parents[16];
-	uint8_t num_parents;
-	uint8_t name[40];
-} __attribute__((packed));
-
-struct cmd_clk_get_max_clk_id_request {};
-
-struct cmd_clk_get_max_clk_id_response {
-	uint32_t max_id;
+struct parents_resp {
+	u32 parents[3];
 };
 
-struct cmd_clk_get_fmax_at_vmin_request {};
-
-struct mrq_clk_request {
-	uint32_t cmd_and_id;
-	union {
-		struct cmd_clk_get_rate_request clk_get_rate;
-		struct cmd_clk_set_rate_request clk_set_rate;
-		struct cmd_clk_round_rate_request clk_round_rate;
-		struct cmd_clk_get_parent_request clk_get_parent;
-		struct cmd_clk_set_parent_request clk_set_parent;
-		struct cmd_clk_enable_request clk_enable;
-		struct cmd_clk_disable_request clk_disable;
-		struct cmd_clk_is_enabled_request clk_is_enabled;
-		struct cmd_clk_get_all_info_request clk_get_all_info;
-		struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id;
-		struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin;
-	};
-} __attribute__((packed));
-
-struct tegra_bpmp_ops;
-
-struct tegra_bpmp_soc {
-	struct {
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_tx;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} thread;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_rx;
-	} channels;
-	const struct tegra_bpmp_ops *ops;
-	unsigned int num_resets;
+struct attr_resp {
+	u32 attr[1];
 };
 
-struct tegra_bpmp;
-
-struct tegra_bpmp_channel;
-
-struct tegra_bpmp_ops {
-	int (*init)(struct tegra_bpmp *);
-	void (*deinit)(struct tegra_bpmp *);
-	bool (*is_response_ready)(struct tegra_bpmp_channel *);
-	bool (*is_request_ready)(struct tegra_bpmp_channel *);
-	int (*ack_response)(struct tegra_bpmp_channel *);
-	int (*ack_request)(struct tegra_bpmp_channel *);
-	bool (*is_response_channel_free)(struct tegra_bpmp_channel *);
-	bool (*is_request_channel_free)(struct tegra_bpmp_channel *);
-	int (*post_response)(struct tegra_bpmp_channel *);
-	int (*post_request)(struct tegra_bpmp_channel *);
-	int (*ring_doorbell)(struct tegra_bpmp *);
-	int (*resume)(struct tegra_bpmp *);
+enum k3_ring_mode {
+	K3_RINGACC_RING_MODE_RING = 0,
+	K3_RINGACC_RING_MODE_MESSAGE = 1,
+	K3_RINGACC_RING_MODE_CREDENTIALS = 2,
+	K3_RINGACC_RING_MODE_INVALID = 3,
 };
 
-struct tegra_bpmp_mb_data {
-	u32 code;
+enum k3_ring_size {
+	K3_RINGACC_RING_ELSIZE_4 = 0,
+	K3_RINGACC_RING_ELSIZE_8 = 1,
+	K3_RINGACC_RING_ELSIZE_16 = 2,
+	K3_RINGACC_RING_ELSIZE_32 = 3,
+	K3_RINGACC_RING_ELSIZE_64 = 4,
+	K3_RINGACC_RING_ELSIZE_128 = 5,
+	K3_RINGACC_RING_ELSIZE_256 = 6,
+	K3_RINGACC_RING_ELSIZE_INVALID = 7,
+};
+
+struct k3_ring_cfg {
+	u32 size;
+	enum k3_ring_size elm_size;
+	enum k3_ring_mode mode;
 	u32 flags;
-	u8 data[120];
+	struct device *dma_dev;
+	u32 asel;
 };
 
-struct tegra_ivc;
-
-struct tegra_bpmp_channel {
-	struct tegra_bpmp *bpmp;
-	struct tegra_bpmp_mb_data *ib;
-	struct tegra_bpmp_mb_data *ob;
-	struct completion completion;
-	struct tegra_ivc *ivc;
-	unsigned int index;
+struct k3_ringacc_init_data {
+	const struct ti_sci_handle *tisci;
+	u32 tisci_dev_id;
+	u32 num_rings;
 };
 
-struct tegra_bpmp_clk;
-
-struct tegra_bpmp {
-	const struct tegra_bpmp_soc *soc;
-	struct device *dev;
+struct k3_event_route_data {
 	void *priv;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
-	spinlock_t atomic_tx_lock;
-	struct tegra_bpmp_channel *tx_channel;
-	struct tegra_bpmp_channel *rx_channel;
-	struct tegra_bpmp_channel *threaded_channels;
-	struct {
-		long unsigned int *allocated;
-		long unsigned int *busy;
-		unsigned int count;
-		struct semaphore lock;
-	} threaded;
-	struct list_head mrqs;
-	spinlock_t lock;
-	struct tegra_bpmp_clk **clocks;
-	unsigned int num_clocks;
-	struct reset_controller_dev rstc;
-	struct genpd_onecell_data genpd;
-	struct dentry *debugfs_mirror;
+	int (*set_event)(void *, u32);
 };
 
-struct tegra_bpmp_clk {
-	struct clk_hw hw;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-	unsigned int num_parents;
-	unsigned int *parents;
+struct cppi5_desc_hdr_t {
+	u32 pkt_info0;
+	u32 pkt_info1;
+	u32 pkt_info2;
+	u32 src_dst_tag;
 };
 
-struct tegra_bpmp_message {
-	unsigned int mrq;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
+struct cppi5_host_desc_t {
+	struct cppi5_desc_hdr_t hdr;
+	u64 next_desc;
+	u64 buf_ptr;
+	u32 buf_info1;
+	u32 org_buf_len;
+	u64 org_buf_ptr;
+	u32 epib[0];
 };
 
-struct tegra_bpmp_clk_info {
-	unsigned int id;
-	char name[40];
-	unsigned int parents[16];
-	unsigned int num_parents;
-	long unsigned int flags;
+enum cppi5_tr_types {
+	CPPI5_TR_TYPE0 = 0,
+	CPPI5_TR_TYPE1 = 1,
+	CPPI5_TR_TYPE2 = 2,
+	CPPI5_TR_TYPE3 = 3,
+	CPPI5_TR_TYPE4 = 4,
+	CPPI5_TR_TYPE5 = 5,
+	CPPI5_TR_TYPE8 = 8,
+	CPPI5_TR_TYPE9 = 9,
+	CPPI5_TR_TYPE10 = 10,
+	CPPI5_TR_TYPE11 = 11,
+	CPPI5_TR_TYPE15 = 15,
+	CPPI5_TR_TYPE_MAX = 16,
 };
 
-struct tegra_bpmp_clk_message {
-	unsigned int cmd;
-	unsigned int id;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
+enum cppi5_tr_event_size {
+	CPPI5_TR_EVENT_SIZE_COMPLETION = 0,
+	CPPI5_TR_EVENT_SIZE_ICNT1_DEC = 1,
+	CPPI5_TR_EVENT_SIZE_ICNT2_DEC = 2,
+	CPPI5_TR_EVENT_SIZE_ICNT3_DEC = 3,
+	CPPI5_TR_EVENT_SIZE_MAX = 4,
 };
 
-struct clk_sp810;
-
-struct clk_sp810_timerclken {
-	struct clk_hw hw;
-	struct clk *clk;
-	struct clk_sp810 *sp810;
-	int channel;
+enum cppi5_tr_trigger {
+	CPPI5_TR_TRIGGER_NONE = 0,
+	CPPI5_TR_TRIGGER_GLOBAL0 = 1,
+	CPPI5_TR_TRIGGER_GLOBAL1 = 2,
+	CPPI5_TR_TRIGGER_LOCAL_EVENT = 3,
+	CPPI5_TR_TRIGGER_MAX = 4,
 };
 
-struct clk_sp810 {
-	struct device_node *node;
-	void *base;
-	spinlock_t lock;
-	struct clk_sp810_timerclken timerclken[4];
+enum cppi5_tr_trigger_type {
+	CPPI5_TR_TRIGGER_TYPE_ICNT1_DEC = 0,
+	CPPI5_TR_TRIGGER_TYPE_ICNT2_DEC = 1,
+	CPPI5_TR_TRIGGER_TYPE_ICNT3_DEC = 2,
+	CPPI5_TR_TRIGGER_TYPE_ALL = 3,
+	CPPI5_TR_TRIGGER_TYPE_MAX = 4,
 };
 
-struct vexpress_osc {
-	struct regmap *reg;
-	struct clk_hw hw;
-	long unsigned int rate_min;
-	long unsigned int rate_max;
+typedef u32 cppi5_tr_flags_t;
+
+struct cppi5_tr_type1_t {
+	cppi5_tr_flags_t flags;
+	u16 icnt0;
+	u16 icnt1;
+	u64 addr;
+	s32 dim1;
+	long: 32;
+	long: 64;
 };
 
-struct dma_chan_tbl_ent {
-	struct dma_chan *chan;
+struct cppi5_tr_type15_t {
+	cppi5_tr_flags_t flags;
+	u16 icnt0;
+	u16 icnt1;
+	u64 addr;
+	s32 dim1;
+	u16 icnt2;
+	u16 icnt3;
+	s32 dim2;
+	s32 dim3;
+	u32 _reserved;
+	s32 ddim1;
+	u64 daddr;
+	s32 ddim2;
+	s32 ddim3;
+	u16 dicnt0;
+	u16 dicnt1;
+	u16 dicnt2;
+	u16 dicnt3;
 };
 
-struct dmaengine_unmap_pool {
-	struct kmem_cache *cache;
-	const char *name;
-	mempool_t *pool;
-	size_t size;
+struct cppi5_tr_resp_t {
+	u8 status;
+	u8 _reserved;
+	u8 cmd_id;
+	u8 flags;
 };
 
-struct dmaengine_desc_callback {
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
+enum udma_rm_range {
+	RM_RANGE_BCHAN = 0,
+	RM_RANGE_TCHAN = 1,
+	RM_RANGE_RCHAN = 2,
+	RM_RANGE_RFLOW = 3,
+	RM_RANGE_TFLOW = 4,
+	RM_RANGE_LAST = 5,
 };
 
-struct virt_dma_desc {
-	struct dma_async_tx_descriptor tx;
-	struct dmaengine_result tx_result;
-	struct list_head node;
+struct udma_tisci_rm {
+	const struct ti_sci_handle *tisci;
+	const struct ti_sci_rm_udmap_ops *tisci_udmap_ops;
+	u32 tisci_dev_id;
+	const struct ti_sci_rm_psil_ops *tisci_psil_ops;
+	u32 tisci_navss_dev_id;
+	struct ti_sci_resource *rm_ranges[5];
 };
 
-struct virt_dma_chan {
-	struct dma_chan chan;
-	struct tasklet_struct task;
-	void (*desc_free)(struct virt_dma_desc *);
-	spinlock_t lock;
-	struct list_head desc_allocated;
-	struct list_head desc_submitted;
-	struct list_head desc_issued;
-	struct list_head desc_completed;
-	struct list_head desc_terminated;
-	struct virt_dma_desc *cyclic;
+struct udma_static_tr {
+	u8 elsize;
+	u16 elcnt;
+	u16 bstcnt;
 };
 
-struct acpi_table_csrt {
-	struct acpi_table_header header;
+enum k3_dma_type {
+	DMA_TYPE_UDMA = 0,
+	DMA_TYPE_BCDMA = 1,
+	DMA_TYPE_PKTDMA = 2,
 };
 
-struct acpi_csrt_group {
-	u32 length;
-	u32 vendor_id;
-	u32 subvendor_id;
-	u16 device_id;
-	u16 subdevice_id;
-	u16 revision;
-	u16 reserved;
-	u32 shared_info_length;
+enum udma_mmr {
+	MMR_GCFG = 0,
+	MMR_BCHANRT = 1,
+	MMR_RCHANRT = 2,
+	MMR_TCHANRT = 3,
+	MMR_LAST = 4,
 };
 
-struct acpi_csrt_shared_info {
-	u16 major_version;
-	u16 minor_version;
-	u32 mmio_base_low;
-	u32 mmio_base_high;
-	u32 gsi_interrupt;
-	u8 interrupt_polarity;
-	u8 interrupt_mode;
-	u8 num_channels;
-	u8 dma_address_width;
-	u16 base_request_line;
-	u16 num_handshake_signals;
-	u32 max_block_size;
+struct k3_ring;
+
+struct udma_tchan {
+	void *reg_rt;
+	int id;
+	struct k3_ring *t_ring;
+	struct k3_ring *tc_ring;
+	int tflow_id;
 };
 
-struct acpi_dma_spec {
-	int chan_id;
-	int slave_id;
+struct udma_rflow {
+	int id;
+	struct k3_ring *fd_ring;
+	struct k3_ring *r_ring;
+};
+
+struct udma_rchan {
+	void *reg_rt;
+	int id;
+};
+
+struct udma_oes_offsets {
+	u32 udma_rchan;
+	u32 bcdma_bchan_data;
+	u32 bcdma_bchan_ring;
+	u32 bcdma_tchan_data;
+	u32 bcdma_tchan_ring;
+	u32 bcdma_rchan_data;
+	u32 bcdma_rchan_ring;
+	u32 pktdma_tchan_flow;
+	u32 pktdma_rchan_flow;
+};
+
+struct udma_match_data {
+	enum k3_dma_type type;
+	u32 psil_base;
+	bool enable_memcpy_support;
+	u32 flags;
+	u32 statictr_z_mask;
+	u8 burst_size[3];
+};
+
+struct udma_soc_data {
+	struct udma_oes_offsets oes;
+	u32 bcdma_trigger_event_offset;
+};
+
+struct udma_hwdesc {
+	size_t cppi5_desc_size;
+	void *cppi5_desc_vaddr;
+	dma_addr_t cppi5_desc_paddr;
+	void *tr_req_base;
+	struct cppi5_tr_resp_t *tr_resp_base;
+};
+
+struct udma_rx_flush {
+	struct udma_hwdesc hwdescs[2];
+	size_t buffer_size;
+	void *buffer_vaddr;
+	dma_addr_t buffer_paddr;
+};
+
+struct udma_tpl {
+	u8 levels;
+	u32 start_idx[3];
+};
+
+struct k3_ringacc;
+
+struct udma_chan;
+
+struct udma_dev {
+	struct dma_device ddev;
 	struct device *dev;
-};
-
-struct acpi_dma {
-	struct list_head dma_controllers;
-	struct device *dev;
-	struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
-	void *data;
-	short unsigned int base_request_line;
-	short unsigned int end_request_line;
-};
-
-struct acpi_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct acpi_dma_parser_data {
-	struct acpi_dma_spec dma_spec;
-	size_t index;
-	size_t n;
-};
-
-struct of_dma {
-	struct list_head of_dma_controllers;
-	struct device_node *of_node;
-	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
-	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
-	struct dma_router *dma_router;
-	void *of_dma_data;
-};
-
-struct of_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct mv_xor_v2_descriptor {
-	u16 desc_id;
-	u16 flags;
-	u32 crc32_result;
-	u32 desc_ctrl;
-	u32 buff_size;
-	u32 fill_pattern_src_addr[4];
-	u32 data_buff_addr[12];
-	u32 reserved[12];
-};
-
-struct mv_xor_v2_sw_desc;
-
-struct mv_xor_v2_device {
+	void *mmrs[4];
+	const struct udma_match_data *match_data;
+	const struct udma_soc_data *soc_data;
+	struct udma_tpl bchan_tpl;
+	struct udma_tpl tchan_tpl;
+	struct udma_tpl rchan_tpl;
+	size_t desc_align;
+	struct udma_tisci_rm tisci_rm;
+	struct k3_ringacc *ringacc;
+	struct work_struct purge_work;
+	struct list_head desc_to_purge;
 	spinlock_t lock;
-	void *dma_base;
-	void *glob_base;
-	struct clk *clk;
-	struct clk *reg_clk;
-	struct tasklet_struct irq_tasklet;
-	struct list_head free_sw_desc;
-	struct dma_device dmadev;
-	struct dma_chan dmachan;
-	dma_addr_t hw_desq;
-	struct mv_xor_v2_descriptor *hw_desq_virt;
-	struct mv_xor_v2_sw_desc *sw_desq;
-	int desc_size;
-	unsigned int npendings;
-	unsigned int hw_queue_idx;
-	struct msi_desc *msi_desc;
+	struct udma_rx_flush rx_flush;
+	int bchan_cnt;
+	int tchan_cnt;
+	int echan_cnt;
+	int rchan_cnt;
+	int rflow_cnt;
+	int tflow_cnt;
+	long unsigned int *bchan_map;
+	long unsigned int *tchan_map;
+	long unsigned int *rchan_map;
+	long unsigned int *rflow_gp_map;
+	long unsigned int *rflow_gp_map_allocated;
+	long unsigned int *rflow_in_use;
+	long unsigned int *tflow_map;
+	struct udma_tchan *bchans;
+	struct udma_tchan *tchans;
+	struct udma_rchan *rchans;
+	struct udma_rflow *rflows;
+	struct udma_chan *channels;
+	u32 psil_base;
+	u32 atype;
+	u32 asel;
 };
 
-struct mv_xor_v2_sw_desc {
-	int idx;
-	struct dma_async_tx_descriptor async_tx;
-	struct mv_xor_v2_descriptor hw_desc;
-	struct list_head free_list;
+enum udma_chan_state {
+	UDMA_CHAN_IS_IDLE = 0,
+	UDMA_CHAN_IS_ACTIVE = 1,
+	UDMA_CHAN_IS_TERMINATING = 2,
 };
 
-struct bam_desc_hw {
-	__le32 addr;
-	__le16 size;
-	__le16 flags;
+struct udma_tx_drain {
+	struct delayed_work work;
+	ktime_t tstamp;
+	u32 residue;
 };
 
-struct bam_async_desc {
-	struct virt_dma_desc vd;
-	u32 num_desc;
-	u32 xfer_len;
-	u16 flags;
-	struct bam_desc_hw *curr_desc;
-	struct list_head desc_node;
+struct udma_chan_config {
+	bool pkt_mode;
+	bool needs_epib;
+	u32 psd_size;
+	u32 metadata_size;
+	u32 hdesc_size;
+	bool notdpkt;
+	int remote_thread_id;
+	u32 atype;
+	u32 asel;
+	u32 src_thread;
+	u32 dst_thread;
+	enum psil_endpoint_type ep_type;
+	bool enable_acc32;
+	bool enable_burst;
+	enum udma_tp_level channel_tpl;
+	u32 tr_trigger_type;
+	int mapped_channel_id;
+	int default_flow_id;
 	enum dma_transfer_direction dir;
-	size_t length;
-	struct bam_desc_hw desc[0];
 };
 
-enum bam_reg {
-	BAM_CTRL = 0,
-	BAM_REVISION = 1,
-	BAM_NUM_PIPES = 2,
-	BAM_DESC_CNT_TRSHLD = 3,
-	BAM_IRQ_SRCS = 4,
-	BAM_IRQ_SRCS_MSK = 5,
-	BAM_IRQ_SRCS_UNMASKED = 6,
-	BAM_IRQ_STTS = 7,
-	BAM_IRQ_CLR = 8,
-	BAM_IRQ_EN = 9,
-	BAM_CNFG_BITS = 10,
-	BAM_IRQ_SRCS_EE = 11,
-	BAM_IRQ_SRCS_MSK_EE = 12,
-	BAM_P_CTRL = 13,
-	BAM_P_RST = 14,
-	BAM_P_HALT = 15,
-	BAM_P_IRQ_STTS = 16,
-	BAM_P_IRQ_CLR = 17,
-	BAM_P_IRQ_EN = 18,
-	BAM_P_EVNT_DEST_ADDR = 19,
-	BAM_P_EVNT_REG = 20,
-	BAM_P_SW_OFSTS = 21,
-	BAM_P_DATA_FIFO_ADDR = 22,
-	BAM_P_DESC_FIFO_ADDR = 23,
-	BAM_P_EVNT_GEN_TRSHLD = 24,
-	BAM_P_FIFO_SIZES = 25,
-};
+struct udma_desc;
 
-struct reg_offset_data {
-	u32 base_offset;
-	unsigned int pipe_mult;
-	unsigned int evnt_mult;
-	unsigned int ee_mult;
-};
-
-struct bam_device;
-
-struct bam_chan {
+struct udma_chan {
 	struct virt_dma_chan vc;
-	struct bam_device *bdev;
+	struct dma_slave_config cfg;
+	struct udma_dev *ud;
+	struct device *dma_dev;
+	struct udma_desc *desc;
+	struct udma_desc *terminated_desc;
+	struct udma_static_tr static_tr;
+	char *name;
+	struct udma_tchan *bchan;
+	struct udma_tchan *tchan;
+	struct udma_rchan *rchan;
+	struct udma_rflow *rflow;
+	bool psil_paired;
+	int irq_num_ring;
+	int irq_num_udma;
+	bool cyclic;
+	bool paused;
+	enum udma_chan_state state;
+	struct completion teardown_completed;
+	struct udma_tx_drain tx_drain;
+	struct udma_chan_config config;
+	bool use_dma_pool;
+	struct dma_pool *hdesc_pool;
 	u32 id;
-	struct dma_slave_config slave;
-	struct bam_desc_hw *fifo_virt;
-	dma_addr_t fifo_phys;
-	short unsigned int head;
-	short unsigned int tail;
-	unsigned int initialized;
-	unsigned int paused;
-	unsigned int reconfigure;
-	struct list_head desc_list;
-	struct list_head node;
 };
 
-struct bam_device {
-	void *regs;
-	struct device *dev;
-	struct dma_device common;
-	struct bam_chan *channels;
-	u32 num_channels;
-	u32 num_ees;
-	u32 ee;
-	bool controlled_remotely;
-	const struct reg_offset_data *layout;
-	struct clk *bamclk;
-	int irq;
-	struct tasklet_struct task;
+struct udma_desc {
+	struct virt_dma_desc vd;
+	bool terminated;
+	enum dma_transfer_direction dir;
+	struct udma_static_tr static_tr;
+	u32 residue;
+	unsigned int sglen;
+	unsigned int desc_idx;
+	unsigned int tr_idx;
+	u32 metadata_size;
+	void *metadata;
+	unsigned int hwdesc_count;
+	struct udma_hwdesc hwdesc[0];
 };
 
-struct bcm2835_pm {
-	struct device *dev;
-	void *base;
-	void *asb;
+struct udma_filter_param {
+	int remote_thread_id;
+	u32 atype;
+	u32 asel;
+	u32 tr_trigger_type;
 };
 
-struct bcm2835_power;
-
-struct bcm2835_power_domain {
-	struct generic_pm_domain base;
-	struct bcm2835_power *power;
-	u32 domain;
-	struct clk *clk;
+struct fsl_soc_die_attr {
+	char *die;
+	u32 svr;
+	u32 mask;
 };
 
-struct bcm2835_power {
-	struct device *dev;
-	void *base;
-	void *asb;
-	struct genpd_onecell_data pd_xlate;
-	struct bcm2835_power_domain domains[13];
-	struct reset_controller_dev reset;
-};
-
-struct rpi_power_domain {
-	u32 domain;
-	bool enabled;
-	bool old_interface;
-	struct generic_pm_domain base;
-	struct rpi_firmware *fw;
-};
-
-struct rpi_power_domains {
-	bool has_new_interface;
-	struct genpd_onecell_data xlate;
-	struct rpi_firmware *fw;
-	struct rpi_power_domain domains[23];
-};
-
-struct rpi_power_domain_packet {
-	u32 domain;
-	u32 on;
-};
-
-struct soc_device_attribute {
-	const char *machine;
-	const char *family;
-	const char *revision;
-	const char *serial_number;
-	const char *soc_id;
-	const void *data;
-	const struct attribute_group *custom_attr_group;
-};
-
-struct soc_device;
-
-enum cpubiuctrl_regs {
-	CPU_CREDIT_REG = 0,
-	CPU_MCP_FLOW_REG = 1,
-	CPU_WRITEBACK_CTRL_REG = 2,
-	RAC_CONFIG0_REG = 3,
-	RAC_CONFIG1_REG = 4,
-	NUM_CPU_BIUCTRL_REGS = 5,
-};
-
-enum mtk_ddp_comp_id {
-	DDP_COMPONENT_AAL0 = 0,
-	DDP_COMPONENT_AAL1 = 1,
-	DDP_COMPONENT_BLS = 2,
-	DDP_COMPONENT_CCORR = 3,
-	DDP_COMPONENT_COLOR0 = 4,
-	DDP_COMPONENT_COLOR1 = 5,
-	DDP_COMPONENT_DITHER = 6,
-	DDP_COMPONENT_DPI0 = 7,
-	DDP_COMPONENT_DPI1 = 8,
-	DDP_COMPONENT_DSI0 = 9,
-	DDP_COMPONENT_DSI1 = 10,
-	DDP_COMPONENT_DSI2 = 11,
-	DDP_COMPONENT_DSI3 = 12,
-	DDP_COMPONENT_GAMMA = 13,
-	DDP_COMPONENT_OD0 = 14,
-	DDP_COMPONENT_OD1 = 15,
-	DDP_COMPONENT_OVL0 = 16,
-	DDP_COMPONENT_OVL_2L0 = 17,
-	DDP_COMPONENT_OVL_2L1 = 18,
-	DDP_COMPONENT_OVL1 = 19,
-	DDP_COMPONENT_PWM0 = 20,
-	DDP_COMPONENT_PWM1 = 21,
-	DDP_COMPONENT_PWM2 = 22,
-	DDP_COMPONENT_RDMA0 = 23,
-	DDP_COMPONENT_RDMA1 = 24,
-	DDP_COMPONENT_RDMA2 = 25,
-	DDP_COMPONENT_UFOE = 26,
-	DDP_COMPONENT_WDMA0 = 27,
-	DDP_COMPONENT_WDMA1 = 28,
-	DDP_COMPONENT_ID_MAX = 29,
-};
-
-struct mtk_mmsys_driver_data {
-	const char *clk_driver;
-};
-
-struct meson_msr;
-
-struct meson_msr_id {
-	struct meson_msr *priv;
-	unsigned int id;
-	const char *name;
-};
-
-struct meson_msr {
-	struct regmap *regmap;
-	struct meson_msr_id msr_table[128];
-};
-
-struct meson_gx_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-struct meson_gx_package_id {
-	const char *name;
-	unsigned int major_id;
-	unsigned int pack_id;
-	unsigned int pack_mask;
+struct fsl_soc_data {
+	const char *sfp_compat;
+	u32 uid_offset;
 };
 
 struct meson_gx_pwrc_vpu {
@@ -75651,345 +97234,17 @@
 	struct clk *vapb_clk;
 };
 
-struct meson_ee_pwrc_mem_domain {
-	unsigned int reg;
-	unsigned int mask;
+struct qcom_smem_state_ops {
+	int (*update_bits)(void *, u32, u32);
 };
 
-struct meson_ee_pwrc_top_domain {
-	unsigned int sleep_reg;
-	unsigned int sleep_mask;
-	unsigned int iso_reg;
-	unsigned int iso_mask;
-};
-
-struct meson_ee_pwrc_domain;
-
-struct meson_ee_pwrc_domain_desc {
-	char *name;
-	unsigned int reset_names_count;
-	unsigned int clk_names_count;
-	struct meson_ee_pwrc_top_domain *top_pd;
-	unsigned int mem_pd_count;
-	struct meson_ee_pwrc_mem_domain *mem_pd;
-	bool (*get_power)(struct meson_ee_pwrc_domain *);
-};
-
-struct meson_ee_pwrc;
-
-struct meson_ee_pwrc_domain {
-	struct generic_pm_domain base;
-	bool enabled;
-	struct meson_ee_pwrc *pwrc;
-	struct meson_ee_pwrc_domain_desc desc;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	struct reset_control *rstc;
-	int num_rstc;
-};
-
-struct meson_ee_pwrc_domain_data {
-	unsigned int count;
-	struct meson_ee_pwrc_domain_desc *domains;
-};
-
-struct meson_ee_pwrc {
-	struct regmap *regmap_ao;
-	struct regmap *regmap_hhi;
-	struct meson_ee_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-};
-
-enum {
-	SM_EFUSE_READ = 0,
-	SM_EFUSE_WRITE = 1,
-	SM_EFUSE_USER_MAX = 2,
-	SM_GET_CHIP_ID = 3,
-	SM_A1_PWRC_SET = 4,
-	SM_A1_PWRC_GET = 5,
-};
-
-struct meson_secure_pwrc;
-
-struct meson_secure_pwrc_domain {
-	struct generic_pm_domain base;
-	unsigned int index;
-	struct meson_secure_pwrc *pwrc;
-};
-
-struct meson_sm_firmware;
-
-struct meson_secure_pwrc {
-	struct meson_secure_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-	struct meson_sm_firmware *fw;
-};
-
-struct meson_secure_pwrc_domain_desc {
-	unsigned int index;
-	unsigned int flags;
-	char *name;
-	bool (*is_off)(struct meson_secure_pwrc_domain *);
-};
-
-struct meson_secure_pwrc_domain_data {
-	unsigned int count;
-	struct meson_secure_pwrc_domain_desc *domains;
-};
-
-enum cmd_db_hw_type {
-	CMD_DB_HW_INVALID = 0,
-	CMD_DB_HW_MIN = 3,
-	CMD_DB_HW_ARC = 3,
-	CMD_DB_HW_VRM = 4,
-	CMD_DB_HW_BCM = 5,
-	CMD_DB_HW_MAX = 5,
-	CMD_DB_HW_ALL = 255,
-};
-
-struct entry_header {
-	u8 id[8];
-	__le32 priority[2];
-	__le32 addr;
-	__le16 len;
-	__le16 offset;
-};
-
-struct rsc_hdr {
-	__le16 slv_id;
-	__le16 header_offset;
-	__le16 data_offset;
-	__le16 cnt;
-	__le16 version;
-	__le16 reserved[3];
-};
-
-struct cmd_db_header {
-	__le32 version;
-	u8 magic[4];
-	struct rsc_hdr header[8];
-	__le32 checksum;
-	__le32 reserved;
-	u8 data[0];
-};
-
-struct smem_proc_comm {
-	__le32 command;
-	__le32 status;
-	__le32 params[2];
-};
-
-struct smem_global_entry {
-	__le32 allocated;
-	__le32 offset;
-	__le32 size;
-	__le32 aux_base;
-};
-
-struct smem_header {
-	struct smem_proc_comm proc_comm[4];
-	__le32 version[32];
-	__le32 initialized;
-	__le32 free_offset;
-	__le32 available;
-	__le32 reserved;
-	struct smem_global_entry toc[512];
-};
-
-struct smem_ptable_entry {
-	__le32 offset;
-	__le32 size;
-	__le32 flags;
-	__le16 host0;
-	__le16 host1;
-	__le32 cacheline;
-	__le32 reserved[7];
-};
-
-struct smem_ptable {
-	u8 magic[4];
-	__le32 version;
-	__le32 num_entries;
-	__le32 reserved[5];
-	struct smem_ptable_entry entry[0];
-};
-
-struct smem_partition_header {
-	u8 magic[4];
-	__le16 host0;
-	__le16 host1;
-	__le32 size;
-	__le32 offset_free_uncached;
-	__le32 offset_free_cached;
-	__le32 reserved[3];
-};
-
-struct smem_private_entry {
-	u16 canary;
-	__le16 item;
-	__le32 size;
-	__le16 padding_data;
-	__le16 padding_hdr;
-	__le32 reserved;
-};
-
-struct smem_info {
-	u8 magic[4];
-	__le32 size;
-	__le32 base_addr;
-	__le32 reserved;
-	__le16 num_items;
-};
-
-struct smem_region {
-	u32 aux_base;
-	void *virt_base;
-	size_t size;
-};
-
-struct hwspinlock;
-
-struct qcom_smem {
-	struct device *dev;
-	struct hwspinlock *hwlock;
-	struct smem_partition_header *global_partition;
-	size_t global_cacheline;
-	struct smem_partition_header *partitions[11];
-	size_t cacheline[11];
-	u32 item_count;
-	struct platform_device *socinfo;
-	unsigned int num_regions;
-	struct smem_region regions[0];
-};
-
-struct rockchip_grf_value {
-	const char *desc;
-	u32 reg;
-	u32 val;
-};
-
-struct rockchip_grf_info {
-	const struct rockchip_grf_value *values;
-	int num_values;
-};
-
-struct rockchip_domain_info {
-	int pwr_mask;
-	int status_mask;
-	int req_mask;
-	int idle_mask;
-	int ack_mask;
-	bool active_wakeup;
-	int pwr_w_mask;
-	int req_w_mask;
-};
-
-struct rockchip_pmu_info {
-	u32 pwr_offset;
-	u32 status_offset;
-	u32 req_offset;
-	u32 idle_offset;
-	u32 ack_offset;
-	u32 core_pwrcnt_offset;
-	u32 gpu_pwrcnt_offset;
-	unsigned int core_power_transition_time;
-	unsigned int gpu_power_transition_time;
-	int num_domains;
-	const struct rockchip_domain_info *domain_info;
-};
-
-struct rockchip_pmu;
-
-struct rockchip_pm_domain {
-	struct generic_pm_domain genpd;
-	const struct rockchip_domain_info *info;
-	struct rockchip_pmu *pmu;
-	int num_qos;
-	struct regmap **qos_regmap;
-	u32 *qos_save_regs[5];
-	int num_clks;
-	struct clk_bulk_data *clks;
-};
-
-struct rockchip_pmu {
-	struct device *dev;
-	struct regmap *regmap;
-	const struct rockchip_pmu_info *info;
-	struct mutex mutex;
-	struct genpd_onecell_data genpd_data;
-	struct generic_pm_domain *domains[0];
-};
-
-struct exynos_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-enum sys_powerdown {
-	SYS_AFTR = 0,
-	SYS_LPA = 1,
-	SYS_SLEEP = 2,
-	NUM_SYS_POWERDOWN = 3,
-};
-
-struct exynos_pmu_conf {
-	unsigned int offset;
-	u8 val[3];
-};
-
-struct exynos_pmu_data {
-	const struct exynos_pmu_conf *pmu_config;
-	void (*pmu_init)();
-	void (*powerdown_conf)(enum sys_powerdown);
-	void (*powerdown_conf_extra)(enum sys_powerdown);
-};
-
-struct exynos_pmu_context {
-	struct device *dev;
-	const struct exynos_pmu_data *pmu_data;
-};
-
-struct exynos_pm_domain_config {
-	u32 local_pwr_cfg;
-};
-
-struct exynos_pm_domain {
-	void *base;
-	bool is_off;
-	struct generic_pm_domain pd;
-	u32 local_pwr_cfg;
-};
-
-struct sunxi_sram_func {
-	char *func;
-	u8 val;
-	u32 reg_val;
-};
-
-struct sunxi_sram_data {
-	char *name;
-	u8 reg;
-	u8 offset;
-	u8 width;
-	struct sunxi_sram_func *func;
+struct qcom_smem_state {
+	struct kref refcount;
+	bool orphan;
 	struct list_head list;
-};
-
-struct sunxi_sram_desc {
-	struct sunxi_sram_data data;
-	bool claimed;
-};
-
-struct sunxi_sramc_variant {
-	bool has_emac_clock;
-};
-
-struct nvmem_cell_info {
-	const char *name;
-	unsigned int offset;
-	unsigned int bytes;
-	unsigned int bit_offset;
-	unsigned int nbits;
+	struct device_node *of_node;
+	void *priv;
+	struct qcom_smem_state_ops ops;
 };
 
 struct nvmem_cell_lookup {
@@ -76000,39 +97255,6 @@
 	struct list_head node;
 };
 
-typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
-
-typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
-
-enum nvmem_type {
-	NVMEM_TYPE_UNKNOWN = 0,
-	NVMEM_TYPE_EEPROM = 1,
-	NVMEM_TYPE_OTP = 2,
-	NVMEM_TYPE_BATTERY_BACKED = 3,
-};
-
-struct nvmem_config {
-	struct device *dev;
-	const char *name;
-	int id;
-	struct module *owner;
-	struct gpio_desc *wp_gpio;
-	const struct nvmem_cell_info *cells;
-	int ncells;
-	enum nvmem_type type;
-	bool read_only;
-	bool root_only;
-	bool no_of_node;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	int size;
-	int word_size;
-	int stride;
-	void *priv;
-	bool compat;
-	struct device *base_dev;
-};
-
 struct tegra_fuse;
 
 struct tegra_fuse_info {
@@ -76041,8 +97263,6 @@
 	unsigned int spare;
 };
 
-struct nvmem_device;
-
 struct tegra_fuse_soc;
 
 struct tegra_fuse {
@@ -76050,6 +97270,7 @@
 	void *base;
 	phys_addr_t phys;
 	struct clk *clk;
+	struct reset_control *rst;
 	u32 (*read_early)(struct tegra_fuse *, unsigned int);
 	u32 (*read)(struct tegra_fuse *, unsigned int);
 	const struct tegra_fuse_soc *soc;
@@ -76073,2225 +97294,18 @@
 	const struct nvmem_cell_lookup *lookups;
 	unsigned int num_lookups;
 	const struct attribute_group *soc_attr_group;
+	bool clk_suspend_on;
 };
 
-enum {
-	THRESHOLD_INDEX_0 = 0,
-	THRESHOLD_INDEX_1 = 1,
-	THRESHOLD_INDEX_COUNT = 2,
-};
-
-enum tegra_suspend_mode {
-	TEGRA_SUSPEND_NONE = 0,
-	TEGRA_SUSPEND_LP2 = 1,
-	TEGRA_SUSPEND_LP1 = 2,
-	TEGRA_SUSPEND_LP0 = 3,
-	TEGRA_MAX_SUSPEND_MODE = 4,
-};
-
-enum tegra_io_pad {
-	TEGRA_IO_PAD_AUDIO = 0,
-	TEGRA_IO_PAD_AUDIO_HV = 1,
-	TEGRA_IO_PAD_BB = 2,
-	TEGRA_IO_PAD_CAM = 3,
-	TEGRA_IO_PAD_COMP = 4,
-	TEGRA_IO_PAD_CONN = 5,
-	TEGRA_IO_PAD_CSIA = 6,
-	TEGRA_IO_PAD_CSIB = 7,
-	TEGRA_IO_PAD_CSIC = 8,
-	TEGRA_IO_PAD_CSID = 9,
-	TEGRA_IO_PAD_CSIE = 10,
-	TEGRA_IO_PAD_CSIF = 11,
-	TEGRA_IO_PAD_CSIG = 12,
-	TEGRA_IO_PAD_CSIH = 13,
-	TEGRA_IO_PAD_DAP3 = 14,
-	TEGRA_IO_PAD_DAP5 = 15,
-	TEGRA_IO_PAD_DBG = 16,
-	TEGRA_IO_PAD_DEBUG_NONAO = 17,
-	TEGRA_IO_PAD_DMIC = 18,
-	TEGRA_IO_PAD_DMIC_HV = 19,
-	TEGRA_IO_PAD_DP = 20,
-	TEGRA_IO_PAD_DSI = 21,
-	TEGRA_IO_PAD_DSIB = 22,
-	TEGRA_IO_PAD_DSIC = 23,
-	TEGRA_IO_PAD_DSID = 24,
-	TEGRA_IO_PAD_EDP = 25,
-	TEGRA_IO_PAD_EMMC = 26,
-	TEGRA_IO_PAD_EMMC2 = 27,
-	TEGRA_IO_PAD_EQOS = 28,
-	TEGRA_IO_PAD_GPIO = 29,
-	TEGRA_IO_PAD_GP_PWM2 = 30,
-	TEGRA_IO_PAD_GP_PWM3 = 31,
-	TEGRA_IO_PAD_HDMI = 32,
-	TEGRA_IO_PAD_HDMI_DP0 = 33,
-	TEGRA_IO_PAD_HDMI_DP1 = 34,
-	TEGRA_IO_PAD_HDMI_DP2 = 35,
-	TEGRA_IO_PAD_HDMI_DP3 = 36,
-	TEGRA_IO_PAD_HSIC = 37,
-	TEGRA_IO_PAD_HV = 38,
-	TEGRA_IO_PAD_LVDS = 39,
-	TEGRA_IO_PAD_MIPI_BIAS = 40,
-	TEGRA_IO_PAD_NAND = 41,
-	TEGRA_IO_PAD_PEX_BIAS = 42,
-	TEGRA_IO_PAD_PEX_CLK_BIAS = 43,
-	TEGRA_IO_PAD_PEX_CLK1 = 44,
-	TEGRA_IO_PAD_PEX_CLK2 = 45,
-	TEGRA_IO_PAD_PEX_CLK3 = 46,
-	TEGRA_IO_PAD_PEX_CLK_2_BIAS = 47,
-	TEGRA_IO_PAD_PEX_CLK_2 = 48,
-	TEGRA_IO_PAD_PEX_CNTRL = 49,
-	TEGRA_IO_PAD_PEX_CTL2 = 50,
-	TEGRA_IO_PAD_PEX_L0_RST_N = 51,
-	TEGRA_IO_PAD_PEX_L1_RST_N = 52,
-	TEGRA_IO_PAD_PEX_L5_RST_N = 53,
-	TEGRA_IO_PAD_PWR_CTL = 54,
-	TEGRA_IO_PAD_SDMMC1 = 55,
-	TEGRA_IO_PAD_SDMMC1_HV = 56,
-	TEGRA_IO_PAD_SDMMC2 = 57,
-	TEGRA_IO_PAD_SDMMC2_HV = 58,
-	TEGRA_IO_PAD_SDMMC3 = 59,
-	TEGRA_IO_PAD_SDMMC3_HV = 60,
-	TEGRA_IO_PAD_SDMMC4 = 61,
-	TEGRA_IO_PAD_SOC_GPIO10 = 62,
-	TEGRA_IO_PAD_SOC_GPIO12 = 63,
-	TEGRA_IO_PAD_SOC_GPIO13 = 64,
-	TEGRA_IO_PAD_SOC_GPIO53 = 65,
-	TEGRA_IO_PAD_SPI = 66,
-	TEGRA_IO_PAD_SPI_HV = 67,
-	TEGRA_IO_PAD_SYS_DDC = 68,
-	TEGRA_IO_PAD_UART = 69,
-	TEGRA_IO_PAD_UART4 = 70,
-	TEGRA_IO_PAD_UART5 = 71,
-	TEGRA_IO_PAD_UFS = 72,
-	TEGRA_IO_PAD_USB0 = 73,
-	TEGRA_IO_PAD_USB1 = 74,
-	TEGRA_IO_PAD_USB2 = 75,
-	TEGRA_IO_PAD_USB3 = 76,
-	TEGRA_IO_PAD_USB_BIAS = 77,
-	TEGRA_IO_PAD_AO_HV = 78,
-};
-
-struct pmc_clk {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 mux_shift;
-	u32 force_en_shift;
-};
-
-struct pmc_clk_gate {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 shift;
-};
-
-struct pmc_clk_init_data {
-	char *name;
-	const char * const *parents;
-	int num_parents;
-	int clk_id;
-	u8 mux_shift;
-	u8 force_en_shift;
-};
-
-struct tegra_pmc;
-
-struct tegra_powergate {
-	struct generic_pm_domain genpd;
-	struct tegra_pmc *pmc;
+struct k3_soc_id {
 	unsigned int id;
-	struct clk **clks;
-	unsigned int num_clks;
-	struct reset_control *reset;
+	const char *family_name;
 };
 
-struct tegra_pmc_soc;
-
-struct tegra_pmc {
-	struct device *dev;
-	void *base;
-	void *wake;
-	void *aotag;
-	void *scratch;
-	struct clk *clk;
-	struct dentry *debugfs;
-	const struct tegra_pmc_soc *soc;
-	bool tz_only;
-	long unsigned int rate;
-	enum tegra_suspend_mode suspend_mode;
-	u32 cpu_good_time;
-	u32 cpu_off_time;
-	u32 core_osc_time;
-	u32 core_pmu_time;
-	u32 core_off_time;
-	bool corereq_high;
-	bool sysclkreq_high;
-	bool combined_req;
-	bool cpu_pwr_good_en;
-	u32 lp0_vec_phys;
-	u32 lp0_vec_size;
-	long unsigned int powergates_available[1];
-	struct mutex powergates_lock;
-	struct pinctrl_dev *pctl_dev;
-	struct irq_domain *domain;
-	struct irq_chip irq;
-	struct notifier_block clk_nb;
-};
-
-struct tegra_io_pad_soc {
-	enum tegra_io_pad id;
-	unsigned int dpd;
-	unsigned int voltage;
-	const char *name;
-};
-
-struct tegra_pmc_regs {
-	unsigned int scratch0;
-	unsigned int dpd_req;
-	unsigned int dpd_status;
-	unsigned int dpd2_req;
-	unsigned int dpd2_status;
-	unsigned int rst_status;
-	unsigned int rst_source_shift;
-	unsigned int rst_source_mask;
-	unsigned int rst_level_shift;
-	unsigned int rst_level_mask;
-};
-
-struct tegra_wake_event {
-	const char *name;
-	unsigned int id;
-	unsigned int irq;
-	struct {
-		unsigned int instance;
-		unsigned int pin;
-	} gpio;
-};
-
-struct tegra_pmc_soc {
-	unsigned int num_powergates;
-	const char * const *powergates;
-	unsigned int num_cpu_powergates;
-	const u8 *cpu_powergates;
-	bool has_tsense_reset;
-	bool has_gpu_clamps;
-	bool needs_mbist_war;
-	bool has_impl_33v_pwr;
-	bool maybe_tz_only;
-	const struct tegra_io_pad_soc *io_pads;
-	unsigned int num_io_pads;
-	const struct pinctrl_pin_desc *pin_descs;
-	unsigned int num_pin_descs;
-	const struct tegra_pmc_regs *regs;
-	void (*init)(struct tegra_pmc *);
-	void (*setup_irq_polarity)(struct tegra_pmc *, struct device_node *, bool);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	const char * const *reset_sources;
-	unsigned int num_reset_sources;
-	const char * const *reset_levels;
-	unsigned int num_reset_levels;
-	const struct tegra_wake_event *wake_events;
-	unsigned int num_wake_events;
-	const struct pmc_clk_init_data *pmc_clks_data;
-	unsigned int num_pmc_clks;
-	bool has_blink_output;
-};
-
-enum mrq_pg_cmd {
-	CMD_PG_QUERY_ABI = 0,
-	CMD_PG_SET_STATE = 1,
-	CMD_PG_GET_STATE = 2,
-	CMD_PG_GET_NAME = 3,
-	CMD_PG_GET_MAX_ID = 4,
-};
-
-enum pg_states {
-	PG_STATE_OFF = 0,
-	PG_STATE_ON = 1,
-	PG_STATE_RUNNING = 2,
-};
-
-struct cmd_pg_query_abi_request {
-	uint32_t type;
-};
-
-struct cmd_pg_set_state_request {
-	uint32_t state;
-};
-
-struct cmd_pg_get_state_response {
-	uint32_t state;
-};
-
-struct cmd_pg_get_name_response {
-	uint8_t name[40];
-};
-
-struct cmd_pg_get_max_id_response {
-	uint32_t max_id;
-};
-
-struct mrq_pg_request {
-	uint32_t cmd;
-	uint32_t id;
-	union {
-		struct cmd_pg_query_abi_request query_abi;
-		struct cmd_pg_set_state_request set_state;
-	};
-};
-
-struct mrq_pg_response {
-	union {
-		struct cmd_pg_get_state_response get_state;
-		struct cmd_pg_get_name_response get_name;
-		struct cmd_pg_get_max_id_response get_max_id;
-	};
-};
-
-struct tegra_powergate_info {
-	unsigned int id;
-	char *name;
-};
-
-struct tegra_powergate___2 {
-	struct generic_pm_domain genpd;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-};
-
-typedef struct {
-	union {
-		xen_pfn_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_pfn_t;
-
-struct grant_entry_v1 {
-	uint16_t flags;
-	domid_t domid;
-	uint32_t frame;
-};
-
-struct grant_entry_header {
-	uint16_t flags;
-	domid_t domid;
-};
-
-union grant_entry_v2 {
-	struct grant_entry_header hdr;
-	struct {
-		struct grant_entry_header hdr;
-		uint32_t pad0;
-		uint64_t frame;
-	} full_page;
-	struct {
-		struct grant_entry_header hdr;
-		uint16_t page_off;
-		uint16_t length;
-		uint64_t frame;
-	} sub_page;
-	struct {
-		struct grant_entry_header hdr;
-		domid_t trans_domid;
-		uint16_t pad0;
-		grant_ref_t gref;
-	} transitive;
-	uint32_t __spacer[4];
-};
-
-struct gnttab_setup_table {
-	domid_t dom;
-	uint32_t nr_frames;
-	int16_t status;
-	__guest_handle_xen_pfn_t frame_list;
-};
-
-struct gnttab_copy {
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} source;
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} dest;
-	uint16_t len;
-	uint16_t flags;
-	int16_t status;
-};
-
-struct gnttab_query_size {
-	domid_t dom;
-	uint32_t nr_frames;
-	uint32_t max_nr_frames;
-	int16_t status;
-};
-
-struct gnttab_set_version {
-	uint32_t version;
-};
-
-struct gnttab_get_status_frames {
-	uint32_t nr_frames;
-	domid_t dom;
-	int16_t status;
-	__guest_handle_uint64_t frame_list;
-};
-
-struct gnttab_free_callback {
-	struct gnttab_free_callback *next;
-	void (*fn)(void *);
-	void *arg;
-	u16 count;
-};
-
-struct gntab_unmap_queue_data;
-
-typedef void (*gnttab_unmap_refs_done)(int, struct gntab_unmap_queue_data *);
-
-struct gntab_unmap_queue_data {
-	struct delayed_work gnttab_work;
-	void *data;
-	gnttab_unmap_refs_done done;
-	struct gnttab_unmap_grant_ref *unmap_ops;
-	struct gnttab_unmap_grant_ref *kunmap_ops;
-	struct page **pages;
-	unsigned int count;
-	unsigned int age;
-};
-
-struct gnttab_page_cache {
-	spinlock_t lock;
-	struct list_head pages;
-	unsigned int num_pages;
-};
-
-struct xen_page_foreign {
-	domid_t domid;
-	grant_ref_t gref;
-};
-
-typedef void (*xen_grant_fn_t)(long unsigned int, unsigned int, unsigned int, void *);
-
-struct gnttab_ops {
-	unsigned int version;
-	unsigned int grefs_per_grant_frame;
-	int (*map_frames)(xen_pfn_t *, unsigned int);
-	void (*unmap_frames)();
-	void (*update_entry)(grant_ref_t, domid_t, long unsigned int, unsigned int);
-	int (*end_foreign_access_ref)(grant_ref_t, int);
-	long unsigned int (*end_foreign_transfer_ref)(grant_ref_t);
-	int (*query_foreign_access)(grant_ref_t);
-};
-
-struct unmap_refs_callback_data {
-	struct completion completion;
-	int result;
-};
-
-struct deferred_entry {
-	struct list_head list;
-	grant_ref_t ref;
-	bool ro;
-	uint16_t warn_delay;
-	struct page *page;
-};
-
-struct xen_feature_info {
-	unsigned int submap_idx;
-	uint32_t submap;
-};
-
-struct balloon_stats {
-	long unsigned int current_pages;
-	long unsigned int target_pages;
-	long unsigned int target_unpopulated;
-	long unsigned int balloon_low;
-	long unsigned int balloon_high;
-	long unsigned int total_pages;
-	long unsigned int schedule_delay;
-	long unsigned int max_schedule_delay;
-	long unsigned int retry_count;
-	long unsigned int max_retry_count;
-};
-
-enum bp_state {
-	BP_DONE = 0,
-	BP_WAIT = 1,
-	BP_EAGAIN = 2,
-	BP_ECANCELED = 3,
-};
-
-enum shutdown_state {
-	SHUTDOWN_INVALID = 4294967295,
-	SHUTDOWN_POWEROFF = 0,
-	SHUTDOWN_SUSPEND = 2,
-	SHUTDOWN_HALT = 4,
-};
-
-struct suspend_info {
-	int cancelled;
-};
-
-struct shutdown_handler {
-	const char command[11];
-	bool flag;
-	void (*cb)();
-};
-
-struct vcpu_runstate_info {
-	int state;
-	uint64_t state_entry_time;
-	uint64_t time[4];
-};
-
-typedef struct {
-	union {
-		struct vcpu_runstate_info *p;
-		uint64_t q;
-	};
-} __guest_handle_vcpu_runstate_info;
-
-struct vcpu_register_runstate_memory_area {
-	union {
-		__guest_handle_vcpu_runstate_info h;
-		struct vcpu_runstate_info *v;
-		uint64_t p;
-	} addr;
-};
-
-struct xen_memory_reservation {
-	__guest_handle_xen_pfn_t extent_start;
-	xen_ulong_t nr_extents;
-	unsigned int extent_order;
-	unsigned int address_bits;
-	domid_t domid;
-};
-
-typedef uint32_t evtchn_port_t;
-
-typedef struct {
-	union {
-		evtchn_port_t *p;
-		uint64_t q;
-	};
-} __guest_handle_evtchn_port_t;
-
-struct evtchn_bind_interdomain {
-	domid_t remote_dom;
-	evtchn_port_t remote_port;
-	evtchn_port_t local_port;
-};
-
-struct evtchn_bind_virq {
-	uint32_t virq;
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_pirq {
-	uint32_t pirq;
-	uint32_t flags;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_ipi {
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_close {
-	evtchn_port_t port;
-};
-
-struct evtchn_send {
-	evtchn_port_t port;
-};
-
-struct evtchn_status {
-	domid_t dom;
-	evtchn_port_t port;
-	uint32_t status;
-	uint32_t vcpu;
-	union {
-		struct {
-			domid_t dom;
-		} unbound;
-		struct {
-			domid_t dom;
-			evtchn_port_t port;
-		} interdomain;
-		uint32_t pirq;
-		uint32_t virq;
-	} u;
-};
-
-struct evtchn_bind_vcpu {
-	evtchn_port_t port;
-	uint32_t vcpu;
-};
-
-struct evtchn_set_priority {
-	evtchn_port_t port;
-	uint32_t priority;
-};
-
-struct sched_poll {
-	__guest_handle_evtchn_port_t ports;
-	unsigned int nr_ports;
-	uint64_t timeout;
-};
-
-enum ipi_vector {
-	XEN_PLACEHOLDER_VECTOR = 0,
-	XEN_NR_IPIS = 1,
-};
-
-struct physdev_eoi {
-	uint32_t irq;
-};
-
-struct physdev_irq_status_query {
-	uint32_t irq;
-	uint32_t flags;
-};
-
-struct physdev_irq {
-	uint32_t irq;
-	uint32_t vector;
-};
-
-struct physdev_map_pirq {
-	domid_t domid;
-	int type;
-	int index;
-	int pirq;
-	int bus;
-	int devfn;
-	int entry_nr;
-	uint64_t table_base;
-};
-
-struct physdev_unmap_pirq {
-	domid_t domid;
-	int pirq;
-};
-
-struct physdev_get_free_pirq {
-	int type;
-	uint32_t pirq;
-};
-
-struct evtchn_loop_ctrl;
-
-struct evtchn_ops {
-	unsigned int (*max_channels)();
-	unsigned int (*nr_channels)();
-	int (*setup)(evtchn_port_t);
-	void (*bind_to_cpu)(evtchn_port_t, unsigned int, unsigned int);
-	void (*clear_pending)(evtchn_port_t);
-	void (*set_pending)(evtchn_port_t);
-	bool (*is_pending)(evtchn_port_t);
-	bool (*test_and_set_mask)(evtchn_port_t);
-	void (*mask)(evtchn_port_t);
-	void (*unmask)(evtchn_port_t);
-	void (*handle_events)(unsigned int, struct evtchn_loop_ctrl *);
-	void (*resume)();
-	int (*percpu_init)(unsigned int);
-	int (*percpu_deinit)(unsigned int);
-};
-
-struct evtchn_loop_ctrl {
-	ktime_t timeout;
-	unsigned int count;
-	bool defer_eoi;
-};
-
-enum xen_irq_type {
-	IRQT_UNBOUND = 0,
-	IRQT_PIRQ = 1,
-	IRQT_VIRQ = 2,
-	IRQT_IPI = 3,
-	IRQT_EVTCHN = 4,
-};
-
-struct irq_info {
-	struct list_head list;
-	struct list_head eoi_list;
-	short int refcnt;
-	short int spurious_cnt;
-	enum xen_irq_type type;
-	unsigned int irq;
-	evtchn_port_t evtchn;
-	short unsigned int cpu;
-	short unsigned int eoi_cpu;
-	unsigned int irq_epoch;
-	u64 eoi_time;
-	union {
-		short unsigned int virq;
-		enum ipi_vector ipi;
-		struct {
-			short unsigned int pirq;
-			short unsigned int gsi;
-			unsigned char vector;
-			unsigned char flags;
-			uint16_t domid;
-		} pirq;
-	} u;
-};
-
-struct lateeoi_work {
-	struct delayed_work delayed;
-	spinlock_t eoi_list_lock;
-	struct list_head eoi_list;
-};
-
-struct evtchn_unmask {
-	evtchn_port_t port;
-};
-
-struct evtchn_init_control {
-	uint64_t control_gfn;
-	uint32_t offset;
-	uint32_t vcpu;
-	uint8_t link_bits;
-	uint8_t _pad[7];
-};
-
-struct evtchn_expand_array {
-	uint64_t array_gfn;
-};
-
-typedef uint32_t event_word_t;
-
-struct evtchn_fifo_control_block {
-	uint32_t ready;
-	uint32_t _rsvd;
-	event_word_t head[16];
-};
-
-struct evtchn_fifo_queue {
-	uint32_t head[16];
-};
-
-struct evtchn_alloc_unbound {
-	domid_t dom;
-	domid_t remote_dom;
-	evtchn_port_t port;
-};
-
-struct xenbus_map_node {
-	struct list_head next;
-	union {
-		struct {
-			struct vm_struct *area;
-		} pv;
-		struct {
-			struct page *pages[16];
-			long unsigned int addrs[16];
-			void *addr;
-		} hvm;
-	};
-	grant_handle_t handles[16];
-	unsigned int nr_handles;
-};
-
-struct map_ring_valloc {
-	struct xenbus_map_node *node;
-	long unsigned int addrs[16];
-	phys_addr_t phys_addrs[16];
-	struct gnttab_map_grant_ref map[16];
-	struct gnttab_unmap_grant_ref unmap[16];
-	unsigned int idx;
-};
-
-struct xenbus_ring_ops {
-	int (*map)(struct xenbus_device *, struct map_ring_valloc *, grant_ref_t *, unsigned int, void **);
-	int (*unmap)(struct xenbus_device *, void *);
-};
-
-struct unmap_ring_hvm {
-	unsigned int idx;
-	long unsigned int addrs[16];
-};
-
-enum xsd_sockmsg_type {
-	XS_DEBUG = 0,
-	XS_DIRECTORY = 1,
-	XS_READ = 2,
-	XS_GET_PERMS = 3,
-	XS_WATCH = 4,
-	XS_UNWATCH = 5,
-	XS_TRANSACTION_START = 6,
-	XS_TRANSACTION_END = 7,
-	XS_INTRODUCE = 8,
-	XS_RELEASE = 9,
-	XS_GET_DOMAIN_PATH = 10,
-	XS_WRITE = 11,
-	XS_MKDIR = 12,
-	XS_RM = 13,
-	XS_SET_PERMS = 14,
-	XS_WATCH_EVENT = 15,
-	XS_ERROR = 16,
-	XS_IS_DOMAIN_INTRODUCED = 17,
-	XS_RESUME = 18,
-	XS_SET_TARGET = 19,
-	XS_RESTRICT = 20,
-	XS_RESET_WATCHES = 21,
-};
-
-struct xsd_sockmsg {
-	uint32_t type;
-	uint32_t req_id;
-	uint32_t tx_id;
-	uint32_t len;
-};
-
-typedef uint32_t XENSTORE_RING_IDX;
-
-struct xenstore_domain_interface {
-	char req[1024];
-	char rsp[1024];
-	XENSTORE_RING_IDX req_cons;
-	XENSTORE_RING_IDX req_prod;
-	XENSTORE_RING_IDX rsp_cons;
-	XENSTORE_RING_IDX rsp_prod;
-};
-
-struct xs_watch_event {
-	struct list_head list;
-	unsigned int len;
-	struct xenbus_watch *handle;
-	const char *path;
-	const char *token;
-	char body[0];
-};
-
-enum xb_req_state {
-	xb_req_state_queued = 0,
-	xb_req_state_wait_reply = 1,
-	xb_req_state_got_reply = 2,
-	xb_req_state_aborted = 3,
-};
-
-struct xb_req_data {
-	struct list_head list;
-	wait_queue_head_t wq;
-	struct xsd_sockmsg msg;
-	uint32_t caller_req_id;
-	enum xsd_sockmsg_type type;
-	char *body;
-	const struct kvec *vec;
-	int num_vecs;
-	int err;
-	enum xb_req_state state;
-	bool user_req;
-	void (*cb)(struct xb_req_data *);
-	void *par;
-};
-
-enum xenstore_init {
-	XS_UNKNOWN = 0,
-	XS_PV = 1,
-	XS_HVM = 2,
-	XS_LOCAL = 3,
-};
-
-struct xen_bus_type {
-	char *root;
-	unsigned int levels;
-	int (*get_bus_id)(char *, const char *);
-	int (*probe)(struct xen_bus_type *, const char *, const char *);
-	bool (*otherend_will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*otherend_changed)(struct xenbus_watch *, const char *, const char *);
-	struct bus_type bus;
-};
-
-struct xb_find_info {
-	struct xenbus_device *dev;
-	const char *nodename;
-};
-
-struct xenbus_transaction_holder {
-	struct list_head list;
-	struct xenbus_transaction handle;
-	unsigned int generation_id;
-};
-
-struct read_buffer {
-	struct list_head list;
-	unsigned int cons;
-	unsigned int len;
-	char msg[0];
-};
-
-struct xenbus_file_priv {
-	struct mutex msgbuffer_mutex;
-	struct list_head transactions;
-	struct list_head watches;
-	unsigned int len;
-	union {
-		struct xsd_sockmsg msg;
-		char buffer[4096];
-	} u;
-	struct mutex reply_mutex;
-	struct list_head read_buffers;
-	wait_queue_head_t read_waitq;
-	struct kref kref;
-	struct work_struct wq;
-};
-
-struct watch_adapter {
-	struct list_head list;
-	struct xenbus_watch watch;
-	struct xenbus_file_priv *dev_data;
-	char *token;
-};
-
-typedef struct {
-	union {
-		int *p;
-		uint64_t q;
-	};
-} __guest_handle_int;
-
-typedef struct {
-	union {
-		xen_ulong_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_ulong_t;
-
-struct xen_add_to_physmap_range {
-	domid_t domid;
-	uint16_t space;
-	uint16_t size;
-	domid_t foreign_domid;
-	__guest_handle_xen_ulong_t idxs;
-	__guest_handle_xen_pfn_t gpfns;
-	__guest_handle_int errs;
-};
-
-struct xen_remove_from_physmap {
-	domid_t domid;
-	xen_pfn_t gpfn;
-};
-
-struct physdev_manage_pci {
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct physdev_manage_pci_ext {
-	uint8_t bus;
-	uint8_t devfn;
-	unsigned int is_extfn;
-	unsigned int is_virtfn;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-};
-
-struct physdev_pci_device_add {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-	uint32_t flags;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-	uint32_t optarr[0];
-};
-
-struct physdev_pci_device {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct usb_device_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdUSB;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bMaxPacketSize0;
-	__le16 idVendor;
-	__le16 idProduct;
-	__le16 bcdDevice;
-	__u8 iManufacturer;
-	__u8 iProduct;
-	__u8 iSerialNumber;
-	__u8 bNumConfigurations;
-};
-
-struct usb_config_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumInterfaces;
-	__u8 bConfigurationValue;
-	__u8 iConfiguration;
-	__u8 bmAttributes;
-	__u8 bMaxPower;
-} __attribute__((packed));
-
-struct usb_interface_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bInterfaceNumber;
-	__u8 bAlternateSetting;
-	__u8 bNumEndpoints;
-	__u8 bInterfaceClass;
-	__u8 bInterfaceSubClass;
-	__u8 bInterfaceProtocol;
-	__u8 iInterface;
-};
-
-struct usb_endpoint_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bEndpointAddress;
-	__u8 bmAttributes;
-	__le16 wMaxPacketSize;
-	__u8 bInterval;
-	__u8 bRefresh;
-	__u8 bSynchAddress;
-} __attribute__((packed));
-
-struct usb_ssp_isoc_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wReseved;
-	__le32 dwBytesPerInterval;
-};
-
-struct usb_ss_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bMaxBurst;
-	__u8 bmAttributes;
-	__le16 wBytesPerInterval;
-};
-
-struct usb_interface_assoc_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bFirstInterface;
-	__u8 bInterfaceCount;
-	__u8 bFunctionClass;
-	__u8 bFunctionSubClass;
-	__u8 bFunctionProtocol;
-	__u8 iFunction;
-};
-
-struct usb_bos_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumDeviceCaps;
-} __attribute__((packed));
-
-struct usb_ext_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__le32 bmAttributes;
-} __attribute__((packed));
-
-struct usb_ss_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bmAttributes;
-	__le16 wSpeedSupported;
-	__u8 bFunctionalitySupport;
-	__u8 bU1devExitLat;
-	__le16 bU2DevExitLat;
-};
-
-struct usb_ss_container_id_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__u8 ContainerID[16];
-};
-
-struct usb_ssp_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__le32 bmAttributes;
-	__le16 wFunctionalitySupport;
-	__le16 wReserved;
-	__le32 bmSublinkSpeedAttr[1];
-};
-
-struct usb_ptm_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-};
-
-enum usb_device_speed {
-	USB_SPEED_UNKNOWN = 0,
-	USB_SPEED_LOW = 1,
-	USB_SPEED_FULL = 2,
-	USB_SPEED_HIGH = 3,
-	USB_SPEED_WIRELESS = 4,
-	USB_SPEED_SUPER = 5,
-	USB_SPEED_SUPER_PLUS = 6,
-};
-
-enum usb_device_state {
-	USB_STATE_NOTATTACHED = 0,
-	USB_STATE_ATTACHED = 1,
-	USB_STATE_POWERED = 2,
-	USB_STATE_RECONNECTING = 3,
-	USB_STATE_UNAUTHENTICATED = 4,
-	USB_STATE_DEFAULT = 5,
-	USB_STATE_ADDRESS = 6,
-	USB_STATE_CONFIGURED = 7,
-	USB_STATE_SUSPENDED = 8,
-};
-
-enum usb3_link_state {
-	USB3_LPM_U0 = 0,
-	USB3_LPM_U1 = 1,
-	USB3_LPM_U2 = 2,
-	USB3_LPM_U3 = 3,
-};
-
-struct ep_device;
-
-struct usb_host_endpoint {
-	struct usb_endpoint_descriptor desc;
-	struct usb_ss_ep_comp_descriptor ss_ep_comp;
-	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
-	char: 8;
-	struct list_head urb_list;
-	void *hcpriv;
-	struct ep_device *ep_dev;
-	unsigned char *extra;
-	int extralen;
-	int enabled;
-	int streams;
-	int: 32;
-} __attribute__((packed));
-
-struct usb_host_interface {
-	struct usb_interface_descriptor desc;
-	int extralen;
-	unsigned char *extra;
-	struct usb_host_endpoint *endpoint;
-	char *string;
-};
-
-enum usb_interface_condition {
-	USB_INTERFACE_UNBOUND = 0,
-	USB_INTERFACE_BINDING = 1,
-	USB_INTERFACE_BOUND = 2,
-	USB_INTERFACE_UNBINDING = 3,
-};
-
-struct usb_interface {
-	struct usb_host_interface *altsetting;
-	struct usb_host_interface *cur_altsetting;
-	unsigned int num_altsetting;
-	struct usb_interface_assoc_descriptor *intf_assoc;
-	int minor;
-	enum usb_interface_condition condition;
-	unsigned int sysfs_files_created: 1;
-	unsigned int ep_devs_created: 1;
-	unsigned int unregistering: 1;
-	unsigned int needs_remote_wakeup: 1;
-	unsigned int needs_altsetting0: 1;
-	unsigned int needs_binding: 1;
-	unsigned int resetting_device: 1;
-	unsigned int authorized: 1;
-	struct device dev;
-	struct device *usb_dev;
-	struct work_struct reset_ws;
-};
-
-struct usb_interface_cache {
-	unsigned int num_altsetting;
-	struct kref ref;
-	struct usb_host_interface altsetting[0];
-};
-
-struct usb_host_config {
-	struct usb_config_descriptor desc;
-	char *string;
-	struct usb_interface_assoc_descriptor *intf_assoc[16];
-	struct usb_interface *interface[32];
-	struct usb_interface_cache *intf_cache[32];
-	unsigned char *extra;
-	int extralen;
-};
-
-struct usb_host_bos {
-	struct usb_bos_descriptor *desc;
-	struct usb_ext_cap_descriptor *ext_cap;
-	struct usb_ss_cap_descriptor *ss_cap;
-	struct usb_ssp_cap_descriptor *ssp_cap;
-	struct usb_ss_container_id_descriptor *ss_id;
-	struct usb_ptm_cap_descriptor *ptm_cap;
-};
-
-struct usb_devmap {
-	long unsigned int devicemap[2];
-};
-
-struct mon_bus;
-
-struct usb_device;
-
-struct usb_bus {
-	struct device *controller;
-	struct device *sysdev;
-	int busnum;
-	const char *bus_name;
-	u8 uses_pio_for_control;
-	u8 otg_port;
-	unsigned int is_b_host: 1;
-	unsigned int b_hnp_enable: 1;
-	unsigned int no_stop_on_short: 1;
-	unsigned int no_sg_constraint: 1;
-	unsigned int sg_tablesize;
-	int devnum_next;
-	struct mutex devnum_next_mutex;
-	struct usb_devmap devmap;
-	struct usb_device *root_hub;
-	struct usb_bus *hs_companion;
-	int bandwidth_allocated;
-	int bandwidth_int_reqs;
-	int bandwidth_isoc_reqs;
-	unsigned int resuming_ports;
-	struct mon_bus *mon_bus;
-	int monitored;
-};
-
-struct wusb_dev;
-
-enum usb_device_removable {
-	USB_DEVICE_REMOVABLE_UNKNOWN = 0,
-	USB_DEVICE_REMOVABLE = 1,
-	USB_DEVICE_FIXED = 2,
-};
-
-struct usb2_lpm_parameters {
-	unsigned int besl;
-	int timeout;
-};
-
-struct usb3_lpm_parameters {
-	unsigned int mel;
-	unsigned int pel;
-	unsigned int sel;
-	int timeout;
-};
-
-struct usb_tt;
-
-struct usb_device {
-	int devnum;
-	char devpath[16];
-	u32 route;
-	enum usb_device_state state;
-	enum usb_device_speed speed;
-	unsigned int rx_lanes;
-	unsigned int tx_lanes;
-	struct usb_tt *tt;
-	int ttport;
-	unsigned int toggle[2];
-	struct usb_device *parent;
-	struct usb_bus *bus;
-	struct usb_host_endpoint ep0;
-	struct device dev;
-	struct usb_device_descriptor descriptor;
-	struct usb_host_bos *bos;
-	struct usb_host_config *config;
-	struct usb_host_config *actconfig;
-	struct usb_host_endpoint *ep_in[16];
-	struct usb_host_endpoint *ep_out[16];
-	char **rawdescriptors;
-	short unsigned int bus_mA;
-	u8 portnum;
-	u8 level;
-	u8 devaddr;
-	unsigned int can_submit: 1;
-	unsigned int persist_enabled: 1;
-	unsigned int have_langid: 1;
-	unsigned int authorized: 1;
-	unsigned int authenticated: 1;
-	unsigned int wusb: 1;
-	unsigned int lpm_capable: 1;
-	unsigned int usb2_hw_lpm_capable: 1;
-	unsigned int usb2_hw_lpm_besl_capable: 1;
-	unsigned int usb2_hw_lpm_enabled: 1;
-	unsigned int usb2_hw_lpm_allowed: 1;
-	unsigned int usb3_lpm_u1_enabled: 1;
-	unsigned int usb3_lpm_u2_enabled: 1;
-	int string_langid;
-	char *product;
-	char *manufacturer;
-	char *serial;
-	struct list_head filelist;
-	int maxchild;
-	u32 quirks;
-	atomic_t urbnum;
-	long unsigned int active_duration;
-	long unsigned int connect_time;
-	unsigned int do_remote_wakeup: 1;
-	unsigned int reset_resume: 1;
-	unsigned int port_is_suspended: 1;
-	struct wusb_dev *wusb_dev;
-	int slot_id;
-	enum usb_device_removable removable;
-	struct usb2_lpm_parameters l1_params;
-	struct usb3_lpm_parameters u1_params;
-	struct usb3_lpm_parameters u2_params;
-	unsigned int lpm_disable_count;
-	u16 hub_delay;
-	unsigned int use_generic_driver: 1;
-};
-
-struct usb_tt {
-	struct usb_device *hub;
-	int multi;
-	unsigned int think_time;
-	void *hcpriv;
-	spinlock_t lock;
-	struct list_head clear_list;
-	struct work_struct clear_work;
-};
-
-struct usb_iso_packet_descriptor {
-	unsigned int offset;
-	unsigned int length;
-	unsigned int actual_length;
-	int status;
-};
-
-struct usb_anchor {
-	struct list_head urb_list;
-	wait_queue_head_t wait;
-	spinlock_t lock;
-	atomic_t suspend_wakeups;
-	unsigned int poisoned: 1;
-};
-
-struct urb;
-
-typedef void (*usb_complete_t)(struct urb *);
-
-struct urb {
-	struct kref kref;
-	int unlinked;
-	void *hcpriv;
-	atomic_t use_count;
-	atomic_t reject;
-	struct list_head urb_list;
-	struct list_head anchor_list;
-	struct usb_anchor *anchor;
-	struct usb_device *dev;
-	struct usb_host_endpoint *ep;
-	unsigned int pipe;
-	unsigned int stream_id;
-	int status;
-	unsigned int transfer_flags;
-	void *transfer_buffer;
-	dma_addr_t transfer_dma;
-	struct scatterlist *sg;
-	int num_mapped_sgs;
-	int num_sgs;
-	u32 transfer_buffer_length;
-	u32 actual_length;
-	unsigned char *setup_packet;
-	dma_addr_t setup_dma;
-	int start_frame;
-	int number_of_packets;
-	int interval;
-	int error_count;
-	void *context;
-	usb_complete_t complete;
-	struct usb_iso_packet_descriptor iso_frame_desc[0];
-};
-
-struct giveback_urb_bh {
-	bool running;
-	spinlock_t lock;
-	struct list_head head;
-	struct tasklet_struct bh;
-	struct usb_host_endpoint *completing_ep;
-};
-
-enum usb_dev_authorize_policy {
-	USB_DEVICE_AUTHORIZE_NONE = 0,
-	USB_DEVICE_AUTHORIZE_ALL = 1,
-	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
-};
-
-struct usb_phy;
-
-struct usb_phy_roothub;
-
-struct dma_pool___2;
-
-struct gen_pool___2;
-
-struct hc_driver;
-
-struct usb_hcd {
-	struct usb_bus self;
-	struct kref kref;
-	const char *product_desc;
-	int speed;
-	char irq_descr[24];
-	struct timer_list rh_timer;
-	struct urb *status_urb;
-	struct work_struct wakeup_work;
-	struct work_struct died_work;
-	const struct hc_driver *driver;
-	struct usb_phy *usb_phy;
-	struct usb_phy_roothub *phy_roothub;
-	long unsigned int flags;
-	enum usb_dev_authorize_policy dev_policy;
-	unsigned int rh_registered: 1;
-	unsigned int rh_pollable: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int msi_enabled: 1;
-	unsigned int skip_phy_initialization: 1;
-	unsigned int uses_new_polling: 1;
-	unsigned int wireless: 1;
-	unsigned int has_tt: 1;
-	unsigned int amd_resume_bug: 1;
-	unsigned int can_do_streams: 1;
-	unsigned int tpl_support: 1;
-	unsigned int cant_recv_wakeups: 1;
-	unsigned int irq;
-	void *regs;
-	resource_size_t rsrc_start;
-	resource_size_t rsrc_len;
-	unsigned int power_budget;
-	struct giveback_urb_bh high_prio_bh;
-	struct giveback_urb_bh low_prio_bh;
-	struct mutex *address0_mutex;
-	struct mutex *bandwidth_mutex;
-	struct usb_hcd *shared_hcd;
-	struct usb_hcd *primary_hcd;
-	struct dma_pool___2 *pool[4];
-	int state;
-	struct gen_pool___2 *localmem_pool;
-	long unsigned int hcd_priv[0];
-};
-
-struct hc_driver {
-	const char *description;
-	const char *product_desc;
-	size_t hcd_priv_size;
-	irqreturn_t (*irq)(struct usb_hcd *);
-	int flags;
-	int (*reset)(struct usb_hcd *);
-	int (*start)(struct usb_hcd *);
-	int (*pci_suspend)(struct usb_hcd *, bool);
-	int (*pci_resume)(struct usb_hcd *, bool);
-	void (*stop)(struct usb_hcd *);
-	void (*shutdown)(struct usb_hcd *);
-	int (*get_frame_number)(struct usb_hcd *);
-	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
-	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
-	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
-	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
-	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
-	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*hub_status_data)(struct usb_hcd *, char *);
-	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
-	int (*bus_suspend)(struct usb_hcd *);
-	int (*bus_resume)(struct usb_hcd *);
-	int (*start_port_reset)(struct usb_hcd *, unsigned int);
-	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
-	void (*relinquish_port)(struct usb_hcd *, int);
-	int (*port_handed_over)(struct usb_hcd *, int);
-	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
-	void (*free_dev)(struct usb_hcd *, struct usb_device *);
-	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
-	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
-	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
-	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
-	int (*address_device)(struct usb_hcd *, struct usb_device *);
-	int (*enable_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
-	int (*reset_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_device)(struct usb_hcd *, struct usb_device *);
-	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
-	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*find_raw_port_number)(struct usb_hcd *, int);
-	int (*port_power)(struct usb_hcd *, int, bool);
-};
-
-struct physdev_dbgp_op {
-	uint8_t op;
-	uint8_t bus;
-	union {
-		struct physdev_pci_device pci;
-	} u;
-};
-
-struct dev_ext_attribute {
-	struct device_attribute attr;
-	void *var;
-};
-
-struct ioctl_evtchn_bind_virq {
-	unsigned int virq;
-};
-
-struct ioctl_evtchn_bind_interdomain {
-	unsigned int remote_domain;
-	unsigned int remote_port;
-};
-
-struct ioctl_evtchn_bind_unbound_port {
-	unsigned int remote_domain;
-};
-
-struct ioctl_evtchn_unbind {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_notify {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_restrict_domid {
-	domid_t domid;
-};
-
-struct per_user_data {
-	struct mutex bind_mutex;
-	struct rb_root evtchns;
-	unsigned int nr_evtchns;
-	unsigned int ring_size;
-	evtchn_port_t *ring;
-	unsigned int ring_cons;
-	unsigned int ring_prod;
-	unsigned int ring_overflow;
-	struct mutex ring_cons_mutex;
-	spinlock_t ring_prod_lock;
-	wait_queue_head_t evtchn_wait;
-	struct fasync_struct *evtchn_async_queue;
-	const char *name;
-	domid_t restrict_domid;
-};
-
-struct user_evtchn {
-	struct rb_node node;
-	struct per_user_data *user;
-	evtchn_port_t port;
-	bool enabled;
-};
-
-typedef uint8_t xen_domain_handle_t[16];
-
-struct xen_compile_info {
-	char compiler[64];
-	char compile_by[16];
-	char compile_domain[32];
-	char compile_date[32];
-};
-
-struct xen_platform_parameters {
-	xen_ulong_t virt_start;
-};
-
-struct xen_build_id {
-	uint32_t len;
-	unsigned char buf[0];
-};
-
-struct hyp_sysfs_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct hyp_sysfs_attr *, char *);
-	ssize_t (*store)(struct hyp_sysfs_attr *, const char *, size_t);
-	void *hyp_attr_data;
-};
-
-enum xen_swiotlb_err {
-	XEN_SWIOTLB_UNKNOWN = 0,
-	XEN_SWIOTLB_ENOMEM = 1,
-	XEN_SWIOTLB_EFIXUP = 2,
-};
-
-typedef void (*xen_gfn_fn_t)(long unsigned int, void *);
-
-struct xen_remap_gfn_info;
-
-struct remap_data {
-	xen_pfn_t *fgfn;
-	int nr_fgfn;
-	pgprot_t prot;
-	domid_t domid;
-	struct vm_area_struct *vma;
-	int index;
-	struct page **pages;
-	struct xen_remap_gfn_info *info;
-	int *err_ptr;
-	int mapped;
-	int h_errs[1];
-	xen_ulong_t h_idxs[1];
-	xen_pfn_t h_gpfns[1];
-	int h_iter;
-};
-
-struct map_balloon_pages {
-	xen_pfn_t *pfns;
-	unsigned int idx;
-};
-
-struct remap_pfn {
-	struct mm_struct *mm;
-	struct page **pages;
-	pgprot_t prot;
-	long unsigned int i;
-};
-
-struct fastopen_queue {
-	struct request_sock *rskq_rst_head;
-	struct request_sock *rskq_rst_tail;
-	spinlock_t lock;
-	int qlen;
-	int max_qlen;
-	struct tcp_fastopen_context *ctx;
-};
-
-struct request_sock_queue {
-	spinlock_t rskq_lock;
-	u8 rskq_defer_accept;
-	u32 synflood_warned;
-	atomic_t qlen;
-	atomic_t young;
-	struct request_sock *rskq_accept_head;
-	struct request_sock *rskq_accept_tail;
-	struct fastopen_queue fastopenq;
-};
-
-struct inet_connection_sock_af_ops {
-	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
-	void (*send_check)(struct sock *, struct sk_buff *);
-	int (*rebuild_header)(struct sock *);
-	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
-	int (*conn_request)(struct sock *, struct sk_buff *);
-	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
-	u16 net_header_len;
-	u16 net_frag_header_len;
-	u16 sockaddr_len;
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
-	void (*mtu_reduced)(struct sock *);
-};
-
-struct inet_bind_bucket;
-
-struct tcp_ulp_ops;
-
-struct inet_connection_sock {
-	struct inet_sock icsk_inet;
-	struct request_sock_queue icsk_accept_queue;
-	struct inet_bind_bucket *icsk_bind_hash;
-	long unsigned int icsk_timeout;
-	struct timer_list icsk_retransmit_timer;
-	struct timer_list icsk_delack_timer;
-	__u32 icsk_rto;
-	__u32 icsk_rto_min;
-	__u32 icsk_delack_max;
-	__u32 icsk_pmtu_cookie;
-	const struct tcp_congestion_ops *icsk_ca_ops;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	const struct tcp_ulp_ops *icsk_ulp_ops;
-	void *icsk_ulp_data;
-	void (*icsk_clean_acked)(struct sock *, u32);
-	struct hlist_node icsk_listen_portaddr_node;
-	unsigned int (*icsk_sync_mss)(struct sock *, u32);
-	__u8 icsk_ca_state: 5;
-	__u8 icsk_ca_initialized: 1;
-	__u8 icsk_ca_setsockopt: 1;
-	__u8 icsk_ca_dst_locked: 1;
-	__u8 icsk_retransmits;
-	__u8 icsk_pending;
-	__u8 icsk_backoff;
-	__u8 icsk_syn_retries;
-	__u8 icsk_probes_out;
-	__u16 icsk_ext_hdr_len;
-	struct {
-		__u8 pending;
-		__u8 quick;
-		__u8 pingpong;
-		__u8 retry;
-		__u32 ato;
-		long unsigned int timeout;
-		__u32 lrcvtime;
-		__u16 last_seg_size;
-		__u16 rcv_mss;
-	} icsk_ack;
-	struct {
-		int enabled;
-		int search_high;
-		int search_low;
-		int probe_size;
-		u32 probe_timestamp;
-	} icsk_mtup;
-	u32 icsk_probes_tstamp;
-	u32 icsk_user_timeout;
-	u64 icsk_ca_priv[13];
-};
-
-struct tcp_ulp_ops {
-	struct list_head list;
-	int (*init)(struct sock *);
-	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
-	void (*release)(struct sock *);
-	int (*get_info)(const struct sock *, struct sk_buff *);
-	size_t (*get_info_size)(const struct sock *);
-	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
-	char name[16];
-	struct module *owner;
-};
-
-typedef unsigned int RING_IDX;
-
-struct pvcalls_data_intf {
-	RING_IDX in_cons;
-	RING_IDX in_prod;
-	RING_IDX in_error;
-	uint8_t pad1[52];
-	RING_IDX out_cons;
-	RING_IDX out_prod;
-	RING_IDX out_error;
-	uint8_t pad2[52];
-	RING_IDX ring_order;
-	grant_ref_t ref[0];
-};
-
-struct pvcalls_data {
-	unsigned char *in;
-	unsigned char *out;
-};
-
-struct xen_pvcalls_socket {
-	uint64_t id;
-	uint32_t domain;
-	uint32_t type;
-	uint32_t protocol;
-};
-
-struct xen_pvcalls_connect {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-	uint32_t flags;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_release {
-	uint64_t id;
-	uint8_t reuse;
-};
-
-struct xen_pvcalls_bind {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-};
-
-struct xen_pvcalls_listen {
-	uint64_t id;
-	uint32_t backlog;
-};
-
-struct xen_pvcalls_accept {
-	uint64_t id;
-	uint64_t id_new;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct xen_pvcalls_dummy {
-	uint8_t dummy[56];
-};
-
-struct xen_pvcalls_request {
-	uint32_t req_id;
-	uint32_t cmd;
-	union {
-		struct xen_pvcalls_socket socket;
-		struct xen_pvcalls_connect connect;
-		struct xen_pvcalls_release release;
-		struct xen_pvcalls_bind bind;
-		struct xen_pvcalls_listen listen;
-		struct xen_pvcalls_accept accept;
-		struct xen_pvcalls_poll poll;
-		struct xen_pvcalls_dummy dummy;
-	} u;
-};
-
-struct _xen_pvcalls_socket {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_connect {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_release {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_bind {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_listen {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_accept {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_dummy {
-	uint8_t dummy[8];
-};
-
-struct xen_pvcalls_response {
-	uint32_t req_id;
-	uint32_t cmd;
-	int32_t ret;
-	uint32_t pad;
-	union {
-		struct _xen_pvcalls_socket socket;
-		struct _xen_pvcalls_connect connect;
-		struct _xen_pvcalls_release release;
-		struct _xen_pvcalls_bind bind;
-		struct _xen_pvcalls_listen listen;
-		struct _xen_pvcalls_accept accept;
-		struct _xen_pvcalls_poll poll;
-		struct _xen_pvcalls_dummy dummy;
-	} u;
-};
-
-union xen_pvcalls_sring_entry {
-	struct xen_pvcalls_request req;
-	struct xen_pvcalls_response rsp;
-};
-
-struct xen_pvcalls_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_pvcalls_sring_entry ring[1];
-};
-
-struct xen_pvcalls_back_ring {
-	RING_IDX rsp_prod_pvt;
-	RING_IDX req_cons;
-	unsigned int nr_ents;
-	struct xen_pvcalls_sring *sring;
-};
-
-struct pvcalls_back_global {
-	struct list_head frontends;
-	struct semaphore frontends_lock;
-};
-
-struct pvcalls_fedata {
-	struct list_head list;
-	struct xenbus_device *dev;
-	struct xen_pvcalls_sring *sring;
-	struct xen_pvcalls_back_ring ring;
-	int irq;
-	struct list_head socket_mappings;
-	struct xarray socketpass_mappings;
-	struct semaphore socket_lock;
-};
-
-struct pvcalls_ioworker {
-	struct work_struct register_work;
-	struct workqueue_struct *wq;
-};
-
-struct sockpass_mapping;
-
-struct sock_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct sockpass_mapping *sockpass;
-	struct socket *sock;
-	uint64_t id;
-	grant_ref_t ref;
-	struct pvcalls_data_intf *ring;
-	void *bytes;
-	struct pvcalls_data data;
-	uint32_t ring_order;
-	int irq;
-	atomic_t read;
-	atomic_t write;
-	atomic_t io;
-	atomic_t release;
-	atomic_t eoi;
-	void (*saved_data_ready)(struct sock *);
-	struct pvcalls_ioworker ioworker;
-};
-
-struct sockpass_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct socket *sock;
-	uint64_t id;
-	struct xen_pvcalls_request reqcopy;
-	spinlock_t copy_lock;
-	struct workqueue_struct *wq;
-	struct work_struct register_work;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct ww_class {
-	atomic_long_t stamp;
-	struct lock_class_key acquire_key;
-	struct lock_class_key mutex_key;
-	const char *acquire_name;
-	const char *mutex_name;
-	unsigned int is_wait_die;
-};
-
-enum regulator_type {
-	REGULATOR_VOLTAGE = 0,
-	REGULATOR_CURRENT = 1,
-};
-
-struct regulator_config;
-
-struct regulator_ops;
-
-struct regulator_desc {
-	const char *name;
-	const char *supply_name;
-	const char *of_match;
-	const char *regulators_node;
-	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
-	int id;
-	unsigned int continuous_voltage_range: 1;
-	unsigned int n_voltages;
-	unsigned int n_current_limits;
-	const struct regulator_ops *ops;
-	int irq;
-	enum regulator_type type;
-	struct module *owner;
-	unsigned int min_uV;
-	unsigned int uV_step;
-	unsigned int linear_min_sel;
-	int fixed_uV;
-	unsigned int ramp_delay;
-	int min_dropout_uV;
-	const struct linear_range *linear_ranges;
-	const unsigned int *linear_range_selectors;
-	int n_linear_ranges;
-	const unsigned int *volt_table;
-	const unsigned int *curr_table;
-	unsigned int vsel_range_reg;
-	unsigned int vsel_range_mask;
-	unsigned int vsel_reg;
-	unsigned int vsel_mask;
-	unsigned int vsel_step;
-	unsigned int csel_reg;
-	unsigned int csel_mask;
-	unsigned int apply_reg;
-	unsigned int apply_bit;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	unsigned int enable_val;
-	unsigned int disable_val;
-	bool enable_is_inverted;
-	unsigned int bypass_reg;
-	unsigned int bypass_mask;
-	unsigned int bypass_val_on;
-	unsigned int bypass_val_off;
-	unsigned int active_discharge_on;
-	unsigned int active_discharge_off;
-	unsigned int active_discharge_mask;
-	unsigned int active_discharge_reg;
-	unsigned int soft_start_reg;
-	unsigned int soft_start_mask;
-	unsigned int soft_start_val_on;
-	unsigned int pull_down_reg;
-	unsigned int pull_down_mask;
-	unsigned int pull_down_val_on;
-	unsigned int enable_time;
-	unsigned int off_on_delay;
-	unsigned int poll_enabled_time;
-	unsigned int (*of_map_mode)(unsigned int);
-};
-
-struct pre_voltage_change_data {
-	long unsigned int old_uV;
-	long unsigned int min_uV;
-	long unsigned int max_uV;
-};
-
-struct regulator_voltage {
-	int min_uV;
-	int max_uV;
-};
-
-struct regulator_dev;
-
-struct regulator {
-	struct device *dev;
-	struct list_head list;
-	unsigned int always_on: 1;
-	unsigned int bypass: 1;
-	unsigned int device_link: 1;
-	int uA_load;
-	unsigned int enable_count;
-	unsigned int deferred_disables;
-	struct regulator_voltage voltage[5];
-	const char *supply_name;
-	struct device_attribute dev_attr;
-	struct regulator_dev *rdev;
-	struct dentry *debugfs;
-};
-
-struct regulator_coupler {
-	struct list_head list;
-	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
-};
-
-struct coupling_desc {
-	struct regulator_dev **coupled_rdevs;
-	struct regulator_coupler *coupler;
-	int n_resolved;
-	int n_coupled;
-};
-
-struct regulator_enable_gpio;
-
-struct regulator_dev {
-	const struct regulator_desc *desc;
-	int exclusive;
-	u32 use_count;
-	u32 open_count;
-	u32 bypass_count;
-	struct list_head list;
-	struct list_head consumer_list;
-	struct coupling_desc coupling_desc;
-	struct blocking_notifier_head notifier;
-	struct ww_mutex mutex;
-	struct task_struct *mutex_owner;
-	int ref_cnt;
-	struct module *owner;
-	struct device dev;
-	struct regulation_constraints *constraints;
-	struct regulator *supply;
-	const char *supply_name;
-	struct regmap *regmap;
-	struct delayed_work disable_work;
-	void *reg_data;
-	struct dentry *debugfs;
-	struct regulator_enable_gpio *ena_pin;
-	unsigned int ena_gpio_state: 1;
-	unsigned int is_switch: 1;
-	long unsigned int last_off_jiffy;
-};
-
-enum regulator_status {
-	REGULATOR_STATUS_OFF = 0,
-	REGULATOR_STATUS_ON = 1,
-	REGULATOR_STATUS_ERROR = 2,
-	REGULATOR_STATUS_FAST = 3,
-	REGULATOR_STATUS_NORMAL = 4,
-	REGULATOR_STATUS_IDLE = 5,
-	REGULATOR_STATUS_STANDBY = 6,
-	REGULATOR_STATUS_BYPASS = 7,
-	REGULATOR_STATUS_UNDEFINED = 8,
-};
-
-struct regulator_ops {
-	int (*list_voltage)(struct regulator_dev *, unsigned int);
-	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
-	int (*map_voltage)(struct regulator_dev *, int, int);
-	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
-	int (*get_voltage)(struct regulator_dev *);
-	int (*get_voltage_sel)(struct regulator_dev *);
-	int (*set_current_limit)(struct regulator_dev *, int, int);
-	int (*get_current_limit)(struct regulator_dev *);
-	int (*set_input_current_limit)(struct regulator_dev *, int);
-	int (*set_over_current_protection)(struct regulator_dev *);
-	int (*set_active_discharge)(struct regulator_dev *, bool);
-	int (*enable)(struct regulator_dev *);
-	int (*disable)(struct regulator_dev *);
-	int (*is_enabled)(struct regulator_dev *);
-	int (*set_mode)(struct regulator_dev *, unsigned int);
-	unsigned int (*get_mode)(struct regulator_dev *);
-	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
-	int (*enable_time)(struct regulator_dev *);
-	int (*set_ramp_delay)(struct regulator_dev *, int);
-	int (*set_voltage_time)(struct regulator_dev *, int, int);
-	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
-	int (*set_soft_start)(struct regulator_dev *);
-	int (*get_status)(struct regulator_dev *);
-	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
-	int (*set_load)(struct regulator_dev *, int);
-	int (*set_bypass)(struct regulator_dev *, bool);
-	int (*get_bypass)(struct regulator_dev *, bool *);
-	int (*set_suspend_voltage)(struct regulator_dev *, int);
-	int (*set_suspend_enable)(struct regulator_dev *);
-	int (*set_suspend_disable)(struct regulator_dev *);
-	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
-	int (*resume)(struct regulator_dev *);
-	int (*set_pull_down)(struct regulator_dev *);
-};
-
-struct regulator_config {
-	struct device *dev;
-	const struct regulator_init_data *init_data;
-	void *driver_data;
-	struct device_node *of_node;
-	struct regmap *regmap;
-	struct gpio_desc *ena_gpiod;
-};
-
-struct regulator_enable_gpio {
-	struct list_head list;
-	struct gpio_desc *gpiod;
-	u32 enable_count;
-	u32 request_count;
-};
-
-enum regulator_active_discharge {
-	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
-	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
-	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
-};
-
-struct trace_event_raw_regulator_basic {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_range {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int min;
-	int max;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_value {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regulator_basic {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_range {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_value {
-	u32 name;
-};
-
-typedef void (*btf_trace_regulator_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
-
-typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
-
-enum regulator_get_type {
-	NORMAL_GET = 0,
-	EXCLUSIVE_GET = 1,
-	OPTIONAL_GET = 2,
-	MAX_GET_TYPE = 3,
-};
-
-struct regulator_map {
-	struct list_head list;
-	const char *dev_name;
-	const char *supply;
-	struct regulator_dev *regulator;
-};
-
-struct regulator_supply_alias {
-	struct list_head list;
-	struct device *src_dev;
-	const char *src_supply;
-	struct device *alias_dev;
-	const char *alias_supply;
-};
-
-struct summary_data {
-	struct seq_file *s;
-	struct regulator_dev *parent;
-	int level;
-};
-
-struct summary_lock_data {
-	struct ww_acquire_ctx *ww_ctx;
-	struct regulator_dev **new_contended_rdev;
-	struct regulator_dev **old_contended_rdev;
+struct virtio_pci_modern_common_cfg {
+	struct virtio_pci_common_cfg cfg;
+	__le16 queue_notify_data;
+	__le16 queue_reset;
 };
 
 struct fixed_voltage_config {
@@ -78310,45 +97324,6 @@
 	struct platform_device pdev;
 };
 
-struct regulator_bulk_devres {
-	struct regulator_bulk_data *consumers;
-	int num_consumers;
-};
-
-struct regulator_supply_alias_match {
-	struct device *dev;
-	const char *id;
-};
-
-struct regulator_notifier_match {
-	struct regulator *regulator;
-	struct notifier_block *nb;
-};
-
-struct of_regulator_match {
-	const char *name;
-	void *driver_data;
-	struct regulator_init_data *init_data;
-	struct device_node *of_node;
-	const struct regulator_desc *desc;
-};
-
-struct devm_of_regulator_matches {
-	struct of_regulator_match *matches;
-	unsigned int num_matches;
-};
-
-struct fixed_voltage_data {
-	struct regulator_desc desc;
-	struct regulator_dev *dev;
-	struct clk *enable_clock;
-	unsigned int clk_enable_counter;
-};
-
-struct fixed_dev_type {
-	bool has_enable_clock;
-};
-
 struct gpio_regulator_state {
 	int value;
 	int gpios;
@@ -78375,99 +97350,57 @@
 	int state;
 };
 
-struct reset_control_lookup {
-	struct list_head list;
-	const char *provider;
-	unsigned int index;
-	const char *dev_id;
-	const char *con_id;
+struct imx7_src_signal {
+	unsigned int offset;
+	unsigned int bit;
 };
 
-struct reset_control___2 {
-	struct reset_controller_dev *rcdev;
-	struct list_head list;
-	unsigned int id;
-	struct kref refcnt;
-	bool acquired;
-	bool shared;
-	bool array;
-	atomic_t deassert_count;
-	atomic_t triggered_count;
+struct imx7_src_variant {
+	const struct imx7_src_signal *signals;
+	unsigned int signals_num;
+	struct reset_control_ops ops;
 };
 
-struct reset_control_array {
-	struct reset_control___2 base;
-	unsigned int num_rstcs;
-	struct reset_control___2 *rstc[0];
-};
-
-enum hi6220_reset_ctrl_type {
-	PERIPHERAL = 0,
-	MEDIA = 1,
-	AO = 2,
-};
-
-struct hi6220_reset_data {
-	struct reset_controller_dev rc_dev;
-	struct regmap *regmap;
-};
-
-struct hi3660_reset_controller {
-	struct reset_controller_dev rst;
-	struct regmap *map;
-};
-
-enum mrq_reset_commands {
-	CMD_RESET_ASSERT = 1,
-	CMD_RESET_DEASSERT = 2,
-	CMD_RESET_MODULE = 3,
-	CMD_RESET_GET_MAX_ID = 4,
-	CMD_RESET_MAX = 5,
-};
-
-struct mrq_reset_request {
-	uint32_t cmd;
-	uint32_t reset_id;
-};
-
-struct meson_reset_param {
-	int reg_count;
-	int level_offset;
-};
-
-struct meson_reset {
-	void *reg_base;
-	const struct meson_reset_param *param;
+struct imx7_src {
 	struct reset_controller_dev rcdev;
-	spinlock_t lock;
+	struct regmap *regmap;
+	const struct imx7_src_signal *signals;
 };
 
-struct reset_simple_devdata {
-	u32 reg_offset;
-	u32 nr_resets;
-	bool active_low;
-	bool status_active_low;
+enum imx7_src_registers {
+	SRC_A7RCR0 = 4,
+	SRC_M4RCR = 12,
+	SRC_ERCR = 20,
+	SRC_HSICPHY_RCR = 28,
+	SRC_USBOPHY1_RCR = 32,
+	SRC_USBOPHY2_RCR = 36,
+	SRC_MIPIPHY_RCR = 40,
+	SRC_PCIEPHY_RCR = 44,
+	SRC_DDRC_RCR = 4096,
 };
 
-struct serial_struct32 {
-	compat_int_t type;
-	compat_int_t line;
-	compat_uint_t port;
-	compat_int_t irq;
-	compat_int_t flags;
-	compat_int_t xmit_fifo_size;
-	compat_int_t custom_divisor;
-	compat_int_t baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char;
-	compat_int_t hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	compat_uint_t iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	compat_int_t reserved;
+enum imx8mq_src_registers {
+	SRC_A53RCR0 = 4,
+	SRC_HDMI_RCR = 48,
+	SRC_DISP_RCR = 52,
+	SRC_GPU_RCR = 64,
+	SRC_VPU_RCR = 68,
+	SRC_PCIE2_RCR = 72,
+	SRC_MIPIPHY1_RCR = 76,
+	SRC_MIPIPHY2_RCR = 80,
+	SRC_DDRC2_RCR = 4100,
+};
+
+enum imx8mp_src_registers {
+	SRC_SUPERMIX_RCR = 24,
+	SRC_AUDIOMIX_RCR = 28,
+	SRC_MLMIX_RCR = 40,
+	SRC_GPU2D_RCR = 56,
+	SRC_GPU3D_RCR = 60,
+	SRC_VPU_G1_RCR = 72,
+	SRC_VPU_G2_RCR = 76,
+	SRC_VPUVC8KE_RCR = 80,
+	SRC_NOC_RCR = 84,
 };
 
 struct n_tty_data {
@@ -78492,6 +97425,7 @@
 	unsigned char echo_buf[4096];
 	size_t read_tail;
 	size_t line_start;
+	size_t lookahead_count;
 	unsigned int column;
 	unsigned int canon_column;
 	size_t echo_tail;
@@ -78505,506 +97439,6 @@
 	KILL = 2,
 };
 
-struct termios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-};
-
-struct termios2 {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct termio {
-	short unsigned int c_iflag;
-	short unsigned int c_oflag;
-	short unsigned int c_cflag;
-	short unsigned int c_lflag;
-	unsigned char c_line;
-	unsigned char c_cc[8];
-};
-
-struct ldsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-};
-
-struct pts_fs_info___2;
-
-struct tty_audit_buf {
-	struct mutex mutex;
-	dev_t dev;
-	unsigned int icanon: 1;
-	size_t valid;
-	unsigned char *data;
-};
-
-struct input_id {
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-};
-
-struct input_absinfo {
-	__s32 value;
-	__s32 minimum;
-	__s32 maximum;
-	__s32 fuzz;
-	__s32 flat;
-	__s32 resolution;
-};
-
-struct input_keymap_entry {
-	__u8 flags;
-	__u8 len;
-	__u16 index;
-	__u32 keycode;
-	__u8 scancode[32];
-};
-
-struct ff_replay {
-	__u16 length;
-	__u16 delay;
-};
-
-struct ff_trigger {
-	__u16 button;
-	__u16 interval;
-};
-
-struct ff_envelope {
-	__u16 attack_length;
-	__u16 attack_level;
-	__u16 fade_length;
-	__u16 fade_level;
-};
-
-struct ff_constant_effect {
-	__s16 level;
-	struct ff_envelope envelope;
-};
-
-struct ff_ramp_effect {
-	__s16 start_level;
-	__s16 end_level;
-	struct ff_envelope envelope;
-};
-
-struct ff_condition_effect {
-	__u16 right_saturation;
-	__u16 left_saturation;
-	__s16 right_coeff;
-	__s16 left_coeff;
-	__u16 deadband;
-	__s16 center;
-};
-
-struct ff_periodic_effect {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	__s16 *custom_data;
-};
-
-struct ff_rumble_effect {
-	__u16 strong_magnitude;
-	__u16 weak_magnitude;
-};
-
-struct ff_effect {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_device_id {
-	kernel_ulong_t flags;
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-	kernel_ulong_t evbit[1];
-	kernel_ulong_t keybit[12];
-	kernel_ulong_t relbit[1];
-	kernel_ulong_t absbit[1];
-	kernel_ulong_t mscbit[1];
-	kernel_ulong_t ledbit[1];
-	kernel_ulong_t sndbit[1];
-	kernel_ulong_t ffbit[2];
-	kernel_ulong_t swbit[1];
-	kernel_ulong_t propbit[1];
-	kernel_ulong_t driver_info;
-};
-
-struct input_value {
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-enum input_clock_type {
-	INPUT_CLK_REAL = 0,
-	INPUT_CLK_MONO = 1,
-	INPUT_CLK_BOOT = 2,
-	INPUT_CLK_MAX = 3,
-};
-
-struct ff_device;
-
-struct input_dev_poller;
-
-struct input_mt;
-
-struct input_handle;
-
-struct input_dev {
-	const char *name;
-	const char *phys;
-	const char *uniq;
-	struct input_id id;
-	long unsigned int propbit[1];
-	long unsigned int evbit[1];
-	long unsigned int keybit[12];
-	long unsigned int relbit[1];
-	long unsigned int absbit[1];
-	long unsigned int mscbit[1];
-	long unsigned int ledbit[1];
-	long unsigned int sndbit[1];
-	long unsigned int ffbit[2];
-	long unsigned int swbit[1];
-	unsigned int hint_events_per_packet;
-	unsigned int keycodemax;
-	unsigned int keycodesize;
-	void *keycode;
-	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
-	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
-	struct ff_device *ff;
-	struct input_dev_poller *poller;
-	unsigned int repeat_key;
-	struct timer_list timer;
-	int rep[2];
-	struct input_mt *mt;
-	struct input_absinfo *absinfo;
-	long unsigned int key[12];
-	long unsigned int led[1];
-	long unsigned int snd[1];
-	long unsigned int sw[1];
-	int (*open)(struct input_dev *);
-	void (*close)(struct input_dev *);
-	int (*flush)(struct input_dev *, struct file *);
-	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
-	struct input_handle *grab;
-	spinlock_t event_lock;
-	struct mutex mutex;
-	unsigned int users;
-	bool going_away;
-	struct device dev;
-	struct list_head h_list;
-	struct list_head node;
-	unsigned int num_vals;
-	unsigned int max_vals;
-	struct input_value *vals;
-	bool devres_managed;
-	ktime_t timestamp[3];
-};
-
-struct ff_device {
-	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
-	int (*erase)(struct input_dev *, int);
-	int (*playback)(struct input_dev *, int, int);
-	void (*set_gain)(struct input_dev *, u16);
-	void (*set_autocenter)(struct input_dev *, u16);
-	void (*destroy)(struct ff_device *);
-	void *private;
-	long unsigned int ffbit[2];
-	struct mutex mutex;
-	int max_effects;
-	struct ff_effect *effects;
-	struct file *effect_owners[0];
-};
-
-struct input_handler;
-
-struct input_handle {
-	void *private;
-	int open;
-	const char *name;
-	struct input_dev *dev;
-	struct input_handler *handler;
-	struct list_head d_node;
-	struct list_head h_node;
-};
-
-struct input_handler {
-	void *private;
-	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
-	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
-	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
-	bool (*match)(struct input_handler *, struct input_dev *);
-	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
-	void (*disconnect)(struct input_handle *);
-	void (*start)(struct input_handle *);
-	bool legacy_minors;
-	int minor;
-	const char *name;
-	const struct input_device_id *id_table;
-	struct list_head h_list;
-	struct list_head node;
-};
-
-struct sysrq_state {
-	struct input_handle handle;
-	struct work_struct reinject_work;
-	long unsigned int key_down[12];
-	unsigned int alt;
-	unsigned int alt_use;
-	unsigned int shift;
-	unsigned int shift_use;
-	bool active;
-	bool need_reinject;
-	bool reinjecting;
-	bool reset_canceled;
-	bool reset_requested;
-	long unsigned int reset_keybit[12];
-	int reset_seq_len;
-	int reset_seq_cnt;
-	int reset_seq_version;
-	struct timer_list keyreset_timer;
-};
-
-struct consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	char *chardata;
-};
-
-struct unipair {
-	short unsigned int unicode;
-	short unsigned int fontpos;
-};
-
-struct unimapdesc {
-	short unsigned int entry_ct;
-	struct unipair *entries;
-};
-
-struct kbd_repeat {
-	int delay;
-	int period;
-};
-
-struct console_font_op {
-	unsigned int op;
-	unsigned int flags;
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_stat {
-	short unsigned int v_active;
-	short unsigned int v_signal;
-	short unsigned int v_state;
-};
-
-struct vt_sizes {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_scrollsize;
-};
-
-struct vt_consize {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_vlin;
-	short unsigned int v_clin;
-	short unsigned int v_vcol;
-	short unsigned int v_ccol;
-};
-
-struct vt_event {
-	unsigned int event;
-	unsigned int oldev;
-	unsigned int newev;
-	unsigned int pad[4];
-};
-
-struct vt_setactivate {
-	unsigned int console;
-	struct vt_mode mode;
-};
-
-struct vt_spawn_console {
-	spinlock_t lock;
-	struct pid *pid;
-	int sig;
-};
-
-struct vt_event_wait {
-	struct list_head list;
-	struct vt_event event;
-	int done;
-};
-
-struct compat_consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	compat_caddr_t chardata;
-};
-
-struct compat_console_font_op {
-	compat_uint_t op;
-	compat_uint_t flags;
-	compat_uint_t width;
-	compat_uint_t height;
-	compat_uint_t charcount;
-	compat_caddr_t data;
-};
-
-struct compat_unimapdesc {
-	short unsigned int entry_ct;
-	compat_caddr_t entries;
-};
-
-struct vt_notifier_param {
-	struct vc_data *vc;
-	unsigned int c;
-};
-
-struct vcs_poll_data {
-	struct notifier_block notifier;
-	unsigned int cons_num;
-	int event;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-};
-
-struct tiocl_selection {
-	short unsigned int xs;
-	short unsigned int ys;
-	short unsigned int xe;
-	short unsigned int ye;
-	short unsigned int sel_mode;
-};
-
-struct vc_selection {
-	struct mutex lock;
-	struct vc_data *cons;
-	char *buffer;
-	unsigned int buf_len;
-	volatile int start;
-	int end;
-};
-
-enum led_brightness {
-	LED_OFF = 0,
-	LED_ON = 1,
-	LED_HALF = 127,
-	LED_FULL = 255,
-};
-
-struct led_hw_trigger_type {
-	int dummy;
-};
-
-struct led_pattern;
-
-struct led_trigger;
-
-struct led_classdev {
-	const char *name;
-	enum led_brightness brightness;
-	enum led_brightness max_brightness;
-	int flags;
-	long unsigned int work_flags;
-	void (*brightness_set)(struct led_classdev *, enum led_brightness);
-	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
-	enum led_brightness (*brightness_get)(struct led_classdev *);
-	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
-	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
-	int (*pattern_clear)(struct led_classdev *);
-	struct device *dev;
-	const struct attribute_group **groups;
-	struct list_head node;
-	const char *default_trigger;
-	long unsigned int blink_delay_on;
-	long unsigned int blink_delay_off;
-	struct timer_list blink_timer;
-	int blink_brightness;
-	int new_blink_brightness;
-	void (*flash_resume)(struct led_classdev *);
-	struct work_struct set_brightness_work;
-	int delayed_set_value;
-	struct rw_semaphore trigger_lock;
-	struct led_trigger *trigger;
-	struct list_head trig_list;
-	void *trigger_data;
-	bool activated;
-	struct led_hw_trigger_type *trigger_type;
-	struct mutex led_access;
-};
-
-struct led_pattern {
-	u32 delta_t;
-	int brightness;
-};
-
-struct led_trigger {
-	const char *name;
-	int (*activate)(struct led_classdev *);
-	void (*deactivate)(struct led_classdev *);
-	struct led_hw_trigger_type *trigger_type;
-	rwlock_t leddev_list_lock;
-	struct list_head led_cdevs;
-	struct list_head next_trig;
-	const struct attribute_group **groups;
-};
-
-struct keyboard_notifier_param {
-	struct vc_data *vc;
-	int down;
-	int shift;
-	int ledstate;
-	unsigned int value;
-};
-
-struct kbd_struct {
-	unsigned char lockstate;
-	unsigned char slockstate;
-	unsigned char ledmode: 1;
-	unsigned char ledflagstate: 4;
-	char: 3;
-	unsigned char default_ledflagstate: 4;
-	unsigned char kbdmode: 3;
-	char: 1;
-	unsigned char modeflags: 5;
-};
-
 struct kbentry {
 	unsigned char kb_table;
 	unsigned char kb_index;
@@ -79043,6 +97477,37 @@
 	unsigned int keycode;
 };
 
+struct kbd_repeat {
+	int delay;
+	int period;
+};
+
+struct keyboard_notifier_param {
+	struct vc_data *vc;
+	int down;
+	int shift;
+	int ledstate;
+	unsigned int value;
+};
+
+struct kbd_struct {
+	unsigned char lockstate;
+	unsigned char slockstate;
+	unsigned char ledmode: 1;
+	unsigned char ledflagstate: 4;
+	char: 3;
+	unsigned char default_ledflagstate: 4;
+	unsigned char kbdmode: 3;
+	char: 1;
+	unsigned char modeflags: 5;
+};
+
+struct vt_spawn_console {
+	spinlock_t lock;
+	struct pid *pid;
+	int sig;
+};
+
 typedef void k_handler_fn(struct vc_data *, unsigned char, char);
 
 typedef void fn_handler_fn(struct vc_data *);
@@ -79057,522 +97522,6 @@
 	unsigned int mask;
 };
 
-struct uni_pagedir {
-	u16 **uni_pgdir[32];
-	long unsigned int refcount;
-	long unsigned int sum;
-	unsigned char *inverse_translations[4];
-	u16 *inverse_trans_unicode;
-};
-
-typedef uint32_t char32_t;
-
-struct uni_screen {
-	char32_t *lines[0];
-};
-
-struct con_driver {
-	const struct consw *con;
-	const char *desc;
-	struct device *dev;
-	int node;
-	int first;
-	int last;
-	int flag;
-};
-
-enum {
-	blank_off = 0,
-	blank_normal_wait = 1,
-	blank_vesa_wait = 2,
-};
-
-enum {
-	EPecma = 0,
-	EPdec = 1,
-	EPeq = 2,
-	EPgt = 3,
-	EPlt = 4,
-};
-
-struct rgb {
-	u8 r;
-	u8 g;
-	u8 b;
-};
-
-enum {
-	ESnormal = 0,
-	ESesc = 1,
-	ESsquare = 2,
-	ESgetpars = 3,
-	ESfunckey = 4,
-	EShash = 5,
-	ESsetG0 = 6,
-	ESsetG1 = 7,
-	ESpercent = 8,
-	EScsiignore = 9,
-	ESnonstd = 10,
-	ESpalette = 11,
-	ESosc = 12,
-};
-
-struct interval {
-	uint32_t first;
-	uint32_t last;
-};
-
-struct vc_draw_region {
-	long unsigned int from;
-	long unsigned int to;
-	int x;
-};
-
-struct hv_ops;
-
-struct hvc_struct {
-	struct tty_port port;
-	spinlock_t lock;
-	int index;
-	int do_wakeup;
-	char *outbuf;
-	int outbuf_size;
-	int n_outbuf;
-	uint32_t vtermno;
-	const struct hv_ops *ops;
-	int irq_requested;
-	int data;
-	struct winsize ws;
-	struct work_struct tty_resize;
-	struct list_head next;
-	long unsigned int flags;
-};
-
-struct hv_ops {
-	int (*get_chars)(uint32_t, char *, int);
-	int (*put_chars)(uint32_t, const char *, int);
-	int (*flush)(uint32_t, bool);
-	int (*notifier_add)(struct hvc_struct *, int);
-	void (*notifier_del)(struct hvc_struct *, int);
-	void (*notifier_hangup)(struct hvc_struct *, int);
-	int (*tiocmget)(struct hvc_struct *);
-	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
-	void (*dtr_rts)(struct hvc_struct *, int);
-};
-
-struct earlycon_device {
-	struct console *con;
-	struct uart_port port;
-	char options[16];
-	unsigned int baud;
-};
-
-struct earlycon_id {
-	char name[15];
-	char name_term;
-	char compatible[128];
-	int (*setup)(struct earlycon_device *, const char *);
-};
-
-typedef uint32_t XENCONS_RING_IDX;
-
-struct xencons_interface {
-	char in[1024];
-	char out[2048];
-	XENCONS_RING_IDX in_cons;
-	XENCONS_RING_IDX in_prod;
-	XENCONS_RING_IDX out_cons;
-	XENCONS_RING_IDX out_prod;
-};
-
-struct xencons_info {
-	struct list_head list;
-	struct xenbus_device *xbdev;
-	struct xencons_interface *intf;
-	unsigned int evtchn;
-	struct hvc_struct *hvc;
-	int irq;
-	int vtermno;
-	grant_ref_t gntref;
-};
-
-struct uart_driver {
-	struct module *owner;
-	const char *driver_name;
-	const char *dev_name;
-	int major;
-	int minor;
-	int nr;
-	struct console *cons;
-	struct uart_state *state;
-	struct tty_driver *tty_driver;
-};
-
-struct uart_match {
-	struct uart_port *port;
-	struct uart_driver *driver;
-};
-
-enum hwparam_type {
-	hwparam_ioport = 0,
-	hwparam_iomem = 1,
-	hwparam_ioport_or_iomem = 2,
-	hwparam_irq = 3,
-	hwparam_dma = 4,
-	hwparam_dma_addr = 5,
-	hwparam_other = 6,
-};
-
-enum {
-	PLAT8250_DEV_LEGACY = 4294967295,
-	PLAT8250_DEV_PLATFORM = 0,
-	PLAT8250_DEV_PLATFORM1 = 1,
-	PLAT8250_DEV_PLATFORM2 = 2,
-	PLAT8250_DEV_FOURPORT = 3,
-	PLAT8250_DEV_ACCENT = 4,
-	PLAT8250_DEV_BOCA = 5,
-	PLAT8250_DEV_EXAR_ST16C554 = 6,
-	PLAT8250_DEV_HUB6 = 7,
-	PLAT8250_DEV_AU1X00 = 8,
-	PLAT8250_DEV_SM501 = 9,
-};
-
-struct uart_8250_port;
-
-struct uart_8250_ops {
-	int (*setup_irq)(struct uart_8250_port *);
-	void (*release_irq)(struct uart_8250_port *);
-};
-
-struct mctrl_gpios;
-
-struct uart_8250_dma;
-
-struct uart_8250_em485;
-
-struct uart_8250_port {
-	struct uart_port port;
-	struct timer_list timer;
-	struct list_head list;
-	u32 capabilities;
-	short unsigned int bugs;
-	bool fifo_bug;
-	unsigned int tx_loadsz;
-	unsigned char acr;
-	unsigned char fcr;
-	unsigned char ier;
-	unsigned char lcr;
-	unsigned char mcr;
-	unsigned char mcr_mask;
-	unsigned char mcr_force;
-	unsigned char cur_iotype;
-	unsigned int rpm_tx_active;
-	unsigned char canary;
-	unsigned char probe;
-	struct mctrl_gpios *gpios;
-	unsigned char lsr_saved_flags;
-	unsigned char msr_saved_flags;
-	struct uart_8250_dma *dma;
-	const struct uart_8250_ops *ops;
-	int (*dl_read)(struct uart_8250_port *);
-	void (*dl_write)(struct uart_8250_port *, int);
-	struct uart_8250_em485 *em485;
-	void (*rs485_start_tx)(struct uart_8250_port *);
-	void (*rs485_stop_tx)(struct uart_8250_port *);
-	struct delayed_work overrun_backoff;
-	u32 overrun_backoff_time_ms;
-};
-
-struct uart_8250_em485 {
-	struct hrtimer start_tx_timer;
-	struct hrtimer stop_tx_timer;
-	struct hrtimer *active_timer;
-	struct uart_8250_port *port;
-	unsigned int tx_stopped: 1;
-};
-
-struct uart_8250_dma {
-	int (*tx_dma)(struct uart_8250_port *);
-	int (*rx_dma)(struct uart_8250_port *);
-	dma_filter_fn fn;
-	void *rx_param;
-	void *tx_param;
-	struct dma_slave_config rxconf;
-	struct dma_slave_config txconf;
-	struct dma_chan *rxchan;
-	struct dma_chan *txchan;
-	phys_addr_t rx_dma_addr;
-	phys_addr_t tx_dma_addr;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	void *rx_buf;
-	size_t rx_size;
-	size_t tx_size;
-	unsigned char tx_running;
-	unsigned char tx_err;
-	unsigned char rx_running;
-};
-
-struct old_serial_port {
-	unsigned int uart;
-	unsigned int baud_base;
-	unsigned int port;
-	unsigned int irq;
-	upf_t flags;
-	unsigned char io_type;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-};
-
-struct irq_info___2 {
-	struct hlist_node node;
-	int irq;
-	spinlock_t lock;
-	struct list_head *head;
-};
-
-struct serial8250_config {
-	const char *name;
-	short unsigned int fifo_size;
-	short unsigned int tx_loadsz;
-	unsigned char fcr;
-	unsigned char rxtrig_bytes[4];
-	unsigned int flags;
-};
-
-struct dw8250_port_data {
-	int line;
-	struct uart_8250_dma dma;
-	u8 dlf_size;
-};
-
-struct pciserial_board {
-	unsigned int flags;
-	unsigned int num_ports;
-	unsigned int base_baud;
-	unsigned int uart_offset;
-	unsigned int reg_shift;
-	unsigned int first_offset;
-};
-
-struct serial_private;
-
-struct pci_serial_quirk {
-	u32 vendor;
-	u32 device;
-	u32 subvendor;
-	u32 subdevice;
-	int (*probe)(struct pci_dev *);
-	int (*init)(struct pci_dev *);
-	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct serial_private {
-	struct pci_dev *dev;
-	unsigned int nr;
-	struct pci_serial_quirk *quirk;
-	const struct pciserial_board *board;
-	int line[0];
-};
-
-struct f815xxa_data {
-	spinlock_t lock;
-	int idx;
-};
-
-struct timedia_struct {
-	int num;
-	const short unsigned int *ids;
-};
-
-struct quatech_feature {
-	u16 devid;
-	bool amcc;
-};
-
-enum pci_board_num_t {
-	pbn_default = 0,
-	pbn_b0_1_115200 = 1,
-	pbn_b0_2_115200 = 2,
-	pbn_b0_4_115200 = 3,
-	pbn_b0_5_115200 = 4,
-	pbn_b0_8_115200 = 5,
-	pbn_b0_1_921600 = 6,
-	pbn_b0_2_921600 = 7,
-	pbn_b0_4_921600 = 8,
-	pbn_b0_2_1130000 = 9,
-	pbn_b0_4_1152000 = 10,
-	pbn_b0_4_1250000 = 11,
-	pbn_b0_2_1843200 = 12,
-	pbn_b0_4_1843200 = 13,
-	pbn_b0_1_4000000 = 14,
-	pbn_b0_bt_1_115200 = 15,
-	pbn_b0_bt_2_115200 = 16,
-	pbn_b0_bt_4_115200 = 17,
-	pbn_b0_bt_8_115200 = 18,
-	pbn_b0_bt_1_460800 = 19,
-	pbn_b0_bt_2_460800 = 20,
-	pbn_b0_bt_4_460800 = 21,
-	pbn_b0_bt_1_921600 = 22,
-	pbn_b0_bt_2_921600 = 23,
-	pbn_b0_bt_4_921600 = 24,
-	pbn_b0_bt_8_921600 = 25,
-	pbn_b1_1_115200 = 26,
-	pbn_b1_2_115200 = 27,
-	pbn_b1_4_115200 = 28,
-	pbn_b1_8_115200 = 29,
-	pbn_b1_16_115200 = 30,
-	pbn_b1_1_921600 = 31,
-	pbn_b1_2_921600 = 32,
-	pbn_b1_4_921600 = 33,
-	pbn_b1_8_921600 = 34,
-	pbn_b1_2_1250000 = 35,
-	pbn_b1_bt_1_115200 = 36,
-	pbn_b1_bt_2_115200 = 37,
-	pbn_b1_bt_4_115200 = 38,
-	pbn_b1_bt_2_921600 = 39,
-	pbn_b1_1_1382400 = 40,
-	pbn_b1_2_1382400 = 41,
-	pbn_b1_4_1382400 = 42,
-	pbn_b1_8_1382400 = 43,
-	pbn_b2_1_115200 = 44,
-	pbn_b2_2_115200 = 45,
-	pbn_b2_4_115200 = 46,
-	pbn_b2_8_115200 = 47,
-	pbn_b2_1_460800 = 48,
-	pbn_b2_4_460800 = 49,
-	pbn_b2_8_460800 = 50,
-	pbn_b2_16_460800 = 51,
-	pbn_b2_1_921600 = 52,
-	pbn_b2_4_921600 = 53,
-	pbn_b2_8_921600 = 54,
-	pbn_b2_8_1152000 = 55,
-	pbn_b2_bt_1_115200 = 56,
-	pbn_b2_bt_2_115200 = 57,
-	pbn_b2_bt_4_115200 = 58,
-	pbn_b2_bt_2_921600 = 59,
-	pbn_b2_bt_4_921600 = 60,
-	pbn_b3_2_115200 = 61,
-	pbn_b3_4_115200 = 62,
-	pbn_b3_8_115200 = 63,
-	pbn_b4_bt_2_921600 = 64,
-	pbn_b4_bt_4_921600 = 65,
-	pbn_b4_bt_8_921600 = 66,
-	pbn_panacom = 67,
-	pbn_panacom2 = 68,
-	pbn_panacom4 = 69,
-	pbn_plx_romulus = 70,
-	pbn_endrun_2_4000000 = 71,
-	pbn_oxsemi = 72,
-	pbn_oxsemi_1_4000000 = 73,
-	pbn_oxsemi_2_4000000 = 74,
-	pbn_oxsemi_4_4000000 = 75,
-	pbn_oxsemi_8_4000000 = 76,
-	pbn_intel_i960 = 77,
-	pbn_sgi_ioc3 = 78,
-	pbn_computone_4 = 79,
-	pbn_computone_6 = 80,
-	pbn_computone_8 = 81,
-	pbn_sbsxrsio = 82,
-	pbn_pasemi_1682M = 83,
-	pbn_ni8430_2 = 84,
-	pbn_ni8430_4 = 85,
-	pbn_ni8430_8 = 86,
-	pbn_ni8430_16 = 87,
-	pbn_ADDIDATA_PCIe_1_3906250 = 88,
-	pbn_ADDIDATA_PCIe_2_3906250 = 89,
-	pbn_ADDIDATA_PCIe_4_3906250 = 90,
-	pbn_ADDIDATA_PCIe_8_3906250 = 91,
-	pbn_ce4100_1_115200 = 92,
-	pbn_omegapci = 93,
-	pbn_NETMOS9900_2s_115200 = 94,
-	pbn_brcm_trumanage = 95,
-	pbn_fintek_4 = 96,
-	pbn_fintek_8 = 97,
-	pbn_fintek_12 = 98,
-	pbn_fintek_F81504A = 99,
-	pbn_fintek_F81508A = 100,
-	pbn_fintek_F81512A = 101,
-	pbn_wch382_2 = 102,
-	pbn_wch384_4 = 103,
-	pbn_wch384_8 = 104,
-	pbn_pericom_PI7C9X7951 = 105,
-	pbn_pericom_PI7C9X7952 = 106,
-	pbn_pericom_PI7C9X7954 = 107,
-	pbn_pericom_PI7C9X7958 = 108,
-	pbn_sunix_pci_1s = 109,
-	pbn_sunix_pci_2s = 110,
-	pbn_sunix_pci_4s = 111,
-	pbn_sunix_pci_8s = 112,
-	pbn_sunix_pci_16s = 113,
-	pbn_moxa8250_2p = 114,
-	pbn_moxa8250_4p = 115,
-	pbn_moxa8250_8p = 116,
-};
-
-struct exar8250_platform {
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
-};
-
-struct exar8250;
-
-struct exar8250_board {
-	unsigned int num_ports;
-	unsigned int reg_shift;
-	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct exar8250 {
-	unsigned int nr;
-	struct exar8250_board *board;
-	void *virt;
-	int line[0];
-};
-
-struct bcm2835aux_data {
-	struct clk *clk;
-	int line;
-	u32 cntl;
-};
-
-struct fsl8250_data {
-	int line;
-};
-
-enum dma_rx_status {
-	DMA_RX_START = 0,
-	DMA_RX_RUNNING = 1,
-	DMA_RX_SHUTDOWN = 2,
-};
-
-struct mtk8250_data {
-	int line;
-	unsigned int rx_pos;
-	unsigned int clk_count;
-	struct clk *uart_clk;
-	struct clk *bus_clk;
-	struct uart_8250_dma *dma;
-	enum dma_rx_status rx_status;
-	int rx_wakeup_irq;
-};
-
-enum {
-	MTK_UART_FC_NONE = 0,
-	MTK_UART_FC_SW = 1,
-	MTK_UART_FC_HW = 2,
-};
-
-struct tegra_uart {
-	struct clk *clk;
-	struct reset_control *rst;
-	int line;
-};
-
 struct of_serial_info {
 	struct clk *clk;
 	struct reset_control *rst;
@@ -79580,382 +97529,59 @@
 	int line;
 };
 
-enum amba_vendor {
-	AMBA_VENDOR_ARM = 65,
-	AMBA_VENDOR_ST = 128,
-	AMBA_VENDOR_QCOM = 81,
-	AMBA_VENDOR_LSI = 182,
-	AMBA_VENDOR_LINUX = 254,
+struct tegra_uart_chip_data {
+	bool tx_fifo_full_status;
+	bool allow_txfifo_reset_fifo_mode;
+	bool support_clk_src_div;
+	bool fifo_mode_enable_status;
+	int uart_max_port;
+	int max_dma_burst_bytes;
+	int error_tolerance_low_range;
+	int error_tolerance_high_range;
 };
 
-struct amba_pl011_data {
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	bool dma_rx_poll_enable;
-	unsigned int dma_rx_poll_rate;
-	unsigned int dma_rx_poll_timeout;
-	void (*init)();
-	void (*exit)();
+struct tegra_baud_tolerance {
+	u32 lower_range_baud;
+	u32 upper_range_baud;
+	s32 tolerance;
 };
 
-enum {
-	REG_DR = 0,
-	REG_ST_DMAWM = 1,
-	REG_ST_TIMEOUT = 2,
-	REG_FR = 3,
-	REG_LCRH_RX = 4,
-	REG_LCRH_TX = 5,
-	REG_IBRD = 6,
-	REG_FBRD = 7,
-	REG_CR = 8,
-	REG_IFLS = 9,
-	REG_IMSC = 10,
-	REG_RIS = 11,
-	REG_MIS = 12,
-	REG_ICR = 13,
-	REG_DMACR = 14,
-	REG_ST_XFCR = 15,
-	REG_ST_XON1 = 16,
-	REG_ST_XON2 = 17,
-	REG_ST_XOFF1 = 18,
-	REG_ST_XOFF2 = 19,
-	REG_ST_ITCR = 20,
-	REG_ST_ITIP = 21,
-	REG_ST_ABCR = 22,
-	REG_ST_ABIMSC = 23,
-	REG_ARRAY_SIZE = 24,
-};
-
-struct vendor_data {
-	const u16 *reg_offset;
-	unsigned int ifls;
-	unsigned int fr_busy;
-	unsigned int fr_dsr;
-	unsigned int fr_cts;
-	unsigned int fr_ri;
-	unsigned int inv_fr;
-	bool access_32b;
-	bool oversampling;
-	bool dma_threshold;
-	bool cts_event_workaround;
-	bool always_enabled;
-	bool fixed_options;
-	unsigned int (*get_fifosize)(struct amba_device *);
-};
-
-struct pl011_sgbuf {
-	struct scatterlist sg;
-	char *buf;
-};
-
-struct pl011_dmarx_data {
-	struct dma_chan *chan;
-	struct completion complete;
-	bool use_buf_b;
-	struct pl011_sgbuf sgbuf_a;
-	struct pl011_sgbuf sgbuf_b;
-	dma_cookie_t cookie;
-	bool running;
-	struct timer_list timer;
-	unsigned int last_residue;
-	long unsigned int last_jiffies;
-	bool auto_poll_rate;
-	unsigned int poll_rate;
-	unsigned int poll_timeout;
-};
-
-struct pl011_dmatx_data {
-	struct dma_chan *chan;
-	struct scatterlist sg;
-	char *buf;
-	bool queued;
-};
-
-struct uart_amba_port {
-	struct uart_port port;
-	const u16 *reg_offset;
-	struct clk *clk;
-	const struct vendor_data *vendor;
-	unsigned int dmacr;
-	unsigned int im;
-	unsigned int old_status;
-	unsigned int fifosize;
-	unsigned int old_cr;
-	unsigned int fixed_baud;
-	char type[12];
-	bool using_tx_dma;
-	bool using_rx_dma;
-	struct pl011_dmarx_data dmarx;
-	struct pl011_dmatx_data dmatx;
-	bool dma_probed;
-};
-
-struct s3c2410_uartcfg {
-	unsigned char hwport;
-	unsigned char unused;
-	short unsigned int flags;
-	upf_t uart_flags;
-	unsigned int clk_sel;
-	unsigned int has_fracval;
-	long unsigned int ucon;
-	long unsigned int ulcon;
-	long unsigned int ufcon;
-};
-
-struct s3c24xx_uart_info {
-	char *name;
-	unsigned int type;
-	unsigned int fifosize;
-	long unsigned int rx_fifomask;
-	long unsigned int rx_fifoshift;
-	long unsigned int rx_fifofull;
-	long unsigned int tx_fifomask;
-	long unsigned int tx_fifoshift;
-	long unsigned int tx_fifofull;
-	unsigned int def_clk_sel;
-	long unsigned int num_clks;
-	long unsigned int clksel_mask;
-	long unsigned int clksel_shift;
-	unsigned int has_divslot: 1;
-};
-
-struct s3c24xx_serial_drv_data {
-	struct s3c24xx_uart_info *info;
-	struct s3c2410_uartcfg *def_cfg;
-	unsigned int fifosize[4];
-};
-
-struct s3c24xx_uart_dma {
-	unsigned int rx_chan_id;
-	unsigned int tx_chan_id;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
-	struct dma_chan *rx_chan;
-	struct dma_chan *tx_chan;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
+struct tegra_uart_port {
+	struct uart_port uport;
+	const struct tegra_uart_chip_data *cdata;
+	struct clk *uart_clk;
+	struct reset_control *rst;
+	unsigned int current_baud;
+	long unsigned int fcr_shadow;
+	long unsigned int mcr_shadow;
+	long unsigned int lcr_shadow;
+	long unsigned int ier_shadow;
+	bool rts_active;
+	int tx_in_progress;
+	unsigned int tx_bytes;
+	bool enable_modem_interrupt;
+	bool rx_timeout;
+	int rx_in_progress;
+	int symb_bit;
+	struct dma_chan *rx_dma_chan;
+	struct dma_chan *tx_dma_chan;
+	dma_addr_t rx_dma_buf_phys;
+	dma_addr_t tx_dma_buf_phys;
+	unsigned char *rx_dma_buf_virt;
+	unsigned char *tx_dma_buf_virt;
+	struct dma_async_tx_descriptor *tx_dma_desc;
+	struct dma_async_tx_descriptor *rx_dma_desc;
 	dma_cookie_t tx_cookie;
-	char *rx_buf;
-	dma_addr_t tx_transfer_addr;
-	size_t rx_size;
-	size_t tx_size;
-	struct dma_async_tx_descriptor *tx_desc;
-	struct dma_async_tx_descriptor *rx_desc;
-	int tx_bytes_requested;
-	int rx_bytes_requested;
-};
-
-struct s3c24xx_uart_port {
-	unsigned char rx_claimed;
-	unsigned char tx_claimed;
-	unsigned char rx_enabled;
-	unsigned char tx_enabled;
-	unsigned int pm_level;
-	long unsigned int baudclk_rate;
-	unsigned int min_dma_size;
-	unsigned int rx_irq;
-	unsigned int tx_irq;
-	unsigned int tx_in_progress;
-	unsigned int tx_mode;
-	unsigned int rx_mode;
-	struct s3c24xx_uart_info *info;
-	struct clk *clk;
-	struct clk *baudclk;
-	struct uart_port port;
-	struct s3c24xx_serial_drv_data *drv_data;
-	struct s3c2410_uartcfg *cfg;
-	struct s3c24xx_uart_dma *dma;
-};
-
-struct samsung_early_console_data {
-	u32 txfull_mask;
-};
-
-enum {
-	UARTDM_1P1 = 1,
-	UARTDM_1P2 = 2,
-	UARTDM_1P3 = 3,
-	UARTDM_1P4 = 4,
-};
-
-struct msm_dma {
-	struct dma_chan *chan;
-	enum dma_data_direction dir;
-	dma_addr_t phys;
-	unsigned char *virt;
-	dma_cookie_t cookie;
-	u32 enable_bit;
-	unsigned int count;
-	struct dma_async_tx_descriptor *desc;
-};
-
-struct msm_port {
-	struct uart_port uart;
-	char name[16];
-	struct clk *clk;
-	struct clk *pclk;
-	unsigned int imr;
-	int is_uartdm;
-	unsigned int old_snap_state;
-	bool break_detected;
-	struct msm_dma tx_dma;
-	struct msm_dma rx_dma;
-};
-
-struct msm_baud_map {
-	u16 divisor;
-	u8 code;
-	u8 rxstale;
-};
-
-struct cdns_uart {
-	struct uart_port *port;
-	struct clk *uartclk;
-	struct clk *pclk;
-	struct uart_driver *cdns_uart_driver;
-	unsigned int baud;
-	struct notifier_block clk_rate_change_nb;
-	u32 quirks;
-	bool cts_override;
-};
-
-struct cdns_platform_data {
-	u32 quirks;
-};
-
-enum {
-	UART_IRQ_SUM = 0,
-	UART_RX_IRQ = 0,
-	UART_TX_IRQ = 1,
-	UART_IRQ_COUNT = 2,
-};
-
-struct uart_regs_layout {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-};
-
-struct uart_flags {
-	unsigned int ctrl_tx_rdy_int;
-	unsigned int ctrl_rx_rdy_int;
-	unsigned int stat_tx_rdy;
-	unsigned int stat_rx_rdy;
-};
-
-struct mvebu_uart_driver_data {
-	bool is_ext;
-	struct uart_regs_layout regs;
-	struct uart_flags flags;
-};
-
-struct mvebu_uart_pm_regs {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-	unsigned int stat;
-	unsigned int brdv;
-	unsigned int osamp;
-};
-
-struct mvebu_uart {
-	struct uart_port *port;
-	struct clk *clk;
-	int irq[2];
-	unsigned char *nb;
-	struct mvebu_uart_driver_data *data;
-	struct mvebu_uart_pm_regs pm_regs;
-};
-
-enum mctrl_gpio_idx {
-	UART_GPIO_CTS = 0,
-	UART_GPIO_DSR = 1,
-	UART_GPIO_DCD = 2,
-	UART_GPIO_RNG = 3,
-	UART_GPIO_RI = 3,
-	UART_GPIO_RTS = 4,
-	UART_GPIO_DTR = 5,
-	UART_GPIO_MAX = 6,
-};
-
-struct mctrl_gpios___2 {
-	struct uart_port *port;
-	struct gpio_desc *gpio[6];
-	int irq[6];
-	unsigned int mctrl_prev;
-	bool mctrl_on;
-};
-
-struct serdev_device;
-
-struct serdev_device_ops {
-	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct serdev_device *);
-};
-
-struct serdev_controller;
-
-struct serdev_device {
-	struct device dev;
-	int nr;
-	struct serdev_controller *ctrl;
-	const struct serdev_device_ops *ops;
-	struct completion write_comp;
-	struct mutex write_lock;
-};
-
-struct serdev_controller_ops;
-
-struct serdev_controller {
-	struct device dev;
-	unsigned int nr;
-	struct serdev_device *serdev;
-	const struct serdev_controller_ops *ops;
-};
-
-struct serdev_device_driver {
-	struct device_driver driver;
-	int (*probe)(struct serdev_device *);
-	void (*remove)(struct serdev_device *);
-};
-
-enum serdev_parity {
-	SERDEV_PARITY_NONE = 0,
-	SERDEV_PARITY_EVEN = 1,
-	SERDEV_PARITY_ODD = 2,
-};
-
-struct serdev_controller_ops {
-	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
-	void (*write_flush)(struct serdev_controller *);
-	int (*write_room)(struct serdev_controller *);
-	int (*open)(struct serdev_controller *);
-	void (*close)(struct serdev_controller *);
-	void (*set_flow_control)(struct serdev_controller *, bool);
-	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
-	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
-	void (*wait_until_sent)(struct serdev_controller *, long int);
-	int (*get_tiocm)(struct serdev_controller *);
-	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
-};
-
-struct acpi_serdev_lookup {
-	acpi_handle device_handle;
-	acpi_handle controller_handle;
-	int n;
-	int index;
-};
-
-struct serport {
-	struct tty_port *port;
-	struct tty_struct *tty;
-	struct tty_driver *tty_drv;
-	int tty_idx;
-	long unsigned int flags;
+	dma_cookie_t rx_cookie;
+	unsigned int tx_bytes_requested;
+	unsigned int rx_bytes_requested;
+	struct tegra_baud_tolerance *baud_tolerance;
+	int n_adjustable_baud_rates;
+	int required_rate;
+	int configured_rate;
+	bool use_rx_pio;
+	bool use_tx_pio;
+	bool rx_dma_active;
 };
 
 struct memdev {
@@ -79965,264 +97591,6 @@
 	fmode_t fmode;
 };
 
-struct timer_rand_state {
-	cycles_t last_time;
-	long int last_delta;
-	long int last_delta2;
-};
-
-struct trace_event_raw_add_device_randomness {
-	struct trace_entry ent;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__mix_pool_bytes {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_credit_entropy_bits {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bits;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_push_to_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int pool_bits;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_debit_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int debit_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_input_randomness {
-	struct trace_entry ent;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_disk_randomness {
-	struct trace_entry ent;
-	dev_t dev;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_xfer_secondary_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int xfer_bits;
-	int request_bits;
-	int pool_entropy;
-	int input_entropy;
-	char __data[0];
-};
-
-struct trace_event_raw_random__get_random_bytes {
-	struct trace_entry ent;
-	int nbytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__extract_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int nbytes;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random_read {
-	struct trace_entry ent;
-	int got_bits;
-	int need_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_urandom_read {
-	struct trace_entry ent;
-	int got_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_prandom_u32 {
-	struct trace_entry ent;
-	unsigned int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_add_device_randomness {};
-
-struct trace_event_data_offsets_random__mix_pool_bytes {};
-
-struct trace_event_data_offsets_credit_entropy_bits {};
-
-struct trace_event_data_offsets_push_to_pool {};
-
-struct trace_event_data_offsets_debit_entropy {};
-
-struct trace_event_data_offsets_add_input_randomness {};
-
-struct trace_event_data_offsets_add_disk_randomness {};
-
-struct trace_event_data_offsets_xfer_secondary_pool {};
-
-struct trace_event_data_offsets_random__get_random_bytes {};
-
-struct trace_event_data_offsets_random__extract_entropy {};
-
-struct trace_event_data_offsets_random_read {};
-
-struct trace_event_data_offsets_urandom_read {};
-
-struct trace_event_data_offsets_prandom_u32 {};
-
-typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);
-
-typedef void (*btf_trace_debit_entropy)(void *, const char *, int);
-
-typedef void (*btf_trace_add_input_randomness)(void *, int);
-
-typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);
-
-typedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);
-
-typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_random_read)(void *, int, int, int, int);
-
-typedef void (*btf_trace_urandom_read)(void *, int, int, int);
-
-typedef void (*btf_trace_prandom_u32)(void *, unsigned int);
-
-struct poolinfo {
-	int poolbitshift;
-	int poolwords;
-	int poolbytes;
-	int poolfracbits;
-	int tap1;
-	int tap2;
-	int tap3;
-	int tap4;
-	int tap5;
-};
-
-struct crng_state {
-	__u32 state[16];
-	long unsigned int init_time;
-	spinlock_t lock;
-};
-
-struct entropy_store {
-	const struct poolinfo *poolinfo;
-	__u32 *pool;
-	const char *name;
-	spinlock_t lock;
-	short unsigned int add_ptr;
-	short unsigned int input_rotate;
-	int entropy_count;
-	unsigned int initialized: 1;
-	unsigned int last_data_init: 1;
-	__u8 last_data[10];
-};
-
-struct fast_pool {
-	__u32 pool[4];
-	long unsigned int last;
-	short unsigned int reg_idx;
-	unsigned char count;
-};
-
-struct batched_entropy {
-	union {
-		u64 entropy_u64[8];
-		u32 entropy_u32[16];
-	};
-	unsigned int position;
-	spinlock_t batch_lock;
-};
-
-struct ttyprintk_port {
-	struct tty_port port;
-	spinlock_t spinlock;
-};
-
-enum tpm2_startup_types {
-	TPM2_SU_CLEAR = 0,
-	TPM2_SU_STATE = 1,
-};
-
-enum tpm_chip_flags {
-	TPM_CHIP_FLAG_TPM2 = 2,
-	TPM_CHIP_FLAG_IRQ = 4,
-	TPM_CHIP_FLAG_VIRTUAL = 8,
-	TPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,
-	TPM_CHIP_FLAG_ALWAYS_POWERED = 32,
-	TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,
-};
-
-enum tpm2_structures {
-	TPM2_ST_NO_SESSIONS = 32769,
-	TPM2_ST_SESSIONS = 32770,
-};
-
-enum tpm2_return_codes {
-	TPM2_RC_SUCCESS = 0,
-	TPM2_RC_HASH = 131,
-	TPM2_RC_HANDLE = 139,
-	TPM2_RC_INITIALIZE = 256,
-	TPM2_RC_FAILURE = 257,
-	TPM2_RC_DISABLED = 288,
-	TPM2_RC_COMMAND_CODE = 323,
-	TPM2_RC_TESTING = 2314,
-	TPM2_RC_REFERENCE_H0 = 2320,
-	TPM2_RC_RETRY = 2338,
-};
-
-struct tpm_header {
-	__be16 tag;
-	__be32 length;
-	union {
-		__be32 ordinal;
-		__be32 return_code;
-	};
-} __attribute__((packed));
-
 struct file_priv {
 	struct tpm_chip *chip;
 	struct tpm_space *space;
@@ -80237,263 +97605,6 @@
 	u8 data_buffer[4096];
 };
 
-enum TPM_OPS_FLAGS {
-	TPM_OPS_AUTO_STARTUP = 1,
-};
-
-enum tpm2_timeouts {
-	TPM2_TIMEOUT_A = 750,
-	TPM2_TIMEOUT_B = 2000,
-	TPM2_TIMEOUT_C = 200,
-	TPM2_TIMEOUT_D = 30,
-	TPM2_DURATION_SHORT = 20,
-	TPM2_DURATION_MEDIUM = 750,
-	TPM2_DURATION_LONG = 2000,
-	TPM2_DURATION_LONG_LONG = 300000,
-	TPM2_DURATION_DEFAULT = 120000,
-};
-
-enum tpm2_command_codes {
-	TPM2_CC_FIRST = 287,
-	TPM2_CC_HIERARCHY_CONTROL = 289,
-	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
-	TPM2_CC_CREATE_PRIMARY = 305,
-	TPM2_CC_SEQUENCE_COMPLETE = 318,
-	TPM2_CC_SELF_TEST = 323,
-	TPM2_CC_STARTUP = 324,
-	TPM2_CC_SHUTDOWN = 325,
-	TPM2_CC_NV_READ = 334,
-	TPM2_CC_CREATE = 339,
-	TPM2_CC_LOAD = 343,
-	TPM2_CC_SEQUENCE_UPDATE = 348,
-	TPM2_CC_UNSEAL = 350,
-	TPM2_CC_CONTEXT_LOAD = 353,
-	TPM2_CC_CONTEXT_SAVE = 354,
-	TPM2_CC_FLUSH_CONTEXT = 357,
-	TPM2_CC_VERIFY_SIGNATURE = 375,
-	TPM2_CC_GET_CAPABILITY = 378,
-	TPM2_CC_GET_RANDOM = 379,
-	TPM2_CC_PCR_READ = 382,
-	TPM2_CC_PCR_EXTEND = 386,
-	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
-	TPM2_CC_HASH_SEQUENCE_START = 390,
-	TPM2_CC_CREATE_LOADED = 401,
-	TPM2_CC_LAST = 403,
-};
-
-struct tpm_buf {
-	unsigned int flags;
-	u8 *data;
-};
-
-enum tpm_timeout {
-	TPM_TIMEOUT = 5,
-	TPM_TIMEOUT_RETRY = 100,
-	TPM_TIMEOUT_RANGE_US = 300,
-	TPM_TIMEOUT_POLL = 1,
-	TPM_TIMEOUT_USECS_MIN = 100,
-	TPM_TIMEOUT_USECS_MAX = 500,
-};
-
-enum tpm_buf_flags {
-	TPM_BUF_OVERFLOW = 1,
-};
-
-struct stclear_flags_t {
-	__be16 tag;
-	u8 deactivated;
-	u8 disableForceClear;
-	u8 physicalPresence;
-	u8 physicalPresenceLock;
-	u8 bGlobalLock;
-} __attribute__((packed));
-
-struct tpm1_version {
-	u8 major;
-	u8 minor;
-	u8 rev_major;
-	u8 rev_minor;
-};
-
-struct tpm1_version2 {
-	__be16 tag;
-	struct tpm1_version version;
-};
-
-struct timeout_t {
-	__be32 a;
-	__be32 b;
-	__be32 c;
-	__be32 d;
-};
-
-struct duration_t {
-	__be32 tpm_short;
-	__be32 tpm_medium;
-	__be32 tpm_long;
-};
-
-struct permanent_flags_t {
-	__be16 tag;
-	u8 disable;
-	u8 ownership;
-	u8 deactivated;
-	u8 readPubek;
-	u8 disableOwnerClear;
-	u8 allowMaintenance;
-	u8 physicalPresenceLifetimeLock;
-	u8 physicalPresenceHWEnable;
-	u8 physicalPresenceCMDEnable;
-	u8 CEKPUsed;
-	u8 TPMpost;
-	u8 TPMpostLock;
-	u8 FIPS;
-	u8 operator;
-	u8 enableRevokeEK;
-	u8 nvLocked;
-	u8 readSRKPub;
-	u8 tpmEstablished;
-	u8 maintenanceDone;
-	u8 disableFullDALogicInfo;
-};
-
-typedef union {
-	struct permanent_flags_t perm_flags;
-	struct stclear_flags_t stclear_flags;
-	__u8 owned;
-	__be32 num_pcrs;
-	struct tpm1_version version1;
-	struct tpm1_version2 version2;
-	__be32 manufacturer_id;
-	struct timeout_t timeout;
-	struct duration_t duration;
-} cap_t;
-
-enum tpm_capabilities {
-	TPM_CAP_FLAG = 4,
-	TPM_CAP_PROP = 5,
-	TPM_CAP_VERSION_1_1 = 6,
-	TPM_CAP_VERSION_1_2 = 26,
-};
-
-enum tpm_sub_capabilities {
-	TPM_CAP_PROP_PCR = 257,
-	TPM_CAP_PROP_MANUFACTURER = 259,
-	TPM_CAP_FLAG_PERM = 264,
-	TPM_CAP_FLAG_VOL = 265,
-	TPM_CAP_PROP_OWNER = 273,
-	TPM_CAP_PROP_TIS_TIMEOUT = 277,
-	TPM_CAP_PROP_TIS_DURATION = 288,
-};
-
-struct tpm1_get_random_out {
-	__be32 rng_data_len;
-	u8 rng_data[128];
-};
-
-enum tpm2_const {
-	TPM2_PLATFORM_PCR = 24,
-	TPM2_PCR_SELECT_MIN = 3,
-};
-
-enum tpm2_permanent_handles {
-	TPM2_RS_PW = 1073741833,
-};
-
-enum tpm2_capabilities {
-	TPM2_CAP_HANDLES = 1,
-	TPM2_CAP_COMMANDS = 2,
-	TPM2_CAP_PCRS = 5,
-	TPM2_CAP_TPM_PROPERTIES = 6,
-};
-
-enum tpm2_properties {
-	TPM_PT_TOTAL_COMMANDS = 297,
-};
-
-enum tpm2_cc_attrs {
-	TPM2_CC_ATTR_CHANDLES = 25,
-	TPM2_CC_ATTR_RHANDLE = 28,
-};
-
-struct tpm2_hash {
-	unsigned int crypto_id;
-	unsigned int tpm_id;
-};
-
-struct tpm2_pcr_read_out {
-	__be32 update_cnt;
-	__be32 pcr_selects_cnt;
-	__be16 hash_alg;
-	u8 pcr_select_size;
-	u8 pcr_select[3];
-	__be32 digests_cnt;
-	__be16 digest_size;
-	u8 digest[0];
-} __attribute__((packed));
-
-struct tpm2_null_auth_area {
-	__be32 handle;
-	__be16 nonce_size;
-	u8 attributes;
-	__be16 auth_size;
-} __attribute__((packed));
-
-struct tpm2_get_random_out {
-	__be16 size;
-	u8 buffer[128];
-};
-
-struct tpm2_get_cap_out {
-	u8 more_data;
-	__be32 subcap_id;
-	__be32 property_cnt;
-	__be32 property_id;
-	__be32 value;
-} __attribute__((packed));
-
-struct tpm2_pcr_selection {
-	__be16 hash_alg;
-	u8 size_of_select;
-	u8 pcr_select[3];
-};
-
-struct tpmrm_priv {
-	struct file_priv priv;
-	struct tpm_space space;
-};
-
-enum tpm2_handle_types {
-	TPM2_HT_HMAC_SESSION = 33554432,
-	TPM2_HT_POLICY_SESSION = 50331648,
-	TPM2_HT_TRANSIENT = 2147483648,
-};
-
-struct tpm2_context {
-	__be64 sequence;
-	__be32 saved_handle;
-	__be32 hierarchy;
-	__be16 blob_size;
-} __attribute__((packed));
-
-struct tpm2_cap_handles {
-	u8 more_data;
-	__be32 capability;
-	__be32 count;
-	__be32 handles[0];
-} __attribute__((packed));
-
-struct tpm_readpubek_out {
-	u8 algorithm[4];
-	u8 encscheme[2];
-	u8 sigscheme[2];
-	__be32 paramsize;
-	u8 parameters[12];
-	__be32 keysize;
-	u8 modulus[256];
-	u8 checksum[20];
-};
-
 struct tcpa_event {
 	u32 pcr_index;
 	u32 event_type;
@@ -80502,27 +97613,6 @@
 	u8 event_data[0];
 };
 
-enum tcpa_event_types {
-	PREBOOT = 0,
-	POST_CODE = 1,
-	UNUSED = 2,
-	NO_ACTION = 3,
-	SEPARATOR = 4,
-	ACTION = 5,
-	EVENT_TAG = 6,
-	SCRTM_CONTENTS = 7,
-	SCRTM_VERSION = 8,
-	CPU_MICROCODE = 9,
-	PLATFORM_CONFIG_FLAGS = 10,
-	TABLE_OF_DEVICES = 11,
-	COMPACT_HASH = 12,
-	IPL = 13,
-	IPL_PARTITION_DATA = 14,
-	NONHOST_CODE = 15,
-	NONHOST_CONFIG = 16,
-	NONHOST_INFO = 17,
-};
-
 struct tcpa_pc_event {
 	u32 event_id;
 	u32 event_size;
@@ -80545,42 +97635,6 @@
 	HOST_TABLE_OF_DEVICES = 14,
 };
 
-struct tcg_efi_specid_event_algs {
-	u16 alg_id;
-	u16 digest_size;
-};
-
-struct tcg_efi_specid_event_head {
-	u8 signature[16];
-	u32 platform_class;
-	u8 spec_version_minor;
-	u8 spec_version_major;
-	u8 spec_errata;
-	u8 uintnsize;
-	u32 num_algs;
-	struct tcg_efi_specid_event_algs digest_sizes[0];
-};
-
-struct tcg_pcr_event {
-	u32 pcr_idx;
-	u32 event_type;
-	u8 digest[20];
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_event_field {
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_pcr_event2_head {
-	u32 pcr_idx;
-	u32 event_type;
-	u32 count;
-	struct tpm_digest digests[0];
-};
-
 struct acpi_table_tpm2 {
 	struct acpi_table_header header;
 	u16 platform_class;
@@ -80589,134 +97643,6 @@
 	u32 start_method;
 } __attribute__((packed));
 
-struct acpi_tpm2_phy {
-	u8 start_method_specific[12];
-	u32 log_area_minimum_length;
-	u64 log_area_start_address;
-};
-
-enum bios_platform_class {
-	BIOS_CLIENT = 0,
-	BIOS_SERVER = 1,
-};
-
-struct client_hdr {
-	u32 log_max_len;
-	u64 log_start_addr;
-} __attribute__((packed));
-
-struct server_hdr {
-	u16 reserved;
-	u64 log_max_len;
-	u64 log_start_addr;
-} __attribute__((packed));
-
-struct acpi_tcpa {
-	struct acpi_table_header hdr;
-	u16 platform_class;
-	union {
-		struct client_hdr client;
-		struct server_hdr server;
-	};
-} __attribute__((packed));
-
-struct linux_efi_tpm_eventlog {
-	u32 size;
-	u32 final_events_preboot_size;
-	u8 version;
-	u8 log[0];
-};
-
-struct efi_tcg2_final_events_table {
-	u64 version;
-	u64 nr_events;
-	u8 events[0];
-};
-
-enum tis_access {
-	TPM_ACCESS_VALID = 128,
-	TPM_ACCESS_ACTIVE_LOCALITY = 32,
-	TPM_ACCESS_REQUEST_PENDING = 4,
-	TPM_ACCESS_REQUEST_USE = 2,
-};
-
-enum tis_status {
-	TPM_STS_VALID = 128,
-	TPM_STS_COMMAND_READY = 64,
-	TPM_STS_GO = 32,
-	TPM_STS_DATA_AVAIL = 16,
-	TPM_STS_DATA_EXPECT = 8,
-	TPM_STS_READ_ZERO = 35,
-};
-
-enum tis_int_flags {
-	TPM_GLOBAL_INT_ENABLE = 2147483648,
-	TPM_INTF_BURST_COUNT_STATIC = 256,
-	TPM_INTF_CMD_READY_INT = 128,
-	TPM_INTF_INT_EDGE_FALLING = 64,
-	TPM_INTF_INT_EDGE_RISING = 32,
-	TPM_INTF_INT_LEVEL_LOW = 16,
-	TPM_INTF_INT_LEVEL_HIGH = 8,
-	TPM_INTF_LOCALITY_CHANGE_INT = 4,
-	TPM_INTF_STS_VALID_INT = 2,
-	TPM_INTF_DATA_AVAIL_INT = 1,
-};
-
-enum tis_defaults {
-	TIS_MEM_LEN = 20480,
-	TIS_SHORT_TIMEOUT = 750,
-	TIS_LONG_TIMEOUT = 2000,
-};
-
-enum tpm_tis_flags {
-	TPM_TIS_ITPM_WORKAROUND = 1,
-};
-
-struct tpm_tis_phy_ops;
-
-struct tpm_tis_data {
-	u16 manufacturer_id;
-	int locality;
-	int irq;
-	bool irq_tested;
-	unsigned int flags;
-	void *ilb_base_addr;
-	u16 clkrun_enabled;
-	wait_queue_head_t int_queue;
-	wait_queue_head_t read_queue;
-	const struct tpm_tis_phy_ops *phy_ops;
-	short unsigned int rng_quality;
-};
-
-struct tpm_tis_phy_ops {
-	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *);
-	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *);
-	int (*read16)(struct tpm_tis_data *, u32, u16 *);
-	int (*read32)(struct tpm_tis_data *, u32, u32 *);
-	int (*write32)(struct tpm_tis_data *, u32, u32);
-};
-
-struct tis_vendor_durations_override {
-	u32 did_vid;
-	struct tpm1_version version;
-	long unsigned int durations[3];
-};
-
-struct tis_vendor_timeout_override {
-	u32 did_vid;
-	long unsigned int timeout_us[4];
-};
-
-struct tpm_info {
-	struct resource res;
-	int irq;
-};
-
-struct tpm_tis_tcg_phy {
-	struct tpm_tis_data priv;
-	void *iobase;
-};
-
 enum crb_defaults {
 	CRB_ACPI_START_REVISION_ID = 1,
 	CRB_ACPI_START_INDEX = 1,
@@ -80797,607 +97723,28 @@
 	u32 smc_func_id;
 };
 
-enum io_pgtable_fmt {
-	ARM_32_LPAE_S1 = 0,
-	ARM_32_LPAE_S2 = 1,
-	ARM_64_LPAE_S1 = 2,
-	ARM_64_LPAE_S2 = 3,
-	ARM_V7S = 4,
-	ARM_MALI_LPAE = 5,
-	IO_PGTABLE_NUM_FMTS = 6,
-};
-
-struct iommu_flush_ops {
-	void (*tlb_flush_all)(void *);
-	void (*tlb_flush_walk)(long unsigned int, size_t, size_t, void *);
-	void (*tlb_flush_leaf)(long unsigned int, size_t, size_t, void *);
-	void (*tlb_add_page)(struct iommu_iotlb_gather *, long unsigned int, size_t, void *);
-};
-
-struct io_pgtable_cfg {
-	long unsigned int quirks;
-	long unsigned int pgsize_bitmap;
-	unsigned int ias;
-	unsigned int oas;
-	bool coherent_walk;
-	const struct iommu_flush_ops *tlb;
-	struct device *iommu_dev;
-	union {
-		struct {
-			u64 ttbr;
-			struct {
-				u32 ips: 3;
-				u32 tg: 2;
-				u32 sh: 2;
-				u32 orgn: 2;
-				u32 irgn: 2;
-				u32 tsz: 6;
-			} tcr;
-			u64 mair;
-		} arm_lpae_s1_cfg;
-		struct {
-			u64 vttbr;
-			struct {
-				u32 ps: 3;
-				u32 tg: 2;
-				u32 sh: 2;
-				u32 orgn: 2;
-				u32 irgn: 2;
-				u32 sl: 2;
-				u32 tsz: 6;
-			} vtcr;
-		} arm_lpae_s2_cfg;
-		struct {
-			u32 ttbr;
-			u32 tcr;
-			u32 nmrr;
-			u32 prrr;
-		} arm_v7s_cfg;
-		struct {
-			u64 transtab;
-			u64 memattr;
-		} arm_mali_lpae_cfg;
-	};
-};
-
-struct io_pgtable_ops {
-	int (*map)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct io_pgtable_ops *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *, long unsigned int);
-};
-
-enum arm_smmu_s2cr_privcfg {
-	S2CR_PRIVCFG_DEFAULT = 0,
-	S2CR_PRIVCFG_DIPAN = 1,
-	S2CR_PRIVCFG_UNPRIV = 2,
-	S2CR_PRIVCFG_PRIV = 3,
-};
-
-enum arm_smmu_s2cr_type {
-	S2CR_TYPE_TRANS = 0,
-	S2CR_TYPE_BYPASS = 1,
-	S2CR_TYPE_FAULT = 2,
-};
-
-enum arm_smmu_cbar_type {
-	CBAR_TYPE_S2_TRANS = 0,
-	CBAR_TYPE_S1_TRANS_S2_BYPASS = 1,
-	CBAR_TYPE_S1_TRANS_S2_FAULT = 2,
-	CBAR_TYPE_S1_TRANS_S2_TRANS = 3,
-};
-
-enum arm_smmu_arch_version {
-	ARM_SMMU_V1 = 0,
-	ARM_SMMU_V1_64K = 1,
-	ARM_SMMU_V2 = 2,
-};
-
-enum arm_smmu_implementation {
-	GENERIC_SMMU = 0,
-	ARM_MMU500 = 1,
-	CAVIUM_SMMUV2 = 2,
-	QCOM_SMMUV2 = 3,
-};
-
-struct arm_smmu_s2cr {
-	struct iommu_group *group;
-	int count;
-	enum arm_smmu_s2cr_type type;
-	enum arm_smmu_s2cr_privcfg privcfg;
-	u8 cbndx;
-};
-
-struct arm_smmu_smr {
-	u16 mask;
-	u16 id;
-	bool valid;
-	bool pinned;
-};
-
-struct arm_smmu_impl;
-
-struct arm_smmu_cb;
-
-struct arm_smmu_device {
-	struct device *dev;
-	void *base;
-	unsigned int numpage;
-	unsigned int pgshift;
-	u32 features;
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
-	const struct arm_smmu_impl *impl;
-	u32 num_context_banks;
-	u32 num_s2_context_banks;
-	long unsigned int context_map[2];
-	struct arm_smmu_cb *cbs;
-	atomic_t irptndx;
-	u32 num_mapping_groups;
-	u16 streamid_mask;
-	u16 smr_mask_mask;
-	struct arm_smmu_smr *smrs;
-	struct arm_smmu_s2cr *s2crs;
-	struct mutex stream_map_mutex;
-	long unsigned int va_size;
-	long unsigned int ipa_size;
-	long unsigned int pa_size;
-	long unsigned int pgsize_bitmap;
-	u32 num_global_irqs;
-	u32 num_context_irqs;
-	unsigned int *irqs;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	spinlock_t global_sync_lock;
-	struct iommu_device iommu;
-};
-
-struct arm_smmu_domain;
-
-struct arm_smmu_impl {
-	u32 (*read_reg)(struct arm_smmu_device *, int, int);
-	void (*write_reg)(struct arm_smmu_device *, int, int, u32);
-	u64 (*read_reg64)(struct arm_smmu_device *, int, int);
-	void (*write_reg64)(struct arm_smmu_device *, int, int, u64);
-	int (*cfg_probe)(struct arm_smmu_device *);
-	int (*reset)(struct arm_smmu_device *);
-	int (*init_context)(struct arm_smmu_domain *, struct io_pgtable_cfg *, struct device *);
-	void (*tlb_sync)(struct arm_smmu_device *, int, int, int);
-	int (*def_domain_type)(struct device *);
-	irqreturn_t (*global_fault)(int, void *);
-	irqreturn_t (*context_fault)(int, void *);
-	int (*alloc_context_bank)(struct arm_smmu_domain *, struct arm_smmu_device *, struct device *, int);
-	void (*write_s2cr)(struct arm_smmu_device *, int);
-};
-
-struct arm_smmu_cfg;
-
-struct arm_smmu_cb {
-	u64 ttbr[2];
-	u32 tcr[2];
-	u32 mair[2];
-	struct arm_smmu_cfg *cfg;
-};
-
-enum arm_smmu_context_fmt {
-	ARM_SMMU_CTX_FMT_NONE = 0,
-	ARM_SMMU_CTX_FMT_AARCH64 = 1,
-	ARM_SMMU_CTX_FMT_AARCH32_L = 2,
-	ARM_SMMU_CTX_FMT_AARCH32_S = 3,
-};
-
-struct arm_smmu_cfg {
-	u8 cbndx;
-	u8 irptndx;
-	union {
-		u16 asid;
-		u16 vmid;
-	};
-	enum arm_smmu_cbar_type cbar;
-	enum arm_smmu_context_fmt fmt;
-};
-
-enum arm_smmu_domain_stage {
-	ARM_SMMU_DOMAIN_S1 = 0,
-	ARM_SMMU_DOMAIN_S2 = 1,
-	ARM_SMMU_DOMAIN_NESTED = 2,
-	ARM_SMMU_DOMAIN_BYPASS = 3,
-};
-
-struct arm_smmu_domain {
-	struct arm_smmu_device *smmu;
-	struct io_pgtable_ops *pgtbl_ops;
-	const struct iommu_flush_ops *flush_ops;
-	struct arm_smmu_cfg cfg;
-	enum arm_smmu_domain_stage stage;
-	bool non_strict;
-	struct mutex init_mutex;
-	spinlock_t cb_lock;
-	struct iommu_domain domain;
-};
-
-struct arm_smmu_master_cfg {
-	struct arm_smmu_device *smmu;
-	s16 smendx[0];
-};
-
-struct arm_smmu_match_data {
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
-};
-
-struct cavium_smmu {
-	struct arm_smmu_device smmu;
-	u32 id_base;
-};
-
-struct nvidia_smmu {
-	struct arm_smmu_device smmu;
-	void *bases[2];
-};
-
-struct qcom_smmu {
-	struct arm_smmu_device smmu;
-	bool bypass_quirk;
-	u8 bypass_cbndx;
-};
-
-enum pri_resp {
-	PRI_RESP_DENY = 0,
-	PRI_RESP_FAIL = 1,
-	PRI_RESP_SUCC = 2,
-};
-
-struct arm_smmu_cmdq_ent {
-	u8 opcode;
-	bool substream_valid;
-	union {
-		struct {
-			u32 sid;
-			u8 size;
-			u64 addr;
-		} prefetch;
-		struct {
-			u32 sid;
-			u32 ssid;
-			union {
-				bool leaf;
-				u8 span;
-			};
-		} cfgi;
-		struct {
-			u8 num;
-			u8 scale;
-			u16 asid;
-			u16 vmid;
-			bool leaf;
-			u8 ttl;
-			u8 tg;
-			u64 addr;
-		} tlbi;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u64 addr;
-			u8 size;
-			bool global;
-		} atc;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u16 grpid;
-			enum pri_resp resp;
-		} pri;
-		struct {
-			u64 msiaddr;
-		} sync;
-	};
-};
-
-struct arm_smmu_ll_queue {
-	union {
-		u64 val;
-		struct {
-			u32 prod;
-			u32 cons;
-		};
-		struct {
-			atomic_t prod;
-			atomic_t cons;
-		} atomic;
-		u8 __pad[64];
-	};
-	u32 max_n_shift;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_queue {
-	struct arm_smmu_ll_queue llq;
-	int irq;
-	__le64 *base;
-	dma_addr_t base_dma;
-	u64 q_base;
-	size_t ent_dwords;
-	u32 *prod_reg;
-	u32 *cons_reg;
-	long: 64;
-};
-
-struct arm_smmu_queue_poll {
-	ktime_t timeout;
-	unsigned int delay;
-	unsigned int spin_cnt;
-	bool wfe;
-};
-
-struct arm_smmu_cmdq {
-	struct arm_smmu_queue q;
-	atomic_long_t *valid_map;
-	atomic_t owner_prod;
-	atomic_t lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_cmdq_batch {
-	u64 cmds[128];
-	int num;
-};
-
-struct arm_smmu_evtq {
-	struct arm_smmu_queue q;
-	u32 max_stalls;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_priq {
-	struct arm_smmu_queue q;
-};
-
-struct arm_smmu_strtab_l1_desc {
-	u8 span;
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
-};
-
-struct arm_smmu_ctx_desc {
-	u16 asid;
-	u64 ttbr;
-	u64 tcr;
-	u64 mair;
-	refcount_t refs;
-	struct mm_struct *mm;
-};
-
-struct arm_smmu_l1_ctx_desc {
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
-};
-
-struct arm_smmu_ctx_desc_cfg {
-	__le64 *cdtab;
-	dma_addr_t cdtab_dma;
-	struct arm_smmu_l1_ctx_desc *l1_desc;
-	unsigned int num_l1_ents;
-};
-
-struct arm_smmu_s1_cfg {
-	struct arm_smmu_ctx_desc_cfg cdcfg;
-	struct arm_smmu_ctx_desc cd;
-	u8 s1fmt;
-	u8 s1cdmax;
-};
-
-struct arm_smmu_s2_cfg {
-	u16 vmid;
-	u64 vttbr;
-	u64 vtcr;
-};
-
-struct arm_smmu_strtab_cfg {
-	__le64 *strtab;
-	dma_addr_t strtab_dma;
-	struct arm_smmu_strtab_l1_desc *l1_desc;
-	unsigned int num_l1_ents;
-	u64 strtab_base;
-	u32 strtab_base_cfg;
-};
-
-struct arm_smmu_device___2 {
-	struct device *dev;
-	void *base;
-	void *page1;
-	u32 features;
-	u32 options;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct arm_smmu_cmdq cmdq;
-	struct arm_smmu_evtq evtq;
-	struct arm_smmu_priq priq;
-	int gerr_irq;
-	int combined_irq;
-	long unsigned int ias;
-	long unsigned int oas;
-	long unsigned int pgsize_bitmap;
-	unsigned int asid_bits;
-	unsigned int vmid_bits;
-	long unsigned int vmid_map[1024];
-	unsigned int ssid_bits;
-	unsigned int sid_bits;
-	struct arm_smmu_strtab_cfg strtab_cfg;
-	struct iommu_device iommu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_domain___2;
-
-struct arm_smmu_master {
-	struct arm_smmu_device___2 *smmu;
-	struct device *dev;
-	struct arm_smmu_domain___2 *domain;
-	struct list_head domain_head;
-	u32 *sids;
-	unsigned int num_sids;
-	bool ats_enabled;
-	bool sva_enabled;
-	struct list_head bonds;
-	unsigned int ssid_bits;
-};
-
-struct arm_smmu_domain___2 {
-	struct arm_smmu_device___2 *smmu;
-	struct mutex init_mutex;
-	struct io_pgtable_ops *pgtbl_ops;
-	bool non_strict;
-	atomic_t nr_ats_masters;
-	enum arm_smmu_domain_stage stage;
-	union {
-		struct arm_smmu_s1_cfg s1_cfg;
-		struct arm_smmu_s2_cfg s2_cfg;
-	};
-	struct iommu_domain domain;
-	struct list_head devices;
-	spinlock_t devices_lock;
-};
-
-enum arm_smmu_msi_index {
-	EVTQ_MSI_INDEX = 0,
-	GERROR_MSI_INDEX = 1,
-	PRIQ_MSI_INDEX = 2,
-	ARM_SMMU_MAX_MSIS = 3,
-};
-
-struct arm_smmu_option_prop {
-	u32 opt;
-	const char *prop;
-};
-
 struct iommu_group {
 	struct kobject kobj;
 	struct kobject *devices_kobj;
 	struct list_head devices;
 	struct mutex mutex;
-	struct blocking_notifier_head notifier;
 	void *iommu_data;
 	void (*iommu_data_release)(void *);
 	char *name;
 	int id;
 	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
 	struct iommu_domain *domain;
 	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
 };
 
-typedef unsigned int ioasid_t;
-
 enum iommu_fault_type {
 	IOMMU_FAULT_DMA_UNRECOV = 1,
 	IOMMU_FAULT_PAGE_REQ = 2,
 };
 
-enum iommu_inv_granularity {
-	IOMMU_INV_GRANU_DOMAIN = 0,
-	IOMMU_INV_GRANU_PASID = 1,
-	IOMMU_INV_GRANU_ADDR = 2,
-	IOMMU_INV_GRANU_NR = 3,
-};
-
-struct fsl_mc_obj_desc {
-	char type[16];
-	int id;
-	u16 vendor;
-	u16 ver_major;
-	u16 ver_minor;
-	u8 irq_count;
-	u8 region_count;
-	u32 state;
-	char label[16];
-	u16 flags;
-};
-
-struct fsl_mc_io;
-
-struct fsl_mc_device_irq;
-
-struct fsl_mc_resource;
-
-struct fsl_mc_device {
-	struct device dev;
-	u64 dma_mask;
-	u16 flags;
-	u32 icid;
-	u16 mc_handle;
-	struct fsl_mc_io *mc_io;
-	struct fsl_mc_obj_desc obj_desc;
-	struct resource *regions;
-	struct fsl_mc_device_irq **irqs;
-	struct fsl_mc_resource *resource;
-	struct device_link *consumer_link;
-	char *driver_override;
-};
-
-enum fsl_mc_pool_type {
-	FSL_MC_POOL_DPMCP = 0,
-	FSL_MC_POOL_DPBP = 1,
-	FSL_MC_POOL_DPCON = 2,
-	FSL_MC_POOL_IRQ = 3,
-	FSL_MC_NUM_POOL_TYPES = 4,
-};
-
-struct fsl_mc_resource_pool;
-
-struct fsl_mc_resource {
-	enum fsl_mc_pool_type type;
-	s32 id;
-	void *data;
-	struct fsl_mc_resource_pool *parent_pool;
-	struct list_head node;
-};
-
-struct fsl_mc_device_irq {
-	struct msi_desc *msi_desc;
-	struct fsl_mc_device *mc_dev;
-	u8 dev_irq_index;
-	struct fsl_mc_resource resource;
-};
-
-struct fsl_mc_io {
-	struct device *dev;
-	u16 flags;
-	u32 portal_size;
-	phys_addr_t portal_phys_addr;
-	void *portal_virt_addr;
-	struct fsl_mc_device *dpmcp_dev;
-	union {
-		struct mutex mutex;
-		raw_spinlock_t spinlock;
-	};
-};
-
 struct group_device {
 	struct list_head list;
 	struct device *dev;
@@ -81420,328 +97767,6 @@
 	unsigned int type;
 };
 
-struct trace_event_raw_iommu_group_event {
-	struct trace_entry ent;
-	int gid;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_device_event {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_map {
-	struct trace_entry ent;
-	u64 iova;
-	u64 paddr;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_unmap {
-	struct trace_entry ent;
-	u64 iova;
-	size_t size;
-	size_t unmapped_size;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_error {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u64 iova;
-	int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iommu_group_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_iommu_device_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_map {};
-
-struct trace_event_data_offsets_unmap {};
-
-struct trace_event_data_offsets_iommu_error {
-	u32 device;
-	u32 driver;
-};
-
-typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
-
-typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
-
-typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
-
-typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
-
-typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
-
-struct iova {
-	struct rb_node node;
-	long unsigned int pfn_hi;
-	long unsigned int pfn_lo;
-};
-
-struct iova_magazine;
-
-struct iova_cpu_rcache;
-
-struct iova_rcache {
-	spinlock_t lock;
-	long unsigned int depot_size;
-	struct iova_magazine *depot[32];
-	struct iova_cpu_rcache *cpu_rcaches;
-};
-
-struct iova_domain;
-
-typedef void (*iova_flush_cb)(struct iova_domain *);
-
-typedef void (*iova_entry_dtor)(long unsigned int);
-
-struct iova_fq;
-
-struct iova_domain {
-	spinlock_t iova_rbtree_lock;
-	struct rb_root rbroot;
-	struct rb_node *cached_node;
-	struct rb_node *cached32_node;
-	long unsigned int granule;
-	long unsigned int start_pfn;
-	long unsigned int dma_32bit_pfn;
-	long unsigned int max32_alloc_size;
-	struct iova_fq *fq;
-	atomic64_t fq_flush_start_cnt;
-	atomic64_t fq_flush_finish_cnt;
-	struct iova anchor;
-	struct iova_rcache rcaches[6];
-	iova_flush_cb flush_cb;
-	iova_entry_dtor entry_dtor;
-	struct timer_list fq_timer;
-	atomic_t fq_timer_on;
-};
-
-struct iova_fq_entry {
-	long unsigned int iova_pfn;
-	long unsigned int pages;
-	long unsigned int data;
-	u64 counter;
-};
-
-struct iova_fq {
-	struct iova_fq_entry entries[256];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t lock;
-};
-
-struct iommu_dma_msi_page {
-	struct list_head list;
-	dma_addr_t iova;
-	phys_addr_t phys;
-};
-
-enum iommu_dma_cookie_type {
-	IOMMU_DMA_IOVA_COOKIE = 0,
-	IOMMU_DMA_MSI_COOKIE = 1,
-};
-
-struct iommu_dma_cookie {
-	enum iommu_dma_cookie_type type;
-	union {
-		struct iova_domain iovad;
-		dma_addr_t msi_iova;
-	};
-	struct list_head msi_page_list;
-	struct iommu_domain *fq_domain;
-};
-
-struct io_pgtable {
-	enum io_pgtable_fmt fmt;
-	void *cookie;
-	struct io_pgtable_cfg cfg;
-	struct io_pgtable_ops ops;
-};
-
-struct io_pgtable_init_fns {
-	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
-	void (*free)(struct io_pgtable *);
-};
-
-struct arm_lpae_io_pgtable {
-	struct io_pgtable iop;
-	int pgd_bits;
-	int start_level;
-	int bits_per_level;
-	void *pgd;
-};
-
-typedef u64 arm_lpae_iopte;
-
-struct iova_magazine {
-	long unsigned int size;
-	long unsigned int pfns[128];
-};
-
-struct iova_cpu_rcache {
-	spinlock_t lock;
-	struct iova_magazine *loaded;
-	struct iova_magazine *prev;
-};
-
-struct of_pci_iommu_alias_info {
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct rk_iommu_domain {
-	struct list_head iommus;
-	u32 *dt;
-	dma_addr_t dt_dma;
-	spinlock_t iommus_lock;
-	spinlock_t dt_lock;
-	struct iommu_domain domain;
-};
-
-struct rk_iommu {
-	struct device *dev;
-	void **bases;
-	int num_mmu;
-	int num_irq;
-	struct clk_bulk_data *clocks;
-	int num_clocks;
-	bool reset_disabled;
-	struct iommu_device iommu;
-	struct list_head node;
-	struct iommu_domain *domain;
-	struct iommu_group *group;
-};
-
-struct rk_iommudata {
-	struct device_link *link;
-	struct rk_iommu *iommu;
-};
-
-struct tegra_smmu_enable {
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct tegra_mc_timing {
-	long unsigned int rate;
-	u32 *emem_data;
-};
-
-struct tegra_mc_la {
-	unsigned int reg;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int def;
-};
-
-struct tegra_mc_client {
-	unsigned int id;
-	const char *name;
-	unsigned int swgroup;
-	unsigned int fifo_size;
-	struct tegra_smmu_enable smmu;
-	struct tegra_mc_la la;
-};
-
-struct tegra_smmu_swgroup {
-	const char *name;
-	unsigned int swgroup;
-	unsigned int reg;
-};
-
-struct tegra_smmu_group_soc {
-	const char *name;
-	const unsigned int *swgroups;
-	unsigned int num_swgroups;
-};
-
-struct tegra_smmu_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const struct tegra_smmu_swgroup *swgroups;
-	unsigned int num_swgroups;
-	const struct tegra_smmu_group_soc *groups;
-	unsigned int num_groups;
-	bool supports_round_robin_arbitration;
-	bool supports_request_limit;
-	unsigned int num_tlb_lines;
-	unsigned int num_asids;
-};
-
-struct tegra_mc_reset {
-	const char *name;
-	long unsigned int id;
-	unsigned int control;
-	unsigned int status;
-	unsigned int reset;
-	unsigned int bit;
-};
-
-struct tegra_mc;
-
-struct tegra_mc_reset_ops {
-	int (*hotreset_assert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*hotreset_deassert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*block_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	bool (*dma_idling)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*unblock_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*reset_status)(struct tegra_mc *, const struct tegra_mc_reset *);
-};
-
-struct gart_device;
-
-struct tegra_smmu;
-
-struct tegra_mc_soc;
-
-struct tegra_mc {
-	struct device *dev;
-	struct tegra_smmu *smmu;
-	struct gart_device *gart;
-	void *regs;
-	struct clk *clk;
-	int irq;
-	const struct tegra_mc_soc *soc;
-	long unsigned int tick;
-	struct tegra_mc_timing *timings;
-	unsigned int num_timings;
-	struct reset_controller_dev reset;
-	spinlock_t lock;
-};
-
-struct tegra_mc_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const long unsigned int *emem_regs;
-	unsigned int num_emem_regs;
-	unsigned int num_address_bits;
-	unsigned int atom_size;
-	u8 client_id_mask;
-	const struct tegra_smmu_soc *smmu;
-	u32 intmask;
-	const struct tegra_mc_reset_ops *reset_ops;
-	const struct tegra_mc_reset *resets;
-	unsigned int num_resets;
-};
-
 struct tegra_smmu {
 	void *regs;
 	struct device *dev;
@@ -81778,308 +97803,106 @@
 	u32 attr;
 };
 
-struct mipi_dsi_msg {
-	u8 channel;
-	u8 type;
-	u16 flags;
-	size_t tx_len;
-	const void *tx_buf;
-	size_t rx_len;
-	void *rx_buf;
+struct drm_gem_close {
+	__u32 handle;
+	__u32 pad;
 };
 
-struct mipi_dsi_packet {
-	size_t size;
-	u8 header[4];
-	size_t payload_length;
-	const u8 *payload;
+struct drm_gem_flink {
+	__u32 handle;
+	__u32 name;
 };
 
-struct mipi_dsi_host;
-
-struct mipi_dsi_device;
-
-struct mipi_dsi_host_ops {
-	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
+struct drm_gem_open {
+	__u32 name;
+	__u32 handle;
+	__u64 size;
 };
 
-struct mipi_dsi_host {
-	struct device *dev;
-	const struct mipi_dsi_host_ops *ops;
-	struct list_head list;
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
 };
 
-enum mipi_dsi_pixel_format {
-	MIPI_DSI_FMT_RGB888 = 0,
-	MIPI_DSI_FMT_RGB666 = 1,
-	MIPI_DSI_FMT_RGB666_PACKED = 2,
-	MIPI_DSI_FMT_RGB565 = 3,
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
 };
 
-struct mipi_dsi_device {
-	struct mipi_dsi_host *host;
-	struct device dev;
-	char name[20];
-	unsigned int channel;
-	unsigned int lanes;
-	enum mipi_dsi_pixel_format format;
-	long unsigned int mode_flags;
-	long unsigned int hs_rate;
-	long unsigned int lp_rate;
+struct drm_writeback_job {
+	struct drm_writeback_connector *connector;
+	bool prepared;
+	struct work_struct cleanup_work;
+	struct list_head list_entry;
+	struct drm_framebuffer *fb;
+	struct dma_fence *out_fence;
+	void *priv;
 };
 
-struct mipi_dsi_device_info {
-	char type[20];
-	u32 channel;
-	struct device_node *node;
+struct drm_writeback_connector {
+	struct drm_connector base;
+	struct drm_encoder encoder;
+	struct drm_property_blob *pixel_formats_blob_ptr;
+	spinlock_t job_lock;
+	struct list_head job_queue;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
 };
 
-enum mipi_dsi_dcs_tear_mode {
-	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
-	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
+struct drm_mode_crtc_lut {
+	__u32 crtc_id;
+	__u32 gamma_size;
+	__u64 red;
+	__u64 green;
+	__u64 blue;
 };
 
-struct mipi_dsi_driver {
-	struct device_driver driver;
-	int (*probe)(struct mipi_dsi_device *);
-	int (*remove)(struct mipi_dsi_device *);
-	void (*shutdown)(struct mipi_dsi_device *);
+struct drm_color_lut {
+	__u16 red;
+	__u16 green;
+	__u16 blue;
+	__u16 reserved;
 };
 
-struct drm_dsc_picture_parameter_set {
-	u8 dsc_version;
-	u8 pps_identifier;
-	u8 pps_reserved;
-	u8 pps_3;
-	u8 pps_4;
-	u8 bits_per_pixel_low;
-	__be16 pic_height;
-	__be16 pic_width;
-	__be16 slice_height;
-	__be16 slice_width;
-	__be16 chunk_size;
-	u8 initial_xmit_delay_high;
-	u8 initial_xmit_delay_low;
-	__be16 initial_dec_delay;
-	u8 pps20_reserved;
-	u8 initial_scale_value;
-	__be16 scale_increment_interval;
-	u8 scale_decrement_interval_high;
-	u8 scale_decrement_interval_low;
-	u8 pps26_reserved;
-	u8 first_line_bpg_offset;
-	__be16 nfl_bpg_offset;
-	__be16 slice_bpg_offset;
-	__be16 initial_offset;
-	__be16 final_offset;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	__be16 rc_model_size;
-	u8 rc_edge_factor;
-	u8 rc_quant_incr_limit0;
-	u8 rc_quant_incr_limit1;
-	u8 rc_tgt_offset;
-	u8 rc_buf_thresh[14];
-	__be16 rc_range_parameters[15];
-	u8 native_422_420;
-	u8 second_line_bpg_offset;
-	__be16 nsl_bpg_offset;
-	__be16 second_line_offset_adj;
-	u32 pps_long_94_reserved;
-	u32 pps_long_98_reserved;
-	u32 pps_long_102_reserved;
-	u32 pps_long_106_reserved;
-	u32 pps_long_110_reserved;
-	u32 pps_long_114_reserved;
-	u32 pps_long_118_reserved;
-	u32 pps_long_122_reserved;
-	__be16 pps_short_126_reserved;
-} __attribute__((packed));
-
-enum {
-	MIPI_DSI_V_SYNC_START = 1,
-	MIPI_DSI_V_SYNC_END = 17,
-	MIPI_DSI_H_SYNC_START = 33,
-	MIPI_DSI_H_SYNC_END = 49,
-	MIPI_DSI_COMPRESSION_MODE = 7,
-	MIPI_DSI_END_OF_TRANSMISSION = 8,
-	MIPI_DSI_COLOR_MODE_OFF = 2,
-	MIPI_DSI_COLOR_MODE_ON = 18,
-	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
-	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
-	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
-	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
-	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
-	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
-	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
-	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
-	MIPI_DSI_DCS_SHORT_WRITE = 5,
-	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
-	MIPI_DSI_DCS_READ = 6,
-	MIPI_DSI_EXECUTE_QUEUE = 22,
-	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
-	MIPI_DSI_NULL_PACKET = 9,
-	MIPI_DSI_BLANKING_PACKET = 25,
-	MIPI_DSI_GENERIC_LONG_WRITE = 41,
-	MIPI_DSI_DCS_LONG_WRITE = 57,
-	MIPI_DSI_PICTURE_PARAMETER_SET = 10,
-	MIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,
-	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
-	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
-	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
-	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
-	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
-	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
-	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
+enum drm_color_lut_tests {
+	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
+	DRM_COLOR_LUT_NON_DECREASING = 2,
 };
 
-enum {
-	MIPI_DCS_NOP = 0,
-	MIPI_DCS_SOFT_RESET = 1,
-	MIPI_DCS_GET_COMPRESSION_MODE = 3,
-	MIPI_DCS_GET_DISPLAY_ID = 4,
-	MIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,
-	MIPI_DCS_GET_RED_CHANNEL = 6,
-	MIPI_DCS_GET_GREEN_CHANNEL = 7,
-	MIPI_DCS_GET_BLUE_CHANNEL = 8,
-	MIPI_DCS_GET_DISPLAY_STATUS = 9,
-	MIPI_DCS_GET_POWER_MODE = 10,
-	MIPI_DCS_GET_ADDRESS_MODE = 11,
-	MIPI_DCS_GET_PIXEL_FORMAT = 12,
-	MIPI_DCS_GET_DISPLAY_MODE = 13,
-	MIPI_DCS_GET_SIGNAL_MODE = 14,
-	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
-	MIPI_DCS_ENTER_SLEEP_MODE = 16,
-	MIPI_DCS_EXIT_SLEEP_MODE = 17,
-	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
-	MIPI_DCS_ENTER_NORMAL_MODE = 19,
-	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,
-	MIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,
-	MIPI_DCS_EXIT_INVERT_MODE = 32,
-	MIPI_DCS_ENTER_INVERT_MODE = 33,
-	MIPI_DCS_SET_GAMMA_CURVE = 38,
-	MIPI_DCS_SET_DISPLAY_OFF = 40,
-	MIPI_DCS_SET_DISPLAY_ON = 41,
-	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
-	MIPI_DCS_SET_PAGE_ADDRESS = 43,
-	MIPI_DCS_WRITE_MEMORY_START = 44,
-	MIPI_DCS_WRITE_LUT = 45,
-	MIPI_DCS_READ_MEMORY_START = 46,
-	MIPI_DCS_SET_PARTIAL_ROWS = 48,
-	MIPI_DCS_SET_PARTIAL_COLUMNS = 49,
-	MIPI_DCS_SET_SCROLL_AREA = 51,
-	MIPI_DCS_SET_TEAR_OFF = 52,
-	MIPI_DCS_SET_TEAR_ON = 53,
-	MIPI_DCS_SET_ADDRESS_MODE = 54,
-	MIPI_DCS_SET_SCROLL_START = 55,
-	MIPI_DCS_EXIT_IDLE_MODE = 56,
-	MIPI_DCS_ENTER_IDLE_MODE = 57,
-	MIPI_DCS_SET_PIXEL_FORMAT = 58,
-	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
-	MIPI_DCS_SET_3D_CONTROL = 61,
-	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
-	MIPI_DCS_GET_3D_CONTROL = 63,
-	MIPI_DCS_SET_VSYNC_TIMING = 64,
-	MIPI_DCS_SET_TEAR_SCANLINE = 68,
-	MIPI_DCS_GET_SCANLINE = 69,
-	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
-	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
-	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
-	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
-	MIPI_DCS_WRITE_POWER_SAVE = 85,
-	MIPI_DCS_GET_POWER_SAVE = 86,
-	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
-	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
-	MIPI_DCS_READ_DDB_START = 161,
-	MIPI_DCS_READ_PPS_START = 162,
-	MIPI_DCS_READ_DDB_CONTINUE = 168,
-	MIPI_DCS_READ_PPS_CONTINUE = 169,
-};
+struct drm_flip_work;
 
-struct drm_dmi_panel_orientation_data {
-	int width;
-	int height;
-	const char * const *bios_dates;
-	int orientation;
-};
+typedef void (*drm_flip_func_t)(struct drm_flip_work *, void *);
 
-struct vga_device {
-	struct list_head list;
-	struct pci_dev *pdev;
-	unsigned int decodes;
-	unsigned int owns;
-	unsigned int locks;
-	unsigned int io_lock_cnt;
-	unsigned int mem_lock_cnt;
-	unsigned int io_norm_cnt;
-	unsigned int mem_norm_cnt;
-	bool bridge_has_one_vga;
-	void *cookie;
-	void (*irq_set_state)(void *, bool);
-	unsigned int (*set_vga_decode)(void *, bool);
-};
-
-struct vga_arb_user_card {
-	struct pci_dev *pdev;
-	unsigned int mem_cnt;
-	unsigned int io_cnt;
-};
-
-struct vga_arb_private {
-	struct list_head list;
-	struct pci_dev *target;
-	struct vga_arb_user_card cards[16];
+struct drm_flip_work {
+	const char *name;
+	drm_flip_func_t func;
+	struct work_struct worker;
+	struct list_head queued;
+	struct list_head commited;
 	spinlock_t lock;
 };
 
-struct cb_id {
-	__u32 idx;
-	__u32 val;
+struct drm_flip_task {
+	struct list_head node;
+	void *data;
 };
 
-struct cn_msg {
-	struct cb_id id;
-	__u32 seq;
-	__u32 ack;
-	__u16 len;
-	__u16 flags;
-	__u8 data[0];
-};
-
-struct cn_queue_dev {
-	atomic_t refcnt;
-	unsigned char name[32];
-	struct list_head queue_list;
-	spinlock_t queue_lock;
-	struct sock *nls;
-};
-
-struct cn_callback_id {
-	unsigned char name[32];
-	struct cb_id id;
-};
-
-struct cn_callback_entry {
-	struct list_head callback_entry;
-	refcount_t refcnt;
-	struct cn_queue_dev *pdev;
-	struct cn_callback_id id;
-	void (*callback)(struct cn_msg *, struct netlink_skb_parms *);
-	u32 seq;
-	u32 group;
-};
-
-struct cn_dev {
-	struct cb_id id;
-	u32 seq;
-	u32 groups;
-	struct sock *nls;
-	struct cn_queue_dev *cbdev;
+struct drm_afbc_framebuffer {
+	struct drm_framebuffer base;
+	u32 block_width;
+	u32 block_height;
+	u32 aligned_width;
+	u32 aligned_height;
+	u32 offset;
+	u32 afbc_size;
 };
 
 enum proc_cn_mcast_op {
@@ -82087,6 +97910,19 @@
 	PROC_CN_MCAST_IGNORE = 2,
 };
 
+enum what {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
 struct fork_proc_event {
 	__kernel_pid_t parent_pid;
 	__kernel_pid_t parent_tgid;
@@ -82170,628 +98006,6 @@
 	__u32 count;
 };
 
-struct nvm_ioctl_info_tgt {
-	__u32 version[3];
-	__u32 reserved;
-	char tgtname[48];
-};
-
-struct nvm_ioctl_info {
-	__u32 version[3];
-	__u16 tgtsize;
-	__u16 reserved16;
-	__u32 reserved[12];
-	struct nvm_ioctl_info_tgt tgts[63];
-};
-
-struct nvm_ioctl_device_info {
-	char devname[32];
-	char bmname[48];
-	__u32 bmversion[3];
-	__u32 flags;
-	__u32 reserved[8];
-};
-
-struct nvm_ioctl_get_devices {
-	__u32 nr_devices;
-	__u32 reserved[31];
-	struct nvm_ioctl_device_info info[31];
-};
-
-struct nvm_ioctl_create_simple {
-	__u32 lun_begin;
-	__u32 lun_end;
-};
-
-struct nvm_ioctl_create_extended {
-	__u16 lun_begin;
-	__u16 lun_end;
-	__u16 op;
-	__u16 rsv;
-};
-
-enum {
-	NVM_CONFIG_TYPE_SIMPLE = 0,
-	NVM_CONFIG_TYPE_EXTENDED = 1,
-};
-
-struct nvm_ioctl_create_conf {
-	__u32 type;
-	union {
-		struct nvm_ioctl_create_simple s;
-		struct nvm_ioctl_create_extended e;
-	};
-};
-
-enum {
-	NVM_TARGET_FACTORY = 1,
-};
-
-struct nvm_ioctl_create {
-	char dev[32];
-	char tgttype[48];
-	char tgtname[32];
-	__u32 flags;
-	struct nvm_ioctl_create_conf conf;
-};
-
-struct nvm_ioctl_remove {
-	char tgtname[32];
-	__u32 flags;
-};
-
-struct nvm_ioctl_dev_init {
-	char dev[32];
-	char mmtype[8];
-	__u32 flags;
-};
-
-enum {
-	NVM_FACTORY_ERASE_ONLY_USER = 1,
-	NVM_FACTORY_RESET_HOST_BLKS = 2,
-	NVM_FACTORY_RESET_GRWN_BBLKS = 4,
-	NVM_FACTORY_NR_BITS = 8,
-};
-
-struct nvm_ioctl_dev_factory {
-	char dev[32];
-	__u32 flags;
-};
-
-enum {
-	NVM_INFO_CMD = 32,
-	NVM_GET_DEVICES_CMD = 33,
-	NVM_DEV_CREATE_CMD = 34,
-	NVM_DEV_REMOVE_CMD = 35,
-	NVM_DEV_INIT_CMD = 36,
-	NVM_DEV_FACTORY_CMD = 37,
-	NVM_DEV_VIO_ADMIN_CMD = 65,
-	NVM_DEV_VIO_CMD = 66,
-	NVM_DEV_VIO_USER_CMD = 67,
-};
-
-enum {
-	NVM_OCSSD_SPEC_12 = 12,
-	NVM_OCSSD_SPEC_20 = 20,
-};
-
-struct ppa_addr {
-	union {
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 reserved: 32;
-		} a;
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 pg: 16;
-			u64 pl: 4;
-			u64 sec: 4;
-			u64 reserved: 8;
-		} g;
-		struct {
-			u64 grp: 8;
-			u64 pu: 8;
-			u64 chk: 16;
-			u64 sec: 24;
-			u64 reserved: 8;
-		} m;
-		struct {
-			u64 line: 63;
-			u64 is_cached: 1;
-		} c;
-		u64 ppa;
-	};
-};
-
-struct nvm_dev;
-
-typedef int nvm_id_fn(struct nvm_dev *);
-
-struct nvm_addrf {
-	u8 ch_len;
-	u8 lun_len;
-	u8 chk_len;
-	u8 sec_len;
-	u8 rsv_len[2];
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 chk_offset;
-	u8 sec_offset;
-	u8 rsv_off[2];
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 chk_mask;
-	u64 sec_mask;
-	u64 rsv_mask[2];
-};
-
-struct nvm_geo {
-	u8 major_ver_id;
-	u8 minor_ver_id;
-	u8 version;
-	int num_ch;
-	int num_lun;
-	int all_luns;
-	int all_chunks;
-	int op;
-	sector_t total_secs;
-	u32 num_chk;
-	u32 clba;
-	u16 csecs;
-	u16 sos;
-	bool ext;
-	u32 mdts;
-	u32 ws_min;
-	u32 ws_opt;
-	u32 mw_cunits;
-	u32 maxoc;
-	u32 maxocpu;
-	u32 mccap;
-	u32 trdt;
-	u32 trdm;
-	u32 tprt;
-	u32 tprm;
-	u32 tbet;
-	u32 tbem;
-	struct nvm_addrf addrf;
-	u8 vmnt;
-	u32 cap;
-	u32 dom;
-	u8 mtype;
-	u8 fmtype;
-	u16 cpar;
-	u32 mpos;
-	u8 num_pln;
-	u8 pln_mode;
-	u16 num_pg;
-	u16 fpg_sz;
-};
-
-struct nvm_dev_ops;
-
-struct nvm_dev {
-	struct nvm_dev_ops *ops;
-	struct list_head devices;
-	struct nvm_geo geo;
-	long unsigned int *lun_map;
-	void *dma_pool;
-	struct request_queue *q;
-	char name[32];
-	void *private_data;
-	struct kref ref;
-	void *rmap;
-	struct mutex mlock;
-	spinlock_t lock;
-	struct list_head area_list;
-	struct list_head targets;
-};
-
-typedef int nvm_op_bb_tbl_fn(struct nvm_dev *, struct ppa_addr, u8 *);
-
-typedef int nvm_op_set_bb_fn(struct nvm_dev *, struct ppa_addr *, int, int);
-
-struct nvm_chk_meta;
-
-typedef int nvm_get_chk_meta_fn(struct nvm_dev *, sector_t, int, struct nvm_chk_meta *);
-
-struct nvm_chk_meta {
-	u8 state;
-	u8 type;
-	u8 wi;
-	u8 rsvd[5];
-	u64 slba;
-	u64 cnlb;
-	u64 wp;
-};
-
-struct nvm_rq;
-
-typedef int nvm_submit_io_fn(struct nvm_dev *, struct nvm_rq *, void *);
-
-typedef void nvm_end_io_fn(struct nvm_rq *);
-
-struct nvm_tgt_dev;
-
-struct nvm_rq {
-	struct nvm_tgt_dev *dev;
-	struct bio *bio;
-	union {
-		struct ppa_addr ppa_addr;
-		dma_addr_t dma_ppa_list;
-	};
-	struct ppa_addr *ppa_list;
-	void *meta_list;
-	dma_addr_t dma_meta_list;
-	nvm_end_io_fn *end_io;
-	uint8_t opcode;
-	uint16_t nr_ppas;
-	uint16_t flags;
-	u64 ppa_status;
-	int error;
-	int is_seq;
-	void *private;
-};
-
-typedef void *nvm_create_dma_pool_fn(struct nvm_dev *, char *, int);
-
-typedef void nvm_destroy_dma_pool_fn(void *);
-
-typedef void *nvm_dev_dma_alloc_fn(struct nvm_dev *, void *, gfp_t, dma_addr_t *);
-
-typedef void nvm_dev_dma_free_fn(void *, void *, dma_addr_t);
-
-struct nvm_dev_ops {
-	nvm_id_fn *identity;
-	nvm_op_bb_tbl_fn *get_bb_tbl;
-	nvm_op_set_bb_fn *set_bb_tbl;
-	nvm_get_chk_meta_fn *get_chk_meta;
-	nvm_submit_io_fn *submit_io;
-	nvm_create_dma_pool_fn *create_dma_pool;
-	nvm_destroy_dma_pool_fn *destroy_dma_pool;
-	nvm_dev_dma_alloc_fn *dev_dma_alloc;
-	nvm_dev_dma_free_fn *dev_dma_free;
-};
-
-enum {
-	NVM_RSP_L2P = 1,
-	NVM_RSP_ECC = 2,
-	NVM_ADDRMODE_LINEAR = 0,
-	NVM_ADDRMODE_CHANNEL = 1,
-	NVM_PLANE_SINGLE = 1,
-	NVM_PLANE_DOUBLE = 2,
-	NVM_PLANE_QUAD = 4,
-	NVM_RSP_SUCCESS = 0,
-	NVM_RSP_NOT_CHANGEABLE = 1,
-	NVM_RSP_ERR_FAILWRITE = 16639,
-	NVM_RSP_ERR_EMPTYPAGE = 17151,
-	NVM_RSP_ERR_FAILECC = 17025,
-	NVM_RSP_ERR_FAILCRC = 16388,
-	NVM_RSP_WARN_HIGHECC = 18176,
-	NVM_OP_PWRITE = 145,
-	NVM_OP_PREAD = 146,
-	NVM_OP_ERASE = 144,
-	NVM_IO_SNGL_ACCESS = 0,
-	NVM_IO_DUAL_ACCESS = 1,
-	NVM_IO_QUAD_ACCESS = 2,
-	NVM_IO_SUSPEND = 128,
-	NVM_IO_SLC_MODE = 256,
-	NVM_IO_SCRAMBLE_ENABLE = 512,
-	NVM_BLK_T_FREE = 0,
-	NVM_BLK_T_BAD = 1,
-	NVM_BLK_T_GRWN_BAD = 2,
-	NVM_BLK_T_DEV = 4,
-	NVM_BLK_T_HOST = 8,
-	NVM_ID_CAP_SLC = 1,
-	NVM_ID_CAP_CMD_SUSPEND = 2,
-	NVM_ID_CAP_SCRAMBLE = 4,
-	NVM_ID_CAP_ENCRYPT = 8,
-	NVM_ID_FMTYPE_SLC = 0,
-	NVM_ID_FMTYPE_MLC = 1,
-	NVM_ID_DCAP_BBLKMGMT = 1,
-	NVM_UD_DCAP_ECC = 2,
-};
-
-struct nvm_addrf_12 {
-	u8 ch_len;
-	u8 lun_len;
-	u8 blk_len;
-	u8 pg_len;
-	u8 pln_len;
-	u8 sec_len;
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 blk_offset;
-	u8 pg_offset;
-	u8 pln_offset;
-	u8 sec_offset;
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 blk_mask;
-	u64 pg_mask;
-	u64 pln_mask;
-	u64 sec_mask;
-};
-
-enum {
-	NVM_CHK_ST_FREE = 1,
-	NVM_CHK_ST_CLOSED = 2,
-	NVM_CHK_ST_OPEN = 4,
-	NVM_CHK_ST_OFFLINE = 8,
-	NVM_CHK_TP_W_SEQ = 1,
-	NVM_CHK_TP_W_RAN = 2,
-	NVM_CHK_TP_SZ_SPEC = 16,
-};
-
-struct nvm_tgt_type;
-
-struct nvm_target {
-	struct list_head list;
-	struct nvm_tgt_dev *dev;
-	struct nvm_tgt_type *type;
-	struct gendisk *disk;
-};
-
-struct nvm_tgt_dev {
-	struct nvm_geo geo;
-	struct ppa_addr *luns;
-	struct request_queue *q;
-	struct nvm_dev *parent;
-	void *map;
-};
-
-typedef sector_t nvm_tgt_capacity_fn(void *);
-
-typedef void *nvm_tgt_init_fn(struct nvm_tgt_dev *, struct gendisk *, int);
-
-typedef void nvm_tgt_exit_fn(void *, bool);
-
-typedef int nvm_tgt_sysfs_init_fn(struct gendisk *);
-
-typedef void nvm_tgt_sysfs_exit_fn(struct gendisk *);
-
-struct nvm_tgt_type {
-	const char *name;
-	unsigned int version[3];
-	int flags;
-	const struct block_device_operations *bops;
-	nvm_tgt_capacity_fn *capacity;
-	nvm_tgt_init_fn *init;
-	nvm_tgt_exit_fn *exit;
-	nvm_tgt_sysfs_init_fn *sysfs_init;
-	nvm_tgt_sysfs_exit_fn *sysfs_exit;
-	struct list_head list;
-	struct module *owner;
-};
-
-enum {
-	NVM_TGT_F_DEV_L2P = 0,
-	NVM_TGT_F_HOST_L2P = 1,
-};
-
-struct nvm_ch_map {
-	int ch_off;
-	int num_lun;
-	int *lun_offs;
-};
-
-struct nvm_dev_map {
-	struct nvm_ch_map *chnls;
-	int num_ch;
-};
-
-struct component_ops {
-	int (*bind)(struct device *, struct device *, void *);
-	void (*unbind)(struct device *, struct device *, void *);
-};
-
-struct component_master_ops {
-	int (*bind)(struct device *);
-	void (*unbind)(struct device *);
-};
-
-struct component;
-
-struct component_match_array {
-	void *data;
-	int (*compare)(struct device *, void *);
-	int (*compare_typed)(struct device *, int, void *);
-	void (*release)(struct device *, void *);
-	struct component *component;
-	bool duplicate;
-};
-
-struct master;
-
-struct component {
-	struct list_head node;
-	struct master *master;
-	bool bound;
-	const struct component_ops *ops;
-	int subcomponent;
-	struct device *dev;
-};
-
-struct component_match {
-	size_t alloc;
-	size_t num;
-	struct component_match_array *compare;
-};
-
-struct master {
-	struct list_head node;
-	bool bound;
-	const struct component_master_ops *ops;
-	struct device *dev;
-	struct component_match *match;
-	struct dentry *dentry;
-};
-
-struct wake_irq {
-	struct device *dev;
-	unsigned int status;
-	int irq;
-	const char *name;
-};
-
-enum dpm_order {
-	DPM_ORDER_NONE = 0,
-	DPM_ORDER_DEV_AFTER_PARENT = 1,
-	DPM_ORDER_PARENT_BEFORE_DEV = 2,
-	DPM_ORDER_DEV_LAST = 3,
-};
-
-struct subsys_private {
-	struct kset subsys;
-	struct kset *devices_kset;
-	struct list_head interfaces;
-	struct mutex mutex;
-	struct kset *drivers_kset;
-	struct klist klist_devices;
-	struct klist klist_drivers;
-	struct blocking_notifier_head bus_notifier;
-	unsigned int drivers_autoprobe: 1;
-	struct bus_type *bus;
-	struct kset glue_dirs;
-	struct class *class;
-};
-
-struct driver_private {
-	struct kobject kobj;
-	struct klist klist_devices;
-	struct klist_node knode_bus;
-	struct module_kobject *mkobj;
-	struct device_driver *driver;
-};
-
-struct device_private {
-	struct klist klist_children;
-	struct klist_node knode_parent;
-	struct klist_node knode_driver;
-	struct klist_node knode_bus;
-	struct klist_node knode_class;
-	struct list_head deferred_probe;
-	struct device_driver *async_driver;
-	char *deferred_probe_reason;
-	struct device *device;
-	u8 dead: 1;
-};
-
-union device_attr_group_devres {
-	const struct attribute_group *group;
-	const struct attribute_group **groups;
-};
-
-struct class_dir {
-	struct kobject kobj;
-	struct class *class;
-};
-
-struct root_device {
-	struct device dev;
-	struct module *owner;
-};
-
-struct subsys_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-struct subsys_interface {
-	const char *name;
-	struct bus_type *subsys;
-	struct list_head node;
-	int (*add_dev)(struct device *, struct subsys_interface *);
-	void (*remove_dev)(struct device *, struct subsys_interface *);
-};
-
-struct device_attach_data {
-	struct device *dev;
-	bool check_async;
-	bool want_async;
-	bool have_async;
-};
-
-struct class_attribute_string {
-	struct class_attribute attr;
-	char *str;
-};
-
-struct class_compat {
-	struct kobject *kobj;
-};
-
-struct platform_object {
-	struct platform_device pdev;
-	char name[0];
-};
-
-struct cpu_attr {
-	struct device_attribute attr;
-	const struct cpumask * const map;
-};
-
-typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
-
-struct probe {
-	struct probe *next;
-	dev_t dev;
-	long unsigned int range;
-	struct module *owner;
-	kobj_probe_t *get;
-	int (*lock)(dev_t, void *);
-	void *data;
-};
-
-struct kobj_map___2 {
-	struct probe *probes[255];
-	struct mutex *lock;
-};
-
-typedef int (*dr_match_t)(struct device *, void *, void *);
-
-struct devres_node {
-	struct list_head entry;
-	dr_release_t release;
-};
-
-struct devres___2 {
-	struct devres_node node;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u8 data[0];
-};
-
-struct devres_group {
-	struct devres_node node[2];
-	void *id;
-	int color;
-};
-
-struct action_devres {
-	void *data;
-	void (*action)(void *);
-};
-
-struct pages_devres {
-	long unsigned int addr;
-	unsigned int order;
-};
-
 struct attribute_container {
 	struct list_head node;
 	struct klist containers;
@@ -82808,400 +98022,6 @@
 	struct device classdev;
 };
 
-struct transport_container;
-
-struct transport_class {
-	struct class class;
-	int (*setup)(struct transport_container *, struct device *, struct device *);
-	int (*configure)(struct transport_container *, struct device *, struct device *);
-	int (*remove)(struct transport_container *, struct device *, struct device *);
-};
-
-struct transport_container {
-	struct attribute_container ac;
-	const struct attribute_group *statistics;
-};
-
-struct anon_transport_class {
-	struct transport_class tclass;
-	struct attribute_container container;
-};
-
-typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
-
-struct mii_bus;
-
-struct mdio_device {
-	struct device dev;
-	struct mii_bus *bus;
-	char modalias[32];
-	int (*bus_match)(struct device *, struct device_driver *);
-	void (*device_free)(struct mdio_device *);
-	void (*device_remove)(struct mdio_device *);
-	int addr;
-	int flags;
-	struct gpio_desc *reset_gpio;
-	struct reset_control *reset_ctrl;
-	unsigned int reset_assert_delay;
-	unsigned int reset_deassert_delay;
-};
-
-struct phy_c45_device_ids {
-	u32 devices_in_package;
-	u32 mmds_present;
-	u32 device_ids[32];
-};
-
-enum phy_state {
-	PHY_DOWN = 0,
-	PHY_READY = 1,
-	PHY_HALTED = 2,
-	PHY_UP = 3,
-	PHY_RUNNING = 4,
-	PHY_NOLINK = 5,
-	PHY_CABLETEST = 6,
-};
-
-typedef enum {
-	PHY_INTERFACE_MODE_NA = 0,
-	PHY_INTERFACE_MODE_INTERNAL = 1,
-	PHY_INTERFACE_MODE_MII = 2,
-	PHY_INTERFACE_MODE_GMII = 3,
-	PHY_INTERFACE_MODE_SGMII = 4,
-	PHY_INTERFACE_MODE_TBI = 5,
-	PHY_INTERFACE_MODE_REVMII = 6,
-	PHY_INTERFACE_MODE_RMII = 7,
-	PHY_INTERFACE_MODE_RGMII = 8,
-	PHY_INTERFACE_MODE_RGMII_ID = 9,
-	PHY_INTERFACE_MODE_RGMII_RXID = 10,
-	PHY_INTERFACE_MODE_RGMII_TXID = 11,
-	PHY_INTERFACE_MODE_RTBI = 12,
-	PHY_INTERFACE_MODE_SMII = 13,
-	PHY_INTERFACE_MODE_XGMII = 14,
-	PHY_INTERFACE_MODE_XLGMII = 15,
-	PHY_INTERFACE_MODE_MOCA = 16,
-	PHY_INTERFACE_MODE_QSGMII = 17,
-	PHY_INTERFACE_MODE_TRGMII = 18,
-	PHY_INTERFACE_MODE_1000BASEX = 19,
-	PHY_INTERFACE_MODE_2500BASEX = 20,
-	PHY_INTERFACE_MODE_RXAUI = 21,
-	PHY_INTERFACE_MODE_XAUI = 22,
-	PHY_INTERFACE_MODE_10GBASER = 23,
-	PHY_INTERFACE_MODE_USXGMII = 24,
-	PHY_INTERFACE_MODE_10GKR = 25,
-	PHY_INTERFACE_MODE_MAX = 26,
-} phy_interface_t;
-
-struct phylink;
-
-struct phy_driver;
-
-struct phy_package_shared;
-
-struct mii_timestamper;
-
-struct phy_device {
-	struct mdio_device mdio;
-	struct phy_driver *drv;
-	u32 phy_id;
-	struct phy_c45_device_ids c45_ids;
-	unsigned int is_c45: 1;
-	unsigned int is_internal: 1;
-	unsigned int is_pseudo_fixed_link: 1;
-	unsigned int is_gigabit_capable: 1;
-	unsigned int has_fixups: 1;
-	unsigned int suspended: 1;
-	unsigned int suspended_by_mdio_bus: 1;
-	unsigned int sysfs_links: 1;
-	unsigned int loopback_enabled: 1;
-	unsigned int downshifted_rate: 1;
-	unsigned int autoneg: 1;
-	unsigned int link: 1;
-	unsigned int autoneg_complete: 1;
-	unsigned int interrupts: 1;
-	enum phy_state state;
-	u32 dev_flags;
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-	u8 master_slave_get;
-	u8 master_slave_set;
-	u8 master_slave_state;
-	long unsigned int supported[2];
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	long unsigned int adv_old[2];
-	u32 eee_broken_modes;
-	int irq;
-	void *priv;
-	struct phy_package_shared *shared;
-	struct sk_buff *skb;
-	void *ehdr;
-	struct nlattr *nest;
-	struct delayed_work state_queue;
-	struct mutex lock;
-	bool sfp_bus_attached;
-	struct sfp_bus *sfp_bus;
-	struct phylink *phylink;
-	struct net_device *attached_dev;
-	struct mii_timestamper *mii_ts;
-	u8 mdix;
-	u8 mdix_ctrl;
-	void (*phy_link_change)(struct phy_device *, bool);
-	void (*adjust_link)(struct net_device *);
-	const struct macsec_ops *macsec_ops;
-};
-
-struct phy_tdr_config {
-	u32 first;
-	u32 last;
-	u32 step;
-	s8 pair;
-};
-
-struct mdio_bus_stats {
-	u64_stats_t transfers;
-	u64_stats_t errors;
-	u64_stats_t writes;
-	u64_stats_t reads;
-	struct u64_stats_sync syncp;
-};
-
-struct mii_bus {
-	struct module *owner;
-	const char *name;
-	char id[61];
-	void *priv;
-	int (*read)(struct mii_bus *, int, int);
-	int (*write)(struct mii_bus *, int, int, u16);
-	int (*reset)(struct mii_bus *);
-	struct mdio_bus_stats stats[32];
-	struct mutex mdio_lock;
-	struct device *parent;
-	enum {
-		MDIOBUS_ALLOCATED = 1,
-		MDIOBUS_REGISTERED = 2,
-		MDIOBUS_UNREGISTERED = 3,
-		MDIOBUS_RELEASED = 4,
-	} state;
-	struct device dev;
-	struct mdio_device *mdio_map[32];
-	u32 phy_mask;
-	u32 phy_ignore_ta_mask;
-	int irq[32];
-	int reset_delay_us;
-	int reset_post_delay_us;
-	struct gpio_desc *reset_gpiod;
-	enum {
-		MDIOBUS_NO_CAP = 0,
-		MDIOBUS_C22 = 1,
-		MDIOBUS_C45 = 2,
-		MDIOBUS_C22_C45 = 3,
-	} probe_capabilities;
-	struct mutex shared_lock;
-	struct phy_package_shared *shared[32];
-};
-
-struct mdio_driver_common {
-	struct device_driver driver;
-	int flags;
-};
-
-struct mii_timestamper {
-	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
-	void (*link_state)(struct mii_timestamper *, struct phy_device *);
-	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
-	struct device *device;
-};
-
-struct phy_package_shared {
-	int addr;
-	refcount_t refcnt;
-	long unsigned int flags;
-	size_t priv_size;
-	void *priv;
-};
-
-struct phy_driver {
-	struct mdio_driver_common mdiodrv;
-	u32 phy_id;
-	char *name;
-	u32 phy_id_mask;
-	const long unsigned int * const features;
-	u32 flags;
-	const void *driver_data;
-	int (*soft_reset)(struct phy_device *);
-	int (*config_init)(struct phy_device *);
-	int (*probe)(struct phy_device *);
-	int (*get_features)(struct phy_device *);
-	int (*suspend)(struct phy_device *);
-	int (*resume)(struct phy_device *);
-	int (*config_aneg)(struct phy_device *);
-	int (*aneg_done)(struct phy_device *);
-	int (*read_status)(struct phy_device *);
-	int (*ack_interrupt)(struct phy_device *);
-	int (*config_intr)(struct phy_device *);
-	int (*did_interrupt)(struct phy_device *);
-	irqreturn_t (*handle_interrupt)(struct phy_device *);
-	void (*remove)(struct phy_device *);
-	int (*match_phy_device)(struct phy_device *);
-	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*link_change_notify)(struct phy_device *);
-	int (*read_mmd)(struct phy_device *, int, u16);
-	int (*write_mmd)(struct phy_device *, int, u16, u16);
-	int (*read_page)(struct phy_device *);
-	int (*write_page)(struct phy_device *, int);
-	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
-	int (*cable_test_start)(struct phy_device *);
-	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
-	int (*cable_test_get_status)(struct phy_device *, bool *);
-	int (*get_sset_count)(struct phy_device *);
-	void (*get_strings)(struct phy_device *, u8 *);
-	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
-	int (*set_loopback)(struct phy_device *, bool);
-	int (*get_sqi)(struct phy_device *);
-	int (*get_sqi_max)(struct phy_device *);
-};
-
-struct cache_type_info {
-	const char *size_prop;
-	const char *line_size_props[2];
-	const char *nr_sets_prop;
-};
-
-struct software_node;
-
-struct software_node_ref_args {
-	const struct software_node *node;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct software_node {
-	const char *name;
-	const struct software_node *parent;
-	const struct property_entry *properties;
-};
-
-struct swnode {
-	int id;
-	struct kobject kobj;
-	struct fwnode_handle fwnode;
-	const struct software_node *node;
-	struct ida child_ids;
-	struct list_head entry;
-	struct list_head children;
-	struct swnode *parent;
-	unsigned int allocated: 1;
-};
-
-struct req {
-	struct req *next;
-	struct completion done;
-	int err;
-	const char *name;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	struct device *dev;
-};
-
-typedef int (*pm_callback_t)(struct device *);
-
-struct of_phandle_iterator {
-	const char *cells_name;
-	int cell_count;
-	const struct device_node *parent;
-	const __be32 *list_end;
-	const __be32 *phandle_end;
-	const __be32 *cur;
-	uint32_t cur_count;
-	phandle phandle;
-	struct device_node *node;
-};
-
-enum genpd_notication {
-	GENPD_NOTIFY_PRE_OFF = 0,
-	GENPD_NOTIFY_OFF = 1,
-	GENPD_NOTIFY_PRE_ON = 2,
-	GENPD_NOTIFY_ON = 3,
-};
-
-struct gpd_link {
-	struct generic_pm_domain *parent;
-	struct list_head parent_node;
-	struct generic_pm_domain *child;
-	struct list_head child_node;
-	unsigned int performance_state;
-	unsigned int prev_performance_state;
-};
-
-struct gpd_timing_data {
-	s64 suspend_latency_ns;
-	s64 resume_latency_ns;
-	s64 effective_constraint_ns;
-	bool constraint_changed;
-	bool cached_suspend_ok;
-};
-
-struct generic_pm_domain_data {
-	struct pm_domain_data base;
-	struct gpd_timing_data td;
-	struct notifier_block nb;
-	struct notifier_block *power_nb;
-	int cpu;
-	unsigned int performance_state;
-	void *data;
-};
-
-struct of_genpd_provider {
-	struct list_head link;
-	struct device_node *node;
-	genpd_xlate_t xlate;
-	void *data;
-};
-
-struct pm_clk_notifier_block {
-	struct notifier_block nb;
-	struct dev_pm_domain *pm_domain;
-	char *con_ids[0];
-};
-
-enum pce_status {
-	PCE_STATUS_NONE = 0,
-	PCE_STATUS_ACQUIRED = 1,
-	PCE_STATUS_ENABLED = 2,
-	PCE_STATUS_ERROR = 3,
-};
-
-struct pm_clock_entry {
-	struct list_head node;
-	char *con_id;
-	struct clk *clk;
-	enum pce_status status;
-};
-
-struct firmware_fallback_config {
-	unsigned int force_sysfs_fallback;
-	unsigned int ignore_sysfs_fallback;
-	int old_timeout;
-	int loading_timeout;
-};
-
-struct builtin_fw {
-	char *name;
-	void *data;
-	long unsigned int size;
-};
-
 enum fw_opt {
 	FW_OPT_UEVENT = 1,
 	FW_OPT_NOWAIT = 2,
@@ -83246,20 +98066,11 @@
 	const char *fw_name;
 };
 
-struct firmware_cache {
-	spinlock_t lock;
-	struct list_head head;
-	int state;
-};
-
-struct firmware_work {
-	struct work_struct work;
-	struct module *module;
-	const char *name;
-	struct device *device;
-	void *context;
-	void (*cont)(const struct firmware *, void *);
-	u32 opt_flags;
+struct firmware_fallback_config {
+	unsigned int force_sysfs_fallback;
+	unsigned int ignore_sysfs_fallback;
+	int old_timeout;
+	int loading_timeout;
 };
 
 struct fw_sysfs {
@@ -83267,79 +98078,7 @@
 	struct device dev;
 	struct fw_priv *fw_priv;
 	struct firmware *fw;
-};
-
-typedef void (*node_registration_func_t)(struct node___2 *);
-
-typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
-
-struct node_access_nodes {
-	struct device dev;
-	struct list_head list_node;
-	unsigned int access;
-	struct node_hmem_attrs hmem_attrs;
-};
-
-struct node_cache_info {
-	struct device dev;
-	struct list_head node;
-	struct node_cache_attrs cache_attrs;
-};
-
-struct node_attr {
-	struct device_attribute attr;
-	enum node_states state;
-};
-
-struct for_each_memory_block_cb_data {
-	walk_memory_blocks_func_t func;
-	void *arg;
-};
-
-typedef int (*regmap_hw_write)(void *, const void *, size_t);
-
-typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
-
-struct regmap_async;
-
-typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
-
-struct regmap___2;
-
-struct regmap_async {
-	struct list_head list;
-	struct regmap___2 *map;
-	void *work_buf;
-};
-
-typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
-
-typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
-
-typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
-
-typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-
-typedef struct regmap_async * (*regmap_hw_async_alloc)();
-
-typedef void (*regmap_hw_free_context)(void *);
-
-struct regmap_bus {
-	bool fast_io;
-	regmap_hw_write write;
-	regmap_hw_gather_write gather_write;
-	regmap_hw_async_write async_write;
-	regmap_hw_reg_write reg_write;
-	regmap_hw_reg_update_bits reg_update_bits;
-	regmap_hw_read read;
-	regmap_hw_reg_read reg_read;
-	regmap_hw_free_context free_context;
-	regmap_hw_async_alloc async_alloc;
-	u8 read_flag_mask;
-	enum regmap_endian reg_format_endian_default;
-	enum regmap_endian val_format_endian_default;
-	size_t max_raw_read;
-	size_t max_raw_write;
+	void *fw_upload_priv;
 };
 
 struct reg_field {
@@ -83350,117 +98089,10 @@
 	unsigned int id_offset;
 };
 
-struct regmap_format {
-	size_t buf_size;
-	size_t reg_bytes;
-	size_t pad_bytes;
-	size_t val_bytes;
-	void (*format_write)(struct regmap___2 *, unsigned int, unsigned int);
-	void (*format_reg)(void *, unsigned int, unsigned int);
-	void (*format_val)(void *, unsigned int, unsigned int);
-	unsigned int (*parse_val)(const void *);
-	void (*parse_inplace)(void *);
-};
-
-struct regcache_ops;
-
-struct regmap___2 {
-	union {
-		struct mutex mutex;
-		struct {
-			spinlock_t spinlock;
-			long unsigned int spinlock_flags;
-		};
-	};
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	gfp_t alloc_flags;
-	struct device *dev;
-	void *work_buf;
-	struct regmap_format format;
-	const struct regmap_bus *bus;
-	void *bus_context;
-	const char *name;
-	bool async;
-	spinlock_t async_lock;
-	wait_queue_head_t async_waitq;
-	struct list_head async_list;
-	struct list_head async_free;
-	int async_ret;
-	bool debugfs_disable;
-	struct dentry *debugfs;
-	const char *debugfs_name;
-	unsigned int debugfs_reg_len;
-	unsigned int debugfs_val_len;
-	unsigned int debugfs_tot_len;
-	struct list_head debugfs_off_cache;
-	struct mutex cache_lock;
-	unsigned int max_register;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-	bool defer_caching;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	int reg_shift;
-	int reg_stride;
-	int reg_stride_order;
-	const struct regcache_ops *cache_ops;
-	enum regcache_type cache_type;
-	unsigned int cache_size_raw;
-	unsigned int cache_word_size;
-	unsigned int num_reg_defaults;
-	unsigned int num_reg_defaults_raw;
-	bool cache_only;
-	bool cache_bypass;
-	bool cache_free;
-	struct reg_default *reg_defaults;
-	const void *reg_defaults_raw;
-	void *cache;
-	bool cache_dirty;
-	bool no_sync_defaults;
-	struct reg_sequence *patch;
-	int patch_regs;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	size_t max_raw_read;
-	size_t max_raw_write;
-	struct rb_root range_tree;
-	void *selector_work_buf;
-	struct hwspinlock *hwlock;
-	bool can_sleep;
-};
-
-struct regcache_ops {
-	const char *name;
-	enum regcache_type type;
-	int (*init)(struct regmap___2 *);
-	int (*exit)(struct regmap___2 *);
-	void (*debugfs_init)(struct regmap___2 *);
-	int (*read)(struct regmap___2 *, unsigned int, unsigned int *);
-	int (*write)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*sync)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*drop)(struct regmap___2 *, unsigned int, unsigned int);
-};
-
 struct regmap_range_node {
 	struct rb_node node;
 	const char *name;
-	struct regmap___2 *map;
+	struct regmap *map;
 	unsigned int range_min;
 	unsigned int range_max;
 	unsigned int selector_reg;
@@ -83471,7 +98103,7 @@
 };
 
 struct regmap_field {
-	struct regmap___2 *regmap;
+	struct regmap *regmap;
 	unsigned int mask;
 	unsigned int shift;
 	unsigned int reg;
@@ -83500,7 +98132,6 @@
 	u32 __data_loc_name;
 	u32 __data_loc_status;
 	u32 __data_loc_type;
-	int type;
 	char __data[0];
 };
 
@@ -83551,1201 +98182,381 @@
 	u32 name;
 };
 
-typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap___2 *, unsigned int, unsigned int);
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
 
-typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap___2 *, unsigned int, unsigned int);
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
 
-typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap___2 *, unsigned int, unsigned int);
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
 
-typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap___2 *, unsigned int, int);
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
 
-typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap___2 *, unsigned int, int);
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
 
-typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap___2 *, unsigned int, int);
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
 
-typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap___2 *, unsigned int, int);
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
 
-typedef void (*btf_trace_regcache_sync)(void *, struct regmap___2 *, const char *, const char *);
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
 
-typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap___2 *, bool);
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
 
-typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap___2 *, bool);
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
 
-typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap___2 *, unsigned int, int);
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
 
-typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap___2 *);
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
 
-typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap___2 *);
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
 
-typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap___2 *);
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
 
-typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap___2 *, unsigned int, unsigned int);
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
 
-struct regcache_rbtree_node {
-	void *block;
-	long int *cache_present;
-	unsigned int base_reg;
-	unsigned int blklen;
-	struct rb_node node;
+enum scale_freq_source {
+	SCALE_FREQ_SOURCE_CPUFREQ = 0,
+	SCALE_FREQ_SOURCE_ARCH = 1,
+	SCALE_FREQ_SOURCE_CPPC = 2,
 };
 
-struct regcache_rbtree_ctx {
-	struct rb_root root;
-	struct regcache_rbtree_node *cached_rbnode;
+struct scale_freq_data {
+	enum scale_freq_source source;
+	void (*set_freq_scale)();
 };
 
-struct regmap_debugfs_off_cache {
-	struct list_head list;
-	off_t min;
-	off_t max;
-	unsigned int base_reg;
-	unsigned int max_reg;
+struct trace_event_raw_thermal_pressure_update {
+	struct trace_entry ent;
+	long unsigned int thermal_pressure;
+	int cpu;
+	char __data[0];
 };
 
-struct regmap_debugfs_node {
-	struct regmap___2 *map;
-	struct list_head link;
+struct trace_event_data_offsets_thermal_pressure_update {};
+
+typedef void (*btf_trace_thermal_pressure_update)(void *, int, long unsigned int);
+
+struct cppc_perf_caps {
+	u32 guaranteed_perf;
+	u32 highest_perf;
+	u32 nominal_perf;
+	u32 lowest_perf;
+	u32 lowest_nonlinear_perf;
+	u32 lowest_freq;
+	u32 nominal_freq;
 };
 
-struct ptp_system_timestamp {
-	struct timespec64 pre_ts;
-	struct timespec64 post_ts;
+enum max77686_pmic_reg {
+	MAX77686_REG_DEVICE_ID = 0,
+	MAX77686_REG_INTSRC = 1,
+	MAX77686_REG_INT1 = 2,
+	MAX77686_REG_INT2 = 3,
+	MAX77686_REG_INT1MSK = 4,
+	MAX77686_REG_INT2MSK = 5,
+	MAX77686_REG_STATUS1 = 6,
+	MAX77686_REG_STATUS2 = 7,
+	MAX77686_REG_PWRON = 8,
+	MAX77686_REG_ONOFF_DELAY = 9,
+	MAX77686_REG_MRSTB = 10,
+	MAX77686_REG_BUCK1CTRL = 16,
+	MAX77686_REG_BUCK1OUT = 17,
+	MAX77686_REG_BUCK2CTRL1 = 18,
+	MAX77686_REG_BUCK234FREQ = 19,
+	MAX77686_REG_BUCK2DVS1 = 20,
+	MAX77686_REG_BUCK2DVS2 = 21,
+	MAX77686_REG_BUCK2DVS3 = 22,
+	MAX77686_REG_BUCK2DVS4 = 23,
+	MAX77686_REG_BUCK2DVS5 = 24,
+	MAX77686_REG_BUCK2DVS6 = 25,
+	MAX77686_REG_BUCK2DVS7 = 26,
+	MAX77686_REG_BUCK2DVS8 = 27,
+	MAX77686_REG_BUCK3CTRL1 = 28,
+	MAX77686_REG_BUCK3DVS1 = 30,
+	MAX77686_REG_BUCK3DVS2 = 31,
+	MAX77686_REG_BUCK3DVS3 = 32,
+	MAX77686_REG_BUCK3DVS4 = 33,
+	MAX77686_REG_BUCK3DVS5 = 34,
+	MAX77686_REG_BUCK3DVS6 = 35,
+	MAX77686_REG_BUCK3DVS7 = 36,
+	MAX77686_REG_BUCK3DVS8 = 37,
+	MAX77686_REG_BUCK4CTRL1 = 38,
+	MAX77686_REG_BUCK4DVS1 = 40,
+	MAX77686_REG_BUCK4DVS2 = 41,
+	MAX77686_REG_BUCK4DVS3 = 42,
+	MAX77686_REG_BUCK4DVS4 = 43,
+	MAX77686_REG_BUCK4DVS5 = 44,
+	MAX77686_REG_BUCK4DVS6 = 45,
+	MAX77686_REG_BUCK4DVS7 = 46,
+	MAX77686_REG_BUCK4DVS8 = 47,
+	MAX77686_REG_BUCK5CTRL = 48,
+	MAX77686_REG_BUCK5OUT = 49,
+	MAX77686_REG_BUCK6CTRL = 50,
+	MAX77686_REG_BUCK6OUT = 51,
+	MAX77686_REG_BUCK7CTRL = 52,
+	MAX77686_REG_BUCK7OUT = 53,
+	MAX77686_REG_BUCK8CTRL = 54,
+	MAX77686_REG_BUCK8OUT = 55,
+	MAX77686_REG_BUCK9CTRL = 56,
+	MAX77686_REG_BUCK9OUT = 57,
+	MAX77686_REG_LDO1CTRL1 = 64,
+	MAX77686_REG_LDO2CTRL1 = 65,
+	MAX77686_REG_LDO3CTRL1 = 66,
+	MAX77686_REG_LDO4CTRL1 = 67,
+	MAX77686_REG_LDO5CTRL1 = 68,
+	MAX77686_REG_LDO6CTRL1 = 69,
+	MAX77686_REG_LDO7CTRL1 = 70,
+	MAX77686_REG_LDO8CTRL1 = 71,
+	MAX77686_REG_LDO9CTRL1 = 72,
+	MAX77686_REG_LDO10CTRL1 = 73,
+	MAX77686_REG_LDO11CTRL1 = 74,
+	MAX77686_REG_LDO12CTRL1 = 75,
+	MAX77686_REG_LDO13CTRL1 = 76,
+	MAX77686_REG_LDO14CTRL1 = 77,
+	MAX77686_REG_LDO15CTRL1 = 78,
+	MAX77686_REG_LDO16CTRL1 = 79,
+	MAX77686_REG_LDO17CTRL1 = 80,
+	MAX77686_REG_LDO18CTRL1 = 81,
+	MAX77686_REG_LDO19CTRL1 = 82,
+	MAX77686_REG_LDO20CTRL1 = 83,
+	MAX77686_REG_LDO21CTRL1 = 84,
+	MAX77686_REG_LDO22CTRL1 = 85,
+	MAX77686_REG_LDO23CTRL1 = 86,
+	MAX77686_REG_LDO24CTRL1 = 87,
+	MAX77686_REG_LDO25CTRL1 = 88,
+	MAX77686_REG_LDO26CTRL1 = 89,
+	MAX77686_REG_LDO1CTRL2 = 96,
+	MAX77686_REG_LDO2CTRL2 = 97,
+	MAX77686_REG_LDO3CTRL2 = 98,
+	MAX77686_REG_LDO4CTRL2 = 99,
+	MAX77686_REG_LDO5CTRL2 = 100,
+	MAX77686_REG_LDO6CTRL2 = 101,
+	MAX77686_REG_LDO7CTRL2 = 102,
+	MAX77686_REG_LDO8CTRL2 = 103,
+	MAX77686_REG_LDO9CTRL2 = 104,
+	MAX77686_REG_LDO10CTRL2 = 105,
+	MAX77686_REG_LDO11CTRL2 = 106,
+	MAX77686_REG_LDO12CTRL2 = 107,
+	MAX77686_REG_LDO13CTRL2 = 108,
+	MAX77686_REG_LDO14CTRL2 = 109,
+	MAX77686_REG_LDO15CTRL2 = 110,
+	MAX77686_REG_LDO16CTRL2 = 111,
+	MAX77686_REG_LDO17CTRL2 = 112,
+	MAX77686_REG_LDO18CTRL2 = 113,
+	MAX77686_REG_LDO19CTRL2 = 114,
+	MAX77686_REG_LDO20CTRL2 = 115,
+	MAX77686_REG_LDO21CTRL2 = 116,
+	MAX77686_REG_LDO22CTRL2 = 117,
+	MAX77686_REG_LDO23CTRL2 = 118,
+	MAX77686_REG_LDO24CTRL2 = 119,
+	MAX77686_REG_LDO25CTRL2 = 120,
+	MAX77686_REG_LDO26CTRL2 = 121,
+	MAX77686_REG_BBAT_CHG = 126,
+	MAX77686_REG_32KHZ = 127,
+	MAX77686_REG_PMIC_END = 128,
 };
 
-struct spi_statistics {
-	spinlock_t lock;
-	long unsigned int messages;
-	long unsigned int transfers;
-	long unsigned int errors;
-	long unsigned int timedout;
-	long unsigned int spi_sync;
-	long unsigned int spi_sync_immediate;
-	long unsigned int spi_async;
-	long long unsigned int bytes;
-	long long unsigned int bytes_rx;
-	long long unsigned int bytes_tx;
-	long unsigned int transfer_bytes_histo[17];
-	long unsigned int transfers_split_maxsize;
+enum max77802_pmic_reg {
+	MAX77802_REG_DEVICE_ID = 0,
+	MAX77802_REG_INTSRC = 1,
+	MAX77802_REG_INT1 = 2,
+	MAX77802_REG_INT2 = 3,
+	MAX77802_REG_INT1MSK = 4,
+	MAX77802_REG_INT2MSK = 5,
+	MAX77802_REG_STATUS1 = 6,
+	MAX77802_REG_STATUS2 = 7,
+	MAX77802_REG_PWRON = 8,
+	MAX77802_REG_MRSTB = 10,
+	MAX77802_REG_EPWRHOLD = 11,
+	MAX77802_REG_BOOSTCTRL = 14,
+	MAX77802_REG_BOOSTOUT = 15,
+	MAX77802_REG_BUCK1CTRL = 16,
+	MAX77802_REG_BUCK1DVS1 = 17,
+	MAX77802_REG_BUCK1DVS2 = 18,
+	MAX77802_REG_BUCK1DVS3 = 19,
+	MAX77802_REG_BUCK1DVS4 = 20,
+	MAX77802_REG_BUCK1DVS5 = 21,
+	MAX77802_REG_BUCK1DVS6 = 22,
+	MAX77802_REG_BUCK1DVS7 = 23,
+	MAX77802_REG_BUCK1DVS8 = 24,
+	MAX77802_REG_BUCK2CTRL1 = 26,
+	MAX77802_REG_BUCK2CTRL2 = 27,
+	MAX77802_REG_BUCK2PHTRAN = 28,
+	MAX77802_REG_BUCK2DVS1 = 29,
+	MAX77802_REG_BUCK2DVS2 = 30,
+	MAX77802_REG_BUCK2DVS3 = 31,
+	MAX77802_REG_BUCK2DVS4 = 32,
+	MAX77802_REG_BUCK2DVS5 = 33,
+	MAX77802_REG_BUCK2DVS6 = 34,
+	MAX77802_REG_BUCK2DVS7 = 35,
+	MAX77802_REG_BUCK2DVS8 = 36,
+	MAX77802_REG_BUCK3CTRL1 = 39,
+	MAX77802_REG_BUCK3DVS1 = 40,
+	MAX77802_REG_BUCK3DVS2 = 41,
+	MAX77802_REG_BUCK3DVS3 = 42,
+	MAX77802_REG_BUCK3DVS4 = 43,
+	MAX77802_REG_BUCK3DVS5 = 44,
+	MAX77802_REG_BUCK3DVS6 = 45,
+	MAX77802_REG_BUCK3DVS7 = 46,
+	MAX77802_REG_BUCK3DVS8 = 47,
+	MAX77802_REG_BUCK4CTRL1 = 55,
+	MAX77802_REG_BUCK4DVS1 = 56,
+	MAX77802_REG_BUCK4DVS2 = 57,
+	MAX77802_REG_BUCK4DVS3 = 58,
+	MAX77802_REG_BUCK4DVS4 = 59,
+	MAX77802_REG_BUCK4DVS5 = 60,
+	MAX77802_REG_BUCK4DVS6 = 61,
+	MAX77802_REG_BUCK4DVS7 = 62,
+	MAX77802_REG_BUCK4DVS8 = 63,
+	MAX77802_REG_BUCK5CTRL = 65,
+	MAX77802_REG_BUCK5OUT = 66,
+	MAX77802_REG_BUCK6CTRL = 68,
+	MAX77802_REG_BUCK6DVS1 = 69,
+	MAX77802_REG_BUCK6DVS2 = 70,
+	MAX77802_REG_BUCK6DVS3 = 71,
+	MAX77802_REG_BUCK6DVS4 = 72,
+	MAX77802_REG_BUCK6DVS5 = 73,
+	MAX77802_REG_BUCK6DVS6 = 74,
+	MAX77802_REG_BUCK6DVS7 = 75,
+	MAX77802_REG_BUCK6DVS8 = 76,
+	MAX77802_REG_BUCK7CTRL = 78,
+	MAX77802_REG_BUCK7OUT = 79,
+	MAX77802_REG_BUCK8CTRL = 81,
+	MAX77802_REG_BUCK8OUT = 82,
+	MAX77802_REG_BUCK9CTRL = 84,
+	MAX77802_REG_BUCK9OUT = 85,
+	MAX77802_REG_BUCK10CTRL = 87,
+	MAX77802_REG_BUCK10OUT = 88,
+	MAX77802_REG_LDO1CTRL1 = 96,
+	MAX77802_REG_LDO2CTRL1 = 97,
+	MAX77802_REG_LDO3CTRL1 = 98,
+	MAX77802_REG_LDO4CTRL1 = 99,
+	MAX77802_REG_LDO5CTRL1 = 100,
+	MAX77802_REG_LDO6CTRL1 = 101,
+	MAX77802_REG_LDO7CTRL1 = 102,
+	MAX77802_REG_LDO8CTRL1 = 103,
+	MAX77802_REG_LDO9CTRL1 = 104,
+	MAX77802_REG_LDO10CTRL1 = 105,
+	MAX77802_REG_LDO11CTRL1 = 106,
+	MAX77802_REG_LDO12CTRL1 = 107,
+	MAX77802_REG_LDO13CTRL1 = 108,
+	MAX77802_REG_LDO14CTRL1 = 109,
+	MAX77802_REG_LDO15CTRL1 = 110,
+	MAX77802_REG_LDO17CTRL1 = 112,
+	MAX77802_REG_LDO18CTRL1 = 113,
+	MAX77802_REG_LDO19CTRL1 = 114,
+	MAX77802_REG_LDO20CTRL1 = 115,
+	MAX77802_REG_LDO21CTRL1 = 116,
+	MAX77802_REG_LDO22CTRL1 = 117,
+	MAX77802_REG_LDO23CTRL1 = 118,
+	MAX77802_REG_LDO24CTRL1 = 119,
+	MAX77802_REG_LDO25CTRL1 = 120,
+	MAX77802_REG_LDO26CTRL1 = 121,
+	MAX77802_REG_LDO27CTRL1 = 122,
+	MAX77802_REG_LDO28CTRL1 = 123,
+	MAX77802_REG_LDO29CTRL1 = 124,
+	MAX77802_REG_LDO30CTRL1 = 125,
+	MAX77802_REG_LDO32CTRL1 = 127,
+	MAX77802_REG_LDO33CTRL1 = 128,
+	MAX77802_REG_LDO34CTRL1 = 129,
+	MAX77802_REG_LDO35CTRL1 = 130,
+	MAX77802_REG_LDO1CTRL2 = 144,
+	MAX77802_REG_LDO2CTRL2 = 145,
+	MAX77802_REG_LDO3CTRL2 = 146,
+	MAX77802_REG_LDO4CTRL2 = 147,
+	MAX77802_REG_LDO5CTRL2 = 148,
+	MAX77802_REG_LDO6CTRL2 = 149,
+	MAX77802_REG_LDO7CTRL2 = 150,
+	MAX77802_REG_LDO8CTRL2 = 151,
+	MAX77802_REG_LDO9CTRL2 = 152,
+	MAX77802_REG_LDO10CTRL2 = 153,
+	MAX77802_REG_LDO11CTRL2 = 154,
+	MAX77802_REG_LDO12CTRL2 = 155,
+	MAX77802_REG_LDO13CTRL2 = 156,
+	MAX77802_REG_LDO14CTRL2 = 157,
+	MAX77802_REG_LDO15CTRL2 = 158,
+	MAX77802_REG_LDO17CTRL2 = 160,
+	MAX77802_REG_LDO18CTRL2 = 161,
+	MAX77802_REG_LDO19CTRL2 = 162,
+	MAX77802_REG_LDO20CTRL2 = 163,
+	MAX77802_REG_LDO21CTRL2 = 164,
+	MAX77802_REG_LDO22CTRL2 = 165,
+	MAX77802_REG_LDO23CTRL2 = 166,
+	MAX77802_REG_LDO24CTRL2 = 167,
+	MAX77802_REG_LDO25CTRL2 = 168,
+	MAX77802_REG_LDO26CTRL2 = 169,
+	MAX77802_REG_LDO27CTRL2 = 170,
+	MAX77802_REG_LDO28CTRL2 = 171,
+	MAX77802_REG_LDO29CTRL2 = 172,
+	MAX77802_REG_LDO30CTRL2 = 173,
+	MAX77802_REG_LDO32CTRL2 = 175,
+	MAX77802_REG_LDO33CTRL2 = 176,
+	MAX77802_REG_LDO34CTRL2 = 177,
+	MAX77802_REG_LDO35CTRL2 = 178,
+	MAX77802_REG_BBAT_CHG = 180,
+	MAX77802_REG_32KHZ = 181,
+	MAX77802_REG_PMIC_END = 182,
 };
 
-struct spi_delay {
-	u16 value;
-	u8 unit;
+enum max77802_rtc_reg {
+	MAX77802_RTC_INT = 192,
+	MAX77802_RTC_INTM = 193,
+	MAX77802_RTC_CONTROLM = 194,
+	MAX77802_RTC_CONTROL = 195,
+	MAX77802_RTC_UPDATE0 = 196,
+	MAX77802_RTC_UPDATE1 = 197,
+	MAX77802_WTSR_SMPL_CNTL = 198,
+	MAX77802_RTC_SEC = 199,
+	MAX77802_RTC_MIN = 200,
+	MAX77802_RTC_HOUR = 201,
+	MAX77802_RTC_WEEKDAY = 202,
+	MAX77802_RTC_MONTH = 203,
+	MAX77802_RTC_YEAR = 204,
+	MAX77802_RTC_MONTHDAY = 205,
+	MAX77802_RTC_AE1 = 206,
+	MAX77802_ALARM1_SEC = 207,
+	MAX77802_ALARM1_MIN = 208,
+	MAX77802_ALARM1_HOUR = 209,
+	MAX77802_ALARM1_WEEKDAY = 210,
+	MAX77802_ALARM1_MONTH = 211,
+	MAX77802_ALARM1_YEAR = 212,
+	MAX77802_ALARM1_DATE = 213,
+	MAX77802_RTC_AE2 = 214,
+	MAX77802_ALARM2_SEC = 215,
+	MAX77802_ALARM2_MIN = 216,
+	MAX77802_ALARM2_HOUR = 217,
+	MAX77802_ALARM2_WEEKDAY = 218,
+	MAX77802_ALARM2_MONTH = 219,
+	MAX77802_ALARM2_YEAR = 220,
+	MAX77802_ALARM2_DATE = 221,
+	MAX77802_RTC_END = 223,
 };
 
-struct spi_controller;
-
-struct spi_device {
-	struct device dev;
-	struct spi_controller *controller;
-	struct spi_controller *master;
-	u32 max_speed_hz;
-	u8 chip_select;
-	u8 bits_per_word;
-	bool rt;
-	u32 mode;
-	int irq;
-	void *controller_state;
-	void *controller_data;
-	char modalias[32];
-	const char *driver_override;
-	int cs_gpio;
-	struct gpio_desc *cs_gpiod;
-	struct spi_delay word_delay;
-	struct spi_statistics statistics;
+enum max77686_irq_source {
+	PMIC_INT1 = 0,
+	PMIC_INT2 = 1,
+	RTC_INT = 2,
+	MAX77686_IRQ_GROUP_NR = 3,
 };
 
-struct spi_message;
-
-struct spi_transfer;
-
-struct spi_controller_mem_ops;
-
-struct spi_controller {
-	struct device dev;
-	struct list_head list;
-	s16 bus_num;
-	u16 num_chipselect;
-	u16 dma_alignment;
-	u32 mode_bits;
-	u32 buswidth_override_bits;
-	u32 bits_per_word_mask;
-	u32 min_speed_hz;
-	u32 max_speed_hz;
-	u16 flags;
-	bool slave;
-	size_t (*max_transfer_size)(struct spi_device *);
-	size_t (*max_message_size)(struct spi_device *);
-	struct mutex io_mutex;
-	spinlock_t bus_lock_spinlock;
-	struct mutex bus_lock_mutex;
-	bool bus_lock_flag;
-	int (*setup)(struct spi_device *);
-	int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
-	int (*transfer)(struct spi_device *, struct spi_message *);
-	void (*cleanup)(struct spi_device *);
-	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	bool queued;
-	struct kthread_worker *kworker;
-	struct kthread_work pump_messages;
-	spinlock_t queue_lock;
-	struct list_head queue;
-	struct spi_message *cur_msg;
-	bool idling;
-	bool busy;
-	bool running;
-	bool rt;
-	bool auto_runtime_pm;
-	bool cur_msg_prepared;
-	bool cur_msg_mapped;
-	bool last_cs_enable;
-	bool last_cs_mode_high;
-	bool fallback;
-	struct completion xfer_completion;
-	size_t max_dma_len;
-	int (*prepare_transfer_hardware)(struct spi_controller *);
-	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_transfer_hardware)(struct spi_controller *);
-	int (*prepare_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
-	int (*slave_abort)(struct spi_controller *);
-	void (*set_cs)(struct spi_device *, bool);
-	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	void (*handle_err)(struct spi_controller *, struct spi_message *);
-	const struct spi_controller_mem_ops *mem_ops;
-	struct spi_delay cs_setup;
-	struct spi_delay cs_hold;
-	struct spi_delay cs_inactive;
-	int *cs_gpios;
-	struct gpio_desc **cs_gpiods;
-	bool use_gpio_descriptors;
-	u8 unused_native_cs;
-	u8 max_native_cs;
-	struct spi_statistics statistics;
-	struct dma_chan *dma_tx;
-	struct dma_chan *dma_rx;
-	void *dummy_rx;
-	void *dummy_tx;
-	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
-	bool ptp_sts_supported;
-	long unsigned int irq_flags;
-};
-
-struct spi_message {
-	struct list_head transfers;
-	struct spi_device *spi;
-	unsigned int is_dma_mapped: 1;
-	void (*complete)(void *);
-	void *context;
-	unsigned int frame_length;
-	unsigned int actual_length;
-	int status;
-	struct list_head queue;
-	void *state;
-	struct list_head resources;
-};
-
-struct spi_transfer {
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int len;
-	dma_addr_t tx_dma;
-	dma_addr_t rx_dma;
-	struct sg_table tx_sg;
-	struct sg_table rx_sg;
-	unsigned int cs_change: 1;
-	unsigned int tx_nbits: 3;
-	unsigned int rx_nbits: 3;
-	u8 bits_per_word;
-	u16 delay_usecs;
-	struct spi_delay delay;
-	struct spi_delay cs_change_delay;
-	struct spi_delay word_delay;
-	u32 speed_hz;
-	u32 effective_speed_hz;
-	unsigned int ptp_sts_word_pre;
-	unsigned int ptp_sts_word_post;
-	struct ptp_system_timestamp *ptp_sts;
-	bool timestamped;
-	struct list_head transfer_list;
-	u16 error;
-};
-
-struct spi_mem;
-
-struct spi_mem_op;
-
-struct spi_mem_dirmap_desc;
-
-struct spi_controller_mem_ops {
-	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
-	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
-	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
-	const char * (*get_name)(struct spi_mem *);
-	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
-	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
-	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
-	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
-};
-
-struct regmap_async_spi {
-	struct regmap_async core;
-	struct spi_message m;
-	struct spi_transfer t[2];
-};
-
-struct regmap_mmio_context {
-	void *regs;
-	unsigned int val_bytes;
-	bool attached_clk;
-	struct clk *clk;
-	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
-	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
-};
-
-struct regmap_irq_chip_data___2 {
-	struct mutex lock;
-	struct irq_chip irq_chip;
-	struct regmap___2 *map;
-	const struct regmap_irq_chip *chip;
-	int irq_base;
-	struct irq_domain *domain;
-	int irq;
-	int wake_count;
-	void *status_reg_buf;
-	unsigned int *main_status_buf;
-	unsigned int *status_buf;
-	unsigned int *mask_buf;
-	unsigned int *mask_buf_def;
-	unsigned int *wake_buf;
-	unsigned int *type_buf;
-	unsigned int *type_buf_def;
-	unsigned int irq_reg_stride;
-	unsigned int type_reg_stride;
-	bool clear_status: 1;
-};
-
-struct soc_device___2 {
-	struct device dev;
-	struct soc_device_attribute *attr;
-	int soc_dev_num;
-};
-
-struct devcd_entry {
-	struct device devcd_dev;
-	void *data;
-	size_t datalen;
-	struct module *owner;
-	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
-	void (*free)(void *);
-	struct delayed_work del_wk;
-	struct device *failing_dev;
-};
-
-typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
-
-struct platform_msi_priv_data {
+struct max77686_dev {
 	struct device *dev;
-	void *host_data;
-	msi_alloc_info_t arg;
-	irq_write_msi_msg_t write_msg;
-	int devid;
-};
-
-struct brd_device {
-	int brd_number;
-	struct request_queue *brd_queue;
-	struct gendisk *brd_disk;
-	struct list_head brd_list;
-	spinlock_t brd_lock;
-	struct xarray brd_pages;
-};
-
-typedef unsigned int __kernel_old_dev_t;
-
-enum {
-	LO_FLAGS_READ_ONLY = 1,
-	LO_FLAGS_AUTOCLEAR = 4,
-	LO_FLAGS_PARTSCAN = 8,
-	LO_FLAGS_DIRECT_IO = 16,
-};
-
-struct loop_info {
-	int lo_number;
-	__kernel_old_dev_t lo_device;
-	long unsigned int lo_inode;
-	__kernel_old_dev_t lo_rdevice;
-	int lo_offset;
-	int lo_encrypt_type;
-	int lo_encrypt_key_size;
-	int lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	long unsigned int lo_init[2];
-	char reserved[4];
-};
-
-struct loop_info64 {
-	__u64 lo_device;
-	__u64 lo_inode;
-	__u64 lo_rdevice;
-	__u64 lo_offset;
-	__u64 lo_sizelimit;
-	__u32 lo_number;
-	__u32 lo_encrypt_type;
-	__u32 lo_encrypt_key_size;
-	__u32 lo_flags;
-	__u8 lo_file_name[64];
-	__u8 lo_crypt_name[64];
-	__u8 lo_encrypt_key[32];
-	__u64 lo_init[2];
-};
-
-struct loop_config {
-	__u32 fd;
-	__u32 block_size;
-	struct loop_info64 info;
-	__u64 __reserved[8];
-};
-
-enum {
-	Lo_unbound = 0,
-	Lo_bound = 1,
-	Lo_rundown = 2,
-};
-
-struct loop_func_table;
-
-struct loop_device {
-	int lo_number;
-	atomic_t lo_refcnt;
-	loff_t lo_offset;
-	loff_t lo_sizelimit;
-	int lo_flags;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	char lo_file_name[64];
-	char lo_crypt_name[64];
-	char lo_encrypt_key[32];
-	int lo_encrypt_key_size;
-	struct loop_func_table *lo_encryption;
-	__u32 lo_init[2];
-	kuid_t lo_key_owner;
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct file *lo_backing_file;
-	struct block_device *lo_device;
-	void *key_data;
-	gfp_t old_gfp_mask;
-	spinlock_t lo_lock;
-	int lo_state;
-	struct kthread_worker worker;
-	struct task_struct *worker_task;
-	bool use_dio;
-	bool sysfs_inited;
-	struct request_queue *lo_queue;
-	struct blk_mq_tag_set tag_set;
-	struct gendisk *lo_disk;
-};
-
-struct loop_func_table {
-	int number;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	int (*init)(struct loop_device *, const struct loop_info64 *);
-	int (*release)(struct loop_device *);
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct module *owner;
-};
-
-struct loop_cmd {
-	struct kthread_work work;
-	bool use_aio;
-	atomic_t ref;
-	long int ret;
-	struct kiocb iocb;
-	struct bio_vec *bvec;
-	struct cgroup_subsys_state *css;
-};
-
-struct compat_loop_info {
-	compat_int_t lo_number;
-	compat_dev_t lo_device;
-	compat_ulong_t lo_inode;
-	compat_dev_t lo_rdevice;
-	compat_int_t lo_offset;
-	compat_int_t lo_encrypt_type;
-	compat_int_t lo_encrypt_key_size;
-	compat_int_t lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	compat_ulong_t lo_init[2];
-	char reserved[4];
-};
-
-typedef uint16_t blkif_vdev_t;
-
-typedef uint64_t blkif_sector_t;
-
-struct blkif_request_segment {
-	grant_ref_t gref;
-	uint8_t first_sect;
-	uint8_t last_sect;
-};
-
-struct blkif_request_rw {
-	uint8_t nr_segments;
-	blkif_vdev_t handle;
-	uint32_t _pad1;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	struct blkif_request_segment seg[11];
-} __attribute__((packed));
-
-struct blkif_request_discard {
-	uint8_t flag;
-	blkif_vdev_t _pad1;
-	uint32_t _pad2;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	uint64_t nr_sectors;
-	uint8_t _pad3;
-} __attribute__((packed));
-
-struct blkif_request_other {
-	uint8_t _pad1;
-	blkif_vdev_t _pad2;
-	uint32_t _pad3;
-	uint64_t id;
-} __attribute__((packed));
-
-struct blkif_request_indirect {
-	uint8_t indirect_op;
-	uint16_t nr_segments;
-	uint32_t _pad1;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	blkif_vdev_t handle;
-	uint16_t _pad2;
-	grant_ref_t indirect_grefs[8];
-	uint32_t _pad3;
-} __attribute__((packed));
-
-struct blkif_request {
-	uint8_t operation;
-	union {
-		struct blkif_request_rw rw;
-		struct blkif_request_discard discard;
-		struct blkif_request_other other;
-		struct blkif_request_indirect indirect;
-	} u;
-} __attribute__((packed));
-
-struct blkif_response {
-	uint64_t id;
-	uint8_t operation;
-	int16_t status;
-};
-
-union blkif_sring_entry {
-	struct blkif_request req;
-	struct blkif_response rsp;
-};
-
-struct blkif_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union blkif_sring_entry ring[1];
-};
-
-struct blkif_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct blkif_sring *sring;
-};
-
-enum blkif_state {
-	BLKIF_STATE_DISCONNECTED = 0,
-	BLKIF_STATE_CONNECTED = 1,
-	BLKIF_STATE_SUSPENDED = 2,
-};
-
-struct grant {
-	grant_ref_t gref;
-	struct page *page;
-	struct list_head node;
-};
-
-enum blk_req_status {
-	REQ_WAITING = 0,
-	REQ_DONE = 1,
-	REQ_ERROR = 2,
-	REQ_EOPNOTSUPP = 3,
-};
-
-struct blk_shadow {
-	struct blkif_request req;
-	struct request *request;
-	struct grant **grants_used;
-	struct grant **indirect_grants;
-	struct scatterlist *sg;
-	unsigned int num_sg;
-	enum blk_req_status status;
-	long unsigned int associated_id;
-};
-
-struct blkif_req {
-	blk_status_t error;
-};
-
-struct blkfront_info;
-
-struct blkfront_ring_info {
-	spinlock_t ring_lock;
-	struct blkif_front_ring ring;
-	unsigned int ring_ref[16];
-	unsigned int evtchn;
-	unsigned int irq;
-	struct work_struct work;
-	struct gnttab_free_callback callback;
-	struct list_head indirect_pages;
-	struct list_head grants;
-	unsigned int persistent_gnts_c;
-	long unsigned int shadow_free;
-	struct blkfront_info *dev_info;
-	struct blk_shadow shadow[0];
-};
-
-struct blkfront_info {
-	struct mutex mutex;
-	struct xenbus_device *xbdev;
-	struct gendisk *gd;
-	u16 sector_size;
-	unsigned int physical_sector_size;
-	int vdevice;
-	blkif_vdev_t handle;
-	enum blkif_state connected;
-	unsigned int nr_ring_pages;
-	struct request_queue *rq;
-	unsigned int feature_flush: 1;
-	unsigned int feature_fua: 1;
-	unsigned int feature_discard: 1;
-	unsigned int feature_secdiscard: 1;
-	unsigned int feature_persistent: 1;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	unsigned int max_indirect_segments;
-	int is_ready;
-	struct blk_mq_tag_set tag_set;
-	struct blkfront_ring_info *rinfo;
-	unsigned int nr_rings;
-	unsigned int rinfo_size;
-	struct list_head requests;
-	struct bio_list bio_list;
-	struct list_head info_list;
-};
-
-struct setup_rw_req {
-	unsigned int grant_idx;
-	struct blkif_request_segment *segments;
-	struct blkfront_ring_info *rinfo;
-	struct blkif_request *ring_req;
-	grant_ref_t gref_head;
-	unsigned int id;
-	bool need_copy;
-	unsigned int bvec_off;
-	char *bvec_data;
-	bool require_extra_req;
-	struct blkif_request *extra_ring_req;
-};
-
-struct copy_from_grant {
-	const struct blk_shadow *s;
-	unsigned int grant_idx;
-	unsigned int bvec_offset;
-	char *bvec_data;
-};
-
-struct test_struct {
-	char *get;
-	char *put;
-	void (*get_handler)(char *);
-	int (*put_handler)(char *, char *);
-};
-
-struct test_state {
-	char *name;
-	struct test_struct *tst;
-	int idx;
-	int (*run_test)(int, int);
-	int (*validate_put)(char *);
-};
-
-struct sram_partition {
-	void *base;
-	struct gen_pool *pool;
-	struct bin_attribute battr;
-	struct mutex lock;
-	struct list_head list;
-};
-
-struct sram_dev {
-	struct device *dev;
-	void *virt_base;
-	struct gen_pool *pool;
-	struct clk *clk;
-	struct sram_partition *partition;
-	u32 partitions;
-};
-
-struct sram_reserve {
-	struct list_head list;
-	u32 start;
-	u32 size;
-	bool export;
-	bool pool;
-	bool protect_exec;
-	const char *label;
-};
-
-struct mfd_cell_acpi_match;
-
-struct mfd_cell {
-	const char *name;
-	int id;
-	int level;
-	int (*enable)(struct platform_device *);
-	int (*disable)(struct platform_device *);
-	int (*suspend)(struct platform_device *);
-	int (*resume)(struct platform_device *);
-	void *platform_data;
-	size_t pdata_size;
-	const struct property_entry *properties;
-	const char *of_compatible;
-	const u64 of_reg;
-	bool use_of_reg;
-	const struct mfd_cell_acpi_match *acpi_match;
-	int num_resources;
-	const struct resource *resources;
-	bool ignore_resource_conflicts;
-	bool pm_runtime_no_callbacks;
-	const char * const *parent_supplies;
-	int num_parent_supplies;
-};
-
-struct mfd_cell_acpi_match {
-	const char *pnpid;
-	const long long unsigned int adr;
-};
-
-struct prcm_data {
-	int nsubdevs;
-	const struct mfd_cell *subdevs;
-};
-
-struct arizona_micbias {
-	int mV;
-	unsigned int ext_cap: 1;
-	unsigned int discharge: 1;
-	unsigned int soft_start: 1;
-	unsigned int bypass: 1;
-};
-
-struct arizona_micd_config {
-	unsigned int src;
-	unsigned int bias;
-	bool gpio;
-};
-
-struct arizona_micd_range {
-	int max;
-	int key;
-};
-
-struct arizona_pdata {
-	struct gpio_desc *reset;
-	struct arizona_micsupp_pdata micvdd;
-	struct arizona_ldo1_pdata ldo1;
-	int clk32k_src;
-	unsigned int irq_flags;
-	int gpio_base;
-	unsigned int gpio_defaults[5];
-	unsigned int max_channels_clocked[3];
-	bool jd_gpio5;
-	bool jd_gpio5_nopull;
-	bool jd_invert;
-	bool hpdet_acc_id;
-	bool hpdet_acc_id_line;
-	int hpdet_id_gpio;
-	unsigned int hpdet_channel;
-	bool micd_software_compare;
-	unsigned int micd_detect_debounce;
-	int micd_pol_gpio;
-	unsigned int micd_bias_start_time;
-	unsigned int micd_rate;
-	unsigned int micd_dbtime;
-	unsigned int micd_timeout;
-	bool micd_force_micbias;
-	const struct arizona_micd_range *micd_ranges;
-	int num_micd_ranges;
-	struct arizona_micd_config *micd_configs;
-	int num_micd_configs;
-	int dmic_ref[4];
-	struct arizona_micbias micbias[3];
-	int inmode[4];
-	int out_mono[6];
-	unsigned int out_vol_limit[12];
-	unsigned int spk_mute[2];
-	unsigned int spk_fmt[2];
-	unsigned int hap_act;
-	int irq_gpio;
-	unsigned int gpsw;
-};
-
-enum {
-	ARIZONA_MCLK1 = 0,
-	ARIZONA_MCLK2 = 1,
-	ARIZONA_NUM_MCLK = 2,
-};
-
-enum arizona_type {
-	WM5102 = 1,
-	WM5110 = 2,
-	WM8997 = 3,
-	WM8280 = 4,
-	WM8998 = 5,
-	WM1814 = 6,
-	WM1831 = 7,
-	CS47L24 = 8,
-};
-
-struct arizona {
+	struct i2c_client *i2c;
+	long unsigned int type;
 	struct regmap *regmap;
-	struct device *dev;
-	enum arizona_type type;
-	unsigned int rev;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool has_fully_powered_off;
-	struct arizona_pdata pdata;
-	unsigned int external_dcvdd: 1;
-	int irq;
-	struct irq_domain *virq;
-	struct regmap_irq_chip_data *aod_irq_chip;
-	struct regmap_irq_chip_data *irq_chip;
-	bool hpdet_clamp;
-	unsigned int hp_ena;
-	struct mutex clk_lock;
-	int clk32k_ref;
-	struct clk *mclk[2];
-	bool ctrlif_error;
-	struct snd_soc_dapm_context *dapm;
-	int tdm_width[3];
-	int tdm_slots[3];
-	uint16_t dac_comp_coeff;
-	uint8_t dac_comp_enabled;
-	struct mutex dac_comp_lock;
-	struct blocking_notifier_head notifier;
-};
-
-struct arizona_sysclk_state {
-	unsigned int fll;
-	unsigned int sysclk;
-};
-
-enum tps65912_irqs {
-	TPS65912_IRQ_PWRHOLD_F = 0,
-	TPS65912_IRQ_VMON = 1,
-	TPS65912_IRQ_PWRON = 2,
-	TPS65912_IRQ_PWRON_LP = 3,
-	TPS65912_IRQ_PWRHOLD_R = 4,
-	TPS65912_IRQ_HOTDIE = 5,
-	TPS65912_IRQ_GPIO1_R = 6,
-	TPS65912_IRQ_GPIO1_F = 7,
-	TPS65912_IRQ_GPIO2_R = 8,
-	TPS65912_IRQ_GPIO2_F = 9,
-	TPS65912_IRQ_GPIO3_R = 10,
-	TPS65912_IRQ_GPIO3_F = 11,
-	TPS65912_IRQ_GPIO4_R = 12,
-	TPS65912_IRQ_GPIO4_F = 13,
-	TPS65912_IRQ_GPIO5_R = 14,
-	TPS65912_IRQ_GPIO5_F = 15,
-	TPS65912_IRQ_PGOOD_DCDC1 = 16,
-	TPS65912_IRQ_PGOOD_DCDC2 = 17,
-	TPS65912_IRQ_PGOOD_DCDC3 = 18,
-	TPS65912_IRQ_PGOOD_DCDC4 = 19,
-	TPS65912_IRQ_PGOOD_LDO1 = 20,
-	TPS65912_IRQ_PGOOD_LDO2 = 21,
-	TPS65912_IRQ_PGOOD_LDO3 = 22,
-	TPS65912_IRQ_PGOOD_LDO4 = 23,
-	TPS65912_IRQ_PGOOD_LDO5 = 24,
-	TPS65912_IRQ_PGOOD_LDO6 = 25,
-	TPS65912_IRQ_PGOOD_LDO7 = 26,
-	TPS65912_IRQ_PGOOD_LDO8 = 27,
-	TPS65912_IRQ_PGOOD_LDO9 = 28,
-	TPS65912_IRQ_PGOOD_LDO10 = 29,
-};
-
-struct tps65912 {
-	struct device *dev;
-	struct regmap *regmap;
-	int irq;
 	struct regmap_irq_chip_data *irq_data;
+	int irq;
+	struct mutex irqlock;
+	int irq_masks_cur[3];
+	int irq_masks_cache[3];
 };
 
-struct spi_device_id {
-	char name[32];
-	kernel_ulong_t driver_data;
-};
-
-struct spi_driver {
-	const struct spi_device_id *id_table;
-	int (*probe)(struct spi_device *);
-	int (*remove)(struct spi_device *);
-	void (*shutdown)(struct spi_device *);
-	struct device_driver driver;
-};
-
-struct mfd_of_node_entry {
-	struct list_head list;
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct da9052 {
-	struct device *dev;
-	struct regmap *regmap;
-	struct mutex auxadc_lock;
-	struct completion done;
-	int irq_base;
-	struct regmap_irq_chip_data *irq_data;
-	u8 chip_id;
-	int chip_irq;
-	int (*fix_io)(struct da9052 *, unsigned char);
-};
-
-struct led_platform_data;
-
-struct da9052_pdata {
-	struct led_platform_data *pled;
-	int (*init)(struct da9052 *);
-	int irq_base;
-	int gpio_base;
-	int use_for_apm;
-	struct regulator_init_data *regulators[14];
-};
-
-enum da9052_chip_id {
-	DA9052 = 0,
-	DA9053_AA = 1,
-	DA9053_BA = 2,
-	DA9053_BB = 3,
-	DA9053_BC = 4,
-};
-
-struct syscon_platform_data {
-	const char *label;
-};
-
-struct syscon {
-	struct device_node *np;
-	struct regmap *regmap;
-	struct list_head list;
-};
-
-struct dax_device___2;
-
-struct dax_operations {
-	long int (*direct_access)(struct dax_device___2 *, long unsigned int, long int, void **, pfn_t *);
-	bool (*dax_supported)(struct dax_device___2 *, struct block_device *, int, sector_t, sector_t);
-	size_t (*copy_from_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	size_t (*copy_to_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	int (*zero_page_range)(struct dax_device___2 *, long unsigned int, size_t);
-};
-
-struct dax_device___2 {
-	struct hlist_node list;
-	struct inode inode;
-	struct cdev cdev;
-	const char *host;
-	void *private;
-	long unsigned int flags;
-	const struct dax_operations *ops;
-};
-
-enum dax_device_flags {
-	DAXDEV_ALIVE = 0,
-	DAXDEV_WRITE_CACHE = 1,
-	DAXDEV_SYNC = 2,
-};
-
-struct dax_region {
-	int id;
-	int target_node;
-	struct kref kref;
-	struct device *dev;
-	unsigned int align;
-	struct ida ida;
-	struct resource res;
-	struct device *seed;
-	struct device *youngest;
-};
-
-struct dax_mapping {
-	struct device dev;
-	int range_id;
-	int id;
-};
-
-struct dev_dax_range {
-	long unsigned int pgoff;
-	struct range range;
-	struct dax_mapping *mapping;
-};
-
-struct dev_dax {
-	struct dax_region *region;
-	struct dax_device *dax_dev;
-	unsigned int align;
-	int target_node;
-	int id;
-	struct ida ida;
-	struct device dev;
-	struct dev_pagemap *pgmap;
-	int nr_range;
-	struct dev_dax_range *ranges;
-};
-
-enum dev_dax_subsys {
-	DEV_DAX_BUS = 0,
-	DEV_DAX_CLASS = 1,
-};
-
-struct dev_dax_data {
-	struct dax_region *dax_region;
-	struct dev_pagemap *pgmap;
-	enum dev_dax_subsys subsys;
-	resource_size_t size;
-	int id;
-};
-
-struct dax_device_driver {
-	struct device_driver drv;
-	struct list_head ids;
-	int match_always;
-	int (*probe)(struct dev_dax *);
-	int (*remove)(struct dev_dax *);
-};
-
-struct dax_id {
-	struct list_head list;
-	char dev_name[30];
-};
-
-enum id_action {
-	ID_REMOVE = 0,
-	ID_ADD = 1,
+enum max77686_types {
+	TYPE_MAX77686 = 0,
+	TYPE_MAX77802 = 1,
 };
 
 struct memregion_info {
 	int target_node;
 };
 
-struct seqcount_ww_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_ww_mutex seqcount_ww_mutex_t;
-
-struct dma_fence_ops;
-
-struct dma_fence {
-	spinlock_t *lock;
-	const struct dma_fence_ops *ops;
-	union {
-		struct list_head cb_list;
-		ktime_t timestamp;
-		struct callback_head rcu;
-	};
-	u64 context;
-	u64 seqno;
-	long unsigned int flags;
-	struct kref refcount;
-	int error;
-};
-
-struct dma_fence_ops {
-	bool use_64bit_seqno;
-	const char * (*get_driver_name)(struct dma_fence *);
-	const char * (*get_timeline_name)(struct dma_fence *);
-	bool (*enable_signaling)(struct dma_fence *);
-	bool (*signaled)(struct dma_fence *);
-	long int (*wait)(struct dma_fence *, bool, long int);
-	void (*release)(struct dma_fence *);
-	void (*fence_value_str)(struct dma_fence *, char *, int);
-	void (*timeline_value_str)(struct dma_fence *, char *, int);
-};
-
-enum dma_fence_flag_bits {
-	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
-	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
-	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
-	DMA_FENCE_FLAG_USER_BITS = 3,
-};
-
-struct dma_fence_cb;
-
-typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
-
-struct dma_fence_cb {
-	struct list_head node;
-	dma_fence_func_t func;
-};
-
-struct dma_buf;
-
-struct dma_buf_attachment;
-
-struct dma_buf_ops {
-	bool cache_sgt_mapping;
-	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
-	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
-	int (*pin)(struct dma_buf_attachment *);
-	void (*unpin)(struct dma_buf_attachment *);
-	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
-	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
-	void (*release)(struct dma_buf *);
-	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
-	void * (*vmap)(struct dma_buf *);
-	void (*vunmap)(struct dma_buf *, void *);
-};
-
-struct dma_buf_poll_cb_t {
-	struct dma_fence_cb cb;
-	wait_queue_head_t *poll;
-	__poll_t active;
-};
-
-struct dma_resv;
-
-struct dma_buf {
-	size_t size;
-	struct file *file;
-	struct list_head attachments;
-	const struct dma_buf_ops *ops;
-	struct mutex lock;
-	unsigned int vmapping_counter;
-	void *vmap_ptr;
-	const char *exp_name;
-	const char *name;
-	spinlock_t name_lock;
-	struct module *owner;
-	struct list_head list_node;
-	void *priv;
-	struct dma_resv *resv;
-	wait_queue_head_t poll;
-	struct dma_buf_poll_cb_t cb_excl;
-	struct dma_buf_poll_cb_t cb_shared;
-};
-
-struct dma_buf_attach_ops;
-
-struct dma_buf_attachment {
-	struct dma_buf *dmabuf;
-	struct device *dev;
-	struct list_head node;
-	struct sg_table *sgt;
-	enum dma_data_direction dir;
-	bool peer2peer;
-	const struct dma_buf_attach_ops *importer_ops;
-	void *importer_priv;
-	void *priv;
-};
-
-struct dma_resv_list;
-
-struct dma_resv {
-	struct ww_mutex lock;
-	seqcount_ww_mutex_t seq;
-	struct dma_fence *fence_excl;
-	struct dma_resv_list *fence;
-};
-
-struct dma_buf_attach_ops {
-	bool allow_peer2peer;
-	void (*move_notify)(struct dma_buf_attachment *);
-};
-
-struct dma_buf_export_info {
-	const char *exp_name;
-	struct module *owner;
-	const struct dma_buf_ops *ops;
-	size_t size;
-	int flags;
-	struct dma_resv *resv;
-	void *priv;
-};
-
-struct dma_resv_list {
-	struct callback_head rcu;
-	u32 shared_count;
-	u32 shared_max;
-	struct dma_fence *shared[0];
-};
-
-struct dma_buf_sync {
-	__u64 flags;
-};
-
-struct dma_buf_list {
-	struct list_head head;
-	struct mutex lock;
-};
-
-struct trace_event_raw_dma_fence {
-	struct trace_entry ent;
-	u32 __data_loc_driver;
-	u32 __data_loc_timeline;
-	unsigned int context;
-	unsigned int seqno;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dma_fence {
-	u32 driver;
-	u32 timeline;
-};
-
-typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
-
-struct default_wait_cb {
-	struct dma_fence_cb base;
-	struct task_struct *task;
-};
-
-struct dma_fence_array;
-
-struct dma_fence_array_cb {
-	struct dma_fence_cb cb;
-	struct dma_fence_array *array;
-};
-
 struct dma_fence_array {
 	struct dma_fence base;
 	spinlock_t lock;
@@ -84757,25 +98568,20 @@
 
 struct dma_fence_chain {
 	struct dma_fence base;
-	spinlock_t lock;
 	struct dma_fence *prev;
 	u64 prev_seqno;
 	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-	struct irq_work work;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
 };
 
-enum seqno_fence_condition {
-	SEQNO_FENCE_WAIT_GEQUAL = 0,
-	SEQNO_FENCE_WAIT_NONZERO = 1,
-};
-
-struct seqno_fence {
-	struct dma_fence base;
-	const struct dma_fence_ops *ops;
-	struct dma_buf *sync_buf;
-	uint32_t seqno_ofs;
-	enum seqno_fence_condition condition;
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
 };
 
 struct sync_file {
@@ -84813,2412 +98619,189 @@
 	__u64 sync_fence_info;
 };
 
-struct scsi_lun {
-	__u8 scsi_lun[8];
+struct cxl_hdm {
+	struct cxl_component_regs regs;
+	unsigned int decoder_count;
+	unsigned int target_count;
+	unsigned int interleave_mask;
+	struct cxl_port *port;
 };
 
-struct nvme_user_io {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nblocks;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 slba;
-	__u32 dsmgmt;
-	__u32 reftag;
-	__u16 apptag;
-	__u16 appmask;
-};
+typedef void (*activate_complete)(void *, int);
 
-struct nvme_passthru_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 result;
-};
-
-struct nvme_passthru_cmd64 {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 rsvd2;
-	__u64 result;
-};
-
-struct nvme_id_power_state {
-	__le16 max_power;
-	__u8 rsvd2;
-	__u8 flags;
-	__le32 entry_lat;
-	__le32 exit_lat;
-	__u8 read_tput;
-	__u8 read_lat;
-	__u8 write_tput;
-	__u8 write_lat;
-	__le16 idle_power;
-	__u8 idle_scale;
-	__u8 rsvd19;
-	__le16 active_power;
-	__u8 active_work_scale;
-	__u8 rsvd23[9];
-};
-
-enum {
-	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
-	NVME_PS_FLAGS_NON_OP_STATE = 2,
-};
-
-enum nvme_ctrl_attr {
-	NVME_CTRL_ATTR_HID_128_BIT = 1,
-	NVME_CTRL_ATTR_TBKAS = 64,
-};
-
-struct nvme_id_ctrl {
-	__le16 vid;
-	__le16 ssvid;
-	char sn[20];
-	char mn[40];
-	char fr[8];
-	__u8 rab;
-	__u8 ieee[3];
-	__u8 cmic;
-	__u8 mdts;
-	__le16 cntlid;
-	__le32 ver;
-	__le32 rtd3r;
-	__le32 rtd3e;
-	__le32 oaes;
-	__le32 ctratt;
-	__u8 rsvd100[28];
-	__le16 crdt1;
-	__le16 crdt2;
-	__le16 crdt3;
-	__u8 rsvd134[122];
-	__le16 oacs;
-	__u8 acl;
-	__u8 aerl;
-	__u8 frmw;
-	__u8 lpa;
-	__u8 elpe;
-	__u8 npss;
-	__u8 avscc;
-	__u8 apsta;
-	__le16 wctemp;
-	__le16 cctemp;
-	__le16 mtfa;
-	__le32 hmpre;
-	__le32 hmmin;
-	__u8 tnvmcap[16];
-	__u8 unvmcap[16];
-	__le32 rpmbs;
-	__le16 edstt;
-	__u8 dsto;
-	__u8 fwug;
-	__le16 kas;
-	__le16 hctma;
-	__le16 mntmt;
-	__le16 mxtmt;
-	__le32 sanicap;
-	__le32 hmminds;
-	__le16 hmmaxd;
-	__u8 rsvd338[4];
-	__u8 anatt;
-	__u8 anacap;
-	__le32 anagrpmax;
-	__le32 nanagrpid;
-	__u8 rsvd352[160];
-	__u8 sqes;
-	__u8 cqes;
-	__le16 maxcmd;
-	__le32 nn;
-	__le16 oncs;
-	__le16 fuses;
-	__u8 fna;
-	__u8 vwc;
-	__le16 awun;
-	__le16 awupf;
-	__u8 nvscc;
-	__u8 nwpc;
-	__le16 acwu;
-	__u8 rsvd534[2];
-	__le32 sgls;
-	__le32 mnan;
-	__u8 rsvd544[224];
-	char subnqn[256];
-	__u8 rsvd1024[768];
-	__le32 ioccsz;
-	__le32 iorcsz;
-	__le16 icdoff;
-	__u8 ctrattr;
-	__u8 msdbd;
-	__u8 rsvd1804[244];
-	struct nvme_id_power_state psd[32];
-	__u8 vs[1024];
-};
-
-enum {
-	NVME_CTRL_CMIC_MULTI_CTRL = 2,
-	NVME_CTRL_CMIC_ANA = 8,
-	NVME_CTRL_ONCS_COMPARE = 1,
-	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
-	NVME_CTRL_ONCS_DSM = 4,
-	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
-	NVME_CTRL_ONCS_RESERVATIONS = 32,
-	NVME_CTRL_ONCS_TIMESTAMP = 64,
-	NVME_CTRL_VWC_PRESENT = 1,
-	NVME_CTRL_OACS_SEC_SUPP = 1,
-	NVME_CTRL_OACS_DIRECTIVES = 32,
-	NVME_CTRL_OACS_DBBUF_SUPP = 256,
-	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
-	NVME_CTRL_CTRATT_128_ID = 1,
-	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
-	NVME_CTRL_CTRATT_NVM_SETS = 4,
-	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
-	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
-	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
-	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
-	NVME_CTRL_CTRATT_UUID_LIST = 512,
-};
-
-struct nvme_lbaf {
-	__le16 ms;
-	__u8 ds;
-	__u8 rp;
-};
-
-struct nvme_id_ns {
-	__le64 nsze;
-	__le64 ncap;
-	__le64 nuse;
-	__u8 nsfeat;
-	__u8 nlbaf;
-	__u8 flbas;
-	__u8 mc;
-	__u8 dpc;
-	__u8 dps;
-	__u8 nmic;
-	__u8 rescap;
-	__u8 fpi;
-	__u8 dlfeat;
-	__le16 nawun;
-	__le16 nawupf;
-	__le16 nacwu;
-	__le16 nabsn;
-	__le16 nabo;
-	__le16 nabspf;
-	__le16 noiob;
-	__u8 nvmcap[16];
-	__le16 npwg;
-	__le16 npwa;
-	__le16 npdg;
-	__le16 npda;
-	__le16 nows;
-	__u8 rsvd74[18];
-	__le32 anagrpid;
-	__u8 rsvd96[3];
-	__u8 nsattr;
-	__le16 nvmsetid;
-	__le16 endgid;
-	__u8 nguid[16];
-	__u8 eui64[8];
-	struct nvme_lbaf lbaf[16];
-	__u8 rsvd192[192];
-	__u8 vs[3712];
-};
-
-enum {
-	NVME_ID_CNS_NS = 0,
-	NVME_ID_CNS_CTRL = 1,
-	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
-	NVME_ID_CNS_NS_DESC_LIST = 3,
-	NVME_ID_CNS_CS_NS = 5,
-	NVME_ID_CNS_CS_CTRL = 6,
-	NVME_ID_CNS_NS_PRESENT_LIST = 16,
-	NVME_ID_CNS_NS_PRESENT = 17,
-	NVME_ID_CNS_CTRL_NS_LIST = 18,
-	NVME_ID_CNS_CTRL_LIST = 19,
-	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
-	NVME_ID_CNS_NS_GRANULARITY = 22,
-	NVME_ID_CNS_UUID_LIST = 23,
-};
-
-enum {
-	NVME_CSI_NVM = 0,
-	NVME_CSI_ZNS = 2,
-};
-
-enum {
-	NVME_DIR_IDENTIFY = 0,
-	NVME_DIR_STREAMS = 1,
-	NVME_DIR_SND_ID_OP_ENABLE = 1,
-	NVME_DIR_SND_ST_OP_REL_ID = 1,
-	NVME_DIR_SND_ST_OP_REL_RSC = 2,
-	NVME_DIR_RCV_ID_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_STATUS = 2,
-	NVME_DIR_RCV_ST_OP_RESOURCE = 3,
-	NVME_DIR_ENDIR = 1,
-};
-
-enum {
-	NVME_NS_FEAT_THIN = 1,
-	NVME_NS_FEAT_ATOMICS = 2,
-	NVME_NS_FEAT_IO_OPT = 16,
-	NVME_NS_ATTR_RO = 1,
-	NVME_NS_FLBAS_LBA_MASK = 15,
-	NVME_NS_FLBAS_META_EXT = 16,
-	NVME_NS_NMIC_SHARED = 1,
-	NVME_LBAF_RP_BEST = 0,
-	NVME_LBAF_RP_BETTER = 1,
-	NVME_LBAF_RP_GOOD = 2,
-	NVME_LBAF_RP_DEGRADED = 3,
-	NVME_NS_DPC_PI_LAST = 16,
-	NVME_NS_DPC_PI_FIRST = 8,
-	NVME_NS_DPC_PI_TYPE3 = 4,
-	NVME_NS_DPC_PI_TYPE2 = 2,
-	NVME_NS_DPC_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_FIRST = 8,
-	NVME_NS_DPS_PI_MASK = 7,
-	NVME_NS_DPS_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_TYPE2 = 2,
-	NVME_NS_DPS_PI_TYPE3 = 3,
-};
-
-struct nvme_ns_id_desc {
-	__u8 nidt;
-	__u8 nidl;
-	__le16 reserved;
-};
-
-enum {
-	NVME_NIDT_EUI64 = 1,
-	NVME_NIDT_NGUID = 2,
-	NVME_NIDT_UUID = 3,
-	NVME_NIDT_CSI = 4,
-};
-
-struct nvme_fw_slot_info_log {
-	__u8 afi;
-	__u8 rsvd1[7];
-	__le64 frs[7];
-	__u8 rsvd64[448];
-};
-
-enum {
-	NVME_CMD_EFFECTS_CSUPP = 1,
-	NVME_CMD_EFFECTS_LBCC = 2,
-	NVME_CMD_EFFECTS_NCC = 4,
-	NVME_CMD_EFFECTS_NIC = 8,
-	NVME_CMD_EFFECTS_CCC = 16,
-	NVME_CMD_EFFECTS_CSE_MASK = 196608,
-	NVME_CMD_EFFECTS_UUID_SEL = 524288,
-};
-
-struct nvme_effects_log {
-	__le32 acs[256];
-	__le32 iocs[256];
-	__u8 resv[2048];
-};
-
-enum {
-	NVME_AER_ERROR = 0,
-	NVME_AER_SMART = 1,
-	NVME_AER_NOTICE = 2,
-	NVME_AER_CSS = 6,
-	NVME_AER_VS = 7,
-};
-
-enum {
-	NVME_AER_NOTICE_NS_CHANGED = 0,
-	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
-	NVME_AER_NOTICE_ANA = 3,
-	NVME_AER_NOTICE_DISC_CHANGED = 240,
-};
-
-enum {
-	NVME_AEN_CFG_NS_ATTR = 256,
-	NVME_AEN_CFG_FW_ACT = 512,
-	NVME_AEN_CFG_ANA_CHANGE = 2048,
-	NVME_AEN_CFG_DISC_CHANGE = 2147483648,
-};
-
-enum nvme_opcode {
-	nvme_cmd_flush = 0,
-	nvme_cmd_write = 1,
-	nvme_cmd_read = 2,
-	nvme_cmd_write_uncor = 4,
-	nvme_cmd_compare = 5,
-	nvme_cmd_write_zeroes = 8,
-	nvme_cmd_dsm = 9,
-	nvme_cmd_verify = 12,
-	nvme_cmd_resv_register = 13,
-	nvme_cmd_resv_report = 14,
-	nvme_cmd_resv_acquire = 17,
-	nvme_cmd_resv_release = 21,
-	nvme_cmd_zone_mgmt_send = 121,
-	nvme_cmd_zone_mgmt_recv = 122,
-	nvme_cmd_zone_append = 125,
-};
-
-struct nvme_sgl_desc {
-	__le64 addr;
-	__le32 length;
-	__u8 rsvd[3];
-	__u8 type;
-};
-
-struct nvme_keyed_sgl_desc {
-	__le64 addr;
-	__u8 length[3];
-	__u8 key[4];
-	__u8 type;
-};
-
-union nvme_data_ptr {
-	struct {
-		__le64 prp1;
-		__le64 prp2;
-	};
-	struct nvme_sgl_desc sgl;
-	struct nvme_keyed_sgl_desc ksgl;
-};
-
-enum {
-	NVME_CMD_FUSE_FIRST = 1,
-	NVME_CMD_FUSE_SECOND = 2,
-	NVME_CMD_SGL_METABUF = 64,
-	NVME_CMD_SGL_METASEG = 128,
-	NVME_CMD_SGL_ALL = 192,
-};
-
-struct nvme_common_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le32 cdw10;
-	__le32 cdw11;
-	__le32 cdw12;
-	__le32 cdw13;
-	__le32 cdw14;
-	__le32 cdw15;
-};
-
-struct nvme_rw_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum {
-	NVME_RW_LR = 32768,
-	NVME_RW_FUA = 16384,
-	NVME_RW_APPEND_PIREMAP = 512,
-	NVME_RW_DSM_FREQ_UNSPEC = 0,
-	NVME_RW_DSM_FREQ_TYPICAL = 1,
-	NVME_RW_DSM_FREQ_RARE = 2,
-	NVME_RW_DSM_FREQ_READS = 3,
-	NVME_RW_DSM_FREQ_WRITES = 4,
-	NVME_RW_DSM_FREQ_RW = 5,
-	NVME_RW_DSM_FREQ_ONCE = 6,
-	NVME_RW_DSM_FREQ_PREFETCH = 7,
-	NVME_RW_DSM_FREQ_TEMP = 8,
-	NVME_RW_DSM_LATENCY_NONE = 0,
-	NVME_RW_DSM_LATENCY_IDLE = 16,
-	NVME_RW_DSM_LATENCY_NORM = 32,
-	NVME_RW_DSM_LATENCY_LOW = 48,
-	NVME_RW_DSM_SEQ_REQ = 64,
-	NVME_RW_DSM_COMPRESSED = 128,
-	NVME_RW_PRINFO_PRCHK_REF = 1024,
-	NVME_RW_PRINFO_PRCHK_APP = 2048,
-	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
-	NVME_RW_PRINFO_PRACT = 8192,
-	NVME_RW_DTYPE_STREAMS = 16,
-};
-
-struct nvme_dsm_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 nr;
-	__le32 attributes;
-	__u32 rsvd12[4];
-};
-
-enum {
-	NVME_DSMGMT_IDR = 1,
-	NVME_DSMGMT_IDW = 2,
-	NVME_DSMGMT_AD = 4,
-};
-
-struct nvme_dsm_range {
-	__le32 cattr;
-	__le32 nlb;
-	__le64 slba;
-};
-
-struct nvme_write_zeroes_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum nvme_zone_mgmt_action {
-	NVME_ZONE_CLOSE = 1,
-	NVME_ZONE_FINISH = 2,
-	NVME_ZONE_OPEN = 3,
-	NVME_ZONE_RESET = 4,
-	NVME_ZONE_OFFLINE = 5,
-	NVME_ZONE_SET_DESC_EXT = 16,
-};
-
-struct nvme_zone_mgmt_send_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 cdw12;
-	__u8 zsa;
-	__u8 select_all;
-	__u8 rsvd13[2];
-	__le32 cdw14[2];
-};
-
-struct nvme_zone_mgmt_recv_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 numd;
-	__u8 zra;
-	__u8 zrasf;
-	__u8 pr;
-	__u8 rsvd13;
-	__le32 cdw14[2];
-};
-
-struct nvme_feat_auto_pst {
-	__le64 entries[32];
-};
-
-struct nvme_feat_host_behavior {
-	__u8 acre;
-	__u8 resv1[511];
-};
-
-enum {
-	NVME_ENABLE_ACRE = 1,
-};
-
-enum nvme_admin_opcode {
-	nvme_admin_delete_sq = 0,
-	nvme_admin_create_sq = 1,
-	nvme_admin_get_log_page = 2,
-	nvme_admin_delete_cq = 4,
-	nvme_admin_create_cq = 5,
-	nvme_admin_identify = 6,
-	nvme_admin_abort_cmd = 8,
-	nvme_admin_set_features = 9,
-	nvme_admin_get_features = 10,
-	nvme_admin_async_event = 12,
-	nvme_admin_ns_mgmt = 13,
-	nvme_admin_activate_fw = 16,
-	nvme_admin_download_fw = 17,
-	nvme_admin_dev_self_test = 20,
-	nvme_admin_ns_attach = 21,
-	nvme_admin_keep_alive = 24,
-	nvme_admin_directive_send = 25,
-	nvme_admin_directive_recv = 26,
-	nvme_admin_virtual_mgmt = 28,
-	nvme_admin_nvme_mi_send = 29,
-	nvme_admin_nvme_mi_recv = 30,
-	nvme_admin_dbbuf = 124,
-	nvme_admin_format_nvm = 128,
-	nvme_admin_security_send = 129,
-	nvme_admin_security_recv = 130,
-	nvme_admin_sanitize_nvm = 132,
-	nvme_admin_get_lba_status = 134,
-	nvme_admin_vendor_start = 192,
-};
-
-enum {
-	NVME_QUEUE_PHYS_CONTIG = 1,
-	NVME_CQ_IRQ_ENABLED = 2,
-	NVME_SQ_PRIO_URGENT = 0,
-	NVME_SQ_PRIO_HIGH = 2,
-	NVME_SQ_PRIO_MEDIUM = 4,
-	NVME_SQ_PRIO_LOW = 6,
-	NVME_FEAT_ARBITRATION = 1,
-	NVME_FEAT_POWER_MGMT = 2,
-	NVME_FEAT_LBA_RANGE = 3,
-	NVME_FEAT_TEMP_THRESH = 4,
-	NVME_FEAT_ERR_RECOVERY = 5,
-	NVME_FEAT_VOLATILE_WC = 6,
-	NVME_FEAT_NUM_QUEUES = 7,
-	NVME_FEAT_IRQ_COALESCE = 8,
-	NVME_FEAT_IRQ_CONFIG = 9,
-	NVME_FEAT_WRITE_ATOMIC = 10,
-	NVME_FEAT_ASYNC_EVENT = 11,
-	NVME_FEAT_AUTO_PST = 12,
-	NVME_FEAT_HOST_MEM_BUF = 13,
-	NVME_FEAT_TIMESTAMP = 14,
-	NVME_FEAT_KATO = 15,
-	NVME_FEAT_HCTM = 16,
-	NVME_FEAT_NOPSC = 17,
-	NVME_FEAT_RRL = 18,
-	NVME_FEAT_PLM_CONFIG = 19,
-	NVME_FEAT_PLM_WINDOW = 20,
-	NVME_FEAT_HOST_BEHAVIOR = 22,
-	NVME_FEAT_SANITIZE = 23,
-	NVME_FEAT_SW_PROGRESS = 128,
-	NVME_FEAT_HOST_ID = 129,
-	NVME_FEAT_RESV_MASK = 130,
-	NVME_FEAT_RESV_PERSIST = 131,
-	NVME_FEAT_WRITE_PROTECT = 132,
-	NVME_FEAT_VENDOR_START = 192,
-	NVME_FEAT_VENDOR_END = 255,
-	NVME_LOG_ERROR = 1,
-	NVME_LOG_SMART = 2,
-	NVME_LOG_FW_SLOT = 3,
-	NVME_LOG_CHANGED_NS = 4,
-	NVME_LOG_CMD_EFFECTS = 5,
-	NVME_LOG_DEVICE_SELF_TEST = 6,
-	NVME_LOG_TELEMETRY_HOST = 7,
-	NVME_LOG_TELEMETRY_CTRL = 8,
-	NVME_LOG_ENDURANCE_GROUP = 9,
-	NVME_LOG_ANA = 12,
-	NVME_LOG_DISC = 112,
-	NVME_LOG_RESERVATION = 128,
-	NVME_FWACT_REPL = 0,
-	NVME_FWACT_REPL_ACTV = 8,
-	NVME_FWACT_ACTV = 16,
-};
-
-struct nvme_identify {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 cns;
-	__u8 rsvd3;
-	__le16 ctrlid;
-	__u8 rsvd11[3];
-	__u8 csi;
-	__u32 rsvd12[4];
-};
-
-struct nvme_features {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 fid;
-	__le32 dword11;
-	__le32 dword12;
-	__le32 dword13;
-	__le32 dword14;
-	__le32 dword15;
-};
-
-struct nvme_create_cq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 cqid;
-	__le16 qsize;
-	__le16 cq_flags;
-	__le16 irq_vector;
-	__u32 rsvd12[4];
-};
-
-struct nvme_create_sq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 sqid;
-	__le16 qsize;
-	__le16 sq_flags;
-	__le16 cqid;
-	__u32 rsvd12[4];
-};
-
-struct nvme_delete_queue {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 qid;
-	__u16 rsvd10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_abort_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 sqid;
-	__u16 cid;
-	__u32 rsvd11[5];
-};
-
-struct nvme_download_firmware {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__le32 offset;
-	__u32 rsvd12[4];
-};
-
-struct nvme_format_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[4];
-	__le32 cdw10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_get_log_page_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 lid;
-	__u8 lsp;
-	__le16 numdl;
-	__le16 numdu;
-	__u16 rsvd11;
-	union {
-		struct {
-			__le32 lpol;
-			__le32 lpou;
-		};
-		__le64 lpo;
-	};
-	__u8 rsvd14[3];
-	__u8 csi;
-	__u32 rsvd15;
-};
-
-struct nvme_directive_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__u8 doper;
-	__u8 dtype;
-	__le16 dspec;
-	__u8 endir;
-	__u8 tdtype;
-	__u16 rsvd15;
-	__u32 rsvd16[3];
-};
-
-enum nvmf_fabrics_opcode {
-	nvme_fabrics_command = 127,
-};
-
-enum nvmf_capsule_command {
-	nvme_fabrics_type_property_set = 0,
-	nvme_fabrics_type_connect = 1,
-	nvme_fabrics_type_property_get = 4,
-};
-
-struct nvmf_common_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 ts[24];
-};
-
-struct nvmf_connect_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[19];
-	union nvme_data_ptr dptr;
-	__le16 recfmt;
-	__le16 qid;
-	__le16 sqsize;
-	__u8 cattr;
-	__u8 resv3;
-	__le32 kato;
-	__u8 resv4[12];
-};
-
-struct nvmf_property_set_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__le64 value;
-	__u8 resv4[8];
-};
-
-struct nvmf_property_get_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__u8 resv4[16];
-};
-
-struct nvme_dbbuf {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd12[6];
-};
-
-struct streams_directive_params {
-	__le16 msl;
-	__le16 nssa;
-	__le16 nsso;
-	__u8 rsvd[10];
-	__le32 sws;
-	__le16 sgs;
-	__le16 nsa;
-	__le16 nso;
-	__u8 rsvd2[6];
-};
-
-struct nvme_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_rw_command rw;
-		struct nvme_identify identify;
-		struct nvme_features features;
-		struct nvme_create_cq create_cq;
-		struct nvme_create_sq create_sq;
-		struct nvme_delete_queue delete_queue;
-		struct nvme_download_firmware dlfw;
-		struct nvme_format_cmd format;
-		struct nvme_dsm_cmd dsm;
-		struct nvme_write_zeroes_cmd write_zeroes;
-		struct nvme_zone_mgmt_send_cmd zms;
-		struct nvme_zone_mgmt_recv_cmd zmr;
-		struct nvme_abort_cmd abort;
-		struct nvme_get_log_page_command get_log_page;
-		struct nvmf_common_command fabrics;
-		struct nvmf_connect_command connect;
-		struct nvmf_property_set_command prop_set;
-		struct nvmf_property_get_command prop_get;
-		struct nvme_dbbuf dbbuf;
-		struct nvme_directive_cmd directive;
-	};
-};
-
-enum {
-	NVME_SC_SUCCESS = 0,
-	NVME_SC_INVALID_OPCODE = 1,
-	NVME_SC_INVALID_FIELD = 2,
-	NVME_SC_CMDID_CONFLICT = 3,
-	NVME_SC_DATA_XFER_ERROR = 4,
-	NVME_SC_POWER_LOSS = 5,
-	NVME_SC_INTERNAL = 6,
-	NVME_SC_ABORT_REQ = 7,
-	NVME_SC_ABORT_QUEUE = 8,
-	NVME_SC_FUSED_FAIL = 9,
-	NVME_SC_FUSED_MISSING = 10,
-	NVME_SC_INVALID_NS = 11,
-	NVME_SC_CMD_SEQ_ERROR = 12,
-	NVME_SC_SGL_INVALID_LAST = 13,
-	NVME_SC_SGL_INVALID_COUNT = 14,
-	NVME_SC_SGL_INVALID_DATA = 15,
-	NVME_SC_SGL_INVALID_METADATA = 16,
-	NVME_SC_SGL_INVALID_TYPE = 17,
-	NVME_SC_SGL_INVALID_OFFSET = 22,
-	NVME_SC_SGL_INVALID_SUBTYPE = 23,
-	NVME_SC_SANITIZE_FAILED = 28,
-	NVME_SC_SANITIZE_IN_PROGRESS = 29,
-	NVME_SC_NS_WRITE_PROTECTED = 32,
-	NVME_SC_CMD_INTERRUPTED = 33,
-	NVME_SC_LBA_RANGE = 128,
-	NVME_SC_CAP_EXCEEDED = 129,
-	NVME_SC_NS_NOT_READY = 130,
-	NVME_SC_RESERVATION_CONFLICT = 131,
-	NVME_SC_CQ_INVALID = 256,
-	NVME_SC_QID_INVALID = 257,
-	NVME_SC_QUEUE_SIZE = 258,
-	NVME_SC_ABORT_LIMIT = 259,
-	NVME_SC_ABORT_MISSING = 260,
-	NVME_SC_ASYNC_LIMIT = 261,
-	NVME_SC_FIRMWARE_SLOT = 262,
-	NVME_SC_FIRMWARE_IMAGE = 263,
-	NVME_SC_INVALID_VECTOR = 264,
-	NVME_SC_INVALID_LOG_PAGE = 265,
-	NVME_SC_INVALID_FORMAT = 266,
-	NVME_SC_FW_NEEDS_CONV_RESET = 267,
-	NVME_SC_INVALID_QUEUE = 268,
-	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
-	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
-	NVME_SC_FEATURE_NOT_PER_NS = 271,
-	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
-	NVME_SC_FW_NEEDS_RESET = 273,
-	NVME_SC_FW_NEEDS_MAX_TIME = 274,
-	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
-	NVME_SC_OVERLAPPING_RANGE = 276,
-	NVME_SC_NS_INSUFFICIENT_CAP = 277,
-	NVME_SC_NS_ID_UNAVAILABLE = 278,
-	NVME_SC_NS_ALREADY_ATTACHED = 280,
-	NVME_SC_NS_IS_PRIVATE = 281,
-	NVME_SC_NS_NOT_ATTACHED = 282,
-	NVME_SC_THIN_PROV_NOT_SUPP = 283,
-	NVME_SC_CTRL_LIST_INVALID = 284,
-	NVME_SC_BP_WRITE_PROHIBITED = 286,
-	NVME_SC_PMR_SAN_PROHIBITED = 291,
-	NVME_SC_BAD_ATTRIBUTES = 384,
-	NVME_SC_INVALID_PI = 385,
-	NVME_SC_READ_ONLY = 386,
-	NVME_SC_ONCS_NOT_SUPPORTED = 387,
-	NVME_SC_CONNECT_FORMAT = 384,
-	NVME_SC_CONNECT_CTRL_BUSY = 385,
-	NVME_SC_CONNECT_INVALID_PARAM = 386,
-	NVME_SC_CONNECT_RESTART_DISC = 387,
-	NVME_SC_CONNECT_INVALID_HOST = 388,
-	NVME_SC_DISCOVERY_RESTART = 400,
-	NVME_SC_AUTH_REQUIRED = 401,
-	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
-	NVME_SC_ZONE_FULL = 441,
-	NVME_SC_ZONE_READ_ONLY = 442,
-	NVME_SC_ZONE_OFFLINE = 443,
-	NVME_SC_ZONE_INVALID_WRITE = 444,
-	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
-	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
-	NVME_SC_ZONE_INVALID_TRANSITION = 447,
-	NVME_SC_WRITE_FAULT = 640,
-	NVME_SC_READ_ERROR = 641,
-	NVME_SC_GUARD_CHECK = 642,
-	NVME_SC_APPTAG_CHECK = 643,
-	NVME_SC_REFTAG_CHECK = 644,
-	NVME_SC_COMPARE_FAILED = 645,
-	NVME_SC_ACCESS_DENIED = 646,
-	NVME_SC_UNWRITTEN_BLOCK = 647,
-	NVME_SC_ANA_PERSISTENT_LOSS = 769,
-	NVME_SC_ANA_INACCESSIBLE = 770,
-	NVME_SC_ANA_TRANSITION = 771,
-	NVME_SC_HOST_PATH_ERROR = 880,
-	NVME_SC_HOST_ABORTED_CMD = 881,
-	NVME_SC_CRD = 6144,
-	NVME_SC_DNR = 16384,
-};
-
-union nvme_result {
-	__le16 u16;
-	__le32 u32;
-	__le64 u64;
-};
-
-enum nvme_quirks {
-	NVME_QUIRK_STRIPE_SIZE = 1,
-	NVME_QUIRK_IDENTIFY_CNS = 2,
-	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
-	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
-	NVME_QUIRK_NO_APST = 16,
-	NVME_QUIRK_NO_DEEPEST_PS = 32,
-	NVME_QUIRK_LIGHTNVM = 64,
-	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
-	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
-	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
-	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
-	NVME_QUIRK_SINGLE_VECTOR = 2048,
-	NVME_QUIRK_128_BYTES_SQES = 4096,
-	NVME_QUIRK_SHARED_TAGS = 8192,
-	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
-	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
-};
-
-struct nvme_ctrl;
-
-struct nvme_request {
-	struct nvme_command *cmd;
-	union nvme_result result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	struct nvme_ctrl *ctrl;
-};
-
-enum nvme_ctrl_state {
-	NVME_CTRL_NEW = 0,
-	NVME_CTRL_LIVE = 1,
-	NVME_CTRL_RESETTING = 2,
-	NVME_CTRL_CONNECTING = 3,
-	NVME_CTRL_DELETING = 4,
-	NVME_CTRL_DELETING_NOIO = 5,
-	NVME_CTRL_DEAD = 6,
-};
-
-struct opal_dev;
-
-struct nvme_fault_inject {};
-
-struct nvme_ctrl_ops;
-
-struct nvme_subsystem;
-
-struct nvmf_ctrl_options;
-
-struct nvme_ctrl {
-	bool comp_seen;
-	enum nvme_ctrl_state state;
-	bool identified;
-	spinlock_t lock;
-	struct mutex scan_lock;
-	const struct nvme_ctrl_ops *ops;
-	struct request_queue *admin_q;
-	struct request_queue *connect_q;
-	struct request_queue *fabrics_q;
-	struct device *dev;
-	int instance;
-	int numa_node;
-	struct blk_mq_tag_set *tagset;
-	struct blk_mq_tag_set *admin_tagset;
-	struct list_head namespaces;
-	struct rw_semaphore namespaces_rwsem;
-	struct device ctrl_device;
-	struct device *device;
-	struct cdev cdev;
-	struct work_struct reset_work;
-	struct work_struct delete_work;
-	wait_queue_head_t state_wq;
-	struct nvme_subsystem *subsys;
-	struct list_head subsys_entry;
-	struct opal_dev *opal_dev;
-	char name[12];
-	u16 cntlid;
-	u32 ctrl_config;
-	u16 mtfa;
-	u32 queue_count;
-	u64 cap;
-	u32 max_hw_sectors;
-	u32 max_segments;
-	u32 max_integrity_segments;
-	u32 max_zone_append;
-	u16 crdt[3];
-	u16 oncs;
-	u16 oacs;
-	u16 nssa;
-	u16 nr_streams;
-	u16 sqsize;
-	u32 max_namespaces;
-	atomic_t abort_limit;
-	u8 vwc;
-	u32 vs;
-	u32 sgls;
-	u16 kas;
-	u8 npss;
-	u8 apsta;
-	u16 wctemp;
-	u16 cctemp;
-	u32 oaes;
-	u32 aen_result;
-	u32 ctratt;
-	unsigned int shutdown_timeout;
-	unsigned int kato;
-	bool subsystem;
-	long unsigned int quirks;
-	struct nvme_id_power_state psd[32];
-	struct nvme_effects_log *effects;
-	struct xarray cels;
-	struct work_struct scan_work;
-	struct work_struct async_event_work;
-	struct delayed_work ka_work;
-	struct nvme_command ka_cmd;
-	struct work_struct fw_act_work;
-	long unsigned int events;
-	u64 ps_max_latency_us;
-	bool apst_enabled;
-	u32 hmpre;
-	u32 hmmin;
-	u32 hmminds;
-	u16 hmmaxd;
-	u32 ioccsz;
-	u32 iorcsz;
-	u16 icdoff;
-	u16 maxcmd;
-	int nr_reconnects;
-	struct nvmf_ctrl_options *opts;
-	struct page *discard_page;
-	long unsigned int discard_page_busy;
-	struct nvme_fault_inject fault_inject;
-};
-
-enum {
-	NVME_REQ_CANCELLED = 1,
-	NVME_REQ_USERCMD = 2,
-};
-
-struct nvme_ctrl_ops {
-	const char *name;
+struct scsi_device_handler {
+	struct list_head list;
 	struct module *module;
-	unsigned int flags;
-	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
-	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
-	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
-	void (*free_ctrl)(struct nvme_ctrl *);
-	void (*submit_async_event)(struct nvme_ctrl *);
-	void (*delete_ctrl)(struct nvme_ctrl *);
-	int (*get_address)(struct nvme_ctrl *, char *, int);
-};
-
-struct nvme_subsystem {
-	int instance;
-	struct device dev;
-	struct kref ref;
-	struct list_head entry;
-	struct mutex lock;
-	struct list_head ctrls;
-	struct list_head nsheads;
-	char subnqn[223];
-	char serial[20];
-	char model[40];
-	char firmware_rev[8];
-	u8 cmic;
-	u16 vendor_id;
-	u16 awupf;
-	struct ida ns_ida;
-};
-
-struct nvmf_host;
-
-struct nvmf_ctrl_options {
-	unsigned int mask;
-	char *transport;
-	char *subsysnqn;
-	char *traddr;
-	char *trsvcid;
-	char *host_traddr;
-	size_t queue_size;
-	unsigned int nr_io_queues;
-	unsigned int reconnect_delay;
-	bool discovery_nqn;
-	bool duplicate_connect;
-	unsigned int kato;
-	struct nvmf_host *host;
-	int max_reconnects;
-	bool disable_sqflow;
-	bool hdr_digest;
-	bool data_digest;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-	int tos;
-};
-
-struct nvme_ns_ids {
-	u8 eui64[8];
-	u8 nguid[16];
-	uuid_t uuid;
-	u8 csi;
-};
-
-struct nvme_ns_head {
-	struct list_head list;
-	struct srcu_struct srcu;
-	struct nvme_subsystem *subsys;
-	unsigned int ns_id;
-	struct nvme_ns_ids ids;
-	struct list_head entry;
-	struct kref ref;
-	bool shared;
-	int instance;
-	struct nvme_effects_log *effects;
-};
-
-enum nvme_ns_features {
-	NVME_NS_EXT_LBAS = 1,
-	NVME_NS_METADATA_SUPPORTED = 2,
-};
-
-struct nvme_ns {
-	struct list_head list;
-	struct nvme_ctrl *ctrl;
-	struct request_queue *queue;
-	struct gendisk *disk;
-	struct list_head siblings;
-	struct nvm_dev *ndev;
-	struct kref kref;
-	struct nvme_ns_head *head;
-	int lba_shift;
-	u16 ms;
-	u16 sgs;
-	u32 sws;
-	u8 pi_type;
-	u64 zsze;
-	long unsigned int features;
-	long unsigned int flags;
-	struct nvme_fault_inject fault_inject;
-};
-
-struct nvmf_host {
-	struct kref ref;
-	struct list_head list;
-	char nqn[223];
-	uuid_t id;
-};
-
-struct trace_event_raw_nvme_setup_cmd {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	u8 opcode;
-	u8 flags;
-	u8 fctype;
-	u16 cid;
-	u32 nsid;
-	u64 metadata;
-	u8 cdw10[24];
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_complete_rq {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	int cid;
-	u64 result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_async_event {
-	struct trace_entry ent;
-	int ctrl_id;
-	u32 result;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_sq {
-	struct trace_entry ent;
-	int ctrl_id;
-	char disk[32];
-	int qid;
-	u16 sq_head;
-	u16 sq_tail;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nvme_setup_cmd {};
-
-struct trace_event_data_offsets_nvme_complete_rq {};
-
-struct trace_event_data_offsets_nvme_async_event {};
-
-struct trace_event_data_offsets_nvme_sq {};
-
-typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
-
-typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
-
-typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
-
-typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
-
-enum nvme_disposition {
-	COMPLETE = 0,
-	RETRY = 1,
-	FAILOVER = 2,
-};
-
-struct nvme_core_quirk_entry {
-	u16 vid;
-	const char *mn;
-	const char *fr;
-	long unsigned int quirks;
-};
-
-struct nvm_user_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nppas;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 ppa_list;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 status;
-	__u32 result;
-	__u32 rsvd3[3];
-};
-
-struct nvm_passthru_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u8 rsvd[2];
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 ppa_list;
-	__u16 nppas;
-	__u16 control;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u64 status;
-	__u32 result;
-	__u32 timeout_ms;
-};
-
-enum nvme_nvm_admin_opcode {
-	nvme_nvm_admin_identity = 226,
-	nvme_nvm_admin_get_bb_tbl = 242,
-	nvme_nvm_admin_set_bb_tbl = 241,
-};
-
-enum nvme_nvm_log_page {
-	NVME_NVM_LOG_REPORT_CHUNK = 202,
-};
-
-struct nvme_nvm_ph_rw {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_erase_blk {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_identity {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd11[6];
-};
-
-struct nvme_nvm_getbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__u32 rsvd4[4];
-};
-
-struct nvme_nvm_setbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 nlb;
-	__u8 value;
-	__u8 rsvd3;
-	__u32 rsvd4[3];
-};
-
-struct nvme_nvm_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_nvm_ph_rw ph_rw;
-		struct nvme_nvm_erase_blk erase;
-		struct nvme_nvm_identity identity;
-		struct nvme_nvm_getbbtbl get_bb;
-		struct nvme_nvm_setbbtbl set_bb;
-	};
-};
-
-struct nvme_nvm_id12_grp {
-	__u8 mtype;
-	__u8 fmtype;
-	__le16 res16;
-	__u8 num_ch;
-	__u8 num_lun;
-	__u8 num_pln;
-	__u8 rsvd1;
-	__le16 num_chk;
-	__le16 num_pg;
-	__le16 fpg_sz;
-	__le16 csecs;
-	__le16 sos;
-	__le16 rsvd2;
-	__le32 trdt;
-	__le32 trdm;
-	__le32 tprt;
-	__le32 tprm;
-	__le32 tbet;
-	__le32 tbem;
-	__le32 mpos;
-	__le32 mccap;
-	__le16 cpar;
-	__u8 reserved[906];
-};
-
-struct nvme_nvm_id12_addrf {
-	__u8 ch_offset;
-	__u8 ch_len;
-	__u8 lun_offset;
-	__u8 lun_len;
-	__u8 pln_offset;
-	__u8 pln_len;
-	__u8 blk_offset;
-	__u8 blk_len;
-	__u8 pg_offset;
-	__u8 pg_len;
-	__u8 sec_offset;
-	__u8 sec_len;
-	__u8 res[4];
-};
-
-struct nvme_nvm_id12 {
-	__u8 ver_id;
-	__u8 vmnt;
-	__u8 cgrps;
-	__u8 res;
-	__le32 cap;
-	__le32 dom;
-	struct nvme_nvm_id12_addrf ppaf;
-	__u8 resv[228];
-	struct nvme_nvm_id12_grp grp;
-	__u8 resv2[2880];
-};
-
-struct nvme_nvm_bb_tbl {
-	__u8 tblid[4];
-	__le16 verid;
-	__le16 revid;
-	__le32 rvsd1;
-	__le32 tblks;
-	__le32 tfact;
-	__le32 tgrown;
-	__le32 tdresv;
-	__le32 thresv;
-	__le32 rsvd2[8];
-	__u8 blk[0];
-};
-
-struct nvme_nvm_id20_addrf {
-	__u8 grp_len;
-	__u8 pu_len;
-	__u8 chk_len;
-	__u8 lba_len;
-	__u8 resv[4];
-};
-
-struct nvme_nvm_id20 {
-	__u8 mjr;
-	__u8 mnr;
-	__u8 resv[6];
-	struct nvme_nvm_id20_addrf lbaf;
-	__le32 mccap;
-	__u8 resv2[12];
-	__u8 wit;
-	__u8 resv3[31];
-	__le16 num_grp;
-	__le16 num_pu;
-	__le32 num_chk;
-	__le32 clba;
-	__u8 resv4[52];
-	__le32 ws_min;
-	__le32 ws_opt;
-	__le32 mw_cunits;
-	__le32 maxoc;
-	__le32 maxocpu;
-	__u8 resv5[44];
-	__le32 trdt;
-	__le32 trdm;
-	__le32 twrt;
-	__le32 twrm;
-	__le32 tcrst;
-	__le32 tcrsm;
-	__u8 resv6[40];
-	__u8 resv7[2816];
-	__u8 vs[1024];
-};
-
-struct nvme_nvm_chk_meta {
-	__u8 state;
-	__u8 type;
-	__u8 wi;
-	__u8 rsvd[5];
-	__le64 slba;
-	__le64 cnlb;
-	__le64 wp;
-};
-
-struct nvme_zns_lbafe {
-	__le64 zsze;
-	__u8 zdes;
-	__u8 rsvd9[7];
-};
-
-struct nvme_id_ns_zns {
-	__le16 zoc;
-	__le16 ozcs;
-	__le32 mar;
-	__le32 mor;
-	__le32 rrl;
-	__le32 frl;
-	__u8 rsvd20[2796];
-	struct nvme_zns_lbafe lbafe[16];
-	__u8 rsvd3072[768];
-	__u8 vs[256];
-};
-
-struct nvme_id_ctrl_zns {
-	__u8 zasl;
-	__u8 rsvd1[4095];
-};
-
-struct nvme_zone_descriptor {
-	__u8 zt;
-	__u8 zs;
-	__u8 za;
-	__u8 rsvd3[5];
-	__le64 zcap;
-	__le64 zslba;
-	__le64 wp;
-	__u8 rsvd32[32];
-};
-
-enum {
-	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
-};
-
-struct nvme_zone_report {
-	__le64 nr_zones;
-	__u8 resv8[56];
-	struct nvme_zone_descriptor entries[0];
-};
-
-enum {
-	NVME_ZRA_ZONE_REPORT = 0,
-	NVME_ZRASF_ZONE_REPORT_ALL = 0,
-	NVME_REPORT_ZONE_PARTIAL = 1,
-};
-
-enum {
-	NVME_CMBSZ_SQS = 1,
-	NVME_CMBSZ_CQS = 2,
-	NVME_CMBSZ_LISTS = 4,
-	NVME_CMBSZ_RDS = 8,
-	NVME_CMBSZ_WDS = 16,
-	NVME_CMBSZ_SZ_SHIFT = 12,
-	NVME_CMBSZ_SZ_MASK = 1048575,
-	NVME_CMBSZ_SZU_SHIFT = 8,
-	NVME_CMBSZ_SZU_MASK = 15,
-};
-
-enum {
-	NVME_SGL_FMT_DATA_DESC = 0,
-	NVME_SGL_FMT_SEG_DESC = 2,
-	NVME_SGL_FMT_LAST_SEG_DESC = 3,
-	NVME_KEY_SGL_FMT_DATA_DESC = 4,
-	NVME_TRANSPORT_SGL_DATA_DESC = 5,
-};
-
-enum {
-	NVME_HOST_MEM_ENABLE = 1,
-	NVME_HOST_MEM_RETURN = 2,
-};
-
-struct nvme_host_mem_buf_desc {
-	__le64 addr;
-	__le32 size;
-	__u32 rsvd;
-};
-
-struct nvme_completion {
-	union nvme_result result;
-	__le16 sq_head;
-	__le16 sq_id;
-	__u16 command_id;
-	__le16 status;
-};
-
-struct nvme_queue;
-
-struct nvme_dev {
-	struct nvme_queue *queues;
-	struct blk_mq_tag_set tagset;
-	struct blk_mq_tag_set admin_tagset;
-	u32 *dbs;
-	struct device *dev;
-	struct dma_pool___2 *prp_page_pool;
-	struct dma_pool___2 *prp_small_pool;
-	unsigned int online_queues;
-	unsigned int max_qid;
-	unsigned int io_queues[3];
-	unsigned int num_vecs;
-	u32 q_depth;
-	int io_sqes;
-	u32 db_stride;
-	void *bar;
-	long unsigned int bar_mapped_size;
-	struct work_struct remove_work;
-	struct mutex shutdown_lock;
-	bool subsystem;
-	u64 cmb_size;
-	bool cmb_use_sqes;
-	u32 cmbsz;
-	u32 cmbloc;
-	struct nvme_ctrl ctrl;
-	u32 last_ps;
-	mempool_t *iod_mempool;
-	u32 *dbbuf_dbs;
-	dma_addr_t dbbuf_dbs_dma_addr;
-	u32 *dbbuf_eis;
-	dma_addr_t dbbuf_eis_dma_addr;
-	u64 host_mem_size;
-	u32 nr_host_mem_descs;
-	dma_addr_t host_mem_descs_dma;
-	struct nvme_host_mem_buf_desc *host_mem_descs;
-	void **host_mem_desc_bufs;
-	unsigned int nr_allocated_queues;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-};
-
-struct nvme_queue {
-	struct nvme_dev *dev;
-	spinlock_t sq_lock;
-	void *sq_cmds;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t cq_poll_lock;
-	struct nvme_completion *cqes;
-	dma_addr_t sq_dma_addr;
-	dma_addr_t cq_dma_addr;
-	u32 *q_db;
-	u32 q_depth;
-	u16 cq_vector;
-	u16 sq_tail;
-	u16 last_sq_tail;
-	u16 cq_head;
-	u16 qid;
-	u8 cq_phase;
-	u8 sqes;
-	long unsigned int flags;
-	u32 *dbbuf_sq_db;
-	u32 *dbbuf_cq_db;
-	u32 *dbbuf_sq_ei;
-	u32 *dbbuf_cq_ei;
-	struct completion delete_done;
-};
-
-struct nvme_iod {
-	struct nvme_request req;
-	struct nvme_queue *nvmeq;
-	bool use_sgl;
-	int aborted;
-	int npages;
-	int nents;
-	dma_addr_t first_dma;
-	unsigned int dma_len;
-	dma_addr_t meta_dma;
-	struct scatterlist *sg;
-};
-
-typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
-
-struct spi_res {
-	struct list_head entry;
-	spi_res_release_t release;
-	long long unsigned int data[0];
-};
-
-struct spi_replaced_transfers;
-
-typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
-
-struct spi_replaced_transfers {
-	spi_replaced_release_t release;
-	void *extradata;
-	struct list_head replaced_transfers;
-	struct list_head *replaced_after;
-	size_t inserted;
-	struct spi_transfer inserted_transfers[0];
-};
-
-struct spi_board_info {
-	char modalias[32];
-	const void *platform_data;
-	const struct property_entry *properties;
-	void *controller_data;
-	int irq;
-	u32 max_speed_hz;
-	u16 bus_num;
-	u16 chip_select;
-	u32 mode;
-};
-
-enum spi_mem_data_dir {
-	SPI_MEM_NO_DATA = 0,
-	SPI_MEM_DATA_IN = 1,
-	SPI_MEM_DATA_OUT = 2,
-};
-
-struct spi_mem_op {
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u16 opcode;
-	} cmd;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u64 val;
-	} addr;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-	} dummy;
-	struct {
-		u8 buswidth;
-		u8 dtr: 1;
-		enum spi_mem_data_dir dir;
-		unsigned int nbytes;
-		union {
-			void *in;
-			const void *out;
-		} buf;
-	} data;
-};
-
-struct spi_mem_dirmap_info {
-	struct spi_mem_op op_tmpl;
-	u64 offset;
-	u64 length;
-};
-
-struct spi_mem_dirmap_desc {
-	struct spi_mem *mem;
-	struct spi_mem_dirmap_info info;
-	unsigned int nodirmap;
-	void *priv;
-};
-
-struct spi_mem {
-	struct spi_device *spi;
-	void *drvpriv;
 	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
 };
 
-struct trace_event_raw_spi_controller {
-	struct trace_entry ent;
-	int bus_num;
-	char __data[0];
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
 };
 
-struct trace_event_raw_spi_message {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	char __data[0];
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
 };
 
-struct trace_event_raw_spi_message_done {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	unsigned int frame;
-	unsigned int actual;
-	char __data[0];
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
 };
 
-struct trace_event_raw_spi_transfer {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_transfer *xfer;
-	int len;
-	u32 __data_loc_rx_buf;
-	u32 __data_loc_tx_buf;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_spi_controller {};
-
-struct trace_event_data_offsets_spi_message {};
-
-struct trace_event_data_offsets_spi_message_done {};
-
-struct trace_event_data_offsets_spi_transfer {
-	u32 rx_buf;
-	u32 tx_buf;
-};
-
-typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
-
-typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
-
-struct boardinfo {
-	struct list_head list;
-	struct spi_board_info board_info;
-};
-
-struct acpi_spi_lookup {
-	struct spi_controller *ctlr;
-	u32 max_speed_hz;
-	u32 mode;
-	int irq;
-	u8 bits_per_word;
-	u8 chip_select;
-};
-
-struct spi_mem_driver {
-	struct spi_driver spidrv;
-	int (*probe)(struct spi_mem *);
-	int (*remove)(struct spi_mem *);
-	void (*shutdown)(struct spi_mem *);
-};
-
-struct meson_spifc {
-	struct spi_controller *master;
-	struct regmap *regmap;
-	struct clk *clk;
-	struct device *dev;
-};
-
-enum orion_spi_type {
-	ORION_SPI = 0,
-	ARMADA_SPI = 1,
-};
-
-struct orion_spi_dev {
-	enum orion_spi_type typ;
-	long unsigned int max_hz;
-	unsigned int min_divisor;
-	unsigned int max_divisor;
-	u32 prescale_mask;
-	bool is_errata_50mhz_ac;
-};
-
-struct orion_direct_acc {
-	void *vaddr;
-	u32 size;
-};
-
-struct orion_child_options {
-	struct orion_direct_acc direct_access;
-};
-
-struct orion_spi {
-	struct spi_controller *master;
-	void *base;
-	struct clk *clk;
-	struct clk *axi_clk;
-	const struct orion_spi_dev *devdata;
-	struct orion_child_options child[8];
-};
-
-enum ssp_loopback {
-	LOOPBACK_DISABLED = 0,
-	LOOPBACK_ENABLED = 1,
-};
-
-enum ssp_interface {
-	SSP_INTERFACE_MOTOROLA_SPI = 0,
-	SSP_INTERFACE_TI_SYNC_SERIAL = 1,
-	SSP_INTERFACE_NATIONAL_MICROWIRE = 2,
-	SSP_INTERFACE_UNIDIRECTIONAL = 3,
-};
-
-enum ssp_hierarchy {
-	SSP_MASTER = 0,
-	SSP_SLAVE = 1,
-};
-
-struct ssp_clock_params {
-	u8 cpsdvsr;
-	u8 scr;
-};
-
-enum ssp_rx_endian {
-	SSP_RX_MSB = 0,
-	SSP_RX_LSB = 1,
-};
-
-enum ssp_tx_endian {
-	SSP_TX_MSB = 0,
-	SSP_TX_LSB = 1,
-};
-
-enum ssp_data_size {
-	SSP_DATA_BITS_4 = 3,
-	SSP_DATA_BITS_5 = 4,
-	SSP_DATA_BITS_6 = 5,
-	SSP_DATA_BITS_7 = 6,
-	SSP_DATA_BITS_8 = 7,
-	SSP_DATA_BITS_9 = 8,
-	SSP_DATA_BITS_10 = 9,
-	SSP_DATA_BITS_11 = 10,
-	SSP_DATA_BITS_12 = 11,
-	SSP_DATA_BITS_13 = 12,
-	SSP_DATA_BITS_14 = 13,
-	SSP_DATA_BITS_15 = 14,
-	SSP_DATA_BITS_16 = 15,
-	SSP_DATA_BITS_17 = 16,
-	SSP_DATA_BITS_18 = 17,
-	SSP_DATA_BITS_19 = 18,
-	SSP_DATA_BITS_20 = 19,
-	SSP_DATA_BITS_21 = 20,
-	SSP_DATA_BITS_22 = 21,
-	SSP_DATA_BITS_23 = 22,
-	SSP_DATA_BITS_24 = 23,
-	SSP_DATA_BITS_25 = 24,
-	SSP_DATA_BITS_26 = 25,
-	SSP_DATA_BITS_27 = 26,
-	SSP_DATA_BITS_28 = 27,
-	SSP_DATA_BITS_29 = 28,
-	SSP_DATA_BITS_30 = 29,
-	SSP_DATA_BITS_31 = 30,
-	SSP_DATA_BITS_32 = 31,
-};
-
-enum ssp_mode {
-	INTERRUPT_TRANSFER = 0,
-	POLLING_TRANSFER = 1,
-	DMA_TRANSFER = 2,
-};
-
-enum ssp_rx_level_trig {
-	SSP_RX_1_OR_MORE_ELEM = 0,
-	SSP_RX_4_OR_MORE_ELEM = 1,
-	SSP_RX_8_OR_MORE_ELEM = 2,
-	SSP_RX_16_OR_MORE_ELEM = 3,
-	SSP_RX_32_OR_MORE_ELEM = 4,
-};
-
-enum ssp_tx_level_trig {
-	SSP_TX_1_OR_MORE_EMPTY_LOC = 0,
-	SSP_TX_4_OR_MORE_EMPTY_LOC = 1,
-	SSP_TX_8_OR_MORE_EMPTY_LOC = 2,
-	SSP_TX_16_OR_MORE_EMPTY_LOC = 3,
-	SSP_TX_32_OR_MORE_EMPTY_LOC = 4,
-};
-
-enum ssp_spi_clk_phase {
-	SSP_CLK_FIRST_EDGE = 0,
-	SSP_CLK_SECOND_EDGE = 1,
-};
-
-enum ssp_spi_clk_pol {
-	SSP_CLK_POL_IDLE_LOW = 0,
-	SSP_CLK_POL_IDLE_HIGH = 1,
-};
-
-enum ssp_microwire_ctrl_len {
-	SSP_BITS_4 = 3,
-	SSP_BITS_5 = 4,
-	SSP_BITS_6 = 5,
-	SSP_BITS_7 = 6,
-	SSP_BITS_8 = 7,
-	SSP_BITS_9 = 8,
-	SSP_BITS_10 = 9,
-	SSP_BITS_11 = 10,
-	SSP_BITS_12 = 11,
-	SSP_BITS_13 = 12,
-	SSP_BITS_14 = 13,
-	SSP_BITS_15 = 14,
-	SSP_BITS_16 = 15,
-	SSP_BITS_17 = 16,
-	SSP_BITS_18 = 17,
-	SSP_BITS_19 = 18,
-	SSP_BITS_20 = 19,
-	SSP_BITS_21 = 20,
-	SSP_BITS_22 = 21,
-	SSP_BITS_23 = 22,
-	SSP_BITS_24 = 23,
-	SSP_BITS_25 = 24,
-	SSP_BITS_26 = 25,
-	SSP_BITS_27 = 26,
-	SSP_BITS_28 = 27,
-	SSP_BITS_29 = 28,
-	SSP_BITS_30 = 29,
-	SSP_BITS_31 = 30,
-	SSP_BITS_32 = 31,
-};
-
-enum ssp_microwire_wait_state {
-	SSP_MWIRE_WAIT_ZERO = 0,
-	SSP_MWIRE_WAIT_ONE = 1,
-};
-
-enum ssp_duplex {
-	SSP_MICROWIRE_CHANNEL_FULL_DUPLEX = 0,
-	SSP_MICROWIRE_CHANNEL_HALF_DUPLEX = 1,
-};
-
-enum ssp_clkdelay {
-	SSP_FEEDBACK_CLK_DELAY_NONE = 0,
-	SSP_FEEDBACK_CLK_DELAY_1T = 1,
-	SSP_FEEDBACK_CLK_DELAY_2T = 2,
-	SSP_FEEDBACK_CLK_DELAY_3T = 3,
-	SSP_FEEDBACK_CLK_DELAY_4T = 4,
-	SSP_FEEDBACK_CLK_DELAY_5T = 5,
-	SSP_FEEDBACK_CLK_DELAY_6T = 6,
-	SSP_FEEDBACK_CLK_DELAY_7T = 7,
-};
-
-enum ssp_chip_select {
-	SSP_CHIP_SELECT = 0,
-	SSP_CHIP_DESELECT = 1,
-};
-
-struct pl022_ssp_controller {
-	u16 bus_id;
-	u8 num_chipselect;
-	u8 enable_dma: 1;
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	int autosuspend_delay;
-	bool rt;
-	int *chipselects;
-};
-
-struct pl022_config_chip {
-	enum ssp_interface iface;
-	enum ssp_hierarchy hierarchy;
-	bool slave_tx_disable;
-	struct ssp_clock_params clk_freq;
-	enum ssp_mode com_mode;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	enum ssp_microwire_ctrl_len ctrl_len;
-	enum ssp_microwire_wait_state wait_state;
-	enum ssp_duplex duplex;
-	enum ssp_clkdelay clkdelay;
-	void (*cs_control)(u32);
-};
-
-enum ssp_reading {
-	READING_NULL = 0,
-	READING_U8 = 1,
-	READING_U16 = 2,
-	READING_U32 = 3,
-};
-
-enum ssp_writing {
-	WRITING_NULL = 0,
-	WRITING_U8 = 1,
-	WRITING_U16 = 2,
-	WRITING_U32 = 3,
-};
-
-struct vendor_data___2 {
-	int fifodepth;
-	int max_bpw;
-	bool unidir;
-	bool extended_cr;
-	bool pl023;
-	bool loopback;
-	bool internal_cs_ctrl;
-};
-
-struct chip_data;
-
-struct pl022 {
-	struct amba_device *adev;
-	struct vendor_data___2 *vendor;
-	resource_size_t phybase;
-	void *virtbase;
-	struct clk *clk;
-	struct spi_controller *master;
-	struct pl022_ssp_controller *master_info;
-	struct tasklet_struct pump_transfers;
-	struct spi_message *cur_msg;
-	struct spi_transfer *cur_transfer;
-	struct chip_data *cur_chip;
-	bool next_msg_cs_active;
-	void *tx;
-	void *tx_end;
-	void *rx;
-	void *rx_end;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	u32 exp_fifo_level;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	struct dma_chan *dma_rx_channel;
-	struct dma_chan *dma_tx_channel;
-	struct sg_table sgt_rx;
-	struct sg_table sgt_tx;
-	char *dummypage;
-	bool dma_running;
-	int cur_cs;
-	int *chipselects;
-};
-
-struct chip_data {
-	u32 cr0;
-	u16 cr1;
-	u16 dmacr;
-	u16 cpsr;
-	u8 n_bytes;
-	bool enable_dma;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	void (*cs_control)(u32);
-	int xfer_type;
-};
-
-struct spi_qup {
-	void *base;
-	struct device *dev;
-	struct clk *cclk;
-	struct clk *iclk;
-	int irq;
-	spinlock_t lock;
-	int in_fifo_sz;
-	int out_fifo_sz;
-	int in_blk_sz;
-	int out_blk_sz;
-	struct spi_transfer *xfer;
-	struct completion done;
-	int error;
-	int w_size;
-	int n_words;
-	int tx_bytes;
-	int rx_bytes;
-	const u8 *tx_buf;
-	u8 *rx_buf;
-	int qup_v1;
-	int mode;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
-};
-
-struct rockchip_spi {
-	struct device *dev;
-	struct clk *spiclk;
-	struct clk *apb_pclk;
-	void *regs;
-	dma_addr_t dma_addr_rx;
-	dma_addr_t dma_addr_tx;
-	const void *tx;
-	void *rx;
-	unsigned int tx_left;
-	unsigned int rx_left;
-	atomic_t state;
-	u32 fifo_len;
-	u32 freq;
-	u8 n_bytes;
-	u8 rsd;
-	bool cs_asserted[2];
-	bool slave_abort;
-};
-
-struct s3c64xx_spi_csinfo {
-	u8 fb_delay;
-	unsigned int line;
-};
-
-struct s3c64xx_spi_info {
-	int src_clk_nr;
-	int num_cs;
-	bool no_cs;
-	int (*cfg_gpio)();
-};
-
-struct s3c64xx_spi_dma_data {
-	struct dma_chan *ch;
-	dma_cookie_t cookie;
-	enum dma_transfer_direction direction;
-};
-
-struct s3c64xx_spi_port_config {
-	int fifo_lvl_mask[6];
-	int rx_lvl_offset;
-	int tx_st_done;
-	int quirks;
-	bool high_speed;
-	bool clk_from_cmu;
-	bool clk_ioclk;
-};
-
-struct s3c64xx_spi_driver_data {
-	void *regs;
-	struct clk *clk;
-	struct clk *src_clk;
-	struct clk *ioclk;
-	struct platform_device *pdev;
-	struct spi_controller *master;
-	struct s3c64xx_spi_info *cntrlr_info;
-	spinlock_t lock;
-	long unsigned int sfr_start;
-	struct completion xfer_completion;
-	unsigned int state;
-	unsigned int cur_mode;
-	unsigned int cur_bpw;
-	unsigned int cur_speed;
-	struct s3c64xx_spi_dma_data rx_dma;
-	struct s3c64xx_spi_dma_data tx_dma;
-	struct s3c64xx_spi_port_config *port_conf;
-	unsigned int port_id;
-};
-
-struct devprobe2 {
-	struct net_device * (*probe)(int);
-	int status;
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
 };
 
 enum {
-	NETIF_F_SG_BIT = 0,
-	NETIF_F_IP_CSUM_BIT = 1,
-	__UNUSED_NETIF_F_1 = 2,
-	NETIF_F_HW_CSUM_BIT = 3,
-	NETIF_F_IPV6_CSUM_BIT = 4,
-	NETIF_F_HIGHDMA_BIT = 5,
-	NETIF_F_FRAGLIST_BIT = 6,
-	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
-	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
-	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
-	NETIF_F_VLAN_CHALLENGED_BIT = 10,
-	NETIF_F_GSO_BIT = 11,
-	NETIF_F_LLTX_BIT = 12,
-	NETIF_F_NETNS_LOCAL_BIT = 13,
-	NETIF_F_GRO_BIT = 14,
-	NETIF_F_LRO_BIT = 15,
-	NETIF_F_GSO_SHIFT = 16,
-	NETIF_F_TSO_BIT = 16,
-	NETIF_F_GSO_ROBUST_BIT = 17,
-	NETIF_F_TSO_ECN_BIT = 18,
-	NETIF_F_TSO_MANGLEID_BIT = 19,
-	NETIF_F_TSO6_BIT = 20,
-	NETIF_F_FSO_BIT = 21,
-	NETIF_F_GSO_GRE_BIT = 22,
-	NETIF_F_GSO_GRE_CSUM_BIT = 23,
-	NETIF_F_GSO_IPXIP4_BIT = 24,
-	NETIF_F_GSO_IPXIP6_BIT = 25,
-	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
-	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
-	NETIF_F_GSO_PARTIAL_BIT = 28,
-	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
-	NETIF_F_GSO_SCTP_BIT = 30,
-	NETIF_F_GSO_ESP_BIT = 31,
-	NETIF_F_GSO_UDP_BIT = 32,
-	NETIF_F_GSO_UDP_L4_BIT = 33,
-	NETIF_F_GSO_FRAGLIST_BIT = 34,
-	NETIF_F_GSO_LAST = 34,
-	NETIF_F_FCOE_CRC_BIT = 35,
-	NETIF_F_SCTP_CRC_BIT = 36,
-	NETIF_F_FCOE_MTU_BIT = 37,
-	NETIF_F_NTUPLE_BIT = 38,
-	NETIF_F_RXHASH_BIT = 39,
-	NETIF_F_RXCSUM_BIT = 40,
-	NETIF_F_NOCACHE_COPY_BIT = 41,
-	NETIF_F_LOOPBACK_BIT = 42,
-	NETIF_F_RXFCS_BIT = 43,
-	NETIF_F_RXALL_BIT = 44,
-	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
-	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
-	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
-	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
-	NETIF_F_HW_TC_BIT = 49,
-	NETIF_F_HW_ESP_BIT = 50,
-	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
-	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
-	NETIF_F_HW_TLS_TX_BIT = 53,
-	NETIF_F_HW_TLS_RX_BIT = 54,
-	NETIF_F_GRO_HW_BIT = 55,
-	NETIF_F_HW_TLS_RECORD_BIT = 56,
-	NETIF_F_GRO_FRAGLIST_BIT = 57,
-	NETIF_F_HW_MACSEC_BIT = 58,
-	NETDEV_FEATURE_COUNT = 59,
+	mechtype_caddy = 0,
+	mechtype_tray = 1,
+	mechtype_popup = 2,
+	mechtype_individual_changer = 4,
+	mechtype_cartridge_changer = 5,
 };
 
-enum {
-	SKBTX_HW_TSTAMP = 1,
-	SKBTX_SW_TSTAMP = 2,
-	SKBTX_IN_PROGRESS = 4,
-	SKBTX_DEV_ZEROCOPY = 8,
-	SKBTX_WIFI_STATUS = 16,
-	SKBTX_SHARED_FRAG = 32,
-	SKBTX_SCHED_TSTAMP = 64,
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
 };
 
-enum netdev_priv_flags {
-	IFF_802_1Q_VLAN = 1,
-	IFF_EBRIDGE = 2,
-	IFF_BONDING = 4,
-	IFF_ISATAP = 8,
-	IFF_WAN_HDLC = 16,
-	IFF_XMIT_DST_RELEASE = 32,
-	IFF_DONT_BRIDGE = 64,
-	IFF_DISABLE_NETPOLL = 128,
-	IFF_MACVLAN_PORT = 256,
-	IFF_BRIDGE_PORT = 512,
-	IFF_OVS_DATAPATH = 1024,
-	IFF_TX_SKB_SHARING = 2048,
-	IFF_UNICAST_FLT = 4096,
-	IFF_TEAM_PORT = 8192,
-	IFF_SUPP_NOFCS = 16384,
-	IFF_LIVE_ADDR_CHANGE = 32768,
-	IFF_MACVLAN = 65536,
-	IFF_XMIT_DST_RELEASE_PERM = 131072,
-	IFF_L3MDEV_MASTER = 262144,
-	IFF_NO_QUEUE = 524288,
-	IFF_OPENVSWITCH = 1048576,
-	IFF_L3MDEV_SLAVE = 2097152,
-	IFF_TEAM = 4194304,
-	IFF_RXFH_CONFIGURED = 8388608,
-	IFF_PHONY_HEADROOM = 16777216,
-	IFF_MACSEC = 33554432,
-	IFF_NO_RX_HANDLER = 67108864,
-	IFF_FAILOVER = 134217728,
-	IFF_FAILOVER_SLAVE = 268435456,
-	IFF_L3MDEV_RX_HANDLER = 536870912,
-	IFF_LIVE_RENAME_OK = 1073741824,
+struct spmi_controller {
+	struct device dev;
+	unsigned int nr;
+	int (*cmd)(struct spmi_controller *, u8, u8);
+	int (*read_cmd)(struct spmi_controller *, u8, u8, u16, u8 *, size_t);
+	int (*write_cmd)(struct spmi_controller *, u8, u8, u16, const u8 *, size_t);
+};
+
+enum pmic_arb_chnl_status {
+	PMIC_ARB_STATUS_DONE = 1,
+	PMIC_ARB_STATUS_FAILURE = 2,
+	PMIC_ARB_STATUS_DENIED = 4,
+	PMIC_ARB_STATUS_DROPPED = 8,
+};
+
+enum pmic_arb_cmd_op_code {
+	PMIC_ARB_OP_EXT_WRITEL = 0,
+	PMIC_ARB_OP_EXT_READL = 1,
+	PMIC_ARB_OP_EXT_WRITE = 2,
+	PMIC_ARB_OP_RESET = 3,
+	PMIC_ARB_OP_SLEEP = 4,
+	PMIC_ARB_OP_SHUTDOWN = 5,
+	PMIC_ARB_OP_WAKEUP = 6,
+	PMIC_ARB_OP_AUTHENTICATE = 7,
+	PMIC_ARB_OP_MSTR_READ = 8,
+	PMIC_ARB_OP_MSTR_WRITE = 9,
+	PMIC_ARB_OP_EXT_READ = 13,
+	PMIC_ARB_OP_WRITE = 14,
+	PMIC_ARB_OP_READ = 15,
+	PMIC_ARB_OP_ZERO_WRITE = 16,
+};
+
+enum pmic_arb_channel {
+	PMIC_ARB_CHANNEL_RW = 0,
+	PMIC_ARB_CHANNEL_OBS = 1,
+};
+
+struct apid_data {
+	u16 ppid;
+	u8 write_ee;
+	u8 irq_ee;
+};
+
+struct pmic_arb_ver_ops;
+
+struct spmi_pmic_arb {
+	void *rd_base;
+	void *wr_base;
+	void *intr;
+	void *cnfg;
+	void *core;
+	resource_size_t core_size;
+	raw_spinlock_t lock;
+	u8 channel;
+	int irq;
+	u8 ee;
+	u16 min_apid;
+	u16 max_apid;
+	u32 *mapping_table;
+	long unsigned int mapping_table_valid[8];
+	struct irq_domain *domain;
+	struct spmi_controller *spmic;
+	const struct pmic_arb_ver_ops *ver_ops;
+	u16 *ppid_to_apid;
+	u16 last_apid;
+	struct apid_data apid_data[512];
+};
+
+struct pmic_arb_ver_ops {
+	const char *ver_str;
+	int (*ppid_to_apid)(struct spmi_pmic_arb *, u16);
+	int (*offset)(struct spmi_pmic_arb *, u8, u16, enum pmic_arb_channel);
+	u32 (*fmt_cmd)(u8, u8, u16, u8);
+	int (*non_data_cmd)(struct spmi_controller *, u8, u8);
+	void * (*owner_acc_status)(struct spmi_pmic_arb *, u8, u16);
+	void * (*acc_enable)(struct spmi_pmic_arb *, u16);
+	void * (*irq_status)(struct spmi_pmic_arb *, u16);
+	void * (*irq_clear)(struct spmi_pmic_arb *, u16);
+	u32 (*apid_map_offset)(u16);
+};
+
+enum qpnpint_regs {
+	QPNPINT_REG_RT_STS = 16,
+	QPNPINT_REG_SET_TYPE = 17,
+	QPNPINT_REG_POLARITY_HIGH = 18,
+	QPNPINT_REG_POLARITY_LOW = 19,
+	QPNPINT_REG_LATCHED_CLR = 20,
+	QPNPINT_REG_EN_SET = 21,
+	QPNPINT_REG_EN_CLR = 22,
+	QPNPINT_REG_LATCHED_STS = 24,
+};
+
+struct spmi_pmic_arb_qpnpint_type {
+	u8 type;
+	u8 polarity_high;
+	u8 polarity_low;
+};
+
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
 };
 
 struct mdio_board_info {
@@ -87228,217 +98811,6 @@
 	const void *platform_data;
 };
 
-struct mdio_board_entry {
-	struct list_head list;
-	struct mdio_board_info board_info;
-};
-
-struct mdiobus_devres {
-	struct mii_bus *mii;
-};
-
-enum netdev_state_t {
-	__LINK_STATE_START = 0,
-	__LINK_STATE_PRESENT = 1,
-	__LINK_STATE_NOCARRIER = 2,
-	__LINK_STATE_LINKWATCH_PENDING = 3,
-	__LINK_STATE_DORMANT = 4,
-	__LINK_STATE_TESTING = 5,
-};
-
-struct mii_ioctl_data {
-	__u16 phy_id;
-	__u16 reg_num;
-	__u16 val_in;
-	__u16 val_out;
-};
-
-enum {
-	ETHTOOL_MSG_KERNEL_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
-	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
-	ETHTOOL_MSG_LINKINFO_NTF = 3,
-	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
-	ETHTOOL_MSG_LINKMODES_NTF = 5,
-	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
-	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
-	ETHTOOL_MSG_DEBUG_NTF = 8,
-	ETHTOOL_MSG_WOL_GET_REPLY = 9,
-	ETHTOOL_MSG_WOL_NTF = 10,
-	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
-	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
-	ETHTOOL_MSG_FEATURES_NTF = 13,
-	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
-	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
-	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
-	ETHTOOL_MSG_RINGS_NTF = 17,
-	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
-	ETHTOOL_MSG_CHANNELS_NTF = 19,
-	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
-	ETHTOOL_MSG_COALESCE_NTF = 21,
-	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
-	ETHTOOL_MSG_PAUSE_NTF = 23,
-	ETHTOOL_MSG_EEE_GET_REPLY = 24,
-	ETHTOOL_MSG_EEE_NTF = 25,
-	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
-	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
-	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
-	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
-	__ETHTOOL_MSG_KERNEL_CNT = 30,
-	ETHTOOL_MSG_KERNEL_MAX = 29,
-};
-
-struct phy_setting {
-	u32 speed;
-	u8 duplex;
-	u8 bit;
-};
-
-struct ethtool_phy_ops {
-	int (*get_sset_count)(struct phy_device *);
-	int (*get_strings)(struct phy_device *, u8 *);
-	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
-	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
-};
-
-struct phy_fixup {
-	struct list_head list;
-	char bus_id[64];
-	u32 phy_uid;
-	u32 phy_uid_mask;
-	int (*run)(struct phy_device *);
-};
-
-struct sfp_eeprom_base {
-	u8 phys_id;
-	u8 phys_ext_id;
-	u8 connector;
-	u8 if_1x_copper_passive: 1;
-	u8 if_1x_copper_active: 1;
-	u8 if_1x_lx: 1;
-	u8 if_1x_sx: 1;
-	u8 e10g_base_sr: 1;
-	u8 e10g_base_lr: 1;
-	u8 e10g_base_lrm: 1;
-	u8 e10g_base_er: 1;
-	u8 sonet_oc3_short_reach: 1;
-	u8 sonet_oc3_smf_intermediate_reach: 1;
-	u8 sonet_oc3_smf_long_reach: 1;
-	u8 unallocated_5_3: 1;
-	u8 sonet_oc12_short_reach: 1;
-	u8 sonet_oc12_smf_intermediate_reach: 1;
-	u8 sonet_oc12_smf_long_reach: 1;
-	u8 unallocated_5_7: 1;
-	u8 sonet_oc48_short_reach: 1;
-	u8 sonet_oc48_intermediate_reach: 1;
-	u8 sonet_oc48_long_reach: 1;
-	u8 sonet_reach_bit2: 1;
-	u8 sonet_reach_bit1: 1;
-	u8 sonet_oc192_short_reach: 1;
-	u8 escon_smf_1310_laser: 1;
-	u8 escon_mmf_1310_led: 1;
-	u8 e1000_base_sx: 1;
-	u8 e1000_base_lx: 1;
-	u8 e1000_base_cx: 1;
-	u8 e1000_base_t: 1;
-	u8 e100_base_lx: 1;
-	u8 e100_base_fx: 1;
-	u8 e_base_bx10: 1;
-	u8 e_base_px: 1;
-	u8 fc_tech_electrical_inter_enclosure: 1;
-	u8 fc_tech_lc: 1;
-	u8 fc_tech_sa: 1;
-	u8 fc_ll_m: 1;
-	u8 fc_ll_l: 1;
-	u8 fc_ll_i: 1;
-	u8 fc_ll_s: 1;
-	u8 fc_ll_v: 1;
-	u8 unallocated_8_0: 1;
-	u8 unallocated_8_1: 1;
-	u8 sfp_ct_passive: 1;
-	u8 sfp_ct_active: 1;
-	u8 fc_tech_ll: 1;
-	u8 fc_tech_sl: 1;
-	u8 fc_tech_sn: 1;
-	u8 fc_tech_electrical_intra_enclosure: 1;
-	u8 fc_media_sm: 1;
-	u8 unallocated_9_1: 1;
-	u8 fc_media_m5: 1;
-	u8 fc_media_m6: 1;
-	u8 fc_media_tv: 1;
-	u8 fc_media_mi: 1;
-	u8 fc_media_tp: 1;
-	u8 fc_media_tw: 1;
-	u8 fc_speed_100: 1;
-	u8 unallocated_10_1: 1;
-	u8 fc_speed_200: 1;
-	u8 fc_speed_3200: 1;
-	u8 fc_speed_400: 1;
-	u8 fc_speed_1600: 1;
-	u8 fc_speed_800: 1;
-	u8 fc_speed_1200: 1;
-	u8 encoding;
-	u8 br_nominal;
-	u8 rate_id;
-	u8 link_len[6];
-	char vendor_name[16];
-	u8 extended_cc;
-	char vendor_oui[3];
-	char vendor_pn[16];
-	char vendor_rev[4];
-	union {
-		__be16 optical_wavelength;
-		__be16 cable_compliance;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 reserved60_2: 6;
-			u8 reserved61: 8;
-		} passive;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 sff8431_lim: 1;
-			u8 fc_pi_4_lim: 1;
-			u8 reserved60_4: 4;
-			u8 reserved61: 8;
-		} active;
-	};
-	u8 reserved62;
-	u8 cc_base;
-};
-
-struct sfp_eeprom_ext {
-	__be16 options;
-	u8 br_max;
-	u8 br_min;
-	char vendor_sn[16];
-	char datecode[8];
-	u8 diagmon;
-	u8 enhopts;
-	u8 sff8472_compliance;
-	u8 cc_ext;
-};
-
-struct sfp_eeprom_id {
-	struct sfp_eeprom_base base;
-	struct sfp_eeprom_ext ext;
-};
-
-struct sfp_upstream_ops {
-	void (*attach)(void *, struct sfp_bus *);
-	void (*detach)(void *, struct sfp_bus *);
-	int (*module_insert)(void *, const struct sfp_eeprom_id *);
-	void (*module_remove)(void *);
-	int (*module_start)(void *);
-	void (*module_stop)(void *);
-	void (*link_down)(void *);
-	void (*link_up)(void *);
-	int (*connect_phy)(void *, struct phy_device *);
-	void (*disconnect_phy)(void *);
-};
-
 struct trace_event_raw_mdio_access {
 	struct trace_entry ent;
 	char busid[61];
@@ -87458,1766 +98830,239 @@
 	unsigned int field_offset;
 };
 
-struct mdio_driver {
-	struct mdio_driver_common mdiodrv;
-	int (*probe)(struct mdio_device *);
-	void (*remove)(struct mdio_device *);
+struct sb1000_private {
+	struct sk_buff *rx_skb[4];
+	short int rx_dlen[4];
+	unsigned int rx_frames;
+	short int rx_error_count;
+	short int rx_error_dpc_count;
+	unsigned char rx_session_id[4];
+	unsigned char rx_frame_id[4];
+	unsigned char rx_pkt_type[4];
 };
 
-struct fixed_phy_status {
-	int link;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-};
-
-struct swmii_regs {
-	u16 bmsr;
-	u16 lpa;
-	u16 lpagb;
-	u16 estat;
-};
-
-enum {
-	SWMII_SPEED_10 = 0,
-	SWMII_SPEED_100 = 1,
-	SWMII_SPEED_1000 = 2,
-	SWMII_DUPLEX_HALF = 0,
-	SWMII_DUPLEX_FULL = 1,
-};
-
-struct sfp;
-
-struct sfp_socket_ops;
-
-struct sfp_quirk;
-
-struct sfp_bus {
-	struct kref kref;
-	struct list_head node;
-	struct fwnode_handle *fwnode;
-	const struct sfp_socket_ops *socket_ops;
-	struct device *sfp_dev;
-	struct sfp *sfp;
-	const struct sfp_quirk *sfp_quirk;
-	const struct sfp_upstream_ops *upstream_ops;
-	void *upstream;
-	struct phy_device *phydev;
-	bool registered;
-	bool started;
-};
-
-enum {
-	SFF8024_ID_UNK = 0,
-	SFF8024_ID_SFF_8472 = 2,
-	SFF8024_ID_SFP = 3,
-	SFF8024_ID_DWDM_SFP = 11,
-	SFF8024_ID_QSFP_8438 = 12,
-	SFF8024_ID_QSFP_8436_8636 = 13,
-	SFF8024_ID_QSFP28_8636 = 17,
-	SFF8024_ENCODING_UNSPEC = 0,
-	SFF8024_ENCODING_8B10B = 1,
-	SFF8024_ENCODING_4B5B = 2,
-	SFF8024_ENCODING_NRZ = 3,
-	SFF8024_ENCODING_8472_MANCHESTER = 4,
-	SFF8024_ENCODING_8472_SONET = 5,
-	SFF8024_ENCODING_8472_64B66B = 6,
-	SFF8024_ENCODING_8436_MANCHESTER = 6,
-	SFF8024_ENCODING_8436_SONET = 4,
-	SFF8024_ENCODING_8436_64B66B = 5,
-	SFF8024_ENCODING_256B257B = 7,
-	SFF8024_ENCODING_PAM4 = 8,
-	SFF8024_CONNECTOR_UNSPEC = 0,
-	SFF8024_CONNECTOR_SC = 1,
-	SFF8024_CONNECTOR_FIBERJACK = 6,
-	SFF8024_CONNECTOR_LC = 7,
-	SFF8024_CONNECTOR_MT_RJ = 8,
-	SFF8024_CONNECTOR_MU = 9,
-	SFF8024_CONNECTOR_SG = 10,
-	SFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,
-	SFF8024_CONNECTOR_MPO_1X12 = 12,
-	SFF8024_CONNECTOR_MPO_2X16 = 13,
-	SFF8024_CONNECTOR_HSSDC_II = 32,
-	SFF8024_CONNECTOR_COPPER_PIGTAIL = 33,
-	SFF8024_CONNECTOR_RJ45 = 34,
-	SFF8024_CONNECTOR_NOSEPARATE = 35,
-	SFF8024_CONNECTOR_MXC_2X16 = 36,
-	SFF8024_ECC_UNSPEC = 0,
-	SFF8024_ECC_100G_25GAUI_C2M_AOC = 1,
-	SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,
-	SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,
-	SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,
-	SFF8024_ECC_100GBASE_SR10 = 5,
-	SFF8024_ECC_100GBASE_CR4 = 11,
-	SFF8024_ECC_25GBASE_CR_S = 12,
-	SFF8024_ECC_25GBASE_CR_N = 13,
-	SFF8024_ECC_10GBASE_T_SFI = 22,
-	SFF8024_ECC_10GBASE_T_SR = 28,
-	SFF8024_ECC_5GBASE_T = 29,
-	SFF8024_ECC_2_5GBASE_T = 30,
-};
-
-struct sfp_socket_ops {
-	void (*attach)(struct sfp *);
-	void (*detach)(struct sfp *);
-	void (*start)(struct sfp *);
-	void (*stop)(struct sfp *);
-	int (*module_info)(struct sfp *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);
-};
-
-struct sfp_quirk {
-	const char *vendor;
-	const char *part;
-	void (*modes)(const struct sfp_eeprom_id *, long unsigned int *);
-};
-
-struct mdio_device_id {
-	__u32 phy_id;
-	__u32 phy_id_mask;
-};
-
-enum {
-	MDIO_AN_C22 = 65504,
-};
-
-struct fixed_mdio_bus {
-	struct mii_bus *mii_bus;
-	struct list_head phys;
-};
-
-struct fixed_phy {
-	int addr;
-	struct phy_device *phydev;
-	struct fixed_phy_status status;
-	bool no_carrier;
-	int (*link_update)(struct net_device *, struct fixed_phy_status *);
-	struct list_head node;
-	struct gpio_desc *link_gpiod;
-};
-
-struct mdio_mux_child_bus;
-
-struct mdio_mux_parent_bus {
-	struct mii_bus *mii_bus;
-	int current_child;
-	int parent_id;
-	void *switch_data;
-	int (*switch_fn)(int, int, void *);
-	struct mdio_mux_child_bus *children;
-};
-
-struct mdio_mux_child_bus {
-	struct mii_bus *mii_bus;
-	struct mdio_mux_parent_bus *parent;
-	struct mdio_mux_child_bus *next;
-	int bus_number;
-};
-
-struct mdio_mux_mmioreg_state {
-	void *mux_handle;
-	phys_addr_t phys;
-	unsigned int iosize;
-	unsigned int mask;
-};
-
-struct flow_dissector {
-	unsigned int used_keys;
-	short unsigned int offset[28];
-};
-
-struct flow_match {
-	struct flow_dissector *dissector;
-	void *mask;
-	void *key;
-};
-
-enum flow_action_id {
-	FLOW_ACTION_ACCEPT = 0,
-	FLOW_ACTION_DROP = 1,
-	FLOW_ACTION_TRAP = 2,
-	FLOW_ACTION_GOTO = 3,
-	FLOW_ACTION_REDIRECT = 4,
-	FLOW_ACTION_MIRRED = 5,
-	FLOW_ACTION_REDIRECT_INGRESS = 6,
-	FLOW_ACTION_MIRRED_INGRESS = 7,
-	FLOW_ACTION_VLAN_PUSH = 8,
-	FLOW_ACTION_VLAN_POP = 9,
-	FLOW_ACTION_VLAN_MANGLE = 10,
-	FLOW_ACTION_TUNNEL_ENCAP = 11,
-	FLOW_ACTION_TUNNEL_DECAP = 12,
-	FLOW_ACTION_MANGLE = 13,
-	FLOW_ACTION_ADD = 14,
-	FLOW_ACTION_CSUM = 15,
-	FLOW_ACTION_MARK = 16,
-	FLOW_ACTION_PTYPE = 17,
-	FLOW_ACTION_PRIORITY = 18,
-	FLOW_ACTION_WAKE = 19,
-	FLOW_ACTION_QUEUE = 20,
-	FLOW_ACTION_SAMPLE = 21,
-	FLOW_ACTION_POLICE = 22,
-	FLOW_ACTION_CT = 23,
-	FLOW_ACTION_CT_METADATA = 24,
-	FLOW_ACTION_MPLS_PUSH = 25,
-	FLOW_ACTION_MPLS_POP = 26,
-	FLOW_ACTION_MPLS_MANGLE = 27,
-	FLOW_ACTION_GATE = 28,
-	NUM_FLOW_ACTIONS = 29,
-};
-
-enum flow_action_hw_stats {
-	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
-	FLOW_ACTION_HW_STATS_DELAYED = 2,
-	FLOW_ACTION_HW_STATS_ANY = 3,
-	FLOW_ACTION_HW_STATS_DISABLED = 4,
-	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
-};
-
-typedef void (*action_destr)(void *);
-
-enum flow_action_mangle_base {
-	FLOW_ACT_MANGLE_UNSPEC = 0,
-	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
-	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
-	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
-};
-
-struct nf_flowtable;
-
-struct ip_tunnel_info;
-
-struct psample_group;
-
-struct action_gate_entry;
-
-struct flow_action_cookie;
-
-struct flow_action_entry {
-	enum flow_action_id id;
-	enum flow_action_hw_stats hw_stats;
-	action_destr destructor;
-	void *destructor_priv;
-	union {
-		u32 chain_index;
-		struct net_device *dev;
-		struct {
-			u16 vid;
-			__be16 proto;
-			u8 prio;
-		} vlan;
-		struct {
-			enum flow_action_mangle_base htype;
-			u32 offset;
-			u32 mask;
-			u32 val;
-		} mangle;
-		struct ip_tunnel_info *tunnel;
-		u32 csum_flags;
-		u32 mark;
-		u16 ptype;
-		u32 priority;
-		struct {
-			u32 ctx;
-			u32 index;
-			u8 vf;
-		} queue;
-		struct {
-			struct psample_group *psample_group;
-			u32 rate;
-			u32 trunc_size;
-			bool truncate;
-		} sample;
-		struct {
-			u32 index;
-			u32 burst;
-			u64 rate_bytes_ps;
-			u32 mtu;
-		} police;
-		struct {
-			int action;
-			u16 zone;
-			struct nf_flowtable *flow_table;
-		} ct;
-		struct {
-			long unsigned int cookie;
-			u32 mark;
-			u32 labels[4];
-		} ct_metadata;
-		struct {
-			u32 label;
-			__be16 proto;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_push;
-		struct {
-			__be16 proto;
-		} mpls_pop;
-		struct {
-			u32 label;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_mangle;
-		struct {
-			u32 index;
-			s32 prio;
-			u64 basetime;
-			u64 cycletime;
-			u64 cycletimeext;
-			u32 num_entries;
-			struct action_gate_entry *entries;
-		} gate;
-	};
-	struct flow_action_cookie *cookie;
-};
-
-struct flow_action {
-	unsigned int num_entries;
-	struct flow_action_entry entries[0];
-};
-
-struct flow_rule {
-	struct flow_match match;
-	struct flow_action action;
-};
-
-struct dsa_chip_data {
-	struct device *host_dev;
-	int sw_addr;
-	struct device *netdev[12];
-	int eeprom_len;
-	struct device_node *of_node;
-	char *port_names[12];
-	struct device_node *port_dn[12];
-	s8 rtable[4];
-};
-
-struct dsa_platform_data {
-	struct device *netdev;
-	struct net_device *of_netdev;
-	int nr_chips;
-	struct dsa_chip_data *chip;
-};
-
-struct phylink_link_state {
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	unsigned int link: 1;
-	unsigned int an_enabled: 1;
-	unsigned int an_complete: 1;
-};
-
-enum phylink_op_type {
-	PHYLINK_NETDEV = 0,
-	PHYLINK_DEV = 1,
-};
-
-struct phylink_config {
-	struct device *dev;
-	enum phylink_op_type type;
-	bool pcs_poll;
-	bool poll_fixed_state;
-	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
-};
-
-enum devlink_port_type {
-	DEVLINK_PORT_TYPE_NOTSET = 0,
-	DEVLINK_PORT_TYPE_AUTO = 1,
-	DEVLINK_PORT_TYPE_ETH = 2,
-	DEVLINK_PORT_TYPE_IB = 3,
-};
-
-enum devlink_port_flavour {
-	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
-	DEVLINK_PORT_FLAVOUR_CPU = 1,
-	DEVLINK_PORT_FLAVOUR_DSA = 2,
-	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
-	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
-	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
-	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
-};
-
-struct devlink_port_phys_attrs {
-	u32 port_number;
-	u32 split_subport_number;
-};
-
-struct devlink_port_pci_pf_attrs {
-	u32 controller;
-	u16 pf;
-	u8 external: 1;
-};
-
-struct devlink_port_pci_vf_attrs {
-	u32 controller;
-	u16 pf;
-	u16 vf;
-	u8 external: 1;
-};
-
-struct devlink_port_attrs {
-	u8 split: 1;
-	u8 splittable: 1;
-	u32 lanes;
-	enum devlink_port_flavour flavour;
-	struct netdev_phys_item_id switch_id;
-	union {
-		struct devlink_port_phys_attrs phys;
-		struct devlink_port_pci_pf_attrs pci_pf;
-		struct devlink_port_pci_vf_attrs pci_vf;
-	};
-};
-
-struct devlink;
-
-struct devlink_port {
-	struct list_head list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct devlink *devlink;
-	unsigned int index;
-	bool registered;
-	spinlock_t type_lock;
-	enum devlink_port_type type;
-	enum devlink_port_type desired_type;
-	void *type_dev;
-	struct devlink_port_attrs attrs;
-	u8 attrs_set: 1;
-	u8 switch_port: 1;
-	struct delayed_work type_warn_dw;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-};
-
-struct dsa_device_ops;
-
-struct dsa_switch_tree;
-
-struct packet_type;
-
-struct dsa_switch;
-
-struct dsa_netdevice_ops;
-
-struct dsa_port {
-	union {
-		struct net_device *master;
-		struct net_device *slave;
-	};
-	const struct dsa_device_ops *tag_ops;
-	struct dsa_switch_tree *dst;
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	enum {
-		DSA_PORT_TYPE_UNUSED = 0,
-		DSA_PORT_TYPE_CPU = 1,
-		DSA_PORT_TYPE_DSA = 2,
-		DSA_PORT_TYPE_USER = 3,
-	} type;
-	struct dsa_switch *ds;
-	unsigned int index;
-	const char *name;
-	struct dsa_port *cpu_dp;
-	const char *mac;
-	struct device_node *dn;
-	unsigned int ageing_time;
-	bool vlan_filtering;
-	u8 stp_state;
-	struct net_device *bridge_dev;
-	struct devlink_port devlink_port;
-	bool devlink_port_setup;
-	struct phylink *pl;
-	struct phylink_config pl_config;
-	struct list_head list;
-	void *priv;
-	const struct ethtool_ops *orig_ethtool_ops;
-	const struct dsa_netdevice_ops *netdev_ops;
-	bool setup;
-};
-
-struct packet_type {
-	__be16 type;
-	bool ignore_outgoing;
-	struct net_device *dev;
-	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
-	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
-	bool (*id_match)(struct packet_type *, struct sock *);
-	void *af_packet_priv;
-	struct list_head list;
-};
-
-struct flow_action_cookie {
-	u32 cookie_len;
-	u8 cookie[0];
-};
-
-struct flow_stats {
-	u64 pkts;
-	u64 bytes;
-	u64 drops;
-	u64 lastused;
-	enum flow_action_hw_stats used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-enum flow_cls_command {
-	FLOW_CLS_REPLACE = 0,
-	FLOW_CLS_DESTROY = 1,
-	FLOW_CLS_STATS = 2,
-	FLOW_CLS_TMPLT_CREATE = 3,
-	FLOW_CLS_TMPLT_DESTROY = 4,
-};
-
-struct flow_cls_common_offload {
-	u32 chain_index;
-	__be16 protocol;
-	u32 prio;
-	struct netlink_ext_ack *extack;
-};
-
-struct flow_cls_offload {
-	struct flow_cls_common_offload common;
-	enum flow_cls_command command;
-	long unsigned int cookie;
-	struct flow_rule *rule;
-	struct flow_stats stats;
-	u32 classid;
-};
-
-enum devlink_sb_pool_type {
-	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
-	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
-};
-
-enum devlink_sb_threshold_type {
-	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
-	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
-};
-
-enum devlink_eswitch_encap_mode {
-	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
-	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
-};
-
-enum devlink_param_cmode {
-	DEVLINK_PARAM_CMODE_RUNTIME = 0,
-	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
-	DEVLINK_PARAM_CMODE_PERMANENT = 2,
-	__DEVLINK_PARAM_CMODE_MAX = 3,
-	DEVLINK_PARAM_CMODE_MAX = 2,
-};
-
-enum devlink_trap_action {
-	DEVLINK_TRAP_ACTION_DROP = 0,
-	DEVLINK_TRAP_ACTION_TRAP = 1,
-	DEVLINK_TRAP_ACTION_MIRROR = 2,
-};
-
-enum devlink_trap_type {
-	DEVLINK_TRAP_TYPE_DROP = 0,
-	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
-	DEVLINK_TRAP_TYPE_CONTROL = 2,
-};
-
-enum devlink_reload_action {
-	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
-	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
-	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
-	__DEVLINK_RELOAD_ACTION_MAX = 3,
-	DEVLINK_RELOAD_ACTION_MAX = 2,
-};
-
-enum devlink_reload_limit {
-	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
-	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
-	__DEVLINK_RELOAD_LIMIT_MAX = 2,
-	DEVLINK_RELOAD_LIMIT_MAX = 1,
-};
-
-enum devlink_dpipe_field_mapping_type {
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
-};
-
-struct devlink_dev_stats {
-	u32 reload_stats[6];
-	u32 remote_reload_stats[6];
-};
-
-struct devlink_dpipe_headers;
-
-struct devlink_ops;
-
-struct devlink {
-	struct list_head list;
-	struct list_head port_list;
-	struct list_head sb_list;
-	struct list_head dpipe_table_list;
-	struct list_head resource_list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-	struct devlink_dpipe_headers *dpipe_headers;
-	struct list_head trap_list;
-	struct list_head trap_group_list;
-	struct list_head trap_policer_list;
-	const struct devlink_ops *ops;
-	struct xarray snapshot_ids;
-	struct devlink_dev_stats stats;
-	struct device *dev;
-	possible_net_t _net;
-	struct mutex lock;
-	u8 reload_failed: 1;
-	u8 reload_enabled: 1;
-	u8 registered: 1;
-	long: 61;
-	long: 64;
-	char priv[0];
-};
-
-struct devlink_dpipe_header;
-
-struct devlink_dpipe_headers {
-	struct devlink_dpipe_header **headers;
-	unsigned int headers_count;
-};
-
-struct devlink_sb_pool_info;
-
-struct devlink_info_req;
-
-struct devlink_flash_update_params;
-
-struct devlink_trap;
-
-struct devlink_trap_group;
-
-struct devlink_trap_policer;
-
-struct devlink_ops {
-	u32 supported_flash_update_params;
-	long unsigned int reload_actions;
-	long unsigned int reload_limits;
-	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
-	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
-	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
-	int (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);
-	int (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);
-	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
-	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
-	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
-	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
-	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
-	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
-	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
-	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
-	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
-	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
-	int (*eswitch_mode_get)(struct devlink *, u16 *);
-	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
-	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
-	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
-	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
-	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
-	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
-	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
-	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
-	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
-	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
-	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
-	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
-	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
-	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
-	int (*port_function_hw_addr_get)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
-	int (*port_function_hw_addr_set)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
-};
-
-struct devlink_sb_pool_info {
-	enum devlink_sb_pool_type pool_type;
-	u32 size;
-	enum devlink_sb_threshold_type threshold_type;
-	u32 cell_size;
-};
-
-struct devlink_dpipe_field {
-	const char *name;
-	unsigned int id;
-	unsigned int bitwidth;
-	enum devlink_dpipe_field_mapping_type mapping_type;
-};
-
-struct devlink_dpipe_header {
-	const char *name;
-	unsigned int id;
-	struct devlink_dpipe_field *fields;
-	unsigned int fields_count;
-	bool global;
-};
-
-union devlink_param_value {
-	u8 vu8;
-	u16 vu16;
-	u32 vu32;
-	char vstr[32];
-	bool vbool;
-};
-
-struct devlink_param_gset_ctx {
-	union devlink_param_value val;
-	enum devlink_param_cmode cmode;
-};
-
-struct devlink_flash_update_params {
-	const char *file_name;
-	const char *component;
-	u32 overwrite_mask;
-};
-
-struct devlink_trap_policer {
-	u32 id;
-	u64 init_rate;
-	u64 init_burst;
-	u64 max_rate;
-	u64 min_rate;
-	u64 max_burst;
-	u64 min_burst;
-};
-
-struct devlink_trap_group {
-	const char *name;
-	u16 id;
-	bool generic;
-	u32 init_policer_id;
-};
-
-struct devlink_trap {
-	enum devlink_trap_type type;
-	enum devlink_trap_action init_action;
-	bool generic;
-	u16 id;
-	const char *name;
-	u16 init_group_id;
-	u32 metadata_cap;
-};
-
-struct switchdev_trans {
-	bool ph_prepare;
-};
-
-enum switchdev_obj_id {
-	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
-	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
-	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
-	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
-	SWITCHDEV_OBJ_ID_MRP = 4,
-	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
-	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
-	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
-	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
-	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
-	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
-};
-
-struct switchdev_obj {
-	struct net_device *orig_dev;
-	enum switchdev_obj_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
-};
-
-struct switchdev_obj_port_vlan {
-	struct switchdev_obj obj;
-	u16 flags;
-	u16 vid_begin;
-	u16 vid_end;
-};
-
-struct switchdev_obj_port_mdb {
-	struct switchdev_obj obj;
-	unsigned char addr[6];
-	u16 vid;
-};
-
-enum dsa_tag_protocol {
-	DSA_TAG_PROTO_NONE = 0,
-	DSA_TAG_PROTO_BRCM = 1,
-	DSA_TAG_PROTO_BRCM_PREPEND = 2,
-	DSA_TAG_PROTO_DSA = 3,
-	DSA_TAG_PROTO_EDSA = 4,
-	DSA_TAG_PROTO_GSWIP = 5,
-	DSA_TAG_PROTO_KSZ9477 = 6,
-	DSA_TAG_PROTO_KSZ9893 = 7,
-	DSA_TAG_PROTO_LAN9303 = 8,
-	DSA_TAG_PROTO_MTK = 9,
-	DSA_TAG_PROTO_QCA = 10,
-	DSA_TAG_PROTO_TRAILER = 11,
-	DSA_TAG_PROTO_8021Q = 12,
-	DSA_TAG_PROTO_SJA1105 = 13,
-	DSA_TAG_PROTO_KSZ8795 = 14,
-	DSA_TAG_PROTO_OCELOT = 15,
-	DSA_TAG_PROTO_AR9331 = 16,
-	DSA_TAG_PROTO_RTL4_A = 17,
-};
-
-struct dsa_device_ops {
-	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	unsigned int overhead;
-	const char *name;
-	enum dsa_tag_protocol proto;
-	bool promisc_on_master;
-	bool tail_tag;
-};
-
-struct dsa_netdevice_ops {
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-};
-
-struct dsa_switch_tree {
-	struct list_head list;
-	struct raw_notifier_head nh;
-	unsigned int index;
-	struct kref refcount;
-	bool setup;
-	struct dsa_platform_data *pd;
-	struct list_head ports;
-	struct list_head rtable;
-};
-
-struct dsa_mall_mirror_tc_entry {
-	u8 to_local_port;
-	bool ingress;
-};
-
-struct dsa_mall_policer_tc_entry {
-	u32 burst;
-	u64 rate_bytes_per_sec;
-};
-
-struct dsa_switch_ops;
-
-struct dsa_switch {
-	bool setup;
-	struct device *dev;
-	struct dsa_switch_tree *dst;
-	unsigned int index;
-	struct notifier_block nb;
-	void *priv;
-	struct dsa_chip_data *cd;
-	const struct dsa_switch_ops *ops;
-	u32 phys_mii_mask;
-	struct mii_bus *slave_mii_bus;
-	unsigned int ageing_time_min;
-	unsigned int ageing_time_max;
-	struct devlink *devlink;
-	unsigned int num_tx_queues;
-	bool vlan_filtering_is_global;
-	bool configure_vlan_while_not_filtering;
-	bool untag_bridge_pvid;
-	bool vlan_filtering;
-	bool pcs_poll;
-	bool mtu_enforcement_ingress;
-	size_t num_ports;
-};
-
-struct fixed_phy_status___2;
-
-typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
-
-struct dsa_switch_ops {
-	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
-	int (*setup)(struct dsa_switch *);
-	void (*teardown)(struct dsa_switch *);
-	u32 (*get_phy_flags)(struct dsa_switch *, int);
-	int (*phy_read)(struct dsa_switch *, int, int);
-	int (*phy_write)(struct dsa_switch *, int, int, u16);
-	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
-	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);
-	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
-	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
-	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
-	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
-	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
-	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
-	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
-	int (*get_sset_count)(struct dsa_switch *, int, int);
-	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
-	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
-	int (*suspend)(struct dsa_switch *);
-	int (*resume)(struct dsa_switch *);
-	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
-	void (*port_disable)(struct dsa_switch *, int);
-	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_eeprom_len)(struct dsa_switch *);
-	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*get_regs_len)(struct dsa_switch *, int);
-	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
-	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
-	int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
-	void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
-	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
-	void (*port_fast_age)(struct dsa_switch *, int);
-	int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
-	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);
-	int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
-	int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
-	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
-	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
-	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
-	void (*port_policer_del)(struct dsa_switch *, int);
-	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
-	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
-	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
-	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
-	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
-	bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*port_change_mtu)(struct dsa_switch *, int, int);
-	int (*port_max_mtu)(struct dsa_switch *, int);
-};
-
-struct dsa_loop_pdata {
-	struct dsa_chip_data cd;
-	const char *name;
-	unsigned int enabled_ports;
-	const char *netdev;
-};
-
-struct ptp_clock_time {
-	__s64 sec;
-	__u32 nsec;
-	__u32 reserved;
-};
-
-struct ptp_extts_request {
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-struct ptp_perout_request {
-	union {
-		struct ptp_clock_time start;
-		struct ptp_clock_time phase;
-	};
-	struct ptp_clock_time period;
-	unsigned int index;
-	unsigned int flags;
-	union {
-		struct ptp_clock_time on;
-		unsigned int rsv[4];
-	};
-};
-
-enum ptp_pin_function {
-	PTP_PF_NONE = 0,
-	PTP_PF_EXTTS = 1,
-	PTP_PF_PEROUT = 2,
-	PTP_PF_PHYSYNC = 3,
-};
-
-struct ptp_pin_desc {
-	char name[64];
-	unsigned int index;
-	unsigned int func;
-	unsigned int chan;
-	unsigned int rsv[5];
-};
-
-struct ptp_clock_request {
-	enum {
-		PTP_CLK_REQ_EXTTS = 0,
-		PTP_CLK_REQ_PEROUT = 1,
-		PTP_CLK_REQ_PPS = 2,
-	} type;
-	union {
-		struct ptp_extts_request extts;
-		struct ptp_perout_request perout;
-	};
-};
-
-struct ptp_clock_info {
-	struct module *owner;
-	char name[16];
-	s32 max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int n_pins;
-	int pps;
-	struct ptp_pin_desc *pin_config;
-	int (*adjfine)(struct ptp_clock_info *, long int);
-	int (*adjfreq)(struct ptp_clock_info *, s32);
-	int (*adjphase)(struct ptp_clock_info *, s32);
-	int (*adjtime)(struct ptp_clock_info *, s64);
-	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
-	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
-	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
-	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
-	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
-	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
-	long int (*do_aux_work)(struct ptp_clock_info *);
-};
-
-struct ptp_clock;
-
-struct cavium_ptp {
-	struct pci_dev *pdev;
-	spinlock_t spin_lock;
-	struct cyclecounter cycle_counter;
-	struct timecounter time_counter;
-	void *reg_base;
-	u32 clock_rate;
-	struct ptp_clock_info ptp_info;
-	struct ptp_clock *ptp_clock;
-};
-
-struct mlxfw_dev_ops;
-
-struct mlxfw_dev {
-	const struct mlxfw_dev_ops *ops;
-	const char *psid;
-	u16 psid_size;
-	struct devlink *devlink;
-};
-
-enum mlxfw_fsm_state {
-	MLXFW_FSM_STATE_IDLE = 0,
-	MLXFW_FSM_STATE_LOCKED = 1,
-	MLXFW_FSM_STATE_INITIALIZE = 2,
-	MLXFW_FSM_STATE_DOWNLOAD = 3,
-	MLXFW_FSM_STATE_VERIFY = 4,
-	MLXFW_FSM_STATE_APPLY = 5,
-	MLXFW_FSM_STATE_ACTIVATE = 6,
-};
-
-enum mlxfw_fsm_state_err {
-	MLXFW_FSM_STATE_ERR_OK = 0,
-	MLXFW_FSM_STATE_ERR_ERROR = 1,
-	MLXFW_FSM_STATE_ERR_REJECTED_DIGEST_ERR = 2,
-	MLXFW_FSM_STATE_ERR_REJECTED_NOT_APPLICABLE = 3,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNKNOWN_KEY = 4,
-	MLXFW_FSM_STATE_ERR_REJECTED_AUTH_FAILED = 5,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNSIGNED = 6,
-	MLXFW_FSM_STATE_ERR_REJECTED_KEY_NOT_APPLICABLE = 7,
-	MLXFW_FSM_STATE_ERR_REJECTED_BAD_FORMAT = 8,
-	MLXFW_FSM_STATE_ERR_BLOCKED_PENDING_RESET = 9,
-	MLXFW_FSM_STATE_ERR_MAX = 10,
-};
-
-struct mlxfw_dev_ops {
-	int (*component_query)(struct mlxfw_dev *, u16, u32 *, u8 *, u16 *);
-	int (*fsm_lock)(struct mlxfw_dev *, u32 *);
-	int (*fsm_component_update)(struct mlxfw_dev *, u32, u16, u32);
-	int (*fsm_block_download)(struct mlxfw_dev *, u32, u8 *, u16, u32);
-	int (*fsm_component_verify)(struct mlxfw_dev *, u32, u16);
-	int (*fsm_activate)(struct mlxfw_dev *, u32);
-	int (*fsm_reactivate)(struct mlxfw_dev *, u8 *);
-	int (*fsm_query_state)(struct mlxfw_dev *, u32, enum mlxfw_fsm_state *, enum mlxfw_fsm_state_err *);
-	void (*fsm_cancel)(struct mlxfw_dev *, u32);
-	void (*fsm_release)(struct mlxfw_dev *, u32);
-};
-
-enum mlxfw_fsm_reactivate_status {
-	MLXFW_FSM_REACTIVATE_STATUS_OK = 0,
-	MLXFW_FSM_REACTIVATE_STATUS_BUSY = 1,
-	MLXFW_FSM_REACTIVATE_STATUS_PROHIBITED_FW_VER_ERR = 2,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_COPY_FAILED = 3,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_ERASE_FAILED = 4,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_RESTORE_FAILED = 5,
-	MLXFW_FSM_REACTIVATE_STATUS_CANDIDATE_FW_DEACTIVATION_FAILED = 6,
-	MLXFW_FSM_REACTIVATE_STATUS_FW_ALREADY_ACTIVATED = 7,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_DEVICE_RESET_REQUIRED = 8,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_FW_PROGRAMMING_NEEDED = 9,
-	MLXFW_FSM_REACTIVATE_STATUS_MAX = 10,
-};
-
-struct mlxfw_mfa2_component {
-	u16 index;
-	u32 data_size;
-	u8 *data;
-};
-
-struct mlxfw_mfa2_file;
-
-struct mlxfw_mfa2_tlv;
-
-struct mlxfw_mfa2_file___2 {
-	const struct firmware *fw;
-	const struct mlxfw_mfa2_tlv *first_dev;
-	u16 dev_count;
-	const struct mlxfw_mfa2_tlv *first_component;
-	u16 component_count;
-	const void *cb;
-	u32 cb_archive_size;
-};
-
-struct mlxfw_mfa2_tlv {
-	u8 version;
-	u8 type;
-	__be16 len;
-	u8 data[0];
-};
-
-enum mlxfw_mfa2_tlv_type {
-	MLXFW_MFA2_TLV_MULTI_PART = 1,
-	MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR = 2,
-	MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR = 4,
-	MLXFW_MFA2_TLV_COMPONENT_PTR = 34,
-	MLXFW_MFA2_TLV_PSID = 42,
-};
-
-struct mlxfw_mfa2_tlv_multi {
-	__be16 num_extensions;
-	__be16 total_len;
-};
-
-struct mlxfw_mfa2_tlv_package_descriptor {
-	__be16 num_components;
-	__be16 num_devices;
-	__be32 cb_offset;
-	__be32 cb_archive_size;
-	__be32 cb_size_h;
-	__be32 cb_size_l;
-	u8 padding[3];
-	u8 cv_compression;
-	__be32 user_data_offset;
-};
-
-struct mlxfw_mfa2_tlv_psid {
-	u8 psid[0];
-};
-
-struct mlxfw_mfa2_tlv_component_ptr {
-	__be16 storage_id;
-	__be16 component_index;
-	__be32 storage_address;
-};
-
-struct mlxfw_mfa2_tlv_component_descriptor {
-	__be16 pldm_classification;
-	__be16 identifier;
-	__be32 cb_offset_h;
-	__be32 cb_offset_l;
-	__be32 size;
-};
-
-struct mlxfw_mfa2_comp_data {
-	struct mlxfw_mfa2_component comp;
-	u8 buff[0];
-};
-
-struct wl1251_platform_data {
-	int power_gpio;
-	int irq;
-	bool use_eeprom;
-};
-
-enum {
-	SKB_GSO_TCPV4 = 1,
-	SKB_GSO_DODGY = 2,
-	SKB_GSO_TCP_ECN = 4,
-	SKB_GSO_TCP_FIXEDID = 8,
-	SKB_GSO_TCPV6 = 16,
-	SKB_GSO_FCOE = 32,
-	SKB_GSO_GRE = 64,
-	SKB_GSO_GRE_CSUM = 128,
-	SKB_GSO_IPXIP4 = 256,
-	SKB_GSO_IPXIP6 = 512,
-	SKB_GSO_UDP_TUNNEL = 1024,
-	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
-	SKB_GSO_PARTIAL = 4096,
-	SKB_GSO_TUNNEL_REMCSUM = 8192,
-	SKB_GSO_SCTP = 16384,
-	SKB_GSO_ESP = 32768,
-	SKB_GSO_UDP = 65536,
-	SKB_GSO_UDP_L4 = 131072,
-	SKB_GSO_FRAGLIST = 262144,
-};
-
-enum ethtool_stringset {
-	ETH_SS_TEST = 0,
-	ETH_SS_STATS = 1,
-	ETH_SS_PRIV_FLAGS = 2,
-	ETH_SS_NTUPLE_FILTERS = 3,
-	ETH_SS_FEATURES = 4,
-	ETH_SS_RSS_HASH_FUNCS = 5,
-	ETH_SS_TUNABLES = 6,
-	ETH_SS_PHY_STATS = 7,
-	ETH_SS_PHY_TUNABLES = 8,
-	ETH_SS_LINK_MODES = 9,
-	ETH_SS_MSG_CLASSES = 10,
-	ETH_SS_WOL_MODES = 11,
-	ETH_SS_SOF_TIMESTAMPING = 12,
-	ETH_SS_TS_TX_TYPES = 13,
-	ETH_SS_TS_RX_FILTERS = 14,
-	ETH_SS_UDP_TUNNEL_TYPES = 15,
-	ETH_SS_COUNT = 16,
-};
-
-struct gro_list {
-	struct list_head list;
-	int count;
-};
-
-struct napi_struct {
-	struct list_head poll_list;
-	long unsigned int state;
-	int weight;
-	int defer_hard_irqs_count;
-	long unsigned int gro_bitmask;
-	int (*poll)(struct napi_struct *, int);
-	int poll_owner;
-	struct net_device *dev;
-	struct gro_list gro_hash[8];
-	struct sk_buff *skb;
-	struct list_head rx_list;
-	int rx_count;
-	struct hrtimer timer;
-	struct list_head dev_list;
-	struct hlist_node napi_hash_node;
-	unsigned int napi_id;
-};
-
-enum netdev_queue_state_t {
-	__QUEUE_STATE_DRV_XOFF = 0,
-	__QUEUE_STATE_STACK_XOFF = 1,
-	__QUEUE_STATE_FROZEN = 2,
-};
-
-enum skb_free_reason {
-	SKB_REASON_CONSUMED = 0,
-	SKB_REASON_DROPPED = 1,
-};
-
-struct pp_alloc_cache {
-	u32 count;
-	void *cache[128];
-};
-
-struct page_pool_params {
-	unsigned int flags;
-	unsigned int order;
-	unsigned int pool_size;
-	int nid;
-	struct device *dev;
-	enum dma_data_direction dma_dir;
-	unsigned int max_len;
-	unsigned int offset;
-};
-
-struct page_pool {
-	struct page_pool_params p;
-	struct delayed_work release_dw;
-	void (*disconnect)(void *);
-	long unsigned int defer_start;
-	long unsigned int defer_warn;
-	u32 pages_state_hold_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct pp_alloc_cache alloc;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct ptr_ring ring;
-	atomic_t pages_state_release_cnt;
-	refcount_t user_cnt;
-	u64 destroy_cnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xen_netif_tx_request {
-	grant_ref_t gref;
-	uint16_t offset;
-	uint16_t flags;
-	uint16_t id;
-	uint16_t size;
-};
-
-struct xen_netif_extra_info {
-	uint8_t type;
-	uint8_t flags;
-	union {
-		struct {
-			uint16_t size;
-			uint8_t type;
-			uint8_t pad;
-			uint16_t features;
-		} gso;
-		struct {
-			uint8_t addr[6];
-		} mcast;
-		struct {
-			uint8_t type;
-			uint8_t algorithm;
-			uint8_t value[4];
-		} hash;
-		struct {
-			uint16_t headroom;
-			uint16_t pad[2];
-		} xdp;
-		uint16_t pad[3];
-	} u;
-};
-
-struct xen_netif_tx_response {
-	uint16_t id;
-	int16_t status;
-};
-
-struct xen_netif_rx_request {
-	uint16_t id;
-	uint16_t pad;
-	grant_ref_t gref;
-};
-
-struct xen_netif_rx_response {
-	uint16_t id;
-	uint16_t offset;
-	uint16_t flags;
-	int16_t status;
-};
-
-union xen_netif_tx_sring_entry {
-	struct xen_netif_tx_request req;
-	struct xen_netif_tx_response rsp;
-};
-
-struct xen_netif_tx_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_netif_tx_sring_entry ring[1];
-};
-
-struct xen_netif_tx_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct xen_netif_tx_sring *sring;
-};
-
-union xen_netif_rx_sring_entry {
-	struct xen_netif_rx_request req;
-	struct xen_netif_rx_response rsp;
-};
-
-struct xen_netif_rx_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_netif_rx_sring_entry ring[1];
-};
-
-struct xen_netif_rx_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct xen_netif_rx_sring *sring;
-};
-
-struct netfront_cb {
-	int pull_to;
-};
-
-struct netfront_stats {
-	u64 packets;
-	u64 bytes;
-	struct u64_stats_sync syncp;
-};
-
-union skb_entry {
-	struct sk_buff *skb;
-	long unsigned int link;
-};
-
-struct netfront_info;
-
-struct netfront_queue {
-	unsigned int id;
-	char name[22];
-	struct netfront_info *info;
-	struct bpf_prog *xdp_prog;
-	struct napi_struct napi;
-	unsigned int tx_evtchn;
-	unsigned int rx_evtchn;
-	unsigned int tx_irq;
-	unsigned int rx_irq;
-	char tx_irq_name[25];
-	char rx_irq_name[25];
-	spinlock_t tx_lock;
-	struct xen_netif_tx_front_ring tx;
-	int tx_ring_ref;
-	union skb_entry tx_skbs[256];
-	grant_ref_t gref_tx_head;
-	grant_ref_t grant_tx_ref[256];
-	struct page *grant_tx_page[256];
-	unsigned int tx_skb_freelist;
-	long: 32;
-	long: 64;
-	long: 64;
-	spinlock_t rx_lock;
-	struct xen_netif_rx_front_ring rx;
-	int rx_ring_ref;
-	struct timer_list rx_refill_timer;
-	struct sk_buff *rx_skbs[256];
-	grant_ref_t gref_rx_head;
-	grant_ref_t grant_rx_ref[256];
-	struct page_pool *page_pool;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-};
-
-struct netfront_info {
-	struct list_head list;
-	struct net_device *netdev;
-	struct xenbus_device *xbdev;
-	struct netfront_queue *queues;
-	struct netfront_stats *rx_stats;
-	struct netfront_stats *tx_stats;
-	bool netback_has_xdp_headroom;
-	bool netfront_xdp_enabled;
-	atomic_t rx_gso_checksum_fixup;
-};
-
-struct netfront_rx_info {
-	struct xen_netif_rx_response rx;
-	struct xen_netif_extra_info extras[5];
-};
-
-struct xennet_gnttab_make_txreq {
-	struct netfront_queue *queue;
-	struct sk_buff *skb;
-	struct page *page;
-	struct xen_netif_tx_request *tx;
-	unsigned int size;
-};
-
-struct xennet_stat {
-	char name[32];
-	u16 offset;
-};
-
-enum usb_otg_state {
-	OTG_STATE_UNDEFINED = 0,
-	OTG_STATE_B_IDLE = 1,
-	OTG_STATE_B_SRP_INIT = 2,
-	OTG_STATE_B_PERIPHERAL = 3,
-	OTG_STATE_B_WAIT_ACON = 4,
-	OTG_STATE_B_HOST = 5,
-	OTG_STATE_A_IDLE = 6,
-	OTG_STATE_A_WAIT_VRISE = 7,
-	OTG_STATE_A_WAIT_BCON = 8,
-	OTG_STATE_A_HOST = 9,
-	OTG_STATE_A_SUSPEND = 10,
-	OTG_STATE_A_PERIPHERAL = 11,
-	OTG_STATE_A_WAIT_VFALL = 12,
-	OTG_STATE_A_VBUS_ERR = 13,
-};
-
-struct usb_otg_caps {
-	u16 otg_rev;
-	bool hnp_support;
-	bool srp_support;
-	bool adp_support;
-};
-
-struct extcon_dev;
-
-enum usb_charger_type {
-	UNKNOWN_TYPE = 0,
-	SDP_TYPE = 1,
-	DCP_TYPE = 2,
-	CDP_TYPE = 3,
-	ACA_TYPE = 4,
-};
-
-enum usb_charger_state {
-	USB_CHARGER_DEFAULT = 0,
-	USB_CHARGER_PRESENT = 1,
-	USB_CHARGER_ABSENT = 2,
-};
-
-enum usb_phy_events {
-	USB_EVENT_NONE = 0,
-	USB_EVENT_VBUS = 1,
-	USB_EVENT_ID = 2,
-	USB_EVENT_CHARGER = 3,
-	USB_EVENT_ENUMERATED = 4,
-};
-
-enum usb_phy_type {
-	USB_PHY_TYPE_UNDEFINED = 0,
-	USB_PHY_TYPE_USB2 = 1,
-	USB_PHY_TYPE_USB3 = 2,
-};
-
-struct usb_phy___2;
-
-struct usb_phy_io_ops {
-	int (*read)(struct usb_phy___2 *, u32);
-	int (*write)(struct usb_phy___2 *, u32, u32);
-};
-
-struct usb_charger_current {
-	unsigned int sdp_min;
-	unsigned int sdp_max;
-	unsigned int dcp_min;
-	unsigned int dcp_max;
-	unsigned int cdp_min;
-	unsigned int cdp_max;
-	unsigned int aca_min;
-	unsigned int aca_max;
-};
-
-struct usb_otg;
-
-struct usb_phy___2 {
-	struct device *dev;
-	const char *label;
-	unsigned int flags;
-	enum usb_phy_type type;
-	enum usb_phy_events last_event;
-	struct usb_otg *otg;
-	struct device *io_dev;
-	struct usb_phy_io_ops *io_ops;
-	void *io_priv;
-	struct extcon_dev *edev;
-	struct extcon_dev *id_edev;
-	struct notifier_block vbus_nb;
-	struct notifier_block id_nb;
-	struct notifier_block type_nb;
-	enum usb_charger_type chg_type;
-	enum usb_charger_state chg_state;
-	struct usb_charger_current chg_cur;
-	struct work_struct chg_work;
-	struct atomic_notifier_head notifier;
-	u16 port_status;
-	u16 port_change;
-	struct list_head head;
-	int (*init)(struct usb_phy___2 *);
-	void (*shutdown)(struct usb_phy___2 *);
-	int (*set_vbus)(struct usb_phy___2 *, int);
-	int (*set_power)(struct usb_phy___2 *, unsigned int);
-	int (*set_suspend)(struct usb_phy___2 *, int);
-	int (*set_wakeup)(struct usb_phy___2 *, bool);
-	int (*notify_connect)(struct usb_phy___2 *, enum usb_device_speed);
-	int (*notify_disconnect)(struct usb_phy___2 *, enum usb_device_speed);
-	enum usb_charger_type (*charger_detect)(struct usb_phy___2 *);
-};
-
-struct phy_devm {
-	struct usb_phy___2 *phy;
-	struct notifier_block *nb;
-};
-
-enum usb_phy_interface {
-	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
-	USBPHY_INTERFACE_MODE_UTMI = 1,
-	USBPHY_INTERFACE_MODE_UTMIW = 2,
-	USBPHY_INTERFACE_MODE_ULPI = 3,
-	USBPHY_INTERFACE_MODE_SERIAL = 4,
-	USBPHY_INTERFACE_MODE_HSIC = 5,
-};
-
-struct usb_gadget;
-
-struct usb_otg {
-	u8 default_a;
-	struct phy *phy;
-	struct usb_phy___2 *usb_phy;
-	struct usb_bus *host;
-	struct usb_gadget *gadget;
-	enum usb_otg_state state;
-	int (*set_host)(struct usb_otg *, struct usb_bus *);
-	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
-	int (*set_vbus)(struct usb_otg *, bool);
-	int (*start_srp)(struct usb_otg *);
-	int (*start_hnp)(struct usb_otg *);
-};
-
-struct ulpi_info {
-	unsigned int id;
-	char *name;
-};
-
-enum amd_chipset_gen {
-	NOT_AMD_CHIPSET = 0,
-	AMD_CHIPSET_SB600 = 1,
-	AMD_CHIPSET_SB700 = 2,
-	AMD_CHIPSET_SB800 = 3,
-	AMD_CHIPSET_HUDSON2 = 4,
-	AMD_CHIPSET_BOLTON = 5,
-	AMD_CHIPSET_YANGTZE = 6,
-	AMD_CHIPSET_TAISHAN = 7,
-	AMD_CHIPSET_UNKNOWN = 8,
-};
-
-struct amd_chipset_type {
-	enum amd_chipset_gen gen;
-	u8 rev;
-};
-
-struct amd_chipset_info {
-	struct pci_dev *nb_dev;
-	struct pci_dev *smbus_dev;
-	int nb_type;
-	struct amd_chipset_type sb_type;
-	int isoc_reqs;
-	int probe_count;
-	bool need_pll_quirk;
-};
-
-struct serio_device_id {
-	__u8 type;
-	__u8 extra;
-	__u8 id;
-	__u8 proto;
-};
-
-struct serio_driver;
-
-struct serio {
-	void *port_data;
-	char name[32];
-	char phys[32];
-	char firmware_id[128];
-	bool manual_bind;
-	struct serio_device_id id;
+struct usb_sg_request {
+	int status;
+	size_t bytes;
 	spinlock_t lock;
-	int (*write)(struct serio *, unsigned char);
-	int (*open)(struct serio *);
-	void (*close)(struct serio *);
-	int (*start)(struct serio *);
-	void (*stop)(struct serio *);
-	struct serio *parent;
-	struct list_head child_node;
-	struct list_head children;
-	unsigned int depth;
-	struct serio_driver *drv;
-	struct mutex drv_mutex;
-	struct device dev;
-	struct list_head node;
-	struct mutex *ps2_cmd_mutex;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
 };
 
-struct serio_driver {
-	const char *description;
-	const struct serio_device_id *id_table;
-	bool manual_bind;
-	void (*write_wakeup)(struct serio *);
-	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
-	int (*connect)(struct serio *, struct serio_driver *);
-	int (*reconnect)(struct serio *);
-	int (*fast_reconnect)(struct serio *);
-	void (*disconnect)(struct serio *);
-	void (*cleanup)(struct serio *);
-	struct device_driver driver;
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
 };
 
-enum serio_event_type {
-	SERIO_RESCAN_PORT = 0,
-	SERIO_RECONNECT_PORT = 1,
-	SERIO_RECONNECT_SUBTREE = 2,
-	SERIO_REGISTER_PORT = 3,
-	SERIO_ATTACH_DRIVER = 4,
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
 };
 
-struct serio_event {
-	enum serio_event_type type;
-	void *object;
-	struct module *owner;
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
 	struct list_head node;
 };
 
-struct amba_kmi_port {
-	struct serio *io;
-	struct clk *clk;
-	void *base;
-	unsigned int irq;
-	unsigned int divisor;
-	unsigned int open;
+struct mon_iso_desc {
+	int status;
+	unsigned int offset;
+	unsigned int length;
 };
 
-struct ps2dev {
-	struct serio *serio;
-	struct mutex cmd_mutex;
+struct mon_event_text {
+	struct list_head e_link;
+	int type;
+	long unsigned int id;
+	unsigned int tstamp;
+	int busnum;
+	char devnum;
+	char epnum;
+	char is_in;
+	char xfertype;
+	int length;
+	int status;
+	int interval;
+	int start_frame;
+	int error_count;
+	char setup_flag;
+	char data_flag;
+	int numdesc;
+	struct mon_iso_desc isodesc[5];
+	unsigned char setup[8];
+	unsigned char data[32];
+};
+
+struct mon_reader_text {
+	struct kmem_cache *e_slab;
+	int nevents;
+	struct list_head e_list;
+	struct mon_reader r;
 	wait_queue_head_t wait;
-	long unsigned int flags;
-	u8 cmdbuf[8];
-	u8 cmdcnt;
-	u8 nak;
+	int printf_size;
+	size_t printf_offset;
+	size_t printf_togo;
+	char *printf_buf;
+	struct mutex printf_lock;
+	char slab_name[30];
 };
 
-struct input_mt_slot {
-	int abs[14];
-	unsigned int frame;
-	unsigned int key;
+struct mon_text_ptr {
+	int cnt;
+	int limit;
+	char *pbuf;
 };
 
-struct input_mt {
-	int trkid;
-	int num_slots;
-	int slot;
-	unsigned int flags;
-	unsigned int frame;
-	int *red;
-	struct input_mt_slot slots[0];
+enum {
+	NAMESZ = 10,
+};
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+struct xhci_driver_data {
+	u64 quirks;
+	const char *firmware;
 };
 
 union input_seq_state {
@@ -89232,243 +99077,6 @@
 	struct input_dev *input;
 };
 
-struct input_event {
-	__kernel_ulong_t __sec;
-	__kernel_ulong_t __usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct input_event_compat {
-	compat_ulong_t sec;
-	compat_ulong_t usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct ff_periodic_effect_compat {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	compat_uptr_t custom_data;
-};
-
-struct ff_effect_compat {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect_compat periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_mt_pos {
-	s16 x;
-	s16 y;
-};
-
-struct input_dev_poller {
-	void (*poll)(struct input_dev *);
-	unsigned int poll_interval;
-	unsigned int poll_interval_max;
-	unsigned int poll_interval_min;
-	struct input_dev *input;
-	struct delayed_work work;
-};
-
-struct mousedev_hw_data {
-	int dx;
-	int dy;
-	int dz;
-	int x;
-	int y;
-	int abs_event;
-	long unsigned int buttons;
-};
-
-struct mousedev {
-	int open;
-	struct input_handle handle;
-	wait_queue_head_t wait;
-	struct list_head client_list;
-	spinlock_t client_lock;
-	struct mutex mutex;
-	struct device dev;
-	struct cdev cdev;
-	bool exist;
-	struct list_head mixdev_node;
-	bool opened_by_mixdev;
-	struct mousedev_hw_data packet;
-	unsigned int pkt_count;
-	int old_x[4];
-	int old_y[4];
-	int frac_dx;
-	int frac_dy;
-	long unsigned int touch;
-	int (*open_device)(struct mousedev *);
-	void (*close_device)(struct mousedev *);
-};
-
-enum mousedev_emul {
-	MOUSEDEV_EMUL_PS2 = 0,
-	MOUSEDEV_EMUL_IMPS = 1,
-	MOUSEDEV_EMUL_EXPS = 2,
-};
-
-struct mousedev_motion {
-	int dx;
-	int dy;
-	int dz;
-	long unsigned int buttons;
-};
-
-struct mousedev_client {
-	struct fasync_struct *fasync;
-	struct mousedev *mousedev;
-	struct list_head node;
-	struct mousedev_motion packets[16];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t packet_lock;
-	int pos_x;
-	int pos_y;
-	u8 ps2[6];
-	unsigned char ready;
-	unsigned char buffer;
-	unsigned char bufsiz;
-	unsigned char imexseq;
-	unsigned char impsseq;
-	enum mousedev_emul mode;
-	long unsigned int last_buttons;
-};
-
-enum {
-	FRACTION_DENOM = 128,
-};
-
-struct atkbd {
-	struct ps2dev ps2dev;
-	struct input_dev *dev;
-	char name[64];
-	char phys[32];
-	short unsigned int id;
-	short unsigned int keycode[512];
-	long unsigned int force_release_mask[8];
-	unsigned char set;
-	bool translated;
-	bool extra;
-	bool write;
-	bool softrepeat;
-	bool softraw;
-	bool scroll;
-	bool enabled;
-	unsigned char emul;
-	bool resend;
-	bool release;
-	long unsigned int xl_bit;
-	unsigned int last;
-	long unsigned int time;
-	long unsigned int err_count;
-	struct delayed_work event_work;
-	long unsigned int event_jiffies;
-	long unsigned int event_mask;
-	struct mutex mutex;
-	u32 function_row_physmap[24];
-	int num_function_row_keys;
-};
-
-struct touchscreen_properties {
-	unsigned int max_x;
-	unsigned int max_y;
-	bool invert_x;
-	bool invert_y;
-	bool swap_x_y;
-};
-
-struct xenkbd_motion {
-	uint8_t type;
-	int32_t rel_x;
-	int32_t rel_y;
-	int32_t rel_z;
-};
-
-struct xenkbd_key {
-	uint8_t type;
-	uint8_t pressed;
-	uint32_t keycode;
-};
-
-struct xenkbd_position {
-	uint8_t type;
-	int32_t abs_x;
-	int32_t abs_y;
-	int32_t rel_z;
-};
-
-struct xenkbd_mtouch {
-	uint8_t type;
-	uint8_t event_type;
-	uint8_t contact_id;
-	uint8_t reserved[5];
-	union {
-		struct {
-			int32_t abs_x;
-			int32_t abs_y;
-		} pos;
-		struct {
-			uint32_t major;
-			uint32_t minor;
-		} shape;
-		int16_t orientation;
-	} u;
-};
-
-union xenkbd_in_event {
-	uint8_t type;
-	struct xenkbd_motion motion;
-	struct xenkbd_key key;
-	struct xenkbd_position pos;
-	struct xenkbd_mtouch mtouch;
-	char pad[40];
-};
-
-struct xenkbd_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-};
-
-struct xenkbd_info {
-	struct input_dev *kbd;
-	struct input_dev *ptr;
-	struct input_dev *mtouch;
-	struct xenkbd_page *page;
-	int gref;
-	int irq;
-	struct xenbus_device *xbdev;
-	char phys[32];
-	int mtouch_cur_contact_id;
-};
-
-enum {
-	KPARAM_X = 0,
-	KPARAM_Y = 1,
-	KPARAM_CNT___2 = 2,
-};
-
 struct trace_event_raw_rtc_time_alarm_class {
 	struct trace_entry ent;
 	time64_t secs;
@@ -89555,185 +99163,6 @@
 	year = 3,
 };
 
-struct pl031_vendor_data {
-	struct rtc_class_ops ops;
-	bool clockwatch;
-	bool st_weekday;
-	long unsigned int irqflags;
-	time64_t range_min;
-	timeu64_t range_max;
-};
-
-struct pl031_local {
-	struct pl031_vendor_data *vendor;
-	struct rtc_device *rtc;
-	void *base;
-};
-
-struct sun6i_rtc_clk_data {
-	long unsigned int rc_osc_rate;
-	unsigned int fixed_prescaler: 16;
-	unsigned int has_prescaler: 1;
-	unsigned int has_out_clk: 1;
-	unsigned int export_iosc: 1;
-	unsigned int has_losc_en: 1;
-	unsigned int has_auto_swt: 1;
-};
-
-struct sun6i_rtc_dev {
-	struct rtc_device *rtc;
-	const struct sun6i_rtc_clk_data *data;
-	void *base;
-	int irq;
-	long unsigned int alarm;
-	struct clk_hw hw;
-	struct clk_hw *int_osc;
-	struct clk *losc;
-	struct clk *ext_losc;
-	spinlock_t lock;
-};
-
-struct xgene_rtc_dev {
-	struct rtc_device *rtc;
-	void *csr_base;
-	struct clk *clk;
-	unsigned int irq_wake;
-	unsigned int irq_enabled;
-};
-
-struct i2c_board_info {
-	char type[20];
-	short unsigned int flags;
-	short unsigned int addr;
-	const char *dev_name;
-	void *platform_data;
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	const struct property_entry *properties;
-	const struct resource *resources;
-	unsigned int num_resources;
-	int irq;
-};
-
-struct i2c_devinfo {
-	struct list_head list;
-	int busnum;
-	struct i2c_board_info board_info;
-};
-
-struct i2c_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-struct i2c_device_identity {
-	u16 manufacturer_id;
-	u16 part_id;
-	u8 die_revision;
-};
-
-enum i2c_alert_protocol {
-	I2C_PROTOCOL_SMBUS_ALERT = 0,
-	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
-};
-
-struct i2c_driver {
-	unsigned int class;
-	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-	int (*remove)(struct i2c_client *);
-	int (*probe_new)(struct i2c_client *);
-	void (*shutdown)(struct i2c_client *);
-	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
-	int (*command)(struct i2c_client *, unsigned int, void *);
-	struct device_driver driver;
-	const struct i2c_device_id *id_table;
-	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-	const short unsigned int *address_list;
-	struct list_head clients;
-};
-
-struct i2c_timings {
-	u32 bus_freq_hz;
-	u32 scl_rise_ns;
-	u32 scl_fall_ns;
-	u32 scl_int_delay_ns;
-	u32 sda_fall_ns;
-	u32 sda_hold_ns;
-	u32 digital_filter_width_ns;
-	u32 analog_filter_cutoff_freq_hz;
-};
-
-struct trace_event_raw_i2c_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 nr_msgs;
-	__s16 ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_i2c_write {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_read {};
-
-struct trace_event_data_offsets_i2c_reply {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_result {};
-
-typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
-
-struct i2c_dummy_devres {
-	struct i2c_client *client;
-};
-
-struct class_compat___2;
-
-struct i2c_cmd_arg {
-	unsigned int cmd;
-	void *arg;
-};
-
 struct i2c_smbus_alert_setup {
 	int irq;
 };
@@ -89801,344 +99230,304 @@
 
 typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
 
-struct i2c_acpi_handler_data {
-	struct acpi_connection_info info;
-	struct i2c_adapter *adapter;
+enum rc_proto {
+	RC_PROTO_UNKNOWN = 0,
+	RC_PROTO_OTHER = 1,
+	RC_PROTO_RC5 = 2,
+	RC_PROTO_RC5X_20 = 3,
+	RC_PROTO_RC5_SZ = 4,
+	RC_PROTO_JVC = 5,
+	RC_PROTO_SONY12 = 6,
+	RC_PROTO_SONY15 = 7,
+	RC_PROTO_SONY20 = 8,
+	RC_PROTO_NEC = 9,
+	RC_PROTO_NECX = 10,
+	RC_PROTO_NEC32 = 11,
+	RC_PROTO_SANYO = 12,
+	RC_PROTO_MCIR2_KBD = 13,
+	RC_PROTO_MCIR2_MSE = 14,
+	RC_PROTO_RC6_0 = 15,
+	RC_PROTO_RC6_6A_20 = 16,
+	RC_PROTO_RC6_6A_24 = 17,
+	RC_PROTO_RC6_6A_32 = 18,
+	RC_PROTO_RC6_MCE = 19,
+	RC_PROTO_SHARP = 20,
+	RC_PROTO_XMP = 21,
+	RC_PROTO_CEC = 22,
+	RC_PROTO_IMON = 23,
+	RC_PROTO_RCMM12 = 24,
+	RC_PROTO_RCMM24 = 25,
+	RC_PROTO_RCMM32 = 26,
+	RC_PROTO_XBOX_DVD = 27,
+	RC_PROTO_MAX = 27,
 };
 
-struct gsb_buffer {
-	u8 status;
-	u8 len;
-	union {
-		u16 wdata;
-		u8 bdata;
-		u8 data[0];
-	};
+struct rc_map_table {
+	u64 scancode;
+	u32 keycode;
 };
 
-struct i2c_acpi_lookup {
-	struct i2c_board_info *info;
-	acpi_handle adapter_handle;
-	acpi_handle device_handle;
-	acpi_handle search_handle;
-	int n;
-	int index;
-	u32 speed;
-	u32 min_speed;
-	u32 force_speed;
-};
-
-struct dw_i2c_dev {
-	struct device *dev;
-	struct regmap *map;
-	struct regmap *sysmap;
-	void *base;
-	void *ext;
-	struct completion cmd_complete;
-	struct clk *clk;
-	struct clk *pclk;
-	struct reset_control *rst;
-	struct i2c_client *slave;
-	u32 (*get_clk_rate_khz)(struct dw_i2c_dev *);
-	int cmd_err;
-	struct i2c_msg *msgs;
-	int msgs_num;
-	int msg_write_idx;
-	u32 tx_buf_len;
-	u8 *tx_buf;
-	int msg_read_idx;
-	u32 rx_buf_len;
-	u8 *rx_buf;
-	int msg_err;
-	unsigned int status;
-	u32 abort_source;
-	int irq;
-	u32 flags;
-	struct i2c_adapter adapter;
-	u32 functionality;
-	u32 master_cfg;
-	u32 slave_cfg;
-	unsigned int tx_fifo_depth;
-	unsigned int rx_fifo_depth;
-	int rx_outstanding;
-	struct i2c_timings timings;
-	u32 sda_hold_time;
-	u16 ss_hcnt;
-	u16 ss_lcnt;
-	u16 fs_hcnt;
-	u16 fs_lcnt;
-	u16 fp_hcnt;
-	u16 fp_lcnt;
-	u16 hs_hcnt;
-	u16 hs_lcnt;
-	int (*acquire_lock)();
-	void (*release_lock)();
-	bool shared_with_punit;
-	void (*disable)(struct dw_i2c_dev *);
-	void (*disable_int)(struct dw_i2c_dev *);
-	int (*init)(struct dw_i2c_dev *);
-	int (*set_sda_hold_time)(struct dw_i2c_dev *);
-	int mode;
-	struct i2c_bus_recovery_info rinfo;
-	bool suspended;
-};
-
-struct dw_i2c_platform_data {
-	unsigned int i2c_scl_freq;
-};
-
-struct bsc_regs {
-	u32 chip_address;
-	u32 data_in[8];
-	u32 cnt_reg;
-	u32 ctl_reg;
-	u32 iic_enable;
-	u32 data_out[8];
-	u32 ctlhi_reg;
-	u32 scl_param;
-};
-
-struct bsc_clk_param {
-	u32 hz;
-	u32 scl_mask;
-	u32 div_mask;
-};
-
-enum bsc_xfer_cmd {
-	CMD_WR = 0,
-	CMD_RD = 1,
-	CMD_WR_NOACK = 2,
-	CMD_RD_NOACK = 3,
-};
-
-enum bus_speeds {
-	SPD_375K = 0,
-	SPD_390K = 1,
-	SPD_187K = 2,
-	SPD_200K = 3,
-	SPD_93K = 4,
-	SPD_97K = 5,
-	SPD_46K = 6,
-	SPD_50K = 7,
-};
-
-struct brcmstb_i2c_dev {
-	struct device *device;
-	void *base;
-	int irq;
-	struct bsc_regs *bsc_regmap;
-	struct i2c_adapter adapter;
-	struct completion done;
-	u32 clk_freq_hz;
-	int data_regsz;
-};
-
-struct pps_ktime {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_ktime_compat {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_kinfo {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-};
-
-struct pps_kinfo_compat {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime_compat assert_tu;
-	struct pps_ktime_compat clear_tu;
-	int current_mode;
-} __attribute__((packed));
-
-struct pps_kparams {
-	int api_version;
-	int mode;
-	struct pps_ktime assert_off_tu;
-	struct pps_ktime clear_off_tu;
-};
-
-struct pps_fdata {
-	struct pps_kinfo info;
-	struct pps_ktime timeout;
-};
-
-struct pps_fdata_compat {
-	struct pps_kinfo_compat info;
-	struct pps_ktime_compat timeout;
-} __attribute__((packed));
-
-struct pps_bind_args {
-	int tsformat;
-	int edge;
-	int consumer;
-};
-
-struct pps_device;
-
-struct pps_source_info {
-	char name[32];
-	char path[32];
-	int mode;
-	void (*echo)(struct pps_device *, int, void *);
-	struct module *owner;
-	struct device *dev;
-};
-
-struct pps_device {
-	struct pps_source_info info;
-	struct pps_kparams params;
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-	unsigned int last_ev;
-	wait_queue_head_t queue;
-	unsigned int id;
-	const void *lookup_cookie;
-	struct cdev cdev;
-	struct device *dev;
-	struct fasync_struct *async_queue;
+struct rc_map {
+	struct rc_map_table *scan;
+	unsigned int size;
+	unsigned int len;
+	unsigned int alloc;
+	enum rc_proto rc_proto;
+	const char *name;
 	spinlock_t lock;
 };
 
-struct pps_event_time {
-	struct timespec64 ts_real;
+enum rc_driver_type {
+	RC_DRIVER_SCANCODE = 0,
+	RC_DRIVER_IR_RAW = 1,
+	RC_DRIVER_IR_RAW_TX = 2,
 };
 
-struct ptp_extts_event {
-	struct ptp_clock_time t;
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
+struct rc_scancode_filter {
+	u32 data;
+	u32 mask;
 };
 
-enum ptp_clock_events {
-	PTP_CLOCK_ALARM = 0,
-	PTP_CLOCK_EXTTS = 1,
-	PTP_CLOCK_PPS = 2,
-	PTP_CLOCK_PPSUSR = 3,
-};
+struct ir_raw_event_ctrl;
 
-struct ptp_clock_event {
-	int type;
-	int index;
-	union {
-		u64 timestamp;
-		struct pps_event_time pps_times;
-	};
-};
-
-struct timestamp_event_queue {
-	struct ptp_extts_event buf[128];
-	int head;
-	int tail;
-	spinlock_t lock;
-};
-
-struct ptp_clock___2 {
-	struct posix_clock clock;
+struct rc_dev {
 	struct device dev;
-	struct ptp_clock_info *info;
-	dev_t devid;
-	int index;
-	struct pps_device *pps_source;
-	long int dialed_frequency;
-	struct timestamp_event_queue tsevq;
-	struct mutex tsevq_mux;
-	struct mutex pincfg_mux;
-	wait_queue_head_t tsev_wq;
-	int defunct;
-	struct device_attribute *pin_dev_attr;
-	struct attribute **pin_attr;
-	struct attribute_group pin_attr_group;
-	const struct attribute_group *pin_attr_groups[2];
-	struct kthread_worker *kworker;
-	struct kthread_delayed_work aux_work;
+	bool managed_alloc;
+	const struct attribute_group *sysfs_groups[5];
+	const char *device_name;
+	const char *input_phys;
+	struct input_id input_id;
+	const char *driver_name;
+	const char *map_name;
+	struct rc_map rc_map;
+	struct mutex lock;
+	unsigned int minor;
+	struct ir_raw_event_ctrl *raw;
+	struct input_dev *input_dev;
+	enum rc_driver_type driver_type;
+	bool idle;
+	bool encode_wakeup;
+	u64 allowed_protocols;
+	u64 enabled_protocols;
+	u64 allowed_wakeup_protocols;
+	enum rc_proto wakeup_protocol;
+	struct rc_scancode_filter scancode_filter;
+	struct rc_scancode_filter scancode_wakeup_filter;
+	u32 scancode_mask;
+	u32 users;
+	void *priv;
+	spinlock_t keylock;
+	bool keypressed;
+	long unsigned int keyup_jiffies;
+	struct timer_list timer_keyup;
+	struct timer_list timer_repeat;
+	u32 last_keycode;
+	enum rc_proto last_protocol;
+	u64 last_scancode;
+	u8 last_toggle;
+	u32 timeout;
+	u32 min_timeout;
+	u32 max_timeout;
+	u32 rx_resolution;
+	u32 tx_resolution;
+	struct device lirc_dev;
+	struct cdev lirc_cdev;
+	ktime_t gap_start;
+	spinlock_t lirc_fh_lock;
+	struct list_head lirc_fh;
+	bool registered;
+	int (*change_protocol)(struct rc_dev *, u64 *);
+	int (*open)(struct rc_dev *);
+	void (*close)(struct rc_dev *);
+	int (*s_tx_mask)(struct rc_dev *, u32);
+	int (*s_tx_carrier)(struct rc_dev *, u32);
+	int (*s_tx_duty_cycle)(struct rc_dev *, u32);
+	int (*s_rx_carrier_range)(struct rc_dev *, u32, u32);
+	int (*tx_ir)(struct rc_dev *, unsigned int *, unsigned int);
+	void (*s_idle)(struct rc_dev *, bool);
+	int (*s_wideband_receiver)(struct rc_dev *, int);
+	int (*s_carrier_report)(struct rc_dev *, int);
+	int (*s_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_wakeup_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_timeout)(struct rc_dev *, unsigned int);
 };
 
-struct ptp_clock_caps {
-	int max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int pps;
-	int n_pins;
-	int cross_timestamping;
-	int adjust_phase;
-	int rsv[12];
+struct ir_raw_event {
+	union {
+		u32 duration;
+		u32 carrier;
+	};
+	u8 duty_cycle;
+	unsigned int pulse: 1;
+	unsigned int overflow: 1;
+	unsigned int timeout: 1;
+	unsigned int carrier_report: 1;
 };
 
-struct ptp_sys_offset {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[51];
+struct nec_dec {
+	int state;
+	unsigned int count;
+	u32 bits;
+	bool is_nec_x;
+	bool necx_repeat;
 };
 
-struct ptp_sys_offset_extended {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[75];
+struct rc5_dec {
+	int state;
+	u32 bits;
+	unsigned int count;
+	bool is_rc5x;
 };
 
-struct ptp_sys_offset_precise {
-	struct ptp_clock_time device;
-	struct ptp_clock_time sys_realtime;
-	struct ptp_clock_time sys_monoraw;
-	unsigned int rsv[4];
+struct rc6_dec {
+	int state;
+	u8 header;
+	u32 body;
+	bool toggle;
+	unsigned int count;
+	unsigned int wanted_bits;
 };
 
-struct gpio_restart {
-	struct gpio_desc *reset_gpio;
-	struct notifier_block restart_handler;
-	u32 active_delay_ms;
-	u32 inactive_delay_ms;
-	u32 wait_delay_ms;
+struct sony_dec {
+	int state;
+	u32 bits;
+	unsigned int count;
 };
 
-enum vexpress_reset_func {
-	FUNC_RESET = 0,
-	FUNC_SHUTDOWN = 1,
-	FUNC_REBOOT = 2,
+struct jvc_dec {
+	int state;
+	u16 bits;
+	u16 old_bits;
+	unsigned int count;
+	bool first;
+	bool toggle;
 };
 
-struct xgene_reboot_context {
-	struct device *dev;
-	void *csr;
-	u32 mask;
-	struct notifier_block restart_handler;
+struct sanyo_dec {
+	int state;
+	unsigned int count;
+	u64 bits;
 };
 
-struct syscon_reboot_context {
-	struct regmap *map;
-	u32 offset;
-	u32 value;
-	u32 mask;
-	struct notifier_block restart_handler;
+struct sharp_dec {
+	int state;
+	unsigned int count;
+	u32 bits;
+	unsigned int pulse_len;
 };
 
-struct reboot_mode_driver {
-	struct device *dev;
-	struct list_head head;
-	int (*write)(struct reboot_mode_driver *, unsigned int);
-	struct notifier_block reboot_notifier;
+struct mce_kbd_dec {
+	spinlock_t keylock;
+	struct timer_list rx_timeout;
+	int state;
+	u8 header;
+	u32 body;
+	unsigned int count;
+	unsigned int wanted_bits;
 };
 
-struct mode_info {
-	const char *mode;
-	u32 magic;
+struct xmp_dec {
+	int state;
+	unsigned int count;
+	u32 durations[16];
+};
+
+struct imon_dec {
+	int state;
+	int count;
+	int last_chk;
+	unsigned int bits;
+	bool stick_keyboard;
+};
+
+struct rcmm_dec {
+	int state;
+	unsigned int count;
+	u32 bits;
+};
+
+struct ir_raw_event_ctrl {
 	struct list_head list;
+	struct task_struct *thread;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct ir_raw_event *type;
+			const struct ir_raw_event *const_type;
+			char (*rectype)[0];
+			struct ir_raw_event *ptr;
+			const struct ir_raw_event *ptr_const;
+		};
+		struct ir_raw_event buf[512];
+	} kfifo;
+	ktime_t last_event;
+	struct rc_dev *dev;
+	spinlock_t edge_spinlock;
+	struct timer_list edge_handle;
+	struct ir_raw_event prev_ev;
+	struct ir_raw_event this_ev;
+	u32 bpf_sample;
+	struct bpf_prog_array *progs;
+	struct nec_dec nec;
+	struct rc5_dec rc5;
+	struct rc6_dec rc6;
+	struct sony_dec sony;
+	struct jvc_dec jvc;
+	struct sanyo_dec sanyo;
+	struct sharp_dec sharp;
+	struct mce_kbd_dec mce_kbd;
+	struct xmp_dec xmp;
+	struct imon_dec imon;
+	struct rcmm_dec rcmm;
+};
+
+struct ir_raw_handler {
+	struct list_head list;
+	u64 protocols;
+	int (*decode)(struct rc_dev *, struct ir_raw_event);
+	int (*encode)(enum rc_proto, u32, struct ir_raw_event *, unsigned int);
+	u32 carrier;
+	u32 min_timeout;
+	int (*raw_register)(struct rc_dev *);
+	int (*raw_unregister)(struct rc_dev *);
+};
+
+struct ir_raw_timings_manchester {
+	unsigned int leader_pulse;
+	unsigned int leader_space;
+	unsigned int clock;
+	unsigned int invert: 1;
+	unsigned int trailer_space;
+};
+
+struct ir_raw_timings_pd {
+	unsigned int header_pulse;
+	unsigned int header_space;
+	unsigned int bit_pulse;
+	unsigned int bit_space[2];
+	unsigned int trailer_pulse;
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct ir_raw_timings_pl {
+	unsigned int header_pulse;
+	unsigned int bit_space;
+	unsigned int bit_pulse[2];
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct tps65086 {
+	struct device *dev;
+	struct regmap *regmap;
+	int irq;
+	struct regmap_irq_chip_data *irq_data;
+};
+
+struct tps65086_restart {
+	struct notifier_block handler;
+	struct device *dev;
 };
 
 struct syscon_reboot_mode {
@@ -90148,1111 +99537,285 @@
 	u32 mask;
 };
 
-enum power_supply_property {
-	POWER_SUPPLY_PROP_STATUS = 0,
-	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
-	POWER_SUPPLY_PROP_HEALTH = 2,
-	POWER_SUPPLY_PROP_PRESENT = 3,
-	POWER_SUPPLY_PROP_ONLINE = 4,
-	POWER_SUPPLY_PROP_AUTHENTIC = 5,
-	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
-	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
-	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
-	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
-	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
-	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
-	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
-	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
-	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
-	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
-	POWER_SUPPLY_PROP_POWER_NOW = 20,
-	POWER_SUPPLY_PROP_POWER_AVG = 21,
-	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
-	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
-	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
-	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
-	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
-	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,
-	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,
-	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,
-	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,
-	POWER_SUPPLY_PROP_ENERGY_FULL = 42,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY = 43,
-	POWER_SUPPLY_PROP_ENERGY_NOW = 44,
-	POWER_SUPPLY_PROP_ENERGY_AVG = 45,
-	POWER_SUPPLY_PROP_CAPACITY = 46,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,
-	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 49,
-	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 50,
-	POWER_SUPPLY_PROP_TEMP = 51,
-	POWER_SUPPLY_PROP_TEMP_MAX = 52,
-	POWER_SUPPLY_PROP_TEMP_MIN = 53,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 54,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 55,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT = 56,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 57,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 58,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 59,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 60,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 61,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 62,
-	POWER_SUPPLY_PROP_TYPE = 63,
-	POWER_SUPPLY_PROP_USB_TYPE = 64,
-	POWER_SUPPLY_PROP_SCOPE = 65,
-	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 66,
-	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 67,
-	POWER_SUPPLY_PROP_CALIBRATE = 68,
-	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 69,
-	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 70,
-	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 71,
-	POWER_SUPPLY_PROP_MODEL_NAME = 72,
-	POWER_SUPPLY_PROP_MANUFACTURER = 73,
-	POWER_SUPPLY_PROP_SERIAL_NUMBER = 74,
+enum hwmon_sensor_types {
+	hwmon_chip = 0,
+	hwmon_temp = 1,
+	hwmon_in = 2,
+	hwmon_curr = 3,
+	hwmon_power = 4,
+	hwmon_energy = 5,
+	hwmon_humidity = 6,
+	hwmon_fan = 7,
+	hwmon_pwm = 8,
+	hwmon_intrusion = 9,
+	hwmon_max = 10,
 };
 
-enum power_supply_type {
-	POWER_SUPPLY_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_TYPE_BATTERY = 1,
-	POWER_SUPPLY_TYPE_UPS = 2,
-	POWER_SUPPLY_TYPE_MAINS = 3,
-	POWER_SUPPLY_TYPE_USB = 4,
-	POWER_SUPPLY_TYPE_USB_DCP = 5,
-	POWER_SUPPLY_TYPE_USB_CDP = 6,
-	POWER_SUPPLY_TYPE_USB_ACA = 7,
-	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
-	POWER_SUPPLY_TYPE_USB_PD = 9,
-	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
-	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
-	POWER_SUPPLY_TYPE_WIRELESS = 12,
+enum hwmon_chip_attributes {
+	hwmon_chip_temp_reset_history = 0,
+	hwmon_chip_in_reset_history = 1,
+	hwmon_chip_curr_reset_history = 2,
+	hwmon_chip_power_reset_history = 3,
+	hwmon_chip_register_tz = 4,
+	hwmon_chip_update_interval = 5,
+	hwmon_chip_alarms = 6,
+	hwmon_chip_samples = 7,
+	hwmon_chip_curr_samples = 8,
+	hwmon_chip_in_samples = 9,
+	hwmon_chip_power_samples = 10,
+	hwmon_chip_temp_samples = 11,
 };
 
-enum power_supply_usb_type {
-	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_USB_TYPE_SDP = 1,
-	POWER_SUPPLY_USB_TYPE_DCP = 2,
-	POWER_SUPPLY_USB_TYPE_CDP = 3,
-	POWER_SUPPLY_USB_TYPE_ACA = 4,
-	POWER_SUPPLY_USB_TYPE_C = 5,
-	POWER_SUPPLY_USB_TYPE_PD = 6,
-	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
-	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
-	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+enum hwmon_temp_attributes {
+	hwmon_temp_enable = 0,
+	hwmon_temp_input = 1,
+	hwmon_temp_type = 2,
+	hwmon_temp_lcrit = 3,
+	hwmon_temp_lcrit_hyst = 4,
+	hwmon_temp_min = 5,
+	hwmon_temp_min_hyst = 6,
+	hwmon_temp_max = 7,
+	hwmon_temp_max_hyst = 8,
+	hwmon_temp_crit = 9,
+	hwmon_temp_crit_hyst = 10,
+	hwmon_temp_emergency = 11,
+	hwmon_temp_emergency_hyst = 12,
+	hwmon_temp_alarm = 13,
+	hwmon_temp_lcrit_alarm = 14,
+	hwmon_temp_min_alarm = 15,
+	hwmon_temp_max_alarm = 16,
+	hwmon_temp_crit_alarm = 17,
+	hwmon_temp_emergency_alarm = 18,
+	hwmon_temp_fault = 19,
+	hwmon_temp_offset = 20,
+	hwmon_temp_label = 21,
+	hwmon_temp_lowest = 22,
+	hwmon_temp_highest = 23,
+	hwmon_temp_reset_history = 24,
+	hwmon_temp_rated_min = 25,
+	hwmon_temp_rated_max = 26,
 };
 
-enum power_supply_notifier_events {
-	PSY_EVENT_PROP_CHANGED = 0,
+enum hwmon_in_attributes {
+	hwmon_in_enable = 0,
+	hwmon_in_input = 1,
+	hwmon_in_min = 2,
+	hwmon_in_max = 3,
+	hwmon_in_lcrit = 4,
+	hwmon_in_crit = 5,
+	hwmon_in_average = 6,
+	hwmon_in_lowest = 7,
+	hwmon_in_highest = 8,
+	hwmon_in_reset_history = 9,
+	hwmon_in_label = 10,
+	hwmon_in_alarm = 11,
+	hwmon_in_min_alarm = 12,
+	hwmon_in_max_alarm = 13,
+	hwmon_in_lcrit_alarm = 14,
+	hwmon_in_crit_alarm = 15,
+	hwmon_in_rated_min = 16,
+	hwmon_in_rated_max = 17,
 };
 
-union power_supply_propval {
-	int intval;
-	const char *strval;
+enum hwmon_curr_attributes {
+	hwmon_curr_enable = 0,
+	hwmon_curr_input = 1,
+	hwmon_curr_min = 2,
+	hwmon_curr_max = 3,
+	hwmon_curr_lcrit = 4,
+	hwmon_curr_crit = 5,
+	hwmon_curr_average = 6,
+	hwmon_curr_lowest = 7,
+	hwmon_curr_highest = 8,
+	hwmon_curr_reset_history = 9,
+	hwmon_curr_label = 10,
+	hwmon_curr_alarm = 11,
+	hwmon_curr_min_alarm = 12,
+	hwmon_curr_max_alarm = 13,
+	hwmon_curr_lcrit_alarm = 14,
+	hwmon_curr_crit_alarm = 15,
+	hwmon_curr_rated_min = 16,
+	hwmon_curr_rated_max = 17,
 };
 
-struct power_supply_config {
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	void *drv_data;
-	const struct attribute_group **attr_grp;
-	char **supplied_to;
-	size_t num_supplicants;
+enum hwmon_power_attributes {
+	hwmon_power_enable = 0,
+	hwmon_power_average = 1,
+	hwmon_power_average_interval = 2,
+	hwmon_power_average_interval_max = 3,
+	hwmon_power_average_interval_min = 4,
+	hwmon_power_average_highest = 5,
+	hwmon_power_average_lowest = 6,
+	hwmon_power_average_max = 7,
+	hwmon_power_average_min = 8,
+	hwmon_power_input = 9,
+	hwmon_power_input_highest = 10,
+	hwmon_power_input_lowest = 11,
+	hwmon_power_reset_history = 12,
+	hwmon_power_accuracy = 13,
+	hwmon_power_cap = 14,
+	hwmon_power_cap_hyst = 15,
+	hwmon_power_cap_max = 16,
+	hwmon_power_cap_min = 17,
+	hwmon_power_min = 18,
+	hwmon_power_max = 19,
+	hwmon_power_crit = 20,
+	hwmon_power_lcrit = 21,
+	hwmon_power_label = 22,
+	hwmon_power_alarm = 23,
+	hwmon_power_cap_alarm = 24,
+	hwmon_power_min_alarm = 25,
+	hwmon_power_max_alarm = 26,
+	hwmon_power_lcrit_alarm = 27,
+	hwmon_power_crit_alarm = 28,
+	hwmon_power_rated_min = 29,
+	hwmon_power_rated_max = 30,
 };
 
-struct power_supply;
+enum hwmon_energy_attributes {
+	hwmon_energy_enable = 0,
+	hwmon_energy_input = 1,
+	hwmon_energy_label = 2,
+};
 
-struct power_supply_desc {
+enum hwmon_humidity_attributes {
+	hwmon_humidity_enable = 0,
+	hwmon_humidity_input = 1,
+	hwmon_humidity_label = 2,
+	hwmon_humidity_min = 3,
+	hwmon_humidity_min_hyst = 4,
+	hwmon_humidity_max = 5,
+	hwmon_humidity_max_hyst = 6,
+	hwmon_humidity_alarm = 7,
+	hwmon_humidity_fault = 8,
+	hwmon_humidity_rated_min = 9,
+	hwmon_humidity_rated_max = 10,
+};
+
+enum hwmon_fan_attributes {
+	hwmon_fan_enable = 0,
+	hwmon_fan_input = 1,
+	hwmon_fan_label = 2,
+	hwmon_fan_min = 3,
+	hwmon_fan_max = 4,
+	hwmon_fan_div = 5,
+	hwmon_fan_pulses = 6,
+	hwmon_fan_target = 7,
+	hwmon_fan_alarm = 8,
+	hwmon_fan_min_alarm = 9,
+	hwmon_fan_max_alarm = 10,
+	hwmon_fan_fault = 11,
+};
+
+enum hwmon_pwm_attributes {
+	hwmon_pwm_input = 0,
+	hwmon_pwm_enable = 1,
+	hwmon_pwm_mode = 2,
+	hwmon_pwm_freq = 3,
+	hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+	hwmon_intrusion_alarm = 0,
+	hwmon_intrusion_beep = 1,
+};
+
+struct hwmon_ops {
+	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+	enum hwmon_sensor_types type;
+	const u32 *config;
+};
+
+struct hwmon_chip_info {
+	const struct hwmon_ops *ops;
+	const struct hwmon_channel_info **info;
+};
+
+struct trace_event_raw_hwmon_attr_class {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	long int val;
+	char __data[0];
+};
+
+struct trace_event_raw_hwmon_attr_show_string {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	u32 __data_loc_label;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hwmon_attr_class {
+	u32 attr_name;
+};
+
+struct trace_event_data_offsets_hwmon_attr_show_string {
+	u32 attr_name;
+	u32 label;
+};
+
+typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
+
+struct hwmon_device {
 	const char *name;
-	enum power_supply_type type;
-	const enum power_supply_usb_type *usb_types;
-	size_t num_usb_types;
-	const enum power_supply_property *properties;
-	size_t num_properties;
-	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
-	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
-	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
-	void (*external_power_changed)(struct power_supply *);
-	void (*set_charged)(struct power_supply *);
-	bool no_thermal;
-	int use_for_apm;
-};
-
-struct thermal_zone_device;
-
-struct power_supply {
-	const struct power_supply_desc *desc;
-	char **supplied_to;
-	size_t num_supplicants;
-	char **supplied_from;
-	size_t num_supplies;
-	struct device_node *of_node;
-	void *drv_data;
+	const char *label;
 	struct device dev;
-	struct work_struct changed_work;
-	struct delayed_work deferred_register_work;
-	spinlock_t changed_lock;
-	bool changed;
-	bool initialized;
-	bool removing;
-	atomic_t use_cnt;
-	struct thermal_zone_device *tzd;
-	struct thermal_cooling_device *tcd;
-	struct led_trigger *charging_full_trig;
-	char *charging_full_trig_name;
-	struct led_trigger *charging_trig;
-	char *charging_trig_name;
-	struct led_trigger *full_trig;
-	char *full_trig_name;
-	struct led_trigger *online_trig;
-	char *online_trig_name;
-	struct led_trigger *charging_blink_full_solid_trig;
-	char *charging_blink_full_solid_trig_name;
+	const struct hwmon_chip_info *chip;
+	struct list_head tzdata;
+	struct attribute_group group;
+	const struct attribute_group **groups;
 };
 
-enum thermal_device_mode {
-	THERMAL_DEVICE_DISABLED = 0,
-	THERMAL_DEVICE_ENABLED = 1,
-};
-
-enum thermal_notify_event {
-	THERMAL_EVENT_UNSPECIFIED = 0,
-	THERMAL_EVENT_TEMP_SAMPLE = 1,
-	THERMAL_TRIP_VIOLATED = 2,
-	THERMAL_TRIP_CHANGED = 3,
-	THERMAL_DEVICE_DOWN = 4,
-	THERMAL_DEVICE_UP = 5,
-	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
-	THERMAL_TABLE_CHANGED = 7,
-	THERMAL_EVENT_KEEP_ALIVE = 8,
-};
-
-struct thermal_attr;
-
-struct thermal_zone_device_ops;
-
-struct thermal_zone_params;
-
-struct thermal_governor;
-
-struct thermal_zone_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct attribute_group trips_attribute_group;
-	struct thermal_attr *trip_temp_attrs;
-	struct thermal_attr *trip_type_attrs;
-	struct thermal_attr *trip_hyst_attrs;
-	enum thermal_device_mode mode;
-	void *devdata;
-	int trips;
-	long unsigned int trips_disabled;
-	int passive_delay;
-	int polling_delay;
-	int temperature;
-	int last_temperature;
-	int emul_temperature;
-	int passive;
-	int prev_low_trip;
-	int prev_high_trip;
-	unsigned int forced_passive;
-	atomic_t need_update;
-	struct thermal_zone_device_ops *ops;
-	struct thermal_zone_params *tzp;
-	struct thermal_governor *governor;
-	void *governor_data;
-	struct list_head thermal_instances;
-	struct ida ida;
-	struct mutex lock;
-	struct list_head node;
-	struct delayed_work poll_queue;
-	enum thermal_notify_event notify_event;
-};
-
-struct power_supply_battery_ocv_table {
-	int ocv;
-	int capacity;
-};
-
-struct power_supply_resistance_temp_table {
-	int temp;
-	int resistance;
-};
-
-struct power_supply_battery_info {
-	int energy_full_design_uwh;
-	int charge_full_design_uah;
-	int voltage_min_design_uv;
-	int voltage_max_design_uv;
-	int tricklecharge_current_ua;
-	int precharge_current_ua;
-	int precharge_voltage_max_uv;
-	int charge_term_current_ua;
-	int charge_restart_voltage_uv;
-	int overvoltage_limit_uv;
-	int constant_charge_current_max_ua;
-	int constant_charge_voltage_max_uv;
-	int factory_internal_resistance_uohm;
-	int ocv_temp[20];
-	int temp_ambient_alert_min;
-	int temp_ambient_alert_max;
-	int temp_alert_min;
-	int temp_alert_max;
-	int temp_min;
-	int temp_max;
-	struct power_supply_battery_ocv_table *ocv_table[20];
-	int ocv_table_size[20];
-	struct power_supply_resistance_temp_table *resist_table;
-	int resist_table_size;
-};
-
-enum thermal_trip_type {
-	THERMAL_TRIP_ACTIVE = 0,
-	THERMAL_TRIP_PASSIVE = 1,
-	THERMAL_TRIP_HOT = 2,
-	THERMAL_TRIP_CRITICAL = 3,
-};
-
-enum thermal_trend {
-	THERMAL_TREND_STABLE = 0,
-	THERMAL_TREND_RAISING = 1,
-	THERMAL_TREND_DROPPING = 2,
-	THERMAL_TREND_RAISE_FULL = 3,
-	THERMAL_TREND_DROP_FULL = 4,
-};
-
-struct thermal_zone_device_ops {
-	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*get_temp)(struct thermal_zone_device *, int *);
-	int (*set_trips)(struct thermal_zone_device *, int, int);
-	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
-	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
-	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
-	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
-	int (*get_crit_temp)(struct thermal_zone_device *, int *);
-	int (*set_emul_temp)(struct thermal_zone_device *, int);
-	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
-	int (*notify)(struct thermal_zone_device *, int, enum thermal_trip_type);
-};
-
-struct thermal_bind_params;
-
-struct thermal_zone_params {
-	char governor_name[20];
-	bool no_hwmon;
-	int num_tbps;
-	struct thermal_bind_params *tbp;
-	u32 sustainable_power;
-	s32 k_po;
-	s32 k_pu;
-	s32 k_i;
-	s32 k_d;
-	s32 integral_cutoff;
-	int slope;
-	int offset;
-};
-
-struct thermal_governor {
-	char name[20];
-	int (*bind_to_tz)(struct thermal_zone_device *);
-	void (*unbind_from_tz)(struct thermal_zone_device *);
-	int (*throttle)(struct thermal_zone_device *, int);
-	struct list_head governor_list;
-};
-
-struct thermal_bind_params {
-	struct thermal_cooling_device *cdev;
-	int weight;
-	int trip_mask;
-	long unsigned int *binding_limits;
-	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
-};
-
-struct psy_am_i_supplied_data {
-	struct power_supply *psy;
-	unsigned int count;
-};
-
-enum {
-	POWER_SUPPLY_STATUS_UNKNOWN = 0,
-	POWER_SUPPLY_STATUS_CHARGING = 1,
-	POWER_SUPPLY_STATUS_DISCHARGING = 2,
-	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
-	POWER_SUPPLY_STATUS_FULL = 4,
-};
-
-enum {
-	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
-	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
-	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
-	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
-	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
-	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
-	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
-};
-
-enum {
-	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-	POWER_SUPPLY_HEALTH_GOOD = 1,
-	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
-	POWER_SUPPLY_HEALTH_DEAD = 3,
-	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
-	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
-	POWER_SUPPLY_HEALTH_COLD = 6,
-	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
-	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
-	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
-	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
-	POWER_SUPPLY_HEALTH_WARM = 11,
-	POWER_SUPPLY_HEALTH_COOL = 12,
-	POWER_SUPPLY_HEALTH_HOT = 13,
-};
-
-enum {
-	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
-	POWER_SUPPLY_TECHNOLOGY_LION = 2,
-	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
-	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
-	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
-	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
-};
-
-enum {
-	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
-	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
-	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
-	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
-	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
-};
-
-enum {
-	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
-	POWER_SUPPLY_SCOPE_SYSTEM = 1,
-	POWER_SUPPLY_SCOPE_DEVICE = 2,
-};
-
-struct power_supply_attr {
-	const char *prop_name;
-	char attr_name[31];
+struct hwmon_device_attribute {
 	struct device_attribute dev_attr;
-	const char * const *text_values;
-	int text_values_len;
+	const struct hwmon_ops *ops;
+	enum hwmon_sensor_types type;
+	u32 attr;
+	int index;
+	char name[32];
 };
 
-enum data_source {
-	CM_BATTERY_PRESENT = 0,
-	CM_NO_BATTERY = 1,
-	CM_FUEL_GAUGE = 2,
-	CM_CHARGER_STAT = 3,
-};
-
-enum polling_modes {
-	CM_POLL_DISABLE = 0,
-	CM_POLL_ALWAYS = 1,
-	CM_POLL_EXTERNAL_POWER_ONLY = 2,
-	CM_POLL_CHARGING_ONLY = 3,
-};
-
-enum cm_batt_temp {
-	CM_BATT_OK = 0,
-	CM_BATT_OVERHEAT = 1,
-	CM_BATT_COLD = 2,
-};
-
-struct charger_regulator;
-
-struct charger_manager;
-
-struct charger_cable {
-	const char *extcon_name;
-	const char *name;
-	struct extcon_dev *extcon_dev;
-	u64 extcon_type;
-	struct work_struct wq;
-	struct notifier_block nb;
-	bool attached;
-	struct charger_regulator *charger;
-	int min_uA;
-	int max_uA;
-	struct charger_manager *cm;
-};
-
-struct charger_regulator {
-	const char *regulator_name;
-	struct regulator *consumer;
-	int externally_control;
-	struct charger_cable *cables;
-	int num_cables;
-	struct attribute_group attr_grp;
-	struct device_attribute attr_name;
-	struct device_attribute attr_state;
-	struct device_attribute attr_externally_control;
-	struct attribute *attrs[4];
-	struct charger_manager *cm;
-};
-
-struct charger_desc;
-
-struct charger_manager {
-	struct list_head entry;
+struct hwmon_thermal_data {
+	struct list_head node;
 	struct device *dev;
-	struct charger_desc *desc;
-	struct thermal_zone_device *tzd_batt;
-	bool charger_enabled;
-	int emergency_stop;
-	char psy_name_buf[31];
-	struct power_supply_desc charger_psy_desc;
-	struct power_supply *charger_psy;
-	u64 charging_start_time;
-	u64 charging_end_time;
-	int battery_status;
-};
-
-struct charger_desc {
-	const char *psy_name;
-	enum polling_modes polling_mode;
-	unsigned int polling_interval_ms;
-	unsigned int fullbatt_vchkdrop_uV;
-	unsigned int fullbatt_uV;
-	unsigned int fullbatt_soc;
-	unsigned int fullbatt_full_capacity;
-	enum data_source battery_present;
-	const char **psy_charger_stat;
-	int num_charger_regulators;
-	struct charger_regulator *charger_regulators;
-	const struct attribute_group **sysfs_groups;
-	const char *psy_fuel_gauge;
-	const char *thermal_zone;
-	int temp_min;
-	int temp_max;
-	int temp_diff;
-	bool measure_battery_temp;
-	u32 charging_max_duration_ms;
-	u32 discharging_max_duration_ms;
-};
-
-struct thermal_attr {
-	struct device_attribute attr;
-	char name[20];
-};
-
-struct devfreq_dev_status {
-	long unsigned int total_time;
-	long unsigned int busy_time;
-	long unsigned int current_frequency;
-	void *private_data;
-};
-
-struct trace_event_raw_thermal_temperature {
-	struct trace_entry ent;
-	u32 __data_loc_thermal_zone;
-	int id;
-	int temp_prev;
-	int temp;
-	char __data[0];
-};
-
-struct trace_event_raw_cdev_update {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	long unsigned int target;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_zone_trip {
-	struct trace_entry ent;
-	u32 __data_loc_thermal_zone;
-	int id;
-	int trip;
-	enum thermal_trip_type trip_type;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_cpu_get_power {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	long unsigned int freq;
-	u32 __data_loc_load;
-	size_t load_len;
-	u32 dynamic_power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_cpu_limit {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	unsigned int freq;
-	long unsigned int cdev_state;
-	u32 power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_devfreq_get_power {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	long unsigned int freq;
-	u32 load;
-	u32 dynamic_power;
-	u32 static_power;
-	u32 power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_devfreq_limit {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	unsigned int freq;
-	long unsigned int cdev_state;
-	u32 power;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_thermal_temperature {
-	u32 thermal_zone;
-};
-
-struct trace_event_data_offsets_cdev_update {
-	u32 type;
-};
-
-struct trace_event_data_offsets_thermal_zone_trip {
-	u32 thermal_zone;
-};
-
-struct trace_event_data_offsets_thermal_power_cpu_get_power {
-	u32 cpumask;
-	u32 load;
-};
-
-struct trace_event_data_offsets_thermal_power_cpu_limit {
-	u32 cpumask;
-};
-
-struct trace_event_data_offsets_thermal_power_devfreq_get_power {
-	u32 type;
-};
-
-struct trace_event_data_offsets_thermal_power_devfreq_limit {
-	u32 type;
-};
-
-typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
-
-typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);
-
-typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
-
-typedef void (*btf_trace_thermal_power_cpu_get_power)(void *, const struct cpumask *, long unsigned int, u32 *, size_t, u32);
-
-typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, long unsigned int, u32);
-
-typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, long unsigned int, u32, u32, u32);
-
-typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, long unsigned int, long unsigned int, u32);
-
-struct thermal_instance {
-	int id;
-	char name[20];
-	struct thermal_zone_device *tz;
-	struct thermal_cooling_device *cdev;
-	int trip;
-	bool initialized;
-	long unsigned int upper;
-	long unsigned int lower;
-	long unsigned int target;
-	char attr_name[20];
-	struct device_attribute attr;
-	char weight_attr_name[20];
-	struct device_attribute weight_attr;
-	struct list_head tz_node;
-	struct list_head cdev_node;
-	unsigned int weight;
-};
-
-struct genl_dumpit_info {
-	const struct genl_family *family;
-	struct genl_ops op;
-	struct nlattr **attrs;
-};
-
-enum thermal_genl_attr {
-	THERMAL_GENL_ATTR_UNSPEC = 0,
-	THERMAL_GENL_ATTR_TZ = 1,
-	THERMAL_GENL_ATTR_TZ_ID = 2,
-	THERMAL_GENL_ATTR_TZ_TEMP = 3,
-	THERMAL_GENL_ATTR_TZ_TRIP = 4,
-	THERMAL_GENL_ATTR_TZ_TRIP_ID = 5,
-	THERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,
-	THERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,
-	THERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,
-	THERMAL_GENL_ATTR_TZ_MODE = 9,
-	THERMAL_GENL_ATTR_TZ_NAME = 10,
-	THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,
-	THERMAL_GENL_ATTR_TZ_GOV = 12,
-	THERMAL_GENL_ATTR_TZ_GOV_NAME = 13,
-	THERMAL_GENL_ATTR_CDEV = 14,
-	THERMAL_GENL_ATTR_CDEV_ID = 15,
-	THERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,
-	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
-	THERMAL_GENL_ATTR_CDEV_NAME = 18,
-	THERMAL_GENL_ATTR_GOV_NAME = 19,
-	__THERMAL_GENL_ATTR_MAX = 20,
-};
-
-enum thermal_genl_sampling {
-	THERMAL_GENL_SAMPLING_TEMP = 0,
-	__THERMAL_GENL_SAMPLING_MAX = 1,
-};
-
-enum thermal_genl_event {
-	THERMAL_GENL_EVENT_UNSPEC = 0,
-	THERMAL_GENL_EVENT_TZ_CREATE = 1,
-	THERMAL_GENL_EVENT_TZ_DELETE = 2,
-	THERMAL_GENL_EVENT_TZ_DISABLE = 3,
-	THERMAL_GENL_EVENT_TZ_ENABLE = 4,
-	THERMAL_GENL_EVENT_TZ_TRIP_UP = 5,
-	THERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,
-	THERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,
-	THERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,
-	THERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,
-	THERMAL_GENL_EVENT_CDEV_ADD = 10,
-	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
-	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
-	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
-	__THERMAL_GENL_EVENT_MAX = 14,
-};
-
-enum thermal_genl_cmd {
-	THERMAL_GENL_CMD_UNSPEC = 0,
-	THERMAL_GENL_CMD_TZ_GET_ID = 1,
-	THERMAL_GENL_CMD_TZ_GET_TRIP = 2,
-	THERMAL_GENL_CMD_TZ_GET_TEMP = 3,
-	THERMAL_GENL_CMD_TZ_GET_GOV = 4,
-	THERMAL_GENL_CMD_TZ_GET_MODE = 5,
-	THERMAL_GENL_CMD_CDEV_GET = 6,
-	__THERMAL_GENL_CMD_MAX = 7,
-};
-
-struct param {
-	struct nlattr **attrs;
-	struct sk_buff *msg;
-	const char *name;
-	int tz_id;
-	int cdev_id;
-	int trip_id;
-	int trip_temp;
-	int trip_type;
-	int trip_hyst;
-	int temp;
-	int cdev_state;
-	int cdev_max_state;
-};
-
-typedef int (*cb_t)(struct param *);
-
-struct thermal_zone_of_device_ops {
-	int (*get_temp)(void *, int *);
-	int (*get_trend)(void *, int, enum thermal_trend *);
-	int (*set_trips)(void *, int, int);
-	int (*set_emul_temp)(void *, int);
-	int (*set_trip_temp)(void *, int, int);
-};
-
-struct thermal_trip {
-	struct device_node *np;
-	int temperature;
-	int hysteresis;
-	enum thermal_trip_type type;
-};
-
-struct __thermal_cooling_bind_param {
-	struct device_node *cooling_device;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct __thermal_bind_params {
-	struct __thermal_cooling_bind_param *tcbp;
-	unsigned int count;
-	unsigned int trip_id;
-	unsigned int usage;
-};
-
-struct __thermal_zone {
-	int passive_delay;
-	int polling_delay;
-	int slope;
-	int offset;
-	int ntrips;
-	struct thermal_trip *trips;
-	int num_tbps;
-	struct __thermal_bind_params *tbps;
-	void *sensor_data;
-	const struct thermal_zone_of_device_ops *ops;
-};
-
-struct time_in_idle {
-	u64 time;
-	u64 timestamp;
+	int index;
+	struct thermal_zone_device *tzd;
 };
 
 struct cpufreq_cooling_device {
-	int id;
 	u32 last_load;
 	unsigned int cpufreq_state;
 	unsigned int max_level;
 	struct em_perf_domain *em;
 	struct cpufreq_policy *policy;
-	struct list_head node;
-	struct time_in_idle *idle_time;
+	struct thermal_cooling_device_ops cooling_ops;
 	struct freq_qos_request qos_req;
 };
 
-enum devfreq_timer {
-	DEVFREQ_TIMER_DEFERRABLE = 0,
-	DEVFREQ_TIMER_DELAYED = 1,
-	DEVFREQ_TIMER_NUM = 2,
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
 };
 
-struct devfreq_dev_profile {
-	long unsigned int initial_freq;
-	unsigned int polling_ms;
-	enum devfreq_timer timer;
-	int (*target)(struct device *, long unsigned int *, u32);
-	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
-	int (*get_cur_freq)(struct device *, long unsigned int *);
-	void (*exit)(struct device *);
-	long unsigned int *freq_table;
-	unsigned int max_state;
-};
-
-struct devfreq_stats {
-	unsigned int total_trans;
-	unsigned int *trans_table;
-	u64 *time_in_state;
-	u64 last_update;
-};
-
-struct devfreq_governor;
-
-struct devfreq {
-	struct list_head node;
-	struct mutex lock;
-	struct device dev;
-	struct devfreq_dev_profile *profile;
-	const struct devfreq_governor *governor;
-	char governor_name[16];
-	struct notifier_block nb;
-	struct delayed_work work;
-	long unsigned int previous_freq;
-	struct devfreq_dev_status last_status;
-	void *data;
-	struct dev_pm_qos_request user_min_freq_req;
-	struct dev_pm_qos_request user_max_freq_req;
-	long unsigned int scaling_min_freq;
-	long unsigned int scaling_max_freq;
-	bool stop_polling;
-	long unsigned int suspend_freq;
-	long unsigned int resume_freq;
-	atomic_t suspend_count;
-	struct devfreq_stats stats;
-	struct srcu_notifier_head transition_notifier_list;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct devfreq_governor {
-	struct list_head node;
-	const char name[16];
-	const unsigned int immutable;
-	const unsigned int interrupt_driven;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	int (*event_handler)(struct devfreq *, unsigned int, void *);
-};
-
-struct devfreq_cooling_power {
-	long unsigned int (*get_static_power)(struct devfreq *, long unsigned int);
-	long unsigned int (*get_dynamic_power)(struct devfreq *, long unsigned int, long unsigned int);
-	int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
-	long unsigned int dyn_power_coeff;
-};
-
-struct devfreq_cooling_device {
-	int id;
-	struct thermal_cooling_device *cdev;
-	struct devfreq *devfreq;
-	long unsigned int cooling_state;
-	u32 *power_table;
-	u32 *freq_table;
-	size_t freq_table_size;
-	struct devfreq_cooling_power *power_ops;
-	u32 res_util;
-	int capped_state;
-	struct dev_pm_qos_request req_max_freq;
-};
-
-struct amlogic_thermal_soc_calib_data {
-	int A;
-	int B;
-	int m;
-	int n;
-};
-
-struct amlogic_thermal_data {
-	int u_efuse_off;
-	const struct amlogic_thermal_soc_calib_data *calibration_parameters;
-	const struct regmap_config *regmap_config;
-};
-
-struct amlogic_thermal {
-	struct platform_device *pdev;
-	const struct amlogic_thermal_data *data;
-	struct regmap *regmap;
-	struct regmap *sec_ao_map;
-	struct clk *clk;
-	struct thermal_zone_device *tzd;
-	u32 trim_info;
-};
-
-struct watchdog_info {
-	__u32 options;
-	__u32 firmware_version;
-	__u8 identity[32];
-};
-
-struct watchdog_device;
-
-struct watchdog_ops {
-	struct module *owner;
-	int (*start)(struct watchdog_device *);
-	int (*stop)(struct watchdog_device *);
-	int (*ping)(struct watchdog_device *);
-	unsigned int (*status)(struct watchdog_device *);
-	int (*set_timeout)(struct watchdog_device *, unsigned int);
-	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
-	unsigned int (*get_timeleft)(struct watchdog_device *);
-	int (*restart)(struct watchdog_device *, long unsigned int, void *);
-	long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);
-};
-
-struct watchdog_governor;
-
-struct watchdog_core_data;
-
-struct watchdog_device {
-	int id;
-	struct device *parent;
-	const struct attribute_group **groups;
-	const struct watchdog_info *info;
-	const struct watchdog_ops *ops;
-	const struct watchdog_governor *gov;
-	unsigned int bootstatus;
-	unsigned int timeout;
-	unsigned int pretimeout;
-	unsigned int min_timeout;
-	unsigned int max_timeout;
-	unsigned int min_hw_heartbeat_ms;
-	unsigned int max_hw_heartbeat_ms;
-	struct notifier_block reboot_nb;
-	struct notifier_block restart_nb;
-	void *driver_data;
-	struct watchdog_core_data *wd_data;
-	long unsigned int status;
-	struct list_head deferred;
-};
-
-struct watchdog_governor {
-	const char name[20];
-	void (*pretimeout)(struct watchdog_device *);
-};
-
-struct watchdog_core_data {
-	struct device dev;
-	struct cdev cdev;
-	struct watchdog_device *wdd;
-	struct mutex lock;
-	ktime_t last_keepalive;
-	ktime_t last_hw_keepalive;
-	ktime_t open_deadline;
-	struct hrtimer timer;
-	struct kthread_work work;
-	long unsigned int status;
-};
-
-struct mdp_device_descriptor_s {
-	__u32 number;
-	__u32 major;
-	__u32 minor;
-	__u32 raid_disk;
-	__u32 state;
-	__u32 reserved[27];
-};
-
-typedef struct mdp_device_descriptor_s mdp_disk_t;
-
-struct mdp_superblock_s {
-	__u32 md_magic;
-	__u32 major_version;
-	__u32 minor_version;
-	__u32 patch_version;
-	__u32 gvalid_words;
-	__u32 set_uuid0;
-	__u32 ctime;
-	__u32 level;
-	__u32 size;
-	__u32 nr_disks;
-	__u32 raid_disks;
-	__u32 md_minor;
-	__u32 not_persistent;
-	__u32 set_uuid1;
-	__u32 set_uuid2;
-	__u32 set_uuid3;
-	__u32 gstate_creserved[16];
-	__u32 utime;
-	__u32 state;
-	__u32 active_disks;
-	__u32 working_disks;
-	__u32 failed_disks;
-	__u32 spare_disks;
-	__u32 sb_csum;
-	__u32 events_lo;
-	__u32 events_hi;
-	__u32 cp_events_lo;
-	__u32 cp_events_hi;
-	__u32 recovery_cp;
-	__u64 reshape_position;
-	__u32 new_level;
-	__u32 delta_disks;
-	__u32 new_layout;
-	__u32 new_chunk;
-	__u32 gstate_sreserved[14];
-	__u32 layout;
-	__u32 chunk_size;
-	__u32 root_pv;
-	__u32 root_block;
-	__u32 pstate_reserved[60];
-	mdp_disk_t disks[27];
-	__u32 reserved[0];
-	mdp_disk_t this_disk;
-};
-
-typedef struct mdp_superblock_s mdp_super_t;
-
-struct mdp_superblock_1 {
-	__le32 magic;
-	__le32 major_version;
-	__le32 feature_map;
-	__le32 pad0;
-	__u8 set_uuid[16];
-	char set_name[32];
-	__le64 ctime;
-	__le32 level;
-	__le32 layout;
-	__le64 size;
-	__le32 chunksize;
-	__le32 raid_disks;
-	union {
-		__le32 bitmap_offset;
-		struct {
-			__le16 offset;
-			__le16 size;
-		} ppl;
-	};
-	__le32 new_level;
-	__le64 reshape_position;
-	__le32 delta_disks;
-	__le32 new_layout;
-	__le32 new_chunk;
-	__le32 new_offset;
-	__le64 data_offset;
-	__le64 data_size;
-	__le64 super_offset;
-	union {
-		__le64 recovery_offset;
-		__le64 journal_tail;
-	};
-	__le32 dev_number;
-	__le32 cnt_corrected_read;
-	__u8 device_uuid[16];
-	__u8 devflags;
-	__u8 bblog_shift;
-	__le16 bblog_size;
-	__le32 bblog_offset;
-	__le64 utime;
-	__le64 events;
-	__le64 resync_offset;
-	__le32 sb_csum;
-	__le32 max_dev;
-	__u8 pad3[32];
-	__le16 dev_roles[0];
-};
-
-struct mdu_version_s {
-	int major;
-	int minor;
-	int patchlevel;
-};
-
-typedef struct mdu_version_s mdu_version_t;
-
-struct mdu_array_info_s {
-	int major_version;
-	int minor_version;
-	int patch_version;
-	unsigned int ctime;
-	int level;
-	int size;
-	int nr_disks;
-	int raid_disks;
-	int md_minor;
-	int not_persistent;
-	unsigned int utime;
-	int state;
-	int active_disks;
-	int working_disks;
-	int failed_disks;
-	int spare_disks;
-	int layout;
-	int chunk_size;
-};
-
-typedef struct mdu_array_info_s mdu_array_info_t;
-
-struct mdu_disk_info_s {
-	int number;
-	int major;
-	int minor;
-	int raid_disk;
-	int state;
-};
-
-typedef struct mdu_disk_info_s mdu_disk_info_t;
-
-struct mdu_bitmap_file_s {
-	char pathname[4096];
-};
-
-typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
-
 struct mddev;
 
 struct md_rdev;
@@ -91392,14 +99955,14 @@
 	} bitmap_info;
 	atomic_t max_corr_read_errors;
 	struct list_head all_mddevs;
-	struct attribute_group *to_remove;
+	const struct attribute_group *to_remove;
 	struct bio_set bio_set;
 	struct bio_set sync_set;
-	mempool_t md_io_pool;
+	struct bio_set io_acct_set;
 	struct bio *flush_bio;
 	atomic_t flush_pending;
 	ktime_t start_flush;
-	ktime_t last_flush;
+	ktime_t prev_flush_start;
 	struct work_struct flush_work;
 	struct work_struct event_work;
 	mempool_t *serial_info_pool;
@@ -91499,6 +100062,7 @@
 	MD_UPDATING_SB = 9,
 	MD_NOT_READY = 10,
 	MD_BROKEN = 11,
+	MD_DELETED = 12,
 };
 
 enum mddev_sb_flags {
@@ -91606,56 +100170,6 @@
 	ssize_t (*store)(struct mddev *, const char *, size_t);
 };
 
-struct bitmap_page {
-	char *map;
-	unsigned int hijacked: 1;
-	unsigned int pending: 1;
-	unsigned int count: 30;
-};
-
-struct md_io {
-	struct mddev *mddev;
-	bio_end_io_t *orig_bi_end_io;
-	void *orig_bi_private;
-	long unsigned int start_time;
-	struct hd_struct *part;
-};
-
-struct super_type {
-	char *name;
-	struct module *owner;
-	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
-	int (*validate_super)(struct mddev *, struct md_rdev *);
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
-	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
-};
-
-struct rdev_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct md_rdev *, char *);
-	ssize_t (*store)(struct md_rdev *, const char *, size_t);
-};
-
-enum array_state {
-	clear = 0,
-	inactive = 1,
-	suspended = 2,
-	readonly = 3,
-	read_auto = 4,
-	clean = 5,
-	active = 6,
-	write_pending = 7,
-	active_idle = 8,
-	broken = 9,
-	bad_word = 10,
-};
-
-struct detected_devices_node {
-	struct list_head list;
-	dev_t dev;
-};
-
 typedef __u16 bitmap_counter_t;
 
 enum bitmap_state {
@@ -91683,212 +100197,157 @@
 
 typedef struct bitmap_super_s bitmap_super_t;
 
+struct bitmap_page {
+	char *map;
+	unsigned int hijacked: 1;
+	unsigned int pending: 1;
+	unsigned int count: 30;
+};
+
 enum bitmap_page_attr {
 	BITMAP_PAGE_DIRTY = 0,
 	BITMAP_PAGE_PENDING = 1,
 	BITMAP_PAGE_NEEDWRITE = 2,
 };
 
-struct md_setup_args {
-	int minor;
-	int partitioned;
-	int level;
-	int chunk;
-	char *device_names;
+struct linear_c {
+	struct dm_dev *dev;
+	sector_t start;
 };
 
-struct dm_kobject_holder {
-	struct kobject kobj;
-	struct completion completion;
+struct dm_kcopyd_throttle {
+	unsigned int throttle;
+	unsigned int num_io_jobs;
+	unsigned int io_period;
+	unsigned int total_period;
+	unsigned int last_jiffies;
 };
 
-enum dev_type {
-	DEV_UNKNOWN = 0,
-	DEV_X1 = 1,
-	DEV_X2 = 2,
-	DEV_X4 = 3,
-	DEV_X8 = 4,
-	DEV_X16 = 5,
-	DEV_X32 = 6,
-	DEV_X64 = 7,
+typedef void (*dm_kcopyd_notify_fn)(int, long unsigned int, void *);
+
+struct dm_kcopyd_client {
+	struct page_list *pages;
+	unsigned int nr_reserved_pages;
+	unsigned int nr_free_pages;
+	unsigned int sub_job_size;
+	struct dm_io_client *io_client;
+	wait_queue_head_t destroyq;
+	mempool_t job_pool;
+	struct workqueue_struct *kcopyd_wq;
+	struct work_struct kcopyd_work;
+	struct dm_kcopyd_throttle *throttle;
+	atomic_t nr_jobs;
+	spinlock_t job_lock;
+	struct list_head callback_jobs;
+	struct list_head complete_jobs;
+	struct list_head io_jobs;
+	struct list_head pages_jobs;
 };
 
-enum hw_event_mc_err_type {
-	HW_EVENT_ERR_CORRECTED = 0,
-	HW_EVENT_ERR_UNCORRECTED = 1,
-	HW_EVENT_ERR_DEFERRED = 2,
-	HW_EVENT_ERR_FATAL = 3,
-	HW_EVENT_ERR_INFO = 4,
+struct kcopyd_job {
+	struct dm_kcopyd_client *kc;
+	struct list_head list;
+	unsigned int flags;
+	int read_err;
+	long unsigned int write_err;
+	enum req_op op;
+	struct dm_io_region source;
+	unsigned int num_dests;
+	struct dm_io_region dests[8];
+	struct page_list *pages;
+	dm_kcopyd_notify_fn fn;
+	void *context;
+	struct mutex lock;
+	atomic_t sub_jobs;
+	sector_t progress;
+	sector_t write_offset;
+	struct kcopyd_job *master_job;
 };
 
-enum mem_type {
-	MEM_EMPTY = 0,
-	MEM_RESERVED = 1,
-	MEM_UNKNOWN = 2,
-	MEM_FPM = 3,
-	MEM_EDO = 4,
-	MEM_BEDO = 5,
-	MEM_SDR = 6,
-	MEM_RDR = 7,
-	MEM_DDR = 8,
-	MEM_RDDR = 9,
-	MEM_RMBS = 10,
-	MEM_DDR2 = 11,
-	MEM_FB_DDR2 = 12,
-	MEM_RDDR2 = 13,
-	MEM_XDR = 14,
-	MEM_DDR3 = 15,
-	MEM_RDDR3 = 16,
-	MEM_LRDDR3 = 17,
-	MEM_DDR4 = 18,
-	MEM_RDDR4 = 19,
-	MEM_LRDDR4 = 20,
-	MEM_NVDIMM = 21,
+struct dm_arg {
+	unsigned int min;
+	unsigned int max;
+	char *error;
 };
 
-enum edac_type {
-	EDAC_UNKNOWN = 0,
-	EDAC_NONE = 1,
-	EDAC_RESERVED = 2,
-	EDAC_PARITY = 3,
-	EDAC_EC = 4,
-	EDAC_SECDED = 5,
-	EDAC_S2ECD2ED = 6,
-	EDAC_S4ECD4ED = 7,
-	EDAC_S8ECD8ED = 8,
-	EDAC_S16ECD16ED = 9,
+struct dm_exception_table {
+	uint32_t hash_mask;
+	unsigned int hash_shift;
+	struct hlist_bl_head *table;
 };
 
-enum scrub_type {
-	SCRUB_UNKNOWN = 0,
-	SCRUB_NONE = 1,
-	SCRUB_SW_PROG = 2,
-	SCRUB_SW_SRC = 3,
-	SCRUB_SW_PROG_SRC = 4,
-	SCRUB_SW_TUNABLE = 5,
-	SCRUB_HW_PROG = 6,
-	SCRUB_HW_SRC = 7,
-	SCRUB_HW_PROG_SRC = 8,
-	SCRUB_HW_TUNABLE = 9,
+struct dm_kcopyd_client;
+
+struct dm_snapshot {
+	struct rw_semaphore lock;
+	struct dm_dev *origin;
+	struct dm_dev *cow;
+	struct dm_target *ti;
+	struct list_head list;
+	int valid;
+	int snapshot_overflowed;
+	int active;
+	atomic_t pending_exceptions_count;
+	spinlock_t pe_allocation_lock;
+	sector_t exception_start_sequence;
+	sector_t exception_complete_sequence;
+	struct rb_root out_of_order_tree;
+	mempool_t pending_pool;
+	struct dm_exception_table pending;
+	struct dm_exception_table complete;
+	spinlock_t pe_lock;
+	spinlock_t tracked_chunk_lock;
+	struct hlist_head tracked_chunk_hash[16];
+	struct dm_exception_store *store;
+	unsigned int in_progress;
+	struct wait_queue_head in_progress_wait;
+	struct dm_kcopyd_client *kcopyd_client;
+	long unsigned int state_bits;
+	chunk_t first_merging_chunk;
+	int num_merging_chunks;
+	bool merge_failed: 1;
+	bool discard_zeroes_cow: 1;
+	bool discard_passdown_origin: 1;
+	struct bio_list bios_queued_during_merge;
 };
 
-enum edac_mc_layer_type {
-	EDAC_MC_LAYER_BRANCH = 0,
-	EDAC_MC_LAYER_CHANNEL = 1,
-	EDAC_MC_LAYER_SLOT = 2,
-	EDAC_MC_LAYER_CHIP_SELECT = 3,
-	EDAC_MC_LAYER_ALL_MEM = 4,
+struct dm_snap_pending_exception {
+	struct dm_exception e;
+	struct bio_list origin_bios;
+	struct bio_list snapshot_bios;
+	struct dm_snapshot *snap;
+	int started;
+	int copy_error;
+	sector_t exception_sequence;
+	struct rb_node out_of_order_node;
+	struct bio *full_bio;
+	bio_end_io_t *full_bio_end_io;
 };
 
-struct edac_mc_layer {
-	enum edac_mc_layer_type type;
-	unsigned int size;
-	bool is_virt_csrow;
+struct dm_snap_tracked_chunk {
+	struct hlist_node node;
+	chunk_t chunk;
 };
 
-struct mem_ctl_info;
-
-struct dimm_info {
-	struct device dev;
-	char label[32];
-	unsigned int location[3];
-	struct mem_ctl_info *mci;
-	unsigned int idx;
-	u32 grain;
-	enum dev_type dtype;
-	enum mem_type mtype;
-	enum edac_type edac_mode;
-	u32 nr_pages;
-	unsigned int csrow;
-	unsigned int cschannel;
-	u16 smbios_handle;
-	u32 ce_count;
-	u32 ue_count;
+struct origin {
+	struct block_device *bdev;
+	struct list_head hash_list;
+	struct list_head snapshots;
 };
 
-struct mcidev_sysfs_attribute;
-
-struct edac_raw_error_desc {
-	char location[256];
-	char label[296];
-	long int grain;
-	u16 error_count;
-	enum hw_event_mc_err_type type;
-	int top_layer;
-	int mid_layer;
-	int low_layer;
-	long unsigned int page_frame_number;
-	long unsigned int offset_in_page;
-	long unsigned int syndrome;
-	const char *msg;
-	const char *other_detail;
+struct dm_origin {
+	struct dm_dev *dev;
+	struct dm_target *ti;
+	unsigned int split_boundary;
+	struct list_head hash_list;
 };
 
-struct csrow_info;
-
-struct mem_ctl_info {
-	struct device dev;
-	struct bus_type *bus;
-	struct list_head link;
-	struct module *owner;
-	long unsigned int mtype_cap;
-	long unsigned int edac_ctl_cap;
-	long unsigned int edac_cap;
-	long unsigned int scrub_cap;
-	enum scrub_type scrub_mode;
-	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
-	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
-	void (*edac_check)(struct mem_ctl_info *);
-	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
-	int mc_idx;
-	struct csrow_info **csrows;
-	unsigned int nr_csrows;
-	unsigned int num_cschannel;
-	unsigned int n_layers;
-	struct edac_mc_layer *layers;
-	bool csbased;
-	unsigned int tot_dimms;
-	struct dimm_info **dimms;
-	struct device *pdev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	u32 ce_noinfo_count;
-	u32 ue_noinfo_count;
-	u32 ue_mc;
-	u32 ce_mc;
-	struct completion complete;
-	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
-	struct delayed_work work;
-	struct edac_raw_error_desc error_desc;
-	int op_state;
-	struct dentry *debugfs;
-	u8 fake_inject_layer[3];
-	bool fake_inject_ue;
-	u16 fake_inject_count;
+struct dm_exception_table_lock {
+	struct hlist_bl_head *complete_slot;
+	struct hlist_bl_head *pending_slot;
 };
 
-struct rank_info {
-	int chan_idx;
-	struct csrow_info *csrow;
-	struct dimm_info *dimm;
-	u32 ce_count;
-};
-
-struct csrow_info {
-	struct device dev;
-	long unsigned int first_page;
-	long unsigned int last_page;
-	long unsigned int page_mask;
-	int csrow_idx;
-	u32 ue_count;
-	u32 ce_count;
-	struct mem_ctl_info *mci;
-	u32 nr_channels;
-	struct rank_info **channels;
-};
+struct mapped_device;
 
 struct edac_device_counter {
 	u32 ue_count;
@@ -91905,6 +100364,10 @@
 
 struct edac_device_instance;
 
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
 struct edac_device_ctl_info {
 	struct list_head link;
 	struct module *owner;
@@ -91929,12 +100392,12 @@
 	char name[32];
 	u32 nr_instances;
 	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
 	struct edac_device_counter counters;
 	struct kobject kobj;
 };
 
-struct edac_device_block;
-
 struct edac_dev_sysfs_block_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct kobject *, struct attribute *, char *);
@@ -91961,1063 +100424,28 @@
 	struct kobject kobj;
 };
 
-struct dev_ch_attribute {
-	struct device_attribute attr;
-	unsigned int channel;
-};
-
-struct ctl_info_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_ctl_info *, char *);
-	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
-};
-
-struct instance_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_instance *, char *);
-	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
-};
-
-struct edac_pci_counter {
-	atomic_t pe_count;
-	atomic_t npe_count;
-};
-
-struct edac_pci_ctl_info {
-	struct list_head link;
-	int pci_idx;
-	struct bus_type *edac_subsys;
-	int op_state;
-	struct delayed_work work;
-	void (*edac_check)(struct edac_pci_ctl_info *);
-	struct device *dev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	struct completion complete;
-	char name[32];
-	struct edac_pci_counter counters;
-	struct kobject kobj;
-};
-
-struct edac_pci_gen_data {
-	int edac_idx;
-};
-
-struct instance_attribute___2 {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
-	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
-};
-
-struct edac_pci_dev_attribute {
-	struct attribute attr;
-	void *value;
-	ssize_t (*show)(void *, char *);
-	ssize_t (*store)(void *, const char *, size_t);
-};
-
-typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
-
-enum opp_table_access {
-	OPP_TABLE_ACCESS_UNKNOWN = 0,
-	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
-	OPP_TABLE_ACCESS_SHARED = 2,
-};
-
-struct icc_path;
-
-struct dev_pm_opp___2;
-
-struct dev_pm_set_opp_data;
-
-struct opp_table___2 {
-	struct list_head node;
-	struct blocking_notifier_head head;
-	struct list_head dev_list;
-	struct list_head opp_list;
-	struct kref kref;
-	struct mutex lock;
-	struct device_node *np;
-	long unsigned int clock_latency_ns_max;
-	unsigned int voltage_tolerance_v1;
-	unsigned int parsed_static_opps;
-	enum opp_table_access shared_opp;
-	struct dev_pm_opp___2 *suspend_opp;
-	struct mutex genpd_virt_dev_lock;
-	struct device **genpd_virt_devs;
-	struct opp_table___2 **required_opp_tables;
-	unsigned int required_opp_count;
-	unsigned int *supported_hw;
-	unsigned int supported_hw_count;
-	const char *prop_name;
-	struct clk *clk;
-	struct regulator **regulators;
-	int regulator_count;
-	struct icc_path **paths;
-	unsigned int path_count;
-	bool enabled;
-	bool genpd_performance_state;
-	bool is_genpd;
-	int (*set_opp)(struct dev_pm_set_opp_data *);
-	struct dev_pm_set_opp_data *set_opp_data;
-	struct dentry *dentry;
-	char dentry_name[255];
-};
-
-struct dev_pm_opp_supply;
-
-struct dev_pm_opp_icc_bw;
-
-struct dev_pm_opp___2 {
-	struct list_head node;
-	struct kref kref;
-	bool available;
-	bool dynamic;
-	bool turbo;
-	bool suspend;
-	unsigned int pstate;
-	long unsigned int rate;
-	unsigned int level;
-	struct dev_pm_opp_supply *supplies;
-	struct dev_pm_opp_icc_bw *bandwidth;
-	long unsigned int clock_latency_ns;
-	struct dev_pm_opp___2 **required_opps;
-	struct opp_table___2 *opp_table;
-	struct device_node *np;
-	struct dentry *dentry;
-};
-
-enum dev_pm_opp_event {
-	OPP_EVENT_ADD = 0,
-	OPP_EVENT_REMOVE = 1,
-	OPP_EVENT_ENABLE = 2,
-	OPP_EVENT_DISABLE = 3,
-	OPP_EVENT_ADJUST_VOLTAGE = 4,
-};
-
-struct dev_pm_opp_supply {
-	long unsigned int u_volt;
-	long unsigned int u_volt_min;
-	long unsigned int u_volt_max;
-	long unsigned int u_amp;
-};
-
-struct dev_pm_opp_icc_bw {
-	u32 avg;
-	u32 peak;
-};
-
-struct dev_pm_opp_info {
-	long unsigned int rate;
-	struct dev_pm_opp_supply *supplies;
-};
-
-struct dev_pm_set_opp_data {
-	struct dev_pm_opp_info old_opp;
-	struct dev_pm_opp_info new_opp;
-	struct regulator **regulators;
-	unsigned int regulator_count;
-	struct clk *clk;
-	struct device *dev;
-};
-
-struct opp_device {
-	struct list_head node;
-	const struct device *dev;
-	struct dentry *dentry;
-};
-
-struct cpufreq_policy_data {
-	struct cpufreq_cpuinfo cpuinfo;
-	struct cpufreq_frequency_table *freq_table;
-	unsigned int cpu;
-	unsigned int min;
-	unsigned int max;
-};
-
-struct cpufreq_freqs {
-	struct cpufreq_policy *policy;
-	unsigned int old;
-	unsigned int new;
-	u8 flags;
-};
-
-struct freq_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpufreq_policy *, char *);
-	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
-};
-
-struct cpufreq_driver {
-	char name[16];
-	u16 flags;
-	void *driver_data;
-	int (*init)(struct cpufreq_policy *);
-	int (*verify)(struct cpufreq_policy_data *);
-	int (*setpolicy)(struct cpufreq_policy *);
-	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
-	int (*target_index)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get)(unsigned int);
-	void (*update_limits)(unsigned int);
-	int (*bios_limit)(int, unsigned int *);
-	int (*online)(struct cpufreq_policy *);
-	int (*offline)(struct cpufreq_policy *);
-	int (*exit)(struct cpufreq_policy *);
-	void (*stop_cpu)(struct cpufreq_policy *);
-	int (*suspend)(struct cpufreq_policy *);
-	int (*resume)(struct cpufreq_policy *);
-	void (*ready)(struct cpufreq_policy *);
-	struct freq_attr **attr;
-	bool boost_enabled;
-	int (*set_boost)(struct cpufreq_policy *, int);
-};
-
-struct cpufreq_stats {
-	unsigned int total_trans;
-	long long unsigned int last_time;
-	unsigned int max_state;
-	unsigned int state_num;
-	unsigned int last_index;
-	u64 *time_in_state;
-	unsigned int *freq_table;
-	unsigned int *trans_table;
-	unsigned int reset_pending;
-	long long unsigned int reset_time;
-};
-
-struct dbs_data {
-	struct gov_attr_set attr_set;
-	void *tuners;
-	unsigned int ignore_nice_load;
-	unsigned int sampling_rate;
-	unsigned int sampling_down_factor;
-	unsigned int up_threshold;
-	unsigned int io_is_busy;
-};
-
-struct policy_dbs_info {
-	struct cpufreq_policy *policy;
-	struct mutex update_mutex;
-	u64 last_sample_time;
-	s64 sample_delay_ns;
-	atomic_t work_count;
-	struct irq_work irq_work;
-	struct work_struct work;
-	struct dbs_data *dbs_data;
-	struct list_head list;
-	unsigned int rate_mult;
-	unsigned int idle_periods;
-	bool is_shared;
-	bool work_in_progress;
-};
-
-struct cpu_dbs_info {
-	u64 prev_cpu_idle;
-	u64 prev_update_time;
-	u64 prev_cpu_nice;
-	unsigned int prev_load;
-	struct update_util_data update_util;
-	struct policy_dbs_info *policy_dbs;
-};
-
-struct dbs_governor {
-	struct cpufreq_governor gov;
-	struct kobj_type kobj_type;
-	struct dbs_data *gdbs_data;
-	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
-	struct policy_dbs_info * (*alloc)();
-	void (*free)(struct policy_dbs_info *);
-	int (*init)(struct dbs_data *);
-	void (*exit)(struct dbs_data *);
-	void (*start)(struct cpufreq_policy *);
-};
-
-struct cpufreq_policy___2;
-
-struct cpufreq_dt_platform_data {
-	bool have_governor_per_policy;
-	unsigned int (*get_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*suspend)(struct cpufreq_policy___2 *);
-	int (*resume)(struct cpufreq_policy___2 *);
-};
-
-struct tegra124_cpufreq_priv {
-	struct clk *cpu_clk;
-	struct clk *pllp_clk;
-	struct clk *pllx_clk;
-	struct clk *dfll_clk;
-	struct platform_device *cpufreq_dt_pdev;
-};
-
-struct cpuidle_governor {
-	char name[16];
-	struct list_head governor_list;
-	unsigned int rating;
-	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
-	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
-	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
-	void (*reflect)(struct cpuidle_device *, int);
-};
-
-struct cpuidle_state_kobj {
-	struct cpuidle_state *state;
-	struct cpuidle_state_usage *state_usage;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-	struct cpuidle_device *device;
-};
-
-struct cpuidle_driver_kobj {
-	struct cpuidle_driver *drv;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_device_kobj {
-	struct cpuidle_device *dev;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_device *, char *);
-	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
-};
-
-struct cpuidle_state_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
-	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
-};
-
-struct cpuidle_driver_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_driver *, char *);
-	ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
-};
-
-struct ladder_device_state {
-	struct {
-		u32 promotion_count;
-		u32 demotion_count;
-		u64 promotion_time_ns;
-		u64 demotion_time_ns;
-	} threshold;
-	struct {
-		int promotion_count;
-		int demotion_count;
-	} stats;
-};
-
-struct ladder_device {
-	struct ladder_device_state states[10];
-};
-
-struct menu_device {
-	int needs_update;
-	int tick_wakeup;
-	u64 next_timer_ns;
-	unsigned int bucket;
-	unsigned int correction_factor[12];
-	unsigned int intervals[8];
-	int interval_ptr;
-};
-
-struct teo_idle_state {
-	unsigned int early_hits;
-	unsigned int hits;
-	unsigned int misses;
-};
-
-struct teo_cpu {
-	u64 time_span_ns;
-	u64 sleep_length_ns;
-	struct teo_idle_state states[10];
-	int interval_idx;
-	u64 intervals[8];
-};
-
-struct pci_dev___2;
-
-struct sdhci_pci_data {
-	struct pci_dev___2 *pdev;
-	int slotno;
-	int rst_n_gpio;
-	int cd_gpio;
-	int (*setup)(struct sdhci_pci_data *);
-	void (*cleanup)(struct sdhci_pci_data *);
-};
-
-struct led_init_data {
-	struct fwnode_handle *fwnode;
-	const char *default_label;
-	const char *devicename;
-	bool devname_mandatory;
-};
-
-struct led_properties {
-	u32 color;
-	bool color_present;
-	const char *function;
-	u32 func_enum;
-	bool func_enum_present;
-	const char *label;
-};
-
-enum cpu_led_event {
-	CPU_LED_IDLE_START = 0,
-	CPU_LED_IDLE_END = 1,
-	CPU_LED_START = 2,
-	CPU_LED_STOP = 3,
-	CPU_LED_HALTED = 4,
-};
-
-struct led_trigger_cpu {
-	bool is_active;
-	char name[8];
-	struct led_trigger *_trig;
-};
-
-enum scpi_error_codes {
-	SCPI_SUCCESS = 0,
-	SCPI_ERR_PARAM = 1,
-	SCPI_ERR_ALIGN = 2,
-	SCPI_ERR_SIZE = 3,
-	SCPI_ERR_HANDLER = 4,
-	SCPI_ERR_ACCESS = 5,
-	SCPI_ERR_RANGE = 6,
-	SCPI_ERR_TIMEOUT = 7,
-	SCPI_ERR_NOMEM = 8,
-	SCPI_ERR_PWRSTATE = 9,
-	SCPI_ERR_SUPPORT = 10,
-	SCPI_ERR_DEVICE = 11,
-	SCPI_ERR_BUSY = 12,
-	SCPI_ERR_MAX = 13,
-};
-
-enum scpi_std_cmd {
-	SCPI_CMD_INVALID = 0,
-	SCPI_CMD_SCPI_READY = 1,
-	SCPI_CMD_SCPI_CAPABILITIES = 2,
-	SCPI_CMD_SET_CSS_PWR_STATE = 3,
-	SCPI_CMD_GET_CSS_PWR_STATE = 4,
-	SCPI_CMD_SET_SYS_PWR_STATE = 5,
-	SCPI_CMD_SET_CPU_TIMER = 6,
-	SCPI_CMD_CANCEL_CPU_TIMER = 7,
-	SCPI_CMD_DVFS_CAPABILITIES = 8,
-	SCPI_CMD_GET_DVFS_INFO = 9,
-	SCPI_CMD_SET_DVFS = 10,
-	SCPI_CMD_GET_DVFS = 11,
-	SCPI_CMD_GET_DVFS_STAT = 12,
-	SCPI_CMD_CLOCK_CAPABILITIES = 13,
-	SCPI_CMD_GET_CLOCK_INFO = 14,
-	SCPI_CMD_SET_CLOCK_VALUE = 15,
-	SCPI_CMD_GET_CLOCK_VALUE = 16,
-	SCPI_CMD_PSU_CAPABILITIES = 17,
-	SCPI_CMD_GET_PSU_INFO = 18,
-	SCPI_CMD_SET_PSU = 19,
-	SCPI_CMD_GET_PSU = 20,
-	SCPI_CMD_SENSOR_CAPABILITIES = 21,
-	SCPI_CMD_SENSOR_INFO = 22,
-	SCPI_CMD_SENSOR_VALUE = 23,
-	SCPI_CMD_SENSOR_CFG_PERIODIC = 24,
-	SCPI_CMD_SENSOR_CFG_BOUNDS = 25,
-	SCPI_CMD_SENSOR_ASYNC_VALUE = 26,
-	SCPI_CMD_SET_DEVICE_PWR_STATE = 27,
-	SCPI_CMD_GET_DEVICE_PWR_STATE = 28,
-	SCPI_CMD_COUNT = 29,
-};
-
-enum legacy_scpi_std_cmd {
-	LEGACY_SCPI_CMD_INVALID = 0,
-	LEGACY_SCPI_CMD_SCPI_READY = 1,
-	LEGACY_SCPI_CMD_SCPI_CAPABILITIES = 2,
-	LEGACY_SCPI_CMD_EVENT = 3,
-	LEGACY_SCPI_CMD_SET_CSS_PWR_STATE = 4,
-	LEGACY_SCPI_CMD_GET_CSS_PWR_STATE = 5,
-	LEGACY_SCPI_CMD_CFG_PWR_STATE_STAT = 6,
-	LEGACY_SCPI_CMD_GET_PWR_STATE_STAT = 7,
-	LEGACY_SCPI_CMD_SYS_PWR_STATE = 8,
-	LEGACY_SCPI_CMD_L2_READY = 9,
-	LEGACY_SCPI_CMD_SET_AP_TIMER = 10,
-	LEGACY_SCPI_CMD_CANCEL_AP_TIME = 11,
-	LEGACY_SCPI_CMD_DVFS_CAPABILITIES = 12,
-	LEGACY_SCPI_CMD_GET_DVFS_INFO = 13,
-	LEGACY_SCPI_CMD_SET_DVFS = 14,
-	LEGACY_SCPI_CMD_GET_DVFS = 15,
-	LEGACY_SCPI_CMD_GET_DVFS_STAT = 16,
-	LEGACY_SCPI_CMD_SET_RTC = 17,
-	LEGACY_SCPI_CMD_GET_RTC = 18,
-	LEGACY_SCPI_CMD_CLOCK_CAPABILITIES = 19,
-	LEGACY_SCPI_CMD_SET_CLOCK_INDEX = 20,
-	LEGACY_SCPI_CMD_SET_CLOCK_VALUE = 21,
-	LEGACY_SCPI_CMD_GET_CLOCK_VALUE = 22,
-	LEGACY_SCPI_CMD_PSU_CAPABILITIES = 23,
-	LEGACY_SCPI_CMD_SET_PSU = 24,
-	LEGACY_SCPI_CMD_GET_PSU = 25,
-	LEGACY_SCPI_CMD_SENSOR_CAPABILITIES = 26,
-	LEGACY_SCPI_CMD_SENSOR_INFO = 27,
-	LEGACY_SCPI_CMD_SENSOR_VALUE = 28,
-	LEGACY_SCPI_CMD_SENSOR_CFG_PERIODIC = 29,
-	LEGACY_SCPI_CMD_SENSOR_CFG_BOUNDS = 30,
-	LEGACY_SCPI_CMD_SENSOR_ASYNC_VALUE = 31,
-	LEGACY_SCPI_CMD_COUNT = 32,
-};
-
-enum scpi_drv_cmds {
-	CMD_SCPI_CAPABILITIES = 0,
-	CMD_GET_CLOCK_INFO = 1,
-	CMD_GET_CLOCK_VALUE = 2,
-	CMD_SET_CLOCK_VALUE = 3,
-	CMD_GET_DVFS = 4,
-	CMD_SET_DVFS = 5,
-	CMD_GET_DVFS_INFO = 6,
-	CMD_SENSOR_CAPABILITIES = 7,
-	CMD_SENSOR_INFO = 8,
-	CMD_SENSOR_VALUE = 9,
-	CMD_SET_DEVICE_PWR_STATE = 10,
-	CMD_GET_DEVICE_PWR_STATE = 11,
-	CMD_MAX_COUNT = 12,
-};
-
-struct scpi_xfer {
-	u32 slot;
-	u32 cmd;
-	u32 status;
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int tx_len;
-	unsigned int rx_len;
-	struct list_head node;
-	struct completion done;
-};
-
-struct scpi_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	void *tx_payload;
-	void *rx_payload;
-	struct list_head rx_pending;
-	struct list_head xfers_list;
-	struct scpi_xfer *xfers;
-	spinlock_t rx_lock;
-	struct mutex xfers_lock;
-	u8 token;
-};
-
-struct scpi_drvinfo {
-	u32 protocol_version;
-	u32 firmware_version;
-	bool is_legacy;
-	int num_chans;
-	int *commands;
-	long unsigned int cmd_priority[1];
-	atomic_t next_chan;
-	struct scpi_ops *scpi_ops;
-	struct scpi_chan *channels;
-	struct scpi_dvfs_info *dvfs[8];
-};
-
-struct scpi_shared_mem {
-	__le32 command;
-	__le32 status;
-	u8 payload[0];
-};
-
-struct legacy_scpi_shared_mem {
-	__le32 status;
-	u8 payload[0];
-};
-
-struct scp_capabilities {
-	__le32 protocol_version;
-	__le32 event_version;
-	__le32 platform_version;
-	__le32 commands[4];
-};
-
-struct clk_get_info {
-	__le16 id;
-	__le16 flags;
-	__le32 min_rate;
-	__le32 max_rate;
-	u8 name[20];
-};
-
-struct clk_set_value {
-	__le16 id;
-	__le16 reserved;
-	__le32 rate;
-};
-
-struct legacy_clk_set_value {
-	__le32 rate;
-	__le16 id;
-	__le16 reserved;
-};
-
-struct dvfs_info {
-	u8 domain;
-	u8 opp_count;
-	__le16 latency;
-	struct {
-		__le32 freq;
-		__le32 m_volt;
-	} opps[16];
-};
-
-struct dvfs_set {
-	u8 domain;
-	u8 index;
-};
-
-struct _scpi_sensor_info {
-	__le16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct dev_pstate_set {
-	__le16 dev_id;
-	u8 pstate;
+struct acpi_hest_generic_v2 {
+	struct acpi_hest_header header;
+	u16 related_source_id;
+	u8 reserved;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	u32 max_raw_data_length;
+	struct acpi_generic_address error_status_address;
+	struct acpi_hest_notify notify;
+	u32 error_block_length;
+	struct acpi_generic_address read_ack_register;
+	u64 read_ack_preserve;
+	u64 read_ack_write;
 } __attribute__((packed));
 
-struct scpi_pm_domain {
-	struct generic_pm_domain genpd;
-	struct scpi_ops *ops;
-	u32 domain;
-	char name[30];
-};
-
-enum scpi_power_domain_state {
-	SCPI_PD_STATE_ON = 0,
-	SCPI_PD_STATE_OFF = 3,
-};
-
-enum dmi_entry_type {
-	DMI_ENTRY_BIOS = 0,
-	DMI_ENTRY_SYSTEM = 1,
-	DMI_ENTRY_BASEBOARD = 2,
-	DMI_ENTRY_CHASSIS = 3,
-	DMI_ENTRY_PROCESSOR = 4,
-	DMI_ENTRY_MEM_CONTROLLER = 5,
-	DMI_ENTRY_MEM_MODULE = 6,
-	DMI_ENTRY_CACHE = 7,
-	DMI_ENTRY_PORT_CONNECTOR = 8,
-	DMI_ENTRY_SYSTEM_SLOT = 9,
-	DMI_ENTRY_ONBOARD_DEVICE = 10,
-	DMI_ENTRY_OEMSTRINGS = 11,
-	DMI_ENTRY_SYSCONF = 12,
-	DMI_ENTRY_BIOS_LANG = 13,
-	DMI_ENTRY_GROUP_ASSOC = 14,
-	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
-	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
-	DMI_ENTRY_MEM_DEVICE = 17,
-	DMI_ENTRY_32_MEM_ERROR = 18,
-	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
-	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
-	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
-	DMI_ENTRY_PORTABLE_BATTERY = 22,
-	DMI_ENTRY_SYSTEM_RESET = 23,
-	DMI_ENTRY_HW_SECURITY = 24,
-	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
-	DMI_ENTRY_VOLTAGE_PROBE = 26,
-	DMI_ENTRY_COOLING_DEV = 27,
-	DMI_ENTRY_TEMP_PROBE = 28,
-	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
-	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
-	DMI_ENTRY_BIS_ENTRY = 31,
-	DMI_ENTRY_SYSTEM_BOOT = 32,
-	DMI_ENTRY_MGMT_DEV = 33,
-	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
-	DMI_ENTRY_MGMT_DEV_THRES = 35,
-	DMI_ENTRY_MEM_CHANNEL = 36,
-	DMI_ENTRY_IPMI_DEV = 37,
-	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
-	DMI_ENTRY_ADDITIONAL = 39,
-	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
-	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
-	DMI_ENTRY_INACTIVE = 126,
-	DMI_ENTRY_END_OF_TABLE = 127,
-};
-
-struct dmi_memdev_info {
-	const char *device;
-	const char *bank;
-	u64 size;
-	u16 handle;
-	u8 type;
-};
-
-struct dmi_device_attribute {
-	struct device_attribute dev_attr;
-	int field;
-};
-
-struct mafield {
-	const char *prefix;
-	int field;
-};
-
-struct firmware_map_entry {
-	u64 start;
-	u64 end;
-	const char *type;
-	struct list_head list;
-	struct kobject kobj;
-};
-
-struct memmap_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct firmware_map_entry *, char *);
-};
-
-enum rpi_firmware_property_status {
-	RPI_FIRMWARE_STATUS_REQUEST = 0,
-	RPI_FIRMWARE_STATUS_SUCCESS = 2147483648,
-	RPI_FIRMWARE_STATUS_ERROR = 2147483649,
-};
-
-struct rpi_firmware_property_tag_header {
-	u32 tag;
-	u32 buf_size;
-	u32 req_resp_size;
-};
-
-struct rpi_firmware___2 {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	struct completion c;
-	u32 enabled;
-};
-
-struct qcom_scm_hdcp_req {
-	u32 addr;
-	u32 val;
-};
-
-struct qcom_scm_vmperm {
-	int vmid;
-	int perm;
-};
-
-enum qcom_scm_ocmem_client {
-	QCOM_SCM_OCMEM_UNUSED_ID = 0,
-	QCOM_SCM_OCMEM_GRAPHICS_ID = 1,
-	QCOM_SCM_OCMEM_VIDEO_ID = 2,
-	QCOM_SCM_OCMEM_LP_AUDIO_ID = 3,
-	QCOM_SCM_OCMEM_SENSORS_ID = 4,
-	QCOM_SCM_OCMEM_OTHER_OS_ID = 5,
-	QCOM_SCM_OCMEM_DEBUG_ID = 6,
-};
-
-enum qcom_scm_ice_cipher {
-	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
-	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
-	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
-	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
-};
-
-enum qcom_scm_convention {
-	SMC_CONVENTION_UNKNOWN = 0,
-	SMC_CONVENTION_LEGACY = 1,
-	SMC_CONVENTION_ARM_32 = 2,
-	SMC_CONVENTION_ARM_64 = 3,
-};
-
-enum qcom_scm_arg_types {
-	QCOM_SCM_VAL = 0,
-	QCOM_SCM_RO = 1,
-	QCOM_SCM_RW = 2,
-	QCOM_SCM_BUFVAL = 3,
-};
-
-struct qcom_scm_desc {
-	u32 svc;
-	u32 cmd;
-	u32 arginfo;
-	u64 args[10];
-	u32 owner;
-};
-
-struct qcom_scm_res {
-	u64 result[3];
-};
-
-struct qcom_scm {
-	struct device *dev;
-	struct clk *core_clk;
-	struct clk *iface_clk;
-	struct clk *bus_clk;
-	struct reset_controller_dev reset;
-	u64 dload_mode_addr;
-};
-
-struct qcom_scm_current_perm_info {
-	__le32 vmid;
-	__le32 perm;
-	__le64 ctx;
-	__le32 ctx_size;
-	__le32 unused;
-};
-
-struct qcom_scm_mem_map_info {
-	__le64 mem_addr;
-	__le64 mem_size;
-};
-
-struct qcom_scm_wb_entry {
-	int flag;
-	void *entry;
-};
-
-struct arm_smccc_quirk {
-	int id;
-	union {
-		long unsigned int a6;
-	} state;
-};
-
-struct arm_smccc_args {
-	long unsigned int args[8];
-};
-
-struct scm_legacy_command {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 resp_hdr_offset;
-	__le32 id;
-	__le32 buf[0];
-};
-
-struct scm_legacy_response {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 is_complete;
-};
-
-struct meson_sm_cmd {
-	unsigned int index;
-	u32 smc_id;
-};
-
-struct meson_sm_chip {
-	unsigned int shmem_size;
-	u32 cmd_shmem_in_base;
-	u32 cmd_shmem_out_base;
-	struct meson_sm_cmd cmd[0];
-};
-
-struct meson_sm_firmware___2 {
-	const struct meson_sm_chip *chip;
-	void *sm_shmem_in_base;
-	void *sm_shmem_out_base;
-};
-
-struct bmp_header {
-	u16 id;
-	u32 size;
-} __attribute__((packed));
-
-typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
-
-typedef struct {
-	efi_guid_t guid;
-	u64 table;
-} efi_config_table_64_t;
-
-typedef struct {
-	efi_guid_t guid;
-	u32 table;
-} efi_config_table_32_t;
-
-typedef union {
-	struct {
-		efi_guid_t guid;
-		void *table;
-	};
-	efi_config_table_32_t mixed_mode;
-} efi_config_table_t;
-
-typedef struct {
-	efi_guid_t guid;
-	long unsigned int *ptr;
-	const char name[16];
-} efi_config_table_type_t;
-
-typedef struct {
-	u16 version;
-	u16 length;
-	u32 runtime_services_supported;
-} efi_rt_properties_table_t;
-
-struct efivar_operations {
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_set_variable_t *set_variable_nonblocking;
-	efi_query_variable_store_t *query_variable_store;
-};
-
-struct efivars {
-	struct kset *kset;
-	struct kobject *kobject;
-	const struct efivar_operations *ops;
-};
-
-struct efi_variable {
-	efi_char16_t VariableName[512];
-	efi_guid_t VendorGuid;
-	long unsigned int DataSize;
-	__u8 Data[1024];
-	efi_status_t Status;
-	__u32 Attributes;
-} __attribute__((packed));
-
-struct efivar_entry {
-	struct efi_variable var;
-	struct list_head list;
-	struct kobject kobj;
-	bool scanning;
-	bool deleting;
-};
-
-struct linux_efi_random_seed {
-	u32 size;
-	u8 bits[0];
-};
-
-struct linux_efi_memreserve {
-	int size;
-	atomic_t count;
-	phys_addr_t next;
-	struct {
-		phys_addr_t base;
-		phys_addr_t size;
-	} entry[0];
-};
-
-struct efi_generic_dev_path {
-	u8 type;
-	u8 sub_type;
-	u16 length;
-};
-
-struct variable_validate {
-	efi_guid_t vendor;
-	char *name;
-	bool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);
-};
-
-typedef struct {
-	u32 version;
-	u32 num_entries;
-	u32 desc_size;
-	u32 reserved;
-	efi_memory_desc_t entry[0];
-} efi_memory_attributes_table_t;
-
-typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
-
-typedef u64 efi_physical_addr_t;
-
-typedef struct {
-	u64 length;
-	u64 data;
-} efi_capsule_block_desc_t;
-
-struct efi_memory_map_data {
-	phys_addr_t phys_map;
-	long unsigned int size;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-	long unsigned int flags;
-};
-
-struct efi_mem_range {
-	struct range range;
-	u64 attribute;
-};
-
-enum {
-	SYSTAB = 0,
-	MMBASE = 1,
-	MMSIZE = 2,
-	DCSIZE = 3,
-	DCVERS = 4,
-	PARAMCOUNT = 5,
-};
-
-struct efi_system_resource_entry_v1 {
-	efi_guid_t fw_class;
-	u32 fw_type;
-	u32 fw_version;
-	u32 lowest_supported_fw_version;
-	u32 capsule_flags;
-	u32 last_attempt_version;
-	u32 last_attempt_status;
-};
-
-struct efi_system_resource_table {
-	u32 fw_resource_count;
-	u32 fw_resource_count_max;
-	u64 fw_resource_version;
-	u8 entries[0];
-};
-
-struct esre_entry {
-	union {
-		struct efi_system_resource_entry_v1 *esre1;
-	} esre;
-	struct kobject kobj;
-	struct list_head list;
-};
-
-struct esre_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct esre_entry *, char *);
-	ssize_t (*store)(struct esre_entry *, const char *, size_t);
-};
-
-struct cper_sec_proc_generic {
-	u64 validation_bits;
-	u8 proc_type;
-	u8 proc_isa;
-	u8 proc_error_type;
-	u8 operation;
-	u8 flags;
-	u8 level;
-	u16 reserved;
-	u64 cpu_version;
-	char cpu_brand[128];
-	u64 proc_id;
-	u64 target_addr;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 ip;
-};
-
-struct cper_sec_proc_arm {
-	u32 validation_bits;
-	u16 err_info_num;
-	u16 context_info_num;
-	u32 section_length;
-	u8 affinity_level;
-	u8 reserved[3];
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
+struct acpi_hest_generic_status {
+	u32 block_status;
+	u32 raw_data_offset;
+	u32 raw_data_length;
+	u32 data_length;
+	u32 error_severity;
 };
 
 struct cper_mem_err_compact {
@@ -93039,6 +100467,374 @@
 	u8 extended;
 } __attribute__((packed));
 
+struct ghes {
+	union {
+		struct acpi_hest_generic *generic;
+		struct acpi_hest_generic_v2 *generic_v2;
+	};
+	struct acpi_hest_generic_status *estatus;
+	long unsigned int flags;
+	union {
+		struct list_head list;
+		struct timer_list timer;
+		unsigned int irq;
+	};
+};
+
+enum {
+	GHES_SEV_NO = 0,
+	GHES_SEV_CORRECTED = 1,
+	GHES_SEV_RECOVERABLE = 2,
+	GHES_SEV_PANIC = 3,
+};
+
+struct ghes_pvt {
+	struct mem_ctl_info *mci;
+	char other_detail[400];
+	char msg[80];
+};
+
+struct ghes_hw_desc {
+	int num_dimms;
+	struct dimm_info *dimms;
+};
+
+struct memdev_dmi_entry {
+	u8 type;
+	u8 length;
+	u16 handle;
+	u16 phys_mem_array_handle;
+	u16 mem_err_info_handle;
+	u16 total_width;
+	u16 data_width;
+	u16 size;
+	u8 form_factor;
+	u8 device_set;
+	u8 device_locator;
+	u8 bank_locator;
+	u8 memory_type;
+	u16 type_detail;
+	u16 speed;
+	u8 manufacturer;
+	u8 serial_number;
+	u8 asset_tag;
+	u8 part_number;
+	u8 attributes;
+	u32 extended_size;
+	u16 conf_mem_clk_speed;
+} __attribute__((packed));
+
+struct cpufreq_stats {
+	unsigned int total_trans;
+	long long unsigned int last_time;
+	unsigned int max_state;
+	unsigned int state_num;
+	unsigned int last_index;
+	u64 *time_in_state;
+	unsigned int *freq_table;
+	unsigned int *trans_table;
+	unsigned int reset_pending;
+	long long unsigned int reset_time;
+};
+
+struct cpufreq_policy;
+
+struct cpufreq_dt_platform_data {
+	bool have_governor_per_policy;
+	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*suspend)(struct cpufreq_policy *);
+	int (*resume)(struct cpufreq_policy *);
+};
+
+struct menu_device {
+	int needs_update;
+	int tick_wakeup;
+	u64 next_timer_ns;
+	unsigned int bucket;
+	unsigned int correction_factor[12];
+	unsigned int intervals[8];
+	int interval_ptr;
+};
+
+struct mmc_driver {
+	struct device_driver drv;
+	int (*probe)(struct mmc_card *);
+	void (*remove)(struct mmc_card *);
+	void (*shutdown)(struct mmc_card *);
+};
+
+struct mmc_fixup {
+	const char *name;
+	u64 rev_start;
+	u64 rev_end;
+	unsigned int manfid;
+	short unsigned int oemid;
+	u16 cis_vendor;
+	u16 cis_device;
+	unsigned int ext_csd_rev;
+	const char *of_compatible;
+	void (*vendor_fixup)(struct mmc_card *, int);
+	int data;
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+struct syscon_led {
+	struct led_classdev cdev;
+	struct regmap *map;
+	u32 offset;
+	u32 mask;
+	bool state;
+};
+
+struct dmi_memdev_info {
+	const char *device;
+	const char *bank;
+	u64 size;
+	u16 handle;
+	u8 type;
+};
+
+struct simplefb_platform_data {
+	u32 width;
+	u32 height;
+	u32 stride;
+	const char *format;
+};
+
+struct scmi_clock_info {
+	char name[64];
+	unsigned int enable_latency;
+	bool rate_discrete;
+	bool rate_changed_notifications;
+	bool rate_change_requested_notifications;
+	union {
+		struct {
+			int num_rates;
+			u64 rates[16];
+		} list;
+		struct {
+			u64 min_rate;
+			u64 max_rate;
+			u64 step_size;
+		} range;
+	};
+};
+
+struct scmi_clk_proto_ops {
+	int (*count_get)(const struct scmi_protocol_handle *);
+	const struct scmi_clock_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*rate_get)(const struct scmi_protocol_handle *, u32, u64 *);
+	int (*rate_set)(const struct scmi_protocol_handle *, u32, u64);
+	int (*enable)(const struct scmi_protocol_handle *, u32);
+	int (*disable)(const struct scmi_protocol_handle *, u32);
+	int (*enable_atomic)(const struct scmi_protocol_handle *, u32);
+	int (*disable_atomic)(const struct scmi_protocol_handle *, u32);
+};
+
+struct scmi_clock_rate_notif_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int clock_id;
+	long long unsigned int rate;
+};
+
+enum scmi_clock_protocol_cmd {
+	CLOCK_ATTRIBUTES = 3,
+	CLOCK_DESCRIBE_RATES = 4,
+	CLOCK_RATE_SET = 5,
+	CLOCK_RATE_GET = 6,
+	CLOCK_CONFIG_SET = 7,
+	CLOCK_NAME_GET = 8,
+	CLOCK_RATE_NOTIFY = 9,
+	CLOCK_RATE_CHANGE_REQUESTED_NOTIFY = 10,
+};
+
+struct scmi_msg_resp_clock_protocol_attributes {
+	__le16 num_clocks;
+	u8 max_async_req;
+	u8 reserved;
+};
+
+struct scmi_msg_resp_clock_attributes {
+	__le32 attributes;
+	u8 name[16];
+	__le32 clock_enable_latency;
+};
+
+struct scmi_clock_set_config {
+	__le32 id;
+	__le32 attributes;
+};
+
+struct scmi_msg_clock_describe_rates {
+	__le32 id;
+	__le32 rate_index;
+};
+
+struct scmi_msg_resp_clock_describe_rates {
+	__le32 num_rates_flags;
+	struct {
+		__le32 value_low;
+		__le32 value_high;
+	} rate[0];
+};
+
+struct scmi_clock_set_rate {
+	__le32 flags;
+	__le32 id;
+	__le32 value_low;
+	__le32 value_high;
+};
+
+struct scmi_msg_resp_set_rate_complete {
+	__le32 id;
+	__le32 rate_low;
+	__le32 rate_high;
+};
+
+struct scmi_msg_clock_rate_notify {
+	__le32 clk_id;
+	__le32 notify_enable;
+};
+
+struct scmi_clock_rate_notify_payld {
+	__le32 agent_id;
+	__le32 clock_id;
+	__le32 rate_low;
+	__le32 rate_high;
+};
+
+struct clock_info {
+	u32 version;
+	int num_clocks;
+	int max_async_req;
+	atomic_t cur_async_req;
+	struct scmi_clock_info *clk;
+};
+
+struct scmi_clk_ipriv {
+	struct device *dev;
+	u32 clk_id;
+	struct scmi_clock_info *clk;
+};
+
+enum scmi_voltage_level_mode {
+	SCMI_VOLTAGE_LEVEL_SET_AUTO = 0,
+	SCMI_VOLTAGE_LEVEL_SET_SYNC = 1,
+};
+
+struct scmi_voltage_info {
+	unsigned int id;
+	bool segmented;
+	bool negative_volts_allowed;
+	bool async_level_set;
+	char name[64];
+	unsigned int num_levels;
+	int *levels_uv;
+};
+
+struct scmi_voltage_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const struct scmi_voltage_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*config_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*config_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*level_set)(const struct scmi_protocol_handle *, u32, enum scmi_voltage_level_mode, s32);
+	int (*level_get)(const struct scmi_protocol_handle *, u32, s32 *);
+};
+
+enum scmi_voltage_protocol_cmd {
+	VOLTAGE_DOMAIN_ATTRIBUTES = 3,
+	VOLTAGE_DESCRIBE_LEVELS = 4,
+	VOLTAGE_CONFIG_SET = 5,
+	VOLTAGE_CONFIG_GET = 6,
+	VOLTAGE_LEVEL_SET = 7,
+	VOLTAGE_LEVEL_GET = 8,
+	VOLTAGE_DOMAIN_NAME_GET = 9,
+};
+
+struct scmi_msg_resp_domain_attributes {
+	__le32 attr;
+	u8 name[16];
+};
+
+struct scmi_msg_cmd_describe_levels {
+	__le32 domain_id;
+	__le32 level_index;
+};
+
+struct scmi_msg_resp_describe_levels {
+	__le32 flags;
+	__le32 voltage[0];
+};
+
+struct scmi_msg_cmd_config_set {
+	__le32 domain_id;
+	__le32 config;
+};
+
+struct scmi_msg_cmd_level_set {
+	__le32 domain_id;
+	__le32 flags;
+	__le32 voltage_level;
+};
+
+struct scmi_resp_voltage_level_set_complete {
+	__le32 domain_id;
+	__le32 voltage_level;
+};
+
+struct voltage_info {
+	unsigned int version;
+	unsigned int num_domains;
+	struct scmi_voltage_info *domains;
+};
+
+struct scmi_volt_ipriv {
+	struct device *dev;
+	struct scmi_voltage_info *v;
+};
+
+typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
+
+struct efivar_operations {
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_store_t *query_variable_store;
+};
+
+struct efivars {
+	struct kset *kset;
+	struct kobject *kobject;
+	const struct efivar_operations *ops;
+};
+
+struct cper_sec_proc_generic {
+	u64 validation_bits;
+	u8 proc_type;
+	u8 proc_isa;
+	u8 proc_error_type;
+	u8 operation;
+	u8 flags;
+	u8 level;
+	u16 reserved;
+	u64 cpu_version;
+	char cpu_brand[128];
+	u64 proc_id;
+	u64 target_addr;
+	u64 requestor_id;
+	u64 responder_id;
+	u64 ip;
+};
+
 struct cper_sec_pcie {
 	u64 validation_bits;
 	u32 port_type;
@@ -93105,277 +100901,95 @@
 	u64 time_stamp;
 };
 
-enum efi_rts_ids {
-	EFI_NONE = 0,
-	EFI_GET_TIME = 1,
-	EFI_SET_TIME = 2,
-	EFI_GET_WAKEUP_TIME = 3,
-	EFI_SET_WAKEUP_TIME = 4,
-	EFI_GET_VARIABLE = 5,
-	EFI_GET_NEXT_VARIABLE = 6,
-	EFI_SET_VARIABLE = 7,
-	EFI_QUERY_VARIABLE_INFO = 8,
-	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
-	EFI_RESET_SYSTEM = 10,
-	EFI_UPDATE_CAPSULE = 11,
-	EFI_QUERY_CAPSULE_CAPS = 12,
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
 };
 
-struct efi_runtime_work {
-	void *arg1;
-	void *arg2;
-	void *arg3;
-	void *arg4;
-	void *arg5;
-	efi_status_t status;
-	struct work_struct work;
-	enum efi_rts_ids efi_rts_id;
-	struct completion efi_rts_comp;
-};
-
-typedef void *efi_event_t;
-
-typedef void (*efi_event_notify_t)(efi_event_t, void *);
-
-typedef enum {
-	EfiTimerCancel = 0,
-	EfiTimerPeriodic = 1,
-	EfiTimerRelative = 2,
-} EFI_TIMER_DELAY;
-
-typedef void *efi_handle_t;
-
-typedef struct efi_generic_dev_path efi_device_path_protocol_t;
-
-union efi_boot_services {
-	struct {
-		efi_table_hdr_t hdr;
-		void *raise_tpl;
-		void *restore_tpl;
-		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
-		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
-		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
-		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
-		efi_status_t (*free_pool)(void *);
-		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
-		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
-		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
-		void *signal_event;
-		efi_status_t (*close_event)(efi_event_t);
-		void *check_event;
-		void *install_protocol_interface;
-		void *reinstall_protocol_interface;
-		void *uninstall_protocol_interface;
-		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
-		void *__reserved;
-		void *register_protocol_notify;
-		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
-		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
-		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
-		void *load_image;
-		void *start_image;
-		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
-		void *unload_image;
-		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
-		void *get_next_monotonic_count;
-		efi_status_t (*stall)(long unsigned int);
-		void *set_watchdog_timer;
-		void *connect_controller;
-		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
-		void *open_protocol;
-		void *close_protocol;
-		void *open_protocol_information;
-		void *protocols_per_handle;
-		void *locate_handle_buffer;
-		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
-		void *install_multiple_protocol_interfaces;
-		void *uninstall_multiple_protocol_interfaces;
-		void *calculate_crc32;
-		void *copy_mem;
-		void *set_mem;
-		void *create_event_ex;
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
 	};
-	struct {
-		efi_table_hdr_t hdr;
-		u32 raise_tpl;
-		u32 restore_tpl;
-		u32 allocate_pages;
-		u32 free_pages;
-		u32 get_memory_map;
-		u32 allocate_pool;
-		u32 free_pool;
-		u32 create_event;
-		u32 set_timer;
-		u32 wait_for_event;
-		u32 signal_event;
-		u32 close_event;
-		u32 check_event;
-		u32 install_protocol_interface;
-		u32 reinstall_protocol_interface;
-		u32 uninstall_protocol_interface;
-		u32 handle_protocol;
-		u32 __reserved;
-		u32 register_protocol_notify;
-		u32 locate_handle;
-		u32 locate_device_path;
-		u32 install_configuration_table;
-		u32 load_image;
-		u32 start_image;
-		u32 exit;
-		u32 unload_image;
-		u32 exit_boot_services;
-		u32 get_next_monotonic_count;
-		u32 stall;
-		u32 set_watchdog_timer;
-		u32 connect_controller;
-		u32 disconnect_controller;
-		u32 open_protocol;
-		u32 close_protocol;
-		u32 open_protocol_information;
-		u32 protocols_per_handle;
-		u32 locate_handle_buffer;
-		u32 locate_protocol;
-		u32 install_multiple_protocol_interfaces;
-		u32 uninstall_multiple_protocol_interfaces;
-		u32 calculate_crc32;
-		u32 copy_mem;
-		u32 set_mem;
-		u32 create_event_ex;
-	} mixed_mode;
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
 };
 
-typedef union efi_boot_services efi_boot_services_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 fw_vendor;
-	u32 fw_revision;
-	u32 con_in_handle;
-	u32 con_in;
-	u32 con_out_handle;
-	u32 con_out;
-	u32 stderr_handle;
-	u32 stderr;
-	u32 runtime;
-	u32 boottime;
-	u32 nr_tables;
-	u32 tables;
-} efi_system_table_32_t;
-
-typedef struct {
-	u16 scan_code;
-	efi_char16_t unicode_char;
-} efi_input_key_t;
-
-union efi_simple_text_input_protocol;
-
-typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
-
-union efi_simple_text_input_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
-		efi_event_t wait_for_key;
-	};
-	struct {
-		u32 reset;
-		u32 read_keystroke;
-		u32 wait_for_key;
-	} mixed_mode;
+enum {
+	M_I17 = 0,
+	M_I20 = 1,
+	M_I20_SR = 2,
+	M_I24 = 3,
+	M_I24_8_1 = 4,
+	M_I24_10_1 = 5,
+	M_I27_11_1 = 6,
+	M_MINI = 7,
+	M_MINI_3_1 = 8,
+	M_MINI_4_1 = 9,
+	M_MB = 10,
+	M_MB_2 = 11,
+	M_MB_3 = 12,
+	M_MB_5_1 = 13,
+	M_MB_6_1 = 14,
+	M_MB_7_1 = 15,
+	M_MB_SR = 16,
+	M_MBA = 17,
+	M_MBA_3 = 18,
+	M_MBP = 19,
+	M_MBP_2 = 20,
+	M_MBP_2_2 = 21,
+	M_MBP_SR = 22,
+	M_MBP_4 = 23,
+	M_MBP_5_1 = 24,
+	M_MBP_5_2 = 25,
+	M_MBP_5_3 = 26,
+	M_MBP_6_1 = 27,
+	M_MBP_6_2 = 28,
+	M_MBP_7_1 = 29,
+	M_MBP_8_2 = 30,
+	M_UNKNOWN = 31,
 };
 
-union efi_simple_text_output_protocol;
-
-typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
-
-union efi_simple_text_output_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
-		void *test_string;
-	};
-	struct {
-		u32 reset;
-		u32 output_string;
-		u32 test_string;
-	} mixed_mode;
+struct efifb_dmi_info {
+	char *optname;
+	long unsigned int base;
+	int stride;
+	int width;
+	int height;
+	int flags;
 };
 
-typedef union {
-	struct {
-		efi_table_hdr_t hdr;
-		long unsigned int fw_vendor;
-		u32 fw_revision;
-		long unsigned int con_in_handle;
-		efi_simple_text_input_protocol_t *con_in;
-		long unsigned int con_out_handle;
-		efi_simple_text_output_protocol_t *con_out;
-		long unsigned int stderr_handle;
-		long unsigned int stderr;
-		efi_runtime_services_t *runtime;
-		efi_boot_services_t *boottime;
-		long unsigned int nr_tables;
-		long unsigned int tables;
-	};
-	efi_system_table_32_t mixed_mode;
-} efi_system_table_t;
-
-struct cper_arm_err_info {
-	u8 version;
-	u8 length;
-	u16 validation_bits;
-	u8 type;
-	u16 multiple_error;
-	u8 flags;
-	u64 error_info;
-	u64 virt_fault_addr;
-	u64 physical_fault_addr;
-} __attribute__((packed));
-
-struct cper_arm_ctx_info {
-	u16 version;
-	u16 type;
-	u32 size;
+enum {
+	OVERRIDE_NONE = 0,
+	OVERRIDE_BASE = 1,
+	OVERRIDE_STRIDE = 2,
+	OVERRIDE_HEIGHT = 4,
+	OVERRIDE_WIDTH = 8,
 };
 
-typedef long unsigned int psci_fn(long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-enum psci_function {
-	PSCI_FN_CPU_SUSPEND = 0,
-	PSCI_FN_CPU_ON = 1,
-	PSCI_FN_CPU_OFF = 2,
-	PSCI_FN_MIGRATE = 3,
-	PSCI_FN_MAX = 4,
+struct tegra_ivc_header {
+	union {
+		struct {
+			u32 count;
+			u32 state;
+		};
+		u8 pad[64];
+	} tx;
+	union {
+		u32 count;
+		u8 pad[64];
+	} rx;
 };
 
-typedef int (*psci_initcall_t)(const struct device_node *);
-
-struct mrq_ping_request {
-	uint32_t challenge;
-};
-
-struct mrq_ping_response {
-	uint32_t reply;
-};
-
-struct mrq_query_tag_request {
-	uint32_t addr;
-};
-
-struct mrq_query_fw_tag_response {
-	uint8_t tag[32];
-};
-
-struct mrq_query_abi_request {
-	uint32_t mrq;
-};
-
-struct mrq_query_abi_response {
-	int32_t status;
-};
-
-struct tegra_ivc_header;
-
 struct tegra_ivc {
 	struct device *peer;
 	struct {
@@ -93394,308 +101008,101 @@
 	size_t frame_size;
 };
 
-typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int, struct tegra_bpmp_channel *, void *);
-
-struct tegra_bpmp_mrq {
-	struct list_head list;
-	unsigned int mrq;
-	tegra_bpmp_mrq_handler_t handler;
-	void *data;
-};
-
-struct tegra210_bpmp {
-	void *atomics;
-	void *arb_sema;
-	struct irq_data *tx_irq_data;
-};
-
-struct tegra186_bpmp {
-	struct tegra_bpmp *parent;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} tx;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} rx;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
-};
-
-enum mrq_debugfs_commands {
-	CMD_DEBUGFS_READ = 1,
-	CMD_DEBUGFS_WRITE = 2,
-	CMD_DEBUGFS_DUMPDIR = 3,
-	CMD_DEBUGFS_MAX = 4,
-};
-
-struct cmd_debugfs_fileop_request {
-	uint32_t fnameaddr;
-	uint32_t fnamelen;
-	uint32_t dataaddr;
-	uint32_t datalen;
-};
-
-struct cmd_debugfs_dumpdir_request {
-	uint32_t dataaddr;
-	uint32_t datalen;
-};
-
-struct cmd_debugfs_fileop_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct cmd_debugfs_dumpdir_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct mrq_debugfs_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debugfs_fileop_request fop;
-		struct cmd_debugfs_dumpdir_request dumpdir;
-	};
-};
-
-struct mrq_debugfs_response {
-	int32_t reserved;
-	union {
-		struct cmd_debugfs_fileop_response fop;
-		struct cmd_debugfs_dumpdir_response dumpdir;
-	};
-};
-
-enum mrq_debug_commands {
-	CMD_DEBUG_OPEN_RO = 0,
-	CMD_DEBUG_OPEN_WO = 1,
-	CMD_DEBUG_READ = 2,
-	CMD_DEBUG_WRITE = 3,
-	CMD_DEBUG_CLOSE = 4,
-	CMD_DEBUG_MAX = 5,
-};
-
-struct cmd_debug_fopen_request {
-	char name[116];
-};
-
-struct cmd_debug_fopen_response {
-	uint32_t fd;
-	uint32_t datalen;
-};
-
-struct cmd_debug_fread_request {
-	uint32_t fd;
-};
-
-struct cmd_debug_fread_response {
-	uint32_t readlen;
-	char data[116];
-};
-
-struct cmd_debug_fwrite_request {
-	uint32_t fd;
-	uint32_t datalen;
-	char data[108];
-};
-
-struct cmd_debug_fclose_request {
-	uint32_t fd;
-};
-
-struct mrq_debug_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debug_fopen_request fop;
-		struct cmd_debug_fread_request frd;
-		struct cmd_debug_fwrite_request fwr;
-		struct cmd_debug_fclose_request fcl;
-	};
-};
-
-struct mrq_debug_response {
-	union {
-		struct cmd_debug_fopen_response fop;
-		struct cmd_debug_fread_response frd;
-	};
-};
-
-struct seqbuf {
-	char *buf;
-	size_t pos;
-	size_t size;
-};
-
-struct tegra_ivc_header {
-	union {
-		struct {
-			u32 count;
-			u32 state;
-		};
-		u8 pad[64];
-	} tx;
-	union {
-		u32 count;
-		u8 pad[64];
-	} rx;
-};
-
 enum tegra_ivc_state {
 	TEGRA_IVC_STATE_ESTABLISHED = 0,
 	TEGRA_IVC_STATE_SYNC = 1,
 	TEGRA_IVC_STATE_ACK = 2,
 };
 
-struct of_timer_irq {
-	int irq;
-	int index;
-	int percpu;
-	const char *name;
-	long unsigned int flags;
-	irq_handler_t handler;
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
 };
 
-struct of_timer_base {
-	void *base;
-	const char *name;
-	int index;
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
 };
 
-struct of_timer_clk {
-	struct clk *clk;
-	const char *name;
-	int index;
-	long unsigned int rate;
-	long unsigned int period;
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
 };
 
-struct timer_of {
-	unsigned int flags;
-	struct device_node *np;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device clkevt;
-	struct of_timer_base of_base;
-	struct of_timer_irq of_irq;
-	struct of_timer_clk of_clk;
-	void *private_data;
-	long: 64;
-	long: 64;
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
 };
 
-typedef int (*of_init_fn_1_ret)(struct device_node *);
-
-struct clocksource_mmio {
-	void *reg;
-	struct clocksource clksrc;
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct list_head list;
+	spinlock_t list_lock;
+	bool initialized;
 };
 
-struct rk_timer {
-	void *base;
-	void *ctrl;
-	struct clk *clk;
-	struct clk *pclk;
-	u32 freq;
-	int irq;
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
 };
 
-struct rk_clkevt {
-	struct clock_event_device ce;
-	struct rk_timer timer;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum arch_timer_reg {
-	ARCH_TIMER_REG_CTRL = 0,
-	ARCH_TIMER_REG_TVAL = 1,
-};
-
-enum arch_timer_spi_nr {
-	ARCH_TIMER_PHYS_SPI = 0,
-	ARCH_TIMER_VIRT_SPI = 1,
-	ARCH_TIMER_MAX_TIMER_SPI = 2,
-};
-
-enum arch_timer_erratum_match_type {
-	ate_match_dt = 0,
-	ate_match_local_cap_id = 1,
-	ate_match_acpi_oem_info = 2,
-};
-
-struct arch_timer_erratum_workaround {
-	enum arch_timer_erratum_match_type match_type;
-	const void *id;
-	const char *desc;
-	u32 (*read_cntp_tval_el0)();
-	u32 (*read_cntv_tval_el0)();
-	u64 (*read_cntpct_el0)();
-	u64 (*read_cntvct_el0)();
-	int (*set_next_event_phys)(long unsigned int, struct clock_event_device *);
-	int (*set_next_event_virt)(long unsigned int, struct clock_event_device *);
-	bool disable_compat_vdso;
-};
-
-struct arch_timer {
-	void *base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device evt;
-};
-
-struct ate_acpi_oem_info {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-};
-
-typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, const void *);
-
-struct sp804_timer {
-	int load;
-	int load_h;
-	int value;
-	int value_h;
-	int ctrl;
-	int intclr;
-	int ris;
-	int mis;
-	int bgload;
-	int bgload_h;
-	int timer_base[2];
-	int width;
-};
-
-struct sp804_clkevt {
-	void *base;
-	void *load;
-	void *load_h;
-	void *value;
-	void *value_h;
-	void *ctrl;
-	void *intclr;
-	void *ris;
-	void *mis;
-	void *bgload;
-	void *bgload_h;
-	long unsigned int reload;
-	int width;
+struct magicmouse_sc {
+	struct input_dev *input;
+	long unsigned int quirks;
+	int ntouches;
+	int scroll_accel;
+	long unsigned int scroll_jiffies;
+	struct {
+		short int x;
+		short int y;
+		short int scroll_x;
+		short int scroll_y;
+		short int scroll_x_hr;
+		short int scroll_y_hr;
+		u8 size;
+		bool scroll_x_active;
+		bool scroll_y_active;
+	} touches[16];
+	int tracking_ids[16];
+	struct hid_device *hdev;
+	struct delayed_work work;
+	struct timer_list battery_timer;
 };
 
 struct alias_prop {
@@ -93706,34 +101113,6 @@
 	char stem[0];
 };
 
-struct of_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct device_node *local_node;
-};
-
-struct supplier_bindings {
-	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
-};
-
-struct of_changeset_entry {
-	struct list_head node;
-	long unsigned int action;
-	struct device_node *np;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-struct of_changeset {
-	struct list_head entries;
-};
-
-struct of_bus___2 {
-	void (*count_cells)(const void *, int, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-};
-
 struct of_bus {
 	const char *name;
 	const char *addresses;
@@ -93745,1204 +101124,12 @@
 	unsigned int (*get_flags)(const __be32 *);
 };
 
-struct of_intc_desc {
-	struct list_head list;
-	of_irq_init_cb_t irq_init_cb;
-	struct device_node *dev;
-	struct device_node *interrupt_parent;
-};
-
-struct rmem_assigned_device {
-	struct device *dev;
-	struct reserved_mem *rmem;
-	struct list_head list;
-};
-
-enum of_overlay_notify_action {
-	OF_OVERLAY_PRE_APPLY = 0,
-	OF_OVERLAY_POST_APPLY = 1,
-	OF_OVERLAY_PRE_REMOVE = 2,
-	OF_OVERLAY_POST_REMOVE = 3,
-};
-
-struct of_overlay_notify_data {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct target {
-	struct device_node *np;
-	bool in_livetree;
-};
-
-struct fragment {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct overlay_changeset {
-	int id;
-	struct list_head ovcs_list;
-	const void *fdt;
-	struct device_node *overlay_tree;
-	int count;
-	struct fragment *fragments;
-	bool symbols_fragment;
-	struct of_changeset cset;
-};
-
-enum vchiq_reason {
-	VCHIQ_SERVICE_OPENED = 0,
-	VCHIQ_SERVICE_CLOSED = 1,
-	VCHIQ_MESSAGE_AVAILABLE = 2,
-	VCHIQ_BULK_TRANSMIT_DONE = 3,
-	VCHIQ_BULK_RECEIVE_DONE = 4,
-	VCHIQ_BULK_TRANSMIT_ABORTED = 5,
-	VCHIQ_BULK_RECEIVE_ABORTED = 6,
-};
-
-enum vchiq_status {
-	VCHIQ_ERROR = 4294967295,
-	VCHIQ_SUCCESS = 0,
-	VCHIQ_RETRY = 1,
-};
-
-enum vchiq_bulk_mode {
-	VCHIQ_BULK_MODE_CALLBACK = 0,
-	VCHIQ_BULK_MODE_BLOCKING = 1,
-	VCHIQ_BULK_MODE_NOCALLBACK = 2,
-	VCHIQ_BULK_MODE_WAITING = 3,
-};
-
-enum vchiq_service_option {
-	VCHIQ_SERVICE_OPTION_AUTOCLOSE = 0,
-	VCHIQ_SERVICE_OPTION_SLOT_QUOTA = 1,
-	VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA = 2,
-	VCHIQ_SERVICE_OPTION_SYNCHRONOUS = 3,
-	VCHIQ_SERVICE_OPTION_TRACE = 4,
-};
-
-struct vchiq_header {
-	int msgid;
-	unsigned int size;
-	char data[0];
-};
-
-struct vchiq_service_base {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-};
-
-struct vchiq_service_params_kernel {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-typedef uint32_t BITSET_T;
-
-enum {
-	DEBUG_ENTRIES = 0,
-	DEBUG_SLOT_HANDLER_COUNT = 1,
-	DEBUG_SLOT_HANDLER_LINE = 2,
-	DEBUG_PARSE_LINE = 3,
-	DEBUG_PARSE_HEADER = 4,
-	DEBUG_PARSE_MSGID = 5,
-	DEBUG_AWAIT_COMPLETION_LINE = 6,
-	DEBUG_DEQUEUE_MESSAGE_LINE = 7,
-	DEBUG_SERVICE_CALLBACK_LINE = 8,
-	DEBUG_MSG_QUEUE_FULL_COUNT = 9,
-	DEBUG_COMPLETION_QUEUE_FULL_COUNT = 10,
-	DEBUG_MAX = 11,
-};
-
-enum vchiq_connstate {
-	VCHIQ_CONNSTATE_DISCONNECTED = 0,
-	VCHIQ_CONNSTATE_CONNECTING = 1,
-	VCHIQ_CONNSTATE_CONNECTED = 2,
-	VCHIQ_CONNSTATE_PAUSING = 3,
-	VCHIQ_CONNSTATE_PAUSE_SENT = 4,
-	VCHIQ_CONNSTATE_PAUSED = 5,
-	VCHIQ_CONNSTATE_RESUMING = 6,
-	VCHIQ_CONNSTATE_PAUSE_TIMEOUT = 7,
-	VCHIQ_CONNSTATE_RESUME_TIMEOUT = 8,
-};
-
-enum {
-	VCHIQ_SRVSTATE_FREE = 0,
-	VCHIQ_SRVSTATE_HIDDEN = 1,
-	VCHIQ_SRVSTATE_LISTENING = 2,
-	VCHIQ_SRVSTATE_OPENING = 3,
-	VCHIQ_SRVSTATE_OPEN = 4,
-	VCHIQ_SRVSTATE_OPENSYNC = 5,
-	VCHIQ_SRVSTATE_CLOSESENT = 6,
-	VCHIQ_SRVSTATE_CLOSERECVD = 7,
-	VCHIQ_SRVSTATE_CLOSEWAIT = 8,
-	VCHIQ_SRVSTATE_CLOSED = 9,
-};
-
-enum {
-	VCHIQ_POLL_TERMINATE = 0,
-	VCHIQ_POLL_REMOVE = 1,
-	VCHIQ_POLL_TXNOTIFY = 2,
-	VCHIQ_POLL_RXNOTIFY = 3,
-	VCHIQ_POLL_COUNT = 4,
-};
-
-enum vchiq_bulk_dir {
-	VCHIQ_BULK_TRANSMIT = 0,
-	VCHIQ_BULK_RECEIVE = 1,
-};
-
-typedef void (*vchiq_userdata_term)(void *);
-
-struct vchiq_bulk {
-	short int mode;
-	short int dir;
-	void *userdata;
-	dma_addr_t data;
-	int size;
-	void *remote_data;
-	int remote_size;
-	int actual;
-};
-
-struct vchiq_bulk_queue {
-	int local_insert;
-	int remote_insert;
-	int process;
-	int remote_notify;
-	int remove;
-	struct vchiq_bulk bulks[4];
-};
-
-struct remote_event {
-	int armed;
-	int fired;
-	u32 __unused;
-};
-
-struct vchiq_slot {
-	char data[4096];
-};
-
-struct vchiq_slot_info {
-	short int use_count;
-	short int release_count;
-};
-
-struct service_stats_struct {
-	int quota_stalls;
-	int slot_stalls;
-	int bulk_stalls;
-	int error_count;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int bulk_tx_count;
-	int bulk_rx_count;
-	int bulk_aborted_count;
-	uint64_t ctrl_tx_bytes;
-	uint64_t ctrl_rx_bytes;
-	uint64_t bulk_tx_bytes;
-	uint64_t bulk_rx_bytes;
-};
-
-struct vchiq_state;
-
-struct vchiq_instance;
-
-struct vchiq_service {
-	struct vchiq_service_base base;
-	unsigned int handle;
-	struct kref ref_count;
-	struct callback_head rcu;
-	int srvstate;
-	vchiq_userdata_term userdata_term;
-	unsigned int localport;
-	unsigned int remoteport;
-	int public_fourcc;
-	int client_id;
-	char auto_close;
-	char sync;
-	char closing;
-	char trace;
-	atomic_t poll_flags;
-	short int version;
-	short int version_min;
-	short int peer_version;
-	struct vchiq_state *state;
-	struct vchiq_instance *instance;
-	int service_use_count;
-	struct vchiq_bulk_queue bulk_tx;
-	struct vchiq_bulk_queue bulk_rx;
-	struct completion remove_event;
-	struct completion bulk_remove_event;
-	struct mutex bulk_mutex;
-	struct service_stats_struct stats;
-	int msg_queue_read;
-	int msg_queue_write;
-	struct completion msg_queue_pop;
-	struct completion msg_queue_push;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct state_stats_struct {
-	int slot_stalls;
-	int data_stalls;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int error_count;
-};
-
-struct vchiq_service_quota {
-	short unsigned int slot_quota;
-	short unsigned int slot_use_count;
-	short unsigned int message_quota;
-	short unsigned int message_use_count;
-	struct completion quota_event;
-	int previous_tx_index;
-};
-
-struct opaque_platform_state;
-
-struct vchiq_shared_state;
-
-struct vchiq_state {
-	int id;
-	int initialised;
-	enum vchiq_connstate conn_state;
-	short int version_common;
-	struct vchiq_shared_state *local;
-	struct vchiq_shared_state *remote;
-	struct vchiq_slot *slot_data;
-	short unsigned int default_slot_quota;
-	short unsigned int default_message_quota;
-	struct completion connect;
-	struct mutex mutex;
-	struct vchiq_instance **instance;
-	struct task_struct *slot_handler_thread;
-	struct task_struct *recycle_thread;
-	struct task_struct *sync_thread;
-	wait_queue_head_t trigger_event;
-	wait_queue_head_t recycle_event;
-	wait_queue_head_t sync_trigger_event;
-	wait_queue_head_t sync_release_event;
-	char *tx_data;
-	char *rx_data;
-	struct vchiq_slot_info *rx_info;
-	struct mutex slot_mutex;
-	struct mutex recycle_mutex;
-	struct mutex sync_mutex;
-	struct mutex bulk_transfer_mutex;
-	int rx_pos;
-	int local_tx_pos;
-	int slot_queue_available;
-	int poll_needed;
-	int previous_data_index;
-	short unsigned int data_use_count;
-	short unsigned int data_quota;
-	atomic_t poll_services[128];
-	int unused_service;
-	struct completion slot_available_event;
-	struct completion slot_remove_event;
-	struct completion data_quota_event;
-	struct state_stats_struct stats;
-	struct vchiq_service *services[4096];
-	struct vchiq_service_quota service_quotas[4096];
-	struct vchiq_slot_info slot_info[128];
-	struct opaque_platform_state *platform_state;
-};
-
-struct vchiq_shared_state {
-	int initialised;
-	int slot_first;
-	int slot_last;
-	int slot_sync;
-	struct remote_event trigger;
-	int tx_pos;
-	struct remote_event recycle;
-	int slot_queue_recycle;
-	struct remote_event sync_trigger;
-	struct remote_event sync_release;
-	int slot_queue[64];
-	int debug[11];
-};
-
-struct vchiq_slot_zero {
-	int magic;
-	short int version;
-	short int version_min;
-	int slot_zero_size;
-	int slot_size;
-	int max_slots;
-	int max_slots_per_side;
-	int platform_data[2];
-	struct vchiq_shared_state master;
-	struct vchiq_shared_state slave;
-	struct vchiq_slot_info slots[128];
-};
-
-struct bulk_waiter {
-	struct vchiq_bulk *bulk;
-	struct completion event;
-	int actual;
-};
-
-struct vchiq_config {
-	unsigned int max_msg_size;
-	unsigned int bulk_threshold;
-	unsigned int max_outstanding_bulks;
-	unsigned int max_services;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_open_payload {
-	int fourcc;
-	int client_id;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_openack_payload {
-	short int version;
-};
-
-enum {
-	QMFLAGS_IS_BLOCKING = 1,
-	QMFLAGS_NO_MUTEX_LOCK = 2,
-	QMFLAGS_NO_MUTEX_UNLOCK = 4,
-};
-
-struct vchiq_element {
-	const void *data;
-	unsigned int size;
-};
-
-struct vchiq_completion_data_kernel {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_debugfs_node {
-	struct dentry *dentry;
-};
-
-struct vchiq_instance {
-	struct vchiq_state *state;
-	struct vchiq_completion_data_kernel completions[128];
-	int completion_insert;
-	int completion_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct mutex completion_mutex;
-	int connected;
-	int closing;
-	int pid;
-	int mark;
-	int use_close_delivered;
-	int trace;
-	struct list_head bulk_waiter_list;
-	struct mutex bulk_waiter_list_mutex;
-	struct vchiq_debugfs_node debugfs_node;
-};
-
-struct vchiq_service_params {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service {
-	struct vchiq_service_params params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_queue_message {
-	unsigned int handle;
-	unsigned int count;
-	const struct vchiq_element *elements;
-};
-
-struct vchiq_queue_bulk_transfer {
-	unsigned int handle;
-	void *data;
-	unsigned int size;
-	void *userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_completion_data {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_await_completion {
-	unsigned int count;
-	struct vchiq_completion_data *buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	void **msgbufs;
-};
-
-struct vchiq_dequeue_message {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	void *buf;
-};
-
-struct vchiq_get_config {
-	unsigned int config_size;
-	struct vchiq_config *pconfig;
-};
-
-struct vchiq_set_service_option {
-	unsigned int handle;
-	enum vchiq_service_option option;
-	int value;
-};
-
-enum USE_TYPE_E {
-	USE_TYPE_SERVICE = 0,
-	USE_TYPE_VCHIQ = 1,
-};
-
-struct vchiq_arm_state {
-	struct task_struct *ka_thread;
-	struct completion ka_evt;
-	atomic_t ka_use_count;
-	atomic_t ka_use_ack_count;
-	atomic_t ka_release_count;
-	rwlock_t susp_res_lock;
-	struct vchiq_state *state;
-	int videocore_use_count;
-	int peer_use_count;
-	int first_connect;
-};
-
-struct vchiq_drvdata {
-	const unsigned int cache_line_size;
-	struct rpi_firmware *fw;
-};
-
-struct user_service {
-	struct vchiq_service *service;
-	void *userdata;
-	struct vchiq_instance *instance;
-	char is_vchi;
-	char dequeue_pending;
-	char close_pending;
-	int message_available_pos;
-	int msg_insert;
-	int msg_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct completion close_event;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct bulk_waiter_node {
-	struct bulk_waiter bulk_waiter;
-	int pid;
-	struct list_head list;
-};
-
-struct dump_context {
-	char *buf;
-	size_t actual;
-	size_t space;
-	loff_t offset;
-};
-
-struct vchiq_io_copy_callback_context {
-	struct vchiq_element *element;
-	size_t element_offset;
-	long unsigned int elements_to_go;
-};
-
-struct vchiq_completion_data32 {
-	enum vchiq_reason reason;
-	compat_uptr_t header;
-	compat_uptr_t service_userdata;
-	compat_uptr_t bulk_userdata;
-};
-
-struct vchiq_service_params32 {
-	int fourcc;
-	compat_uptr_t callback;
-	compat_uptr_t userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service32 {
-	struct vchiq_service_params32 params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_element32 {
-	compat_uptr_t data;
-	unsigned int size;
-};
-
-struct vchiq_queue_message32 {
-	unsigned int handle;
-	unsigned int count;
-	compat_uptr_t elements;
-};
-
-struct vchiq_queue_bulk_transfer32 {
-	unsigned int handle;
-	compat_uptr_t data;
-	unsigned int size;
-	compat_uptr_t userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_await_completion32 {
-	unsigned int count;
-	compat_uptr_t buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	compat_uptr_t msgbufs;
-};
-
-struct vchiq_dequeue_message32 {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	compat_uptr_t buf;
-};
-
-struct vchiq_get_config32 {
-	unsigned int config_size;
-	compat_uptr_t pconfig;
-};
-
-struct service_data_struct {
-	int fourcc;
-	int clientid;
-	int use_count;
-};
-
-struct pagelist {
-	u32 length;
-	u16 type;
-	u16 offset;
-	u32 addrs[1];
-};
-
-struct vchiq_2835_state {
-	int inited;
-	struct vchiq_arm_state arm_state;
-};
-
-struct vchiq_pagelist_info {
-	struct pagelist *pagelist;
-	size_t pagelist_buffer_size;
-	dma_addr_t dma_addr;
-	enum dma_data_direction dma_dir;
-	unsigned int num_pages;
-	unsigned int pages_need_release;
-	struct page **pages;
-	struct scatterlist *scatterlist;
-	unsigned int scatterlist_mapped;
-};
-
-struct vchiq_debugfs_log_entry {
-	const char *name;
-	void *plevel;
-};
-
-typedef void (*VCHIQ_CONNECTED_CALLBACK_T)();
-
-enum ec_status {
-	EC_RES_SUCCESS = 0,
-	EC_RES_INVALID_COMMAND = 1,
-	EC_RES_ERROR = 2,
-	EC_RES_INVALID_PARAM = 3,
-	EC_RES_ACCESS_DENIED = 4,
-	EC_RES_INVALID_RESPONSE = 5,
-	EC_RES_INVALID_VERSION = 6,
-	EC_RES_INVALID_CHECKSUM = 7,
-	EC_RES_IN_PROGRESS = 8,
-	EC_RES_UNAVAILABLE = 9,
-	EC_RES_TIMEOUT = 10,
-	EC_RES_OVERFLOW = 11,
-	EC_RES_INVALID_HEADER = 12,
-	EC_RES_REQUEST_TRUNCATED = 13,
-	EC_RES_RESPONSE_TOO_BIG = 14,
-	EC_RES_BUS_ERROR = 15,
-	EC_RES_BUSY = 16,
-	EC_RES_INVALID_HEADER_VERSION = 17,
-	EC_RES_INVALID_HEADER_CRC = 18,
-	EC_RES_INVALID_DATA_CRC = 19,
-	EC_RES_DUP_UNAVAILABLE = 20,
-};
-
-enum host_event_code {
-	EC_HOST_EVENT_LID_CLOSED = 1,
-	EC_HOST_EVENT_LID_OPEN = 2,
-	EC_HOST_EVENT_POWER_BUTTON = 3,
-	EC_HOST_EVENT_AC_CONNECTED = 4,
-	EC_HOST_EVENT_AC_DISCONNECTED = 5,
-	EC_HOST_EVENT_BATTERY_LOW = 6,
-	EC_HOST_EVENT_BATTERY_CRITICAL = 7,
-	EC_HOST_EVENT_BATTERY = 8,
-	EC_HOST_EVENT_THERMAL_THRESHOLD = 9,
-	EC_HOST_EVENT_DEVICE = 10,
-	EC_HOST_EVENT_THERMAL = 11,
-	EC_HOST_EVENT_USB_CHARGER = 12,
-	EC_HOST_EVENT_KEY_PRESSED = 13,
-	EC_HOST_EVENT_INTERFACE_READY = 14,
-	EC_HOST_EVENT_KEYBOARD_RECOVERY = 15,
-	EC_HOST_EVENT_THERMAL_SHUTDOWN = 16,
-	EC_HOST_EVENT_BATTERY_SHUTDOWN = 17,
-	EC_HOST_EVENT_THROTTLE_START = 18,
-	EC_HOST_EVENT_THROTTLE_STOP = 19,
-	EC_HOST_EVENT_HANG_DETECT = 20,
-	EC_HOST_EVENT_HANG_REBOOT = 21,
-	EC_HOST_EVENT_PD_MCU = 22,
-	EC_HOST_EVENT_BATTERY_STATUS = 23,
-	EC_HOST_EVENT_PANIC = 24,
-	EC_HOST_EVENT_KEYBOARD_FASTBOOT = 25,
-	EC_HOST_EVENT_RTC = 26,
-	EC_HOST_EVENT_MKBP = 27,
-	EC_HOST_EVENT_USB_MUX = 28,
-	EC_HOST_EVENT_MODE_CHANGE = 29,
-	EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT = 30,
-	EC_HOST_EVENT_WOV = 31,
-	EC_HOST_EVENT_INVALID = 32,
-};
-
-struct ec_host_request {
-	uint8_t struct_version;
-	uint8_t checksum;
-	uint16_t command;
-	uint8_t command_version;
-	uint8_t reserved;
-	uint16_t data_len;
-};
-
-struct ec_params_hello {
-	uint32_t in_data;
-};
-
-struct ec_response_hello {
-	uint32_t out_data;
-};
-
-struct ec_params_get_cmd_versions {
-	uint8_t cmd;
-};
-
-struct ec_response_get_cmd_versions {
-	uint32_t version_mask;
-};
-
-enum ec_comms_status {
-	EC_COMMS_STATUS_PROCESSING = 1,
-};
-
-struct ec_response_get_comms_status {
-	uint32_t flags;
-};
-
-struct ec_response_get_protocol_info {
-	uint32_t protocol_versions;
-	uint16_t max_request_packet_size;
-	uint16_t max_response_packet_size;
-	uint32_t flags;
-};
-
-enum ec_led_colors {
-	EC_LED_COLOR_RED = 0,
-	EC_LED_COLOR_GREEN = 1,
-	EC_LED_COLOR_BLUE = 2,
-	EC_LED_COLOR_YELLOW = 3,
-	EC_LED_COLOR_WHITE = 4,
-	EC_LED_COLOR_AMBER = 5,
-	EC_LED_COLOR_COUNT = 6,
-};
-
-enum motionsense_command {
-	MOTIONSENSE_CMD_DUMP = 0,
-	MOTIONSENSE_CMD_INFO = 1,
-	MOTIONSENSE_CMD_EC_RATE = 2,
-	MOTIONSENSE_CMD_SENSOR_ODR = 3,
-	MOTIONSENSE_CMD_SENSOR_RANGE = 4,
-	MOTIONSENSE_CMD_KB_WAKE_ANGLE = 5,
-	MOTIONSENSE_CMD_DATA = 6,
-	MOTIONSENSE_CMD_FIFO_INFO = 7,
-	MOTIONSENSE_CMD_FIFO_FLUSH = 8,
-	MOTIONSENSE_CMD_FIFO_READ = 9,
-	MOTIONSENSE_CMD_PERFORM_CALIB = 10,
-	MOTIONSENSE_CMD_SENSOR_OFFSET = 11,
-	MOTIONSENSE_CMD_LIST_ACTIVITIES = 12,
-	MOTIONSENSE_CMD_SET_ACTIVITY = 13,
-	MOTIONSENSE_CMD_LID_ANGLE = 14,
-	MOTIONSENSE_CMD_FIFO_INT_ENABLE = 15,
-	MOTIONSENSE_CMD_SPOOF = 16,
-	MOTIONSENSE_CMD_TABLET_MODE_LID_ANGLE = 17,
-	MOTIONSENSE_CMD_SENSOR_SCALE = 18,
-	MOTIONSENSE_NUM_CMDS = 19,
-};
-
-struct ec_response_motion_sensor_data {
-	uint8_t flags;
-	uint8_t sensor_num;
-	union {
-		int16_t data[3];
-		struct {
-			uint16_t reserved;
-			uint32_t timestamp;
-		} __attribute__((packed));
-		struct {
-			uint8_t activity;
-			uint8_t state;
-			int16_t add_info[2];
-		};
-	};
-} __attribute__((packed));
-
-struct ec_response_motion_sense_fifo_info {
-	uint16_t size;
-	uint16_t count;
-	uint32_t timestamp;
-	uint16_t total_lost;
-	uint16_t lost[0];
-} __attribute__((packed));
-
-struct ec_response_motion_sense_fifo_data {
-	uint32_t number_data;
-	struct ec_response_motion_sensor_data data[0];
-};
-
-struct ec_motion_sense_activity {
-	uint8_t sensor_num;
-	uint8_t activity;
-	uint8_t enable;
-	uint8_t reserved;
-	uint16_t parameters[3];
-};
-
-struct ec_params_motion_sense {
-	uint8_t cmd;
-	union {
-		struct {
-			uint8_t max_sensor_count;
-		} dump;
-		struct {
-			int16_t data;
-		} kb_wake_angle;
-		struct {
-			uint8_t sensor_num;
-		} info;
-		struct {
-			uint8_t sensor_num;
-		} info_3;
-		struct {
-			uint8_t sensor_num;
-		} data;
-		struct {
-			uint8_t sensor_num;
-		} fifo_flush;
-		struct {
-			uint8_t sensor_num;
-		} perform_calib;
-		struct {
-			uint8_t sensor_num;
-		} list_activities;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} ec_rate;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} sensor_odr;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} sensor_range;
-		struct {
-			uint8_t sensor_num;
-			uint16_t flags;
-			int16_t temp;
-			int16_t offset[3];
-		} __attribute__((packed)) sensor_offset;
-		struct {
-			uint8_t sensor_num;
-			uint16_t flags;
-			int16_t temp;
-			uint16_t scale[3];
-		} __attribute__((packed)) sensor_scale;
-		struct {
-			uint32_t max_data_vector;
-		} fifo_read;
-		struct ec_motion_sense_activity set_activity;
-		struct {
-			int8_t enable;
-		} fifo_int_enable;
-		struct {
-			uint8_t sensor_id;
-			uint8_t spoof_enable;
-			uint8_t reserved;
-			int16_t components[3];
-		} __attribute__((packed)) spoof;
-		struct {
-			int16_t lid_angle;
-			int16_t hys_degree;
-		} tablet_mode_threshold;
-	};
-} __attribute__((packed));
-
-struct ec_response_motion_sense {
-	union {
-		struct {
-			uint8_t module_flags;
-			uint8_t sensor_count;
-			struct ec_response_motion_sensor_data sensor[0];
-		} __attribute__((packed)) dump;
-		struct {
-			uint8_t type;
-			uint8_t location;
-			uint8_t chip;
-		} info;
-		struct {
-			uint8_t type;
-			uint8_t location;
-			uint8_t chip;
-			uint32_t min_frequency;
-			uint32_t max_frequency;
-			uint32_t fifo_max_event_count;
-		} info_3;
-		struct ec_response_motion_sensor_data data;
-		struct {
-			int32_t ret;
-		} ec_rate;
-		struct {
-			int32_t ret;
-		} sensor_odr;
-		struct {
-			int32_t ret;
-		} sensor_range;
-		struct {
-			int32_t ret;
-		} kb_wake_angle;
-		struct {
-			int32_t ret;
-		} fifo_int_enable;
-		struct {
-			int32_t ret;
-		} spoof;
-		struct {
-			int16_t temp;
-			int16_t offset[3];
-		} sensor_offset;
-		struct {
-			int16_t temp;
-			int16_t offset[3];
-		} perform_calib;
-		struct {
-			int16_t temp;
-			uint16_t scale[3];
-		} sensor_scale;
-		struct ec_response_motion_sense_fifo_info fifo_info;
-		struct ec_response_motion_sense_fifo_info fifo_flush;
-		struct ec_response_motion_sense_fifo_data fifo_read;
-		struct {
-			uint16_t reserved;
-			uint32_t enabled;
-			uint32_t disabled;
-		} __attribute__((packed)) list_activities;
-		struct {
-			uint16_t value;
-		} lid_angle;
-		struct {
-			uint16_t lid_angle;
-			uint16_t hys_degree;
-		} tablet_mode_threshold;
-	};
-};
-
-enum ec_temp_thresholds {
-	EC_TEMP_THRESH_WARN = 0,
-	EC_TEMP_THRESH_HIGH = 1,
-	EC_TEMP_THRESH_HALT = 2,
-	EC_TEMP_THRESH_COUNT = 3,
-};
-
-enum ec_mkbp_event {
-	EC_MKBP_EVENT_KEY_MATRIX = 0,
-	EC_MKBP_EVENT_HOST_EVENT = 1,
-	EC_MKBP_EVENT_SENSOR_FIFO = 2,
-	EC_MKBP_EVENT_BUTTON = 3,
-	EC_MKBP_EVENT_SWITCH = 4,
-	EC_MKBP_EVENT_FINGERPRINT = 5,
-	EC_MKBP_EVENT_SYSRQ = 6,
-	EC_MKBP_EVENT_HOST_EVENT64 = 7,
-	EC_MKBP_EVENT_CEC_EVENT = 8,
-	EC_MKBP_EVENT_CEC_MESSAGE = 9,
-	EC_MKBP_EVENT_COUNT = 10,
-};
-
-union ec_response_get_next_data_v1 {
-	uint8_t key_matrix[16];
-	uint32_t host_event;
-	uint64_t host_event64;
-	struct {
-		uint8_t reserved[3];
-		struct ec_response_motion_sense_fifo_info info;
-	} __attribute__((packed)) sensor_fifo;
-	uint32_t buttons;
-	uint32_t switches;
-	uint32_t fp_events;
-	uint32_t sysrq;
-	uint32_t cec_events;
-	uint8_t cec_message[16];
-};
-
-struct ec_response_get_next_event_v1 {
-	uint8_t event_type;
-	union ec_response_get_next_data_v1 data;
-} __attribute__((packed));
-
-struct ec_response_host_event_mask {
-	uint32_t mask;
-};
-
-enum {
-	EC_MSG_TX_HEADER_BYTES = 3,
-	EC_MSG_TX_TRAILER_BYTES = 1,
-	EC_MSG_TX_PROTO_BYTES = 4,
-	EC_MSG_RX_PROTO_BYTES = 3,
-	EC_PROTO2_MSG_BYTES = 256,
-	EC_MAX_MSG_BYTES = 65536,
-};
-
-struct cros_ec_command {
-	uint32_t version;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	uint32_t result;
-	uint8_t data[0];
-};
-
-struct platform_device___2;
-
-struct cros_ec_device {
-	const char *phys_name;
-	struct device *dev;
-	bool was_wake_device;
-	struct class *cros_class;
-	int (*cmd_readmem)(struct cros_ec_device *, unsigned int, unsigned int, void *);
-	u16 max_request;
-	u16 max_response;
-	u16 max_passthru;
-	u16 proto_version;
-	void *priv;
-	int irq;
-	u8 *din;
-	u8 *dout;
-	int din_size;
-	int dout_size;
-	bool wake_enabled;
-	bool suspended;
-	int (*cmd_xfer)(struct cros_ec_device *, struct cros_ec_command *);
-	int (*pkt_xfer)(struct cros_ec_device *, struct cros_ec_command *);
-	struct mutex lock;
-	u8 mkbp_event_supported;
-	bool host_sleep_v1;
-	struct blocking_notifier_head event_notifier;
-	struct ec_response_get_next_event_v1 event_data;
-	int event_size;
-	u32 host_event_wake_mask;
-	u32 last_resume_result;
-	ktime_t last_event_time;
-	struct notifier_block notifier_ready;
-	struct platform_device___2 *ec;
-	struct platform_device___2 *pd;
-};
-
-struct cros_ec_debugfs;
-
-struct cros_ec_dev {
-	struct device class_dev;
-	struct cros_ec_device *ec_dev;
-	struct device *dev;
-	struct cros_ec_debugfs *debug_info;
-	bool has_kb_wake_angle;
-	u16 cmd_offset;
-	u32 features[2];
-};
-
-struct trace_event_raw_cros_ec_request_start {
-	struct trace_entry ent;
-	uint32_t version;
-	uint32_t offset;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	char __data[0];
-};
-
-struct trace_event_raw_cros_ec_request_done {
-	struct trace_entry ent;
-	uint32_t version;
-	uint32_t offset;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	uint32_t result;
-	int retval;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cros_ec_request_start {};
-
-struct trace_event_data_offsets_cros_ec_request_done {};
-
-typedef void (*btf_trace_cros_ec_request_start)(void *, struct cros_ec_command *);
-
-typedef void (*btf_trace_cros_ec_request_done)(void *, struct cros_ec_command *, int);
-
-struct platform_mhu_link {
-	int irq;
-	void *tx_reg;
-	void *rx_reg;
-};
-
-struct platform_mhu {
-	void *base;
-	struct platform_mhu_link mlink[3];
-	struct mbox_chan chan[3];
-	struct mbox_controller mbox;
-};
-
-struct acpi_table_pcct {
-	struct acpi_table_header header;
-	u32 flags;
-	u64 reserved;
-};
-
-enum acpi_pcct_type {
-	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
-	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
-	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
-	ACPI_PCCT_TYPE_RESERVED = 5,
-};
-
-struct acpi_pcct_subspace {
-	struct acpi_subtable_header header;
-	u8 reserved[6];
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_hw_reduced_type2 {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-	struct acpi_generic_address platform_ack_register;
-	u64 ack_preserve_mask;
-	u64 ack_write_mask;
-} __attribute__((packed));
-
 struct bcm2835_mbox {
 	void *regs;
 	spinlock_t lock;
 	struct mbox_controller controller;
 };
 
-struct slimpro_mbox_chan {
-	struct device *dev;
-	struct mbox_chan *chan;
-	void *reg;
-	int irq;
-	u32 rx_msg[3];
-};
-
-struct slimpro_mbox {
-	struct mbox_controller mb_ctrl;
-	struct slimpro_mbox_chan mc[8];
-	struct mbox_chan chans[8];
-};
-
-struct hi3660_chan_info {
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-};
-
-struct hi3660_mbox {
-	struct device *dev;
-	void *base;
-	struct mbox_chan chan[32];
-	struct hi3660_chan_info mchan[32];
-	struct mbox_controller controller;
-};
-
-struct hi6220_mbox;
-
-struct hi6220_mbox_chan {
-	unsigned int dir;
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-	unsigned int slot;
-	struct hi6220_mbox *parent;
-};
-
-struct hi6220_mbox {
-	struct device *dev;
-	int irq;
-	bool tx_irq_mode;
-	void *ipc;
-	void *base;
-	unsigned int chan_num;
-	struct hi6220_mbox_chan *mchan;
-	void *irq_map_chan[32];
-	struct mbox_chan *chan;
-	struct mbox_controller controller;
-};
-
 struct tegra_hsp;
 
 struct tegra_hsp_channel {
@@ -94970,6 +101157,7 @@
 	unsigned int num_db;
 	unsigned int num_si;
 	spinlock_t lock;
+	struct lock_class_key lock_key;
 	struct list_head doorbells;
 	struct tegra_hsp_mailbox *mailboxes;
 	long unsigned int mask;
@@ -94983,8 +101171,14 @@
 	unsigned int index;
 };
 
+struct tegra_hsp_sm_ops {
+	void (*send)(struct tegra_hsp_channel *, void *);
+	void (*recv)(struct tegra_hsp_channel *);
+};
+
 struct tegra_hsp_mailbox {
 	struct tegra_hsp_channel channel;
+	const struct tegra_hsp_sm_ops *ops;
 	unsigned int index;
 	bool producer;
 };
@@ -94998,115 +101192,96 @@
 struct tegra_hsp_soc {
 	const struct tegra_hsp_db_map *map;
 	bool has_per_mb_ie;
+	bool has_128_bit_mb;
 };
 
-struct sun6i_msgbox {
-	struct mbox_controller controller;
-	struct clk *clk;
-	spinlock_t lock;
-	void *regs;
+struct fw_rsc_hdr {
+	u32 type;
+	u8 data[0];
 };
 
-struct hwspinlock___2;
-
-struct hwspinlock_ops {
-	int (*trylock)(struct hwspinlock___2 *);
-	void (*unlock)(struct hwspinlock___2 *);
-	void (*relax)(struct hwspinlock___2 *);
+enum fw_resource_type {
+	RSC_CARVEOUT = 0,
+	RSC_DEVMEM = 1,
+	RSC_TRACE = 2,
+	RSC_VDEV = 3,
+	RSC_LAST = 4,
+	RSC_VENDOR_START = 128,
+	RSC_VENDOR_END = 512,
 };
 
-struct hwspinlock_device;
+struct fw_rsc_carveout {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
 
-struct hwspinlock___2 {
-	struct hwspinlock_device *bank;
-	spinlock_t lock;
+struct fw_rsc_devmem {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_trace {
+	u32 da;
+	u32 len;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_vdev_vring {
+	u32 da;
+	u32 align;
+	u32 num;
+	u32 notifyid;
+	u32 pa;
+};
+
+struct fw_rsc_vdev {
+	u32 id;
+	u32 notifyid;
+	u32 dfeatures;
+	u32 gfeatures;
+	u32 config_len;
+	u8 status;
+	u8 num_of_vrings;
+	u8 reserved[2];
+	struct fw_rsc_vdev_vring vring[0];
+};
+
+struct rproc_mem_entry {
+	void *va;
+	bool is_iomem;
+	dma_addr_t dma;
+	size_t len;
+	u32 da;
 	void *priv;
-};
-
-struct hwspinlock_device {
-	struct device *dev;
-	const struct hwspinlock_ops *ops;
-	int base_id;
-	int num_locks;
-	struct hwspinlock___2 lock[0];
-};
-
-struct regmap_field___2;
-
-struct devfreq_freqs {
-	long unsigned int old;
-	long unsigned int new;
-};
-
-struct devfreq_passive_data {
-	struct devfreq *parent;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	struct devfreq *this;
-	struct notifier_block nb;
-};
-
-struct trace_event_raw_devfreq_monitor {
-	struct trace_entry ent;
-	long unsigned int freq;
-	long unsigned int busy_time;
-	long unsigned int total_time;
-	unsigned int polling_ms;
-	u32 __data_loc_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devfreq_monitor {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
-
-struct devfreq_notifier_devres {
-	struct devfreq *devfreq;
-	struct notifier_block *nb;
-	unsigned int list;
-};
-
-struct devfreq_event_desc;
-
-struct devfreq_event_dev {
+	char name[32];
 	struct list_head node;
-	struct device dev;
-	struct mutex lock;
-	u32 enable_count;
-	const struct devfreq_event_desc *desc;
+	u32 rsc_offset;
+	u32 flags;
+	u32 of_resm_idx;
+	int (*alloc)(struct rproc *, struct rproc_mem_entry *);
+	int (*release)(struct rproc *, struct rproc_mem_entry *);
 };
 
-struct devfreq_event_ops;
-
-struct devfreq_event_desc {
-	const char *name;
-	u32 event_type;
-	void *driver_data;
-	const struct devfreq_event_ops *ops;
+enum rproc_crash_type {
+	RPROC_MMUFAULT = 0,
+	RPROC_WATCHDOG = 1,
+	RPROC_FATAL_ERROR = 2,
 };
 
-struct devfreq_event_data {
-	long unsigned int load_count;
-	long unsigned int total_count;
-};
-
-struct devfreq_event_ops {
-	int (*enable)(struct devfreq_event_dev *);
-	int (*disable)(struct devfreq_event_dev *);
-	int (*reset)(struct devfreq_event_dev *);
-	int (*set_event)(struct devfreq_event_dev *);
-	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
-};
-
-struct devfreq_simple_ondemand_data {
-	unsigned int upthreshold;
-	unsigned int downdifferential;
-};
-
-struct userspace_data {
-	long unsigned int user_frequency;
-	bool valid;
+struct rproc_debug_trace {
+	struct rproc *rproc;
+	struct dentry *tfile;
+	struct list_head node;
+	struct rproc_mem_entry trace_mem;
 };
 
 union extcon_property_value {
@@ -95115,7 +101290,7 @@
 
 struct extcon_cable;
 
-struct extcon_dev___2 {
+struct extcon_dev {
 	const char *name;
 	const unsigned int *supported_cable;
 	const u32 *mutually_exclusive;
@@ -95134,7 +101309,7 @@
 };
 
 struct extcon_cable {
-	struct extcon_dev___2 *edev;
+	struct extcon_dev *edev;
 	int cable_index;
 	struct attribute_group attr_g;
 	struct device_attribute attr_name;
@@ -95156,341 +101331,10234 @@
 	const char *name;
 };
 
-struct extcon_dev_notifier_devres {
-	struct extcon_dev___2 *edev;
-	unsigned int id;
-	struct notifier_block *nb;
+struct dtpm_devfreq {
+	struct dtpm dtpm;
+	struct dev_pm_qos_request qos_req;
+	struct devfreq *devfreq;
 };
 
-struct mtk_smi_larb_iommu {
+struct l3cache_pmu {
+	struct pmu pmu;
+	struct hlist_node node;
+	void *regs;
+	struct perf_event *events[8];
+	long unsigned int used_mask[1];
+	cpumask_t cpumask;
+};
+
+struct l3cache_event_ops {
+	void (*start)(struct perf_event *);
+	void (*stop)(struct perf_event *, int);
+	void (*update)(struct perf_event *);
+};
+
+enum icl_lc_mailbox_cmd {
+	ICL_LC_GO2SX = 2,
+	ICL_LC_GO2SX_NO_WAKE = 3,
+	ICL_LC_PREPARE_FOR_RESET = 33,
+};
+
+struct tb_dma_port {
+	struct tb_switch *sw;
+	u8 port;
+	u32 base;
+	u8 *buf;
+};
+
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
+};
+
+typedef __u64 binder_size_t;
+
+struct binder_transaction;
+
+struct binder_buffer {
+	struct list_head entry;
+	struct rb_node rb_node;
+	unsigned int free: 1;
+	unsigned int clear_on_free: 1;
+	unsigned int allow_user_free: 1;
+	unsigned int async_transaction: 1;
+	unsigned int oneway_spam_suspect: 1;
+	unsigned int debug_id: 27;
+	struct binder_transaction *transaction;
+	struct binder_node *target_node;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	void *user_data;
+	int pid;
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR = 1,
+	BINDER_DEBUG_OPEN_CLOSE = 2,
+	BINDER_DEBUG_BUFFER_ALLOC = 4,
+	BINDER_DEBUG_BUFFER_ALLOC_ASYNC = 8,
+};
+
+struct bcm_voter {
 	struct device *dev;
-	unsigned int mmu;
+	struct device_node *np;
+	struct mutex lock;
+	struct list_head commit_list;
+	struct list_head ws_list;
+	struct list_head voter_node;
+	u32 tcs_wait;
 };
 
-enum mtk_smi_gen {
-	MTK_SMI_GEN1 = 0,
-	MTK_SMI_GEN2 = 1,
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
 };
 
-struct mtk_smi_common_plat {
-	enum mtk_smi_gen gen;
-	bool has_gals;
-	u32 bus_sel;
+struct linger {
+	int l_onoff;
+	int l_linger;
 };
 
-struct mtk_smi_larb_gen {
-	int port_in_larb[17];
-	void (*config_port)(struct device *);
-	unsigned int larb_direct_to_common_mask;
-	bool has_gals;
+struct so_timestamping {
+	int flags;
+	int bind_phc;
 };
 
-struct mtk_smi {
-	struct device *dev;
-	struct clk *clk_apb;
-	struct clk *clk_smi;
-	struct clk *clk_gals0;
-	struct clk *clk_gals1;
-	struct clk *clk_async;
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+struct cgroup_cls_state {
+	struct cgroup_subsys_state css;
+	u32 classid;
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
+};
+
+struct sock_fprog {
+	short unsigned int len;
+	struct sock_filter *filter;
+};
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
 	union {
-		void *smi_ao_base;
-		void *base;
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+	} u;
+};
+
+struct tso_t {
+	int next_frag_idx;
+	int size;
+	void *data;
+	u16 ip_id;
+	u8 tlen;
+	bool ipv6;
+	u32 tcp_seq;
+};
+
+struct tc_skb_ext {
+	__u32 chain;
+	__u16 mru;
+	__u16 zone;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+struct gro_cell {
+	struct sk_buff_head napi_skbs;
+	struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long int tv_nsec;
+};
+
+struct user_msghdr {
+	void *msg_name;
+	int msg_namelen;
+	struct iovec *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+struct mmsghdr {
+	struct user_msghdr msg_hdr;
+	unsigned int msg_len;
+};
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct compat_mmsghdr {
+	struct compat_msghdr msg_hdr;
+	compat_uint_t msg_len;
+};
+
+struct compat_cmsghdr {
+	compat_size_t cmsg_len;
+	compat_int_t cmsg_level;
+	compat_int_t cmsg_type;
+};
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_WAKE = 19,
+	FLOW_ACTION_QUEUE = 20,
+	FLOW_ACTION_SAMPLE = 21,
+	FLOW_ACTION_POLICE = 22,
+	FLOW_ACTION_CT = 23,
+	FLOW_ACTION_CT_METADATA = 24,
+	FLOW_ACTION_MPLS_PUSH = 25,
+	FLOW_ACTION_MPLS_POP = 26,
+	FLOW_ACTION_MPLS_MANGLE = 27,
+	FLOW_ACTION_GATE = 28,
+	FLOW_ACTION_PPPOE_PUSH = 29,
+	FLOW_ACTION_JUMP = 30,
+	FLOW_ACTION_PIPE = 31,
+	FLOW_ACTION_VLAN_PUSH_ETH = 32,
+	FLOW_ACTION_VLAN_POP_ETH = 33,
+	FLOW_ACTION_CONTINUE = 34,
+	NUM_FLOW_ACTIONS = 35,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+typedef void (*action_destr)(void *);
+
+struct psample_group {
+	struct list_head list;
+	struct net *net;
+	u32 group_num;
+	u32 refcount;
+	u32 seq;
+	struct callback_head rcu;
+};
+
+struct nf_flowtable;
+
+struct action_gate_entry {
+	u8 gate_state;
+	u32 interval;
+	s32 ipv;
+	s32 maxoctets;
+};
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			long unsigned int cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
 	};
-	const struct mtk_smi_common_plat *plat;
+	struct flow_action_cookie *cookie;
 };
 
-struct mtk_smi_larb {
-	struct mtk_smi smi;
-	void *base;
-	struct device *smi_common_dev;
-	const struct mtk_smi_larb_gen *larb_gen;
-	int larbid;
-	u32 *mmu;
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
 };
 
-struct tegra186_mc_client {
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+enum qdisc_class_ops_flags {
+	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
+};
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_action_ops;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_basic_sync *cpu_bstats_hw;
+	struct gnet_stats_queue *cpu_qstats;
+	struct tc_cookie *act_cookie;
+	struct tcf_chain *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+struct tcf_block_ext_info {
+	enum flow_block_binder_type binder_type;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+	u32 block_index;
+};
+
+struct tcf_qevent {
+	struct tcf_block *block;
+	struct tcf_block_ext_info info;
+	struct tcf_proto *filter_chain;
+};
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	int action;
+	int police;
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	u32 tcfp_off_max_hint;
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	long: 64;
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_ECACHE = 4,
+	NF_CT_EXT_TSTAMP = 5,
+	NF_CT_EXT_LABELS = 6,
+	NF_CT_EXT_SYNPROXY = 7,
+	NF_CT_EXT_ACT_CT = 8,
+	NF_CT_EXT_NUM = 9,
+};
+
+struct tcf_filter_chain_list_item {
+	struct list_head list;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+};
+
+struct tcf_net {
+	spinlock_t idr_lock;
+	struct idr idr;
+};
+
+struct tcf_block_owner_item {
+	struct list_head list;
+	struct Qdisc *q;
+	enum flow_block_binder_type binder_type;
+};
+
+struct tcf_chain_info {
+	struct tcf_proto **pprev;
+	struct tcf_proto *next;
+};
+
+struct tcf_dump_args {
+	struct tcf_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct tcf_block *block;
+	struct Qdisc *q;
+	u32 parent;
+	bool terse_dump;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+struct linkinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+};
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+struct ip_sf_list;
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	long unsigned int sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list *next_rcu;
+	};
+	struct ip_mc_list *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	long unsigned int sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+struct ip_rt_acct {
+	__u32 o_bytes;
+	__u32 o_packets;
+	__u32 i_bytes;
+	__u32 i_packets;
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+struct udp_tunnel_info {
+	short unsigned int type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct unix_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 udiag_states;
+	__u32 udiag_ino;
+	__u32 udiag_show;
+	__u32 udiag_cookie[2];
+};
+
+struct unix_diag_msg {
+	__u8 udiag_family;
+	__u8 udiag_type;
+	__u8 udiag_state;
+	__u8 pad;
+	__u32 udiag_ino;
+	__u32 udiag_cookie[2];
+};
+
+enum {
+	UNIX_DIAG_NAME = 0,
+	UNIX_DIAG_VFS = 1,
+	UNIX_DIAG_PEER = 2,
+	UNIX_DIAG_ICONS = 3,
+	UNIX_DIAG_RQLEN = 4,
+	UNIX_DIAG_MEMINFO = 5,
+	UNIX_DIAG_SHUTDOWN = 6,
+	UNIX_DIAG_UID = 7,
+	__UNIX_DIAG_MAX = 8,
+};
+
+struct unix_diag_vfs {
+	__u32 udiag_vfs_ino;
+	__u32 udiag_vfs_dev;
+};
+
+struct unix_diag_rqlen {
+	__u32 udiag_rqueue;
+	__u32 udiag_wqueue;
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	atomic_long_t inflight;
+	spinlock_t lock;
+	long unsigned int gc_flags;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	long unsigned int rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+struct rt6_exception {
+	struct hlist_node hlist;
+	struct rt6_info *rt6i;
+	long unsigned int stamp;
+	struct callback_head rcu;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+struct route_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved_l: 3;
+	__u8 route_pref: 2;
+	__u8 reserved_h: 3;
+	__be32 lifetime;
+	__u8 prefix[0];
+};
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct netevent_redirect {
+	struct dst_entry *old;
+	struct dst_entry *new;
+	struct neighbour *neigh;
+	const void *daddr;
+};
+
+struct trace_event_raw_fib6_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[16];
+	__u8 dst[16];
+	u16 sport;
+	u16 dport;
+	u8 proto;
+	u8 rt_type;
+	char name[16];
+	__u8 gw[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib6_table_lookup {};
+
+typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
+
+enum rt6_nud_state {
+	RT6_NUD_FAIL_HARD = 4294967293,
+	RT6_NUD_FAIL_PROBE = 4294967294,
+	RT6_NUD_FAIL_DO_RR = 4294967295,
+	RT6_NUD_SUCCEED = 1,
+};
+
+struct fib6_nh_dm_arg {
+	struct net *net;
+	const struct in6_addr *saddr;
+	int oif;
+	int flags;
+	struct fib6_nh *nh;
+};
+
+struct __rt6_probe_work {
+	struct work_struct work;
+	struct in6_addr target;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+};
+
+struct fib6_nh_frl_arg {
+	u32 flags;
+	int oif;
+	int strict;
+	int *mpri;
+	bool *do_rr;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_excptn_arg {
+	struct rt6_info *rt;
+	int plen;
+};
+
+struct fib6_nh_match_arg {
+	const struct net_device *dev;
+	const struct in6_addr *gw;
+	struct fib6_nh *match;
+};
+
+struct fib6_nh_age_excptn_arg {
+	struct fib6_gc_args *gc_args;
+	long unsigned int now;
+};
+
+struct fib6_nh_rd_arg {
+	struct fib6_result *res;
+	struct flowi6 *fl6;
+	const struct in6_addr *gw;
+	struct rt6_info **ret;
+};
+
+struct ip6rd_flowi {
+	struct flowi6 fl6;
+	struct in6_addr gateway;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+	struct fib6_config *cfg;
+	struct fib6_info *f6i;
+};
+
+struct arg_dev_net_ip {
+	struct net_device *dev;
+	struct net *net;
+	struct in6_addr *addr;
+};
+
+struct arg_netdev_event {
+	const struct net_device *dev;
+	union {
+		unsigned char nh_flags;
+		long unsigned int event;
+	};
+};
+
+struct rt6_mtu_change_arg {
+	struct net_device *dev;
+	unsigned int mtu;
+	struct fib6_info *f6i;
+};
+
+struct rt6_nh {
+	struct fib6_info *fib6_info;
+	struct fib6_config r_cfg;
+	struct list_head next;
+};
+
+struct fib6_nh_exception_dump_walker {
+	struct rt6_rtnl_dump_arg *dump;
+	struct fib6_info *rt;
+	unsigned int flags;
+	unsigned int skip;
+	unsigned int count;
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr *tun_src;
+	struct rhashtable hmac_infos;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
+struct rt0_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr[0];
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct in6_addr addr[0];
+		__u8 data[0];
+	} segments;
+};
+
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
+struct fib6_rule {
+	struct fib_rule common;
+	struct rt6key src;
+	struct rt6key dst;
+	dscp_t dscp;
+};
+
+enum {
+	RPL_IPTUNNEL_UNSPEC = 0,
+	RPL_IPTUNNEL_SRH = 1,
+	__RPL_IPTUNNEL_MAX = 2,
+};
+
+struct rpl_iptunnel_encap {
+	struct ipv6_rpl_sr_hdr srh[0];
+};
+
+struct rpl_lwt {
+	struct dst_cache cache;
+	struct rpl_iptunnel_encap tuninfo;
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct iw_thrspy {
+	struct sockaddr addr;
+	struct iw_quality qual;
+	struct iw_quality low;
+	struct iw_quality high;
+};
+
+struct netlbl_calipso_ops {
+	int (*doi_add)(struct calipso_doi *, struct netlbl_audit *);
+	void (*doi_free)(struct calipso_doi *);
+	int (*doi_remove)(u32, struct netlbl_audit *);
+	struct calipso_doi * (*doi_getdef)(u32);
+	void (*doi_putdef)(struct calipso_doi *);
+	int (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);
+	int (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);
+	int (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
+	void (*sock_delattr)(struct sock *);
+	int (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
+	void (*req_delattr)(struct request_sock *);
+	int (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);
+	unsigned char * (*skbuff_optptr)(const struct sk_buff *);
+	int (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
+	int (*skbuff_delattr)(struct sk_buff *);
+	void (*cache_invalidate)();
+	int (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);
+};
+
+enum {
+	NLBL_CALIPSO_C_UNSPEC = 0,
+	NLBL_CALIPSO_C_ADD = 1,
+	NLBL_CALIPSO_C_REMOVE = 2,
+	NLBL_CALIPSO_C_LIST = 3,
+	NLBL_CALIPSO_C_LISTALL = 4,
+	__NLBL_CALIPSO_C_MAX = 5,
+};
+
+enum {
+	NLBL_CALIPSO_A_UNSPEC = 0,
+	NLBL_CALIPSO_A_DOI = 1,
+	NLBL_CALIPSO_A_MTYPE = 2,
+	__NLBL_CALIPSO_A_MAX = 3,
+};
+
+struct netlbl_calipso_doiwalk_arg {
+	struct netlink_callback *nl_cb;
+	struct sk_buff *skb;
+	u32 seq;
+};
+
+enum {
+	ncsi_dev_state_registered = 0,
+	ncsi_dev_state_functional = 256,
+	ncsi_dev_state_probe = 512,
+	ncsi_dev_state_config = 768,
+	ncsi_dev_state_suspend = 1024,
+};
+
+enum {
+	MLX_MC_RBT_SUPPORT = 1,
+	MLX_MC_RBT_AVL = 8,
+};
+
+enum {
+	ncsi_dev_state_major = 65280,
+	ncsi_dev_state_minor = 255,
+	ncsi_dev_state_probe_deselect = 513,
+	ncsi_dev_state_probe_package = 514,
+	ncsi_dev_state_probe_channel = 515,
+	ncsi_dev_state_probe_mlx_gma = 516,
+	ncsi_dev_state_probe_mlx_smaf = 517,
+	ncsi_dev_state_probe_cis = 518,
+	ncsi_dev_state_probe_keep_phy = 519,
+	ncsi_dev_state_probe_gvi = 520,
+	ncsi_dev_state_probe_gc = 521,
+	ncsi_dev_state_probe_gls = 522,
+	ncsi_dev_state_probe_dp = 523,
+	ncsi_dev_state_config_sp = 769,
+	ncsi_dev_state_config_cis = 770,
+	ncsi_dev_state_config_oem_gma = 771,
+	ncsi_dev_state_config_clear_vids = 772,
+	ncsi_dev_state_config_svf = 773,
+	ncsi_dev_state_config_ev = 774,
+	ncsi_dev_state_config_sma = 775,
+	ncsi_dev_state_config_ebf = 776,
+	ncsi_dev_state_config_dgmf = 777,
+	ncsi_dev_state_config_ecnt = 778,
+	ncsi_dev_state_config_ec = 779,
+	ncsi_dev_state_config_ae = 780,
+	ncsi_dev_state_config_gls = 781,
+	ncsi_dev_state_config_done = 782,
+	ncsi_dev_state_suspend_select = 1025,
+	ncsi_dev_state_suspend_gls = 1026,
+	ncsi_dev_state_suspend_dcnt = 1027,
+	ncsi_dev_state_suspend_dc = 1028,
+	ncsi_dev_state_suspend_deselect = 1029,
+	ncsi_dev_state_suspend_done = 1030,
+};
+
+struct vlan_vid {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+};
+
+struct ncsi_cmd_arg {
+	struct ncsi_dev_priv *ndp;
+	unsigned char type;
+	unsigned char id;
+	unsigned char package;
+	unsigned char channel;
+	short unsigned int payload;
+	unsigned int req_flags;
+	union {
+		unsigned char bytes[16];
+		short unsigned int words[8];
+		unsigned int dwords[4];
+	};
+	unsigned char *data;
+	struct genl_info *info;
+};
+
+struct ncsi_cmd_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 checksum;
+	unsigned char pad[26];
+};
+
+struct ncsi_oem_gma_handler {
+	unsigned int mfr_id;
+	int (*handler)(struct ncsi_cmd_arg *);
+};
+
+struct token_bucket {
+	spinlock_t lock;
+	int chain_len;
+	struct hlist_nulls_head req_chain;
+	struct hlist_nulls_head msk_chain;
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+};
+
+struct mptcp_info {
+	__u8 mptcpi_subflows;
+	__u8 mptcpi_add_addr_signal;
+	__u8 mptcpi_add_addr_accepted;
+	__u8 mptcpi_subflows_max;
+	__u8 mptcpi_add_addr_signal_max;
+	__u8 mptcpi_add_addr_accepted_max;
+	__u32 mptcpi_flags;
+	__u32 mptcpi_token;
+	__u64 mptcpi_write_seq;
+	__u64 mptcpi_snd_una;
+	__u64 mptcpi_rcv_nxt;
+	__u8 mptcpi_local_addr_used;
+	__u8 mptcpi_local_addr_max;
+	__u8 mptcpi_csum_enabled;
+};
+
+struct mptcp_subflow_data {
+	__u32 size_subflow_data;
+	__u32 num_subflows;
+	__u32 size_kernel;
+	__u32 size_user;
+};
+
+struct mptcp_subflow_addrs {
+	union {
+		__kernel_sa_family_t sa_family;
+		struct sockaddr sa_local;
+		struct sockaddr_in sin_local;
+		struct sockaddr_in6 sin6_local;
+		struct __kernel_sockaddr_storage ss_local;
+	};
+	union {
+		struct sockaddr sa_remote;
+		struct sockaddr_in sin_remote;
+		struct sockaddr_in6 sin6_remote;
+		struct __kernel_sockaddr_storage ss_remote;
+	};
+};
+
+struct efi_boot_memmap {
+	efi_memory_desc_t **map;
+	long unsigned int *map_size;
+	long unsigned int *desc_size;
+	u32 *desc_ver;
+	long unsigned int *key_ptr;
+	long unsigned int *buff_size;
+};
+
+typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+
+struct exit_boot_struct {
+	efi_memory_desc_t *runtime_map;
+	int *runtime_entry_count;
+	void *new_fdt_addr;
+};
+
+enum {
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_RAM0 = 1048576,
+	Root_RAM1 = 1048577,
+	Root_FD0 = 2097152,
+	Root_HDA1 = 3145729,
+	Root_HDA2 = 3145730,
+	Root_SDA1 = 8388609,
+	Root_SDA2 = 8388610,
+	Root_HDC1 = 23068673,
+	Root_SR0 = 11534336,
+};
+
+enum rpc_display_format_t {
+	RPC_DISPLAY_ADDR = 0,
+	RPC_DISPLAY_PORT = 1,
+	RPC_DISPLAY_PROTO = 2,
+	RPC_DISPLAY_HEX_ADDR = 3,
+	RPC_DISPLAY_HEX_PORT = 4,
+	RPC_DISPLAY_NETID = 5,
+	RPC_DISPLAY_MAX = 6,
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+enum aarch64_reloc_op {
+	RELOC_OP_NONE = 0,
+	RELOC_OP_ABS = 1,
+	RELOC_OP_PREL = 2,
+	RELOC_OP_PAGE = 3,
+};
+
+enum aarch64_insn_movw_imm_type {
+	AARCH64_INSN_IMM_MOVNZ = 0,
+	AARCH64_INSN_IMM_MOVKZ = 1,
+};
+
+enum hw_breakpoint_ops {
+	HW_BREAKPOINT_INSTALL = 0,
+	HW_BREAKPOINT_UNINSTALL = 1,
+	HW_BREAKPOINT_RESTORE = 2,
+};
+
+struct pvclock_vcpu_stolen_time {
+	__le32 revision;
+	__le32 attributes;
+	__le64 stolen_time;
+	u8 padding[48];
+};
+
+struct pv_time_stolen_time_region {
+	struct pvclock_vcpu_stolen_time *kaddr;
+};
+
+struct pbe {
+	void *address;
+	void *orig_address;
+	struct pbe *next;
+};
+
+struct cpu_suspend_ctx {
+	u64 ctx_regs[13];
+	u64 sp;
+};
+
+struct sleep_stack_data {
+	struct cpu_suspend_ctx system_regs;
+	long unsigned int callee_saved_regs[12];
+};
+
+struct trans_pgd_info {
+	void * (*trans_alloc_page)(void *);
+	void *trans_alloc_arg;
+};
+
+struct arch_hibernate_hdr_invariants {
+	char uts_version[65];
+};
+
+struct arch_hibernate_hdr {
+	struct arch_hibernate_hdr_invariants invariants;
+	phys_addr_t ttbr1_el1;
+	void (*reenter_kernel)();
+	phys_addr_t __hyp_stub_vectors;
+	u64 sleep_cpu_mpidr;
+};
+
+struct ptdump_range {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct ptdump_state {
+	void (*note_page)(struct ptdump_state *, long unsigned int, int, u64);
+	void (*effective_prot)(struct ptdump_state *, int, u64);
+	const struct ptdump_range *range;
+};
+
+struct addr_marker {
+	long unsigned int start_address;
+	char *name;
+};
+
+struct ptdump_info {
+	struct mm_struct *mm;
+	const struct addr_marker *markers;
+	long unsigned int base_addr;
+};
+
+enum address_markers_idx {
+	PAGE_OFFSET_NR = 0,
+	PAGE_END_NR = 1,
+};
+
+struct pg_state {
+	struct ptdump_state ptdump;
+	struct seq_file *seq;
+	const struct addr_marker *marker;
+	long unsigned int start_address;
+	int level;
+	u64 current_prot;
+	bool check_wx;
+	long unsigned int wx_pages;
+	long unsigned int uxn_pages;
+};
+
+struct prot_bits {
+	u64 mask;
+	u64 val;
+	const char *set;
+	const char *clear;
+};
+
+struct pg_level {
+	const struct prot_bits *bits;
 	const char *name;
-	unsigned int sid;
+	size_t num;
+	u64 mask;
+};
+
+struct irq_bypass_consumer;
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+enum {
+	kvm_ioeventfd_flag_nr_datamatch = 0,
+	kvm_ioeventfd_flag_nr_pio = 1,
+	kvm_ioeventfd_flag_nr_deassign = 2,
+	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
+	kvm_ioeventfd_flag_nr_fast_mmio = 4,
+	kvm_ioeventfd_flag_nr_max = 5,
+};
+
+struct kvm_irq_ack_notifier {
+	struct hlist_node link;
+	unsigned int gsi;
+	void (*irq_acked)(struct kvm_irq_ack_notifier *);
+};
+
+struct kvm_kernel_irqfd_resampler {
+	struct kvm *kvm;
+	struct list_head list;
+	struct kvm_irq_ack_notifier notifier;
+	struct list_head link;
+};
+
+struct kvm_kernel_irqfd {
+	struct kvm *kvm;
+	wait_queue_entry_t wait;
+	struct kvm_kernel_irq_routing_entry irq_entry;
+	seqcount_spinlock_t irq_entry_sc;
+	int gsi;
+	struct work_struct inject;
+	struct kvm_kernel_irqfd_resampler *resampler;
+	struct eventfd_ctx *resamplefd;
+	struct list_head resampler_link;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	poll_table pt;
+	struct work_struct shutdown;
+	struct irq_bypass_consumer consumer;
+	struct irq_bypass_producer *producer;
+};
+
+struct _ioeventfd {
+	struct list_head list;
+	u64 addr;
+	int length;
+	struct eventfd_ctx *eventfd;
+	u64 datamatch;
+	struct kvm_io_device dev;
+	u8 bus_idx;
+	bool wildcard;
+};
+
+struct alt_instr {
+	s32 orig_offset;
+	s32 alt_offset;
+	u16 cpufeature;
+	u8 orig_len;
+	u8 alt_len;
+};
+
+struct sys_reg_params {
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	u64 regval;
+	bool is_write;
+};
+
+struct sys_reg_desc {
+	const char *name;
+	enum {
+		AA32_DIRECT = 0,
+		AA32_LO = 1,
+		AA32_HI = 2,
+	} aarch32_map;
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	bool (*access)(struct kvm_vcpu *, struct sys_reg_params *, const struct sys_reg_desc *);
+	void (*reset)(struct kvm_vcpu *, const struct sys_reg_desc *);
+	int reg;
+	u64 val;
+	int (*__get_user)(struct kvm_vcpu *, const struct sys_reg_desc *, u64 *);
+	int (*set_user)(struct kvm_vcpu *, const struct sys_reg_desc *, u64);
+	unsigned int (*visibility)(const struct kvm_vcpu *, const struct sys_reg_desc *);
+};
+
+struct trace_event_raw_kvm_wfx_arm64 {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	bool is_wfe;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hvc_arm64 {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	long unsigned int r0;
+	long unsigned int imm;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_setup_debug {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_clear_debug {
+	struct trace_entry ent;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_set_dreg32 {
+	struct trace_entry ent;
+	const char *name;
+	__u64 value;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_set_regset {
+	struct trace_entry ent;
+	const char *name;
+	int len;
+	u64 ctrls[16];
+	u64 values[16];
+	char __data[0];
+};
+
+struct trace_event_raw_trap_reg {
+	struct trace_entry ent;
+	const char *fn;
+	int reg;
+	bool is_write;
+	u64 write_value;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_handle_sys_reg {
+	struct trace_entry ent;
+	long unsigned int hsr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_sys_access {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	bool is_write;
+	const char *name;
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_guest_debug {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kvm_wfx_arm64 {};
+
+struct trace_event_data_offsets_kvm_hvc_arm64 {};
+
+struct trace_event_data_offsets_kvm_arm_setup_debug {};
+
+struct trace_event_data_offsets_kvm_arm_clear_debug {};
+
+struct trace_event_data_offsets_kvm_arm_set_dreg32 {};
+
+struct trace_event_data_offsets_kvm_arm_set_regset {};
+
+struct trace_event_data_offsets_trap_reg {};
+
+struct trace_event_data_offsets_kvm_handle_sys_reg {};
+
+struct trace_event_data_offsets_kvm_sys_access {};
+
+struct trace_event_data_offsets_kvm_set_guest_debug {};
+
+typedef void (*btf_trace_kvm_wfx_arm64)(void *, long unsigned int, bool);
+
+typedef void (*btf_trace_kvm_hvc_arm64)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_kvm_arm_setup_debug)(void *, struct kvm_vcpu *, __u32);
+
+typedef void (*btf_trace_kvm_arm_clear_debug)(void *, __u32);
+
+typedef void (*btf_trace_kvm_arm_set_dreg32)(void *, const char *, __u64);
+
+typedef void (*btf_trace_kvm_arm_set_regset)(void *, const char *, int, __u64 *, __u64 *);
+
+typedef void (*btf_trace_trap_reg)(void *, const char *, int, bool, u64);
+
+typedef void (*btf_trace_kvm_handle_sys_reg)(void *, long unsigned int);
+
+typedef void (*btf_trace_kvm_sys_access)(void *, long unsigned int, struct sys_reg_params *, const struct sys_reg_desc *);
+
+typedef void (*btf_trace_kvm_set_guest_debug)(void *, struct kvm_vcpu *, __u32);
+
+typedef int (*exit_handle_fn)(struct kvm_vcpu *);
+
+enum kvm_pgtable_walk_flags {
+	KVM_PGTABLE_WALK_LEAF = 1,
+	KVM_PGTABLE_WALK_TABLE_PRE = 2,
+	KVM_PGTABLE_WALK_TABLE_POST = 4,
+};
+
+typedef int (*kvm_pgtable_visitor_fn_t)(u64, u64, u32, kvm_pte_t *, enum kvm_pgtable_walk_flags, void * const);
+
+struct kvm_pgtable_walker {
+	const kvm_pgtable_visitor_fn_t cb;
+	void * const arg;
+	const enum kvm_pgtable_walk_flags flags;
+};
+
+struct hyp_page {
+	short unsigned int refcount;
+	short unsigned int order;
+};
+
+struct hyp_pool {
+	hyp_spinlock_t lock;
+	struct list_head free_area[13];
+	phys_addr_t range_start;
+	phys_addr_t range_end;
+	short unsigned int max_order;
+};
+
+enum pkvm_page_state {
+	PKVM_PAGE_OWNED = 0,
+	PKVM_PAGE_SHARED_OWNED = 0,
+	PKVM_PAGE_SHARED_BORROWED = 0,
+	__PKVM_PAGE_RESERVED = 0,
+	PKVM_NOPAGE = 1,
+};
+
+enum exception_type {
+	except_type_sync = 0,
+	except_type_irq = 128,
+	except_type_fiq = 256,
+	except_type_serror = 384,
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = 4294967295,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long int err;
+	int trapnr;
+	int signr;
+};
+
+struct update_util_data {
+	void (*func)(struct update_util_data *, u64, unsigned int);
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
+};
+
+struct dl_bandwidth {
+	raw_spinlock_t dl_runtime_lock;
+	u64 dl_runtime;
+	u64 dl_period;
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
+typedef struct rt_rq *rt_rq_iter_t;
+
+struct em_data_callback {
+	int (*active_power)(struct device *, long unsigned int *, long unsigned int *);
+	int (*get_cost)(struct device *, long unsigned int, long unsigned int *);
+};
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct rcu_exp_work {
+	long unsigned int rew_s;
+	struct work_struct rew_work;
+};
+
+struct rcu_node {
+	raw_spinlock_t lock;
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	long unsigned int completedqs;
+	long unsigned int qsmask;
+	long unsigned int rcu_gp_init_mask;
+	long unsigned int qsmaskinit;
+	long unsigned int qsmaskinitnext;
+	long unsigned int expmask;
+	long unsigned int expmaskinit;
+	long unsigned int expmaskinitnext;
+	long unsigned int cbovldmask;
+	long unsigned int ffmask;
+	long unsigned int grpmask;
+	int grplo;
+	int grphi;
+	u8 grpnum;
+	u8 level;
+	bool wait_blkd_tasks;
+	struct rcu_node *parent;
+	struct list_head blkd_tasks;
+	struct list_head *gp_tasks;
+	struct list_head *exp_tasks;
+	struct list_head *boost_tasks;
+	struct rt_mutex boost_mtx;
+	long unsigned int boost_time;
+	struct mutex boost_kthread_mutex;
+	struct task_struct *boost_kthread_task;
+	unsigned int boost_kthread_status;
+	long unsigned int n_boosts;
+	struct swait_queue_head nocb_gp_wq[2];
+	raw_spinlock_t fqslock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t exp_lock;
+	long unsigned int exp_seq_rq;
+	wait_queue_head_t exp_wq[4];
+	struct rcu_exp_work rew;
+	bool exp_need_flush;
+	raw_spinlock_t exp_poll_lock;
+	long unsigned int exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct smp_hotplug_thread {
+	struct task_struct **store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+union rcu_noqs {
 	struct {
-		unsigned int override;
-		unsigned int security;
-	} regs;
+		u8 norm;
+		u8 exp;
+	} b;
+	u16 s;
 };
 
-struct tegra186_mc_soc {
-	const struct tegra186_mc_client *clients;
-	unsigned int num_clients;
+struct rcu_data {
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	union rcu_noqs cpu_no_qs;
+	bool core_needs_qs;
+	bool beenonline;
+	bool gpwrap;
+	bool cpu_started;
+	struct rcu_node *mynode;
+	long unsigned int grpmask;
+	long unsigned int ticks_this_gp;
+	struct irq_work defer_qs_iw;
+	bool defer_qs_iw_pending;
+	struct work_struct strict_work;
+	struct rcu_segcblist cblist;
+	long int qlen_last_fqs_check;
+	long unsigned int n_cbs_invoked;
+	long unsigned int n_force_qs_snap;
+	long int blimit;
+	int dynticks_snap;
+	bool rcu_need_heavy_qs;
+	bool rcu_urgent_qs;
+	bool rcu_forced_tick;
+	bool rcu_forced_tick_exp;
+	long unsigned int barrier_seq_snap;
+	struct callback_head barrier_head;
+	int exp_dynticks_snap;
+	struct swait_queue_head nocb_cb_wq;
+	struct swait_queue_head nocb_state_wq;
+	struct task_struct *nocb_gp_kthread;
+	raw_spinlock_t nocb_lock;
+	atomic_t nocb_lock_contended;
+	int nocb_defer_wakeup;
+	struct timer_list nocb_timer;
+	long unsigned int nocb_gp_adv_time;
+	struct mutex nocb_gp_kthread_mutex;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t nocb_bypass_lock;
+	struct rcu_cblist nocb_bypass;
+	long unsigned int nocb_bypass_first;
+	long unsigned int nocb_nobypass_last;
+	int nocb_nobypass_count;
+	long: 32;
+	long: 64;
+	raw_spinlock_t nocb_gp_lock;
+	u8 nocb_gp_sleep;
+	u8 nocb_gp_bypass;
+	u8 nocb_gp_gp;
+	long unsigned int nocb_gp_seq;
+	long unsigned int nocb_gp_loops;
+	struct swait_queue_head nocb_gp_wq;
+	bool nocb_cb_sleep;
+	struct task_struct *nocb_cb_kthread;
+	struct list_head nocb_head_rdp;
+	struct list_head nocb_entry_rdp;
+	struct rcu_data *nocb_toggling_rdp;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rcu_data *nocb_gp_rdp;
+	struct task_struct *rcu_cpu_kthread_task;
+	unsigned int rcu_cpu_kthread_status;
+	char rcu_cpu_has_work;
+	long unsigned int rcuc_activity;
+	unsigned int softirq_snap;
+	struct irq_work rcu_iw;
+	bool rcu_iw_pending;
+	long unsigned int rcu_iw_gp_seq;
+	long unsigned int rcu_ofl_gp_seq;
+	short int rcu_ofl_gp_flags;
+	long unsigned int rcu_onl_gp_seq;
+	short int rcu_onl_gp_flags;
+	long unsigned int last_fqs_resched;
+	long unsigned int last_sched_clock;
+	int cpu;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct tegra186_mc {
+struct rcu_state {
+	struct rcu_node node[261];
+	struct rcu_node *level[4];
+	int ncpus;
+	int n_online_cpus;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int gp_seq;
+	long unsigned int gp_max;
+	struct task_struct *gp_kthread;
+	struct swait_queue_head gp_wq;
+	short int gp_flags;
+	short int gp_state;
+	long unsigned int gp_wake_time;
+	long unsigned int gp_wake_seq;
+	long unsigned int gp_seq_polled;
+	long unsigned int gp_seq_polled_snap;
+	long unsigned int gp_seq_polled_exp_snap;
+	struct mutex barrier_mutex;
+	atomic_t barrier_cpu_count;
+	struct completion barrier_completion;
+	long unsigned int barrier_sequence;
+	raw_spinlock_t barrier_lock;
+	struct mutex exp_mutex;
+	struct mutex exp_wake_mutex;
+	long unsigned int expedited_sequence;
+	atomic_t expedited_need_qs;
+	struct swait_queue_head expedited_wq;
+	int ncpus_snap;
+	u8 cbovld;
+	u8 cbovldnext;
+	long unsigned int jiffies_force_qs;
+	long unsigned int jiffies_kick_kthreads;
+	long unsigned int n_force_qs;
+	long unsigned int gp_start;
+	long unsigned int gp_end;
+	long unsigned int gp_activity;
+	long unsigned int gp_req_activity;
+	long unsigned int jiffies_stall;
+	long unsigned int jiffies_resched;
+	long unsigned int n_force_qs_gpstart;
+	const char *name;
+	char abbr;
+	long: 56;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
+
+struct kvfree_rcu_bulk_data {
+	long unsigned int nr_records;
+	struct kvfree_rcu_bulk_data *next;
+	void *records[0];
+};
+
+struct kfree_rcu_cpu;
+
+struct kfree_rcu_cpu_work {
+	struct rcu_work rcu_work;
+	struct callback_head *head_free;
+	struct kvfree_rcu_bulk_data *bkvhead_free[2];
+	struct kfree_rcu_cpu *krcp;
+};
+
+struct kfree_rcu_cpu {
+	struct callback_head *head;
+	struct kvfree_rcu_bulk_data *bkvhead[2];
+	struct kfree_rcu_cpu_work krw_arr[2];
+	raw_spinlock_t lock;
+	struct delayed_work monitor_work;
+	bool initialized;
+	int count;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
+	atomic_t work_in_progress;
+	struct hrtimer hrtimer;
+	struct llist_head bkvcache;
+	int nr_bkv_objs;
+};
+
+struct rcu_stall_chk_rdr {
+	int nesting;
+	union rcu_special rs;
+	bool on_blkd_list;
+};
+
+struct trace_event_raw_timer_class {
+	struct trace_entry ent;
+	void *timer;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_start {
+	struct trace_entry ent;
+	void *timer;
+	void *function;
+	long unsigned int expires;
+	long unsigned int now;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_expire_entry {
+	struct trace_entry ent;
+	void *timer;
+	long unsigned int now;
+	void *function;
+	long unsigned int baseclk;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_init {
+	struct trace_entry ent;
+	void *hrtimer;
+	clockid_t clockid;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_start {
+	struct trace_entry ent;
+	void *hrtimer;
+	void *function;
+	s64 expires;
+	s64 softexpires;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_expire_entry {
+	struct trace_entry ent;
+	void *hrtimer;
+	s64 now;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_class {
+	struct trace_entry ent;
+	void *hrtimer;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_state {
+	struct trace_entry ent;
+	int which;
+	long long unsigned int expires;
+	long int value_sec;
+	long int value_nsec;
+	long int interval_sec;
+	long int interval_nsec;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_expire {
+	struct trace_entry ent;
+	int which;
+	pid_t pid;
+	long long unsigned int now;
+	char __data[0];
+};
+
+struct trace_event_raw_tick_stop {
+	struct trace_entry ent;
+	int success;
+	int dependency;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_timer_class {};
+
+struct trace_event_data_offsets_timer_start {};
+
+struct trace_event_data_offsets_timer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_init {};
+
+struct trace_event_data_offsets_hrtimer_start {};
+
+struct trace_event_data_offsets_hrtimer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_class {};
+
+struct trace_event_data_offsets_itimer_state {};
+
+struct trace_event_data_offsets_itimer_expire {};
+
+struct trace_event_data_offsets_tick_stop {};
+
+typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
+
+typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
+
+typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
+
+typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
+
+typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
+
+typedef void (*btf_trace_tick_stop)(void *, int, int);
+
+struct timer_base {
+	raw_spinlock_t lock;
+	struct timer_list *running_timer;
+	long unsigned int clk;
+	long unsigned int next_expiry;
+	unsigned int cpu;
+	bool next_expiry_recalc;
+	bool is_idle;
+	bool timers_pending;
+	long unsigned int pending_map[8];
+	struct hlist_head vectors[512];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct process_timer {
+	struct timer_list timer;
+	struct task_struct *task;
+};
+
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+typedef struct {
+	unsigned int __softirq_pending;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+} irq_cpustat_t;
+
+struct cfd_percpu {
+	call_single_data_t csd;
+};
+
+struct call_function_data {
+	struct cfd_percpu *pcpu;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	long unsigned int magic;
+	bool new_sb_created;
+};
+
+enum psi_res {
+	PSI_IO = 0,
+	PSI_MEM = 1,
+	PSI_CPU = 2,
+	NR_PSI_RESOURCES = 3,
+};
+
+struct psi_window {
+	u64 size;
+	u64 start_time;
+	u64 start_value;
+	u64 prev_growth;
+};
+
+struct psi_trigger {
+	enum psi_states state;
+	u64 threshold;
+	struct list_head node;
+	struct psi_group *group;
+	wait_queue_head_t event_wait;
+	int event;
+	struct psi_window win;
+	u64 last_event_time;
+	bool pending_event;
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+enum cgroup_opt_features {
+	OPT_FEATURE_PRESSURE = 0,
+	OPT_FEATURE_COUNT = 1,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+struct rchan_percpu_buf_dispatcher {
+	struct rchan_buf *buf;
+	struct dentry *dentry;
+};
+
+enum ring_buffer_type {
+	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
+	RINGBUF_TYPE_PADDING = 29,
+	RINGBUF_TYPE_TIME_EXTEND = 30,
+	RINGBUF_TYPE_TIME_STAMP = 31,
+};
+
+struct ring_buffer_per_cpu;
+
+struct buffer_page;
+
+struct ring_buffer_iter {
+	struct ring_buffer_per_cpu *cpu_buffer;
+	long unsigned int head;
+	long unsigned int next_event;
+	struct buffer_page *head_page;
+	struct buffer_page *cache_reader_page;
+	long unsigned int cache_read;
+	u64 read_stamp;
+	u64 page_stamp;
+	struct ring_buffer_event *event;
+	int missed_events;
+};
+
+struct rb_irq_work {
+	struct irq_work work;
+	wait_queue_head_t waiters;
+	wait_queue_head_t full_waiters;
+	long int wait_index;
+	bool waiters_pending;
+	bool full_waiters_pending;
+	bool wakeup_full;
+};
+
+struct trace_buffer {
+	unsigned int flags;
+	int cpus;
+	atomic_t record_disabled;
+	cpumask_var_t cpumask;
+	struct lock_class_key *reader_lock_key;
+	struct mutex mutex;
+	struct ring_buffer_per_cpu **buffers;
+	struct hlist_node node;
+	u64 (*clock)();
+	struct rb_irq_work irq_work;
+	bool time_stamp_abs;
+};
+
+enum {
+	RB_LEN_TIME_EXTEND = 8,
+	RB_LEN_TIME_STAMP = 8,
+};
+
+struct buffer_data_page {
+	u64 time_stamp;
+	local_t commit;
+	unsigned char data[0];
+};
+
+struct buffer_page {
+	struct list_head list;
+	local_t write;
+	unsigned int read;
+	local_t entries;
+	long unsigned int real_end;
+	struct buffer_data_page *page;
+};
+
+struct rb_event_info {
+	u64 ts;
+	u64 delta;
+	u64 before;
+	u64 after;
+	long unsigned int length;
+	struct buffer_page *tail_page;
+	int add_timestamp;
+};
+
+enum {
+	RB_ADD_STAMP_NONE = 0,
+	RB_ADD_STAMP_EXTEND = 2,
+	RB_ADD_STAMP_ABSOLUTE = 4,
+	RB_ADD_STAMP_FORCE = 8,
+};
+
+enum {
+	RB_CTX_TRANSITION = 0,
+	RB_CTX_NMI = 1,
+	RB_CTX_IRQ = 2,
+	RB_CTX_SOFTIRQ = 3,
+	RB_CTX_NORMAL = 4,
+	RB_CTX_MAX = 5,
+};
+
+struct rb_time_struct {
+	local64_t time;
+};
+
+typedef struct rb_time_struct rb_time_t;
+
+struct ring_buffer_per_cpu {
+	int cpu;
+	atomic_t record_disabled;
+	atomic_t resize_disabled;
+	struct trace_buffer *buffer;
+	raw_spinlock_t reader_lock;
+	arch_spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct buffer_data_page *free_page;
+	long unsigned int nr_pages;
+	unsigned int current_context;
+	struct list_head *pages;
+	struct buffer_page *head_page;
+	struct buffer_page *tail_page;
+	struct buffer_page *commit_page;
+	struct buffer_page *reader_page;
+	long unsigned int lost_events;
+	long unsigned int last_overrun;
+	long unsigned int nest;
+	local_t entries_bytes;
+	local_t entries;
+	local_t overrun;
+	local_t commit_overrun;
+	local_t dropped_events;
+	local_t committing;
+	local_t commits;
+	local_t pages_touched;
+	local_t pages_read;
+	long int last_pages_touch;
+	size_t shortest_full;
+	long unsigned int read;
+	long unsigned int read_bytes;
+	rb_time_t write_stamp;
+	rb_time_t before_stamp;
+	u64 event_stamp[5];
+	u64 read_stamp;
+	long int nr_pages_to_update;
+	struct list_head new_pages;
+	struct work_struct update_pages_work;
+	struct completion update_done;
+	struct rb_irq_work irq_work;
+};
+
+struct ftrace_graph_ent_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ent graph_ent;
+} __attribute__((packed));
+
+struct ftrace_graph_ret_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ret ret;
+};
+
+struct fgraph_cpu_data {
+	pid_t last_pid;
+	int depth;
+	int depth_irq;
+	int ignore;
+	long unsigned int enter_funcs[50];
+};
+
+struct fgraph_data {
+	struct fgraph_cpu_data *cpu_data;
+	struct ftrace_graph_ent_entry ent;
+	struct ftrace_graph_ret_entry ret;
+	int failed;
+	int cpu;
+	int: 32;
+} __attribute__((packed));
+
+enum {
+	FLAGS_FILL_FULL = 268435456,
+	FLAGS_FILL_START = 536870912,
+	FLAGS_FILL_END = 805306368,
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct event_trigger_ops;
+
+struct event_command;
+
+struct event_trigger_data {
+	long unsigned int count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+struct trace_event_raw_rpm_internal {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flags;
+	int usage_count;
+	int disable_depth;
+	int runtime_auto;
+	int request_pending;
+	int irq_safe;
+	int child_count;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_return_int {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int ip;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpm_internal {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_return_int {
+	u32 name;
+};
+
+typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
+
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;};
+
+struct bpf_dynptr {
+	long: 64;
+	long: 64;};
+
+struct bpf_pidns_info {
+	__u32 pid;
+	__u32 tgid;
+};
+
+typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_bpf_get_smp_processor_id)();
+
+typedef u64 (*btf_bpf_get_numa_node_id)();
+
+typedef u64 (*btf_bpf_ktime_get_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_boot_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_get_current_pid_tgid)();
+
+typedef u64 (*btf_bpf_get_current_uid_gid)();
+
+typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
+
+typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_jiffies64)();
+
+typedef u64 (*btf_bpf_get_current_cgroup_id)();
+
+typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
+
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+struct bpf_bprintf_buffers {
+	char tmp_bufs[1536];
+};
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void *callback_fn;
+	void *value;
+};
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(struct bpf_dynptr_kern *, u32, u32);
+
+struct task_struct;
+
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
+};
+
+struct bpf_lpm_trie_key {
+	__u32 prefixlen;
+	__u8 data[0];
+};
+
+struct lpm_trie_node {
+	struct callback_head rcu;
+	struct lpm_trie_node *child[2];
+	u32 prefixlen;
+	u32 flags;
+	u8 data[0];
+};
+
+struct lpm_trie {
+	struct bpf_map map;
+	struct lpm_trie_node *root;
+	size_t n_entries;
+	size_t max_prefixlen;
+	size_t data_size;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
+	struct mutex mutex;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	void *rw_image;
+	u32 image_off;
+	struct bpf_ksym ksym;
+};
+
+enum {
+	BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct bpf_prog_list {
+	struct hlist_node node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+struct cgroup_lsm_atype {
+	u32 attach_btf_id;
+	int refcnt;
+};
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
+typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
+
+typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
+struct static_key_mod {
+	struct static_key_mod *next;
+	struct jump_entry *entries;
+	struct module *mod;
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+struct static_key_deferred {
+	struct static_key key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+struct pkcs7_message;
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	long unsigned int totalpages;
+	struct task_struct *chosen;
+	long int chosen_points;
+	enum oom_constraint constraint;
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	long unsigned int reclaimable;
+	long unsigned int available;
+	long unsigned int min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_mark_victim {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, int);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+struct zap_details;
+
+struct shmem_sb_info {
+	long unsigned int max_blocks;
+	struct percpu_counter used_blocks;
+	long unsigned int max_inodes;
+	long unsigned int free_inodes;
+	raw_spinlock_t stat_lock;
+	umode_t mode;
+	unsigned char huge;
+	kuid_t uid;
+	kgid_t gid;
+	bool full_inums;
+	ino_t next_ino;
+	ino_t *ino_batch;
+	struct mempolicy *mpol;
+	spinlock_t shrinklist_lock;
+	struct list_head shrinklist;
+	long unsigned int shrinklist_len;
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+struct shmem_falloc {
+	wait_queue_head_t *waitq;
+	long unsigned int start;
+	long unsigned int next;
+	long unsigned int nr_falloced;
+	long unsigned int nr_unswapped;
+};
+
+struct shmem_options {
+	long long unsigned int blocks;
+	long long unsigned int inodes;
+	struct mempolicy *mpol;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	bool full_inums;
+	int huge;
+	int seen;
+};
+
+enum shmem_param {
+	Opt_gid___3 = 0,
+	Opt_huge = 1,
+	Opt_mode___2 = 2,
+	Opt_mpol = 3,
+	Opt_nr_blocks = 4,
+	Opt_nr_inodes = 5,
+	Opt_size = 6,
+	Opt_uid___2 = 7,
+	Opt_inode32 = 8,
+	Opt_inode64 = 9,
+};
+
+struct vm_unmapped_area_info {
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+};
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int total_vm;
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	size_t size;
+	struct device *dev;
+	size_t allocation;
+	size_t boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+	unsigned int in_use;
+	unsigned int offset;
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	long unsigned int invalidate_seq;
+	long unsigned int active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct mmu_interval_notifier;
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
+};
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	long unsigned int invalidate_seq;
+};
+
+struct kcsan_scoped_access {};
+
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED = 0,
+	KFENCE_OBJECT_ALLOCATED = 1,
+	KFENCE_OBJECT_FREED = 2,
+};
+
+struct kfence_track {
+	pid_t pid;
+	int cpu;
+	u64 ts_nsec;
+	int num_stack_entries;
+	long unsigned int stack_entries[64];
+};
+
+struct kfence_metadata {
+	struct list_head list;
+	struct callback_head callback_head;
+	raw_spinlock_t lock;
+	enum kfence_object_state state;
+	long unsigned int addr;
+	size_t size;
+	struct kmem_cache *cache;
+	long unsigned int unprotected_page;
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+	u32 alloc_stack_hash;
+	struct obj_cgroup *objcg;
+};
+
+enum kfence_error_type {
+	KFENCE_ERROR_OOB = 0,
+	KFENCE_ERROR_UAF = 1,
+	KFENCE_ERROR_CORRUPTION = 2,
+	KFENCE_ERROR_INVALID = 3,
+	KFENCE_ERROR_INVALID_FREE = 4,
+};
+
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED = 0,
+	KFENCE_COUNTER_ALLOCS = 1,
+	KFENCE_COUNTER_FREES = 2,
+	KFENCE_COUNTER_ZOMBIES = 3,
+	KFENCE_COUNTER_BUGS = 4,
+	KFENCE_COUNTER_SKIP_INCOMPAT = 5,
+	KFENCE_COUNTER_SKIP_CAPACITY = 6,
+	KFENCE_COUNTER_SKIP_COVERED = 7,
+	KFENCE_COUNTER_COUNT = 8,
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[512];
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	long unsigned int flags;
+	long unsigned int precharge;
+	long unsigned int moved_charge;
+	long unsigned int moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	long unsigned int flags;
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+union mc_target {
+	struct page *page;
+	swp_entry_t ent;
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	long unsigned int nr_memory;
+	long unsigned int pgpgout;
+	long unsigned int nr_kmem;
+	int nid;
+};
+
+struct numa_stat {
+	const char *name;
+	unsigned int lru_mask;
+};
+
+struct damon_reclaim_ram_walk_arg {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct file_clone_range {
+	__s64 src_fd;
+	__u64 src_offset;
+	__u64 src_length;
+	__u64 dest_offset;
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
+
+struct space_resv {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	short unsigned int expired;
+	short unsigned int settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[32];
+};
+
+struct fscrypt_context_v1 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 master_key_descriptor[8];
+	u8 nonce[16];
+};
+
+struct fscrypt_context_v2 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 __reserved[4];
+	u8 master_key_identifier[16];
+	u8 nonce[16];
+};
+
+union fscrypt_context {
+	u8 version;
+	struct fscrypt_context_v1 v1;
+	struct fscrypt_context_v2 v2;
+};
+
+typedef long unsigned int elf_greg_t;
+
+typedef elf_greg_t elf_gregset_t[34];
+
+struct gnu_property {
+	u32 pr_type;
+	u32 pr_datasz;
+};
+
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
+};
+
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short int pr_cursig;
+	long unsigned int pr_sigpend;
+	long unsigned int pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
+};
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
+};
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	long unsigned int pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct memelfnote {
+	const char *name;
+	int type;
+	unsigned int datasz;
+	void *data;
+};
+
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+enum {
+	DQF_INFO_DIRTY_B = 17,
+};
+
+struct v2_disk_dqheader {
+	__le32 dqh_magic;
+	__le32 dqh_version;
+};
+
+struct v2r0_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_ihardlimit;
+	__le32 dqb_isoftlimit;
+	__le32 dqb_curinodes;
+	__le32 dqb_bhardlimit;
+	__le32 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct v2r1_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_pad;
+	__le64 dqb_ihardlimit;
+	__le64 dqb_isoftlimit;
+	__le64 dqb_curinodes;
+	__le64 dqb_bhardlimit;
+	__le64 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct v2_disk_dqinfo {
+	__le32 dqi_bgrace;
+	__le32 dqi_igrace;
+	__le32 dqi_flags;
+	__le32 dqi_blocks;
+	__le32 dqi_free_blk;
+	__le32 dqi_free_entry;
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+typedef struct {
+	__le32 *p;
+	__le32 key;
+	struct buffer_head *bh;
+} Indirect;
+
+struct ext4_extent_idx {
+	__le32 ei_block;
+	__le32 ei_leaf_lo;
+	__le16 ei_leaf_hi;
+	__u16 ei_unused;
+};
+
+struct ext4_extent_header {
+	__le16 eh_magic;
+	__le16 eh_entries;
+	__le16 eh_max;
+	__le16 eh_depth;
+	__le32 eh_generation;
+};
+
+struct ext4_ext_path {
+	ext4_fsblk_t p_block;
+	__u16 p_depth;
+	__u16 p_maxdepth;
+	struct ext4_extent *p_ext;
+	struct ext4_extent_idx *p_idx;
+	struct ext4_extent_header *p_hdr;
+	struct buffer_head *p_bh;
+};
+
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
+typedef u32 unicode_t;
+
+struct utf8_table {
+	int cmask;
+	int cval;
+	int shift;
+	long int lmask;
+	long int lval;
+};
+
+struct debugfs_blob_wrapper {
+	void *data;
+	long unsigned int size;
+};
+
+struct debugfs_reg32 {
+	char *name;
+	long unsigned int offset;
+};
+
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
+	struct device *dev;
+};
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	refcount_t active_users;
+	struct completion active_users_drained;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+struct btrfs_csum_item {
+	__u8 csum;
+};
+
+struct btrfs_trans_handle;
+
+struct compressed_bio {
+	refcount_t pending_ios;
+	unsigned int nr_pages;
+	struct page **compressed_pages;
+	struct inode *inode;
+	u64 start;
+	unsigned int len;
+	unsigned int compressed_len;
+	u8 compress_type;
+	bool writeback;
+	blk_status_t status;
+	union {
+		struct bio *orig_bio;
+		struct work_struct write_end_work;
+	};
+};
+
+struct workspace_manager {
+	struct list_head idle_ws;
+	spinlock_t ws_lock;
+	int free_ws;
+	atomic_t total_ws;
+	wait_queue_head_t ws_wait;
+};
+
+struct btrfs_compress_op {
+	struct workspace_manager *workspace_manager;
+	unsigned int max_level;
+	unsigned int default_level;
+};
+
+struct workspace {
+	void *mem;
+	void *buf;
+	void *cbuf;
+	struct list_head list;
+};
+
+struct scrub_bio;
+
+struct scrub_ctx {
+	struct scrub_bio *bios[64];
+	struct btrfs_fs_info *fs_info;
+	int first_free;
+	int curr;
+	atomic_t bios_in_flight;
+	atomic_t workers_pending;
+	spinlock_t list_lock;
+	wait_queue_head_t list_wait;
+	struct list_head csum_list;
+	atomic_t cancel_req;
+	int readonly;
+	int sectors_per_bio;
+	ktime_t throttle_deadline;
+	u64 throttle_sent;
+	int is_dev_replace;
+	u64 write_pointer;
+	struct scrub_bio *wr_curr_bio;
+	struct mutex wr_lock;
+	struct btrfs_device *wr_tgtdev;
+	bool flush_all_writes;
+	struct btrfs_scrub_progress stat;
+	spinlock_t stat_lock;
+	refcount_t refs;
+};
+
+enum btrfs_rbio_ops {
+	BTRFS_RBIO_WRITE = 0,
+	BTRFS_RBIO_READ_REBUILD = 1,
+	BTRFS_RBIO_PARITY_SCRUB = 2,
+	BTRFS_RBIO_REBUILD_MISSING = 3,
+};
+
+struct sector_ptr;
+
+struct btrfs_raid_bio {
+	struct btrfs_io_context *bioc;
+	struct list_head hash_list;
+	struct list_head stripe_cache;
+	struct work_struct work;
+	struct bio_list bio_list;
+	spinlock_t bio_list_lock;
+	struct list_head plug_list;
+	long unsigned int flags;
+	enum btrfs_rbio_ops operation;
+	u16 nr_pages;
+	u16 nr_sectors;
+	u8 nr_data;
+	u8 real_stripes;
+	u8 stripe_npages;
+	u8 stripe_nsectors;
+	s8 faila;
+	s8 failb;
+	u8 scrubp;
+	int bio_list_bytes;
+	int generic_bio_cnt;
+	refcount_t refs;
+	atomic_t stripes_pending;
+	atomic_t error;
+	struct work_struct end_io_work;
+	long unsigned int dbitmap;
+	long unsigned int finish_pbitmap;
+	struct page **stripe_pages;
+	struct sector_ptr *bio_sectors;
+	struct sector_ptr *stripe_sectors;
+	void **finish_pointers;
+};
+
+struct scrub_recover {
+	refcount_t refs;
+	struct btrfs_io_context *bioc;
+	u64 map_length;
+};
+
+struct scrub_block;
+
+struct scrub_sector {
+	struct scrub_block *sblock;
+	struct page *page;
+	struct btrfs_device *dev;
+	struct list_head list;
+	u64 flags;
+	u64 generation;
+	u64 logical;
+	u64 physical;
+	u64 physical_for_dev_replace;
+	atomic_t refs;
+	u8 mirror_num;
+	unsigned int have_csum: 1;
+	unsigned int io_error: 1;
+	u8 csum[32];
+	struct scrub_recover *recover;
+};
+
+struct scrub_parity;
+
+struct scrub_block {
+	struct scrub_sector *sectors[16];
+	int sector_count;
+	atomic_t outstanding_sectors;
+	refcount_t refs;
+	struct scrub_ctx *sctx;
+	struct scrub_parity *sparity;
+	struct {
+		unsigned int header_error: 1;
+		unsigned int checksum_error: 1;
+		unsigned int no_io_error_seen: 1;
+		unsigned int generation_error: 1;
+		unsigned int data_corrected: 1;
+	};
+	struct work_struct work;
+};
+
+struct scrub_bio {
+	int index;
+	struct scrub_ctx *sctx;
+	struct btrfs_device *dev;
+	struct bio *bio;
+	blk_status_t status;
+	u64 logical;
+	u64 physical;
+	struct scrub_sector *sectors[32];
+	int sector_count;
+	int next_free;
+	struct work_struct work;
+};
+
+struct scrub_parity {
+	struct scrub_ctx *sctx;
+	struct btrfs_device *scrub_dev;
+	u64 logic_start;
+	u64 logic_end;
+	int nsectors;
+	u32 stripe_len;
+	refcount_t refs;
+	struct list_head sectors_list;
+	struct work_struct work;
+	long unsigned int dbitmap;
+	long unsigned int ebitmap;
+};
+
+struct scrub_warning {
+	struct btrfs_path *path;
+	u64 extent_item_size;
+	const char *errstr;
+	u64 physical;
+	u64 logical;
+	struct btrfs_device *dev;
+};
+
+struct full_stripe_lock {
+	struct rb_node node;
+	u64 logical;
+	u64 refs;
+	struct mutex mutex;
+};
+
+struct btrfs_free_space_info {
+	__le32 extent_count;
+	__le32 flags;
+};
+
+struct btrfs_seq_list {
+	struct list_head list;
+	u64 seq;
+};
+
+struct tree_mod_root {
+	u64 logical;
+	u8 level;
+};
+
+struct tree_mod_elem {
+	struct rb_node node;
+	u64 logical;
+	u64 seq;
+	enum btrfs_mod_log_op op;
+	int slot;
+	u64 generation;
+	struct btrfs_disk_key key;
+	u64 blockptr;
+	struct {
+		int dst_slot;
+		int nr_items;
+	} move;
+	struct tree_mod_root old_root;
+};
+
+struct pstore_zbackend {
+	int (*zbufsize)(size_t);
+	const char *name;
+};
+
+struct msg_msgseg {
+	struct msg_msgseg *next;
+};
+
+struct watch_notification {
+	__u32 type: 24;
+	__u32 subtype: 8;
+	__u32 info;
+};
+
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct key_notification {
+	struct watch_notification watch;
+	__u32 key_id;
+	__u32 aux;
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+enum tpm2key_actions {
+	ACT_tpm2_key_parent = 0,
+	ACT_tpm2_key_priv = 1,
+	ACT_tpm2_key_pub = 2,
+	ACT_tpm2_key_type = 3,
+	NR__tpm2key_actions = 4,
+};
+
+struct ecryptfs_session_key {
+	u32 flags;
+	u32 encrypted_key_size;
+	u32 decrypted_key_size;
+	u8 encrypted_key[512];
+	u8 decrypted_key[64];
+};
+
+struct ecryptfs_password {
+	u32 password_bytes;
+	s32 hash_algo;
+	u32 hash_iterations;
+	u32 session_key_encryption_key_bytes;
+	u32 flags;
+	u8 session_key_encryption_key[64];
+	u8 signature[17];
+	u8 salt[8];
+};
+
+enum ecryptfs_token_types {
+	ECRYPTFS_PASSWORD = 0,
+	ECRYPTFS_PRIVATE_KEY = 1,
+};
+
+struct ecryptfs_private_key {
+	u32 key_size;
+	u32 data_len;
+	u8 signature[17];
+	char pki_type[17];
+	u8 data[0];
+};
+
+struct ecryptfs_auth_tok {
+	u16 version;
+	u16 token_type;
+	u32 flags;
+	struct ecryptfs_session_key session_key;
+	u8 reserved[32];
+	union {
+		struct ecryptfs_password password;
+		struct ecryptfs_private_key private_key;
+	} token;
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	kuid_t rootid;
+};
+
+struct netport_security_struct {
+	u32 sid;
+	u16 port;
+	u8 protocol;
+};
+
+struct sel_netport_bkt {
+	int size;
+	struct list_head list;
+};
+
+struct sel_netport {
+	struct netport_security_struct psec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct modsig {
+	struct pkcs7_message *pkcs7_msg;
+	enum hash_algo hash_algo;
+	const u8 *digest;
+	u32 digest_size;
+	int raw_pkcs7_len;
+	u8 raw_pkcs7[0];
+};
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[128];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
+};
+
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
+};
+
+struct dh {
+	const void *key;
+	const void *p;
+	const void *g;
+	unsigned int key_size;
+	unsigned int p_size;
+	unsigned int g_size;
+};
+
+struct dh_ctx {
+	MPI p;
+	MPI g;
+	MPI xa;
+};
+
+struct dh_safe_prime {
+	unsigned int max_strength;
+	unsigned int p_size;
+	const char *p;
+};
+
+struct dh_safe_prime_instance_ctx {
+	struct crypto_kpp_spawn dh_spawn;
+	const struct dh_safe_prime *safe_prime;
+};
+
+struct dh_safe_prime_tfm_ctx {
+	struct crypto_kpp *dh_tfm;
+};
+
+struct cmac_tfm_ctx {
+	struct crypto_cipher *child;
+	u8 ctx[0];
+};
+
+struct cmac_desc_ctx {
+	unsigned int len;
+	u8 ctx[0];
+};
+
+struct sha512_state {
+	u64 state[8];
+	u64 count[2];
+	u8 buf[128];
+};
+
+typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
+
+struct crypto_rfc3686_ctx {
+	struct crypto_skcipher *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc3686_req_ctx {
+	u8 iv[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+struct chksum_desc_ctx___2 {
+	__u16 crc;
+};
+
+struct crypto842_ctx {
+	void *wmem;
+};
+
+struct rand_data {
+	__u64 data;
+	__u64 old_data;
+	__u64 prev_time;
+	__u64 last_delta;
+	__s64 last_delta2;
+	unsigned int osr;
+	unsigned char *mem;
+	unsigned int memlocation;
+	unsigned int memblocks;
+	unsigned int memblocksize;
+	unsigned int memaccessloops;
+	int rct_count;
+	unsigned int apt_observations;
+	unsigned int apt_count;
+	unsigned int apt_base;
+	unsigned int apt_base_set: 1;
+	unsigned int health_failure: 1;
+};
+
+struct hash_ctx {
+	struct af_alg_sgl sgl;
+	u8 *result;
+	struct crypto_wait wait;
+	unsigned int len;
+	bool more;
+	long: 24;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ahash_request req;
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct trace_event_raw_block_buffer {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	char rwbs[8];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION___2 = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct solaris_x86_slice {
+	__le16 s_tag;
+	__le16 s_flag;
+	__le32 s_start;
+	__le32 s_size;
+};
+
+struct solaris_x86_vtoc {
+	unsigned int v_bootinfo[3];
+	__le32 v_sanity;
+	__le32 v_version;
+	char v_volume[8];
+	__le16 v_sectorsz;
+	__le16 v_nparts;
+	unsigned int v_reserved[10];
+	struct solaris_x86_slice v_slice[16];
+	unsigned int timestamp[16];
+	char v_asciilabel[128];
+};
+
+struct bsd_partition {
+	__le32 p_size;
+	__le32 p_offset;
+	__le32 p_fsize;
+	__u8 p_fstype;
+	__u8 p_frag;
+	__le16 p_cpg;
+};
+
+struct bsd_disklabel {
+	__le32 d_magic;
+	__s16 d_type;
+	__s16 d_subtype;
+	char d_typename[16];
+	char d_packname[16];
+	__u32 d_secsize;
+	__u32 d_nsectors;
+	__u32 d_ntracks;
+	__u32 d_ncylinders;
+	__u32 d_secpercyl;
+	__u32 d_secperunit;
+	__u16 d_sparespertrack;
+	__u16 d_sparespercyl;
+	__u32 d_acylinders;
+	__u16 d_rpm;
+	__u16 d_interleave;
+	__u16 d_trackskew;
+	__u16 d_cylskew;
+	__u32 d_headswitch;
+	__u32 d_trkseek;
+	__u32 d_flags;
+	__u32 d_drivedata[5];
+	__u32 d_spare[5];
+	__le32 d_magic2;
+	__le16 d_checksum;
+	__le16 d_npartitions;
+	__le32 d_bbsize;
+	__le32 d_sbsize;
+	struct bsd_partition d_partitions[16];
+};
+
+struct unixware_slice {
+	__le16 s_label;
+	__le16 s_flags;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+struct unixware_vtoc {
+	__le32 v_magic;
+	__le32 v_version;
+	char v_name[8];
+	__le16 v_nslices;
+	__le16 v_unknown1;
+	__le32 v_reserved[10];
+	struct unixware_slice v_slice[16];
+};
+
+struct unixware_disklabel {
+	__le32 d_type;
+	__le32 d_magic;
+	__le32 d_version;
+	char d_serial[12];
+	__le32 d_ncylinders;
+	__le32 d_ntracks;
+	__le32 d_nsectors;
+	__le32 d_secsize;
+	__le32 d_part_start;
+	__le32 d_unknown1[12];
+	__le32 d_alt_tbl;
+	__le32 d_alt_len;
+	__le32 d_phys_cyl;
+	__le32 d_phys_trk;
+	__le32 d_phys_sec;
+	__le32 d_phys_bytes;
+	__le32 d_unknown2;
+	__le32 d_unknown3;
+	__le32 d_pad[8];
+	struct unixware_vtoc vtoc;
+};
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	long unsigned int latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_sqe {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u32 flags;
+	bool force_nonblock;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	long long unsigned int user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_submit_sqe {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long int);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_sqe)(void *, struct io_kiocb *, bool);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, long long unsigned int, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct creds;
+
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	long unsigned int account_pages;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+union uu {
+	short unsigned int us;
+	unsigned char b[2];
+};
+
+struct ZSTD_CCtx_s;
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx___2;
+
+typedef ZSTD_CCtx___2 ZSTD_CStream___2;
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_CCtx___2 zstd_cctx;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_CStream___2 zstd_cstream;
+
+typedef struct {
+	FSE_CTable CTable[59];
+	U32 scratchBuffer[30];
+	unsigned int count[13];
+	S16 norm[13];
+} HUF_CompressWeightsWksp;
+
+typedef struct {
+	HUF_CompressWeightsWksp wksp;
+	BYTE bitsToWeight[13];
+	BYTE huffWeight[255];
+} HUF_WriteCTableWksp;
+
+struct nodeElt_s {
+	U32 count;
+	U16 parent;
+	BYTE byte;
+	BYTE nbBits;
+};
+
+typedef struct nodeElt_s nodeElt;
+
+typedef struct {
+	U32 base;
+	U32 curr;
+} rankPos;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+	huffNodeTable huffNodeTbl;
+	rankPos rankPosition[32];
+} HUF_buildCTable_wksp_tables;
+
+typedef enum {
+	HUF_singleStream = 0,
+	HUF_fourStreams = 1,
+} HUF_nbStreams_e;
+
+typedef struct {
+	unsigned int count[256];
+	HUF_CElt CTable[256];
+	union {
+		HUF_buildCTable_wksp_tables buildCTable_wksp;
+		HUF_WriteCTableWksp writeCTable_wksp;
+	} wksps;
+} HUF_compress_tables_t;
+
+typedef struct {
+	U32 litLength;
+	U32 matchLength;
+} ZSTD_sequenceLength;
+
+typedef struct {
+	symbolEncodingType_e hType;
+	BYTE hufDesBuffer[128];
+	size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+typedef struct {
+	symbolEncodingType_e llType;
+	symbolEncodingType_e ofType;
+	symbolEncodingType_e mlType;
+	BYTE fseTablesBuffer[133];
+	size_t fseTablesSize;
+	size_t lastCountSize;
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+	ZSTD_hufCTablesMetadata_t hufMetadata;
+	ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+typedef struct {
+	U64 rolling;
+	U64 stopMask;
+} ldmRollingHashState_t;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	long long unsigned int frameContentSize;
+	long long unsigned int windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef enum {
+	ZSTD_use_indefinitely = 4294967295,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	int bmi2;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	void *legacyContext;
+	U32 previousLegacyVersion;
+	U32 legacyVersion;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE litBuffer[131104];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx___2;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+	const BYTE *match;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+	const BYTE *prefixStart;
+	const BYTE *dictEnd;
+	size_t pos;
+} seqState_t;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef enum {
+	ZSTD_p_noPrefetch = 0,
+	ZSTD_p_prefetch = 1,
+} ZSTD_prefetch_e;
+
+typedef u64 unative_t___2;
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t___2;
+
+struct barrett_ctx_s {
+	MPI m;
+	int m_copied;
+	int k;
+	MPI y;
+	MPI r1;
+	MPI r2;
+	MPI r3;
+};
+
+struct karatsuba_ctx {
+	struct karatsuba_ctx *next;
+	mpi_ptr_t tspace;
+	mpi_size_t tspace_size;
+	mpi_ptr_t tp;
+	mpi_size_t tp_size;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_pool {
+	size_t size;
+	char *name;
+	struct kmem_cache *slab;
+	mempool_t *pool;
+};
+
+enum {
+	IRQ_POLL_F_SCHED = 0,
+	IRQ_POLL_F_DISABLE = 1,
+};
+
+struct pldmfw_record {
+	struct list_head entry;
+	struct list_head descs;
+	const u8 *version_string;
+	u8 version_type;
+	u8 version_len;
+	u16 package_data_len;
+	u32 device_update_flags;
+	const u8 *package_data;
+	long unsigned int *component_bitmap;
+	u16 component_bitmap_len;
+};
+
+struct pldmfw_desc_tlv {
+	struct list_head entry;
+	const u8 *data;
+	u16 type;
+	u16 size;
+};
+
+struct pldmfw_component {
+	struct list_head entry;
+	u16 classification;
+	u16 identifier;
+	u16 options;
+	u16 activation_method;
+	u32 comparison_stamp;
+	u32 component_size;
+	const u8 *component_data;
+	const u8 *version_string;
+	u8 version_type;
+	u8 version_len;
+	u8 index;
+};
+
+struct pldmfw_ops;
+
+struct pldmfw {
+	const struct pldmfw_ops *ops;
+	struct device *dev;
+};
+
+struct pldmfw_ops {
+	bool (*match_record)(struct pldmfw *, struct pldmfw_record *);
+	int (*send_package_data)(struct pldmfw *, const u8 *, u16);
+	int (*send_component_table)(struct pldmfw *, struct pldmfw_component *, u8);
+	int (*flash_component)(struct pldmfw *, struct pldmfw_component *);
+	int (*finalize_update)(struct pldmfw *);
+};
+
+struct __pldm_timestamp {
+	u8 b[13];
+};
+
+struct __pldm_header {
+	uuid_t id;
+	u8 revision;
+	__le16 size;
+	struct __pldm_timestamp release_date;
+	__le16 component_bitmap_len;
+	u8 version_type;
+	u8 version_len;
+	u8 version_string[0];
+} __attribute__((packed));
+
+struct __pldmfw_record_info {
+	__le16 record_len;
+	u8 descriptor_count;
+	__le32 device_update_flags;
+	u8 version_type;
+	u8 version_len;
+	__le16 package_data_len;
+	u8 variable_record_data[0];
+} __attribute__((packed));
+
+struct __pldmfw_desc_tlv {
+	__le16 type;
+	__le16 size;
+	u8 data[0];
+};
+
+struct __pldmfw_record_area {
+	u8 record_count;
+	u8 records[0];
+};
+
+struct __pldmfw_component_info {
+	__le16 classification;
+	__le16 identifier;
+	__le32 comparison_stamp;
+	__le16 options;
+	__le16 activation_method;
+	__le32 location_offset;
+	__le32 size;
+	u8 version_type;
+	u8 version_len;
+	u8 version_string[0];
+} __attribute__((packed));
+
+struct __pldmfw_component_area {
+	__le16 component_image_count;
+	u8 components[0];
+};
+
+struct pldmfw_priv {
+	struct pldmfw *context;
+	const struct firmware *fw;
+	size_t offset;
+	struct list_head records;
+	struct list_head components;
+	const struct __pldm_header *header;
+	u16 total_header_size;
+	u16 component_bitmap_len;
+	u16 bitmap_size;
+	u16 component_count;
+	const u8 *component_start;
+	const u8 *record_start;
+	u8 record_count;
+	u32 header_crc;
+	struct pldmfw_record *matching_record;
+};
+
+struct pldm_pci_record_id {
+	int vendor;
+	int device;
+	int subsystem_vendor;
+	int subsystem_device;
+};
+
+struct ida_bitmap {
+	long unsigned int bitmap[16];
+};
+
+struct bcm2836_arm_irqchip_intc {
+	struct irq_domain *domain;
+	void *base;
+};
+
+struct acpi_table_madt {
+	struct acpi_table_header header;
+	u32 address;
+	u32 flags;
+};
+
+struct acpi_madt_generic_msi_frame {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 msi_frame_id;
+	u64 base_address;
+	u32 flags;
+	u16 spi_count;
+	u16 spi_base;
+};
+
+struct v2m_data {
+	struct list_head entry;
+	struct fwnode_handle *fwnode;
+	struct resource res;
+	void *base;
+	u32 spi_start;
+	u32 nr_spis;
+	u32 spi_offset;
+	long unsigned int *bm;
+	u32 flags;
+};
+
+struct mbigen_device {
+	struct platform_device *pdev;
+	void *base;
+};
+
+struct mvebu_pic {
+	void *base;
+	u32 parent_irq;
+	struct irq_domain *domain;
+	struct platform_device *pdev;
+};
+
+struct irqsteer_data {
+	void *regs;
+	struct clk *ipg_clk;
+	int irq[8];
+	int irq_count;
+	raw_spinlock_t lock;
+	int reg_num;
+	int channel;
+	struct irq_domain *domain;
+	u32 *saved_reg;
+};
+
+struct fsl_mc_version {
+	u32 major;
+	u32 minor;
+	u32 revision;
+};
+
+struct dpmng_rsp_get_version {
+	__le32 revision;
+	__le32 version_major;
+	__le32 version_minor;
+};
+
+enum dprc_region_type {
+	DPRC_REGION_TYPE_MC_PORTAL = 0,
+	DPRC_REGION_TYPE_QBMAN_PORTAL = 1,
+	DPRC_REGION_TYPE_QBMAN_MEM_BACKED_PORTAL = 2,
+};
+
+struct dprc_region_desc {
+	u32 base_offset;
+	u32 size;
+	u32 flags;
+	enum dprc_region_type type;
+	u64 base_address;
+};
+
+struct dprc_endpoint {
+	char type[16];
+	int id;
+	u16 if_id;
+};
+
+struct fsl_mc_addr_translation_range;
+
+struct fsl_mc {
+	struct fsl_mc_device *root_mc_bus_dev;
+	u8 num_translation_ranges;
+	struct fsl_mc_addr_translation_range *translation_ranges;
+	void *fsl_mc_regs;
+};
+
+struct fsl_mc_addr_translation_range {
+	enum dprc_region_type mc_region_type;
+	u64 start_mc_offset;
+	u64 end_mc_offset;
+	phys_addr_t start_phys_addr;
+};
+
+struct dpcon_attr {
+	int id;
+	u16 qbman_ch_id;
+	u8 num_priorities;
+};
+
+struct dpcon_notification_cfg {
+	int dpio_id;
+	u8 priority;
+	u64 user_ctx;
+};
+
+struct dpcon_cmd_open {
+	__le32 dpcon_id;
+};
+
+struct dpcon_rsp_get_attr {
+	__le32 id;
+	__le16 qbman_ch_id;
+	u8 num_priorities;
+	u8 pad;
+};
+
+struct dpcon_cmd_set_notification {
+	__le32 dpio_id;
+	u8 priority;
+	u8 pad[3];
+	__le64 user_ctx;
+};
+
+struct fsl_mc_obj_cmd_open {
+	__le32 obj_id;
+};
+
+struct vexpress_syscfg {
+	struct device *dev;
+	void *base;
+	struct list_head funcs;
+};
+
+struct vexpress_syscfg_func {
+	struct list_head list;
+	struct vexpress_syscfg *syscfg;
+	struct regmap *regmap;
+	int num_templates;
+	u32 template[0];
+};
+
+struct vexpress_config_bridge_ops {
+	struct regmap * (*regmap_init)(struct device *, void *);
+	void (*regmap_exit)(struct regmap *, void *);
+};
+
+struct vexpress_config_bridge {
+	struct vexpress_config_bridge_ops *ops;
+	void *context;
+};
+
+struct rockchip_pcie_data {
+	unsigned int pcie_conf;
+	unsigned int pcie_status;
+	unsigned int pcie_laneoff;
+};
+
+struct phy_pcie_instance {
+	struct phy *phy;
+	u32 index;
+};
+
+struct rockchip_pcie_phy {
+	struct rockchip_pcie_data *phy_data;
+	struct regmap *reg_base;
+	struct phy_pcie_instance phys[4];
+	struct mutex pcie_mutex;
+	struct reset_control *phy_rst;
+	struct clk *clk_pciephy_ref;
+	int pwr_cnt;
+	int init_cnt;
+};
+
+struct pinctrl_dt_map {
+	struct list_head node;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_map *map;
+	unsigned int num_maps;
+};
+
+struct bcm2835_pinctrl {
+	struct device *dev;
+	void *base;
+	int *wake_irq;
+	long unsigned int enabled_irq_map[2];
+	unsigned int irq_type[58];
+	struct pinctrl_dev *pctl_dev;
+	struct gpio_chip gpio_chip;
+	struct pinctrl_desc pctl_desc;
+	struct pinctrl_gpio_range gpio_range;
+	raw_spinlock_t irq_lock[2];
+};
+
+enum bcm2835_fsel {
+	BCM2835_FSEL_COUNT = 8,
+	BCM2835_FSEL_MASK = 7,
+};
+
+struct bcm_plat_data {
+	const struct gpio_chip *gpio_chip;
+	const struct pinctrl_desc *pctl_desc;
+	const struct pinctrl_gpio_range *gpio_range;
+};
+
+enum {
+	V_ARMADA_7K = 1,
+	V_ARMADA_8K_CPM = 2,
+	V_ARMADA_8K_CPS = 4,
+	V_CP115_STANDALONE = 8,
+	V_ARMADA_7K_8K_CPM = 3,
+	V_ARMADA_7K_8K_CPS = 5,
+};
+
+struct pmic_mpp_pad {
+	u16 base;
+	bool is_enabled;
+	bool out_value;
+	bool output_enabled;
+	bool input_enabled;
+	bool paired;
+	bool has_pullup;
+	unsigned int num_sources;
+	unsigned int power_source;
+	unsigned int amux_input;
+	unsigned int aout_level;
+	unsigned int pullup;
+	unsigned int function;
+	unsigned int drive_strength;
+	unsigned int dtest;
+};
+
+struct pmic_mpp_state {
+	struct device *dev;
+	struct regmap *map;
+	struct pinctrl_dev *ctrl;
+	struct gpio_chip chip;
+	struct irq_chip irq;
+};
+
+struct tegra_xusb_padctl_function {
+	const char *name;
+	const char * const *groups;
+	unsigned int num_groups;
+};
+
+struct tegra_xusb_padctl_lane;
+
+struct tegra_xusb_padctl_soc {
+	const struct pinctrl_pin_desc *pins;
+	unsigned int num_pins;
+	const struct tegra_xusb_padctl_function *functions;
+	unsigned int num_functions;
+	const struct tegra_xusb_padctl_lane *lanes;
+	unsigned int num_lanes;
+};
+
+struct tegra_xusb_padctl_lane {
+	const char *name;
+	unsigned int offset;
+	unsigned int shift;
+	unsigned int mask;
+	unsigned int iddq;
+	const unsigned int *funcs;
+	unsigned int num_funcs;
+};
+
+struct tegra_xusb_padctl {
 	struct device *dev;
 	void *regs;
-	const struct tegra186_mc_soc *soc;
+	struct mutex lock;
+	struct reset_control *rst;
+	const struct tegra_xusb_padctl_soc *soc;
+	struct pinctrl_dev *pinctrl;
+	struct pinctrl_desc desc;
+	struct phy_provider *provider;
+	struct phy *phys[2];
+	unsigned int enable;
 };
 
-struct emc_dvfs_latency {
-	uint32_t freq;
-	uint32_t latency;
+enum tegra_xusb_padctl_param {
+	TEGRA_XUSB_PADCTL_IDDQ = 0,
 };
 
-struct mrq_emc_dvfs_latency_response {
-	uint32_t num_pairs;
-	struct emc_dvfs_latency pairs[14];
+struct tegra_xusb_padctl_property {
+	const char *name;
+	enum tegra_xusb_padctl_param param;
 };
 
-struct tegra186_emc_dvfs {
-	long unsigned int latency;
-	long unsigned int rate;
+enum tegra124_function {
+	TEGRA124_FUNC_SNPS = 0,
+	TEGRA124_FUNC_XUSB = 1,
+	TEGRA124_FUNC_UART = 2,
+	TEGRA124_FUNC_PCIE = 3,
+	TEGRA124_FUNC_USB3 = 4,
+	TEGRA124_FUNC_SATA = 5,
+	TEGRA124_FUNC_RSVD = 6,
 };
 
-struct tegra186_emc {
-	struct tegra_bpmp *bpmp;
+struct davinci_gpio_platform_data {
+	bool no_auto_base;
+	u32 base;
+	u32 ngpio;
+	u32 gpio_unbanked;
+};
+
+struct davinci_gpio_regs {
+	u32 dir;
+	u32 out_data;
+	u32 set_data;
+	u32 clr_data;
+	u32 in_data;
+	u32 set_rising;
+	u32 clr_rising;
+	u32 set_falling;
+	u32 clr_falling;
+	u32 intstat;
+};
+
+typedef struct irq_chip * (*gpio_get_irq_chip_cb_t)(unsigned int);
+
+struct davinci_gpio_controller;
+
+struct davinci_gpio_irq_data {
+	void *regs;
+	struct davinci_gpio_controller *chip;
+	int bank_num;
+};
+
+struct davinci_gpio_controller {
+	struct gpio_chip chip;
+	struct irq_domain *irq_domain;
+	spinlock_t lock;
+	void *regs[5];
+	int gpio_unbanked;
+	int irqs[32];
+	struct davinci_gpio_regs context[5];
+	u32 binten_context;
+};
+
+struct tegra_gpio_bank {
+	unsigned int bank;
+	raw_spinlock_t lvl_lock[4];
+	spinlock_t dbc_lock[4];
+	u32 cnf[4];
+	u32 out[4];
+	u32 oe[4];
+	u32 int_enb[4];
+	u32 int_lvl[4];
+	u32 wake_enb[4];
+	u32 dbc_enb[4];
+	u32 dbc_cnt[4];
+};
+
+struct tegra_gpio_soc_config {
+	bool debounce_supported;
+	u32 bank_stride;
+	u32 upper_offset;
+};
+
+struct tegra_gpio_info {
+	struct device *dev;
+	void *regs;
+	struct tegra_gpio_bank *bank_info;
+	const struct tegra_gpio_soc_config *soc;
+	struct gpio_chip gc;
+	struct irq_chip ic;
+	u32 bank_count;
+	unsigned int *irqs;
+};
+
+struct stmpe_pwm {
+	struct stmpe *stmpe;
+	struct pwm_chip chip;
+	u8 last_duty;
+};
+
+struct pcie_link_state {
+	struct pci_dev *pdev;
+	struct pci_dev *downstream;
+	struct pcie_link_state *root;
+	struct pcie_link_state *parent;
+	struct list_head sibling;
+	u32 aspm_support: 7;
+	u32 aspm_enabled: 7;
+	u32 aspm_capable: 7;
+	u32 aspm_default: 7;
+	char: 4;
+	u32 aspm_disable: 7;
+	u32 clkpm_capable: 1;
+	u32 clkpm_enabled: 1;
+	u32 clkpm_default: 1;
+	u32 clkpm_disable: 1;
+};
+
+struct acpiphp_slot;
+
+struct slot {
+	struct hotplug_slot hotplug_slot;
+	struct acpiphp_slot *acpi_slot;
+	unsigned int sun;
+};
+
+struct acpiphp_slot {
+	struct list_head node;
+	struct pci_bus *bus;
+	struct list_head funcs;
+	struct slot *slot;
+	u8 device;
+	u32 flags;
+};
+
+struct acpiphp_context;
+
+struct acpiphp_bridge {
+	struct list_head list;
+	struct list_head slots;
+	struct kref ref;
+	struct acpiphp_context *context;
+	int nr_slots;
+	struct pci_bus *pci_bus;
+	struct pci_dev *pci_dev;
+	bool is_going_away;
+};
+
+struct acpiphp_func {
+	struct acpiphp_bridge *parent;
+	struct acpiphp_slot *slot;
+	struct list_head sibling;
+	u8 function;
+	u32 flags;
+};
+
+struct acpiphp_context {
+	struct acpi_hotplug_context hp;
+	struct acpiphp_func func;
+	struct acpiphp_bridge *bridge;
+	unsigned int refcount;
+};
+
+struct acpiphp_root_context {
+	struct acpi_hotplug_context hp;
+	struct acpiphp_bridge *root_bridge;
+};
+
+struct pci_bridge_emul_conf {
+	__le16 vendor;
+	__le16 device;
+	__le16 command;
+	__le16 status;
+	__le32 class_revision;
+	u8 cache_line_size;
+	u8 latency_timer;
+	u8 header_type;
+	u8 bist;
+	__le32 bar[2];
+	u8 primary_bus;
+	u8 secondary_bus;
+	u8 subordinate_bus;
+	u8 secondary_latency_timer;
+	u8 iobase;
+	u8 iolimit;
+	__le16 secondary_status;
+	__le16 membase;
+	__le16 memlimit;
+	__le16 pref_mem_base;
+	__le16 pref_mem_limit;
+	__le32 prefbaseupper;
+	__le32 preflimitupper;
+	__le16 iobaseupper;
+	__le16 iolimitupper;
+	u8 capabilities_pointer;
+	u8 reserve[3];
+	__le32 romaddr;
+	u8 intline;
+	u8 intpin;
+	__le16 bridgectrl;
+};
+
+struct pci_bridge_emul_pcie_conf {
+	u8 cap_id;
+	u8 next;
+	__le16 cap;
+	__le32 devcap;
+	__le16 devctl;
+	__le16 devsta;
+	__le32 lnkcap;
+	__le16 lnkctl;
+	__le16 lnksta;
+	__le32 slotcap;
+	__le16 slotctl;
+	__le16 slotsta;
+	__le16 rootctl;
+	__le16 rootcap;
+	__le32 rootsta;
+	__le32 devcap2;
+	__le16 devctl2;
+	__le16 devsta2;
+	__le32 lnkcap2;
+	__le16 lnkctl2;
+	__le16 lnksta2;
+	__le32 slotcap2;
+	__le16 slotctl2;
+	__le16 slotsta2;
+};
+
+typedef enum {
+	PCI_BRIDGE_EMUL_HANDLED = 0,
+	PCI_BRIDGE_EMUL_NOT_HANDLED = 1,
+} pci_bridge_emul_read_status_t;
+
+struct pci_bridge_emul;
+
+struct pci_bridge_emul_ops {
+	pci_bridge_emul_read_status_t (*read_base)(struct pci_bridge_emul *, int, u32 *);
+	pci_bridge_emul_read_status_t (*read_pcie)(struct pci_bridge_emul *, int, u32 *);
+	pci_bridge_emul_read_status_t (*read_ext)(struct pci_bridge_emul *, int, u32 *);
+	void (*write_base)(struct pci_bridge_emul *, int, u32, u32, u32);
+	void (*write_pcie)(struct pci_bridge_emul *, int, u32, u32, u32);
+	void (*write_ext)(struct pci_bridge_emul *, int, u32, u32, u32);
+};
+
+struct pci_bridge_reg_behavior;
+
+struct pci_bridge_emul {
+	struct pci_bridge_emul_conf conf;
+	struct pci_bridge_emul_pcie_conf pcie_conf;
+	const struct pci_bridge_emul_ops *ops;
+	struct pci_bridge_reg_behavior *pci_regs_behavior;
+	struct pci_bridge_reg_behavior *pcie_cap_regs_behavior;
+	void *data;
+	bool has_pcie;
+	u16 subsystem_vendor_id;
+	u16 subsystem_id;
+};
+
+enum {
+	LTSSM_DETECT_QUIET = 0,
+	LTSSM_DETECT_ACTIVE = 1,
+	LTSSM_POLLING_ACTIVE = 2,
+	LTSSM_POLLING_COMPLIANCE = 3,
+	LTSSM_POLLING_CONFIGURATION = 4,
+	LTSSM_CONFIG_LINKWIDTH_START = 5,
+	LTSSM_CONFIG_LINKWIDTH_ACCEPT = 6,
+	LTSSM_CONFIG_LANENUM_ACCEPT = 7,
+	LTSSM_CONFIG_LANENUM_WAIT = 8,
+	LTSSM_CONFIG_COMPLETE = 9,
+	LTSSM_CONFIG_IDLE = 10,
+	LTSSM_RECOVERY_RCVR_LOCK = 11,
+	LTSSM_RECOVERY_SPEED = 12,
+	LTSSM_RECOVERY_RCVR_CFG = 13,
+	LTSSM_RECOVERY_IDLE = 14,
+	LTSSM_L0 = 16,
+	LTSSM_RX_L0S_ENTRY = 17,
+	LTSSM_RX_L0S_IDLE = 18,
+	LTSSM_RX_L0S_FTS = 19,
+	LTSSM_TX_L0S_ENTRY = 20,
+	LTSSM_TX_L0S_IDLE = 21,
+	LTSSM_TX_L0S_FTS = 22,
+	LTSSM_L1_ENTRY = 23,
+	LTSSM_L1_IDLE = 24,
+	LTSSM_L2_IDLE = 25,
+	LTSSM_L2_TRANSMIT_WAKE = 26,
+	LTSSM_DISABLED = 32,
+	LTSSM_LOOPBACK_ENTRY_MASTER = 33,
+	LTSSM_LOOPBACK_ACTIVE_MASTER = 34,
+	LTSSM_LOOPBACK_EXIT_MASTER = 35,
+	LTSSM_LOOPBACK_ENTRY_SLAVE = 36,
+	LTSSM_LOOPBACK_ACTIVE_SLAVE = 37,
+	LTSSM_LOOPBACK_EXIT_SLAVE = 38,
+	LTSSM_HOT_RESET = 39,
+	LTSSM_RECOVERY_EQUALIZATION_PHASE0 = 40,
+	LTSSM_RECOVERY_EQUALIZATION_PHASE1 = 41,
+	LTSSM_RECOVERY_EQUALIZATION_PHASE2 = 42,
+	LTSSM_RECOVERY_EQUALIZATION_PHASE3 = 43,
+};
+
+struct advk_pcie {
+	struct platform_device *pdev;
+	void *base;
+	struct {
+		phys_addr_t match;
+		phys_addr_t remap;
+		phys_addr_t mask;
+		u32 actions;
+	} wins[8];
+	u8 wins_count;
+	struct irq_domain *rp_irq_domain;
+	struct irq_domain *irq_domain;
+	struct irq_chip irq_chip;
+	raw_spinlock_t irq_lock;
+	struct irq_domain *msi_domain;
+	struct irq_domain *msi_inner_domain;
+	raw_spinlock_t msi_irq_lock;
+	long unsigned int msi_used[1];
+	struct mutex msi_used_lock;
+	int link_gen;
+	struct pci_bridge_emul bridge;
+	struct gpio_desc *reset_gpio;
+	struct phy *phy;
+};
+
+struct xgene_pcie {
+	struct device_node *node;
 	struct device *dev;
 	struct clk *clk;
-	struct tegra186_emc_dvfs *dvfs;
-	unsigned int num_dvfs;
-	struct {
-		struct dentry *root;
-		long unsigned int min_rate;
-		long unsigned int max_rate;
-	} debugfs;
+	void *csr_base;
+	void *cfg_base;
+	long unsigned int cfg_addr;
+	bool link_up;
+	u32 version;
 };
 
-enum vme_resource_type {
-	VME_MASTER = 0,
-	VME_SLAVE = 1,
-	VME_DMA = 2,
-	VME_LM = 3,
+struct dw_plat_pcie {
+	struct dw_pcie *pci;
+	enum dw_pcie_device_mode mode;
 };
 
-struct vme_dma_attr {
-	u32 type;
-	void *private;
+struct dw_plat_pcie_of_data {
+	enum dw_pcie_device_mode mode;
 };
 
-struct vme_resource {
-	enum vme_resource_type type;
-	struct list_head *entry;
+struct rockchip_pcie {
+	struct dw_pcie pci;
+	void *apb_base;
+	struct phy *phy;
+	struct clk_bulk_data *clks;
+	unsigned int clk_cnt;
+	struct reset_control *rst;
+	struct gpio_desc *rst_gpio;
+	struct regulator *vpcie3v3;
+	struct irq_domain *irq_domain;
 };
 
-struct vme_bridge;
-
-struct vme_dev {
-	int num;
-	struct vme_bridge *bridge;
-	struct device dev;
-	struct list_head drv_list;
-	struct list_head bridge_list;
+struct hisi_pcie {
+	void *reg_base;
 };
 
-struct vme_callback {
-	void (*func)(int, int, void *);
-	void *priv_data;
+struct ls_g4_pcie {
+	struct mobiveil_pcie pci;
+	struct delayed_work dwork;
+	int irq;
 };
 
-struct vme_irq {
-	int count;
-	struct vme_callback callback[256];
+struct bmp_file_header {
+	u16 id;
+	u32 file_size;
+	u32 reserved;
+	u32 bitmap_offset;
+} __attribute__((packed));
+
+struct bmp_dib_header {
+	u32 dib_header_size;
+	s32 width;
+	s32 height;
+	u16 planes;
+	u16 bpp;
+	u32 compression;
+	u32 bitmap_size;
+	u32 horz_resolution;
+	u32 vert_resolution;
+	u32 colors_used;
+	u32 colors_important;
 };
 
-struct vme_slave_resource;
-
-struct vme_master_resource;
-
-struct vme_dma_list;
-
-struct vme_lm_resource;
-
-struct vme_bridge {
-	char name[16];
-	int num;
-	struct list_head master_resources;
-	struct list_head slave_resources;
-	struct list_head dma_resources;
-	struct list_head lm_resources;
-	struct list_head vme_error_handlers;
-	struct list_head devices;
-	struct device *parent;
-	void *driver_priv;
-	struct list_head bus_list;
-	struct vme_irq irq[7];
-	struct mutex irq_mtx;
-	int (*slave_get)(struct vme_slave_resource *, int *, long long unsigned int *, long long unsigned int *, dma_addr_t *, u32 *, u32 *);
-	int (*slave_set)(struct vme_slave_resource *, int, long long unsigned int, long long unsigned int, dma_addr_t, u32, u32);
-	int (*master_get)(struct vme_master_resource *, int *, long long unsigned int *, long long unsigned int *, u32 *, u32 *, u32 *);
-	int (*master_set)(struct vme_master_resource *, int, long long unsigned int, long long unsigned int, u32, u32, u32);
-	ssize_t (*master_read)(struct vme_master_resource *, void *, size_t, loff_t);
-	ssize_t (*master_write)(struct vme_master_resource *, void *, size_t, loff_t);
-	unsigned int (*master_rmw)(struct vme_master_resource *, unsigned int, unsigned int, unsigned int, loff_t);
-	int (*dma_list_add)(struct vme_dma_list *, struct vme_dma_attr *, struct vme_dma_attr *, size_t);
-	int (*dma_list_exec)(struct vme_dma_list *);
-	int (*dma_list_empty)(struct vme_dma_list *);
-	void (*irq_set)(struct vme_bridge *, int, int, int);
-	int (*irq_generate)(struct vme_bridge *, int, int);
-	int (*lm_set)(struct vme_lm_resource *, long long unsigned int, u32, u32);
-	int (*lm_get)(struct vme_lm_resource *, long long unsigned int *, u32 *, u32 *);
-	int (*lm_attach)(struct vme_lm_resource *, int, void (*)(void *), void *);
-	int (*lm_detach)(struct vme_lm_resource *, int);
-	int (*slot_get)(struct vme_bridge *);
-	void * (*alloc_consistent)(struct device *, size_t, dma_addr_t *);
-	void (*free_consistent)(struct device *, size_t, void *, dma_addr_t);
+struct acpi_hardware_id {
+	struct list_head list;
+	const char *id;
 };
 
-struct vme_driver {
+struct acpi_data_node {
 	const char *name;
-	int (*match)(struct vme_dev *);
-	int (*probe)(struct vme_dev *);
-	int (*remove)(struct vme_dev *);
-	struct device_driver driver;
-	struct list_head devices;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct fwnode_handle *parent;
+	struct acpi_device_data data;
+	struct list_head sibling;
+	struct kobject kobj;
+	struct completion kobj_done;
 };
 
-struct vme_master_resource {
+struct acpi_data_node_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct acpi_data_node *, char *);
+	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
+};
+
+typedef u32 acpi_event_status;
+
+struct acpi_table_ecdt {
+	struct acpi_table_header header;
+	struct acpi_generic_address control;
+	struct acpi_generic_address data;
+	u32 uid;
+	u8 gpe;
+	u8 id[1];
+} __attribute__((packed));
+
+enum acpi_bus_device_type {
+	ACPI_BUS_TYPE_DEVICE = 0,
+	ACPI_BUS_TYPE_POWER = 1,
+	ACPI_BUS_TYPE_PROCESSOR = 2,
+	ACPI_BUS_TYPE_THERMAL = 3,
+	ACPI_BUS_TYPE_POWER_BUTTON = 4,
+	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
+	ACPI_BUS_TYPE_ECDT_EC = 6,
+	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
+};
+
+enum acpi_ec_event_state {
+	EC_EVENT_READY = 0,
+	EC_EVENT_IN_PROGRESS = 1,
+	EC_EVENT_COMPLETE = 2,
+};
+
+struct transaction;
+
+struct acpi_ec {
+	acpi_handle handle;
+	int gpe;
+	int irq;
+	long unsigned int command_addr;
+	long unsigned int data_addr;
+	bool global_lock;
+	long unsigned int flags;
+	long unsigned int reference_count;
+	struct mutex mutex;
+	wait_queue_head_t wait;
 	struct list_head list;
-	struct vme_bridge *parent;
+	struct transaction *curr;
 	spinlock_t lock;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
-	u32 width_attr;
-	struct resource bus_resource;
-	void *kern_base;
+	struct work_struct work;
+	long unsigned int timestamp;
+	enum acpi_ec_event_state event_state;
+	unsigned int events_to_process;
+	unsigned int events_in_progress;
+	unsigned int queries_in_progress;
+	bool busy_polling;
+	unsigned int polling_guard;
 };
 
-struct vme_slave_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
+struct transaction {
+	const u8 *wdata;
+	u8 *rdata;
+	short unsigned int irq_count;
+	u8 command;
+	u8 wi;
+	u8 ri;
+	u8 wlen;
+	u8 rlen;
+	u8 flags;
 };
 
-struct vme_dma_pattern {
-	u32 pattern;
-	u32 type;
+typedef int (*acpi_ec_query_func)(void *);
+
+enum ec_command {
+	ACPI_EC_COMMAND_READ = 128,
+	ACPI_EC_COMMAND_WRITE = 129,
+	ACPI_EC_BURST_ENABLE = 130,
+	ACPI_EC_BURST_DISABLE = 131,
+	ACPI_EC_COMMAND_QUERY = 132,
 };
 
-struct vme_dma_pci {
-	dma_addr_t address;
+enum {
+	EC_FLAGS_QUERY_ENABLED = 0,
+	EC_FLAGS_EVENT_HANDLER_INSTALLED = 1,
+	EC_FLAGS_EC_HANDLER_INSTALLED = 2,
+	EC_FLAGS_QUERY_METHODS_INSTALLED = 3,
+	EC_FLAGS_STARTED = 4,
+	EC_FLAGS_STOPPED = 5,
+	EC_FLAGS_EVENTS_MASKED = 6,
 };
 
-struct vme_dma_vme {
-	long long unsigned int address;
-	u32 aspace;
-	u32 cycle;
-	u32 dwidth;
+struct acpi_ec_query_handler {
+	struct list_head node;
+	acpi_ec_query_func func;
+	acpi_handle handle;
+	void *data;
+	u8 query_bit;
+	struct kref kref;
 };
 
-struct vme_dma_resource;
-
-struct vme_dma_list {
-	struct list_head list;
-	struct vme_dma_resource *parent;
-	struct list_head entries;
-	struct mutex mtx;
+struct acpi_ec_query {
+	struct transaction transaction;
+	struct work_struct work;
+	struct acpi_ec_query_handler *handler;
+	struct acpi_ec *ec;
 };
 
-struct vme_dma_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	struct list_head pending;
-	struct list_head running;
-	u32 route_attr;
-};
-
-struct vme_lm_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	int monitors;
-};
-
-struct vme_error_handler {
-	struct list_head list;
-	long long unsigned int start;
-	long long unsigned int end;
-	long long unsigned int first_error;
-	u32 aspace;
-	unsigned int num_errors;
-};
-
-struct powercap_control_type;
-
-struct powercap_control_type_ops {
-	int (*set_enable)(struct powercap_control_type *, bool);
-	int (*get_enable)(struct powercap_control_type *, bool *);
-	int (*release)(struct powercap_control_type *);
-};
-
-struct powercap_control_type {
-	struct device dev;
-	struct idr idr;
-	int nr_zones;
-	const struct powercap_control_type_ops *ops;
-	struct mutex lock;
-	bool allocated;
+struct acpi_power_dependent_device {
+	struct device *dev;
 	struct list_head node;
 };
 
-struct powercap_zone;
-
-struct powercap_zone_ops {
-	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
-	int (*get_energy_uj)(struct powercap_zone *, u64 *);
-	int (*reset_energy_uj)(struct powercap_zone *);
-	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
-	int (*get_power_uw)(struct powercap_zone *, u64 *);
-	int (*set_enable)(struct powercap_zone *, bool);
-	int (*get_enable)(struct powercap_zone *, bool *);
-	int (*release)(struct powercap_zone *);
+struct acpi_power_resource {
+	struct acpi_device device;
+	struct list_head list_node;
+	u32 system_level;
+	u32 order;
+	unsigned int ref_count;
+	u8 state;
+	struct mutex resource_lock;
+	struct list_head dependents;
 };
 
-struct powercap_zone_constraint;
+struct acpi_power_resource_entry {
+	struct list_head node;
+	struct acpi_power_resource *resource;
+};
 
-struct powercap_zone {
+struct acpi_table_wdat {
+	struct acpi_table_header header;
+	u32 header_length;
+	u16 pci_segment;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u8 reserved[3];
+	u32 timer_period;
+	u32 max_count;
+	u32 min_count;
+	u8 flags;
+	u8 reserved2[3];
+	u32 entries;
+};
+
+struct acpi_wdat_entry {
+	u8 action;
+	u8 instruction;
+	u16 reserved;
+	struct acpi_generic_address register_region;
+	u32 value;
+	u32 mask;
+} __attribute__((packed));
+
+typedef enum {
+	ACPI_TRACE_AML_METHOD = 0,
+	ACPI_TRACE_AML_OPCODE = 1,
+	ACPI_TRACE_AML_REGION = 2,
+} acpi_trace_event_type;
+
+enum acpi_hest_notify_types {
+	ACPI_HEST_NOTIFY_POLLED = 0,
+	ACPI_HEST_NOTIFY_EXTERNAL = 1,
+	ACPI_HEST_NOTIFY_LOCAL = 2,
+	ACPI_HEST_NOTIFY_SCI = 3,
+	ACPI_HEST_NOTIFY_NMI = 4,
+	ACPI_HEST_NOTIFY_CMCI = 5,
+	ACPI_HEST_NOTIFY_MCE = 6,
+	ACPI_HEST_NOTIFY_GPIO = 7,
+	ACPI_HEST_NOTIFY_SEA = 8,
+	ACPI_HEST_NOTIFY_SEI = 9,
+	ACPI_HEST_NOTIFY_GSIV = 10,
+	ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,
+	ACPI_HEST_NOTIFY_RESERVED = 12,
+};
+
+enum mf_flags {
+	MF_COUNT_INCREASED = 1,
+	MF_ACTION_REQUIRED = 2,
+	MF_MUST_KILL = 4,
+	MF_SOFT_OFFLINE = 8,
+	MF_UNPOISON = 16,
+	MF_SW_SIMULATED = 32,
+	MF_NO_RETRY = 64,
+};
+
+struct ghes_estatus_node {
+	struct llist_node llnode;
+	struct acpi_hest_generic *generic;
+	struct ghes *ghes;
+	int task_work_cpu;
+	struct callback_head task_work;
+};
+
+struct ghes_estatus_cache {
+	u32 estatus_len;
+	atomic_t count;
+	struct acpi_hest_generic *generic;
+	long long unsigned int time_in;
+	struct callback_head rcu;
+};
+
+struct ghes_vendor_record_entry {
+	struct work_struct work;
+	int error_severity;
+	char vendor_record[0];
+};
+
+struct clk_multiplier {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_composite {
+	struct clk_hw hw;
+	struct clk_ops ops;
+	struct clk_hw *mux_hw;
+	struct clk_hw *rate_hw;
+	struct clk_hw *gate_hw;
+	const struct clk_ops *mux_ops;
+	const struct clk_ops *rate_ops;
+	const struct clk_ops *gate_ops;
+};
+
+enum rk817_reg_id {
+	RK817_ID_DCDC1 = 0,
+	RK817_ID_DCDC2 = 1,
+	RK817_ID_DCDC3 = 2,
+	RK817_ID_DCDC4 = 3,
+	RK817_ID_LDO1 = 4,
+	RK817_ID_LDO2 = 5,
+	RK817_ID_LDO3 = 6,
+	RK817_ID_LDO4 = 7,
+	RK817_ID_LDO5 = 8,
+	RK817_ID_LDO6 = 9,
+	RK817_ID_LDO7 = 10,
+	RK817_ID_LDO8 = 11,
+	RK817_ID_LDO9 = 12,
+	RK817_ID_BOOST = 13,
+	RK817_ID_BOOST_OTG_SW = 14,
+	RK817_NUM_REGULATORS = 15,
+};
+
+enum {
+	RK805_ID = 32848,
+	RK808_ID = 0,
+	RK809_ID = 32912,
+	RK817_ID = 33136,
+	RK818_ID = 33152,
+};
+
+struct rk808 {
+	struct i2c_client *i2c;
+	struct regmap_irq_chip_data *irq_data;
+	struct regmap *regmap;
+	long int variant;
+	const struct regmap_config *regmap_cfg;
+	const struct regmap_irq_chip *regmap_irq_chip;
+};
+
+struct rk808_clkout {
+	struct rk808 *rk808;
+	struct clk_hw clkout1_hw;
+	struct clk_hw clkout2_hw;
+};
+
+struct clk_fixup_mux {
+	struct clk_mux mux;
+	const struct clk_ops *ops;
+	void (*fixup)(u32 *);
+};
+
+enum imx_pfdv2_type {
+	IMX_PFDV2_IMX7ULP = 0,
+	IMX_PFDV2_IMX8ULP = 1,
+};
+
+struct clk_pfdv2 {
+	struct clk_hw hw;
+	void *reg;
+	u8 gate_bit;
+	u8 vld_bit;
+	u8 frac_off;
+};
+
+struct clk_sscg_pll_setup {
+	int divr1;
+	int divf1;
+	int divr2;
+	int divf2;
+	int divq;
+	int bypass;
+	uint64_t vco1;
+	uint64_t vco2;
+	uint64_t fout;
+	uint64_t ref;
+	uint64_t ref_div1;
+	uint64_t ref_div2;
+	uint64_t fout_request;
+	int fout_error;
+};
+
+struct clk_sscg_pll {
+	struct clk_hw hw;
+	const struct clk_ops ops;
+	void *base;
+	struct clk_sscg_pll_setup setup;
+	u8 parent;
+	u8 bypass1;
+	u8 bypass2;
+};
+
+struct meson_clk_phase_data {
+	struct parm ph;
+};
+
+struct meson_clk_triphase_data {
+	struct parm ph0;
+	struct parm ph1;
+	struct parm ph2;
+};
+
+struct meson_sclk_ws_inv_data {
+	struct parm ph;
+	struct parm ws;
+};
+
+struct meson_sclk_div_data {
+	struct parm div;
+	struct parm hi;
+	unsigned int cached_div;
+	struct clk_duty cached_duty;
+};
+
+struct axg_audio_reset_data {
+	struct reset_controller_dev rstc;
+	struct regmap *map;
+	unsigned int offset;
+};
+
+struct audioclk_data {
+	struct clk_regmap * const *regmap_clks;
+	unsigned int regmap_clk_num;
+	struct clk_hw_onecell_data *hw_onecell_data;
+	unsigned int reset_offset;
+	unsigned int reset_num;
+};
+
+struct clk_dyn_rcg {
+	u32 ns_reg[2];
+	u32 md_reg[2];
+	u32 bank_reg;
+	u8 mux_sel_bit;
+	struct mn mn[2];
+	struct pre_div p[2];
+	struct src_sel s[2];
+	const struct freq_tbl *freq_tbl;
+	struct clk_regmap___2 clkr;
+};
+
+struct frac_entry {
+	int num;
+	int den;
+};
+
+struct hfpll_data {
+	u32 mode_reg;
+	u32 l_reg;
+	u32 m_reg;
+	u32 n_reg;
+	u32 user_reg;
+	u32 droop_reg;
+	u32 config_reg;
+	u32 status_reg;
+	u8 lock_bit;
+	u32 droop_val;
+	u32 config_val;
+	u32 user_val;
+	u32 user_vco_mask;
+	long unsigned int low_vco_max_rate;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+};
+
+struct clk_hfpll {
+	const struct hfpll_data *d;
+	int init_done;
+	struct clk_regmap___2 clkr;
+	spinlock_t lock;
+};
+
+enum {
+	P_XO___3 = 0,
+	P_GPLL0___3 = 1,
+	P_GPLL0_AUX = 2,
+	P_BIMC = 3,
+	P_GPLL1___2 = 4,
+	P_GPLL1_AUX = 5,
+	P_GPLL2 = 6,
+	P_GPLL2_AUX = 7,
+	P_SLEEP_CLK___4 = 8,
+	P_DSI0_PHYPLL_BYTE = 9,
+	P_DSI0_PHYPLL_DSI = 10,
+	P_EXT_PRI_I2S = 11,
+	P_EXT_SEC_I2S = 12,
+	P_EXT_MCLK = 13,
+};
+
+struct clk_notifier_data {
+	struct clk *clk;
+	long unsigned int old_rate;
+	long unsigned int new_rate;
+};
+
+struct rockchip_clk_frac {
+	struct notifier_block clk_nb;
+	struct clk_fractional_divider div;
+	struct clk_gate gate;
+	struct clk_mux mux;
+	const struct clk_ops *mux_ops;
+	int mux_frac_idx;
+	bool rate_change_remuxed;
+	int rate_change_idx;
+};
+
+enum rk3308_plls {
+	apll___3 = 0,
+	dpll___4 = 1,
+	vpll0 = 2,
+	vpll1 = 3,
+};
+
+struct ccu_reset {
+	void *base;
+	struct ccu_reset_map *reset_map;
+	spinlock_t *lock;
+	struct reset_controller_dev rcdev;
+};
+
+struct _ccu_nm {
+	long unsigned int n;
+	long unsigned int min_n;
+	long unsigned int max_n;
+	long unsigned int m;
+	long unsigned int min_m;
+	long unsigned int max_m;
+};
+
+enum {
+	CMD_CLK_GET_RATE = 1,
+	CMD_CLK_SET_RATE = 2,
+	CMD_CLK_ROUND_RATE = 3,
+	CMD_CLK_GET_PARENT = 4,
+	CMD_CLK_SET_PARENT = 5,
+	CMD_CLK_IS_ENABLED = 6,
+	CMD_CLK_ENABLE = 7,
+	CMD_CLK_DISABLE = 8,
+	CMD_CLK_GET_ALL_INFO = 14,
+	CMD_CLK_GET_MAX_CLK_ID = 15,
+	CMD_CLK_GET_FMAX_AT_VMIN = 16,
+	CMD_CLK_MAX = 17,
+};
+
+struct cmd_clk_get_rate_request {};
+
+struct cmd_clk_get_rate_response {
+	int64_t rate;
+};
+
+struct cmd_clk_set_rate_request {
+	int32_t unused;
+	int64_t rate;
+} __attribute__((packed));
+
+struct cmd_clk_set_rate_response {
+	int64_t rate;
+};
+
+struct cmd_clk_round_rate_request {
+	int32_t unused;
+	int64_t rate;
+} __attribute__((packed));
+
+struct cmd_clk_round_rate_response {
+	int64_t rate;
+};
+
+struct cmd_clk_get_parent_request {};
+
+struct cmd_clk_get_parent_response {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_set_parent_request {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_set_parent_response {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_is_enabled_request {};
+
+struct cmd_clk_is_enabled_response {
+	int32_t state;
+};
+
+struct cmd_clk_enable_request {};
+
+struct cmd_clk_disable_request {};
+
+struct cmd_clk_get_all_info_request {};
+
+struct cmd_clk_get_all_info_response {
+	uint32_t flags;
+	uint32_t parent;
+	uint32_t parents[16];
+	uint8_t num_parents;
+	uint8_t name[40];
+} __attribute__((packed));
+
+struct cmd_clk_get_max_clk_id_request {};
+
+struct cmd_clk_get_max_clk_id_response {
+	uint32_t max_id;
+};
+
+struct cmd_clk_get_fmax_at_vmin_request {};
+
+struct mrq_clk_request {
+	uint32_t cmd_and_id;
+	union {
+		struct cmd_clk_get_rate_request clk_get_rate;
+		struct cmd_clk_set_rate_request clk_set_rate;
+		struct cmd_clk_round_rate_request clk_round_rate;
+		struct cmd_clk_get_parent_request clk_get_parent;
+		struct cmd_clk_set_parent_request clk_set_parent;
+		struct cmd_clk_enable_request clk_enable;
+		struct cmd_clk_disable_request clk_disable;
+		struct cmd_clk_is_enabled_request clk_is_enabled;
+		struct cmd_clk_get_all_info_request clk_get_all_info;
+		struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id;
+		struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin;
+	};
+} __attribute__((packed));
+
+struct tegra_bpmp_clk {
+	struct clk_hw hw;
+	struct tegra_bpmp *bpmp;
+	unsigned int id;
+	unsigned int num_parents;
+	unsigned int *parents;
+};
+
+struct tegra_bpmp_clk_info {
+	unsigned int id;
+	char name[40];
+	unsigned int parents[16];
+	unsigned int num_parents;
+	long unsigned int flags;
+};
+
+struct tegra_bpmp_clk_message {
+	unsigned int cmd;
+	unsigned int id;
+	struct {
+		const void *data;
+		size_t size;
+	} tx;
+	struct {
+		void *data;
+		size_t size;
+		int ret;
+	} rx;
+};
+
+struct mbus_dram_window {
+	u8 cs_index;
+	u8 mbus_attr;
+	u64 base;
+	u64 size;
+};
+
+struct mbus_dram_target_info {
+	u8 mbus_dram_target_id;
+	int num_cs;
+	struct mbus_dram_window cs[4];
+};
+
+struct mv_xor_channel_data {
+	dma_cap_mask_t cap_mask;
+};
+
+struct mv_xor_platform_data {
+	struct mv_xor_channel_data *channels;
+};
+
+struct mv_xor_chan;
+
+struct mv_xor_device {
+	void *xor_base;
+	void *xor_high_base;
+	struct clk *clk;
+	struct mv_xor_chan *channels[2];
+	int xor_type;
+	u32 win_start[8];
+	u32 win_end[8];
+};
+
+struct mv_xor_chan {
+	int pending;
+	spinlock_t lock;
+	void *mmr_base;
+	void *mmr_high_base;
+	unsigned int idx;
+	int irq;
+	struct list_head chain;
+	struct list_head free_slots;
+	struct list_head allocated_slots;
+	struct list_head completed_slots;
+	dma_addr_t dma_desc_pool;
+	void *dma_desc_pool_virt;
+	size_t pool_size;
+	struct dma_device dmadev;
+	struct dma_chan dmachan;
+	int slots_allocated;
+	struct tasklet_struct irq_tasklet;
+	int op_in_desc;
+	char dummy_src[128];
+	char dummy_dst[128];
+	dma_addr_t dummy_src_addr;
+	dma_addr_t dummy_dst_addr;
+	u32 saved_config_reg;
+	u32 saved_int_mask_reg;
+	struct mv_xor_device *xordev;
+};
+
+struct mv_xor_desc_slot {
+	struct list_head node;
+	struct list_head sg_tx_list;
+	enum dma_transaction_type type;
+	void *hw_desc;
+	u16 idx;
+	struct dma_async_tx_descriptor async_tx;
+};
+
+struct mv_xor_desc {
+	u32 status;
+	u32 crc32_result;
+	u32 desc_command;
+	u32 phy_next_desc;
+	u32 byte_count;
+	u32 phy_dest_addr;
+	u32 phy_src_addr[8];
+	u32 reserved0;
+	u32 reserved1;
+};
+
+enum mv_xor_type {
+	XOR_ORION = 0,
+	XOR_ARMADA_38X = 1,
+	XOR_ARMADA_37XX = 2,
+};
+
+enum mv_xor_mode {
+	XOR_MODE_IN_REG = 0,
+	XOR_MODE_IN_DESC = 1,
+};
+
+struct rpi_power_domain {
+	u32 domain;
+	bool enabled;
+	bool old_interface;
+	struct generic_pm_domain base;
+	struct rpi_firmware *fw;
+};
+
+struct rpi_power_domains {
+	bool has_new_interface;
+	struct genpd_onecell_data xlate;
+	struct rpi_firmware *fw;
+	struct rpi_power_domain domains[23];
+};
+
+struct rpi_power_domain_packet {
+	u32 domain;
+	u32 on;
+};
+
+struct qm_fd {
+	union {
+		struct {
+			u8 cfg8b_w1;
+			u8 bpid;
+			u8 cfg8b_w3;
+			u8 addr_hi;
+			__be32 addr_lo;
+		};
+		__be64 data;
+	};
+	__be32 cfg;
+	union {
+		__be32 cmd;
+		__be32 status;
+	};
+};
+
+struct qm_dqrr_entry {
+	u8 verb;
+	u8 stat;
+	__be16 seqnum;
+	u8 tok;
+	u8 __reserved2[3];
+	__be32 fqid;
+	__be32 context_b;
+	struct qm_fd fd;
+	u8 __reserved4[32];
+};
+
+union qm_mr_entry {
+	struct {
+		u8 verb;
+		u8 __reserved[63];
+	};
+	struct {
+		u8 verb;
+		u8 dca;
+		__be16 seqnum;
+		u8 rc;
+		u8 __reserved[3];
+		__be32 fqid;
+		__be32 tag;
+		struct qm_fd fd;
+		u8 __reserved1[32];
+	} ern;
+	struct {
+		u8 verb;
+		u8 fqs;
+		u8 __reserved1[6];
+		__be32 fqid;
+		__be32 context_b;
+		u8 __reserved2[48];
+	} fq;
+};
+
+struct qm_fqd_stashing {
+	u8 exclusive;
+	u8 cl;
+};
+
+struct qm_fqd_oac {
+	u8 oac;
+	s8 oal;
+};
+
+struct qm_fqd {
+	u8 orpc;
+	u8 cgid;
+	__be16 fq_ctrl;
+	__be16 dest_wq;
+	__be16 ics_cred;
+	union {
+		__be16 td;
+		struct qm_fqd_oac oac_init;
+	};
+	__be32 context_b;
+	union {
+		__be64 opaque;
+		struct {
+			__be32 hi;
+			__be32 lo;
+		};
+		struct {
+			struct qm_fqd_stashing stashing;
+			__be16 context_hi;
+			__be32 context_lo;
+		};
+	} context_a;
+	struct qm_fqd_oac oac_query;
+} __attribute__((packed));
+
+struct qm_cgr_wr_parm {
+	__be32 word;
+};
+
+struct qm_cgr_cs_thres {
+	__be16 word;
+};
+
+struct __qm_mc_cgr {
+	struct qm_cgr_wr_parm wr_parm_g;
+	struct qm_cgr_wr_parm wr_parm_y;
+	struct qm_cgr_wr_parm wr_parm_r;
+	u8 wr_en_g;
+	u8 wr_en_y;
+	u8 wr_en_r;
+	u8 cscn_en;
+	union {
+		struct {
+			__be16 cscn_targ_upd_ctrl;
+			__be16 cscn_targ_dcp_low;
+		};
+		__be32 cscn_targ;
+	};
+	u8 cstd_en;
+	u8 cs;
+	struct qm_cgr_cs_thres cs_thres;
+	u8 mode;
+} __attribute__((packed));
+
+struct qm_mcc_initfq {
+	u8 __reserved1[2];
+	__be16 we_mask;
+	__be32 fqid;
+	__be16 count;
+	struct qm_fqd fqd;
+	u8 __reserved2[30];
+} __attribute__((packed));
+
+struct qm_mcc_initcgr {
+	u8 __reserve1[2];
+	__be16 we_mask;
+	struct __qm_mc_cgr cgr;
+	u8 __reserved2[2];
+	u8 cgid;
+	u8 __reserved3[32];
+};
+
+enum qman_cb_dqrr_result {
+	qman_cb_dqrr_consume = 0,
+	qman_cb_dqrr_park = 1,
+	qman_cb_dqrr_defer = 2,
+	qman_cb_dqrr_stop = 3,
+	qman_cb_dqrr_consume_stop = 4,
+};
+
+struct qman_portal;
+
+struct qman_fq;
+
+typedef enum qman_cb_dqrr_result (*qman_cb_dqrr)(struct qman_portal *, struct qman_fq *, const struct qm_dqrr_entry *, bool);
+
+struct qm_addr {
+	void *ce;
+	__be32 *ce_be;
+	void *ci;
+};
+
+struct qm_eqcr_entry;
+
+struct qm_eqcr {
+	struct qm_eqcr_entry *ring;
+	struct qm_eqcr_entry *cursor;
+	u8 ci;
+	u8 available;
+	u8 ithresh;
+	u8 vbit;
+};
+
+struct qm_dqrr {
+	const struct qm_dqrr_entry *ring;
+	const struct qm_dqrr_entry *cursor;
+	u8 pi;
+	u8 ci;
+	u8 fill;
+	u8 ithresh;
+	u8 vbit;
+};
+
+struct qm_mr {
+	union qm_mr_entry *ring;
+	union qm_mr_entry *cursor;
+	u8 pi;
+	u8 ci;
+	u8 fill;
+	u8 ithresh;
+	u8 vbit;
+};
+
+union qm_mc_command;
+
+union qm_mc_result;
+
+struct qm_mc {
+	union qm_mc_command *cr;
+	union qm_mc_result *rr;
+	u8 rridx;
+	u8 vbit;
+};
+
+struct qm_portal {
+	struct qm_addr addr;
+	struct qm_eqcr eqcr;
+	struct qm_dqrr dqrr;
+	struct qm_mr mr;
+	struct qm_mc mc;
+	long: 64;
+};
+
+struct qm_portal_config;
+
+struct qman_cgrs;
+
+struct qman_portal {
+	struct qm_portal p;
+	long unsigned int bits;
+	long unsigned int irq_sources;
+	u32 use_eqcr_ci_stashing;
+	struct qman_fq *vdqcr_owned;
+	u32 sdqcr;
+	const struct qm_portal_config *config;
+	struct qman_cgrs *cgrs;
+	struct list_head cgr_cbs;
+	spinlock_t cgr_lock;
+	struct work_struct congestion_work;
+	struct work_struct mr_work;
+	char irqname[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*qman_cb_mr)(struct qman_portal *, struct qman_fq *, const union qm_mr_entry *);
+
+struct qman_fq_cb {
+	qman_cb_dqrr dqrr;
+	qman_cb_mr ern;
+	qman_cb_mr fqs;
+};
+
+enum qman_fq_state {
+	qman_fq_state_oos = 0,
+	qman_fq_state_parked = 1,
+	qman_fq_state_sched = 2,
+	qman_fq_state_retired = 3,
+};
+
+struct qman_fq {
+	struct qman_fq_cb cb;
+	u32 fqid;
+	u32 idx;
+	long unsigned int flags;
+	enum qman_fq_state state;
+	int cgr_groupid;
+};
+
+struct qman_cgr;
+
+typedef void (*qman_cb_cgr)(struct qman_portal *, struct qman_cgr *, int);
+
+struct qman_cgr {
+	u32 cgrid;
+	qman_cb_cgr cb;
+	u16 chan;
+	struct list_head node;
+};
+
+struct qm_mcr_queryfq_np {
+	u8 verb;
+	u8 result;
+	u8 __reserved1;
+	u8 state;
+	u32 fqd_link;
+	u16 odp_seq;
+	u16 orp_nesn;
+	u16 orp_ea_hseq;
+	u16 orp_ea_tseq;
+	u32 orp_ea_hptr;
+	u32 orp_ea_tptr;
+	u32 pfdr_hptr;
+	u32 pfdr_tptr;
+	u8 __reserved2[5];
+	u8 is;
+	u16 ics_surp;
+	u32 byte_cnt;
+	u32 frm_cnt;
+	u32 __reserved3;
+	u16 ra1_sfdr;
+	u16 ra2_sfdr;
+	u16 __reserved4;
+	u16 od1_sfdr;
+	u16 od2_sfdr;
+	u16 od3_sfdr;
+};
+
+struct qm_mcr_querywq {
+	u8 verb;
+	u8 result;
+	u16 channel_wq;
+	u8 __reserved[28];
+	u32 wq_len[8];
+};
+
+struct __qm_mcr_querycongestion {
+	u32 state[8];
+};
+
+struct qm_mcr_querycongestion {
+	u8 verb;
+	u8 result;
+	u8 __reserved[30];
+	struct __qm_mcr_querycongestion state;
+};
+
+struct qm_mcr_querycgr {
+	u8 verb;
+	u8 result;
+	u16 __reserved1;
+	struct __qm_mc_cgr cgr;
+	u8 __reserved2[6];
+	u8 i_bcnt_hi;
+	__be32 i_bcnt_lo;
+	u8 __reserved3[3];
+	u8 a_bcnt_hi;
+	__be32 a_bcnt_lo;
+	__be32 cscn_targ_swp[4];
+};
+
+struct qman_cgrs {
+	struct __qm_mcr_querycongestion q;
+};
+
+struct qm_portal_config {
+	void *addr_virt_ce;
+	void *addr_virt_ci;
+	struct device *dev;
+	struct iommu_domain *iommu_domain;
+	struct list_head list;
+	int cpu;
+	int irq;
+	u16 channel;
+	u32 pools;
+};
+
+enum qm_eqcr_pmode {
+	qm_eqcr_pci = 0,
+	qm_eqcr_pce = 1,
+	qm_eqcr_pvb = 2,
+};
+
+enum qm_dqrr_dmode {
+	qm_dqrr_dpush = 0,
+	qm_dqrr_dpull = 1,
+};
+
+enum qm_dqrr_pmode {
+	qm_dqrr_pci = 0,
+	qm_dqrr_pce = 1,
+	qm_dqrr_pvb = 2,
+};
+
+enum qm_dqrr_cmode {
+	qm_dqrr_cci = 0,
+	qm_dqrr_cce = 1,
+	qm_dqrr_cdc = 2,
+};
+
+enum qm_mr_pmode {
+	qm_mr_pci = 0,
+	qm_mr_pce = 1,
+	qm_mr_pvb = 2,
+};
+
+enum qm_mr_cmode {
+	qm_mr_cci = 0,
+	qm_mr_cce = 1,
+};
+
+struct qm_eqcr_entry {
+	u8 _ncw_verb;
+	u8 dca;
+	__be16 seqnum;
+	u8 __reserved[4];
+	__be32 fqid;
+	__be32 tag;
+	struct qm_fd fd;
+	u8 __reserved3[32];
+};
+
+struct qm_mcc_fq {
+	u8 _ncw_verb;
+	u8 __reserved1[3];
+	__be32 fqid;
+	u8 __reserved2[56];
+};
+
+struct qm_mcc_cgr {
+	u8 _ncw_verb;
+	u8 __reserved1[30];
+	u8 cgid;
+	u8 __reserved2[32];
+};
+
+union qm_mc_command {
+	struct {
+		u8 _ncw_verb;
+		u8 __reserved[63];
+	};
+	struct qm_mcc_initfq initfq;
+	struct qm_mcc_initcgr initcgr;
+	struct qm_mcc_fq fq;
+	struct qm_mcc_cgr cgr;
+};
+
+struct qm_mcr_queryfq {
+	u8 verb;
+	u8 result;
+	u8 __reserved1[8];
+	struct qm_fqd fqd;
+	u8 __reserved2[30];
+} __attribute__((packed));
+
+struct qm_mcr_alterfq {
+	u8 verb;
+	u8 result;
+	u8 fqs;
+	u8 __reserved1[61];
+};
+
+union qm_mc_result {
+	struct {
+		u8 verb;
+		u8 result;
+		u8 __reserved1[62];
+	};
+	struct qm_mcr_queryfq queryfq;
+	struct qm_mcr_alterfq alterfq;
+	struct qm_mcr_querycgr querycgr;
+	struct qm_mcr_querycongestion querycongestion;
+	struct qm_mcr_querywq querywq;
+	struct qm_mcr_queryfq_np queryfq_np;
+};
+
+struct meson_gx_soc_id {
+	const char *name;
+	unsigned int id;
+};
+
+struct meson_gx_package_id {
+	const char *name;
+	unsigned int major_id;
+	unsigned int pack_id;
+	unsigned int pack_mask;
+};
+
+struct tcs_request {
+	enum rpmh_state state;
+	u32 wait_for_compl;
+	u32 num_cmds;
+	struct tcs_cmd *cmds;
+};
+
+struct rsc_drv;
+
+struct tcs_group {
+	struct rsc_drv *drv;
+	int type;
+	u32 mask;
+	u32 offset;
+	int num_tcs;
+	int ncpt;
+	const struct tcs_request *req[3];
+	long unsigned int slots[1];
+};
+
+struct rpmh_ctrlr {
+	struct list_head cache;
+	spinlock_t cache_lock;
+	bool dirty;
+	struct list_head batch_cache;
+};
+
+struct rsc_drv {
+	const char *name;
+	void *tcs_base;
 	int id;
-	char *name;
-	void *control_type_inst;
-	const struct powercap_zone_ops *ops;
+	int num_tcs;
+	struct notifier_block rsc_pm;
+	atomic_t cpus_in_pm;
+	struct tcs_group tcs[4];
+	long unsigned int tcs_in_use[1];
+	spinlock_t lock;
+	wait_queue_head_t tcs_wait;
+	struct rpmh_ctrlr client;
+};
+
+struct rpmh_request {
+	struct tcs_request msg;
+	struct tcs_cmd cmd[16];
+	struct completion *completion;
+	const struct device *dev;
+	int err;
+	bool needs_free;
+};
+
+struct cache_req___2 {
+	u32 addr;
+	u32 sleep_val;
+	u32 wake_val;
+	struct list_head list;
+};
+
+struct batch_cache_req {
+	struct list_head list;
+	int count;
+	struct rpmh_request rpm_msgs[0];
+};
+
+enum zynqmp_pm_request_ack {
+	ZYNQMP_PM_REQUEST_ACK_NO = 1,
+	ZYNQMP_PM_REQUEST_ACK_BLOCKING = 2,
+	ZYNQMP_PM_REQUEST_ACK_NON_BLOCKING = 3,
+};
+
+struct zynqmp_pm_domain {
+	struct generic_pm_domain gpd;
+	u32 node_id;
+	bool requested;
+};
+
+enum max77620_fps_src {
+	MAX77620_FPS_SRC_0 = 0,
+	MAX77620_FPS_SRC_1 = 1,
+	MAX77620_FPS_SRC_2 = 2,
+	MAX77620_FPS_SRC_NONE = 3,
+	MAX77620_FPS_SRC_DEF = 4,
+};
+
+enum max77620_regulators {
+	MAX77620_REGULATOR_ID_SD0 = 0,
+	MAX77620_REGULATOR_ID_SD1 = 1,
+	MAX77620_REGULATOR_ID_SD2 = 2,
+	MAX77620_REGULATOR_ID_SD3 = 3,
+	MAX77620_REGULATOR_ID_SD4 = 4,
+	MAX77620_REGULATOR_ID_LDO0 = 5,
+	MAX77620_REGULATOR_ID_LDO1 = 6,
+	MAX77620_REGULATOR_ID_LDO2 = 7,
+	MAX77620_REGULATOR_ID_LDO3 = 8,
+	MAX77620_REGULATOR_ID_LDO4 = 9,
+	MAX77620_REGULATOR_ID_LDO5 = 10,
+	MAX77620_REGULATOR_ID_LDO6 = 11,
+	MAX77620_REGULATOR_ID_LDO7 = 12,
+	MAX77620_REGULATOR_ID_LDO8 = 13,
+	MAX77620_NUM_REGS = 14,
+};
+
+enum max77620_regulator_type {
+	MAX77620_REGULATOR_TYPE_SD = 0,
+	MAX77620_REGULATOR_TYPE_LDO_N = 1,
+	MAX77620_REGULATOR_TYPE_LDO_P = 2,
+};
+
+struct max77620_regulator_info {
+	u8 type;
+	u8 fps_addr;
+	u8 volt_addr;
+	u8 cfg_addr;
+	u8 power_mode_mask;
+	u8 power_mode_shift;
+	u8 remote_sense_addr;
+	u8 remote_sense_mask;
+	struct regulator_desc desc;
+};
+
+struct max77620_regulator_pdata {
+	int active_fps_src;
+	int active_fps_pd_slot;
+	int active_fps_pu_slot;
+	int suspend_fps_src;
+	int suspend_fps_pd_slot;
+	int suspend_fps_pu_slot;
+	int current_mode;
+	int power_ok;
+	int ramp_rate_setting;
+};
+
+struct max77620_regulator {
+	struct device *dev;
+	struct regmap *rmap;
+	struct max77620_regulator_info *rinfo[14];
+	struct max77620_regulator_pdata reg_pdata[14];
+	int enable_power_mode[14];
+	int current_power_mode[14];
+	int active_fps_src[14];
+};
+
+enum zynqmp_pm_reset_action {
+	PM_RESET_ACTION_RELEASE = 0,
+	PM_RESET_ACTION_ASSERT = 1,
+	PM_RESET_ACTION_PULSE = 2,
+};
+
+enum zynqmp_pm_reset {
+	ZYNQMP_PM_RESET_START = 1000,
+	ZYNQMP_PM_RESET_PCIE_CFG = 1000,
+	ZYNQMP_PM_RESET_PCIE_BRIDGE = 1001,
+	ZYNQMP_PM_RESET_PCIE_CTRL = 1002,
+	ZYNQMP_PM_RESET_DP = 1003,
+	ZYNQMP_PM_RESET_SWDT_CRF = 1004,
+	ZYNQMP_PM_RESET_AFI_FM5 = 1005,
+	ZYNQMP_PM_RESET_AFI_FM4 = 1006,
+	ZYNQMP_PM_RESET_AFI_FM3 = 1007,
+	ZYNQMP_PM_RESET_AFI_FM2 = 1008,
+	ZYNQMP_PM_RESET_AFI_FM1 = 1009,
+	ZYNQMP_PM_RESET_AFI_FM0 = 1010,
+	ZYNQMP_PM_RESET_GDMA = 1011,
+	ZYNQMP_PM_RESET_GPU_PP1 = 1012,
+	ZYNQMP_PM_RESET_GPU_PP0 = 1013,
+	ZYNQMP_PM_RESET_GPU = 1014,
+	ZYNQMP_PM_RESET_GT = 1015,
+	ZYNQMP_PM_RESET_SATA = 1016,
+	ZYNQMP_PM_RESET_ACPU3_PWRON = 1017,
+	ZYNQMP_PM_RESET_ACPU2_PWRON = 1018,
+	ZYNQMP_PM_RESET_ACPU1_PWRON = 1019,
+	ZYNQMP_PM_RESET_ACPU0_PWRON = 1020,
+	ZYNQMP_PM_RESET_APU_L2 = 1021,
+	ZYNQMP_PM_RESET_ACPU3 = 1022,
+	ZYNQMP_PM_RESET_ACPU2 = 1023,
+	ZYNQMP_PM_RESET_ACPU1 = 1024,
+	ZYNQMP_PM_RESET_ACPU0 = 1025,
+	ZYNQMP_PM_RESET_DDR = 1026,
+	ZYNQMP_PM_RESET_APM_FPD = 1027,
+	ZYNQMP_PM_RESET_SOFT = 1028,
+	ZYNQMP_PM_RESET_GEM0 = 1029,
+	ZYNQMP_PM_RESET_GEM1 = 1030,
+	ZYNQMP_PM_RESET_GEM2 = 1031,
+	ZYNQMP_PM_RESET_GEM3 = 1032,
+	ZYNQMP_PM_RESET_QSPI = 1033,
+	ZYNQMP_PM_RESET_UART0 = 1034,
+	ZYNQMP_PM_RESET_UART1 = 1035,
+	ZYNQMP_PM_RESET_SPI0 = 1036,
+	ZYNQMP_PM_RESET_SPI1 = 1037,
+	ZYNQMP_PM_RESET_SDIO0 = 1038,
+	ZYNQMP_PM_RESET_SDIO1 = 1039,
+	ZYNQMP_PM_RESET_CAN0 = 1040,
+	ZYNQMP_PM_RESET_CAN1 = 1041,
+	ZYNQMP_PM_RESET_I2C0 = 1042,
+	ZYNQMP_PM_RESET_I2C1 = 1043,
+	ZYNQMP_PM_RESET_TTC0 = 1044,
+	ZYNQMP_PM_RESET_TTC1 = 1045,
+	ZYNQMP_PM_RESET_TTC2 = 1046,
+	ZYNQMP_PM_RESET_TTC3 = 1047,
+	ZYNQMP_PM_RESET_SWDT_CRL = 1048,
+	ZYNQMP_PM_RESET_NAND = 1049,
+	ZYNQMP_PM_RESET_ADMA = 1050,
+	ZYNQMP_PM_RESET_GPIO = 1051,
+	ZYNQMP_PM_RESET_IOU_CC = 1052,
+	ZYNQMP_PM_RESET_TIMESTAMP = 1053,
+	ZYNQMP_PM_RESET_RPU_R50 = 1054,
+	ZYNQMP_PM_RESET_RPU_R51 = 1055,
+	ZYNQMP_PM_RESET_RPU_AMBA = 1056,
+	ZYNQMP_PM_RESET_OCM = 1057,
+	ZYNQMP_PM_RESET_RPU_PGE = 1058,
+	ZYNQMP_PM_RESET_USB0_CORERESET = 1059,
+	ZYNQMP_PM_RESET_USB1_CORERESET = 1060,
+	ZYNQMP_PM_RESET_USB0_HIBERRESET = 1061,
+	ZYNQMP_PM_RESET_USB1_HIBERRESET = 1062,
+	ZYNQMP_PM_RESET_USB0_APB = 1063,
+	ZYNQMP_PM_RESET_USB1_APB = 1064,
+	ZYNQMP_PM_RESET_IPI = 1065,
+	ZYNQMP_PM_RESET_APM_LPD = 1066,
+	ZYNQMP_PM_RESET_RTC = 1067,
+	ZYNQMP_PM_RESET_SYSMON = 1068,
+	ZYNQMP_PM_RESET_AFI_FM6 = 1069,
+	ZYNQMP_PM_RESET_LPD_SWDT = 1070,
+	ZYNQMP_PM_RESET_FPD = 1071,
+	ZYNQMP_PM_RESET_RPU_DBG1 = 1072,
+	ZYNQMP_PM_RESET_RPU_DBG0 = 1073,
+	ZYNQMP_PM_RESET_DBG_LPD = 1074,
+	ZYNQMP_PM_RESET_DBG_FPD = 1075,
+	ZYNQMP_PM_RESET_APLL = 1076,
+	ZYNQMP_PM_RESET_DPLL = 1077,
+	ZYNQMP_PM_RESET_VPLL = 1078,
+	ZYNQMP_PM_RESET_IOPLL = 1079,
+	ZYNQMP_PM_RESET_RPLL = 1080,
+	ZYNQMP_PM_RESET_GPO3_PL_0 = 1081,
+	ZYNQMP_PM_RESET_GPO3_PL_1 = 1082,
+	ZYNQMP_PM_RESET_GPO3_PL_2 = 1083,
+	ZYNQMP_PM_RESET_GPO3_PL_3 = 1084,
+	ZYNQMP_PM_RESET_GPO3_PL_4 = 1085,
+	ZYNQMP_PM_RESET_GPO3_PL_5 = 1086,
+	ZYNQMP_PM_RESET_GPO3_PL_6 = 1087,
+	ZYNQMP_PM_RESET_GPO3_PL_7 = 1088,
+	ZYNQMP_PM_RESET_GPO3_PL_8 = 1089,
+	ZYNQMP_PM_RESET_GPO3_PL_9 = 1090,
+	ZYNQMP_PM_RESET_GPO3_PL_10 = 1091,
+	ZYNQMP_PM_RESET_GPO3_PL_11 = 1092,
+	ZYNQMP_PM_RESET_GPO3_PL_12 = 1093,
+	ZYNQMP_PM_RESET_GPO3_PL_13 = 1094,
+	ZYNQMP_PM_RESET_GPO3_PL_14 = 1095,
+	ZYNQMP_PM_RESET_GPO3_PL_15 = 1096,
+	ZYNQMP_PM_RESET_GPO3_PL_16 = 1097,
+	ZYNQMP_PM_RESET_GPO3_PL_17 = 1098,
+	ZYNQMP_PM_RESET_GPO3_PL_18 = 1099,
+	ZYNQMP_PM_RESET_GPO3_PL_19 = 1100,
+	ZYNQMP_PM_RESET_GPO3_PL_20 = 1101,
+	ZYNQMP_PM_RESET_GPO3_PL_21 = 1102,
+	ZYNQMP_PM_RESET_GPO3_PL_22 = 1103,
+	ZYNQMP_PM_RESET_GPO3_PL_23 = 1104,
+	ZYNQMP_PM_RESET_GPO3_PL_24 = 1105,
+	ZYNQMP_PM_RESET_GPO3_PL_25 = 1106,
+	ZYNQMP_PM_RESET_GPO3_PL_26 = 1107,
+	ZYNQMP_PM_RESET_GPO3_PL_27 = 1108,
+	ZYNQMP_PM_RESET_GPO3_PL_28 = 1109,
+	ZYNQMP_PM_RESET_GPO3_PL_29 = 1110,
+	ZYNQMP_PM_RESET_GPO3_PL_30 = 1111,
+	ZYNQMP_PM_RESET_GPO3_PL_31 = 1112,
+	ZYNQMP_PM_RESET_RPU_LS = 1113,
+	ZYNQMP_PM_RESET_PS_ONLY = 1114,
+	ZYNQMP_PM_RESET_PL = 1115,
+	ZYNQMP_PM_RESET_PS_PL0 = 1116,
+	ZYNQMP_PM_RESET_PS_PL1 = 1117,
+	ZYNQMP_PM_RESET_PS_PL2 = 1118,
+	ZYNQMP_PM_RESET_PS_PL3 = 1119,
+	ZYNQMP_PM_RESET_END = 1119,
+};
+
+struct zynqmp_reset_soc_data {
+	u32 reset_id;
+	u32 num_resets;
+};
+
+struct zynqmp_reset_data {
+	struct reset_controller_dev rcdev;
+	const struct zynqmp_reset_soc_data *data;
+};
+
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+};
+
+struct unimapdesc {
+	short unsigned int entry_ct;
+	struct unipair *entries;
+};
+
+struct console_font_op {
+	unsigned int op;
+	unsigned int flags;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_stat {
+	short unsigned int v_active;
+	short unsigned int v_signal;
+	short unsigned int v_state;
+};
+
+struct vt_sizes {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_scrollsize;
+};
+
+struct vt_consize {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_vlin;
+	short unsigned int v_clin;
+	short unsigned int v_vcol;
+	short unsigned int v_ccol;
+};
+
+struct vt_event {
+	unsigned int event;
+	unsigned int oldev;
+	unsigned int newev;
+	unsigned int pad[4];
+};
+
+struct vt_setactivate {
+	unsigned int console;
+	struct vt_mode mode;
+};
+
+struct vt_event_wait {
+	struct list_head list;
+	struct vt_event event;
+	int done;
+};
+
+struct compat_console_font_op {
+	compat_uint_t op;
+	compat_uint_t flags;
+	compat_uint_t width;
+	compat_uint_t height;
+	compat_uint_t charcount;
+	compat_caddr_t data;
+};
+
+struct compat_unimapdesc {
+	short unsigned int entry_ct;
+	compat_caddr_t entries;
+};
+
+enum hwparam_type {
+	hwparam_ioport = 0,
+	hwparam_iomem = 1,
+	hwparam_ioport_or_iomem = 2,
+	hwparam_irq = 3,
+	hwparam_dma = 4,
+	hwparam_dma_addr = 5,
+	hwparam_other = 6,
+};
+
+enum {
+	PLAT8250_DEV_LEGACY = 4294967295,
+	PLAT8250_DEV_PLATFORM = 0,
+	PLAT8250_DEV_PLATFORM1 = 1,
+	PLAT8250_DEV_PLATFORM2 = 2,
+	PLAT8250_DEV_FOURPORT = 3,
+	PLAT8250_DEV_ACCENT = 4,
+	PLAT8250_DEV_BOCA = 5,
+	PLAT8250_DEV_EXAR_ST16C554 = 6,
+	PLAT8250_DEV_HUB6 = 7,
+	PLAT8250_DEV_AU1X00 = 8,
+	PLAT8250_DEV_SM501 = 9,
+};
+
+struct old_serial_port {
+	unsigned int uart;
+	unsigned int baud_base;
+	unsigned int port;
+	unsigned int irq;
+	upf_t flags;
+	unsigned char io_type;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+};
+
+struct irq_info {
+	struct hlist_node node;
+	int irq;
+	spinlock_t lock;
+	struct list_head *head;
+};
+
+struct fsl8250_data {
+	int line;
+};
+
+enum imx_uart_type {
+	IMX1_UART = 0,
+	IMX21_UART = 1,
+	IMX53_UART = 2,
+	IMX6Q_UART = 3,
+};
+
+struct imx_uart_data {
+	unsigned int uts_reg;
+	enum imx_uart_type devtype;
+};
+
+enum imx_tx_state {
+	OFF___2 = 0,
+	WAIT_AFTER_RTS = 1,
+	SEND = 2,
+	WAIT_AFTER_SEND = 3,
+};
+
+struct imx_port {
+	struct uart_port port;
+	struct timer_list timer;
+	unsigned int old_status;
+	unsigned int have_rtscts: 1;
+	unsigned int have_rtsgpio: 1;
+	unsigned int dte_mode: 1;
+	unsigned int inverted_tx: 1;
+	unsigned int inverted_rx: 1;
+	struct clk *clk_ipg;
+	struct clk *clk_per;
+	const struct imx_uart_data *devdata;
+	struct mctrl_gpios *gpios;
+	unsigned int ucr1;
+	unsigned int ucr2;
+	unsigned int ucr3;
+	unsigned int ucr4;
+	unsigned int ufcr;
+	unsigned int dma_is_enabled: 1;
+	unsigned int dma_is_rxing: 1;
+	unsigned int dma_is_txing: 1;
+	struct dma_chan *dma_chan_rx;
+	struct dma_chan *dma_chan_tx;
+	struct scatterlist rx_sgl;
+	struct scatterlist tx_sgl[2];
+	void *rx_buf;
+	struct circ_buf rx_ring;
+	unsigned int rx_buf_size;
+	unsigned int rx_period_length;
+	unsigned int rx_periods;
+	dma_cookie_t rx_cookie;
+	unsigned int tx_bytes;
+	unsigned int dma_tx_nents;
+	unsigned int saved_reg[10];
+	bool context_saved;
+	enum imx_tx_state tx_state;
+	struct hrtimer trigger_start_tx;
+	struct hrtimer trigger_stop_tx;
+};
+
+struct imx_port_ucrs {
+	unsigned int ucr1;
+	unsigned int ucr2;
+	unsigned int ucr3;
+};
+
+enum {
+	UART_IRQ_SUM = 0,
+	UART_RX_IRQ = 0,
+	UART_TX_IRQ = 1,
+	UART_IRQ_COUNT = 2,
+};
+
+struct uart_regs_layout {
+	unsigned int rbr;
+	unsigned int tsh;
+	unsigned int ctrl;
+	unsigned int intr;
+};
+
+struct uart_flags {
+	unsigned int ctrl_tx_rdy_int;
+	unsigned int ctrl_rx_rdy_int;
+	unsigned int stat_tx_rdy;
+	unsigned int stat_rx_rdy;
+};
+
+struct mvebu_uart_driver_data {
+	bool is_ext;
+	struct uart_regs_layout regs;
+	struct uart_flags flags;
+};
+
+struct mvebu_uart_pm_regs {
+	unsigned int rbr;
+	unsigned int tsh;
+	unsigned int ctrl;
+	unsigned int intr;
+	unsigned int stat;
+	unsigned int brdv;
+	unsigned int osamp;
+};
+
+struct mvebu_uart {
+	struct uart_port *port;
+	struct clk *clk;
+	int irq[2];
+	struct mvebu_uart_driver_data *data;
+	struct mvebu_uart_pm_regs pm_regs;
+};
+
+struct mvebu_uart_clock {
+	struct clk_hw clk_hw;
+	int clock_idx;
+	u32 pm_context_reg1;
+	u32 pm_context_reg2;
+};
+
+struct mvebu_uart_clock_base {
+	struct mvebu_uart_clock clocks[2];
+	unsigned int parent_rates[5];
+	int parent_idx;
+	unsigned int div;
+	void *reg1;
+	void *reg2;
+	bool configured;
+};
+
+struct virtrng_info {
+	struct hwrng hwrng;
+	struct virtqueue *vq;
+	char name[25];
+	int index;
+	bool hwrng_register_done;
+	bool hwrng_removed;
+	struct completion have_data;
+	unsigned int data_avail;
+	unsigned int data_idx;
+	u8 data[64];
+};
+
+enum tpm2_const {
+	TPM2_PLATFORM_PCR = 24,
+	TPM2_PCR_SELECT_MIN = 3,
+};
+
+enum tpm2_permanent_handles {
+	TPM2_RS_PW = 1073741833,
+};
+
+enum tpm2_properties {
+	TPM_PT_TOTAL_COMMANDS = 297,
+};
+
+struct tpm2_hash {
+	unsigned int crypto_id;
+	unsigned int tpm_id;
+};
+
+struct tpm2_pcr_read_out {
+	__be32 update_cnt;
+	__be32 pcr_selects_cnt;
+	__be16 hash_alg;
+	u8 pcr_select_size;
+	u8 pcr_select[3];
+	__be32 digests_cnt;
+	__be16 digest_size;
+	u8 digest[0];
+} __attribute__((packed));
+
+struct tpm2_null_auth_area {
+	__be32 handle;
+	__be16 nonce_size;
+	u8 attributes;
+	__be16 auth_size;
+} __attribute__((packed));
+
+struct tpm2_get_random_out {
+	__be16 size;
+	u8 buffer[128];
+};
+
+struct tpm2_get_cap_out {
+	u8 more_data;
+	__be32 subcap_id;
+	__be32 property_cnt;
+	__be32 property_id;
+	__be32 value;
+} __attribute__((packed));
+
+struct tpm2_pcr_selection {
+	__be16 hash_alg;
+	u8 size_of_select;
+	u8 pcr_select[3];
+};
+
+struct cavium_smmu {
+	struct arm_smmu_device smmu;
+	u32 id_base;
+};
+
+struct iova_magazine;
+
+struct iova_cpu_rcache;
+
+struct iova_rcache {
+	spinlock_t lock;
+	long unsigned int depot_size;
+	struct iova_magazine *depot[32];
+	struct iova_cpu_rcache *cpu_rcaches;
+};
+
+struct iova_magazine {
+	long unsigned int size;
+	long unsigned int pfns[127];
+};
+
+struct iova_cpu_rcache {
+	spinlock_t lock;
+	struct iova_magazine *loaded;
+	struct iova_magazine *prev;
+};
+
+struct rk_iommu_domain {
+	struct list_head iommus;
+	u32 *dt;
+	dma_addr_t dt_dma;
+	spinlock_t iommus_lock;
+	spinlock_t dt_lock;
+	struct iommu_domain domain;
+};
+
+struct rk_iommu_ops {
+	phys_addr_t (*pt_address)(u32);
+	u32 (*mk_dtentries)(dma_addr_t);
+	u32 (*mk_ptentries)(phys_addr_t, int);
+	phys_addr_t (*dte_addr_phys)(u32);
+	u32 (*dma_addr_dte)(dma_addr_t);
+	u64 dma_bit_mask;
+};
+
+struct rk_iommu {
+	struct device *dev;
+	void **bases;
+	int num_mmu;
+	int num_irq;
+	struct clk_bulk_data *clocks;
+	int num_clocks;
+	bool reset_disabled;
+	struct iommu_device iommu;
+	struct list_head node;
+	struct iommu_domain *domain;
+	struct iommu_group *group;
+};
+
+struct rk_iommudata {
+	struct device_link *link;
+	struct rk_iommu *iommu;
+};
+
+struct drm_mode_modeinfo {
+	__u32 clock;
+	__u16 hdisplay;
+	__u16 hsync_start;
+	__u16 hsync_end;
+	__u16 htotal;
+	__u16 hskew;
+	__u16 vdisplay;
+	__u16 vsync_start;
+	__u16 vsync_end;
+	__u16 vtotal;
+	__u16 vscan;
+	__u32 vrefresh;
+	__u32 flags;
+	__u32 type;
+	char name[32];
+};
+
+enum drm_bus_flags {
+	DRM_BUS_FLAG_DE_LOW = 1,
+	DRM_BUS_FLAG_DE_HIGH = 2,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE = 4,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE = 4,
+	DRM_BUS_FLAG_DATA_MSB_TO_LSB = 16,
+	DRM_BUS_FLAG_DATA_LSB_TO_MSB = 32,
+	DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE = 64,
+	DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE = 64,
+	DRM_BUS_FLAG_SHARP_SIGNALS = 256,
+};
+
+struct drm_mode_get_connector {
+	__u64 encoders_ptr;
+	__u64 modes_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_modes;
+	__u32 count_props;
+	__u32 count_encoders;
+	__u32 encoder_id;
+	__u32 connector_id;
+	__u32 connector_type;
+	__u32 connector_type_id;
+	__u32 connection;
+	__u32 mm_width;
+	__u32 mm_height;
+	__u32 subpixel;
+	__u32 pad;
+};
+
+struct drm_mode_connector_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 connector_id;
+};
+
+struct drm_mode_obj_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct drm_conn_prop_enum_list {
+	int type;
+	const char *name;
+	struct ida ida;
+};
+
+struct drm_vblank_work {
+	struct kthread_work base;
+	struct drm_vblank_crtc *vblank;
+	u64 count;
+	int cancelling;
+	struct list_head node;
+};
+
+struct drm_privacy_screen_lookup {
+	struct list_head list;
+	const char *dev_id;
+	const char *con_id;
+	const char *provider;
+};
+
+struct drm_privacy_screen_ops;
+
+struct drm_privacy_screen {
 	struct device dev;
-	int const_id_cnt;
-	struct idr idr;
-	struct idr *parent_idr;
-	void *private_data;
-	struct attribute **zone_dev_attrs;
-	int zone_attr_count;
-	struct attribute_group dev_zone_attr_group;
-	const struct attribute_group *dev_attr_groups[2];
-	bool allocated;
-	struct powercap_zone_constraint *constraints;
+	struct mutex lock;
+	struct list_head list;
+	struct blocking_notifier_head notifier_head;
+	const struct drm_privacy_screen_ops *ops;
+	enum drm_privacy_screen_status sw_state;
+	enum drm_privacy_screen_status hw_state;
+	void *drvdata;
 };
 
-struct powercap_zone_constraint_ops;
+struct drm_privacy_screen_ops {
+	int (*set_sw_state)(struct drm_privacy_screen *, enum drm_privacy_screen_status);
+	void (*get_hw_state)(struct drm_privacy_screen *);
+};
 
-struct powercap_zone_constraint {
+struct ewma_psr_time {
+	long unsigned int internal;
+};
+
+struct drm_self_refresh_data {
+	struct drm_crtc *crtc;
+	struct delayed_work entry_work;
+	struct mutex avg_mutex;
+	struct ewma_psr_time entry_avg_ms;
+	struct ewma_psr_time exit_avg_ms;
+};
+
+struct component;
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+struct software_node_ref_args {
+	const struct software_node *node;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct swnode {
+	struct kobject kobj;
+	struct fwnode_handle fwnode;
+	const struct software_node *node;
 	int id;
-	struct powercap_zone *power_zone;
-	const struct powercap_zone_constraint_ops *ops;
+	struct ida child_ids;
+	struct list_head entry;
+	struct list_head children;
+	struct swnode *parent;
+	unsigned int allocated: 1;
+	unsigned int managed: 1;
 };
 
-struct powercap_zone_constraint_ops {
-	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
-	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
-	int (*set_time_window_us)(struct powercap_zone *, int, u64);
-	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
-	const char * (*get_name)(struct powercap_zone *, int);
+struct pm_clk_notifier_block {
+	struct notifier_block nb;
+	struct dev_pm_domain *pm_domain;
+	char *con_ids[0];
+};
+
+enum pce_status {
+	PCE_STATUS_NONE = 0,
+	PCE_STATUS_ACQUIRED = 1,
+	PCE_STATUS_PREPARED = 2,
+	PCE_STATUS_ENABLED = 3,
+	PCE_STATUS_ERROR = 4,
+};
+
+struct pm_clock_entry {
+	struct list_head node;
+	char *con_id;
+	struct clk *clk;
+	enum pce_status status;
+	bool enabled_when_prepared;
+};
+
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
+};
+
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
+struct for_each_memory_block_cb_data {
+	walk_memory_blocks_func_t func;
+	void *arg;
+};
+
+struct spmi_device {
+	struct device dev;
+	struct spmi_controller *ctrl;
+	u8 usid;
+};
+
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
+};
+
+enum {
+	STMPE_IDX_CHIP_ID = 0,
+	STMPE_IDX_SYS_CTRL = 1,
+	STMPE_IDX_SYS_CTRL2 = 2,
+	STMPE_IDX_ICR_LSB = 3,
+	STMPE_IDX_IER_LSB = 4,
+	STMPE_IDX_IER_MSB = 5,
+	STMPE_IDX_ISR_LSB = 6,
+	STMPE_IDX_ISR_MSB = 7,
+	STMPE_IDX_GPMR_LSB = 8,
+	STMPE_IDX_GPMR_CSB = 9,
+	STMPE_IDX_GPMR_MSB = 10,
+	STMPE_IDX_GPSR_LSB = 11,
+	STMPE_IDX_GPSR_CSB = 12,
+	STMPE_IDX_GPSR_MSB = 13,
+	STMPE_IDX_GPCR_LSB = 14,
+	STMPE_IDX_GPCR_CSB = 15,
+	STMPE_IDX_GPCR_MSB = 16,
+	STMPE_IDX_GPDR_LSB = 17,
+	STMPE_IDX_GPDR_CSB = 18,
+	STMPE_IDX_GPDR_MSB = 19,
+	STMPE_IDX_GPEDR_LSB = 20,
+	STMPE_IDX_GPEDR_CSB = 21,
+	STMPE_IDX_GPEDR_MSB = 22,
+	STMPE_IDX_GPRER_LSB = 23,
+	STMPE_IDX_GPRER_CSB = 24,
+	STMPE_IDX_GPRER_MSB = 25,
+	STMPE_IDX_GPFER_LSB = 26,
+	STMPE_IDX_GPFER_CSB = 27,
+	STMPE_IDX_GPFER_MSB = 28,
+	STMPE_IDX_GPPUR_LSB = 29,
+	STMPE_IDX_GPPDR_LSB = 30,
+	STMPE_IDX_GPAFR_U_MSB = 31,
+	STMPE_IDX_IEGPIOR_LSB = 32,
+	STMPE_IDX_IEGPIOR_CSB = 33,
+	STMPE_IDX_IEGPIOR_MSB = 34,
+	STMPE_IDX_ISGPIOR_LSB = 35,
+	STMPE_IDX_ISGPIOR_CSB = 36,
+	STMPE_IDX_ISGPIOR_MSB = 37,
+	STMPE_IDX_MAX = 38,
+};
+
+struct stmpe_platform_data {
+	int id;
+	unsigned int blocks;
+	unsigned int irq_trigger;
+	bool autosleep;
+	bool irq_over_gpio;
+	int irq_gpio;
+	int autosleep_timeout;
+};
+
+struct syscon_platform_data {
+	const char *label;
+};
+
+struct syscon {
+	struct device_node *np;
+	struct regmap *regmap;
+	struct list_head list;
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
+};
+
+struct dma_buf_sync {
+	__u64 flags;
+};
+
+struct dma_buf_export_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_import_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct udmabuf_create {
+	__u32 memfd;
+	__u32 flags;
+	__u64 offset;
+	__u64 size;
+};
+
+struct udmabuf_create_item {
+	__u32 memfd;
+	__u32 __pad;
+	__u64 offset;
+	__u64 size;
+};
+
+struct udmabuf_create_list {
+	__u32 flags;
+	__u32 count;
+	struct udmabuf_create_item list[0];
+};
+
+struct udmabuf {
+	long unsigned int pagecount;
+	struct page **pages;
+	struct sg_table *sg;
+	struct miscdevice *device;
+};
+
+struct nd_region;
+
+struct cxl_nvdimm {
+	struct device dev;
+	struct cxl_memdev *cxlmd;
+	struct cxl_nvdimm_bridge *bridge;
+	struct xarray pmem_regions;
+};
+
+struct cxl_pmem_region_mapping {
+	struct cxl_memdev *cxlmd;
+	struct cxl_nvdimm *cxl_nvd;
+	u64 start;
+	u64 size;
+	int position;
+};
+
+struct cxl_pmem_region {
+	struct device dev;
+	struct cxl_region *cxlr;
+	struct nd_region *nd_region;
+	struct cxl_nvdimm_bridge *bridge;
+	struct range hpa_range;
+	int nr_mappings;
+	struct cxl_pmem_region_mapping mapping[0];
+};
+
+struct cxl_region_ref {
+	struct cxl_port *port;
+	struct cxl_decoder *decoder;
+	struct cxl_region *region;
+	struct xarray endpoints;
+	int nr_targets_set;
+	int nr_eps;
+	int nr_targets;
+};
+
+struct value_name_pair;
+
+struct sa_name_list {
+	int opcode;
+	const struct value_name_pair *arr;
+	int arr_sz;
+};
+
+struct value_name_pair {
+	int value;
+	const char *name;
+};
+
+struct error_info {
+	short unsigned int code12;
+	short unsigned int size;
+};
+
+struct error_info2 {
+	unsigned char code1;
+	unsigned char code2_min;
+	unsigned char code2_max;
+	const char *str;
+	const char *fmt;
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 1000,
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+struct class_interface {
+	struct list_head node;
+	struct class *class;
+	int (*add_dev)(struct device *, struct class_interface *);
+	void (*remove_dev)(struct device *, struct class_interface *);
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	unsigned int dxfer_len;
+	void *dxferp;
+	unsigned char *cmdp;
+	void *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+typedef struct sg_io_hdr sg_io_hdr_t;
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+struct sg_scsi_id {
+	int host_no;
+	int channel;
+	int scsi_id;
+	int lun;
+	int scsi_type;
+	short int h_cmd_per_lun;
+	short int d_queue_depth;
+	int unused[2];
+};
+
+typedef struct sg_scsi_id sg_scsi_id_t;
+
+struct sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	void *usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+typedef struct sg_req_info sg_req_info_t;
+
+struct sg_header {
+	int pack_len;
+	int reply_len;
+	int pack_id;
+	int result;
+	unsigned int twelve_byte: 1;
+	unsigned int target_status: 5;
+	unsigned int host_status: 8;
+	unsigned int driver_status: 8;
+	unsigned int other_flags: 10;
+	unsigned char sense_buffer[16];
+};
+
+struct sg_scatter_hold {
+	short unsigned int k_use_sg;
+	unsigned int sglist_len;
+	unsigned int bufflen;
+	struct page **pages;
+	int page_order;
+	char dio_in_use;
+	unsigned char cmd_opcode;
+};
+
+typedef struct sg_scatter_hold Sg_scatter_hold;
+
+struct sg_fd;
+
+struct sg_request {
+	struct list_head entry;
+	struct sg_fd *parentfp;
+	Sg_scatter_hold data;
+	sg_io_hdr_t header;
+	unsigned char sense_b[96];
+	char res_used;
+	char orphan;
+	char sg_io_owned;
+	char done;
+	struct request *rq;
+	struct bio *bio;
+	struct execute_work ew;
+};
+
+typedef struct sg_request Sg_request;
+
+struct sg_device;
+
+struct sg_fd {
+	struct list_head sfd_siblings;
+	struct sg_device *parentdp;
+	wait_queue_head_t read_wait;
+	rwlock_t rq_list_lock;
+	struct mutex f_mutex;
+	int timeout;
+	int timeout_user;
+	Sg_scatter_hold reserve;
+	struct list_head rq_list;
+	struct fasync_struct *async_qp;
+	Sg_request req_arr[16];
+	char force_packid;
+	char cmd_q;
+	unsigned char next_cmd_len;
+	char keep_orphan;
+	char mmap_called;
+	char res_in_use;
+	struct kref f_ref;
+	struct execute_work ew;
+};
+
+struct sg_device {
+	struct scsi_device *device;
+	wait_queue_head_t open_wait;
+	struct mutex open_rel_lock;
+	int sg_tablesize;
+	u32 index;
+	struct list_head sfds;
+	rwlock_t sfd_lock;
+	atomic_t detaching;
+	bool exclude;
+	int open_cnt;
+	char sgdebug;
+	char name[32];
+	struct cdev *cdev;
+	struct kref d_ref;
+};
+
+typedef struct sg_fd Sg_fd;
+
+typedef struct sg_device Sg_device;
+
+struct compat_sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+struct sg_proc_deviter {
+	loff_t index;
+	size_t max;
+};
+
+struct ata_acpi_gtf {
+	u8 tf[7];
+};
+
+struct ata_acpi_hotplug_context {
+	struct acpi_hotplug_context hp;
+	union {
+		struct ata_port *ap;
+		struct ata_device *dev;
+	} data;
+};
+
+enum amd_spi_versions {
+	AMD_SPI_V1 = 1,
+	AMD_SPI_V2 = 2,
+};
+
+struct amd_spi {
+	void *io_remap_addr;
+	enum amd_spi_versions version;
+};
+
+struct mdio_device_id {
+	__u32 phy_id;
+	__u32 phy_id_mask;
+};
+
+struct rtl821x_priv {
+	u16 phycr1;
+	u16 phycr2;
+};
+
+enum {
+	PCMCIA_IOPORT_0 = 0,
+	PCMCIA_IOPORT_1 = 1,
+	PCMCIA_IOMEM_0 = 2,
+	PCMCIA_IOMEM_1 = 3,
+	PCMCIA_IOMEM_2 = 4,
+	PCMCIA_IOMEM_3 = 5,
+	PCMCIA_NUM_RESOURCES = 6,
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+struct usb_string_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wData[1];
+};
+
+struct dbc_info_context {
+	__le64 string0;
+	__le64 manufacturer;
+	__le64 product;
+	__le64 serial;
+	__le32 length;
+	__le32 __reserved_0[7];
+};
+
+enum evtreturn {
+	EVT_ERR = 4294967295,
+	EVT_DONE = 0,
+	EVT_GSER = 1,
+	EVT_DISC = 2,
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+struct input_mt_pos {
+	s16 x;
+	s16 y;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct pl031_vendor_data {
+	struct rtc_class_ops ops;
+	bool clockwatch;
+	bool st_weekday;
+	long unsigned int irqflags;
+	time64_t range_min;
+	timeu64_t range_max;
+};
+
+struct pl031_local {
+	struct pl031_vendor_data *vendor;
+	struct rtc_device *rtc;
+	void *base;
+};
+
+struct lirc_scancode {
+	__u64 timestamp;
+	__u16 flags;
+	__u16 rc_proto;
+	__u32 keycode;
+	__u64 scancode;
+};
+
+struct lirc_fh {
+	struct list_head list;
+	struct rc_dev *rc;
+	int carrier_low;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned int *type;
+			const unsigned int *const_type;
+			char (*rectype)[0];
+			unsigned int *ptr;
+			const unsigned int *ptr_const;
+		};
+		unsigned int buf[0];
+	} rawir;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct lirc_scancode *type;
+			const struct lirc_scancode *const_type;
+			char (*rectype)[0];
+			struct lirc_scancode *ptr;
+			const struct lirc_scancode *ptr_const;
+		};
+		struct lirc_scancode buf[0];
+	} scancodes;
+	wait_queue_head_t wait_poll;
+	u8 send_mode;
+	u8 rec_mode;
+};
+
+enum {
+	DM_TIO_INSIDE_DM_IO = 0,
+	DM_TIO_IS_DUPLICATE_BIO = 1,
+};
+
+enum {
+	DM_IO_ACCOUNTED = 0,
+	DM_IO_WAS_SPLIT = 1,
+};
+
+struct clone_info {
+	struct dm_table *map;
+	struct bio *bio;
+	struct dm_io *io;
+	sector_t sector;
+	unsigned int sector_count;
+	bool is_abnormal_io: 1;
+	bool submit_as_polled: 1;
+};
+
+struct table_device {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev dm_dev;
+};
+
+struct dm_pr {
+	u64 old_key;
+	u64 new_key;
+	u32 flags;
+	bool abort;
+	bool fail_early;
+	int ret;
+	enum pr_type type;
+};
+
+struct dm_rq_target_io;
+
+struct dm_rq_clone_bio_info {
+	struct bio *orig;
+	struct dm_rq_target_io *tio;
+	struct bio clone;
+};
+
+struct dm_rq_target_io {
+	struct mapped_device *md;
+	struct dm_target *ti;
+	struct request *orig;
+	struct request *clone;
+	struct kthread_work work;
+	blk_status_t error;
+	union map_info info;
+	struct dm_stats_aux stats_aux;
+	long unsigned int duration_jiffies;
+	unsigned int n_sectors;
+	unsigned int completed;
+};
+
+struct dm_bio_details {
+	struct block_device *bi_bdev;
+	int __bi_remaining;
+	long unsigned int bi_flags;
+	struct bvec_iter bi_iter;
+	bio_end_io_t *bi_end_io;
+	struct bio_integrity_payload *bi_integrity;
+};
+
+enum dm_rh_region_states {
+	DM_RH_CLEAN = 1,
+	DM_RH_DIRTY = 2,
+	DM_RH_NOSYNC = 4,
+	DM_RH_RECOVERING = 8,
+};
+
+enum dm_raid1_error {
+	DM_RAID1_WRITE_ERROR = 0,
+	DM_RAID1_FLUSH_ERROR = 1,
+	DM_RAID1_SYNC_ERROR = 2,
+	DM_RAID1_READ_ERROR = 3,
+};
+
+struct mirror_set;
+
+struct mirror {
+	struct mirror_set *ms;
+	atomic_t error_count;
+	long unsigned int error_type;
+	struct dm_dev *dev;
+	sector_t offset;
+};
+
+struct dm_region_hash;
+
+struct mirror_set {
+	struct dm_target *ti;
+	struct list_head list;
+	uint64_t features;
+	spinlock_t lock;
+	struct bio_list reads;
+	struct bio_list writes;
+	struct bio_list failures;
+	struct bio_list holds;
+	struct dm_region_hash *rh;
+	struct dm_kcopyd_client *kcopyd_client;
+	struct dm_io_client *io_client;
+	region_t nr_regions;
+	int in_sync;
+	int log_failure;
+	int leg_failure;
+	atomic_t suspend;
+	atomic_t default_mirror;
+	struct workqueue_struct *kmirrord_wq;
+	struct work_struct kmirrord_work;
+	struct timer_list timer;
+	long unsigned int timer_pending;
+	struct work_struct trigger_event;
+	unsigned int nr_mirrors;
+	struct mirror mirror[0];
+};
+
+struct dm_raid1_bio_record {
+	struct mirror *m;
+	struct dm_bio_details details;
+	region_t write_region;
+};
+
+struct dm_region;
+
+struct dev_ch_attribute {
+	struct device_attribute attr;
+	unsigned int channel;
+};
+
+enum dev_pm_opp_event {
+	OPP_EVENT_ADD = 0,
+	OPP_EVENT_REMOVE = 1,
+	OPP_EVENT_ENABLE = 2,
+	OPP_EVENT_DISABLE = 3,
+	OPP_EVENT_ADJUST_VOLTAGE = 4,
+};
+
+struct dev_pm_opp_config {
+	const char * const *clk_names;
+	config_clks_t config_clks;
+	const char *prop_name;
+	config_regulators_t config_regulators;
+	const unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char * const *regulator_names;
+	const char * const *genpd_names;
+	struct device ***virt_devs;
+};
+
+struct opp_config_data {
+	struct opp_table *opp_table;
+	unsigned int flags;
+};
+
+typedef int tpl_parse_t(struct mmc_card *, struct sdio_func *, const unsigned char *, unsigned int);
+
+struct cis_tpl {
+	unsigned char code;
+	unsigned char min_size;
+	tpl_parse_t *parse;
+};
+
+struct scmi_driver {
+	const char *name;
+	int (*probe)(struct scmi_device *);
+	void (*remove)(struct scmi_device *);
+	const struct scmi_device_id *id_table;
+	struct device_driver driver;
+};
+
+enum scmi_power_scale {
+	SCMI_POWER_BOGOWATTS = 0,
+	SCMI_POWER_MILLIWATTS = 1,
+	SCMI_POWER_MICROWATTS = 2,
+};
+
+struct scmi_perf_proto_ops {
+	int (*limits_set)(const struct scmi_protocol_handle *, u32, u32, u32);
+	int (*limits_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+	int (*level_set)(const struct scmi_protocol_handle *, u32, u32, bool);
+	int (*level_get)(const struct scmi_protocol_handle *, u32, u32 *, bool);
+	int (*device_domain_id)(struct device *);
+	int (*transition_latency_get)(const struct scmi_protocol_handle *, struct device *);
+	int (*device_opps_add)(const struct scmi_protocol_handle *, struct device *);
+	int (*freq_set)(const struct scmi_protocol_handle *, u32, long unsigned int, bool);
+	int (*freq_get)(const struct scmi_protocol_handle *, u32, long unsigned int *, bool);
+	int (*est_power_get)(const struct scmi_protocol_handle *, u32, long unsigned int *, long unsigned int *);
+	bool (*fast_switch_possible)(const struct scmi_protocol_handle *, struct device *);
+	enum scmi_power_scale (*power_scale_get)(const struct scmi_protocol_handle *);
+};
+
+struct scmi_fc_info {
+	void *set_addr;
+	void *get_addr;
+	struct scmi_fc_db_info *set_db;
+};
+
+struct scmi_perf_limits_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int range_max;
+	unsigned int range_min;
+};
+
+struct scmi_perf_level_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int performance_level;
+};
+
+enum scmi_performance_protocol_cmd {
+	PERF_DOMAIN_ATTRIBUTES = 3,
+	PERF_DESCRIBE_LEVELS = 4,
+	PERF_LIMITS_SET = 5,
+	PERF_LIMITS_GET = 6,
+	PERF_LEVEL_SET = 7,
+	PERF_LEVEL_GET = 8,
+	PERF_NOTIFY_LIMITS = 9,
+	PERF_NOTIFY_LEVEL = 10,
+	PERF_DESCRIBE_FASTCHANNEL = 11,
+	PERF_DOMAIN_NAME_GET = 12,
+};
+
+enum {
+	PERF_FC_LEVEL = 0,
+	PERF_FC_LIMIT = 1,
+	PERF_FC_MAX = 2,
+};
+
+struct scmi_opp {
+	u32 perf;
+	u32 power;
+	u32 trans_latency_us;
+};
+
+struct scmi_msg_resp_perf_attributes {
+	__le16 num_domains;
+	__le16 flags;
+	__le32 stats_addr_low;
+	__le32 stats_addr_high;
+	__le32 stats_size;
+};
+
+struct scmi_msg_resp_perf_domain_attributes {
+	__le32 flags;
+	__le32 rate_limit_us;
+	__le32 sustained_freq_khz;
+	__le32 sustained_perf_level;
+	u8 name[16];
+};
+
+struct scmi_msg_perf_describe_levels {
+	__le32 domain;
+	__le32 level_index;
+};
+
+struct scmi_perf_set_limits {
+	__le32 domain;
+	__le32 max_level;
+	__le32 min_level;
+};
+
+struct scmi_perf_get_limits {
+	__le32 max_level;
+	__le32 min_level;
+};
+
+struct scmi_perf_set_level {
+	__le32 domain;
+	__le32 level;
+};
+
+struct scmi_perf_notify_level_or_limits {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_perf_limits_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 range_max;
+	__le32 range_min;
+};
+
+struct scmi_perf_level_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 performance_level;
+};
+
+struct scmi_msg_resp_perf_describe_levels {
+	__le16 num_returned;
+	__le16 num_remaining;
+	struct {
+		__le32 perf_val;
+		__le32 power;
+		__le16 transition_latency_us;
+		__le16 reserved;
+	} opp[0];
+};
+
+struct perf_dom_info {
+	bool set_limits;
+	bool set_perf;
+	bool perf_limit_notify;
+	bool perf_level_notify;
+	bool perf_fastchannels;
+	u32 opp_count;
+	u32 sustained_freq_khz;
+	u32 sustained_perf_level;
+	u32 mult_factor;
+	char name[64];
+	struct scmi_opp opp[16];
+	struct scmi_fc_info *fc_info;
+};
+
+struct scmi_perf_info {
+	u32 version;
+	int num_domains;
+	enum scmi_power_scale power_scale;
+	u64 stats_addr;
+	u32 stats_size;
+	struct perf_dom_info *dom_info;
+};
+
+struct scmi_perf_ipriv {
+	u32 domain;
+	struct perf_dom_info *perf_dom;
+};
+
+struct scmi_powercap_info {
+	unsigned int id;
+	bool notify_powercap_cap_change;
+	bool notify_powercap_measurement_change;
+	bool async_powercap_cap_set;
+	bool powercap_cap_config;
+	bool powercap_monitoring;
+	bool powercap_pai_config;
+	bool powercap_scale_mw;
+	bool powercap_scale_uw;
+	bool fastchannels;
+	char name[64];
+	unsigned int min_pai;
+	unsigned int max_pai;
+	unsigned int pai_step;
+	unsigned int min_power_cap;
+	unsigned int max_power_cap;
+	unsigned int power_cap_step;
+	unsigned int sustainable_power;
+	unsigned int accuracy;
+	unsigned int parent_id;
+	struct scmi_fc_info *fc_info;
+};
+
+struct scmi_powercap_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const struct scmi_powercap_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*cap_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*cap_set)(const struct scmi_protocol_handle *, u32, u32, bool);
+	int (*pai_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*pai_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*measurements_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+	int (*measurements_threshold_set)(const struct scmi_protocol_handle *, u32, u32, u32);
+	int (*measurements_threshold_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+};
+
+struct scmi_powercap_cap_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power_cap;
+	unsigned int pai;
+};
+
+struct scmi_powercap_meas_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power;
+};
+
+enum scmi_powercap_protocol_cmd {
+	POWERCAP_DOMAIN_ATTRIBUTES = 3,
+	POWERCAP_CAP_GET = 4,
+	POWERCAP_CAP_SET = 5,
+	POWERCAP_PAI_GET = 6,
+	POWERCAP_PAI_SET = 7,
+	POWERCAP_DOMAIN_NAME_GET = 8,
+	POWERCAP_MEASUREMENTS_GET = 9,
+	POWERCAP_CAP_NOTIFY = 10,
+	POWERCAP_MEASUREMENTS_NOTIFY = 11,
+	POWERCAP_DESCRIBE_FASTCHANNEL = 12,
+};
+
+enum {
+	POWERCAP_FC_CAP = 0,
+	POWERCAP_FC_PAI = 1,
+	POWERCAP_FC_MAX = 2,
+};
+
+struct scmi_msg_resp_powercap_domain_attributes {
+	__le32 attributes;
+	u8 name[16];
+	__le32 min_pai;
+	__le32 max_pai;
+	__le32 pai_step;
+	__le32 min_power_cap;
+	__le32 max_power_cap;
+	__le32 power_cap_step;
+	__le32 sustainable_power;
+	__le32 accuracy;
+	__le32 parent_id;
+};
+
+struct scmi_msg_powercap_set_cap_or_pai {
+	__le32 domain;
+	__le32 flags;
+	__le32 value;
+};
+
+struct scmi_msg_resp_powercap_cap_set_complete {
+	__le32 domain;
+	__le32 power_cap;
+};
+
+struct scmi_msg_resp_powercap_meas_get {
+	__le32 power;
+	__le32 pai;
+};
+
+struct scmi_msg_powercap_notify_cap {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_msg_powercap_notify_thresh {
+	__le32 domain;
+	__le32 notify_enable;
+	__le32 power_thresh_low;
+	__le32 power_thresh_high;
+};
+
+struct scmi_powercap_cap_changed_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power_cap;
+	__le32 pai;
+};
+
+struct scmi_powercap_meas_changed_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power;
+};
+
+struct scmi_powercap_state {
+	bool meas_notif_enabled;
+	u64 thresholds;
+};
+
+struct powercap_info {
+	u32 version;
+	int num_domains;
+	struct scmi_powercap_state *states;
+	struct scmi_powercap_info *powercaps;
+};
+
+typedef struct {
+	u32 version;
+	u32 num_entries;
+	u32 desc_size;
+	u32 reserved;
+	efi_memory_desc_t entry[0];
+} efi_memory_attributes_table_t;
+
+struct efi_mokvar_sysfs_attr {
+	struct bin_attribute bin_attr;
+	struct list_head node;
+};
+
+struct imx_sc_msg_req_misc_set_ctrl {
+	struct imx_sc_rpc_msg hdr;
+	u32 ctrl;
+	u32 val;
+	u16 resource;
+};
+
+struct imx_sc_msg_req_cpu_start {
+	struct imx_sc_rpc_msg hdr;
+	u32 address_hi;
+	u32 address_lo;
+	u16 resource;
+	u8 enable;
+};
+
+struct imx_sc_msg_req_misc_get_ctrl {
+	struct imx_sc_rpc_msg hdr;
+	u32 ctrl;
+	u16 resource;
+};
+
+struct imx_sc_msg_resp_misc_get_ctrl {
+	struct imx_sc_rpc_msg hdr;
+	u32 val;
+};
+
+struct imx_sc_msg_irq_get_status {
+	struct imx_sc_rpc_msg hdr;
+	union {
+		struct {
+			u16 resource;
+			u8 group;
+			u8 reserved;
+		} req;
+		struct {
+			u32 status;
+		} resp;
+	} data;
+};
+
+struct imx_sc_msg_irq_enable {
+	struct imx_sc_rpc_msg hdr;
+	u32 mask;
+	u16 resource;
+	u8 group;
+	u8 enable;
+};
+
+struct tegra186_bpmp {
+	struct tegra_bpmp *parent;
+	struct {
+		struct gen_pool *pool;
+		dma_addr_t phys;
+		void *virt;
+	} tx;
+	struct {
+		struct gen_pool *pool;
+		dma_addr_t phys;
+		void *virt;
+	} rx;
+	struct {
+		struct mbox_client client;
+		struct mbox_chan *channel;
+	} mbox;
+};
+
+struct omap_dm_timer;
+
+struct omap_dm_timer_ops {
+	struct omap_dm_timer * (*request_by_node)(struct device_node *);
+	struct omap_dm_timer * (*request_specific)(int);
+	struct omap_dm_timer * (*request)();
+	int (*free)(struct omap_dm_timer *);
+	void (*enable)(struct omap_dm_timer *);
+	void (*disable)(struct omap_dm_timer *);
+	int (*get_irq)(struct omap_dm_timer *);
+	int (*set_int_enable)(struct omap_dm_timer *, unsigned int);
+	int (*set_int_disable)(struct omap_dm_timer *, u32);
+	struct clk * (*get_fclk)(struct omap_dm_timer *);
+	int (*start)(struct omap_dm_timer *);
+	int (*stop)(struct omap_dm_timer *);
+	int (*set_source)(struct omap_dm_timer *, int);
+	int (*set_load)(struct omap_dm_timer *, unsigned int);
+	int (*set_match)(struct omap_dm_timer *, int, unsigned int);
+	int (*set_pwm)(struct omap_dm_timer *, int, int, int, int);
+	int (*get_pwm_status)(struct omap_dm_timer *);
+	int (*set_prescaler)(struct omap_dm_timer *, int);
+	unsigned int (*read_counter)(struct omap_dm_timer *);
+	int (*write_counter)(struct omap_dm_timer *, unsigned int);
+	unsigned int (*read_status)(struct omap_dm_timer *);
+	int (*write_status)(struct omap_dm_timer *, unsigned int);
+};
+
+struct timer_regs {
+	u32 ocp_cfg;
+	u32 tidr;
+	u32 tier;
+	u32 twer;
+	u32 tclr;
+	u32 tcrr;
+	u32 tldr;
+	u32 ttrg;
+	u32 twps;
+	u32 tmar;
+	u32 tcar1;
+	u32 tsicr;
+	u32 tcar2;
+	u32 tpir;
+	u32 tnir;
+	u32 tcvr;
+	u32 tocr;
+	u32 towr;
+};
+
+struct omap_dm_timer {
+	int id;
+	int irq;
+	struct clk *fclk;
+	void *io_base;
+	void *irq_stat;
+	void *irq_ena;
+	void *irq_dis;
+	void *pend;
+	void *func_base;
+	atomic_t enabled;
+	long unsigned int rate;
+	unsigned int reserved: 1;
+	unsigned int posted: 1;
+	struct timer_regs context;
+	int revision;
+	u32 capability;
+	u32 errata;
+	struct platform_device *pdev;
+	struct list_head node;
+	struct notifier_block nb;
+};
+
+struct dmtimer_platform_data {
+	int (*set_timer_src)(struct platform_device *, int);
+	u32 timer_capability;
+	u32 timer_errata;
+	int (*get_context_loss_count)(struct device *);
+	const struct omap_dm_timer_ops *timer_ops;
+};
+
+enum {
+	REQUEST_ANY = 0,
+	REQUEST_BY_ID = 1,
+	REQUEST_BY_CAP = 2,
+	REQUEST_BY_NODE = 3,
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct hiddev_event {
+	unsigned int hid;
+	int value;
+};
+
+struct hiddev_devinfo {
+	__u32 bustype;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 ifnum;
+	__s16 vendor;
+	__s16 product;
+	__s16 version;
+	__u32 num_applications;
+};
+
+struct hiddev_collection_info {
+	__u32 index;
+	__u32 type;
+	__u32 usage;
+	__u32 level;
+};
+
+struct hiddev_report_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 num_fields;
+};
+
+struct hiddev_field_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 maxusage;
+	__u32 flags;
+	__u32 physical;
+	__u32 logical;
+	__u32 application;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__u32 unit_exponent;
+	__u32 unit;
+};
+
+struct hiddev_usage_ref {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 usage_index;
+	__u32 usage_code;
+	__s32 value;
+};
+
+struct hiddev_usage_ref_multi {
+	struct hiddev_usage_ref uref;
+	__u32 num_values;
+	__s32 values[1024];
+};
+
+struct hiddev_list {
+	struct hiddev_usage_ref buffer[2048];
+	int head;
+	int tail;
+	unsigned int flags;
+	struct fasync_struct *fasync;
+	struct hiddev *hiddev;
+	struct list_head node;
+	struct mutex thread_lock;
+};
+
+struct of_bus___2 {
+	void (*count_cells)(const void *, int, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+};
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+struct ti_msgmgr_message {
+	size_t len;
+	u8 *buf;
+	struct mbox_chan *chan_rx;
+	int timeout_rx_ms;
+};
+
+struct ti_msgmgr_valid_queue_desc {
+	u8 queue_id;
+	u8 proxy_id;
+	bool is_tx;
+};
+
+struct ti_msgmgr_desc {
+	u8 queue_count;
+	u8 max_message_size;
+	u8 max_messages;
+	u8 data_first_reg;
+	u8 data_last_reg;
+	u32 status_cnt_mask;
+	u32 status_err_mask;
+	bool tx_polled;
+	int tx_poll_timeout_ms;
+	const struct ti_msgmgr_valid_queue_desc *valid_queues;
+	const char *data_region_name;
+	const char *status_region_name;
+	const char *ctrl_region_name;
+	int num_valid_queues;
+	bool is_sproxy;
+};
+
+struct ti_queue_inst {
+	char name[30];
+	u8 queue_id;
+	u8 proxy_id;
+	int irq;
+	bool is_tx;
+	void *queue_buff_start;
+	void *queue_buff_end;
+	void *queue_state;
+	void *queue_ctrl;
+	struct mbox_chan *chan;
+	u32 *rx_buff;
+	bool polled_rx_mode;
+};
+
+struct ti_msgmgr_inst {
+	struct device *dev;
+	const struct ti_msgmgr_desc *desc;
+	void *queue_proxy_region;
+	void *queue_state_debug_region;
+	void *queue_ctrl_region;
+	u8 num_valid_queues;
+	struct ti_queue_inst *qinsts;
+	struct mbox_controller mbox;
+	struct mbox_chan *chans;
+};
+
+enum rsc_handling_status {
+	RSC_HANDLED = 0,
+	RSC_IGNORED = 1,
+};
+
+struct rproc_subdev {
+	struct list_head node;
+	int (*prepare)(struct rproc_subdev *);
+	int (*start)(struct rproc_subdev *);
+	void (*stop)(struct rproc_subdev *, bool);
+	void (*unprepare)(struct rproc_subdev *);
+};
+
+struct rproc_vdev;
+
+struct rproc_vring {
+	void *va;
+	int num;
+	u32 da;
+	u32 align;
+	int notifyid;
+	struct rproc_vdev *rvdev;
+	struct virtqueue *vq;
+};
+
+struct rproc_vdev {
+	struct kref refcount;
+	struct rproc_subdev subdev;
+	struct device dev;
+	unsigned int id;
+	struct list_head node;
+	struct rproc *rproc;
+	struct rproc_vring vring[2];
+	u32 rsc_offset;
+	u32 index;
+};
+
+typedef int (*rproc_handle_resource_t)(struct rproc *, void *, int, int);
+
+struct devfreq_freqs {
+	long unsigned int old;
+	long unsigned int new;
+};
+
+enum devfreq_parent_dev_type {
+	DEVFREQ_PARENT_DEV = 0,
+	CPUFREQ_PARENT_DEV = 1,
+};
+
+struct devfreq_passive_data {
+	struct devfreq *parent;
+	int (*get_target_freq)(struct devfreq *, long unsigned int *);
+	enum devfreq_parent_dev_type parent_type;
+	struct devfreq *this;
+	struct notifier_block nb;
+	struct list_head cpu_data_list;
+};
+
+struct trace_event_raw_devfreq_frequency {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	long unsigned int freq;
+	long unsigned int prev_freq;
+	long unsigned int busy_time;
+	long unsigned int total_time;
+	char __data[0];
+};
+
+struct trace_event_raw_devfreq_monitor {
+	struct trace_entry ent;
+	long unsigned int freq;
+	long unsigned int busy_time;
+	long unsigned int total_time;
+	unsigned int polling_ms;
+	u32 __data_loc_dev_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devfreq_frequency {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_devfreq_monitor {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_devfreq_frequency)(void *, struct devfreq *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
+
+struct devfreq_notifier_devres {
+	struct devfreq *devfreq;
+	struct notifier_block *nb;
+	unsigned int list;
 };
 
 struct powercap_constraint_attr {
@@ -95503,170 +111571,6 @@
 	struct device_attribute name_attr;
 };
 
-enum {
-	CCI_IF_SLAVE = 0,
-	CCI_IF_MASTER = 1,
-	CCI_IF_MAX = 2,
-};
-
-struct event_range {
-	u32 min;
-	u32 max;
-};
-
-struct cci_pmu_hw_events {
-	struct perf_event **events;
-	long unsigned int *used_mask;
-	raw_spinlock_t pmu_lock;
-};
-
-struct cci_pmu;
-
-struct cci_pmu_model {
-	char *name;
-	u32 fixed_hw_cntrs;
-	u32 num_hw_cntrs;
-	u32 cntr_size;
-	struct attribute **format_attrs;
-	struct attribute **event_attrs;
-	struct event_range event_ranges[2];
-	int (*validate_hw_event)(struct cci_pmu *, long unsigned int);
-	int (*get_event_idx)(struct cci_pmu *, struct cci_pmu_hw_events *, long unsigned int);
-	void (*write_counters)(struct cci_pmu *, long unsigned int *);
-};
-
-struct cci_pmu {
-	void *base;
-	void *ctrl_base;
-	struct pmu pmu;
-	int cpu;
-	int nr_irqs;
-	int *irqs;
-	long unsigned int active_irqs;
-	const struct cci_pmu_model *model;
-	struct cci_pmu_hw_events hw_events;
-	struct platform_device *plat_device;
-	int num_cntrs;
-	atomic_t active_events;
-	struct mutex reserve_mutex;
-};
-
-enum cci_models {
-	CCI400_R0 = 0,
-	CCI400_R1 = 1,
-	CCI_MODEL_MAX = 2,
-};
-
-enum cci400_perf_events {
-	CCI400_PMU_CYCLES = 255,
-};
-
-struct arm_ccn_component {
-	void *base;
-	u32 type;
-	long unsigned int pmu_events_mask[1];
-	union {
-		struct {
-			long unsigned int dt_cmp_mask[1];
-		} xp;
-	};
-};
-
-struct arm_ccn_dt {
-	int id;
-	void *base;
-	spinlock_t config_lock;
-	long unsigned int pmu_counters_mask[1];
-	struct {
-		struct arm_ccn_component *source;
-		struct perf_event *event;
-	} pmu_counters[9];
-	struct {
-		u64 l;
-		u64 h;
-	} cmp_mask[12];
-	struct hrtimer hrtimer;
-	unsigned int cpu;
-	struct hlist_node node;
-	struct pmu pmu;
-};
-
-struct arm_ccn {
-	struct device *dev;
-	void *base;
-	unsigned int irq;
-	unsigned int sbas_present: 1;
-	unsigned int sbsx_present: 1;
-	int num_nodes;
-	struct arm_ccn_component *node;
-	int num_xps;
-	struct arm_ccn_component *xp;
-	struct arm_ccn_dt dt;
-	int mn_id;
-};
-
-struct arm_ccn_pmu_event {
-	struct device_attribute attr;
-	u32 type;
-	u32 event;
-	int num_ports;
-	int num_vcs;
-	const char *def;
-	int mask;
-};
-
-struct pmu_irq_ops {
-	void (*enable_pmuirq)(unsigned int);
-	void (*disable_pmuirq)(unsigned int);
-	void (*free_pmuirq)(unsigned int, int, void *);
-};
-
-typedef int (*armpmu_init_fn)(struct arm_pmu *);
-
-struct pmu_probe_info {
-	unsigned int cpuid;
-	unsigned int mask;
-	armpmu_init_fn init;
-};
-
-struct hisi_pmu;
-
-struct hisi_uncore_ops {
-	void (*write_evtype)(struct hisi_pmu *, int, u32);
-	int (*get_event_idx)(struct perf_event *);
-	u64 (*read_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*write_counter)(struct hisi_pmu *, struct hw_perf_event *, u64);
-	void (*enable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*enable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*start_counters)(struct hisi_pmu *);
-	void (*stop_counters)(struct hisi_pmu *);
-};
-
-struct hisi_pmu_hwevents {
-	struct perf_event *hw_events[16];
-	long unsigned int used_mask[1];
-};
-
-struct hisi_pmu {
-	struct pmu pmu;
-	const struct hisi_uncore_ops *ops;
-	struct hisi_pmu_hwevents pmu_events;
-	cpumask_t associated_cpus;
-	int on_cpu;
-	int irq;
-	struct device *dev;
-	struct hlist_node node;
-	int sccl_id;
-	int ccl_id;
-	void *base;
-	u32 index_id;
-	int num_counters;
-	int counter_bits;
-	int check_event;
-};
-
 struct hw_pmu_info {
 	u32 type;
 	u32 enable_mask;
@@ -95749,6 +111653,17934 @@
 	PMU_TYPE_MC = 4,
 };
 
+enum tb_switch_vse_cap {
+	TB_VSE_CAP_PLUG_EVENTS = 1,
+	TB_VSE_CAP_TIME2 = 3,
+	TB_VSE_CAP_CP_LP = 4,
+	TB_VSE_CAP_LINK_CONTROLLER = 6,
+};
+
+enum tb_port_state {
+	TB_PORT_DISABLED = 0,
+	TB_PORT_CONNECTING = 1,
+	TB_PORT_UP = 2,
+	TB_PORT_UNPLUGGED = 7,
+};
+
+struct tb_cap_basic {
+	u8 next;
+	u8 cap;
+};
+
+struct tb_cap_phy {
+	struct tb_cap_basic cap_header;
+	u32 unknown1: 16;
+	u32 unknown2: 14;
+	bool disable: 1;
+	u32 unknown3: 11;
+	enum tb_port_state state: 4;
+	u32 unknown4: 2;
+};
+
+struct tb_regs_hop {
+	u32 next_hop: 11;
+	u32 out_port: 6;
+	u32 initial_credits: 8;
+	u32 unknown1: 6;
+	bool enable: 1;
+	u32 weight: 4;
+	u32 unknown2: 4;
+	u32 priority: 3;
+	bool drop_packages: 1;
+	u32 counter: 11;
+	bool counter_enable: 1;
+	bool ingress_fc: 1;
+	bool egress_fc: 1;
+	bool ingress_shared_buffer: 1;
+	bool egress_shared_buffer: 1;
+	bool pending: 1;
+	u32 unknown3: 3;
+};
+
+enum tb_nvm_write_ops {
+	WRITE_AND_AUTHENTICATE = 1,
+	WRITE_ONLY = 2,
+	AUTHENTICATE_ONLY = 3,
+};
+
+struct nvm_auth_status {
+	struct list_head list;
+	uuid_t uuid;
+	u32 status;
+};
+
+struct tb_sw_lookup {
+	struct tb *tb;
+	u8 link;
+	u8 depth;
+	const uuid_t *uuid;
+	u64 route;
+};
+
+struct tb_service_id {
+	__u32 match_flags;
+	char protocol_key[9];
+	__u32 protocol_id;
+	__u32 protocol_version;
+	__u32 protocol_revision;
+	kernel_ulong_t driver_data;
+};
+
+enum tb_property_type {
+	TB_PROPERTY_TYPE_UNKNOWN = 0,
+	TB_PROPERTY_TYPE_DIRECTORY = 68,
+	TB_PROPERTY_TYPE_DATA = 100,
+	TB_PROPERTY_TYPE_TEXT = 116,
+	TB_PROPERTY_TYPE_VALUE = 118,
+};
+
+struct tb_property {
+	struct list_head list;
+	char key[9];
+	enum tb_property_type type;
+	size_t length;
+	union {
+		struct tb_property_dir *dir;
+		u8 *data;
+		char *text;
+		u32 immediate;
+	} value;
+};
+
+struct tb_protocol_handler {
+	const uuid_t *uuid;
+	int (*callback)(const void *, size_t, void *);
+	void *data;
+	struct list_head list;
+};
+
+struct tb_service {
+	struct device dev;
+	int id;
+	const char *key;
+	u32 prtcid;
+	u32 prtcvers;
+	u32 prtcrevs;
+	u32 prtcstns;
+	struct dentry *debugfs_dir;
+};
+
+struct tb_service_driver {
+	struct device_driver driver;
+	int (*probe)(struct tb_service *, const struct tb_service_id *);
+	void (*remove)(struct tb_service *);
+	void (*shutdown)(struct tb_service *);
+	const struct tb_service_id *id_table;
+};
+
+struct tb_xdomain_header {
+	u32 route_hi;
+	u32 route_lo;
+	u32 length_sn;
+};
+
+enum tb_xdp_type {
+	UUID_REQUEST_OLD = 1,
+	UUID_RESPONSE = 2,
+	PROPERTIES_REQUEST = 3,
+	PROPERTIES_RESPONSE = 4,
+	PROPERTIES_CHANGED_REQUEST = 5,
+	PROPERTIES_CHANGED_RESPONSE = 6,
+	ERROR_RESPONSE = 7,
+	UUID_REQUEST = 12,
+	LINK_STATE_STATUS_REQUEST = 15,
+	LINK_STATE_STATUS_RESPONSE = 16,
+	LINK_STATE_CHANGE_REQUEST = 17,
+	LINK_STATE_CHANGE_RESPONSE = 18,
+};
+
+struct tb_xdp_header {
+	struct tb_xdomain_header xd_hdr;
+	uuid_t uuid;
+	u32 type;
+};
+
+struct tb_xdp_error_response {
+	struct tb_xdp_header hdr;
+	u32 error;
+};
+
+struct tb_xdp_link_state_status {
+	struct tb_xdp_header hdr;
+};
+
+struct tb_xdp_link_state_status_response {
+	union {
+		struct tb_xdp_error_response err;
+		struct {
+			struct tb_xdp_header hdr;
+			u32 status;
+			u8 slw;
+			u8 tlw;
+			u8 sls;
+			u8 tls;
+		};
+	};
+};
+
+struct tb_xdp_link_state_change {
+	struct tb_xdp_header hdr;
+	u8 tlw;
+	u8 tls;
+	u16 reserved;
+};
+
+struct tb_xdp_link_state_change_response {
+	union {
+		struct tb_xdp_error_response err;
+		struct {
+			struct tb_xdp_header hdr;
+			u32 status;
+		};
+	};
+};
+
+struct tb_xdp_uuid {
+	struct tb_xdp_header hdr;
+};
+
+struct tb_xdp_uuid_response {
+	union {
+		struct tb_xdp_error_response err;
+		struct {
+			struct tb_xdp_header hdr;
+			uuid_t src_uuid;
+			u32 src_route_hi;
+			u32 src_route_lo;
+		};
+	};
+};
+
+struct tb_xdp_properties {
+	struct tb_xdp_header hdr;
+	uuid_t src_uuid;
+	uuid_t dst_uuid;
+	u16 offset;
+	u16 reserved;
+};
+
+struct tb_xdp_properties_response {
+	union {
+		struct tb_xdp_error_response err;
+		struct {
+			struct tb_xdp_header hdr;
+			uuid_t src_uuid;
+			uuid_t dst_uuid;
+			u16 offset;
+			u16 data_length;
+			u32 generation;
+			u32 data[0];
+		};
+	};
+};
+
+struct tb_xdp_properties_changed {
+	struct tb_xdp_header hdr;
+	uuid_t src_uuid;
+};
+
+struct tb_xdp_properties_changed_response {
+	union {
+		struct tb_xdp_error_response err;
+		struct tb_xdp_header hdr;
+	};
+};
+
+enum tb_xdp_error {
+	ERROR_SUCCESS = 0,
+	ERROR_UNKNOWN_PACKET = 1,
+	ERROR_UNKNOWN_DOMAIN = 2,
+	ERROR_NOT_SUPPORTED = 3,
+	ERROR_NOT_READY = 4,
+};
+
+enum {
+	XDOMAIN_STATE_INIT = 0,
+	XDOMAIN_STATE_UUID = 1,
+	XDOMAIN_STATE_LINK_STATUS = 2,
+	XDOMAIN_STATE_LINK_STATE_CHANGE = 3,
+	XDOMAIN_STATE_LINK_STATUS2 = 4,
+	XDOMAIN_STATE_BONDING_UUID_LOW = 5,
+	XDOMAIN_STATE_BONDING_UUID_HIGH = 6,
+	XDOMAIN_STATE_PROPERTIES = 7,
+	XDOMAIN_STATE_ENUMERATED = 8,
+	XDOMAIN_STATE_ERROR = 9,
+};
+
+struct xdomain_request_work {
+	struct work_struct work;
+	struct tb_xdp_header *pkg;
+	struct tb *tb;
+};
+
+struct tb_xdomain_lookup {
+	const uuid_t *uuid;
+	u8 link;
+	u8 depth;
+	u64 route;
+};
+
+enum {
+	BINDER_TYPE_BINDER = 1935813253,
+	BINDER_TYPE_WEAK_BINDER = 2002922117,
+	BINDER_TYPE_HANDLE = 1936206469,
+	BINDER_TYPE_WEAK_HANDLE = 2003315333,
+	BINDER_TYPE_FD = 1717840517,
+	BINDER_TYPE_FDA = 1717854597,
+	BINDER_TYPE_PTR = 1886661253,
+};
+
+enum {
+	FLAT_BINDER_FLAG_PRIORITY_MASK = 255,
+	FLAT_BINDER_FLAG_ACCEPTS_FDS = 256,
+	FLAT_BINDER_FLAG_TXN_SECURITY_CTX = 4096,
+};
+
+struct binder_object_header {
+	__u32 type;
+};
+
+struct flat_binder_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	union {
+		binder_uintptr_t binder;
+		__u32 handle;
+	};
+	binder_uintptr_t cookie;
+};
+
+struct binder_fd_object {
+	struct binder_object_header hdr;
+	__u32 pad_flags;
+	union {
+		binder_uintptr_t pad_binder;
+		__u32 fd;
+	};
+	binder_uintptr_t cookie;
+};
+
+struct binder_buffer_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	binder_uintptr_t buffer;
+	binder_size_t length;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+enum {
+	BINDER_BUFFER_FLAG_HAS_PARENT = 1,
+};
+
+struct binder_fd_array_object {
+	struct binder_object_header hdr;
+	__u32 pad;
+	binder_size_t num_fds;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+struct binder_write_read {
+	binder_size_t write_size;
+	binder_size_t write_consumed;
+	binder_uintptr_t write_buffer;
+	binder_size_t read_size;
+	binder_size_t read_consumed;
+	binder_uintptr_t read_buffer;
+};
+
+struct binder_version {
+	__s32 protocol_version;
+};
+
+struct binder_node_debug_info {
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	__u32 has_strong_ref;
+	__u32 has_weak_ref;
+};
+
+struct binder_node_info_for_ref {
+	__u32 handle;
+	__u32 strong_count;
+	__u32 weak_count;
+	__u32 reserved1;
+	__u32 reserved2;
+	__u32 reserved3;
+};
+
+struct binder_freeze_info {
+	__u32 pid;
+	__u32 enable;
+	__u32 timeout_ms;
+};
+
+struct binder_frozen_status_info {
+	__u32 pid;
+	__u32 sync_recv;
+	__u32 async_recv;
+};
+
+struct binder_extended_error {
+	__u32 id;
+	__u32 command;
+	__s32 param;
+};
+
+enum transaction_flags {
+	TF_ONE_WAY = 1,
+	TF_ROOT_OBJECT = 4,
+	TF_STATUS_CODE = 8,
+	TF_ACCEPT_FDS = 16,
+	TF_CLEAR_BUF = 32,
+	TF_UPDATE_TXN = 64,
+};
+
+struct binder_transaction_data {
+	union {
+		__u32 handle;
+		binder_uintptr_t ptr;
+	} target;
+	binder_uintptr_t cookie;
+	__u32 code;
+	__u32 flags;
+	__kernel_pid_t sender_pid;
+	__kernel_uid32_t sender_euid;
+	binder_size_t data_size;
+	binder_size_t offsets_size;
+	union {
+		struct {
+			binder_uintptr_t buffer;
+			binder_uintptr_t offsets;
+		} ptr;
+		__u8 buf[8];
+	} data;
+};
+
+struct binder_transaction_data_secctx {
+	struct binder_transaction_data transaction_data;
+	binder_uintptr_t secctx;
+};
+
+struct binder_transaction_data_sg {
+	struct binder_transaction_data transaction_data;
+	binder_size_t buffers_size;
+};
+
+struct binder_thread;
+
+struct binder_transaction {
+	int debug_id;
+	struct binder_work work;
+	struct binder_thread *from;
+	struct binder_transaction *from_parent;
+	struct binder_proc *to_proc;
+	struct binder_thread *to_thread;
+	struct binder_transaction *to_parent;
+	unsigned int need_reply: 1;
+	struct binder_buffer *buffer;
+	unsigned int code;
+	unsigned int flags;
+	long int priority;
+	long int saved_priority;
+	kuid_t sender_euid;
+	struct list_head fd_fixups;
+	binder_uintptr_t security_ctx;
+	spinlock_t lock;
+};
+
+struct binder_error {
+	struct binder_work work;
+	uint32_t cmd;
+};
+
+struct binder_ref_death {
+	struct binder_work work;
+	binder_uintptr_t cookie;
+};
+
+struct binder_ref_data {
+	int debug_id;
+	uint32_t desc;
+	int strong;
+	int weak;
+};
+
+struct binder_ref {
+	struct binder_ref_data data;
+	struct rb_node rb_node_desc;
+	struct rb_node rb_node_node;
+	struct hlist_node node_entry;
+	struct binder_proc *proc;
+	struct binder_node *node;
+	struct binder_ref_death *death;
+};
+
+struct binder_thread {
+	struct binder_proc *proc;
+	struct rb_node rb_node;
+	struct list_head waiting_thread_node;
+	int pid;
+	int looper;
+	bool looper_need_return;
+	struct binder_transaction *transaction_stack;
+	struct list_head todo;
+	bool process_todo;
+	struct binder_error return_error;
+	struct binder_error reply_error;
+	struct binder_extended_error ee;
+	wait_queue_head_t wait;
+	struct binder_stats stats;
+	atomic_t tmp_ref;
+	bool is_dead;
+};
+
+struct binder_txn_fd_fixup {
+	struct list_head fixup_entry;
+	struct file *file;
+	size_t offset;
+	int target_fd;
+};
+
+struct binder_object {
+	union {
+		struct binder_object_header hdr;
+		struct flat_binder_object fbo;
+		struct binder_fd_object fdo;
+		struct binder_buffer_object bbo;
+		struct binder_fd_array_object fdao;
+	};
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR___2 = 1,
+	BINDER_DEBUG_FAILED_TRANSACTION = 2,
+	BINDER_DEBUG_DEAD_TRANSACTION = 4,
+	BINDER_DEBUG_OPEN_CLOSE___2 = 8,
+	BINDER_DEBUG_DEAD_BINDER = 16,
+	BINDER_DEBUG_DEATH_NOTIFICATION = 32,
+	BINDER_DEBUG_READ_WRITE = 64,
+	BINDER_DEBUG_USER_REFS = 128,
+	BINDER_DEBUG_THREADS = 256,
+	BINDER_DEBUG_TRANSACTION = 512,
+	BINDER_DEBUG_TRANSACTION_COMPLETE = 1024,
+	BINDER_DEBUG_FREE_BUFFER = 2048,
+	BINDER_DEBUG_INTERNAL_REFS = 4096,
+	BINDER_DEBUG_PRIORITY_CAP = 8192,
+	BINDER_DEBUG_SPINLOCKS = 16384,
+};
+
+struct binder_transaction_log_entry {
+	int debug_id;
+	int debug_id_done;
+	int call_type;
+	int from_proc;
+	int from_thread;
+	int target_handle;
+	int to_proc;
+	int to_thread;
+	int to_node;
+	int data_size;
+	int offsets_size;
+	int return_error_line;
+	uint32_t return_error;
+	uint32_t return_error_param;
+	char context_name[256];
+};
+
+struct binder_transaction_log {
+	atomic_t cur;
+	bool full;
+	struct binder_transaction_log_entry entry[32];
+};
+
+enum binder_deferred_state {
+	BINDER_DEFERRED_FLUSH = 1,
+	BINDER_DEFERRED_RELEASE = 2,
+};
+
+enum {
+	BINDER_LOOPER_STATE_REGISTERED = 1,
+	BINDER_LOOPER_STATE_ENTERED = 2,
+	BINDER_LOOPER_STATE_EXITED = 4,
+	BINDER_LOOPER_STATE_INVALID = 8,
+	BINDER_LOOPER_STATE_WAITING = 16,
+	BINDER_LOOPER_STATE_POLL = 32,
+};
+
+struct binder_task_work_cb {
+	struct callback_head twork;
+	struct file *file;
+};
+
+struct binder_ptr_fixup {
+	binder_size_t offset;
+	size_t skip_size;
+	binder_uintptr_t fixup_data;
+	struct list_head node;
+};
+
+struct binder_sg_copy {
+	binder_size_t offset;
+	const void *sender_uaddr;
+	size_t length;
+	struct list_head node;
+};
+
+struct trace_event_raw_binder_ioctl {
+	struct trace_entry ent;
+	unsigned int cmd;
+	long unsigned int arg;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lock_class {
+	struct trace_entry ent;
+	const char *tag;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_function_return_class {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_wait_for_work {
+	struct trace_entry ent;
+	bool proc_work;
+	bool transaction_stack;
+	bool thread_todo;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_txn_latency_free {
+	struct trace_entry ent;
+	int debug_id;
+	int from_proc;
+	int from_thread;
+	int to_proc;
+	int to_thread;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction {
+	struct trace_entry ent;
+	int debug_id;
+	int target_node;
+	int to_proc;
+	int to_thread;
+	int reply;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_received {
+	struct trace_entry ent;
+	int debug_id;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_node_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_node {
+	struct trace_entry ent;
+	int debug_id;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	int src_ref_debug_id;
+	uint32_t src_ref_desc;
+	int dest_ref_debug_id;
+	uint32_t dest_ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_send {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_recv {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_buffer_class {
+	struct trace_entry ent;
+	int debug_id;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_update_page_range {
+	struct trace_entry ent;
+	int proc;
+	bool allocate;
+	size_t offset;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lru_page_class {
+	struct trace_entry ent;
+	int proc;
+	size_t page_index;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_command {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_return {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_binder_ioctl {};
+
+struct trace_event_data_offsets_binder_lock_class {};
+
+struct trace_event_data_offsets_binder_function_return_class {};
+
+struct trace_event_data_offsets_binder_wait_for_work {};
+
+struct trace_event_data_offsets_binder_txn_latency_free {};
+
+struct trace_event_data_offsets_binder_transaction {};
+
+struct trace_event_data_offsets_binder_transaction_received {};
+
+struct trace_event_data_offsets_binder_transaction_node_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_node {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_fd_send {};
+
+struct trace_event_data_offsets_binder_transaction_fd_recv {};
+
+struct trace_event_data_offsets_binder_buffer_class {};
+
+struct trace_event_data_offsets_binder_update_page_range {};
+
+struct trace_event_data_offsets_binder_lru_page_class {};
+
+struct trace_event_data_offsets_binder_command {};
+
+struct trace_event_data_offsets_binder_return {};
+
+typedef void (*btf_trace_binder_ioctl)(void *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_binder_lock)(void *, const char *);
+
+typedef void (*btf_trace_binder_locked)(void *, const char *);
+
+typedef void (*btf_trace_binder_unlock)(void *, const char *);
+
+typedef void (*btf_trace_binder_ioctl_done)(void *, int);
+
+typedef void (*btf_trace_binder_write_done)(void *, int);
+
+typedef void (*btf_trace_binder_read_done)(void *, int);
+
+typedef void (*btf_trace_binder_wait_for_work)(void *, bool, bool, bool);
+
+typedef void (*btf_trace_binder_txn_latency_free)(void *, struct binder_transaction *, int, int, int, int);
+
+typedef void (*btf_trace_binder_transaction)(void *, bool, struct binder_transaction *, struct binder_node *);
+
+typedef void (*btf_trace_binder_transaction_received)(void *, struct binder_transaction *);
+
+typedef void (*btf_trace_binder_transaction_node_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_ref_to_node)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_ref_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_fd_send)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_fd_recv)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_alloc_buf)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_failed_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_update_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_update_page_range)(void *, struct binder_alloc *, bool, void *, void *);
+
+typedef void (*btf_trace_binder_alloc_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_command)(void *, uint32_t);
+
+typedef void (*btf_trace_binder_return)(void *, uint32_t);
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
+};
+
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
+};
+
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
+};
+
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+struct nf_ct_event;
+
+struct nf_exp_event;
+
+struct nf_ct_event_notifier {
+	int (*ct_event)(unsigned int, const struct nf_ct_event *);
+	int (*exp_event)(unsigned int, const struct nf_exp_event *);
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_link_state;
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool legacy_pre_march2020;
+	bool poll_fixed_state;
+	bool mac_managed_pm;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	long unsigned int supported_interfaces[1];
+	long unsigned int mac_capabilities;
+};
+
+struct dsa_device_ops;
+
+struct dsa_switch_tree;
+
+struct dsa_switch;
+
+struct dsa_bridge;
+
+struct dsa_lag;
+
+struct dsa_netdevice_ops;
+
+struct dsa_port {
+	union {
+		struct net_device *master;
+		struct net_device *slave;
+	};
+	const struct dsa_device_ops *tag_ops;
+	struct dsa_switch_tree *dst;
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	struct dsa_switch *ds;
+	unsigned int index;
+	enum {
+		DSA_PORT_TYPE_UNUSED = 0,
+		DSA_PORT_TYPE_CPU = 1,
+		DSA_PORT_TYPE_DSA = 2,
+		DSA_PORT_TYPE_USER = 3,
+	} type;
+	const char *name;
+	struct dsa_port *cpu_dp;
+	u8 mac[6];
+	u8 stp_state;
+	u8 vlan_filtering: 1;
+	u8 learning: 1;
+	u8 lag_tx_enabled: 1;
+	u8 devlink_port_setup: 1;
+	u8 master_admin_up: 1;
+	u8 master_oper_up: 1;
+	u8 setup: 1;
+	struct device_node *dn;
+	unsigned int ageing_time;
+	struct dsa_bridge *bridge;
+	struct devlink_port devlink_port;
+	struct phylink *pl;
+	struct phylink_config pl_config;
+	struct dsa_lag *lag;
+	struct net_device *hsr_dev;
+	struct list_head list;
+	const struct ethtool_ops *orig_ethtool_ops;
+	const struct dsa_netdevice_ops *netdev_ops;
+	struct mutex addr_lists_lock;
+	struct list_head fdbs;
+	struct list_head mdbs;
+	struct mutex vlans_lock;
+	struct list_head vlans;
+};
+
+enum netdev_lag_tx_type {
+	NETDEV_LAG_TX_TYPE_UNKNOWN = 0,
+	NETDEV_LAG_TX_TYPE_RANDOM = 1,
+	NETDEV_LAG_TX_TYPE_BROADCAST = 2,
+	NETDEV_LAG_TX_TYPE_ROUNDROBIN = 3,
+	NETDEV_LAG_TX_TYPE_ACTIVEBACKUP = 4,
+	NETDEV_LAG_TX_TYPE_HASH = 5,
+};
+
+enum netdev_lag_hash {
+	NETDEV_LAG_HASH_NONE = 0,
+	NETDEV_LAG_HASH_L2 = 1,
+	NETDEV_LAG_HASH_L34 = 2,
+	NETDEV_LAG_HASH_L23 = 3,
+	NETDEV_LAG_HASH_E23 = 4,
+	NETDEV_LAG_HASH_E34 = 5,
+	NETDEV_LAG_HASH_VLAN_SRCMAC = 6,
+	NETDEV_LAG_HASH_UNKNOWN = 7,
+};
+
+struct netdev_lag_upper_info {
+	enum netdev_lag_tx_type tx_type;
+	enum netdev_lag_hash hash_type;
+};
+
+enum {
+	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+enum flow_cls_command {
+	FLOW_CLS_REPLACE = 0,
+	FLOW_CLS_DESTROY = 1,
+	FLOW_CLS_STATS = 2,
+	FLOW_CLS_TMPLT_CREATE = 3,
+	FLOW_CLS_TMPLT_DESTROY = 4,
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct flow_cls_offload {
+	struct flow_cls_common_offload common;
+	enum flow_cls_command command;
+	long unsigned int cookie;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	u32 classid;
+};
+
+struct dsa_chip_data {
+	struct device *host_dev;
+	int sw_addr;
+	struct device *netdev[12];
+	int eeprom_len;
+	struct device_node *of_node;
+	char *port_names[12];
+	struct device_node *port_dn[12];
+	s8 rtable[4];
+};
+
+struct dsa_platform_data {
+	struct device *netdev;
+	struct net_device *of_netdev;
+	int nr_chips;
+	struct dsa_chip_data *chip;
+};
+
+struct phylink_link_state {
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	unsigned int link: 1;
+	unsigned int an_enabled: 1;
+	unsigned int an_complete: 1;
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, long unsigned int *, const struct phylink_link_state *);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const long unsigned int *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+struct devlink_info_req;
+
+struct switchdev_mst_state {
+	u16 msti;
+	u8 state;
+};
+
+struct switchdev_brport_flags {
+	long unsigned int val;
+	long unsigned int mask;
+};
+
+struct switchdev_vlan_msti {
+	u16 vid;
+	u16 msti;
+};
+
+enum switchdev_obj_id {
+	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
+	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
+	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
+	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
+	SWITCHDEV_OBJ_ID_MRP = 4,
+	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
+	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
+	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
+	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
+	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
+	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
+};
+
+struct switchdev_obj {
+	struct list_head list;
+	struct net_device *orig_dev;
+	enum switchdev_obj_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+};
+
+struct switchdev_obj_port_vlan {
+	struct switchdev_obj obj;
+	u16 flags;
+	u16 vid;
+	bool changed;
+};
+
+struct switchdev_obj_port_mdb {
+	struct switchdev_obj obj;
+	unsigned char addr[6];
+	u16 vid;
+};
+
+struct switchdev_obj_mrp {
+	struct switchdev_obj obj;
+	struct net_device *p_port;
+	struct net_device *s_port;
+	u32 ring_id;
+	u16 prio;
+};
+
+struct switchdev_obj_ring_role_mrp {
+	struct switchdev_obj obj;
+	u8 ring_role;
+	u32 ring_id;
+	u8 sw_backup;
+};
+
+enum dsa_tag_protocol {
+	DSA_TAG_PROTO_NONE = 0,
+	DSA_TAG_PROTO_BRCM = 1,
+	DSA_TAG_PROTO_BRCM_LEGACY = 22,
+	DSA_TAG_PROTO_BRCM_PREPEND = 2,
+	DSA_TAG_PROTO_DSA = 3,
+	DSA_TAG_PROTO_EDSA = 4,
+	DSA_TAG_PROTO_GSWIP = 5,
+	DSA_TAG_PROTO_KSZ9477 = 6,
+	DSA_TAG_PROTO_KSZ9893 = 7,
+	DSA_TAG_PROTO_LAN9303 = 8,
+	DSA_TAG_PROTO_MTK = 9,
+	DSA_TAG_PROTO_QCA = 10,
+	DSA_TAG_PROTO_TRAILER = 11,
+	DSA_TAG_PROTO_8021Q = 12,
+	DSA_TAG_PROTO_SJA1105 = 13,
+	DSA_TAG_PROTO_KSZ8795 = 14,
+	DSA_TAG_PROTO_OCELOT = 15,
+	DSA_TAG_PROTO_AR9331 = 16,
+	DSA_TAG_PROTO_RTL4_A = 17,
+	DSA_TAG_PROTO_HELLCREEK = 18,
+	DSA_TAG_PROTO_XRS700X = 19,
+	DSA_TAG_PROTO_OCELOT_8021Q = 20,
+	DSA_TAG_PROTO_SEVILLE = 21,
+	DSA_TAG_PROTO_SJA1110 = 23,
+	DSA_TAG_PROTO_RTL8_4 = 24,
+	DSA_TAG_PROTO_RTL8_4T = 25,
+	DSA_TAG_PROTO_RZN1_A5PSW = 26,
+	DSA_TAG_PROTO_LAN937X = 27,
+};
+
+struct dsa_device_ops {
+	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
+	int (*connect)(struct dsa_switch *);
+	void (*disconnect)(struct dsa_switch *);
+	unsigned int needed_headroom;
+	unsigned int needed_tailroom;
+	const char *name;
+	enum dsa_tag_protocol proto;
+	bool promisc_on_master;
+};
+
+struct dsa_8021q_context;
+
+struct dsa_switch_ops;
+
+struct dsa_switch {
+	struct device *dev;
+	struct dsa_switch_tree *dst;
+	unsigned int index;
+	u32 setup: 1;
+	u32 vlan_filtering_is_global: 1;
+	u32 needs_standalone_vlan_filtering: 1;
+	u32 configure_vlan_while_not_filtering: 1;
+	u32 untag_bridge_pvid: 1;
+	u32 assisted_learning_on_cpu_port: 1;
+	u32 vlan_filtering: 1;
+	u32 mtu_enforcement_ingress: 1;
+	u32 fdb_isolation: 1;
+	struct notifier_block nb;
+	void *priv;
+	void *tagger_data;
+	struct dsa_chip_data *cd;
+	const struct dsa_switch_ops *ops;
+	u32 phys_mii_mask;
+	struct mii_bus *slave_mii_bus;
+	unsigned int ageing_time_min;
+	unsigned int ageing_time_max;
+	struct dsa_8021q_context *tag_8021q_ctx;
+	struct devlink *devlink;
+	unsigned int num_tx_queues;
+	unsigned int num_lag_ids;
+	unsigned int max_num_bridges;
+	unsigned int num_ports;
+};
+
+struct dsa_netdevice_ops {
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+};
+
+struct dsa_lag {
+	struct net_device *dev;
+	unsigned int id;
+	struct mutex fdb_lock;
+	struct list_head fdbs;
+	refcount_t refcount;
+};
+
+struct dsa_switch_tree {
+	struct list_head list;
+	struct list_head ports;
+	struct raw_notifier_head nh;
+	unsigned int index;
+	struct kref refcount;
+	struct dsa_lag **lags;
+	const struct dsa_device_ops *tag_ops;
+	enum dsa_tag_protocol default_proto;
+	bool setup;
+	struct dsa_platform_data *pd;
+	struct list_head rtable;
+	unsigned int lags_len;
+	unsigned int last_switch;
+};
+
+struct dsa_mall_mirror_tc_entry {
+	u8 to_local_port;
+	bool ingress;
+};
+
+struct dsa_mall_policer_tc_entry {
+	u32 burst;
+	u64 rate_bytes_per_sec;
+};
+
+struct dsa_bridge {
+	struct net_device *dev;
+	unsigned int num;
+	bool tx_fwd_offload;
+	refcount_t refcount;
+};
+
+enum dsa_db_type {
+	DSA_DB_PORT = 0,
+	DSA_DB_LAG = 1,
+	DSA_DB_BRIDGE = 2,
+};
+
+struct dsa_db {
+	enum dsa_db_type type;
+	union {
+		const struct dsa_port *dp;
+		struct dsa_lag lag;
+		struct dsa_bridge bridge;
+	};
+};
+
+struct fixed_phy_status;
+
+typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
+
+struct dsa_switch_ops {
+	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
+	int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*setup)(struct dsa_switch *);
+	void (*teardown)(struct dsa_switch *);
+	int (*port_setup)(struct dsa_switch *, int);
+	void (*port_teardown)(struct dsa_switch *, int);
+	u32 (*get_phy_flags)(struct dsa_switch *, int);
+	int (*phy_read)(struct dsa_switch *, int, int);
+	int (*phy_write)(struct dsa_switch *, int, int, u16);
+	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
+	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
+	void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
+	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
+	struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
+	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
+	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
+	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
+	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
+	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
+	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
+	int (*get_sset_count)(struct dsa_switch *, int, int);
+	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
+	void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
+	void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *);
+	void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
+	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
+	int (*port_get_default_prio)(struct dsa_switch *, int);
+	int (*port_set_default_prio)(struct dsa_switch *, int, u8);
+	int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
+	int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*suspend)(struct dsa_switch *);
+	int (*resume)(struct dsa_switch *);
+	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
+	void (*port_disable)(struct dsa_switch *, int);
+	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_eeprom_len)(struct dsa_switch *);
+	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*get_regs_len)(struct dsa_switch *, int);
+	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
+	int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
+	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
+	int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
+	void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
+	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
+	int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
+	void (*port_fast_age)(struct dsa_switch *, int);
+	int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
+	int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
+	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
+	int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
+	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
+	int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
+	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
+	int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
+	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
+	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
+	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
+	void (*port_policer_del)(struct dsa_switch *, int);
+	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
+	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
+	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
+	int (*crosschip_lag_change)(struct dsa_switch *, int, int);
+	int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *);
+	int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
+	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
+	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
+	void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
+	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
+	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
+	int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
+	int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*port_change_mtu)(struct dsa_switch *, int, int);
+	int (*port_max_mtu)(struct dsa_switch *, int);
+	int (*port_lag_change)(struct dsa_switch *, int);
+	int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *);
+	int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
+	int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
+	int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
+	int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
+	int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
+	void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+struct gre_full_hdr {
+	struct gre_base_hdr fixed_header;
+	__be16 csum;
+	__be16 reserved1;
+	__be32 key;
+	__be32 seq;
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
+};
+
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
+};
+
+struct nf_conntrack_tuple_mask {
+	struct {
+		union nf_inet_addr u3;
+		union nf_conntrack_man_proto u;
+	} src;
+};
+
+struct nf_ct_ext {
+	u8 offset[9];
+	u8 len;
+	unsigned int gen_id;
+	char data[0];
+};
+
+struct nf_conntrack_helper;
+
+struct nf_conntrack_expect {
+	struct hlist_node lnode;
+	struct hlist_node hnode;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_tuple_mask mask;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+	struct nf_conntrack_helper *helper;
+	struct nf_conn *master;
+	struct timer_list timeout;
+	refcount_t use;
+	unsigned int flags;
+	unsigned int class;
+	union nf_inet_addr saved_addr;
+	union nf_conntrack_man_proto saved_proto;
+	enum ip_conntrack_dir dir;
+	struct callback_head rcu;
+};
+
+struct nf_ct_event {
+	struct nf_conn *ct;
+	u32 portid;
+	int report;
+};
+
+struct nf_exp_event {
+	struct nf_conntrack_expect *exp;
+	u32 portid;
+	int report;
+};
+
+struct nf_conn_labels {
+	long unsigned int bits[2];
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+struct gen_cookie {
+	struct pcpu_gen_cookie *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct fib_rule_uid_range {
+	__u32 start;
+	__u32 end;
+};
+
+struct fib_rule_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_rule *rule;
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
+	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
+	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
+	SK_DIAG_BPF_STORAGE = 1,
+	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_NONE = 0,
+	SK_DIAG_BPF_STORAGE_PAD = 1,
+	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
+	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
+	__SK_DIAG_BPF_STORAGE_MAX = 4,
+};
+
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
+
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
+struct bpf_sk_storage_diag {
+	u32 nr_maps;
+	struct bpf_map *maps[0];
+};
+
+struct bpf_iter_seq_sk_storage_map_info {
+	struct bpf_map *map;
+	unsigned int bucket_id;
+	unsigned int skip_elems;
+};
+
+struct bpf_iter__bpf_sk_storage_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		struct sock *sk;
+	};
+	union {
+		void *value;
+	};
+};
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	struct hlist_node hnode;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct qdisc_watchdog {
+	u64 last_expires;
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	long unsigned int base;
+	long unsigned int cl;
+	u32 classid;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	long unsigned int new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_ops *ops;
+	int hdrlen;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	unsigned int opidx;
+	u32 op;
+	u16 fam_id;
+	u8 policies: 1;
+	u8 single_op: 1;
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	long unsigned int fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+struct nf_sockopt_ops {
+	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void *, int *);
+	struct module *owner;
+};
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+struct ipq {
+	struct inet_frag_queue q;
+	u8 ecn;
+	u16 max_df_size;
+	int iif;
+	unsigned int rid;
+	struct inet_peer *peer;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	long unsigned int last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block *tcpm_next;
+	possible_net_t tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	long unsigned int tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block *chain;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	struct udp_seq_afinfo *bpf_seq_afinfo;
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	int: 32;
+	int bucket;
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+struct tcp_md5sig {
+	struct __kernel_sockaddr_storage tcpm_addr;
+	__u8 tcpm_flags;
+	__u8 tcpm_prefixlen;
+	__u16 tcpm_keylen;
+	int tcpm_ifindex;
+	__u8 tcpm_key[80];
+};
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct tcp6_pseudohdr {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	__be32 len;
+	__be32 protocol;
+};
+
+struct tcp_md5sig_pool {
+	struct ahash_request *md5_req;
+	void *scratch;
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+enum {
+	PIM_TYPE_HELLO = 0,
+	PIM_TYPE_REGISTER = 1,
+	PIM_TYPE_REGISTER_STOP = 2,
+	PIM_TYPE_JOIN_PRUNE = 3,
+	PIM_TYPE_BOOTSTRAP = 4,
+	PIM_TYPE_ASSERT = 5,
+	PIM_TYPE_GRAFT = 6,
+	PIM_TYPE_GRAFT_ACK = 7,
+	PIM_TYPE_CANDIDATE_RP_ADV = 8,
+};
+
+struct pimreghdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+	__be32 flags;
+};
+
+typedef short unsigned int mifi_t;
+
+typedef __u32 if_mask;
+
+struct if_set {
+	if_mask ifs_bits[8];
+};
+
+struct mif6ctl {
+	mifi_t mif6c_mifi;
+	unsigned char mif6c_flags;
+	unsigned char vifc_threshold;
+	__u16 mif6c_pifi;
+	unsigned int vifc_rate_limit;
+};
+
+struct mf6cctl {
+	struct sockaddr_in6 mf6cc_origin;
+	struct sockaddr_in6 mf6cc_mcastgrp;
+	mifi_t mf6cc_parent;
+	struct if_set mf6cc_ifset;
+};
+
+struct sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	long unsigned int pktcnt;
+	long unsigned int bytecnt;
+	long unsigned int wrong_if;
+};
+
+struct sioc_mif_req6 {
+	mifi_t mifi;
+	long unsigned int icount;
+	long unsigned int ocount;
+	long unsigned int ibytes;
+	long unsigned int obytes;
+};
+
+struct mrt6msg {
+	__u8 im6_mbz;
+	__u8 im6_msgtype;
+	__u16 im6_mif;
+	__u32 im6_pad;
+	struct in6_addr im6_src;
+	struct in6_addr im6_dst;
+};
+
+enum {
+	IP6MRA_CREPORT_UNSPEC = 0,
+	IP6MRA_CREPORT_MSGTYPE = 1,
+	IP6MRA_CREPORT_MIF_ID = 2,
+	IP6MRA_CREPORT_SRC_ADDR = 3,
+	IP6MRA_CREPORT_DST_ADDR = 4,
+	IP6MRA_CREPORT_PKT = 5,
+	__IP6MRA_CREPORT_MAX = 6,
+};
+
+struct vif_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	long unsigned int bytes_in;
+	long unsigned int bytes_out;
+	long unsigned int pkt_in;
+	long unsigned int pkt_out;
+	long unsigned int rate_limit;
+	unsigned char threshold;
+	short unsigned int flags;
+	int link;
+	struct netdev_phys_item_id dev_parent_id;
+	__be32 local;
+	__be32 remote;
+};
+
+struct vif_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct net_device *dev;
+	short unsigned int vif_index;
+	short unsigned int vif_flags;
+	u32 tb_id;
+};
+
+enum {
+	MFC_STATIC = 1,
+	MFC_OFFLOAD = 2,
+};
+
+struct mr_mfc {
+	struct rhlist_head mnode;
+	short unsigned int mfc_parent;
+	int mfc_flags;
+	union {
+		struct {
+			long unsigned int expires;
+			struct sk_buff_head unresolved;
+		} unres;
+		struct {
+			long unsigned int last_assert;
+			int minvif;
+			int maxvif;
+			long unsigned int bytes;
+			long unsigned int pkt;
+			long unsigned int wrong_if;
+			long unsigned int lastuse;
+			unsigned char ttls[32];
+			refcount_t refcount;
+		} res;
+	} mfc_un;
+	struct list_head list;
+	struct callback_head rcu;
+	void (*free)(struct callback_head *);
+};
+
+struct mfc_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct mr_mfc *mfc;
+	u32 tb_id;
+};
+
+struct mr_table_ops {
+	const struct rhashtable_params *rht_params;
+	void *cmparg_any;
+};
+
+struct mr_table {
+	struct list_head list;
+	possible_net_t net;
+	struct mr_table_ops ops;
+	u32 id;
+	struct sock *mroute_sk;
+	struct timer_list ipmr_expire_timer;
+	struct list_head mfc_unres_queue;
+	struct vif_device vif_table[32];
+	struct rhltable mfc_hash;
+	struct list_head mfc_cache_list;
+	int maxvif;
+	atomic_t cache_resolve_queue_len;
+	bool mroute_do_assert;
+	bool mroute_do_pim;
+	bool mroute_do_wrvifwhole;
+	int mroute_reg_vif_num;
+};
+
+struct mr_vif_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	int ct;
+};
+
+struct mr_mfc_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	struct list_head *cache;
+	spinlock_t *lock;
+};
+
+struct mfc6_cache_cmp_arg {
+	struct in6_addr mf6c_mcastgrp;
+	struct in6_addr mf6c_origin;
+};
+
+struct mfc6_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			struct in6_addr mf6c_mcastgrp;
+			struct in6_addr mf6c_origin;
+		};
+		struct mfc6_cache_cmp_arg cmparg;
+	};
+};
+
+struct ip6mr_result {
+	struct mr_table *mrt;
+};
+
+struct compat_sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	compat_ulong_t pktcnt;
+	compat_ulong_t bytecnt;
+	compat_ulong_t wrong_if;
+};
+
+struct compat_sioc_mif_req6 {
+	mifi_t mifi;
+	compat_ulong_t icount;
+	compat_ulong_t ocount;
+	compat_ulong_t ibytes;
+	compat_ulong_t obytes;
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
+};
+
+struct sr6_tlv_hmac {
+	struct sr6_tlv tlvhdr;
+	__u16 reserved;
+	__be32 hmackeyid;
+	__u8 hmac[32];
+};
+
+enum {
+	SEG6_HMAC_ALGO_SHA1 = 1,
+	SEG6_HMAC_ALGO_SHA256 = 2,
+};
+
+struct seg6_hmac_info {
+	struct rhash_head node;
+	struct callback_head rcu;
+	u32 hmackeyid;
+	char secret[64];
+	u8 slen;
+	u8 alg_id;
+};
+
+struct seg6_hmac_algo {
+	u8 alg_id;
+	char name[64];
+	struct crypto_shash **tfms;
+	struct shash_desc **shashs;
+};
+
+struct _strp_msg {
+	struct strp_msg strp;
+	int accum_len;
+};
+
+enum l3mdev_type {
+	L3MDEV_TYPE_UNSPEC = 0,
+	L3MDEV_TYPE_VRF = 1,
+	__L3MDEV_TYPE_MAX = 2,
+};
+
+typedef int (*lookup_by_table_id_t)(struct net *, u32);
+
+struct l3mdev_handler {
+	lookup_by_table_id_t dev_lookup;
+};
+
+struct xdp_ring;
+
+struct xsk_queue {
+	u32 ring_mask;
+	u32 nentries;
+	u32 cached_prod;
+	u32 cached_cons;
+	struct xdp_ring *ring;
+	u64 invalid_descs;
+	u64 queue_empty_descs;
+};
+
+struct xdp_ring {
+	u32 producer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad1;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consumer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad3;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_rxtx_ring {
+	struct xdp_ring ptrs;
+	struct xdp_desc desc[0];
+};
+
+struct xdp_umem_ring {
+	struct xdp_ring ptrs;
+	u64 desc[0];
+};
+
+struct xdp_sock;
+
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct xdp_sock *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_sock {
+	struct sock sk;
+	long: 64;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+	long: 64;
+};
+
+struct xsk_map_node {
+	struct list_head node;
+	struct xsk_map *map;
+	struct xdp_sock **map_entry;
+};
+
+enum mptcp_pm_status {
+	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
+	MPTCP_PM_ADD_ADDR_SEND_ACK = 1,
+	MPTCP_PM_RM_ADDR_RECEIVED = 2,
+	MPTCP_PM_ESTABLISHED = 3,
+	MPTCP_PM_SUBFLOW_ESTABLISHED = 4,
+	MPTCP_PM_ALREADY_ESTABLISHED = 5,
+	MPTCP_PM_MPC_ENDPOINT_ACCOUNTED = 6,
+};
+
+enum mptcp_addr_signal_status {
+	MPTCP_ADD_ADDR_SIGNAL = 0,
+	MPTCP_ADD_ADDR_ECHO = 1,
+	MPTCP_RM_ADDR_SIGNAL = 2,
+};
+
+struct mptcp_pm_add_entry;
+
+struct sockaddr_mctp {
+	__kernel_sa_family_t smctp_family;
+	__u16 __smctp_pad0;
+	unsigned int smctp_network;
+	struct mctp_addr smctp_addr;
+	__u8 smctp_type;
+	__u8 smctp_tag;
+	__u8 __smctp_pad1;
+};
+
+struct sockaddr_mctp_ext {
+	struct sockaddr_mctp smctp_base;
+	int smctp_ifindex;
+	__u8 smctp_halen;
+	__u8 __smctp_pad0[3];
+	__u8 smctp_haddr[32];
+};
+
+struct mctp_ioc_tag_ctl {
+	mctp_eid_t peer_addr;
+	__u8 tag;
+	__u16 flags;
+};
+
+struct mctp_hdr {
+	u8 ver;
+	u8 dest;
+	u8 src;
+	u8 flags_seq_tag;
+};
+
+struct mctp_sock {
+	struct sock sk;
+	unsigned int bind_net;
+	mctp_eid_t bind_addr;
+	__u8 bind_type;
+	bool addr_ext;
+	struct hlist_head keys;
+	struct timer_list key_expiry;
+};
+
+struct mctp_skb_cb {
+	unsigned int magic;
+	unsigned int net;
+	int ifindex;
+	mctp_eid_t src;
+	unsigned char halen;
+	unsigned char haddr[32];
+};
+
+struct mctp_route {
+	mctp_eid_t min;
+	mctp_eid_t max;
+	struct mctp_dev *dev;
+	unsigned int mtu;
+	unsigned char type;
+	int (*output)(struct mctp_route *, struct sk_buff *);
+	struct list_head list;
+	refcount_t refs;
+	struct callback_head rcu;
+};
+
+enum {
+	MCTP_TRACE_KEY_TIMEOUT = 0,
+	MCTP_TRACE_KEY_REPLIED = 1,
+	MCTP_TRACE_KEY_INVALIDATED = 2,
+	MCTP_TRACE_KEY_CLOSED = 3,
+	MCTP_TRACE_KEY_DROPPED = 4,
+};
+
+struct trace_event_raw_mctp_key_acquire {
+	struct trace_entry ent;
+	__u8 paddr;
+	__u8 laddr;
+	__u8 tag;
+	char __data[0];
+};
+
+struct trace_event_raw_mctp_key_release {
+	struct trace_entry ent;
+	__u8 paddr;
+	__u8 laddr;
+	__u8 tag;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mctp_key_acquire {};
+
+struct trace_event_data_offsets_mctp_key_release {};
+
+typedef void (*btf_trace_mctp_key_acquire)(void *, const struct mctp_sk_key *);
+
+typedef void (*btf_trace_mctp_key_release)(void *, const struct mctp_sk_key *, int);
+
+typedef union {
+	struct {
+		u32 revision;
+		efi_handle_t parent_handle;
+		efi_system_table_t *system_table;
+		efi_handle_t device_handle;
+		void *file_path;
+		void *reserved;
+		u32 load_options_size;
+		void *load_options;
+		void *image_base;
+		__u64 image_size;
+		unsigned int image_code_type;
+		unsigned int image_data_type;
+		efi_status_t (*unload)(efi_handle_t);
+	};
+	struct {
+		u32 revision;
+		u32 parent_handle;
+		u32 system_table;
+		u32 device_handle;
+		u32 file_path;
+		u32 reserved;
+		u32 load_options_size;
+		u32 load_options;
+		u32 image_base;
+		__u64 image_size;
+		u32 image_code_type;
+		u32 image_data_type;
+		u32 unload;
+	} mixed_mode;
+} efi_loaded_image_t;
+
+typedef struct {
+	u64 size;
+	u64 file_size;
+	u64 phys_size;
+	efi_time_t create_time;
+	efi_time_t last_access_time;
+	efi_time_t modification_time;
+	__u64 attribute;
+	efi_char16_t filename[0];
+} efi_file_info_t;
+
+struct efi_file_protocol;
+
+typedef struct efi_file_protocol efi_file_protocol_t;
+
+struct efi_file_protocol {
+	u64 revision;
+	efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
+	efi_status_t (*close)(efi_file_protocol_t *);
+	efi_status_t (*delete)(efi_file_protocol_t *);
+	efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
+	efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
+	efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
+	efi_status_t (*set_position)(efi_file_protocol_t *, u64);
+	efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
+	efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
+	efi_status_t (*flush)(efi_file_protocol_t *);
+};
+
+struct efi_simple_file_system_protocol;
+
+typedef struct efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
+
+struct efi_simple_file_system_protocol {
+	u64 revision;
+	int (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
+};
+
+struct finfo {
+	efi_file_info_t info;
+	efi_char16_t filename[256];
+};
+
+typedef u32 efi_tcg2_event_log_format;
+
+struct efi_tcg2_event {
+	u32 event_size;
+	struct {
+		u32 header_size;
+		u16 header_version;
+		u32 pcr_index;
+		u32 event_type;
+	} __attribute__((packed)) event_header;
+} __attribute__((packed));
+
+typedef struct efi_tcg2_event efi_tcg2_event_t;
+
+union efi_tcg2_protocol;
+
+typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
+
+union efi_tcg2_protocol {
+	struct {
+		void *get_capability;
+		efi_status_t (*get_event_log)(efi_tcg2_protocol_t *, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
+		efi_status_t (*hash_log_extend_event)(efi_tcg2_protocol_t *, u64, efi_physical_addr_t, u64, const efi_tcg2_event_t *);
+		void *submit_command;
+		void *get_active_pcr_banks;
+		void *set_active_pcr_banks;
+		void *get_result_of_set_active_pcr_banks;
+	};
+	struct {
+		u32 get_capability;
+		u32 get_event_log;
+		u32 hash_log_extend_event;
+		u32 submit_command;
+		u32 get_active_pcr_banks;
+		u32 set_active_pcr_banks;
+		u32 get_result_of_set_active_pcr_banks;
+	} mixed_mode;
+};
+
+typedef struct {
+	efi_guid_t guid;
+	u32 table;
+} efi_config_table_32_t;
+
+typedef union {
+	struct {
+		efi_guid_t guid;
+		void *table;
+	};
+	efi_config_table_32_t mixed_mode;
+} efi_config_table_t;
+
+struct efi_vendor_dev_path {
+	struct efi_generic_dev_path header;
+	efi_guid_t vendorguid;
+	u8 vendordata[0];
+};
+
+struct efi_tcg2_tagged_event {
+	u32 tagged_event_id;
+	u32 tagged_event_data_size;
+};
+
+typedef struct efi_tcg2_tagged_event efi_tcg2_tagged_event_t;
+
+union efi_load_file_protocol;
+
+typedef union efi_load_file_protocol efi_load_file_protocol_t;
+
+union efi_load_file_protocol {
+	struct {
+		efi_status_t (*load_file)(efi_load_file_protocol_t *, efi_device_path_protocol_t *, bool, long unsigned int *, void *);
+	};
+	struct {
+		u32 load_file;
+	} mixed_mode;
+};
+
+typedef union efi_load_file_protocol efi_load_file2_protocol_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	u8 variable_data[0];
+} __attribute__((packed)) efi_load_option_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	const efi_char16_t *description;
+	const efi_device_path_protocol_t *file_path_list;
+	size_t optional_data_size;
+	const void *optional_data;
+} efi_load_option_unpacked_t;
+
+enum spectre_v4_policy {
+	SPECTRE_V4_POLICY_MITIGATION_DYNAMIC = 0,
+	SPECTRE_V4_POLICY_MITIGATION_ENABLED = 1,
+	SPECTRE_V4_POLICY_MITIGATION_DISABLED = 2,
+};
+
+struct spectre_v4_param {
+	const char *str;
+	enum spectre_v4_policy policy;
+};
+
+enum bhb_mitigation_bits {
+	BHB_LOOP = 0,
+	BHB_FW = 1,
+	BHB_HW = 2,
+	BHB_INSN = 3,
+};
+
+struct mpidr_hash {
+	u64 mask;
+	u32 shift_aff[4];
+	u32 bits;
+};
+
+struct acpi_pci_generic_root_info {
+	struct acpi_pci_root_info common;
+	struct pci_config_window *cfg;
+};
+
+struct kvm_mem_range {
+	u64 start;
+	u64 end;
+};
+
+enum pkvm_component_id {
+	PKVM_ID_HOST = 0,
+	PKVM_ID_HYP = 1,
+};
+
+struct pkvm_mem_transition {
+	u64 nr_pages;
+	struct {
+		enum pkvm_component_id id;
+		u64 addr;
+		union {
+			struct {
+				u64 completer_addr;
+			} host;
+		};
+	} initiator;
+	struct {
+		enum pkvm_component_id id;
+	} completer;
+};
+
+struct pkvm_mem_share {
+	const struct pkvm_mem_transition tx;
+	const enum kvm_pgtable_prot completer_prot;
+};
+
+struct check_walk_data {
+	enum pkvm_page_state desired;
+	enum pkvm_page_state (*get_page_state)(kvm_pte_t);
+};
+
+struct kvm_pgtable_walk_data {
+	struct kvm_pgtable *pgt;
+	struct kvm_pgtable_walker *walker;
+	u64 addr;
+	u64 end;
+};
+
+struct leaf_walk_data {
+	kvm_pte_t pte;
+	u32 level;
+};
+
+struct hyp_map_data {
+	u64 phys;
+	kvm_pte_t attr;
+	struct kvm_pgtable_mm_ops *mm_ops;
+};
+
+struct hyp_unmap_data {
+	u64 unmapped;
+	struct kvm_pgtable_mm_ops *mm_ops;
+};
+
+struct stage2_map_data {
+	u64 phys;
+	kvm_pte_t attr;
+	u8 owner_id;
+	kvm_pte_t *anchor;
+	kvm_pte_t *childp;
+	struct kvm_s2_mmu *mmu;
+	void *memcache;
+	struct kvm_pgtable_mm_ops *mm_ops;
+	bool force_pte;
+};
+
+struct stage2_attr_data {
+	kvm_pte_t attr_set;
+	kvm_pte_t attr_clr;
+	kvm_pte_t pte;
+	u32 level;
+	struct kvm_pgtable_mm_ops *mm_ops;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	long unsigned int clone_flags;
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
+
+struct vm_stack {
+	struct callback_head rcu;
+	struct vm_struct *stack_vm_area;
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+struct kthread_create_info {
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread {
+	long unsigned int flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
+};
+
+struct sd_flag_debug {
+	unsigned int meta_flags;
+	char *name;
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sd_data {
+	struct sched_domain **sd;
+	struct sched_domain_shared **sds;
+	struct sched_group **sg;
+	struct sched_group_capacity **sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_SHARED = 1,
+};
+
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+enum numa_topology_type {
+	NUMA_DIRECT = 0,
+	NUMA_GLUELESS_MESH = 1,
+	NUMA_BACKPLANE = 2,
+};
+
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
+};
+
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 *cpuusage;
+	struct kernel_cpustat *cpustat;
+};
+
+struct sugov_tunables {
+	struct gov_attr_set attr_set;
+	unsigned int rate_limit_us;
+};
+
+struct sugov_policy {
+	struct cpufreq_policy *policy;
+	struct sugov_tunables *tunables;
+	struct list_head tunables_hook;
+	raw_spinlock_t update_lock;
+	u64 last_freq_update_time;
+	s64 freq_update_delay_ns;
+	unsigned int next_freq;
+	unsigned int cached_raw_freq;
+	struct irq_work irq_work;
+	struct kthread_work work;
+	struct mutex work_lock;
+	struct kthread_worker worker;
+	struct task_struct *thread;
+	bool work_in_progress;
+	bool limits_changed;
+	bool need_freq_update;
+};
+
+struct sugov_cpu {
+	struct update_util_data update_util;
+	struct sugov_policy *sg_policy;
+	unsigned int cpu;
+	bool iowait_boost_pending;
+	unsigned int iowait_boost;
+	u64 last_update;
+	long unsigned int util;
+	long unsigned int bw_dl;
+	long unsigned int max;
+	long unsigned int saved_idle_calls;
+};
+
+struct s_data {
+	struct sched_domain **sd;
+	struct root_domain *rd;
+};
+
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
+};
+
+struct asym_cap_data {
+	struct list_head link;
+	long unsigned int capacity;
+	long unsigned int cpus[0];
+};
+
+struct sched_core_cookie {
+	refcount_t refcnt;
+};
+
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+struct housekeeping {
+	struct cpumask cpumasks[9];
+	long unsigned int flags;
+};
+
+struct resume_swap_area {
+	__kernel_loff_t offset;
+	__u32 dev;
+} __attribute__((packed));
+
+struct snapshot_data {
+	struct snapshot_handle handle;
+	int swap;
+	int mode;
+	bool frozen;
+	bool ready;
+	bool platform_support;
+	bool free_bitmaps;
+	dev_t dev;
+};
+
+struct compat_resume_swap_area {
+	compat_loff_t offset;
+	u32 dev;
+} __attribute__((packed));
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	long unsigned int gp_jiffies;
+	long unsigned int gp_start;
+	long unsigned int tasks_gp_seq;
+	long unsigned int n_ipis;
+	long unsigned int n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	long unsigned int percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	long unsigned int barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	long unsigned int rtp_jiffies;
+	long unsigned int rtp_n_lock_retries;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct stacktrace_cookie {
+	long unsigned int *store;
+	unsigned int size;
+	unsigned int skip;
+	unsigned int len;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+typedef __u16 comp_t;
+
+struct acct_v3 {
+	char ac_flag;
+	char ac_version;
+	__u16 ac_tty;
+	__u32 ac_exitcode;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u32 ac_etime;
+	comp_t ac_utime;
+	comp_t ac_stime;
+	comp_t ac_mem;
+	comp_t ac_io;
+	comp_t ac_rw;
+	comp_t ac_minflt;
+	comp_t ac_majflt;
+	comp_t ac_swaps;
+	char ac_comm[16];
+};
+
+typedef struct acct_v3 acct_t;
+
+struct bsd_acct_struct {
+	struct fs_pin pin;
+	atomic_long_t count;
+	struct callback_head rcu;
+	struct mutex lock;
+	int active;
+	long unsigned int needcheck;
+	struct file *file;
+	struct pid_namespace *ns;
+	struct work_struct work;
+	struct completion done;
+};
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	long unsigned int caller;
+	cpu_stop_fn_t fn;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+struct audit_fsnotify_mark {
+	dev_t dev;
+	long unsigned int ino;
+	char *path;
+	struct fsnotify_mark mark;
+	struct audit_krule *rule;
+};
+
+enum kgdb_bptype {
+	BP_BREAKPOINT = 0,
+	BP_HARDWARE_BREAKPOINT = 1,
+	BP_WRITE_WATCHPOINT = 2,
+	BP_READ_WATCHPOINT = 3,
+	BP_ACCESS_WATCHPOINT = 4,
+	BP_POKE_BREAKPOINT = 5,
+};
+
+struct dbg_reg_def_t {
+	char *name;
+	int size;
+	int offset;
+};
+
+struct kgdb_arch {
+	unsigned char gdb_bpt_instr[4];
+	long unsigned int flags;
+	int (*set_breakpoint)(long unsigned int, char *);
+	int (*remove_breakpoint)(long unsigned int, char *);
+	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
+	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
+	void (*disable_hw_break)(struct pt_regs *);
+	void (*remove_all_hw_break)();
+	void (*correct_hw_break)();
+	void (*enable_nmi)(bool);
+};
+
+struct kgdb_io {
+	const char *name;
+	int (*read_char)();
+	void (*write_char)(u8);
+	void (*flush)();
+	int (*init)();
+	void (*deinit)();
+	void (*pre_exception)();
+	void (*post_exception)();
+	struct console *cons;
+};
+
+struct kgdb_state {
+	int ex_vector;
+	int signo;
+	int err_code;
+	int cpu;
+	int pass_exception;
+	long unsigned int thr_query;
+	long unsigned int threadid;
+	long int kgdb_usethreadid;
+	struct pt_regs *linux_regs;
+	atomic_t *send_ready;
+};
+
+struct debuggerinfo_struct {
+	void *debuggerinfo;
+	struct task_struct *task;
+	int exception_state;
+	int ret_state;
+	int irq_depth;
+	int enter_kgdb;
+	bool rounding_up;
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_transition_snapshot {
+	long unsigned int rcu;
+	long unsigned int srcu;
+	bool ongoing;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+enum {
+	TRACE_FUNC_NO_OPTS = 0,
+	TRACE_FUNC_OPT_STACK = 1,
+	TRACE_FUNC_OPT_NO_REPEATS = 2,
+	TRACE_FUNC_OPT_HIGHEST_BIT = 4,
+};
+
+enum blktrace_notify {
+	__BLK_TN_PROCESS = 0,
+	__BLK_TN_TIMESTAMP = 1,
+	__BLK_TN_MESSAGE = 2,
+	__BLK_TN_CGROUP = 256,
+};
+
+struct blk_io_trace {
+	__u32 magic;
+	__u32 sequence;
+	__u64 time;
+	__u64 sector;
+	__u32 bytes;
+	__u32 action;
+	__u32 pid;
+	__u32 device;
+	__u32 cpu;
+	__u16 error;
+	__u16 pdu_len;
+};
+
+struct blk_io_trace_remap {
+	__be32 device_from;
+	__be32 device_to;
+	__be64 sector_from;
+};
+
+enum {
+	Blktrace_setup = 1,
+	Blktrace_running = 2,
+	Blktrace_stopped = 3,
+};
+
+struct blk_user_trace_setup {
+	char name[32];
+	__u16 act_mask;
+	__u32 buf_size;
+	__u32 buf_nr;
+	__u64 start_lba;
+	__u64 end_lba;
+	__u32 pid;
+};
+
+typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
+
+typedef int (*tracing_map_cmp_fn_t)(void *, void *);
+
+struct tracing_map_field {
+	tracing_map_cmp_fn_t cmp_fn;
+	union {
+		atomic64_t sum;
+		unsigned int offset;
+	};
+};
+
+struct tracing_map;
+
+struct tracing_map_elt {
+	struct tracing_map *map;
+	struct tracing_map_field *fields;
+	atomic64_t *vars;
+	bool *var_set;
+	void *key;
+	void *private_data;
+};
+
+struct tracing_map_sort_key {
+	unsigned int field_idx;
+	bool descending;
+};
+
+struct tracing_map_array;
+
+struct tracing_map_ops;
+
+struct tracing_map {
+	unsigned int key_size;
+	unsigned int map_bits;
+	unsigned int map_size;
+	unsigned int max_elts;
+	atomic_t next_elt;
+	struct tracing_map_array *elts;
+	struct tracing_map_array *map;
+	const struct tracing_map_ops *ops;
+	void *private_data;
+	struct tracing_map_field fields[6];
+	unsigned int n_fields;
+	int key_idx[3];
+	unsigned int n_keys;
+	struct tracing_map_sort_key sort_key;
+	unsigned int n_vars;
+	atomic64_t hits;
+	atomic64_t drops;
+};
+
+struct tracing_map_sort_entry {
+	void *key;
+	struct tracing_map_elt *elt;
+	bool elt_copied;
+	bool dup;
+};
+
+struct tracing_map_array {
+	unsigned int entries_per_page;
+	unsigned int entry_size_shift;
+	unsigned int entry_shift;
+	unsigned int entry_mask;
+	unsigned int n_pages;
+	void **pages;
+};
+
+struct tracing_map_ops {
+	int (*elt_alloc)(struct tracing_map_elt *);
+	void (*elt_free)(struct tracing_map_elt *);
+	void (*elt_clear)(struct tracing_map_elt *);
+	void (*elt_init)(struct tracing_map_elt *);
+};
+
+enum {
+	HIST_ERR_NONE = 0,
+	HIST_ERR_DUPLICATE_VAR = 1,
+	HIST_ERR_VAR_NOT_UNIQUE = 2,
+	HIST_ERR_TOO_MANY_VARS = 3,
+	HIST_ERR_MALFORMED_ASSIGNMENT = 4,
+	HIST_ERR_NAMED_MISMATCH = 5,
+	HIST_ERR_TRIGGER_EEXIST = 6,
+	HIST_ERR_TRIGGER_ENOENT_CLEAR = 7,
+	HIST_ERR_SET_CLOCK_FAIL = 8,
+	HIST_ERR_BAD_FIELD_MODIFIER = 9,
+	HIST_ERR_TOO_MANY_SUBEXPR = 10,
+	HIST_ERR_TIMESTAMP_MISMATCH = 11,
+	HIST_ERR_TOO_MANY_FIELD_VARS = 12,
+	HIST_ERR_EVENT_FILE_NOT_FOUND = 13,
+	HIST_ERR_HIST_NOT_FOUND = 14,
+	HIST_ERR_HIST_CREATE_FAIL = 15,
+	HIST_ERR_SYNTH_VAR_NOT_FOUND = 16,
+	HIST_ERR_SYNTH_EVENT_NOT_FOUND = 17,
+	HIST_ERR_SYNTH_TYPE_MISMATCH = 18,
+	HIST_ERR_SYNTH_COUNT_MISMATCH = 19,
+	HIST_ERR_FIELD_VAR_PARSE_FAIL = 20,
+	HIST_ERR_VAR_CREATE_FIND_FAIL = 21,
+	HIST_ERR_ONX_NOT_VAR = 22,
+	HIST_ERR_ONX_VAR_NOT_FOUND = 23,
+	HIST_ERR_ONX_VAR_CREATE_FAIL = 24,
+	HIST_ERR_FIELD_VAR_CREATE_FAIL = 25,
+	HIST_ERR_TOO_MANY_PARAMS = 26,
+	HIST_ERR_PARAM_NOT_FOUND = 27,
+	HIST_ERR_INVALID_PARAM = 28,
+	HIST_ERR_ACTION_NOT_FOUND = 29,
+	HIST_ERR_NO_SAVE_PARAMS = 30,
+	HIST_ERR_TOO_MANY_SAVE_ACTIONS = 31,
+	HIST_ERR_ACTION_MISMATCH = 32,
+	HIST_ERR_NO_CLOSING_PAREN = 33,
+	HIST_ERR_SUBSYS_NOT_FOUND = 34,
+	HIST_ERR_INVALID_SUBSYS_EVENT = 35,
+	HIST_ERR_INVALID_REF_KEY = 36,
+	HIST_ERR_VAR_NOT_FOUND = 37,
+	HIST_ERR_FIELD_NOT_FOUND = 38,
+	HIST_ERR_EMPTY_ASSIGNMENT = 39,
+	HIST_ERR_INVALID_SORT_MODIFIER = 40,
+	HIST_ERR_EMPTY_SORT_FIELD = 41,
+	HIST_ERR_TOO_MANY_SORT_FIELDS = 42,
+	HIST_ERR_INVALID_SORT_FIELD = 43,
+	HIST_ERR_INVALID_STR_OPERAND = 44,
+	HIST_ERR_EXPECT_NUMBER = 45,
+	HIST_ERR_UNARY_MINUS_SUBEXPR = 46,
+	HIST_ERR_DIVISION_BY_ZERO = 47,
+};
+
+struct hist_field;
+
+typedef u64 (*hist_field_fn_t)(struct hist_field *, struct tracing_map_elt *, struct trace_buffer *, struct ring_buffer_event *, void *);
+
+struct hist_trigger_data;
+
+struct hist_var {
+	char *name;
+	struct hist_trigger_data *hist_data;
+	unsigned int idx;
+};
+
+enum field_op_id {
+	FIELD_OP_NONE = 0,
+	FIELD_OP_PLUS = 1,
+	FIELD_OP_MINUS = 2,
+	FIELD_OP_UNARY_MINUS = 3,
+	FIELD_OP_DIV = 4,
+	FIELD_OP_MULT = 5,
+};
+
+struct hist_field {
+	struct ftrace_event_field *field;
+	long unsigned int flags;
+	hist_field_fn_t fn;
+	unsigned int ref;
+	unsigned int size;
+	unsigned int offset;
+	unsigned int is_signed;
+	long unsigned int buckets;
+	const char *type;
+	struct hist_field *operands[2];
+	struct hist_trigger_data *hist_data;
+	struct hist_var var;
+	enum field_op_id operator;
+	char *system;
+	char *event_name;
+	char *name;
+	unsigned int var_ref_idx;
+	bool read_once;
+	unsigned int var_str_idx;
+	u64 constant;
+	u64 div_multiplier;
+};
+
+struct hist_trigger_attrs;
+
+struct action_data;
+
+struct field_var;
+
+struct field_var_hist;
+
+struct hist_trigger_data {
+	struct hist_field *fields[22];
+	unsigned int n_vals;
+	unsigned int n_keys;
+	unsigned int n_fields;
+	unsigned int n_vars;
+	unsigned int n_var_str;
+	unsigned int key_size;
+	struct tracing_map_sort_key sort_keys[2];
+	unsigned int n_sort_keys;
+	struct trace_event_file *event_file;
+	struct hist_trigger_attrs *attrs;
+	struct tracing_map *map;
+	bool enable_timestamps;
+	bool remove;
+	struct hist_field *var_refs[16];
+	unsigned int n_var_refs;
+	struct action_data *actions[8];
+	unsigned int n_actions;
+	struct field_var *field_vars[64];
+	unsigned int n_field_vars;
+	unsigned int n_field_var_str;
+	struct field_var_hist *field_var_hists[64];
+	unsigned int n_field_var_hists;
+	struct field_var *save_vars[64];
+	unsigned int n_save_vars;
+	unsigned int n_save_var_str;
+};
+
+enum hist_field_flags {
+	HIST_FIELD_FL_HITCOUNT = 1,
+	HIST_FIELD_FL_KEY = 2,
+	HIST_FIELD_FL_STRING = 4,
+	HIST_FIELD_FL_HEX = 8,
+	HIST_FIELD_FL_SYM = 16,
+	HIST_FIELD_FL_SYM_OFFSET = 32,
+	HIST_FIELD_FL_EXECNAME = 64,
+	HIST_FIELD_FL_SYSCALL = 128,
+	HIST_FIELD_FL_STACKTRACE = 256,
+	HIST_FIELD_FL_LOG2 = 512,
+	HIST_FIELD_FL_TIMESTAMP = 1024,
+	HIST_FIELD_FL_TIMESTAMP_USECS = 2048,
+	HIST_FIELD_FL_VAR = 4096,
+	HIST_FIELD_FL_EXPR = 8192,
+	HIST_FIELD_FL_VAR_REF = 16384,
+	HIST_FIELD_FL_CPU = 32768,
+	HIST_FIELD_FL_ALIAS = 65536,
+	HIST_FIELD_FL_BUCKET = 131072,
+	HIST_FIELD_FL_CONST = 262144,
+};
+
+struct var_defs {
+	unsigned int n_vars;
+	char *name[16];
+	char *expr[16];
+};
+
+struct hist_trigger_attrs {
+	char *keys_str;
+	char *vals_str;
+	char *sort_key_str;
+	char *name;
+	char *clock;
+	bool pause;
+	bool cont;
+	bool clear;
+	bool ts_in_usecs;
+	unsigned int map_bits;
+	char *assignment_str[16];
+	unsigned int n_assignments;
+	char *action_str[8];
+	unsigned int n_actions;
+	struct var_defs var_defs;
+};
+
+struct field_var {
+	struct hist_field *var;
+	struct hist_field *val;
+};
+
+struct field_var_hist {
+	struct hist_trigger_data *hist_data;
+	char *cmd;
+};
+
+enum handler_id {
+	HANDLER_ONMATCH = 1,
+	HANDLER_ONMAX = 2,
+	HANDLER_ONCHANGE = 3,
+};
+
+enum action_id {
+	ACTION_SAVE = 1,
+	ACTION_TRACE = 2,
+	ACTION_SNAPSHOT = 3,
+};
+
+typedef void (*action_fn_t)(struct hist_trigger_data *, struct tracing_map_elt *, struct trace_buffer *, void *, struct ring_buffer_event *, void *, struct action_data *, u64 *);
+
+typedef bool (*check_track_val_fn_t)(u64, u64);
+
+struct action_data {
+	enum handler_id handler;
+	enum action_id action;
+	char *action_name;
+	action_fn_t fn;
+	unsigned int n_params;
+	char *params[64];
+	unsigned int var_ref_idx[16];
+	struct synth_event *synth_event;
+	bool use_trace_keyword;
+	char *synth_event_name;
+	union {
+		struct {
+			char *event;
+			char *event_system;
+		} match_data;
+		struct {
+			char *var_str;
+			struct hist_field *var_ref;
+			struct hist_field *track_var;
+			check_track_val_fn_t check_val;
+			action_fn_t save_data;
+		} track_data;
+	};
+};
+
+struct track_data {
+	u64 track_val;
+	bool updated;
+	unsigned int key_len;
+	void *key;
+	struct tracing_map_elt elt;
+	struct action_data *action_data;
+	struct hist_trigger_data *hist_data;
+};
+
+struct hist_elt_data {
+	char *comm;
+	u64 *var_ref_vals;
+	char **field_var_str;
+	int n_field_var_str;
+};
+
+struct snapshot_context {
+	struct tracing_map_elt *elt;
+	void *key;
+};
+
+typedef void (*synth_probe_func_t)(void *, u64 *, unsigned int *);
+
+struct hist_var_data {
+	struct list_head list;
+	struct hist_trigger_data *hist_data;
+};
+
+struct bpf_preload_info {
+	char link_name[16];
+	struct bpf_link *link;
+};
+
+struct bpf_preload_ops {
+	int (*preload)(struct bpf_preload_info *);
+	struct module *owner;
+};
+
+enum bpf_type {
+	BPF_TYPE_UNSPEC = 0,
+	BPF_TYPE_PROG = 1,
+	BPF_TYPE_MAP = 2,
+	BPF_TYPE_LINK = 3,
+};
+
+struct map_iter {
+	void *key;
+	bool done;
+};
+
+enum {
+	OPT_MODE = 0,
+};
+
+struct bpf_mount_opts {
+	umode_t mode;
+};
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_shim_tramp_link {
+	struct bpf_tramp_link link;
+	struct bpf_trampoline *trampoline;
+};
+
+struct reuseport_array {
+	struct bpf_map map;
+	struct sock *ptrs[0];
+};
+
+enum uprobe_filter_ctx {
+	UPROBE_FILTER_REGISTER = 0,
+	UPROBE_FILTER_UNREGISTER = 1,
+	UPROBE_FILTER_MMAP = 2,
+};
+
+struct uprobe_consumer {
+	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
+	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
+	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+	struct uprobe_consumer *next;
+};
+
+typedef u32 uprobe_opcode_t;
+
+struct arch_uprobe {
+	union {
+		u8 insn[4];
+		u8 ixol[4];
+	};
+	struct arch_probe_insn api;
+	bool simulate;
+};
+
+struct uprobe {
+	struct rb_node rb_node;
+	refcount_t ref;
+	struct rw_semaphore register_rwsem;
+	struct rw_semaphore consumer_rwsem;
+	struct list_head pending_list;
+	struct uprobe_consumer *consumers;
+	struct inode *inode;
+	loff_t offset;
+	loff_t ref_ctr_offset;
+	long unsigned int flags;
+	struct arch_uprobe arch;
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+struct xol_area {
+	wait_queue_head_t wq;
+	atomic_t slot_count;
+	long unsigned int *bitmap;
+	struct vm_special_mapping xol_mapping;
+	struct page *pages[2];
+	long unsigned int vaddr;
+};
+
+struct delayed_uprobe {
+	struct list_head list;
+	struct uprobe *uprobe;
+	struct mm_struct *mm;
+};
+
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
+struct map_info___2 {
+	struct map_info___2 *next;
+	struct mm_struct *mm;
+	long unsigned int vaddr;
+};
+
+struct pcpu_group_info {
+	int nr_units;
+	long unsigned int base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void *ptr;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, long unsigned int, bool, bool, size_t, size_t, void *, int, void *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	void *base_addr;
+	long unsigned int *alloc_map;
+	long unsigned int *bound_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	long unsigned int populated[0];
+};
+
+typedef unsigned int zap_flags_t;
+
+typedef unsigned int pgtbl_mod_mask;
+
+typedef long unsigned int pte_marker;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+struct copy_subpage_arg {
+	struct page *dst;
+	struct page *src;
+	struct vm_area_struct *vma;
+};
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+enum mcopy_atomic_mode {
+	MCOPY_ATOMIC_NORMAL = 0,
+	MCOPY_ATOMIC_ZEROPAGE = 1,
+	MCOPY_ATOMIC_CONTINUE = 2,
+};
+
+enum {
+	SUBPAGE_INDEX_SUBPOOL = 1,
+	SUBPAGE_INDEX_HWPOISON = 2,
+	__NR_USED_SUBPAGE = 3,
+};
+
+struct resv_map {
+	struct kref refs;
+	spinlock_t lock;
+	struct list_head regions;
+	long int adds_in_progress;
+	struct list_head region_cache;
+	long int region_cache_count;
+};
+
+struct file_region {
+	struct list_head link;
+	long int from;
+	long int to;
+};
+
+enum hugetlb_page_flags {
+	HPG_restore_reserve = 0,
+	HPG_migratable = 1,
+	HPG_temporary = 2,
+	HPG_freed = 3,
+	HPG_vmemmap_optimized = 4,
+	HPG_raw_hwp_unreliable = 5,
+	__NR_HPAGEFLAGS = 6,
+};
+
+struct huge_bootmem_page {
+	struct list_head list;
+	struct hstate *hstate;
+};
+
+enum vma_resv_mode {
+	VMA_NEEDS_RESV = 0,
+	VMA_COMMIT_RESV = 1,
+	VMA_END_RESV = 2,
+	VMA_ADD_RESV = 3,
+	VMA_DEL_RESV = 4,
+};
+
+struct node_hstate {
+	struct kobject *hugepages_kobj;
+	struct kobject *hstate_kobjs[4];
+};
+
+struct hugetlb_cgroup;
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+struct page_ext_operations {
+	size_t offset;
+	size_t size;
+	bool (*need)();
+	void (*init)();
+};
+
+enum page_ext_flags {
+	PAGE_EXT_OWNER = 0,
+	PAGE_EXT_OWNER_ALLOCATED = 1,
+};
+
+struct page_owner {
+	short unsigned int order;
+	short int last_migrate_reason;
+	gfp_t gfp_mask;
+	depot_stack_handle_t handle;
+	depot_stack_handle_t free_handle;
+	u64 ts_nsec;
+	u64 free_ts_nsec;
+	char comm[16];
+	pid_t pid;
+	pid_t tgid;
+};
+
+enum hmm_pfn_flags {
+	HMM_PFN_VALID = 0,
+	HMM_PFN_WRITE = 0,
+	HMM_PFN_ERROR = 0,
+	HMM_PFN_ORDER_SHIFT = 56,
+	HMM_PFN_REQ_FAULT = 0,
+	HMM_PFN_REQ_WRITE = 0,
+	HMM_PFN_FLAGS = 0,
+};
+
+struct hmm_range {
+	struct mmu_interval_notifier *notifier;
+	long unsigned int notifier_seq;
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int *hmm_pfns;
+	long unsigned int default_flags;
+	long unsigned int pfn_flags_mask;
+	void *dev_private_owner;
+};
+
+struct hmm_vma_walk {
+	struct hmm_range *range;
+	long unsigned int last;
+};
+
+enum {
+	HMM_NEED_FAULT = 1,
+	HMM_NEED_WRITE_FAULT = 2,
+	HMM_NEED_ALL_BITS = 3,
+};
+
+enum vfs_get_super_keying {
+	vfs_get_single_super = 0,
+	vfs_get_single_reconf_super = 1,
+	vfs_get_keyed_super = 2,
+	vfs_get_independent_super = 3,
+};
+
+typedef struct {
+	long unsigned int fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+typedef struct {
+	long unsigned int *in;
+	long unsigned int *out;
+	long unsigned int *ex;
+	long unsigned int *res_in;
+	long unsigned int *res_out;
+	long unsigned int *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t *p;
+	size_t size;
+};
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+struct compat_sel_arg_struct {
+	compat_ulong_t n;
+	compat_uptr_t inp;
+	compat_uptr_t outp;
+	compat_uptr_t exp;
+	compat_uptr_t tvp;
+};
+
+struct compat_sigset_argpack {
+	compat_uptr_t p;
+	compat_size_t size;
+};
+
+enum fsconfig_command {
+	FSCONFIG_SET_FLAG = 0,
+	FSCONFIG_SET_STRING = 1,
+	FSCONFIG_SET_BINARY = 2,
+	FSCONFIG_SET_PATH = 3,
+	FSCONFIG_SET_PATH_EMPTY = 4,
+	FSCONFIG_SET_FD = 5,
+	FSCONFIG_CMD_CREATE = 6,
+	FSCONFIG_CMD_RECONFIGURE = 7,
+};
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+};
+
+struct epoll_filefd {
+	struct file *file;
+	int fd;
+} __attribute__((packed));
+
+struct epitem;
+
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
+};
+
+struct eventpoll;
+
+struct epitem {
+	union {
+		struct rb_node rbn;
+		struct callback_head rcu;
+	};
+	struct list_head rdllink;
+	struct epitem *next;
+	struct epoll_filefd ffd;
+	struct eppoll_entry *pwqlist;
+	struct eventpoll *ep;
+	struct hlist_node fllink;
+	struct wakeup_source *ws;
+	struct epoll_event event;
+};
+
+struct eventpoll {
+	struct mutex mtx;
+	wait_queue_head_t wq;
+	wait_queue_head_t poll_wait;
+	struct list_head rdllist;
+	rwlock_t lock;
+	struct rb_root_cached rbr;
+	struct epitem *ovflist;
+	struct wakeup_source *ws;
+	struct user_struct *user;
+	struct file *file;
+	u64 gen;
+	struct hlist_head refs;
+	unsigned int napi_id;
+};
+
+struct ep_pqueue {
+	poll_table pt;
+	struct epitem *epi;
+};
+
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
+};
+
+typedef enum {
+	FS_DECRYPT = 0,
+	FS_ENCRYPT = 1,
+} fscrypt_direction_t;
+
+struct fsverity_digest {
+	__u16 digest_algorithm;
+	__u16 digest_size;
+	__u8 digest[0];
+};
+
+typedef unsigned int compat_elf_greg_t;
+
+typedef compat_elf_greg_t compat_elf_gregset_t[18];
+
+struct compat_elf_siginfo {
+	compat_int_t si_signo;
+	compat_int_t si_code;
+	compat_int_t si_errno;
+};
+
+struct compat_elf_prstatus_common {
+	struct compat_elf_siginfo pr_info;
+	short int pr_cursig;
+	compat_ulong_t pr_sigpend;
+	compat_ulong_t pr_sighold;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	struct old_timeval32 pr_utime;
+	struct old_timeval32 pr_stime;
+	struct old_timeval32 pr_cutime;
+	struct old_timeval32 pr_cstime;
+};
+
+struct compat_elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	compat_ulong_t pr_flag;
+	__compat_uid_t pr_uid;
+	__compat_gid_t pr_gid;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct compat_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	compat_elf_gregset_t pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct elf_thread_core_info___2 {
+	struct elf_thread_core_info___2 *next;
+	struct task_struct *task;
+	struct compat_elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct elf_note_info___2 {
+	struct elf_thread_core_info___2 *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	compat_siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_writepage_ctx;
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+struct iomap_page {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t uptodate_lock;
+	long unsigned int uptodate[0];
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+struct proc_timens_offset {
+	int clockid;
+	struct timespec64 val;
+};
+
+enum resctrl_conf_type {
+	CDP_NONE = 0,
+	CDP_CODE = 1,
+	CDP_DATA = 2,
+};
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	long unsigned int start;
+	long unsigned int end;
+	fmode_t mode;
+};
+
+struct timers_private {
+	struct pid *pid;
+	struct task_struct *task;
+	struct sighand_struct *sighand;
+	struct pid_namespace *ns;
+	long unsigned int flags;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
+	struct task_struct *task;
+};
+
+enum SHIFT_DIRECTION {
+	SHIFT_LEFT = 0,
+	SHIFT_RIGHT = 1,
+};
+
+struct ext4_extent_tail {
+	__le32 et_checksum;
+};
+
+typedef short unsigned int __kernel_uid16_t;
+
+typedef short unsigned int __kernel_gid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+struct ext4_xattr_inode_array {
+	unsigned int count;
+	struct inode *inodes[0];
+};
+
+struct mpage_da_data {
+	struct inode *inode;
+	struct writeback_control *wbc;
+	long unsigned int first_page;
+	long unsigned int next_page;
+	long unsigned int last_page;
+	struct ext4_map_blocks map;
+	struct ext4_io_submit io_submit;
+	unsigned int do_map: 1;
+	unsigned int scanned_until_end: 1;
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+enum ramfs_param {
+	Opt_mode___3 = 0,
+};
+
+enum {
+	Opt_err___5 = 0,
+	Opt_fd = 1,
+	Opt_uid___3 = 2,
+	Opt_gid___4 = 3,
+	Opt_pgrp = 4,
+	Opt_minproto = 5,
+	Opt_maxproto = 6,
+	Opt_indirect = 7,
+	Opt_direct = 8,
+	Opt_offset = 9,
+	Opt_strictexpire = 10,
+	Opt_ignore = 11,
+};
+
+struct tracefs_dir_ops {
+	int (*mkdir)(const char *);
+	int (*rmdir)(const char *);
+};
+
+struct tracefs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+enum {
+	Opt_uid___4 = 0,
+	Opt_gid___5 = 1,
+	Opt_mode___4 = 2,
+	Opt_err___6 = 3,
+};
+
+struct tracefs_fs_info {
+	struct tracefs_mount_opts mount_opts;
+};
+
+struct btrfs_file_private {
+	void *filldir_buf;
+};
+
+struct inode_defrag {
+	struct rb_node rb_node;
+	u64 ino;
+	u64 transid;
+	u64 root;
+	u32 extent_thresh;
+};
+
+struct falloc_range {
+	struct list_head list;
+	u64 start;
+	u64 len;
+};
+
+enum {
+	RANGE_BOUNDARY_WRITTEN_EXTENT = 0,
+	RANGE_BOUNDARY_PREALLOC_EXTENT = 1,
+	RANGE_BOUNDARY_HOLE = 2,
+};
+
+struct iomap_dio;
+
+enum file_time_flags {
+	S_ATIME = 1,
+	S_MTIME = 2,
+	S_CTIME = 4,
+	S_VERSION = 8,
+};
+
+struct btrfs_disk_balance_args {
+	__le64 profiles;
+	union {
+		__le64 usage;
+		struct {
+			__le32 usage_min;
+			__le32 usage_max;
+		};
+	};
+	__le64 devid;
+	__le64 pstart;
+	__le64 pend;
+	__le64 vstart;
+	__le64 vend;
+	__le64 target;
+	__le64 flags;
+	union {
+		__le64 limit;
+		struct {
+			__le32 limit_min;
+			__le32 limit_max;
+		};
+	};
+	__le32 stripes_min;
+	__le32 stripes_max;
+	__le64 unused[6];
+};
+
+struct btrfs_balance_item {
+	__le64 flags;
+	struct btrfs_disk_balance_args data;
+	struct btrfs_disk_balance_args meta;
+	struct btrfs_disk_balance_args sys;
+	__le64 unused[4];
+};
+
+struct btrfs_dev_stats_item {
+	__le64 values[5];
+};
+
+struct btrfs_swapfile_pin {
+	struct rb_node node;
+	void *ptr;
+	struct inode *inode;
+	bool is_block_group;
+	int bg_extent_count;
+};
+
+struct btrfs_io_geometry {
+	u64 len;
+	u64 offset;
+	u32 stripe_len;
+	u32 stripe_offset;
+	u64 stripe_nr;
+	u64 raid56_stripe_offset;
+};
+
+struct btrfs_device_info {
+	struct btrfs_device *dev;
+	u64 dev_offset;
+	u64 max_avail;
+	u64 total_avail;
+};
+
+struct alloc_chunk_ctl {
+	u64 start;
+	u64 type;
+	int num_stripes;
+	int sub_stripes;
+	int dev_stripes;
+	int devs_max;
+	int devs_min;
+	int devs_increment;
+	int ncopies;
+	int nparity;
+	u64 max_stripe_size;
+	u64 max_chunk_size;
+	u64 dev_extent_min;
+	u64 stripe_size;
+	u64 chunk_size;
+	int ndevs;
+};
+
+struct btrfs_dev_replace_item {
+	__le64 src_devid;
+	__le64 cursor_left;
+	__le64 cursor_right;
+	__le64 cont_reading_from_srcdev_mode;
+	__le64 replace_state;
+	__le64 time_started;
+	__le64 time_stopped;
+	__le64 num_write_errors;
+	__le64 num_uncorrectable_read_errors;
+};
+
+struct ipc_proc_iface {
+	const char *path;
+	const char *header;
+	int ids;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct ipc_proc_iter {
+	struct ipc_namespace *ns;
+	struct pid_namespace *pid_ns;
+	struct ipc_proc_iface *iface;
+};
+
+struct assoc_array_edit;
+
+struct request_key_auth {
+	struct callback_head rcu;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
+};
+
+enum {
+	Opt_new___2 = 0,
+	Opt_load___2 = 1,
+	Opt_update___2 = 2,
+	Opt_err___7 = 3,
+};
+
+enum {
+	Opt_default = 0,
+	Opt_ecryptfs = 1,
+	Opt_enc32 = 2,
+	Opt_error___2 = 3,
+};
+
+enum derived_key_type {
+	ENC_KEY = 0,
+	AUTH_KEY = 1,
+};
+
+struct nlmsg_perm {
+	u16 nlmsg_type;
+	u32 perm;
+};
+
+struct netnode_security_struct {
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} addr;
+	u32 sid;
+	u16 family;
+};
+
+struct sel_netnode_bkt {
+	unsigned int size;
+	struct list_head list;
+};
+
+struct sel_netnode {
+	struct netnode_security_struct nsec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct cond_insertf_data {
+	struct policydb *p;
+	struct avtab_node **dst;
+	struct cond_av_list *other;
+};
+
+struct landlock_object;
+
+struct landlock_object_underops {
+	void (*release)(struct landlock_object * const);
+};
+
+struct landlock_object {
+	refcount_t usage;
+	spinlock_t lock;
+	void *underobj;
+	union {
+		struct callback_head rcu_free;
+		const struct landlock_object_underops *underops;
+	};
+};
+
+typedef struct {
+	efi_guid_t signature_owner;
+	u8 signature_data[0];
+} efi_signature_data_t;
+
+typedef struct {
+	efi_guid_t signature_type;
+	u32 signature_list_size;
+	u32 signature_header_size;
+	u32 signature_size;
+	u8 signature_header[0];
+} efi_signature_list_t;
+
+enum ima_fs_flags {
+	IMA_FS_BUSY = 0,
+};
+
+enum data_formats {
+	DATA_FMT_DIGEST = 0,
+	DATA_FMT_DIGEST_WITH_ALGO = 1,
+	DATA_FMT_DIGEST_WITH_TYPE_AND_ALGO = 2,
+	DATA_FMT_STRING = 3,
+	DATA_FMT_HEX = 4,
+	DATA_FMT_UINT = 5,
+};
+
+enum digest_type {
+	DIGEST_TYPE_IMA = 0,
+	DIGEST_TYPE_VERITY = 1,
+	DIGEST_TYPE__LAST = 2,
+};
+
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_report_aead {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int maxauthsize;
+	unsigned int ivsize;
+};
+
+struct crypto_report_kpp {
+	char type[64];
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+	long: 24;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct crypto_test_param {
+	char driver[128];
+	char alg[128];
+	u32 type;
+};
+
+struct ahash_alg {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_ahash *);
+	void (*exit_tfm)(struct crypto_ahash *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct hash_alg_common halg;
+};
+
+struct ahash_instance {
+	void (*free)(struct ahash_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[256];
+			struct crypto_instance base;
+		} s;
+		struct ahash_alg alg;
+	};
+};
+
+struct cryptd_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct cryptd_ahash {
+	struct crypto_ahash base;
+};
+
+struct cryptd_aead {
+	struct crypto_aead base;
+};
+
+struct cryptd_cpu_queue {
+	struct crypto_queue queue;
+	struct work_struct work;
+};
+
+struct cryptd_queue {
+	struct cryptd_cpu_queue *cpu_queue;
+};
+
+struct cryptd_instance_ctx {
+	struct crypto_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct skcipherd_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct hashd_instance_ctx {
+	struct crypto_shash_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct aead_instance_ctx {
+	struct crypto_aead_spawn aead_spawn;
+	struct cryptd_queue *queue;
+};
+
+struct cryptd_skcipher_ctx {
+	refcount_t refcnt;
+	struct crypto_sync_skcipher *child;
+};
+
+struct cryptd_skcipher_request_ctx {
+	crypto_completion_t complete;
+};
+
+struct cryptd_hash_ctx {
+	refcount_t refcnt;
+	struct crypto_shash *child;
+};
+
+struct cryptd_hash_request_ctx {
+	crypto_completion_t complete;
+	struct shash_desc desc;
+};
+
+struct cryptd_aead_ctx {
+	refcount_t refcnt;
+	struct crypto_aead *child;
+};
+
+struct cryptd_aead_request_ctx {
+	crypto_completion_t complete;
+};
+
+typedef uint32_t drbg_flag_t;
+
+struct drbg_core {
+	drbg_flag_t flags;
+	__u8 statelen;
+	__u8 blocklen_bytes;
+	char cra_name[128];
+	char backend_cra_name[128];
+};
+
+struct drbg_state;
+
+struct drbg_state_ops {
+	int (*update)(struct drbg_state *, struct list_head *, int);
+	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
+	int (*crypto_init)(struct drbg_state *);
+	int (*crypto_fini)(struct drbg_state *);
+};
+
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
+struct drbg_state {
+	struct mutex drbg_mutex;
+	unsigned char *V;
+	unsigned char *Vbuf;
+	unsigned char *C;
+	unsigned char *Cbuf;
+	size_t reseed_ctr;
+	size_t reseed_threshold;
+	unsigned char *scratchpad;
+	unsigned char *scratchpadbuf;
+	void *priv_data;
+	struct crypto_skcipher *ctr_handle;
+	struct skcipher_request *ctr_req;
+	__u8 *outscratchpadbuf;
+	__u8 *outscratchpad;
+	struct crypto_wait ctr_wait;
+	struct scatterlist sg_in;
+	struct scatterlist sg_out;
+	enum drbg_seed_state seeded;
+	long unsigned int last_seed_time;
+	bool pr;
+	bool fips_primed;
+	unsigned char *prev;
+	struct crypto_rng *jent;
+	const struct drbg_state_ops *d_ops;
+	const struct drbg_core *core;
+	struct drbg_string test_data;
+};
+
+enum drbg_prefixes {
+	DRBG_PREFIX0 = 0,
+	DRBG_PREFIX1 = 1,
+	DRBG_PREFIX2 = 2,
+	DRBG_PREFIX3 = 3,
+};
+
+struct sdesc {
+	struct shash_desc shash;
+	char ctx[0];
+};
+
+struct s {
+	__be32 conv;
+};
+
+struct rng_ctx {
+	unsigned int len;
+	struct crypto_rng *drng;
+	u8 *addtl;
+	size_t addtl_len;
+};
+
+struct rng_parent_ctx {
+	struct crypto_rng *drng;
+	u8 *entropy;
+};
+
+enum pkcs7_actions {
+	ACT_pkcs7_check_content_type = 0,
+	ACT_pkcs7_extract_cert = 1,
+	ACT_pkcs7_note_OID = 2,
+	ACT_pkcs7_note_certificate_list = 3,
+	ACT_pkcs7_note_content = 4,
+	ACT_pkcs7_note_data = 5,
+	ACT_pkcs7_note_signed_info = 6,
+	ACT_pkcs7_note_signeddata_version = 7,
+	ACT_pkcs7_note_signerinfo_version = 8,
+	ACT_pkcs7_sig_note_authenticated_attr = 9,
+	ACT_pkcs7_sig_note_digest_algo = 10,
+	ACT_pkcs7_sig_note_issuer = 11,
+	ACT_pkcs7_sig_note_pkey_algo = 12,
+	ACT_pkcs7_sig_note_serial = 13,
+	ACT_pkcs7_sig_note_set_of_authattrs = 14,
+	ACT_pkcs7_sig_note_signature = 15,
+	ACT_pkcs7_sig_note_skid = 16,
+	NR__pkcs7_actions = 17,
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	unsigned int nr;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+struct mac_partition {
+	__be16 signature;
+	__be16 res1;
+	__be32 map_count;
+	__be32 start_block;
+	__be32 block_count;
+	char name[32];
+	char type[32];
+	__be32 data_start;
+	__be32 data_count;
+	__be32 status;
+	__be32 boot_start;
+	__be32 boot_size;
+	__be32 boot_load;
+	__be32 boot_load2;
+	__be32 boot_entry;
+	__be32 boot_entry2;
+	__be32 boot_cksum;
+	char processor[16];
+};
+
+struct mac_driver_desc {
+	__be16 signature;
+	__be16 block_size;
+	__be32 block_count;
+};
+
+struct disk_events {
+	struct list_head node;
+	struct gendisk *disk;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long int poll_msecs;
+	struct delayed_work dwork;
+};
+
+enum prio_policy {
+	POLICY_NO_CHANGE = 0,
+	POLICY_NONE_TO_RT = 1,
+	POLICY_RESTRICT_TO_BE = 2,
+	POLICY_ALL_TO_IDLE = 3,
+};
+
+struct ioprio_blkg {
+	struct blkg_policy_data pd;
+};
+
+struct ioprio_blkcg {
+	struct blkcg_policy_data cpd;
+	enum prio_policy prio_policy;
+};
+
+struct bfq_group_data {
+	struct blkcg_policy_data pd;
+	unsigned int weight;
+};
+
+enum wbt_flags {
+	WBT_TRACKED = 1,
+	WBT_READ = 2,
+	WBT_KSWAPD = 4,
+	WBT_DISCARD = 8,
+	WBT_NR_BITS = 4,
+};
+
+enum {
+	WBT_STATE_ON_DEFAULT = 1,
+	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
+};
+
+struct rq_wb {
+	unsigned int wb_background;
+	unsigned int wb_normal;
+	short int enable_state;
+	unsigned int unknown_cnt;
+	u64 win_nsec;
+	u64 cur_win_nsec;
+	struct blk_stat_callback *cb;
+	u64 sync_issue;
+	void *sync_cookie;
+	unsigned int wc;
+	long unsigned int last_issue;
+	long unsigned int last_comp;
+	long unsigned int min_lat_nsec;
+	struct rq_qos rqos;
+	struct rq_wait rq_wait[3];
+	struct rq_depth rq_depth;
+};
+
+struct trace_event_raw_wbt_stat {
+	struct trace_entry ent;
+	char name[32];
+	s64 rmean;
+	u64 rmin;
+	u64 rmax;
+	s64 rnr_samples;
+	s64 rtime;
+	s64 wmean;
+	u64 wmin;
+	u64 wmax;
+	s64 wnr_samples;
+	s64 wtime;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_lat {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int lat;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_step {
+	struct trace_entry ent;
+	char name[32];
+	const char *msg;
+	int step;
+	long unsigned int window;
+	unsigned int bg;
+	unsigned int normal;
+	unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_timer {
+	struct trace_entry ent;
+	char name[32];
+	unsigned int status;
+	int step;
+	unsigned int inflight;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_wbt_stat {};
+
+struct trace_event_data_offsets_wbt_lat {};
+
+struct trace_event_data_offsets_wbt_step {};
+
+struct trace_event_data_offsets_wbt_timer {};
+
+typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
+
+typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
+
+typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
+
+enum {
+	RWB_DEF_DEPTH = 16,
+	RWB_WINDOW_NSEC = 100000000,
+	RWB_MIN_WRITE_SAMPLES = 3,
+	RWB_UNKNOWN_BUMP = 5,
+};
+
+enum {
+	LAT_OK = 1,
+	LAT_UNKNOWN = 2,
+	LAT_UNKNOWN_WRITES = 3,
+	LAT_EXCEEDED = 4,
+};
+
+struct wbt_wait_data {
+	struct rq_wb *rwb;
+	enum wbt_flags wb_acct;
+	blk_opf_t opf;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
+	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u64 pad[4];
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+};
+
+struct xor_block_template {
+	struct xor_block_template *next;
+	const char *name;
+	int speed;
+	void (*do_2)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_3)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_4)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_5)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+};
+
+typedef long unsigned int uint64x2_t[2];
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+enum {
+	TEST_ALIGNMENT = 16,
+};
+
+typedef unsigned char uch;
+
+typedef short unsigned int ush;
+
+typedef long unsigned int ulg;
+
+struct ct_data_s {
+	union {
+		ush freq;
+		ush code;
+	} fc;
+	union {
+		ush dad;
+		ush len;
+	} dl;
+};
+
+typedef struct ct_data_s ct_data;
+
+struct static_tree_desc_s {
+	const ct_data *static_tree;
+	const int *extra_bits;
+	int extra_base;
+	int elems;
+	int max_length;
+};
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+struct tree_desc_s {
+	ct_data *dyn_tree;
+	int max_code;
+	static_tree_desc *stat_desc;
+};
+
+typedef struct tree_desc_s tree_desc;
+
+typedef ush Pos;
+
+typedef unsigned int IPos;
+
+struct deflate_state {
+	z_streamp strm;
+	int status;
+	Byte *pending_buf;
+	ulg pending_buf_size;
+	Byte *pending_out;
+	int pending;
+	int noheader;
+	Byte data_type;
+	Byte method;
+	int last_flush;
+	uInt w_size;
+	uInt w_bits;
+	uInt w_mask;
+	Byte *window;
+	ulg window_size;
+	Pos *prev;
+	Pos *head;
+	uInt ins_h;
+	uInt hash_size;
+	uInt hash_bits;
+	uInt hash_mask;
+	uInt hash_shift;
+	long int block_start;
+	uInt match_length;
+	IPos prev_match;
+	int match_available;
+	uInt strstart;
+	uInt match_start;
+	uInt lookahead;
+	uInt prev_length;
+	uInt max_chain_length;
+	uInt max_lazy_match;
+	int level;
+	int strategy;
+	uInt good_match;
+	int nice_match;
+	struct ct_data_s dyn_ltree[573];
+	struct ct_data_s dyn_dtree[61];
+	struct ct_data_s bl_tree[39];
+	struct tree_desc_s l_desc;
+	struct tree_desc_s d_desc;
+	struct tree_desc_s bl_desc;
+	ush bl_count[16];
+	int heap[573];
+	int heap_len;
+	int heap_max;
+	uch depth[573];
+	uch *l_buf;
+	uInt lit_bufsize;
+	uInt last_lit;
+	ush *d_buf;
+	ulg opt_len;
+	ulg static_len;
+	ulg compressed_len;
+	uInt matches;
+	int last_eob_len;
+	ush bi_buf;
+	int bi_valid;
+};
+
+typedef struct deflate_state deflate_state;
+
+typedef unsigned int FSE_DTable;
+
+typedef struct {
+	size_t state;
+	const void *table;
+} FSE_DState_t;
+
+typedef struct {
+	U16 tableLog;
+	U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+	short unsigned int newState;
+	unsigned char symbol;
+	unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+	short int ncount[256];
+	FSE_DTable dtable[1];
+} FSE_DecompressWksp;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef ZSTD_DCtx___2 ZSTD_DStream___2;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef struct {
+	size_t compressedSize;
+	long long unsigned int decompressedBound;
+} ZSTD_frameSizeInfo;
+
+typedef long int mpi_limb_signed_t;
+
+struct fprop_local_single {
+	long unsigned int events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct uevent_sock {
+	struct list_head list;
+	struct sock *sk;
+};
+
+struct acpi_madt_generic_redistributor {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u64 base_address;
+	u32 length;
+} __attribute__((packed));
+
+struct rdists {
+	struct {
+		raw_spinlock_t rd_lock;
+		void *rd_base;
+		struct page *pend_page;
+		phys_addr_t phys_base;
+		u64 flags;
+		cpumask_t *vpe_table_mask;
+		void *vpe_l1_base;
+	} *rdist;
+	phys_addr_t prop_table_pa;
+	void *prop_table_va;
+	u64 flags;
+	u32 gicd_typer;
+	u32 gicd_typer2;
+	int cpuhp_memreserve_state;
+	bool has_vlpis;
+	bool has_rvpeid;
+	bool has_direct_lpi;
+	bool has_vpend_valid_dirty;
+};
+
+struct redist_region {
+	void *redist_base;
+	phys_addr_t phys_base;
+	bool single_redist;
+};
+
+struct partition_desc;
+
+struct gic_chip_data___2 {
+	struct fwnode_handle *fwnode;
+	void *dist_base;
+	struct redist_region *redist_regions;
+	struct rdists rdists;
+	struct irq_domain *domain;
+	u64 redist_stride;
+	u32 nr_redist_regions;
+	u64 flags;
+	bool has_rss;
+	unsigned int ppi_nr;
+	struct partition_desc **ppi_descs;
+};
+
+enum gic_intid_range {
+	SGI_RANGE = 0,
+	PPI_RANGE = 1,
+	SPI_RANGE = 2,
+	EPPI_RANGE = 3,
+	ESPI_RANGE = 4,
+	LPI_RANGE = 5,
+	__INVALID_RANGE__ = 6,
+};
+
+struct gpcv2_irqchip_data {
+	struct raw_spinlock rlock;
+	void *gpc_base;
+	u32 wakeup_sources[4];
+	u32 saved_irq_mask[4];
+	u32 cpu2wakeup;
+};
+
+struct combiner_reg {
+	void *addr;
+	long unsigned int enabled;
+};
+
+struct combiner {
+	struct irq_domain *domain;
+	int parent_irq;
+	u32 nirqs;
+	u32 nregs;
+	struct combiner_reg regs[0];
+};
+
+struct get_registers_context {
+	struct device *dev;
+	struct combiner *combiner;
+	int err;
+};
+
+struct phy_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct phy *phy;
+};
+
+struct pcs_pdata {
+	int irq;
+	void (*rearm)();
+};
+
+struct function_desc {
+	const char *name;
+	const char * const *group_names;
+	int num_group_names;
+	void *data;
+};
+
+struct pcs_func_vals {
+	void *reg;
+	unsigned int val;
+	unsigned int mask;
+};
+
+struct pcs_conf_vals {
+	enum pin_config_param param;
+	unsigned int val;
+	unsigned int enable;
+	unsigned int disable;
+	unsigned int mask;
+};
+
+struct pcs_conf_type {
+	const char *name;
+	enum pin_config_param param;
+};
+
+struct pcs_function {
+	const char *name;
+	struct pcs_func_vals *vals;
+	unsigned int nvals;
+	const char **pgnames;
+	int npgnames;
+	struct pcs_conf_vals *conf;
+	int nconfs;
+	struct list_head node;
+};
+
+struct pcs_gpiofunc_range {
+	unsigned int offset;
+	unsigned int npins;
+	unsigned int gpiofunc;
+	struct list_head node;
+};
+
+struct pcs_data {
+	struct pinctrl_pin_desc *pa;
+	int cur;
+};
+
+struct pcs_soc_data {
+	unsigned int flags;
+	int irq;
+	unsigned int irq_enable_mask;
+	unsigned int irq_status_mask;
+	void (*rearm)();
+};
+
+struct pcs_device {
+	struct resource *res;
+	void *base;
+	void *saved_vals;
+	unsigned int size;
+	struct device *dev;
+	struct device_node *np;
+	struct pinctrl_dev *pctl;
+	unsigned int flags;
+	struct property *missing_nr_pinctrl_cells;
+	struct pcs_soc_data socdata;
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	unsigned int width;
+	unsigned int fmask;
+	unsigned int fshift;
+	unsigned int foff;
+	unsigned int fmax;
+	bool bits_per_mux;
+	unsigned int bits_per_pin;
+	struct pcs_data pins;
+	struct list_head gpiofuncs;
+	struct list_head irqs;
+	struct irq_chip chip;
+	struct irq_domain *domain;
+	struct pinctrl_desc desc;
+	unsigned int (*read)(void *);
+	void (*write)(unsigned int, void *);
+};
+
+struct pcs_interrupt {
+	void *reg;
+	irq_hw_number_t hwirq;
+	unsigned int irq;
+	struct list_head node;
+};
+
+enum imx8mp_pads {
+	MX8MP_IOMUXC_RESERVE0 = 0,
+	MX8MP_IOMUXC_RESERVE1 = 1,
+	MX8MP_IOMUXC_RESERVE2 = 2,
+	MX8MP_IOMUXC_RESERVE3 = 3,
+	MX8MP_IOMUXC_RESERVE4 = 4,
+	MX8MP_IOMUXC_GPIO1_IO00 = 5,
+	MX8MP_IOMUXC_GPIO1_IO01 = 6,
+	MX8MP_IOMUXC_GPIO1_IO02 = 7,
+	MX8MP_IOMUXC_GPIO1_IO03 = 8,
+	MX8MP_IOMUXC_GPIO1_IO04 = 9,
+	MX8MP_IOMUXC_GPIO1_IO05 = 10,
+	MX8MP_IOMUXC_GPIO1_IO06 = 11,
+	MX8MP_IOMUXC_GPIO1_IO07 = 12,
+	MX8MP_IOMUXC_GPIO1_IO08 = 13,
+	MX8MP_IOMUXC_GPIO1_IO09 = 14,
+	MX8MP_IOMUXC_GPIO1_IO10 = 15,
+	MX8MP_IOMUXC_GPIO1_IO11 = 16,
+	MX8MP_IOMUXC_GPIO1_IO12 = 17,
+	MX8MP_IOMUXC_GPIO1_IO13 = 18,
+	MX8MP_IOMUXC_GPIO1_IO14 = 19,
+	MX8MP_IOMUXC_GPIO1_IO15 = 20,
+	MX8MP_IOMUXC_ENET_MDC = 21,
+	MX8MP_IOMUXC_ENET_MDIO = 22,
+	MX8MP_IOMUXC_ENET_TD3 = 23,
+	MX8MP_IOMUXC_ENET_TD2 = 24,
+	MX8MP_IOMUXC_ENET_TD1 = 25,
+	MX8MP_IOMUXC_ENET_TD0 = 26,
+	MX8MP_IOMUXC_ENET_TX_CTL = 27,
+	MX8MP_IOMUXC_ENET_TXC = 28,
+	MX8MP_IOMUXC_ENET_RX_CTL = 29,
+	MX8MP_IOMUXC_ENET_RXC = 30,
+	MX8MP_IOMUXC_ENET_RD0 = 31,
+	MX8MP_IOMUXC_ENET_RD1 = 32,
+	MX8MP_IOMUXC_ENET_RD2 = 33,
+	MX8MP_IOMUXC_ENET_RD3 = 34,
+	MX8MP_IOMUXC_SD1_CLK = 35,
+	MX8MP_IOMUXC_SD1_CMD = 36,
+	MX8MP_IOMUXC_SD1_DATA0 = 37,
+	MX8MP_IOMUXC_SD1_DATA1 = 38,
+	MX8MP_IOMUXC_SD1_DATA2 = 39,
+	MX8MP_IOMUXC_SD1_DATA3 = 40,
+	MX8MP_IOMUXC_SD1_DATA4 = 41,
+	MX8MP_IOMUXC_SD1_DATA5 = 42,
+	MX8MP_IOMUXC_SD1_DATA6 = 43,
+	MX8MP_IOMUXC_SD1_DATA7 = 44,
+	MX8MP_IOMUXC_SD1_RESET_B = 45,
+	MX8MP_IOMUXC_SD1_STROBE = 46,
+	MX8MP_IOMUXC_SD2_CD_B = 47,
+	MX8MP_IOMUXC_SD2_CLK = 48,
+	MX8MP_IOMUXC_SD2_CMD = 49,
+	MX8MP_IOMUXC_SD2_DATA0 = 50,
+	MX8MP_IOMUXC_SD2_DATA1 = 51,
+	MX8MP_IOMUXC_SD2_DATA2 = 52,
+	MX8MP_IOMUXC_SD2_DATA3 = 53,
+	MX8MP_IOMUXC_SD2_RESET_B = 54,
+	MX8MP_IOMUXC_SD2_WP = 55,
+	MX8MP_IOMUXC_NAND_ALE = 56,
+	MX8MP_IOMUXC_NAND_CE0_B = 57,
+	MX8MP_IOMUXC_NAND_CE1_B = 58,
+	MX8MP_IOMUXC_NAND_CE2_B = 59,
+	MX8MP_IOMUXC_NAND_CE3_B = 60,
+	MX8MP_IOMUXC_NAND_CLE = 61,
+	MX8MP_IOMUXC_NAND_DATA00 = 62,
+	MX8MP_IOMUXC_NAND_DATA01 = 63,
+	MX8MP_IOMUXC_NAND_DATA02 = 64,
+	MX8MP_IOMUXC_NAND_DATA03 = 65,
+	MX8MP_IOMUXC_NAND_DATA04 = 66,
+	MX8MP_IOMUXC_NAND_DATA05 = 67,
+	MX8MP_IOMUXC_NAND_DATA06 = 68,
+	MX8MP_IOMUXC_NAND_DATA07 = 69,
+	MX8MP_IOMUXC_NAND_DQS = 70,
+	MX8MP_IOMUXC_NAND_RE_B = 71,
+	MX8MP_IOMUXC_NAND_READY_B = 72,
+	MX8MP_IOMUXC_NAND_WE_B = 73,
+	MX8MP_IOMUXC_NAND_WP_B = 74,
+	MX8MP_IOMUXC_SAI5_RXFS = 75,
+	MX8MP_IOMUXC_SAI5_RXC = 76,
+	MX8MP_IOMUXC_SAI5_RXD0 = 77,
+	MX8MP_IOMUXC_SAI5_RXD1 = 78,
+	MX8MP_IOMUXC_SAI5_RXD2 = 79,
+	MX8MP_IOMUXC_SAI5_RXD3 = 80,
+	MX8MP_IOMUXC_SAI5_MCLK = 81,
+	MX8MP_IOMUXC_SAI1_RXFS = 82,
+	MX8MP_IOMUXC_SAI1_RXC = 83,
+	MX8MP_IOMUXC_SAI1_RXD0 = 84,
+	MX8MP_IOMUXC_SAI1_RXD1 = 85,
+	MX8MP_IOMUXC_SAI1_RXD2 = 86,
+	MX8MP_IOMUXC_SAI1_RXD3 = 87,
+	MX8MP_IOMUXC_SAI1_RXD4 = 88,
+	MX8MP_IOMUXC_SAI1_RXD5 = 89,
+	MX8MP_IOMUXC_SAI1_RXD6 = 90,
+	MX8MP_IOMUXC_SAI1_RXD7 = 91,
+	MX8MP_IOMUXC_SAI1_TXFS = 92,
+	MX8MP_IOMUXC_SAI1_TXC = 93,
+	MX8MP_IOMUXC_SAI1_TXD0 = 94,
+	MX8MP_IOMUXC_SAI1_TXD1 = 95,
+	MX8MP_IOMUXC_SAI1_TXD2 = 96,
+	MX8MP_IOMUXC_SAI1_TXD3 = 97,
+	MX8MP_IOMUXC_SAI1_TXD4 = 98,
+	MX8MP_IOMUXC_SAI1_TXD5 = 99,
+	MX8MP_IOMUXC_SAI1_TXD6 = 100,
+	MX8MP_IOMUXC_SAI1_TXD7 = 101,
+	MX8MP_IOMUXC_SAI1_MCLK = 102,
+	MX8MP_IOMUXC_SAI2_RXFS = 103,
+	MX8MP_IOMUXC_SAI2_RXC = 104,
+	MX8MP_IOMUXC_SAI2_RXD0 = 105,
+	MX8MP_IOMUXC_SAI2_TXFS = 106,
+	MX8MP_IOMUXC_SAI2_TXC = 107,
+	MX8MP_IOMUXC_SAI2_TXD0 = 108,
+	MX8MP_IOMUXC_SAI2_MCLK = 109,
+	MX8MP_IOMUXC_SAI3_RXFS = 110,
+	MX8MP_IOMUXC_SAI3_RXC = 111,
+	MX8MP_IOMUXC_SAI3_RXD = 112,
+	MX8MP_IOMUXC_SAI3_TXFS = 113,
+	MX8MP_IOMUXC_SAI3_TXC = 114,
+	MX8MP_IOMUXC_SAI3_TXD = 115,
+	MX8MP_IOMUXC_SAI3_MCLK = 116,
+	MX8MP_IOMUXC_SPDIF_TX = 117,
+	MX8MP_IOMUXC_SPDIF_RX = 118,
+	MX8MP_IOMUXC_SPDIF_EXT_CLK = 119,
+	MX8MP_IOMUXC_ECSPI1_SCLK = 120,
+	MX8MP_IOMUXC_ECSPI1_MOSI = 121,
+	MX8MP_IOMUXC_ECSPI1_MISO = 122,
+	MX8MP_IOMUXC_ECSPI1_SS0 = 123,
+	MX8MP_IOMUXC_ECSPI2_SCLK = 124,
+	MX8MP_IOMUXC_ECSPI2_MOSI = 125,
+	MX8MP_IOMUXC_ECSPI2_MISO = 126,
+	MX8MP_IOMUXC_ECSPI2_SS0 = 127,
+	MX8MP_IOMUXC_I2C1_SCL = 128,
+	MX8MP_IOMUXC_I2C1_SDA = 129,
+	MX8MP_IOMUXC_I2C2_SCL = 130,
+	MX8MP_IOMUXC_I2C2_SDA = 131,
+	MX8MP_IOMUXC_I2C3_SCL = 132,
+	MX8MP_IOMUXC_I2C3_SDA = 133,
+	MX8MP_IOMUXC_I2C4_SCL = 134,
+	MX8MP_IOMUXC_I2C4_SDA = 135,
+	MX8MP_IOMUXC_UART1_RXD = 136,
+	MX8MP_IOMUXC_UART1_TXD = 137,
+	MX8MP_IOMUXC_UART2_RXD = 138,
+	MX8MP_IOMUXC_UART2_TXD = 139,
+	MX8MP_IOMUXC_UART3_RXD = 140,
+	MX8MP_IOMUXC_UART3_TXD = 141,
+	MX8MP_IOMUXC_UART4_RXD = 142,
+	MX8MP_IOMUXC_UART4_TXD = 143,
+	MX8MP_IOMUXC_HDMI_DDC_SCL = 144,
+	MX8MP_IOMUXC_HDMI_DDC_SDA = 145,
+	MX8MP_IOMUXC_HDMI_CEC = 146,
+	MX8MP_IOMUXC_HDMI_HPD = 147,
+};
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+struct thunder_pem_pci {
+	u32 ea_entry[3];
+	void *pem_reg_base;
+};
+
+struct rockchip_pcie___2 {
+	void *reg_base;
+	void *apb_base;
+	bool legacy_phy;
+	struct phy *phys[4];
+	struct reset_control *core_rst;
+	struct reset_control *mgmt_rst;
+	struct reset_control *mgmt_sticky_rst;
+	struct reset_control *pipe_rst;
+	struct reset_control *pm_rst;
+	struct reset_control *aclk_rst;
+	struct reset_control *pclk_rst;
+	struct clk *aclk_pcie;
+	struct clk *aclk_perf_pcie;
+	struct clk *hclk_pcie;
+	struct clk *clk_pcie_pm;
+	struct regulator *vpcie12v;
+	struct regulator *vpcie3v3;
+	struct regulator *vpcie1v8;
+	struct regulator *vpcie0v9;
+	struct gpio_desc *ep_gpio;
+	u32 lanes;
+	u8 lanes_map;
+	int link_gen;
+	struct device *dev;
+	struct irq_domain *irq_domain;
+	int offset;
+	void *msg_region;
+	phys_addr_t msg_bus_addr;
+	bool is_rc;
+	struct resource *mem_res;
+};
+
+enum imx6_pcie_variants {
+	IMX6Q = 0,
+	IMX6SX = 1,
+	IMX6QP = 2,
+	IMX7D = 3,
+	IMX8MQ = 4,
+	IMX8MM = 5,
+};
+
+struct imx6_pcie_drvdata {
+	enum imx6_pcie_variants variant;
+	u32 flags;
+	int dbi_length;
+};
+
+struct imx6_pcie {
+	struct dw_pcie *pci;
+	int reset_gpio;
+	bool gpio_active_high;
+	bool link_is_up;
+	struct clk *pcie_bus;
+	struct clk *pcie_phy;
+	struct clk *pcie_inbound_axi;
+	struct clk *pcie;
+	struct clk *pcie_aux;
+	struct regmap *iomuxc_gpr;
+	u32 controller_id;
+	struct reset_control *pciephy_reset;
+	struct reset_control *apps_reset;
+	struct reset_control *turnoff_reset;
+	u32 tx_deemph_gen1;
+	u32 tx_deemph_gen2_3p5db;
+	u32 tx_deemph_gen2_6db;
+	u32 tx_swing_full;
+	u32 tx_swing_low;
+	struct regulator *vpcie;
+	struct regulator *vph;
+	void *phy_base;
+	struct device *pd_pcie;
+	struct device *pd_pcie_phy;
+	struct phy *phy;
+	const struct imx6_pcie_drvdata *drvdata;
+};
+
+struct acpi_osi_entry {
+	char string[64];
+	bool enable;
+};
+
+struct acpi_osi_config {
+	u8 default_disabling;
+	unsigned int linux_enable: 1;
+	unsigned int linux_dmi: 1;
+	unsigned int linux_cmdline: 1;
+	unsigned int darwin_enable: 1;
+	unsigned int darwin_dmi: 1;
+	unsigned int darwin_cmdline: 1;
+};
+
+struct acpi_device_bus_id {
+	const char *bus_id;
+	struct ida instance_ida;
+	struct list_head node;
+};
+
+struct acpi_dev_match_info {
+	struct acpi_device_id hid[2];
+	const char *uid;
+	s64 hrv;
+};
+
+struct acpi_table_stao {
+	struct acpi_table_header header;
+	u8 ignore_uart;
+} __attribute__((packed));
+
+struct acpi_dep_data {
+	struct list_head node;
+	acpi_handle supplier;
+	acpi_handle consumer;
+	bool honor_dep;
+};
+
+struct acpi_scan_clear_dep_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+};
+
+struct apd_private_data;
+
+struct apd_device_desc {
+	unsigned int fixed_clk_rate;
+	struct property_entry *properties;
+	int (*setup)(struct apd_private_data *);
+};
+
+struct apd_private_data {
+	struct clk *clk;
+	struct acpi_device *adev;
+	const struct apd_device_desc *dev_desc;
+};
+
+typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
+
+struct acpi_table_bert {
+	struct acpi_table_header header;
+	u32 region_length;
+	u64 address;
+};
+
+struct acpi_table_attr {
+	struct bin_attribute attr;
+	char name[4];
+	int instance;
+	char filename[8];
+	struct list_head node;
+};
+
+struct acpi_data_attr {
+	struct bin_attribute attr;
+	u64 addr;
+};
+
+struct acpi_data_obj {
+	char *name;
+	int (*fn)(void *, struct acpi_data_attr *);
+};
+
+struct event_counter {
+	u32 count;
+	u32 flags;
+};
+
+struct acpi_init_walk_info {
+	u32 table_index;
+	u32 object_count;
+	u32 method_count;
+	u32 serial_method_count;
+	u32 non_serial_method_count;
+	u32 serialized_method_count;
+	u32 device_count;
+	u32 op_region_count;
+	u32 field_count;
+	u32 buffer_count;
+	u32 package_count;
+	u32 op_region_init;
+	u32 field_init;
+	u32 buffer_init;
+	u32 package_init;
+	acpi_owner_id owner_id;
+};
+
+typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
+
+struct acpi_pcc_info {
+	u8 subspace_id;
+	u16 length;
+	u8 *internal_buffer;
+};
+
+struct acpi_reg_walk_info {
+	u32 function;
+	u32 reg_run_count;
+	acpi_adr_space_type space_id;
+};
+
+struct acpi_fadt_info {
+	const char *name;
+	u16 address64;
+	u16 address32;
+	u16 length;
+	u8 default_length;
+	u8 flags;
+};
+
+struct acpi_fadt_pm_info {
+	struct acpi_generic_address *target;
+	u16 source;
+	u8 register_num;
+};
+
+struct acpi_table_mcfg {
+	struct acpi_table_header header;
+	u8 reserved[8];
+};
+
+struct acpi_mcfg_allocation {
+	u64 address;
+	u16 pci_segment;
+	u8 start_bus_number;
+	u8 end_bus_number;
+	u32 reserved;
+};
+
+struct mcfg_entry {
+	struct list_head list;
+	phys_addr_t addr;
+	u16 segment;
+	u8 bus_start;
+	u8 bus_end;
+};
+
+struct mcfg_fixup {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	u16 segment;
+	struct resource bus_range;
+	const struct pci_ecam_ops *ops;
+	struct resource cfgres;
+};
+
+enum acpi_pptt_type {
+	ACPI_PPTT_TYPE_PROCESSOR = 0,
+	ACPI_PPTT_TYPE_CACHE = 1,
+	ACPI_PPTT_TYPE_ID = 2,
+	ACPI_PPTT_TYPE_RESERVED = 3,
+};
+
+struct acpi_pptt_processor {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 flags;
+	u32 parent;
+	u32 acpi_processor_id;
+	u32 number_of_priv_resources;
+};
+
+struct acpi_pptt_cache {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 flags;
+	u32 next_level_of_cache;
+	u32 size;
+	u32 number_of_sets;
+	u8 associativity;
+	u8 attributes;
+	u16 line_size;
+};
+
+struct acpi_pptt_cache_v1 {
+	u32 cache_id;
+};
+
+struct acpi_table_erst {
+	struct acpi_table_header header;
+	u32 header_length;
+	u32 reserved;
+	u32 entries;
+};
+
+enum acpi_erst_actions {
+	ACPI_ERST_BEGIN_WRITE = 0,
+	ACPI_ERST_BEGIN_READ = 1,
+	ACPI_ERST_BEGIN_CLEAR = 2,
+	ACPI_ERST_END = 3,
+	ACPI_ERST_SET_RECORD_OFFSET = 4,
+	ACPI_ERST_EXECUTE_OPERATION = 5,
+	ACPI_ERST_CHECK_BUSY_STATUS = 6,
+	ACPI_ERST_GET_COMMAND_STATUS = 7,
+	ACPI_ERST_GET_RECORD_ID = 8,
+	ACPI_ERST_SET_RECORD_ID = 9,
+	ACPI_ERST_GET_RECORD_COUNT = 10,
+	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
+	ACPI_ERST_NOT_USED = 12,
+	ACPI_ERST_GET_ERROR_RANGE = 13,
+	ACPI_ERST_GET_ERROR_LENGTH = 14,
+	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
+	ACPI_ERST_EXECUTE_TIMINGS = 16,
+	ACPI_ERST_ACTION_RESERVED = 17,
+};
+
+enum acpi_erst_instructions {
+	ACPI_ERST_READ_REGISTER = 0,
+	ACPI_ERST_READ_REGISTER_VALUE = 1,
+	ACPI_ERST_WRITE_REGISTER = 2,
+	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
+	ACPI_ERST_NOOP = 4,
+	ACPI_ERST_LOAD_VAR1 = 5,
+	ACPI_ERST_LOAD_VAR2 = 6,
+	ACPI_ERST_STORE_VAR1 = 7,
+	ACPI_ERST_ADD = 8,
+	ACPI_ERST_SUBTRACT = 9,
+	ACPI_ERST_ADD_VALUE = 10,
+	ACPI_ERST_SUBTRACT_VALUE = 11,
+	ACPI_ERST_STALL = 12,
+	ACPI_ERST_STALL_WHILE_TRUE = 13,
+	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
+	ACPI_ERST_GOTO = 15,
+	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
+	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
+	ACPI_ERST_MOVE_DATA = 18,
+	ACPI_ERST_INSTRUCTION_RESERVED = 19,
+};
+
+struct cper_record_header {
+	char signature[4];
+	u16 revision;
+	u32 signature_end;
+	u16 section_count;
+	u32 error_severity;
+	u32 validation_bits;
+	u32 record_length;
+	u64 timestamp;
+	guid_t platform_id;
+	guid_t partition_id;
+	guid_t creator_id;
+	guid_t notification_type;
+	u64 record_id;
+	u32 flags;
+	u64 persistence_information;
+	u8 reserved[12];
+} __attribute__((packed));
+
+struct cper_section_descriptor {
+	u32 section_offset;
+	u32 section_length;
+	u16 revision;
+	u8 validation_bits;
+	u8 reserved;
+	u32 flags;
+	guid_t section_type;
+	guid_t fru_id;
+	u32 section_severity;
+	u8 fru_text[20];
+};
+
+struct erst_erange {
+	u64 base;
+	u64 size;
+	void *vaddr;
+	u32 attr;
+};
+
+struct erst_record_id_cache {
+	struct mutex lock;
+	u64 *entries;
+	int len;
+	int size;
+	int refcount;
+};
+
+struct cper_pstore_record {
+	struct cper_record_header hdr;
+	struct cper_section_descriptor sec_hdr;
+	char data[0];
+};
+
+struct clk_notifier {
+	struct clk *clk;
+	struct srcu_notifier_head notifier_head;
+	struct list_head node;
+};
+
+struct clk_parent_map;
+
+struct clk_core {
+	const char *name;
+	const struct clk_ops *ops;
+	struct clk_hw *hw;
+	struct module *owner;
+	struct device *dev;
+	struct device_node *of_node;
+	struct clk_core *parent;
+	struct clk_parent_map *parents;
+	u8 num_parents;
+	u8 new_parent_index;
+	long unsigned int rate;
+	long unsigned int req_rate;
+	long unsigned int new_rate;
+	struct clk_core *new_parent;
+	struct clk_core *new_child;
+	long unsigned int flags;
+	bool orphan;
+	bool rpm_enabled;
+	unsigned int enable_count;
+	unsigned int prepare_count;
+	unsigned int protect_count;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int accuracy;
+	int phase;
+	struct clk_duty duty;
+	struct hlist_head children;
+	struct hlist_node child_node;
+	struct hlist_head clks;
+	unsigned int notifier_count;
+	struct dentry *dentry;
+	struct hlist_node debug_node;
+	struct kref ref;
+};
+
+struct clk_parent_map {
+	const struct clk_hw *hw;
+	struct clk_core *core;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct trace_event_raw_clk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int rate;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int min;
+	long unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_parent {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_phase {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int phase;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_duty_cycle {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int num;
+	unsigned int den;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_clk {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_parent {
+	u32 name;
+	u32 pname;
+};
+
+struct trace_event_data_offsets_clk_phase {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_duty_cycle {
+	u32 name;
+};
+
+typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
+
+struct clk_notifier_devres {
+	struct clk *clk;
+	struct notifier_block *nb;
+};
+
+struct of_clk_provider {
+	struct list_head link;
+	struct device_node *node;
+	struct clk * (*get)(struct of_phandle_args *, void *);
+	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
+	void *data;
+};
+
+struct clock_provider {
+	void (*clk_init_cb)(struct device_node *);
+	struct device_node *np;
+	struct list_head node;
+};
+
+enum rpi_firmware_clk_id {
+	RPI_FIRMWARE_EMMC_CLK_ID = 1,
+	RPI_FIRMWARE_UART_CLK_ID = 2,
+	RPI_FIRMWARE_ARM_CLK_ID = 3,
+	RPI_FIRMWARE_CORE_CLK_ID = 4,
+	RPI_FIRMWARE_V3D_CLK_ID = 5,
+	RPI_FIRMWARE_H264_CLK_ID = 6,
+	RPI_FIRMWARE_ISP_CLK_ID = 7,
+	RPI_FIRMWARE_SDRAM_CLK_ID = 8,
+	RPI_FIRMWARE_PIXEL_CLK_ID = 9,
+	RPI_FIRMWARE_PWM_CLK_ID = 10,
+	RPI_FIRMWARE_HEVC_CLK_ID = 11,
+	RPI_FIRMWARE_EMMC2_CLK_ID = 12,
+	RPI_FIRMWARE_M2MC_CLK_ID = 13,
+	RPI_FIRMWARE_PIXEL_BVB_CLK_ID = 14,
+	RPI_FIRMWARE_NUM_CLK_ID = 15,
+};
+
+struct raspberrypi_clk {
+	struct device *dev;
+	struct rpi_firmware *firmware;
+	struct platform_device *cpufreq;
+};
+
+struct raspberrypi_clk_variant;
+
+struct raspberrypi_clk_data {
+	struct clk_hw hw;
+	unsigned int id;
+	struct raspberrypi_clk_variant *variant;
+	struct raspberrypi_clk *rpi;
+};
+
+struct raspberrypi_clk_variant {
+	bool export;
+	char *clkdev;
+	long unsigned int min_rate;
+	bool minimize;
+};
+
+struct raspberrypi_firmware_prop {
+	__le32 id;
+	__le32 val;
+	__le32 disable_turbo;
+};
+
+struct rpi_firmware_get_clocks_response {
+	u32 parent;
+	u32 id;
+};
+
+struct hi6220_stub_clk {
+	u32 id;
+	struct device *dev;
+	struct clk_hw hw;
+	struct regmap *dfs_map;
+	struct mbox_client cl;
+	struct mbox_chan *mbox;
+};
+
+struct hi6220_mbox_msg {
+	unsigned char type;
+	unsigned char cmd;
+	unsigned char obj;
+	unsigned char src;
+	unsigned char para[4];
+};
+
+union hi6220_mbox_data {
+	unsigned int data[8];
+	struct hi6220_mbox_msg msg;
+};
+
+enum imx_pllv4_type {
+	IMX_PLLV4_IMX7ULP = 0,
+	IMX_PLLV4_IMX8ULP = 1,
+};
+
+struct clk_pllv4 {
+	struct clk_hw hw;
+	void *base;
+	u32 cfg_offset;
+	u32 num_offset;
+	u32 denom_offset;
+};
+
+struct clk_fixed_rate {
+	struct clk_hw hw;
+	long unsigned int fixed_rate;
+	long unsigned int fixed_accuracy;
+	long unsigned int flags;
+};
+
+struct gdsc_desc {
+	struct device *dev;
+	struct gdsc **scs;
+	size_t num;
+};
+
+struct qcom_cc {
+	struct qcom_reset_controller reset;
+	struct clk_regmap___2 **rclks;
+	size_t num_rclks;
+};
+
+enum {
+	P_AUD_REF_CLK___2 = 0,
+	P_CORE_BI_PLL_TEST_SE___2 = 1,
+	P_GPLL0_OUT_MAIN___2 = 2,
+	P_GPLL4_OUT_MAIN___2 = 3,
+	P_PLL0_EARLY_DIV_CLK_SRC = 4,
+	P_SLEEP_CLK___5 = 5,
+	P_XO___4 = 6,
+};
+
+struct rockchip_inv_clock {
+	struct clk_hw hw;
+	void *reg;
+	int shift;
+	int flags;
+	spinlock_t *lock;
+};
+
+struct rockchip_muxgrf_clock {
+	struct clk_hw hw;
+	struct regmap *regmap;
+	u32 reg;
+	u32 shift;
+	u32 width;
+	int flags;
+};
+
+struct rockchip_softrst {
+	struct reset_controller_dev rcdev;
+	void *reg_base;
+	int num_regs;
+	int num_per_reg;
+	u8 flags;
+	spinlock_t lock;
+};
+
+enum rk3399_plls {
+	lpll = 0,
+	bpll = 1,
+	dpll___5 = 2,
+	cpll___4 = 3,
+	gpll___4 = 4,
+	npll___4 = 5,
+	vpll___2 = 6,
+};
+
+enum rk3399_pmu_plls {
+	ppll___2 = 0,
+};
+
+struct clk_rk3399_inits {
+	void (*inits)(struct device_node *);
+};
+
+struct tegra_sdmmc_mux {
+	struct clk_hw hw;
+	void *reg;
+	spinlock_t *lock;
+	const struct clk_ops *gate_ops;
+	struct tegra_clk_periph_gate gate;
+	u8 div_flags;
+};
+
+struct tegra_sync_source_initdata {
+	char *name;
+	long unsigned int rate;
+	long unsigned int max_rate;
+	int clk_id;
+};
+
+struct tegra_audio_clk_initdata {
+	char *gate_name;
+	char *mux_name;
+	u32 offset;
+	int gate_clk_id;
+	int mux_clk_id;
+};
+
+struct tegra_audio2x_clk_initdata {
+	char *parent;
+	char *gate_name;
+	char *name_2x;
+	char *div_name;
+	int clk_id;
+	int clk_num;
+	u8 div_offset;
+};
+
+enum tegra_super_gen {
+	gen4 = 4,
+	gen5 = 5,
+};
+
+struct tegra_super_gen_info {
+	enum tegra_super_gen gen;
+	const char **sclk_parents;
+	const char **cclk_g_parents;
+	const char **cclk_lp_parents;
+	int num_sclk_parents;
+	int num_cclk_g_parents;
+	int num_cclk_lp_parents;
+};
+
+struct tegra210_clk_emc_config {
+	long unsigned int rate;
+	bool same_freq;
+	u32 value;
+	long unsigned int parent_rate;
+	u8 parent;
+};
+
+struct tegra210_clk_emc_provider {
+	struct module *owner;
+	struct device *dev;
+	struct tegra210_clk_emc_config *configs;
+	unsigned int num_configs;
+	int (*set_rate)(struct device *, const struct tegra210_clk_emc_config *);
+};
+
+struct tegra210_clk_emc {
+	struct clk_hw hw;
+	void *regs;
+	struct tegra210_clk_emc_provider *provider;
+	struct clk *parents[8];
+};
+
+struct zynqmp_clk_mux {
+	struct clk_hw hw;
+	u8 flags;
+	u32 clk_id;
+};
+
+struct acpi_table_csrt {
+	struct acpi_table_header header;
+};
+
+struct acpi_csrt_group {
+	u32 length;
+	u32 vendor_id;
+	u32 subvendor_id;
+	u16 device_id;
+	u16 subdevice_id;
+	u16 revision;
+	u16 reserved;
+	u32 shared_info_length;
+};
+
+struct acpi_csrt_shared_info {
+	u16 major_version;
+	u16 minor_version;
+	u32 mmio_base_low;
+	u32 mmio_base_high;
+	u32 gsi_interrupt;
+	u8 interrupt_polarity;
+	u8 interrupt_mode;
+	u8 num_channels;
+	u8 dma_address_width;
+	u16 base_request_line;
+	u16 num_handshake_signals;
+	u32 max_block_size;
+};
+
+struct acpi_dma_spec {
+	int chan_id;
+	int slave_id;
+	struct device *dev;
+};
+
+struct acpi_dma {
+	struct list_head dma_controllers;
+	struct device *dev;
+	struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
+	void *data;
+	short unsigned int base_request_line;
+	short unsigned int end_request_line;
+};
+
+struct acpi_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct acpi_dma_parser_data {
+	struct acpi_dma_spec dma_spec;
+	size_t index;
+	size_t n;
+};
+
+struct bman_hwerr_txt {
+	u32 mask;
+	const char *txt;
+};
+
+struct rcpm {
+	unsigned int wakeup_cells;
+	void *ippdexpcr_base;
+	bool little_endian;
+};
+
+enum geni_se_xfer_mode {
+	GENI_SE_INVALID = 0,
+	GENI_SE_FIFO = 1,
+	GENI_SE_DMA = 2,
+	GENI_GPI_DMA = 3,
+};
+
+enum geni_se_protocol_type {
+	GENI_SE_NONE = 0,
+	GENI_SE_SPI = 1,
+	GENI_SE_UART = 2,
+	GENI_SE_I2C = 3,
+	GENI_SE_I3C = 4,
+};
+
+struct geni_icc_path {
+	struct icc_path *path;
+	unsigned int avg_bw;
+};
+
+struct geni_wrapper;
+
+struct geni_se {
+	void *base;
+	struct device *dev;
+	struct geni_wrapper *wrapper;
+	struct clk *clk;
+	unsigned int num_clk_levels;
+	long unsigned int *clk_perf_tbl;
+	struct geni_icc_path icc_paths[3];
+};
+
+struct geni_wrapper {
+	struct device *dev;
+	void *base;
+	struct clk_bulk_data ahb_clks[2];
+};
+
+enum tegra_suspend_mode {
+	TEGRA_SUSPEND_NONE = 0,
+	TEGRA_SUSPEND_LP2 = 1,
+	TEGRA_SUSPEND_LP1 = 2,
+	TEGRA_SUSPEND_LP0 = 3,
+	TEGRA_MAX_SUSPEND_MODE = 4,
+	TEGRA_SUSPEND_NOT_READY = 5,
+};
+
+enum tegra_io_pad {
+	TEGRA_IO_PAD_AUDIO = 0,
+	TEGRA_IO_PAD_AUDIO_HV = 1,
+	TEGRA_IO_PAD_BB = 2,
+	TEGRA_IO_PAD_CAM = 3,
+	TEGRA_IO_PAD_COMP = 4,
+	TEGRA_IO_PAD_CONN = 5,
+	TEGRA_IO_PAD_CSIA = 6,
+	TEGRA_IO_PAD_CSIB = 7,
+	TEGRA_IO_PAD_CSIC = 8,
+	TEGRA_IO_PAD_CSID = 9,
+	TEGRA_IO_PAD_CSIE = 10,
+	TEGRA_IO_PAD_CSIF = 11,
+	TEGRA_IO_PAD_CSIG = 12,
+	TEGRA_IO_PAD_CSIH = 13,
+	TEGRA_IO_PAD_DAP3 = 14,
+	TEGRA_IO_PAD_DAP5 = 15,
+	TEGRA_IO_PAD_DBG = 16,
+	TEGRA_IO_PAD_DEBUG_NONAO = 17,
+	TEGRA_IO_PAD_DMIC = 18,
+	TEGRA_IO_PAD_DMIC_HV = 19,
+	TEGRA_IO_PAD_DP = 20,
+	TEGRA_IO_PAD_DSI = 21,
+	TEGRA_IO_PAD_DSIB = 22,
+	TEGRA_IO_PAD_DSIC = 23,
+	TEGRA_IO_PAD_DSID = 24,
+	TEGRA_IO_PAD_EDP = 25,
+	TEGRA_IO_PAD_EMMC = 26,
+	TEGRA_IO_PAD_EMMC2 = 27,
+	TEGRA_IO_PAD_EQOS = 28,
+	TEGRA_IO_PAD_GPIO = 29,
+	TEGRA_IO_PAD_GP_PWM2 = 30,
+	TEGRA_IO_PAD_GP_PWM3 = 31,
+	TEGRA_IO_PAD_HDMI = 32,
+	TEGRA_IO_PAD_HDMI_DP0 = 33,
+	TEGRA_IO_PAD_HDMI_DP1 = 34,
+	TEGRA_IO_PAD_HDMI_DP2 = 35,
+	TEGRA_IO_PAD_HDMI_DP3 = 36,
+	TEGRA_IO_PAD_HSIC = 37,
+	TEGRA_IO_PAD_HV = 38,
+	TEGRA_IO_PAD_LVDS = 39,
+	TEGRA_IO_PAD_MIPI_BIAS = 40,
+	TEGRA_IO_PAD_NAND = 41,
+	TEGRA_IO_PAD_PEX_BIAS = 42,
+	TEGRA_IO_PAD_PEX_CLK_BIAS = 43,
+	TEGRA_IO_PAD_PEX_CLK1 = 44,
+	TEGRA_IO_PAD_PEX_CLK2 = 45,
+	TEGRA_IO_PAD_PEX_CLK3 = 46,
+	TEGRA_IO_PAD_PEX_CLK_2_BIAS = 47,
+	TEGRA_IO_PAD_PEX_CLK_2 = 48,
+	TEGRA_IO_PAD_PEX_CNTRL = 49,
+	TEGRA_IO_PAD_PEX_CTL2 = 50,
+	TEGRA_IO_PAD_PEX_L0_RST_N = 51,
+	TEGRA_IO_PAD_PEX_L1_RST_N = 52,
+	TEGRA_IO_PAD_PEX_L5_RST_N = 53,
+	TEGRA_IO_PAD_PWR_CTL = 54,
+	TEGRA_IO_PAD_SDMMC1 = 55,
+	TEGRA_IO_PAD_SDMMC1_HV = 56,
+	TEGRA_IO_PAD_SDMMC2 = 57,
+	TEGRA_IO_PAD_SDMMC2_HV = 58,
+	TEGRA_IO_PAD_SDMMC3 = 59,
+	TEGRA_IO_PAD_SDMMC3_HV = 60,
+	TEGRA_IO_PAD_SDMMC4 = 61,
+	TEGRA_IO_PAD_SOC_GPIO10 = 62,
+	TEGRA_IO_PAD_SOC_GPIO12 = 63,
+	TEGRA_IO_PAD_SOC_GPIO13 = 64,
+	TEGRA_IO_PAD_SOC_GPIO53 = 65,
+	TEGRA_IO_PAD_SPI = 66,
+	TEGRA_IO_PAD_SPI_HV = 67,
+	TEGRA_IO_PAD_SYS_DDC = 68,
+	TEGRA_IO_PAD_UART = 69,
+	TEGRA_IO_PAD_UART4 = 70,
+	TEGRA_IO_PAD_UART5 = 71,
+	TEGRA_IO_PAD_UFS = 72,
+	TEGRA_IO_PAD_USB0 = 73,
+	TEGRA_IO_PAD_USB1 = 74,
+	TEGRA_IO_PAD_USB2 = 75,
+	TEGRA_IO_PAD_USB3 = 76,
+	TEGRA_IO_PAD_USB_BIAS = 77,
+	TEGRA_IO_PAD_AO_HV = 78,
+};
+
+struct pmc_clk {
+	struct clk_hw hw;
+	long unsigned int offs;
+	u32 mux_shift;
+	u32 force_en_shift;
+};
+
+struct pmc_clk_gate {
+	struct clk_hw hw;
+	long unsigned int offs;
+	u32 shift;
+};
+
+struct pmc_clk_init_data {
+	char *name;
+	const char * const *parents;
+	int num_parents;
+	int clk_id;
+	u8 mux_shift;
+	u8 force_en_shift;
+};
+
+struct tegra_pmc;
+
+struct tegra_powergate___2 {
+	struct generic_pm_domain genpd;
+	struct tegra_pmc *pmc;
+	unsigned int id;
+	struct clk **clks;
+	unsigned int num_clks;
+	long unsigned int *clk_rates;
+	struct reset_control *reset;
+};
+
+struct tegra_pmc_soc;
+
+struct tegra_pmc {
+	struct device *dev;
+	void *base;
+	void *wake;
+	void *aotag;
+	void *scratch;
+	struct clk *clk;
+	struct dentry *debugfs;
+	const struct tegra_pmc_soc *soc;
+	bool tz_only;
+	long unsigned int rate;
+	enum tegra_suspend_mode suspend_mode;
+	u32 cpu_good_time;
+	u32 cpu_off_time;
+	u32 core_osc_time;
+	u32 core_pmu_time;
+	u32 core_off_time;
+	bool corereq_high;
+	bool sysclkreq_high;
+	bool combined_req;
+	bool cpu_pwr_good_en;
+	u32 lp0_vec_phys;
+	u32 lp0_vec_size;
+	long unsigned int powergates_available[1];
+	struct mutex powergates_lock;
+	struct pinctrl_dev *pctl_dev;
+	struct irq_domain *domain;
+	struct irq_chip irq;
+	struct notifier_block clk_nb;
+	bool core_domain_state_synced;
+	bool core_domain_registered;
+};
+
+struct tegra_io_pad_soc {
+	enum tegra_io_pad id;
+	unsigned int dpd;
+	unsigned int voltage;
+	const char *name;
+};
+
+struct tegra_pmc_regs {
+	unsigned int scratch0;
+	unsigned int dpd_req;
+	unsigned int dpd_status;
+	unsigned int dpd2_req;
+	unsigned int dpd2_status;
+	unsigned int rst_status;
+	unsigned int rst_source_shift;
+	unsigned int rst_source_mask;
+	unsigned int rst_level_shift;
+	unsigned int rst_level_mask;
+};
+
+struct tegra_wake_event {
+	const char *name;
+	unsigned int id;
+	unsigned int irq;
+	struct {
+		unsigned int instance;
+		unsigned int pin;
+	} gpio;
+};
+
+struct tegra_pmc_soc {
+	unsigned int num_powergates;
+	const char * const *powergates;
+	unsigned int num_cpu_powergates;
+	const u8 *cpu_powergates;
+	bool has_tsense_reset;
+	bool has_gpu_clamps;
+	bool needs_mbist_war;
+	bool has_impl_33v_pwr;
+	bool maybe_tz_only;
+	const struct tegra_io_pad_soc *io_pads;
+	unsigned int num_io_pads;
+	const struct pinctrl_pin_desc *pin_descs;
+	unsigned int num_pin_descs;
+	const struct tegra_pmc_regs *regs;
+	void (*init)(struct tegra_pmc *);
+	void (*setup_irq_polarity)(struct tegra_pmc *, struct device_node *, bool);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*powergate_set)(struct tegra_pmc *, unsigned int, bool);
+	const char * const *reset_sources;
+	unsigned int num_reset_sources;
+	const char * const *reset_levels;
+	unsigned int num_reset_levels;
+	const struct tegra_wake_event *wake_events;
+	unsigned int num_wake_events;
+	const struct pmc_clk_init_data *pmc_clks_data;
+	unsigned int num_pmc_clks;
+	bool has_blink_output;
+	bool has_usb_sleepwalk;
+	bool supports_core_domain;
+};
+
+enum {
+	FAN53555_VSEL_ID_0 = 0,
+	FAN53555_VSEL_ID_1 = 1,
+};
+
+struct fan53555_platform_data {
+	struct regulator_init_data *regulator;
+	unsigned int slew_rate;
+	unsigned int sleep_vsel_id;
+};
+
+enum fan53555_vendor {
+	FAN53526_VENDOR_FAIRCHILD = 0,
+	FAN53555_VENDOR_FAIRCHILD = 1,
+	FAN53555_VENDOR_SILERGY = 2,
+	FAN53526_VENDOR_TCS = 3,
+};
+
+enum {
+	FAN53526_CHIP_ID_01 = 1,
+};
+
+enum {
+	FAN53526_CHIP_REV_08 = 8,
+};
+
+enum {
+	FAN53555_CHIP_ID_00 = 0,
+	FAN53555_CHIP_ID_01 = 1,
+	FAN53555_CHIP_ID_02 = 2,
+	FAN53555_CHIP_ID_03 = 3,
+	FAN53555_CHIP_ID_04 = 4,
+	FAN53555_CHIP_ID_05 = 5,
+	FAN53555_CHIP_ID_08 = 8,
+};
+
+enum {
+	TCS4525_CHIP_ID_12 = 12,
+};
+
+enum {
+	TCS4526_CHIP_ID_00 = 0,
+};
+
+enum {
+	FAN53555_CHIP_REV_00 = 3,
+	FAN53555_CHIP_REV_13 = 15,
+};
+
+enum {
+	SILERGY_SYR82X = 8,
+	SILERGY_SYR83X = 9,
+};
+
+struct fan53555_device_info {
+	enum fan53555_vendor vendor;
+	struct device *dev;
+	struct regulator_desc desc;
+	struct regulator_init_data *regulator;
+	int chip_id;
+	int chip_rev;
+	unsigned int vol_reg;
+	unsigned int sleep_reg;
+	unsigned int vsel_min;
+	unsigned int vsel_step;
+	unsigned int vsel_count;
+	unsigned int mode_reg;
+	unsigned int mode_mask;
+	unsigned int sleep_vol_cache;
+	unsigned int slew_reg;
+	unsigned int slew_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int slew_rate;
+};
+
+struct qcom_aoss_reset_map {
+	unsigned int reg;
+};
+
+struct qcom_aoss_desc {
+	const struct qcom_aoss_reset_map *resets;
+	size_t num_resets;
+};
+
+struct qcom_aoss_reset_data {
+	struct reset_controller_dev rcdev;
+	void *base;
+	const struct qcom_aoss_desc *desc;
+};
+
+struct serial_struct32 {
+	compat_int_t type;
+	compat_int_t line;
+	compat_uint_t port;
+	compat_int_t irq;
+	compat_int_t flags;
+	compat_int_t xmit_fifo_size;
+	compat_int_t custom_divisor;
+	compat_int_t baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char;
+	compat_int_t hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	compat_uint_t iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	compat_int_t reserved;
+};
+
+struct vt_notifier_param {
+	struct vc_data *vc;
+	unsigned int c;
+};
+
+struct vcs_poll_data {
+	struct notifier_block notifier;
+	unsigned int cons_num;
+	int event;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+};
+
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
+};
+
+struct dw8250_port_data {
+	int line;
+	struct uart_8250_dma dma;
+	u8 dlf_size;
+	bool hw_rs485_support;
+};
+
+struct dw8250_platform_data {
+	u8 usr_reg;
+	u32 cpr_val;
+	unsigned int quirks;
+};
+
+struct dw8250_data {
+	struct dw8250_port_data data;
+	const struct dw8250_platform_data *pdata;
+	int msr_mask_on;
+	int msr_mask_off;
+	struct clk *clk;
+	struct clk *pclk;
+	struct notifier_block clk_notifier;
+	struct work_struct clk_work;
+	struct reset_control *rst;
+	unsigned int skip_autocfg: 1;
+	unsigned int uart_16550_compatible: 1;
+};
+
+struct meson_uart_data {
+	bool has_xtal_div2;
+};
+
+enum lpuart_type {
+	VF610_LPUART = 0,
+	LS1021A_LPUART = 1,
+	LS1028A_LPUART = 2,
+	IMX7ULP_LPUART = 3,
+	IMX8QXP_LPUART = 4,
+	IMXRT1050_LPUART = 5,
+};
+
+struct lpuart_port {
+	struct uart_port port;
+	enum lpuart_type devtype;
+	struct clk *ipg_clk;
+	struct clk *baud_clk;
+	unsigned int txfifo_size;
+	unsigned int rxfifo_size;
+	bool lpuart_dma_tx_use;
+	bool lpuart_dma_rx_use;
+	struct dma_chan *dma_tx_chan;
+	struct dma_chan *dma_rx_chan;
+	struct dma_async_tx_descriptor *dma_tx_desc;
+	struct dma_async_tx_descriptor *dma_rx_desc;
+	dma_cookie_t dma_tx_cookie;
+	dma_cookie_t dma_rx_cookie;
+	unsigned int dma_tx_bytes;
+	unsigned int dma_rx_bytes;
+	bool dma_tx_in_progress;
+	unsigned int dma_rx_timeout;
+	struct timer_list lpuart_timer;
+	struct scatterlist rx_sgl;
+	struct scatterlist tx_sgl[2];
+	struct circ_buf rx_ring;
+	int rx_dma_rng_buf_len;
+	unsigned int dma_tx_nents;
+	wait_queue_head_t dma_wait;
+	bool is_cs7;
+};
+
+struct lpuart_soc_data {
+	enum lpuart_type devtype;
+	char iotype;
+	u8 reg_off;
+};
+
+struct stclear_flags_t {
+	__be16 tag;
+	u8 deactivated;
+	u8 disableForceClear;
+	u8 physicalPresence;
+	u8 physicalPresenceLock;
+	u8 bGlobalLock;
+} __attribute__((packed));
+
+struct tpm1_version {
+	u8 major;
+	u8 minor;
+	u8 rev_major;
+	u8 rev_minor;
+};
+
+struct tpm1_version2 {
+	__be16 tag;
+	struct tpm1_version version;
+};
+
+struct timeout_t {
+	__be32 a;
+	__be32 b;
+	__be32 c;
+	__be32 d;
+};
+
+struct duration_t {
+	__be32 tpm_short;
+	__be32 tpm_medium;
+	__be32 tpm_long;
+};
+
+struct permanent_flags_t {
+	__be16 tag;
+	u8 disable;
+	u8 ownership;
+	u8 deactivated;
+	u8 readPubek;
+	u8 disableOwnerClear;
+	u8 allowMaintenance;
+	u8 physicalPresenceLifetimeLock;
+	u8 physicalPresenceHWEnable;
+	u8 physicalPresenceCMDEnable;
+	u8 CEKPUsed;
+	u8 TPMpost;
+	u8 TPMpostLock;
+	u8 FIPS;
+	u8 operator;
+	u8 enableRevokeEK;
+	u8 nvLocked;
+	u8 readSRKPub;
+	u8 tpmEstablished;
+	u8 maintenanceDone;
+	u8 disableFullDALogicInfo;
+};
+
+typedef union {
+	struct permanent_flags_t perm_flags;
+	struct stclear_flags_t stclear_flags;
+	__u8 owned;
+	__be32 num_pcrs;
+	struct tpm1_version version1;
+	struct tpm1_version2 version2;
+	__be32 manufacturer_id;
+	struct timeout_t timeout;
+	struct duration_t duration;
+} cap_t;
+
+enum tpm_capabilities {
+	TPM_CAP_FLAG = 4,
+	TPM_CAP_PROP = 5,
+	TPM_CAP_VERSION_1_1 = 6,
+	TPM_CAP_VERSION_1_2 = 26,
+};
+
+enum tpm_sub_capabilities {
+	TPM_CAP_PROP_PCR = 257,
+	TPM_CAP_PROP_MANUFACTURER = 259,
+	TPM_CAP_FLAG_PERM = 264,
+	TPM_CAP_FLAG_VOL = 265,
+	TPM_CAP_PROP_OWNER = 273,
+	TPM_CAP_PROP_TIS_TIMEOUT = 277,
+	TPM_CAP_PROP_TIS_DURATION = 288,
+};
+
+struct tpm_readpubek_out {
+	u8 algorithm[4];
+	u8 encscheme[2];
+	u8 sigscheme[2];
+	__be32 paramsize;
+	u8 parameters[12];
+	__be32 keysize;
+	u8 modulus[256];
+	u8 checksum[20];
+};
+
+struct tpm_pcr_attr {
+	int alg_id;
+	int pcr;
+	struct device_attribute attr;
+};
+
+enum tis_access {
+	TPM_ACCESS_VALID = 128,
+	TPM_ACCESS_ACTIVE_LOCALITY = 32,
+	TPM_ACCESS_REQUEST_PENDING = 4,
+	TPM_ACCESS_REQUEST_USE = 2,
+};
+
+enum tis_status {
+	TPM_STS_VALID = 128,
+	TPM_STS_COMMAND_READY = 64,
+	TPM_STS_GO = 32,
+	TPM_STS_DATA_AVAIL = 16,
+	TPM_STS_DATA_EXPECT = 8,
+	TPM_STS_READ_ZERO = 35,
+};
+
+enum tis_int_flags {
+	TPM_GLOBAL_INT_ENABLE = 2147483648,
+	TPM_INTF_BURST_COUNT_STATIC = 256,
+	TPM_INTF_CMD_READY_INT = 128,
+	TPM_INTF_INT_EDGE_FALLING = 64,
+	TPM_INTF_INT_EDGE_RISING = 32,
+	TPM_INTF_INT_LEVEL_LOW = 16,
+	TPM_INTF_INT_LEVEL_HIGH = 8,
+	TPM_INTF_LOCALITY_CHANGE_INT = 4,
+	TPM_INTF_STS_VALID_INT = 2,
+	TPM_INTF_DATA_AVAIL_INT = 1,
+};
+
+enum tis_defaults {
+	TIS_MEM_LEN = 20480,
+	TIS_SHORT_TIMEOUT = 750,
+	TIS_LONG_TIMEOUT = 2000,
+	TIS_TIMEOUT_MIN_ATML = 14700,
+	TIS_TIMEOUT_MAX_ATML = 15000,
+};
+
+enum tpm_tis_flags {
+	TPM_TIS_ITPM_WORKAROUND = 1,
+	TPM_TIS_INVALID_STATUS = 2,
+};
+
+struct tpm_tis_phy_ops;
+
+struct tpm_tis_data {
+	u16 manufacturer_id;
+	int locality;
+	int irq;
+	bool irq_tested;
+	long unsigned int flags;
+	void *ilb_base_addr;
+	u16 clkrun_enabled;
+	wait_queue_head_t int_queue;
+	wait_queue_head_t read_queue;
+	const struct tpm_tis_phy_ops *phy_ops;
+	short unsigned int rng_quality;
+	unsigned int timeout_min;
+	unsigned int timeout_max;
+};
+
+enum tpm_tis_io_mode {
+	TPM_TIS_PHYS_8 = 0,
+	TPM_TIS_PHYS_16 = 1,
+	TPM_TIS_PHYS_32 = 2,
+};
+
+struct tpm_tis_phy_ops {
+	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *, enum tpm_tis_io_mode);
+	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *, enum tpm_tis_io_mode);
+	int (*verify_crc)(struct tpm_tis_data *, size_t, const u8 *);
+};
+
+struct tis_vendor_durations_override {
+	u32 did_vid;
+	struct tpm1_version version;
+	long unsigned int durations[3];
+};
+
+struct tis_vendor_timeout_override {
+	u32 did_vid;
+	long unsigned int timeout_us[4];
+};
+
+enum iommu_fault_reason {
+	IOMMU_FAULT_REASON_UNKNOWN = 0,
+	IOMMU_FAULT_REASON_PASID_FETCH = 1,
+	IOMMU_FAULT_REASON_BAD_PASID_ENTRY = 2,
+	IOMMU_FAULT_REASON_PASID_INVALID = 3,
+	IOMMU_FAULT_REASON_WALK_EABT = 4,
+	IOMMU_FAULT_REASON_PTE_FETCH = 5,
+	IOMMU_FAULT_REASON_PERMISSION = 6,
+	IOMMU_FAULT_REASON_ACCESS = 7,
+	IOMMU_FAULT_REASON_OOR_ADDRESS = 8,
+};
+
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
+enum pri_resp {
+	PRI_RESP_DENY = 0,
+	PRI_RESP_FAIL = 1,
+	PRI_RESP_SUCC = 2,
+};
+
+struct arm_smmu_cmdq_ent {
+	u8 opcode;
+	bool substream_valid;
+	union {
+		struct {
+			u32 sid;
+		} prefetch;
+		struct {
+			u32 sid;
+			u32 ssid;
+			union {
+				bool leaf;
+				u8 span;
+			};
+		} cfgi;
+		struct {
+			u8 num;
+			u8 scale;
+			u16 asid;
+			u16 vmid;
+			bool leaf;
+			u8 ttl;
+			u8 tg;
+			u64 addr;
+		} tlbi;
+		struct {
+			u32 sid;
+			u32 ssid;
+			u64 addr;
+			u8 size;
+			bool global;
+		} atc;
+		struct {
+			u32 sid;
+			u32 ssid;
+			u16 grpid;
+			enum pri_resp resp;
+		} pri;
+		struct {
+			u32 sid;
+			u16 stag;
+			u8 resp;
+		} resume;
+		struct {
+			u64 msiaddr;
+		} sync;
+	};
+};
+
+struct arm_smmu_ll_queue {
+	union {
+		u64 val;
+		struct {
+			u32 prod;
+			u32 cons;
+		};
+		struct {
+			atomic_t prod;
+			atomic_t cons;
+		} atomic;
+		u8 __pad[64];
+	};
+	u32 max_n_shift;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct arm_smmu_queue {
+	struct arm_smmu_ll_queue llq;
+	int irq;
+	__le64 *base;
+	dma_addr_t base_dma;
+	u64 q_base;
+	size_t ent_dwords;
+	u32 *prod_reg;
+	u32 *cons_reg;
+	long: 64;
+};
+
+struct arm_smmu_queue_poll {
+	ktime_t timeout;
+	unsigned int delay;
+	unsigned int spin_cnt;
+	bool wfe;
+};
+
+struct arm_smmu_cmdq {
+	struct arm_smmu_queue q;
+	atomic_long_t *valid_map;
+	atomic_t owner_prod;
+	atomic_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct arm_smmu_cmdq_batch {
+	u64 cmds[128];
+	int num;
+};
+
+struct iopf_queue;
+
+struct arm_smmu_evtq {
+	struct arm_smmu_queue q;
+	struct iopf_queue *iopf;
+	u32 max_stalls;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct arm_smmu_priq {
+	struct arm_smmu_queue q;
+};
+
+struct arm_smmu_strtab_l1_desc {
+	u8 span;
+	__le64 *l2ptr;
+	dma_addr_t l2ptr_dma;
+};
+
+struct arm_smmu_ctx_desc {
+	u16 asid;
+	u64 ttbr;
+	u64 tcr;
+	u64 mair;
+	refcount_t refs;
+	struct mm_struct *mm;
+};
+
+struct arm_smmu_l1_ctx_desc {
+	__le64 *l2ptr;
+	dma_addr_t l2ptr_dma;
+};
+
+struct arm_smmu_ctx_desc_cfg {
+	__le64 *cdtab;
+	dma_addr_t cdtab_dma;
+	struct arm_smmu_l1_ctx_desc *l1_desc;
+	unsigned int num_l1_ents;
+};
+
+struct arm_smmu_s1_cfg {
+	struct arm_smmu_ctx_desc_cfg cdcfg;
+	struct arm_smmu_ctx_desc cd;
+	u8 s1fmt;
+	u8 s1cdmax;
+};
+
+struct arm_smmu_s2_cfg {
+	u16 vmid;
+	u64 vttbr;
+	u64 vtcr;
+};
+
+struct arm_smmu_strtab_cfg {
+	__le64 *strtab;
+	dma_addr_t strtab_dma;
+	struct arm_smmu_strtab_l1_desc *l1_desc;
+	unsigned int num_l1_ents;
+	u64 strtab_base;
+	u32 strtab_base_cfg;
+};
+
+struct arm_smmu_device___2 {
+	struct device *dev;
+	void *base;
+	void *page1;
+	u32 features;
+	u32 options;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct arm_smmu_cmdq cmdq;
+	struct arm_smmu_evtq evtq;
+	struct arm_smmu_priq priq;
+	int gerr_irq;
+	int combined_irq;
+	long unsigned int ias;
+	long unsigned int oas;
+	long unsigned int pgsize_bitmap;
+	unsigned int asid_bits;
+	unsigned int vmid_bits;
+	long unsigned int vmid_map[1024];
+	unsigned int ssid_bits;
+	unsigned int sid_bits;
+	struct arm_smmu_strtab_cfg strtab_cfg;
+	struct iommu_device iommu;
+	struct rb_root streams;
+	struct mutex streams_mutex;
+	long: 64;
+	long: 64;
+};
+
+struct arm_smmu_master;
+
+struct arm_smmu_stream {
+	u32 id;
+	struct arm_smmu_master *master;
+	struct rb_node node;
+};
+
+struct arm_smmu_domain___2;
+
+struct arm_smmu_master {
+	struct arm_smmu_device___2 *smmu;
+	struct device *dev;
+	struct arm_smmu_domain___2 *domain;
+	struct list_head domain_head;
+	struct arm_smmu_stream *streams;
+	unsigned int num_streams;
+	bool ats_enabled;
+	bool stall_enabled;
+	bool sva_enabled;
+	bool iopf_enabled;
+	struct list_head bonds;
+	unsigned int ssid_bits;
+};
+
+struct arm_smmu_domain___2 {
+	struct arm_smmu_device___2 *smmu;
+	struct mutex init_mutex;
+	struct io_pgtable_ops *pgtbl_ops;
+	bool stall_enabled;
+	atomic_t nr_ats_masters;
+	enum arm_smmu_domain_stage stage;
+	union {
+		struct arm_smmu_s1_cfg s1_cfg;
+		struct arm_smmu_s2_cfg s2_cfg;
+	};
+	struct iommu_domain domain;
+	struct list_head devices;
+	spinlock_t devices_lock;
+	struct list_head mmu_notifiers;
+};
+
+enum arm_smmu_msi_index {
+	EVTQ_MSI_INDEX = 0,
+	GERROR_MSI_INDEX = 1,
+	PRIQ_MSI_INDEX = 2,
+	ARM_SMMU_MAX_MSIS = 3,
+};
+
+struct arm_smmu_option_prop {
+	u32 opt;
+	const char *prop;
+};
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+struct drm_prime_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+};
+
+struct drm_prime_member {
+	struct dma_buf *dma_buf;
+	uint32_t handle;
+	struct rb_node dmabuf_rb;
+	struct rb_node handle_rb;
+};
+
+struct drm_mode_get_encoder {
+	__u32 encoder_id;
+	__u32 encoder_type;
+	__u32 crtc_id;
+	__u32 possible_crtcs;
+	__u32 possible_clones;
+};
+
+struct drm_mode_map_dumb {
+	__u32 handle;
+	__u32 pad;
+	__u64 offset;
+};
+
+struct drm_mode_destroy_dumb {
+	__u32 handle;
+};
+
+struct drm_mode_atomic {
+	__u32 flags;
+	__u32 count_objs;
+	__u64 objs_ptr;
+	__u64 count_props_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u64 reserved;
+	__u64 user_data;
+};
+
+struct drm_out_fence_state {
+	s32 *out_fence_ptr;
+	struct sync_file *sync_file;
+	int fd;
+};
+
+struct panel_bridge {
+	struct drm_bridge bridge;
+	struct drm_connector connector;
+	struct drm_panel *panel;
+	u32 connector_type;
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+struct auxiliary_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct auxiliary_device {
+	struct device dev;
+	const char *name;
+	u32 id;
+};
+
+struct auxiliary_driver {
+	int (*probe)(struct auxiliary_device *, const struct auxiliary_device_id *);
+	void (*remove)(struct auxiliary_device *);
+	void (*shutdown)(struct auxiliary_device *);
+	int (*suspend)(struct auxiliary_device *, pm_message_t);
+	int (*resume)(struct auxiliary_device *);
+	const char *name;
+	struct device_driver driver;
+	const struct auxiliary_device_id *id_table;
+};
+
+enum suspend_stat_step {
+	SUSPEND_FREEZE = 1,
+	SUSPEND_PREPARE = 2,
+	SUSPEND_SUSPEND = 3,
+	SUSPEND_SUSPEND_LATE = 4,
+	SUSPEND_SUSPEND_NOIRQ = 5,
+	SUSPEND_RESUME_NOIRQ = 6,
+	SUSPEND_RESUME_EARLY = 7,
+	SUSPEND_RESUME = 8,
+};
+
+struct suspend_stats {
+	int success;
+	int fail;
+	int failed_freeze;
+	int failed_prepare;
+	int failed_suspend;
+	int failed_suspend_late;
+	int failed_suspend_noirq;
+	int failed_resume;
+	int failed_resume_early;
+	int failed_resume_noirq;
+	int last_failed_dev;
+	char failed_devs[80];
+	int last_failed_errno;
+	int errno[2];
+	int last_failed_step;
+	enum suspend_stat_step failed_steps[2];
+};
+
+typedef int (*pm_callback_t)(struct device *);
+
+enum {
+	BUCK_ILMIN_50MA = 0,
+	BUCK_ILMIN_100MA = 1,
+	BUCK_ILMIN_150MA = 2,
+	BUCK_ILMIN_200MA = 3,
+	BUCK_ILMIN_250MA = 4,
+	BUCK_ILMIN_300MA = 5,
+	BUCK_ILMIN_350MA = 6,
+	BUCK_ILMIN_400MA = 7,
+};
+
+enum {
+	BOOST_ILMIN_75MA = 0,
+	BOOST_ILMIN_100MA = 1,
+	BOOST_ILMIN_125MA = 2,
+	BOOST_ILMIN_150MA = 3,
+	BOOST_ILMIN_175MA = 4,
+	BOOST_ILMIN_200MA = 5,
+	BOOST_ILMIN_225MA = 6,
+	BOOST_ILMIN_250MA = 7,
+};
+
+enum {
+	RK805_BUCK1_2_ILMAX_2500MA = 0,
+	RK805_BUCK1_2_ILMAX_3000MA = 1,
+	RK805_BUCK1_2_ILMAX_3500MA = 2,
+	RK805_BUCK1_2_ILMAX_4000MA = 3,
+};
+
+enum {
+	RK805_BUCK3_ILMAX_1500MA = 0,
+	RK805_BUCK3_ILMAX_2000MA = 1,
+	RK805_BUCK3_ILMAX_2500MA = 2,
+	RK805_BUCK3_ILMAX_3000MA = 3,
+};
+
+enum {
+	RK805_BUCK4_ILMAX_2000MA = 0,
+	RK805_BUCK4_ILMAX_2500MA = 1,
+	RK805_BUCK4_ILMAX_3000MA = 2,
+	RK805_BUCK4_ILMAX_3500MA = 3,
+};
+
+struct rk808_reg_data {
+	int addr;
+	int mask;
+	int value;
+};
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct cma_heap {
+	struct dma_heap *heap;
+	struct cma *cma;
+};
+
+struct cma_heap_buffer {
+	struct cma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	long unsigned int len;
+	struct page *cma_pages;
+	struct page **pages;
+	long unsigned int pagecount;
+	int vmap_cnt;
+	void *vaddr;
+};
+
+struct dma_heap_attachment___2 {
+	struct device *dev;
+	struct sg_table table;
+	struct list_head list;
+	bool mapped;
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	ND_REGION_CXL = 4,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+enum {
+	CXL_MBOX_CMD_RC_SUCCESS = 0,
+	CXL_MBOX_CMD_RC_BACKGROUND = 1,
+	CXL_MBOX_CMD_RC_INPUT = 2,
+	CXL_MBOX_CMD_RC_UNSUPPORTED = 3,
+	CXL_MBOX_CMD_RC_INTERNAL = 4,
+	CXL_MBOX_CMD_RC_RETRY = 5,
+	CXL_MBOX_CMD_RC_BUSY = 6,
+	CXL_MBOX_CMD_RC_MEDIADISABLED = 7,
+	CXL_MBOX_CMD_RC_FWINPROGRESS = 8,
+	CXL_MBOX_CMD_RC_FWOOO = 9,
+	CXL_MBOX_CMD_RC_FWAUTH = 10,
+	CXL_MBOX_CMD_RC_FWSLOT = 11,
+	CXL_MBOX_CMD_RC_FWROLLBACK = 12,
+	CXL_MBOX_CMD_RC_FWRESET = 13,
+	CXL_MBOX_CMD_RC_HANDLE = 14,
+	CXL_MBOX_CMD_RC_PADDR = 15,
+	CXL_MBOX_CMD_RC_POISONLMT = 16,
+	CXL_MBOX_CMD_RC_MEDIAFAILURE = 17,
+	CXL_MBOX_CMD_RC_ABORT = 18,
+	CXL_MBOX_CMD_RC_SECURITY = 19,
+	CXL_MBOX_CMD_RC_PASSPHRASE = 20,
+	CXL_MBOX_CMD_RC_MBUNSUPPORTED = 21,
+	CXL_MBOX_CMD_RC_PAYLOADLEN = 22,
+};
+
+enum cxl_opcode {
+	CXL_MBOX_OP_INVALID = 0,
+	CXL_MBOX_OP_RAW = 0,
+	CXL_MBOX_OP_GET_FW_INFO = 512,
+	CXL_MBOX_OP_ACTIVATE_FW = 514,
+	CXL_MBOX_OP_GET_SUPPORTED_LOGS = 1024,
+	CXL_MBOX_OP_GET_LOG = 1025,
+	CXL_MBOX_OP_IDENTIFY = 16384,
+	CXL_MBOX_OP_GET_PARTITION_INFO = 16640,
+	CXL_MBOX_OP_SET_PARTITION_INFO = 16641,
+	CXL_MBOX_OP_GET_LSA = 16642,
+	CXL_MBOX_OP_SET_LSA = 16643,
+	CXL_MBOX_OP_GET_HEALTH_INFO = 16896,
+	CXL_MBOX_OP_GET_ALERT_CONFIG = 16897,
+	CXL_MBOX_OP_SET_ALERT_CONFIG = 16898,
+	CXL_MBOX_OP_GET_SHUTDOWN_STATE = 16899,
+	CXL_MBOX_OP_SET_SHUTDOWN_STATE = 16900,
+	CXL_MBOX_OP_GET_POISON = 17152,
+	CXL_MBOX_OP_INJECT_POISON = 17153,
+	CXL_MBOX_OP_CLEAR_POISON = 17154,
+	CXL_MBOX_OP_GET_SCAN_MEDIA_CAPS = 17155,
+	CXL_MBOX_OP_SCAN_MEDIA = 17156,
+	CXL_MBOX_OP_GET_SCAN_MEDIA = 17157,
+	CXL_MBOX_OP_MAX = 65536,
+};
+
+struct cxl_gsl_entry {
+	uuid_t uuid;
+	__le32 size;
+};
+
+struct cxl_mbox_get_supported_logs {
+	__le16 entries;
+	u8 rsvd[6];
+	struct cxl_gsl_entry entry[0];
+};
+
+struct cxl_cel_entry {
+	__le16 opcode;
+	__le16 effect;
+};
+
+struct cxl_mbox_get_log {
+	uuid_t uuid;
+	__le32 offset;
+	__le32 length;
+};
+
+struct cxl_mbox_identify {
+	char fw_revision[16];
+	__le64 total_capacity;
+	__le64 volatile_capacity;
+	__le64 persistent_capacity;
+	__le64 partition_align;
+	__le16 info_event_log_size;
+	__le16 warning_event_log_size;
+	__le16 failure_event_log_size;
+	__le16 fatal_event_log_size;
+	__le32 lsa_size;
+	u8 poison_list_max_mer[3];
+	__le16 inject_poison_limit;
+	u8 poison_caps;
+	u8 qos_telemetry_caps;
+} __attribute__((packed));
+
+struct cxl_mbox_get_partition_info {
+	__le64 active_volatile_cap;
+	__le64 active_persistent_cap;
+	__le64 next_volatile_cap;
+	__le64 next_persistent_cap;
+};
+
+struct cxl_mbox_set_partition_info {
+	__le64 volatile_capacity;
+	u8 flags;
+} __attribute__((packed));
+
+struct cxl_mem_command {
+	struct cxl_command_info info;
+	enum cxl_opcode opcode;
+	u32 flags;
+};
+
+enum {
+	CEL_UUID = 0,
+	VENDOR_DEBUG_UUID = 1,
+};
+
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
+	void *priv;
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct double_list {
+	struct list_head *top;
+	struct list_head *bottom;
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, fmode_t, unsigned int);
+
+enum ata_xfer_mask {
+	ATA_MASK_PIO = 127,
+	ATA_MASK_MWDMA = 3968,
+	ATA_MASK_UDMA = 1044480,
+};
+
+struct ata_timing {
+	short unsigned int mode;
+	short unsigned int setup;
+	short unsigned int act8b;
+	short unsigned int rec8b;
+	short unsigned int cyc8b;
+	short unsigned int active;
+	short unsigned int recover;
+	short unsigned int dmack_hold;
+	short unsigned int cycle;
+	short unsigned int udma;
+};
+
+struct trace_event_raw_ata_qc_issue_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	unsigned char proto;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_qc_complete_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char status;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char error;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_tf_load {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_exec_command_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char feature;
+	unsigned char hob_nsect;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_bmdma_status {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char host_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy_qc {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_action_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	long unsigned int deadline;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_end_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	int rc;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_port_eh_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_hsm_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int protocol;
+	unsigned int hsm_state;
+	unsigned char dev_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_transfer_data_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int flags;
+	unsigned int offset;
+	unsigned int bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char hsm_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ata_qc_issue_template {};
+
+struct trace_event_data_offsets_ata_qc_complete_template {};
+
+struct trace_event_data_offsets_ata_tf_load {};
+
+struct trace_event_data_offsets_ata_exec_command_template {};
+
+struct trace_event_data_offsets_ata_bmdma_status {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
+
+struct trace_event_data_offsets_ata_eh_action_template {};
+
+struct trace_event_data_offsets_ata_link_reset_begin_template {};
+
+struct trace_event_data_offsets_ata_link_reset_end_template {};
+
+struct trace_event_data_offsets_ata_port_eh_begin_template {};
+
+struct trace_event_data_offsets_ata_sff_hsm_template {};
+
+struct trace_event_data_offsets_ata_transfer_data_template {};
+
+struct trace_event_data_offsets_ata_sff_template {};
+
+typedef void (*btf_trace_ata_qc_prep)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_tf_load)(void *, struct ata_port *, const struct ata_taskfile *);
+
+typedef void (*btf_trace_ata_exec_command)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_setup)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_start)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_stop)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_status)(void *, struct ata_port *, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_eh_about_to_do)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_done)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_slave_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_softreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_softreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_std_sched_eh)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_freeze)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_thaw)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_sff_hsm_state)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_hsm_command_complete)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_port_intr)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_send_cdb)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_sff_flush_pio_task)(void *, struct ata_port *);
+
+struct ata_force_param {
+	const char *name;
+	u8 cbl;
+	u8 spd_limit;
+	unsigned int xfer_mask;
+	unsigned int horkage_on;
+	unsigned int horkage_off;
+	u16 lflags_on;
+	u16 lflags_off;
+};
+
+struct ata_force_ent {
+	int port;
+	int device;
+	struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+	int shift;
+	int bits;
+	u8 base;
+};
+
+struct ata_blacklist_entry {
+	const char *model_num;
+	const char *model_rev;
+	long unsigned int horkage;
+};
+
+typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
+
+struct spi_res {
+	struct list_head entry;
+	spi_res_release_t release;
+	long long unsigned int data[0];
+};
+
+struct spi_replaced_transfers;
+
+typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
+
+struct spi_replaced_transfers {
+	spi_replaced_release_t release;
+	void *extradata;
+	struct list_head replaced_transfers;
+	struct list_head *replaced_after;
+	size_t inserted;
+	struct spi_transfer inserted_transfers[0];
+};
+
+struct spi_board_info {
+	char modalias[32];
+	const void *platform_data;
+	const struct software_node *swnode;
+	void *controller_data;
+	int irq;
+	u32 max_speed_hz;
+	u16 bus_num;
+	u16 chip_select;
+	u32 mode;
+};
+
+enum spi_mem_data_dir {
+	SPI_MEM_NO_DATA = 0,
+	SPI_MEM_DATA_IN = 1,
+	SPI_MEM_DATA_OUT = 2,
+};
+
+struct spi_mem_op {
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u16 opcode;
+	} cmd;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u64 val;
+	} addr;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+	} dummy;
+	struct {
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 ecc: 1;
+		enum spi_mem_data_dir dir;
+		unsigned int nbytes;
+		union {
+			void *in;
+			const void *out;
+		} buf;
+	} data;
+};
+
+struct spi_mem_dirmap_info {
+	struct spi_mem_op op_tmpl;
+	u64 offset;
+	u64 length;
+};
+
+struct spi_mem_dirmap_desc {
+	struct spi_mem *mem;
+	struct spi_mem_dirmap_info info;
+	unsigned int nodirmap;
+	void *priv;
+};
+
+struct spi_mem {
+	struct spi_device *spi;
+	void *drvpriv;
+	const char *name;
+};
+
+struct trace_event_raw_spi_controller {
+	struct trace_entry ent;
+	int bus_num;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	bool enable;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message_done {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	unsigned int frame;
+	unsigned int actual;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_transfer {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_transfer *xfer;
+	int len;
+	u32 __data_loc_rx_buf;
+	u32 __data_loc_tx_buf;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_spi_controller {};
+
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
+struct trace_event_data_offsets_spi_message {};
+
+struct trace_event_data_offsets_spi_message_done {};
+
+struct trace_event_data_offsets_spi_transfer {
+	u32 rx_buf;
+	u32 tx_buf;
+};
+
+typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
+typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
+
+typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
+
+struct boardinfo {
+	struct list_head list;
+	struct spi_board_info board_info;
+};
+
+struct acpi_spi_lookup {
+	struct spi_controller *ctlr;
+	u32 max_speed_hz;
+	u32 mode;
+	int irq;
+	u8 bits_per_word;
+	u8 chip_select;
+	int n;
+	int index;
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+struct onboard_hub_pdata {
+	long unsigned int reset_us;
+};
+
+struct pdev_list_entry {
+	struct platform_device *pdev;
+	struct list_head node;
+};
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	long unsigned int flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+};
+
+struct mousedev_hw_data {
+	int dx;
+	int dy;
+	int dz;
+	int x;
+	int y;
+	int abs_event;
+	long unsigned int buttons;
+};
+
+struct mousedev {
+	int open;
+	struct input_handle handle;
+	wait_queue_head_t wait;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+	struct list_head mixdev_node;
+	bool opened_by_mixdev;
+	struct mousedev_hw_data packet;
+	unsigned int pkt_count;
+	int old_x[4];
+	int old_y[4];
+	int frac_dx;
+	int frac_dy;
+	long unsigned int touch;
+	int (*open_device)(struct mousedev *);
+	void (*close_device)(struct mousedev *);
+};
+
+enum mousedev_emul {
+	MOUSEDEV_EMUL_PS2 = 0,
+	MOUSEDEV_EMUL_IMPS = 1,
+	MOUSEDEV_EMUL_EXPS = 2,
+};
+
+struct mousedev_motion {
+	int dx;
+	int dy;
+	int dz;
+	long unsigned int buttons;
+};
+
+struct mousedev_client {
+	struct fasync_struct *fasync;
+	struct mousedev *mousedev;
+	struct list_head node;
+	struct mousedev_motion packets[16];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t packet_lock;
+	int pos_x;
+	int pos_y;
+	u8 ps2[6];
+	unsigned char ready;
+	unsigned char buffer;
+	unsigned char bufsiz;
+	unsigned char imexseq;
+	unsigned char impsseq;
+	enum mousedev_emul mode;
+	long unsigned int last_buttons;
+};
+
+enum {
+	FRACTION_DENOM = 128,
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_result {};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct class_compat;
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct rc_map_list {
+	struct list_head list;
+	struct rc_map map;
+};
+
+enum rc_filter_type {
+	RC_FILTER_NORMAL = 0,
+	RC_FILTER_WAKEUP = 1,
+	RC_FILTER_MAX = 2,
+};
+
+struct rc_filter_attribute {
+	struct device_attribute attr;
+	enum rc_filter_type type;
+	bool mask;
+};
+
+struct as3722_poweroff {
+	struct device *dev;
+	struct as3722 *as3722;
+};
+
+struct xgene_reboot_context {
+	struct device *dev;
+	void *csr;
+	u32 mask;
+	struct notifier_block restart_handler;
+};
+
+struct thermal_instance {
+	int id;
+	char name[20];
+	struct thermal_zone_device *tz;
+	struct thermal_cooling_device *cdev;
+	int trip;
+	bool initialized;
+	long unsigned int upper;
+	long unsigned int lower;
+	long unsigned int target;
+	char attr_name[20];
+	struct device_attribute attr;
+	char weight_attr_name[20];
+	struct device_attribute weight_attr;
+	struct list_head tz_node;
+	struct list_head cdev_node;
+	unsigned int weight;
+};
+
+struct mdu_array_info_s {
+	int major_version;
+	int minor_version;
+	int patch_version;
+	unsigned int ctime;
+	int level;
+	int size;
+	int nr_disks;
+	int raid_disks;
+	int md_minor;
+	int not_persistent;
+	unsigned int utime;
+	int state;
+	int active_disks;
+	int working_disks;
+	int failed_disks;
+	int spare_disks;
+	int layout;
+	int chunk_size;
+};
+
+struct mdu_disk_info_s {
+	int number;
+	int major;
+	int minor;
+	int raid_disk;
+	int state;
+};
+
+struct md_setup_args {
+	int minor;
+	int partitioned;
+	int level;
+	int chunk;
+	char *device_names;
+};
+
+struct dm_crypto_profile {
+	struct blk_crypto_profile profile;
+	struct mapped_device *md;
+};
+
+struct dm_keyslot_evict_args {
+	const struct blk_crypto_key *key;
+	int err;
+};
+
+enum suspend_mode {
+	PRESUSPEND = 0,
+	PRESUSPEND_UNDO = 1,
+	POSTSUSPEND = 2,
+};
+
+struct dm_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct mapped_device *, char *);
+	ssize_t (*store)(struct mapped_device *, const char *, size_t);
+};
+
+struct instance_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
+	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
+};
+
+struct edac_pci_dev_attribute {
+	struct attribute attr;
+	void *value;
+	ssize_t (*show)(void *, char *);
+	ssize_t (*store)(void *, const char *, size_t);
+};
+
+typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
+
+enum {
+	OD_NORMAL_SAMPLE = 0,
+	OD_SUB_SAMPLE = 1,
+};
+
+struct dbs_governor;
+
+struct dbs_data {
+	struct gov_attr_set attr_set;
+	struct dbs_governor *gov;
+	void *tuners;
+	unsigned int ignore_nice_load;
+	unsigned int sampling_rate;
+	unsigned int sampling_down_factor;
+	unsigned int up_threshold;
+	unsigned int io_is_busy;
+};
+
+struct policy_dbs_info;
+
+struct dbs_governor {
+	struct cpufreq_governor gov;
+	struct kobj_type kobj_type;
+	struct dbs_data *gdbs_data;
+	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
+	struct policy_dbs_info * (*alloc)();
+	void (*free)(struct policy_dbs_info *);
+	int (*init)(struct dbs_data *);
+	void (*exit)(struct dbs_data *);
+	void (*start)(struct cpufreq_policy *);
+};
+
+struct policy_dbs_info {
+	struct cpufreq_policy *policy;
+	struct mutex update_mutex;
+	u64 last_sample_time;
+	s64 sample_delay_ns;
+	atomic_t work_count;
+	struct irq_work irq_work;
+	struct work_struct work;
+	struct dbs_data *dbs_data;
+	struct list_head list;
+	unsigned int rate_mult;
+	unsigned int idle_periods;
+	bool is_shared;
+	bool work_in_progress;
+};
+
+struct od_ops {
+	unsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);
+};
+
+struct od_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int freq_lo;
+	unsigned int freq_lo_delay_us;
+	unsigned int freq_hi_delay_us;
+	unsigned int sample_type: 1;
+};
+
+struct od_dbs_tuners {
+	unsigned int powersave_bias;
+};
+
+struct mmc_clk_phase {
+	bool valid;
+	u16 in_deg;
+	u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+	struct mmc_clk_phase phase[11];
+};
+
+struct sdio_device_id {
+	__u8 class;
+	__u16 vendor;
+	__u16 device;
+	kernel_ulong_t driver_data;
+};
+
+struct sdio_driver {
+	char *name;
+	const struct sdio_device_id *id_table;
+	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
+	void (*remove)(struct sdio_func *);
+	struct device_driver drv;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+struct dmi_device_attribute {
+	struct device_attribute dev_attr;
+	int field;
+};
+
+struct mafield {
+	const char *prefix;
+	int field;
+};
+
+struct simplefb_format {
+	const char *name;
+	u32 bits_per_pixel;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	u32 fourcc;
+};
+
+struct scmi_power_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const char * (*name_get)(const struct scmi_protocol_handle *, u32);
+	int (*state_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*state_get)(const struct scmi_protocol_handle *, u32, u32 *);
+};
+
+struct scmi_power_state_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power_state;
+};
+
+enum scmi_power_protocol_cmd {
+	POWER_DOMAIN_ATTRIBUTES = 3,
+	POWER_STATE_SET = 4,
+	POWER_STATE_GET = 5,
+	POWER_STATE_NOTIFY = 6,
+	POWER_DOMAIN_NAME_GET = 8,
+};
+
+struct scmi_msg_resp_power_attributes {
+	__le16 num_domains;
+	__le16 reserved;
+	__le32 stats_addr_low;
+	__le32 stats_addr_high;
+	__le32 stats_size;
+};
+
+struct scmi_msg_resp_power_domain_attributes {
+	__le32 flags;
+	u8 name[16];
+};
+
+struct scmi_power_set_state {
+	__le32 flags;
+	__le32 domain;
+	__le32 state;
+};
+
+struct scmi_power_state_notify {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_power_state_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power_state;
+};
+
+struct power_dom_info {
+	bool state_set_sync;
+	bool state_set_async;
+	bool state_set_notify;
+	char name[64];
+};
+
+struct scmi_power_info {
+	u32 version;
+	int num_domains;
+	u64 stats_addr;
+	u32 stats_size;
+	struct power_dom_info *dom_info;
+};
+
+struct scmi_vio_channel {
+	struct virtqueue *vqueue;
+	struct scmi_chan_info *cinfo;
+	spinlock_t free_lock;
+	struct list_head free_list;
+	spinlock_t pending_lock;
+	struct list_head pending_cmds_list;
+	struct work_struct deferred_tx_work;
+	struct workqueue_struct *deferred_tx_wq;
+	bool is_rx;
+	unsigned int max_msg;
+	spinlock_t lock;
+	struct completion *shutdown_done;
+	refcount_t users;
+};
+
+enum poll_states {
+	VIO_MSG_NOT_POLLED = 0,
+	VIO_MSG_POLL_TIMEOUT = 1,
+	VIO_MSG_POLLING = 2,
+	VIO_MSG_POLL_DONE = 3,
+};
+
+struct scmi_msg_payld;
+
+struct scmi_vio_msg {
+	struct scmi_msg_payld *request;
+	struct scmi_msg_payld *input;
+	struct list_head list;
+	unsigned int rx_len;
+	unsigned int poll_idx;
+	enum poll_states poll_status;
+	spinlock_t poll_lock;
+	refcount_t users;
+};
+
+struct ms_hyperv_info {
+	u32 features;
+	u32 priv_high;
+	u32 misc_features;
+	u32 hints;
+	u32 nested_features;
+	u32 max_vp_index;
+	u32 max_lp_index;
+	u32 isolation_config_a;
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type: 4;
+			u32 reserved1: 1;
+			u32 shared_gpa_boundary_active: 1;
+			u32 shared_gpa_boundary_bits: 6;
+			u32 reserved2: 20;
+		};
+	};
+	u64 shared_gpa_boundary;
+};
+
+struct dtpm_cpu {
+	struct dtpm dtpm;
+	struct freq_qos_request qos_req;
+	int cpu;
+};
+
+struct cluster_pmu;
+
+struct l2cache_pmu {
+	struct hlist_node node;
+	u32 num_pmus;
+	struct pmu pmu;
+	int num_counters;
+	cpumask_t cpumask;
+	struct platform_device *pdev;
+	struct cluster_pmu **pmu_cluster;
+	struct list_head clusters;
+};
+
+struct cluster_pmu {
+	struct list_head next;
+	struct perf_event *events[9];
+	struct l2cache_pmu *l2cache_pmu;
+	long unsigned int used_counters[1];
+	long unsigned int used_groups[1];
+	int irq;
+	int cluster_id;
+	int on_cpu;
+	cpumask_t cluster_cpus;
+	spinlock_t pmu_lock;
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char *ifcu_buf;
+		struct ifreq *ifcu_req;
+	} ifc_ifcu;
+};
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_if_settings {
+	unsigned int type;
+	unsigned int size;
+	compat_uptr_t ifs_ifsu;
+};
+
+struct compat_ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short int ifru_flags;
+		compat_int_t ifru_ivalue;
+		compat_int_t ifru_mtu;
+		struct compat_ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		compat_caddr_t ifru_data;
+		struct compat_if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct net_bridge;
+
+struct used_address {
+	struct __kernel_sockaddr_storage name;
+	unsigned int name_len;
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
+};
+
+struct ifbond {
+	__s32 bond_mode;
+	__s32 num_slaves;
+	__s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct ifslave {
+	__s32 slave_id;
+	char slave_name[16];
+	__s8 link;
+	__s8 state;
+	__u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+enum {
+	NAPIF_STATE_SCHED = 1,
+	NAPIF_STATE_MISSED = 2,
+	NAPIF_STATE_DISABLE = 4,
+	NAPIF_STATE_NPSVC = 8,
+	NAPIF_STATE_LISTED = 16,
+	NAPIF_STATE_NO_BUSY_POLL = 32,
+	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
+};
+
+struct bpf_xdp_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	int flags;
+};
+
+struct netdev_net_notifier {
+	struct list_head list;
+	struct notifier_block *nb;
+};
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changelowerstate_info {
+	struct netdev_notifier_info info;
+	void *lower_state_info;
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+	struct netdev_notifier_info info;
+	const unsigned char *dev_addr;
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
+
+enum {
+	NESTED_SYNC_IMM_BIT = 0,
+	NESTED_SYNC_TODO_BIT = 1,
+};
+
+struct netdev_nested_priv {
+	unsigned char flags;
+	void *data;
+};
+
+struct netdev_bonding_info {
+	ifslave slave;
+	ifbond master;
+};
+
+struct netdev_notifier_bonding_info {
+	struct netdev_notifier_info info;
+	struct netdev_bonding_info bonding_info;
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct dev_kfree_skb_cb {
+	enum skb_free_reason reason;
+};
+
+struct netdev_adjacent {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	bool master;
+	bool ignore;
+	u16 ref_nr;
+	void *private;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct update_classid_context {
+	u32 classid;
+	unsigned int batch;
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	raw_spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	raw_spinlock_t lock;
+};
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 32;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+enum {
+	TCA_FQ_CODEL_UNSPEC = 0,
+	TCA_FQ_CODEL_TARGET = 1,
+	TCA_FQ_CODEL_LIMIT = 2,
+	TCA_FQ_CODEL_INTERVAL = 3,
+	TCA_FQ_CODEL_ECN = 4,
+	TCA_FQ_CODEL_FLOWS = 5,
+	TCA_FQ_CODEL_QUANTUM = 6,
+	TCA_FQ_CODEL_CE_THRESHOLD = 7,
+	TCA_FQ_CODEL_DROP_BATCH_SIZE = 8,
+	TCA_FQ_CODEL_MEMORY_LIMIT = 9,
+	TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR = 10,
+	TCA_FQ_CODEL_CE_THRESHOLD_MASK = 11,
+	__TCA_FQ_CODEL_MAX = 12,
+};
+
+enum {
+	TCA_FQ_CODEL_XSTATS_QDISC = 0,
+	TCA_FQ_CODEL_XSTATS_CLASS = 1,
+};
+
+struct tc_fq_codel_qd_stats {
+	__u32 maxpacket;
+	__u32 drop_overlimit;
+	__u32 ecn_mark;
+	__u32 new_flow_count;
+	__u32 new_flows_len;
+	__u32 old_flows_len;
+	__u32 ce_mark;
+	__u32 memory_usage;
+	__u32 drop_overmemory;
+};
+
+struct tc_fq_codel_cl_stats {
+	__s32 deficit;
+	__u32 ldelay;
+	__u32 count;
+	__u32 lastcount;
+	__u32 dropping;
+	__s32 drop_next;
+};
+
+struct tc_fq_codel_xstats {
+	__u32 type;
+	union {
+		struct tc_fq_codel_qd_stats qdisc_stats;
+		struct tc_fq_codel_cl_stats class_stats;
+	};
+};
+
+typedef u32 codel_time_t;
+
+typedef s32 codel_tdiff_t;
+
+struct codel_params {
+	codel_time_t target;
+	codel_time_t ce_threshold;
+	codel_time_t interval;
+	u32 mtu;
+	bool ecn;
+	u8 ce_threshold_selector;
+	u8 ce_threshold_mask;
+};
+
+struct codel_vars {
+	u32 count;
+	u32 lastcount;
+	bool dropping;
+	u16 rec_inv_sqrt;
+	codel_time_t first_above_time;
+	codel_time_t drop_next;
+	codel_time_t ldelay;
+};
+
+struct codel_stats {
+	u32 maxpacket;
+	u32 drop_count;
+	u32 drop_len;
+	u32 ecn_mark;
+	u32 ce_mark;
+};
+
+typedef u32 (*codel_skb_len_t)(const struct sk_buff *);
+
+typedef codel_time_t (*codel_skb_time_t)(const struct sk_buff *);
+
+typedef void (*codel_skb_drop_t)(struct sk_buff *, void *);
+
+typedef struct sk_buff * (*codel_skb_dequeue_t)(struct codel_vars *, void *);
+
+struct codel_skb_cb {
+	codel_time_t enqueue_time;
+	unsigned int mem_usage;
+};
+
+struct fq_codel_flow {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct list_head flowchain;
+	int deficit;
+	struct codel_vars cvars;
+};
+
+struct fq_codel_sched_data {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct fq_codel_flow *flows;
+	u32 *backlogs;
+	u32 flows_cnt;
+	u32 quantum;
+	u32 drop_batch_size;
+	u32 memory_limit;
+	struct codel_params cparams;
+	struct codel_stats cstats;
+	u32 memory_usage;
+	u32 drop_overmemory;
+	u32 drop_overlimit;
+	u32 new_flow_count;
+	struct list_head new_flows;
+	struct list_head old_flows;
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	int pos_hash;
+	int pos_idx;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
+};
+
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+struct nf_hook_entries_rcu_head {
+	struct callback_head head;
+	void *allocation;
+};
+
+struct nf_conn;
+
+enum nf_nat_manip_type;
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+};
+
+struct nf_conntrack_tuple;
+
+struct nf_ct_hook {
+	int (*update)(struct net *, struct sk_buff *);
+	void (*destroy)(struct nf_conntrack *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
+};
+
+struct nfnl_ct_hook {
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
+};
+
+struct tcp4_pseudohdr {
+	__be32 saddr;
+	__be32 daddr;
+	__u8 pad;
+	__u8 protocol;
+	__be16 len;
+};
+
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__tcp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct sock_common *sk_common;
+	};
+	uid_t uid;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	union {
+		struct {
+			__be32 imsf_multiaddr_aux;
+			__be32 imsf_interface_aux;
+			__u32 imsf_fmode_aux;
+			__u32 imsf_numsrc_aux;
+			__be32 imsf_slist[1];
+		};
+		struct {
+			__be32 imsf_multiaddr;
+			__be32 imsf_interface;
+			__u32 imsf_fmode;
+			__u32 imsf_numsrc;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+struct rta_mfc_stats {
+	__u64 mfcs_packets;
+	__u64 mfcs_bytes;
+	__u64 mfcs_wrong_if;
+};
+
+struct bictcp {
+	u32 cnt;
+	u32 last_max_cwnd;
+	u32 last_cwnd;
+	u32 last_time;
+	u32 bic_origin_point;
+	u32 bic_K;
+	u32 delay_min;
+	u32 epoch_start;
+	u32 ack_cnt;
+	u32 tcp_cwnd;
+	u16 unused;
+	u8 sample_cnt;
+	u8 found;
+	u32 round_start;
+	u32 end_seq;
+	u32 last_ack;
+	u32 curr_rtt;
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol *next;
+	int priority;
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 secid;
+	u32 consumed;
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+};
+
+struct compat_in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	u32 rtmsg_type;
+	u16 rtmsg_dst_len;
+	u16 rtmsg_src_len;
+	u32 rtmsg_metric;
+	u32 rtmsg_info;
+	u32 rtmsg_flags;
+	s32 rtmsg_ifindex;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	short unsigned int nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	short unsigned int nduseropt_pad2;
+	unsigned int nduseropt_pad3;
+};
+
+enum {
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+enum {
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
+};
+
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
+};
+
+struct xfrm6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_protocol *next;
+	int priority;
+};
+
+enum {
+	SEG6_IPTUNNEL_UNSPEC = 0,
+	SEG6_IPTUNNEL_SRH = 1,
+	__SEG6_IPTUNNEL_MAX = 2,
+};
+
+struct seg6_iptunnel_encap {
+	int mode;
+	struct ipv6_sr_hdr srh[0];
+};
+
+enum {
+	SEG6_IPTUN_MODE_INLINE = 0,
+	SEG6_IPTUN_MODE_ENCAP = 1,
+	SEG6_IPTUN_MODE_L2ENCAP = 2,
+	SEG6_IPTUN_MODE_ENCAP_RED = 3,
+	SEG6_IPTUN_MODE_L2ENCAP_RED = 4,
+};
+
+struct seg6_lwt {
+	struct dst_cache cache;
+	struct seg6_iptunnel_encap tuninfo[0];
+};
+
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+struct packet_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 pdiag_ino;
+	__u32 pdiag_show;
+	__u32 pdiag_cookie[2];
+};
+
+struct packet_diag_msg {
+	__u8 pdiag_family;
+	__u8 pdiag_type;
+	__u16 pdiag_num;
+	__u32 pdiag_ino;
+	__u32 pdiag_cookie[2];
+};
+
+enum {
+	PACKET_DIAG_INFO = 0,
+	PACKET_DIAG_MCLIST = 1,
+	PACKET_DIAG_RX_RING = 2,
+	PACKET_DIAG_TX_RING = 3,
+	PACKET_DIAG_FANOUT = 4,
+	PACKET_DIAG_UID = 5,
+	PACKET_DIAG_MEMINFO = 6,
+	PACKET_DIAG_FILTER = 7,
+	__PACKET_DIAG_MAX = 8,
+};
+
+struct packet_diag_info {
+	__u32 pdi_index;
+	__u32 pdi_version;
+	__u32 pdi_reserve;
+	__u32 pdi_copy_thresh;
+	__u32 pdi_tstamp;
+	__u32 pdi_flags;
+};
+
+struct packet_diag_mclist {
+	__u32 pdmc_index;
+	__u32 pdmc_count;
+	__u16 pdmc_type;
+	__u16 pdmc_alen;
+	__u8 pdmc_addr[32];
+};
+
+struct packet_diag_ring {
+	__u32 pdr_block_size;
+	__u32 pdr_block_nr;
+	__u32 pdr_frame_size;
+	__u32 pdr_frame_nr;
+	__u32 pdr_retire_tmo;
+	__u32 pdr_sizeof_priv;
+	__u32 pdr_features;
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	short unsigned int type;
+	short unsigned int alen;
+	unsigned char addr[32];
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	short unsigned int kactive_blk_num;
+	short unsigned int blk_sizeof_priv;
+	short unsigned int last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	short unsigned int retire_blk_tov;
+	short unsigned int version;
+	long unsigned int tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int *pending_refcnt;
+	union {
+		long unsigned int *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned int running;
+	unsigned int auxdata: 1;
+	unsigned int origdev: 1;
+	unsigned int has_vnet_hdr: 1;
+	unsigned int tp_loss: 1;
+	unsigned int tp_tx_has_off: 1;
+	int pressure;
+	int ifindex;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device *cached_dev;
+	int (*xmit)(struct sk_buff *);
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum switchdev_attr_id {
+	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
+	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
+	SWITCHDEV_ATTR_ID_PORT_MST_STATE = 2,
+	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 3,
+	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 4,
+	SWITCHDEV_ATTR_ID_PORT_MROUTER = 5,
+	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 6,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 7,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 8,
+	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 9,
+	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 10,
+	SWITCHDEV_ATTR_ID_BRIDGE_MST = 11,
+	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 12,
+	SWITCHDEV_ATTR_ID_VLAN_MSTI = 13,
+};
+
+struct switchdev_attr {
+	struct net_device *orig_dev;
+	enum switchdev_attr_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+	union {
+		u8 stp_state;
+		struct switchdev_mst_state mst_state;
+		struct switchdev_brport_flags brport_flags;
+		bool mrouter;
+		clock_t ageing_time;
+		bool vlan_filtering;
+		u16 vlan_protocol;
+		bool mst;
+		bool mc_disabled;
+		u8 mrp_port_role;
+		struct switchdev_vlan_msti vlan_msti;
+	} u;
+};
+
+struct switchdev_brport {
+	struct net_device *dev;
+	const void *ctx;
+	struct notifier_block *atomic_nb;
+	struct notifier_block *blocking_nb;
+	bool tx_fwd_offload;
+};
+
+enum switchdev_notifier_type {
+	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
+	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
+	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
+	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
+	SWITCHDEV_FDB_OFFLOADED = 5,
+	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
+	SWITCHDEV_PORT_OBJ_ADD = 7,
+	SWITCHDEV_PORT_OBJ_DEL = 8,
+	SWITCHDEV_PORT_ATTR_SET = 9,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
+	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
+	SWITCHDEV_BRPORT_OFFLOADED = 15,
+	SWITCHDEV_BRPORT_UNOFFLOADED = 16,
+};
+
+struct switchdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+	const void *ctx;
+};
+
+struct switchdev_notifier_fdb_info {
+	struct switchdev_notifier_info info;
+	const unsigned char *addr;
+	u16 vid;
+	u8 added_by_user: 1;
+	u8 is_local: 1;
+	u8 offloaded: 1;
+};
+
+struct switchdev_notifier_port_obj_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_obj *obj;
+	bool handled;
+};
+
+struct switchdev_notifier_port_attr_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_attr *attr;
+	bool handled;
+};
+
+struct switchdev_notifier_brport_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_brport brport;
+};
+
+typedef void switchdev_deferred_func_t(struct net_device *, const void *);
+
+struct switchdev_deferred_item {
+	struct list_head list;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	switchdev_deferred_func_t *func;
+	long unsigned int data[0];
+};
+
+struct switchdev_nested_priv {
+	bool (*check_cb)(const struct net_device *);
+	bool (*foreign_dev_check_cb)(const struct net_device *, const struct net_device *);
+	const struct net_device *dev;
+	struct net_device *lower_dev;
+};
+
+struct xdp_umem_reg {
+	__u64 addr;
+	__u64 len;
+	__u32 chunk_size;
+	__u32 headroom;
+	__u32 flags;
+};
+
+struct mptcp_pernet {
+	struct ctl_table_header *ctl_table_hdr;
+	unsigned int add_addr_timeout;
+	unsigned int stale_loss_cnt;
+	u8 mptcp_enabled;
+	u8 checksum_enabled;
+	u8 allow_join_initial_addr_port;
+	u8 pm_type;
+};
+
+enum {
+	MPTCP_PM_ATTR_UNSPEC = 0,
+	MPTCP_PM_ATTR_ADDR = 1,
+	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
+	MPTCP_PM_ATTR_SUBFLOWS = 3,
+	MPTCP_PM_ATTR_TOKEN = 4,
+	MPTCP_PM_ATTR_LOC_ID = 5,
+	MPTCP_PM_ATTR_ADDR_REMOTE = 6,
+	__MPTCP_PM_ATTR_MAX = 7,
+};
+
+enum {
+	MPTCP_PM_ADDR_ATTR_UNSPEC = 0,
+	MPTCP_PM_ADDR_ATTR_FAMILY = 1,
+	MPTCP_PM_ADDR_ATTR_ID = 2,
+	MPTCP_PM_ADDR_ATTR_ADDR4 = 3,
+	MPTCP_PM_ADDR_ATTR_ADDR6 = 4,
+	MPTCP_PM_ADDR_ATTR_PORT = 5,
+	MPTCP_PM_ADDR_ATTR_FLAGS = 6,
+	MPTCP_PM_ADDR_ATTR_IF_IDX = 7,
+	__MPTCP_PM_ADDR_ATTR_MAX = 8,
+};
+
+enum {
+	MPTCP_PM_CMD_UNSPEC = 0,
+	MPTCP_PM_CMD_ADD_ADDR = 1,
+	MPTCP_PM_CMD_DEL_ADDR = 2,
+	MPTCP_PM_CMD_GET_ADDR = 3,
+	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
+	MPTCP_PM_CMD_SET_LIMITS = 5,
+	MPTCP_PM_CMD_GET_LIMITS = 6,
+	MPTCP_PM_CMD_SET_FLAGS = 7,
+	MPTCP_PM_CMD_ANNOUNCE = 8,
+	MPTCP_PM_CMD_REMOVE = 9,
+	MPTCP_PM_CMD_SUBFLOW_CREATE = 10,
+	MPTCP_PM_CMD_SUBFLOW_DESTROY = 11,
+	__MPTCP_PM_CMD_AFTER_LAST = 12,
+};
+
+enum mptcp_event_attr {
+	MPTCP_ATTR_UNSPEC = 0,
+	MPTCP_ATTR_TOKEN = 1,
+	MPTCP_ATTR_FAMILY = 2,
+	MPTCP_ATTR_LOC_ID = 3,
+	MPTCP_ATTR_REM_ID = 4,
+	MPTCP_ATTR_SADDR4 = 5,
+	MPTCP_ATTR_SADDR6 = 6,
+	MPTCP_ATTR_DADDR4 = 7,
+	MPTCP_ATTR_DADDR6 = 8,
+	MPTCP_ATTR_SPORT = 9,
+	MPTCP_ATTR_DPORT = 10,
+	MPTCP_ATTR_BACKUP = 11,
+	MPTCP_ATTR_ERROR = 12,
+	MPTCP_ATTR_FLAGS = 13,
+	MPTCP_ATTR_TIMEOUT = 14,
+	MPTCP_ATTR_IF_IDX = 15,
+	MPTCP_ATTR_RESET_REASON = 16,
+	MPTCP_ATTR_RESET_FLAGS = 17,
+	MPTCP_ATTR_SERVER_SIDE = 18,
+	__MPTCP_ATTR_AFTER_LAST = 19,
+};
+
+struct mptcp_pm_addr_entry {
+	struct list_head list;
+	struct mptcp_addr_info addr;
+	u8 flags;
+	int ifindex;
+	struct socket *lsk;
+};
+
+struct mptcp_pm_add_entry {
+	struct list_head list;
+	struct mptcp_addr_info addr;
+	struct timer_list add_timer;
+	struct mptcp_sock *sock;
+	u8 retrans_times;
+};
+
+struct pm_nl_pernet {
+	spinlock_t lock;
+	struct list_head local_addr_list;
+	unsigned int addrs;
+	unsigned int stale_loss_cnt;
+	unsigned int add_addr_signal_max;
+	unsigned int add_addr_accept_max;
+	unsigned int local_addr_max;
+	unsigned int subflows_max;
+	unsigned int next_id;
+	long unsigned int id_bitmap[4];
+};
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
+
+struct clock_read_data {
+	u64 epoch_ns;
+	u64 epoch_cyc;
+	u64 sched_clock_mask;
+	u64 (*read_sched_clock)();
+	u32 mult;
+	u32 shift;
+};
+
+struct armv8pmu_probe_info {
+	struct arm_pmu *pmu;
+	bool present;
+};
+
+enum aarch64_insn_encoding_class {
+	AARCH64_INSN_CLS_UNKNOWN = 0,
+	AARCH64_INSN_CLS_SVE = 1,
+	AARCH64_INSN_CLS_DP_IMM = 2,
+	AARCH64_INSN_CLS_DP_REG = 3,
+	AARCH64_INSN_CLS_DP_FPSIMD = 4,
+	AARCH64_INSN_CLS_LDST = 5,
+	AARCH64_INSN_CLS_BR_SYS = 6,
+};
+
+enum aarch64_insn_special_register {
+	AARCH64_INSN_SPCLREG_SPSR_EL1 = 49664,
+	AARCH64_INSN_SPCLREG_ELR_EL1 = 49665,
+	AARCH64_INSN_SPCLREG_SP_EL0 = 49672,
+	AARCH64_INSN_SPCLREG_SPSEL = 49680,
+	AARCH64_INSN_SPCLREG_CURRENTEL = 49682,
+	AARCH64_INSN_SPCLREG_DAIF = 55825,
+	AARCH64_INSN_SPCLREG_NZCV = 55824,
+	AARCH64_INSN_SPCLREG_FPCR = 55840,
+	AARCH64_INSN_SPCLREG_DSPSR_EL0 = 55848,
+	AARCH64_INSN_SPCLREG_DLR_EL0 = 55849,
+	AARCH64_INSN_SPCLREG_SPSR_EL2 = 57856,
+	AARCH64_INSN_SPCLREG_ELR_EL2 = 57857,
+	AARCH64_INSN_SPCLREG_SP_EL1 = 57864,
+	AARCH64_INSN_SPCLREG_SPSR_INQ = 57880,
+	AARCH64_INSN_SPCLREG_SPSR_ABT = 57881,
+	AARCH64_INSN_SPCLREG_SPSR_UND = 57882,
+	AARCH64_INSN_SPCLREG_SPSR_FIQ = 57883,
+	AARCH64_INSN_SPCLREG_SPSR_EL3 = 61952,
+	AARCH64_INSN_SPCLREG_ELR_EL3 = 61953,
+	AARCH64_INSN_SPCLREG_SP_EL2 = 61968,
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+struct kvm_vfio_group {
+	struct list_head node;
+	struct file *file;
+};
+
+struct kvm_vfio {
+	struct list_head group_list;
+	struct mutex lock;
+	bool noncoherent;
+};
+
+enum {
+	KVM_REG_ARM_STD_BIT_TRNG_V1_0 = 0,
+	KVM_REG_ARM_STD_BMAP_BIT_COUNT = 1,
+};
+
+enum {
+	KVM_REG_ARM_STD_HYP_BIT_PV_TIME = 0,
+	KVM_REG_ARM_STD_HYP_BMAP_BIT_COUNT = 1,
+};
+
+enum {
+	KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT = 0,
+	KVM_REG_ARM_VENDOR_HYP_BIT_PTP = 1,
+	KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT = 2,
+};
+
+struct vgic_state_iter {
+	int nr_cpus;
+	int nr_spis;
+	int nr_lpis;
+	int dist_id;
+	int vcpu_id;
+	int intid;
+	int lpi_idx;
+	u32 *lpi_array;
+};
+
+struct tlb_inv_context {
+	long unsigned int flags;
+	u64 tcr;
+	u64 sctlr;
+};
+
+struct arm_smccc_1_2_regs {
+	long unsigned int a0;
+	long unsigned int a1;
+	long unsigned int a2;
+	long unsigned int a3;
+	long unsigned int a4;
+	long unsigned int a5;
+	long unsigned int a6;
+	long unsigned int a7;
+	long unsigned int a8;
+	long unsigned int a9;
+	long unsigned int a10;
+	long unsigned int a11;
+	long unsigned int a12;
+	long unsigned int a13;
+	long unsigned int a14;
+	long unsigned int a15;
+	long unsigned int a16;
+	long unsigned int a17;
+};
+
+struct hv_get_vp_registers_output {
+	union {
+		struct {
+			u32 a;
+			u32 b;
+			u32 c;
+			u32 d;
+		} as32;
+		struct {
+			u64 low;
+			u64 high;
+		} as64;
+	};
+};
+
+struct sha1_ce_state {
+	struct sha1_state sst;
+	u32 finalize;
+};
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+struct trace_event_raw_irq_handler_entry {
+	struct trace_entry ent;
+	int irq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_handler_exit {
+	struct trace_entry ent;
+	int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq {
+	struct trace_entry ent;
+	unsigned int vec;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_handler_entry {
+	u32 name;
+};
+
+struct trace_event_data_offsets_irq_handler_exit {};
+
+struct trace_event_data_offsets_softirq {};
+
+typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
+
+typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
+
+typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
+
+struct tasklet_head {
+	struct tasklet_struct *head;
+	struct tasklet_struct **tail;
+};
+
+struct prctl_mm_map {
+	__u64 start_code;
+	__u64 end_code;
+	__u64 start_data;
+	__u64 end_data;
+	__u64 start_brk;
+	__u64 brk;
+	__u64 start_stack;
+	__u64 arg_start;
+	__u64 arg_end;
+	__u64 env_start;
+	__u64 env_end;
+	__u64 *auxv;
+	__u32 auxv_size;
+	__u32 exe_fd;
+};
+
+struct rlimit64 {
+	__u64 rlim_cur;
+	__u64 rlim_max;
+};
+
+struct compat_tms {
+	compat_clock_t tms_utime;
+	compat_clock_t tms_stime;
+	compat_clock_t tms_cutime;
+	compat_clock_t tms_cstime;
+};
+
+struct compat_rlimit {
+	compat_ulong_t rlim_cur;
+	compat_ulong_t rlim_max;
+};
+
+enum uts_proc {
+	UTS_PROC_OSTYPE = 0,
+	UTS_PROC_OSRELEASE = 1,
+	UTS_PROC_VERSION = 2,
+	UTS_PROC_HOSTNAME = 3,
+	UTS_PROC_DOMAINNAME = 4,
+};
+
+struct tms {
+	__kernel_clock_t tms_utime;
+	__kernel_clock_t tms_stime;
+	__kernel_clock_t tms_cutime;
+	__kernel_clock_t tms_cstime;
+};
+
+struct getcpu_cache {
+	long unsigned int blob[16];
+};
+
+struct compat_sysinfo {
+	s32 uptime;
+	u32 loads[3];
+	u32 totalram;
+	u32 freeram;
+	u32 sharedram;
+	u32 bufferram;
+	u32 totalswap;
+	u32 freeswap;
+	u16 procs;
+	u16 pad;
+	u32 totalhigh;
+	u32 freehigh;
+	u32 mem_unit;
+	char _f[8];
+};
+
+struct pool_workqueue;
+
+struct worker_pool;
+
+struct worker {
+	union {
+		struct list_head entry;
+		struct hlist_node hentry;
+	};
+	struct work_struct *current_work;
+	work_func_t current_func;
+	struct pool_workqueue *current_pwq;
+	unsigned int current_color;
+	struct list_head scheduled;
+	struct task_struct *task;
+	struct worker_pool *pool;
+	struct list_head node;
+	long unsigned int last_active;
+	unsigned int flags;
+	int id;
+	int sleeping;
+	char desc[24];
+	struct workqueue_struct *rescue_wq;
+	work_func_t last_func;
+};
+
+struct async_entry {
+	struct list_head domain_list;
+	struct list_head global_list;
+	struct work_struct work;
+	async_cookie_t cookie;
+	async_func_t func;
+	void *data;
+	struct async_domain *domain;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	long unsigned int timeout;
+	bool handoff_set;
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+struct platform_suspend_ops {
+	int (*valid)(suspend_state_t);
+	int (*begin)(suspend_state_t);
+	int (*prepare)();
+	int (*prepare_late)();
+	int (*enter)(suspend_state_t);
+	void (*wake)();
+	void (*finish)();
+	bool (*suspend_again)();
+	void (*end)();
+	void (*recover)();
+};
+
+struct platform_s2idle_ops {
+	int (*begin)();
+	int (*prepare)();
+	int (*prepare_late)();
+	bool (*wake)();
+	void (*restore_early)();
+	void (*restore)();
+	void (*end)();
+};
+
+enum {
+	TEST_NONE = 0,
+	TEST_CORE = 1,
+	TEST_CPUS = 2,
+	TEST_PLATFORM = 3,
+	TEST_DEVICES = 4,
+	TEST_FREEZER = 5,
+	__TEST_AFTER_LAST = 6,
+};
+
+struct dev_printk_info;
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+enum kcmp_type {
+	KCMP_FILE = 0,
+	KCMP_VM = 1,
+	KCMP_FILES = 2,
+	KCMP_FS = 3,
+	KCMP_SIGHAND = 4,
+	KCMP_IO = 5,
+	KCMP_SYSVSEM = 6,
+	KCMP_EPOLL_TFD = 7,
+	KCMP_TYPES = 8,
+};
+
+struct kcmp_epoll_slot {
+	__u32 efd;
+	__u32 tfd;
+	__u32 toff;
+};
+
+struct trace_event_raw_alarmtimer_suspend {
+	struct trace_entry ent;
+	s64 expires;
+	unsigned char alarm_type;
+	char __data[0];
+};
+
+struct trace_event_raw_alarm_class {
+	struct trace_entry ent;
+	void *alarm;
+	unsigned char alarm_type;
+	s64 expires;
+	s64 now;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alarmtimer_suspend {};
+
+struct trace_event_data_offsets_alarm_class {};
+
+typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
+
+typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
+
+struct alarm_base {
+	spinlock_t lock;
+	struct timerqueue_head timerqueue;
+	ktime_t (*get_ktime)();
+	void (*get_timespec)(struct timespec64 *);
+	clockid_t base_clockid;
+};
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	long unsigned int ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+enum freezer_state_flags {
+	CGROUP_FREEZER_ONLINE = 1,
+	CGROUP_FREEZING_SELF = 2,
+	CGROUP_FREEZING_PARENT = 4,
+	CGROUP_FROZEN = 8,
+	CGROUP_FREEZING = 6,
+};
+
+struct freezer {
+	struct cgroup_subsys_state css;
+	unsigned int state;
+};
+
+struct audit_chunk;
+
+struct audit_tree {
+	refcount_t count;
+	int goner;
+	struct audit_chunk *root;
+	struct list_head chunks;
+	struct list_head rules;
+	struct list_head list;
+	struct list_head same_root;
+	struct callback_head head;
+	char pathname[0];
+};
+
+struct audit_node {
+	struct list_head list;
+	struct audit_tree *owner;
+	unsigned int index;
+};
+
+struct audit_chunk {
+	struct list_head hash;
+	long unsigned int key;
+	struct fsnotify_mark *mark;
+	struct list_head trees;
+	int count;
+	atomic_long_t refs;
+	struct callback_head head;
+	struct audit_node owners[0];
+};
+
+struct audit_tree_mark {
+	struct fsnotify_mark mark;
+	struct audit_chunk *chunk;
+};
+
+enum {
+	HASH_SIZE = 128,
+};
+
+enum {
+	TASKSTATS_TYPE_UNSPEC = 0,
+	TASKSTATS_TYPE_PID = 1,
+	TASKSTATS_TYPE_TGID = 2,
+	TASKSTATS_TYPE_STATS = 3,
+	TASKSTATS_TYPE_AGGR_PID = 4,
+	TASKSTATS_TYPE_AGGR_TGID = 5,
+	TASKSTATS_TYPE_NULL = 6,
+	__TASKSTATS_TYPE_MAX = 7,
+};
+
+enum {
+	TASKSTATS_CMD_ATTR_UNSPEC = 0,
+	TASKSTATS_CMD_ATTR_PID = 1,
+	TASKSTATS_CMD_ATTR_TGID = 2,
+	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
+	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
+	__TASKSTATS_CMD_ATTR_MAX = 5,
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum {
+	CGROUPSTATS_CMD_UNSPEC = 3,
+	CGROUPSTATS_CMD_GET = 4,
+	CGROUPSTATS_CMD_NEW = 5,
+	__CGROUPSTATS_CMD_MAX = 6,
+};
+
+enum {
+	CGROUPSTATS_TYPE_UNSPEC = 0,
+	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
+	__CGROUPSTATS_TYPE_MAX = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+	CGROUPSTATS_CMD_ATTR_FD = 1,
+	__CGROUPSTATS_CMD_ATTR_MAX = 2,
+};
+
+struct listener {
+	struct list_head list;
+	pid_t pid;
+	char valid;
+};
+
+struct listener_list {
+	struct rw_semaphore sem;
+	struct list_head list;
+};
+
+enum actions {
+	REGISTER = 0,
+	DEREGISTER = 1,
+	CPU_DONT_CARE = 2,
+};
+
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+enum {
+	MODE_NONE = 0,
+	MODE_ROUND_ROBIN = 1,
+	MODE_PER_CPU = 2,
+	MODE_MAX___2 = 3,
+};
+
+struct hwlat_kthread_data {
+	struct task_struct *kthread;
+	u64 nmi_ts_start;
+	u64 nmi_total_ts;
+	int nmi_count;
+	int nmi_cpu;
+};
+
+struct hwlat_sample {
+	u64 seqnum;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	int nmi_count;
+	int count;
+};
+
+struct hwlat_data {
+	struct mutex lock;
+	u64 count;
+	u64 sample_window;
+	u64 sample_width;
+	int thread_mode;
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct event_probe_data {
+	struct trace_event_file *file;
+	long unsigned int count;
+	int ref;
+	bool enable;
+};
+
+struct kprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int ip;
+};
+
+struct kretprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int func;
+	long unsigned int ret_ip;
+};
+
+struct trace_kprobe {
+	struct dyn_event devent;
+	struct kretprobe rp;
+	long unsigned int *nhit;
+	const char *symbol;
+	struct trace_probe tp;
+};
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 56;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+enum {
+	BPF_F_BPRM_SECUREEXEC = 1,
+};
+
+typedef u64 (*btf_bpf_bprm_opts_set)(struct linux_binprm *, u64);
+
+typedef u64 (*btf_bpf_ima_inode_hash)(struct inode *, void *, u32);
+
+typedef u64 (*btf_bpf_ima_file_hash)(struct file *, void *, u32);
+
+typedef u64 (*btf_bpf_get_attach_cookie)(void *);
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	long unsigned int i_ino;
+	long unsigned int index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+typedef void compound_page_dtor(struct page *);
+
+typedef int fpi_t;
+
+struct mminit_pfnnid_cache {
+	long unsigned int last_start;
+	long unsigned int last_end;
+	int last_nid;
+};
+
+struct demotion_nodes {
+	short unsigned int nr;
+	short int nodes[15];
+};
+
+struct trace_event_raw_test_pages_isolated {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int fin_pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_test_pages_isolated {};
+
+typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+struct trace_event_raw_damon_aggregated {
+	struct trace_entry ent;
+	long unsigned int target_id;
+	unsigned int nr_regions;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int nr_accesses;
+	unsigned int age;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_damon_aggregated {};
+
+typedef void (*btf_trace_damon_aggregated)(void *, struct damon_target *, unsigned int, struct damon_region *, unsigned int);
+
+struct hugetlbfs_inode_info {
+	struct shared_policy policy;
+	struct inode vfs_inode;
+	unsigned int seals;
+};
+
+enum watch_meta_notification_subtype {
+	WATCH_META_REMOVAL_NOTIFICATION = 0,
+	WATCH_META_LOSS_NOTIFICATION = 1,
+};
+
+struct watch_notification_type_filter {
+	__u32 type;
+	__u32 info_filter;
+	__u32 info_mask;
+	__u32 subtype_filter[8];
+};
+
+struct watch_notification_filter {
+	__u32 nr_filters;
+	__u32 __reserved;
+	struct watch_notification_type_filter filters[0];
+};
+
+struct inodes_stat_t {
+	long int nr_inodes;
+	long int nr_unused;
+	long int dummy[5];
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+};
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+struct wb_writeback_work {
+	long int nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_foreign_history {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t cgroup_ino;
+	unsigned int history;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_switch_wbs {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t old_cgroup_ino;
+	ino_t new_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_track_foreign_dirty {
+	struct trace_entry ent;
+	char name[32];
+	u64 bdi_id;
+	ino_t ino;
+	unsigned int memcg_id;
+	ino_t cgroup_ino;
+	ino_t page_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_flush_foreign {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	unsigned int frn_bdi_id;
+	unsigned int frn_memcg_id;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long int pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_to_write;
+	long int pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long int range_start;
+	long int range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int older;
+	long int age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int background_thresh;
+	long unsigned int dirty_thresh;
+	long unsigned int dirty_limit;
+	long unsigned int nr_dirtied;
+	long unsigned int nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int write_bw;
+	long unsigned int avg_write_bw;
+	long unsigned int dirty_rate;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int limit;
+	long unsigned int setpoint;
+	long unsigned int dirty;
+	long unsigned int bdi_setpoint;
+	long unsigned int bdi_dirty;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	long unsigned int paused;
+	long int pause;
+	long unsigned int period;
+	long int think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	long unsigned int writeback_index;
+	long int nr_to_write;
+	long unsigned int wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int state;
+	__u16 mode;
+	long unsigned int dirtied_when;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_inode_foreign_history {};
+
+struct trace_event_data_offsets_inode_switch_wbs {};
+
+struct trace_event_data_offsets_track_foreign_dirty {};
+
+struct trace_event_data_offsets_flush_foreign {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
+
+typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
+
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
+
+typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long int);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct inode_switch_wbs_context {
+	struct rcu_work work;
+	struct bdi_writeback *new_wb;
+	struct inode *inodes[0];
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	dio_submit_t *submit_io;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	long unsigned int refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+	long: 64;
+};
+
+typedef u32 compat_aio_context_t;
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx *table[0];
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	long unsigned int user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	long unsigned int mmap_base;
+	long unsigned int mmap_size;
+	struct page **ring_pages;
+	long int nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+struct fsync_iocb {
+	struct file *file;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
+};
+
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
+};
+
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
+};
+
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
+};
+
+struct __aio_sigset {
+	const sigset_t *sigmask;
+	size_t sigsetsize;
+};
+
+struct __compat_aio_sigset {
+	compat_uptr_t sigmask;
+	compat_size_t sigsetsize;
+};
+
+struct fsverity_enable_arg {
+	__u32 version;
+	__u32 hash_algorithm;
+	__u32 block_size;
+	__u32 salt_size;
+	__u64 salt_ptr;
+	__u32 sig_size;
+	__u32 __reserved1;
+	__u64 sig_ptr;
+	__u64 __reserved2[11];
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	long unsigned int caller;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, long unsigned int);
+
+struct quota_module_name {
+	int qm_fmt_id;
+	char *qm_mod_name;
+};
+
+struct dquot_warn {
+	struct super_block *w_sb;
+	struct kqid w_dq_id;
+	short int w_type;
+};
+
+enum kcore_type {
+	KCORE_TEXT = 0,
+	KCORE_VMALLOC = 1,
+	KCORE_RAM = 2,
+	KCORE_VMEMMAP = 3,
+	KCORE_USER = 4,
+};
+
+struct kcore_list {
+	struct list_head list;
+	long unsigned int addr;
+	size_t size;
+	int type;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+};
+
+struct ext4_system_zone {
+	struct rb_node node;
+	ext4_fsblk_t start_blk;
+	unsigned int count;
+	u32 ino;
+};
+
+struct mmp_struct {
+	__le32 mmp_magic;
+	__le32 mmp_seq;
+	__le64 mmp_time;
+	char mmp_nodename[64];
+	char mmp_bdevname[32];
+	__le16 mmp_check_interval;
+	__le16 mmp_pad1;
+	__le32 mmp_pad2[226];
+	__le32 mmp_checksum;
+};
+
+enum {
+	BLOCK_BITMAP = 0,
+	INODE_BITMAP = 1,
+	INODE_TABLE = 2,
+	GROUP_TABLE_COUNT = 3,
+};
+
+struct ext4_rcu_ptr {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct ext4_new_flex_group_data {
+	struct ext4_new_group_data *groups;
+	__u16 *bg_flags;
+	ext4_group_t count;
+};
+
+struct ext4_fc_tl {
+	__le16 fc_tag;
+	__le16 fc_len;
+};
+
+struct ext4_fc_head {
+	__le32 fc_features;
+	__le32 fc_tid;
+};
+
+struct ext4_fc_add_range {
+	__le32 fc_ino;
+	__u8 fc_ex[12];
+};
+
+struct ext4_fc_del_range {
+	__le32 fc_ino;
+	__le32 fc_lblk;
+	__le32 fc_len;
+};
+
+struct ext4_fc_dentry_info {
+	__le32 fc_parent_ino;
+	__le32 fc_ino;
+	__u8 fc_dname[0];
+};
+
+struct ext4_fc_inode {
+	__le32 fc_ino;
+	__u8 fc_raw_inode[0];
+};
+
+struct ext4_fc_tail {
+	__le32 fc_tid;
+	__le32 fc_crc;
+};
+
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
+struct ext4_fc_dentry_update {
+	int fcd_op;
+	int fcd_parent;
+	int fcd_ino;
+	struct qstr fcd_name;
+	unsigned char fcd_iname[32];
+	struct list_head fcd_list;
+	struct list_head fcd_dilist;
+};
+
+struct __track_dentry_update_args {
+	struct dentry *dentry;
+	int op;
+};
+
+struct __track_range_args {
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+};
+
+struct dentry_info_args {
+	int parent_ino;
+	int dname_len;
+	int ino;
+	int inode_len;
+	char *dname;
+};
+
+struct jbd2_revoke_table_s {
+	int hash_size;
+	int hash_shift;
+	struct list_head *hash_table;
+};
+
+struct jbd2_revoke_record_s {
+	struct list_head hash;
+	tid_t sequence;
+	long long unsigned int blocknr;
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+enum {
+	AUTOFS_IOC_READY_CMD = 96,
+	AUTOFS_IOC_FAIL_CMD = 97,
+	AUTOFS_IOC_CATATONIC_CMD = 98,
+	AUTOFS_IOC_PROTOVER_CMD = 99,
+	AUTOFS_IOC_SETTIMEOUT_CMD = 100,
+	AUTOFS_IOC_EXPIRE_CMD = 101,
+};
+
+enum {
+	AUTOFS_IOC_EXPIRE_MULTI_CMD = 102,
+	AUTOFS_IOC_PROTOSUBVER_CMD = 103,
+	AUTOFS_IOC_ASKUMOUNT_CMD = 112,
+};
+
+struct extent_inode_elem;
+
+struct prelim_ref {
+	struct rb_node rbnode;
+	u64 root_id;
+	struct btrfs_key key_for_search;
+	int level;
+	int count;
+	struct extent_inode_elem *inode_list;
+	u64 parent;
+	u64 wanted_disk_byte;
+};
+
+struct raid56_bio_trace_info {
+	u64 devid;
+	u32 offset;
+	u8 stripe_nr;
+};
+
+struct trace_event_raw_btrfs_transaction_commit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 generation;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__inode {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 blocks;
+	u64 disk_i_size;
+	u64 generation;
+	u64 last_trans;
+	u64 logged_trans;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_get_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 ino;
+	u64 start;
+	u64 len;
+	u64 orig_start;
+	u64 block_start;
+	u64 block_len;
+	long unsigned int flags;
+	int refs;
+	unsigned int compress_type;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_handle_em_exist {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 e_start;
+	u64 e_len;
+	u64 map_start;
+	u64 map_len;
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__file_extent_item_regular {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_obj;
+	u64 ino;
+	loff_t isize;
+	u64 disk_isize;
+	u64 num_bytes;
+	u64 ram_bytes;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 extent_offset;
+	u8 extent_type;
+	u8 compression;
+	u64 extent_start;
+	u64 extent_end;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__file_extent_item_inline {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_obj;
+	u64 ino;
+	loff_t isize;
+	u64 disk_isize;
+	u8 extent_type;
+	u8 compression;
+	u64 extent_start;
+	u64 extent_end;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__ordered_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 file_offset;
+	u64 start;
+	u64 len;
+	u64 disk_len;
+	u64 bytes_left;
+	long unsigned int flags;
+	int compress_type;
+	int refs;
+	u64 root_objectid;
+	u64 truncated_len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__writepage {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	long unsigned int index;
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	char for_kupdate;
+	char for_reclaim;
+	char range_cyclic;
+	long unsigned int writeback_index;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_writepage_end_io_hook {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 start;
+	u64 end;
+	int uptodate;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sync_file {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 parent;
+	int datasync;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sync_fs {
+	struct trace_entry ent;
+	u8 fsid[16];
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_add_block_group {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 offset;
+	u64 size;
+	u64 flags;
+	u64 bytes_used;
+	u64 bytes_super;
+	int create;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_tree_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	u64 parent;
+	u64 ref_root;
+	int level;
+	int type;
+	u64 seq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_data_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	u64 parent;
+	u64 ref_root;
+	u64 owner;
+	u64 offset;
+	int type;
+	u64 seq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_ref_head {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	int is_data;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__chunk {
+	struct trace_entry ent;
+	u8 fsid[16];
+	int num_stripes;
+	u64 type;
+	int sub_stripes;
+	u64 offset;
+	u64 size;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_cow_block {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 buf_start;
+	int refs;
+	u64 cow_start;
+	int buf_level;
+	int cow_level;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_space_reservation {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u32 __data_loc_type;
+	u64 val;
+	u64 bytes;
+	int reserve;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_trigger_flush {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 bytes;
+	int flush;
+	u32 __data_loc_reason;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_flush_space {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 num_bytes;
+	int state;
+	int ret;
+	bool for_preempt;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__reserved_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_find_free_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 num_bytes;
+	u64 empty_size;
+	u64 data;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__reserve_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_find_cluster {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 bytes;
+	u64 empty_size;
+	u64 min_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_failed_cluster_setup {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_setup_cluster {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 max_size;
+	u64 size;
+	int bitmap;
+	char __data[0];
+};
+
+struct trace_event_raw_alloc_extent_state {
+	struct trace_entry ent;
+	const struct extent_state *state;
+	long unsigned int mask;
+	const void *ip;
+	char __data[0];
+};
+
+struct trace_event_raw_free_extent_state {
+	struct trace_entry ent;
+	const struct extent_state *state;
+	const void *ip;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__work {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *work;
+	const void *wq;
+	const void *func;
+	const void *ordered_func;
+	const void *ordered_free;
+	const void *normal_work;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__work__done {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wtag;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_workqueue {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_workqueue_done {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__qgroup_rsv_data {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 rootid;
+	u64 ino;
+	u64 start;
+	u64 len;
+	u64 reserved;
+	int op;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_qgroup_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_num_dirty_extents {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 transid;
+	u64 num_dirty_extents;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_qgroup_account_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 transid;
+	u64 bytenr;
+	u64 num_bytes;
+	u64 nr_old_roots;
+	u64 nr_new_roots;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_update_counters {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 qgid;
+	u64 old_rfer;
+	u64 old_excl;
+	u64 cur_old_count;
+	u64 cur_new_count;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_update_reserve {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 qgid;
+	u64 cur_reserved;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_reserve {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_convert {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_free_all_pertrans {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__prelim_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_id;
+	u64 objectid;
+	u8 type;
+	u64 offset;
+	int level;
+	int old_count;
+	u64 parent;
+	u64 bytenr;
+	int mod_count;
+	u64 tree_size;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_inode_mod_outstanding_extents {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 ino;
+	int mod;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__block_group {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 len;
+	u64 used;
+	u64 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_set_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int set_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_clear_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int clear_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_convert_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int set_bits;
+	unsigned int clear_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_dump_space_info {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 total_bytes;
+	u64 bytes_used;
+	u64 bytes_pinned;
+	u64 bytes_reserved;
+	u64 bytes_may_use;
+	u64 bytes_readonly;
+	u64 reclaim_size;
+	int clamp;
+	u64 global_reserved;
+	u64 trans_reserved;
+	u64 delayed_refs_reserved;
+	u64 delayed_reserved;
+	u64 free_chunk_space;
+	u64 delalloc_bytes;
+	u64 ordered_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_reserve_ticket {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 bytes;
+	u64 start_ns;
+	int flush;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sleep_tree_lock {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 block;
+	u64 generation;
+	u64 start_ns;
+	u64 end_ns;
+	u64 diff_ns;
+	u64 owner;
+	int is_log_tree;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_locking_events {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 block;
+	u64 generation;
+	u64 owner;
+	int is_log_tree;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__space_info_update {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 type;
+	u64 old;
+	s64 diff;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_raid56_bio {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 full_stripe;
+	u64 physical;
+	u64 devid;
+	u32 offset;
+	u32 len;
+	u8 opf;
+	u8 total_stripes;
+	u8 real_stripes;
+	u8 nr_data;
+	u8 stripe_nr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_btrfs_transaction_commit {};
+
+struct trace_event_data_offsets_btrfs__inode {};
+
+struct trace_event_data_offsets_btrfs_get_extent {};
+
+struct trace_event_data_offsets_btrfs_handle_em_exist {};
+
+struct trace_event_data_offsets_btrfs__file_extent_item_regular {};
+
+struct trace_event_data_offsets_btrfs__file_extent_item_inline {};
+
+struct trace_event_data_offsets_btrfs__ordered_extent {};
+
+struct trace_event_data_offsets_btrfs__writepage {};
+
+struct trace_event_data_offsets_btrfs_writepage_end_io_hook {};
+
+struct trace_event_data_offsets_btrfs_sync_file {};
+
+struct trace_event_data_offsets_btrfs_sync_fs {};
+
+struct trace_event_data_offsets_btrfs_add_block_group {};
+
+struct trace_event_data_offsets_btrfs_delayed_tree_ref {};
+
+struct trace_event_data_offsets_btrfs_delayed_data_ref {};
+
+struct trace_event_data_offsets_btrfs_delayed_ref_head {};
+
+struct trace_event_data_offsets_btrfs__chunk {};
+
+struct trace_event_data_offsets_btrfs_cow_block {};
+
+struct trace_event_data_offsets_btrfs_space_reservation {
+	u32 type;
+};
+
+struct trace_event_data_offsets_btrfs_trigger_flush {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_btrfs_flush_space {};
+
+struct trace_event_data_offsets_btrfs__reserved_extent {};
+
+struct trace_event_data_offsets_find_free_extent {};
+
+struct trace_event_data_offsets_btrfs__reserve_extent {};
+
+struct trace_event_data_offsets_btrfs_find_cluster {};
+
+struct trace_event_data_offsets_btrfs_failed_cluster_setup {};
+
+struct trace_event_data_offsets_btrfs_setup_cluster {};
+
+struct trace_event_data_offsets_alloc_extent_state {};
+
+struct trace_event_data_offsets_free_extent_state {};
+
+struct trace_event_data_offsets_btrfs__work {};
+
+struct trace_event_data_offsets_btrfs__work__done {};
+
+struct trace_event_data_offsets_btrfs_workqueue {
+	u32 name;
+};
+
+struct trace_event_data_offsets_btrfs_workqueue_done {};
+
+struct trace_event_data_offsets_btrfs__qgroup_rsv_data {};
+
+struct trace_event_data_offsets_btrfs_qgroup_extent {};
+
+struct trace_event_data_offsets_qgroup_num_dirty_extents {};
+
+struct trace_event_data_offsets_btrfs_qgroup_account_extent {};
+
+struct trace_event_data_offsets_qgroup_update_counters {};
+
+struct trace_event_data_offsets_qgroup_update_reserve {};
+
+struct trace_event_data_offsets_qgroup_meta_reserve {};
+
+struct trace_event_data_offsets_qgroup_meta_convert {};
+
+struct trace_event_data_offsets_qgroup_meta_free_all_pertrans {};
+
+struct trace_event_data_offsets_btrfs__prelim_ref {};
+
+struct trace_event_data_offsets_btrfs_inode_mod_outstanding_extents {};
+
+struct trace_event_data_offsets_btrfs__block_group {};
+
+struct trace_event_data_offsets_btrfs_set_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_clear_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_convert_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_dump_space_info {};
+
+struct trace_event_data_offsets_btrfs_reserve_ticket {};
+
+struct trace_event_data_offsets_btrfs_sleep_tree_lock {};
+
+struct trace_event_data_offsets_btrfs_locking_events {};
+
+struct trace_event_data_offsets_btrfs__space_info_update {};
+
+struct trace_event_data_offsets_btrfs_raid56_bio {};
+
+typedef void (*btf_trace_btrfs_transaction_commit)(void *, const struct btrfs_fs_info *);
+
+typedef void (*btf_trace_btrfs_inode_new)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_inode_request)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_inode_evict)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_get_extent)(void *, const struct btrfs_root *, const struct btrfs_inode *, const struct extent_map *);
+
+typedef void (*btf_trace_btrfs_handle_em_exist)(void *, const struct btrfs_fs_info *, const struct extent_map *, const struct extent_map *, u64, u64);
+
+typedef void (*btf_trace_btrfs_get_extent_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);
+
+typedef void (*btf_trace_btrfs_truncate_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);
+
+typedef void (*btf_trace_btrfs_get_extent_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);
+
+typedef void (*btf_trace_btrfs_truncate_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);
+
+typedef void (*btf_trace_btrfs_ordered_extent_add)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_remove)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_start)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_put)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_range)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_first_range)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_for_logging)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_first)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_split)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_dec_test_pending)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_mark_finished)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace___extent_writepage)(void *, const struct page *, const struct inode *, const struct writeback_control *);
+
+typedef void (*btf_trace_btrfs_writepage_end_io_hook)(void *, const struct btrfs_inode *, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_sync_file)(void *, const struct file *, int);
+
+typedef void (*btf_trace_btrfs_sync_fs)(void *, const struct btrfs_fs_info *, int);
+
+typedef void (*btf_trace_btrfs_add_block_group)(void *, const struct btrfs_fs_info *, const struct btrfs_block_group *, int);
+
+typedef void (*btf_trace_add_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);
+
+typedef void (*btf_trace_run_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);
+
+typedef void (*btf_trace_add_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);
+
+typedef void (*btf_trace_run_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);
+
+typedef void (*btf_trace_add_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);
+
+typedef void (*btf_trace_run_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);
+
+typedef void (*btf_trace_btrfs_chunk_alloc)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);
+
+typedef void (*btf_trace_btrfs_chunk_free)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);
+
+typedef void (*btf_trace_btrfs_cow_block)(void *, const struct btrfs_root *, const struct extent_buffer *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_space_reservation)(void *, const struct btrfs_fs_info *, const char *, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_trigger_flush)(void *, const struct btrfs_fs_info *, u64, u64, int, const char *);
+
+typedef void (*btf_trace_btrfs_flush_space)(void *, const struct btrfs_fs_info *, u64, u64, int, int, bool);
+
+typedef void (*btf_trace_btrfs_reserved_extent_alloc)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserved_extent_free)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_find_free_extent)(void *, const struct btrfs_root *, u64, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserve_extent)(void *, const struct btrfs_block_group *, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserve_extent_cluster)(void *, const struct btrfs_block_group *, u64, u64);
+
+typedef void (*btf_trace_btrfs_find_cluster)(void *, const struct btrfs_block_group *, u64, u64, u64, u64);
+
+typedef void (*btf_trace_btrfs_failed_cluster_setup)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_setup_cluster)(void *, const struct btrfs_block_group *, const struct btrfs_free_cluster *, u64, int);
+
+typedef void (*btf_trace_alloc_extent_state)(void *, const struct extent_state *, gfp_t, long unsigned int);
+
+typedef void (*btf_trace_free_extent_state)(void *, const struct extent_state *, long unsigned int);
+
+typedef void (*btf_trace_btrfs_work_queued)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_work_sched)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_all_work_done)(void *, const struct btrfs_fs_info *, const void *);
+
+typedef void (*btf_trace_btrfs_ordered_sched)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_workqueue_alloc)(void *, const struct btrfs_workqueue *, const char *);
+
+typedef void (*btf_trace_btrfs_workqueue_destroy)(void *, const struct btrfs_workqueue *);
+
+typedef void (*btf_trace_btrfs_qgroup_reserve_data)(void *, const struct inode *, u64, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_qgroup_release_data)(void *, const struct inode *, u64, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_qgroup_account_extents)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);
+
+typedef void (*btf_trace_btrfs_qgroup_trace_extent)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);
+
+typedef void (*btf_trace_qgroup_num_dirty_extents)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_btrfs_qgroup_account_extent)(void *, const struct btrfs_fs_info *, u64, u64, u64, u64, u64);
+
+typedef void (*btf_trace_qgroup_update_counters)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup *, u64, u64);
+
+typedef void (*btf_trace_qgroup_update_reserve)(void *, struct btrfs_fs_info *, struct btrfs_qgroup *, s64, int);
+
+typedef void (*btf_trace_qgroup_meta_reserve)(void *, struct btrfs_root *, s64, int);
+
+typedef void (*btf_trace_qgroup_meta_convert)(void *, struct btrfs_root *, s64);
+
+typedef void (*btf_trace_qgroup_meta_free_all_pertrans)(void *, struct btrfs_root *);
+
+typedef void (*btf_trace_btrfs_prelim_ref_merge)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);
+
+typedef void (*btf_trace_btrfs_prelim_ref_insert)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);
+
+typedef void (*btf_trace_btrfs_inode_mod_outstanding_extents)(void *, const struct btrfs_root *, u64, int);
+
+typedef void (*btf_trace_btrfs_remove_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_add_unused_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_add_reclaim_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_reclaim_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_skip_unused_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_set_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);
+
+typedef void (*btf_trace_btrfs_clear_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);
+
+typedef void (*btf_trace_btrfs_convert_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int, unsigned int);
+
+typedef void (*btf_trace_btrfs_done_preemptive_reclaim)(void *, struct btrfs_fs_info *, const struct btrfs_space_info *);
+
+typedef void (*btf_trace_btrfs_fail_all_tickets)(void *, struct btrfs_fs_info *, const struct btrfs_space_info *);
+
+typedef void (*btf_trace_btrfs_reserve_ticket)(void *, const struct btrfs_fs_info *, u64, u64, u64, int, int);
+
+typedef void (*btf_trace_btrfs_tree_read_lock)(void *, const struct extent_buffer *, u64);
+
+typedef void (*btf_trace_btrfs_tree_lock)(void *, const struct extent_buffer *, u64);
+
+typedef void (*btf_trace_btrfs_tree_unlock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_unlock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_unlock_blocking)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_set_lock_blocking_read)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_set_lock_blocking_write)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_try_tree_read_lock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_try_tree_write_lock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_lock_atomic)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_update_bytes_may_use)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);
+
+typedef void (*btf_trace_update_bytes_pinned)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);
+
+typedef void (*btf_trace_raid56_read_partial)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_write_stripe)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_write_stripe)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_read)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_read_recover)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+enum {
+	Opt_acl___2 = 0,
+	Opt_noacl___2 = 1,
+	Opt_clear_cache = 2,
+	Opt_commit_interval = 3,
+	Opt_compress = 4,
+	Opt_compress_force = 5,
+	Opt_compress_force_type = 6,
+	Opt_compress_type = 7,
+	Opt_degraded = 8,
+	Opt_device = 9,
+	Opt_fatal_errors = 10,
+	Opt_flushoncommit = 11,
+	Opt_noflushoncommit = 12,
+	Opt_max_inline = 13,
+	Opt_barrier___2 = 14,
+	Opt_nobarrier___2 = 15,
+	Opt_datacow = 16,
+	Opt_nodatacow = 17,
+	Opt_datasum = 18,
+	Opt_nodatasum = 19,
+	Opt_defrag = 20,
+	Opt_nodefrag = 21,
+	Opt_discard___2 = 22,
+	Opt_nodiscard___2 = 23,
+	Opt_discard_mode = 24,
+	Opt_norecovery = 25,
+	Opt_ratio = 26,
+	Opt_rescan_uuid_tree = 27,
+	Opt_skip_balance = 28,
+	Opt_space_cache = 29,
+	Opt_no_space_cache = 30,
+	Opt_space_cache_version = 31,
+	Opt_ssd = 32,
+	Opt_nossd = 33,
+	Opt_ssd_spread = 34,
+	Opt_nossd_spread = 35,
+	Opt_subvol = 36,
+	Opt_subvol_empty = 37,
+	Opt_subvolid = 38,
+	Opt_thread_pool = 39,
+	Opt_treelog = 40,
+	Opt_notreelog = 41,
+	Opt_user_subvol_rm_allowed = 42,
+	Opt_rescue = 43,
+	Opt_usebackuproot = 44,
+	Opt_nologreplay = 45,
+	Opt_ignorebadroots = 46,
+	Opt_ignoredatacsums = 47,
+	Opt_rescue_all = 48,
+	Opt_recovery = 49,
+	Opt_inode_cache = 50,
+	Opt_noinode_cache = 51,
+	Opt_check_integrity = 52,
+	Opt_check_integrity_including_extent_data = 53,
+	Opt_check_integrity_print_mask = 54,
+	Opt_enospc_debug = 55,
+	Opt_noenospc_debug = 56,
+	Opt_err___8 = 57,
+};
+
+typedef void submit_bio_hook_t(struct inode *, struct bio *, int, enum btrfs_compression_type);
+
+struct btrfs_subpage {
+	spinlock_t lock;
+	atomic_t readers;
+	union {
+		atomic_t eb_refs;
+		atomic_t writers;
+	};
+	long unsigned int bitmaps[0];
+};
+
+enum btrfs_subpage_type {
+	BTRFS_SUBPAGE_METADATA = 0,
+	BTRFS_SUBPAGE_DATA = 1,
+};
+
+struct tree_entry {
+	u64 start;
+	u64 end;
+	struct rb_node rb_node;
+};
+
+struct btrfs_bio_ctrl {
+	struct bio *bio;
+	int mirror_num;
+	enum btrfs_compression_type compress_type;
+	u32 len_to_stripe_boundary;
+	u32 len_to_oe_boundary;
+};
+
+struct extent_page_data {
+	struct btrfs_bio_ctrl bio_ctrl;
+	unsigned int extent_locked: 1;
+	unsigned int sync_io: 1;
+};
+
+struct processed_extent {
+	struct btrfs_inode *inode;
+	u64 start;
+	u64 end;
+	bool uptodate;
+};
+
+struct fiemap_cache {
+	u64 offset;
+	u64 phys;
+	u64 len;
+	u32 flags;
+	bool cached;
+};
+
+struct bucket_item {
+	u32 count;
+};
+
+struct heuristic_ws {
+	u8 *sample;
+	u32 sample_size;
+	struct bucket_item *bucket;
+	struct bucket_item *bucket_b;
+	struct list_head list;
+};
+
+struct btrfs_stripe_hash {
+	struct list_head hash_list;
+	spinlock_t lock;
+};
+
+struct btrfs_stripe_hash_table {
+	struct list_head stripe_cache;
+	spinlock_t cache_lock;
+	int cache_size;
+	struct btrfs_stripe_hash table[0];
+};
+
+struct sector_ptr {
+	struct page *page;
+	unsigned int pgoff: 24;
+	unsigned int uptodate: 8;
+};
+
+struct btrfs_plug_cb {
+	struct blk_plug_cb cb;
+	struct btrfs_fs_info *info;
+	struct list_head rbio_list;
+	struct work_struct work;
+};
+
+struct btrfs_verity_descriptor_item {
+	__le64 size;
+	__le64 reserved[2];
+	__u8 encryption;
+} __attribute__((packed));
+
+typedef int __kernel_ipc_pid_t;
+
+struct msgbuf {
+	__kernel_long_t mtype;
+	char mtext[1];
+};
+
+struct msg;
+
+struct msqid_ds {
+	struct ipc_perm msg_perm;
+	struct msg *msg_first;
+	struct msg *msg_last;
+	__kernel_old_time_t msg_stime;
+	__kernel_old_time_t msg_rtime;
+	__kernel_old_time_t msg_ctime;
+	long unsigned int msg_lcbytes;
+	long unsigned int msg_lqbytes;
+	short unsigned int msg_cbytes;
+	short unsigned int msg_qnum;
+	short unsigned int msg_qbytes;
+	__kernel_ipc_pid_t msg_lspid;
+	__kernel_ipc_pid_t msg_lrpid;
+};
+
+struct msqid64_ds {
+	struct ipc64_perm msg_perm;
+	long int msg_stime;
+	long int msg_rtime;
+	long int msg_ctime;
+	long unsigned int msg_cbytes;
+	long unsigned int msg_qnum;
+	long unsigned int msg_qbytes;
+	__kernel_pid_t msg_lspid;
+	__kernel_pid_t msg_lrpid;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct msginfo {
+	int msgpool;
+	int msgmap;
+	int msgmax;
+	int msgmnb;
+	int msgmni;
+	int msgssz;
+	int msgtql;
+	short unsigned int msgseg;
+};
+
+typedef u16 compat_ipc_pid_t;
+
+struct compat_msqid64_ds {
+	struct compat_ipc64_perm msg_perm;
+	compat_ulong_t msg_stime;
+	compat_ulong_t msg_stime_high;
+	compat_ulong_t msg_rtime;
+	compat_ulong_t msg_rtime_high;
+	compat_ulong_t msg_ctime;
+	compat_ulong_t msg_ctime_high;
+	compat_ulong_t msg_cbytes;
+	compat_ulong_t msg_qnum;
+	compat_ulong_t msg_qbytes;
+	compat_pid_t msg_lspid;
+	compat_pid_t msg_lrpid;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct msg_queue {
+	struct kern_ipc_perm q_perm;
+	time64_t q_stime;
+	time64_t q_rtime;
+	time64_t q_ctime;
+	long unsigned int q_cbytes;
+	long unsigned int q_qnum;
+	long unsigned int q_qbytes;
+	struct pid *q_lspid;
+	struct pid *q_lrpid;
+	struct list_head q_messages;
+	struct list_head q_receivers;
+	struct list_head q_senders;
+	long: 64;
+	long: 64;
+};
+
+struct msg_receiver {
+	struct list_head r_list;
+	struct task_struct *r_tsk;
+	int r_mode;
+	long int r_msgtype;
+	long int r_maxsize;
+	struct msg_msg *r_msg;
+};
+
+struct msg_sender {
+	struct list_head list;
+	struct task_struct *tsk;
+	size_t msgsz;
+};
+
+struct compat_msqid_ds {
+	struct compat_ipc_perm msg_perm;
+	compat_uptr_t msg_first;
+	compat_uptr_t msg_last;
+	old_time32_t msg_stime;
+	old_time32_t msg_rtime;
+	old_time32_t msg_ctime;
+	compat_ulong_t msg_lcbytes;
+	compat_ulong_t msg_lqbytes;
+	short unsigned int msg_cbytes;
+	short unsigned int msg_qnum;
+	short unsigned int msg_qbytes;
+	compat_ipc_pid_t msg_lspid;
+	compat_ipc_pid_t msg_lrpid;
+};
+
+struct compat_msgbuf {
+	compat_long_t mtype;
+	char mtext[1];
+};
+
+struct trusted_key_options {
+	uint16_t keytype;
+	uint32_t keyhandle;
+	unsigned char keyauth[20];
+	uint32_t blobauth_len;
+	unsigned char blobauth[20];
+	uint32_t pcrinfo_len;
+	unsigned char pcrinfo[64];
+	int pcrlock;
+	uint32_t hash;
+	uint32_t policydigest_len;
+	unsigned char policydigest[64];
+	uint32_t policyhandle;
+};
+
+struct osapsess {
+	uint32_t handle;
+	unsigned char secret[20];
+	unsigned char enonce[20];
+};
+
+enum {
+	SEAL_keytype = 1,
+	SRK_keytype = 4,
+};
+
+struct tpm_digests {
+	unsigned char encauth[20];
+	unsigned char pubauth[20];
+	unsigned char xorwork[40];
+	unsigned char xorhash[20];
+	unsigned char nonceodd[20];
+};
+
+enum {
+	Opt_err___9 = 0,
+	Opt_keyhandle = 1,
+	Opt_keyauth = 2,
+	Opt_blobauth = 3,
+	Opt_pcrinfo = 4,
+	Opt_pcrlock = 5,
+	Opt_migratable = 6,
+	Opt_hash___2 = 7,
+	Opt_policydigest = 8,
+	Opt_policyhandle = 9,
+};
+
+struct selinux_policy_convert_data;
+
+struct selinux_load_state {
+	struct selinux_policy *policy;
+	struct selinux_policy_convert_data *convert_data;
+};
+
+enum sel_inos {
+	SEL_ROOT_INO = 2,
+	SEL_LOAD = 3,
+	SEL_ENFORCE = 4,
+	SEL_CONTEXT = 5,
+	SEL_ACCESS = 6,
+	SEL_CREATE = 7,
+	SEL_RELABEL = 8,
+	SEL_USER = 9,
+	SEL_POLICYVERS = 10,
+	SEL_COMMIT_BOOLS = 11,
+	SEL_MLS = 12,
+	SEL_DISABLE = 13,
+	SEL_MEMBER = 14,
+	SEL_CHECKREQPROT = 15,
+	SEL_COMPAT_NET = 16,
+	SEL_REJECT_UNKNOWN = 17,
+	SEL_DENY_UNKNOWN = 18,
+	SEL_STATUS = 19,
+	SEL_POLICY = 20,
+	SEL_VALIDATE_TRANS = 21,
+	SEL_INO_NEXT = 22,
+};
+
+struct selinux_fs_info {
+	struct dentry *bool_dir;
+	unsigned int bool_num;
+	char **bool_pending_names;
+	unsigned int *bool_pending_values;
+	struct dentry *class_dir;
+	long unsigned int last_class_ino;
+	bool policy_opened;
+	struct dentry *policycap_dir;
+	long unsigned int last_ino;
+	struct selinux_state *state;
+	struct super_block *sb;
+};
+
+struct policy_load_memory {
+	size_t len;
+	void *data;
+};
+
+struct pkey_security_struct {
+	u64 subnet_prefix;
+	u16 pkey;
+	u32 sid;
+};
+
+struct sel_ib_pkey_bkt {
+	int size;
+	struct list_head list;
+};
+
+struct sel_ib_pkey {
+	struct pkey_security_struct psec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct landlock_layer {
+	u16 level;
+	access_mask_t access;
+};
+
+struct landlock_rule {
+	struct rb_node node;
+	struct landlock_object *object;
+	u32 num_layers;
+	struct landlock_layer layers[0];
+};
+
+typedef u16 layer_mask_t;
+
+struct landlock_inode_security {
+	struct landlock_object *object;
+};
+
+struct landlock_superblock_security {
+	atomic_long_t inode_refs;
+};
+
+enum header_fields {
+	HDR_PCR = 0,
+	HDR_DIGEST = 1,
+	HDR_TEMPLATE_NAME = 2,
+	HDR_TEMPLATE_DATA = 3,
+	HDR__LAST = 4,
+};
+
+struct evm_xattr {
+	struct evm_ima_xattr_data data;
+	u8 digest[20];
+};
+
+struct rsa_asn1_template {
+	const char *name;
+	const u8 *data;
+	size_t size;
+};
+
+struct pkcs1pad_ctx {
+	struct crypto_akcipher *child;
+	unsigned int key_size;
+};
+
+struct pkcs1pad_inst_ctx {
+	struct crypto_akcipher_spawn spawn;
+	const struct rsa_asn1_template *digest_info;
+};
+
+struct pkcs1pad_request {
+	struct scatterlist in_sg[2];
+	struct scatterlist out_sg[1];
+	uint8_t *in_buf;
+	uint8_t *out_buf;
+	long: 64;
+	long: 64;
+	struct akcipher_request child_req;
+};
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+struct blake2b_state {
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[128];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 4089235720,
+	BLAKE2B_IV1 = 2227873595,
+	BLAKE2B_IV2 = 4271175723,
+	BLAKE2B_IV3 = 1595750129,
+	BLAKE2B_IV4 = 2917565137,
+	BLAKE2B_IV5 = 725511199,
+	BLAKE2B_IV6 = 4215389547,
+	BLAKE2B_IV7 = 327033209,
+};
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *, const u8 *, size_t, u32);
+
+struct blake2b_tfm_ctx {
+	u8 key[64];
+	unsigned int keylen;
+};
+
+struct ccm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn mac;
+};
+
+struct crypto_ccm_ctx {
+	struct crypto_ahash *mac;
+	struct crypto_skcipher *ctr;
+};
+
+struct crypto_rfc4309_ctx {
+	struct crypto_aead *child;
+	u8 nonce[3];
+};
+
+struct crypto_rfc4309_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct aead_request subreq;
+};
+
+struct crypto_ccm_req_priv_ctx {
+	u8 odata[16];
+	u8 idata[16];
+	u8 auth_tag[16];
+	u32 flags;
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	long: 64;
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	};
+};
+
+struct cbcmac_tfm_ctx {
+	struct crypto_cipher *child;
+};
+
+struct cbcmac_desc_ctx {
+	unsigned int len;
+};
+
+struct xxhash64_tfm_ctx {
+	u64 seed;
+};
+
+struct xxhash64_desc_ctx {
+	struct xxh64_state xxhstate;
+};
+
+struct rand_data;
+
+struct jitterentropy {
+	spinlock_t jent_lock;
+	struct rand_data *entropy_collector;
+	unsigned int reset_cnt;
+};
+
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
+};
+
+struct kpp_secret {
+	short unsigned int type;
+	short unsigned int len;
+};
+
+enum x509_actions {
+	ACT_x509_extract_key_data = 0,
+	ACT_x509_extract_name_segment = 1,
+	ACT_x509_note_OID = 2,
+	ACT_x509_note_issuer = 3,
+	ACT_x509_note_not_after = 4,
+	ACT_x509_note_not_before = 5,
+	ACT_x509_note_params = 6,
+	ACT_x509_note_serial = 7,
+	ACT_x509_note_sig_algo = 8,
+	ACT_x509_note_signature = 9,
+	ACT_x509_note_subject = 10,
+	ACT_x509_note_tbs_certificate = 11,
+	ACT_x509_process_extension = 12,
+	NR__x509_actions = 13,
+};
+
+enum x509_akid_actions {
+	ACT_x509_akid_note_kid = 0,
+	ACT_x509_akid_note_name = 1,
+	ACT_x509_akid_note_serial = 2,
+	ACT_x509_extract_name_segment___2 = 3,
+	ACT_x509_note_OID___2 = 4,
+	NR__x509_akid_actions = 5,
+};
+
+struct x509_parse_context {
+	struct x509_certificate *cert;
+	long unsigned int data;
+	const void *key;
+	size_t key_size;
+	const void *params;
+	size_t params_size;
+	enum OID key_algo;
+	enum OID last_oid;
+	enum OID sig_algo;
+	u8 o_size;
+	u8 cn_size;
+	u8 email_size;
+	u16 o_offset;
+	u16 cn_offset;
+	u16 email_offset;
+	unsigned int raw_akid_size;
+	const void *raw_akid;
+	const void *akid_raw_issuer;
+	unsigned int akid_raw_issuer_size;
+};
+
+struct mz_hdr {
+	uint16_t magic;
+	uint16_t lbsize;
+	uint16_t blocks;
+	uint16_t relocs;
+	uint16_t hdrsize;
+	uint16_t min_extra_pps;
+	uint16_t max_extra_pps;
+	uint16_t ss;
+	uint16_t sp;
+	uint16_t checksum;
+	uint16_t ip;
+	uint16_t cs;
+	uint16_t reloc_table_offset;
+	uint16_t overlay_num;
+	uint16_t reserved0[4];
+	uint16_t oem_id;
+	uint16_t oem_info;
+	uint16_t reserved1[10];
+	uint32_t peaddr;
+	char message[0];
+};
+
+struct pe_hdr {
+	uint32_t magic;
+	uint16_t machine;
+	uint16_t sections;
+	uint32_t timestamp;
+	uint32_t symbol_table;
+	uint32_t symbols;
+	uint16_t opt_hdr_size;
+	uint16_t flags;
+};
+
+struct pe32_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint32_t data_base;
+	uint32_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint32_t stack_size_req;
+	uint32_t stack_size;
+	uint32_t heap_size_req;
+	uint32_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct pe32plus_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint64_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint64_t stack_size_req;
+	uint64_t stack_size;
+	uint64_t heap_size_req;
+	uint64_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct data_dirent {
+	uint32_t virtual_address;
+	uint32_t size;
+};
+
+struct data_directory {
+	struct data_dirent exports;
+	struct data_dirent imports;
+	struct data_dirent resources;
+	struct data_dirent exceptions;
+	struct data_dirent certs;
+	struct data_dirent base_relocations;
+	struct data_dirent debug;
+	struct data_dirent arch;
+	struct data_dirent global_ptr;
+	struct data_dirent tls;
+	struct data_dirent load_config;
+	struct data_dirent bound_imports;
+	struct data_dirent import_addrs;
+	struct data_dirent delay_imports;
+	struct data_dirent clr_runtime_hdr;
+	struct data_dirent reserved;
+};
+
+struct win_certificate {
+	uint32_t length;
+	uint16_t revision;
+	uint16_t cert_type;
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 500,
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
+};
+
+struct d_partition {
+	__le32 p_size;
+	__le32 p_offset;
+	__le32 p_fsize;
+	u8 p_fstype;
+	u8 p_frag;
+	__le16 p_cpg;
+};
+
+struct disklabel {
+	__le32 d_magic;
+	__le16 d_type;
+	__le16 d_subtype;
+	u8 d_typename[16];
+	u8 d_packname[16];
+	__le32 d_secsize;
+	__le32 d_nsectors;
+	__le32 d_ntracks;
+	__le32 d_ncylinders;
+	__le32 d_secpercyl;
+	__le32 d_secprtunit;
+	__le16 d_sparespertrack;
+	__le16 d_sparespercyl;
+	__le32 d_acylinders;
+	__le16 d_rpm;
+	__le16 d_interleave;
+	__le16 d_trackskew;
+	__le16 d_cylskew;
+	__le32 d_headswitch;
+	__le32 d_trkseek;
+	__le32 d_flags;
+	__le32 d_drivedata[5];
+	__le32 d_spare[5];
+	__le32 d_magic2;
+	__le16 d_checksum;
+	__le16 d_npartitions;
+	__le32 d_bbsize;
+	__le32 d_sbsize;
+	struct d_partition d_partitions[18];
+};
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+enum {
+	MILLION = 1000000,
+	MIN_PERIOD = 1000,
+	MAX_PERIOD = 1000000,
+	MARGIN_MIN_PCT = 10,
+	MARGIN_LOW_PCT = 20,
+	MARGIN_TARGET_PCT = 50,
+	INUSE_ADJ_STEP_PCT = 25,
+	TIMER_SLACK_PCT = 1,
+	WEIGHT_ONE = 65536,
+	VTIME_PER_SEC_SHIFT = 37,
+	VTIME_PER_SEC = 0,
+	VTIME_PER_USEC = 137438,
+	VTIME_PER_NSEC = 137,
+	VRATE_MIN_PPM = 10000,
+	VRATE_MAX_PPM = 100000000,
+	VRATE_MIN = 1374,
+	VRATE_CLAMP_ADJ_PCT = 4,
+	RQ_WAIT_BUSY_PCT = 5,
+	UNBUSY_THR_PCT = 75,
+	MIN_DELAY_THR_PCT = 500,
+	MAX_DELAY_THR_PCT = 25000,
+	MIN_DELAY = 250,
+	MAX_DELAY = 250000,
+	DFGV_USAGE_PCT = 50,
+	DFGV_PERIOD = 100000,
+	MAX_LAGGING_PERIODS = 10,
+	AUTOP_CYCLE_NSEC = 1410065408,
+	IOC_PAGE_SHIFT = 12,
+	IOC_PAGE_SIZE = 4096,
+	IOC_SECT_TO_PAGE_SHIFT = 3,
+	LCOEF_RANDIO_PAGES = 4096,
+};
+
+enum ioc_running {
+	IOC_IDLE = 0,
+	IOC_RUNNING = 1,
+	IOC_STOP = 2,
+};
+
+enum {
+	QOS_ENABLE = 0,
+	QOS_CTRL = 1,
+	NR_QOS_CTRL_PARAMS = 2,
+};
+
+enum {
+	QOS_RPPM = 0,
+	QOS_RLAT = 1,
+	QOS_WPPM = 2,
+	QOS_WLAT = 3,
+	QOS_MIN = 4,
+	QOS_MAX = 5,
+	NR_QOS_PARAMS = 6,
+};
+
+enum {
+	COST_CTRL = 0,
+	COST_MODEL = 1,
+	NR_COST_CTRL_PARAMS = 2,
+};
+
+enum {
+	I_LCOEF_RBPS = 0,
+	I_LCOEF_RSEQIOPS = 1,
+	I_LCOEF_RRANDIOPS = 2,
+	I_LCOEF_WBPS = 3,
+	I_LCOEF_WSEQIOPS = 4,
+	I_LCOEF_WRANDIOPS = 5,
+	NR_I_LCOEFS = 6,
+};
+
+enum {
+	LCOEF_RPAGE = 0,
+	LCOEF_RSEQIO = 1,
+	LCOEF_RRANDIO = 2,
+	LCOEF_WPAGE = 3,
+	LCOEF_WSEQIO = 4,
+	LCOEF_WRANDIO = 5,
+	NR_LCOEFS = 6,
+};
+
+enum {
+	AUTOP_INVALID = 0,
+	AUTOP_HDD = 1,
+	AUTOP_SSD_QD1 = 2,
+	AUTOP_SSD_DFL = 3,
+	AUTOP_SSD_FAST = 4,
+};
+
+struct ioc_params {
+	u32 qos[6];
+	u64 i_lcoefs[6];
+	u64 lcoefs[6];
+	u32 too_fast_vrate_pct;
+	u32 too_slow_vrate_pct;
+};
+
+struct ioc_margins {
+	s64 min;
+	s64 low;
+	s64 target;
+};
+
+struct ioc_missed {
+	local_t nr_met;
+	local_t nr_missed;
+	u32 last_met;
+	u32 last_missed;
+};
+
+struct ioc_pcpu_stat {
+	struct ioc_missed missed[2];
+	local64_t rq_wait_ns;
+	u64 last_rq_wait_ns;
+};
+
+struct ioc {
+	struct rq_qos rqos;
+	bool enabled;
+	struct ioc_params params;
+	struct ioc_margins margins;
+	u32 period_us;
+	u32 timer_slack_ns;
+	u64 vrate_min;
+	u64 vrate_max;
+	spinlock_t lock;
+	struct timer_list timer;
+	struct list_head active_iocgs;
+	struct ioc_pcpu_stat *pcpu_stat;
+	enum ioc_running running;
+	atomic64_t vtime_rate;
+	u64 vtime_base_rate;
+	s64 vtime_err;
+	seqcount_spinlock_t period_seqcount;
+	u64 period_at;
+	u64 period_at_vtime;
+	atomic64_t cur_period;
+	int busy_level;
+	bool weights_updated;
+	atomic_t hweight_gen;
+	u64 dfgv_period_at;
+	u64 dfgv_period_rem;
+	u64 dfgv_usage_us_sum;
+	u64 autop_too_fast_at;
+	u64 autop_too_slow_at;
+	int autop_idx;
+	bool user_qos_params: 1;
+	bool user_cost_model: 1;
+};
+
+struct iocg_pcpu_stat {
+	local64_t abs_vusage;
+};
+
+struct iocg_stat {
+	u64 usage_us;
+	u64 wait_us;
+	u64 indebt_us;
+	u64 indelay_us;
+};
+
+struct ioc_gq {
+	struct blkg_policy_data pd;
+	struct ioc *ioc;
+	u32 cfg_weight;
+	u32 weight;
+	u32 active;
+	u32 inuse;
+	u32 last_inuse;
+	s64 saved_margin;
+	sector_t cursor;
+	atomic64_t vtime;
+	atomic64_t done_vtime;
+	u64 abs_vdebt;
+	u64 delay;
+	u64 delay_at;
+	atomic64_t active_period;
+	struct list_head active_list;
+	u64 child_active_sum;
+	u64 child_inuse_sum;
+	u64 child_adjusted_sum;
+	int hweight_gen;
+	u32 hweight_active;
+	u32 hweight_inuse;
+	u32 hweight_donating;
+	u32 hweight_after_donation;
+	struct list_head walk_list;
+	struct list_head surplus_list;
+	struct wait_queue_head waitq;
+	struct hrtimer waitq_timer;
+	u64 activated_at;
+	struct iocg_pcpu_stat *pcpu_stat;
+	struct iocg_stat stat;
+	struct iocg_stat last_stat;
+	u64 last_stat_abs_vusage;
+	u64 usage_delta_us;
+	u64 wait_since;
+	u64 indebt_since;
+	u64 indelay_since;
+	int level;
+	struct ioc_gq *ancestors[0];
+};
+
+struct ioc_cgrp {
+	struct blkcg_policy_data cpd;
+	unsigned int dfl_weight;
+};
+
+struct ioc_now {
+	u64 now_ns;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+};
+
+struct iocg_wait {
+	struct wait_queue_entry wait;
+	struct bio *bio;
+	u64 abs_cost;
+	bool committed;
+};
+
+struct iocg_wake_ctx {
+	struct ioc_gq *iocg;
+	u32 hw_inuse;
+	s64 vbudget;
+};
+
+struct trace_event_raw_iocost_iocg_state {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+	u64 last_period;
+	u64 cur_period;
+	u64 vtime;
+	u32 weight;
+	u32 inuse;
+	u64 hweight_active;
+	u64 hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocg_inuse_update {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u32 old_inuse;
+	u32 new_inuse;
+	u64 old_hweight_inuse;
+	u64 new_hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_ioc_vrate_adj {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u64 old_vrate;
+	u64 new_vrate;
+	int busy_level;
+	u32 read_missed_ppm;
+	u32 write_missed_ppm;
+	u32 rq_wait_pct;
+	int nr_lagging;
+	int nr_shortages;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_iocg_forgive_debt {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u32 usage_pct;
+	u64 old_debt;
+	u64 new_debt;
+	u64 old_delay;
+	u64 new_delay;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iocost_iocg_state {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocg_inuse_update {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocost_ioc_vrate_adj {
+	u32 devname;
+};
+
+struct trace_event_data_offsets_iocost_iocg_forgive_debt {
+	u32 devname;
+	u32 cgroup;
+};
+
+typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
+
+typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
+
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY = 1,
+};
+
+struct blk_zone_report {
+	__u64 sector;
+	__u32 nr_zones;
+	__u32 flags;
+	struct blk_zone zones[0];
+};
+
+struct blk_zone_range {
+	__u64 sector;
+	__u64 nr_sectors;
+};
+
+struct zone_report_args {
+	struct blk_zone *zones;
+};
+
+struct blk_revalidate_zone_args {
+	struct gendisk *disk;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	unsigned int nr_zones;
+	sector_t zone_sectors;
+	sector_t sector;
+};
+
+struct blk_crypto_kobj {
+	struct kobject kobj;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_crypto_profile *, struct blk_crypto_attr *, char *);
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr *addr;
+	int *addr_len;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr *addr;
+	int addr_len;
+	bool in_progress;
+};
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr *umsg_compat;
+		struct user_msghdr *umsg;
+		void *buf;
+	};
+	unsigned int len;
+	unsigned int done_io;
+	unsigned int msg_flags;
+	u16 flags;
+	u16 addr_len;
+	void *addr;
+	struct io_kiocb *notif;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct genradix_iter {
+	size_t offset;
+	size_t pos;
+};
+
+struct genradix_node {
+	union {
+		struct genradix_node *children[512];
+		u8 data[4096];
+	};
+};
+
+struct test_fail {
+	const char *str;
+	unsigned int base;
+};
+
+struct test_s8 {
+	const char *str;
+	unsigned int base;
+	s8 expected_res;
+};
+
+struct test_u8 {
+	const char *str;
+	unsigned int base;
+	u8 expected_res;
+};
+
+struct test_s16 {
+	const char *str;
+	unsigned int base;
+	s16 expected_res;
+};
+
+struct test_u16 {
+	const char *str;
+	unsigned int base;
+	u16 expected_res;
+};
+
+struct test_s32 {
+	const char *str;
+	unsigned int base;
+	s32 expected_res;
+};
+
+struct test_u32 {
+	const char *str;
+	unsigned int base;
+	u32 expected_res;
+};
+
+struct test_s64 {
+	const char *str;
+	unsigned int base;
+	s64 expected_res;
+};
+
+struct test_u64 {
+	const char *str;
+	unsigned int base;
+	u64 expected_res;
+};
+
+struct test_ll {
+	const char *str;
+	unsigned int base;
+	long long int expected_res;
+};
+
+struct test_ull {
+	const char *str;
+	unsigned int base;
+	long long unsigned int expected_res;
+};
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
+};
+
+struct chacha20poly1305_testvec {
+	const u8 *input;
+	const u8 *output;
+	const u8 *assoc;
+	const u8 *nonce;
+	const u8 *key;
+	size_t ilen;
+	size_t alen;
+	size_t nlen;
+	bool failure;
+};
+
+enum {
+	MAXIMUM_TEST_BUFFER_LEN = 4096,
+};
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	long unsigned int bits[0];
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	long unsigned int offset;
+};
+
+struct ts_linear_state {
+	unsigned int len;
+	const void *data;
+};
+
+enum gcry_mpi_format {
+	GCRYMPI_FMT_NONE = 0,
+	GCRYMPI_FMT_STD = 1,
+	GCRYMPI_FMT_PGP = 2,
+	GCRYMPI_FMT_SSH = 3,
+	GCRYMPI_FMT_HEX = 4,
+	GCRYMPI_FMT_USG = 5,
+	GCRYMPI_FMT_OPAQUE = 8,
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
+};
+
+typedef struct {
+	long unsigned int key[2];
+} hsiphash_key_t;
+
+enum {
+	SUNXI_SRC_TYPE_LEVEL_LOW = 0,
+	SUNXI_SRC_TYPE_EDGE_FALLING = 1,
+	SUNXI_SRC_TYPE_LEVEL_HIGH = 2,
+	SUNXI_SRC_TYPE_EDGE_RISING = 3,
+};
+
+struct sunxi_sc_nmi_reg_offs {
+	u32 ctrl;
+	u32 pend;
+	u32 enable;
+};
+
+struct brcmstb_intc_init_params {
+	irq_flow_handler_t handler;
+	int cpu_status;
+	int cpu_clear;
+	int cpu_mask_status;
+	int cpu_mask_set;
+	int cpu_mask_clear;
+};
+
+struct brcmstb_l2_intc_data {
+	struct irq_domain *domain;
+	struct irq_chip_generic *gc;
+	int status_offset;
+	int mask_offset;
+	bool can_wake;
+	u32 saved_mask;
+};
+
+struct ls_extirq_data {
+	struct regmap *syscon;
+	u32 intpcr;
+	bool is_ls1021a_or_ls1043a;
+	u32 nirq;
+	struct irq_fwspec map[12];
+};
+
+struct intmux_irqchip_data {
+	u32 saved_reg;
+	int chanidx;
+	int irq;
+	struct irq_domain *domain;
+};
+
+struct intmux_data {
+	raw_spinlock_t lock;
+	void *regs;
+	struct clk *ipg_clk;
+	int channum;
+	struct intmux_irqchip_data irqchip_data[0];
+};
+
+struct mc_rsp_create {
+	__le32 object_id;
+};
+
+struct mc_rsp_api_ver {
+	__le16 major_ver;
+	__le16 minor_ver;
+};
+
+struct dprc_cmd_open {
+	__le32 container_id;
+};
+
+struct dprc_cmd_reset_container {
+	__le32 child_container_id;
+	__le32 options;
+};
+
+struct dprc_cmd_set_irq {
+	__le32 irq_val;
+	u8 irq_index;
+	u8 pad[3];
+	__le64 irq_addr;
+	__le32 irq_num;
+};
+
+struct dprc_cmd_set_irq_enable {
+	u8 enable;
+	u8 pad[3];
+	u8 irq_index;
+};
+
+struct dprc_cmd_set_irq_mask {
+	__le32 mask;
+	u8 irq_index;
+};
+
+struct dprc_cmd_get_irq_status {
+	__le32 status;
+	u8 irq_index;
+};
+
+struct dprc_rsp_get_irq_status {
+	__le32 status;
+};
+
+struct dprc_cmd_clear_irq_status {
+	__le32 status;
+	u8 irq_index;
+};
+
+struct dprc_rsp_get_attributes {
+	__le32 container_id;
+	__le32 icid;
+	__le32 options;
+	__le32 portal_id;
+};
+
+struct dprc_rsp_get_obj_count {
+	__le32 pad;
+	__le32 obj_count;
+};
+
+struct dprc_cmd_get_obj {
+	__le32 obj_index;
+};
+
+struct dprc_rsp_get_obj {
+	__le32 pad0;
+	__le32 id;
+	__le16 vendor;
+	u8 irq_count;
+	u8 region_count;
+	__le32 state;
+	__le16 version_major;
+	__le16 version_minor;
+	__le16 flags;
+	__le16 pad1;
+	u8 type[16];
+	u8 label[16];
+};
+
+struct dprc_cmd_get_obj_region {
+	__le32 obj_id;
+	__le16 pad0;
+	u8 region_index;
+	u8 pad1;
+	__le64 pad2[2];
+	u8 obj_type[16];
+};
+
+struct dprc_rsp_get_obj_region {
+	__le64 pad0;
+	__le64 base_offset;
+	__le32 size;
+	u8 type;
+	u8 pad2[3];
+	__le32 flags;
+	__le32 pad3;
+	__le64 base_addr;
+};
+
+struct dprc_cmd_set_obj_irq {
+	__le32 irq_val;
+	u8 irq_index;
+	u8 pad[3];
+	__le64 irq_addr;
+	__le32 irq_num;
+	__le32 obj_id;
+	u8 obj_type[16];
+};
+
+struct dprc_cmd_get_connection {
+	__le32 ep1_id;
+	__le16 ep1_interface_id;
+	u8 pad[2];
+	u8 ep1_type[16];
+};
+
+struct dprc_rsp_get_connection {
+	__le64 pad[3];
+	__le32 ep2_id;
+	__le16 ep2_interface_id;
+	__le16 pad1;
+	u8 ep2_type[16];
+	__le32 state;
+};
+
+struct dprc_irq_cfg {
+	phys_addr_t paddr;
+	u32 val;
+	int irq_num;
+};
+
+struct uapi_priv_data {
+	struct fsl_mc_uapi *uapi;
+	struct fsl_mc_io *mc_io;
+};
+
+struct fsl_mc_cmd_desc {
+	u16 cmdid_value;
+	u16 cmdid_mask;
+	int size;
+	bool token;
+	int flags;
+};
+
+enum fsl_mc_cmd_index {
+	DPDBG_DUMP = 0,
+	DPDBG_SET = 1,
+	DPRC_GET_CONTAINER_ID = 2,
+	DPRC_CREATE_CONT = 3,
+	DPRC_DESTROY_CONT = 4,
+	DPRC_ASSIGN = 5,
+	DPRC_UNASSIGN = 6,
+	DPRC_GET_OBJ_COUNT = 7,
+	DPRC_GET_OBJ = 8,
+	DPRC_GET_RES_COUNT = 9,
+	DPRC_GET_RES_IDS = 10,
+	DPRC_SET_OBJ_LABEL = 11,
+	DPRC_SET_LOCKED = 12,
+	DPRC_CONNECT = 13,
+	DPRC_DISCONNECT = 14,
+	DPRC_GET_POOL = 15,
+	DPRC_GET_POOL_COUNT = 16,
+	DPRC_GET_CONNECTION = 17,
+	DPCI_GET_LINK_STATE = 18,
+	DPCI_GET_PEER_ATTR = 19,
+	DPAIOP_GET_SL_VERSION = 20,
+	DPAIOP_GET_STATE = 21,
+	DPMNG_GET_VERSION = 22,
+	DPSECI_GET_TX_QUEUE = 23,
+	DPMAC_GET_COUNTER = 24,
+	DPMAC_GET_MAC_ADDR = 25,
+	DPNI_SET_PRIM_MAC = 26,
+	DPNI_GET_PRIM_MAC = 27,
+	DPNI_GET_STATISTICS = 28,
+	DPNI_GET_LINK_STATE = 29,
+	DPNI_GET_MAX_FRAME_LENGTH = 30,
+	DPSW_GET_TAILDROP = 31,
+	DPSW_SET_TAILDROP = 32,
+	DPSW_IF_GET_COUNTER = 33,
+	DPSW_IF_GET_MAX_FRAME_LENGTH = 34,
+	DPDMUX_GET_COUNTER = 35,
+	DPDMUX_IF_GET_MAX_FRAME_LENGTH = 36,
+	GET_ATTR = 37,
+	GET_IRQ_MASK = 38,
+	GET_IRQ_STATUS = 39,
+	CLOSE = 40,
+	OPEN = 41,
+	GET_API_VERSION = 42,
+	DESTROY = 43,
+	CREATE = 44,
+};
+
+struct armada_37xx_pin_group {
+	const char *name;
+	unsigned int start_pin;
+	unsigned int npins;
+	u32 reg_mask;
+	u32 val[3];
+	unsigned int extra_pin;
+	unsigned int extra_npins;
+	const char *funcs[3];
+	unsigned int *pins;
+};
+
+struct armada_37xx_pin_data {
+	u8 nr_pins;
+	char *name;
+	struct armada_37xx_pin_group *groups;
+	int ngroups;
+};
+
+struct armada_37xx_pmx_func {
+	const char *name;
+	const char **groups;
+	unsigned int ngroups;
+};
+
+struct armada_37xx_pm_state {
+	u32 out_en_l;
+	u32 out_en_h;
+	u32 out_val_l;
+	u32 out_val_h;
+	u32 irq_en_l;
+	u32 irq_en_h;
+	u32 irq_pol_l;
+	u32 irq_pol_h;
+	u32 selection;
+};
+
+struct armada_37xx_pinctrl {
+	struct regmap *regmap;
+	void *base;
+	const struct armada_37xx_pin_data *data;
+	struct device *dev;
+	struct gpio_chip gpio_chip;
+	struct irq_chip irq_chip;
+	raw_spinlock_t irq_lock;
+	struct pinctrl_desc pctl;
+	struct pinctrl_dev *pctl_dev;
+	struct armada_37xx_pin_group *groups;
+	unsigned int ngroups;
+	struct armada_37xx_pmx_func *funcs;
+	unsigned int nfuncs;
+	struct armada_37xx_pm_state pm;
+};
+
+struct gpio_pin_range {
+	struct list_head node;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_gpio_range range;
+};
+
+struct gpiod_lookup {
+	const char *key;
+	u16 chip_hwnum;
+	const char *con_id;
+	unsigned int idx;
+	long unsigned int flags;
+};
+
+struct gpiod_lookup_table {
+	struct list_head list;
+	const char *dev_id;
+	struct gpiod_lookup table[0];
+};
+
+struct gpiod_hog {
+	struct list_head list;
+	const char *chip_label;
+	u16 chip_hwnum;
+	const char *line_name;
+	long unsigned int lflags;
+	int dflags;
+};
+
+enum {
+	GPIOLINE_CHANGED_REQUESTED = 1,
+	GPIOLINE_CHANGED_RELEASED = 2,
+	GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct trace_event_raw_gpio_direction {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int in;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_gpio_value {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int get;
+	int value;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_gpio_direction {};
+
+struct trace_event_data_offsets_gpio_value {};
+
+typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
+
+struct pl061_context_save_regs {
+	u8 gpio_data;
+	u8 gpio_dir;
+	u8 gpio_is;
+	u8 gpio_ibe;
+	u8 gpio_iev;
+	u8 gpio_ie;
+};
+
+struct pl061 {
+	raw_spinlock_t lock;
+	void *base;
+	struct gpio_chip gc;
+	int parent_irq;
+	struct pl061_context_save_regs csave_regs;
+};
+
+struct pci_bridge_reg_behavior {
+	u32 ro;
+	u32 rw;
+	u32 w1c;
+};
+
+enum {
+	PCI_BRIDGE_EMUL_NO_PREFMEM_FORWARD = 1,
+	PCI_BRIDGE_EMUL_NO_IO_FORWARD = 2,
+};
+
+struct cdns_plat_pcie {
+	struct cdns_pcie *pcie;
+	bool is_rc;
+};
+
+struct cdns_plat_pcie_of_data {
+	bool is_rc;
+};
+
+enum backlight_update_reason {
+	BACKLIGHT_UPDATE_HOTKEY = 0,
+	BACKLIGHT_UPDATE_SYSFS = 1,
+};
+
+enum backlight_notification {
+	BACKLIGHT_REGISTERED = 0,
+	BACKLIGHT_UNREGISTERED = 1,
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+enum {
+	FBCON_LOGO_CANSHOW = 4294967295,
+	FBCON_LOGO_DRAW = 4294967294,
+	FBCON_LOGO_DONTSHOW = 4294967293,
+};
+
+struct acpi_lpat {
+	int temp;
+	int raw;
+};
+
+struct acpi_lpat_conversion_table {
+	struct acpi_lpat *lpat;
+	int lpat_count;
+};
+
+struct acpi_irq_parse_one_ctx {
+	int rc;
+	unsigned int index;
+	long unsigned int *res_flags;
+	struct irq_fwspec *fwspec;
+	bool skip_producer_check;
+};
+
+enum {
+	AML_FIELD_UPDATE_PRESERVE = 0,
+	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
+	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
+};
+
+enum {
+	AML_FIELD_ATTRIB_QUICK = 2,
+	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
+	AML_FIELD_ATTRIB_BYTE = 6,
+	AML_FIELD_ATTRIB_WORD = 8,
+	AML_FIELD_ATTRIB_BLOCK = 10,
+	AML_FIELD_ATTRIB_BYTES = 11,
+	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
+	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
+	AML_FIELD_ATTRIB_RAW_BYTES = 14,
+	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
+};
+
+typedef int mhp_t;
+
+struct acpi_memory_info {
+	struct list_head list;
+	u64 start_addr;
+	u64 length;
+	short unsigned int caching;
+	short unsigned int write_protect;
+	unsigned int enabled: 1;
+};
+
+struct acpi_memory_device {
+	struct acpi_device *device;
+	struct list_head res_list;
+	int mgid;
+};
+
+struct acpi_bert_region {
+	u32 block_status;
+	u32 raw_data_offset;
+	u32 raw_data_length;
+	u32 data_length;
+	u32 error_severity;
+};
+
+struct acpi_table_agdi {
+	struct acpi_table_header header;
+	u8 flags;
+	u8 reserved[3];
+	u32 sdei_event;
+	u32 gsiv;
+};
+
+struct agdi_data {
+	int sdei_event;
+};
+
+struct acpi_vendor_uuid {
+	u8 subtype;
+	u8 data[16];
+};
+
+struct acpipnp_parse_option_s {
+	struct pnp_dev *dev;
+	unsigned int option_flags;
+};
+
+struct bcm2835_cprman {
+	struct device *dev;
+	void *regs;
+	spinlock_t regs_lock;
+	unsigned int soc;
+	const char *real_parent_names[7];
+	struct clk_hw_onecell_data onecell;
+};
+
+struct cprman_plat_data {
+	unsigned int soc;
+};
+
+struct bcm2835_pll_ana_bits;
+
+struct bcm2835_pll_data {
+	const char *name;
+	u32 cm_ctrl_reg;
+	u32 a2w_ctrl_reg;
+	u32 frac_reg;
+	u32 ana_reg_base;
+	u32 reference_enable_mask;
+	u32 lock_mask;
+	u32 flags;
+	const struct bcm2835_pll_ana_bits *ana;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int max_fb_rate;
+};
+
+struct bcm2835_pll_ana_bits {
+	u32 mask0;
+	u32 set0;
+	u32 mask1;
+	u32 set1;
+	u32 mask3;
+	u32 set3;
+	u32 fb_prediv_mask;
+};
+
+struct bcm2835_pll_divider_data {
+	const char *name;
+	const char *source_pll;
+	u32 cm_reg;
+	u32 a2w_reg;
+	u32 load_mask;
+	u32 hold_mask;
+	u32 fixed_divider;
+	u32 flags;
+};
+
+struct bcm2835_clock_data {
+	const char *name;
+	const char * const *parents;
+	int num_mux_parents;
+	unsigned int set_rate_parent;
+	u32 ctl_reg;
+	u32 div_reg;
+	u32 int_bits;
+	u32 frac_bits;
+	u32 flags;
+	bool is_vpu_clock;
+	bool is_mash_clock;
+	bool low_jitter;
+	u32 tcnt_mux;
+	bool round_up;
+};
+
+struct bcm2835_gate_data {
+	const char *name;
+	const char *parent;
+	u32 ctl_reg;
+};
+
+struct bcm2835_pll {
+	struct clk_hw hw;
+	struct bcm2835_cprman *cprman;
+	const struct bcm2835_pll_data *data;
+};
+
+struct bcm2835_pll_divider {
+	struct clk_divider div;
+	struct bcm2835_cprman *cprman;
+	const struct bcm2835_pll_divider_data *data;
+};
+
+struct bcm2835_clock {
+	struct clk_hw hw;
+	struct bcm2835_cprman *cprman;
+	const struct bcm2835_clock_data *data;
+};
+
+struct bcm2835_clk_desc {
+	struct clk_hw * (*clk_register)(struct bcm2835_cprman *, const void *);
+	unsigned int supported;
+	const void *data;
+};
+
+struct hisi_reset_controller {
+	spinlock_t lock;
+	void *membase;
+	struct reset_controller_dev rcdev;
+};
+
+struct clk_frac_pll {
+	struct clk_hw hw;
+	void *base;
+};
+
+struct clk_pllv2 {
+	struct clk_hw hw;
+	void *base;
+};
+
+struct meson_aoclk_reset_controller {
+	struct reset_controller_dev reset;
+	const struct meson_aoclk_data *data;
+	struct regmap *regmap;
+};
+
+struct vid_pll_div {
+	unsigned int shift_val;
+	unsigned int shift_sel;
+	unsigned int divider;
+	unsigned int multiplier;
+};
+
+enum {
+	CP110_CLK_TYPE_CORE = 0,
+	CP110_CLK_TYPE_GATABLE = 1,
+};
+
+struct cp110_gate_clk {
+	struct clk_hw hw;
+	struct regmap *regmap;
+	u8 bit_idx;
+};
+
+enum {
+	P_XO___5 = 0,
+	P_GPLL0___4 = 1,
+	P_GPLL1___3 = 2,
+	P_GPLL4___3 = 3,
+};
+
+enum {
+	P_BI_TCXO___2 = 0,
+	P_AUD_REF_CLK___3 = 1,
+	P_CORE_BI_PLL_TEST_SE___3 = 2,
+	P_GPLL0_OUT_EVEN___2 = 3,
+	P_GPLL0_OUT_MAIN___3 = 4,
+	P_GPLL7_OUT_MAIN___2 = 5,
+	P_GPLL9_OUT_MAIN = 6,
+	P_SLEEP_CLK___6 = 7,
+};
+
+struct _ccu_mult {
+	long unsigned int mult;
+	long unsigned int min;
+	long unsigned int max;
+};
+
+struct _ccu_nk {
+	long unsigned int n;
+	long unsigned int min_n;
+	long unsigned int max_n;
+	long unsigned int k;
+	long unsigned int min_k;
+	long unsigned int max_k;
+};
+
+struct tegra_clk_sync_source {
+	struct clk_hw hw;
+	long unsigned int rate;
+	long unsigned int max_rate;
+};
+
+struct tegra_clk_device {
+	struct notifier_block clk_nb;
+	struct device *dev;
+	struct clk_hw *hw;
+	struct mutex lock;
+};
+
+struct icst_vco {
+	short unsigned int v;
+	unsigned char r;
+	unsigned char s;
+};
+
+enum icst_control_type {
+	ICST_VERSATILE = 0,
+	ICST_INTEGRATOR_AP_CM = 1,
+	ICST_INTEGRATOR_AP_SYS = 2,
+	ICST_INTEGRATOR_AP_PCI = 3,
+	ICST_INTEGRATOR_CP_CM_CORE = 4,
+	ICST_INTEGRATOR_CP_CM_MEM = 5,
+	ICST_INTEGRATOR_IM_PD1 = 6,
+};
+
+struct clk_icst {
+	struct clk_hw hw;
+	struct regmap *map;
+	u32 vcoreg_off;
+	u32 lockreg_off;
+	struct icst_params *params;
+	long unsigned int rate;
+	enum icst_control_type ctype;
+};
+
+struct clk_sp810;
+
+struct clk_sp810_timerclken {
+	struct clk_hw hw;
+	struct clk *clk;
+	struct clk_sp810 *sp810;
+	int channel;
+};
+
+struct clk_sp810 {
+	struct device_node *node;
+	void *base;
+	spinlock_t lock;
+	struct clk_sp810_timerclken timerclken[4];
+};
+
+struct dma_chan_tbl_ent {
+	struct dma_chan *chan;
+};
+
+struct dmaengine_unmap_pool {
+	struct kmem_cache *cache;
+	const char *name;
+	mempool_t *pool;
+	size_t size;
+};
+
+struct apple_pmgr_ps {
+	struct device *dev;
+	struct generic_pm_domain genpd;
+	struct reset_controller_dev rcdev;
+	struct regmap *regmap;
+	u32 offset;
+	u32 min_state;
+};
+
+struct qman_portal;
+
+struct imx8m_blk_ctrl_domain;
+
+struct imx8m_blk_ctrl {
+	struct device *dev;
+	struct notifier_block power_nb;
+	struct device *bus_power_dev;
+	struct regmap *regmap;
+	struct imx8m_blk_ctrl_domain *domains;
+	struct genpd_onecell_data onecell_data;
+};
+
+struct imx8m_blk_ctrl_domain_data;
+
+struct imx8m_blk_ctrl_domain {
+	struct generic_pm_domain genpd;
+	const struct imx8m_blk_ctrl_domain_data *data;
+	struct clk_bulk_data clks[4];
+	struct device *power_dev;
+	struct imx8m_blk_ctrl *bc;
+};
+
+struct imx8m_blk_ctrl_domain_data {
+	const char *name;
+	const char * const *clk_names;
+	int num_clks;
+	const char *gpc_name;
+	u32 rst_mask;
+	u32 clk_mask;
+	u32 mipi_phy_rst_mask;
+};
+
+struct imx8m_blk_ctrl_data {
+	int max_reg;
+	notifier_fn_t power_notifier_fn;
+	const struct imx8m_blk_ctrl_domain_data *domains;
+	int num_domains;
+};
+
+enum cmd_db_hw_type {
+	CMD_DB_HW_INVALID = 0,
+	CMD_DB_HW_MIN = 3,
+	CMD_DB_HW_ARC = 3,
+	CMD_DB_HW_VRM = 4,
+	CMD_DB_HW_BCM = 5,
+	CMD_DB_HW_MAX = 5,
+	CMD_DB_HW_ALL = 255,
+};
+
+struct entry_header {
+	u8 id[8];
+	__le32 priority[2];
+	__le32 addr;
+	__le16 len;
+	__le16 offset;
+};
+
+struct rsc_hdr {
+	__le16 slv_id;
+	__le16 header_offset;
+	__le16 data_offset;
+	__le16 cnt;
+	__le16 version;
+	__le16 reserved[3];
+};
+
+struct cmd_db_header {
+	__le32 version;
+	u8 magic[4];
+	struct rsc_hdr header[8];
+	__le32 checksum;
+	__le32 reserved;
+	u8 data[0];
+};
+
+struct rockchip_grf_value {
+	const char *desc;
+	u32 reg;
+	u32 val;
+};
+
+struct rockchip_grf_info {
+	const struct rockchip_grf_value *values;
+	int num_values;
+};
+
+enum {
+	THRESHOLD_INDEX_0 = 0,
+	THRESHOLD_INDEX_1 = 1,
+	THRESHOLD_INDEX_COUNT = 2,
+};
+
+enum pm_api_cb_id {
+	PM_INIT_SUSPEND_CB = 30,
+	PM_ACKNOWLEDGE_CB = 31,
+	PM_NOTIFY_CB = 32,
+};
+
+enum pm_api_id {
+	PM_GET_API_VERSION = 1,
+	PM_REGISTER_NOTIFIER = 5,
+	PM_SYSTEM_SHUTDOWN = 12,
+	PM_REQUEST_NODE = 13,
+	PM_RELEASE_NODE = 14,
+	PM_SET_REQUIREMENT = 15,
+	PM_RESET_ASSERT = 17,
+	PM_RESET_GET_STATUS = 18,
+	PM_MMIO_WRITE = 19,
+	PM_MMIO_READ = 20,
+	PM_PM_INIT_FINALIZE = 21,
+	PM_FPGA_LOAD = 22,
+	PM_FPGA_GET_STATUS = 23,
+	PM_GET_CHIPID = 24,
+	PM_SECURE_SHA = 26,
+	PM_PINCTRL_REQUEST = 28,
+	PM_PINCTRL_RELEASE = 29,
+	PM_PINCTRL_GET_FUNCTION = 30,
+	PM_PINCTRL_SET_FUNCTION = 31,
+	PM_PINCTRL_CONFIG_PARAM_GET = 32,
+	PM_PINCTRL_CONFIG_PARAM_SET = 33,
+	PM_IOCTL = 34,
+	PM_QUERY_DATA = 35,
+	PM_CLOCK_ENABLE = 36,
+	PM_CLOCK_DISABLE = 37,
+	PM_CLOCK_GETSTATE = 38,
+	PM_CLOCK_SETDIVIDER = 39,
+	PM_CLOCK_GETDIVIDER = 40,
+	PM_CLOCK_SETRATE = 41,
+	PM_CLOCK_GETRATE = 42,
+	PM_CLOCK_SETPARENT = 43,
+	PM_CLOCK_GETPARENT = 44,
+	PM_SECURE_AES = 47,
+	PM_FEATURE_CHECK = 63,
+};
+
+typedef void (*event_cb_func_t)(const u32 *, void *);
+
+struct agent_cb {
+	void *agent_data;
+	event_cb_func_t eve_cb;
+	struct list_head list;
+};
+
+struct registered_event_data {
+	u64 key;
+	enum pm_api_cb_id cb_type;
+	bool wake;
+	struct list_head cb_list_head;
+	struct hlist_node hentry;
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct of_regulator_match {
+	const char *name;
+	void *driver_data;
+	struct regulator_init_data *init_data;
+	struct device_node *of_node;
+	const struct regulator_desc *desc;
+};
+
+struct devm_of_regulator_matches {
+	struct of_regulator_match *matches;
+	unsigned int num_matches;
+};
+
+struct reset_control;
+
+struct reset_control_bulk_data {
+	const char *id;
+	struct reset_control *rstc;
+};
+
+struct reset_control {
+	struct reset_controller_dev *rcdev;
+	struct list_head list;
+	unsigned int id;
+	struct kref refcnt;
+	bool acquired;
+	bool shared;
+	bool array;
+	atomic_t deassert_count;
+	atomic_t triggered_count;
+};
+
+struct reset_control_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct reset_control_array {
+	struct reset_control base;
+	unsigned int num_rstcs;
+	struct reset_control *rstc[0];
+};
+
+struct reset_control_bulk_devres {
+	int num_rstcs;
+	struct reset_control_bulk_data *rstcs;
+};
+
+struct hv_ops;
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	long unsigned int flags;
+};
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, int);
+};
+
+struct serial8250_config {
+	const char *name;
+	short unsigned int fifo_size;
+	short unsigned int tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+struct omap8250_priv {
+	int line;
+	u8 habit;
+	u8 mdr1;
+	u8 efr;
+	u8 scr;
+	u8 wer;
+	u8 xon;
+	u8 xoff;
+	u8 delayed_restore;
+	u16 quot;
+	u8 tx_trigger;
+	u8 rx_trigger;
+	bool is_suspending;
+	int wakeirq;
+	int wakeups_enabled;
+	u32 latency;
+	u32 calc_latency;
+	struct pm_qos_request pm_qos_request;
+	struct work_struct qos_work;
+	struct uart_8250_dma omap8250_dma;
+	spinlock_t rx_dma_lock;
+	bool rx_dma_broken;
+	bool throttled;
+};
+
+struct omap8250_dma_params {
+	u32 rx_size;
+	u8 rx_trigger;
+	u8 tx_trigger;
+};
+
+struct omap8250_platdata {
+	struct omap8250_dma_params *dma_params;
+	u8 habit;
+};
+
+struct cdns_uart {
+	struct uart_port *port;
+	struct clk *uartclk;
+	struct clk *pclk;
+	struct uart_driver *cdns_uart_driver;
+	unsigned int baud;
+	struct notifier_block clk_rate_change_nb;
+	u32 quirks;
+	bool cts_override;
+};
+
+struct cdns_platform_data {
+	u32 quirks;
+};
+
+struct serdev_device;
+
+struct serdev_device_ops {
+	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
+	void (*write_wakeup)(struct serdev_device *);
+};
+
+struct serdev_controller;
+
+struct serdev_device {
+	struct device dev;
+	int nr;
+	struct serdev_controller *ctrl;
+	const struct serdev_device_ops *ops;
+	struct completion write_comp;
+	struct mutex write_lock;
+};
+
+struct serdev_controller_ops;
+
+struct serdev_controller {
+	struct device dev;
+	unsigned int nr;
+	struct serdev_device *serdev;
+	const struct serdev_controller_ops *ops;
+};
+
+struct serdev_device_driver {
+	struct device_driver driver;
+	int (*probe)(struct serdev_device *);
+	void (*remove)(struct serdev_device *);
+};
+
+enum serdev_parity {
+	SERDEV_PARITY_NONE = 0,
+	SERDEV_PARITY_EVEN = 1,
+	SERDEV_PARITY_ODD = 2,
+};
+
+struct serdev_controller_ops {
+	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
+	void (*write_flush)(struct serdev_controller *);
+	int (*write_room)(struct serdev_controller *);
+	int (*open)(struct serdev_controller *);
+	void (*close)(struct serdev_controller *);
+	void (*set_flow_control)(struct serdev_controller *, bool);
+	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
+	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
+	void (*wait_until_sent)(struct serdev_controller *, long int);
+	int (*get_tiocm)(struct serdev_controller *);
+	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
+};
+
+struct acpi_serdev_lookup {
+	acpi_handle device_handle;
+	acpi_handle controller_handle;
+	int n;
+	int index;
+};
+
+struct tpm_info {
+	struct resource res;
+	int irq;
+};
+
+struct tpm_tis_tcg_phy {
+	struct tpm_tis_data priv;
+	void *iobase;
+};
+
+struct io_pgtable {
+	enum io_pgtable_fmt fmt;
+	void *cookie;
+	struct io_pgtable_cfg cfg;
+	struct io_pgtable_ops ops;
+};
+
+struct adreno_smmu_fault_info {
+	u64 far;
+	u64 ttbr0;
+	u32 contextidr;
+	u32 fsr;
+	u32 fsynr0;
+	u32 fsynr1;
+	u32 cbfrsynra;
+};
+
+struct adreno_smmu_priv {
+	const void *cookie;
+	const struct io_pgtable_cfg * (*get_ttbr1_cfg)(const void *);
+	int (*set_ttbr0_cfg)(const void *, const struct io_pgtable_cfg *);
+	void (*get_fault_info)(const void *, struct adreno_smmu_fault_info *);
+	void (*set_stall)(const void *, bool);
+	void (*resume_translation)(const void *, bool);
+};
+
+struct qcom_smmu_config;
+
+struct qcom_smmu {
+	struct arm_smmu_device smmu;
+	const struct qcom_smmu_config *cfg;
+	bool bypass_quirk;
+	u8 bypass_cbndx;
+	u32 stall_enabled;
+};
+
+struct io_pgtable_init_fns {
+	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
+	void (*free)(struct io_pgtable *);
+};
+
+struct virtio_iommu_range_64 {
+	__le64 start;
+	__le64 end;
+};
+
+struct virtio_iommu_range_32 {
+	__le32 start;
+	__le32 end;
+};
+
+struct virtio_iommu_config {
+	__le64 page_size_mask;
+	struct virtio_iommu_range_64 input_range;
+	struct virtio_iommu_range_32 domain_range;
+	__le32 probe_size;
+	__u8 bypass;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_head {
+	__u8 type;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_tail {
+	__u8 status;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_attach {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le32 endpoint;
+	__le32 flags;
+	__u8 reserved[4];
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_req_map {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le64 virt_start;
+	__le64 virt_end;
+	__le64 phys_start;
+	__le32 flags;
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_req_unmap {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le64 virt_start;
+	__le64 virt_end;
+	__u8 reserved[4];
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_probe_property {
+	__le16 type;
+	__le16 length;
+};
+
+struct virtio_iommu_probe_resv_mem {
+	struct virtio_iommu_probe_property head;
+	__u8 subtype;
+	__u8 reserved[3];
+	__le64 start;
+	__le64 end;
+};
+
+struct virtio_iommu_req_probe {
+	struct virtio_iommu_req_head head;
+	__le32 endpoint;
+	__u8 reserved[64];
+	__u8 properties[0];
+};
+
+struct virtio_iommu_fault {
+	__u8 reason;
+	__u8 reserved[3];
+	__le32 flags;
+	__le32 endpoint;
+	__u8 reserved2[4];
+	__le64 address;
+};
+
+struct viommu_dev {
+	struct iommu_device iommu;
+	struct device *dev;
+	struct virtio_device *vdev;
+	struct ida domain_ids;
+	struct virtqueue *vqs[2];
+	spinlock_t request_lock;
+	struct list_head requests;
+	void *evts;
+	struct iommu_domain_geometry geometry;
+	u64 pgsize_bitmap;
+	u32 first_domain;
+	u32 last_domain;
+	u32 map_flags;
+	u32 probe_size;
+};
+
+struct viommu_mapping {
+	phys_addr_t paddr;
+	struct interval_tree_node iova;
+	u32 flags;
+};
+
+struct viommu_domain {
+	struct iommu_domain domain;
+	struct viommu_dev *viommu;
+	struct mutex mutex;
+	unsigned int id;
+	u32 map_flags;
+	spinlock_t mappings_lock;
+	struct rb_root_cached mappings;
+	long unsigned int nr_endpoints;
+	bool bypass;
+};
+
+struct viommu_endpoint {
+	struct device *dev;
+	struct viommu_dev *viommu;
+	struct viommu_domain *vdomain;
+	struct list_head resv_regions;
+};
+
+struct viommu_request {
+	struct list_head list;
+	void *writeback;
+	unsigned int write_offset;
+	unsigned int len;
+	char buf[0];
+};
+
+struct viommu_event {
+	union {
+		u32 head;
+		struct virtio_iommu_fault fault;
+	};
+};
+
+enum drm_mm_insert_mode {
+	DRM_MM_INSERT_BEST = 0,
+	DRM_MM_INSERT_LOW = 1,
+	DRM_MM_INSERT_HIGH = 2,
+	DRM_MM_INSERT_EVICT = 3,
+	DRM_MM_INSERT_ONCE = 2147483648,
+	DRM_MM_INSERT_HIGHEST = 2147483650,
+	DRM_MM_INSERT_LOWEST = 2147483649,
+};
+
+struct drm_mm_scan {
+	struct drm_mm *mm;
+	u64 size;
+	u64 alignment;
+	u64 remainder_mask;
+	u64 range_start;
+	u64 range_end;
+	u64 hit_start;
+	u64 hit_end;
+	long unsigned int color;
+	enum drm_mm_insert_mode mode;
+};
+
+struct drm_mode_crtc {
+	__u64 set_connectors_ptr;
+	__u32 count_connectors;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 x;
+	__u32 y;
+	__u32 gamma_size;
+	__u32 mode_valid;
+	struct drm_mode_modeinfo mode;
+};
+
+struct drm_mode_property_enum {
+	__u64 value;
+	char name[32];
+};
+
+struct drm_mode_get_property {
+	__u64 values_ptr;
+	__u64 enum_blob_ptr;
+	__u32 prop_id;
+	__u32 flags;
+	char name[32];
+	__u32 count_values;
+	__u32 count_enum_blobs;
+};
+
+struct drm_mode_get_blob {
+	__u32 blob_id;
+	__u32 length;
+	__u64 data;
+};
+
+struct drm_mode_create_blob {
+	__u64 data;
+	__u32 length;
+	__u32 blob_id;
+};
+
+struct drm_mode_destroy_blob {
+	__u32 blob_id;
+};
+
+struct drm_property_enum {
+	uint64_t value;
+	struct list_head head;
+	char name[32];
+};
+
+struct drm_syncobj_create {
+	__u32 handle;
+	__u32 flags;
+};
+
+struct drm_syncobj_destroy {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_syncobj_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_transfer {
+	__u32 src_handle;
+	__u32 dst_handle;
+	__u64 src_point;
+	__u64 dst_point;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct drm_syncobj_wait {
+	__u64 handles;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_wait {
+	__u64 handles;
+	__u64 points;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_array {
+	__u64 handles;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_array {
+	__u64 handles;
+	__u64 points;
+	__u32 count_handles;
+	__u32 flags;
+};
+
+struct drm_syncobj {
+	struct kref refcount;
+	struct dma_fence *fence;
+	struct list_head cb_list;
+	spinlock_t lock;
+	struct file *file;
+};
+
+struct syncobj_wait_entry {
+	struct list_head node;
+	struct task_struct *task;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	u64 point;
+};
+
+struct drm_encoder_slave_funcs {
+	void (*set_config)(struct drm_encoder *, void *);
+	void (*destroy)(struct drm_encoder *);
+	void (*dpms)(struct drm_encoder *, int);
+	void (*save)(struct drm_encoder *);
+	void (*restore)(struct drm_encoder *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_valid)(struct drm_encoder *, struct drm_display_mode *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	int (*get_modes)(struct drm_encoder *, struct drm_connector *);
+	int (*create_resources)(struct drm_encoder *, struct drm_connector *);
+	int (*set_property)(struct drm_encoder *, struct drm_connector *, struct drm_property *, uint64_t);
+};
+
+struct drm_encoder_slave {
+	struct drm_encoder base;
+	const struct drm_encoder_slave_funcs *slave_funcs;
+	void *slave_priv;
+	void *bus_priv;
+};
+
+struct drm_i2c_encoder_driver {
+	struct i2c_driver i2c_driver;
+	int (*encoder_init)(struct i2c_client *, struct drm_device *, struct drm_encoder_slave *);
+};
+
+struct drm_shadow_plane_state {
+	struct drm_plane_state base;
+	struct iosys_map map[4];
+	struct iosys_map data[4];
+};
+
+struct drm_dsc_picture_parameter_set {
+	u8 dsc_version;
+	u8 pps_identifier;
+	u8 pps_reserved;
+	u8 pps_3;
+	u8 pps_4;
+	u8 bits_per_pixel_low;
+	__be16 pic_height;
+	__be16 pic_width;
+	__be16 slice_height;
+	__be16 slice_width;
+	__be16 chunk_size;
+	u8 initial_xmit_delay_high;
+	u8 initial_xmit_delay_low;
+	__be16 initial_dec_delay;
+	u8 pps20_reserved;
+	u8 initial_scale_value;
+	__be16 scale_increment_interval;
+	u8 scale_decrement_interval_high;
+	u8 scale_decrement_interval_low;
+	u8 pps26_reserved;
+	u8 first_line_bpg_offset;
+	__be16 nfl_bpg_offset;
+	__be16 slice_bpg_offset;
+	__be16 initial_offset;
+	__be16 final_offset;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	__be16 rc_model_size;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit0;
+	u8 rc_quant_incr_limit1;
+	u8 rc_tgt_offset;
+	u8 rc_buf_thresh[14];
+	__be16 rc_range_parameters[15];
+	u8 native_422_420;
+	u8 second_line_bpg_offset;
+	__be16 nsl_bpg_offset;
+	__be16 second_line_offset_adj;
+	u32 pps_long_94_reserved;
+	u32 pps_long_98_reserved;
+	u32 pps_long_102_reserved;
+	u32 pps_long_106_reserved;
+	u32 pps_long_110_reserved;
+	u32 pps_long_114_reserved;
+	u32 pps_long_118_reserved;
+	u32 pps_long_122_reserved;
+	__be16 pps_short_126_reserved;
+} __attribute__((packed));
+
+struct mipi_dsi_msg {
+	u8 channel;
+	u8 type;
+	u16 flags;
+	size_t tx_len;
+	const void *tx_buf;
+	size_t rx_len;
+	void *rx_buf;
+};
+
+struct mipi_dsi_packet {
+	size_t size;
+	u8 header[4];
+	size_t payload_length;
+	const u8 *payload;
+};
+
+struct mipi_dsi_host;
+
+struct mipi_dsi_device;
+
+struct mipi_dsi_host_ops {
+	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
+};
+
+struct mipi_dsi_host {
+	struct device *dev;
+	const struct mipi_dsi_host_ops *ops;
+	struct list_head list;
+};
+
+enum mipi_dsi_pixel_format {
+	MIPI_DSI_FMT_RGB888 = 0,
+	MIPI_DSI_FMT_RGB666 = 1,
+	MIPI_DSI_FMT_RGB666_PACKED = 2,
+	MIPI_DSI_FMT_RGB565 = 3,
+};
+
+struct mipi_dsi_device {
+	struct mipi_dsi_host *host;
+	struct device dev;
+	char name[20];
+	unsigned int channel;
+	unsigned int lanes;
+	enum mipi_dsi_pixel_format format;
+	long unsigned int mode_flags;
+	long unsigned int hs_rate;
+	long unsigned int lp_rate;
+};
+
+struct mipi_dsi_device_info {
+	char type[20];
+	u32 channel;
+	struct device_node *node;
+};
+
+enum mipi_dsi_dcs_tear_mode {
+	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
+	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
+};
+
+struct mipi_dsi_driver {
+	struct device_driver driver;
+	int (*probe)(struct mipi_dsi_device *);
+	int (*remove)(struct mipi_dsi_device *);
+	void (*shutdown)(struct mipi_dsi_device *);
+};
+
+enum {
+	MIPI_DSI_V_SYNC_START = 1,
+	MIPI_DSI_V_SYNC_END = 17,
+	MIPI_DSI_H_SYNC_START = 33,
+	MIPI_DSI_H_SYNC_END = 49,
+	MIPI_DSI_COMPRESSION_MODE = 7,
+	MIPI_DSI_END_OF_TRANSMISSION = 8,
+	MIPI_DSI_COLOR_MODE_OFF = 2,
+	MIPI_DSI_COLOR_MODE_ON = 18,
+	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
+	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
+	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
+	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
+	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
+	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
+	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
+	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
+	MIPI_DSI_DCS_SHORT_WRITE = 5,
+	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
+	MIPI_DSI_DCS_READ = 6,
+	MIPI_DSI_EXECUTE_QUEUE = 22,
+	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
+	MIPI_DSI_NULL_PACKET = 9,
+	MIPI_DSI_BLANKING_PACKET = 25,
+	MIPI_DSI_GENERIC_LONG_WRITE = 41,
+	MIPI_DSI_DCS_LONG_WRITE = 57,
+	MIPI_DSI_PICTURE_PARAMETER_SET = 10,
+	MIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,
+	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
+	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
+	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
+	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
+	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
+	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
+	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
+};
+
+enum {
+	MIPI_DCS_NOP = 0,
+	MIPI_DCS_SOFT_RESET = 1,
+	MIPI_DCS_GET_COMPRESSION_MODE = 3,
+	MIPI_DCS_GET_DISPLAY_ID = 4,
+	MIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,
+	MIPI_DCS_GET_RED_CHANNEL = 6,
+	MIPI_DCS_GET_GREEN_CHANNEL = 7,
+	MIPI_DCS_GET_BLUE_CHANNEL = 8,
+	MIPI_DCS_GET_DISPLAY_STATUS = 9,
+	MIPI_DCS_GET_POWER_MODE = 10,
+	MIPI_DCS_GET_ADDRESS_MODE = 11,
+	MIPI_DCS_GET_PIXEL_FORMAT = 12,
+	MIPI_DCS_GET_DISPLAY_MODE = 13,
+	MIPI_DCS_GET_SIGNAL_MODE = 14,
+	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
+	MIPI_DCS_ENTER_SLEEP_MODE = 16,
+	MIPI_DCS_EXIT_SLEEP_MODE = 17,
+	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
+	MIPI_DCS_ENTER_NORMAL_MODE = 19,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,
+	MIPI_DCS_EXIT_INVERT_MODE = 32,
+	MIPI_DCS_ENTER_INVERT_MODE = 33,
+	MIPI_DCS_SET_GAMMA_CURVE = 38,
+	MIPI_DCS_SET_DISPLAY_OFF = 40,
+	MIPI_DCS_SET_DISPLAY_ON = 41,
+	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
+	MIPI_DCS_SET_PAGE_ADDRESS = 43,
+	MIPI_DCS_WRITE_MEMORY_START = 44,
+	MIPI_DCS_WRITE_LUT = 45,
+	MIPI_DCS_READ_MEMORY_START = 46,
+	MIPI_DCS_SET_PARTIAL_ROWS = 48,
+	MIPI_DCS_SET_PARTIAL_COLUMNS = 49,
+	MIPI_DCS_SET_SCROLL_AREA = 51,
+	MIPI_DCS_SET_TEAR_OFF = 52,
+	MIPI_DCS_SET_TEAR_ON = 53,
+	MIPI_DCS_SET_ADDRESS_MODE = 54,
+	MIPI_DCS_SET_SCROLL_START = 55,
+	MIPI_DCS_EXIT_IDLE_MODE = 56,
+	MIPI_DCS_ENTER_IDLE_MODE = 57,
+	MIPI_DCS_SET_PIXEL_FORMAT = 58,
+	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
+	MIPI_DCS_SET_3D_CONTROL = 61,
+	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
+	MIPI_DCS_GET_3D_CONTROL = 63,
+	MIPI_DCS_SET_VSYNC_TIMING = 64,
+	MIPI_DCS_SET_TEAR_SCANLINE = 68,
+	MIPI_DCS_GET_SCANLINE = 69,
+	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
+	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
+	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
+	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
+	MIPI_DCS_WRITE_POWER_SAVE = 85,
+	MIPI_DCS_GET_POWER_SAVE = 86,
+	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
+	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
+	MIPI_DCS_READ_DDB_START = 161,
+	MIPI_DCS_READ_PPS_START = 162,
+	MIPI_DCS_READ_DDB_CONTINUE = 168,
+	MIPI_DCS_READ_PPS_CONTINUE = 169,
+};
+
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
+};
+
+enum dpm_order {
+	DPM_ORDER_NONE = 0,
+	DPM_ORDER_DEV_AFTER_PARENT = 1,
+	DPM_ORDER_PARENT_BEFORE_DEV = 2,
+	DPM_ORDER_DEV_LAST = 3,
+};
+
+union device_attr_group_devres {
+	const struct attribute_group *group;
+	const struct attribute_group **groups;
+};
+
+struct class_dir {
+	struct kobject kobj;
+	struct class *class;
+};
+
+struct root_device {
+	struct device dev;
+	struct module *owner;
+};
+
+typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
+
+struct firmware_cache {
+	spinlock_t lock;
+	struct list_head head;
+	int state;
+	spinlock_t name_lock;
+	struct list_head fw_names;
+	struct delayed_work work;
+	struct notifier_block pm_notify;
+};
+
+struct fw_cache_entry {
+	struct list_head list;
+	const char *name;
+};
+
+struct fw_name_devm {
+	long unsigned int magic;
+	const char *name;
+};
+
+struct firmware_work {
+	struct work_struct work;
+	struct module *module;
+	const char *name;
+	struct device *device;
+	void *context;
+	void (*cont)(const struct firmware *, void *);
+	u32 opt_flags;
+};
+
+struct test_struct {
+	char *get;
+	char *put;
+	void (*get_handler)(char *);
+	int (*put_handler)(char *, char *);
+};
+
+struct test_state {
+	char *name;
+	struct test_struct *tst;
+	int idx;
+	int (*run_test)(int, int);
+	int (*validate_put)(char *);
+};
+
+enum axp20x_variants {
+	AXP152_ID = 0,
+	AXP202_ID = 1,
+	AXP209_ID = 2,
+	AXP221_ID = 3,
+	AXP223_ID = 4,
+	AXP288_ID = 5,
+	AXP803_ID = 6,
+	AXP806_ID = 7,
+	AXP809_ID = 8,
+	AXP813_ID = 9,
+	NR_AXP20X_VARIANTS = 10,
+};
+
+struct axp20x_dev {
+	struct device *dev;
+	int irq;
+	long unsigned int irq_flags;
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *regmap_irqc;
+	long int variant;
+	int nr_cells;
+	const struct mfd_cell *cells;
+	const struct regmap_config *regmap_cfg;
+	const struct regmap_irq_chip *regmap_irq_chip;
+};
+
+struct gpio_keys_button {
+	unsigned int code;
+	int gpio;
+	int active_low;
+	const char *desc;
+	unsigned int type;
+	int wakeup;
+	int wakeup_event_action;
+	int debounce_interval;
+	bool can_disable;
+	int value;
+	unsigned int irq;
+};
+
+struct gpio_keys_platform_data {
+	const struct gpio_keys_button *buttons;
+	int nbuttons;
+	unsigned int poll_interval;
+	unsigned int rep: 1;
+	int (*enable)(struct device *);
+	void (*disable)(struct device *);
+	const char *name;
+};
+
+enum rohm_chip_type {
+	ROHM_CHIP_TYPE_BD9571 = 0,
+	ROHM_CHIP_TYPE_BD9573 = 1,
+	ROHM_CHIP_TYPE_BD9574 = 2,
+	ROHM_CHIP_TYPE_BD9576 = 3,
+	ROHM_CHIP_TYPE_BD71815 = 4,
+	ROHM_CHIP_TYPE_BD71828 = 5,
+	ROHM_CHIP_TYPE_BD71837 = 6,
+	ROHM_CHIP_TYPE_BD71847 = 7,
+	ROHM_CHIP_TYPE_AMOUNT = 8,
+};
+
+enum {
+	BD718XX_REG_REV = 0,
+	BD718XX_REG_SWRESET = 1,
+	BD718XX_REG_I2C_DEV = 2,
+	BD718XX_REG_PWRCTRL0 = 3,
+	BD718XX_REG_PWRCTRL1 = 4,
+	BD718XX_REG_BUCK1_CTRL = 5,
+	BD718XX_REG_BUCK2_CTRL = 6,
+	BD718XX_REG_1ST_NODVS_BUCK_CTRL = 9,
+	BD718XX_REG_2ND_NODVS_BUCK_CTRL = 10,
+	BD718XX_REG_3RD_NODVS_BUCK_CTRL = 11,
+	BD718XX_REG_4TH_NODVS_BUCK_CTRL = 12,
+	BD718XX_REG_BUCK1_VOLT_RUN = 13,
+	BD718XX_REG_BUCK1_VOLT_IDLE = 14,
+	BD718XX_REG_BUCK1_VOLT_SUSP = 15,
+	BD718XX_REG_BUCK2_VOLT_RUN = 16,
+	BD718XX_REG_BUCK2_VOLT_IDLE = 17,
+	BD718XX_REG_1ST_NODVS_BUCK_VOLT = 20,
+	BD718XX_REG_2ND_NODVS_BUCK_VOLT = 21,
+	BD718XX_REG_3RD_NODVS_BUCK_VOLT = 22,
+	BD718XX_REG_4TH_NODVS_BUCK_VOLT = 23,
+	BD718XX_REG_LDO1_VOLT = 24,
+	BD718XX_REG_LDO2_VOLT = 25,
+	BD718XX_REG_LDO3_VOLT = 26,
+	BD718XX_REG_LDO4_VOLT = 27,
+	BD718XX_REG_LDO5_VOLT = 28,
+	BD718XX_REG_LDO6_VOLT = 29,
+	BD718XX_REG_TRANS_COND0 = 31,
+	BD718XX_REG_TRANS_COND1 = 32,
+	BD718XX_REG_VRFAULTEN = 33,
+	BD718XX_REG_MVRFLTMASK0 = 34,
+	BD718XX_REG_MVRFLTMASK1 = 35,
+	BD718XX_REG_MVRFLTMASK2 = 36,
+	BD718XX_REG_RCVCFG = 37,
+	BD718XX_REG_RCVNUM = 38,
+	BD718XX_REG_PWRONCONFIG0 = 39,
+	BD718XX_REG_PWRONCONFIG1 = 40,
+	BD718XX_REG_RESETSRC = 41,
+	BD718XX_REG_MIRQ = 42,
+	BD718XX_REG_IRQ = 43,
+	BD718XX_REG_IN_MON = 44,
+	BD718XX_REG_POW_STATE = 45,
+	BD718XX_REG_OUT32K = 46,
+	BD718XX_REG_REGLOCK = 47,
+	BD718XX_REG_OTPVER = 255,
+	BD718XX_MAX_REGISTER = 256,
+};
+
+enum {
+	BD718XX_INT_STBY_REQ = 0,
+	BD718XX_INT_ON_REQ = 1,
+	BD718XX_INT_WDOG = 2,
+	BD718XX_INT_PWRBTN = 3,
+	BD718XX_INT_PWRBTN_L = 4,
+	BD718XX_INT_PWRBTN_S = 5,
+	BD718XX_INT_SWRST = 6,
+};
+
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence *table[0];
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+enum {
+	SCSI_DH_OK = 0,
+	SCSI_DH_DEV_FAILED = 1,
+	SCSI_DH_DEV_TEMP_BUSY = 2,
+	SCSI_DH_DEV_UNSUPP = 3,
+	SCSI_DH_DEVICE_MAX = 4,
+	SCSI_DH_NOTCONN = 5,
+	SCSI_DH_CONN_FAILURE = 6,
+	SCSI_DH_TRANSPORT_MAX = 7,
+	SCSI_DH_IO = 8,
+	SCSI_DH_INVALID_IO = 9,
+	SCSI_DH_RETRY = 10,
+	SCSI_DH_IMM_RETRY = 11,
+	SCSI_DH_TIMED_OUT = 12,
+	SCSI_DH_RES_TEMP_UNAVAIL = 13,
+	SCSI_DH_DEV_OFFLINED = 14,
+	SCSI_DH_NOMEM = 15,
+	SCSI_DH_NOSYS = 16,
+	SCSI_DH_DRIVER_MAX = 17,
+};
+
+struct scsi_dh_blist {
+	const char *vendor;
+	const char *model;
+	const char *driver;
+};
+
+struct ccs_modesel_head {
+	__u8 _r1;
+	__u8 medium;
+	__u8 _r2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_blocks_hi;
+	__u8 number_blocks_med;
+	__u8 number_blocks_lo;
+	__u8 _r3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+struct ahci_sg {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 reserved;
+	__le32 flags_size;
+};
+
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+struct usb_class {
+	struct kref kref;
+	struct class *class;
+};
+
+struct ulpi_info {
+	unsigned int id;
+	char *name;
+};
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+enum usb_role {
+	USB_ROLE_NONE = 0,
+	USB_ROLE_HOST = 1,
+	USB_ROLE_DEVICE = 2,
+};
+
+struct usb_role_switch;
+
+typedef int (*usb_role_switch_set_t)(struct usb_role_switch *, enum usb_role);
+
+typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *);
+
+struct usb_role_switch {
+	struct device dev;
+	struct mutex lock;
+	enum usb_role role;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+};
+
+struct usb_role_switch_desc {
+	struct fwnode_handle *fwnode;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+	void *driver_data;
+	const char *name;
+};
+
+struct vivaldi_data {
+	u32 function_row_physmap[24];
+	unsigned int num_function_row_keys;
+};
+
+struct atkbd {
+	struct ps2dev ps2dev;
+	struct input_dev *dev;
+	char name[64];
+	char phys[32];
+	short unsigned int id;
+	short unsigned int keycode[512];
+	long unsigned int force_release_mask[8];
+	unsigned char set;
+	bool translated;
+	bool extra;
+	bool write;
+	bool softrepeat;
+	bool softraw;
+	bool scroll;
+	bool enabled;
+	unsigned char emul;
+	bool resend;
+	bool release;
+	long unsigned int xl_bit;
+	unsigned int last;
+	long unsigned int time;
+	long unsigned int err_count;
+	struct delayed_work event_work;
+	long unsigned int event_jiffies;
+	long unsigned int event_mask;
+	struct mutex mutex;
+	struct vivaldi_data vdata;
+};
+
+struct trace_event_raw_i2c_slave {
+	struct trace_entry ent;
+	int adapter_nr;
+	int ret;
+	__u16 addr;
+	__u16 len;
+	enum i2c_slave_event event;
+	__u8 buf[1];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_slave {};
+
+typedef void (*btf_trace_i2c_slave)(void *, const struct i2c_client *, enum i2c_slave_event, __u8 *, int);
+
+enum {
+	REG_CON_MOD_TX = 0,
+	REG_CON_MOD_REGISTER_TX = 1,
+	REG_CON_MOD_RX = 2,
+	REG_CON_MOD_REGISTER_RX = 3,
+};
+
+struct i2c_spec_values {
+	long unsigned int min_hold_start_ns;
+	long unsigned int min_low_ns;
+	long unsigned int min_high_ns;
+	long unsigned int min_setup_start_ns;
+	long unsigned int max_data_hold_ns;
+	long unsigned int min_data_setup_ns;
+	long unsigned int min_setup_stop_ns;
+	long unsigned int min_hold_buffer_ns;
+};
+
+struct rk3x_i2c_calced_timings {
+	long unsigned int div_low;
+	long unsigned int div_high;
+	unsigned int tuning;
+};
+
+enum rk3x_i2c_state {
+	STATE_IDLE = 0,
+	STATE_START = 1,
+	STATE_READ = 2,
+	STATE_WRITE = 3,
+	STATE_STOP = 4,
+};
+
+struct rk3x_i2c_soc_data {
+	int grf_offset;
+	int (*calc_timings)(long unsigned int, struct i2c_timings *, struct rk3x_i2c_calced_timings *);
+};
+
+struct rk3x_i2c {
+	struct i2c_adapter adap;
+	struct device *dev;
+	const struct rk3x_i2c_soc_data *soc_data;
+	void *regs;
+	struct clk *clk;
+	struct clk *pclk;
+	struct notifier_block clk_rate_nb;
+	struct i2c_timings t;
+	spinlock_t lock;
+	wait_queue_head_t wait;
+	bool busy;
+	struct i2c_msg *msg;
+	u8 addr;
+	unsigned int mode;
+	bool is_last_msg;
+	enum rk3x_i2c_state state;
+	unsigned int processed;
+	int error;
+};
+
+struct gpio_restart {
+	struct gpio_desc *reset_gpio;
+	struct notifier_block restart_handler;
+	u32 active_delay_ms;
+	u32 inactive_delay_ms;
+	u32 wait_delay_ms;
+};
+
+struct syscon_reboot_context {
+	struct regmap *map;
+	u32 offset;
+	u32 value;
+	u32 mask;
+	struct notifier_block restart_handler;
+};
+
+enum {
+	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
+	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
+	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
+	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
+	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
+	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
+	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
+};
+
+enum {
+	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
+	POWER_SUPPLY_HEALTH_GOOD = 1,
+	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
+	POWER_SUPPLY_HEALTH_DEAD = 3,
+	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
+	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
+	POWER_SUPPLY_HEALTH_COLD = 6,
+	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
+	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
+	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
+	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
+	POWER_SUPPLY_HEALTH_WARM = 11,
+	POWER_SUPPLY_HEALTH_COOL = 12,
+	POWER_SUPPLY_HEALTH_HOT = 13,
+	POWER_SUPPLY_HEALTH_NO_BATTERY = 14,
+};
+
+enum {
+	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+	POWER_SUPPLY_SCOPE_SYSTEM = 1,
+	POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[31];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+struct cooling_dev_stats {
+	spinlock_t lock;
+	unsigned int total_trans;
+	long unsigned int state;
+	long unsigned int max_states;
+	ktime_t last_time;
+	ktime_t *time_in_state;
+	unsigned int *trans_table;
+};
+
+struct max77620_variant {
+	u8 reg_onoff_cnfg2;
+	u8 reg_cnfg_glbl2;
+	u8 reg_cnfg_glbl3;
+	u8 wdtc_mask;
+	u8 bit_wd_rst_wk;
+	u8 cnfg_glbl2_cfg_bits;
+};
+
+struct max77620_wdt {
+	struct device *dev;
+	struct regmap *rmap;
+	const struct max77620_variant *drv_data;
+	struct watchdog_device wdt_dev;
+};
+
+enum dm_uevent_type {
+	DM_UEVENT_PATH_FAILED = 0,
+	DM_UEVENT_PATH_REINSTATED = 1,
+};
+
+struct dm_uevent {
+	struct mapped_device *md;
+	enum kobject_action action;
+	struct kobj_uevent_env ku_env;
+	struct list_head elist;
+	char name[128];
+	char uuid[129];
+};
+
+struct dm_io_client {
+	mempool_t pool;
+	struct bio_set bios;
+};
+
+struct io {
+	long unsigned int error_bits;
+	atomic_t count;
+	struct dm_io_client *client;
+	io_notify_fn callback;
+	void *context;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+	long: 64;
+};
+
+struct dpages {
+	void (*get_page)(struct dpages *, struct page **, long unsigned int *, unsigned int *);
+	void (*next_page)(struct dpages *);
+	union {
+		unsigned int context_u;
+		struct bvec_iter context_bi;
+	};
+	void *context_ptr;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+};
+
+struct sync_io {
+	long unsigned int error_bits;
+	struct completion wait;
+};
+
+struct dm_buffer;
+
+struct dm_bufio_client {
+	struct mutex lock;
+	spinlock_t spinlock;
+	bool no_sleep;
+	struct list_head lru[2];
+	long unsigned int n_buffers[2];
+	struct block_device *bdev;
+	unsigned int block_size;
+	s8 sectors_per_block_bits;
+	void (*alloc_callback)(struct dm_buffer *);
+	void (*write_callback)(struct dm_buffer *);
+	struct kmem_cache *slab_buffer;
+	struct kmem_cache *slab_cache;
+	struct dm_io_client *dm_io;
+	struct list_head reserved_buffers;
+	unsigned int need_reserved_buffers;
+	unsigned int minimum_buffers;
+	struct rb_root buffer_tree;
+	wait_queue_head_t free_buffer_wait;
+	sector_t start;
+	int async_write_error;
+	struct list_head client_list;
+	struct shrinker shrinker;
+	struct work_struct shrink_work;
+	atomic_long_t need_shrink;
+};
+
+struct dm_buffer {
+	struct rb_node node;
+	struct list_head lru_list;
+	struct list_head global_list;
+	sector_t block;
+	void *data;
+	unsigned char data_mode;
+	unsigned char list_mode;
+	blk_status_t read_error;
+	blk_status_t write_error;
+	unsigned int accessed;
+	unsigned int hold_count;
+	long unsigned int state;
+	long unsigned int last_accessed;
+	unsigned int dirty_start;
+	unsigned int dirty_end;
+	unsigned int write_start;
+	unsigned int write_end;
+	struct dm_bufio_client *c;
+	struct list_head write_list;
+	void (*end_io)(struct dm_buffer *, blk_status_t);
+};
+
+enum data_mode {
+	DATA_MODE_SLAB = 0,
+	DATA_MODE_GET_FREE_PAGES = 1,
+	DATA_MODE_VMALLOC = 2,
+	DATA_MODE_LIMIT = 3,
+};
+
+enum new_flag {
+	NF_FRESH = 0,
+	NF_READ = 1,
+	NF_GET = 2,
+	NF_PREFETCH = 3,
+};
+
+struct dm_region_hash {
+	uint32_t region_size;
+	unsigned int region_shift;
+	struct dm_dirty_log *log;
+	rwlock_t hash_lock;
+	unsigned int mask;
+	unsigned int nr_buckets;
+	unsigned int prime;
+	unsigned int shift;
+	struct list_head *buckets;
+	int flush_failure;
+	unsigned int max_recovery;
+	spinlock_t region_lock;
+	atomic_t recovery_in_flight;
+	struct list_head clean_regions;
+	struct list_head quiesced_regions;
+	struct list_head recovered_regions;
+	struct list_head failed_recovered_regions;
+	struct semaphore recovery_count;
+	mempool_t region_pool;
+	void *context;
+	sector_t target_begin;
+	void (*dispatch_bios)(void *, struct bio_list *);
+	void (*wakeup_workers)(void *);
+	void (*wakeup_all_recovery_waiters)(void *);
+};
+
+struct dm_region {
+	struct dm_region_hash *rh;
+	region_t key;
+	int state;
+	struct list_head hash_list;
+	struct list_head list;
+	atomic_t pending;
+	struct bio_list delayed_bios;
+};
+
+struct ctl_info_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct instance_attribute___2 {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_instance *, char *);
+	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
+};
+
+struct cpu_dbs_info {
+	u64 prev_cpu_idle;
+	u64 prev_update_time;
+	u64 prev_cpu_nice;
+	unsigned int prev_load;
+	struct update_util_data update_util;
+	struct policy_dbs_info *policy_dbs;
+};
+
+struct psci_cpuidle_data {
+	u32 *psci_states;
+	struct device *dev;
+};
+
+struct mmc_busy_data {
+	struct mmc_card *card;
+	bool retry_crc_err;
+	enum mmc_busy_cmd busy_cmd;
+};
+
+struct mmc_op_cond_busy_data {
+	struct mmc_host *host;
+	u32 ocr;
+	struct mmc_command *cmd;
+};
+
+struct sdei_event {
+	struct list_head list;
+	bool reregister;
+	bool reenable;
+	u32 event_num;
+	u8 type;
+	u8 priority;
+	union {
+		struct sdei_registered_event *registered;
+		struct sdei_registered_event *private_registered;
+	};
+};
+
+struct sdei_crosscall_args {
+	struct sdei_event *event;
+	atomic_t errors;
+	int first_error;
+};
+
+struct scmi_registered_events_desc;
+
+struct scmi_notify_instance {
+	void *gid;
+	struct scmi_handle *handle;
+	struct work_struct init_work;
+	struct workqueue_struct *notify_wq;
+	struct mutex pending_mtx;
+	struct scmi_registered_events_desc **registered_protocols;
+	struct hlist_head pending_events_handlers[16];
+};
+
+struct events_queue {
+	size_t sz;
+	struct kfifo kfifo;
+	struct work_struct notify_work;
+	struct workqueue_struct *wq;
+};
+
+struct scmi_event_header;
+
+struct scmi_registered_event;
+
+struct scmi_registered_events_desc {
+	u8 id;
+	const struct scmi_event_ops *ops;
+	struct events_queue equeue;
+	struct scmi_notify_instance *ni;
+	struct scmi_event_header *eh;
+	size_t eh_sz;
+	void *in_flight;
+	int num_events;
+	struct scmi_registered_event **registered_events;
+	struct mutex registered_mtx;
+	const struct scmi_protocol_handle *ph;
+	struct hlist_head registered_events_handlers[64];
+};
+
+struct scmi_event_header {
+	ktime_t timestamp;
+	size_t payld_sz;
+	unsigned char evt_id;
+	unsigned char payld[0];
+};
+
+struct scmi_registered_event {
+	struct scmi_registered_events_desc *proto;
+	const struct scmi_event *evt;
+	void *report;
+	u32 num_sources;
+	refcount_t *sources;
+	struct mutex sources_mtx;
+};
+
+struct scmi_event_handler {
+	u32 key;
+	refcount_t users;
+	struct scmi_registered_event *r_evt;
+	struct blocking_notifier_head chain;
+	struct hlist_node hash;
+	bool enabled;
+};
+
+struct scmi_notifier_devres {
+	const struct scmi_handle *handle;
+	u8 proto_id;
+	u8 evt_id;
+	u32 __src_id;
+	u32 *src_id;
+	struct notifier_block *nb;
+};
+
+enum scmi_system_events {
+	SCMI_SYSTEM_SHUTDOWN = 0,
+	SCMI_SYSTEM_COLDRESET = 1,
+	SCMI_SYSTEM_WARMRESET = 2,
+	SCMI_SYSTEM_POWERUP = 3,
+	SCMI_SYSTEM_SUSPEND = 4,
+	SCMI_SYSTEM_MAX = 5,
+};
+
+struct scmi_system_power_state_notifier_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int flags;
+	unsigned int system_state;
+	unsigned int timeout;
+};
+
+enum scmi_system_protocol_cmd {
+	SYSTEM_POWER_STATE_NOTIFY = 5,
+};
+
+struct scmi_system_power_state_notify {
+	__le32 notify_enable;
+};
+
+struct scmi_system_power_state_notifier_payld {
+	__le32 agent_id;
+	__le32 flags;
+	__le32 system_state;
+	__le32 timeout;
+};
+
+struct scmi_system_info {
+	u32 version;
+	bool graceful_timeout_supported;
+};
+
+struct scmi_msg_payld {
+	__le32 msg_header;
+	__le32 msg_payload[0];
+};
+
+enum {
+	SM_EFUSE_READ = 0,
+	SM_EFUSE_WRITE = 1,
+	SM_EFUSE_USER_MAX = 2,
+	SM_GET_CHIP_ID = 3,
+	SM_A1_PWRC_SET = 4,
+	SM_A1_PWRC_GET = 5,
+};
+
+struct meson_sm_cmd {
+	unsigned int index;
+	u32 smc_id;
+};
+
+struct meson_sm_chip {
+	unsigned int shmem_size;
+	u32 cmd_shmem_in_base;
+	u32 cmd_shmem_out_base;
+	struct meson_sm_cmd cmd[0];
+};
+
+struct meson_sm_firmware {
+	const struct meson_sm_chip *chip;
+	void *sm_shmem_in_base;
+	void *sm_shmem_out_base;
+};
+
+struct efi_mem_range {
+	struct range range;
+	u64 attribute;
+};
+
+typedef long unsigned int psci_fn(long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef int (*psci_initcall_t)(const struct device_node *);
+
+enum pm_ret_status {
+	XST_PM_SUCCESS = 0,
+	XST_PM_NO_FEATURE = 19,
+	XST_PM_INTERNAL = 2000,
+	XST_PM_CONFLICT = 2001,
+	XST_PM_NO_ACCESS = 2002,
+	XST_PM_INVALID_NODE = 2003,
+	XST_PM_DOUBLE_REQ = 2004,
+	XST_PM_ABORT_SUSPEND = 2005,
+	XST_PM_MULT_USER = 2008,
+};
+
+enum pm_ioctl_id {
+	IOCTL_SD_DLL_RESET = 6,
+	IOCTL_SET_SD_TAPDELAY = 7,
+	IOCTL_SET_PLL_FRAC_MODE = 8,
+	IOCTL_GET_PLL_FRAC_MODE = 9,
+	IOCTL_SET_PLL_FRAC_DATA = 10,
+	IOCTL_GET_PLL_FRAC_DATA = 11,
+	IOCTL_WRITE_GGS = 12,
+	IOCTL_READ_GGS = 13,
+	IOCTL_WRITE_PGGS = 14,
+	IOCTL_READ_PGGS = 15,
+	IOCTL_SET_BOOT_HEALTH_STATUS = 17,
+	IOCTL_OSPI_MUX_SELECT = 21,
+	IOCTL_REGISTER_SGI = 25,
+	IOCTL_SET_FEATURE_CONFIG = 26,
+	IOCTL_GET_FEATURE_CONFIG = 27,
+};
+
+enum zynqmp_pm_shutdown_type {
+	ZYNQMP_PM_SHUTDOWN_TYPE_SHUTDOWN = 0,
+	ZYNQMP_PM_SHUTDOWN_TYPE_RESET = 1,
+	ZYNQMP_PM_SHUTDOWN_TYPE_SETSCOPE_ONLY = 2,
+};
+
+enum zynqmp_pm_shutdown_subtype {
+	ZYNQMP_PM_SHUTDOWN_SUBTYPE_SUBSYSTEM = 0,
+	ZYNQMP_PM_SHUTDOWN_SUBTYPE_PS_ONLY = 1,
+	ZYNQMP_PM_SHUTDOWN_SUBTYPE_SYSTEM = 2,
+};
+
+enum pm_feature_config_id {
+	PM_FEATURE_INVALID = 0,
+	PM_FEATURE_OVERTEMP_STATUS = 1,
+	PM_FEATURE_OVERTEMP_VALUE = 2,
+	PM_FEATURE_EXTWDT_STATUS = 3,
+	PM_FEATURE_EXTWDT_VALUE = 4,
+};
+
+struct zynqmp_devinfo {
+	struct device *dev;
+	u32 feature_conf_id;
+};
+
+struct pm_api_feature_data {
+	u32 pm_api_id;
+	int feature_status;
+	struct hlist_node hentry;
+};
+
+struct zynqmp_pm_shutdown_scope {
+	const enum zynqmp_pm_shutdown_subtype subtype;
+	const char *name;
+};
+
+struct rk_timer {
+	void *base;
+	void *ctrl;
+	struct clk *clk;
+	struct clk *pclk;
+	u32 freq;
+	int irq;
+};
+
+struct rk_clkevt {
+	struct clock_event_device ce;
+	struct rk_timer timer;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct hi3660_chan_info {
+	unsigned int dst_irq;
+	unsigned int ack_irq;
+};
+
+struct hi3660_mbox {
+	struct device *dev;
+	void *base;
+	struct mbox_chan chan[32];
+	struct hi3660_chan_info mchan[32];
+	struct mbox_controller controller;
+};
+
+struct hwspinlock;
+
+struct hwspinlock_ops {
+	int (*trylock)(struct hwspinlock *);
+	void (*unlock)(struct hwspinlock *);
+	void (*relax)(struct hwspinlock *);
+};
+
+struct hwspinlock_device;
+
+struct hwspinlock {
+	struct hwspinlock_device *bank;
+	spinlock_t lock;
+	void *priv;
+};
+
+struct hwspinlock_device {
+	struct device *dev;
+	const struct hwspinlock_ops *ops;
+	int base_id;
+	int num_locks;
+	struct hwspinlock lock[0];
+};
+
+struct extcon_dev_notifier_devres {
+	struct extcon_dev *edev;
+	unsigned int id;
+	struct notifier_block *nb;
+};
+
+enum {
+	C0D0U0 = 0,
+	C0D0U1 = 1,
+	C0D1U0 = 2,
+	C0D1U1 = 3,
+	C1D0U0 = 4,
+	C1D0U1 = 5,
+	C1D1U0 = 6,
+	C1D1U1 = 7,
+	DRAM_CLKTREE_NUM = 8,
+};
+
+struct tegra210_emc_per_channel_regs {
+	u16 bank;
+	u16 offset;
+};
+
+struct tegra210_emc_table_register_offsets {
+	u16 burst[221];
+	u16 trim[138];
+	u16 burst_mc[33];
+	u16 la_scale[24];
+	struct tegra210_emc_per_channel_regs burst_per_channel[8];
+	struct tegra210_emc_per_channel_regs trim_per_channel[10];
+	struct tegra210_emc_per_channel_regs vref_per_channel[4];
+};
+
+struct tegra210_emc_timing {
+	u32 revision;
+	const char dvfs_ver[60];
+	u32 rate;
+	u32 min_volt;
+	u32 gpu_min_volt;
+	const char clock_src[32];
+	u32 clk_src_emc;
+	u32 needs_training;
+	u32 training_pattern;
+	u32 trained;
+	u32 periodic_training;
+	u32 trained_dram_clktree[8];
+	u32 current_dram_clktree[8];
+	u32 run_clocks;
+	u32 tree_margin;
+	u32 num_burst;
+	u32 num_burst_per_ch;
+	u32 num_trim;
+	u32 num_trim_per_ch;
+	u32 num_mc_regs;
+	u32 num_up_down;
+	u32 vref_num;
+	u32 training_mod_num;
+	u32 dram_timing_num;
+	u32 ptfv_list[12];
+	u32 burst_regs[221];
+	u32 burst_reg_per_ch[8];
+	u32 shadow_regs_ca_train[221];
+	u32 shadow_regs_quse_train[221];
+	u32 shadow_regs_rdwr_train[221];
+	u32 trim_regs[138];
+	u32 trim_perch_regs[10];
+	u32 vref_perch_regs[4];
+	u32 dram_timings[5];
+	u32 training_mod_regs[20];
+	u32 save_restore_mod_regs[12];
+	u32 burst_mc_regs[33];
+	u32 la_scale_regs[24];
+	u32 min_mrs_wait;
+	u32 emc_mrw;
+	u32 emc_mrw2;
+	u32 emc_mrw3;
+	u32 emc_mrw4;
+	u32 emc_mrw9;
+	u32 emc_mrs;
+	u32 emc_emrs;
+	u32 emc_emrs2;
+	u32 emc_auto_cal_config;
+	u32 emc_auto_cal_config2;
+	u32 emc_auto_cal_config3;
+	u32 emc_auto_cal_config4;
+	u32 emc_auto_cal_config5;
+	u32 emc_auto_cal_config6;
+	u32 emc_auto_cal_config7;
+	u32 emc_auto_cal_config8;
+	u32 emc_cfg_2;
+	u32 emc_sel_dpd_ctrl;
+	u32 emc_fdpd_ctrl_cmd_no_ramp;
+	u32 dll_clk_src;
+	u32 clk_out_enb_x_0_clk_enb_emc_dll;
+	u32 latency;
+};
+
+enum tegra210_emc_refresh {
+	TEGRA210_EMC_REFRESH_NOMINAL = 0,
+	TEGRA210_EMC_REFRESH_2X = 1,
+	TEGRA210_EMC_REFRESH_4X = 2,
+	TEGRA210_EMC_REFRESH_THROTTLE = 3,
+};
+
+struct tegra_mc;
+
+struct tegra210_emc_sequence;
+
+struct tegra210_emc {
+	struct tegra_mc *mc;
+	struct device *dev;
+	struct clk *clk;
+	struct tegra210_emc_timing *nominal;
+	struct tegra210_emc_timing *derated;
+	struct tegra210_emc_timing *timings;
+	unsigned int num_timings;
+	const struct tegra210_emc_table_register_offsets *offsets;
+	const struct tegra210_emc_sequence *sequence;
+	spinlock_t lock;
+	void *regs;
+	void *channel[2];
+	unsigned int num_channels;
+	unsigned int num_devices;
+	unsigned int dram_type;
+	struct tegra210_emc_timing *last;
+	struct tegra210_emc_timing *next;
+	unsigned int training_interval;
+	struct timer_list training;
+	enum tegra210_emc_refresh refresh;
+	unsigned int refresh_poll_interval;
+	struct timer_list refresh_timer;
+	unsigned int temperature;
+	atomic_t refresh_poll;
+	ktime_t clkchange_time;
+	int clkchange_delay;
+	long unsigned int resume_rate;
+	struct {
+		struct dentry *root;
+		long unsigned int min_rate;
+		long unsigned int max_rate;
+		unsigned int temperature;
+	} debugfs;
+	struct tegra210_clk_emc_provider provider;
+};
+
+struct tegra210_emc_sequence {
+	u8 revision;
+	void (*set_clock)(struct tegra210_emc *, u32);
+	u32 (*periodic_compensation)(struct tegra210_emc *);
+};
+
+struct pmu_irq_ops {
+	void (*enable_pmuirq)(unsigned int);
+	void (*disable_pmuirq)(unsigned int);
+	void (*free_pmuirq)(unsigned int, int, void *);
+};
+
+enum mf_result {
+	MF_IGNORED = 0,
+	MF_FAILED = 1,
+	MF_DELAYED = 2,
+	MF_RECOVERED = 3,
+};
+
+enum mf_action_page_type {
+	MF_MSG_KERNEL = 0,
+	MF_MSG_KERNEL_HIGH_ORDER = 1,
+	MF_MSG_SLAB = 2,
+	MF_MSG_DIFFERENT_COMPOUND = 3,
+	MF_MSG_HUGE = 4,
+	MF_MSG_FREE_HUGE = 5,
+	MF_MSG_UNMAP_FAILED = 6,
+	MF_MSG_DIRTY_SWAPCACHE = 7,
+	MF_MSG_CLEAN_SWAPCACHE = 8,
+	MF_MSG_DIRTY_MLOCKED_LRU = 9,
+	MF_MSG_CLEAN_MLOCKED_LRU = 10,
+	MF_MSG_DIRTY_UNEVICTABLE_LRU = 11,
+	MF_MSG_CLEAN_UNEVICTABLE_LRU = 12,
+	MF_MSG_DIRTY_LRU = 13,
+	MF_MSG_CLEAN_LRU = 14,
+	MF_MSG_TRUNCATED_LRU = 15,
+	MF_MSG_BUDDY = 16,
+	MF_MSG_DAX = 17,
+	MF_MSG_UNSPLIT_THP = 18,
+	MF_MSG_UNKNOWN = 19,
+};
+
 struct trace_event_raw_mc_event {
 	struct trace_entry ent;
 	unsigned int error_type;
@@ -95834,6 +129666,34 @@
 
 typedef void (*btf_trace_memory_failure_event)(void *, long unsigned int, int, int);
 
+struct tb_property_entry {
+	u32 key_hi;
+	u32 key_lo;
+	u16 length;
+	u8 reserved;
+	u8 type;
+	u32 value;
+};
+
+struct tb_property_rootdir_entry {
+	u32 magic;
+	u32 length;
+	struct tb_property_entry entries[0];
+};
+
+struct tb_property_dir_entry {
+	u32 uuid[4];
+	struct tb_property_entry entries[0];
+};
+
+struct tb_quirk {
+	u16 hw_vendor_id;
+	u16 hw_device_id;
+	u16 vendor;
+	u16 device;
+	void (*hook)(struct tb_switch *);
+};
+
 enum {
 	NVMEM_ADD = 1,
 	NVMEM_REMOVE = 2,
@@ -95848,7 +129708,7 @@
 	struct list_head node;
 };
 
-struct nvmem_device___2 {
+struct nvmem_device {
 	struct module *owner;
 	struct device dev;
 	int stride;
@@ -95863,989 +129723,122 @@
 	struct bin_attribute eeprom;
 	struct device *base_dev;
 	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
 	nvmem_reg_read_t reg_read;
 	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
 	struct gpio_desc *wp_gpio;
 	void *priv;
 };
 
-struct nvmem_cell {
+struct nvmem_cell_entry {
 	const char *name;
 	int offset;
 	int bytes;
 	int bit_offset;
 	int nbits;
 	struct device_node *np;
-	struct nvmem_device___2 *nvmem;
+	struct nvmem_device *nvmem;
 	struct list_head node;
 };
 
-struct net_device_devres {
-	struct net_device *ndev;
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
 };
 
-struct __kernel_old_timespec {
-	__kernel_old_time_t tv_sec;
-	long int tv_nsec;
+enum hte_return {
+	HTE_CB_HANDLED = 0,
+	HTE_RUN_SECOND_CB = 1,
 };
 
-struct __kernel_sock_timeval {
-	__s64 tv_sec;
-	__s64 tv_usec;
+struct hte_ts_data {
+	u64 tsc;
+	u64 seq;
+	int raw_level;
 };
 
-struct mmsghdr {
-	struct user_msghdr msg_hdr;
-	unsigned int msg_len;
+struct hte_clk_info {
+	u64 hz;
+	clockid_t type;
 };
 
-struct scm_timestamping_internal {
-	struct timespec64 ts[3];
+typedef enum hte_return (*hte_ts_cb_t)(struct hte_ts_data *, void *);
+
+typedef enum hte_return (*hte_ts_sec_cb_t)(void *);
+
+struct hte_line_attr {
+	u32 line_id;
+	void *line_data;
+	long unsigned int edge_flags;
+	const char *name;
 };
 
-enum sock_shutdown_cmd {
-	SHUT_RD = 0,
-	SHUT_WR = 1,
-	SHUT_RDWR = 2,
+struct hte_ts_desc {
+	struct hte_line_attr attr;
+	void *hte_data;
 };
 
-struct net_proto_family {
-	int family;
-	int (*create)(struct net *, struct socket *, int, int);
+struct hte_chip;
+
+struct hte_ops {
+	int (*request)(struct hte_chip *, struct hte_ts_desc *, u32);
+	int (*release)(struct hte_chip *, struct hte_ts_desc *, u32);
+	int (*enable)(struct hte_chip *, u32);
+	int (*disable)(struct hte_chip *, u32);
+	int (*get_clk_src_info)(struct hte_chip *, struct hte_clk_info *);
+};
+
+struct hte_device;
+
+struct hte_chip {
+	const char *name;
+	struct device *dev;
+	const struct hte_ops *ops;
+	u32 nlines;
+	int (*xlate_of)(struct hte_chip *, const struct of_phandle_args *, struct hte_ts_desc *, u32 *);
+	int (*xlate_plat)(struct hte_chip *, struct hte_ts_desc *, u32 *);
+	bool (*match_from_linedata)(const struct hte_chip *, const struct hte_ts_desc *);
+	u8 of_hte_n_cells;
+	struct hte_device *gdev;
+	void *data;
+};
+
+struct hte_ts_info {
+	u32 xlated_id;
+	long unsigned int flags;
+	long unsigned int hte_cb_flags;
+	u64 seq;
+	char *line_name;
+	bool free_attr_name;
+	hte_ts_cb_t cb;
+	hte_ts_sec_cb_t tcb;
+	atomic_t dropped_ts;
+	spinlock_t slock;
+	struct work_struct cb_work;
+	struct mutex req_mlock;
+	struct dentry *ts_dbg_root;
+	struct hte_device *gdev;
+	void *cl_data;
+};
+
+struct hte_device {
+	u32 nlines;
+	atomic_t ts_req;
+	struct device *sdev;
+	struct dentry *dbg_root;
+	struct list_head list;
+	struct hte_chip *chip;
 	struct module *owner;
+	struct hte_ts_info ei[0];
 };
 
 enum {
-	SOCK_WAKE_IO = 0,
-	SOCK_WAKE_WAITD = 1,
-	SOCK_WAKE_SPACE = 2,
-	SOCK_WAKE_URG = 3,
-};
-
-struct ifconf {
-	int ifc_len;
-	union {
-		char *ifcu_buf;
-		struct ifreq *ifcu_req;
-	} ifc_ifcu;
-};
-
-struct compat_ifmap {
-	compat_ulong_t mem_start;
-	compat_ulong_t mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
-};
-
-struct compat_if_settings {
-	unsigned int type;
-	unsigned int size;
-	compat_uptr_t ifs_ifsu;
-};
-
-struct compat_ifreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union {
-		struct sockaddr ifru_addr;
-		struct sockaddr ifru_dstaddr;
-		struct sockaddr ifru_broadaddr;
-		struct sockaddr ifru_netmask;
-		struct sockaddr ifru_hwaddr;
-		short int ifru_flags;
-		compat_int_t ifru_ivalue;
-		compat_int_t ifru_mtu;
-		struct compat_ifmap ifru_map;
-		char ifru_slave[16];
-		char ifru_newname[16];
-		compat_caddr_t ifru_data;
-		struct compat_if_settings ifru_settings;
-	} ifr_ifru;
-};
-
-struct compat_ifconf {
-	compat_int_t ifc_len;
-	compat_caddr_t ifcbuf;
-};
-
-struct compat_ethtool_rx_flow_spec {
-	u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	compat_u64 ring_cookie;
-	u32 location;
-};
-
-struct compat_ethtool_rxnfc {
-	u32 cmd;
-	u32 flow_type;
-	compat_u64 data;
-	struct compat_ethtool_rx_flow_spec fs;
-	u32 rule_cnt;
-	u32 rule_locs[0];
-};
-
-struct libipw_device;
-
-struct iw_spy_data;
-
-struct iw_public_data {
-	struct iw_spy_data *spy_data;
-	struct libipw_device *libipw;
-};
-
-struct iw_param {
-	__s32 value;
-	__u8 fixed;
-	__u8 disabled;
-	__u16 flags;
-};
-
-struct iw_point {
-	void *pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct iw_freq {
-	__s32 m;
-	__s16 e;
-	__u8 i;
-	__u8 flags;
-};
-
-struct iw_quality {
-	__u8 qual;
-	__u8 level;
-	__u8 noise;
-	__u8 updated;
-};
-
-struct iw_discarded {
-	__u32 nwid;
-	__u32 code;
-	__u32 fragment;
-	__u32 retries;
-	__u32 misc;
-};
-
-struct iw_missed {
-	__u32 beacon;
-};
-
-struct iw_statistics {
-	__u16 status;
-	struct iw_quality qual;
-	struct iw_discarded discard;
-	struct iw_missed miss;
-};
-
-union iwreq_data {
-	char name[16];
-	struct iw_point essid;
-	struct iw_param nwid;
-	struct iw_freq freq;
-	struct iw_param sens;
-	struct iw_param bitrate;
-	struct iw_param txpower;
-	struct iw_param rts;
-	struct iw_param frag;
-	__u32 mode;
-	struct iw_param retry;
-	struct iw_point encoding;
-	struct iw_param power;
-	struct iw_quality qual;
-	struct sockaddr ap_addr;
-	struct sockaddr addr;
-	struct iw_param param;
-	struct iw_point data;
-};
-
-struct iw_priv_args {
-	__u32 cmd;
-	__u16 set_args;
-	__u16 get_args;
-	char name[16];
-};
-
-struct compat_mmsghdr {
-	struct compat_msghdr msg_hdr;
-	compat_uint_t msg_len;
-};
-
-struct iw_request_info {
-	__u16 cmd;
-	__u16 flags;
-};
-
-struct iw_spy_data {
-	int spy_number;
-	u_char spy_address[48];
-	struct iw_quality spy_stat[8];
-	struct iw_quality spy_thr_low;
-	struct iw_quality spy_thr_high;
-	u_char spy_thr_under[8];
-};
-
-enum {
-	SOF_TIMESTAMPING_TX_HARDWARE = 1,
-	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
-	SOF_TIMESTAMPING_RX_HARDWARE = 4,
-	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
-	SOF_TIMESTAMPING_SOFTWARE = 16,
-	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
-	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
-	SOF_TIMESTAMPING_OPT_ID = 128,
-	SOF_TIMESTAMPING_TX_SCHED = 256,
-	SOF_TIMESTAMPING_TX_ACK = 512,
-	SOF_TIMESTAMPING_OPT_CMSG = 1024,
-	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
-	SOF_TIMESTAMPING_OPT_STATS = 4096,
-	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
-	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
-	SOF_TIMESTAMPING_LAST = 16384,
-	SOF_TIMESTAMPING_MASK = 32767,
-};
-
-struct scm_ts_pktinfo {
-	__u32 if_index;
-	__u32 pkt_length;
-	__u32 reserved[2];
-};
-
-struct sock_skb_cb {
-	u32 dropcount;
-};
-
-struct sock_ee_data_rfc4884 {
-	__u16 len;
-	__u8 flags;
-	__u8 reserved;
-};
-
-struct sock_extended_err {
-	__u32 ee_errno;
-	__u8 ee_origin;
-	__u8 ee_type;
-	__u8 ee_code;
-	__u8 ee_pad;
-	__u32 ee_info;
-	union {
-		__u32 ee_data;
-		struct sock_ee_data_rfc4884 ee_rfc4884;
-	};
-};
-
-struct sock_exterr_skb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	struct sock_extended_err ee;
-	u16 addr_offset;
-	__be16 port;
-	u8 opt_stats: 1;
-	u8 unused: 7;
-};
-
-struct used_address {
-	struct __kernel_sockaddr_storage name;
-	unsigned int name_len;
-};
-
-struct linger {
-	int l_onoff;
-	int l_linger;
-};
-
-struct cmsghdr {
-	__kernel_size_t cmsg_len;
-	int cmsg_level;
-	int cmsg_type;
-};
-
-struct ucred {
-	__u32 pid;
-	__u32 uid;
-	__u32 gid;
-};
-
-struct mmpin {
-	struct user_struct *user;
-	unsigned int num_pg;
-};
-
-struct ubuf_info {
-	void (*callback)(struct ubuf_info *, bool);
-	union {
-		struct {
-			long unsigned int desc;
-			void *ctx;
-		};
-		struct {
-			u32 id;
-			u16 len;
-			u16 zerocopy: 1;
-			u32 bytelen;
-		};
-	};
-	refcount_t refcnt;
-	struct mmpin mmp;
-};
-
-struct prot_inuse {
-	int val[64];
-};
-
-struct sd_flow_limit {
-	u64 count;
-	unsigned int num_buckets;
-	unsigned int history_head;
-	u16 history[128];
-	u8 buckets[0];
-};
-
-struct softnet_data {
-	struct list_head poll_list;
-	struct sk_buff_head process_queue;
-	unsigned int processed;
-	unsigned int time_squeeze;
-	unsigned int received_rps;
-	struct softnet_data *rps_ipi_list;
-	struct sd_flow_limit *flow_limit;
-	struct Qdisc *output_queue;
-	struct Qdisc **output_queue_tailp;
-	struct sk_buff *completion_queue;
-	struct sk_buff_head xfrm_backlog;
-	struct {
-		u16 recursion;
-		u8 more;
-	} xmit;
-	int: 32;
-	unsigned int input_queue_head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t csd;
-	struct softnet_data *rps_ipi_next;
-	unsigned int cpu;
-	unsigned int input_queue_tail;
-	unsigned int dropped;
-	struct sk_buff_head input_pkt_queue;
-	struct napi_struct backlog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum txtime_flags {
-	SOF_TXTIME_DEADLINE_MODE = 1,
-	SOF_TXTIME_REPORT_ERRORS = 2,
-	SOF_TXTIME_FLAGS_LAST = 2,
-	SOF_TXTIME_FLAGS_MASK = 3,
-};
-
-struct sock_txtime {
-	__kernel_clockid_t clockid;
-	__u32 flags;
-};
-
-enum sk_pacing {
-	SK_PACING_NONE = 0,
-	SK_PACING_NEEDED = 1,
-	SK_PACING_FQ = 2,
-};
-
-struct sockcm_cookie {
-	u64 transmit_time;
-	u32 mark;
-	u16 tsflags;
-};
-
-struct inet_bind_bucket {
-	possible_net_t ib_net;
-	int l3mdev;
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct in6_addr fast_v6_rcv_saddr;
-	__be32 fast_rcv_saddr;
-	short unsigned int fast_sk_family;
-	bool fast_ipv6_only;
-	struct hlist_node node;
-	struct hlist_head owners;
-};
-
-struct tcp_fastopen_cookie {
-	__le64 val[2];
-	s8 len;
-	bool exp;
-};
-
-struct tcp_sack_block {
-	u32 start_seq;
-	u32 end_seq;
-};
-
-struct tcp_options_received {
-	int ts_recent_stamp;
-	u32 ts_recent;
-	u32 rcv_tsval;
-	u32 rcv_tsecr;
-	u16 saw_tstamp: 1;
-	u16 tstamp_ok: 1;
-	u16 dsack: 1;
-	u16 wscale_ok: 1;
-	u16 sack_ok: 3;
-	u16 smc_ok: 1;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u8 saw_unknown: 1;
-	u8 unused: 7;
-	u8 num_sacks;
-	u16 user_mss;
-	u16 mss_clamp;
-};
-
-struct tcp_rack {
-	u64 mstamp;
-	u32 rtt_us;
-	u32 end_seq;
-	u32 last_delivered;
-	u8 reo_wnd_steps;
-	u8 reo_wnd_persist: 5;
-	u8 dsack_seen: 1;
-	u8 advanced: 1;
-};
-
-struct tcp_sock_af_ops;
-
-struct tcp_md5sig_info;
-
-struct tcp_fastopen_request;
-
-struct tcp_sock {
-	struct inet_connection_sock inet_conn;
-	u16 tcp_header_len;
-	u16 gso_segs;
-	__be32 pred_flags;
-	u64 bytes_received;
-	u32 segs_in;
-	u32 data_segs_in;
-	u32 rcv_nxt;
-	u32 copied_seq;
-	u32 rcv_wup;
-	u32 snd_nxt;
-	u32 segs_out;
-	u32 data_segs_out;
-	u64 bytes_sent;
-	u64 bytes_acked;
-	u32 dsack_dups;
-	u32 snd_una;
-	u32 snd_sml;
-	u32 rcv_tstamp;
-	u32 lsndtime;
-	u32 last_oow_ack_time;
-	u32 compressed_ack_rcv_nxt;
-	u32 tsoffset;
-	struct list_head tsq_node;
-	struct list_head tsorted_sent_queue;
-	u32 snd_wl1;
-	u32 snd_wnd;
-	u32 max_window;
-	u32 mss_cache;
-	u32 window_clamp;
-	u32 rcv_ssthresh;
-	struct tcp_rack rack;
-	u16 advmss;
-	u8 compressed_ack;
-	u8 dup_ack_counter: 2;
-	u8 tlp_retrans: 1;
-	u8 unused: 5;
-	u32 chrono_start;
-	u32 chrono_stat[3];
-	u8 chrono_type: 2;
-	u8 rate_app_limited: 1;
-	u8 fastopen_connect: 1;
-	u8 fastopen_no_cookie: 1;
-	u8 is_sack_reneg: 1;
-	u8 fastopen_client_fail: 2;
-	u8 nonagle: 4;
-	u8 thin_lto: 1;
-	u8 recvmsg_inq: 1;
-	u8 repair: 1;
-	u8 frto: 1;
-	u8 repair_queue;
-	u8 save_syn: 2;
-	u8 syn_data: 1;
-	u8 syn_fastopen: 1;
-	u8 syn_fastopen_exp: 1;
-	u8 syn_fastopen_ch: 1;
-	u8 syn_data_acked: 1;
-	u8 is_cwnd_limited: 1;
-	u32 tlp_high_seq;
-	u32 tcp_tx_delay;
-	u64 tcp_wstamp_ns;
-	u64 tcp_clock_cache;
-	u64 tcp_mstamp;
-	u32 srtt_us;
-	u32 mdev_us;
-	u32 mdev_max_us;
-	u32 rttvar_us;
-	u32 rtt_seq;
-	struct minmax rtt_min;
-	u32 packets_out;
-	u32 retrans_out;
-	u32 max_packets_out;
-	u32 max_packets_seq;
-	u16 urg_data;
-	u8 ecn_flags;
-	u8 keepalive_probes;
-	u32 reordering;
-	u32 reord_seen;
-	u32 snd_up;
-	struct tcp_options_received rx_opt;
-	u32 snd_ssthresh;
-	u32 snd_cwnd;
-	u32 snd_cwnd_cnt;
-	u32 snd_cwnd_clamp;
-	u32 snd_cwnd_used;
-	u32 snd_cwnd_stamp;
-	u32 prior_cwnd;
-	u32 prr_delivered;
-	u32 prr_out;
-	u32 delivered;
-	u32 delivered_ce;
-	u32 lost;
-	u32 app_limited;
-	u64 first_tx_mstamp;
-	u64 delivered_mstamp;
-	u32 rate_delivered;
-	u32 rate_interval_us;
-	u32 rcv_wnd;
-	u32 write_seq;
-	u32 notsent_lowat;
-	u32 pushed_seq;
-	u32 lost_out;
-	u32 sacked_out;
-	struct hrtimer pacing_timer;
-	struct hrtimer compressed_ack_timer;
-	struct sk_buff *lost_skb_hint;
-	struct sk_buff *retransmit_skb_hint;
-	struct rb_root out_of_order_queue;
-	struct sk_buff *ooo_last_skb;
-	struct tcp_sack_block duplicate_sack[1];
-	struct tcp_sack_block selective_acks[4];
-	struct tcp_sack_block recv_sack_cache[4];
-	struct sk_buff *highest_sack;
-	int lost_cnt_hint;
-	u32 prior_ssthresh;
-	u32 high_seq;
-	u32 retrans_stamp;
-	u32 undo_marker;
-	int undo_retrans;
-	u64 bytes_retrans;
-	u32 total_retrans;
-	u32 urg_seq;
-	unsigned int keepalive_time;
-	unsigned int keepalive_intvl;
-	int linger2;
-	u8 bpf_sock_ops_cb_flags;
-	u16 timeout_rehash;
-	u32 rcv_ooopack;
-	u32 rcv_rtt_last_tsecr;
-	struct {
-		u32 rtt_us;
-		u32 seq;
-		u64 time;
-	} rcv_rtt_est;
-	struct {
-		u32 space;
-		u32 seq;
-		u64 time;
-	} rcvq_space;
-	struct {
-		u32 probe_seq_start;
-		u32 probe_seq_end;
-	} mtu_probe;
-	u32 mtu_info;
-	bool is_mptcp;
-	bool syn_smc;
-	const struct tcp_sock_af_ops *af_specific;
-	struct tcp_md5sig_info *md5sig_info;
-	struct tcp_fastopen_request *fastopen_req;
-	struct request_sock *fastopen_rsk;
-	struct saved_syn *saved_syn;
-};
-
-struct tcp_md5sig_key;
-
-struct tcp_sock_af_ops {
-	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	int (*md5_parse)(struct sock *, int, sockptr_t, int);
-};
-
-struct tcp_md5sig_info {
-	struct hlist_head head;
-	struct callback_head rcu;
-};
-
-struct tcp_fastopen_request {
-	struct tcp_fastopen_cookie cookie;
-	struct msghdr *data;
-	size_t size;
-	int copied;
-	struct ubuf_info *uarg;
-};
-
-union tcp_md5_addr {
-	struct in_addr a4;
-	struct in6_addr a6;
-};
-
-struct tcp_md5sig_key {
-	struct hlist_node node;
-	u8 keylen;
-	u8 family;
-	u8 prefixlen;
-	union tcp_md5_addr addr;
-	int l3index;
-	u8 key[80];
-	struct callback_head rcu;
-};
-
-struct net_protocol {
-	int (*early_demux)(struct sk_buff *);
-	int (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, u32);
-	unsigned int no_policy: 1;
-	unsigned int netns_ok: 1;
-	unsigned int icmp_strict_tag_validation: 1;
-};
-
-struct cgroup_cls_state {
-	struct cgroup_subsys_state css;
-	u32 classid;
-};
-
-enum {
-	SK_MEMINFO_RMEM_ALLOC = 0,
-	SK_MEMINFO_RCVBUF = 1,
-	SK_MEMINFO_WMEM_ALLOC = 2,
-	SK_MEMINFO_SNDBUF = 3,
-	SK_MEMINFO_FWD_ALLOC = 4,
-	SK_MEMINFO_WMEM_QUEUED = 5,
-	SK_MEMINFO_OPTMEM = 6,
-	SK_MEMINFO_BACKLOG = 7,
-	SK_MEMINFO_DROPS = 8,
-	SK_MEMINFO_VARS = 9,
-};
-
-enum sknetlink_groups {
-	SKNLGRP_NONE = 0,
-	SKNLGRP_INET_TCP_DESTROY = 1,
-	SKNLGRP_INET_UDP_DESTROY = 2,
-	SKNLGRP_INET6_TCP_DESTROY = 3,
-	SKNLGRP_INET6_UDP_DESTROY = 4,
-	__SKNLGRP_MAX = 5,
-};
-
-struct inet_request_sock {
-	struct request_sock req;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u16 tstamp_ok: 1;
-	u16 sack_ok: 1;
-	u16 wscale_ok: 1;
-	u16 ecn_ok: 1;
-	u16 acked: 1;
-	u16 no_srccheck: 1;
-	u16 smc_ok: 1;
-	u32 ir_mark;
-	union {
-		struct ip_options_rcu *ireq_opt;
-		struct {
-			struct ipv6_txoptions *ipv6_opt;
-			struct sk_buff *pktopts;
-		};
-	};
-};
-
-struct tcp_request_sock_ops;
-
-struct tcp_request_sock {
-	struct inet_request_sock req;
-	const struct tcp_request_sock_ops *af_specific;
-	u64 snt_synack;
-	bool tfo_listener;
-	bool is_mptcp;
-	bool drop_req;
-	u32 txhash;
-	u32 rcv_isn;
-	u32 snt_isn;
-	u32 ts_off;
-	u32 last_oow_ack_time;
-	u32 rcv_nxt;
-	u8 syn_tos;
-};
-
-enum tcp_synack_type {
-	TCP_SYNACK_NORMAL = 0,
-	TCP_SYNACK_FASTOPEN = 1,
-	TCP_SYNACK_COOKIE = 2,
-};
-
-struct tcp_request_sock_ops {
-	u16 mss_clamp;
-	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	void (*init_req)(struct request_sock *, const struct sock *, struct sk_buff *);
-	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
-	struct dst_entry * (*route_req)(const struct sock *, struct flowi *, const struct request_sock *);
-	u32 (*init_seq)(const struct sk_buff *);
-	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
-	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
-};
-
-struct nf_conntrack {
-	atomic_t use;
-};
-
-enum {
-	SKB_FCLONE_UNAVAILABLE = 0,
-	SKB_FCLONE_ORIG = 1,
-	SKB_FCLONE_CLONE = 2,
-};
-
-struct sk_buff_fclones {
-	struct sk_buff skb1;
-	struct sk_buff skb2;
-	refcount_t fclone_ref;
-};
-
-struct skb_seq_state {
-	__u32 lower_offset;
-	__u32 upper_offset;
-	__u32 frag_idx;
-	__u32 stepped_offset;
-	struct sk_buff *root_skb;
-	struct sk_buff *cur_skb;
-	__u8 *frag_data;
-};
-
-struct skb_checksum_ops {
-	__wsum (*update)(const void *, int, __wsum);
-	__wsum (*combine)(__wsum, __wsum, int, int);
-};
-
-struct skb_gso_cb {
-	union {
-		int mac_offset;
-		int data_offset;
-	};
-	int encap_level;
-	__wsum csum;
-	__u16 csum_start;
-};
-
-struct napi_gro_cb {
-	void *frag0;
-	unsigned int frag0_len;
-	int data_offset;
-	u16 flush;
-	u16 flush_id;
-	u16 count;
-	u16 gro_remcsum_start;
-	long unsigned int age;
-	u16 proto;
-	u8 same_flow: 1;
-	u8 encap_mark: 1;
-	u8 csum_valid: 1;
-	u8 csum_cnt: 3;
-	u8 free: 2;
-	u8 is_ipv6: 1;
-	u8 is_fou: 1;
-	u8 is_atomic: 1;
-	u8 recursion_counter: 4;
-	u8 is_flist: 1;
-	__wsum csum;
-	struct sk_buff *last;
-};
-
-struct vlan_hdr {
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct vlan_ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct qdisc_walker {
-	int stop;
-	int skip;
-	int count;
-	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
-};
-
-struct ip_auth_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__be16 reserved;
-	__be32 spi;
-	__be32 seq_no;
-	__u8 auth_data[0];
-};
-
-struct frag_hdr {
-	__u8 nexthdr;
-	__u8 reserved;
-	__be16 frag_off;
-	__be32 identification;
-};
-
-enum {
-	SCM_TSTAMP_SND = 0,
-	SCM_TSTAMP_SCHED = 1,
-	SCM_TSTAMP_ACK = 2,
-};
-
-struct mpls_shim_hdr {
-	__be32 label_stack_entry;
-};
-
-struct napi_alloc_cache {
-	struct page_frag_cache page;
-	unsigned int skb_count;
-	void *skb_cache[64];
-};
-
-struct ahash_request___2;
-
-struct scm_cookie {
-	struct pid *pid;
-	struct scm_fp_list *fp;
-	struct scm_creds creds;
-	u32 secid;
-};
-
-struct scm_timestamping {
-	struct __kernel_old_timespec ts[3];
-};
-
-struct scm_timestamping64 {
-	struct __kernel_timespec ts[3];
-};
-
-enum {
-	TCA_STATS_UNSPEC = 0,
-	TCA_STATS_BASIC = 1,
-	TCA_STATS_RATE_EST = 2,
-	TCA_STATS_QUEUE = 3,
-	TCA_STATS_APP = 4,
-	TCA_STATS_RATE_EST64 = 5,
-	TCA_STATS_PAD = 6,
-	TCA_STATS_BASIC_HW = 7,
-	TCA_STATS_PKT64 = 8,
-	__TCA_STATS_MAX = 9,
-};
-
-struct gnet_stats_basic {
-	__u64 bytes;
-	__u32 packets;
-};
-
-struct gnet_stats_rate_est {
-	__u32 bps;
-	__u32 pps;
-};
-
-struct gnet_stats_rate_est64 {
-	__u64 bps;
-	__u64 pps;
-};
-
-struct gnet_estimator {
-	signed char interval;
-	unsigned char ewma_log;
-};
-
-struct net_rate_estimator {
-	struct gnet_stats_basic_packed *bstats;
-	spinlock_t *stats_lock;
-	seqcount_t *running;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	u8 ewma_log;
-	u8 intvl_log;
-	seqcount_t seq;
-	u64 last_packets;
-	u64 last_bytes;
-	u64 avpps;
-	u64 avbps;
-	long unsigned int next_jiffies;
-	struct timer_list timer;
-	struct callback_head rcu;
-};
-
-struct rtgenmsg {
-	unsigned char rtgen_family;
-};
-
-enum rtnetlink_groups {
-	RTNLGRP_NONE = 0,
-	RTNLGRP_LINK = 1,
-	RTNLGRP_NOTIFY = 2,
-	RTNLGRP_NEIGH = 3,
-	RTNLGRP_TC = 4,
-	RTNLGRP_IPV4_IFADDR = 5,
-	RTNLGRP_IPV4_MROUTE = 6,
-	RTNLGRP_IPV4_ROUTE = 7,
-	RTNLGRP_IPV4_RULE = 8,
-	RTNLGRP_IPV6_IFADDR = 9,
-	RTNLGRP_IPV6_MROUTE = 10,
-	RTNLGRP_IPV6_ROUTE = 11,
-	RTNLGRP_IPV6_IFINFO = 12,
-	RTNLGRP_DECnet_IFADDR = 13,
-	RTNLGRP_NOP2 = 14,
-	RTNLGRP_DECnet_ROUTE = 15,
-	RTNLGRP_DECnet_RULE = 16,
-	RTNLGRP_NOP4 = 17,
-	RTNLGRP_IPV6_PREFIX = 18,
-	RTNLGRP_IPV6_RULE = 19,
-	RTNLGRP_ND_USEROPT = 20,
-	RTNLGRP_PHONET_IFADDR = 21,
-	RTNLGRP_PHONET_ROUTE = 22,
-	RTNLGRP_DCB = 23,
-	RTNLGRP_IPV4_NETCONF = 24,
-	RTNLGRP_IPV6_NETCONF = 25,
-	RTNLGRP_MDB = 26,
-	RTNLGRP_MPLS_ROUTE = 27,
-	RTNLGRP_NSID = 28,
-	RTNLGRP_MPLS_NETCONF = 29,
-	RTNLGRP_IPV4_MROUTE_R = 30,
-	RTNLGRP_IPV6_MROUTE_R = 31,
-	RTNLGRP_NEXTHOP = 32,
-	RTNLGRP_BRVLAN = 33,
-	__RTNLGRP_MAX = 34,
+	HTE_TS_REGISTERED = 0,
+	HTE_TS_REQ = 1,
+	HTE_TS_DISABLE = 2,
+	HTE_TS_QUEUE_WK = 3,
 };
 
 enum {
@@ -96858,34 +129851,6 @@
 	__NETNSA_MAX = 6,
 };
 
-struct pcpu_gen_cookie {
-	local_t nesting;
-	u64 last;
-};
-
-struct gen_cookie {
-	struct pcpu_gen_cookie *local;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic64_t forward_last;
-	atomic64_t reverse_last;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum rtnl_link_flags {
-	RTNL_FLAG_DOIT_UNLOCKED = 1,
-};
-
 struct net_fill_args {
 	u32 portid;
 	u32 seq;
@@ -96905,1638 +129870,7268 @@
 	int s_idx;
 };
 
-typedef u16 u_int16_t;
-
-typedef u32 u_int32_t;
-
-typedef u64 u_int64_t;
-
-struct flow_dissector_key_control {
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
 };
 
-enum flow_dissect_ret {
-	FLOW_DISSECT_RET_OUT_GOOD = 0,
-	FLOW_DISSECT_RET_OUT_BAD = 1,
-	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
-	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
-	FLOW_DISSECT_RET_CONTINUE = 4,
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
 };
 
-struct flow_dissector_key_basic {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
 };
 
-struct flow_dissector_key_tags {
-	u32 flow_label;
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
 };
 
-struct flow_dissector_key_vlan {
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 msg_ready: 1;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	spinlock_t decrypt_compl_lock;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
 	union {
-		struct {
-			u16 vlan_id: 12;
-			u16 vlan_dei: 1;
-			u16 vlan_priority: 3;
-		};
-		__be16 vlan_tci;
-	};
-	__be16 vlan_tpid;
-};
-
-struct flow_dissector_mpls_lse {
-	u32 mpls_ttl: 8;
-	u32 mpls_bos: 1;
-	u32 mpls_tc: 3;
-	u32 mpls_label: 20;
-};
-
-struct flow_dissector_key_mpls {
-	struct flow_dissector_mpls_lse ls[7];
-	u8 used_lses;
-};
-
-struct flow_dissector_key_enc_opts {
-	u8 data[255];
-	u8 len;
-	__be16 dst_opt_type;
-};
-
-struct flow_dissector_key_keyid {
-	__be32 keyid;
-};
-
-struct flow_dissector_key_ipv4_addrs {
-	__be32 src;
-	__be32 dst;
-};
-
-struct flow_dissector_key_ipv6_addrs {
-	struct in6_addr src;
-	struct in6_addr dst;
-};
-
-struct flow_dissector_key_tipc {
-	__be32 key;
-};
-
-struct flow_dissector_key_addrs {
-	union {
-		struct flow_dissector_key_ipv4_addrs v4addrs;
-		struct flow_dissector_key_ipv6_addrs v6addrs;
-		struct flow_dissector_key_tipc tipckey;
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
 	};
 };
 
-struct flow_dissector_key_arp {
-	__u32 sip;
-	__u32 tip;
-	__u8 op;
-	unsigned char sha[6];
-	unsigned char tha[6];
-};
-
-struct flow_dissector_key_ports {
-	union {
-		__be32 ports;
-		struct {
-			__be16 src;
-			__be16 dst;
-		};
-	};
-};
-
-struct flow_dissector_key_icmp {
-	struct {
-		u8 type;
-		u8 code;
-	};
-	u16 id;
-};
-
-struct flow_dissector_key_eth_addrs {
-	unsigned char dst[6];
-	unsigned char src[6];
-};
-
-struct flow_dissector_key_tcp {
-	__be16 flags;
-};
-
-struct flow_dissector_key_ip {
-	__u8 tos;
-	__u8 ttl;
-};
-
-struct flow_dissector_key_meta {
-	int ingress_ifindex;
-	u16 ingress_iftype;
-};
-
-struct flow_dissector_key_ct {
-	u16 ct_state;
-	u16 ct_zone;
-	u32 ct_mark;
-	u32 ct_labels[4];
-};
-
-struct flow_dissector_key_hash {
-	u32 hash;
-};
-
-struct flow_dissector_key {
-	enum flow_dissector_key_id key_id;
-	size_t offset;
-};
-
-struct flow_keys_basic {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-};
-
-struct flow_keys {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-	struct flow_dissector_key_tags tags;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_vlan cvlan;
-	struct flow_dissector_key_keyid keyid;
-	struct flow_dissector_key_ports ports;
-	struct flow_dissector_key_icmp icmp;
-	struct flow_dissector_key_addrs addrs;
-	int: 32;
-};
-
-struct flow_keys_digest {
-	u8 data[16];
-};
-
-enum ip_conntrack_info {
-	IP_CT_ESTABLISHED = 0,
-	IP_CT_RELATED = 1,
-	IP_CT_NEW = 2,
-	IP_CT_IS_REPLY = 3,
-	IP_CT_ESTABLISHED_REPLY = 3,
-	IP_CT_RELATED_REPLY = 4,
-	IP_CT_NUMBER = 5,
-	IP_CT_UNTRACKED = 7,
-};
-
-struct xt_table_info;
-
-struct xt_table {
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool in_tcp_sendpages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	long unsigned int flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
 	struct list_head list;
-	unsigned int valid_hooks;
-	struct xt_table_info *private;
-	struct module *me;
-	u_int8_t af;
-	int priority;
-	int (*table_init)(struct net *);
-	const char name[32];
+	refcount_t refcount;
+	struct callback_head rcu;
 };
 
-union nf_inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
+struct sch_frag_data {
+	long unsigned int dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
 };
 
-struct ip_ct_tcp_state {
-	u_int32_t td_end;
-	u_int32_t td_maxend;
-	u_int32_t td_maxwin;
-	u_int32_t td_maxack;
-	u_int8_t td_scale;
-	u_int8_t flags;
-};
-
-struct ip_ct_tcp {
-	struct ip_ct_tcp_state seen[2];
-	u_int8_t state;
-	u_int8_t last_dir;
-	u_int8_t retrans;
-	u_int8_t last_index;
-	u_int32_t last_seq;
-	u_int32_t last_ack;
-	u_int32_t last_end;
-	u_int16_t last_win;
-	u_int8_t last_wscale;
-	u_int8_t last_flags;
-};
-
-union nf_conntrack_man_proto {
-	__be16 all;
-	struct {
-		__be16 port;
-	} tcp;
-	struct {
-		__be16 port;
-	} udp;
-	struct {
-		__be16 id;
-	} icmp;
-	struct {
-		__be16 port;
-	} dccp;
-	struct {
-		__be16 port;
-	} sctp;
-	struct {
-		__be16 key;
-	} gre;
-};
-
-struct nf_ct_dccp {
-	u_int8_t role[2];
-	u_int8_t state;
-	u_int8_t last_pkt;
-	u_int8_t last_dir;
-	u_int64_t handshake_seq;
-};
-
-struct ip_ct_sctp {
-	enum sctp_conntrack state;
-	__be32 vtag[2];
-	u8 last_dir;
-	u8 flags;
-};
-
-struct nf_ct_event;
-
-struct nf_ct_event_notifier {
-	int (*fcn)(unsigned int, struct nf_ct_event *);
-};
-
-struct nf_exp_event;
-
-struct nf_exp_event_notifier {
-	int (*fcn)(unsigned int, struct nf_exp_event *);
-};
-
-enum bpf_ret_code {
-	BPF_OK = 0,
-	BPF_DROP = 2,
-	BPF_REDIRECT = 7,
-	BPF_LWT_REROUTE = 128,
+struct tcf_ematch_tree_hdr {
+	__u16 nmatches;
+	__u16 progid;
 };
 
 enum {
-	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+	TCA_EMATCH_TREE_UNSPEC = 0,
+	TCA_EMATCH_TREE_HDR = 1,
+	TCA_EMATCH_TREE_LIST = 2,
+	__TCA_EMATCH_TREE_MAX = 3,
 };
 
-struct ip_tunnel_parm {
-	char name[16];
-	int link;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	struct iphdr iph;
-};
-
-struct ip_tunnel_key {
-	__be64 tun_id;
-	union {
-		struct {
-			__be32 src;
-			__be32 dst;
-		} ipv4;
-		struct {
-			struct in6_addr src;
-			struct in6_addr dst;
-		} ipv6;
-	} u;
-	__be16 tun_flags;
-	u8 tos;
-	u8 ttl;
-	__be32 label;
-	__be16 tp_src;
-	__be16 tp_dst;
-};
-
-struct dst_cache_pcpu;
-
-struct dst_cache {
-	struct dst_cache_pcpu *cache;
-	long unsigned int reset_ts;
-};
-
-struct ip_tunnel_info {
-	struct ip_tunnel_key key;
-	struct dst_cache dst_cache;
-	u8 options_len;
-	u8 mode;
-};
-
-struct lwtunnel_state {
-	__u16 type;
+struct tcf_ematch_hdr {
+	__u16 matchid;
+	__u16 kind;
 	__u16 flags;
-	__u16 headroom;
-	atomic_t refcnt;
-	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
-	int (*orig_input)(struct sk_buff *);
-	struct callback_head rcu;
+	__u16 pad;
+};
+
+struct tcf_pkt_info {
+	unsigned char *ptr;
+	int nexthdr;
+};
+
+struct tcf_ematch_ops;
+
+struct tcf_ematch {
+	struct tcf_ematch_ops *ops;
+	long unsigned int data;
+	unsigned int datalen;
+	u16 matchid;
+	u16 flags;
+	struct net *net;
+};
+
+struct tcf_ematch_ops {
+	int kind;
+	int datalen;
+	int (*change)(struct net *, void *, int, struct tcf_ematch *);
+	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
+	void (*destroy)(struct tcf_ematch *);
+	int (*dump)(struct sk_buff *, struct tcf_ematch *);
+	struct module *owner;
+	struct list_head link;
+};
+
+struct tcf_ematch_tree {
+	struct tcf_ematch_tree_hdr hdr;
+	struct tcf_ematch *matches;
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
+};
+
+struct ethtool_value {
+	__u32 cmd;
+	__u32 data;
+};
+
+enum tunable_type_id {
+	ETHTOOL_TUNABLE_UNSPEC = 0,
+	ETHTOOL_TUNABLE_U8 = 1,
+	ETHTOOL_TUNABLE_U16 = 2,
+	ETHTOOL_TUNABLE_U32 = 3,
+	ETHTOOL_TUNABLE_U64 = 4,
+	ETHTOOL_TUNABLE_STRING = 5,
+	ETHTOOL_TUNABLE_S8 = 6,
+	ETHTOOL_TUNABLE_S16 = 7,
+	ETHTOOL_TUNABLE_S32 = 8,
+	ETHTOOL_TUNABLE_S64 = 9,
+};
+
+struct ethtool_gstrings {
+	__u32 cmd;
+	__u32 string_set;
+	__u32 len;
 	__u8 data[0];
 };
 
-union tcp_word_hdr {
-	struct tcphdr hdr;
-	__be32 words[5];
+struct ethtool_sset_info {
+	__u32 cmd;
+	__u32 reserved;
+	__u64 sset_mask;
+	__u32 data[0];
 };
 
-struct arphdr {
-	__be16 ar_hrd;
-	__be16 ar_pro;
-	unsigned char ar_hln;
-	unsigned char ar_pln;
-	__be16 ar_op;
+struct ethtool_perm_addr {
+	__u32 cmd;
+	__u32 size;
+	__u8 data[0];
 };
 
-struct fib_info;
-
-struct fib_nh {
-	struct fib_nh_common nh_common;
-	struct hlist_node nh_hash;
-	struct fib_info *nh_parent;
-	__u32 nh_tclassid;
-	__be32 nh_saddr;
-	int nh_saddr_genid;
+enum ethtool_flags {
+	ETH_FLAG_TXVLAN = 128,
+	ETH_FLAG_RXVLAN = 256,
+	ETH_FLAG_LRO = 32768,
+	ETH_FLAG_NTUPLE = 134217728,
+	ETH_FLAG_RXHASH = 268435456,
 };
 
-struct fib_info {
-	struct hlist_node fib_hash;
-	struct hlist_node fib_lhash;
-	struct list_head nh_list;
-	struct net *fib_net;
-	int fib_treeref;
-	refcount_t fib_clntref;
-	unsigned int fib_flags;
-	unsigned char fib_dead;
-	unsigned char fib_protocol;
-	unsigned char fib_scope;
-	unsigned char fib_type;
-	__be32 fib_prefsrc;
-	u32 fib_tb_id;
-	u32 fib_priority;
-	struct dst_metrics *fib_metrics;
-	int fib_nhs;
-	bool fib_nh_is_v6;
-	bool nh_updated;
-	struct nexthop *nh;
-	struct callback_head rcu;
-	struct fib_nh fib_nh[0];
+struct ethtool_rxfh {
+	__u32 cmd;
+	__u32 rss_context;
+	__u32 indir_size;
+	__u32 key_size;
+	__u8 hfunc;
+	__u8 rsvd8[3];
+	__u32 rsvd32;
+	__u32 rss_config[0];
 };
 
-struct nh_info;
-
-struct nh_group;
-
-struct nexthop {
-	struct rb_node rb_node;
-	struct list_head fi_list;
-	struct list_head f6i_list;
-	struct list_head fdb_list;
-	struct list_head grp_list;
-	struct net *net;
-	u32 id;
-	u8 protocol;
-	u8 nh_flags;
-	bool is_group;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	union {
-		struct nh_info *nh_info;
-		struct nh_group *nh_grp;
-	};
+struct ethtool_get_features_block {
+	__u32 available;
+	__u32 requested;
+	__u32 active;
+	__u32 never_changed;
 };
 
-struct nh_info {
-	struct hlist_node dev_hash;
-	struct nexthop *nh_parent;
-	u8 family;
-	bool reject_nh;
-	bool fdb_nh;
-	union {
-		struct fib_nh_common fib_nhc;
-		struct fib_nh fib_nh;
-		struct fib6_nh fib6_nh;
-	};
+struct ethtool_gfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_get_features_block features[0];
 };
 
-struct nh_grp_entry {
-	struct nexthop *nh;
-	u8 weight;
-	atomic_t upper_bound;
-	struct list_head nh_list;
-	struct nexthop *nh_parent;
+struct ethtool_set_features_block {
+	__u32 valid;
+	__u32 requested;
 };
 
-struct nh_group {
-	struct nh_group *spare;
-	u16 num_nh;
-	bool mpath;
-	bool fdb_nh;
-	bool has_v4;
-	struct nh_grp_entry nh_entries[0];
+struct ethtool_sfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_set_features_block features[0];
 };
 
-enum metadata_type {
-	METADATA_IP_TUNNEL = 0,
-	METADATA_HW_PORT_MUX = 1,
+enum ethtool_sfeatures_retval_bits {
+	ETHTOOL_F_UNSUPPORTED__BIT = 0,
+	ETHTOOL_F_WISH__BIT = 1,
+	ETHTOOL_F_COMPAT__BIT = 2,
 };
 
-struct hw_port_info {
-	struct net_device *lower_dev;
-	u32 port_id;
-};
-
-struct metadata_dst {
-	struct dst_entry dst;
-	enum metadata_type type;
-	union {
-		struct ip_tunnel_info tun_info;
-		struct hw_port_info port_info;
-	} u;
-};
-
-struct gre_base_hdr {
-	__be16 flags;
-	__be16 protocol;
-};
-
-struct gre_full_hdr {
-	struct gre_base_hdr fixed_header;
-	__be16 csum;
-	__be16 reserved1;
-	__be32 key;
-	__be32 seq;
-};
-
-struct pptp_gre_header {
-	struct gre_base_hdr gre_hd;
-	__be16 payload_len;
-	__be16 call_id;
-	__be32 seq;
-	__be32 ack;
-};
-
-struct tipc_basic_hdr {
-	__be32 w[4];
-};
-
-struct icmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 checksum;
-	union {
-		struct {
-			__be16 id;
-			__be16 sequence;
-		} echo;
-		__be32 gateway;
-		struct {
-			__be16 __unused;
-			__be16 mtu;
-		} frag;
-		__u8 reserved[4];
-	} un;
-};
-
-enum l2tp_debug_flags {
-	L2TP_MSG_DEBUG = 1,
-	L2TP_MSG_CONTROL = 2,
-	L2TP_MSG_SEQ = 4,
-	L2TP_MSG_DATA = 8,
-};
-
-struct pppoe_tag {
-	__be16 tag_type;
-	__be16 tag_len;
-	char tag_data[0];
-};
-
-struct pppoe_hdr {
-	__u8 type: 4;
-	__u8 ver: 4;
-	__u8 code;
-	__be16 sid;
-	__be16 length;
-	struct pppoe_tag tag[0];
-};
-
-struct mpls_label {
-	__be32 entry;
-};
-
-enum batadv_packettype {
-	BATADV_IV_OGM = 0,
-	BATADV_BCAST = 1,
-	BATADV_CODED = 2,
-	BATADV_ELP = 3,
-	BATADV_OGM2 = 4,
-	BATADV_UNICAST = 64,
-	BATADV_UNICAST_FRAG = 65,
-	BATADV_UNICAST_4ADDR = 66,
-	BATADV_ICMP = 67,
-	BATADV_UNICAST_TVLV = 68,
-};
-
-struct batadv_unicast_packet {
-	__u8 packet_type;
-	__u8 version;
-	__u8 ttl;
-	__u8 ttvn;
-	__u8 dest[6];
-};
-
-struct nf_conntrack_zone {
-	u16 id;
-	u8 flags;
-	u8 dir;
-};
-
-struct nf_conntrack_man {
-	union nf_inet_addr u3;
-	union nf_conntrack_man_proto u;
-	u_int16_t l3num;
-};
-
-struct nf_conntrack_tuple {
-	struct nf_conntrack_man src;
-	struct {
-		union nf_inet_addr u3;
-		union {
-			__be16 all;
-			struct {
-				__be16 port;
-			} tcp;
-			struct {
-				__be16 port;
-			} udp;
-			struct {
-				u_int8_t type;
-				u_int8_t code;
-			} icmp;
-			struct {
-				__be16 port;
-			} dccp;
-			struct {
-				__be16 port;
-			} sctp;
-			struct {
-				__be16 key;
-			} gre;
-		} u;
-		u_int8_t protonum;
-		u_int8_t dir;
-	} dst;
-};
-
-struct nf_conntrack_tuple_hash {
-	struct hlist_nulls_node hnnode;
-	struct nf_conntrack_tuple tuple;
-};
-
-struct nf_ct_udp {
-	long unsigned int stream_ts;
-};
-
-struct nf_ct_gre {
-	unsigned int stream_timeout;
-	unsigned int timeout;
-};
-
-union nf_conntrack_proto {
-	struct nf_ct_dccp dccp;
-	struct ip_ct_sctp sctp;
-	struct ip_ct_tcp tcp;
-	struct nf_ct_udp udp;
-	struct nf_ct_gre gre;
-	unsigned int tmpl_padto;
-};
-
-struct nf_ct_ext;
-
-struct nf_conn {
-	struct nf_conntrack ct_general;
-	spinlock_t lock;
-	u32 timeout;
-	struct nf_conntrack_zone zone;
-	struct nf_conntrack_tuple_hash tuplehash[2];
-	long unsigned int status;
-	u16 cpu;
-	possible_net_t ct_net;
-	struct hlist_node nat_bysource;
-	struct {	} __nfct_init_offset;
-	struct nf_conn *master;
-	u_int32_t mark;
-	u_int32_t secmark;
-	struct nf_ct_ext *ext;
-	union nf_conntrack_proto proto;
-};
-
-struct xt_table_info {
-	unsigned int size;
-	unsigned int number;
-	unsigned int initial_entries;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int stacksize;
-	void ***jumpstack;
-	unsigned char entries[0];
-};
-
-struct nf_conntrack_tuple_mask {
-	struct {
-		union nf_inet_addr u3;
-		union nf_conntrack_man_proto u;
-	} src;
-};
-
-struct nf_ct_ext {
-	u8 offset[9];
-	u8 len;
+struct ethtool_per_queue_op {
+	__u32 cmd;
+	__u32 sub_command;
+	__u32 queue_mask[128];
 	char data[0];
 };
 
-struct nf_conntrack_helper;
+struct ethtool_rx_flow_rule {
+	struct flow_rule *rule;
+	long unsigned int priv[0];
+};
 
-struct nf_conntrack_expect {
-	struct hlist_node lnode;
-	struct hlist_node hnode;
-	struct nf_conntrack_tuple tuple;
-	struct nf_conntrack_tuple_mask mask;
-	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
-	struct nf_conntrack_helper *helper;
-	struct nf_conn *master;
-	struct timer_list timeout;
-	refcount_t use;
-	unsigned int flags;
-	unsigned int class;
-	union nf_inet_addr saved_addr;
-	union nf_conntrack_man_proto saved_proto;
-	enum ip_conntrack_dir dir;
+struct ethtool_rx_flow_spec_input {
+	const struct ethtool_rx_flow_spec *fs;
+	u32 rss_ctx;
+};
+
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
+struct ethtool_link_usettings {
+	struct ethtool_link_settings base;
+	struct {
+		__u32 supported[3];
+		__u32 advertising[3];
+		__u32 lp_advertising[3];
+	} link_modes;
+};
+
+struct ethtool_rx_flow_key {
+	struct flow_dissector_key_basic basic;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+};
+
+struct ethtool_rx_flow_match {
+	struct flow_dissector dissector;
+	struct ethtool_rx_flow_key key;
+	struct ethtool_rx_flow_key mask;
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE = 2,
+	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
+	ETHTOOL_A_CABLE_RESULT_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
+	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_NEST_RESULT = 1,
+	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
+	__ETHTOOL_A_CABLE_NEST_CNT = 3,
+	ETHTOOL_A_CABLE_NEST_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
+	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
+	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
+	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
+	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
+	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
+	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
+	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_PULSE_mV = 1,
+	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
+	ETHTOOL_A_CABLE_PULSE_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
+	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
+	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
+	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
+	__ETHTOOL_A_CABLE_STEP_CNT = 4,
+	ETHTOOL_A_CABLE_STEP_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
+	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
+	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
+	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
+	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+};
+
+struct nf_loginfo {
+	u_int8_t type;
+	union {
+		struct {
+			u_int32_t copy_len;
+			u_int16_t group;
+			u_int16_t qthreshold;
+			u_int16_t flags;
+		} ulog;
+		struct {
+			u_int8_t level;
+			u_int8_t logflags;
+		} log;
+	} u;
+};
+
+struct nf_log_buf {
+	unsigned int count;
+	char buf[1020];
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+typedef struct {
+	char ax25_call[7];
+} ax25_address;
+
+enum {
+	AX25_VALUES_IPDEFMODE = 0,
+	AX25_VALUES_AXDEFMODE = 1,
+	AX25_VALUES_BACKOFF = 2,
+	AX25_VALUES_CONMODE = 3,
+	AX25_VALUES_WINDOW = 4,
+	AX25_VALUES_EWINDOW = 5,
+	AX25_VALUES_T1 = 6,
+	AX25_VALUES_T2 = 7,
+	AX25_VALUES_T3 = 8,
+	AX25_VALUES_IDLE = 9,
+	AX25_VALUES_N2 = 10,
+	AX25_VALUES_PACLEN = 11,
+	AX25_VALUES_PROTOCOL = 12,
+	AX25_VALUES_DS_TIMEOUT = 13,
+	AX25_MAX_VALUES = 14,
+};
+
+struct ping_table {
+	struct hlist_nulls_head hash[64];
+	spinlock_t lock;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+struct tcp_diag_md5sig {
+	__u8 tcpm_family;
+	__u8 tcpm_prefixlen;
+	__u16 tcpm_keylen;
+	__be32 tcpm_addr[4];
+	__u8 tcpm_key[80];
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct ifaddrlblmsg {
+	__u8 ifal_family;
+	__u8 __ifal_reserved;
+	__u8 ifal_prefixlen;
+	__u8 ifal_flags;
+	__u32 ifal_index;
+	__u32 ifal_seq;
+};
+
+enum {
+	IFAL_ADDRESS = 1,
+	IFAL_LABEL = 2,
+	__IFAL_MAX = 3,
+};
+
+struct ip6addrlbl_entry {
+	struct in6_addr prefix;
+	int prefixlen;
+	int ifindex;
+	int addrtype;
+	u32 label;
+	struct hlist_node list;
 	struct callback_head rcu;
 };
 
-enum nf_ct_ext_id {
-	NF_CT_EXT_HELPER = 0,
-	NF_CT_EXT_NAT = 1,
-	NF_CT_EXT_SEQADJ = 2,
-	NF_CT_EXT_ACCT = 3,
-	NF_CT_EXT_ECACHE = 4,
-	NF_CT_EXT_TSTAMP = 5,
-	NF_CT_EXT_TIMEOUT = 6,
-	NF_CT_EXT_LABELS = 7,
-	NF_CT_EXT_SYNPROXY = 8,
-	NF_CT_EXT_NUM = 9,
+struct ip6addrlbl_init_table {
+	const struct in6_addr *prefix;
+	int prefixlen;
+	u32 label;
 };
 
-struct nf_ct_event {
-	struct nf_conn *ct;
-	u32 portid;
-	int report;
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
 };
 
-struct nf_exp_event {
-	struct nf_conntrack_expect *exp;
-	u32 portid;
-	int report;
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
 };
 
-struct nf_conn_labels {
-	long unsigned int bits[2];
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+	u8 vlan_filtered: 1;
+	u8 br_netfilter_broute: 1;
+	u8 tx_fwd_offload: 1;
+	int src_hwdom;
+	long unsigned int fwd_hwdoms;
 };
 
-struct _flow_keys_digest_data {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-	__be32 ports;
-	__be32 src;
-	__be32 dst;
+struct nf_bridge_frag_data;
+
+enum {
+	__IOAM6_IPTUNNEL_MODE_MIN = 0,
+	IOAM6_IPTUNNEL_MODE_INLINE = 1,
+	IOAM6_IPTUNNEL_MODE_ENCAP = 2,
+	IOAM6_IPTUNNEL_MODE_AUTO = 3,
+	__IOAM6_IPTUNNEL_MODE_MAX = 4,
 };
 
-struct rps_sock_flow_table {
-	u32 mask;
+enum {
+	IOAM6_IPTUNNEL_UNSPEC = 0,
+	IOAM6_IPTUNNEL_MODE = 1,
+	IOAM6_IPTUNNEL_DST = 2,
+	IOAM6_IPTUNNEL_TRACE = 3,
+	IOAM6_IPTUNNEL_FREQ_K = 4,
+	IOAM6_IPTUNNEL_FREQ_N = 5,
+	__IOAM6_IPTUNNEL_MAX = 6,
+};
+
+struct ioam6_lwt_encap {
+	struct ipv6_opt_hdr eh;
+	u8 pad[2];
+	struct ioam6_hdr ioamh;
+	struct ioam6_trace_hdr traceh;
+};
+
+struct ioam6_lwt_freq {
+	u32 k;
+	u32 n;
+};
+
+struct ioam6_lwt {
+	struct dst_cache cache;
+	struct ioam6_lwt_freq freq;
+	atomic_t pkt_cnt;
+	u8 mode;
+	struct in6_addr tundst;
+	struct ioam6_lwt_encap tuninfo;
+};
+
+struct sockaddr_pkt {
+	short unsigned int spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+	short unsigned int sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	short unsigned int sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct tpacket_hdr {
+	long unsigned int tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	short unsigned int tp_mac;
+	short unsigned int tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	short unsigned int mr_type;
+	short unsigned int mr_alen;
+	unsigned char mr_address[32];
+};
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
+};
+
+enum ncsi_nl_commands {
+	NCSI_CMD_UNSPEC = 0,
+	NCSI_CMD_PKG_INFO = 1,
+	NCSI_CMD_SET_INTERFACE = 2,
+	NCSI_CMD_CLEAR_INTERFACE = 3,
+	NCSI_CMD_SEND_CMD = 4,
+	NCSI_CMD_SET_PACKAGE_MASK = 5,
+	NCSI_CMD_SET_CHANNEL_MASK = 6,
+	__NCSI_CMD_AFTER_LAST = 7,
+	NCSI_CMD_MAX = 6,
+};
+
+enum ncsi_nl_attrs {
+	NCSI_ATTR_UNSPEC = 0,
+	NCSI_ATTR_IFINDEX = 1,
+	NCSI_ATTR_PACKAGE_LIST = 2,
+	NCSI_ATTR_PACKAGE_ID = 3,
+	NCSI_ATTR_CHANNEL_ID = 4,
+	NCSI_ATTR_DATA = 5,
+	NCSI_ATTR_MULTI_FLAG = 6,
+	NCSI_ATTR_PACKAGE_MASK = 7,
+	NCSI_ATTR_CHANNEL_MASK = 8,
+	__NCSI_ATTR_AFTER_LAST = 9,
+	NCSI_ATTR_MAX = 8,
+};
+
+enum ncsi_nl_pkg_attrs {
+	NCSI_PKG_ATTR_UNSPEC = 0,
+	NCSI_PKG_ATTR = 1,
+	NCSI_PKG_ATTR_ID = 2,
+	NCSI_PKG_ATTR_FORCED = 3,
+	NCSI_PKG_ATTR_CHANNEL_LIST = 4,
+	__NCSI_PKG_ATTR_AFTER_LAST = 5,
+	NCSI_PKG_ATTR_MAX = 4,
+};
+
+enum ncsi_nl_channel_attrs {
+	NCSI_CHANNEL_ATTR_UNSPEC = 0,
+	NCSI_CHANNEL_ATTR = 1,
+	NCSI_CHANNEL_ATTR_ID = 2,
+	NCSI_CHANNEL_ATTR_VERSION_MAJOR = 3,
+	NCSI_CHANNEL_ATTR_VERSION_MINOR = 4,
+	NCSI_CHANNEL_ATTR_VERSION_STR = 5,
+	NCSI_CHANNEL_ATTR_LINK_STATE = 6,
+	NCSI_CHANNEL_ATTR_ACTIVE = 7,
+	NCSI_CHANNEL_ATTR_FORCED = 8,
+	NCSI_CHANNEL_ATTR_VLAN_LIST = 9,
+	NCSI_CHANNEL_ATTR_VLAN_ID = 10,
+	__NCSI_CHANNEL_ATTR_AFTER_LAST = 11,
+	NCSI_CHANNEL_ATTR_MAX = 10,
+};
+
+struct csum_pseudo_header {
+	__be64 data_seq;
+	__be32 subflow_seq;
+	__be16 data_len;
+	__sum16 csum;
+};
+
+typedef void (*alternative_cb_t)(struct alt_instr *, __le32 *, __le32 *, int);
+
+struct alt_region {
+	struct alt_instr *begin;
+	struct alt_instr *end;
+};
+
+struct cpc_reg {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+enum aarch64_insn_adr_type {
+	AARCH64_INSN_ADR_TYPE_ADRP = 0,
+	AARCH64_INSN_ADR_TYPE_ADR = 1,
+};
+
+enum kgdb_bpstate {
+	BP_UNDEFINED = 0,
+	BP_REMOVED = 1,
+	BP_SET = 2,
+	BP_ACTIVE = 3,
+};
+
+struct kgdb_bkpt {
+	long unsigned int bpt_addr;
+	unsigned char saved_instr[4];
+	enum kgdb_bptype type;
+	enum kgdb_bpstate state;
+};
+
+struct kvm_reg_list {
+	__u64 n;
+	__u64 reg[0];
+};
+
+struct trace_event_raw_kvm_entry {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_exit {
+	struct trace_entry ent;
+	int ret;
+	unsigned int esr_ec;
+	long unsigned int vcpu_pc;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_guest_fault {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	long unsigned int hsr;
+	long unsigned int hxfar;
+	long long unsigned int ipa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_access_fault {
+	struct trace_entry ent;
+	long unsigned int ipa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_irq_line {
+	struct trace_entry ent;
+	unsigned int type;
+	int vcpu_idx;
+	int irq_num;
+	int level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmio_emulate {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	long unsigned int instr;
+	long unsigned int cpsr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_way_flush {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	bool cache;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_toggle_cache {
+	struct trace_entry ent;
+	long unsigned int vcpu_pc;
+	bool was;
+	bool now;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_update_irq {
+	struct trace_entry ent;
+	long unsigned int vcpu_id;
+	__u32 irq;
+	int level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_get_timer_map {
+	struct trace_entry ent;
+	long unsigned int vcpu_id;
+	int direct_vtimer;
+	int direct_ptimer;
+	int emul_ptimer;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_save_state {
+	struct trace_entry ent;
+	long unsigned int ctl;
+	long long unsigned int cval;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_restore_state {
+	struct trace_entry ent;
+	long unsigned int ctl;
+	long long unsigned int cval;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_hrtimer_expire {
+	struct trace_entry ent;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_emulate {
+	struct trace_entry ent;
+	int timer_idx;
+	bool should_fire;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kvm_entry {};
+
+struct trace_event_data_offsets_kvm_exit {};
+
+struct trace_event_data_offsets_kvm_guest_fault {};
+
+struct trace_event_data_offsets_kvm_access_fault {};
+
+struct trace_event_data_offsets_kvm_irq_line {};
+
+struct trace_event_data_offsets_kvm_mmio_emulate {};
+
+struct trace_event_data_offsets_kvm_set_way_flush {};
+
+struct trace_event_data_offsets_kvm_toggle_cache {};
+
+struct trace_event_data_offsets_kvm_timer_update_irq {};
+
+struct trace_event_data_offsets_kvm_get_timer_map {};
+
+struct trace_event_data_offsets_kvm_timer_save_state {};
+
+struct trace_event_data_offsets_kvm_timer_restore_state {};
+
+struct trace_event_data_offsets_kvm_timer_hrtimer_expire {};
+
+struct trace_event_data_offsets_kvm_timer_emulate {};
+
+typedef void (*btf_trace_kvm_entry)(void *, long unsigned int);
+
+typedef void (*btf_trace_kvm_exit)(void *, int, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_kvm_guest_fault)(void *, long unsigned int, long unsigned int, long unsigned int, long long unsigned int);
+
+typedef void (*btf_trace_kvm_access_fault)(void *, long unsigned int);
+
+typedef void (*btf_trace_kvm_irq_line)(void *, unsigned int, int, int, int);
+
+typedef void (*btf_trace_kvm_mmio_emulate)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_kvm_set_way_flush)(void *, long unsigned int, bool);
+
+typedef void (*btf_trace_kvm_toggle_cache)(void *, long unsigned int, bool, bool);
+
+typedef void (*btf_trace_kvm_timer_update_irq)(void *, long unsigned int, __u32, int);
+
+typedef void (*btf_trace_kvm_get_timer_map)(void *, long unsigned int, struct timer_map *);
+
+typedef void (*btf_trace_kvm_timer_save_state)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_restore_state)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_hrtimer_expire)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_emulate)(void *, struct arch_timer_context *, bool);
+
+struct tlb_inv_context___2 {
+	u64 tcr;
+};
+
+struct aes_block {
+	u8 b[16];
+};
+
+struct waitid_info {
+	pid_t pid;
+	uid_t uid;
+	int status;
+	int cause;
+};
+
+struct wait_opts {
+	enum pid_type wo_type;
+	int wo_flags;
+	struct pid *wo_pid;
+	struct waitid_info *wo_info;
+	int wo_stat;
+	struct rusage *wo_rusage;
+	wait_queue_entry_t child_wait;
+	int notask_error;
+};
+
+struct mcs_spinlock {
+	struct mcs_spinlock *next;
+	int locked;
+	int count;
+};
+
+struct qnode {
+	struct mcs_spinlock mcs;
+};
+
+struct linked_page {
+	struct linked_page *next;
+	char data[4088];
+};
+
+struct chain_allocator {
+	struct linked_page *chain;
+	unsigned int used_space;
+	gfp_t gfp_mask;
+	int safe_needed;
+};
+
+struct rtree_node {
+	struct list_head list;
+	long unsigned int *data;
+};
+
+struct mem_zone_bm_rtree {
+	struct list_head list;
+	struct list_head nodes;
+	struct list_head leaves;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	struct rtree_node *rtree;
+	int levels;
+	unsigned int blocks;
+};
+
+struct bm_position {
+	struct mem_zone_bm_rtree *zone;
+	struct rtree_node *node;
+	long unsigned int node_pfn;
+	int node_bit;
+};
+
+struct memory_bitmap {
+	struct list_head zones;
+	struct linked_page *p_list;
+	struct bm_position cur;
+};
+
+struct mem_extent {
+	struct list_head hook;
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct nosave_region {
+	struct list_head list;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+struct dma_coherent_mem {
+	void *virt_base;
+	dma_addr_t device_base;
+	long unsigned int pfn_base;
+	int size;
+	long unsigned int *bitmap;
+	spinlock_t spinlock;
+	bool use_dev_dma_pfn_offset;
+};
+
+struct mod_unload_taint {
+	struct list_head list;
+	char name[56];
+	long unsigned int taints;
+	u64 count;
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+struct old_timex32 {
+	u32 modes;
+	s32 offset;
+	s32 freq;
+	s32 maxerror;
+	s32 esterror;
+	s32 status;
+	s32 constant;
+	s32 precision;
+	s32 tolerance;
+	struct old_timeval32 time;
+	s32 tick;
+	s32 ppsfreq;
+	s32 jitter;
+	s32 shift;
+	s32 stabil;
+	s32 jitcnt;
+	s32 calcnt;
+	s32 errcnt;
+	s32 stbcnt;
+	s32 tai;
 	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	long: 64;
-	u32 ents[0];
 };
 
-enum {
-	IF_OPER_UNKNOWN = 0,
-	IF_OPER_NOTPRESENT = 1,
-	IF_OPER_DOWN = 2,
-	IF_OPER_LOWERLAYERDOWN = 3,
-	IF_OPER_TESTING = 4,
-	IF_OPER_DORMANT = 5,
-	IF_OPER_UP = 6,
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
 };
 
-struct ipv4_devconf {
-	void *sysctl;
-	int data[32];
-	long unsigned int state[1];
+struct clock_data {
+	seqcount_latch_t seq;
+	struct clock_read_data read_data[2];
+	ktime_t wrap_kt;
+	long unsigned int rate;
+	u64 (*actual_read_sched_clock)();
 };
 
-enum nf_dev_hooks {
-	NF_NETDEV_INGRESS = 0,
-	NF_NETDEV_NUMHOOKS = 1,
+struct compat_kexec_segment {
+	compat_uptr_t buf;
+	compat_size_t bufsz;
+	compat_ulong_t mem;
+	compat_size_t memsz;
 };
 
-struct ifbond {
-	__s32 bond_mode;
-	__s32 num_slaves;
-	__s32 miimon;
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
 };
 
-typedef struct ifbond ifbond;
-
-struct ifslave {
-	__s32 slave_id;
-	char slave_name[16];
-	__s8 link;
-	__s8 state;
-	__u32 link_failure_count;
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
 };
 
-typedef struct ifslave ifslave;
-
-struct netdev_boot_setup {
-	char name[16];
-	struct ifmap map;
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods___2 = 8,
+	Opt_nofavordynmods = 9,
 };
 
-enum {
-	NAPIF_STATE_SCHED = 1,
-	NAPIF_STATE_MISSED = 2,
-	NAPIF_STATE_DISABLE = 4,
-	NAPIF_STATE_NPSVC = 8,
-	NAPIF_STATE_LISTED = 16,
-	NAPIF_STATE_NO_BUSY_POLL = 32,
-	NAPIF_STATE_IN_BUSY_POLL = 64,
+struct audit_rule_data {
+	__u32 flags;
+	__u32 action;
+	__u32 field_count;
+	__u32 mask[64];
+	__u32 fields[64];
+	__u32 values[64];
+	__u32 fieldflags[64];
+	__u32 buflen;
+	char buf[0];
 };
 
-enum gro_result {
-	GRO_MERGED = 0,
-	GRO_MERGED_FREE = 1,
-	GRO_HELD = 2,
-	GRO_NORMAL = 3,
-	GRO_DROP = 4,
-	GRO_CONSUMED = 5,
+struct seccomp_notif_sizes {
+	__u16 seccomp_notif;
+	__u16 seccomp_notif_resp;
+	__u16 seccomp_data;
 };
 
-typedef enum gro_result gro_result_t;
-
-struct bpf_xdp_link {
-	struct bpf_link link;
-	struct net_device *dev;
-	int flags;
+struct seccomp_notif {
+	__u64 id;
+	__u32 pid;
+	__u32 flags;
+	struct seccomp_data data;
 };
 
-struct netdev_net_notifier {
+struct seccomp_notif_resp {
+	__u64 id;
+	__s64 val;
+	__s32 error;
+	__u32 flags;
+};
+
+struct seccomp_notif_addfd {
+	__u64 id;
+	__u32 flags;
+	__u32 srcfd;
+	__u32 newfd;
+	__u32 newfd_flags;
+};
+
+struct action_cache {
+	long unsigned int allow_native[8];
+	long unsigned int allow_compat[8];
+};
+
+struct notification;
+
+struct seccomp_filter {
+	refcount_t refs;
+	refcount_t users;
+	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
+	struct seccomp_filter *prev;
+	struct bpf_prog *prog;
+	struct notification *notif;
+	struct mutex notify_lock;
+	wait_queue_head_t wqh;
+};
+
+struct seccomp_metadata {
+	__u64 filter_off;
+	__u64 flags;
+};
+
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
+};
+
+enum notify_state {
+	SECCOMP_NOTIFY_INIT = 0,
+	SECCOMP_NOTIFY_SENT = 1,
+	SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_knotif {
+	struct task_struct *task;
+	u64 id;
+	const struct seccomp_data *data;
+	enum notify_state state;
+	int error;
+	long int val;
+	u32 flags;
+	struct completion ready;
 	struct list_head list;
-	struct notifier_block *nb;
+	struct list_head addfd;
 };
 
-struct netpoll;
-
-struct netpoll_info {
-	refcount_t refcnt;
-	struct semaphore dev_lock;
-	struct sk_buff_head txq;
-	struct delayed_work tx_work;
-	struct netpoll *netpoll;
-	struct callback_head rcu;
-};
-
-struct udp_tunnel_info {
-	short unsigned int type;
-	sa_family_t sa_family;
-	__be16 port;
-	u8 hw_priv;
-};
-
-struct in_ifaddr;
-
-struct ip_mc_list;
-
-struct in_device {
-	struct net_device *dev;
-	refcount_t refcnt;
-	int dead;
-	struct in_ifaddr *ifa_list;
-	struct ip_mc_list *mc_list;
-	struct ip_mc_list **mc_hash;
-	int mc_count;
-	spinlock_t mc_tomb_lock;
-	struct ip_mc_list *mc_tomb;
-	long unsigned int mr_v1_seen;
-	long unsigned int mr_v2_seen;
-	long unsigned int mr_maxdelay;
-	long unsigned int mr_qi;
-	long unsigned int mr_qri;
-	unsigned char mr_qrv;
-	unsigned char mr_gq_running;
-	unsigned char mr_ifc_count;
-	struct timer_list mr_gq_timer;
-	struct timer_list mr_ifc_timer;
-	struct neigh_parms *arp_parms;
-	struct ipv4_devconf cnf;
-	struct callback_head callback_head;
-};
-
-struct offload_callbacks {
-	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
-	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sk_buff *, int);
-};
-
-struct packet_offload {
-	__be16 type;
-	u16 priority;
-	struct offload_callbacks callbacks;
-	struct list_head list;
-};
-
-struct netdev_notifier_info_ext {
-	struct netdev_notifier_info info;
+struct seccomp_kaddfd {
+	struct file *file;
+	int fd;
+	unsigned int flags;
+	__u32 ioctl_flags;
 	union {
-		u32 mtu;
-	} ext;
+		bool setfd;
+		int ret;
+	};
+	struct completion completion;
+	struct list_head list;
 };
 
-struct netdev_notifier_change_info {
-	struct netdev_notifier_info info;
-	unsigned int flags_changed;
+struct notification {
+	struct semaphore request;
+	u64 next_id;
+	struct list_head notifications;
 };
 
-struct netdev_notifier_changeupper_info {
-	struct netdev_notifier_info info;
-	struct net_device *upper_dev;
-	bool master;
-	bool linking;
-	void *upper_info;
-};
-
-struct netdev_notifier_changelowerstate_info {
-	struct netdev_notifier_info info;
-	void *lower_state_info;
-};
-
-struct netdev_notifier_pre_changeaddr_info {
-	struct netdev_notifier_info info;
-	const unsigned char *dev_addr;
-};
-
-typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
-
-enum {
-	NESTED_SYNC_IMM_BIT = 0,
-	NESTED_SYNC_TODO_BIT = 1,
-};
-
-struct netdev_nested_priv {
-	unsigned char flags;
-	void *data;
-};
-
-struct netdev_bonding_info {
-	ifslave slave;
-	ifbond master;
-};
-
-struct netdev_notifier_bonding_info {
-	struct netdev_notifier_info info;
-	struct netdev_bonding_info bonding_info;
-};
-
-union inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-struct netpoll {
-	struct net_device *dev;
-	char dev_name[16];
+struct seccomp_log_name {
+	u32 log;
 	const char *name;
-	union inet_addr local_ip;
-	union inet_addr remote_ip;
-	bool ipv6;
-	u16 local_port;
-	u16 remote_port;
-	u8 remote_mac[6];
 };
 
-enum qdisc_state_t {
-	__QDISC_STATE_SCHED = 0,
-	__QDISC_STATE_DEACTIVATED = 1,
+struct tracing_map_entry {
+	u32 key;
+	struct tracing_map_elt *val;
 };
 
-struct tcf_walker {
-	int stop;
-	int skip;
-	int count;
-	bool nonempty;
-	long unsigned int cookie;
-	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+typedef long unsigned int perf_trace_t[1024];
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int);
+
+struct uprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int vaddr[0];
+};
+
+struct trace_uprobe {
+	struct dyn_event devent;
+	struct uprobe_consumer consumer;
+	struct path path;
+	struct inode *inode;
+	char *filename;
+	long unsigned int offset;
+	long unsigned int ref_ctr_offset;
+	long unsigned int nhit;
+	struct trace_probe tp;
+};
+
+struct uprobe_dispatch_data {
+	struct trace_uprobe *tu;
+	long unsigned int bp_addr;
+};
+
+struct uprobe_cpu_buffer {
+	struct mutex mutex;
+	void *buf;
+};
+
+typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct vm_area_struct *vma;
+	u32 tid;
+	long unsigned int prev_vm_start;
+	long unsigned int prev_vm_end;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 aligned_u32_count;
+	u32 nr_hash_funcs;
+	long unsigned int bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_storage_blob {
+	struct bpf_local_storage *storage;
+};
+
+typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
 };
 
 enum {
-	IPV4_DEVCONF_FORWARDING = 1,
-	IPV4_DEVCONF_MC_FORWARDING = 2,
-	IPV4_DEVCONF_PROXY_ARP = 3,
-	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
-	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
-	IPV4_DEVCONF_SEND_REDIRECTS = 6,
-	IPV4_DEVCONF_SHARED_MEDIA = 7,
-	IPV4_DEVCONF_RP_FILTER = 8,
-	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
-	IPV4_DEVCONF_BOOTP_RELAY = 10,
-	IPV4_DEVCONF_LOG_MARTIANS = 11,
-	IPV4_DEVCONF_TAG = 12,
-	IPV4_DEVCONF_ARPFILTER = 13,
-	IPV4_DEVCONF_MEDIUM_ID = 14,
-	IPV4_DEVCONF_NOXFRM = 15,
-	IPV4_DEVCONF_NOPOLICY = 16,
-	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
-	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
-	IPV4_DEVCONF_ARP_IGNORE = 19,
-	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
-	IPV4_DEVCONF_ARP_ACCEPT = 21,
-	IPV4_DEVCONF_ARP_NOTIFY = 22,
-	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
-	IPV4_DEVCONF_SRC_VMARK = 24,
-	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
-	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
-	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
-	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
-	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
-	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
-	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
-	IPV4_DEVCONF_BC_FORWARDING = 32,
-	__IPV4_DEVCONF_MAX = 33,
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
 };
 
-struct in_ifaddr {
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 4294967264,
+	PERF_CONTEXT_KERNEL = 4294967168,
+	PERF_CONTEXT_USER = 4294966784,
+	PERF_CONTEXT_GUEST = 4294965248,
+	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
+	PERF_CONTEXT_GUEST_USER = 4294964736,
+	PERF_CONTEXT_MAX = 4294963201,
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bp_cpuinfo {
+	unsigned int cpu_pinned;
+	unsigned int *tsk_pinned;
+	unsigned int flexible;
+};
+
+struct bp_busy_slots {
+	unsigned int pinned;
+	unsigned int flexible;
+};
+
+struct trace_event_raw_context_tracking_user {
+	struct trace_entry ent;
+	int dummy;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_context_tracking_user {};
+
+typedef void (*btf_trace_user_enter)(void *, int);
+
+typedef void (*btf_trace_user_exit)(void *, int);
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	long unsigned int free;
+	long unsigned int dirty;
+	long unsigned int dirty_min;
+	long unsigned int dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+};
+
+struct vmap_pfn_data {
+	long unsigned int *pfns;
+	pgprot_t prot;
+	unsigned int idx;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+struct vmemmap_remap_walk {
+	void (*remap_pte)(pte_t *, long unsigned int, struct vmemmap_remap_walk *);
+	long unsigned int nr_walked;
+	struct page *reuse_page;
+	long unsigned int reuse_addr;
+	struct list_head *vmemmap_pages;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_EXCEED_NONE_PTE = 3,
+	SCAN_EXCEED_SWAP_PTE = 4,
+	SCAN_EXCEED_SHARED_PTE = 5,
+	SCAN_PTE_NON_PRESENT = 6,
+	SCAN_PTE_UFFD_WP = 7,
+	SCAN_PAGE_RO = 8,
+	SCAN_LACK_REFERENCED_PAGE = 9,
+	SCAN_PAGE_NULL = 10,
+	SCAN_SCAN_ABORT = 11,
+	SCAN_PAGE_COUNT = 12,
+	SCAN_PAGE_LRU = 13,
+	SCAN_PAGE_LOCK = 14,
+	SCAN_PAGE_ANON = 15,
+	SCAN_PAGE_COMPOUND = 16,
+	SCAN_ANY_PROCESS = 17,
+	SCAN_VMA_NULL = 18,
+	SCAN_VMA_CHECK = 19,
+	SCAN_ADDRESS_RANGE = 20,
+	SCAN_DEL_PAGE_LRU = 21,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 22,
+	SCAN_CGROUP_CHARGE_FAIL = 23,
+	SCAN_TRUNCATED = 24,
+	SCAN_PAGE_HAS_PRIVATE = 25,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+struct mm_slot___2 {
 	struct hlist_node hash;
-	struct in_ifaddr *ifa_next;
-	struct in_device *ifa_dev;
-	struct callback_head callback_head;
-	__be32 ifa_local;
-	__be32 ifa_address;
-	__be32 ifa_mask;
-	__u32 ifa_rt_priority;
-	__be32 ifa_broadcast;
-	unsigned char ifa_scope;
-	unsigned char ifa_prefixlen;
-	__u32 ifa_flags;
-	char ifa_label[16];
-	__u32 ifa_valid_lft;
-	__u32 ifa_preferred_lft;
-	long unsigned int ifa_cstamp;
-	long unsigned int ifa_tstamp;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+	int nr_pte_mapped_thp;
+	long unsigned int pte_mapped_thp[8];
 };
 
-struct udp_tunnel_nic_shared {
-	struct udp_tunnel_nic *udp_tunnel_nic_info;
-	struct list_head devices;
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct mm_slot___2 *mm_slot;
+	long unsigned int address;
 };
 
-struct dev_kfree_skb_cb {
-	enum skb_free_reason reason;
+enum zs_mapmode {
+	ZS_MM_RW = 0,
+	ZS_MM_RO = 1,
+	ZS_MM_WO = 2,
 };
 
-struct netdev_adjacent {
-	struct net_device *dev;
-	bool master;
-	bool ignore;
-	u16 ref_nr;
-	void *private;
+struct zs_pool_stats {
+	atomic_long_t pages_compacted;
+};
+
+enum fullness_group {
+	ZS_EMPTY = 0,
+	ZS_ALMOST_EMPTY = 1,
+	ZS_ALMOST_FULL = 2,
+	ZS_FULL = 3,
+	NR_ZS_FULLNESS = 4,
+};
+
+enum class_stat_type {
+	CLASS_EMPTY = 0,
+	CLASS_ALMOST_EMPTY = 1,
+	CLASS_ALMOST_FULL = 2,
+	CLASS_FULL = 3,
+	OBJ_ALLOCATED = 4,
+	OBJ_USED = 5,
+	NR_ZS_STAT_TYPE = 6,
+};
+
+struct zs_size_stat {
+	long unsigned int objs[6];
+};
+
+struct size_class {
+	spinlock_t lock;
+	struct list_head fullness_list[4];
+	int size;
+	int objs_per_zspage;
+	int pages_per_zspage;
+	unsigned int index;
+	struct zs_size_stat stats;
+};
+
+struct link_free {
+	union {
+		long unsigned int next;
+		long unsigned int handle;
+	};
+};
+
+struct zs_pool {
+	const char *name;
+	struct size_class *size_class[255];
+	struct kmem_cache *handle_cachep;
+	struct kmem_cache *zspage_cachep;
+	atomic_long_t pages_allocated;
+	struct zs_pool_stats stats;
+	struct shrinker shrinker;
+	struct work_struct free_work;
+	rwlock_t migrate_lock;
+};
+
+struct zspage {
+	struct {
+		unsigned int huge: 1;
+		unsigned int fullness: 2;
+		unsigned int class: 9;
+		unsigned int isolated: 3;
+		unsigned int magic: 8;
+	};
+	unsigned int inuse;
+	unsigned int freeobj;
+	struct page *first_page;
 	struct list_head list;
-	struct callback_head rcu;
+	struct zs_pool *pool;
+	rwlock_t lock;
 };
 
-struct netdev_hw_addr {
+struct mapping_area {
+	local_lock_t lock;
+	char *vm_buf;
+	char *vm_addr;
+	enum zs_mapmode vm_mm;
+};
+
+struct zs_compact_control {
+	struct page *s_page;
+	struct page *d_page;
+	int obj_idx;
+};
+
+struct user_arg_ptr {
+	bool is_compat;
+	union {
+		const char * const *native;
+		const compat_uptr_t *compat;
+	} ptr;
+};
+
+struct old_utimbuf32 {
+	old_time32_t actime;
+	old_time32_t modtime;
+};
+
+struct iomap_ops;
+
+struct dnotify_struct {
+	struct dnotify_struct *dn_next;
+	__u32 dn_mask;
+	int dn_fd;
+	struct file *dn_filp;
+	fl_owner_t dn_owner;
+};
+
+struct dnotify_mark {
+	struct fsnotify_mark fsn_mark;
+	struct dnotify_struct *dn;
+};
+
+struct signalfd_siginfo {
+	__u32 ssi_signo;
+	__s32 ssi_errno;
+	__s32 ssi_code;
+	__u32 ssi_pid;
+	__u32 ssi_uid;
+	__s32 ssi_fd;
+	__u32 ssi_tid;
+	__u32 ssi_band;
+	__u32 ssi_overrun;
+	__u32 ssi_trapno;
+	__s32 ssi_status;
+	__s32 ssi_int;
+	__u64 ssi_ptr;
+	__u64 ssi_utime;
+	__u64 ssi_stime;
+	__u64 ssi_addr;
+	__u16 ssi_addr_lsb;
+	__u16 __pad2;
+	__s32 ssi_syscall;
+	__u64 ssi_call_addr;
+	__u32 ssi_arch;
+	__u8 __pad[28];
+};
+
+struct signalfd_ctx {
+	sigset_t sigmask;
+};
+
+struct fscrypt_keyring {
+	spinlock_t lock;
+	struct hlist_head key_hashtable[128];
+};
+
+struct fscrypt_provisioning_key_payload {
+	__u32 type;
+	__u32 __reserved;
+	__u8 raw[0];
+};
+
+struct fscrypt_add_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 raw_size;
+	__u32 key_id;
+	__u32 __reserved[8];
+	__u8 raw[0];
+};
+
+struct fscrypt_remove_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 removal_status_flags;
+	__u32 __reserved[5];
+};
+
+struct fscrypt_get_key_status_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 __reserved[6];
+	__u32 status;
+	__u32 status_flags;
+	__u32 user_count;
+	__u32 __out_reserved[13];
+};
+
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
+};
+
+struct iomap_dio {
+	struct kiocb *iocb;
+	const struct iomap_dio_ops *dops;
+	loff_t i_size;
+	loff_t size;
+	atomic_t ref;
+	unsigned int flags;
+	int error;
+	size_t done_before;
+	bool wait_for_completion;
+	union {
+		struct {
+			struct iov_iter *iter;
+			struct task_struct *waiter;
+			struct bio *poll_bio;
+		} submit;
+		struct {
+			struct work_struct work;
+		} aio;
+	};
+};
+
+enum {
+	QUOTA_NL_C_UNSPEC = 0,
+	QUOTA_NL_C_WARNING = 1,
+	__QUOTA_NL_C_MAX = 2,
+};
+
+enum {
+	QUOTA_NL_A_UNSPEC = 0,
+	QUOTA_NL_A_QTYPE = 1,
+	QUOTA_NL_A_EXCESS_ID = 2,
+	QUOTA_NL_A_WARNING = 3,
+	QUOTA_NL_A_DEV_MAJOR = 4,
+	QUOTA_NL_A_DEV_MINOR = 5,
+	QUOTA_NL_A_CAUSED_ID = 6,
+	QUOTA_NL_A_PAD = 7,
+	__QUOTA_NL_A_MAX = 8,
+};
+
+struct bpf_iter_aux_info;
+
+typedef __kernel_mode_t mode_t;
+
+struct orlov_stats {
+	__u64 free_clusters;
+	__u32 free_inodes;
+	__u32 used_dirs;
+};
+
+struct ext4_dir_entry {
+	__le32 inode;
+	__le16 rec_len;
+	__le16 name_len;
+	char name[255];
+};
+
+struct ext4_dir_entry_tail {
+	__le32 det_reserved_zero1;
+	__le16 det_rec_len;
+	__u8 det_reserved_zero2;
+	__u8 det_reserved_ft;
+	__le32 det_checksum;
+};
+
+typedef enum {
+	EITHER = 0,
+	INDEX = 1,
+	DIRENT = 2,
+	DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+struct fake_dirent {
+	__le32 inode;
+	__le16 rec_len;
+	u8 name_len;
+	u8 file_type;
+};
+
+struct dx_countlimit {
+	__le16 limit;
+	__le16 count;
+};
+
+struct dx_entry {
+	__le32 hash;
+	__le32 block;
+};
+
+struct dx_root_info {
+	__le32 reserved_zero;
+	u8 hash_version;
+	u8 info_length;
+	u8 indirect_levels;
+	u8 unused_flags;
+};
+
+struct dx_root {
+	struct fake_dirent dot;
+	char dot_name[4];
+	struct fake_dirent dotdot;
+	char dotdot_name[4];
+	struct dx_root_info info;
+	struct dx_entry entries[0];
+};
+
+struct dx_node {
+	struct fake_dirent fake;
+	struct dx_entry entries[0];
+};
+
+struct dx_frame {
+	struct buffer_head *bh;
+	struct dx_entry *entries;
+	struct dx_entry *at;
+};
+
+struct dx_map_entry {
+	u32 hash;
+	u16 offs;
+	u16 size;
+};
+
+struct dx_tail {
+	u32 dt_reserved;
+	__le32 dt_checksum;
+};
+
+struct ext4_renament {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool is_dir;
+	int dir_nlink_delta;
+	struct buffer_head *bh;
+	struct ext4_dir_entry_2 *de;
+	int inlined;
+	struct buffer_head *dir_bh;
+	struct ext4_dir_entry_2 *parent_de;
+	int dir_inlined;
+};
+
+struct ext4_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__le32 h_checksum;
+	__u32 h_reserved[3];
+};
+
+struct ext4_xattr_block_find {
+	struct ext4_xattr_search s;
+	struct buffer_head *bh;
+};
+
+enum hugetlbfs_size_type {
+	NO_SIZE = 0,
+	SIZE_STD = 1,
+	SIZE_PERCENT = 2,
+};
+
+struct hugetlbfs_fs_context {
+	struct hstate *hstate;
+	long long unsigned int max_size_opt;
+	long long unsigned int min_size_opt;
+	long int max_hpages;
+	long int nr_inodes;
+	long int min_hpages;
+	enum hugetlbfs_size_type max_val_type;
+	enum hugetlbfs_size_type min_val_type;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum hugetlb_param {
+	Opt_gid___6 = 0,
+	Opt_min_size = 1,
+	Opt_mode___5 = 2,
+	Opt_nr_inodes___2 = 3,
+	Opt_pagesize = 4,
+	Opt_size___2 = 5,
+	Opt_uid___5 = 6,
+};
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct btrfs_iget_args {
+	u64 ino;
+	struct btrfs_root *root;
+};
+
+struct btrfs_dio_data {
+	ssize_t submitted;
+	struct extent_changeset *data_reserved;
+	bool data_space_reserved;
+	bool nocow_done;
+};
+
+struct btrfs_dio_private {
+	struct inode *inode;
+	u64 file_offset;
+	u32 bytes;
+	refcount_t refs;
+	u8 *csums;
+	struct bio bio;
+};
+
+struct btrfs_rename_ctx {
+	u64 index;
+};
+
+struct async_extent {
+	u64 start;
+	u64 ram_size;
+	u64 compressed_size;
+	struct page **pages;
+	long unsigned int nr_pages;
+	int compress_type;
 	struct list_head list;
-	unsigned char addr[32];
-	unsigned char type;
-	bool global_use;
-	int sync_cnt;
-	int refcount;
-	int synced;
-	struct callback_head callback_head;
 };
 
-enum {
-	NDA_UNSPEC = 0,
-	NDA_DST = 1,
-	NDA_LLADDR = 2,
-	NDA_CACHEINFO = 3,
-	NDA_PROBES = 4,
-	NDA_VLAN = 5,
-	NDA_PORT = 6,
-	NDA_VNI = 7,
-	NDA_IFINDEX = 8,
-	NDA_MASTER = 9,
-	NDA_LINK_NETNSID = 10,
-	NDA_SRC_VNI = 11,
-	NDA_PROTOCOL = 12,
-	NDA_NH_ID = 13,
-	NDA_FDB_EXT_ATTRS = 14,
-	__NDA_MAX = 15,
+struct async_cow;
+
+struct async_chunk {
+	struct inode *inode;
+	struct page *locked_page;
+	u64 start;
+	u64 end;
+	blk_opf_t write_flags;
+	struct list_head extents;
+	struct cgroup_subsys_state *blkcg_css;
+	struct btrfs_work work;
+	struct async_cow *async_cow;
 };
 
-struct nda_cacheinfo {
-	__u32 ndm_confirmed;
-	__u32 ndm_used;
-	__u32 ndm_updated;
-	__u32 ndm_refcnt;
+struct async_cow {
+	atomic_t num_chunks;
+	struct async_chunk chunks[0];
 };
 
-struct ndt_stats {
-	__u64 ndts_allocs;
-	__u64 ndts_destroys;
-	__u64 ndts_hash_grows;
-	__u64 ndts_res_failed;
-	__u64 ndts_lookups;
-	__u64 ndts_hits;
-	__u64 ndts_rcv_probes_mcast;
-	__u64 ndts_rcv_probes_ucast;
-	__u64 ndts_periodic_gc_runs;
-	__u64 ndts_forced_gc_runs;
-	__u64 ndts_table_fulls;
+struct can_nocow_file_extent_args {
+	u64 start;
+	u64 end;
+	bool writeback_path;
+	bool strict;
+	bool free_path;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 extent_offset;
+	u64 num_bytes;
 };
 
-enum {
-	NDTPA_UNSPEC = 0,
-	NDTPA_IFINDEX = 1,
-	NDTPA_REFCNT = 2,
-	NDTPA_REACHABLE_TIME = 3,
-	NDTPA_BASE_REACHABLE_TIME = 4,
-	NDTPA_RETRANS_TIME = 5,
-	NDTPA_GC_STALETIME = 6,
-	NDTPA_DELAY_PROBE_TIME = 7,
-	NDTPA_QUEUE_LEN = 8,
-	NDTPA_APP_PROBES = 9,
-	NDTPA_UCAST_PROBES = 10,
-	NDTPA_MCAST_PROBES = 11,
-	NDTPA_ANYCAST_DELAY = 12,
-	NDTPA_PROXY_DELAY = 13,
-	NDTPA_PROXY_QLEN = 14,
-	NDTPA_LOCKTIME = 15,
-	NDTPA_QUEUE_LENBYTES = 16,
-	NDTPA_MCAST_REPROBES = 17,
-	NDTPA_PAD = 18,
-	__NDTPA_MAX = 19,
+struct btrfs_writepage_fixup {
+	struct page *page;
+	struct inode *inode;
+	struct btrfs_work work;
 };
 
-struct ndtmsg {
-	__u8 ndtm_family;
-	__u8 ndtm_pad1;
-	__u16 ndtm_pad2;
+struct dir_entry {
+	u64 ino;
+	u64 offset;
+	unsigned int type;
+	int name_len;
 };
 
-struct ndt_config {
-	__u16 ndtc_key_len;
-	__u16 ndtc_entry_size;
-	__u32 ndtc_entries;
-	__u32 ndtc_last_flush;
-	__u32 ndtc_last_rand;
-	__u32 ndtc_hash_rnd;
-	__u32 ndtc_hash_mask;
-	__u32 ndtc_hash_chain_gc;
-	__u32 ndtc_proxy_qlen;
+struct btrfs_delalloc_work {
+	struct inode *inode;
+	struct completion completion;
+	struct list_head list;
+	struct btrfs_work work;
 };
 
-enum {
-	NDTA_UNSPEC = 0,
-	NDTA_NAME = 1,
-	NDTA_THRESH1 = 2,
-	NDTA_THRESH2 = 3,
-	NDTA_THRESH3 = 4,
-	NDTA_CONFIG = 5,
-	NDTA_PARMS = 6,
-	NDTA_STATS = 7,
-	NDTA_GC_INTERVAL = 8,
-	NDTA_PAD = 9,
-	__NDTA_MAX = 10,
+struct btrfs_encoded_read_private {
+	struct btrfs_inode *inode;
+	u64 file_offset;
+	wait_queue_head_t wait;
+	atomic_t pending;
+	blk_status_t status;
+	bool skip_csum;
 };
 
-enum {
-	RTN_UNSPEC = 0,
-	RTN_UNICAST = 1,
-	RTN_LOCAL = 2,
-	RTN_BROADCAST = 3,
-	RTN_ANYCAST = 4,
-	RTN_MULTICAST = 5,
-	RTN_BLACKHOLE = 6,
-	RTN_UNREACHABLE = 7,
-	RTN_PROHIBIT = 8,
-	RTN_THROW = 9,
-	RTN_NAT = 10,
-	RTN_XRESOLVE = 11,
-	__RTN_MAX = 12,
+struct btrfs_swap_info {
+	u64 start;
+	u64 block_start;
+	u64 block_len;
+	u64 lowest_ppage;
+	u64 highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
 };
 
-enum {
-	NEIGH_ARP_TABLE = 0,
-	NEIGH_ND_TABLE = 1,
-	NEIGH_DN_TABLE = 2,
-	NEIGH_NR_TABLES = 3,
-	NEIGH_LINK_TABLE = 3,
+struct workspace___2 {
+	z_stream strm;
+	char *buf;
+	unsigned int buf_size;
+	struct list_head list;
+	int level;
 };
 
-struct neigh_seq_state {
-	struct seq_net_private p;
-	struct neigh_table *tbl;
-	struct neigh_hash_table *nht;
-	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
-	unsigned int bucket;
-	unsigned int flags;
+struct btrfs_backref_node;
+
+struct btrfs_backref_cache {
+	struct rb_root rb_root;
+	struct btrfs_backref_node *path[8];
+	struct list_head pending[8];
+	struct list_head leaves;
+	struct list_head changed;
+	struct list_head detached;
+	u64 last_trans;
+	int nr_nodes;
+	int nr_edges;
+	struct list_head pending_edge;
+	struct list_head useless_node;
+	struct btrfs_fs_info *fs_info;
+	unsigned int is_reloc;
 };
 
-struct neighbour_cb {
-	long unsigned int sched_next;
-	unsigned int flags;
+struct file_extent_cluster {
+	u64 start;
+	u64 end;
+	u64 boundary[128];
+	unsigned int nr;
 };
 
-enum netevent_notif_type {
-	NETEVENT_NEIGH_UPDATE = 1,
-	NETEVENT_REDIRECT = 2,
-	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
-	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
-	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
-	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+struct mapping_tree {
+	struct rb_root rb_root;
+	spinlock_t lock;
 };
 
-struct neigh_dump_filter {
-	int master_idx;
-	int dev_idx;
+struct reloc_control {
+	struct btrfs_block_group *block_group;
+	struct btrfs_root *extent_root;
+	struct inode *data_inode;
+	struct btrfs_block_rsv *block_rsv;
+	struct btrfs_backref_cache backref_cache;
+	struct file_extent_cluster cluster;
+	struct extent_io_tree processed_blocks;
+	struct mapping_tree reloc_root_tree;
+	struct list_head reloc_roots;
+	struct list_head dirty_subvol_roots;
+	u64 merging_rsv_size;
+	u64 nodes_relocated;
+	u64 reserved_bytes;
+	u64 search_start;
+	u64 extents_found;
+	unsigned int stage: 8;
+	unsigned int create_reloc_tree: 1;
+	unsigned int merge_reloc_tree: 1;
+	unsigned int found_file_extent: 1;
 };
 
-struct neigh_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table neigh_vars[21];
+struct btrfs_backref_iter {
+	u64 bytenr;
+	struct btrfs_path *path;
+	struct btrfs_fs_info *fs_info;
+	struct btrfs_key cur_key;
+	u32 item_ptr;
+	u32 cur_ptr;
+	u32 end_ptr;
 };
 
-struct netlink_dump_control {
-	int (*start)(struct netlink_callback *);
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
+struct btrfs_backref_node {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	u64 new_bytenr;
+	u64 owner;
+	struct list_head list;
+	struct list_head upper;
+	struct list_head lower;
+	struct btrfs_root *root;
+	struct extent_buffer *eb;
+	unsigned int level: 8;
+	unsigned int cowonly: 1;
+	unsigned int lowest: 1;
+	unsigned int locked: 1;
+	unsigned int processed: 1;
+	unsigned int checked: 1;
+	unsigned int pending: 1;
+	unsigned int detached: 1;
+	unsigned int is_reloc_root: 1;
+};
+
+struct btrfs_backref_edge {
+	struct list_head list[2];
+	struct btrfs_backref_node *node[2];
+};
+
+struct rb_simple_node {
+	struct rb_node rb_node;
+	u64 bytenr;
+};
+
+struct mapping_node {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
 	void *data;
-	struct module *module;
-	u32 min_dump_alloc;
 };
 
-struct rtnl_link_stats {
-	__u32 rx_packets;
-	__u32 tx_packets;
-	__u32 rx_bytes;
-	__u32 tx_bytes;
-	__u32 rx_errors;
-	__u32 tx_errors;
-	__u32 rx_dropped;
-	__u32 tx_dropped;
-	__u32 multicast;
-	__u32 collisions;
-	__u32 rx_length_errors;
-	__u32 rx_over_errors;
-	__u32 rx_crc_errors;
-	__u32 rx_frame_errors;
-	__u32 rx_fifo_errors;
-	__u32 rx_missed_errors;
-	__u32 tx_aborted_errors;
-	__u32 tx_carrier_errors;
-	__u32 tx_fifo_errors;
-	__u32 tx_heartbeat_errors;
-	__u32 tx_window_errors;
-	__u32 rx_compressed;
-	__u32 tx_compressed;
-	__u32 rx_nohandler;
+struct tree_block {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	u64 owner;
+	struct btrfs_key key;
+	unsigned int level: 8;
+	unsigned int key_ready: 1;
 };
 
-struct rtnl_link_ifmap {
-	__u64 mem_start;
-	__u64 mem_end;
-	__u64 base_addr;
-	__u16 irq;
-	__u8 dma;
-	__u8 port;
+struct pstore_ftrace_record {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u64 ts;
 };
 
-enum {
-	IFLA_UNSPEC = 0,
-	IFLA_ADDRESS = 1,
-	IFLA_BROADCAST = 2,
-	IFLA_IFNAME = 3,
-	IFLA_MTU = 4,
-	IFLA_LINK = 5,
-	IFLA_QDISC = 6,
-	IFLA_STATS = 7,
-	IFLA_COST = 8,
-	IFLA_PRIORITY = 9,
-	IFLA_MASTER = 10,
-	IFLA_WIRELESS = 11,
-	IFLA_PROTINFO = 12,
-	IFLA_TXQLEN = 13,
-	IFLA_MAP = 14,
-	IFLA_WEIGHT = 15,
-	IFLA_OPERSTATE = 16,
-	IFLA_LINKMODE = 17,
-	IFLA_LINKINFO = 18,
-	IFLA_NET_NS_PID = 19,
-	IFLA_IFALIAS = 20,
-	IFLA_NUM_VF = 21,
-	IFLA_VFINFO_LIST = 22,
-	IFLA_STATS64 = 23,
-	IFLA_VF_PORTS = 24,
-	IFLA_PORT_SELF = 25,
-	IFLA_AF_SPEC = 26,
-	IFLA_GROUP = 27,
-	IFLA_NET_NS_FD = 28,
-	IFLA_EXT_MASK = 29,
-	IFLA_PROMISCUITY = 30,
-	IFLA_NUM_TX_QUEUES = 31,
-	IFLA_NUM_RX_QUEUES = 32,
-	IFLA_CARRIER = 33,
-	IFLA_PHYS_PORT_ID = 34,
-	IFLA_CARRIER_CHANGES = 35,
-	IFLA_PHYS_SWITCH_ID = 36,
-	IFLA_LINK_NETNSID = 37,
-	IFLA_PHYS_PORT_NAME = 38,
-	IFLA_PROTO_DOWN = 39,
-	IFLA_GSO_MAX_SEGS = 40,
-	IFLA_GSO_MAX_SIZE = 41,
-	IFLA_PAD = 42,
-	IFLA_XDP = 43,
-	IFLA_EVENT = 44,
-	IFLA_NEW_NETNSID = 45,
-	IFLA_IF_NETNSID = 46,
-	IFLA_TARGET_NETNSID = 46,
-	IFLA_CARRIER_UP_COUNT = 47,
-	IFLA_CARRIER_DOWN_COUNT = 48,
-	IFLA_NEW_IFINDEX = 49,
-	IFLA_MIN_MTU = 50,
-	IFLA_MAX_MTU = 51,
-	IFLA_PROP_LIST = 52,
-	IFLA_ALT_IFNAME = 53,
-	IFLA_PERM_ADDRESS = 54,
-	IFLA_PROTO_DOWN_REASON = 55,
-	__IFLA_MAX = 56,
-};
-
-enum {
-	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
-	IFLA_PROTO_DOWN_REASON_MASK = 1,
-	IFLA_PROTO_DOWN_REASON_VALUE = 2,
-	__IFLA_PROTO_DOWN_REASON_CNT = 3,
-	IFLA_PROTO_DOWN_REASON_MAX = 2,
-};
-
-enum {
-	IFLA_BRPORT_UNSPEC = 0,
-	IFLA_BRPORT_STATE = 1,
-	IFLA_BRPORT_PRIORITY = 2,
-	IFLA_BRPORT_COST = 3,
-	IFLA_BRPORT_MODE = 4,
-	IFLA_BRPORT_GUARD = 5,
-	IFLA_BRPORT_PROTECT = 6,
-	IFLA_BRPORT_FAST_LEAVE = 7,
-	IFLA_BRPORT_LEARNING = 8,
-	IFLA_BRPORT_UNICAST_FLOOD = 9,
-	IFLA_BRPORT_PROXYARP = 10,
-	IFLA_BRPORT_LEARNING_SYNC = 11,
-	IFLA_BRPORT_PROXYARP_WIFI = 12,
-	IFLA_BRPORT_ROOT_ID = 13,
-	IFLA_BRPORT_BRIDGE_ID = 14,
-	IFLA_BRPORT_DESIGNATED_PORT = 15,
-	IFLA_BRPORT_DESIGNATED_COST = 16,
-	IFLA_BRPORT_ID = 17,
-	IFLA_BRPORT_NO = 18,
-	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
-	IFLA_BRPORT_CONFIG_PENDING = 20,
-	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
-	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
-	IFLA_BRPORT_HOLD_TIMER = 23,
-	IFLA_BRPORT_FLUSH = 24,
-	IFLA_BRPORT_MULTICAST_ROUTER = 25,
-	IFLA_BRPORT_PAD = 26,
-	IFLA_BRPORT_MCAST_FLOOD = 27,
-	IFLA_BRPORT_MCAST_TO_UCAST = 28,
-	IFLA_BRPORT_VLAN_TUNNEL = 29,
-	IFLA_BRPORT_BCAST_FLOOD = 30,
-	IFLA_BRPORT_GROUP_FWD_MASK = 31,
-	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
-	IFLA_BRPORT_ISOLATED = 33,
-	IFLA_BRPORT_BACKUP_PORT = 34,
-	IFLA_BRPORT_MRP_RING_OPEN = 35,
-	IFLA_BRPORT_MRP_IN_OPEN = 36,
-	__IFLA_BRPORT_MAX = 37,
-};
-
-enum {
-	IFLA_INFO_UNSPEC = 0,
-	IFLA_INFO_KIND = 1,
-	IFLA_INFO_DATA = 2,
-	IFLA_INFO_XSTATS = 3,
-	IFLA_INFO_SLAVE_KIND = 4,
-	IFLA_INFO_SLAVE_DATA = 5,
-	__IFLA_INFO_MAX = 6,
-};
-
-enum {
-	IFLA_VF_INFO_UNSPEC = 0,
-	IFLA_VF_INFO = 1,
-	__IFLA_VF_INFO_MAX = 2,
-};
-
-enum {
-	IFLA_VF_UNSPEC = 0,
-	IFLA_VF_MAC = 1,
-	IFLA_VF_VLAN = 2,
-	IFLA_VF_TX_RATE = 3,
-	IFLA_VF_SPOOFCHK = 4,
-	IFLA_VF_LINK_STATE = 5,
-	IFLA_VF_RATE = 6,
-	IFLA_VF_RSS_QUERY_EN = 7,
-	IFLA_VF_STATS = 8,
-	IFLA_VF_TRUST = 9,
-	IFLA_VF_IB_NODE_GUID = 10,
-	IFLA_VF_IB_PORT_GUID = 11,
-	IFLA_VF_VLAN_LIST = 12,
-	IFLA_VF_BROADCAST = 13,
-	__IFLA_VF_MAX = 14,
-};
-
-struct ifla_vf_mac {
-	__u32 vf;
-	__u8 mac[32];
-};
-
-struct ifla_vf_broadcast {
-	__u8 broadcast[32];
-};
-
-struct ifla_vf_vlan {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-};
-
-enum {
-	IFLA_VF_VLAN_INFO_UNSPEC = 0,
-	IFLA_VF_VLAN_INFO = 1,
-	__IFLA_VF_VLAN_INFO_MAX = 2,
-};
-
-struct ifla_vf_vlan_info {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-	__be16 vlan_proto;
-};
-
-struct ifla_vf_tx_rate {
-	__u32 vf;
-	__u32 rate;
-};
-
-struct ifla_vf_rate {
-	__u32 vf;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-};
-
-struct ifla_vf_spoofchk {
-	__u32 vf;
-	__u32 setting;
-};
-
-struct ifla_vf_link_state {
-	__u32 vf;
-	__u32 link_state;
-};
-
-struct ifla_vf_rss_query_en {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_STATS_RX_PACKETS = 0,
-	IFLA_VF_STATS_TX_PACKETS = 1,
-	IFLA_VF_STATS_RX_BYTES = 2,
-	IFLA_VF_STATS_TX_BYTES = 3,
-	IFLA_VF_STATS_BROADCAST = 4,
-	IFLA_VF_STATS_MULTICAST = 5,
-	IFLA_VF_STATS_PAD = 6,
-	IFLA_VF_STATS_RX_DROPPED = 7,
-	IFLA_VF_STATS_TX_DROPPED = 8,
-	__IFLA_VF_STATS_MAX = 9,
-};
-
-struct ifla_vf_trust {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_PORT_UNSPEC = 0,
-	IFLA_VF_PORT = 1,
-	__IFLA_VF_PORT_MAX = 2,
-};
-
-enum {
-	IFLA_PORT_UNSPEC = 0,
-	IFLA_PORT_VF = 1,
-	IFLA_PORT_PROFILE = 2,
-	IFLA_PORT_VSI_TYPE = 3,
-	IFLA_PORT_INSTANCE_UUID = 4,
-	IFLA_PORT_HOST_UUID = 5,
-	IFLA_PORT_REQUEST = 6,
-	IFLA_PORT_RESPONSE = 7,
-	__IFLA_PORT_MAX = 8,
-};
-
-struct if_stats_msg {
-	__u8 family;
-	__u8 pad1;
-	__u16 pad2;
-	__u32 ifindex;
-	__u32 filter_mask;
-};
-
-enum {
-	IFLA_STATS_UNSPEC = 0,
-	IFLA_STATS_LINK_64 = 1,
-	IFLA_STATS_LINK_XSTATS = 2,
-	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
-	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
-	IFLA_STATS_AF_SPEC = 5,
-	__IFLA_STATS_MAX = 6,
-};
-
-enum {
-	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
-	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
-	__IFLA_OFFLOAD_XSTATS_MAX = 2,
-};
-
-enum {
-	XDP_ATTACHED_NONE = 0,
-	XDP_ATTACHED_DRV = 1,
-	XDP_ATTACHED_SKB = 2,
-	XDP_ATTACHED_HW = 3,
-	XDP_ATTACHED_MULTI = 4,
-};
-
-enum {
-	IFLA_XDP_UNSPEC = 0,
-	IFLA_XDP_FD = 1,
-	IFLA_XDP_ATTACHED = 2,
-	IFLA_XDP_FLAGS = 3,
-	IFLA_XDP_PROG_ID = 4,
-	IFLA_XDP_DRV_PROG_ID = 5,
-	IFLA_XDP_SKB_PROG_ID = 6,
-	IFLA_XDP_HW_PROG_ID = 7,
-	IFLA_XDP_EXPECTED_FD = 8,
-	__IFLA_XDP_MAX = 9,
-};
-
-enum {
-	IFLA_EVENT_NONE = 0,
-	IFLA_EVENT_REBOOT = 1,
-	IFLA_EVENT_FEATURES = 2,
-	IFLA_EVENT_BONDING_FAILOVER = 3,
-	IFLA_EVENT_NOTIFY_PEERS = 4,
-	IFLA_EVENT_IGMP_RESEND = 5,
-	IFLA_EVENT_BONDING_OPTIONS = 6,
-};
-
-enum {
-	IFLA_BRIDGE_FLAGS = 0,
-	IFLA_BRIDGE_MODE = 1,
-	IFLA_BRIDGE_VLAN_INFO = 2,
-	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
-	IFLA_BRIDGE_MRP = 4,
-	__IFLA_BRIDGE_MAX = 5,
-};
-
-enum {
-	BR_MCAST_DIR_RX = 0,
-	BR_MCAST_DIR_TX = 1,
-	BR_MCAST_DIR_SIZE = 2,
-};
-
-enum rtattr_type_t {
-	RTA_UNSPEC = 0,
-	RTA_DST = 1,
-	RTA_SRC = 2,
-	RTA_IIF = 3,
-	RTA_OIF = 4,
-	RTA_GATEWAY = 5,
-	RTA_PRIORITY = 6,
-	RTA_PREFSRC = 7,
-	RTA_METRICS = 8,
-	RTA_MULTIPATH = 9,
-	RTA_PROTOINFO = 10,
-	RTA_FLOW = 11,
-	RTA_CACHEINFO = 12,
-	RTA_SESSION = 13,
-	RTA_MP_ALGO = 14,
-	RTA_TABLE = 15,
-	RTA_MARK = 16,
-	RTA_MFC_STATS = 17,
-	RTA_VIA = 18,
-	RTA_NEWDST = 19,
-	RTA_PREF = 20,
-	RTA_ENCAP_TYPE = 21,
-	RTA_ENCAP = 22,
-	RTA_EXPIRES = 23,
-	RTA_PAD = 24,
-	RTA_UID = 25,
-	RTA_TTL_PROPAGATE = 26,
-	RTA_IP_PROTO = 27,
-	RTA_SPORT = 28,
-	RTA_DPORT = 29,
-	RTA_NH_ID = 30,
-	__RTA_MAX = 31,
-};
-
-struct rta_cacheinfo {
-	__u32 rta_clntref;
-	__u32 rta_lastuse;
-	__s32 rta_expires;
-	__u32 rta_error;
-	__u32 rta_used;
-	__u32 rta_id;
-	__u32 rta_ts;
-	__u32 rta_tsage;
-};
-
-struct ifinfomsg {
-	unsigned char ifi_family;
-	unsigned char __ifi_pad;
-	short unsigned int ifi_type;
-	int ifi_index;
-	unsigned int ifi_flags;
-	unsigned int ifi_change;
-};
-
-typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
-
-typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
-
-struct rtnl_af_ops {
+struct pstore_private {
 	struct list_head list;
-	int family;
-	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
-	size_t (*get_link_af_size)(const struct net_device *, u32);
-	int (*validate_link_af)(const struct net_device *, const struct nlattr *);
-	int (*set_link_af)(struct net_device *, const struct nlattr *);
-	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
-	size_t (*get_stats_af_size)(const struct net_device *);
+	struct dentry *dentry;
+	struct pstore_record *record;
+	size_t total_size;
 };
 
-struct rtnl_link {
-	rtnl_doit_func doit;
-	rtnl_dumpit_func dumpit;
-	struct module *owner;
+struct pstore_ftrace_seq_data {
+	const void *ptr;
+	size_t off;
+	size_t size;
+};
+
+enum {
+	Opt_kmsg_bytes = 0,
+	Opt_err___10 = 1,
+};
+
+struct dh_completion {
+	struct completion completion;
+	int err;
+};
+
+struct hashtab_info {
+	u32 slots_used;
+	u32 max_chain_len;
+};
+
+struct sidtab_str_cache {
+	struct callback_head rcu_member;
+	struct list_head lru_member;
+	struct sidtab_entry *parent;
+	u32 len;
+	char str[0];
+};
+
+struct selinux_mapping;
+
+struct selinux_map {
+	struct selinux_mapping *mapping;
+	u16 size;
+};
+
+struct selinux_policy {
+	struct sidtab *sidtab;
+	struct policydb policydb;
+	struct selinux_map map;
+	u32 latest_granting;
+};
+
+struct convert_context_args {
+	struct selinux_state *state;
+	struct policydb *oldp;
+	struct policydb *newp;
+};
+
+struct selinux_policy_convert_data {
+	struct convert_context_args args;
+	struct sidtab_convert_params sidtab_params;
+};
+
+struct selinux_mapping {
+	u16 value;
+	unsigned int num_perms;
+	u32 perms[32];
+};
+
+struct selinux_audit_rule {
+	u32 au_seqno;
+	struct context au_ctxt;
+};
+
+struct ima_file_id {
+	__u8 hash_type;
+	__u8 hash_algorithm;
+	__u8 hash[64];
+};
+
+struct crypto_report_comp {
+	char type[64];
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+struct xts_tfm_ctx {
+	struct crypto_skcipher *child;
+	struct crypto_cipher *tweak;
+};
+
+struct xts_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	char name[128];
+};
+
+struct xts_request_ctx {
+	le128 t;
+	struct scatterlist *tail;
+	struct scatterlist sg[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+struct crypto_report_rng {
+	char type[64];
+	unsigned int seedsize;
+};
+
+struct queue_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct request_queue *, char *);
+	ssize_t (*store)(struct request_queue *, const char *, size_t);
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
 	unsigned int flags;
+};
+
+struct frag {
+	struct list_head list;
+	u32 group;
+	u8 num;
+	u8 rec;
+	u8 map;
+	u8 data[0];
+};
+
+struct privhead {
+	u16 ver_major;
+	u16 ver_minor;
+	u64 logical_disk_start;
+	u64 logical_disk_size;
+	u64 config_start;
+	u64 config_size;
+	uuid_t disk_id;
+};
+
+struct tocblock {
+	u8 bitmap1_name[16];
+	u64 bitmap1_start;
+	u64 bitmap1_size;
+	u8 bitmap2_name[16];
+	u64 bitmap2_start;
+	u64 bitmap2_size;
+};
+
+struct vmdb {
+	u16 ver_major;
+	u16 ver_minor;
+	u32 vblk_size;
+	u32 vblk_offset;
+	u32 last_vblk_seq;
+};
+
+struct vblk_comp {
+	u8 state[16];
+	u64 parent_id;
+	u8 type;
+	u8 children;
+	u16 chunksize;
+};
+
+struct vblk_dgrp {
+	u8 disk_id[64];
+};
+
+struct vblk_disk {
+	uuid_t disk_id;
+	u8 alt_name[128];
+};
+
+struct vblk_part {
+	u64 start;
+	u64 size;
+	u64 volume_offset;
+	u64 parent_id;
+	u64 disk_id;
+	u8 partnum;
+};
+
+struct vblk_volu {
+	u8 volume_type[16];
+	u8 volume_state[16];
+	u8 guid[16];
+	u8 drive_hint[4];
+	u64 size;
+	u8 partition_type;
+};
+
+struct vblk {
+	u8 name[64];
+	u64 obj_id;
+	u32 sequence;
+	u8 flags;
+	u8 type;
+	union {
+		struct vblk_comp comp;
+		struct vblk_dgrp dgrp;
+		struct vblk_disk disk;
+		struct vblk_part part;
+		struct vblk_volu volu;
+	} vblk;
+	struct list_head list;
+};
+
+struct ldmdb {
+	struct privhead ph;
+	struct tocblock toc;
+	struct vmdb vm;
+	struct list_head v_dgrp;
+	struct list_head v_disk;
+	struct list_head v_volu;
+	struct list_head v_comp;
+	struct list_head v_part;
+};
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct blk_iolatency {
+	struct rq_qos rqos;
+	struct timer_list timer;
+	bool enabled;
+	atomic_t enable_cnt;
+	struct work_struct enable_work;
+};
+
+struct iolatency_grp;
+
+struct child_latency_info {
+	spinlock_t lock;
+	u64 last_scale_event;
+	u64 scale_lat;
+	u64 nr_samples;
+	struct iolatency_grp *scale_grp;
+	atomic_t scale_cookie;
+};
+
+struct percentile_stats {
+	u64 total;
+	u64 missed;
+};
+
+struct latency_stat {
+	union {
+		struct percentile_stats ps;
+		struct blk_rq_stat rqs;
+	};
+};
+
+struct iolatency_grp {
+	struct blkg_policy_data pd;
+	struct latency_stat *stats;
+	struct latency_stat cur_stat;
+	struct blk_iolatency *blkiolat;
+	struct rq_depth rq_depth;
+	struct rq_wait rq_wait;
+	atomic64_t window_start;
+	atomic_t scale_cookie;
+	u64 min_lat_nsec;
+	u64 cur_win_nsec;
+	u64 lat_avg;
+	u64 nr_samples;
+	bool ssd;
+	struct child_latency_info child_lat;
+};
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+struct t10_pi_tuple {
+	__be16 guard_tag;
+	__be16 app_tag;
+	__be32 ref_tag;
+};
+
+struct crc64_pi_tuple {
+	__be64 guard_tag;
+	__be16 app_tag;
+	__u8 ref_tag[6];
+};
+
+typedef __be16 csum_fn(void *, unsigned int);
+
+struct blk_crypto_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_crypto_profile *profile;
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 pad;
+	__u64 resv[3];
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u16 nbufs;
+	__u16 bid;
+};
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+struct btree_head {
+	long unsigned int *node;
+	mempool_t *mempool;
+	int height;
+};
+
+struct btree_geo {
+	int keylen;
+	int no_pairs;
+	int no_longs;
+};
+
+typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
+
+typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
+
+typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
+
+typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
+
+enum packing_op {
+	PACK = 0,
+	UNPACK = 1,
+};
+
+typedef enum {
+	need_more = 0,
+	block_done = 1,
+	finish_started = 2,
+	finish_done = 3,
+} block_state;
+
+typedef block_state (*compress_func)(deflate_state *, int);
+
+struct deflate_workspace {
+	deflate_state deflate_memory;
+	Byte *window_memory;
+	Pos *prev_memory;
+	Pos *head_memory;
+	char *overlay_memory;
+};
+
+typedef struct deflate_workspace deflate_workspace;
+
+struct config_s {
+	ush good_length;
+	ush max_lazy;
+	ush nice_length;
+	ush max_chain;
+	compress_func func;
+};
+
+typedef struct config_s config;
+
+struct xz_dec_bcj {
+	enum {
+		BCJ_X86 = 4,
+		BCJ_POWERPC = 5,
+		BCJ_IA64 = 6,
+		BCJ_ARM = 7,
+		BCJ_ARMTHUMB = 8,
+		BCJ_SPARC = 9,
+	} type;
+	enum xz_ret ret;
+	bool single_call;
+	uint32_t pos;
+	uint32_t x86_prev_mask;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+	struct {
+		size_t filtered;
+		size_t size;
+		uint8_t buf[16];
+	} temp;
+};
+
+struct xz_dec_lzma2;
+
+enum auditsc_class_t {
+	AUDITSC_NATIVE = 0,
+	AUDITSC_COMPAT = 1,
+	AUDITSC_OPEN = 2,
+	AUDITSC_OPENAT = 3,
+	AUDITSC_SOCKETCALL = 4,
+	AUDITSC_EXECVE = 5,
+	AUDITSC_OPENAT2 = 6,
+	AUDITSC_NVALS = 7,
+};
+
+typedef long unsigned int cycles_t;
+
+enum aarch64_insn_prfm_type {
+	AARCH64_INSN_PRFM_TYPE_PLD = 0,
+	AARCH64_INSN_PRFM_TYPE_PLI = 1,
+	AARCH64_INSN_PRFM_TYPE_PST = 2,
+};
+
+enum aarch64_insn_prfm_target {
+	AARCH64_INSN_PRFM_TARGET_L1 = 0,
+	AARCH64_INSN_PRFM_TARGET_L2 = 1,
+	AARCH64_INSN_PRFM_TARGET_L3 = 2,
+};
+
+enum aarch64_insn_prfm_policy {
+	AARCH64_INSN_PRFM_POLICY_KEEP = 0,
+	AARCH64_INSN_PRFM_POLICY_STRM = 1,
+};
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+};
+
+struct tegra_ictlr_soc {
+	unsigned int num_ictlrs;
+};
+
+struct tegra_ictlr_info {
+	void *base[6];
+	u32 cop_ier[6];
+	u32 cop_iep[6];
+	u32 cpu_ier[6];
+	u32 cpu_iep[6];
+	u32 ictlr_wake_mask[6];
+};
+
+struct gic_clk_data {
+	unsigned int num_clocks;
+	const char * const *clocks;
+};
+
+struct gic_chip_data;
+
+struct gic_chip_pm {
+	struct gic_chip_data *chip_data;
+	const struct gic_clk_data *clk_data;
+	struct clk_bulk_data *clks;
+};
+
+struct mvebu_gicp_spi_range {
+	unsigned int start;
+	unsigned int count;
+};
+
+struct mvebu_gicp {
+	struct mvebu_gicp_spi_range *spi_ranges;
+	unsigned int spi_ranges_cnt;
+	unsigned int spi_cnt;
+	long unsigned int *spi_bitmap;
+	spinlock_t spi_lock;
+	struct resource *res;
+	struct device *dev;
+};
+
+struct exiu_irq_data {
+	void *base;
+	u32 spi_base;
+};
+
+struct aic_info {
+	int version;
+	u32 event;
+	u32 target_cpu;
+	u32 irq_cfg;
+	u32 sw_set;
+	u32 sw_clr;
+	u32 mask_set;
+	u32 mask_clr;
+	u32 die_stride;
+	bool fast_ipi;
+};
+
+struct aic_irq_chip {
+	void *base;
+	void *event;
+	struct irq_domain *hw_domain;
+	struct irq_domain *ipi_domain;
+	struct {
+		cpumask_t aff;
+	} *fiq_aff[6];
+	int nr_irq;
+	int max_irq;
+	int nr_die;
+	int max_die;
+	struct aic_info info;
+};
+
+struct phy_g12a_mipi_dphy_analog_priv {
+	struct phy *phy;
+	struct regmap *regmap;
+	struct phy_configure_opts_mipi_dphy config;
+};
+
+struct pinctrl_maps {
+	struct list_head node;
+	const struct pinctrl_map *maps;
+	unsigned int num_maps;
+};
+
+struct group_desc {
+	const char *name;
+	int *pins;
+	int num_pins;
+	void *data;
+};
+
+struct pctldev;
+
+enum pm_pinctrl_config_param {
+	PM_PINCTRL_CONFIG_SLEW_RATE = 0,
+	PM_PINCTRL_CONFIG_BIAS_STATUS = 1,
+	PM_PINCTRL_CONFIG_PULL_CTRL = 2,
+	PM_PINCTRL_CONFIG_SCHMITT_CMOS = 3,
+	PM_PINCTRL_CONFIG_DRIVE_STRENGTH = 4,
+	PM_PINCTRL_CONFIG_VOLTAGE_STATUS = 5,
+	PM_PINCTRL_CONFIG_TRI_STATE = 6,
+	PM_PINCTRL_CONFIG_MAX = 7,
+};
+
+enum pm_pinctrl_bias_status {
+	PM_PINCTRL_BIAS_DISABLE = 0,
+	PM_PINCTRL_BIAS_ENABLE = 1,
+};
+
+enum pm_pinctrl_pull_ctrl {
+	PM_PINCTRL_BIAS_PULL_DOWN = 0,
+	PM_PINCTRL_BIAS_PULL_UP = 1,
+};
+
+enum pm_pinctrl_drive_strength {
+	PM_PINCTRL_DRIVE_STRENGTH_2MA = 0,
+	PM_PINCTRL_DRIVE_STRENGTH_4MA = 1,
+	PM_PINCTRL_DRIVE_STRENGTH_8MA = 2,
+	PM_PINCTRL_DRIVE_STRENGTH_12MA = 3,
+};
+
+struct zynqmp_pmux_function {
+	char name[16];
+	const char * const *groups;
+	unsigned int ngroups;
+};
+
+struct zynqmp_pctrl_group;
+
+struct zynqmp_pinctrl {
+	struct pinctrl_dev *pctrl;
+	const struct zynqmp_pctrl_group *groups;
+	unsigned int ngroups;
+	const struct zynqmp_pmux_function *funcs;
+	unsigned int nfuncs;
+};
+
+struct zynqmp_pctrl_group {
+	const char *name;
+	unsigned int pins[50];
+	unsigned int npins;
+};
+
+enum imx8mq_pads {
+	MX8MQ_PAD_RESERVE0 = 0,
+	MX8MQ_PAD_RESERVE1 = 1,
+	MX8MQ_PAD_RESERVE2 = 2,
+	MX8MQ_PAD_RESERVE3 = 3,
+	MX8MQ_PAD_RESERVE4 = 4,
+	MX8MQ_IOMUXC_PMIC_STBY_REQ_CCMSRCGPCMIX = 5,
+	MX8MQ_IOMUXC_PMIC_ON_REQ_SNVSMIX = 6,
+	MX8MQ_IOMUXC_ONOFF_SNVSMIX = 7,
+	MX8MQ_IOMUXC_POR_B_SNVSMIX = 8,
+	MX8MQ_IOMUXC_RTC_RESET_B_SNVSMIX = 9,
+	MX8MQ_IOMUXC_GPIO1_IO00 = 10,
+	MX8MQ_IOMUXC_GPIO1_IO01 = 11,
+	MX8MQ_IOMUXC_GPIO1_IO02 = 12,
+	MX8MQ_IOMUXC_GPIO1_IO03 = 13,
+	MX8MQ_IOMUXC_GPIO1_IO04 = 14,
+	MX8MQ_IOMUXC_GPIO1_IO05 = 15,
+	MX8MQ_IOMUXC_GPIO1_IO06 = 16,
+	MX8MQ_IOMUXC_GPIO1_IO07 = 17,
+	MX8MQ_IOMUXC_GPIO1_IO08 = 18,
+	MX8MQ_IOMUXC_GPIO1_IO09 = 19,
+	MX8MQ_IOMUXC_GPIO1_IO10 = 20,
+	MX8MQ_IOMUXC_GPIO1_IO11 = 21,
+	MX8MQ_IOMUXC_GPIO1_IO12 = 22,
+	MX8MQ_IOMUXC_GPIO1_IO13 = 23,
+	MX8MQ_IOMUXC_GPIO1_IO14 = 24,
+	MX8MQ_IOMUXC_GPIO1_IO15 = 25,
+	MX8MQ_IOMUXC_ENET_MDC = 26,
+	MX8MQ_IOMUXC_ENET_MDIO = 27,
+	MX8MQ_IOMUXC_ENET_TD3 = 28,
+	MX8MQ_IOMUXC_ENET_TD2 = 29,
+	MX8MQ_IOMUXC_ENET_TD1 = 30,
+	MX8MQ_IOMUXC_ENET_TD0 = 31,
+	MX8MQ_IOMUXC_ENET_TX_CTL = 32,
+	MX8MQ_IOMUXC_ENET_TXC = 33,
+	MX8MQ_IOMUXC_ENET_RX_CTL = 34,
+	MX8MQ_IOMUXC_ENET_RXC = 35,
+	MX8MQ_IOMUXC_ENET_RD0 = 36,
+	MX8MQ_IOMUXC_ENET_RD1 = 37,
+	MX8MQ_IOMUXC_ENET_RD2 = 38,
+	MX8MQ_IOMUXC_ENET_RD3 = 39,
+	MX8MQ_IOMUXC_SD1_CLK = 40,
+	MX8MQ_IOMUXC_SD1_CMD = 41,
+	MX8MQ_IOMUXC_SD1_DATA0 = 42,
+	MX8MQ_IOMUXC_SD1_DATA1 = 43,
+	MX8MQ_IOMUXC_SD1_DATA2 = 44,
+	MX8MQ_IOMUXC_SD1_DATA3 = 45,
+	MX8MQ_IOMUXC_SD1_DATA4 = 46,
+	MX8MQ_IOMUXC_SD1_DATA5 = 47,
+	MX8MQ_IOMUXC_SD1_DATA6 = 48,
+	MX8MQ_IOMUXC_SD1_DATA7 = 49,
+	MX8MQ_IOMUXC_SD1_RESET_B = 50,
+	MX8MQ_IOMUXC_SD1_STROBE = 51,
+	MX8MQ_IOMUXC_SD2_CD_B = 52,
+	MX8MQ_IOMUXC_SD2_CLK = 53,
+	MX8MQ_IOMUXC_SD2_CMD = 54,
+	MX8MQ_IOMUXC_SD2_DATA0 = 55,
+	MX8MQ_IOMUXC_SD2_DATA1 = 56,
+	MX8MQ_IOMUXC_SD2_DATA2 = 57,
+	MX8MQ_IOMUXC_SD2_DATA3 = 58,
+	MX8MQ_IOMUXC_SD2_RESET_B = 59,
+	MX8MQ_IOMUXC_SD2_WP = 60,
+	MX8MQ_IOMUXC_NAND_ALE = 61,
+	MX8MQ_IOMUXC_NAND_CE0_B = 62,
+	MX8MQ_IOMUXC_NAND_CE1_B = 63,
+	MX8MQ_IOMUXC_NAND_CE2_B = 64,
+	MX8MQ_IOMUXC_NAND_CE3_B = 65,
+	MX8MQ_IOMUXC_NAND_CLE = 66,
+	MX8MQ_IOMUXC_NAND_DATA00 = 67,
+	MX8MQ_IOMUXC_NAND_DATA01 = 68,
+	MX8MQ_IOMUXC_NAND_DATA02 = 69,
+	MX8MQ_IOMUXC_NAND_DATA03 = 70,
+	MX8MQ_IOMUXC_NAND_DATA04 = 71,
+	MX8MQ_IOMUXC_NAND_DATA05 = 72,
+	MX8MQ_IOMUXC_NAND_DATA06 = 73,
+	MX8MQ_IOMUXC_NAND_DATA07 = 74,
+	MX8MQ_IOMUXC_NAND_DQS = 75,
+	MX8MQ_IOMUXC_NAND_RE_B = 76,
+	MX8MQ_IOMUXC_NAND_READY_B = 77,
+	MX8MQ_IOMUXC_NAND_WE_B = 78,
+	MX8MQ_IOMUXC_NAND_WP_B = 79,
+	MX8MQ_IOMUXC_SAI5_RXFS = 80,
+	MX8MQ_IOMUXC_SAI5_RXC = 81,
+	MX8MQ_IOMUXC_SAI5_RXD0 = 82,
+	MX8MQ_IOMUXC_SAI5_RXD1 = 83,
+	MX8MQ_IOMUXC_SAI5_RXD2 = 84,
+	MX8MQ_IOMUXC_SAI5_RXD3 = 85,
+	MX8MQ_IOMUXC_SAI5_MCLK = 86,
+	MX8MQ_IOMUXC_SAI1_RXFS = 87,
+	MX8MQ_IOMUXC_SAI1_RXC = 88,
+	MX8MQ_IOMUXC_SAI1_RXD0 = 89,
+	MX8MQ_IOMUXC_SAI1_RXD1 = 90,
+	MX8MQ_IOMUXC_SAI1_RXD2 = 91,
+	MX8MQ_IOMUXC_SAI1_RXD3 = 92,
+	MX8MQ_IOMUXC_SAI1_RXD4 = 93,
+	MX8MQ_IOMUXC_SAI1_RXD5 = 94,
+	MX8MQ_IOMUXC_SAI1_RXD6 = 95,
+	MX8MQ_IOMUXC_SAI1_RXD7 = 96,
+	MX8MQ_IOMUXC_SAI1_TXFS = 97,
+	MX8MQ_IOMUXC_SAI1_TXC = 98,
+	MX8MQ_IOMUXC_SAI1_TXD0 = 99,
+	MX8MQ_IOMUXC_SAI1_TXD1 = 100,
+	MX8MQ_IOMUXC_SAI1_TXD2 = 101,
+	MX8MQ_IOMUXC_SAI1_TXD3 = 102,
+	MX8MQ_IOMUXC_SAI1_TXD4 = 103,
+	MX8MQ_IOMUXC_SAI1_TXD5 = 104,
+	MX8MQ_IOMUXC_SAI1_TXD6 = 105,
+	MX8MQ_IOMUXC_SAI1_TXD7 = 106,
+	MX8MQ_IOMUXC_SAI1_MCLK = 107,
+	MX8MQ_IOMUXC_SAI2_RXFS = 108,
+	MX8MQ_IOMUXC_SAI2_RXC = 109,
+	MX8MQ_IOMUXC_SAI2_RXD0 = 110,
+	MX8MQ_IOMUXC_SAI2_TXFS = 111,
+	MX8MQ_IOMUXC_SAI2_TXC = 112,
+	MX8MQ_IOMUXC_SAI2_TXD0 = 113,
+	MX8MQ_IOMUXC_SAI2_MCLK = 114,
+	MX8MQ_IOMUXC_SAI3_RXFS = 115,
+	MX8MQ_IOMUXC_SAI3_RXC = 116,
+	MX8MQ_IOMUXC_SAI3_RXD = 117,
+	MX8MQ_IOMUXC_SAI3_TXFS = 118,
+	MX8MQ_IOMUXC_SAI3_TXC = 119,
+	MX8MQ_IOMUXC_SAI3_TXD = 120,
+	MX8MQ_IOMUXC_SAI3_MCLK = 121,
+	MX8MQ_IOMUXC_SPDIF_TX = 122,
+	MX8MQ_IOMUXC_SPDIF_RX = 123,
+	MX8MQ_IOMUXC_SPDIF_EXT_CLK = 124,
+	MX8MQ_IOMUXC_ECSPI1_SCLK = 125,
+	MX8MQ_IOMUXC_ECSPI1_MOSI = 126,
+	MX8MQ_IOMUXC_ECSPI1_MISO = 127,
+	MX8MQ_IOMUXC_ECSPI1_SS0 = 128,
+	MX8MQ_IOMUXC_ECSPI2_SCLK = 129,
+	MX8MQ_IOMUXC_ECSPI2_MOSI = 130,
+	MX8MQ_IOMUXC_ECSPI2_MISO = 131,
+	MX8MQ_IOMUXC_ECSPI2_SS0 = 132,
+	MX8MQ_IOMUXC_I2C1_SCL = 133,
+	MX8MQ_IOMUXC_I2C1_SDA = 134,
+	MX8MQ_IOMUXC_I2C2_SCL = 135,
+	MX8MQ_IOMUXC_I2C2_SDA = 136,
+	MX8MQ_IOMUXC_I2C3_SCL = 137,
+	MX8MQ_IOMUXC_I2C3_SDA = 138,
+	MX8MQ_IOMUXC_I2C4_SCL = 139,
+	MX8MQ_IOMUXC_I2C4_SDA = 140,
+	MX8MQ_IOMUXC_UART1_RXD = 141,
+	MX8MQ_IOMUXC_UART1_TXD = 142,
+	MX8MQ_IOMUXC_UART2_RXD = 143,
+	MX8MQ_IOMUXC_UART2_TXD = 144,
+	MX8MQ_IOMUXC_UART3_RXD = 145,
+	MX8MQ_IOMUXC_UART3_TXD = 146,
+	MX8MQ_IOMUXC_UART4_RXD = 147,
+	MX8MQ_IOMUXC_UART4_TXD = 148,
+};
+
+struct mvebu_pinctrl_function {
+	const char *name;
+	const char **groups;
+	unsigned int num_groups;
+};
+
+struct mvebu_pinctrl_group {
+	const char *name;
+	const struct mvebu_mpp_ctrl *ctrl;
+	struct mvebu_mpp_ctrl_data *data;
+	struct mvebu_mpp_ctrl_setting *settings;
+	unsigned int num_settings;
+	unsigned int gid;
+	unsigned int *pins;
+	unsigned int npins;
+};
+
+struct mvebu_pinctrl {
+	struct device *dev;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_desc desc;
+	struct mvebu_pinctrl_group *groups;
+	unsigned int num_groups;
+	struct mvebu_pinctrl_function *functions;
+	unsigned int num_functions;
+	u8 variant;
+};
+
+enum {
+	NORTH = 0,
+	SOUTH = 1,
+	WEST = 2,
+};
+
+enum sc7180_functions {
+	msm_mux_adsp_ext = 0,
+	msm_mux_agera_pll = 1,
+	msm_mux_aoss_cti = 2,
+	msm_mux_atest_char = 3,
+	msm_mux_atest_char0 = 4,
+	msm_mux_atest_char1 = 5,
+	msm_mux_atest_char2 = 6,
+	msm_mux_atest_char3 = 7,
+	msm_mux_atest_tsens = 8,
+	msm_mux_atest_tsens2 = 9,
+	msm_mux_atest_usb1 = 10,
+	msm_mux_atest_usb2 = 11,
+	msm_mux_atest_usb10 = 12,
+	msm_mux_atest_usb11 = 13,
+	msm_mux_atest_usb12 = 14,
+	msm_mux_atest_usb13 = 15,
+	msm_mux_atest_usb20 = 16,
+	msm_mux_atest_usb21 = 17,
+	msm_mux_atest_usb22 = 18,
+	msm_mux_atest_usb23 = 19,
+	msm_mux_audio_ref = 20,
+	msm_mux_btfm_slimbus = 21,
+	msm_mux_cam_mclk = 22,
+	msm_mux_cci_async = 23,
+	msm_mux_cci_i2c = 24,
+	msm_mux_cci_timer0 = 25,
+	msm_mux_cci_timer1 = 26,
+	msm_mux_cci_timer2 = 27,
+	msm_mux_cci_timer3 = 28,
+	msm_mux_cci_timer4 = 29,
+	msm_mux_cri_trng = 30,
+	msm_mux_dbg_out = 31,
+	msm_mux_ddr_bist = 32,
+	msm_mux_ddr_pxi0 = 33,
+	msm_mux_ddr_pxi1 = 34,
+	msm_mux_ddr_pxi2 = 35,
+	msm_mux_ddr_pxi3 = 36,
+	msm_mux_dp_hot = 37,
+	msm_mux_edp_lcd = 38,
+	msm_mux_gcc_gp1 = 39,
+	msm_mux_gcc_gp2 = 40,
+	msm_mux_gcc_gp3 = 41,
+	msm_mux_gpio = 42,
+	msm_mux_gp_pdm0 = 43,
+	msm_mux_gp_pdm1 = 44,
+	msm_mux_gp_pdm2 = 45,
+	msm_mux_gps_tx = 46,
+	msm_mux_jitter_bist = 47,
+	msm_mux_ldo_en = 48,
+	msm_mux_ldo_update = 49,
+	msm_mux_lpass_ext = 50,
+	msm_mux_mdp_vsync = 51,
+	msm_mux_mdp_vsync0 = 52,
+	msm_mux_mdp_vsync1 = 53,
+	msm_mux_mdp_vsync2 = 54,
+	msm_mux_mdp_vsync3 = 55,
+	msm_mux_mi2s_1 = 56,
+	msm_mux_mi2s_0 = 57,
+	msm_mux_mi2s_2 = 58,
+	msm_mux_mss_lte = 59,
+	msm_mux_m_voc = 60,
+	msm_mux_pa_indicator = 61,
+	msm_mux_phase_flag = 62,
+	msm_mux_PLL_BIST = 63,
+	msm_mux_pll_bypassnl = 64,
+	msm_mux_pll_reset = 65,
+	msm_mux_prng_rosc = 66,
+	msm_mux_qdss = 67,
+	msm_mux_qdss_cti = 68,
+	msm_mux_qlink_enable = 69,
+	msm_mux_qlink_request = 70,
+	msm_mux_qspi_clk = 71,
+	msm_mux_qspi_cs = 72,
+	msm_mux_qspi_data = 73,
+	msm_mux_qup00 = 74,
+	msm_mux_qup01 = 75,
+	msm_mux_qup02_i2c = 76,
+	msm_mux_qup02_uart = 77,
+	msm_mux_qup03 = 78,
+	msm_mux_qup04_i2c = 79,
+	msm_mux_qup04_uart = 80,
+	msm_mux_qup05 = 81,
+	msm_mux_qup10 = 82,
+	msm_mux_qup11_i2c = 83,
+	msm_mux_qup11_uart = 84,
+	msm_mux_qup12 = 85,
+	msm_mux_qup13_i2c = 86,
+	msm_mux_qup13_uart = 87,
+	msm_mux_qup14 = 88,
+	msm_mux_qup15 = 89,
+	msm_mux_sdc1_tb = 90,
+	msm_mux_sdc2_tb = 91,
+	msm_mux_sd_write = 92,
+	msm_mux_sp_cmu = 93,
+	msm_mux_tgu_ch0 = 94,
+	msm_mux_tgu_ch1 = 95,
+	msm_mux_tgu_ch2 = 96,
+	msm_mux_tgu_ch3 = 97,
+	msm_mux_tsense_pwm1 = 98,
+	msm_mux_tsense_pwm2 = 99,
+	msm_mux_uim1 = 100,
+	msm_mux_uim2 = 101,
+	msm_mux_uim_batt = 102,
+	msm_mux_usb_phy = 103,
+	msm_mux_vfr_1 = 104,
+	msm_mux__V_GPIO = 105,
+	msm_mux__V_PPS_IN = 106,
+	msm_mux__V_PPS_OUT = 107,
+	msm_mux_vsense_trigger = 108,
+	msm_mux_wlan1_adc0 = 109,
+	msm_mux_wlan1_adc1 = 110,
+	msm_mux_wlan2_adc0 = 111,
+	msm_mux_wlan2_adc1 = 112,
+	msm_mux__ = 113,
+};
+
+enum tegra_mux___2 {
+	TEGRA_MUX_BLINK___2 = 0,
+	TEGRA_MUX_CCLA___3 = 1,
+	TEGRA_MUX_CEC___2 = 2,
+	TEGRA_MUX_CLDVFS___2 = 3,
+	TEGRA_MUX_CLK___2 = 4,
+	TEGRA_MUX_CLK12 = 5,
+	TEGRA_MUX_CPU___2 = 6,
+	TEGRA_MUX_CSI = 7,
+	TEGRA_MUX_DAP = 8,
+	TEGRA_MUX_DAP1 = 9,
+	TEGRA_MUX_DAP2 = 10,
+	TEGRA_MUX_DEV3 = 11,
+	TEGRA_MUX_DISPLAYA___3 = 12,
+	TEGRA_MUX_DISPLAYA_ALT = 13,
+	TEGRA_MUX_DISPLAYB___3 = 14,
+	TEGRA_MUX_DP___3 = 15,
+	TEGRA_MUX_DSI_B = 16,
+	TEGRA_MUX_DTV___2 = 17,
+	TEGRA_MUX_EXTPERIPH1___2 = 18,
+	TEGRA_MUX_EXTPERIPH2___2 = 19,
+	TEGRA_MUX_EXTPERIPH3___3 = 20,
+	TEGRA_MUX_GMI = 21,
+	TEGRA_MUX_GMI_ALT = 22,
+	TEGRA_MUX_HDA = 23,
+	TEGRA_MUX_HSI = 24,
+	TEGRA_MUX_I2C1___3 = 25,
+	TEGRA_MUX_I2C2___3 = 26,
+	TEGRA_MUX_I2C3___3 = 27,
+	TEGRA_MUX_I2C4 = 28,
+	TEGRA_MUX_I2CPWR = 29,
+	TEGRA_MUX_I2S0 = 30,
+	TEGRA_MUX_I2S1___3 = 31,
+	TEGRA_MUX_I2S2___3 = 32,
+	TEGRA_MUX_I2S3___3 = 33,
+	TEGRA_MUX_I2S4___2 = 34,
+	TEGRA_MUX_IRDA = 35,
+	TEGRA_MUX_KBC = 36,
+	TEGRA_MUX_OWR = 37,
+	TEGRA_MUX_PE___2 = 38,
+	TEGRA_MUX_PE0___3 = 39,
+	TEGRA_MUX_PE1___3 = 40,
+	TEGRA_MUX_PMI___2 = 41,
+	TEGRA_MUX_PWM0___2 = 42,
+	TEGRA_MUX_PWM1___2 = 43,
+	TEGRA_MUX_PWM2___2 = 44,
+	TEGRA_MUX_PWM3___2 = 45,
+	TEGRA_MUX_PWRON = 46,
+	TEGRA_MUX_RESET_OUT_N = 47,
+	TEGRA_MUX_RSVD1___3 = 48,
+	TEGRA_MUX_RSVD2___3 = 49,
+	TEGRA_MUX_RSVD3___3 = 50,
+	TEGRA_MUX_RSVD4 = 51,
+	TEGRA_MUX_RTCK = 52,
+	TEGRA_MUX_SATA___3 = 53,
+	TEGRA_MUX_SDMMC1___3 = 54,
+	TEGRA_MUX_SDMMC2 = 55,
+	TEGRA_MUX_SDMMC3___3 = 56,
+	TEGRA_MUX_SDMMC4___2 = 57,
+	TEGRA_MUX_SOC___3 = 58,
+	TEGRA_MUX_SPDIF___3 = 59,
+	TEGRA_MUX_SPI1___3 = 60,
+	TEGRA_MUX_SPI2___3 = 61,
+	TEGRA_MUX_SPI3___3 = 62,
+	TEGRA_MUX_SPI4___2 = 63,
+	TEGRA_MUX_SPI5 = 64,
+	TEGRA_MUX_SPI6 = 65,
+	TEGRA_MUX_SYS___2 = 66,
+	TEGRA_MUX_TMDS = 67,
+	TEGRA_MUX_TRACE = 68,
+	TEGRA_MUX_UARTA___3 = 69,
+	TEGRA_MUX_UARTB___3 = 70,
+	TEGRA_MUX_UARTC___3 = 71,
+	TEGRA_MUX_UARTD___3 = 72,
+	TEGRA_MUX_ULPI = 73,
+	TEGRA_MUX_USB___3 = 74,
+	TEGRA_MUX_VGP1___3 = 75,
+	TEGRA_MUX_VGP2___3 = 76,
+	TEGRA_MUX_VGP3___3 = 77,
+	TEGRA_MUX_VGP4___3 = 78,
+	TEGRA_MUX_VGP5___3 = 79,
+	TEGRA_MUX_VGP6___3 = 80,
+	TEGRA_MUX_VI = 81,
+	TEGRA_MUX_VI_ALT1 = 82,
+	TEGRA_MUX_VI_ALT3 = 83,
+	TEGRA_MUX_VIMCLK2___2 = 84,
+	TEGRA_MUX_VIMCLK2_ALT = 85,
+};
+
+struct gpio {
+	unsigned int gpio;
+	long unsigned int flags;
+	const char *label;
+};
+
+enum {
+	MAX77620_GPIO0 = 0,
+	MAX77620_GPIO1 = 1,
+	MAX77620_GPIO2 = 2,
+	MAX77620_GPIO3 = 3,
+	MAX77620_GPIO4 = 4,
+	MAX77620_GPIO5 = 5,
+	MAX77620_GPIO6 = 6,
+	MAX77620_GPIO7 = 7,
+	MAX77620_GPIO_NR = 8,
+};
+
+struct max77620_gpio {
+	struct gpio_chip gpio_chip;
+	struct regmap *rmap;
+	struct device *dev;
+	struct mutex buslock;
+	unsigned int irq_type[8];
+	bool irq_enabled[8];
+};
+
+enum {
+	REG_RE = 0,
+	REG_FE = 1,
+	REG_IE = 2,
+};
+
+enum {
+	LSB = 0,
+	CSB = 1,
+	MSB = 2,
+};
+
+struct stmpe_gpio {
+	struct gpio_chip chip;
+	struct stmpe *stmpe;
+	struct device *dev;
+	struct mutex irq_lock;
+	u32 norequest_mask;
+	u8 regs[9];
+	u8 oldregs[9];
+};
+
+struct xgene_gpio {
+	struct gpio_chip chip;
+	void *base;
+	spinlock_t lock;
+	u32 set_dr_val[3];
+};
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
+struct tegra_msi {
+	long unsigned int used[4];
+	struct irq_domain *domain;
+	struct mutex map_lock;
+	spinlock_t mask_lock;
+	void *virt;
+	dma_addr_t phys;
+	int irq;
+};
+
+struct tegra_pcie_port_soc {
+	struct {
+		u8 turnoff_bit;
+		u8 ack_bit;
+	} pme;
+};
+
+struct tegra_pcie_soc {
+	unsigned int num_ports;
+	const struct tegra_pcie_port_soc *ports;
+	unsigned int msi_base_shift;
+	long unsigned int afi_pex2_ctrl;
+	u32 pads_pll_ctl;
+	u32 tx_ref_sel;
+	u32 pads_refclk_cfg0;
+	u32 pads_refclk_cfg1;
+	u32 update_fc_threshold;
+	bool has_pex_clkreq_en;
+	bool has_pex_bias_ctrl;
+	bool has_intr_prsnt_sense;
+	bool has_cml_clk;
+	bool has_gen2;
+	bool force_pca_enable;
+	bool program_uphy;
+	bool update_clamp_threshold;
+	bool program_deskew_time;
+	bool update_fc_timer;
+	bool has_cache_bars;
+	struct {
+		struct {
+			u32 rp_ectl_2_r1;
+			u32 rp_ectl_4_r1;
+			u32 rp_ectl_5_r1;
+			u32 rp_ectl_6_r1;
+			u32 rp_ectl_2_r2;
+			u32 rp_ectl_4_r2;
+			u32 rp_ectl_5_r2;
+			u32 rp_ectl_6_r2;
+		} regs;
+		bool enable;
+	} ectl;
+};
+
+struct tegra_pcie {
+	struct device *dev;
+	void *pads;
+	void *afi;
+	void *cfg;
+	int irq;
+	struct resource cs;
+	struct clk *pex_clk;
+	struct clk *afi_clk;
+	struct clk *pll_e;
+	struct clk *cml_clk;
+	struct reset_control *pex_rst;
+	struct reset_control *afi_rst;
+	struct reset_control *pcie_xrst;
+	bool legacy_phy;
+	struct phy *phy;
+	struct tegra_msi msi;
+	struct list_head ports;
+	u32 xbar_config;
+	struct regulator_bulk_data *supplies;
+	unsigned int num_supplies;
+	const struct tegra_pcie_soc *soc;
+	struct dentry *debugfs;
+};
+
+struct tegra_pcie_port {
+	struct tegra_pcie *pcie;
+	struct device_node *np;
+	struct list_head list;
+	struct resource regs;
+	void *base;
+	unsigned int index;
+	unsigned int lanes;
+	struct phy **phys;
+	struct gpio_desc *reset_gpio;
+};
+
+struct qcom_pcie_resources_2_1_0 {
+	struct clk_bulk_data clks[5];
+	struct reset_control *pci_reset;
+	struct reset_control *axi_reset;
+	struct reset_control *ahb_reset;
+	struct reset_control *por_reset;
+	struct reset_control *phy_reset;
+	struct reset_control *ext_reset;
+	struct regulator_bulk_data supplies[3];
+};
+
+struct qcom_pcie_resources_1_0_0 {
+	struct clk *iface;
+	struct clk *aux;
+	struct clk *master_bus;
+	struct clk *slave_bus;
+	struct reset_control *core;
+	struct regulator *vdda;
+};
+
+struct qcom_pcie_resources_2_3_2 {
+	struct clk *aux_clk;
+	struct clk *master_clk;
+	struct clk *slave_clk;
+	struct clk *cfg_clk;
+	struct regulator_bulk_data supplies[2];
+};
+
+struct qcom_pcie_resources_2_4_0 {
+	struct clk_bulk_data clks[4];
+	int num_clks;
+	struct reset_control *axi_m_reset;
+	struct reset_control *axi_s_reset;
+	struct reset_control *pipe_reset;
+	struct reset_control *axi_m_vmid_reset;
+	struct reset_control *axi_s_xpu_reset;
+	struct reset_control *parf_reset;
+	struct reset_control *phy_reset;
+	struct reset_control *axi_m_sticky_reset;
+	struct reset_control *pipe_sticky_reset;
+	struct reset_control *pwr_reset;
+	struct reset_control *ahb_reset;
+	struct reset_control *phy_ahb_reset;
+};
+
+struct qcom_pcie_resources_2_3_3 {
+	struct clk *iface;
+	struct clk *axi_m_clk;
+	struct clk *axi_s_clk;
+	struct clk *ahb_clk;
+	struct clk *aux_clk;
+	struct reset_control *rst[7];
+};
+
+struct qcom_pcie_resources_2_7_0 {
+	struct clk_bulk_data clks[9];
+	int num_clks;
+	struct regulator_bulk_data supplies[2];
+	struct reset_control *pci_reset;
+};
+
+struct qcom_pcie_resources_2_9_0 {
+	struct clk_bulk_data clks[5];
+	struct reset_control *rst;
+};
+
+union qcom_pcie_resources {
+	struct qcom_pcie_resources_1_0_0 v1_0_0;
+	struct qcom_pcie_resources_2_1_0 v2_1_0;
+	struct qcom_pcie_resources_2_3_2 v2_3_2;
+	struct qcom_pcie_resources_2_3_3 v2_3_3;
+	struct qcom_pcie_resources_2_4_0 v2_4_0;
+	struct qcom_pcie_resources_2_7_0 v2_7_0;
+	struct qcom_pcie_resources_2_9_0 v2_9_0;
+};
+
+struct qcom_pcie;
+
+struct qcom_pcie_ops {
+	int (*get_resources)(struct qcom_pcie *);
+	int (*init)(struct qcom_pcie *);
+	int (*post_init)(struct qcom_pcie *);
+	void (*deinit)(struct qcom_pcie *);
+	void (*post_deinit)(struct qcom_pcie *);
+	void (*ltssm_enable)(struct qcom_pcie *);
+	int (*config_sid)(struct qcom_pcie *);
+};
+
+struct qcom_pcie_cfg;
+
+struct qcom_pcie {
+	struct dw_pcie *pci;
+	void *parf;
+	void *elbi;
+	union qcom_pcie_resources res;
+	struct phy *phy;
+	struct gpio_desc *reset;
+	const struct qcom_pcie_cfg *cfg;
+};
+
+struct qcom_pcie_cfg {
+	const struct qcom_pcie_ops *ops;
+	unsigned int has_tbu_clk: 1;
+	unsigned int has_ddrss_sf_tbu_clk: 1;
+	unsigned int has_aggre0_clk: 1;
+	unsigned int has_aggre1_clk: 1;
+};
+
+struct aperture_range {
+	struct device *dev;
+	resource_size_t base;
+	resource_size_t size;
+	struct list_head lh;
+	void (*detach)(struct device *);
+};
+
+typedef u32 (*acpi_event_handler)(void *);
+
+struct acpi_dev_walk_context {
+	int (*fn)(struct acpi_device *, void *);
+	void *data;
+};
+
+struct acpi_pci_link_irq {
+	u32 active;
+	u8 triggering;
+	u8 polarity;
+	u8 resource_type;
+	u8 possible_count;
+	u32 possible[16];
+	u8 initialized: 1;
+	u8 reserved: 7;
+};
+
+struct acpi_pci_link {
+	struct list_head list;
+	struct acpi_device *device;
+	struct acpi_pci_link_irq irq;
+	int refcnt;
+};
+
+struct acpi_device_properties {
+	const guid_t *guid;
+	union acpi_object *properties;
+	struct list_head list;
+	void **bufs;
+};
+
+struct acpi_pci_device {
+	acpi_handle device;
+	struct acpi_pci_device *next;
+};
+
+struct acpi_device_walk_info {
+	struct acpi_table_desc *table_desc;
+	struct acpi_evaluate_info *evaluate_info;
+	u32 device_count;
+	u32 num_STA;
+	u32 num_INI;
+};
+
+struct acpi_namestring_info {
+	const char *external_name;
+	const char *next_external_char;
+	char *internal_name;
+	u32 length;
+	u32 num_segments;
+	u32 num_carats;
+	u8 fully_qualified;
+};
+
+struct acpi_ac {
+	struct power_supply *charger;
+	struct power_supply_desc charger_desc;
+	struct acpi_device *device;
+	long long unsigned int state;
+	struct notifier_block battery_nb;
+};
+
+struct acpi_pcct_shared_memory {
+	u32 signature;
+	u16 command;
+	u16 status;
+};
+
+struct pcc_mbox_chan {
+	struct mbox_chan *mchan;
+	u64 shmem_base_addr;
+	u64 shmem_size;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+};
+
+struct cpc_register_resource {
+	acpi_object_type type;
+	u64 *sys_mem_vaddr;
+	union {
+		struct cpc_reg reg;
+		u64 int_value;
+	} cpc_entry;
+};
+
+struct cpc_desc {
+	int num_entries;
+	int version;
+	int cpu_id;
+	int write_cmd_status;
+	int write_cmd_id;
+	struct cpc_register_resource cpc_regs[21];
+	struct acpi_psd_package domain_info;
+	struct kobject kobj;
+};
+
+enum cppc_regs {
+	HIGHEST_PERF = 0,
+	NOMINAL_PERF = 1,
+	LOW_NON_LINEAR_PERF = 2,
+	LOWEST_PERF = 3,
+	GUARANTEED_PERF = 4,
+	DESIRED_PERF = 5,
+	MIN_PERF = 6,
+	MAX_PERF = 7,
+	PERF_REDUC_TOLERANCE = 8,
+	TIME_WINDOW = 9,
+	CTR_WRAP_TIME = 10,
+	REFERENCE_CTR = 11,
+	DELIVERED_CTR = 12,
+	PERF_LIMITED = 13,
+	ENABLE = 14,
+	AUTO_SEL_ENABLE = 15,
+	AUTO_ACT_WINDOW = 16,
+	ENERGY_PERF = 17,
+	REFERENCE_PERF = 18,
+	LOWEST_FREQ = 19,
+	NOMINAL_FREQ = 20,
+};
+
+struct cppc_perf_ctrls {
+	u32 max_perf;
+	u32 min_perf;
+	u32 desired_perf;
+};
+
+struct cppc_perf_fb_ctrs {
+	u64 reference;
+	u64 delivered;
+	u64 reference_perf;
+	u64 wraparound_time;
+};
+
+struct cppc_cpudata {
+	struct list_head node;
+	struct cppc_perf_caps perf_caps;
+	struct cppc_perf_ctrls perf_ctrls;
+	struct cppc_perf_fb_ctrs perf_fb_ctrs;
+	unsigned int shared_type;
+	cpumask_var_t shared_cpu_map;
+};
+
+struct cppc_pcc_data {
+	struct pcc_mbox_chan *pcc_channel;
+	void *pcc_comm_addr;
+	bool pcc_channel_acquired;
+	unsigned int deadline_us;
+	unsigned int pcc_mpar;
+	unsigned int pcc_mrtt;
+	unsigned int pcc_nominal;
+	bool pending_pcc_write_cmd;
+	bool platform_owns_pcc;
+	unsigned int pcc_write_cnt;
+	struct rw_semaphore pcc_lock;
+	wait_queue_head_t pcc_write_wait_q;
+	ktime_t last_cmd_cmpl_time;
+	ktime_t last_mpar_reset;
+	int mpar_count;
+	int refcount;
+};
+
+struct acpi_table_viot {
+	struct acpi_table_header header;
+	u16 node_count;
+	u16 node_offset;
+	u8 reserved[8];
+};
+
+struct acpi_viot_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+enum acpi_viot_node_type {
+	ACPI_VIOT_NODE_PCI_RANGE = 1,
+	ACPI_VIOT_NODE_MMIO = 2,
+	ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 3,
+	ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 4,
+	ACPI_VIOT_RESERVED = 5,
+};
+
+struct acpi_viot_pci_range {
+	struct acpi_viot_header header;
+	u32 endpoint_start;
+	u16 segment_start;
+	u16 segment_end;
+	u16 bdf_start;
+	u16 bdf_end;
+	u16 output_node;
+	u8 reserved[6];
+};
+
+struct acpi_viot_mmio {
+	struct acpi_viot_header header;
+	u32 endpoint;
+	u64 base_address;
+	u16 output_node;
+	u8 reserved[6];
+};
+
+struct acpi_viot_virtio_iommu_pci {
+	struct acpi_viot_header header;
+	u16 segment;
+	u16 bdf;
+	u8 reserved[8];
+};
+
+struct acpi_viot_virtio_iommu_mmio {
+	struct acpi_viot_header header;
+	u8 reserved[4];
+	u64 base_address;
+};
+
+struct viot_iommu {
+	unsigned int offset;
+	struct fwnode_handle *fwnode;
+	struct list_head list;
+};
+
+struct viot_endpoint {
+	union {
+		struct {
+			u16 segment_start;
+			u16 segment_end;
+			u16 bdf_start;
+			u16 bdf_end;
+		};
+		u64 address;
+	};
+	u32 endpoint_id;
+	struct viot_iommu *viommu;
+	struct list_head list;
+};
+
+struct clk_gpio {
+	struct clk_hw hw;
+	struct gpio_desc *gpiod;
+};
+
+struct scmi_clk {
+	u32 id;
+	struct clk_hw hw;
+	const struct scmi_clock_info *info;
+	const struct scmi_protocol_handle *ph;
+};
+
+struct hisi_crg_funcs {
+	struct hisi_clock_data * (*register_clks)(struct platform_device *);
+	void (*unregister_clks)(struct platform_device *);
+};
+
+struct hisi_reset_controller;
+
+struct hisi_crg_dev {
+	struct hisi_clock_data *clk_data;
+	struct hisi_reset_controller *rstc;
+	const struct hisi_crg_funcs *funcs;
+};
+
+struct hi3559av100_pll_clock {
+	u32 id;
+	const char *name;
+	const char *parent_name;
+	const u32 ctrl_reg1;
+	const u8 frac_shift;
+	const u8 frac_width;
+	const u8 postdiv1_shift;
+	const u8 postdiv1_width;
+	const u8 postdiv2_shift;
+	const u8 postdiv2_width;
+	const u32 ctrl_reg2;
+	const u8 fbdiv_shift;
+	const u8 fbdiv_width;
+	const u8 refdiv_shift;
+	const u8 refdiv_width;
+};
+
+struct hi3559av100_clk_pll {
+	struct clk_hw hw;
+	u32 id;
+	void *ctrl_reg1;
+	u8 frac_shift;
+	u8 frac_width;
+	u8 postdiv1_shift;
+	u8 postdiv1_width;
+	u8 postdiv2_shift;
+	u8 postdiv2_width;
+	void *ctrl_reg2;
+	u8 fbdiv_shift;
+	u8 fbdiv_width;
+	u8 refdiv_shift;
+	u8 refdiv_width;
+};
+
+struct clk_divider_gate {
+	struct clk_divider divider;
+	u32 cached_val;
+};
+
+struct clk_gate_exclusive {
+	struct clk_gate gate;
+	u32 exclusive_mask;
+};
+
+enum imx_pllv1_type {
+	IMX_PLLV1_IMX1 = 0,
+	IMX_PLLV1_IMX21 = 1,
+	IMX_PLLV1_IMX25 = 2,
+	IMX_PLLV1_IMX27 = 3,
+	IMX_PLLV1_IMX31 = 4,
+	IMX_PLLV1_IMX35 = 5,
+};
+
+struct clk_pllv1 {
+	struct clk_hw hw;
+	void *base;
+	enum imx_pllv1_type type;
+};
+
+struct clk_pll14xx {
+	struct clk_hw hw;
+	void *base;
+	enum imx_pll14xx_type type;
+	const struct imx_pll14xx_rate_table *rate_table;
+	int rate_count;
+};
+
+struct tbg_def {
+	char *name;
+	u32 refdiv_offset;
+	u32 fbdiv_offset;
+	u32 vcodiv_reg;
+	u32 vcodiv_offset;
+};
+
+struct pll_config {
+	u16 l;
+	u32 m;
+	u32 n;
+	u32 vco_val;
+	u32 vco_mask;
+	u32 pre_div_val;
+	u32 pre_div_mask;
+	u32 post_div_val;
+	u32 post_div_mask;
+	u32 mn_ena_mask;
+	u32 main_output_mask;
+	u32 aux_output_mask;
+};
+
+struct clk_rcg2_gfx3d {
+	u8 div;
+	struct clk_rcg2 rcg;
+	struct clk_hw **hws;
+};
+
+enum freq_policy {
+	FLOOR = 0,
+	CEIL = 1,
+};
+
+enum {
+	P_PXO___2 = 0,
+	P_PLL8___2 = 1,
+	P_PLL3 = 2,
+	P_CXO___2 = 3,
+};
+
+struct clk_regmap_div {
+	u32 reg;
+	u32 shift;
+	u32 width;
+	struct clk_regmap___2 clkr;
+};
+
+struct clk_regmap_phy_mux {
+	u32 reg;
+	struct clk_regmap___2 clkr;
+};
+
+enum {
+	P_BI_TCXO___3 = 0,
+	P_GCC_GPLL0_OUT_EVEN = 1,
+	P_GCC_GPLL0_OUT_MAIN = 2,
+	P_GCC_GPLL0_OUT_ODD = 3,
+	P_GCC_GPLL10_OUT_MAIN = 4,
+	P_GCC_GPLL4_OUT_MAIN = 5,
+	P_GCC_GPLL9_OUT_MAIN = 6,
+	P_PCIE_0_PIPE_CLK = 7,
+	P_PCIE_1_PIPE_CLK = 8,
+	P_SLEEP_CLK___7 = 9,
+	P_UFS_PHY_RX_SYMBOL_0_CLK = 10,
+	P_UFS_PHY_RX_SYMBOL_1_CLK = 11,
+	P_UFS_PHY_TX_SYMBOL_0_CLK = 12,
+	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK = 13,
+	P_GCC_MSS_GPLL0_MAIN_DIV_CLK = 14,
+};
+
+struct _ccu_nkm {
+	long unsigned int n;
+	long unsigned int min_n;
+	long unsigned int max_n;
+	long unsigned int k;
+	long unsigned int min_k;
+	long unsigned int max_k;
+	long unsigned int m;
+	long unsigned int min_m;
+	long unsigned int max_m;
+};
+
+enum {
+	DOWN___2 = 0,
+	UP___2 = 1,
+};
+
+struct vexpress_osc {
+	struct regmap *reg;
+	struct clk_hw hw;
+	long unsigned int rate_min;
+	long unsigned int rate_max;
+};
+
+struct trace_event_raw_tegra_dma_tx_status {
+	struct trace_entry ent;
+	u32 __data_loc_chan;
+	dma_cookie_t cookie;
+	__u32 residue;
+	char __data[0];
+};
+
+struct trace_event_raw_tegra_dma_complete_cb {
+	struct trace_entry ent;
+	u32 __data_loc_chan;
+	int count;
+	void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_tegra_dma_isr {
+	struct trace_entry ent;
+	u32 __data_loc_chan;
+	int irq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tegra_dma_tx_status {
+	u32 chan;
+};
+
+struct trace_event_data_offsets_tegra_dma_complete_cb {
+	u32 chan;
+};
+
+struct trace_event_data_offsets_tegra_dma_isr {
+	u32 chan;
+};
+
+typedef void (*btf_trace_tegra_dma_tx_status)(void *, struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+
+typedef void (*btf_trace_tegra_dma_complete_cb)(void *, struct dma_chan *, int, void *);
+
+typedef void (*btf_trace_tegra_dma_isr)(void *, struct dma_chan *, int);
+
+struct tegra_dma_chip_data {
+	unsigned int nr_channels;
+	unsigned int channel_reg_size;
+	unsigned int max_dma_count;
+	bool support_channel_pause;
+	bool support_separate_wcount_reg;
+};
+
+struct tegra_dma_channel_regs {
+	u32 csr;
+	u32 ahb_ptr;
+	u32 apb_ptr;
+	u32 ahb_seq;
+	u32 apb_seq;
+	u32 wcount;
+};
+
+struct tegra_dma_desc;
+
+struct tegra_dma_sg_req {
+	struct tegra_dma_channel_regs ch_regs;
+	unsigned int req_len;
+	bool configured;
+	bool last_sg;
+	struct list_head node;
+	struct tegra_dma_desc *dma_desc;
+	unsigned int words_xferred;
+};
+
+struct tegra_dma_desc {
+	struct dma_async_tx_descriptor txd;
+	unsigned int bytes_requested;
+	unsigned int bytes_transferred;
+	enum dma_status dma_status;
+	struct list_head node;
+	struct list_head tx_list;
+	struct list_head cb_node;
+	unsigned int cb_count;
+};
+
+struct tegra_dma_channel;
+
+typedef void (*dma_isr_handler)(struct tegra_dma_channel *, bool);
+
+struct tegra_dma;
+
+struct tegra_dma_channel {
+	struct dma_chan dma_chan;
+	char name[12];
+	bool config_init;
+	unsigned int id;
+	void *chan_addr;
+	spinlock_t lock;
+	bool busy;
+	struct tegra_dma *tdma;
+	bool cyclic;
+	struct list_head free_sg_req;
+	struct list_head pending_sg_req;
+	struct list_head free_dma_desc;
+	struct list_head cb_desc;
+	dma_isr_handler isr_handler;
+	struct tasklet_struct tasklet;
+	unsigned int slave_id;
+	struct dma_slave_config dma_sconfig;
+	struct tegra_dma_channel_regs channel_reg;
+	struct wait_queue_head wq;
+};
+
+struct tegra_dma {
+	struct dma_device dma_dev;
+	struct device *dev;
+	struct clk *dma_clk;
+	struct reset_control *rst;
+	spinlock_t global_lock;
+	void *base_addr;
+	const struct tegra_dma_chip_data *chip_data;
+	u32 global_pause_count;
+	struct tegra_dma_channel channels[0];
+};
+
+struct imx_pgc_regs {
+	u16 map;
+	u16 pup;
+	u16 pdn;
+	u16 hsk;
+};
+
+struct imx_pgc_domain {
+	struct generic_pm_domain genpd;
+	struct regmap *regmap;
+	const struct imx_pgc_regs *regs;
+	struct regulator *regulator;
+	struct reset_control *reset;
+	struct clk_bulk_data *clks;
+	int num_clks;
+	long unsigned int pgc;
+	const struct {
+		u32 pxx;
+		u32 map;
+		u32 hskreq;
+		u32 hskack;
+	} bits;
+	const int voltage;
+	const bool keep_clocks;
+	struct device *dev;
+	unsigned int pgc_sw_pup_reg;
+	unsigned int pgc_sw_pdn_reg;
+};
+
+struct imx_pgc_domain_data {
+	const struct imx_pgc_domain *domains;
+	size_t domains_num;
+	const struct regmap_access_table *reg_access_table;
+	const struct imx_pgc_regs *pgc_regs;
+};
+
+struct trace_event_raw_rpmh_tx_done {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int m;
+	u32 addr;
+	u32 data;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rpmh_send_msg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int m;
+	int n;
+	u32 hdr;
+	u32 addr;
+	u32 data;
+	bool wait;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpmh_tx_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpmh_send_msg {
+	u32 name;
+};
+
+typedef void (*btf_trace_rpmh_tx_done)(void *, struct rsc_drv *, int, const struct tcs_request *, int);
+
+typedef void (*btf_trace_rpmh_send_msg)(void *, struct rsc_drv *, int, int, u32, const struct tcs_cmd *);
+
+struct tcs_type_config {
+	u32 type;
+	u32 n;
+};
+
+enum zynqmp_pm_suspend_reason {
+	SUSPEND_POWER_REQUEST = 201,
+	SUSPEND_ALERT = 202,
+	SUSPEND_SYSTEM_SHUTDOWN = 203,
+};
+
+struct zynqmp_pm_work_struct {
+	struct work_struct callback_work;
+	u32 args[4];
+};
+
+enum pm_suspend_mode {
+	PM_SUSPEND_MODE_FIRST = 0,
+	PM_SUSPEND_MODE_STD = 0,
+	PM_SUSPEND_MODE_POWER_OFF = 1,
+};
+
+struct pre_voltage_change_data {
+	long unsigned int old_uV;
+	long unsigned int min_uV;
+	long unsigned int max_uV;
+};
+
+struct regulator_coupler {
+	struct list_head list;
+	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
+};
+
+enum regulator_status {
+	REGULATOR_STATUS_OFF = 0,
+	REGULATOR_STATUS_ON = 1,
+	REGULATOR_STATUS_ERROR = 2,
+	REGULATOR_STATUS_FAST = 3,
+	REGULATOR_STATUS_NORMAL = 4,
+	REGULATOR_STATUS_IDLE = 5,
+	REGULATOR_STATUS_STANDBY = 6,
+	REGULATOR_STATUS_BYPASS = 7,
+	REGULATOR_STATUS_UNDEFINED = 8,
+};
+
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
+};
+
+struct regulator_enable_gpio {
+	struct list_head list;
+	struct gpio_desc *gpiod;
+	u32 enable_count;
+	u32 request_count;
+};
+
+struct trace_event_raw_regulator_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int min;
+	int max;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_value {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regulator_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_value {
+	u32 name;
+};
+
+typedef void (*btf_trace_regulator_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
+
+typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
+
+struct regulator_map {
+	struct list_head list;
+	const char *dev_name;
+	const char *supply;
+	struct regulator_dev *regulator;
+};
+
+struct regulator_supply_alias {
+	struct list_head list;
+	struct device *src_dev;
+	const char *src_supply;
+	struct device *alias_dev;
+	const char *alias_supply;
+};
+
+struct summary_data {
+	struct seq_file *s;
+	struct regulator_dev *parent;
+	int level;
+};
+
+struct summary_lock_data {
+	struct ww_acquire_ctx *ww_ctx;
+	struct regulator_dev **new_contended_rdev;
+	struct regulator_dev **old_contended_rdev;
+};
+
+enum mrq_reset_commands {
+	CMD_RESET_ASSERT = 1,
+	CMD_RESET_DEASSERT = 2,
+	CMD_RESET_MODULE = 3,
+	CMD_RESET_GET_MAX_ID = 4,
+	CMD_RESET_MAX = 5,
+};
+
+struct mrq_reset_request {
+	uint32_t cmd;
+	uint32_t reset_id;
+};
+
+struct scmi_reset_data {
+	struct reset_controller_dev rcdev;
+	const struct scmi_protocol_handle *ph;
+};
+
+struct pts_fs_info;
+
+typedef uint32_t char32_t;
+
+struct uni_screen {
+	char32_t *lines[0];
+};
+
+struct con_driver {
+	const struct consw *con;
+	const char *desc;
+	struct device *dev;
+	int node;
+	int first;
+	int last;
+	int flag;
+};
+
+enum {
+	blank_off = 0,
+	blank_normal_wait = 1,
+	blank_vesa_wait = 2,
+};
+
+enum {
+	EPecma = 0,
+	EPdec = 1,
+	EPeq = 2,
+	EPgt = 3,
+	EPlt = 4,
+};
+
+struct rgb {
+	u8 r;
+	u8 g;
+	u8 b;
+};
+
+enum {
+	ESnormal = 0,
+	ESesc = 1,
+	ESsquare = 2,
+	ESgetpars = 3,
+	ESfunckey = 4,
+	EShash = 5,
+	ESsetG0 = 6,
+	ESsetG1 = 7,
+	ESpercent = 8,
+	EScsiignore = 9,
+	ESnonstd = 10,
+	ESpalette = 11,
+	ESosc = 12,
+	ESapc = 13,
+	ESpm = 14,
+	ESdcs = 15,
+};
+
+struct interval {
+	uint32_t first;
+	uint32_t last;
+};
+
+struct vc_draw_region {
+	long unsigned int from;
+	long unsigned int to;
+	int x;
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct qcom_adm_peripheral_config {
+	u32 crci;
+	u32 mux;
+};
+
+enum {
+	UARTDM_1P1 = 1,
+	UARTDM_1P2 = 2,
+	UARTDM_1P3 = 3,
+	UARTDM_1P4 = 4,
+};
+
+struct msm_dma {
+	struct dma_chan *chan;
+	enum dma_data_direction dir;
+	dma_addr_t phys;
+	unsigned char *virt;
+	dma_cookie_t cookie;
+	u32 enable_bit;
+	unsigned int count;
+	struct dma_async_tx_descriptor *desc;
+};
+
+struct msm_port {
+	struct uart_port uart;
+	char name[16];
+	struct clk *clk;
+	struct clk *pclk;
+	unsigned int imr;
+	int is_uartdm;
+	unsigned int old_snap_state;
+	bool break_detected;
+	struct msm_dma tx_dma;
+	struct msm_dma rx_dma;
+};
+
+struct msm_baud_map {
+	u16 divisor;
+	u8 code;
+	u8 rxstale;
+};
+
+struct serport {
+	struct tty_port *port;
+	struct tty_struct *tty;
+	struct tty_driver *tty_drv;
+	int tty_idx;
+	long unsigned int flags;
+};
+
+struct tpm1_get_random_out {
+	__be32 rng_data_len;
+	u8 rng_data[128];
+};
+
+struct acpi_tpm2_phy {
+	u8 start_method_specific[12];
+	u32 log_area_minimum_length;
+	u64 log_area_start_address;
+};
+
+enum bios_platform_class {
+	BIOS_CLIENT = 0,
+	BIOS_SERVER = 1,
+};
+
+struct client_hdr {
+	u32 log_max_len;
+	u64 log_start_addr;
+} __attribute__((packed));
+
+struct server_hdr {
+	u16 reserved;
+	u64 log_max_len;
+	u64 log_start_addr;
+} __attribute__((packed));
+
+struct acpi_tcpa {
+	struct acpi_table_header hdr;
+	u16 platform_class;
+	union {
+		struct client_hdr client;
+		struct server_hdr server;
+	};
+} __attribute__((packed));
+
+struct arm_smmu_mmu_notifier {
+	struct mmu_notifier mn;
+	struct arm_smmu_ctx_desc *cd;
+	bool cleared;
+	refcount_t refs;
+	struct list_head list;
+	struct arm_smmu_domain___2 *domain;
+};
+
+struct arm_smmu_bond {
+	struct iommu_sva sva;
+	struct mm_struct *mm;
+	struct arm_smmu_mmu_notifier *smmu_mn;
+	struct list_head list;
+	refcount_t refs;
+};
+
+struct arm_lpae_io_pgtable {
+	struct io_pgtable iop;
+	int pgd_bits;
+	int start_level;
+	int bits_per_level;
+	void *pgd;
+};
+
+typedef u64 arm_lpae_iopte;
+
+struct iopf_queue;
+
+struct iopf_device_param {
+	struct device *dev;
+	struct iopf_queue *queue;
+	struct list_head queue_list;
+	struct list_head partial;
+};
+
+struct iopf_queue {
+	struct workqueue_struct *wq;
+	struct list_head devices;
+	struct mutex lock;
+};
+
+struct iopf_fault {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iopf_group {
+	struct iopf_fault last_fault;
+	struct list_head faults;
+	struct work_struct work;
+	struct device *dev;
+};
+
+struct drm_version {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	__kernel_size_t name_len;
+	char *name;
+	__kernel_size_t date_len;
+	char *date;
+	__kernel_size_t desc_len;
+	char *desc;
+};
+
+struct drm_unique {
+	__kernel_size_t unique_len;
+	char *unique;
+};
+
+struct drm_client {
+	int idx;
+	int auth;
+	long unsigned int pid;
+	long unsigned int uid;
+	long unsigned int magic;
+	long unsigned int iocs;
+};
+
+enum drm_stat_type {
+	_DRM_STAT_LOCK = 0,
+	_DRM_STAT_OPENS = 1,
+	_DRM_STAT_CLOSES = 2,
+	_DRM_STAT_IOCTLS = 3,
+	_DRM_STAT_LOCKS = 4,
+	_DRM_STAT_UNLOCKS = 5,
+	_DRM_STAT_VALUE = 6,
+	_DRM_STAT_BYTE = 7,
+	_DRM_STAT_COUNT = 8,
+	_DRM_STAT_IRQ = 9,
+	_DRM_STAT_PRIMARY = 10,
+	_DRM_STAT_SECONDARY = 11,
+	_DRM_STAT_DMA = 12,
+	_DRM_STAT_SPECIAL = 13,
+	_DRM_STAT_MISSED = 14,
+};
+
+struct drm_stats {
+	long unsigned int count;
+	struct {
+		long unsigned int value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+};
+
+struct drm_get_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_set_client_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_vma_offset_file {
+	struct rb_node vm_rb;
+	struct drm_file *vm_tag;
+	long unsigned int vm_count;
+};
+
+struct drm_mode_obj_get_properties {
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_props;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+enum drm_vblank_seq_type {
+	_DRM_VBLANK_ABSOLUTE = 0,
+	_DRM_VBLANK_RELATIVE = 1,
+	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
+	_DRM_VBLANK_EVENT = 67108864,
+	_DRM_VBLANK_FLIP = 134217728,
+	_DRM_VBLANK_NEXTONMISS = 268435456,
+	_DRM_VBLANK_SECONDARY = 536870912,
+	_DRM_VBLANK_SIGNAL = 1073741824,
+};
+
+struct drm_wait_vblank_request {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long unsigned int signal;
+};
+
+struct drm_wait_vblank_reply {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long int tval_sec;
+	long int tval_usec;
+};
+
+union drm_wait_vblank {
+	struct drm_wait_vblank_request request;
+	struct drm_wait_vblank_reply reply;
+};
+
+struct drm_modeset_ctl {
+	__u32 crtc;
+	__u32 cmd;
+};
+
+struct drm_crtc_get_sequence {
+	__u32 crtc_id;
+	__u32 active;
+	__u64 sequence;
+	__s64 sequence_ns;
+};
+
+struct drm_crtc_queue_sequence {
+	__u32 crtc_id;
+	__u32 flags;
+	__u64 sequence;
+	__u64 user_data;
+};
+
+typedef bool (*drm_vblank_get_scanout_position_func)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+
+typedef int drm_ioctl_compat_t(struct file *, unsigned int, long unsigned int);
+
+struct drm_version_32 {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	u32 name_len;
+	u32 name;
+	u32 date_len;
+	u32 date;
+	u32 desc_len;
+	u32 desc;
+};
+
+typedef struct drm_version_32 drm_version32_t;
+
+struct drm_unique32 {
+	u32 unique_len;
+	u32 unique;
+};
+
+typedef struct drm_unique32 drm_unique32_t;
+
+struct drm_client32 {
+	int idx;
+	int auth;
+	u32 pid;
+	u32 uid;
+	u32 magic;
+	u32 iocs;
+};
+
+typedef struct drm_client32 drm_client32_t;
+
+struct drm_stats32 {
+	u32 count;
+	struct {
+		u32 value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+typedef struct drm_stats32 drm_stats32_t;
+
+struct drm_wait_vblank_request32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	u32 signal;
+};
+
+struct drm_wait_vblank_reply32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	s32 tval_sec;
+	s32 tval_usec;
+};
+
+union drm_wait_vblank32 {
+	struct drm_wait_vblank_request32 request;
+	struct drm_wait_vblank_reply32 reply;
+};
+
+typedef union drm_wait_vblank32 drm_wait_vblank32_t;
+
+struct drm_dmi_panel_orientation_data {
+	int width;
+	int height;
+	const char * const *bios_dates;
+	int orientation;
+};
+
+struct drm_gem_shmem_object {
+	struct drm_gem_object base;
+	struct mutex pages_lock;
+	struct page **pages;
+	unsigned int pages_use_count;
+	int madv;
+	struct list_head madv_list;
+	unsigned int pages_mark_dirty_on_put: 1;
+	unsigned int pages_mark_accessed_on_put: 1;
+	struct sg_table *sgt;
+	struct mutex vmap_lock;
+	void *vaddr;
+	unsigned int vmap_use_count;
+	bool map_wc;
+};
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct probe {
+	struct probe *next;
+	dev_t dev;
+	long unsigned int range;
+	struct module *owner;
+	kobj_probe_t *get;
+	int (*lock)(dev_t, void *);
+	void *data;
+};
+
+struct kobj_map {
+	struct probe *probes[255];
+	struct mutex *lock;
+};
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+struct regmap_mmio_context {
+	void *regs;
+	unsigned int val_bytes;
+	bool relaxed_mmio;
+	bool attached_clk;
+	struct clk *clk;
+	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
+	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
+};
+
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct mfd_of_node_entry {
+	struct list_head list;
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct match_ids_walk_data {
+	struct acpi_device_id *ids;
+	struct acpi_device *adev;
+};
+
+enum as3722_irq {
+	AS3722_IRQ_LID = 0,
+	AS3722_IRQ_ACOK = 1,
+	AS3722_IRQ_ENABLE1 = 2,
+	AS3722_IRQ_OCCUR_ALARM_SD0 = 3,
+	AS3722_IRQ_ONKEY_LONG_PRESS = 4,
+	AS3722_IRQ_ONKEY = 5,
+	AS3722_IRQ_OVTMP = 6,
+	AS3722_IRQ_LOWBAT = 7,
+	AS3722_IRQ_SD0_LV = 8,
+	AS3722_IRQ_SD1_LV = 9,
+	AS3722_IRQ_SD2_LV = 10,
+	AS3722_IRQ_PWM1_OV_PROT = 11,
+	AS3722_IRQ_PWM2_OV_PROT = 12,
+	AS3722_IRQ_ENABLE2 = 13,
+	AS3722_IRQ_SD6_LV = 14,
+	AS3722_IRQ_RTC_REP = 15,
+	AS3722_IRQ_RTC_ALARM = 16,
+	AS3722_IRQ_GPIO1 = 17,
+	AS3722_IRQ_GPIO2 = 18,
+	AS3722_IRQ_GPIO3 = 19,
+	AS3722_IRQ_GPIO4 = 20,
+	AS3722_IRQ_GPIO5 = 21,
+	AS3722_IRQ_WATCHDOG = 22,
+	AS3722_IRQ_ENABLE3 = 23,
+	AS3722_IRQ_TEMP_SD0_SHUTDOWN = 24,
+	AS3722_IRQ_TEMP_SD1_SHUTDOWN = 25,
+	AS3722_IRQ_TEMP_SD2_SHUTDOWN = 26,
+	AS3722_IRQ_TEMP_SD0_ALARM = 27,
+	AS3722_IRQ_TEMP_SD1_ALARM = 28,
+	AS3722_IRQ_TEMP_SD6_ALARM = 29,
+	AS3722_IRQ_OCCUR_ALARM_SD6 = 30,
+	AS3722_IRQ_ADC = 31,
+	AS3722_IRQ_MAX = 32,
+};
+
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+};
+
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+struct cxl_endpoint_dvsec_info {
+	bool mem_enabled;
+	int ranges;
+	struct range dvsec_range[2];
+};
+
+struct cxl_walk_context {
+	struct pci_bus *bus;
+	struct cxl_port *port;
+	int type;
+	int error;
+	int count;
+};
+
+struct cdat_doe_task {
+	u32 request_pl;
+	u32 response_pl[32];
+	struct completion c;
+	struct pci_doe_task task;
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void *reserved[1];
+		void *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct compat_cdrom_generic_command {
+	unsigned char cmd[12];
+	compat_caddr_t buffer;
+	compat_uint_t buflen;
+	compat_int_t stat;
+	compat_caddr_t sense;
+	unsigned char data_direction;
+	unsigned char pad[3];
+	compat_int_t quiet;
+	compat_int_t timeout;
+	compat_caddr_t unused;
+};
+
+enum scsi_host_guard_type {
+	SHOST_DIX_GUARD_CRC = 1,
+	SHOST_DIX_GUARD_IP = 2,
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+	struct ata_device *dev;
+	u16 *id;
+	struct scsi_cmnd *cmd;
+};
+
+enum xgene_ahci_version {
+	XGENE_AHCI_V1 = 1,
+	XGENE_AHCI_V2 = 2,
+};
+
+struct xgene_ahci_context {
+	struct ahci_host_priv *hpriv;
+	struct device *dev;
+	u8 last_cmd[2];
+	u32 class[2];
+	void *csr_core;
+	void *csr_diag;
+	void *csr_axi;
+	void *csr_mux;
+};
+
+struct spmi_driver {
+	struct device_driver driver;
+	int (*probe)(struct spmi_device *);
+	void (*remove)(struct spmi_device *);
+	void (*shutdown)(struct spmi_device *);
+};
+
+struct trace_event_raw_spmi_write_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_write_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_cmd {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_spmi_write_begin {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_write_end {};
+
+struct trace_event_data_offsets_spmi_read_begin {};
+
+struct trace_event_data_offsets_spmi_read_end {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_cmd {};
+
+typedef void (*btf_trace_spmi_write_begin)(void *, u8, u8, u16, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_write_end)(void *, u8, u8, u16, int);
+
+typedef void (*btf_trace_spmi_read_begin)(void *, u8, u8, u16);
+
+typedef void (*btf_trace_spmi_read_end)(void *, u8, u8, u16, int, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_cmd)(void *, u8, u8, int);
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct mii_timestamping_ctrl {
+	struct mii_timestamper * (*probe_channel)(struct device *, unsigned int);
+	void (*release_channel)(struct device *, struct mii_timestamper *);
+};
+
+struct mii_timestamping_desc {
+	struct list_head list;
+	struct mii_timestamping_ctrl *ctrl;
+	struct device *device;
+};
+
+enum wwan_port_type {
+	WWAN_PORT_AT = 0,
+	WWAN_PORT_MBIM = 1,
+	WWAN_PORT_QMI = 2,
+	WWAN_PORT_QCDM = 3,
+	WWAN_PORT_FIREHOSE = 4,
+	__WWAN_PORT_MAX = 5,
+	WWAN_PORT_MAX = 4,
+	WWAN_PORT_UNKNOWN = 5,
+};
+
+struct wwan_port;
+
+struct wwan_port_ops {
+	int (*start)(struct wwan_port *);
+	void (*stop)(struct wwan_port *);
+	int (*tx)(struct wwan_port *, struct sk_buff *);
+	int (*tx_blocking)(struct wwan_port *, struct sk_buff *);
+	__poll_t (*tx_poll)(struct wwan_port *, struct file *, poll_table *);
+};
+
+struct wwan_port {
+	enum wwan_port_type type;
+	unsigned int start_count;
+	long unsigned int flags;
+	const struct wwan_port_ops *ops;
+	struct mutex ops_lock;
+	struct device dev;
+	struct sk_buff_head rxq;
+	wait_queue_head_t waitqueue;
+	struct mutex data_lock;
+	union {
+		struct {
+			struct ktermios termios;
+			int mdmbits;
+		} at_data;
+	};
+};
+
+struct wwan_netdev_priv {
+	u32 link_id;
+	int: 32;
+	u8 drv_priv[0];
+};
+
+struct wwan_ops {
+	unsigned int priv_size;
+	void (*setup)(struct net_device *);
+	int (*newlink)(void *, struct net_device *, u32, struct netlink_ext_ack *);
+	void (*dellink)(void *, struct net_device *, struct list_head *);
+};
+
+enum {
+	IFLA_WWAN_UNSPEC = 0,
+	IFLA_WWAN_LINK_ID = 1,
+	__IFLA_WWAN_MAX = 2,
+};
+
+struct wwan_device {
+	unsigned int id;
+	struct device dev;
+	atomic_t port_id;
+	const struct wwan_ops *ops;
+	void *ops_ctxt;
+	struct dentry *debugfs_dir;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void *data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void *context;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct usbdevfs_ctrltransfer32 {
+	u8 bRequestType;
+	u8 bRequest;
+	u16 wValue;
+	u16 wIndex;
+	u16 wLength;
+	u32 timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer32 {
+	compat_uint_t ep;
+	compat_uint_t len;
+	compat_uint_t timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_disconnectsignal32 {
+	compat_int_t signr;
+	compat_caddr_t context;
+};
+
+struct usbdevfs_urb32 {
+	unsigned char type;
+	unsigned char endpoint;
+	compat_int_t status;
+	compat_uint_t flags;
+	compat_caddr_t buffer;
+	compat_int_t buffer_length;
+	compat_int_t actual_length;
+	compat_int_t start_frame;
+	compat_int_t number_of_packets;
+	compat_int_t error_count;
+	compat_uint_t signr;
+	compat_caddr_t usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl32 {
+	s32 ifno;
+	s32 ioctl_code;
+	compat_caddr_t data;
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	long unsigned int ifclaimed;
+	u32 disabled_bulk_eps;
+	long unsigned int interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	long unsigned int vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void *userbuffer;
+	void *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE = 1,
+};
+
+struct snap {
+	int slen;
+	char str[80];
+};
+
+struct ehci_stats {
+	long unsigned int normal;
+	long unsigned int error;
+	long unsigned int iaa;
+	long unsigned int lost_iaa;
+	long unsigned int complete;
+	long unsigned int unlink;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	long unsigned int reset_done[15];
+	long unsigned int bus_suspended;
+	long unsigned int companion_ports;
+	long unsigned int owned_ports;
+	long unsigned int port_c_suspend;
+	long unsigned int suspended_ports;
+	long unsigned int resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	long unsigned int next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	struct ehci_stats stats;
+	struct dentry *debug_dir;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	long unsigned int priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	int slot_id;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_doorbell {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct usbcons_info {
+	int magic;
+	int break_flag;
+	struct usb_serial_port *port;
+};
+
+struct ti_k3_rtc_soc_data {
+	const bool unlock_irq_erratum;
+};
+
+enum ti_k3_rtc_fields {
+	K3RTC_KICK0 = 0,
+	K3RTC_KICK1 = 1,
+	K3RTC_S_CNT_LSW = 2,
+	K3RTC_S_CNT_MSW = 3,
+	K3RTC_O32K_OSC_DEP_EN = 4,
+	K3RTC_UNLOCK = 5,
+	K3RTC_CNT_FMODE = 6,
+	K3RTC_PEND = 7,
+	K3RTC_RELOAD_FROM_BBD = 8,
+	K3RTC_COMP = 9,
+	K3RTC_ALM_S_CNT_LSW = 10,
+	K3RTC_ALM_S_CNT_MSW = 11,
+	K3RTC_IRQ_STATUS_RAW = 12,
+	K3RTC_IRQ_STATUS = 13,
+	K3RTC_IRQ_ENABLE_SET = 14,
+	K3RTC_IRQ_ENABLE_CLR = 15,
+	K3RTC_IRQ_STATUS_ALT = 16,
+	K3RTC_IRQ_ENABLE_CLR_ALT = 17,
+	K3_RTC_MAX_FIELDS = 18,
+};
+
+struct regmap_field;
+
+struct ti_k3_rtc {
+	unsigned int irq;
+	u32 sync_timeout_us;
+	long unsigned int rate_32k;
+	struct rtc_device *rtc_dev;
+	struct regmap *regmap;
+	struct regmap_field *r_fields[18];
+	const struct ti_k3_rtc_soc_data *soc;
+};
+
+struct i2c_dw_semaphore_callbacks {
+	int (*probe)(struct dw_i2c_dev *);
+	void (*remove)(struct dw_i2c_dev *);
+};
+
+struct ptp_clock_caps {
+	int max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int pps;
+	int n_pins;
+	int cross_timestamping;
+	int adjust_phase;
+	int rsv[12];
+};
+
+struct ptp_sys_offset {
+	unsigned int n_samples;
+	unsigned int rsv[3];
+	struct ptp_clock_time ts[51];
+};
+
+struct ptp_sys_offset_extended {
+	unsigned int n_samples;
+	unsigned int rsv[3];
+	struct ptp_clock_time ts[75];
+};
+
+struct ptp_sys_offset_precise {
+	struct ptp_clock_time device;
+	struct ptp_clock_time sys_realtime;
+	struct ptp_clock_time sys_monoraw;
+	unsigned int rsv[4];
+};
+
+struct power_supply_hwmon {
+	struct power_supply *psy;
+	long unsigned int *props;
+};
+
+struct hwmon_type_attr_list {
+	const u32 *attrs;
+	size_t n_attrs;
+};
+
+struct thermal_hwmon_device {
+	char type[20];
+	struct device *device;
+	int count;
+	struct list_head tz_list;
+	struct list_head node;
+};
+
+struct thermal_hwmon_attr {
+	struct device_attribute attr;
+	char name[16];
+};
+
+struct thermal_hwmon_temp {
+	struct list_head hwmon_node;
+	struct thermal_zone_device *tz;
+	struct thermal_hwmon_attr temp_input;
+	struct thermal_hwmon_attr temp_crit;
+};
+
+struct mdp_device_descriptor_s {
+	__u32 number;
+	__u32 major;
+	__u32 minor;
+	__u32 raid_disk;
+	__u32 state;
+	__u32 reserved[27];
+};
+
+typedef struct mdp_device_descriptor_s mdp_disk_t;
+
+struct mdp_superblock_s {
+	__u32 md_magic;
+	__u32 major_version;
+	__u32 minor_version;
+	__u32 patch_version;
+	__u32 gvalid_words;
+	__u32 set_uuid0;
+	__u32 ctime;
+	__u32 level;
+	__u32 size;
+	__u32 nr_disks;
+	__u32 raid_disks;
+	__u32 md_minor;
+	__u32 not_persistent;
+	__u32 set_uuid1;
+	__u32 set_uuid2;
+	__u32 set_uuid3;
+	__u32 gstate_creserved[16];
+	__u32 utime;
+	__u32 state;
+	__u32 active_disks;
+	__u32 working_disks;
+	__u32 failed_disks;
+	__u32 spare_disks;
+	__u32 sb_csum;
+	__u32 events_lo;
+	__u32 events_hi;
+	__u32 cp_events_lo;
+	__u32 cp_events_hi;
+	__u32 recovery_cp;
+	__u64 reshape_position;
+	__u32 new_level;
+	__u32 delta_disks;
+	__u32 new_layout;
+	__u32 new_chunk;
+	__u32 gstate_sreserved[14];
+	__u32 layout;
+	__u32 chunk_size;
+	__u32 root_pv;
+	__u32 root_block;
+	__u32 pstate_reserved[60];
+	mdp_disk_t disks[27];
+	__u32 reserved[0];
+	mdp_disk_t this_disk;
+};
+
+typedef struct mdp_superblock_s mdp_super_t;
+
+struct mdp_superblock_1 {
+	__le32 magic;
+	__le32 major_version;
+	__le32 feature_map;
+	__le32 pad0;
+	__u8 set_uuid[16];
+	char set_name[32];
+	__le64 ctime;
+	__le32 level;
+	__le32 layout;
+	__le64 size;
+	__le32 chunksize;
+	__le32 raid_disks;
+	union {
+		__le32 bitmap_offset;
+		struct {
+			__le16 offset;
+			__le16 size;
+		} ppl;
+	};
+	__le32 new_level;
+	__le64 reshape_position;
+	__le32 delta_disks;
+	__le32 new_layout;
+	__le32 new_chunk;
+	__le32 new_offset;
+	__le64 data_offset;
+	__le64 data_size;
+	__le64 super_offset;
+	union {
+		__le64 recovery_offset;
+		__le64 journal_tail;
+	};
+	__le32 dev_number;
+	__le32 cnt_corrected_read;
+	__u8 device_uuid[16];
+	__u8 devflags;
+	__u8 bblog_shift;
+	__le16 bblog_size;
+	__le32 bblog_offset;
+	__le64 utime;
+	__le64 events;
+	__le64 resync_offset;
+	__le32 sb_csum;
+	__le32 max_dev;
+	__u8 pad3[32];
+	__le16 dev_roles[0];
+};
+
+struct mdu_version_s {
+	int major;
+	int minor;
+	int patchlevel;
+};
+
+typedef struct mdu_version_s mdu_version_t;
+
+typedef struct mdu_array_info_s mdu_array_info_t;
+
+typedef struct mdu_disk_info_s mdu_disk_info_t;
+
+struct mdu_bitmap_file_s {
+	char pathname[4096];
+};
+
+typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
+
+enum {
+	MD_RESYNC_NONE = 0,
+	MD_RESYNC_YIELDED = 1,
+	MD_RESYNC_DELAYED = 2,
+	MD_RESYNC_ACTIVE = 3,
+};
+
+struct md_io_acct {
+	struct bio *orig_bio;
+	long unsigned int start_time;
+	struct bio bio_clone;
+};
+
+struct super_type {
+	char *name;
+	struct module *owner;
+	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
+	int (*validate_super)(struct mddev *, struct md_rdev *);
+	void (*sync_super)(struct mddev *, struct md_rdev *);
+	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
+	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
+};
+
+struct rdev_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct md_rdev *, char *);
+	ssize_t (*store)(struct md_rdev *, const char *, size_t);
+};
+
+enum array_state {
+	clear = 0,
+	inactive = 1,
+	suspended = 2,
+	readonly = 3,
+	read_auto = 4,
+	clean = 5,
+	active = 6,
+	write_pending = 7,
+	active_idle = 8,
+	broken = 9,
+	bad_word = 10,
+};
+
+struct detected_devices_node {
+	struct list_head list;
+	dev_t dev;
+};
+
+struct transient_c {
+	sector_t next_free;
+};
+
+struct mmc_pwrseq_simple {
+	struct mmc_pwrseq pwrseq;
+	bool clk_enabled;
+	u32 post_power_on_delay_ms;
+	u32 power_off_delay_us;
+	struct clk *ext_clk;
+	struct gpio_descs *reset_gpios;
+};
+
+enum rpi_firmware_property_status {
+	RPI_FIRMWARE_STATUS_REQUEST = 0,
+	RPI_FIRMWARE_STATUS_SUCCESS = 2147483648,
+	RPI_FIRMWARE_STATUS_ERROR = 2147483649,
+};
+
+struct rpi_firmware_property_tag_header {
+	u32 tag;
+	u32 buf_size;
+	u32 req_resp_size;
+};
+
+struct rpi_firmware {
+	struct mbox_client cl;
+	struct mbox_chan *chan;
+	struct completion c;
+	u32 enabled;
+	struct kref consumers;
+};
+
+struct mrq_ping_request {
+	uint32_t challenge;
+};
+
+struct mrq_ping_response {
+	uint32_t reply;
+};
+
+struct mrq_query_tag_request {
+	uint32_t addr;
+};
+
+struct mrq_query_fw_tag_response {
+	uint8_t tag[32];
+};
+
+struct mrq_query_abi_request {
+	uint32_t mrq;
+};
+
+struct mrq_query_abi_response {
+	int32_t status;
+};
+
+typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int, struct tegra_bpmp_channel *, void *);
+
+struct tegra_bpmp_mrq {
+	struct list_head list;
+	unsigned int mrq;
+	tegra_bpmp_mrq_handler_t handler;
+	void *data;
+};
+
+struct meson_cipher_req_ctx {
+	u32 op_dir;
+	int flow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request fallback_req;
+};
+
+struct meson_cipher_tfm_ctx {
+	struct crypto_engine_ctx enginectx;
+	u32 *key;
+	u32 keylen;
+	u32 keymode;
+	struct meson_dev *mc;
+	struct crypto_skcipher *fallback_tfm;
+};
+
+struct tegra186_timer_soc {
+	unsigned int num_timers;
+	unsigned int num_wdts;
+};
+
+struct tegra186_timer;
+
+struct tegra186_tmr {
+	struct tegra186_timer *parent;
+	void *regs;
+	unsigned int index;
+	unsigned int hwirq;
+};
+
+struct tegra186_wdt;
+
+struct tegra186_timer {
+	const struct tegra186_timer_soc *soc;
+	struct device *dev;
+	void *regs;
+	struct tegra186_wdt *wdt;
+	struct clocksource usec;
+	struct clocksource tsc;
+	struct clocksource osc;
+};
+
+struct tegra186_wdt {
+	struct watchdog_device base;
+	void *regs;
+	unsigned int index;
+	bool locked;
+	struct tegra186_tmr *tmr;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct acpi_table_pcct {
+	struct acpi_table_header header;
+	u32 flags;
+	u64 reserved;
+};
+
+enum acpi_pcct_type {
+	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
+	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
+	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
+	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
+	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
+	ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,
+	ACPI_PCCT_TYPE_RESERVED = 6,
+};
+
+struct acpi_pcct_subspace {
+	struct acpi_subtable_header header;
+	u8 reserved[6];
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+} __attribute__((packed));
+
+struct acpi_pcct_hw_reduced {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved;
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+} __attribute__((packed));
+
+struct acpi_pcct_hw_reduced_type2 {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved;
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+	struct acpi_generic_address platform_ack_register;
+	u64 ack_preserve_mask;
+	u64 ack_write_mask;
+} __attribute__((packed));
+
+struct acpi_pcct_ext_pcc_master {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved1;
+	u64 base_address;
+	u32 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u32 min_turnaround_time;
+	struct acpi_generic_address platform_ack_register;
+	u64 ack_preserve_mask;
+	u64 ack_set_mask;
+	u64 reserved2;
+	struct acpi_generic_address cmd_complete_register;
+	u64 cmd_complete_mask;
+	struct acpi_generic_address cmd_update_register;
+	u64 cmd_update_preserve_mask;
+	u64 cmd_update_set_mask;
+	struct acpi_generic_address error_status_register;
+	u64 error_status_mask;
+} __attribute__((packed));
+
+struct pcc_chan_reg {
+	void *vaddr;
+	struct acpi_generic_address *gas;
+	u64 preserve_mask;
+	u64 set_mask;
+	u64 status_mask;
+};
+
+struct pcc_chan_info {
+	struct pcc_mbox_chan chan;
+	struct pcc_chan_reg db;
+	struct pcc_chan_reg plat_irq_ack;
+	struct pcc_chan_reg cmd_complete;
+	struct pcc_chan_reg cmd_update;
+	struct pcc_chan_reg error;
+	int plat_irq;
+};
+
+struct sun6i_msgbox {
+	struct mbox_controller controller;
+	struct clk *clk;
+	spinlock_t lock;
+	void *regs;
+};
+
+struct cfg_event_pkg {
+	struct tb_cfg_header header;
+	u32 port: 6;
+	u32 zero: 25;
+	bool unplug: 1;
+};
+
+struct tb_cm {
+	struct list_head tunnel_list;
+	struct list_head dp_resources;
+	bool hotplug_active;
+	struct delayed_work remove_work;
+};
+
+struct tb_hotplug_event {
+	struct work_struct work;
+	struct tb *tb;
+	u64 route;
+	u8 port;
+	bool unplug;
+};
+
+enum icm_pkg_code {
+	ICM_GET_TOPOLOGY = 1,
+	ICM_DRIVER_READY = 3,
+	ICM_APPROVE_DEVICE = 4,
+	ICM_CHALLENGE_DEVICE = 5,
+	ICM_ADD_DEVICE_KEY = 6,
+	ICM_GET_ROUTE = 10,
+	ICM_APPROVE_XDOMAIN = 16,
+	ICM_DISCONNECT_XDOMAIN = 17,
+	ICM_PREBOOT_ACL = 24,
+	ICM_USB4_SWITCH_OP = 32,
+};
+
+enum icm_event_code {
+	ICM_EVENT_DEVICE_CONNECTED = 3,
+	ICM_EVENT_DEVICE_DISCONNECTED = 4,
+	ICM_EVENT_XDOMAIN_CONNECTED = 6,
+	ICM_EVENT_XDOMAIN_DISCONNECTED = 7,
+	ICM_EVENT_RTD3_VETO = 10,
+};
+
+struct icm_pkg_header {
+	u8 code;
+	u8 flags;
+	u8 packet_id;
+	u8 total_packets;
+};
+
+struct icm_pkg_driver_ready {
+	struct icm_pkg_header hdr;
+};
+
+struct icm_fr_pkg_driver_ready_response {
+	struct icm_pkg_header hdr;
+	u8 romver;
+	u8 ramver;
+	u16 security_level;
+};
+
+struct icm_fr_pkg_get_topology {
+	struct icm_pkg_header hdr;
+};
+
+struct icm_fr_pkg_get_topology_response {
+	struct icm_pkg_header hdr;
+	u32 route_lo;
+	u32 route_hi;
+	u8 first_data;
+	u8 second_data;
+	u8 drom_i2c_address_index;
+	u8 switch_index;
+	u32 reserved[2];
+	u32 ports[16];
+	u32 port_hop_info[16];
+};
+
+struct icm_fr_event_device_connected {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 link_info;
+	u32 ep_name[55];
+};
+
+struct icm_fr_pkg_approve_device {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 reserved;
+};
+
+struct icm_fr_event_device_disconnected {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+};
+
+struct icm_fr_event_xdomain_connected {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	uuid_t remote_uuid;
+	uuid_t local_uuid;
+	u32 local_route_hi;
+	u32 local_route_lo;
+	u32 remote_route_hi;
+	u32 remote_route_lo;
+};
+
+struct icm_fr_event_xdomain_disconnected {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	uuid_t remote_uuid;
+};
+
+struct icm_fr_pkg_add_device_key {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 reserved;
+	u32 key[8];
+};
+
+struct icm_fr_pkg_add_device_key_response {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 reserved;
+};
+
+struct icm_fr_pkg_challenge_device {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 reserved;
+	u32 challenge[8];
+};
+
+struct icm_fr_pkg_challenge_device_response {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u8 connection_key;
+	u8 connection_id;
+	u16 reserved;
+	u32 challenge[8];
+	u32 response[8];
+};
+
+struct icm_fr_pkg_approve_xdomain {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	uuid_t remote_uuid;
+	u16 transmit_path;
+	u16 transmit_ring;
+	u16 receive_path;
+	u16 receive_ring;
+};
+
+struct icm_fr_pkg_approve_xdomain_response {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	uuid_t remote_uuid;
+	u16 transmit_path;
+	u16 transmit_ring;
+	u16 receive_path;
+	u16 receive_ring;
+};
+
+struct icm_ar_pkg_driver_ready_response {
+	struct icm_pkg_header hdr;
+	u8 romver;
+	u8 ramver;
+	u16 info;
+};
+
+struct icm_ar_pkg_get_route {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+};
+
+struct icm_ar_pkg_get_route_response {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	u32 route_hi;
+	u32 route_lo;
+};
+
+struct icm_ar_boot_acl_entry {
+	u32 uuid_lo;
+	u32 uuid_hi;
+};
+
+struct icm_ar_pkg_preboot_acl {
+	struct icm_pkg_header hdr;
+	struct icm_ar_boot_acl_entry acl[16];
+};
+
+struct icm_ar_pkg_preboot_acl_response {
+	struct icm_pkg_header hdr;
+	struct icm_ar_boot_acl_entry acl[16];
+};
+
+struct icm_tr_pkg_driver_ready_response {
+	struct icm_pkg_header hdr;
+	u16 reserved1;
+	u16 info;
+	u32 nvm_version;
+	u16 device_id;
+	u16 reserved2;
+};
+
+struct icm_tr_event_device_connected {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved;
+	u16 link_info;
+	u32 ep_name[55];
+};
+
+struct icm_tr_event_device_disconnected {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+};
+
+struct icm_tr_event_xdomain_connected {
+	struct icm_pkg_header hdr;
+	u16 reserved;
+	u16 link_info;
+	uuid_t remote_uuid;
+	uuid_t local_uuid;
+	u32 local_route_hi;
+	u32 local_route_lo;
+	u32 remote_route_hi;
+	u32 remote_route_lo;
+};
+
+struct icm_tr_event_xdomain_disconnected {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+	uuid_t remote_uuid;
+};
+
+struct icm_tr_pkg_approve_device {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved1[3];
+};
+
+struct icm_tr_pkg_add_device_key {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved[3];
+	u32 key[8];
+};
+
+struct icm_tr_pkg_challenge_device {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved[3];
+	u32 challenge[8];
+};
+
+struct icm_tr_pkg_approve_xdomain {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+	uuid_t remote_uuid;
+	u16 transmit_path;
+	u16 transmit_ring;
+	u16 receive_path;
+	u16 receive_ring;
+};
+
+struct icm_tr_pkg_disconnect_xdomain {
+	struct icm_pkg_header hdr;
+	u8 stage;
+	u8 reserved[3];
+	u32 route_hi;
+	u32 route_lo;
+	uuid_t remote_uuid;
+};
+
+struct icm_tr_pkg_challenge_device_response {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved[3];
+	u32 challenge[8];
+	u32 response[8];
+};
+
+struct icm_tr_pkg_add_device_key_response {
+	struct icm_pkg_header hdr;
+	uuid_t ep_uuid;
+	u32 route_hi;
+	u32 route_lo;
+	u8 connection_id;
+	u8 reserved[3];
+};
+
+struct icm_tr_pkg_approve_xdomain_response {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+	uuid_t remote_uuid;
+	u16 transmit_path;
+	u16 transmit_ring;
+	u16 receive_path;
+	u16 receive_ring;
+};
+
+struct icm_tr_pkg_disconnect_xdomain_response {
+	struct icm_pkg_header hdr;
+	u8 stage;
+	u8 reserved[3];
+	u32 route_hi;
+	u32 route_lo;
+	uuid_t remote_uuid;
+};
+
+struct icm_icl_event_rtd3_veto {
+	struct icm_pkg_header hdr;
+	u32 veto_reason;
+};
+
+struct icm_usb4_switch_op {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+	u32 metadata;
+	u16 opcode;
+	u16 data_len_valid;
+	u32 data[16];
+};
+
+struct icm_usb4_switch_op_response {
+	struct icm_pkg_header hdr;
+	u32 route_hi;
+	u32 route_lo;
+	u32 metadata;
+	u16 opcode;
+	u16 status;
+	u32 data[16];
+};
+
+struct icm;
+
+struct usb4_switch_nvm_auth {
+	struct icm_usb4_switch_op_response reply;
+	struct icm_usb4_switch_op request;
+	struct icm *icm;
+};
+
+struct icm {
+	struct mutex request_lock;
+	struct delayed_work rescan_work;
+	struct pci_dev *upstream_port;
+	int vnd_cap;
+	bool safe_mode;
+	size_t max_boot_acl;
+	bool rpm;
+	bool can_upgrade_nvm;
+	u8 proto_version;
+	struct usb4_switch_nvm_auth *last_nvm_auth;
+	bool veto;
+	bool (*is_supported)(struct tb *);
+	int (*cio_reset)(struct tb *);
+	int (*get_mode)(struct tb *);
+	int (*get_route)(struct tb *, u8, u8, u64 *);
+	void (*save_devices)(struct tb *);
+	int (*driver_ready)(struct tb *, enum tb_security_level *, u8 *, size_t *, bool *);
+	void (*set_uuid)(struct tb *);
+	void (*device_connected)(struct tb *, const struct icm_pkg_header *);
+	void (*device_disconnected)(struct tb *, const struct icm_pkg_header *);
+	void (*xdomain_connected)(struct tb *, const struct icm_pkg_header *);
+	void (*xdomain_disconnected)(struct tb *, const struct icm_pkg_header *);
+	void (*rtd3_veto)(struct tb *, const struct icm_pkg_header *);
+};
+
+struct icm_notification {
+	struct work_struct work;
+	struct icm_pkg_header *pkg;
+	struct tb *tb;
+};
+
+struct ep_name_entry {
+	u8 len;
+	u8 type;
+	u8 data[0];
+};
+
+struct intel_vss {
+	u16 vendor;
+	u16 model;
+	u8 mc;
+	u8 flags;
+	u16 pci_devid;
+	u32 nvm_version;
+};
+
+struct tb_retimer {
+	struct device dev;
+	struct tb *tb;
+	u8 index;
+	u32 vendor;
+	u32 device;
+	struct tb_port *port;
+	struct tb_nvm *nvm;
+	u32 auth_status;
+};
+
+struct tb_retimer_lookup {
+	const struct tb_port *port;
+	u8 index;
+};
+
+struct zynqmp_nvmem_data {
+	struct device *dev;
+	struct nvmem_device *nvmem;
+};
+
+struct bcm_voter;
+
+struct qcom_icc_provider {
+	struct icc_provider provider;
+	struct device *dev;
+	struct qcom_icc_bcm * const *bcms;
+	size_t num_bcms;
+	struct bcm_voter *voter;
+};
+
+struct gnet_estimator {
+	signed char interval;
+	unsigned char ewma_log;
+};
+
+struct net_rate_estimator {
+	struct gnet_stats_basic_sync *bstats;
+	spinlock_t *stats_lock;
+	bool running;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	u8 ewma_log;
+	u8 intvl_log;
+	seqcount_t seq;
+	u64 last_packets;
+	u64 last_bytes;
+	u64 avpps;
+	u64 avbps;
+	long unsigned int next_jiffies;
+	struct timer_list timer;
 	struct callback_head rcu;
 };
 
-enum {
-	IF_LINK_MODE_DEFAULT = 0,
-	IF_LINK_MODE_DORMANT = 1,
-	IF_LINK_MODE_TESTING = 2,
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-enum lw_bits {
-	LW_URGENT = 0,
-};
-
-struct seg6_pernet_data {
-	struct mutex lock;
-	struct in6_addr *tun_src;
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
 };
 
 enum {
@@ -98555,10 +137150,6 @@
 };
 
 enum {
-	BPF_F_INGRESS = 1,
-};
-
-enum {
 	BPF_F_TUNINFO_IPV6 = 1,
 };
 
@@ -98582,6 +137173,7 @@
 	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
 	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
 	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
 };
 
 enum {
@@ -98610,6 +137202,11 @@
 	BPF_LWT_ENCAP_IP = 2,
 };
 
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
 struct bpf_tunnel_key {
 	__u32 tunnel_id;
 	union {
@@ -98620,6 +137217,10 @@
 	__u8 tunnel_ttl;
 	__u16 tunnel_ext;
 	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
 };
 
 struct bpf_xfrm_state {
@@ -98684,36 +137285,6 @@
 };
 
 enum {
-	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
-	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
-	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
-	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
-	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
-	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
-	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
-};
-
-enum {
-	BPF_SOCK_OPS_VOID = 0,
-	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
-	BPF_SOCK_OPS_RWND_INIT = 2,
-	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
-	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
-	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
-	BPF_SOCK_OPS_NEEDS_ECN = 6,
-	BPF_SOCK_OPS_BASE_RTT = 7,
-	BPF_SOCK_OPS_RTO_CB = 8,
-	BPF_SOCK_OPS_RETRANS_CB = 9,
-	BPF_SOCK_OPS_STATE_CB = 10,
-	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
-	BPF_SOCK_OPS_RTT_CB = 12,
-	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
-	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
-};
-
-enum {
 	TCP_BPF_IW = 1001,
 	TCP_BPF_SNDCWND_CLAMP = 1002,
 	TCP_BPF_DELACK_MAX = 1003,
@@ -98749,7 +137320,10 @@
 	__u8 l4_protocol;
 	__be16 sport;
 	__be16 dport;
-	__u16 tot_len;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
 	__u32 ifindex;
 	union {
 		__u8 tos;
@@ -98778,354 +137352,26 @@
 	};
 };
 
-enum rt_scope_t {
-	RT_SCOPE_UNIVERSE = 0,
-	RT_SCOPE_SITE = 200,
-	RT_SCOPE_LINK = 253,
-	RT_SCOPE_HOST = 254,
-	RT_SCOPE_NOWHERE = 255,
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
 };
 
-enum rt_class_t {
-	RT_TABLE_UNSPEC = 0,
-	RT_TABLE_COMPAT = 252,
-	RT_TABLE_DEFAULT = 253,
-	RT_TABLE_MAIN = 254,
-	RT_TABLE_LOCAL = 255,
-	RT_TABLE_MAX = 4294967295,
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
 };
 
-struct nl_info {
-	struct nlmsghdr *nlh;
-	struct net *nl_net;
-	u32 portid;
-	u8 skip_notify: 1;
-	u8 skip_notify_kernel: 1;
+struct tls_msg {
+	u8 control;
 };
 
-typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
-
-struct inet_timewait_sock {
-	struct sock_common __tw_common;
-	__u32 tw_mark;
-	volatile unsigned char tw_substate;
-	unsigned char tw_rcv_wscale;
-	__be16 tw_sport;
-	unsigned int tw_kill: 1;
-	unsigned int tw_transparent: 1;
-	unsigned int tw_flowlabel: 20;
-	unsigned int tw_pad: 2;
-	unsigned int tw_tos: 8;
-	u32 tw_txhash;
-	u32 tw_priority;
-	struct timer_list tw_timer;
-	struct inet_bind_bucket *tw_tb;
-};
-
-struct tcp_timewait_sock {
-	struct inet_timewait_sock tw_sk;
-	u32 tw_rcv_wnd;
-	u32 tw_ts_offset;
-	u32 tw_ts_recent;
-	u32 tw_last_oow_ack_time;
-	int tw_ts_recent_stamp;
-	u32 tw_tx_delay;
-	struct tcp_md5sig_key *tw_md5_key;
-};
-
-struct udp_sock {
-	struct inet_sock inet;
-	int pending;
-	unsigned int corkflag;
-	__u8 encap_type;
-	unsigned char no_check6_tx: 1;
-	unsigned char no_check6_rx: 1;
-	unsigned char encap_enabled: 1;
-	unsigned char gro_enabled: 1;
-	__u16 len;
-	__u16 gso_size;
-	__u16 pcslen;
-	__u16 pcrlen;
-	__u8 pcflag;
-	__u8 unused[3];
-	int (*encap_rcv)(struct sock *, struct sk_buff *);
-	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
-	void (*encap_destroy)(struct sock *);
-	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sock *, struct sk_buff *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head reader_queue;
-	int forward_deficit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct udp6_sock {
-	struct udp_sock udp;
-	struct ipv6_pinfo inet6;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcp6_sock {
-	struct tcp_sock tcp;
-	struct ipv6_pinfo inet6;
-};
-
-struct fib6_result;
-
-struct fib6_config;
-
-struct ipv6_stub {
-	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
-	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
-	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
-	int (*ipv6_route_input)(struct sk_buff *);
-	struct fib6_table * (*fib6_get_table)(struct net *, u32);
-	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
-	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
-	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
-	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
-	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
-	void (*fib6_nh_release)(struct fib6_nh *);
-	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
-	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
-	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
-	void (*udpv6_encap_enable)();
-	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
-	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
-	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
-	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
-	struct neigh_table *nd_tbl;
-	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-};
-
-struct fib6_result {
-	struct fib6_nh *nh;
-	struct fib6_info *f6i;
-	u32 fib6_flags;
-	u8 fib6_type;
-	struct rt6_info *rt6;
-};
-
-struct fib6_config {
-	u32 fc_table;
-	u32 fc_metric;
-	int fc_dst_len;
-	int fc_src_len;
-	int fc_ifindex;
-	u32 fc_flags;
-	u32 fc_protocol;
-	u16 fc_type;
-	u16 fc_delete_all_nh: 1;
-	u16 fc_ignore_dev_down: 1;
-	u16 __unused: 14;
-	u32 fc_nh_id;
-	struct in6_addr fc_dst;
-	struct in6_addr fc_src;
-	struct in6_addr fc_prefsrc;
-	struct in6_addr fc_gateway;
-	long unsigned int fc_expires;
-	struct nlattr *fc_mx;
-	int fc_mx_len;
-	int fc_mp_len;
-	struct nlattr *fc_mp;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-	bool fc_is_fdb;
-};
-
-struct ipv6_bpf_stub {
-	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
-	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
-};
-
-struct fib_result {
-	__be32 prefix;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	u32 tclassid;
-	struct fib_nh_common *nhc;
-	struct fib_info *fi;
-	struct fib_table *table;
-	struct hlist_head *fa_head;
-};
-
-enum {
-	INET_ECN_NOT_ECT = 0,
-	INET_ECN_ECT_1 = 1,
-	INET_ECN_ECT_0 = 2,
-	INET_ECN_CE = 3,
-	INET_ECN_MASK = 3,
-};
-
-struct tcp_skb_cb {
-	__u32 seq;
-	__u32 end_seq;
-	union {
-		__u32 tcp_tw_isn;
-		struct {
-			u16 tcp_gso_segs;
-			u16 tcp_gso_size;
-		};
-	};
-	__u8 tcp_flags;
-	__u8 sacked;
-	__u8 ip_dsfield;
-	__u8 txstamp_ack: 1;
-	__u8 eor: 1;
-	__u8 has_rxtstamp: 1;
-	__u8 unused: 5;
-	__u32 ack_seq;
-	union {
-		struct {
-			__u32 in_flight: 30;
-			__u32 is_app_limited: 1;
-			__u32 unused: 1;
-			__u32 delivered;
-			u64 first_tx_mstamp;
-			u64 delivered_mstamp;
-		} tx;
-		union {
-			struct inet_skb_parm h4;
-			struct inet6_skb_parm h6;
-		} header;
-		struct {
-			__u32 flags;
-			struct sock *sk_redir;
-			void *data_end;
-		} bpf;
-	};
-};
-
-struct strp_stats {
-	long long unsigned int msgs;
-	long long unsigned int bytes;
-	unsigned int mem_fail;
-	unsigned int need_more_hdr;
-	unsigned int msg_too_big;
-	unsigned int msg_timeouts;
-	unsigned int bad_hdr_len;
-};
-
-struct strparser;
-
-struct strp_callbacks {
-	int (*parse_msg)(struct strparser *, struct sk_buff *);
-	void (*rcv_msg)(struct strparser *, struct sk_buff *);
-	int (*read_sock_done)(struct strparser *, int);
-	void (*abort_parser)(struct strparser *, int);
-	void (*lock)(struct strparser *);
-	void (*unlock)(struct strparser *);
-};
-
-struct strparser {
-	struct sock *sk;
-	u32 stopped: 1;
-	u32 paused: 1;
-	u32 aborted: 1;
-	u32 interrupted: 1;
-	u32 unrecov_intr: 1;
-	struct sk_buff **skb_nextp;
-	struct sk_buff *skb_head;
-	unsigned int need_bytes;
-	struct delayed_work msg_timer_work;
-	struct work_struct work;
-	struct strp_stats stats;
-	struct strp_callbacks cb;
-};
-
-struct strp_msg {
-	int full_len;
-	int offset;
-};
-
-struct xdp_umem {
-	void *addrs;
-	u64 size;
-	u32 headroom;
-	u32 chunk_size;
-	u32 chunks;
-	u32 npgs;
-	struct user_struct *user;
-	refcount_t users;
-	u8 flags;
-	bool zc;
-	struct page **pgs;
-	int id;
-	struct list_head xsk_dma_list;
-	struct work_struct work;
-};
-
-struct xdp_sock;
-
-struct xsk_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct xdp_sock *xsk_map[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xsk_queue;
-
-struct xdp_sock {
-	struct sock sk;
-	long: 64;
-	struct xsk_queue *rx;
-	struct net_device *dev;
-	struct xdp_umem *umem;
-	struct list_head flush_node;
-	struct xsk_buff_pool *pool;
-	u16 queue_id;
-	bool zc;
-	enum {
-		XSK_READY = 0,
-		XSK_BOUND = 1,
-		XSK_UNBOUND = 2,
-	} state;
-	long: 64;
-	struct xsk_queue *tx;
-	struct list_head tx_list;
-	spinlock_t rx_lock;
-	u64 rx_dropped;
-	u64 rx_queue_full;
-	struct list_head map_list;
-	spinlock_t map_list_lock;
-	struct mutex mutex;
-	struct xsk_queue *fq_tmp;
-	struct xsk_queue *cq_tmp;
-	long: 64;
-};
-
-struct ipv6_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u8 first_segment;
-	__u8 flags;
-	__u16 tag;
-	struct in6_addr segments[0];
+struct sk_skb_cb {
+	unsigned char data[20];
+	unsigned char pad[4];
+	struct _strp_msg strp;
+	struct tls_msg tls;
+	u64 temp_reg;
 };
 
 enum {
@@ -99145,7 +137391,8 @@
 	SEG6_LOCAL_ACTION_END_AS = 13,
 	SEG6_LOCAL_ACTION_END_AM = 14,
 	SEG6_LOCAL_ACTION_END_BPF = 15,
-	__SEG6_LOCAL_ACTION_MAX = 16,
+	SEG6_LOCAL_ACTION_END_DT46 = 16,
+	__SEG6_LOCAL_ACTION_MAX = 17,
 };
 
 struct seg6_bpf_srh_state {
@@ -99154,94 +137401,6 @@
 	bool valid;
 };
 
-struct tls_crypto_info {
-	__u16 version;
-	__u16 cipher_type;
-};
-
-struct tls12_crypto_info_aes_gcm_128 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[16];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls12_crypto_info_aes_gcm_256 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[32];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls_sw_context_rx {
-	struct crypto_aead *aead_recv;
-	struct crypto_wait async_wait;
-	struct strparser strp;
-	struct sk_buff_head rx_list;
-	void (*saved_data_ready)(struct sock *);
-	struct sk_buff *recv_pkt;
-	u8 control;
-	u8 async_capable: 1;
-	u8 decrypted: 1;
-	atomic_t decrypt_pending;
-	spinlock_t decrypt_compl_lock;
-	bool async_notify;
-};
-
-struct cipher_context {
-	char *iv;
-	char *rec_seq;
-};
-
-union tls_crypto_context {
-	struct tls_crypto_info info;
-	union {
-		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
-		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
-	};
-};
-
-struct tls_prot_info {
-	u16 version;
-	u16 cipher_type;
-	u16 prepend_size;
-	u16 tag_size;
-	u16 overhead_size;
-	u16 iv_size;
-	u16 salt_size;
-	u16 rec_seq_size;
-	u16 aad_size;
-	u16 tail_size;
-};
-
-struct tls_context {
-	struct tls_prot_info prot_info;
-	u8 tx_conf: 3;
-	u8 rx_conf: 3;
-	int (*push_pending_record)(struct sock *, int);
-	void (*sk_write_space)(struct sock *);
-	void *priv_ctx_tx;
-	void *priv_ctx_rx;
-	struct net_device *netdev;
-	struct cipher_context tx;
-	struct cipher_context rx;
-	struct scatterlist *partially_sent_record;
-	u16 partially_sent_offset;
-	bool in_tcp_sendpages;
-	bool pending_open_record_frags;
-	struct mutex tx_lock;
-	long unsigned int flags;
-	struct proto *sk_proto;
-	void (*sk_destruct)(struct sock *);
-	union tls_crypto_context crypto_send;
-	union tls_crypto_context crypto_recv;
-	struct list_head list;
-	refcount_t refcount;
-	struct callback_head rcu;
-};
-
 typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
 
 typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
@@ -99349,8 +137508,14 @@
 
 typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
 
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
 typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
 
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
 typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
 
 typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
@@ -99387,14 +137552,28 @@
 
 typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
 
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
 typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
 
 typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
 
 typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
 
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
 typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
 
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
 typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
 
 typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
@@ -99413,6 +137592,10 @@
 
 typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
 
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
 typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
 
 typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
@@ -99461,6 +137644,16 @@
 
 typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
 
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *, struct tcphdr *);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *);
+
 typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
 
 typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
@@ -99479,1467 +137672,19 @@
 
 typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
 
-struct bpf_dtab_netdev___2;
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
 
-enum {
-	INET_DIAG_REQ_NONE = 0,
-	INET_DIAG_REQ_BYTECODE = 1,
-	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
-	INET_DIAG_REQ_PROTOCOL = 3,
-	__INET_DIAG_REQ_MAX = 4,
-};
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
 
-struct sock_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-};
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
 
-struct sock_diag_handler {
-	__u8 family;
-	int (*dump)(struct sk_buff *, struct nlmsghdr *);
-	int (*get_info)(struct sk_buff *, struct sock *);
-	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
-};
+struct mptcp_sock;
 
-struct broadcast_sk {
-	struct sock *sk;
-	struct work_struct work;
-};
+struct bpf_cpu_map_entry;
 
-typedef int gifconf_func_t(struct net_device *, char *, int, int);
+struct bpf_dtab_netdev;
 
-struct hwtstamp_config {
-	int flags;
-	int tx_type;
-	int rx_filter;
-};
-
-enum hwtstamp_tx_types {
-	HWTSTAMP_TX_OFF = 0,
-	HWTSTAMP_TX_ON = 1,
-	HWTSTAMP_TX_ONESTEP_SYNC = 2,
-	HWTSTAMP_TX_ONESTEP_P2P = 3,
-	__HWTSTAMP_TX_CNT = 4,
-};
-
-enum hwtstamp_rx_filters {
-	HWTSTAMP_FILTER_NONE = 0,
-	HWTSTAMP_FILTER_ALL = 1,
-	HWTSTAMP_FILTER_SOME = 2,
-	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
-	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
-	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
-	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
-	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
-	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
-	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
-	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
-	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
-	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
-	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
-	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
-	HWTSTAMP_FILTER_NTP_ALL = 15,
-	__HWTSTAMP_FILTER_CNT = 16,
-};
-
-struct tso_t {
-	int next_frag_idx;
-	int size;
-	void *data;
-	u16 ip_id;
-	u8 tlen;
-	bool ipv6;
-	u32 tcp_seq;
-};
-
-struct fib_notifier_info {
-	int family;
-	struct netlink_ext_ack *extack;
-};
-
-enum fib_event_type {
-	FIB_EVENT_ENTRY_REPLACE = 0,
-	FIB_EVENT_ENTRY_APPEND = 1,
-	FIB_EVENT_ENTRY_ADD = 2,
-	FIB_EVENT_ENTRY_DEL = 3,
-	FIB_EVENT_RULE_ADD = 4,
-	FIB_EVENT_RULE_DEL = 5,
-	FIB_EVENT_NH_ADD = 6,
-	FIB_EVENT_NH_DEL = 7,
-	FIB_EVENT_VIF_ADD = 8,
-	FIB_EVENT_VIF_DEL = 9,
-};
-
-struct fib_notifier_net {
-	struct list_head fib_notifier_ops;
-	struct atomic_notifier_head fib_chain;
-};
-
-struct xdp_attachment_info {
-	struct bpf_prog *prog;
-	u32 flags;
-};
-
-struct xdp_buff_xsk;
-
-struct xsk_buff_pool {
-	struct device *dev;
-	struct net_device *netdev;
-	struct list_head xsk_tx_list;
-	spinlock_t xsk_tx_list_lock;
-	refcount_t users;
-	struct xdp_umem *umem;
-	struct work_struct work;
-	struct list_head free_list;
-	u32 heads_cnt;
-	u16 queue_id;
-	long: 16;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xsk_queue *fq;
-	struct xsk_queue *cq;
-	dma_addr_t *dma_pages;
-	struct xdp_buff_xsk *heads;
-	u64 chunk_mask;
-	u64 addrs_cnt;
-	u32 free_list_cnt;
-	u32 dma_pages_cnt;
-	u32 free_heads_cnt;
-	u32 headroom;
-	u32 chunk_size;
-	u32 frame_len;
-	u8 cached_need_wakeup;
-	bool uses_need_wakeup;
-	bool dma_need_sync;
-	bool unaligned;
-	void *addrs;
-	spinlock_t cq_lock;
-	struct xdp_buff_xsk *free_heads[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_buff_xsk {
-	struct xdp_buff xdp;
-	dma_addr_t dma;
-	dma_addr_t frame_dma;
-	struct xsk_buff_pool *pool;
-	bool unaligned;
-	u64 orig_addr;
-	struct list_head free_list_node;
-};
-
-struct flow_match_meta {
-	struct flow_dissector_key_meta *key;
-	struct flow_dissector_key_meta *mask;
-};
-
-struct flow_match_basic {
-	struct flow_dissector_key_basic *key;
-	struct flow_dissector_key_basic *mask;
-};
-
-struct flow_match_control {
-	struct flow_dissector_key_control *key;
-	struct flow_dissector_key_control *mask;
-};
-
-struct flow_match_eth_addrs {
-	struct flow_dissector_key_eth_addrs *key;
-	struct flow_dissector_key_eth_addrs *mask;
-};
-
-struct flow_match_vlan {
-	struct flow_dissector_key_vlan *key;
-	struct flow_dissector_key_vlan *mask;
-};
-
-struct flow_match_ipv4_addrs {
-	struct flow_dissector_key_ipv4_addrs *key;
-	struct flow_dissector_key_ipv4_addrs *mask;
-};
-
-struct flow_match_ipv6_addrs {
-	struct flow_dissector_key_ipv6_addrs *key;
-	struct flow_dissector_key_ipv6_addrs *mask;
-};
-
-struct flow_match_ip {
-	struct flow_dissector_key_ip *key;
-	struct flow_dissector_key_ip *mask;
-};
-
-struct flow_match_ports {
-	struct flow_dissector_key_ports *key;
-	struct flow_dissector_key_ports *mask;
-};
-
-struct flow_match_icmp {
-	struct flow_dissector_key_icmp *key;
-	struct flow_dissector_key_icmp *mask;
-};
-
-struct flow_match_tcp {
-	struct flow_dissector_key_tcp *key;
-	struct flow_dissector_key_tcp *mask;
-};
-
-struct flow_match_mpls {
-	struct flow_dissector_key_mpls *key;
-	struct flow_dissector_key_mpls *mask;
-};
-
-struct flow_match_enc_keyid {
-	struct flow_dissector_key_keyid *key;
-	struct flow_dissector_key_keyid *mask;
-};
-
-struct flow_match_enc_opts {
-	struct flow_dissector_key_enc_opts *key;
-	struct flow_dissector_key_enc_opts *mask;
-};
-
-struct flow_match_ct {
-	struct flow_dissector_key_ct *key;
-	struct flow_dissector_key_ct *mask;
-};
-
-enum flow_block_command {
-	FLOW_BLOCK_BIND = 0,
-	FLOW_BLOCK_UNBIND = 1,
-};
-
-enum flow_block_binder_type {
-	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
-	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
-	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
-};
-
-struct flow_block_offload {
-	enum flow_block_command command;
-	enum flow_block_binder_type binder_type;
-	bool block_shared;
-	bool unlocked_driver_cb;
-	struct net *net;
-	struct flow_block *block;
-	struct list_head cb_list;
-	struct list_head *driver_block_list;
-	struct netlink_ext_ack *extack;
-	struct Qdisc *sch;
-};
-
-struct flow_block_cb;
-
-struct flow_block_indr {
-	struct list_head list;
-	struct net_device *dev;
-	struct Qdisc *sch;
-	enum flow_block_binder_type binder_type;
-	void *data;
-	void *cb_priv;
-	void (*cleanup)(struct flow_block_cb *);
-};
-
-struct flow_block_cb {
-	struct list_head driver_list;
-	struct list_head list;
-	flow_setup_cb_t *cb;
-	void *cb_ident;
-	void *cb_priv;
-	void (*release)(void *);
-	struct flow_block_indr indr;
-	unsigned int refcnt;
-};
-
-typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
-
-struct flow_indr_dev {
-	struct list_head list;
-	flow_indr_block_bind_cb_t *cb;
-	void *cb_priv;
-	refcount_t refcnt;
-	struct callback_head rcu;
-};
-
-struct rx_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_rx_queue *, char *);
-	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
-};
-
-struct netdev_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_queue *, char *);
-	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
-};
-
-enum __sk_action {
-	__SK_DROP = 0,
-	__SK_PASS = 1,
-	__SK_REDIRECT = 2,
-	__SK_NONE = 3,
-};
-
-struct sk_psock_progs {
-	struct bpf_prog *msg_parser;
-	struct bpf_prog *skb_parser;
-	struct bpf_prog *skb_verdict;
-};
-
-enum sk_psock_state_bits {
-	SK_PSOCK_TX_ENABLED = 0,
-};
-
-struct sk_psock_link {
-	struct list_head list;
-	struct bpf_map *map;
-	void *link_raw;
-};
-
-struct sk_psock_parser {
-	struct strparser strp;
-	bool enabled;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct sk_psock_work_state {
-	struct sk_buff *skb;
-	u32 len;
-	u32 off;
-};
-
-struct sk_psock {
-	struct sock *sk;
-	struct sock *sk_redir;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 eval;
-	struct sk_msg *cork;
-	struct sk_psock_progs progs;
-	struct sk_psock_parser parser;
-	struct sk_buff_head ingress_skb;
-	struct list_head ingress_msg;
-	long unsigned int state;
-	struct list_head link;
-	spinlock_t link_lock;
-	refcount_t refcnt;
-	void (*saved_unhash)(struct sock *);
-	void (*saved_close)(struct sock *, long int);
-	void (*saved_write_space)(struct sock *);
-	struct proto *sk_proto;
-	struct sk_psock_work_state work_state;
-	struct work_struct work;
-	union {
-		struct callback_head rcu;
-		struct work_struct gc;
-	};
-};
-
-struct inet6_ifaddr {
-	struct in6_addr addr;
-	__u32 prefix_len;
-	__u32 rt_priority;
-	__u32 valid_lft;
-	__u32 prefered_lft;
-	refcount_t refcnt;
-	spinlock_t lock;
-	int state;
-	__u32 flags;
-	__u8 dad_probes;
-	__u8 stable_privacy_retry;
-	__u16 scope;
-	__u64 dad_nonce;
-	long unsigned int cstamp;
-	long unsigned int tstamp;
-	struct delayed_work dad_work;
-	struct inet6_dev *idev;
-	struct fib6_info *rt;
-	struct hlist_node addr_lst;
-	struct list_head if_list;
-	struct list_head tmp_list;
-	struct inet6_ifaddr *ifpub;
-	int regen_count;
-	bool tokenized;
-	struct callback_head rcu;
-	struct in6_addr peer_addr;
-};
-
-struct fib_rule_uid_range {
-	__u32 start;
-	__u32 end;
-};
-
-enum {
-	FRA_UNSPEC = 0,
-	FRA_DST = 1,
-	FRA_SRC = 2,
-	FRA_IIFNAME = 3,
-	FRA_GOTO = 4,
-	FRA_UNUSED2 = 5,
-	FRA_PRIORITY = 6,
-	FRA_UNUSED3 = 7,
-	FRA_UNUSED4 = 8,
-	FRA_UNUSED5 = 9,
-	FRA_FWMARK = 10,
-	FRA_FLOW = 11,
-	FRA_TUN_ID = 12,
-	FRA_SUPPRESS_IFGROUP = 13,
-	FRA_SUPPRESS_PREFIXLEN = 14,
-	FRA_TABLE = 15,
-	FRA_FWMASK = 16,
-	FRA_OIFNAME = 17,
-	FRA_PAD = 18,
-	FRA_L3MDEV = 19,
-	FRA_UID_RANGE = 20,
-	FRA_PROTOCOL = 21,
-	FRA_IP_PROTO = 22,
-	FRA_SPORT_RANGE = 23,
-	FRA_DPORT_RANGE = 24,
-	__FRA_MAX = 25,
-};
-
-enum {
-	FR_ACT_UNSPEC = 0,
-	FR_ACT_TO_TBL = 1,
-	FR_ACT_GOTO = 2,
-	FR_ACT_NOP = 3,
-	FR_ACT_RES3 = 4,
-	FR_ACT_RES4 = 5,
-	FR_ACT_BLACKHOLE = 6,
-	FR_ACT_UNREACHABLE = 7,
-	FR_ACT_PROHIBIT = 8,
-	__FR_ACT_MAX = 9,
-};
-
-struct fib_rule_notifier_info {
-	struct fib_notifier_info info;
-	struct fib_rule *rule;
-};
-
-struct trace_event_raw_kfree_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	void *location;
-	short unsigned int protocol;
-	char __data[0];
-};
-
-struct trace_event_raw_consume_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	char __data[0];
-};
-
-struct trace_event_raw_skb_copy_datagram_iovec {
-	struct trace_entry ent;
-	const void *skbaddr;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kfree_skb {};
-
-struct trace_event_data_offsets_consume_skb {};
-
-struct trace_event_data_offsets_skb_copy_datagram_iovec {};
-
-typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);
-
-typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
-
-struct trace_event_raw_net_dev_start_xmit {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	unsigned int len;
-	unsigned int data_len;
-	int network_offset;
-	bool transport_offset_valid;
-	int transport_offset;
-	u8 tx_flags;
-	u16 gso_size;
-	u16 gso_segs;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	int rc;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit_timeout {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_driver;
-	int queue_index;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_template {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_verbose_template {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int napi_id;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	u32 hash;
-	bool l4_hash;
-	unsigned int len;
-	unsigned int data_len;
-	unsigned int truesize;
-	bool mac_header_valid;
-	int mac_header;
-	unsigned char nr_frags;
-	u16 gso_size;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_exit_template {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_net_dev_start_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit_timeout {
-	u32 name;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_net_dev_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_verbose_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_exit_template {};
-
-typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
-
-typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
-
-typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
-
-typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
-
-typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_ni_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
-
-struct trace_event_raw_napi_poll {
-	struct trace_entry ent;
-	struct napi_struct *napi;
-	u32 __data_loc_dev_name;
-	int work;
-	int budget;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_napi_poll {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
-
-enum tcp_ca_state {
-	TCP_CA_Open = 0,
-	TCP_CA_Disorder = 1,
-	TCP_CA_CWR = 2,
-	TCP_CA_Recovery = 3,
-	TCP_CA_Loss = 4,
-};
-
-struct trace_event_raw_sock_rcvqueue_full {
-	struct trace_entry ent;
-	int rmem_alloc;
-	unsigned int truesize;
-	int sk_rcvbuf;
-	char __data[0];
-};
-
-struct trace_event_raw_sock_exceed_buf_limit {
-	struct trace_entry ent;
-	char name[32];
-	long int *sysctl_mem;
-	long int allocated;
-	int sysctl_rmem;
-	int rmem_alloc;
-	int sysctl_wmem;
-	int wmem_alloc;
-	int wmem_queued;
-	int kind;
-	char __data[0];
-};
-
-struct trace_event_raw_inet_sock_set_state {
-	struct trace_entry ent;
-	const void *skaddr;
-	int oldstate;
-	int newstate;
-	__u16 sport;
-	__u16 dport;
-	__u16 family;
-	__u16 protocol;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sock_rcvqueue_full {};
-
-struct trace_event_data_offsets_sock_exceed_buf_limit {};
-
-struct trace_event_data_offsets_inet_sock_set_state {};
-
-typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
-
-typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
-
-typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
-
-struct trace_event_raw_udp_fail_queue_rcv_skb {
-	struct trace_entry ent;
-	int rc;
-	__u16 lport;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
-
-typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
-
-struct trace_event_raw_tcp_event_sk_skb {
-	struct trace_entry ent;
-	const void *skbaddr;
-	const void *skaddr;
-	int state;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_event_sk {
-	struct trace_entry ent;
-	const void *skaddr;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_retransmit_synack {
-	struct trace_entry ent;
-	const void *skaddr;
-	const void *req;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_probe {
-	struct trace_entry ent;
-	__u8 saddr[28];
-	__u8 daddr[28];
-	__u16 sport;
-	__u16 dport;
-	__u32 mark;
-	__u16 data_len;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 snd_cwnd;
-	__u32 ssthresh;
-	__u32 snd_wnd;
-	__u32 srtt;
-	__u32 rcv_wnd;
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_tcp_event_sk_skb {};
-
-struct trace_event_data_offsets_tcp_event_sk {};
-
-struct trace_event_data_offsets_tcp_retransmit_synack {};
-
-struct trace_event_data_offsets_tcp_probe {};
-
-typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
-
-typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
-
-struct trace_event_raw_fib_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	u8 proto;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[4];
-	__u8 dst[4];
-	__u8 gw4[4];
-	__u8 gw6[16];
-	u16 sport;
-	u16 dport;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
-
-struct trace_event_raw_qdisc_dequeue {
-	struct trace_entry ent;
-	struct Qdisc *qdisc;
-	const struct netdev_queue *txq;
-	int packets;
-	void *skbaddr;
-	int ifindex;
-	u32 handle;
-	u32 parent;
-	long unsigned int txq_state;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_reset {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_destroy {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_create {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_qdisc_dequeue {};
-
-struct trace_event_data_offsets_qdisc_reset {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_destroy {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_create {
-	u32 dev;
-	u32 kind;
-};
-
-typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
-
-typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
-
-struct bridge_stp_xstats {
-	__u64 transition_blk;
-	__u64 transition_fwd;
-	__u64 rx_bpdu;
-	__u64 tx_bpdu;
-	__u64 rx_tcn;
-	__u64 tx_tcn;
-};
-
-struct br_mcast_stats {
-	__u64 igmp_v1queries[2];
-	__u64 igmp_v2queries[2];
-	__u64 igmp_v3queries[2];
-	__u64 igmp_leaves[2];
-	__u64 igmp_v1reports[2];
-	__u64 igmp_v2reports[2];
-	__u64 igmp_v3reports[2];
-	__u64 igmp_parse_errors;
-	__u64 mld_v1queries[2];
-	__u64 mld_v2queries[2];
-	__u64 mld_leaves[2];
-	__u64 mld_v1reports[2];
-	__u64 mld_v2reports[2];
-	__u64 mld_parse_errors;
-	__u64 mcast_bytes[2];
-	__u64 mcast_packets[2];
-};
-
-struct br_ip {
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} src;
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} dst;
-	__be16 proto;
-	__u16 vid;
-};
-
-struct bridge_id {
-	unsigned char prio[2];
-	unsigned char addr[6];
-};
-
-typedef struct bridge_id bridge_id;
-
-struct mac_addr {
-	unsigned char addr[6];
-};
-
-typedef struct mac_addr mac_addr;
-
-typedef __u16 port_id;
-
-struct bridge_mcast_own_query {
-	struct timer_list timer;
-	u32 startup_sent;
-};
-
-struct bridge_mcast_other_query {
-	struct timer_list timer;
-	long unsigned int delay_time;
-};
-
-struct net_bridge_port;
-
-struct bridge_mcast_querier {
-	struct br_ip addr;
-	struct net_bridge_port *port;
-};
-
-struct net_bridge;
-
-struct net_bridge_vlan_group;
-
-struct bridge_mcast_stats;
-
-struct net_bridge_port {
-	struct net_bridge *br;
-	struct net_device *dev;
-	struct list_head list;
-	long unsigned int flags;
-	struct net_bridge_vlan_group *vlgrp;
-	struct net_bridge_port *backup_port;
-	u8 priority;
-	u8 state;
-	u16 port_no;
-	unsigned char topology_change_ack;
-	unsigned char config_pending;
-	port_id port_id;
-	port_id designated_port;
-	bridge_id designated_root;
-	bridge_id designated_bridge;
-	u32 path_cost;
-	u32 designated_cost;
-	long unsigned int designated_age;
-	struct timer_list forward_delay_timer;
-	struct timer_list hold_timer;
-	struct timer_list message_age_timer;
-	struct kobject kobj;
-	struct callback_head rcu;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	unsigned char multicast_router;
-	struct bridge_mcast_stats *mcast_stats;
-	struct timer_list multicast_router_timer;
-	struct hlist_head mglist;
-	struct hlist_node rlist;
-	char sysfs_name[16];
-	struct netpoll *np;
-	int offload_fwd_mark;
-	u16 group_fwd_mask;
-	u16 backup_redirected_cnt;
-	struct bridge_stp_xstats stp_xstats;
-};
-
-struct bridge_mcast_stats {
-	struct br_mcast_stats mstats;
-	struct u64_stats_sync syncp;
-};
-
-struct net_bridge {
-	spinlock_t lock;
-	spinlock_t hash_lock;
-	struct list_head port_list;
-	struct net_device *dev;
-	struct pcpu_sw_netstats *stats;
-	long unsigned int options;
-	__be16 vlan_proto;
-	u16 default_pvid;
-	struct net_bridge_vlan_group *vlgrp;
-	struct rhashtable fdb_hash_tbl;
-	union {
-		struct rtable fake_rtable;
-		struct rt6_info fake_rt6_info;
-	};
-	u16 group_fwd_mask;
-	u16 group_fwd_mask_required;
-	bridge_id designated_root;
-	bridge_id bridge_id;
-	unsigned char topology_change;
-	unsigned char topology_change_detected;
-	u16 root_port;
-	long unsigned int max_age;
-	long unsigned int hello_time;
-	long unsigned int forward_delay;
-	long unsigned int ageing_time;
-	long unsigned int bridge_max_age;
-	long unsigned int bridge_hello_time;
-	long unsigned int bridge_forward_delay;
-	long unsigned int bridge_ageing_time;
-	u32 root_path_cost;
-	u8 group_addr[6];
-	enum {
-		BR_NO_STP = 0,
-		BR_KERNEL_STP = 1,
-		BR_USER_STP = 2,
-	} stp_enabled;
-	u32 hash_max;
-	u32 multicast_last_member_count;
-	u32 multicast_startup_query_count;
-	u8 multicast_igmp_version;
-	u8 multicast_router;
-	u8 multicast_mld_version;
-	spinlock_t multicast_lock;
-	long unsigned int multicast_last_member_interval;
-	long unsigned int multicast_membership_interval;
-	long unsigned int multicast_querier_interval;
-	long unsigned int multicast_query_interval;
-	long unsigned int multicast_query_response_interval;
-	long unsigned int multicast_startup_query_interval;
-	struct rhashtable mdb_hash_tbl;
-	struct rhashtable sg_port_tbl;
-	struct hlist_head mcast_gc_list;
-	struct hlist_head mdb_list;
-	struct hlist_head router_list;
-	struct timer_list multicast_router_timer;
-	struct bridge_mcast_other_query ip4_other_query;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_querier ip4_querier;
-	struct bridge_mcast_stats *mcast_stats;
-	struct bridge_mcast_other_query ip6_other_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	struct bridge_mcast_querier ip6_querier;
-	struct work_struct mcast_gc_work;
-	struct timer_list hello_timer;
-	struct timer_list tcn_timer;
-	struct timer_list topology_change_timer;
-	struct delayed_work gc_work;
-	struct kobject *ifobj;
-	u32 auto_cnt;
-	int offload_fwd_mark;
-	struct hlist_head fdb_list;
-	struct list_head mrp_list;
-};
-
-struct net_bridge_vlan_group {
-	struct rhashtable vlan_hash;
-	struct rhashtable tunnel_hash;
-	struct list_head vlan_list;
-	u16 num_vlans;
-	u16 pvid;
-	u8 pvid_state;
-};
-
-struct net_bridge_fdb_key {
-	mac_addr addr;
-	u16 vlan_id;
-};
-
-struct net_bridge_fdb_entry {
-	struct rhash_head rhnode;
-	struct net_bridge_port *dst;
-	struct net_bridge_fdb_key key;
-	struct hlist_node fdb_node;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long unsigned int updated;
-	long unsigned int used;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct trace_event_raw_br_fdb_add {
-	struct trace_entry ent;
-	u8 ndm_flags;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	u16 nlh_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_external_learn_add {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_fdb_delete {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_update {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_br_fdb_add {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_external_learn_add {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_fdb_delete {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_update {
-	u32 br_dev;
-	u32 dev;
-};
-
-typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
-
-typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
-
-typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
-
-typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
-
-struct trace_event_raw_page_pool_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	s32 inflight;
-	u32 hold;
-	u32 release;
-	u64 cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 release;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_hold {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 hold;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_update_nid {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	int pool_nid;
-	int new_nid;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_page_pool_release {};
-
-struct trace_event_data_offsets_page_pool_state_release {};
-
-struct trace_event_data_offsets_page_pool_state_hold {};
-
-struct trace_event_data_offsets_page_pool_update_nid {};
-
-typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
-
-typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
-
-struct trace_event_raw_neigh_create {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	int entries;
-	u8 created;
-	u8 gc_exempt;
-	u8 primary_key4[4];
-	u8 primary_key6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_neigh_update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u8 new_lladdr[32];
-	u8 new_state;
-	u32 update_flags;
-	u32 pid;
-	char __data[0];
-};
-
-struct trace_event_raw_neigh__update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u32 err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_neigh_create {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh_update {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh__update {
-	u32 dev;
-};
-
-typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
-
-typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
-
-typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
-
-struct clock_identity {
-	u8 id[8];
-};
-
-struct port_identity {
-	struct clock_identity clock_identity;
-	__be16 port_number;
-};
-
-struct ptp_header {
-	u8 tsmt;
-	u8 ver;
-	__be16 message_length;
-	u8 domain_number;
-	u8 reserved1;
-	u8 flag_field[2];
-	__be64 correction;
-	__be32 reserved2;
-	struct port_identity source_port_identity;
-	__be16 sequence_id;
-	u8 control;
-	u8 log_message_interval;
-} __attribute__((packed));
-
-struct update_classid_context {
-	u32 classid;
-	unsigned int batch;
-};
-
-enum lwtunnel_encap_types {
-	LWTUNNEL_ENCAP_NONE = 0,
-	LWTUNNEL_ENCAP_MPLS = 1,
-	LWTUNNEL_ENCAP_IP = 2,
-	LWTUNNEL_ENCAP_ILA = 3,
-	LWTUNNEL_ENCAP_IP6 = 4,
-	LWTUNNEL_ENCAP_SEG6 = 5,
-	LWTUNNEL_ENCAP_BPF = 6,
-	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
-	LWTUNNEL_ENCAP_RPL = 8,
-	__LWTUNNEL_ENCAP_MAX = 9,
-};
-
-struct rtnexthop {
-	short unsigned int rtnh_len;
-	unsigned char rtnh_flags;
-	unsigned char rtnh_hops;
-	int rtnh_ifindex;
-};
-
-struct lwtunnel_encap_ops {
-	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
-	void (*destroy_state)(struct lwtunnel_state *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*input)(struct sk_buff *);
-	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
-	int (*get_encap_size)(struct lwtunnel_state *);
-	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
-	int (*xmit)(struct sk_buff *);
-	struct module *owner;
-};
-
-enum {
-	LWT_BPF_PROG_UNSPEC = 0,
-	LWT_BPF_PROG_FD = 1,
-	LWT_BPF_PROG_NAME = 2,
-	__LWT_BPF_PROG_MAX = 3,
-};
-
-enum {
-	LWT_BPF_UNSPEC = 0,
-	LWT_BPF_IN = 1,
-	LWT_BPF_OUT = 2,
-	LWT_BPF_XMIT = 3,
-	LWT_BPF_XMIT_HEADROOM = 4,
-	__LWT_BPF_MAX = 5,
-};
-
-enum {
-	LWTUNNEL_XMIT_DONE = 0,
-	LWTUNNEL_XMIT_CONTINUE = 1,
-};
-
-struct bpf_lwt_prog {
-	struct bpf_prog *prog;
-	char *name;
-};
-
-struct bpf_lwt {
-	struct bpf_lwt_prog in;
-	struct bpf_lwt_prog out;
-	struct bpf_lwt_prog xmit;
-	int family;
-};
-
-struct bpf_stab {
-	struct bpf_map map;
-	struct sock **sks;
-	struct sk_psock_progs progs;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
-
-struct sock_map_seq_info {
-	struct bpf_map *map;
-	struct sock *sk;
-	u32 index;
-};
-
-struct bpf_iter__sockmap {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		struct sock *sk;
-	};
-};
-
-struct bpf_shtab_elem {
-	struct callback_head rcu;
-	u32 hash;
-	struct sock *sk;
-	struct hlist_node node;
-	u8 key[0];
-};
-
-struct bpf_shtab_bucket {
-	struct hlist_head head;
-	raw_spinlock_t lock;
-};
-
-struct bpf_shtab {
-	struct bpf_map map;
-	struct bpf_shtab_bucket *buckets;
-	u32 buckets_num;
-	u32 elem_size;
-	struct sk_psock_progs progs;
-	atomic_t count;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
-
-struct sock_hash_seq_info {
-	struct bpf_map *map;
-	struct bpf_shtab *htab;
-	u32 bucket_id;
-};
+struct unix_sock;
 
 struct dst_cache_pcpu {
 	long unsigned int refresh_ts;
@@ -100951,1625 +137696,6 @@
 	};
 };
 
-enum devlink_command {
-	DEVLINK_CMD_UNSPEC = 0,
-	DEVLINK_CMD_GET = 1,
-	DEVLINK_CMD_SET = 2,
-	DEVLINK_CMD_NEW = 3,
-	DEVLINK_CMD_DEL = 4,
-	DEVLINK_CMD_PORT_GET = 5,
-	DEVLINK_CMD_PORT_SET = 6,
-	DEVLINK_CMD_PORT_NEW = 7,
-	DEVLINK_CMD_PORT_DEL = 8,
-	DEVLINK_CMD_PORT_SPLIT = 9,
-	DEVLINK_CMD_PORT_UNSPLIT = 10,
-	DEVLINK_CMD_SB_GET = 11,
-	DEVLINK_CMD_SB_SET = 12,
-	DEVLINK_CMD_SB_NEW = 13,
-	DEVLINK_CMD_SB_DEL = 14,
-	DEVLINK_CMD_SB_POOL_GET = 15,
-	DEVLINK_CMD_SB_POOL_SET = 16,
-	DEVLINK_CMD_SB_POOL_NEW = 17,
-	DEVLINK_CMD_SB_POOL_DEL = 18,
-	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
-	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
-	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
-	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
-	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
-	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
-	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
-	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
-	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
-	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
-	DEVLINK_CMD_ESWITCH_GET = 29,
-	DEVLINK_CMD_ESWITCH_SET = 30,
-	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
-	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
-	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
-	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
-	DEVLINK_CMD_RESOURCE_SET = 35,
-	DEVLINK_CMD_RESOURCE_DUMP = 36,
-	DEVLINK_CMD_RELOAD = 37,
-	DEVLINK_CMD_PARAM_GET = 38,
-	DEVLINK_CMD_PARAM_SET = 39,
-	DEVLINK_CMD_PARAM_NEW = 40,
-	DEVLINK_CMD_PARAM_DEL = 41,
-	DEVLINK_CMD_REGION_GET = 42,
-	DEVLINK_CMD_REGION_SET = 43,
-	DEVLINK_CMD_REGION_NEW = 44,
-	DEVLINK_CMD_REGION_DEL = 45,
-	DEVLINK_CMD_REGION_READ = 46,
-	DEVLINK_CMD_PORT_PARAM_GET = 47,
-	DEVLINK_CMD_PORT_PARAM_SET = 48,
-	DEVLINK_CMD_PORT_PARAM_NEW = 49,
-	DEVLINK_CMD_PORT_PARAM_DEL = 50,
-	DEVLINK_CMD_INFO_GET = 51,
-	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
-	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
-	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
-	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
-	DEVLINK_CMD_FLASH_UPDATE = 58,
-	DEVLINK_CMD_FLASH_UPDATE_END = 59,
-	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
-	DEVLINK_CMD_TRAP_GET = 61,
-	DEVLINK_CMD_TRAP_SET = 62,
-	DEVLINK_CMD_TRAP_NEW = 63,
-	DEVLINK_CMD_TRAP_DEL = 64,
-	DEVLINK_CMD_TRAP_GROUP_GET = 65,
-	DEVLINK_CMD_TRAP_GROUP_SET = 66,
-	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
-	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
-	DEVLINK_CMD_TRAP_POLICER_GET = 69,
-	DEVLINK_CMD_TRAP_POLICER_SET = 70,
-	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
-	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
-	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
-	__DEVLINK_CMD_MAX = 74,
-	DEVLINK_CMD_MAX = 73,
-};
-
-enum devlink_eswitch_mode {
-	DEVLINK_ESWITCH_MODE_LEGACY = 0,
-	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
-};
-
-enum {
-	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
-	DEVLINK_ATTR_STATS_RX_BYTES = 1,
-	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
-	__DEVLINK_ATTR_STATS_MAX = 3,
-	DEVLINK_ATTR_STATS_MAX = 2,
-};
-
-enum {
-	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
-	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
-	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
-	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
-};
-
-enum {
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
-};
-
-enum devlink_attr {
-	DEVLINK_ATTR_UNSPEC = 0,
-	DEVLINK_ATTR_BUS_NAME = 1,
-	DEVLINK_ATTR_DEV_NAME = 2,
-	DEVLINK_ATTR_PORT_INDEX = 3,
-	DEVLINK_ATTR_PORT_TYPE = 4,
-	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
-	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
-	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
-	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
-	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
-	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
-	DEVLINK_ATTR_SB_INDEX = 11,
-	DEVLINK_ATTR_SB_SIZE = 12,
-	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
-	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
-	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
-	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
-	DEVLINK_ATTR_SB_POOL_INDEX = 17,
-	DEVLINK_ATTR_SB_POOL_TYPE = 18,
-	DEVLINK_ATTR_SB_POOL_SIZE = 19,
-	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
-	DEVLINK_ATTR_SB_THRESHOLD = 21,
-	DEVLINK_ATTR_SB_TC_INDEX = 22,
-	DEVLINK_ATTR_SB_OCC_CUR = 23,
-	DEVLINK_ATTR_SB_OCC_MAX = 24,
-	DEVLINK_ATTR_ESWITCH_MODE = 25,
-	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
-	DEVLINK_ATTR_DPIPE_TABLES = 27,
-	DEVLINK_ATTR_DPIPE_TABLE = 28,
-	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
-	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
-	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
-	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
-	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
-	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
-	DEVLINK_ATTR_DPIPE_ENTRY = 35,
-	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
-	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
-	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
-	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
-	DEVLINK_ATTR_DPIPE_MATCH = 40,
-	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
-	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
-	DEVLINK_ATTR_DPIPE_ACTION = 43,
-	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
-	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
-	DEVLINK_ATTR_DPIPE_VALUE = 46,
-	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
-	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
-	DEVLINK_ATTR_DPIPE_HEADERS = 49,
-	DEVLINK_ATTR_DPIPE_HEADER = 50,
-	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
-	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
-	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
-	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
-	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
-	DEVLINK_ATTR_DPIPE_FIELD = 56,
-	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
-	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
-	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
-	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
-	DEVLINK_ATTR_PAD = 61,
-	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
-	DEVLINK_ATTR_RESOURCE_LIST = 63,
-	DEVLINK_ATTR_RESOURCE = 64,
-	DEVLINK_ATTR_RESOURCE_NAME = 65,
-	DEVLINK_ATTR_RESOURCE_ID = 66,
-	DEVLINK_ATTR_RESOURCE_SIZE = 67,
-	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
-	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
-	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
-	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
-	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
-	DEVLINK_ATTR_RESOURCE_UNIT = 73,
-	DEVLINK_ATTR_RESOURCE_OCC = 74,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
-	DEVLINK_ATTR_PORT_FLAVOUR = 77,
-	DEVLINK_ATTR_PORT_NUMBER = 78,
-	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
-	DEVLINK_ATTR_PARAM = 80,
-	DEVLINK_ATTR_PARAM_NAME = 81,
-	DEVLINK_ATTR_PARAM_GENERIC = 82,
-	DEVLINK_ATTR_PARAM_TYPE = 83,
-	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
-	DEVLINK_ATTR_PARAM_VALUE = 85,
-	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
-	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
-	DEVLINK_ATTR_REGION_NAME = 88,
-	DEVLINK_ATTR_REGION_SIZE = 89,
-	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
-	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
-	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
-	DEVLINK_ATTR_REGION_CHUNKS = 93,
-	DEVLINK_ATTR_REGION_CHUNK = 94,
-	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
-	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
-	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
-	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
-	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
-	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
-	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
-	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
-	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
-	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
-	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
-	DEVLINK_ATTR_FMSG = 106,
-	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
-	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
-	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
-	DEVLINK_ATTR_FMSG_NEST_END = 110,
-	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
-	DEVLINK_ATTR_HEALTH_REPORTER = 114,
-	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
-	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
-	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
-	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
-	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
-	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
-	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
-	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
-	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
-	DEVLINK_ATTR_STATS = 129,
-	DEVLINK_ATTR_TRAP_NAME = 130,
-	DEVLINK_ATTR_TRAP_ACTION = 131,
-	DEVLINK_ATTR_TRAP_TYPE = 132,
-	DEVLINK_ATTR_TRAP_GENERIC = 133,
-	DEVLINK_ATTR_TRAP_METADATA = 134,
-	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
-	DEVLINK_ATTR_RELOAD_FAILED = 136,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
-	DEVLINK_ATTR_NETNS_FD = 138,
-	DEVLINK_ATTR_NETNS_PID = 139,
-	DEVLINK_ATTR_NETNS_ID = 140,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
-	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
-	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
-	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
-	DEVLINK_ATTR_PORT_FUNCTION = 145,
-	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
-	DEVLINK_ATTR_PORT_LANES = 147,
-	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
-	DEVLINK_ATTR_PORT_EXTERNAL = 149,
-	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
-	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
-	DEVLINK_ATTR_RELOAD_ACTION = 153,
-	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
-	DEVLINK_ATTR_RELOAD_LIMITS = 155,
-	DEVLINK_ATTR_DEV_STATS = 156,
-	DEVLINK_ATTR_RELOAD_STATS = 157,
-	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
-	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
-	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
-	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
-	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
-	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
-	__DEVLINK_ATTR_MAX = 164,
-	DEVLINK_ATTR_MAX = 163,
-};
-
-enum devlink_dpipe_match_type {
-	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
-};
-
-enum devlink_dpipe_action_type {
-	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
-};
-
-enum devlink_dpipe_field_ethernet_id {
-	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
-};
-
-enum devlink_dpipe_field_ipv4_id {
-	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
-};
-
-enum devlink_dpipe_field_ipv6_id {
-	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
-};
-
-enum devlink_dpipe_header_id {
-	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
-	DEVLINK_DPIPE_HEADER_IPV4 = 1,
-	DEVLINK_DPIPE_HEADER_IPV6 = 2,
-};
-
-enum devlink_resource_unit {
-	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
-};
-
-enum devlink_port_function_attr {
-	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
-	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
-	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 2,
-	DEVLINK_PORT_FUNCTION_ATTR_MAX = 1,
-};
-
-struct devlink_dpipe_match {
-	enum devlink_dpipe_match_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_action {
-	enum devlink_dpipe_action_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_value {
-	union {
-		struct devlink_dpipe_action *action;
-		struct devlink_dpipe_match *match;
-	};
-	unsigned int mapping_value;
-	bool mapping_valid;
-	unsigned int value_size;
-	void *value;
-	void *mask;
-};
-
-struct devlink_dpipe_entry {
-	u64 index;
-	struct devlink_dpipe_value *match_values;
-	unsigned int match_values_count;
-	struct devlink_dpipe_value *action_values;
-	unsigned int action_values_count;
-	u64 counter;
-	bool counter_valid;
-};
-
-struct devlink_dpipe_dump_ctx {
-	struct genl_info *info;
-	enum devlink_command cmd;
-	struct sk_buff *skb;
-	struct nlattr *nest;
-	void *hdr;
-};
-
-struct devlink_dpipe_table_ops;
-
-struct devlink_dpipe_table {
-	void *priv;
-	struct list_head list;
-	const char *name;
-	bool counters_enabled;
-	bool counter_control_extern;
-	bool resource_valid;
-	u64 resource_id;
-	u64 resource_units;
-	struct devlink_dpipe_table_ops *table_ops;
-	struct callback_head rcu;
-};
-
-struct devlink_dpipe_table_ops {
-	int (*actions_dump)(void *, struct sk_buff *);
-	int (*matches_dump)(void *, struct sk_buff *);
-	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
-	int (*counters_set_update)(void *, bool);
-	u64 (*size_get)(void *);
-};
-
-struct devlink_resource_size_params {
-	u64 size_min;
-	u64 size_max;
-	u64 size_granularity;
-	enum devlink_resource_unit unit;
-};
-
-typedef u64 devlink_resource_occ_get_t(void *);
-
-struct devlink_resource {
-	const char *name;
-	u64 id;
-	u64 size;
-	u64 size_new;
-	bool size_valid;
-	struct devlink_resource *parent;
-	struct devlink_resource_size_params size_params;
-	struct list_head list;
-	struct list_head resource_list;
-	devlink_resource_occ_get_t *occ_get;
-	void *occ_get_priv;
-};
-
-enum devlink_param_type {
-	DEVLINK_PARAM_TYPE_U8 = 0,
-	DEVLINK_PARAM_TYPE_U16 = 1,
-	DEVLINK_PARAM_TYPE_U32 = 2,
-	DEVLINK_PARAM_TYPE_STRING = 3,
-	DEVLINK_PARAM_TYPE_BOOL = 4,
-};
-
-struct devlink_flash_notify {
-	const char *status_msg;
-	const char *component;
-	long unsigned int done;
-	long unsigned int total;
-	long unsigned int timeout;
-};
-
-struct devlink_param {
-	u32 id;
-	const char *name;
-	bool generic;
-	enum devlink_param_type type;
-	long unsigned int supported_cmodes;
-	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
-};
-
-struct devlink_param_item {
-	struct list_head list;
-	const struct devlink_param *param;
-	union devlink_param_value driverinit_value;
-	bool driverinit_value_valid;
-	bool published;
-};
-
-enum devlink_param_generic_id {
-	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
-	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
-	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
-	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
-	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
-	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
-	__DEVLINK_PARAM_GENERIC_ID_MAX = 11,
-	DEVLINK_PARAM_GENERIC_ID_MAX = 10,
-};
-
-struct devlink_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-struct devlink_port_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-enum devlink_health_reporter_state {
-	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
-	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
-};
-
-struct devlink_health_reporter;
-
-struct devlink_fmsg;
-
-struct devlink_health_reporter_ops {
-	char *name;
-	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
-	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
-	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
-	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
-};
-
-struct devlink_health_reporter {
-	struct list_head list;
-	void *priv;
-	const struct devlink_health_reporter_ops *ops;
-	struct devlink *devlink;
-	struct devlink_port *devlink_port;
-	struct devlink_fmsg *dump_fmsg;
-	struct mutex dump_lock;
-	u64 graceful_period;
-	bool auto_recover;
-	bool auto_dump;
-	u8 health_state;
-	u64 dump_ts;
-	u64 dump_real_ts;
-	u64 error_count;
-	u64 recovery_count;
-	u64 last_recovery_ts;
-	refcount_t refcount;
-};
-
-struct devlink_fmsg {
-	struct list_head item_list;
-	bool putting_binary;
-};
-
-struct devlink_trap_metadata {
-	const char *trap_name;
-	const char *trap_group_name;
-	struct net_device *input_dev;
-	const struct flow_action_cookie *fa_cookie;
-	enum devlink_trap_type trap_type;
-};
-
-enum devlink_trap_generic_id {
-	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
-	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
-	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
-	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
-	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
-	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
-	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
-	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
-	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
-	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
-	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
-	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
-	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
-	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
-	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
-	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
-	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
-	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
-	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
-	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
-	DEVLINK_TRAP_GENERIC_ID_STP = 29,
-	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
-	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
-	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
-	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
-	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
-	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
-	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
-	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
-	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
-	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
-	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
-	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
-	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
-	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
-	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
-	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
-	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
-	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
-	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
-	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
-	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
-	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
-	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
-	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
-	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
-	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
-	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
-	__DEVLINK_TRAP_GENERIC_ID_MAX = 90,
-	DEVLINK_TRAP_GENERIC_ID_MAX = 89,
-};
-
-enum devlink_trap_group_generic_id {
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
-	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
-};
-
-struct devlink_info_req {
-	struct sk_buff *msg;
-};
-
-struct trace_event_raw_devlink_hwmsg {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	bool incoming;
-	long unsigned int type;
-	u32 __data_loc_buf;
-	size_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_hwerr {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	int err;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_recover_aborted {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	bool health_state;
-	u64 time_since_last_recover;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_reporter_state_update {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u8 new_state;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_trap_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_trap_name;
-	u32 __data_loc_trap_group_name;
-	u32 __data_loc_input_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devlink_hwmsg {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_devlink_hwerr {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_recover_aborted {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_health_reporter_state_update {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_trap_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 trap_name;
-	u32 trap_group_name;
-	u32 input_dev_name;
-};
-
-typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
-
-typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
-
-typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
-
-typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
-
-typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
-
-typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
-
-struct devlink_sb {
-	struct list_head list;
-	unsigned int index;
-	u32 size;
-	u16 ingress_pools_count;
-	u16 egress_pools_count;
-	u16 ingress_tc_count;
-	u16 egress_tc_count;
-};
-
-struct devlink_region {
-	struct devlink *devlink;
-	struct devlink_port *port;
-	struct list_head list;
-	union {
-		const struct devlink_region_ops *ops;
-		const struct devlink_port_region_ops *port_ops;
-	};
-	struct list_head snapshot_list;
-	u32 max_snapshots;
-	u32 cur_snapshots;
-	u64 size;
-};
-
-struct devlink_snapshot {
-	struct list_head list;
-	struct devlink_region *region;
-	u8 *data;
-	u32 id;
-};
-
-enum devlink_multicast_groups {
-	DEVLINK_MCGRP_CONFIG = 0,
-};
-
-struct devlink_reload_combination {
-	enum devlink_reload_action action;
-	enum devlink_reload_limit limit;
-};
-
-struct devlink_fmsg_item {
-	struct list_head list;
-	int attrtype;
-	u8 nla_type;
-	u16 len;
-	int value[0];
-};
-
-struct devlink_stats {
-	u64 rx_bytes;
-	u64 rx_packets;
-	struct u64_stats_sync syncp;
-};
-
-struct devlink_trap_policer_item {
-	const struct devlink_trap_policer *policer;
-	u64 rate;
-	u64 burst;
-	struct list_head list;
-};
-
-struct devlink_trap_group_item {
-	const struct devlink_trap_group *group;
-	struct devlink_trap_policer_item *policer_item;
-	struct list_head list;
-	struct devlink_stats *stats;
-};
-
-struct devlink_trap_item {
-	const struct devlink_trap *trap;
-	struct devlink_trap_group_item *group_item;
-	struct list_head list;
-	enum devlink_trap_action action;
-	struct devlink_stats *stats;
-	void *priv;
-};
-
-struct gro_cell;
-
-struct gro_cells {
-	struct gro_cell *cells;
-};
-
-struct gro_cell {
-	struct sk_buff_head napi_skbs;
-	struct napi_struct napi;
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
-	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
-	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
-	SK_DIAG_BPF_STORAGE = 1,
-	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_NONE = 0,
-	SK_DIAG_BPF_STORAGE_PAD = 1,
-	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
-	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
-	__SK_DIAG_BPF_STORAGE_MAX = 4,
-};
-
-typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
-
-struct bpf_sk_storage_diag {
-	u32 nr_maps;
-	struct bpf_map *maps[0];
-};
-
-struct bpf_iter_seq_sk_storage_map_info {
-	struct bpf_map *map;
-	unsigned int bucket_id;
-	unsigned int skip_elems;
-};
-
-struct bpf_iter__bpf_sk_storage_map {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		struct sock *sk;
-	};
-	union {
-		void *value;
-	};
-};
-
-struct compat_cmsghdr {
-	compat_size_t cmsg_len;
-	compat_int_t cmsg_level;
-	compat_int_t cmsg_type;
-};
-
-typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
-
-struct nvmem_cell___2;
-
-struct fch_hdr {
-	__u8 daddr[6];
-	__u8 saddr[6];
-};
-
-struct fcllc {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 llc;
-	__u8 protid[3];
-	__be16 ethertype;
-};
-
-struct fddi_8022_1_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-};
-
-struct fddi_8022_2_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl_1;
-	__u8 ctrl_2;
-};
-
-struct fddi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct fddihdr {
-	__u8 fc;
-	__u8 daddr[6];
-	__u8 saddr[6];
-	union {
-		struct fddi_8022_1_hdr llc_8022_1;
-		struct fddi_8022_2_hdr llc_8022_2;
-		struct fddi_snap_hdr llc_snap;
-	} hdr;
-} __attribute__((packed));
-
-struct hippi_fp_hdr {
-	__be32 fixed;
-	__be32 d2_size;
-};
-
-struct hippi_le_hdr {
-	__u8 message_type: 4;
-	__u8 double_wide: 1;
-	__u8 fc: 3;
-	__u8 dest_switch_addr[3];
-	__u8 src_addr_type: 4;
-	__u8 dest_addr_type: 4;
-	__u8 src_switch_addr[3];
-	__u16 reserved;
-	__u8 daddr[6];
-	__u16 locally_administered;
-	__u8 saddr[6];
-};
-
-struct hippi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct hippi_hdr {
-	struct hippi_fp_hdr fp;
-	struct hippi_le_hdr le;
-	struct hippi_snap_hdr snap;
-};
-
-struct hippi_cb {
-	__u32 ifield;
-};
-
-enum macvlan_mode {
-	MACVLAN_MODE_PRIVATE = 1,
-	MACVLAN_MODE_VEPA = 2,
-	MACVLAN_MODE_BRIDGE = 4,
-	MACVLAN_MODE_PASSTHRU = 8,
-	MACVLAN_MODE_SOURCE = 16,
-};
-
-struct tc_ratespec {
-	unsigned char cell_log;
-	__u8 linklayer;
-	short unsigned int overhead;
-	short int cell_align;
-	short unsigned int mpu;
-	__u32 rate;
-};
-
-struct tc_prio_qopt {
-	int bands;
-	__u8 priomap[16];
-};
-
-enum {
-	TCA_UNSPEC = 0,
-	TCA_KIND = 1,
-	TCA_OPTIONS = 2,
-	TCA_STATS = 3,
-	TCA_XSTATS = 4,
-	TCA_RATE = 5,
-	TCA_FCNT = 6,
-	TCA_STATS2 = 7,
-	TCA_STAB = 8,
-	TCA_PAD = 9,
-	TCA_DUMP_INVISIBLE = 10,
-	TCA_CHAIN = 11,
-	TCA_HW_OFFLOAD = 12,
-	TCA_INGRESS_BLOCK = 13,
-	TCA_EGRESS_BLOCK = 14,
-	TCA_DUMP_FLAGS = 15,
-	__TCA_MAX = 16,
-};
-
-struct vlan_pcpu_stats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 rx_multicast;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-	u32 rx_errors;
-	u32 tx_dropped;
-};
-
-struct netpoll___2;
-
-struct skb_array {
-	struct ptr_ring ring;
-};
-
-struct macvlan_port;
-
-struct macvlan_dev {
-	struct net_device *dev;
-	struct list_head list;
-	struct hlist_node hlist;
-	struct macvlan_port *port;
-	struct net_device *lowerdev;
-	void *accel_priv;
-	struct vlan_pcpu_stats *pcpu_stats;
-	long unsigned int mc_filter[4];
-	netdev_features_t set_features;
-	enum macvlan_mode mode;
-	u16 flags;
-	unsigned int macaddr_count;
-	struct netpoll___2 *netpoll;
-};
-
-struct psched_ratecfg {
-	u64 rate_bytes_ps;
-	u32 mult;
-	u16 overhead;
-	u8 linklayer;
-	u8 shift;
-};
-
-struct mini_Qdisc_pair {
-	struct mini_Qdisc miniq1;
-	struct mini_Qdisc miniq2;
-	struct mini_Qdisc **p_miniq;
-};
-
-struct pfifo_fast_priv {
-	struct skb_array q[3];
-};
-
-struct tc_qopt_offload_stats {
-	struct gnet_stats_basic_packed *bstats;
-	struct gnet_stats_queue *qstats;
-};
-
-enum tc_mq_command {
-	TC_MQ_CREATE = 0,
-	TC_MQ_DESTROY = 1,
-	TC_MQ_STATS = 2,
-	TC_MQ_GRAFT = 3,
-};
-
-struct tc_mq_opt_offload_graft_params {
-	long unsigned int queue;
-	u32 child_handle;
-};
-
-struct tc_mq_qopt_offload {
-	enum tc_mq_command command;
-	u32 handle;
-	union {
-		struct tc_qopt_offload_stats stats;
-		struct tc_mq_opt_offload_graft_params graft_params;
-	};
-};
-
-struct mq_sched {
-	struct Qdisc **qdiscs;
-};
-
-enum tc_link_layer {
-	TC_LINKLAYER_UNAWARE = 0,
-	TC_LINKLAYER_ETHERNET = 1,
-	TC_LINKLAYER_ATM = 2,
-};
-
-enum {
-	TCA_STAB_UNSPEC = 0,
-	TCA_STAB_BASE = 1,
-	TCA_STAB_DATA = 2,
-	__TCA_STAB_MAX = 3,
-};
-
-struct qdisc_rate_table {
-	struct tc_ratespec rate;
-	u32 data[256];
-	struct qdisc_rate_table *next;
-	int refcnt;
-};
-
-struct Qdisc_class_common {
-	u32 classid;
-	struct hlist_node hnode;
-};
-
-struct Qdisc_class_hash {
-	struct hlist_head *hash;
-	unsigned int hashsize;
-	unsigned int hashmask;
-	unsigned int hashelems;
-};
-
-struct qdisc_watchdog {
-	u64 last_expires;
-	struct hrtimer timer;
-	struct Qdisc *qdisc;
-};
-
-enum tc_root_command {
-	TC_ROOT_GRAFT = 0,
-};
-
-struct tc_root_qopt_offload {
-	enum tc_root_command command;
-	u32 handle;
-	bool ingress;
-};
-
-struct check_loop_arg {
-	struct qdisc_walker w;
-	struct Qdisc *p;
-	int depth;
-};
-
-struct tcf_bind_args {
-	struct tcf_walker w;
-	long unsigned int base;
-	long unsigned int cl;
-	u32 classid;
-};
-
-struct tc_bind_class_args {
-	struct qdisc_walker w;
-	long unsigned int new_cl;
-	u32 portid;
-	u32 clid;
-};
-
-struct qdisc_dump_args {
-	struct qdisc_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-};
-
-enum net_xmit_qdisc_t {
-	__NET_XMIT_STOLEN = 65536,
-	__NET_XMIT_BYPASS = 131072,
-};
-
-struct tc_skb_ext {
-	__u32 chain;
-	__u16 mru;
-};
-
-enum {
-	TCA_ACT_UNSPEC = 0,
-	TCA_ACT_KIND = 1,
-	TCA_ACT_OPTIONS = 2,
-	TCA_ACT_INDEX = 3,
-	TCA_ACT_STATS = 4,
-	TCA_ACT_PAD = 5,
-	TCA_ACT_COOKIE = 6,
-	TCA_ACT_FLAGS = 7,
-	TCA_ACT_HW_STATS = 8,
-	TCA_ACT_USED_HW_STATS = 9,
-	__TCA_ACT_MAX = 10,
-};
-
-enum tca_id {
-	TCA_ID_UNSPEC = 0,
-	TCA_ID_POLICE = 1,
-	TCA_ID_GACT = 5,
-	TCA_ID_IPT = 6,
-	TCA_ID_PEDIT = 7,
-	TCA_ID_MIRRED = 8,
-	TCA_ID_NAT = 9,
-	TCA_ID_XT = 10,
-	TCA_ID_SKBEDIT = 11,
-	TCA_ID_VLAN = 12,
-	TCA_ID_BPF = 13,
-	TCA_ID_CONNMARK = 14,
-	TCA_ID_SKBMOD = 15,
-	TCA_ID_CSUM = 16,
-	TCA_ID_TUNNEL_KEY = 17,
-	TCA_ID_SIMP = 22,
-	TCA_ID_IFE = 25,
-	TCA_ID_SAMPLE = 26,
-	TCA_ID_CTINFO = 27,
-	TCA_ID_MPLS = 28,
-	TCA_ID_CT = 29,
-	TCA_ID_GATE = 30,
-	__TCA_ID_MAX = 255,
-};
-
-struct tcf_t {
-	__u64 install;
-	__u64 lastuse;
-	__u64 expires;
-	__u64 firstuse;
-};
-
-struct psample_group {
-	struct list_head list;
-	struct net *net;
-	u32 group_num;
-	u32 refcount;
-	u32 seq;
-	struct callback_head rcu;
-};
-
-struct action_gate_entry {
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-};
-
-enum qdisc_class_ops_flags {
-	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
-};
-
-enum tcf_proto_ops_flags {
-	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
-};
-
-typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
-
-struct tcf_idrinfo {
-	struct mutex lock;
-	struct idr action_idr;
-	struct net *net;
-};
-
-struct tc_action_ops;
-
-struct tc_cookie;
-
-struct tc_action {
-	const struct tc_action_ops *ops;
-	__u32 type;
-	struct tcf_idrinfo *idrinfo;
-	u32 tcfa_index;
-	refcount_t tcfa_refcnt;
-	atomic_t tcfa_bindcnt;
-	int tcfa_action;
-	struct tcf_t tcfa_tm;
-	struct gnet_stats_basic_packed tcfa_bstats;
-	struct gnet_stats_basic_packed tcfa_bstats_hw;
-	struct gnet_stats_queue tcfa_qstats;
-	struct net_rate_estimator *tcfa_rate_est;
-	spinlock_t tcfa_lock;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_basic_cpu *cpu_bstats_hw;
-	struct gnet_stats_queue *cpu_qstats;
-	struct tc_cookie *act_cookie;
-	struct tcf_chain *goto_chain;
-	u32 tcfa_flags;
-	u8 hw_stats;
-	u8 used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-typedef void (*tc_action_priv_destructor)(void *);
-
-struct tc_action_ops {
-	struct list_head head;
-	char kind[16];
-	enum tca_id id;
-	size_t size;
-	struct module *owner;
-	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
-	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
-	void (*cleanup)(struct tc_action *);
-	int (*lookup)(struct net *, struct tc_action **, u32);
-	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);
-	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
-	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
-	size_t (*get_fill_size)(const struct tc_action *);
-	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
-	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
-};
-
-struct tc_cookie {
-	u8 *data;
-	u32 len;
-	struct callback_head rcu;
-};
-
-struct tcf_block_ext_info {
-	enum flow_block_binder_type binder_type;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-	u32 block_index;
-};
-
-struct tcf_qevent {
-	struct tcf_block *block;
-	struct tcf_block_ext_info info;
-	struct tcf_proto *filter_chain;
-};
-
-struct tcf_exts {
-	__u32 type;
-	int nr_actions;
-	struct tc_action **actions;
-	struct net *net;
-	int action;
-	int police;
-};
-
-enum pedit_header_type {
-	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
-	__PEDIT_HDR_TYPE_MAX = 6,
-};
-
-enum pedit_cmd {
-	TCA_PEDIT_KEY_EX_CMD_SET = 0,
-	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
-	__PEDIT_CMD_MAX = 2,
-};
-
-struct tc_pedit_key {
-	__u32 mask;
-	__u32 val;
-	__u32 off;
-	__u32 at;
-	__u32 offmask;
-	__u32 shift;
-};
-
-struct tcf_pedit_key_ex {
-	enum pedit_header_type htype;
-	enum pedit_cmd cmd;
-};
-
-struct tcf_pedit {
-	struct tc_action common;
-	unsigned char tcfp_nkeys;
-	unsigned char tcfp_flags;
-	struct tc_pedit_key *tcfp_keys;
-	struct tcf_pedit_key_ex *tcfp_keys_ex;
-};
-
-struct tcf_mirred {
-	struct tc_action common;
-	int tcfm_eaction;
-	bool tcfm_mac_header_xmit;
-	struct net_device *tcfm_dev;
-	struct list_head tcfm_list;
-};
-
-struct tcf_vlan_params {
-	int tcfv_action;
-	unsigned char tcfv_push_dst[6];
-	unsigned char tcfv_push_src[6];
-	u16 tcfv_push_vid;
-	__be16 tcfv_push_proto;
-	u8 tcfv_push_prio;
-	struct callback_head rcu;
-};
-
-struct tcf_vlan {
-	struct tc_action common;
-	struct tcf_vlan_params *vlan_p;
-};
-
-struct tcf_tunnel_key_params {
-	struct callback_head rcu;
-	int tcft_action;
-	struct metadata_dst *tcft_enc_metadata;
-};
-
-struct tcf_tunnel_key {
-	struct tc_action common;
-	struct tcf_tunnel_key_params *params;
-};
-
-struct tcf_csum_params {
-	u32 update_flags;
-	struct callback_head rcu;
-};
-
-struct tcf_csum {
-	struct tc_action common;
-	struct tcf_csum_params *params;
-};
-
-struct tcf_gact {
-	struct tc_action common;
-	u16 tcfg_ptype;
-	u16 tcfg_pval;
-	int tcfg_paction;
-	atomic_t packets;
-};
-
-struct tcf_police_params {
-	int tcfp_result;
-	u32 tcfp_ewma_rate;
-	s64 tcfp_burst;
-	u32 tcfp_mtu;
-	s64 tcfp_mtu_ptoks;
-	struct psched_ratecfg rate;
-	bool rate_present;
-	struct psched_ratecfg peak;
-	bool peak_present;
-	struct callback_head rcu;
-};
-
-struct tcf_police {
-	struct tc_action common;
-	struct tcf_police_params *params;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t tcfp_lock;
-	s64 tcfp_toks;
-	s64 tcfp_ptoks;
-	s64 tcfp_t_c;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcf_sample {
-	struct tc_action common;
-	u32 rate;
-	bool truncate;
-	u32 trunc_size;
-	struct psample_group *psample_group;
-	u32 psample_group_num;
-	struct list_head tcfm_list;
-};
-
-struct tcf_skbedit_params {
-	u32 flags;
-	u32 priority;
-	u32 mark;
-	u32 mask;
-	u16 queue_mapping;
-	u16 ptype;
-	struct callback_head rcu;
-};
-
-struct tcf_skbedit {
-	struct tc_action common;
-	struct tcf_skbedit_params *params;
-};
-
-struct nf_nat_range2 {
-	unsigned int flags;
-	union nf_inet_addr min_addr;
-	union nf_inet_addr max_addr;
-	union nf_conntrack_man_proto min_proto;
-	union nf_conntrack_man_proto max_proto;
-	union nf_conntrack_man_proto base_proto;
-};
-
-struct tcf_ct_flow_table;
-
-struct tcf_ct_params {
-	struct nf_conn *tmpl;
-	u16 zone;
-	u32 mark;
-	u32 mark_mask;
-	u32 labels[4];
-	u32 labels_mask[4];
-	struct nf_nat_range2 range;
-	bool ipv4_range;
-	u16 ct_action;
-	struct callback_head rcu;
-	struct tcf_ct_flow_table *ct_ft;
-	struct nf_flowtable *nf_ft;
-};
-
-struct tcf_ct {
-	struct tc_action common;
-	struct tcf_ct_params *params;
-};
-
-struct tcf_mpls_params {
-	int tcfm_action;
-	u32 tcfm_label;
-	u8 tcfm_tc;
-	u8 tcfm_ttl;
-	u8 tcfm_bos;
-	__be16 tcfm_proto;
-	struct callback_head rcu;
-};
-
-struct tcf_mpls {
-	struct tc_action common;
-	struct tcf_mpls_params *mpls_p;
-};
-
-struct tcfg_gate_entry {
-	int index;
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-	struct list_head list;
-};
-
-struct tcf_gate_params {
-	s32 tcfg_priority;
-	u64 tcfg_basetime;
-	u64 tcfg_cycletime;
-	u64 tcfg_cycletime_ext;
-	u32 tcfg_flags;
-	s32 tcfg_clockid;
-	size_t num_entries;
-	struct list_head entries;
-};
-
-struct tcf_gate {
-	struct tc_action common;
-	struct tcf_gate_params param;
-	u8 current_gate_status;
-	ktime_t current_close_time;
-	u32 current_entry_octets;
-	s32 current_max_octets;
-	struct tcfg_gate_entry *next_entry;
-	struct hrtimer hitimer;
-	enum tk_offsets tk_offset;
-};
-
-struct tcf_filter_chain_list_item {
-	struct list_head list;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-};
-
-struct tcf_net {
-	spinlock_t idr_lock;
-	struct idr idr;
-};
-
-struct tcf_block_owner_item {
-	struct list_head list;
-	struct Qdisc *q;
-	enum flow_block_binder_type binder_type;
-};
-
-struct tcf_chain_info {
-	struct tcf_proto **pprev;
-	struct tcf_proto *next;
-};
-
-struct tcf_dump_args {
-	struct tcf_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct tcf_block *block;
-	struct Qdisc *q;
-	u32 parent;
-	bool terse_dump;
-};
-
 struct tcamsg {
 	unsigned char tca_family;
 	unsigned char tca__pad1;
@@ -102590,961 +137716,42 @@
 	const struct tc_action_ops *ops;
 };
 
-struct tc_act_bpf {
-	__u32 index;
-	__u32 capab;
-	int action;
-	int refcnt;
-	int bindcnt;
-};
-
-enum {
-	TCA_ACT_BPF_UNSPEC = 0,
-	TCA_ACT_BPF_TM = 1,
-	TCA_ACT_BPF_PARMS = 2,
-	TCA_ACT_BPF_OPS_LEN = 3,
-	TCA_ACT_BPF_OPS = 4,
-	TCA_ACT_BPF_FD = 5,
-	TCA_ACT_BPF_NAME = 6,
-	TCA_ACT_BPF_PAD = 7,
-	TCA_ACT_BPF_TAG = 8,
-	TCA_ACT_BPF_ID = 9,
-	__TCA_ACT_BPF_MAX = 10,
-};
-
-struct tcf_bpf {
-	struct tc_action common;
-	struct bpf_prog *filter;
-	union {
-		u32 bpf_fd;
-		u16 bpf_num_ops;
-	};
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-};
-
-struct tcf_bpf_cfg {
-	struct bpf_prog *filter;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	u16 bpf_num_ops;
-	bool is_ebpf;
-};
-
-struct tc_fifo_qopt {
-	__u32 limit;
-};
-
-enum tc_fifo_command {
-	TC_FIFO_REPLACE = 0,
-	TC_FIFO_DESTROY = 1,
-	TC_FIFO_STATS = 2,
-};
-
-struct tc_fifo_qopt_offload {
-	enum tc_fifo_command command;
-	u32 handle;
-	u32 parent;
-	union {
-		struct tc_qopt_offload_stats stats;
-	};
-};
-
-enum {
-	TCA_CGROUP_UNSPEC = 0,
-	TCA_CGROUP_ACT = 1,
-	TCA_CGROUP_POLICE = 2,
-	TCA_CGROUP_EMATCHES = 3,
-	__TCA_CGROUP_MAX = 4,
-};
-
-struct tcf_ematch_tree_hdr {
-	__u16 nmatches;
-	__u16 progid;
-};
-
-struct tcf_pkt_info {
-	unsigned char *ptr;
-	int nexthdr;
-};
-
-struct tcf_ematch_ops;
-
-struct tcf_ematch {
-	struct tcf_ematch_ops *ops;
-	long unsigned int data;
-	unsigned int datalen;
-	u16 matchid;
-	u16 flags;
-	struct net *net;
-};
-
-struct tcf_ematch_ops {
-	int kind;
-	int datalen;
-	int (*change)(struct net *, void *, int, struct tcf_ematch *);
-	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
-	void (*destroy)(struct tcf_ematch *);
-	int (*dump)(struct sk_buff *, struct tcf_ematch *);
-	struct module *owner;
-	struct list_head link;
-};
-
-struct tcf_ematch_tree {
-	struct tcf_ematch_tree_hdr hdr;
-	struct tcf_ematch *matches;
-};
-
-struct cls_cgroup_head {
-	u32 handle;
-	struct tcf_exts exts;
-	struct tcf_ematch_tree ematches;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_BPF_UNSPEC = 0,
-	TCA_BPF_ACT = 1,
-	TCA_BPF_POLICE = 2,
-	TCA_BPF_CLASSID = 3,
-	TCA_BPF_OPS_LEN = 4,
-	TCA_BPF_OPS = 5,
-	TCA_BPF_FD = 6,
-	TCA_BPF_NAME = 7,
-	TCA_BPF_FLAGS = 8,
-	TCA_BPF_FLAGS_GEN = 9,
-	TCA_BPF_TAG = 10,
-	TCA_BPF_ID = 11,
-	__TCA_BPF_MAX = 12,
-};
-
-enum tc_clsbpf_command {
-	TC_CLSBPF_OFFLOAD = 0,
-	TC_CLSBPF_STATS = 1,
-};
-
-struct tc_cls_bpf_offload {
-	struct flow_cls_common_offload common;
-	enum tc_clsbpf_command command;
-	struct tcf_exts *exts;
-	struct bpf_prog *prog;
-	struct bpf_prog *oldprog;
-	const char *name;
-	bool exts_integrated;
-};
-
-struct cls_bpf_head {
-	struct list_head plist;
-	struct idr handle_idr;
-	struct callback_head rcu;
-};
-
-struct cls_bpf_prog {
-	struct bpf_prog *filter;
-	struct list_head link;
-	struct tcf_result res;
-	bool exts_integrated;
-	u32 gen_flags;
-	unsigned int in_hw_count;
-	struct tcf_exts exts;
-	u32 handle;
-	u16 bpf_num_ops;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_EMATCH_TREE_UNSPEC = 0,
-	TCA_EMATCH_TREE_HDR = 1,
-	TCA_EMATCH_TREE_LIST = 2,
-	__TCA_EMATCH_TREE_MAX = 3,
-};
-
-struct tcf_ematch_hdr {
-	__u16 matchid;
-	__u16 kind;
-	__u16 flags;
-	__u16 pad;
-};
-
-struct sockaddr_nl {
-	__kernel_sa_family_t nl_family;
-	short unsigned int nl_pad;
-	__u32 nl_pid;
-	__u32 nl_groups;
-};
-
-struct nlmsgerr {
-	int error;
-	struct nlmsghdr msg;
-};
-
-enum nlmsgerr_attrs {
-	NLMSGERR_ATTR_UNUSED = 0,
-	NLMSGERR_ATTR_MSG = 1,
-	NLMSGERR_ATTR_OFFS = 2,
-	NLMSGERR_ATTR_COOKIE = 3,
-	NLMSGERR_ATTR_POLICY = 4,
-	__NLMSGERR_ATTR_MAX = 5,
-	NLMSGERR_ATTR_MAX = 4,
-};
-
-struct nl_pktinfo {
-	__u32 group;
-};
-
-enum {
-	NETLINK_UNCONNECTED = 0,
-	NETLINK_CONNECTED = 1,
-};
-
-enum netlink_skb_flags {
-	NETLINK_SKB_DST = 8,
-};
-
-struct netlink_notify {
-	struct net *net;
-	u32 portid;
-	int protocol;
-};
-
-struct netlink_tap {
-	struct net_device *dev;
-	struct module *module;
+struct tc_act_pernet_id {
 	struct list_head list;
+	unsigned int id;
 };
 
-struct netlink_sock {
-	struct sock sk;
-	u32 portid;
-	u32 dst_portid;
-	u32 dst_group;
-	u32 flags;
-	u32 subscriptions;
-	u32 ngroups;
-	long unsigned int *groups;
-	long unsigned int state;
-	size_t max_recvmsg_len;
-	wait_queue_head_t wait;
-	bool bound;
-	bool cb_running;
-	int dump_done_errno;
-	struct netlink_callback cb;
-	struct mutex *cb_mutex;
-	struct mutex cb_def_mutex;
-	void (*netlink_rcv)(struct sk_buff *);
-	int (*netlink_bind)(struct net *, int);
-	void (*netlink_unbind)(struct net *, int);
-	struct module *module;
-	struct rhash_head node;
-	struct callback_head rcu;
-	struct work_struct work;
+struct netlink_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 ndiag_ino;
+	__u32 ndiag_show;
+	__u32 ndiag_cookie[2];
 };
 
-struct listeners;
-
-struct netlink_table {
-	struct rhashtable hash;
-	struct hlist_head mc_list;
-	struct listeners *listeners;
-	unsigned int flags;
-	unsigned int groups;
-	struct mutex *cb_mutex;
-	struct module *module;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-	int registered;
-};
-
-struct listeners {
-	struct callback_head rcu;
-	long unsigned int masks[0];
-};
-
-struct netlink_tap_net {
-	struct list_head netlink_tap_all;
-	struct mutex netlink_tap_lock;
-};
-
-struct netlink_compare_arg {
-	possible_net_t pnet;
-	u32 portid;
-};
-
-struct netlink_broadcast_data {
-	struct sock *exclude_sk;
-	struct net *net;
-	u32 portid;
-	u32 group;
-	int failure;
-	int delivery_failure;
-	int congested;
-	int delivered;
-	gfp_t allocation;
-	struct sk_buff *skb;
-	struct sk_buff *skb2;
-	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
-	void *tx_data;
-};
-
-struct netlink_set_err_data {
-	struct sock *exclude_sk;
-	u32 portid;
-	u32 group;
-	int code;
-};
-
-struct nl_seq_iter {
-	struct seq_net_private p;
-	struct rhashtable_iter hti;
-	int link;
-};
-
-struct bpf_iter__netlink {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct netlink_sock *sk;
-	};
+struct netlink_diag_msg {
+	__u8 ndiag_family;
+	__u8 ndiag_type;
+	__u8 ndiag_protocol;
+	__u8 ndiag_state;
+	__u32 ndiag_portid;
+	__u32 ndiag_dst_portid;
+	__u32 ndiag_dst_group;
+	__u32 ndiag_ino;
+	__u32 ndiag_cookie[2];
 };
 
 enum {
-	CTRL_CMD_UNSPEC = 0,
-	CTRL_CMD_NEWFAMILY = 1,
-	CTRL_CMD_DELFAMILY = 2,
-	CTRL_CMD_GETFAMILY = 3,
-	CTRL_CMD_NEWOPS = 4,
-	CTRL_CMD_DELOPS = 5,
-	CTRL_CMD_GETOPS = 6,
-	CTRL_CMD_NEWMCAST_GRP = 7,
-	CTRL_CMD_DELMCAST_GRP = 8,
-	CTRL_CMD_GETMCAST_GRP = 9,
-	CTRL_CMD_GETPOLICY = 10,
-	__CTRL_CMD_MAX = 11,
+	NETLINK_DIAG_MEMINFO = 0,
+	NETLINK_DIAG_GROUPS = 1,
+	NETLINK_DIAG_RX_RING = 2,
+	NETLINK_DIAG_TX_RING = 3,
+	NETLINK_DIAG_FLAGS = 4,
+	__NETLINK_DIAG_MAX = 5,
 };
 
 enum {
-	CTRL_ATTR_UNSPEC = 0,
-	CTRL_ATTR_FAMILY_ID = 1,
-	CTRL_ATTR_FAMILY_NAME = 2,
-	CTRL_ATTR_VERSION = 3,
-	CTRL_ATTR_HDRSIZE = 4,
-	CTRL_ATTR_MAXATTR = 5,
-	CTRL_ATTR_OPS = 6,
-	CTRL_ATTR_MCAST_GROUPS = 7,
-	CTRL_ATTR_POLICY = 8,
-	CTRL_ATTR_OP_POLICY = 9,
-	CTRL_ATTR_OP = 10,
-	__CTRL_ATTR_MAX = 11,
-};
-
-enum {
-	CTRL_ATTR_OP_UNSPEC = 0,
-	CTRL_ATTR_OP_ID = 1,
-	CTRL_ATTR_OP_FLAGS = 2,
-	__CTRL_ATTR_OP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
-	CTRL_ATTR_MCAST_GRP_NAME = 1,
-	CTRL_ATTR_MCAST_GRP_ID = 2,
-	__CTRL_ATTR_MCAST_GRP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_POLICY_UNSPEC = 0,
-	CTRL_ATTR_POLICY_DO = 1,
-	CTRL_ATTR_POLICY_DUMP = 2,
-	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
-	CTRL_ATTR_POLICY_DUMP_MAX = 2,
-};
-
-struct genl_start_context {
-	const struct genl_family *family;
-	struct nlmsghdr *nlh;
-	struct netlink_ext_ack *extack;
-	const struct genl_ops *ops;
-	int hdrlen;
-};
-
-struct netlink_policy_dump_state;
-
-struct ctrl_dump_policy_ctx {
-	struct netlink_policy_dump_state *state;
-	const struct genl_family *rt;
-	unsigned int opidx;
-	u32 op;
-	u16 fam_id;
-	u8 policies: 1;
-	u8 single_op: 1;
-};
-
-enum netlink_attribute_type {
-	NL_ATTR_TYPE_INVALID = 0,
-	NL_ATTR_TYPE_FLAG = 1,
-	NL_ATTR_TYPE_U8 = 2,
-	NL_ATTR_TYPE_U16 = 3,
-	NL_ATTR_TYPE_U32 = 4,
-	NL_ATTR_TYPE_U64 = 5,
-	NL_ATTR_TYPE_S8 = 6,
-	NL_ATTR_TYPE_S16 = 7,
-	NL_ATTR_TYPE_S32 = 8,
-	NL_ATTR_TYPE_S64 = 9,
-	NL_ATTR_TYPE_BINARY = 10,
-	NL_ATTR_TYPE_STRING = 11,
-	NL_ATTR_TYPE_NUL_STRING = 12,
-	NL_ATTR_TYPE_NESTED = 13,
-	NL_ATTR_TYPE_NESTED_ARRAY = 14,
-	NL_ATTR_TYPE_BITFIELD32 = 15,
-};
-
-enum netlink_policy_type_attr {
-	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
-	NL_POLICY_TYPE_ATTR_TYPE = 1,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
-	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
-	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
-	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
-	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
-	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
-	NL_POLICY_TYPE_ATTR_PAD = 11,
-	NL_POLICY_TYPE_ATTR_MASK = 12,
-	__NL_POLICY_TYPE_ATTR_MAX = 13,
-	NL_POLICY_TYPE_ATTR_MAX = 12,
-};
-
-struct netlink_policy_dump_state___2 {
-	unsigned int policy_idx;
-	unsigned int attr_idx;
-	unsigned int n_alloc;
-	struct {
-		const struct nla_policy *policy;
-		unsigned int maxtype;
-	} policies[0];
-};
-
-struct trace_event_raw_bpf_test_finish {
-	struct trace_entry ent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_test_finish {};
-
-typedef void (*btf_trace_bpf_test_finish)(void *, int *);
-
-struct bpf_fentry_test_t {
-	struct bpf_fentry_test_t *a;
-};
-
-struct bpf_raw_tp_test_run_info {
-	struct bpf_prog *prog;
-	void *ctx;
-	u32 retval;
-};
-
-struct ethtool_cmd {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertising;
-	__u16 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 transceiver;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u32 maxtxpkt;
-	__u32 maxrxpkt;
-	__u16 speed_hi;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__u32 lp_advertising;
-	__u32 reserved[2];
-};
-
-struct ethtool_value {
-	__u32 cmd;
-	__u32 data;
-};
-
-enum tunable_id {
-	ETHTOOL_ID_UNSPEC = 0,
-	ETHTOOL_RX_COPYBREAK = 1,
-	ETHTOOL_TX_COPYBREAK = 2,
-	ETHTOOL_PFC_PREVENTION_TOUT = 3,
-	__ETHTOOL_TUNABLE_COUNT = 4,
-};
-
-enum tunable_type_id {
-	ETHTOOL_TUNABLE_UNSPEC = 0,
-	ETHTOOL_TUNABLE_U8 = 1,
-	ETHTOOL_TUNABLE_U16 = 2,
-	ETHTOOL_TUNABLE_U32 = 3,
-	ETHTOOL_TUNABLE_U64 = 4,
-	ETHTOOL_TUNABLE_STRING = 5,
-	ETHTOOL_TUNABLE_S8 = 6,
-	ETHTOOL_TUNABLE_S16 = 7,
-	ETHTOOL_TUNABLE_S32 = 8,
-	ETHTOOL_TUNABLE_S64 = 9,
-};
-
-enum phy_tunable_id {
-	ETHTOOL_PHY_ID_UNSPEC = 0,
-	ETHTOOL_PHY_DOWNSHIFT = 1,
-	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
-	ETHTOOL_PHY_EDPD = 3,
-	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
-};
-
-struct ethtool_gstrings {
-	__u32 cmd;
-	__u32 string_set;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_sset_info {
-	__u32 cmd;
-	__u32 reserved;
-	__u64 sset_mask;
-	__u32 data[0];
-};
-
-struct ethtool_perm_addr {
-	__u32 cmd;
-	__u32 size;
-	__u8 data[0];
-};
-
-enum ethtool_flags {
-	ETH_FLAG_TXVLAN = 128,
-	ETH_FLAG_RXVLAN = 256,
-	ETH_FLAG_LRO = 32768,
-	ETH_FLAG_NTUPLE = 134217728,
-	ETH_FLAG_RXHASH = 268435456,
-};
-
-struct ethtool_rxfh {
-	__u32 cmd;
-	__u32 rss_context;
-	__u32 indir_size;
-	__u32 key_size;
-	__u8 hfunc;
-	__u8 rsvd8[3];
-	__u32 rsvd32;
-	__u32 rss_config[0];
-};
-
-struct ethtool_get_features_block {
-	__u32 available;
-	__u32 requested;
-	__u32 active;
-	__u32 never_changed;
-};
-
-struct ethtool_gfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_get_features_block features[0];
-};
-
-struct ethtool_set_features_block {
-	__u32 valid;
-	__u32 requested;
-};
-
-struct ethtool_sfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_set_features_block features[0];
-};
-
-enum ethtool_sfeatures_retval_bits {
-	ETHTOOL_F_UNSUPPORTED__BIT = 0,
-	ETHTOOL_F_WISH__BIT = 1,
-	ETHTOOL_F_COMPAT__BIT = 2,
-};
-
-struct ethtool_per_queue_op {
-	__u32 cmd;
-	__u32 sub_command;
-	__u32 queue_mask[128];
-	char data[0];
-};
-
-enum {
-	ETH_RSS_HASH_TOP_BIT = 0,
-	ETH_RSS_HASH_XOR_BIT = 1,
-	ETH_RSS_HASH_CRC32_BIT = 2,
-	ETH_RSS_HASH_FUNCS_COUNT = 3,
-};
-
-struct ethtool_rx_flow_rule {
-	struct flow_rule *rule;
-	long unsigned int priv[0];
-};
-
-struct ethtool_rx_flow_spec_input {
-	const struct ethtool_rx_flow_spec *fs;
-	u32 rss_ctx;
-};
-
-struct ethtool_link_usettings {
-	struct ethtool_link_settings base;
-	struct {
-		__u32 supported[3];
-		__u32 advertising[3];
-		__u32 lp_advertising[3];
-	} link_modes;
-};
-
-struct ethtool_rx_flow_key {
-	struct flow_dissector_key_basic basic;
-	union {
-		struct flow_dissector_key_ipv4_addrs ipv4;
-		struct flow_dissector_key_ipv6_addrs ipv6;
-	};
-	struct flow_dissector_key_ports tp;
-	struct flow_dissector_key_ip ip;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_eth_addrs eth_addrs;
-	long: 48;
-};
-
-struct ethtool_rx_flow_match {
-	struct flow_dissector dissector;
-	int: 32;
-	struct ethtool_rx_flow_key key;
-	struct ethtool_rx_flow_key mask;
-};
-
-enum {
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
-	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
-	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
-};
-
-enum {
-	ETHTOOL_MSG_USER_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET = 1,
-	ETHTOOL_MSG_LINKINFO_GET = 2,
-	ETHTOOL_MSG_LINKINFO_SET = 3,
-	ETHTOOL_MSG_LINKMODES_GET = 4,
-	ETHTOOL_MSG_LINKMODES_SET = 5,
-	ETHTOOL_MSG_LINKSTATE_GET = 6,
-	ETHTOOL_MSG_DEBUG_GET = 7,
-	ETHTOOL_MSG_DEBUG_SET = 8,
-	ETHTOOL_MSG_WOL_GET = 9,
-	ETHTOOL_MSG_WOL_SET = 10,
-	ETHTOOL_MSG_FEATURES_GET = 11,
-	ETHTOOL_MSG_FEATURES_SET = 12,
-	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
-	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
-	ETHTOOL_MSG_RINGS_GET = 15,
-	ETHTOOL_MSG_RINGS_SET = 16,
-	ETHTOOL_MSG_CHANNELS_GET = 17,
-	ETHTOOL_MSG_CHANNELS_SET = 18,
-	ETHTOOL_MSG_COALESCE_GET = 19,
-	ETHTOOL_MSG_COALESCE_SET = 20,
-	ETHTOOL_MSG_PAUSE_GET = 21,
-	ETHTOOL_MSG_PAUSE_SET = 22,
-	ETHTOOL_MSG_EEE_GET = 23,
-	ETHTOOL_MSG_EEE_SET = 24,
-	ETHTOOL_MSG_TSINFO_GET = 25,
-	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
-	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
-	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
-	__ETHTOOL_MSG_USER_CNT = 29,
-	ETHTOOL_MSG_USER_MAX = 28,
-};
-
-enum {
-	ETHTOOL_A_HEADER_UNSPEC = 0,
-	ETHTOOL_A_HEADER_DEV_INDEX = 1,
-	ETHTOOL_A_HEADER_DEV_NAME = 2,
-	ETHTOOL_A_HEADER_FLAGS = 3,
-	__ETHTOOL_A_HEADER_CNT = 4,
-	ETHTOOL_A_HEADER_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_STRSET_UNSPEC = 0,
-	ETHTOOL_A_STRSET_HEADER = 1,
-	ETHTOOL_A_STRSET_STRINGSETS = 2,
-	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
-	__ETHTOOL_A_STRSET_CNT = 4,
-	ETHTOOL_A_STRSET_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_LINKINFO_UNSPEC = 0,
-	ETHTOOL_A_LINKINFO_HEADER = 1,
-	ETHTOOL_A_LINKINFO_PORT = 2,
-	ETHTOOL_A_LINKINFO_PHYADDR = 3,
-	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
-	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
-	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
-	__ETHTOOL_A_LINKINFO_CNT = 7,
-	ETHTOOL_A_LINKINFO_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_LINKMODES_UNSPEC = 0,
-	ETHTOOL_A_LINKMODES_HEADER = 1,
-	ETHTOOL_A_LINKMODES_AUTONEG = 2,
-	ETHTOOL_A_LINKMODES_OURS = 3,
-	ETHTOOL_A_LINKMODES_PEER = 4,
-	ETHTOOL_A_LINKMODES_SPEED = 5,
-	ETHTOOL_A_LINKMODES_DUPLEX = 6,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
-	__ETHTOOL_A_LINKMODES_CNT = 9,
-	ETHTOOL_A_LINKMODES_MAX = 8,
-};
-
-enum {
-	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
-	ETHTOOL_A_LINKSTATE_HEADER = 1,
-	ETHTOOL_A_LINKSTATE_LINK = 2,
-	ETHTOOL_A_LINKSTATE_SQI = 3,
-	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
-	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
-	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
-	__ETHTOOL_A_LINKSTATE_CNT = 7,
-	ETHTOOL_A_LINKSTATE_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_DEBUG_UNSPEC = 0,
-	ETHTOOL_A_DEBUG_HEADER = 1,
-	ETHTOOL_A_DEBUG_MSGMASK = 2,
-	__ETHTOOL_A_DEBUG_CNT = 3,
-	ETHTOOL_A_DEBUG_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_WOL_UNSPEC = 0,
-	ETHTOOL_A_WOL_HEADER = 1,
-	ETHTOOL_A_WOL_MODES = 2,
-	ETHTOOL_A_WOL_SOPASS = 3,
-	__ETHTOOL_A_WOL_CNT = 4,
-	ETHTOOL_A_WOL_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_FEATURES_UNSPEC = 0,
-	ETHTOOL_A_FEATURES_HEADER = 1,
-	ETHTOOL_A_FEATURES_HW = 2,
-	ETHTOOL_A_FEATURES_WANTED = 3,
-	ETHTOOL_A_FEATURES_ACTIVE = 4,
-	ETHTOOL_A_FEATURES_NOCHANGE = 5,
-	__ETHTOOL_A_FEATURES_CNT = 6,
-	ETHTOOL_A_FEATURES_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
-	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
-	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
-	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
-	ETHTOOL_A_PRIVFLAGS_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_RINGS_UNSPEC = 0,
-	ETHTOOL_A_RINGS_HEADER = 1,
-	ETHTOOL_A_RINGS_RX_MAX = 2,
-	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
-	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
-	ETHTOOL_A_RINGS_TX_MAX = 5,
-	ETHTOOL_A_RINGS_RX = 6,
-	ETHTOOL_A_RINGS_RX_MINI = 7,
-	ETHTOOL_A_RINGS_RX_JUMBO = 8,
-	ETHTOOL_A_RINGS_TX = 9,
-	__ETHTOOL_A_RINGS_CNT = 10,
-	ETHTOOL_A_RINGS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_CHANNELS_UNSPEC = 0,
-	ETHTOOL_A_CHANNELS_HEADER = 1,
-	ETHTOOL_A_CHANNELS_RX_MAX = 2,
-	ETHTOOL_A_CHANNELS_TX_MAX = 3,
-	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
-	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
-	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
-	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
-	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
-	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
-	__ETHTOOL_A_CHANNELS_CNT = 10,
-	ETHTOOL_A_CHANNELS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_COALESCE_UNSPEC = 0,
-	ETHTOOL_A_COALESCE_HEADER = 1,
-	ETHTOOL_A_COALESCE_RX_USECS = 2,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
-	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
-	ETHTOOL_A_COALESCE_TX_USECS = 6,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
-	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
-	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
-	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
-	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
-	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
-	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
-	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
-	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
-	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
-	__ETHTOOL_A_COALESCE_CNT = 24,
-	ETHTOOL_A_COALESCE_MAX = 23,
-};
-
-enum {
-	ETHTOOL_A_PAUSE_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_HEADER = 1,
-	ETHTOOL_A_PAUSE_AUTONEG = 2,
-	ETHTOOL_A_PAUSE_RX = 3,
-	ETHTOOL_A_PAUSE_TX = 4,
-	ETHTOOL_A_PAUSE_STATS = 5,
-	__ETHTOOL_A_PAUSE_CNT = 6,
-	ETHTOOL_A_PAUSE_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_EEE_UNSPEC = 0,
-	ETHTOOL_A_EEE_HEADER = 1,
-	ETHTOOL_A_EEE_MODES_OURS = 2,
-	ETHTOOL_A_EEE_MODES_PEER = 3,
-	ETHTOOL_A_EEE_ACTIVE = 4,
-	ETHTOOL_A_EEE_ENABLED = 5,
-	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
-	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
-	__ETHTOOL_A_EEE_CNT = 8,
-	ETHTOOL_A_EEE_MAX = 7,
-};
-
-enum {
-	ETHTOOL_A_TSINFO_UNSPEC = 0,
-	ETHTOOL_A_TSINFO_HEADER = 1,
-	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
-	ETHTOOL_A_TSINFO_TX_TYPES = 3,
-	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
-	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
-	__ETHTOOL_A_TSINFO_CNT = 6,
-	ETHTOOL_A_TSINFO_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_HEADER = 1,
-	__ETHTOOL_A_CABLE_TEST_CNT = 2,
-	ETHTOOL_A_CABLE_TEST_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
-	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
-	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
-	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
-	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
-	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
-};
-
-enum ethtool_multicast_groups {
-	ETHNL_MCGRP_MONITOR = 0,
-};
-
-struct ethnl_req_info {
-	struct net_device *dev;
-	u32 flags;
-};
-
-struct ethnl_reply_data {
-	struct net_device *dev;
-};
-
-struct ethnl_request_ops {
-	u8 request_cmd;
-	u8 reply_cmd;
-	u16 hdr_attr;
-	unsigned int req_info_size;
-	unsigned int reply_data_size;
-	bool allow_nodev_do;
-	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
-	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
-	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	void (*cleanup_data)(struct ethnl_reply_data *);
-};
-
-struct ethnl_dump_ctx {
-	const struct ethnl_request_ops *ops;
-	struct ethnl_req_info *req_info;
-	struct ethnl_reply_data *reply_data;
-	int pos_hash;
-	int pos_idx;
-};
-
-typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
-
-enum {
-	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BIT_INDEX = 1,
-	ETHTOOL_A_BITSET_BIT_NAME = 2,
-	ETHTOOL_A_BITSET_BIT_VALUE = 3,
-	__ETHTOOL_A_BITSET_BIT_CNT = 4,
-	ETHTOOL_A_BITSET_BIT_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BITS_BIT = 1,
-	__ETHTOOL_A_BITSET_BITS_CNT = 2,
-	ETHTOOL_A_BITSET_BITS_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_BITSET_UNSPEC = 0,
-	ETHTOOL_A_BITSET_NOMASK = 1,
-	ETHTOOL_A_BITSET_SIZE = 2,
-	ETHTOOL_A_BITSET_BITS = 3,
-	ETHTOOL_A_BITSET_VALUE = 4,
-	ETHTOOL_A_BITSET_MASK = 5,
-	__ETHTOOL_A_BITSET_CNT = 6,
-	ETHTOOL_A_BITSET_MAX = 5,
-};
-
-typedef const char (* const ethnl_string_array_t)[32];
-
-enum {
 	ETHTOOL_A_STRING_UNSPEC = 0,
 	ETHTOOL_A_STRING_INDEX = 1,
 	ETHTOOL_A_STRING_VALUE = 2,
@@ -103575,6 +137782,13 @@
 	ETHTOOL_A_STRINGSETS_MAX = 1,
 };
 
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
+};
+
 struct strset_info {
 	bool per_dev;
 	bool free_strings;
@@ -103590,191 +137804,25 @@
 
 struct strset_reply_data {
 	struct ethnl_reply_data base;
-	struct strset_info sets[16];
+	struct strset_info sets[21];
 };
 
-struct linkinfo_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_link_ksettings ksettings;
-	struct ethtool_link_settings *lsettings;
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
 };
 
-struct linkmodes_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_link_ksettings ksettings;
-	struct ethtool_link_settings *lsettings;
-	bool peer_empty;
-};
-
-struct link_mode_info {
-	int speed;
-	u8 duplex;
-};
-
-struct linkstate_reply_data {
-	struct ethnl_reply_data base;
-	int link;
-	int sqi;
-	int sqi_max;
-	bool link_ext_state_provided;
-	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
-};
-
-struct debug_reply_data {
-	struct ethnl_reply_data base;
-	u32 msg_mask;
-};
-
-struct wol_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_wolinfo wol;
-	bool show_sopass;
-};
-
-struct features_reply_data {
-	struct ethnl_reply_data base;
-	u32 hw[2];
-	u32 wanted[2];
-	u32 active[2];
-	u32 nochange[2];
-	u32 all[2];
-};
-
-struct privflags_reply_data {
-	struct ethnl_reply_data base;
-	const char (*priv_flag_names)[32];
-	unsigned int n_priv_flags;
-	u32 priv_flags;
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
 };
 
 struct rings_reply_data {
 	struct ethnl_reply_data base;
 	struct ethtool_ringparam ringparam;
-};
-
-struct channels_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_channels channels;
-};
-
-struct coalesce_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_coalesce coalesce;
-	u32 supported_params;
-};
-
-enum {
-	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_STAT_PAD = 1,
-	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
-	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
-	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
-	ETHTOOL_A_PAUSE_STAT_MAX = 3,
-};
-
-struct pause_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_pauseparam pauseparam;
-	struct ethtool_pause_stats pausestat;
-};
-
-struct eee_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_eee eee;
-};
-
-struct tsinfo_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_ts_info ts_info;
-};
-
-enum {
-	ETHTOOL_A_CABLE_PAIR_A = 0,
-	ETHTOOL_A_CABLE_PAIR_B = 1,
-	ETHTOOL_A_CABLE_PAIR_C = 2,
-	ETHTOOL_A_CABLE_PAIR_D = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
-	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
-	ETHTOOL_A_CABLE_RESULT_CODE = 2,
-	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
-	ETHTOOL_A_CABLE_RESULT_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
-	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_NEST_RESULT = 1,
-	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
-	__ETHTOOL_A_CABLE_NEST_CNT = 3,
-	ETHTOOL_A_CABLE_NEST_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
-	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
-	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
-	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
-	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
-};
-
-enum {
-	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
-	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
-	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
-	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
-	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
-	ETHTOOL_A_CABLE_PULSE_mV = 1,
-	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
-	ETHTOOL_A_CABLE_PULSE_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
-	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
-	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
-	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
-	__ETHTOOL_A_CABLE_STEP_CNT = 4,
-	ETHTOOL_A_CABLE_STEP_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
-	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
-	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
-	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
-	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+	struct kernel_ethtool_ringparam kernel_ringparam;
 };
 
 enum {
@@ -103814,92 +137862,12 @@
 	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
 };
 
-struct udp_tunnel_nic_ops {
-	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
-	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*reset_ntf)(struct net_device *);
-	size_t (*dump_size)(struct net_device *, unsigned int);
-	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
-};
-
 struct ethnl_tunnel_info_dump_ctx {
 	struct ethnl_req_info req_info;
 	int pos_hash;
 	int pos_idx;
 };
 
-struct nf_hook_entries_rcu_head {
-	struct callback_head head;
-	void *allocation;
-};
-
-struct nf_conn___2;
-
-enum nf_nat_manip_type;
-
-struct nf_nat_hook {
-	int (*parse_nat_setup)(struct nf_conn___2 *, enum nf_nat_manip_type, const struct nlattr *);
-	void (*decode_session)(struct sk_buff *, struct flowi *);
-	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn___2 *, enum nf_nat_manip_type, enum ip_conntrack_dir);
-};
-
-struct nf_conntrack_tuple___2;
-
-struct nf_ct_hook {
-	int (*update)(struct net *, struct sk_buff *);
-	void (*destroy)(struct nf_conntrack *);
-	bool (*get_tuple_skb)(struct nf_conntrack_tuple___2 *, const struct sk_buff *);
-};
-
-struct nfnl_ct_hook {
-	struct nf_conn___2 * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);
-	size_t (*build_size)(const struct nf_conn___2 *);
-	int (*build)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, u_int16_t, u_int16_t);
-	int (*parse)(const struct nlattr *, struct nf_conn___2 *);
-	int (*attach_expect)(const struct nlattr *, struct nf_conn___2 *, u32, u32);
-	void (*seq_adjust)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, s32);
-};
-
-struct nf_ipv6_ops {
-	void (*route_input)(struct sk_buff *);
-	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
-};
-
-struct nf_queue_entry {
-	struct list_head list;
-	struct sk_buff *skb;
-	unsigned int id;
-	unsigned int hook_index;
-	struct net_device *physin;
-	struct net_device *physout;
-	struct nf_hook_state state;
-	u16 size;
-};
-
-struct nf_loginfo {
-	u_int8_t type;
-	union {
-		struct {
-			u_int32_t copy_len;
-			u_int16_t group;
-			u_int16_t qthreshold;
-			u_int16_t flags;
-		} ulog;
-		struct {
-			u_int8_t level;
-			u_int8_t logflags;
-		} log;
-	} u;
-};
-
-struct nf_log_buf {
-	unsigned int count;
-	char buf[1020];
-};
-
 struct nf_bridge_info {
 	enum {
 		BRNF_PROTO_UNCHANGED = 0,
@@ -103919,413 +137887,9 @@
 	};
 };
 
-struct ip_rt_info {
-	__be32 daddr;
-	__be32 saddr;
-	u_int8_t tos;
-	u_int32_t mark;
-};
-
-struct ip6_rt_info {
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	u_int32_t mark;
-};
-
-struct nf_sockopt_ops {
-	struct list_head list;
-	u_int8_t pf;
-	int set_optmin;
-	int set_optmax;
-	int (*set)(struct sock *, int, sockptr_t, unsigned int);
-	int get_optmin;
-	int get_optmax;
-	int (*get)(struct sock *, int, void *, int *);
-	struct module *owner;
-};
-
-struct ip_mreqn {
-	struct in_addr imr_multiaddr;
-	struct in_addr imr_address;
-	int imr_ifindex;
-};
-
-struct rtmsg {
-	unsigned char rtm_family;
-	unsigned char rtm_dst_len;
-	unsigned char rtm_src_len;
-	unsigned char rtm_tos;
-	unsigned char rtm_table;
-	unsigned char rtm_protocol;
-	unsigned char rtm_scope;
-	unsigned char rtm_type;
-	unsigned int rtm_flags;
-};
-
-struct rtvia {
-	__kernel_sa_family_t rtvia_family;
-	__u8 rtvia_addr[0];
-};
-
-struct ip_sf_list;
-
-struct ip_mc_list {
-	struct in_device *interface;
-	__be32 multiaddr;
-	unsigned int sfmode;
-	struct ip_sf_list *sources;
-	struct ip_sf_list *tomb;
-	long unsigned int sfcount[2];
-	union {
-		struct ip_mc_list *next;
-		struct ip_mc_list *next_rcu;
-	};
-	struct ip_mc_list *next_hash;
-	struct timer_list timer;
-	int users;
-	refcount_t refcnt;
-	spinlock_t lock;
-	char tm_running;
-	char reporter;
-	char unsolicit_count;
-	char loaded;
-	unsigned char gsquery;
-	unsigned char crcount;
-	struct callback_head rcu;
-};
-
-struct ip_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct callback_head rcu;
-	__be32 sl_addr[0];
-};
-
-struct ip_mc_socklist {
-	struct ip_mc_socklist *next_rcu;
-	struct ip_mreqn multi;
-	unsigned int sfmode;
-	struct ip_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ip_sf_list {
-	struct ip_sf_list *sf_next;
-	long unsigned int sf_count[2];
-	__be32 sf_inaddr;
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ipv4_addr_key {
-	__be32 addr;
-	int vif;
-};
-
-struct inetpeer_addr {
-	union {
-		struct ipv4_addr_key a4;
-		struct in6_addr a6;
-		u32 key[4];
-	};
-	__u16 family;
-};
-
-struct inet_peer {
-	struct rb_node rb_node;
-	struct inetpeer_addr daddr;
-	u32 metrics[17];
-	u32 rate_tokens;
-	u32 n_redirects;
-	long unsigned int rate_last;
-	union {
-		struct {
-			atomic_t rid;
-		};
-		struct callback_head rcu;
-	};
-	__u32 dtime;
-	refcount_t refcnt;
-};
-
-struct fib_rt_info {
-	struct fib_info *fi;
-	u32 tb_id;
-	__be32 dst;
-	int dst_len;
-	u8 tos;
-	u8 type;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
-};
-
-struct uncached_list {
-	spinlock_t lock;
-	struct list_head head;
-};
-
-struct ip_rt_acct {
-	__u32 o_bytes;
-	__u32 o_packets;
-	__u32 i_bytes;
-	__u32 i_packets;
-};
-
-struct rt_cache_stat {
-	unsigned int in_slow_tot;
-	unsigned int in_slow_mc;
-	unsigned int in_no_route;
-	unsigned int in_brd;
-	unsigned int in_martian_dst;
-	unsigned int in_martian_src;
-	unsigned int out_slow_tot;
-	unsigned int out_slow_mc;
-};
-
-struct fib_alias {
-	struct hlist_node fa_list;
-	struct fib_info *fa_info;
-	u8 fa_tos;
-	u8 fa_type;
-	u8 fa_state;
-	u8 fa_slen;
-	u32 tb_id;
-	s16 fa_default;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
-	struct callback_head rcu;
-};
-
-struct fib_prop {
-	int error;
-	u8 scope;
-};
-
-struct net_offload {
-	struct offload_callbacks callbacks;
-	unsigned int flags;
-};
-
-struct raw_hashinfo {
-	rwlock_t lock;
-	struct hlist_head ht[256];
-};
-
-enum ip_defrag_users {
-	IP_DEFRAG_LOCAL_DELIVER = 0,
-	IP_DEFRAG_CALL_RA_CHAIN = 1,
-	IP_DEFRAG_CONNTRACK_IN = 2,
-	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
-	IP_DEFRAG_CONNTRACK_OUT = 65538,
-	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
-	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
-	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
-	IP_DEFRAG_VS_IN = 196610,
-	IP_DEFRAG_VS_OUT = 196611,
-	IP_DEFRAG_VS_FWD = 196612,
-	IP_DEFRAG_AF_PACKET = 196613,
-	IP_DEFRAG_MACVLAN = 196614,
-};
-
-enum {
-	INET_FRAG_FIRST_IN = 1,
-	INET_FRAG_LAST_IN = 2,
-	INET_FRAG_COMPLETE = 4,
-	INET_FRAG_HASH_DEAD = 8,
-};
-
-struct ipq {
-	struct inet_frag_queue q;
-	u8 ecn;
-	u16 max_df_size;
-	int iif;
-	unsigned int rid;
-	struct inet_peer *peer;
-};
-
-struct ip_options_data {
-	struct ip_options_rcu opt;
-	char data[40];
-};
-
-struct ipcm_cookie {
-	struct sockcm_cookie sockc;
-	__be32 addr;
-	int oif;
-	struct ip_options_rcu *opt;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-};
-
-struct ip_fraglist_iter {
-	struct sk_buff *frag;
-	struct iphdr *iph;
-	int offset;
-	unsigned int hlen;
-};
-
-struct ip_frag_state {
-	bool DF;
-	unsigned int hlen;
-	unsigned int ll_rs;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	__be16 not_last_frag;
-};
-
-struct ip_reply_arg {
-	struct kvec iov[1];
-	int flags;
-	__wsum csum;
-	int csumoffset;
-	int bound_dev_if;
-	u8 tos;
-	kuid_t uid;
-};
-
-struct ip_mreq_source {
-	__be32 imr_multiaddr;
-	__be32 imr_interface;
-	__be32 imr_sourceaddr;
-};
-
-struct ip_msfilter {
-	__be32 imsf_multiaddr;
-	__be32 imsf_interface;
-	__u32 imsf_fmode;
-	__u32 imsf_numsrc;
-	__be32 imsf_slist[1];
-};
-
-struct group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-};
-
-struct group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-};
-
-struct group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-};
-
-struct in_pktinfo {
-	int ipi_ifindex;
-	struct in_addr ipi_spec_dst;
-	struct in_addr ipi_addr;
-};
-
-struct compat_group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-} __attribute__((packed));
-
-struct compat_group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-} __attribute__((packed));
-
-struct compat_group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-} __attribute__((packed));
-
-enum {
-	BPFILTER_IPT_SO_SET_REPLACE = 64,
-	BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
-	BPFILTER_IPT_SET_MAX = 66,
-};
-
-enum {
-	BPFILTER_IPT_SO_GET_INFO = 64,
-	BPFILTER_IPT_SO_GET_ENTRIES = 65,
-	BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
-	BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
-	BPFILTER_IPT_GET_MAX = 68,
-};
-
-struct tcpvegas_info {
-	__u32 tcpv_enabled;
-	__u32 tcpv_rttcnt;
-	__u32 tcpv_rtt;
-	__u32 tcpv_minrtt;
-};
-
-struct tcp_dctcp_info {
-	__u16 dctcp_enabled;
-	__u16 dctcp_ce_state;
-	__u32 dctcp_alpha;
-	__u32 dctcp_ab_ecn;
-	__u32 dctcp_ab_tot;
-};
-
-struct tcp_bbr_info {
-	__u32 bbr_bw_lo;
-	__u32 bbr_bw_hi;
-	__u32 bbr_min_rtt;
-	__u32 bbr_pacing_gain;
-	__u32 bbr_cwnd_gain;
-};
-
-union tcp_cc_info {
-	struct tcpvegas_info vegas;
-	struct tcp_dctcp_info dctcp;
-	struct tcp_bbr_info bbr;
-};
-
-enum {
-	BPF_TCP_ESTABLISHED = 1,
-	BPF_TCP_SYN_SENT = 2,
-	BPF_TCP_SYN_RECV = 3,
-	BPF_TCP_FIN_WAIT1 = 4,
-	BPF_TCP_FIN_WAIT2 = 5,
-	BPF_TCP_TIME_WAIT = 6,
-	BPF_TCP_CLOSE = 7,
-	BPF_TCP_CLOSE_WAIT = 8,
-	BPF_TCP_LAST_ACK = 9,
-	BPF_TCP_LISTEN = 10,
-	BPF_TCP_CLOSING = 11,
-	BPF_TCP_NEW_SYN_RECV = 12,
-	BPF_TCP_MAX_STATES = 13,
-};
-
-enum inet_csk_ack_state_t {
-	ICSK_ACK_SCHED = 1,
-	ICSK_ACK_TIMER = 2,
-	ICSK_ACK_PUSHED = 4,
-	ICSK_ACK_PUSHED2 = 8,
-	ICSK_ACK_NOW = 16,
-};
-
-enum {
-	TCP_FLAG_CWR = 32768,
-	TCP_FLAG_ECE = 16384,
-	TCP_FLAG_URG = 8192,
-	TCP_FLAG_ACK = 4096,
-	TCP_FLAG_PSH = 2048,
-	TCP_FLAG_RST = 1024,
-	TCP_FLAG_SYN = 512,
-	TCP_FLAG_FIN = 256,
-	TCP_RESERVED_BITS = 15,
-	TCP_DATA_OFFSET = 240,
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
 };
 
 struct tcp_repair_opt {
@@ -104342,72 +137906,6 @@
 };
 
 enum {
-	TCP_NO_QUEUE = 0,
-	TCP_RECV_QUEUE = 1,
-	TCP_SEND_QUEUE = 2,
-	TCP_QUEUES_NR = 3,
-};
-
-struct tcp_info {
-	__u8 tcpi_state;
-	__u8 tcpi_ca_state;
-	__u8 tcpi_retransmits;
-	__u8 tcpi_probes;
-	__u8 tcpi_backoff;
-	__u8 tcpi_options;
-	__u8 tcpi_snd_wscale: 4;
-	__u8 tcpi_rcv_wscale: 4;
-	__u8 tcpi_delivery_rate_app_limited: 1;
-	__u8 tcpi_fastopen_client_fail: 2;
-	__u32 tcpi_rto;
-	__u32 tcpi_ato;
-	__u32 tcpi_snd_mss;
-	__u32 tcpi_rcv_mss;
-	__u32 tcpi_unacked;
-	__u32 tcpi_sacked;
-	__u32 tcpi_lost;
-	__u32 tcpi_retrans;
-	__u32 tcpi_fackets;
-	__u32 tcpi_last_data_sent;
-	__u32 tcpi_last_ack_sent;
-	__u32 tcpi_last_data_recv;
-	__u32 tcpi_last_ack_recv;
-	__u32 tcpi_pmtu;
-	__u32 tcpi_rcv_ssthresh;
-	__u32 tcpi_rtt;
-	__u32 tcpi_rttvar;
-	__u32 tcpi_snd_ssthresh;
-	__u32 tcpi_snd_cwnd;
-	__u32 tcpi_advmss;
-	__u32 tcpi_reordering;
-	__u32 tcpi_rcv_rtt;
-	__u32 tcpi_rcv_space;
-	__u32 tcpi_total_retrans;
-	__u64 tcpi_pacing_rate;
-	__u64 tcpi_max_pacing_rate;
-	__u64 tcpi_bytes_acked;
-	__u64 tcpi_bytes_received;
-	__u32 tcpi_segs_out;
-	__u32 tcpi_segs_in;
-	__u32 tcpi_notsent_bytes;
-	__u32 tcpi_min_rtt;
-	__u32 tcpi_data_segs_in;
-	__u32 tcpi_data_segs_out;
-	__u64 tcpi_delivery_rate;
-	__u64 tcpi_busy_time;
-	__u64 tcpi_rwnd_limited;
-	__u64 tcpi_sndbuf_limited;
-	__u32 tcpi_delivered;
-	__u32 tcpi_delivered_ce;
-	__u64 tcpi_bytes_sent;
-	__u64 tcpi_bytes_retrans;
-	__u32 tcpi_dsack_dups;
-	__u32 tcpi_reord_seen;
-	__u32 tcpi_rcv_ooopack;
-	__u32 tcpi_snd_wnd;
-};
-
-enum {
 	TCP_NLA_PAD = 0,
 	TCP_NLA_BUSY = 1,
 	TCP_NLA_RWND_LIMITED = 2,
@@ -104434,6 +137932,7 @@
 	TCP_NLA_TIMEOUT_REHASH = 23,
 	TCP_NLA_BYTES_NOTSENT = 24,
 	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
 };
 
 struct tcp_zerocopy_receive {
@@ -104442,19 +137941,34 @@
 	__u32 recv_skip_hint;
 	__u32 inq;
 	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
 };
 
-struct tcp_md5sig_pool {
-	struct ahash_request *md5_req;
-	void *scratch;
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
 };
 
-enum tcp_chrono {
-	TCP_CHRONO_UNSPEC = 0,
-	TCP_CHRONO_BUSY = 1,
-	TCP_CHRONO_RWND_LIMITED = 2,
-	TCP_CHRONO_SNDBUF_LIMITED = 3,
-	__TCP_CHRONO_MAX = 4,
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
 };
 
 struct tcp_splice_state {
@@ -104463,895 +137977,13 @@
 	unsigned int flags;
 };
 
-enum tcp_fastopen_client_fail {
-	TFO_STATUS_UNSPEC = 0,
-	TFO_COOKIE_UNAVAILABLE = 1,
-	TFO_DATA_NOT_ACKED = 2,
-	TFO_SYN_RETRANSMITTED = 3,
-};
-
-struct tcp_sack_block_wire {
-	__be32 start_seq;
-	__be32 end_seq;
-};
-
-struct static_key_false_deferred {
-	struct static_key_false key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-struct mptcp_ext {
-	union {
-		u64 data_ack;
-		u32 data_ack32;
-	};
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-};
-
-enum tcp_queue {
-	TCP_FRAG_IN_WRITE_QUEUE = 0,
-	TCP_FRAG_IN_RTX_QUEUE = 1,
-};
-
-enum tcp_ca_ack_event_flags {
-	CA_ACK_SLOWPATH = 1,
-	CA_ACK_WIN_UPDATE = 2,
-	CA_ACK_ECE = 4,
-};
-
-struct tcp_sacktag_state {
-	u64 first_sackt;
-	u64 last_sackt;
-	u32 reord;
-	u32 sack_delivered;
-	int flag;
-	unsigned int mss_now;
-	struct rate_sample *rate;
-};
-
-enum pkt_hash_types {
-	PKT_HASH_TYPE_NONE = 0,
-	PKT_HASH_TYPE_L2 = 1,
-	PKT_HASH_TYPE_L3 = 2,
-	PKT_HASH_TYPE_L4 = 3,
-};
-
-enum {
-	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
-	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
-};
-
-enum tsq_flags {
-	TSQF_THROTTLED = 1,
-	TSQF_QUEUED = 2,
-	TCPF_TSQ_DEFERRED = 4,
-	TCPF_WRITE_TIMER_DEFERRED = 8,
-	TCPF_DELACK_TIMER_DEFERRED = 16,
-	TCPF_MTU_REDUCED_DEFERRED = 32,
-};
-
-struct mptcp_out_options {
-	u16 suboptions;
-	u64 sndr_key;
-	u64 rcvr_key;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-	u8 addr_id;
-	u64 ahmac;
-	u8 rm_id;
-	u8 join_id;
-	u8 backup;
-	u32 nonce;
-	u64 thmac;
-	u32 token;
-	u8 hmac[20];
-	struct mptcp_ext ext_copy;
-};
-
-struct tcp_out_options {
-	u16 options;
-	u16 mss;
-	u8 ws;
-	u8 num_sack_blocks;
-	u8 hash_size;
-	u8 bpf_opt_len;
-	__u8 *hash_location;
-	__u32 tsval;
-	__u32 tsecr;
-	struct tcp_fastopen_cookie *fastopen_cookie;
-	struct mptcp_out_options mptcp;
-};
-
-struct tsq_tasklet {
-	struct tasklet_struct tasklet;
-	struct list_head head;
-};
-
-struct tcp_md5sig {
-	struct __kernel_sockaddr_storage tcpm_addr;
-	__u8 tcpm_flags;
-	__u8 tcpm_prefixlen;
-	__u16 tcpm_keylen;
-	int tcpm_ifindex;
-	__u8 tcpm_key[80];
-};
-
-struct icmp_err {
-	int errno;
-	unsigned int fatal: 1;
-};
-
-enum tcp_tw_status {
-	TCP_TW_SUCCESS = 0,
-	TCP_TW_RST = 1,
-	TCP_TW_ACK = 2,
-	TCP_TW_SYN = 3,
-};
-
-struct tcp4_pseudohdr {
-	__be32 saddr;
-	__be32 daddr;
-	__u8 pad;
-	__u8 protocol;
-	__be16 len;
-};
-
-enum tcp_seq_states {
-	TCP_SEQ_STATE_LISTENING = 0,
-	TCP_SEQ_STATE_ESTABLISHED = 1,
-};
-
-struct tcp_seq_afinfo {
-	sa_family_t family;
-};
-
-struct tcp_iter_state {
-	struct seq_net_private p;
-	enum tcp_seq_states state;
-	struct sock *syn_wait_sk;
-	struct tcp_seq_afinfo *bpf_seq_afinfo;
-	int bucket;
-	int offset;
-	int sbucket;
-	int num;
-	loff_t last_pos;
-};
-
-struct bpf_iter__tcp {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct sock_common *sk_common;
-	};
-	uid_t uid;
-};
-
-enum tcp_metric_index {
-	TCP_METRIC_RTT = 0,
-	TCP_METRIC_RTTVAR = 1,
-	TCP_METRIC_SSTHRESH = 2,
-	TCP_METRIC_CWND = 3,
-	TCP_METRIC_REORDERING = 4,
-	TCP_METRIC_RTT_US = 5,
-	TCP_METRIC_RTTVAR_US = 6,
-	__TCP_METRIC_MAX = 7,
-};
-
-enum {
-	TCP_METRICS_ATTR_UNSPEC = 0,
-	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
-	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
-	TCP_METRICS_ATTR_AGE = 3,
-	TCP_METRICS_ATTR_TW_TSVAL = 4,
-	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
-	TCP_METRICS_ATTR_VALS = 6,
-	TCP_METRICS_ATTR_FOPEN_MSS = 7,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
-	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
-	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
-	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
-	TCP_METRICS_ATTR_PAD = 13,
-	__TCP_METRICS_ATTR_MAX = 14,
-};
-
-enum {
-	TCP_METRICS_CMD_UNSPEC = 0,
-	TCP_METRICS_CMD_GET = 1,
-	TCP_METRICS_CMD_DEL = 2,
-	__TCP_METRICS_CMD_MAX = 3,
-};
-
-struct tcp_fastopen_metrics {
-	u16 mss;
-	u16 syn_loss: 10;
-	u16 try_exp: 2;
-	long unsigned int last_syn_loss;
-	struct tcp_fastopen_cookie cookie;
-};
-
-struct tcp_metrics_block {
-	struct tcp_metrics_block *tcpm_next;
-	possible_net_t tcpm_net;
-	struct inetpeer_addr tcpm_saddr;
-	struct inetpeer_addr tcpm_daddr;
-	long unsigned int tcpm_stamp;
-	u32 tcpm_lock;
-	u32 tcpm_vals[5];
-	struct tcp_fastopen_metrics tcpm_fastopen;
-	struct callback_head callback_head;
-};
-
-struct tcpm_hash_bucket {
-	struct tcp_metrics_block *chain;
-};
-
-struct icmp_filter {
-	__u32 data;
-};
-
-struct raw_iter_state {
-	struct seq_net_private p;
-	int bucket;
-};
-
-struct raw_sock {
-	struct inet_sock inet;
-	struct icmp_filter filter;
-	u32 ipmr_table;
-};
-
-struct raw_frag_vec {
-	struct msghdr *msg;
-	union {
-		struct icmphdr icmph;
-		char c[1];
-	} hdr;
-	int hlen;
-};
-
-struct ip_tunnel_encap {
-	u16 type;
-	u16 flags;
-	__be16 sport;
-	__be16 dport;
-};
-
-struct ip_tunnel_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
-	int (*err_handler)(struct sk_buff *, u32);
-};
-
-struct udp_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	__u16 cscov;
-	__u8 partial_cov;
-};
-
-struct udp_dev_scratch {
-	u32 _tsize_state;
-	u16 len;
-	bool is_linear;
-	bool csum_unnecessary;
-};
-
-struct udp_seq_afinfo {
-	sa_family_t family;
-	struct udp_table *udp_table;
-};
-
-struct udp_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	struct udp_seq_afinfo *bpf_seq_afinfo;
-};
-
-struct bpf_iter__udp {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct udp_sock *udp_sk;
-	};
-	uid_t uid;
-	int: 32;
-	int bucket;
-};
-
-struct inet_protosw {
-	struct list_head list;
-	short unsigned int type;
-	short unsigned int protocol;
-	struct proto *prot;
-	const struct proto_ops *ops;
-	unsigned char flags;
-};
-
 typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
 
-typedef struct sock * (*udp_lookup_t)(struct sk_buff *, __be16, __be16);
-
-struct arpreq {
-	struct sockaddr arp_pa;
-	struct sockaddr arp_ha;
-	int arp_flags;
-	struct sockaddr arp_netmask;
-	char arp_dev[16];
-};
-
-typedef struct {
-	char ax25_call[7];
-} ax25_address;
-
-enum {
-	AX25_VALUES_IPDEFMODE = 0,
-	AX25_VALUES_AXDEFMODE = 1,
-	AX25_VALUES_BACKOFF = 2,
-	AX25_VALUES_CONMODE = 3,
-	AX25_VALUES_WINDOW = 4,
-	AX25_VALUES_EWINDOW = 5,
-	AX25_VALUES_T1 = 6,
-	AX25_VALUES_T2 = 7,
-	AX25_VALUES_T3 = 8,
-	AX25_VALUES_IDLE = 9,
-	AX25_VALUES_N2 = 10,
-	AX25_VALUES_PACLEN = 11,
-	AX25_VALUES_PROTOCOL = 12,
-	AX25_VALUES_DS_TIMEOUT = 13,
-	AX25_MAX_VALUES = 14,
-};
-
-enum ip_conntrack_status {
-	IPS_EXPECTED_BIT = 0,
-	IPS_EXPECTED = 1,
-	IPS_SEEN_REPLY_BIT = 1,
-	IPS_SEEN_REPLY = 2,
-	IPS_ASSURED_BIT = 2,
-	IPS_ASSURED = 4,
-	IPS_CONFIRMED_BIT = 3,
-	IPS_CONFIRMED = 8,
-	IPS_SRC_NAT_BIT = 4,
-	IPS_SRC_NAT = 16,
-	IPS_DST_NAT_BIT = 5,
-	IPS_DST_NAT = 32,
-	IPS_NAT_MASK = 48,
-	IPS_SEQ_ADJUST_BIT = 6,
-	IPS_SEQ_ADJUST = 64,
-	IPS_SRC_NAT_DONE_BIT = 7,
-	IPS_SRC_NAT_DONE = 128,
-	IPS_DST_NAT_DONE_BIT = 8,
-	IPS_DST_NAT_DONE = 256,
-	IPS_NAT_DONE_MASK = 384,
-	IPS_DYING_BIT = 9,
-	IPS_DYING = 512,
-	IPS_FIXED_TIMEOUT_BIT = 10,
-	IPS_FIXED_TIMEOUT = 1024,
-	IPS_TEMPLATE_BIT = 11,
-	IPS_TEMPLATE = 2048,
-	IPS_UNTRACKED_BIT = 12,
-	IPS_UNTRACKED = 4096,
-	IPS_NAT_CLASH_BIT = 12,
-	IPS_NAT_CLASH = 4096,
-	IPS_HELPER_BIT = 13,
-	IPS_HELPER = 8192,
-	IPS_OFFLOAD_BIT = 14,
-	IPS_OFFLOAD = 16384,
-	IPS_HW_OFFLOAD_BIT = 15,
-	IPS_HW_OFFLOAD = 32768,
-	IPS_UNCHANGEABLE_MASK = 56313,
-	__IPS_MAX_BIT = 16,
-};
-
-enum {
-	XFRM_LOOKUP_ICMP = 1,
-	XFRM_LOOKUP_QUEUE = 2,
-	XFRM_LOOKUP_KEEP_DST_REF = 4,
-};
-
-struct icmp_ext_hdr {
-	__u8 reserved1: 4;
-	__u8 version: 4;
-	__u8 reserved2;
-	__sum16 checksum;
-};
-
-struct icmp_extobj_hdr {
-	__be16 length;
-	__u8 class_num;
-	__u8 class_type;
-};
-
-struct icmp_bxm {
-	struct sk_buff *skb;
-	int offset;
-	int data_len;
-	struct {
-		struct icmphdr icmph;
-		__be32 times[3];
-	} data;
-	int head_len;
-	struct ip_options_data replyopts;
-};
-
-struct icmp_control {
-	bool (*handler)(struct sk_buff *);
-	short int error;
-};
-
-struct ifaddrmsg {
-	__u8 ifa_family;
-	__u8 ifa_prefixlen;
-	__u8 ifa_flags;
-	__u8 ifa_scope;
-	__u32 ifa_index;
-};
-
-enum {
-	IFA_UNSPEC = 0,
-	IFA_ADDRESS = 1,
-	IFA_LOCAL = 2,
-	IFA_LABEL = 3,
-	IFA_BROADCAST = 4,
-	IFA_ANYCAST = 5,
-	IFA_CACHEINFO = 6,
-	IFA_MULTICAST = 7,
-	IFA_FLAGS = 8,
-	IFA_RT_PRIORITY = 9,
-	IFA_TARGET_NETNSID = 10,
-	__IFA_MAX = 11,
-};
-
-struct ifa_cacheinfo {
-	__u32 ifa_prefered;
-	__u32 ifa_valid;
-	__u32 cstamp;
-	__u32 tstamp;
-};
-
-enum {
-	IFLA_INET_UNSPEC = 0,
-	IFLA_INET_CONF = 1,
-	__IFLA_INET_MAX = 2,
-};
-
-struct in_validator_info {
-	__be32 ivi_addr;
-	struct in_device *ivi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct netconfmsg {
-	__u8 ncm_family;
-};
-
-enum {
-	NETCONFA_UNSPEC = 0,
-	NETCONFA_IFINDEX = 1,
-	NETCONFA_FORWARDING = 2,
-	NETCONFA_RP_FILTER = 3,
-	NETCONFA_MC_FORWARDING = 4,
-	NETCONFA_PROXY_NEIGH = 5,
-	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
-	NETCONFA_INPUT = 7,
-	NETCONFA_BC_FORWARDING = 8,
-	__NETCONFA_MAX = 9,
-};
-
-struct inet_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-};
-
-struct devinet_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table devinet_vars[33];
-};
-
-struct rtentry {
-	long unsigned int rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	long unsigned int rt_pad3;
-	void *rt_pad4;
-	short int rt_metric;
-	char *rt_dev;
-	long unsigned int rt_mtu;
-	long unsigned int rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct pingv6_ops {
-	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
-	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	int (*icmpv6_err_convert)(u8, u8, int *);
-	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
-	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
-};
-
-struct compat_rtentry {
-	u32 rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	u32 rt_pad3;
-	unsigned char rt_tos;
-	unsigned char rt_class;
-	short int rt_pad4;
-	short int rt_metric;
-	compat_uptr_t rt_dev;
-	u32 rt_mtu;
-	u32 rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct igmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-};
-
-struct igmpv3_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	__be32 grec_mca;
-	__be32 grec_src[0];
-};
-
-struct igmpv3_report {
-	__u8 type;
-	__u8 resv1;
-	__sum16 csum;
-	__be16 resv2;
-	__be16 ngrec;
-	struct igmpv3_grec grec[0];
-};
-
-struct igmpv3_query {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-	__u8 qrv: 3;
-	__u8 suppress: 1;
-	__u8 resv: 4;
-	__u8 qqic;
-	__be16 nsrcs;
-	__be32 srcs[0];
-};
-
-struct igmp_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *in_dev;
-};
-
-struct igmp_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *idev;
-	struct ip_mc_list *im;
-};
-
-struct fib_config {
-	u8 fc_dst_len;
-	u8 fc_tos;
-	u8 fc_protocol;
-	u8 fc_scope;
-	u8 fc_type;
-	u8 fc_gw_family;
-	u32 fc_table;
-	__be32 fc_dst;
-	union {
-		__be32 fc_gw4;
-		struct in6_addr fc_gw6;
-	};
-	int fc_oif;
-	u32 fc_flags;
-	u32 fc_priority;
-	__be32 fc_prefsrc;
-	u32 fc_nh_id;
-	struct nlattr *fc_mx;
-	struct rtnexthop *fc_mp;
-	int fc_mx_len;
-	int fc_mp_len;
-	u32 fc_flow;
-	u32 fc_nlflags;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-};
-
-struct fib_result_nl {
-	__be32 fl_addr;
-	u32 fl_mark;
-	unsigned char fl_tos;
-	unsigned char fl_scope;
-	unsigned char tb_id_in;
-	unsigned char tb_id;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	int err;
-};
-
-struct fib_dump_filter {
-	u32 table_id;
-	bool filter_set;
-	bool dump_routes;
-	bool dump_exceptions;
-	unsigned char protocol;
-	unsigned char rt_type;
-	unsigned int flags;
-	struct net_device *dev;
-};
-
 struct fib_nh_notifier_info {
 	struct fib_notifier_info info;
 	struct fib_nh *fib_nh;
 };
 
-struct fib_entry_notifier_info {
-	struct fib_notifier_info info;
-	u32 dst;
-	int dst_len;
-	struct fib_info *fi;
-	u8 tos;
-	u8 type;
-	u32 tb_id;
-};
-
-typedef unsigned int t_key;
-
-struct key_vector {
-	t_key key;
-	unsigned char pos;
-	unsigned char bits;
-	unsigned char slen;
-	union {
-		struct hlist_head leaf;
-		struct key_vector *tnode[0];
-	};
-};
-
-struct tnode {
-	struct callback_head rcu;
-	t_key empty_children;
-	t_key full_children;
-	struct key_vector *parent;
-	struct key_vector kv[1];
-};
-
-struct trie_use_stats {
-	unsigned int gets;
-	unsigned int backtrack;
-	unsigned int semantic_match_passed;
-	unsigned int semantic_match_miss;
-	unsigned int null_node_hit;
-	unsigned int resize_node_skipped;
-};
-
-struct trie_stat {
-	unsigned int totdepth;
-	unsigned int maxdepth;
-	unsigned int tnodes;
-	unsigned int leaves;
-	unsigned int nullpointers;
-	unsigned int prefixes;
-	unsigned int nodesizes[32];
-};
-
-struct trie {
-	struct key_vector kv[1];
-	struct trie_use_stats *stats;
-};
-
-struct fib_trie_iter {
-	struct seq_net_private p;
-	struct fib_table *tb;
-	struct key_vector *tnode;
-	unsigned int index;
-	unsigned int depth;
-};
-
-struct fib_route_iter {
-	struct seq_net_private p;
-	struct fib_table *main_tb;
-	struct key_vector *tnode;
-	loff_t pos;
-	t_key key;
-};
-
-struct ipfrag_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	};
-	struct sk_buff *next_frag;
-	int frag_run_len;
-};
-
-struct icmpv6_echo {
-	__be16 identifier;
-	__be16 sequence;
-};
-
-struct icmpv6_nd_advt {
-	__u32 reserved: 5;
-	__u32 override: 1;
-	__u32 solicited: 1;
-	__u32 router: 1;
-	__u32 reserved2: 24;
-};
-
-struct icmpv6_nd_ra {
-	__u8 hop_limit;
-	__u8 reserved: 3;
-	__u8 router_pref: 2;
-	__u8 home_agent: 1;
-	__u8 other: 1;
-	__u8 managed: 1;
-	__be16 rt_lifetime;
-};
-
-struct icmp6hdr {
-	__u8 icmp6_type;
-	__u8 icmp6_code;
-	__sum16 icmp6_cksum;
-	union {
-		__be32 un_data32[1];
-		__be16 un_data16[2];
-		__u8 un_data8[4];
-		struct icmpv6_echo u_echo;
-		struct icmpv6_nd_advt u_nd_advt;
-		struct icmpv6_nd_ra u_nd_ra;
-	} icmp6_dataun;
-};
-
-struct ping_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	sa_family_t family;
-};
-
-struct pingfakehdr {
-	struct icmphdr icmph;
-	struct msghdr *msg;
-	sa_family_t family;
-	__wsum wcheck;
-};
-
-struct ping_table {
-	struct hlist_nulls_head hash[64];
-	rwlock_t lock;
-};
-
-enum lwtunnel_ip_t {
-	LWTUNNEL_IP_UNSPEC = 0,
-	LWTUNNEL_IP_ID = 1,
-	LWTUNNEL_IP_DST = 2,
-	LWTUNNEL_IP_SRC = 3,
-	LWTUNNEL_IP_TTL = 4,
-	LWTUNNEL_IP_TOS = 5,
-	LWTUNNEL_IP_FLAGS = 6,
-	LWTUNNEL_IP_PAD = 7,
-	LWTUNNEL_IP_OPTS = 8,
-	__LWTUNNEL_IP_MAX = 9,
-};
-
-enum lwtunnel_ip6_t {
-	LWTUNNEL_IP6_UNSPEC = 0,
-	LWTUNNEL_IP6_ID = 1,
-	LWTUNNEL_IP6_DST = 2,
-	LWTUNNEL_IP6_SRC = 3,
-	LWTUNNEL_IP6_HOPLIMIT = 4,
-	LWTUNNEL_IP6_TC = 5,
-	LWTUNNEL_IP6_FLAGS = 6,
-	LWTUNNEL_IP6_PAD = 7,
-	LWTUNNEL_IP6_OPTS = 8,
-	__LWTUNNEL_IP6_MAX = 9,
-};
-
-enum {
-	LWTUNNEL_IP_OPTS_UNSPEC = 0,
-	LWTUNNEL_IP_OPTS_GENEVE = 1,
-	LWTUNNEL_IP_OPTS_VXLAN = 2,
-	LWTUNNEL_IP_OPTS_ERSPAN = 3,
-	__LWTUNNEL_IP_OPTS_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
-	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
-	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
-	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
-	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
-	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
-	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
-	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
-	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
-};
-
-struct ip6_tnl_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-};
-
-struct geneve_opt {
-	__be16 opt_class;
-	u8 type;
-	u8 length: 5;
-	u8 r3: 1;
-	u8 r2: 1;
-	u8 r1: 1;
-	u8 opt_data[0];
-};
-
-struct vxlan_metadata {
-	u32 gbp;
-};
-
-struct erspan_md2 {
-	__be32 timestamp;
-	__be16 sgt;
-	__u8 hwid_upper: 2;
-	__u8 ft: 5;
-	__u8 p: 1;
-	__u8 o: 1;
-	__u8 gra: 2;
-	__u8 dir: 1;
-	__u8 hwid: 4;
-};
-
-struct erspan_metadata {
-	int version;
-	union {
-		__be32 index;
-		struct erspan_md2 md2;
-	} u;
-};
-
 struct nhmsg {
 	unsigned char nh_family;
 	unsigned char nh_scope;
@@ -105369,7 +138001,8 @@
 
 enum {
 	NEXTHOP_GRP_TYPE_MPATH = 0,
-	__NEXTHOP_GRP_TYPE_MAX = 1,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
 };
 
 enum {
@@ -105385,7 +138018,28 @@
 	NHA_GROUPS = 9,
 	NHA_MASTER = 10,
 	NHA_FDB = 11,
-	__NHA_MAX = 12,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
 };
 
 struct nh_config {
@@ -105403,6 +138057,12 @@
 	} gw;
 	struct nlattr *nh_grp;
 	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	long unsigned int nh_grp_res_idle_timer;
+	long unsigned int nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
 	struct nlattr *nh_encap;
 	u16 nh_encap_type;
 	u32 nlflags;
@@ -105411,1449 +138071,181 @@
 
 enum nexthop_event_type {
 	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
 };
 
-struct bpfilter_umh_ops {
-	struct umd_info info;
-	struct mutex lock;
-	int (*sockopt)(struct sock *, int, sockptr_t, unsigned int, bool);
-	int (*start)();
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
 };
 
-struct inet6_protocol {
-	void (*early_demux)(struct sk_buff *);
-	void (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	unsigned int flags;
-};
-
-struct snmp_mib {
-	const char *name;
-	int entry;
-};
-
-struct fib4_rule {
-	struct fib_rule common;
-	u8 dst_len;
-	u8 src_len;
-	u8 tos;
-	__be32 src;
-	__be32 srcmask;
-	__be32 dst;
-	__be32 dstmask;
-	u32 tclassid;
-};
-
-enum {
-	PIM_TYPE_HELLO = 0,
-	PIM_TYPE_REGISTER = 1,
-	PIM_TYPE_REGISTER_STOP = 2,
-	PIM_TYPE_JOIN_PRUNE = 3,
-	PIM_TYPE_BOOTSTRAP = 4,
-	PIM_TYPE_ASSERT = 5,
-	PIM_TYPE_GRAFT = 6,
-	PIM_TYPE_GRAFT_ACK = 7,
-	PIM_TYPE_CANDIDATE_RP_ADV = 8,
-};
-
-struct pimreghdr {
-	__u8 type;
-	__u8 reserved;
-	__be16 csum;
-	__be32 flags;
-};
-
-typedef short unsigned int vifi_t;
-
-struct vifctl {
-	vifi_t vifc_vifi;
-	unsigned char vifc_flags;
-	unsigned char vifc_threshold;
-	unsigned int vifc_rate_limit;
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
 	union {
-		struct in_addr vifc_lcl_addr;
-		int vifc_lcl_ifindex;
+		__be32 ipv4;
+		struct in6_addr ipv6;
 	};
-	struct in_addr vifc_rmt_addr;
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
 };
 
-struct mfcctl {
-	struct in_addr mfcc_origin;
-	struct in_addr mfcc_mcastgrp;
-	vifi_t mfcc_parent;
-	unsigned char mfcc_ttls[32];
-	unsigned int mfcc_pkt_cnt;
-	unsigned int mfcc_byte_cnt;
-	unsigned int mfcc_wrong_if;
-	int mfcc_expire;
-};
-
-struct sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_vif_req {
-	vifi_t vifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct igmpmsg {
-	__u32 unused1;
-	__u32 unused2;
-	unsigned char im_msgtype;
-	unsigned char im_mbz;
-	unsigned char im_vif;
-	unsigned char im_vif_hi;
-	struct in_addr im_src;
-	struct in_addr im_dst;
-};
-
-enum {
-	IPMRA_TABLE_UNSPEC = 0,
-	IPMRA_TABLE_ID = 1,
-	IPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,
-	IPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,
-	IPMRA_TABLE_MROUTE_DO_ASSERT = 4,
-	IPMRA_TABLE_MROUTE_DO_PIM = 5,
-	IPMRA_TABLE_VIFS = 6,
-	IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,
-	__IPMRA_TABLE_MAX = 8,
-};
-
-enum {
-	IPMRA_VIF_UNSPEC = 0,
-	IPMRA_VIF = 1,
-	__IPMRA_VIF_MAX = 2,
-};
-
-enum {
-	IPMRA_VIFA_UNSPEC = 0,
-	IPMRA_VIFA_IFINDEX = 1,
-	IPMRA_VIFA_VIF_ID = 2,
-	IPMRA_VIFA_FLAGS = 3,
-	IPMRA_VIFA_BYTES_IN = 4,
-	IPMRA_VIFA_BYTES_OUT = 5,
-	IPMRA_VIFA_PACKETS_IN = 6,
-	IPMRA_VIFA_PACKETS_OUT = 7,
-	IPMRA_VIFA_LOCAL_ADDR = 8,
-	IPMRA_VIFA_REMOTE_ADDR = 9,
-	IPMRA_VIFA_PAD = 10,
-	__IPMRA_VIFA_MAX = 11,
-};
-
-enum {
-	IPMRA_CREPORT_UNSPEC = 0,
-	IPMRA_CREPORT_MSGTYPE = 1,
-	IPMRA_CREPORT_VIF_ID = 2,
-	IPMRA_CREPORT_SRC_ADDR = 3,
-	IPMRA_CREPORT_DST_ADDR = 4,
-	IPMRA_CREPORT_PKT = 5,
-	IPMRA_CREPORT_TABLE = 6,
-	__IPMRA_CREPORT_MAX = 7,
-};
-
-struct vif_device {
-	struct net_device *dev;
-	long unsigned int bytes_in;
-	long unsigned int bytes_out;
-	long unsigned int pkt_in;
-	long unsigned int pkt_out;
-	long unsigned int rate_limit;
-	unsigned char threshold;
-	short unsigned int flags;
-	int link;
-	struct netdev_phys_item_id dev_parent_id;
-	__be32 local;
-	__be32 remote;
-};
-
-struct vif_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct net_device *dev;
-	short unsigned int vif_index;
-	short unsigned int vif_flags;
-	u32 tb_id;
-};
-
-enum {
-	MFC_STATIC = 1,
-	MFC_OFFLOAD = 2,
-};
-
-struct mr_mfc {
-	struct rhlist_head mnode;
-	short unsigned int mfc_parent;
-	int mfc_flags;
-	union {
-		struct {
-			long unsigned int expires;
-			struct sk_buff_head unresolved;
-		} unres;
-		struct {
-			long unsigned int last_assert;
-			int minvif;
-			int maxvif;
-			long unsigned int bytes;
-			long unsigned int pkt;
-			long unsigned int wrong_if;
-			long unsigned int lastuse;
-			unsigned char ttls[32];
-			refcount_t refcount;
-		} res;
-	} mfc_un;
-	struct list_head list;
-	struct callback_head rcu;
-	void (*free)(struct callback_head *);
-};
-
-struct mfc_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct mr_mfc *mfc;
-	u32 tb_id;
-};
-
-struct mr_table_ops {
-	const struct rhashtable_params *rht_params;
-	void *cmparg_any;
-};
-
-struct mr_table {
-	struct list_head list;
-	possible_net_t net;
-	struct mr_table_ops ops;
+struct nh_notifier_grp_entry_info {
+	u8 weight;
 	u32 id;
-	struct sock *mroute_sk;
-	struct timer_list ipmr_expire_timer;
-	struct list_head mfc_unres_queue;
-	struct vif_device vif_table[32];
-	struct rhltable mfc_hash;
-	struct list_head mfc_cache_list;
-	int maxvif;
-	atomic_t cache_resolve_queue_len;
-	bool mroute_do_assert;
-	bool mroute_do_pim;
-	bool mroute_do_wrvifwhole;
-	int mroute_reg_vif_num;
+	struct nh_notifier_single_info nh;
 };
 
-struct mr_vif_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	int ct;
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
 };
 
-struct mr_mfc_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	struct list_head *cache;
-	spinlock_t *lock;
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
 };
 
-struct mfc_cache_cmp_arg {
-	__be32 mfc_mcastgrp;
-	__be32 mfc_origin;
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
 };
 
-struct mfc_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			__be32 mfc_mcastgrp;
-			__be32 mfc_origin;
-		};
-		struct mfc_cache_cmp_arg cmparg;
-	};
-};
-
-struct ipmr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_vif_req {
-	vifi_t vifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct rta_mfc_stats {
-	__u64 mfcs_packets;
-	__u64 mfcs_bytes;
-	__u64 mfcs_wrong_if;
-};
-
-enum rpc_display_format_t {
-	RPC_DISPLAY_ADDR = 0,
-	RPC_DISPLAY_PORT = 1,
-	RPC_DISPLAY_PROTO = 2,
-	RPC_DISPLAY_HEX_ADDR = 3,
-	RPC_DISPLAY_HEX_PORT = 4,
-	RPC_DISPLAY_NETID = 5,
-	RPC_DISPLAY_MAX = 6,
-};
-
-struct ic_device {
-	struct ic_device *next;
-	struct net_device *dev;
-	short unsigned int flags;
-	short int able;
-	__be32 xid;
-};
-
-struct bootp_pkt {
-	struct iphdr iph;
-	struct udphdr udph;
-	u8 op;
-	u8 htype;
-	u8 hlen;
-	u8 hops;
-	__be32 xid;
-	__be16 secs;
-	__be16 flags;
-	__be32 client_ip;
-	__be32 your_ip;
-	__be32 server_ip;
-	__be32 relay_ip;
-	u8 hw_addr[16];
-	u8 serv_name[64];
-	u8 boot_file[128];
-	u8 exten[312];
-};
-
-struct bictcp {
-	u32 cnt;
-	u32 last_max_cwnd;
-	u32 last_cwnd;
-	u32 last_time;
-	u32 bic_origin_point;
-	u32 bic_K;
-	u32 delay_min;
-	u32 epoch_start;
-	u32 ack_cnt;
-	u32 tcp_cwnd;
-	u16 unused;
-	u8 sample_cnt;
-	u8 found;
-	u32 round_start;
-	u32 end_seq;
-	u32 last_ack;
-	u32 curr_rtt;
-};
-
-struct tls_rec {
-	struct list_head list;
-	int tx_ready;
-	int tx_flags;
-	struct sk_msg msg_plaintext;
-	struct sk_msg msg_encrypted;
-	struct scatterlist sg_aead_in[2];
-	struct scatterlist sg_aead_out[2];
-	char content_type;
-	struct scatterlist sg_content_type;
-	char aad_space[13];
-	u8 iv_data[16];
-	long: 24;
-	long: 64;
-	long: 64;
-	struct aead_request aead_req;
-	u8 aead_req_ctx[0];
-};
-
-struct tx_work {
-	struct delayed_work work;
-	struct sock *sk;
-};
-
-struct tls_sw_context_tx {
-	struct crypto_aead *aead_send;
-	struct crypto_wait async_wait;
-	struct tx_work tx_work;
-	struct tls_rec *open_rec;
-	struct list_head tx_list;
-	atomic_t encrypt_pending;
-	spinlock_t encrypt_compl_lock;
-	int async_notify;
-	u8 async_capable: 1;
-	long unsigned int tx_bitmask;
-};
-
-enum {
-	TCP_BPF_IPV4 = 0,
-	TCP_BPF_IPV6 = 1,
-	TCP_BPF_NUM_PROTS = 2,
-};
-
-enum {
-	TCP_BPF_BASE = 0,
-	TCP_BPF_TX = 1,
-	TCP_BPF_NUM_CFGS = 2,
-};
-
-enum {
-	UDP_BPF_IPV4 = 0,
-	UDP_BPF_IPV6 = 1,
-	UDP_BPF_NUM_PROTS = 2,
-};
-
-struct cipso_v4_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct cipso_v4_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-struct xfrm_policy_afinfo {
-	struct dst_ops *dst_ops;
-	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
-	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
-	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
-	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
-};
-
-struct xfrm_state_afinfo {
-	u8 family;
-	u8 proto;
-	const struct xfrm_type_offload *type_offload_esp;
-	const struct xfrm_type *type_esp;
-	const struct xfrm_type *type_ipip;
-	const struct xfrm_type *type_ipip6;
-	const struct xfrm_type *type_comp;
-	const struct xfrm_type *type_ah;
-	const struct xfrm_type *type_routing;
-	const struct xfrm_type *type_dstopts;
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*transport_finish)(struct sk_buff *, int);
-	void (*local_error)(struct sk_buff *, u32);
-};
-
-struct ip_tunnel;
-
-struct ip6_tnl;
-
-struct xfrm_tunnel_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	union {
-		struct ip_tunnel *ip4;
-		struct ip6_tnl *ip6;
-	} tunnel;
-};
-
-struct xfrm_mode_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	__be16 id;
-	__be16 frag_off;
-	u8 ihl;
-	u8 tos;
-	u8 ttl;
-	u8 protocol;
-	u8 optlen;
-	u8 flow_lbl[3];
-};
-
-struct xfrm_spi_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	unsigned int daddroff;
-	unsigned int family;
-	__be32 seq;
-};
-
-struct xfrm_input_afinfo {
-	u8 family;
-	bool is_ipip;
-	int (*callback)(struct sk_buff *, u8, int);
-};
-
-struct xfrm4_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, u32);
-	struct xfrm4_protocol *next;
-	int priority;
-};
-
-typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
-
-struct seqcount_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_mutex seqcount_mutex_t;
-
-enum {
-	XFRM_STATE_VOID = 0,
-	XFRM_STATE_ACQ = 1,
-	XFRM_STATE_VALID = 2,
-	XFRM_STATE_ERROR = 3,
-	XFRM_STATE_EXPIRED = 4,
-	XFRM_STATE_DEAD = 5,
-};
-
-struct xfrm_if;
-
-struct xfrm_if_cb {
-	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
-};
-
-struct xfrm_if_parms {
-	int link;
-	u32 if_id;
-};
-
-struct xfrm_if {
-	struct xfrm_if *next;
-	struct net_device *dev;
+struct nh_notifier_info {
 	struct net *net;
-	struct xfrm_if_parms p;
-	struct gro_cells gro_cells;
-};
-
-struct xfrm_policy_walk {
-	struct xfrm_policy_walk_entry walk;
-	u8 type;
-	u32 seq;
-};
-
-struct xfrmk_spdinfo {
-	u32 incnt;
-	u32 outcnt;
-	u32 fwdcnt;
-	u32 inscnt;
-	u32 outscnt;
-	u32 fwdscnt;
-	u32 spdhcnt;
-	u32 spdhmcnt;
-};
-
-struct ip6_mh {
-	__u8 ip6mh_proto;
-	__u8 ip6mh_hdrlen;
-	__u8 ip6mh_type;
-	__u8 ip6mh_reserved;
-	__u16 ip6mh_cksum;
-	__u8 data[0];
-};
-
-struct xfrm_flo {
-	struct dst_entry *dst_orig;
-	u8 flags;
-};
-
-struct xfrm_pol_inexact_node {
-	struct rb_node node;
-	union {
-		xfrm_address_t addr;
-		struct callback_head rcu;
-	};
-	u8 prefixlen;
-	struct rb_root root;
-	struct hlist_head hhead;
-};
-
-struct xfrm_pol_inexact_key {
-	possible_net_t net;
-	u32 if_id;
-	u16 family;
-	u8 dir;
-	u8 type;
-};
-
-struct xfrm_pol_inexact_bin {
-	struct xfrm_pol_inexact_key k;
-	struct rhash_head head;
-	struct hlist_head hhead;
-	seqcount_spinlock_t count;
-	struct rb_root root_d;
-	struct rb_root root_s;
-	struct list_head inexact_bins;
-	struct callback_head rcu;
-};
-
-enum xfrm_pol_inexact_candidate_type {
-	XFRM_POL_CAND_BOTH = 0,
-	XFRM_POL_CAND_SADDR = 1,
-	XFRM_POL_CAND_DADDR = 2,
-	XFRM_POL_CAND_ANY = 3,
-	XFRM_POL_CAND_MAX = 4,
-};
-
-struct xfrm_pol_inexact_candidates {
-	struct hlist_head *res[4];
-};
-
-enum xfrm_ae_ftype_t {
-	XFRM_AE_UNSPEC = 0,
-	XFRM_AE_RTHR = 1,
-	XFRM_AE_RVAL = 2,
-	XFRM_AE_LVAL = 4,
-	XFRM_AE_ETHR = 8,
-	XFRM_AE_CR = 16,
-	XFRM_AE_CE = 32,
-	XFRM_AE_CU = 64,
-	__XFRM_AE_MAX = 65,
-};
-
-enum xfrm_nlgroups {
-	XFRMNLGRP_NONE = 0,
-	XFRMNLGRP_ACQUIRE = 1,
-	XFRMNLGRP_EXPIRE = 2,
-	XFRMNLGRP_SA = 3,
-	XFRMNLGRP_POLICY = 4,
-	XFRMNLGRP_AEVENTS = 5,
-	XFRMNLGRP_REPORT = 6,
-	XFRMNLGRP_MIGRATE = 7,
-	XFRMNLGRP_MAPPING = 8,
-	__XFRMNLGRP_MAX = 9,
-};
-
-enum {
-	XFRM_MODE_FLAG_TUNNEL = 1,
-};
-
-struct km_event {
-	union {
-		u32 hard;
-		u32 proto;
-		u32 byid;
-		u32 aevent;
-		u32 type;
-	} data;
-	u32 seq;
-	u32 portid;
-	u32 event;
-	struct net *net;
-};
-
-struct xfrm_kmaddress {
-	xfrm_address_t local;
-	xfrm_address_t remote;
-	u32 reserved;
-	u16 family;
-};
-
-struct xfrm_migrate {
-	xfrm_address_t old_daddr;
-	xfrm_address_t old_saddr;
-	xfrm_address_t new_daddr;
-	xfrm_address_t new_saddr;
-	u8 proto;
-	u8 mode;
-	u16 reserved;
-	u32 reqid;
-	u16 old_family;
-	u16 new_family;
-};
-
-struct xfrm_mgr {
-	struct list_head list;
-	int (*notify)(struct xfrm_state *, const struct km_event *);
-	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
-	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
-	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
-	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
-	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
-	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
-	bool (*is_alive)(const struct km_event *);
-};
-
-struct xfrmk_sadinfo {
-	u32 sadhcnt;
-	u32 sadhmcnt;
-	u32 sadcnt;
-};
-
-struct xfrm_translator {
-	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
-	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
-	int (*xlate_user_policy_sockptr)(u8 **, int);
-	struct module *owner;
-};
-
-struct ip_beet_phdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 padlen;
-	__u8 reserved;
-};
-
-struct ip_tunnel_6rd_parm {
-	struct in6_addr prefix;
-	__be32 relay_prefix;
-	u16 prefixlen;
-	u16 relay_prefixlen;
-};
-
-struct ip_tunnel_prl_entry;
-
-struct ip_tunnel {
-	struct ip_tunnel *next;
-	struct hlist_node hash_node;
-	struct net_device *dev;
-	struct net *net;
-	long unsigned int err_time;
-	int err_count;
-	u32 i_seqno;
-	u32 o_seqno;
-	int tun_hlen;
-	u32 index;
-	u8 erspan_ver;
-	u8 dir;
-	u16 hwid;
-	struct dst_cache dst_cache;
-	struct ip_tunnel_parm parms;
-	int mlink;
-	int encap_hlen;
-	int hlen;
-	struct ip_tunnel_encap encap;
-	struct ip_tunnel_6rd_parm ip6rd;
-	struct ip_tunnel_prl_entry *prl;
-	unsigned int prl_count;
-	unsigned int ip_tnl_net_id;
-	struct gro_cells gro_cells;
-	__u32 fwmark;
-	bool collect_md;
-	bool ignore_df;
-};
-
-struct __ip6_tnl_parm {
-	char name[16];
-	int link;
-	__u8 proto;
-	__u8 encap_limit;
-	__u8 hop_limit;
-	bool collect_md;
-	__be32 flowinfo;
-	__u32 flags;
-	struct in6_addr laddr;
-	struct in6_addr raddr;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	__u32 fwmark;
-	__u32 index;
-	__u8 erspan_ver;
-	__u8 dir;
-	__u16 hwid;
-};
-
-struct ip6_tnl {
-	struct ip6_tnl *next;
-	struct net_device *dev;
-	struct net *net;
-	struct __ip6_tnl_parm parms;
-	struct flowi fl;
-	struct dst_cache dst_cache;
-	struct gro_cells gro_cells;
-	int err_count;
-	long unsigned int err_time;
-	__u32 i_seqno;
-	__u32 o_seqno;
-	int hlen;
-	int tun_hlen;
-	int encap_hlen;
-	struct ip_tunnel_encap encap;
-	int mlink;
-};
-
-struct xfrm_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	union {
-		struct {
-			__u32 low;
-			__u32 hi;
-		} output;
-		struct {
-			__be32 low;
-			__be32 hi;
-		} input;
-	} seq;
-};
-
-struct ip_tunnel_prl_entry {
-	struct ip_tunnel_prl_entry *next;
-	__be32 addr;
-	u16 flags;
-	struct callback_head callback_head;
-};
-
-struct xfrm_trans_tasklet {
-	struct tasklet_struct tasklet;
-	struct sk_buff_head queue;
-};
-
-struct xfrm_trans_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	int (*finish)(struct net *, struct sock *, struct sk_buff *);
-	struct net *net;
-};
-
-struct xfrm_user_offload {
-	int ifindex;
-	__u8 flags;
-};
-
-struct espintcp_msg {
-	struct sk_buff *skb;
-	struct sk_msg skmsg;
-	int offset;
-	int len;
-};
-
-struct espintcp_ctx {
-	struct strparser strp;
-	struct sk_buff_head ike_queue;
-	struct sk_buff_head out_queue;
-	struct espintcp_msg partial;
-	void (*saved_data_ready)(struct sock *);
-	void (*saved_write_space)(struct sock *);
-	void (*saved_destruct)(struct sock *);
-	struct work_struct work;
-	bool tx_running;
-};
-
-struct unix_stream_read_state {
-	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
-	struct socket *socket;
-	struct msghdr *msg;
-	struct pipe_inode_info *pipe;
-	size_t size;
-	int flags;
-	unsigned int splice_flags;
-};
-
-struct ipv6_params {
-	__s32 disable_ipv6;
-	__s32 autoconf;
-};
-
-enum flowlabel_reflect {
-	FLOWLABEL_REFLECT_ESTABLISHED = 1,
-	FLOWLABEL_REFLECT_TCP_RESET = 2,
-	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
-};
-
-struct in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	__u32 rtmsg_type;
-	__u16 rtmsg_dst_len;
-	__u16 rtmsg_src_len;
-	__u32 rtmsg_metric;
-	long unsigned int rtmsg_info;
-	__u32 rtmsg_flags;
-	int rtmsg_ifindex;
-};
-
-struct compat_in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	u32 rtmsg_type;
-	u16 rtmsg_dst_len;
-	u16 rtmsg_src_len;
-	u32 rtmsg_metric;
-	u32 rtmsg_info;
-	u32 rtmsg_flags;
-	s32 rtmsg_ifindex;
-};
-
-struct ac6_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct ip6_fraglist_iter {
-	struct ipv6hdr *tmp_hdr;
-	struct sk_buff *frag;
-	int offset;
-	unsigned int hlen;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_frag_state {
-	u8 *prevhdr;
-	unsigned int hlen;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	int hroom;
-	int troom;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_ra_chain {
-	struct ip6_ra_chain *next;
-	struct sock *sk;
-	int sel;
-	void (*destructor)(struct sock *);
-};
-
-struct ipcm6_cookie {
-	struct sockcm_cookie sockc;
-	__s16 hlimit;
-	__s16 tclass;
-	__s8 dontfrag;
-	struct ipv6_txoptions *opt;
-	__u16 gso_size;
-};
-
-enum {
-	IFLA_INET6_UNSPEC = 0,
-	IFLA_INET6_FLAGS = 1,
-	IFLA_INET6_CONF = 2,
-	IFLA_INET6_STATS = 3,
-	IFLA_INET6_MCAST = 4,
-	IFLA_INET6_CACHEINFO = 5,
-	IFLA_INET6_ICMP6STATS = 6,
-	IFLA_INET6_TOKEN = 7,
-	IFLA_INET6_ADDR_GEN_MODE = 8,
-	__IFLA_INET6_MAX = 9,
-};
-
-enum in6_addr_gen_mode {
-	IN6_ADDR_GEN_MODE_EUI64 = 0,
-	IN6_ADDR_GEN_MODE_NONE = 1,
-	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
-	IN6_ADDR_GEN_MODE_RANDOM = 3,
-};
-
-struct ifla_cacheinfo {
-	__u32 max_reasm_len;
-	__u32 tstamp;
-	__u32 reachable_time;
-	__u32 retrans_time;
-};
-
-struct wpan_phy;
-
-struct wpan_dev_header_ops;
-
-struct wpan_dev {
-	struct wpan_phy *wpan_phy;
-	int iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	const struct wpan_dev_header_ops *header_ops;
-	struct net_device *lowpan_dev;
-	u32 identifier;
-	__le16 pan_id;
-	__le16 short_addr;
-	__le64 extended_addr;
-	atomic_t bsn;
-	atomic_t dsn;
-	u8 min_be;
-	u8 max_be;
-	u8 csma_retries;
-	s8 frame_retries;
-	bool lbt;
-	bool promiscuous_mode;
-	bool ackreq;
-};
-
-struct prefixmsg {
-	unsigned char prefix_family;
-	unsigned char prefix_pad1;
-	short unsigned int prefix_pad2;
-	int prefix_ifindex;
-	unsigned char prefix_type;
-	unsigned char prefix_len;
-	unsigned char prefix_flags;
-	unsigned char prefix_pad3;
-};
-
-enum {
-	PREFIX_UNSPEC = 0,
-	PREFIX_ADDRESS = 1,
-	PREFIX_CACHEINFO = 2,
-	__PREFIX_MAX = 3,
-};
-
-struct prefix_cacheinfo {
-	__u32 preferred_time;
-	__u32 valid_time;
-};
-
-struct in6_ifreq {
-	struct in6_addr ifr6_addr;
-	__u32 ifr6_prefixlen;
-	int ifr6_ifindex;
-};
-
-enum {
-	DEVCONF_FORWARDING = 0,
-	DEVCONF_HOPLIMIT = 1,
-	DEVCONF_MTU6 = 2,
-	DEVCONF_ACCEPT_RA = 3,
-	DEVCONF_ACCEPT_REDIRECTS = 4,
-	DEVCONF_AUTOCONF = 5,
-	DEVCONF_DAD_TRANSMITS = 6,
-	DEVCONF_RTR_SOLICITS = 7,
-	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
-	DEVCONF_RTR_SOLICIT_DELAY = 9,
-	DEVCONF_USE_TEMPADDR = 10,
-	DEVCONF_TEMP_VALID_LFT = 11,
-	DEVCONF_TEMP_PREFERED_LFT = 12,
-	DEVCONF_REGEN_MAX_RETRY = 13,
-	DEVCONF_MAX_DESYNC_FACTOR = 14,
-	DEVCONF_MAX_ADDRESSES = 15,
-	DEVCONF_FORCE_MLD_VERSION = 16,
-	DEVCONF_ACCEPT_RA_DEFRTR = 17,
-	DEVCONF_ACCEPT_RA_PINFO = 18,
-	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
-	DEVCONF_RTR_PROBE_INTERVAL = 20,
-	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
-	DEVCONF_PROXY_NDP = 22,
-	DEVCONF_OPTIMISTIC_DAD = 23,
-	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
-	DEVCONF_MC_FORWARDING = 25,
-	DEVCONF_DISABLE_IPV6 = 26,
-	DEVCONF_ACCEPT_DAD = 27,
-	DEVCONF_FORCE_TLLAO = 28,
-	DEVCONF_NDISC_NOTIFY = 29,
-	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
-	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
-	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
-	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
-	DEVCONF_USE_OPTIMISTIC = 34,
-	DEVCONF_ACCEPT_RA_MTU = 35,
-	DEVCONF_STABLE_SECRET = 36,
-	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
-	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
-	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
-	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
-	DEVCONF_DROP_UNSOLICITED_NA = 41,
-	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
-	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
-	DEVCONF_SEG6_ENABLED = 44,
-	DEVCONF_SEG6_REQUIRE_HMAC = 45,
-	DEVCONF_ENHANCED_DAD = 46,
-	DEVCONF_ADDR_GEN_MODE = 47,
-	DEVCONF_DISABLE_POLICY = 48,
-	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
-	DEVCONF_NDISC_TCLASS = 50,
-	DEVCONF_RPL_SEG_ENABLED = 51,
-	DEVCONF_MAX = 52,
-};
-
-enum {
-	INET6_IFADDR_STATE_PREDAD = 0,
-	INET6_IFADDR_STATE_DAD = 1,
-	INET6_IFADDR_STATE_POSTDAD = 2,
-	INET6_IFADDR_STATE_ERRDAD = 3,
-	INET6_IFADDR_STATE_DEAD = 4,
-};
-
-enum nl802154_cca_modes {
-	__NL802154_CCA_INVALID = 0,
-	NL802154_CCA_ENERGY = 1,
-	NL802154_CCA_CARRIER = 2,
-	NL802154_CCA_ENERGY_CARRIER = 3,
-	NL802154_CCA_ALOHA = 4,
-	NL802154_CCA_UWB_SHR = 5,
-	NL802154_CCA_UWB_MULTIPLEXED = 6,
-	__NL802154_CCA_ATTR_AFTER_LAST = 7,
-	NL802154_CCA_ATTR_MAX = 6,
-};
-
-enum nl802154_cca_opts {
-	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
-	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
-	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
-	NL802154_CCA_OPT_ATTR_MAX = 1,
-};
-
-enum nl802154_supported_bool_states {
-	NL802154_SUPPORTED_BOOL_FALSE = 0,
-	NL802154_SUPPORTED_BOOL_TRUE = 1,
-	__NL802154_SUPPORTED_BOOL_INVALD = 2,
-	NL802154_SUPPORTED_BOOL_BOTH = 3,
-	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
-	NL802154_SUPPORTED_BOOL_MAX = 3,
-};
-
-struct wpan_phy_supported {
-	u32 channels[32];
-	u32 cca_modes;
-	u32 cca_opts;
-	u32 iftypes;
-	enum nl802154_supported_bool_states lbt;
-	u8 min_minbe;
-	u8 max_minbe;
-	u8 min_maxbe;
-	u8 max_maxbe;
-	u8 min_csma_backoffs;
-	u8 max_csma_backoffs;
-	s8 min_frame_retries;
-	s8 max_frame_retries;
-	size_t tx_powers_size;
-	size_t cca_ed_levels_size;
-	const s32 *tx_powers;
-	const s32 *cca_ed_levels;
-};
-
-struct wpan_phy_cca {
-	enum nl802154_cca_modes mode;
-	enum nl802154_cca_opts opt;
-};
-
-struct wpan_phy {
-	const void *privid;
-	u32 flags;
-	u8 current_channel;
-	u8 current_page;
-	struct wpan_phy_supported supported;
-	s32 transmit_power;
-	struct wpan_phy_cca cca;
-	__le64 perm_extended_addr;
-	s32 cca_ed_level;
-	u8 symbol_duration;
-	u16 lifs_period;
-	u16 sifs_period;
-	struct device dev;
-	possible_net_t _net;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct ieee802154_addr {
-	u8 mode;
-	__le16 pan_id;
-	union {
-		__le16 short_addr;
-		__le64 extended_addr;
-	};
-};
-
-struct wpan_dev_header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
-};
-
-union fwnet_hwaddr {
-	u8 u[16];
-	struct {
-		__be64 uniq_id;
-		u8 max_rec;
-		u8 sspd;
-		__be16 fifo_hi;
-		__be32 fifo_lo;
-	} uc;
-};
-
-struct in6_validator_info {
-	struct in6_addr i6vi_addr;
-	struct inet6_dev *i6vi_dev;
 	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
 };
 
-struct ifa6_config {
-	const struct in6_addr *pfx;
-	unsigned int plen;
-	const struct in6_addr *peer_pfx;
-	u32 rt_priority;
-	u32 ifa_flags;
-	u32 preferred_lft;
-	u32 valid_lft;
-	u16 scope;
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
 };
 
-enum cleanup_prefix_rt_t {
-	CLEANUP_PREFIX_RT_NOP = 0,
-	CLEANUP_PREFIX_RT_DEL = 1,
-	CLEANUP_PREFIX_RT_EXPIRE = 2,
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+	u32 done_nh_idx;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	short unsigned int no;
 };
 
 enum {
-	IPV6_SADDR_RULE_INIT = 0,
-	IPV6_SADDR_RULE_LOCAL = 1,
-	IPV6_SADDR_RULE_SCOPE = 2,
-	IPV6_SADDR_RULE_PREFERRED = 3,
-	IPV6_SADDR_RULE_OIF = 4,
-	IPV6_SADDR_RULE_LABEL = 5,
-	IPV6_SADDR_RULE_PRIVACY = 6,
-	IPV6_SADDR_RULE_ORCHID = 7,
-	IPV6_SADDR_RULE_PREFIX = 8,
-	IPV6_SADDR_RULE_MAX = 9,
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
 };
 
-struct ipv6_saddr_score {
-	int rule;
-	int addr_type;
-	struct inet6_ifaddr *ifa;
-	long unsigned int scorebits[1];
-	int scopedist;
-	int matchlen;
-};
-
-struct ipv6_saddr_dst {
-	const struct in6_addr *addr;
-	int ifindex;
-	int scope;
-	int label;
-	unsigned int prefs;
-};
-
-struct if6_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	int offset;
-};
-
-enum addr_type_t {
-	UNICAST_ADDR = 0,
-	MULTICAST_ADDR = 1,
-	ANYCAST_ADDR = 2,
-};
-
-struct inet6_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-	enum addr_type_t type;
-};
-
-enum {
-	DAD_PROCESS = 0,
-	DAD_BEGIN = 1,
-	DAD_ABORT = 2,
-};
-
-struct ifaddrlblmsg {
-	__u8 ifal_family;
-	__u8 __ifal_reserved;
-	__u8 ifal_prefixlen;
-	__u8 ifal_flags;
-	__u32 ifal_index;
-	__u32 ifal_seq;
-};
-
-enum {
-	IFAL_ADDRESS = 1,
-	IFAL_LABEL = 2,
-	__IFAL_MAX = 3,
-};
-
-struct ip6addrlbl_entry {
-	struct in6_addr prefix;
-	int prefixlen;
-	int ifindex;
-	int addrtype;
-	u32 label;
-	struct hlist_node list;
-	struct callback_head rcu;
-};
-
-struct ip6addrlbl_init_table {
-	const struct in6_addr *prefix;
-	int prefixlen;
-	u32 label;
-};
-
-struct rd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	struct in6_addr dest;
-	__u8 opt[0];
-};
-
-struct fib6_gc_args {
-	int timeout;
-	int more;
-};
-
-struct rt6_exception {
-	struct hlist_node hlist;
-	struct rt6_info *rt6i;
-	long unsigned int stamp;
-	struct callback_head rcu;
-};
-
-struct route_info {
-	__u8 type;
-	__u8 length;
+struct inet_diag_hostcond {
+	__u8 family;
 	__u8 prefix_len;
-	__u8 reserved_l: 3;
-	__u8 route_pref: 2;
-	__u8 reserved_h: 3;
-	__be32 lifetime;
-	__u8 prefix[0];
+	int port;
+	__be32 addr[0];
 };
 
-struct rt6_rtnl_dump_arg {
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct net *net;
-	struct fib_dump_filter filter;
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
 };
 
-struct netevent_redirect {
-	struct dst_entry *old;
-	struct dst_entry *new;
-	struct neighbour *neigh;
-	const void *daddr;
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
 };
 
-struct trace_event_raw_fib6_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[16];
-	__u8 dst[16];
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
 	u16 sport;
 	u16 dport;
-	u8 proto;
-	u8 rt_type;
-	u32 __data_loc_name;
-	__u8 gw[16];
-	char __data[0];
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
 };
 
-struct trace_event_data_offsets_fib6_table_lookup {
-	u32 name;
+struct xfrm_algo_list {
+	struct xfrm_algo_desc *algs;
+	int entries;
+	u32 type;
+	u32 mask;
 };
 
-typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
-
-enum rt6_nud_state {
-	RT6_NUD_FAIL_HARD = 4294967293,
-	RT6_NUD_FAIL_PROBE = 4294967294,
-	RT6_NUD_FAIL_DO_RR = 4294967295,
-	RT6_NUD_SUCCEED = 1,
-};
-
-struct fib6_nh_dm_arg {
-	struct net *net;
-	const struct in6_addr *saddr;
-	int oif;
-	int flags;
-	struct fib6_nh *nh;
-};
-
-struct __rt6_probe_work {
-	struct work_struct work;
-	struct in6_addr target;
-	struct net_device *dev;
-};
-
-struct fib6_nh_frl_arg {
-	u32 flags;
-	int oif;
-	int strict;
-	int *mpri;
-	bool *do_rr;
-	struct fib6_nh *nh;
-};
-
-struct fib6_nh_excptn_arg {
-	struct rt6_info *rt;
-	int plen;
-};
-
-struct fib6_nh_match_arg {
-	const struct net_device *dev;
-	const struct in6_addr *gw;
-	struct fib6_nh *match;
-};
-
-struct fib6_nh_age_excptn_arg {
-	struct fib6_gc_args *gc_args;
-	long unsigned int now;
-};
-
-struct fib6_nh_rd_arg {
-	struct fib6_result *res;
-	struct flowi6 *fl6;
-	const struct in6_addr *gw;
-	struct rt6_info **ret;
-};
-
-struct ip6rd_flowi {
-	struct flowi6 fl6;
-	struct in6_addr gateway;
-};
-
-struct fib6_nh_del_cached_rt_arg {
-	struct fib6_config *cfg;
-	struct fib6_info *f6i;
-};
-
-struct arg_dev_net_ip {
-	struct net_device *dev;
-	struct net *net;
-	struct in6_addr *addr;
-};
-
-struct arg_netdev_event {
-	const struct net_device *dev;
-	union {
-		unsigned char nh_flags;
-		long unsigned int event;
-	};
-};
-
-struct rt6_mtu_change_arg {
-	struct net_device *dev;
-	unsigned int mtu;
-	struct fib6_info *f6i;
-};
-
-struct rt6_nh {
-	struct fib6_info *fib6_info;
-	struct fib6_config r_cfg;
-	struct list_head next;
-};
-
-struct fib6_nh_exception_dump_walker {
-	struct rt6_rtnl_dump_arg *dump;
-	struct fib6_info *rt;
-	unsigned int flags;
-	unsigned int skip;
-	unsigned int count;
+struct xfrm_aead_name {
+	const char *name;
+	int icvbits;
 };
 
 enum fib6_walk_state {
@@ -106929,89 +138321,7 @@
 	const struct in6_addr *addr;
 };
 
-struct ipv6_mreq {
-	struct in6_addr ipv6mr_multiaddr;
-	int ipv6mr_ifindex;
-};
-
-struct in6_flowlabel_req {
-	struct in6_addr flr_dst;
-	__be32 flr_label;
-	__u8 flr_action;
-	__u8 flr_share;
-	__u16 flr_flags;
-	__u16 flr_expires;
-	__u16 flr_linger;
-	__u32 __flr_pad;
-};
-
-struct ip6_mtuinfo {
-	struct sockaddr_in6 ip6m_addr;
-	__u32 ip6m_mtu;
-};
-
-struct nduseroptmsg {
-	unsigned char nduseropt_family;
-	unsigned char nduseropt_pad1;
-	short unsigned int nduseropt_opts_len;
-	int nduseropt_ifindex;
-	__u8 nduseropt_icmp_type;
-	__u8 nduseropt_icmp_code;
-	short unsigned int nduseropt_pad2;
-	unsigned int nduseropt_pad3;
-};
-
-enum {
-	NDUSEROPT_UNSPEC = 0,
-	NDUSEROPT_SRCADDR = 1,
-	__NDUSEROPT_MAX = 2,
-};
-
-struct nd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	__u8 opt[0];
-};
-
-struct rs_msg {
-	struct icmp6hdr icmph;
-	__u8 opt[0];
-};
-
-struct ra_msg {
-	struct icmp6hdr icmph;
-	__be32 reachable_time;
-	__be32 retrans_timer;
-};
-
-struct icmp6_filter {
-	__u32 data[8];
-};
-
-struct raw6_sock {
-	struct inet_sock inet;
-	__u32 checksum;
-	__u32 offset;
-	struct icmp6_filter filter;
-	__u32 ip6mr_table;
-	struct ipv6_pinfo inet6;
-};
-
-typedef int mh_filter_t(struct sock *, struct sk_buff *);
-
-struct raw6_frag_vec {
-	struct msghdr *msg;
-	int hlen;
-	char c[4];
-};
-
-typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *);
-
-struct ipv6_destopt_hao {
-	__u8 type;
-	__u8 length;
-	struct in6_addr addr;
-} __attribute__((packed));
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
 
 struct icmpv6_msg {
 	struct sk_buff *skb;
@@ -107024,288 +138334,12 @@
 	int fatal;
 };
 
-struct mld_msg {
-	struct icmp6hdr mld_hdr;
-	struct in6_addr mld_mca;
-};
-
-struct mld2_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	struct in6_addr grec_mca;
-	struct in6_addr grec_src[0];
-};
-
-struct mld2_report {
-	struct icmp6hdr mld2r_hdr;
-	struct mld2_grec mld2r_grec[0];
-};
-
-struct mld2_query {
-	struct icmp6hdr mld2q_hdr;
-	struct in6_addr mld2q_mca;
-	__u8 mld2q_qrv: 3;
-	__u8 mld2q_suppress: 1;
-	__u8 mld2q_resv2: 4;
-	__u8 mld2q_qqic;
-	__be16 mld2q_nsrcs;
-	struct in6_addr mld2q_srcs[0];
-};
-
-struct igmp6_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct igmp6_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *im;
-};
-
-enum ip6_defrag_users {
-	IP6_DEFRAG_LOCAL_DELIVER = 0,
-	IP6_DEFRAG_CONNTRACK_IN = 1,
-	__IP6_DEFRAG_CONNTRACK_IN = 65536,
-	IP6_DEFRAG_CONNTRACK_OUT = 65537,
-	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
-	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
-	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
-};
-
-struct frag_queue {
-	struct inet_frag_queue q;
-	int iif;
-	__u16 nhoffset;
-	u8 ecn;
-};
-
-struct tcp6_pseudohdr {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	__be32 len;
-	__be32 protocol;
-};
-
-struct rt0_hdr {
-	struct ipv6_rt_hdr rt_hdr;
-	__u32 reserved;
-	struct in6_addr addr[0];
-};
-
-struct ipv6_rpl_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u32 cmpre: 4;
-	__u32 cmpri: 4;
-	__u32 reserved: 4;
-	__u32 pad: 4;
-	__u32 reserved1: 16;
-	union {
-		struct in6_addr addr[0];
-		__u8 data[0];
-	} segments;
-};
-
-struct tlvtype_proc {
-	int type;
-	bool (*func)(struct sk_buff *, int);
-};
-
 struct ip6fl_iter_state {
 	struct seq_net_private p;
 	struct pid_namespace *pid_ns;
 	int bucket;
 };
 
-struct sr6_tlv {
-	__u8 type;
-	__u8 len;
-	__u8 data[0];
-};
-
-enum {
-	SEG6_ATTR_UNSPEC = 0,
-	SEG6_ATTR_DST = 1,
-	SEG6_ATTR_DSTLEN = 2,
-	SEG6_ATTR_HMACKEYID = 3,
-	SEG6_ATTR_SECRET = 4,
-	SEG6_ATTR_SECRETLEN = 5,
-	SEG6_ATTR_ALGID = 6,
-	SEG6_ATTR_HMACINFO = 7,
-	__SEG6_ATTR_MAX = 8,
-};
-
-enum {
-	SEG6_CMD_UNSPEC = 0,
-	SEG6_CMD_SETHMAC = 1,
-	SEG6_CMD_DUMPHMAC = 2,
-	SEG6_CMD_SET_TUNSRC = 3,
-	SEG6_CMD_GET_TUNSRC = 4,
-	__SEG6_CMD_MAX = 5,
-};
-
-typedef short unsigned int mifi_t;
-
-typedef __u32 if_mask;
-
-struct if_set {
-	if_mask ifs_bits[8];
-};
-
-struct mif6ctl {
-	mifi_t mif6c_mifi;
-	unsigned char mif6c_flags;
-	unsigned char vifc_threshold;
-	__u16 mif6c_pifi;
-	unsigned int vifc_rate_limit;
-};
-
-struct mf6cctl {
-	struct sockaddr_in6 mf6cc_origin;
-	struct sockaddr_in6 mf6cc_mcastgrp;
-	mifi_t mf6cc_parent;
-	struct if_set mf6cc_ifset;
-};
-
-struct sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_mif_req6 {
-	mifi_t mifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct mrt6msg {
-	__u8 im6_mbz;
-	__u8 im6_msgtype;
-	__u16 im6_mif;
-	__u32 im6_pad;
-	struct in6_addr im6_src;
-	struct in6_addr im6_dst;
-};
-
-enum {
-	IP6MRA_CREPORT_UNSPEC = 0,
-	IP6MRA_CREPORT_MSGTYPE = 1,
-	IP6MRA_CREPORT_MIF_ID = 2,
-	IP6MRA_CREPORT_SRC_ADDR = 3,
-	IP6MRA_CREPORT_DST_ADDR = 4,
-	IP6MRA_CREPORT_PKT = 5,
-	__IP6MRA_CREPORT_MAX = 6,
-};
-
-struct mfc6_cache_cmp_arg {
-	struct in6_addr mf6c_mcastgrp;
-	struct in6_addr mf6c_origin;
-};
-
-struct mfc6_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			struct in6_addr mf6c_mcastgrp;
-			struct in6_addr mf6c_origin;
-		};
-		struct mfc6_cache_cmp_arg cmparg;
-	};
-};
-
-struct ip6mr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_mif_req6 {
-	mifi_t mifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct xfrm6_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	struct xfrm6_protocol *next;
-	int priority;
-};
-
-struct br_input_skb_cb {
-	struct net_device *brdev;
-	u16 frag_max_size;
-	u8 igmp;
-	u8 mrouters_only: 1;
-	u8 proxyarp_replied: 1;
-	u8 src_port_isolated: 1;
-	u8 vlan_filtered: 1;
-	u8 br_netfilter_broute: 1;
-	int offload_fwd_mark;
-};
-
-struct nf_bridge_frag_data;
-
-typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
-
-struct fib6_rule {
-	struct fib_rule common;
-	struct rt6key src;
-	struct rt6key dst;
-	u8 tclass;
-};
-
-struct calipso_doi;
-
-struct netlbl_calipso_ops {
-	int (*doi_add)(struct calipso_doi *, struct netlbl_audit *);
-	void (*doi_free)(struct calipso_doi *);
-	int (*doi_remove)(u32, struct netlbl_audit *);
-	struct calipso_doi * (*doi_getdef)(u32);
-	void (*doi_putdef)(struct calipso_doi *);
-	int (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);
-	int (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);
-	int (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*sock_delattr)(struct sock *);
-	int (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*req_delattr)(struct request_sock *);
-	int (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);
-	unsigned char * (*skbuff_optptr)(const struct sk_buff *);
-	int (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	int (*skbuff_delattr)(struct sk_buff *);
-	void (*cache_invalidate)();
-	int (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);
-};
-
-struct calipso_doi {
-	u32 doi;
-	u32 type;
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
 struct calipso_map_cache_bkt {
 	spinlock_t lock;
 	u32 size;
@@ -107322,1316 +138356,11 @@
 };
 
 enum {
-	SEG6_IPTUNNEL_UNSPEC = 0,
-	SEG6_IPTUNNEL_SRH = 1,
-	__SEG6_IPTUNNEL_MAX = 2,
-};
-
-struct seg6_iptunnel_encap {
-	int mode;
-	struct ipv6_sr_hdr srh[0];
-};
-
-enum {
-	SEG6_IPTUN_MODE_INLINE = 0,
-	SEG6_IPTUN_MODE_ENCAP = 1,
-	SEG6_IPTUN_MODE_L2ENCAP = 2,
-};
-
-struct seg6_lwt {
-	struct dst_cache cache;
-	struct seg6_iptunnel_encap tuninfo[0];
-};
-
-enum {
-	SEG6_LOCAL_UNSPEC = 0,
-	SEG6_LOCAL_ACTION = 1,
-	SEG6_LOCAL_SRH = 2,
-	SEG6_LOCAL_TABLE = 3,
-	SEG6_LOCAL_NH4 = 4,
-	SEG6_LOCAL_NH6 = 5,
-	SEG6_LOCAL_IIF = 6,
-	SEG6_LOCAL_OIF = 7,
-	SEG6_LOCAL_BPF = 8,
-	__SEG6_LOCAL_MAX = 9,
-};
-
-enum {
-	SEG6_LOCAL_BPF_PROG_UNSPEC = 0,
-	SEG6_LOCAL_BPF_PROG = 1,
-	SEG6_LOCAL_BPF_PROG_NAME = 2,
-	__SEG6_LOCAL_BPF_PROG_MAX = 3,
-};
-
-struct seg6_local_lwt;
-
-struct seg6_action_desc {
-	int action;
-	long unsigned int attrs;
-	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
-	int static_headroom;
-};
-
-struct seg6_local_lwt {
-	int action;
-	struct ipv6_sr_hdr *srh;
-	int table;
-	struct in_addr nh4;
-	struct in6_addr nh6;
-	int iif;
-	int oif;
-	struct bpf_lwt_prog bpf;
-	int headroom;
-	struct seg6_action_desc *desc;
-};
-
-struct seg6_action_param {
-	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
-	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
-	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
-};
-
-enum {
-	RPL_IPTUNNEL_UNSPEC = 0,
-	RPL_IPTUNNEL_SRH = 1,
-	__RPL_IPTUNNEL_MAX = 2,
-};
-
-struct rpl_iptunnel_encap {
-	struct ipv6_rpl_sr_hdr srh[0];
-};
-
-struct rpl_lwt {
-	struct dst_cache cache;
-	struct rpl_iptunnel_encap tuninfo;
-};
-
-enum {
 	IP6_FH_F_FRAG = 1,
 	IP6_FH_F_AUTH = 2,
 	IP6_FH_F_SKIP_RH = 4,
 };
 
-struct _strp_msg {
-	struct strp_msg strp;
-	int accum_len;
-};
-
-struct vlan_group {
-	unsigned int nr_vlan_devs;
-	struct hlist_node hlist;
-	struct net_device **vlan_devices_arrays[16];
-};
-
-struct vlan_info {
-	struct net_device *real_dev;
-	struct vlan_group grp;
-	struct list_head vid_list;
-	unsigned int nr_vids;
-	struct callback_head rcu;
-};
-
-enum vlan_flags {
-	VLAN_FLAG_REORDER_HDR = 1,
-	VLAN_FLAG_GVRP = 2,
-	VLAN_FLAG_LOOSE_BINDING = 4,
-	VLAN_FLAG_MVRP = 8,
-	VLAN_FLAG_BRIDGE_BINDING = 16,
-};
-
-struct vlan_priority_tci_mapping {
-	u32 priority;
-	u16 vlan_qos;
-	struct vlan_priority_tci_mapping *next;
-};
-
-struct vlan_dev_priv {
-	unsigned int nr_ingress_mappings;
-	u32 ingress_priority_map[8];
-	unsigned int nr_egress_mappings;
-	struct vlan_priority_tci_mapping *egress_priority_map[16];
-	__be16 vlan_proto;
-	u16 vlan_id;
-	u16 flags;
-	struct net_device *real_dev;
-	unsigned char real_dev_addr[6];
-	struct proc_dir_entry *dent;
-	struct vlan_pcpu_stats *vlan_pcpu_stats;
-	struct netpoll *netpoll;
-};
-
-enum vlan_protos {
-	VLAN_PROTO_8021Q = 0,
-	VLAN_PROTO_8021AD = 1,
-	VLAN_PROTO_NUM = 2,
-};
-
-struct vlan_vid_info {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-	int refcount;
-};
-
-enum nl80211_iftype {
-	NL80211_IFTYPE_UNSPECIFIED = 0,
-	NL80211_IFTYPE_ADHOC = 1,
-	NL80211_IFTYPE_STATION = 2,
-	NL80211_IFTYPE_AP = 3,
-	NL80211_IFTYPE_AP_VLAN = 4,
-	NL80211_IFTYPE_WDS = 5,
-	NL80211_IFTYPE_MONITOR = 6,
-	NL80211_IFTYPE_MESH_POINT = 7,
-	NL80211_IFTYPE_P2P_CLIENT = 8,
-	NL80211_IFTYPE_P2P_GO = 9,
-	NL80211_IFTYPE_P2P_DEVICE = 10,
-	NL80211_IFTYPE_OCB = 11,
-	NL80211_IFTYPE_NAN = 12,
-	NUM_NL80211_IFTYPES = 13,
-	NL80211_IFTYPE_MAX = 12,
-};
-
-struct cfg80211_conn;
-
-struct cfg80211_cached_keys;
-
-enum ieee80211_bss_type {
-	IEEE80211_BSS_TYPE_ESS = 0,
-	IEEE80211_BSS_TYPE_PBSS = 1,
-	IEEE80211_BSS_TYPE_IBSS = 2,
-	IEEE80211_BSS_TYPE_MBSS = 3,
-	IEEE80211_BSS_TYPE_ANY = 4,
-};
-
-struct cfg80211_internal_bss;
-
-enum nl80211_chan_width {
-	NL80211_CHAN_WIDTH_20_NOHT = 0,
-	NL80211_CHAN_WIDTH_20 = 1,
-	NL80211_CHAN_WIDTH_40 = 2,
-	NL80211_CHAN_WIDTH_80 = 3,
-	NL80211_CHAN_WIDTH_80P80 = 4,
-	NL80211_CHAN_WIDTH_160 = 5,
-	NL80211_CHAN_WIDTH_5 = 6,
-	NL80211_CHAN_WIDTH_10 = 7,
-	NL80211_CHAN_WIDTH_1 = 8,
-	NL80211_CHAN_WIDTH_2 = 9,
-	NL80211_CHAN_WIDTH_4 = 10,
-	NL80211_CHAN_WIDTH_8 = 11,
-	NL80211_CHAN_WIDTH_16 = 12,
-};
-
-enum ieee80211_edmg_bw_config {
-	IEEE80211_EDMG_BW_CONFIG_4 = 4,
-	IEEE80211_EDMG_BW_CONFIG_5 = 5,
-	IEEE80211_EDMG_BW_CONFIG_6 = 6,
-	IEEE80211_EDMG_BW_CONFIG_7 = 7,
-	IEEE80211_EDMG_BW_CONFIG_8 = 8,
-	IEEE80211_EDMG_BW_CONFIG_9 = 9,
-	IEEE80211_EDMG_BW_CONFIG_10 = 10,
-	IEEE80211_EDMG_BW_CONFIG_11 = 11,
-	IEEE80211_EDMG_BW_CONFIG_12 = 12,
-	IEEE80211_EDMG_BW_CONFIG_13 = 13,
-	IEEE80211_EDMG_BW_CONFIG_14 = 14,
-	IEEE80211_EDMG_BW_CONFIG_15 = 15,
-};
-
-struct ieee80211_edmg {
-	u8 channels;
-	enum ieee80211_edmg_bw_config bw_config;
-};
-
-struct ieee80211_channel;
-
-struct cfg80211_chan_def {
-	struct ieee80211_channel *chan;
-	enum nl80211_chan_width width;
-	u32 center_freq1;
-	u32 center_freq2;
-	struct ieee80211_edmg edmg;
-	u16 freq1_offset;
-};
-
-struct ieee80211_mcs_info {
-	u8 rx_mask[10];
-	__le16 rx_highest;
-	u8 tx_params;
-	u8 reserved[3];
-};
-
-struct ieee80211_ht_cap {
-	__le16 cap_info;
-	u8 ampdu_params_info;
-	struct ieee80211_mcs_info mcs;
-	__le16 extended_ht_cap_info;
-	__le32 tx_BF_cap_info;
-	u8 antenna_selection_info;
-} __attribute__((packed));
-
-struct key_params;
-
-struct cfg80211_ibss_params {
-	const u8 *ssid;
-	const u8 *bssid;
-	struct cfg80211_chan_def chandef;
-	const u8 *ie;
-	u8 ssid_len;
-	u8 ie_len;
-	u16 beacon_interval;
-	u32 basic_rates;
-	bool channel_fixed;
-	bool privacy;
-	bool control_port;
-	bool control_port_over_nl80211;
-	bool userspace_handles_dfs;
-	int: 24;
-	int mcast_rate[5];
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	int: 32;
-} __attribute__((packed));
-
-enum nl80211_auth_type {
-	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
-	NL80211_AUTHTYPE_SHARED_KEY = 1,
-	NL80211_AUTHTYPE_FT = 2,
-	NL80211_AUTHTYPE_NETWORK_EAP = 3,
-	NL80211_AUTHTYPE_SAE = 4,
-	NL80211_AUTHTYPE_FILS_SK = 5,
-	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
-	NL80211_AUTHTYPE_FILS_PK = 7,
-	__NL80211_AUTHTYPE_NUM = 8,
-	NL80211_AUTHTYPE_MAX = 7,
-	NL80211_AUTHTYPE_AUTOMATIC = 8,
-};
-
-enum nl80211_mfp {
-	NL80211_MFP_NO = 0,
-	NL80211_MFP_REQUIRED = 1,
-	NL80211_MFP_OPTIONAL = 2,
-};
-
-struct cfg80211_crypto_settings {
-	u32 wpa_versions;
-	u32 cipher_group;
-	int n_ciphers_pairwise;
-	u32 ciphers_pairwise[5];
-	int n_akm_suites;
-	u32 akm_suites[2];
-	bool control_port;
-	__be16 control_port_ethertype;
-	bool control_port_no_encrypt;
-	bool control_port_over_nl80211;
-	bool control_port_no_preauth;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	const u8 *psk;
-	const u8 *sae_pwd;
-	u8 sae_pwd_len;
-};
-
-struct ieee80211_vht_mcs_info {
-	__le16 rx_mcs_map;
-	__le16 rx_highest;
-	__le16 tx_mcs_map;
-	__le16 tx_highest;
-};
-
-struct ieee80211_vht_cap {
-	__le32 vht_cap_info;
-	struct ieee80211_vht_mcs_info supp_mcs;
-};
-
-enum nl80211_bss_select_attr {
-	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
-	NL80211_BSS_SELECT_ATTR_RSSI = 1,
-	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
-	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
-	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
-	NL80211_BSS_SELECT_ATTR_MAX = 3,
-};
-
-enum nl80211_band {
-	NL80211_BAND_2GHZ = 0,
-	NL80211_BAND_5GHZ = 1,
-	NL80211_BAND_60GHZ = 2,
-	NL80211_BAND_6GHZ = 3,
-	NL80211_BAND_S1GHZ = 4,
-	NUM_NL80211_BANDS = 5,
-};
-
-struct cfg80211_bss_select_adjust {
-	enum nl80211_band band;
-	s8 delta;
-};
-
-struct cfg80211_bss_selection {
-	enum nl80211_bss_select_attr behaviour;
-	union {
-		enum nl80211_band band_pref;
-		struct cfg80211_bss_select_adjust adjust;
-	} param;
-};
-
-struct cfg80211_connect_params {
-	struct ieee80211_channel *channel;
-	struct ieee80211_channel *channel_hint;
-	const u8 *bssid;
-	const u8 *bssid_hint;
-	const u8 *ssid;
-	size_t ssid_len;
-	enum nl80211_auth_type auth_type;
-	int: 32;
-	const u8 *ie;
-	size_t ie_len;
-	bool privacy;
-	int: 24;
-	enum nl80211_mfp mfp;
-	struct cfg80211_crypto_settings crypto;
-	const u8 *key;
-	u8 key_len;
-	u8 key_idx;
-	short: 16;
-	u32 flags;
-	int bg_scan_period;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	bool pbss;
-	int: 24;
-	struct cfg80211_bss_selection bss_select;
-	const u8 *prev_bssid;
-	const u8 *fils_erp_username;
-	size_t fils_erp_username_len;
-	const u8 *fils_erp_realm;
-	size_t fils_erp_realm_len;
-	u16 fils_erp_next_seq_num;
-	long: 48;
-	const u8 *fils_erp_rrk;
-	size_t fils_erp_rrk_len;
-	bool want_1x;
-	int: 24;
-	struct ieee80211_edmg edmg;
-	int: 32;
-} __attribute__((packed));
-
-struct cfg80211_cqm_config;
-
-struct wiphy;
-
-struct wireless_dev {
-	struct wiphy *wiphy;
-	enum nl80211_iftype iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	u32 identifier;
-	struct list_head mgmt_registrations;
-	spinlock_t mgmt_registrations_lock;
-	u8 mgmt_registrations_need_update: 1;
-	struct mutex mtx;
-	bool use_4addr;
-	bool is_running;
-	u8 address[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 mesh_id_len;
-	u8 mesh_id_up_len;
-	struct cfg80211_conn *conn;
-	struct cfg80211_cached_keys *connect_keys;
-	enum ieee80211_bss_type conn_bss_type;
-	u32 conn_owner_nlportid;
-	struct work_struct disconnect_wk;
-	u8 disconnect_bssid[6];
-	struct list_head event_list;
-	spinlock_t event_lock;
-	struct cfg80211_internal_bss *current_bss;
-	struct cfg80211_chan_def preset_chandef;
-	struct cfg80211_chan_def chandef;
-	bool ibss_fixed;
-	bool ibss_dfs_possible;
-	bool ps;
-	int ps_timeout;
-	int beacon_interval;
-	u32 ap_unexpected_nlportid;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	bool cac_started;
-	long unsigned int cac_start_time;
-	unsigned int cac_time_ms;
-	struct {
-		struct cfg80211_ibss_params ibss;
-		struct cfg80211_connect_params connect;
-		struct cfg80211_cached_keys *keys;
-		const u8 *ie;
-		size_t ie_len;
-		u8 bssid[6];
-		u8 prev_bssid[6];
-		u8 ssid[32];
-		s8 default_key;
-		s8 default_mgmt_key;
-		bool prev_bssid_valid;
-	} wext;
-	struct cfg80211_cqm_config *cqm_config;
-	struct list_head pmsr_list;
-	spinlock_t pmsr_lock;
-	struct work_struct pmsr_free_wk;
-	long unsigned int unprot_beacon_reported;
-};
-
-struct iw_encode_ext {
-	__u32 ext_flags;
-	__u8 tx_seq[8];
-	__u8 rx_seq[8];
-	struct sockaddr addr;
-	__u16 alg;
-	__u16 key_len;
-	__u8 key[0];
-};
-
-struct iwreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union iwreq_data u;
-};
-
-struct iw_event {
-	__u16 len;
-	__u16 cmd;
-	union iwreq_data u;
-};
-
-struct compat_iw_point {
-	compat_caddr_t pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct __compat_iw_event {
-	__u16 len;
-	__u16 cmd;
-	compat_caddr_t pointer;
-};
-
-enum nl80211_reg_initiator {
-	NL80211_REGDOM_SET_BY_CORE = 0,
-	NL80211_REGDOM_SET_BY_USER = 1,
-	NL80211_REGDOM_SET_BY_DRIVER = 2,
-	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
-};
-
-enum nl80211_dfs_regions {
-	NL80211_DFS_UNSET = 0,
-	NL80211_DFS_FCC = 1,
-	NL80211_DFS_ETSI = 2,
-	NL80211_DFS_JP = 3,
-};
-
-enum nl80211_user_reg_hint_type {
-	NL80211_USER_REG_HINT_USER = 0,
-	NL80211_USER_REG_HINT_CELL_BASE = 1,
-	NL80211_USER_REG_HINT_INDOOR = 2,
-};
-
-enum nl80211_mntr_flags {
-	__NL80211_MNTR_FLAG_INVALID = 0,
-	NL80211_MNTR_FLAG_FCSFAIL = 1,
-	NL80211_MNTR_FLAG_PLCPFAIL = 2,
-	NL80211_MNTR_FLAG_CONTROL = 3,
-	NL80211_MNTR_FLAG_OTHER_BSS = 4,
-	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
-	NL80211_MNTR_FLAG_ACTIVE = 6,
-	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
-	NL80211_MNTR_FLAG_MAX = 6,
-};
-
-enum nl80211_key_mode {
-	NL80211_KEY_RX_TX = 0,
-	NL80211_KEY_NO_TX = 1,
-	NL80211_KEY_SET_TX = 2,
-};
-
-enum nl80211_bss_scan_width {
-	NL80211_BSS_CHAN_WIDTH_20 = 0,
-	NL80211_BSS_CHAN_WIDTH_10 = 1,
-	NL80211_BSS_CHAN_WIDTH_5 = 2,
-	NL80211_BSS_CHAN_WIDTH_1 = 3,
-	NL80211_BSS_CHAN_WIDTH_2 = 4,
-};
-
-struct nl80211_wowlan_tcp_data_seq {
-	__u32 start;
-	__u32 offset;
-	__u32 len;
-};
-
-struct nl80211_wowlan_tcp_data_token {
-	__u32 offset;
-	__u32 len;
-	__u8 token_stream[0];
-};
-
-struct nl80211_wowlan_tcp_data_token_feature {
-	__u32 min_len;
-	__u32 max_len;
-	__u32 bufsize;
-};
-
-enum nl80211_ext_feature_index {
-	NL80211_EXT_FEATURE_VHT_IBSS = 0,
-	NL80211_EXT_FEATURE_RRM = 1,
-	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
-	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
-	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
-	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
-	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
-	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
-	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
-	NL80211_EXT_FEATURE_FILS_STA = 9,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
-	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
-	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
-	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
-	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
-	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
-	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
-	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
-	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
-	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
-	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
-	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_TXQS = 28,
-	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
-	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
-	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
-	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
-	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
-	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
-	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
-	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
-	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
-	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
-	NL80211_EXT_FEATURE_AQL = 40,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
-	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
-	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
-	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
-	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
-	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
-	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
-	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
-	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
-	NUM_NL80211_EXT_FEATURES = 54,
-	MAX_NL80211_EXT_FEATURES = 53,
-};
-
-enum nl80211_dfs_state {
-	NL80211_DFS_USABLE = 0,
-	NL80211_DFS_UNAVAILABLE = 1,
-	NL80211_DFS_AVAILABLE = 2,
-};
-
-struct nl80211_vendor_cmd_info {
-	__u32 vendor_id;
-	__u32 subcmd;
-};
-
-struct ieee80211_he_cap_elem {
-	u8 mac_cap_info[6];
-	u8 phy_cap_info[11];
-};
-
-struct ieee80211_he_mcs_nss_supp {
-	__le16 rx_mcs_80;
-	__le16 tx_mcs_80;
-	__le16 rx_mcs_160;
-	__le16 tx_mcs_160;
-	__le16 rx_mcs_80p80;
-	__le16 tx_mcs_80p80;
-};
-
-struct ieee80211_he_6ghz_capa {
-	__le16 capa;
-};
-
-enum environment_cap {
-	ENVIRON_ANY = 0,
-	ENVIRON_INDOOR = 1,
-	ENVIRON_OUTDOOR = 2,
-};
-
-struct regulatory_request {
-	struct callback_head callback_head;
-	int wiphy_idx;
-	enum nl80211_reg_initiator initiator;
-	enum nl80211_user_reg_hint_type user_reg_hint_type;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	bool intersect;
-	bool processed;
-	enum environment_cap country_ie_env;
-	struct list_head list;
-};
-
-struct ieee80211_freq_range {
-	u32 start_freq_khz;
-	u32 end_freq_khz;
-	u32 max_bandwidth_khz;
-};
-
-struct ieee80211_power_rule {
-	u32 max_antenna_gain;
-	u32 max_eirp;
-};
-
-struct ieee80211_wmm_ac {
-	u16 cw_min;
-	u16 cw_max;
-	u16 cot;
-	u8 aifsn;
-};
-
-struct ieee80211_wmm_rule {
-	struct ieee80211_wmm_ac client[4];
-	struct ieee80211_wmm_ac ap[4];
-};
-
-struct ieee80211_reg_rule {
-	struct ieee80211_freq_range freq_range;
-	struct ieee80211_power_rule power_rule;
-	struct ieee80211_wmm_rule wmm_rule;
-	u32 flags;
-	u32 dfs_cac_ms;
-	bool has_wmm;
-};
-
-struct ieee80211_regdomain {
-	struct callback_head callback_head;
-	u32 n_reg_rules;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	struct ieee80211_reg_rule reg_rules[0];
-};
-
-struct ieee80211_channel {
-	enum nl80211_band band;
-	u32 center_freq;
-	u16 freq_offset;
-	u16 hw_value;
-	u32 flags;
-	int max_antenna_gain;
-	int max_power;
-	int max_reg_power;
-	bool beacon_found;
-	u32 orig_flags;
-	int orig_mag;
-	int orig_mpwr;
-	enum nl80211_dfs_state dfs_state;
-	long unsigned int dfs_state_entered;
-	unsigned int dfs_cac_ms;
-};
-
-struct ieee80211_rate {
-	u32 flags;
-	u16 bitrate;
-	u16 hw_value;
-	u16 hw_value_short;
-};
-
-struct ieee80211_sta_ht_cap {
-	u16 cap;
-	bool ht_supported;
-	u8 ampdu_factor;
-	u8 ampdu_density;
-	struct ieee80211_mcs_info mcs;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_vht_cap {
-	bool vht_supported;
-	u32 cap;
-	struct ieee80211_vht_mcs_info vht_mcs;
-};
-
-struct ieee80211_sta_he_cap {
-	bool has_he;
-	struct ieee80211_he_cap_elem he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
-	u8 ppe_thres[25];
-} __attribute__((packed));
-
-struct ieee80211_sband_iftype_data {
-	u16 types_mask;
-	struct ieee80211_sta_he_cap he_cap;
-	struct ieee80211_he_6ghz_capa he_6ghz_capa;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_s1g_cap {
-	bool s1g;
-	u8 cap[10];
-	u8 nss_mcs[5];
-};
-
-struct ieee80211_supported_band {
-	struct ieee80211_channel *channels;
-	struct ieee80211_rate *bitrates;
-	enum nl80211_band band;
-	int n_channels;
-	int n_bitrates;
-	struct ieee80211_sta_ht_cap ht_cap;
-	struct ieee80211_sta_vht_cap vht_cap;
-	struct ieee80211_sta_s1g_cap s1g_cap;
-	struct ieee80211_edmg edmg_cap;
-	u16 n_iftype_data;
-	const struct ieee80211_sband_iftype_data *iftype_data;
-};
-
-struct key_params {
-	const u8 *key;
-	const u8 *seq;
-	int key_len;
-	int seq_len;
-	u16 vlan_id;
-	u32 cipher;
-	enum nl80211_key_mode mode;
-};
-
-struct mac_address {
-	u8 addr[6];
-};
-
-struct cfg80211_ssid {
-	u8 ssid[32];
-	u8 ssid_len;
-};
-
-enum cfg80211_signal_type {
-	CFG80211_SIGNAL_TYPE_NONE = 0,
-	CFG80211_SIGNAL_TYPE_MBM = 1,
-	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
-};
-
-struct ieee80211_txrx_stypes;
-
-struct ieee80211_iface_combination;
-
-struct wiphy_iftype_akm_suites;
-
-struct wiphy_wowlan_support;
-
-struct cfg80211_wowlan;
-
-struct wiphy_iftype_ext_capab;
-
-struct wiphy_coalesce_support;
-
-struct wiphy_vendor_command;
-
-struct cfg80211_pmsr_capabilities;
-
-struct wiphy {
-	u8 perm_addr[6];
-	u8 addr_mask[6];
-	struct mac_address *addresses;
-	const struct ieee80211_txrx_stypes *mgmt_stypes;
-	const struct ieee80211_iface_combination *iface_combinations;
-	int n_iface_combinations;
-	u16 software_iftypes;
-	u16 n_addresses;
-	u16 interface_modes;
-	u16 max_acl_mac_addrs;
-	u32 flags;
-	u32 regulatory_flags;
-	u32 features;
-	u8 ext_features[7];
-	u32 ap_sme_capa;
-	enum cfg80211_signal_type signal_type;
-	int bss_priv_size;
-	u8 max_scan_ssids;
-	u8 max_sched_scan_reqs;
-	u8 max_sched_scan_ssids;
-	u8 max_match_sets;
-	u16 max_scan_ie_len;
-	u16 max_sched_scan_ie_len;
-	u32 max_sched_scan_plans;
-	u32 max_sched_scan_plan_interval;
-	u32 max_sched_scan_plan_iterations;
-	int n_cipher_suites;
-	const u32 *cipher_suites;
-	int n_akm_suites;
-	const u32 *akm_suites;
-	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
-	unsigned int num_iftype_akm_suites;
-	u8 retry_short;
-	u8 retry_long;
-	u32 frag_threshold;
-	u32 rts_threshold;
-	u8 coverage_class;
-	char fw_version[32];
-	u32 hw_version;
-	const struct wiphy_wowlan_support *wowlan;
-	struct cfg80211_wowlan *wowlan_config;
-	u16 max_remain_on_channel_duration;
-	u8 max_num_pmkids;
-	u32 available_antennas_tx;
-	u32 available_antennas_rx;
-	u32 probe_resp_offload;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
-	unsigned int num_iftype_ext_capab;
-	const void *privid;
-	struct ieee80211_supported_band *bands[5];
-	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
-	const struct ieee80211_regdomain *regd;
-	struct device dev;
-	bool registered;
-	struct dentry *debugfsdir;
-	const struct ieee80211_ht_cap *ht_capa_mod_mask;
-	const struct ieee80211_vht_cap *vht_capa_mod_mask;
-	struct list_head wdev_list;
-	possible_net_t _net;
-	const struct iw_handler_def *wext;
-	const struct wiphy_coalesce_support *coalesce;
-	const struct wiphy_vendor_command *vendor_commands;
-	const struct nl80211_vendor_cmd_info *vendor_events;
-	int n_vendor_commands;
-	int n_vendor_events;
-	u16 max_ap_assoc_sta;
-	u8 max_num_csa_counters;
-	u32 bss_select_support;
-	u8 nan_supported_bands;
-	u32 txq_limit;
-	u32 txq_memory_limit;
-	u32 txq_quantum;
-	long unsigned int tx_queue_len;
-	u8 support_mbssid: 1;
-	u8 support_only_he_mbssid: 1;
-	const struct cfg80211_pmsr_capabilities *pmsr_capa;
-	struct {
-		u64 peer;
-		u64 vif;
-		u8 max_retry;
-	} tid_config_support;
-	u8 max_data_retry_count;
-	long: 56;
-	long: 64;
-	char priv[0];
-};
-
-struct cfg80211_match_set {
-	struct cfg80211_ssid ssid;
-	u8 bssid[6];
-	s32 rssi_thold;
-	s32 per_band_rssi_thold[5];
-};
-
-struct cfg80211_sched_scan_plan {
-	u32 interval;
-	u32 iterations;
-};
-
-struct cfg80211_sched_scan_request {
-	u64 reqid;
-	struct cfg80211_ssid *ssids;
-	int n_ssids;
-	u32 n_channels;
-	enum nl80211_bss_scan_width scan_width;
-	const u8 *ie;
-	size_t ie_len;
-	u32 flags;
-	struct cfg80211_match_set *match_sets;
-	int n_match_sets;
-	s32 min_rssi_thold;
-	u32 delay;
-	struct cfg80211_sched_scan_plan *scan_plans;
-	int n_scan_plans;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	bool relative_rssi_set;
-	s8 relative_rssi;
-	struct cfg80211_bss_select_adjust rssi_adjust;
-	struct wiphy *wiphy;
-	struct net_device *dev;
-	long unsigned int scan_start;
-	bool report_results;
-	struct callback_head callback_head;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	struct list_head list;
-	struct ieee80211_channel *channels[0];
-};
-
-struct cfg80211_pkt_pattern {
-	const u8 *mask;
-	const u8 *pattern;
-	int pattern_len;
-	int pkt_offset;
-};
-
-struct cfg80211_wowlan_tcp {
-	struct socket *sock;
-	__be32 src;
-	__be32 dst;
-	u16 src_port;
-	u16 dst_port;
-	u8 dst_mac[6];
-	int payload_len;
-	const u8 *payload;
-	struct nl80211_wowlan_tcp_data_seq payload_seq;
-	u32 data_interval;
-	u32 wake_len;
-	const u8 *wake_data;
-	const u8 *wake_mask;
-	u32 tokens_size;
-	struct nl80211_wowlan_tcp_data_token payload_tok;
-};
-
-struct cfg80211_wowlan {
-	bool any;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	struct cfg80211_pkt_pattern *patterns;
-	struct cfg80211_wowlan_tcp *tcp;
-	int n_patterns;
-	struct cfg80211_sched_scan_request *nd_config;
-};
-
-struct ieee80211_iface_limit {
-	u16 max;
-	u16 types;
-};
-
-struct ieee80211_iface_combination {
-	const struct ieee80211_iface_limit *limits;
-	u32 num_different_channels;
-	u16 max_interfaces;
-	u8 n_limits;
-	bool beacon_int_infra_match;
-	u8 radar_detect_widths;
-	u8 radar_detect_regions;
-	u32 beacon_int_min_gcd;
-};
-
-struct ieee80211_txrx_stypes {
-	u16 tx;
-	u16 rx;
-};
-
-struct wiphy_wowlan_tcp_support {
-	const struct nl80211_wowlan_tcp_data_token_feature *tok;
-	u32 data_payload_max;
-	u32 data_interval_max;
-	u32 wake_payload_max;
-	bool seq;
-};
-
-struct wiphy_wowlan_support {
-	u32 flags;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-	int max_nd_match_sets;
-	const struct wiphy_wowlan_tcp_support *tcp;
-};
-
-struct wiphy_coalesce_support {
-	int n_rules;
-	int max_delay;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-};
-
-struct wiphy_vendor_command {
-	struct nl80211_vendor_cmd_info info;
-	u32 flags;
-	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
-	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-};
-
-struct wiphy_iftype_ext_capab {
-	enum nl80211_iftype iftype;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-};
-
-struct cfg80211_pmsr_capabilities {
-	unsigned int max_peers;
-	u8 report_ap_tsf: 1;
-	u8 randomize_mac_addr: 1;
-	struct {
-		u32 preambles;
-		u32 bandwidths;
-		s8 max_bursts_exponent;
-		u8 max_ftms_per_burst;
-		u8 supported: 1;
-		u8 asap: 1;
-		u8 non_asap: 1;
-		u8 request_lci: 1;
-		u8 request_civicloc: 1;
-		u8 trigger_based: 1;
-		u8 non_trigger_based: 1;
-	} ftm;
-};
-
-struct wiphy_iftype_akm_suites {
-	u16 iftypes_mask;
-	const u32 *akm_suites;
-	int n_akm_suites;
-};
-
-struct iw_ioctl_description {
-	__u8 header_type;
-	__u8 token_type;
-	__u16 token_size;
-	__u16 min_tokens;
-	__u16 max_tokens;
-	__u32 flags;
-};
-
-typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
-
-struct iw_thrspy {
-	struct sockaddr addr;
-	struct iw_quality qual;
-	struct iw_quality low;
-	struct iw_quality high;
-};
-
-struct netlbl_af4list {
-	__be32 addr;
-	__be32 mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_af6list {
-	struct in6_addr addr;
-	struct in6_addr mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_domaddr_map {
-	struct list_head list4;
-	struct list_head list6;
-};
-
-struct netlbl_dommap_def {
-	u32 type;
-	union {
-		struct netlbl_domaddr_map *addrsel;
-		struct cipso_v4_doi *cipso;
-		struct calipso_doi *calipso;
-	};
-};
-
-struct netlbl_domaddr4_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af4list list;
-};
-
-struct netlbl_domaddr6_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af6list list;
-};
-
-struct netlbl_dom_map {
-	char *domain;
-	u16 family;
-	struct netlbl_dommap_def def;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_domhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-enum {
-	NLBL_MGMT_C_UNSPEC = 0,
-	NLBL_MGMT_C_ADD = 1,
-	NLBL_MGMT_C_REMOVE = 2,
-	NLBL_MGMT_C_LISTALL = 3,
-	NLBL_MGMT_C_ADDDEF = 4,
-	NLBL_MGMT_C_REMOVEDEF = 5,
-	NLBL_MGMT_C_LISTDEF = 6,
-	NLBL_MGMT_C_PROTOCOLS = 7,
-	NLBL_MGMT_C_VERSION = 8,
-	NLBL_MGMT_C_S0_SET = 9,
-	NLBL_MGMT_C_S0_GET = 10,
-	__NLBL_MGMT_C_MAX = 11,
-};
-
-enum {
-	NLBL_MGMT_A_UNSPEC = 0,
-	NLBL_MGMT_A_DOMAIN = 1,
-	NLBL_MGMT_A_PROTOCOL = 2,
-	NLBL_MGMT_A_VERSION = 3,
-	NLBL_MGMT_A_CV4DOI = 4,
-	NLBL_MGMT_A_IPV6ADDR = 5,
-	NLBL_MGMT_A_IPV6MASK = 6,
-	NLBL_MGMT_A_IPV4ADDR = 7,
-	NLBL_MGMT_A_IPV4MASK = 8,
-	NLBL_MGMT_A_ADDRSELECTOR = 9,
-	NLBL_MGMT_A_SELECTORLIST = 10,
-	NLBL_MGMT_A_FAMILY = 11,
-	NLBL_MGMT_A_CLPDOI = 12,
-	NLBL_MGMT_A_S0 = 13,
-	__NLBL_MGMT_A_MAX = 14,
-};
-
-struct netlbl_domhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_UNLABEL_C_UNSPEC = 0,
-	NLBL_UNLABEL_C_ACCEPT = 1,
-	NLBL_UNLABEL_C_LIST = 2,
-	NLBL_UNLABEL_C_STATICADD = 3,
-	NLBL_UNLABEL_C_STATICREMOVE = 4,
-	NLBL_UNLABEL_C_STATICLIST = 5,
-	NLBL_UNLABEL_C_STATICADDDEF = 6,
-	NLBL_UNLABEL_C_STATICREMOVEDEF = 7,
-	NLBL_UNLABEL_C_STATICLISTDEF = 8,
-	__NLBL_UNLABEL_C_MAX = 9,
-};
-
-enum {
-	NLBL_UNLABEL_A_UNSPEC = 0,
-	NLBL_UNLABEL_A_ACPTFLG = 1,
-	NLBL_UNLABEL_A_IPV6ADDR = 2,
-	NLBL_UNLABEL_A_IPV6MASK = 3,
-	NLBL_UNLABEL_A_IPV4ADDR = 4,
-	NLBL_UNLABEL_A_IPV4MASK = 5,
-	NLBL_UNLABEL_A_IFACE = 6,
-	NLBL_UNLABEL_A_SECCTX = 7,
-	__NLBL_UNLABEL_A_MAX = 8,
-};
-
-struct netlbl_unlhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-struct netlbl_unlhsh_addr4 {
-	u32 secid;
-	struct netlbl_af4list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_addr6 {
-	u32 secid;
-	struct netlbl_af6list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_iface {
-	int ifindex;
-	struct list_head addr4_list;
-	struct list_head addr6_list;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_CIPSOV4_C_UNSPEC = 0,
-	NLBL_CIPSOV4_C_ADD = 1,
-	NLBL_CIPSOV4_C_REMOVE = 2,
-	NLBL_CIPSOV4_C_LIST = 3,
-	NLBL_CIPSOV4_C_LISTALL = 4,
-	__NLBL_CIPSOV4_C_MAX = 5,
-};
-
-enum {
-	NLBL_CIPSOV4_A_UNSPEC = 0,
-	NLBL_CIPSOV4_A_DOI = 1,
-	NLBL_CIPSOV4_A_MTYPE = 2,
-	NLBL_CIPSOV4_A_TAG = 3,
-	NLBL_CIPSOV4_A_TAGLST = 4,
-	NLBL_CIPSOV4_A_MLSLVLLOC = 5,
-	NLBL_CIPSOV4_A_MLSLVLREM = 6,
-	NLBL_CIPSOV4_A_MLSLVL = 7,
-	NLBL_CIPSOV4_A_MLSLVLLST = 8,
-	NLBL_CIPSOV4_A_MLSCATLOC = 9,
-	NLBL_CIPSOV4_A_MLSCATREM = 10,
-	NLBL_CIPSOV4_A_MLSCAT = 11,
-	NLBL_CIPSOV4_A_MLSCATLST = 12,
-	__NLBL_CIPSOV4_A_MAX = 13,
-};
-
-struct netlbl_cipsov4_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct netlbl_domhsh_walk_arg___2 {
-	struct netlbl_audit *audit_info;
-	u32 doi;
-};
-
-enum {
-	NLBL_CALIPSO_C_UNSPEC = 0,
-	NLBL_CALIPSO_C_ADD = 1,
-	NLBL_CALIPSO_C_REMOVE = 2,
-	NLBL_CALIPSO_C_LIST = 3,
-	NLBL_CALIPSO_C_LISTALL = 4,
-	__NLBL_CALIPSO_C_MAX = 5,
-};
-
-enum {
-	NLBL_CALIPSO_A_UNSPEC = 0,
-	NLBL_CALIPSO_A_DOI = 1,
-	NLBL_CALIPSO_A_MTYPE = 2,
-	__NLBL_CALIPSO_A_MAX = 3,
-};
-
-struct netlbl_calipso_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
 struct dcbmsg {
 	__u8 dcb_family;
 	__u8 cmd;
@@ -108888,795 +138617,6 @@
 	int (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);
 };
 
-enum switchdev_attr_id {
-	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
-	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
-	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 2,
-	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 3,
-	SWITCHDEV_ATTR_ID_PORT_MROUTER = 4,
-	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 5,
-	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 6,
-	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 7,
-	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 8,
-	SWITCHDEV_ATTR_ID_MRP_PORT_STATE = 9,
-	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 10,
-};
-
-struct switchdev_attr {
-	struct net_device *orig_dev;
-	enum switchdev_attr_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
-	union {
-		u8 stp_state;
-		long unsigned int brport_flags;
-		bool mrouter;
-		clock_t ageing_time;
-		bool vlan_filtering;
-		bool mc_disabled;
-		u8 mrp_port_state;
-		u8 mrp_port_role;
-	} u;
-};
-
-enum switchdev_notifier_type {
-	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
-	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
-	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
-	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
-	SWITCHDEV_FDB_OFFLOADED = 5,
-	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
-	SWITCHDEV_PORT_OBJ_ADD = 7,
-	SWITCHDEV_PORT_OBJ_DEL = 8,
-	SWITCHDEV_PORT_ATTR_SET = 9,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
-	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
-};
-
-struct switchdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct switchdev_notifier_port_obj_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_obj *obj;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-struct switchdev_notifier_port_attr_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_attr *attr;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-typedef void switchdev_deferred_func_t(struct net_device *, const void *);
-
-struct switchdev_deferred_item {
-	struct list_head list;
-	struct net_device *dev;
-	switchdev_deferred_func_t *func;
-	long unsigned int data[0];
-};
-
-enum l3mdev_type {
-	L3MDEV_TYPE_UNSPEC = 0,
-	L3MDEV_TYPE_VRF = 1,
-	__L3MDEV_TYPE_MAX = 2,
-};
-
-typedef int (*lookup_by_table_id_t)(struct net *, u32);
-
-struct l3mdev_handler {
-	lookup_by_table_id_t dev_lookup;
-};
-
-struct ncsi_dev {
-	int state;
-	int link_up;
-	struct net_device *dev;
-	void (*handler)(struct ncsi_dev *);
-};
-
-enum {
-	NCSI_CAP_BASE = 0,
-	NCSI_CAP_GENERIC = 0,
-	NCSI_CAP_BC = 1,
-	NCSI_CAP_MC = 2,
-	NCSI_CAP_BUFFER = 3,
-	NCSI_CAP_AEN = 4,
-	NCSI_CAP_VLAN = 5,
-	NCSI_CAP_MAX = 6,
-};
-
-enum {
-	NCSI_MODE_BASE = 0,
-	NCSI_MODE_ENABLE = 0,
-	NCSI_MODE_TX_ENABLE = 1,
-	NCSI_MODE_LINK = 2,
-	NCSI_MODE_VLAN = 3,
-	NCSI_MODE_BC = 4,
-	NCSI_MODE_MC = 5,
-	NCSI_MODE_AEN = 6,
-	NCSI_MODE_FC = 7,
-	NCSI_MODE_MAX = 8,
-};
-
-struct ncsi_channel_version {
-	u32 version;
-	u32 alpha2;
-	u8 fw_name[12];
-	u32 fw_version;
-	u16 pci_ids[4];
-	u32 mf_id;
-};
-
-struct ncsi_channel_cap {
-	u32 index;
-	u32 cap;
-};
-
-struct ncsi_channel_mode {
-	u32 index;
-	u32 enable;
-	u32 size;
-	u32 data[8];
-};
-
-struct ncsi_channel_mac_filter {
-	u8 n_uc;
-	u8 n_mc;
-	u8 n_mixed;
-	u64 bitmap;
-	unsigned char *addrs;
-};
-
-struct ncsi_channel_vlan_filter {
-	u8 n_vids;
-	u64 bitmap;
-	u16 *vids;
-};
-
-struct ncsi_channel_stats {
-	u32 hnc_cnt_hi;
-	u32 hnc_cnt_lo;
-	u32 hnc_rx_bytes;
-	u32 hnc_tx_bytes;
-	u32 hnc_rx_uc_pkts;
-	u32 hnc_rx_mc_pkts;
-	u32 hnc_rx_bc_pkts;
-	u32 hnc_tx_uc_pkts;
-	u32 hnc_tx_mc_pkts;
-	u32 hnc_tx_bc_pkts;
-	u32 hnc_fcs_err;
-	u32 hnc_align_err;
-	u32 hnc_false_carrier;
-	u32 hnc_runt_pkts;
-	u32 hnc_jabber_pkts;
-	u32 hnc_rx_pause_xon;
-	u32 hnc_rx_pause_xoff;
-	u32 hnc_tx_pause_xon;
-	u32 hnc_tx_pause_xoff;
-	u32 hnc_tx_s_collision;
-	u32 hnc_tx_m_collision;
-	u32 hnc_l_collision;
-	u32 hnc_e_collision;
-	u32 hnc_rx_ctl_frames;
-	u32 hnc_rx_64_frames;
-	u32 hnc_rx_127_frames;
-	u32 hnc_rx_255_frames;
-	u32 hnc_rx_511_frames;
-	u32 hnc_rx_1023_frames;
-	u32 hnc_rx_1522_frames;
-	u32 hnc_rx_9022_frames;
-	u32 hnc_tx_64_frames;
-	u32 hnc_tx_127_frames;
-	u32 hnc_tx_255_frames;
-	u32 hnc_tx_511_frames;
-	u32 hnc_tx_1023_frames;
-	u32 hnc_tx_1522_frames;
-	u32 hnc_tx_9022_frames;
-	u32 hnc_rx_valid_bytes;
-	u32 hnc_rx_runt_pkts;
-	u32 hnc_rx_jabber_pkts;
-	u32 ncsi_rx_cmds;
-	u32 ncsi_dropped_cmds;
-	u32 ncsi_cmd_type_errs;
-	u32 ncsi_cmd_csum_errs;
-	u32 ncsi_rx_pkts;
-	u32 ncsi_tx_pkts;
-	u32 ncsi_tx_aen_pkts;
-	u32 pt_tx_pkts;
-	u32 pt_tx_dropped;
-	u32 pt_tx_channel_err;
-	u32 pt_tx_us_err;
-	u32 pt_rx_pkts;
-	u32 pt_rx_dropped;
-	u32 pt_rx_channel_err;
-	u32 pt_rx_us_err;
-	u32 pt_rx_os_err;
-};
-
-struct ncsi_package;
-
-struct ncsi_channel {
-	unsigned char id;
-	int state;
-	bool reconfigure_needed;
-	spinlock_t lock;
-	struct ncsi_package *package;
-	struct ncsi_channel_version version;
-	struct ncsi_channel_cap caps[6];
-	struct ncsi_channel_mode modes[8];
-	struct ncsi_channel_mac_filter mac_filter;
-	struct ncsi_channel_vlan_filter vlan_filter;
-	struct ncsi_channel_stats stats;
-	struct {
-		struct timer_list timer;
-		bool enabled;
-		unsigned int state;
-	} monitor;
-	struct list_head node;
-	struct list_head link;
-};
-
-struct ncsi_dev_priv;
-
-struct ncsi_package {
-	unsigned char id;
-	unsigned char uuid[16];
-	struct ncsi_dev_priv *ndp;
-	spinlock_t lock;
-	unsigned int channel_num;
-	struct list_head channels;
-	struct list_head node;
-	bool multi_channel;
-	u32 channel_whitelist;
-	struct ncsi_channel *preferred_channel;
-};
-
-struct ncsi_request {
-	unsigned char id;
-	bool used;
-	unsigned int flags;
-	struct ncsi_dev_priv *ndp;
-	struct sk_buff *cmd;
-	struct sk_buff *rsp;
-	struct timer_list timer;
-	bool enabled;
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr nlhdr;
-};
-
-struct ncsi_dev_priv {
-	struct ncsi_dev ndev;
-	unsigned int flags;
-	unsigned int gma_flag;
-	spinlock_t lock;
-	unsigned int package_probe_id;
-	unsigned int package_num;
-	struct list_head packages;
-	struct ncsi_channel *hot_channel;
-	struct ncsi_request requests[256];
-	unsigned int request_id;
-	unsigned int pending_req_num;
-	struct ncsi_package *active_package;
-	struct ncsi_channel *active_channel;
-	struct list_head channel_queue;
-	struct work_struct work;
-	struct packet_type ptype;
-	struct list_head node;
-	struct list_head vlan_vids;
-	bool multi_package;
-	bool mlx_multi_host;
-	u32 package_whitelist;
-};
-
-struct ncsi_cmd_arg {
-	struct ncsi_dev_priv *ndp;
-	unsigned char type;
-	unsigned char id;
-	unsigned char package;
-	unsigned char channel;
-	short unsigned int payload;
-	unsigned int req_flags;
-	union {
-		unsigned char bytes[16];
-		short unsigned int words[8];
-		unsigned int dwords[4];
-	};
-	unsigned char *data;
-	struct genl_info *info;
-};
-
-struct ncsi_pkt_hdr {
-	unsigned char mc_id;
-	unsigned char revision;
-	unsigned char reserved;
-	unsigned char id;
-	unsigned char type;
-	unsigned char channel;
-	__be16 length;
-	__be32 reserved1[2];
-};
-
-struct ncsi_cmd_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-};
-
-struct ncsi_cmd_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 checksum;
-	unsigned char pad[26];
-};
-
-struct ncsi_cmd_sp_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char hw_arbitration;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_dc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char ald;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_rc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 reserved;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_ae_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mc_id;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_sl_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 oem_mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_svf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be16 reserved;
-	__be16 vlan;
-	__be16 reserved1;
-	unsigned char index;
-	unsigned char enable;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ev_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_sma_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char mac[6];
-	unsigned char index;
-	unsigned char at_e;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ebf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_egmf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_snfc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_oem_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_cmd_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct sk_buff *, struct ncsi_cmd_arg *);
-};
-
-enum {
-	NCSI_CAP_GENERIC_HWA = 1,
-	NCSI_CAP_GENERIC_HDS = 2,
-	NCSI_CAP_GENERIC_FC = 4,
-	NCSI_CAP_GENERIC_FC1 = 8,
-	NCSI_CAP_GENERIC_MC = 16,
-	NCSI_CAP_GENERIC_HWA_UNKNOWN = 0,
-	NCSI_CAP_GENERIC_HWA_SUPPORT = 32,
-	NCSI_CAP_GENERIC_HWA_NOT_SUPPORT = 64,
-	NCSI_CAP_GENERIC_HWA_RESERVED = 96,
-	NCSI_CAP_GENERIC_HWA_MASK = 96,
-	NCSI_CAP_GENERIC_MASK = 127,
-	NCSI_CAP_BC_ARP = 1,
-	NCSI_CAP_BC_DHCPC = 2,
-	NCSI_CAP_BC_DHCPS = 4,
-	NCSI_CAP_BC_NETBIOS = 8,
-	NCSI_CAP_BC_MASK = 15,
-	NCSI_CAP_MC_IPV6_NEIGHBOR = 1,
-	NCSI_CAP_MC_IPV6_ROUTER = 2,
-	NCSI_CAP_MC_DHCPV6_RELAY = 4,
-	NCSI_CAP_MC_DHCPV6_WELL_KNOWN = 8,
-	NCSI_CAP_MC_IPV6_MLD = 16,
-	NCSI_CAP_MC_IPV6_NEIGHBOR_S = 32,
-	NCSI_CAP_MC_MASK = 63,
-	NCSI_CAP_AEN_LSC = 1,
-	NCSI_CAP_AEN_CR = 2,
-	NCSI_CAP_AEN_HDS = 4,
-	NCSI_CAP_AEN_MASK = 7,
-	NCSI_CAP_VLAN_ONLY = 1,
-	NCSI_CAP_VLAN_NO = 2,
-	NCSI_CAP_VLAN_ANY = 4,
-	NCSI_CAP_VLAN_MASK = 7,
-};
-
-struct ncsi_rsp_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	__be16 code;
-	__be16 reason;
-};
-
-struct ncsi_rsp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_rsp_oem_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_mlx_pkt {
-	unsigned char cmd_rev;
-	unsigned char cmd;
-	unsigned char param;
-	unsigned char optional;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_bcm_pkt {
-	unsigned char ver;
-	unsigned char type;
-	__be16 len;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_gls_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 other;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[10];
-};
-
-struct ncsi_rsp_gvi_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 ncsi_version;
-	unsigned char reserved[3];
-	unsigned char alpha2;
-	unsigned char fw_name[12];
-	__be32 fw_version;
-	__be16 pci_ids[4];
-	__be32 mf_id;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gc_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cap;
-	__be32 bc_cap;
-	__be32 mc_cap;
-	__be32 buf_cap;
-	__be32 aen_cap;
-	unsigned char vlan_cnt;
-	unsigned char mixed_cnt;
-	unsigned char mc_cnt;
-	unsigned char uc_cnt;
-	unsigned char reserved[2];
-	unsigned char vlan_mode;
-	unsigned char channel_cnt;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char mac_cnt;
-	unsigned char reserved[2];
-	unsigned char mac_enable;
-	unsigned char vlan_cnt;
-	unsigned char reserved1;
-	__be16 vlan_enable;
-	__be32 link_mode;
-	__be32 bc_mode;
-	__be32 valid_modes;
-	unsigned char vlan_mode;
-	unsigned char fc_mode;
-	unsigned char reserved2[2];
-	__be32 aen_mode;
-	unsigned char mac[6];
-	__be16 vlan;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gcps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cnt_hi;
-	__be32 cnt_lo;
-	__be32 rx_bytes;
-	__be32 tx_bytes;
-	__be32 rx_uc_pkts;
-	__be32 rx_mc_pkts;
-	__be32 rx_bc_pkts;
-	__be32 tx_uc_pkts;
-	__be32 tx_mc_pkts;
-	__be32 tx_bc_pkts;
-	__be32 fcs_err;
-	__be32 align_err;
-	__be32 false_carrier;
-	__be32 runt_pkts;
-	__be32 jabber_pkts;
-	__be32 rx_pause_xon;
-	__be32 rx_pause_xoff;
-	__be32 tx_pause_xon;
-	__be32 tx_pause_xoff;
-	__be32 tx_s_collision;
-	__be32 tx_m_collision;
-	__be32 l_collision;
-	__be32 e_collision;
-	__be32 rx_ctl_frames;
-	__be32 rx_64_frames;
-	__be32 rx_127_frames;
-	__be32 rx_255_frames;
-	__be32 rx_511_frames;
-	__be32 rx_1023_frames;
-	__be32 rx_1522_frames;
-	__be32 rx_9022_frames;
-	__be32 tx_64_frames;
-	__be32 tx_127_frames;
-	__be32 tx_255_frames;
-	__be32 tx_511_frames;
-	__be32 tx_1023_frames;
-	__be32 tx_1522_frames;
-	__be32 tx_9022_frames;
-	__be32 rx_valid_bytes;
-	__be32 rx_runt_pkts;
-	__be32 rx_jabber_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gns_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 rx_cmds;
-	__be32 dropped_cmds;
-	__be32 cmd_type_errs;
-	__be32 cmd_csum_errs;
-	__be32 rx_pkts;
-	__be32 tx_pkts;
-	__be32 tx_aen_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gnpts_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 tx_pkts;
-	__be32 tx_dropped;
-	__be32 tx_channel_err;
-	__be32 tx_us_err;
-	__be32 rx_pkts;
-	__be32 rx_dropped;
-	__be32 rx_channel_err;
-	__be32 rx_us_err;
-	__be32 rx_os_err;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gpuuid_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char uuid[16];
-	__be32 checksum;
-};
-
-struct ncsi_rsp_oem_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_rsp_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_aen_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	unsigned char reserved2[3];
-	unsigned char type;
-};
-
-struct ncsi_aen_lsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[14];
-};
-
-struct ncsi_aen_hncdsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_aen_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_dev_priv *, struct ncsi_aen_pkt_hdr *);
-};
-
-enum {
-	ncsi_dev_state_registered = 0,
-	ncsi_dev_state_functional = 256,
-	ncsi_dev_state_probe = 512,
-	ncsi_dev_state_config = 768,
-	ncsi_dev_state_suspend = 1024,
-};
-
-enum {
-	MLX_MC_RBT_SUPPORT = 1,
-	MLX_MC_RBT_AVL = 8,
-};
-
-enum {
-	ncsi_dev_state_major = 65280,
-	ncsi_dev_state_minor = 255,
-	ncsi_dev_state_probe_deselect = 513,
-	ncsi_dev_state_probe_package = 514,
-	ncsi_dev_state_probe_channel = 515,
-	ncsi_dev_state_probe_mlx_gma = 516,
-	ncsi_dev_state_probe_mlx_smaf = 517,
-	ncsi_dev_state_probe_cis = 518,
-	ncsi_dev_state_probe_gvi = 519,
-	ncsi_dev_state_probe_gc = 520,
-	ncsi_dev_state_probe_gls = 521,
-	ncsi_dev_state_probe_dp = 522,
-	ncsi_dev_state_config_sp = 769,
-	ncsi_dev_state_config_cis = 770,
-	ncsi_dev_state_config_oem_gma = 771,
-	ncsi_dev_state_config_clear_vids = 772,
-	ncsi_dev_state_config_svf = 773,
-	ncsi_dev_state_config_ev = 774,
-	ncsi_dev_state_config_sma = 775,
-	ncsi_dev_state_config_ebf = 776,
-	ncsi_dev_state_config_dgmf = 777,
-	ncsi_dev_state_config_ecnt = 778,
-	ncsi_dev_state_config_ec = 779,
-	ncsi_dev_state_config_ae = 780,
-	ncsi_dev_state_config_gls = 781,
-	ncsi_dev_state_config_done = 782,
-	ncsi_dev_state_suspend_select = 1025,
-	ncsi_dev_state_suspend_gls = 1026,
-	ncsi_dev_state_suspend_dcnt = 1027,
-	ncsi_dev_state_suspend_dc = 1028,
-	ncsi_dev_state_suspend_deselect = 1029,
-	ncsi_dev_state_suspend_done = 1030,
-};
-
-struct vlan_vid {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-};
-
-struct ncsi_oem_gma_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_cmd_arg *);
-};
-
-enum ncsi_nl_commands {
-	NCSI_CMD_UNSPEC = 0,
-	NCSI_CMD_PKG_INFO = 1,
-	NCSI_CMD_SET_INTERFACE = 2,
-	NCSI_CMD_CLEAR_INTERFACE = 3,
-	NCSI_CMD_SEND_CMD = 4,
-	NCSI_CMD_SET_PACKAGE_MASK = 5,
-	NCSI_CMD_SET_CHANNEL_MASK = 6,
-	__NCSI_CMD_AFTER_LAST = 7,
-	NCSI_CMD_MAX = 6,
-};
-
-enum ncsi_nl_attrs {
-	NCSI_ATTR_UNSPEC = 0,
-	NCSI_ATTR_IFINDEX = 1,
-	NCSI_ATTR_PACKAGE_LIST = 2,
-	NCSI_ATTR_PACKAGE_ID = 3,
-	NCSI_ATTR_CHANNEL_ID = 4,
-	NCSI_ATTR_DATA = 5,
-	NCSI_ATTR_MULTI_FLAG = 6,
-	NCSI_ATTR_PACKAGE_MASK = 7,
-	NCSI_ATTR_CHANNEL_MASK = 8,
-	__NCSI_ATTR_AFTER_LAST = 9,
-	NCSI_ATTR_MAX = 8,
-};
-
-enum ncsi_nl_pkg_attrs {
-	NCSI_PKG_ATTR_UNSPEC = 0,
-	NCSI_PKG_ATTR = 1,
-	NCSI_PKG_ATTR_ID = 2,
-	NCSI_PKG_ATTR_FORCED = 3,
-	NCSI_PKG_ATTR_CHANNEL_LIST = 4,
-	__NCSI_PKG_ATTR_AFTER_LAST = 5,
-	NCSI_PKG_ATTR_MAX = 4,
-};
-
-enum ncsi_nl_channel_attrs {
-	NCSI_CHANNEL_ATTR_UNSPEC = 0,
-	NCSI_CHANNEL_ATTR = 1,
-	NCSI_CHANNEL_ATTR_ID = 2,
-	NCSI_CHANNEL_ATTR_VERSION_MAJOR = 3,
-	NCSI_CHANNEL_ATTR_VERSION_MINOR = 4,
-	NCSI_CHANNEL_ATTR_VERSION_STR = 5,
-	NCSI_CHANNEL_ATTR_LINK_STATE = 6,
-	NCSI_CHANNEL_ATTR_ACTIVE = 7,
-	NCSI_CHANNEL_ATTR_FORCED = 8,
-	NCSI_CHANNEL_ATTR_VLAN_LIST = 9,
-	NCSI_CHANNEL_ATTR_VLAN_ID = 10,
-	__NCSI_CHANNEL_ATTR_AFTER_LAST = 11,
-	NCSI_CHANNEL_ATTR_MAX = 10,
-};
-
 struct sockaddr_xdp {
 	__u16 sxdp_family;
 	__u16 sxdp_flags;
@@ -109699,14 +138639,6 @@
 	struct xdp_ring_offset cr;
 };
 
-struct xdp_umem_reg {
-	__u64 addr;
-	__u64 len;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 flags;
-};
-
 struct xdp_statistics {
 	__u64 rx_dropped;
 	__u64 rx_invalid_descs;
@@ -109720,24 +138652,6 @@
 	__u32 flags;
 };
 
-struct xdp_desc {
-	__u64 addr;
-	__u32 len;
-	__u32 options;
-};
-
-struct xdp_ring;
-
-struct xsk_queue {
-	u32 ring_mask;
-	u32 nentries;
-	u32 cached_prod;
-	u32 cached_cons;
-	struct xdp_ring *ring;
-	u64 invalid_descs;
-	u64 queue_empty_descs;
-};
-
 struct xdp_ring_offset_v1 {
 	__u64 producer;
 	__u64 consumer;
@@ -109751,385 +138665,6 @@
 	struct xdp_ring_offset_v1 cr;
 };
 
-struct xsk_map_node {
-	struct list_head node;
-	struct xsk_map *map;
-	struct xdp_sock **map_entry;
-};
-
-struct xdp_ring {
-	u32 producer;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 pad;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 consumer;
-	u32 flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_rxtx_ring {
-	struct xdp_ring ptrs;
-	struct xdp_desc desc[0];
-};
-
-struct xdp_umem_ring {
-	struct xdp_ring ptrs;
-	u64 desc[0];
-};
-
-struct xsk_dma_map {
-	dma_addr_t *dma_pages;
-	struct device *dev;
-	struct net_device *netdev;
-	refcount_t users;
-	struct list_head list;
-	u32 dma_pages_cnt;
-	bool dma_need_sync;
-};
-
-struct xdp_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_show;
-	__u32 xdiag_cookie[2];
-};
-
-struct xdp_diag_msg {
-	__u8 xdiag_family;
-	__u8 xdiag_type;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_cookie[2];
-};
-
-enum {
-	XDP_DIAG_NONE = 0,
-	XDP_DIAG_INFO = 1,
-	XDP_DIAG_UID = 2,
-	XDP_DIAG_RX_RING = 3,
-	XDP_DIAG_TX_RING = 4,
-	XDP_DIAG_UMEM = 5,
-	XDP_DIAG_UMEM_FILL_RING = 6,
-	XDP_DIAG_UMEM_COMPLETION_RING = 7,
-	XDP_DIAG_MEMINFO = 8,
-	XDP_DIAG_STATS = 9,
-	__XDP_DIAG_MAX = 10,
-};
-
-struct xdp_diag_info {
-	__u32 ifindex;
-	__u32 queue_id;
-};
-
-struct xdp_diag_ring {
-	__u32 entries;
-};
-
-struct xdp_diag_umem {
-	__u64 size;
-	__u32 id;
-	__u32 num_pages;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 ifindex;
-	__u32 queue_id;
-	__u32 flags;
-	__u32 refs;
-};
-
-struct xdp_diag_stats {
-	__u64 n_rx_dropped;
-	__u64 n_rx_invalid;
-	__u64 n_rx_full;
-	__u64 n_fill_ring_empty;
-	__u64 n_tx_invalid;
-	__u64 n_tx_ring_empty;
-};
-
-struct mptcp_mib {
-	long unsigned int mibs[23];
-};
-
-struct mptcp_options_received {
-	u64 sndr_key;
-	u64 rcvr_key;
-	u64 data_ack;
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 dss: 1;
-	u16 add_addr: 1;
-	u16 rm_addr: 1;
-	u16 family: 4;
-	u16 echo: 1;
-	u16 backup: 1;
-	u32 token;
-	u32 nonce;
-	u64 thmac;
-	u8 hmac[20];
-	u8 join_id;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-	u8 addr_id;
-	u8 rm_id;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-	u64 ahmac;
-	u16 port;
-};
-
-struct mptcp_addr_info {
-	sa_family_t family;
-	__be16 port;
-	u8 id;
-	u8 flags;
-	int ifindex;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-};
-
-enum mptcp_pm_status {
-	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
-	MPTCP_PM_RM_ADDR_RECEIVED = 1,
-	MPTCP_PM_ESTABLISHED = 2,
-	MPTCP_PM_SUBFLOW_ESTABLISHED = 3,
-};
-
-struct mptcp_pm_data {
-	struct mptcp_addr_info local;
-	struct mptcp_addr_info remote;
-	struct list_head anno_list;
-	spinlock_t lock;
-	bool add_addr_signal;
-	bool rm_addr_signal;
-	bool server_side;
-	bool work_pending;
-	bool accept_addr;
-	bool accept_subflow;
-	bool add_addr_echo;
-	u8 add_addr_signaled;
-	u8 add_addr_accepted;
-	u8 local_addr_used;
-	u8 subflows;
-	u8 add_addr_signal_max;
-	u8 add_addr_accept_max;
-	u8 local_addr_max;
-	u8 subflows_max;
-	u8 status;
-	u8 rm_id;
-};
-
-struct mptcp_data_frag {
-	struct list_head list;
-	u64 data_seq;
-	int data_len;
-	int offset;
-	int overhead;
-	struct page *page;
-};
-
-struct mptcp_sock {
-	struct inet_connection_sock sk;
-	u64 local_key;
-	u64 remote_key;
-	u64 write_seq;
-	u64 ack_seq;
-	u64 rcv_data_fin_seq;
-	struct sock *last_snd;
-	int snd_burst;
-	atomic64_t snd_una;
-	long unsigned int timer_ival;
-	u32 token;
-	long unsigned int flags;
-	bool can_ack;
-	bool fully_established;
-	bool rcv_data_fin;
-	bool snd_data_fin_enable;
-	bool use_64bit_ack;
-	spinlock_t join_list_lock;
-	struct work_struct work;
-	struct sk_buff *ooo_last_skb;
-	struct rb_root out_of_order_queue;
-	struct list_head conn_list;
-	struct list_head rtx_queue;
-	struct list_head join_list;
-	struct skb_ext *cached_ext;
-	struct socket *subflow;
-	struct sock *first;
-	struct mptcp_pm_data pm;
-	struct {
-		u32 space;
-		u32 copied;
-		u64 time;
-		u64 rtt_us;
-	} rcvq_space;
-};
-
-struct mptcp_subflow_request_sock {
-	struct tcp_request_sock sk;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 backup: 1;
-	u8 local_id;
-	u8 remote_id;
-	u64 local_key;
-	u64 idsn;
-	u32 token;
-	u32 ssn_offset;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_nonce;
-	struct mptcp_sock *msk;
-	struct hlist_nulls_node token_node;
-};
-
-enum mptcp_data_avail {
-	MPTCP_SUBFLOW_NODATA = 0,
-	MPTCP_SUBFLOW_DATA_AVAIL = 1,
-	MPTCP_SUBFLOW_OOO_DATA = 2,
-};
-
-struct mptcp_subflow_context {
-	struct list_head node;
-	u64 local_key;
-	u64 remote_key;
-	u64 idsn;
-	u64 map_seq;
-	u32 snd_isn;
-	u32 token;
-	u32 rel_write_seq;
-	u32 map_subflow_seq;
-	u32 ssn_offset;
-	u32 map_data_len;
-	u32 request_mptcp: 1;
-	u32 request_join: 1;
-	u32 request_bkup: 1;
-	u32 mp_capable: 1;
-	u32 mp_join: 1;
-	u32 fully_established: 1;
-	u32 pm_notified: 1;
-	u32 conn_finished: 1;
-	u32 map_valid: 1;
-	u32 mpc_map: 1;
-	u32 backup: 1;
-	u32 rx_eof: 1;
-	u32 can_ack: 1;
-	enum mptcp_data_avail data_avail;
-	u32 remote_nonce;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_token;
-	u8 hmac[20];
-	u8 local_id;
-	u8 remote_id;
-	struct sock *tcp_sock;
-	struct sock *conn;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	void (*tcp_data_ready)(struct sock *);
-	void (*tcp_state_change)(struct sock *);
-	void (*tcp_write_space)(struct sock *);
-	struct callback_head rcu;
-};
-
-enum linux_mptcp_mib_field {
-	MPTCP_MIB_NUM = 0,
-	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
-	MPTCP_MIB_MPCAPABLEPASSIVEACK = 2,
-	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 3,
-	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 4,
-	MPTCP_MIB_RETRANSSEGS = 5,
-	MPTCP_MIB_JOINNOTOKEN = 6,
-	MPTCP_MIB_JOINSYNRX = 7,
-	MPTCP_MIB_JOINSYNACKRX = 8,
-	MPTCP_MIB_JOINSYNACKMAC = 9,
-	MPTCP_MIB_JOINACKRX = 10,
-	MPTCP_MIB_JOINACKMAC = 11,
-	MPTCP_MIB_DSSNOMATCH = 12,
-	MPTCP_MIB_INFINITEMAPRX = 13,
-	MPTCP_MIB_OFOQUEUETAIL = 14,
-	MPTCP_MIB_OFOQUEUE = 15,
-	MPTCP_MIB_OFOMERGE = 16,
-	MPTCP_MIB_NODSSWINDOW = 17,
-	MPTCP_MIB_DUPDATA = 18,
-	MPTCP_MIB_ADDADDR = 19,
-	MPTCP_MIB_ECHOADD = 20,
-	MPTCP_MIB_RMADDR = 21,
-	MPTCP_MIB_RMSUBFLOW = 22,
-	__MPTCP_MIB_MAX = 23,
-};
-
-struct mptcp_skb_cb {
-	u64 map_seq;
-	u64 end_seq;
-	u32 offset;
-};
-
-struct subflow_send_info {
-	struct sock *ssk;
-	u64 ratio;
-};
-
-enum mapping_status {
-	MAPPING_OK = 0,
-	MAPPING_INVALID = 1,
-	MAPPING_EMPTY = 2,
-	MAPPING_DATA_FIN = 3,
-	MAPPING_DUMMY = 4,
-};
-
-struct token_bucket {
-	spinlock_t lock;
-	int chain_len;
-	struct hlist_nulls_head req_chain;
-	struct hlist_nulls_head msk_chain;
-};
-
-struct mptcp_pernet {
-	struct ctl_table_header *ctl_table_hdr;
-	int mptcp_enabled;
-};
-
-enum {
-	INET_ULP_INFO_UNSPEC = 0,
-	INET_ULP_INFO_NAME = 1,
-	INET_ULP_INFO_TLS = 2,
-	INET_ULP_INFO_MPTCP = 3,
-	__INET_ULP_INFO_MAX = 4,
-};
-
 enum {
 	MPTCP_SUBFLOW_ATTR_UNSPEC = 0,
 	MPTCP_SUBFLOW_ATTR_TOKEN_REM = 1,
@@ -110146,70 +138681,11 @@
 	__MPTCP_SUBFLOW_ATTR_MAX = 12,
 };
 
-enum {
-	MPTCP_PM_ATTR_UNSPEC = 0,
-	MPTCP_PM_ATTR_ADDR = 1,
-	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
-	MPTCP_PM_ATTR_SUBFLOWS = 3,
-	__MPTCP_PM_ATTR_MAX = 4,
-};
-
-enum {
-	MPTCP_PM_ADDR_ATTR_UNSPEC = 0,
-	MPTCP_PM_ADDR_ATTR_FAMILY = 1,
-	MPTCP_PM_ADDR_ATTR_ID = 2,
-	MPTCP_PM_ADDR_ATTR_ADDR4 = 3,
-	MPTCP_PM_ADDR_ATTR_ADDR6 = 4,
-	MPTCP_PM_ADDR_ATTR_PORT = 5,
-	MPTCP_PM_ADDR_ATTR_FLAGS = 6,
-	MPTCP_PM_ADDR_ATTR_IF_IDX = 7,
-	__MPTCP_PM_ADDR_ATTR_MAX = 8,
-};
-
-enum {
-	MPTCP_PM_CMD_UNSPEC = 0,
-	MPTCP_PM_CMD_ADD_ADDR = 1,
-	MPTCP_PM_CMD_DEL_ADDR = 2,
-	MPTCP_PM_CMD_GET_ADDR = 3,
-	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
-	MPTCP_PM_CMD_SET_LIMITS = 5,
-	MPTCP_PM_CMD_GET_LIMITS = 6,
-	__MPTCP_PM_CMD_AFTER_LAST = 7,
-};
-
-struct mptcp_pm_addr_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct callback_head rcu;
-};
-
-struct mptcp_pm_add_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct timer_list add_timer;
-	struct mptcp_sock *sock;
-	u8 retrans_times;
-};
-
-struct pm_nl_pernet {
-	spinlock_t lock;
-	struct list_head local_addr_list;
-	unsigned int addrs;
-	unsigned int add_addr_signal_max;
-	unsigned int add_addr_accept_max;
-	unsigned int local_addr_max;
-	unsigned int subflows_max;
-	unsigned int next_id;
-};
-
-struct join_entry {
-	u32 token;
-	u32 remote_nonce;
-	u32 local_nonce;
-	u8 join_id;
-	u8 local_id;
-	u8 backup;
-	u8 valid;
+struct mptcp_diag_ctx {
+	long int s_slot;
+	long int s_num;
+	unsigned int l_slot;
+	unsigned int l_num;
 };
 
 typedef struct {
@@ -110218,166 +138694,25 @@
 	u64 memory_protection_attribute;
 } efi_properties_table_t;
 
-enum efi_secureboot_mode {
-	efi_secureboot_mode_unset = 0,
-	efi_secureboot_mode_unknown = 1,
-	efi_secureboot_mode_disabled = 2,
-	efi_secureboot_mode_enabled = 3,
-};
-
-typedef union {
-	struct {
-		u32 revision;
-		efi_handle_t parent_handle;
-		efi_system_table_t *system_table;
-		efi_handle_t device_handle;
-		void *file_path;
-		void *reserved;
-		u32 load_options_size;
-		void *load_options;
-		void *image_base;
-		__u64 image_size;
-		unsigned int image_code_type;
-		unsigned int image_data_type;
-		efi_status_t (*unload)(efi_handle_t);
-	};
-	struct {
-		u32 revision;
-		u32 parent_handle;
-		u32 system_table;
-		u32 device_handle;
-		u32 file_path;
-		u32 reserved;
-		u32 load_options_size;
-		u32 load_options;
-		u32 image_base;
-		__u64 image_size;
-		u32 image_code_type;
-		u32 image_data_type;
-		u32 unload;
-	} mixed_mode;
-} efi_loaded_image_t;
-
-struct efi_boot_memmap {
-	efi_memory_desc_t **map;
-	long unsigned int *map_size;
-	long unsigned int *desc_size;
-	u32 *desc_ver;
-	long unsigned int *key_ptr;
-	long unsigned int *buff_size;
-};
-
-struct exit_boot_struct {
-	efi_memory_desc_t *runtime_map;
-	int *runtime_entry_count;
-	void *new_fdt_addr;
-};
-
 typedef struct {
-	u64 size;
-	u64 file_size;
-	u64 phys_size;
-	efi_time_t create_time;
-	efi_time_t last_access_time;
-	efi_time_t modification_time;
-	__u64 attribute;
-	efi_char16_t filename[0];
-} efi_file_info_t;
+	u16 version;
+	u16 length;
+	u32 runtime_services_supported;
+} efi_rt_properties_table_t;
 
-struct efi_file_protocol;
-
-typedef struct efi_file_protocol efi_file_protocol_t;
-
-struct efi_file_protocol {
-	u64 revision;
-	efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
-	efi_status_t (*close)(efi_file_protocol_t *);
-	efi_status_t (*delete)(efi_file_protocol_t *);
-	efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
-	efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
-	efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
-	efi_status_t (*set_position)(efi_file_protocol_t *, u64);
-	efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
-	efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
-	efi_status_t (*flush)(efi_file_protocol_t *);
-};
-
-struct efi_simple_file_system_protocol;
-
-typedef struct efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
-
-struct efi_simple_file_system_protocol {
-	u64 revision;
-	int (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
-};
-
-struct finfo {
-	efi_file_info_t info;
-	efi_char16_t filename[256];
-};
-
-typedef struct {
-	u32 red_mask;
-	u32 green_mask;
-	u32 blue_mask;
-	u32 reserved_mask;
-} efi_pixel_bitmask_t;
-
-typedef struct {
-	u32 version;
-	u32 horizontal_resolution;
-	u32 vertical_resolution;
-	int pixel_format;
-	efi_pixel_bitmask_t pixel_information;
-	u32 pixels_per_scan_line;
-} efi_graphics_output_mode_info_t;
-
-union efi_graphics_output_protocol_mode {
+struct linux_efi_memreserve {
+	int size;
+	atomic_t count;
+	phys_addr_t next;
 	struct {
-		u32 max_mode;
-		u32 mode;
-		efi_graphics_output_mode_info_t *info;
-		long unsigned int size_of_info;
-		efi_physical_addr_t frame_buffer_base;
-		long unsigned int frame_buffer_size;
-	};
-	struct {
-		u32 max_mode;
-		u32 mode;
-		u32 info;
-		u32 size_of_info;
-		u64 frame_buffer_base;
-		u32 frame_buffer_size;
-	} mixed_mode;
+		phys_addr_t base;
+		phys_addr_t size;
+	} entry[0];
 };
 
-typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
-
-union efi_graphics_output_protocol;
-
-typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
-
-union efi_graphics_output_protocol {
-	struct {
-		efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, long unsigned int *, efi_graphics_output_mode_info_t **);
-		efi_status_t (*set_mode)(efi_graphics_output_protocol_t *, u32);
-		void *blt;
-		efi_graphics_output_protocol_mode_t *mode;
-	};
-	struct {
-		u32 query_mode;
-		u32 set_mode;
-		u32 blt;
-		u32 mode;
-	} mixed_mode;
-};
-
-enum efi_cmdline_option {
-	EFI_CMDLINE_NONE = 0,
-	EFI_CMDLINE_MODE_NUM = 1,
-	EFI_CMDLINE_RES = 2,
-	EFI_CMDLINE_AUTO = 3,
-	EFI_CMDLINE_LIST = 4,
+struct linux_efi_random_seed {
+	u32 size;
+	u8 bits[0];
 };
 
 union efi_rng_protocol;
@@ -110395,69 +138730,6 @@
 	} mixed_mode;
 };
 
-typedef u32 efi_tcg2_event_log_format;
-
-union efi_tcg2_protocol {
-	struct {
-		void *get_capability;
-		efi_status_t (*get_event_log)(efi_handle_t, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
-		void *hash_log_extend_event;
-		void *submit_command;
-		void *get_active_pcr_banks;
-		void *set_active_pcr_banks;
-		void *get_result_of_set_active_pcr_banks;
-	};
-	struct {
-		u32 get_capability;
-		u32 get_event_log;
-		u32 hash_log_extend_event;
-		u32 submit_command;
-		u32 get_active_pcr_banks;
-		u32 set_active_pcr_banks;
-		u32 get_result_of_set_active_pcr_banks;
-	} mixed_mode;
-};
-
-typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
-
-struct efi_vendor_dev_path {
-	struct efi_generic_dev_path header;
-	efi_guid_t vendorguid;
-	u8 vendordata[0];
-};
-
-union efi_load_file_protocol;
-
-typedef union efi_load_file_protocol efi_load_file_protocol_t;
-
-union efi_load_file_protocol {
-	struct {
-		efi_status_t (*load_file)(efi_load_file_protocol_t *, efi_device_path_protocol_t *, bool, long unsigned int *, void *);
-	};
-	struct {
-		u32 load_file;
-	} mixed_mode;
-};
-
-typedef union efi_load_file_protocol efi_load_file2_protocol_t;
-
-typedef struct {
-	u32 attributes;
-	u16 file_path_list_length;
-	u8 variable_data[0];
-} __attribute__((packed)) efi_load_option_t;
-
-typedef struct {
-	u32 attributes;
-	u16 file_path_list_length;
-	const efi_char16_t *description;
-	const efi_device_path_protocol_t *file_path_list;
-	size_t optional_data_size;
-	const void *optional_data;
-} efi_load_option_unpacked_t;
-
-typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
-
 typedef enum {
 	EfiPciIoWidthUint8 = 0,
 	EfiPciIoWidthUint16 = 1,
@@ -110536,6 +138808,8739 @@
 	} mixed_mode;
 };
 
+struct ftr_set_desc {
+	char name[20];
+	struct arm64_ftr_override *override;
+	struct {
+		char name[10];
+		u8 shift;
+		u8 width;
+		bool (*filter)(u64);
+	} fields[0];
+};
+
+struct compat_statfs64;
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short int contexts;
+	bool contexts_maxed;
+};
+
+struct frame_tail {
+	struct frame_tail *fp;
+	long unsigned int lr;
+};
+
+struct compat_frame_tail {
+	compat_uptr_t fp;
+	u32 sp;
+	u32 lr;
+};
+
+struct trace_event_raw_instruction_emulation {
+	struct trace_entry ent;
+	u32 __data_loc_instr;
+	u64 addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_instruction_emulation {
+	u32 instr;
+};
+
+typedef void (*btf_trace_instruction_emulation)(void *, const char *, u64);
+
+enum insn_emulation_mode {
+	INSN_UNDEF = 0,
+	INSN_EMULATE = 1,
+	INSN_HW = 2,
+};
+
+enum legacy_insn_status {
+	INSN_DEPRECATED = 0,
+	INSN_OBSOLETE = 1,
+};
+
+struct insn_emulation_ops {
+	const char *name;
+	enum legacy_insn_status status;
+	struct undef_hook *hooks;
+	int (*set_hw_mode)(bool);
+};
+
+struct insn_emulation {
+	struct list_head node;
+	struct insn_emulation_ops *ops;
+	int current_mode;
+	int min;
+	int max;
+};
+
+struct kvm_coalesced_mmio_dev {
+	struct list_head list;
+	struct kvm_io_device dev;
+	struct kvm *kvm;
+	struct kvm_coalesced_mmio_zone zone;
+};
+
+struct kvm_pmu_event_filter {
+	__u16 base_event;
+	__u16 nevents;
+	__u8 action;
+	__u8 pad[3];
+};
+
+struct arm_pmu_entry {
+	struct list_head entry;
+	struct arm_pmu *arm_pmu;
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+struct wq_flusher;
+
+struct workqueue_attrs;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int flags;
+	struct pool_workqueue *cpu_pwqs;
+	struct pool_workqueue *numa_pwq_tbl[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	bool no_numa;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	struct work_struct unbound_release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	long unsigned int watchdog_ts;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 30000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 10,
+	CREATE_COOLDOWN = 100,
+	RESCUER_NICE_LEVEL = 4294967276,
+	HIGHPRI_NICE_LEVEL = 4294967276,
+	WQ_NAME_LEN = 24,
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long int (*fn)(void *);
+	void *arg;
+	long int ret;
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+struct numa_group {
+	refcount_t refcount;
+	spinlock_t lock;
+	int nr_tasks;
+	pid_t gid;
+	int active_nodes;
+	struct callback_head rcu;
+	long unsigned int total_faults;
+	long unsigned int max_faults_cpu;
+	long unsigned int faults[0];
+};
+
+enum numa_faults_stats {
+	NUMA_MEM = 0,
+	NUMA_CPU = 1,
+	NUMA_MEMBUF = 2,
+	NUMA_CPUBUF = 3,
+};
+
+enum numa_type {
+	node_has_spare = 0,
+	node_fully_busy = 1,
+	node_overloaded = 2,
+};
+
+struct numa_stats {
+	long unsigned int load;
+	long unsigned int runnable;
+	long unsigned int util;
+	long unsigned int compute_capacity;
+	unsigned int nr_running;
+	unsigned int weight;
+	enum numa_type node_type;
+	int idle_cpu;
+};
+
+struct task_numa_env {
+	struct task_struct *p;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	int imb_numa_nr;
+	struct numa_stats src_stats;
+	struct numa_stats dst_stats;
+	int imbalance_pct;
+	int dist;
+	struct task_struct *best_task;
+	long int best_imp;
+	int best_cpu;
+};
+
+struct energy_env {
+	long unsigned int task_busy_time;
+	long unsigned int pd_busy_time;
+	long unsigned int cpu_cap;
+	long unsigned int pd_cap;
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_asym_packing = 3,
+	group_imbalanced = 4,
+	group_overloaded = 5,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long int imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+};
+
+struct sg_lb_stats {
+	long unsigned int avg_load;
+	long unsigned int group_load;
+	long unsigned int group_capacity;
+	long unsigned int group_util;
+	long unsigned int group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	long unsigned int group_misfit_task_load;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	long unsigned int total_load;
+	long unsigned int total_capacity;
+	long unsigned int avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+struct platform_hibernation_ops {
+	int (*begin)(pm_message_t);
+	void (*end)();
+	int (*pre_snapshot)();
+	void (*finish)();
+	int (*prepare)();
+	int (*enter)();
+	void (*leave)();
+	int (*pre_restore)();
+	void (*restore_cleanup)();
+	void (*recover)();
+};
+
+enum {
+	HIBERNATION_INVALID = 0,
+	HIBERNATION_PLATFORM = 1,
+	HIBERNATION_SHUTDOWN = 2,
+	HIBERNATION_REBOOT = 3,
+	HIBERNATION_SUSPEND = 4,
+	HIBERNATION_TEST_RESUME = 5,
+	__HIBERNATION_AFTER_LAST = 6,
+};
+
+enum {
+	IRQ_STARTUP_NORMAL = 0,
+	IRQ_STARTUP_MANAGED = 1,
+	IRQ_STARTUP_ABORT = 2,
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	long unsigned int ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	long unsigned int ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *module_init;
+};
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+typedef struct sigevent sigevent_t;
+
+enum misc_res_type {
+	MISC_CG_RES_TYPES = 0,
+};
+
+struct misc_res {
+	long unsigned int max;
+	atomic_long_t usage;
+	atomic_long_t events;
+};
+
+struct misc_cg {
+	struct cgroup_subsys_state css;
+	struct cgroup_file events_file;
+	struct misc_res res[0];
+};
+
+enum audit_nfcfgop {
+	AUDIT_XT_OP_REGISTER = 0,
+	AUDIT_XT_OP_REPLACE = 1,
+	AUDIT_XT_OP_UNREGISTER = 2,
+	AUDIT_NFT_OP_TABLE_REGISTER = 3,
+	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
+	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
+	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
+	AUDIT_NFT_OP_RULE_REGISTER = 7,
+	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
+	AUDIT_NFT_OP_SET_REGISTER = 9,
+	AUDIT_NFT_OP_SET_UNREGISTER = 10,
+	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
+	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
+	AUDIT_NFT_OP_GEN_REGISTER = 13,
+	AUDIT_NFT_OP_OBJ_REGISTER = 14,
+	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
+	AUDIT_NFT_OP_OBJ_RESET = 16,
+	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
+	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
+	AUDIT_NFT_OP_INVALID = 19,
+};
+
+struct audit_aux_data {
+	struct audit_aux_data *next;
+	int type;
+};
+
+struct audit_chunk;
+
+struct audit_tree_refs {
+	struct audit_tree_refs *next;
+	struct audit_chunk *c[31];
+};
+
+struct audit_aux_data_pids {
+	struct audit_aux_data d;
+	pid_t target_pid[16];
+	kuid_t target_auid[16];
+	kuid_t target_uid[16];
+	unsigned int target_sessionid[16];
+	u32 target_sid[16];
+	char target_comm[256];
+	int pid_count;
+};
+
+struct audit_aux_data_bprm_fcaps {
+	struct audit_aux_data d;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	struct audit_cap_data old_pcap;
+	struct audit_cap_data new_pcap;
+};
+
+struct audit_nfcfgop_tab {
+	enum audit_nfcfgop op;
+	const char *s;
+};
+
+enum {
+	KDB_NOT_INITIALIZED = 0,
+	KDB_INIT_EARLY = 1,
+	KDB_INIT_FULL = 2,
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	long unsigned int caller[8];
+};
+
+struct trace_mark {
+	long long unsigned int val;
+	char sym;
+};
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cpumap_val {
+	__u32 qsize;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct bpf_cpu_map_entry;
+
+struct xdp_bulk_queue {
+	void *q[8];
+	struct list_head flush_node;
+	struct bpf_cpu_map_entry *obj;
+	unsigned int count;
+};
+
+struct bpf_cpu_map;
+
+struct bpf_cpu_map_entry {
+	u32 cpu;
+	int map_id;
+	struct xdp_bulk_queue *bulkq;
+	struct bpf_cpu_map *cmap;
+	struct ptr_ring *queue;
+	struct task_struct *kthread;
+	struct bpf_cpumap_val value;
+	struct bpf_prog *prog;
+	atomic_t refcnt;
+	struct callback_head rcu;
+	struct work_struct kthread_stop_wq;
+};
+
+struct bpf_cpu_map {
+	struct bpf_map map;
+	struct bpf_cpu_map_entry **cpu_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+struct parallel_data;
+
+struct padata_priv {
+	struct list_head list;
+	struct parallel_data *pd;
+	int cb_cpu;
+	unsigned int seq_nr;
+	int info;
+	void (*parallel)(struct padata_priv *);
+	void (*serial)(struct padata_priv *);
+};
+
+struct padata_cpumask {
+	cpumask_var_t pcpu;
+	cpumask_var_t cbcpu;
+};
+
+struct padata_shell;
+
+struct padata_list;
+
+struct padata_serial_queue;
+
+struct parallel_data {
+	struct padata_shell *ps;
+	struct padata_list *reorder_list;
+	struct padata_serial_queue *squeue;
+	refcount_t refcnt;
+	unsigned int seq_nr;
+	unsigned int processed;
+	int cpu;
+	struct padata_cpumask cpumask;
+	struct work_struct reorder_work;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct padata_list {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct padata_serial_queue {
+	struct padata_list serial;
+	struct work_struct work;
+	struct parallel_data *pd;
+};
+
+struct padata_instance;
+
+struct padata_shell {
+	struct padata_instance *pinst;
+	struct parallel_data *pd;
+	struct parallel_data *opd;
+	struct list_head list;
+};
+
+struct padata_instance {
+	struct hlist_node cpu_online_node;
+	struct hlist_node cpu_dead_node;
+	struct workqueue_struct *parallel_wq;
+	struct workqueue_struct *serial_wq;
+	struct list_head pslist;
+	struct padata_cpumask cpumask;
+	struct kobject kobj;
+	struct mutex lock;
+	u8 flags;
+};
+
+struct padata_mt_job {
+	void (*thread_fn)(long unsigned int, long unsigned int, void *);
+	void *fn_arg;
+	long unsigned int start;
+	long unsigned int size;
+	long unsigned int align;
+	long unsigned int min_chunk;
+	int max_threads;
+};
+
+struct padata_work {
+	struct work_struct pw_work;
+	struct list_head pw_list;
+	void *pw_data;
+};
+
+struct padata_mt_job_state {
+	spinlock_t lock;
+	struct completion completion;
+	struct padata_mt_job *job;
+	int nworks;
+	int nworks_fini;
+	long unsigned int chunk_size;
+};
+
+struct padata_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
+	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
+};
+
+struct watch_notification_removal {
+	struct watch_notification watch;
+	__u64 id;
+};
+
+struct wb_lock_cookie {
+	bool locked;
+	long unsigned int flags;
+};
+
+struct dirty_throttle_control {
+	struct wb_domain *dom;
+	struct dirty_throttle_control *gdtc;
+	struct bdi_writeback *wb;
+	struct fprop_local_percpu *wb_completions;
+	long unsigned int avail;
+	long unsigned int dirty;
+	long unsigned int thresh;
+	long unsigned int bg_thresh;
+	long unsigned int wb_dirty;
+	long unsigned int wb_thresh;
+	long unsigned int wb_bg_thresh;
+	long unsigned int pos_ratio;
+};
+
+struct contig_page_info {
+	long unsigned int free_pages;
+	long unsigned int free_blocks_total;
+	long unsigned int free_blocks_suitable;
+};
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+struct mlock_pvec {
+	local_lock_t lock;
+	struct pagevec vec;
+};
+
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
+};
+
+struct auto_movable_stats {
+	long unsigned int kernel_early_pages;
+	long unsigned int movable_pages;
+};
+
+struct auto_movable_group_stats {
+	long unsigned int movable_pages;
+	long unsigned int req_kernel_early_pages;
+};
+
+struct crypto_acomp_ctx {
+	struct crypto_acomp *acomp;
+	struct acomp_req *req;
+	struct crypto_wait wait;
+	u8 *dstmem;
+	struct mutex *mutex;
+};
+
+struct zswap_pool {
+	struct zpool *zpool;
+	struct crypto_acomp_ctx *acomp_ctx;
+	struct kref kref;
+	struct list_head list;
+	struct work_struct release_work;
+	struct work_struct shrink_work;
+	struct hlist_node node;
+	char tfm_name[128];
+};
+
+struct zswap_entry {
+	struct rb_node rbnode;
+	long unsigned int offset;
+	int refcount;
+	unsigned int length;
+	struct zswap_pool *pool;
+	union {
+		long unsigned int handle;
+		long unsigned int value;
+	};
+	struct obj_cgroup *objcg;
+};
+
+struct zswap_header {
+	swp_entry_t swpentry;
+};
+
+struct zswap_tree {
+	struct rb_root rbroot;
+	spinlock_t lock;
+};
+
+enum zswap_get_swap_ret {
+	ZSWAP_SWAPCACHE_NEW = 0,
+	ZSWAP_SWAPCACHE_EXIST = 1,
+	ZSWAP_SWAPCACHE_FAIL = 2,
+};
+
+enum migrate_vma_direction {
+	MIGRATE_VMA_SELECT_SYSTEM = 1,
+	MIGRATE_VMA_SELECT_DEVICE_PRIVATE = 2,
+	MIGRATE_VMA_SELECT_DEVICE_COHERENT = 4,
+};
+
+struct migrate_vma {
+	struct vm_area_struct *vma;
+	long unsigned int *dst;
+	long unsigned int *src;
+	long unsigned int cpages;
+	long unsigned int npages;
+	long unsigned int start;
+	long unsigned int end;
+	void *pgmap_owner;
+	long unsigned int flags;
+};
+
+struct to_kill {
+	struct list_head nd;
+	struct task_struct *tsk;
+	long unsigned int addr;
+	short int size_shift;
+};
+
+struct hwp_walk {
+	struct to_kill tk;
+	long unsigned int pfn;
+	int flags;
+};
+
+struct page_state {
+	long unsigned int mask;
+	long unsigned int res;
+	enum mf_action_page_type type;
+	int (*action)(struct page_state *, struct page *);
+};
+
+struct raw_hwp_page {
+	struct llist_node node;
+	struct page *page;
+};
+
+struct memory_failure_entry {
+	long unsigned int pfn;
+	int flags;
+};
+
+struct memory_failure_cpu {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct memory_failure_entry *type;
+			const struct memory_failure_entry *const_type;
+			char (*rectype)[0];
+			struct memory_failure_entry *ptr;
+			const struct memory_failure_entry *ptr_const;
+		};
+		struct memory_failure_entry buf[16];
+	} fifo;
+	spinlock_t lock;
+	struct work_struct work;
+};
+
+struct wp_walk {
+	struct mmu_notifier_range range;
+	long unsigned int tlbflush_start;
+	long unsigned int tlbflush_end;
+	long unsigned int total;
+};
+
+struct clean_walk {
+	struct wp_walk base;
+	long unsigned int bitmap_pgoff;
+	long unsigned int *bitmap;
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct kobj_map;
+
+struct char_device_struct {
+	struct char_device_struct *next;
+	unsigned int major;
+	unsigned int baseminor;
+	int minorct;
+	char name[64];
+	struct cdev *cdev;
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct compat_flock {
+	short int l_type;
+	short int l_whence;
+	compat_off_t l_start;
+	compat_off_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct compat_flock64 {
+	short int l_type;
+	short int l_whence;
+	compat_loff_t l_start;
+	compat_loff_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+struct fanotify_event_metadata {
+	__u32 event_len;
+	__u8 vers;
+	__u8 reserved;
+	__u16 metadata_len;
+	__u64 mask;
+	__s32 fd;
+	__s32 pid;
+};
+
+struct fanotify_event_info_header {
+	__u8 info_type;
+	__u8 pad;
+	__u16 len;
+};
+
+struct fanotify_event_info_fid {
+	struct fanotify_event_info_header hdr;
+	__kernel_fsid_t fsid;
+	unsigned char handle[0];
+};
+
+struct fanotify_event_info_pidfd {
+	struct fanotify_event_info_header hdr;
+	__s32 pidfd;
+};
+
+struct fanotify_event_info_error {
+	struct fanotify_event_info_header hdr;
+	__s32 error;
+	__u32 error_count;
+};
+
+struct fanotify_response {
+	__s32 fd;
+	__u32 response;
+};
+
+struct fscrypt_get_policy_ex_arg {
+	__u64 policy_size;
+	union {
+		__u8 version;
+		struct fscrypt_policy_v1 v1;
+		struct fscrypt_policy_v2 v2;
+	} policy;
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *tail_vma;
+	struct mempolicy *task_mempolicy;
+};
+
+struct mem_size_stats {
+	long unsigned int resident;
+	long unsigned int shared_clean;
+	long unsigned int shared_dirty;
+	long unsigned int private_clean;
+	long unsigned int private_dirty;
+	long unsigned int referenced;
+	long unsigned int anonymous;
+	long unsigned int lazyfree;
+	long unsigned int anonymous_thp;
+	long unsigned int shmem_thp;
+	long unsigned int file_thp;
+	long unsigned int swap;
+	long unsigned int shared_hugetlb;
+	long unsigned int private_hugetlb;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct numa_maps {
+	long unsigned int pages;
+	long unsigned int anon;
+	long unsigned int active;
+	long unsigned int writeback;
+	long unsigned int mapcount_max;
+	long unsigned int dirty;
+	long unsigned int swapcache;
+	long unsigned int node[512];
+};
+
+struct numa_maps_private {
+	struct proc_maps_private proc_maps;
+	struct numa_maps md;
+};
+
+struct ext4_getfsmap_info {
+	struct ext4_fsmap_head *gfi_head;
+	ext4_fsmap_format_t gfi_formatter;
+	void *gfi_format_arg;
+	ext4_fsblk_t gfi_next_fsblk;
+	u32 gfi_dev;
+	ext4_group_t gfi_agno;
+	struct ext4_fsmap gfi_low;
+	struct ext4_fsmap gfi_high;
+	struct ext4_fsmap gfi_lastfree;
+	struct list_head gfi_meta_list;
+	bool gfi_last;
+};
+
+struct ext4_getfsmap_dev {
+	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+	u32 gfd_dev;
+};
+
+struct migrate_struct {
+	ext4_lblk_t first_block;
+	ext4_lblk_t last_block;
+	ext4_lblk_t curr_block;
+	ext4_fsblk_t first_pblock;
+	ext4_fsblk_t last_pblock;
+};
+
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT = 1,
+	STEP_VERITY = 2,
+	STEP_MAX = 3,
+};
+
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
+};
+
+struct trace_event_raw_jbd2_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	int transaction;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_end_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	int transaction;
+	int head;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_submit_inode_data {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_start_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_extend {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int buffer_credits;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int interval;
+	int sync;
+	int requested_blocks;
+	int dirtied_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_run_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	long unsigned int wait;
+	long unsigned int request_delay;
+	long unsigned int running;
+	long unsigned int locked;
+	long unsigned int flushing;
+	long unsigned int logging;
+	__u32 handle_count;
+	__u32 blocks;
+	__u32 blocks_logged;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_checkpoint_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	long unsigned int chp_time;
+	__u32 forced_to_close;
+	__u32 written;
+	__u32 dropped;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_update_log_tail {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tail_sequence;
+	tid_t first_tid;
+	long unsigned int block_nr;
+	long unsigned int freed;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_write_superblock {
+	struct trace_entry ent;
+	dev_t dev;
+	blk_opf_t write_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_lock_buffer_stall {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int stall_ms;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_shrunk;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	long unsigned int nr_freed;
+	long unsigned int nr_scanned;
+	tid_t next_tid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_jbd2_checkpoint {};
+
+struct trace_event_data_offsets_jbd2_commit {};
+
+struct trace_event_data_offsets_jbd2_end_commit {};
+
+struct trace_event_data_offsets_jbd2_submit_inode_data {};
+
+struct trace_event_data_offsets_jbd2_handle_start_class {};
+
+struct trace_event_data_offsets_jbd2_handle_extend {};
+
+struct trace_event_data_offsets_jbd2_handle_stats {};
+
+struct trace_event_data_offsets_jbd2_run_stats {};
+
+struct trace_event_data_offsets_jbd2_checkpoint_stats {};
+
+struct trace_event_data_offsets_jbd2_update_log_tail {};
+
+struct trace_event_data_offsets_jbd2_write_superblock {};
+
+struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
+
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
+typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
+
+typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
+
+typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
+
+typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
+
+typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
+
+typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
+
+typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, blk_opf_t);
+
+typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, long unsigned int, long unsigned int, tid_t);
+
+struct jbd2_stats_proc_session {
+	journal_t *journal;
+	struct transaction_stats_s *stats;
+	int start;
+	int max;
+};
+
+struct args_protover {
+	__u32 version;
+};
+
+struct args_protosubver {
+	__u32 sub_version;
+};
+
+struct args_openmount {
+	__u32 devid;
+};
+
+struct args_ready {
+	__u32 token;
+};
+
+struct args_fail {
+	__u32 token;
+	__s32 status;
+};
+
+struct args_setpipefd {
+	__s32 pipefd;
+};
+
+struct args_timeout {
+	__u64 timeout;
+};
+
+struct args_requester {
+	__u32 uid;
+	__u32 gid;
+};
+
+struct args_expire {
+	__u32 how;
+};
+
+struct args_askumount {
+	__u32 may_umount;
+};
+
+struct args_in {
+	__u32 type;
+};
+
+struct args_out {
+	__u32 devid;
+	__u32 magic;
+};
+
+struct args_ismountpoint {
+	union {
+		struct args_in in;
+		struct args_out out;
+	};
+};
+
+struct autofs_dev_ioctl {
+	__u32 ver_major;
+	__u32 ver_minor;
+	__u32 size;
+	__s32 ioctlfd;
+	union {
+		struct args_protover protover;
+		struct args_protosubver protosubver;
+		struct args_openmount openmount;
+		struct args_ready ready;
+		struct args_fail fail;
+		struct args_setpipefd setpipefd;
+		struct args_timeout timeout;
+		struct args_requester requester;
+		struct args_expire expire;
+		struct args_askumount askumount;
+		struct args_ismountpoint ismountpoint;
+	};
+	char path[0];
+};
+
+enum {
+	AUTOFS_DEV_IOCTL_VERSION_CMD = 113,
+	AUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,
+	AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,
+	AUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,
+	AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,
+	AUTOFS_DEV_IOCTL_READY_CMD = 118,
+	AUTOFS_DEV_IOCTL_FAIL_CMD = 119,
+	AUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,
+	AUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,
+	AUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,
+	AUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,
+	AUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,
+	AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,
+	AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,
+};
+
+typedef int (*ioctl_fn___2)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);
+
+enum btrfs_delayed_ref_flags {
+	BTRFS_DELAYED_REFS_FLUSHING = 0,
+};
+
+struct btrfs_fid {
+	u64 objectid;
+	u64 root_objectid;
+	u32 gen;
+	u64 parent_objectid;
+	u32 parent_gen;
+	u64 parent_root_objectid;
+} __attribute__((packed));
+
+struct workspace___3 {
+	void *mem;
+	size_t size;
+	char *buf;
+	unsigned int level;
+	unsigned int req_level;
+	long unsigned int last_used;
+	struct list_head list;
+	struct list_head lru_list;
+	zstd_in_buffer in_buf;
+	zstd_out_buffer out_buf;
+};
+
+struct zstd_workspace_manager {
+	const struct btrfs_compress_op *ops;
+	spinlock_t lock;
+	struct list_head lru_list;
+	struct list_head idle_ws[15];
+	long unsigned int active_map;
+	wait_queue_head_t wait;
+	struct timer_list timer;
+};
+
+struct extent_inode_elem {
+	u64 inum;
+	u64 offset;
+	struct extent_inode_elem *next;
+};
+
+struct preftree {
+	struct rb_root_cached root;
+	unsigned int count;
+};
+
+struct preftrees {
+	struct preftree direct;
+	struct preftree indirect;
+	struct preftree indirect_missing_keys;
+};
+
+struct share_check {
+	u64 root_objectid;
+	u64 inum;
+	int share_count;
+	bool have_delayed_delete_refs;
+};
+
+struct shmid_ds {
+	struct ipc_perm shm_perm;
+	int shm_segsz;
+	__kernel_old_time_t shm_atime;
+	__kernel_old_time_t shm_dtime;
+	__kernel_old_time_t shm_ctime;
+	__kernel_ipc_pid_t shm_cpid;
+	__kernel_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	void *shm_unused2;
+	void *shm_unused3;
+};
+
+struct shmid64_ds {
+	struct ipc64_perm shm_perm;
+	__kernel_size_t shm_segsz;
+	long int shm_atime;
+	long int shm_dtime;
+	long int shm_ctime;
+	__kernel_pid_t shm_cpid;
+	__kernel_pid_t shm_lpid;
+	long unsigned int shm_nattch;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct shminfo64 {
+	long unsigned int shmmax;
+	long unsigned int shmmin;
+	long unsigned int shmmni;
+	long unsigned int shmseg;
+	long unsigned int shmall;
+	long unsigned int __unused1;
+	long unsigned int __unused2;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct shminfo {
+	int shmmax;
+	int shmmin;
+	int shmmni;
+	int shmseg;
+	int shmall;
+};
+
+struct shm_info {
+	int used_ids;
+	__kernel_ulong_t shm_tot;
+	__kernel_ulong_t shm_rss;
+	__kernel_ulong_t shm_swp;
+	__kernel_ulong_t swap_attempts;
+	__kernel_ulong_t swap_successes;
+};
+
+struct compat_shmid64_ds {
+	struct compat_ipc64_perm shm_perm;
+	compat_size_t shm_segsz;
+	compat_ulong_t shm_atime;
+	compat_ulong_t shm_atime_high;
+	compat_ulong_t shm_dtime;
+	compat_ulong_t shm_dtime_high;
+	compat_ulong_t shm_ctime;
+	compat_ulong_t shm_ctime_high;
+	compat_pid_t shm_cpid;
+	compat_pid_t shm_lpid;
+	compat_ulong_t shm_nattch;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct shmid_kernel {
+	struct kern_ipc_perm shm_perm;
+	struct file *shm_file;
+	long unsigned int shm_nattch;
+	long unsigned int shm_segsz;
+	time64_t shm_atim;
+	time64_t shm_dtim;
+	time64_t shm_ctim;
+	struct pid *shm_cprid;
+	struct pid *shm_lprid;
+	struct ucounts *mlock_ucounts;
+	struct task_struct *shm_creator;
+	struct list_head shm_clist;
+	struct ipc_namespace *ns;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct shm_file_data {
+	int id;
+	struct ipc_namespace *ns;
+	struct file *file;
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct compat_shmid_ds {
+	struct compat_ipc_perm shm_perm;
+	int shm_segsz;
+	old_time32_t shm_atime;
+	old_time32_t shm_dtime;
+	old_time32_t shm_ctime;
+	compat_ipc_pid_t shm_cpid;
+	compat_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	compat_uptr_t shm_unused2;
+	compat_uptr_t shm_unused3;
+};
+
+struct compat_shminfo64 {
+	compat_ulong_t shmmax;
+	compat_ulong_t shmmin;
+	compat_ulong_t shmmni;
+	compat_ulong_t shmseg;
+	compat_ulong_t shmall;
+	compat_ulong_t __unused1;
+	compat_ulong_t __unused2;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct compat_shm_info {
+	compat_int_t used_ids;
+	compat_ulong_t shm_tot;
+	compat_ulong_t shm_rss;
+	compat_ulong_t shm_swp;
+	compat_ulong_t swap_attempts;
+	compat_ulong_t swap_successes;
+};
+
+enum tpm2_object_attributes {
+	TPM2_OA_FIXED_TPM = 2,
+	TPM2_OA_FIXED_PARENT = 16,
+	TPM2_OA_USER_WITH_AUTH = 64,
+};
+
+enum tpm2_session_attributes {
+	TPM2_SA_CONTINUE_SESSION = 1,
+};
+
+struct tpm2_key_context {
+	u32 parent;
+	const u8 *pub;
+	u32 pub_len;
+	const u8 *priv;
+	u32 priv_len;
+};
+
+enum {
+	SELNL_MSG_SETENFORCE = 16,
+	SELNL_MSG_POLICYLOAD = 17,
+	SELNL_MSG_MAX = 18,
+};
+
+enum selinux_nlgroups {
+	SELNLGRP_NONE = 0,
+	SELNLGRP_AVC = 1,
+	__SELNLGRP_MAX = 2,
+};
+
+struct selnl_msg_setenforce {
+	__s32 val;
+};
+
+struct selnl_msg_policyload {
+	__u32 seqno;
+};
+
+struct selinux_kernel_status {
+	u32 version;
+	u32 sequence;
+	u32 enforcing;
+	u32 policyload;
+	u32 deny_unknown;
+};
+
+struct ptrace_relation {
+	struct task_struct *tracer;
+	struct task_struct *tracee;
+	bool invalid;
+	struct list_head node;
+	struct callback_head rcu;
+};
+
+struct access_report_info {
+	struct callback_head work;
+	const char *access;
+	struct task_struct *target;
+	struct task_struct *agent;
+};
+
+enum devcg_behavior {
+	DEVCG_DEFAULT_NONE = 0,
+	DEVCG_DEFAULT_ALLOW = 1,
+	DEVCG_DEFAULT_DENY = 2,
+};
+
+struct dev_exception_item {
+	u32 major;
+	u32 minor;
+	short int type;
+	short int access;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head exceptions;
+	enum devcg_behavior behavior;
+};
+
+enum lsm_rule_types {
+	LSM_OBJ_USER = 0,
+	LSM_OBJ_ROLE = 1,
+	LSM_OBJ_TYPE = 2,
+	LSM_SUBJ_USER = 3,
+	LSM_SUBJ_ROLE = 4,
+	LSM_SUBJ_TYPE = 5,
+};
+
+enum policy_types {
+	ORIGINAL_TCB = 1,
+	DEFAULT_TCB = 2,
+};
+
+enum policy_rule_list {
+	IMA_DEFAULT_POLICY = 1,
+	IMA_CUSTOM_POLICY = 2,
+};
+
+struct ima_rule_opt_list {
+	size_t count;
+	char *items[0];
+};
+
+struct ima_rule_entry {
+	struct list_head list;
+	int action;
+	unsigned int flags;
+	enum ima_hooks func;
+	int mask;
+	long unsigned int fsmagic;
+	uuid_t fsuuid;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t fowner;
+	kgid_t fgroup;
+	bool (*uid_op)(kuid_t, kuid_t);
+	bool (*gid_op)(kgid_t, kgid_t);
+	bool (*fowner_op)(kuid_t, kuid_t);
+	bool (*fgroup_op)(kgid_t, kgid_t);
+	int pcr;
+	unsigned int allowed_algos;
+	struct {
+		void *rule;
+		char *args_p;
+		int type;
+	} lsm[6];
+	char *fsname;
+	struct ima_rule_opt_list *keyrings;
+	struct ima_rule_opt_list *label;
+	struct ima_template_desc *template;
+};
+
+enum policy_opt {
+	Opt_measure = 0,
+	Opt_dont_measure = 1,
+	Opt_appraise = 2,
+	Opt_dont_appraise = 3,
+	Opt_audit = 4,
+	Opt_hash___3 = 5,
+	Opt_dont_hash = 6,
+	Opt_obj_user = 7,
+	Opt_obj_role = 8,
+	Opt_obj_type = 9,
+	Opt_subj_user = 10,
+	Opt_subj_role = 11,
+	Opt_subj_type = 12,
+	Opt_func = 13,
+	Opt_mask = 14,
+	Opt_fsmagic = 15,
+	Opt_fsname = 16,
+	Opt_fsuuid = 17,
+	Opt_uid_eq = 18,
+	Opt_euid_eq = 19,
+	Opt_gid_eq = 20,
+	Opt_egid_eq = 21,
+	Opt_fowner_eq = 22,
+	Opt_fgroup_eq = 23,
+	Opt_uid_gt = 24,
+	Opt_euid_gt = 25,
+	Opt_gid_gt = 26,
+	Opt_egid_gt = 27,
+	Opt_fowner_gt = 28,
+	Opt_fgroup_gt = 29,
+	Opt_uid_lt = 30,
+	Opt_euid_lt = 31,
+	Opt_gid_lt = 32,
+	Opt_egid_lt = 33,
+	Opt_fowner_lt = 34,
+	Opt_fgroup_lt = 35,
+	Opt_digest_type = 36,
+	Opt_appraise_type = 37,
+	Opt_appraise_flag = 38,
+	Opt_appraise_algos = 39,
+	Opt_permit_directio = 40,
+	Opt_pcr = 41,
+	Opt_template = 42,
+	Opt_keyrings = 43,
+	Opt_label = 44,
+	Opt_err___11 = 45,
+};
+
+enum {
+	mask_exec = 0,
+	mask_write = 1,
+	mask_read = 2,
+	mask_append = 3,
+};
+
+struct ima_key_entry {
+	struct list_head list;
+	void *payload;
+	size_t payload_len;
+	char *keyring_name;
+};
+
+struct ahash_request_priv {
+	crypto_completion_t complete;
+	void *data;
+	u8 *result;
+	u32 flags;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *ubuf[0];
+};
+
+struct rsa_mpi_key {
+	MPI n;
+	MPI e;
+	MPI d;
+	MPI p;
+	MPI q;
+	MPI dp;
+	MPI dq;
+	MPI qinv;
+};
+
+struct hmac_ctx {
+	struct crypto_shash *hash;
+};
+
+struct sha3_state {
+	u64 st[25];
+	unsigned int rsiz;
+	unsigned int rsizw;
+	unsigned int partial;
+	u8 buf[144];
+};
+
+struct gcm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn ghash;
+};
+
+struct crypto_gcm_ctx {
+	struct crypto_skcipher *ctr;
+	struct crypto_ahash *ghash;
+};
+
+struct crypto_rfc4106_ctx {
+	struct crypto_aead *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct aead_request subreq;
+};
+
+struct crypto_rfc4543_instance_ctx {
+	struct crypto_aead_spawn aead;
+};
+
+struct crypto_rfc4543_ctx {
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *null;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4543_req_ctx {
+	struct aead_request subreq;
+};
+
+struct crypto_gcm_ghash_ctx {
+	unsigned int cryptlen;
+	struct scatterlist *src;
+	int (*complete)(struct aead_request *, u32);
+};
+
+struct crypto_gcm_req_priv_ctx {
+	u8 iv[16];
+	u8 auth_tag[16];
+	u8 iauth_tag[16];
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct scatterlist sg;
+	struct crypto_gcm_ghash_ctx ghash_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	} u;
+};
+
+enum {
+	CRYPTO_AUTHENC_KEYA_UNSPEC = 0,
+	CRYPTO_AUTHENC_KEYA_PARAM = 1,
+};
+
+struct crypto_authenc_key_param {
+	__be32 enckeylen;
+};
+
+struct authenc_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+	unsigned int reqoff;
+};
+
+struct crypto_authenc_ctx {
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct aead_tfm {
+	struct crypto_aead *aead;
+	struct crypto_sync_skcipher *null_tfm;
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
+};
+
+struct blkpg_ioctl_arg {
+	int op;
+	int flags;
+	int datalen;
+	void *data;
+};
+
+struct blkpg_partition {
+	long long int start;
+	long long int length;
+	int pno;
+	char devname[64];
+	char volname[64];
+};
+
+struct pr_reservation {
+	__u64 key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_registration {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct pr_preempt {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_clear {
+	__u64 key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct compat_blkpg_ioctl_arg {
+	compat_int_t op;
+	compat_int_t flags;
+	compat_int_t datalen;
+	compat_caddr_t data;
+};
+
+struct compat_hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
+	u32 start;
+};
+
+enum {
+	SUN_WHOLE_DISK = 5,
+	LINUX_RAID_PARTITION___3 = 253,
+};
+
+struct sun_info {
+	__be16 id;
+	__be16 flags;
+};
+
+struct sun_vtoc {
+	__be32 version;
+	char volume[8];
+	__be16 nparts;
+	struct sun_info infos[8];
+	__be16 padding;
+	__be32 bootinfo[3];
+	__be32 sanity;
+	__be32 reserved[10];
+	__be32 timestamp[8];
+};
+
+struct sun_partition {
+	__be32 start_cylinder;
+	__be32 num_sectors;
+};
+
+struct sun_disklabel {
+	unsigned char info[128];
+	struct sun_vtoc vtoc;
+	__be32 write_reinstruct;
+	__be32 read_reinstruct;
+	unsigned char spare[148];
+	__be16 rspeed;
+	__be16 pcylcount;
+	__be16 sparecyl;
+	__be16 obs1;
+	__be16 obs2;
+	__be16 ilfact;
+	__be16 ncyl;
+	__be16 nacyl;
+	__be16 ntrks;
+	__be16 nsect;
+	__be16 obs3;
+	__be16 obs4;
+	struct sun_partition partitions[8];
+	__be16 magic;
+	__be16 csum;
+};
+
+struct bsg_job;
+
+typedef int bsg_job_fn(struct bsg_job *);
+
+struct bsg_buffer {
+	unsigned int payload_len;
+	int sg_cnt;
+	struct scatterlist *sg_list;
+};
+
+struct bsg_job {
+	struct device *dev;
+	struct kref kref;
+	unsigned int timeout;
+	void *request;
+	void *reply;
+	unsigned int request_len;
+	unsigned int reply_len;
+	struct bsg_buffer request_payload;
+	struct bsg_buffer reply_payload;
+	int result;
+	unsigned int reply_payload_rcv_len;
+	struct request *bidi_rq;
+	struct bio *bidi_bio;
+	void *dd_data;
+};
+
+typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
+
+struct bsg_set {
+	struct blk_mq_tag_set tag_set;
+	struct bsg_device *bd;
+	bsg_job_fn *job_fn;
+	bsg_timeout_fn *timeout_fn;
+};
+
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+enum {
+	DD_DIR_COUNT = 2,
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum {
+	DD_PRIO_COUNT = 3,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
+	struct rb_root sort_list[2];
+	struct list_head fifo_list[2];
+	struct request *next_rq[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
+	unsigned int batching;
+	unsigned int starved;
+	int fifo_expire[2];
+	int fifo_batch;
+	int writes_starved;
+	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
+	spinlock_t lock;
+	spinlock_t zone_lock;
+};
+
+struct integrity_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_integrity *, char *);
+	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
+};
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct block_device *bdev;
+	int refcnt;
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx *buffer;
+};
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+struct sw842_param___2 {
+	u8 *in;
+	u8 bit;
+	u64 ilen;
+	u8 *out;
+	u8 *ostart;
+	u64 olen;
+};
+
+typedef struct {
+	rawSeqStore_t seqStore;
+	U32 startPosInBlock;
+	U32 endPosInBlock;
+	U32 offset;
+} ZSTD_optLdm_t;
+
+typedef uint64_t vli_type;
+
+enum xz_check {
+	XZ_CHECK_NONE = 0,
+	XZ_CHECK_CRC32 = 1,
+	XZ_CHECK_CRC64 = 4,
+	XZ_CHECK_SHA256 = 10,
+};
+
+struct xz_dec_hash {
+	vli_type unpadded;
+	vli_type uncompressed;
+	uint32_t crc32;
+};
+
+struct xz_dec_bcj;
+
+struct xz_dec {
+	enum {
+		SEQ_STREAM_HEADER = 0,
+		SEQ_BLOCK_START = 1,
+		SEQ_BLOCK_HEADER = 2,
+		SEQ_BLOCK_UNCOMPRESS = 3,
+		SEQ_BLOCK_PADDING = 4,
+		SEQ_BLOCK_CHECK = 5,
+		SEQ_INDEX = 6,
+		SEQ_INDEX_PADDING = 7,
+		SEQ_INDEX_CRC32 = 8,
+		SEQ_STREAM_FOOTER = 9,
+	} sequence;
+	uint32_t pos;
+	vli_type vli;
+	size_t in_start;
+	size_t out_start;
+	uint32_t crc32;
+	enum xz_check check_type;
+	enum xz_mode mode;
+	bool allow_buf_error;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		uint32_t size;
+	} block_header;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} block;
+	struct {
+		enum {
+			SEQ_INDEX_COUNT = 0,
+			SEQ_INDEX_UNPADDED = 1,
+			SEQ_INDEX_UNCOMPRESSED = 2,
+		} sequence;
+		vli_type size;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} index;
+	struct {
+		size_t pos;
+		size_t size;
+		uint8_t buf[1024];
+	} temp;
+	struct xz_dec_lzma2 *lzma2;
+	struct xz_dec_bcj *bcj;
+	bool bcj_active;
+};
+
+enum lzma_state {
+	STATE_LIT_LIT = 0,
+	STATE_MATCH_LIT_LIT = 1,
+	STATE_REP_LIT_LIT = 2,
+	STATE_SHORTREP_LIT_LIT = 3,
+	STATE_MATCH_LIT = 4,
+	STATE_REP_LIT = 5,
+	STATE_SHORTREP_LIT = 6,
+	STATE_LIT_MATCH = 7,
+	STATE_LIT_LONGREP = 8,
+	STATE_LIT_SHORTREP = 9,
+	STATE_NONLIT_MATCH = 10,
+	STATE_NONLIT_REP = 11,
+};
+
+struct dictionary {
+	uint8_t *buf;
+	size_t start;
+	size_t pos;
+	size_t full;
+	size_t limit;
+	size_t end;
+	uint32_t size;
+	uint32_t size_max;
+	uint32_t allocated;
+	enum xz_mode mode;
+};
+
+struct rc_dec {
+	uint32_t range;
+	uint32_t code;
+	uint32_t init_bytes_left;
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_limit;
+};
+
+struct lzma_len_dec {
+	uint16_t choice;
+	uint16_t choice2;
+	uint16_t low[128];
+	uint16_t mid[128];
+	uint16_t high[256];
+};
+
+struct lzma_dec {
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+	enum lzma_state state;
+	uint32_t len;
+	uint32_t lc;
+	uint32_t literal_pos_mask;
+	uint32_t pos_mask;
+	uint16_t is_match[192];
+	uint16_t is_rep[12];
+	uint16_t is_rep0[12];
+	uint16_t is_rep1[12];
+	uint16_t is_rep2[12];
+	uint16_t is_rep0_long[192];
+	uint16_t dist_slot[256];
+	uint16_t dist_special[114];
+	uint16_t dist_align[16];
+	struct lzma_len_dec match_len_dec;
+	struct lzma_len_dec rep_len_dec;
+	uint16_t literal[12288];
+};
+
+enum lzma2_seq {
+	SEQ_CONTROL = 0,
+	SEQ_UNCOMPRESSED_1 = 1,
+	SEQ_UNCOMPRESSED_2 = 2,
+	SEQ_COMPRESSED_0 = 3,
+	SEQ_COMPRESSED_1 = 4,
+	SEQ_PROPERTIES = 5,
+	SEQ_LZMA_PREPARE = 6,
+	SEQ_LZMA_RUN = 7,
+	SEQ_COPY = 8,
+};
+
+struct lzma2_dec {
+	enum lzma2_seq sequence;
+	enum lzma2_seq next_sequence;
+	uint32_t uncompressed;
+	uint32_t compressed;
+	bool need_dict_reset;
+	bool need_props;
+	bool pedantic_microlzma;
+};
+
+struct xz_dec_lzma2 {
+	struct rc_dec rc;
+	struct dictionary dict;
+	struct lzma2_dec lzma2;
+	struct lzma_dec lzma;
+	struct {
+		uint32_t size;
+		uint8_t buf[63];
+	} temp;
+};
+
+struct xz_dec_microlzma {
+	struct xz_dec_lzma2 s;
+};
+
+struct ei_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	int etype;
+	void *priv;
+};
+
+enum pubkey_algo {
+	PUBKEY_ALGO_RSA = 0,
+	PUBKEY_ALGO_MAX = 1,
+};
+
+struct pubkey_hdr {
+	uint8_t version;
+	uint32_t timestamp;
+	uint8_t algo;
+	uint8_t nmpi;
+	char mpi[0];
+} __attribute__((packed));
+
+struct signature_hdr {
+	uint8_t version;
+	uint32_t timestamp;
+	uint8_t algo;
+	uint8_t hash;
+	uint8_t keyid[8];
+	uint8_t nmpi;
+	char mpi[0];
+} __attribute__((packed));
+
+struct warn_args;
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+struct sun6i_r_intc_variant {
+	u32 first_mux_irq;
+	u32 nr_mux_irqs;
+	u32 mux_valid[4];
+};
+
+struct acpi_srat_gic_its_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u16 reserved;
+	u32 its_id;
+} __attribute__((packed));
+
+struct its_collection___2 {
+	u64 target_address;
+	u16 col_id;
+};
+
+struct its_baser {
+	void *base;
+	u64 val;
+	u32 order;
+	u32 psz;
+};
+
+struct its_cmd_block;
+
+struct its_device___2;
+
+struct its_node {
+	raw_spinlock_t lock;
+	struct mutex dev_alloc_lock;
+	struct list_head entry;
+	void *base;
+	void *sgir_base;
+	phys_addr_t phys_base;
+	struct its_cmd_block *cmd_base;
+	struct its_cmd_block *cmd_write;
+	struct its_baser tables[8];
+	struct its_collection___2 *collections;
+	struct fwnode_handle *fwnode_handle;
+	u64 (*get_msi_base)(struct its_device___2 *);
+	u64 typer;
+	u64 cbaser_save;
+	u32 ctlr_save;
+	u32 mpidr;
+	struct list_head its_device_list;
+	u64 flags;
+	long unsigned int list_nr;
+	int numa_node;
+	unsigned int msi_domain_flags;
+	u32 pre_its_base;
+	int vlpi_redist_offset;
+};
+
+struct its_cmd_block {
+	union {
+		u64 raw_cmd[4];
+		__le64 raw_cmd_le[4];
+	};
+};
+
+struct event_lpi_map {
+	long unsigned int *lpi_map;
+	u16 *col_map;
+	irq_hw_number_t lpi_base;
+	int nr_lpis;
+	raw_spinlock_t vlpi_lock;
+	struct its_vm *vm;
+	struct its_vlpi_map *vlpi_maps;
+	int nr_vlpis;
+};
+
+struct its_device___2 {
+	struct list_head entry;
+	struct its_node *its;
+	struct event_lpi_map event_map;
+	void *itt;
+	u32 nr_ites;
+	u32 device_id;
+	bool shared;
+};
+
+struct cpu_lpi_count {
+	atomic_t managed;
+	atomic_t unmanaged;
+};
+
+struct its_cmd_desc {
+	union {
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_inv_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_clear_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_int_cmd;
+		struct {
+			struct its_device___2 *dev;
+			int valid;
+		} its_mapd_cmd;
+		struct {
+			struct its_collection___2 *col;
+			int valid;
+		} its_mapc_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 phys_id;
+			u32 event_id;
+		} its_mapti_cmd;
+		struct {
+			struct its_device___2 *dev;
+			struct its_collection___2 *col;
+			u32 event_id;
+		} its_movi_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_discard_cmd;
+		struct {
+			struct its_collection___2 *col;
+		} its_invall_cmd;
+		struct {
+			struct its_vpe *vpe;
+		} its_vinvall_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_collection___2 *col;
+			bool valid;
+		} its_vmapp_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_device___2 *dev;
+			u32 virt_id;
+			u32 event_id;
+			bool db_enabled;
+		} its_vmapti_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_device___2 *dev;
+			u32 event_id;
+			bool db_enabled;
+		} its_vmovi_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_collection___2 *col;
+			u16 seq_num;
+			u16 its_list;
+		} its_vmovp_cmd;
+		struct {
+			struct its_vpe *vpe;
+		} its_invdb_cmd;
+		struct {
+			struct its_vpe *vpe;
+			u8 sgi;
+			u8 priority;
+			bool enable;
+			bool group;
+			bool clear;
+		} its_vsgi_cmd;
+	};
+};
+
+typedef struct its_collection___2 * (*its_cmd_builder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
+
+typedef struct its_vpe * (*its_cmd_vbuilder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
+
+struct lpi_range {
+	struct list_head entry;
+	u32 base_id;
+	u32 span;
+};
+
+struct its_srat_map {
+	u32 numa_node;
+	u32 its_id;
+};
+
+struct ls_scfg_msi_cfg {
+	u32 ibs_shift;
+	u32 msir_irqs;
+	u32 msir_base;
+};
+
+struct ls_scfg_msi;
+
+struct ls_scfg_msir {
+	struct ls_scfg_msi *msi_data;
+	unsigned int index;
+	unsigned int gic_irq;
+	unsigned int bit_start;
+	unsigned int bit_end;
+	unsigned int srs;
+	void *reg;
+};
+
+struct ls_scfg_msi {
+	spinlock_t lock;
+	struct platform_device *pdev;
+	struct irq_domain *parent;
+	struct irq_domain *msi_domain;
+	void *regs;
+	phys_addr_t msiir_addr;
+	struct ls_scfg_msi_cfg *cfg;
+	u32 msir_num;
+	struct ls_scfg_msir *msir;
+	u32 irqs_num;
+	long unsigned int *used;
+};
+
+struct ti_sci_intr_irq_domain {
+	const struct ti_sci_handle *sci;
+	struct ti_sci_resource *out_irqs;
+	struct device *dev;
+	u32 ti_sci_id;
+	u32 type;
+};
+
+struct imx8_pcie_phy {
+	void *base;
+	struct clk *clk;
+	struct phy *phy;
+	struct regmap *iomuxc_gpr;
+	struct reset_control *reset;
+	u32 refclk_pad_mode;
+	u32 tx_deemph_gen1;
+	u32 tx_deemph_gen2;
+	bool clkreq_unused;
+};
+
+enum max77620_pin_ppdrv {
+	MAX77620_PIN_UNCONFIG_DRV = 0,
+	MAX77620_PIN_OD_DRV = 1,
+	MAX77620_PIN_PP_DRV = 2,
+};
+
+struct max77620_pin_function {
+	const char *name;
+	const char * const *groups;
+	unsigned int ngroups;
+	int mux_option;
+};
+
+enum max77620_alternate_pinmux_option {
+	MAX77620_PINMUX_GPIO = 0,
+	MAX77620_PINMUX_LOW_POWER_MODE_CONTROL_IN = 1,
+	MAX77620_PINMUX_FLEXIBLE_POWER_SEQUENCER_OUT = 2,
+	MAX77620_PINMUX_32K_OUT1 = 3,
+	MAX77620_PINMUX_SD0_DYNAMIC_VOLTAGE_SCALING_IN = 4,
+	MAX77620_PINMUX_SD1_DYNAMIC_VOLTAGE_SCALING_IN = 5,
+	MAX77620_PINMUX_REFERENCE_OUT = 6,
+};
+
+struct max77620_pingroup {
+	const char *name;
+	const unsigned int pins[1];
+	unsigned int npins;
+	enum max77620_alternate_pinmux_option alt_option;
+};
+
+struct max77620_pin_info {
+	enum max77620_pin_ppdrv drv_type;
+	int pull_config;
+};
+
+struct max77620_fps_config {
+	int active_fps_src;
+	int active_power_up_slots;
+	int active_power_down_slots;
+	int suspend_fps_src;
+	int suspend_power_up_slots;
+	int suspend_power_down_slots;
+};
+
+struct max77620_pctrl_info {
+	struct device *dev;
+	struct pinctrl_dev *pctl;
+	struct regmap *rmap;
+	int pins_current_opt[8];
+	const struct max77620_pin_function *functions;
+	unsigned int num_functions;
+	const struct max77620_pingroup *pin_groups;
+	int num_pin_groups;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int num_pins;
+	struct max77620_pin_info pin_info[8];
+	struct max77620_fps_config fps_config[8];
+};
+
+enum meson_pinconf_drv {
+	MESON_PINCONF_DRV_500UA = 0,
+	MESON_PINCONF_DRV_2500UA = 1,
+	MESON_PINCONF_DRV_3000UA = 2,
+	MESON_PINCONF_DRV_4000UA = 3,
+};
+
+enum pmic_gpio_func_index {
+	PMIC_GPIO_FUNC_INDEX_NORMAL = 0,
+	PMIC_GPIO_FUNC_INDEX_PAIRED = 1,
+	PMIC_GPIO_FUNC_INDEX_FUNC1 = 2,
+	PMIC_GPIO_FUNC_INDEX_FUNC2 = 3,
+	PMIC_GPIO_FUNC_INDEX_FUNC3 = 4,
+	PMIC_GPIO_FUNC_INDEX_FUNC4 = 5,
+	PMIC_GPIO_FUNC_INDEX_DTEST1 = 6,
+	PMIC_GPIO_FUNC_INDEX_DTEST2 = 7,
+	PMIC_GPIO_FUNC_INDEX_DTEST3 = 8,
+	PMIC_GPIO_FUNC_INDEX_DTEST4 = 9,
+};
+
+struct pmic_gpio_pad {
+	u16 base;
+	bool is_enabled;
+	bool out_value;
+	bool have_buffer;
+	bool output_enabled;
+	bool input_enabled;
+	bool analog_pass;
+	bool lv_mv_type;
+	unsigned int num_sources;
+	unsigned int power_source;
+	unsigned int buffer_type;
+	unsigned int pullup;
+	unsigned int strength;
+	unsigned int function;
+	unsigned int atest;
+	unsigned int dtest_buffer;
+};
+
+struct pmic_gpio_state {
+	struct device *dev;
+	struct regmap *map;
+	struct pinctrl_dev *ctrl;
+	struct gpio_chip chip;
+	struct irq_chip irq;
+	u8 usid;
+	u8 pid_base;
+};
+
+struct tegra_pmx {
+	struct device *dev;
+	struct pinctrl_dev *pctl;
+	const struct tegra_pinctrl_soc_data *soc;
+	const char **group_pins;
+	int nbanks;
+	void **regs;
+	u32 *backup_regs;
+};
+
+enum tegra_pinconf_param {
+	TEGRA_PINCONF_PARAM_PULL = 0,
+	TEGRA_PINCONF_PARAM_TRISTATE = 1,
+	TEGRA_PINCONF_PARAM_ENABLE_INPUT = 2,
+	TEGRA_PINCONF_PARAM_OPEN_DRAIN = 3,
+	TEGRA_PINCONF_PARAM_LOCK = 4,
+	TEGRA_PINCONF_PARAM_IORESET = 5,
+	TEGRA_PINCONF_PARAM_RCV_SEL = 6,
+	TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE = 7,
+	TEGRA_PINCONF_PARAM_SCHMITT = 8,
+	TEGRA_PINCONF_PARAM_LOW_POWER_MODE = 9,
+	TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH = 10,
+	TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH = 11,
+	TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING = 12,
+	TEGRA_PINCONF_PARAM_SLEW_RATE_RISING = 13,
+	TEGRA_PINCONF_PARAM_DRIVE_TYPE = 14,
+};
+
+struct cfg_param {
+	const char *property;
+	enum tegra_pinconf_param param;
+};
+
+struct gpiochip_info {
+	char name[32];
+	char label[32];
+	__u32 lines;
+};
+
+enum gpio_v2_line_flag {
+	GPIO_V2_LINE_FLAG_USED = 1,
+	GPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,
+	GPIO_V2_LINE_FLAG_INPUT = 4,
+	GPIO_V2_LINE_FLAG_OUTPUT = 8,
+	GPIO_V2_LINE_FLAG_EDGE_RISING = 16,
+	GPIO_V2_LINE_FLAG_EDGE_FALLING = 32,
+	GPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,
+	GPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
+	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
+};
+
+struct gpio_v2_line_values {
+	__u64 bits;
+	__u64 mask;
+};
+
+enum gpio_v2_line_attr_id {
+	GPIO_V2_LINE_ATTR_ID_FLAGS = 1,
+	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,
+	GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,
+};
+
+struct gpio_v2_line_attribute {
+	__u32 id;
+	__u32 padding;
+	union {
+		__u64 flags;
+		__u64 values;
+		__u32 debounce_period_us;
+	};
+};
+
+struct gpio_v2_line_config_attribute {
+	struct gpio_v2_line_attribute attr;
+	__u64 mask;
+};
+
+struct gpio_v2_line_config {
+	__u64 flags;
+	__u32 num_attrs;
+	__u32 padding[5];
+	struct gpio_v2_line_config_attribute attrs[10];
+};
+
+struct gpio_v2_line_request {
+	__u32 offsets[64];
+	char consumer[32];
+	struct gpio_v2_line_config config;
+	__u32 num_lines;
+	__u32 event_buffer_size;
+	__u32 padding[5];
+	__s32 fd;
+};
+
+struct gpio_v2_line_info {
+	char name[32];
+	char consumer[32];
+	__u32 offset;
+	__u32 num_attrs;
+	__u64 flags;
+	struct gpio_v2_line_attribute attrs[10];
+	__u32 padding[4];
+};
+
+enum gpio_v2_line_changed_type {
+	GPIO_V2_LINE_CHANGED_REQUESTED = 1,
+	GPIO_V2_LINE_CHANGED_RELEASED = 2,
+	GPIO_V2_LINE_CHANGED_CONFIG = 3,
+};
+
+struct gpio_v2_line_info_changed {
+	struct gpio_v2_line_info info;
+	__u64 timestamp_ns;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+enum gpio_v2_line_event_id {
+	GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
+	GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
+};
+
+struct gpio_v2_line_event {
+	__u64 timestamp_ns;
+	__u32 id;
+	__u32 offset;
+	__u32 seqno;
+	__u32 line_seqno;
+	__u32 padding[6];
+};
+
+struct gpioline_info {
+	__u32 line_offset;
+	__u32 flags;
+	char name[32];
+	char consumer[32];
+};
+
+struct gpioline_info_changed {
+	struct gpioline_info info;
+	__u64 timestamp;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+struct gpiohandle_request {
+	__u32 lineoffsets[64];
+	__u32 flags;
+	__u8 default_values[64];
+	char consumer_label[32];
+	__u32 lines;
+	int fd;
+};
+
+struct gpiohandle_config {
+	__u32 flags;
+	__u8 default_values[64];
+	__u32 padding[4];
+};
+
+struct gpiohandle_data {
+	__u8 values[64];
+};
+
+struct gpioevent_request {
+	__u32 lineoffset;
+	__u32 handleflags;
+	__u32 eventflags;
+	char consumer_label[32];
+	int fd;
+};
+
+struct gpioevent_data {
+	__u64 timestamp;
+	__u32 id;
+};
+
+struct linehandle_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *descs[64];
+	u32 num_descs;
+};
+
+struct linereq;
+
+struct line {
+	struct gpio_desc *desc;
+	struct linereq *req;
+	unsigned int irq;
+	u64 edflags;
+	u64 timestamp_ns;
+	u32 req_seqno;
+	u32 line_seqno;
+	struct delayed_work work;
+	unsigned int sw_debounced;
+	unsigned int level;
+	struct hte_ts_desc hdesc;
+	int raw_level;
+	u32 total_discard_seq;
+	u32 last_seqno;
+};
+
+struct linereq {
+	struct gpio_device *gdev;
+	const char *label;
+	u32 num_lines;
+	wait_queue_head_t wait;
+	u32 event_buffer_size;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_event *type;
+			const struct gpio_v2_line_event *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_event *ptr;
+			const struct gpio_v2_line_event *ptr_const;
+		};
+		struct gpio_v2_line_event buf[0];
+	} events;
+	atomic_t seqno;
+	struct mutex config_mutex;
+	struct line lines[0];
+};
+
+struct lineevent_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *desc;
+	u32 eflags;
+	int irq;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpioevent_data *type;
+			const struct gpioevent_data *const_type;
+			char (*rectype)[0];
+			struct gpioevent_data *ptr;
+			const struct gpioevent_data *ptr_const;
+		};
+		struct gpioevent_data buf[16];
+	} events;
+	u64 timestamp;
+};
+
+struct gpio_chardev_data {
+	struct gpio_device *gdev;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_info_changed *type;
+			const struct gpio_v2_line_info_changed *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_info_changed *ptr;
+			const struct gpio_v2_line_info_changed *ptr_const;
+		};
+		struct gpio_v2_line_info_changed buf[32];
+	} events;
+	struct notifier_block lineinfo_changed_nb;
+	long unsigned int *watched_lines;
+	atomic_t watch_abi_version;
+};
+
+struct pwm_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+	unsigned int period;
+	enum pwm_polarity polarity;
+	const char *module;
+};
+
+struct trace_event_raw_pwm {
+	struct trace_entry ent;
+	struct pwm_device *pwm;
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_pwm {};
+
+typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *);
+
+typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *);
+
+struct pci_dynid {
+	struct list_head node;
+	struct pci_device_id id;
+};
+
+struct drv_dev_and_id {
+	struct pci_driver *drv;
+	struct pci_dev *dev;
+	const struct pci_device_id *id;
+};
+
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
+};
+
+struct acpiphp_attention_info {
+	int (*set_attn)(struct hotplug_slot *, u8);
+	int (*get_attn)(struct hotplug_slot *, u8 *);
+	struct module *owner;
+};
+
+enum cdns_pcie_rp_bar {
+	RP_BAR_UNDEFINED = 4294967295,
+	RP_BAR0 = 0,
+	RP_BAR1 = 1,
+	RP_NO_BAR = 2,
+};
+
+struct xgene_msi;
+
+struct xgene_msi_group {
+	struct xgene_msi *msi;
+	int gic_irq;
+	u32 msi_grp;
+};
+
+struct xgene_msi {
+	struct device_node *node;
+	struct irq_domain *inner_domain;
+	struct irq_domain *msi_domain;
+	u64 msi_addr;
+	void *msi_regs;
+	long unsigned int *bitmap;
+	struct mutex bitmap_lock;
+	struct xgene_msi_group *msi_groups;
+	int num_cpus;
+};
+
+enum pcie_kirin_phy_type {
+	PCIE_KIRIN_INTERNAL_PHY = 0,
+	PCIE_KIRIN_EXTERNAL_PHY = 1,
+};
+
+struct kirin_pcie {
+	enum pcie_kirin_phy_type type;
+	struct dw_pcie *pci;
+	struct regmap *apb;
+	struct phy *phy;
+	void *phy_priv;
+	int gpio_id_dwc_perst;
+	int num_slots;
+	int gpio_id_reset[3];
+	const char *reset_names[3];
+	int n_gpio_clkreq;
+	int gpio_id_clkreq[3];
+	const char *clkreq_names[3];
+};
+
+struct hi3660_pcie_phy {
+	struct device *dev;
+	void *base;
+	struct regmap *crgctrl;
+	struct regmap *sysctrl;
+	struct clk *apb_sys_clk;
+	struct clk *apb_phy_clk;
+	struct clk *phy_ref_clk;
+	struct clk *aclk;
+	struct clk *aux_clk;
+};
+
+struct kirin_pcie_data {
+	enum pcie_kirin_phy_type phy_type;
+};
+
+struct al_pcie_acpi {
+	void *dbi_base;
+};
+
+struct hdmi_any_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+};
+
+struct hdmi_drm_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_eotf eotf;
+	enum hdmi_metadata_type metadata_type;
+	struct {
+		u16 x;
+		u16 y;
+	} display_primaries[3];
+	struct {
+		u16 x;
+		u16 y;
+	} white_point;
+	u16 max_display_mastering_luminance;
+	u16 min_display_mastering_luminance;
+	u16 max_cll;
+	u16 max_fall;
+};
+
+enum hdmi_spd_sdi {
+	HDMI_SPD_SDI_UNKNOWN = 0,
+	HDMI_SPD_SDI_DSTB = 1,
+	HDMI_SPD_SDI_DVDP = 2,
+	HDMI_SPD_SDI_DVHS = 3,
+	HDMI_SPD_SDI_HDDVR = 4,
+	HDMI_SPD_SDI_DVC = 5,
+	HDMI_SPD_SDI_DSC = 6,
+	HDMI_SPD_SDI_VCD = 7,
+	HDMI_SPD_SDI_GAME = 8,
+	HDMI_SPD_SDI_PC = 9,
+	HDMI_SPD_SDI_BD = 10,
+	HDMI_SPD_SDI_SACD = 11,
+	HDMI_SPD_SDI_HDDVD = 12,
+	HDMI_SPD_SDI_PMP = 13,
+};
+
+struct hdmi_spd_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	char vendor[8];
+	char product[16];
+	enum hdmi_spd_sdi sdi;
+};
+
+enum hdmi_audio_coding_type {
+	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
+	HDMI_AUDIO_CODING_TYPE_PCM = 1,
+	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
+	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
+	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
+	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
+	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_DTS = 7,
+	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
+	HDMI_AUDIO_CODING_TYPE_DSD = 9,
+	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
+	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
+	HDMI_AUDIO_CODING_TYPE_MLP = 12,
+	HDMI_AUDIO_CODING_TYPE_DST = 13,
+	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
+	HDMI_AUDIO_CODING_TYPE_CXT = 15,
+};
+
+enum hdmi_audio_sample_size {
+	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
+	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
+	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
+};
+
+enum hdmi_audio_sample_frequency {
+	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
+};
+
+enum hdmi_audio_coding_type_ext {
+	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
+};
+
+struct hdmi_audio_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned char channels;
+	enum hdmi_audio_coding_type coding_type;
+	enum hdmi_audio_sample_size sample_size;
+	enum hdmi_audio_sample_frequency sample_frequency;
+	enum hdmi_audio_coding_type_ext coding_type_ext;
+	unsigned char channel_allocation;
+	unsigned char level_shift_value;
+	bool downmix_inhibit;
+};
+
+union hdmi_vendor_any_infoframe {
+	struct {
+		enum hdmi_infoframe_type type;
+		unsigned char version;
+		unsigned char length;
+		unsigned int oui;
+	} any;
+	struct hdmi_vendor_infoframe hdmi;
+};
+
+union hdmi_infoframe {
+	struct hdmi_any_infoframe any;
+	struct hdmi_avi_infoframe avi;
+	struct hdmi_spd_infoframe spd;
+	union hdmi_vendor_any_infoframe vendor;
+	struct hdmi_audio_infoframe audio;
+	struct hdmi_drm_infoframe drm;
+};
+
+struct fb_cvt_data {
+	u32 xres;
+	u32 yres;
+	u32 refresh;
+	u32 f_refresh;
+	u32 pixclock;
+	u32 hperiod;
+	u32 hblank;
+	u32 hfreq;
+	u32 htotal;
+	u32 vtotal;
+	u32 vsync;
+	u32 hsync;
+	u32 h_front_porch;
+	u32 h_back_porch;
+	u32 v_front_porch;
+	u32 v_back_porch;
+	u32 h_margin;
+	u32 v_margin;
+	u32 interlace;
+	u32 aspect_ratio;
+	u32 active_pixels;
+	u32 flags;
+	u32 status;
+};
+
+typedef u32 (*acpi_osd_handler)(void *);
+
+struct acpi_os_dpc {
+	acpi_osd_exec_callback function;
+	void *context;
+	struct work_struct work;
+};
+
+struct acpi_ioremap {
+	struct list_head list;
+	void *virt;
+	acpi_physical_address phys;
+	acpi_size size;
+	union {
+		long unsigned int refcount;
+		struct rcu_work rwork;
+	} track;
+};
+
+struct acpi_hp_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+	u32 src;
+};
+
+struct acpi_processor_errata {
+	u8 smp;
+	struct {
+		u8 throttle: 1;
+		u8 fdma: 1;
+		u8 reserved: 6;
+		u32 bmisx;
+	} piix4;
+};
+
+struct acpi_ged_device {
+	struct device *dev;
+	struct list_head event_list;
+};
+
+struct acpi_ged_event {
+	struct list_head node;
+	struct device *dev;
+	unsigned int gsi;
+	unsigned int irq;
+	acpi_handle handle;
+};
+
+struct pcc_data {
+	struct pcc_mbox_chan *pcc_chan;
+	void *pcc_comm_addr;
+	struct completion done;
+	struct mbox_client cl;
+	struct acpi_pcc_info ctx;
+};
+
+typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
+
+struct acpi_repair_info {
+	char name[4];
+	acpi_repair_function repair_function;
+};
+
+struct acpi_vendor_walk_info {
+	struct acpi_vendor_uuid *uuid;
+	struct acpi_buffer *buffer;
+	acpi_status status;
+};
+
+struct acpi_power_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_lpi_states_array {
+	unsigned int size;
+	unsigned int composite_states_size;
+	struct acpi_lpi_state *entries;
+	struct acpi_lpi_state *composite_states[8];
+};
+
+struct pnp_info_buffer {
+	char *buffer;
+	char *curr;
+	long unsigned int size;
+	long unsigned int len;
+	int stop;
+	int error;
+};
+
+typedef struct pnp_info_buffer pnp_info_buffer_t;
+
+struct tegra_ahb {
+	void *regs;
+	struct device *dev;
+	u32 ctx[0];
+};
+
+enum max77686_chip_name {
+	CHIP_MAX77686 = 0,
+	CHIP_MAX77802 = 1,
+	CHIP_MAX77620 = 2,
+};
+
+struct max77686_hw_clk_info {
+	const char *name;
+	u32 clk_reg;
+	u32 clk_enable_mask;
+	u32 flags;
+};
+
+struct max77686_clk_init_data {
+	struct regmap *regmap;
+	struct clk_hw hw;
+	struct clk_init_data clk_idata;
+	const struct max77686_hw_clk_info *clk_info;
+};
+
+struct max77686_clk_driver_data {
+	enum max77686_chip_name chip;
+	struct max77686_clk_init_data *max_clk_data;
+	size_t num_clks;
+};
+
+struct hi3660_stub_clk_chan {
+	struct mbox_client cl;
+	struct mbox_chan *mbox;
+};
+
+struct hi3660_stub_clk {
+	unsigned int id;
+	struct clk_hw hw;
+	unsigned int cmd;
+	unsigned int msg[8];
+	unsigned int rate;
+};
+
+struct imx_scu_clk_node {
+	const char *name;
+	u32 rsrc;
+	u8 clk_type;
+	const char * const *parents;
+	int num_parents;
+	struct clk_hw *hw;
+	struct list_head node;
+};
+
+struct clk_scu {
+	struct clk_hw hw;
+	u16 rsrc_id;
+	u8 clk_type;
+	struct clk_hw *parent;
+	u8 parent_index;
+	bool is_enabled;
+	u32 rate;
+};
+
+struct clk_gpr_scu {
+	struct clk_hw hw;
+	u16 rsrc_id;
+	u8 gpr_id;
+	u8 flags;
+	bool gate_invert;
+};
+
+struct imx_sc_msg_req_set_clock_rate {
+	struct imx_sc_rpc_msg hdr;
+	__le32 rate;
+	__le16 resource;
+	u8 clk;
+};
+
+struct req_get_clock_rate {
+	__le16 resource;
+	u8 clk;
+};
+
+struct resp_get_clock_rate {
+	__le32 rate;
+};
+
+struct imx_sc_msg_get_clock_rate {
+	struct imx_sc_rpc_msg hdr;
+	union {
+		struct req_get_clock_rate req;
+		struct resp_get_clock_rate resp;
+	} data;
+};
+
+struct req_get_clock_parent {
+	__le16 resource;
+	u8 clk;
+};
+
+struct resp_get_clock_parent {
+	u8 parent;
+};
+
+struct imx_sc_msg_get_clock_parent {
+	struct imx_sc_rpc_msg hdr;
+	union {
+		struct req_get_clock_parent req;
+		struct resp_get_clock_parent resp;
+	} data;
+};
+
+struct imx_sc_msg_set_clock_parent {
+	struct imx_sc_rpc_msg hdr;
+	__le16 resource;
+	u8 clk;
+	u8 parent;
+};
+
+struct imx_sc_msg_req_clock_enable {
+	struct imx_sc_rpc_msg hdr;
+	__le16 resource;
+	u8 clk;
+	u8 enable;
+	u8 autog;
+	int: 24;
+};
+
+struct cpu_dfs_regs {
+	unsigned int divider_reg;
+	unsigned int force_reg;
+	unsigned int ratio_reg;
+	unsigned int ratio_state_reg;
+	unsigned int divider_mask;
+	unsigned int cluster_offset;
+	unsigned int force_mask;
+	int divider_offset;
+	int divider_ratio;
+	int ratio_offset;
+	int ratio_state_offset;
+	int ratio_state_cluster_offset;
+};
+
+struct ap_cpu_clk {
+	unsigned int cluster;
+	const char *clk_name;
+	struct device *dev;
+	struct clk_hw hw;
+	struct regmap *pll_cr_base;
+	const struct cpu_dfs_regs *pll_regs;
+};
+
+enum gdsc_status {
+	GDSC_OFF = 0,
+	GDSC_ON = 1,
+};
+
+struct rockchip_cpuclk {
+	struct clk_hw hw;
+	struct clk *alt_parent;
+	void *reg_base;
+	struct notifier_block clk_nb;
+	unsigned int rate_count;
+	struct rockchip_cpuclk_rate_table *rate_table;
+	const struct rockchip_cpuclk_reg_data *reg_data;
+	spinlock_t *lock;
+};
+
+struct rockchip_mmc_clock {
+	struct clk_hw hw;
+	void *reg;
+	int id;
+	int shift;
+	int cached_phase;
+	struct notifier_block clk_rate_change_nb;
+};
+
+struct rockchip_ddrclk {
+	struct clk_hw hw;
+	void *reg_base;
+	int mux_offset;
+	int mux_shift;
+	int mux_width;
+	int div_shift;
+	int div_width;
+	int ddr_flag;
+	spinlock_t *lock;
+};
+
+enum px30_plls {
+	apll___4 = 0,
+	dpll___6 = 1,
+	cpll___5 = 2,
+	npll___5 = 3,
+	apll_b_h = 4,
+	apll_b_l = 5,
+};
+
+enum px30_pmu_plls {
+	gpll___5 = 0,
+};
+
+struct sunxi_ccu {
+	const struct sunxi_ccu_desc *desc;
+	spinlock_t lock;
+	struct ccu_reset reset;
+};
+
+struct sun6i_rtc_match_data {
+	bool have_ext_osc32k: 1;
+	bool have_iosc_calibration: 1;
+	bool rtc_32k_single_parent: 1;
+	const struct clk_parent_data *osc32k_fanout_parents;
+	u8 osc32k_fanout_nparents;
+};
+
+struct utmi_clk_param {
+	u32 osc_frequency;
+	u8 enable_delay_count;
+	u8 stable_count;
+	u8 active_delay_count;
+	u8 xtal_freq_count;
+};
+
+struct cpu_clk_suspend_context___2 {
+	u32 clk_csite_src;
+};
+
+struct tegra210_domain_mbist_war {
+	void (*handle_lvl2_ovr)(struct tegra210_domain_mbist_war *);
+	const u32 lvl2_offset;
+	const u32 lvl2_mask;
+	const unsigned int num_clks;
+	const unsigned int *clk_init_data;
+	struct clk_bulk_data *clks;
+};
+
+struct utmi_clk_param___2 {
+	u32 osc_frequency;
+	u8 enable_delay_count;
+	u16 stable_count;
+	u8 active_delay_count;
+	u16 xtal_freq_count;
+};
+
+struct zynqmp_clk_divider {
+	struct clk_hw hw;
+	u8 flags;
+	bool is_frac;
+	u32 clk_id;
+	u32 div_type;
+	u16 max_div;
+};
+
+struct of_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct k3_udma_glue_tx_channel_cfg {
+	struct k3_ring_cfg tx_cfg;
+	struct k3_ring_cfg txcq_cfg;
+	bool tx_pause_on_err;
+	bool tx_filt_einfo;
+	bool tx_filt_pswords;
+	bool tx_supr_tdpkt;
+	u32 swdata_size;
+};
+
+struct k3_udma_glue_rx_flow_cfg {
+	struct k3_ring_cfg rx_cfg;
+	struct k3_ring_cfg rxfdq_cfg;
+	int ring_rxq_id;
+	int ring_rxfdq0_id;
+	bool rx_error_handling;
+	int src_tag_lo_sel;
+};
+
+struct k3_udma_glue_rx_channel_cfg {
+	u32 swdata_size;
+	int flow_id_base;
+	int flow_id_num;
+	bool flow_id_use_rxchan_id;
+	bool remote;
+	struct k3_udma_glue_rx_flow_cfg *def_flow_cfg;
+};
+
+struct udma_dev;
+
+struct k3_udma_glue_common {
+	struct device *dev;
+	struct device chan_dev;
+	struct udma_dev *udmax;
+	const struct udma_tisci_rm *tisci_rm;
+	struct k3_ringacc *ringacc;
+	u32 src_thread;
+	u32 dst_thread;
+	u32 hdesc_size;
+	bool epib;
+	u32 psdata_size;
+	u32 swdata_size;
+	u32 atype_asel;
+	struct psil_endpoint_config *ep_config;
+};
+
+struct udma_tchan;
+
+struct k3_udma_glue_tx_channel {
+	struct k3_udma_glue_common common;
+	struct udma_tchan *udma_tchanx;
+	int udma_tchan_id;
+	struct k3_ring *ringtx;
+	struct k3_ring *ringtxcq;
+	bool psil_paired;
+	int virq;
+	atomic_t free_pkts;
+	bool tx_pause_on_err;
+	bool tx_filt_einfo;
+	bool tx_filt_pswords;
+	bool tx_supr_tdpkt;
+	int udma_tflow_id;
+};
+
+struct udma_rflow;
+
+struct k3_udma_glue_rx_flow {
+	struct udma_rflow *udma_rflow;
+	int udma_rflow_id;
+	struct k3_ring *ringrx;
+	struct k3_ring *ringrxfdq;
+	int virq;
+};
+
+struct udma_rchan;
+
+struct k3_udma_glue_rx_channel {
+	struct k3_udma_glue_common common;
+	struct udma_rchan *udma_rchanx;
+	int udma_rchan_id;
+	bool remote;
+	bool psil_paired;
+	u32 swdata_size;
+	int flow_id_base;
+	struct k3_udma_glue_rx_flow *flows;
+	u32 flow_num;
+	u32 flows_ready;
+};
+
+enum qm_wq_class {
+	qm_wq_portal = 0,
+	qm_wq_pool = 1,
+	qm_wq_fman0 = 2,
+	qm_wq_fman1 = 3,
+	qm_wq_caam = 4,
+	qm_wq_pme = 5,
+	qm_wq_first = 0,
+	qm_wq_last = 5,
+};
+
+enum qm_memory {
+	qm_memory_fqd = 0,
+	qm_memory_pfdr = 1,
+};
+
+struct qm_ecir {
+	u32 info;
+};
+
+struct qm_ecir2 {
+	u32 info;
+};
+
+struct qm_eadr {
+	u32 info;
+};
+
+struct qman_hwerr_txt {
+	u32 mask;
+	const char *txt;
+};
+
+struct qman_error_info_mdata {
+	u16 addr_mask;
+	u16 bits;
+	const char *txt;
+};
+
+enum qm_dc_portal {
+	qm_dc_portal_fman0 = 0,
+	qm_dc_portal_fman1 = 1,
+};
+
+struct a64fx_diag_priv {
+	void *mmsc_reg_base;
+	int irq;
+	bool has_nmi;
+};
+
+struct meson_secure_pwrc;
+
+struct meson_secure_pwrc_domain {
+	struct generic_pm_domain base;
+	unsigned int index;
+	struct meson_secure_pwrc *pwrc;
+};
+
+struct meson_sm_firmware;
+
+struct meson_secure_pwrc {
+	struct meson_secure_pwrc_domain *domains;
+	struct genpd_onecell_data xlate;
+	struct meson_sm_firmware *fw;
+};
+
+struct meson_secure_pwrc_domain_desc {
+	unsigned int index;
+	unsigned int flags;
+	char *name;
+	bool (*is_off)(struct meson_secure_pwrc_domain *);
+};
+
+struct meson_secure_pwrc_domain_data {
+	unsigned int count;
+	struct meson_secure_pwrc_domain_desc *domains;
+};
+
+struct rpmhpd {
+	struct device *dev;
+	struct generic_pm_domain pd;
+	struct generic_pm_domain *parent;
+	struct rpmhpd *peer;
+	const bool active_only;
+	unsigned int corner;
+	unsigned int active_corner;
+	unsigned int enable_corner;
+	u32 level[16];
+	size_t level_count;
+	bool enabled;
+	const char *res_name;
+	u32 addr;
+};
+
+struct rpmhpd_desc {
+	struct rpmhpd **rpmhpds;
+	size_t num_pds;
+};
+
+struct k3_ring_rt_regs {
+	u32 resv_16[4];
+	u32 db;
+	u32 resv_4[1];
+	u32 occ;
+	u32 indx;
+	u32 hwocc;
+	u32 hwindx;
+};
+
+struct k3_ring_fifo_regs {
+	u32 head_data[128];
+	u32 tail_data[128];
+	u32 peek_head_data[128];
+	u32 peek_tail_data[128];
+};
+
+struct k3_ringacc_proxy_gcfg_regs {
+	u32 revision;
+	u32 config;
+};
+
+struct k3_ringacc_proxy_target_regs {
+	u32 control;
+	u32 status;
+	u8 resv_512[504];
+	u32 data[128];
+};
+
+enum k3_ringacc_proxy_access_mode {
+	PROXY_ACCESS_MODE_HEAD = 0,
+	PROXY_ACCESS_MODE_TAIL = 1,
+	PROXY_ACCESS_MODE_PEEK_HEAD = 2,
+	PROXY_ACCESS_MODE_PEEK_TAIL = 3,
+};
+
+struct k3_ring;
+
+struct k3_ring_ops {
+	int (*push_tail)(struct k3_ring *, void *);
+	int (*push_head)(struct k3_ring *, void *);
+	int (*pop_tail)(struct k3_ring *, void *);
+	int (*pop_head)(struct k3_ring *, void *);
+};
+
+struct k3_ring_state {
+	u32 free;
+	u32 occ;
+	u32 windex;
+	u32 rindex;
+	u32 tdown_complete: 1;
+};
+
+struct k3_ringacc;
+
+struct k3_ring {
+	struct k3_ring_rt_regs *rt;
+	struct k3_ring_fifo_regs *fifos;
+	struct k3_ringacc_proxy_target_regs *proxy;
+	dma_addr_t ring_mem_dma;
+	void *ring_mem_virt;
+	struct k3_ring_ops *ops;
+	u32 size;
+	enum k3_ring_size elm_size;
+	enum k3_ring_mode mode;
+	u32 flags;
+	struct k3_ring_state state;
+	u32 ring_id;
+	struct k3_ringacc *parent;
+	u32 use_count;
+	int proxy_id;
+	struct device *dma_dev;
+	u32 asel;
+};
+
+struct k3_ringacc_ops;
+
+struct k3_ringacc {
+	struct device *dev;
+	struct k3_ringacc_proxy_gcfg_regs *proxy_gcfg;
+	void *proxy_target_base;
+	u32 num_rings;
+	long unsigned int *rings_inuse;
+	struct ti_sci_resource *rm_gp_range;
+	bool dma_ring_reset_quirk;
+	u32 num_proxies;
+	long unsigned int *proxy_inuse;
+	struct k3_ring *rings;
+	struct list_head list;
+	struct mutex req_lock;
+	const struct ti_sci_handle *tisci;
+	const struct ti_sci_rm_ringacc_ops *tisci_ring_ops;
+	u32 tisci_dev_id;
+	const struct k3_ringacc_ops *ops;
+	bool dma_rings;
+};
+
+struct k3_ringacc_ops {
+	int (*init)(struct platform_device *, struct k3_ringacc *);
+};
+
+struct k3_ringacc_soc_data {
+	unsigned int dma_ring_reset_quirk: 1;
+};
+
+enum k3_ringacc_access_mode {
+	K3_RINGACC_ACCESS_MODE_PUSH_HEAD = 0,
+	K3_RINGACC_ACCESS_MODE_POP_HEAD = 1,
+	K3_RINGACC_ACCESS_MODE_PUSH_TAIL = 2,
+	K3_RINGACC_ACCESS_MODE_POP_TAIL = 3,
+	K3_RINGACC_ACCESS_MODE_PEEK_HEAD = 4,
+	K3_RINGACC_ACCESS_MODE_PEEK_TAIL = 5,
+};
+
+struct ringacc_match_data {
+	struct k3_ringacc_ops ops;
+};
+
+enum {
+	VP_MSIX_CONFIG_VECTOR = 0,
+	VP_MSIX_VQ_VECTOR = 1,
+};
+
+struct fixed_voltage_data {
+	struct regulator_desc desc;
+	struct regulator_dev *dev;
+	struct clk *enable_clock;
+	unsigned int enable_counter;
+	int performance_state;
+};
+
+struct fixed_dev_type {
+	bool has_enable_clock;
+	bool has_performance_state;
+};
+
+enum rk808_reg {
+	RK808_ID_DCDC1 = 0,
+	RK808_ID_DCDC2 = 1,
+	RK808_ID_DCDC3 = 2,
+	RK808_ID_DCDC4 = 3,
+	RK808_ID_LDO1 = 4,
+	RK808_ID_LDO2 = 5,
+	RK808_ID_LDO3 = 6,
+	RK808_ID_LDO4 = 7,
+	RK808_ID_LDO5 = 8,
+	RK808_ID_LDO6 = 9,
+	RK808_ID_LDO7 = 10,
+	RK808_ID_LDO8 = 11,
+	RK808_ID_SWITCH1 = 12,
+	RK808_ID_SWITCH2 = 13,
+};
+
+enum rk818_reg {
+	RK818_ID_DCDC1 = 0,
+	RK818_ID_DCDC2 = 1,
+	RK818_ID_DCDC3 = 2,
+	RK818_ID_DCDC4 = 3,
+	RK818_ID_BOOST = 4,
+	RK818_ID_LDO1 = 5,
+	RK818_ID_LDO2 = 6,
+	RK818_ID_LDO3 = 7,
+	RK818_ID_LDO4 = 8,
+	RK818_ID_LDO5 = 9,
+	RK818_ID_LDO6 = 10,
+	RK818_ID_LDO7 = 11,
+	RK818_ID_LDO8 = 12,
+	RK818_ID_LDO9 = 13,
+	RK818_ID_SWITCH = 14,
+	RK818_ID_HDMI_SWITCH = 15,
+	RK818_ID_OTG_SWITCH = 16,
+};
+
+enum rk805_reg {
+	RK805_ID_DCDC1 = 0,
+	RK805_ID_DCDC2 = 1,
+	RK805_ID_DCDC3 = 2,
+	RK805_ID_DCDC4 = 3,
+	RK805_ID_LDO1 = 4,
+	RK805_ID_LDO2 = 5,
+	RK805_ID_LDO3 = 6,
+};
+
+enum rk809_reg_id {
+	RK809_ID_DCDC5 = 13,
+	RK809_ID_SW1 = 14,
+	RK809_ID_SW2 = 15,
+	RK809_NUM_REGULATORS = 16,
+};
+
+struct rk808_regulator_data {
+	struct gpio_desc *dvs_gpio[2];
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	short unsigned int c_iflag;
+	short unsigned int c_oflag;
+	short unsigned int c_cflag;
+	short unsigned int c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	long unsigned int key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	long unsigned int reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+struct bcm2835aux_data {
+	struct clk *clk;
+	int line;
+	u32 cntl;
+};
+
+struct bcm2835_aux_serial_driver_data {
+	resource_size_t offset;
+};
+
+struct tegra_uart {
+	struct clk *clk;
+	struct reset_control *rst;
+	int line;
+};
+
+enum geni_icc_path_index {
+	GENI_TO_CORE = 0,
+	CPU_TO_GENI = 1,
+	GENI_TO_DDR = 2,
+};
+
+struct qcom_geni_private_data {
+	struct uart_driver *drv;
+	u32 poll_cached_bytes;
+	unsigned int poll_cached_bytes_cnt;
+	u32 write_cached_bytes;
+	unsigned int write_cached_bytes_cnt;
+};
+
+struct qcom_geni_serial_port {
+	struct uart_port uport;
+	struct geni_se se;
+	const char *name;
+	u32 tx_fifo_depth;
+	u32 tx_fifo_width;
+	u32 rx_fifo_depth;
+	bool setup;
+	int (*handle_rx)(struct uart_port *, u32, bool);
+	unsigned int baud;
+	void *rx_fifo;
+	u32 loopback;
+	bool brk;
+	unsigned int tx_remaining;
+	int wakeup_irq;
+	bool rx_tx_swap;
+	bool cts_rts_swap;
+	struct qcom_geni_private_data private_data;
+};
+
+struct tpmrm_priv {
+	struct file_priv priv;
+	struct tpm_space space;
+};
+
+enum qcom_iommu_clk {
+	CLK_IFACE = 0,
+	CLK_BUS = 1,
+	CLK_TBU = 2,
+	CLK_NUM = 3,
+};
+
+struct qcom_iommu_ctx;
+
+struct qcom_iommu_dev {
+	struct iommu_device iommu;
+	struct device *dev;
+	struct clk_bulk_data clks[3];
+	void *local_base;
+	u32 sec_id;
+	u8 num_ctxs;
+	struct qcom_iommu_ctx *ctxs[0];
+};
+
+struct qcom_iommu_ctx {
+	struct device *dev;
+	void *base;
+	bool secure_init;
+	u8 asid;
+	struct iommu_domain *domain;
+};
+
+struct qcom_iommu_domain {
+	struct io_pgtable_ops *pgtbl_ops;
+	spinlock_t pgtbl_lock;
+	struct mutex init_mutex;
+	struct iommu_domain domain;
+	struct qcom_iommu_dev *iommu;
+	struct iommu_fwspec *fwspec;
+};
+
+struct trace_event_raw_iommu_group_event {
+	struct trace_entry ent;
+	int gid;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_device_event {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_map {
+	struct trace_entry ent;
+	u64 iova;
+	u64 paddr;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_unmap {
+	struct trace_entry ent;
+	u64 iova;
+	size_t size;
+	size_t unmapped_size;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_error {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u64 iova;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iommu_group_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_iommu_device_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_map {};
+
+struct trace_event_data_offsets_unmap {};
+
+struct trace_event_data_offsets_iommu_error {
+	u32 device;
+	u32 driver;
+};
+
+typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
+
+typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
+
+typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
+
+typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
+
+typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
+
+struct sun50i_iommu {
+	struct iommu_device iommu;
+	spinlock_t iommu_lock;
+	struct device *dev;
+	void *base;
+	struct reset_control *reset;
+	struct clk *clk;
+	struct iommu_domain *domain;
+	struct iommu_group *group;
+	struct kmem_cache *pt_pool;
+};
+
+struct sun50i_iommu_domain {
+	struct iommu_domain domain;
+	refcount_t refcnt;
+	u32 *dt;
+	dma_addr_t dt_dma;
+	struct sun50i_iommu *iommu;
+};
+
+enum sun50i_iommu_aci {
+	SUN50I_IOMMU_ACI_DO_NOT_USE = 0,
+	SUN50I_IOMMU_ACI_NONE = 1,
+	SUN50I_IOMMU_ACI_RD = 2,
+	SUN50I_IOMMU_ACI_WR = 3,
+	SUN50I_IOMMU_ACI_RD_WR = 4,
+};
+
+struct displayid_header {
+	u8 rev;
+	u8 bytes;
+	u8 prod_id;
+	u8 ext_count;
+};
+
+struct trace_event_raw_drm_vblank_event {
+	struct trace_entry ent;
+	int crtc;
+	unsigned int seq;
+	ktime_t time;
+	bool high_prec;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_queued {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_delivered {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_drm_vblank_event {};
+
+struct trace_event_data_offsets_drm_vblank_event_queued {};
+
+struct trace_event_data_offsets_drm_vblank_event_delivered {};
+
+typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
+
+typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
+
+typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
+
+struct drm_print_iterator {
+	void *data;
+	ssize_t start;
+	ssize_t remain;
+	ssize_t offset;
+};
+
+struct drm_mode_create_lease {
+	__u64 object_ids;
+	__u32 object_count;
+	__u32 flags;
+	__u32 lessee_id;
+	__u32 fd;
+};
+
+struct drm_mode_list_lessees {
+	__u32 count_lessees;
+	__u32 pad;
+	__u64 lessees_ptr;
+};
+
+struct drm_mode_get_lease {
+	__u32 count_objects;
+	__u32 pad;
+	__u64 objects_ptr;
+};
+
+struct drm_mode_revoke_lease {
+	__u32 lessee_id;
+};
+
+struct simpledrm_device {
+	struct drm_device dev;
+	struct platform_device *pdev;
+	unsigned int clk_count;
+	struct clk **clks;
+	unsigned int regulator_count;
+	struct regulator **regulators;
+	struct drm_display_mode mode;
+	const struct drm_format_info *format;
+	unsigned int pitch;
+	struct resource *mem;
+	void *screen_base;
+	uint32_t formats[8];
+	size_t nformats;
+	struct drm_connector connector;
+	struct drm_simple_display_pipe pipe;
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	long unsigned int addr;
+	unsigned int order;
+};
+
+struct req {
+	struct req *next;
+	struct completion done;
+	int err;
+	const char *name;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	struct device *dev;
+};
+
+enum fw_upload_err {
+	FW_UPLOAD_ERR_NONE = 0,
+	FW_UPLOAD_ERR_HW_ERROR = 1,
+	FW_UPLOAD_ERR_TIMEOUT = 2,
+	FW_UPLOAD_ERR_CANCELED = 3,
+	FW_UPLOAD_ERR_BUSY = 4,
+	FW_UPLOAD_ERR_INVALID_SIZE = 5,
+	FW_UPLOAD_ERR_RW_ERROR = 6,
+	FW_UPLOAD_ERR_WEAROUT = 7,
+	FW_UPLOAD_ERR_MAX = 8,
+};
+
+struct fw_upload {
+	void *dd_handle;
+	void *priv;
+};
+
+struct fw_upload_ops {
+	enum fw_upload_err (*prepare)(struct fw_upload *, const u8 *, u32);
+	enum fw_upload_err (*write)(struct fw_upload *, const u8 *, u32, u32, u32 *);
+	enum fw_upload_err (*poll_complete)(struct fw_upload *);
+	void (*cancel)(struct fw_upload *);
+	void (*cleanup)(struct fw_upload *);
+};
+
+enum fw_upload_prog {
+	FW_UPLOAD_PROG_IDLE = 0,
+	FW_UPLOAD_PROG_RECEIVING = 1,
+	FW_UPLOAD_PROG_PREPARING = 2,
+	FW_UPLOAD_PROG_TRANSFERRING = 3,
+	FW_UPLOAD_PROG_PROGRAMMING = 4,
+	FW_UPLOAD_PROG_MAX = 5,
+};
+
+struct fw_upload_priv {
+	struct fw_upload *fw_upload;
+	struct module *module;
+	const char *name;
+	const struct fw_upload_ops *ops;
+	struct mutex lock;
+	struct work_struct work;
+	const u8 *data;
+	u32 remaining_size;
+	enum fw_upload_prog progress;
+	enum fw_upload_prog err_progress;
+	enum fw_upload_err err_code;
+};
+
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct regmap_debugfs_node {
+	struct regmap *map;
+	struct list_head link;
+};
+
+struct devcd_entry {
+	struct device devcd_dev;
+	void *data;
+	size_t datalen;
+	struct module *owner;
+	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
+	void (*free)(void *);
+	struct delayed_work del_wk;
+	struct device *failing_dev;
+};
+
+enum {
+	AXP152_IRQ_LDO0IN_CONNECT = 1,
+	AXP152_IRQ_LDO0IN_REMOVAL = 2,
+	AXP152_IRQ_ALDO0IN_CONNECT = 3,
+	AXP152_IRQ_ALDO0IN_REMOVAL = 4,
+	AXP152_IRQ_DCDC1_V_LOW = 5,
+	AXP152_IRQ_DCDC2_V_LOW = 6,
+	AXP152_IRQ_DCDC3_V_LOW = 7,
+	AXP152_IRQ_DCDC4_V_LOW = 8,
+	AXP152_IRQ_PEK_SHORT = 9,
+	AXP152_IRQ_PEK_LONG = 10,
+	AXP152_IRQ_TIMER = 11,
+	AXP152_IRQ_PEK_RIS_EDGE = 12,
+	AXP152_IRQ_PEK_FAL_EDGE = 13,
+	AXP152_IRQ_GPIO3_INPUT = 14,
+	AXP152_IRQ_GPIO2_INPUT = 15,
+	AXP152_IRQ_GPIO1_INPUT = 16,
+	AXP152_IRQ_GPIO0_INPUT = 17,
+};
+
+enum {
+	AXP20X_IRQ_ACIN_OVER_V = 1,
+	AXP20X_IRQ_ACIN_PLUGIN = 2,
+	AXP20X_IRQ_ACIN_REMOVAL = 3,
+	AXP20X_IRQ_VBUS_OVER_V = 4,
+	AXP20X_IRQ_VBUS_PLUGIN = 5,
+	AXP20X_IRQ_VBUS_REMOVAL = 6,
+	AXP20X_IRQ_VBUS_V_LOW = 7,
+	AXP20X_IRQ_BATT_PLUGIN = 8,
+	AXP20X_IRQ_BATT_REMOVAL = 9,
+	AXP20X_IRQ_BATT_ENT_ACT_MODE = 10,
+	AXP20X_IRQ_BATT_EXIT_ACT_MODE = 11,
+	AXP20X_IRQ_CHARG = 12,
+	AXP20X_IRQ_CHARG_DONE = 13,
+	AXP20X_IRQ_BATT_TEMP_HIGH = 14,
+	AXP20X_IRQ_BATT_TEMP_LOW = 15,
+	AXP20X_IRQ_DIE_TEMP_HIGH = 16,
+	AXP20X_IRQ_CHARG_I_LOW = 17,
+	AXP20X_IRQ_DCDC1_V_LONG = 18,
+	AXP20X_IRQ_DCDC2_V_LONG = 19,
+	AXP20X_IRQ_DCDC3_V_LONG = 20,
+	AXP20X_IRQ_PEK_SHORT = 22,
+	AXP20X_IRQ_PEK_LONG = 23,
+	AXP20X_IRQ_N_OE_PWR_ON = 24,
+	AXP20X_IRQ_N_OE_PWR_OFF = 25,
+	AXP20X_IRQ_VBUS_VALID = 26,
+	AXP20X_IRQ_VBUS_NOT_VALID = 27,
+	AXP20X_IRQ_VBUS_SESS_VALID = 28,
+	AXP20X_IRQ_VBUS_SESS_END = 29,
+	AXP20X_IRQ_LOW_PWR_LVL1 = 30,
+	AXP20X_IRQ_LOW_PWR_LVL2 = 31,
+	AXP20X_IRQ_TIMER = 32,
+	AXP20X_IRQ_PEK_RIS_EDGE = 33,
+	AXP20X_IRQ_PEK_FAL_EDGE = 34,
+	AXP20X_IRQ_GPIO3_INPUT = 35,
+	AXP20X_IRQ_GPIO2_INPUT = 36,
+	AXP20X_IRQ_GPIO1_INPUT = 37,
+	AXP20X_IRQ_GPIO0_INPUT = 38,
+};
+
+enum axp22x_irqs {
+	AXP22X_IRQ_ACIN_OVER_V = 1,
+	AXP22X_IRQ_ACIN_PLUGIN = 2,
+	AXP22X_IRQ_ACIN_REMOVAL = 3,
+	AXP22X_IRQ_VBUS_OVER_V = 4,
+	AXP22X_IRQ_VBUS_PLUGIN = 5,
+	AXP22X_IRQ_VBUS_REMOVAL = 6,
+	AXP22X_IRQ_VBUS_V_LOW = 7,
+	AXP22X_IRQ_BATT_PLUGIN = 8,
+	AXP22X_IRQ_BATT_REMOVAL = 9,
+	AXP22X_IRQ_BATT_ENT_ACT_MODE = 10,
+	AXP22X_IRQ_BATT_EXIT_ACT_MODE = 11,
+	AXP22X_IRQ_CHARG = 12,
+	AXP22X_IRQ_CHARG_DONE = 13,
+	AXP22X_IRQ_BATT_TEMP_HIGH = 14,
+	AXP22X_IRQ_BATT_TEMP_LOW = 15,
+	AXP22X_IRQ_DIE_TEMP_HIGH = 16,
+	AXP22X_IRQ_PEK_SHORT = 17,
+	AXP22X_IRQ_PEK_LONG = 18,
+	AXP22X_IRQ_LOW_PWR_LVL1 = 19,
+	AXP22X_IRQ_LOW_PWR_LVL2 = 20,
+	AXP22X_IRQ_TIMER = 21,
+	AXP22X_IRQ_PEK_RIS_EDGE = 22,
+	AXP22X_IRQ_PEK_FAL_EDGE = 23,
+	AXP22X_IRQ_GPIO1_INPUT = 24,
+	AXP22X_IRQ_GPIO0_INPUT = 25,
+};
+
+enum axp288_irqs {
+	AXP288_IRQ_VBUS_FALL = 2,
+	AXP288_IRQ_VBUS_RISE = 3,
+	AXP288_IRQ_OV = 4,
+	AXP288_IRQ_FALLING_ALT = 5,
+	AXP288_IRQ_RISING_ALT = 6,
+	AXP288_IRQ_OV_ALT = 7,
+	AXP288_IRQ_DONE = 10,
+	AXP288_IRQ_CHARGING = 11,
+	AXP288_IRQ_SAFE_QUIT = 12,
+	AXP288_IRQ_SAFE_ENTER = 13,
+	AXP288_IRQ_ABSENT = 14,
+	AXP288_IRQ_APPEND = 15,
+	AXP288_IRQ_QWBTU = 16,
+	AXP288_IRQ_WBTU = 17,
+	AXP288_IRQ_QWBTO = 18,
+	AXP288_IRQ_WBTO = 19,
+	AXP288_IRQ_QCBTU = 20,
+	AXP288_IRQ_CBTU = 21,
+	AXP288_IRQ_QCBTO = 22,
+	AXP288_IRQ_CBTO = 23,
+	AXP288_IRQ_WL2 = 24,
+	AXP288_IRQ_WL1 = 25,
+	AXP288_IRQ_GPADC = 26,
+	AXP288_IRQ_OT = 31,
+	AXP288_IRQ_GPIO0 = 32,
+	AXP288_IRQ_GPIO1 = 33,
+	AXP288_IRQ_POKO = 34,
+	AXP288_IRQ_POKL = 35,
+	AXP288_IRQ_POKS = 36,
+	AXP288_IRQ_POKN = 37,
+	AXP288_IRQ_POKP = 38,
+	AXP288_IRQ_TIMER = 39,
+	AXP288_IRQ_MV_CHNG = 40,
+	AXP288_IRQ_BC_USB_CHNG = 41,
+};
+
+enum axp803_irqs {
+	AXP803_IRQ_ACIN_OVER_V = 1,
+	AXP803_IRQ_ACIN_PLUGIN = 2,
+	AXP803_IRQ_ACIN_REMOVAL = 3,
+	AXP803_IRQ_VBUS_OVER_V = 4,
+	AXP803_IRQ_VBUS_PLUGIN = 5,
+	AXP803_IRQ_VBUS_REMOVAL = 6,
+	AXP803_IRQ_BATT_PLUGIN = 7,
+	AXP803_IRQ_BATT_REMOVAL = 8,
+	AXP803_IRQ_BATT_ENT_ACT_MODE = 9,
+	AXP803_IRQ_BATT_EXIT_ACT_MODE = 10,
+	AXP803_IRQ_CHARG = 11,
+	AXP803_IRQ_CHARG_DONE = 12,
+	AXP803_IRQ_BATT_CHG_TEMP_HIGH = 13,
+	AXP803_IRQ_BATT_CHG_TEMP_HIGH_END = 14,
+	AXP803_IRQ_BATT_CHG_TEMP_LOW = 15,
+	AXP803_IRQ_BATT_CHG_TEMP_LOW_END = 16,
+	AXP803_IRQ_BATT_ACT_TEMP_HIGH = 17,
+	AXP803_IRQ_BATT_ACT_TEMP_HIGH_END = 18,
+	AXP803_IRQ_BATT_ACT_TEMP_LOW = 19,
+	AXP803_IRQ_BATT_ACT_TEMP_LOW_END = 20,
+	AXP803_IRQ_DIE_TEMP_HIGH = 21,
+	AXP803_IRQ_GPADC = 22,
+	AXP803_IRQ_LOW_PWR_LVL1 = 23,
+	AXP803_IRQ_LOW_PWR_LVL2 = 24,
+	AXP803_IRQ_TIMER = 25,
+	AXP803_IRQ_PEK_RIS_EDGE = 26,
+	AXP803_IRQ_PEK_FAL_EDGE = 27,
+	AXP803_IRQ_PEK_SHORT = 28,
+	AXP803_IRQ_PEK_LONG = 29,
+	AXP803_IRQ_PEK_OVER_OFF = 30,
+	AXP803_IRQ_GPIO1_INPUT = 31,
+	AXP803_IRQ_GPIO0_INPUT = 32,
+	AXP803_IRQ_BC_USB_CHNG = 33,
+	AXP803_IRQ_MV_CHNG = 34,
+};
+
+enum axp806_irqs {
+	AXP806_IRQ_DIE_TEMP_HIGH_LV1 = 0,
+	AXP806_IRQ_DIE_TEMP_HIGH_LV2 = 1,
+	AXP806_IRQ_DCDCA_V_LOW = 2,
+	AXP806_IRQ_DCDCB_V_LOW = 3,
+	AXP806_IRQ_DCDCC_V_LOW = 4,
+	AXP806_IRQ_DCDCD_V_LOW = 5,
+	AXP806_IRQ_DCDCE_V_LOW = 6,
+	AXP806_IRQ_POK_LONG = 7,
+	AXP806_IRQ_POK_SHORT = 8,
+	AXP806_IRQ_WAKEUP = 9,
+	AXP806_IRQ_POK_FALL = 10,
+	AXP806_IRQ_POK_RISE = 11,
+};
+
+enum axp809_irqs {
+	AXP809_IRQ_ACIN_OVER_V = 1,
+	AXP809_IRQ_ACIN_PLUGIN = 2,
+	AXP809_IRQ_ACIN_REMOVAL = 3,
+	AXP809_IRQ_VBUS_OVER_V = 4,
+	AXP809_IRQ_VBUS_PLUGIN = 5,
+	AXP809_IRQ_VBUS_REMOVAL = 6,
+	AXP809_IRQ_VBUS_V_LOW = 7,
+	AXP809_IRQ_BATT_PLUGIN = 8,
+	AXP809_IRQ_BATT_REMOVAL = 9,
+	AXP809_IRQ_BATT_ENT_ACT_MODE = 10,
+	AXP809_IRQ_BATT_EXIT_ACT_MODE = 11,
+	AXP809_IRQ_CHARG = 12,
+	AXP809_IRQ_CHARG_DONE = 13,
+	AXP809_IRQ_BATT_CHG_TEMP_HIGH = 14,
+	AXP809_IRQ_BATT_CHG_TEMP_HIGH_END = 15,
+	AXP809_IRQ_BATT_CHG_TEMP_LOW = 16,
+	AXP809_IRQ_BATT_CHG_TEMP_LOW_END = 17,
+	AXP809_IRQ_BATT_ACT_TEMP_HIGH = 18,
+	AXP809_IRQ_BATT_ACT_TEMP_HIGH_END = 19,
+	AXP809_IRQ_BATT_ACT_TEMP_LOW = 20,
+	AXP809_IRQ_BATT_ACT_TEMP_LOW_END = 21,
+	AXP809_IRQ_DIE_TEMP_HIGH = 22,
+	AXP809_IRQ_LOW_PWR_LVL1 = 23,
+	AXP809_IRQ_LOW_PWR_LVL2 = 24,
+	AXP809_IRQ_TIMER = 25,
+	AXP809_IRQ_PEK_RIS_EDGE = 26,
+	AXP809_IRQ_PEK_FAL_EDGE = 27,
+	AXP809_IRQ_PEK_SHORT = 28,
+	AXP809_IRQ_PEK_LONG = 29,
+	AXP809_IRQ_PEK_OVER_OFF = 30,
+	AXP809_IRQ_GPIO1_INPUT = 31,
+	AXP809_IRQ_GPIO0_INPUT = 32,
+};
+
+struct dax_device {
+	struct inode inode;
+	struct cdev cdev;
+	void *private;
+	long unsigned int flags;
+	const struct dax_operations *ops;
+	void *holder_data;
+	const struct dax_holder_operations *holder_ops;
+};
+
+enum dax_device_flags {
+	DAXDEV_ALIVE = 0,
+	DAXDEV_WRITE_CACHE = 1,
+	DAXDEV_SYNC = 2,
+	DAXDEV_NOCACHE = 3,
+	DAXDEV_NOMC = 4,
+};
+
+struct dma_buf_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf *, struct dma_buf_stats_attribute *, char *);
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct ata_internal {
+	struct scsi_transport_template t;
+	struct device_attribute private_port_attrs[3];
+	struct device_attribute private_link_attrs[3];
+	struct device_attribute private_dev_attrs[9];
+	struct transport_container link_attr_cont;
+	struct transport_container dev_attr_cont;
+	struct device_attribute *link_attrs[4];
+	struct device_attribute *port_attrs[4];
+	struct device_attribute *dev_attrs[10];
+};
+
+struct ata_show_ering_arg {
+	char *buf;
+	int written;
+};
+
+struct spi_mem_driver {
+	struct spi_driver spidrv;
+	int (*probe)(struct spi_mem *);
+	int (*remove)(struct spi_mem *);
+	void (*shutdown)(struct spi_mem *);
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+struct sfp;
+
+struct sfp_socket_ops;
+
+struct sfp_quirk;
+
+struct sfp_bus {
+	struct kref kref;
+	struct list_head node;
+	struct fwnode_handle *fwnode;
+	const struct sfp_socket_ops *socket_ops;
+	struct device *sfp_dev;
+	struct sfp *sfp;
+	const struct sfp_quirk *sfp_quirk;
+	const struct sfp_upstream_ops *upstream_ops;
+	void *upstream;
+	struct phy_device *phydev;
+	bool registered;
+	bool started;
+};
+
+enum {
+	SFF8024_ID_UNK = 0,
+	SFF8024_ID_SFF_8472 = 2,
+	SFF8024_ID_SFP = 3,
+	SFF8024_ID_DWDM_SFP = 11,
+	SFF8024_ID_QSFP_8438 = 12,
+	SFF8024_ID_QSFP_8436_8636 = 13,
+	SFF8024_ID_QSFP28_8636 = 17,
+	SFF8024_ENCODING_UNSPEC = 0,
+	SFF8024_ENCODING_8B10B = 1,
+	SFF8024_ENCODING_4B5B = 2,
+	SFF8024_ENCODING_NRZ = 3,
+	SFF8024_ENCODING_8472_MANCHESTER = 4,
+	SFF8024_ENCODING_8472_SONET = 5,
+	SFF8024_ENCODING_8472_64B66B = 6,
+	SFF8024_ENCODING_8436_MANCHESTER = 6,
+	SFF8024_ENCODING_8436_SONET = 4,
+	SFF8024_ENCODING_8436_64B66B = 5,
+	SFF8024_ENCODING_256B257B = 7,
+	SFF8024_ENCODING_PAM4 = 8,
+	SFF8024_CONNECTOR_UNSPEC = 0,
+	SFF8024_CONNECTOR_SC = 1,
+	SFF8024_CONNECTOR_FIBERJACK = 6,
+	SFF8024_CONNECTOR_LC = 7,
+	SFF8024_CONNECTOR_MT_RJ = 8,
+	SFF8024_CONNECTOR_MU = 9,
+	SFF8024_CONNECTOR_SG = 10,
+	SFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,
+	SFF8024_CONNECTOR_MPO_1X12 = 12,
+	SFF8024_CONNECTOR_MPO_2X16 = 13,
+	SFF8024_CONNECTOR_HSSDC_II = 32,
+	SFF8024_CONNECTOR_COPPER_PIGTAIL = 33,
+	SFF8024_CONNECTOR_RJ45 = 34,
+	SFF8024_CONNECTOR_NOSEPARATE = 35,
+	SFF8024_CONNECTOR_MXC_2X16 = 36,
+	SFF8024_ECC_UNSPEC = 0,
+	SFF8024_ECC_100G_25GAUI_C2M_AOC = 1,
+	SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,
+	SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,
+	SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,
+	SFF8024_ECC_100GBASE_SR10 = 5,
+	SFF8024_ECC_100GBASE_CR4 = 11,
+	SFF8024_ECC_25GBASE_CR_S = 12,
+	SFF8024_ECC_25GBASE_CR_N = 13,
+	SFF8024_ECC_10GBASE_T_SFI = 22,
+	SFF8024_ECC_10GBASE_T_SR = 28,
+	SFF8024_ECC_5GBASE_T = 29,
+	SFF8024_ECC_2_5GBASE_T = 30,
+};
+
+struct sfp_socket_ops {
+	void (*attach)(struct sfp *);
+	void (*detach)(struct sfp *);
+	void (*start)(struct sfp *);
+	void (*stop)(struct sfp *);
+	int (*module_info)(struct sfp *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);
+	int (*module_eeprom_by_page)(struct sfp *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+};
+
+struct sfp_quirk {
+	const char *vendor;
+	const char *part;
+	void (*modes)(const struct sfp_eeprom_id *, long unsigned int *);
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usb_otg_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bmAttributes;
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+struct usb_phy_roothub {
+	struct phy *phy;
+	struct list_head list;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct debug_buffer {
+	ssize_t (*fill_func)(struct debug_buffer *);
+	struct usb_bus *bus;
+	struct mutex mutex;
+	size_t count;
+	char *output_buf;
+	size_t alloc_size;
+};
+
+struct input_led {
+	struct led_classdev cdev;
+	struct input_handle *handle;
+	unsigned int code;
+};
+
+struct input_leds {
+	struct input_handle handle;
+	unsigned int num_leds;
+	struct input_led leds[0];
+};
+
+typedef u64 (*btf_bpf_rc_repeat)(u32 *);
+
+typedef u64 (*btf_bpf_rc_keydown)(u32 *, u32, u64, u32);
+
+typedef u64 (*btf_bpf_rc_pointer_rel)(u32 *, s32, s32);
+
+struct trace_event_raw_thermal_temperature {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int temp_prev;
+	int temp;
+	char __data[0];
+};
+
+struct trace_event_raw_cdev_update {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	long unsigned int target;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_zone_trip {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int trip;
+	enum thermal_trip_type trip_type;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_get_power_simple {
+	struct trace_entry ent;
+	int cpu;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_limit {
+	struct trace_entry ent;
+	u32 __data_loc_cpumask;
+	unsigned int freq;
+	long unsigned int cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_get_power {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	long unsigned int freq;
+	u32 busy_time;
+	u32 total_time;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_limit {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned int freq;
+	long unsigned int cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_temperature {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_cdev_update {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_zone_trip {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_thermal_power_cpu_get_power_simple {};
+
+struct trace_event_data_offsets_thermal_power_cpu_limit {
+	u32 cpumask;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_get_power {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_limit {
+	u32 type;
+};
+
+typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
+
+typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);
+
+typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
+
+typedef void (*btf_trace_thermal_power_cpu_get_power_simple)(void *, int, u32);
+
+typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, long unsigned int, u32);
+
+typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, long unsigned int, u32);
+
+typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, long unsigned int, long unsigned int, u32);
+
+struct cs_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int down_skip;
+	unsigned int requested_freq;
+};
+
+struct cs_dbs_tuners {
+	unsigned int down_threshold;
+	unsigned int freq_step;
+};
+
+struct tegra124_cpufreq_priv {
+	struct clk *cpu_clk;
+	struct clk *pllp_clk;
+	struct clk *pllx_clk;
+	struct clk *dfll_clk;
+	struct platform_device *cpufreq_dt_pdev;
+};
+
+struct ti_sci_msg_hdr {
+	u16 type;
+	u8 host;
+	u8 seq;
+	u32 flags;
+};
+
+struct ti_sci_msg_resp_version {
+	struct ti_sci_msg_hdr hdr;
+	char firmware_description[32];
+	u16 firmware_revision;
+	u8 abi_major;
+	u8 abi_minor;
+};
+
+struct ti_sci_msg_req_reboot {
+	struct ti_sci_msg_hdr hdr;
+};
+
+struct ti_sci_msg_req_set_device_state {
+	struct ti_sci_msg_hdr hdr;
+	u32 id;
+	u32 reserved;
+	u8 state;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_device_state {
+	struct ti_sci_msg_hdr hdr;
+	u32 id;
+};
+
+struct ti_sci_msg_resp_get_device_state {
+	struct ti_sci_msg_hdr hdr;
+	u32 context_loss_count;
+	u32 resets;
+	u8 programmed_state;
+	u8 current_state;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_set_device_resets {
+	struct ti_sci_msg_hdr hdr;
+	u32 id;
+	u32 resets;
+};
+
+struct ti_sci_msg_req_set_clock_state {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u8 request_state;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_clock_state {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_get_clock_state {
+	struct ti_sci_msg_hdr hdr;
+	u8 programmed_state;
+	u8 current_state;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_set_clock_parent {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u8 parent_id;
+	u32 clk_id_32;
+	u32 parent_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_clock_parent {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_get_clock_parent {
+	struct ti_sci_msg_hdr hdr;
+	u8 parent_id;
+	u32 parent_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_clock_num_parents {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_get_clock_num_parents {
+	struct ti_sci_msg_hdr hdr;
+	u8 num_parents;
+	u32 num_parents_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_query_clock_freq {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u64 min_freq_hz;
+	u64 target_freq_hz;
+	u64 max_freq_hz;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_query_clock_freq {
+	struct ti_sci_msg_hdr hdr;
+	u64 freq_hz;
+};
+
+struct ti_sci_msg_req_set_clock_freq {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u64 min_freq_hz;
+	u64 target_freq_hz;
+	u64 max_freq_hz;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_clock_freq {
+	struct ti_sci_msg_hdr hdr;
+	u32 dev_id;
+	u8 clk_id;
+	u32 clk_id_32;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_get_clock_freq {
+	struct ti_sci_msg_hdr hdr;
+	u64 freq_hz;
+};
+
+struct ti_sci_msg_req_get_resource_range {
+	struct ti_sci_msg_hdr hdr;
+	u16 type;
+	u8 subtype;
+	u8 secondary_host;
+};
+
+struct ti_sci_msg_resp_get_resource_range {
+	struct ti_sci_msg_hdr hdr;
+	u16 range_start;
+	u16 range_num;
+	u16 range_start_sec;
+	u16 range_num_sec;
+};
+
+struct ti_sci_msg_req_manage_irq {
+	struct ti_sci_msg_hdr hdr;
+	u32 valid_params;
+	u16 src_id;
+	u16 src_index;
+	u16 dst_id;
+	u16 dst_host_irq;
+	u16 ia_id;
+	u16 vint;
+	u16 global_event;
+	u8 vint_status_bit;
+	u8 secondary_host;
+};
+
+struct ti_sci_msg_rm_ring_cfg_req {
+	struct ti_sci_msg_hdr hdr;
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u32 addr_lo;
+	u32 addr_hi;
+	u32 count;
+	u8 mode;
+	u8 size;
+	u8 order_id;
+	u16 virtid;
+	u8 asel;
+} __attribute__((packed));
+
+struct ti_sci_msg_psil_pair {
+	struct ti_sci_msg_hdr hdr;
+	u32 nav_id;
+	u32 src_thread;
+	u32 dst_thread;
+};
+
+struct ti_sci_msg_psil_unpair {
+	struct ti_sci_msg_hdr hdr;
+	u32 nav_id;
+	u32 src_thread;
+	u32 dst_thread;
+};
+
+struct ti_sci_msg_rm_udmap_tx_ch_cfg_req {
+	struct ti_sci_msg_hdr hdr;
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u8 tx_pause_on_err;
+	u8 tx_filt_einfo;
+	u8 tx_filt_pswords;
+	u8 tx_atype;
+	u8 tx_chan_type;
+	u8 tx_supr_tdpkt;
+	u16 tx_fetch_size;
+	u8 tx_credit_count;
+	u16 txcq_qnum;
+	u8 tx_priority;
+	u8 tx_qos;
+	u8 tx_orderid;
+	u16 fdepth;
+	u8 tx_sched_priority;
+	u8 tx_burst_size;
+	u8 tx_tdtype;
+	u8 extended_ch_type;
+} __attribute__((packed));
+
+struct ti_sci_msg_rm_udmap_rx_ch_cfg_req {
+	struct ti_sci_msg_hdr hdr;
+	u32 valid_params;
+	u16 nav_id;
+	u16 index;
+	u16 rx_fetch_size;
+	u16 rxcq_qnum;
+	u8 rx_priority;
+	u8 rx_qos;
+	u8 rx_orderid;
+	u8 rx_sched_priority;
+	u16 flowid_start;
+	u16 flowid_cnt;
+	u8 rx_pause_on_err;
+	u8 rx_atype;
+	u8 rx_chan_type;
+	u8 rx_ignore_short;
+	u8 rx_ignore_long;
+	u8 rx_burst_size;
+} __attribute__((packed));
+
+struct ti_sci_msg_rm_udmap_flow_cfg_req {
+	struct ti_sci_msg_hdr hdr;
+	u32 valid_params;
+	u16 nav_id;
+	u16 flow_index;
+	u8 rx_einfo_present;
+	u8 rx_psinfo_present;
+	u8 rx_error_handling;
+	u8 rx_desc_type;
+	u16 rx_sop_offset;
+	u16 rx_dest_qnum;
+	u8 rx_src_tag_hi;
+	u8 rx_src_tag_lo;
+	u8 rx_dest_tag_hi;
+	u8 rx_dest_tag_lo;
+	u8 rx_src_tag_hi_sel;
+	u8 rx_src_tag_lo_sel;
+	u8 rx_dest_tag_hi_sel;
+	u8 rx_dest_tag_lo_sel;
+	u16 rx_fdq0_sz0_qnum;
+	u16 rx_fdq1_qnum;
+	u16 rx_fdq2_qnum;
+	u16 rx_fdq3_qnum;
+	u8 rx_ps_location;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_proc_request {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_proc_release {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_proc_handover {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+	u8 host_id;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_set_config {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+	u32 bootvector_low;
+	u32 bootvector_high;
+	u32 config_flags_set;
+	u32 config_flags_clear;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_set_ctrl {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+	u32 control_flags_set;
+	u32 control_flags_clear;
+} __attribute__((packed));
+
+struct ti_sci_msg_req_get_status {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+} __attribute__((packed));
+
+struct ti_sci_msg_resp_get_status {
+	struct ti_sci_msg_hdr hdr;
+	u8 processor_id;
+	u32 bootvector_low;
+	u32 bootvector_high;
+	u32 config_flags;
+	u32 control_flags;
+	u32 status_flags;
+} __attribute__((packed));
+
+struct ti_sci_xfer {
+	struct ti_msgmgr_message tx_message;
+	u8 rx_len;
+	u8 *xfer_buf;
+	struct completion done;
+};
+
+struct ti_sci_xfers_info {
+	struct semaphore sem_xfer_count;
+	struct ti_sci_xfer *xfer_block;
+	long unsigned int *xfer_alloc_table;
+	spinlock_t xfer_lock;
+};
+
+struct ti_sci_desc {
+	u8 default_host_id;
+	int max_rx_timeout_ms;
+	int max_msgs;
+	int max_msg_size;
+};
+
+struct ti_sci_info {
+	struct device *dev;
+	struct notifier_block nb;
+	const struct ti_sci_desc *desc;
+	struct dentry *d;
+	void *debug_region;
+	char *debug_buffer;
+	size_t debug_region_size;
+	struct ti_sci_handle handle;
+	struct mbox_client cl;
+	struct mbox_chan *chan_tx;
+	struct mbox_chan *chan_rx;
+	struct ti_sci_xfers_info minfo;
+	struct list_head node;
+	u8 host_id;
+	int users;
+	bool is_suspending;
+};
+
+struct scmi_sensor_reading {
+	long long int value;
+	long long unsigned int timestamp;
+};
+
+struct scmi_range_attrs {
+	long long int min_range;
+	long long int max_range;
+};
+
+struct scmi_sensor_axis_info {
+	unsigned int id;
+	unsigned int type;
+	int scale;
+	char name[64];
+	bool extended_attrs;
+	unsigned int resolution;
+	int exponent;
+	struct scmi_range_attrs attrs;
+};
+
+struct scmi_sensor_intervals_info {
+	bool segmented;
+	unsigned int count;
+	unsigned int *desc;
+	unsigned int prealloc_pool[16];
+};
+
+struct scmi_sensor_info {
+	unsigned int id;
+	unsigned int type;
+	int scale;
+	unsigned int num_trip_points;
+	bool async;
+	bool update;
+	bool timestamped;
+	int tstamp_scale;
+	unsigned int num_axis;
+	struct scmi_sensor_axis_info *axis;
+	struct scmi_sensor_intervals_info intervals;
+	unsigned int sensor_config;
+	char name[64];
+	bool extended_scalar_attrs;
+	unsigned int sensor_power;
+	unsigned int resolution;
+	int exponent;
+	struct scmi_range_attrs scalar_attrs;
+};
+
+struct scmi_sensor_proto_ops {
+	int (*count_get)(const struct scmi_protocol_handle *);
+	const struct scmi_sensor_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*trip_point_config)(const struct scmi_protocol_handle *, u32, u8, u64);
+	int (*reading_get)(const struct scmi_protocol_handle *, u32, u64 *);
+	int (*reading_get_timestamped)(const struct scmi_protocol_handle *, u32, u8, struct scmi_sensor_reading *);
+	int (*config_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*config_set)(const struct scmi_protocol_handle *, u32, u32);
+};
+
+struct scmi_sensor_trip_point_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int sensor_id;
+	unsigned int trip_point_desc;
+};
+
+struct scmi_sensor_update_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int sensor_id;
+	unsigned int readings_count;
+	struct scmi_sensor_reading readings[0];
+};
+
+enum scmi_sensor_protocol_cmd {
+	SENSOR_DESCRIPTION_GET = 3,
+	SENSOR_TRIP_POINT_NOTIFY = 4,
+	SENSOR_TRIP_POINT_CONFIG = 5,
+	SENSOR_READING_GET = 6,
+	SENSOR_AXIS_DESCRIPTION_GET = 7,
+	SENSOR_LIST_UPDATE_INTERVALS = 8,
+	SENSOR_CONFIG_GET = 9,
+	SENSOR_CONFIG_SET = 10,
+	SENSOR_CONTINUOUS_UPDATE_NOTIFY = 11,
+	SENSOR_NAME_GET = 12,
+	SENSOR_AXIS_NAME_GET = 13,
+};
+
+struct scmi_msg_resp_sensor_attributes {
+	__le16 num_sensors;
+	u8 max_requests;
+	u8 reserved;
+	__le32 reg_addr_low;
+	__le32 reg_addr_high;
+	__le32 reg_size;
+};
+
+struct scmi_msg_resp_attrs {
+	__le32 min_range_low;
+	__le32 min_range_high;
+	__le32 max_range_low;
+	__le32 max_range_high;
+};
+
+struct scmi_msg_sensor_description {
+	__le32 desc_index;
+};
+
+struct scmi_sensor_descriptor {
+	__le32 id;
+	__le32 attributes_low;
+	__le32 attributes_high;
+	u8 name[16];
+	__le32 power;
+	__le32 resolution;
+	struct scmi_msg_resp_attrs scalar_attrs;
+};
+
+struct scmi_msg_resp_sensor_description {
+	__le16 num_returned;
+	__le16 num_remaining;
+	struct scmi_sensor_descriptor desc[0];
+};
+
+struct scmi_msg_sensor_axis_description_get {
+	__le32 id;
+	__le32 axis_desc_index;
+};
+
+struct scmi_axis_descriptor {
+	__le32 id;
+	__le32 attributes_low;
+	__le32 attributes_high;
+	u8 name[16];
+	__le32 resolution;
+	struct scmi_msg_resp_attrs attrs;
+};
+
+struct scmi_msg_resp_sensor_axis_description {
+	__le32 num_axis_flags;
+	struct scmi_axis_descriptor desc[0];
+};
+
+struct scmi_sensor_axis_name_descriptor {
+	__le32 axis_id;
+	u8 name[64];
+};
+
+struct scmi_msg_resp_sensor_axis_names_description {
+	__le32 num_axis_flags;
+	struct scmi_sensor_axis_name_descriptor desc[0];
+};
+
+struct scmi_msg_sensor_list_update_intervals {
+	__le32 id;
+	__le32 index;
+};
+
+struct scmi_msg_resp_sensor_list_update_intervals {
+	__le32 num_intervals_flags;
+	__le32 intervals[0];
+};
+
+struct scmi_msg_sensor_request_notify {
+	__le32 id;
+	__le32 event_control;
+};
+
+struct scmi_msg_set_sensor_trip_point {
+	__le32 id;
+	__le32 event_control;
+	__le32 value_low;
+	__le32 value_high;
+};
+
+struct scmi_msg_sensor_config_set {
+	__le32 id;
+	__le32 sensor_config;
+};
+
+struct scmi_msg_sensor_reading_get {
+	__le32 id;
+	__le32 flags;
+};
+
+struct scmi_resp_sensor_reading_complete {
+	__le32 id;
+	__le32 readings_low;
+	__le32 readings_high;
+};
+
+struct scmi_sensor_reading_resp {
+	__le32 sensor_value_low;
+	__le32 sensor_value_high;
+	__le32 timestamp_low;
+	__le32 timestamp_high;
+};
+
+struct scmi_resp_sensor_reading_complete_v3 {
+	__le32 id;
+	struct scmi_sensor_reading_resp readings[0];
+};
+
+struct scmi_sensor_trip_notify_payld {
+	__le32 agent_id;
+	__le32 sensor_id;
+	__le32 trip_point_desc;
+};
+
+struct scmi_sensor_update_notify_payld {
+	__le32 agent_id;
+	__le32 sensor_id;
+	struct scmi_sensor_reading_resp readings[0];
+};
+
+struct sensors_info {
+	u32 version;
+	int num_sensors;
+	int max_requests;
+	u64 reg_addr;
+	u32 reg_size;
+	struct scmi_sensor_info *sensors;
+};
+
+struct scmi_sens_ipriv {
+	void *priv;
+	struct device *dev;
+};
+
+struct scmi_apriv {
+	bool any_axes_support_extended_names;
+	struct scmi_sensor_info *s;
+};
+
+struct bmp_header {
+	u16 id;
+	u32 size;
+} __attribute__((packed));
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+typedef struct {
+	efi_guid_t guid;
+	long unsigned int *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+struct efi_error_code {
+	efi_status_t status;
+	int errno;
+	const char *description;
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+};
+
+struct efi_runtime_work {
+	void *arg1;
+	void *arg2;
+	void *arg3;
+	void *arg4;
+	void *arg5;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+};
+
+struct pidff_usage {
+	struct hid_field *field;
+	s32 *value;
+};
+
+struct pidff_device {
+	struct hid_device *hid;
+	struct hid_report *reports[13];
+	struct pidff_usage set_effect[7];
+	struct pidff_usage set_envelope[5];
+	struct pidff_usage set_condition[8];
+	struct pidff_usage set_periodic[5];
+	struct pidff_usage set_constant[2];
+	struct pidff_usage set_ramp[3];
+	struct pidff_usage device_gain[1];
+	struct pidff_usage block_load[2];
+	struct pidff_usage pool[3];
+	struct pidff_usage effect_operation[2];
+	struct pidff_usage block_free[1];
+	struct hid_field *create_new_effect_type;
+	struct hid_field *set_effect_type;
+	struct hid_field *effect_direction;
+	struct hid_field *device_control;
+	struct hid_field *block_load_status;
+	struct hid_field *effect_operation_status;
+	int control_id[2];
+	int type_id[11];
+	int status_id[2];
+	int operation_id[2];
+	int pid_id[64];
+};
+
+struct supplier_bindings {
+	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
+	bool optional;
+	bool node_not_dev;
+};
+
+struct trace_event_raw_cros_ec_request_start {
+	struct trace_entry ent;
+	uint32_t version;
+	uint32_t offset;
+	uint32_t command;
+	uint32_t outsize;
+	uint32_t insize;
+	char __data[0];
+};
+
+struct trace_event_raw_cros_ec_request_done {
+	struct trace_entry ent;
+	uint32_t version;
+	uint32_t offset;
+	uint32_t command;
+	uint32_t outsize;
+	uint32_t insize;
+	uint32_t result;
+	int retval;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cros_ec_request_start {};
+
+struct trace_event_data_offsets_cros_ec_request_done {};
+
+typedef void (*btf_trace_cros_ec_request_start)(void *, struct cros_ec_command *);
+
+typedef void (*btf_trace_cros_ec_request_done)(void *, struct cros_ec_command *, int);
+
+struct fsl_ifc_nand {
+	__be32 ncfgr;
+	u32 res1[4];
+	__be32 nand_fcr0;
+	__be32 nand_fcr1;
+	u32 res2[8];
+	__be32 row0;
+	u32 res3;
+	__be32 col0;
+	u32 res4;
+	__be32 row1;
+	u32 res5;
+	__be32 col1;
+	u32 res6;
+	__be32 row2;
+	u32 res7;
+	__be32 col2;
+	u32 res8;
+	__be32 row3;
+	u32 res9;
+	__be32 col3;
+	u32 res10[36];
+	__be32 nand_fbcr;
+	u32 res11;
+	__be32 nand_fir0;
+	__be32 nand_fir1;
+	__be32 nand_fir2;
+	u32 res12[16];
+	__be32 nand_csel;
+	u32 res13;
+	__be32 nandseq_strt;
+	u32 res14;
+	__be32 nand_evter_stat;
+	u32 res15;
+	__be32 pgrdcmpl_evt_stat;
+	u32 res16[2];
+	__be32 nand_evter_en;
+	u32 res17[2];
+	__be32 nand_evter_intr_en;
+	__be32 nand_vol_addr_stat;
+	u32 res18;
+	__be32 nand_erattr0;
+	__be32 nand_erattr1;
+	u32 res19[16];
+	__be32 nand_fsr;
+	u32 res20;
+	__be32 nand_eccstat[8];
+	u32 res21[28];
+	__be32 nanndcr;
+	u32 res22[2];
+	__be32 nand_autoboot_trgr;
+	u32 res23;
+	__be32 nand_mdr;
+	u32 res24[28];
+	__be32 nand_dll_lowcfg0;
+	__be32 nand_dll_lowcfg1;
+	u32 res25;
+	__be32 nand_dll_lowstat;
+	u32 res26[60];
+};
+
+struct fsl_ifc_nor {
+	__be32 nor_evter_stat;
+	u32 res1[2];
+	__be32 nor_evter_en;
+	u32 res2[2];
+	__be32 nor_evter_intr_en;
+	u32 res3[2];
+	__be32 nor_erattr0;
+	__be32 nor_erattr1;
+	__be32 nor_erattr2;
+	u32 res4[4];
+	__be32 norcr;
+	u32 res5[239];
+};
+
+struct fsl_ifc_gpcm {
+	__be32 gpcm_evter_stat;
+	u32 res1[2];
+	__be32 gpcm_evter_en;
+	u32 res2[2];
+	__be32 gpcm_evter_intr_en;
+	u32 res3[2];
+	__be32 gpcm_erattr0;
+	__be32 gpcm_erattr1;
+	__be32 gpcm_erattr2;
+	__be32 gpcm_stat;
+};
+
+struct fsl_ifc_global {
+	__be32 ifc_rev;
+	u32 res1[2];
+	struct {
+		__be32 cspr_ext;
+		__be32 cspr;
+		u32 res2;
+	} cspr_cs[8];
+	u32 res3[13];
+	struct {
+		__be32 amask;
+		u32 res4[2];
+	} amask_cs[8];
+	u32 res5[12];
+	struct {
+		__be32 csor;
+		__be32 csor_ext;
+		u32 res6;
+	} csor_cs[8];
+	u32 res7[12];
+	struct {
+		__be32 ftim[4];
+		u32 res8[8];
+	} ftim_cs[8];
+	u32 res9[48];
+	__be32 rb_stat;
+	__be32 rb_map;
+	__be32 wb_map;
+	__be32 ifc_gcr;
+	u32 res10[2];
+	__be32 cm_evter_stat;
+	u32 res11[2];
+	__be32 cm_evter_en;
+	u32 res12[2];
+	__be32 cm_evter_intr_en;
+	u32 res13[2];
+	__be32 cm_erattr0;
+	__be32 cm_erattr1;
+	u32 res14[2];
+	__be32 ifc_ccr;
+	__be32 ifc_csr;
+	__be32 ddr_ccr_low;
+};
+
+struct fsl_ifc_runtime {
+	struct fsl_ifc_nand ifc_nand;
+	struct fsl_ifc_nor ifc_nor;
+	struct fsl_ifc_gpcm ifc_gpcm;
+};
+
+struct fsl_ifc_ctrl {
+	struct device *dev;
+	struct fsl_ifc_global *gregs;
+	struct fsl_ifc_runtime *rregs;
+	int irq;
+	int nand_irq;
+	spinlock_t lock;
+	void *nand;
+	int version;
+	int banks;
+	u32 nand_stat;
+	wait_queue_head_t nand_wait;
+	bool little_endian;
+};
+
+struct arm_ccn_component {
+	void *base;
+	u32 type;
+	long unsigned int pmu_events_mask[1];
+	union {
+		struct {
+			long unsigned int dt_cmp_mask[1];
+		} xp;
+	};
+};
+
+struct arm_ccn_dt {
+	int id;
+	void *base;
+	spinlock_t config_lock;
+	long unsigned int pmu_counters_mask[1];
+	struct {
+		struct arm_ccn_component *source;
+		struct perf_event *event;
+	} pmu_counters[9];
+	struct {
+		u64 l;
+		u64 h;
+	} cmp_mask[12];
+	struct hrtimer hrtimer;
+	unsigned int cpu;
+	struct hlist_node node;
+	struct pmu pmu;
+};
+
+struct arm_ccn {
+	struct device *dev;
+	void *base;
+	unsigned int irq;
+	unsigned int sbas_present: 1;
+	unsigned int sbsx_present: 1;
+	int num_nodes;
+	struct arm_ccn_component *node;
+	int num_xps;
+	struct arm_ccn_component *xp;
+	struct arm_ccn_dt dt;
+	int mn_id;
+};
+
+struct arm_ccn_pmu_event {
+	struct device_attribute attr;
+	u32 type;
+	u32 event;
+	int num_ports;
+	int num_vcs;
+	const char *def;
+	int mask;
+};
+
+enum m1_pmu_events {
+	M1_PMU_PERFCTR_UNKNOWN_01 = 1,
+	M1_PMU_PERFCTR_CPU_CYCLES = 2,
+	M1_PMU_PERFCTR_INSTRUCTIONS = 140,
+	M1_PMU_PERFCTR_UNKNOWN_8d = 141,
+	M1_PMU_PERFCTR_UNKNOWN_8e = 142,
+	M1_PMU_PERFCTR_UNKNOWN_8f = 143,
+	M1_PMU_PERFCTR_UNKNOWN_90 = 144,
+	M1_PMU_PERFCTR_UNKNOWN_93 = 147,
+	M1_PMU_PERFCTR_UNKNOWN_94 = 148,
+	M1_PMU_PERFCTR_UNKNOWN_95 = 149,
+	M1_PMU_PERFCTR_UNKNOWN_96 = 150,
+	M1_PMU_PERFCTR_UNKNOWN_97 = 151,
+	M1_PMU_PERFCTR_UNKNOWN_98 = 152,
+	M1_PMU_PERFCTR_UNKNOWN_99 = 153,
+	M1_PMU_PERFCTR_UNKNOWN_9a = 154,
+	M1_PMU_PERFCTR_UNKNOWN_9b = 155,
+	M1_PMU_PERFCTR_UNKNOWN_9c = 156,
+	M1_PMU_PERFCTR_UNKNOWN_9f = 159,
+	M1_PMU_PERFCTR_UNKNOWN_bf = 191,
+	M1_PMU_PERFCTR_UNKNOWN_c0 = 192,
+	M1_PMU_PERFCTR_UNKNOWN_c1 = 193,
+	M1_PMU_PERFCTR_UNKNOWN_c4 = 196,
+	M1_PMU_PERFCTR_UNKNOWN_c5 = 197,
+	M1_PMU_PERFCTR_UNKNOWN_c6 = 198,
+	M1_PMU_PERFCTR_UNKNOWN_c8 = 200,
+	M1_PMU_PERFCTR_UNKNOWN_ca = 202,
+	M1_PMU_PERFCTR_UNKNOWN_cb = 203,
+	M1_PMU_PERFCTR_UNKNOWN_f5 = 245,
+	M1_PMU_PERFCTR_UNKNOWN_f6 = 246,
+	M1_PMU_PERFCTR_UNKNOWN_f7 = 247,
+	M1_PMU_PERFCTR_UNKNOWN_f8 = 248,
+	M1_PMU_PERFCTR_UNKNOWN_fd = 253,
+	M1_PMU_PERFCTR_LAST = 255,
+	M1_PMU_CFG_COUNT_USER = 256,
+	M1_PMU_CFG_COUNT_KERNEL = 512,
+};
+
+struct tb_cap_extended_long {
+	u8 zero1;
+	u8 cap;
+	u8 vsec_id;
+	u8 zero2;
+	u16 next;
+	u16 length;
+};
+
+struct tb_cap_any {
+	union {
+		struct tb_cap_basic basic;
+		struct tb_cap_extended_short extended_short;
+		struct tb_cap_extended_long extended_long;
+	};
+};
+
+struct icc_bulk_data {
+	struct icc_path *path;
+	const char *name;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_bulk_devres {
+	struct icc_bulk_data *paths;
+	int num_paths;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+enum {
+	IF_LINK_MODE_DEFAULT = 0,
+	IF_LINK_MODE_DORMANT = 1,
+	IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+	LW_URGENT = 0,
+};
+
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
+};
+
+enum devlink_eswitch_mode {
+	DEVLINK_ESWITCH_MODE_LEGACY = 0,
+	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
+};
+
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
+enum {
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
+};
+
+enum {
+	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
+	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
+	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
+	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
+};
+
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
+};
+
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
+};
+
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
+};
+
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	__DEVLINK_ATTR_MAX = 177,
+	DEVLINK_ATTR_MAX = 176,
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+enum devlink_dpipe_field_ethernet_id {
+	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
+};
+
+enum devlink_dpipe_field_ipv4_id {
+	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
+};
+
+enum devlink_dpipe_field_ipv6_id {
+	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
+};
+
+enum devlink_dpipe_header_id {
+	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
+	DEVLINK_DPIPE_HEADER_IPV4 = 1,
+	DEVLINK_DPIPE_HEADER_IPV6 = 2,
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 3,
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	refcount_t refcount;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	long unsigned int done;
+	long unsigned int total;
+	long unsigned int timeout;
+};
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	long unsigned int supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	void *priv;
+};
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	struct mutex dump_lock;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+	refcount_t refcount;
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 92,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 91,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
+};
+
+enum {
+	DEVLINK_F_RELOAD = 1,
+};
+
+struct devlink_info_req;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	long unsigned int reload_actions;
+	long unsigned int reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_function_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_function_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *);
+	int (*port_del)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	long unsigned int type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats *stats;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats *stats;
+	void *priv;
+};
+
+enum {
+	TCA_CGROUP_UNSPEC = 0,
+	TCA_CGROUP_ACT = 1,
+	TCA_CGROUP_POLICE = 2,
+	TCA_CGROUP_EMATCHES = 3,
+	__TCA_CGROUP_MAX = 4,
+};
+
+struct cls_cgroup_head {
+	u32 handle;
+	struct tcf_exts exts;
+	struct tcf_ematch_tree ematches;
+	struct tcf_proto *tp;
+	struct rcu_work rwork;
+};
+
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+struct linkmodes_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+	bool peer_empty;
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+struct xt_entry_match {
+	union {
+		struct {
+			__u16 match_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 match_size;
+			struct xt_match *match;
+		} kernel;
+		__u16 match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_entry_target {
+	union {
+		struct {
+			__u16 target_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 target_size;
+			struct xt_target *target;
+		} kernel;
+		__u16 target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_standard_target {
+	struct xt_entry_target target;
+	int verdict;
+};
+
+struct xt_error_target {
+	struct xt_entry_target target;
+	char errorname[30];
+};
+
+struct xt_counters {
+	__u64 pcnt;
+	__u64 bcnt;
+};
+
+struct xt_counters_info {
+	char name[32];
+	unsigned int num_counters;
+	struct xt_counters counters[0];
+};
+
+struct xt_table_info;
+
+struct xt_table {
+	struct list_head list;
+	unsigned int valid_hooks;
+	struct xt_table_info *private;
+	struct nf_hook_ops *ops;
+	struct module *me;
+	u_int8_t af;
+	int priority;
+	const char name[32];
+};
+
+struct xt_table_info {
+	unsigned int size;
+	unsigned int number;
+	unsigned int initial_entries;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int stacksize;
+	void ***jumpstack;
+	unsigned char entries[0];
+};
+
+struct xt_percpu_counter_alloc_state {
+	unsigned int off;
+	const char *mem;
+};
+
+struct compat_xt_entry_match {
+	union {
+		struct {
+			u_int16_t match_size;
+			char name[29];
+			u_int8_t revision;
+		} user;
+		struct {
+			u_int16_t match_size;
+			compat_uptr_t match;
+		} kernel;
+		u_int16_t match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct compat_xt_entry_target {
+	union {
+		struct {
+			u_int16_t target_size;
+			char name[29];
+			u_int8_t revision;
+		} user;
+		struct {
+			u_int16_t target_size;
+			compat_uptr_t target;
+		} kernel;
+		u_int16_t target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct compat_xt_counters {
+	compat_u64 pcnt;
+	compat_u64 bcnt;
+};
+
+struct compat_xt_counters_info {
+	char name[32];
+	compat_uint_t num_counters;
+	struct compat_xt_counters counters[0];
+};
+
+struct xt_template {
+	struct list_head list;
+	int (*table_init)(struct net *);
+	struct module *me;
+	char name[32];
+};
+
+struct xt_pernet {
+	struct list_head tables[13];
+};
+
+struct compat_delta {
+	unsigned int offset;
+	int delta;
+};
+
+struct xt_af {
+	struct mutex mutex;
+	struct list_head match;
+	struct list_head target;
+	struct mutex compat_mutex;
+	struct compat_delta *compat_tab;
+	unsigned int number;
+	unsigned int cur;
+};
+
+struct compat_xt_standard_target {
+	struct compat_xt_entry_target t;
+	compat_uint_t verdict;
+};
+
+struct compat_xt_error_target {
+	struct compat_xt_entry_target t;
+	char errorname[30];
+};
+
+struct nf_mttg_trav {
+	struct list_head *head;
+	struct list_head *curr;
+	uint8_t class;
+};
+
+enum {
+	MTTG_TRAV_INIT = 0,
+	MTTG_TRAV_NFP_UNSPEC = 1,
+	MTTG_TRAV_NFP_SPEC = 2,
+	MTTG_TRAV_DONE = 3,
+};
+
+struct compat_rtentry {
+	u32 rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	u32 rt_pad3;
+	unsigned char rt_tos;
+	unsigned char rt_class;
+	short int rt_pad4;
+	short int rt_metric;
+	compat_uptr_t rt_dev;
+	u32 rt_mtu;
+	u32 rt_window;
+	short unsigned int rt_irtt;
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+struct geneve_opt {
+	__be16 opt_class;
+	u8 type;
+	u8 length: 5;
+	u8 r3: 1;
+	u8 r2: 1;
+	u8 r1: 1;
+	u8 opt_data[0];
+};
+
+struct vxlan_metadata {
+	u32 gbp;
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+typedef short unsigned int vifi_t;
+
+struct vifctl {
+	vifi_t vifc_vifi;
+	unsigned char vifc_flags;
+	unsigned char vifc_threshold;
+	unsigned int vifc_rate_limit;
+	union {
+		struct in_addr vifc_lcl_addr;
+		int vifc_lcl_ifindex;
+	};
+	struct in_addr vifc_rmt_addr;
+};
+
+struct mfcctl {
+	struct in_addr mfcc_origin;
+	struct in_addr mfcc_mcastgrp;
+	vifi_t mfcc_parent;
+	unsigned char mfcc_ttls[32];
+	unsigned int mfcc_pkt_cnt;
+	unsigned int mfcc_byte_cnt;
+	unsigned int mfcc_wrong_if;
+	int mfcc_expire;
+};
+
+struct sioc_sg_req {
+	struct in_addr src;
+	struct in_addr grp;
+	long unsigned int pktcnt;
+	long unsigned int bytecnt;
+	long unsigned int wrong_if;
+};
+
+struct sioc_vif_req {
+	vifi_t vifi;
+	long unsigned int icount;
+	long unsigned int ocount;
+	long unsigned int ibytes;
+	long unsigned int obytes;
+};
+
+struct igmpmsg {
+	__u32 unused1;
+	__u32 unused2;
+	unsigned char im_msgtype;
+	unsigned char im_mbz;
+	unsigned char im_vif;
+	unsigned char im_vif_hi;
+	struct in_addr im_src;
+	struct in_addr im_dst;
+};
+
+enum {
+	IPMRA_TABLE_UNSPEC = 0,
+	IPMRA_TABLE_ID = 1,
+	IPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,
+	IPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,
+	IPMRA_TABLE_MROUTE_DO_ASSERT = 4,
+	IPMRA_TABLE_MROUTE_DO_PIM = 5,
+	IPMRA_TABLE_VIFS = 6,
+	IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,
+	__IPMRA_TABLE_MAX = 8,
+};
+
+enum {
+	IPMRA_VIF_UNSPEC = 0,
+	IPMRA_VIF = 1,
+	__IPMRA_VIF_MAX = 2,
+};
+
+enum {
+	IPMRA_VIFA_UNSPEC = 0,
+	IPMRA_VIFA_IFINDEX = 1,
+	IPMRA_VIFA_VIF_ID = 2,
+	IPMRA_VIFA_FLAGS = 3,
+	IPMRA_VIFA_BYTES_IN = 4,
+	IPMRA_VIFA_BYTES_OUT = 5,
+	IPMRA_VIFA_PACKETS_IN = 6,
+	IPMRA_VIFA_PACKETS_OUT = 7,
+	IPMRA_VIFA_LOCAL_ADDR = 8,
+	IPMRA_VIFA_REMOTE_ADDR = 9,
+	IPMRA_VIFA_PAD = 10,
+	__IPMRA_VIFA_MAX = 11,
+};
+
+enum {
+	IPMRA_CREPORT_UNSPEC = 0,
+	IPMRA_CREPORT_MSGTYPE = 1,
+	IPMRA_CREPORT_VIF_ID = 2,
+	IPMRA_CREPORT_SRC_ADDR = 3,
+	IPMRA_CREPORT_DST_ADDR = 4,
+	IPMRA_CREPORT_PKT = 5,
+	IPMRA_CREPORT_TABLE = 6,
+	__IPMRA_CREPORT_MAX = 7,
+};
+
+struct mfc_cache_cmp_arg {
+	__be32 mfc_mcastgrp;
+	__be32 mfc_origin;
+};
+
+struct mfc_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			__be32 mfc_mcastgrp;
+			__be32 mfc_origin;
+		};
+		struct mfc_cache_cmp_arg cmparg;
+	};
+};
+
+struct ipmr_result {
+	struct mr_table *mrt;
+};
+
+struct compat_sioc_sg_req {
+	struct in_addr src;
+	struct in_addr grp;
+	compat_ulong_t pktcnt;
+	compat_ulong_t bytecnt;
+	compat_ulong_t wrong_if;
+};
+
+struct compat_sioc_vif_req {
+	vifi_t vifi;
+	compat_ulong_t icount;
+	compat_ulong_t ocount;
+	compat_ulong_t ibytes;
+	compat_ulong_t obytes;
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	spinlock_t encrypt_compl_lock;
+	int async_notify;
+	u8 async_capable: 1;
+	long unsigned int tx_bitmask;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+struct xfrm_if;
+
+struct xfrm_if_cb {
+	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
+};
+
+struct xfrm_if_parms {
+	int link;
+	u32 if_id;
+};
+
+struct xfrm_if {
+	struct xfrm_if *next;
+	struct net_device *dev;
+	struct net *net;
+	struct xfrm_if_parms p;
+	struct gro_cells gro_cells;
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_node {
+	struct rb_node node;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
+};
+
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
+};
+
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
+	struct callback_head rcu;
+};
+
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct wpan_phy;
+
+struct wpan_dev_header_ops;
+
+struct wpan_dev {
+	struct wpan_phy *wpan_phy;
+	int iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	const struct wpan_dev_header_ops *header_ops;
+	struct net_device *lowpan_dev;
+	u32 identifier;
+	__le16 pan_id;
+	__le16 short_addr;
+	__le64 extended_addr;
+	atomic_t bsn;
+	atomic_t dsn;
+	u8 min_be;
+	u8 max_be;
+	u8 csma_retries;
+	s8 frame_retries;
+	bool lbt;
+	bool promiscuous_mode;
+	bool ackreq;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	short unsigned int prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_MAX = 58,
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+enum nl802154_cca_modes {
+	__NL802154_CCA_INVALID = 0,
+	NL802154_CCA_ENERGY = 1,
+	NL802154_CCA_CARRIER = 2,
+	NL802154_CCA_ENERGY_CARRIER = 3,
+	NL802154_CCA_ALOHA = 4,
+	NL802154_CCA_UWB_SHR = 5,
+	NL802154_CCA_UWB_MULTIPLEXED = 6,
+	__NL802154_CCA_ATTR_AFTER_LAST = 7,
+	NL802154_CCA_ATTR_MAX = 6,
+};
+
+enum nl802154_cca_opts {
+	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
+	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
+	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
+	NL802154_CCA_OPT_ATTR_MAX = 1,
+};
+
+enum nl802154_supported_bool_states {
+	NL802154_SUPPORTED_BOOL_FALSE = 0,
+	NL802154_SUPPORTED_BOOL_TRUE = 1,
+	__NL802154_SUPPORTED_BOOL_INVALD = 2,
+	NL802154_SUPPORTED_BOOL_BOTH = 3,
+	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
+	NL802154_SUPPORTED_BOOL_MAX = 3,
+};
+
+struct wpan_phy_supported {
+	u32 channels[32];
+	u32 cca_modes;
+	u32 cca_opts;
+	u32 iftypes;
+	enum nl802154_supported_bool_states lbt;
+	u8 min_minbe;
+	u8 max_minbe;
+	u8 min_maxbe;
+	u8 max_maxbe;
+	u8 min_csma_backoffs;
+	u8 max_csma_backoffs;
+	s8 min_frame_retries;
+	s8 max_frame_retries;
+	size_t tx_powers_size;
+	size_t cca_ed_levels_size;
+	const s32 *tx_powers;
+	const s32 *cca_ed_levels;
+};
+
+struct wpan_phy_cca {
+	enum nl802154_cca_modes mode;
+	enum nl802154_cca_opts opt;
+};
+
+struct wpan_phy {
+	const void *privid;
+	u32 flags;
+	u8 current_channel;
+	u8 current_page;
+	struct wpan_phy_supported supported;
+	s32 transmit_power;
+	struct wpan_phy_cca cca;
+	__le64 perm_extended_addr;
+	s32 cca_ed_level;
+	u32 symbol_duration;
+	u16 lifs_period;
+	u16 sifs_period;
+	struct device dev;
+	possible_net_t _net;
+	long: 64;
+	long: 64;
+	char priv[0];
+};
+
+struct ieee802154_addr {
+	u8 mode;
+	__le16 pan_id;
+	union {
+		__le16 short_addr;
+		__le64 extended_addr;
+	};
+};
+
+struct wpan_dev_header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_HOA = 4,
+	IPV6_SADDR_RULE_OIF = 5,
+	IPV6_SADDR_RULE_LABEL = 6,
+	IPV6_SADDR_RULE_PRIVACY = 7,
+	IPV6_SADDR_RULE_ORCHID = 8,
+	IPV6_SADDR_RULE_PREFIX = 9,
+	IPV6_SADDR_RULE_NOT_OPTIMISTIC = 10,
+	IPV6_SADDR_RULE_MAX = 11,
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	long unsigned int scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+enum {
+	SEG6_LOCAL_UNSPEC = 0,
+	SEG6_LOCAL_ACTION = 1,
+	SEG6_LOCAL_SRH = 2,
+	SEG6_LOCAL_TABLE = 3,
+	SEG6_LOCAL_NH4 = 4,
+	SEG6_LOCAL_NH6 = 5,
+	SEG6_LOCAL_IIF = 6,
+	SEG6_LOCAL_OIF = 7,
+	SEG6_LOCAL_BPF = 8,
+	SEG6_LOCAL_VRFTABLE = 9,
+	SEG6_LOCAL_COUNTERS = 10,
+	__SEG6_LOCAL_MAX = 11,
+};
+
+enum {
+	SEG6_LOCAL_BPF_PROG_UNSPEC = 0,
+	SEG6_LOCAL_BPF_PROG = 1,
+	SEG6_LOCAL_BPF_PROG_NAME = 2,
+	__SEG6_LOCAL_BPF_PROG_MAX = 3,
+};
+
+enum {
+	SEG6_LOCAL_CNT_UNSPEC = 0,
+	SEG6_LOCAL_CNT_PAD = 1,
+	SEG6_LOCAL_CNT_PACKETS = 2,
+	SEG6_LOCAL_CNT_BYTES = 3,
+	SEG6_LOCAL_CNT_ERRORS = 4,
+	__SEG6_LOCAL_CNT_MAX = 5,
+};
+
+struct seg6_local_lwt;
+
+struct seg6_local_lwtunnel_ops {
+	int (*build_state)(struct seg6_local_lwt *, const void *, struct netlink_ext_ack *);
+	void (*destroy_state)(struct seg6_local_lwt *);
+};
+
+enum seg6_end_dt_mode {
+	DT_INVALID_MODE = 4294967274,
+	DT_LEGACY_MODE = 0,
+	DT_VRF_MODE = 1,
+};
+
+struct seg6_end_dt_info {
+	enum seg6_end_dt_mode mode;
+	struct net *net;
+	int vrf_ifindex;
+	int vrf_table;
+	u16 family;
+};
+
+struct pcpu_seg6_local_counters;
+
+struct seg6_action_desc;
+
+struct seg6_local_lwt {
+	int action;
+	struct ipv6_sr_hdr *srh;
+	int table;
+	struct in_addr nh4;
+	struct in6_addr nh6;
+	int iif;
+	int oif;
+	struct bpf_lwt_prog bpf;
+	struct seg6_end_dt_info dt_info;
+	struct pcpu_seg6_local_counters *pcpu_counters;
+	int headroom;
+	struct seg6_action_desc *desc;
+	long unsigned int parsed_optattrs;
+};
+
+struct seg6_action_desc {
+	int action;
+	long unsigned int attrs;
+	long unsigned int optattrs;
+	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
+	int static_headroom;
+	struct seg6_local_lwtunnel_ops slwt_ops;
+};
+
+struct pcpu_seg6_local_counters {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	u64_stats_t errors;
+	struct u64_stats_sync syncp;
+};
+
+struct seg6_local_counters {
+	__u64 packets;
+	__u64 bytes;
+	__u64 errors;
+};
+
+struct seg6_action_param {
+	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
+	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
+	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
+	void (*destroy)(struct seg6_local_lwt *);
+};
+
+struct vlan_group {
+	unsigned int nr_vlan_devs;
+	struct hlist_node hlist;
+	struct net_device **vlan_devices_arrays[16];
+};
+
+struct vlan_info {
+	struct net_device *real_dev;
+	struct vlan_group grp;
+	struct list_head vid_list;
+	unsigned int nr_vids;
+	struct callback_head rcu;
+};
+
+enum vlan_flags {
+	VLAN_FLAG_REORDER_HDR = 1,
+	VLAN_FLAG_GVRP = 2,
+	VLAN_FLAG_LOOSE_BINDING = 4,
+	VLAN_FLAG_MVRP = 8,
+	VLAN_FLAG_BRIDGE_BINDING = 16,
+};
+
+struct vlan_pcpu_stats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errors;
+	u32 tx_dropped;
+};
+
+struct vlan_priority_tci_mapping {
+	u32 priority;
+	u16 vlan_qos;
+	struct vlan_priority_tci_mapping *next;
+};
+
+struct vlan_dev_priv {
+	unsigned int nr_ingress_mappings;
+	u32 ingress_priority_map[8];
+	unsigned int nr_egress_mappings;
+	struct vlan_priority_tci_mapping *egress_priority_map[16];
+	__be16 vlan_proto;
+	u16 vlan_id;
+	u16 flags;
+	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
+	unsigned char real_dev_addr[6];
+	struct proc_dir_entry *dent;
+	struct vlan_pcpu_stats *vlan_pcpu_stats;
+	struct netpoll *netpoll;
+};
+
+enum vlan_protos {
+	VLAN_PROTO_8021Q = 0,
+	VLAN_PROTO_8021AD = 1,
+	VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_vid_info {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+	int refcount;
+};
+
+enum {
+	NLBL_MGMT_C_UNSPEC = 0,
+	NLBL_MGMT_C_ADD = 1,
+	NLBL_MGMT_C_REMOVE = 2,
+	NLBL_MGMT_C_LISTALL = 3,
+	NLBL_MGMT_C_ADDDEF = 4,
+	NLBL_MGMT_C_REMOVEDEF = 5,
+	NLBL_MGMT_C_LISTDEF = 6,
+	NLBL_MGMT_C_PROTOCOLS = 7,
+	NLBL_MGMT_C_VERSION = 8,
+	__NLBL_MGMT_C_MAX = 9,
+};
+
+enum {
+	NLBL_MGMT_A_UNSPEC = 0,
+	NLBL_MGMT_A_DOMAIN = 1,
+	NLBL_MGMT_A_PROTOCOL = 2,
+	NLBL_MGMT_A_VERSION = 3,
+	NLBL_MGMT_A_CV4DOI = 4,
+	NLBL_MGMT_A_IPV6ADDR = 5,
+	NLBL_MGMT_A_IPV6MASK = 6,
+	NLBL_MGMT_A_IPV4ADDR = 7,
+	NLBL_MGMT_A_IPV4MASK = 8,
+	NLBL_MGMT_A_ADDRSELECTOR = 9,
+	NLBL_MGMT_A_SELECTORLIST = 10,
+	NLBL_MGMT_A_FAMILY = 11,
+	NLBL_MGMT_A_CLPDOI = 12,
+	__NLBL_MGMT_A_MAX = 13,
+};
+
+struct netlbl_domhsh_walk_arg___2 {
+	struct netlink_callback *nl_cb;
+	struct sk_buff *skb;
+	u32 seq;
+};
+
+struct ncsi_cmd_sp_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char reserved[3];
+	unsigned char hw_arbitration;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_dc_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	unsigned char reserved[3];
+	unsigned char ald;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_rc_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 reserved;
+	__be32 checksum;
+	unsigned char pad[22];
+};
+
+struct ncsi_cmd_oem_pkt {
+	struct ncsi_cmd_pkt_hdr cmd;
+	__be32 mfr_id;
+	unsigned char data[0];
+};
+
+struct ncsi_cmd_handler {
+	unsigned char type;
+	int payload;
+	int (*handler)(struct sk_buff *, struct ncsi_cmd_arg *);
+};
+
+struct xsk_dma_map {
+	dma_addr_t *dma_pages;
+	struct device *dev;
+	struct net_device *netdev;
+	refcount_t users;
+	struct list_head list;
+	u32 dma_pages_cnt;
+	bool dma_need_sync;
+};
+
 #ifndef BPF_NO_PRESERVE_ACCESS_INDEX
 #pragma clang attribute pop
 #endif
diff --git a/libbpf-tools/bashreadline.c b/libbpf-tools/bashreadline.c
index 0277f53..b069f04 100644
--- a/libbpf-tools/bashreadline.c
+++ b/libbpf-tools/bashreadline.c
@@ -12,6 +12,7 @@
 #include <bpf/bpf.h>
 #include "bashreadline.h"
 #include "bashreadline.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 #include "uprobe_helpers.h"
 
@@ -143,6 +144,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -165,12 +167,23 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = bashreadline_bpf__open_and_load();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		warn("failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		goto cleanup;
+	}
+
+	obj = bashreadline_bpf__open_opts(&open_opts);
 	if (!obj) {
-		warn("failed to open and load BPF object\n");
+		warn("failed to open BPF object\n");
+		goto cleanup;
+	}
+
+	err = bashreadline_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
 		goto cleanup;
 	}
 
@@ -217,6 +230,7 @@
 		free(readline_so_path);
 	perf_buffer__free(pb);
 	bashreadline_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/bin/bpftool b/libbpf-tools/bin/bpftool
deleted file mode 100755
index 6d38774..0000000
--- a/libbpf-tools/bin/bpftool
+++ /dev/null
Binary files differ
diff --git a/libbpf-tools/bindsnoop.bpf.c b/libbpf-tools/bindsnoop.bpf.c
index 941826c..41dce94 100644
--- a/libbpf-tools/bindsnoop.bpf.c
+++ b/libbpf-tools/bindsnoop.bpf.c
@@ -10,11 +10,19 @@
 #define MAX_ENTRIES	10240
 #define MAX_PORTS	1024
 
+const volatile bool filter_cg = false;
 const volatile pid_t target_pid = 0;
 const volatile bool ignore_errors = true;
 const volatile bool filter_by_port = false;
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, __u32);
@@ -107,24 +115,36 @@
 SEC("kprobe/inet_bind")
 int BPF_KPROBE(ipv4_bind_entry, struct socket *socket)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	return probe_entry(ctx, socket);
 }
 
 SEC("kretprobe/inet_bind")
 int BPF_KRETPROBE(ipv4_bind_exit)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	return probe_exit(ctx, 4);
 }
 
 SEC("kprobe/inet6_bind")
 int BPF_KPROBE(ipv6_bind_entry, struct socket *socket)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	return probe_entry(ctx, socket);
 }
 
 SEC("kretprobe/inet6_bind")
 int BPF_KRETPROBE(ipv6_bind_exit)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	return probe_exit(ctx, 6);
 }
 
diff --git a/libbpf-tools/bindsnoop.c b/libbpf-tools/bindsnoop.c
index 5d87d48..cd12035 100644
--- a/libbpf-tools/bindsnoop.c
+++ b/libbpf-tools/bindsnoop.c
@@ -13,17 +13,25 @@
 #include <string.h>
 #include <sys/socket.h>
 #include <time.h>
+#include <unistd.h>
+#include <fcntl.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "bindsnoop.h"
 #include "bindsnoop.skel.h"
 #include "trace_helpers.h"
+#include "btf_helpers.h"
 
 #define PERF_BUFFER_PAGES	16
 #define PERF_POLL_TIMEOUT_MS	100
 #define warn(...) fprintf(stderr, __VA_ARGS__)
 
+static struct env {
+	char	*cgroupspath;
+	bool	cg;
+} env;
+
 static volatile sig_atomic_t exiting = 0;
 
 static bool emit_timestamp = false;
@@ -38,13 +46,14 @@
 const char argp_program_doc[] =
 "Trace bind syscalls.\n"
 "\n"
-"USAGE: bindsnoop [-h] [-t] [-x] [-p PID] [-P ports]\n"
+"USAGE: bindsnoop [-h] [-t] [-x] [-p PID] [-P ports] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    bindsnoop             # trace all bind syscall\n"
 "    bindsnoop -t          # include timestamps\n"
 "    bindsnoop -x          # include errors on output\n"
 "    bindsnoop -p 1216     # only trace PID 1216\n"
+"    bindsnoop -c CG       # Trace process under cgroupsPath CG\n"
 "    bindsnoop -P 80,81    # only trace port 80 and 81\n"
 "\n"
 "Socket options are reported as:\n"
@@ -56,6 +65,7 @@
 
 static const struct argp_option opts[] = {
 	{ "timestamp", 't', NULL, 0, "Include timestamp on output" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
 	{ "failed", 'x', NULL, 0, "Include errors on output." },
 	{ "pid", 'p', "PID", 0, "Process ID to trace" },
 	{ "ports", 'P', "PORTS", 0, "Comma-separated list of ports to trace." },
@@ -79,6 +89,10 @@
 		}
 		target_pid = pid;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'P':
 		if (!arg) {
 			warn("No ports specified\n");
@@ -169,6 +183,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -179,20 +194,28 @@
 	int err, port_map_fd;
 	char *port;
 	short port_num;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = bindsnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = bindsnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
 	}
 
+	obj->rodata->filter_cg = env.cg;
 	obj->rodata->target_pid = target_pid;
 	obj->rodata->ignore_errors = ignore_errors;
 	obj->rodata->filter_by_port = target_ports != NULL;
@@ -203,6 +226,21 @@
 		goto cleanup;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	if (target_ports) {
 		port_map_fd = bpf_map__fd(obj->maps.ports);
 		port = strtok(target_ports, ",");
@@ -251,6 +289,9 @@
 cleanup:
 	perf_buffer__free(pb);
 	bindsnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/biolatency.bpf.c b/libbpf-tools/biolatency.bpf.c
index 648dda7..429412d 100644
--- a/libbpf-tools/biolatency.bpf.c
+++ b/libbpf-tools/biolatency.bpf.c
@@ -4,8 +4,10 @@
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_core_read.h>
 #include <bpf/bpf_tracing.h>
+
 #include "biolatency.h"
 #include "bits.bpf.h"
+#include "core_fixes.bpf.h"
 
 #define MAX_ENTRIES	10240
 
@@ -31,7 +33,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct request *);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } start SEC(".maps");
 
 static struct hist initial_hist;
@@ -41,19 +42,22 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct hist_key);
 	__type(value, struct hist);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } hists SEC(".maps");
 
-static __always_inline
-int trace_rq_start(struct request *rq, int issue)
+static int __always_inline trace_rq_start(struct request *rq, int issue)
 {
-	if (issue && targ_queued && BPF_CORE_READ(rq->q, elevator))
+	u64 ts;
+
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
 		return 0;
 
-	u64 ts = bpf_ktime_get_ns();
+	if (issue && targ_queued && BPF_CORE_READ(rq, q, elevator))
+		return 0;
+
+	ts = bpf_ktime_get_ns();
 
 	if (filter_dev) {
-		struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+		struct gendisk *disk = get_disk(rq);
 		u32 dev;
 
 		dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
@@ -65,67 +69,58 @@
 	return 0;
 }
 
-SEC("tp_btf/block_rq_insert")
-int block_rq_insert(u64 *ctx)
+static int handle_block_rq_insert(__u64 *ctx)
 {
-	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
-		return 0;
-
 	/**
 	 * commit a54895fa (v5.11-rc1) changed tracepoint argument list
 	 * from TP_PROTO(struct request_queue *q, struct request *rq)
 	 * to TP_PROTO(struct request *rq)
 	 */
-	if (LINUX_KERNEL_VERSION <= KERNEL_VERSION(5, 10, 0))
+	if (LINUX_KERNEL_VERSION < KERNEL_VERSION(5, 11, 0))
 		return trace_rq_start((void *)ctx[1], false);
 	else
 		return trace_rq_start((void *)ctx[0], false);
 }
 
-SEC("tp_btf/block_rq_issue")
-int block_rq_issue(u64 *ctx)
+static int handle_block_rq_issue(__u64 *ctx)
 {
-	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
-		return 0;
-
 	/**
 	 * commit a54895fa (v5.11-rc1) changed tracepoint argument list
 	 * from TP_PROTO(struct request_queue *q, struct request *rq)
 	 * to TP_PROTO(struct request *rq)
 	 */
-	if (LINUX_KERNEL_VERSION <= KERNEL_VERSION(5, 10, 0))
+	if (LINUX_KERNEL_VERSION < KERNEL_VERSION(5, 11, 0))
 		return trace_rq_start((void *)ctx[1], true);
 	else
 		return trace_rq_start((void *)ctx[0], true);
 }
 
-SEC("tp_btf/block_rq_complete")
-int BPF_PROG(block_rq_complete, struct request *rq, int error,
-	unsigned int nr_bytes)
+static int handle_block_rq_complete(struct request *rq, int error, unsigned int nr_bytes)
 {
-	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
-		return 0;
-
 	u64 slot, *tsp, ts = bpf_ktime_get_ns();
 	struct hist_key hkey = {};
 	struct hist *histp;
 	s64 delta;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	tsp = bpf_map_lookup_elem(&start, &rq);
 	if (!tsp)
 		return 0;
+
 	delta = (s64)(ts - *tsp);
 	if (delta < 0)
 		goto cleanup;
 
 	if (targ_per_disk) {
-		struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+		struct gendisk *disk = get_disk(rq);
 
 		hkey.dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
 					BPF_CORE_READ(disk, first_minor)) : 0;
 	}
 	if (targ_per_flag)
-		hkey.cmd_flags = rq->cmd_flags;
+		hkey.cmd_flags = BPF_CORE_READ(rq, cmd_flags);
 
 	histp = bpf_map_lookup_elem(&hists, &hkey);
 	if (!histp) {
@@ -149,4 +144,40 @@
 	return 0;
 }
 
+SEC("tp_btf/block_rq_insert")
+int block_rq_insert_btf(u64 *ctx)
+{
+	return handle_block_rq_insert(ctx);
+}
+
+SEC("tp_btf/block_rq_issue")
+int block_rq_issue_btf(u64 *ctx)
+{
+	return handle_block_rq_issue(ctx);
+}
+
+SEC("tp_btf/block_rq_complete")
+int BPF_PROG(block_rq_complete_btf, struct request *rq, int error, unsigned int nr_bytes)
+{
+	return handle_block_rq_complete(rq, error, nr_bytes);
+}
+
+SEC("raw_tp/block_rq_insert")
+int BPF_PROG(block_rq_insert)
+{
+	return handle_block_rq_insert(ctx);
+}
+
+SEC("raw_tp/block_rq_issue")
+int BPF_PROG(block_rq_issue)
+{
+	return handle_block_rq_issue(ctx);
+}
+
+SEC("raw_tp/block_rq_complete")
+int BPF_PROG(block_rq_complete, struct request *rq, int error, unsigned int nr_bytes)
+{
+	return handle_block_rq_complete(rq, error, nr_bytes);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/biolatency.c b/libbpf-tools/biolatency.c
index 51afa50..0a06594 100644
--- a/libbpf-tools/biolatency.c
+++ b/libbpf-tools/biolatency.c
@@ -193,8 +193,7 @@
 		printf("Unknown");
 }
 
-static
-int print_log2_hists(struct bpf_map *hists, struct partitions *partitions)
+static int print_log2_hists(struct bpf_map *hists, struct partitions *partitions)
 {
 	struct hist_key lookup_key = { .cmd_flags = -1 }, next_key;
 	const char *units = env.milliseconds ? "msecs" : "usecs";
@@ -255,7 +254,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = biolatency_bpf__open();
@@ -286,6 +284,20 @@
 	obj->rodata->targ_queued = env.queued;
 	obj->rodata->filter_cg = env.cg;
 
+	if (probe_tp_btf("block_rq_insert")) {
+		bpf_program__set_autoload(obj->progs.block_rq_insert, false);
+		bpf_program__set_autoload(obj->progs.block_rq_issue, false);
+		bpf_program__set_autoload(obj->progs.block_rq_complete, false);
+		if (!env.queued)
+			bpf_program__set_autoload(obj->progs.block_rq_insert_btf, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.block_rq_insert_btf, false);
+		bpf_program__set_autoload(obj->progs.block_rq_issue_btf, false);
+		bpf_program__set_autoload(obj->progs.block_rq_complete_btf, false);
+		if (!env.queued)
+			bpf_program__set_autoload(obj->progs.block_rq_insert, false);
+	}
+
 	err = biolatency_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
@@ -307,24 +319,9 @@
 		}
 	}
 
-	if (env.queued) {
-		obj->links.block_rq_insert = bpf_program__attach(obj->progs.block_rq_insert);
-		if (!obj->links.block_rq_insert) {
-			err = -errno;
-			fprintf(stderr, "failed to attach: %s\n", strerror(-err));
-			goto cleanup;
-		}
-	}
-	obj->links.block_rq_issue = bpf_program__attach(obj->progs.block_rq_issue);
-	if (!obj->links.block_rq_issue) {
-		err = -errno;
-		fprintf(stderr, "failed to attach: %s\n", strerror(-err));
-		goto cleanup;
-	}
-	obj->links.block_rq_complete = bpf_program__attach(obj->progs.block_rq_complete);
-	if (!obj->links.block_rq_complete) {
-		err = -errno;
-		fprintf(stderr, "failed to attach: %s\n", strerror(-err));
+	err = biolatency_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF object: %d\n", err);
 		goto cleanup;
 	}
 
diff --git a/libbpf-tools/biopattern.bpf.c b/libbpf-tools/biopattern.bpf.c
index bf051bc..c7d306e 100644
--- a/libbpf-tools/biopattern.bpf.c
+++ b/libbpf-tools/biopattern.bpf.c
@@ -5,6 +5,7 @@
 #include <bpf/bpf_tracing.h>
 #include "biopattern.h"
 #include "maps.bpf.h"
+#include "core_fixes.bpf.h"
 
 const volatile bool filter_dev = false;
 const volatile __u32 targ_dev = 0;
@@ -14,16 +15,27 @@
 	__uint(max_entries, 64);
 	__type(key, u32);
 	__type(value, struct counter);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } counters SEC(".maps");
 
 SEC("tracepoint/block/block_rq_complete")
-int handle__block_rq_complete(struct trace_event_raw_block_rq_complete *ctx)
+int handle__block_rq_complete(void *args)
 {
-	sector_t sector = ctx->sector;
 	struct counter *counterp, zero = {};
-	u32 nr_sector = ctx->nr_sector;
-	u32 dev = ctx->dev;
+	sector_t sector;
+	u32 nr_sector;
+	u32 dev;
+
+	if (has_block_rq_completion()) {
+		struct trace_event_raw_block_rq_completion___x *ctx = args;
+		sector = BPF_CORE_READ(ctx, sector);
+		nr_sector = BPF_CORE_READ(ctx, nr_sector);
+		dev = BPF_CORE_READ(ctx, dev);
+	} else {
+		struct trace_event_raw_block_rq_complete___x *ctx = args;
+		sector = BPF_CORE_READ(ctx, sector);
+		nr_sector = BPF_CORE_READ(ctx, nr_sector);
+		dev = BPF_CORE_READ(ctx, dev);
+	}
 
 	if (filter_dev && targ_dev != dev)
 		return 0;
diff --git a/libbpf-tools/biopattern.c b/libbpf-tools/biopattern.c
index 9232470..2f7480f 100644
--- a/libbpf-tools/biopattern.c
+++ b/libbpf-tools/biopattern.c
@@ -12,6 +12,7 @@
 #include <bpf/bpf.h>
 #include "biopattern.h"
 #include "biopattern.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 static struct env {
@@ -158,6 +159,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	struct partitions *partitions = NULL;
 	const struct partition *partition;
 	static const struct argp argp = {
@@ -172,10 +174,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = biopattern_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = biopattern_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -234,6 +241,7 @@
 cleanup:
 	biopattern_bpf__destroy(obj);
 	partitions__free(partitions);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/biosnoop.bpf.c b/libbpf-tools/biosnoop.bpf.c
index 54226e4..fcc5c5c 100644
--- a/libbpf-tools/biosnoop.bpf.c
+++ b/libbpf-tools/biosnoop.bpf.c
@@ -5,6 +5,7 @@
 #include <bpf/bpf_core_read.h>
 #include <bpf/bpf_tracing.h>
 #include "biosnoop.h"
+#include "core_fixes.bpf.h"
 
 #define MAX_ENTRIES	10240
 
@@ -12,6 +13,7 @@
 const volatile bool targ_queued = false;
 const volatile bool filter_dev = false;
 const volatile __u32 targ_dev = 0;
+const volatile __u64 min_ns = 0;
 
 extern __u32 LINUX_KERNEL_VERSION __kconfig;
 
@@ -32,7 +34,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct request *);
 	__type(value, struct piddata);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } infobyreq SEC(".maps");
 
 struct stage {
@@ -75,6 +76,15 @@
 	return trace_pid(rq);
 }
 
+SEC("tp_btf/block_io_start")
+int BPF_PROG(block_io_start, struct request *rq)
+{
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	return trace_pid(rq);
+}
+
 SEC("kprobe/blk_account_io_merge_bio")
 int BPF_KPROBE(blk_account_io_merge_bio, struct request *rq)
 {
@@ -92,7 +102,7 @@
 
 	stagep = bpf_map_lookup_elem(&start, &rq);
 	if (!stagep) {
-		struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+		struct gendisk *disk = get_disk(rq);
 
 		stage.dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
 				BPF_CORE_READ(disk, first_minor)) : 0;
@@ -120,7 +130,7 @@
 	 * from TP_PROTO(struct request_queue *q, struct request *rq)
 	 * to TP_PROTO(struct request *rq)
 	 */
-	if (LINUX_KERNEL_VERSION > KERNEL_VERSION(5, 10, 0))
+	if (LINUX_KERNEL_VERSION >= KERNEL_VERSION(5, 11, 0))
 		return trace_rq_start((void *)ctx[0], true);
 	else
 		return trace_rq_start((void *)ctx[1], true);
@@ -137,7 +147,7 @@
 	 * from TP_PROTO(struct request_queue *q, struct request *rq)
 	 * to TP_PROTO(struct request *rq)
 	 */
-	if (LINUX_KERNEL_VERSION > KERNEL_VERSION(5, 10, 0))
+	if (LINUX_KERNEL_VERSION >= KERNEL_VERSION(5, 11, 0))
 		return trace_rq_start((void *)ctx[0], false);
 	else
 		return trace_rq_start((void *)ctx[1], false);
@@ -160,7 +170,7 @@
 	if (!stagep)
 		return 0;
 	delta = (s64)(ts - stagep->issue);
-	if (delta < 0)
+	if (delta < 0 || delta < min_ns)
 		goto cleanup;
 	piddatap = bpf_map_lookup_elem(&infobyreq, &rq);
 	if (!piddatap) {
@@ -178,9 +188,9 @@
 			event.qdelta = stagep->issue - stagep->insert;
 	}
 	event.ts = ts;
-	event.sector = rq->__sector;
-	event.len = rq->__data_len;
-	event.cmd_flags = rq->cmd_flags;
+	event.sector = BPF_CORE_READ(rq, __sector);
+	event.len = BPF_CORE_READ(rq, __data_len);
+	event.cmd_flags = BPF_CORE_READ(rq, cmd_flags);
 	event.dev = stagep->dev;
 	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event,
 			sizeof(event));
diff --git a/libbpf-tools/biosnoop.c b/libbpf-tools/biosnoop.c
index f0f665a..f946890 100644
--- a/libbpf-tools/biosnoop.c
+++ b/libbpf-tools/biosnoop.c
@@ -6,6 +6,7 @@
 #include <argp.h>
 #include <signal.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <time.h>
 #include <bpf/libbpf.h>
@@ -23,6 +24,7 @@
 static volatile sig_atomic_t exiting = 0;
 
 static struct env {
+	__u64 min_lat_ms;
 	char *disk;
 	int duration;
 	bool timestamp;
@@ -45,15 +47,19 @@
 "EXAMPLES:\n"
 "    biosnoop              # trace all block I/O\n"
 "    biosnoop -Q           # include OS queued time in I/O time\n"
+"    biosnoop -t           # use timestamps instead\n"
 "    biosnoop 10           # trace for 10 seconds only\n"
 "    biosnoop -d sdc       # trace sdc only\n"
-"    biosnoop -c CG        # Trace process under cgroupsPath CG\n";
+"    biosnoop -c CG        # Trace process under cgroupsPath CG\n"
+"    biosnoop -m 1         # trace for slower than 1ms\n";
 
 static const struct argp_option opts[] = {
 	{ "queued", 'Q', NULL, 0, "Include OS queued time in I/O time" },
 	{ "disk",  'd', "DISK",  0, "Trace this disk only" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
 	{ "cgroup", 'c', "/sys/fs/cgroup/unified/CG", 0, "Trace process in cgroup path"},
+	{ "min", 'm', "MIN", 0, "Min latency to trace, in ms" },
+	{ "timestamp", 't', NULL, 0, "Include timestamp on output" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
@@ -83,6 +89,17 @@
 			argp_usage(state);
 		}
 		break;
+	case 'm':
+		errno = 0;
+		env.min_lat_ms = strtoll(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "invalid latency (in us): %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 't':
+		env.timestamp = true;
+		break;
 	case ARGP_KEY_ARG:
 		if (pos_args++) {
 			fprintf(stderr,
@@ -162,13 +179,26 @@
 	const struct partition *partition;
 	const struct event *e = data;
 	char rwbs[RWBS_LEN];
+	struct timespec ct;
+	struct tm *tm;
+	char ts[32];
 
-	if (!start_ts)
-		start_ts = e->ts;
+	if (env.timestamp) {
+		/* Since `bpf_ktime_get_boot_ns` requires at least 5.8 kernel,
+		 * so get time from usespace instead */
+		clock_gettime(CLOCK_REALTIME, &ct);
+		tm = localtime(&ct.tv_sec);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		printf("%-8s.%03ld ", ts, ct.tv_nsec / 1000000);
+	} else {
+		if (!start_ts) {
+			start_ts = e->ts;
+		}
+		printf("%-11.6f ",(e->ts - start_ts) / 1000000000.0);
+	}
 	blk_fill_rwbs(rwbs, e->cmd_flags);
 	partition = partitions__get_by_dev(partitions, e->dev);
-	printf("%-11.6f %-14.14s %-6d %-7s %-4s %-10lld %-7d ",
-		(e->ts - start_ts) / 1000000000.0,
+	printf("%-14.14s %-7d %-7s %-4s %-10lld %-7d ",
 		e->comm, e->pid, partition ? partition->name : "Unknown", rwbs,
 		e->sector, e->len);
 	if (env.queued)
@@ -182,6 +212,16 @@
 	fprintf(stderr, "lost %llu events on CPU #%d\n", lost_cnt, cpu);
 }
 
+static void blk_account_io_set_attach_target(struct biosnoop_bpf *obj)
+{
+	if (fentry_can_attach("blk_account_io_start", NULL))
+		bpf_program__set_attach_target(obj->progs.blk_account_io_start,
+					       0, "blk_account_io_start");
+	else
+		bpf_program__set_attach_target(obj->progs.blk_account_io_start,
+					       0, "__blk_account_io_start");
+}
+
 int main(int argc, char **argv)
 {
 	const struct partition *partition;
@@ -202,7 +242,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = biosnoop_bpf__open();
@@ -229,6 +268,25 @@
 	}
 	obj->rodata->targ_queued = env.queued;
 	obj->rodata->filter_cg = env.cg;
+	obj->rodata->min_ns = env.min_lat_ms * 1000000;
+
+	if (tracepoint_exists("block", "block_io_start"))
+		bpf_program__set_autoload(obj->progs.blk_account_io_start, false);
+	else {
+		bpf_program__set_autoload(obj->progs.block_io_start, false);
+		blk_account_io_set_attach_target(obj);
+	}
+
+	ksyms = ksyms__load();
+	if (!ksyms) {
+		fprintf(stderr, "failed to load kallsyms\n");
+		goto cleanup;
+	}
+	if (!ksyms__get_symbol(ksyms, "blk_account_io_merge_bio"))
+		bpf_program__set_autoload(obj->progs.blk_account_io_merge_bio, false);
+
+	if (!env.queued)
+		bpf_program__set_autoload(obj->progs.block_rq_insert, false);
 
 	err = biosnoop_bpf__load(obj);
 	if (err) {
@@ -251,48 +309,9 @@
 		}
 	}
 
-	obj->links.blk_account_io_start = bpf_program__attach(obj->progs.blk_account_io_start);
-	if (!obj->links.blk_account_io_start) {
-		err = -errno;
-		fprintf(stderr, "failed to attach blk_account_io_start: %s\n",
-			strerror(-err));
-		goto cleanup;
-	}
-	ksyms = ksyms__load();
-	if (!ksyms) {
-		err = -ENOMEM;
-		fprintf(stderr, "failed to load kallsyms\n");
-		goto cleanup;
-	}
-	if (ksyms__get_symbol(ksyms, "blk_account_io_merge_bio")) {
-		obj->links.blk_account_io_merge_bio =
-			bpf_program__attach(obj->progs.blk_account_io_merge_bio);
-		if (!obj->links.blk_account_io_merge_bio) {
-			err = -errno;
-			fprintf(stderr, "failed to attach blk_account_io_merge_bio: %s\n",
-				strerror(-err));
-			goto cleanup;
-		}
-	}
-	if (env.queued) {
-		obj->links.block_rq_insert =
-			bpf_program__attach(obj->progs.block_rq_insert);
-		if (!obj->links.block_rq_insert) {
-			err = -errno;
-			fprintf(stderr, "failed to attach block_rq_insert: %s\n", strerror(-err));
-			goto cleanup;
-		}
-	}
-	obj->links.block_rq_issue = bpf_program__attach(obj->progs.block_rq_issue);
-	if (!obj->links.block_rq_issue) {
-		err = -errno;
-		fprintf(stderr, "failed to attach block_rq_issue: %s\n", strerror(-err));
-		goto cleanup;
-	}
-	obj->links.block_rq_complete = bpf_program__attach(obj->progs.block_rq_complete);
-	if (!obj->links.block_rq_complete) {
-		err = -errno;
-		fprintf(stderr, "failed to attach block_rq_complete: %s\n", strerror(-err));
+	err = biosnoop_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF programs: %d\n", err);
 		goto cleanup;
 	}
 
@@ -304,8 +323,13 @@
 		goto cleanup;
 	}
 
-	printf("%-11s %-14s %-6s %-7s %-4s %-10s %-7s ",
-		"TIME(s)", "COMM", "PID", "DISK", "T", "SECTOR", "BYTES");
+	if (env.timestamp) {
+		printf("%-12s ", "TIMESTAMP");
+	} else {
+		printf("%-11s ", "TIME(s)");
+	}
+	printf("%-14s %-7s %-7s %-4s %-10s %-7s ",
+		"COMM", "PID", "DISK", "T", "SECTOR", "BYTES");
 	if (env.queued)
 		printf("%7s ", "QUE(ms)");
 	printf("%7s\n", "LAT(ms)");
@@ -327,10 +351,10 @@
 			fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err));
 			goto cleanup;
 		}
-		if (env.duration && get_ktime_ns() > time_end)
-			goto cleanup;
 		/* reset err to return 0 if exiting */
 		err = 0;
+		if (env.duration && get_ktime_ns() > time_end)
+			break;
 	}
 
 cleanup:
diff --git a/libbpf-tools/biostacks.bpf.c b/libbpf-tools/biostacks.bpf.c
index 0199373..0ca6988 100644
--- a/libbpf-tools/biostacks.bpf.c
+++ b/libbpf-tools/biostacks.bpf.c
@@ -7,6 +7,7 @@
 #include "biostacks.h"
 #include "bits.bpf.h"
 #include "maps.bpf.h"
+#include "core_fixes.bpf.h"
 
 #define MAX_ENTRIES	10240
 
@@ -24,7 +25,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct request *);
 	__type(value, struct internal_rqinfo);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } rqinfos SEC(".maps");
 
 struct {
@@ -32,7 +32,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct rqinfo);
 	__type(value, struct hist);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } hists SEC(".maps");
 
 static struct hist zero;
@@ -41,7 +40,7 @@
 int trace_start(void *ctx, struct request *rq, bool merge_bio)
 {
 	struct internal_rqinfo *i_rqinfop = NULL, i_rqinfo = {};
-	struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+	struct gendisk *disk = get_disk(rq);
 	u32 dev;
 
 	dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
@@ -68,20 +67,8 @@
 	return 0;
 }
 
-SEC("fentry/blk_account_io_start")
-int BPF_PROG(blk_account_io_start, struct request *rq)
-{
-	return trace_start(ctx, rq, false);
-}
-
-SEC("kprobe/blk_account_io_merge_bio")
-int BPF_KPROBE(blk_account_io_merge_bio, struct request *rq)
-{
-	return trace_start(ctx, rq, true);
-}
-
-SEC("fentry/blk_account_io_done")
-int BPF_PROG(blk_account_io_done, struct request *rq)
+static __always_inline
+int trace_done(void *ctx, struct request *rq)
 {
 	u64 slot, ts = bpf_ktime_get_ns();
 	struct internal_rqinfo *i_rqinfop;
@@ -111,4 +98,34 @@
 	return 0;
 }
 
+SEC("kprobe/blk_account_io_merge_bio")
+int BPF_KPROBE(blk_account_io_merge_bio, struct request *rq)
+{
+	return trace_start(ctx, rq, true);
+}
+
+SEC("fentry/blk_account_io_start")
+int BPF_PROG(blk_account_io_start, struct request *rq)
+{
+	return trace_start(ctx, rq, false);
+}
+
+SEC("fentry/blk_account_io_done")
+int BPF_PROG(blk_account_io_done, struct request *rq)
+{
+	return trace_done(ctx, rq);
+}
+
+SEC("tp_btf/block_io_start")
+int BPF_PROG(block_io_start, struct request *rq)
+{
+	return trace_start(ctx, rq, false);
+}
+
+SEC("tp_btf/block_io_done")
+int BPF_PROG(block_io_done, struct request *rq)
+{
+	return trace_done(ctx, rq);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/biostacks.c b/libbpf-tools/biostacks.c
index 260bc23..e7875f7 100644
--- a/libbpf-tools/biostacks.c
+++ b/libbpf-tools/biostacks.c
@@ -128,6 +128,39 @@
 	return;
 }
 
+static bool has_block_io_tracepoints(void)
+{
+	return tracepoint_exists("block", "block_io_start") &&
+		tracepoint_exists("block", "block_io_done");
+}
+
+static void disable_block_io_tracepoints(struct biostacks_bpf *obj)
+{
+	bpf_program__set_autoload(obj->progs.block_io_start, false);
+	bpf_program__set_autoload(obj->progs.block_io_done, false);
+}
+
+static void disable_blk_account_io_fentry(struct biostacks_bpf *obj)
+{
+	bpf_program__set_autoload(obj->progs.blk_account_io_start, false);
+	bpf_program__set_autoload(obj->progs.blk_account_io_done, false);
+}
+
+static void blk_account_io_set_attach_target(struct biostacks_bpf *obj)
+{
+	if (fentry_can_attach("blk_account_io_start", NULL)) {
+		bpf_program__set_attach_target(obj->progs.blk_account_io_start,
+					       0, "blk_account_io_start");
+		bpf_program__set_attach_target(obj->progs.blk_account_io_done,
+					       0, "blk_account_io_done");
+	} else {
+		bpf_program__set_attach_target(obj->progs.blk_account_io_start,
+					       0, "__blk_account_io_start");
+		bpf_program__set_attach_target(obj->progs.blk_account_io_done,
+					       0, "__blk_account_io_done");
+	}
+}
+
 int main(int argc, char **argv)
 {
 	struct partitions *partitions = NULL;
@@ -145,7 +178,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = biostacks_bpf__open();
@@ -173,38 +205,30 @@
 
 	obj->rodata->targ_ms = env.milliseconds;
 
+	if (has_block_io_tracepoints())
+		disable_blk_account_io_fentry(obj);
+	else {
+		disable_block_io_tracepoints(obj);
+		blk_account_io_set_attach_target(obj);
+	}
+
+	ksyms = ksyms__load();
+	if (!ksyms) {
+		fprintf(stderr, "failed to load kallsyms\n");
+		goto cleanup;
+	}
+	if (!ksyms__get_symbol(ksyms, "blk_account_io_merge_bio"))
+		bpf_program__set_autoload(obj->progs.blk_account_io_merge_bio, false);
+
 	err = biostacks_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
 		goto cleanup;
 	}
 
-	obj->links.blk_account_io_start = bpf_program__attach(obj->progs.blk_account_io_start);
-	if (!obj->links.blk_account_io_start) {
-		err = -errno;
-		fprintf(stderr, "failed to attach blk_account_io_start: %s\n", strerror(-err));
-		goto cleanup;
-	}
-	ksyms = ksyms__load();
-	if (!ksyms) {
-		fprintf(stderr, "failed to load kallsyms\n");
-		goto cleanup;
-	}
-	if (ksyms__get_symbol(ksyms, "blk_account_io_merge_bio")) {
-		obj->links.blk_account_io_merge_bio =
-			bpf_program__attach(obj->progs.blk_account_io_merge_bio);
-		if (!obj->links.blk_account_io_merge_bio) {
-			err = -errno;
-			fprintf(stderr, "failed to attach blk_account_io_merge_bio: %s\n",
-				strerror(-err));
-			goto cleanup;
-		}
-	}
-	obj->links.blk_account_io_done = bpf_program__attach(obj->progs.blk_account_io_done);
-	if (!obj->links.blk_account_io_done) {
-		err = -errno;
-		fprintf(stderr, "failed to attach blk_account_io_done: %s\n",
-			strerror(-err));
+	err = biostacks_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF programs: %d\n", err);
 		goto cleanup;
 	}
 
diff --git a/libbpf-tools/biotop.bpf.c b/libbpf-tools/biotop.bpf.c
new file mode 100644
index 0000000..0763137
--- /dev/null
+++ b/libbpf-tools/biotop.bpf.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Francis Laniel <flaniel@linux.microsoft.com>
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+
+#include "biotop.h"
+#include "maps.bpf.h"
+#include "core_fixes.bpf.h"
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, struct request *);
+	__type(value, struct start_req_t);
+} start SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, struct request *);
+	__type(value, struct who_t);
+} whobyreq SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, struct info_t);
+	__type(value, struct val_t);
+} counts SEC(".maps");
+
+static __always_inline
+int trace_start(struct request *req)
+{
+	struct who_t who = {};
+
+	/* cache PID and comm by-req */
+	bpf_get_current_comm(&who.name, sizeof(who.name));
+	who.pid = bpf_get_current_pid_tgid() >> 32;
+	bpf_map_update_elem(&whobyreq, &req, &who, 0);
+
+	return 0;
+}
+
+SEC("kprobe/blk_mq_start_request")
+int BPF_KPROBE(blk_mq_start_request, struct request *req)
+{
+	/* time block I/O */
+	struct start_req_t start_req;
+
+	start_req.ts = bpf_ktime_get_ns();
+	start_req.data_len = BPF_CORE_READ(req, __data_len);
+
+	bpf_map_update_elem(&start, &req, &start_req, 0);
+	return 0;
+}
+
+static __always_inline
+int trace_done(struct request *req)
+{
+	struct val_t *valp, zero = {};
+	struct info_t info = {};
+	struct start_req_t *startp;
+	unsigned int cmd_flags;
+	struct gendisk *disk;
+	struct who_t *whop;
+	u64 delta_us;
+
+	/* fetch timestamp and calculate delta */
+	startp = bpf_map_lookup_elem(&start, &req);
+	if (!startp)
+		return 0;    /* missed tracing issue */
+
+	delta_us = (bpf_ktime_get_ns() - startp->ts) / 1000;
+
+	/* setup info_t key */
+	cmd_flags = BPF_CORE_READ(req, cmd_flags);
+
+	disk = get_disk(req);
+	info.major = BPF_CORE_READ(disk, major);
+	info.minor = BPF_CORE_READ(disk, first_minor);
+	info.rwflag = !!((cmd_flags & REQ_OP_MASK) == REQ_OP_WRITE);
+
+	whop = bpf_map_lookup_elem(&whobyreq, &req);
+	if (whop) {
+		info.pid = whop->pid;
+		__builtin_memcpy(&info.name, whop->name, sizeof(info.name));
+	}
+
+	valp = bpf_map_lookup_or_try_init(&counts, &info, &zero);
+
+	if (valp) {
+		/* save stats */
+		valp->us += delta_us;
+		valp->bytes += startp->data_len;
+		valp->io++;
+	}
+
+	bpf_map_delete_elem(&start, &req);
+	bpf_map_delete_elem(&whobyreq, &req);
+
+	return 0;
+}
+
+SEC("kprobe/blk_account_io_start")
+int BPF_KPROBE(blk_account_io_start, struct request *req)
+{
+	return trace_start(req);
+}
+
+SEC("kprobe/blk_account_io_done")
+int BPF_KPROBE(blk_account_io_done, struct request *req)
+{
+	return trace_done(req);
+}
+
+SEC("kprobe/__blk_account_io_start")
+int BPF_KPROBE(__blk_account_io_start, struct request *req)
+{
+	return trace_start(req);
+}
+
+SEC("kprobe/__blk_account_io_done")
+int BPF_KPROBE(__blk_account_io_done, struct request *req)
+{
+	return trace_done(req);
+}
+
+SEC("tp_btf/block_io_start")
+int BPF_PROG(block_io_start, struct request *req)
+{
+	return trace_start(req);
+}
+
+SEC("tp_btf/block_io_done")
+int BPF_PROG(block_io_done, struct request *req)
+{
+	return trace_done(req);
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/biotop.c b/libbpf-tools/biotop.c
new file mode 100644
index 0000000..5b3a7cf
--- /dev/null
+++ b/libbpf-tools/biotop.c
@@ -0,0 +1,470 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+
+/*
+ * biotop Trace block I/O by process.
+ * Copyright (c) 2022 Francis Laniel <flaniel@linux.microsoft.com>
+ *
+ * Based on biotop(8) from BCC by Brendan Gregg.
+ * 03-Mar-2022   Francis Laniel   Created this.
+ */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <argp.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "biotop.h"
+#include "biotop.skel.h"
+#include "compat.h"
+#include "trace_helpers.h"
+
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+#define OUTPUT_ROWS_LIMIT 10240
+
+enum SORT {
+	ALL,
+	IO,
+	BYTES,
+	TIME,
+};
+
+struct disk {
+	int major;
+	int minor;
+	char name[256];
+};
+
+struct vector {
+	size_t nr;
+	size_t capacity;
+	void **elems;
+};
+
+int grow_vector(struct vector *vector) {
+	if (vector->nr >= vector->capacity) {
+		void **reallocated;
+
+		if (!vector->capacity)
+			vector->capacity = 1;
+		else
+			vector->capacity *= 2;
+
+		reallocated = libbpf_reallocarray(vector->elems, vector->capacity, sizeof(*vector->elems));
+		if (!reallocated)
+			return -1;
+
+		vector->elems = reallocated;
+	}
+
+	return 0;
+}
+
+void free_vector(struct vector vector) {
+	for (size_t i = 0; i < vector.nr; i++)
+		if (vector.elems[i] != NULL)
+			free(vector.elems[i]);
+	free(vector.elems);
+}
+
+struct vector disks = {};
+
+static volatile sig_atomic_t exiting = 0;
+
+static bool clear_screen = true;
+static int output_rows = 20;
+static int sort_by = ALL;
+static int interval = 1;
+static int count = 99999999;
+static bool verbose = false;
+
+const char *argp_program_version = "biotop 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace file reads/writes by process.\n"
+"\n"
+"USAGE: biotop [-h] [interval] [count]\n"
+"\n"
+"EXAMPLES:\n"
+"    biotop            # file I/O top, refresh every 1s\n"
+"    biotop 5 10       # 5s summaries, 10 times\n";
+
+static const struct argp_option opts[] = {
+	{ "noclear", 'C', NULL, 0, "Don't clear the screen" },
+	{ "sort", 's', "SORT", 0, "Sort columns, default all [all, io, bytes, time]" },
+	{ "rows", 'r', "ROWS", 0, "Maximum rows to print, default 20" },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long rows;
+	static int pos_args;
+
+	switch (key) {
+	case 'C':
+		clear_screen = false;
+		break;
+	case 's':
+		if (!strcmp(arg, "all")) {
+			sort_by = ALL;
+		} else if (!strcmp(arg, "io")) {
+			sort_by = IO;
+		} else if (!strcmp(arg, "bytes")) {
+			sort_by = BYTES;
+		} else if (!strcmp(arg, "time")) {
+			sort_by = TIME;
+		} else {
+			warn("invalid sort method: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'r':
+		errno = 0;
+		rows = strtol(arg, NULL, 10);
+		if (errno || rows <= 0) {
+			warn("invalid rows: %s\n", arg);
+			argp_usage(state);
+		}
+		output_rows = rows;
+		if (output_rows > OUTPUT_ROWS_LIMIT)
+			output_rows = OUTPUT_ROWS_LIMIT;
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case ARGP_KEY_ARG:
+		errno = 0;
+		if (pos_args == 0) {
+			interval = strtol(arg, NULL, 10);
+			if (errno || interval <= 0) {
+				warn("invalid interval\n");
+				argp_usage(state);
+			}
+		} else if (pos_args == 1) {
+			count = strtol(arg, NULL, 10);
+			if (errno || count <= 0) {
+				warn("invalid count\n");
+				argp_usage(state);
+			}
+		} else {
+			warn("unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+		pos_args++;
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+struct data_t {
+	struct info_t key;
+	struct val_t value;
+};
+
+static int sort_column(const void *obj1, const void *obj2)
+{
+	struct data_t *d1 = (struct data_t *) obj1;
+	struct data_t *d2 = (struct data_t *) obj2;
+
+	struct val_t *s1 = &d1->value;
+	struct val_t *s2 = &d2->value;
+
+	if (sort_by == IO)
+		return s2->io - s1->io;
+	else if (sort_by == BYTES)
+		return s2->bytes - s1->bytes;
+	else if (sort_by == TIME)
+		return s2->us - s1->us;
+	else
+		return (s2->io + s2->bytes + s2->us)
+			- (s1->io + s1->bytes + s1->us);
+}
+
+static void parse_disk_stat(void)
+{
+	FILE *fp;
+	char *line;
+	size_t zero;
+
+	fp = fopen("/proc/diskstats", "r");
+	if (!fp)
+		return;
+
+	zero = 0;
+	while (getline(&line, &zero, fp) != -1) {
+		struct disk disk;
+
+		if (sscanf(line, "%d %d %s", &disk.major, &disk.minor, disk.name) != 3)
+			continue;
+
+		if (grow_vector(&disks) == -1)
+			goto err;
+
+		disks.elems[disks.nr] = malloc(sizeof(disk));
+		if (!disks.elems[disks.nr])
+			goto err;
+
+		memcpy(disks.elems[disks.nr], &disk, sizeof(disk));
+
+		disks.nr++;
+	}
+
+	free(line);
+	fclose(fp);
+
+	return;
+err:
+	fprintf(stderr, "realloc or malloc failed\n");
+
+	free_vector(disks);
+}
+
+static char *search_disk_name(int major, int minor)
+{
+	for (size_t i = 0; i < disks.nr; i++) {
+		struct disk *diskp;
+
+		if (!disks.elems[i])
+			continue;
+
+		diskp = (struct disk *) disks.elems[i];
+		if (diskp->major == major && diskp->minor == minor)
+			return diskp->name;
+	}
+
+	return "";
+}
+
+static int print_stat(struct biotop_bpf *obj)
+{
+	FILE *f;
+	time_t t;
+	struct tm *tm;
+	char ts[16], buf[256];
+	struct info_t *prev_key = NULL;
+	static struct data_t datas[OUTPUT_ROWS_LIMIT];
+	int n, i, err = 0, rows = 0;
+	int fd = bpf_map__fd(obj->maps.counts);
+
+	f = fopen("/proc/loadavg", "r");
+	if (f) {
+		time(&t);
+		tm = localtime(&t);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		memset(buf, 0, sizeof(buf));
+		n = fread(buf, 1, sizeof(buf), f);
+		if (n)
+			printf("%8s loadavg: %s\n", ts, buf);
+		fclose(f);
+	}
+	printf("%-7s %-16s %1s %-3s %-3s %-8s %5s %7s %6s\n",
+	       "PID", "COMM", "D", "MAJ", "MIN", "DISK", "I/O", "Kbytes", "AVGms");
+
+	while (1) {
+		err = bpf_map_get_next_key(fd, prev_key, &datas[rows].key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_lookup_elem(fd, &datas[rows].key, &datas[rows].value);
+		if (err) {
+			warn("bpf_map_lookup_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &datas[rows].key;
+		rows++;
+	}
+
+	qsort(datas, rows, sizeof(struct data_t), sort_column);
+	rows = rows < output_rows ? rows : output_rows;
+	for (i = 0; i < rows; i++) {
+		int major;
+		int minor;
+		struct info_t *key = &datas[i].key;
+		struct val_t *value = &datas[i].value;
+		float avg_ms = 0;
+
+		/* To avoid floating point exception. */
+		if (value->io)
+			avg_ms = ((float) value->us) / 1000 / value->io;
+
+		major = key->major;
+		minor = key->minor;
+
+		printf("%-7d %-16s %1s %-3d %-3d %-8s %5d %7lld %6.2f\n",
+		       key->pid, key->name, key->rwflag ? "W": "R",
+		       major, minor, search_disk_name(major, minor),
+		       value->io, value->bytes / 1024, avg_ms);
+	}
+
+	printf("\n");
+	prev_key = NULL;
+
+	while (1) {
+		struct info_t key;
+
+		err = bpf_map_get_next_key(fd, prev_key, &key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_delete_elem(fd, &key);
+		if (err) {
+			warn("bpf_map_delete_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &key;
+	}
+	return err;
+}
+
+static bool has_block_io_tracepoints(void)
+{
+	return tracepoint_exists("block", "block_io_start") &&
+		tracepoint_exists("block", "block_io_done");
+}
+
+static void disable_block_io_tracepoints(struct biotop_bpf *obj)
+{
+	bpf_program__set_autoload(obj->progs.block_io_start, false);
+	bpf_program__set_autoload(obj->progs.block_io_done, false);
+}
+
+static void disable_blk_account_io_kprobes(struct biotop_bpf *obj)
+{
+	bpf_program__set_autoload(obj->progs.blk_account_io_start, false);
+	bpf_program__set_autoload(obj->progs.blk_account_io_done, false);
+	bpf_program__set_autoload(obj->progs.__blk_account_io_start, false);
+	bpf_program__set_autoload(obj->progs.__blk_account_io_done, false);
+}
+
+static void blk_account_io_set_autoload(struct biotop_bpf *obj,
+					struct ksyms *ksyms)
+{
+	if (!ksyms__get_symbol(ksyms, "__blk_account_io_start")) {
+		bpf_program__set_autoload(obj->progs.__blk_account_io_start, false);
+		bpf_program__set_autoload(obj->progs.__blk_account_io_done, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.blk_account_io_start, false);
+		bpf_program__set_autoload(obj->progs.blk_account_io_done, false);
+	}
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct biotop_bpf *obj;
+	struct ksyms *ksyms;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = biotop_bpf__open();
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	parse_disk_stat();
+
+	ksyms = ksyms__load();
+	if (!ksyms) {
+		err = -ENOMEM;
+		warn("failed to load kallsyms\n");
+		goto cleanup;
+	}
+
+	if (has_block_io_tracepoints())
+		disable_blk_account_io_kprobes(obj);
+	else {
+		disable_block_io_tracepoints(obj);
+		blk_account_io_set_autoload(obj, ksyms);
+	}
+
+	err = biotop_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = biotop_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	while (1) {
+		sleep(interval);
+
+		if (clear_screen) {
+			err = system("clear");
+			if (err)
+				goto cleanup;
+		}
+
+		err = print_stat(obj);
+		if (err)
+			goto cleanup;
+
+		count--;
+		if (exiting || !count)
+			goto cleanup;
+	}
+
+cleanup:
+	ksyms__free(ksyms);
+	free_vector(disks);
+	biotop_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/biotop.h b/libbpf-tools/biotop.h
new file mode 100644
index 0000000..9f08297
--- /dev/null
+++ b/libbpf-tools/biotop.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+#ifndef __BIOTOP_H
+#define __BIOTOP_H
+
+#define REQ_OP_BITS 8
+#define REQ_OP_MASK ((1 << REQ_OP_BITS) - 1)
+
+#define TASK_COMM_LEN 16
+
+/* for saving the timestamp and __data_len of each request */
+struct start_req_t {
+	__u64 ts;
+	__u64 data_len;
+};
+
+/* for saving process info by request */
+struct who_t {
+	__u32 pid;
+	char name[TASK_COMM_LEN];
+};
+
+/* the key for the output summary */
+struct info_t {
+	__u32 pid;
+	int rwflag;
+	int major;
+	int minor;
+	char name[TASK_COMM_LEN];
+};
+
+/* the value of the output summary */
+struct val_t {
+	__u64 bytes;
+	__u64 us;
+	__u32 io;
+};
+
+#endif /* __BIOTOP_H */
diff --git a/libbpf-tools/bitesize.bpf.c b/libbpf-tools/bitesize.bpf.c
index 80672c9..05b92e0 100644
--- a/libbpf-tools/bitesize.bpf.c
+++ b/libbpf-tools/bitesize.bpf.c
@@ -6,6 +6,7 @@
 #include <bpf/bpf_core_read.h>
 #include "bitesize.h"
 #include "bits.bpf.h"
+#include "core_fixes.bpf.h"
 
 const volatile char targ_comm[TASK_COMM_LEN] = {};
 const volatile bool filter_dev = false;
@@ -18,7 +19,6 @@
 	__uint(max_entries, 10240);
 	__type(key, struct hist_key);
 	__type(value, struct hist);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } hists SEC(".maps");
 
 static struct hist initial_hist;
@@ -41,7 +41,7 @@
 	u64 slot;
 
 	if (filter_dev) {
-		struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+		struct gendisk *disk = get_disk(rq);
 		u32 dev;
 
 		dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
@@ -76,7 +76,7 @@
 	 * from TP_PROTO(struct request_queue *q, struct request *rq)
 	 * to TP_PROTO(struct request *rq)
 	 */
-	if (LINUX_KERNEL_VERSION > KERNEL_VERSION(5, 10, 0))
+	if (LINUX_KERNEL_VERSION >= KERNEL_VERSION(5, 11, 0))
 		return trace_rq_issue((void *)ctx[0]);
 	else
 		return trace_rq_issue((void *)ctx[1]);
diff --git a/libbpf-tools/bitesize.c b/libbpf-tools/bitesize.c
index 4c37150..9eafd38 100644
--- a/libbpf-tools/bitesize.c
+++ b/libbpf-tools/bitesize.c
@@ -167,7 +167,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = bitesize_bpf__open();
diff --git a/libbpf-tools/blazesym b/libbpf-tools/blazesym
new file mode 160000
index 0000000..d954f73
--- /dev/null
+++ b/libbpf-tools/blazesym
@@ -0,0 +1 @@
+Subproject commit d954f73867527dc75025802160c759d0b6a0641f
diff --git a/libbpf-tools/bpftool b/libbpf-tools/bpftool
new file mode 160000
index 0000000..6eb3e20
--- /dev/null
+++ b/libbpf-tools/bpftool
@@ -0,0 +1 @@
+Subproject commit 6eb3e20583da834da18ea3011dcefd08b3493f8d
diff --git a/libbpf-tools/btf_helpers.c b/libbpf-tools/btf_helpers.c
new file mode 100644
index 0000000..9e4228b
--- /dev/null
+++ b/libbpf-tools/btf_helpers.c
@@ -0,0 +1,247 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/utsname.h>
+#include <zlib.h>
+
+#include "trace_helpers.h"
+#include "btf_helpers.h"
+
+extern unsigned char _binary_min_core_btfs_tar_gz_start[] __attribute__((weak));
+extern unsigned char _binary_min_core_btfs_tar_gz_end[] __attribute__((weak));
+
+#define FIELD_LEN 65
+#define ID_FMT "ID=%64s"
+#define VERSION_FMT "VERSION_ID=\"%64s"
+
+struct os_info {
+	char id[FIELD_LEN];
+	char version[FIELD_LEN];
+	char arch[FIELD_LEN];
+	char kernel_release[FIELD_LEN];
+};
+
+static struct os_info * get_os_info()
+{
+	struct os_info *info = NULL;
+	struct utsname u;
+	size_t len = 0;
+	ssize_t read;
+	char *line = NULL;
+	FILE *f;
+
+	if (uname(&u) == -1)
+		return NULL;
+
+	f = fopen("/etc/os-release", "r");
+	if (!f)
+		return NULL;
+
+	info = calloc(1, sizeof(*info));
+	if (!info)
+		goto out;
+
+	strncpy(info->kernel_release, u.release, FIELD_LEN);
+	strncpy(info->arch, u.machine, FIELD_LEN);
+
+	while ((read = getline(&line, &len, f)) != -1) {
+		if (sscanf(line, ID_FMT, info->id) == 1)
+			continue;
+
+		if (sscanf(line, VERSION_FMT, info->version) == 1) {
+			/* remove '"' suffix */
+			info->version[strlen(info->version) - 1] = 0;
+			continue;
+		}
+	}
+
+out:
+	free(line);
+	fclose(f);
+
+	return info;
+}
+
+#define INITIAL_BUF_SIZE (1024 * 1024 * 4) /* 4MB */
+
+/* adapted from https://zlib.net/zlib_how.html */
+static int
+inflate_gz(unsigned char *src, int src_size, unsigned char **dst, int *dst_size)
+{
+	size_t size = INITIAL_BUF_SIZE;
+	size_t next_size = size;
+	z_stream strm;
+	void *tmp;
+	int ret;
+
+	strm.zalloc = Z_NULL;
+	strm.zfree = Z_NULL;
+	strm.opaque = Z_NULL;
+	strm.avail_in = 0;
+	strm.next_in = Z_NULL;
+
+	ret = inflateInit2(&strm, 16 + MAX_WBITS);
+	if (ret != Z_OK)
+		return -EINVAL;
+
+	*dst = malloc(size);
+	if (!*dst)
+		return -ENOMEM;
+
+	strm.next_in = src;
+	strm.avail_in = src_size;
+
+	/* run inflate() on input until it returns Z_STREAM_END */
+	do {
+		strm.next_out = *dst + strm.total_out;
+		strm.avail_out = next_size;
+		ret = inflate(&strm, Z_NO_FLUSH);
+		if (ret != Z_OK && ret != Z_STREAM_END)
+			goto out_err;
+		/* we need more space */
+		if (strm.avail_out == 0) {
+			next_size = size;
+			size *= 2;
+			tmp = realloc(*dst, size);
+			if (!tmp) {
+				ret = -ENOMEM;
+				goto out_err;
+			}
+			*dst = tmp;
+		}
+	} while (ret != Z_STREAM_END);
+
+	*dst_size = strm.total_out;
+
+	/* clean up and return */
+	ret = inflateEnd(&strm);
+	if (ret != Z_OK) {
+		ret = -EINVAL;
+		goto out_err;
+	}
+	return 0;
+
+out_err:
+	free(*dst);
+	*dst = NULL;
+	return ret;
+}
+
+/* tar header from https://github.com/tklauser/libtar/blob/v1.2.20/lib/libtar.h#L39-L60 */
+struct tar_header {
+	char name[100];
+	char mode[8];
+	char uid[8];
+	char gid[8];
+	char size[12];
+	char mtime[12];
+	char chksum[8];
+	char typeflag;
+	char linkname[100];
+	char magic[6];
+	char version[2];
+	char uname[32];
+	char gname[32];
+	char devmajor[8];
+	char devminor[8];
+	char prefix[155];
+	char padding[12];
+};
+
+static char *tar_file_start(struct tar_header *tar, const char *name, int *length)
+{
+	while (tar->name[0]) {
+		sscanf(tar->size, "%o", length);
+		if (!strcmp(tar->name, name))
+			return (char *)(tar + 1);
+		tar += 1 + (*length + 511)/512;
+	}
+	return NULL;
+}
+
+int ensure_core_btf(struct bpf_object_open_opts *opts)
+{
+	char name_fmt[] = "./%s/%s/%s/%s.btf";
+	char btf_path[] = "/tmp/bcc-libbpf-tools.btf.XXXXXX";
+	struct os_info *info = NULL;
+	unsigned char *dst_buf = NULL;
+	char *file_start;
+	int dst_size = 0;
+	char name[100];
+	FILE *dst = NULL;
+	int ret;
+
+	/* do nothing if the system provides BTF */
+	if (vmlinux_btf_exists())
+		return 0;
+
+	/* compiled without min core btfs */
+	if (!_binary_min_core_btfs_tar_gz_start)
+		return -EOPNOTSUPP;
+
+	info = get_os_info();
+	if (!info)
+		return -errno;
+
+	ret = mkstemp(btf_path);
+	if (ret < 0) {
+		ret = -errno;
+		goto out;
+	}
+
+	dst = fdopen(ret, "wb");
+	if (!dst) {
+		ret = -errno;
+		goto out;
+	}
+
+	ret = snprintf(name, sizeof(name), name_fmt, info->id, info->version,
+		       info->arch, info->kernel_release);
+	if (ret < 0 || ret == sizeof(name)) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = inflate_gz(_binary_min_core_btfs_tar_gz_start,
+			 _binary_min_core_btfs_tar_gz_end - _binary_min_core_btfs_tar_gz_start,
+			 &dst_buf, &dst_size);
+	if (ret < 0)
+		goto out;
+
+	ret = 0;
+	file_start = tar_file_start((struct tar_header *)dst_buf, name, &dst_size);
+	if (!file_start) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	if (fwrite(file_start, 1, dst_size, dst) != dst_size) {
+		ret = -ferror(dst);
+		goto out;
+	}
+
+	opts->btf_custom_path = strdup(btf_path);
+	if (!opts->btf_custom_path)
+		ret = -ENOMEM;
+
+out:
+	free(info);
+	fclose(dst);
+	free(dst_buf);
+
+	return ret;
+}
+
+void cleanup_core_btf(struct bpf_object_open_opts *opts) {
+	if (!opts)
+		return;
+
+	if (!opts->btf_custom_path)
+		return;
+
+	unlink(opts->btf_custom_path);
+	free((void *)opts->btf_custom_path);
+}
diff --git a/libbpf-tools/btf_helpers.h b/libbpf-tools/btf_helpers.h
new file mode 100644
index 0000000..5d43e5d
--- /dev/null
+++ b/libbpf-tools/btf_helpers.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+#ifndef __BTF_HELPERS_H
+#define __BTF_HELPERS_H
+
+#include <bpf/libbpf.h>
+
+int ensure_core_btf(struct bpf_object_open_opts *opts);
+void cleanup_core_btf(struct bpf_object_open_opts *opts);
+
+#endif /* __BTF_HELPERS_H */
diff --git a/libbpf-tools/cachestat.bpf.c b/libbpf-tools/cachestat.bpf.c
index e7719e2..285a33e 100644
--- a/libbpf-tools/cachestat.bpf.c
+++ b/libbpf-tools/cachestat.bpf.c
@@ -9,32 +9,82 @@
 __u64 mbd = 0;  	/* total of mark_buffer_dirty events */
 
 SEC("fentry/add_to_page_cache_lru")
-int BPF_PROG(add_to_page_cache_lru)
+int BPF_PROG(fentry_add_to_page_cache_lru)
 {
 	__sync_fetch_and_add(&misses, 1);
 	return 0;
 }
 
 SEC("fentry/mark_page_accessed")
-int BPF_PROG(mark_page_accessed)
+int BPF_PROG(fentry_mark_page_accessed)
 {
 	__sync_fetch_and_add(&total, 1);
 	return 0;
 }
 
 SEC("fentry/account_page_dirtied")
-int BPF_PROG(account_page_dirtied)
+int BPF_PROG(fentry_account_page_dirtied)
 {
 	__sync_fetch_and_add(&misses, -1);
 	return 0;
 }
 
 SEC("fentry/mark_buffer_dirty")
-int BPF_PROG(mark_buffer_dirty)
+int BPF_PROG(fentry_mark_buffer_dirty)
 {
 	__sync_fetch_and_add(&total, -1);
 	__sync_fetch_and_add(&mbd, 1);
 	return 0;
 }
 
+SEC("kprobe/add_to_page_cache_lru")
+int BPF_KPROBE(kprobe_add_to_page_cache_lru)
+{
+	__sync_fetch_and_add(&misses, 1);
+	return 0;
+}
+
+SEC("kprobe/mark_page_accessed")
+int BPF_KPROBE(kprobe_mark_page_accessed)
+{
+	__sync_fetch_and_add(&total, 1);
+	return 0;
+}
+
+SEC("kprobe/account_page_dirtied")
+int BPF_KPROBE(kprobe_account_page_dirtied)
+{
+	__sync_fetch_and_add(&misses, -1);
+	return 0;
+}
+
+SEC("kprobe/folio_account_dirtied")
+int BPF_KPROBE(kprobe_folio_account_dirtied)
+{
+	__sync_fetch_and_add(&misses, -1);
+	return 0;
+}
+
+SEC("kprobe/mark_buffer_dirty")
+int BPF_KPROBE(kprobe_mark_buffer_dirty)
+{
+	__sync_fetch_and_add(&total, -1);
+	__sync_fetch_and_add(&mbd, 1);
+	return 0;
+}
+
+SEC("tracepoint/writeback/writeback_dirty_folio")
+int tracepoint__writeback_dirty_folio(struct trace_event_raw_sys_enter* ctx)
+{
+	__sync_fetch_and_add(&misses, -1);
+	return 0;
+}
+
+SEC("tracepoint/writeback/writeback_dirty_page")
+int tracepoint__writeback_dirty_page(struct trace_event_raw_sys_enter* ctx)
+{
+	__sync_fetch_and_add(&misses, -1);
+	return 0;
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/cachestat.c b/libbpf-tools/cachestat.c
index 5556cfd..6ee17f8 100644
--- a/libbpf-tools/cachestat.c
+++ b/libbpf-tools/cachestat.c
@@ -2,7 +2,10 @@
 // Copyright (c) 2021 Wenbo Zhang
 //
 // Based on cachestat(8) from BCC by Brendan Gregg and Allan McAleavy.
-// 8-Mar-2021   Wenbo Zhang   Created this.
+//  8-Mar-2021   Wenbo Zhang   Created this.
+// 30-Jan-2023   Rong Tao      Add kprobe and use fentry_can_attach() decide
+//                             use fentry/kprobe
+// 15-Feb-2023   Rong Tao      Add tracepoint writeback_dirty_{page,folio}
 #include <argp.h>
 #include <signal.h>
 #include <stdio.h>
@@ -139,7 +142,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = cachestat_bpf__open();
@@ -153,13 +155,56 @@
 	 * in kernel commit 203a31516616 ("mm/writeback: Add __folio_mark_dirty()")
 	 */
 	if (fentry_can_attach("folio_account_dirtied", NULL)) {
-		err = bpf_program__set_attach_target(obj->progs.account_page_dirtied, 0,
+		err = bpf_program__set_attach_target(obj->progs.fentry_account_page_dirtied, 0,
 						     "folio_account_dirtied");
 		if (err) {
 			fprintf(stderr, "failed to set attach target\n");
 			goto cleanup;
 		}
 	}
+	if (kprobe_exists("folio_account_dirtied")) {
+		bpf_program__set_autoload(obj->progs.kprobe_account_page_dirtied, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_folio, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_page, false);
+	} else if (kprobe_exists("account_page_dirtied")) {
+		bpf_program__set_autoload(obj->progs.kprobe_folio_account_dirtied, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_folio, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_page, false);
+	} else if (tracepoint_exists("writeback", "writeback_dirty_folio")) {
+		bpf_program__set_autoload(obj->progs.kprobe_account_page_dirtied, false);
+		bpf_program__set_autoload(obj->progs.kprobe_folio_account_dirtied, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_page, false);
+	} else if (tracepoint_exists("writeback", "writeback_dirty_page")) {
+		bpf_program__set_autoload(obj->progs.kprobe_account_page_dirtied, false);
+		bpf_program__set_autoload(obj->progs.kprobe_folio_account_dirtied, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__writeback_dirty_folio, false);
+	}
+
+	/* It fallbacks to kprobes when kernel does not support fentry. */
+	if (fentry_can_attach("folio_account_dirtied", NULL)
+		|| fentry_can_attach("account_page_dirtied", NULL)) {
+		bpf_program__set_autoload(obj->progs.kprobe_account_page_dirtied, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_account_page_dirtied, false);
+	}
+
+	if (fentry_can_attach("add_to_page_cache_lru", NULL)) {
+		bpf_program__set_autoload(obj->progs.kprobe_add_to_page_cache_lru, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_add_to_page_cache_lru, false);
+	}
+
+	if (fentry_can_attach("mark_page_accessed", NULL)) {
+		bpf_program__set_autoload(obj->progs.kprobe_mark_page_accessed, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_mark_page_accessed, false);
+	}
+
+	if (fentry_can_attach("mark_buffer_dirty", NULL)) {
+		bpf_program__set_autoload(obj->progs.kprobe_mark_buffer_dirty, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_mark_buffer_dirty, false);
+	}
 
 	err = cachestat_bpf__load(obj);
 	if (err) {
diff --git a/libbpf-tools/capable.bpf.c b/libbpf-tools/capable.bpf.c
new file mode 100644
index 0000000..6673f78
--- /dev/null
+++ b/libbpf-tools/capable.bpf.c
@@ -0,0 +1,162 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Unique filtering based on
+// https://github.com/libbpf/libbpf-rs/tree/master/examples/capable
+//
+// Copyright 2022 Sony Group Corporation
+
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include "capable.h"
+
+#define MAX_ENTRIES	10240
+
+extern int LINUX_KERNEL_VERSION __kconfig;
+
+const volatile pid_t my_pid = -1;
+const volatile enum uniqueness unique_type = UNQ_OFF;
+const volatile bool kernel_stack = false;
+const volatile bool user_stack = false;
+const volatile bool filter_cg = false;
+const volatile pid_t targ_pid = -1;
+
+struct args_t {
+	int cap;
+	int cap_opt;
+};
+
+struct unique_key {
+	int cap;
+	u32 tgid;
+	u64 cgroupid;
+};
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, u64);
+	__type(value, struct args_t);
+} start SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__uint(key_size, sizeof(__u32));
+	__uint(value_size, sizeof(__u32));
+} events SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_STACK_TRACE);
+	__uint(key_size, sizeof(u32));
+} stackmap SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, struct key_t);
+	__type(value, struct cap_event);
+	__uint(max_entries, MAX_ENTRIES);
+} info SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, struct unique_key);
+	__type(value, u64);
+} seen SEC(".maps");
+
+SEC("kprobe/cap_capable")
+int BPF_KPROBE(kprobe__cap_capable_entry, const struct cred *cred, struct user_namespace *targ_ns, int cap, int cap_opt)
+{
+	__u32 pid;
+	__u64 pid_tgid;
+
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	pid_tgid = bpf_get_current_pid_tgid();
+	pid = pid_tgid >> 32;
+
+	if (pid == my_pid)
+		return 0;
+
+	if (targ_pid != -1 && targ_pid != pid)
+		return 0;
+
+	struct args_t args = {};
+	args.cap = cap;
+	args.cap_opt = cap_opt;
+	bpf_map_update_elem(&start, &pid_tgid, &args, 0);
+
+	return 0;
+}
+
+SEC("kretprobe/cap_capable")
+int BPF_KRETPROBE(kprobe__cap_capable_exit)
+{
+	__u64 pid_tgid;
+	struct args_t *ap;
+	struct key_t i_key;
+
+	pid_tgid = bpf_get_current_pid_tgid();
+	ap = bpf_map_lookup_elem(&start, &pid_tgid);
+	if (!ap)
+		return 0;   /* missed entry */
+
+	bpf_map_delete_elem(&start, &pid_tgid);
+
+	struct cap_event event = {};
+	event.pid = pid_tgid >> 32;
+	event.tgid = pid_tgid;
+	event.cap = ap->cap;
+	event.uid = bpf_get_current_uid_gid();
+	bpf_get_current_comm(&event.task, sizeof(event.task));
+	event.ret = PT_REGS_RC(ctx);
+
+	if (LINUX_KERNEL_VERSION >= KERNEL_VERSION(5, 1, 0)) {
+		/* @opts: Bitmask of options defined in include/linux/security.h */
+		event.audit = (ap->cap_opt & 0b10) == 0;
+		event.insetid = (ap->cap_opt & 0b100) != 0;
+	} else {
+		event.audit = ap->cap_opt;
+		event.insetid = -1;
+	}
+
+	if (unique_type) {
+		struct unique_key key = {.cap = ap->cap};
+		if (unique_type == UNQ_CGROUP)
+			key.cgroupid = bpf_get_current_cgroup_id();
+		else
+			key.tgid = pid_tgid;
+
+		if (bpf_map_lookup_elem(&seen, &key) != NULL)
+			return 0;
+
+		u64 zero = 0;
+		bpf_map_update_elem(&seen, &key, &zero, 0);
+	}
+
+	if (kernel_stack || user_stack) {
+		i_key.pid = pid_tgid >> 32;
+		i_key.tgid = pid_tgid;
+
+		i_key.kern_stack_id = i_key.user_stack_id = -1;
+		if (user_stack)
+			i_key.user_stack_id = bpf_get_stackid(ctx, &stackmap, BPF_F_USER_STACK);
+		if (kernel_stack)
+			i_key.kern_stack_id = bpf_get_stackid(ctx, &stackmap, 0);
+
+		bpf_map_update_elem(&info, &i_key, &event, BPF_NOEXIST);
+	}
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+
+	return 0;
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/capable.c b/libbpf-tools/capable.c
new file mode 100644
index 0000000..84cf6a2
--- /dev/null
+++ b/libbpf-tools/capable.c
@@ -0,0 +1,415 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+// Based on capable(8) from BCC by Brendan Gregg.
+//
+// Copyright 2022 Sony Group Corporation
+
+#include <argp.h>
+#include <signal.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <bpf/bpf.h>
+#include "capable.h"
+#include "capable.skel.h"
+#include "trace_helpers.h"
+
+#define PERF_BUFFER_PAGES	16
+#define PERF_POLL_TIMEOUT_MS	100
+
+static struct env {
+	bool	verbose;
+	char	*cgroupspath;
+	bool	cg;
+	bool	extra_fields;
+	bool	user_stack;
+	bool	kernel_stack;
+	bool	unique;
+	char	*unique_type;
+	int	stack_storage_size;
+	int	perf_max_stack_depth;
+	pid_t	pid;
+} env = {
+	.pid = -1,
+	.stack_storage_size = 1024,
+	.perf_max_stack_depth = 127,
+	.unique = false,
+};
+
+const char *cap_name[] = {
+	[0] = "CAP_CHOWN",
+	[1] = "CAP_DAC_OVERRIDE",
+	[2] = "CAP_DAC_READ_SEARCH",
+	[3] = "CAP_FOWNER",
+	[4] = "CAP_FSETID",
+	[5] = "CAP_KILL",
+	[6] = "CAP_SETGID",
+	[7] = "CAP_SETUID",
+	[8] = "CAP_SETPCAP",
+	[9] = "CAP_LINUX_IMMUTABLE",
+	[10] = "CAP_NET_BIND_SERVICE",
+	[11] = "CAP_NET_BROADCAST",
+	[12] = "CAP_NET_ADMIN",
+	[13] = "CAP_NET_RAW",
+	[14] = "CAP_IPC_LOCK",
+	[15] = "CAP_IPC_OWNER",
+	[16] = "CAP_SYS_MODULE",
+	[17] = "CAP_SYS_RAWIO",
+	[18] = "CAP_SYS_CHROOT",
+	[19] = "CAP_SYS_PTRACE",
+	[20] = "CAP_SYS_PACCT",
+	[21] = "CAP_SYS_ADMIN",
+	[22] = "CAP_SYS_BOOT",
+	[23] = "CAP_SYS_NICE",
+	[24] = "CAP_SYS_RESOURCE",
+	[25] = "CAP_SYS_TIME",
+	[26] = "CAP_SYS_TTY_CONFIG",
+	[27] = "CAP_MKNOD",
+	[28] = "CAP_LEASE",
+	[29] = "CAP_AUDIT_WRITE",
+	[30] = "CAP_AUDIT_CONTROL",
+	[31] = "CAP_SETFCAP",
+	[32] = "CAP_MAC_OVERRIDE",
+	[33] = "CAP_MAC_ADMIN",
+	[34] = "CAP_SYSLOG",
+	[35] = "CAP_WAKE_ALARM",
+	[36] = "CAP_BLOCK_SUSPEND",
+	[37] = "CAP_AUDIT_READ",
+	[38] = "CAP_PERFMON",
+	[39] = "CAP_BPF",
+	[40] = "CAP_CHECKPOINT_RESTORE"
+};
+
+static volatile sig_atomic_t exiting = 0;
+struct syms_cache *syms_cache = NULL;
+struct ksyms *ksyms = NULL;
+int ifd, sfd;
+
+const char *argp_program_version = "capable 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace security capability checks (cap_capable()).\n"
+"\n"
+"USAGE: capable [--help] [-p PID | -c CG | -K | -U | -x] [-u TYPE]\n"
+"[--perf-max-stack-depth] [--stack-storage-size]\n"
+"\n"
+"EXAMPLES:\n"
+"    capable                  # Trace capability checks\n"
+"    capable -p 185           # Trace this PID only\n"
+"    capable -c CG            # Trace process under cgroupsPath CG\n"
+"    capable -K               # Add kernel stacks to trace\n"
+"    capable -x               # Extra fields: show TID and INSETID columns\n"
+"    capable -U               # Add user-space stacks to trace\n"
+"    capable -u TYPE          # Print unique output for TYPE=[pid | cgroup] (default:off)\n";
+
+#define OPT_PERF_MAX_STACK_DEPTH	1 /* --perf-max-stack-depth */
+#define OPT_STACK_STORAGE_SIZE		2 /* --stack-storage-size */
+
+static const struct argp_option opts[] = {
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "pid", 'p', "PID", 0, "Trace this PID only" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
+	{ "kernel-stack", 'K', NULL, 0, "output kernel stack trace" },
+	{ "user-stack", 'U', NULL, 0, "output user stack trace" },
+	{ "extra-fields", 'x', NULL, 0, "extra fields: show TID and INSETID columns" },
+	{ "unique", 'u', "off", 0, "Print unique output for <pid> or <cgroup> (default:off)" },
+	{ "perf-max-stack-depth", OPT_PERF_MAX_STACK_DEPTH,
+	  "PERF-MAX-STACK-DEPTH", 0, "the limit for both kernel and user stack traces (default 127)" },
+	{ "stack-storage-size", OPT_STACK_STORAGE_SIZE, "STACK-STORAGE-SIZE", 0,
+	  "the number of unique stack traces that can be stored and displayed (default 1024)" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		env.verbose = true;
+		break;
+	case 'p':
+		errno = 0;
+		env.pid = strtol(arg, NULL, 10);
+		if (errno || env.pid == 0) {
+			fprintf(stderr, "invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
+	case 'U':
+		env.user_stack = true;
+		break;
+	case 'K':
+		env.kernel_stack = true;
+		break;
+	case 'x':
+		env.extra_fields = true;
+		break;
+	case 'u':
+		env.unique_type = arg;
+		env.unique = true;
+		break;
+	case OPT_PERF_MAX_STACK_DEPTH:
+		errno = 0;
+		env.perf_max_stack_depth = strtol(arg, NULL, 10);
+		if (errno || env.perf_max_stack_depth == 0) {
+			fprintf(stderr, "invalid perf max stack depth: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case OPT_STACK_STORAGE_SIZE:
+		errno = 0;
+		env.stack_storage_size = strtol(arg, NULL, 10);
+		if (errno || env.stack_storage_size == 0) {
+			fprintf(stderr, "invalid stack storage size: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !env.verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static void print_map(struct ksyms *ksyms, struct syms_cache *syms_cache)
+{
+	struct key_t lookup_key = {}, next_key;
+	const struct ksym *ksym;
+	const struct syms *syms;
+	const struct sym *sym;
+	int err, i;
+	unsigned long *ip;
+	struct cap_event val;
+
+	ip = calloc(env.perf_max_stack_depth, sizeof(*ip));
+	if (!ip) {
+		fprintf(stderr, "failed to alloc ip\n");
+		return;
+	}
+
+	while (!bpf_map_get_next_key(ifd, &lookup_key, &next_key)) {
+		err = bpf_map_lookup_elem(ifd, &next_key, &val);
+		if (err < 0) {
+			fprintf(stderr, "failed to lookup info: %d\n", err);
+			goto cleanup;
+		}
+		lookup_key = next_key;
+
+		if (env.kernel_stack) {
+			if (bpf_map_lookup_elem(sfd, &next_key.kern_stack_id, ip) != 0)
+				fprintf(stderr, "    [Missed Kernel Stack]\n");
+			for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++) {
+				ksym = ksyms__map_addr(ksyms, ip[i]);
+				printf("    %s\n", ksym ? ksym->name : "Unknown");
+			}
+		}
+
+		if (env.user_stack) {
+			if (next_key.user_stack_id == -1)
+				goto skip_ustack;
+
+			if (bpf_map_lookup_elem(sfd, &next_key.user_stack_id, ip) != 0) {
+				fprintf(stderr, "    [Missed User Stack]\n");
+				continue;
+			}
+
+			syms = syms_cache__get_syms(syms_cache, next_key.tgid);
+			if (!syms) {
+				fprintf(stderr, "failed to get syms\n");
+				goto skip_ustack;
+			}
+			for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++) {
+				sym = syms__map_addr(syms, ip[i]);
+				if (sym)
+					printf("    %s\n", sym->name);
+				else
+					printf("    [unknown]\n");
+			}
+		}
+
+	skip_ustack:
+		printf("    %-16s %s (%d)\n", "-", val.task, next_key.pid);
+	}
+
+cleanup:
+	free(ip);
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	const struct cap_event *e = data;
+	struct tm *tm;
+	char ts[32];
+	time_t t;
+
+	time(&t);
+	tm = localtime(&t);
+	strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+
+	char *verdict = "deny";
+	if (!e->ret)
+		verdict = "allow";
+
+	if (env.extra_fields)
+		printf("%-8s %-5d %-7d %-7d %-16s %-7d %-20s %-7d %-7s %-7d\n", ts, e->uid, e->pid, e->tgid, e->task, e->cap, cap_name[e->cap], e->audit, verdict, e->insetid);
+	else
+		printf("%-8s %-5d %-7d %-16s %-7d %-20s %-7d %-7s\n", ts, e->uid, e->pid, e->task, e->cap, cap_name[e->cap], e->audit, verdict);
+
+	print_map(ksyms, syms_cache);
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	fprintf(stderr, "lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+
+	struct capable_bpf *obj;
+	struct perf_buffer *pb = NULL;
+	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
+	enum uniqueness uniqueness_type = UNQ_OFF;
+	pid_t my_pid = -1;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	if (env.unique) {
+		if (strcmp(env.unique_type, "pid") == 0) {
+			uniqueness_type = UNQ_PID;
+		} else if (strcmp(env.unique_type, "cgroup") == 0) {
+			uniqueness_type = UNQ_CGROUP;
+		} else {
+			fprintf(stderr, "Unknown unique type %s\n", env.unique_type);
+			return -1;
+		}
+	}
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = capable_bpf__open();
+	if (!obj) {
+		fprintf(stderr, "failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->targ_pid = env.pid;
+	obj->rodata->filter_cg = env.cg;
+	obj->rodata->user_stack = env.user_stack;
+	obj->rodata->kernel_stack = env.kernel_stack;
+	obj->rodata->unique_type = uniqueness_type;
+
+	my_pid = getpid();
+	obj->rodata->my_pid = my_pid;
+
+	bpf_map__set_value_size(obj->maps.stackmap, env.perf_max_stack_depth * sizeof(unsigned long));
+	bpf_map__set_max_entries(obj->maps.stackmap, env.stack_storage_size);
+
+	err = capable_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
+	ksyms = ksyms__load();
+	if (!ksyms) {
+		fprintf(stderr, "failed to load kallsyms\n");
+		goto cleanup;
+	}
+	syms_cache = syms_cache__new(0);
+	if (!syms_cache) {
+		fprintf(stderr, "failed to create syms_cache\n");
+		goto cleanup;
+	}
+
+	ifd = bpf_map__fd(obj->maps.info);
+	sfd = bpf_map__fd(obj->maps.stackmap);
+
+	err = capable_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
+					handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		err = -errno;
+		fprintf(stderr, "failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		fprintf(stderr, "can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	if (env.extra_fields)
+		printf("%-8s %-5s %-7s %-7s %-16s %-7s %-20s %-7s %-7s %-7s\n", "TIME", "UID", "PID", "TID", "COMM", "CAP", "NAME", "AUDIT", "VERDICT", "INSETID");
+	else
+		printf("%-8s %-5s %-7s %-16s %-7s %-20s %-7s %-7s\n", "TIME", "UID", "PID", "COMM", "CAP", "NAME", "AUDIT", "VERDICT");
+
+	/* main: poll */
+	while (!exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	capable_bpf__destroy(obj);
+	syms_cache__free(syms_cache);
+	ksyms__free(ksyms);
+	if (cgfd > 0)
+		close(cgfd);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/capable.h b/libbpf-tools/capable.h
new file mode 100644
index 0000000..960e7f1
--- /dev/null
+++ b/libbpf-tools/capable.h
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+//
+// Copyright 2022 Sony Group Corporation
+
+#ifndef __CAPABLE_H
+#define __CAPABLE_H
+
+#define TASK_COMM_LEN	16
+
+struct cap_event {
+	__u32	pid;
+	__u32	cap;
+	gid_t	tgid;
+	uid_t	uid;
+	int	audit;
+	int	insetid;
+	int	ret;
+	char	task[TASK_COMM_LEN];
+};
+
+struct key_t {
+	__u32	pid;
+	__u32	tgid;
+	int	user_stack_id;
+	int	kern_stack_id;
+};
+
+enum uniqueness {
+	UNQ_OFF, UNQ_PID, UNQ_CGROUP
+};
+
+#endif /* __CAPABLE_H */
diff --git a/libbpf-tools/compat.bpf.h b/libbpf-tools/compat.bpf.h
new file mode 100644
index 0000000..45dd2f7
--- /dev/null
+++ b/libbpf-tools/compat.bpf.h
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2022 Hengqi Chen */
+
+#ifndef __COMPAT_BPF_H
+#define __COMPAT_BPF_H
+
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+
+#define MAX_EVENT_SIZE		10240
+#define RINGBUF_SIZE		(1024 * 256)
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
+	__uint(max_entries, 1);
+	__uint(key_size, sizeof(__u32));
+	__uint(value_size, MAX_EVENT_SIZE);
+} heap SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_RINGBUF);
+	__uint(max_entries, RINGBUF_SIZE);
+} events SEC(".maps");
+
+static __always_inline void *reserve_buf(__u64 size)
+{
+	static const int zero = 0;
+
+	if (bpf_core_type_exists(struct bpf_ringbuf))
+		return bpf_ringbuf_reserve(&events, size, 0);
+
+	return bpf_map_lookup_elem(&heap, &zero);
+}
+
+static __always_inline long submit_buf(void *ctx, void *buf, __u64 size)
+{
+	if (bpf_core_type_exists(struct bpf_ringbuf)) {
+		bpf_ringbuf_submit(buf, 0);
+		return 0;
+	}
+
+	return bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, buf, size);
+}
+
+#endif /* __COMPAT_BPF_H */
diff --git a/libbpf-tools/compat.c b/libbpf-tools/compat.c
new file mode 100644
index 0000000..7d932ef
--- /dev/null
+++ b/libbpf-tools/compat.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2022 Hengqi Chen */
+
+#include "compat.h"
+#include "trace_helpers.h"
+#include <stdlib.h>
+#include <errno.h>
+#include <bpf/libbpf.h>
+
+#define PERF_BUFFER_PAGES	64
+
+struct bpf_buffer {
+	struct bpf_map *events;
+	void *inner;
+	bpf_buffer_sample_fn fn;
+	void *ctx;
+	int type;
+};
+
+static void perfbuf_sample_fn(void *ctx, int cpu, void *data, __u32 size)
+{
+	struct bpf_buffer *buffer = ctx;
+	bpf_buffer_sample_fn fn;
+
+	fn = buffer->fn;
+	if (!fn)
+		return;
+
+	(void)fn(buffer->ctx, data, size);
+}
+
+struct bpf_buffer *bpf_buffer__new(struct bpf_map *events, struct bpf_map *heap)
+{
+	struct bpf_buffer *buffer;
+	bool use_ringbuf;
+	int type;
+
+	use_ringbuf = probe_ringbuf();
+	if (use_ringbuf) {
+		bpf_map__set_autocreate(heap, false);
+		type = BPF_MAP_TYPE_RINGBUF;
+	} else {
+		bpf_map__set_type(events, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+		bpf_map__set_key_size(events, sizeof(int));
+		bpf_map__set_value_size(events, sizeof(int));
+		type = BPF_MAP_TYPE_PERF_EVENT_ARRAY;
+	}
+
+	buffer = calloc(1, sizeof(*buffer));
+	if (!buffer) {
+		errno = ENOMEM;
+		return NULL;
+	}
+
+	buffer->events = events;
+	buffer->type = type;
+	return buffer;
+}
+
+int bpf_buffer__open(struct bpf_buffer *buffer, bpf_buffer_sample_fn sample_cb,
+		     bpf_buffer_lost_fn lost_cb, void *ctx)
+{
+	int fd, type;
+	void *inner;
+
+	fd = bpf_map__fd(buffer->events);
+	type = buffer->type;
+
+	switch (type) {
+	case BPF_MAP_TYPE_PERF_EVENT_ARRAY:
+		buffer->fn = sample_cb;
+		buffer->ctx = ctx;
+		inner = perf_buffer__new(fd, PERF_BUFFER_PAGES, perfbuf_sample_fn, lost_cb, buffer, NULL);
+		break;
+	case BPF_MAP_TYPE_RINGBUF:
+		inner = ring_buffer__new(fd, sample_cb, ctx, NULL);
+		break;
+	default:
+		return 0;
+	}
+
+	if (!inner)
+		return -errno;
+
+	buffer->inner = inner;
+	return 0;
+}
+
+int bpf_buffer__poll(struct bpf_buffer *buffer, int timeout_ms)
+{
+	switch (buffer->type) {
+	case BPF_MAP_TYPE_PERF_EVENT_ARRAY:
+		return perf_buffer__poll(buffer->inner, timeout_ms);
+	case BPF_MAP_TYPE_RINGBUF:
+		return ring_buffer__poll(buffer->inner, timeout_ms);
+	default:
+		return -EINVAL;
+	}
+}
+
+void bpf_buffer__free(struct bpf_buffer *buffer)
+{
+	if (!buffer)
+		return;
+
+	switch (buffer->type) {
+	case BPF_MAP_TYPE_PERF_EVENT_ARRAY:
+		perf_buffer__free(buffer->inner);
+		break;
+	case BPF_MAP_TYPE_RINGBUF:
+		ring_buffer__free(buffer->inner);
+		break;
+	}
+	free(buffer);
+}
diff --git a/libbpf-tools/compat.h b/libbpf-tools/compat.h
new file mode 100644
index 0000000..7ab0e6c
--- /dev/null
+++ b/libbpf-tools/compat.h
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2022 Hengqi Chen */
+
+#ifndef __COMPAT_H
+#define __COMPAT_H
+
+#include <stdlib.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <linux/bpf.h>
+
+#define POLL_TIMEOUT_MS 100
+
+struct bpf_buffer;
+struct bpf_map;
+
+typedef int (*bpf_buffer_sample_fn)(void *ctx, void *data, size_t size);
+typedef void (*bpf_buffer_lost_fn)(void *ctx, int cpu, __u64 cnt);
+
+struct bpf_buffer *bpf_buffer__new(struct bpf_map *events, struct bpf_map *heap);
+int bpf_buffer__open(struct bpf_buffer *buffer, bpf_buffer_sample_fn sample_cb,
+		     bpf_buffer_lost_fn lost_cb, void *ctx);
+int bpf_buffer__poll(struct bpf_buffer *, int timeout_ms);
+void bpf_buffer__free(struct bpf_buffer *);
+
+/* taken from libbpf */
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
+static inline void *libbpf_reallocarray(void *ptr, size_t nmemb, size_t size)
+{
+	size_t total;
+
+#if __has_builtin(__builtin_mul_overflow)
+	if (__builtin_mul_overflow(nmemb, size, &total))
+		return NULL;
+#else
+	if (size == 0 || nmemb > ULONG_MAX / size)
+		return NULL;
+	total = nmemb * size;
+#endif
+	return realloc(ptr, total);
+}
+
+#endif /* __COMPAT_H */
diff --git a/libbpf-tools/core_fixes.bpf.h b/libbpf-tools/core_fixes.bpf.h
index 762445e..84cb7f1 100644
--- a/libbpf-tools/core_fixes.bpf.h
+++ b/libbpf-tools/core_fixes.bpf.h
@@ -13,17 +13,240 @@
  * see:
  *     https://github.com/torvalds/linux/commit/2f064a59a1
  */
+struct task_struct___o {
+	volatile long int state;
+} __attribute__((preserve_access_index));
+
 struct task_struct___x {
 	unsigned int __state;
-};
+} __attribute__((preserve_access_index));
 
-static __s64 get_task_state(void *task)
+static __always_inline __s64 get_task_state(void *task)
 {
 	struct task_struct___x *t = task;
 
 	if (bpf_core_field_exists(t->__state))
-		return t->__state;
-	return ((struct task_struct *)task)->state;
+		return BPF_CORE_READ(t, __state);
+	return BPF_CORE_READ((struct task_struct___o *)task, state);
+}
+
+/**
+ * commit 309dca309fc3 ("block: store a block_device pointer in struct bio")
+ * adds a new member bi_bdev which is a pointer to struct block_device
+ * see:
+ *     https://github.com/torvalds/linux/commit/309dca309fc3
+ */
+struct bio___o {
+	struct gendisk *bi_disk;
+} __attribute__((preserve_access_index));
+
+struct bio___x {
+	struct block_device *bi_bdev;
+} __attribute__((preserve_access_index));
+
+static __always_inline struct gendisk *get_gendisk(void *bio)
+{
+	struct bio___x *b = bio;
+
+	if (bpf_core_field_exists(b->bi_bdev))
+		return BPF_CORE_READ(b, bi_bdev, bd_disk);
+	return BPF_CORE_READ((struct bio___o *)bio, bi_disk);
+}
+
+/**
+ * commit d5869fdc189f ("block: introduce block_rq_error tracepoint")
+ * adds a new tracepoint block_rq_error and it shares the same arguments
+ * with tracepoint block_rq_complete. As a result, the kernel BTF now has
+ * a `struct trace_event_raw_block_rq_completion` instead of
+ * `struct trace_event_raw_block_rq_complete`.
+ * see:
+ *     https://github.com/torvalds/linux/commit/d5869fdc189f
+ */
+struct trace_event_raw_block_rq_complete___x {
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+} __attribute__((preserve_access_index));
+
+struct trace_event_raw_block_rq_completion___x {
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+} __attribute__((preserve_access_index));
+
+static __always_inline bool has_block_rq_completion()
+{
+	if (bpf_core_type_exists(struct trace_event_raw_block_rq_completion___x))
+		return true;
+	return false;
+}
+
+/**
+ * commit d152c682f03c ("block: add an explicit ->disk backpointer to the
+ * request_queue") and commit f3fa33acca9f ("block: remove the ->rq_disk
+ * field in struct request") make some changes to `struct request` and
+ * `struct request_queue`. Now, to get the `struct gendisk *` field in a CO-RE
+ * way, we need both `struct request` and `struct request_queue`.
+ * see:
+ *     https://github.com/torvalds/linux/commit/d152c682f03c
+ *     https://github.com/torvalds/linux/commit/f3fa33acca9f
+ */
+struct request_queue___x {
+	struct gendisk *disk;
+} __attribute__((preserve_access_index));
+
+struct request___x {
+	struct request_queue___x *q;
+	struct gendisk *rq_disk;
+} __attribute__((preserve_access_index));
+
+static __always_inline struct gendisk *get_disk(void *request)
+{
+	struct request___x *r = request;
+
+	if (bpf_core_field_exists(r->rq_disk))
+		return BPF_CORE_READ(r, rq_disk);
+	return BPF_CORE_READ(r, q, disk);
+}
+
+/**
+ * commit 6521f8917082("namei: prepare for idmapped mounts") add `struct
+ * user_namespace *mnt_userns` as vfs_create() and vfs_unlink() first argument.
+ * At the same time, struct renamedata {} add `struct user_namespace
+ * *old_mnt_userns` item. Now, to kprobe vfs_create()/vfs_unlink() in a CO-RE
+ * way, determine whether there is a `old_mnt_userns` field for `struct
+ * renamedata` to decide which input parameter of the vfs_create() to use as
+ * `dentry`.
+ * commit abf08576afe3("fs: port vfs_*() helpers to struct mnt_idmap") use
+ * `struct mnt_idmap *new_mnt_idmap` instead of `struct user_namespace *
+ * old_mnt_userns`.
+ * see:
+ *     https://github.com/torvalds/linux/commit/6521f8917082
+ *     https://github.com/torvalds/linux/commit/abf08576afe3
+ */
+struct renamedata___x {
+	struct user_namespace *old_mnt_userns;
+	struct new_mnt_idmap *new_mnt_idmap;
+} __attribute__((preserve_access_index));
+
+static __always_inline bool renamedata_has_old_mnt_userns_field(void)
+{
+	if (bpf_core_field_exists(struct renamedata___x, old_mnt_userns))
+		return true;
+	return false;
+}
+
+static __always_inline bool renamedata_has_new_mnt_idmap_field(void)
+{
+	if (bpf_core_field_exists(struct renamedata___x, new_mnt_idmap))
+		return true;
+	return false;
+}
+
+/**
+ * commit 3544de8ee6e4("mm, tracing: record slab name for kmem_cache_free()")
+ * replaces `trace_event_raw_kmem_free` with `trace_event_raw_kfree` and adds
+ * `tracepoint_kmem_cache_free` to enhance the information recorded for
+ * `kmem_cache_free`.
+ * see:
+ *     https://github.com/torvalds/linux/commit/3544de8ee6e4
+ */
+
+struct trace_event_raw_kmem_free___x {
+	const void *ptr;
+} __attribute__((preserve_access_index));
+
+struct trace_event_raw_kfree___x {
+	const void *ptr;
+} __attribute__((preserve_access_index));
+
+struct trace_event_raw_kmem_cache_free___x {
+	const void *ptr;
+} __attribute__((preserve_access_index));
+
+static __always_inline bool has_kfree()
+{
+	if (bpf_core_type_exists(struct trace_event_raw_kfree___x))
+		return true;
+	return false;
+}
+
+static __always_inline bool has_kmem_cache_free()
+{
+	if (bpf_core_type_exists(struct trace_event_raw_kmem_cache_free___x))
+		return true;
+	return false;
+}
+
+/**
+ * commit 11e9734bcb6a("mm/slab_common: unify NUMA and UMA version of
+ * tracepoints") drops kmem_alloc event class, rename kmem_alloc_node to
+ * kmem_alloc, so `trace_event_raw_kmem_alloc_node` is not existed any more.
+ * see:
+ *    https://github.com/torvalds/linux/commit/11e9734bcb6a
+ */
+struct trace_event_raw_kmem_alloc_node___x {
+	const void *ptr;
+	size_t bytes_alloc;
+} __attribute__((preserve_access_index));
+
+static __always_inline bool has_kmem_alloc_node(void)
+{
+	if (bpf_core_type_exists(struct trace_event_raw_kmem_alloc_node___x))
+		return true;
+	return false;
+}
+
+/**
+ * commit 2c1d697fb8ba("mm/slab_common: drop kmem_alloc & avoid dereferencing
+ * fields when not using") drops kmem_alloc event class. As a result,
+ * `trace_event_raw_kmem_alloc` is removed, `trace_event_raw_kmalloc` and
+ * `trace_event_raw_kmem_cache_alloc` are added.
+ * see:
+ *    https://github.com/torvalds/linux/commit/2c1d697fb8ba
+ */
+struct trace_event_raw_kmem_alloc___x {
+	const void *ptr;
+	size_t bytes_alloc;
+} __attribute__((preserve_access_index));
+
+struct trace_event_raw_kmalloc___x {
+	const void *ptr;
+	size_t bytes_alloc;
+} __attribute__((preserve_access_index));
+
+struct trace_event_raw_kmem_cache_alloc___x {
+	const void *ptr;
+	size_t bytes_alloc;
+} __attribute__((preserve_access_index));
+
+static __always_inline bool has_kmem_alloc(void)
+{
+	if (bpf_core_type_exists(struct trace_event_raw_kmem_alloc___x))
+		return true;
+	return false;
+}
+
+/**
+ * The bpf_get_socket_cookie helper is landed since kernel v4.12，
+ * but only available for tracing programs since kernel v5.12
+ * via commit c5dbb89fc2ac("bpf: Expose bpf_get_socket_cookie to tracing programs").
+ * Since the helper is used to provide a unique socket identifier,
+ * we could use the sock itself as the identifier if the helper is not available.
+ * Here, we use BPF_FUNC_check_mtu to check the availability of the helper
+ * since they are both introduced in v5.12.
+ *
+ * see:
+ *    https://github.com/torvalds/linux/commit/91b8270f2a4d
+ *    https://github.com/torvalds/linux/commit/c5dbb89fc2ac
+ *    https://github.com/torvalds/linux/commit/34b2021cc616
+ */
+static __always_inline __u64 get_sock_ident(struct sock *sk)
+{
+	if (bpf_core_enum_value_exists(enum bpf_func_id, BPF_FUNC_check_mtu)) {
+		return bpf_get_socket_cookie(sk);
+	}
+	return (__u64)sk;
 }
 
 #endif /* __CORE_FIXES_BPF_H */
diff --git a/libbpf-tools/cpudist.bpf.c b/libbpf-tools/cpudist.bpf.c
index 7c3f8ce..0901fca 100644
--- a/libbpf-tools/cpudist.bpf.c
+++ b/libbpf-tools/cpudist.bpf.c
@@ -10,6 +10,7 @@
 
 #define TASK_RUNNING	0
 
+const volatile bool filter_cg = false;
 const volatile bool targ_per_process = false;
 const volatile bool targ_per_thread = false;
 const volatile bool targ_offcpu = false;
@@ -17,6 +18,13 @@
 const volatile pid_t targ_tgid = -1;
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__type(key, u32);
 	__type(value, u64);
@@ -63,8 +71,7 @@
 		histp = bpf_map_lookup_elem(&hists, &id);
 		if (!histp)
 			return;
-		bpf_probe_read_kernel_str(&histp->comm, sizeof(task->comm),
-					  task->comm);
+		BPF_CORE_READ_STR_INTO(&histp->comm, task, comm);
 	}
 	delta = ts - *tsp;
 	if (targ_ms)
@@ -77,14 +84,15 @@
 	__sync_fetch_and_add(&histp->slots[slot], 1);
 }
 
-SEC("tp_btf/sched_switch")
-int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev,
-	     struct task_struct *next)
+static int handle_switch(struct task_struct *prev, struct task_struct *next)
 {
-	u32 prev_tgid = prev->tgid, prev_pid = prev->pid;
-	u32 tgid = next->tgid, pid = next->pid;
+	u32 prev_tgid = BPF_CORE_READ(prev, tgid), prev_pid = BPF_CORE_READ(prev, pid);
+	u32 tgid = BPF_CORE_READ(next, tgid), pid = BPF_CORE_READ(next, pid);
 	u64 ts = bpf_ktime_get_ns();
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	if (targ_offcpu) {
 		store_start(prev_tgid, prev_pid, ts);
 		update_hist(next, tgid, pid, ts);
@@ -96,4 +104,18 @@
 	return 0;
 }
 
+SEC("tp_btf/sched_switch")
+int BPF_PROG(sched_switch_btf, bool preempt, struct task_struct *prev,
+	     struct task_struct *next)
+{
+	return handle_switch(prev, next);
+}
+
+SEC("raw_tp/sched_switch")
+int BPF_PROG(sched_switch_tp, bool preempt, struct task_struct *prev,
+	     struct task_struct *next)
+{
+	return handle_switch(prev, next);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/cpudist.c b/libbpf-tools/cpudist.c
index f76d8a6..33e5615 100644
--- a/libbpf-tools/cpudist.c
+++ b/libbpf-tools/cpudist.c
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <time.h>
+#include <fcntl.h>
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "cpudist.h"
@@ -17,6 +18,8 @@
 static struct env {
 	time_t interval;
 	pid_t pid;
+	char *cgroupspath;
+	bool cg;
 	int times;
 	bool offcpu;
 	bool timestamp;
@@ -38,11 +41,12 @@
 const char argp_program_doc[] =
 "Summarize on-CPU time per task as a histogram.\n"
 "\n"
-"USAGE: cpudist [--help] [-O] [-T] [-m] [-P] [-L] [-p PID] [interval] [count]\n"
+"USAGE: cpudist [--help] [-O] [-T] [-m] [-P] [-L] [-p PID] [interval] [count] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    cpudist              # summarize on-CPU time as a histogram"
 "    cpudist -O           # summarize off-CPU time as a histogram"
+"    cpudist -c CG        # Trace process under cgroupsPath CG\n"
 "    cpudist 1 10         # print 1 second summaries, 10 times"
 "    cpudist -mT 1        # 1s summaries, milliseconds, and timestamps"
 "    cpudist -P           # show each PID separately"
@@ -52,6 +56,7 @@
 	{ "offcpu", 'O', NULL, 0, "Measure off-CPU time" },
 	{ "timestamp", 'T', NULL, 0, "Include timestamp on output" },
 	{ "milliseconds", 'm', NULL, 0, "Millisecond histogram" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
 	{ "pids", 'P', NULL, 0, "Print a histogram per process ID" },
 	{ "tids", 'L', NULL, 0, "Print a histogram per thread ID" },
 	{ "pid", 'p', "PID", 0, "Trace this PID only" },
@@ -74,6 +79,10 @@
 	case 'm':
 		env.milliseconds = true;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'p':
 		errno = 0;
 		env.pid = strtol(arg, NULL, 10);
@@ -192,12 +201,13 @@
 	struct tm *tm;
 	char ts[32];
 	time_t t;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = cpudist_bpf__open();
@@ -206,7 +216,13 @@
 		return 1;
 	}
 
+	if (probe_tp_btf("sched_switch"))
+		bpf_program__set_autoload(obj->progs.sched_switch_tp, false);
+	else
+		bpf_program__set_autoload(obj->progs.sched_switch_btf, false);
+
 	/* initialize global data (filtering options) */
+	obj->rodata->filter_cg = env.cg;
 	obj->rodata->targ_per_process = env.per_process;
 	obj->rodata->targ_per_thread = env.per_thread;
 	obj->rodata->targ_ms = env.milliseconds;
@@ -219,11 +235,11 @@
 		return 1;
 	}
 
-	bpf_map__resize(obj->maps.start, pid_max);
+	bpf_map__set_max_entries(obj->maps.start, pid_max);
 	if (!env.per_process && !env.per_thread)
-		bpf_map__resize(obj->maps.hists, 1);
+		bpf_map__set_max_entries(obj->maps.hists, 1);
 	else
-		bpf_map__resize(obj->maps.hists, pid_max);
+		bpf_map__set_max_entries(obj->maps.hists, pid_max);
 
 	err = cpudist_bpf__load(obj);
 	if (err) {
@@ -231,6 +247,21 @@
 		goto cleanup;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	err = cpudist_bpf__attach(obj);
 	if (err) {
 		fprintf(stderr, "failed to attach BPF programs\n");
@@ -265,6 +296,8 @@
 
 cleanup:
 	cpudist_bpf__destroy(obj);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/cpufreq.bpf.c b/libbpf-tools/cpufreq.bpf.c
index 88a1bd2..7b2514d 100644
--- a/libbpf-tools/cpufreq.bpf.c
+++ b/libbpf-tools/cpufreq.bpf.c
@@ -9,6 +9,14 @@
 __u32 freqs_mhz[MAX_CPU_NR] = {};
 static struct hist zero;
 struct hist syswide = {};
+bool filter_cg = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
 
 struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
@@ -28,6 +36,9 @@
 SEC("tp_btf/cpu_frequency")
 int BPF_PROG(cpu_frequency, unsigned int state, unsigned int cpu_id)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	if (cpu_id >= MAX_CPU_NR)
 		return 0;
 
@@ -44,6 +55,9 @@
 	struct hist *hist;
 	struct hkey hkey;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	if (cpu >= MAX_CPU_NR)
 		return 0;
 	clamp_umax(cpu, MAX_CPU_NR - 1);
diff --git a/libbpf-tools/cpufreq.c b/libbpf-tools/cpufreq.c
index c583956..918bc0b 100644
--- a/libbpf-tools/cpufreq.c
+++ b/libbpf-tools/cpufreq.c
@@ -11,6 +11,7 @@
 #include <unistd.h>
 #include <linux/perf_event.h>
 #include <asm/unistd.h>
+#include <fcntl.h>
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "cpufreq.h"
@@ -21,6 +22,8 @@
 	int duration;
 	int freq;
 	bool verbose;
+	char *cgroupspath;
+	bool cg;
 } env = {
 	.duration = -1,
 	.freq = 99,
@@ -32,16 +35,18 @@
 const char argp_program_doc[] =
 "Sampling CPU freq system-wide & by process. Ctrl-C to end.\n"
 "\n"
-"USAGE: cpufreq [--help] [-d DURATION] [-f FREQUENCY]\n"
+"USAGE: cpufreq [--help] [-d DURATION] [-f FREQUENCY] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    cpufreq         # sample CPU freq at 99HZ (default)\n"
 "    cpufreq -d 5    # sample for 5 seconds only\n"
+"    cpufreq -c CG   # Trace process under cgroupsPath CG\n"
 "    cpufreq -f 199  # sample CPU freq at 199HZ\n";
 
 static const struct argp_option opts[] = {
 	{ "duration", 'd', "DURATION", 0, "Duration to sample in seconds" },
 	{ "frequency", 'f', "FREQUENCY", 0, "Sample with a certain frequency" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
@@ -64,6 +69,10 @@
 			argp_usage(state);
 		}
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'f':
 		errno = 0;
 		env.freq = strtol(arg, NULL, 10);
@@ -123,13 +132,16 @@
 {
 }
 
-static int init_freqs_hmz(__u32 *freqs_mhz, int nr_cpus)
+static int init_freqs_mhz(__u32 *freqs_mhz, struct bpf_link *links[])
 {
 	char path[64];
 	FILE *f;
 	int i;
 
 	for (i = 0; i < nr_cpus; i++) {
+		if (!links[i]) {
+			continue;
+		}
 		snprintf(path, sizeof(path),
 			"/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq",
 			i);
@@ -146,6 +158,11 @@
 			fclose(f);
 			return -1;
 		}
+		/*
+		 * scaling_cur_freq is in kHz. To be handled with
+		 * a small data size, it's converted in mHz.
+		 */
+		freqs_mhz[i] /= 1000;
 		fclose(f);
 	}
 
@@ -186,12 +203,13 @@
 	struct bpf_link *links[MAX_CPU_NR] = {};
 	struct cpufreq_bpf *obj;
 	int err, i;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	nr_cpus = libbpf_num_possible_cpus();
@@ -217,15 +235,31 @@
 		goto cleanup;
 	}
 
-	err = init_freqs_hmz(obj->bss->freqs_mhz, nr_cpus);
-	if (err) {
-		fprintf(stderr, "failed to init freqs\n");
-		goto cleanup;
+	obj->bss->filter_cg = env.cg;
+
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
 	}
 
 	err = open_and_attach_perf_event(env.freq, obj->progs.do_sample, links);
 	if (err)
 		goto cleanup;
+	err = init_freqs_mhz(obj->bss->freqs_mhz, links);
+	if (err) {
+		fprintf(stderr, "failed to init freqs\n");
+		goto cleanup;
+	}
 
 	err = cpufreq_bpf__attach(obj);
 	if (err) {
@@ -250,6 +284,8 @@
 	for (i = 0; i < nr_cpus; i++)
 		bpf_link__destroy(links[i]);
 	cpufreq_bpf__destroy(obj);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/drsnoop.bpf.c b/libbpf-tools/drsnoop.bpf.c
index c364d18..759cfea 100644
--- a/libbpf-tools/drsnoop.bpf.c
+++ b/libbpf-tools/drsnoop.bpf.c
@@ -27,8 +27,7 @@
 	__uint(value_size, sizeof(u32));
 } events SEC(".maps");
 
-SEC("tp_btf/mm_vmscan_direct_reclaim_begin")
-int BPF_PROG(direct_reclaim_begin)
+static int handle_direct_reclaim_begin()
 {
 	u64 *vm_zone_stat_kaddrp = (u64*)vm_zone_stat_kaddr;
 	u64 id = bpf_get_current_pid_tgid();
@@ -44,16 +43,15 @@
 	piddata.ts = bpf_ktime_get_ns();
 	if (vm_zone_stat_kaddrp) {
 		bpf_probe_read_kernel(&piddata.nr_free_pages,
-			       sizeof(*vm_zone_stat_kaddrp),
-			       &vm_zone_stat_kaddrp[NR_FREE_PAGES]);
+				      sizeof(*vm_zone_stat_kaddrp),
+				      &vm_zone_stat_kaddrp[NR_FREE_PAGES]);
 	}
 
 	bpf_map_update_elem(&start, &pid, &piddata, 0);
 	return 0;
 }
 
-SEC("tp_btf/mm_vmscan_direct_reclaim_end")
-int BPF_PROG(direct_reclaim_end, unsigned long nr_reclaimed)
+static int handle_direct_reclaim_end(void *ctx, unsigned long nr_reclaimed)
 {
 	u64 id = bpf_get_current_pid_tgid();
 	struct piddata *piddatap;
@@ -91,4 +89,28 @@
 	return 0;
 }
 
+SEC("tp_btf/mm_vmscan_direct_reclaim_begin")
+int BPF_PROG(direct_reclaim_begin_btf)
+{
+	return handle_direct_reclaim_begin();
+}
+
+SEC("tp_btf/mm_vmscan_direct_reclaim_end")
+int BPF_PROG(direct_reclaim_end_btf, unsigned long nr_reclaimed)
+{
+	return handle_direct_reclaim_end(ctx, nr_reclaimed);
+}
+
+SEC("raw_tp/mm_vmscan_direct_reclaim_begin")
+int BPF_PROG(direct_reclaim_begin)
+{
+	return handle_direct_reclaim_begin();
+}
+
+SEC("raw_tp/mm_vmscan_direct_reclaim_end")
+int BPF_PROG(direct_reclaim_end, unsigned long nr_reclaimed)
+{
+	return handle_direct_reclaim_end(ctx, nr_reclaimed);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/drsnoop.c b/libbpf-tools/drsnoop.c
index 705db9a..97e0194 100644
--- a/libbpf-tools/drsnoop.c
+++ b/libbpf-tools/drsnoop.c
@@ -157,7 +157,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = drsnoop_bpf__open();
@@ -184,6 +183,14 @@
 		page_size = sysconf(_SC_PAGESIZE);
 	}
 
+	if (probe_tp_btf("mm_vmscan_direct_reclaim_begin")) {
+		bpf_program__set_autoload(obj->progs.direct_reclaim_begin, false);
+		bpf_program__set_autoload(obj->progs.direct_reclaim_end, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.direct_reclaim_begin_btf, false);
+		bpf_program__set_autoload(obj->progs.direct_reclaim_end_btf, false);
+	}
+
 	err = drsnoop_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
diff --git a/libbpf-tools/execsnoop.bpf.c b/libbpf-tools/execsnoop.bpf.c
index 3de5412..ee5832e 100644
--- a/libbpf-tools/execsnoop.bpf.c
+++ b/libbpf-tools/execsnoop.bpf.c
@@ -4,6 +4,7 @@
 #include <bpf/bpf_core_read.h>
 #include "execsnoop.h"
 
+const volatile bool filter_cg = false;
 const volatile bool ignore_failed = true;
 const volatile uid_t targ_uid = INVALID_UID;
 const volatile int max_args = DEFAULT_MAXARGS;
@@ -11,6 +12,13 @@
 static const struct event empty_event = {};
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, 10240);
 	__type(key, pid_t);
@@ -32,11 +40,15 @@
 {
 	u64 id;
 	pid_t pid, tgid;
-	unsigned int ret;
+	int ret;
 	struct event *event;
 	struct task_struct *task;
 	const char **args = (const char **)(ctx->args[1]);
 	const char *argp;
+
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	uid_t uid = (u32)bpf_get_current_uid_gid();
 	int i;
 
@@ -61,6 +73,9 @@
 	event->args_size = 0;
 
 	ret = bpf_probe_read_user_str(event->args, ARGSIZE, (const char*)ctx->args[0]);
+	if (ret < 0) {
+		return 0;
+	}
 	if (ret <= ARGSIZE) {
 		event->args_size += ret;
 	} else {
@@ -72,23 +87,23 @@
 	event->args_count++;
 	#pragma unroll
 	for (i = 1; i < TOTAL_MAX_ARGS && i < max_args; i++) {
-		bpf_probe_read_user(&argp, sizeof(argp), &args[i]);
-		if (!argp)
+		ret = bpf_probe_read_user(&argp, sizeof(argp), &args[i]);
+		if (ret < 0)
 			return 0;
 
 		if (event->args_size > LAST_ARG)
 			return 0;
 
 		ret = bpf_probe_read_user_str(&event->args[event->args_size], ARGSIZE, argp);
-		if (ret > ARGSIZE)
+		if (ret < 0)
 			return 0;
 
 		event->args_count++;
 		event->args_size += ret;
 	}
 	/* try to read one more argument to check if there is one */
-	bpf_probe_read_user(&argp, sizeof(argp), &args[max_args]);
-	if (!argp)
+	ret = bpf_probe_read_user(&argp, sizeof(argp), &args[max_args]);
+	if (ret < 0)
 		return 0;
 
 	/* pointer to max_args+1 isn't null, asume we have more arguments */
@@ -103,6 +118,10 @@
 	pid_t pid;
 	int ret;
 	struct event *event;
+
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	u32 uid = (u32)bpf_get_current_uid_gid();
 
 	if (valid_uid(targ_uid) && targ_uid != uid)
diff --git a/libbpf-tools/execsnoop.c b/libbpf-tools/execsnoop.c
index 3829481..6342550 100644
--- a/libbpf-tools/execsnoop.c
+++ b/libbpf-tools/execsnoop.c
@@ -8,15 +8,16 @@
 #include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "execsnoop.h"
 #include "execsnoop.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES   64
 #define PERF_POLL_TIMEOUT_MS	100
-#define NSEC_PRECISION (NSEC_PER_SEC / 1000)
 #define MAX_ARGS_KEY 259
 
 static volatile sig_atomic_t exiting = 0;
@@ -32,6 +33,8 @@
 	bool print_uid;
 	bool verbose;
 	int max_args;
+	char *cgroupspath;
+	bool cg;
 } env = {
 	.max_args = DEFAULT_MAXARGS,
 	.uid = INVALID_UID
@@ -45,7 +48,7 @@
 const char argp_program_doc[] =
 "Trace exec syscalls\n"
 "\n"
-"USAGE: execsnoop [-h] [-T] [-t] [-x] [-u UID] [-q] [-n NAME] [-l LINE] [-U]\n"
+"USAGE: execsnoop [-h] [-T] [-t] [-x] [-u UID] [-q] [-n NAME] [-l LINE] [-U] [-c CG]\n"
 "                 [--max-args MAX_ARGS]\n"
 "\n"
 "EXAMPLES:\n"
@@ -57,7 +60,8 @@
 "   ./execsnoop -t        # include timestamps\n"
 "   ./execsnoop -q        # add \"quotemarks\" around arguments\n"
 "   ./execsnoop -n main   # only print command lines containing \"main\"\n"
-"   ./execsnoop -l tpkg   # only print command where arguments contains \"tpkg\"";
+"   ./execsnoop -l tpkg   # only print command where arguments contains \"tpkg\""
+"   ./execsnoop -c CG     # Trace process under cgroupsPath CG\n";
 
 static const struct argp_option opts[] = {
 	{ "time", 'T', NULL, 0, "include time column on output (HH:MM:SS)" },
@@ -71,6 +75,7 @@
 	{ "max-args", MAX_ARGS_KEY, "MAX_ARGS", 0,
 		"maximum number of arguments parsed and displayed, defaults to 20" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path"},
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
@@ -92,6 +97,10 @@
 	case 'x':
 		env.fails = true;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'u':
 		errno = 0;
 		uid = strtol(arg, NULL, 10);
@@ -258,6 +267,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -266,15 +276,22 @@
 	struct perf_buffer *pb = NULL;
 	struct execsnoop_bpf *obj;
 	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = execsnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = execsnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -284,6 +301,7 @@
 	obj->rodata->ignore_failed = !env.fails;
 	obj->rodata->targ_uid = env.uid;
 	obj->rodata->max_args = env.max_args;
+	obj->rodata->filter_cg = env.cg;
 
 	err = execsnoop_bpf__load(obj);
 	if (err) {
@@ -291,6 +309,21 @@
 		goto cleanup;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	clock_gettime(CLOCK_MONOTONIC, &start_time);
 	err = execsnoop_bpf__attach(obj);
 	if (err) {
@@ -339,6 +372,9 @@
 cleanup:
 	perf_buffer__free(pb);
 	execsnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/exitsnoop.bpf.c b/libbpf-tools/exitsnoop.bpf.c
index 342fdc2..685451f 100644
--- a/libbpf-tools/exitsnoop.bpf.c
+++ b/libbpf-tools/exitsnoop.bpf.c
@@ -5,11 +5,19 @@
 #include <bpf/bpf_core_read.h>
 #include "exitsnoop.h"
 
+const volatile bool filter_cg = false;
 const volatile pid_t target_pid = 0;
 const volatile bool trace_failed_only = false;
 const volatile bool trace_by_process = true;
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
 	__uint(key_size, sizeof(__u32));
 	__uint(value_size, sizeof(__u32));
@@ -25,6 +33,9 @@
 	struct task_struct *task;
 	struct event event = {};
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	if (target_pid && target_pid != pid)
 		return 0;
 
diff --git a/libbpf-tools/exitsnoop.c b/libbpf-tools/exitsnoop.c
index bca9d4d..52125b8 100644
--- a/libbpf-tools/exitsnoop.c
+++ b/libbpf-tools/exitsnoop.c
@@ -13,11 +13,14 @@
 #include <signal.h>
 #include <string.h>
 #include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "exitsnoop.h"
 #include "exitsnoop.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES	16
@@ -32,20 +35,26 @@
 static bool trace_by_process = true;
 static bool verbose = false;
 
+static struct env {
+	char *cgroupspath;
+	bool cg;
+} env;
+
 const char *argp_program_version = "exitsnoop 0.1";
 const char *argp_program_bug_address =
 	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
 const char argp_program_doc[] =
 "Trace process termination.\n"
 "\n"
-"USAGE: exitsnoop [-h] [-t] [-x] [-p PID] [-T]\n"
+"USAGE: exitsnoop [-h] [-t] [-x] [-p PID] [-T] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    exitsnoop             # trace process exit events\n"
 "    exitsnoop -t          # include timestamps\n"
 "    exitsnoop -x          # trace error exits only\n"
 "    exitsnoop -p 1216     # only trace PID 1216\n"
-"    exitsnoop -T          # trace by thread\n";
+"    exitsnoop -T          # trace by thread\n"
+"    exitsnoop -c CG       # Trace process under cgroupsPath CG\n";
 
 static const struct argp_option opts[] = {
 	{ "timestamp", 't', NULL, 0, "Include timestamp on output" },
@@ -54,6 +63,7 @@
 	{ "threaded", 'T', NULL, 0, "Trace by thread." },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path"},
 	{},
 };
 
@@ -83,6 +93,10 @@
 	case 'v':
 		verbose = true;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'h':
 		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
 		break;
@@ -147,6 +161,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -155,15 +170,22 @@
 	struct perf_buffer *pb = NULL;
 	struct exitsnoop_bpf *obj;
 	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = exitsnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = exitsnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -172,6 +194,7 @@
 	obj->rodata->target_pid = target_pid;
 	obj->rodata->trace_failed_only = trace_failed_only;
 	obj->rodata->trace_by_process = trace_by_process;
+	obj->rodata->filter_cg = env.cg;
 
 	err = exitsnoop_bpf__load(obj);
 	if (err) {
@@ -179,6 +202,21 @@
 		goto cleanup;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	err = exitsnoop_bpf__attach(obj);
 	if (err) {
 		warn("failed to attach BPF programs: %d\n", err);
@@ -217,6 +255,9 @@
 cleanup:
 	perf_buffer__free(pb);
 	exitsnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/filelife.bpf.c b/libbpf-tools/filelife.bpf.c
index 98579b2..ecfe9e3 100644
--- a/libbpf-tools/filelife.bpf.c
+++ b/libbpf-tools/filelife.bpf.c
@@ -5,6 +5,10 @@
 #include <bpf/bpf_core_read.h>
 #include <bpf/bpf_tracing.h>
 #include "filelife.h"
+#include "core_fixes.bpf.h"
+
+/* linux: include/linux/fs.h */
+#define FMODE_CREATED	0x100000
 
 const volatile pid_t targ_tgid = 0;
 
@@ -22,7 +26,7 @@
 } events SEC(".maps");
 
 static __always_inline int
-probe_create(struct inode *dir, struct dentry *dentry)
+probe_create(struct dentry *dentry)
 {
 	u64 id = bpf_get_current_pid_tgid();
 	u32 tgid = id >> 32;
@@ -36,36 +40,85 @@
 	return 0;
 }
 
+/**
+ * In different kernel versions, function vfs_create() has two declarations,
+ * and their parameter lists are as follows:
+ *
+ * int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
+ *            bool want_excl);
+ * int vfs_create(struct user_namespace *mnt_userns, struct inode *dir,
+ *            struct dentry *dentry, umode_t mode, bool want_excl);
+ * int vfs_create(struct mnt_idmap *idmap, struct inode *dir,
+ *            struct dentry *dentry, umode_t mode, bool want_excl);
+ */
 SEC("kprobe/vfs_create")
-int BPF_KPROBE(vfs_create, struct inode *dir, struct dentry *dentry)
+int BPF_KPROBE(vfs_create, void *arg0, void *arg1, void *arg2)
 {
-	return probe_create(dir, dentry);
+	if (renamedata_has_old_mnt_userns_field()
+		|| renamedata_has_new_mnt_idmap_field())
+		return probe_create(arg2);
+	else
+		return probe_create(arg1);
+}
+
+SEC("kprobe/vfs_open")
+int BPF_KPROBE(vfs_open, struct path *path, struct file *file)
+{
+	struct dentry *dentry = BPF_CORE_READ(path, dentry);
+	int fmode = BPF_CORE_READ(file, f_mode);
+
+	if (!(fmode & FMODE_CREATED))
+		return 0;
+
+	return probe_create(dentry);
 }
 
 SEC("kprobe/security_inode_create")
 int BPF_KPROBE(security_inode_create, struct inode *dir,
 	     struct dentry *dentry)
 {
-	return probe_create(dir, dentry);
+	return probe_create(dentry);
 }
 
+/**
+ * In different kernel versions, function vfs_unlink() has two declarations,
+ * and their parameter lists are as follows:
+ *
+ * int vfs_unlink(struct inode *dir, struct dentry *dentry,
+ *        struct inode **delegated_inode);
+ * int vfs_unlink(struct user_namespace *mnt_userns, struct inode *dir,
+ *        struct dentry *dentry, struct inode **delegated_inode);
+ * int vfs_unlink(struct mnt_idmap *idmap, struct inode *dir,
+ *        struct dentry *dentry, struct inode **delegated_inode);
+ */
 SEC("kprobe/vfs_unlink")
-int BPF_KPROBE(vfs_unlink, struct inode *dir, struct dentry *dentry)
+int BPF_KPROBE(vfs_unlink, void *arg0, void *arg1, void *arg2)
 {
 	u64 id = bpf_get_current_pid_tgid();
 	struct event event = {};
 	const u8 *qs_name_ptr;
 	u32 tgid = id >> 32;
 	u64 *tsp, delta_ns;
+	bool has_arg = renamedata_has_old_mnt_userns_field()
+				|| renamedata_has_new_mnt_idmap_field();
 
-	tsp = bpf_map_lookup_elem(&start, &dentry);
+	tsp = has_arg
+		? bpf_map_lookup_elem(&start, &arg2)
+		: bpf_map_lookup_elem(&start, &arg1);
 	if (!tsp)
 		return 0;   // missed entry
 
 	delta_ns = bpf_ktime_get_ns() - *tsp;
-	bpf_map_delete_elem(&start, &dentry);
 
-	qs_name_ptr = BPF_CORE_READ(dentry, d_name.name);
+	if (has_arg)
+		bpf_map_delete_elem(&start, &arg2);
+	else
+		bpf_map_delete_elem(&start, &arg1);
+
+	qs_name_ptr = has_arg
+		? BPF_CORE_READ((struct dentry *)arg2, d_name.name)
+		: BPF_CORE_READ((struct dentry *)arg1, d_name.name);
+
 	bpf_probe_read_kernel_str(&event.file, sizeof(event.file), qs_name_ptr);
 	bpf_get_current_comm(&event.task, sizeof(event.task));
 	event.delta_ns = delta_ns;
diff --git a/libbpf-tools/filelife.c b/libbpf-tools/filelife.c
index ba6b944..ad1fca4 100644
--- a/libbpf-tools/filelife.c
+++ b/libbpf-tools/filelife.c
@@ -3,6 +3,8 @@
 //
 // Based on filelife(8) from BCC by Brendan Gregg & Allan McAleavy.
 // 20-Mar-2020   Wenbo Zhang   Created this.
+// 13-Nov-2022   Rong Tao      Check btf struct field for CO-RE and add vfs_open()
+// 23-Aug-2023   Rong Tao      Add vfs_* 'struct mnt_idmap' support.(CO-RE)
 #include <argp.h>
 #include <signal.h>
 #include <stdio.h>
@@ -14,6 +16,7 @@
 #include <bpf/bpf.h>
 #include "filelife.h"
 #include "filelife.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES	16
@@ -105,6 +108,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -118,10 +122,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = filelife_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = filelife_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -130,6 +139,9 @@
 	/* initialize global data (filtering options) */
 	obj->rodata->targ_tgid = env.pid;
 
+	if (!kprobe_exists("security_inode_create"))
+		bpf_program__set_autoload(obj->progs.security_inode_create, false);
+
 	err = filelife_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
@@ -172,6 +184,7 @@
 cleanup:
 	perf_buffer__free(pb);
 	filelife_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/filetop.c b/libbpf-tools/filetop.c
index 4e4554e..cf69836 100644
--- a/libbpf-tools/filetop.c
+++ b/libbpf-tools/filetop.c
@@ -20,6 +20,7 @@
 #include <bpf/bpf.h>
 #include "filetop.h"
 #include "filetop.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define warn(...) fprintf(stderr, __VA_ARGS__)
@@ -256,6 +257,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -268,10 +270,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = filetop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = filetop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -318,6 +325,7 @@
 
 cleanup:
 	filetop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/fsdist.bpf.c b/libbpf-tools/fsdist.bpf.c
index 052e4cd..1bf98e9 100644
--- a/libbpf-tools/fsdist.bpf.c
+++ b/libbpf-tools/fsdist.bpf.c
@@ -18,7 +18,7 @@
 	__type(value, __u64);
 } starts SEC(".maps");
 
-struct hist hists[MAX_OP] = {};
+struct hist hists[F_MAX_OP] = {};
 
 static int probe_entry()
 {
@@ -46,7 +46,7 @@
 	if (!tsp)
 		return 0;
 
-	if (op >= MAX_OP)
+	if (op >= F_MAX_OP)
 		goto cleanup;
 
 	delta = (__s64)(ts - *tsp);
@@ -77,7 +77,7 @@
 SEC("kretprobe/dummy_file_read")
 int BPF_KRETPROBE(file_read_exit)
 {
-	return probe_return(READ);
+	return probe_return(F_READ);
 }
 
 SEC("kprobe/dummy_file_write")
@@ -89,7 +89,7 @@
 SEC("kretprobe/dummy_file_write")
 int BPF_KRETPROBE(file_write_exit)
 {
-	return probe_return(WRITE);
+	return probe_return(F_WRITE);
 }
 
 SEC("kprobe/dummy_file_open")
@@ -101,7 +101,7 @@
 SEC("kretprobe/dummy_file_open")
 int BPF_KRETPROBE(file_open_exit)
 {
-	return probe_return(OPEN);
+	return probe_return(F_OPEN);
 }
 
 SEC("kprobe/dummy_file_sync")
@@ -113,7 +113,7 @@
 SEC("kretprobe/dummy_file_sync")
 int BPF_KRETPROBE(file_sync_exit)
 {
-	return probe_return(FSYNC);
+	return probe_return(F_FSYNC);
 }
 
 SEC("kprobe/dummy_getattr")
@@ -125,7 +125,7 @@
 SEC("kretprobe/dummy_getattr")
 int BPF_KRETPROBE(getattr_exit)
 {
-	return probe_return(GETATTR);
+	return probe_return(F_GETATTR);
 }
 
 SEC("fentry/dummy_file_read")
@@ -137,7 +137,7 @@
 SEC("fexit/dummy_file_read")
 int BPF_PROG(file_read_fexit)
 {
-	return probe_return(READ);
+	return probe_return(F_READ);
 }
 
 SEC("fentry/dummy_file_write")
@@ -149,7 +149,7 @@
 SEC("fexit/dummy_file_write")
 int BPF_PROG(file_write_fexit)
 {
-	return probe_return(WRITE);
+	return probe_return(F_WRITE);
 }
 
 SEC("fentry/dummy_file_open")
@@ -161,7 +161,7 @@
 SEC("fexit/dummy_file_open")
 int BPF_PROG(file_open_fexit)
 {
-	return probe_return(OPEN);
+	return probe_return(F_OPEN);
 }
 
 SEC("fentry/dummy_file_sync")
@@ -173,7 +173,7 @@
 SEC("fexit/dummy_file_sync")
 int BPF_PROG(file_sync_fexit)
 {
-	return probe_return(FSYNC);
+	return probe_return(F_FSYNC);
 }
 
 SEC("fentry/dummy_getattr")
@@ -185,7 +185,7 @@
 SEC("fexit/dummy_getattr")
 int BPF_PROG(getattr_fexit)
 {
-	return probe_return(GETATTR);
+	return probe_return(F_GETATTR);
 }
 
 char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/fsdist.c b/libbpf-tools/fsdist.c
index 88d1a09..c949d3a 100644
--- a/libbpf-tools/fsdist.c
+++ b/libbpf-tools/fsdist.c
@@ -24,6 +24,7 @@
 
 #include "fsdist.h"
 #include "fsdist.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define warn(...) fprintf(stderr, __VA_ARGS__)
@@ -38,44 +39,44 @@
 
 static struct fs_config {
 	const char *fs;
-	const char *op_funcs[MAX_OP];
+	const char *op_funcs[F_MAX_OP];
 } fs_configs[] = {
 	[BTRFS] = { "btrfs", {
-		[READ] = "btrfs_file_read_iter",
-		[WRITE] = "btrfs_file_write_iter",
-		[OPEN] = "btrfs_file_open",
-		[FSYNC] = "btrfs_sync_file",
-		[GETATTR] = NULL, /* not supported */
+		[F_READ] = "btrfs_file_read_iter",
+		[F_WRITE] = "btrfs_file_write_iter",
+		[F_OPEN] = "btrfs_file_open",
+		[F_FSYNC] = "btrfs_sync_file",
+		[F_GETATTR] = NULL, /* not supported */
 	}},
 	[EXT4] = { "ext4", {
-		[READ] = "ext4_file_read_iter",
-		[WRITE] = "ext4_file_write_iter",
-		[OPEN] = "ext4_file_open",
-		[FSYNC] = "ext4_sync_file",
-		[GETATTR] = "ext4_file_getattr",
+		[F_READ] = "ext4_file_read_iter",
+		[F_WRITE] = "ext4_file_write_iter",
+		[F_OPEN] = "ext4_file_open",
+		[F_FSYNC] = "ext4_sync_file",
+		[F_GETATTR] = "ext4_file_getattr",
 	}},
 	[NFS] = { "nfs", {
-		[READ] = "nfs_file_read",
-		[WRITE] = "nfs_file_write",
-		[OPEN] = "nfs_file_open",
-		[FSYNC] = "nfs_file_fsync",
-		[GETATTR] = "nfs_getattr",
+		[F_READ] = "nfs_file_read",
+		[F_WRITE] = "nfs_file_write",
+		[F_OPEN] = "nfs_file_open",
+		[F_FSYNC] = "nfs_file_fsync",
+		[F_GETATTR] = "nfs_getattr",
 	}},
 	[XFS] = { "xfs", {
-		[READ] = "xfs_file_read_iter",
-		[WRITE] = "xfs_file_write_iter",
-		[OPEN] = "xfs_file_open",
-		[FSYNC] = "xfs_file_fsync",
-		[GETATTR] = NULL, /* not supported */
+		[F_READ] = "xfs_file_read_iter",
+		[F_WRITE] = "xfs_file_write_iter",
+		[F_OPEN] = "xfs_file_open",
+		[F_FSYNC] = "xfs_file_fsync",
+		[F_GETATTR] = NULL, /* not supported */
 	}},
 };
 
 static char *file_op_names[] = {
-	[READ] = "read",
-	[WRITE] = "write",
-	[OPEN] = "open",
-	[FSYNC] = "fsync",
-	[GETATTR] = "getattr",
+	[F_READ] = "read",
+	[F_WRITE] = "write",
+	[F_OPEN] = "open",
+	[F_FSYNC] = "fsync",
+	[F_GETATTR] = "getattr",
 };
 
 static struct hist zero;
@@ -211,7 +212,7 @@
 	const char *units = timestamp_in_ms ? "msecs" : "usecs";
 	enum fs_file_op op;
 
-	for (op = READ; op < MAX_OP; op++) {
+	for (op = F_READ; op < F_MAX_OP; op++) {
 		struct hist hist = bss->hists[op];
 
 		bss->hists[op] = zero;
@@ -230,7 +231,7 @@
 	const char *fn_name, *module;
 	bool support_fentry = true;
 
-	for (i = 0; i < MAX_OP; i++) {
+	for (i = 0; i < F_MAX_OP; i++) {
 		fn_name = fs_configs[fs_type].op_funcs[i];
 		module = fs_configs[fs_type].fs;
 		if (fn_name && !fentry_can_attach(fn_name, module)) {
@@ -246,17 +247,17 @@
 	struct fs_config *cfg = &fs_configs[fs_type];
 	int err = 0;
 
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fentry, 0, cfg->op_funcs[READ]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fexit, 0, cfg->op_funcs[READ]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fentry, 0, cfg->op_funcs[WRITE]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fexit, 0, cfg->op_funcs[WRITE]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fentry, 0, cfg->op_funcs[OPEN]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fexit, 0, cfg->op_funcs[OPEN]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fentry, 0, cfg->op_funcs[FSYNC]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fexit, 0, cfg->op_funcs[FSYNC]);
-	if (cfg->op_funcs[GETATTR]) {
-		err = err ?: bpf_program__set_attach_target(obj->progs.getattr_fentry, 0, cfg->op_funcs[GETATTR]);
-		err = err ?: bpf_program__set_attach_target(obj->progs.getattr_fexit, 0, cfg->op_funcs[GETATTR]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fentry, 0, cfg->op_funcs[F_READ]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fexit, 0, cfg->op_funcs[F_READ]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fentry, 0, cfg->op_funcs[F_WRITE]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fexit, 0, cfg->op_funcs[F_WRITE]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fentry, 0, cfg->op_funcs[F_OPEN]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fexit, 0, cfg->op_funcs[F_OPEN]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fentry, 0, cfg->op_funcs[F_FSYNC]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fexit, 0, cfg->op_funcs[F_FSYNC]);
+	if (cfg->op_funcs[F_GETATTR]) {
+		err = err ?: bpf_program__set_attach_target(obj->progs.getattr_fentry, 0, cfg->op_funcs[F_GETATTR]);
+		err = err ?: bpf_program__set_attach_target(obj->progs.getattr_fexit, 0, cfg->op_funcs[F_GETATTR]);
 	} else {
 		bpf_program__set_autoload(obj->progs.getattr_fentry, false);
 		bpf_program__set_autoload(obj->progs.getattr_fexit, false);
@@ -297,41 +298,41 @@
 	long err = 0;
 	struct fs_config *cfg = &fs_configs[fs_type];
 
-	/* READ */
-	obj->links.file_read_entry = bpf_program__attach_kprobe(obj->progs.file_read_entry, false, cfg->op_funcs[READ]);
+	/* F_READ */
+	obj->links.file_read_entry = bpf_program__attach_kprobe(obj->progs.file_read_entry, false, cfg->op_funcs[F_READ]);
 	if (!obj->links.file_read_entry)
 		goto errout;
-	obj->links.file_read_exit = bpf_program__attach_kprobe(obj->progs.file_read_exit, true, cfg->op_funcs[READ]);
+	obj->links.file_read_exit = bpf_program__attach_kprobe(obj->progs.file_read_exit, true, cfg->op_funcs[F_READ]);
 	if (!obj->links.file_read_exit)
 		goto errout;
-	/* WRITE */
-	obj->links.file_write_entry = bpf_program__attach_kprobe(obj->progs.file_write_entry, false, cfg->op_funcs[WRITE]);
+	/* F_WRITE */
+	obj->links.file_write_entry = bpf_program__attach_kprobe(obj->progs.file_write_entry, false, cfg->op_funcs[F_WRITE]);
 	if (!obj->links.file_write_entry)
 		goto errout;
-	obj->links.file_write_exit = bpf_program__attach_kprobe(obj->progs.file_write_exit, true, cfg->op_funcs[WRITE]);
+	obj->links.file_write_exit = bpf_program__attach_kprobe(obj->progs.file_write_exit, true, cfg->op_funcs[F_WRITE]);
 	if (!obj->links.file_write_exit)
 		goto errout;
-	/* OPEN */
-	obj->links.file_open_entry = bpf_program__attach_kprobe(obj->progs.file_open_entry, false, cfg->op_funcs[OPEN]);
+	/* F_OPEN */
+	obj->links.file_open_entry = bpf_program__attach_kprobe(obj->progs.file_open_entry, false, cfg->op_funcs[F_OPEN]);
 	if (!obj->links.file_open_entry)
 		goto errout;
-	obj->links.file_open_exit = bpf_program__attach_kprobe(obj->progs.file_open_exit, true, cfg->op_funcs[OPEN]);
+	obj->links.file_open_exit = bpf_program__attach_kprobe(obj->progs.file_open_exit, true, cfg->op_funcs[F_OPEN]);
 	if (!obj->links.file_open_exit)
 		goto errout;
-	/* FSYNC */
-	obj->links.file_sync_entry = bpf_program__attach_kprobe(obj->progs.file_sync_entry, false, cfg->op_funcs[FSYNC]);
+	/* F_FSYNC */
+	obj->links.file_sync_entry = bpf_program__attach_kprobe(obj->progs.file_sync_entry, false, cfg->op_funcs[F_FSYNC]);
 	if (!obj->links.file_sync_entry)
 		goto errout;
-	obj->links.file_sync_exit = bpf_program__attach_kprobe(obj->progs.file_sync_exit, true, cfg->op_funcs[FSYNC]);
+	obj->links.file_sync_exit = bpf_program__attach_kprobe(obj->progs.file_sync_exit, true, cfg->op_funcs[F_FSYNC]);
 	if (!obj->links.file_sync_exit)
 		goto errout;
-	/* GETATTR */
-	if (!cfg->op_funcs[GETATTR])
+	/* F_GETATTR */
+	if (!cfg->op_funcs[F_GETATTR])
 		return 0;
-	obj->links.getattr_entry = bpf_program__attach_kprobe(obj->progs.getattr_entry, false, cfg->op_funcs[GETATTR]);
+	obj->links.getattr_entry = bpf_program__attach_kprobe(obj->progs.getattr_entry, false, cfg->op_funcs[F_GETATTR]);
 	if (!obj->links.getattr_entry)
 		goto errout;
-	obj->links.getattr_exit = bpf_program__attach_kprobe(obj->progs.getattr_exit, true, cfg->op_funcs[GETATTR]);
+	obj->links.getattr_exit = bpf_program__attach_kprobe(obj->progs.getattr_exit, true, cfg->op_funcs[F_GETATTR]);
 	if (!obj->links.getattr_exit)
 		goto errout;
 	return 0;
@@ -343,6 +344,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -364,10 +366,15 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	skel = fsdist_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	skel = fsdist_bpf__open_opts(&open_opts);
 	if (!skel) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -436,6 +443,7 @@
 
 cleanup:
 	fsdist_bpf__destroy(skel);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/fsdist.h b/libbpf-tools/fsdist.h
index a4184fc..90c859c 100644
--- a/libbpf-tools/fsdist.h
+++ b/libbpf-tools/fsdist.h
@@ -3,12 +3,12 @@
 #define __FSDIST_H
 
 enum fs_file_op {
-	READ,
-	WRITE,
-	OPEN,
-	FSYNC,
-	GETATTR,
-	MAX_OP,
+	F_READ,
+	F_WRITE,
+	F_OPEN,
+	F_FSYNC,
+	F_GETATTR,
+	F_MAX_OP,
 };
 
 #define MAX_SLOTS	32
diff --git a/libbpf-tools/fsslower.bpf.c b/libbpf-tools/fsslower.bpf.c
index cd6b66c..92fca9f 100644
--- a/libbpf-tools/fsslower.bpf.c
+++ b/libbpf-tools/fsslower.bpf.c
@@ -82,7 +82,7 @@
 	event.delta_us = delta_ns / 1000;
 	event.end_ns = end_ns;
 	event.offset = datap->start;
-	if (op != FSYNC)
+	if (op != F_FSYNC)
 		event.size = size;
 	else
 		event.size = datap->end - datap->start;
@@ -109,7 +109,7 @@
 SEC("kretprobe/dummy_file_read")
 int BPF_KRETPROBE(file_read_exit, ssize_t ret)
 {
-	return probe_exit(ctx, READ, ret);
+	return probe_exit(ctx, F_READ, ret);
 }
 
 SEC("kprobe/dummy_file_write")
@@ -124,7 +124,7 @@
 SEC("kretprobe/dummy_file_write")
 int BPF_KRETPROBE(file_write_exit, ssize_t ret)
 {
-	return probe_exit(ctx, WRITE, ret);
+	return probe_exit(ctx, F_WRITE, ret);
 }
 
 SEC("kprobe/dummy_file_open")
@@ -136,7 +136,7 @@
 SEC("kretprobe/dummy_file_open")
 int BPF_KRETPROBE(file_open_exit)
 {
-	return probe_exit(ctx, OPEN, 0);
+	return probe_exit(ctx, F_OPEN, 0);
 }
 
 SEC("kprobe/dummy_file_sync")
@@ -148,7 +148,7 @@
 SEC("kretprobe/dummy_file_sync")
 int BPF_KRETPROBE(file_sync_exit)
 {
-	return probe_exit(ctx, FSYNC, 0);
+	return probe_exit(ctx, F_FSYNC, 0);
 }
 
 SEC("fentry/dummy_file_read")
@@ -163,7 +163,7 @@
 SEC("fexit/dummy_file_read")
 int BPF_PROG(file_read_fexit, struct kiocb *iocb, struct iov_iter *to, ssize_t ret)
 {
-	return probe_exit(ctx, READ, ret);
+	return probe_exit(ctx, F_READ, ret);
 }
 
 SEC("fentry/dummy_file_write")
@@ -178,7 +178,7 @@
 SEC("fexit/dummy_file_write")
 int BPF_PROG(file_write_fexit, struct kiocb *iocb, struct iov_iter *from, ssize_t ret)
 {
-	return probe_exit(ctx, WRITE, ret);
+	return probe_exit(ctx, F_WRITE, ret);
 }
 
 SEC("fentry/dummy_file_open")
@@ -190,7 +190,7 @@
 SEC("fexit/dummy_file_open")
 int BPF_PROG(file_open_fexit)
 {
-	return probe_exit(ctx, OPEN, 0);
+	return probe_exit(ctx, F_OPEN, 0);
 }
 
 SEC("fentry/dummy_file_sync")
@@ -202,7 +202,7 @@
 SEC("fexit/dummy_file_sync")
 int BPF_PROG(file_sync_fexit)
 {
-	return probe_exit(ctx, FSYNC, 0);
+	return probe_exit(ctx, F_FSYNC, 0);
 }
 
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/fsslower.c b/libbpf-tools/fsslower.c
index 820a201..d1167d6 100644
--- a/libbpf-tools/fsslower.c
+++ b/libbpf-tools/fsslower.c
@@ -24,6 +24,7 @@
 
 #include "fsslower.h"
 #include "fsslower.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES	64
@@ -41,39 +42,39 @@
 
 static struct fs_config {
 	const char *fs;
-	const char *op_funcs[MAX_OP];
+	const char *op_funcs[F_MAX_OP];
 } fs_configs[] = {
 	[BTRFS] = { "btrfs", {
-		[READ] = "btrfs_file_read_iter",
-		[WRITE] = "btrfs_file_write_iter",
-		[OPEN] = "btrfs_file_open",
-		[FSYNC] = "btrfs_sync_file",
+		[F_READ] = "btrfs_file_read_iter",
+		[F_WRITE] = "btrfs_file_write_iter",
+		[F_OPEN] = "btrfs_file_open",
+		[F_FSYNC] = "btrfs_sync_file",
 	}},
 	[EXT4] = { "ext4", {
-		[READ] = "ext4_file_read_iter",
-		[WRITE] = "ext4_file_write_iter",
-		[OPEN] = "ext4_file_open",
-		[FSYNC] = "ext4_sync_file",
+		[F_READ] = "ext4_file_read_iter",
+		[F_WRITE] = "ext4_file_write_iter",
+		[F_OPEN] = "ext4_file_open",
+		[F_FSYNC] = "ext4_sync_file",
 	}},
 	[NFS] = { "nfs", {
-		[READ] = "nfs_file_read",
-		[WRITE] = "nfs_file_write",
-		[OPEN] = "nfs_file_open",
-		[FSYNC] = "nfs_file_fsync",
+		[F_READ] = "nfs_file_read",
+		[F_WRITE] = "nfs_file_write",
+		[F_OPEN] = "nfs_file_open",
+		[F_FSYNC] = "nfs_file_fsync",
 	}},
 	[XFS] = { "xfs", {
-		[READ] = "xfs_file_read_iter",
-		[WRITE] = "xfs_file_write_iter",
-		[OPEN] = "xfs_file_open",
-		[FSYNC] = "xfs_file_fsync",
+		[F_READ] = "xfs_file_read_iter",
+		[F_WRITE] = "xfs_file_write_iter",
+		[F_OPEN] = "xfs_file_open",
+		[F_FSYNC] = "xfs_file_fsync",
 	}},
 };
 
 static char file_op[] = {
-	[READ] = 'R',
-	[WRITE] = 'W',
-	[OPEN] = 'O',
-	[FSYNC] = 'F',
+	[F_READ] = 'R',
+	[F_WRITE] = 'W',
+	[F_OPEN] = 'O',
+	[F_FSYNC] = 'F',
 };
 
 static volatile sig_atomic_t exiting = 0;
@@ -198,7 +199,7 @@
 	const char *fn_name, *module;
 	bool support_fentry = true;
 
-	for (i = 0; i < MAX_OP; i++) {
+	for (i = 0; i < F_MAX_OP; i++) {
 		fn_name = fs_configs[fs_type].op_funcs[i];
 		module = fs_configs[fs_type].fs;
 		if (fn_name && !fentry_can_attach(fn_name, module)) {
@@ -214,14 +215,14 @@
 	struct fs_config *cfg = &fs_configs[fs_type];
 	int err = 0;
 
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fentry, 0, cfg->op_funcs[READ]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fexit, 0, cfg->op_funcs[READ]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fentry, 0, cfg->op_funcs[WRITE]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fexit, 0, cfg->op_funcs[WRITE]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fentry, 0, cfg->op_funcs[OPEN]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fexit, 0, cfg->op_funcs[OPEN]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fentry, 0, cfg->op_funcs[FSYNC]);
-	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fexit, 0, cfg->op_funcs[FSYNC]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fentry, 0, cfg->op_funcs[F_READ]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_read_fexit, 0, cfg->op_funcs[F_READ]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fentry, 0, cfg->op_funcs[F_WRITE]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_write_fexit, 0, cfg->op_funcs[F_WRITE]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fentry, 0, cfg->op_funcs[F_OPEN]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_open_fexit, 0, cfg->op_funcs[F_OPEN]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fentry, 0, cfg->op_funcs[F_FSYNC]);
+	err = err ?: bpf_program__set_attach_target(obj->progs.file_sync_fexit, 0, cfg->op_funcs[F_FSYNC]);
 	return err;
 }
 
@@ -254,32 +255,32 @@
 	long err = 0;
 	struct fs_config *cfg = &fs_configs[fs_type];
 
-	/* READ */
-	obj->links.file_read_entry = bpf_program__attach_kprobe(obj->progs.file_read_entry, false, cfg->op_funcs[READ]);
+	/* F_READ */
+	obj->links.file_read_entry = bpf_program__attach_kprobe(obj->progs.file_read_entry, false, cfg->op_funcs[F_READ]);
 	if (!obj->links.file_read_entry)
 		goto errout;
-	obj->links.file_read_exit = bpf_program__attach_kprobe(obj->progs.file_read_exit, true, cfg->op_funcs[READ]);
+	obj->links.file_read_exit = bpf_program__attach_kprobe(obj->progs.file_read_exit, true, cfg->op_funcs[F_READ]);
 	if (!obj->links.file_read_exit)
 		goto errout;
-	/* WRITE */
-	obj->links.file_write_entry = bpf_program__attach_kprobe(obj->progs.file_write_entry, false, cfg->op_funcs[WRITE]);
+	/* F_WRITE */
+	obj->links.file_write_entry = bpf_program__attach_kprobe(obj->progs.file_write_entry, false, cfg->op_funcs[F_WRITE]);
 	if (!obj->links.file_write_entry)
 		goto errout;
-	obj->links.file_write_exit = bpf_program__attach_kprobe(obj->progs.file_write_exit, true, cfg->op_funcs[WRITE]);
+	obj->links.file_write_exit = bpf_program__attach_kprobe(obj->progs.file_write_exit, true, cfg->op_funcs[F_WRITE]);
 	if (!obj->links.file_write_exit)
 		goto errout;
-	/* OPEN */
-	obj->links.file_open_entry = bpf_program__attach_kprobe(obj->progs.file_open_entry, false, cfg->op_funcs[OPEN]);
+	/* F_OPEN */
+	obj->links.file_open_entry = bpf_program__attach_kprobe(obj->progs.file_open_entry, false, cfg->op_funcs[F_OPEN]);
 	if (!obj->links.file_open_entry)
 		goto errout;
-	obj->links.file_open_exit = bpf_program__attach_kprobe(obj->progs.file_open_exit, true, cfg->op_funcs[OPEN]);
+	obj->links.file_open_exit = bpf_program__attach_kprobe(obj->progs.file_open_exit, true, cfg->op_funcs[F_OPEN]);
 	if (!obj->links.file_open_exit)
 		goto errout;
-	/* FSYNC */
-	obj->links.file_sync_entry = bpf_program__attach_kprobe(obj->progs.file_sync_entry, false, cfg->op_funcs[FSYNC]);
+	/* F_FSYNC */
+	obj->links.file_sync_entry = bpf_program__attach_kprobe(obj->progs.file_sync_entry, false, cfg->op_funcs[F_FSYNC]);
 	if (!obj->links.file_sync_entry)
 		goto errout;
-	obj->links.file_sync_exit = bpf_program__attach_kprobe(obj->progs.file_sync_exit, true, cfg->op_funcs[FSYNC]);
+	obj->links.file_sync_exit = bpf_program__attach_kprobe(obj->progs.file_sync_exit, true, cfg->op_funcs[F_FSYNC]);
 	if (!obj->links.file_sync_exit)
 		goto errout;
 	return 0;
@@ -349,6 +350,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -369,10 +371,15 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	skel = fsslower_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	skel = fsslower_bpf__open_opts(&open_opts);
 	if (!skel) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -450,6 +457,7 @@
 cleanup:
 	perf_buffer__free(pb);
 	fsslower_bpf__destroy(skel);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/fsslower.h b/libbpf-tools/fsslower.h
index 5c5ec4b..e83b3b9 100644
--- a/libbpf-tools/fsslower.h
+++ b/libbpf-tools/fsslower.h
@@ -6,11 +6,11 @@
 #define TASK_COMM_LEN	16
 
 enum fs_file_op {
-	READ,
-	WRITE,
-	OPEN,
-	FSYNC,
-	MAX_OP,
+	F_READ,
+	F_WRITE,
+	F_OPEN,
+	F_FSYNC,
+	F_MAX_OP,
 };
 
 struct event {
diff --git a/libbpf-tools/funclatency.bpf.c b/libbpf-tools/funclatency.bpf.c
index c004b83..9780414 100644
--- a/libbpf-tools/funclatency.bpf.c
+++ b/libbpf-tools/funclatency.bpf.c
@@ -9,6 +9,14 @@
 
 const volatile pid_t targ_tgid = 0;
 const volatile int units = 0;
+const volatile bool filter_cg = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
 
 /* key: pid.  value: start time */
 struct {
@@ -20,24 +28,37 @@
 
 __u32 hist[MAX_SLOTS] = {};
 
-SEC("kprobe/dummy_kprobe")
-int BPF_KPROBE(dummy_kprobe)
+static void entry(void)
 {
 	u64 id = bpf_get_current_pid_tgid();
 	u32 tgid = id >> 32;
 	u32 pid = id;
 	u64 nsec;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return;
+
 	if (targ_tgid && targ_tgid != tgid)
-		return 0;
+		return;
 	nsec = bpf_ktime_get_ns();
 	bpf_map_update_elem(&starts, &pid, &nsec, BPF_ANY);
+}
 
+SEC("fentry/dummy_fentry")
+int BPF_PROG(dummy_fentry)
+{
+	entry();
 	return 0;
 }
 
-SEC("kretprobe/dummy_kretprobe")
-int BPF_KRETPROBE(dummy_kretprobe)
+SEC("kprobe/dummy_kprobe")
+int BPF_KPROBE(dummy_kprobe)
+{
+	entry();
+	return 0;
+}
+
+static void exit(void)
 {
 	u64 *start;
 	u64 nsec = bpf_ktime_get_ns();
@@ -45,9 +66,12 @@
 	u32 pid = id;
 	u64 slot, delta;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return;
+
 	start = bpf_map_lookup_elem(&starts, &pid);
 	if (!start)
-		return 0;
+		return;
 
 	delta = nsec - *start;
 
@@ -64,7 +88,19 @@
 	if (slot >= MAX_SLOTS)
 		slot = MAX_SLOTS - 1;
 	__sync_fetch_and_add(&hist[slot], 1);
+}
 
+SEC("fexit/dummy_fexit")
+int BPF_PROG(dummy_fexit)
+{
+	exit();
+	return 0;
+}
+
+SEC("kretprobe/dummy_kretprobe")
+int BPF_KRETPROBE(dummy_kretprobe)
+{
+	exit();
 	return 0;
 }
 
diff --git a/libbpf-tools/funclatency.c b/libbpf-tools/funclatency.c
index 3ea0fec..8012b09 100644
--- a/libbpf-tools/funclatency.c
+++ b/libbpf-tools/funclatency.c
@@ -16,6 +16,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <fcntl.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
@@ -23,6 +24,7 @@
 #include "funclatency.skel.h"
 #include "trace_helpers.h"
 #include "map_helpers.h"
+#include "btf_helpers.h"
 #include "uprobe_helpers.h"
 
 #define warn(...) fprintf(stderr, __VA_ARGS__)
@@ -36,6 +38,10 @@
 	bool timestamp;
 	char *funcname;
 	bool verbose;
+	bool kprobes;
+	char *cgroupspath;
+	bool cg;
+	bool is_kernel_func;
 } env = {
 	.interval = 99999999,
 	.iterations = 99999999,
@@ -48,7 +54,7 @@
 static const char program_doc[] =
 "Time functions and print latency as a histogram\n"
 "\n"
-"Usage: funclatency [-h] [-m|-u] [-p PID] [-d DURATION] [ -i INTERVAL ]\n"
+"Usage: funclatency [-h] [-m|-u] [-p PID] [-d DURATION] [ -i INTERVAL ] [-c CG]\n"
 "                   [-T] FUNCTION\n"
 "       Choices for FUNCTION: FUNCTION         (kprobe)\n"
 "                             LIBRARY:FUNCTION (uprobe a library in -p PID)\n"
@@ -58,6 +64,7 @@
 "Examples:\n"
 "  ./funclatency do_sys_open         # time the do_sys_open() kernel function\n"
 "  ./funclatency -m do_nanosleep     # time do_nanosleep(), in milliseconds\n"
+"  ./funclatency -c CG               # Trace process under cgroupsPath CG\n"
 "  ./funclatency -u vfs_read         # time vfs_read(), in microseconds\n"
 "  ./funclatency -p 181 vfs_read     # time process 181 only\n"
 "  ./funclatency -p 181 c:read       # time the read() C library function\n"
@@ -73,9 +80,11 @@
 	{ "pid", 'p', "PID", 0, "Process ID to trace"},
 	{0, 0, 0, 0, ""},
 	{ "interval", 'i', "INTERVAL", 0, "Summary interval in seconds"},
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
 	{ "duration", 'd', "DURATION", 0, "Duration to trace"},
 	{ "timestamp", 'T', NULL, 0, "Print timestamp"},
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "kprobes", 'k', NULL, 0, "Use kprobes instead of fentry" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help"},
 	{},
 };
@@ -102,6 +111,10 @@
 		}
 		env->units = MSEC;
 		break;
+	case 'c':
+		env->cgroupspath = arg;
+		env->cg = true;
+		break;
 	case 'u':
 		if (env->units != NSEC) {
 			warn("only set one of -m or -u\n");
@@ -130,6 +143,9 @@
 	case 'T':
 		env->timestamp = true;
 		break;
+	case 'k':
+		env->kprobes = true;
+		break;
 	case 'v':
 		env->verbose = true;
 		break;
@@ -181,23 +197,56 @@
 	return "bad units";
 }
 
-static int attach_kprobes(struct funclatency_bpf *obj)
+static bool try_fentry(struct funclatency_bpf *obj)
 {
 	long err;
 
-	obj->links.dummy_kprobe = bpf_program__attach_kprobe(obj->progs.dummy_kprobe, false,
-							     env.funcname);
+	if (env.kprobes || !env.is_kernel_func ||
+	    !fentry_can_attach(env.funcname, NULL)) {
+		goto out_no_fentry;
+	}
+
+	err = bpf_program__set_attach_target(obj->progs.dummy_fentry, 0,
+					     env.funcname);
+	if (err) {
+		warn("failed to set attach fentry: %s\n", strerror(-err));
+		goto out_no_fentry;
+	}
+
+	err = bpf_program__set_attach_target(obj->progs.dummy_fexit, 0,
+					     env.funcname);
+	if (err) {
+		warn("failed to set attach fexit: %s\n", strerror(-err));
+		goto out_no_fentry;
+	}
+
+	bpf_program__set_autoload(obj->progs.dummy_kprobe, false);
+	bpf_program__set_autoload(obj->progs.dummy_kretprobe, false);
+
+	return true;
+
+out_no_fentry:
+	bpf_program__set_autoload(obj->progs.dummy_fentry, false);
+	bpf_program__set_autoload(obj->progs.dummy_fexit, false);
+
+	return false;
+}
+
+static int attach_kprobes(struct funclatency_bpf *obj)
+{
+	obj->links.dummy_kprobe =
+		bpf_program__attach_kprobe(obj->progs.dummy_kprobe, false,
+					   env.funcname);
 	if (!obj->links.dummy_kprobe) {
-		err = -errno;
-		warn("failed to attach kprobe: %ld\n", err);
+		warn("failed to attach kprobe: %d\n", -errno);
 		return -1;
 	}
 
-	obj->links.dummy_kretprobe = bpf_program__attach_kprobe(obj->progs.dummy_kretprobe, true,
-								env.funcname);
+	obj->links.dummy_kretprobe =
+		bpf_program__attach_kprobe(obj->progs.dummy_kretprobe, true,
+					   env.funcname);
 	if (!obj->links.dummy_kretprobe) {
-		err = -errno;
-		warn("failed to attach kretprobe: %ld\n", err);
+		warn("failed to attach kretprobe: %d\n", -errno);
 		return -1;
 	}
 
@@ -260,13 +309,6 @@
 	return ret;
 }
 
-static int attach_probes(struct funclatency_bpf *obj)
-{
-	if (strchr(env.funcname, ':'))
-		return attach_uprobes(obj);
-	return attach_kprobes(obj);
-}
-
 static volatile bool exiting;
 
 static void sig_hand(int signr)
@@ -278,6 +320,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -289,17 +332,27 @@
 	struct tm *tm;
 	char ts[32];
 	time_t t;
+	int idx, cg_map_fd;
+	int cgfd = -1;
+	bool used_fentry = false;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, &env);
 	if (err)
 		return err;
 
+	env.is_kernel_func = !strchr(env.funcname, ':');
+
 	sigaction(SIGINT, &sigact, 0);
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = funclatency_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = funclatency_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -307,6 +360,9 @@
 
 	obj->rodata->units = env.units;
 	obj->rodata->targ_tgid = env.pid;
+	obj->rodata->filter_cg = env.cg;
+
+	used_fentry = try_fentry(obj);
 
 	err = funclatency_bpf__load(obj);
 	if (err) {
@@ -314,14 +370,41 @@
 		return 1;
 	}
 
+/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	if (!obj->bss) {
 		warn("Memory-mapping BPF maps is supported starting from Linux 5.7, please upgrade.\n");
 		goto cleanup;
 	}
 
-	err = attach_probes(obj);
-	if (err)
+	if (!used_fentry) {
+		if (env.is_kernel_func)
+			err = attach_kprobes(obj);
+		else
+			err = attach_uprobes(obj);
+		if (err)
+			goto cleanup;
+	}
+
+	err = funclatency_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF programs: %s\n",
+			strerror(-err));
 		goto cleanup;
+	}
 
 	printf("Tracing %s.  Hit Ctrl-C to exit\n", env.funcname);
 
@@ -337,12 +420,18 @@
 		}
 
 		print_log2_hist(obj->bss->hist, MAX_SLOTS, unit_str());
+
+		/* Cleanup histograms for interval output */
+		memset(obj->bss->hist, 0, sizeof(obj->bss->hist));
 	}
 
 	printf("Exiting trace of %s\n", env.funcname);
 
 cleanup:
 	funclatency_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/gethostlatency.bpf.c b/libbpf-tools/gethostlatency.bpf.c
index 2ed5de1..92e0118 100644
--- a/libbpf-tools/gethostlatency.bpf.c
+++ b/libbpf-tools/gethostlatency.bpf.c
@@ -61,13 +61,13 @@
 }
 
 SEC("kprobe/handle_entry")
-int handle_entry(struct pt_regs *ctx)
+int BPF_KPROBE(handle_entry)
 {
 	return probe_entry(ctx);
 }
 
 SEC("kretprobe/handle_return")
-int handle_return(struct pt_regs *ctx)
+int BPF_KRETPROBE(handle_return)
 {
 	return probe_return(ctx);
 }
diff --git a/libbpf-tools/gethostlatency.c b/libbpf-tools/gethostlatency.c
index 9b3ebc2..a4bbb8e 100644
--- a/libbpf-tools/gethostlatency.c
+++ b/libbpf-tools/gethostlatency.c
@@ -12,11 +12,13 @@
 #include <errno.h>
 #include <signal.h>
 #include <time.h>
+#include <unistd.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "gethostlatency.h"
 #include "gethostlatency.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 #include "uprobe_helpers.h"
 
@@ -134,7 +136,8 @@
 		if (strchr(buf, '/') != buf)
 			continue;
 		filename = strrchr(buf, '/') + 1;
-		if (sscanf(filename, "libc-%f.so", &version) == 1) {
+		if (sscanf(filename, "libc-%f.so", &version) == 1 ||
+		    sscanf(filename, "libc.so.%f", &version) == 1) {
 			memcpy(path, buf, strlen(buf));
 			fclose(f);
 			return 0;
@@ -216,6 +219,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -230,10 +234,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = gethostlatency_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = gethostlatency_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -283,6 +292,7 @@
 	for (i = 0; i < 6; i++)
 		bpf_link__destroy(links[i]);
 	gethostlatency_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/hardirqs.bpf.c b/libbpf-tools/hardirqs.bpf.c
index f1cd7af..cbcbd5c 100644
--- a/libbpf-tools/hardirqs.bpf.c
+++ b/libbpf-tools/hardirqs.bpf.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 // Copyright (c) 2020 Wenbo Zhang
 #include <vmlinux.h>
+#include <bpf/bpf_core_read.h>
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_tracing.h>
 #include "hardirqs.h"
@@ -9,8 +10,17 @@
 
 #define MAX_ENTRIES	256
 
+const volatile bool filter_cg = false;
 const volatile bool targ_dist = false;
 const volatile bool targ_ns = false;
+const volatile bool do_count = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
 
 struct {
 	__uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
@@ -28,50 +38,53 @@
 
 static struct info zero;
 
-SEC("tracepoint/irq/irq_handler_entry")
-int handle__irq_handler(struct trace_event_raw_irq_handler_entry *ctx)
+static int handle_entry(int irq, struct irqaction *action)
 {
-	struct irq_key key = {};
-	struct info *info;
-
-	bpf_probe_read_kernel_str(&key.name, sizeof(key.name), ctx->__data);
-	info = bpf_map_lookup_or_try_init(&infos, &key, &zero);
-	if (!info)
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
 		return 0;
-	info->count += 1;
-	return 0;
+
+	if (do_count) {
+		struct irq_key key = {};
+		struct info *info;
+
+		bpf_probe_read_kernel_str(&key.name, sizeof(key.name), BPF_CORE_READ(action, name));
+		info = bpf_map_lookup_or_try_init(&infos, &key, &zero);
+		if (!info)
+			return 0;
+		info->count += 1;
+		return 0;
+	} else {
+		u64 ts = bpf_ktime_get_ns();
+		u32 key = 0;
+
+		if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+			return 0;
+
+		bpf_map_update_elem(&start, &key, &ts, BPF_ANY);
+		return 0;
+	}
 }
 
-SEC("tp_btf/irq_handler_entry")
-int BPF_PROG(irq_handler_entry)
-{
-	u64 ts = bpf_ktime_get_ns();
-	u32 key = 0;
-
-	bpf_map_update_elem(&start, &key, &ts, 0);
-	return 0;
-}
-
-SEC("tp_btf/irq_handler_exit")
-int BPF_PROG(irq_handler_exit_exit, int irq, struct irqaction *action)
+static int handle_exit(int irq, struct irqaction *action)
 {
 	struct irq_key ikey = {};
 	struct info *info;
 	u32 key = 0;
-	s64 delta;
+	u64 delta;
 	u64 *tsp;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	tsp = bpf_map_lookup_elem(&start, &key);
-	if (!tsp || !*tsp)
+	if (!tsp)
 		return 0;
 
 	delta = bpf_ktime_get_ns() - *tsp;
-	if (delta < 0)
-		return 0;
 	if (!targ_ns)
 		delta /= 1000U;
 
-	bpf_probe_read_kernel_str(&ikey.name, sizeof(ikey.name), action->name);
+	bpf_probe_read_kernel_str(&ikey.name, sizeof(ikey.name), BPF_CORE_READ(action, name));
 	info = bpf_map_lookup_or_try_init(&infos, &ikey, &zero);
 	if (!info)
 		return 0;
@@ -90,4 +103,28 @@
 	return 0;
 }
 
+SEC("tp_btf/irq_handler_entry")
+int BPF_PROG(irq_handler_entry_btf, int irq, struct irqaction *action)
+{
+	return handle_entry(irq, action);
+}
+
+SEC("tp_btf/irq_handler_exit")
+int BPF_PROG(irq_handler_exit_btf, int irq, struct irqaction *action)
+{
+	return handle_exit(irq, action);
+}
+
+SEC("raw_tp/irq_handler_entry")
+int BPF_PROG(irq_handler_entry, int irq, struct irqaction *action)
+{
+	return handle_entry(irq, action);
+}
+
+SEC("raw_tp/irq_handler_exit")
+int BPF_PROG(irq_handler_exit, int irq, struct irqaction *action)
+{
+	return handle_exit(irq, action);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/hardirqs.c b/libbpf-tools/hardirqs.c
index a2475ef..49a245d 100644
--- a/libbpf-tools/hardirqs.c
+++ b/libbpf-tools/hardirqs.c
@@ -10,6 +10,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "hardirqs.h"
@@ -24,6 +25,8 @@
 	int times;
 	bool timestamp;
 	bool verbose;
+	char *cgroupspath;
+	bool cg;
 } env = {
 	.interval = 99999999,
 	.times = 99999999,
@@ -37,17 +40,19 @@
 const char argp_program_doc[] =
 "Summarize hard irq event time as histograms.\n"
 "\n"
-"USAGE: hardirqs [--help] [-T] [-N] [-d] [interval] [count]\n"
+"USAGE: hardirqs [--help] [-T] [-N] [-d] [interval] [count] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    hardirqs            # sum hard irq event time\n"
 "    hardirqs -d         # show hard irq event time as histograms\n"
 "    hardirqs 1 10       # print 1 second summaries, 10 times\n"
+"    hardirqs -c CG      # Trace process under cgroupsPath CG\n"
 "    hardirqs -NT 1      # 1s summaries, nanoseconds, and timestamps\n";
 
 static const struct argp_option opts[] = {
 	{ "count", 'C', NULL, 0, "Show event counts instead of timing" },
 	{ "distributed", 'd', NULL, 0, "Show distributions as histograms" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
 	{ "timestamp", 'T', NULL, 0, "Include timestamp on output" },
 	{ "nanoseconds", 'N', NULL, 0, "Output in nanoseconds" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
@@ -72,6 +77,10 @@
 	case 'C':
 		env.count = true;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'N':
 		env.nanoseconds = true;
 		break;
@@ -175,6 +184,8 @@
 	char ts[32];
 	time_t t;
 	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
@@ -185,7 +196,6 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = hardirqs_bpf__open();
@@ -194,6 +204,21 @@
 		return 1;
 	}
 
+	if (probe_tp_btf("irq_handler_entry")) {
+		bpf_program__set_autoload(obj->progs.irq_handler_entry, false);
+		bpf_program__set_autoload(obj->progs.irq_handler_exit, false);
+		if (env.count)
+			bpf_program__set_autoload(obj->progs.irq_handler_exit_btf, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.irq_handler_entry_btf, false);
+		bpf_program__set_autoload(obj->progs.irq_handler_exit_btf, false);
+		if (env.count)
+			bpf_program__set_autoload(obj->progs.irq_handler_exit, false);
+	}
+
+	obj->rodata->filter_cg = env.cg;
+	obj->rodata->do_count = env.count;
+
 	/* initialize global data (filtering options) */
 	if (!env.count) {
 		obj->rodata->targ_dist = env.distributed;
@@ -206,29 +231,25 @@
 		goto cleanup;
 	}
 
-	if (env.count) {
-		obj->links.handle__irq_handler = bpf_program__attach(obj->progs.handle__irq_handler);
-		if (!obj->links.handle__irq_handler) {
-			err = -errno;
-			fprintf(stderr,
-				"failed to attach irq/irq_handler_entry: %s\n",
-				strerror(-err));
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
 		}
-	} else {
-		obj->links.irq_handler_entry = bpf_program__attach(obj->progs.irq_handler_entry);
-		if (!obj->links.irq_handler_entry) {
-			err = -errno;
-			fprintf(stderr,
-				"failed to attach irq_handler_entry: %s\n",
-				strerror(-err));
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
 		}
-		obj->links.irq_handler_exit_exit = bpf_program__attach(obj->progs.irq_handler_exit_exit);
-		if (!obj->links.irq_handler_exit_exit) {
-			err = -errno;
-			fprintf(stderr,
-				"failed to attach irq_handler_exit: %s\n",
-				strerror(-err));
-		}
+	}
+
+	err = hardirqs_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF object: %d\n", err);
+		goto cleanup;
 	}
 
 	signal(SIGINT, sig_handler);
@@ -260,6 +281,8 @@
 
 cleanup:
 	hardirqs_bpf__destroy(obj);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/javagc.bpf.c b/libbpf-tools/javagc.bpf.c
new file mode 100644
index 0000000..35535d9
--- /dev/null
+++ b/libbpf-tools/javagc.bpf.c
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/* Copyright (c) 2022 Chen Tao */
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/usdt.bpf.h>
+#include "javagc.h"
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 100);
+	__type(key, uint32_t);
+	__type(value, struct data_t);
+} data_map SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__type(key, int);
+	__type(value, int);
+} perf_map SEC(".maps");
+
+__u32 time;
+
+static int gc_start(struct pt_regs *ctx)
+{
+	struct data_t data = {};
+
+	data.cpu = bpf_get_smp_processor_id();
+	data.pid = bpf_get_current_pid_tgid() >> 32;
+	data.ts = bpf_ktime_get_ns();
+	bpf_map_update_elem(&data_map, &data.pid, &data, 0);
+	return 0;
+}
+
+static int gc_end(struct pt_regs *ctx)
+{
+	struct data_t data = {};
+	struct data_t *p;
+	__u32 val;
+
+	data.cpu = bpf_get_smp_processor_id();
+	data.pid = bpf_get_current_pid_tgid() >> 32;
+	data.ts = bpf_ktime_get_ns();
+	p = bpf_map_lookup_elem(&data_map, &data.pid);
+	if (!p)
+		return 0;
+
+	val = data.ts - p->ts;
+	if (val > time) {
+		data.ts = val;
+		bpf_perf_event_output(ctx, &perf_map, BPF_F_CURRENT_CPU, &data, sizeof(data));
+	}
+	bpf_map_delete_elem(&data_map, &data.pid);
+	return 0;
+}
+
+SEC("usdt")
+int handle_gc_start(struct pt_regs *ctx)
+{
+	return gc_start(ctx);
+}
+
+SEC("usdt")
+int handle_gc_end(struct pt_regs *ctx)
+{
+	return gc_end(ctx);
+}
+
+SEC("usdt")
+int handle_mem_pool_gc_start(struct pt_regs *ctx)
+{
+	return gc_start(ctx);
+}
+
+SEC("usdt")
+int handle_mem_pool_gc_end(struct pt_regs *ctx)
+{
+	return gc_end(ctx);
+}
+
+char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/javagc.c b/libbpf-tools/javagc.c
new file mode 100644
index 0000000..883ae70
--- /dev/null
+++ b/libbpf-tools/javagc.c
@@ -0,0 +1,243 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/*
+ * Copyright (c) 2022 Chen Tao
+ * Based on ugc from BCC by Sasha Goldshtein
+ * Create: Wed Jun 29 16:00:19 2022
+ */
+#include <stdio.h>
+#include <ctype.h>
+#include <argp.h>
+#include <signal.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/resource.h>
+#include <bpf/libbpf.h>
+#include <errno.h>
+#include "javagc.skel.h"
+#include "javagc.h"
+
+#define BINARY_PATH_SIZE (256)
+#define PERF_BUFFER_PAGES (32)
+#define PERF_POLL_TIMEOUT_MS (200)
+
+static struct env {
+	pid_t pid;
+	int time;
+	bool exiting;
+	bool verbose;
+} env = {
+	.pid = -1,
+	.time = 1000,
+	.exiting = false,
+	.verbose = false,
+};
+
+const char *argp_program_version = "javagc 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+
+const char argp_program_doc[] =
+"Monitor javagc time cost.\n"
+"\n"
+"USAGE: javagc [--help] [-p PID] [-t GC time]\n"
+"\n"
+"EXAMPLES:\n"
+"javagc -p 185         # trace PID 185 only\n"
+"javagc -p 185 -t 100  # trace PID 185 java gc time beyond 100us\n";
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "Trace this PID only" },
+	{ "time", 't', "TIME", 0, "Java gc time" },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	int err = 0;
+
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		env.verbose = true;
+		break;
+	case 'p':
+		errno = 0;
+		env.pid = strtol(arg, NULL, 10);
+		if (errno) {
+			err = errno;
+			fprintf(stderr, "invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 't':
+		errno = 0;
+		env.time = strtol(arg, NULL, 10);
+		if (errno) {
+			err = errno;
+			fprintf(stderr, "invalid time: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return err;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && ! env.verbose)
+		return 0;
+
+	return vfprintf(stderr, format, args);
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	struct data_t *e = (struct data_t *)data;
+	struct tm *tm = NULL;
+	char ts[16];
+	time_t t;
+
+	time(&t);
+	tm = localtime(&t);
+	strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+	printf("%-8s %-7d %-7d %-7lld\n", ts, e->cpu, e->pid, e->ts/1000);
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 data_sz)
+{
+	printf("lost data\n");
+}
+
+static void sig_handler(int sig)
+{
+	env.exiting = true;
+}
+
+static int get_jvmso_path(char *path)
+{
+	char mode[16], line[128], buf[64];
+	size_t seg_start, seg_end, seg_off;
+	FILE *f;
+	int i = 0;
+
+	sprintf(buf, "/proc/%d/maps", env.pid);
+	f = fopen(buf, "r");
+	if (!f)
+		return -1;
+
+	while (fscanf(f, "%zx-%zx %s %zx %*s %*d%[^\n]\n",
+			&seg_start, &seg_end, mode, &seg_off, line) == 5) {
+		i = 0;
+		while (isblank(line[i]))
+			i++;
+		if (strstr(line + i, "libjvm.so")) {
+			break;
+		}
+	}
+
+	strcpy(path, line + i);
+	fclose(f);
+
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	char binary_path[BINARY_PATH_SIZE] = {0};
+	struct javagc_bpf *skel = NULL;
+	int err;
+	struct perf_buffer *pb = NULL;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	/*
+	* libbpf will auto load the so if it in /usr/lib64 /usr/lib etc,
+	* but the jvmso not there.
+	*/
+	err = get_jvmso_path(binary_path);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	skel = javagc_bpf__open();
+	if (!skel) {
+		fprintf(stderr, "Failed to open BPF skeleton\n");
+		return 1;
+	}
+	skel->bss->time = env.time * 1000;
+
+	err = javagc_bpf__load(skel);
+	if (err) {
+		fprintf(stderr, "Failed to load and verify BPF skeleton\n");
+		goto cleanup;
+	}
+
+	skel->links.handle_mem_pool_gc_start = bpf_program__attach_usdt(skel->progs.handle_gc_start, env.pid,
+									binary_path, "hotspot", "mem__pool__gc__begin", NULL);
+	if (!skel->links.handle_mem_pool_gc_start) {
+		err = errno;
+		fprintf(stderr, "attach usdt mem__pool__gc__begin failed: %s\n", strerror(err));
+		goto cleanup;
+	}
+
+	skel->links.handle_mem_pool_gc_end = bpf_program__attach_usdt(skel->progs.handle_gc_end, env.pid,
+								binary_path, "hotspot", "mem__pool__gc__end", NULL);
+	if (!skel->links.handle_mem_pool_gc_end) {
+		err = errno;
+		fprintf(stderr, "attach usdt mem__pool__gc__end failed: %s\n", strerror(err));
+		goto cleanup;
+	}
+
+	skel->links.handle_gc_start = bpf_program__attach_usdt(skel->progs.handle_gc_start, env.pid,
+									binary_path, "hotspot", "gc__begin", NULL);
+	if (!skel->links.handle_gc_start) {
+		err = errno;
+		fprintf(stderr, "attach usdt gc__begin failed: %s\n", strerror(err));
+		goto cleanup;
+	}
+
+	skel->links.handle_gc_end = bpf_program__attach_usdt(skel->progs.handle_gc_end, env.pid,
+				binary_path, "hotspot", "gc__end", NULL);
+	if (!skel->links.handle_gc_end) {
+		err = errno;
+		fprintf(stderr, "attach usdt gc__end failed: %s\n", strerror(err));
+		goto cleanup;
+	}
+
+	signal(SIGINT, sig_handler);
+	printf("Tracing javagc time... Hit Ctrl-C to end.\n");
+	printf("%-8s %-7s %-7s %-7s\n",
+	       "TIME", "CPU", "PID", "GC TIME");
+
+	pb = perf_buffer__new(bpf_map__fd(skel->maps.perf_map), PERF_BUFFER_PAGES,
+			handle_event, handle_lost_events, NULL, NULL);
+	while (!env.exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	javagc_bpf__destroy(skel);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/javagc.h b/libbpf-tools/javagc.h
new file mode 100644
index 0000000..878f7db
--- /dev/null
+++ b/libbpf-tools/javagc.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/* Copyright (c) 2022 Chen Tao */
+#ifndef __JAVAGC_H
+#define __JAVAGC_H
+
+struct data_t {
+    __u32 cpu;
+    __u32 pid;
+    __u64 ts;
+};
+
+#endif /* __JAVAGC_H */
diff --git a/libbpf-tools/klockstat.bpf.c b/libbpf-tools/klockstat.bpf.c
index 2a5c8e7..fdc57a0 100644
--- a/libbpf-tools/klockstat.bpf.c
+++ b/libbpf-tools/klockstat.bpf.c
@@ -13,7 +13,8 @@
 
 const volatile pid_t targ_tgid = 0;
 const volatile pid_t targ_pid = 0;
-struct mutex *const volatile targ_lock = NULL;
+void *const volatile targ_lock = NULL;
+const volatile int per_thread = 0;
 
 struct {
 	__uint(type, BPF_MAP_TYPE_STACK_TRACE);
@@ -37,6 +38,7 @@
 	u64 try_at;
 	u64 acq_at;
 	u64 rel_at;
+	u64 lock_ptr;
 };
 
 struct {
@@ -60,6 +62,13 @@
 	__type(value, struct lock_stat);
 } stat_map SEC(".maps");
 
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, u32);
+	__type(value, void *);
+} locks SEC(".maps");
+
 static bool tracing_task(u64 task_id)
 {
 	u32 tgid = task_id >> 32;
@@ -72,7 +81,7 @@
 	return true;
 }
 
-static void lock_contended(void *ctx, struct mutex *lock)
+static void lock_contended(void *ctx, void *lock)
 {
 	u64 task_id;
 	struct lockholder_info li[1] = {0};
@@ -85,6 +94,7 @@
 		return;
 
 	li->task_id = task_id;
+	li->lock_ptr = (u64)lock;
 	/*
 	 * Skip 4 frames, e.g.:
 	 *       __this_module+0x34ef
@@ -95,8 +105,8 @@
 	 * Note: if you make major changes to this bpf program, double check
 	 * that you aren't skipping too many frames.
 	 */
-	li->stack_id = bpf_get_stackid(ctx, &stack_map,
-				       4 | BPF_F_FAST_STACK_CMP);
+	li->stack_id = bpf_get_stackid(ctx, &stack_map, 4 | BPF_F_FAST_STACK_CMP);
+
 	/* Legit failures include EEXIST */
 	if (li->stack_id < 0)
 		return;
@@ -107,7 +117,7 @@
 	bpf_map_update_elem(&lockholder_map, &tl, li, BPF_ANY);
 }
 
-static void lock_aborted(struct mutex *lock)
+static void lock_aborted(void *lock)
 {
 	u64 task_id;
 	struct task_lock tl = {};
@@ -122,7 +132,7 @@
 	bpf_map_delete_elem(&lockholder_map, &tl);
 }
 
-static void lock_acquired(struct mutex *lock)
+static void lock_acquired(void *lock)
 {
 	u64 task_id;
 	struct lockholder_info *li;
@@ -147,22 +157,31 @@
 {
 	struct lock_stat *ls;
 	u64 delta;
+	u32 key = li->stack_id;
+
+	if (per_thread)
+		key = li->task_id;
 
 	/*
 	 * Multiple threads may have the same stack_id.  Even though we are
 	 * holding the lock, dynamically allocated mutexes can have the same
-	 * callgraph but represent different locks.  They will be accounted as
+	 * callgraph but represent different locks.  Also, a rwsem can be held
+	 * by multiple readers at the same time.  They will be accounted as
 	 * the same lock, which is what we want, but we need to use atomics to
 	 * avoid corruption, especially for the total_time variables.
+	 * But it should be ok for per-thread since it's not racy anymore.
 	 */
-	ls = bpf_map_lookup_elem(&stat_map, &li->stack_id);
+	ls = bpf_map_lookup_elem(&stat_map, &key);
 	if (!ls) {
 		struct lock_stat fresh = {0};
 
-		bpf_map_update_elem(&stat_map, &li->stack_id, &fresh, BPF_ANY);
-		ls = bpf_map_lookup_elem(&stat_map, &li->stack_id);
+		bpf_map_update_elem(&stat_map, &key, &fresh, BPF_ANY);
+		ls = bpf_map_lookup_elem(&stat_map, &key);
 		if (!ls)
 			return;
+
+		if (per_thread)
+			bpf_get_current_comm(ls->acq_max_comm, TASK_COMM_LEN);
 	}
 
 	delta = li->acq_at - li->try_at;
@@ -171,11 +190,13 @@
 	if (delta > READ_ONCE(ls->acq_max_time)) {
 		WRITE_ONCE(ls->acq_max_time, delta);
 		WRITE_ONCE(ls->acq_max_id, li->task_id);
+		WRITE_ONCE(ls->acq_max_lock_ptr, li->lock_ptr);
 		/*
 		 * Potentially racy, if multiple threads think they are the max,
 		 * so you may get a clobbered write.
 		 */
-		bpf_get_current_comm(ls->acq_max_comm, TASK_COMM_LEN);
+		if (!per_thread)
+			bpf_get_current_comm(ls->acq_max_comm, TASK_COMM_LEN);
 	}
 
 	delta = li->rel_at - li->acq_at;
@@ -184,11 +205,13 @@
 	if (delta > READ_ONCE(ls->hld_max_time)) {
 		WRITE_ONCE(ls->hld_max_time, delta);
 		WRITE_ONCE(ls->hld_max_id, li->task_id);
-		bpf_get_current_comm(ls->hld_max_comm, TASK_COMM_LEN);
+		WRITE_ONCE(ls->hld_max_lock_ptr, li->lock_ptr);
+		if (!per_thread)
+			bpf_get_current_comm(ls->hld_max_comm, TASK_COMM_LEN);
 	}
 }
 
-static void lock_released(struct mutex *lock)
+static void lock_released(void *lock)
 {
 	u64 task_id;
 	struct lockholder_info *li;
@@ -276,4 +299,444 @@
 	return 0;
 }
 
+SEC("fentry/down_read")
+int BPF_PROG(down_read, struct rw_semaphore *lock)
+{
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("fexit/down_read")
+int BPF_PROG(down_read_exit, struct rw_semaphore *lock, long ret)
+{
+	lock_acquired(lock);
+	return 0;
+}
+
+SEC("fexit/down_read_trylock")
+int BPF_PROG(down_read_trylock_exit, struct rw_semaphore *lock, long ret)
+{
+	if (ret == 1) {
+		lock_contended(ctx, lock);
+		lock_acquired(lock);
+	}
+	return 0;
+}
+
+SEC("fentry/down_read_interruptible")
+int BPF_PROG(down_read_interruptible, struct rw_semaphore *lock)
+{
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("fexit/down_read_interruptible")
+int BPF_PROG(down_read_interruptible_exit, struct rw_semaphore *lock, long ret)
+{
+	if (ret)
+		lock_aborted(lock);
+	else
+		lock_acquired(lock);
+	return 0;
+}
+
+SEC("fentry/down_read_killable")
+int BPF_PROG(down_read_killable, struct rw_semaphore *lock)
+{
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("fexit/down_read_killable")
+int BPF_PROG(down_read_killable_exit, struct rw_semaphore *lock, long ret)
+{
+	if (ret)
+		lock_aborted(lock);
+	else
+		lock_acquired(lock);
+	return 0;
+}
+
+SEC("fentry/up_read")
+int BPF_PROG(up_read, struct rw_semaphore *lock)
+{
+	lock_released(lock);
+	return 0;
+}
+
+SEC("fentry/down_write")
+int BPF_PROG(down_write, struct rw_semaphore *lock)
+{
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("fexit/down_write")
+int BPF_PROG(down_write_exit, struct rw_semaphore *lock, long ret)
+{
+	lock_acquired(lock);
+	return 0;
+}
+
+SEC("fexit/down_write_trylock")
+int BPF_PROG(down_write_trylock_exit, struct rw_semaphore *lock, long ret)
+{
+	if (ret == 1) {
+		lock_contended(ctx, lock);
+		lock_acquired(lock);
+	}
+	return 0;
+}
+
+SEC("fentry/down_write_killable")
+int BPF_PROG(down_write_killable, struct rw_semaphore *lock)
+{
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("fexit/down_write_killable")
+int BPF_PROG(down_write_killable_exit, struct rw_semaphore *lock, long ret)
+{
+	if (ret)
+		lock_aborted(lock);
+	else
+		lock_acquired(lock);
+	return 0;
+}
+
+SEC("fentry/up_write")
+int BPF_PROG(up_write, struct rw_semaphore *lock)
+{
+	lock_released(lock);
+	return 0;
+}
+
+SEC("kprobe/mutex_lock")
+int BPF_KPROBE(kprobe_mutex_lock, struct mutex *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/mutex_lock")
+int BPF_KRETPROBE(kprobe_mutex_lock_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+	lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/mutex_trylock")
+int BPF_KPROBE(kprobe_mutex_trylock, struct mutex *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	return 0;
+}
+
+SEC("kretprobe/mutex_trylock")
+int BPF_KRETPROBE(kprobe_mutex_trylock_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret) {
+		lock_contended(ctx, *lock);
+		lock_acquired(*lock);
+	}
+	return 0;
+}
+
+SEC("kprobe/mutex_lock_interruptible")
+int BPF_KPROBE(kprobe_mutex_lock_interruptible, struct mutex *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/mutex_lock_interruptible")
+int BPF_KRETPROBE(kprobe_mutex_lock_interruptible_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret)
+		lock_aborted(*lock);
+	else
+		lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/mutex_lock_killable")
+int BPF_KPROBE(kprobe_mutex_lock_killable, struct mutex *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/mutex_lock_killable")
+int BPF_KRETPROBE(kprobe_mutex_lock_killable_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret)
+		lock_aborted(*lock);
+	else
+		lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/mutex_unlock")
+int BPF_KPROBE(kprobe_mutex_unlock, struct mutex *lock)
+{
+	lock_released(lock);
+	return 0;
+}
+
+SEC("kprobe/down_read")
+int BPF_KPROBE(kprobe_down_read, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/down_read")
+int BPF_KRETPROBE(kprobe_down_read_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/down_read_trylock")
+int BPF_KPROBE(kprobe_down_read_trylock, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	return 0;
+}
+
+SEC("kretprobe/down_read_trylock")
+int BPF_KRETPROBE(kprobe_down_read_trylock_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret == 1) {
+		lock_contended(ctx, *lock);
+		lock_acquired(*lock);
+	}
+	return 0;
+}
+
+SEC("kprobe/down_read_interruptible")
+int BPF_KPROBE(kprobe_down_read_interruptible, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/down_read_interruptible")
+int BPF_KRETPROBE(kprobe_down_read_interruptible_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret)
+		lock_aborted(*lock);
+	else
+		lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/down_read_killable")
+int BPF_KPROBE(kprobe_down_read_killable, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/down_read_killable")
+int BPF_KRETPROBE(kprobe_down_read_killable_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret)
+		lock_aborted(*lock);
+	else
+		lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/up_read")
+int BPF_KPROBE(kprobe_up_read, struct rw_semaphore *lock)
+{
+	lock_released(lock);
+	return 0;
+}
+
+SEC("kprobe/down_write")
+int BPF_KPROBE(kprobe_down_write, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/down_write")
+int BPF_KRETPROBE(kprobe_down_write_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/down_write_trylock")
+int BPF_KPROBE(kprobe_down_write_trylock, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	return 0;
+}
+
+SEC("kretprobe/down_write_trylock")
+int BPF_KRETPROBE(kprobe_down_write_trylock_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret == 1) {
+		lock_contended(ctx, *lock);
+		lock_acquired(*lock);
+	}
+	return 0;
+}
+
+SEC("kprobe/down_write_killable")
+int BPF_KPROBE(kprobe_down_write_killable, struct rw_semaphore *lock)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+
+	bpf_map_update_elem(&locks, &tid, &lock, BPF_ANY);
+	lock_contended(ctx, lock);
+	return 0;
+}
+
+SEC("kretprobe/down_write_killable")
+int BPF_KRETPROBE(kprobe_down_write_killable_exit, long ret)
+{
+	u32 tid = (u32)bpf_get_current_pid_tgid();
+	void **lock;
+
+	lock = bpf_map_lookup_elem(&locks, &tid);
+	if (!lock)
+		return 0;
+
+	bpf_map_delete_elem(&locks, &tid);
+
+	if (ret)
+		lock_aborted(*lock);
+	else
+		lock_acquired(*lock);
+	return 0;
+}
+
+SEC("kprobe/up_write")
+int BPF_KPROBE(kprobe_up_write, struct rw_semaphore *lock)
+{
+	lock_released(lock);
+	return 0;
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/klockstat.c b/libbpf-tools/klockstat.c
index d3a6fac..505c9ae 100644
--- a/libbpf-tools/klockstat.c
+++ b/libbpf-tools/klockstat.c
@@ -10,13 +10,13 @@
  *     when '-s' > 1 (otherwise it's cluttered).
  * - does not reset stats each interval by default. Can request with -R.
  */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
 #include <argp.h>
 #include <errno.h>
 #include <signal.h>
 #include <stdio.h>
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
@@ -27,6 +27,7 @@
 #include <bpf/bpf.h>
 #include "klockstat.h"
 #include "klockstat.skel.h"
+#include "compat.h"
 #include "trace_helpers.h"
 
 #define warn(...) fprintf(stderr, __VA_ARGS__)
@@ -55,6 +56,7 @@
 	bool reset;
 	bool timestamp;
 	bool verbose;
+	bool per_thread;
 } env = {
 	.nr_locks = 99999999,
 	.nr_stack_entries = 1,
@@ -64,14 +66,14 @@
 	.iterations = 99999999,
 };
 
-const char *argp_program_version = "klockstat 0.1";
+const char *argp_program_version = "klockstat 0.2";
 const char *argp_program_bug_address =
 	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
 static const char args_doc[] = "FUNCTION";
 static const char program_doc[] =
-"Trace mutex lock acquisition and hold times, in nsec\n"
+"Trace mutex/sem lock acquisition and hold times, in nsec\n"
 "\n"
-"Usage: klockstat [-hRTv] [-p PID] [-t TID] [-c FUNC] [-L LOCK] [-n NR_LOCKS]\n"
+"Usage: klockstat [-hPRTv] [-p PID] [-t TID] [-c FUNC] [-L LOCK] [-n NR_LOCKS]\n"
 "                 [-s NR_STACKS] [-S SORT] [-d DURATION] [-i INTERVAL]\n"
 "\v"
 "Examples:\n"
@@ -82,12 +84,13 @@
 "  klockstat -t 181              # trace thread 181 only\n"
 "  klockstat -c pipe_            # print only for lock callers with 'pipe_'\n"
 "                                # prefix\n"
-"  klockstat -L cgroup_mutex     # trace the cgroup_mutex lock only\n"
+"  klockstat -L cgroup_mutex     # trace the cgroup_mutex lock only (accepts addr too)\n"
 "  klockstat -S acq_count        # sort lock acquired results by acquire count\n"
 "  klockstat -S hld_total        # sort lock held results by total held time\n"
 "  klockstat -S acq_count,hld_total  # combination of above\n"
-"  klockstat -n 3                # display top 3 locks\n"
+"  klockstat -n 3                # display top 3 locks/threads\n"
 "  klockstat -s 6                # display 6 stack entries per lock\n"
+"  klockstat -P                  # print stats per thread\n"
 ;
 
 static const struct argp_option opts[] = {
@@ -97,7 +100,7 @@
 	{ "caller", 'c', "FUNC", 0, "Filter by caller string prefix" },
 	{ "lock", 'L', "LOCK", 0, "Filter by specific ksym lock name" },
 	{ 0, 0, 0, 0, "" },
-	{ "locks", 'n', "NR_LOCKS", 0, "Number of locks to print" },
+	{ "locks", 'n', "NR_LOCKS", 0, "Number of locks or threads to print" },
 	{ "stacks", 's', "NR_STACKS", 0, "Number of stack entries to print per lock" },
 	{ "sort", 'S', "SORT", 0, "Sort by field:\n  acq_[max|total|count]\n  hld_[max|total|count]" },
 	{ 0, 0, 0, 0, "" },
@@ -106,11 +109,33 @@
 	{ "reset", 'R', NULL, 0, "Reset stats each interval" },
 	{ "timestamp", 'T', NULL, 0, "Print timestamp" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "per-thread", 'P', NULL, 0, "Print per-thread stats" },
 
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
 
+static void *parse_lock_addr(const char *lock_name)
+{
+	unsigned long lock_addr;
+
+	return sscanf(lock_name, "0x%lx", &lock_addr) ? (void*)lock_addr : NULL;
+}
+
+static void *get_lock_addr(struct ksyms *ksyms, const char *lock_name)
+{
+	const struct ksym *ksym = ksyms__get_symbol(ksyms, lock_name);
+
+	return ksym ? (void*)ksym->addr : parse_lock_addr(lock_name);
+}
+
+static const char *get_lock_name(struct ksyms *ksyms, unsigned long addr)
+{
+	const struct ksym *ksym = ksyms__map_addr(ksyms, addr);
+
+	return (ksym && ksym->addr == addr) ? ksym->name : "no-ksym";
+}
+
 static bool parse_one_sort(struct prog_env *env, const char *sort)
 {
 	const char *field = sort + 4;
@@ -229,6 +254,9 @@
 	case 'T':
 		env->timestamp = true;
 		break;
+	case 'P':
+		env->per_thread = true;
+		break;
 	case 'h':
 		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
 		break;
@@ -241,6 +269,10 @@
 				env->interval = env->duration;
 			env->iterations = env->duration / env->interval;
 		}
+		if (env->per_thread && env->nr_stack_entries != 1) {
+			warn("--per-thread and --stacks cannot be used together\n");
+			argp_usage(state);
+		}
 		break;
 	default:
 		return ARGP_ERR_UNKNOWN;
@@ -327,60 +359,142 @@
 	return buf;
 }
 
+static char *print_caller(char *buf, int size, struct stack_stat *ss)
+{
+	snprintf(buf, size, "%u  %16s", ss->stack_id, ss->ls.acq_max_comm);
+	return buf;
+}
+
+static char *print_time(char *buf, int size, uint64_t nsec)
+{
+	struct {
+		float base;
+		char *unit;
+	} table[] = {
+		{ 1e9 * 3600, "h " },
+		{ 1e9 * 60, "m " },
+		{ 1e9, "s " },
+		{ 1e6, "ms" },
+		{ 1e3, "us" },
+		{ 0, NULL },
+	};
+
+	for (int i = 0; table[i].base; i++) {
+		if (nsec < table[i].base)
+			continue;
+
+		snprintf(buf, size, "%.1f %s", nsec / table[i].base, table[i].unit);
+		return buf;
+	}
+
+	snprintf(buf, size, "%u ns", (unsigned)nsec);
+	return buf;
+}
+
 static void print_acq_header(void)
 {
-	printf("\n                               Caller  Avg Wait    Count   Max Wait   Total Wait\n");
+	if (env.per_thread)
+		printf("\n                Tid              Comm");
+	else
+		printf("\n                               Caller");
+
+	printf("  Avg Wait    Count   Max Wait   Total Wait\n");
 }
 
 static void print_acq_stat(struct ksyms *ksyms, struct stack_stat *ss,
 			   int nr_stack_entries)
 {
 	char buf[40];
+	char avg[40];
+	char max[40];
+	char tot[40];
 	int i;
 
-	printf("%37s %9llu %8llu %10llu %12llu\n",
+	printf("%37s %9s %8llu %10s %12s\n",
 	       symname(ksyms, ss->bt[0], buf, sizeof(buf)),
-	       ss->ls.acq_total_time / ss->ls.acq_count,
+	       print_time(avg, sizeof(avg), ss->ls.acq_total_time / ss->ls.acq_count),
 	       ss->ls.acq_count,
-	       ss->ls.acq_max_time,
-	       ss->ls.acq_total_time);
+	       print_time(max, sizeof(max), ss->ls.acq_max_time),
+	       print_time(tot, sizeof(tot), ss->ls.acq_total_time));
 	for (i = 1; i < nr_stack_entries; i++) {
-		if (!ss->bt[i])
+		if (!ss->bt[i] || env.per_thread)
 			break;
 		printf("%37s\n", symname(ksyms, ss->bt[i], buf, sizeof(buf)));
 	}
-	if (nr_stack_entries > 1)
-		printf("                              Max PID %llu, COMM %s\n",
+	if (nr_stack_entries > 1 && !env.per_thread)
+		printf("                              Max PID %llu, COMM %s, Lock %s (0x%llx)\n",
 		       ss->ls.acq_max_id >> 32,
-		       ss->ls.acq_max_comm);
+		       ss->ls.acq_max_comm,
+			   get_lock_name(ksyms, ss->ls.acq_max_lock_ptr),
+			   ss->ls.acq_max_lock_ptr);
+}
+
+static void print_acq_task(struct stack_stat *ss)
+{
+	char buf[40];
+	char avg[40];
+	char max[40];
+	char tot[40];
+
+	printf("%37s %9s %8llu %10s %12s\n",
+	       print_caller(buf, sizeof(buf), ss),
+	       print_time(avg, sizeof(avg), ss->ls.acq_total_time / ss->ls.acq_count),
+	       ss->ls.acq_count,
+	       print_time(max, sizeof(max), ss->ls.acq_max_time),
+	       print_time(tot, sizeof(tot), ss->ls.acq_total_time));
 }
 
 static void print_hld_header(void)
 {
-	printf("\n                               Caller  Avg Hold    Count   Max Hold   Total Hold\n");
+	if (env.per_thread)
+		printf("\n                Tid              Comm");
+	else
+		printf("\n                               Caller");
+
+	printf("  Avg Hold    Count   Max Hold   Total Hold\n");
 }
 
 static void print_hld_stat(struct ksyms *ksyms, struct stack_stat *ss,
 			   int nr_stack_entries)
 {
 	char buf[40];
+	char avg[40];
+	char max[40];
+	char tot[40];
 	int i;
 
-	printf("%37s %9llu %8llu %10llu %12llu\n",
+	printf("%37s %9s %8llu %10s %12s\n",
 	       symname(ksyms, ss->bt[0], buf, sizeof(buf)),
-	       ss->ls.hld_total_time / ss->ls.hld_count,
+	       print_time(avg, sizeof(avg), ss->ls.hld_total_time / ss->ls.hld_count),
 	       ss->ls.hld_count,
-	       ss->ls.hld_max_time,
-	       ss->ls.hld_total_time);
+	       print_time(max, sizeof(max), ss->ls.hld_max_time),
+	       print_time(tot, sizeof(tot), ss->ls.hld_total_time));
 	for (i = 1; i < nr_stack_entries; i++) {
-		if (!ss->bt[i])
+		if (!ss->bt[i] || env.per_thread)
 			break;
 		printf("%37s\n", symname(ksyms, ss->bt[i], buf, sizeof(buf)));
 	}
-	if (nr_stack_entries > 1)
-		printf("                              Max PID %llu, COMM %s\n",
+	if (nr_stack_entries > 1 && !env.per_thread)
+		printf("                              Max PID %llu, COMM %s, Lock %s (0x%llx)\n",
 		       ss->ls.hld_max_id >> 32,
-		       ss->ls.hld_max_comm);
+		       ss->ls.hld_max_comm,
+			   get_lock_name(ksyms, ss->ls.hld_max_lock_ptr),
+			   ss->ls.hld_max_lock_ptr);
+}
+
+static void print_hld_task(struct stack_stat *ss)
+{
+	char buf[40];
+	char avg[40];
+	char max[40];
+	char tot[40];
+
+	printf("%37s %9s %8llu %10s %12s\n",
+	       print_caller(buf, sizeof(buf), ss),
+	       print_time(avg, sizeof(avg), ss->ls.hld_total_time / ss->ls.hld_count),
+	       ss->ls.hld_count,
+	       print_time(max, sizeof(max), ss->ls.hld_max_time),
+	       print_time(tot, sizeof(tot), ss->ls.hld_total_time));
 }
 
 static int print_stats(struct ksyms *ksyms, int stack_map, int stat_map)
@@ -391,6 +505,7 @@
 	uint32_t lookup_key = 0;
 	uint32_t stack_id;
 	int ret, i;
+	int nr_stack_entries;
 
 	stats = calloc(stats_sz, sizeof(void *));
 	if (!stats) {
@@ -401,7 +516,7 @@
 	while (bpf_map_get_next_key(stat_map, &lookup_key, &stack_id) == 0) {
 		if (stat_idx == stats_sz) {
 			stats_sz *= 2;
-			stats = reallocarray(stats, stats_sz, sizeof(void *));
+			stats = libbpf_reallocarray(stats, stats_sz, sizeof(void *));
 			if (!stats) {
 				warn("Out of memory\n");
 				return -1;
@@ -412,61 +527,58 @@
 			warn("Out of memory\n");
 			return -1;
 		}
-		ss->stack_id = stack_id;
-		if (env.reset) {
-			ret = bpf_map_lookup_and_delete_elem(stat_map,
-							     &stack_id,
-							     &ss->ls);
-			lookup_key = 0;
-		} else {
-			ret = bpf_map_lookup_elem(stat_map, &stack_id, &ss->ls);
-			lookup_key = stack_id;
-		}
+
+		lookup_key = ss->stack_id = stack_id;
+		ret = bpf_map_lookup_elem(stat_map, &stack_id, &ss->ls);
 		if (ret) {
 			free(ss);
 			continue;
 		}
-		if (bpf_map_lookup_elem(stack_map, &stack_id, &ss->bt)) {
+		if (!env.per_thread && bpf_map_lookup_elem(stack_map, &stack_id, &ss->bt)) {
 			/* Can still report the results without a backtrace. */
 			warn("failed to lookup stack_id %u\n", stack_id);
 		}
-		if (!caller_is_traced(ksyms, ss->bt[0])) {
+		if (!env.per_thread && !caller_is_traced(ksyms, ss->bt[0])) {
 			free(ss);
 			continue;
 		}
 		stats[stat_idx++] = ss;
 	}
 
+	nr_stack_entries = MIN(env.nr_stack_entries, PERF_MAX_STACK_DEPTH);
+
 	qsort(stats, stat_idx, sizeof(void*), sort_by_acq);
 	for (i = 0; i < MIN(env.nr_locks, stat_idx); i++) {
 		if (i == 0 || env.nr_stack_entries > 1)
 			print_acq_header();
-		print_acq_stat(ksyms, stats[i],
-			       MIN(env.nr_stack_entries, PERF_MAX_STACK_DEPTH));
+
+		if (env.per_thread)
+			print_acq_task(stats[i]);
+		else
+			print_acq_stat(ksyms, stats[i], nr_stack_entries);
 	}
 
 	qsort(stats, stat_idx, sizeof(void*), sort_by_hld);
 	for (i = 0; i < MIN(env.nr_locks, stat_idx); i++) {
 		if (i == 0 || env.nr_stack_entries > 1)
 			print_hld_header();
-		print_hld_stat(ksyms, stats[i],
-			       MIN(env.nr_stack_entries, PERF_MAX_STACK_DEPTH));
+
+		if (env.per_thread)
+			print_hld_task(stats[i]);
+		else
+			print_hld_stat(ksyms, stats[i], nr_stack_entries);
 	}
 
-	for (i = 0; i < stat_idx; i++)
+	for (i = 0; i < stat_idx; i++) {
+		if (env.reset)
+			bpf_map_delete_elem(stat_map, &ss->stack_id);
 		free(stats[i]);
+        }
 	free(stats);
 
 	return 0;
 }
 
-static void *get_lock_addr(struct ksyms *ksyms, const char *lock_name)
-{
-	const struct ksym *ksym = ksyms__get_symbol(ksyms, lock_name);
-
-	return ksym ? (void*)ksym->addr : NULL;
-}
-
 static volatile bool exiting;
 
 static void sig_hand(int signr)
@@ -483,6 +595,100 @@
 	return vfprintf(stderr, format, args);
 }
 
+static void enable_fentry(struct klockstat_bpf *obj)
+{
+	bool debug_lock;
+
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_trylock, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock_interruptible, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock_interruptible_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock_killable, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_lock_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_mutex_unlock, false);
+
+	bpf_program__set_autoload(obj->progs.kprobe_down_read, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_trylock, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_interruptible, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_interruptible_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_killable, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_read_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_up_read, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write_trylock, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write_killable, false);
+	bpf_program__set_autoload(obj->progs.kprobe_down_write_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.kprobe_up_write, false);
+
+	/* CONFIG_DEBUG_LOCK_ALLOC is on */
+	debug_lock = fentry_can_attach("mutex_lock_nested", NULL);
+	if (!debug_lock)
+		return;
+
+	bpf_program__set_attach_target(obj->progs.mutex_lock, 0,
+				       "mutex_lock_nested");
+	bpf_program__set_attach_target(obj->progs.mutex_lock_exit, 0,
+				       "mutex_lock_nested");
+	bpf_program__set_attach_target(obj->progs.mutex_lock_interruptible, 0,
+				       "mutex_lock_interruptible_nested");
+	bpf_program__set_attach_target(obj->progs.mutex_lock_interruptible_exit, 0,
+				       "mutex_lock_interruptible_nested");
+	bpf_program__set_attach_target(obj->progs.mutex_lock_killable, 0,
+				       "mutex_lock_killable_nested");
+	bpf_program__set_attach_target(obj->progs.mutex_lock_killable_exit, 0,
+				       "mutex_lock_killable_nested");
+
+	bpf_program__set_attach_target(obj->progs.down_read, 0,
+				       "down_read_nested");
+	bpf_program__set_attach_target(obj->progs.down_read_exit, 0,
+				       "down_read_nested");
+	bpf_program__set_attach_target(obj->progs.down_read_killable, 0,
+				       "down_read_killable_nested");
+	bpf_program__set_attach_target(obj->progs.down_read_killable_exit, 0,
+				       "down_read_killable_nested");
+	bpf_program__set_attach_target(obj->progs.down_write, 0,
+				       "down_write_nested");
+	bpf_program__set_attach_target(obj->progs.down_write_exit, 0,
+				       "down_write_nested");
+	bpf_program__set_attach_target(obj->progs.down_write_killable, 0,
+				       "down_write_killable_nested");
+	bpf_program__set_attach_target(obj->progs.down_write_killable_exit, 0,
+				       "down_write_killable_nested");
+}
+
+static void enable_kprobes(struct klockstat_bpf *obj)
+{
+	bpf_program__set_autoload(obj->progs.mutex_lock, false);
+	bpf_program__set_autoload(obj->progs.mutex_lock_exit, false);
+	bpf_program__set_autoload(obj->progs.mutex_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.mutex_lock_interruptible, false);
+	bpf_program__set_autoload(obj->progs.mutex_lock_interruptible_exit, false);
+	bpf_program__set_autoload(obj->progs.mutex_lock_killable, false);
+	bpf_program__set_autoload(obj->progs.mutex_lock_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.mutex_unlock, false);
+
+	bpf_program__set_autoload(obj->progs.down_read, false);
+	bpf_program__set_autoload(obj->progs.down_read_exit, false);
+	bpf_program__set_autoload(obj->progs.down_read_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.down_read_interruptible, false);
+	bpf_program__set_autoload(obj->progs.down_read_interruptible_exit, false);
+	bpf_program__set_autoload(obj->progs.down_read_killable, false);
+	bpf_program__set_autoload(obj->progs.down_read_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.up_read, false);
+	bpf_program__set_autoload(obj->progs.down_write, false);
+	bpf_program__set_autoload(obj->progs.down_write_exit, false);
+	bpf_program__set_autoload(obj->progs.down_write_trylock_exit, false);
+	bpf_program__set_autoload(obj->progs.down_write_killable, false);
+	bpf_program__set_autoload(obj->progs.down_write_killable_exit, false);
+	bpf_program__set_autoload(obj->progs.up_write, false);
+}
+
 int main(int argc, char **argv)
 {
 	static const struct argp argp = {
@@ -505,7 +711,6 @@
 
 	sigaction(SIGINT, &sigact, 0);
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	ksyms = ksyms__load();
@@ -533,21 +738,13 @@
 	obj->rodata->targ_tgid = env.pid;
 	obj->rodata->targ_pid = env.tid;
 	obj->rodata->targ_lock = lock_addr;
+	obj->rodata->per_thread = env.per_thread;
 
-	if (fentry_can_attach("mutex_lock_nested", NULL)) {
-		bpf_program__set_attach_target(obj->progs.mutex_lock, 0,
-					       "mutex_lock_nested");
-		bpf_program__set_attach_target(obj->progs.mutex_lock_exit, 0,
-					       "mutex_lock_nested");
-		bpf_program__set_attach_target(obj->progs.mutex_lock_interruptible, 0,
-					       "mutex_lock_interruptible_nested");
-		bpf_program__set_attach_target(obj->progs.mutex_lock_interruptible_exit, 0,
-					       "mutex_lock_interruptible_nested");
-		bpf_program__set_attach_target(obj->progs.mutex_lock_killable, 0,
-					       "mutex_lock_killable_nested");
-		bpf_program__set_attach_target(obj->progs.mutex_lock_killable_exit, 0,
-					       "mutex_lock_killable_nested");
-	}
+	if (fentry_can_attach("mutex_lock", NULL) ||
+	    fentry_can_attach("mutex_lock_nested", NULL))
+		enable_fentry(obj);
+	else
+		enable_kprobes(obj);
 
 	err = klockstat_bpf__load(obj);
 	if (err) {
@@ -560,7 +757,7 @@
 		goto cleanup;
 	}
 
-	printf("Tracing mutex lock events...  Hit Ctrl-C to end\n");
+	printf("Tracing mutex/sem lock events...  Hit Ctrl-C to end\n");
 
 	for (i = 0; i < env.iterations && !exiting; i++) {
 		sleep(env.interval);
@@ -578,9 +775,10 @@
 			warn("print_stats error, aborting.\n");
 			break;
 		}
+		fflush(stdout);
 	}
 
-	printf("Exiting trace of mutex locks\n");
+	printf("Exiting trace of mutex/sem locks\n");
 
 cleanup:
 	klockstat_bpf__destroy(obj);
diff --git a/libbpf-tools/klockstat.h b/libbpf-tools/klockstat.h
index 01c9ad9..f9f9bec 100644
--- a/libbpf-tools/klockstat.h
+++ b/libbpf-tools/klockstat.h
@@ -10,12 +10,14 @@
 	__u64 acq_total_time;
 	__u64 acq_max_time;
 	__u64 acq_max_id;
+	__u64 acq_max_lock_ptr;
 	char acq_max_comm[TASK_COMM_LEN];
 	__u64 hld_count;
 	__u64 hld_total_time;
 	__u64 hld_max_time;
 	__u64 hld_max_id;
-	char hld_max_comm[TASK_COMM_LEN];
+	__u64 hld_max_lock_ptr;
+		char hld_max_comm[TASK_COMM_LEN];
 };
 
 #endif /*__KLOCKSTAT_H */
diff --git a/libbpf-tools/ksnoop.bpf.c b/libbpf-tools/ksnoop.bpf.c
index 51dfe57..f07ff56 100644
--- a/libbpf-tools/ksnoop.bpf.c
+++ b/libbpf-tools/ksnoop.bpf.c
@@ -89,7 +89,11 @@
 		return NULL;
 
 	if (entry) {
-		ip = KSNOOP_IP_FIX(PT_REGS_IP_CORE(ctx));
+		if (bpf_core_enum_value_exists(enum bpf_func_id,
+					       BPF_FUNC_get_func_ip))
+			ip = bpf_get_func_ip(ctx);
+		else
+			ip = KSNOOP_IP_FIX(PT_REGS_IP_CORE(ctx));
 		if (stack_depth >= FUNC_MAX_STACK_DEPTH - 1)
 			return NULL;
 		/* verifier doesn't like using "stack_depth - 1" as array index
@@ -357,11 +361,9 @@
 			if (currtrace->flags & KSNOOP_F_PTR) {
 				void *dataptr = (void *)data;
 
-				ret = bpf_probe_read(&data, sizeof(data),
-						     dataptr);
+				ret = bpf_probe_read_kernel(&data, sizeof(data), dataptr);
 				if (ret) {
-					currdata->err_type_id =
-						currtrace->type_id;
+					currdata->err_type_id = currtrace->type_id;
 					currdata->err = ret;
 					continue;
 				}
@@ -369,9 +371,7 @@
 			} else if (currtrace->size <=
 				   sizeof(currdata->raw_value)) {
 				/* read member value for predicate comparison */
-				bpf_probe_read(&currdata->raw_value,
-					       currtrace->size,
-					       (void*)data);
+				bpf_probe_read_kernel(&currdata->raw_value, currtrace->size, (void*)data);
 			}
 		} else {
 			currdata->raw_value = data;
@@ -424,7 +424,7 @@
 		tracesize = currtrace->size;
 		if (tracesize > MAX_TRACE_DATA)
 			tracesize = MAX_TRACE_DATA;
-		ret = bpf_probe_read(buf_offset, tracesize, data_ptr);
+		ret = bpf_probe_read_kernel(buf_offset, tracesize, data_ptr);
 		if (ret < 0) {
 			currdata->err_type_id = currtrace->type_id;
 			currdata->err = ret;
@@ -446,13 +446,13 @@
 }
 
 SEC("kprobe/foo")
-int kprobe_entry(struct pt_regs *ctx)
+int BPF_KPROBE(kprobe_entry)
 {
 	return ksnoop(ctx, true);
 }
 
 SEC("kretprobe/foo")
-int kprobe_return(struct pt_regs *ctx)
+int BPF_KRETPROBE(kprobe_return)
 {
 	return ksnoop(ctx, false);
 }
diff --git a/libbpf-tools/ksnoop.c b/libbpf-tools/ksnoop.c
index 69c5840..ea300e1 100644
--- a/libbpf-tools/ksnoop.c
+++ b/libbpf-tools/ksnoop.c
@@ -315,8 +315,6 @@
 		strncpy(val->name, argname, sizeof(val->name));
 
 	for (i = 0; i < MAX_TRACES; i++) {
-		if (!func->args[i].name)
-			continue;
 		if (strcmp(argname, func->args[i].name) != 0)
 			continue;
 		p_debug("setting base arg for val %s to %d", val->name, i);
@@ -464,7 +462,7 @@
 	f = fopen("/proc/kallsyms", "r");
 	if (!f) {
 		err = errno;
-		p_err("failed to open /proc/kallsyms: %d", strerror(err));
+		p_err("failed to open /proc/kallsyms: %s", strerror(err));
 		return err;
 	}
 
@@ -513,7 +511,6 @@
 	char argname[MAX_NAME], membername[MAX_NAME];
 	char tracestr[MAX_STR], argdata[MAX_STR];
 	struct func *func = &trace->func;
-	struct btf_dump_opts opts = { };
 	char *arg, *saveptr;
 	int ret;
 
@@ -560,10 +557,10 @@
 		      strerror(-ret));
 		return -ENOENT;
 	}
-	trace->dump = btf_dump__new(trace->btf, NULL, &opts, trace_printf);
+	trace->dump = btf_dump__new(trace->btf, trace_printf, NULL, NULL);
 	if (!trace->dump) {
 		ret = -errno;
-		p_err("could not create BTF dump : %n", strerror(-ret));
+		p_err("could not create BTF dump : %s", strerror(-ret));
 		return -EINVAL;
 	}
 
@@ -1005,7 +1002,6 @@
 	if (argc < 0)
 		usage();
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	return cmd_select(argc, argv);
diff --git a/libbpf-tools/llcstat.bpf.c b/libbpf-tools/llcstat.bpf.c
index a36fc2d..77fcf83 100644
--- a/libbpf-tools/llcstat.bpf.c
+++ b/libbpf-tools/llcstat.bpf.c
@@ -3,36 +3,43 @@
 #include <vmlinux.h>
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_tracing.h>
+#include "maps.bpf.h"
 #include "llcstat.h"
 
 #define MAX_ENTRIES	10240
 
+const volatile bool targ_per_thread = false;
+
 struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, MAX_ENTRIES);
-	__type(key, u64);
-	__type(value, struct info);
+	__type(key, struct key_info);
+	__type(value, struct value_info);
 } infos SEC(".maps");
 
 static __always_inline
 int trace_event(__u64 sample_period, bool miss)
 {
-	u64 pid = bpf_get_current_pid_tgid();
-	u32 cpu = bpf_get_smp_processor_id();
-	struct info *infop, info = {};
-	u64 key = pid << 32 | cpu;
+	struct key_info key = {};
+	struct value_info *infop, zero = {};
 
-	infop = bpf_map_lookup_elem(&infos, &key);
-	if (!infop) {
-		bpf_get_current_comm(info.comm, sizeof(info.comm));
-		infop = &info;
-	}
+	u64 pid_tgid = bpf_get_current_pid_tgid();
+	key.cpu = bpf_get_smp_processor_id();
+	key.pid = pid_tgid >> 32;
+	if (targ_per_thread)
+		key.tid = (u32)pid_tgid;
+	else
+		key.tid = key.pid;
+
+	infop = bpf_map_lookup_or_try_init(&infos, &key, &zero);
+	if (!infop)
+		return 0;
 	if (miss)
 		infop->miss += sample_period;
 	else
 		infop->ref += sample_period;
-	if (infop == &info)
-		bpf_map_update_elem(&infos, &key, infop, 0);
+	bpf_get_current_comm(infop->comm, sizeof(infop->comm));
+
 	return 0;
 }
 
diff --git a/libbpf-tools/llcstat.c b/libbpf-tools/llcstat.c
index be437bc..c10874b 100644
--- a/libbpf-tools/llcstat.c
+++ b/libbpf-tools/llcstat.c
@@ -3,6 +3,7 @@
 //
 // Based on llcstat(8) from BCC by Teng Qin.
 // 29-Sep-2020   Wenbo Zhang   Created this.
+// 20-Jun-2022   YeZhengMao    Added tid info.
 #include <argp.h>
 #include <signal.h>
 #include <stdio.h>
@@ -14,12 +15,14 @@
 #include <bpf/bpf.h>
 #include "llcstat.h"
 #include "llcstat.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 struct env {
 	int sample_period;
 	time_t duration;
 	bool verbose;
+	bool per_thread;
 } env = {
 	.sample_period = 100,
 	.duration = 10,
@@ -39,6 +42,8 @@
 	{ "sample_period", 'c', "SAMPLE_PERIOD", 0, "Sample one in this many "
 	  "number of cache reference / miss events" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "tid", 't', NULL, 0,
+	  "Summarize cache references and misses by PID/TID" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
@@ -54,6 +59,9 @@
 	case 'v':
 		env.verbose = true;
 		break;
+	case 't':
+		env.per_thread = true;
+		break;
 	case 'c':
 		errno = 0;
 		env.sample_period = strtol(arg, NULL, 10);
@@ -130,10 +138,10 @@
 static void print_map(struct bpf_map *map)
 {
 	__u64 total_ref = 0, total_miss = 0, total_hit, hit;
-	__u64 lookup_key = -1, next_key;
+	__u32 pid, cpu, tid;
+	struct key_info lookup_key = { .cpu = -1 }, next_key;
 	int err, fd = bpf_map__fd(map);
-	struct info info;
-	__u32 pid, cpu;
+	struct value_info info;
 
 	while (!bpf_map_get_next_key(fd, &lookup_key, &next_key)) {
 		err = bpf_map_lookup_elem(fd, &next_key, &info);
@@ -142,11 +150,16 @@
 			return;
 		}
 		hit = info.ref > info.miss ? info.ref - info.miss : 0;
-		pid = next_key >> 32;
-		cpu = next_key;
-		printf("%-8u %-16s %-4u %12llu %12llu %6.2f%%\n", pid, info.comm,
-			cpu, info.ref, info.miss, info.ref > 0 ?
-			hit * 1.0 / info.ref * 100 : 0);
+		cpu = next_key.cpu;
+		pid = next_key.pid;
+		tid = next_key.tid;
+		printf("%-8u ", pid);
+		if (env.per_thread) {
+			printf("%-8u ", tid);
+		}
+		printf("%-16s %-4u %12llu %12llu %6.2f%%\n",
+			info.comm, cpu, info.ref, info.miss,
+			info.ref > 0 ? hit * 1.0 / info.ref * 100 : 0);
 		total_miss += info.miss;
 		total_ref += info.ref;
 		lookup_key = next_key;
@@ -156,7 +169,7 @@
 		total_ref, total_miss, total_ref > 0 ?
 		total_hit * 1.0 / total_ref * 100 : 0);
 
-	lookup_key = -1;
+	lookup_key.cpu = -1;
 	while (!bpf_map_get_next_key(fd, &lookup_key, &next_key)) {
 		err = bpf_map_delete_elem(fd, &next_key);
 		if (err < 0) {
@@ -170,6 +183,7 @@
 int main(int argc, char **argv)
 {
 	struct bpf_link **rlinks = NULL, **mlinks = NULL;
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -182,7 +196,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	nr_cpus = libbpf_num_possible_cpus();
@@ -198,12 +211,26 @@
 		return 1;
 	}
 
-	obj = llcstat_bpf__open_and_load();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = llcstat_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open and/or load BPF object\n");
 		goto cleanup;
 	}
 
+	obj->rodata->targ_per_thread = env.per_thread;
+
+	err = llcstat_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
 	if (open_and_attach_perf_event(PERF_COUNT_HW_CACHE_MISSES,
 					env.sample_period,
 					obj->progs.on_cache_miss, mlinks))
@@ -219,8 +246,12 @@
 
 	sleep(env.duration);
 
-	printf("%-8s %-16s %-4s %12s %12s %7s\n",
-		"PID", "NAME", "CPU", "REFERENCE", "MISS", "HIT%");
+	printf("%-8s ", "PID");
+	if (env.per_thread) {
+		printf("%-8s ", "TID");
+	}
+	printf("%-16s %-4s %12s %12s %7s\n",
+		"NAME", "CPU", "REFERENCE", "MISS", "HIT%");
 
 	print_map(obj->maps.infos);
 
@@ -232,6 +263,7 @@
 	free(mlinks);
 	free(rlinks);
 	llcstat_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/llcstat.h b/libbpf-tools/llcstat.h
index 8123cd7..83a50db 100644
--- a/libbpf-tools/llcstat.h
+++ b/libbpf-tools/llcstat.h
@@ -4,10 +4,16 @@
 
 #define TASK_COMM_LEN	16
 
-struct info {
+struct value_info {
 	__u64 ref;
 	__u64 miss;
 	char comm[TASK_COMM_LEN];
 };
 
+struct key_info {
+	__u32 cpu;
+	__u32 pid;
+	__u32 tid;
+};
+
 #endif /* __LLCSTAT_H */
diff --git a/libbpf-tools/loongarch/vmlinux.h b/libbpf-tools/loongarch/vmlinux.h
new file mode 120000
index 0000000..4999e54
--- /dev/null
+++ b/libbpf-tools/loongarch/vmlinux.h
@@ -0,0 +1 @@
+vmlinux_602.h
\ No newline at end of file
diff --git a/libbpf-tools/arm64/vmlinux_510.h b/libbpf-tools/loongarch/vmlinux_602.h
similarity index 60%
copy from libbpf-tools/arm64/vmlinux_510.h
copy to libbpf-tools/loongarch/vmlinux_602.h
index f84b134..eaf94a4 100644
--- a/libbpf-tools/arm64/vmlinux_510.h
+++ b/libbpf-tools/loongarch/vmlinux_602.h
@@ -62,8 +62,6 @@
 
 typedef int __kernel_clockid_t;
 
-typedef __u32 __le32;
-
 typedef unsigned int __poll_t;
 
 typedef u32 __kernel_dev_t;
@@ -92,12 +90,12 @@
 
 typedef u32 uint32_t;
 
+typedef u64 uint64_t;
+
 typedef u64 sector_t;
 
 typedef u64 blkcnt_t;
 
-typedef u64 dma_addr_t;
-
 typedef unsigned int gfp_t;
 
 typedef unsigned int fmode_t;
@@ -136,36 +134,15 @@
 };
 
 struct kernel_symbol {
-	int value_offset;
-	int name_offset;
-	int namespace_offset;
+	long unsigned int value;
+	const char *name;
+	const char *namespace;
 };
 
-struct jump_entry {
-	s32 code;
-	s32 target;
-	long int key;
-};
-
-struct static_key_mod;
-
-struct static_key {
-	atomic_t enabled;
-	union {
-		long unsigned int type;
-		struct jump_entry *entries;
-		struct static_key_mod *next;
-	};
-};
-
-struct static_key_false {
-	struct static_key key;
-};
+typedef atomic64_t atomic_long_t;
 
 typedef int (*initcall_t)();
 
-typedef int initcall_entry_t;
-
 struct lock_class_key {};
 
 struct fs_context;
@@ -194,6 +171,7 @@
 	struct lock_class_key s_writers_key[3];
 	struct lock_class_key i_lock_key;
 	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
 	struct lock_class_key i_mutex_dir_key;
 };
 
@@ -203,8 +181,6 @@
 	int early;
 };
 
-typedef atomic64_t atomic_long_t;
-
 struct qspinlock {
 	union {
 		atomic_t val;
@@ -242,18 +218,6 @@
 
 typedef struct raw_spinlock raw_spinlock_t;
 
-struct spinlock {
-	union {
-		struct raw_spinlock rlock;
-	};
-};
-
-typedef struct spinlock spinlock_t;
-
-typedef struct {
-	arch_rwlock_t raw_lock;
-} rwlock_t;
-
 struct ratelimit_state {
 	raw_spinlock_t lock;
 	int interval;
@@ -264,6 +228,225 @@
 	long unsigned int flags;
 };
 
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct refcount_struct {
+	atomic_t refs;
+};
+
+typedef struct refcount_struct refcount_t;
+
+struct kref {
+	refcount_t refcount;
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kernfs_node;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+};
+
+struct module_param_attrs;
+
+struct completion;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct optimistic_spin_queue {
+	atomic_t tail;
+};
+
+struct mutex {
+	atomic_long_t owner;
+	raw_spinlock_t wait_lock;
+	struct optimistic_spin_queue osq;
+	struct list_head wait_list;
+};
+
+struct rb_node {
+	long unsigned int __rb_parent_color;
+	struct rb_node *rb_right;
+	struct rb_node *rb_left;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_layout {
+	void *base;
+	unsigned int size;
+	unsigned int text_size;
+	unsigned int ro_size;
+	unsigned int ro_after_init_size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_section {
+	int shndx;
+	int num_entries;
+	int max_entries;
+};
+
+struct plt_entry;
+
+struct mod_arch_specific {
+	struct mod_section got;
+	struct mod_section plt;
+	struct mod_section plt_idx;
+	struct plt_entry *ftrace_trampolines;
+};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+struct module_attribute;
+
+struct kernel_param;
+
+struct exception_table_entry;
+
+struct bug_entry;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct tracepoint;
+
+typedef struct tracepoint * const tracepoint_ptr_t;
+
+struct srcu_struct;
+
+struct bpf_raw_event_map;
+
+struct trace_event_call;
+
+struct trace_eval_map;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	unsigned char build_id[20];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct module_layout core_layout;
+	struct module_layout init_layout;
+	struct mod_arch_specific arch;
+	long unsigned int taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	unsigned int num_ftrace_callsites;
+	long unsigned int *ftrace_callsites;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	long unsigned int *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kernel_param_ops {
+	unsigned int flags;
+	int (*set)(const char *, const struct kernel_param *);
+	int (*get)(char *, const struct kernel_param *);
+	void (*free)(void *);
+};
+
 typedef void *fl_owner_t;
 
 struct file;
@@ -272,6 +455,8 @@
 
 struct iov_iter;
 
+struct io_comp_batch;
+
 struct dir_context;
 
 struct poll_table_struct;
@@ -288,6 +473,8 @@
 
 struct seq_file;
 
+struct io_uring_cmd;
+
 struct file_operations {
 	struct module *owner;
 	loff_t (*llseek)(struct file *, loff_t, int);
@@ -295,7 +482,7 @@
 	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
 	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
 	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
-	int (*iopoll)(struct kiocb *, bool);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
 	int (*iterate)(struct file *, struct dir_context *);
 	int (*iterate_shared)(struct file *, struct dir_context *);
 	__poll_t (*poll)(struct file *, struct poll_table_struct *);
@@ -321,16 +508,19 @@
 	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
 	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
 	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
+	int (*uring_cmd_iopoll)(struct io_uring_cmd *, struct io_comp_batch *, unsigned int);
 };
 
-enum system_states {
-	SYSTEM_BOOTING = 0,
-	SYSTEM_SCHEDULING = 1,
-	SYSTEM_RUNNING = 2,
-	SYSTEM_HALT = 3,
-	SYSTEM_POWER_OFF = 4,
-	SYSTEM_RESTART = 5,
-	SYSTEM_SUSPEND = 6,
+struct static_call_key {
+	void *func;
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	short unsigned int line;
+	short unsigned int flags;
 };
 
 typedef __s64 time64_t;
@@ -345,51 +535,6 @@
 	long int tv_nsec;
 };
 
-struct bug_entry {
-	int bug_addr_disp;
-	int file_disp;
-	short unsigned int line;
-	short unsigned int flags;
-};
-
-struct cpumask {
-	long unsigned int bits[2];
-};
-
-typedef struct cpumask cpumask_t;
-
-typedef struct cpumask cpumask_var_t[1];
-
-struct llist_node {
-	struct llist_node *next;
-};
-
-struct __call_single_node {
-	struct llist_node llist;
-	union {
-		unsigned int u_flags;
-		atomic_t a_flags;
-	};
-	u16 src;
-	u16 dst;
-};
-
-typedef void (*smp_call_func_t)(void *);
-
-struct __call_single_data {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llist;
-			unsigned int flags;
-			u16 src;
-			u16 dst;
-		};
-	};
-	smp_call_func_t func;
-	void *info;
-};
-
 enum timespec_type {
 	TT_NONE = 0,
 	TT_NATIVE = 1,
@@ -410,6 +555,7 @@
 };
 
 struct restart_block {
+	long unsigned int arch_data;
 	long int (*fn)(struct restart_block *);
 	union {
 		struct {
@@ -439,68 +585,131 @@
 	};
 };
 
-typedef long unsigned int mm_segment_t;
+struct cpumask {
+	long unsigned int bits[1];
+};
+
+typedef struct cpumask cpumask_t;
+
+typedef struct cpumask cpumask_var_t[1];
+
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
+union fpureg {
+	__u32 val32[8];
+	__u64 val64[4];
+};
+
+struct loongarch_fpu {
+	unsigned int fcsr;
+	uint64_t fcc;
+	union fpureg fpr[32];
+};
+
+struct loongarch_vdso_info;
+
+struct thread_struct {
+	long unsigned int reg01;
+	long unsigned int reg03;
+	long unsigned int reg22;
+	long unsigned int reg23;
+	long unsigned int reg24;
+	long unsigned int reg25;
+	long unsigned int reg26;
+	long unsigned int reg27;
+	long unsigned int reg28;
+	long unsigned int reg29;
+	long unsigned int reg30;
+	long unsigned int reg31;
+	long unsigned int sched_ra;
+	long unsigned int sched_cfa;
+	long unsigned int csr_prmd;
+	long unsigned int csr_crmd;
+	long unsigned int csr_euen;
+	long unsigned int csr_ecfg;
+	long unsigned int csr_badvaddr;
+	long unsigned int scr0;
+	long unsigned int scr1;
+	long unsigned int scr2;
+	long unsigned int scr3;
+	long unsigned int eflags;
+	long unsigned int trap_nr;
+	long unsigned int error_code;
+	struct loongarch_vdso_info *vdso;
+	long: 64;
+	struct loongarch_fpu fpu;
+	long: 64;
+	long: 64;
+};
+
+typedef unsigned int vm_fault_t;
+
+struct vm_fault;
+
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+struct loongarch_vdso_info {
+	void *vdso;
+	long unsigned int size;
+	long unsigned int offset_sigreturn;
+	struct vm_special_mapping code_mapping;
+	struct vm_special_mapping data_mapping;
+};
+
+struct task_struct;
+
+struct pt_regs;
 
 struct thread_info {
+	struct task_struct *task;
 	long unsigned int flags;
-	mm_segment_t addr_limit;
-	u64 ttbr0;
+	long unsigned int tp_value;
+	__u32 cpu;
+	int preempt_count;
+	struct pt_regs *regs;
+	long unsigned int syscall;
+	long unsigned int syscall_work;
+};
+
+struct llist_node {
+	struct llist_node *next;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
 	union {
-		u64 preempt_count;
-		struct {
-			u32 count;
-			u32 need_resched;
-		} preempt;
+		unsigned int u_flags;
+		atomic_t a_flags;
 	};
+	u16 src;
+	u16 dst;
 };
 
-struct refcount_struct {
-	atomic_t refs;
-};
-
-typedef struct refcount_struct refcount_t;
-
 struct load_weight {
 	long unsigned int weight;
 	u32 inv_weight;
 };
 
-struct rb_node {
-	long unsigned int __rb_parent_color;
-	struct rb_node *rb_right;
-	struct rb_node *rb_left;
-};
-
-struct sched_statistics {
-	u64 wait_start;
-	u64 wait_max;
-	u64 wait_count;
-	u64 wait_sum;
-	u64 iowait_count;
-	u64 iowait_sum;
-	u64 sleep_start;
-	u64 sleep_max;
-	s64 sum_sleep_runtime;
-	u64 block_start;
-	u64 block_max;
-	u64 exec_max;
-	u64 slice_max;
-	u64 nr_migrations_cold;
-	u64 nr_failed_migrations_affine;
-	u64 nr_failed_migrations_running;
-	u64 nr_failed_migrations_hot;
-	u64 nr_forced_migrations;
-	u64 nr_wakeups;
-	u64 nr_wakeups_sync;
-	u64 nr_wakeups_migrate;
-	u64 nr_wakeups_local;
-	u64 nr_wakeups_remote;
-	u64 nr_wakeups_affine;
-	u64 nr_wakeups_affine_attempts;
-	u64 nr_wakeups_passive;
-	u64 nr_wakeups_idle;
-};
-
 struct util_est {
 	unsigned int enqueued;
 	unsigned int ewma;
@@ -530,7 +739,6 @@
 	u64 vruntime;
 	u64 prev_sum_exec_runtime;
 	u64 nr_migrations;
-	struct sched_statistics statistics;
 	int depth;
 	struct sched_entity *parent;
 	struct cfs_rq *cfs_rq;
@@ -539,9 +747,14 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct sched_avg avg;
 };
 
+struct rt_rq;
+
 struct sched_rt_entity {
 	struct list_head run_list;
 	long unsigned int timeout;
@@ -550,6 +763,9 @@
 	short unsigned int on_rq;
 	short unsigned int on_list;
 	struct sched_rt_entity *back;
+	struct sched_rt_entity *parent;
+	struct rt_rq *rt_rq;
+	struct rt_rq *my_q;
 };
 
 typedef s64 ktime_t;
@@ -596,11 +812,39 @@
 	struct sched_dl_entity *pi_se;
 };
 
-struct uclamp_se {
-	unsigned int value: 11;
-	unsigned int bucket_id: 3;
-	unsigned int active: 1;
-	unsigned int user_defined: 1;
+struct sched_statistics {
+	u64 wait_start;
+	u64 wait_max;
+	u64 wait_count;
+	u64 wait_sum;
+	u64 iowait_count;
+	u64 iowait_sum;
+	u64 sleep_start;
+	u64 sleep_max;
+	s64 sum_sleep_runtime;
+	u64 block_start;
+	u64 block_max;
+	s64 sum_block_runtime;
+	u64 exec_max;
+	u64 slice_max;
+	u64 nr_migrations_cold;
+	u64 nr_failed_migrations_affine;
+	u64 nr_failed_migrations_running;
+	u64 nr_failed_migrations_hot;
+	u64 nr_forced_migrations;
+	u64 nr_wakeups;
+	u64 nr_wakeups_sync;
+	u64 nr_wakeups_migrate;
+	u64 nr_wakeups_local;
+	u64 nr_wakeups_remote;
+	u64 nr_wakeups_affine;
+	u64 nr_wakeups_affine_attempts;
+	u64 nr_wakeups_passive;
+	u64 nr_wakeups_idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 union rcu_special {
@@ -626,16 +870,6 @@
 	struct list_head node_list;
 };
 
-struct vmacache {
-	u64 seqnum;
-	struct vm_area_struct *vmas[4];
-};
-
-struct task_rss_stat {
-	int events;
-	int count[4];
-};
-
 struct prev_cputime {
 	u64 utime;
 	u64 stime;
@@ -697,6 +931,21 @@
 	struct seccomp_filter *filter;
 };
 
+struct syscall_user_dispatch {
+	char *selector;
+	long unsigned int offset;
+	long unsigned int len;
+	bool on_dispatch;
+};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
 struct wake_q_node {
 	struct wake_q_node *next;
 };
@@ -712,7 +961,7 @@
 };
 
 typedef struct {
-	long unsigned int bits[2];
+	long unsigned int bits[1];
 } nodemask_t;
 
 struct seqcount {
@@ -727,17 +976,6 @@
 
 typedef struct seqcount_spinlock seqcount_spinlock_t;
 
-struct optimistic_spin_queue {
-	atomic_t tail;
-};
-
-struct mutex {
-	atomic_long_t owner;
-	spinlock_t wait_lock;
-	struct optimistic_spin_queue osq;
-	struct list_head wait_list;
-};
-
 struct tlbflush_unmap_batch {};
 
 struct page_frag {
@@ -746,83 +984,17 @@
 	__u32 size;
 };
 
-struct latency_record {
-	long unsigned int backtrace[12];
-	unsigned int count;
-	long unsigned int time;
-	long unsigned int max;
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	long unsigned int expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
 };
 
-struct cpu_context {
-	long unsigned int x19;
-	long unsigned int x20;
-	long unsigned int x21;
-	long unsigned int x22;
-	long unsigned int x23;
-	long unsigned int x24;
-	long unsigned int x25;
-	long unsigned int x26;
-	long unsigned int x27;
-	long unsigned int x28;
-	long unsigned int fp;
-	long unsigned int sp;
-	long unsigned int pc;
-};
-
-struct user_fpsimd_state {
-	__int128 unsigned vregs[32];
-	__u32 fpsr;
-	__u32 fpcr;
-	__u32 __reserved[2];
-};
-
-struct perf_event;
-
-struct debug_info {
-	int suspended_step;
-	int bps_disabled;
-	int wps_disabled;
-	struct perf_event *hbp_break[16];
-	struct perf_event *hbp_watch[16];
-};
-
-struct ptrauth_key {
-	long unsigned int lo;
-	long unsigned int hi;
-};
-
-struct ptrauth_keys_user {
-	struct ptrauth_key apia;
-	struct ptrauth_key apib;
-	struct ptrauth_key apda;
-	struct ptrauth_key apdb;
-	struct ptrauth_key apga;
-};
-
-struct ptrauth_keys_kernel {
-	struct ptrauth_key apia;
-};
-
-struct thread_struct {
-	struct cpu_context cpu_context;
-	long: 64;
-	struct {
-		long unsigned int tp_value;
-		long unsigned int tp2_value;
-		struct user_fpsimd_state fpsimd_state;
-	} uw;
-	unsigned int fpsimd_cpu;
-	void *sve_state;
-	unsigned int sve_vl;
-	unsigned int sve_vl_onexec;
-	long unsigned int fault_address;
-	long unsigned int fault_code;
-	struct debug_info debug;
-	struct ptrauth_keys_user keys_user;
-	struct ptrauth_keys_kernel keys_kernel;
-	u64 sctlr_tcf0;
-	u64 gcr_user_incl;
-	long: 64;
+struct llist_head {
+	struct llist_node *first;
 };
 
 struct sched_class;
@@ -833,8 +1005,6 @@
 
 struct pid;
 
-struct completion;
-
 struct cred;
 
 struct key;
@@ -877,8 +1047,6 @@
 
 struct robust_list_head;
 
-struct compat_robust_list_head;
-
 struct futex_pi_state;
 
 struct perf_event_context;
@@ -897,20 +1065,18 @@
 
 struct request_queue;
 
-struct uprobe_task;
+struct bpf_local_storage;
 
-struct vm_struct;
+struct bpf_run_ctx;
 
 struct task_struct {
-	struct thread_info thread_info;
-	volatile long int state;
+	unsigned int __state;
 	void *stack;
 	refcount_t usage;
 	unsigned int flags;
 	unsigned int ptrace;
 	int on_cpu;
 	struct __call_single_node wake_entry;
-	unsigned int cpu;
 	unsigned int wakee_flips;
 	long unsigned int wakee_flip_decay_ts;
 	struct task_struct *last_wakee;
@@ -921,43 +1087,38 @@
 	int static_prio;
 	int normal_prio;
 	unsigned int rt_priority;
-	const struct sched_class *sched_class;
-	long: 64;
-	long: 64;
-	long: 64;
+	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
 	struct sched_entity se;
 	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
 	struct sched_dl_entity dl;
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
-	struct hlist_head preempt_notifiers;
+	const struct sched_class *sched_class;
+	struct task_group *sched_task_group;
+	long: 64;
+	struct sched_statistics stats;
 	unsigned int btrace_seq;
 	unsigned int policy;
 	int nr_cpus_allowed;
 	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
 	cpumask_t cpus_mask;
-	long unsigned int rcu_tasks_nvcsw;
-	u8 rcu_tasks_holdout;
-	u8 rcu_tasks_idx;
-	int rcu_tasks_idle_cpu;
-	struct list_head rcu_tasks_holdout_list;
+	void *migration_pending;
+	short unsigned int migration_disabled;
+	short unsigned int migration_flags;
 	int trc_reader_nesting;
 	int trc_ipi_to_cpu;
 	union rcu_special trc_reader_special;
-	bool trc_reader_checked;
 	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
 	struct sched_info sched_info;
 	struct list_head tasks;
 	struct plist_node pushable_tasks;
 	struct rb_node pushable_dl_tasks;
 	struct mm_struct *mm;
 	struct mm_struct *active_mm;
-	struct vmacache vmacache;
-	struct task_rss_stat rss_stat;
 	int exit_state;
 	int exit_code;
 	int exit_signal;
@@ -967,8 +1128,7 @@
 	unsigned int sched_reset_on_fork: 1;
 	unsigned int sched_contributes_to_load: 1;
 	unsigned int sched_migrated: 1;
-	unsigned int sched_psi_wake_requeue: 1;
-	int: 28;
+	int: 29;
 	unsigned int sched_remote_wakeup: 1;
 	unsigned int in_execve: 1;
 	unsigned int in_iowait: 1;
@@ -976,7 +1136,8 @@
 	unsigned int no_cgroup_migration: 1;
 	unsigned int frozen: 1;
 	unsigned int use_memdelay: 1;
-	unsigned int in_memstall: 1;
+	unsigned int in_eventfd: 1;
+	unsigned int in_thrashing: 1;
 	long unsigned int atomic_flags;
 	struct restart_block restart_block;
 	pid_t pid;
@@ -996,6 +1157,7 @@
 	struct completion *vfork_done;
 	int *set_child_tid;
 	int *clear_child_tid;
+	void *worker_private;
 	u64 utime;
 	u64 stime;
 	u64 gtime;
@@ -1015,8 +1177,6 @@
 	struct nameidata *nameidata;
 	struct sysv_sem sysvsem;
 	struct sysv_shm sysvshm;
-	long unsigned int last_switch_count;
-	long unsigned int last_switch_time;
 	struct fs_struct *fs;
 	struct files_struct *files;
 	struct io_uring_task *io_uring;
@@ -1035,6 +1195,7 @@
 	kuid_t loginuid;
 	unsigned int sessionid;
 	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
 	u64 parent_exec_id;
 	u64 self_exec_id;
 	spinlock_t alloc_lock;
@@ -1053,7 +1214,6 @@
 	long unsigned int ptrace_message;
 	kernel_siginfo_t *last_siginfo;
 	struct task_io_accounting ioac;
-	unsigned int psi_flags;
 	u64 acct_rss_mem1;
 	u64 acct_vm_mem1;
 	u64 acct_timexpd;
@@ -1064,12 +1224,11 @@
 	struct css_set *cgroups;
 	struct list_head cg_list;
 	struct robust_list_head *robust_list;
-	struct compat_robust_list_head *compat_robust_list;
 	struct list_head pi_state_list;
 	struct futex_pi_state *pi_state_cache;
 	struct mutex futex_exit_mutex;
 	unsigned int futex_state;
-	struct perf_event_context *perf_event_ctxp[2];
+	struct perf_event_context *perf_event_ctxp;
 	struct mutex perf_event_mutex;
 	struct list_head perf_event_list;
 	struct mempolicy *mempolicy;
@@ -1100,11 +1259,11 @@
 	struct pipe_inode_info *splice_pipe;
 	struct page_frag task_frag;
 	struct task_delay_info *delays;
+	int make_it_fail;
+	unsigned int fail_nth;
 	int nr_dirtied;
 	int nr_dirtied_pause;
 	long unsigned int dirty_paused_when;
-	int latency_record_count;
-	struct latency_record latency_record[32];
 	u64 timer_slack_ns;
 	u64 default_timer_slack_ns;
 	int curr_ret_stack;
@@ -1113,7 +1272,6 @@
 	long long unsigned int ftrace_timestamp;
 	atomic_t trace_overrun;
 	atomic_t tracing_graph_pause;
-	long unsigned int trace;
 	long unsigned int trace_recursion;
 	struct mem_cgroup *memcg_in_oom;
 	gfp_t memcg_oom_gfp_mask;
@@ -1121,442 +1279,37 @@
 	unsigned int memcg_nr_pages_over_high;
 	struct mem_cgroup *active_memcg;
 	struct request_queue *throttle_queue;
-	struct uprobe_task *utask;
 	unsigned int sequential_io;
 	unsigned int sequential_io_avg;
+	struct kmap_ctrl kmap_ctrl;
 	int pagefault_disabled;
 	struct task_struct *oom_reaper_list;
-	struct vm_struct *stack_vm_area;
-	refcount_t stack_refcount;
+	struct timer_list oom_reaper_timer;
 	void *security;
+	struct bpf_local_storage *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	struct llist_head kretprobe_instances;
+	long: 64;
+	long: 64;
 	struct thread_struct thread;
 };
 
-typedef s32 compat_long_t;
-
-typedef u32 compat_uptr_t;
-
-struct user_pt_regs {
-	__u64 regs[31];
-	__u64 sp;
-	__u64 pc;
-	__u64 pstate;
-};
-
 struct pt_regs {
-	union {
-		struct user_pt_regs user_regs;
-		struct {
-			u64 regs[31];
-			u64 sp;
-			u64 pc;
-			u64 pstate;
-		};
-	};
-	u64 orig_x0;
-	s32 syscallno;
-	u32 unused2;
-	u64 orig_addr_limit;
-	u64 pmr_save;
-	u64 stackframe[2];
-	u64 lockdep_hardirqs;
-	u64 exit_rcu;
-};
-
-struct arch_hw_breakpoint_ctrl {
-	u32 __reserved: 19;
-	u32 len: 8;
-	u32 type: 2;
-	u32 privilege: 2;
-	u32 enabled: 1;
-};
-
-struct arch_hw_breakpoint {
-	u64 address;
-	u64 trigger;
-	struct arch_hw_breakpoint_ctrl ctrl;
-};
-
-typedef u64 pteval_t;
-
-typedef u64 pmdval_t;
-
-typedef u64 pudval_t;
-
-typedef u64 pgdval_t;
-
-typedef struct {
-	pteval_t pte;
-} pte_t;
-
-typedef struct {
-	pmdval_t pmd;
-} pmd_t;
-
-typedef struct {
-	pudval_t pud;
-} pud_t;
-
-typedef struct {
-	pgdval_t pgd;
-} pgd_t;
-
-typedef struct {
-	pteval_t pgprot;
-} pgprot_t;
-
-enum module_state {
-	MODULE_STATE_LIVE = 0,
-	MODULE_STATE_COMING = 1,
-	MODULE_STATE_GOING = 2,
-	MODULE_STATE_UNFORMED = 3,
-};
-
-struct kref {
-	refcount_t refcount;
-};
-
-struct kset;
-
-struct kobj_type;
-
-struct kernfs_node;
-
-struct kobject {
-	const char *name;
-	struct list_head entry;
-	struct kobject *parent;
-	struct kset *kset;
-	struct kobj_type *ktype;
-	struct kernfs_node *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-struct module_param_attrs;
-
-struct module_kobject {
-	struct kobject kobj;
-	struct module *mod;
-	struct kobject *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct latch_tree_node {
-	struct rb_node node[2];
-};
-
-struct mod_tree_node {
-	struct module *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node mtn;
-};
-
-struct mod_plt_sec {
-	int plt_shndx;
-	int plt_num_entries;
-	int plt_max_entries;
-};
-
-struct plt_entry;
-
-struct mod_arch_specific {
-	struct mod_plt_sec core;
-	struct mod_plt_sec init;
-	struct plt_entry *ftrace_trampolines;
-};
-
-struct elf64_sym;
-
-typedef struct elf64_sym Elf64_Sym;
-
-struct mod_kallsyms {
-	Elf64_Sym *symtab;
-	unsigned int num_symtab;
-	char *strtab;
-	char *typetab;
-};
-
-typedef const int tracepoint_ptr_t;
-
-struct module_attribute;
-
-struct kernel_param;
-
-struct exception_table_entry;
-
-struct module_sect_attrs;
-
-struct module_notes_attrs;
-
-struct srcu_struct;
-
-struct bpf_raw_event_map;
-
-struct trace_event_call;
-
-struct trace_eval_map;
-
-struct error_injection_entry;
-
-struct module {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject mkobj;
-	struct module_attribute *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool using_gplonly_symbols;
-	const struct kernel_symbol *unused_syms;
-	const s32 *unused_crcs;
-	unsigned int num_unused_syms;
-	unsigned int num_unused_gpl_syms;
-	const struct kernel_symbol *unused_gpl_syms;
-	const s32 *unused_gpl_crcs;
-	bool sig_ok;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout core_layout;
-	struct module_layout init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	void *noinstr_text_start;
-	unsigned int noinstr_text_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	unsigned int num_ftrace_callsites;
-	long unsigned int *ftrace_callsites;
-	void *kprobes_text_start;
-	unsigned int kprobes_text_size;
-	long unsigned int *kprobe_blacklist;
-	unsigned int num_kprobe_blacklist;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum perf_event_state {
-	PERF_EVENT_STATE_DEAD = 4294967292,
-	PERF_EVENT_STATE_EXIT = 4294967293,
-	PERF_EVENT_STATE_ERROR = 4294967294,
-	PERF_EVENT_STATE_OFF = 4294967295,
-	PERF_EVENT_STATE_INACTIVE = 0,
-	PERF_EVENT_STATE_ACTIVE = 1,
+	long unsigned int regs[32];
+	long unsigned int orig_a0;
+	long unsigned int csr_era;
+	long unsigned int csr_badvaddr;
+	long unsigned int csr_crmd;
+	long unsigned int csr_prmd;
+	long unsigned int csr_euen;
+	long unsigned int csr_ecfg;
+	long unsigned int csr_estat;
+	long unsigned int __last[0];
 };
 
 typedef struct {
-	atomic_long_t a;
-} local_t;
-
-typedef struct {
-	local_t a;
-} local64_t;
-
-struct perf_event_attr {
-	__u32 type;
-	__u32 size;
-	__u64 config;
-	union {
-		__u64 sample_period;
-		__u64 sample_freq;
-	};
-	__u64 sample_type;
-	__u64 read_format;
-	__u64 disabled: 1;
-	__u64 inherit: 1;
-	__u64 pinned: 1;
-	__u64 exclusive: 1;
-	__u64 exclude_user: 1;
-	__u64 exclude_kernel: 1;
-	__u64 exclude_hv: 1;
-	__u64 exclude_idle: 1;
-	__u64 mmap: 1;
-	__u64 comm: 1;
-	__u64 freq: 1;
-	__u64 inherit_stat: 1;
-	__u64 enable_on_exec: 1;
-	__u64 task: 1;
-	__u64 watermark: 1;
-	__u64 precise_ip: 2;
-	__u64 mmap_data: 1;
-	__u64 sample_id_all: 1;
-	__u64 exclude_host: 1;
-	__u64 exclude_guest: 1;
-	__u64 exclude_callchain_kernel: 1;
-	__u64 exclude_callchain_user: 1;
-	__u64 mmap2: 1;
-	__u64 comm_exec: 1;
-	__u64 use_clockid: 1;
-	__u64 context_switch: 1;
-	__u64 write_backward: 1;
-	__u64 namespaces: 1;
-	__u64 ksymbol: 1;
-	__u64 bpf_event: 1;
-	__u64 aux_output: 1;
-	__u64 cgroup: 1;
-	__u64 text_poke: 1;
-	__u64 __reserved_1: 30;
-	union {
-		__u32 wakeup_events;
-		__u32 wakeup_watermark;
-	};
-	__u32 bp_type;
-	union {
-		__u64 bp_addr;
-		__u64 kprobe_func;
-		__u64 uprobe_path;
-		__u64 config1;
-	};
-	union {
-		__u64 bp_len;
-		__u64 kprobe_addr;
-		__u64 probe_offset;
-		__u64 config2;
-	};
-	__u64 branch_sample_type;
-	__u64 sample_regs_user;
-	__u32 sample_stack_user;
-	__s32 clockid;
-	__u64 sample_regs_intr;
-	__u32 aux_watermark;
-	__u16 sample_max_stack;
-	__u16 __reserved_2;
-	__u32 aux_sample_size;
-	__u32 __reserved_3;
-};
-
-struct hw_perf_event_extra {
-	u64 config;
-	unsigned int reg;
-	int alloc;
-	int idx;
-};
-
-struct hw_perf_event {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	union {
-		struct {
-			u64 last_period;
-			local64_t period_left;
-		};
-		struct {
-			u64 saved_metric;
-			u64 saved_slots;
-		};
-	};
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
+	arch_rwlock_t raw_lock;
+} rwlock_t;
 
 struct wait_queue_head {
 	spinlock_t lock;
@@ -1565,425 +1318,15 @@
 
 typedef struct wait_queue_head wait_queue_head_t;
 
-struct irq_work {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llnode;
-			atomic_t flags;
-		};
-	};
-	void (*func)(struct irq_work *);
+struct hlist_bl_node;
+
+struct hlist_bl_head {
+	struct hlist_bl_node *first;
 };
 
-struct perf_addr_filters_head {
-	struct list_head list;
-	raw_spinlock_t lock;
-	unsigned int nr_file_filters;
-};
-
-struct perf_sample_data;
-
-typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
-
-struct ftrace_ops;
-
-typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct pt_regs *);
-
-struct ftrace_hash;
-
-struct ftrace_ops_hash {
-	struct ftrace_hash *notrace_hash;
-	struct ftrace_hash *filter_hash;
-	struct mutex regex_lock;
-};
-
-struct ftrace_ops {
-	ftrace_func_t func;
-	struct ftrace_ops *next;
-	long unsigned int flags;
-	void *private;
-	ftrace_func_t saved_func;
-	struct ftrace_ops_hash local_hash;
-	struct ftrace_ops_hash *func_hash;
-	struct ftrace_ops_hash old_hash;
-	long unsigned int trampoline;
-	long unsigned int trampoline_size;
-	struct list_head list;
-};
-
-struct pmu;
-
-struct perf_buffer;
-
-struct fasync_struct;
-
-struct perf_addr_filter_range;
-
-struct pid_namespace;
-
-struct bpf_prog;
-
-struct event_filter;
-
-struct perf_cgroup;
-
-struct perf_event {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event *group_leader;
-	struct pmu *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event hw;
-	struct perf_event_context *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct perf_buffer *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event *aux_event;
-	void (*destroy)(struct perf_event *);
-	struct callback_head callback_head;
-	struct pid_namespace *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t orig_overflow_handler;
-	struct bpf_prog *prog;
-	struct trace_event_call *tp_event;
-	struct event_filter *filter;
-	struct ftrace_ops ftrace_ops;
-	struct perf_cgroup *cgrp;
-	void *security;
-	struct list_head sb_list;
-};
-
-struct wait_queue_entry;
-
-typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
-
-struct wait_queue_entry {
-	unsigned int flags;
-	void *private;
-	wait_queue_func_t func;
-	struct list_head entry;
-};
-
-typedef struct wait_queue_entry wait_queue_entry_t;
-
-enum pid_type {
-	PIDTYPE_PID = 0,
-	PIDTYPE_TGID = 1,
-	PIDTYPE_PGID = 2,
-	PIDTYPE_SID = 3,
-	PIDTYPE_MAX = 4,
-};
-
-struct upid {
-	int nr;
-	struct pid_namespace *ns;
-};
-
-struct xarray {
-	spinlock_t xa_lock;
-	gfp_t xa_flags;
-	void *xa_head;
-};
-
-struct idr {
-	struct xarray idr_rt;
-	unsigned int idr_base;
-	unsigned int idr_next;
-};
-
-struct proc_ns_operations;
-
-struct ns_common {
-	atomic_long_t stashed;
-	const struct proc_ns_operations *ops;
-	unsigned int inum;
-};
-
-struct kmem_cache;
-
-struct fs_pin;
-
-struct user_namespace;
-
-struct ucounts;
-
-struct pid_namespace {
-	struct kref kref;
-	struct idr idr;
-	struct callback_head rcu;
-	unsigned int pid_allocated;
-	struct task_struct *child_reaper;
-	struct kmem_cache *pid_cachep;
-	unsigned int level;
-	struct pid_namespace *parent;
-	struct fs_pin *bacct;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	int reboot;
-	struct ns_common ns;
-};
-
-struct pid {
-	refcount_t count;
-	unsigned int level;
-	spinlock_t lock;
-	struct hlist_head tasks[4];
-	struct hlist_head inodes;
-	wait_queue_head_t wait_pidfd;
-	struct callback_head rcu;
-	struct upid numbers[1];
-};
-
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map {
-	u32 nr_extents;
-	union {
-		struct uid_gid_extent extent[5];
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
-
-typedef struct {
-	gid_t val;
-} kgid_t;
-
-struct rw_semaphore {
-	atomic_long_t count;
-	atomic_long_t owner;
-	struct optimistic_spin_queue osq;
-	raw_spinlock_t wait_lock;
-	struct list_head wait_list;
-};
-
-struct work_struct;
-
-typedef void (*work_func_t)(struct work_struct *);
-
-struct work_struct {
-	atomic_long_t data;
-	struct list_head entry;
-	work_func_t func;
-};
-
-struct ctl_table;
-
-struct ctl_table_root;
-
-struct ctl_table_set;
-
-struct ctl_dir;
-
-struct ctl_node;
-
-struct ctl_table_header {
-	union {
-		struct {
-			struct ctl_table *ctl_table;
-			int used;
-			int count;
-			int nreg;
-		};
-		struct callback_head rcu;
-	};
-	struct completion *unregistering;
-	struct ctl_table *ctl_table_arg;
-	struct ctl_table_root *root;
-	struct ctl_table_set *set;
-	struct ctl_dir *parent;
-	struct ctl_node *node;
-	struct hlist_head inodes;
-};
-
-struct ctl_dir {
-	struct ctl_table_header header;
-	struct rb_root root;
-};
-
-struct ctl_table_set {
-	int (*is_seen)(struct ctl_table_set *);
-	struct ctl_dir dir;
-};
-
-struct user_namespace {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct key *persistent_keyring_register;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts *ucounts;
-	int ucount_max[10];
-};
-
-struct timer_list {
-	struct hlist_node entry;
-	long unsigned int expires;
-	void (*function)(struct timer_list *);
-	u32 flags;
-};
-
-struct workqueue_struct;
-
-struct delayed_work {
-	struct work_struct work;
-	struct timer_list timer;
-	struct workqueue_struct *wq;
-	int cpu;
-};
-
-struct rcu_work {
-	struct work_struct work;
-	struct callback_head rcu;
-	struct workqueue_struct *wq;
-};
-
-typedef struct page *pgtable_t;
-
-struct address_space;
-
-struct dev_pagemap;
-
-struct obj_cgroup;
-
-struct page {
-	long unsigned int flags;
-	union {
-		struct {
-			struct list_head lru;
-			struct address_space *mapping;
-			long unsigned int index;
-			long unsigned int private;
-		};
-		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
-			union {
-				struct list_head slab_list;
-				struct {
-					struct page *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
-			};
-		};
-		struct {
-			long unsigned int compound_head;
-			unsigned char compound_dtor;
-			unsigned char compound_order;
-			atomic_t compound_mapcount;
-			unsigned int compound_nr;
-		};
-		struct {
-			long unsigned int _compound_pad_1;
-			atomic_t hpage_pinned_refcount;
-			struct list_head deferred_list;
-		};
-		struct {
-			long unsigned int _pt_pad_1;
-			pgtable_t pmd_huge_pte;
-			long unsigned int _pt_pad_2;
-			union {
-				struct mm_struct *pt_mm;
-				atomic_t pt_frag_refcount;
-			};
-			spinlock_t ptl;
-		};
-		struct {
-			struct dev_pagemap *pgmap;
-			void *zone_device_data;
-		};
-		struct callback_head callback_head;
-	};
-	union {
-		atomic_t _mapcount;
-		unsigned int page_type;
-		unsigned int active;
-		int units;
-	};
-	atomic_t _refcount;
-	union {
-		struct mem_cgroup *mem_cgroup;
-		struct obj_cgroup **obj_cgroups;
-	};
+struct hlist_bl_node {
+	struct hlist_bl_node *next;
+	struct hlist_bl_node **pprev;
 };
 
 struct seqcount_raw_spinlock {
@@ -1997,1842 +1340,6 @@
 	spinlock_t lock;
 } seqlock_t;
 
-struct hrtimer_cpu_base;
-
-struct hrtimer_clock_base {
-	struct hrtimer_cpu_base *cpu_base;
-	unsigned int index;
-	clockid_t clockid;
-	seqcount_raw_spinlock_t seq;
-	struct hrtimer *running;
-	struct timerqueue_head active;
-	ktime_t (*get_time)();
-	ktime_t offset;
-};
-
-struct hrtimer_cpu_base {
-	raw_spinlock_t lock;
-	unsigned int cpu;
-	unsigned int active_bases;
-	unsigned int clock_was_set_seq;
-	unsigned int hres_active: 1;
-	unsigned int in_hrtirq: 1;
-	unsigned int hang_detected: 1;
-	unsigned int softirq_activated: 1;
-	unsigned int nr_events;
-	short unsigned int nr_retries;
-	short unsigned int nr_hangs;
-	unsigned int max_hang_time;
-	ktime_t expires_next;
-	struct hrtimer *next_timer;
-	ktime_t softirq_expires_next;
-	struct hrtimer *softirq_next_timer;
-	struct hrtimer_clock_base clock_base[8];
-};
-
-enum node_states {
-	N_POSSIBLE = 0,
-	N_ONLINE = 1,
-	N_NORMAL_MEMORY = 2,
-	N_HIGH_MEMORY = 2,
-	N_MEMORY = 3,
-	N_CPU = 4,
-	N_GENERIC_INITIATOR = 5,
-	NR_NODE_STATES = 6,
-};
-
-struct rlimit {
-	__kernel_ulong_t rlim_cur;
-	__kernel_ulong_t rlim_max;
-};
-
-struct task_cputime {
-	u64 stime;
-	u64 utime;
-	long long unsigned int sum_exec_runtime;
-};
-
-typedef void __signalfn_t(int);
-
-typedef __signalfn_t *__sighandler_t;
-
-typedef void __restorefn_t();
-
-typedef __restorefn_t *__sigrestore_t;
-
-union sigval {
-	int sival_int;
-	void *sival_ptr;
-};
-
-typedef union sigval sigval_t;
-
-union __sifields {
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-	} _kill;
-	struct {
-		__kernel_timer_t _tid;
-		int _overrun;
-		sigval_t _sigval;
-		int _sys_private;
-	} _timer;
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-		sigval_t _sigval;
-	} _rt;
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-		int _status;
-		__kernel_clock_t _utime;
-		__kernel_clock_t _stime;
-	} _sigchld;
-	struct {
-		void *_addr;
-		union {
-			short int _addr_lsb;
-			struct {
-				char _dummy_bnd[8];
-				void *_lower;
-				void *_upper;
-			} _addr_bnd;
-			struct {
-				char _dummy_pkey[8];
-				__u32 _pkey;
-			} _addr_pkey;
-		};
-	} _sigfault;
-	struct {
-		long int _band;
-		int _fd;
-	} _sigpoll;
-	struct {
-		void *_call_addr;
-		int _syscall;
-		unsigned int _arch;
-	} _sigsys;
-};
-
-struct kernel_siginfo {
-	struct {
-		int si_signo;
-		int si_errno;
-		int si_code;
-		union __sifields _sifields;
-	};
-};
-
-struct user_struct {
-	refcount_t __count;
-	atomic_t processes;
-	atomic_t sigpending;
-	atomic_t fanotify_listeners;
-	atomic_long_t epoll_watches;
-	long unsigned int mq_bytes;
-	long unsigned int locked_shm;
-	long unsigned int unix_inflight;
-	atomic_long_t pipe_bufs;
-	struct hlist_node uidhash_node;
-	kuid_t uid;
-	atomic_long_t locked_vm;
-	atomic_t nr_watches;
-	struct ratelimit_state ratelimit;
-};
-
-struct sigaction {
-	__sighandler_t sa_handler;
-	long unsigned int sa_flags;
-	__sigrestore_t sa_restorer;
-	sigset_t sa_mask;
-};
-
-struct k_sigaction {
-	struct sigaction sa;
-};
-
-struct userfaultfd_ctx;
-
-struct vm_userfaultfd_ctx {
-	struct userfaultfd_ctx *ctx;
-};
-
-struct anon_vma;
-
-struct vm_operations_struct;
-
-struct vm_area_struct {
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	struct vm_area_struct *vm_next;
-	struct vm_area_struct *vm_prev;
-	struct rb_node vm_rb;
-	long unsigned int rb_subtree_gap;
-	struct mm_struct *vm_mm;
-	pgprot_t vm_page_prot;
-	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
-	struct list_head anon_vma_chain;
-	struct anon_vma *anon_vma;
-	const struct vm_operations_struct *vm_ops;
-	long unsigned int vm_pgoff;
-	struct file *vm_file;
-	void *vm_private_data;
-	atomic_long_t swap_readahead_info;
-	struct mempolicy *vm_policy;
-	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
-};
-
-struct mm_rss_stat {
-	atomic_long_t count[4];
-};
-
-struct cpu_itimer {
-	u64 expires;
-	u64 incr;
-};
-
-struct task_cputime_atomic {
-	atomic64_t utime;
-	atomic64_t stime;
-	atomic64_t sum_exec_runtime;
-};
-
-struct thread_group_cputimer {
-	struct task_cputime_atomic cputime_atomic;
-};
-
-struct pacct_struct {
-	int ac_flag;
-	long int ac_exitcode;
-	long unsigned int ac_mem;
-	u64 ac_utime;
-	u64 ac_stime;
-	long unsigned int ac_minflt;
-	long unsigned int ac_majflt;
-};
-
-struct tty_struct;
-
-struct autogroup;
-
-struct taskstats;
-
-struct tty_audit_buf;
-
-struct signal_struct {
-	refcount_t sigcnt;
-	atomic_t live;
-	int nr_threads;
-	struct list_head thread_head;
-	wait_queue_head_t wait_chldexit;
-	struct task_struct *curr_target;
-	struct sigpending shared_pending;
-	struct hlist_head multiprocess;
-	int group_exit_code;
-	int notify_count;
-	struct task_struct *group_exit_task;
-	int group_stop_count;
-	unsigned int flags;
-	unsigned int is_child_subreaper: 1;
-	unsigned int has_child_subreaper: 1;
-	int posix_timer_id;
-	struct list_head posix_timers;
-	struct hrtimer real_timer;
-	ktime_t it_real_incr;
-	struct cpu_itimer it[2];
-	struct thread_group_cputimer cputimer;
-	struct posix_cputimers posix_cputimers;
-	struct pid *pids[4];
-	struct pid *tty_old_pgrp;
-	int leader;
-	struct tty_struct *tty;
-	struct autogroup *autogroup;
-	seqlock_t stats_lock;
-	u64 utime;
-	u64 stime;
-	u64 cutime;
-	u64 cstime;
-	u64 gtime;
-	u64 cgtime;
-	struct prev_cputime prev_cputime;
-	long unsigned int nvcsw;
-	long unsigned int nivcsw;
-	long unsigned int cnvcsw;
-	long unsigned int cnivcsw;
-	long unsigned int min_flt;
-	long unsigned int maj_flt;
-	long unsigned int cmin_flt;
-	long unsigned int cmaj_flt;
-	long unsigned int inblock;
-	long unsigned int oublock;
-	long unsigned int cinblock;
-	long unsigned int coublock;
-	long unsigned int maxrss;
-	long unsigned int cmaxrss;
-	struct task_io_accounting ioac;
-	long long unsigned int sum_sched_runtime;
-	struct rlimit rlim[16];
-	struct pacct_struct pacct;
-	struct taskstats *stats;
-	unsigned int audit_tty;
-	struct tty_audit_buf *tty_audit_buf;
-	bool oom_flag_origin;
-	short int oom_score_adj;
-	short int oom_score_adj_min;
-	struct mm_struct *oom_mm;
-	struct mutex cred_guard_mutex;
-	struct rw_semaphore exec_update_lock;
-};
-
-struct rseq {
-	__u32 cpu_id_start;
-	__u32 cpu_id;
-	union {
-		__u64 ptr64;
-		__u64 ptr;
-	} rseq_cs;
-	__u32 flags;
-	long: 32;
-	long: 64;
-};
-
-struct rq;
-
-struct rq_flags;
-
-struct sched_class {
-	int uclamp_enabled;
-	void (*enqueue_task)(struct rq *, struct task_struct *, int);
-	void (*dequeue_task)(struct rq *, struct task_struct *, int);
-	void (*yield_task)(struct rq *);
-	bool (*yield_to_task)(struct rq *, struct task_struct *);
-	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
-	struct task_struct * (*pick_next_task)(struct rq *);
-	void (*put_prev_task)(struct rq *, struct task_struct *);
-	void (*set_next_task)(struct rq *, struct task_struct *, bool);
-	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
-	int (*select_task_rq)(struct task_struct *, int, int, int);
-	void (*migrate_task_rq)(struct task_struct *, int);
-	void (*task_woken)(struct rq *, struct task_struct *);
-	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *);
-	void (*rq_online)(struct rq *);
-	void (*rq_offline)(struct rq *);
-	void (*task_tick)(struct rq *, struct task_struct *, int);
-	void (*task_fork)(struct task_struct *);
-	void (*task_dead)(struct task_struct *);
-	void (*switched_from)(struct rq *, struct task_struct *);
-	void (*switched_to)(struct rq *, struct task_struct *);
-	void (*prio_changed)(struct rq *, struct task_struct *, int);
-	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
-	void (*update_curr)(struct rq *);
-	void (*task_change_group)(struct task_struct *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	atomic64_t id;
-	void *sigpage;
-	refcount_t pinned;
-	void *vdso;
-	long unsigned int flags;
-} mm_context_t;
-
-struct xol_area;
-
-struct uprobes_state {
-	struct xol_area *xol_area;
-};
-
-struct linux_binfmt;
-
-struct core_state;
-
-struct kioctx_table;
-
-struct mmu_notifier_subscriptions;
-
-struct mm_struct {
-	struct {
-		struct vm_area_struct *mmap;
-		struct rb_root mm_rb;
-		u64 vmacache_seqnum;
-		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-		long unsigned int mmap_base;
-		long unsigned int mmap_legacy_base;
-		long unsigned int task_size;
-		long unsigned int highest_vm_end;
-		pgd_t *pgd;
-		atomic_t membarrier_state;
-		atomic_t mm_users;
-		atomic_t mm_count;
-		atomic_t has_pinned;
-		seqcount_t write_protect_seq;
-		atomic_long_t pgtables_bytes;
-		int map_count;
-		spinlock_t page_table_lock;
-		struct rw_semaphore mmap_lock;
-		struct list_head mmlist;
-		long unsigned int hiwater_rss;
-		long unsigned int hiwater_vm;
-		long unsigned int total_vm;
-		long unsigned int locked_vm;
-		atomic64_t pinned_vm;
-		long unsigned int data_vm;
-		long unsigned int exec_vm;
-		long unsigned int stack_vm;
-		long unsigned int def_flags;
-		spinlock_t arg_lock;
-		long unsigned int start_code;
-		long unsigned int end_code;
-		long unsigned int start_data;
-		long unsigned int end_data;
-		long unsigned int start_brk;
-		long unsigned int brk;
-		long unsigned int start_stack;
-		long unsigned int arg_start;
-		long unsigned int arg_end;
-		long unsigned int env_start;
-		long unsigned int env_end;
-		long unsigned int saved_auxv[46];
-		struct mm_rss_stat rss_stat;
-		struct linux_binfmt *binfmt;
-		mm_context_t context;
-		long unsigned int flags;
-		struct core_state *core_state;
-		spinlock_t ioctx_lock;
-		struct kioctx_table *ioctx_table;
-		struct task_struct *owner;
-		struct user_namespace *user_ns;
-		struct file *exe_file;
-		struct mmu_notifier_subscriptions *notifier_subscriptions;
-		long unsigned int numa_next_scan;
-		long unsigned int numa_scan_offset;
-		int numa_scan_seq;
-		atomic_t tlb_flush_pending;
-		struct uprobes_state uprobes_state;
-		atomic_long_t hugetlb_usage;
-		struct work_struct async_put_work;
-		u32 pasid;
-	};
-	long unsigned int cpu_bitmap[0];
-};
-
-struct swait_queue_head {
-	raw_spinlock_t lock;
-	struct list_head task_list;
-};
-
-struct completion {
-	unsigned int done;
-	struct swait_queue_head wait;
-};
-
-struct kernel_cap_struct {
-	__u32 cap[2];
-};
-
-typedef struct kernel_cap_struct kernel_cap_t;
-
-struct group_info;
-
-struct cred {
-	atomic_t usage;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t suid;
-	kgid_t sgid;
-	kuid_t euid;
-	kgid_t egid;
-	kuid_t fsuid;
-	kgid_t fsgid;
-	unsigned int securebits;
-	kernel_cap_t cap_inheritable;
-	kernel_cap_t cap_permitted;
-	kernel_cap_t cap_effective;
-	kernel_cap_t cap_bset;
-	kernel_cap_t cap_ambient;
-	unsigned char jit_keyring;
-	struct key *session_keyring;
-	struct key *process_keyring;
-	struct key *thread_keyring;
-	struct key *request_key_auth;
-	void *security;
-	struct user_struct *user;
-	struct user_namespace *user_ns;
-	struct group_info *group_info;
-	union {
-		int non_rcu;
-		struct callback_head rcu;
-	};
-};
-
-typedef int32_t key_serial_t;
-
-typedef uint32_t key_perm_t;
-
-struct key_type;
-
-struct key_tag;
-
-struct keyring_index_key {
-	long unsigned int hash;
-	union {
-		struct {
-			u16 desc_len;
-			char desc[6];
-		};
-		long unsigned int x;
-	};
-	struct key_type *type;
-	struct key_tag *domain_tag;
-	const char *description;
-};
-
-union key_payload {
-	void *rcu_data0;
-	void *data[4];
-};
-
-struct assoc_array_ptr;
-
-struct assoc_array {
-	struct assoc_array_ptr *root;
-	long unsigned int nr_leaves_on_tree;
-};
-
-struct watch_list;
-
-struct key_user;
-
-struct key_restriction;
-
-struct key {
-	refcount_t usage;
-	key_serial_t serial;
-	union {
-		struct list_head graveyard_link;
-		struct rb_node serial_node;
-	};
-	struct watch_list *watchers;
-	struct rw_semaphore sem;
-	struct key_user *user;
-	void *security;
-	union {
-		time64_t expiry;
-		time64_t revoked_at;
-	};
-	time64_t last_used_at;
-	kuid_t uid;
-	kgid_t gid;
-	key_perm_t perm;
-	short unsigned int quotalen;
-	short unsigned int datalen;
-	short int state;
-	long unsigned int flags;
-	union {
-		struct keyring_index_key index_key;
-		struct {
-			long unsigned int hash;
-			long unsigned int len_desc;
-			struct key_type *type;
-			struct key_tag *domain_tag;
-			char *description;
-		};
-	};
-	union {
-		union key_payload payload;
-		struct {
-			struct list_head name_link;
-			struct assoc_array keys;
-		};
-	};
-	struct key_restriction *restrict_link;
-};
-
-struct uts_namespace;
-
-struct ipc_namespace;
-
-struct mnt_namespace;
-
-struct net;
-
-struct time_namespace;
-
-struct cgroup_namespace;
-
-struct nsproxy {
-	atomic_t count;
-	struct uts_namespace *uts_ns;
-	struct ipc_namespace *ipc_ns;
-	struct mnt_namespace *mnt_ns;
-	struct pid_namespace *pid_ns_for_children;
-	struct net *net_ns;
-	struct time_namespace *time_ns;
-	struct time_namespace *time_ns_for_children;
-	struct cgroup_namespace *cgroup_ns;
-};
-
-struct sighand_struct {
-	spinlock_t siglock;
-	refcount_t count;
-	wait_queue_head_t signalfd_wqh;
-	struct k_sigaction action[64];
-};
-
-struct bio;
-
-struct bio_list {
-	struct bio *head;
-	struct bio *tail;
-};
-
-struct blk_plug {
-	struct list_head mq_list;
-	struct list_head cb_list;
-	short unsigned int rq_count;
-	bool multiple_queues;
-	bool nowait;
-};
-
-struct reclaim_state {
-	long unsigned int reclaimed_slab;
-};
-
-struct percpu_counter {
-	raw_spinlock_t lock;
-	s64 count;
-	struct list_head list;
-	s32 *counters;
-};
-
-struct fprop_local_percpu {
-	struct percpu_counter events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-enum wb_reason {
-	WB_REASON_BACKGROUND = 0,
-	WB_REASON_VMSCAN = 1,
-	WB_REASON_SYNC = 2,
-	WB_REASON_PERIODIC = 3,
-	WB_REASON_LAPTOP_TIMER = 4,
-	WB_REASON_FS_FREE_SPACE = 5,
-	WB_REASON_FORKER_THREAD = 6,
-	WB_REASON_FOREIGN_FLUSH = 7,
-	WB_REASON_MAX = 8,
-};
-
-struct percpu_ref_data;
-
-struct percpu_ref {
-	long unsigned int percpu_count_ptr;
-	struct percpu_ref_data *data;
-};
-
-struct cgroup_subsys_state;
-
-struct bdi_writeback {
-	struct backing_dev_info *bdi;
-	long unsigned int state;
-	long unsigned int last_old_flush;
-	struct list_head b_dirty;
-	struct list_head b_io;
-	struct list_head b_more_io;
-	struct list_head b_dirty_time;
-	spinlock_t list_lock;
-	struct percpu_counter stat[4];
-	long unsigned int congested;
-	long unsigned int bw_time_stamp;
-	long unsigned int dirtied_stamp;
-	long unsigned int written_stamp;
-	long unsigned int write_bandwidth;
-	long unsigned int avg_write_bandwidth;
-	long unsigned int dirty_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	struct fprop_local_percpu completions;
-	int dirty_exceeded;
-	enum wb_reason start_all_reason;
-	spinlock_t work_lock;
-	struct list_head work_list;
-	struct delayed_work dwork;
-	long unsigned int dirty_sleep;
-	struct list_head bdi_node;
-	struct percpu_ref refcnt;
-	struct fprop_local_percpu memcg_completions;
-	struct cgroup_subsys_state *memcg_css;
-	struct cgroup_subsys_state *blkcg_css;
-	struct list_head memcg_node;
-	struct list_head blkcg_node;
-	union {
-		struct work_struct release_work;
-		struct callback_head rcu;
-	};
-};
-
-struct device;
-
-struct backing_dev_info {
-	u64 id;
-	struct rb_node rb_node;
-	struct list_head bdi_list;
-	long unsigned int ra_pages;
-	long unsigned int io_pages;
-	struct kref refcnt;
-	unsigned int capabilities;
-	unsigned int min_ratio;
-	unsigned int max_ratio;
-	unsigned int max_prop_frac;
-	atomic_long_t tot_write_bandwidth;
-	struct bdi_writeback wb;
-	struct list_head wb_list;
-	struct xarray cgwb_tree;
-	struct mutex cgwb_release_mutex;
-	struct rw_semaphore wb_switch_rwsem;
-	wait_queue_head_t wb_waitq;
-	struct device *dev;
-	char dev_name[64];
-	struct device *owner;
-	struct timer_list laptop_mode_wb_timer;
-	struct dentry *debug_dir;
-};
-
-struct io_cq;
-
-struct io_context {
-	atomic_long_t refcount;
-	atomic_t active_ref;
-	atomic_t nr_tasks;
-	spinlock_t lock;
-	short unsigned int ioprio;
-	struct xarray icq_tree;
-	struct io_cq *icq_hint;
-	struct hlist_head icq_list;
-	struct work_struct release_work;
-};
-
-struct cgroup;
-
-struct css_set {
-	struct cgroup_subsys_state *subsys[12];
-	refcount_t refcount;
-	struct css_set *dom_cset;
-	struct cgroup *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[12];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup *mg_src_cgrp;
-	struct cgroup *mg_dst_cgrp;
-	struct css_set *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
-};
-
-struct compat_robust_list {
-	compat_uptr_t next;
-};
-
-struct compat_robust_list_head {
-	struct compat_robust_list list;
-	compat_long_t futex_offset;
-	compat_uptr_t list_op_pending;
-};
-
-struct perf_event_groups {
-	struct rb_root tree;
-	u64 index;
-};
-
-struct perf_event_context {
-	struct pmu *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	int nr_cgroups;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct mempolicy {
-	atomic_t refcnt;
-	short unsigned int mode;
-	short unsigned int flags;
-	union {
-		short int preferred_node;
-		nodemask_t nodes;
-	} v;
-	union {
-		nodemask_t cpuset_mems_allowed;
-		nodemask_t user_nodemask;
-	} w;
-};
-
-struct task_delay_info {
-	raw_spinlock_t lock;
-	unsigned int flags;
-	u64 blkio_start;
-	u64 blkio_delay;
-	u64 swapin_delay;
-	u32 blkio_count;
-	u32 swapin_count;
-	u64 freepages_start;
-	u64 freepages_delay;
-	u64 thrashing_start;
-	u64 thrashing_delay;
-	u32 freepages_count;
-	u32 thrashing_count;
-};
-
-struct ftrace_ret_stack {
-	long unsigned int ret;
-	long unsigned int func;
-	long long unsigned int calltime;
-	long unsigned int fp;
-};
-
-struct cgroup_subsys;
-
-struct cgroup_subsys_state {
-	struct cgroup *cgroup;
-	struct cgroup_subsys *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state *parent;
-};
-
-struct mem_cgroup_id {
-	int id;
-	refcount_t ref;
-};
-
-struct page_counter {
-	atomic_long_t usage;
-	long unsigned int min;
-	long unsigned int low;
-	long unsigned int high;
-	long unsigned int max;
-	struct page_counter *parent;
-	long unsigned int emin;
-	atomic_long_t min_usage;
-	atomic_long_t children_min_usage;
-	long unsigned int elow;
-	atomic_long_t low_usage;
-	atomic_long_t children_low_usage;
-	long unsigned int watermark;
-	long unsigned int failcnt;
-};
-
-struct vmpressure {
-	long unsigned int scanned;
-	long unsigned int reclaimed;
-	long unsigned int tree_scanned;
-	long unsigned int tree_reclaimed;
-	spinlock_t sr_lock;
-	struct list_head events;
-	struct mutex events_lock;
-	struct work_struct work;
-};
-
-struct cgroup_file {
-	struct kernfs_node *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct mem_cgroup_threshold_ary;
-
-struct mem_cgroup_thresholds {
-	struct mem_cgroup_threshold_ary *primary;
-	struct mem_cgroup_threshold_ary *spare;
-};
-
-struct memcg_padding {
-	char x[0];
-};
-
-enum memcg_kmem_state {
-	KMEM_NONE = 0,
-	KMEM_ALLOCATED = 1,
-	KMEM_ONLINE = 2,
-};
-
-struct fprop_global {
-	struct percpu_counter events;
-	unsigned int period;
-	seqcount_t sequence;
-};
-
-struct wb_domain {
-	spinlock_t lock;
-	struct fprop_global completions;
-	struct timer_list period_timer;
-	long unsigned int period_time;
-	long unsigned int dirty_limit_tstamp;
-	long unsigned int dirty_limit;
-};
-
-struct wb_completion {
-	atomic_t cnt;
-	wait_queue_head_t *waitq;
-};
-
-struct memcg_cgwb_frn {
-	u64 bdi_id;
-	int memcg_id;
-	u64 at;
-	struct wb_completion done;
-};
-
-struct deferred_split {
-	spinlock_t split_queue_lock;
-	struct list_head split_queue;
-	long unsigned int split_queue_len;
-};
-
-struct memcg_vmstats_percpu;
-
-struct mem_cgroup_per_node;
-
-struct mem_cgroup {
-	struct cgroup_subsys_state css;
-	struct mem_cgroup_id id;
-	struct page_counter memory;
-	union {
-		struct page_counter swap;
-		struct page_counter memsw;
-	};
-	struct page_counter kmem;
-	struct page_counter tcpmem;
-	struct work_struct high_work;
-	long unsigned int soft_limit;
-	struct vmpressure vmpressure;
-	bool use_hierarchy;
-	bool oom_group;
-	bool oom_lock;
-	int under_oom;
-	int swappiness;
-	int oom_kill_disable;
-	struct cgroup_file events_file;
-	struct cgroup_file events_local_file;
-	struct cgroup_file swap_events_file;
-	struct mutex thresholds_lock;
-	struct mem_cgroup_thresholds thresholds;
-	struct mem_cgroup_thresholds memsw_thresholds;
-	struct list_head oom_notify;
-	long unsigned int move_charge_at_immigrate;
-	spinlock_t move_lock;
-	long unsigned int move_lock_flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad1_;
-	atomic_long_t vmstats[40];
-	atomic_long_t vmevents[95];
-	atomic_long_t memory_events[8];
-	atomic_long_t memory_events_local[8];
-	long unsigned int socket_pressure;
-	bool tcpmem_active;
-	int tcpmem_pressure;
-	int kmemcg_id;
-	enum memcg_kmem_state kmem_state;
-	struct obj_cgroup *objcg;
-	struct list_head objcg_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad2_;
-	atomic_t moving_account;
-	struct task_struct *move_lock_task;
-	struct memcg_vmstats_percpu *vmstats_local;
-	struct memcg_vmstats_percpu *vmstats_percpu;
-	struct list_head cgwb_list;
-	struct wb_domain cgwb_domain;
-	struct memcg_cgwb_frn cgwb_frn[4];
-	struct list_head event_list;
-	spinlock_t event_list_lock;
-	struct deferred_split deferred_split_queue;
-	struct mem_cgroup_per_node *nodeinfo[0];
-};
-
-struct blk_integrity_profile;
-
-struct blk_integrity {
-	const struct blk_integrity_profile *profile;
-	unsigned char flags;
-	unsigned char tuple_size;
-	unsigned char interval_exp;
-	unsigned char tag_size;
-};
-
-enum rpm_status {
-	RPM_ACTIVE = 0,
-	RPM_RESUMING = 1,
-	RPM_SUSPENDED = 2,
-	RPM_SUSPENDING = 3,
-};
-
-struct blk_rq_stat {
-	u64 mean;
-	u64 min;
-	u64 max;
-	u32 nr_samples;
-	u64 batch;
-};
-
-enum blk_zoned_model {
-	BLK_ZONED_NONE = 0,
-	BLK_ZONED_HA = 1,
-	BLK_ZONED_HM = 2,
-};
-
-struct queue_limits {
-	long unsigned int bounce_pfn;
-	long unsigned int seg_boundary_mask;
-	long unsigned int virt_boundary_mask;
-	unsigned int max_hw_sectors;
-	unsigned int max_dev_sectors;
-	unsigned int chunk_sectors;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	unsigned int physical_block_size;
-	unsigned int logical_block_size;
-	unsigned int alignment_offset;
-	unsigned int io_min;
-	unsigned int io_opt;
-	unsigned int max_discard_sectors;
-	unsigned int max_hw_discard_sectors;
-	unsigned int max_write_same_sectors;
-	unsigned int max_write_zeroes_sectors;
-	unsigned int max_zone_append_sectors;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	short unsigned int max_segments;
-	short unsigned int max_integrity_segments;
-	short unsigned int max_discard_segments;
-	unsigned char misaligned;
-	unsigned char discard_misaligned;
-	unsigned char raid_partial_stripes_expensive;
-	enum blk_zoned_model zoned;
-};
-
-struct bsg_ops;
-
-struct bsg_class_device {
-	struct device *class_dev;
-	int minor;
-	struct request_queue *queue;
-	const struct bsg_ops *ops;
-};
-
-typedef void *mempool_alloc_t(gfp_t, void *);
-
-typedef void mempool_free_t(void *, void *);
-
-struct mempool_s {
-	spinlock_t lock;
-	int min_nr;
-	int curr_nr;
-	void **elements;
-	void *pool_data;
-	mempool_alloc_t *alloc;
-	mempool_free_t *free;
-	wait_queue_head_t wait;
-};
-
-typedef struct mempool_s mempool_t;
-
-struct bio_set {
-	struct kmem_cache *bio_slab;
-	unsigned int front_pad;
-	mempool_t bio_pool;
-	mempool_t bvec_pool;
-	mempool_t bio_integrity_pool;
-	mempool_t bvec_integrity_pool;
-	spinlock_t rescue_lock;
-	struct bio_list rescue_list;
-	struct work_struct rescue_work;
-	struct workqueue_struct *rescue_workqueue;
-};
-
-struct request;
-
-struct elevator_queue;
-
-struct blk_queue_stats;
-
-struct rq_qos;
-
-struct blk_mq_ops;
-
-struct blk_mq_ctx;
-
-struct blk_mq_hw_ctx;
-
-struct blk_keyslot_manager;
-
-struct blk_stat_callback;
-
-struct blkcg_gq;
-
-struct blk_trace;
-
-struct blk_flush_queue;
-
-struct throtl_data;
-
-struct blk_mq_tag_set;
-
-struct request_queue {
-	struct request *last_merge;
-	struct elevator_queue *elevator;
-	struct percpu_ref q_usage_counter;
-	struct blk_queue_stats *stats;
-	struct rq_qos *rq_qos;
-	const struct blk_mq_ops *mq_ops;
-	struct blk_mq_ctx *queue_ctx;
-	unsigned int queue_depth;
-	struct blk_mq_hw_ctx **queue_hw_ctx;
-	unsigned int nr_hw_queues;
-	struct backing_dev_info *backing_dev_info;
-	void *queuedata;
-	long unsigned int queue_flags;
-	atomic_t pm_only;
-	int id;
-	gfp_t bounce_gfp;
-	spinlock_t queue_lock;
-	struct kobject kobj;
-	struct kobject *mq_kobj;
-	struct blk_integrity integrity;
-	struct device *dev;
-	enum rpm_status rpm_status;
-	unsigned int nr_pending;
-	long unsigned int nr_requests;
-	unsigned int dma_pad_mask;
-	unsigned int dma_alignment;
-	struct blk_keyslot_manager *ksm;
-	unsigned int rq_timeout;
-	int poll_nsec;
-	struct blk_stat_callback *poll_cb;
-	struct blk_rq_stat poll_stat[16];
-	struct timer_list timeout;
-	struct work_struct timeout_work;
-	atomic_t nr_active_requests_shared_sbitmap;
-	struct list_head icq_list;
-	long unsigned int blkcg_pols[1];
-	struct blkcg_gq *root_blkg;
-	struct list_head blkg_list;
-	struct queue_limits limits;
-	unsigned int required_elevator_features;
-	unsigned int nr_zones;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int max_open_zones;
-	unsigned int max_active_zones;
-	unsigned int sg_timeout;
-	unsigned int sg_reserved_size;
-	int node;
-	struct mutex debugfs_mutex;
-	struct blk_trace *blk_trace;
-	struct blk_flush_queue *fq;
-	struct list_head requeue_list;
-	spinlock_t requeue_lock;
-	struct delayed_work requeue_work;
-	struct mutex sysfs_lock;
-	struct mutex sysfs_dir_lock;
-	struct list_head unused_hctx_list;
-	spinlock_t unused_hctx_lock;
-	int mq_freeze_depth;
-	struct bsg_class_device bsg_dev;
-	struct throtl_data *td;
-	struct callback_head callback_head;
-	wait_queue_head_t mq_freeze_wq;
-	struct mutex mq_freeze_lock;
-	struct blk_mq_tag_set *tag_set;
-	struct list_head tag_set_list;
-	struct bio_set bio_split;
-	struct dentry *debugfs_dir;
-	bool mq_sysfs_init_done;
-	size_t cmd_size;
-	u64 write_hints[5];
-};
-
-enum uprobe_task_state {
-	UTASK_RUNNING = 0,
-	UTASK_SSTEP = 1,
-	UTASK_SSTEP_ACK = 2,
-	UTASK_SSTEP_TRAPPED = 3,
-};
-
-struct arch_uprobe_task {};
-
-struct uprobe;
-
-struct return_instance;
-
-struct uprobe_task {
-	enum uprobe_task_state state;
-	union {
-		struct {
-			struct arch_uprobe_task autask;
-			long unsigned int vaddr;
-		};
-		struct {
-			struct callback_head dup_xol_work;
-			long unsigned int dup_xol_addr;
-		};
-	};
-	struct uprobe *active_uprobe;
-	long unsigned int xol_vaddr;
-	struct return_instance *return_instances;
-	unsigned int depth;
-};
-
-struct vm_struct {
-	struct vm_struct *next;
-	void *addr;
-	long unsigned int size;
-	long unsigned int flags;
-	struct page **pages;
-	unsigned int nr_pages;
-	phys_addr_t phys_addr;
-	const void *caller;
-};
-
-struct kstat {
-	u32 result_mask;
-	umode_t mode;
-	unsigned int nlink;
-	uint32_t blksize;
-	u64 attributes;
-	u64 attributes_mask;
-	u64 ino;
-	dev_t dev;
-	dev_t rdev;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	struct timespec64 btime;
-	u64 blocks;
-	u64 mnt_id;
-};
-
-struct return_instance {
-	struct uprobe *uprobe;
-	long unsigned int func;
-	long unsigned int stack;
-	long unsigned int orig_ret_vaddr;
-	bool chained;
-	struct return_instance *next;
-};
-
-typedef u32 errseq_t;
-
-struct address_space_operations;
-
-struct address_space {
-	struct inode *host;
-	struct xarray i_pages;
-	gfp_t gfp_mask;
-	atomic_t i_mmap_writable;
-	atomic_t nr_thps;
-	struct rb_root_cached i_mmap;
-	struct rw_semaphore i_mmap_rwsem;
-	long unsigned int nrpages;
-	long unsigned int nrexceptional;
-	long unsigned int writeback_index;
-	const struct address_space_operations *a_ops;
-	long unsigned int flags;
-	errseq_t wb_err;
-	spinlock_t private_lock;
-	struct list_head private_list;
-	void *private_data;
-};
-
-struct vmem_altmap {
-	const long unsigned int base_pfn;
-	const long unsigned int end_pfn;
-	const long unsigned int reserve;
-	long unsigned int free;
-	long unsigned int align;
-	long unsigned int alloc;
-};
-
-enum memory_type {
-	MEMORY_DEVICE_PRIVATE = 1,
-	MEMORY_DEVICE_FS_DAX = 2,
-	MEMORY_DEVICE_GENERIC = 3,
-	MEMORY_DEVICE_PCI_P2PDMA = 4,
-};
-
-struct range {
-	u64 start;
-	u64 end;
-};
-
-struct dev_pagemap_ops;
-
-struct dev_pagemap {
-	struct vmem_altmap altmap;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
-	struct completion done;
-	enum memory_type type;
-	unsigned int flags;
-	const struct dev_pagemap_ops *ops;
-	void *owner;
-	int nr_range;
-	union {
-		struct range range;
-		struct range ranges[0];
-	};
-};
-
-struct obj_cgroup {
-	struct percpu_ref refcnt;
-	struct mem_cgroup *memcg;
-	atomic_t nr_charged_bytes;
-	union {
-		struct list_head list;
-		struct callback_head rcu;
-	};
-};
-
-struct vfsmount;
-
-struct path {
-	struct vfsmount *mnt;
-	struct dentry *dentry;
-};
-
-enum rw_hint {
-	WRITE_LIFE_NOT_SET = 0,
-	WRITE_LIFE_NONE = 1,
-	WRITE_LIFE_SHORT = 2,
-	WRITE_LIFE_MEDIUM = 3,
-	WRITE_LIFE_LONG = 4,
-	WRITE_LIFE_EXTREME = 5,
-};
-
-struct fown_struct {
-	rwlock_t lock;
-	struct pid *pid;
-	enum pid_type pid_type;
-	kuid_t uid;
-	kuid_t euid;
-	int signum;
-};
-
-struct file_ra_state {
-	long unsigned int start;
-	unsigned int size;
-	unsigned int async_size;
-	unsigned int ra_pages;
-	unsigned int mmap_miss;
-	loff_t prev_pos;
-};
-
-struct file {
-	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
-	struct path f_path;
-	struct inode *f_inode;
-	const struct file_operations *f_op;
-	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
-	atomic_long_t f_count;
-	unsigned int f_flags;
-	fmode_t f_mode;
-	struct mutex f_pos_lock;
-	loff_t f_pos;
-	struct fown_struct f_owner;
-	const struct cred *f_cred;
-	struct file_ra_state f_ra;
-	u64 f_version;
-	void *f_security;
-	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
-	struct address_space *f_mapping;
-	errseq_t f_wb_err;
-	errseq_t f_sb_err;
-};
-
-struct anon_vma {
-	struct anon_vma *root;
-	struct rw_semaphore rwsem;
-	atomic_t refcount;
-	unsigned int degree;
-	struct anon_vma *parent;
-	struct rb_root_cached rb_root;
-};
-
-typedef unsigned int vm_fault_t;
-
-enum page_entry_size {
-	PE_SIZE_PTE = 0,
-	PE_SIZE_PMD = 1,
-	PE_SIZE_PUD = 2,
-};
-
-struct vm_fault;
-
-struct vm_operations_struct {
-	void (*open)(struct vm_area_struct *);
-	void (*close)(struct vm_area_struct *);
-	int (*split)(struct vm_area_struct *, long unsigned int);
-	int (*mremap)(struct vm_area_struct *);
-	vm_fault_t (*fault)(struct vm_fault *);
-	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
-	long unsigned int (*pagesize)(struct vm_area_struct *);
-	vm_fault_t (*page_mkwrite)(struct vm_fault *);
-	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
-	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
-	const char * (*name)(struct vm_area_struct *);
-	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
-	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
-	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
-};
-
-struct core_thread {
-	struct task_struct *task;
-	struct core_thread *next;
-};
-
-struct core_state {
-	atomic_t nr_threads;
-	struct core_thread dumper;
-	struct completion startup;
-};
-
-struct linux_binprm;
-
-struct coredump_params;
-
-struct linux_binfmt {
-	struct list_head lh;
-	struct module *module;
-	int (*load_binary)(struct linux_binprm *);
-	int (*load_shlib)(struct file *);
-	int (*core_dump)(struct coredump_params *);
-	long unsigned int min_coredump;
-};
-
-struct vm_fault {
-	struct vm_area_struct *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
-	pmd_t *pmd;
-	pud_t *pud;
-	pte_t orig_pte;
-	struct page *cow_page;
-	struct page *page;
-	pte_t *pte;
-	spinlock_t *ptl;
-	pgtable_t prealloc_pte;
-};
-
-struct free_area {
-	struct list_head free_list[6];
-	long unsigned int nr_free;
-};
-
-struct zone_padding {
-	char x[0];
-};
-
-enum node_stat_item {
-	NR_LRU_BASE = 0,
-	NR_INACTIVE_ANON = 0,
-	NR_ACTIVE_ANON = 1,
-	NR_INACTIVE_FILE = 2,
-	NR_ACTIVE_FILE = 3,
-	NR_UNEVICTABLE = 4,
-	NR_SLAB_RECLAIMABLE_B = 5,
-	NR_SLAB_UNRECLAIMABLE_B = 6,
-	NR_ISOLATED_ANON = 7,
-	NR_ISOLATED_FILE = 8,
-	WORKINGSET_NODES = 9,
-	WORKINGSET_REFAULT_BASE = 10,
-	WORKINGSET_REFAULT_ANON = 10,
-	WORKINGSET_REFAULT_FILE = 11,
-	WORKINGSET_ACTIVATE_BASE = 12,
-	WORKINGSET_ACTIVATE_ANON = 12,
-	WORKINGSET_ACTIVATE_FILE = 13,
-	WORKINGSET_RESTORE_BASE = 14,
-	WORKINGSET_RESTORE_ANON = 14,
-	WORKINGSET_RESTORE_FILE = 15,
-	WORKINGSET_NODERECLAIM = 16,
-	NR_ANON_MAPPED = 17,
-	NR_FILE_MAPPED = 18,
-	NR_FILE_PAGES = 19,
-	NR_FILE_DIRTY = 20,
-	NR_WRITEBACK = 21,
-	NR_WRITEBACK_TEMP = 22,
-	NR_SHMEM = 23,
-	NR_SHMEM_THPS = 24,
-	NR_SHMEM_PMDMAPPED = 25,
-	NR_FILE_THPS = 26,
-	NR_FILE_PMDMAPPED = 27,
-	NR_ANON_THPS = 28,
-	NR_VMSCAN_WRITE = 29,
-	NR_VMSCAN_IMMEDIATE = 30,
-	NR_DIRTIED = 31,
-	NR_WRITTEN = 32,
-	NR_KERNEL_MISC_RECLAIMABLE = 33,
-	NR_FOLL_PIN_ACQUIRED = 34,
-	NR_FOLL_PIN_RELEASED = 35,
-	NR_KERNEL_STACK_KB = 36,
-	NR_VM_NODE_STAT_ITEMS = 37,
-};
-
-enum lru_list {
-	LRU_INACTIVE_ANON = 0,
-	LRU_ACTIVE_ANON = 1,
-	LRU_INACTIVE_FILE = 2,
-	LRU_ACTIVE_FILE = 3,
-	LRU_UNEVICTABLE = 4,
-	NR_LRU_LISTS = 5,
-};
-
-struct pglist_data;
-
-struct lruvec {
-	struct list_head lists[5];
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	atomic_long_t nonresident_age;
-	long unsigned int refaults[2];
-	long unsigned int flags;
-	struct pglist_data *pgdat;
-};
-
-struct per_cpu_pageset;
-
-struct zone {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[4];
-	int node;
-	struct pglist_data *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	long unsigned int nr_isolate_pageblock;
-	seqlock_t span_seqlock;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[11];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	short: 16;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct zoneref {
-	struct zone *zone;
-	int zone_idx;
-};
-
-struct zonelist {
-	struct zoneref _zonerefs[513];
-};
-
-enum zone_type {
-	ZONE_DMA = 0,
-	ZONE_DMA32 = 1,
-	ZONE_NORMAL = 2,
-	ZONE_MOVABLE = 3,
-	__MAX_NR_ZONES = 4,
-};
-
-struct per_cpu_nodestat;
-
-struct pglist_data {
-	struct zone node_zones[4];
-	struct zonelist node_zonelists[2];
-	int nr_zones;
-	spinlock_t node_size_lock;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_highest_zoneidx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_highest_zoneidx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct deferred_split deferred_split_queue;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[37];
-	long: 64;
-	long: 64;
-};
-
-typedef unsigned int isolate_mode_t;
-
-struct per_cpu_pages {
-	int count;
-	int high;
-	int batch;
-	struct list_head lists[3];
-};
-
-struct per_cpu_pageset {
-	struct per_cpu_pages pcp;
-	s8 expire;
-	u16 vm_numa_stat_diff[6];
-	s8 stat_threshold;
-	s8 vm_stat_diff[12];
-};
-
-struct per_cpu_nodestat {
-	s8 stat_threshold;
-	s8 vm_node_stat_diff[37];
-};
-
-struct rcu_segcblist {
-	struct callback_head *head;
-	struct callback_head **tails[4];
-	long unsigned int gp_seq[4];
-	long int len;
-	u8 enabled;
-	u8 offloaded;
-};
-
-struct srcu_node;
-
-struct srcu_data {
-	long unsigned int srcu_lock_count[2];
-	long unsigned int srcu_unlock_count[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	struct rcu_segcblist srcu_cblist;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	bool srcu_cblist_invoking;
-	struct timer_list delay_work;
-	struct work_struct work;
-	struct callback_head srcu_barrier_head;
-	struct srcu_node *mynode;
-	long unsigned int grpmask;
-	int cpu;
-	struct srcu_struct *ssp;
-	long: 64;
-	long: 64;
-};
-
-struct srcu_node {
-	spinlock_t lock;
-	long unsigned int srcu_have_cbs[4];
-	long unsigned int srcu_data_have_cbs[4];
-	long unsigned int srcu_gp_seq_needed_exp;
-	struct srcu_node *srcu_parent;
-	int grplo;
-	int grphi;
-};
-
-struct srcu_struct {
-	struct srcu_node node[9];
-	struct srcu_node *level[3];
-	struct mutex srcu_cb_mutex;
-	spinlock_t lock;
-	struct mutex srcu_gp_mutex;
-	unsigned int srcu_idx;
-	long unsigned int srcu_gp_seq;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	long unsigned int srcu_last_gp_end;
-	struct srcu_data *sda;
-	long unsigned int srcu_barrier_seq;
-	struct mutex srcu_barrier_mutex;
-	struct completion srcu_barrier_completion;
-	atomic_t srcu_barrier_cpu_cnt;
-	struct delayed_work work;
-};
-
-typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
-
-struct ctl_table_poll;
-
-struct ctl_table {
-	const char *procname;
-	void *data;
-	int maxlen;
-	umode_t mode;
-	struct ctl_table *child;
-	proc_handler *proc_handler;
-	struct ctl_table_poll *poll;
-	void *extra1;
-	void *extra2;
-};
-
-struct ctl_table_poll {
-	atomic_t event;
-	wait_queue_head_t wait;
-};
-
-struct ctl_node {
-	struct rb_node node;
-	struct ctl_table_header *header;
-};
-
-struct ctl_table_root {
-	struct ctl_table_set default_set;
-	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
-	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
-	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
-};
-
-enum umh_disable_depth {
-	UMH_ENABLED = 0,
-	UMH_FREEZING = 1,
-	UMH_DISABLED = 2,
-};
-
-typedef __u64 Elf64_Addr;
-
-typedef __u16 Elf64_Half;
-
-typedef __u32 Elf64_Word;
-
-typedef __u64 Elf64_Xword;
-
-struct elf64_sym {
-	Elf64_Word st_name;
-	unsigned char st_info;
-	unsigned char st_other;
-	Elf64_Half st_shndx;
-	Elf64_Addr st_value;
-	Elf64_Xword st_size;
-};
-
-struct hlist_bl_node;
-
-struct hlist_bl_head {
-	struct hlist_bl_node *first;
-};
-
-struct hlist_bl_node {
-	struct hlist_bl_node *next;
-	struct hlist_bl_node **pprev;
-};
-
 struct lockref {
 	union {
 		__u64 lock_count;
@@ -3882,13 +1389,53 @@
 	} d_u;
 };
 
+typedef struct {
+	gid_t val;
+} kgid_t;
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+};
+
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void *xa_head;
+};
+
+typedef u32 errseq_t;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	struct rw_semaphore i_mmap_rwsem;
+	long unsigned int nrpages;
+	long unsigned int writeback_index;
+	const struct address_space_operations *a_ops;
+	long unsigned int flags;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
 struct posix_acl;
 
 struct inode_operations;
 
-struct file_lock_context;
+struct bdi_writeback;
 
-struct block_device;
+struct file_lock_context;
 
 struct cdev;
 
@@ -3957,7 +1504,6 @@
 	struct list_head i_devices;
 	union {
 		struct pipe_inode_info *i_pipe;
-		struct block_device *i_bdev;
 		struct cdev *i_cdev;
 		char *i_link;
 		unsigned int i_dir_seq;
@@ -3970,6 +1516,10 @@
 	void *i_private;
 };
 
+struct vfsmount;
+
+struct path;
+
 struct dentry_operations {
 	int (*d_revalidate)(struct dentry *, unsigned int);
 	int (*d_weak_revalidate)(struct dentry *, unsigned int);
@@ -4066,6 +1616,17 @@
 	struct list_head list;
 	int shrinker_id;
 	bool memcg_aware;
+	struct xarray xa;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
 };
 
 struct super_operations;
@@ -4080,10 +1641,18 @@
 
 struct fscrypt_operations;
 
+struct fscrypt_keyring;
+
 struct fsverity_operations;
 
 struct unicode_map;
 
+struct block_device;
+
+struct workqueue_struct;
+
+struct user_namespace;
+
 struct super_block {
 	struct list_head s_list;
 	dev_t s_dev;
@@ -4105,7 +1674,7 @@
 	void *s_security;
 	const struct xattr_handler **s_xattr;
 	const struct fscrypt_operations *s_cop;
-	struct key *s_master_keys;
+	struct fscrypt_keyring *s_master_keys;
 	const struct fsverity_operations *s_vop;
 	struct unicode_map *s_encoding;
 	__u16 s_encoding_flags;
@@ -4131,10 +1700,9 @@
 	struct mutex s_vfs_rename_mutex;
 	const char *s_subtype;
 	const struct dentry_operations *s_d_op;
-	int cleancache_poolid;
 	struct shrinker s_shrink;
 	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
+	atomic_long_t s_fsnotify_connectors;
 	int s_readonly_remount;
 	errseq_t s_wb_err;
 	struct workqueue_struct *s_dio_done_wq;
@@ -4146,7 +1714,12 @@
 	struct work_struct destroy_work;
 	struct mutex s_sync_lock;
 	int s_stack_depth;
-	int: 32;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	spinlock_t s_inode_list_lock;
 	struct list_head s_inodes;
 	spinlock_t s_inode_wblist_lock;
@@ -4155,6 +1728,136 @@
 	long: 64;
 };
 
+struct mnt_idmap;
+
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct mnt_idmap *mnt_idmap;
+};
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct ucounts;
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	long unsigned int flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long int ucount_max[12];
+	long int rlimit_max[4];
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+	u32 dio_mem_align;
+	u32 dio_offset_align;
+};
+
+struct static_key {
+	atomic_t enabled;
+};
+
 struct shrink_control {
 	gfp_t gfp_mask;
 	int nid;
@@ -4163,23 +1866,1301 @@
 	struct mem_cgroup *memcg;
 };
 
+typedef struct {
+	long unsigned int pte;
+} pte_t;
+
+typedef struct page *pgtable_t;
+
+struct page_pool;
+
+struct dev_pagemap;
+
+struct page {
+	long unsigned int flags;
+	union {
+		struct {
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
+			struct address_space *mapping;
+			union {
+				long unsigned int index;
+				long unsigned int share;
+			};
+			long unsigned int private;
+		};
+		struct {
+			long unsigned int pp_magic;
+			struct page_pool *pp;
+			long unsigned int _pp_mapping_pad;
+			long unsigned int dma_addr;
+			union {
+				long unsigned int dma_addr_upper;
+				atomic_long_t pp_frag_count;
+			};
+		};
+		struct {
+			long unsigned int compound_head;
+			unsigned char compound_dtor;
+			unsigned char compound_order;
+			atomic_t compound_mapcount;
+			atomic_t subpages_mapcount;
+			atomic_t compound_pincount;
+			unsigned int compound_nr;
+		};
+		struct {
+			long unsigned int _compound_pad_1;
+			long unsigned int _compound_pad_2;
+			struct list_head deferred_list;
+		};
+		struct {
+			long unsigned int _hugetlb_pad_1;
+			void *hugetlb_subpool;
+			void *hugetlb_cgroup;
+			void *hugetlb_cgroup_rsvd;
+			void *hugetlb_hwpoison;
+		};
+		struct {
+			long unsigned int _pt_pad_1;
+			pgtable_t pmd_huge_pte;
+			long unsigned int _pt_pad_2;
+			union {
+				struct mm_struct *pt_mm;
+				atomic_t pt_frag_refcount;
+			};
+			spinlock_t ptl;
+		};
+		struct {
+			struct dev_pagemap *pgmap;
+			void *zone_device_data;
+		};
+		struct callback_head callback_head;
+	};
+	union {
+		atomic_t _mapcount;
+		unsigned int page_type;
+	};
+	atomic_t _refcount;
+	long unsigned int memcg_data;
+};
+
+typedef struct {
+	long unsigned int pgd;
+} pgd_t;
+
+typedef struct {
+	long unsigned int pgprot;
+} pgprot_t;
+
+typedef struct {} lockdep_map_p;
+
+struct maple_tree {
+	union {
+		spinlock_t ma_lock;
+		lockdep_map_p ma_external_lock;
+	};
+	void *ma_root;
+	unsigned int ma_flags;
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
+};
+
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 *counters;
+};
+
+typedef struct {
+	u64 asid[64];
+	void *vdso;
+} mm_context_t;
+
+struct uprobes_state {};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct maple_tree mm_mt;
+		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+		long unsigned int mmap_base;
+		long unsigned int mmap_legacy_base;
+		long unsigned int task_size;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_t mm_count;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		long unsigned int hiwater_rss;
+		long unsigned int hiwater_vm;
+		long unsigned int total_vm;
+		long unsigned int locked_vm;
+		atomic64_t pinned_vm;
+		long unsigned int data_vm;
+		long unsigned int exec_vm;
+		long unsigned int stack_vm;
+		long unsigned int def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		long unsigned int start_code;
+		long unsigned int end_code;
+		long unsigned int start_data;
+		long unsigned int end_data;
+		long unsigned int start_brk;
+		long unsigned int brk;
+		long unsigned int start_stack;
+		long unsigned int arg_start;
+		long unsigned int arg_end;
+		long unsigned int env_start;
+		long unsigned int env_end;
+		long unsigned int saved_auxv[44];
+		struct percpu_counter rss_stat[4];
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		long unsigned int flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table *ioctx_table;
+		struct task_struct *owner;
+		struct user_namespace *user_ns;
+		struct file *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		pgtable_t pmd_huge_pte;
+		long unsigned int numa_next_scan;
+		long unsigned int numa_scan_offset;
+		int numa_scan_seq;
+		atomic_t tlb_flush_pending;
+		struct uprobes_state uprobes_state;
+		atomic_long_t hugetlb_usage;
+		struct work_struct async_put_work;
+		long unsigned int ksm_merging_pages;
+		long unsigned int ksm_rmap_items;
+	};
+	long unsigned int cpu_bitmap[0];
+};
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct vmem_altmap {
+	long unsigned int base_pfn;
+	const long unsigned int end_pfn;
+	const long unsigned int reserve;
+	long unsigned int free;
+	long unsigned int align;
+	long unsigned int alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	long unsigned int percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	long unsigned int vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct range ranges[0];
+	};
+};
+
+struct folio {
+	union {
+		struct {
+			long unsigned int flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			void *private;
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			long unsigned int memcg_data;
+		};
+		struct page page;
+	};
+	union {
+		struct {
+			long unsigned int _flags_1;
+			long unsigned int _head_1;
+			unsigned char _folio_dtor;
+			unsigned char _folio_order;
+			atomic_t _compound_mapcount;
+			atomic_t _subpages_mapcount;
+			atomic_t _pincount;
+			unsigned int _folio_nr_pages;
+		};
+		struct page __page_1;
+	};
+	union {
+		struct {
+			long unsigned int _flags_2;
+			long unsigned int _head_2;
+			void *_hugetlb_subpool;
+			void *_hugetlb_cgroup;
+			void *_hugetlb_cgroup_rsvd;
+			void *_hugetlb_hwpoison;
+		};
+		struct page __page_2;
+	};
+};
+
+enum pid_type {
+	PIDTYPE_PID = 0,
+	PIDTYPE_TGID = 1,
+	PIDTYPE_PGID = 2,
+	PIDTYPE_SID = 3,
+	PIDTYPE_MAX = 4,
+};
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	long unsigned int start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct file {
+	union {
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	spinlock_t f_lock;
+	atomic_long_t f_count;
+	unsigned int f_flags;
+	fmode_t f_mode;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	u64 f_version;
+	void *f_security;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+};
+
+struct userfaultfd_ctx;
+
+struct vm_userfaultfd_ctx {
+	struct userfaultfd_ctx *ctx;
+};
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct vm_area_struct {
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	long unsigned int vm_flags;
+	struct {
+		struct rb_node rb;
+		long unsigned int rb_subtree_last;
+	} shared;
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	long unsigned int vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	atomic_long_t swap_readahead_info;
+	struct mempolicy *vm_policy;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+};
+
+enum page_entry_size {
+	PE_SIZE_PTE = 0,
+	PE_SIZE_PMD = 1,
+	PE_SIZE_PUD = 2,
+};
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, long unsigned int);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
+	vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
+	long unsigned int (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
+	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
+	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
+};
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+};
+
+typedef struct {
+	long unsigned int pmd;
+} pmd_t;
+
+typedef struct {
+	pgd_t pgd;
+} p4d_t;
+
+typedef struct {
+	p4d_t p4d;
+} pud_t;
+
+struct vm_fault {
+	const struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		long unsigned int pgoff;
+		long unsigned int address;
+		long unsigned int real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	long unsigned int gp_seq[4];
+	long int len;
+	long int seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_data {
+	atomic_long_t srcu_lock_count[2];
+	atomic_long_t srcu_unlock_count[2];
+	int srcu_nmi_safety;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	long unsigned int grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	long unsigned int srcu_have_cbs[4];
+	long unsigned int srcu_data_have_cbs[4];
+	long unsigned int srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_struct {
+	struct srcu_node *node;
+	struct srcu_node *level[3];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned int srcu_idx;
+	long unsigned int srcu_gp_seq;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	long unsigned int srcu_gp_start;
+	long unsigned int srcu_last_gp_end;
+	long unsigned int srcu_size_jiffies;
+	long unsigned int srcu_n_lock_retries;
+	long unsigned int srcu_n_exp_nodelay;
+	struct srcu_data *sda;
+	bool sda_is_static;
+	long unsigned int srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	long unsigned int reschedule_jiffies;
+	long unsigned int reschedule_count;
+	struct delayed_work work;
+	struct lockdep_map dep_map;
+};
+
+struct pid_namespace;
+
+struct upid {
+	int nr;
+	struct pid_namespace *ns;
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct kmem_cache;
+
+struct fs_pin;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct fs_pin *bacct;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+};
+
+struct pid {
+	refcount_t count;
+	unsigned int level;
+	spinlock_t lock;
+	struct hlist_head tasks[4];
+	struct hlist_head inodes;
+	wait_queue_head_t wait_pidfd;
+	struct callback_head rcu;
+	struct upid numbers[1];
+};
+
+struct hrtimer_cpu_base;
+
+struct hrtimer_clock_base {
+	struct hrtimer_cpu_base *cpu_base;
+	unsigned int index;
+	clockid_t clockid;
+	seqcount_raw_spinlock_t seq;
+	struct hrtimer *running;
+	struct timerqueue_head active;
+	ktime_t (*get_time)();
+	ktime_t offset;
+};
+
+struct hrtimer_cpu_base {
+	raw_spinlock_t lock;
+	unsigned int cpu;
+	unsigned int active_bases;
+	unsigned int clock_was_set_seq;
+	unsigned int hres_active: 1;
+	unsigned int in_hrtirq: 1;
+	unsigned int hang_detected: 1;
+	unsigned int softirq_activated: 1;
+	unsigned int nr_events;
+	short unsigned int nr_retries;
+	short unsigned int nr_hangs;
+	unsigned int max_hang_time;
+	ktime_t expires_next;
+	struct hrtimer *next_timer;
+	ktime_t softirq_expires_next;
+	struct hrtimer *softirq_next_timer;
+	struct hrtimer_clock_base clock_base[8];
+};
+
+struct rlimit {
+	__kernel_ulong_t rlim_cur;
+	__kernel_ulong_t rlim_max;
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	long long unsigned int sum_exec_runtime;
+};
+
+typedef void __signalfn_t(int);
+
+typedef __signalfn_t *__sighandler_t;
+
+union sigval {
+	int sival_int;
+	void *sival_ptr;
+};
+
+typedef union sigval sigval_t;
+
+union __sifields {
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+	} _kill;
+	struct {
+		__kernel_timer_t _tid;
+		int _overrun;
+		sigval_t _sigval;
+		int _sys_private;
+	} _timer;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		sigval_t _sigval;
+	} _rt;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		int _status;
+		__kernel_clock_t _utime;
+		__kernel_clock_t _stime;
+	} _sigchld;
+	struct {
+		void *_addr;
+		union {
+			int _trapno;
+			short int _addr_lsb;
+			struct {
+				char _dummy_bnd[8];
+				void *_lower;
+				void *_upper;
+			} _addr_bnd;
+			struct {
+				char _dummy_pkey[8];
+				__u32 _pkey;
+			} _addr_pkey;
+			struct {
+				long unsigned int _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
+		};
+	} _sigfault;
+	struct {
+		long int _band;
+		int _fd;
+	} _sigpoll;
+	struct {
+		void *_call_addr;
+		int _syscall;
+		unsigned int _arch;
+	} _sigsys;
+};
+
+struct kernel_siginfo {
+	struct {
+		int si_signo;
+		int si_errno;
+		int si_code;
+		union __sifields _sifields;
+	};
+};
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[12];
+	atomic_long_t rlimit[4];
+};
+
+struct sigaction {
+	__sighandler_t sa_handler;
+	long unsigned int sa_flags;
+	sigset_t sa_mask;
+};
+
+struct k_sigaction {
+	struct sigaction sa;
+};
+
+struct cpu_itimer {
+	u64 expires;
+	u64 incr;
+};
+
+struct task_cputime_atomic {
+	atomic64_t utime;
+	atomic64_t stime;
+	atomic64_t sum_exec_runtime;
+};
+
+struct thread_group_cputimer {
+	struct task_cputime_atomic cputime_atomic;
+};
+
+struct pacct_struct {
+	int ac_flag;
+	long int ac_exitcode;
+	long unsigned int ac_mem;
+	u64 ac_utime;
+	u64 ac_stime;
+	long unsigned int ac_minflt;
+	long unsigned int ac_majflt;
+};
+
+struct core_state;
+
+struct tty_struct;
+
+struct autogroup;
+
+struct taskstats;
+
+struct tty_audit_buf;
+
+struct signal_struct {
+	refcount_t sigcnt;
+	atomic_t live;
+	int nr_threads;
+	int quick_threads;
+	struct list_head thread_head;
+	wait_queue_head_t wait_chldexit;
+	struct task_struct *curr_target;
+	struct sigpending shared_pending;
+	struct hlist_head multiprocess;
+	int group_exit_code;
+	int notify_count;
+	struct task_struct *group_exec_task;
+	int group_stop_count;
+	unsigned int flags;
+	struct core_state *core_state;
+	unsigned int is_child_subreaper: 1;
+	unsigned int has_child_subreaper: 1;
+	int posix_timer_id;
+	struct list_head posix_timers;
+	struct hrtimer real_timer;
+	ktime_t it_real_incr;
+	struct cpu_itimer it[2];
+	struct thread_group_cputimer cputimer;
+	struct posix_cputimers posix_cputimers;
+	struct pid *pids[4];
+	struct pid *tty_old_pgrp;
+	int leader;
+	struct tty_struct *tty;
+	struct autogroup *autogroup;
+	seqlock_t stats_lock;
+	u64 utime;
+	u64 stime;
+	u64 cutime;
+	u64 cstime;
+	u64 gtime;
+	u64 cgtime;
+	struct prev_cputime prev_cputime;
+	long unsigned int nvcsw;
+	long unsigned int nivcsw;
+	long unsigned int cnvcsw;
+	long unsigned int cnivcsw;
+	long unsigned int min_flt;
+	long unsigned int maj_flt;
+	long unsigned int cmin_flt;
+	long unsigned int cmaj_flt;
+	long unsigned int inblock;
+	long unsigned int oublock;
+	long unsigned int cinblock;
+	long unsigned int coublock;
+	long unsigned int maxrss;
+	long unsigned int cmaxrss;
+	struct task_io_accounting ioac;
+	long long unsigned int sum_sched_runtime;
+	struct rlimit rlim[16];
+	struct pacct_struct pacct;
+	struct taskstats *stats;
+	unsigned int audit_tty;
+	struct tty_audit_buf *tty_audit_buf;
+	bool oom_flag_origin;
+	short int oom_score_adj;
+	short int oom_score_adj_min;
+	struct mm_struct *oom_mm;
+	struct mutex cred_guard_mutex;
+	struct rw_semaphore exec_update_lock;
+};
+
+struct rseq {
+	__u32 cpu_id_start;
+	__u32 cpu_id;
+	__u64 rseq_cs;
+	__u32 flags;
+	long: 32;
+	long: 64;
+};
+
+struct rq;
+
+struct rq_flags;
+
+struct affinity_context;
+
+struct sched_class {
+	void (*enqueue_task)(struct rq *, struct task_struct *, int);
+	void (*dequeue_task)(struct rq *, struct task_struct *, int);
+	void (*yield_task)(struct rq *);
+	bool (*yield_to_task)(struct rq *, struct task_struct *);
+	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
+	struct task_struct * (*pick_next_task)(struct rq *);
+	void (*put_prev_task)(struct rq *, struct task_struct *);
+	void (*set_next_task)(struct rq *, struct task_struct *, bool);
+	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
+	void (*migrate_task_rq)(struct task_struct *, int);
+	void (*task_woken)(struct rq *, struct task_struct *);
+	void (*set_cpus_allowed)(struct task_struct *, struct affinity_context *);
+	void (*rq_online)(struct rq *);
+	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
+	void (*task_tick)(struct rq *, struct task_struct *, int);
+	void (*task_fork)(struct task_struct *);
+	void (*task_dead)(struct task_struct *);
+	void (*switched_from)(struct rq *, struct task_struct *);
+	void (*switched_to)(struct rq *, struct task_struct *);
+	void (*prio_changed)(struct rq *, struct task_struct *, int);
+	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
+	void (*update_curr)(struct rq *);
+	void (*task_change_group)(struct task_struct *);
+};
+
+struct kernel_cap_struct {
+	__u32 cap[2];
+};
+
+typedef struct kernel_cap_struct kernel_cap_t;
+
+struct user_struct;
+
+struct group_info;
+
+struct cred {
+	atomic_t usage;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t suid;
+	kgid_t sgid;
+	kuid_t euid;
+	kgid_t egid;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	unsigned int securebits;
+	kernel_cap_t cap_inheritable;
+	kernel_cap_t cap_permitted;
+	kernel_cap_t cap_effective;
+	kernel_cap_t cap_bset;
+	kernel_cap_t cap_ambient;
+	unsigned char jit_keyring;
+	struct key *session_keyring;
+	struct key *process_keyring;
+	struct key *thread_keyring;
+	struct key *request_key_auth;
+	void *security;
+	struct user_struct *user;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct group_info *group_info;
+	union {
+		int non_rcu;
+		struct callback_head rcu;
+	};
+};
+
+typedef int32_t key_serial_t;
+
+typedef uint32_t key_perm_t;
+
+struct key_type;
+
+struct key_tag;
+
+struct keyring_index_key {
+	long unsigned int hash;
+	union {
+		struct {
+			u16 desc_len;
+			char desc[6];
+		};
+		long unsigned int x;
+	};
+	struct key_type *type;
+	struct key_tag *domain_tag;
+	const char *description;
+};
+
+union key_payload {
+	void *rcu_data0;
+	void *data[4];
+};
+
+struct assoc_array_ptr;
+
+struct assoc_array {
+	struct assoc_array_ptr *root;
+	long unsigned int nr_leaves_on_tree;
+};
+
+struct key_user;
+
+struct key_restriction;
+
+struct key {
+	refcount_t usage;
+	key_serial_t serial;
+	union {
+		struct list_head graveyard_link;
+		struct rb_node serial_node;
+	};
+	struct rw_semaphore sem;
+	struct key_user *user;
+	void *security;
+	union {
+		time64_t expiry;
+		time64_t revoked_at;
+	};
+	time64_t last_used_at;
+	kuid_t uid;
+	kgid_t gid;
+	key_perm_t perm;
+	short unsigned int quotalen;
+	short unsigned int datalen;
+	short int state;
+	long unsigned int flags;
+	union {
+		struct keyring_index_key index_key;
+		struct {
+			long unsigned int hash;
+			long unsigned int len_desc;
+			struct key_type *type;
+			struct key_tag *domain_tag;
+			char *description;
+		};
+	};
+	union {
+		union key_payload payload;
+		struct {
+			struct list_head name_link;
+			struct assoc_array keys;
+		};
+	};
+	struct key_restriction *restrict_link;
+};
+
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct net;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	atomic_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
+struct sighand_struct {
+	spinlock_t siglock;
+	refcount_t count;
+	wait_queue_head_t signalfd_wqh;
+	struct k_sigaction action[64];
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+struct request;
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	short unsigned int nr_ios;
+	short unsigned int rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	bool nowait;
+	struct list_head cb_list;
+};
+
+struct io_cq;
+
+struct io_context {
+	atomic_long_t refcount;
+	atomic_t active_ref;
+	short unsigned int ioprio;
+	spinlock_t lock;
+	struct xarray icq_tree;
+	struct io_cq *icq_hint;
+	struct hlist_head icq_list;
+	struct work_struct release_work;
+};
+
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[14];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[14];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+struct perf_event_context {
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head pmu_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	int nr_events;
+	int nr_user;
+	int is_active;
+	int nr_task_data;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	int nr_cgroups;
+	struct callback_head callback_head;
+	local_t nr_pending;
+};
+
+struct ftrace_ret_stack {
+	long unsigned int ret;
+	long unsigned int func;
+	long long unsigned int calltime;
+	long long unsigned int subtime;
+	long unsigned int *retp;
+};
+
+struct blk_integrity_profile;
+
+struct blk_integrity {
+	const struct blk_integrity_profile *profile;
+	unsigned char flags;
+	unsigned char tuple_size;
+	unsigned char interval_exp;
+	unsigned char tag_size;
+};
+
+enum rpm_status {
+	RPM_INVALID = -1,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	long unsigned int seg_boundary_mask;
+	long unsigned int virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	short unsigned int max_segments;
+	short unsigned int max_integrity_segments;
+	short unsigned int max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	enum blk_zoned_model zoned;
+	unsigned int dma_alignment;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct gendisk;
+
+struct device;
+
+struct blk_crypto_profile;
+
+struct blk_stat_callback;
+
+struct blk_rq_stat;
+
+struct blk_mq_tags;
+
+struct blkcg_gq;
+
+struct blk_trace;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	long unsigned int queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	refcount_t refs;
+	struct kobject *mq_kobj;
+	struct blk_integrity integrity;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	long unsigned int nr_requests;
+	unsigned int dma_pad_mask;
+	struct blk_crypto_profile *crypto_profile;
+	struct kobject *crypto_kobject;
+	unsigned int rq_timeout;
+	int poll_nsec;
+	struct blk_stat_callback *poll_cb;
+	struct blk_rq_stat *poll_stat;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	long unsigned int blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_trace *blk_trace;
+	struct blk_flush_queue *fq;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+};
+
 struct list_lru_one {
 	struct list_head list;
 	long int nr_items;
 };
 
-struct list_lru_memcg {
-	struct callback_head rcu;
-	struct list_lru_one *lru[0];
-};
-
 struct list_lru_node {
 	spinlock_t lock;
 	struct list_lru_one lru;
-	struct list_lru_memcg *memcg_lrus;
 	long int nr_items;
 	long: 64;
 	long: 64;
+	long: 64;
 };
 
 enum migrate_mode {
@@ -4192,43 +3173,44 @@
 struct exception_table_entry {
 	int insn;
 	int fixup;
+	short int type;
+	short int data;
+};
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	long unsigned int notified_at;
+	struct timer_list notify_timer;
 };
 
 struct cgroup_base_stat {
 	struct task_cputime cputime;
 };
 
-struct psi_group_cpu;
-
-struct psi_group {
-	struct mutex avgs_lock;
-	struct psi_group_cpu *pcpu;
-	u64 avg_total[5];
-	u64 avg_last_update;
-	u64 avg_next_update;
-	struct delayed_work avgs_work;
-	u64 total[10];
-	long unsigned int avg[15];
-	struct task_struct *poll_task;
-	struct timer_list poll_timer;
-	wait_queue_head_t poll_wait;
-	atomic_t poll_wakeup;
-	struct mutex trigger_lock;
-	struct list_head triggers;
-	u32 nr_triggers[5];
-	u32 poll_states;
-	u64 poll_min_period;
-	u64 polling_total[5];
-	u64 polling_next_update;
-	u64 polling_until;
-};
-
 struct bpf_prog_array;
 
 struct cgroup_bpf {
-	struct bpf_prog_array *effective[38];
-	struct list_head progs[38];
-	u32 flags[38];
+	struct bpf_prog_array *effective[23];
+	struct hlist_head progs[23];
+	u8 flags[23];
 	struct list_head storages;
 	struct bpf_prog_array *inactive;
 	struct percpu_ref refcnt;
@@ -4246,6 +3228,8 @@
 
 struct cgroup_rstat_cpu;
 
+struct psi_group;
+
 struct cgroup {
 	struct cgroup_subsys_state self;
 	long unsigned int flags;
@@ -4261,14 +3245,15 @@
 	struct kernfs_node *kn;
 	struct cgroup_file procs_file;
 	struct cgroup_file events_file;
+	struct cgroup_file psi_files[0];
 	u16 subtree_control;
 	u16 subtree_ss_mask;
 	u16 old_subtree_control;
 	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state *subsys[12];
+	struct cgroup_subsys_state *subsys[14];
 	struct cgroup_root *root;
 	struct list_head cset_links;
-	struct list_head e_csets[12];
+	struct list_head e_csets[14];
 	struct cgroup *dom_cgrp;
 	struct cgroup *old_dom_cgrp;
 	struct cgroup_rstat_cpu *rstat_cpu;
@@ -4280,11 +3265,45 @@
 	struct mutex pidlist_mutex;
 	wait_queue_head_t offline_waitq;
 	struct work_struct release_agent_work;
-	struct psi_group psi;
+	struct psi_group *psi;
 	struct cgroup_bpf bpf;
 	atomic_t congestion_count;
 	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
+	struct bpf_local_storage *bpf_cgrp_storage;
+	struct cgroup *ancestors[0];
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	struct ctl_table *child;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
 };
 
 struct key_tag {
@@ -4335,12 +3354,34 @@
 	struct key_type *keytype;
 };
 
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	long unsigned int unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	struct ratelimit_state ratelimit;
+};
+
 struct group_info {
 	atomic_t usage;
 	int ngroups;
 	kgid_t gid[0];
 };
 
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
+};
+
 struct taskstats {
 	__u16 version;
 	__u32 ac_exitcode;
@@ -4389,6 +3430,14 @@
 	__u64 thrashing_count;
 	__u64 thrashing_delay_total;
 	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
 };
 
 struct delayed_call {
@@ -4410,27 +3459,49 @@
 	unsigned int flags;
 };
 
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
 struct wait_page_queue;
 
 struct kiocb {
 	struct file *ki_filp;
 	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb *, long int, long int);
+	void (*ki_complete)(struct kiocb *, long int);
 	void *private;
 	int ki_flags;
-	u16 ki_hint;
 	u16 ki_ioprio;
-	union {
-		unsigned int ki_cookie;
-		struct wait_page_queue *ki_waitq;
-	};
+	struct wait_page_queue *ki_waitq;
 };
 
 struct iattr {
 	unsigned int ia_valid;
 	umode_t ia_mode;
-	kuid_t ia_uid;
-	kgid_t ia_gid;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
 	loff_t ia_size;
 	struct timespec64 ia_atime;
 	struct timespec64 ia_mtime;
@@ -4580,12 +3651,6 @@
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
 
-struct wait_page_queue {
-	struct page *page;
-	int bit_nr;
-	wait_queue_entry_t wait;
-};
-
 struct writeback_control;
 
 struct readahead_control;
@@ -4594,64 +3659,25 @@
 
 struct address_space_operations {
 	int (*writepage)(struct page *, struct writeback_control *);
-	int (*readpage)(struct file *, struct page *);
+	int (*read_folio)(struct file *, struct folio *);
 	int (*writepages)(struct address_space *, struct writeback_control *);
-	int (*set_page_dirty)(struct page *);
-	int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
 	void (*readahead)(struct readahead_control *);
-	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
 	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
 	sector_t (*bmap)(struct address_space *, sector_t);
-	void (*invalidatepage)(struct page *, unsigned int, unsigned int);
-	int (*releasepage)(struct page *, gfp_t);
-	void (*freepage)(struct page *);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
 	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
-	int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);
-	bool (*isolate_page)(struct page *, isolate_mode_t);
-	void (*putback_page)(struct page *);
-	int (*launder_page)(struct page *);
-	int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page *, bool *, bool *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
 	int (*error_remove_page)(struct address_space *, struct page *);
 	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
 	void (*swap_deactivate)(struct file *);
-};
-
-enum writeback_sync_modes {
-	WB_SYNC_NONE = 0,
-	WB_SYNC_ALL = 1,
-};
-
-struct writeback_control {
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	enum writeback_sync_modes sync_mode;
-	unsigned int for_kupdate: 1;
-	unsigned int for_background: 1;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_reclaim: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_sync: 1;
-	unsigned int no_cgroup_owner: 1;
-	unsigned int punt_to_cgroup: 1;
-	struct bdi_writeback *wb;
-	struct inode *inode;
-	int wb_id;
-	int wb_lcand_id;
-	int wb_tcand_id;
-	size_t wb_bytes;
-	size_t wb_lcand_bytes;
-	size_t wb_tcand_bytes;
-};
-
-struct readahead_control {
-	struct file *file;
-	struct address_space *mapping;
-	long unsigned int _index;
-	unsigned int _nr_pages;
-	unsigned int _batch_count;
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
 };
 
 struct iovec;
@@ -4661,14 +3687,22 @@
 struct bio_vec;
 
 struct iov_iter {
-	unsigned int type;
-	size_t iov_offset;
+	u8 iter_type;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
 	size_t count;
 	union {
 		const struct iovec *iov;
 		const struct kvec *kvec;
 		const struct bio_vec *bvec;
+		struct xarray *xarray;
 		struct pipe_inode_info *pipe;
+		void *ubuf;
 	};
 	union {
 		long unsigned int nr_segs;
@@ -4676,114 +3710,39 @@
 			unsigned int head;
 			unsigned int start_head;
 		};
+		loff_t xarray_start;
 	};
 };
 
-struct swap_cluster_info {
-	spinlock_t lock;
-	unsigned int data: 24;
-	unsigned int flags: 8;
-};
-
-struct swap_cluster_list {
-	struct swap_cluster_info head;
-	struct swap_cluster_info tail;
-};
-
-struct percpu_cluster;
-
-struct swap_info_struct {
-	long unsigned int flags;
-	short int prio;
-	struct plist_node list;
-	signed char type;
-	unsigned int max;
-	unsigned char *swap_map;
-	struct swap_cluster_info *cluster_info;
-	struct swap_cluster_list free_clusters;
-	unsigned int lowest_bit;
-	unsigned int highest_bit;
-	unsigned int pages;
-	unsigned int inuse_pages;
-	unsigned int cluster_next;
-	unsigned int cluster_nr;
-	unsigned int *cluster_next_cpu;
-	struct percpu_cluster *percpu_cluster;
-	struct rb_root swap_extent_root;
-	struct block_device *bdev;
-	struct file *swap_file;
-	unsigned int old_block_size;
-	long unsigned int *frontswap_map;
-	atomic_t frontswap_pages;
-	spinlock_t lock;
-	spinlock_t cont_lock;
-	struct work_struct discard_work;
-	struct swap_cluster_list discard_clusters;
-	struct plist_node avail_lists[0];
-};
-
-struct hd_struct;
-
-struct gendisk;
-
-struct block_device {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode *bd_inode;
-	struct super_block *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device *bd_contains;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	spinlock_t bd_size_lock;
-	struct gendisk *bd_disk;
-	struct backing_dev_info *bd_bdi;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct cdev {
-	struct kobject kobj;
-	struct module *owner;
-	const struct file_operations *ops;
-	struct list_head list;
-	dev_t dev;
-	unsigned int count;
-};
-
 struct fiemap_extent_info;
 
+struct fileattr;
+
 struct inode_operations {
 	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
 	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
-	int (*permission)(struct inode *, int);
-	struct posix_acl * (*get_acl)(struct inode *, int);
+	int (*permission)(struct user_namespace *, struct inode *, int);
+	struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
 	int (*readlink)(struct dentry *, char *, int);
-	int (*create)(struct inode *, struct dentry *, umode_t, bool);
+	int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool);
 	int (*link)(struct dentry *, struct inode *, struct dentry *);
 	int (*unlink)(struct inode *, struct dentry *);
-	int (*symlink)(struct inode *, struct dentry *, const char *);
-	int (*mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
 	int (*rmdir)(struct inode *, struct dentry *);
-	int (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
-	int (*setattr)(struct dentry *, struct iattr *);
-	int (*getattr)(const struct path *, struct kstat *, u32, unsigned int);
+	int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *);
+	int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
 	ssize_t (*listxattr)(struct dentry *, char *, size_t);
 	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
 	int (*update_time)(struct inode *, struct timespec64 *, int);
 	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode *, struct dentry *, umode_t);
-	int (*set_acl)(struct inode *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
-	long: 64;
+	int (*tmpfile)(struct user_namespace *, struct inode *, struct file *, umode_t);
+	struct posix_acl * (*get_acl)(struct user_namespace *, struct dentry *, int);
+	int (*set_acl)(struct user_namespace *, struct dentry *, struct posix_acl *, int);
+	int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
 };
 
 struct file_lock_context {
@@ -4812,6 +3771,8 @@
 	struct nfs4_lock_state *owner;
 };
 
+struct fasync_struct;
+
 struct lock_manager_operations;
 
 struct file_lock {
@@ -4842,10 +3803,14 @@
 			int state;
 			unsigned int debug_id;
 		} afs;
+		struct {
+			struct inode *inode;
+		} ceph;
 	} fl_u;
 };
 
 struct lock_manager_operations {
+	void *lm_mod_owner;
 	fl_owner_t (*lm_get_owner)(fl_owner_t);
 	void (*lm_put_owner)(fl_owner_t);
 	void (*lm_notify)(struct file_lock *);
@@ -4854,6 +3819,8 @@
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
 	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
 };
 
 struct fasync_struct {
@@ -4891,7 +3858,6 @@
 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
 	struct dquot ** (*get_dquots)(struct inode *);
-	int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);
 	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
 	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
 };
@@ -4910,6 +3876,8 @@
 	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
 	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
 	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	u64 (*fetch_iversion)(struct inode *);
+	long unsigned int flags;
 };
 
 struct xattr_handler {
@@ -4918,7 +3886,7 @@
 	int flags;
 	bool (*list)(struct dentry *);
 	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
-	int (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+	int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
 };
 
 union fscrypt_policy;
@@ -4930,11 +3898,9 @@
 	int (*set_context)(struct inode *, const void *, size_t, void *);
 	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
 	bool (*empty_dir)(struct inode *);
-	unsigned int max_namelen;
 	bool (*has_stable_inodes)(struct super_block *);
 	void (*get_ino_and_lblk_bits)(struct super_block *, int *, int *);
-	int (*get_num_devices)(struct super_block *);
-	void (*get_devices)(struct super_block *, struct request_queue **);
+	struct block_device ** (*get_devices)(struct super_block *, unsigned int *);
 };
 
 struct fsverity_operations {
@@ -4945,518 +3911,6 @@
 	int (*write_merkle_tree_block)(struct inode *, const void *, u64, int);
 };
 
-typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
-
-struct dir_context {
-	filldir_t actor;
-	loff_t pos;
-};
-
-typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct poll_table_struct {
-	poll_queue_proc _qproc;
-	__poll_t _key;
-};
-
-struct seq_operations;
-
-struct seq_file {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	struct mutex lock;
-	const struct seq_operations *op;
-	int poll_event;
-	const struct file *file;
-	void *private;
-};
-
-struct fc_log;
-
-struct p_log {
-	const char *prefix;
-	struct fc_log *log;
-};
-
-enum fs_context_purpose {
-	FS_CONTEXT_FOR_MOUNT = 0,
-	FS_CONTEXT_FOR_SUBMOUNT = 1,
-	FS_CONTEXT_FOR_RECONFIGURE = 2,
-};
-
-enum fs_context_phase {
-	FS_CONTEXT_CREATE_PARAMS = 0,
-	FS_CONTEXT_CREATING = 1,
-	FS_CONTEXT_AWAITING_MOUNT = 2,
-	FS_CONTEXT_AWAITING_RECONF = 3,
-	FS_CONTEXT_RECONF_PARAMS = 4,
-	FS_CONTEXT_RECONFIGURING = 5,
-	FS_CONTEXT_FAILED = 6,
-};
-
-struct fs_context_operations;
-
-struct fs_context {
-	const struct fs_context_operations *ops;
-	struct mutex uapi_mutex;
-	struct file_system_type *fs_type;
-	void *fs_private;
-	void *sget_key;
-	struct dentry *root;
-	struct user_namespace *user_ns;
-	struct net *net_ns;
-	const struct cred *cred;
-	struct p_log log;
-	const char *source;
-	void *security;
-	void *s_fs_info;
-	unsigned int sb_flags;
-	unsigned int sb_flags_mask;
-	unsigned int s_iflags;
-	unsigned int lsm_flags;
-	enum fs_context_purpose purpose: 8;
-	enum fs_context_phase phase: 8;
-	bool need_free: 1;
-	bool global: 1;
-	bool oldapi: 1;
-};
-
-struct fs_parameter;
-
-struct fs_parse_result;
-
-typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);
-
-struct fs_parameter_spec {
-	const char *name;
-	fs_param_type *type;
-	u8 opt;
-	short unsigned int flags;
-	const void *data;
-};
-
-struct audit_names;
-
-struct filename {
-	const char *name;
-	const char *uptr;
-	int refcnt;
-	struct audit_names *aname;
-	const char iname[0];
-};
-
-typedef u8 blk_status_t;
-
-struct bvec_iter {
-	sector_t bi_sector;
-	unsigned int bi_size;
-	unsigned int bi_idx;
-	unsigned int bi_bvec_done;
-};
-
-typedef void bio_end_io_t(struct bio *);
-
-struct bio_issue {
-	u64 value;
-};
-
-struct bio_vec {
-	struct page *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct bio_crypt_ctx;
-
-struct bio_integrity_payload;
-
-struct bio {
-	struct bio *bi_next;
-	struct gendisk *bi_disk;
-	unsigned int bi_opf;
-	short unsigned int bi_flags;
-	short unsigned int bi_ioprio;
-	short unsigned int bi_write_hint;
-	blk_status_t bi_status;
-	u8 bi_partno;
-	atomic_t __bi_remaining;
-	struct bvec_iter bi_iter;
-	bio_end_io_t *bi_end_io;
-	void *bi_private;
-	struct blkcg_gq *bi_blkg;
-	struct bio_issue bi_issue;
-	u64 bi_iocost_cost;
-	struct bio_crypt_ctx *bi_crypt_context;
-	union {
-		struct bio_integrity_payload *bi_integrity;
-	};
-	short unsigned int bi_vcnt;
-	short unsigned int bi_max_vecs;
-	atomic_t __bi_cnt;
-	struct bio_vec *bi_io_vec;
-	struct bio_set *bi_pool;
-	struct bio_vec bi_inline_vecs[0];
-};
-
-struct kernfs_root;
-
-struct kernfs_elem_dir {
-	long unsigned int subdirs;
-	struct rb_root children;
-	struct kernfs_root *root;
-};
-
-struct kernfs_syscall_ops;
-
-struct kernfs_root {
-	struct kernfs_node *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
-};
-
-struct kernfs_elem_symlink {
-	struct kernfs_node *target_kn;
-};
-
-struct kernfs_ops;
-
-struct kernfs_open_node;
-
-struct kernfs_elem_attr {
-	const struct kernfs_ops *ops;
-	struct kernfs_open_node *open;
-	loff_t size;
-	struct kernfs_node *notify_next;
-};
-
-struct kernfs_iattrs;
-
-struct kernfs_node {
-	atomic_t count;
-	atomic_t active;
-	struct kernfs_node *parent;
-	const char *name;
-	struct rb_node rb;
-	const void *ns;
-	unsigned int hash;
-	union {
-		struct kernfs_elem_dir dir;
-		struct kernfs_elem_symlink symlink;
-		struct kernfs_elem_attr attr;
-	};
-	void *priv;
-	u64 id;
-	short unsigned int flags;
-	umode_t mode;
-	struct kernfs_iattrs *iattr;
-};
-
-struct kernfs_open_file;
-
-struct kernfs_ops {
-	int (*open)(struct kernfs_open_file *);
-	void (*release)(struct kernfs_open_file *);
-	int (*seq_show)(struct seq_file *, void *);
-	void * (*seq_start)(struct seq_file *, loff_t *);
-	void * (*seq_next)(struct seq_file *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file *, void *);
-	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
-	size_t atomic_write_len;
-	bool prealloc;
-	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
-	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
-};
-
-struct kernfs_syscall_ops {
-	int (*show_options)(struct seq_file *, struct kernfs_root *);
-	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node *);
-	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
-	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
-};
-
-struct kernfs_open_file {
-	struct kernfs_node *kn;
-	struct file *file;
-	struct seq_file *seq_file;
-	void *priv;
-	struct mutex mutex;
-	struct mutex prealloc_mutex;
-	int event;
-	struct list_head list;
-	char *prealloc_buf;
-	size_t atomic_write_len;
-	bool mmapped: 1;
-	bool released: 1;
-	const struct vm_operations_struct *vm_ops;
-};
-
-enum kobj_ns_type {
-	KOBJ_NS_TYPE_NONE = 0,
-	KOBJ_NS_TYPE_NET = 1,
-	KOBJ_NS_TYPES = 2,
-};
-
-struct sock;
-
-struct kobj_ns_type_operations {
-	enum kobj_ns_type type;
-	bool (*current_may_mount)();
-	void * (*grab_current_ns)();
-	const void * (*netlink_ns)(struct sock *);
-	const void * (*initial_ns)();
-	void (*drop_ns)(void *);
-};
-
-struct attribute {
-	const char *name;
-	umode_t mode;
-};
-
-struct bin_attribute;
-
-struct attribute_group {
-	const char *name;
-	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
-	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
-	struct attribute **attrs;
-	struct bin_attribute **bin_attrs;
-};
-
-struct bin_attribute {
-	struct attribute attr;
-	size_t size;
-	void *private;
-	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
-};
-
-struct sysfs_ops {
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
-};
-
-struct kset_uevent_ops;
-
-struct kset {
-	struct list_head list;
-	spinlock_t list_lock;
-	struct kobject kobj;
-	const struct kset_uevent_ops *uevent_ops;
-};
-
-struct kobj_type {
-	void (*release)(struct kobject *);
-	const struct sysfs_ops *sysfs_ops;
-	struct attribute **default_attrs;
-	const struct attribute_group **default_groups;
-	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
-	const void * (*namespace)(struct kobject *);
-	void (*get_ownership)(struct kobject *, kuid_t *, kgid_t *);
-};
-
-struct kobj_uevent_env {
-	char *argv[3];
-	char *envp[64];
-	int envp_idx;
-	char buf[2048];
-	int buflen;
-};
-
-struct kset_uevent_ops {
-	int (* const filter)(struct kset *, struct kobject *);
-	const char * (* const name)(struct kset *, struct kobject *);
-	int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);
-};
-
-struct kernel_param_ops {
-	unsigned int flags;
-	int (*set)(const char *, const struct kernel_param *);
-	int (*get)(char *, const struct kernel_param *);
-	void (*free)(void *);
-};
-
-struct kparam_string;
-
-struct kparam_array;
-
-struct kernel_param {
-	const char *name;
-	struct module *mod;
-	const struct kernel_param_ops *ops;
-	const u16 perm;
-	s8 level;
-	u8 flags;
-	union {
-		void *arg;
-		const struct kparam_string *str;
-		const struct kparam_array *arr;
-	};
-};
-
-struct kparam_string {
-	unsigned int maxlen;
-	char *string;
-};
-
-struct kparam_array {
-	unsigned int max;
-	unsigned int elemsize;
-	unsigned int *num;
-	const struct kernel_param_ops *ops;
-	void *elem;
-};
-
-struct error_injection_entry {
-	long unsigned int addr;
-	int etype;
-};
-
-struct tracepoint_func {
-	void *func;
-	void *data;
-	int prio;
-};
-
-struct static_call_key;
-
-struct tracepoint {
-	const char *name;
-	struct static_key key;
-	struct static_call_key *static_call_key;
-	void *static_call_tramp;
-	void *iterator;
-	int (*regfunc)();
-	void (*unregfunc)();
-	struct tracepoint_func *funcs;
-};
-
-struct static_call_key {
-	void *func;
-};
-
-struct bpf_raw_event_map {
-	struct tracepoint *tp;
-	void *bpf_func;
-	u32 num_args;
-	u32 writable_size;
-	long: 64;
-};
-
-struct plt_entry {
-	__le32 adrp;
-	__le32 add;
-	__le32 br;
-};
-
-struct module_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
-	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
-	void (*setup)(struct module *, const char *);
-	int (*test)(struct module *);
-	void (*free)(struct module *);
-};
-
-struct trace_event_functions;
-
-struct trace_event {
-	struct hlist_node node;
-	struct list_head list;
-	int type;
-	struct trace_event_functions *funcs;
-};
-
-struct trace_event_class;
-
-struct trace_event_call {
-	struct list_head list;
-	struct trace_event_class *class;
-	union {
-		char *name;
-		struct tracepoint *tp;
-	};
-	struct trace_event event;
-	char *print_fmt;
-	struct event_filter *filter;
-	void *mod;
-	void *data;
-	int flags;
-	int perf_refcount;
-	struct hlist_head *perf_events;
-	struct bpf_prog_array *prog_array;
-	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
-};
-
-struct trace_eval_map {
-	const char *system;
-	const char *eval_string;
-	long unsigned int eval_value;
-};
-
-struct linux_binprm {
-	struct vm_area_struct *vma;
-	long unsigned int vma_pages;
-	struct mm_struct *mm;
-	long unsigned int p;
-	long unsigned int argmin;
-	unsigned int have_execfd: 1;
-	unsigned int execfd_creds: 1;
-	unsigned int secureexec: 1;
-	unsigned int point_of_no_return: 1;
-	struct file *executable;
-	struct file *interpreter;
-	struct file *file;
-	struct cred *cred;
-	int unsafe;
-	unsigned int per_clear;
-	int argc;
-	int envc;
-	const char *filename;
-	const char *interp;
-	const char *fdpath;
-	unsigned int interp_flags;
-	int execfd;
-	long unsigned int loader;
-	long unsigned int exec;
-	struct rlimit rlim_stack;
-	char buf[256];
-};
-
-struct coredump_params {
-	const kernel_siginfo_t *siginfo;
-	struct pt_regs *regs;
-	struct file *file;
-	long unsigned int limit;
-	long unsigned int mm_flags;
-	loff_t written;
-	loff_t pos;
-};
-
-struct em_perf_state {
-	long unsigned int frequency;
-	long unsigned int power;
-	long unsigned int cost;
-};
-
-struct em_perf_domain {
-	struct em_perf_state *table;
-	int nr_perf_states;
-	long unsigned int cpus[0];
-};
-
 enum dl_dev_state {
 	DL_DEV_NO_DRIVER = 0,
 	DL_DEV_PROBING = 1,
@@ -5467,9 +3921,7 @@
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
-	struct list_head needs_suppliers;
-	struct list_head defer_hook;
-	bool need_for_probe;
+	struct list_head defer_sync;
 	enum dl_dev_state status;
 };
 
@@ -5528,6 +3980,7 @@
 	unsigned int idle_notification: 1;
 	unsigned int request_pending: 1;
 	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
 	unsigned int runtime_auto: 1;
 	bool ignore_children: 1;
 	unsigned int no_callbacks: 1;
@@ -5538,6 +3991,7 @@
 	unsigned int links_count;
 	enum rpm_request request;
 	enum rpm_status runtime_status;
+	enum rpm_status last_status;
 	int runtime_error;
 	int autosuspend_delay;
 	u64 last_busy;
@@ -5549,8 +4003,24 @@
 	struct dev_pm_qos *qos;
 };
 
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
 struct dev_archdata {};
 
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
 struct device_private;
 
 struct device_type;
@@ -5561,12 +4031,6 @@
 
 struct dev_pm_domain;
 
-struct irq_domain;
-
-struct dev_pin_info;
-
-struct dma_map_ops;
-
 struct bus_dma_region;
 
 struct device_dma_parameters;
@@ -5575,16 +4039,22 @@
 
 struct cma;
 
+struct io_tlb_mem;
+
 struct device_node;
 
 struct fwnode_handle;
 
 struct class;
 
+struct attribute_group;
+
 struct iommu_group;
 
 struct dev_iommu;
 
+struct device_physical_location;
+
 struct device {
 	struct kobject kobj;
 	struct device *parent;
@@ -5599,11 +4069,7 @@
 	struct dev_links_info links;
 	struct dev_pm_info power;
 	struct dev_pm_domain *pm_domain;
-	struct em_perf_domain *em_pd;
-	struct irq_domain *msi_domain;
-	struct dev_pin_info *pins;
-	struct list_head msi_list;
-	const struct dma_map_ops *dma_ops;
+	struct dev_msi_info msi;
 	u64 *dma_mask;
 	u64 coherent_dma_mask;
 	u64 bus_dma_limit;
@@ -5612,6 +4078,7 @@
 	struct list_head dma_pools;
 	struct dma_coherent_mem *dma_mem;
 	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
 	struct dev_archdata archdata;
 	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
@@ -5625,11 +4092,732 @@
 	void (*release)(struct device *);
 	struct iommu_group *iommu_group;
 	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
 	bool offline_disabled: 1;
 	bool offline: 1;
 	bool of_node_reused: 1;
 	bool state_synced: 1;
-	bool dma_coherent: 1;
+	bool can_match: 1;
+};
+
+struct disk_stats;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct disk_stats *bd_stats;
+	long unsigned int bd_stamp;
+	bool bd_read_only;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	struct inode *bd_inode;
+	struct super_block *bd_super;
+	void *bd_claiming;
+	struct device bd_device;
+	void *bd_holder;
+	int bd_holders;
+	bool bd_write_holder;
+	struct kobject *bd_holder_dir;
+	u8 bd_partno;
+	spinlock_t bd_size_lock;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	int bd_fsfreeze_count;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+	bool bd_make_it_fail;
+};
+
+typedef bool (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
+
+struct dir_context {
+	filldir_t actor;
+	loff_t pos;
+};
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct p_log;
+
+struct fs_parameter;
+
+struct fs_parse_result;
+
+typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);
+
+struct fs_parameter_spec {
+	const char *name;
+	fs_param_type *type;
+	u8 opt;
+	short unsigned int flags;
+	const void *data;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct bio_crypt_ctx;
+
+struct bio_integrity_payload;
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	short unsigned int bi_flags;
+	short unsigned int bi_ioprio;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	struct bio_crypt_ctx *bi_crypt_context;
+	union {
+		struct bio_integrity_payload *bi_integrity;
+	};
+	short unsigned int bi_vcnt;
+	short unsigned int bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+struct subprocess_info {
+	struct work_struct work;
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
+	void *data;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func *funcs;
+};
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, long unsigned int, long unsigned int, int);
+};
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	unsigned int node;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	long unsigned int hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct proc_dir_entry;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	long unsigned int last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	long unsigned int threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+struct fwnode_operations;
+
+struct fwnode_handle {
+	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
+	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
+struct fwnode_reference_args;
+
+struct fwnode_endpoint;
+
+struct fwnode_operations {
+	struct fwnode_handle * (*get)(struct fwnode_handle *);
+	void (*put)(struct fwnode_handle *);
+	bool (*device_is_available)(const struct fwnode_handle *);
+	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
+	bool (*property_present)(const struct fwnode_handle *, const char *);
+	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
+	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
+	const char * (*get_name)(const struct fwnode_handle *);
+	const char * (*get_name_prefix)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
+	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
+	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
+	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
+};
+
+struct fwnode_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct fwnode_handle *local_fwnode;
+};
+
+struct fwnode_reference_args {
+	struct fwnode_handle *fwnode;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+	DOMAIN_BUS_PCI_DEVICE_MSI = 11,
+	DOMAIN_BUS_PCI_DEVICE_MSIX = 12,
+	DOMAIN_BUS_DMAR = 13,
+	DOMAIN_BUS_AMDVI = 14,
+	DOMAIN_BUS_PCI_DEVICE_IMS = 15,
+};
+
+struct kernfs_root;
+
+struct kernfs_elem_dir {
+	long unsigned int subdirs;
+	struct rb_root children;
+	struct kernfs_root *root;
+	long unsigned int rev;
+};
+
+struct kernfs_elem_symlink {
+	struct kernfs_node *target_kn;
+};
+
+struct kernfs_ops;
+
+struct kernfs_open_node;
+
+struct kernfs_elem_attr {
+	const struct kernfs_ops *ops;
+	struct kernfs_open_node *open;
+	loff_t size;
+	struct kernfs_node *notify_next;
+};
+
+struct kernfs_iattrs;
+
+struct kernfs_node {
+	atomic_t count;
+	atomic_t active;
+	struct kernfs_node *parent;
+	const char *name;
+	struct rb_node rb;
+	const void *ns;
+	unsigned int hash;
+	union {
+		struct kernfs_elem_dir dir;
+		struct kernfs_elem_symlink symlink;
+		struct kernfs_elem_attr attr;
+	};
+	void *priv;
+	u64 id;
+	short unsigned int flags;
+	umode_t mode;
+	struct kernfs_iattrs *iattr;
+};
+
+struct kernfs_open_file;
+
+struct kernfs_ops {
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
+	size_t atomic_write_len;
+	bool prealloc;
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
+};
+
+struct kernfs_open_file {
+	struct kernfs_node *kn;
+	struct file *file;
+	struct seq_file *seq_file;
+	void *priv;
+	struct mutex mutex;
+	struct mutex prealloc_mutex;
+	int event;
+	struct list_head list;
+	char *prealloc_buf;
+	size_t atomic_write_len;
+	bool mmapped: 1;
+	bool released: 1;
+	const struct vm_operations_struct *vm_ops;
+};
+
+enum kobj_ns_type {
+	KOBJ_NS_TYPE_NONE = 0,
+	KOBJ_NS_TYPE_NET = 1,
+	KOBJ_NS_TYPES = 2,
+};
+
+struct sock;
+
+struct kobj_ns_type_operations {
+	enum kobj_ns_type type;
+	bool (*current_may_mount)();
+	void * (*grab_current_ns)();
+	const void * (*netlink_ns)(struct sock *);
+	const void * (*initial_ns)();
+	void (*drop_ns)(void *);
+};
+
+struct attribute {
+	const char *name;
+	umode_t mode;
+};
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
+};
+
+struct bin_attribute {
+	struct attribute attr;
+	size_t size;
+	void *private;
+	struct address_space * (*f_mapping)();
+	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+struct sysfs_ops {
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+};
+
+struct kset_uevent_ops;
+
+struct kset {
+	struct list_head list;
+	spinlock_t list_lock;
+	struct kobject kobj;
+	const struct kset_uevent_ops *uevent_ops;
+};
+
+struct kobj_type {
+	void (*release)(struct kobject *);
+	const struct sysfs_ops *sysfs_ops;
+	const struct attribute_group **default_groups;
+	const struct kobj_ns_type_operations * (*child_ns_type)(const struct kobject *);
+	const void * (*namespace)(const struct kobject *);
+	void (*get_ownership)(const struct kobject *, kuid_t *, kgid_t *);
+};
+
+struct kobj_uevent_env {
+	char *argv[3];
+	char *envp[64];
+	int envp_idx;
+	char buf[2048];
+	int buflen;
+};
+
+struct kset_uevent_ops {
+	int (* const filter)(const struct kobject *);
+	const char * (* const name)(const struct kobject *);
+	int (* const uevent)(struct kobject *, struct kobj_uevent_env *);
+};
+
+typedef long unsigned int kernel_ulong_t;
+
+struct acpi_device_id {
+	__u8 id[16];
+	kernel_ulong_t driver_data;
+	__u32 cls;
+	__u32 cls_msk;
+};
+
+struct of_device_id {
+	char name[32];
+	char type[32];
+	char compatible[128];
+	const void *data;
+};
+
+typedef u32 phandle;
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	long unsigned int _flags;
+	struct bin_attribute attr;
+};
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	long unsigned int _flags;
+	void *data;
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+};
+
+struct irq_domain_chip_generic;
+
+struct msi_parent_ops;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct device *pm_dev;
+	struct irq_domain *parent;
+	const struct msi_parent_ops *msi_parent_ops;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct mutex revmap_mutex;
+	struct irq_data *revmap[0];
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_chip_generic;
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct msi_domain_info;
+
+struct msi_parent_ops {
+	u32 supported_flags;
+	const char *prefix;
+	bool (*init_dev_msi_info)(struct device *, struct irq_domain *, struct irq_domain *, struct msi_domain_info *);
+};
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct msi_msg;
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	long unsigned int flags;
+};
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	long unsigned int thread_flags;
+	long unsigned int thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+struct irq_chip_regs {
+	long unsigned int enable;
+	long unsigned int disable;
+	long unsigned int mask;
+	long unsigned int ack;
+	long unsigned int eoi;
+	long unsigned int type;
+	long unsigned int polarity;
+};
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	long unsigned int installed;
+	long unsigned int unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
 };
 
 struct dev_pm_ops {
@@ -5658,13 +4846,12 @@
 	int (*runtime_idle)(struct device *);
 };
 
-struct pm_domain_data;
-
 struct pm_subsys_data {
 	spinlock_t lock;
 	unsigned int refcount;
+	unsigned int clock_op_might_sleep;
+	struct mutex clock_mutex;
 	struct list_head clock_list;
-	struct pm_domain_data *domain_data;
 };
 
 struct wakeup_source {
@@ -5714,7 +4901,7 @@
 	int (*uevent)(struct device *, struct kobj_uevent_env *);
 	int (*probe)(struct device *);
 	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
+	void (*remove)(struct device *);
 	void (*shutdown)(struct device *);
 	int (*online)(struct device *);
 	int (*offline)(struct device *);
@@ -5722,6 +4909,7 @@
 	int (*resume)(struct device *);
 	int (*num_vf)(struct device *);
 	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
 	const struct dev_pm_ops *pm;
 	const struct iommu_ops *iommu_ops;
 	struct subsys_private *p;
@@ -5735,10 +4923,6 @@
 	PROBE_FORCE_SYNCHRONOUS = 2,
 };
 
-struct of_device_id;
-
-struct acpi_device_id;
-
 struct driver_private;
 
 struct device_driver {
@@ -5767,85 +4951,45 @@
 	IOMMU_CAP_CACHE_COHERENCY = 0,
 	IOMMU_CAP_INTR_REMAP = 1,
 	IOMMU_CAP_NOEXEC = 2,
-};
-
-enum iommu_attr {
-	DOMAIN_ATTR_GEOMETRY = 0,
-	DOMAIN_ATTR_PAGING = 1,
-	DOMAIN_ATTR_WINDOWS = 2,
-	DOMAIN_ATTR_FSL_PAMU_STASH = 3,
-	DOMAIN_ATTR_FSL_PAMU_ENABLE = 4,
-	DOMAIN_ATTR_FSL_PAMUV1 = 5,
-	DOMAIN_ATTR_NESTING = 6,
-	DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,
-	DOMAIN_ATTR_MAX = 8,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 3,
+	IOMMU_CAP_ENFORCE_CACHE_COHERENCY = 4,
 };
 
 enum iommu_dev_features {
-	IOMMU_DEV_FEAT_AUX = 0,
-	IOMMU_DEV_FEAT_SVA = 1,
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
 };
 
+typedef unsigned int ioasid_t;
+
 struct iommu_domain;
 
-struct iommu_iotlb_gather;
-
 struct iommu_device;
 
-struct iommu_resv_region;
-
 struct of_phandle_args;
 
-struct iommu_sva;
-
 struct iommu_fault_event;
 
 struct iommu_page_response;
 
-struct iommu_cache_invalidate_info;
-
-struct iommu_gpasid_bind_data;
+struct iommu_domain_ops;
 
 struct iommu_ops {
-	bool (*capable)(enum iommu_cap);
+	bool (*capable)(struct device *, enum iommu_cap);
 	struct iommu_domain * (*domain_alloc)(unsigned int);
-	void (*domain_free)(struct iommu_domain *);
-	int (*attach_dev)(struct iommu_domain *, struct device *);
-	void (*detach_dev)(struct iommu_domain *, struct device *);
-	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	void (*flush_iotlb_all)(struct iommu_domain *);
-	void (*iotlb_sync_map)(struct iommu_domain *);
-	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
 	struct iommu_device * (*probe_device)(struct device *);
 	void (*release_device)(struct device *);
 	void (*probe_finalize)(struct device *);
 	struct iommu_group * (*device_group)(struct device *);
-	int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
 	void (*get_resv_regions)(struct device *, struct list_head *);
-	void (*put_resv_regions)(struct device *, struct list_head *);
-	void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
-	int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
-	void (*domain_window_disable)(struct iommu_domain *, u32);
 	int (*of_xlate)(struct device *, struct of_phandle_args *);
-	bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
-	bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
-	bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
+	bool (*is_attach_deferred)(struct device *);
 	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
 	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
-	int (*aux_attach_dev)(struct iommu_domain *, struct device *);
-	void (*aux_detach_dev)(struct iommu_domain *, struct device *);
-	int (*aux_get_pasid)(struct iommu_domain *, struct device *);
-	struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
-	void (*sva_unbind)(struct iommu_sva *);
-	u32 (*sva_get_pasid)(struct iommu_sva *);
 	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
-	int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
-	int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
-	int (*sva_unbind_gpasid)(struct device *, u32);
 	int (*def_domain_type)(struct device *);
+	void (*remove_dev_pasid)(struct device *, ioasid_t);
+	const struct iommu_domain_ops *default_domain_ops;
 	long unsigned int pgsize_bitmap;
 	struct module *owner;
 };
@@ -5865,113 +5009,162 @@
 	const struct attribute_group **class_groups;
 	const struct attribute_group **dev_groups;
 	struct kobject *dev_kobj;
-	int (*dev_uevent)(struct device *, struct kobj_uevent_env *);
-	char * (*devnode)(struct device *, umode_t *);
+	int (*dev_uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *);
 	void (*class_release)(struct class *);
 	void (*dev_release)(struct device *);
 	int (*shutdown_pre)(struct device *);
 	const struct kobj_ns_type_operations *ns_type;
-	const void * (*namespace)(struct device *);
-	void (*get_ownership)(struct device *, kuid_t *, kgid_t *);
+	const void * (*namespace)(const struct device *);
+	void (*get_ownership)(const struct device *, kuid_t *, kgid_t *);
 	const struct dev_pm_ops *pm;
 	struct subsys_private *p;
 };
 
-struct of_device_id {
-	char name[32];
-	char type[32];
-	char compatible[128];
-	const void *data;
+typedef __u64 Elf64_Addr;
+
+typedef __u16 Elf64_Half;
+
+typedef __u32 Elf64_Word;
+
+typedef __u64 Elf64_Xword;
+
+struct elf64_sym {
+	Elf64_Word st_name;
+	unsigned char st_info;
+	unsigned char st_other;
+	Elf64_Half st_shndx;
+	Elf64_Addr st_value;
+	Elf64_Xword st_size;
 };
 
-typedef long unsigned int kernel_ulong_t;
+struct kparam_string;
 
-struct acpi_device_id {
-	__u8 id[9];
-	kernel_ulong_t driver_data;
-	__u32 cls;
-	__u32 cls_msk;
+struct kparam_array;
+
+struct kernel_param {
+	const char *name;
+	struct module *mod;
+	const struct kernel_param_ops *ops;
+	const u16 perm;
+	s8 level;
+	u8 flags;
+	union {
+		void *arg;
+		const struct kparam_string *str;
+		const struct kparam_array *arr;
+	};
+};
+
+struct kparam_string {
+	unsigned int maxlen;
+	char *string;
+};
+
+struct kparam_array {
+	unsigned int max;
+	unsigned int elemsize;
+	unsigned int *num;
+	const struct kernel_param_ops *ops;
+	void *elem;
+};
+
+struct plt_entry {
+	u32 inst_lu12iw;
+	u32 inst_lu32id;
+	u32 inst_lu52id;
+	u32 inst_jirl;
+};
+
+struct module_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
+	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
+	void (*setup)(struct module *, const char *);
+	int (*test)(struct module *);
+	void (*free)(struct module *);
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct trace_event_class;
+
+struct event_filter;
+
+struct perf_event;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head *perf_events;
+	struct bpf_prog_array *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	long unsigned int eval_value;
 };
 
 struct device_dma_parameters {
 	unsigned int max_segment_size;
+	unsigned int min_align_mask;
 	long unsigned int segment_boundary_mask;
 };
 
-enum irq_domain_bus_token {
-	DOMAIN_BUS_ANY = 0,
-	DOMAIN_BUS_WIRED = 1,
-	DOMAIN_BUS_GENERIC_MSI = 2,
-	DOMAIN_BUS_PCI_MSI = 3,
-	DOMAIN_BUS_PLATFORM_MSI = 4,
-	DOMAIN_BUS_NEXUS = 5,
-	DOMAIN_BUS_IPI = 6,
-	DOMAIN_BUS_FSL_MC_MSI = 7,
-	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
-	DOMAIN_BUS_WAKEUP = 9,
-	DOMAIN_BUS_VMD_MSI = 10,
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
 };
 
-struct irq_domain_ops;
-
-struct irq_domain_chip_generic;
-
-struct irq_domain {
-	struct list_head link;
-	const char *name;
-	const struct irq_domain_ops *ops;
-	void *host_data;
-	unsigned int flags;
-	unsigned int mapcount;
-	struct fwnode_handle *fwnode;
-	enum irq_domain_bus_token bus_token;
-	struct irq_domain_chip_generic *gc;
-	struct irq_domain *parent;
-	irq_hw_number_t hwirq_max;
-	unsigned int revmap_direct_max_irq;
-	unsigned int revmap_size;
-	struct xarray revmap_tree;
-	struct mutex revmap_tree_mutex;
-	unsigned int linear_revmap[0];
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
 };
 
-enum dma_data_direction {
-	DMA_BIDIRECTIONAL = 0,
-	DMA_TO_DEVICE = 1,
-	DMA_FROM_DEVICE = 2,
-	DMA_NONE = 3,
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
 };
 
-struct sg_table;
-
-struct scatterlist;
-
-struct dma_map_ops {
-	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
-	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
-	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
-	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
-	void * (*alloc_noncoherent)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
-	void (*free_noncoherent)(struct device *, size_t, void *, dma_addr_t, enum dma_data_direction);
-	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
-	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
-	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
-	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
-	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
-	int (*dma_supported)(struct device *, u64);
-	u64 (*get_required_mask)(struct device *);
-	size_t (*max_mapping_size)(struct device *);
-	long unsigned int (*get_merge_boundary)(struct device *);
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
 };
 
+typedef u64 dma_addr_t;
+
 struct bus_dma_region {
 	phys_addr_t cpu_start;
 	dma_addr_t dma_start;
@@ -5979,322 +5172,266 @@
 	u64 offset;
 };
 
-typedef u32 phandle;
+typedef void *mempool_alloc_t(gfp_t, void *);
 
-struct fwnode_operations;
+typedef void mempool_free_t(void *, void *);
 
-struct fwnode_handle {
-	struct fwnode_handle *secondary;
-	const struct fwnode_operations *ops;
-	struct device *dev;
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
 };
 
-struct property;
+typedef struct mempool_s mempool_t;
 
-struct device_node {
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	mempool_t bio_integrity_pool;
+	mempool_t bvec_integrity_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct cdrom_device_info;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	short unsigned int events;
+	short unsigned int event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	long unsigned int state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject queue_kobj;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	struct kobject integrity_kobj;
+	unsigned int nr_zones;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	struct cdrom_device_info *cdi;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	struct blk_independent_access_ranges *ia_ranges;
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	short unsigned int bip_vcnt;
+	short unsigned int bip_max_vcnt;
+	short unsigned int bip_flags;
+	struct bvec_iter bio_iter;
+	short: 16;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+} __attribute__((packed));
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct iovec {
+	void *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+struct blk_integrity_iter;
+
+typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+
+typedef void integrity_prepare_fn(struct request *);
+
+typedef void integrity_complete_fn(struct request *, unsigned int);
+
+struct blk_integrity_profile {
+	integrity_processing_fn *generate_fn;
+	integrity_processing_fn *verify_fn;
+	integrity_prepare_fn *prepare_fn;
+	integrity_complete_fn *complete_fn;
 	const char *name;
-	phandle phandle;
-	const char *full_name;
-	struct fwnode_handle fwnode;
-	struct property *properties;
-	struct property *deadprops;
-	struct device_node *parent;
-	struct device_node *child;
-	struct device_node *sibling;
+};
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct block_device *, fmode_t);
+	void (*release)(struct gendisk *, fmode_t);
+	int (*rw_page)(struct block_device *, sector_t, struct page *, enum req_op);
+	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+};
+
+struct blk_independent_access_range {
 	struct kobject kobj;
-	long unsigned int _flags;
-	void *data;
+	sector_t sector;
+	sector_t nr_sectors;
 };
 
-enum cpuhp_state {
-	CPUHP_INVALID = 4294967295,
-	CPUHP_OFFLINE = 0,
-	CPUHP_CREATE_THREADS = 1,
-	CPUHP_PERF_PREPARE = 2,
-	CPUHP_PERF_X86_PREPARE = 3,
-	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
-	CPUHP_PERF_POWER = 5,
-	CPUHP_PERF_SUPERH = 6,
-	CPUHP_X86_HPET_DEAD = 7,
-	CPUHP_X86_APB_DEAD = 8,
-	CPUHP_X86_MCE_DEAD = 9,
-	CPUHP_VIRT_NET_DEAD = 10,
-	CPUHP_SLUB_DEAD = 11,
-	CPUHP_DEBUG_OBJ_DEAD = 12,
-	CPUHP_MM_WRITEBACK_DEAD = 13,
-	CPUHP_MM_VMSTAT_DEAD = 14,
-	CPUHP_SOFTIRQ_DEAD = 15,
-	CPUHP_NET_MVNETA_DEAD = 16,
-	CPUHP_CPUIDLE_DEAD = 17,
-	CPUHP_ARM64_FPSIMD_DEAD = 18,
-	CPUHP_ARM_OMAP_WAKE_DEAD = 19,
-	CPUHP_IRQ_POLL_DEAD = 20,
-	CPUHP_BLOCK_SOFTIRQ_DEAD = 21,
-	CPUHP_ACPI_CPUDRV_DEAD = 22,
-	CPUHP_S390_PFAULT_DEAD = 23,
-	CPUHP_BLK_MQ_DEAD = 24,
-	CPUHP_FS_BUFF_DEAD = 25,
-	CPUHP_PRINTK_DEAD = 26,
-	CPUHP_MM_MEMCQ_DEAD = 27,
-	CPUHP_PERCPU_CNT_DEAD = 28,
-	CPUHP_RADIX_DEAD = 29,
-	CPUHP_PAGE_ALLOC_DEAD = 30,
-	CPUHP_NET_DEV_DEAD = 31,
-	CPUHP_PCI_XGENE_DEAD = 32,
-	CPUHP_IOMMU_INTEL_DEAD = 33,
-	CPUHP_LUSTRE_CFS_DEAD = 34,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,
-	CPUHP_PADATA_DEAD = 36,
-	CPUHP_WORKQUEUE_PREP = 37,
-	CPUHP_POWER_NUMA_PREPARE = 38,
-	CPUHP_HRTIMERS_PREPARE = 39,
-	CPUHP_PROFILE_PREPARE = 40,
-	CPUHP_X2APIC_PREPARE = 41,
-	CPUHP_SMPCFD_PREPARE = 42,
-	CPUHP_RELAY_PREPARE = 43,
-	CPUHP_SLAB_PREPARE = 44,
-	CPUHP_MD_RAID5_PREPARE = 45,
-	CPUHP_RCUTREE_PREP = 46,
-	CPUHP_CPUIDLE_COUPLED_PREPARE = 47,
-	CPUHP_POWERPC_PMAC_PREPARE = 48,
-	CPUHP_POWERPC_MMU_CTX_PREPARE = 49,
-	CPUHP_XEN_PREPARE = 50,
-	CPUHP_XEN_EVTCHN_PREPARE = 51,
-	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,
-	CPUHP_SH_SH3X_PREPARE = 53,
-	CPUHP_NET_FLOW_PREPARE = 54,
-	CPUHP_TOPOLOGY_PREPARE = 55,
-	CPUHP_NET_IUCV_PREPARE = 56,
-	CPUHP_ARM_BL_PREPARE = 57,
-	CPUHP_TRACE_RB_PREPARE = 58,
-	CPUHP_MM_ZS_PREPARE = 59,
-	CPUHP_MM_ZSWP_MEM_PREPARE = 60,
-	CPUHP_MM_ZSWP_POOL_PREPARE = 61,
-	CPUHP_KVM_PPC_BOOK3S_PREPARE = 62,
-	CPUHP_ZCOMP_PREPARE = 63,
-	CPUHP_TIMERS_PREPARE = 64,
-	CPUHP_MIPS_SOC_PREPARE = 65,
-	CPUHP_BP_PREPARE_DYN = 66,
-	CPUHP_BP_PREPARE_DYN_END = 86,
-	CPUHP_BRINGUP_CPU = 87,
-	CPUHP_AP_IDLE_DEAD = 88,
-	CPUHP_AP_OFFLINE = 89,
-	CPUHP_AP_SCHED_STARTING = 90,
-	CPUHP_AP_RCUTREE_DYING = 91,
-	CPUHP_AP_CPU_PM_STARTING = 92,
-	CPUHP_AP_IRQ_GIC_STARTING = 93,
-	CPUHP_AP_IRQ_HIP04_STARTING = 94,
-	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 95,
-	CPUHP_AP_IRQ_BCM2836_STARTING = 96,
-	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 97,
-	CPUHP_AP_IRQ_RISCV_STARTING = 98,
-	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 99,
-	CPUHP_AP_ARM_MVEBU_COHERENCY = 100,
-	CPUHP_AP_MICROCODE_LOADER = 101,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 102,
-	CPUHP_AP_PERF_X86_STARTING = 103,
-	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 104,
-	CPUHP_AP_PERF_X86_CQM_STARTING = 105,
-	CPUHP_AP_PERF_X86_CSTATE_STARTING = 106,
-	CPUHP_AP_PERF_XTENSA_STARTING = 107,
-	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 108,
-	CPUHP_AP_ARM_SDEI_STARTING = 109,
-	CPUHP_AP_ARM_VFP_STARTING = 110,
-	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,
-	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,
-	CPUHP_AP_PERF_ARM_ACPI_STARTING = 113,
-	CPUHP_AP_PERF_ARM_STARTING = 114,
-	CPUHP_AP_ARM_L2X0_STARTING = 115,
-	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 116,
-	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 117,
-	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 118,
-	CPUHP_AP_JCORE_TIMER_STARTING = 119,
-	CPUHP_AP_ARM_TWD_STARTING = 120,
-	CPUHP_AP_QCOM_TIMER_STARTING = 121,
-	CPUHP_AP_TEGRA_TIMER_STARTING = 122,
-	CPUHP_AP_ARMADA_TIMER_STARTING = 123,
-	CPUHP_AP_MARCO_TIMER_STARTING = 124,
-	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 125,
-	CPUHP_AP_ARC_TIMER_STARTING = 126,
-	CPUHP_AP_RISCV_TIMER_STARTING = 127,
-	CPUHP_AP_CLINT_TIMER_STARTING = 128,
-	CPUHP_AP_CSKY_TIMER_STARTING = 129,
-	CPUHP_AP_HYPERV_TIMER_STARTING = 130,
-	CPUHP_AP_KVM_STARTING = 131,
-	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 132,
-	CPUHP_AP_KVM_ARM_VGIC_STARTING = 133,
-	CPUHP_AP_KVM_ARM_TIMER_STARTING = 134,
-	CPUHP_AP_DUMMY_TIMER_STARTING = 135,
-	CPUHP_AP_ARM_XEN_STARTING = 136,
-	CPUHP_AP_ARM_CORESIGHT_STARTING = 137,
-	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,
-	CPUHP_AP_ARM64_ISNDEP_STARTING = 139,
-	CPUHP_AP_SMPCFD_DYING = 140,
-	CPUHP_AP_X86_TBOOT_DYING = 141,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 142,
-	CPUHP_AP_ONLINE = 143,
-	CPUHP_TEARDOWN_CPU = 144,
-	CPUHP_AP_ONLINE_IDLE = 145,
-	CPUHP_AP_SMPBOOT_THREADS = 146,
-	CPUHP_AP_X86_VDSO_VMA_ONLINE = 147,
-	CPUHP_AP_IRQ_AFFINITY_ONLINE = 148,
-	CPUHP_AP_BLK_MQ_ONLINE = 149,
-	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 150,
-	CPUHP_AP_X86_INTEL_EPB_ONLINE = 151,
-	CPUHP_AP_PERF_ONLINE = 152,
-	CPUHP_AP_PERF_X86_ONLINE = 153,
-	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 154,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 155,
-	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 156,
-	CPUHP_AP_PERF_X86_RAPL_ONLINE = 157,
-	CPUHP_AP_PERF_X86_CQM_ONLINE = 158,
-	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 159,
-	CPUHP_AP_PERF_S390_CF_ONLINE = 160,
-	CPUHP_AP_PERF_S390_SF_ONLINE = 161,
-	CPUHP_AP_PERF_ARM_CCI_ONLINE = 162,
-	CPUHP_AP_PERF_ARM_CCN_ONLINE = 163,
-	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 164,
-	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 165,
-	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 166,
-	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 167,
-	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 168,
-	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 169,
-	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 170,
-	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 171,
-	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 172,
-	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 173,
-	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 174,
-	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 175,
-	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 176,
-	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 177,
-	CPUHP_AP_WATCHDOG_ONLINE = 178,
-	CPUHP_AP_WORKQUEUE_ONLINE = 179,
-	CPUHP_AP_RCUTREE_ONLINE = 180,
-	CPUHP_AP_BASE_CACHEINFO_ONLINE = 181,
-	CPUHP_AP_ONLINE_DYN = 182,
-	CPUHP_AP_ONLINE_DYN_END = 212,
-	CPUHP_AP_X86_HPET_ONLINE = 213,
-	CPUHP_AP_X86_KVM_CLK_ONLINE = 214,
-	CPUHP_AP_ACTIVE = 215,
-	CPUHP_ONLINE = 216,
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
 };
 
-typedef void percpu_ref_func_t(struct percpu_ref *);
-
-struct percpu_ref_data {
-	atomic_long_t count;
-	percpu_ref_func_t *release;
-	percpu_ref_func_t *confirm_switch;
-	bool force_atomic: 1;
-	bool allow_reinit: 1;
-	struct callback_head rcu;
-	struct percpu_ref *ref;
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
 };
 
-struct dev_pagemap_ops {
-	void (*page_free)(struct page *);
-	void (*kill)(struct dev_pagemap *);
-	void (*cleanup)(struct dev_pagemap *);
-	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	void (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
 };
 
-enum vm_event_item {
-	PGPGIN = 0,
-	PGPGOUT = 1,
-	PSWPIN = 2,
-	PSWPOUT = 3,
-	PGALLOC_DMA = 4,
-	PGALLOC_DMA32 = 5,
-	PGALLOC_NORMAL = 6,
-	PGALLOC_MOVABLE = 7,
-	ALLOCSTALL_DMA = 8,
-	ALLOCSTALL_DMA32 = 9,
-	ALLOCSTALL_NORMAL = 10,
-	ALLOCSTALL_MOVABLE = 11,
-	PGSCAN_SKIP_DMA = 12,
-	PGSCAN_SKIP_DMA32 = 13,
-	PGSCAN_SKIP_NORMAL = 14,
-	PGSCAN_SKIP_MOVABLE = 15,
-	PGFREE = 16,
-	PGACTIVATE = 17,
-	PGDEACTIVATE = 18,
-	PGLAZYFREE = 19,
-	PGFAULT = 20,
-	PGMAJFAULT = 21,
-	PGLAZYFREED = 22,
-	PGREFILL = 23,
-	PGREUSE = 24,
-	PGSTEAL_KSWAPD = 25,
-	PGSTEAL_DIRECT = 26,
-	PGSCAN_KSWAPD = 27,
-	PGSCAN_DIRECT = 28,
-	PGSCAN_DIRECT_THROTTLE = 29,
-	PGSCAN_ANON = 30,
-	PGSCAN_FILE = 31,
-	PGSTEAL_ANON = 32,
-	PGSTEAL_FILE = 33,
-	PGSCAN_ZONE_RECLAIM_FAILED = 34,
-	PGINODESTEAL = 35,
-	SLABS_SCANNED = 36,
-	KSWAPD_INODESTEAL = 37,
-	KSWAPD_LOW_WMARK_HIT_QUICKLY = 38,
-	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 39,
-	PAGEOUTRUN = 40,
-	PGROTATED = 41,
-	DROP_PAGECACHE = 42,
-	DROP_SLAB = 43,
-	OOM_KILL = 44,
-	NUMA_PTE_UPDATES = 45,
-	NUMA_HUGE_PTE_UPDATES = 46,
-	NUMA_HINT_FAULTS = 47,
-	NUMA_HINT_FAULTS_LOCAL = 48,
-	NUMA_PAGE_MIGRATE = 49,
-	PGMIGRATE_SUCCESS = 50,
-	PGMIGRATE_FAIL = 51,
-	THP_MIGRATION_SUCCESS = 52,
-	THP_MIGRATION_FAIL = 53,
-	THP_MIGRATION_SPLIT = 54,
-	COMPACTMIGRATE_SCANNED = 55,
-	COMPACTFREE_SCANNED = 56,
-	COMPACTISOLATED = 57,
-	COMPACTSTALL = 58,
-	COMPACTFAIL = 59,
-	COMPACTSUCCESS = 60,
-	KCOMPACTD_WAKE = 61,
-	KCOMPACTD_MIGRATE_SCANNED = 62,
-	KCOMPACTD_FREE_SCANNED = 63,
-	HTLB_BUDDY_PGALLOC = 64,
-	HTLB_BUDDY_PGALLOC_FAIL = 65,
-	UNEVICTABLE_PGCULLED = 66,
-	UNEVICTABLE_PGSCANNED = 67,
-	UNEVICTABLE_PGRESCUED = 68,
-	UNEVICTABLE_PGMLOCKED = 69,
-	UNEVICTABLE_PGMUNLOCKED = 70,
-	UNEVICTABLE_PGCLEARED = 71,
-	UNEVICTABLE_PGSTRANDED = 72,
-	THP_FAULT_ALLOC = 73,
-	THP_FAULT_FALLBACK = 74,
-	THP_FAULT_FALLBACK_CHARGE = 75,
-	THP_COLLAPSE_ALLOC = 76,
-	THP_COLLAPSE_ALLOC_FAILED = 77,
-	THP_FILE_ALLOC = 78,
-	THP_FILE_FALLBACK = 79,
-	THP_FILE_FALLBACK_CHARGE = 80,
-	THP_FILE_MAPPED = 81,
-	THP_SPLIT_PAGE = 82,
-	THP_SPLIT_PAGE_FAILED = 83,
-	THP_DEFERRED_SPLIT_PAGE = 84,
-	THP_SPLIT_PMD = 85,
-	THP_ZERO_PAGE_ALLOC = 86,
-	THP_ZERO_PAGE_ALLOC_FAILED = 87,
-	THP_SWPOUT = 88,
-	THP_SWPOUT_FALLBACK = 89,
-	BALLOON_INFLATE = 90,
-	BALLOON_DEFLATE = 91,
-	BALLOON_MIGRATE = 92,
-	SWAP_RA = 93,
-	SWAP_RA_HIT = 94,
-	NR_VM_EVENT_ITEMS = 95,
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
 };
 
 struct seq_operations {
@@ -6304,12 +5441,6 @@
 	int (*show)(struct seq_file *, void *);
 };
 
-struct ring_buffer_event {
-	u32 type_len: 5;
-	u32 time_delta: 27;
-	u32 array[0];
-};
-
 struct seq_buf {
 	char *buffer;
 	size_t size;
@@ -6318,7 +5449,7 @@
 };
 
 struct trace_seq {
-	char buffer[4096];
+	char buffer[16384];
 	struct seq_buf seq;
 	int full;
 };
@@ -6335,7 +5466,86 @@
 	PERF_COUNT_SW_EMULATION_FAULTS = 8,
 	PERF_COUNT_SW_DUMMY = 9,
 	PERF_COUNT_SW_BPF_OUTPUT = 10,
-	PERF_COUNT_SW_MAX = 11,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
 };
 
 union perf_mem_data_src {
@@ -6349,7 +5559,9 @@
 		__u64 mem_lvl_num: 4;
 		__u64 mem_remote: 1;
 		__u64 mem_snoopx: 2;
-		__u64 mem_rsvd: 24;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
 	};
 };
 
@@ -6362,40 +5574,29 @@
 	__u64 abort: 1;
 	__u64 cycles: 16;
 	__u64 type: 4;
-	__u64 reserved: 40;
+	__u64 spec: 2;
+	__u64 new_type: 4;
+	__u64 priv: 3;
+	__u64 reserved: 31;
 };
 
-struct new_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-	char domainname[65];
-};
-
-struct uts_namespace {
-	struct kref kref;
-	struct new_utsname name;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
 };
 
 struct cgroup_namespace {
-	refcount_t count;
 	struct ns_common ns;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct css_set *root_cset;
 };
 
-struct nsset {
-	unsigned int flags;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	const struct cred *cred;
-};
+struct nsset;
 
 struct proc_ns_operations {
 	const char *name;
@@ -6408,22 +5609,53 @@
 	struct ns_common * (*get_parent)(struct ns_common *);
 };
 
-struct ucounts {
-	struct hlist_node node;
-	struct user_namespace *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[10];
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct ftrace_regs {
+	struct pt_regs regs;
 };
 
-struct iovec {
-	void *iov_base;
-	__kernel_size_t iov_len;
+struct ftrace_ops;
+
+typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);
+
+struct ftrace_hash;
+
+struct ftrace_ops_hash {
+	struct ftrace_hash *notrace_hash;
+	struct ftrace_hash *filter_hash;
+	struct mutex regex_lock;
 };
 
-struct kvec {
-	void *iov_base;
-	size_t iov_len;
+enum ftrace_ops_cmd {
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_SELF = 0,
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER = 1,
+	FTRACE_OPS_CMD_DISABLE_SHARE_IPMODIFY_PEER = 2,
+};
+
+typedef int (*ftrace_ops_func_t)(struct ftrace_ops *, enum ftrace_ops_cmd);
+
+struct ftrace_ops {
+	ftrace_func_t func;
+	struct ftrace_ops *next;
+	long unsigned int flags;
+	void *private;
+	ftrace_func_t saved_func;
+	struct ftrace_ops_hash local_hash;
+	struct ftrace_ops_hash *func_hash;
+	struct ftrace_ops_hash old_hash;
+	long unsigned int trampoline;
+	long unsigned int trampoline_size;
+	struct list_head list;
+	ftrace_ops_func_t ops_func;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
 };
 
 struct perf_regs {
@@ -6433,56 +5665,7 @@
 
 struct u64_stats_sync {};
 
-struct bpf_cgroup_storage_key {
-	__u64 cgroup_inode_id;
-	__u32 attach_type;
-};
-
-struct bpf_cgroup_storage;
-
-struct bpf_prog_array_item {
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_storage_buffer;
-
-struct bpf_cgroup_storage_map;
-
-struct bpf_cgroup_storage {
-	union {
-		struct bpf_storage_buffer *buf;
-		void *percpu_buf;
-	};
-	struct bpf_cgroup_storage_map *map;
-	struct bpf_cgroup_storage_key key;
-	struct list_head list_map;
-	struct list_head list_cg;
-	struct rb_node node;
-	struct callback_head rcu;
-};
-
-struct bpf_prog_array {
-	struct callback_head rcu;
-	struct bpf_prog_array_item items[0];
-};
-
-struct bpf_storage_buffer {
-	struct callback_head rcu;
-	char data[0];
-};
-
-struct psi_group_cpu {
-	seqcount_t seq;
-	unsigned int tasks[4];
-	u32 state_mask;
-	u32 times[6];
-	u64 state_start;
-	long: 64;
-	u32 times_prev[12];
-	long: 64;
-	long: 64;
-};
+struct psi_group {};
 
 struct cgroup_taskset;
 
@@ -6510,8 +5693,6 @@
 	bool early_init: 1;
 	bool implicit_on_dfl: 1;
 	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
 	int id;
 	const char *name;
 	const char *legacy_name;
@@ -6536,7 +5717,7 @@
 	unsigned int subsys_mask;
 	int hierarchy_id;
 	struct cgroup cgrp;
-	u64 cgrp_ancestor_id_storage;
+	struct cgroup *cgrp_ancestor_storage;
 	atomic_t nr_cgrps;
 	struct list_head root_list;
 	unsigned int flags;
@@ -6567,13 +5748,6 @@
 	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
 };
 
-enum kmalloc_cache_type {
-	KMALLOC_NORMAL = 0,
-	KMALLOC_RECLAIM = 1,
-	KMALLOC_DMA = 2,
-	NR_KMALLOC_TYPES = 3,
-};
-
 struct perf_callchain_entry {
 	__u64 nr;
 	__u64 ip[0];
@@ -6602,7 +5776,70 @@
 	struct perf_branch_entry entries[0];
 };
 
-struct perf_cpu_context;
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			long unsigned int config_base;
+			long unsigned int event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	long unsigned int addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct perf_cpu_pmu_context;
+
+struct perf_event_pmu_context;
 
 struct perf_output_handle;
 
@@ -6616,7 +5853,7 @@
 	int type;
 	int capabilities;
 	int *pmu_disable_count;
-	struct perf_cpu_context *pmu_cpu_context;
+	struct perf_cpu_pmu_context *cpu_pmu_context;
 	atomic_t exclusive_cnt;
 	int task_ctx_nr;
 	int hrtimer_interval_ms;
@@ -6635,35 +5872,150 @@
 	int (*commit_txn)(struct pmu *);
 	void (*cancel_txn)(struct pmu *);
 	int (*event_idx)(struct perf_event *);
-	void (*sched_task)(struct perf_event_context *, bool);
+	void (*sched_task)(struct perf_event_pmu_context *, bool);
 	struct kmem_cache *task_ctx_cache;
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
+	void (*swap_task_ctx)(struct perf_event_pmu_context *, struct perf_event_pmu_context *);
 	void * (*setup_aux)(struct perf_event *, void **, int, bool);
 	void (*free_aux)(void *);
 	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
 	int (*addr_filters_validate)(struct list_head *);
 	void (*addr_filters_sync)(struct perf_event *);
 	int (*aux_output_match)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
+	bool (*filter)(struct pmu *, int);
 	int (*check_period)(struct perf_event *, u64);
 };
 
-struct perf_cpu_context {
-	struct perf_event_context ctx;
-	struct perf_event_context *task_ctx;
+struct perf_event_pmu_context {
+	struct pmu *pmu;
+	struct perf_event_context *ctx;
+	struct list_head pmu_ctx_entry;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	unsigned int embedded: 1;
+	unsigned int nr_events;
+	atomic_t refcount;
+	struct callback_head callback_head;
+	void *task_ctx_data;
+	int rotate_necessary;
+};
+
+struct perf_cpu_pmu_context {
+	struct perf_event_pmu_context epc;
+	struct perf_event_pmu_context *task_epc;
+	struct list_head sched_cb_entry;
+	int sched_cb_usage;
 	int active_oncpu;
 	int exclusive;
 	raw_spinlock_t hrtimer_lock;
 	struct hrtimer hrtimer;
 	ktime_t hrtimer_interval;
 	unsigned int hrtimer_active;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = -4,
+	PERF_EVENT_STATE_EXIT = -3,
+	PERF_EVENT_STATE_ERROR = -2,
+	PERF_EVENT_STATE_OFF = -1,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct perf_buffer;
+
+struct perf_addr_filter_range;
+
+struct bpf_prog;
+
+struct perf_cgroup;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	struct perf_event_pmu_context *pmu_ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	long unsigned int rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	unsigned int pending_wakeup;
+	unsigned int pending_kill;
+	unsigned int pending_disable;
+	unsigned int pending_sigtrap;
+	long unsigned int pending_addr;
+	struct irq_work pending_irq;
+	struct callback_head pending_task;
+	unsigned int pending_work;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	long unsigned int addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	struct ftrace_ops ftrace_ops;
 	struct perf_cgroup *cgrp;
-	struct list_head cgrp_cpuctx_entry;
-	int sched_cb_usage;
-	int online;
-	int heap_size;
-	struct perf_event **heap;
-	struct perf_event *heap_default[2];
+	void *security;
+	struct list_head sb_list;
 };
 
 struct perf_output_handle {
@@ -6685,13 +6037,14 @@
 };
 
 struct perf_sample_data {
+	u64 sample_flags;
+	u64 period;
+	struct perf_branch_stack *br_stack;
+	union perf_sample_weight weight;
+	union perf_mem_data_src data_src;
+	u64 txn;
 	u64 addr;
 	struct perf_raw_record *raw;
-	struct perf_branch_stack *br_stack;
-	u64 period;
-	u64 weight;
-	u64 txn;
-	union perf_mem_data_src data_src;
 	u64 type;
 	u64 ip;
 	struct {
@@ -6712,6 +6065,13 @@
 	u64 stack_user_size;
 	u64 phys_addr;
 	u64 cgroup;
+	u64 data_page_size;
+	u64 code_page_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 };
 
@@ -6725,6 +6085,8 @@
 struct perf_cgroup_info {
 	u64 time;
 	u64 timestamp;
+	u64 timeoffset;
+	int active;
 };
 
 struct trace_entry {
@@ -6753,6 +6115,9 @@
 	long unsigned int iter_flags;
 	void *temp;
 	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
+	long int wait_index;
 	struct trace_seq tmp_seq;
 	cpumask_var_t started;
 	bool snapshot;
@@ -6819,53 +6184,17 @@
 	int (*raw_init)(struct trace_event_call *);
 };
 
-struct trace_buffer;
-
-struct trace_event_file;
-
-struct trace_event_buffer {
-	struct trace_buffer *buffer;
-	struct ring_buffer_event *event;
-	struct trace_event_file *trace_file;
-	void *entry;
-	long unsigned int flags;
-	int pc;
-	struct pt_regs *regs;
-};
-
-struct trace_subsystem_dir;
-
-struct trace_event_file {
-	struct list_head list;
-	struct trace_event_call *event_call;
-	struct event_filter *filter;
-	struct dentry *dir;
-	struct trace_array *tr;
-	struct trace_subsystem_dir *system;
-	struct list_head triggers;
-	long unsigned int flags;
-	atomic_t sm_ref;
-	atomic_t tm_ref;
-};
-
 enum {
 	TRACE_EVENT_FL_FILTERED_BIT = 0,
 	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
 	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
 	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
 	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
-	TRACE_EVENT_FL_KPROBE_BIT = 5,
-	TRACE_EVENT_FL_UPROBE_BIT = 6,
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED = 1,
-	TRACE_EVENT_FL_CAP_ANY = 2,
-	TRACE_EVENT_FL_NO_SET_FILTER = 4,
-	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
-	TRACE_EVENT_FL_TRACEPOINT = 16,
-	TRACE_EVENT_FL_KPROBE = 32,
-	TRACE_EVENT_FL_UPROBE = 64,
+	TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+	TRACE_EVENT_FL_KPROBE_BIT = 6,
+	TRACE_EVENT_FL_UPROBE_BIT = 7,
+	TRACE_EVENT_FL_EPROBE_BIT = 8,
+	TRACE_EVENT_FL_CUSTOM_BIT = 9,
 };
 
 enum {
@@ -6883,101 +6212,1322 @@
 };
 
 enum {
-	EVENT_FILE_FL_ENABLED = 1,
-	EVENT_FILE_FL_RECORDED_CMD = 2,
-	EVENT_FILE_FL_RECORDED_TGID = 4,
-	EVENT_FILE_FL_FILTERED = 8,
-	EVENT_FILE_FL_NO_SET_FILTER = 16,
-	EVENT_FILE_FL_SOFT_MODE = 32,
-	EVENT_FILE_FL_SOFT_DISABLED = 64,
-	EVENT_FILE_FL_TRIGGER_MODE = 128,
-	EVENT_FILE_FL_TRIGGER_COND = 256,
-	EVENT_FILE_FL_PID_FILTER = 512,
-	EVENT_FILE_FL_WAS_ENABLED = 1024,
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_RAM0 = 1048576,
+	Root_RAM1 = 1048577,
+	Root_FD0 = 2097152,
+	Root_HDA1 = 3145729,
+	Root_HDA2 = 3145730,
+	Root_SDA1 = 8388609,
+	Root_SDA2 = 8388610,
+	Root_HDC1 = 23068673,
+	Root_SR0 = 11534336,
+};
+
+typedef phys_addr_t resource_size_t;
+
+typedef void *va_list;
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int class_id: 6;
+	unsigned int flags: 8;
+};
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	long unsigned int flags;
+	long unsigned int desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+};
+
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_DMA = 0,
+	KMALLOC_RECLAIM = 1,
+	KMALLOC_CGROUP = 2,
+	NR_KMALLOC_TYPES = 3,
+};
+
+typedef u64 async_cookie_t;
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+struct dir_entry {
+	struct list_head list;
+	time64_t mtime;
+	char name[0];
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+enum cpu_type_enum {
+	CPU_UNKNOWN = 0,
+	CPU_LOONGSON32 = 1,
+	CPU_LOONGSON64 = 2,
+	CPU_LAST = 3,
+};
+
+struct cache_desc {
+	unsigned char type;
+	unsigned char level;
+	short unsigned int sets;
+	unsigned char ways;
+	unsigned char linesz;
+	unsigned char flags;
+};
+
+struct cpuinfo_loongarch {
+	u64 asid_cache;
+	long unsigned int asid_mask;
+	long long unsigned int options;
+	unsigned int processor_id;
+	unsigned int fpu_vers;
+	unsigned int fpu_csr0;
+	unsigned int fpu_mask;
+	unsigned int cputype;
+	int isa_level;
+	int tlbsize;
+	int tlbsizemtlb;
+	int tlbsizestlbsets;
+	int tlbsizestlbways;
+	int cache_leaves_present;
+	struct cache_desc cache_leaves[6];
+	int core;
+	int package;
+	int vabits;
+	int pabits;
+	unsigned int ksave_mask;
+	unsigned int watch_dreg_count;
+	unsigned int watch_ireg_count;
+	unsigned int watch_reg_use_cnt;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
 };
 
 enum {
-	FILTER_OTHER = 0,
-	FILTER_STATIC_STRING = 1,
-	FILTER_DYN_STRING = 2,
-	FILTER_PTR_STRING = 3,
-	FILTER_TRACE_FN = 4,
-	FILTER_COMM = 5,
-	FILTER_CPU = 6,
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
 };
 
-struct fwnode_reference_args;
-
-struct fwnode_endpoint;
-
-struct fwnode_operations {
-	struct fwnode_handle * (*get)(struct fwnode_handle *);
-	void (*put)(struct fwnode_handle *);
-	bool (*device_is_available)(const struct fwnode_handle *);
-	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
-	bool (*property_present)(const struct fwnode_handle *, const char *);
-	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
-	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
-	const char * (*get_name)(const struct fwnode_handle *);
-	const char * (*get_name_prefix)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
-	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
-	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
-	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
-	int (*add_links)(const struct fwnode_handle *, struct device *);
+enum rseq_cs_flags_bit {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
 };
 
-struct fwnode_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct fwnode_handle *local_fwnode;
+enum {
+	TASK_COMM_LEN = 16,
 };
 
-struct fwnode_reference_args {
+enum rseq_event_mask_bits {
+	RSEQ_EVENT_PREEMPT_BIT = 0,
+	RSEQ_EVENT_SIGNAL_BIT = 1,
+	RSEQ_EVENT_MIGRATE_BIT = 2,
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_PCPTYPES = 3,
+	MIGRATE_HIGHATOMIC = 3,
+	MIGRATE_CMA = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
+};
+
+enum numa_stat_item {
+	NUMA_HIT = 0,
+	NUMA_MISS = 1,
+	NUMA_FOREIGN = 2,
+	NUMA_INTERLEAVE_HIT = 3,
+	NUMA_LOCAL = 4,
+	NUMA_OTHER = 5,
+	NR_VM_NUMA_EVENT_ITEMS = 6,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
+};
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SECONDARY_PAGETABLE = 39,
+	NR_SWAPCACHE = 40,
+	PGPROMOTE_SUCCESS = 41,
+	PGPROMOTE_CANDIDATE = 42,
+	NR_VM_NODE_STAT_ITEMS = 43,
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	ZONELIST_NOFALLBACK = 1,
+	MAX_ZONELISTS = 2,
+};
+
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
+enum compound_dtor_id {
+	NULL_COMPOUND_DTOR = 0,
+	COMPOUND_PAGE_DTOR = 1,
+	HUGETLB_PAGE_DTOR = 2,
+	TRANSHUGE_PAGE_DTOR = 3,
+	NR_COMPOUND_DTORS = 4,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA32 = 4,
+	PGALLOC_NORMAL = 5,
+	PGALLOC_MOVABLE = 6,
+	ALLOCSTALL_DMA32 = 7,
+	ALLOCSTALL_NORMAL = 8,
+	ALLOCSTALL_MOVABLE = 9,
+	PGSCAN_SKIP_DMA32 = 10,
+	PGSCAN_SKIP_NORMAL = 11,
+	PGSCAN_SKIP_MOVABLE = 12,
+	PGFREE = 13,
+	PGACTIVATE = 14,
+	PGDEACTIVATE = 15,
+	PGLAZYFREE = 16,
+	PGFAULT = 17,
+	PGMAJFAULT = 18,
+	PGLAZYFREED = 19,
+	PGREFILL = 20,
+	PGREUSE = 21,
+	PGSTEAL_KSWAPD = 22,
+	PGSTEAL_DIRECT = 23,
+	PGSTEAL_KHUGEPAGED = 24,
+	PGDEMOTE_KSWAPD = 25,
+	PGDEMOTE_DIRECT = 26,
+	PGDEMOTE_KHUGEPAGED = 27,
+	PGSCAN_KSWAPD = 28,
+	PGSCAN_DIRECT = 29,
+	PGSCAN_KHUGEPAGED = 30,
+	PGSCAN_DIRECT_THROTTLE = 31,
+	PGSCAN_ANON = 32,
+	PGSCAN_FILE = 33,
+	PGSTEAL_ANON = 34,
+	PGSTEAL_FILE = 35,
+	PGSCAN_ZONE_RECLAIM_FAILED = 36,
+	PGINODESTEAL = 37,
+	SLABS_SCANNED = 38,
+	KSWAPD_INODESTEAL = 39,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 40,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 41,
+	PAGEOUTRUN = 42,
+	PGROTATED = 43,
+	DROP_PAGECACHE = 44,
+	DROP_SLAB = 45,
+	OOM_KILL = 46,
+	NUMA_PTE_UPDATES = 47,
+	NUMA_HUGE_PTE_UPDATES = 48,
+	NUMA_HINT_FAULTS = 49,
+	NUMA_HINT_FAULTS_LOCAL = 50,
+	NUMA_PAGE_MIGRATE = 51,
+	PGMIGRATE_SUCCESS = 52,
+	PGMIGRATE_FAIL = 53,
+	THP_MIGRATION_SUCCESS = 54,
+	THP_MIGRATION_FAIL = 55,
+	THP_MIGRATION_SPLIT = 56,
+	COMPACTMIGRATE_SCANNED = 57,
+	COMPACTFREE_SCANNED = 58,
+	COMPACTISOLATED = 59,
+	COMPACTSTALL = 60,
+	COMPACTFAIL = 61,
+	COMPACTSUCCESS = 62,
+	KCOMPACTD_WAKE = 63,
+	KCOMPACTD_MIGRATE_SCANNED = 64,
+	KCOMPACTD_FREE_SCANNED = 65,
+	HTLB_BUDDY_PGALLOC = 66,
+	HTLB_BUDDY_PGALLOC_FAIL = 67,
+	CMA_ALLOC_SUCCESS = 68,
+	CMA_ALLOC_FAIL = 69,
+	UNEVICTABLE_PGCULLED = 70,
+	UNEVICTABLE_PGSCANNED = 71,
+	UNEVICTABLE_PGRESCUED = 72,
+	UNEVICTABLE_PGMLOCKED = 73,
+	UNEVICTABLE_PGMUNLOCKED = 74,
+	UNEVICTABLE_PGCLEARED = 75,
+	UNEVICTABLE_PGSTRANDED = 76,
+	THP_FAULT_ALLOC = 77,
+	THP_FAULT_FALLBACK = 78,
+	THP_FAULT_FALLBACK_CHARGE = 79,
+	THP_COLLAPSE_ALLOC = 80,
+	THP_COLLAPSE_ALLOC_FAILED = 81,
+	THP_FILE_ALLOC = 82,
+	THP_FILE_FALLBACK = 83,
+	THP_FILE_FALLBACK_CHARGE = 84,
+	THP_FILE_MAPPED = 85,
+	THP_SPLIT_PAGE = 86,
+	THP_SPLIT_PAGE_FAILED = 87,
+	THP_DEFERRED_SPLIT_PAGE = 88,
+	THP_SPLIT_PMD = 89,
+	THP_SCAN_EXCEED_NONE_PTE = 90,
+	THP_SCAN_EXCEED_SWAP_PTE = 91,
+	THP_SCAN_EXCEED_SHARED_PTE = 92,
+	THP_ZERO_PAGE_ALLOC = 93,
+	THP_ZERO_PAGE_ALLOC_FAILED = 94,
+	THP_SWPOUT = 95,
+	THP_SWPOUT_FALLBACK = 96,
+	BALLOON_INFLATE = 97,
+	BALLOON_DEFLATE = 98,
+	BALLOON_MIGRATE = 99,
+	SWAP_RA = 100,
+	SWAP_RA_HIT = 101,
+	KSM_SWPIN_COPY = 102,
+	COW_KSM = 103,
+	ZSWPIN = 104,
+	ZSWPOUT = 105,
+	NR_VM_EVENT_ITEMS = 106,
+};
+
+typedef __u32 __be32;
+
+struct cacheline_padding {
+	char x[0];
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+struct free_area {
+	struct list_head free_list[6];
+	long unsigned int nr_free;
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	atomic_long_t nonresident_age;
+	long unsigned int refaults[2];
+	long unsigned int flags;
+	struct pglist_data *pgdat;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	long unsigned int _watermark[4];
+	long unsigned int watermark_boost;
+	long unsigned int nr_reserved_highatomic;
+	long int lowmem_reserve[3];
+	int node;
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages *per_cpu_pageset;
+	struct per_cpu_zonestat *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	long unsigned int zone_start_pfn;
+	atomic_long_t managed_pages;
+	long unsigned int spanned_pages;
+	long unsigned int present_pages;
+	long unsigned int present_early_pages;
+	long unsigned int cma_pages;
+	const char *name;
+	long unsigned int nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int initialized;
+	int: 32;
+	struct cacheline_padding _pad1_;
+	struct free_area free_area[12];
+	long unsigned int flags;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	long unsigned int percpu_drift_mark;
+	long unsigned int compact_cached_free_pfn;
+	long unsigned int compact_cached_migrate_pfn[2];
+	long unsigned int compact_init_migrate_pfn;
+	long unsigned int compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	short: 16;
+	struct cacheline_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[6];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[193];
+};
+
+enum zone_type {
+	ZONE_DMA32 = 0,
+	ZONE_NORMAL = 1,
+	ZONE_MOVABLE = 2,
+	__MAX_NR_ZONES = 3,
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	long unsigned int split_queue_len;
+};
+
+struct per_cpu_nodestat;
+
+struct memory_tier;
+
+struct pglist_data {
+	struct zone node_zones[3];
+	struct zonelist node_zonelists[2];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	long unsigned int node_start_pfn;
+	long unsigned int node_present_pages;
+	long unsigned int node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	long unsigned int nr_reclaim_start;
+	struct mutex kswapd_lock;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	long unsigned int totalreserve_pages;
+	long unsigned int min_unmapped_pages;
+	long unsigned int min_slab_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	unsigned int nbp_rl_start;
+	long unsigned int nbp_rl_nr_cand;
+	unsigned int nbp_threshold;
+	unsigned int nbp_th_start;
+	long unsigned int nbp_th_nr_cand;
+	struct lruvec __lruvec;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	struct per_cpu_nodestat *per_cpu_nodestats;
+	atomic_long_t vm_stat[43];
+	struct memory_tier *memtier;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short int free_factor;
+	short int expire;
+	struct list_head lists[13];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+	long unsigned int vm_numa_event[6];
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[43];
+};
+
+struct reclaim_state {
+	long unsigned int reclaimed_slab;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	long unsigned int state;
+	long unsigned int last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	long unsigned int bw_time_stamp;
+	long unsigned int dirtied_stamp;
+	long unsigned int written_stamp;
+	long unsigned int write_bandwidth;
+	long unsigned int avg_write_bandwidth;
+	long unsigned int dirty_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	long unsigned int dirty_sleep;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	long unsigned int ra_pages;
+	long unsigned int io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	long unsigned int emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	long unsigned int elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	long unsigned int watermark;
+	long unsigned int failcnt;
+	struct cacheline_padding _pad2_;
+	long unsigned int min;
+	long unsigned int low;
+	long unsigned int high;
+	long unsigned int max;
+	struct page_counter *parent;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vmpressure {
+	long unsigned int scanned;
+	long unsigned int reclaimed;
+	long unsigned int tree_scanned;
+	long unsigned int tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	long unsigned int period_time;
+	long unsigned int dirty_limit_tstamp;
+	long unsigned int dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct memcg_vmstats;
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	long unsigned int zswap_max;
+	long unsigned int soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	long unsigned int move_charge_at_immigrate;
+	spinlock_t move_lock;
+	long unsigned int move_lock_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct memcg_vmstats *vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	long unsigned int socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct mem_cgroup_per_node *nodeinfo[0];
+	long: 64;
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	unsigned int punt_to_cgroup: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	long unsigned int _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+	bool _workingset;
+	long unsigned int _pflags;
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int data: 24;
+	unsigned int flags: 8;
+};
+
+struct swap_cluster_list {
+	struct swap_cluster_info head;
+	struct swap_cluster_info tail;
+};
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	long unsigned int flags;
+	short int prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct swap_cluster_list free_clusters;
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int *cluster_next_cpu;
+	struct percpu_cluster *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	long unsigned int *frontswap_map;
+	atomic_t frontswap_pages;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct swap_cluster_list discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_mem {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	long unsigned int nslabs;
+	long unsigned int used;
+	struct dentry *debugfs;
+	bool late_alloc;
+	bool force_bounce;
+	bool for_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+};
+
+typedef u64 acpi_physical_address;
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
 	struct fwnode_handle *fwnode;
-	unsigned int nargs;
-	u64 args[8];
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	long unsigned int flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
 };
 
-struct property {
+struct logic_pio_host_ops {
+	u32 (*in)(void *, long unsigned int, size_t);
+	void (*out)(void *, long unsigned int, u32, size_t);
+	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
+	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
+};
+
+struct dmi_header {
+	u8 type;
+	u8 length;
+	u16 handle;
+};
+
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+	int nid;
+};
+
+struct memblock_type {
+	long unsigned int cnt;
+	long unsigned int max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
 	char *name;
-	int length;
-	void *value;
-	struct property *next;
-	long unsigned int _flags;
-	struct bin_attribute attr;
 };
 
-struct irq_fwspec {
-	struct fwnode_handle *fwnode;
-	int param_count;
-	u32 param[16];
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
 };
 
-struct irq_data;
+struct of_bus;
 
-struct irq_domain_ops {
-	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
-	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
-	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
-	void (*unmap)(struct irq_domain *, unsigned int);
-	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
-	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
-	void (*free)(struct irq_domain *, unsigned int, unsigned int);
-	int (*activate)(struct irq_domain *, struct irq_data *, bool);
-	void (*deactivate)(struct irq_domain *, struct irq_data *);
-	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
 };
 
-struct xbc_node {
-	u16 next;
-	u16 child;
-	u16 parent;
-	u16 data;
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+enum {
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
+};
+
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_FANOTIFY_GROUPS = 10,
+	UCOUNT_FANOTIFY_MARKS = 11,
+	UCOUNT_COUNTS = 12,
+};
+
+enum rlimit_type {
+	UCOUNT_RLIMIT_NPROC = 0,
+	UCOUNT_RLIMIT_MSGQUEUE = 1,
+	UCOUNT_RLIMIT_SIGPENDING = 2,
+	UCOUNT_RLIMIT_MEMLOCK = 3,
+	UCOUNT_RLIMIT_COUNTS = 4,
+};
+
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
+};
+
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = -1,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 22,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 23,
+};
+
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	devices_cgrp_id = 5,
+	freezer_cgrp_id = 6,
+	net_cls_cgrp_id = 7,
+	perf_event_cgrp_id = 8,
+	net_prio_cgrp_id = 9,
+	hugetlb_cgrp_id = 10,
+	pids_cgrp_id = 11,
+	rdma_cgrp_id = 12,
+	misc_cgrp_id = 13,
+	CGROUP_SUBSYS_COUNT = 14,
 };
 
 enum wb_stat_item {
@@ -6988,474 +7538,17 @@
 	NR_WB_STAT_ITEMS = 4,
 };
 
-struct disk_stats;
-
-struct partition_meta_info;
-
-struct hd_struct {
-	sector_t start_sect;
-	sector_t nr_sects;
-	long unsigned int stamp;
-	struct disk_stats *dkstats;
-	struct percpu_ref ref;
-	struct device __dev;
-	struct kobject *holder_dir;
-	int policy;
-	int partno;
-	struct partition_meta_info *info;
-	struct rcu_work rcu_work;
-};
-
-struct disk_part_tbl;
-
-struct block_device_operations;
-
-struct timer_rand_state;
-
-struct disk_events;
-
-struct cdrom_device_info;
-
-struct badblocks;
-
-struct gendisk {
-	int major;
-	int first_minor;
-	int minors;
-	char disk_name[32];
-	short unsigned int events;
-	short unsigned int event_flags;
-	struct disk_part_tbl *part_tbl;
-	struct hd_struct part0;
-	const struct block_device_operations *fops;
-	struct request_queue *queue;
-	void *private_data;
-	int flags;
-	long unsigned int state;
-	struct rw_semaphore lookup_sem;
-	struct kobject *slave_dir;
-	struct timer_rand_state *random;
-	atomic_t sync_io;
-	struct disk_events *ev;
-	struct kobject integrity_kobj;
-	struct cdrom_device_info *cdi;
-	int node_id;
-	struct badblocks *bb;
-	struct lockdep_map lockdep_map;
-};
-
-struct bio_integrity_payload {
-	struct bio *bip_bio;
-	struct bvec_iter bip_iter;
-	short unsigned int bip_slab;
-	short unsigned int bip_vcnt;
-	short unsigned int bip_max_vcnt;
-	short unsigned int bip_flags;
-	struct bvec_iter bio_iter;
-	struct work_struct bip_work;
-	struct bio_vec *bip_vec;
-	struct bio_vec bip_inline_vecs[0];
-};
-
-struct blkg_iostat {
-	u64 bytes[3];
-	u64 ios[3];
-};
-
-struct blkg_iostat_set {
-	struct u64_stats_sync sync;
-	struct blkg_iostat cur;
-	struct blkg_iostat last;
-};
-
-struct blkcg;
-
-struct blkg_policy_data;
-
-struct blkcg_gq {
-	struct request_queue *q;
-	struct list_head q_node;
-	struct hlist_node blkcg_node;
-	struct blkcg *blkcg;
-	struct blkcg_gq *parent;
-	struct percpu_ref refcnt;
-	bool online;
-	struct blkg_iostat_set *iostat_cpu;
-	struct blkg_iostat_set iostat;
-	struct blkg_policy_data *pd[5];
-	spinlock_t async_bio_lock;
-	struct bio_list async_bios;
-	struct work_struct async_bio_work;
-	atomic_t use_delay;
-	atomic64_t delay_nsec;
-	atomic64_t delay_start;
-	u64 last_delay;
-	int last_use;
-	struct callback_head callback_head;
-};
-
-typedef unsigned int blk_qc_t;
-
-struct partition_meta_info {
-	char uuid[37];
-	u8 volname[64];
-};
-
-struct disk_part_tbl {
-	struct callback_head callback_head;
-	int len;
-	struct hd_struct *last_lookup;
-	struct hd_struct *part[0];
-};
-
-struct blk_integrity_iter;
-
-typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
-
-typedef void integrity_prepare_fn(struct request *);
-
-typedef void integrity_complete_fn(struct request *, unsigned int);
-
-struct blk_integrity_profile {
-	integrity_processing_fn *generate_fn;
-	integrity_processing_fn *verify_fn;
-	integrity_prepare_fn *prepare_fn;
-	integrity_complete_fn *complete_fn;
-	const char *name;
-};
-
-struct blk_zone;
-
-typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
-
-struct hd_geometry;
-
-struct pr_ops;
-
-struct block_device_operations {
-	blk_qc_t (*submit_bio)(struct bio *);
-	int (*open)(struct block_device *, fmode_t);
-	void (*release)(struct gendisk *, fmode_t);
-	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
-	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	unsigned int (*check_events)(struct gendisk *, unsigned int);
-	void (*unlock_native_capacity)(struct gendisk *);
-	int (*revalidate_disk)(struct gendisk *);
-	int (*getgeo)(struct block_device *, struct hd_geometry *);
-	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
-	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
-	char * (*devnode)(struct gendisk *, umode_t *);
-	struct module *owner;
-	const struct pr_ops *pr_ops;
-};
-
-struct sg_io_v4 {
-	__s32 guard;
-	__u32 protocol;
-	__u32 subprotocol;
-	__u32 request_len;
-	__u64 request;
-	__u64 request_tag;
-	__u32 request_attr;
-	__u32 request_priority;
-	__u32 request_extra;
-	__u32 max_response_len;
-	__u64 response;
-	__u32 dout_iovec_count;
-	__u32 dout_xfer_len;
-	__u32 din_iovec_count;
-	__u32 din_xfer_len;
-	__u64 dout_xferp;
-	__u64 din_xferp;
-	__u32 timeout;
-	__u32 flags;
-	__u64 usr_ptr;
-	__u32 spare_in;
-	__u32 driver_status;
-	__u32 transport_status;
-	__u32 device_status;
-	__u32 retry_delay;
-	__u32 info;
-	__u32 duration;
-	__u32 response_len;
-	__s32 din_resid;
-	__s32 dout_resid;
-	__u64 generated_tag;
-	__u32 spare_out;
-	__u32 padding;
-};
-
-struct bsg_ops {
-	int (*check_proto)(struct sg_io_v4 *);
-	int (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);
-	int (*complete_rq)(struct request *, struct sg_io_v4 *);
-	void (*free_rq)(struct request *);
-};
-
-typedef __u32 req_flags_t;
-
-typedef void rq_end_io_fn(struct request *, blk_status_t);
-
-enum mq_rq_state {
-	MQ_RQ_IDLE = 0,
-	MQ_RQ_IN_FLIGHT = 1,
-	MQ_RQ_COMPLETE = 2,
-};
-
-struct blk_ksm_keyslot;
-
-struct request {
-	struct request_queue *q;
-	struct blk_mq_ctx *mq_ctx;
-	struct blk_mq_hw_ctx *mq_hctx;
-	unsigned int cmd_flags;
-	req_flags_t rq_flags;
-	int tag;
-	int internal_tag;
-	unsigned int __data_len;
-	sector_t __sector;
-	struct bio *bio;
-	struct bio *biotail;
-	struct list_head queuelist;
-	union {
-		struct hlist_node hash;
-		struct list_head ipi_list;
-	};
-	union {
-		struct rb_node rb_node;
-		struct bio_vec special_vec;
-		void *completion_data;
-		int error_count;
-	};
-	union {
-		struct {
-			struct io_cq *icq;
-			void *priv[2];
-		} elv;
-		struct {
-			unsigned int seq;
-			struct list_head list;
-			rq_end_io_fn *saved_end_io;
-		} flush;
-	};
-	struct gendisk *rq_disk;
-	struct hd_struct *part;
-	u64 alloc_time_ns;
-	u64 start_time_ns;
-	u64 io_start_time_ns;
-	short unsigned int wbt_flags;
-	short unsigned int stats_sectors;
-	short unsigned int nr_phys_segments;
-	short unsigned int nr_integrity_segments;
-	struct bio_crypt_ctx *crypt_ctx;
-	struct blk_ksm_keyslot *crypt_keyslot;
-	short unsigned int write_hint;
-	short unsigned int ioprio;
-	enum mq_rq_state state;
-	refcount_t ref;
-	unsigned int timeout;
-	long unsigned int deadline;
-	union {
-		struct __call_single_data csd;
-		u64 fifo_time;
-	};
-	rq_end_io_fn *end_io;
-	void *end_io_data;
-};
-
-struct blk_zone {
-	__u64 start;
-	__u64 len;
-	__u64 wp;
-	__u8 type;
-	__u8 cond;
-	__u8 non_seq;
-	__u8 reset;
-	__u8 resv[4];
-	__u64 capacity;
-	__u8 reserved[24];
-};
-
-enum elv_merge {
-	ELEVATOR_NO_MERGE = 0,
-	ELEVATOR_FRONT_MERGE = 1,
-	ELEVATOR_BACK_MERGE = 2,
-	ELEVATOR_DISCARD_MERGE = 3,
-};
-
-struct elevator_type;
-
-struct blk_mq_alloc_data;
-
-struct elevator_mq_ops {
-	int (*init_sched)(struct request_queue *, struct elevator_type *);
-	void (*exit_sched)(struct elevator_queue *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*depth_updated)(struct blk_mq_hw_ctx *);
-	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-	bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);
-	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
-	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-	void (*prepare_request)(struct request *);
-	void (*finish_request)(struct request *);
-	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
-	bool (*has_work)(struct blk_mq_hw_ctx *);
-	void (*completed_request)(struct request *, u64);
-	void (*requeue_request)(struct request *);
-	struct request * (*former_request)(struct request_queue *, struct request *);
-	struct request * (*next_request)(struct request_queue *, struct request *);
-	void (*init_icq)(struct io_cq *);
-	void (*exit_icq)(struct io_cq *);
-};
-
-struct elv_fs_entry;
-
-struct elevator_type {
-	struct kmem_cache *icq_cache;
-	struct elevator_mq_ops ops;
-	size_t icq_size;
-	size_t icq_align;
-	struct elv_fs_entry *elevator_attrs;
-	const char *elevator_name;
-	const char *elevator_alias;
-	const unsigned int elevator_features;
-	struct module *elevator_owner;
-	char icq_cache_name[22];
-	struct list_head list;
-};
-
-struct elevator_queue {
-	struct elevator_type *type;
-	void *elevator_data;
-	struct kobject kobj;
-	struct mutex sysfs_lock;
-	unsigned int registered: 1;
-	struct hlist_head hash[64];
-};
-
-struct elv_fs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct elevator_queue *, char *);
-	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-enum blk_eh_timer_return {
-	BLK_EH_DONE = 0,
-	BLK_EH_RESET_TIMER = 1,
-};
-
-struct blk_mq_queue_data;
-
-struct blk_mq_ops {
-	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
-	void (*commit_rqs)(struct blk_mq_hw_ctx *);
-	bool (*get_budget)(struct request_queue *);
-	void (*put_budget)(struct request_queue *);
-	enum blk_eh_timer_return (*timeout)(struct request *, bool);
-	int (*poll)(struct blk_mq_hw_ctx *);
-	void (*complete)(struct request *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
-	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
-	void (*initialize_rq_fn)(struct request *);
-	void (*cleanup_rq)(struct request *);
-	bool (*busy)(struct request_queue *);
-	int (*map_queues)(struct blk_mq_tag_set *);
-};
-
-struct blk_integrity_iter {
-	void *prot_buf;
-	void *data_buf;
-	sector_t seed;
-	unsigned int data_size;
-	short unsigned int interval;
-	const char *disk_name;
-};
-
-enum pr_type {
-	PR_WRITE_EXCLUSIVE = 1,
-	PR_EXCLUSIVE_ACCESS = 2,
-	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
-	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
-	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
-	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
-};
-
-struct pr_ops {
-	int (*pr_register)(struct block_device *, u64, u64, u32);
-	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
-	int (*pr_release)(struct block_device *, u64, enum pr_type);
-	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
-	int (*pr_clear)(struct block_device *, u64);
-};
-
-enum blkg_iostat_type {
-	BLKG_IOSTAT_READ = 0,
-	BLKG_IOSTAT_WRITE = 1,
-	BLKG_IOSTAT_DISCARD = 2,
-	BLKG_IOSTAT_NR = 3,
-};
-
-struct blkcg_policy_data;
-
-struct blkcg {
-	struct cgroup_subsys_state css;
-	spinlock_t lock;
-	refcount_t online_pin;
-	struct xarray blkg_tree;
-	struct blkcg_gq *blkg_hint;
-	struct hlist_head blkg_list;
-	struct blkcg_policy_data *cpd[5];
-	struct list_head all_blkcgs_node;
-	struct list_head cgwb_list;
-};
-
-struct blkcg_policy_data {
-	struct blkcg *blkcg;
-	int plid;
-};
-
-struct blkg_policy_data {
-	struct blkcg_gq *blkg;
-	int plid;
-};
-
-enum memcg_stat_item {
-	MEMCG_SWAP = 37,
-	MEMCG_SOCK = 38,
-	MEMCG_PERCPU_B = 39,
-	MEMCG_NR_STAT = 40,
-};
-
 enum memcg_memory_event {
 	MEMCG_LOW = 0,
 	MEMCG_HIGH = 1,
 	MEMCG_MAX = 2,
 	MEMCG_OOM = 3,
 	MEMCG_OOM_KILL = 4,
-	MEMCG_SWAP_HIGH = 5,
-	MEMCG_SWAP_MAX = 6,
-	MEMCG_SWAP_FAIL = 7,
-	MEMCG_NR_MEMORY_EVENTS = 8,
-};
-
-enum mem_cgroup_events_target {
-	MEM_CGROUP_TARGET_THRESH = 0,
-	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
-	MEM_CGROUP_NTARGETS = 2,
-};
-
-struct memcg_vmstats_percpu {
-	long int stat[40];
-	long unsigned int events[95];
-	long unsigned int nr_page_events;
-	long unsigned int targets[2];
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
 };
 
 struct mem_cgroup_reclaim_iter {
@@ -7463,23 +7556,29 @@
 	unsigned int generation;
 };
 
-struct lruvec_stat {
-	long int count[37];
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	long unsigned int *map;
 };
 
-struct memcg_shrinker_map {
-	struct callback_head rcu;
-	long unsigned int map[0];
+struct lruvec_stats_percpu {
+	long int state[43];
+	long int state_prev[43];
+};
+
+struct lruvec_stats {
+	long int state[43];
+	long int state_pending[43];
 };
 
 struct mem_cgroup_per_node {
 	struct lruvec lruvec;
-	struct lruvec_stat *lruvec_stat_local;
-	struct lruvec_stat *lruvec_stat_cpu;
-	atomic_long_t lruvec_stat[37];
-	long unsigned int lru_zone_size[20];
+	struct lruvec_stats_percpu *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	long unsigned int lru_zone_size[15];
 	struct mem_cgroup_reclaim_iter iter;
-	struct memcg_shrinker_map *shrinker_map;
+	struct shrinker_info *shrinker_info;
 	struct rb_node tree_node;
 	long unsigned int usage_in_excess;
 	bool on_tree;
@@ -7499,112 +7598,101 @@
 	struct mem_cgroup_threshold entries[0];
 };
 
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
 struct percpu_cluster {
 	struct swap_cluster_info index;
 	unsigned int next;
 };
 
-enum fs_value_type {
-	fs_value_is_undefined = 0,
-	fs_value_is_flag = 1,
-	fs_value_is_string = 2,
-	fs_value_is_blob = 3,
-	fs_value_is_filename = 4,
-	fs_value_is_file = 5,
+struct loongson_board_info {
+	int bios_size;
+	const char *bios_vendor;
+	const char *bios_version;
+	const char *bios_release_date;
+	const char *board_name;
+	const char *board_vendor;
 };
 
-struct fs_parameter {
-	const char *key;
-	enum fs_value_type type: 8;
-	union {
-		char *string;
-		void *blob;
-		struct filename *name;
-		struct file *file;
-	};
-	size_t size;
-	int dirfd;
+struct loongson_system_configuration {
+	int nr_cpus;
+	int nr_nodes;
+	int boot_cpu_id;
+	int cores_per_node;
+	int cores_per_package;
+	long unsigned int cores_io_master;
+	long unsigned int suspend_addr;
+	const char *cpuname;
 };
 
-struct fc_log {
-	refcount_t usage;
-	u8 head;
-	u8 tail;
-	u8 need_free;
-	struct module *owner;
-	char *buffer[8];
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_IOV_RESOURCES = 7,
+	PCI_IOV_RESOURCE_END = 12,
+	PCI_BRIDGE_RESOURCES = 13,
+	PCI_BRIDGE_RESOURCE_END = 16,
+	PCI_NUM_RESOURCES = 17,
+	DEVICE_COUNT_RESOURCE = 17,
 };
 
-struct fs_context_operations {
-	void (*free)(struct fs_context *);
-	int (*dup)(struct fs_context *, struct fs_context *);
-	int (*parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*parse_monolithic)(struct fs_context *, void *);
-	int (*get_tree)(struct fs_context *);
-	int (*reconfigure)(struct fs_context *);
+typedef unsigned int pci_channel_state_t;
+
+typedef unsigned int pcie_reset_state_t;
+
+typedef short unsigned int pci_dev_flags_t;
+
+typedef short unsigned int pci_bus_flags_t;
+
+typedef unsigned int pci_ers_result_t;
+
+typedef long unsigned int uintptr_t;
+
+enum idle_boot_override {
+	IDLE_NO_OVERRIDE = 0,
+	IDLE_HALT = 1,
+	IDLE_NOMWAIT = 2,
+	IDLE_POLL = 3,
 };
 
-struct fs_parse_result {
-	bool negated;
-	union {
-		bool boolean;
-		int int_32;
-		unsigned int uint_32;
-		u64 uint_64;
-	};
+typedef void (*smp_call_func_t)(void *);
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
 };
 
-struct trace_event_raw_initcall_level {
-	struct trace_entry ent;
-	u32 __data_loc_level;
-	char __data[0];
-};
+typedef struct __call_single_data call_single_data_t;
 
-struct trace_event_raw_initcall_start {
-	struct trace_entry ent;
-	initcall_t func;
-	char __data[0];
-};
-
-struct trace_event_raw_initcall_finish {
-	struct trace_entry ent;
-	initcall_t func;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_initcall_level {
-	u32 level;
-};
-
-struct trace_event_data_offsets_initcall_start {};
-
-struct trace_event_data_offsets_initcall_finish {};
-
-typedef void (*btf_trace_initcall_level)(void *, const char *);
-
-typedef void (*btf_trace_initcall_start)(void *, initcall_t);
-
-typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
-
-struct blacklist_entry {
-	struct list_head next;
-	char *buf;
-};
-
-typedef __u32 Elf32_Word;
-
-struct elf32_note {
-	Elf32_Word n_namesz;
-	Elf32_Word n_descsz;
-	Elf32_Word n_type;
-};
-
-enum pcpu_fc {
-	PCPU_FC_AUTO = 0,
-	PCPU_FC_EMBED = 1,
-	PCPU_FC_PAGE = 2,
-	PCPU_FC_NR = 3,
+struct kernel_clone_args {
+	u64 flags;
+	int *pidfd;
+	int *child_tid;
+	int *parent_tid;
+	int exit_signal;
+	long unsigned int stack;
+	long unsigned int stack_size;
+	long unsigned int tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int io_thread;
+	int kthread;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
 };
 
 enum {
@@ -7621,79 +7709,946 @@
 	ADDR_LIMIT_3GB = 134217728,
 };
 
-enum hrtimer_base_type {
-	HRTIMER_BASE_MONOTONIC = 0,
-	HRTIMER_BASE_REALTIME = 1,
-	HRTIMER_BASE_BOOTTIME = 2,
-	HRTIMER_BASE_TAI = 3,
-	HRTIMER_BASE_MONOTONIC_SOFT = 4,
-	HRTIMER_BASE_REALTIME_SOFT = 5,
-	HRTIMER_BASE_BOOTTIME_SOFT = 6,
-	HRTIMER_BASE_TAI_SOFT = 7,
-	HRTIMER_MAX_CLOCK_BASES = 8,
+enum stack_type {
+	STACK_TYPE_UNKNOWN = 0,
+	STACK_TYPE_IRQ = 1,
+	STACK_TYPE_TASK = 2,
+};
+
+struct stack_info {
+	enum stack_type type;
+	long unsigned int begin;
+	long unsigned int end;
+	long unsigned int next_sp;
+};
+
+struct unwind_state {
+	char type;
+	struct stack_info stack_info;
+	struct task_struct *task;
+	bool first;
+	bool error;
+	bool reset;
+	int graph_idx;
+	long unsigned int sp;
+	long unsigned int pc;
+	long unsigned int ra;
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	long unsigned int vma_pages;
+	struct mm_struct *mm;
+	long unsigned int p;
+	long unsigned int argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	long unsigned int loader;
+	long unsigned int exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	long unsigned int min_coredump;
+};
+
+struct arch_elf_state {
+	int fp_abi;
+	int interp_fp_abi;
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_CPU = 1,
+	VDSO_CLOCKMODE_MAX = 2,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	long unsigned int flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct module *owner;
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(long unsigned int, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	long unsigned int retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	long unsigned int min_delta_ticks;
+	long unsigned int max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+enum reg0i26_op {
+	b_op = 20,
+	bl_op = 21,
+};
+
+enum reg1i20_op {
+	lu12iw_op = 10,
+	lu32id_op = 11,
+	pcaddi_op = 12,
+	pcalau12i_op = 13,
+	pcaddu12i_op = 14,
+	pcaddu18i_op = 15,
+};
+
+enum reg1i21_op {
+	beqz_op = 16,
+	bnez_op = 17,
+	bceqz_op = 18,
+	bcnez_op = 18,
+};
+
+enum reg2i12_op {
+	addiw_op = 10,
+	addid_op = 11,
+	lu52id_op = 12,
+	andi_op = 13,
+	ori_op = 14,
+	xori_op = 15,
+	ldb_op = 160,
+	ldh_op = 161,
+	ldw_op = 162,
+	ldd_op = 163,
+	stb_op = 164,
+	sth_op = 165,
+	stw_op = 166,
+	std_op = 167,
+	ldbu_op = 168,
+	ldhu_op = 169,
+	ldwu_op = 170,
+	flds_op = 172,
+	fsts_op = 173,
+	fldd_op = 174,
+	fstd_op = 175,
+};
+
+enum reg2i16_op {
+	jirl_op = 19,
+	beq_op = 22,
+	bne_op = 23,
+	blt_op = 24,
+	bge_op = 25,
+	bltu_op = 26,
+	bgeu_op = 27,
+};
+
+enum reg3_op {
+	addw_op = 32,
+	addd_op = 33,
+	subw_op = 34,
+	subd_op = 35,
+	nor_op = 40,
+	and_op = 41,
+	or_op = 42,
+	xor_op = 43,
+	orn_op = 44,
+	andn_op = 45,
+	sllw_op = 46,
+	srlw_op = 47,
+	sraw_op = 48,
+	slld_op = 49,
+	srld_op = 50,
+	srad_op = 51,
+	mulw_op = 56,
+	mulhw_op = 57,
+	mulhwu_op = 58,
+	muld_op = 59,
+	mulhd_op = 60,
+	mulhdu_op = 61,
+	divw_op = 64,
+	modw_op = 65,
+	divwu_op = 66,
+	modwu_op = 67,
+	divd_op = 68,
+	modd_op = 69,
+	divdu_op = 70,
+	moddu_op = 71,
+	ldxb_op = 28672,
+	ldxh_op = 28680,
+	ldxw_op = 28688,
+	ldxd_op = 28696,
+	stxb_op = 28704,
+	stxh_op = 28712,
+	stxw_op = 28720,
+	stxd_op = 28728,
+	ldxbu_op = 28736,
+	ldxhu_op = 28744,
+	ldxwu_op = 28752,
+	fldxs_op = 28768,
+	fldxd_op = 28776,
+	fstxs_op = 28784,
+	fstxd_op = 28792,
+	amswapw_op = 28864,
+	amswapd_op = 28865,
+	amaddw_op = 28866,
+	amaddd_op = 28867,
+	amandw_op = 28868,
+	amandd_op = 28869,
+	amorw_op = 28870,
+	amord_op = 28871,
+	amxorw_op = 28872,
+	amxord_op = 28873,
+};
+
+struct reg0i15_format {
+	unsigned int immediate: 15;
+	unsigned int opcode: 17;
+};
+
+struct reg0i26_format {
+	unsigned int immediate_h: 10;
+	unsigned int immediate_l: 16;
+	unsigned int opcode: 6;
+};
+
+struct reg1i20_format {
+	unsigned int rd: 5;
+	unsigned int immediate: 20;
+	unsigned int opcode: 7;
+};
+
+struct reg1i21_format {
+	unsigned int immediate_h: 5;
+	unsigned int rj: 5;
+	unsigned int immediate_l: 16;
+	unsigned int opcode: 6;
+};
+
+struct reg2_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int opcode: 22;
+};
+
+struct reg2i5_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int immediate: 5;
+	unsigned int opcode: 17;
+};
+
+struct reg2i6_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int immediate: 6;
+	unsigned int opcode: 16;
+};
+
+struct reg2i12_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int immediate: 12;
+	unsigned int opcode: 10;
+};
+
+struct reg2i14_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int immediate: 14;
+	unsigned int opcode: 8;
+};
+
+struct reg2i16_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int immediate: 16;
+	unsigned int opcode: 6;
+};
+
+struct reg2bstrd_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int lsbd: 6;
+	unsigned int msbd: 6;
+	unsigned int opcode: 10;
+};
+
+struct reg3_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int rk: 5;
+	unsigned int opcode: 17;
+};
+
+struct reg3sa2_format {
+	unsigned int rd: 5;
+	unsigned int rj: 5;
+	unsigned int rk: 5;
+	unsigned int immediate: 2;
+	unsigned int opcode: 15;
+};
+
+union loongarch_instruction {
+	unsigned int word;
+	struct reg0i15_format reg0i15_format;
+	struct reg0i26_format reg0i26_format;
+	struct reg1i20_format reg1i20_format;
+	struct reg1i21_format reg1i21_format;
+	struct reg2_format reg2_format;
+	struct reg2i5_format reg2i5_format;
+	struct reg2i6_format reg2i6_format;
+	struct reg2i12_format reg2i12_format;
+	struct reg2i14_format reg2i14_format;
+	struct reg2i16_format reg2i16_format;
+	struct reg2bstrd_format reg2bstrd_format;
+	struct reg3_format reg3_format;
+	struct reg3sa2_format reg3sa2_format;
+};
+
+enum loongarch_gpr {
+	LOONGARCH_GPR_ZERO = 0,
+	LOONGARCH_GPR_RA = 1,
+	LOONGARCH_GPR_TP = 2,
+	LOONGARCH_GPR_SP = 3,
+	LOONGARCH_GPR_A0 = 4,
+	LOONGARCH_GPR_A1 = 5,
+	LOONGARCH_GPR_A2 = 6,
+	LOONGARCH_GPR_A3 = 7,
+	LOONGARCH_GPR_A4 = 8,
+	LOONGARCH_GPR_A5 = 9,
+	LOONGARCH_GPR_A6 = 10,
+	LOONGARCH_GPR_A7 = 11,
+	LOONGARCH_GPR_T0 = 12,
+	LOONGARCH_GPR_T1 = 13,
+	LOONGARCH_GPR_T2 = 14,
+	LOONGARCH_GPR_T3 = 15,
+	LOONGARCH_GPR_T4 = 16,
+	LOONGARCH_GPR_T5 = 17,
+	LOONGARCH_GPR_T6 = 18,
+	LOONGARCH_GPR_T7 = 19,
+	LOONGARCH_GPR_T8 = 20,
+	LOONGARCH_GPR_FP = 22,
+	LOONGARCH_GPR_S0 = 23,
+	LOONGARCH_GPR_S1 = 24,
+	LOONGARCH_GPR_S2 = 25,
+	LOONGARCH_GPR_S3 = 26,
+	LOONGARCH_GPR_S4 = 27,
+	LOONGARCH_GPR_S5 = 28,
+	LOONGARCH_GPR_S6 = 29,
+	LOONGARCH_GPR_S7 = 30,
+	LOONGARCH_GPR_S8 = 31,
+	LOONGARCH_GPR_MAX = 32,
+};
+
+struct __large_struct {
+	long unsigned int buf[100];
+};
+
+enum reg2i14_op {
+	llw_op = 32,
+	scw_op = 33,
+	lld_op = 34,
+	scd_op = 35,
+	ldptrw_op = 36,
+	stptrw_op = 37,
+	ldptrd_op = 38,
+	stptrd_op = 39,
 };
 
 enum {
-	MM_FILEPAGES = 0,
-	MM_ANONPAGES = 1,
-	MM_SWAPENTS = 2,
-	MM_SHMEMPAGES = 3,
-	NR_MM_COUNTERS = 4,
-};
-
-enum rseq_cs_flags_bit {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
-};
-
-enum uclamp_id {
-	UCLAMP_MIN = 0,
-	UCLAMP_MAX = 1,
-	UCLAMP_CNT = 2,
-};
-
-enum perf_event_task_context {
-	perf_invalid_context = 4294967295,
-	perf_hw_context = 0,
-	perf_sw_context = 1,
-	perf_nr_task_contexts = 2,
-};
-
-enum rseq_event_mask_bits {
-	RSEQ_EVENT_PREEMPT_BIT = 0,
-	RSEQ_EVENT_SIGNAL_BIT = 1,
-	RSEQ_EVENT_MIGRATE_BIT = 2,
+	TRACE_FTRACE_BIT = 0,
+	TRACE_FTRACE_NMI_BIT = 1,
+	TRACE_FTRACE_IRQ_BIT = 2,
+	TRACE_FTRACE_SIRQ_BIT = 3,
+	TRACE_FTRACE_TRANSITION_BIT = 4,
+	TRACE_INTERNAL_BIT = 5,
+	TRACE_INTERNAL_NMI_BIT = 6,
+	TRACE_INTERNAL_IRQ_BIT = 7,
+	TRACE_INTERNAL_SIRQ_BIT = 8,
+	TRACE_INTERNAL_TRANSITION_BIT = 9,
+	TRACE_BRANCH_BIT = 10,
+	TRACE_IRQ_BIT = 11,
+	TRACE_GRAPH_BIT = 12,
+	TRACE_GRAPH_DEPTH_START_BIT = 13,
+	TRACE_GRAPH_DEPTH_END_BIT = 14,
+	TRACE_GRAPH_NOTRACE_BIT = 15,
+	TRACE_RECORD_RECURSION_BIT = 16,
 };
 
 enum {
-	PROC_ROOT_INO = 1,
-	PROC_IPC_INIT_INO = 4026531839,
-	PROC_UTS_INIT_INO = 4026531838,
-	PROC_USER_INIT_INO = 4026531837,
-	PROC_PID_INIT_INO = 4026531836,
-	PROC_CGROUP_INIT_INO = 4026531835,
-	PROC_TIME_INIT_INO = 4026531834,
+	TRACE_CTX_NMI = 0,
+	TRACE_CTX_IRQ = 1,
+	TRACE_CTX_SOFTIRQ = 2,
+	TRACE_CTX_NORMAL = 3,
+	TRACE_CTX_TRANSITION = 4,
 };
 
+struct dyn_arch_ftrace {};
+
+struct dyn_ftrace {
+	long unsigned int ip;
+	long unsigned int flags;
+	struct dyn_arch_ftrace arch;
+};
+
+enum {
+	FTRACE_UPDATE_CALLS = 1,
+	FTRACE_DISABLE_CALLS = 2,
+	FTRACE_UPDATE_TRACE_FUNC = 4,
+	FTRACE_START_FUNC_RET = 8,
+	FTRACE_STOP_FUNC_RET = 16,
+	FTRACE_MAY_SLEEP = 32,
+};
+
+typedef union loongarch_instruction kprobe_opcode_t;
+
+struct arch_specific_insn {
+	kprobe_opcode_t *insn;
+	long unsigned int restore;
+};
+
+struct kprobe;
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	unsigned int status;
+};
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	long unsigned int nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+struct kprobe_ctlblk {
+	unsigned int kprobe_status;
+	long unsigned int saved_status;
+	struct prev_kprobe prev_kprobe;
+};
+
+struct proc_cpuinfo_notifier_args {
+	struct seq_file *m;
+	long unsigned int n;
+};
+
+struct notifier_block;
+
+typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block *next;
+	int priority;
+};
+
+struct raw_notifier_head {
+	struct notifier_block *head;
+};
+
+struct kimage_arch {
+	long unsigned int efi_boot;
+	long unsigned int cmdline_ptr;
+	long unsigned int systable_ptr;
+};
+
+typedef void (*do_kexec_t)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef long unsigned int kimage_entry_t;
+
+struct kexec_segment {
+	union {
+		void *buf;
+		void *kbuf;
+	};
+	size_t bufsz;
+	long unsigned int mem;
+	size_t memsz;
+};
+
+struct kimage {
+	kimage_entry_t head;
+	kimage_entry_t *entry;
+	kimage_entry_t *last_entry;
+	long unsigned int start;
+	struct page *control_code_page;
+	struct page *swap_page;
+	void *vmcoreinfo_data_copy;
+	long unsigned int nr_segments;
+	struct kexec_segment segment[16];
+	struct list_head control_pages;
+	struct list_head dest_pages;
+	struct list_head unusable_pages;
+	long unsigned int control_page;
+	unsigned int type: 1;
+	unsigned int preserve_context: 1;
+	unsigned int file_mode: 1;
+	struct kimage_arch arch;
+	void *elf_headers;
+	long unsigned int elf_headers_sz;
+	long unsigned int elf_load_addr;
+};
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
+};
+
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+};
+
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+};
+
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short int contexts;
+	bool contexts_maxed;
+};
+
+struct stack_frame {
+	long unsigned int fp;
+	long unsigned int ra;
+};
+
+struct cpu_hw_events {
+	struct perf_event *events[32];
+	long unsigned int used_mask[1];
+	unsigned int saved_ctrl[32];
+};
+
+struct loongarch_perf_event {
+	unsigned int event_id;
+};
+
+struct loongarch_pmu {
+	u64 max_period;
+	u64 valid_count;
+	u64 overflow;
+	const char *name;
+	unsigned int num_counters;
+	u64 (*read_counter)(unsigned int);
+	void (*write_counter)(unsigned int, u64);
+	const struct loongarch_perf_event * (*map_raw_event)(u64);
+	const struct loongarch_perf_event (*general_event_map)[10];
+	const struct loongarch_perf_event (*cache_event_map)[42];
+};
+
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
+	VM_FAULT_HINDEX_MASK = 983040,
+};
+
+struct irqentry_state {
+	union {
+		bool exit_rcu;
+		bool lockdep;
+	};
+};
+
+typedef struct irqentry_state irqentry_state_t;
+
 typedef short int __s16;
 
-typedef __s16 s16;
-
-typedef __u16 __le16;
-
 typedef __u16 __be16;
 
-typedef __u32 __be32;
-
-typedef __u64 __be64;
-
 typedef __u32 __wsum;
 
 typedef unsigned int slab_flags_t;
 
-struct llist_head {
-	struct llist_node *first;
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+enum syscall_work_bit {
+	SYSCALL_WORK_BIT_SECCOMP = 0,
+	SYSCALL_WORK_BIT_SYSCALL_TRACEPOINT = 1,
+	SYSCALL_WORK_BIT_SYSCALL_TRACE = 2,
+	SYSCALL_WORK_BIT_SYSCALL_EMU = 3,
+	SYSCALL_WORK_BIT_SYSCALL_AUDIT = 4,
+	SYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH = 5,
+	SYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP = 6,
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+struct maple_alloc {
+	long unsigned int total;
+	unsigned char node_count;
+	unsigned int request_count;
+	struct maple_alloc *slot[30];
+};
+
+struct maple_enode;
+
+struct ma_state {
+	struct maple_tree *tree;
+	long unsigned int index;
+	long unsigned int last;
+	struct maple_enode *node;
+	long unsigned int min;
+	long unsigned int max;
+	struct maple_alloc *alloc;
+	unsigned char depth;
+	unsigned char offset;
+	unsigned char mas_flags;
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0LL,
+	WORK_STRUCT_INACTIVE_BIT = 1LL,
+	WORK_STRUCT_PWQ_BIT = 2LL,
+	WORK_STRUCT_LINKED_BIT = 3LL,
+	WORK_STRUCT_COLOR_SHIFT = 4LL,
+	WORK_STRUCT_COLOR_BITS = 4LL,
+	WORK_STRUCT_PENDING = 1LL,
+	WORK_STRUCT_INACTIVE = 2LL,
+	WORK_STRUCT_PWQ = 4LL,
+	WORK_STRUCT_LINKED = 8LL,
+	WORK_STRUCT_STATIC = 0LL,
+	WORK_NR_COLORS = 16LL,
+	WORK_CPU_UNBOUND = 64LL,
+	WORK_STRUCT_FLAG_BITS = 8LL,
+	WORK_OFFQ_FLAG_BASE = 4LL,
+	__WORK_OFFQ_CANCELING = 4LL,
+	WORK_OFFQ_CANCELING = 16LL,
+	WORK_OFFQ_FLAG_BITS = 1LL,
+	WORK_OFFQ_POOL_SHIFT = 5LL,
+	WORK_OFFQ_LEFT = 59LL,
+	WORK_OFFQ_POOL_BITS = 31LL,
+	WORK_OFFQ_POOL_NONE = 2147483647LL,
+	WORK_STRUCT_FLAG_MASK = 255LL,
+	WORK_STRUCT_WQ_DATA_MASK = -256LL,
+	WORK_STRUCT_NO_POOL = 68719476704LL,
+	WORK_BUSY_PENDING = 1LL,
+	WORK_BUSY_RUNNING = 2LL,
+	WORKER_DESC_LEN = 24LL,
+};
+
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
+
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	long unsigned int defer_start;
+	long unsigned int defer_warn;
+	u32 pages_state_hold_cnt;
+	unsigned int frag_offset;
+	struct page *frag_page;
+	long int frag_users;
+	u32 xdp_mem_id;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef long unsigned int vm_flags_t;
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	long unsigned int num_children;
+	long unsigned int num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+struct mempolicy {
+	atomic_t refcnt;
+	short unsigned int mode;
+	short unsigned int flags;
+	nodemask_t nodes;
+	int home_node;
+	union {
+		nodemask_t cpuset_mems_allowed;
+		nodemask_t user_nodemask;
+	} w;
+};
+
+struct vma_iterator {
+	struct ma_state mas;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block *head;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
 };
 
 struct rhash_head {
@@ -7740,6 +8695,24 @@
 	atomic_t nelems;
 };
 
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
+};
+
 struct fs_struct {
 	int users;
 	spinlock_t lock;
@@ -7750,9 +8723,48 @@
 	struct path pwd;
 };
 
-struct pipe_buffer;
+struct fdtable {
+	unsigned int max_fds;
+	struct file **fd;
+	long unsigned int *close_on_exec;
+	long unsigned int *open_fds;
+	long unsigned int *full_fds_bits;
+	struct callback_head rcu;
+};
 
-struct watch_queue;
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	long unsigned int close_on_exec_init[1];
+	long unsigned int open_fds_init[1];
+	long unsigned int full_fds_bits_init[1];
+	struct file *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct robust_list {
+	struct robust_list *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long int futex_offset;
+	struct robust_list *list_op_pending;
+};
+
+struct pipe_buffer;
 
 struct pipe_inode_info {
 	struct mutex mutex;
@@ -7762,44 +8774,47 @@
 	unsigned int tail;
 	unsigned int max_usage;
 	unsigned int ring_size;
-	bool note_loss;
 	unsigned int nr_accounted;
 	unsigned int readers;
 	unsigned int writers;
 	unsigned int files;
 	unsigned int r_counter;
 	unsigned int w_counter;
+	bool poll_usage;
 	struct page *tmp_page;
 	struct fasync_struct *fasync_readers;
 	struct fasync_struct *fasync_writers;
 	struct pipe_buffer *bufs;
 	struct user_struct *user;
-	struct watch_queue *watch_queue;
 };
 
-struct notifier_block;
-
-typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
-
-struct notifier_block {
-	notifier_fn_t notifier_call;
-	struct notifier_block *next;
-	int priority;
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
 };
 
-struct blocking_notifier_head {
-	struct rw_semaphore rwsem;
-	struct notifier_block *head;
-};
+struct bpf_run_ctx {};
 
-struct raw_notifier_head {
-	struct notifier_block *head;
-};
-
-struct vfsmount {
-	struct dentry *mnt_root;
-	struct super_block *mnt_sb;
-	int mnt_flags;
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
 };
 
 struct ld_semaphore {
@@ -7840,12 +8855,9 @@
 
 struct tty_ldisc;
 
-struct termiox;
-
 struct tty_port;
 
 struct tty_struct {
-	int magic;
 	struct kref kref;
 	struct device *dev;
 	struct tty_driver *driver;
@@ -7858,26 +8870,27 @@
 	struct mutex throttle_mutex;
 	struct rw_semaphore termios_rwsem;
 	struct mutex winsize_mutex;
-	spinlock_t ctrl_lock;
-	spinlock_t flow_lock;
 	struct ktermios termios;
 	struct ktermios termios_locked;
-	struct termiox *termiox;
 	char name[64];
-	struct pid *pgrp;
-	struct pid *session;
 	long unsigned int flags;
 	int count;
 	struct winsize winsize;
-	long unsigned int stopped: 1;
-	long unsigned int flow_stopped: 1;
-	int: 30;
-	long unsigned int unused: 62;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		long unsigned int unused[0];
+	} flow;
+	struct {
+		spinlock_t lock;
+		struct pid *pgrp;
+		struct pid *session;
+		unsigned char pktstatus;
+		bool packet;
+		long unsigned int unused[0];
+	} ctrl;
 	int hw_stopped;
-	long unsigned int ctrl_status: 8;
-	long unsigned int packet: 1;
-	int: 23;
-	long unsigned int unused_ctrl: 55;
 	unsigned int receive_room;
 	int flow_change;
 	struct tty_struct *link;
@@ -7896,39 +8909,2272 @@
 	struct tty_port *port;
 };
 
-typedef struct {
-	size_t written;
-	size_t count;
-	union {
-		char *buf;
-		void *data;
-	} arg;
-	int error;
-} read_descriptor_t;
+typedef int (*proc_visitor)(struct task_struct *, void *);
 
-struct posix_acl_entry {
-	short int e_tag;
-	short unsigned int e_perm;
+struct io_uring_cmd {
+	struct file *file;
+	const void *cmd;
 	union {
-		kuid_t e_uid;
-		kgid_t e_gid;
+		void (*task_work_cb)(struct io_uring_cmd *);
+		void *cookie;
+	};
+	u32 cmd_op;
+	u32 flags;
+	u8 pdu[32];
+};
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	long unsigned int size;
+	long unsigned int flags;
+	struct page **pages;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+};
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct ref_tracker_dir {};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse *prot_inuse;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_tls_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct netns_mib {
+	struct ipstats_mib *ip_statistics;
+	struct ipstats_mib *ipv6_statistics;
+	struct tcp_mib *tcp_statistics;
+	struct linux_mib *net_statistics;
+	struct udp_mib *udp_statistics;
+	struct udp_mib *udp_stats_in6;
+	struct linux_tls_mib *tls_statistics;
+	struct udp_mib *udplite_statistics;
+	struct udp_mib *udplite_stats_in6;
+	struct icmp_mib *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct udp_table;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct mr_table;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row tcp_death_row;
+	struct udp_table *udp_table;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table *fib_main;
+	struct fib_table *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	atomic_t fib_num_tclassid_users;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_raw_l3mdev_accept;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_l3mdev_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	unsigned int sysctl_tcp_child_ehash_entries;
+	long unsigned int sysctl_tcp_comp_sack_delay_ns;
+	long unsigned int sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops *tcp_congestion_control;
+	struct tcp_fastopen_context *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	long unsigned int tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	u8 sysctl_tcp_plb_enabled;
+	u8 sysctl_tcp_plb_idle_rehash_rounds;
+	u8 sysctl_tcp_plb_rehash_rounds;
+	u8 sysctl_tcp_plb_suspend_rto_sec;
+	int sysctl_tcp_plb_cong_thresh;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_udp_l3mdev_accept;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	unsigned int sysctl_udp_child_hash_entries;
+	long unsigned int *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct mr_table *mrt;
+	u32 sysctl_fib_multipath_hash_fields;
+	u8 sysctl_fib_multipath_use_neigh;
+	u8 sysctl_fib_multipath_hash_policy;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dst_entry;
+
+struct net_device;
+
+struct sk_buff;
+
+struct neighbour;
+
+struct dst_ops {
+	short unsigned int family;
+	unsigned int gc_thresh;
+	int (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *, int);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	long unsigned int icmpv6_ratemask[4];
+	long unsigned int *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	bool skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	long unsigned int ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	bool fib6_has_custom_rules;
+	unsigned int fib6_rules_require_fldissect;
+	unsigned int fib6_routes_require_src;
+	struct rt6_info *ip6_prohibit_entry;
+	struct rt6_info *ip6_blk_hole_entry;
+	struct fib6_table *fib6_local_tbl;
+	struct fib_rules_ops *fib6_rules_ops;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	struct list_head mr6_tables;
+	struct fib_rules_ops *mr6_rules_ops;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sctp_mib;
+
+struct netns_sctp {
+	struct sctp_mib *sctp_statistics;
+	struct proc_dir_entry *proc_net_sctp;
+	struct ctl_table_header *sysctl_header;
+	struct sock *ctl_sock;
+	struct sock *udp4_sock;
+	struct sock *udp6_sock;
+	int udp_port;
+	int encap_port;
+	struct list_head local_addr_list;
+	struct list_head addr_waitq;
+	struct timer_list addr_wq_timer;
+	struct list_head auto_asconf_splist;
+	spinlock_t addr_wq_lock;
+	spinlock_t local_addr_lock;
+	unsigned int rto_initial;
+	unsigned int rto_min;
+	unsigned int rto_max;
+	int rto_alpha;
+	int rto_beta;
+	int max_burst;
+	int cookie_preserve_enable;
+	char *sctp_hmac_alg;
+	unsigned int valid_cookie_life;
+	unsigned int sack_timeout;
+	unsigned int hb_interval;
+	unsigned int probe_interval;
+	int max_retrans_association;
+	int max_retrans_path;
+	int max_retrans_init;
+	int pf_retrans;
+	int ps_retrans;
+	int pf_enable;
+	int pf_expose;
+	int sndbuf_policy;
+	int rcvbuf_policy;
+	int default_auto_asconf;
+	int addip_enable;
+	int addip_noauth;
+	int prsctp_enable;
+	int reconf_enable;
+	int auth_enable;
+	int intl_enable;
+	int ecn_enable;
+	int scope_policy;
+	int rwnd_upd_shift;
+	long unsigned int max_autoclose;
+	int l3mdev_accept;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger *nf_loggers[11];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries *hooks_ipv4[5];
+	struct nf_hook_entries *hooks_ipv6[5];
+	struct nf_hook_entries *hooks_arp[3];
+	struct nf_hook_entries *hooks_bridge[5];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+};
+
+struct nf_ct_event_notifier;
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct netns_ct {
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat *stat;
+	struct nf_ct_event_notifier *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+	unsigned int labels_used;
+};
+
+struct netns_nftables {
+	u8 gencursor;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head *state_bydst;
+	struct hlist_head *state_bysrc;
+	struct hlist_head *state_byspi;
+	struct hlist_head *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	long: 64;
+	long: 64;
+};
+
+struct netns_ipvs;
+
+struct mpls_route;
+
+struct netns_mpls {
+	int ip_ttl_propagate;
+	int default_ttl;
+	size_t platform_labels;
+	struct mpls_route **platform_label;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	int ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct ref_tracker_dir notrefcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	long: 64;
+	struct netns_ipv4 ipv4;
+	struct netns_ipv6 ipv6;
+	struct netns_sctp sctp;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct netns_nftables nft;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_ipvs *ipvs;
+	struct netns_mpls mpls;
+	struct netns_xdp xdp;
+	struct sock *crypto_nlsk;
+	struct sock *diag_nlsk;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
 	};
 };
 
-struct posix_acl {
-	refcount_t a_refcount;
-	struct callback_head a_rcu;
-	unsigned int a_count;
-	struct posix_acl_entry a_entries[0];
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
 };
 
-typedef __u64 __addrpair;
+typedef struct poll_table_struct poll_table;
 
-typedef __u32 __portpair;
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
 
-typedef struct {
-	struct net *net;
-} possible_net_t;
+enum perf_branch_sample_type_shift {
+	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
+	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
+	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
+	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
+	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
+	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
+	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
+	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
+	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
+	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
+	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
+	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
+	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
+	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
+	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
+	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
+	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 18,
+	PERF_SAMPLE_BRANCH_MAX_SHIFT = 19,
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	__MAX_BPF_ATTACH_TYPE = 44,
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+struct bpf_prog_stats;
+
+struct bpf_prog_aux;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats *stats;
+	int *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	union {
+		struct {
+			struct {			} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {			} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct trace_buffer;
+
+struct trace_event_file;
+
+struct trace_event_buffer {
+	struct trace_buffer *buffer;
+	struct ring_buffer_event *event;
+	struct trace_event_file *trace_file;
+	void *entry;
+	unsigned int trace_ctx;
+	struct pt_regs *regs;
+};
+
+struct trace_subsystem_dir;
+
+struct trace_event_file {
+	struct list_head list;
+	struct trace_event_call *event_call;
+	struct event_filter *filter;
+	struct dentry *dir;
+	struct trace_array *tr;
+	struct trace_subsystem_dir *system;
+	struct list_head triggers;
+	long unsigned int flags;
+	atomic_t sm_ref;
+	atomic_t tm_ref;
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_CUSTOM = 512,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED = 1,
+	EVENT_FILE_FL_RECORDED_CMD = 2,
+	EVENT_FILE_FL_RECORDED_TGID = 4,
+	EVENT_FILE_FL_FILTERED = 8,
+	EVENT_FILE_FL_NO_SET_FILTER = 16,
+	EVENT_FILE_FL_SOFT_MODE = 32,
+	EVENT_FILE_FL_SOFT_DISABLED = 64,
+	EVENT_FILE_FL_TRIGGER_MODE = 128,
+	EVENT_FILE_FL_TRIGGER_COND = 256,
+	EVENT_FILE_FL_PID_FILTER = 512,
+	EVENT_FILE_FL_WAS_ENABLED = 1024,
+};
+
+enum {
+	FILTER_OTHER = 0,
+	FILTER_STATIC_STRING = 1,
+	FILTER_DYN_STRING = 2,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_COMM = 6,
+	FILTER_CPU = 7,
+};
+
+struct syscall_metadata {
+	const char *name;
+	int syscall_nr;
+	int nb_args;
+	const char **types;
+	const char **args;
+	struct list_head enter_fields;
+	struct trace_event_call *enter_event;
+	struct trace_event_call *exit_event;
+};
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+typedef unsigned int sk_buff_data_t;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				long unsigned int dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	union {
+		struct sock *sk;
+		int ip_defrag_offset;
+	};
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			long unsigned int _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		long unsigned int _sk_redir;
+	};
+	long unsigned int _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+};
+
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	int used;
+	int size;
+	int commit;
+	int lookahead;
+	int read;
+	bool flags;
+	long unsigned int data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	int (*write)(struct tty_struct *, const unsigned char *, int);
+	int (*put_char)(struct tty_struct *, unsigned char);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*proc_show)(struct seq_file *, void *);
+};
+
+struct tty_driver {
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short int type;
+	short int subtype;
+	struct ktermios init_termios;
+	long unsigned int flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	long unsigned int flags;
+	long unsigned int iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);
+	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, unsigned int);
+	int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*lookahead_buf)(struct tty_struct *, const unsigned char *, const unsigned char *, unsigned int);
+	struct module *owner;
+};
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_port_operations {
+	int (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, int);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+};
+
+struct tty_port_client_operations {
+	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const unsigned char *, const unsigned char *, unsigned int);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY = 1,
+	BPF_CGROUP_ITER_DESCENDANTS_PRE = 2,
+	BPF_CGROUP_ITER_DESCENDANTS_POST = 3,
+	BPF_CGROUP_ITER_ANCESTORS_UP = 4,
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 19,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+	BPF_MAP_TYPE_USER_RINGBUF = 31,
+	BPF_MAP_TYPE_CGRP_STORAGE = 32,
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+	};
+	struct {
+		__u32 target_fd;
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		__u32 target_fd;
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		__u32 prog_cnt;
+		__u64 prog_attach_flags;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		__u32 prog_fd;
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		__u32 new_prog_fd;
+		__u32 flags;
+		__u32 old_prog_fd;
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+enum btf_field_type {
+	BPF_SPIN_LOCK = 1,
+	BPF_TIMER = 2,
+	BPF_KPTR_UNREF = 4,
+	BPF_KPTR_REF = 8,
+	BPF_KPTR = 12,
+	BPF_LIST_HEAD = 16,
+	BPF_LIST_NODE = 32,
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+struct btf;
+
+struct btf_field_kptr {
+	struct btf *btf;
+	struct module *module;
+	btf_dtor_kfunc_t dtor;
+	u32 btf_id;
+};
+
+struct btf_record;
+
+struct btf_field_list_head {
+	struct btf *btf;
+	u32 value_btf_id;
+	u32 node_offset;
+	struct btf_record *value_rec;
+};
+
+struct btf_field {
+	u32 offset;
+	enum btf_field_type type;
+	union {
+		struct btf_field_kptr kptr;
+		struct btf_field_list_head list_head;
+	};
+};
+
+struct btf_record {
+	u32 cnt;
+	u32 field_mask;
+	int spin_lock_off;
+	int timer_off;
+	struct btf_field fields[0];
+};
+
+struct btf_field_offs {
+	u32 cnt;
+	u32 field_off[10];
+	u8 field_sz[10];
+};
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+enum bpf_iter_task_type {
+	BPF_TASK_ITER_ALL = 0,
+	BPF_TASK_ITER_TID = 1,
+	BPF_TASK_ITER_TGID = 2,
+};
+
+struct bpf_map;
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+	struct {
+		struct cgroup *start;
+		enum bpf_cgroup_iter_order order;
+	} cgroup;
+	struct {
+		enum bpf_iter_task_type type;
+		u32 pid;
+	} task;
+};
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct bpf_local_storage_map;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_update_batch)(struct bpf_map *, struct file *, const union bpf_attr *, union bpf_attr *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_map *, void *);
+	int (*map_push_elem)(struct bpf_map *, void *, u64);
+	int (*map_pop_elem)(struct bpf_map *, void *);
+	int (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(void *);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
+	int (*map_redirect)(struct bpf_map *, u64, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+};
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	void *security;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	u32 id;
+	struct btf_record *record;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	struct btf_field_offs *field_offs;
+	long: 64;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	struct work_struct work;
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
+};
+
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf_struct_metas;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf_struct_metas *struct_meta_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
+};
+
+struct bpf_ksym {
+	long unsigned int start;
+	long unsigned int end;
+	char name[512];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
+};
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info_aux;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	void *security;
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+};
+
+enum {
+	BTF_FIELDS_MAX = 10,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_RINGBUF = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	MEM_ALLOC = 524288,
+	PTR_TRUSTED = 1048576,
+	MEM_RCU = 2097152,
+	__BPF_TYPE_FLAG_MAX = 2097153,
+	__BPF_TYPE_LAST_FLAG = 2097152,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_RINGBUF_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 4194303,
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_RINGBUF_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	RET_PTR_TO_BTF_ID_TRUSTED = 1048584,
+	__BPF_RET_TYPE_LIMIT = 4194303,
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	CONST_PTR_TO_DYNPTR = 20,
+	__BPF_REG_TYPE_MAX = 21,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 4194303,
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 nr_args;
+	u8 arg_size[12];
+	u8 arg_flags[12];
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct ftrace_ops *fops;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u32 flags;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	u64 selector;
+	struct module *mod;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	long unsigned int clone_flags;
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
 
 struct in6_addr {
 	union {
@@ -7938,222 +11184,1442 @@
 	} in6_u;
 };
 
-struct hlist_nulls_node {
-	struct hlist_nulls_node *next;
-	struct hlist_nulls_node **pprev;
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_L2TPV3 = 30,
+	FLOW_DISSECTOR_KEY_MAX = 31,
 };
 
-struct proto;
-
-struct inet_timewait_death_row;
-
-struct sock_common {
-	union {
-		__addrpair skc_addrpair;
-		struct {
-			__be32 skc_daddr;
-			__be32 skc_rcv_saddr;
-		};
-	};
-	union {
-		unsigned int skc_hash;
-		__u16 skc_u16hashes[2];
-	};
-	union {
-		__portpair skc_portpair;
-		struct {
-			__be16 skc_dport;
-			__u16 skc_num;
-		};
-	};
-	short unsigned int skc_family;
-	volatile unsigned char skc_state;
-	unsigned char skc_reuse: 4;
-	unsigned char skc_reuseport: 1;
-	unsigned char skc_ipv6only: 1;
-	unsigned char skc_net_refcnt: 1;
-	int skc_bound_dev_if;
-	union {
-		struct hlist_node skc_bind_node;
-		struct hlist_node skc_portaddr_node;
-	};
-	struct proto *skc_prot;
-	possible_net_t skc_net;
-	struct in6_addr skc_v6_daddr;
-	struct in6_addr skc_v6_rcv_saddr;
-	atomic64_t skc_cookie;
-	union {
-		long unsigned int skc_flags;
-		struct sock *skc_listener;
-		struct inet_timewait_death_row *skc_tw_dr;
-	};
-	int skc_dontcopy_begin[0];
-	union {
-		struct hlist_node skc_node;
-		struct hlist_nulls_node skc_nulls_node;
-	};
-	short unsigned int skc_tx_queue_mapping;
-	short unsigned int skc_rx_queue_mapping;
-	union {
-		int skc_incoming_cpu;
-		u32 skc_rcv_wnd;
-		u32 skc_tw_rcv_nxt;
-	};
-	refcount_t skc_refcnt;
-	int skc_dontcopy_end[0];
-	union {
-		u32 skc_rxhash;
-		u32 skc_window_clamp;
-		u32 skc_tw_snd_nxt;
-	};
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTPKTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	__IPSTATS_MIB_MAX = 37,
 };
 
-typedef struct {
-	spinlock_t slock;
-	int owned;
-	wait_queue_head_t wq;
-} socket_lock_t;
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	__ICMP_MIB_MAX = 28,
+};
 
-struct sk_buff;
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	__ICMP6_MIB_MAX = 6,
+};
 
-struct sk_buff_head {
-	struct sk_buff *next;
-	struct sk_buff *prev;
-	__u32 qlen;
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	LINUX_MIB_TCPPLBREHASH = 126,
+	__LINUX_MIB_MAX = 127,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+enum {
+	LINUX_MIB_TLSNUM = 0,
+	LINUX_MIB_TLSCURRTXSW = 1,
+	LINUX_MIB_TLSCURRRXSW = 2,
+	LINUX_MIB_TLSCURRTXDEVICE = 3,
+	LINUX_MIB_TLSCURRRXDEVICE = 4,
+	LINUX_MIB_TLSTXSW = 5,
+	LINUX_MIB_TLSRXSW = 6,
+	LINUX_MIB_TLSTXDEVICE = 7,
+	LINUX_MIB_TLSRXDEVICE = 8,
+	LINUX_MIB_TLSDECRYPTERROR = 9,
+	LINUX_MIB_TLSRXDEVICERESYNC = 10,
+	LINUX_MIB_TLSDECRYPTRETRY = 11,
+	LINUX_MIB_TLSRXNOPADVIOL = 12,
+	__LINUX_MIB_TLSMAX = 13,
+};
+
+struct ipstats_mib {
+	u64 mibs[37];
+	struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+	long unsigned int mibs[28];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	long unsigned int mibs[6];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+	long unsigned int mibs[16];
+};
+
+struct udp_mib {
+	long unsigned int mibs[10];
+};
+
+struct linux_mib {
+	long unsigned int mibs[127];
+};
+
+struct linux_tls_mib {
+	long unsigned int mibs[13];
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long int high_thresh;
+	long int low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 56;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+	long: 64;
+	long: 64;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
 	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	long unsigned int _metrics;
+	long unsigned int expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	short unsigned int flags;
+	short int obsolete;
+	short unsigned int header_len;
+	short unsigned int trailer_len;
+	atomic_t __refcnt;
+	int __use;
+	long unsigned int lastuse;
+	struct lwtunnel_state *lwtstate;
+	struct callback_head callback_head;
+	short int error;
+	short int __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_NUMPROTO = 11,
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = -1,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	long unsigned int private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[3];
+	u8 chunks;
+	char data[0];
+};
+
+enum skb_ext_id {
+	SKB_EXT_BRIDGE_NF = 0,
+	SKB_EXT_SEC_PATH = 1,
+	TC_SKB_EXT = 2,
+	SKB_EXT_NUM = 3,
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_referenced = 1,
+	PG_uptodate = 2,
+	PG_dirty = 3,
+	PG_lru = 4,
+	PG_active = 5,
+	PG_workingset = 6,
+	PG_waiters = 7,
+	PG_error = 8,
+	PG_slab = 9,
+	PG_owner_priv_1 = 10,
+	PG_arch_1 = 11,
+	PG_reserved = 12,
+	PG_private = 13,
+	PG_private_2 = 14,
+	PG_writeback = 15,
+	PG_head = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	__NR_PAGEFLAGS = 22,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 10,
+	PG_swapcache = 10,
+	PG_fscache = 14,
+	PG_pinned = 10,
+	PG_savepinned = 3,
+	PG_foreign = 10,
+	PG_xen_remapped = 10,
+	PG_slob_free = 13,
+	PG_isolated = 18,
+	PG_reported = 2,
+	PG_vmemmap_self_hosted = 10,
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	unsigned int lsm_flags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char *uptr;
+	int refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
+	struct module *owner;
+	char *buffer[8];
+};
+
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	long unsigned int magic;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
+	};
+};
+
+typedef struct siginfo siginfo_t;
+
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
+};
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	long unsigned int timeout;
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
+	union {
+		struct {
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
+	};
+};
+
+struct ptrace_rseq_configuration {
+	__u64 rseq_abi_pointer;
+	__u32 rseq_abi_size;
+	__u32 signature;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+struct user_regset;
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+typedef __s16 s16;
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+struct bpf_offloaded_map;
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+};
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 typedef u64 netdev_features_t;
 
-struct sock_cgroup_data {
+struct net_device_stats {
 	union {
-		struct {
-			u8 is_data: 1;
-			u8 no_refcnt: 1;
-			u8 unused: 6;
-			u8 padding;
-			u16 prioidx;
-			u32 classid;
-		};
-		u64 val;
+		long unsigned int rx_packets;
+		atomic_long_t __rx_packets;
+	};
+	union {
+		long unsigned int tx_packets;
+		atomic_long_t __tx_packets;
+	};
+	union {
+		long unsigned int rx_bytes;
+		atomic_long_t __rx_bytes;
+	};
+	union {
+		long unsigned int tx_bytes;
+		atomic_long_t __tx_bytes;
+	};
+	union {
+		long unsigned int rx_errors;
+		atomic_long_t __rx_errors;
+	};
+	union {
+		long unsigned int tx_errors;
+		atomic_long_t __tx_errors;
+	};
+	union {
+		long unsigned int rx_dropped;
+		atomic_long_t __rx_dropped;
+	};
+	union {
+		long unsigned int tx_dropped;
+		atomic_long_t __tx_dropped;
+	};
+	union {
+		long unsigned int multicast;
+		atomic_long_t __multicast;
+	};
+	union {
+		long unsigned int collisions;
+		atomic_long_t __collisions;
+	};
+	union {
+		long unsigned int rx_length_errors;
+		atomic_long_t __rx_length_errors;
+	};
+	union {
+		long unsigned int rx_over_errors;
+		atomic_long_t __rx_over_errors;
+	};
+	union {
+		long unsigned int rx_crc_errors;
+		atomic_long_t __rx_crc_errors;
+	};
+	union {
+		long unsigned int rx_frame_errors;
+		atomic_long_t __rx_frame_errors;
+	};
+	union {
+		long unsigned int rx_fifo_errors;
+		atomic_long_t __rx_fifo_errors;
+	};
+	union {
+		long unsigned int rx_missed_errors;
+		atomic_long_t __rx_missed_errors;
+	};
+	union {
+		long unsigned int tx_aborted_errors;
+		atomic_long_t __tx_aborted_errors;
+	};
+	union {
+		long unsigned int tx_carrier_errors;
+		atomic_long_t __tx_carrier_errors;
+	};
+	union {
+		long unsigned int tx_fifo_errors;
+		atomic_long_t __tx_fifo_errors;
+	};
+	union {
+		long unsigned int tx_heartbeat_errors;
+		atomic_long_t __tx_heartbeat_errors;
+	};
+	union {
+		long unsigned int tx_window_errors;
+		atomic_long_t __tx_window_errors;
+	};
+	union {
+		long unsigned int rx_compressed;
+		atomic_long_t __rx_compressed;
+	};
+	union {
+		long unsigned int tx_compressed;
+		atomic_long_t __tx_compressed;
 	};
 };
 
-struct sk_filter;
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
 
-struct socket_wq;
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
 
-struct xfrm_policy;
+typedef enum rx_handler_result rx_handler_result_t;
 
-struct dst_entry;
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
 
-struct socket;
+typedef struct {
+	struct net *net;
+} possible_net_t;
 
-struct net_device;
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
 
-struct sock_reuseport;
+struct pcpu_dstats;
 
-struct bpf_local_storage;
+struct garp_port;
 
-struct sock {
-	struct sock_common __sk_common;
-	socket_lock_t sk_lock;
-	atomic_t sk_drops;
-	int sk_rcvlowat;
-	struct sk_buff_head sk_error_queue;
-	struct sk_buff *sk_rx_skb_cache;
-	struct sk_buff_head sk_receive_queue;
+struct mrp_port;
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct sfp_bus;
+
+struct udp_tunnel_nic;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct l3mdev_ops;
+
+struct ndisc_ops;
+
+struct tlsdev_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct wireless_dev;
+
+struct netdev_rx_queue;
+
+struct mini_Qdisc;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct netpoll_info;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct rtnl_link_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct macsec_ops;
+
+struct udp_tunnel_nic_info;
+
+struct rtnl_hw_stats64;
+
+struct devlink_port;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias *ifalias;
+	long unsigned int mem_end;
+	long unsigned int mem_start;
+	long unsigned int base_addr;
+	long unsigned int state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
 	struct {
-		atomic_t rmem_alloc;
-		int len;
-		struct sk_buff *head;
-		struct sk_buff *tail;
-	} sk_backlog;
-	int sk_forward_alloc;
-	unsigned int sk_ll_usec;
-	unsigned int sk_napi_id;
-	int sk_rcvbuf;
-	struct sk_filter *sk_filter;
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	long long unsigned int priv_flags;
+	const struct net_device_ops *netdev_ops;
+	int ifindex;
+	short unsigned int gflags;
+	short unsigned int hard_header_len;
+	unsigned int mtu;
+	short unsigned int needed_headroom;
+	short unsigned int needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	short unsigned int type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct l3mdev_ops *l3mdev_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct tlsdev_ops *tlsdev_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	short unsigned int neigh_priv_len;
+	short unsigned int dev_id;
+	short unsigned int dev_port;
+	short unsigned int padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device *ip_ptr;
+	struct inet6_dev *ip6_ptr;
+	struct vlan_info *vlan_info;
+	struct wireless_dev *ieee80211_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog *xdp_prog;
+	long unsigned int gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	rx_handler_func_t *rx_handler;
+	void *rx_handler_data;
+	struct mini_Qdisc *miniq_ingress;
+	struct netdev_queue *ingress_queue;
+	struct nf_hook_entries *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue *xdp_bulkq;
+	struct xps_dev_maps *xps_maps[2];
+	struct mini_Qdisc *miniq_egress;
+	struct nf_hook_entries *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	struct netpoll_info *npinfo;
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
 	union {
-		struct socket_wq *sk_wq;
-		struct socket_wq *sk_wq_raw;
+		struct pcpu_lstats *lstats;
+		struct pcpu_sw_netstats *tstats;
+		struct pcpu_dstats *dstats;
 	};
-	struct xfrm_policy *sk_policy[2];
-	struct dst_entry *sk_rx_dst;
-	struct dst_entry *sk_dst_cache;
-	atomic_t sk_omem_alloc;
-	int sk_sndbuf;
-	int sk_wmem_queued;
-	refcount_t sk_wmem_alloc;
-	long unsigned int sk_tsq_flags;
-	union {
-		struct sk_buff *sk_send_head;
-		struct rb_root tcp_rtx_queue;
-	};
-	struct sk_buff *sk_tx_skb_cache;
-	struct sk_buff_head sk_write_queue;
-	__s32 sk_peek_off;
-	int sk_write_pending;
-	__u32 sk_dst_pending_confirm;
-	u32 sk_pacing_status;
-	long int sk_sndtimeo;
-	struct timer_list sk_timer;
-	__u32 sk_priority;
-	__u32 sk_mark;
-	long unsigned int sk_pacing_rate;
-	long unsigned int sk_max_pacing_rate;
-	struct page_frag sk_frag;
-	netdev_features_t sk_route_caps;
-	netdev_features_t sk_route_nocaps;
-	netdev_features_t sk_route_forced_caps;
-	int sk_gso_type;
-	unsigned int sk_gso_max_size;
-	gfp_t sk_allocation;
-	__u32 sk_txhash;
-	u8 sk_padding: 1;
-	u8 sk_kern_sock: 1;
-	u8 sk_no_check_tx: 1;
-	u8 sk_no_check_rx: 1;
-	u8 sk_userlocks: 4;
-	u8 sk_pacing_shift;
-	u16 sk_type;
-	u16 sk_protocol;
-	u16 sk_gso_max_segs;
-	long unsigned int sk_lingertime;
-	struct proto *sk_prot_creator;
-	rwlock_t sk_callback_lock;
-	int sk_err;
-	int sk_err_soft;
-	u32 sk_ack_backlog;
-	u32 sk_max_ack_backlog;
-	kuid_t sk_uid;
-	struct pid *sk_peer_pid;
-	const struct cred *sk_peer_cred;
-	long int sk_rcvtimeo;
-	ktime_t sk_stamp;
-	u16 sk_tsflags;
-	u8 sk_shutdown;
-	u32 sk_tskey;
-	atomic_t sk_zckey;
-	u8 sk_clockid;
-	u8 sk_txtime_deadline_mode: 1;
-	u8 sk_txtime_report_errors: 1;
-	u8 sk_txtime_unused: 6;
-	struct socket *sk_socket;
-	void *sk_user_data;
-	void *sk_security;
-	struct sock_cgroup_data sk_cgrp_data;
-	struct mem_cgroup *sk_memcg;
-	void (*sk_state_change)(struct sock *);
-	void (*sk_data_ready)(struct sock *);
-	void (*sk_write_space)(struct sock *);
-	void (*sk_error_report)(struct sock *);
-	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
-	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
-	void (*sk_destruct)(struct sock *);
-	struct sock_reuseport *sk_reuseport_cb;
-	struct bpf_local_storage *sk_bpf_storage;
-	struct callback_head sk_rcu;
+	struct garp_port *garp_port;
+	struct mrp_port *mrp_port;
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	unsigned int fcoe_ddp_xid;
+	struct netprio_map *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct macsec_ops *macsec_ops;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	struct devlink_port *devlink_port;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
 };
 
 typedef short unsigned int __kernel_sa_family_t;
@@ -8162,21 +12628,13 @@
 
 struct sockaddr {
 	sa_family_t sa_family;
-	char sa_data[14];
-};
-
-struct msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iov_iter msg_iter;
 	union {
-		void *msg_control;
-		void *msg_control_user;
+		char sa_data_min[14];
+		struct {
+			struct {			} __empty_sa_data;
+			char sa_data[0];
+		};
 	};
-	bool msg_control_is_user: 1;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-	struct kiocb *msg_iocb;
 };
 
 typedef struct {
@@ -8275,2418 +12733,50 @@
 	} ifr_ifru;
 };
 
-struct termiox {
-	__u16 x_hflag;
-	__u16 x_cflag;
-	__u16 x_rflag[5];
-	__u16 x_sflag;
-};
-
-struct serial_icounter_struct;
-
-struct serial_struct;
-
-struct tty_operations {
-	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
-	int (*install)(struct tty_driver *, struct tty_struct *);
-	void (*remove)(struct tty_driver *, struct tty_struct *);
-	int (*open)(struct tty_struct *, struct file *);
-	void (*close)(struct tty_struct *, struct file *);
-	void (*shutdown)(struct tty_struct *);
-	void (*cleanup)(struct tty_struct *);
-	int (*write)(struct tty_struct *, const unsigned char *, int);
-	int (*put_char)(struct tty_struct *, unsigned char);
-	void (*flush_chars)(struct tty_struct *);
-	int (*write_room)(struct tty_struct *);
-	int (*chars_in_buffer)(struct tty_struct *);
-	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	void (*throttle)(struct tty_struct *);
-	void (*unthrottle)(struct tty_struct *);
-	void (*stop)(struct tty_struct *);
-	void (*start)(struct tty_struct *);
-	void (*hangup)(struct tty_struct *);
-	int (*break_ctl)(struct tty_struct *, int);
-	void (*flush_buffer)(struct tty_struct *);
-	void (*set_ldisc)(struct tty_struct *);
-	void (*wait_until_sent)(struct tty_struct *, int);
-	void (*send_xchar)(struct tty_struct *, char);
-	int (*tiocmget)(struct tty_struct *);
-	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
-	int (*resize)(struct tty_struct *, struct winsize *);
-	int (*set_termiox)(struct tty_struct *, struct termiox *);
-	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
-	int (*get_serial)(struct tty_struct *, struct serial_struct *);
-	int (*set_serial)(struct tty_struct *, struct serial_struct *);
-	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
-	int (*poll_init)(struct tty_driver *, int, char *);
-	int (*poll_get_char)(struct tty_driver *, int);
-	void (*poll_put_char)(struct tty_driver *, int, char);
-	int (*proc_show)(struct seq_file *, void *);
-};
-
-struct proc_dir_entry;
-
-struct tty_driver {
-	int magic;
-	struct kref kref;
-	struct cdev **cdevs;
-	struct module *owner;
-	const char *driver_name;
-	const char *name;
-	int name_base;
-	int major;
-	int minor_start;
-	unsigned int num;
-	short int type;
-	short int subtype;
-	struct ktermios init_termios;
-	long unsigned int flags;
-	struct proc_dir_entry *proc_entry;
-	struct tty_driver *other;
-	struct tty_struct **ttys;
-	struct tty_port **ports;
-	struct ktermios **termios;
-	void *driver_state;
-	const struct tty_operations *ops;
-	struct list_head tty_drivers;
-};
-
-struct tty_buffer {
-	union {
-		struct tty_buffer *next;
-		struct llist_node free;
-	};
-	int used;
-	int size;
-	int commit;
-	int read;
-	int flags;
-	long unsigned int data[0];
-};
-
-struct tty_bufhead {
-	struct tty_buffer *head;
-	struct work_struct work;
-	struct mutex lock;
-	atomic_t priority;
-	struct tty_buffer sentinel;
-	struct llist_head free;
-	atomic_t mem_used;
-	int mem_limit;
-	struct tty_buffer *tail;
-};
-
-struct tty_port_operations;
-
-struct tty_port_client_operations;
-
-struct tty_port {
-	struct tty_bufhead buf;
-	struct tty_struct *tty;
-	struct tty_struct *itty;
-	const struct tty_port_operations *ops;
-	const struct tty_port_client_operations *client_ops;
-	spinlock_t lock;
-	int blocked_open;
-	int count;
-	wait_queue_head_t open_wait;
-	wait_queue_head_t delta_msr_wait;
-	long unsigned int flags;
-	long unsigned int iflags;
-	unsigned char console: 1;
-	unsigned char low_latency: 1;
-	struct mutex mutex;
-	struct mutex buf_mutex;
-	unsigned char *xmit_buf;
-	unsigned int close_delay;
-	unsigned int closing_wait;
-	int drain_delay;
-	struct kref kref;
-	void *client_data;
-};
-
-struct tty_ldisc_ops {
-	int magic;
-	char *name;
-	int num;
-	int flags;
-	int (*open)(struct tty_struct *);
-	void (*close)(struct tty_struct *);
-	void (*flush_buffer)(struct tty_struct *);
-	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t);
-	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
-	int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
-	int (*hangup)(struct tty_struct *);
-	void (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);
-	void (*write_wakeup)(struct tty_struct *);
-	void (*dcd_change)(struct tty_struct *, unsigned int);
-	int (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);
-	struct module *owner;
-	int refcount;
-};
-
-struct tty_ldisc {
-	struct tty_ldisc_ops *ops;
-	struct tty_struct *tty;
-};
-
-struct tty_port_operations {
-	int (*carrier_raised)(struct tty_port *);
-	void (*dtr_rts)(struct tty_port *, int);
-	void (*shutdown)(struct tty_port *);
-	int (*activate)(struct tty_port *, struct tty_struct *);
-	void (*destruct)(struct tty_port *);
-};
-
-struct tty_port_client_operations {
-	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct tty_port *);
-};
-
-struct prot_inuse;
-
-struct netns_core {
-	struct ctl_table_header *sysctl_hdr;
-	int sysctl_somaxconn;
-	int *sock_inuse;
-	struct prot_inuse *prot_inuse;
-};
-
-struct tcp_mib;
-
-struct ipstats_mib;
-
-struct linux_mib;
-
-struct udp_mib;
-
-struct icmp_mib;
-
-struct icmpmsg_mib;
-
-struct icmpv6_mib;
-
-struct icmpv6msg_mib;
-
-struct linux_tls_mib;
-
-struct mptcp_mib;
-
-struct netns_mib {
-	struct tcp_mib *tcp_statistics;
-	struct ipstats_mib *ip_statistics;
-	struct linux_mib *net_statistics;
-	struct udp_mib *udp_statistics;
-	struct udp_mib *udplite_statistics;
-	struct icmp_mib *icmp_statistics;
-	struct icmpmsg_mib *icmpmsg_statistics;
-	struct proc_dir_entry *proc_net_devsnmp6;
-	struct udp_mib *udp_stats_in6;
-	struct udp_mib *udplite_stats_in6;
-	struct ipstats_mib *ipv6_statistics;
-	struct icmpv6_mib *icmpv6_statistics;
-	struct icmpv6msg_mib *icmpv6msg_statistics;
-	struct linux_tls_mib *tls_statistics;
-	struct mptcp_mib *mptcp_statistics;
-};
-
-struct netns_packet {
-	struct mutex sklist_lock;
-	struct hlist_head sklist;
-};
-
-struct netns_unix {
-	int sysctl_max_dgram_qlen;
-	struct ctl_table_header *ctl;
-};
-
-struct netns_nexthop {
-	struct rb_root rb_root;
-	struct hlist_head *devhash;
-	unsigned int seq;
-	u32 last_id_allocated;
-	struct blocking_notifier_head notifier_chain;
-};
-
-struct local_ports {
-	seqlock_t lock;
-	int range[2];
-	bool warned;
-};
-
-struct inet_hashinfo;
-
-struct inet_timewait_death_row {
-	atomic_t tw_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_hashinfo *hashinfo;
-	int sysctl_max_tw_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ping_group_range {
-	seqlock_t lock;
-	kgid_t range[2];
-};
-
-typedef struct {
-	u64 key[2];
-} siphash_key_t;
-
-struct ipv4_devconf;
-
-struct ip_ra_chain;
-
-struct fib_rules_ops;
-
-struct fib_table;
-
-struct inet_peer_base;
-
-struct fqdir;
-
-struct xt_table;
-
-struct tcp_congestion_ops;
-
-struct tcp_fastopen_context;
-
-struct fib_notifier_ops;
-
-struct netns_ipv4 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	int fib_num_tclassid_users;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_autobind_reuse;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_raw_l3mdev_accept;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_nexthop_compat_mode;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_l3mdev_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_no_ssthresh_metrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	long unsigned int sysctl_tcp_comp_sack_slack_ns;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_tcp_reflect_tos;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_udp_l3mdev_accept;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct list_head mr_tables;
-	struct fib_rules_ops *mr_rules_ops;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_sysctl_ipv6 {
-	struct ctl_table_header *hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *icmp_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *xfrm6_hdr;
-	int bindv6only;
-	int flush_delay;
-	int ip6_rt_max_size;
-	int ip6_rt_gc_min_interval;
-	int ip6_rt_gc_timeout;
-	int ip6_rt_gc_interval;
-	int ip6_rt_gc_elasticity;
-	int ip6_rt_mtu_expires;
-	int ip6_rt_min_advmss;
-	int multipath_hash_policy;
-	int flowlabel_consistency;
-	int auto_flowlabels;
-	int icmpv6_time;
-	int icmpv6_echo_ignore_all;
-	int icmpv6_echo_ignore_multicast;
-	int icmpv6_echo_ignore_anycast;
-	long unsigned int icmpv6_ratemask[4];
-	long unsigned int *icmpv6_ratemask_ptr;
-	int anycast_src_echo_reply;
-	int ip_nonlocal_bind;
-	int fwmark_reflect;
-	int idgen_retries;
-	int idgen_delay;
-	int flowlabel_state_ranges;
-	int flowlabel_reflect;
-	int max_dst_opts_cnt;
-	int max_hbh_opts_cnt;
-	int max_dst_opts_len;
-	int max_hbh_opts_len;
-	int seg6_flowlabel;
-	bool skip_notify_on_dev_down;
-};
-
-struct neighbour;
-
-struct dst_ops {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
-	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ipv6_devconf;
-
-struct fib6_info;
-
-struct rt6_info;
-
-struct rt6_statistics;
-
-struct fib6_table;
-
-struct seg6_pernet_data;
-
-struct netns_ipv6 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	unsigned int fib6_routes_require_src;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct list_head mr6_tables;
-	struct fib_rules_ops *mr6_rules_ops;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
-	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-};
-
-struct netns_sysctl_lowpan {
-	struct ctl_table_header *frags_hdr;
-};
-
-struct netns_ieee802154_lowpan {
-	struct netns_sysctl_lowpan sysctl;
-	struct fqdir *fqdir;
-};
-
-struct sctp_mib;
-
-struct netns_sctp {
-	struct sctp_mib *sctp_statistics;
-	struct proc_dir_entry *proc_net_sctp;
-	struct ctl_table_header *sysctl_header;
-	struct sock *ctl_sock;
-	struct list_head local_addr_list;
-	struct list_head addr_waitq;
-	struct timer_list addr_wq_timer;
-	struct list_head auto_asconf_splist;
-	spinlock_t addr_wq_lock;
-	spinlock_t local_addr_lock;
-	unsigned int rto_initial;
-	unsigned int rto_min;
-	unsigned int rto_max;
-	int rto_alpha;
-	int rto_beta;
-	int max_burst;
-	int cookie_preserve_enable;
-	char *sctp_hmac_alg;
-	unsigned int valid_cookie_life;
-	unsigned int sack_timeout;
-	unsigned int hb_interval;
-	int max_retrans_association;
-	int max_retrans_path;
-	int max_retrans_init;
-	int pf_retrans;
-	int ps_retrans;
-	int pf_enable;
-	int pf_expose;
-	int sndbuf_policy;
-	int rcvbuf_policy;
-	int default_auto_asconf;
-	int addip_enable;
-	int addip_noauth;
-	int prsctp_enable;
-	int reconf_enable;
-	int auth_enable;
-	int intl_enable;
-	int ecn_enable;
-	int scope_policy;
-	int rwnd_upd_shift;
-	long unsigned int max_autoclose;
-};
-
-struct netns_dccp {
-	struct sock *v4_ctl_sk;
-	struct sock *v6_ctl_sk;
-};
-
-struct nf_queue_handler;
-
-struct nf_logger;
-
-struct nf_hook_entries;
-
-struct netns_nf {
-	struct proc_dir_entry *proc_netfilter;
-	const struct nf_queue_handler *queue_handler;
-	const struct nf_logger *nf_loggers[13];
-	struct ctl_table_header *nf_log_dir_header;
-	struct nf_hook_entries *hooks_ipv4[5];
-	struct nf_hook_entries *hooks_ipv6[5];
-	struct nf_hook_entries *hooks_arp[3];
-	struct nf_hook_entries *hooks_bridge[5];
-	struct nf_hook_entries *hooks_decnet[7];
-	bool defrag_ipv4;
-	bool defrag_ipv6;
-};
-
-struct ebt_table;
-
-struct netns_xt {
-	struct list_head tables[13];
-	bool notrack_deprecated_warning;
-	bool clusterip_deprecated_warning;
-	struct ebt_table *broute_table;
-	struct ebt_table *frame_filter;
-	struct ebt_table *frame_nat;
-};
-
-struct nf_generic_net {
-	unsigned int timeout;
-};
-
-struct nf_tcp_net {
-	unsigned int timeouts[14];
-	int tcp_loose;
-	int tcp_be_liberal;
-	int tcp_max_retrans;
-};
-
-struct nf_udp_net {
-	unsigned int timeouts[2];
-};
-
-struct nf_icmp_net {
-	unsigned int timeout;
-};
-
-struct nf_dccp_net {
-	int dccp_loose;
-	unsigned int dccp_timeout[10];
-};
-
-struct nf_sctp_net {
-	unsigned int timeouts[10];
-};
-
-struct nf_gre_net {
-	struct list_head keymap_list;
-	unsigned int timeouts[2];
-};
-
-struct nf_ip_net {
-	struct nf_generic_net generic;
-	struct nf_tcp_net tcp;
-	struct nf_udp_net udp;
-	struct nf_icmp_net icmp;
-	struct nf_icmp_net icmpv6;
-	struct nf_dccp_net dccp;
-	struct nf_sctp_net sctp;
-	struct nf_gre_net gre;
-};
-
-struct ct_pcpu;
-
-struct ip_conntrack_stat;
-
-struct nf_ct_event_notifier;
-
-struct nf_exp_event_notifier;
-
-struct netns_ct {
-	atomic_t count;
-	unsigned int expect_count;
-	struct delayed_work ecache_dwork;
-	bool ecache_dwork_pending;
-	bool auto_assign_helper_warned;
-	struct ctl_table_header *sysctl_header;
-	unsigned int sysctl_log_invalid;
-	int sysctl_events;
-	int sysctl_acct;
-	int sysctl_auto_assign_helper;
-	int sysctl_tstamp;
-	int sysctl_checksum;
-	struct ct_pcpu *pcpu_lists;
-	struct ip_conntrack_stat *stat;
-	struct nf_ct_event_notifier *nf_conntrack_event_cb;
-	struct nf_exp_event_notifier *nf_expect_event_cb;
-	struct nf_ip_net nf_ct_proto;
-	unsigned int labels_used;
-};
-
-struct netns_nftables {
-	struct list_head tables;
-	struct list_head commit_list;
-	struct list_head module_list;
-	struct list_head notify_list;
-	struct mutex commit_mutex;
-	unsigned int base_seq;
-	u8 gencursor;
-	u8 validate_state;
-};
-
-struct netns_nf_frag {
-	struct fqdir *fqdir;
-};
-
-struct netns_bpf {
-	struct bpf_prog_array *run_array[2];
-	struct bpf_prog *progs[2];
-	struct list_head links[2];
-};
-
-struct xfrm_policy_hash {
-	struct hlist_head *table;
-	unsigned int hmask;
-	u8 dbits4;
-	u8 sbits4;
-	u8 dbits6;
-	u8 sbits6;
-};
-
-struct xfrm_policy_hthresh {
-	struct work_struct work;
-	seqlock_t lock;
-	u8 lbits4;
-	u8 rbits4;
-	u8 lbits6;
-	u8 rbits6;
-};
-
-struct netns_xfrm {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops xfrm4_dst_ops;
-	struct dst_ops xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_ipvs;
-
-struct mpls_route;
-
-struct netns_mpls {
-	int ip_ttl_propagate;
-	int default_ttl;
-	size_t platform_labels;
-	struct mpls_route **platform_label;
-	struct ctl_table_header *ctl;
-};
-
-struct can_dev_rcv_lists;
-
-struct can_pkg_stats;
-
-struct can_rcv_lists_stats;
-
-struct netns_can {
-	struct proc_dir_entry *proc_dir;
-	struct proc_dir_entry *pde_stats;
-	struct proc_dir_entry *pde_reset_stats;
-	struct proc_dir_entry *pde_rcvlist_all;
-	struct proc_dir_entry *pde_rcvlist_fil;
-	struct proc_dir_entry *pde_rcvlist_inv;
-	struct proc_dir_entry *pde_rcvlist_sff;
-	struct proc_dir_entry *pde_rcvlist_eff;
-	struct proc_dir_entry *pde_rcvlist_err;
-	struct proc_dir_entry *bcmproc_dir;
-	struct can_dev_rcv_lists *rx_alldev_list;
-	spinlock_t rcvlists_lock;
-	struct timer_list stattimer;
-	struct can_pkg_stats *pkg_stats;
-	struct can_rcv_lists_stats *rcv_lists_stats;
-	struct hlist_head cgw_list;
-};
-
-struct netns_xdp {
-	struct mutex lock;
-	struct hlist_head list;
-};
-
-struct uevent_sock;
-
-struct net_generic;
-
-struct net {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct idr netns_ids;
-	struct ns_common ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4 ipv4;
-	struct netns_ipv6 ipv6;
-	struct netns_ieee802154_lowpan ieee802154_lowpan;
-	struct netns_sctp sctp;
-	struct netns_dccp dccp;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nftables nft;
-	struct netns_nf_frag nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct list_head nfnl_acct_list;
-	struct list_head nfct_timeout_list;
-	struct sk_buff_head wext_nlevents;
-	struct net_generic *gen;
-	struct netns_bpf bpf;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm xfrm;
-	atomic64_t net_cookie;
-	struct netns_ipvs *ipvs;
-	struct netns_mpls mpls;
-	struct netns_can can;
-	struct netns_xdp xdp;
-	struct sock *crypto_nlsk;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	local64_t v;
-} u64_stats_t;
-
-struct bpf_insn {
-	__u8 code;
-	__u8 dst_reg: 4;
-	__u8 src_reg: 4;
-	__s16 off;
-	__s32 imm;
-};
-
-enum bpf_map_type {
-	BPF_MAP_TYPE_UNSPEC = 0,
-	BPF_MAP_TYPE_HASH = 1,
-	BPF_MAP_TYPE_ARRAY = 2,
-	BPF_MAP_TYPE_PROG_ARRAY = 3,
-	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
-	BPF_MAP_TYPE_PERCPU_HASH = 5,
-	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
-	BPF_MAP_TYPE_STACK_TRACE = 7,
-	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
-	BPF_MAP_TYPE_LRU_HASH = 9,
-	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
-	BPF_MAP_TYPE_LPM_TRIE = 11,
-	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
-	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
-	BPF_MAP_TYPE_DEVMAP = 14,
-	BPF_MAP_TYPE_SOCKMAP = 15,
-	BPF_MAP_TYPE_CPUMAP = 16,
-	BPF_MAP_TYPE_XSKMAP = 17,
-	BPF_MAP_TYPE_SOCKHASH = 18,
-	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
-	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
-	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
-	BPF_MAP_TYPE_QUEUE = 22,
-	BPF_MAP_TYPE_STACK = 23,
-	BPF_MAP_TYPE_SK_STORAGE = 24,
-	BPF_MAP_TYPE_DEVMAP_HASH = 25,
-	BPF_MAP_TYPE_STRUCT_OPS = 26,
-	BPF_MAP_TYPE_RINGBUF = 27,
-	BPF_MAP_TYPE_INODE_STORAGE = 28,
-};
-
-enum bpf_prog_type {
-	BPF_PROG_TYPE_UNSPEC = 0,
-	BPF_PROG_TYPE_SOCKET_FILTER = 1,
-	BPF_PROG_TYPE_KPROBE = 2,
-	BPF_PROG_TYPE_SCHED_CLS = 3,
-	BPF_PROG_TYPE_SCHED_ACT = 4,
-	BPF_PROG_TYPE_TRACEPOINT = 5,
-	BPF_PROG_TYPE_XDP = 6,
-	BPF_PROG_TYPE_PERF_EVENT = 7,
-	BPF_PROG_TYPE_CGROUP_SKB = 8,
-	BPF_PROG_TYPE_CGROUP_SOCK = 9,
-	BPF_PROG_TYPE_LWT_IN = 10,
-	BPF_PROG_TYPE_LWT_OUT = 11,
-	BPF_PROG_TYPE_LWT_XMIT = 12,
-	BPF_PROG_TYPE_SOCK_OPS = 13,
-	BPF_PROG_TYPE_SK_SKB = 14,
-	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
-	BPF_PROG_TYPE_SK_MSG = 16,
-	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
-	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
-	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
-	BPF_PROG_TYPE_LIRC_MODE2 = 20,
-	BPF_PROG_TYPE_SK_REUSEPORT = 21,
-	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
-	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
-	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
-	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
-	BPF_PROG_TYPE_TRACING = 26,
-	BPF_PROG_TYPE_STRUCT_OPS = 27,
-	BPF_PROG_TYPE_EXT = 28,
-	BPF_PROG_TYPE_LSM = 29,
-	BPF_PROG_TYPE_SK_LOOKUP = 30,
-};
-
-enum bpf_attach_type {
-	BPF_CGROUP_INET_INGRESS = 0,
-	BPF_CGROUP_INET_EGRESS = 1,
-	BPF_CGROUP_INET_SOCK_CREATE = 2,
-	BPF_CGROUP_SOCK_OPS = 3,
-	BPF_SK_SKB_STREAM_PARSER = 4,
-	BPF_SK_SKB_STREAM_VERDICT = 5,
-	BPF_CGROUP_DEVICE = 6,
-	BPF_SK_MSG_VERDICT = 7,
-	BPF_CGROUP_INET4_BIND = 8,
-	BPF_CGROUP_INET6_BIND = 9,
-	BPF_CGROUP_INET4_CONNECT = 10,
-	BPF_CGROUP_INET6_CONNECT = 11,
-	BPF_CGROUP_INET4_POST_BIND = 12,
-	BPF_CGROUP_INET6_POST_BIND = 13,
-	BPF_CGROUP_UDP4_SENDMSG = 14,
-	BPF_CGROUP_UDP6_SENDMSG = 15,
-	BPF_LIRC_MODE2 = 16,
-	BPF_FLOW_DISSECTOR = 17,
-	BPF_CGROUP_SYSCTL = 18,
-	BPF_CGROUP_UDP4_RECVMSG = 19,
-	BPF_CGROUP_UDP6_RECVMSG = 20,
-	BPF_CGROUP_GETSOCKOPT = 21,
-	BPF_CGROUP_SETSOCKOPT = 22,
-	BPF_TRACE_RAW_TP = 23,
-	BPF_TRACE_FENTRY = 24,
-	BPF_TRACE_FEXIT = 25,
-	BPF_MODIFY_RETURN = 26,
-	BPF_LSM_MAC = 27,
-	BPF_TRACE_ITER = 28,
-	BPF_CGROUP_INET4_GETPEERNAME = 29,
-	BPF_CGROUP_INET6_GETPEERNAME = 30,
-	BPF_CGROUP_INET4_GETSOCKNAME = 31,
-	BPF_CGROUP_INET6_GETSOCKNAME = 32,
-	BPF_XDP_DEVMAP = 33,
-	BPF_CGROUP_INET_SOCK_RELEASE = 34,
-	BPF_XDP_CPUMAP = 35,
-	BPF_SK_LOOKUP = 36,
-	BPF_XDP = 37,
-	__MAX_BPF_ATTACH_TYPE = 38,
-};
-
-union bpf_attr {
-	struct {
-		__u32 map_type;
-		__u32 key_size;
-		__u32 value_size;
-		__u32 max_entries;
-		__u32 map_flags;
-		__u32 inner_map_fd;
-		__u32 numa_node;
-		char map_name[16];
-		__u32 map_ifindex;
-		__u32 btf_fd;
-		__u32 btf_key_type_id;
-		__u32 btf_value_type_id;
-		__u32 btf_vmlinux_value_type_id;
-	};
-	struct {
-		__u32 map_fd;
-		__u64 key;
-		union {
-			__u64 value;
-			__u64 next_key;
-		};
-		__u64 flags;
-	};
-	struct {
-		__u64 in_batch;
-		__u64 out_batch;
-		__u64 keys;
-		__u64 values;
-		__u32 count;
-		__u32 map_fd;
-		__u64 elem_flags;
-		__u64 flags;
-	} batch;
-	struct {
-		__u32 prog_type;
-		__u32 insn_cnt;
-		__u64 insns;
-		__u64 license;
-		__u32 log_level;
-		__u32 log_size;
-		__u64 log_buf;
-		__u32 kern_version;
-		__u32 prog_flags;
-		char prog_name[16];
-		__u32 prog_ifindex;
-		__u32 expected_attach_type;
-		__u32 prog_btf_fd;
-		__u32 func_info_rec_size;
-		__u64 func_info;
-		__u32 func_info_cnt;
-		__u32 line_info_rec_size;
-		__u64 line_info;
-		__u32 line_info_cnt;
-		__u32 attach_btf_id;
-		__u32 attach_prog_fd;
-	};
-	struct {
-		__u64 pathname;
-		__u32 bpf_fd;
-		__u32 file_flags;
-	};
-	struct {
-		__u32 target_fd;
-		__u32 attach_bpf_fd;
-		__u32 attach_type;
-		__u32 attach_flags;
-		__u32 replace_bpf_fd;
-	};
-	struct {
-		__u32 prog_fd;
-		__u32 retval;
-		__u32 data_size_in;
-		__u32 data_size_out;
-		__u64 data_in;
-		__u64 data_out;
-		__u32 repeat;
-		__u32 duration;
-		__u32 ctx_size_in;
-		__u32 ctx_size_out;
-		__u64 ctx_in;
-		__u64 ctx_out;
-		__u32 flags;
-		__u32 cpu;
-	} test;
-	struct {
-		union {
-			__u32 start_id;
-			__u32 prog_id;
-			__u32 map_id;
-			__u32 btf_id;
-			__u32 link_id;
-		};
-		__u32 next_id;
-		__u32 open_flags;
-	};
-	struct {
-		__u32 bpf_fd;
-		__u32 info_len;
-		__u64 info;
-	} info;
-	struct {
-		__u32 target_fd;
-		__u32 attach_type;
-		__u32 query_flags;
-		__u32 attach_flags;
-		__u64 prog_ids;
-		__u32 prog_cnt;
-	} query;
-	struct {
-		__u64 name;
-		__u32 prog_fd;
-	} raw_tracepoint;
-	struct {
-		__u64 btf;
-		__u64 btf_log_buf;
-		__u32 btf_size;
-		__u32 btf_log_size;
-		__u32 btf_log_level;
-	};
-	struct {
-		__u32 pid;
-		__u32 fd;
-		__u32 flags;
-		__u32 buf_len;
-		__u64 buf;
-		__u32 prog_id;
-		__u32 fd_type;
-		__u64 probe_offset;
-		__u64 probe_addr;
-	} task_fd_query;
-	struct {
-		__u32 prog_fd;
-		union {
-			__u32 target_fd;
-			__u32 target_ifindex;
-		};
-		__u32 attach_type;
-		__u32 flags;
-		union {
-			__u32 target_btf_id;
-			struct {
-				__u64 iter_info;
-				__u32 iter_info_len;
-			};
-		};
-	} link_create;
-	struct {
-		__u32 link_fd;
-		__u32 new_prog_fd;
-		__u32 flags;
-		__u32 old_prog_fd;
-	} link_update;
-	struct {
-		__u32 link_fd;
-	} link_detach;
-	struct {
-		__u32 type;
-	} enable_stats;
-	struct {
-		__u32 link_fd;
-		__u32 flags;
-	} iter_create;
-	struct {
-		__u32 prog_fd;
-		__u32 map_fd;
-		__u32 flags;
-	} prog_bind_map;
-};
-
-struct bpf_func_info {
-	__u32 insn_off;
-	__u32 type_id;
-};
-
-struct bpf_line_info {
-	__u32 insn_off;
-	__u32 file_name_off;
-	__u32 line_off;
-	__u32 line_col;
-};
-
-struct bpf_iter_aux_info;
-
-typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
-
-struct bpf_map;
-
-struct bpf_iter_aux_info {
-	struct bpf_map *map;
-};
-
-typedef void (*bpf_iter_fini_seq_priv_t)(void *);
-
-struct bpf_iter_seq_info {
-	const struct seq_operations *seq_ops;
-	bpf_iter_init_seq_priv_t init_seq_private;
-	bpf_iter_fini_seq_priv_t fini_seq_private;
-	u32 seq_priv_size;
-};
-
-struct btf;
-
-struct btf_type;
-
-struct bpf_prog_aux;
-
-struct bpf_local_storage_map;
-
-struct bpf_map_ops {
-	int (*map_alloc_check)(union bpf_attr *);
-	struct bpf_map * (*map_alloc)(union bpf_attr *);
-	void (*map_release)(struct bpf_map *, struct file *);
-	void (*map_free)(struct bpf_map *);
-	int (*map_get_next_key)(struct bpf_map *, void *, void *);
-	void (*map_release_uref)(struct bpf_map *);
-	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
-	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	void * (*map_lookup_elem)(struct bpf_map *, void *);
-	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_map *, void *);
-	int (*map_push_elem)(struct bpf_map *, void *, u64);
-	int (*map_pop_elem)(struct bpf_map *, void *);
-	int (*map_peek_elem)(struct bpf_map *, void *);
-	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
-	void (*map_fd_put_ptr)(void *);
-	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
-	u32 (*map_fd_sys_lookup_elem)(void *);
-	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
-	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
-	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
-	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
-	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
-	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
-	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
-	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
-	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
-	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
-	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
-	const char * const map_btf_name;
-	int *map_btf_id;
-	const struct bpf_iter_seq_info *iter_seq_info;
-};
-
-struct bpf_map_memory {
-	u32 pages;
-	struct user_struct *user;
-};
-
-struct bpf_map {
-	const struct bpf_map_ops *ops;
-	struct bpf_map *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	u32 btf_vmlinux_value_type_id;
-	bool bypass_spec_v1;
-	bool frozen;
-	long: 16;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_header {
-	__u16 magic;
-	__u8 version;
-	__u8 flags;
-	__u32 hdr_len;
-	__u32 type_off;
-	__u32 type_len;
-	__u32 str_off;
-	__u32 str_len;
-};
-
-struct btf {
-	void *data;
-	struct btf_type **types;
-	u32 *resolved_ids;
-	u32 *resolved_sizes;
-	const char *strings;
-	void *nohdr_data;
-	struct btf_header hdr;
-	u32 nr_types;
-	u32 types_size;
-	u32 data_size;
-	refcount_t refcnt;
-	u32 id;
-	struct callback_head rcu;
-};
-
-struct btf_type {
-	__u32 name_off;
-	__u32 info;
-	union {
-		__u32 size;
-		__u32 type;
-	};
-};
-
-enum bpf_tramp_prog_type {
-	BPF_TRAMP_FENTRY = 0,
-	BPF_TRAMP_FEXIT = 1,
-	BPF_TRAMP_MODIFY_RETURN = 2,
-	BPF_TRAMP_MAX = 3,
-	BPF_TRAMP_REPLACE = 4,
-};
-
-struct bpf_ksym {
-	long unsigned int start;
-	long unsigned int end;
-	char name[128];
-	struct list_head lnode;
-	struct latch_tree_node tnode;
-	bool prog;
-};
-
-struct bpf_ctx_arg_aux;
-
-struct bpf_trampoline;
-
-struct bpf_jit_poke_descriptor;
-
-struct bpf_prog_ops;
-
-struct bpf_prog_offload;
-
-struct bpf_func_info_aux;
-
-struct bpf_prog_stats;
-
-struct bpf_prog_aux {
-	atomic64_t refcnt;
-	u32 used_map_cnt;
-	u32 max_ctx_offset;
-	u32 max_pkt_offset;
-	u32 max_tp_access;
-	u32 stack_depth;
-	u32 id;
-	u32 func_cnt;
-	u32 func_idx;
-	u32 attach_btf_id;
-	u32 ctx_arg_info_size;
-	u32 max_rdonly_access;
-	u32 max_rdwr_access;
-	const struct bpf_ctx_arg_aux *ctx_arg_info;
-	struct mutex dst_mutex;
-	struct bpf_prog *dst_prog;
-	struct bpf_trampoline *dst_trampoline;
-	enum bpf_prog_type saved_dst_prog_type;
-	enum bpf_attach_type saved_dst_attach_type;
-	bool verifier_zext;
-	bool offload_requested;
-	bool attach_btf_trace;
-	bool func_proto_unreliable;
-	bool sleepable;
-	bool tail_call_reachable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct hlist_node tramp_hlist;
-	const struct btf_type *attach_func_proto;
-	const char *attach_func_name;
-	struct bpf_prog **func;
-	void *jit_data;
-	struct bpf_jit_poke_descriptor *poke_tab;
-	u32 size_poke_tab;
-	struct bpf_ksym ksym;
-	const struct bpf_prog_ops *ops;
-	struct bpf_map **used_maps;
-	struct mutex used_maps_mutex;
-	struct bpf_prog *prog;
-	struct user_struct *user;
-	u64 load_time;
-	struct bpf_map *cgroup_storage[2];
-	char name[16];
-	void *security;
-	struct bpf_prog_offload *offload;
-	struct btf *btf;
-	struct bpf_func_info *func_info;
-	struct bpf_func_info_aux *func_info_aux;
-	struct bpf_line_info *linfo;
-	void **jited_linfo;
-	u32 func_info_cnt;
-	u32 nr_linfo;
-	u32 linfo_idx;
-	u32 num_exentries;
-	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
-	union {
-		struct work_struct work;
-		struct callback_head rcu;
-	};
-};
-
-struct sock_filter {
-	__u16 code;
-	__u8 jt;
-	__u8 jf;
-	__u32 k;
-};
-
-struct sock_fprog_kern;
-
-struct bpf_prog {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	u16 call_get_stack: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	struct sock_filter insns[0];
-	struct bpf_insn insnsi[0];
-};
-
-struct bpf_offloaded_map;
-
-struct bpf_map_dev_ops {
-	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
-};
-
-struct bpf_offloaded_map {
-	struct bpf_map map;
-	struct net_device *netdev;
-	const struct bpf_map_dev_ops *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net_device_stats {
-	long unsigned int rx_packets;
-	long unsigned int tx_packets;
-	long unsigned int rx_bytes;
-	long unsigned int tx_bytes;
-	long unsigned int rx_errors;
-	long unsigned int tx_errors;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	long unsigned int multicast;
-	long unsigned int collisions;
-	long unsigned int rx_length_errors;
-	long unsigned int rx_over_errors;
-	long unsigned int rx_crc_errors;
-	long unsigned int rx_frame_errors;
-	long unsigned int rx_fifo_errors;
-	long unsigned int rx_missed_errors;
-	long unsigned int tx_aborted_errors;
-	long unsigned int tx_carrier_errors;
-	long unsigned int tx_fifo_errors;
-	long unsigned int tx_heartbeat_errors;
-	long unsigned int tx_window_errors;
-	long unsigned int rx_compressed;
-	long unsigned int tx_compressed;
-};
-
-struct netdev_hw_addr_list {
-	struct list_head list;
-	int count;
-};
-
-struct tipc_bearer;
-
-struct dn_dev;
-
-struct mpls_dev;
-
-enum rx_handler_result {
-	RX_HANDLER_CONSUMED = 0,
-	RX_HANDLER_ANOTHER = 1,
-	RX_HANDLER_EXACT = 2,
-	RX_HANDLER_PASS = 3,
-};
-
-typedef enum rx_handler_result rx_handler_result_t;
-
-typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
-
-struct pcpu_dstats;
-
-struct garp_port;
-
-struct mrp_port;
-
-struct netdev_tc_txq {
-	u16 count;
-	u16 offset;
-};
-
-struct macsec_ops;
-
-struct udp_tunnel_nic;
-
-struct bpf_xdp_link;
-
-struct bpf_xdp_entity {
-	struct bpf_prog *prog;
-	struct bpf_xdp_link *link;
-};
-
-struct netdev_name_node;
-
-struct dev_ifalias;
-
-struct iw_handler_def;
-
-struct iw_public_data;
-
-struct net_device_ops;
-
-struct ethtool_ops;
-
-struct l3mdev_ops;
-
-struct ndisc_ops;
-
-struct xfrmdev_ops;
-
-struct tlsdev_ops;
-
-struct header_ops;
-
-struct vlan_info;
-
-struct dsa_port;
-
-struct in_device;
-
-struct inet6_dev;
-
-struct wireless_dev;
-
-struct wpan_dev;
-
-struct netdev_rx_queue;
-
-struct mini_Qdisc;
-
-struct netdev_queue;
-
-struct cpu_rmap;
-
-struct Qdisc;
-
-struct xdp_dev_bulk_queue;
-
-struct xps_dev_maps;
-
-struct netpoll_info;
-
-struct pcpu_lstats;
-
-struct pcpu_sw_netstats;
-
-struct rtnl_link_ops;
-
-struct dcbnl_rtnl_ops;
-
-struct netprio_map;
-
-struct phy_device;
-
-struct sfp_bus;
-
-struct udp_tunnel_nic_info;
-
-struct net_device {
-	char name[16];
-	struct netdev_name_node *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct iw_handler_def *wireless_handlers;
-	struct iw_public_data *wireless_data;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops *ethtool_ops;
-	const struct l3mdev_ops *l3mdev_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct xfrmdev_ops *xfrmdev_ops;
-	const struct tlsdev_ops *tlsdev_ops;
-	const struct header_ops *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	unsigned char name_assign_type;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	bool uc_promisc;
-	struct vlan_info *vlan_info;
-	struct dsa_port *dsa_ptr;
-	struct tipc_bearer *tipc_ptr;
-	void *atalk_ptr;
-	struct in_device *ip_ptr;
-	struct dn_dev *dn_ptr;
-	struct inet6_dev *ip6_ptr;
-	void *ax25_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	struct mpls_dev *mpls_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	int napi_defer_hard_irqs;
-	rx_handler_func_t *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc *miniq_ingress;
-	struct netdev_queue *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc *qdisc;
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	struct xdp_dev_bulk_queue *xdp_bulkq;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc *miniq_egress;
-	struct hlist_head qdisc_hash[16];
-	struct timer_list watchdog_timer;
-	int watchdog_timeo;
-	u32 proto_down_reason;
-	struct list_head todo_list;
-	int *pcpu_refcnt;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED = 0,
-		NETREG_REGISTERED = 1,
-		NETREG_UNREGISTERING = 2,
-		NETREG_UNREGISTERED = 3,
-		NETREG_RELEASED = 4,
-		NETREG_DUMMY = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED = 0,
-		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device *);
-	struct netpoll_info *npinfo;
-	possible_net_t nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct garp_port *garp_port;
-	struct mrp_port *mrp_port;
-	struct device dev;
-	const struct attribute_group *sysfs_groups[4];
-	const struct attribute_group *sysfs_rx_queue_group;
-	const struct rtnl_link_ops *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	const struct dcbnl_rtnl_ops *dcbnl_ops;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	unsigned int fcoe_ddp_xid;
-	struct netprio_map *priomap;
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key *qdisc_tx_busylock;
-	struct lock_class_key *qdisc_running_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-	struct list_head net_notifier_list;
-	const struct macsec_ops *macsec_ops;
-	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
-	struct udp_tunnel_nic *udp_tunnel_nic;
-	struct bpf_xdp_entity xdp_state[3];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum bpf_reg_type {
-	NOT_INIT = 0,
-	SCALAR_VALUE = 1,
-	PTR_TO_CTX = 2,
-	CONST_PTR_TO_MAP = 3,
-	PTR_TO_MAP_VALUE = 4,
-	PTR_TO_MAP_VALUE_OR_NULL = 5,
-	PTR_TO_STACK = 6,
-	PTR_TO_PACKET_META = 7,
-	PTR_TO_PACKET = 8,
-	PTR_TO_PACKET_END = 9,
-	PTR_TO_FLOW_KEYS = 10,
-	PTR_TO_SOCKET = 11,
-	PTR_TO_SOCKET_OR_NULL = 12,
-	PTR_TO_SOCK_COMMON = 13,
-	PTR_TO_SOCK_COMMON_OR_NULL = 14,
-	PTR_TO_TCP_SOCK = 15,
-	PTR_TO_TCP_SOCK_OR_NULL = 16,
-	PTR_TO_TP_BUFFER = 17,
-	PTR_TO_XDP_SOCK = 18,
-	PTR_TO_BTF_ID = 19,
-	PTR_TO_BTF_ID_OR_NULL = 20,
-	PTR_TO_MEM = 21,
-	PTR_TO_MEM_OR_NULL = 22,
-	PTR_TO_RDONLY_BUF = 23,
-	PTR_TO_RDONLY_BUF_OR_NULL = 24,
-	PTR_TO_RDWR_BUF = 25,
-	PTR_TO_RDWR_BUF_OR_NULL = 26,
-	PTR_TO_PERCPU_BTF_ID = 27,
-};
-
-struct bpf_prog_ops {
-	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
-};
-
-struct bpf_offload_dev;
-
-struct bpf_prog_offload {
-	struct bpf_prog *prog;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	void *dev_priv;
-	struct list_head offloads;
-	bool dev_state;
-	bool opt_failed;
-	void *jited_image;
-	u32 jited_len;
-};
-
-struct bpf_prog_stats {
-	u64 cnt;
-	u64 nsecs;
-	struct u64_stats_sync syncp;
-};
-
-struct btf_func_model {
-	u8 ret_size;
-	u8 nr_args;
-	u8 arg_size[12];
-};
-
-struct bpf_trampoline {
-	struct hlist_node hlist;
-	struct mutex mutex;
-	refcount_t refcnt;
-	u64 key;
-	struct {
-		struct btf_func_model model;
-		void *addr;
-		bool ftrace_managed;
-	} func;
-	struct bpf_prog *extension_prog;
-	struct hlist_head progs_hlist[3];
-	int progs_cnt[3];
-	void *image;
-	u64 selector;
-	struct bpf_ksym ksym;
-};
-
-struct bpf_func_info_aux {
-	u16 linkage;
-	bool unreliable;
-};
-
-struct bpf_jit_poke_descriptor {
-	void *tailcall_target;
-	void *tailcall_bypass;
-	void *bypass_addr;
-	union {
-		struct {
-			struct bpf_map *map;
-			u32 key;
-		} tail_call;
-	};
-	bool tailcall_target_stable;
-	u8 adj_off;
-	u16 reason;
-	u32 insn_idx;
-};
-
-struct bpf_ctx_arg_aux {
-	u32 offset;
-	enum bpf_reg_type reg_type;
-	u32 btf_id;
-};
-
-typedef unsigned int sk_buff_data_t;
-
-struct skb_ext;
-
-struct sk_buff {
-	union {
-		struct {
-			struct sk_buff *next;
-			struct sk_buff *prev;
-			union {
-				struct net_device *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 offload_fwd_mark: 1;
-	__u8 offload_l3_fwd_mark: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 redirected: 1;
-	__u8 from_ingress: 1;
-	__u8 decrypted: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
-};
-
 struct scatterlist {
 	long unsigned int page_link;
 	unsigned int offset;
 	unsigned int length;
 	dma_addr_t dma_address;
-	unsigned int dma_length;
 };
 
-enum {
-	Root_NFS = 255,
-	Root_CIFS = 254,
-	Root_RAM0 = 1048576,
-	Root_RAM1 = 1048577,
-	Root_FD0 = 2097152,
-	Root_HDA1 = 3145729,
-	Root_HDA2 = 3145730,
-	Root_SDA1 = 8388609,
-	Root_SDA2 = 8388610,
-	Root_HDC1 = 23068673,
-	Root_SR0 = 11534336,
-};
-
-struct ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_proto;
-};
-
-struct flowi_tunnel {
-	__be64 tun_id;
-};
-
-struct flowi_common {
-	int flowic_oif;
-	int flowic_iif;
-	__u32 flowic_mark;
-	__u8 flowic_tos;
-	__u8 flowic_scope;
-	__u8 flowic_proto;
-	__u8 flowic_flags;
-	__u32 flowic_secid;
-	kuid_t flowic_uid;
-	struct flowi_tunnel flowic_tun_key;
-	__u32 flowic_multipath_hash;
-};
-
-union flowi_uli {
-	struct {
-		__be16 dport;
-		__be16 sport;
-	} ports;
-	struct {
-		__u8 type;
-		__u8 code;
-	} icmpt;
-	struct {
-		__le16 dport;
-		__le16 sport;
-	} dnports;
-	__be32 spi;
-	__be32 gre_key;
-	struct {
-		__u8 type;
-	} mht;
-};
-
-struct flowi4 {
-	struct flowi_common __fl_common;
-	__be32 saddr;
-	__be32 daddr;
-	union flowi_uli uli;
-};
-
-struct flowi6 {
-	struct flowi_common __fl_common;
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	__be32 flowlabel;
-	union flowi_uli uli;
-	__u32 mp_hash;
-};
-
-struct flowidn {
-	struct flowi_common __fl_common;
-	__le16 daddr;
-	__le16 saddr;
-	union flowi_uli uli;
-};
-
-struct flowi {
+struct skb_shared_hwtstamps {
 	union {
-		struct flowi_common __fl_common;
-		struct flowi4 ip4;
-		struct flowi6 ip6;
-		struct flowidn dn;
-	} u;
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
 };
 
-struct ipstats_mib {
-	u64 mibs[37];
-	struct u64_stats_sync syncp;
-};
-
-struct icmp_mib {
-	long unsigned int mibs[28];
-};
-
-struct icmpmsg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6_mib {
-	long unsigned int mibs[6];
-};
-
-struct icmpv6_mib_device {
-	atomic_long_t mibs[6];
-};
-
-struct icmpv6msg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6msg_mib_device {
-	atomic_long_t mibs[512];
-};
-
-struct tcp_mib {
-	long unsigned int mibs[16];
-};
-
-struct udp_mib {
-	long unsigned int mibs[9];
-};
-
-struct linux_mib {
-	long unsigned int mibs[124];
-};
-
-struct linux_tls_mib {
-	long unsigned int mibs[11];
-};
-
-struct inet_frags;
-
-struct fqdir {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags *f;
-	struct net *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	long unsigned int slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 32;
 	long: 64;
 	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue;
-
-struct inet_frags {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue *, const void *);
-	void (*destructor)(struct inet_frag_queue *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct frag_v4_compare_key {
-	__be32 saddr;
-	__be32 daddr;
-	u32 user;
-	u32 vif;
-	__be16 id;
-	u16 protocol;
-};
-
-struct frag_v6_compare_key {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	u32 user;
-	__be32 id;
-	u32 iif;
-};
-
-struct inet_frag_queue {
-	struct rhash_head node;
-	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff *fragments_tail;
-	struct sk_buff *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir *fqdir;
-	struct callback_head rcu;
-};
-
-struct fib_rule;
-
-struct fib_lookup_arg;
-
-struct fib_rule_hdr;
-
-struct nlattr;
-
-struct netlink_ext_ack;
-
-struct nla_policy;
-
-struct fib_rules_ops {
-	int family;
-	struct list_head list;
-	int rule_size;
-	int addr_size;
-	int unresolved_rules;
-	int nr_goto_rules;
-	unsigned int fib_rules_seq;
-	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
-	bool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);
-	int (*match)(struct fib_rule *, struct flowi *, int);
-	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
-	int (*delete)(struct fib_rule *);
-	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
-	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
-	size_t (*nlmsg_payload)(struct fib_rule *);
-	void (*flush_cache)(struct fib_rules_ops *);
-	int nlgroup;
-	const struct nla_policy *policy;
-	struct list_head rules_list;
-	struct module *owner;
-	struct net *fro_net;
-	struct callback_head rcu;
-};
-
-enum tcp_ca_event {
-	CA_EVENT_TX_START = 0,
-	CA_EVENT_CWND_RESTART = 1,
-	CA_EVENT_COMPLETE_CWR = 2,
-	CA_EVENT_LOSS = 3,
-	CA_EVENT_ECN_NO_CE = 4,
-	CA_EVENT_ECN_IS_CE = 5,
-};
-
-struct ack_sample;
-
-struct rate_sample;
-
-union tcp_cc_info;
-
-struct tcp_congestion_ops {
-	struct list_head list;
-	u32 key;
-	u32 flags;
-	void (*init)(struct sock *);
-	void (*release)(struct sock *);
-	u32 (*ssthresh)(struct sock *);
-	void (*cong_avoid)(struct sock *, u32, u32);
-	void (*set_state)(struct sock *, u8);
-	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
-	void (*in_ack_event)(struct sock *, u32);
-	u32 (*undo_cwnd)(struct sock *);
-	void (*pkts_acked)(struct sock *, const struct ack_sample *);
-	u32 (*min_tso_segs)(struct sock *);
-	u32 (*sndbuf_expand)(struct sock *);
-	void (*cong_control)(struct sock *, const struct rate_sample *);
-	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
-	char name[16];
-	struct module *owner;
-};
-
-struct fib_notifier_ops {
-	int family;
-	struct list_head list;
-	unsigned int (*fib_seq_read)(struct net *);
-	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
-	struct module *owner;
-	struct callback_head rcu;
-};
-
-struct xfrm_state;
-
-struct lwtunnel_state;
-
-struct dst_entry {
-	struct net_device *dev;
-	struct dst_ops *ops;
-	long unsigned int _metrics;
-	long unsigned int expires;
-	struct xfrm_state *xfrm;
-	int (*input)(struct sk_buff *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	short unsigned int flags;
-	short int obsolete;
-	short unsigned int header_len;
-	short unsigned int trailer_len;
-	atomic_t __refcnt;
-	int __use;
-	long unsigned int lastuse;
-	struct lwtunnel_state *lwtstate;
-	struct callback_head callback_head;
-	short int error;
-	short int __pad;
-	__u32 tclassid;
 };
 
 struct hh_cache {
 	unsigned int hh_len;
 	seqlock_t hh_lock;
-	long unsigned int hh_data[16];
+	long unsigned int hh_data[12];
 };
 
 struct neigh_table;
@@ -10708,11 +12798,11 @@
 	struct timer_list timer;
 	long unsigned int used;
 	atomic_t probes;
-	__u8 flags;
-	__u8 nud_state;
-	__u8 type;
-	__u8 dead;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
 	u8 protocol;
+	u32 flags;
 	seqlock_t ha_lock;
 	int: 32;
 	unsigned char ha[32];
@@ -10720,118 +12810,1670 @@
 	int (*output)(struct neighbour *, struct sk_buff *);
 	const struct neigh_ops *ops;
 	struct list_head gc_list;
+	struct list_head managed_list;
 	struct callback_head rcu;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	u8 primary_key[0];
 };
 
-struct ipv6_stable_secret {
-	bool initialized;
-	struct in6_addr secret;
+struct netprio_map {
+	struct callback_head rcu;
+	u32 priomap_len;
+	u32 priomap[0];
 };
 
-struct ipv6_devconf {
-	__s32 forwarding;
-	__s32 hop_limit;
-	__s32 mtu6;
-	__s32 accept_ra;
-	__s32 accept_redirects;
-	__s32 autoconf;
-	__s32 dad_transmits;
-	__s32 rtr_solicits;
-	__s32 rtr_solicit_interval;
-	__s32 rtr_solicit_max_interval;
-	__s32 rtr_solicit_delay;
-	__s32 force_mld_version;
-	__s32 mldv1_unsolicited_report_interval;
-	__s32 mldv2_unsolicited_report_interval;
-	__s32 use_tempaddr;
-	__s32 temp_valid_lft;
-	__s32 temp_prefered_lft;
-	__s32 regen_max_retry;
-	__s32 max_desync_factor;
-	__s32 max_addresses;
-	__s32 accept_ra_defrtr;
-	__s32 accept_ra_min_hop_limit;
-	__s32 accept_ra_pinfo;
-	__s32 ignore_routes_with_linkdown;
-	__s32 accept_ra_rtr_pref;
-	__s32 rtr_probe_interval;
-	__s32 accept_ra_rt_info_min_plen;
-	__s32 accept_ra_rt_info_max_plen;
-	__s32 proxy_ndp;
-	__s32 accept_source_route;
-	__s32 accept_ra_from_local;
-	__s32 mc_forwarding;
-	__s32 disable_ipv6;
-	__s32 drop_unicast_in_l2_multicast;
-	__s32 accept_dad;
-	__s32 force_tllao;
-	__s32 ndisc_notify;
-	__s32 suppress_frag_ndisc;
-	__s32 accept_ra_mtu;
-	__s32 drop_unsolicited_na;
-	struct ipv6_stable_secret stable_secret;
-	__s32 use_oif_addrs_only;
-	__s32 keep_addr_on_down;
-	__s32 seg6_enabled;
-	__u32 enhanced_dad;
-	__u32 addr_gen_mode;
-	__s32 disable_policy;
-	__s32 ndisc_tclass;
-	__s32 rpl_seg_enabled;
-	struct ctl_table_header *sysctl_header;
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
 };
 
-struct nf_queue_entry;
-
-struct nf_queue_handler {
-	int (*outfn)(struct nf_queue_entry *, unsigned int);
-	void (*nf_hook_drop)(struct net *);
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-enum nf_log_type {
-	NF_LOG_TYPE_LOG = 0,
-	NF_LOG_TYPE_ULOG = 1,
-	NF_LOG_TYPE_MAX = 2,
+struct xdp_txq_info {
+	struct net_device *dev;
 };
 
-typedef u8 u_int8_t;
-
-struct nf_loginfo;
-
-typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
-
-struct nf_logger {
-	char *name;
-	enum nf_log_type type;
-	nf_logfn *logfn;
-	struct module *me;
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
 };
 
-struct hlist_nulls_head {
-	struct hlist_nulls_node *first;
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 frame_sz;
+	u32 flags;
 };
 
-struct ip_conntrack_stat {
-	unsigned int found;
-	unsigned int invalid;
-	unsigned int insert;
-	unsigned int insert_failed;
-	unsigned int clash_resolve;
-	unsigned int drop;
-	unsigned int early_drop;
-	unsigned int error;
-	unsigned int expect_new;
-	unsigned int expect_create;
-	unsigned int expect_delete;
-	unsigned int search_restart;
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
 };
 
-struct ct_pcpu {
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	const struct nlattr *miss_nest;
+	u16 miss_type;
+	u8 cookie[20];
+	u8 cookie_len;
+	char _msg_buf[80];
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		u16 strict_start_type;
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+	};
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long int args[6];
+	};
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
+};
+
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+};
+
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
+};
+
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short int cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+enum netdev_tx {
+	__NETDEV_TX_MIN = -2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+struct net_device_core_stats {
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int rx_nohandler;
+	long unsigned int rx_otherhost_dropped;
+};
+
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
+};
+
+struct xsk_buff_pool;
+
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc *qdisc;
+	struct Qdisc *qdisc_sleeping;
+	struct kobject kobj;
+	int numa_node;
+	long unsigned int tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	struct xsk_buff_pool *pool;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	long unsigned int trans_start;
+	long unsigned int state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
+};
+
+struct net_rate_estimator;
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
 	spinlock_t lock;
-	struct hlist_nulls_head unconfirmed;
-	struct hlist_nulls_head dying;
+};
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator *rate_est;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	long unsigned int state;
+	long unsigned int state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long int privdata[0];
+};
+
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
+};
+
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
+};
+
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
+};
+
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map *rps_map;
+	struct rps_dev_flow_table *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
+};
+
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map *attr_map[0];
+};
+
+struct netdev_fcoe_hbainfo {
+	char manufacturer[64];
+	char serial_number[64];
+	char hardware_version[64];
+	char driver_version[64];
+	char optionrom_version[64];
+	char firmware_version[64];
+	char model[256];
+	char model_description[256];
+};
+
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
+};
+
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
+enum tc_setup_type {
+	TC_QUERY_CAPS = 0,
+	TC_SETUP_QDISC_MQPRIO = 1,
+	TC_SETUP_CLSU32 = 2,
+	TC_SETUP_CLSFLOWER = 3,
+	TC_SETUP_CLSMATCHALL = 4,
+	TC_SETUP_CLSBPF = 5,
+	TC_SETUP_BLOCK = 6,
+	TC_SETUP_QDISC_CBS = 7,
+	TC_SETUP_QDISC_RED = 8,
+	TC_SETUP_QDISC_PRIO = 9,
+	TC_SETUP_QDISC_MQ = 10,
+	TC_SETUP_QDISC_ETF = 11,
+	TC_SETUP_ROOT_QDISC = 12,
+	TC_SETUP_QDISC_GRED = 13,
+	TC_SETUP_QDISC_TAPRIO = 14,
+	TC_SETUP_FT = 15,
+	TC_SETUP_QDISC_ETS = 16,
+	TC_SETUP_QDISC_TBF = 17,
+	TC_SETUP_QDISC_FIFO = 18,
+	TC_SETUP_QDISC_HTB = 19,
+	TC_SETUP_ACT = 20,
+};
+
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
+};
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+struct ip_tunnel_parm;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	void (*ndo_poll_controller)(struct net_device *);
+	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
+	void (*ndo_netpoll_cleanup)(struct net_device *);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_fcoe_enable)(struct net_device *);
+	int (*ndo_fcoe_disable)(struct net_device *);
+	int (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);
+	int (*ndo_fcoe_ddp_done)(struct net_device *, u16);
+	int (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);
+	int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);
+	int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct iw_request_info;
+
+union iwreq_data;
+
+typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
+
+struct iw_priv_args;
+
+struct iw_statistics;
+
+struct iw_handler_def {
+	const iw_handler *standard;
+	__u16 num_standard;
+	__u16 num_private;
+	__u16 num_private_args;
+	const iw_handler *private;
+	const struct iw_priv_args *private_args;
+	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_link_ext_stats;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	void (*get_link_ext_stats)(struct net_device *, struct ethtool_link_ext_stats *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+};
+
+struct flowi6;
+
+struct l3mdev_ops {
+	u32 (*l3mdev_fib_table)(const struct net_device *);
+	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
+	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
+	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+enum tls_offload_ctx_dir {
+	TLS_OFFLOAD_CTX_DIR_RX = 0,
+	TLS_OFFLOAD_CTX_DIR_TX = 1,
+};
+
+struct tls_crypto_info;
+
+struct tls_context;
+
+struct tlsdev_ops {
+	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
+	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
+	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
+};
+
+struct tcf_proto;
+
+struct tcf_block;
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	long unsigned int rcu_state;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct macsec_context;
+
+struct macsec_ops {
+	int (*mdo_dev_open)(struct macsec_context *);
+	int (*mdo_dev_stop)(struct macsec_context *);
+	int (*mdo_add_secy)(struct macsec_context *);
+	int (*mdo_upd_secy)(struct macsec_context *);
+	int (*mdo_del_secy)(struct macsec_context *);
+	int (*mdo_add_rxsc)(struct macsec_context *);
+	int (*mdo_upd_rxsc)(struct macsec_context *);
+	int (*mdo_del_rxsc)(struct macsec_context *);
+	int (*mdo_add_rxsa)(struct macsec_context *);
+	int (*mdo_upd_rxsa)(struct macsec_context *);
+	int (*mdo_del_rxsa)(struct macsec_context *);
+	int (*mdo_add_txsa)(struct macsec_context *);
+	int (*mdo_upd_txsa)(struct macsec_context *);
+	int (*mdo_del_txsa)(struct macsec_context *);
+	int (*mdo_get_dev_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sa_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sa_stats)(struct macsec_context *);
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	short unsigned int tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+enum flow_action_hw_stats_bit {
+	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+};
+
+struct qdisc_walker;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+	void (*qlen_notify)(struct Qdisc *, long unsigned int);
+	long unsigned int (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+	struct tcf_proto *next;
+	void *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			long unsigned int class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+	};
+};
+
+struct tcf_walker;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct ipc_ids {
+	int in_use;
+	short unsigned int seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	int next_id;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	struct percpu_counter percpu_msg_bytes;
+	struct percpu_counter percpu_msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	long unsigned int shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
+};
+
+struct time_namespace {
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
+};
+
+struct nsset {
+	unsigned int flags;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+struct smp_hotplug_thread {
+	struct task_struct **store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+struct pin_cookie {};
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	long unsigned int max_cpu_capacity;
+	struct perf_domain *pd;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	u64 exec_clock;
+	u64 min_vruntime;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	struct sched_entity *last;
+	struct sched_entity *skip;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		long unsigned int load_avg;
+		long unsigned int util_avg;
+		long unsigned int runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	long unsigned int tg_load_avg_contrib;
+	long int propagate;
+	long int prop_runnable_sum;
+	long unsigned int h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	int runtime_enabled;
+	s64 runtime_remaining;
+	u64 throttled_pelt_idle;
+	u64 throttled_clock;
+	u64 throttled_clock_pelt;
+	u64 throttled_clock_pelt_time;
+	int throttled;
+	int throttle_count;
+	struct list_head throttled_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rt_prio_array {
+	long unsigned int bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+	unsigned int rt_nr_boosted;
+	struct rq *rq;
+	struct task_group *tg;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+struct cfs_bandwidth {
+	raw_spinlock_t lock;
+	ktime_t period;
+	u64 quota;
+	u64 runtime;
+	u64 burst;
+	u64 runtime_snap;
+	s64 hierarchical_quota;
+	u8 idle;
+	u8 period_active;
+	u8 slack_started;
+	struct hrtimer period_timer;
+	struct hrtimer slack_timer;
+	struct list_head throttled_cfs_rq;
+	int nr_periods;
+	int nr_throttled;
+	int nr_burst;
+	u64 throttled_time;
+	u64 burst_time;
+};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	long unsigned int shares;
+	int idle;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct sched_rt_entity **rt_se;
+	struct rt_rq **rt_rq;
+	struct rt_bandwidth rt_bandwidth;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct autogroup *autogroup;
+	struct cfs_bandwidth cfs_bandwidth;
+	long: 64;
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_idle;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+struct autogroup {
+	struct kref kref;
+	struct task_group *tg;
+	struct rw_semaphore lock;
+	long unsigned int id;
+	int nice;
+};
+
+typedef int __kernel_rwf_t;
+
+struct trace_print_flags {
+	long unsigned int mask;
+	const char *name;
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = -1,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+struct sched_group;
+
+struct sched_domain {
+	struct sched_domain *parent;
+	struct sched_domain *child;
+	struct sched_group *groups;
+	long unsigned int min_interval;
+	long unsigned int max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	long unsigned int last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	long unsigned int last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	unsigned int lb_count[3];
+	unsigned int lb_failed[3];
+	unsigned int lb_balanced[3];
+	unsigned int lb_imbalance[3];
+	unsigned int lb_gained[3];
+	unsigned int lb_hot_gained[3];
+	unsigned int lb_nobusyg[3];
+	unsigned int lb_nobusyq[3];
+	unsigned int alb_count;
+	unsigned int alb_failed;
+	unsigned int alb_pushed;
+	unsigned int sbe_count;
+	unsigned int sbe_balanced;
+	unsigned int sbe_pushed;
+	unsigned int sbf_count;
+	unsigned int sbf_balanced;
+	unsigned int sbf_pushed;
+	unsigned int ttwu_wake_remote;
+	unsigned int ttwu_move_affine;
+	unsigned int ttwu_move_balance;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	long unsigned int span[0];
+};
+
+struct sched_group_capacity;
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	long unsigned int cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	long unsigned int capacity;
+	long unsigned int min_capacity;
+	long unsigned int max_capacity;
+	long unsigned int next_update;
+	int imbalance;
+	long unsigned int cpumask[0];
+};
+
+struct em_perf_state {
+	long unsigned int frequency;
+	long unsigned int power;
+	long unsigned int cost;
+	long unsigned int flags;
+};
+
+struct em_perf_domain {
+	struct em_perf_state *table;
+	int nr_perf_states;
+	long unsigned int flags;
+	long unsigned int cpus[0];
+};
+
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
+struct kernel_cpustat {
+	u64 cpustat[10];
+};
+
+struct kernel_stat {
+	long unsigned int irqs_sum;
+	unsigned int softirqs[10];
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+	__CFTYPE_ADDED = 262144,
 };
 
 typedef struct {
@@ -10842,6 +14484,45 @@
 	bool is_kernel: 1;
 } sockptr_t;
 
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	refcount_t refcnt;
+	u8 flags;
+};
+
 typedef enum {
 	SS_FREE = 0,
 	SS_UNCONNECTED = 1,
@@ -10873,11 +14554,22 @@
 	struct socket_wq wq;
 };
 
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
 typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
 
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
 struct proto_ops {
 	int family;
-	unsigned int flags;
 	struct module *owner;
 	int (*release)(struct socket *);
 	int (*bind)(struct socket *, struct sockaddr *, int);
@@ -10887,7 +14579,6 @@
 	int (*getname)(struct socket *, struct sockaddr *, int);
 	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
 	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
 	int (*gettstamp)(struct socket *, void *, bool, bool);
 	int (*listen)(struct socket *, int);
 	int (*shutdown)(struct socket *, int);
@@ -10902,41 +14593,2325 @@
 	int (*set_peek_off)(struct sock *, int);
 	int (*peek_len)(struct socket *);
 	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
 	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
 	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
 	int (*set_rcvlowat)(struct sock *, int);
 };
 
-struct pipe_buf_operations;
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+};
 
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations *ops;
+struct sched_param {
+	int sched_priority;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long int prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 delay;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_sched_stat_template {};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 bw_ratio;
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	long unsigned int caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+struct balance_callback;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+	unsigned int numa_migrate_on;
+	long unsigned int last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	long unsigned int next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_pelt;
+	long unsigned int lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain *sd;
+	long unsigned int cpu_capacity;
+	long unsigned int cpu_capacity_orig;
+	long unsigned int cpu_capacity_inverted;
+	struct balance_callback *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	long unsigned int misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	u64 idle_stamp;
+	u64 avg_idle;
+	long unsigned int wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	long unsigned int calc_load_update;
+	long int calc_load_active;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct sched_info rq_sched_info;
+	long long unsigned int rq_cpu_time;
+	unsigned int yld_count;
+	unsigned int sched_count;
+	unsigned int sched_goidle;
+	unsigned int ttwu_count;
+	unsigned int ttwu_local;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	cpumask_var_t scratch_mask;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct balance_callback {
+	struct balance_callback *next;
+	void (*func)(struct rq *);
+};
+
+struct rq_flags {
+	long unsigned int flags;
+	struct pin_cookie cookie;
+};
+
+struct sched_entity_stats {
+	struct sched_entity se;
+	struct sched_statistics stats;
+};
+
+enum {
+	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
+	__SCHED_FEAT_START_DEBIT = 1,
+	__SCHED_FEAT_NEXT_BUDDY = 2,
+	__SCHED_FEAT_LAST_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_UTIL_EST_FASTUP = 22,
+	__SCHED_FEAT_LATENCY_WARN = 23,
+	__SCHED_FEAT_ALT_PERIOD = 24,
+	__SCHED_FEAT_BASE_SLICE = 25,
+	__SCHED_FEAT_NR = 26,
+};
+
+struct affinity_context {
+	const struct cpumask *new_mask;
+	struct cpumask *user_mask;
 	unsigned int flags;
-	long unsigned int private;
 };
 
-struct pipe_buf_operations {
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
 };
 
-struct skb_ext {
-	refcount_t refcnt;
-	u8 offset[4];
-	u8 chunks;
-	long: 56;
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+		__u32 uring_cmd_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_SENDMSG_ZC = 48,
+	IORING_OP_LAST = 49,
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_fixed_file {
+	long unsigned int file_ptr;
+};
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	long unsigned int *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	short unsigned int submit_nr;
+	unsigned int cqes_count;
+	struct blk_plug plug;
+	struct io_uring_cqe cqes[16];
+};
+
+struct io_alloc_cache {
+	struct hlist_head list;
+	unsigned int nr_cached;
+};
+
+struct io_restriction {
+	long unsigned int register_op[1];
+	long unsigned int sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_buffer_list;
+
+struct io_sq_data;
+
+struct io_ev_fd;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		struct percpu_ref refs;
+		struct io_rings *rings;
+		unsigned int flags;
+		enum task_work_notify_mode notify_method;
+		unsigned int compat: 1;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int has_evfd: 1;
+		unsigned int syscall_iopoll: 1;
+		unsigned int task_complete: 1;
+		long: 55;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		int rsrc_cached_refs;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_submit_state submit_state;
+		struct io_buffer_list *io_bl;
+		struct xarray io_bl_xa;
+		struct list_head io_buffers_cache;
+		struct io_hash_table cancel_table_locked;
+		struct list_head cq_overflow_list;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+		long: 64;
+		long: 64;
+	};
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	long unsigned int check_cq;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	long: 32;
+	long: 64;
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd *io_ev_fd;
+		struct wait_queue_head cq_wait;
+		unsigned int cq_extra;
+	};
+	struct {
+		spinlock_t completion_lock;
+		bool poll_multi_queue;
+		struct io_wq_work_list iopoll_list;
+		struct io_hash_table cancel_table;
+		struct llist_head work_llist;
+		struct list_head io_buffers_comp;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		atomic_t cq_timeouts;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 32;
+		long: 64;
+		long: 64;
+	};
+	struct io_restriction restrictions;
+	struct task_struct *submitter_task;
+	struct io_rsrc_node *rsrc_backup_node;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct delayed_work rsrc_put_work;
+	struct callback_head rsrc_put_tw;
+	struct llist_head rsrc_put_llist;
+	struct list_head rsrc_ref_list;
+	spinlock_t rsrc_ref_lock;
+	struct list_head io_buffers_pages;
+	struct socket *ring_sock;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_uring {
+	u32 head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 tail;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, bool *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_buffer;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	union {
+		struct hlist_node hash_node;
+		struct {
+			u64 extra1;
+			u64 extra2;
+		};
+	};
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+	atomic_t refs;
+	atomic_t ops;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	long unsigned int map;
+	struct wait_queue_head wait;
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_CQE32_INIT_BIT = 26,
+	REQ_F_APOLL_MULTISHOT_BIT = 27,
+	REQ_F_CLEAR_POLLIN_BIT = 28,
+	REQ_F_HASH_LOCKED_BIT = 29,
+	REQ_F_SUPPORT_NOWAIT_BIT = 30,
+	REQ_F_ISREG_BIT = 31,
+	__REQ_F_LAST_BIT = 32,
+};
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+struct cfs_schedulable_data {
+	struct task_group *tg;
+	u64 period;
+	u64 quota;
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+union cpumask_rcuhead {
+	cpumask_t cpumask;
+	struct callback_head rcu;
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+struct rt_mutex_base;
+
+struct ww_acquire_ctx;
+
+struct rt_mutex_waiter {
+	struct rb_node tree_entry;
+	struct rb_node pi_tree_entry;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	int prio;
+	u64 deadline;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	long unsigned int stamp;
+	unsigned int acquired;
+	short unsigned int wounded;
+	short unsigned int is_wait_die;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+typedef unsigned int uint;
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short int flags;
+	short int index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	long unsigned int dropped;
+	void *data;
+	struct hlist_node node;
+};
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+	char *brl_options;
+};
+
+struct dev_printk_info {
+	char subsystem[16];
+	char device[48];
+};
+
+struct printk_info {
+	u64 seq;
+	u64 ts_nsec;
+	u16 text_len;
+	u8 facility;
+	u8 flags: 5;
+	u8 level: 3;
+	u32 caller_id;
+	struct dev_printk_info dev_info;
+};
+
+struct printk_record {
+	struct printk_info *info;
+	char *text_buf;
+	unsigned int text_buf_size;
+};
+
+struct prb_data_blk_lpos {
+	long unsigned int begin;
+	long unsigned int next;
+};
+
+struct prb_desc {
+	atomic_long_t state_var;
+	struct prb_data_blk_lpos text_blk_lpos;
+};
+
+struct prb_data_ring {
+	unsigned int size_bits;
+	char *data;
+	atomic_long_t head_lpos;
+	atomic_long_t tail_lpos;
+};
+
+struct prb_desc_ring {
+	unsigned int count_bits;
+	struct prb_desc *descs;
+	struct printk_info *infos;
+	atomic_long_t head_id;
+	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
+};
+
+struct printk_ringbuffer {
+	struct prb_desc_ring desc_ring;
+	struct prb_data_ring text_data_ring;
+	atomic_long_t fail;
+};
+
+struct prb_reserved_entry {
+	struct printk_ringbuffer *rb;
+	long unsigned int irqflags;
+	long unsigned int id;
+	unsigned int text_space;
+};
+
+enum desc_state {
+	desc_miss = -1,
+	desc_reserved = 0,
+	desc_committed = 1,
+	desc_finalized = 2,
+	desc_reusable = 3,
+};
+
+struct prb_data_block {
+	long unsigned int id;
 	char data[0];
 };
 
-struct dql {
-	unsigned int num_queued;
-	unsigned int adj_limit;
-	unsigned int last_obj_cnt;
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_MSI_NOMASK_QUIRK = 134217728,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
+	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+};
+
+enum {
+	IRQTF_RUNTHREAD = 0,
+	IRQTF_WARNED = 1,
+	IRQTF_AFFINITY = 2,
+	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+	IRQS_SYSFS = 16384,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 0,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+typedef __u32 __le32;
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long int len;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_future_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	long int gp_seq_req;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period_init {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	u8 level;
+	int grplo;
+	int grphi;
+	long unsigned int qsmask;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gpseq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_funnel_lock {
+	struct trace_entry ent;
+	const char *rcuname;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_preempt_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_unlock_preempted_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_quiescent_state_report {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	long unsigned int mask;
+	long unsigned int qsmask;
+	u8 level;
+	int grplo;
+	int grphi;
+	u8 gp_tasks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_fqs {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int cpu;
+	const char *qsevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_dyntick {
+	struct trace_entry ent;
+	const char *polarity;
+	long int oldnesting;
+	long int newnesting;
+	int dynticks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	long int qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_segcb_stats {
+	struct trace_entry ent;
+	const char *ctx;
+	long unsigned int gp_seq[4];
+	long int seglen[4];
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	long unsigned int offset;
+	long int qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_start {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int qlen;
+	long int blimit;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	long unsigned int offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kfree_bulk_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	long unsigned int nr_records;
+	void **p;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_end {
+	struct trace_entry ent;
+	const char *rcuname;
+	int callbacks_invoked;
+	char cb;
+	char nr;
+	char iit;
+	char risk;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_torture_read {
+	struct trace_entry ent;
+	char rcutorturename[8];
+	struct callback_head *rhp;
+	long unsigned int secs;
+	long unsigned int c_old;
+	long unsigned int c;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_barrier {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *s;
+	int cpu;
+	int cnt;
+	long unsigned int done;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_grace_period {};
+
+struct trace_event_data_offsets_rcu_future_grace_period {};
+
+struct trace_event_data_offsets_rcu_grace_period_init {};
+
+struct trace_event_data_offsets_rcu_exp_grace_period {};
+
+struct trace_event_data_offsets_rcu_exp_funnel_lock {};
+
+struct trace_event_data_offsets_rcu_preempt_task {};
+
+struct trace_event_data_offsets_rcu_unlock_preempted_task {};
+
+struct trace_event_data_offsets_rcu_quiescent_state_report {};
+
+struct trace_event_data_offsets_rcu_fqs {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+struct trace_event_data_offsets_rcu_dyntick {};
+
+struct trace_event_data_offsets_rcu_callback {};
+
+struct trace_event_data_offsets_rcu_segcb_stats {};
+
+struct trace_event_data_offsets_rcu_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_batch_start {};
+
+struct trace_event_data_offsets_rcu_invoke_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kfree_bulk_callback {};
+
+struct trace_event_data_offsets_rcu_batch_end {};
+
+struct trace_event_data_offsets_rcu_torture_read {};
+
+struct trace_event_data_offsets_rcu_barrier {};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_grace_period)(void *, const char *, long unsigned int, const char *);
+
+typedef void (*btf_trace_rcu_future_grace_period)(void *, const char *, long unsigned int, long unsigned int, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_grace_period_init)(void *, const char *, long unsigned int, u8, int, int, long unsigned int);
+
+typedef void (*btf_trace_rcu_exp_grace_period)(void *, const char *, long unsigned int, const char *);
+
+typedef void (*btf_trace_rcu_exp_funnel_lock)(void *, const char *, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_preempt_task)(void *, const char *, int, long unsigned int);
+
+typedef void (*btf_trace_rcu_unlock_preempted_task)(void *, const char *, long unsigned int, int);
+
+typedef void (*btf_trace_rcu_quiescent_state_report)(void *, const char *, long unsigned int, long unsigned int, long unsigned int, u8, int, int, int);
+
+typedef void (*btf_trace_rcu_fqs)(void *, const char *, long unsigned int, int, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+typedef void (*btf_trace_rcu_dyntick)(void *, const char *, long int, long int, int);
+
+typedef void (*btf_trace_rcu_callback)(void *, const char *, struct callback_head *, long int);
+
+typedef void (*btf_trace_rcu_segcb_stats)(void *, struct rcu_segcblist *, const char *);
+
+typedef void (*btf_trace_rcu_kvfree_callback)(void *, const char *, struct callback_head *, long unsigned int, long int);
+
+typedef void (*btf_trace_rcu_batch_start)(void *, const char *, long int, long int);
+
+typedef void (*btf_trace_rcu_invoke_callback)(void *, const char *, struct callback_head *);
+
+typedef void (*btf_trace_rcu_invoke_kvfree_callback)(void *, const char *, struct callback_head *, long unsigned int);
+
+typedef void (*btf_trace_rcu_invoke_kfree_bulk_callback)(void *, const char *, long unsigned int, void **);
+
+typedef void (*btf_trace_rcu_batch_end)(void *, const char *, int, char, char, char, char);
+
+typedef void (*btf_trace_rcu_torture_read)(void *, const char *, struct callback_head *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_rcu_barrier)(void *, const char *, const char *, int, int, long unsigned int);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	long unsigned int gp_jiffies;
+	long unsigned int gp_start;
+	long unsigned int tasks_gp_seq;
+	long unsigned int n_ipis;
+	long unsigned int n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	long unsigned int percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	long unsigned int barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	long unsigned int rtp_jiffies;
+	long unsigned int rtp_n_lock_retries;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct cma {
+	long unsigned int base_pfn;
+	long unsigned int count;
+	long unsigned int *bitmap;
+	unsigned int order_per_bit;
+	spinlock_t lock;
+	char name[64];
+	bool reserve_pages_on_error;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	long unsigned int fdt_node;
+	long unsigned int phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum class_map_type {
+	DD_CLASS_TYPE_DISJOINT_BITS = 0,
+	DD_CLASS_TYPE_LEVEL_NUM = 1,
+	DD_CLASS_TYPE_DISJOINT_NAMES = 2,
+	DD_CLASS_TYPE_LEVEL_NAMES = 3,
+};
+
+struct ddebug_class_map {
+	struct list_head link;
+	struct module *mod;
+	const char *mod_name;
+	const char **class_names;
+	const int length;
+	const int base;
+	enum class_map_type map_type;
+};
+
+struct _ddebug_info {
+	struct _ddebug *descs;
+	struct ddebug_class_map *classes;
+	unsigned int num_descs;
+	unsigned int num_classes;
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+typedef __u64 Elf64_Off;
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	long unsigned int len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	long unsigned int symoffs;
+	long unsigned int stroffs;
+	long unsigned int init_typeoffs;
+	long unsigned int core_typeoffs;
+	struct _ddebug_info dyndbg;
+	bool sig_ok;
+	long unsigned int mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	long unsigned int addr_min;
+	long unsigned int addr_max;
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	long unsigned int ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	long unsigned int ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *module_init;
+};
+
+struct modversion_info {
+	long unsigned int crc;
+	char name[56];
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+typedef __kernel_clock_t clock_t;
+
+typedef __u64 timeu64_t;
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+struct __kernel_timex_timeval {
+	__kernel_time64_t tv_sec;
+	long long int tv_usec;
+};
+
+struct __kernel_timex {
+	unsigned int modes;
+	long long int offset;
+	long long int freq;
+	long long int maxerror;
+	long long int esterror;
+	int status;
+	long long int constant;
+	long long int precision;
+	long long int tolerance;
+	struct __kernel_timex_timeval time;
+	long long int tick;
+	long long int ppsfreq;
+	long long int jitter;
+	int shift;
+	long long int stabil;
+	long long int jitcnt;
+	long long int calcnt;
+	long long int errcnt;
+	long long int stbcnt;
+	int tai;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, long unsigned int);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long int *);
+	int (*set_offset)(struct device *, long int);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	long unsigned int flags;
+	long unsigned int irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	long unsigned int set_offset_nsec;
+	long unsigned int features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+	struct work_struct uie_task;
+	struct timer_list uie_timer;
+	unsigned int oldsecs;
+	unsigned int uie_irq_active: 1;
+	unsigned int stop_uie_polling: 1;
+	unsigned int uie_task_active: 1;
+	unsigned int uie_timer_active: 1;
+};
+
+struct audit_ntp_val {
+	long long int oldval;
+	long long int newval;
+};
+
+struct audit_ntp_data {
+	struct audit_ntp_val vals[6];
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_sched {
+	struct hrtimer sched_timer;
+	long unsigned int check_clocks;
+	enum tick_nohz_mode nohz_mode;
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	long unsigned int idle_jiffies;
+	long unsigned int idle_calls;
+	long unsigned int idle_sleeps;
+	ktime_t idle_entrytime;
+	ktime_t idle_waketime;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	long unsigned int last_jiffies;
+	u64 timer_expires;
+	u64 timer_expires_base;
+	u64 next_timer;
+	ktime_t idle_expires;
+	atomic_t tick_dep_mask;
+	long unsigned int last_tick_jiffies;
+	unsigned int stalled_jiffies;
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+typedef __kernel_timer_t timer_t;
+
+enum alarmtimer_type {
+	ALARM_REALTIME = 0,
+	ALARM_BOOTTIME = 1,
+	ALARM_NUMTYPE = 2,
+	ALARM_REALTIME_FREEZER = 3,
+	ALARM_BOOTTIME_FREEZER = 4,
+};
+
+enum alarmtimer_restart {
+	ALARMTIMER_NORESTART = 0,
+	ALARMTIMER_RESTART = 1,
+};
+
+struct alarm {
+	struct timerqueue_node node;
+	struct hrtimer timer;
+	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
+	enum alarmtimer_type type;
+	int state;
+	void *data;
+};
+
+struct cpu_timer {
+	struct timerqueue_node node;
+	struct timerqueue_head *head;
+	struct pid *pid;
+	struct list_head elist;
+	int firing;
+};
+
+struct k_clock;
+
+struct k_itimer {
+	struct list_head list;
+	struct hlist_node t_hash;
+	spinlock_t it_lock;
+	const struct k_clock *kclock;
+	clockid_t it_clock;
+	timer_t it_id;
+	int it_active;
+	s64 it_overrun;
+	s64 it_overrun_last;
+	int it_requeue_pending;
+	int it_sigev_notify;
+	ktime_t it_interval;
+	struct signal_struct *it_signal;
+	union {
+		struct pid *it_pid;
+		struct task_struct *it_process;
+	};
+	struct sigqueue *sigq;
+	union {
+		struct {
+			struct hrtimer timer;
+		} real;
+		struct cpu_timer cpu;
+		struct {
+			struct alarm alarmtimer;
+		} alarm;
+	} it;
+	struct callback_head rcu;
+};
+
+struct k_clock {
+	int (*clock_getres)(const clockid_t, struct timespec64 *);
+	int (*clock_set)(const clockid_t, const struct timespec64 *);
+	int (*clock_get_timespec)(const clockid_t, struct timespec64 *);
+	ktime_t (*clock_get_ktime)(const clockid_t);
+	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
+	int (*timer_create)(struct k_itimer *);
+	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
+	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
+	int (*timer_del)(struct k_itimer *);
+	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
+	void (*timer_rearm)(struct k_itimer *);
+	s64 (*timer_forward)(struct k_itimer *, ktime_t);
+	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
+	int (*timer_try_to_cancel)(struct k_itimer *);
+	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
+	void (*timer_wait_running)(struct k_itimer *);
+};
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+typedef s64 int64_t;
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
+};
+
+typedef struct {
+	unsigned int ipi_irqs[2];
+	unsigned int __softirq_pending;
 	long: 32;
 	long: 64;
 	long: 64;
@@ -10944,19 +16919,8861 @@
 	long: 64;
 	long: 64;
 	long: 64;
+} irq_cpustat_t;
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		long unsigned int pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		long unsigned int address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		long unsigned int word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+struct cfd_percpu {
+	call_single_data_t csd;
+};
+
+struct call_function_data {
+	struct cfd_percpu *pcpu;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+typedef long unsigned int elf_greg_t;
+
+typedef elf_greg_t elf_gregset_t[45];
+
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
+};
+
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short int pr_cursig;
+	long unsigned int pr_sigpend;
+	long unsigned int pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
+};
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
+};
+
+typedef u32 note_buf_t[128];
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+};
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	long unsigned int magic;
+	bool new_sb_created;
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
+};
+
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
+};
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods = 8,
+	Opt_nofavordynmods = 9,
+};
+
+struct pids_cgroup {
+	struct cgroup_subsys_state css;
+	atomic64_t counter;
+	atomic64_t limit;
+	int64_t watermark;
+	struct cgroup_file events_file;
+	atomic64_t events_limit;
+};
+
+enum misc_res_type {
+	MISC_CG_RES_TYPES = 0,
+};
+
+struct misc_res {
+	long unsigned int max;
+	atomic_long_t usage;
+	atomic_long_t events;
+};
+
+struct misc_cg {
+	struct cgroup_subsys_state css;
+	struct cgroup_file events_file;
+	struct misc_res res[0];
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+struct idmap_key {
+	bool map_up;
+	u32 id;
+	u32 count;
+};
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	long unsigned int caller;
+	cpu_stop_fn_t fn;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+typedef int __kernel_mqd_t;
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+enum audit_state {
+	AUDIT_STATE_DISABLED = 0,
+	AUDIT_STATE_BUILD = 1,
+	AUDIT_STATE_RECORD = 2,
+};
+
+struct audit_cap_data {
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	union {
+		unsigned int fE;
+		kernel_cap_t effective;
+	};
+	kernel_cap_t ambient;
+	kuid_t rootid;
+};
+
+struct audit_names {
+	struct list_head list;
+	struct filename *name;
+	int name_len;
+	bool hidden;
+	long unsigned int ino;
+	dev_t dev;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	u32 osid;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	unsigned char type;
+	bool should_free;
+};
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+struct audit_proctitle {
+	int len;
+	char *value;
+};
+
+struct audit_aux_data;
+
+struct __kernel_sockaddr_storage;
+
+struct audit_tree_refs;
+
+struct audit_context {
+	int dummy;
+	enum {
+		AUDIT_CTX_UNUSED = 0,
+		AUDIT_CTX_SYSCALL = 1,
+		AUDIT_CTX_URING = 2,
+	} context;
+	enum audit_state state;
+	enum audit_state current_state;
+	unsigned int serial;
+	int major;
+	int uring_op;
+	struct timespec64 ctime;
+	long unsigned int argv[4];
+	long int return_code;
+	u64 prio;
+	int return_valid;
+	struct audit_names preallocated_names[5];
+	int name_count;
+	struct list_head names_list;
+	char *filterkey;
+	struct path pwd;
+	struct audit_aux_data *aux;
+	struct audit_aux_data *aux_pids;
+	struct __kernel_sockaddr_storage *sockaddr;
+	size_t sockaddr_len;
+	pid_t ppid;
+	kuid_t uid;
+	kuid_t euid;
+	kuid_t suid;
+	kuid_t fsuid;
+	kgid_t gid;
+	kgid_t egid;
+	kgid_t sgid;
+	kgid_t fsgid;
+	long unsigned int personality;
+	int arch;
+	pid_t target_pid;
+	kuid_t target_auid;
+	kuid_t target_uid;
+	unsigned int target_sessionid;
+	u32 target_sid;
+	char target_comm[16];
+	struct audit_tree_refs *trees;
+	struct audit_tree_refs *first_trees;
+	struct list_head killed_trees;
+	int tree_count;
+	int type;
+	union {
+		struct {
+			int nargs;
+			long int args[6];
+		} socketcall;
+		struct {
+			kuid_t uid;
+			kgid_t gid;
+			umode_t mode;
+			u32 osid;
+			int has_perm;
+			uid_t perm_uid;
+			gid_t perm_gid;
+			umode_t perm_mode;
+			long unsigned int qbytes;
+		} ipc;
+		struct {
+			mqd_t mqdes;
+			struct mq_attr mqstat;
+		} mq_getsetattr;
+		struct {
+			mqd_t mqdes;
+			int sigev_signo;
+		} mq_notify;
+		struct {
+			mqd_t mqdes;
+			size_t msg_len;
+			unsigned int msg_prio;
+			struct timespec64 abs_timeout;
+		} mq_sendrecv;
+		struct {
+			int oflag;
+			umode_t mode;
+			struct mq_attr attr;
+		} mq_open;
+		struct {
+			pid_t pid;
+			struct audit_cap_data cap;
+		} capset;
+		struct {
+			int fd;
+			int flags;
+		} mmap;
+		struct open_how openat2;
+		struct {
+			int argc;
+		} execve;
+		struct {
+			char *name;
+		} module;
+		struct {
+			struct audit_ntp_data ntp_data;
+			struct timespec64 tk_injoffset;
+		} time;
+	};
+	int fds[2];
+	struct audit_proctitle proctitle;
+};
+
+typedef struct fsnotify_mark_connector *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	short unsigned int type;
+	short unsigned int flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+enum {
+	Audit_equal = 0,
+	Audit_not_equal = 1,
+	Audit_bitmask = 2,
+	Audit_bittest = 3,
+	Audit_lt = 4,
+	Audit_gt = 5,
+	Audit_le = 6,
+	Audit_ge = 7,
+	Audit_bad = 8,
+};
+
+struct audit_field;
+
+struct audit_watch;
+
+struct audit_tree;
+
+struct audit_fsnotify_mark;
+
+struct audit_krule {
+	u32 pflags;
+	u32 flags;
+	u32 listnr;
+	u32 action;
+	u32 mask[64];
+	u32 buflen;
+	u32 field_count;
+	char *filterkey;
+	struct audit_field *fields;
+	struct audit_field *arch_f;
+	struct audit_field *inode_f;
+	struct audit_watch *watch;
+	struct audit_tree *tree;
+	struct audit_fsnotify_mark *exe;
+	struct list_head rlist;
+	struct list_head list;
+	u64 prio;
+};
+
+struct audit_field {
+	u32 type;
+	union {
+		u32 val;
+		kuid_t uid;
+		kgid_t gid;
+		struct {
+			char *lsm_str;
+			void *lsm_rule;
+		};
+	};
+	u32 op;
+};
+
+struct audit_parent;
+
+struct audit_watch {
+	refcount_t count;
+	dev_t dev;
+	char *path;
+	long unsigned int ino;
+	struct audit_parent *parent;
+	struct list_head wlist;
+	struct list_head rules;
+};
+
+struct fsnotify_group;
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_event;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
+};
+
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
+};
+
+struct fanotify_group_private_data {
+	struct hlist_head *merge_hash;
+	struct list_head access_list;
+	wait_queue_head_t access_waitq;
+	int flags;
+	int f_flags;
+	struct ucounts *ucounts;
+	mempool_t error_events_pool;
+};
+
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+		struct fanotify_group_private_data fanotify_data;
+	};
+};
+
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
+};
+
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
+	unsigned int flags;
+};
+
+struct fsnotify_event {
+	struct list_head list;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = -1,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+struct audit_entry {
+	struct list_head list;
+	struct callback_head rcu;
+	struct audit_krule rule;
+};
+
+struct audit_parent {
+	struct list_head watches;
+	struct fsnotify_mark mark;
+};
+
+struct audit_buffer;
+
+struct audit_fsnotify_mark {
+	dev_t dev;
+	long unsigned int ino;
+	char *path;
+	struct fsnotify_mark mark;
+	struct audit_krule *rule;
+};
+
+struct rchan;
+
+struct rchan_buf {
+	void *start;
+	void *data;
+	size_t offset;
+	size_t subbufs_produced;
+	size_t subbufs_consumed;
+	struct rchan *chan;
+	wait_queue_head_t read_wait;
+	struct irq_work wakeup_work;
+	struct dentry *dentry;
+	struct kref kref;
+	struct page **page_array;
+	unsigned int page_count;
+	unsigned int finalized;
+	size_t *padding;
+	size_t prev_padding;
+	size_t bytes_consumed;
+	size_t early_bytes;
+	unsigned int cpu;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+struct rchan_callbacks;
+
+struct rchan {
+	u32 version;
+	size_t subbuf_size;
+	size_t n_subbufs;
+	size_t alloc_size;
+	const struct rchan_callbacks *cb;
+	struct kref kref;
+	void *private_data;
+	size_t last_toobig;
+	struct rchan_buf **buf;
+	int is_global;
+	struct list_head list;
+	struct dentry *parent;
+	int has_base_filename;
+	char base_filename[255];
+};
+
+struct rchan_callbacks {
+	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
+	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
+	int (*remove_buf_file)(struct dentry *);
+};
+
+struct partial_page {
+	unsigned int offset;
+	unsigned int len;
+	long unsigned int private;
+};
+
+struct splice_pipe_desc {
+	struct page **pages;
+	struct partial_page *partial;
+	int nr_pages;
+	unsigned int nr_pages_max;
+	const struct pipe_buf_operations *ops;
+	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+};
+
+struct rchan_percpu_buf_dispatcher {
+	struct rchan_buf *buf;
+	struct dentry *dentry;
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_transition_snapshot {
+	long unsigned int rcu;
+	long unsigned int srcu;
+	bool ongoing;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+typedef unsigned int xa_mark_t;
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+struct ftrace_hash {
+	long unsigned int size_bits;
+	struct hlist_head *buckets;
+	long unsigned int count;
+	long unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry *prog;
+	char *filter_string;
+};
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct trace_pid_list *filtered_pids;
+	struct trace_pid_list *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int sys_refcount_enter;
+	int sys_refcount_exit;
+	struct trace_event_file *enter_syscall_files[451];
+	struct trace_event_file *exit_syscall_files[451];
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct dentry *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	int ref;
+	int trace_ref;
+	struct ftrace_ops *ops;
+	struct trace_pid_list *function_pids;
+	struct trace_pid_list *function_no_pids;
+	struct list_head func_probes;
+	struct list_head mod_trace;
+	struct list_head mod_notrace;
+	int function_enabled;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct trace_func_repeats *last_func_repeats;
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool noboot;
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct dentry *entry;
+	int ref_count;
+	int nr_events;
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	long unsigned int data[256];
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	long unsigned int caller[8];
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	long unsigned int caller[8];
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	char buf[0];
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *str;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	long unsigned int entries;
+	long unsigned int saved_latency;
+	long unsigned int critical_start;
+	long unsigned int critical_end;
+	long unsigned int critical_sequence;
+	long unsigned int nice;
+	long unsigned int policy;
+	long unsigned int rt_priority;
+	long unsigned int skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	int ftrace_ignore_pid;
+	bool ignore_pid;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct tracer_opt;
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+struct trace_func_repeats {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	long unsigned int count;
+	u64 ts_last_call;
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+enum trace_iterator_bits {
+	TRACE_ITER_PRINT_PARENT_BIT = 0,
+	TRACE_ITER_SYM_OFFSET_BIT = 1,
+	TRACE_ITER_SYM_ADDR_BIT = 2,
+	TRACE_ITER_VERBOSE_BIT = 3,
+	TRACE_ITER_RAW_BIT = 4,
+	TRACE_ITER_HEX_BIT = 5,
+	TRACE_ITER_BIN_BIT = 6,
+	TRACE_ITER_BLOCK_BIT = 7,
+	TRACE_ITER_PRINTK_BIT = 8,
+	TRACE_ITER_ANNOTATE_BIT = 9,
+	TRACE_ITER_USERSTACKTRACE_BIT = 10,
+	TRACE_ITER_SYM_USEROBJ_BIT = 11,
+	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
+	TRACE_ITER_CONTEXT_INFO_BIT = 13,
+	TRACE_ITER_LATENCY_FMT_BIT = 14,
+	TRACE_ITER_RECORD_CMD_BIT = 15,
+	TRACE_ITER_RECORD_TGID_BIT = 16,
+	TRACE_ITER_OVERWRITE_BIT = 17,
+	TRACE_ITER_STOP_ON_FREE_BIT = 18,
+	TRACE_ITER_IRQ_INFO_BIT = 19,
+	TRACE_ITER_MARKERS_BIT = 20,
+	TRACE_ITER_EVENT_FORK_BIT = 21,
+	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
+	TRACE_ITER_HASH_PTR_BIT = 23,
+	TRACE_ITER_FUNCTION_BIT = 24,
+	TRACE_ITER_FUNC_FORK_BIT = 25,
+	TRACE_ITER_DISPLAY_GRAPH_BIT = 26,
+	TRACE_ITER_STACKTRACE_BIT = 27,
+	TRACE_ITER_LAST_BIT = 28,
+};
+
+enum trace_iterator_flags {
+	TRACE_ITER_PRINT_PARENT = 1,
+	TRACE_ITER_SYM_OFFSET = 2,
+	TRACE_ITER_SYM_ADDR = 4,
+	TRACE_ITER_VERBOSE = 8,
+	TRACE_ITER_RAW = 16,
+	TRACE_ITER_HEX = 32,
+	TRACE_ITER_BIN = 64,
+	TRACE_ITER_BLOCK = 128,
+	TRACE_ITER_PRINTK = 256,
+	TRACE_ITER_ANNOTATE = 512,
+	TRACE_ITER_USERSTACKTRACE = 1024,
+	TRACE_ITER_SYM_USEROBJ = 2048,
+	TRACE_ITER_PRINTK_MSGONLY = 4096,
+	TRACE_ITER_CONTEXT_INFO = 8192,
+	TRACE_ITER_LATENCY_FMT = 16384,
+	TRACE_ITER_RECORD_CMD = 32768,
+	TRACE_ITER_RECORD_TGID = 65536,
+	TRACE_ITER_OVERWRITE = 131072,
+	TRACE_ITER_STOP_ON_FREE = 262144,
+	TRACE_ITER_IRQ_INFO = 524288,
+	TRACE_ITER_MARKERS = 1048576,
+	TRACE_ITER_EVENT_FORK = 2097152,
+	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
+	TRACE_ITER_HASH_PTR = 8388608,
+	TRACE_ITER_FUNCTION = 16777216,
+	TRACE_ITER_FUNC_FORK = 33554432,
+	TRACE_ITER_DISPLAY_GRAPH = 67108864,
+	TRACE_ITER_STACKTRACE = 134217728,
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+struct trace_mark {
+	long long unsigned int val;
+	char sym;
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_DEVICE_TREE = 10,
+	LOCKDOWN_PCMCIA_CIS = 11,
+	LOCKDOWN_TIOCSSERIAL = 12,
+	LOCKDOWN_MODULE_PARAMETERS = 13,
+	LOCKDOWN_MMIOTRACE = 14,
+	LOCKDOWN_DEBUGFS = 15,
+	LOCKDOWN_XMON_WR = 16,
+	LOCKDOWN_BPF_WRITE_USER = 17,
+	LOCKDOWN_DBG_WRITE_KERNEL = 18,
+	LOCKDOWN_RTAS_ERROR_INJECTION = 19,
+	LOCKDOWN_INTEGRITY_MAX = 20,
+	LOCKDOWN_KCORE = 21,
+	LOCKDOWN_KPROBES = 22,
+	LOCKDOWN_BPF_READ_KERNEL = 23,
+	LOCKDOWN_DBG_READ_KERNEL = 24,
+	LOCKDOWN_PERF = 25,
+	LOCKDOWN_TRACEFS = 26,
+	LOCKDOWN_XMON_RW = 27,
+	LOCKDOWN_XFRM_SECRET = 28,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 29,
+};
+
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+enum {
+	FTRACE_OPS_FL_ENABLED = 1,
+	FTRACE_OPS_FL_DYNAMIC = 2,
+	FTRACE_OPS_FL_SAVE_REGS = 4,
+	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
+	FTRACE_OPS_FL_RECURSION = 16,
+	FTRACE_OPS_FL_STUB = 32,
+	FTRACE_OPS_FL_INITIALIZED = 64,
+	FTRACE_OPS_FL_DELETED = 128,
+	FTRACE_OPS_FL_ADDING = 256,
+	FTRACE_OPS_FL_REMOVING = 512,
+	FTRACE_OPS_FL_MODIFYING = 1024,
+	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
+	FTRACE_OPS_FL_IPMODIFY = 4096,
+	FTRACE_OPS_FL_PID = 8192,
+	FTRACE_OPS_FL_RCU = 16384,
+	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
+	FTRACE_OPS_FL_PERMANENT = 65536,
+	FTRACE_OPS_FL_DIRECT = 131072,
+};
+
+enum {
+	TRACE_ARRAY_FL_GLOBAL = 1,
+};
+
+struct ftrace_func_command {
+	struct list_head list;
+	char *name;
+	int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);
+};
+
+struct ftrace_probe_ops {
+	void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);
+	int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);
+	void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);
+	int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);
+};
+
+typedef int (*ftrace_mapper_func)(void *);
+
+enum {
+	TRACE_FUNC_NO_OPTS = 0,
+	TRACE_FUNC_OPT_STACK = 1,
+	TRACE_FUNC_OPT_NO_REPEATS = 2,
+	TRACE_FUNC_OPT_HIGHEST_BIT = 4,
+};
+
+struct ftrace_func_mapper;
+
+struct ftrace_graph_ent {
+	long unsigned int func;
+	int depth;
+} __attribute__((packed));
+
+struct ftrace_graph_ret {
+	long unsigned int func;
+	int depth;
+	unsigned int overrun;
+	long long unsigned int calltime;
+	long long unsigned int rettime;
+};
+
+typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
+
+typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
+
+struct fgraph_ops {
+	trace_func_graph_ent_t entryfunc;
+	trace_func_graph_ret_t retfunc;
+};
+
+struct syscall_trace_enter {
+	struct trace_entry ent;
+	int nr;
+	long unsigned int args[0];
+};
+
+struct syscall_trace_exit {
+	struct trace_entry ent;
+	int nr;
+	long int ret;
+};
+
+struct syscall_tp_t {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int ret;
+};
+
+struct syscall_tp_t___2 {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int args[6];
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct event_trigger_ops;
+
+struct event_command;
+
+struct event_trigger_data {
+	long unsigned int count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_ST_SYMSTR = 17,
+	FETCH_OP_MOD_BF = 18,
+	FETCH_OP_LP_ARRAY = 19,
+	FETCH_OP_TP_ARG = 20,
+	FETCH_OP_END = 21,
+	FETCH_NOP_SYMBOL = 22,
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		long unsigned int immediate;
+		void *data;
+	};
+};
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	bool is_signed;
+	bool is_string;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_MAXACT_NO_KPROBE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_BAD_RETPROBE = 10,
+	TP_ERR_BAD_ADDR_SUFFIX = 11,
+	TP_ERR_NO_GROUP_NAME = 12,
+	TP_ERR_GROUP_TOO_LONG = 13,
+	TP_ERR_BAD_GROUP_NAME = 14,
+	TP_ERR_NO_EVENT_NAME = 15,
+	TP_ERR_EVENT_TOO_LONG = 16,
+	TP_ERR_BAD_EVENT_NAME = 17,
+	TP_ERR_EVENT_EXIST = 18,
+	TP_ERR_RETVAL_ON_PROBE = 19,
+	TP_ERR_BAD_STACK_NUM = 20,
+	TP_ERR_BAD_ARG_NUM = 21,
+	TP_ERR_BAD_VAR = 22,
+	TP_ERR_BAD_REG_NAME = 23,
+	TP_ERR_BAD_MEM_ADDR = 24,
+	TP_ERR_BAD_IMM = 25,
+	TP_ERR_IMMSTR_NO_CLOSE = 26,
+	TP_ERR_FILE_ON_KPROBE = 27,
+	TP_ERR_BAD_FILE_OFFS = 28,
+	TP_ERR_SYM_ON_UPROBE = 29,
+	TP_ERR_TOO_MANY_OPS = 30,
+	TP_ERR_DEREF_NEED_BRACE = 31,
+	TP_ERR_BAD_DEREF_OFFS = 32,
+	TP_ERR_DEREF_OPEN_BRACE = 33,
+	TP_ERR_COMM_CANT_DEREF = 34,
+	TP_ERR_BAD_FETCH_ARG = 35,
+	TP_ERR_ARRAY_NO_CLOSE = 36,
+	TP_ERR_BAD_ARRAY_SUFFIX = 37,
+	TP_ERR_BAD_ARRAY_NUM = 38,
+	TP_ERR_ARRAY_TOO_BIG = 39,
+	TP_ERR_BAD_TYPE = 40,
+	TP_ERR_BAD_STRING = 41,
+	TP_ERR_BAD_SYMSTRING = 42,
+	TP_ERR_BAD_BITFIELD = 43,
+	TP_ERR_ARG_NAME_TOO_LONG = 44,
+	TP_ERR_NO_ARG_NAME = 45,
+	TP_ERR_BAD_ARG_NAME = 46,
+	TP_ERR_USED_ARG_NAME = 47,
+	TP_ERR_ARG_TOO_LONG = 48,
+	TP_ERR_NO_ARG_BODY = 49,
+	TP_ERR_BAD_INSN_BNDRY = 50,
+	TP_ERR_FAIL_REG_PROBE = 51,
+	TP_ERR_DIFF_PROBE_TYPE = 52,
+	TP_ERR_DIFF_ARG_TYPE = 53,
+	TP_ERR_SAME_PROBE = 54,
+	TP_ERR_NO_EVENT_INFO = 55,
+	TP_ERR_BAD_ATTACH_EVENT = 56,
+	TP_ERR_BAD_ATTACH_ARG = 57,
+	TP_ERR_NO_EP_FILTER = 58,
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	char *filter_str;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+typedef __u64 __be64;
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+enum bpf_task_fd_type {
+	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
+	BPF_FD_TYPE_TRACEPOINT = 1,
+	BPF_FD_TYPE_KPROBE = 2,
+	BPF_FD_TYPE_KRETPROBE = 3,
+	BPF_FD_TYPE_UPROBE = 4,
+	BPF_FD_TYPE_URETPROBE = 5,
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	short unsigned int skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		long unsigned int skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	short unsigned int skc_tx_queue_mapping;
+	short unsigned int skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+	u32 classid;
+	u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct xfrm_policy;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	struct sk_filter *sk_filter;
+	union {
+		struct socket_wq *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy *sk_policy[2];
+	struct dst_entry *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	long unsigned int sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long int sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	long unsigned int sk_pacing_rate;
+	long unsigned int sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	long unsigned int sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long int sk_rcvtimeo;
+	ktime_t sk_stamp;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u32 sk_tsflags;
+	u8 sk_shutdown;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	bool sk_use_task_frag;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	void *sk_security;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport *sk_reuseport_cb;
+	struct bpf_local_storage *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+	struct hlist_node sk_bind2_node;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	struct flowi_tunnel flowic_tun_key;
+	__u32 flowic_multipath_hash;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+	} u;
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+struct fib_rule;
+
+struct fib_lookup_arg;
+
+struct fib_rule_hdr;
+
+struct fib_rules_ops {
+	int family;
+	struct list_head list;
+	int rule_size;
+	int addr_size;
+	int unresolved_rules;
+	int nr_goto_rules;
+	unsigned int fib_rules_seq;
+	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
+	int (*match)(struct fib_rule *, struct flowi *, int);
+	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*delete)(struct fib_rule *);
+	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
+	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
+	size_t (*nlmsg_payload)(struct fib_rule *);
+	void (*flush_cache)(struct fib_rules_ops *);
+	int nlgroup;
+	struct list_head rules_list;
+	struct module *owner;
+	struct net *fro_net;
+	struct callback_head rcu;
+};
+
+struct fib_notifier_ops {
+	int family;
+	struct list_head list;
+	unsigned int (*fib_seq_read)(struct net *);
+	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
+	struct module *owner;
+	struct callback_head rcu;
+};
+
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+	int reachable_time;
+	u32 qlen;
+	int data[14];
+	long unsigned int data_state[1];
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	long unsigned int last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	long unsigned int last_rand;
+	struct neigh_statistics *stats;
+	struct neigh_hash_table *nht;
+	struct pneigh_entry **phash_buckets;
+};
+
+struct neigh_statistics {
+	long unsigned int allocs;
+	long unsigned int destroys;
+	long unsigned int hash_grows;
+	long unsigned int res_failed;
+	long unsigned int lookups;
+	long unsigned int hits;
+	long unsigned int rcv_probes_mcast;
+	long unsigned int rcv_probes_ucast;
+	long unsigned int periodic_gc_runs;
+	long unsigned int forced_gc_runs;
+	long unsigned int unres_discards;
+	long unsigned int table_fulls;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u8 key[0];
+};
+
+struct neigh_hash_table {
+	struct neighbour **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct fib_rule_hdr {
+	__u8 family;
+	__u8 dst_len;
+	__u8 src_len;
+	__u8 tos;
+	__u8 table;
+	__u8 res1;
+	__u8 res2;
+	__u8 action;
+	__u32 flags;
+};
+
+struct fib_rule_port_range {
+	__u16 start;
+	__u16 end;
+};
+
+struct fib_kuid_range {
+	kuid_t start;
+	kuid_t end;
+};
+
+struct fib_rule {
+	struct list_head list;
+	int iifindex;
+	int oifindex;
+	u32 mark;
+	u32 mark_mask;
+	u32 flags;
+	u32 table;
+	u8 action;
+	u8 l3mdev;
+	u8 proto;
+	u8 ip_proto;
+	u32 target;
+	__be64 tun_id;
+	struct fib_rule *ctarget;
+	struct net *fr_net;
+	refcount_t refcnt;
+	u32 pref;
+	int suppress_ifgroup;
+	int suppress_prefixlen;
+	char iifname[16];
+	char oifname[16];
+	struct fib_kuid_range uid_range;
+	struct fib_rule_port_range sport_range;
+	struct fib_rule_port_range dport_range;
+	struct callback_head rcu;
+};
+
+struct fib_lookup_arg {
+	void *lookup_ptr;
+	const void *lookup_data;
+	void *result;
+	struct fib_rule *rule;
+	u32 table;
+	int flags;
+};
+
+struct smc_hashinfo;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long int);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, long unsigned int);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*keepalive)(struct sock *, int);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, short unsigned int);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	long unsigned int *memory_pressure;
+	long int *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+struct kprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int ip;
+};
+
+struct kretprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int func;
+	long unsigned int ret_ip;
+};
+
+typedef int (*dynevent_check_arg_fn_t)(void *);
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
+};
+
+struct freelist_head {
+	struct freelist_node *head;
+};
+
+struct kretprobe_instance;
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct kretprobe_holder;
+
+struct kretprobe_instance {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct kretprobe_holder *rph;
+	kprobe_opcode_t *ret_addr;
+	void *fp;
+	char data[0];
+};
+
+struct kretprobe;
+
+struct kretprobe_holder {
+	struct kretprobe *rp;
+	refcount_t ref;
+};
+
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct freelist_head freelist;
+	struct kretprobe_holder *rph;
+};
+
+struct trace_kprobe {
+	struct dyn_event devent;
+	struct kretprobe rp;
+	long unsigned int *nhit;
+	const char *symbol;
+	struct trace_probe tp;
+};
+
+typedef __u16 __le16;
+
+typedef __u64 __le64;
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	BPF_FUNC_ktime_get_tai_ns = 208,
+	BPF_FUNC_user_ringbuf_drain = 209,
+	BPF_FUNC_cgrp_storage_get = 210,
+	BPF_FUNC_cgrp_storage_delete = 211,
+	__BPF_FUNC_MAX_ID = 212,
+};
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	struct rhash_lock_head *buckets[0];
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct btf_struct_meta {
+	u32 btf_id;
+	struct btf_record *record;
+	struct btf_field_offs *field_offs;
+};
+
+struct bpf_mem_caches;
+
+struct bpf_mem_cache;
+
+struct bpf_mem_alloc {
+	struct bpf_mem_caches *caches;
+	struct bpf_mem_cache *cache;
+	struct work_struct work;
+};
+
+struct bpf_verifier_log {
+	u32 level;
+	char kbuf[1024];
+	char *ubuf;
+	u32 len_used;
+	u32 len_total;
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	bool rcu_tag_supported;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	struct bpf_id_pair idmap_scratch[600];
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u32 prev_log_len;
+	u32 prev_insn_print_len;
+	char type_str_buf[128];
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		u32 mem_size;
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			long unsigned int raw1;
+			long unsigned int raw2;
+		} raw;
+		u32 subprogno;
+	};
+	u32 id;
+	u32 ref_obj_id;
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	struct tnum callback_ret_range;
+	bool in_async_callback_fn;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	bool might_sleep;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		char value[0];
+		void *ptrs[0];
+		void *pptrs[0];
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	int: 32;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+	int callback_ref;
+	bool release_on_unlock;
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	struct {
+		void *ptr;
+		u32 id;
+	} active_lock;
+	bool speculative;
+	bool active_rcu_lock;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		long unsigned int map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	u64 obj_new_size;
+	struct btf_struct_meta *kptr_struct_meta;
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	bool storage_get_func_atomic;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool prune_point;
+	bool jmp_point;
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	long unsigned int bitmap[0];
+};
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct rhash_lock_head {};
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+		__u32 cgroup_fd;
+		__u64 cgroup_id;
+	} cgroup;
+	struct {
+		__u32 tid;
+		__u32 pid;
+		__u32 pid_fd;
+	} task;
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	MAX_BPF_LINK_TYPE = 10,
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+	};
+};
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	struct work_struct work;
+};
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 56;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+	enum bpf_iter_task_type type;
+	u32 pid;
+	u32 pid_visiting;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *vma;
+	u32 tid;
+	long unsigned int prev_vm_start;
+	long unsigned int prev_vm_end;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct pcpu_freelist_node;
+
+struct pcpu_freelist_head {
+	struct pcpu_freelist_node *first;
+	raw_spinlock_t lock;
+};
+
+struct pcpu_freelist_node {
+	struct pcpu_freelist_node *next;
+};
+
+struct pcpu_freelist {
+	struct pcpu_freelist_head *freelist;
+	struct pcpu_freelist_head extralist;
+};
+
+struct bpf_lpm_trie_key {
+	__u32 prefixlen;
+	__u8 data[0];
+};
+
+enum {
+	BPF_ANY = 0,
+	BPF_NOEXIST = 1,
+	BPF_EXIST = 2,
+	BPF_F_LOCK = 4,
+};
+
+enum {
+	BPF_F_NO_PREALLOC = 1,
+	BPF_F_NO_COMMON_LRU = 2,
+	BPF_F_NUMA_NODE = 4,
+	BPF_F_RDONLY = 8,
+	BPF_F_WRONLY = 16,
+	BPF_F_STACK_BUILD_ID = 32,
+	BPF_F_ZERO_SEED = 64,
+	BPF_F_RDONLY_PROG = 128,
+	BPF_F_WRONLY_PROG = 256,
+	BPF_F_CLONE = 512,
+	BPF_F_MMAPABLE = 1024,
+	BPF_F_PRESERVE_ELEMS = 2048,
+	BPF_F_INNER_MAP = 4096,
+};
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct ipv6_stable_secret {
+	bool initialized;
+	struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+	__s32 forwarding;
+	__s32 hop_limit;
+	__s32 mtu6;
+	__s32 accept_ra;
+	__s32 accept_redirects;
+	__s32 autoconf;
+	__s32 dad_transmits;
+	__s32 rtr_solicits;
+	__s32 rtr_solicit_interval;
+	__s32 rtr_solicit_max_interval;
+	__s32 rtr_solicit_delay;
+	__s32 force_mld_version;
+	__s32 mldv1_unsolicited_report_interval;
+	__s32 mldv2_unsolicited_report_interval;
+	__s32 use_tempaddr;
+	__s32 temp_valid_lft;
+	__s32 temp_prefered_lft;
+	__s32 regen_max_retry;
+	__s32 max_desync_factor;
+	__s32 max_addresses;
+	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
+	__s32 accept_ra_min_hop_limit;
+	__s32 accept_ra_pinfo;
+	__s32 ignore_routes_with_linkdown;
+	__s32 accept_ra_rtr_pref;
+	__s32 rtr_probe_interval;
+	__s32 accept_ra_rt_info_min_plen;
+	__s32 accept_ra_rt_info_max_plen;
+	__s32 proxy_ndp;
+	__s32 accept_source_route;
+	__s32 accept_ra_from_local;
+	atomic_t mc_forwarding;
+	__s32 disable_ipv6;
+	__s32 drop_unicast_in_l2_multicast;
+	__s32 accept_dad;
+	__s32 force_tllao;
+	__s32 ndisc_notify;
+	__s32 suppress_frag_ndisc;
+	__s32 accept_ra_mtu;
+	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
+	struct ipv6_stable_secret stable_secret;
+	__s32 use_oif_addrs_only;
+	__s32 keep_addr_on_down;
+	__s32 seg6_enabled;
+	__s32 seg6_require_hmac;
+	__u32 enhanced_dad;
+	__u32 addr_gen_mode;
+	__s32 disable_policy;
+	__s32 ndisc_tclass;
+	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
+	struct ctl_table_header *sysctl_header;
+};
+
+struct icmpv6_mib_device {
+	atomic_long_t mibs[6];
+};
+
+struct icmpv6msg_mib_device {
+	atomic_long_t mibs[512];
+};
+
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 *mc_list;
+	struct ifmcaddr6 *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	long unsigned int mc_v1_seen;
+	long unsigned int mc_qi;
+	long unsigned int mc_qri;
+	long unsigned int mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	long unsigned int tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list *sf_next;
+	struct in6_addr sf_addr;
+	long unsigned int sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *next;
+	struct ip6_sf_list *mca_sources;
+	struct ip6_sf_list *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	long unsigned int mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	long unsigned int mca_cstamp;
+	long unsigned int mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	long unsigned int aca_cstamp;
+	long unsigned int aca_tstamp;
+	struct callback_head rcu;
+};
+
+struct lpm_trie_node {
+	struct callback_head rcu;
+	struct lpm_trie_node *child[2];
+	u32 prefixlen;
+	u32 flags;
+	u8 data[0];
+};
+
+struct lpm_trie {
+	struct bpf_map map;
+	struct lpm_trie_node *root;
+	size_t n_entries;
+	size_t max_prefixlen;
+	size_t data_size;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data *cache[16];
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map *smap;
+	u8 data[0];
+};
+
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage *local_storage;
+	struct callback_head rcu;
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+struct bpf_mem_cache {
+	struct llist_head free_llist;
+	local_t active;
+	struct llist_head free_llist_extra;
+	struct irq_work refill_work;
+	struct obj_cgroup *objcg;
+	int unit_size;
+	int free_cnt;
+	int low_watermark;
+	int high_watermark;
+	int batch;
+	int percpu_size;
+	struct callback_head rcu;
+	struct llist_head free_by_rcu;
+	struct llist_head waiting_for_gp;
+	atomic_t call_rcu_in_progress;
+};
+
+struct bpf_mem_caches {
+	struct bpf_mem_cache cache[11];
+};
+
+typedef long unsigned int ulong;
+
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+struct bpf_devmap_val {
+	__u32 ifindex;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_CONSUMED = 1,
+	SKB_DROP_REASON_NOT_SPECIFIED = 2,
+	SKB_DROP_REASON_NO_SOCKET = 3,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 4,
+	SKB_DROP_REASON_TCP_CSUM = 5,
+	SKB_DROP_REASON_SOCKET_FILTER = 6,
+	SKB_DROP_REASON_UDP_CSUM = 7,
+	SKB_DROP_REASON_NETFILTER_DROP = 8,
+	SKB_DROP_REASON_OTHERHOST = 9,
+	SKB_DROP_REASON_IP_CSUM = 10,
+	SKB_DROP_REASON_IP_INHDR = 11,
+	SKB_DROP_REASON_IP_RPFILTER = 12,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 13,
+	SKB_DROP_REASON_XFRM_POLICY = 14,
+	SKB_DROP_REASON_IP_NOPROTO = 15,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 16,
+	SKB_DROP_REASON_PROTO_MEM = 17,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 18,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 19,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 20,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 21,
+	SKB_DROP_REASON_TCP_FLAGS = 22,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 23,
+	SKB_DROP_REASON_TCP_OLD_DATA = 24,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 25,
+	SKB_DROP_REASON_TCP_OFOMERGE = 26,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 27,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 28,
+	SKB_DROP_REASON_TCP_RESET = 29,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 30,
+	SKB_DROP_REASON_TCP_CLOSE = 31,
+	SKB_DROP_REASON_TCP_FASTOPEN = 32,
+	SKB_DROP_REASON_TCP_OLD_ACK = 33,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 34,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 35,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 36,
+	SKB_DROP_REASON_TCP_OFO_DROP = 37,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 38,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 39,
+	SKB_DROP_REASON_IPV6DISABLED = 40,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 41,
+	SKB_DROP_REASON_NEIGH_FAILED = 42,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 43,
+	SKB_DROP_REASON_NEIGH_DEAD = 44,
+	SKB_DROP_REASON_TC_EGRESS = 45,
+	SKB_DROP_REASON_QDISC_DROP = 46,
+	SKB_DROP_REASON_CPU_BACKLOG = 47,
+	SKB_DROP_REASON_XDP = 48,
+	SKB_DROP_REASON_TC_INGRESS = 49,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 50,
+	SKB_DROP_REASON_SKB_CSUM = 51,
+	SKB_DROP_REASON_SKB_GSO_SEG = 52,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 53,
+	SKB_DROP_REASON_DEV_HDR = 54,
+	SKB_DROP_REASON_DEV_READY = 55,
+	SKB_DROP_REASON_FULL_RING = 56,
+	SKB_DROP_REASON_NOMEM = 57,
+	SKB_DROP_REASON_HDR_TRUNC = 58,
+	SKB_DROP_REASON_TAP_FILTER = 59,
+	SKB_DROP_REASON_TAP_TXFILTER = 60,
+	SKB_DROP_REASON_ICMP_CSUM = 61,
+	SKB_DROP_REASON_INVALID_PROTO = 62,
+	SKB_DROP_REASON_IP_INADDRERRORS = 63,
+	SKB_DROP_REASON_IP_INNOROUTES = 64,
+	SKB_DROP_REASON_PKT_TOO_BIG = 65,
+	SKB_DROP_REASON_DUP_FRAG = 66,
+	SKB_DROP_REASON_FRAG_REASM_TIMEOUT = 67,
+	SKB_DROP_REASON_FRAG_TOO_FAR = 68,
+	SKB_DROP_REASON_MAX = 69,
+};
+
+typedef struct bio_vec skb_frag_t;
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	short unsigned int gso_size;
+	short unsigned int gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	skb_frag_t frags[16];
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1ULL,
+	IFF_EBRIDGE = 2ULL,
+	IFF_BONDING = 4ULL,
+	IFF_ISATAP = 8ULL,
+	IFF_WAN_HDLC = 16ULL,
+	IFF_XMIT_DST_RELEASE = 32ULL,
+	IFF_DONT_BRIDGE = 64ULL,
+	IFF_DISABLE_NETPOLL = 128ULL,
+	IFF_MACVLAN_PORT = 256ULL,
+	IFF_BRIDGE_PORT = 512ULL,
+	IFF_OVS_DATAPATH = 1024ULL,
+	IFF_TX_SKB_SHARING = 2048ULL,
+	IFF_UNICAST_FLT = 4096ULL,
+	IFF_TEAM_PORT = 8192ULL,
+	IFF_SUPP_NOFCS = 16384ULL,
+	IFF_LIVE_ADDR_CHANGE = 32768ULL,
+	IFF_MACVLAN = 65536ULL,
+	IFF_XMIT_DST_RELEASE_PERM = 131072ULL,
+	IFF_L3MDEV_MASTER = 262144ULL,
+	IFF_NO_QUEUE = 524288ULL,
+	IFF_OPENVSWITCH = 1048576ULL,
+	IFF_L3MDEV_SLAVE = 2097152ULL,
+	IFF_TEAM = 4194304ULL,
+	IFF_RXFH_CONFIGURED = 8388608ULL,
+	IFF_PHONY_HEADROOM = 16777216ULL,
+	IFF_MACSEC = 33554432ULL,
+	IFF_NO_RX_HANDLER = 67108864ULL,
+	IFF_FAILOVER = 134217728ULL,
+	IFF_FAILOVER_SLAVE = 268435456ULL,
+	IFF_L3MDEV_RX_HANDLER = 536870912ULL,
+	IFF_NO_ADDRCONF = 1073741824ULL,
+	IFF_TX_SKB_NO_LINEAR = 2147483648ULL,
+	IFF_CHANGE_PROTO_DOWN = 4294967296ULL,
+};
+
+struct xdp_dev_bulk_queue {
+	struct xdp_frame *q[16];
+	struct list_head flush_node;
+	struct net_device *dev;
+	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
+	unsigned int count;
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_PRE_UNINIT = 18,
+	NETDEV_RELEASE = 19,
+	NETDEV_NOTIFY_PEERS = 20,
+	NETDEV_JOIN = 21,
+	NETDEV_CHANGEUPPER = 22,
+	NETDEV_RESEND_IGMP = 23,
+	NETDEV_PRECHANGEMTU = 24,
+	NETDEV_CHANGEINFODATA = 25,
+	NETDEV_BONDING_INFO = 26,
+	NETDEV_PRECHANGEUPPER = 27,
+	NETDEV_CHANGELOWERSTATE = 28,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 29,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 30,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 31,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 32,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 33,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 34,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 35,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 38,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 39,
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u64 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 flags;
+	u32 kern_flags;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	struct bpf_nh_params nh;
+};
+
+struct bpf_dtab;
+
+struct bpf_dtab_netdev {
+	struct net_device *dev;
+	struct hlist_node index_hlist;
+	struct bpf_dtab *dtab;
+	struct bpf_prog *xdp_prog;
+	struct callback_head rcu;
+	unsigned int idx;
+	struct bpf_devmap_val val;
+};
+
+struct bpf_dtab {
+	struct bpf_map map;
+	struct bpf_dtab_netdev **netdev_map;
+	struct list_head list;
+	struct hlist_head *dev_index_head;
+	spinlock_t index_lock;
+	unsigned int items;
+	u32 n_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
+};
+
+enum {
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
+};
+
+struct user_pt_regs {
+	long unsigned int regs[32];
+	long unsigned int orig_a0;
+	long unsigned int csr_era;
+	long unsigned int csr_badv;
+	long unsigned int reserved[10];
+};
+
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 18446744073709551584ULL,
+	PERF_CONTEXT_KERNEL = 18446744073709551488ULL,
+	PERF_CONTEXT_USER = 18446744073709551104ULL,
+	PERF_CONTEXT_GUEST = 18446744073709549568ULL,
+	PERF_CONTEXT_GUEST_KERNEL = 18446744073709549440ULL,
+	PERF_CONTEXT_GUEST_USER = 18446744073709549056ULL,
+	PERF_CONTEXT_MAX = 18446744073709547521ULL,
+};
+
+typedef struct user_pt_regs bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+struct mem_section_usage {
+	long unsigned int subsection_map[4];
+	long unsigned int pageblock_flags[0];
+};
+
+struct mem_section {
+	long unsigned int section_mem_map;
+	struct mem_section_usage *usage;
+};
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_MAP_LAST_BIT = 4,
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+typedef struct {
+	long unsigned int val;
+} swp_entry_t;
+
+typedef struct pglist_data pg_data_t;
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void *slots[64];
+	union {
+		long unsigned int tags[3];
+		long unsigned int marks[3];
+	};
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	long unsigned int xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
+struct vm_event_state {
+	long unsigned int event[106];
+};
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_PIPE = 3,
+	ITER_XARRAY = 4,
+	ITER_DISCARD = 5,
+	ITER_UBUF = 6,
+};
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
+};
+
+struct pagevec {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct page *pages[15];
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	long unsigned int free_pfn;
+	long unsigned int migrate_pfn;
+	long unsigned int fast_start_pfn;
+	struct zone *zone;
+	long unsigned int total_migrate_scanned;
+	long unsigned int total_free_scanned;
+	short unsigned int fast_search_fail;
+	short int search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool rescan;
+	bool alloc_contig;
+};
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	long unsigned int i_ino;
+	long unsigned int index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_MAX_UNBOUND_PER_CPU = 4,
+	WQ_DFL_ACTIVE = 256,
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+enum cpuhp_state {
+	CPUHP_INVALID = -1,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_IBMVNIC_DEAD = 11,
+	CPUHP_SLUB_DEAD = 12,
+	CPUHP_DEBUG_OBJ_DEAD = 13,
+	CPUHP_MM_WRITEBACK_DEAD = 14,
+	CPUHP_MM_DEMOTION_DEAD = 15,
+	CPUHP_MM_VMSTAT_DEAD = 16,
+	CPUHP_SOFTIRQ_DEAD = 17,
+	CPUHP_NET_MVNETA_DEAD = 18,
+	CPUHP_CPUIDLE_DEAD = 19,
+	CPUHP_ARM64_FPSIMD_DEAD = 20,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 21,
+	CPUHP_IRQ_POLL_DEAD = 22,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 23,
+	CPUHP_BIO_DEAD = 24,
+	CPUHP_ACPI_CPUDRV_DEAD = 25,
+	CPUHP_S390_PFAULT_DEAD = 26,
+	CPUHP_BLK_MQ_DEAD = 27,
+	CPUHP_FS_BUFF_DEAD = 28,
+	CPUHP_PRINTK_DEAD = 29,
+	CPUHP_MM_MEMCQ_DEAD = 30,
+	CPUHP_XFS_DEAD = 31,
+	CPUHP_PERCPU_CNT_DEAD = 32,
+	CPUHP_RADIX_DEAD = 33,
+	CPUHP_PAGE_ALLOC = 34,
+	CPUHP_NET_DEV_DEAD = 35,
+	CPUHP_PCI_XGENE_DEAD = 36,
+	CPUHP_IOMMU_IOVA_DEAD = 37,
+	CPUHP_LUSTRE_CFS_DEAD = 38,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 39,
+	CPUHP_PADATA_DEAD = 40,
+	CPUHP_AP_DTPM_CPU_DEAD = 41,
+	CPUHP_RANDOM_PREPARE = 42,
+	CPUHP_WORKQUEUE_PREP = 43,
+	CPUHP_POWER_NUMA_PREPARE = 44,
+	CPUHP_HRTIMERS_PREPARE = 45,
+	CPUHP_PROFILE_PREPARE = 46,
+	CPUHP_X2APIC_PREPARE = 47,
+	CPUHP_SMPCFD_PREPARE = 48,
+	CPUHP_RELAY_PREPARE = 49,
+	CPUHP_SLAB_PREPARE = 50,
+	CPUHP_MD_RAID5_PREPARE = 51,
+	CPUHP_RCUTREE_PREP = 52,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 53,
+	CPUHP_POWERPC_PMAC_PREPARE = 54,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 55,
+	CPUHP_XEN_PREPARE = 56,
+	CPUHP_XEN_EVTCHN_PREPARE = 57,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 58,
+	CPUHP_SH_SH3X_PREPARE = 59,
+	CPUHP_NET_FLOW_PREPARE = 60,
+	CPUHP_TOPOLOGY_PREPARE = 61,
+	CPUHP_NET_IUCV_PREPARE = 62,
+	CPUHP_ARM_BL_PREPARE = 63,
+	CPUHP_TRACE_RB_PREPARE = 64,
+	CPUHP_MM_ZS_PREPARE = 65,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 66,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 67,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 68,
+	CPUHP_ZCOMP_PREPARE = 69,
+	CPUHP_TIMERS_PREPARE = 70,
+	CPUHP_MIPS_SOC_PREPARE = 71,
+	CPUHP_BP_PREPARE_DYN = 72,
+	CPUHP_BP_PREPARE_DYN_END = 92,
+	CPUHP_BRINGUP_CPU = 93,
+	CPUHP_AP_IDLE_DEAD = 94,
+	CPUHP_AP_OFFLINE = 95,
+	CPUHP_AP_CACHECTRL_STARTING = 96,
+	CPUHP_AP_SCHED_STARTING = 97,
+	CPUHP_AP_RCUTREE_DYING = 98,
+	CPUHP_AP_CPU_PM_STARTING = 99,
+	CPUHP_AP_IRQ_GIC_STARTING = 100,
+	CPUHP_AP_IRQ_HIP04_STARTING = 101,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 102,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 103,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 104,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 105,
+	CPUHP_AP_IRQ_RISCV_STARTING = 106,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 107,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 108,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 109,
+	CPUHP_AP_MICROCODE_LOADER = 110,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 111,
+	CPUHP_AP_PERF_X86_STARTING = 112,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 113,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 114,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 115,
+	CPUHP_AP_PERF_XTENSA_STARTING = 116,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 117,
+	CPUHP_AP_ARM_SDEI_STARTING = 118,
+	CPUHP_AP_ARM_VFP_STARTING = 119,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 120,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 121,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 122,
+	CPUHP_AP_PERF_ARM_STARTING = 123,
+	CPUHP_AP_PERF_RISCV_STARTING = 124,
+	CPUHP_AP_ARM_L2X0_STARTING = 125,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 126,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 127,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 128,
+	CPUHP_AP_JCORE_TIMER_STARTING = 129,
+	CPUHP_AP_ARM_TWD_STARTING = 130,
+	CPUHP_AP_QCOM_TIMER_STARTING = 131,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 132,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 133,
+	CPUHP_AP_MARCO_TIMER_STARTING = 134,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 135,
+	CPUHP_AP_ARC_TIMER_STARTING = 136,
+	CPUHP_AP_RISCV_TIMER_STARTING = 137,
+	CPUHP_AP_CLINT_TIMER_STARTING = 138,
+	CPUHP_AP_CSKY_TIMER_STARTING = 139,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 140,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 141,
+	CPUHP_AP_KVM_STARTING = 142,
+	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 143,
+	CPUHP_AP_KVM_ARM_VGIC_STARTING = 144,
+	CPUHP_AP_KVM_ARM_TIMER_STARTING = 145,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 146,
+	CPUHP_AP_ARM_XEN_STARTING = 147,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 148,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 149,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 150,
+	CPUHP_AP_SMPCFD_DYING = 151,
+	CPUHP_AP_X86_TBOOT_DYING = 152,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 153,
+	CPUHP_AP_ONLINE = 154,
+	CPUHP_TEARDOWN_CPU = 155,
+	CPUHP_AP_ONLINE_IDLE = 156,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 157,
+	CPUHP_AP_SMPBOOT_THREADS = 158,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 159,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 160,
+	CPUHP_AP_BLK_MQ_ONLINE = 161,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 162,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 163,
+	CPUHP_AP_PERF_ONLINE = 164,
+	CPUHP_AP_PERF_X86_ONLINE = 165,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 166,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 167,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 168,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 169,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 170,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 171,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 172,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 173,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 188,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 189,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 194,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 195,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 196,
+	CPUHP_AP_PERF_CSKY_ONLINE = 197,
+	CPUHP_AP_WATCHDOG_ONLINE = 198,
+	CPUHP_AP_WORKQUEUE_ONLINE = 199,
+	CPUHP_AP_RANDOM_ONLINE = 200,
+	CPUHP_AP_RCUTREE_ONLINE = 201,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 202,
+	CPUHP_AP_ONLINE_DYN = 203,
+	CPUHP_AP_ONLINE_DYN_END = 233,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 234,
+	CPUHP_AP_X86_HPET_ONLINE = 235,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 236,
+	CPUHP_AP_ACTIVE = 237,
+	CPUHP_ONLINE = 238,
+};
+
+struct contig_page_info {
+	long unsigned int free_pages;
+	long unsigned int free_blocks_total;
+	long unsigned int free_blocks_suitable;
+};
+
+typedef struct {} local_lock_t;
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu *cpu_slab;
+	slab_flags_t flags;
+	long unsigned int min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	unsigned int remote_node_defrag_ratio;
+	struct kmem_cache_node *node[64];
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct slab {
+	long unsigned int __page_flags;
+	struct kmem_cache *slab_cache;
+	union {
+		struct {
+			union {
+				struct list_head slab_list;
+				struct {
+					struct slab *next;
+					int slabs;
+				};
+			};
+			void *freelist;
+			union {
+				long unsigned int counters;
+				struct {
+					unsigned int inuse: 16;
+					unsigned int objects: 15;
+					unsigned int frozen: 1;
+				};
+			};
+		};
+		struct callback_head callback_head;
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	long unsigned int memcg_data;
+};
+
+struct kmem_cache_cpu {
+	void **freelist;
+	long unsigned int tid;
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	long unsigned int nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct kmalloc_info_struct {
+	const char *name[3];
+	unsigned int size;
+};
+
+struct slabinfo {
+	long unsigned int active_objs;
+	long unsigned int num_objs;
+	long unsigned int active_slabs;
+	long unsigned int num_slabs;
+	long unsigned int shared_avail;
 	unsigned int limit;
-	unsigned int num_completed;
-	unsigned int prev_ovlimit;
-	unsigned int prev_num_queued;
-	unsigned int prev_last_obj_cnt;
-	unsigned int lowest_slack;
-	long unsigned int slack_start_time;
-	unsigned int max_limit;
-	unsigned int min_limit;
-	unsigned int slack_hold_time;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	long unsigned int kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+struct trace_event_raw_kmem_cache_alloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmalloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	long unsigned int gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long int size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_cache_alloc {};
+
+struct trace_event_data_offsets_kmalloc {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, struct kmem_cache *, gfp_t, int);
+
+typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const struct kmem_cache *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int);
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+typedef union {} release_pages_arg;
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+struct mlock_pvec {
+	local_lock_t lock;
+	struct pagevec vec;
+};
+
+struct hstate;
+
+struct hugepage_subpool {
+	spinlock_t lock;
+	long int count;
+	long int max_hpages;
+	long int used_hpages;
+	struct hstate *hstate;
+	long int min_hpages;
+	long int rsv_hpages;
+};
+
+struct hstate {
+	struct mutex resize_lock;
+	int next_nid_to_alloc;
+	int next_nid_to_free;
+	unsigned int order;
+	unsigned int demote_order;
+	long unsigned int mask;
+	long unsigned int max_huge_pages;
+	long unsigned int nr_huge_pages;
+	long unsigned int free_huge_pages;
+	long unsigned int resv_huge_pages;
+	long unsigned int surplus_huge_pages;
+	long unsigned int nr_overcommit_huge_pages;
+	struct list_head hugepage_activelist;
+	struct list_head hugepage_freelists[64];
+	unsigned int max_huge_pages_node[64];
+	unsigned int nr_huge_pages_node[64];
+	unsigned int free_huge_pages_node[64];
+	unsigned int surplus_huge_pages_node[64];
+	struct cftype cgroup_files_dfl[8];
+	struct cftype cgroup_files_legacy[10];
+	char name[32];
+};
+
+struct hugetlbfs_sb_info {
+	long int max_inodes;
+	long int free_inodes;
+	spinlock_t stat_lock;
+	struct hstate *hstate;
+	struct hugepage_subpool *spool;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier_range {
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
+};
+
+typedef struct {
+	long unsigned int pd;
+} hugepd_t;
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+enum pageblock_bits {
+	PB_migrate = 0,
+	PB_migrate_end = 2,
+	PB_migrate_skip = 3,
+	NR_PAGEBLOCK_BITS = 4,
+};
+
+struct page_frag_cache {
+	void *va;
+	__u16 offset;
+	__u16 size;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+typedef void compound_page_dtor(struct page *);
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	long unsigned int totalpages;
+	struct task_struct *chosen;
+	long int chosen_points;
+	enum oom_constraint constraint;
+};
+
+struct fault_attr {
+	long unsigned int probability;
+	long unsigned int interval;
+	atomic_t times;
+	atomic_t space;
+	long unsigned int verbose;
+	bool task_filter;
+	long unsigned int stacktrace_depth;
+	long unsigned int require_start;
+	long unsigned int require_end;
+	long unsigned int reject_start;
+	long unsigned int reject_end;
+	long unsigned int count;
+	struct ratelimit_state ratelimit_state;
+	struct dentry *dname;
+};
+
+enum fault_flags {
+	FAULT_NOWARN = 1,
+};
+
+typedef struct page *new_page_t(struct page *, long unsigned int);
+
+typedef void free_page_t(struct page *, long unsigned int);
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+typedef int fpi_t;
+
+struct mminit_pfnnid_cache {
+	long unsigned int last_start;
+	long unsigned int last_end;
+	int last_nid;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+struct encoded_page;
+
+struct vma_swap_readahead {
+	short unsigned int win;
+	short unsigned int offset;
+	short unsigned int nr_pte;
+	pte_t *ptes;
+};
+
+struct frontswap_ops {
+	void (*init)(unsigned int);
+	int (*store)(unsigned int, long unsigned int, struct page *);
+	int (*load)(unsigned int, long unsigned int, struct page *);
+	void (*invalidate_page)(unsigned int, long unsigned int);
+	void (*invalidate_area)(unsigned int);
+};
+
+struct crypto_async_request;
+
+typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
+
+struct crypto_tfm;
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct crypto_alg;
+
+struct crypto_tfm {
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	void *__crt_ctx[0];
+};
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init)(struct crypto_tfm *, u32, u32);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+struct zpool;
+
+struct zpool_ops {
+	int (*evict)(struct zpool *, long unsigned int);
+};
+
+enum zpool_mapmode {
+	ZPOOL_MM_RW = 0,
+	ZPOOL_MM_RO = 1,
+	ZPOOL_MM_WO = 2,
+	ZPOOL_MM_DEFAULT = 0,
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	void *__ctx[0];
+};
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_acomp_ctx {
+	struct crypto_acomp *acomp;
+	struct acomp_req *req;
+	struct crypto_wait wait;
+	u8 *dstmem;
+	struct mutex *mutex;
+};
+
+struct zswap_pool {
+	struct zpool *zpool;
+	struct crypto_acomp_ctx *acomp_ctx;
+	struct kref kref;
+	struct list_head list;
+	struct work_struct release_work;
+	struct work_struct shrink_work;
+	struct hlist_node node;
+	char tfm_name[128];
+};
+
+struct zswap_entry {
+	struct rb_node rbnode;
+	long unsigned int offset;
+	int refcount;
+	unsigned int length;
+	struct zswap_pool *pool;
+	union {
+		long unsigned int handle;
+		long unsigned int value;
+	};
+	struct obj_cgroup *objcg;
+};
+
+struct zswap_header {
+	swp_entry_t swpentry;
+};
+
+struct zswap_tree {
+	struct rb_root rbroot;
+	spinlock_t lock;
+};
+
+enum zswap_get_swap_ret {
+	ZSWAP_SWAPCACHE_NEW = 0,
+	ZSWAP_SWAPCACHE_EXIST = 1,
+	ZSWAP_SWAPCACHE_FAIL = 2,
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	long unsigned int invalidate_seq;
+	long unsigned int active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct interval_tree_node {
+	struct rb_node rb;
+	long unsigned int start;
+	long unsigned int last;
+	long unsigned int __subtree_last;
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+};
+
+struct mmu_interval_notifier;
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
+};
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	long unsigned int invalidate_seq;
+};
+
+typedef unsigned int isolate_mode_t;
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	long unsigned int b_state;
+	struct buffer_head *b_this_page;
+	struct page *b_page;
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_IGNORE_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+typedef int rmap_t;
+
+struct page_vma_mapped_walk {
+	long unsigned int pfn;
+	long unsigned int nr_pages;
+	long unsigned int pgoff;
+	struct vm_area_struct *vma;
+	long unsigned int address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+typedef u32 compat_uptr_t;
+
+enum hugetlb_memory_event {
+	HUGETLB_MAX = 0,
+	HUGETLB_NR_MEMORY_EVENTS = 1,
+};
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_NEVER_DAX = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+struct mm_slot {
+	struct hlist_node hash;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_PMD_NONE = 3,
+	SCAN_PMD_MAPPED = 4,
+	SCAN_EXCEED_NONE_PTE = 5,
+	SCAN_EXCEED_SWAP_PTE = 6,
+	SCAN_EXCEED_SHARED_PTE = 7,
+	SCAN_PTE_NON_PRESENT = 8,
+	SCAN_PTE_UFFD_WP = 9,
+	SCAN_PTE_MAPPED_HUGEPAGE = 10,
+	SCAN_PAGE_RO = 11,
+	SCAN_LACK_REFERENCED_PAGE = 12,
+	SCAN_PAGE_NULL = 13,
+	SCAN_SCAN_ABORT = 14,
+	SCAN_PAGE_COUNT = 15,
+	SCAN_PAGE_LRU = 16,
+	SCAN_PAGE_LOCK = 17,
+	SCAN_PAGE_ANON = 18,
+	SCAN_PAGE_COMPOUND = 19,
+	SCAN_ANY_PROCESS = 20,
+	SCAN_VMA_NULL = 21,
+	SCAN_VMA_CHECK = 22,
+	SCAN_ADDRESS_RANGE = 23,
+	SCAN_DEL_PAGE_LRU = 24,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 25,
+	SCAN_CGROUP_CHARGE_FAIL = 26,
+	SCAN_TRUNCATED = 27,
+	SCAN_PAGE_HAS_PRIVATE = 28,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_scan_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	u32 __data_loc_filename;
+	int present;
+	int swap;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_collapse_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int hpfn;
+	long unsigned int index;
+	long unsigned int addr;
+	bool is_shmem;
+	u32 __data_loc_filename;
+	int nr;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_collapse_file {
+	u32 filename;
+};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_scan_file)(void *, struct mm_struct *, struct page *, struct file *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_collapse_file)(void *, struct mm_struct *, struct page *, long unsigned int, bool, long unsigned int, struct file *, int, int);
+
+struct collapse_control {
+	bool is_khugepaged;
+	u32 node_load[64];
+	nodemask_t alloc_nmask;
+};
+
+struct khugepaged_mm_slot {
+	struct mm_slot slot;
+	int nr_pte_mapped_thp;
+	long unsigned int pte_mapped_thp[8];
+};
+
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct khugepaged_mm_slot *mm_slot;
+	long unsigned int address;
+};
+
+struct trace_event_raw_test_pages_isolated {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int fin_pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_test_pages_isolated {};
+
+typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*exitcall_t)();
+
+struct zpool_driver {
+	char *type;
+	struct module *owner;
+	atomic_t refcount;
+	struct list_head list;
+	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
+	void (*destroy)(void *);
+	bool malloc_support_movable;
+	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
+	void (*free)(void *, long unsigned int);
+	int (*shrink)(void *, unsigned int, unsigned int *);
+	bool sleep_mapped;
+	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
+	void (*unmap)(void *, long unsigned int);
+	u64 (*total_size)(void *);
+};
+
+enum buddy {
+	HEADLESS = 0,
+	FIRST = 1,
+	MIDDLE = 2,
+	LAST = 3,
+	BUDDIES_MAX = 3,
+};
+
+struct z3fold_buddy_slots {
+	long unsigned int slot[4];
+	long unsigned int pool;
+	rwlock_t lock;
+};
+
+struct z3fold_pool;
+
+struct z3fold_header {
+	struct list_head buddy;
+	spinlock_t page_lock;
+	struct kref refcount;
+	struct work_struct work;
+	struct z3fold_buddy_slots *slots;
+	struct z3fold_pool *pool;
+	short int cpu;
+	short unsigned int first_chunks;
+	short unsigned int middle_chunks;
+	short unsigned int last_chunks;
+	short unsigned int start_middle;
+	short unsigned int first_num: 2;
+	short unsigned int mapped_count: 2;
+	short unsigned int foreign_handles: 2;
+};
+
+struct z3fold_pool {
+	const char *name;
+	spinlock_t lock;
+	spinlock_t stale_lock;
+	struct list_head *unbuddied;
+	struct list_head lru;
+	struct list_head stale;
+	atomic64_t pages_nr;
+	struct kmem_cache *c_handle;
+	struct zpool *zpool;
+	const struct zpool_ops *zpool_ops;
+	struct workqueue_struct *compact_wq;
+	struct workqueue_struct *release_wq;
+	struct work_struct work;
+};
+
+enum z3fold_page_flags {
+	PAGE_HEADLESS = 0,
+	MIDDLE_CHUNK_MAPPED = 1,
+	NEEDS_COMPACTING = 2,
+	PAGE_STALE = 3,
+	PAGE_CLAIMED = 4,
+	PAGE_MIGRATED = 5,
+};
+
+enum z3fold_handle_flags {
+	HANDLES_NOFREE = 0,
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+typedef __kernel_rwf_t rwf_t;
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+struct stat {
+	long unsigned int st_dev;
+	long unsigned int st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	long unsigned int st_rdev;
+	long unsigned int __pad1;
+	long int st_size;
+	int st_blksize;
+	int __pad2;
+	long int st_blocks;
+	long int st_atime;
+	long unsigned int st_atime_nsec;
+	long int st_mtime;
+	long unsigned int st_mtime_nsec;
+	long int st_ctime;
+	long unsigned int st_ctime_nsec;
+	unsigned int __unused4;
+	unsigned int __unused5;
+};
+
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u32 stx_dio_mem_align;
+	__u32 stx_dio_offset_align;
+	__u64 __spare3[12];
+};
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short int l_type;
+	short int l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+};
+
+typedef struct {
+	long unsigned int fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
+};
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+struct ip_ra_chain {
+	struct ip_ra_chain *next;
+	struct sock *sk;
+	union {
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
+	struct callback_head rcu;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	long unsigned int *tb_data;
+	long unsigned int __data[0];
+};
+
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_opts_ri;
+	struct nd_opt_hdr *nd_opts_ri_end;
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved: 6;
+	__u8 autoconf: 1;
+	__u8 onlink: 1;
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+typedef struct {
+	long unsigned int *in;
+	long unsigned int *out;
+	long unsigned int *ex;
+	long unsigned int *res_in;
+	long unsigned int *res_out;
+	long unsigned int *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t *p;
+	size_t size;
+};
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+struct mnt_idmap {
+	struct user_namespace *owner;
+	refcount_t count;
+};
+
+struct posix_acl_entry {
+	short int e_tag;
+	short unsigned int e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+struct simple_xattrs {
+	struct rb_root rb_root;
+	rwlock_t lock;
+};
+
+struct simple_xattr {
+	struct rb_node rb_node;
+	char *name;
+	size_t size;
+	char value[0];
+};
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
+	union {
+		const void *cvalue;
+		void *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+struct wb_writeback_work {
+	long int nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_foreign_history {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t cgroup_ino;
+	unsigned int history;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_switch_wbs {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t old_cgroup_ino;
+	ino_t new_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_track_foreign_dirty {
+	struct trace_entry ent;
+	char name[32];
+	u64 bdi_id;
+	ino_t ino;
+	unsigned int memcg_id;
+	ino_t cgroup_ino;
+	ino_t page_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_flush_foreign {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	unsigned int frn_bdi_id;
+	unsigned int frn_memcg_id;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long int pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_to_write;
+	long int pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long int range_start;
+	long int range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int older;
+	long int age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int background_thresh;
+	long unsigned int dirty_thresh;
+	long unsigned int dirty_limit;
+	long unsigned int nr_dirtied;
+	long unsigned int nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int write_bw;
+	long unsigned int avg_write_bw;
+	long unsigned int dirty_rate;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int limit;
+	long unsigned int setpoint;
+	long unsigned int dirty;
+	long unsigned int bdi_setpoint;
+	long unsigned int bdi_dirty;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	long unsigned int paused;
+	long int pause;
+	long unsigned int period;
+	long int think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	long unsigned int writeback_index;
+	long int nr_to_write;
+	long unsigned int wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int state;
+	__u16 mode;
+	long unsigned int dirtied_when;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_inode_foreign_history {};
+
+struct trace_event_data_offsets_inode_switch_wbs {};
+
+struct trace_event_data_offsets_track_foreign_dirty {};
+
+struct trace_event_data_offsets_flush_foreign {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
+
+typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
+
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
+
+typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long int);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct inode_switch_wbs_context {
+	struct rcu_work work;
+	struct bdi_writeback *new_wb;
+	struct inode *inodes[0];
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct ns_get_path_task_args {
+	const struct proc_ns_operations *ns_ops;
+	struct task_struct *task;
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct iomap_ops;
+
+typedef u32 nlink_t;
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
+};
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+};
+
+struct epoll_filefd {
+	struct file *file;
+	int fd;
+} __attribute__((packed));
+
+struct epitem;
+
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
+};
+
+struct eventpoll;
+
+struct epitem {
+	union {
+		struct rb_node rbn;
+		struct callback_head rcu;
+	};
+	struct list_head rdllink;
+	struct epitem *next;
+	struct epoll_filefd ffd;
+	struct eppoll_entry *pwqlist;
+	struct eventpoll *ep;
+	struct hlist_node fllink;
+	struct wakeup_source *ws;
+	struct epoll_event event;
+};
+
+struct eventpoll {
+	struct mutex mtx;
+	wait_queue_head_t wq;
+	wait_queue_head_t poll_wait;
+	struct list_head rdllist;
+	rwlock_t lock;
+	struct rb_root_cached rbr;
+	struct epitem *ovflist;
+	struct wakeup_source *ws;
+	struct user_struct *user;
+	struct file *file;
+	u64 gen;
+	struct hlist_head refs;
+	unsigned int napi_id;
+};
+
+struct ep_pqueue {
+	poll_table pt;
+	struct epitem *epi;
+};
+
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
+};
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx *table[0];
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	long unsigned int user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	long unsigned int mmap_base;
+	long unsigned int mmap_size;
+	struct page **ring_pages;
+	long int nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
 	long: 32;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+struct fsync_iocb {
+	struct file *file;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
+};
+
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
+};
+
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
+};
+
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
+};
+
+struct __aio_sigset {
+	const sigset_t *sigmask;
+	size_t sigsetsize;
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	void *__ctx[0];
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	struct crypto_alg base;
+};
+
+struct blk_crypto_key;
+
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+	struct blk_crypto_key *blk_key;
+};
+
+struct fscrypt_policy_v1 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 master_key_descriptor[8];
+};
+
+struct fscrypt_policy_v2 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 __reserved[4];
+	__u8 master_key_identifier[16];
+};
+
+union fscrypt_policy {
+	u8 version;
+	struct fscrypt_policy_v1 v1;
+	struct fscrypt_policy_v2 v2;
+};
+
+struct fscrypt_mode;
+
+struct fscrypt_master_key;
+
+struct fscrypt_direct_key;
+
+struct fscrypt_info {
+	struct fscrypt_prepared_key ci_enc_key;
+	bool ci_owns_key;
+	bool ci_inlinecrypt;
+	struct fscrypt_mode *ci_mode;
+	struct inode *ci_inode;
+	struct fscrypt_master_key *ci_master_key;
+	struct list_head ci_master_key_link;
+	struct fscrypt_direct_key *ci_direct_key;
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+	union fscrypt_policy ci_policy;
+	u8 ci_nonce[16];
+	u32 ci_hashed_ino;
+};
+
+struct fscrypt_key_specifier {
+	__u32 type;
+	__u32 __reserved;
+	union {
+		__u8 __reserved[32];
+		__u8 descriptor[8];
+		__u8 identifier[16];
+	} u;
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	struct crypto_tfm base;
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_SM4_XTS = 4,
+	BLK_ENCRYPTION_MODE_MAX = 5,
+};
+
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+};
+
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[64];
+};
+
+struct bio_crypt_ctx {
+	const struct blk_crypto_key *bc_key;
+	u64 bc_dun[4];
+};
+
+struct fscrypt_context_v1 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 master_key_descriptor[8];
+	u8 nonce[16];
+};
+
+struct fscrypt_context_v2 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 __reserved[4];
+	u8 master_key_identifier[16];
+	u8 nonce[16];
+};
+
+union fscrypt_context {
+	u8 version;
+	struct fscrypt_context_v1 v1;
+	struct fscrypt_context_v2 v2;
+};
+
+struct fscrypt_mode {
+	const char *friendly_name;
+	const char *cipher_str;
+	int keysize;
+	int security_strength;
+	int ivsize;
+	int logged_cryptoapi_impl;
+	int logged_blk_crypto_native;
+	int logged_blk_crypto_fallback;
+	enum blk_crypto_mode_num blk_crypto_mode;
+};
+
+struct fscrypt_hkdf {
+	struct crypto_shash *hmac_tfm;
+};
+
+struct fscrypt_master_key_secret {
+	struct fscrypt_hkdf hkdf;
+	u32 size;
+	u8 raw[64];
+};
+
+struct fscrypt_master_key {
+	struct hlist_node mk_node;
+	struct rw_semaphore mk_sem;
+	refcount_t mk_active_refs;
+	refcount_t mk_struct_refs;
+	struct callback_head mk_rcu_head;
+	struct fscrypt_master_key_secret mk_secret;
+	struct fscrypt_key_specifier mk_spec;
+	struct key *mk_users;
+	struct list_head mk_decrypted_inodes;
+	spinlock_t mk_decrypted_inodes_lock;
+	struct fscrypt_prepared_key mk_direct_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[11];
+	siphash_key_t mk_ino_hash_key;
+	bool mk_ino_hash_key_initialized;
+};
+
+union fscrypt_iv {
+	struct {
+		__le64 lblk_num;
+		u8 nonce[16];
+	};
+	u8 raw[32];
+	__le64 dun[4];
+};
+
+struct fsverity_hash_alg;
+
+struct merkle_tree_params {
+	struct fsverity_hash_alg *hash_alg;
+	const u8 *hashstate;
+	unsigned int digest_size;
+	unsigned int block_size;
+	unsigned int hashes_per_block;
+	unsigned int log_blocksize;
+	unsigned int log_arity;
+	unsigned int num_levels;
+	u64 tree_size;
+	long unsigned int level0_blocks;
+	u64 level_start[8];
+};
+
+struct fsverity_info {
+	struct merkle_tree_params tree_params;
+	u8 root_hash[64];
+	u8 file_digest[64];
+	const struct inode *inode;
+};
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct fsverity_digest {
+	__u16 digest_algorithm;
+	__u16 digest_size;
+	__u8 digest[0];
+};
+
+struct crypto_ahash;
+
+struct fsverity_hash_alg {
+	struct crypto_ahash *tfm;
+	const char *name;
+	unsigned int digest_size;
+	unsigned int block_size;
+	mempool_t req_pool;
+	enum hash_algo algo_id;
+};
+
+struct ctl_path {
+	const char *procname;
+};
+
+struct fsverity_formatted_digest {
+	char magic[8];
+	__le16 digest_algorithm;
+	__le16 digest_size;
+	__u8 digest[0];
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		__u32 raw[0];
+	};
+};
+
+struct dax_device;
+
+struct iomap_page_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_page_ops *page_ops;
+	u64 validity_cookie;
+};
+
+struct iomap_page_ops {
+	int (*page_prepare)(struct inode *, loff_t, unsigned int);
+	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *);
+	bool (*iomap_valid)(struct inode *, const struct iomap *);
+};
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent *fi_extents_start;
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+struct fs_disk_quota {
+	__s8 d_version;
+	__s8 d_flags;
+	__u16 d_fieldmask;
+	__u32 d_id;
+	__u64 d_blk_hardlimit;
+	__u64 d_blk_softlimit;
+	__u64 d_ino_hardlimit;
+	__u64 d_ino_softlimit;
+	__u64 d_bcount;
+	__u64 d_icount;
+	__s32 d_itimer;
+	__s32 d_btimer;
+	__u16 d_iwarns;
+	__u16 d_bwarns;
+	__s8 d_itimer_hi;
+	__s8 d_btimer_hi;
+	__s8 d_rtbtimer_hi;
+	__s8 d_padding2;
+	__u64 d_rtb_hardlimit;
+	__u64 d_rtb_softlimit;
+	__u64 d_rtbcount;
+	__s32 d_rtbtimer;
+	__u16 d_rtbwarns;
+	__s16 d_padding3;
+	char d_padding4[8];
+};
+
+struct fs_qfilestat {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+};
+
+typedef struct fs_qfilestat fs_qfilestat_t;
+
+struct fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	fs_qfilestat_t qs_uquota;
+	fs_qfilestat_t qs_gquota;
+	__u32 qs_incoredqs;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+struct fs_qfilestatv {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+	__u32 qfs_pad;
+};
+
+struct fs_quota_statv {
+	__s8 qs_version;
+	__u8 qs_pad1;
+	__u16 qs_flags;
+	__u32 qs_incoredqs;
+	struct fs_qfilestatv qs_uquota;
+	struct fs_qfilestatv qs_gquota;
+	struct fs_qfilestatv qs_pquota;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
+};
+
+enum {
+	QIF_BLIMITS_B = 0,
+	QIF_SPACE_B = 1,
+	QIF_ILIMITS_B = 2,
+	QIF_INODES_B = 3,
+	QIF_BTIME_B = 4,
+	QIF_ITIME_B = 5,
+};
+
+struct if_dqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+};
+
+struct if_nextdqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+	__u32 dqb_id;
+};
+
+struct if_dqinfo {
+	__u64 dqi_bgrace;
+	__u64 dqi_igrace;
+	__u32 dqi_flags;
+	__u32 dqi_valid;
+};
+
+typedef __kernel_uid32_t qid_t;
+
+enum {
+	_DQUOT_USAGE_ENABLED = 0,
+	_DQUOT_LIMITS_ENABLED = 1,
+	_DQUOT_SUSPENDED = 2,
+	_DQUOT_STATE_FLAGS = 3,
+};
+
+typedef u32 compat_uint_t;
+
+typedef u64 compat_u64;
+
+struct compat_if_dqblk {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 dqb_bsoftlimit;
+	compat_u64 dqb_curspace;
+	compat_u64 dqb_ihardlimit;
+	compat_u64 dqb_isoftlimit;
+	compat_u64 dqb_curinodes;
+	compat_u64 dqb_btime;
+	compat_u64 dqb_itime;
+	compat_uint_t dqb_valid;
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
+};
+
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
+};
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	long unsigned int pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+enum kcore_type {
+	KCORE_TEXT = 0,
+	KCORE_VMALLOC = 1,
+	KCORE_RAM = 2,
+	KCORE_VMEMMAP = 3,
+	KCORE_USER = 4,
+};
+
+struct kcore_list {
+	struct list_head list;
+	long unsigned int addr;
+	size_t size;
+	int type;
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_HIDDEN = 512,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+	KERNFS_REMOVING = 16384,
+};
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+struct config_group;
+
+struct config_item_type;
+
+struct config_item {
+	char *ci_name;
+	char ci_namebuf[20];
+	struct kref ci_kref;
+	struct list_head ci_entry;
+	struct config_item *ci_parent;
+	struct config_group *ci_group;
+	const struct config_item_type *ci_type;
+	struct dentry *ci_dentry;
+};
+
+struct configfs_subsystem;
+
+struct config_group {
+	struct config_item cg_item;
+	struct list_head cg_children;
+	struct configfs_subsystem *cg_subsys;
+	struct list_head default_groups;
+	struct list_head group_entry;
+};
+
+struct configfs_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_attribute;
+
+struct configfs_bin_attribute;
+
+struct config_item_type {
+	struct module *ct_owner;
+	struct configfs_item_operations *ct_item_ops;
+	struct configfs_group_operations *ct_group_ops;
+	struct configfs_attribute **ct_attrs;
+	struct configfs_bin_attribute **ct_bin_attrs;
+};
+
+struct configfs_item_operations {
+	void (*release)(struct config_item *);
+	int (*allow_link)(struct config_item *, struct config_item *);
+	void (*drop_link)(struct config_item *, struct config_item *);
+};
+
+struct configfs_group_operations {
+	struct config_item * (*make_item)(struct config_group *, const char *);
+	struct config_group * (*make_group)(struct config_group *, const char *);
+	void (*disconnect_notify)(struct config_group *, struct config_item *);
+	void (*drop_item)(struct config_group *, struct config_item *);
+};
+
+struct configfs_attribute {
+	const char *ca_name;
+	struct module *ca_owner;
+	umode_t ca_mode;
+	ssize_t (*show)(struct config_item *, char *);
+	ssize_t (*store)(struct config_item *, const char *, size_t);
+};
+
+struct configfs_bin_attribute {
+	struct configfs_attribute cb_attr;
+	void *cb_private;
+	size_t cb_max_size;
+	ssize_t (*read)(struct config_item *, void *, size_t);
+	ssize_t (*write)(struct config_item *, const void *, size_t);
+};
+
+struct configfs_subsystem {
+	struct config_group su_group;
+	struct mutex su_mutex;
+};
+
+struct configfs_fragment {
+	atomic_t frag_count;
+	struct rw_semaphore frag_sem;
+	bool frag_dead;
+};
+
+struct configfs_dirent {
+	atomic_t s_count;
+	int s_dependent_count;
+	struct list_head s_sibling;
+	struct list_head s_children;
+	int s_links;
+	void *s_element;
+	int s_type;
+	umode_t s_mode;
+	struct dentry *s_dentry;
+	struct iattr *s_iattr;
+	struct configfs_fragment *s_frag;
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+typedef unsigned int autofs_wqt_t;
+
+struct autofs_packet_hdr {
+	int proto_version;
+	int type;
+};
+
+struct autofs_packet_missing {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+struct autofs_packet_expire {
+	struct autofs_packet_hdr hdr;
+	int len;
+	char name[256];
+};
+
+enum autofs_notify {
+	NFY_NONE = 0,
+	NFY_MOUNT = 1,
+	NFY_EXPIRE = 2,
+};
+
+struct autofs_packet_expire_multi {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+union autofs_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_packet_missing missing;
+	struct autofs_packet_expire expire;
+	struct autofs_packet_expire_multi expire_multi;
+};
+
+struct autofs_v5_packet {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	__u32 dev;
+	__u64 ino;
+	__u32 uid;
+	__u32 gid;
+	__u32 pid;
+	__u32 tgid;
+	__u32 len;
+	char name[256];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_v5_packet v5_packet;
+	autofs_packet_missing_indirect_t missing_indirect;
+	autofs_packet_expire_indirect_t expire_indirect;
+	autofs_packet_missing_direct_t missing_direct;
+	autofs_packet_expire_direct_t expire_direct;
+};
+
+struct autofs_sb_info;
+
+struct autofs_info {
+	struct dentry *dentry;
+	int flags;
+	struct completion expire_complete;
+	struct list_head active;
+	struct list_head expiring;
+	struct autofs_sb_info *sbi;
+	long unsigned int last_used;
+	int count;
+	kuid_t uid;
+	kgid_t gid;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue;
+
+struct autofs_sb_info {
+	u32 magic;
+	int pipefd;
+	struct file *pipe;
+	struct pid *oz_pgrp;
+	int version;
+	int sub_version;
+	int min_proto;
+	int max_proto;
+	unsigned int flags;
+	long unsigned int exp_timeout;
+	unsigned int type;
+	struct super_block *sb;
+	struct mutex wq_mutex;
+	struct mutex pipe_mutex;
+	spinlock_t fs_lock;
+	struct autofs_wait_queue *queues;
+	spinlock_t lookup_lock;
+	struct list_head active_list;
+	struct list_head expiring_list;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue {
+	wait_queue_head_t queue;
+	struct autofs_wait_queue *next;
+	autofs_wqt_t wait_queue_token;
+	struct qstr name;
+	u32 offset;
+	u32 dev;
+	u64 ino;
+	kuid_t uid;
+	kgid_t gid;
+	pid_t pid;
+	pid_t tgid;
+	int status;
+	unsigned int wait_ctr;
+};
+
+struct debugfs_blob_wrapper {
+	void *data;
+	long unsigned int size;
+};
+
+struct debugfs_reg32 {
+	char *name;
+	long unsigned int offset;
+};
+
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
+	struct device *dev;
+};
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	refcount_t active_users;
+	struct completion active_users_drained;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+typedef long unsigned int efi_status_t;
+
+typedef u16 efi_char16_t;
+
+typedef guid_t efi_guid_t;
+
+struct efi_generic_dev_path {
+	u8 type;
+	u8 sub_type;
+	u16 length;
+};
+
+typedef u16 ucs2_char_t;
+
+struct efi_variable {
+	efi_char16_t VariableName[512];
+	efi_guid_t VendorGuid;
+	long unsigned int DataSize;
+	__u8 Data[1024];
+	efi_status_t Status;
+	__u32 Attributes;
+} __attribute__((packed));
+
+struct efivar_entry {
+	struct efi_variable var;
+	struct list_head list;
+	struct kobject kobj;
+};
+
+struct variable_validate {
+	efi_guid_t vendor;
+	char *name;
+	bool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);
+};
+
+typedef int __kernel_key_t;
+
+typedef unsigned int __kernel_mode_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+typedef __kernel_key_t key_t;
+
+typedef short unsigned int ushort;
+
+struct ipc_perm {
+	__kernel_key_t key;
+	__kernel_uid_t uid;
+	__kernel_gid_t gid;
+	__kernel_uid_t cuid;
+	__kernel_gid_t cgid;
+	__kernel_mode_t mode;
+	short unsigned int seq;
+};
+
+struct ipc64_perm {
+	__kernel_key_t key;
+	__kernel_uid32_t uid;
+	__kernel_gid32_t gid;
+	__kernel_uid32_t cuid;
+	__kernel_gid32_t cgid;
+	__kernel_mode_t mode;
+	unsigned char __pad1[0];
+	short unsigned int seq;
+	short unsigned int __pad2;
+	__kernel_ulong_t __unused1;
+	__kernel_ulong_t __unused2;
+};
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	long unsigned int seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sem;
+
+struct sem_queue;
+
+struct sem_undo;
+
+struct semid_ds {
+	struct ipc_perm sem_perm;
+	__kernel_old_time_t sem_otime;
+	__kernel_old_time_t sem_ctime;
+	struct sem *sem_base;
+	struct sem_queue *sem_pending;
+	struct sem_queue **sem_pending_last;
+	struct sem_undo *undo;
+	short unsigned int sem_nsems;
+};
+
+struct sem {
+	int semval;
+	struct pid *sempid;
+	spinlock_t lock;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	time64_t sem_otime;
+};
+
+struct sembuf;
+
+struct sem_queue {
+	struct list_head list;
+	struct task_struct *sleeper;
+	struct sem_undo *undo;
+	struct pid *pid;
+	int status;
+	struct sembuf *sops;
+	struct sembuf *blocking;
+	int nsops;
+	bool alter;
+	bool dupsop;
+};
+
+struct sem_undo {
+	struct list_head list_proc;
+	struct callback_head rcu;
+	struct sem_undo_list *ulp;
+	struct list_head list_id;
+	int semid;
+	short int *semadj;
+};
+
+struct semid64_ds {
+	struct ipc64_perm sem_perm;
+	long int sem_otime;
+	long int sem_ctime;
+	long unsigned int sem_nsems;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct sembuf {
+	short unsigned int sem_num;
+	short int sem_op;
+	short int sem_flg;
+};
+
+struct seminfo {
+	int semmap;
+	int semmni;
+	int semmns;
+	int semmnu;
+	int semmsl;
+	int semopm;
+	int semume;
+	int semusz;
+	int semvmx;
+	int semaem;
+};
+
+struct sem_undo_list {
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct list_head list_proc;
+};
+
+struct ipc_params {
+	key_t key;
+	int flg;
+	union {
+		size_t size;
+		int nsems;
+	} u;
+};
+
+struct ipc_ops {
+	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
+	int (*associate)(struct kern_ipc_perm *, int);
+	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+};
+
+struct sem_array {
+	struct kern_ipc_perm sem_perm;
+	time64_t sem_ctime;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	struct list_head list_id;
+	int sem_nsems;
+	int complex_count;
+	unsigned int use_global_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sem sems[0];
+};
+
+struct assoc_array_ops {
+	long unsigned int (*get_key_chunk)(const void *, int);
+	long unsigned int (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	long unsigned int nr_leaves_on_branch;
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	long unsigned int index_key[0];
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long int adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+struct request_key_auth {
+	struct callback_head rcu;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	kuid_t rootid;
+};
+
+struct msg_msg;
+
+struct sctp_association;
+
+union security_list_options {
+	int (*binder_set_context_mgr)(const struct cred *);
+	int (*binder_transaction)(const struct cred *, const struct cred *);
+	int (*binder_transfer_binder)(const struct cred *, const struct cred *);
+	int (*binder_transfer_file)(const struct cred *, const struct cred *, struct file *);
+	int (*ptrace_access_check)(struct task_struct *, unsigned int);
+	int (*ptrace_traceme)(struct task_struct *);
+	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
+	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
+	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
+	int (*quotactl)(int, int, int, struct super_block *);
+	int (*quota_on)(struct dentry *);
+	int (*syslog)(int);
+	int (*settime)(const struct timespec64 *, const struct timezone *);
+	int (*vm_enough_memory)(struct mm_struct *, long int);
+	int (*bprm_creds_for_exec)(struct linux_binprm *);
+	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
+	int (*bprm_check_security)(struct linux_binprm *);
+	void (*bprm_committing_creds)(struct linux_binprm *);
+	void (*bprm_committed_creds)(struct linux_binprm *);
+	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
+	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*sb_alloc_security)(struct super_block *);
+	void (*sb_delete)(struct super_block *);
+	void (*sb_free_security)(struct super_block *);
+	void (*sb_free_mnt_opts)(void *);
+	int (*sb_eat_lsm_opts)(char *, void **);
+	int (*sb_mnt_opts_compat)(struct super_block *, void *);
+	int (*sb_remount)(struct super_block *, void *);
+	int (*sb_kern_mount)(struct super_block *);
+	int (*sb_show_options)(struct seq_file *, struct super_block *);
+	int (*sb_statfs)(struct dentry *);
+	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
+	int (*sb_umount)(struct vfsmount *, int);
+	int (*sb_pivotroot)(const struct path *, const struct path *);
+	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
+	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
+	int (*move_mount)(const struct path *, const struct path *);
+	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, const char **, void **, u32 *);
+	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
+	int (*path_unlink)(const struct path *, struct dentry *);
+	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
+	int (*path_rmdir)(const struct path *, struct dentry *);
+	int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
+	int (*path_truncate)(const struct path *);
+	int (*path_symlink)(const struct path *, struct dentry *, const char *);
+	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
+	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *, unsigned int);
+	int (*path_chmod)(const struct path *, umode_t);
+	int (*path_chown)(const struct path *, kuid_t, kgid_t);
+	int (*path_chroot)(const struct path *);
+	int (*path_notify)(const struct path *, u64, unsigned int);
+	int (*inode_alloc_security)(struct inode *);
+	void (*inode_free_security)(struct inode *);
+	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
+	int (*inode_init_security_anon)(struct inode *, const struct qstr *, const struct inode *);
+	int (*inode_create)(struct inode *, struct dentry *, umode_t);
+	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
+	int (*inode_unlink)(struct inode *, struct dentry *);
+	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
+	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*inode_rmdir)(struct inode *, struct dentry *);
+	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
+	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
+	int (*inode_readlink)(struct dentry *);
+	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
+	int (*inode_permission)(struct inode *, int);
+	int (*inode_setattr)(struct dentry *, struct iattr *);
+	int (*inode_getattr)(const struct path *);
+	int (*inode_setxattr)(struct user_namespace *, struct dentry *, const char *, const void *, size_t, int);
+	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
+	int (*inode_getxattr)(struct dentry *, const char *);
+	int (*inode_listxattr)(struct dentry *);
+	int (*inode_removexattr)(struct user_namespace *, struct dentry *, const char *);
+	int (*inode_set_acl)(struct user_namespace *, struct dentry *, const char *, struct posix_acl *);
+	int (*inode_get_acl)(struct user_namespace *, struct dentry *, const char *);
+	int (*inode_remove_acl)(struct user_namespace *, struct dentry *, const char *);
+	int (*inode_need_killpriv)(struct dentry *);
+	int (*inode_killpriv)(struct user_namespace *, struct dentry *);
+	int (*inode_getsecurity)(struct user_namespace *, struct inode *, const char *, void **, bool);
+	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
+	int (*inode_listsecurity)(struct inode *, char *, size_t);
+	void (*inode_getsecid)(struct inode *, u32 *);
+	int (*inode_copy_up)(struct dentry *, struct cred **);
+	int (*inode_copy_up_xattr)(const char *);
+	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
+	int (*file_permission)(struct file *, int);
+	int (*file_alloc_security)(struct file *);
+	void (*file_free_security)(struct file *);
+	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*mmap_addr)(long unsigned int);
+	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
+	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
+	int (*file_lock)(struct file *, unsigned int);
+	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
+	void (*file_set_fowner)(struct file *);
+	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
+	int (*file_receive)(struct file *);
+	int (*file_open)(struct file *);
+	int (*file_truncate)(struct file *);
+	int (*task_alloc)(struct task_struct *, long unsigned int);
+	void (*task_free)(struct task_struct *);
+	int (*cred_alloc_blank)(struct cred *, gfp_t);
+	void (*cred_free)(struct cred *);
+	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
+	void (*cred_transfer)(struct cred *, const struct cred *);
+	void (*cred_getsecid)(const struct cred *, u32 *);
+	int (*kernel_act_as)(struct cred *, u32);
+	int (*kernel_create_files_as)(struct cred *, struct inode *);
+	int (*kernel_module_request)(char *);
+	int (*kernel_load_data)(enum kernel_load_data_id, bool);
+	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
+	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
+	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
+	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgroups)(struct cred *, const struct cred *);
+	int (*task_setpgid)(struct task_struct *, pid_t);
+	int (*task_getpgid)(struct task_struct *);
+	int (*task_getsid)(struct task_struct *);
+	void (*current_getsecid_subj)(u32 *);
+	void (*task_getsecid_obj)(struct task_struct *, u32 *);
+	int (*task_setnice)(struct task_struct *, int);
+	int (*task_setioprio)(struct task_struct *, int);
+	int (*task_getioprio)(struct task_struct *);
+	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
+	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
+	int (*task_setscheduler)(struct task_struct *);
+	int (*task_getscheduler)(struct task_struct *);
+	int (*task_movememory)(struct task_struct *);
+	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
+	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	void (*task_to_inode)(struct task_struct *, struct inode *);
+	int (*userns_create)(const struct cred *);
+	int (*ipc_permission)(struct kern_ipc_perm *, short int);
+	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
+	int (*msg_msg_alloc_security)(struct msg_msg *);
+	void (*msg_msg_free_security)(struct msg_msg *);
+	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
+	void (*msg_queue_free_security)(struct kern_ipc_perm *);
+	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
+	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
+	int (*shm_alloc_security)(struct kern_ipc_perm *);
+	void (*shm_free_security)(struct kern_ipc_perm *);
+	int (*shm_associate)(struct kern_ipc_perm *, int);
+	int (*shm_shmctl)(struct kern_ipc_perm *, int);
+	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
+	int (*sem_alloc_security)(struct kern_ipc_perm *);
+	void (*sem_free_security)(struct kern_ipc_perm *);
+	int (*sem_associate)(struct kern_ipc_perm *, int);
+	int (*sem_semctl)(struct kern_ipc_perm *, int);
+	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
+	int (*netlink_send)(struct sock *, struct sk_buff *);
+	void (*d_instantiate)(struct dentry *, struct inode *);
+	int (*getprocattr)(struct task_struct *, const char *, char **);
+	int (*setprocattr)(const char *, void *, size_t);
+	int (*ismaclabel)(const char *);
+	int (*secid_to_secctx)(u32, char **, u32 *);
+	int (*secctx_to_secid)(const char *, u32, u32 *);
+	void (*release_secctx)(char *, u32);
+	void (*inode_invalidate_secctx)(struct inode *);
+	int (*inode_notifysecctx)(struct inode *, void *, u32);
+	int (*inode_setsecctx)(struct dentry *, void *, u32);
+	int (*inode_getsecctx)(struct inode *, void **, u32 *);
+	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
+	int (*unix_may_send)(struct socket *, struct socket *);
+	int (*socket_create)(int, int, int, int);
+	int (*socket_post_create)(struct socket *, int, int, int, int);
+	int (*socket_socketpair)(struct socket *, struct socket *);
+	int (*socket_bind)(struct socket *, struct sockaddr *, int);
+	int (*socket_connect)(struct socket *, struct sockaddr *, int);
+	int (*socket_listen)(struct socket *, int);
+	int (*socket_accept)(struct socket *, struct socket *);
+	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
+	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
+	int (*socket_getsockname)(struct socket *);
+	int (*socket_getpeername)(struct socket *);
+	int (*socket_getsockopt)(struct socket *, int, int);
+	int (*socket_setsockopt)(struct socket *, int, int);
+	int (*socket_shutdown)(struct socket *, int);
+	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
+	int (*socket_getpeersec_stream)(struct socket *, sockptr_t, sockptr_t, unsigned int);
+	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
+	int (*sk_alloc_security)(struct sock *, int, gfp_t);
+	void (*sk_free_security)(struct sock *);
+	void (*sk_clone_security)(const struct sock *, struct sock *);
+	void (*sk_getsecid)(struct sock *, u32 *);
+	void (*sock_graft)(struct sock *, struct socket *);
+	int (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
+	void (*inet_conn_established)(struct sock *, struct sk_buff *);
+	int (*secmark_relabel_packet)(u32);
+	void (*secmark_refcount_inc)();
+	void (*secmark_refcount_dec)();
+	void (*req_classify_flow)(const struct request_sock *, struct flowi_common *);
+	int (*tun_dev_alloc_security)(void **);
+	void (*tun_dev_free_security)(void *);
+	int (*tun_dev_create)();
+	int (*tun_dev_attach_queue)(void *);
+	int (*tun_dev_attach)(struct sock *, void *);
+	int (*tun_dev_open)(void *);
+	int (*sctp_assoc_request)(struct sctp_association *, struct sk_buff *);
+	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
+	void (*sctp_sk_clone)(struct sctp_association *, struct sock *, struct sock *);
+	int (*sctp_assoc_established)(struct sctp_association *, struct sk_buff *);
+	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
+	void (*key_free)(struct key *);
+	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
+	int (*key_getsecurity)(struct key *, char **);
+	int (*audit_rule_init)(u32, u32, char *, void **);
+	int (*audit_rule_known)(struct audit_krule *);
+	int (*audit_rule_match)(u32, u32, u32, void *);
+	void (*audit_rule_free)(void *);
+	int (*bpf)(int, union bpf_attr *, unsigned int);
+	int (*bpf_map)(struct bpf_map *, fmode_t);
+	int (*bpf_prog)(struct bpf_prog *);
+	int (*bpf_map_alloc_security)(struct bpf_map *);
+	void (*bpf_map_free_security)(struct bpf_map *);
+	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
+	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
+	int (*locked_down)(enum lockdown_reason);
+	int (*perf_event_open)(struct perf_event_attr *, int);
+	int (*perf_event_alloc)(struct perf_event *);
+	void (*perf_event_free)(struct perf_event *);
+	int (*perf_event_read)(struct perf_event *);
+	int (*perf_event_write)(struct perf_event *);
+	int (*uring_override_creds)(const struct cred *);
+	int (*uring_sqpoll)();
+	int (*uring_cmd)(struct io_uring_cmd *);
+};
+
+struct security_hook_heads {
+	struct hlist_head binder_set_context_mgr;
+	struct hlist_head binder_transaction;
+	struct hlist_head binder_transfer_binder;
+	struct hlist_head binder_transfer_file;
+	struct hlist_head ptrace_access_check;
+	struct hlist_head ptrace_traceme;
+	struct hlist_head capget;
+	struct hlist_head capset;
+	struct hlist_head capable;
+	struct hlist_head quotactl;
+	struct hlist_head quota_on;
+	struct hlist_head syslog;
+	struct hlist_head settime;
+	struct hlist_head vm_enough_memory;
+	struct hlist_head bprm_creds_for_exec;
+	struct hlist_head bprm_creds_from_file;
+	struct hlist_head bprm_check_security;
+	struct hlist_head bprm_committing_creds;
+	struct hlist_head bprm_committed_creds;
+	struct hlist_head fs_context_dup;
+	struct hlist_head fs_context_parse_param;
+	struct hlist_head sb_alloc_security;
+	struct hlist_head sb_delete;
+	struct hlist_head sb_free_security;
+	struct hlist_head sb_free_mnt_opts;
+	struct hlist_head sb_eat_lsm_opts;
+	struct hlist_head sb_mnt_opts_compat;
+	struct hlist_head sb_remount;
+	struct hlist_head sb_kern_mount;
+	struct hlist_head sb_show_options;
+	struct hlist_head sb_statfs;
+	struct hlist_head sb_mount;
+	struct hlist_head sb_umount;
+	struct hlist_head sb_pivotroot;
+	struct hlist_head sb_set_mnt_opts;
+	struct hlist_head sb_clone_mnt_opts;
+	struct hlist_head move_mount;
+	struct hlist_head dentry_init_security;
+	struct hlist_head dentry_create_files_as;
+	struct hlist_head path_unlink;
+	struct hlist_head path_mkdir;
+	struct hlist_head path_rmdir;
+	struct hlist_head path_mknod;
+	struct hlist_head path_truncate;
+	struct hlist_head path_symlink;
+	struct hlist_head path_link;
+	struct hlist_head path_rename;
+	struct hlist_head path_chmod;
+	struct hlist_head path_chown;
+	struct hlist_head path_chroot;
+	struct hlist_head path_notify;
+	struct hlist_head inode_alloc_security;
+	struct hlist_head inode_free_security;
+	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
+	struct hlist_head inode_create;
+	struct hlist_head inode_link;
+	struct hlist_head inode_unlink;
+	struct hlist_head inode_symlink;
+	struct hlist_head inode_mkdir;
+	struct hlist_head inode_rmdir;
+	struct hlist_head inode_mknod;
+	struct hlist_head inode_rename;
+	struct hlist_head inode_readlink;
+	struct hlist_head inode_follow_link;
+	struct hlist_head inode_permission;
+	struct hlist_head inode_setattr;
+	struct hlist_head inode_getattr;
+	struct hlist_head inode_setxattr;
+	struct hlist_head inode_post_setxattr;
+	struct hlist_head inode_getxattr;
+	struct hlist_head inode_listxattr;
+	struct hlist_head inode_removexattr;
+	struct hlist_head inode_set_acl;
+	struct hlist_head inode_get_acl;
+	struct hlist_head inode_remove_acl;
+	struct hlist_head inode_need_killpriv;
+	struct hlist_head inode_killpriv;
+	struct hlist_head inode_getsecurity;
+	struct hlist_head inode_setsecurity;
+	struct hlist_head inode_listsecurity;
+	struct hlist_head inode_getsecid;
+	struct hlist_head inode_copy_up;
+	struct hlist_head inode_copy_up_xattr;
+	struct hlist_head kernfs_init_security;
+	struct hlist_head file_permission;
+	struct hlist_head file_alloc_security;
+	struct hlist_head file_free_security;
+	struct hlist_head file_ioctl;
+	struct hlist_head mmap_addr;
+	struct hlist_head mmap_file;
+	struct hlist_head file_mprotect;
+	struct hlist_head file_lock;
+	struct hlist_head file_fcntl;
+	struct hlist_head file_set_fowner;
+	struct hlist_head file_send_sigiotask;
+	struct hlist_head file_receive;
+	struct hlist_head file_open;
+	struct hlist_head file_truncate;
+	struct hlist_head task_alloc;
+	struct hlist_head task_free;
+	struct hlist_head cred_alloc_blank;
+	struct hlist_head cred_free;
+	struct hlist_head cred_prepare;
+	struct hlist_head cred_transfer;
+	struct hlist_head cred_getsecid;
+	struct hlist_head kernel_act_as;
+	struct hlist_head kernel_create_files_as;
+	struct hlist_head kernel_module_request;
+	struct hlist_head kernel_load_data;
+	struct hlist_head kernel_post_load_data;
+	struct hlist_head kernel_read_file;
+	struct hlist_head kernel_post_read_file;
+	struct hlist_head task_fix_setuid;
+	struct hlist_head task_fix_setgid;
+	struct hlist_head task_fix_setgroups;
+	struct hlist_head task_setpgid;
+	struct hlist_head task_getpgid;
+	struct hlist_head task_getsid;
+	struct hlist_head current_getsecid_subj;
+	struct hlist_head task_getsecid_obj;
+	struct hlist_head task_setnice;
+	struct hlist_head task_setioprio;
+	struct hlist_head task_getioprio;
+	struct hlist_head task_prlimit;
+	struct hlist_head task_setrlimit;
+	struct hlist_head task_setscheduler;
+	struct hlist_head task_getscheduler;
+	struct hlist_head task_movememory;
+	struct hlist_head task_kill;
+	struct hlist_head task_prctl;
+	struct hlist_head task_to_inode;
+	struct hlist_head userns_create;
+	struct hlist_head ipc_permission;
+	struct hlist_head ipc_getsecid;
+	struct hlist_head msg_msg_alloc_security;
+	struct hlist_head msg_msg_free_security;
+	struct hlist_head msg_queue_alloc_security;
+	struct hlist_head msg_queue_free_security;
+	struct hlist_head msg_queue_associate;
+	struct hlist_head msg_queue_msgctl;
+	struct hlist_head msg_queue_msgsnd;
+	struct hlist_head msg_queue_msgrcv;
+	struct hlist_head shm_alloc_security;
+	struct hlist_head shm_free_security;
+	struct hlist_head shm_associate;
+	struct hlist_head shm_shmctl;
+	struct hlist_head shm_shmat;
+	struct hlist_head sem_alloc_security;
+	struct hlist_head sem_free_security;
+	struct hlist_head sem_associate;
+	struct hlist_head sem_semctl;
+	struct hlist_head sem_semop;
+	struct hlist_head netlink_send;
+	struct hlist_head d_instantiate;
+	struct hlist_head getprocattr;
+	struct hlist_head setprocattr;
+	struct hlist_head ismaclabel;
+	struct hlist_head secid_to_secctx;
+	struct hlist_head secctx_to_secid;
+	struct hlist_head release_secctx;
+	struct hlist_head inode_invalidate_secctx;
+	struct hlist_head inode_notifysecctx;
+	struct hlist_head inode_setsecctx;
+	struct hlist_head inode_getsecctx;
+	struct hlist_head unix_stream_connect;
+	struct hlist_head unix_may_send;
+	struct hlist_head socket_create;
+	struct hlist_head socket_post_create;
+	struct hlist_head socket_socketpair;
+	struct hlist_head socket_bind;
+	struct hlist_head socket_connect;
+	struct hlist_head socket_listen;
+	struct hlist_head socket_accept;
+	struct hlist_head socket_sendmsg;
+	struct hlist_head socket_recvmsg;
+	struct hlist_head socket_getsockname;
+	struct hlist_head socket_getpeername;
+	struct hlist_head socket_getsockopt;
+	struct hlist_head socket_setsockopt;
+	struct hlist_head socket_shutdown;
+	struct hlist_head socket_sock_rcv_skb;
+	struct hlist_head socket_getpeersec_stream;
+	struct hlist_head socket_getpeersec_dgram;
+	struct hlist_head sk_alloc_security;
+	struct hlist_head sk_free_security;
+	struct hlist_head sk_clone_security;
+	struct hlist_head sk_getsecid;
+	struct hlist_head sock_graft;
+	struct hlist_head inet_conn_request;
+	struct hlist_head inet_csk_clone;
+	struct hlist_head inet_conn_established;
+	struct hlist_head secmark_relabel_packet;
+	struct hlist_head secmark_refcount_inc;
+	struct hlist_head secmark_refcount_dec;
+	struct hlist_head req_classify_flow;
+	struct hlist_head tun_dev_alloc_security;
+	struct hlist_head tun_dev_free_security;
+	struct hlist_head tun_dev_create;
+	struct hlist_head tun_dev_attach_queue;
+	struct hlist_head tun_dev_attach;
+	struct hlist_head tun_dev_open;
+	struct hlist_head sctp_assoc_request;
+	struct hlist_head sctp_bind_connect;
+	struct hlist_head sctp_sk_clone;
+	struct hlist_head sctp_assoc_established;
+	struct hlist_head key_alloc;
+	struct hlist_head key_free;
+	struct hlist_head key_permission;
+	struct hlist_head key_getsecurity;
+	struct hlist_head audit_rule_init;
+	struct hlist_head audit_rule_known;
+	struct hlist_head audit_rule_match;
+	struct hlist_head audit_rule_free;
+	struct hlist_head bpf;
+	struct hlist_head bpf_map;
+	struct hlist_head bpf_prog;
+	struct hlist_head bpf_map_alloc_security;
+	struct hlist_head bpf_map_free_security;
+	struct hlist_head bpf_prog_alloc_security;
+	struct hlist_head bpf_prog_free_security;
+	struct hlist_head locked_down;
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+	struct hlist_head uring_override_creds;
+	struct hlist_head uring_sqpoll;
+	struct hlist_head uring_cmd;
+};
+
+struct security_hook_list {
+	struct hlist_node list;
+	struct hlist_head *head;
+	union security_list_options hook;
+	const char *lsm;
+};
+
+struct lsm_blob_sizes {
+	int lbs_cred;
+	int lbs_file;
+	int lbs_inode;
+	int lbs_superblock;
+	int lbs_ipc;
+	int lbs_msg_msg;
+	int lbs_task;
+};
+
+enum lsm_order {
+	LSM_ORDER_FIRST = -1,
+	LSM_ORDER_MUTABLE = 0,
+};
+
+struct lsm_info {
+	const char *name;
+	enum lsm_order order;
+	long unsigned int flags;
+	int *enabled;
+	int (*init)();
+	struct lsm_blob_sizes *blobs;
+};
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+enum lsm_event {
+	LSM_POLICY_CHANGE = 0,
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
 };
 
 struct ethtool_drvinfo {
@@ -11091,6 +25908,7 @@
 	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
 	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
 	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
 };
 
 enum ethtool_link_ext_substate_autoneg {
@@ -11120,6 +25938,8 @@
 enum ethtool_link_ext_substate_bad_signal_integrity {
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
 };
 
 enum ethtool_link_ext_substate_cable_issue {
@@ -11127,6 +25947,20 @@
 	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
 };
 
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
 struct ethtool_test {
 	__u32 cmd;
 	__u32 flags;
@@ -11266,6 +26100,109 @@
 	__u32 reserved;
 };
 
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT = 93,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT = 94,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT = 95,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT = 96,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT = 97,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT = 98,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 99,
+};
+
 struct ethtool_link_settings {
 	__u32 cmd;
 	__u32 speed;
@@ -11280,16 +26217,16 @@
 	__u8 transceiver;
 	__u8 master_slave_cfg;
 	__u8 master_slave_state;
-	__u8 reserved1[1];
+	__u8 rate_matching;
 	__u32 reserved[7];
 	__u32 link_mode_masks[0];
 };
 
-enum ethtool_phys_id_state {
-	ETHTOOL_ID_INACTIVE = 0,
-	ETHTOOL_ID_ACTIVE = 1,
-	ETHTOOL_ID_ON = 2,
-	ETHTOOL_ID_OFF = 3,
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u32 cqe_size;
 };
 
 struct ethtool_link_ext_state_info {
@@ -11300,10 +26237,15 @@
 		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
 		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
 		enum ethtool_link_ext_substate_cable_issue cable_issue;
-		u8 __link_ext_substate;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
 	};
 };
 
+struct ethtool_link_ext_stats {
+	u64 link_down_events;
+};
+
 struct ethtool_link_ksettings {
 	struct ethtool_link_settings base;
 	struct {
@@ -11311,6 +26253,47 @@
 		long unsigned int advertising[2];
 		long unsigned int lp_advertising[2];
 	} link_modes;
+	u32 lanes;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+};
+
+struct ethtool_eth_mac_stats {
+	u64 FramesTransmittedOK;
+	u64 SingleCollisionFrames;
+	u64 MultipleCollisionFrames;
+	u64 FramesReceivedOK;
+	u64 FrameCheckSequenceErrors;
+	u64 AlignmentErrors;
+	u64 OctetsTransmittedOK;
+	u64 FramesWithDeferredXmissions;
+	u64 LateCollisions;
+	u64 FramesAbortedDueToXSColls;
+	u64 FramesLostDueToIntMACXmitError;
+	u64 CarrierSenseErrors;
+	u64 OctetsReceivedOK;
+	u64 FramesLostDueToIntMACRcvError;
+	u64 MulticastFramesXmittedOK;
+	u64 BroadcastFramesXmittedOK;
+	u64 FramesWithExcessiveDeferral;
+	u64 MulticastFramesReceivedOK;
+	u64 BroadcastFramesReceivedOK;
+	u64 InRangeLengthErrors;
+	u64 OutOfRangeLengthField;
+	u64 FrameTooLongErrors;
+};
+
+struct ethtool_eth_phy_stats {
+	u64 SymbolErrorDuringCarrier;
+};
+
+struct ethtool_eth_ctrl_stats {
+	u64 MACControlFramesTransmitted;
+	u64 MACControlFramesReceived;
+	u64 UnsupportedOpcodesReceived;
 };
 
 struct ethtool_pause_stats {
@@ -11318,2506 +26301,9397 @@
 	u64 rx_pause_frames;
 };
 
-struct ethtool_ops {
-	u32 supported_coalesce_params;
-	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device *);
-	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device *);
-	void (*set_msglevel)(struct net_device *, u32);
-	int (*nway_reset)(struct net_device *);
-	u32 (*get_link)(struct net_device *);
-	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
-	int (*get_eeprom_len)(struct net_device *);
-	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
-	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device *, u32, u8 *);
-	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device *);
-	void (*complete)(struct net_device *);
-	u32 (*get_priv_flags)(struct net_device *);
-	int (*set_priv_flags)(struct net_device *, u32);
-	int (*get_sset_count)(struct net_device *, int);
-	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device *, struct ethtool_flash *);
-	int (*reset)(struct net_device *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device *);
-	u32 (*get_rxfh_indir_size)(struct net_device *);
-	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
 };
 
-struct netlink_ext_ack {
-	const char *_msg;
-	const struct nlattr *bad_attr;
-	const struct nla_policy *policy;
-	u8 cookie[20];
-	u8 cookie_len;
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
 };
 
-struct ieee_ets {
-	__u8 willing;
-	__u8 ets_cap;
-	__u8 cbs;
-	__u8 tc_tx_bw[8];
-	__u8 tc_rx_bw[8];
-	__u8 tc_tsa[8];
-	__u8 prio_tc[8];
-	__u8 tc_reco_bw[8];
-	__u8 tc_reco_tsa[8];
-	__u8 reco_prio_tc[8];
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
 };
 
-struct ieee_maxrate {
-	__u64 tc_maxrate[8];
+struct ethtool_rmon_stats {
+	u64 undersize_pkts;
+	u64 oversize_pkts;
+	u64 fragments;
+	u64 jabbers;
+	u64 hist[10];
+	u64 hist_tx[10];
 };
 
-struct ieee_qcn {
-	__u8 rpg_enable[8];
-	__u32 rppp_max_rps[8];
-	__u32 rpg_time_reset[8];
-	__u32 rpg_byte_reset[8];
-	__u32 rpg_threshold[8];
-	__u32 rpg_max_rate[8];
-	__u32 rpg_ai_rate[8];
-	__u32 rpg_hai_rate[8];
-	__u32 rpg_gd[8];
-	__u32 rpg_min_dec_fac[8];
-	__u32 rpg_min_rate[8];
-	__u32 cndd_state_machine[8];
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
 };
 
-struct ieee_qcn_stats {
-	__u64 rppp_rp_centiseconds[8];
-	__u32 rppp_created_rps[8];
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
 };
 
-struct ieee_pfc {
-	__u8 pfc_cap;
-	__u8 pfc_en;
-	__u8 mbc;
-	__u16 delay;
-	__u64 requests[8];
-	__u64 indications[8];
+enum ib_uverbs_write_cmds {
+	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
+	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
+	IB_USER_VERBS_CMD_QUERY_PORT = 2,
+	IB_USER_VERBS_CMD_ALLOC_PD = 3,
+	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
+	IB_USER_VERBS_CMD_CREATE_AH = 5,
+	IB_USER_VERBS_CMD_MODIFY_AH = 6,
+	IB_USER_VERBS_CMD_QUERY_AH = 7,
+	IB_USER_VERBS_CMD_DESTROY_AH = 8,
+	IB_USER_VERBS_CMD_REG_MR = 9,
+	IB_USER_VERBS_CMD_REG_SMR = 10,
+	IB_USER_VERBS_CMD_REREG_MR = 11,
+	IB_USER_VERBS_CMD_QUERY_MR = 12,
+	IB_USER_VERBS_CMD_DEREG_MR = 13,
+	IB_USER_VERBS_CMD_ALLOC_MW = 14,
+	IB_USER_VERBS_CMD_BIND_MW = 15,
+	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
+	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
+	IB_USER_VERBS_CMD_CREATE_CQ = 18,
+	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
+	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
+	IB_USER_VERBS_CMD_POLL_CQ = 21,
+	IB_USER_VERBS_CMD_PEEK_CQ = 22,
+	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
+	IB_USER_VERBS_CMD_CREATE_QP = 24,
+	IB_USER_VERBS_CMD_QUERY_QP = 25,
+	IB_USER_VERBS_CMD_MODIFY_QP = 26,
+	IB_USER_VERBS_CMD_DESTROY_QP = 27,
+	IB_USER_VERBS_CMD_POST_SEND = 28,
+	IB_USER_VERBS_CMD_POST_RECV = 29,
+	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
+	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
+	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
+	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
+	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
+	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
+	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
+	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
+	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
+	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
+	IB_USER_VERBS_CMD_OPEN_QP = 40,
 };
 
-struct dcbnl_buffer {
-	__u8 prio2buffer[8];
-	__u32 buffer_size[8];
-	__u32 total_size;
+enum ib_uverbs_wc_opcode {
+	IB_UVERBS_WC_SEND = 0,
+	IB_UVERBS_WC_RDMA_WRITE = 1,
+	IB_UVERBS_WC_RDMA_READ = 2,
+	IB_UVERBS_WC_COMP_SWAP = 3,
+	IB_UVERBS_WC_FETCH_ADD = 4,
+	IB_UVERBS_WC_BIND_MW = 5,
+	IB_UVERBS_WC_LOCAL_INV = 6,
+	IB_UVERBS_WC_TSO = 7,
+	IB_UVERBS_WC_FLUSH = 8,
+	IB_UVERBS_WC_ATOMIC_WRITE = 9,
 };
 
-struct cee_pg {
-	__u8 willing;
-	__u8 error;
-	__u8 pg_en;
-	__u8 tcs_supported;
-	__u8 pg_bw[8];
-	__u8 prio_pg[8];
+enum ib_uverbs_create_qp_mask {
+	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
 };
 
-struct cee_pfc {
-	__u8 willing;
-	__u8 error;
-	__u8 pfc_en;
-	__u8 tcs_supported;
+enum ib_uverbs_wr_opcode {
+	IB_UVERBS_WR_RDMA_WRITE = 0,
+	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_UVERBS_WR_SEND = 2,
+	IB_UVERBS_WR_SEND_WITH_IMM = 3,
+	IB_UVERBS_WR_RDMA_READ = 4,
+	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_UVERBS_WR_LOCAL_INV = 7,
+	IB_UVERBS_WR_BIND_MW = 8,
+	IB_UVERBS_WR_SEND_WITH_INV = 9,
+	IB_UVERBS_WR_TSO = 10,
+	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
+	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_UVERBS_WR_FLUSH = 14,
+	IB_UVERBS_WR_ATOMIC_WRITE = 15,
 };
 
-struct dcb_app {
-	__u8 selector;
-	__u8 priority;
-	__u16 protocol;
+enum ib_uverbs_device_cap_flags {
+	IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1ULL,
+	IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2ULL,
+	IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4ULL,
+	IB_UVERBS_DEVICE_RAW_MULTI = 8ULL,
+	IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16ULL,
+	IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32ULL,
+	IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64ULL,
+	IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128ULL,
+	IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256ULL,
+	IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024ULL,
+	IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048ULL,
+	IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096ULL,
+	IB_UVERBS_DEVICE_SRQ_RESIZE = 8192ULL,
+	IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW = 131072ULL,
+	IB_UVERBS_DEVICE_UD_IP_CSUM = 262144ULL,
+	IB_UVERBS_DEVICE_XRC = 1048576ULL,
+	IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216ULL,
+	IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432ULL,
+	IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864ULL,
+	IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912ULL,
+	IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 17179869184ULL,
+	IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 68719476736ULL,
+	IB_UVERBS_DEVICE_FLUSH_GLOBAL = 274877906944ULL,
+	IB_UVERBS_DEVICE_FLUSH_PERSISTENT = 549755813888ULL,
+	IB_UVERBS_DEVICE_ATOMIC_WRITE = 1099511627776ULL,
 };
 
-struct dcb_peer_app_info {
-	__u8 willing;
-	__u8 error;
+enum ib_uverbs_raw_packet_caps {
+	IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+	IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+	IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+	IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
 };
 
-struct dcbnl_rtnl_ops {
-	int (*ieee_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_setets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);
-	int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_getapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_setapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_delapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);
-	u8 (*getstate)(struct net_device *);
-	u8 (*setstate)(struct net_device *, u8);
-	void (*getpermhwaddr)(struct net_device *, u8 *);
-	void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgtx)(struct net_device *, int, u8);
-	void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgrx)(struct net_device *, int, u8);
-	void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
-	void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
-	void (*setpfccfg)(struct net_device *, int, u8);
-	void (*getpfccfg)(struct net_device *, int, u8 *);
-	u8 (*setall)(struct net_device *);
-	u8 (*getcap)(struct net_device *, int, u8 *);
-	int (*getnumtcs)(struct net_device *, int, u8 *);
-	int (*setnumtcs)(struct net_device *, int, u8);
-	u8 (*getpfcstate)(struct net_device *);
-	void (*setpfcstate)(struct net_device *, u8);
-	void (*getbcncfg)(struct net_device *, int, u32 *);
-	void (*setbcncfg)(struct net_device *, int, u32);
-	void (*getbcnrp)(struct net_device *, int, u8 *);
-	void (*setbcnrp)(struct net_device *, int, u8);
-	int (*setapp)(struct net_device *, u8, u16, u8);
-	int (*getapp)(struct net_device *, u8, u16);
-	u8 (*getfeatcfg)(struct net_device *, int, u8 *);
-	u8 (*setfeatcfg)(struct net_device *, int, u8);
-	u8 (*getdcbx)(struct net_device *);
-	u8 (*setdcbx)(struct net_device *, u8);
-	int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);
-	int (*peer_getapptable)(struct net_device *, struct dcb_app *);
-	int (*cee_peer_getpg)(struct net_device *, struct cee_pg *);
-	int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);
-	int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
-	int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
+enum ib_uverbs_access_flags {
+	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
+	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
+	IB_UVERBS_ACCESS_REMOTE_READ = 4,
+	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
+	IB_UVERBS_ACCESS_MW_BIND = 16,
+	IB_UVERBS_ACCESS_ZERO_BASED = 32,
+	IB_UVERBS_ACCESS_ON_DEMAND = 64,
+	IB_UVERBS_ACCESS_HUGETLB = 128,
+	IB_UVERBS_ACCESS_FLUSH_GLOBAL = 256,
+	IB_UVERBS_ACCESS_FLUSH_PERSISTENT = 512,
+	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
+	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
 };
 
-struct netprio_map {
-	struct callback_head rcu;
-	u32 priomap_len;
-	u32 priomap[0];
+enum ib_uverbs_srq_type {
+	IB_UVERBS_SRQT_BASIC = 0,
+	IB_UVERBS_SRQT_XRC = 1,
+	IB_UVERBS_SRQT_TM = 2,
 };
 
-struct xdp_mem_info {
-	u32 type;
-	u32 id;
+enum ib_uverbs_wq_type {
+	IB_UVERBS_WQT_RQ = 0,
 };
 
-struct xdp_rxq_info {
-	struct net_device *dev;
-	u32 queue_index;
-	u32 reg_state;
-	struct xdp_mem_info mem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+enum ib_uverbs_wq_flags {
+	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
+	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
+	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
+	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
 };
 
-struct xdp_frame {
-	void *data;
-	u16 len;
-	u16 headroom;
-	u32 metasize: 8;
-	u32 frame_sz: 24;
-	struct xdp_mem_info mem;
-	struct net_device *dev_rx;
+enum ib_uverbs_qp_type {
+	IB_UVERBS_QPT_RC = 2,
+	IB_UVERBS_QPT_UC = 3,
+	IB_UVERBS_QPT_UD = 4,
+	IB_UVERBS_QPT_RAW_PACKET = 8,
+	IB_UVERBS_QPT_XRC_INI = 9,
+	IB_UVERBS_QPT_XRC_TGT = 10,
+	IB_UVERBS_QPT_DRIVER = 255,
 };
 
-struct nlmsghdr {
-	__u32 nlmsg_len;
-	__u16 nlmsg_type;
-	__u16 nlmsg_flags;
-	__u32 nlmsg_seq;
-	__u32 nlmsg_pid;
+enum ib_uverbs_qp_create_flags {
+	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
+	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
+	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
+	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
+	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
 };
 
-struct nlattr {
-	__u16 nla_len;
-	__u16 nla_type;
+enum ib_uverbs_gid_type {
+	IB_UVERBS_GID_TYPE_IB = 0,
+	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
+	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
 };
 
-struct netlink_range_validation;
-
-struct netlink_range_validation_signed;
-
-struct nla_policy {
-	u8 type;
-	u8 validation_type;
-	u16 len;
-	union {
-		const u32 bitfield32_valid;
-		const u32 mask;
-		const char *reject_message;
-		const struct nla_policy *nested_policy;
-		struct netlink_range_validation *range;
-		struct netlink_range_validation_signed *range_signed;
-		struct {
-			s16 min;
-			s16 max;
-		};
-		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
-		u16 strict_start_type;
-	};
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
 };
 
-struct netlink_callback {
-	struct sk_buff *skb;
-	const struct nlmsghdr *nlh;
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	struct netlink_ext_ack *extack;
+struct lsm_network_audit {
+	int netif;
+	const struct sock *sk;
 	u16 family;
-	u16 answer_flags;
-	u32 min_dump_alloc;
-	unsigned int prev_seq;
-	unsigned int seq;
-	bool strict_check;
+	__be16 dport;
+	__be16 sport;
 	union {
-		u8 ctx[48];
-		long int args[6];
+		struct {
+			__be32 daddr;
+			__be32 saddr;
+		} v4;
+		struct {
+			struct in6_addr daddr;
+			struct in6_addr saddr;
+		} v6;
+	} fam;
+};
+
+struct lsm_ioctlop_audit {
+	struct path path;
+	u16 cmd;
+};
+
+struct lsm_ibpkey_audit {
+	u64 subnet_prefix;
+	u16 pkey;
+};
+
+struct lsm_ibendport_audit {
+	const char *dev_name;
+	u8 port;
+};
+
+struct selinux_state;
+
+struct selinux_audit_data {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	u32 requested;
+	u32 audited;
+	u32 denied;
+	int result;
+	struct selinux_state *state;
+};
+
+struct apparmor_audit_data;
+
+struct common_audit_data {
+	char type;
+	union {
+		struct path path;
+		struct dentry *dentry;
+		struct inode *inode;
+		struct lsm_network_audit *net;
+		int cap;
+		int ipc_id;
+		struct task_struct *tsk;
+		struct {
+			key_serial_t key;
+			char *key_desc;
+		} key_struct;
+		char *kmod_name;
+		struct lsm_ioctlop_audit *op;
+		struct file *file;
+		struct lsm_ibpkey_audit *ibpkey;
+		struct lsm_ibendport_audit *ibendport;
+		int reason;
+		const char *anonclass;
+	} u;
+	union {
+		struct selinux_audit_data *selinux_audit_data;
+		struct apparmor_audit_data *apparmor_audit_data;
 	};
 };
 
-struct ndmsg {
-	__u8 ndm_family;
-	__u8 ndm_pad1;
-	__u16 ndm_pad2;
-	__s32 ndm_ifindex;
-	__u16 ndm_state;
-	__u8 ndm_flags;
-	__u8 ndm_type;
-};
-
-struct rtnl_link_stats64 {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 rx_errors;
-	__u64 tx_errors;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-	__u64 multicast;
-	__u64 collisions;
-	__u64 rx_length_errors;
-	__u64 rx_over_errors;
-	__u64 rx_crc_errors;
-	__u64 rx_frame_errors;
-	__u64 rx_fifo_errors;
-	__u64 rx_missed_errors;
-	__u64 tx_aborted_errors;
-	__u64 tx_carrier_errors;
-	__u64 tx_fifo_errors;
-	__u64 tx_heartbeat_errors;
-	__u64 tx_window_errors;
-	__u64 rx_compressed;
-	__u64 tx_compressed;
-	__u64 rx_nohandler;
-};
-
-struct ifla_vf_guid {
-	__u32 vf;
-	__u64 guid;
-};
-
-struct ifla_vf_stats {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 broadcast;
-	__u64 multicast;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-};
-
-struct ifla_vf_info {
-	__u32 vf;
-	__u8 mac[32];
-	__u32 vlan;
-	__u32 qos;
-	__u32 spoofchk;
-	__u32 linkstate;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-	__u32 rss_query_en;
-	__u32 trusted;
-	__be16 vlan_proto;
-};
-
-struct tc_stats {
-	__u64 bytes;
-	__u32 packets;
-	__u32 drops;
-	__u32 overlimits;
-	__u32 bps;
-	__u32 pps;
-	__u32 qlen;
-	__u32 backlog;
-};
-
-struct tc_sizespec {
-	unsigned char cell_log;
-	unsigned char size_log;
-	short int cell_align;
-	int overhead;
-	unsigned int linklayer;
-	unsigned int mpu;
-	unsigned int mtu;
-	unsigned int tsize;
-};
-
-enum netdev_tx {
-	__NETDEV_TX_MIN = 2147483648,
-	NETDEV_TX_OK = 0,
-	NETDEV_TX_BUSY = 16,
-};
-
-typedef enum netdev_tx netdev_tx_t;
-
-struct header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
-	int (*parse)(const struct sk_buff *, unsigned char *);
-	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
-	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
-	bool (*validate)(const char *, unsigned int);
-	__be16 (*parse_protocol)(const struct sk_buff *);
-};
-
-struct xsk_buff_pool;
-
-struct netdev_queue {
-	struct net_device *dev;
-	struct Qdisc *qdisc;
-	struct Qdisc *qdisc_sleeping;
-	struct kobject kobj;
-	int numa_node;
-	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
-	struct net_device *sb_dev;
-	struct xsk_buff_pool *pool;
-	spinlock_t _xmit_lock;
-	int xmit_lock_owner;
-	long unsigned int trans_start;
-	long unsigned int state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dql dql;
-};
-
-struct qdisc_skb_head {
-	struct sk_buff *head;
-	struct sk_buff *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct gnet_stats_basic_packed {
-	__u64 bytes;
-	__u64 packets;
-};
-
-struct gnet_stats_queue {
-	__u32 qlen;
-	__u32 backlog;
-	__u32 drops;
-	__u32 requeues;
-	__u32 overlimits;
-};
-
-struct Qdisc_ops;
-
-struct qdisc_size_table;
-
-struct net_rate_estimator;
-
-struct gnet_stats_basic_cpu;
-
-struct Qdisc {
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int pad;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head gso_skb;
-	struct qdisc_skb_head q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc *next_sched;
-	struct sk_buff_head skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long int privdata[0];
-};
-
-struct rps_map {
-	unsigned int len;
-	struct callback_head rcu;
-	u16 cpus[0];
-};
-
-struct rps_dev_flow {
-	u16 cpu;
-	u16 filter;
-	unsigned int last_qtail;
-};
-
-struct rps_dev_flow_table {
-	unsigned int mask;
-	struct callback_head rcu;
-	struct rps_dev_flow flows[0];
-};
-
-struct netdev_rx_queue {
-	struct rps_map *rps_map;
-	struct rps_dev_flow_table *rps_flow_table;
-	struct kobject kobj;
-	struct net_device *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-	struct xsk_buff_pool *pool;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xps_map {
-	unsigned int len;
-	unsigned int alloc_len;
-	struct callback_head rcu;
-	u16 queues[0];
-};
-
-struct xps_dev_maps {
-	struct callback_head rcu;
-	struct xps_map *attr_map[0];
-};
-
-struct netdev_fcoe_hbainfo {
-	char manufacturer[64];
-	char serial_number[64];
-	char hardware_version[64];
-	char driver_version[64];
-	char optionrom_version[64];
-	char firmware_version[64];
-	char model[256];
-	char model_description[256];
-};
-
-struct netdev_phys_item_id {
-	unsigned char id[32];
-	unsigned char id_len;
-};
-
-enum tc_setup_type {
-	TC_SETUP_QDISC_MQPRIO = 0,
-	TC_SETUP_CLSU32 = 1,
-	TC_SETUP_CLSFLOWER = 2,
-	TC_SETUP_CLSMATCHALL = 3,
-	TC_SETUP_CLSBPF = 4,
-	TC_SETUP_BLOCK = 5,
-	TC_SETUP_QDISC_CBS = 6,
-	TC_SETUP_QDISC_RED = 7,
-	TC_SETUP_QDISC_PRIO = 8,
-	TC_SETUP_QDISC_MQ = 9,
-	TC_SETUP_QDISC_ETF = 10,
-	TC_SETUP_ROOT_QDISC = 11,
-	TC_SETUP_QDISC_GRED = 12,
-	TC_SETUP_QDISC_TAPRIO = 13,
-	TC_SETUP_FT = 14,
-	TC_SETUP_QDISC_ETS = 15,
-	TC_SETUP_QDISC_TBF = 16,
-	TC_SETUP_QDISC_FIFO = 17,
-};
-
-enum bpf_netdev_command {
-	XDP_SETUP_PROG = 0,
-	XDP_SETUP_PROG_HW = 1,
-	BPF_OFFLOAD_MAP_ALLOC = 2,
-	BPF_OFFLOAD_MAP_FREE = 3,
-	XDP_SETUP_XSK_POOL = 4,
-};
-
-struct netdev_bpf {
-	enum bpf_netdev_command command;
-	union {
-		struct {
-			u32 flags;
-			struct bpf_prog *prog;
-			struct netlink_ext_ack *extack;
-		};
-		struct {
-			struct bpf_offloaded_map *offmap;
-		};
-		struct {
-			struct xsk_buff_pool *pool;
-			u16 queue_id;
-		} xsk;
-	};
-};
-
-struct xfrmdev_ops {
-	int (*xdo_dev_state_add)(struct xfrm_state *);
-	void (*xdo_dev_state_delete)(struct xfrm_state *);
-	void (*xdo_dev_state_free)(struct xfrm_state *);
-	bool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);
-	void (*xdo_dev_state_advance_esn)(struct xfrm_state *);
-};
-
-struct dev_ifalias {
-	struct callback_head rcuhead;
-	char ifalias[0];
-};
-
-struct netdev_name_node {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device *dev;
-	const char *name;
-};
-
-struct udp_tunnel_info;
-
-struct devlink_port;
-
-struct ip_tunnel_parm;
-
-struct net_device_ops {
-	int (*ndo_init)(struct net_device *);
-	void (*ndo_uninit)(struct net_device *);
-	int (*ndo_open)(struct net_device *);
-	int (*ndo_stop)(struct net_device *);
-	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
-	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
-	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
-	void (*ndo_change_rx_flags)(struct net_device *, int);
-	void (*ndo_set_rx_mode)(struct net_device *);
-	int (*ndo_set_mac_address)(struct net_device *, void *);
-	int (*ndo_validate_addr)(struct net_device *);
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-	int (*ndo_set_config)(struct net_device *, struct ifmap *);
-	int (*ndo_change_mtu)(struct net_device *, int);
-	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
-	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
-	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
-	bool (*ndo_has_offload_stats)(const struct net_device *, int);
-	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
-	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
-	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
-	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
-	void (*ndo_poll_controller)(struct net_device *);
-	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
-	void (*ndo_netpoll_cleanup)(struct net_device *);
-	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
-	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
-	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
-	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
-	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
-	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
-	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
-	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
-	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
-	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
-	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
-	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
-	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
-	int (*ndo_fcoe_enable)(struct net_device *);
-	int (*ndo_fcoe_disable)(struct net_device *);
-	int (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_ddp_done)(struct net_device *, u16);
-	int (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);
-	int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);
-	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
-	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
-	int (*ndo_del_slave)(struct net_device *, struct net_device *);
-	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
-	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
-	int (*ndo_set_features)(struct net_device *, netdev_features_t);
-	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
-	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
-	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);
-	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
-	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
-	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
-	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
-	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
-	int (*ndo_change_carrier)(struct net_device *, bool);
-	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);
-	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
-	void (*ndo_dfwd_del_station)(struct net_device *, void *);
-	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
-	int (*ndo_get_iflink)(const struct net_device *);
-	int (*ndo_change_proto_down)(struct net_device *, bool);
-	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
-	void (*ndo_set_rx_headroom)(struct net_device *, int);
-	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
-	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
-	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
-	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
-	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
-	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
-};
-
-struct neigh_parms {
-	possible_net_t net;
-	struct net_device *dev;
-	struct list_head list;
-	int (*neigh_setup)(struct neighbour *);
-	struct neigh_table *tbl;
-	void *sysctl_table;
-	int dead;
-	refcount_t refcnt;
-	struct callback_head callback_head;
-	int reachable_time;
-	int data[13];
-	long unsigned int data_state[1];
-};
-
-struct pcpu_lstats {
-	u64_stats_t packets;
-	u64_stats_t bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct pcpu_sw_netstats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct iw_request_info;
-
-union iwreq_data;
-
-typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
-
-struct iw_priv_args;
-
-struct iw_statistics;
-
-struct iw_handler_def {
-	const iw_handler *standard;
-	__u16 num_standard;
-	__u16 num_private;
-	__u16 num_private_args;
-	const iw_handler *private;
-	const struct iw_priv_args *private_args;
-	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
-};
-
-struct l3mdev_ops {
-	u32 (*l3mdev_fib_table)(const struct net_device *);
-	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
-	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
-	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
-};
-
-struct nd_opt_hdr;
-
-struct ndisc_options;
-
-struct prefix_info;
-
-struct ndisc_ops {
-	int (*is_useropt)(u8);
-	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
-	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
-	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
-	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
-	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
-};
-
-enum tls_offload_ctx_dir {
-	TLS_OFFLOAD_CTX_DIR_RX = 0,
-	TLS_OFFLOAD_CTX_DIR_TX = 1,
-};
-
-struct tls_crypto_info;
-
-struct tls_context;
-
-struct tlsdev_ops {
-	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
-	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
-	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
-};
-
-struct ipv6_devstat {
-	struct proc_dir_entry *proc_dir_entry;
-	struct ipstats_mib *ipv6;
-	struct icmpv6_mib_device *icmpv6dev;
-	struct icmpv6msg_mib_device *icmpv6msgdev;
-};
-
-struct ifmcaddr6;
-
-struct ifacaddr6;
-
-struct inet6_dev {
-	struct net_device *dev;
-	struct list_head addr_list;
-	struct ifmcaddr6 *mc_list;
-	struct ifmcaddr6 *mc_tomb;
-	spinlock_t mc_lock;
-	unsigned char mc_qrv;
-	unsigned char mc_gq_running;
-	unsigned char mc_ifc_count;
-	unsigned char mc_dad_count;
-	long unsigned int mc_v1_seen;
-	long unsigned int mc_qi;
-	long unsigned int mc_qri;
-	long unsigned int mc_maxdelay;
-	struct timer_list mc_gq_timer;
-	struct timer_list mc_ifc_timer;
-	struct timer_list mc_dad_timer;
-	struct ifacaddr6 *ac_list;
-	rwlock_t lock;
-	refcount_t refcnt;
-	__u32 if_flags;
-	int dead;
-	u32 desync_factor;
-	struct list_head tempaddr_list;
-	struct in6_addr token;
-	struct neigh_parms *nd_parms;
-	struct ipv6_devconf cnf;
-	struct ipv6_devstat stats;
-	struct timer_list rs_timer;
-	__s32 rs_interval;
-	__u8 rs_probes;
-	long unsigned int tstamp;
-	struct callback_head rcu;
-};
-
-struct tcf_proto;
-
-struct tcf_block;
-
-struct mini_Qdisc {
-	struct tcf_proto *filter_list;
-	struct tcf_block *block;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
-};
-
-struct rtnl_link_ops {
-	struct list_head list;
-	const char *kind;
-	size_t priv_size;
-	void (*setup)(struct net_device *);
-	unsigned int maxtype;
-	const struct nla_policy *policy;
-	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	void (*dellink)(struct net_device *, struct list_head *);
-	size_t (*get_size)(const struct net_device *);
-	int (*fill_info)(struct sk_buff *, const struct net_device *);
-	size_t (*get_xstats_size)(const struct net_device *);
-	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
-	unsigned int (*get_num_tx_queues)();
-	unsigned int (*get_num_rx_queues)();
-	unsigned int slave_maxtype;
-	const struct nla_policy *slave_policy;
-	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
-	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
-	struct net * (*get_link_net)(const struct net_device *);
-	size_t (*get_linkxstats_size)(const struct net_device *, int);
-	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
-};
-
-struct udp_tunnel_nic_table_info {
-	unsigned int n_entries;
-	unsigned int tunnel_types;
-};
-
-struct udp_tunnel_nic_shared;
-
-struct udp_tunnel_nic_info {
-	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*sync_table)(struct net_device *, unsigned int);
-	struct udp_tunnel_nic_shared *shared;
-	unsigned int flags;
-	struct udp_tunnel_nic_table_info tables[4];
-};
-
 enum {
-	RTAX_UNSPEC = 0,
-	RTAX_LOCK = 1,
-	RTAX_MTU = 2,
-	RTAX_WINDOW = 3,
-	RTAX_RTT = 4,
-	RTAX_RTTVAR = 5,
-	RTAX_SSTHRESH = 6,
-	RTAX_CWND = 7,
-	RTAX_ADVMSS = 8,
-	RTAX_REORDERING = 9,
-	RTAX_HOPLIMIT = 10,
-	RTAX_INITCWND = 11,
-	RTAX_FEATURES = 12,
-	RTAX_RTO_MIN = 13,
-	RTAX_INITRWND = 14,
-	RTAX_QUICKACK = 15,
-	RTAX_CC_ALGO = 16,
-	RTAX_FASTOPEN_NO_COOKIE = 17,
-	__RTAX_MAX = 18,
+	POLICYDB_CAP_NETPEER = 0,
+	POLICYDB_CAP_OPENPERM = 1,
+	POLICYDB_CAP_EXTSOCKCLASS = 2,
+	POLICYDB_CAP_ALWAYSNETWORK = 3,
+	POLICYDB_CAP_CGROUPSECLABEL = 4,
+	POLICYDB_CAP_NNP_NOSUID_TRANSITION = 5,
+	POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS = 6,
+	POLICYDB_CAP_IOCTL_SKIP_CLOEXEC = 7,
+	__POLICYDB_CAP_MAX = 8,
 };
 
-struct tcmsg {
-	unsigned char tcm_family;
-	unsigned char tcm__pad1;
-	short unsigned int tcm__pad2;
-	int tcm_ifindex;
-	__u32 tcm_handle;
-	__u32 tcm_parent;
-	__u32 tcm_info;
+struct selinux_avc;
+
+struct selinux_policy;
+
+struct selinux_state {
+	bool enforcing;
+	bool checkreqprot;
+	bool initialized;
+	bool policycap[8];
+	struct page *status_page;
+	struct mutex status_lock;
+	struct selinux_avc *avc;
+	struct selinux_policy *policy;
+	struct mutex policy_mutex;
 };
 
-struct gnet_stats_basic_cpu {
-	struct gnet_stats_basic_packed bstats;
-	struct u64_stats_sync syncp;
+struct selinux_policy_convert_data;
+
+struct selinux_load_state {
+	struct selinux_policy *policy;
+	struct selinux_policy_convert_data *convert_data;
 };
 
-struct gnet_dump {
-	spinlock_t *lock;
-	struct sk_buff *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
-};
-
-struct netlink_range_validation {
-	u64 min;
-	u64 max;
-};
-
-struct netlink_range_validation_signed {
-	s64 min;
-	s64 max;
-};
-
-enum flow_action_hw_stats_bit {
-	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
-	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
-	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
-	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
-};
-
-struct flow_block {
-	struct list_head cb_list;
-};
-
-typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
-
-struct qdisc_size_table {
-	struct callback_head rcu;
-	struct list_head list;
-	struct tc_sizespec szopts;
-	int refcnt;
-	u16 data[0];
-};
-
-struct Qdisc_class_ops;
-
-struct Qdisc_ops {
-	struct Qdisc_ops *next;
-	const struct Qdisc_class_ops *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	struct sk_buff * (*peek)(struct Qdisc *);
-	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc *);
-	void (*destroy)(struct Qdisc *);
-	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc *);
-	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	int (*dump)(struct Qdisc *, struct sk_buff *);
-	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
-	void (*ingress_block_set)(struct Qdisc *, u32);
-	void (*egress_block_set)(struct Qdisc *, u32);
-	u32 (*ingress_block_get)(struct Qdisc *);
-	u32 (*egress_block_get)(struct Qdisc *);
-	struct module *owner;
-};
-
-struct qdisc_walker;
-
-struct Qdisc_class_ops {
-	unsigned int flags;
-	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
-	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
-	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc *, u32);
-	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc *, long unsigned int);
-	void (*walk)(struct Qdisc *, struct qdisc_walker *);
-	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
-	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
-};
-
-struct tcf_chain;
-
-struct tcf_block {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	u32 classid;
-	refcount_t refcnt;
-	struct net *net;
-	struct Qdisc *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
-	struct {
-		struct tcf_chain *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
-};
-
-struct tcf_result;
-
-struct tcf_proto_ops;
-
-struct tcf_proto {
-	struct tcf_proto *next;
-	void *root;
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops *ops;
-	struct tcf_chain *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
-};
-
-struct tcf_result {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
-};
-
-struct tcf_walker;
-
-struct tcf_proto_ops {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	int (*init)(struct tcf_proto *);
-	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto *, u32);
-	void (*put)(struct tcf_proto *, void *);
-	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto *);
-	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto *, void *);
-	void (*hw_del)(struct tcf_proto *, void *);
-	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
-	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
-	struct module *owner;
-	int flags;
-};
-
-struct tcf_chain {
-	struct mutex filter_chain_lock;
-	struct tcf_proto *filter_chain;
-	struct list_head list;
-	struct tcf_block *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct sock_fprog_kern {
-	u16 len;
-	struct sock_filter *filter;
-};
-
-struct sk_filter {
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct bpf_prog *prog;
-};
-
-enum {
-	NEIGH_VAR_MCAST_PROBES = 0,
-	NEIGH_VAR_UCAST_PROBES = 1,
-	NEIGH_VAR_APP_PROBES = 2,
-	NEIGH_VAR_MCAST_REPROBES = 3,
-	NEIGH_VAR_RETRANS_TIME = 4,
-	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
-	NEIGH_VAR_DELAY_PROBE_TIME = 6,
-	NEIGH_VAR_GC_STALETIME = 7,
-	NEIGH_VAR_QUEUE_LEN_BYTES = 8,
-	NEIGH_VAR_PROXY_QLEN = 9,
-	NEIGH_VAR_ANYCAST_DELAY = 10,
-	NEIGH_VAR_PROXY_DELAY = 11,
-	NEIGH_VAR_LOCKTIME = 12,
-	NEIGH_VAR_QUEUE_LEN = 13,
-	NEIGH_VAR_RETRANS_TIME_MS = 14,
-	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 15,
-	NEIGH_VAR_GC_INTERVAL = 16,
-	NEIGH_VAR_GC_THRESH1 = 17,
-	NEIGH_VAR_GC_THRESH2 = 18,
-	NEIGH_VAR_GC_THRESH3 = 19,
-	NEIGH_VAR_MAX = 20,
-};
-
-struct pneigh_entry;
-
-struct neigh_statistics;
-
-struct neigh_hash_table;
-
-struct neigh_table {
-	int family;
-	unsigned int entry_size;
-	unsigned int key_len;
-	__be16 protocol;
-	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
-	bool (*key_eq)(const struct neighbour *, const void *);
-	int (*constructor)(struct neighbour *);
-	int (*pconstructor)(struct pneigh_entry *);
-	void (*pdestructor)(struct pneigh_entry *);
-	void (*proxy_redo)(struct sk_buff *);
-	int (*is_multicast)(const void *);
-	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
-	char *id;
-	struct neigh_parms parms;
-	struct list_head parms_list;
-	int gc_interval;
-	int gc_thresh1;
-	int gc_thresh2;
-	int gc_thresh3;
-	long unsigned int last_flush;
-	struct delayed_work gc_work;
-	struct timer_list proxy_timer;
-	struct sk_buff_head proxy_queue;
-	atomic_t entries;
-	atomic_t gc_entries;
-	struct list_head gc_list;
-	rwlock_t lock;
-	long unsigned int last_rand;
-	struct neigh_statistics *stats;
-	struct neigh_hash_table *nht;
-	struct pneigh_entry **phash_buckets;
-};
-
-struct neigh_statistics {
-	long unsigned int allocs;
-	long unsigned int destroys;
-	long unsigned int hash_grows;
-	long unsigned int res_failed;
-	long unsigned int lookups;
-	long unsigned int hits;
-	long unsigned int rcv_probes_mcast;
-	long unsigned int rcv_probes_ucast;
-	long unsigned int periodic_gc_runs;
-	long unsigned int forced_gc_runs;
-	long unsigned int unres_discards;
-	long unsigned int table_fulls;
-};
-
-struct neigh_ops {
-	int family;
-	void (*solicit)(struct neighbour *, struct sk_buff *);
-	void (*error_report)(struct neighbour *, struct sk_buff *);
-	int (*output)(struct neighbour *, struct sk_buff *);
-	int (*connected_output)(struct neighbour *, struct sk_buff *);
-};
-
-struct pneigh_entry {
-	struct pneigh_entry *next;
-	possible_net_t net;
-	struct net_device *dev;
-	u8 flags;
-	u8 protocol;
-	u8 key[0];
-};
-
-struct neigh_hash_table {
-	struct neighbour **hash_buckets;
-	unsigned int hash_shift;
-	__u32 hash_rnd[4];
-	struct callback_head rcu;
-};
-
-enum {
-	TCP_ESTABLISHED = 1,
-	TCP_SYN_SENT = 2,
-	TCP_SYN_RECV = 3,
-	TCP_FIN_WAIT1 = 4,
-	TCP_FIN_WAIT2 = 5,
-	TCP_TIME_WAIT = 6,
-	TCP_CLOSE = 7,
-	TCP_CLOSE_WAIT = 8,
-	TCP_LAST_ACK = 9,
-	TCP_LISTEN = 10,
-	TCP_CLOSING = 11,
-	TCP_NEW_SYN_RECV = 12,
-	TCP_MAX_STATES = 13,
-};
-
-struct fib_rule_hdr {
-	__u8 family;
-	__u8 dst_len;
-	__u8 src_len;
-	__u8 tos;
-	__u8 table;
-	__u8 res1;
-	__u8 res2;
-	__u8 action;
-	__u32 flags;
-};
-
-struct fib_rule_port_range {
-	__u16 start;
-	__u16 end;
-};
-
-struct fib_kuid_range {
-	kuid_t start;
-	kuid_t end;
-};
-
-struct fib_rule {
-	struct list_head list;
-	int iifindex;
-	int oifindex;
-	u32 mark;
-	u32 mark_mask;
+struct av_decision {
+	u32 allowed;
+	u32 auditallow;
+	u32 auditdeny;
+	u32 seqno;
 	u32 flags;
-	u32 table;
-	u8 action;
-	u8 l3mdev;
-	u8 proto;
-	u8 ip_proto;
-	u32 target;
-	__be64 tun_id;
-	struct fib_rule *ctarget;
-	struct net *fr_net;
-	refcount_t refcnt;
-	u32 pref;
-	int suppress_ifgroup;
-	int suppress_prefixlen;
-	char iifname[16];
-	char oifname[16];
-	struct fib_kuid_range uid_range;
-	struct fib_rule_port_range sport_range;
-	struct fib_rule_port_range dport_range;
-	struct callback_head rcu;
 };
 
-struct fib_lookup_arg {
-	void *lookup_ptr;
-	const void *lookup_data;
-	void *result;
-	struct fib_rule *rule;
-	u32 table;
-	int flags;
+struct avc_cache_stats {
+	unsigned int lookups;
+	unsigned int misses;
+	unsigned int allocations;
+	unsigned int reclaims;
+	unsigned int frees;
 };
 
-struct smc_hashinfo;
+struct task_security_struct {
+	u32 osid;
+	u32 sid;
+	u32 exec_sid;
+	u32 create_sid;
+	u32 keycreate_sid;
+	u32 sockcreate_sid;
+};
 
-struct request_sock_ops;
+enum label_initialized {
+	LABEL_INVALID = 0,
+	LABEL_INITIALIZED = 1,
+	LABEL_PENDING = 2,
+};
 
-struct timewait_sock_ops;
+struct inode_security_struct {
+	struct inode *inode;
+	struct list_head list;
+	u32 task_sid;
+	u32 sid;
+	u16 sclass;
+	unsigned char initialized;
+	spinlock_t lock;
+};
 
-struct udp_table;
+enum sel_inos {
+	SEL_ROOT_INO = 2,
+	SEL_LOAD = 3,
+	SEL_ENFORCE = 4,
+	SEL_CONTEXT = 5,
+	SEL_ACCESS = 6,
+	SEL_CREATE = 7,
+	SEL_RELABEL = 8,
+	SEL_USER = 9,
+	SEL_POLICYVERS = 10,
+	SEL_COMMIT_BOOLS = 11,
+	SEL_MLS = 12,
+	SEL_DISABLE = 13,
+	SEL_MEMBER = 14,
+	SEL_CHECKREQPROT = 15,
+	SEL_COMPAT_NET = 16,
+	SEL_REJECT_UNKNOWN = 17,
+	SEL_DENY_UNKNOWN = 18,
+	SEL_STATUS = 19,
+	SEL_POLICY = 20,
+	SEL_VALIDATE_TRANS = 21,
+	SEL_INO_NEXT = 22,
+};
 
-struct raw_hashinfo;
+struct selinux_fs_info {
+	struct dentry *bool_dir;
+	unsigned int bool_num;
+	char **bool_pending_names;
+	int *bool_pending_values;
+	struct dentry *class_dir;
+	long unsigned int last_class_ino;
+	bool policy_opened;
+	struct dentry *policycap_dir;
+	long unsigned int last_ino;
+	struct selinux_state *state;
+	struct super_block *sb;
+};
 
-struct proto {
-	void (*close)(struct sock *, long int);
-	int (*pre_connect)(struct sock *, struct sockaddr *, int);
-	int (*connect)(struct sock *, struct sockaddr *, int);
-	int (*disconnect)(struct sock *, int);
-	struct sock * (*accept)(struct sock *, int, int *, bool);
-	int (*ioctl)(struct sock *, int, long unsigned int);
-	int (*init)(struct sock *);
-	void (*destroy)(struct sock *);
-	void (*shutdown)(struct sock *, int);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*keepalive)(struct sock *, int);
-	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
-	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
-	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);
-	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
-	int (*bind)(struct sock *, struct sockaddr *, int);
-	int (*bind_add)(struct sock *, struct sockaddr *, int);
-	int (*backlog_rcv)(struct sock *, struct sk_buff *);
-	void (*release_cb)(struct sock *);
-	int (*hash)(struct sock *);
-	void (*unhash)(struct sock *);
-	void (*rehash)(struct sock *);
-	int (*get_port)(struct sock *, short unsigned int);
-	unsigned int inuse_idx;
-	bool (*stream_memory_free)(const struct sock *, int);
-	bool (*stream_memory_read)(const struct sock *);
-	void (*enter_memory_pressure)(struct sock *);
-	void (*leave_memory_pressure)(struct sock *);
-	atomic_long_t *memory_allocated;
-	struct percpu_counter *sockets_allocated;
-	long unsigned int *memory_pressure;
-	long int *sysctl_mem;
-	int *sysctl_wmem;
-	int *sysctl_rmem;
-	u32 sysctl_wmem_offset;
-	u32 sysctl_rmem_offset;
-	int max_header;
-	bool no_autobind;
-	struct kmem_cache *slab;
-	unsigned int obj_size;
-	slab_flags_t slab_flags;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct percpu_counter *orphan_count;
-	struct request_sock_ops *rsk_prot;
-	struct timewait_sock_ops *twsk_prot;
+struct policy_load_memory {
+	size_t len;
+	void *data;
+};
+
+struct netnode_security_struct {
 	union {
-		struct inet_hashinfo *hashinfo;
-		struct udp_table *udp_table;
-		struct raw_hashinfo *raw_hash;
-		struct smc_hashinfo *smc_hash;
-	} h;
-	struct module *owner;
-	char name[32];
-	struct list_head node;
-	int (*diag_destroy)(struct sock *, int);
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} addr;
+	u32 sid;
+	u16 family;
 };
 
-struct request_sock;
-
-struct request_sock_ops {
-	int family;
-	unsigned int obj_size;
-	struct kmem_cache *slab;
-	char *slab_name;
-	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
-	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
-	void (*send_reset)(const struct sock *, struct sk_buff *);
-	void (*destructor)(struct request_sock *);
-	void (*syn_ack_timeout)(const struct request_sock *);
+struct sel_netnode_bkt {
+	unsigned int size;
+	struct list_head list;
 };
 
-struct timewait_sock_ops {
-	struct kmem_cache *twsk_slab;
-	char *twsk_slab_name;
-	unsigned int twsk_obj_size;
-	int (*twsk_unique)(struct sock *, struct sock *, void *);
-	void (*twsk_destructor)(struct sock *);
-};
-
-struct saved_syn;
-
-struct request_sock {
-	struct sock_common __req_common;
-	struct request_sock *dl_next;
-	u16 mss;
-	u8 num_retrans;
-	u8 syncookie: 1;
-	u8 num_timeout: 7;
-	u32 ts_recent;
-	struct timer_list rsk_timer;
-	const struct request_sock_ops *rsk_ops;
-	struct sock *sk;
-	struct saved_syn *saved_syn;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct saved_syn {
-	u32 mac_hdrlen;
-	u32 network_hdrlen;
-	u32 tcp_hdrlen;
-	u8 data[0];
-};
-
-enum tsq_enum {
-	TSQ_THROTTLED = 0,
-	TSQ_QUEUED = 1,
-	TCP_TSQ_DEFERRED = 2,
-	TCP_WRITE_TIMER_DEFERRED = 3,
-	TCP_DELACK_TIMER_DEFERRED = 4,
-	TCP_MTU_REDUCED_DEFERRED = 5,
-};
-
-struct ip6_sf_list {
-	struct ip6_sf_list *sf_next;
-	struct in6_addr sf_addr;
-	long unsigned int sf_count[2];
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ifmcaddr6 {
-	struct in6_addr mca_addr;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *next;
-	struct ip6_sf_list *mca_sources;
-	struct ip6_sf_list *mca_tomb;
-	unsigned int mca_sfmode;
-	unsigned char mca_crcount;
-	long unsigned int mca_sfcount[2];
-	struct timer_list mca_timer;
-	unsigned int mca_flags;
-	int mca_users;
-	refcount_t mca_refcnt;
-	spinlock_t mca_lock;
-	long unsigned int mca_cstamp;
-	long unsigned int mca_tstamp;
-};
-
-struct ifacaddr6 {
-	struct in6_addr aca_addr;
-	struct fib6_info *aca_rt;
-	struct ifacaddr6 *aca_next;
-	struct hlist_node aca_addr_lst;
-	int aca_users;
-	refcount_t aca_refcnt;
-	long unsigned int aca_cstamp;
-	long unsigned int aca_tstamp;
+struct sel_netnode {
+	struct netnode_security_struct nsec;
+	struct list_head list;
 	struct callback_head rcu;
 };
 
+struct hashtab_node {
+	void *key;
+	void *datum;
+	struct hashtab_node *next;
+};
+
+struct hashtab {
+	struct hashtab_node **htable;
+	u32 size;
+	u32 nel;
+};
+
+struct hashtab_info {
+	u32 slots_used;
+	u32 max_chain_len;
+};
+
+struct hashtab_key_params {
+	u32 (*hash)(const void *);
+	int (*cmp)(const void *, const void *);
+};
+
+struct symtab {
+	struct hashtab table;
+	u32 nprim;
+};
+
+struct avtab_node;
+
+struct avtab {
+	struct avtab_node **htable;
+	u32 nel;
+	u32 nslot;
+	u32 mask;
+};
+
+struct ebitmap_node;
+
+struct ebitmap {
+	struct ebitmap_node *node;
+	u32 highbit;
+};
+
+struct class_datum;
+
+struct role_datum;
+
+struct user_datum;
+
+struct type_datum;
+
+struct cond_bool_datum;
+
+struct cond_node;
+
+struct role_allow;
+
+struct ocontext;
+
+struct genfs;
+
+struct policydb {
+	int mls_enabled;
+	struct symtab symtab[8];
+	char **sym_val_to_name[8];
+	struct class_datum **class_val_to_struct;
+	struct role_datum **role_val_to_struct;
+	struct user_datum **user_val_to_struct;
+	struct type_datum **type_val_to_struct;
+	struct avtab te_avtab;
+	struct hashtab role_tr;
+	struct ebitmap filename_trans_ttypes;
+	struct hashtab filename_trans;
+	u32 compat_filename_trans_count;
+	struct cond_bool_datum **bool_val_to_struct;
+	struct avtab te_cond_avtab;
+	struct cond_node *cond_list;
+	u32 cond_list_len;
+	struct role_allow *role_allow;
+	struct ocontext *ocontexts[9];
+	struct genfs *genfs;
+	struct hashtab range_tr;
+	struct ebitmap *type_attr_map_array;
+	struct ebitmap policycaps;
+	struct ebitmap permissive_map;
+	size_t len;
+	unsigned int policyvers;
+	unsigned int reject_unknown: 1;
+	unsigned int allow_unknown: 1;
+	u16 process_class;
+	u32 process_trans_perms;
+};
+
+struct selinux_mapping;
+
+struct selinux_map {
+	struct selinux_mapping *mapping;
+	u16 size;
+};
+
+struct sidtab;
+
+struct selinux_policy {
+	struct sidtab *sidtab;
+	struct policydb policydb;
+	struct selinux_map map;
+	u32 latest_granting;
+};
+
+struct extended_perms_data {
+	u32 p[8];
+};
+
+struct ebitmap_node {
+	struct ebitmap_node *next;
+	long unsigned int maps[6];
+	u32 startbit;
+};
+
+struct mls_level {
+	u32 sens;
+	struct ebitmap cat;
+};
+
+struct mls_range {
+	struct mls_level level[2];
+};
+
+struct context {
+	u32 user;
+	u32 role;
+	u32 type;
+	u32 len;
+	struct mls_range range;
+	char *str;
+};
+
+struct sidtab_str_cache;
+
+struct sidtab_entry {
+	u32 sid;
+	u32 hash;
+	struct context context;
+	struct sidtab_str_cache *cache;
+	struct hlist_node list;
+};
+
+struct sidtab_str_cache {
+	struct callback_head rcu_member;
+	struct list_head lru_member;
+	struct sidtab_entry *parent;
+	u32 len;
+	char str[0];
+};
+
+struct sidtab_node_inner;
+
+struct sidtab_node_leaf;
+
+union sidtab_entry_inner {
+	struct sidtab_node_inner *ptr_inner;
+	struct sidtab_node_leaf *ptr_leaf;
+};
+
+struct sidtab_node_inner {
+	union sidtab_entry_inner entries[2048];
+};
+
+struct sidtab_node_leaf {
+	struct sidtab_entry entries[157];
+};
+
+struct sidtab_isid_entry {
+	int set;
+	struct sidtab_entry entry;
+};
+
+struct convert_context_args;
+
+struct sidtab_convert_params {
+	struct convert_context_args *args;
+	struct sidtab *target;
+};
+
+struct convert_context_args {
+	struct selinux_state *state;
+	struct policydb *oldp;
+	struct policydb *newp;
+};
+
+struct sidtab {
+	union sidtab_entry_inner roots[4];
+	u32 count;
+	struct sidtab_convert_params *convert;
+	bool frozen;
+	spinlock_t lock;
+	u32 cache_free_slots;
+	struct list_head cache_lru_list;
+	spinlock_t cache_lock;
+	struct sidtab_isid_entry isids[27];
+	struct hlist_head context_to_sid[512];
+};
+
+struct avtab_key {
+	u16 source_type;
+	u16 target_type;
+	u16 target_class;
+	u16 specified;
+};
+
+struct avtab_extended_perms {
+	u8 specified;
+	u8 driver;
+	struct extended_perms_data perms;
+};
+
+struct avtab_datum {
+	union {
+		u32 data;
+		struct avtab_extended_perms *xperms;
+	} u;
+};
+
+struct avtab_node {
+	struct avtab_key key;
+	struct avtab_datum datum;
+	struct avtab_node *next;
+};
+
+struct type_set;
+
+struct constraint_expr {
+	u32 expr_type;
+	u32 attr;
+	u32 op;
+	struct ebitmap names;
+	struct type_set *type_names;
+	struct constraint_expr *next;
+};
+
+struct type_set {
+	struct ebitmap types;
+	struct ebitmap negset;
+	u32 flags;
+};
+
+struct constraint_node {
+	u32 permissions;
+	struct constraint_expr *expr;
+	struct constraint_node *next;
+};
+
+struct common_datum {
+	u32 value;
+	struct symtab permissions;
+};
+
+struct class_datum {
+	u32 value;
+	char *comkey;
+	struct common_datum *comdatum;
+	struct symtab permissions;
+	struct constraint_node *constraints;
+	struct constraint_node *validatetrans;
+	char default_user;
+	char default_role;
+	char default_type;
+	char default_range;
+};
+
+struct role_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap dominates;
+	struct ebitmap types;
+};
+
+struct role_allow {
+	u32 role;
+	u32 new_role;
+	struct role_allow *next;
+};
+
+struct type_datum {
+	u32 value;
+	u32 bounds;
+	unsigned char primary;
+	unsigned char attribute;
+};
+
+struct user_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap roles;
+	struct mls_range range;
+	struct mls_level dfltlevel;
+};
+
+struct cond_bool_datum {
+	__u32 value;
+	int state;
+};
+
+struct ocontext {
+	union {
+		char *name;
+		struct {
+			u8 protocol;
+			u16 low_port;
+			u16 high_port;
+		} port;
+		struct {
+			u32 addr;
+			u32 mask;
+		} node;
+		struct {
+			u32 addr[4];
+			u32 mask[4];
+		} node6;
+		struct {
+			u64 subnet_prefix;
+			u16 low_pkey;
+			u16 high_pkey;
+		} ibpkey;
+		struct {
+			char *dev_name;
+			u8 port;
+		} ibendport;
+	} u;
+	union {
+		u32 sclass;
+		u32 behavior;
+	} v;
+	struct context context[2];
+	u32 sid[2];
+	struct ocontext *next;
+};
+
+struct genfs {
+	char *fstype;
+	struct ocontext *head;
+	struct genfs *next;
+};
+
+struct selinux_mapping {
+	u16 value;
+	unsigned int num_perms;
+	u32 perms[32];
+};
+
+struct extended_perms_decision {
+	u8 used;
+	u8 driver;
+	struct extended_perms_data *allowed;
+	struct extended_perms_data *auditallow;
+	struct extended_perms_data *dontaudit;
+};
+
+struct extended_perms {
+	u16 len;
+	struct extended_perms_data drivers;
+};
+
+struct cond_expr_node;
+
+struct cond_expr {
+	struct cond_expr_node *nodes;
+	u32 len;
+};
+
+struct cond_av_list {
+	struct avtab_node **nodes;
+	u32 len;
+};
+
+struct cond_node {
+	int cur_state;
+	struct cond_expr expr;
+	struct cond_av_list true_list;
+	struct cond_av_list false_list;
+};
+
+struct policy_file {
+	char *data;
+	size_t len;
+};
+
+struct policy_data {
+	struct policydb *p;
+	void *fp;
+};
+
+struct cond_expr_node {
+	u32 expr_type;
+	u32 bool;
+};
+
+struct cond_insertf_data {
+	struct policydb *p;
+	struct avtab_node **dst;
+	struct cond_av_list *other;
+};
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
+};
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+enum audit_mode {
+	AUDIT_NORMAL = 0,
+	AUDIT_QUIET_DENIED = 1,
+	AUDIT_QUIET = 2,
+	AUDIT_NOQUIET = 3,
+	AUDIT_ALL = 4,
+};
+
+enum aa_sfs_type {
+	AA_SFS_TYPE_BOOLEAN = 0,
+	AA_SFS_TYPE_STRING = 1,
+	AA_SFS_TYPE_U64 = 2,
+	AA_SFS_TYPE_FOPS = 3,
+	AA_SFS_TYPE_DIR = 4,
+};
+
+struct aa_sfs_entry {
+	const char *name;
+	struct dentry *dentry;
+	umode_t mode;
+	enum aa_sfs_type v_type;
+	union {
+		bool boolean;
+		char *string;
+		long unsigned int u64;
+		struct aa_sfs_entry *files;
+	} v;
+	const struct file_operations *file_ops;
+};
+
+enum aafs_ns_type {
+	AAFS_NS_DIR = 0,
+	AAFS_NS_PROFS = 1,
+	AAFS_NS_NS = 2,
+	AAFS_NS_RAW_DATA = 3,
+	AAFS_NS_LOAD = 4,
+	AAFS_NS_REPLACE = 5,
+	AAFS_NS_REMOVE = 6,
+	AAFS_NS_REVISION = 7,
+	AAFS_NS_COUNT = 8,
+	AAFS_NS_MAX_COUNT = 9,
+	AAFS_NS_SIZE = 10,
+	AAFS_NS_MAX_SIZE = 11,
+	AAFS_NS_OWNER = 12,
+	AAFS_NS_SIZEOF = 13,
+};
+
+enum aafs_prof_type {
+	AAFS_PROF_DIR = 0,
+	AAFS_PROF_PROFS = 1,
+	AAFS_PROF_NAME = 2,
+	AAFS_PROF_MODE = 3,
+	AAFS_PROF_ATTACH = 4,
+	AAFS_PROF_HASH = 5,
+	AAFS_PROF_RAW_DATA = 6,
+	AAFS_PROF_RAW_HASH = 7,
+	AAFS_PROF_RAW_ABI = 8,
+	AAFS_PROF_SIZEOF = 9,
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+struct table_header {
+	u16 td_id;
+	u16 td_flags;
+	u32 td_hilen;
+	u32 td_lolen;
+	char td_data[0];
+};
+
+struct aa_dfa {
+	struct kref count;
+	u16 flags;
+	u32 max_oob;
+	struct table_header *tables[8];
+};
+
+struct aa_str_table {
+	int size;
+	char **table;
+};
+
+struct aa_policy {
+	const char *name;
+	char *hname;
+	struct list_head list;
+	struct list_head profiles;
+};
+
+struct aa_labelset {
+	rwlock_t lock;
+	struct rb_root root;
+};
+
+enum label_flags {
+	FLAG_HAT = 1,
+	FLAG_UNCONFINED = 2,
+	FLAG_NULL = 4,
+	FLAG_IX_ON_NAME_ERROR = 8,
+	FLAG_IMMUTIBLE = 16,
+	FLAG_USER_DEFINED = 32,
+	FLAG_NO_LIST_REF = 64,
+	FLAG_NS_COUNT = 128,
+	FLAG_IN_TREE = 256,
+	FLAG_PROFILE = 512,
+	FLAG_EXPLICIT = 1024,
+	FLAG_STALE = 2048,
+	FLAG_RENAMED = 4096,
+	FLAG_REVOKED = 8192,
+	FLAG_DEBUG1 = 16384,
+	FLAG_DEBUG2 = 32768,
+};
+
+struct aa_label;
+
+struct aa_proxy {
+	struct kref count;
+	struct aa_label *label;
+};
+
+struct aa_profile;
+
+struct aa_label {
+	struct kref count;
+	struct rb_node node;
+	struct callback_head rcu;
+	struct aa_proxy *proxy;
+	char *hname;
+	long int flags;
+	u32 secid;
+	int size;
+	struct aa_profile *vec[0];
+};
+
+struct label_it {
+	int i;
+	int j;
+};
+
+struct aa_perms;
+
+struct aa_policydb {
+	struct aa_dfa *dfa;
+	struct {
+		struct aa_perms *perms;
+		u32 size;
+	};
+	struct aa_str_table trans;
+	unsigned int start[33];
+};
+
+struct aa_attachment {
+	const char *xmatch_str;
+	struct aa_policydb xmatch;
+	unsigned int xmatch_len;
+	int xattr_count;
+	char **xattrs;
+};
+
+struct aa_ns;
+
+struct aa_loaddata;
+
+struct aa_profile {
+	struct aa_policy base;
+	struct aa_profile *parent;
+	struct aa_ns *ns;
+	const char *rename;
+	enum audit_mode audit;
+	long int mode;
+	u32 path_flags;
+	const char *disconnected;
+	struct aa_attachment attach;
+	struct list_head rules;
+	struct aa_loaddata *rawdata;
+	unsigned char *hash;
+	char *dirname;
+	struct dentry *dents[9];
+	struct rhashtable *data;
+	struct aa_label label;
+};
+
+struct aa_perms {
+	u32 allow;
+	u32 deny;
+	u32 subtree;
+	u32 cond;
+	u32 kill;
+	u32 complain;
+	u32 prompt;
+	u32 audit;
+	u32 quiet;
+	u32 hide;
+	u32 xindex;
+	u32 tag;
+	u32 label;
+};
+
+struct path_cond {
+	kuid_t uid;
+	umode_t mode;
+};
+
+struct aa_caps {
+	kernel_cap_t allow;
+	kernel_cap_t audit;
+	kernel_cap_t denied;
+	kernel_cap_t quiet;
+	kernel_cap_t kill;
+	kernel_cap_t extended;
+};
+
+struct aa_secmark {
+	u8 audit;
+	u8 deny;
+	u32 secid;
+	char *label;
+};
+
+struct aa_rlimit {
+	unsigned int mask;
+	struct rlimit limits[16];
+};
+
+enum profile_mode {
+	APPARMOR_ENFORCE = 0,
+	APPARMOR_COMPLAIN = 1,
+	APPARMOR_KILL = 2,
+	APPARMOR_UNCONFINED = 3,
+	APPARMOR_USER = 4,
+};
+
+struct aa_data {
+	char *key;
+	u32 size;
+	char *data;
+	struct rhash_head head;
+};
+
+struct aa_ruleset {
+	struct list_head list;
+	int size;
+	struct aa_policydb policy;
+	struct aa_policydb file;
+	struct aa_caps caps;
+	struct aa_rlimit rlimits;
+	int secmark_count;
+	struct aa_secmark *secmark;
+};
+
+struct aa_ns_acct {
+	int max_size;
+	int max_count;
+	int size;
+	int count;
+};
+
+struct aa_ns {
+	struct aa_policy base;
+	struct aa_ns *parent;
+	struct mutex lock;
+	struct aa_ns_acct acct;
+	struct aa_profile *unconfined;
+	struct list_head sub_ns;
+	atomic_t uniq_null;
+	long int uniq_id;
+	int level;
+	long int revision;
+	wait_queue_head_t wait;
+	struct aa_labelset labels;
+	struct list_head rawdata_list;
+	struct dentry *dents[13];
+};
+
+struct aa_loaddata {
+	struct kref count;
+	struct list_head list;
+	struct work_struct work;
+	struct dentry *dents[6];
+	struct aa_ns *ns;
+	char *name;
+	size_t size;
+	size_t compressed_size;
+	long int revision;
+	int abi;
+	unsigned char *hash;
+	char *data;
+};
+
 enum {
-	__ND_OPT_PREFIX_INFO_END = 0,
-	ND_OPT_SOURCE_LL_ADDR = 1,
-	ND_OPT_TARGET_LL_ADDR = 2,
-	ND_OPT_PREFIX_INFO = 3,
-	ND_OPT_REDIRECT_HDR = 4,
-	ND_OPT_MTU = 5,
-	ND_OPT_NONCE = 14,
-	__ND_OPT_ARRAY_MAX = 15,
-	ND_OPT_ROUTE_INFO = 24,
-	ND_OPT_RDNSS = 25,
-	ND_OPT_DNSSL = 31,
-	ND_OPT_6CO = 34,
-	ND_OPT_CAPTIVE_PORTAL = 37,
-	ND_OPT_PREF64 = 38,
-	__ND_OPT_MAX = 39,
+	AAFS_LOADDATA_ABI = 0,
+	AAFS_LOADDATA_REVISION = 1,
+	AAFS_LOADDATA_HASH = 2,
+	AAFS_LOADDATA_DATA = 3,
+	AAFS_LOADDATA_COMPRESSED_SIZE = 4,
+	AAFS_LOADDATA_DIR = 5,
+	AAFS_LOADDATA_NDENTS = 6,
 };
 
-struct nd_opt_hdr {
-	__u8 nd_opt_type;
-	__u8 nd_opt_len;
+struct rawdata_f_data {
+	struct aa_loaddata *loaddata;
 };
 
-struct ndisc_options {
-	struct nd_opt_hdr *nd_opt_array[15];
-	struct nd_opt_hdr *nd_opts_ri;
-	struct nd_opt_hdr *nd_opts_ri_end;
-	struct nd_opt_hdr *nd_useropts;
-	struct nd_opt_hdr *nd_useropts_end;
-	struct nd_opt_hdr *nd_802154_opt_array[3];
+struct aa_revision {
+	struct aa_ns *ns;
+	long int last_read;
 };
 
-struct prefix_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved: 6;
-	__u8 autoconf: 1;
-	__u8 onlink: 1;
-	__be32 valid;
-	__be32 prefered;
-	__be32 reserved2;
-	struct in6_addr prefix;
+struct multi_transaction {
+	struct kref count;
+	ssize_t size;
+	char data[0];
 };
 
-enum nfs_opnum4 {
-	OP_ACCESS = 3,
-	OP_CLOSE = 4,
-	OP_COMMIT = 5,
-	OP_CREATE = 6,
-	OP_DELEGPURGE = 7,
-	OP_DELEGRETURN = 8,
-	OP_GETATTR = 9,
-	OP_GETFH = 10,
-	OP_LINK = 11,
-	OP_LOCK = 12,
-	OP_LOCKT = 13,
-	OP_LOCKU = 14,
-	OP_LOOKUP = 15,
-	OP_LOOKUPP = 16,
-	OP_NVERIFY = 17,
-	OP_OPEN = 18,
-	OP_OPENATTR = 19,
-	OP_OPEN_CONFIRM = 20,
-	OP_OPEN_DOWNGRADE = 21,
-	OP_PUTFH = 22,
-	OP_PUTPUBFH = 23,
-	OP_PUTROOTFH = 24,
-	OP_READ = 25,
-	OP_READDIR = 26,
-	OP_READLINK = 27,
-	OP_REMOVE = 28,
-	OP_RENAME = 29,
-	OP_RENEW = 30,
-	OP_RESTOREFH = 31,
-	OP_SAVEFH = 32,
-	OP_SECINFO = 33,
-	OP_SETATTR = 34,
-	OP_SETCLIENTID = 35,
-	OP_SETCLIENTID_CONFIRM = 36,
-	OP_VERIFY = 37,
-	OP_WRITE = 38,
-	OP_RELEASE_LOCKOWNER = 39,
-	OP_BACKCHANNEL_CTL = 40,
-	OP_BIND_CONN_TO_SESSION = 41,
-	OP_EXCHANGE_ID = 42,
-	OP_CREATE_SESSION = 43,
-	OP_DESTROY_SESSION = 44,
-	OP_FREE_STATEID = 45,
-	OP_GET_DIR_DELEGATION = 46,
-	OP_GETDEVICEINFO = 47,
-	OP_GETDEVICELIST = 48,
-	OP_LAYOUTCOMMIT = 49,
-	OP_LAYOUTGET = 50,
-	OP_LAYOUTRETURN = 51,
-	OP_SECINFO_NO_NAME = 52,
-	OP_SEQUENCE = 53,
-	OP_SET_SSV = 54,
-	OP_TEST_STATEID = 55,
-	OP_WANT_DELEGATION = 56,
-	OP_DESTROY_CLIENTID = 57,
-	OP_RECLAIM_COMPLETE = 58,
-	OP_ALLOCATE = 59,
-	OP_COPY = 60,
-	OP_COPY_NOTIFY = 61,
-	OP_DEALLOCATE = 62,
-	OP_IO_ADVISE = 63,
-	OP_LAYOUTERROR = 64,
-	OP_LAYOUTSTATS = 65,
-	OP_OFFLOAD_CANCEL = 66,
-	OP_OFFLOAD_STATUS = 67,
-	OP_READ_PLUS = 68,
-	OP_SEEK = 69,
-	OP_WRITE_SAME = 70,
-	OP_CLONE = 71,
-	OP_GETXATTR = 72,
-	OP_SETXATTR = 73,
-	OP_LISTXATTRS = 74,
-	OP_REMOVEXATTR = 75,
-	OP_ILLEGAL = 10044,
+struct apparmor_audit_data {
+	int error;
+	int type;
+	u16 class;
+	const char *op;
+	struct aa_label *label;
+	const char *name;
+	const char *info;
+	u32 request;
+	u32 denied;
+	union {
+		struct {
+			struct aa_label *peer;
+			union {
+				struct {
+					const char *target;
+					kuid_t ouid;
+				} fs;
+				struct {
+					int rlim;
+					long unsigned int max;
+				} rlim;
+				struct {
+					int signal;
+					int unmappedsig;
+				};
+				struct {
+					int type;
+					int protocol;
+					struct sock *peer_sk;
+					void *addr;
+					int addrlen;
+				} net;
+			};
+		};
+		struct {
+			struct aa_profile *profile;
+			const char *ns;
+			long int pos;
+		} iface;
+		struct {
+			const char *src_name;
+			const char *type;
+			const char *trans;
+			const char *data;
+			long unsigned int flags;
+		} mnt;
+	};
 };
 
-enum perf_branch_sample_type_shift {
-	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
-	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
-	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
-	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
-	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
-	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
-	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
-	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
-	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
-	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
-	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
-	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
-	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
-	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
-	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
-	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
-	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
-	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
-};
-
-struct uuidcmp {
-	const char *uuid;
-	int len;
-};
-
-typedef __u64 __le64;
-
-struct minix_super_block {
-	__u16 s_ninodes;
-	__u16 s_nzones;
-	__u16 s_imap_blocks;
-	__u16 s_zmap_blocks;
-	__u16 s_firstdatazone;
-	__u16 s_log_zone_size;
-	__u32 s_max_size;
-	__u16 s_magic;
-	__u16 s_state;
-	__u32 s_zones;
-};
-
-struct romfs_super_block {
-	__be32 word0;
-	__be32 word1;
-	__be32 size;
-	__be32 checksum;
+struct counted_str {
+	struct kref count;
 	char name[0];
 };
 
-struct cramfs_inode {
-	__u32 mode: 16;
-	__u32 uid: 16;
-	__u32 size: 24;
-	__u32 gid: 8;
-	__u32 namelen: 6;
-	__u32 offset: 26;
+enum audit_type {
+	AUDIT_APPARMOR_AUDIT = 0,
+	AUDIT_APPARMOR_ALLOWED = 1,
+	AUDIT_APPARMOR_DENIED = 2,
+	AUDIT_APPARMOR_HINT = 3,
+	AUDIT_APPARMOR_STATUS = 4,
+	AUDIT_APPARMOR_ERROR = 5,
+	AUDIT_APPARMOR_KILL = 6,
+	AUDIT_APPARMOR_AUTO = 7,
 };
 
-struct cramfs_info {
-	__u32 crc;
-	__u32 edition;
-	__u32 blocks;
-	__u32 files;
+struct ZSTD_CCtx_s;
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+
+typedef enum {
+	ZSTD_fast = 1,
+	ZSTD_dfast = 2,
+	ZSTD_greedy = 3,
+	ZSTD_lazy = 4,
+	ZSTD_lazy2 = 5,
+	ZSTD_btlazy2 = 6,
+	ZSTD_btopt = 7,
+	ZSTD_btultra = 8,
+	ZSTD_btultra2 = 9,
+} ZSTD_strategy;
+
+typedef struct {
+	unsigned int windowLog;
+	unsigned int chainLog;
+	unsigned int hashLog;
+	unsigned int searchLog;
+	unsigned int minMatch;
+	unsigned int targetLength;
+	ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+typedef struct {
+	int contentSizeFlag;
+	int checksumFlag;
+	int noDictIDFlag;
+} ZSTD_frameParameters;
+
+typedef struct {
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_CCtx zstd_cctx;
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head *next;
 };
 
-struct cramfs_super {
-	__u32 magic;
-	__u32 size;
-	__u32 flags;
-	__u32 future;
-	__u8 signature[16];
-	struct cramfs_info fsid;
-	__u8 name[16];
-	struct cramfs_inode root;
+enum path_flags {
+	PATH_IS_DIR = 1,
+	PATH_CONNECT_PATH = 4,
+	PATH_CHROOT_REL = 8,
+	PATH_CHROOT_NSCONNECT = 16,
+	PATH_DELEGATE_DELETED = 65536,
+	PATH_MEDIATE_DELETED = 131072,
 };
 
-struct squashfs_super_block {
-	__le32 s_magic;
-	__le32 inodes;
-	__le32 mkfs_time;
-	__le32 block_size;
-	__le32 fragments;
-	__le16 compression;
-	__le16 block_log;
-	__le16 flags;
-	__le16 no_ids;
-	__le16 s_major;
-	__le16 s_minor;
-	__le64 root_inode;
-	__le64 bytes_used;
-	__le64 id_table_start;
-	__le64 xattr_id_table_start;
-	__le64 inode_table_start;
-	__le64 directory_table_start;
-	__le64 fragment_table_start;
-	__le64 lookup_table_start;
-};
-
-typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
-
-struct subprocess_info {
-	struct work_struct work;
-	struct completion *complete;
-	const char *path;
-	char **argv;
-	char **envp;
-	int wait;
-	int retval;
-	int (*init)(struct subprocess_info *, struct cred *);
-	void (*cleanup)(struct subprocess_info *);
-	void *data;
-};
-
-typedef phys_addr_t resource_size_t;
-
-struct resource {
-	resource_size_t start;
-	resource_size_t end;
-	const char *name;
-	long unsigned int flags;
-	long unsigned int desc;
-	struct resource *parent;
-	struct resource *sibling;
-	struct resource *child;
-};
-
-struct hash {
-	int ino;
-	int minor;
-	int major;
-	umode_t mode;
-	struct hash *next;
-	char name[4098];
-};
-
-struct dir_entry {
+struct aa_load_ent {
 	struct list_head list;
-	char *name;
-	time64_t mtime;
+	struct aa_profile *new;
+	struct aa_profile *old;
+	struct aa_profile *rename;
+	const char *ns_name;
 };
 
-enum state {
-	Start = 0,
-	Collect = 1,
-	GotHeader = 2,
-	SkipIt = 3,
-	GotName = 4,
-	CopyFile = 5,
-	GotSymlink = 6,
-	Reset = 7,
+enum aa_code {
+	AA_U8 = 0,
+	AA_U16 = 1,
+	AA_U32 = 2,
+	AA_U64 = 3,
+	AA_NAME = 4,
+	AA_STRING = 5,
+	AA_BLOB = 6,
+	AA_STRUCT = 7,
+	AA_STRUCTEND = 8,
+	AA_LIST = 9,
+	AA_LISTEND = 10,
+	AA_ARRAY = 11,
+	AA_ARRAYEND = 12,
 };
 
-enum migratetype {
-	MIGRATE_UNMOVABLE = 0,
-	MIGRATE_MOVABLE = 1,
-	MIGRATE_RECLAIMABLE = 2,
-	MIGRATE_PCPTYPES = 3,
-	MIGRATE_HIGHATOMIC = 3,
-	MIGRATE_CMA = 4,
-	MIGRATE_ISOLATE = 5,
-	MIGRATE_TYPES = 6,
+struct aa_ext {
+	void *start;
+	void *end;
+	void *pos;
+	u32 version;
 };
 
-enum numa_stat_item {
-	NUMA_HIT = 0,
-	NUMA_MISS = 1,
-	NUMA_FOREIGN = 2,
-	NUMA_INTERLEAVE_HIT = 3,
-	NUMA_LOCAL = 4,
-	NUMA_OTHER = 5,
-	NR_VM_NUMA_STAT_ITEMS = 6,
+struct xa_limit {
+	u32 max;
+	u32 min;
 };
 
-enum zone_stat_item {
-	NR_FREE_PAGES = 0,
-	NR_ZONE_LRU_BASE = 1,
-	NR_ZONE_INACTIVE_ANON = 1,
-	NR_ZONE_ACTIVE_ANON = 2,
-	NR_ZONE_INACTIVE_FILE = 3,
-	NR_ZONE_ACTIVE_FILE = 4,
-	NR_ZONE_UNEVICTABLE = 5,
-	NR_ZONE_WRITE_PENDING = 6,
-	NR_MLOCK = 7,
-	NR_PAGETABLE = 8,
-	NR_BOUNCE = 9,
-	NR_ZSPAGES = 10,
-	NR_FREE_CMA_PAGES = 11,
-	NR_VM_ZONE_STAT_ITEMS = 12,
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
 };
 
-enum zone_watermarks {
-	WMARK_MIN = 0,
-	WMARK_LOW = 1,
-	WMARK_HIGH = 2,
-	NR_WMARK = 3,
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	unsigned int descsize;
+	int: 32;
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
 };
 
-enum {
-	ZONELIST_FALLBACK = 0,
-	ZONELIST_NOFALLBACK = 1,
-	MAX_ZONELISTS = 2,
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	void *__ctx[0];
 };
 
-enum {
-	DQF_ROOT_SQUASH_B = 0,
-	DQF_SYS_FILE_B = 16,
-	DQF_PRIVATE = 17,
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
 };
 
-enum {
-	DQST_LOOKUPS = 0,
-	DQST_DROPS = 1,
-	DQST_READS = 2,
-	DQST_WRITES = 3,
-	DQST_CACHE_HITS = 4,
-	DQST_ALLOC_DQUOTS = 5,
-	DQST_FREE_DQUOTS = 6,
-	DQST_SYNCS = 7,
-	_DQST_DQSTAT_LAST = 8,
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
 };
 
-enum {
-	SB_UNFROZEN = 0,
-	SB_FREEZE_WRITE = 1,
-	SB_FREEZE_PAGEFAULT = 2,
-	SB_FREEZE_FS = 3,
-	SB_FREEZE_COMPLETE = 4,
+struct crypto_cipher {
+	struct crypto_tfm base;
 };
 
-enum compound_dtor_id {
-	NULL_COMPOUND_DTOR = 0,
-	COMPOUND_PAGE_DTOR = 1,
-	HUGETLB_PAGE_DTOR = 2,
-	TRANSHUGE_PAGE_DTOR = 3,
-	NR_COMPOUND_DTORS = 4,
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	void *__ctx[0];
 };
 
-enum {
-	TSK_TRACE_FL_TRACE_BIT = 0,
-	TSK_TRACE_FL_GRAPH_BIT = 1,
+struct crypto_aead;
+
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	struct crypto_alg base;
 };
 
-enum ucount_type {
-	UCOUNT_USER_NAMESPACES = 0,
-	UCOUNT_PID_NAMESPACES = 1,
-	UCOUNT_UTS_NAMESPACES = 2,
-	UCOUNT_IPC_NAMESPACES = 3,
-	UCOUNT_NET_NAMESPACES = 4,
-	UCOUNT_MNT_NAMESPACES = 5,
-	UCOUNT_CGROUP_NAMESPACES = 6,
-	UCOUNT_TIME_NAMESPACES = 7,
-	UCOUNT_INOTIFY_INSTANCES = 8,
-	UCOUNT_INOTIFY_WATCHES = 9,
-	UCOUNT_COUNTS = 10,
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
 };
 
-enum flow_dissector_key_id {
-	FLOW_DISSECTOR_KEY_CONTROL = 0,
-	FLOW_DISSECTOR_KEY_BASIC = 1,
-	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
-	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
-	FLOW_DISSECTOR_KEY_PORTS = 4,
-	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
-	FLOW_DISSECTOR_KEY_ICMP = 6,
-	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
-	FLOW_DISSECTOR_KEY_TIPC = 8,
-	FLOW_DISSECTOR_KEY_ARP = 9,
-	FLOW_DISSECTOR_KEY_VLAN = 10,
-	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
-	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
-	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
-	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
-	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
-	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
-	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
-	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
-	FLOW_DISSECTOR_KEY_MPLS = 19,
-	FLOW_DISSECTOR_KEY_TCP = 20,
-	FLOW_DISSECTOR_KEY_IP = 21,
-	FLOW_DISSECTOR_KEY_CVLAN = 22,
-	FLOW_DISSECTOR_KEY_ENC_IP = 23,
-	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
-	FLOW_DISSECTOR_KEY_META = 25,
-	FLOW_DISSECTOR_KEY_CT = 26,
-	FLOW_DISSECTOR_KEY_HASH = 27,
-	FLOW_DISSECTOR_KEY_MAX = 28,
+struct rtattr {
+	short unsigned int rta_len;
+	short unsigned int rta_type;
 };
 
-enum {
-	IPSTATS_MIB_NUM = 0,
-	IPSTATS_MIB_INPKTS = 1,
-	IPSTATS_MIB_INOCTETS = 2,
-	IPSTATS_MIB_INDELIVERS = 3,
-	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
-	IPSTATS_MIB_OUTPKTS = 5,
-	IPSTATS_MIB_OUTOCTETS = 6,
-	IPSTATS_MIB_INHDRERRORS = 7,
-	IPSTATS_MIB_INTOOBIGERRORS = 8,
-	IPSTATS_MIB_INNOROUTES = 9,
-	IPSTATS_MIB_INADDRERRORS = 10,
-	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
-	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
-	IPSTATS_MIB_INDISCARDS = 13,
-	IPSTATS_MIB_OUTDISCARDS = 14,
-	IPSTATS_MIB_OUTNOROUTES = 15,
-	IPSTATS_MIB_REASMTIMEOUT = 16,
-	IPSTATS_MIB_REASMREQDS = 17,
-	IPSTATS_MIB_REASMOKS = 18,
-	IPSTATS_MIB_REASMFAILS = 19,
-	IPSTATS_MIB_FRAGOKS = 20,
-	IPSTATS_MIB_FRAGFAILS = 21,
-	IPSTATS_MIB_FRAGCREATES = 22,
-	IPSTATS_MIB_INMCASTPKTS = 23,
-	IPSTATS_MIB_OUTMCASTPKTS = 24,
-	IPSTATS_MIB_INBCASTPKTS = 25,
-	IPSTATS_MIB_OUTBCASTPKTS = 26,
-	IPSTATS_MIB_INMCASTOCTETS = 27,
-	IPSTATS_MIB_OUTMCASTOCTETS = 28,
-	IPSTATS_MIB_INBCASTOCTETS = 29,
-	IPSTATS_MIB_OUTBCASTOCTETS = 30,
-	IPSTATS_MIB_CSUMERRORS = 31,
-	IPSTATS_MIB_NOECTPKTS = 32,
-	IPSTATS_MIB_ECT1PKTS = 33,
-	IPSTATS_MIB_ECT0PKTS = 34,
-	IPSTATS_MIB_CEPKTS = 35,
-	IPSTATS_MIB_REASM_OVERLAPS = 36,
-	__IPSTATS_MIB_MAX = 37,
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
 };
 
-enum {
-	ICMP_MIB_NUM = 0,
-	ICMP_MIB_INMSGS = 1,
-	ICMP_MIB_INERRORS = 2,
-	ICMP_MIB_INDESTUNREACHS = 3,
-	ICMP_MIB_INTIMEEXCDS = 4,
-	ICMP_MIB_INPARMPROBS = 5,
-	ICMP_MIB_INSRCQUENCHS = 6,
-	ICMP_MIB_INREDIRECTS = 7,
-	ICMP_MIB_INECHOS = 8,
-	ICMP_MIB_INECHOREPS = 9,
-	ICMP_MIB_INTIMESTAMPS = 10,
-	ICMP_MIB_INTIMESTAMPREPS = 11,
-	ICMP_MIB_INADDRMASKS = 12,
-	ICMP_MIB_INADDRMASKREPS = 13,
-	ICMP_MIB_OUTMSGS = 14,
-	ICMP_MIB_OUTERRORS = 15,
-	ICMP_MIB_OUTDESTUNREACHS = 16,
-	ICMP_MIB_OUTTIMEEXCDS = 17,
-	ICMP_MIB_OUTPARMPROBS = 18,
-	ICMP_MIB_OUTSRCQUENCHS = 19,
-	ICMP_MIB_OUTREDIRECTS = 20,
-	ICMP_MIB_OUTECHOS = 21,
-	ICMP_MIB_OUTECHOREPS = 22,
-	ICMP_MIB_OUTTIMESTAMPS = 23,
-	ICMP_MIB_OUTTIMESTAMPREPS = 24,
-	ICMP_MIB_OUTADDRMASKS = 25,
-	ICMP_MIB_OUTADDRMASKREPS = 26,
-	ICMP_MIB_CSUMERRORS = 27,
-	__ICMP_MIB_MAX = 28,
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
 };
 
-enum {
-	ICMP6_MIB_NUM = 0,
-	ICMP6_MIB_INMSGS = 1,
-	ICMP6_MIB_INERRORS = 2,
-	ICMP6_MIB_OUTMSGS = 3,
-	ICMP6_MIB_OUTERRORS = 4,
-	ICMP6_MIB_CSUMERRORS = 5,
-	__ICMP6_MIB_MAX = 6,
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
 };
 
-enum {
-	TCP_MIB_NUM = 0,
-	TCP_MIB_RTOALGORITHM = 1,
-	TCP_MIB_RTOMIN = 2,
-	TCP_MIB_RTOMAX = 3,
-	TCP_MIB_MAXCONN = 4,
-	TCP_MIB_ACTIVEOPENS = 5,
-	TCP_MIB_PASSIVEOPENS = 6,
-	TCP_MIB_ATTEMPTFAILS = 7,
-	TCP_MIB_ESTABRESETS = 8,
-	TCP_MIB_CURRESTAB = 9,
-	TCP_MIB_INSEGS = 10,
-	TCP_MIB_OUTSEGS = 11,
-	TCP_MIB_RETRANSSEGS = 12,
-	TCP_MIB_INERRS = 13,
-	TCP_MIB_OUTRSTS = 14,
-	TCP_MIB_CSUMERRORS = 15,
-	__TCP_MIB_MAX = 16,
-};
-
-enum {
-	UDP_MIB_NUM = 0,
-	UDP_MIB_INDATAGRAMS = 1,
-	UDP_MIB_NOPORTS = 2,
-	UDP_MIB_INERRORS = 3,
-	UDP_MIB_OUTDATAGRAMS = 4,
-	UDP_MIB_RCVBUFERRORS = 5,
-	UDP_MIB_SNDBUFERRORS = 6,
-	UDP_MIB_CSUMERRORS = 7,
-	UDP_MIB_IGNOREDMULTI = 8,
-	__UDP_MIB_MAX = 9,
-};
-
-enum {
-	LINUX_MIB_NUM = 0,
-	LINUX_MIB_SYNCOOKIESSENT = 1,
-	LINUX_MIB_SYNCOOKIESRECV = 2,
-	LINUX_MIB_SYNCOOKIESFAILED = 3,
-	LINUX_MIB_EMBRYONICRSTS = 4,
-	LINUX_MIB_PRUNECALLED = 5,
-	LINUX_MIB_RCVPRUNED = 6,
-	LINUX_MIB_OFOPRUNED = 7,
-	LINUX_MIB_OUTOFWINDOWICMPS = 8,
-	LINUX_MIB_LOCKDROPPEDICMPS = 9,
-	LINUX_MIB_ARPFILTER = 10,
-	LINUX_MIB_TIMEWAITED = 11,
-	LINUX_MIB_TIMEWAITRECYCLED = 12,
-	LINUX_MIB_TIMEWAITKILLED = 13,
-	LINUX_MIB_PAWSACTIVEREJECTED = 14,
-	LINUX_MIB_PAWSESTABREJECTED = 15,
-	LINUX_MIB_DELAYEDACKS = 16,
-	LINUX_MIB_DELAYEDACKLOCKED = 17,
-	LINUX_MIB_DELAYEDACKLOST = 18,
-	LINUX_MIB_LISTENOVERFLOWS = 19,
-	LINUX_MIB_LISTENDROPS = 20,
-	LINUX_MIB_TCPHPHITS = 21,
-	LINUX_MIB_TCPPUREACKS = 22,
-	LINUX_MIB_TCPHPACKS = 23,
-	LINUX_MIB_TCPRENORECOVERY = 24,
-	LINUX_MIB_TCPSACKRECOVERY = 25,
-	LINUX_MIB_TCPSACKRENEGING = 26,
-	LINUX_MIB_TCPSACKREORDER = 27,
-	LINUX_MIB_TCPRENOREORDER = 28,
-	LINUX_MIB_TCPTSREORDER = 29,
-	LINUX_MIB_TCPFULLUNDO = 30,
-	LINUX_MIB_TCPPARTIALUNDO = 31,
-	LINUX_MIB_TCPDSACKUNDO = 32,
-	LINUX_MIB_TCPLOSSUNDO = 33,
-	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
-	LINUX_MIB_TCPRENOFAILURES = 35,
-	LINUX_MIB_TCPSACKFAILURES = 36,
-	LINUX_MIB_TCPLOSSFAILURES = 37,
-	LINUX_MIB_TCPFASTRETRANS = 38,
-	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
-	LINUX_MIB_TCPTIMEOUTS = 40,
-	LINUX_MIB_TCPLOSSPROBES = 41,
-	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
-	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
-	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
-	LINUX_MIB_TCPRCVCOLLAPSED = 45,
-	LINUX_MIB_TCPDSACKOLDSENT = 46,
-	LINUX_MIB_TCPDSACKOFOSENT = 47,
-	LINUX_MIB_TCPDSACKRECV = 48,
-	LINUX_MIB_TCPDSACKOFORECV = 49,
-	LINUX_MIB_TCPABORTONDATA = 50,
-	LINUX_MIB_TCPABORTONCLOSE = 51,
-	LINUX_MIB_TCPABORTONMEMORY = 52,
-	LINUX_MIB_TCPABORTONTIMEOUT = 53,
-	LINUX_MIB_TCPABORTONLINGER = 54,
-	LINUX_MIB_TCPABORTFAILED = 55,
-	LINUX_MIB_TCPMEMORYPRESSURES = 56,
-	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
-	LINUX_MIB_TCPSACKDISCARD = 58,
-	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
-	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
-	LINUX_MIB_TCPSPURIOUSRTOS = 61,
-	LINUX_MIB_TCPMD5NOTFOUND = 62,
-	LINUX_MIB_TCPMD5UNEXPECTED = 63,
-	LINUX_MIB_TCPMD5FAILURE = 64,
-	LINUX_MIB_SACKSHIFTED = 65,
-	LINUX_MIB_SACKMERGED = 66,
-	LINUX_MIB_SACKSHIFTFALLBACK = 67,
-	LINUX_MIB_TCPBACKLOGDROP = 68,
-	LINUX_MIB_PFMEMALLOCDROP = 69,
-	LINUX_MIB_TCPMINTTLDROP = 70,
-	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
-	LINUX_MIB_IPRPFILTER = 72,
-	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
-	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
-	LINUX_MIB_TCPREQQFULLDROP = 75,
-	LINUX_MIB_TCPRETRANSFAIL = 76,
-	LINUX_MIB_TCPRCVCOALESCE = 77,
-	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
-	LINUX_MIB_TCPOFOQUEUE = 79,
-	LINUX_MIB_TCPOFODROP = 80,
-	LINUX_MIB_TCPOFOMERGE = 81,
-	LINUX_MIB_TCPCHALLENGEACK = 82,
-	LINUX_MIB_TCPSYNCHALLENGE = 83,
-	LINUX_MIB_TCPFASTOPENACTIVE = 84,
-	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
-	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
-	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
-	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
-	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
-	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
-	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
-	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
-	LINUX_MIB_TCPAUTOCORKING = 93,
-	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
-	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
-	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
-	LINUX_MIB_TCPSYNRETRANS = 97,
-	LINUX_MIB_TCPORIGDATASENT = 98,
-	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
-	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
-	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
-	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
-	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
-	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
-	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
-	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
-	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
-	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
-	LINUX_MIB_TCPWINPROBE = 109,
-	LINUX_MIB_TCPKEEPALIVE = 110,
-	LINUX_MIB_TCPMTUPFAIL = 111,
-	LINUX_MIB_TCPMTUPSUCCESS = 112,
-	LINUX_MIB_TCPDELIVERED = 113,
-	LINUX_MIB_TCPDELIVEREDCE = 114,
-	LINUX_MIB_TCPACKCOMPRESSED = 115,
-	LINUX_MIB_TCPZEROWINDOWDROP = 116,
-	LINUX_MIB_TCPRCVQDROP = 117,
-	LINUX_MIB_TCPWQUEUETOOBIG = 118,
-	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
-	LINUX_MIB_TCPTIMEOUTREHASH = 120,
-	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
-	LINUX_MIB_TCPDSACKRECVSEGS = 122,
-	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
-	__LINUX_MIB_MAX = 124,
-};
-
-enum {
-	LINUX_MIB_XFRMNUM = 0,
-	LINUX_MIB_XFRMINERROR = 1,
-	LINUX_MIB_XFRMINBUFFERERROR = 2,
-	LINUX_MIB_XFRMINHDRERROR = 3,
-	LINUX_MIB_XFRMINNOSTATES = 4,
-	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
-	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
-	LINUX_MIB_XFRMINSTATESEQERROR = 7,
-	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
-	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
-	LINUX_MIB_XFRMINSTATEINVALID = 10,
-	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
-	LINUX_MIB_XFRMINNOPOLS = 12,
-	LINUX_MIB_XFRMINPOLBLOCK = 13,
-	LINUX_MIB_XFRMINPOLERROR = 14,
-	LINUX_MIB_XFRMOUTERROR = 15,
-	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
-	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
-	LINUX_MIB_XFRMOUTNOSTATES = 18,
-	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
-	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
-	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
-	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
-	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
-	LINUX_MIB_XFRMOUTPOLDEAD = 24,
-	LINUX_MIB_XFRMOUTPOLERROR = 25,
-	LINUX_MIB_XFRMFWDHDRERROR = 26,
-	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
-	LINUX_MIB_XFRMACQUIREERROR = 28,
-	__LINUX_MIB_XFRMMAX = 29,
-};
-
-enum {
-	LINUX_MIB_TLSNUM = 0,
-	LINUX_MIB_TLSCURRTXSW = 1,
-	LINUX_MIB_TLSCURRRXSW = 2,
-	LINUX_MIB_TLSCURRTXDEVICE = 3,
-	LINUX_MIB_TLSCURRRXDEVICE = 4,
-	LINUX_MIB_TLSTXSW = 5,
-	LINUX_MIB_TLSRXSW = 6,
-	LINUX_MIB_TLSTXDEVICE = 7,
-	LINUX_MIB_TLSRXDEVICE = 8,
-	LINUX_MIB_TLSDECRYPTERROR = 9,
-	LINUX_MIB_TLSRXDEVICERESYNC = 10,
-	__LINUX_MIB_TLSMAX = 11,
-};
-
-enum nf_inet_hooks {
-	NF_INET_PRE_ROUTING = 0,
-	NF_INET_LOCAL_IN = 1,
-	NF_INET_FORWARD = 2,
-	NF_INET_LOCAL_OUT = 3,
-	NF_INET_POST_ROUTING = 4,
-	NF_INET_NUMHOOKS = 5,
-	NF_INET_INGRESS = 5,
-};
-
-enum {
-	NFPROTO_UNSPEC = 0,
-	NFPROTO_INET = 1,
-	NFPROTO_IPV4 = 2,
-	NFPROTO_ARP = 3,
-	NFPROTO_NETDEV = 5,
-	NFPROTO_BRIDGE = 7,
-	NFPROTO_IPV6 = 10,
-	NFPROTO_DECNET = 12,
-	NFPROTO_NUMPROTO = 13,
-};
-
-enum tcp_conntrack {
-	TCP_CONNTRACK_NONE = 0,
-	TCP_CONNTRACK_SYN_SENT = 1,
-	TCP_CONNTRACK_SYN_RECV = 2,
-	TCP_CONNTRACK_ESTABLISHED = 3,
-	TCP_CONNTRACK_FIN_WAIT = 4,
-	TCP_CONNTRACK_CLOSE_WAIT = 5,
-	TCP_CONNTRACK_LAST_ACK = 6,
-	TCP_CONNTRACK_TIME_WAIT = 7,
-	TCP_CONNTRACK_CLOSE = 8,
-	TCP_CONNTRACK_LISTEN = 9,
-	TCP_CONNTRACK_MAX = 10,
-	TCP_CONNTRACK_IGNORE = 11,
-	TCP_CONNTRACK_RETRANS = 12,
-	TCP_CONNTRACK_UNACK = 13,
-	TCP_CONNTRACK_TIMEOUT_MAX = 14,
-};
-
-enum ct_dccp_states {
-	CT_DCCP_NONE = 0,
-	CT_DCCP_REQUEST = 1,
-	CT_DCCP_RESPOND = 2,
-	CT_DCCP_PARTOPEN = 3,
-	CT_DCCP_OPEN = 4,
-	CT_DCCP_CLOSEREQ = 5,
-	CT_DCCP_CLOSING = 6,
-	CT_DCCP_TIMEWAIT = 7,
-	CT_DCCP_IGNORE = 8,
-	CT_DCCP_INVALID = 9,
-	__CT_DCCP_MAX = 10,
-};
-
-enum ip_conntrack_dir {
-	IP_CT_DIR_ORIGINAL = 0,
-	IP_CT_DIR_REPLY = 1,
-	IP_CT_DIR_MAX = 2,
-};
-
-enum sctp_conntrack {
-	SCTP_CONNTRACK_NONE = 0,
-	SCTP_CONNTRACK_CLOSED = 1,
-	SCTP_CONNTRACK_COOKIE_WAIT = 2,
-	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
-	SCTP_CONNTRACK_ESTABLISHED = 4,
-	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
-	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
-	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
-	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
-	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
-	SCTP_CONNTRACK_MAX = 10,
-};
-
-enum udp_conntrack {
-	UDP_CT_UNREPLIED = 0,
-	UDP_CT_REPLIED = 1,
-	UDP_CT_MAX = 2,
-};
-
-enum gre_conntrack {
-	GRE_CT_UNREPLIED = 0,
-	GRE_CT_REPLIED = 1,
-	GRE_CT_MAX = 2,
-};
-
-enum {
-	XFRM_POLICY_IN = 0,
-	XFRM_POLICY_OUT = 1,
-	XFRM_POLICY_FWD = 2,
-	XFRM_POLICY_MASK = 3,
-	XFRM_POLICY_MAX = 3,
-};
-
-enum netns_bpf_attach_type {
-	NETNS_BPF_INVALID = 4294967295,
-	NETNS_BPF_FLOW_DISSECTOR = 0,
-	NETNS_BPF_SK_LOOKUP = 1,
-	MAX_NETNS_BPF_ATTACH_TYPE = 2,
-};
-
-enum cpu_idle_type {
-	CPU_IDLE = 0,
-	CPU_NOT_IDLE = 1,
-	CPU_NEWLY_IDLE = 2,
-	CPU_MAX_IDLE_TYPES = 3,
-};
-
-enum {
-	__SD_BALANCE_NEWIDLE = 0,
-	__SD_BALANCE_EXEC = 1,
-	__SD_BALANCE_FORK = 2,
-	__SD_BALANCE_WAKE = 3,
-	__SD_WAKE_AFFINE = 4,
-	__SD_ASYM_CPUCAPACITY = 5,
-	__SD_SHARE_CPUCAPACITY = 6,
-	__SD_SHARE_PKG_RESOURCES = 7,
-	__SD_SERIALIZE = 8,
-	__SD_ASYM_PACKING = 9,
-	__SD_PREFER_SIBLING = 10,
-	__SD_OVERLAP = 11,
-	__SD_NUMA = 12,
-	__SD_FLAG_CNT = 13,
-};
-
-enum skb_ext_id {
-	SKB_EXT_BRIDGE_NF = 0,
-	SKB_EXT_SEC_PATH = 1,
-	TC_SKB_EXT = 2,
-	SKB_EXT_MPTCP = 3,
-	SKB_EXT_NUM = 4,
-};
-
-enum audit_ntp_type {
-	AUDIT_NTP_OFFSET = 0,
-	AUDIT_NTP_FREQ = 1,
-	AUDIT_NTP_STATUS = 2,
-	AUDIT_NTP_TAI = 3,
-	AUDIT_NTP_TICK = 4,
-	AUDIT_NTP_ADJUST = 5,
-	AUDIT_NTP_NVALS = 6,
-};
-
-typedef long unsigned int uintptr_t;
-
-struct step_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-};
-
-struct break_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-	u16 imm;
-	u16 mask;
-};
-
-enum dbg_active_el {
-	DBG_ACTIVE_EL0 = 0,
-	DBG_ACTIVE_EL1 = 1,
-};
-
-struct nmi_ctx {
-	u64 hcr;
-	unsigned int cnt;
-};
-
-enum {
-	HI_SOFTIRQ = 0,
-	TIMER_SOFTIRQ = 1,
-	NET_TX_SOFTIRQ = 2,
-	NET_RX_SOFTIRQ = 3,
-	BLOCK_SOFTIRQ = 4,
-	IRQ_POLL_SOFTIRQ = 5,
-	TASKLET_SOFTIRQ = 6,
-	SCHED_SOFTIRQ = 7,
-	HRTIMER_SOFTIRQ = 8,
-	RCU_SOFTIRQ = 9,
-	NR_SOFTIRQS = 10,
-};
-
-struct midr_range {
-	u32 model;
-	u32 rv_min;
-	u32 rv_max;
-};
-
-struct arm64_midr_revidr {
-	u32 midr_rv;
-	u32 revidr_mask;
-};
-
-struct arm64_cpu_capabilities {
-	const char *desc;
-	u16 capability;
-	u16 type;
-	bool (*matches)(const struct arm64_cpu_capabilities *, int);
-	void (*cpu_enable)(const struct arm64_cpu_capabilities *);
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
 	union {
 		struct {
-			struct midr_range midr_range;
-			const struct arm64_midr_revidr * const fixed_revs;
-		};
-		const struct midr_range *midr_range_list;
-		struct {
-			u32 sys_reg;
-			u8 field_pos;
-			u8 min_field_value;
-			u8 hwcap_type;
-			bool sign;
-			long unsigned int hwcap;
-		};
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
 	};
-	const struct arm64_cpu_capabilities *match_list;
 };
 
-enum cpu_pm_event {
-	CPU_PM_ENTER = 0,
-	CPU_PM_ENTER_FAILED = 1,
-	CPU_PM_EXIT = 2,
-	CPU_CLUSTER_PM_ENTER = 3,
-	CPU_CLUSTER_PM_ENTER_FAILED = 4,
-	CPU_CLUSTER_PM_EXIT = 5,
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
 };
 
-struct fpsimd_last_state_struct {
-	struct user_fpsimd_state *st;
-	void *sve_state;
-	unsigned int sve_vl;
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
 };
 
-enum ctx_state {
-	CONTEXT_DISABLED = 4294967295,
-	CONTEXT_KERNEL = 0,
-	CONTEXT_USER = 1,
-	CONTEXT_GUEST = 2,
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
 };
 
-typedef void (*bp_hardening_cb_t)();
-
-struct bp_hardening_data {
-	int hyp_vectors_slot;
-	bp_hardening_cb_t fn;
+enum crypto_attr_type_t {
+	CRYPTOCFGA_UNSPEC = 0,
+	CRYPTOCFGA_PRIORITY_VAL = 1,
+	CRYPTOCFGA_REPORT_LARVAL = 2,
+	CRYPTOCFGA_REPORT_HASH = 3,
+	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
+	CRYPTOCFGA_REPORT_AEAD = 5,
+	CRYPTOCFGA_REPORT_COMPRESS = 6,
+	CRYPTOCFGA_REPORT_RNG = 7,
+	CRYPTOCFGA_REPORT_CIPHER = 8,
+	CRYPTOCFGA_REPORT_AKCIPHER = 9,
+	CRYPTOCFGA_REPORT_KPP = 10,
+	CRYPTOCFGA_REPORT_ACOMP = 11,
+	CRYPTOCFGA_STAT_LARVAL = 12,
+	CRYPTOCFGA_STAT_HASH = 13,
+	CRYPTOCFGA_STAT_BLKCIPHER = 14,
+	CRYPTOCFGA_STAT_AEAD = 15,
+	CRYPTOCFGA_STAT_COMPRESS = 16,
+	CRYPTOCFGA_STAT_RNG = 17,
+	CRYPTOCFGA_STAT_CIPHER = 18,
+	CRYPTOCFGA_STAT_AKCIPHER = 19,
+	CRYPTOCFGA_STAT_KPP = 20,
+	CRYPTOCFGA_STAT_ACOMP = 21,
+	__CRYPTOCFGA_MAX = 22,
 };
 
-enum refcount_saturation_type {
-	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
-	REFCOUNT_ADD_OVF = 1,
-	REFCOUNT_ADD_UAF = 2,
-	REFCOUNT_SUB_UAF = 3,
-	REFCOUNT_DEC_LEAK = 4,
+struct crypto_report_blkcipher {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
 };
 
-struct plist_head {
-	struct list_head node_list;
+enum {
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
+};
+
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
+};
+
+struct dh {
+	const void *key;
+	const void *p;
+	const void *g;
+	unsigned int key_size;
+	unsigned int p_size;
+	unsigned int g_size;
+};
+
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
+};
+
+struct kpp_secret {
+	short unsigned int type;
+	short unsigned int len;
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum rsapubkey_actions {
+	ACT_rsa_get_e = 0,
+	ACT_rsa_get_n = 1,
+	NR__rsapubkey_actions = 2,
+};
+
+enum rsaprivkey_actions {
+	ACT_rsa_get_d = 0,
+	ACT_rsa_get_dp = 1,
+	ACT_rsa_get_dq = 2,
+	ACT_rsa_get_e___2 = 3,
+	ACT_rsa_get_n___2 = 4,
+	ACT_rsa_get_p = 5,
+	ACT_rsa_get_q = 6,
+	ACT_rsa_get_qinv = 7,
+	NR__rsaprivkey_actions = 8,
+};
+
+typedef long unsigned int mpi_limb_t;
+
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
+};
+
+typedef struct gcry_mpi *MPI;
+
+struct rsa_key {
+	const u8 *n;
+	const u8 *e;
+	const u8 *d;
+	const u8 *p;
+	const u8 *q;
+	const u8 *dp;
+	const u8 *dq;
+	const u8 *qinv;
+	size_t n_sz;
+	size_t e_sz;
+	size_t d_sz;
+	size_t p_sz;
+	size_t q_sz;
+	size_t dp_sz;
+	size_t dq_sz;
+	size_t qinv_sz;
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	struct crypto_alg base;
+};
+
+struct rsa_mpi_key {
+	MPI n;
+	MPI e;
+	MPI d;
+	MPI p;
+	MPI q;
+	MPI dp;
+	MPI dq;
+	MPI qinv;
+};
+
+struct crypto_report_comp {
+	char type[64];
+};
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	struct crypto_alg base;
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+struct crypto_aes_ctx {
+	u32 key_enc[60];
+	u32 key_dec[60];
+	u32 key_length;
+};
+
+struct rand_data {
+	__u64 data;
+	__u64 old_data;
+	__u64 prev_time;
+	__u64 last_delta;
+	__s64 last_delta2;
+	unsigned int osr;
+	unsigned char *mem;
+	unsigned int memlocation;
+	unsigned int memblocks;
+	unsigned int memblocksize;
+	unsigned int memaccessloops;
+	int rct_count;
+	unsigned int apt_observations;
+	unsigned int apt_count;
+	unsigned int apt_base;
+	unsigned int apt_base_set: 1;
+	unsigned int health_failure: 1;
+};
+
+typedef long unsigned int cycles_t;
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct rand_data;
+
+struct jitterentropy {
+	spinlock_t jent_lock;
+	struct rand_data *entropy_collector;
+	unsigned int reset_cnt;
+};
+
+struct asymmetric_key_id;
+
+struct public_key_signature {
+	struct asymmetric_key_id *auth_ids[3];
+	u8 *s;
+	u8 *digest;
+	u32 s_size;
+	u32 digest_size;
+	const char *pkey_algo;
+	const char *hash_algo;
+	const char *encoding;
+	const void *data;
+	unsigned int data_size;
+};
+
+struct asymmetric_key_id {
+	short unsigned int len;
+	unsigned char data[0];
+};
+
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
+struct asymmetric_key_ids {
+	void *id[3];
+};
+
+enum x509_akid_actions {
+	ACT_x509_akid_note_kid = 0,
+	ACT_x509_akid_note_name = 1,
+	ACT_x509_akid_note_serial = 2,
+	ACT_x509_extract_name_segment = 3,
+	ACT_x509_note_OID = 4,
+	NR__x509_akid_actions = 5,
+};
+
+enum pkcs7_actions {
+	ACT_pkcs7_check_content_type = 0,
+	ACT_pkcs7_extract_cert = 1,
+	ACT_pkcs7_note_OID = 2,
+	ACT_pkcs7_note_certificate_list = 3,
+	ACT_pkcs7_note_content = 4,
+	ACT_pkcs7_note_data = 5,
+	ACT_pkcs7_note_signed_info = 6,
+	ACT_pkcs7_note_signeddata_version = 7,
+	ACT_pkcs7_note_signerinfo_version = 8,
+	ACT_pkcs7_sig_note_authenticated_attr = 9,
+	ACT_pkcs7_sig_note_digest_algo = 10,
+	ACT_pkcs7_sig_note_issuer = 11,
+	ACT_pkcs7_sig_note_pkey_algo = 12,
+	ACT_pkcs7_sig_note_serial = 13,
+	ACT_pkcs7_sig_note_set_of_authattrs = 14,
+	ACT_pkcs7_sig_note_signature = 15,
+	ACT_pkcs7_sig_note_skid = 16,
+	NR__pkcs7_actions = 17,
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_spnego = 40,
+	OID_IAKerb = 41,
+	OID_PKU2U = 42,
+	OID_Scram = 43,
+	OID_certAuthInfoAccess = 44,
+	OID_sha1 = 45,
+	OID_id_ansip384r1 = 46,
+	OID_sha256 = 47,
+	OID_sha384 = 48,
+	OID_sha512 = 49,
+	OID_sha224 = 50,
+	OID_commonName = 51,
+	OID_surname = 52,
+	OID_countryName = 53,
+	OID_locality = 54,
+	OID_stateOrProvinceName = 55,
+	OID_organizationName = 56,
+	OID_organizationUnitName = 57,
+	OID_title = 58,
+	OID_description = 59,
+	OID_name = 60,
+	OID_givenName = 61,
+	OID_initials = 62,
+	OID_generationalQualifier = 63,
+	OID_subjectKeyIdentifier = 64,
+	OID_keyUsage = 65,
+	OID_subjectAltName = 66,
+	OID_issuerAltName = 67,
+	OID_basicConstraints = 68,
+	OID_crlDistributionPoints = 69,
+	OID_certPolicies = 70,
+	OID_authorityKeyIdentifier = 71,
+	OID_extKeyUsage = 72,
+	OID_NetlogonMechanism = 73,
+	OID_appleLocalKdcSupported = 74,
+	OID_gostCPSignA = 75,
+	OID_gostCPSignB = 76,
+	OID_gostCPSignC = 77,
+	OID_gost2012PKey256 = 78,
+	OID_gost2012PKey512 = 79,
+	OID_gost2012Digest256 = 80,
+	OID_gost2012Digest512 = 81,
+	OID_gost2012Signature256 = 82,
+	OID_gost2012Signature512 = 83,
+	OID_gostTC26Sign256A = 84,
+	OID_gostTC26Sign256B = 85,
+	OID_gostTC26Sign256C = 86,
+	OID_gostTC26Sign256D = 87,
+	OID_gostTC26Sign512A = 88,
+	OID_gostTC26Sign512B = 89,
+	OID_gostTC26Sign512C = 90,
+	OID_sm2 = 91,
+	OID_sm3 = 92,
+	OID_SM2_with_SM3 = 93,
+	OID_sm3WithRSAEncryption = 94,
+	OID_TPMLoadableKey = 95,
+	OID_TPMImportableKey = 96,
+	OID_TPMSealedData = 97,
+	OID__NR = 98,
+};
+
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+};
+
+struct x509_certificate {
+	struct x509_certificate *next;
+	struct x509_certificate *signer;
+	struct public_key *pub;
+	struct public_key_signature *sig;
+	char *issuer;
+	char *subject;
+	struct asymmetric_key_id *id;
+	struct asymmetric_key_id *skid;
+	time64_t valid_from;
+	time64_t valid_to;
+	const void *tbs;
+	unsigned int tbs_size;
+	unsigned int raw_sig_size;
+	const void *raw_sig;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_subject;
+	unsigned int raw_subject_size;
+	unsigned int raw_skid_size;
+	const void *raw_skid;
+	unsigned int index;
+	bool seen;
+	bool verified;
+	bool self_signed;
+	bool unsupported_sig;
+	bool blacklisted;
+};
+
+struct pkcs7_signed_info {
+	struct pkcs7_signed_info *next;
+	struct x509_certificate *signer;
+	unsigned int index;
+	bool unsupported_crypto;
+	bool blacklisted;
+	const void *msgdigest;
+	unsigned int msgdigest_len;
+	unsigned int authattrs_len;
+	const void *authattrs;
+	long unsigned int aa_set;
+	time64_t signing_time;
+	struct public_key_signature *sig;
+};
+
+struct pkcs7_message {
+	struct x509_certificate *certs;
+	struct x509_certificate *crl;
+	struct pkcs7_signed_info *signed_infos;
+	u8 version;
+	bool have_authattrs;
+	enum OID data_type;
+	size_t data_len;
+	size_t data_hdrlen;
+	const void *data;
+};
+
+struct asn1_decoder;
+
+struct pkcs7_parse_context {
+	struct pkcs7_message *msg;
+	struct pkcs7_signed_info *sinfo;
+	struct pkcs7_signed_info **ppsinfo;
+	struct x509_certificate *certs;
+	struct x509_certificate **ppcerts;
+	long unsigned int data;
+	enum OID last_oid;
+	unsigned int x509_index;
+	unsigned int sinfo_index;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_skid;
+	unsigned int raw_skid_size;
+	bool expect_skid;
+};
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkcg_gq *blkg;
+	struct llist_node lnode;
+	int lqueued;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	spinlock_t async_bio_lock;
+	struct bio_list async_bios;
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+};
+
+enum {
+	BIO_NO_PAGE_REF = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_QUIET = 3,
+	BIO_CHAIN = 4,
+	BIO_REFFED = 5,
+	BIO_BPS_THROTTLED = 6,
+	BIO_TRACE_COMPLETION = 7,
+	BIO_CGROUP_ACCT = 8,
+	BIO_QOS_THROTTLED = 9,
+	BIO_QOS_MERGED = 10,
+	BIO_REMAPPED = 11,
+	BIO_ZONE_WRITE_LOCKED = 12,
+	BIO_FLAG_LAST = 13,
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_CGROUP_PUNT = 22,
+	__REQ_POLLED = 23,
+	__REQ_ALLOC_CACHE = 24,
+	__REQ_SWAP = 25,
+	__REQ_DRV = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	struct bio *free_list_irq;
+	unsigned int nr;
+	unsigned int nr_irq;
+};
+
+struct sbitmap_word {
+	long unsigned int word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int *alloc_hint;
+};
+
+struct sbq_wait_state {
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+	atomic_t completion_cnt;
+	atomic_t wakeup_cnt;
+};
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+enum rq_end_io_ret {
+	RQ_END_IO_NONE = 0,
+	RQ_END_IO_FREE = 1,
+};
+
+typedef enum rq_end_io_ret rq_end_io_fn(struct request *, blk_status_t);
+
+struct blk_crypto_keyslot;
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	short unsigned int wbt_flags;
+	short unsigned int stats_sectors;
+	short unsigned int nr_phys_segments;
+	short unsigned int nr_integrity_segments;
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_crypto_keyslot *crypt_keyslot;
+	short unsigned int ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	long unsigned int deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+		void *completion_data;
+	};
+	union {
+		struct {
+			struct io_cq *icq;
+			void *priv[2];
+		} elv;
+		struct {
+			unsigned int seq;
+			struct list_head list;
+			rq_end_io_fn *saved_end_io;
+		} flush;
+	};
+	union {
+		struct __call_single_data csd;
+		u64 fifo_time;
+	};
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+};
+
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+};
+
+struct rq_qos_ops;
+
+struct rq_qos {
+	struct rq_qos_ops *ops;
+	struct request_queue *q;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	atomic_t active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+};
+
+struct blk_trace {
+	int trace_state;
+	struct rchan *rchan;
+	long unsigned int *sequence;
+	unsigned char *msg_data;
+	u16 act_mask;
+	u64 start_lba;
+	u64 end_lba;
+	u32 pid;
+	u32 dev;
+	struct dentry *dir;
+	struct list_head running_list;
+	atomic_t dropped;
+};
+
+struct blk_flush_queue {
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	long unsigned int flush_pending_since;
+	struct list_head flush_queue[2];
+	struct list_head flush_data_in_flight;
+	struct request *flush_rq;
+	spinlock_t mq_flush_lock;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	const struct blk_mq_ops *ops;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+	struct srcu_struct *srcu;
+};
+
+enum {
+	sysctl_hung_task_timeout_secs = 0,
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		long unsigned int state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	long unsigned int flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	short unsigned int type;
+	short unsigned int nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	long unsigned int queued;
+	long unsigned int run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	long: 64;
+	long: 64;
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+enum blktrace_act {
+	__BLK_TA_QUEUE = 1,
+	__BLK_TA_BACKMERGE = 2,
+	__BLK_TA_FRONTMERGE = 3,
+	__BLK_TA_GETRQ = 4,
+	__BLK_TA_SLEEPRQ = 5,
+	__BLK_TA_REQUEUE = 6,
+	__BLK_TA_ISSUE = 7,
+	__BLK_TA_COMPLETE = 8,
+	__BLK_TA_PLUG = 9,
+	__BLK_TA_UNPLUG_IO = 10,
+	__BLK_TA_UNPLUG_TIMER = 11,
+	__BLK_TA_INSERT = 12,
+	__BLK_TA_SPLIT = 13,
+	__BLK_TA_BOUNCE = 14,
+	__BLK_TA_REMAP = 15,
+	__BLK_TA_ABORT = 16,
+	__BLK_TA_DRV_DATA = 17,
+	__BLK_TA_CGROUP = 256,
+};
+
+enum xen_domain_type {
+	XEN_NATIVE = 0,
+	XEN_PV_DOMAIN = 1,
+	XEN_HVM_DOMAIN = 2,
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	struct llist_head *lhead;
+	struct list_head cgwb_list;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_DEF_MAX_SECTORS = 2560,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+struct disk_stats {
+	u64 nsecs[4];
+	long unsigned int sectors[4];
+	long unsigned int ios[4];
+	long unsigned int merges[4];
+	long unsigned int io_ticks;
+	local_t in_flight[2];
+};
+
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	long unsigned int flags;
+	struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	short unsigned int index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+struct blk_integrity_iter {
+	void *prot_buf;
+	void *data_buf;
+	sector_t seed;
+	unsigned int data_size;
+	short unsigned int interval;
+	unsigned char tuple_size;
+	const char *disk_name;
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+struct blk_mq_alloc_data;
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+};
+
+struct elv_fs_entry;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+};
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx *queue_ctx;
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+enum {
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
+};
+
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
+};
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+enum {
+	BLK_MQ_F_SHOULD_MERGE = 1,
+	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
+	BLK_MQ_F_STACKING = 4,
+	BLK_MQ_F_TAG_HCTX_SHARED = 8,
+	BLK_MQ_F_BLOCKING = 32,
+	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
+	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
+	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+	BLK_MQ_S_STOPPED = 0,
+	BLK_MQ_S_TAG_ACTIVE = 1,
+	BLK_MQ_S_SCHED_RESTART = 2,
+	BLK_MQ_S_INACTIVE = 3,
+	BLK_MQ_MAX_DEPTH = 10240,
+	BLK_MQ_CPU_WORK_BATCH = 8,
+};
+
+enum {
+	BLK_MQ_REQ_NOWAIT = 1,
+	BLK_MQ_REQ_RESERVED = 2,
+	BLK_MQ_REQ_PM = 4,
+};
+
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
+	unsigned int flags;
+};
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+};
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
 };
 
 typedef struct {
-	__u8 b[16];
-} guid_t;
+	struct folio *v;
+} Sector;
 
-enum pm_qos_type {
-	PM_QOS_UNITIALIZED = 0,
-	PM_QOS_MAX = 1,
-	PM_QOS_MIN = 2,
+struct bsd_partition {
+	__le32 p_size;
+	__le32 p_offset;
+	__le32 p_fsize;
+	__u8 p_fstype;
+	__u8 p_frag;
+	__le16 p_cpg;
 };
 
-struct pm_qos_constraints {
-	struct plist_head list;
-	s32 target_value;
-	s32 default_value;
-	s32 no_constraint_value;
-	enum pm_qos_type type;
-	struct blocking_notifier_head *notifiers;
+struct bsd_disklabel {
+	__le32 d_magic;
+	__s16 d_type;
+	__s16 d_subtype;
+	char d_typename[16];
+	char d_packname[16];
+	__u32 d_secsize;
+	__u32 d_nsectors;
+	__u32 d_ntracks;
+	__u32 d_ncylinders;
+	__u32 d_secpercyl;
+	__u32 d_secperunit;
+	__u16 d_sparespertrack;
+	__u16 d_sparespercyl;
+	__u32 d_acylinders;
+	__u16 d_rpm;
+	__u16 d_interleave;
+	__u16 d_trackskew;
+	__u16 d_cylskew;
+	__u32 d_headswitch;
+	__u32 d_trkseek;
+	__u32 d_flags;
+	__u32 d_drivedata[5];
+	__u32 d_spare[5];
+	__le32 d_magic2;
+	__le16 d_checksum;
+	__le16 d_npartitions;
+	__le32 d_bbsize;
+	__le32 d_sbsize;
+	struct bsd_partition d_partitions[16];
 };
 
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
+struct unixware_slice {
+	__le16 s_label;
+	__le16 s_flags;
+	__le32 start_sect;
+	__le32 nr_sects;
 };
 
-struct pm_qos_flags {
+struct unixware_vtoc {
+	__le32 v_magic;
+	__le32 v_version;
+	char v_name[8];
+	__le16 v_nslices;
+	__le16 v_unknown1;
+	__le32 v_reserved[10];
+	struct unixware_slice v_slice[16];
+};
+
+struct unixware_disklabel {
+	__le32 d_type;
+	__le32 d_magic;
+	__le32 d_version;
+	char d_serial[12];
+	__le32 d_ncylinders;
+	__le32 d_ntracks;
+	__le32 d_nsectors;
+	__le32 d_secsize;
+	__le32 d_part_start;
+	__le32 d_unknown1[12];
+	__le32 d_alt_tbl;
+	__le32 d_alt_len;
+	__le32 d_phys_cyl;
+	__le32 d_phys_trk;
+	__le32 d_phys_sec;
+	__le32 d_phys_bytes;
+	__le32 d_unknown2;
+	__le32 d_unknown3;
+	__le32 d_pad[8];
+	struct unixware_vtoc vtoc;
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, fmode_t, unsigned int);
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	long unsigned int first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct latency_bucket {
+	long unsigned int total_latency;
+	int samples;
+};
+
+struct avg_latency_bucket {
+	long unsigned int latency;
+	bool valid;
+};
+
+struct throtl_data {
+	struct throtl_service_queue service_queue;
+	struct request_queue *queue;
+	unsigned int nr_queued[2];
+	unsigned int throtl_slice;
+	struct work_struct dispatch_work;
+	unsigned int limit_index;
+	bool limit_valid[2];
+	long unsigned int low_upgrade_time;
+	long unsigned int low_downgrade_time;
+	unsigned int scale;
+	struct latency_bucket tmp_buckets[18];
+	struct avg_latency_bucket avg_buckets[18];
+	struct latency_bucket *latency_buckets[2];
+	long unsigned int last_calculate_time;
+	long unsigned int filtered_latency;
+	bool track_bio_latency;
+};
+
+enum blktrace_cat {
+	BLK_TC_READ = 1,
+	BLK_TC_WRITE = 2,
+	BLK_TC_FLUSH = 4,
+	BLK_TC_SYNC = 8,
+	BLK_TC_SYNCIO = 8,
+	BLK_TC_QUEUE = 16,
+	BLK_TC_REQUEUE = 32,
+	BLK_TC_ISSUE = 64,
+	BLK_TC_COMPLETE = 128,
+	BLK_TC_FS = 256,
+	BLK_TC_PC = 512,
+	BLK_TC_NOTIFY = 1024,
+	BLK_TC_AHEAD = 2048,
+	BLK_TC_META = 4096,
+	BLK_TC_DISCARD = 8192,
+	BLK_TC_DRV_DATA = 16384,
+	BLK_TC_FUA = 32768,
+	BLK_TC_END = 32768,
+};
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_init_cpd_fn *cpd_init_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+struct blkg_conf_ctx {
+	struct block_device *bdev;
+	struct blkcg_gq *blkg;
+	char *body;
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct blkg_rwstat_sample {
+	u64 cnt[5];
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	long unsigned int disptime;
+	unsigned int flags;
+	bool has_rules_bps[2];
+	bool has_rules_iops[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	long unsigned int last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	uint64_t carryover_bytes[2];
+	unsigned int carryover_ios[2];
+	long unsigned int last_check_time;
+	long unsigned int latency_target;
+	long unsigned int latency_target_conf;
+	long unsigned int slice_start[2];
+	long unsigned int slice_end[2];
+	long unsigned int last_finish_time;
+	long unsigned int checked_last_finish_time;
+	long unsigned int avg_idletime;
+	long unsigned int idletime_threshold;
+	long unsigned int idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	long unsigned int bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_CANCELING = 4,
+};
+
+struct bfq_entity;
+
+struct bfq_service_tree {
+	struct rb_root active;
+	struct rb_root idle;
+	struct bfq_entity *first_idle;
+	struct bfq_entity *last_idle;
+	u64 vtime;
+	long unsigned int wsum;
+};
+
+struct bfq_sched_data;
+
+struct bfq_queue;
+
+struct bfq_entity {
+	struct rb_node rb_node;
+	bool on_st_or_in_serv;
+	u64 start;
+	u64 finish;
+	struct rb_root *tree;
+	u64 min_start;
+	int service;
+	int budget;
+	int allocated;
+	int dev_weight;
+	int weight;
+	int new_weight;
+	int orig_weight;
+	struct bfq_entity *parent;
+	struct bfq_sched_data *my_sched_data;
+	struct bfq_sched_data *sched_data;
+	int prio_changed;
+	bool in_groups_with_pending_reqs;
+	struct bfq_queue *last_bfqq_created;
+};
+
+struct bfq_sched_data {
+	struct bfq_entity *in_service_entity;
+	struct bfq_entity *next_in_service;
+	struct bfq_service_tree service_tree[3];
+	long unsigned int bfq_class_idle_last_service;
+};
+
+struct bfq_weight_counter {
+	unsigned int weight;
+	unsigned int num_active;
+	struct rb_node weights_node;
+};
+
+struct bfq_ttime {
+	u64 last_end_request;
+	u64 ttime_total;
+	long unsigned int ttime_samples;
+	u64 ttime_mean;
+};
+
+struct bfq_data;
+
+struct bfq_io_cq;
+
+struct bfq_queue {
+	int ref;
+	int stable_ref;
+	struct bfq_data *bfqd;
+	short unsigned int ioprio;
+	short unsigned int ioprio_class;
+	short unsigned int new_ioprio;
+	short unsigned int new_ioprio_class;
+	u64 last_serv_time_ns;
+	unsigned int inject_limit;
+	long unsigned int decrease_time_jif;
+	struct bfq_queue *new_bfqq;
+	struct rb_node pos_node;
+	struct rb_root *pos_root;
+	struct rb_root sort_list;
+	struct request *next_rq;
+	int queued[2];
+	int meta_pending;
+	struct list_head fifo;
+	struct bfq_entity entity;
+	struct bfq_weight_counter *weight_counter;
+	int max_budget;
+	long unsigned int budget_timeout;
+	int dispatched;
+	long unsigned int flags;
+	struct list_head bfqq_list;
+	struct bfq_ttime ttime;
+	u64 io_start_time;
+	u64 tot_idle_time;
+	u32 seek_history;
+	struct hlist_node burst_list_node;
+	sector_t last_request_pos;
+	unsigned int requests_within_timer;
+	pid_t pid;
+	struct bfq_io_cq *bic;
+	long unsigned int wr_cur_max_time;
+	long unsigned int soft_rt_next_start;
+	long unsigned int last_wr_start_finish;
+	unsigned int wr_coeff;
+	long unsigned int last_idle_bklogged;
+	long unsigned int service_from_backlogged;
+	long unsigned int service_from_wr;
+	long unsigned int wr_start_at_switch_to_srt;
+	long unsigned int split_time;
+	long unsigned int first_IO_time;
+	long unsigned int creation_time;
+	struct bfq_queue *waker_bfqq;
+	struct bfq_queue *tentative_waker_bfqq;
+	unsigned int num_waker_detections;
+	u64 waker_detection_started;
+	struct hlist_node woken_list_node;
+	struct hlist_head woken_list;
+};
+
+struct bfq_group;
+
+struct bfq_data {
+	struct request_queue *queue;
+	struct list_head dispatch;
+	struct bfq_group *root_group;
+	struct rb_root_cached queue_weights_tree;
+	unsigned int num_groups_with_pending_reqs;
+	unsigned int busy_queues[3];
+	int wr_busy_queues;
+	int queued;
+	int rq_in_driver;
+	bool nonrot_with_queueing;
+	int max_rq_in_driver;
+	int hw_tag_samples;
+	int hw_tag;
+	int budgets_assigned;
+	struct hrtimer idle_slice_timer;
+	struct bfq_queue *in_service_queue;
+	sector_t last_position;
+	sector_t in_serv_last_pos;
+	u64 last_completion;
+	struct bfq_queue *last_completed_rq_bfqq;
+	struct bfq_queue *last_bfqq_created;
+	u64 last_empty_occupied_ns;
+	bool wait_dispatch;
+	struct request *waited_rq;
+	bool rqs_injected;
+	u64 first_dispatch;
+	u64 last_dispatch;
+	ktime_t last_budget_start;
+	ktime_t last_idling_start;
+	long unsigned int last_idling_start_jiffies;
+	int peak_rate_samples;
+	u32 sequential_samples;
+	u64 tot_sectors_dispatched;
+	u32 last_rq_max_size;
+	u64 delta_from_first;
+	u32 peak_rate;
+	int bfq_max_budget;
+	struct list_head active_list;
+	struct list_head idle_list;
+	u64 bfq_fifo_expire[2];
+	unsigned int bfq_back_penalty;
+	unsigned int bfq_back_max;
+	u32 bfq_slice_idle;
+	int bfq_user_max_budget;
+	unsigned int bfq_timeout;
+	bool strict_guarantees;
+	long unsigned int last_ins_in_burst;
+	long unsigned int bfq_burst_interval;
+	int burst_size;
+	struct bfq_entity *burst_parent_entity;
+	long unsigned int bfq_large_burst_thresh;
+	bool large_burst;
+	struct hlist_head burst_list;
+	bool low_latency;
+	unsigned int bfq_wr_coeff;
+	unsigned int bfq_wr_max_time;
+	unsigned int bfq_wr_rt_max_time;
+	unsigned int bfq_wr_min_idle_time;
+	long unsigned int bfq_wr_min_inter_arr_async;
+	unsigned int bfq_wr_max_softrt_rate;
+	u64 rate_dur_prod;
+	struct bfq_queue oom_bfqq;
+	spinlock_t lock;
+	struct bfq_io_cq *bio_bic;
+	struct bfq_queue *bio_bfqq;
+	unsigned int word_depths[4];
+	unsigned int full_depth_shift;
+};
+
+struct bfq_io_cq {
+	struct io_cq icq;
+	struct bfq_queue *bfqq[2];
+	int ioprio;
+	uint64_t blkcg_serial_nr;
+	bool saved_has_short_ttime;
+	bool saved_IO_bound;
+	u64 saved_io_start_time;
+	u64 saved_tot_idle_time;
+	bool saved_in_large_burst;
+	bool was_in_burst_list;
+	unsigned int saved_weight;
+	long unsigned int saved_wr_coeff;
+	long unsigned int saved_last_wr_start_finish;
+	long unsigned int saved_service_from_wr;
+	long unsigned int saved_wr_start_at_switch_to_srt;
+	unsigned int saved_wr_cur_max_time;
+	struct bfq_ttime saved_ttime;
+	u64 saved_last_serv_time_ns;
+	unsigned int saved_inject_limit;
+	long unsigned int saved_decrease_time_jif;
+	struct bfq_queue *stable_merge_bfqq;
+	bool stably_merged;
+	unsigned int requests;
+};
+
+struct bfqg_stats {
+	struct blkg_rwstat bytes;
+	struct blkg_rwstat ios;
+};
+
+struct bfq_group {
+	struct blkg_policy_data pd;
+	char blkg_path[128];
+	refcount_t ref;
+	bool online;
+	struct bfq_entity entity;
+	struct bfq_sched_data sched_data;
+	struct bfq_data *bfqd;
+	struct bfq_queue *async_bfqq[16];
+	struct bfq_queue *async_idle_bfqq;
+	struct bfq_entity *my_entity;
+	int active_entities;
+	int num_queues_with_pending_reqs;
+	struct rb_root rq_pos_tree;
+	struct bfqg_stats stats;
+};
+
+enum bfqq_state_flags {
+	BFQQF_just_created = 0,
+	BFQQF_busy = 1,
+	BFQQF_wait_request = 2,
+	BFQQF_non_blocking_wait_rq = 3,
+	BFQQF_fifo_expire = 4,
+	BFQQF_has_short_ttime = 5,
+	BFQQF_sync = 6,
+	BFQQF_IO_bound = 7,
+	BFQQF_in_large_burst = 8,
+	BFQQF_softrt_update = 9,
+	BFQQF_coop = 10,
+	BFQQF_split_coop = 11,
+};
+
+enum bfqq_expiration {
+	BFQQE_TOO_IDLE = 0,
+	BFQQE_BUDGET_TIMEOUT = 1,
+	BFQQE_BUDGET_EXHAUSTED = 2,
+	BFQQE_NO_MORE_REQUESTS = 3,
+	BFQQE_PREEMPTED = 4,
+};
+
+enum blk_integrity_flags {
+	BLK_INTEGRITY_VERIFY = 1,
+	BLK_INTEGRITY_GENERATE = 2,
+	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
+	BLK_INTEGRITY_IP_CHECKSUM = 8,
+};
+
+struct integrity_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_integrity *, char *);
+	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
+};
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
 	struct list_head list;
-	s32 effective_flags;
+	long unsigned int state;
+	int weight;
+	irq_poll_fn *poll;
 };
 
-struct dev_pm_qos_request;
-
-struct dev_pm_qos {
-	struct pm_qos_constraints resume_latency;
-	struct pm_qos_constraints latency_tolerance;
-	struct freq_constraints freq;
-	struct pm_qos_flags flags;
-	struct dev_pm_qos_request *resume_latency_req;
-	struct dev_pm_qos_request *latency_tolerance_req;
-	struct dev_pm_qos_request *flags_req;
+struct rdma_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head rpools;
 };
 
-enum reboot_mode {
-	REBOOT_UNDEFINED = 4294967295,
-	REBOOT_COLD = 0,
-	REBOOT_WARM = 1,
-	REBOOT_HARD = 2,
-	REBOOT_SOFT = 3,
-	REBOOT_GPIO = 4,
+struct rdmacg_device {
+	struct list_head dev_node;
+	struct list_head rpools;
+	char *name;
 };
 
-typedef long unsigned int efi_status_t;
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+enum rdma_nl_counter_mode {
+	RDMA_COUNTER_MODE_NONE = 0,
+	RDMA_COUNTER_MODE_AUTO = 1,
+	RDMA_COUNTER_MODE_MANUAL = 2,
+	RDMA_COUNTER_MODE_MAX = 3,
+};
+
+enum rdma_nl_counter_mask {
+	RDMA_COUNTER_MASK_QP_TYPE = 1,
+	RDMA_COUNTER_MASK_PID = 2,
+};
+
+enum rdma_restrack_type {
+	RDMA_RESTRACK_PD = 0,
+	RDMA_RESTRACK_CQ = 1,
+	RDMA_RESTRACK_QP = 2,
+	RDMA_RESTRACK_CM_ID = 3,
+	RDMA_RESTRACK_MR = 4,
+	RDMA_RESTRACK_CTX = 5,
+	RDMA_RESTRACK_COUNTER = 6,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
+};
+
+struct rdma_restrack_entry {
+	bool valid;
+	u8 no_track: 1;
+	struct kref kref;
+	struct completion comp;
+	struct task_struct *task;
+	const char *kern_name;
+	enum rdma_restrack_type type;
+	bool user;
+	u32 id;
+};
+
+struct rdma_link_ops {
+	struct list_head list;
+	const char *type;
+	int (*newlink)(const char *, struct net_device *);
+};
+
+struct auto_mode_param {
+	int qp_type;
+};
+
+struct rdma_counter_mode {
+	enum rdma_nl_counter_mode mode;
+	enum rdma_nl_counter_mask mask;
+	struct auto_mode_param param;
+};
+
+struct rdma_hw_stats;
+
+struct rdma_port_counter {
+	struct rdma_counter_mode mode;
+	struct rdma_hw_stats *hstats;
+	unsigned int num_counters;
+	struct mutex lock;
+};
+
+struct rdma_stat_desc;
+
+struct rdma_hw_stats {
+	struct mutex lock;
+	long unsigned int timestamp;
+	long unsigned int lifespan;
+	const struct rdma_stat_desc *descs;
+	long unsigned int *is_disabled;
+	int num_counters;
+	u64 value[0];
+};
+
+struct ib_device;
+
+struct rdma_counter {
+	struct rdma_restrack_entry res;
+	struct ib_device *device;
+	uint32_t id;
+	struct kref kref;
+	struct rdma_counter_mode mode;
+	struct mutex lock;
+	struct rdma_hw_stats *stats;
+	u32 port;
+};
+
+enum rdma_driver_id {
+	RDMA_DRIVER_UNKNOWN = 0,
+	RDMA_DRIVER_MLX5 = 1,
+	RDMA_DRIVER_MLX4 = 2,
+	RDMA_DRIVER_CXGB3 = 3,
+	RDMA_DRIVER_CXGB4 = 4,
+	RDMA_DRIVER_MTHCA = 5,
+	RDMA_DRIVER_BNXT_RE = 6,
+	RDMA_DRIVER_OCRDMA = 7,
+	RDMA_DRIVER_NES = 8,
+	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
+	RDMA_DRIVER_VMW_PVRDMA = 10,
+	RDMA_DRIVER_QEDR = 11,
+	RDMA_DRIVER_HNS = 12,
+	RDMA_DRIVER_USNIC = 13,
+	RDMA_DRIVER_RXE = 14,
+	RDMA_DRIVER_HFI1 = 15,
+	RDMA_DRIVER_QIB = 16,
+	RDMA_DRIVER_EFA = 17,
+	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
+	RDMA_DRIVER_MANA = 20,
+};
+
+enum ib_cq_notify_flags {
+	IB_CQ_SOLICITED = 1,
+	IB_CQ_NEXT_COMP = 2,
+	IB_CQ_SOLICITED_MASK = 3,
+	IB_CQ_REPORT_MISSED_EVENTS = 4,
+};
+
+enum rdma_link_layer {
+	IB_LINK_LAYER_UNSPECIFIED = 0,
+	IB_LINK_LAYER_INFINIBAND = 1,
+	IB_LINK_LAYER_ETHERNET = 2,
+};
+
+enum rdma_netdev_t {
+	RDMA_NETDEV_OPA_VNIC = 0,
+	RDMA_NETDEV_IPOIB = 1,
+};
+
+enum ib_srq_attr_mask {
+	IB_SRQ_MAX_WR = 1,
+	IB_SRQ_LIMIT = 2,
+};
+
+enum ib_mr_type {
+	IB_MR_TYPE_MEM_REG = 0,
+	IB_MR_TYPE_SG_GAPS = 1,
+	IB_MR_TYPE_DM = 2,
+	IB_MR_TYPE_USER = 3,
+	IB_MR_TYPE_DMA = 4,
+	IB_MR_TYPE_INTEGRITY = 5,
+};
+
+enum ib_uverbs_advise_mr_advice {
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
+};
+
+struct uverbs_attr_bundle;
+
+struct iw_cm_id;
+
+struct iw_cm_conn_param;
+
+struct ib_qp;
+
+struct ib_send_wr;
+
+struct ib_recv_wr;
+
+struct ib_cq;
+
+struct ib_wc;
+
+struct ib_srq;
+
+struct ib_grh;
+
+struct ib_mad;
+
+struct ib_device_attr;
+
+struct ib_udata;
+
+struct ib_device_modify;
+
+struct ib_port_attr;
+
+struct ib_port_modify;
+
+struct ib_port_immutable;
+
+struct rdma_netdev_alloc_params;
+
+union ib_gid;
+
+struct ib_gid_attr;
+
+struct ib_ucontext;
+
+struct rdma_user_mmap_entry;
+
+struct ib_pd;
+
+struct ib_ah;
+
+struct rdma_ah_init_attr;
+
+struct rdma_ah_attr;
+
+struct ib_srq_init_attr;
+
+struct ib_srq_attr;
+
+struct ib_qp_init_attr;
+
+struct ib_qp_attr;
+
+struct ib_cq_init_attr;
+
+struct ib_mr;
+
+struct ib_sge;
+
+struct ib_mr_status;
+
+struct ib_mw;
+
+struct ib_xrcd;
+
+struct ib_flow;
+
+struct ib_flow_attr;
+
+struct ib_flow_action;
+
+struct ib_wq;
+
+struct ib_wq_init_attr;
+
+struct ib_wq_attr;
+
+struct ib_rwq_ind_table;
+
+struct ib_rwq_ind_table_init_attr;
+
+struct ib_dm;
+
+struct ib_dm_alloc_attr;
+
+struct ib_dm_mr_attr;
+
+struct ib_counters;
+
+struct ib_counters_read_attr;
+
+struct rdma_cm_id;
+
+struct ib_device_ops {
+	struct module *owner;
+	enum rdma_driver_id driver_id;
+	u32 uverbs_abi_ver;
+	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
+	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
+	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	void (*drain_rq)(struct ib_qp *);
+	void (*drain_sq)(struct ib_qp *);
+	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
+	int (*peek_cq)(struct ib_cq *, int);
+	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
+	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
+	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
+	void (*get_dev_fw_str)(struct ib_device *, char *);
+	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
+	int (*add_gid)(const struct ib_gid_attr *, void **);
+	int (*del_gid)(const struct ib_gid_attr *, void **);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
+	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
+	void (*dealloc_ucontext)(struct ib_ucontext *);
+	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
+	void (*mmap_free)(struct rdma_user_mmap_entry *);
+	void (*disassociate_ucontext)(struct ib_ucontext *);
+	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*destroy_ah)(struct ib_ah *, u32);
+	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
+	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
+	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
+	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
+	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
+	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
+	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
+	int (*modify_cq)(struct ib_cq *, u16, u16);
+	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
+	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
+	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
+	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
+	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
+	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
+	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
+	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
+	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
+	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
+	int (*dealloc_mw)(struct ib_mw *);
+	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
+	int (*destroy_flow)(struct ib_flow *);
+	int (*destroy_flow_action)(struct ib_flow_action *);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
+	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
+	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
+	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
+	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
+	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
+	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
+	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
+	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
+	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
+	int (*destroy_counters)(struct ib_counters *);
+	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
+	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
+	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
+	int (*enable_driver)(struct ib_device *);
+	void (*dealloc_driver)(struct ib_device *);
+	void (*iw_add_ref)(struct ib_qp *);
+	void (*iw_rem_ref)(struct ib_qp *);
+	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
+	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
+	int (*iw_create_listen)(struct iw_cm_id *, int);
+	int (*iw_destroy_listen)(struct iw_cm_id *);
+	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
+	int (*counter_unbind_qp)(struct ib_qp *);
+	int (*counter_dealloc)(struct rdma_counter *);
+	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
+	int (*counter_update_stats)(struct rdma_counter *);
+	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
+	size_t size_ib_ah;
+	size_t size_ib_counters;
+	size_t size_ib_cq;
+	size_t size_ib_mw;
+	size_t size_ib_pd;
+	size_t size_ib_qp;
+	size_t size_ib_rwq_ind_table;
+	size_t size_ib_srq;
+	size_t size_ib_ucontext;
+	size_t size_ib_xrcd;
+};
+
+struct ib_core_device {
+	struct device dev;
+	possible_net_t rdma_net;
+	struct kobject *ports_kobj;
+	struct list_head port_list;
+	struct ib_device *owner;
+};
+
+enum ib_atomic_cap {
+	IB_ATOMIC_NONE = 0,
+	IB_ATOMIC_HCA = 1,
+	IB_ATOMIC_GLOB = 2,
+};
+
+struct ib_odp_caps {
+	uint64_t general_caps;
+	struct {
+		uint32_t rc_odp_caps;
+		uint32_t uc_odp_caps;
+		uint32_t ud_odp_caps;
+		uint32_t xrc_odp_caps;
+	} per_transport_caps;
+};
+
+struct ib_rss_caps {
+	u32 supported_qpts;
+	u32 max_rwq_indirection_tables;
+	u32 max_rwq_indirection_table_size;
+};
+
+struct ib_tm_caps {
+	u32 max_rndv_hdr_size;
+	u32 max_num_tags;
+	u32 flags;
+	u32 max_ops;
+	u32 max_sge;
+};
+
+struct ib_cq_caps {
+	u16 max_cq_moderation_count;
+	u16 max_cq_moderation_period;
+};
+
+struct ib_device_attr {
+	u64 fw_ver;
+	__be64 sys_image_guid;
+	u64 max_mr_size;
+	u64 page_size_cap;
+	u32 vendor_id;
+	u32 vendor_part_id;
+	u32 hw_ver;
+	int max_qp;
+	int max_qp_wr;
+	u64 device_cap_flags;
+	u64 kernel_cap_flags;
+	int max_send_sge;
+	int max_recv_sge;
+	int max_sge_rd;
+	int max_cq;
+	int max_cqe;
+	int max_mr;
+	int max_pd;
+	int max_qp_rd_atom;
+	int max_ee_rd_atom;
+	int max_res_rd_atom;
+	int max_qp_init_rd_atom;
+	int max_ee_init_rd_atom;
+	enum ib_atomic_cap atomic_cap;
+	enum ib_atomic_cap masked_atomic_cap;
+	int max_ee;
+	int max_rdd;
+	int max_mw;
+	int max_raw_ipv6_qp;
+	int max_raw_ethy_qp;
+	int max_mcast_grp;
+	int max_mcast_qp_attach;
+	int max_total_mcast_qp_attach;
+	int max_ah;
+	int max_srq;
+	int max_srq_wr;
+	int max_srq_sge;
+	unsigned int max_fast_reg_page_list_len;
+	unsigned int max_pi_fast_reg_page_list_len;
+	u16 max_pkeys;
+	u8 local_ca_ack_delay;
+	int sig_prot_cap;
+	int sig_guard_cap;
+	struct ib_odp_caps odp_caps;
+	uint64_t timestamp_mask;
+	uint64_t hca_core_clock;
+	struct ib_rss_caps rss_caps;
+	u32 max_wq_type_rq;
+	u32 raw_packet_caps;
+	struct ib_tm_caps tm_caps;
+	struct ib_cq_caps cq_caps;
+	u64 max_dm_size;
+	u32 max_sgl_rd;
+};
+
+struct hw_stats_device_data;
+
+struct rdma_restrack_root;
+
+struct uapi_definition;
+
+struct ib_port_data;
+
+struct ib_device {
+	struct device *dma_device;
+	struct ib_device_ops ops;
+	char name[64];
+	struct callback_head callback_head;
+	struct list_head event_handler_list;
+	struct rw_semaphore event_handler_rwsem;
+	spinlock_t qp_open_list_lock;
+	struct rw_semaphore client_data_rwsem;
+	struct xarray client_data;
+	struct mutex unregistration_lock;
+	rwlock_t cache_lock;
+	struct ib_port_data *port_data;
+	int num_comp_vectors;
+	union {
+		struct device dev;
+		struct ib_core_device coredev;
+	};
+	const struct attribute_group *groups[4];
+	u64 uverbs_cmd_mask;
+	char node_desc[64];
+	__be64 node_guid;
+	u32 local_dma_lkey;
+	u16 is_switch: 1;
+	u16 kverbs_provider: 1;
+	u16 use_cq_dim: 1;
+	u8 node_type;
+	u32 phys_port_cnt;
+	struct ib_device_attr attrs;
+	struct hw_stats_device_data *hw_stats_data;
+	struct rdmacg_device cg_device;
+	u32 index;
+	spinlock_t cq_pools_lock;
+	struct list_head cq_pools[3];
+	struct rdma_restrack_root *res;
+	const struct uapi_definition *driver_def;
+	refcount_t refcount;
+	struct completion unreg_completion;
+	struct work_struct unregistration_work;
+	const struct rdma_link_ops *link_ops;
+	struct mutex compat_devs_mutex;
+	struct xarray compat_devs;
+	char iw_ifname[16];
+	u32 iw_driver_flags;
+	u32 lag_flags;
+};
+
+enum ib_signature_type {
+	IB_SIG_TYPE_NONE = 0,
+	IB_SIG_TYPE_T10_DIF = 1,
+};
+
+enum ib_t10_dif_bg_type {
+	IB_T10DIF_CRC = 0,
+	IB_T10DIF_CSUM = 1,
+};
+
+struct ib_t10_dif_domain {
+	enum ib_t10_dif_bg_type bg_type;
+	u16 pi_interval;
+	u16 bg;
+	u16 app_tag;
+	u32 ref_tag;
+	bool ref_remap;
+	bool app_escape;
+	bool ref_escape;
+	u16 apptag_check_mask;
+};
+
+struct ib_sig_domain {
+	enum ib_signature_type sig_type;
+	union {
+		struct ib_t10_dif_domain dif;
+	} sig;
+};
+
+struct ib_sig_attrs {
+	u8 check_mask;
+	struct ib_sig_domain mem;
+	struct ib_sig_domain wire;
+	int meta_length;
+};
+
+enum ib_sig_err_type {
+	IB_SIG_BAD_GUARD = 0,
+	IB_SIG_BAD_REFTAG = 1,
+	IB_SIG_BAD_APPTAG = 2,
+};
+
+struct ib_sig_err {
+	enum ib_sig_err_type err_type;
+	u32 expected;
+	u32 actual;
+	u64 sig_err_offset;
+	u32 key;
+};
+
+union ib_gid {
+	u8 raw[16];
+	struct {
+		__be64 subnet_prefix;
+		__be64 interface_id;
+	} global;
+};
+
+enum ib_gid_type {
+	IB_GID_TYPE_IB = 0,
+	IB_GID_TYPE_ROCE = 1,
+	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
+	IB_GID_TYPE_SIZE = 3,
+};
+
+struct ib_gid_attr {
+	struct net_device *ndev;
+	struct ib_device *device;
+	union ib_gid gid;
+	enum ib_gid_type gid_type;
+	u16 index;
+	u32 port_num;
+};
+
+struct ib_cq_init_attr {
+	unsigned int cqe;
+	u32 comp_vector;
+	u32 flags;
+};
+
+struct ib_dm_mr_attr {
+	u64 length;
+	u64 offset;
+	u32 access_flags;
+};
+
+struct ib_dm_alloc_attr {
+	u64 length;
+	u32 alignment;
+	u32 flags;
+};
+
+enum ib_mtu {
+	IB_MTU_256 = 1,
+	IB_MTU_512 = 2,
+	IB_MTU_1024 = 3,
+	IB_MTU_2048 = 4,
+	IB_MTU_4096 = 5,
+};
+
+enum ib_port_state {
+	IB_PORT_NOP = 0,
+	IB_PORT_DOWN = 1,
+	IB_PORT_INIT = 2,
+	IB_PORT_ARMED = 3,
+	IB_PORT_ACTIVE = 4,
+	IB_PORT_ACTIVE_DEFER = 5,
+};
+
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
+struct ib_port_attr {
+	u64 subnet_prefix;
+	enum ib_port_state state;
+	enum ib_mtu max_mtu;
+	enum ib_mtu active_mtu;
+	u32 phys_mtu;
+	int gid_tbl_len;
+	unsigned int ip_gids: 1;
+	u32 port_cap_flags;
+	u32 max_msg_sz;
+	u32 bad_pkey_cntr;
+	u32 qkey_viol_cntr;
+	u16 pkey_tbl_len;
+	u32 sm_lid;
+	u32 lid;
+	u8 lmc;
+	u8 max_vl_num;
+	u8 sm_sl;
+	u8 subnet_timeout;
+	u8 init_type_reply;
+	u8 active_width;
+	u16 active_speed;
+	u8 phys_state;
+	u16 port_cap_flags2;
+};
+
+struct ib_device_modify {
+	u64 sys_image_guid;
+	char node_desc[64];
+};
+
+struct ib_port_modify {
+	u32 set_port_cap_mask;
+	u32 clr_port_cap_mask;
+	u8 init_type;
+};
+
+enum ib_event_type {
+	IB_EVENT_CQ_ERR = 0,
+	IB_EVENT_QP_FATAL = 1,
+	IB_EVENT_QP_REQ_ERR = 2,
+	IB_EVENT_QP_ACCESS_ERR = 3,
+	IB_EVENT_COMM_EST = 4,
+	IB_EVENT_SQ_DRAINED = 5,
+	IB_EVENT_PATH_MIG = 6,
+	IB_EVENT_PATH_MIG_ERR = 7,
+	IB_EVENT_DEVICE_FATAL = 8,
+	IB_EVENT_PORT_ACTIVE = 9,
+	IB_EVENT_PORT_ERR = 10,
+	IB_EVENT_LID_CHANGE = 11,
+	IB_EVENT_PKEY_CHANGE = 12,
+	IB_EVENT_SM_CHANGE = 13,
+	IB_EVENT_SRQ_ERR = 14,
+	IB_EVENT_SRQ_LIMIT_REACHED = 15,
+	IB_EVENT_QP_LAST_WQE_REACHED = 16,
+	IB_EVENT_CLIENT_REREGISTER = 17,
+	IB_EVENT_GID_CHANGE = 18,
+	IB_EVENT_WQ_FATAL = 19,
+};
+
+struct ib_ucq_object;
+
+typedef void (*ib_comp_handler)(struct ib_cq *, void *);
+
+struct ib_event;
+
+struct ib_cq {
+	struct ib_device *device;
+	struct ib_ucq_object *uobject;
+	ib_comp_handler comp_handler;
+	void (*event_handler)(struct ib_event *, void *);
+	void *cq_context;
+	int cqe;
+	unsigned int cqe_used;
+	atomic_t usecnt;
+	enum ib_poll_context poll_ctx;
+	struct ib_wc *wc;
+	struct list_head pool_entry;
+	union {
+		struct irq_poll iop;
+		struct work_struct work;
+	};
+	struct workqueue_struct *comp_wq;
+	struct dim *dim;
+	ktime_t timestamp;
+	u8 interrupt: 1;
+	u8 shared: 1;
+	unsigned int comp_vector;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uqp_object;
+
+enum ib_qp_type {
+	IB_QPT_SMI = 0,
+	IB_QPT_GSI = 1,
+	IB_QPT_RC = 2,
+	IB_QPT_UC = 3,
+	IB_QPT_UD = 4,
+	IB_QPT_RAW_IPV6 = 5,
+	IB_QPT_RAW_ETHERTYPE = 6,
+	IB_QPT_RAW_PACKET = 8,
+	IB_QPT_XRC_INI = 9,
+	IB_QPT_XRC_TGT = 10,
+	IB_QPT_MAX = 11,
+	IB_QPT_DRIVER = 255,
+	IB_QPT_RESERVED1 = 4096,
+	IB_QPT_RESERVED2 = 4097,
+	IB_QPT_RESERVED3 = 4098,
+	IB_QPT_RESERVED4 = 4099,
+	IB_QPT_RESERVED5 = 4100,
+	IB_QPT_RESERVED6 = 4101,
+	IB_QPT_RESERVED7 = 4102,
+	IB_QPT_RESERVED8 = 4103,
+	IB_QPT_RESERVED9 = 4104,
+	IB_QPT_RESERVED10 = 4105,
+};
+
+struct ib_qp_security;
+
+struct ib_qp {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	spinlock_t mr_lock;
+	int mrs_used;
+	struct list_head rdma_mrs;
+	struct list_head sig_mrs;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct list_head xrcd_list;
+	atomic_t usecnt;
+	struct list_head open_list;
+	struct ib_qp *real_qp;
+	struct ib_uqp_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	const struct ib_gid_attr *av_sgid_attr;
+	const struct ib_gid_attr *alt_path_sgid_attr;
+	u32 qp_num;
+	u32 max_write_sge;
+	u32 max_read_sge;
+	enum ib_qp_type qp_type;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	struct ib_qp_security *qp_sec;
+	u32 port;
+	bool integrity_en;
+	struct rdma_restrack_entry res;
+	struct rdma_counter *counter;
+};
+
+struct ib_usrq_object;
+
+enum ib_srq_type {
+	IB_SRQT_BASIC = 0,
+	IB_SRQT_XRC = 1,
+	IB_SRQT_TM = 2,
+};
+
+struct ib_srq {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_usrq_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	enum ib_srq_type srq_type;
+	atomic_t usecnt;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+				u32 srq_num;
+			} xrc;
+		};
+	} ext;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uwq_object;
+
+enum ib_wq_state {
+	IB_WQS_RESET = 0,
+	IB_WQS_RDY = 1,
+	IB_WQS_ERR = 2,
+};
+
+enum ib_wq_type {
+	IB_WQT_RQ = 0,
+};
+
+struct ib_wq {
+	struct ib_device *device;
+	struct ib_uwq_object *uobject;
+	void *wq_context;
+	void (*event_handler)(struct ib_event *, void *);
+	struct ib_pd *pd;
+	struct ib_cq *cq;
+	u32 wq_num;
+	enum ib_wq_state state;
+	enum ib_wq_type wq_type;
+	atomic_t usecnt;
+};
+
+struct ib_event {
+	struct ib_device *device;
+	union {
+		struct ib_cq *cq;
+		struct ib_qp *qp;
+		struct ib_srq *srq;
+		struct ib_wq *wq;
+		u32 port_num;
+	} element;
+	enum ib_event_type event;
+};
+
+struct ib_global_route {
+	const struct ib_gid_attr *sgid_attr;
+	union ib_gid dgid;
+	u32 flow_label;
+	u8 sgid_index;
+	u8 hop_limit;
+	u8 traffic_class;
+};
+
+struct ib_grh {
+	__be32 version_tclass_flow;
+	__be16 paylen;
+	u8 next_hdr;
+	u8 hop_limit;
+	union ib_gid sgid;
+	union ib_gid dgid;
+};
+
+struct ib_mr_status {
+	u32 fail_status;
+	struct ib_sig_err sig_err;
+};
+
+struct rdma_ah_init_attr {
+	struct rdma_ah_attr *ah_attr;
+	u32 flags;
+	struct net_device *xmit_slave;
+};
+
+enum rdma_ah_attr_type {
+	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
+	RDMA_AH_ATTR_TYPE_IB = 1,
+	RDMA_AH_ATTR_TYPE_ROCE = 2,
+	RDMA_AH_ATTR_TYPE_OPA = 3,
+};
+
+struct ib_ah_attr {
+	u16 dlid;
+	u8 src_path_bits;
+};
+
+struct roce_ah_attr {
+	u8 dmac[6];
+};
+
+struct opa_ah_attr {
+	u32 dlid;
+	u8 src_path_bits;
+	bool make_grd;
+};
+
+struct rdma_ah_attr {
+	struct ib_global_route grh;
+	u8 sl;
+	u8 static_rate;
+	u32 port_num;
+	u8 ah_flags;
+	enum rdma_ah_attr_type type;
+	union {
+		struct ib_ah_attr ib;
+		struct roce_ah_attr roce;
+		struct opa_ah_attr opa;
+	};
+};
+
+enum ib_wc_status {
+	IB_WC_SUCCESS = 0,
+	IB_WC_LOC_LEN_ERR = 1,
+	IB_WC_LOC_QP_OP_ERR = 2,
+	IB_WC_LOC_EEC_OP_ERR = 3,
+	IB_WC_LOC_PROT_ERR = 4,
+	IB_WC_WR_FLUSH_ERR = 5,
+	IB_WC_MW_BIND_ERR = 6,
+	IB_WC_BAD_RESP_ERR = 7,
+	IB_WC_LOC_ACCESS_ERR = 8,
+	IB_WC_REM_INV_REQ_ERR = 9,
+	IB_WC_REM_ACCESS_ERR = 10,
+	IB_WC_REM_OP_ERR = 11,
+	IB_WC_RETRY_EXC_ERR = 12,
+	IB_WC_RNR_RETRY_EXC_ERR = 13,
+	IB_WC_LOC_RDD_VIOL_ERR = 14,
+	IB_WC_REM_INV_RD_REQ_ERR = 15,
+	IB_WC_REM_ABORT_ERR = 16,
+	IB_WC_INV_EECN_ERR = 17,
+	IB_WC_INV_EEC_STATE_ERR = 18,
+	IB_WC_FATAL_ERR = 19,
+	IB_WC_RESP_TIMEOUT_ERR = 20,
+	IB_WC_GENERAL_ERR = 21,
+};
+
+enum ib_wc_opcode {
+	IB_WC_SEND = 0,
+	IB_WC_RDMA_WRITE = 1,
+	IB_WC_RDMA_READ = 2,
+	IB_WC_COMP_SWAP = 3,
+	IB_WC_FETCH_ADD = 4,
+	IB_WC_BIND_MW = 5,
+	IB_WC_LOCAL_INV = 6,
+	IB_WC_LSO = 7,
+	IB_WC_ATOMIC_WRITE = 9,
+	IB_WC_REG_MR = 10,
+	IB_WC_MASKED_COMP_SWAP = 11,
+	IB_WC_MASKED_FETCH_ADD = 12,
+	IB_WC_FLUSH = 8,
+	IB_WC_RECV = 128,
+	IB_WC_RECV_RDMA_WITH_IMM = 129,
+};
+
+struct ib_cqe {
+	void (*done)(struct ib_cq *, struct ib_wc *);
+};
+
+struct ib_wc {
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	enum ib_wc_status status;
+	enum ib_wc_opcode opcode;
+	u32 vendor_err;
+	u32 byte_len;
+	struct ib_qp *qp;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+	u32 src_qp;
+	u32 slid;
+	int wc_flags;
+	u16 pkey_index;
+	u8 sl;
+	u8 dlid_path_bits;
+	u32 port_num;
+	u8 smac[6];
+	u16 vlan_id;
+	u8 network_hdr_type;
+};
+
+struct ib_srq_attr {
+	u32 max_wr;
+	u32 max_sge;
+	u32 srq_limit;
+};
+
+struct ib_xrcd {
+	struct ib_device *device;
+	atomic_t usecnt;
+	struct inode *inode;
+	struct rw_semaphore tgt_qps_rwsem;
+	struct xarray tgt_qps;
+};
+
+struct ib_srq_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	struct ib_srq_attr attr;
+	enum ib_srq_type srq_type;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+			} xrc;
+			struct {
+				u32 max_num_tags;
+			} tag_matching;
+		};
+	} ext;
+};
+
+struct ib_qp_cap {
+	u32 max_send_wr;
+	u32 max_recv_wr;
+	u32 max_send_sge;
+	u32 max_recv_sge;
+	u32 max_inline_data;
+	u32 max_rdma_ctxs;
+};
+
+enum ib_sig_type {
+	IB_SIGNAL_ALL_WR = 0,
+	IB_SIGNAL_REQ_WR = 1,
+};
+
+struct ib_qp_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct ib_qp_cap cap;
+	enum ib_sig_type sq_sig_type;
+	enum ib_qp_type qp_type;
+	u32 create_flags;
+	u32 port_num;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	u32 source_qpn;
+};
+
+struct ib_uobject;
+
+struct ib_rwq_ind_table {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 ind_tbl_num;
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum ib_qp_state {
+	IB_QPS_RESET = 0,
+	IB_QPS_INIT = 1,
+	IB_QPS_RTR = 2,
+	IB_QPS_RTS = 3,
+	IB_QPS_SQD = 4,
+	IB_QPS_SQE = 5,
+	IB_QPS_ERR = 6,
+};
+
+enum ib_mig_state {
+	IB_MIG_MIGRATED = 0,
+	IB_MIG_REARM = 1,
+	IB_MIG_ARMED = 2,
+};
+
+enum ib_mw_type {
+	IB_MW_TYPE_1 = 1,
+	IB_MW_TYPE_2 = 2,
+};
+
+struct ib_qp_attr {
+	enum ib_qp_state qp_state;
+	enum ib_qp_state cur_qp_state;
+	enum ib_mtu path_mtu;
+	enum ib_mig_state path_mig_state;
+	u32 qkey;
+	u32 rq_psn;
+	u32 sq_psn;
+	u32 dest_qp_num;
+	int qp_access_flags;
+	struct ib_qp_cap cap;
+	struct rdma_ah_attr ah_attr;
+	struct rdma_ah_attr alt_ah_attr;
+	u16 pkey_index;
+	u16 alt_pkey_index;
+	u8 en_sqd_async_notify;
+	u8 sq_draining;
+	u8 max_rd_atomic;
+	u8 max_dest_rd_atomic;
+	u8 min_rnr_timer;
+	u32 port_num;
+	u8 timeout;
+	u8 retry_cnt;
+	u8 rnr_retry;
+	u32 alt_port_num;
+	u8 alt_timeout;
+	u32 rate_limit;
+	struct net_device *xmit_slave;
+};
+
+enum ib_wr_opcode {
+	IB_WR_RDMA_WRITE = 0,
+	IB_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_WR_SEND = 2,
+	IB_WR_SEND_WITH_IMM = 3,
+	IB_WR_RDMA_READ = 4,
+	IB_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_WR_BIND_MW = 8,
+	IB_WR_LSO = 10,
+	IB_WR_SEND_WITH_INV = 9,
+	IB_WR_RDMA_READ_WITH_INV = 11,
+	IB_WR_LOCAL_INV = 7,
+	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_WR_FLUSH = 14,
+	IB_WR_ATOMIC_WRITE = 15,
+	IB_WR_REG_MR = 32,
+	IB_WR_REG_MR_INTEGRITY = 33,
+	IB_WR_RESERVED1 = 240,
+	IB_WR_RESERVED2 = 241,
+	IB_WR_RESERVED3 = 242,
+	IB_WR_RESERVED4 = 243,
+	IB_WR_RESERVED5 = 244,
+	IB_WR_RESERVED6 = 245,
+	IB_WR_RESERVED7 = 246,
+	IB_WR_RESERVED8 = 247,
+	IB_WR_RESERVED9 = 248,
+	IB_WR_RESERVED10 = 249,
+};
+
+struct ib_sge {
+	u64 addr;
+	u32 length;
+	u32 lkey;
+};
+
+struct ib_send_wr {
+	struct ib_send_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+	enum ib_wr_opcode opcode;
+	int send_flags;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+};
+
+struct ib_ah {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_ah_attr_type type;
+};
+
+struct ib_mr {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	u32 lkey;
+	u32 rkey;
+	u64 iova;
+	u64 length;
+	unsigned int page_size;
+	enum ib_mr_type type;
+	bool need_inval;
+	union {
+		struct ib_uobject *uobject;
+		struct list_head qp_entry;
+	};
+	struct ib_dm *dm;
+	struct ib_sig_attrs *sig_attrs;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_recv_wr {
+	struct ib_recv_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+};
+
+struct ib_rdmacg_object {
+	struct rdma_cgroup *cg;
+};
+
+struct ib_uverbs_file;
+
+struct ib_ucontext {
+	struct ib_device *device;
+	struct ib_uverbs_file *ufile;
+	struct ib_rdmacg_object cg_obj;
+	struct rdma_restrack_entry res;
+	struct xarray mmap_xa;
+};
+
+struct uverbs_api_object;
+
+struct ib_uobject {
+	u64 user_handle;
+	struct ib_uverbs_file *ufile;
+	struct ib_ucontext *context;
+	void *object;
+	struct list_head list;
+	struct ib_rdmacg_object cg_obj;
+	int id;
+	struct kref ref;
+	atomic_t usecnt;
+	struct callback_head rcu;
+	const struct uverbs_api_object *uapi_object;
+};
+
+struct ib_udata {
+	const void *inbuf;
+	void *outbuf;
+	size_t inlen;
+	size_t outlen;
+};
+
+struct ib_pd {
+	u32 local_dma_lkey;
+	u32 flags;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 unsafe_global_rkey;
+	struct ib_mr *__internal_mr;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_wq_init_attr {
+	void *wq_context;
+	enum ib_wq_type wq_type;
+	u32 max_wr;
+	u32 max_sge;
+	struct ib_cq *cq;
+	void (*event_handler)(struct ib_event *, void *);
+	u32 create_flags;
+};
+
+struct ib_wq_attr {
+	enum ib_wq_state wq_state;
+	enum ib_wq_state curr_wq_state;
+	u32 flags;
+	u32 flags_mask;
+};
+
+struct ib_rwq_ind_table_init_attr {
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum port_pkey_state {
+	IB_PORT_PKEY_NOT_VALID = 0,
+	IB_PORT_PKEY_VALID = 1,
+	IB_PORT_PKEY_LISTED = 2,
+};
+
+struct ib_port_pkey {
+	enum port_pkey_state state;
+	u16 pkey_index;
+	u32 port_num;
+	struct list_head qp_list;
+	struct list_head to_error_list;
+	struct ib_qp_security *sec;
+};
+
+struct ib_ports_pkeys;
+
+struct ib_qp_security {
+	struct ib_qp *qp;
+	struct ib_device *dev;
+	struct mutex mutex;
+	struct ib_ports_pkeys *ports_pkeys;
+	struct list_head shared_qp_list;
+	void *security;
+	bool destroying;
+	atomic_t error_list_count;
+	struct completion error_complete;
+	int error_comps_pending;
+};
+
+struct ib_ports_pkeys {
+	struct ib_port_pkey main;
+	struct ib_port_pkey alt;
+};
+
+struct ib_dm {
+	struct ib_device *device;
+	u32 length;
+	u32 flags;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+struct ib_mw {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	u32 rkey;
+	enum ib_mw_type type;
+};
+
+enum ib_flow_attr_type {
+	IB_FLOW_ATTR_NORMAL = 0,
+	IB_FLOW_ATTR_ALL_DEFAULT = 1,
+	IB_FLOW_ATTR_MC_DEFAULT = 2,
+	IB_FLOW_ATTR_SNIFFER = 3,
+};
+
+enum ib_flow_spec_type {
+	IB_FLOW_SPEC_ETH = 32,
+	IB_FLOW_SPEC_IB = 34,
+	IB_FLOW_SPEC_IPV4 = 48,
+	IB_FLOW_SPEC_IPV6 = 49,
+	IB_FLOW_SPEC_ESP = 52,
+	IB_FLOW_SPEC_TCP = 64,
+	IB_FLOW_SPEC_UDP = 65,
+	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
+	IB_FLOW_SPEC_GRE = 81,
+	IB_FLOW_SPEC_MPLS = 96,
+	IB_FLOW_SPEC_INNER = 256,
+	IB_FLOW_SPEC_ACTION_TAG = 4096,
+	IB_FLOW_SPEC_ACTION_DROP = 4097,
+	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
+	IB_FLOW_SPEC_ACTION_COUNT = 4099,
+};
+
+struct ib_flow_eth_filter {
+	u8 dst_mac[6];
+	u8 src_mac[6];
+	__be16 ether_type;
+	__be16 vlan_tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_eth {
+	u32 type;
+	u16 size;
+	struct ib_flow_eth_filter val;
+	struct ib_flow_eth_filter mask;
+};
+
+struct ib_flow_ib_filter {
+	__be16 dlid;
+	__u8 sl;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ib {
+	u32 type;
+	u16 size;
+	struct ib_flow_ib_filter val;
+	struct ib_flow_ib_filter mask;
+};
+
+struct ib_flow_ipv4_filter {
+	__be32 src_ip;
+	__be32 dst_ip;
+	u8 proto;
+	u8 tos;
+	u8 ttl;
+	u8 flags;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv4 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv4_filter val;
+	struct ib_flow_ipv4_filter mask;
+};
+
+struct ib_flow_ipv6_filter {
+	u8 src_ip[16];
+	u8 dst_ip[16];
+	__be32 flow_label;
+	u8 next_hdr;
+	u8 traffic_class;
+	u8 hop_limit;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv6 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv6_filter val;
+	struct ib_flow_ipv6_filter mask;
+};
+
+struct ib_flow_tcp_udp_filter {
+	__be16 dst_port;
+	__be16 src_port;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tcp_udp {
+	u32 type;
+	u16 size;
+	struct ib_flow_tcp_udp_filter val;
+	struct ib_flow_tcp_udp_filter mask;
+};
+
+struct ib_flow_tunnel_filter {
+	__be32 tunnel_id;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tunnel {
+	u32 type;
+	u16 size;
+	struct ib_flow_tunnel_filter val;
+	struct ib_flow_tunnel_filter mask;
+};
+
+struct ib_flow_esp_filter {
+	__be32 spi;
+	__be32 seq;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_esp {
+	u32 type;
+	u16 size;
+	struct ib_flow_esp_filter val;
+	struct ib_flow_esp_filter mask;
+};
+
+struct ib_flow_gre_filter {
+	__be16 c_ks_res0_ver;
+	__be16 protocol;
+	__be32 key;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_gre {
+	u32 type;
+	u16 size;
+	struct ib_flow_gre_filter val;
+	struct ib_flow_gre_filter mask;
+};
+
+struct ib_flow_mpls_filter {
+	__be32 tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_mpls {
+	u32 type;
+	u16 size;
+	struct ib_flow_mpls_filter val;
+	struct ib_flow_mpls_filter mask;
+};
+
+struct ib_flow_spec_action_tag {
+	enum ib_flow_spec_type type;
+	u16 size;
+	u32 tag_id;
+};
+
+struct ib_flow_spec_action_drop {
+	enum ib_flow_spec_type type;
+	u16 size;
+};
+
+struct ib_flow_spec_action_handle {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_flow_action *act;
+};
+
+enum ib_flow_action_type {
+	IB_FLOW_ACTION_UNSPECIFIED = 0,
+	IB_FLOW_ACTION_ESP = 1,
+};
+
+struct ib_flow_action {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	enum ib_flow_action_type type;
+	atomic_t usecnt;
+};
+
+struct ib_flow_spec_action_count {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_counters *counters;
+};
+
+struct ib_counters {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+union ib_flow_spec {
+	struct {
+		u32 type;
+		u16 size;
+	};
+	struct ib_flow_spec_eth eth;
+	struct ib_flow_spec_ib ib;
+	struct ib_flow_spec_ipv4 ipv4;
+	struct ib_flow_spec_tcp_udp tcp_udp;
+	struct ib_flow_spec_ipv6 ipv6;
+	struct ib_flow_spec_tunnel tunnel;
+	struct ib_flow_spec_esp esp;
+	struct ib_flow_spec_gre gre;
+	struct ib_flow_spec_mpls mpls;
+	struct ib_flow_spec_action_tag flow_tag;
+	struct ib_flow_spec_action_drop drop;
+	struct ib_flow_spec_action_handle action;
+	struct ib_flow_spec_action_count flow_count;
+};
+
+struct ib_flow_attr {
+	enum ib_flow_attr_type type;
+	u16 size;
+	u16 priority;
+	u32 flags;
+	u8 num_of_specs;
+	u32 port;
+	union ib_flow_spec flows[0];
+};
+
+struct ib_flow {
+	struct ib_qp *qp;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+};
+
+struct ib_pkey_cache;
+
+struct ib_gid_table;
+
+struct ib_port_cache {
+	u64 subnet_prefix;
+	struct ib_pkey_cache *pkey;
+	struct ib_gid_table *gid;
+	u8 lmc;
+	enum ib_port_state port_state;
+};
+
+struct ib_port_immutable {
+	int pkey_tbl_len;
+	int gid_tbl_len;
+	u32 core_cap_flags;
+	u32 max_mad_size;
+};
+
+struct ib_port;
+
+struct ib_port_data {
+	struct ib_device *ib_dev;
+	struct ib_port_immutable immutable;
+	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
+	struct list_head pkey_list;
+	struct ib_port_cache cache;
+	struct net_device *netdev;
+	netdevice_tracker netdev_tracker;
+	struct hlist_node ndev_hash_link;
+	struct rdma_port_counter port_counter;
+	struct ib_port *sysfs;
+};
+
+struct rdma_netdev_alloc_params {
+	size_t sizeof_priv;
+	unsigned int txqs;
+	unsigned int rxqs;
+	void *param;
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
+};
+
+struct ib_counters_read_attr {
+	u64 *counters_buff;
+	u32 ncounters;
+	u32 flags;
+};
+
+struct rdma_user_mmap_entry {
+	struct kref ref;
+	struct ib_ucontext *ucontext;
+	long unsigned int start_pgoff;
+	size_t npages;
+	bool driver_removed;
+};
+
+struct ib_mad_hdr {
+	u8 base_version;
+	u8 mgmt_class;
+	u8 class_version;
+	u8 method;
+	__be16 status;
+	__be16 class_specific;
+	__be64 tid;
+	__be16 attr_id;
+	__be16 resv;
+	__be32 attr_mod;
+};
+
+struct ib_mad {
+	struct ib_mad_hdr mad_hdr;
+	u8 data[232];
+};
+
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+};
+
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int modes_supported[5];
+	struct device *dev;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
+};
+
+struct blk_crypto_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_crypto_profile *profile;
+};
+
+typedef u32 compat_ulong_t;
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_L2TP = 115,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct io_uring_buf bufs[0];
+	};
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_MULTISHOT = 4,
+	IO_URING_F_IOWQ = 8,
+	IO_URING_F_NONBLOCK = -2147483648,
+	IO_URING_F_SQE128 = 256,
+	IO_URING_F_CQE32 = 512,
+	IO_URING_F_IOPOLL = 1024,
+};
+
+struct io_rsrc_node {
+	struct percpu_ref refs;
+	struct list_head node;
+	struct list_head rsrc_list;
+	struct io_rsrc_data *rsrc_data;
+	struct llist_node llist;
+	bool done;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	long unsigned int acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	long unsigned int state;
+	struct completion exited;
+};
+
+struct io_rsrc_put;
+
+typedef void rsrc_put_fn(struct io_ring_ctx *, struct io_rsrc_put *);
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	rsrc_put_fn *do_put;
+	atomic_t refs;
+	struct completion done;
+	bool quiesce;
+};
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 1073741824,
+	REQ_F_ISREG = 2147483648,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 134217728,
+	REQ_F_CQE32_INIT = 67108864,
+	REQ_F_CLEAR_POLLIN = 268435456,
+	REQ_F_HASH_LOCKED = 536870912,
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	struct wait_queue_entry wait;
+};
+
+struct io_cache_entry {
+	struct hlist_node node;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_sqe {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u32 flags;
+	bool force_nonblock;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	long long unsigned int user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_local_work_run {
+	struct trace_entry ent;
+	void *ctx;
+	int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_submit_sqe {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+struct trace_event_data_offsets_io_uring_local_work_run {};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long int);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_sqe)(void *, struct io_kiocb *, bool);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, long long unsigned int, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+typedef void (*btf_trace_io_uring_local_work_run)(void *, void *, int, unsigned int);
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = -529,
+	IOU_STOP_MULTISHOT = -125,
+};
+
+struct io_op_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int iopoll_queue: 1;
+	unsigned int manual_alloc: 1;
+	short unsigned int async_size;
+	const char *name;
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+	void (*fail)(struct io_kiocb *);
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+struct io_rsrc_put {
+	struct list_head list;
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+enum {
+	IO_EVENTFD_OP_SIGNAL_BIT = 0,
+	IO_EVENTFD_OP_FREE_BIT = 1,
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct creds;
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+enum {
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
+};
+
+struct io_msg {
+	struct file *file;
+	struct file *src_file;
+	struct callback_head tw;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	u32 dst_fd;
+	u32 flags;
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 pad;
+	__u64 resv[3];
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u16 nbufs;
+	__u16 bid;
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	long unsigned int account_pages;
+	bool zc_report;
+	bool zc_used;
+	bool zc_copied;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+struct pci_bus;
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+struct pci_dev;
+
+struct pci_ops;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	int domain_nr;
+	char name[48];
+	short unsigned int bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+};
+
+typedef int pci_power_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct aer_stats;
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pci_sriov;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int subsystem_vendor;
+	short unsigned int subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u16 aer_cap;
+	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	long unsigned int *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	unsigned int imm_ready: 1;
+	u8 pm_cap;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[17];
+	struct resource driver_exclusive_resource;
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	int rom_attr_enabled;
+	struct bin_attribute *res_attr[17];
+	struct bin_attribute *res_attr_wc[17];
+	unsigned int broken_cmd_compl: 1;
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	union {
+		struct pci_sriov *sriov;
+		struct pci_dev *physfn;
+	};
+	u16 ats_cap;
+	u8 ats_stu;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	long unsigned int priv_flags;
+	u8 reset_methods[7];
+};
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+};
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+	void (*cor_error_detected)(struct pci_dev *);
+};
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+typedef u8 uint8_t;
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+typedef u16 uint16_t;
+
+typedef struct {
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+typedef union {
+	long long unsigned int table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
+
+typedef uint8_t BYTE;
+
+typedef uint16_t U16;
+
+typedef uint32_t U32;
+
+typedef uint64_t U64;
+
+typedef uintptr_t uptrval;
+
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
+
+typedef enum {
+	endOnOutputSize = 0,
+	endOnInputSize = 1,
+} endCondition_directive;
+
+typedef enum {
+	decode_full_block = 0,
+	partial_decode = 1,
+} earlyEnd_directive;
+
+typedef s16 int16_t;
+
+typedef uint8_t U8;
+
+typedef int16_t S16;
+
+typedef size_t HUF_CElt;
+
+typedef enum {
+	HUF_repeat_none = 0,
+	HUF_repeat_check = 1,
+	HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef struct {
+	HUF_CElt CTable[257];
+	HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+typedef struct {
+	U32 offset;
+	U32 litLength;
+	U32 matchLength;
+} rawSeq;
+
+typedef struct {
+	rawSeq *seq;
+	size_t pos;
+	size_t posInSequence;
+	size_t size;
+	size_t capacity;
+} rawSeqStore_t;
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitPos;
+	char *startPtr;
+	char *ptr;
+	char *endPtr;
+} BIT_CStream_t;
+
+typedef enum {
+	FSE_repeat_none = 0,
+	FSE_repeat_check = 1,
+	FSE_repeat_valid = 2,
+} FSE_repeat;
+
+typedef struct {
+	ptrdiff_t value;
+	const void *stateTable;
+	const void *symbolTT;
+	unsigned int stateLog;
+} FSE_CState_t;
+
+typedef struct {
+	int deltaFindState;
+	U32 deltaNbBits;
+} FSE_symbolCompressionTransform;
+
+struct seqDef_s {
+	U32 offBase;
+	U16 litLength;
+	U16 mlBase;
+};
+
+typedef struct seqDef_s seqDef;
+
+typedef enum {
+	ZSTD_defaultDisallowed = 0,
+	ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+typedef struct {
+	S16 norm[53];
+	U32 wksp[285];
+} ZSTD_BuildCTableWksp;
+
+typedef enum {
+	ZSTD_ps_auto = 0,
+	ZSTD_ps_enable = 1,
+	ZSTD_ps_disable = 2,
+} ZSTD_paramSwitch_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef enum {
+	ZSTD_llt_none = 0,
+	ZSTD_llt_literalLength = 1,
+	ZSTD_llt_matchLength = 2,
+} ZSTD_longLengthType_e;
+
+typedef struct {
+	seqDef *sequencesStart;
+	seqDef *sequences;
+	BYTE *litStart;
+	BYTE *lit;
+	BYTE *llCode;
+	BYTE *mlCode;
+	BYTE *ofCode;
+	size_t maxNbSeq;
+	size_t maxNbLit;
+	ZSTD_longLengthType_e longLengthType;
+	U32 longLengthPos;
+} seqStore_t;
+
+typedef struct {
+	FSE_CTable offcodeCTable[193];
+	FSE_CTable matchlengthCTable[363];
+	FSE_CTable litlengthCTable[329];
+	FSE_repeat offcode_repeatMode;
+	FSE_repeat matchlength_repeatMode;
+	FSE_repeat litlength_repeatMode;
+} ZSTD_fseCTables_t;
+
+typedef struct {
+	ZSTD_hufCTables_t huf;
+	ZSTD_fseCTables_t fse;
+} ZSTD_entropyCTables_t;
+
+typedef struct {
+	U32 off;
+	U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+	int price;
+	U32 off;
+	U32 mlen;
+	U32 litlen;
+	U32 rep[3];
+} ZSTD_optimal_t;
+
+typedef enum {
+	zop_dynamic = 0,
+	zop_predef = 1,
+} ZSTD_OptPrice_e;
+
+typedef struct {
+	unsigned int *litFreq;
+	unsigned int *litLengthFreq;
+	unsigned int *matchLengthFreq;
+	unsigned int *offCodeFreq;
+	ZSTD_match_t *matchTable;
+	ZSTD_optimal_t *priceTable;
+	U32 litSum;
+	U32 litLengthSum;
+	U32 matchLengthSum;
+	U32 offCodeSum;
+	U32 litSumBasePrice;
+	U32 litLengthSumBasePrice;
+	U32 matchLengthSumBasePrice;
+	U32 offCodeSumBasePrice;
+	ZSTD_OptPrice_e priceType;
+	const ZSTD_entropyCTables_t *symbolCosts;
+	ZSTD_paramSwitch_e literalCompressionMode;
+} optState_t;
+
+typedef struct {
+	const BYTE *nextSrc;
+	const BYTE *base;
+	const BYTE *dictBase;
+	U32 dictLimit;
+	U32 lowLimit;
+	U32 nbOverflowCorrections;
+} ZSTD_window_t;
+
+struct ZSTD_matchState_t;
+
+typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+struct ZSTD_matchState_t {
+	ZSTD_window_t window;
+	U32 loadedDictEnd;
+	U32 nextToUpdate;
+	U32 hashLog3;
+	U32 rowHashLog;
+	U16 *tagTable;
+	U32 hashCache[8];
+	U32 *hashTable;
+	U32 *hashTable3;
+	U32 *chainTable;
+	U32 forceNonContiguous;
+	int dedicatedDictSearch;
+	optState_t opt;
+	const ZSTD_matchState_t *dictMatchState;
+	ZSTD_compressionParameters cParams;
+	const rawSeqStore_t *ldmSeqStore;
+};
+
+typedef enum {
+	ZSTD_dtlm_fast = 0,
+	ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef enum {
+	ZSTD_noDict = 0,
+	ZSTD_extDict = 1,
+	ZSTD_dictMatchState = 2,
+	ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+struct repcodes_s {
+	U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef U32 (*ZSTD_getAllMatchesFn)(ZSTD_match_t *, ZSTD_matchState_t *, U32 *, const BYTE *, const BYTE *, const U32 *, const U32, const U32);
+
+typedef struct {
+	rawSeqStore_t seqStore;
+	U32 startPosInBlock;
+	U32 endPosInBlock;
+	U32 offset;
+} ZSTD_optLdm_t;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	long long unsigned int frameContentSize;
+	long long unsigned int windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef enum {
+	ZSTD_use_indefinitely = -1,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef enum {
+	ZSTD_not_in_dst = 0,
+	ZSTD_in_dst = 1,
+	ZSTD_split = 2,
+} ZSTD_litLocation_e;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE *litBuffer;
+	const BYTE *litBufferEnd;
+	ZSTD_litLocation_e litBufferLocation;
+	BYTE litExtraBuffer[65568];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx___2;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef enum {
+	not_streaming = 0,
+	is_streaming = 1,
+} streaming_operation;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+} seqState_t;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+struct xz_dec_microlzma;
+
+struct xz_dec;
+
+enum auditsc_class_t {
+	AUDITSC_NATIVE = 0,
+	AUDITSC_COMPAT = 1,
+	AUDITSC_OPEN = 2,
+	AUDITSC_OPENAT = 3,
+	AUDITSC_SOCKETCALL = 4,
+	AUDITSC_EXECVE = 5,
+	AUDITSC_OPENAT2 = 6,
+	AUDITSC_NVALS = 7,
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+struct cpu_rmap {
+	struct kref refcount;
+	u16 size;
+	u16 used;
+	void **obj;
+	struct {
+		u16 index;
+		u16 dist;
+	} near[0];
+};
+
+struct irq_glue {
+	struct irq_affinity_notify notify;
+	struct cpu_rmap *rmap;
+	u16 index;
+};
+
+typedef mpi_limb_t *mpi_ptr_t;
+
+typedef int mpi_size_t;
+
+typedef mpi_limb_t UWtype;
+
+typedef unsigned int UHWtype;
+
+enum gcry_mpi_constants {
+	MPI_C_ZERO = 0,
+	MPI_C_ONE = 1,
+	MPI_C_TWO = 2,
+	MPI_C_THREE = 3,
+	MPI_C_FOUR = 4,
+	MPI_C_EIGHT = 5,
+};
+
+struct word_at_a_time {
+	const long unsigned int one_bits;
+	const long unsigned int high_bits;
+};
+
+struct sg_pool {
+	size_t size;
+	char *name;
+	struct kmem_cache *slab;
+	mempool_t *pool;
+};
+
+struct xbc_node {
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+typedef long int word_type;
+
+struct DWstruct {
+	int low;
+	int high;
+};
+
+typedef union {
+	struct DWstruct s;
+	long long int ll;
+} DWunion;
+
+typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+struct acpi_subtable_header {
+	u8 type;
+	u8 length;
+};
+
+struct acpi_madt_lio_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u64 address;
+	u16 size;
+	u8 cascade[2];
+	u32 cascade_map[2];
+} __attribute__((packed));
+
+struct acpi_madt_eio_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u8 cascade;
+	u8 node;
+	u64 node_map;
+} __attribute__((packed));
+
+struct acpi_table_header {
+	char signature[4];
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	char oem_id[6];
+	char oem_table_id[8];
+	u32 oem_revision;
+	char asl_compiler_id[4];
+	u32 asl_compiler_revision;
+};
+
+struct acpi_cedt_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+struct acpi_hmat_structure {
+	u16 type;
+	u16 reserved;
+	u32 length;
+};
+
+enum acpi_madt_type {
+	ACPI_MADT_TYPE_LOCAL_APIC = 0,
+	ACPI_MADT_TYPE_IO_APIC = 1,
+	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
+	ACPI_MADT_TYPE_NMI_SOURCE = 3,
+	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
+	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
+	ACPI_MADT_TYPE_IO_SAPIC = 6,
+	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
+	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
+	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
+	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
+	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
+	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
+	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
+	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
+	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
+	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
+	ACPI_MADT_TYPE_CORE_PIC = 17,
+	ACPI_MADT_TYPE_LIO_PIC = 18,
+	ACPI_MADT_TYPE_HT_PIC = 19,
+	ACPI_MADT_TYPE_EIO_PIC = 20,
+	ACPI_MADT_TYPE_MSI_PIC = 21,
+	ACPI_MADT_TYPE_BIO_PIC = 22,
+	ACPI_MADT_TYPE_LPC_PIC = 23,
+	ACPI_MADT_TYPE_RESERVED = 24,
+	ACPI_MADT_TYPE_OEM_RESERVED = 128,
+};
+
+enum acpi_madt_core_pic_version {
+	ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
+	ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
+	ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2,
+};
+
+struct acpi_prmt_module_header {
+	u16 revision;
+	u16 length;
+};
+
+enum acpi_irq_model_id {
+	ACPI_IRQ_MODEL_PIC = 0,
+	ACPI_IRQ_MODEL_IOAPIC = 1,
+	ACPI_IRQ_MODEL_IOSAPIC = 2,
+	ACPI_IRQ_MODEL_PLATFORM = 3,
+	ACPI_IRQ_MODEL_GIC = 4,
+	ACPI_IRQ_MODEL_LPIC = 5,
+	ACPI_IRQ_MODEL_COUNT = 6,
+};
+
+union acpi_subtable_headers {
+	struct acpi_subtable_header common;
+	struct acpi_hmat_structure hmat;
+	struct acpi_prmt_module_header prmt;
+	struct acpi_cedt_header cedt;
+};
+
+typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
+
+typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
+
+struct acpi_probe_entry;
+
+typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
+
+struct acpi_probe_entry {
+	__u8 id[5];
+	__u8 type;
+	acpi_probe_entry_validate_subtbl subtable_valid;
+	union {
+		acpi_tbl_table_handler probe_table;
+		acpi_tbl_entry_handler probe_subtbl;
+	};
+	kernel_ulong_t driver_data;
+};
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+struct acpi_madt_lpc_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u64 address;
+	u16 size;
+	u8 cascade;
+} __attribute__((packed));
+
+struct acpi_madt_bio_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u64 address;
+	u16 size;
+	u16 id;
+	u16 gsi_base;
+} __attribute__((packed));
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+struct pch_pic {
+	void *base;
+	struct irq_domain *pic_domain;
+	u32 ht_vec_base;
+	raw_spinlock_t pic_lock;
+	u32 vec_count;
+	u32 gsi_base;
+	u32 saved_vec_en[2];
+	u32 saved_vec_pol[2];
+	u32 saved_vec_edge[2];
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
+	IRQ_DOMAIN_FLAG_NO_MAP = 64,
+	IRQ_DOMAIN_FLAG_MSI_PARENT = 256,
+	IRQ_DOMAIN_FLAG_MSI_DEVICE = 512,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+enum pin_config_param {
+	PIN_CONFIG_BIAS_BUS_HOLD = 0,
+	PIN_CONFIG_BIAS_DISABLE = 1,
+	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
+	PIN_CONFIG_BIAS_PULL_DOWN = 3,
+	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
+	PIN_CONFIG_BIAS_PULL_UP = 5,
+	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
+	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
+	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
+	PIN_CONFIG_DRIVE_STRENGTH = 9,
+	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
+	PIN_CONFIG_INPUT_DEBOUNCE = 11,
+	PIN_CONFIG_INPUT_ENABLE = 12,
+	PIN_CONFIG_INPUT_SCHMITT = 13,
+	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
+	PIN_CONFIG_OUTPUT = 17,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
+	PIN_CONFIG_END = 127,
+	PIN_CONFIG_MAX = 255,
+};
+
+struct gpio_chip;
+
+union gpio_irq_fwspec;
+
+struct gpio_irq_chip {
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	const struct irq_domain_ops *domain_ops;
+	struct fwnode_handle *fwnode;
+	struct irq_domain *parent_domain;
+	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
+	int (*populate_parent_alloc_arg)(struct gpio_chip *, union gpio_irq_fwspec *, unsigned int, unsigned int);
+	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
+	struct irq_domain_ops child_irq_domain_ops;
+	irq_flow_handler_t handler;
+	unsigned int default_type;
+	struct lock_class_key *lock_key;
+	struct lock_class_key *request_key;
+	irq_flow_handler_t parent_handler;
+	union {
+		void *parent_handler_data;
+		void **parent_handler_data_array;
+	};
+	unsigned int num_parents;
+	unsigned int *parents;
+	unsigned int *map;
+	bool threaded;
+	bool per_parent_data;
+	bool initialized;
+	int (*init_hw)(struct gpio_chip *);
+	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	long unsigned int *valid_mask;
+	unsigned int first;
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+};
+
+struct gpio_device;
+
+struct gpio_chip {
+	const char *label;
+	struct gpio_device *gpiodev;
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	struct module *owner;
+	int (*request)(struct gpio_chip *, unsigned int);
+	void (*free)(struct gpio_chip *, unsigned int);
+	int (*get_direction)(struct gpio_chip *, unsigned int);
+	int (*direction_input)(struct gpio_chip *, unsigned int);
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	int (*get)(struct gpio_chip *, unsigned int);
+	int (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	void (*set)(struct gpio_chip *, unsigned int, int);
+	void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
+	int (*to_irq)(struct gpio_chip *, unsigned int);
+	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int base;
+	u16 ngpio;
+	u16 offset;
+	const char * const *names;
+	bool can_sleep;
+	struct gpio_irq_chip irq;
+	long unsigned int *valid_mask;
+	struct device_node *of_node;
+	unsigned int of_gpio_n_cells;
+	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+	int (*of_gpio_ranges_fallback)(struct gpio_chip *, struct device_node *);
+};
+
+struct msi_alloc_info {
+	struct msi_desc *desc;
+	irq_hw_number_t hwirq;
+	long unsigned int flags;
+	union {
+		long unsigned int ul;
+		void *ptr;
+	} scratchpad[2];
+};
+
+typedef struct msi_alloc_info msi_alloc_info_t;
+
+union gpio_irq_fwspec {
+	struct irq_fwspec fwspec;
+	msi_alloc_info_t msiinfo;
+};
+
+struct gpio_desc;
+
+struct gpio_device {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	struct device *mockdev;
+	struct module *owner;
+	struct gpio_chip *chip;
+	struct gpio_desc *descs;
+	int base;
+	u16 ngpio;
+	const char *label;
+	void *data;
+	struct list_head list;
+	struct blocking_notifier_head notifier;
+	struct rw_semaphore sem;
+};
+
+struct gpio_array;
+
+struct gpio_descs {
+	struct gpio_array *info;
+	unsigned int ndescs;
+	struct gpio_desc *desc[0];
+};
+
+struct gpio_array {
+	struct gpio_desc **desc;
+	unsigned int size;
+	struct gpio_chip *chip;
+	long unsigned int *get_mask;
+	long unsigned int *set_mask;
+	long unsigned int invert_mask[0];
+};
+
+struct gpio_desc {
+	struct gpio_device *gdev;
+	long unsigned int flags;
+	const char *label;
+	const char *name;
+	struct device_node *hog;
+	unsigned int debounce_period_us;
+};
+
+enum gpiod_flags {
+	GPIOD_ASIS = 0,
+	GPIOD_IN = 1,
+	GPIOD_OUT_LOW = 3,
+	GPIOD_OUT_HIGH = 7,
+	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
+	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
+};
+
+enum gpio_lookup_flags {
+	GPIO_ACTIVE_HIGH = 0,
+	GPIO_ACTIVE_LOW = 1,
+	GPIO_OPEN_DRAIN = 2,
+	GPIO_OPEN_SOURCE = 4,
+	GPIO_PERSISTENT = 0,
+	GPIO_TRANSITORY = 8,
+	GPIO_PULL_UP = 16,
+	GPIO_PULL_DOWN = 32,
+	GPIO_PULL_DISABLE = 64,
+	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
+};
+
+struct gpiod_lookup {
+	const char *key;
+	u16 chip_hwnum;
+	const char *con_id;
+	unsigned int idx;
+	long unsigned int flags;
+};
+
+struct gpiod_lookup_table {
+	struct list_head list;
+	const char *dev_id;
+	struct gpiod_lookup table[0];
+};
+
+struct gpiod_hog {
+	struct list_head list;
+	const char *chip_label;
+	u16 chip_hwnum;
+	const char *line_name;
+	long unsigned int lflags;
+	int dflags;
+};
+
+enum {
+	GPIOLINE_CHANGED_REQUESTED = 1,
+	GPIOLINE_CHANGED_RELEASED = 2,
+	GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct trace_event_raw_gpio_direction {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int in;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_gpio_value {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int get;
+	int value;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_gpio_direction {};
+
+struct trace_event_data_offsets_gpio_value {};
+
+typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry;
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+enum pwm_polarity {
+	PWM_POLARITY_NORMAL = 0,
+	PWM_POLARITY_INVERSED = 1,
+};
+
+struct pwm_args {
+	u64 period;
+	enum pwm_polarity polarity;
+};
+
+enum {
+	PWMF_REQUESTED = 1,
+	PWMF_EXPORTED = 2,
+};
+
+struct pwm_state {
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	bool usage_power;
+};
+
+struct pwm_chip;
+
+struct pwm_device {
+	const char *label;
+	long unsigned int flags;
+	unsigned int hwpwm;
+	unsigned int pwm;
+	struct pwm_chip *chip;
+	void *chip_data;
+	struct pwm_args args;
+	struct pwm_state state;
+	struct pwm_state last;
+};
+
+struct pwm_ops;
+
+struct pwm_chip {
+	struct device *dev;
+	const struct pwm_ops *ops;
+	int base;
+	unsigned int npwm;
+	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
+	unsigned int of_pwm_n_cells;
+	struct list_head list;
+	struct pwm_device *pwms;
+};
+
+struct pwm_capture {
+	unsigned int period;
+	unsigned int duty_cycle;
+};
+
+struct pwm_ops {
+	int (*request)(struct pwm_chip *, struct pwm_device *);
+	void (*free)(struct pwm_chip *, struct pwm_device *);
+	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
+	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
+	int (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
+	struct module *owner;
+};
+
+struct pwm_export {
+	struct device child;
+	struct pwm_device *pwm;
+	struct mutex lock;
+	struct pwm_state suspend;
+};
+
+struct pci_sriov {
+	int pos;
+	int nres;
+	u32 cap;
+	u16 ctrl;
+	u16 total_VFs;
+	u16 initial_VFs;
+	u16 num_VFs;
+	u16 offset;
+	u16 stride;
+	u16 vf_device;
+	u32 pgsz;
+	u8 link;
+	u8 max_VF_buses;
+	u16 driver_max_VFs;
+	struct pci_dev *dev;
+	struct pci_dev *self;
+	u32 class;
+	u8 hdr_type;
+	u16 subsystem_vendor;
+	u16 subsystem_device;
+	resource_size_t barsz[6];
+	bool drivers_autoprobe;
+};
+
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct bus_type *, char *);
+	ssize_t (*store)(struct bus_type *, const char *, size_t);
+};
+
+struct msi_dev_domain {
+	struct xarray store;
+	struct irq_domain *domain;
+};
+
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	long unsigned int properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct msi_dev_domain __domains[2];
+	long unsigned int __iter_idx;
+};
+
+typedef u64 acpi_io_address;
+
+typedef void *acpi_handle;
+
+typedef u32 acpi_object_type;
+
+union acpi_object {
+	acpi_object_type type;
+	struct {
+		acpi_object_type type;
+		u64 value;
+	} integer;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		char *pointer;
+	} string;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		u8 *pointer;
+	} buffer;
+	struct {
+		acpi_object_type type;
+		u32 count;
+		union acpi_object *elements;
+	} package;
+	struct {
+		acpi_object_type type;
+		acpi_object_type actual_type;
+		acpi_handle handle;
+	} reference;
+	struct {
+		acpi_object_type type;
+		u32 proc_id;
+		acpi_io_address pblk_address;
+		u32 pblk_length;
+	} processor;
+	struct {
+		acpi_object_type type;
+		u32 system_level;
+		u32 resource_order;
+	} power_resource;
+};
+
+struct acpi_device;
+
+struct acpi_hotplug_profile {
+	struct kobject kobj;
+	int (*scan_dependent)(struct acpi_device *);
+	void (*notify_online)(struct acpi_device *);
+	bool enabled: 1;
+	bool demand_offline: 1;
+};
+
+struct acpi_device_status {
+	u32 present: 1;
+	u32 enabled: 1;
+	u32 show_in_ui: 1;
+	u32 functional: 1;
+	u32 battery_present: 1;
+	u32 reserved: 27;
+};
+
+struct acpi_device_flags {
+	u32 dynamic_status: 1;
+	u32 removable: 1;
+	u32 ejectable: 1;
+	u32 power_manageable: 1;
+	u32 match_driver: 1;
+	u32 initialized: 1;
+	u32 visited: 1;
+	u32 hotplug_notify: 1;
+	u32 is_dock_station: 1;
+	u32 of_compatible_ok: 1;
+	u32 coherent_dma: 1;
+	u32 cca_seen: 1;
+	u32 enumeration_by_parent: 1;
+	u32 honor_deps: 1;
+	u32 reserved: 18;
+};
+
+typedef char acpi_bus_id[8];
+
+struct acpi_pnp_type {
+	u32 hardware_id: 1;
+	u32 bus_address: 1;
+	u32 platform_id: 1;
+	u32 backlight: 1;
+	u32 reserved: 28;
+};
+
+typedef u64 acpi_bus_address;
+
+typedef char acpi_device_name[40];
+
+typedef char acpi_device_class[20];
+
+struct acpi_device_pnp {
+	acpi_bus_id bus_id;
+	int instance_no;
+	struct acpi_pnp_type type;
+	acpi_bus_address bus_address;
+	char *unique_id;
+	struct list_head ids;
+	acpi_device_name device_name;
+	acpi_device_class device_class;
+	union acpi_object *str_obj;
+};
+
+struct acpi_device_power_flags {
+	u32 explicit_get: 1;
+	u32 power_resources: 1;
+	u32 inrush_current: 1;
+	u32 power_removed: 1;
+	u32 ignore_parent: 1;
+	u32 dsw_present: 1;
+	u32 reserved: 26;
+};
+
+struct acpi_device_power_state {
+	struct {
+		u8 valid: 1;
+		u8 explicit_set: 1;
+		u8 reserved: 6;
+	} flags;
+	int power;
+	int latency;
+	struct list_head resources;
+};
+
+struct acpi_device_power {
+	int state;
+	struct acpi_device_power_flags flags;
+	struct acpi_device_power_state states[5];
+	u8 state_for_enumeration;
+};
+
+struct acpi_device_wakeup_flags {
+	u8 valid: 1;
+	u8 notifier_present: 1;
+};
+
+struct acpi_device_wakeup_context {
+	void (*func)(struct acpi_device_wakeup_context *);
+	struct device *dev;
+};
+
+struct acpi_device_wakeup {
+	acpi_handle gpe_device;
+	u64 gpe_number;
+	u64 sleep_state;
+	struct list_head resources;
+	struct acpi_device_wakeup_flags flags;
+	struct acpi_device_wakeup_context context;
+	struct wakeup_source *ws;
+	int prepare_count;
+	int enable_count;
+};
+
+struct acpi_device_perf_flags {
+	u8 reserved: 8;
+};
+
+struct acpi_device_perf_state;
+
+struct acpi_device_perf {
+	int state;
+	struct acpi_device_perf_flags flags;
+	int state_count;
+	struct acpi_device_perf_state *states;
+};
+
+struct acpi_device_dir {
+	struct proc_dir_entry *entry;
+};
+
+struct acpi_device_data {
+	const union acpi_object *pointer;
+	struct list_head properties;
+	const union acpi_object *of_compatible;
+	struct list_head subnodes;
+};
+
+struct acpi_scan_handler;
+
+struct acpi_hotplug_context;
+
+struct acpi_gpio_mapping;
+
+struct acpi_device {
+	u32 pld_crc;
+	int device_type;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct list_head wakeup_list;
+	struct list_head del_list;
+	struct acpi_device_status status;
+	struct acpi_device_flags flags;
+	struct acpi_device_pnp pnp;
+	struct acpi_device_power power;
+	struct acpi_device_wakeup wakeup;
+	struct acpi_device_perf performance;
+	struct acpi_device_dir dir;
+	struct acpi_device_data data;
+	struct acpi_scan_handler *handler;
+	struct acpi_hotplug_context *hp;
+	const struct acpi_gpio_mapping *driver_gpios;
+	void *driver_data;
+	struct device dev;
+	unsigned int physical_node_count;
+	unsigned int dep_unmet;
+	struct list_head physical_node_list;
+	struct mutex physical_node_lock;
+	void (*remove)(struct acpi_device *);
+};
+
+struct acpi_scan_handler {
+	const struct acpi_device_id *ids;
+	struct list_head list_node;
+	bool (*match)(const char *, const struct acpi_device_id **);
+	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
+	void (*detach)(struct acpi_device *);
+	void (*bind)(struct device *);
+	void (*unbind)(struct device *);
+	struct acpi_hotplug_profile hotplug;
+};
+
+struct acpi_hotplug_context {
+	struct acpi_device *self;
+	int (*notify)(struct acpi_device *, u32);
+	void (*uevent)(struct acpi_device *, u32);
+	void (*fixup)(struct acpi_device *);
+};
+
+struct acpi_device_perf_state {
+	struct {
+		u8 valid: 1;
+		u8 reserved: 7;
+	} flags;
+	u8 power;
+	u8 performance;
+	int latency;
+};
+
+struct acpi_gpio_params;
+
+struct acpi_gpio_mapping {
+	const char *name;
+	const struct acpi_gpio_params *data;
+	unsigned int size;
+	unsigned int quirks;
+};
+
+enum msi_domain_ids {
+	MSI_DEFAULT_DOMAIN = 0,
+	MSI_SECONDARY_DOMAIN = 1,
+	MSI_MAX_DEVICE_IRQDOMAINS = 2,
+};
+
+union msi_instance_cookie {
+	u64 value;
+	void *ptr;
+};
+
+struct arch_msi_msg_addr_lo {
+	u32 address_lo;
+};
+
+typedef struct arch_msi_msg_addr_lo arch_msi_msg_addr_lo_t;
+
+struct arch_msi_msg_addr_hi {
+	u32 address_hi;
+};
+
+typedef struct arch_msi_msg_addr_hi arch_msi_msg_addr_hi_t;
+
+struct arch_msi_msg_data {
+	u32 data;
+};
+
+typedef struct arch_msi_msg_data arch_msi_msg_data_t;
+
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
+};
+
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+union msi_domain_cookie {
+	u64 value;
+	void *ptr;
+	void *iobase;
+};
+
+struct msi_desc_data {
+	union msi_domain_cookie dcookie;
+	union msi_instance_cookie icookie;
+};
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	union {
+		struct pci_msi_desc pci;
+		struct msi_desc_data data;
+	};
+};
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*prepare_desc)(struct irq_domain *, msi_alloc_info_t *, struct msi_desc *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+	void (*msi_post_free)(struct irq_domain *, struct device *);
+};
+
+struct msi_domain_info {
+	u32 flags;
+	enum irq_domain_bus_token bus_token;
+	unsigned int hwsize;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int no_inc_mrrs: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
+};
+
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+struct hotplug_slot_ops {
+	int (*enable_slot)(struct hotplug_slot *);
+	int (*disable_slot)(struct hotplug_slot *);
+	int (*set_attention_status)(struct hotplug_slot *, u8);
+	int (*hardware_test)(struct hotplug_slot *, u32);
+	int (*get_power_status)(struct hotplug_slot *, u8 *);
+	int (*get_attention_status)(struct hotplug_slot *, u8 *);
+	int (*get_latch_status)(struct hotplug_slot *, u8 *);
+	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
+	int (*reset_slot)(struct hotplug_slot *, bool);
+};
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_ACTIVATE_EARLY = 4,
+	MSI_FLAG_MUST_REACTIVATE = 8,
+	MSI_FLAG_DEV_SYSFS = 16,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 32,
+	MSI_FLAG_FREE_MSI_DESCS = 64,
+	MSI_FLAG_NOMASK_QUIRK = 128,
+	MSI_GENERIC_FLAGS_MASK = 65535,
+	MSI_DOMAIN_FLAGS_MASK = 4294901760,
+	MSI_FLAG_MULTI_PCI_MSI = 65536,
+	MSI_FLAG_PCI_MSIX = 131072,
+	MSI_FLAG_LEVEL_CAPABLE = 262144,
+	MSI_FLAG_MSIX_CONTIGUOUS = 524288,
+	MSI_FLAG_PCI_MSIX_ALLOC_DYN = 1048576,
+	MSI_FLAG_PCI_IMS = 2097152,
+};
+
+enum support_mode {
+	ALLOW_LEGACY = 0,
+	DENY_LEGACY = 1,
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct pcie_device {
+	int irq;
+	struct pci_dev *port;
+	u32 service;
+	void *priv_data;
+	struct device device;
+};
+
+struct pcie_port_service_driver {
+	const char *name;
+	int (*probe)(struct pcie_device *);
+	void (*remove)(struct pcie_device *);
+	int (*suspend)(struct pcie_device *);
+	int (*resume_noirq)(struct pcie_device *);
+	int (*resume)(struct pcie_device *);
+	int (*runtime_suspend)(struct pcie_device *);
+	int (*runtime_resume)(struct pcie_device *);
+	int (*slot_reset)(struct pcie_device *);
+	int port_type;
+	u32 service;
+	struct device_driver driver;
+};
+
+struct portdrv_service_data {
+	struct pcie_port_service_driver *drv;
+	struct device *dev;
+	u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+struct pci_filp_private {
+	enum pci_mmap_state mmap_state;
+	int write_combine;
+};
+
+struct controller {
+	struct pcie_device *pcie;
+	u32 slot_cap;
+	unsigned int inband_presence_disabled: 1;
+	u16 slot_ctrl;
+	struct mutex ctrl_lock;
+	long unsigned int cmd_started;
+	unsigned int cmd_busy: 1;
+	wait_queue_head_t queue;
+	atomic_t pending_events;
+	unsigned int notification_enabled: 1;
+	unsigned int power_fault_detected;
+	struct task_struct *poll_thread;
+	u8 state;
+	struct mutex state_lock;
+	struct delayed_work button_work;
+	struct hotplug_slot hotplug_slot;
+	struct rw_semaphore reset_lock;
+	unsigned int depth;
+	unsigned int ist_running;
+	int request_result;
+	wait_queue_head_t requester;
+};
+
+struct controller___2;
+
+struct hpc_ops;
+
+struct slot {
+	u8 bus;
+	u8 device;
+	u16 status;
+	u32 number;
+	u8 is_a_board;
+	u8 state;
+	u8 attention_save;
+	u8 presence_save;
+	u8 latch_save;
+	u8 pwr_save;
+	struct controller___2 *ctrl;
+	const struct hpc_ops *hpc_ops;
+	struct hotplug_slot hotplug_slot;
+	struct list_head slot_list;
+	struct delayed_work work;
+	struct mutex lock;
+	struct workqueue_struct *wq;
+	u8 hp_slot;
+};
+
+struct controller___2 {
+	struct mutex crit_sect;
+	struct mutex cmd_lock;
+	int num_slots;
+	int slot_num_inc;
+	struct pci_dev *pci_dev;
+	struct list_head slot_list;
+	const struct hpc_ops *hpc_ops;
+	wait_queue_head_t queue;
+	u8 slot_device_offset;
+	u32 pcix_misc2_reg;
+	u32 first_slot;
+	u32 cap_offset;
+	long unsigned int mmio_base;
+	long unsigned int mmio_size;
+	void *creg;
+	struct timer_list poll_timer;
+};
+
+struct hpc_ops {
+	int (*power_on_slot)(struct slot *);
+	int (*slot_enable)(struct slot *);
+	int (*slot_disable)(struct slot *);
+	int (*set_bus_speed_mode)(struct slot *, enum pci_bus_speed);
+	int (*get_power_status)(struct slot *, u8 *);
+	int (*get_attention_status)(struct slot *, u8 *);
+	int (*set_attention_status)(struct slot *, u8);
+	int (*get_latch_status)(struct slot *, u8 *);
+	int (*get_adapter_status)(struct slot *, u8 *);
+	int (*get_adapter_speed)(struct slot *, enum pci_bus_speed *);
+	int (*get_prog_int)(struct slot *, u8 *);
+	int (*query_power_fault)(struct slot *);
+	void (*green_led_on)(struct slot *);
+	void (*green_led_off)(struct slot *);
+	void (*green_led_blink)(struct slot *);
+	void (*release_ctlr)(struct controller___2 *);
+	int (*check_cmd_status)(struct controller___2 *);
+};
+
+enum ctrl_offsets {
+	BASE_OFFSET = 0,
+	SLOT_AVAIL1 = 4,
+	SLOT_AVAIL2 = 8,
+	SLOT_CONFIG = 12,
+	SEC_BUS_CONFIG = 16,
+	MSI_CTRL = 18,
+	PROG_INTERFACE = 19,
+	CMD = 20,
+	CMD_STATUS = 22,
+	INTR_LOC = 24,
+	SERR_LOC = 28,
+	SERR_INTR_ENABLE = 32,
+	SLOT1 = 36,
+};
+
+struct pci_config_window;
+
+struct pci_ecam_ops {
+	unsigned int bus_shift;
+	struct pci_ops pci_ops;
+	int (*init)(struct pci_config_window *);
+};
+
+struct pci_config_window {
+	struct resource res;
+	struct resource busr;
+	unsigned int bus_shift;
+	void *priv;
+	const struct pci_ecam_ops *ops;
+	union {
+		void *win;
+		void **winp;
+	};
+	struct device *parent;
+};
+
+struct rio_device_id {
+	__u16 did;
+	__u16 vid;
+	__u16 asm_did;
+	__u16 asm_vid;
+};
+
+struct rio_switch_ops;
+
+struct rio_dev;
+
+struct rio_switch {
+	struct list_head node;
+	u8 *route_table;
+	u32 port_ok;
+	struct rio_switch_ops *ops;
+	spinlock_t lock;
+	struct rio_dev *nextdev[0];
+};
+
+struct rio_mport;
+
+struct rio_switch_ops {
+	struct module *owner;
+	int (*add_entry)(struct rio_mport *, u16, u8, u16, u16, u8);
+	int (*get_entry)(struct rio_mport *, u16, u8, u16, u16, u8 *);
+	int (*clr_table)(struct rio_mport *, u16, u8, u16);
+	int (*set_domain)(struct rio_mport *, u16, u8, u8);
+	int (*get_domain)(struct rio_mport *, u16, u8, u8 *);
+	int (*em_init)(struct rio_dev *);
+	int (*em_handle)(struct rio_dev *, u8);
+};
+
+struct rio_net;
+
+struct rio_driver;
+
+union rio_pw_msg;
+
+struct rio_dev {
+	struct list_head global_list;
+	struct list_head net_list;
+	struct rio_net *net;
+	bool do_enum;
+	u16 did;
+	u16 vid;
+	u32 device_rev;
+	u16 asm_did;
+	u16 asm_vid;
+	u16 asm_rev;
+	u16 efptr;
+	u32 pef;
+	u32 swpinfo;
+	u32 src_ops;
+	u32 dst_ops;
+	u32 comp_tag;
+	u32 phys_efptr;
+	u32 phys_rmap;
+	u32 em_efptr;
+	u64 dma_mask;
+	struct rio_driver *driver;
+	struct device dev;
+	struct resource riores[16];
+	int (*pwcback)(struct rio_dev *, union rio_pw_msg *, int);
+	u16 destid;
+	u8 hopcount;
+	struct rio_dev *prev;
+	atomic_t state;
+	struct rio_switch rswitch[0];
+};
+
+struct rio_msg {
+	struct resource *res;
+	void (*mcback)(struct rio_mport *, void *, int, int);
+};
+
+struct rio_ops;
+
+struct rio_scan;
+
+struct rio_mport {
+	struct list_head dbells;
+	struct list_head pwrites;
+	struct list_head node;
+	struct list_head nnode;
+	struct rio_net *net;
+	struct mutex lock;
+	struct resource iores;
+	struct resource riores[16];
+	struct rio_msg inb_msg[4];
+	struct rio_msg outb_msg[4];
+	int host_deviceid;
+	struct rio_ops *ops;
+	unsigned char id;
+	unsigned char index;
+	unsigned int sys_size;
+	u32 phys_efptr;
+	u32 phys_rmap;
+	unsigned char name[40];
+	struct device dev;
+	void *priv;
+	struct rio_scan *nscan;
+	atomic_t state;
+	unsigned int pwe_refcnt;
+};
+
+struct rio_net {
+	struct list_head node;
+	struct list_head devices;
+	struct list_head switches;
+	struct list_head mports;
+	struct rio_mport *hport;
+	unsigned char id;
+	struct device dev;
+	void *enum_data;
+	void (*release)(struct rio_net *);
+};
+
+struct rio_driver {
+	struct list_head node;
+	char *name;
+	const struct rio_device_id *id_table;
+	int (*probe)(struct rio_dev *, const struct rio_device_id *);
+	void (*remove)(struct rio_dev *);
+	void (*shutdown)(struct rio_dev *);
+	int (*suspend)(struct rio_dev *, u32);
+	int (*resume)(struct rio_dev *);
+	int (*enable_wake)(struct rio_dev *, u32, int);
+	struct device_driver driver;
+};
+
+union rio_pw_msg {
+	struct {
+		u32 comptag;
+		u32 errdetect;
+		u32 is_port;
+		u32 ltlerrdet;
+		u32 padding[12];
+	} em;
+	u32 raw[16];
+};
+
+struct rio_mport_attr;
+
+struct rio_ops {
+	int (*lcread)(struct rio_mport *, int, u32, int, u32 *);
+	int (*lcwrite)(struct rio_mport *, int, u32, int, u32);
+	int (*cread)(struct rio_mport *, int, u16, u8, u32, int, u32 *);
+	int (*cwrite)(struct rio_mport *, int, u16, u8, u32, int, u32);
+	int (*dsend)(struct rio_mport *, int, u16, u16);
+	int (*pwenable)(struct rio_mport *, int);
+	int (*open_outb_mbox)(struct rio_mport *, void *, int, int);
+	void (*close_outb_mbox)(struct rio_mport *, int);
+	int (*open_inb_mbox)(struct rio_mport *, void *, int, int);
+	void (*close_inb_mbox)(struct rio_mport *, int);
+	int (*add_outb_message)(struct rio_mport *, struct rio_dev *, int, void *, size_t);
+	int (*add_inb_buffer)(struct rio_mport *, int, void *);
+	void * (*get_inb_message)(struct rio_mport *, int);
+	int (*map_inb)(struct rio_mport *, dma_addr_t, u64, u64, u32);
+	void (*unmap_inb)(struct rio_mport *, dma_addr_t);
+	int (*query_mport)(struct rio_mport *, struct rio_mport_attr *);
+	int (*map_outb)(struct rio_mport *, u16, u64, u32, u32, dma_addr_t *);
+	void (*unmap_outb)(struct rio_mport *, u16, u64);
+};
+
+struct rio_scan {
+	struct module *owner;
+	int (*enumerate)(struct rio_mport *, u32);
+	int (*discover)(struct rio_mport *, u32);
+};
+
+struct rio_mport_attr {
+	int flags;
+	int link_speed;
+	int link_width;
+	int dma_max_sge;
+	int dma_max_size;
+	int dma_align;
+};
+
+struct rio_dbell {
+	struct list_head node;
+	struct resource *res;
+	void (*dinb)(struct rio_mport *, void *, u16, u16, u16);
+	void *dev_id;
+};
+
+enum rio_link_speed {
+	RIO_LINK_DOWN = 0,
+	RIO_LINK_125 = 1,
+	RIO_LINK_250 = 2,
+	RIO_LINK_312 = 3,
+	RIO_LINK_500 = 4,
+	RIO_LINK_625 = 5,
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct tsi721_dma_desc {
+	__le32 type_id;
+	__le32 bcount;
+	union {
+		__le32 raddr_lo;
+		__le32 next_lo;
+	};
+	union {
+		__le32 raddr_hi;
+		__le32 next_hi;
+	};
+	union {
+		struct {
+			__le32 bufptr_lo;
+			__le32 bufptr_hi;
+			__le32 s_dist;
+			__le32 s_size;
+		} t1;
+		__le32 data[4];
+		u32 reserved[4];
+	};
+};
+
+struct tsi721_imsg_desc {
+	__le32 type_id;
+	__le32 msg_info;
+	__le32 bufptr_lo;
+	__le32 bufptr_hi;
+	u32 reserved[12];
+};
+
+struct tsi721_omsg_desc {
+	__le32 type_id;
+	__le32 msg_info;
+	union {
+		__le32 bufptr_lo;
+		__le32 next_lo;
+	};
+	union {
+		__le32 bufptr_hi;
+		__le32 next_hi;
+	};
+};
+
+enum dma_dtype {
+	DTYPE1 = 1,
+	DTYPE2 = 2,
+	DTYPE3 = 3,
+	DTYPE4 = 4,
+	DTYPE5 = 5,
+	DTYPE6 = 6,
+};
+
+enum dma_rtype {
+	NREAD = 0,
+	LAST_NWRITE_R = 1,
+	ALL_NWRITE = 2,
+	ALL_NWRITE_R = 3,
+	MAINT_RD = 4,
+	MAINT_WR = 5,
+};
+
+struct tsi721_bdma_maint {
+	int ch_id;
+	int bd_num;
+	void *bd_base;
+	dma_addr_t bd_phys;
+	void *sts_base;
+	dma_addr_t sts_phys;
+	int sts_size;
+};
+
+struct tsi721_imsg_ring {
+	u32 size;
+	void *buf_base;
+	dma_addr_t buf_phys;
+	void *imfq_base;
+	dma_addr_t imfq_phys;
+	void *imd_base;
+	dma_addr_t imd_phys;
+	void *imq_base[512];
+	u32 rx_slot;
+	void *dev_id;
+	u32 fq_wrptr;
+	u32 desc_rdptr;
+	spinlock_t lock;
+};
+
+struct tsi721_omsg_ring {
+	u32 size;
+	void *omd_base;
+	dma_addr_t omd_phys;
+	void *omq_base[512];
+	dma_addr_t omq_phys[512];
+	void *sts_base;
+	dma_addr_t sts_phys;
+	u32 sts_size;
+	u32 sts_rdptr;
+	u32 tx_slot;
+	void *dev_id;
+	u32 wr_count;
+	spinlock_t lock;
+};
+
+enum tsi721_flags {
+	TSI721_USING_MSI = 1,
+	TSI721_USING_MSIX = 2,
+	TSI721_IMSGID_SET = 4,
+};
+
+enum tsi721_msix_vect {
+	TSI721_VECT_IDB = 0,
+	TSI721_VECT_PWRX = 1,
+	TSI721_VECT_OMB0_DONE = 2,
+	TSI721_VECT_OMB1_DONE = 3,
+	TSI721_VECT_OMB2_DONE = 4,
+	TSI721_VECT_OMB3_DONE = 5,
+	TSI721_VECT_OMB0_INT = 6,
+	TSI721_VECT_OMB1_INT = 7,
+	TSI721_VECT_OMB2_INT = 8,
+	TSI721_VECT_OMB3_INT = 9,
+	TSI721_VECT_IMB0_RCV = 10,
+	TSI721_VECT_IMB1_RCV = 11,
+	TSI721_VECT_IMB2_RCV = 12,
+	TSI721_VECT_IMB3_RCV = 13,
+	TSI721_VECT_IMB0_INT = 14,
+	TSI721_VECT_IMB1_INT = 15,
+	TSI721_VECT_IMB2_INT = 16,
+	TSI721_VECT_IMB3_INT = 17,
+	TSI721_VECT_MAX = 18,
+};
+
+struct msix_irq {
+	u16 vector;
+	char irq_name[64];
+};
+
+struct tsi721_ib_win_mapping {
+	struct list_head node;
+	dma_addr_t lstart;
+};
+
+struct tsi721_ib_win {
+	u64 rstart;
+	u32 size;
+	dma_addr_t lstart;
+	bool active;
+	bool xlat;
+	struct list_head mappings;
+};
+
+struct tsi721_obw_bar {
+	u64 base;
+	u64 size;
+	u64 free;
+};
+
+struct tsi721_ob_win {
+	u64 base;
+	u32 size;
+	u16 destid;
+	u64 rstart;
+	bool active;
+	struct tsi721_obw_bar *pbar;
+};
+
+struct tsi721_device {
+	struct pci_dev *pdev;
+	struct rio_mport mport;
+	u32 flags;
+	void *regs;
+	struct msix_irq msix[18];
+	void *odb_base;
+	void *idb_base;
+	dma_addr_t idb_dma;
+	struct work_struct idb_work;
+	u32 db_discard_count;
+	struct work_struct pw_work;
+	struct kfifo pw_fifo;
+	spinlock_t pw_fifo_lock;
+	u32 pw_discard_count;
+	struct tsi721_bdma_maint mdma;
+	int imsg_init[8];
+	struct tsi721_imsg_ring imsg_ring[8];
+	int omsg_init[4];
+	struct tsi721_omsg_ring omsg_ring[4];
+	struct tsi721_ib_win ib_win[8];
+	int ibwin_cnt;
+	struct tsi721_obw_bar p2r_bar[2];
+	struct tsi721_ob_win ob_win[8];
+	int obwin_cnt;
+};
+
+enum con_scroll {
+	SM_UP = 0,
+	SM_DOWN = 1,
+};
+
+enum vc_intensity {
+	VCI_HALF_BRIGHT = 0,
+	VCI_NORMAL = 1,
+	VCI_BOLD = 2,
+	VCI_MASK = 3,
+};
+
+struct vc_data;
+
+struct console_font;
+
+struct consw {
+	struct module *owner;
+	const char * (*con_startup)();
+	void (*con_init)(struct vc_data *, int);
+	void (*con_deinit)(struct vc_data *);
+	void (*con_clear)(struct vc_data *, int, int, int, int);
+	void (*con_putc)(struct vc_data *, int, int, int);
+	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
+	void (*con_cursor)(struct vc_data *, int);
+	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+	int (*con_switch)(struct vc_data *);
+	int (*con_blank)(struct vc_data *, int, int);
+	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
+	int (*con_font_get)(struct vc_data *, struct console_font *);
+	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
+	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+	void (*con_set_palette)(struct vc_data *, const unsigned char *);
+	void (*con_scrolldelta)(struct vc_data *, int);
+	int (*con_set_origin)(struct vc_data *);
+	void (*con_save_screen)(struct vc_data *);
+	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+	void (*con_invert_region)(struct vc_data *, u16 *, int);
+	u16 * (*con_screen_pos)(const struct vc_data *, int);
+	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
+	void (*con_flush_scrollback)(struct vc_data *);
+	int (*con_debug_enter)(struct vc_data *);
+	int (*con_debug_leave)(struct vc_data *);
+};
+
+struct vc_state {
+	unsigned int x;
+	unsigned int y;
+	unsigned char color;
+	unsigned char Gx_charset[2];
+	unsigned int charset: 1;
+	enum vc_intensity intensity;
+	bool italic;
+	bool underline;
+	bool blink;
+	bool reverse;
+};
+
+struct console_font {
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_mode {
+	char mode;
+	char waitv;
+	short int relsig;
+	short int acqsig;
+	short int frsig;
+};
+
+struct uni_pagedict;
+
+struct uni_screen;
+
+struct vc_data {
+	struct tty_port port;
+	struct vc_state state;
+	struct vc_state saved_state;
+	short unsigned int vc_num;
+	unsigned int vc_cols;
+	unsigned int vc_rows;
+	unsigned int vc_size_row;
+	unsigned int vc_scan_lines;
+	unsigned int vc_cell_height;
+	long unsigned int vc_origin;
+	long unsigned int vc_scr_end;
+	long unsigned int vc_visible_origin;
+	unsigned int vc_top;
+	unsigned int vc_bottom;
+	const struct consw *vc_sw;
+	short unsigned int *vc_screenbuf;
+	unsigned int vc_screenbuf_size;
+	unsigned char vc_mode;
+	unsigned char vc_attr;
+	unsigned char vc_def_color;
+	unsigned char vc_ulcolor;
+	unsigned char vc_itcolor;
+	unsigned char vc_halfcolor;
+	unsigned int vc_cursor_type;
+	short unsigned int vc_complement_mask;
+	short unsigned int vc_s_complement_mask;
+	long unsigned int vc_pos;
+	short unsigned int vc_hi_font_mask;
+	struct console_font vc_font;
+	short unsigned int vc_video_erase_char;
+	unsigned int vc_state;
+	unsigned int vc_npar;
+	unsigned int vc_par[16];
+	struct vt_mode vt_mode;
+	struct pid *vt_pid;
+	int vt_newvt;
+	wait_queue_head_t paste_wait;
+	unsigned int vc_disp_ctrl: 1;
+	unsigned int vc_toggle_meta: 1;
+	unsigned int vc_decscnm: 1;
+	unsigned int vc_decom: 1;
+	unsigned int vc_decawm: 1;
+	unsigned int vc_deccm: 1;
+	unsigned int vc_decim: 1;
+	unsigned int vc_priv: 3;
+	unsigned int vc_need_wrap: 1;
+	unsigned int vc_can_do_color: 1;
+	unsigned int vc_report_mouse: 2;
+	unsigned char vc_utf: 1;
+	unsigned char vc_utf_count;
+	int vc_utf_char;
+	long unsigned int vc_tab_stop[4];
+	unsigned char vc_palette[48];
+	short unsigned int *vc_translate;
+	unsigned int vc_resize_user;
+	unsigned int vc_bell_pitch;
+	unsigned int vc_bell_duration;
+	short unsigned int vc_cur_blink_ms;
+	struct vc_data **vc_display_fg;
+	struct uni_pagedict *uni_pagedict;
+	struct uni_pagedict **uni_pagedict_loc;
+	struct uni_screen *vc_uni_screen;
+};
+
+struct vc {
+	struct vc_data *d;
+	struct work_struct SAK_work;
+};
+
+struct vgastate {
+	void *vgabase;
+	long unsigned int membase;
+	__u32 memsize;
+	__u32 flags;
+	__u32 depth;
+	__u32 num_attr;
+	__u32 num_crtc;
+	__u32 num_gfx;
+	__u32 num_seq;
+	void *vidstate;
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	long unsigned int smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	long unsigned int mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+struct backlight_device;
+
+struct fb_info;
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_deferred_io_pageref;
+
+struct fb_deferred_io;
+
+struct fb_ops;
+
+struct apertures_struct;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	struct backlight_device *bl_dev;
+	struct mutex bl_curve_mutex;
+	u8 bl_curve[128];
+	struct delayed_work deferred_work;
+	long unsigned int npagerefs;
+	struct fb_deferred_io_pageref *pagerefs;
+	struct fb_deferred_io *fbdefio;
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	long unsigned int screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	struct apertures_struct *apertures;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+struct fb_deferred_io_pageref {
+	struct page *page;
+	long unsigned int offset;
+	struct list_head list;
+};
+
+struct fb_deferred_io {
+	long unsigned int delay;
+	bool sort_pagereflist;
+	struct mutex lock;
+	struct list_head pagereflist;
+	void (*first_io)(struct fb_info *);
+	void (*deferred_io)(struct fb_info *, struct list_head *);
+};
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct aperture {
+	resource_size_t base;
+	resource_size_t size;
+};
+
+struct apertures_struct {
+	unsigned int count;
+	struct aperture ranges[0];
+};
+
+struct dmt_videomode {
+	u32 dmt_id;
+	u32 std_2byte_code;
+	u32 cvt_3byte_code;
+	const struct fb_videomode *mode;
+};
+
+struct broken_edid {
+	u8 manufacturer[4];
+	u32 model;
+	u32 fix;
+};
+
+struct __fb_timings {
+	u32 dclk;
+	u32 hfreq;
+	u32 vfreq;
+	u32 hactive;
+	u32 vactive;
+	u32 hblank;
+	u32 vblank;
+	u32 htotal;
+	u32 vtotal;
+};
+
+struct fb_cvt_data {
+	u32 xres;
+	u32 yres;
+	u32 refresh;
+	u32 f_refresh;
+	u32 pixclock;
+	u32 hperiod;
+	u32 hblank;
+	u32 hfreq;
+	u32 htotal;
+	u32 vtotal;
+	u32 vsync;
+	u32 hsync;
+	u32 h_front_porch;
+	u32 h_back_porch;
+	u32 v_front_porch;
+	u32 v_back_porch;
+	u32 h_margin;
+	u32 v_margin;
+	u32 interlace;
+	u32 aspect_ratio;
+	u32 active_pixels;
+	u32 flags;
+	u32 status;
+};
+
+typedef unsigned char u_char;
+
+typedef short unsigned int u_short;
+
+struct fbcon_display {
+	const u_char *fontdata;
+	int userfont;
+	u_short inverse;
+	short int yscroll;
+	int vrows;
+	int cursor_shape;
+	int con_rotate;
+	u32 xres_virtual;
+	u32 yres_virtual;
+	u32 height;
+	u32 width;
+	u32 bits_per_pixel;
+	u32 grayscale;
+	u32 nonstd;
+	u32 accel_flags;
+	u32 rotate;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	const struct fb_videomode *mode;
+};
+
+struct fbcon_ops {
+	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
+	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
+	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
+	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
+	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
+	int (*update_start)(struct fb_info *);
+	int (*rotate_font)(struct fb_info *, struct vc_data *);
+	struct fb_var_screeninfo var;
+	struct delayed_work cursor_work;
+	struct fb_cursor cursor_state;
+	struct fbcon_display *p;
+	struct fb_info *info;
+	int currcon;
+	int cur_blink_jiffies;
+	int cursor_flash;
+	int cursor_reset;
+	int blank_state;
+	int graphics;
+	int save_graphics;
+	bool initialized;
+	int rotate;
+	int cur_rotate;
+	char *cursor_data;
+	u8 *fontbuffer;
+	u8 *fontdata;
+	u8 *cursor_src;
+	u32 cursor_size;
+	u32 fd_size;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct pdev_archdata {};
 
 typedef u8 efi_bool_t;
 
-typedef u16 efi_char16_t;
-
-typedef guid_t efi_guid_t;
-
 typedef struct {
 	u64 signature;
 	u32 revision;
@@ -13949,6 +35823,7 @@
 	long unsigned int tpm_log;
 	long unsigned int tpm_final_log;
 	long unsigned int mokvar_table;
+	long unsigned int coco_secret;
 	efi_get_time_t *get_time;
 	efi_set_time_t *set_time;
 	efi_get_wakeup_time_t *get_wakeup_time;
@@ -13967,2059 +35842,12 @@
 	long unsigned int flags;
 };
 
-struct arch_elf_state {
-	int flags;
-};
-
-struct pm_qos_flags_request {
-	struct list_head node;
-	s32 flags;
-};
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX = 2,
-};
-
-struct freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
-	DEV_PM_QOS_MIN_FREQUENCY = 3,
-	DEV_PM_QOS_MAX_FREQUENCY = 4,
-	DEV_PM_QOS_FLAGS = 5,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-		struct freq_qos_request freq;
-	} data;
-	struct device *dev;
-};
-
-enum stack_type {
-	STACK_TYPE_UNKNOWN = 0,
-	STACK_TYPE_TASK = 1,
-	STACK_TYPE_IRQ = 2,
-	STACK_TYPE_OVERFLOW = 3,
-	STACK_TYPE_SDEI_NORMAL = 4,
-	STACK_TYPE_SDEI_CRITICAL = 5,
-	__NR_STACK_TYPES = 6,
-};
-
-struct stackframe {
-	long unsigned int fp;
-	long unsigned int pc;
-	long unsigned int stacks_done[1];
-	long unsigned int prev_fp;
-	enum stack_type prev_type;
-	int graph;
-};
-
-struct user_sve_header {
-	__u32 size;
-	__u32 max_size;
-	__u16 vl;
-	__u16 max_vl;
-	__u16 flags;
-	__u16 __reserved;
-};
-
-struct user_pac_mask {
-	__u64 data_mask;
-	__u64 insn_mask;
-};
-
-struct user_pac_address_keys {
-	__int128 unsigned apiakey;
-	__int128 unsigned apibkey;
-	__int128 unsigned apdakey;
-	__int128 unsigned apdbkey;
-};
-
-struct user_pac_generic_keys {
-	__int128 unsigned apgakey;
-};
-
-typedef u32 compat_ulong_t;
-
-enum perf_type_id {
-	PERF_TYPE_HARDWARE = 0,
-	PERF_TYPE_SOFTWARE = 1,
-	PERF_TYPE_TRACEPOINT = 2,
-	PERF_TYPE_HW_CACHE = 3,
-	PERF_TYPE_RAW = 4,
-	PERF_TYPE_BREAKPOINT = 5,
-	PERF_TYPE_MAX = 6,
-};
-
-enum {
-	TASKSTATS_CMD_UNSPEC = 0,
-	TASKSTATS_CMD_GET = 1,
-	TASKSTATS_CMD_NEW = 2,
-	__TASKSTATS_CMD_MAX = 3,
-};
-
-enum cpu_usage_stat {
-	CPUTIME_USER = 0,
-	CPUTIME_NICE = 1,
-	CPUTIME_SYSTEM = 2,
-	CPUTIME_SOFTIRQ = 3,
-	CPUTIME_IRQ = 4,
-	CPUTIME_IDLE = 5,
-	CPUTIME_IOWAIT = 6,
-	CPUTIME_STEAL = 7,
-	CPUTIME_GUEST = 8,
-	CPUTIME_GUEST_NICE = 9,
-	NR_STATS = 10,
-};
-
-enum bpf_cgroup_storage_type {
-	BPF_CGROUP_STORAGE_SHARED = 0,
-	BPF_CGROUP_STORAGE_PERCPU = 1,
-	__BPF_CGROUP_STORAGE_MAX = 2,
-};
-
-enum psi_task_count {
-	NR_IOWAIT = 0,
-	NR_MEMSTALL = 1,
-	NR_RUNNING = 2,
-	NR_ONCPU = 3,
-	NR_PSI_TASK_COUNTS = 4,
-};
-
-enum psi_states {
-	PSI_IO_SOME = 0,
-	PSI_IO_FULL = 1,
-	PSI_MEM_SOME = 2,
-	PSI_MEM_FULL = 3,
-	PSI_CPU_SOME = 4,
-	PSI_NONIDLE = 5,
-	NR_PSI_STATES = 6,
-};
-
-enum psi_aggregators {
-	PSI_AVGS = 0,
-	PSI_POLL = 1,
-	NR_PSI_AGGREGATORS = 2,
-};
-
-enum cgroup_subsys_id {
-	cpuset_cgrp_id = 0,
-	cpu_cgrp_id = 1,
-	cpuacct_cgrp_id = 2,
-	io_cgrp_id = 3,
-	memory_cgrp_id = 4,
-	devices_cgrp_id = 5,
-	freezer_cgrp_id = 6,
-	net_cls_cgrp_id = 7,
-	perf_event_cgrp_id = 8,
-	net_prio_cgrp_id = 9,
-	hugetlb_cgrp_id = 10,
-	pids_cgrp_id = 11,
-	CGROUP_SUBSYS_COUNT = 12,
-};
-
-enum {
-	HW_BREAKPOINT_LEN_1 = 1,
-	HW_BREAKPOINT_LEN_2 = 2,
-	HW_BREAKPOINT_LEN_3 = 3,
-	HW_BREAKPOINT_LEN_4 = 4,
-	HW_BREAKPOINT_LEN_5 = 5,
-	HW_BREAKPOINT_LEN_6 = 6,
-	HW_BREAKPOINT_LEN_7 = 7,
-	HW_BREAKPOINT_LEN_8 = 8,
-};
-
-enum {
-	HW_BREAKPOINT_EMPTY = 0,
-	HW_BREAKPOINT_R = 1,
-	HW_BREAKPOINT_W = 2,
-	HW_BREAKPOINT_RW = 3,
-	HW_BREAKPOINT_X = 4,
-	HW_BREAKPOINT_INVALID = 7,
-};
-
-enum bp_type_idx {
-	TYPE_INST = 0,
-	TYPE_DATA = 1,
-	TYPE_MAX = 2,
-};
-
-struct membuf {
-	void *p;
-	size_t left;
-};
-
-struct user_regset;
-
-typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
-
-typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
-
-typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
-
-typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
-
-struct user_regset {
-	user_regset_get2_fn *regset_get;
-	user_regset_set_fn *set;
-	user_regset_active_fn *active;
-	user_regset_writeback_fn *writeback;
-	unsigned int n;
-	unsigned int size;
-	unsigned int align;
-	unsigned int bias;
-	unsigned int core_note_type;
-};
-
-struct user_regset_view {
-	const char *name;
-	const struct user_regset *regsets;
-	unsigned int n;
-	u32 e_flags;
-	u16 e_machine;
-	u8 ei_osabi;
-};
-
-struct stack_info {
-	long unsigned int low;
-	long unsigned int high;
-	enum stack_type type;
-};
-
-struct trace_event_raw_sys_enter {
-	struct trace_entry ent;
-	long int id;
-	long unsigned int args[6];
-	char __data[0];
-};
-
-struct trace_event_raw_sys_exit {
-	struct trace_entry ent;
-	long int id;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sys_enter {};
-
-struct trace_event_data_offsets_sys_exit {};
-
-typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
-
-typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
-
-struct pt_regs_offset {
-	const char *name;
-	int offset;
-};
-
-enum aarch64_regset {
-	REGSET_GPR = 0,
-	REGSET_FPR = 1,
-	REGSET_TLS = 2,
-	REGSET_HW_BREAK = 3,
-	REGSET_HW_WATCH = 4,
-	REGSET_SYSTEM_CALL = 5,
-	REGSET_SVE = 6,
-	REGSET_PAC_MASK = 7,
-	REGSET_PACA_KEYS = 8,
-	REGSET_PACG_KEYS = 9,
-	REGSET_TAGGED_ADDR_CTRL = 10,
-};
-
-enum compat_regset {
-	REGSET_COMPAT_GPR = 0,
-	REGSET_COMPAT_VFP = 1,
-};
-
-enum ptrace_syscall_dir {
-	PTRACE_SYSCALL_ENTER = 0,
-	PTRACE_SYSCALL_EXIT = 1,
-};
-
-struct atomic_notifier_head {
-	spinlock_t lock;
-	struct notifier_block *head;
-};
-
-typedef struct pglist_data pg_data_t;
-
-enum meminit_context {
-	MEMINIT_EARLY = 0,
-	MEMINIT_HOTPLUG = 1,
-};
-
-enum memblock_flags {
-	MEMBLOCK_NONE = 0,
-	MEMBLOCK_HOTPLUG = 1,
-	MEMBLOCK_MIRROR = 2,
-	MEMBLOCK_NOMAP = 4,
-};
-
-struct memblock_region {
-	phys_addr_t base;
-	phys_addr_t size;
-	enum memblock_flags flags;
-	int nid;
-};
-
-struct memblock_type {
-	long unsigned int cnt;
-	long unsigned int max;
-	phys_addr_t total_size;
-	struct memblock_region *regions;
-	char *name;
-};
-
-struct memblock {
-	bool bottom_up;
-	phys_addr_t current_limit;
-	struct memblock_type memory;
-	struct memblock_type reserved;
-};
-
-struct mpidr_hash {
-	u64 mask;
-	u32 shift_aff[4];
-	u32 bits;
-};
-
-struct cpu {
-	int node_id;
-	int hotpluggable;
-	struct device dev;
-};
-
-struct cpuinfo_arm64 {
-	struct cpu cpu;
-	struct kobject kobj;
-	u32 reg_ctr;
-	u32 reg_cntfrq;
-	u32 reg_dczid;
-	u32 reg_midr;
-	u32 reg_revidr;
-	u64 reg_id_aa64dfr0;
-	u64 reg_id_aa64dfr1;
-	u64 reg_id_aa64isar0;
-	u64 reg_id_aa64isar1;
-	u64 reg_id_aa64mmfr0;
-	u64 reg_id_aa64mmfr1;
-	u64 reg_id_aa64mmfr2;
-	u64 reg_id_aa64pfr0;
-	u64 reg_id_aa64pfr1;
-	u64 reg_id_aa64zfr0;
-	u32 reg_id_dfr0;
-	u32 reg_id_dfr1;
-	u32 reg_id_isar0;
-	u32 reg_id_isar1;
-	u32 reg_id_isar2;
-	u32 reg_id_isar3;
-	u32 reg_id_isar4;
-	u32 reg_id_isar5;
-	u32 reg_id_isar6;
-	u32 reg_id_mmfr0;
-	u32 reg_id_mmfr1;
-	u32 reg_id_mmfr2;
-	u32 reg_id_mmfr3;
-	u32 reg_id_mmfr4;
-	u32 reg_id_mmfr5;
-	u32 reg_id_pfr0;
-	u32 reg_id_pfr1;
-	u32 reg_id_pfr2;
-	u32 reg_mvfr0;
-	u32 reg_mvfr1;
-	u32 reg_mvfr2;
-	u64 reg_zcr;
-};
-
-struct cpu_operations {
-	const char *name;
-	int (*cpu_init)(unsigned int);
-	int (*cpu_prepare)(unsigned int);
-	int (*cpu_boot)(unsigned int);
-	void (*cpu_postboot)();
-	bool (*cpu_can_disable)(unsigned int);
-	int (*cpu_disable)(unsigned int);
-	void (*cpu_die)(unsigned int);
-	int (*cpu_kill)(unsigned int);
-	int (*cpu_init_idle)(unsigned int);
-	int (*cpu_suspend)(long unsigned int);
-};
-
-struct sigcontext {
-	__u64 fault_address;
-	__u64 regs[31];
-	__u64 sp;
-	__u64 pc;
-	__u64 pstate;
-	long: 64;
-	__u8 __reserved[4096];
-};
-
-struct _aarch64_ctx {
-	__u32 magic;
-	__u32 size;
-};
-
-struct fpsimd_context {
-	struct _aarch64_ctx head;
-	__u32 fpsr;
-	__u32 fpcr;
-	__int128 unsigned vregs[32];
-};
-
-struct esr_context {
-	struct _aarch64_ctx head;
-	__u64 esr;
-};
-
-struct extra_context {
-	struct _aarch64_ctx head;
-	__u64 datap;
-	__u32 size;
-	__u32 __reserved[3];
-};
-
-struct sve_context {
-	struct _aarch64_ctx head;
-	__u16 vl;
-	__u16 __reserved[3];
-};
-
-struct sigaltstack {
-	void *ss_sp;
-	int ss_flags;
-	size_t ss_size;
-};
-
-typedef struct sigaltstack stack_t;
-
-struct siginfo {
-	union {
-		struct {
-			int si_signo;
-			int si_errno;
-			int si_code;
-			union __sifields _sifields;
-		};
-		int _si_pad[32];
-	};
-};
-
-struct ksignal {
-	struct k_sigaction ka;
-	kernel_siginfo_t info;
-	int sig;
-};
-
-enum {
-	EI_ETYPE_NONE = 0,
-	EI_ETYPE_NULL = 1,
-	EI_ETYPE_ERRNO = 2,
-	EI_ETYPE_ERRNO_NULL = 3,
-	EI_ETYPE_TRUE = 4,
-};
-
-struct syscall_metadata {
-	const char *name;
-	int syscall_nr;
-	int nb_args;
-	const char **types;
-	const char **args;
-	struct list_head enter_fields;
-	struct trace_event_call *enter_event;
-	struct trace_event_call *exit_event;
-};
-
-struct ucontext {
-	long unsigned int uc_flags;
-	struct ucontext *uc_link;
-	stack_t uc_stack;
-	sigset_t uc_sigmask;
-	__u8 __unused[120];
-	long: 64;
-	struct sigcontext uc_mcontext;
-};
-
-struct rt_sigframe {
-	struct siginfo info;
-	struct ucontext uc;
-};
-
-struct frame_record {
-	u64 fp;
-	u64 lr;
-};
-
-struct rt_sigframe_user_layout {
-	struct rt_sigframe *sigframe;
-	struct frame_record *next_frame;
-	long unsigned int size;
-	long unsigned int limit;
-	long unsigned int fpsimd_offset;
-	long unsigned int esr_offset;
-	long unsigned int sve_offset;
-	long unsigned int extra_offset;
-	long unsigned int end_offset;
-};
-
-struct user_ctxs {
-	struct fpsimd_context *fpsimd;
-	struct sve_context *sve;
-};
-
-enum {
-	PER_LINUX = 0,
-	PER_LINUX_32BIT = 8388608,
-	PER_LINUX_FDPIC = 524288,
-	PER_SVR4 = 68157441,
-	PER_SVR3 = 83886082,
-	PER_SCOSVR3 = 117440515,
-	PER_OSR5 = 100663299,
-	PER_WYSEV386 = 83886084,
-	PER_ISCR4 = 67108869,
-	PER_BSD = 6,
-	PER_SUNOS = 67108870,
-	PER_XENIX = 83886087,
-	PER_LINUX32 = 8,
-	PER_LINUX32_3GB = 134217736,
-	PER_IRIX32 = 67108873,
-	PER_IRIXN32 = 67108874,
-	PER_IRIX64 = 67108875,
-	PER_RISCOS = 12,
-	PER_SOLARIS = 67108877,
-	PER_UW7 = 68157454,
-	PER_OSF4 = 15,
-	PER_HPUX = 16,
-	PER_MASK = 255,
-};
-
-typedef long int (*syscall_fn_t)(const struct pt_regs *);
-
-typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
-
-typedef bool pstate_check_t(long unsigned int);
-
-enum lockdep_ok {
-	LOCKDEP_STILL_OK = 0,
-	LOCKDEP_NOW_UNRELIABLE = 1,
-};
-
-enum bug_trap_type {
-	BUG_TRAP_TYPE_NONE = 0,
-	BUG_TRAP_TYPE_WARN = 1,
-	BUG_TRAP_TYPE_BUG = 2,
-};
-
-enum ftr_type {
-	FTR_EXACT = 0,
-	FTR_LOWER_SAFE = 1,
-	FTR_HIGHER_SAFE = 2,
-	FTR_HIGHER_OR_ZERO_SAFE = 3,
-};
-
-struct arm64_ftr_bits {
-	bool sign;
-	bool visible;
-	bool strict;
-	enum ftr_type type;
-	u8 shift;
-	u8 width;
-	s64 safe_val;
-};
-
-struct arm64_ftr_reg {
-	const char *name;
-	u64 strict_mask;
-	u64 user_mask;
-	u64 sys_val;
-	u64 user_val;
-	const struct arm64_ftr_bits *ftr_bits;
-};
-
-enum siginfo_layout {
-	SIL_KILL = 0,
-	SIL_TIMER = 1,
-	SIL_POLL = 2,
-	SIL_FAULT = 3,
-	SIL_FAULT_MCEERR = 4,
-	SIL_FAULT_BNDERR = 5,
-	SIL_FAULT_PKUERR = 6,
-	SIL_CHLD = 7,
-	SIL_RT = 8,
-	SIL_SYS = 9,
-};
-
-enum die_val {
-	DIE_UNUSED = 0,
-	DIE_OOPS = 1,
-};
-
-struct undef_hook {
-	struct list_head node;
-	u32 instr_mask;
-	u32 instr_val;
-	u64 pstate_mask;
-	u64 pstate_val;
-	int (*fn)(struct pt_regs *, u32);
-};
-
-struct sys64_hook {
-	unsigned int esr_mask;
-	unsigned int esr_val;
-	void (*handler)(unsigned int, struct pt_regs *);
-};
-
-struct timens_offset {
-	s64 sec;
-	u64 nsec;
-};
-
-enum vm_fault_reason {
-	VM_FAULT_OOM = 1,
-	VM_FAULT_SIGBUS = 2,
-	VM_FAULT_MAJOR = 4,
-	VM_FAULT_WRITE = 8,
-	VM_FAULT_HWPOISON = 16,
-	VM_FAULT_HWPOISON_LARGE = 32,
-	VM_FAULT_SIGSEGV = 64,
-	VM_FAULT_NOPAGE = 256,
-	VM_FAULT_LOCKED = 512,
-	VM_FAULT_RETRY = 1024,
-	VM_FAULT_FALLBACK = 2048,
-	VM_FAULT_DONE_COW = 4096,
-	VM_FAULT_NEEDDSYNC = 8192,
-	VM_FAULT_HINDEX_MASK = 983040,
-};
-
-struct vm_special_mapping {
-	const char *name;
-	struct page **pages;
-	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
-	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
-};
-
-struct timens_offsets {
-	struct timespec64 monotonic;
-	struct timespec64 boottime;
-};
-
-struct time_namespace {
-	struct kref kref;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-	struct timens_offsets offsets;
-	struct page *vvar_page;
-	bool frozen_offsets;
-};
-
-struct arch_vdso_data {};
-
-struct vdso_timestamp {
-	u64 sec;
-	u64 nsec;
-};
-
-struct vdso_data {
-	u32 seq;
-	s32 clock_mode;
-	u64 cycle_last;
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	union {
-		struct vdso_timestamp basetime[12];
-		struct timens_offset offset[12];
-	};
-	s32 tz_minuteswest;
-	s32 tz_dsttime;
-	u32 hrtimer_res;
-	u32 __unused;
-	struct arch_vdso_data arch_data;
-};
-
-enum vdso_abi {
-	VDSO_ABI_AA64 = 0,
-	VDSO_ABI_AA32 = 1,
-};
-
-enum vvar_pages {
-	VVAR_DATA_PAGE_OFFSET = 0,
-	VVAR_TIMENS_PAGE_OFFSET = 1,
-	VVAR_NR_PAGES = 2,
-};
-
-struct vdso_abi_info {
-	const char *name;
-	const char *vdso_code_start;
-	const char *vdso_code_end;
-	long unsigned int vdso_pages;
-	struct vm_special_mapping *dm;
-	struct vm_special_mapping *cm;
-};
-
-enum aarch32_map {
-	AA32_MAP_VECTORS = 0,
-	AA32_MAP_SIGPAGE = 1,
-	AA32_MAP_VVAR = 2,
-	AA32_MAP_VDSO = 3,
-};
-
-enum aarch64_map {
-	AA64_MAP_VVAR = 0,
-	AA64_MAP_VDSO = 1,
-};
-
-struct psci_operations {
-	u32 (*get_version)();
-	int (*cpu_suspend)(u32, long unsigned int);
-	int (*cpu_off)(u32);
-	int (*cpu_on)(long unsigned int, long unsigned int);
-	int (*migrate)(long unsigned int);
-	int (*affinity_info)(long unsigned int, long unsigned int);
-	int (*migrate_info_type)();
-};
-
-enum aarch64_insn_encoding_class {
-	AARCH64_INSN_CLS_UNKNOWN = 0,
-	AARCH64_INSN_CLS_DP_IMM = 1,
-	AARCH64_INSN_CLS_DP_REG = 2,
-	AARCH64_INSN_CLS_DP_FPSIMD = 3,
-	AARCH64_INSN_CLS_LDST = 4,
-	AARCH64_INSN_CLS_BR_SYS = 5,
-};
-
-enum aarch64_insn_hint_cr_op {
-	AARCH64_INSN_HINT_NOP = 0,
-	AARCH64_INSN_HINT_YIELD = 32,
-	AARCH64_INSN_HINT_WFE = 64,
-	AARCH64_INSN_HINT_WFI = 96,
-	AARCH64_INSN_HINT_SEV = 128,
-	AARCH64_INSN_HINT_SEVL = 160,
-	AARCH64_INSN_HINT_XPACLRI = 224,
-	AARCH64_INSN_HINT_PACIA_1716 = 256,
-	AARCH64_INSN_HINT_PACIB_1716 = 320,
-	AARCH64_INSN_HINT_AUTIA_1716 = 384,
-	AARCH64_INSN_HINT_AUTIB_1716 = 448,
-	AARCH64_INSN_HINT_PACIAZ = 768,
-	AARCH64_INSN_HINT_PACIASP = 800,
-	AARCH64_INSN_HINT_PACIBZ = 832,
-	AARCH64_INSN_HINT_PACIBSP = 864,
-	AARCH64_INSN_HINT_AUTIAZ = 896,
-	AARCH64_INSN_HINT_AUTIASP = 928,
-	AARCH64_INSN_HINT_AUTIBZ = 960,
-	AARCH64_INSN_HINT_AUTIBSP = 992,
-	AARCH64_INSN_HINT_ESB = 512,
-	AARCH64_INSN_HINT_PSB = 544,
-	AARCH64_INSN_HINT_TSB = 576,
-	AARCH64_INSN_HINT_CSDB = 640,
-	AARCH64_INSN_HINT_BTI = 1024,
-	AARCH64_INSN_HINT_BTIC = 1088,
-	AARCH64_INSN_HINT_BTIJ = 1152,
-	AARCH64_INSN_HINT_BTIJC = 1216,
-};
-
-enum aarch64_insn_imm_type {
-	AARCH64_INSN_IMM_ADR = 0,
-	AARCH64_INSN_IMM_26 = 1,
-	AARCH64_INSN_IMM_19 = 2,
-	AARCH64_INSN_IMM_16 = 3,
-	AARCH64_INSN_IMM_14 = 4,
-	AARCH64_INSN_IMM_12 = 5,
-	AARCH64_INSN_IMM_9 = 6,
-	AARCH64_INSN_IMM_7 = 7,
-	AARCH64_INSN_IMM_6 = 8,
-	AARCH64_INSN_IMM_S = 9,
-	AARCH64_INSN_IMM_R = 10,
-	AARCH64_INSN_IMM_N = 11,
-	AARCH64_INSN_IMM_MAX = 12,
-};
-
-enum aarch64_insn_register_type {
-	AARCH64_INSN_REGTYPE_RT = 0,
-	AARCH64_INSN_REGTYPE_RN = 1,
-	AARCH64_INSN_REGTYPE_RT2 = 2,
-	AARCH64_INSN_REGTYPE_RM = 3,
-	AARCH64_INSN_REGTYPE_RD = 4,
-	AARCH64_INSN_REGTYPE_RA = 5,
-	AARCH64_INSN_REGTYPE_RS = 6,
-};
-
-enum aarch64_insn_register {
-	AARCH64_INSN_REG_0 = 0,
-	AARCH64_INSN_REG_1 = 1,
-	AARCH64_INSN_REG_2 = 2,
-	AARCH64_INSN_REG_3 = 3,
-	AARCH64_INSN_REG_4 = 4,
-	AARCH64_INSN_REG_5 = 5,
-	AARCH64_INSN_REG_6 = 6,
-	AARCH64_INSN_REG_7 = 7,
-	AARCH64_INSN_REG_8 = 8,
-	AARCH64_INSN_REG_9 = 9,
-	AARCH64_INSN_REG_10 = 10,
-	AARCH64_INSN_REG_11 = 11,
-	AARCH64_INSN_REG_12 = 12,
-	AARCH64_INSN_REG_13 = 13,
-	AARCH64_INSN_REG_14 = 14,
-	AARCH64_INSN_REG_15 = 15,
-	AARCH64_INSN_REG_16 = 16,
-	AARCH64_INSN_REG_17 = 17,
-	AARCH64_INSN_REG_18 = 18,
-	AARCH64_INSN_REG_19 = 19,
-	AARCH64_INSN_REG_20 = 20,
-	AARCH64_INSN_REG_21 = 21,
-	AARCH64_INSN_REG_22 = 22,
-	AARCH64_INSN_REG_23 = 23,
-	AARCH64_INSN_REG_24 = 24,
-	AARCH64_INSN_REG_25 = 25,
-	AARCH64_INSN_REG_26 = 26,
-	AARCH64_INSN_REG_27 = 27,
-	AARCH64_INSN_REG_28 = 28,
-	AARCH64_INSN_REG_29 = 29,
-	AARCH64_INSN_REG_FP = 29,
-	AARCH64_INSN_REG_30 = 30,
-	AARCH64_INSN_REG_LR = 30,
-	AARCH64_INSN_REG_ZR = 31,
-	AARCH64_INSN_REG_SP = 31,
-};
-
-enum aarch64_insn_variant {
-	AARCH64_INSN_VARIANT_32BIT = 0,
-	AARCH64_INSN_VARIANT_64BIT = 1,
-};
-
-enum aarch64_insn_condition {
-	AARCH64_INSN_COND_EQ = 0,
-	AARCH64_INSN_COND_NE = 1,
-	AARCH64_INSN_COND_CS = 2,
-	AARCH64_INSN_COND_CC = 3,
-	AARCH64_INSN_COND_MI = 4,
-	AARCH64_INSN_COND_PL = 5,
-	AARCH64_INSN_COND_VS = 6,
-	AARCH64_INSN_COND_VC = 7,
-	AARCH64_INSN_COND_HI = 8,
-	AARCH64_INSN_COND_LS = 9,
-	AARCH64_INSN_COND_GE = 10,
-	AARCH64_INSN_COND_LT = 11,
-	AARCH64_INSN_COND_GT = 12,
-	AARCH64_INSN_COND_LE = 13,
-	AARCH64_INSN_COND_AL = 14,
-};
-
-enum aarch64_insn_branch_type {
-	AARCH64_INSN_BRANCH_NOLINK = 0,
-	AARCH64_INSN_BRANCH_LINK = 1,
-	AARCH64_INSN_BRANCH_RETURN = 2,
-	AARCH64_INSN_BRANCH_COMP_ZERO = 3,
-	AARCH64_INSN_BRANCH_COMP_NONZERO = 4,
-};
-
-enum aarch64_insn_size_type {
-	AARCH64_INSN_SIZE_8 = 0,
-	AARCH64_INSN_SIZE_16 = 1,
-	AARCH64_INSN_SIZE_32 = 2,
-	AARCH64_INSN_SIZE_64 = 3,
-};
-
-enum aarch64_insn_ldst_type {
-	AARCH64_INSN_LDST_LOAD_REG_OFFSET = 0,
-	AARCH64_INSN_LDST_STORE_REG_OFFSET = 1,
-	AARCH64_INSN_LDST_LOAD_PAIR_PRE_INDEX = 2,
-	AARCH64_INSN_LDST_STORE_PAIR_PRE_INDEX = 3,
-	AARCH64_INSN_LDST_LOAD_PAIR_POST_INDEX = 4,
-	AARCH64_INSN_LDST_STORE_PAIR_POST_INDEX = 5,
-	AARCH64_INSN_LDST_LOAD_EX = 6,
-	AARCH64_INSN_LDST_STORE_EX = 7,
-};
-
-enum aarch64_insn_adsb_type {
-	AARCH64_INSN_ADSB_ADD = 0,
-	AARCH64_INSN_ADSB_SUB = 1,
-	AARCH64_INSN_ADSB_ADD_SETFLAGS = 2,
-	AARCH64_INSN_ADSB_SUB_SETFLAGS = 3,
-};
-
-enum aarch64_insn_movewide_type {
-	AARCH64_INSN_MOVEWIDE_ZERO = 0,
-	AARCH64_INSN_MOVEWIDE_KEEP = 1,
-	AARCH64_INSN_MOVEWIDE_INVERSE = 2,
-};
-
-enum aarch64_insn_bitfield_type {
-	AARCH64_INSN_BITFIELD_MOVE = 0,
-	AARCH64_INSN_BITFIELD_MOVE_UNSIGNED = 1,
-	AARCH64_INSN_BITFIELD_MOVE_SIGNED = 2,
-};
-
-enum aarch64_insn_data1_type {
-	AARCH64_INSN_DATA1_REVERSE_16 = 0,
-	AARCH64_INSN_DATA1_REVERSE_32 = 1,
-	AARCH64_INSN_DATA1_REVERSE_64 = 2,
-};
-
-enum aarch64_insn_data2_type {
-	AARCH64_INSN_DATA2_UDIV = 0,
-	AARCH64_INSN_DATA2_SDIV = 1,
-	AARCH64_INSN_DATA2_LSLV = 2,
-	AARCH64_INSN_DATA2_LSRV = 3,
-	AARCH64_INSN_DATA2_ASRV = 4,
-	AARCH64_INSN_DATA2_RORV = 5,
-};
-
-enum aarch64_insn_data3_type {
-	AARCH64_INSN_DATA3_MADD = 0,
-	AARCH64_INSN_DATA3_MSUB = 1,
-};
-
-enum aarch64_insn_logic_type {
-	AARCH64_INSN_LOGIC_AND = 0,
-	AARCH64_INSN_LOGIC_BIC = 1,
-	AARCH64_INSN_LOGIC_ORR = 2,
-	AARCH64_INSN_LOGIC_ORN = 3,
-	AARCH64_INSN_LOGIC_EOR = 4,
-	AARCH64_INSN_LOGIC_EON = 5,
-	AARCH64_INSN_LOGIC_AND_SETFLAGS = 6,
-	AARCH64_INSN_LOGIC_BIC_SETFLAGS = 7,
-};
-
-enum aarch64_insn_prfm_type {
-	AARCH64_INSN_PRFM_TYPE_PLD = 0,
-	AARCH64_INSN_PRFM_TYPE_PLI = 1,
-	AARCH64_INSN_PRFM_TYPE_PST = 2,
-};
-
-enum aarch64_insn_prfm_target {
-	AARCH64_INSN_PRFM_TARGET_L1 = 0,
-	AARCH64_INSN_PRFM_TARGET_L2 = 1,
-	AARCH64_INSN_PRFM_TARGET_L3 = 2,
-};
-
-enum aarch64_insn_prfm_policy {
-	AARCH64_INSN_PRFM_POLICY_KEEP = 0,
-	AARCH64_INSN_PRFM_POLICY_STRM = 1,
-};
-
-enum aarch64_insn_adr_type {
-	AARCH64_INSN_ADR_TYPE_ADRP = 0,
-	AARCH64_INSN_ADR_TYPE_ADR = 1,
-};
-
-enum fixed_addresses {
-	FIX_HOLE = 0,
-	FIX_FDT_END = 1,
-	FIX_FDT = 1024,
-	FIX_EARLYCON_MEM_BASE = 1025,
-	FIX_TEXT_POKE0 = 1026,
-	FIX_ENTRY_TRAMP_DATA = 1027,
-	FIX_ENTRY_TRAMP_TEXT = 1028,
-	__end_of_permanent_fixed_addresses = 1029,
-	FIX_BTMAP_END = 1029,
-	FIX_BTMAP_BEGIN = 1476,
-	FIX_PTE = 1477,
-	FIX_PMD = 1478,
-	FIX_PUD = 1479,
-	FIX_PGD = 1480,
-	__end_of_fixed_addresses = 1481,
-};
-
-struct aarch64_insn_patch {
-	void **text_addrs;
-	u32 *new_insns;
-	int insn_cnt;
-	atomic_t cpu_count;
-};
-
-struct return_address_data {
-	unsigned int level;
-	void *addr;
-};
-
-struct kobj_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
-};
-
-enum {
-	CAP_HWCAP = 1,
-	CAP_COMPAT_HWCAP = 2,
-	CAP_COMPAT_HWCAP2 = 3,
-};
-
-struct secondary_data {
-	void *stack;
-	struct task_struct *task;
-	long int status;
-};
-
-struct device_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device *, struct device_attribute *, char *);
-	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
-};
-
-struct __ftr_reg_entry {
-	u32 sys_id;
-	struct arm64_ftr_reg *reg;
-};
-
-typedef void kpti_remap_fn(int, int, phys_addr_t);
-
-typedef void ttbr_replace_func(phys_addr_t);
-
-struct alt_instr {
-	s32 orig_offset;
-	s32 alt_offset;
-	u16 cpufeature;
-	u8 orig_len;
-	u8 alt_len;
-};
-
-typedef void (*alternative_cb_t)(struct alt_instr *, __le32 *, __le32 *, int);
-
-struct alt_region {
-	struct alt_instr *begin;
-	struct alt_instr *end;
-};
-
-enum cache_type {
-	CACHE_TYPE_NOCACHE = 0,
-	CACHE_TYPE_INST = 1,
-	CACHE_TYPE_DATA = 2,
-	CACHE_TYPE_SEPARATE = 3,
-	CACHE_TYPE_UNIFIED = 4,
-};
-
-struct cacheinfo {
-	unsigned int id;
-	enum cache_type type;
-	unsigned int level;
-	unsigned int coherency_line_size;
-	unsigned int number_of_sets;
-	unsigned int ways_of_associativity;
-	unsigned int physical_line_partition;
-	unsigned int size;
-	cpumask_t shared_cpu_map;
-	unsigned int attributes;
-	void *fw_token;
-	bool disable_sysfs;
-	void *priv;
-};
-
-struct cpu_cacheinfo {
-	struct cacheinfo *info_list;
-	unsigned int num_levels;
-	unsigned int num_leaves;
-	bool cpu_map_populated;
-};
-
-struct irq_desc;
-
-typedef void (*irq_flow_handler_t)(struct irq_desc *);
-
-struct msi_desc;
-
-struct irq_common_data {
-	unsigned int state_use_accessors;
-	unsigned int node;
-	void *handler_data;
-	struct msi_desc *msi_desc;
-	cpumask_var_t affinity;
-	cpumask_var_t effective_affinity;
-	unsigned int ipi_offset;
-};
-
-struct irq_chip;
-
-struct irq_data {
-	u32 mask;
-	unsigned int irq;
-	long unsigned int hwirq;
-	struct irq_common_data *common;
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	struct irq_data *parent_data;
-	void *chip_data;
-};
-
-struct irqaction;
-
-struct irq_affinity_notify;
-
-struct irq_desc {
-	struct irq_common_data irq_common_data;
-	struct irq_data irq_data;
-	unsigned int *kstat_irqs;
-	irq_flow_handler_t handle_irq;
-	struct irqaction *action;
-	unsigned int status_use_accessors;
-	unsigned int core_internal_state__do_not_mess_with_it;
-	unsigned int depth;
-	unsigned int wake_depth;
-	unsigned int tot_count;
-	unsigned int irq_count;
-	long unsigned int last_unhandled;
-	unsigned int irqs_unhandled;
-	atomic_t threads_handled;
-	int threads_handled_last;
-	raw_spinlock_t lock;
-	struct cpumask *percpu_enabled;
-	const struct cpumask *percpu_affinity;
-	const struct cpumask *affinity_hint;
-	struct irq_affinity_notify *affinity_notify;
-	long unsigned int threads_oneshot;
-	atomic_t threads_active;
-	wait_queue_head_t wait_for_threads;
-	unsigned int nr_actions;
-	unsigned int no_suspend_depth;
-	unsigned int cond_suspend_depth;
-	unsigned int force_resume_depth;
-	struct proc_dir_entry *dir;
-	struct callback_head rcu;
-	struct kobject kobj;
-	struct mutex request_mutex;
-	int parent_irq;
-	struct module *owner;
-	const char *name;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum irq_gc_flags {
-	IRQ_GC_INIT_MASK_CACHE = 1,
-	IRQ_GC_INIT_NESTED_LOCK = 2,
-	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
-	IRQ_GC_NO_MASK = 8,
-	IRQ_GC_BE_IO = 16,
-};
-
-struct irq_chip_generic;
-
-struct irq_domain_chip_generic {
-	unsigned int irqs_per_chip;
-	unsigned int num_chips;
-	unsigned int irq_flags_to_clear;
-	unsigned int irq_flags_to_set;
-	enum irq_gc_flags gc_flags;
-	struct irq_chip_generic *gc[0];
-};
-
-struct acpi_subtable_header {
-	u8 type;
-	u8 length;
-};
-
-struct acpi_hmat_structure {
-	u16 type;
-	u16 reserved;
-	u32 length;
-};
-
-enum acpi_madt_type {
-	ACPI_MADT_TYPE_LOCAL_APIC = 0,
-	ACPI_MADT_TYPE_IO_APIC = 1,
-	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
-	ACPI_MADT_TYPE_NMI_SOURCE = 3,
-	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
-	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
-	ACPI_MADT_TYPE_IO_SAPIC = 6,
-	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
-	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
-	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
-	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
-	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
-	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
-	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
-	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
-	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
-	ACPI_MADT_TYPE_RESERVED = 16,
-};
-
-struct acpi_madt_generic_interrupt {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 cpu_interface_number;
-	u32 uid;
-	u32 flags;
-	u32 parking_version;
-	u32 performance_interrupt;
-	u64 parked_address;
-	u64 base_address;
-	u64 gicv_base_address;
-	u64 gich_base_address;
-	u32 vgic_interrupt;
-	u64 gicr_base_address;
-	u64 arm_mpidr;
-	u8 efficiency_class;
-	u8 reserved2[1];
-	u16 spe_interrupt;
-} __attribute__((packed));
-
-enum irqreturn {
-	IRQ_NONE = 0,
-	IRQ_HANDLED = 1,
-	IRQ_WAKE_THREAD = 2,
-};
-
-typedef enum irqreturn irqreturn_t;
-
-typedef irqreturn_t (*irq_handler_t)(int, void *);
-
-struct irqaction {
-	irq_handler_t handler;
-	void *dev_id;
-	void *percpu_dev_id;
-	struct irqaction *next;
-	irq_handler_t thread_fn;
-	struct task_struct *thread;
-	struct irqaction *secondary;
-	unsigned int irq;
-	unsigned int flags;
-	long unsigned int thread_flags;
-	long unsigned int thread_mask;
-	const char *name;
-	struct proc_dir_entry *dir;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct irq_affinity_notify {
-	unsigned int irq;
-	struct kref kref;
-	struct work_struct work;
-	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
-	void (*release)(struct kref *);
-};
-
-struct irq_affinity_desc {
-	struct cpumask mask;
-	unsigned int is_managed: 1;
-};
-
-enum irqchip_irq_state {
-	IRQCHIP_STATE_PENDING = 0,
-	IRQCHIP_STATE_ACTIVE = 1,
-	IRQCHIP_STATE_MASKED = 2,
-	IRQCHIP_STATE_LINE_LEVEL = 3,
-};
-
-union acpi_subtable_headers {
-	struct acpi_subtable_header common;
-	struct acpi_hmat_structure hmat;
-};
-
-enum {
-	IRQ_TYPE_NONE = 0,
-	IRQ_TYPE_EDGE_RISING = 1,
-	IRQ_TYPE_EDGE_FALLING = 2,
-	IRQ_TYPE_EDGE_BOTH = 3,
-	IRQ_TYPE_LEVEL_HIGH = 4,
-	IRQ_TYPE_LEVEL_LOW = 8,
-	IRQ_TYPE_LEVEL_MASK = 12,
-	IRQ_TYPE_SENSE_MASK = 15,
-	IRQ_TYPE_DEFAULT = 15,
-	IRQ_TYPE_PROBE = 16,
-	IRQ_LEVEL = 256,
-	IRQ_PER_CPU = 512,
-	IRQ_NOPROBE = 1024,
-	IRQ_NOREQUEST = 2048,
-	IRQ_NOAUTOEN = 4096,
-	IRQ_NO_BALANCING = 8192,
-	IRQ_MOVE_PCNTXT = 16384,
-	IRQ_NESTED_THREAD = 32768,
-	IRQ_NOTHREAD = 65536,
-	IRQ_PER_CPU_DEVID = 131072,
-	IRQ_IS_POLLED = 262144,
-	IRQ_DISABLE_UNLAZY = 524288,
-	IRQ_HIDDEN = 1048576,
-};
-
-struct msi_msg {
-	u32 address_lo;
-	u32 address_hi;
-	u32 data;
-};
-
-struct platform_msi_priv_data;
-
-struct platform_msi_desc {
-	struct platform_msi_priv_data *msi_priv_data;
-	u16 msi_index;
-};
-
-struct fsl_mc_msi_desc {
-	u16 msi_index;
-};
-
-struct ti_sci_inta_msi_desc {
-	u16 dev_index;
-};
-
-struct msi_desc {
-	struct list_head list;
-	unsigned int irq;
-	unsigned int nvec_used;
-	struct device *dev;
-	struct msi_msg msg;
-	struct irq_affinity_desc *affinity;
-	const void *iommu_cookie;
-	void (*write_msi_msg)(struct msi_desc *, void *);
-	void *write_msi_msg_data;
-	union {
-		struct {
-			u32 masked;
-			struct {
-				u8 is_msix: 1;
-				u8 multiple: 3;
-				u8 multi_cap: 3;
-				u8 maskbit: 1;
-				u8 is_64: 1;
-				u8 is_virtual: 1;
-				u16 entry_nr;
-				unsigned int default_irq;
-			} msi_attrib;
-			union {
-				u8 mask_pos;
-				void *mask_base;
-			};
-		};
-		struct platform_msi_desc platform;
-		struct fsl_mc_msi_desc fsl_mc;
-		struct ti_sci_inta_msi_desc inta;
-	};
-};
-
-struct irq_chip {
-	struct device *parent_device;
-	const char *name;
-	unsigned int (*irq_startup)(struct irq_data *);
-	void (*irq_shutdown)(struct irq_data *);
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_ack)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-	void (*irq_mask_ack)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_eoi)(struct irq_data *);
-	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
-	int (*irq_retrigger)(struct irq_data *);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	void (*irq_bus_lock)(struct irq_data *);
-	void (*irq_bus_sync_unlock)(struct irq_data *);
-	void (*irq_cpu_online)(struct irq_data *);
-	void (*irq_cpu_offline)(struct irq_data *);
-	void (*irq_suspend)(struct irq_data *);
-	void (*irq_resume)(struct irq_data *);
-	void (*irq_pm_shutdown)(struct irq_data *);
-	void (*irq_calc_mask)(struct irq_data *);
-	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
-	int (*irq_request_resources)(struct irq_data *);
-	void (*irq_release_resources)(struct irq_data *);
-	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
-	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
-	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
-	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
-	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
-	void (*ipi_send_single)(struct irq_data *, unsigned int);
-	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
-	int (*irq_nmi_setup)(struct irq_data *);
-	void (*irq_nmi_teardown)(struct irq_data *);
-	long unsigned int flags;
-};
-
-struct irq_chip_regs {
-	long unsigned int enable;
-	long unsigned int disable;
-	long unsigned int mask;
-	long unsigned int ack;
-	long unsigned int eoi;
-	long unsigned int type;
-	long unsigned int polarity;
-};
-
-struct irq_chip_type {
-	struct irq_chip chip;
-	struct irq_chip_regs regs;
-	irq_flow_handler_t handler;
-	u32 type;
-	u32 mask_cache_priv;
-	u32 *mask_cache;
-};
-
-struct irq_chip_generic {
-	raw_spinlock_t lock;
-	void *reg_base;
-	u32 (*reg_readl)(void *);
-	void (*reg_writel)(u32, void *);
-	void (*suspend)(struct irq_chip_generic *);
-	void (*resume)(struct irq_chip_generic *);
-	unsigned int irq_base;
-	unsigned int irq_cnt;
-	u32 mask_cache;
-	u32 type_cache;
-	u32 polarity_cache;
-	u32 wake_enabled;
-	u32 wake_active;
-	unsigned int num_ct;
-	void *private;
-	long unsigned int installed;
-	long unsigned int unused;
-	struct irq_domain *domain;
-	struct list_head list;
-	struct irq_chip_type chip_types[0];
-};
-
-enum vcpu_sysreg {
-	__INVALID_SYSREG__ = 0,
-	MPIDR_EL1 = 1,
-	CSSELR_EL1 = 2,
-	SCTLR_EL1 = 3,
-	ACTLR_EL1 = 4,
-	CPACR_EL1 = 5,
-	ZCR_EL1 = 6,
-	TTBR0_EL1 = 7,
-	TTBR1_EL1 = 8,
-	TCR_EL1 = 9,
-	ESR_EL1 = 10,
-	AFSR0_EL1 = 11,
-	AFSR1_EL1 = 12,
-	FAR_EL1 = 13,
-	MAIR_EL1 = 14,
-	VBAR_EL1 = 15,
-	CONTEXTIDR_EL1 = 16,
-	TPIDR_EL0 = 17,
-	TPIDRRO_EL0 = 18,
-	TPIDR_EL1 = 19,
-	AMAIR_EL1 = 20,
-	CNTKCTL_EL1 = 21,
-	PAR_EL1 = 22,
-	MDSCR_EL1 = 23,
-	MDCCINT_EL1 = 24,
-	DISR_EL1 = 25,
-	PMCR_EL0 = 26,
-	PMSELR_EL0 = 27,
-	PMEVCNTR0_EL0 = 28,
-	PMEVCNTR30_EL0 = 58,
-	PMCCNTR_EL0 = 59,
-	PMEVTYPER0_EL0 = 60,
-	PMEVTYPER30_EL0 = 90,
-	PMCCFILTR_EL0 = 91,
-	PMCNTENSET_EL0 = 92,
-	PMINTENSET_EL1 = 93,
-	PMOVSSET_EL0 = 94,
-	PMSWINC_EL0 = 95,
-	PMUSERENR_EL0 = 96,
-	APIAKEYLO_EL1 = 97,
-	APIAKEYHI_EL1 = 98,
-	APIBKEYLO_EL1 = 99,
-	APIBKEYHI_EL1 = 100,
-	APDAKEYLO_EL1 = 101,
-	APDAKEYHI_EL1 = 102,
-	APDBKEYLO_EL1 = 103,
-	APDBKEYHI_EL1 = 104,
-	APGAKEYLO_EL1 = 105,
-	APGAKEYHI_EL1 = 106,
-	ELR_EL1 = 107,
-	SP_EL1 = 108,
-	SPSR_EL1 = 109,
-	CNTVOFF_EL2 = 110,
-	CNTV_CVAL_EL0 = 111,
-	CNTV_CTL_EL0 = 112,
-	CNTP_CVAL_EL0 = 113,
-	CNTP_CTL_EL0 = 114,
-	DACR32_EL2 = 115,
-	IFSR32_EL2 = 116,
-	FPEXC32_EL2 = 117,
-	DBGVCR32_EL2 = 118,
-	NR_SYS_REGS = 119,
-};
-
-enum kvm_bus {
-	KVM_MMIO_BUS = 0,
-	KVM_PIO_BUS = 1,
-	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
-	KVM_FAST_MMIO_BUS = 3,
-	KVM_NR_BUSES = 4,
-};
-
-struct trace_event_raw_ipi_raise {
-	struct trace_entry ent;
-	u32 __data_loc_target_cpus;
-	const char *reason;
-	char __data[0];
-};
-
-struct trace_event_raw_ipi_handler {
-	struct trace_entry ent;
-	const char *reason;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_ipi_raise {
-	u32 target_cpus;
-};
-
-struct trace_event_data_offsets_ipi_handler {};
-
-typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
-
-typedef void (*btf_trace_ipi_entry)(void *, const char *);
-
-typedef void (*btf_trace_ipi_exit)(void *, const char *);
-
-enum ipi_msg_type {
-	IPI_RESCHEDULE = 0,
-	IPI_CALL_FUNC = 1,
-	IPI_CPU_STOP = 2,
-	IPI_CPU_CRASH_STOP = 3,
-	IPI_TIMER = 4,
-	IPI_IRQ_WORK = 5,
-	IPI_WAKEUP = 6,
-	NR_IPI = 7,
-};
-
-struct cpu_topology {
-	int thread_id;
-	int core_id;
-	int package_id;
-	int llc_id;
-	cpumask_t thread_sibling;
-	cpumask_t core_sibling;
-	cpumask_t llc_sibling;
-};
-
-enum cpufreq_table_sorting {
-	CPUFREQ_TABLE_UNSORTED = 0,
-	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
-	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
-};
-
-struct cpufreq_cpuinfo {
-	unsigned int max_freq;
-	unsigned int min_freq;
-	unsigned int transition_latency;
-};
-
-struct clk;
-
-struct cpufreq_governor;
-
-struct cpufreq_frequency_table;
-
-struct cpufreq_stats;
-
-struct thermal_cooling_device;
-
-struct cpufreq_policy {
-	cpumask_var_t cpus;
-	cpumask_var_t related_cpus;
-	cpumask_var_t real_cpus;
-	unsigned int shared_type;
-	unsigned int cpu;
-	struct clk *clk;
-	struct cpufreq_cpuinfo cpuinfo;
-	unsigned int min;
-	unsigned int max;
-	unsigned int cur;
-	unsigned int restore_freq;
-	unsigned int suspend_freq;
-	unsigned int policy;
-	unsigned int last_policy;
-	struct cpufreq_governor *governor;
-	void *governor_data;
-	char last_governor[16];
-	struct work_struct update;
-	struct freq_constraints constraints;
-	struct freq_qos_request *min_freq_req;
-	struct freq_qos_request *max_freq_req;
-	struct cpufreq_frequency_table *freq_table;
-	enum cpufreq_table_sorting freq_table_sorted;
-	struct list_head policy_list;
-	struct kobject kobj;
-	struct completion kobj_unregister;
-	struct rw_semaphore rwsem;
-	bool fast_switch_possible;
-	bool fast_switch_enabled;
-	bool strict_target;
-	unsigned int transition_delay_us;
-	bool dvfs_possible_from_any_cpu;
-	unsigned int cached_target_freq;
-	unsigned int cached_resolved_idx;
-	bool transition_ongoing;
-	spinlock_t transition_lock;
-	wait_queue_head_t transition_wait;
-	struct task_struct *transition_task;
-	struct cpufreq_stats *stats;
-	void *driver_data;
-	struct thermal_cooling_device *cdev;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct cpufreq_governor {
-	char name[16];
-	int (*init)(struct cpufreq_policy *);
-	void (*exit)(struct cpufreq_policy *);
-	int (*start)(struct cpufreq_policy *);
-	void (*stop)(struct cpufreq_policy *);
-	void (*limits)(struct cpufreq_policy *);
-	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
-	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
-	struct list_head governor_list;
-	struct module *owner;
-	u8 flags;
-};
-
-struct cpufreq_frequency_table {
-	unsigned int flags;
-	unsigned int driver_data;
-	unsigned int frequency;
-};
-
-enum arm_smccc_conduit {
-	SMCCC_CONDUIT_NONE = 0,
-	SMCCC_CONDUIT_SMC = 1,
-	SMCCC_CONDUIT_HVC = 2,
-};
-
-struct arm_smccc_res {
-	long unsigned int a0;
-	long unsigned int a1;
-	long unsigned int a2;
-	long unsigned int a3;
-};
-
-enum mitigation_state {
-	SPECTRE_UNAFFECTED = 0,
-	SPECTRE_MITIGATED = 1,
-	SPECTRE_VULNERABLE = 2,
-};
-
-enum spectre_v4_policy {
-	SPECTRE_V4_POLICY_MITIGATION_DYNAMIC = 0,
-	SPECTRE_V4_POLICY_MITIGATION_ENABLED = 1,
-	SPECTRE_V4_POLICY_MITIGATION_DISABLED = 2,
-};
-
-struct spectre_v4_param {
-	const char *str;
-	enum spectre_v4_policy policy;
-};
-
-typedef u32 compat_size_t;
-
-struct compat_statfs64;
-
-typedef s32 compat_clock_t;
-
-typedef s32 compat_pid_t;
-
-typedef s32 compat_timer_t;
-
-typedef s32 compat_int_t;
-
-typedef u64 compat_u64;
-
-typedef u32 __compat_uid32_t;
-
-typedef u32 compat_sigset_word;
-
-struct compat_sigaltstack {
-	compat_uptr_t ss_sp;
-	int ss_flags;
-	compat_size_t ss_size;
-};
-
-typedef struct compat_sigaltstack compat_stack_t;
-
-typedef struct {
-	compat_sigset_word sig[2];
-} compat_sigset_t;
-
-union compat_sigval {
-	compat_int_t sival_int;
-	compat_uptr_t sival_ptr;
-};
-
-typedef union compat_sigval compat_sigval_t;
-
-struct compat_siginfo {
-	int si_signo;
-	int si_errno;
-	int si_code;
-	union {
-		int _pad[29];
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-		} _kill;
-		struct {
-			compat_timer_t _tid;
-			int _overrun;
-			compat_sigval_t _sigval;
-		} _timer;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			compat_sigval_t _sigval;
-		} _rt;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			int _status;
-			compat_clock_t _utime;
-			compat_clock_t _stime;
-		} _sigchld;
-		struct {
-			compat_uptr_t _addr;
-			union {
-				short int _addr_lsb;
-				struct {
-					char _dummy_bnd[4];
-					compat_uptr_t _lower;
-					compat_uptr_t _upper;
-				} _addr_bnd;
-				struct {
-					char _dummy_pkey[4];
-					u32 _pkey;
-				} _addr_pkey;
-			};
-		} _sigfault;
-		struct {
-			compat_long_t _band;
-			int _fd;
-		} _sigpoll;
-		struct {
-			compat_uptr_t _call_addr;
-			int _syscall;
-			unsigned int _arch;
-		} _sigsys;
-	} _sifields;
-};
-
-struct compat_sigcontext {
-	compat_ulong_t trap_no;
-	compat_ulong_t error_code;
-	compat_ulong_t oldmask;
-	compat_ulong_t arm_r0;
-	compat_ulong_t arm_r1;
-	compat_ulong_t arm_r2;
-	compat_ulong_t arm_r3;
-	compat_ulong_t arm_r4;
-	compat_ulong_t arm_r5;
-	compat_ulong_t arm_r6;
-	compat_ulong_t arm_r7;
-	compat_ulong_t arm_r8;
-	compat_ulong_t arm_r9;
-	compat_ulong_t arm_r10;
-	compat_ulong_t arm_fp;
-	compat_ulong_t arm_ip;
-	compat_ulong_t arm_sp;
-	compat_ulong_t arm_lr;
-	compat_ulong_t arm_pc;
-	compat_ulong_t arm_cpsr;
-	compat_ulong_t fault_address;
-};
-
-struct compat_ucontext {
-	compat_ulong_t uc_flags;
-	compat_uptr_t uc_link;
-	compat_stack_t uc_stack;
-	struct compat_sigcontext uc_mcontext;
-	compat_sigset_t uc_sigmask;
-	int __unused[30];
-	compat_ulong_t uc_regspace[128];
-};
-
-struct compat_sigframe {
-	struct compat_ucontext uc;
-	compat_ulong_t retcode[2];
-};
-
-struct compat_rt_sigframe {
-	struct compat_siginfo info;
-	struct compat_sigframe sig;
-};
-
-struct compat_user_vfp {
-	compat_u64 fpregs[32];
-	compat_ulong_t fpscr;
-};
-
-struct compat_user_vfp_exc {
-	compat_ulong_t fpexc;
-	compat_ulong_t fpinst;
-	compat_ulong_t fpinst2;
-};
-
-struct compat_vfp_sigframe {
-	compat_ulong_t magic;
-	compat_ulong_t size;
-	struct compat_user_vfp ufp;
-	struct compat_user_vfp_exc ufp_exc;
-};
-
-struct compat_aux_sigframe {
-	struct compat_vfp_sigframe vfp;
-	long unsigned int end_magic;
-};
-
-union __fpsimd_vreg {
-	__int128 unsigned raw;
-	struct {
-		u64 lo;
-		u64 hi;
-	};
-};
-
-struct dyn_arch_ftrace {};
-
-struct dyn_ftrace {
-	long unsigned int ip;
-	long unsigned int flags;
-	struct dyn_arch_ftrace arch;
-};
-
-enum {
-	FTRACE_UPDATE_CALLS = 1,
-	FTRACE_DISABLE_CALLS = 2,
-	FTRACE_UPDATE_TRACE_FUNC = 4,
-	FTRACE_START_FUNC_RET = 8,
-	FTRACE_STOP_FUNC_RET = 16,
-	FTRACE_MAY_SLEEP = 32,
-};
-
-typedef __u64 Elf64_Off;
-
-typedef __s64 Elf64_Sxword;
-
-struct elf64_rela {
-	Elf64_Addr r_offset;
-	Elf64_Xword r_info;
-	Elf64_Sxword r_addend;
-};
-
-typedef struct elf64_rela Elf64_Rela;
-
-struct elf64_hdr {
-	unsigned char e_ident[16];
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;
-	Elf64_Off e_phoff;
-	Elf64_Off e_shoff;
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
-};
-
-typedef struct elf64_hdr Elf64_Ehdr;
-
-struct elf64_shdr {
-	Elf64_Word sh_name;
-	Elf64_Word sh_type;
-	Elf64_Xword sh_flags;
-	Elf64_Addr sh_addr;
-	Elf64_Off sh_offset;
-	Elf64_Xword sh_size;
-	Elf64_Word sh_link;
-	Elf64_Word sh_info;
-	Elf64_Xword sh_addralign;
-	Elf64_Xword sh_entsize;
-};
-
-typedef struct elf64_shdr Elf64_Shdr;
-
-enum aarch64_reloc_op {
-	RELOC_OP_NONE = 0,
-	RELOC_OP_ABS = 1,
-	RELOC_OP_PREL = 2,
-	RELOC_OP_PAGE = 3,
-};
-
-enum aarch64_insn_movw_imm_type {
-	AARCH64_INSN_IMM_MOVNZ = 0,
-	AARCH64_INSN_IMM_MOVKZ = 1,
-};
-
-enum perf_sample_regs_abi {
-	PERF_SAMPLE_REGS_ABI_NONE = 0,
-	PERF_SAMPLE_REGS_ABI_32 = 1,
-	PERF_SAMPLE_REGS_ABI_64 = 2,
-};
-
-enum perf_event_arm_regs {
-	PERF_REG_ARM64_X0 = 0,
-	PERF_REG_ARM64_X1 = 1,
-	PERF_REG_ARM64_X2 = 2,
-	PERF_REG_ARM64_X3 = 3,
-	PERF_REG_ARM64_X4 = 4,
-	PERF_REG_ARM64_X5 = 5,
-	PERF_REG_ARM64_X6 = 6,
-	PERF_REG_ARM64_X7 = 7,
-	PERF_REG_ARM64_X8 = 8,
-	PERF_REG_ARM64_X9 = 9,
-	PERF_REG_ARM64_X10 = 10,
-	PERF_REG_ARM64_X11 = 11,
-	PERF_REG_ARM64_X12 = 12,
-	PERF_REG_ARM64_X13 = 13,
-	PERF_REG_ARM64_X14 = 14,
-	PERF_REG_ARM64_X15 = 15,
-	PERF_REG_ARM64_X16 = 16,
-	PERF_REG_ARM64_X17 = 17,
-	PERF_REG_ARM64_X18 = 18,
-	PERF_REG_ARM64_X19 = 19,
-	PERF_REG_ARM64_X20 = 20,
-	PERF_REG_ARM64_X21 = 21,
-	PERF_REG_ARM64_X22 = 22,
-	PERF_REG_ARM64_X23 = 23,
-	PERF_REG_ARM64_X24 = 24,
-	PERF_REG_ARM64_X25 = 25,
-	PERF_REG_ARM64_X26 = 26,
-	PERF_REG_ARM64_X27 = 27,
-	PERF_REG_ARM64_X28 = 28,
-	PERF_REG_ARM64_X29 = 29,
-	PERF_REG_ARM64_LR = 30,
-	PERF_REG_ARM64_SP = 31,
-	PERF_REG_ARM64_PC = 32,
-	PERF_REG_ARM64_MAX = 33,
-};
-
-struct perf_guest_info_callbacks {
-	int (*is_in_guest)();
-	int (*is_user_mode)();
-	long unsigned int (*get_guest_ip)();
-	void (*handle_intel_pt_intr)();
-};
-
-struct perf_callchain_entry_ctx {
-	struct perf_callchain_entry *entry;
-	u32 max_stack;
-	u32 nr;
-	short int contexts;
-	bool contexts_maxed;
-};
-
-struct frame_tail {
-	struct frame_tail *fp;
-	long unsigned int lr;
-};
-
-struct compat_frame_tail {
-	compat_uptr_t fp;
-	u32 sp;
-	u32 lr;
-};
-
-struct platform_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-struct pdev_archdata {};
-
-enum perf_hw_id {
-	PERF_COUNT_HW_CPU_CYCLES = 0,
-	PERF_COUNT_HW_INSTRUCTIONS = 1,
-	PERF_COUNT_HW_CACHE_REFERENCES = 2,
-	PERF_COUNT_HW_CACHE_MISSES = 3,
-	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
-	PERF_COUNT_HW_BRANCH_MISSES = 5,
-	PERF_COUNT_HW_BUS_CYCLES = 6,
-	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
-	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
-	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
-	PERF_COUNT_HW_MAX = 10,
-};
-
-enum perf_hw_cache_id {
-	PERF_COUNT_HW_CACHE_L1D = 0,
-	PERF_COUNT_HW_CACHE_L1I = 1,
-	PERF_COUNT_HW_CACHE_LL = 2,
-	PERF_COUNT_HW_CACHE_DTLB = 3,
-	PERF_COUNT_HW_CACHE_ITLB = 4,
-	PERF_COUNT_HW_CACHE_BPU = 5,
-	PERF_COUNT_HW_CACHE_NODE = 6,
-	PERF_COUNT_HW_CACHE_MAX = 7,
-};
-
-enum perf_hw_cache_op_id {
-	PERF_COUNT_HW_CACHE_OP_READ = 0,
-	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
-	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
-	PERF_COUNT_HW_CACHE_OP_MAX = 3,
-};
-
-enum perf_hw_cache_op_result_id {
-	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
-	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
-	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
-};
-
-struct perf_event_mmap_page {
-	__u32 version;
-	__u32 compat_version;
-	__u32 lock;
-	__u32 index;
-	__s64 offset;
-	__u64 time_enabled;
-	__u64 time_running;
-	union {
-		__u64 capabilities;
-		struct {
-			__u64 cap_bit0: 1;
-			__u64 cap_bit0_is_deprecated: 1;
-			__u64 cap_user_rdpmc: 1;
-			__u64 cap_user_time: 1;
-			__u64 cap_user_time_zero: 1;
-			__u64 cap_user_time_short: 1;
-			__u64 cap_____res: 58;
-		};
-	};
-	__u16 pmc_width;
-	__u16 time_shift;
-	__u32 time_mult;
-	__u64 time_offset;
-	__u64 time_zero;
-	__u32 size;
-	__u32 __reserved_1;
-	__u64 time_cycles;
-	__u64 time_mask;
-	__u8 __reserved[928];
-	__u64 data_head;
-	__u64 data_tail;
-	__u64 data_offset;
-	__u64 data_size;
-	__u64 aux_head;
-	__u64 aux_tail;
-	__u64 aux_offset;
-	__u64 aux_size;
-};
-
-struct perf_pmu_events_attr {
-	struct device_attribute attr;
-	u64 id;
-	const char *event_str;
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	void (*hook)(struct pci_dev *);
 };
 
 struct mfd_cell;
@@ -16034,7 +35862,7 @@
 	u32 num_resources;
 	struct resource *resource;
 	const struct platform_device_id *id_entry;
-	char *driver_override;
+	const char *driver_override;
 	struct mfd_cell *mfd_cell;
 	struct pdev_archdata archdata;
 };
@@ -16048,96 +35876,2739 @@
 	struct device_driver driver;
 	const struct platform_device_id *id_table;
 	bool prevent_deferred_probe;
+	bool driver_managed_dma;
 };
 
-struct arm_pmu;
-
-struct pmu_hw_events {
-	struct perf_event *events[32];
-	long unsigned int used_mask[1];
-	raw_spinlock_t pmu_lock;
-	struct arm_pmu *percpu_pmu;
-	int irq;
+enum drm_panel_orientation {
+	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
+	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
+	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
+	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
+	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
 };
 
-struct arm_pmu {
-	struct pmu pmu;
-	cpumask_t supported_cpus;
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+typedef u64 acpi_size;
+
+typedef u32 acpi_status;
+
+typedef char *acpi_string;
+
+typedef u8 acpi_adr_space_type;
+
+struct acpi_predefined_names {
+	const char *name;
+	u8 type;
+	char *val;
+};
+
+typedef u32 (*acpi_osd_handler)(void *);
+
+typedef void (*acpi_osd_exec_callback)(void *);
+
+struct acpi_pci_id {
+	u16 segment;
+	u16 bus;
+	u16 device;
+	u16 function;
+};
+
+struct acpi_generic_address {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_table_fadt {
+	struct acpi_table_header header;
+	u32 facs;
+	u32 dsdt;
+	u8 model;
+	u8 preferred_profile;
+	u16 sci_interrupt;
+	u32 smi_command;
+	u8 acpi_enable;
+	u8 acpi_disable;
+	u8 s4_bios_request;
+	u8 pstate_control;
+	u32 pm1a_event_block;
+	u32 pm1b_event_block;
+	u32 pm1a_control_block;
+	u32 pm1b_control_block;
+	u32 pm2_control_block;
+	u32 pm_timer_block;
+	u32 gpe0_block;
+	u32 gpe1_block;
+	u8 pm1_event_length;
+	u8 pm1_control_length;
+	u8 pm2_control_length;
+	u8 pm_timer_length;
+	u8 gpe0_block_length;
+	u8 gpe1_block_length;
+	u8 gpe1_base;
+	u8 cst_control;
+	u16 c2_latency;
+	u16 c3_latency;
+	u16 flush_size;
+	u16 flush_stride;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 day_alarm;
+	u8 month_alarm;
+	u8 century;
+	u16 boot_flags;
+	u8 reserved;
+	u32 flags;
+	struct acpi_generic_address reset_register;
+	u8 reset_value;
+	u16 arm_boot_flags;
+	u8 minor_revision;
+	u64 Xfacs;
+	u64 Xdsdt;
+	struct acpi_generic_address xpm1a_event_block;
+	struct acpi_generic_address xpm1b_event_block;
+	struct acpi_generic_address xpm1a_control_block;
+	struct acpi_generic_address xpm1b_control_block;
+	struct acpi_generic_address xpm2_control_block;
+	struct acpi_generic_address xpm_timer_block;
+	struct acpi_generic_address xgpe0_block;
+	struct acpi_generic_address xgpe1_block;
+	struct acpi_generic_address sleep_control;
+	struct acpi_generic_address sleep_status;
+	u64 hypervisor_id;
+} __attribute__((packed));
+
+typedef enum {
+	OSL_GLOBAL_LOCK_HANDLER = 0,
+	OSL_NOTIFY_HANDLER = 1,
+	OSL_GPE_HANDLER = 2,
+	OSL_DEBUGGER_MAIN_THREAD = 3,
+	OSL_DEBUGGER_EXEC_THREAD = 4,
+	OSL_EC_POLL_HANDLER = 5,
+	OSL_EC_BURST_HANDLER = 6,
+} acpi_execute_type;
+
+struct acpi_gpio_params {
+	unsigned int crs_entry_index;
+	unsigned int line_index;
+	bool active_low;
+};
+
+struct acpi_os_dpc {
+	acpi_osd_exec_callback function;
+	void *context;
+	struct work_struct work;
+};
+
+struct acpi_ioremap {
+	struct list_head list;
+	void *virt;
+	acpi_physical_address phys;
+	acpi_size size;
+	union {
+		long unsigned int refcount;
+		struct rcu_work rwork;
+	} track;
+};
+
+struct acpi_hp_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+	u32 src;
+};
+
+struct acpi_wakeup_handler {
+	struct list_head list_node;
+	bool (*wakeup)(void *);
+	void *context;
+};
+
+struct acpi_device_physical_node {
+	unsigned int node_id;
+	struct list_head node;
+	struct device *dev;
+	bool put_online: 1;
+};
+
+struct resource_win {
+	struct resource res;
+	resource_size_t offset;
+};
+
+typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
+
+struct acpi_resource_irq {
+	u8 descriptor_length;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	u8 interrupts[1];
+};
+
+struct acpi_resource_dma {
+	u8 type;
+	u8 bus_master;
+	u8 transfer;
+	u8 channel_count;
+	u8 channels[1];
+};
+
+struct acpi_resource_start_dependent {
+	u8 descriptor_length;
+	u8 compatibility_priority;
+	u8 performance_robustness;
+};
+
+struct acpi_resource_io {
+	u8 io_decode;
+	u8 alignment;
+	u8 address_length;
+	u16 minimum;
+	u16 maximum;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_io {
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_dma {
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct acpi_resource_vendor {
+	u16 byte_length;
+	u8 byte_data[1];
+} __attribute__((packed));
+
+struct acpi_resource_vendor_typed {
+	u16 byte_length;
+	u8 uuid_subtype;
+	u8 uuid[16];
+	u8 byte_data[1];
+};
+
+struct acpi_resource_end_tag {
+	u8 checksum;
+};
+
+struct acpi_resource_memory24 {
+	u8 write_protect;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_memory32 {
+	u8 write_protect;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_memory32 {
+	u8 write_protect;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_memory_attribute {
+	u8 write_protect;
+	u8 caching;
+	u8 range_type;
+	u8 translation;
+};
+
+struct acpi_io_attribute {
+	u8 range_type;
+	u8 translation;
+	u8 translation_type;
+	u8 reserved1;
+};
+
+union acpi_resource_attribute {
+	struct acpi_memory_attribute mem;
+	struct acpi_io_attribute io;
+	u8 type_specific;
+};
+
+struct acpi_resource_label {
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_resource_source {
+	u8 index;
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_address16_attribute {
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+};
+
+struct acpi_address32_attribute {
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+};
+
+struct acpi_address64_attribute {
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+};
+
+struct acpi_resource_address {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+};
+
+struct acpi_resource_address16 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address16_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_address32 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address32_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address64_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_extended_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	u8 revision_ID;
+	struct acpi_address64_attribute address;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct acpi_resource_extended_irq {
+	u8 producer_consumer;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	struct acpi_resource_source resource_source;
+	u32 interrupts[1];
+} __attribute__((packed));
+
+struct acpi_resource_generic_register {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_resource_gpio {
+	u8 revision_id;
+	u8 connection_type;
+	u8 producer_consumer;
+	u8 pin_config;
+	u8 shareable;
+	u8 wake_capable;
+	u8 io_restriction;
+	u8 triggering;
+	u8 polarity;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_common_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_i2c_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 access_mode;
+	u16 slave_address;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_spi_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 wire_mode;
+	u8 device_polarity;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_uart_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 endian;
+	u8 data_bits;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 parity;
+	u8 lines_enabled;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u32 default_baud_rate;
+} __attribute__((packed));
+
+struct acpi_resource_csi2_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 local_port_instance;
+	u8 phy_type;
+} __attribute__((packed));
+
+struct acpi_resource_pin_function {
+	u8 revision_id;
+	u8 pin_config;
+	u8 shareable;
+	u16 function_number;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group {
+	u8 revision_id;
+	u8 producer_consumer;
+	u16 pin_table_length;
+	u16 vendor_length;
+	u16 *pin_table;
+	struct acpi_resource_label resource_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_function {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u16 function_number;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+union acpi_resource_data {
+	struct acpi_resource_irq irq;
+	struct acpi_resource_dma dma;
+	struct acpi_resource_start_dependent start_dpf;
+	struct acpi_resource_io io;
+	struct acpi_resource_fixed_io fixed_io;
+	struct acpi_resource_fixed_dma fixed_dma;
+	struct acpi_resource_vendor vendor;
+	struct acpi_resource_vendor_typed vendor_typed;
+	struct acpi_resource_end_tag end_tag;
+	struct acpi_resource_memory24 memory24;
+	struct acpi_resource_memory32 memory32;
+	struct acpi_resource_fixed_memory32 fixed_memory32;
+	struct acpi_resource_address16 address16;
+	struct acpi_resource_address32 address32;
+	struct acpi_resource_address64 address64;
+	struct acpi_resource_extended_address64 ext_address64;
+	struct acpi_resource_extended_irq extended_irq;
+	struct acpi_resource_generic_register generic_reg;
+	struct acpi_resource_gpio gpio;
+	struct acpi_resource_i2c_serialbus i2c_serial_bus;
+	struct acpi_resource_spi_serialbus spi_serial_bus;
+	struct acpi_resource_uart_serialbus uart_serial_bus;
+	struct acpi_resource_csi2_serialbus csi2_serial_bus;
+	struct acpi_resource_common_serialbus common_serial_bus;
+	struct acpi_resource_pin_function pin_function;
+	struct acpi_resource_pin_config pin_config;
+	struct acpi_resource_pin_group pin_group;
+	struct acpi_resource_pin_group_function pin_group_function;
+	struct acpi_resource_pin_group_config pin_group_config;
+	struct acpi_resource_address address;
+};
+
+struct acpi_resource {
+	u32 type;
+	u32 length;
+	union acpi_resource_data data;
+} __attribute__((packed));
+
+typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
+
+struct irq_override_cmp {
+	const struct dmi_system_id *system;
+	unsigned char irq;
+	unsigned char triggering;
+	unsigned char polarity;
+	unsigned char shareable;
+	bool override;
+};
+
+struct res_proc_context {
+	struct list_head *list;
+	int (*preproc)(struct acpi_resource *, void *);
+	void *preproc_data;
+	int count;
+	int error;
+};
+
+struct acpi_object_list {
+	u32 count;
+	union acpi_object *pointer;
+};
+
+struct acpi_buffer {
+	acpi_size length;
+	void *pointer;
+};
+
+enum acpi_bridge_type {
+	ACPI_BRIDGE_TYPE_PCIE = 1,
+	ACPI_BRIDGE_TYPE_CXL = 2,
+};
+
+struct acpi_pci_root {
+	struct acpi_device *device;
+	struct pci_bus *bus;
+	u16 segment;
+	int bridge_type;
+	struct resource secondary;
+	u32 osc_support_set;
+	u32 osc_control_set;
+	u32 osc_ext_support_set;
+	u32 osc_ext_control_set;
+	phys_addr_t mcfg_addr;
+};
+
+struct acpi_osc_context {
+	char *uuid_str;
+	int rev;
+	struct acpi_buffer cap;
+	struct acpi_buffer ret;
+};
+
+struct acpi_pci_root_ops;
+
+struct acpi_pci_root_info {
+	struct acpi_pci_root *root;
+	struct acpi_device *bridge;
+	struct acpi_pci_root_ops *ops;
+	struct list_head resources;
+	char name[16];
+};
+
+struct acpi_pci_root_ops {
+	struct pci_ops *pci_ops;
+	int (*init_info)(struct acpi_pci_root_info *);
+	void (*release_info)(struct acpi_pci_root_info *);
+	int (*prepare_resources)(struct acpi_pci_root_info *);
+};
+
+struct pci_osc_bit_struct {
+	u32 bit;
+	char *desc;
+};
+
+struct acpi_bus_event {
+	struct list_head node;
+	acpi_device_class device_class;
+	acpi_bus_id bus_id;
+	u32 type;
+	u32 data;
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+};
+
+struct genl_split_ops;
+
+struct genl_info;
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+struct genl_family {
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_split_ops;
+	u8 n_mcgrps;
+	u8 resv_start_op;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_split_ops *split_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+	int id;
+	unsigned int mcgrp_offset;
+};
+
+struct genl_split_ops {
+	union {
+		struct {
+			int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+			int (*doit)(struct sk_buff *, struct genl_info *);
+			void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+		};
+		struct {
+			int (*start)(struct netlink_callback *);
+			int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+			int (*done)(struct netlink_callback *);
+		};
+	};
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	void *userhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct acpi_genl_event {
+	acpi_device_class device_class;
+	char bus_id[15];
+	u32 type;
+	u32 data;
+};
+
+enum {
+	ACPI_GENL_ATTR_UNSPEC = 0,
+	ACPI_GENL_ATTR_EVENT = 1,
+	__ACPI_GENL_ATTR_MAX = 2,
+};
+
+enum {
+	ACPI_GENL_CMD_UNSPEC = 0,
+	ACPI_GENL_CMD_EVENT = 1,
+	__ACPI_GENL_CMD_MAX = 2,
+};
+
+struct acpi_lpat {
+	int temp;
+	int raw;
+};
+
+struct acpi_lpat_conversion_table {
+	struct acpi_lpat *lpat;
+	int lpat_count;
+};
+
+typedef u16 acpi_owner_id;
+
+typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
+
+typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
+
+typedef void (*acpi_object_handler)(acpi_handle, void *);
+
+typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
+
+typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
+
+union acpi_name_union {
+	u32 integer;
+	char ascii[4];
+};
+
+union acpi_operand_object;
+
+struct acpi_namespace_node {
+	union acpi_operand_object *object;
+	u8 descriptor_type;
+	u8 type;
+	u16 flags;
+	union acpi_name_union name;
+	struct acpi_namespace_node *parent;
+	struct acpi_namespace_node *child;
+	struct acpi_namespace_node *peer;
+	acpi_owner_id owner_id;
+};
+
+struct acpi_object_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+};
+
+struct acpi_object_integer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 fill[3];
+	u64 value;
+};
+
+struct acpi_object_string {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	char *pointer;
+	u32 length;
+};
+
+struct acpi_object_buffer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 *pointer;
+	u32 length;
+	u32 aml_length;
+	u8 *aml_start;
+	struct acpi_namespace_node *node;
+};
+
+struct acpi_object_package {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **elements;
+	u8 *aml_start;
+	u32 aml_length;
+	u32 count;
+};
+
+struct acpi_object_event {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	void *os_semaphore;
+};
+
+struct acpi_walk_state;
+
+typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
+
+struct acpi_object_method {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 info_flags;
+	u8 param_count;
+	u8 sync_level;
+	union acpi_operand_object *mutex;
+	union acpi_operand_object *node;
+	u8 *aml_start;
+	union {
+		acpi_internal_method implementation;
+		union acpi_operand_object *handler;
+	} dispatch;
+	u32 aml_length;
+	acpi_owner_id owner_id;
+	u8 thread_count;
+};
+
+struct acpi_thread_state;
+
+struct acpi_object_mutex {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 sync_level;
+	u16 acquisition_depth;
+	void *os_mutex;
+	u64 thread_id;
+	struct acpi_thread_state *owner_thread;
+	union acpi_operand_object *prev;
+	union acpi_operand_object *next;
+	struct acpi_namespace_node *node;
+	u8 original_sync_level;
+};
+
+struct acpi_object_region {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler;
+	union acpi_operand_object *next;
+	acpi_physical_address address;
+	u32 length;
+	void *pointer;
+};
+
+struct acpi_object_notify_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_gpe_block_info;
+
+struct acpi_object_device {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	struct acpi_gpe_block_info *gpe_block;
+};
+
+struct acpi_object_power_resource {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	u32 system_level;
+	u32 resource_order;
+};
+
+struct acpi_object_processor {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 proc_id;
+	u8 length;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	acpi_io_address address;
+};
+
+struct acpi_object_thermal_zone {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_object_field_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+};
+
+struct acpi_object_region_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u16 resource_length;
+	union acpi_operand_object *region_obj;
+	u8 *resource_buffer;
+	u16 pin_number_index;
+	u8 *internal_pcc_buffer;
+};
+
+struct acpi_object_buffer_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u8 is_create_field;
+	union acpi_operand_object *buffer_obj;
+};
+
+struct acpi_object_bank_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+	union acpi_operand_object *bank_obj;
+};
+
+struct acpi_object_index_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *index_obj;
+	union acpi_operand_object *data_obj;
+};
+
+struct acpi_object_notify_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	u32 handler_type;
+	acpi_notify_handler handler;
+	void *context;
+	union acpi_operand_object *next[2];
+};
+
+struct acpi_object_addr_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	u8 handler_flags;
+	acpi_adr_space_handler handler;
+	struct acpi_namespace_node *node;
+	void *context;
+	void *context_mutex;
+	acpi_adr_space_setup setup;
+	union acpi_operand_object *region_list;
+	union acpi_operand_object *next;
+};
+
+struct acpi_object_reference {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 class;
+	u8 target_type;
+	u8 resolved;
+	void *object;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **where;
+	u8 *index_pointer;
+	u8 *aml;
+	u32 value;
+};
+
+struct acpi_object_extra {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *method_REG;
+	struct acpi_namespace_node *scope_node;
+	void *region_context;
+	u8 *aml_start;
+	u32 aml_length;
+};
+
+struct acpi_object_data {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	acpi_object_handler handler;
+	void *pointer;
+};
+
+struct acpi_object_cache_list {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *next;
+};
+
+union acpi_operand_object {
+	struct acpi_object_common common;
+	struct acpi_object_integer integer;
+	struct acpi_object_string string;
+	struct acpi_object_buffer buffer;
+	struct acpi_object_package package;
+	struct acpi_object_event event;
+	struct acpi_object_method method;
+	struct acpi_object_mutex mutex;
+	struct acpi_object_region region;
+	struct acpi_object_notify_common common_notify;
+	struct acpi_object_device device;
+	struct acpi_object_power_resource power_resource;
+	struct acpi_object_processor processor;
+	struct acpi_object_thermal_zone thermal_zone;
+	struct acpi_object_field_common common_field;
+	struct acpi_object_region_field field;
+	struct acpi_object_buffer_field buffer_field;
+	struct acpi_object_bank_field bank_field;
+	struct acpi_object_index_field index_field;
+	struct acpi_object_notify_handler notify;
+	struct acpi_object_addr_handler address_space;
+	struct acpi_object_reference reference;
+	struct acpi_object_extra extra;
+	struct acpi_object_data data;
+	struct acpi_object_cache_list cache;
+	struct acpi_namespace_node node;
+};
+
+union acpi_parse_object;
+
+union acpi_generic_state;
+
+struct acpi_parse_state {
+	u8 *aml_start;
+	u8 *aml;
+	u8 *aml_end;
+	u8 *pkg_start;
+	u8 *pkg_end;
+	union acpi_parse_object *start_op;
+	struct acpi_namespace_node *start_node;
+	union acpi_generic_state *scope;
+	union acpi_parse_object *start_scope;
+	u32 aml_size;
+};
+
+typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
+
+typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
+
+struct acpi_opcode_info;
+
+struct acpi_walk_state {
+	struct acpi_walk_state *next;
+	u8 descriptor_type;
+	u8 walk_type;
+	u16 opcode;
+	u8 next_op_info;
+	u8 num_operands;
+	u8 operand_index;
+	acpi_owner_id owner_id;
+	u8 last_predicate;
+	u8 current_result;
+	u8 return_used;
+	u8 scope_depth;
+	u8 pass_number;
+	u8 namespace_override;
+	u8 result_size;
+	u8 result_count;
+	u8 *aml;
+	u32 arg_types;
+	u32 method_breakpoint;
+	u32 user_breakpoint;
+	u32 parse_flags;
+	struct acpi_parse_state parser_state;
+	u32 prev_arg_types;
+	u32 arg_count;
+	u16 method_nesting_depth;
+	u8 method_is_nested;
+	struct acpi_namespace_node arguments[7];
+	struct acpi_namespace_node local_variables[8];
+	union acpi_operand_object *operands[9];
+	union acpi_operand_object **params;
+	u8 *aml_last_while;
+	union acpi_operand_object **caller_return_desc;
+	union acpi_generic_state *control_state;
+	struct acpi_namespace_node *deferred_node;
+	union acpi_operand_object *implicit_return_obj;
+	struct acpi_namespace_node *method_call_node;
+	union acpi_parse_object *method_call_op;
+	union acpi_operand_object *method_desc;
+	struct acpi_namespace_node *method_node;
+	char *method_pathname;
+	union acpi_parse_object *op;
+	const struct acpi_opcode_info *op_info;
+	union acpi_parse_object *origin;
+	union acpi_operand_object *result_obj;
+	union acpi_generic_state *results;
+	union acpi_operand_object *return_desc;
+	union acpi_generic_state *scope_info;
+	union acpi_parse_object *prev_op;
+	union acpi_parse_object *next_op;
+	struct acpi_thread_state *thread;
+	acpi_parse_downwards descending_callback;
+	acpi_parse_upwards ascending_callback;
+};
+
+struct acpi_gpe_handler_info {
+	acpi_gpe_handler address;
+	void *context;
+	struct acpi_namespace_node *method_node;
+	u8 original_flags;
+	u8 originally_enabled;
+};
+
+struct acpi_gpe_notify_info {
+	struct acpi_namespace_node *device_node;
+	struct acpi_gpe_notify_info *next;
+};
+
+union acpi_gpe_dispatch_info {
+	struct acpi_namespace_node *method_node;
+	struct acpi_gpe_handler_info *handler;
+	struct acpi_gpe_notify_info *notify_list;
+};
+
+struct acpi_gpe_register_info;
+
+struct acpi_gpe_event_info {
+	union acpi_gpe_dispatch_info dispatch;
+	struct acpi_gpe_register_info *register_info;
+	u8 flags;
+	u8 gpe_number;
+	u8 runtime_count;
+	u8 disable_for_dispatch;
+};
+
+struct acpi_gpe_address {
+	u8 space_id;
+	u64 address;
+};
+
+struct acpi_gpe_register_info {
+	struct acpi_gpe_address status_address;
+	struct acpi_gpe_address enable_address;
+	u16 base_gpe_number;
+	u8 enable_for_wake;
+	u8 enable_for_run;
+	u8 mask_for_run;
+	u8 enable_mask;
+};
+
+struct acpi_gpe_xrupt_info;
+
+struct acpi_gpe_block_info {
+	struct acpi_namespace_node *node;
+	struct acpi_gpe_block_info *previous;
+	struct acpi_gpe_block_info *next;
+	struct acpi_gpe_xrupt_info *xrupt_block;
+	struct acpi_gpe_register_info *register_info;
+	struct acpi_gpe_event_info *event_info;
+	u64 address;
+	u32 register_count;
+	u16 gpe_count;
+	u16 block_base_number;
+	u8 space_id;
+	u8 initialized;
+};
+
+struct acpi_gpe_xrupt_info {
+	struct acpi_gpe_xrupt_info *previous;
+	struct acpi_gpe_xrupt_info *next;
+	struct acpi_gpe_block_info *gpe_block_list_head;
+	u32 interrupt_number;
+};
+
+struct acpi_common_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+};
+
+struct acpi_update_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *object;
+};
+
+struct acpi_pkg_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 index;
+	union acpi_operand_object *source_object;
+	union acpi_operand_object *dest_object;
+	struct acpi_walk_state *walk_state;
+	void *this_target_obj;
+	u32 num_packages;
+};
+
+struct acpi_control_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u16 opcode;
+	union acpi_parse_object *predicate_op;
+	u8 *aml_predicate_start;
+	u8 *package_end;
+	u64 loop_timeout;
+};
+
+union acpi_parse_value {
+	u64 integer;
+	u32 size;
+	char *string;
+	u8 *buffer;
 	char *name;
-	int pmuver;
-	irqreturn_t (*handle_irq)(struct arm_pmu *);
-	void (*enable)(struct perf_event *);
-	void (*disable)(struct perf_event *);
-	int (*get_event_idx)(struct pmu_hw_events *, struct perf_event *);
-	void (*clear_event_idx)(struct pmu_hw_events *, struct perf_event *);
-	int (*set_event_filter)(struct hw_perf_event *, struct perf_event_attr *);
-	u64 (*read_counter)(struct perf_event *);
-	void (*write_counter)(struct perf_event *, u64);
-	void (*start)(struct arm_pmu *);
-	void (*stop)(struct arm_pmu *);
-	void (*reset)(void *);
-	int (*map_event)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int num_events;
-	bool secure_access;
-	long unsigned int pmceid_bitmap[1];
-	long unsigned int pmceid_ext_bitmap[1];
-	struct platform_device *plat_device;
-	struct pmu_hw_events *hw_events;
-	struct hlist_node node;
-	struct notifier_block cpu_pm_nb;
-	const struct attribute_group *attr_groups[5];
-	u64 reg_pmmir;
-	long unsigned int acpi_cpuid;
+	union acpi_parse_object *arg;
 };
 
-enum armpmu_attr_groups {
-	ARMPMU_ATTR_GROUP_COMMON = 0,
-	ARMPMU_ATTR_GROUP_EVENTS = 1,
-	ARMPMU_ATTR_GROUP_FORMATS = 2,
-	ARMPMU_ATTR_GROUP_CAPS = 3,
-	ARMPMU_NR_ATTR_GROUPS = 4,
+struct acpi_parse_obj_common {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
 };
 
-struct clock_read_data {
-	u64 epoch_ns;
-	u64 epoch_cyc;
-	u64 sched_clock_mask;
-	u64 (*read_sched_clock)();
-	u32 mult;
-	u32 shift;
+struct acpi_parse_obj_named {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	char *path;
+	u8 *data;
+	u32 length;
+	u32 name;
 };
 
-struct armv8pmu_probe_info {
-	struct arm_pmu *pmu;
-	bool present;
+struct acpi_parse_obj_asl {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	union acpi_parse_object *child;
+	union acpi_parse_object *parent_method;
+	char *filename;
+	u8 file_changed;
+	char *parent_filename;
+	char *external_name;
+	char *namepath;
+	char name_seg[4];
+	u32 extra_value;
+	u32 column;
+	u32 line_number;
+	u32 logical_line_number;
+	u32 logical_byte_offset;
+	u32 end_line;
+	u32 end_logical_line;
+	u32 acpi_btype;
+	u32 aml_length;
+	u32 aml_subtree_length;
+	u32 final_aml_length;
+	u32 final_aml_offset;
+	u32 compile_flags;
+	u16 parse_opcode;
+	u8 aml_opcode_length;
+	u8 aml_pkg_len_bytes;
+	u8 extra;
+	char parse_op_name[20];
 };
 
-enum hw_breakpoint_ops {
-	HW_BREAKPOINT_INSTALL = 0,
-	HW_BREAKPOINT_UNINSTALL = 1,
-	HW_BREAKPOINT_RESTORE = 2,
+union acpi_parse_object {
+	struct acpi_parse_obj_common common;
+	struct acpi_parse_obj_named named;
+	struct acpi_parse_obj_asl asl;
 };
 
-struct cpu_suspend_ctx {
-	u64 ctx_regs[13];
-	u64 sp;
+struct acpi_scope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	struct acpi_namespace_node *node;
 };
 
-struct sleep_stack_data {
-	struct cpu_suspend_ctx system_regs;
-	long unsigned int callee_saved_regs[12];
+struct acpi_pscope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 arg_count;
+	union acpi_parse_object *op;
+	u8 *arg_end;
+	u8 *pkg_end;
+	u32 arg_list;
 };
 
-typedef void *acpi_handle;
+struct acpi_thread_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 current_sync_level;
+	struct acpi_walk_state *walk_state_list;
+	union acpi_operand_object *acquired_mutex_list;
+	u64 thread_id;
+};
 
-typedef u64 phys_cpuid_t;
+struct acpi_result_values {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *obj_desc[8];
+};
+
+struct acpi_global_notify_handler {
+	acpi_notify_handler handler;
+	void *context;
+};
+
+struct acpi_notify_info {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 handler_list_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler_list_head;
+	struct acpi_global_notify_handler *global;
+};
+
+union acpi_generic_state {
+	struct acpi_common_state common;
+	struct acpi_control_state control;
+	struct acpi_update_state update;
+	struct acpi_scope_state scope;
+	struct acpi_pscope_state parse_scope;
+	struct acpi_pkg_state pkg;
+	struct acpi_thread_state thread;
+	struct acpi_result_values results;
+	struct acpi_notify_info notify;
+};
+
+struct acpi_opcode_info {
+	u32 parse_args;
+	u32 runtime_args;
+	u16 flags;
+	u8 object_type;
+	u8 class;
+	u8 type;
+};
+
+typedef u32 acpi_name;
+
+typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
+
+struct acpi_name_info {
+	char name[4];
+	u16 argument_list;
+	u8 expected_btypes;
+} __attribute__((packed));
+
+struct acpi_package_info {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 object_type2;
+	u8 count2;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info2 {
+	u8 type;
+	u8 count;
+	u8 object_type[4];
+	u8 reserved;
+};
+
+struct acpi_package_info3 {
+	u8 type;
+	u8 count;
+	u8 object_type[2];
+	u8 tail_object_type;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info4 {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 sub_object_types;
+	u8 pkg_count;
+	u16 reserved;
+} __attribute__((packed));
+
+union acpi_predefined_info {
+	struct acpi_name_info info;
+	struct acpi_package_info ret_info;
+	struct acpi_package_info2 ret_info2;
+	struct acpi_package_info3 ret_info3;
+	struct acpi_package_info4 ret_info4;
+};
+
+struct acpi_evaluate_info {
+	struct acpi_namespace_node *prefix_node;
+	const char *relative_pathname;
+	union acpi_operand_object **parameters;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *obj_desc;
+	char *full_pathname;
+	const union acpi_predefined_info *predefined;
+	union acpi_operand_object *return_object;
+	union acpi_operand_object *parent_package;
+	u32 return_flags;
+	u32 return_btype;
+	u16 param_count;
+	u16 node_flags;
+	u8 pass_number;
+	u8 return_object_type;
+	u8 flags;
+};
+
+typedef enum {
+	ACPI_IMODE_LOAD_PASS1 = 1,
+	ACPI_IMODE_LOAD_PASS2 = 2,
+	ACPI_IMODE_EXECUTE = 3,
+} acpi_interpreter_mode;
+
+typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
+
+typedef u32 (*acpi_event_handler)(void *);
+
+struct acpi_pnp_device_id {
+	u32 length;
+	char *string;
+};
+
+struct acpi_pnp_device_id_list {
+	u32 count;
+	u32 list_size;
+	struct acpi_pnp_device_id ids[0];
+};
+
+struct acpi_mem_mapping {
+	acpi_physical_address physical_address;
+	u8 *logical_address;
+	acpi_size length;
+	struct acpi_mem_mapping *next_mm;
+};
+
+struct acpi_mem_space_context {
+	u32 length;
+	acpi_physical_address address;
+	struct acpi_mem_mapping *cur_mm;
+	struct acpi_mem_mapping *first_mm;
+};
+
+struct acpi_data_table_space_context {
+	void *pointer;
+};
+
+typedef u32 acpi_event_status;
+
+typedef u32 acpi_mutex_handle;
+
+struct acpi_gpe_device_info {
+	u32 index;
+	u32 next_block_base_index;
+	acpi_status status;
+	struct acpi_namespace_node *gpe_device;
+};
+
+typedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *);
+
+enum {
+	ACPI_REFCLASS_LOCAL = 0,
+	ACPI_REFCLASS_ARG = 1,
+	ACPI_REFCLASS_REFOF = 2,
+	ACPI_REFCLASS_INDEX = 3,
+	ACPI_REFCLASS_TABLE = 4,
+	ACPI_REFCLASS_NAME = 5,
+	ACPI_REFCLASS_DEBUG = 6,
+	ACPI_REFCLASS_MAX = 6,
+};
+
+struct acpi_common_descriptor {
+	void *common_pointer;
+	u8 descriptor_type;
+};
+
+union acpi_descriptor {
+	struct acpi_common_descriptor common;
+	union acpi_operand_object object;
+	struct acpi_namespace_node node;
+	union acpi_parse_object op;
+};
+
+struct acpi_create_field_info {
+	struct acpi_namespace_node *region_node;
+	struct acpi_namespace_node *field_node;
+	struct acpi_namespace_node *register_node;
+	struct acpi_namespace_node *data_register_node;
+	struct acpi_namespace_node *connection_node;
+	u8 *resource_buffer;
+	u32 bank_value;
+	u32 field_bit_position;
+	u32 field_bit_length;
+	u16 resource_length;
+	u16 pin_number_index;
+	u8 field_flags;
+	u8 attribute;
+	u8 field_type;
+	u8 access_length;
+};
+
+enum {
+	AML_FIELD_ACCESS_ANY = 0,
+	AML_FIELD_ACCESS_BYTE = 1,
+	AML_FIELD_ACCESS_WORD = 2,
+	AML_FIELD_ACCESS_DWORD = 3,
+	AML_FIELD_ACCESS_QWORD = 4,
+	AML_FIELD_ACCESS_BUFFER = 5,
+};
+
+enum {
+	AML_FIELD_ATTRIB_QUICK = 2,
+	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
+	AML_FIELD_ATTRIB_BYTE = 6,
+	AML_FIELD_ATTRIB_WORD = 8,
+	AML_FIELD_ATTRIB_BLOCK = 10,
+	AML_FIELD_ATTRIB_BYTES = 11,
+	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
+	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
+	AML_FIELD_ATTRIB_RAW_BYTES = 14,
+	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
+};
+
+struct acpi_port_info {
+	char *name;
+	u16 start;
+	u16 end;
+	u8 osi_dependency;
+};
+
+struct acpi_pci_device {
+	acpi_handle device;
+	struct acpi_pci_device *next;
+};
+
+struct acpi_table_desc {
+	acpi_physical_address address;
+	struct acpi_table_header *pointer;
+	u32 length;
+	union acpi_name_union signature;
+	acpi_owner_id owner_id;
+	u8 flags;
+	u16 validation_count;
+};
+
+struct acpi_table_list {
+	struct acpi_table_desc *tables;
+	u32 current_table_count;
+	u32 max_table_count;
+	u8 flags;
+};
+
+enum acpi_return_package_types {
+	ACPI_PTYPE1_FIXED = 1,
+	ACPI_PTYPE1_VAR = 2,
+	ACPI_PTYPE1_OPTION = 3,
+	ACPI_PTYPE2 = 4,
+	ACPI_PTYPE2_COUNT = 5,
+	ACPI_PTYPE2_PKG_COUNT = 6,
+	ACPI_PTYPE2_FIXED = 7,
+	ACPI_PTYPE2_MIN = 8,
+	ACPI_PTYPE2_REV_FIXED = 9,
+	ACPI_PTYPE2_FIX_VAR = 10,
+	ACPI_PTYPE2_VAR_VAR = 11,
+	ACPI_PTYPE2_UUID_PAIR = 12,
+	ACPI_PTYPE_CUSTOM = 13,
+};
+
+struct acpi_rw_lock {
+	void *writer_mutex;
+	void *reader_mutex;
+	u32 num_readers;
+};
+
+struct acpi_get_devices_info {
+	acpi_walk_callback user_function;
+	void *context;
+	const char *hid;
+};
+
+struct aml_resource_small_header {
+	u8 descriptor_type;
+};
+
+struct aml_resource_irq {
+	u8 descriptor_type;
+	u16 irq_mask;
+	u8 flags;
+} __attribute__((packed));
+
+struct aml_resource_dma {
+	u8 descriptor_type;
+	u8 dma_channel_mask;
+	u8 flags;
+};
+
+struct aml_resource_start_dependent {
+	u8 descriptor_type;
+	u8 flags;
+};
+
+struct aml_resource_end_dependent {
+	u8 descriptor_type;
+};
+
+struct aml_resource_io {
+	u8 descriptor_type;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u8 alignment;
+	u8 address_length;
+};
+
+struct aml_resource_fixed_io {
+	u8 descriptor_type;
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct aml_resource_vendor_small {
+	u8 descriptor_type;
+};
+
+struct aml_resource_end_tag {
+	u8 descriptor_type;
+	u8 checksum;
+};
+
+struct aml_resource_fixed_dma {
+	u8 descriptor_type;
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct aml_resource_large_header {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_memory24 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_vendor_large {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_fixed_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+} __attribute__((packed));
+
+struct aml_resource_extended_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u8 revision_ID;
+	u8 reserved;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct aml_resource_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address16 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_extended_irq {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u8 interrupt_count;
+	u32 interrupts[1];
+} __attribute__((packed));
+
+struct aml_resource_generic_register {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 address_space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct aml_resource_gpio {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 connection_type;
+	u16 flags;
+	u16 int_flags;
+	u8 pin_config;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_common_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_csi2_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_i2c_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u16 slave_address;
+} __attribute__((packed));
+
+struct aml_resource_spi_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+} __attribute__((packed));
+
+struct aml_resource_uart_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 default_baud_rate;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u8 parity;
+	u8 lines_enabled;
+} __attribute__((packed));
+
+struct aml_resource_pin_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config;
+	u16 function_number;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 pin_table_offset;
+	u16 label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 function_number;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+union aml_resource {
+	u8 descriptor_type;
+	struct aml_resource_small_header small_header;
+	struct aml_resource_large_header large_header;
+	struct aml_resource_irq irq;
+	struct aml_resource_dma dma;
+	struct aml_resource_start_dependent start_dpf;
+	struct aml_resource_end_dependent end_dpf;
+	struct aml_resource_io io;
+	struct aml_resource_fixed_io fixed_io;
+	struct aml_resource_fixed_dma fixed_dma;
+	struct aml_resource_vendor_small vendor_small;
+	struct aml_resource_end_tag end_tag;
+	struct aml_resource_memory24 memory24;
+	struct aml_resource_generic_register generic_reg;
+	struct aml_resource_vendor_large vendor_large;
+	struct aml_resource_memory32 memory32;
+	struct aml_resource_fixed_memory32 fixed_memory32;
+	struct aml_resource_address16 address16;
+	struct aml_resource_address32 address32;
+	struct aml_resource_address64 address64;
+	struct aml_resource_extended_address64 ext_address64;
+	struct aml_resource_extended_irq extended_irq;
+	struct aml_resource_gpio gpio;
+	struct aml_resource_i2c_serialbus i2c_serial_bus;
+	struct aml_resource_spi_serialbus spi_serial_bus;
+	struct aml_resource_uart_serialbus uart_serial_bus;
+	struct aml_resource_csi2_serialbus csi2_serial_bus;
+	struct aml_resource_common_serialbus common_serial_bus;
+	struct aml_resource_pin_function pin_function;
+	struct aml_resource_pin_config pin_config;
+	struct aml_resource_pin_group pin_group;
+	struct aml_resource_pin_group_function pin_group_function;
+	struct aml_resource_pin_group_config pin_group_config;
+	struct aml_resource_address address;
+	u32 dword_item;
+	u16 word_item;
+	u8 byte_item;
+};
+
+struct acpi_rsconvert_info {
+	u8 opcode;
+	u8 resource_offset;
+	u8 aml_offset;
+	u8 value;
+};
+
+enum {
+	ACPI_RSC_INITGET = 0,
+	ACPI_RSC_INITSET = 1,
+	ACPI_RSC_FLAGINIT = 2,
+	ACPI_RSC_1BITFLAG = 3,
+	ACPI_RSC_2BITFLAG = 4,
+	ACPI_RSC_3BITFLAG = 5,
+	ACPI_RSC_6BITFLAG = 6,
+	ACPI_RSC_ADDRESS = 7,
+	ACPI_RSC_BITMASK = 8,
+	ACPI_RSC_BITMASK16 = 9,
+	ACPI_RSC_COUNT = 10,
+	ACPI_RSC_COUNT16 = 11,
+	ACPI_RSC_COUNT_GPIO_PIN = 12,
+	ACPI_RSC_COUNT_GPIO_RES = 13,
+	ACPI_RSC_COUNT_GPIO_VEN = 14,
+	ACPI_RSC_COUNT_SERIAL_RES = 15,
+	ACPI_RSC_COUNT_SERIAL_VEN = 16,
+	ACPI_RSC_DATA8 = 17,
+	ACPI_RSC_EXIT_EQ = 18,
+	ACPI_RSC_EXIT_LE = 19,
+	ACPI_RSC_EXIT_NE = 20,
+	ACPI_RSC_LENGTH = 21,
+	ACPI_RSC_MOVE_GPIO_PIN = 22,
+	ACPI_RSC_MOVE_GPIO_RES = 23,
+	ACPI_RSC_MOVE_SERIAL_RES = 24,
+	ACPI_RSC_MOVE_SERIAL_VEN = 25,
+	ACPI_RSC_MOVE8 = 26,
+	ACPI_RSC_MOVE16 = 27,
+	ACPI_RSC_MOVE32 = 28,
+	ACPI_RSC_MOVE64 = 29,
+	ACPI_RSC_SET8 = 30,
+	ACPI_RSC_SOURCE = 31,
+	ACPI_RSC_SOURCEX = 32,
+};
+
+typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
+
+struct acpi_table_rsdp {
+	char signature[8];
+	u8 checksum;
+	char oem_id[6];
+	u8 revision;
+	u32 rsdt_physical_address;
+	u32 length;
+	u64 xsdt_physical_address;
+	u8 extended_checksum;
+	u8 reserved[3];
+} __attribute__((packed));
+
+struct acpi_table_facs {
+	char signature[4];
+	u32 length;
+	u32 hardware_signature;
+	u32 firmware_waking_vector;
+	u32 global_lock;
+	u32 flags;
+	u64 xfirmware_waking_vector;
+	u8 version;
+	u8 reserved[3];
+	u32 ospm_flags;
+	u8 reserved1[24];
+};
+
+struct acpi_address_range {
+	struct acpi_address_range *next;
+	struct acpi_namespace_node *region_node;
+	acpi_physical_address start_address;
+	acpi_physical_address end_address;
+};
+
+struct acpi_exception_info {
+	char *name;
+};
+
+typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 *custom_data;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_handle;
+
+struct input_dev {
+	const char *name;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	long unsigned int propbit[1];
+	long unsigned int evbit[1];
+	long unsigned int keybit[12];
+	long unsigned int relbit[1];
+	long unsigned int absbit[1];
+	long unsigned int mscbit[1];
+	long unsigned int ledbit[1];
+	long unsigned int sndbit[1];
+	long unsigned int ffbit[2];
+	long unsigned int swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	long unsigned int key[12];
+	long unsigned int led[1];
+	long unsigned int snd[1];
+	long unsigned int sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
+};
+
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	long unsigned int ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	struct file *effect_owners[0];
+};
+
+struct input_handler;
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+};
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+};
+
+typedef int (*acpi_op_add)(struct acpi_device *);
+
+typedef void (*acpi_op_remove)(struct acpi_device *);
+
+typedef void (*acpi_op_notify)(struct acpi_device *, u32);
+
+struct acpi_device_ops {
+	acpi_op_add add;
+	acpi_op_remove remove;
+	acpi_op_notify notify;
+};
+
+struct acpi_driver {
+	char name[80];
+	char class[80];
+	const struct acpi_device_id *ids;
+	unsigned int flags;
+	struct acpi_device_ops ops;
+	struct device_driver drv;
+	struct module *owner;
+};
+
+enum {
+	ACPI_BUTTON_LID_INIT_IGNORE = 0,
+	ACPI_BUTTON_LID_INIT_OPEN = 1,
+	ACPI_BUTTON_LID_INIT_METHOD = 2,
+	ACPI_BUTTON_LID_INIT_DISABLED = 3,
+};
+
+struct acpi_button {
+	unsigned int type;
+	struct input_dev *input;
+	char phys[32];
+	long unsigned int pushed;
+	int last_state;
+	ktime_t last_time;
+	bool suspended;
+	bool lid_state_initialized;
+};
+
+struct pnp_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+};
+
+struct pnp_card_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+	struct {
+		__u8 id[8];
+	} devs[8];
+};
+
+struct pnp_protocol;
+
+struct pnp_id;
+
+struct pnp_card {
+	struct device dev;
+	unsigned char number;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head devices;
+	struct pnp_protocol *protocol;
+	struct pnp_id *id;
+	char name[50];
+	unsigned char pnpver;
+	unsigned char productver;
+	unsigned int serial;
+	unsigned char checksum;
+	struct proc_dir_entry *procdir;
+};
+
+struct pnp_dev;
+
+struct pnp_protocol {
+	struct list_head protocol_list;
+	char *name;
+	int (*get)(struct pnp_dev *);
+	int (*set)(struct pnp_dev *);
+	int (*disable)(struct pnp_dev *);
+	bool (*can_wakeup)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	unsigned char number;
+	struct device dev;
+	struct list_head cards;
+	struct list_head devices;
+};
+
+struct pnp_id {
+	char id[8];
+	struct pnp_id *next;
+};
+
+struct pnp_card_driver;
+
+struct pnp_card_link {
+	struct pnp_card *card;
+	struct pnp_card_driver *driver;
+	void *driver_data;
+	pm_message_t pm_state;
+};
+
+struct pnp_driver {
+	const char *name;
+	const struct pnp_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
+	void (*remove)(struct pnp_dev *);
+	void (*shutdown)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	struct device_driver driver;
+};
+
+struct pnp_card_driver {
+	struct list_head global_list;
+	char *name;
+	const struct pnp_card_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
+	void (*remove)(struct pnp_card_link *);
+	int (*suspend)(struct pnp_card_link *, pm_message_t);
+	int (*resume)(struct pnp_card_link *);
+	struct pnp_driver link;
+};
+
+struct pnp_dev {
+	struct device dev;
+	u64 dma_mask;
+	unsigned int number;
+	int status;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head card_list;
+	struct list_head rdev_list;
+	struct pnp_protocol *protocol;
+	struct pnp_card *card;
+	struct pnp_driver *driver;
+	struct pnp_card_link *card_link;
+	struct pnp_id *id;
+	int active;
+	int capabilities;
+	unsigned int num_dependent_sets;
+	struct list_head resources;
+	struct list_head options;
+	char name[50];
+	int flags;
+	struct proc_dir_entry *procent;
+	void *data;
+};
+
+enum acpi_backlight_type {
+	acpi_backlight_undef = -1,
+	acpi_backlight_none = 0,
+	acpi_backlight_video = 1,
+	acpi_backlight_vendor = 2,
+	acpi_backlight_native = 3,
+	acpi_backlight_nvidia_wmi_ec = 4,
+	acpi_backlight_apple_gmux = 5,
+};
+
+typedef u32 phys_cpuid_t;
+
+struct cpuidle_state_usage {
+	long long unsigned int disable;
+	long long unsigned int usage;
+	u64 time_ns;
+	long long unsigned int above;
+	long long unsigned int below;
+	long long unsigned int rejected;
+	long long unsigned int s2idle_usage;
+	long long unsigned int s2idle_time;
+};
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+};
 
 struct thermal_cooling_device_ops;
 
 struct thermal_cooling_device {
 	int id;
-	char type[20];
+	char *type;
+	long unsigned int max_state;
 	struct device device;
 	struct device_node *np;
 	void *devdata;
@@ -16158,6 +38629,16 @@
 	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
 };
 
+struct acpi_power_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
 struct acpi_processor_cx {
 	u8 valid;
 	u8 type;
@@ -16323,853 +38804,47 @@
 	struct freq_qos_request thermal_req;
 };
 
-enum jump_label_type {
-	JUMP_LABEL_NOP = 0,
-	JUMP_LABEL_JMP = 1,
-};
-
-struct die_args {
-	struct pt_regs *regs;
-	const char *str;
-	long int err;
-	int trapnr;
-	int signr;
-};
-
-enum kgdb_bptype {
-	BP_BREAKPOINT = 0,
-	BP_HARDWARE_BREAKPOINT = 1,
-	BP_WRITE_WATCHPOINT = 2,
-	BP_READ_WATCHPOINT = 3,
-	BP_ACCESS_WATCHPOINT = 4,
-	BP_POKE_BREAKPOINT = 5,
-};
-
-enum kgdb_bpstate {
-	BP_UNDEFINED = 0,
-	BP_REMOVED = 1,
-	BP_SET = 2,
-	BP_ACTIVE = 3,
-};
-
-struct kgdb_bkpt {
-	long unsigned int bpt_addr;
-	unsigned char saved_instr[4];
-	enum kgdb_bptype type;
-	enum kgdb_bpstate state;
-};
-
-struct dbg_reg_def_t {
-	char *name;
-	int size;
-	int offset;
-};
-
-struct kgdb_arch {
-	unsigned char gdb_bpt_instr[4];
-	long unsigned int flags;
-	int (*set_breakpoint)(long unsigned int, char *);
-	int (*remove_breakpoint)(long unsigned int, char *);
-	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	void (*disable_hw_break)(struct pt_regs *);
-	void (*remove_all_hw_break)();
-	void (*correct_hw_break)();
-	void (*enable_nmi)(bool);
-};
-
-struct screen_info {
-	__u8 orig_x;
-	__u8 orig_y;
-	__u16 ext_mem_k;
-	__u16 orig_video_page;
-	__u8 orig_video_mode;
-	__u8 orig_video_cols;
-	__u8 flags;
-	__u8 unused2;
-	__u16 orig_video_ega_bx;
-	__u16 unused3;
-	__u8 orig_video_lines;
-	__u8 orig_video_isVGA;
-	__u16 orig_video_points;
-	__u16 lfb_width;
-	__u16 lfb_height;
-	__u16 lfb_depth;
-	__u32 lfb_base;
-	__u32 lfb_size;
-	__u16 cl_magic;
-	__u16 cl_offset;
-	__u16 lfb_linelength;
-	__u8 red_size;
-	__u8 red_pos;
-	__u8 green_size;
-	__u8 green_pos;
-	__u8 blue_size;
-	__u8 blue_pos;
-	__u8 rsvd_size;
-	__u8 rsvd_pos;
-	__u16 vesapm_seg;
-	__u16 vesapm_off;
-	__u16 pages;
-	__u16 vesa_attributes;
-	__u32 capabilities;
-	__u32 ext_lfb_base;
-	__u8 _reserved[2];
-} __attribute__((packed));
-
-struct pci_device_id {
-	__u32 vendor;
-	__u32 device;
-	__u32 subvendor;
-	__u32 subdevice;
-	__u32 class;
-	__u32 class_mask;
-	kernel_ulong_t driver_data;
-};
-
-struct resource_entry {
-	struct list_head node;
-	struct resource *res;
-	resource_size_t offset;
-	struct resource __res;
-};
-
-typedef u64 acpi_io_address;
-
-typedef u32 acpi_object_type;
-
-union acpi_object {
-	acpi_object_type type;
-	struct {
-		acpi_object_type type;
-		u64 value;
-	} integer;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		char *pointer;
-	} string;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		u8 *pointer;
-	} buffer;
-	struct {
-		acpi_object_type type;
-		u32 count;
-		union acpi_object *elements;
-	} package;
-	struct {
-		acpi_object_type type;
-		acpi_object_type actual_type;
-		acpi_handle handle;
-	} reference;
-	struct {
-		acpi_object_type type;
-		u32 proc_id;
-		acpi_io_address pblk_address;
-		u32 pblk_length;
-	} processor;
-	struct {
-		acpi_object_type type;
-		u32 system_level;
-		u32 resource_order;
-	} power_resource;
-};
-
-struct acpi_device;
-
-struct acpi_hotplug_profile {
-	struct kobject kobj;
-	int (*scan_dependent)(struct acpi_device *);
-	void (*notify_online)(struct acpi_device *);
-	bool enabled: 1;
-	bool demand_offline: 1;
-};
-
-struct acpi_device_status {
-	u32 present: 1;
-	u32 enabled: 1;
-	u32 show_in_ui: 1;
-	u32 functional: 1;
-	u32 battery_present: 1;
-	u32 reserved: 27;
-};
-
-struct acpi_device_flags {
-	u32 dynamic_status: 1;
-	u32 removable: 1;
-	u32 ejectable: 1;
-	u32 power_manageable: 1;
-	u32 match_driver: 1;
-	u32 initialized: 1;
-	u32 visited: 1;
-	u32 hotplug_notify: 1;
-	u32 is_dock_station: 1;
-	u32 of_compatible_ok: 1;
-	u32 coherent_dma: 1;
-	u32 cca_seen: 1;
-	u32 enumeration_by_parent: 1;
-	u32 reserved: 19;
-};
-
-typedef char acpi_bus_id[8];
-
-struct acpi_pnp_type {
-	u32 hardware_id: 1;
-	u32 bus_address: 1;
-	u32 platform_id: 1;
-	u32 reserved: 29;
-};
-
-typedef u64 acpi_bus_address;
-
-typedef char acpi_device_name[40];
-
-typedef char acpi_device_class[20];
-
-struct acpi_device_pnp {
-	acpi_bus_id bus_id;
-	struct acpi_pnp_type type;
-	acpi_bus_address bus_address;
-	char *unique_id;
-	struct list_head ids;
-	acpi_device_name device_name;
-	acpi_device_class device_class;
-	union acpi_object *str_obj;
-};
-
-struct acpi_device_power_flags {
-	u32 explicit_get: 1;
-	u32 power_resources: 1;
-	u32 inrush_current: 1;
-	u32 power_removed: 1;
-	u32 ignore_parent: 1;
-	u32 dsw_present: 1;
-	u32 reserved: 26;
-};
-
-struct acpi_device_power_state {
-	struct {
-		u8 valid: 1;
-		u8 explicit_set: 1;
-		u8 reserved: 6;
-	} flags;
-	int power;
-	int latency;
-	struct list_head resources;
-};
-
-struct acpi_device_power {
-	int state;
-	struct acpi_device_power_flags flags;
-	struct acpi_device_power_state states[5];
-};
-
-struct acpi_device_wakeup_flags {
-	u8 valid: 1;
-	u8 notifier_present: 1;
-};
-
-struct acpi_device_wakeup_context {
-	void (*func)(struct acpi_device_wakeup_context *);
-	struct device *dev;
-};
-
-struct acpi_device_wakeup {
-	acpi_handle gpe_device;
-	u64 gpe_number;
-	u64 sleep_state;
-	struct list_head resources;
-	struct acpi_device_wakeup_flags flags;
-	struct acpi_device_wakeup_context context;
-	struct wakeup_source *ws;
-	int prepare_count;
-	int enable_count;
-};
-
-struct acpi_device_perf_flags {
-	u8 reserved: 8;
-};
-
-struct acpi_device_perf_state;
-
-struct acpi_device_perf {
-	int state;
-	struct acpi_device_perf_flags flags;
-	int state_count;
-	struct acpi_device_perf_state *states;
-};
-
-struct acpi_device_dir {
-	struct proc_dir_entry *entry;
-};
-
-struct acpi_device_data {
-	const union acpi_object *pointer;
-	struct list_head properties;
-	const union acpi_object *of_compatible;
-	struct list_head subnodes;
-};
-
-struct acpi_scan_handler;
-
-struct acpi_hotplug_context;
-
-struct acpi_driver;
-
-struct acpi_gpio_mapping;
-
-struct acpi_device {
-	int device_type;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct acpi_device *parent;
-	struct list_head children;
-	struct list_head node;
-	struct list_head wakeup_list;
-	struct list_head del_list;
-	struct acpi_device_status status;
-	struct acpi_device_flags flags;
-	struct acpi_device_pnp pnp;
-	struct acpi_device_power power;
-	struct acpi_device_wakeup wakeup;
-	struct acpi_device_perf performance;
-	struct acpi_device_dir dir;
-	struct acpi_device_data data;
-	struct acpi_scan_handler *handler;
-	struct acpi_hotplug_context *hp;
-	struct acpi_driver *driver;
-	const struct acpi_gpio_mapping *driver_gpios;
-	void *driver_data;
-	struct device dev;
-	unsigned int physical_node_count;
-	unsigned int dep_unmet;
-	struct list_head physical_node_list;
-	struct mutex physical_node_lock;
-	void (*remove)(struct acpi_device *);
-};
-
-struct acpi_scan_handler {
-	const struct acpi_device_id *ids;
-	struct list_head list_node;
-	bool (*match)(const char *, const struct acpi_device_id **);
-	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
-	void (*detach)(struct acpi_device *);
-	void (*bind)(struct device *);
-	void (*unbind)(struct device *);
-	struct acpi_hotplug_profile hotplug;
-};
-
-struct acpi_hotplug_context {
-	struct acpi_device *self;
-	int (*notify)(struct acpi_device *, u32);
-	void (*uevent)(struct acpi_device *, u32);
-	void (*fixup)(struct acpi_device *);
-};
-
-typedef int (*acpi_op_add)(struct acpi_device *);
-
-typedef int (*acpi_op_remove)(struct acpi_device *);
-
-typedef void (*acpi_op_notify)(struct acpi_device *, u32);
-
-struct acpi_device_ops {
-	acpi_op_add add;
-	acpi_op_remove remove;
-	acpi_op_notify notify;
-};
-
-struct acpi_driver {
-	char name[80];
-	char class[80];
-	const struct acpi_device_id *ids;
-	unsigned int flags;
-	struct acpi_device_ops ops;
-	struct device_driver drv;
-	struct module *owner;
-};
-
-struct acpi_device_perf_state {
-	struct {
-		u8 valid: 1;
-		u8 reserved: 7;
-	} flags;
-	u8 power;
-	u8 performance;
-	int latency;
-};
-
-struct acpi_gpio_params;
-
-struct acpi_gpio_mapping {
-	const char *name;
-	const struct acpi_gpio_params *data;
+struct acpi_lpi_states_array {
 	unsigned int size;
-	unsigned int quirks;
+	unsigned int composite_states_size;
+	struct acpi_lpi_state *entries;
+	struct acpi_lpi_state *composite_states[8];
 };
 
-struct pci_bus;
-
-struct acpi_pci_root {
-	struct acpi_device *device;
-	struct pci_bus *bus;
-	u16 segment;
-	struct resource secondary;
-	u32 osc_support_set;
-	u32 osc_control_set;
-	phys_addr_t mcfg_addr;
+enum acpi_cedt_type {
+	ACPI_CEDT_TYPE_CHBS = 0,
+	ACPI_CEDT_TYPE_CFMWS = 1,
+	ACPI_CEDT_TYPE_CXIMS = 2,
+	ACPI_CEDT_TYPE_RDPAS = 3,
+	ACPI_CEDT_TYPE_RESERVED = 4,
 };
 
-typedef short unsigned int pci_bus_flags_t;
-
-struct pci_dev;
-
-struct pci_ops;
-
-struct msi_controller;
-
-struct pci_bus {
-	struct list_head node;
-	struct pci_bus *parent;
-	struct list_head children;
-	struct list_head devices;
-	struct pci_dev *self;
-	struct list_head slots;
-	struct resource *resource[4];
-	struct list_head resources;
-	struct resource busn_res;
-	struct pci_ops *ops;
-	struct msi_controller *msi;
-	void *sysdata;
-	struct proc_dir_entry *procdir;
-	unsigned char number;
-	unsigned char primary;
-	unsigned char max_bus_speed;
-	unsigned char cur_bus_speed;
-	int domain_nr;
-	char name[48];
-	short unsigned int bridge_ctl;
-	pci_bus_flags_t bus_flags;
-	struct device *bridge;
-	struct device dev;
-	struct bin_attribute *legacy_io;
-	struct bin_attribute *legacy_mem;
-	unsigned int is_added: 1;
-};
-
-struct acpi_gpio_params {
-	unsigned int crs_entry_index;
-	unsigned int line_index;
-	bool active_low;
-};
-
-struct hotplug_slot;
-
-struct pci_slot {
-	struct pci_bus *bus;
-	struct list_head list;
-	struct hotplug_slot *hotplug;
-	unsigned char number;
-	struct kobject kobj;
-};
-
-enum {
-	PCI_STD_RESOURCES = 0,
-	PCI_STD_RESOURCE_END = 5,
-	PCI_ROM_RESOURCE = 6,
-	PCI_IOV_RESOURCES = 7,
-	PCI_IOV_RESOURCE_END = 12,
-	PCI_BRIDGE_RESOURCES = 13,
-	PCI_BRIDGE_RESOURCE_END = 16,
-	PCI_NUM_RESOURCES = 17,
-	DEVICE_COUNT_RESOURCE = 17,
-};
-
-typedef int pci_power_t;
-
-typedef unsigned int pci_channel_state_t;
-
-typedef unsigned int pcie_reset_state_t;
-
-typedef short unsigned int pci_dev_flags_t;
-
-struct aer_stats;
-
-struct pci_driver;
-
-struct pcie_link_state;
-
-struct pci_vpd;
-
-struct pci_sriov;
-
-struct pci_dev {
-	struct list_head bus_list;
-	struct pci_bus *bus;
-	struct pci_bus *subordinate;
-	void *sysdata;
-	struct proc_dir_entry *procent;
-	struct pci_slot *slot;
-	unsigned int devfn;
-	short unsigned int vendor;
-	short unsigned int device;
-	short unsigned int subsystem_vendor;
-	short unsigned int subsystem_device;
-	unsigned int class;
-	u8 revision;
-	u8 hdr_type;
-	u16 aer_cap;
-	struct aer_stats *aer_stats;
-	u8 pcie_cap;
-	u8 msi_cap;
-	u8 msix_cap;
-	u8 pcie_mpss: 3;
-	u8 rom_base_reg;
-	u8 pin;
-	u16 pcie_flags_reg;
-	long unsigned int *dma_alias_mask;
-	struct pci_driver *driver;
-	u64 dma_mask;
-	struct device_dma_parameters dma_parms;
-	pci_power_t current_state;
-	unsigned int imm_ready: 1;
-	u8 pm_cap;
-	unsigned int pme_support: 5;
-	unsigned int pme_poll: 1;
-	unsigned int d1_support: 1;
-	unsigned int d2_support: 1;
-	unsigned int no_d1d2: 1;
-	unsigned int no_d3cold: 1;
-	unsigned int bridge_d3: 1;
-	unsigned int d3cold_allowed: 1;
-	unsigned int mmio_always_on: 1;
-	unsigned int wakeup_prepared: 1;
-	unsigned int runtime_d3cold: 1;
-	unsigned int skip_bus_pm: 1;
-	unsigned int ignore_hotplug: 1;
-	unsigned int hotplug_user_indicators: 1;
-	unsigned int clear_retrain_link: 1;
-	unsigned int d3hot_delay;
-	unsigned int d3cold_delay;
-	struct pcie_link_state *link_state;
-	unsigned int ltr_path: 1;
-	int l1ss;
-	unsigned int eetlp_prefix_path: 1;
-	pci_channel_state_t error_state;
-	struct device dev;
-	int cfg_size;
-	unsigned int irq;
-	struct resource resource[17];
-	bool match_driver;
-	unsigned int transparent: 1;
-	unsigned int io_window: 1;
-	unsigned int pref_window: 1;
-	unsigned int pref_64_window: 1;
-	unsigned int multifunction: 1;
-	unsigned int is_busmaster: 1;
-	unsigned int no_msi: 1;
-	unsigned int no_64bit_msi: 1;
-	unsigned int block_cfg_access: 1;
-	unsigned int broken_parity_status: 1;
-	unsigned int irq_reroute_variant: 2;
-	unsigned int msi_enabled: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int ari_enabled: 1;
-	unsigned int ats_enabled: 1;
-	unsigned int pasid_enabled: 1;
-	unsigned int pri_enabled: 1;
-	unsigned int is_managed: 1;
-	unsigned int needs_freset: 1;
-	unsigned int state_saved: 1;
-	unsigned int is_physfn: 1;
-	unsigned int is_virtfn: 1;
-	unsigned int reset_fn: 1;
-	unsigned int is_hotplug_bridge: 1;
-	unsigned int shpc_managed: 1;
-	unsigned int is_thunderbolt: 1;
-	unsigned int untrusted: 1;
-	unsigned int external_facing: 1;
-	unsigned int broken_intx_masking: 1;
-	unsigned int io_window_1k: 1;
-	unsigned int irq_managed: 1;
-	unsigned int non_compliant_bars: 1;
-	unsigned int is_probed: 1;
-	unsigned int link_active_reporting: 1;
-	unsigned int no_vf_scan: 1;
-	unsigned int no_command_memory: 1;
-	pci_dev_flags_t dev_flags;
-	atomic_t enable_cnt;
-	u32 saved_config_space[16];
-	struct hlist_head saved_cap_space;
-	struct bin_attribute *rom_attr;
-	int rom_attr_enabled;
-	struct bin_attribute *res_attr[17];
-	struct bin_attribute *res_attr_wc[17];
-	unsigned int broken_cmd_compl: 1;
-	unsigned int ptm_root: 1;
-	unsigned int ptm_enabled: 1;
-	u8 ptm_granularity;
-	const struct attribute_group **msi_irq_groups;
-	struct pci_vpd *vpd;
-	u16 dpc_cap;
-	unsigned int dpc_rp_extensions: 1;
-	u8 dpc_rp_log_size;
-	union {
-		struct pci_sriov *sriov;
-		struct pci_dev *physfn;
-	};
-	u16 ats_cap;
-	u8 ats_stu;
-	u16 pri_cap;
-	u32 pri_reqs_alloc;
-	unsigned int pasid_required: 1;
-	u16 pasid_cap;
-	u16 pasid_features;
-	u16 acs_cap;
-	phys_addr_t rom;
-	size_t romlen;
-	char *driver_override;
-	long unsigned int priv_flags;
-};
-
-struct pci_dynids {
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct pci_error_handlers;
-
-struct pci_driver {
-	struct list_head node;
-	const char *name;
-	const struct pci_device_id *id_table;
-	int (*probe)(struct pci_dev *, const struct pci_device_id *);
-	void (*remove)(struct pci_dev *);
-	int (*suspend)(struct pci_dev *, pm_message_t);
-	int (*resume)(struct pci_dev *);
-	void (*shutdown)(struct pci_dev *);
-	int (*sriov_configure)(struct pci_dev *, int);
-	const struct pci_error_handlers *err_handler;
-	const struct attribute_group **groups;
-	struct device_driver driver;
-	struct pci_dynids dynids;
-};
-
-struct pci_host_bridge {
-	struct device dev;
-	struct pci_bus *bus;
-	struct pci_ops *ops;
-	struct pci_ops *child_ops;
-	void *sysdata;
-	int busnr;
-	struct list_head windows;
-	struct list_head dma_ranges;
-	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
-	int (*map_irq)(const struct pci_dev *, u8, u8);
-	void (*release_fn)(struct pci_host_bridge *);
-	void *release_data;
-	struct msi_controller *msi;
-	unsigned int ignore_reset_delay: 1;
-	unsigned int no_ext_tags: 1;
-	unsigned int native_aer: 1;
-	unsigned int native_pcie_hotplug: 1;
-	unsigned int native_shpc_hotplug: 1;
-	unsigned int native_pme: 1;
-	unsigned int native_ltr: 1;
-	unsigned int native_dpc: 1;
-	unsigned int preserve_config: 1;
-	unsigned int size_windows: 1;
-	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
-	long: 64;
-	long unsigned int private[0];
-};
-
-struct pci_ops {
-	int (*add_bus)(struct pci_bus *);
-	void (*remove_bus)(struct pci_bus *);
-	void * (*map_bus)(struct pci_bus *, unsigned int, int);
-	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
-	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
-};
-
-typedef unsigned int pci_ers_result_t;
-
-struct pci_error_handlers {
-	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
-	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
-	pci_ers_result_t (*slot_reset)(struct pci_dev *);
-	void (*reset_prepare)(struct pci_dev *);
-	void (*reset_done)(struct pci_dev *);
-	void (*resume)(struct pci_dev *);
-};
-
-struct acpi_pci_root_ops;
-
-struct acpi_pci_root_info {
-	struct acpi_pci_root *root;
-	struct acpi_device *bridge;
-	struct acpi_pci_root_ops *ops;
-	struct list_head resources;
-	char name[16];
-};
-
-struct acpi_pci_root_ops {
-	struct pci_ops *pci_ops;
-	int (*init_info)(struct acpi_pci_root_info *);
-	void (*release_info)(struct acpi_pci_root_info *);
-	int (*prepare_resources)(struct acpi_pci_root_info *);
-};
-
-struct pci_config_window;
-
-struct pci_ecam_ops {
-	unsigned int bus_shift;
-	struct pci_ops pci_ops;
-	int (*init)(struct pci_config_window *);
-};
-
-struct pci_config_window {
-	struct resource res;
-	struct resource busr;
-	void *priv;
-	const struct pci_ecam_ops *ops;
-	union {
-		void *win;
-		void **winp;
-	};
-	struct device *parent;
-};
-
-struct acpi_pci_generic_root_info {
-	struct acpi_pci_root_info common;
-	struct pci_config_window *cfg;
-};
-
-struct trace_event_raw_instruction_emulation {
-	struct trace_entry ent;
-	u32 __data_loc_instr;
-	u64 addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_instruction_emulation {
-	u32 instr;
-};
-
-typedef void (*btf_trace_instruction_emulation)(void *, const char *, u64);
-
-enum insn_emulation_mode {
-	INSN_UNDEF = 0,
-	INSN_EMULATE = 1,
-	INSN_HW = 2,
-};
-
-enum legacy_insn_status {
-	INSN_DEPRECATED = 0,
-	INSN_OBSOLETE = 1,
-};
-
-struct insn_emulation_ops {
-	const char *name;
-	enum legacy_insn_status status;
-	struct undef_hook *hooks;
-	int (*set_hw_mode)(bool);
-};
-
-struct insn_emulation {
-	struct list_head node;
-	struct insn_emulation_ops *ops;
-	int current_mode;
-	int min;
-	int max;
-};
-
-typedef u64 acpi_size;
-
-typedef u64 acpi_physical_address;
-
-typedef u32 acpi_status;
-
-struct acpi_table_header {
-	char signature[4];
-	u32 length;
-	u8 revision;
-	u8 checksum;
-	char oem_id[6];
-	char oem_table_id[8];
-	u32 oem_revision;
-	char asl_compiler_id[4];
-	u32 asl_compiler_revision;
-};
-
-struct acpi_generic_address {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
+struct acpi_cedt_cfmws {
+	struct acpi_cedt_header header;
+	u32 reserved1;
+	u64 base_hpa;
+	u64 window_size;
+	u8 interleave_ways;
+	u8 interleave_arithmetic;
+	u16 reserved2;
+	u32 granularity;
+	u16 restrictions;
+	u16 qtg_id;
+	u32 interleave_targets[0];
 } __attribute__((packed));
 
-struct acpi_table_fadt {
+struct acpi_table_slit {
 	struct acpi_table_header header;
-	u32 facs;
-	u32 dsdt;
-	u8 model;
-	u8 preferred_profile;
-	u16 sci_interrupt;
-	u32 smi_command;
-	u8 acpi_enable;
-	u8 acpi_disable;
-	u8 s4_bios_request;
-	u8 pstate_control;
-	u32 pm1a_event_block;
-	u32 pm1b_event_block;
-	u32 pm1a_control_block;
-	u32 pm1b_control_block;
-	u32 pm2_control_block;
-	u32 pm_timer_block;
-	u32 gpe0_block;
-	u32 gpe1_block;
-	u8 pm1_event_length;
-	u8 pm1_control_length;
-	u8 pm2_control_length;
-	u8 pm_timer_length;
-	u8 gpe0_block_length;
-	u8 gpe1_block_length;
-	u8 gpe1_base;
-	u8 cst_control;
-	u16 c2_latency;
-	u16 c3_latency;
-	u16 flush_size;
-	u16 flush_stride;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 day_alarm;
-	u8 month_alarm;
-	u8 century;
-	u16 boot_flags;
-	u8 reserved;
-	u32 flags;
-	struct acpi_generic_address reset_register;
-	u8 reset_value;
-	u16 arm_boot_flags;
-	u8 minor_revision;
-	u64 Xfacs;
-	u64 Xdsdt;
-	struct acpi_generic_address xpm1a_event_block;
-	struct acpi_generic_address xpm1b_event_block;
-	struct acpi_generic_address xpm1a_control_block;
-	struct acpi_generic_address xpm1b_control_block;
-	struct acpi_generic_address xpm2_control_block;
-	struct acpi_generic_address xpm_timer_block;
-	struct acpi_generic_address xgpe0_block;
-	struct acpi_generic_address xgpe1_block;
-	struct acpi_generic_address sleep_control;
-	struct acpi_generic_address sleep_status;
-	u64 hypervisor_id;
+	u64 locality_count;
+	u8 entry[1];
 } __attribute__((packed));
 
+struct acpi_table_srat {
+	struct acpi_table_header header;
+	u32 table_revision;
+	u64 reserved;
+};
+
 enum acpi_srat_type {
 	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
 	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
@@ -17177,7 +38852,39 @@
 	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
 	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
 	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
-	ACPI_SRAT_TYPE_RESERVED = 6,
+	ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6,
+	ACPI_SRAT_TYPE_RESERVED = 7,
+};
+
+struct acpi_srat_cpu_affinity {
+	struct acpi_subtable_header header;
+	u8 proximity_domain_lo;
+	u8 apic_id;
+	u32 flags;
+	u8 local_sapic_eid;
+	u8 proximity_domain_hi[3];
+	u32 clock_domain;
+};
+
+struct acpi_srat_mem_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u16 reserved;
+	u64 base_address;
+	u64 length;
+	u32 reserved1;
+	u32 flags;
+	u64 reserved2;
+} __attribute__((packed));
+
+struct acpi_srat_x2apic_cpu_affinity {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 proximity_domain;
+	u32 apic_id;
+	u32 flags;
+	u32 clock_domain;
+	u32 reserved2;
 };
 
 struct acpi_srat_gicc_affinity {
@@ -17188,467 +38895,3705 @@
 	u32 clock_domain;
 } __attribute__((packed));
 
-struct parking_protocol_mailbox {
-	__le32 cpu_id;
-	__le32 reserved;
-	__le64 entry_point;
+struct acpi_srat_generic_affinity {
+	struct acpi_subtable_header header;
+	u8 reserved;
+	u8 device_handle_type;
+	u32 proximity_domain;
+	u8 device_handle[16];
+	u32 flags;
+	u32 reserved1;
 };
 
-struct cpu_mailbox_entry {
-	struct parking_protocol_mailbox *mailbox;
-	phys_addr_t mailbox_addr;
-	u8 version;
-	u8 gic_cpu_id;
+typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, void *, const long unsigned int);
+
+struct acpi_subtable_proc {
+	int id;
+	acpi_tbl_entry_handler handler;
+	acpi_tbl_entry_handler_arg handler_arg;
+	void *arg;
+	int count;
 };
 
-enum {
-	MEMREMAP_WB = 1,
-	MEMREMAP_WT = 2,
-	MEMREMAP_WC = 4,
-	MEMREMAP_ENC = 8,
-	MEMREMAP_DEC = 16,
+struct acpi_table_spcr {
+	struct acpi_table_header header;
+	u8 interface_type;
+	u8 reserved[3];
+	struct acpi_generic_address serial_port;
+	u8 interrupt_type;
+	u8 pc_interrupt;
+	u32 interrupt;
+	u8 baud_rate;
+	u8 parity;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 terminal_type;
+	u8 reserved1;
+	u16 pci_device_id;
+	u16 pci_vendor_id;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u32 pci_flags;
+	u8 pci_segment;
+	u32 reserved2;
+} __attribute__((packed));
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
 };
 
-struct pv_time_ops {
-	long long unsigned int (*steal_clock)(int);
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	long unsigned int iomap_base;
 };
 
-struct paravirt_patch_template {
-	struct pv_time_ops time;
+struct pnp_port {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
 };
 
-struct pvclock_vcpu_stolen_time {
-	__le32 revision;
-	__le32 attributes;
-	__le64 stolen_time;
-	u8 padding[48];
-};
-
-struct pv_time_stolen_time_region {
-	struct pvclock_vcpu_stolen_time *kaddr;
-};
-
-typedef u64 p4dval_t;
-
 typedef struct {
-	pgd_t pgd;
-} p4d_t;
+	long unsigned int bits[4];
+} pnp_irq_mask_t;
 
-enum pageflags {
-	PG_locked = 0,
-	PG_referenced = 1,
-	PG_uptodate = 2,
-	PG_dirty = 3,
-	PG_lru = 4,
-	PG_active = 5,
-	PG_workingset = 6,
-	PG_waiters = 7,
-	PG_error = 8,
-	PG_slab = 9,
-	PG_owner_priv_1 = 10,
-	PG_arch_1 = 11,
-	PG_reserved = 12,
-	PG_private = 13,
-	PG_private_2 = 14,
-	PG_writeback = 15,
-	PG_head = 16,
-	PG_mappedtodisk = 17,
-	PG_reclaim = 18,
-	PG_swapbacked = 19,
-	PG_unevictable = 20,
-	PG_mlocked = 21,
-	PG_hwpoison = 22,
-	PG_young = 23,
-	PG_idle = 24,
-	PG_arch_2 = 25,
-	__NR_PAGEFLAGS = 26,
-	PG_checked = 10,
-	PG_swapcache = 10,
-	PG_fscache = 14,
-	PG_pinned = 10,
-	PG_savepinned = 3,
-	PG_foreign = 10,
-	PG_xen_remapped = 10,
-	PG_slob_free = 13,
-	PG_double_map = 6,
-	PG_isolated = 18,
-	PG_reported = 2,
+struct pnp_irq {
+	pnp_irq_mask_t map;
+	unsigned char flags;
 };
 
-struct mem_section_usage {
-	long unsigned int subsection_map[8];
-	long unsigned int pageblock_flags[0];
+struct pnp_dma {
+	unsigned char map;
+	unsigned char flags;
 };
 
-struct page_ext;
-
-struct mem_section {
-	long unsigned int section_mem_map;
-	struct mem_section_usage *usage;
-	struct page_ext *page_ext;
-	long unsigned int pad;
+struct pnp_mem {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
 };
 
-struct page_ext {
+struct pnp_option {
+	struct list_head list;
+	unsigned int flags;
+	long unsigned int type;
+	union {
+		struct pnp_port port;
+		struct pnp_irq irq;
+		struct pnp_dma dma;
+		struct pnp_mem mem;
+	} u;
+};
+
+struct pnp_resource {
+	struct list_head list;
+	struct resource res;
+};
+
+struct acpi_hardware_id {
+	struct list_head list;
+	const char *id;
+};
+
+struct clk;
+
+struct clk_hw;
+
+struct clk_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct clk *clk;
+	struct clk_hw *clk_hw;
+};
+
+struct clk_core;
+
+struct clk_init_data;
+
+struct clk_hw {
+	struct clk_core *core;
+	struct clk *clk;
+	const struct clk_init_data *init;
+};
+
+struct clk_rate_request {
+	struct clk_core *core;
+	long unsigned int rate;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int best_parent_rate;
+	struct clk_hw *best_parent_hw;
+};
+
+struct clk_duty {
+	unsigned int num;
+	unsigned int den;
+};
+
+struct clk_ops {
+	int (*prepare)(struct clk_hw *);
+	void (*unprepare)(struct clk_hw *);
+	int (*is_prepared)(struct clk_hw *);
+	void (*unprepare_unused)(struct clk_hw *);
+	int (*enable)(struct clk_hw *);
+	void (*disable)(struct clk_hw *);
+	int (*is_enabled)(struct clk_hw *);
+	void (*disable_unused)(struct clk_hw *);
+	int (*save_context)(struct clk_hw *);
+	void (*restore_context)(struct clk_hw *);
+	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
+	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
+	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
+	int (*set_parent)(struct clk_hw *, u8);
+	u8 (*get_parent)(struct clk_hw *);
+	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
+	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
+	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
+	int (*get_phase)(struct clk_hw *);
+	int (*set_phase)(struct clk_hw *, int);
+	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*init)(struct clk_hw *);
+	void (*terminate)(struct clk_hw *);
+	void (*debug_init)(struct clk_hw *, struct dentry *);
+};
+
+struct clk_parent_data {
+	const struct clk_hw *hw;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct clk_init_data {
+	const char *name;
+	const struct clk_ops *ops;
+	const char * const *parent_names;
+	const struct clk_parent_data *parent_data;
+	const struct clk_hw **parent_hws;
+	u8 num_parents;
 	long unsigned int flags;
 };
 
-struct xa_node {
-	unsigned char shift;
-	unsigned char offset;
-	unsigned char count;
-	unsigned char nr_values;
-	struct xa_node *parent;
-	struct xarray *array;
-	union {
-		struct list_head private_list;
-		struct callback_head callback_head;
-	};
-	void *slots[64];
-	union {
-		long unsigned int tags[3];
-		long unsigned int marks[3];
-	};
+struct clk_lookup_alloc {
+	struct clk_lookup cl;
+	char dev_id[20];
+	char con_id[16];
 };
 
-typedef void (*xa_update_node_t)(struct xa_node *);
+typedef void (*of_init_fn_1)(struct device_node *);
 
-struct xa_state {
-	struct xarray *xa;
-	long unsigned int xa_index;
-	unsigned char xa_shift;
-	unsigned char xa_sibs;
-	unsigned char xa_offset;
-	unsigned char xa_pad;
-	struct xa_node *xa_node;
-	struct xa_node *xa_alloc;
-	xa_update_node_t xa_update;
+struct clk_fixed_rate {
+	struct clk_hw hw;
+	long unsigned int fixed_rate;
+	long unsigned int fixed_accuracy;
+	long unsigned int flags;
 };
 
-struct pbe {
-	void *address;
-	void *orig_address;
-	struct pbe *next;
+struct clk_mux {
+	struct clk_hw hw;
+	void *reg;
+	const u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
 };
 
-struct arch_hibernate_hdr_invariants {
-	char uts_version[65];
+struct clk {
+	struct clk_core *core;
+	struct device *dev;
+	const char *dev_id;
+	const char *con_id;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	unsigned int exclusive_count;
+	struct hlist_node clks_node;
 };
 
-struct arch_hibernate_hdr {
-	struct arch_hibernate_hdr_invariants invariants;
-	phys_addr_t ttbr1_el1;
-	void (*reenter_kernel)();
-	phys_addr_t __hyp_stub_vectors;
-	u64 sleep_cpu_mpidr;
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+struct virtqueue;
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct irq_affinity;
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+struct linear_range {
+	unsigned int min;
+	unsigned int min_sel;
+	unsigned int max_sel;
+	unsigned int step;
+};
+
+typedef int suspend_state_t;
+
+struct regulator_dev;
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+};
+
+struct regulator_coupler;
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regmap;
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regulator;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+};
+
+struct gpio_desc;
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	long unsigned int notifs;
+	long unsigned int errors;
+	int possible_errs;
+};
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long int opaque;
+};
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, long unsigned int *);
+	int (*renable)(struct regulator_irq_data *);
 };
 
 enum {
-	IRQD_TRIGGER_MASK = 15,
-	IRQD_SETAFFINITY_PENDING = 256,
-	IRQD_ACTIVATED = 512,
-	IRQD_NO_BALANCING = 1024,
-	IRQD_PER_CPU = 2048,
-	IRQD_AFFINITY_SET = 4096,
-	IRQD_LEVEL = 8192,
-	IRQD_WAKEUP_STATE = 16384,
-	IRQD_MOVE_PCNTXT = 32768,
-	IRQD_IRQ_DISABLED = 65536,
-	IRQD_IRQ_MASKED = 131072,
-	IRQD_IRQ_INPROGRESS = 262144,
-	IRQD_WAKEUP_ARMED = 524288,
-	IRQD_FORWARDED_TO_VCPU = 1048576,
-	IRQD_AFFINITY_MANAGED = 2097152,
-	IRQD_IRQ_STARTED = 4194304,
-	IRQD_MANAGED_SHUTDOWN = 8388608,
-	IRQD_SINGLE_TARGET = 16777216,
-	IRQD_DEFAULT_TRIGGER_SET = 33554432,
-	IRQD_CAN_RESERVE = 67108864,
-	IRQD_MSI_NOMASK_QUIRK = 134217728,
-	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
-	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
-	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
 };
 
-struct kimage_arch {
-	void *dtb;
-	long unsigned int dtb_mem;
-	void *elf_headers;
-	long unsigned int elf_headers_mem;
-	long unsigned int elf_headers_sz;
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
 };
 
-typedef int kexec_probe_t(const char *, long unsigned int);
-
-struct kimage;
-
-typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
-
-typedef int kexec_cleanup_t(void *);
-
-struct kexec_file_ops {
-	kexec_probe_t *probe;
-	kexec_load_t *load;
-	kexec_cleanup_t *cleanup;
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	long unsigned int char_map[4];
+	long unsigned int overrun_time;
+	int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	char read_buf[4096];
+	long unsigned int read_flags[64];
+	unsigned char echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	size_t lookahead_count;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
 };
 
-typedef long unsigned int kimage_entry_t;
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
 
-struct kexec_segment {
+struct unipair {
+	short unsigned int unicode;
+	short unsigned int fontpos;
+};
+
+struct unimapdesc {
+	short unsigned int entry_ct;
+	struct unipair *entries;
+};
+
+struct kbentry {
+	unsigned char kb_table;
+	unsigned char kb_index;
+	short unsigned int kb_value;
+};
+
+struct kbsentry {
+	unsigned char kb_func;
+	unsigned char kb_string[512];
+};
+
+struct kbkeycode {
+	unsigned int scancode;
+	unsigned int keycode;
+};
+
+struct kbd_repeat {
+	int delay;
+	int period;
+};
+
+struct console_font_op {
+	unsigned int op;
+	unsigned int flags;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_stat {
+	short unsigned int v_active;
+	short unsigned int v_signal;
+	short unsigned int v_state;
+};
+
+struct vt_sizes {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_scrollsize;
+};
+
+struct vt_consize {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_vlin;
+	short unsigned int v_clin;
+	short unsigned int v_vcol;
+	short unsigned int v_ccol;
+};
+
+struct vt_event {
+	unsigned int event;
+	unsigned int oldev;
+	unsigned int newev;
+	unsigned int pad[4];
+};
+
+struct vt_setactivate {
+	unsigned int console;
+	struct vt_mode mode;
+};
+
+struct vt_spawn_console {
+	spinlock_t lock;
+	struct pid *pid;
+	int sig;
+};
+
+struct vt_event_wait {
+	struct list_head list;
+	struct vt_event event;
+	int done;
+};
+
+enum translation_map {
+	LAT1_MAP = 0,
+	GRAF_MAP = 1,
+	IBMPC_MAP = 2,
+	USER_MAP = 3,
+	FIRST_MAP = 0,
+	LAST_MAP = 3,
+};
+
+struct uni_pagedict {
+	u16 **uni_pgdir[32];
+	long unsigned int refcount;
+	long unsigned int sum;
+	unsigned char *inverse_translations[4];
+	u16 *inverse_trans_unicode;
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
 	union {
-		void *buf;
-		void *kbuf;
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
 	};
-	size_t bufsz;
-	long unsigned int mem;
-	size_t memsz;
 };
 
-struct purgatory_info {
-	const Elf64_Ehdr *ehdr;
-	Elf64_Shdr *sechdrs;
-	void *purgatory_buf;
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
 };
 
-struct kimage {
-	kimage_entry_t head;
-	kimage_entry_t *entry;
-	kimage_entry_t *last_entry;
-	long unsigned int start;
-	struct page *control_code_page;
-	struct page *swap_page;
-	void *vmcoreinfo_data_copy;
-	long unsigned int nr_segments;
-	struct kexec_segment segment[16];
-	struct list_head control_pages;
-	struct list_head dest_pages;
-	struct list_head unusable_pages;
-	long unsigned int control_page;
-	unsigned int type: 1;
-	unsigned int preserve_context: 1;
-	unsigned int file_mode: 1;
-	struct kimage_arch arch;
-	void *kernel_buf;
-	long unsigned int kernel_buf_len;
-	void *initrd_buf;
-	long unsigned int initrd_buf_len;
-	char *cmdline_buf;
-	long unsigned int cmdline_buf_len;
-	const struct kexec_file_ops *fops;
-	void *image_loader_data;
-	struct purgatory_info purgatory_info;
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
 };
 
-typedef u8 uint8_t;
+struct uart_port;
 
-typedef u64 uint64_t;
-
-struct kexec_buf {
-	struct kimage *image;
-	void *buffer;
-	long unsigned int bufsz;
-	long unsigned int mem;
-	long unsigned int memsz;
-	long unsigned int buf_align;
-	long unsigned int buf_min;
-	long unsigned int buf_max;
-	bool top_down;
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
 };
 
-struct crash_mem_range {
-	u64 start;
-	u64 end;
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
 };
 
-struct crash_mem {
-	unsigned int max_nr_ranges;
-	unsigned int nr_ranges;
-	struct crash_mem_range ranges[0];
+typedef u64 upf_t;
+
+typedef unsigned int upstat_t;
+
+struct uart_state;
+
+struct uart_port {
+	spinlock_t lock;
+	long unsigned int iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	int hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	long unsigned int sysrq;
+	unsigned int sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
 };
 
-typedef __be32 fdt32_t;
-
-typedef __be64 fdt64_t;
-
-struct fdt_header {
-	fdt32_t magic;
-	fdt32_t totalsize;
-	fdt32_t off_dt_struct;
-	fdt32_t off_dt_strings;
-	fdt32_t off_mem_rsvmap;
-	fdt32_t version;
-	fdt32_t last_comp_version;
-	fdt32_t boot_cpuid_phys;
-	fdt32_t size_dt_strings;
-	fdt32_t size_dt_struct;
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
 };
 
-enum key_being_used_for {
-	VERIFYING_MODULE_SIGNATURE = 0,
-	VERIFYING_FIRMWARE_SIGNATURE = 1,
-	VERIFYING_KEXEC_PE_SIGNATURE = 2,
-	VERIFYING_KEY_SIGNATURE = 3,
-	VERIFYING_KEY_SELF_SIGNATURE = 4,
-	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
-	NR__KEY_BEING_USED_FOR = 6,
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
 };
 
-struct arm64_image_header {
-	__le32 code0;
-	__le32 code1;
-	__le64 text_offset;
-	__le64 image_size;
-	__le64 flags;
-	__le64 res2;
-	__le64 res3;
-	__le64 res4;
-	__le32 magic;
-	__le32 res5;
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+};
+
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
+};
+
+struct uart_8250_port;
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+	void (*setup_timer)(struct uart_8250_port *);
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	short unsigned int bugs;
+	bool fifo_bug;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	int (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, int);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct dma_chan;
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+typedef s32 dma_cookie_t;
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan *rxchan;
+	struct dma_chan *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+enum sum_check_bits {
+	SUM_CHECK_P = 0,
+	SUM_CHECK_Q = 1,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
 };
 
 typedef struct {
-	long unsigned int val;
-} swp_entry_t;
+	long unsigned int bits[1];
+} dma_cap_mask_t;
 
-typedef u32 probe_opcode_t;
-
-typedef void probes_handler_t(u32, long int, struct pt_regs *);
-
-struct arch_probe_insn {
-	probe_opcode_t *insn;
-	pstate_check_t *pstate_cc;
-	probes_handler_t *handler;
-	long unsigned int restore;
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
 };
 
-typedef u32 kprobe_opcode_t;
-
-struct arch_specific_insn {
-	struct arch_probe_insn api;
+struct dma_chan_percpu {
+	long unsigned int memcpy_count;
+	long unsigned int bytes_transferred;
 };
 
-struct kprobe;
-
-struct prev_kprobe {
-	struct kprobe *kp;
-	unsigned int status;
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
 };
 
-typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+struct dma_device;
 
-typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+struct dma_chan_dev;
 
-typedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);
+struct dma_chan {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
 
-struct kprobe {
-	struct hlist_node hlist;
-	struct list_head list;
-	long unsigned int nmissed;
-	kprobe_opcode_t *addr;
-	const char *symbol_name;
-	unsigned int offset;
-	kprobe_pre_handler_t pre_handler;
-	kprobe_post_handler_t post_handler;
-	kprobe_fault_handler_t fault_handler;
-	kprobe_opcode_t opcode;
-	struct arch_specific_insn ainsn;
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_slave_caps;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	short unsigned int max_xor;
+	short unsigned int max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan *);
+	int (*device_router_config)(struct dma_chan *);
+	void (*device_free_chan_resources)(struct dma_chan *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
+	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan *);
+	int (*device_resume)(struct dma_chan *);
+	int (*device_terminate_all)(struct dma_chan *);
+	void (*device_synchronize)(struct dma_chan *);
+	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_chan_dev {
+	struct dma_chan *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data {
+	u8 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[16];
+	unsigned int baud;
+};
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
+	unsigned int flags;
+	union {
+		void *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
+};
+
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+struct memdev {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	fmode_t fmode;
+};
+
+struct trace_event_raw_iommu_group_event {
+	struct trace_entry ent;
+	int gid;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_device_event {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_map {
+	struct trace_entry ent;
+	u64 iova;
+	u64 paddr;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_unmap {
+	struct trace_entry ent;
+	u64 iova;
+	size_t size;
+	size_t unmapped_size;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_error {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u64 iova;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iommu_group_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_iommu_device_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_map {};
+
+struct trace_event_data_offsets_unmap {};
+
+struct trace_event_data_offsets_iommu_error {
+	u32 device;
+	u32 driver;
+};
+
+typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
+
+typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
+
+typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
+
+typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
+
+typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	long unsigned int flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long int (*wait)(struct dma_fence *, bool, long int);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+};
+
+typedef u32 depot_stack_handle_t;
+
+struct drm_modeset_lock;
+
+struct drm_modeset_acquire_ctx {
+	struct ww_acquire_ctx ww_ctx;
+	struct drm_modeset_lock *contended;
+	depot_stack_handle_t stack_depot;
+	struct list_head locked;
+	bool trylock_only;
+	bool interruptible;
+};
+
+struct drm_modeset_lock {
+	struct ww_mutex mutex;
+	struct list_head head;
+};
+
+struct drm_object_properties;
+
+struct drm_mode_object {
+	uint32_t id;
+	uint32_t type;
+	struct drm_object_properties *properties;
+	struct kref refcount;
+	void (*free_cb)(struct kref *);
+};
+
+struct drm_property;
+
+struct drm_object_properties {
+	int count;
+	struct drm_property *properties[24];
+	uint64_t values[24];
+};
+
+struct drm_device;
+
+struct drm_property {
+	struct list_head head;
+	struct drm_mode_object base;
+	uint32_t flags;
+	char name[32];
+	uint32_t num_values;
+	uint64_t *values;
+	struct drm_device *dev;
+	struct list_head enum_list;
+};
+
+enum hdmi_picture_aspect {
+	HDMI_PICTURE_ASPECT_NONE = 0,
+	HDMI_PICTURE_ASPECT_4_3 = 1,
+	HDMI_PICTURE_ASPECT_16_9 = 2,
+	HDMI_PICTURE_ASPECT_64_27 = 3,
+	HDMI_PICTURE_ASPECT_256_135 = 4,
+	HDMI_PICTURE_ASPECT_RESERVED = 5,
+};
+
+struct hdr_static_metadata {
+	__u8 eotf;
+	__u8 metadata_type;
+	__u16 max_cll;
+	__u16 max_fall;
+	__u16 min_cll;
+};
+
+struct hdr_sink_metadata {
+	__u32 metadata_type;
+	union {
+		struct hdr_static_metadata hdmi_type1;
+	};
+};
+
+typedef unsigned int drm_magic_t;
+
+struct drm_clip_rect {
+	short unsigned int x1;
+	short unsigned int y1;
+	short unsigned int x2;
+	short unsigned int y2;
+};
+
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+struct drm_event_vblank {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 sequence;
+	__u32 crtc_id;
+};
+
+struct drm_event_crtc_sequence {
+	struct drm_event base;
+	__u64 user_data;
+	__s64 time_ns;
+	__u64 sequence;
+};
+
+enum drm_mode_subconnector {
+	DRM_MODE_SUBCONNECTOR_Automatic = 0,
+	DRM_MODE_SUBCONNECTOR_Unknown = 0,
+	DRM_MODE_SUBCONNECTOR_VGA = 1,
+	DRM_MODE_SUBCONNECTOR_DVID = 3,
+	DRM_MODE_SUBCONNECTOR_DVIA = 4,
+	DRM_MODE_SUBCONNECTOR_Composite = 5,
+	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+	DRM_MODE_SUBCONNECTOR_Component = 8,
+	DRM_MODE_SUBCONNECTOR_SCART = 9,
+	DRM_MODE_SUBCONNECTOR_DisplayPort = 10,
+	DRM_MODE_SUBCONNECTOR_HDMIA = 11,
+	DRM_MODE_SUBCONNECTOR_Native = 15,
+	DRM_MODE_SUBCONNECTOR_Wireless = 18,
+};
+
+struct drm_mode_fb_cmd2 {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pixel_format;
+	__u32 flags;
+	__u32 handles[4];
+	__u32 pitches[4];
+	__u32 offsets[4];
+	__u64 modifier[4];
+};
+
+struct drm_mode_create_dumb {
+	__u32 height;
+	__u32 width;
+	__u32 bpp;
+	__u32 flags;
+	__u32 handle;
+	__u32 pitch;
+	__u64 size;
+};
+
+struct drm_mode_rect {
+	__s32 x1;
+	__s32 y1;
+	__s32 x2;
+	__s32 y2;
+};
+
+enum drm_connector_force {
+	DRM_FORCE_UNSPECIFIED = 0,
+	DRM_FORCE_OFF = 1,
+	DRM_FORCE_ON = 2,
+	DRM_FORCE_ON_DIGITAL = 3,
+};
+
+enum drm_connector_status {
+	connector_status_connected = 1,
+	connector_status_disconnected = 2,
+	connector_status_unknown = 3,
+};
+
+enum drm_connector_registration_state {
+	DRM_CONNECTOR_INITIALIZING = 0,
+	DRM_CONNECTOR_REGISTERED = 1,
+	DRM_CONNECTOR_UNREGISTERED = 2,
+};
+
+enum subpixel_order {
+	SubPixelUnknown = 0,
+	SubPixelHorizontalRGB = 1,
+	SubPixelHorizontalBGR = 2,
+	SubPixelVerticalRGB = 3,
+	SubPixelVerticalBGR = 4,
+	SubPixelNone = 5,
+};
+
+struct drm_scrambling {
+	bool supported;
+	bool low_rates;
+};
+
+struct drm_scdc {
+	bool supported;
+	bool read_request;
+	struct drm_scrambling scrambling;
+};
+
+struct drm_hdmi_dsc_cap {
+	bool v_1p2;
+	bool native_420;
+	bool all_bpp;
+	u8 bpc_supported;
+	u8 max_slices;
+	int clk_per_slice;
+	u8 max_lanes;
+	u8 max_frl_rate_per_lane;
+	u8 total_chunk_kbytes;
+};
+
+struct drm_hdmi_info {
+	struct drm_scdc scdc;
+	long unsigned int y420_vdb_modes[4];
+	long unsigned int y420_cmdb_modes[4];
+	u64 y420_cmdb_map;
+	u8 y420_dc_modes;
+	u8 max_frl_rate_per_lane;
+	u8 max_lanes;
+	struct drm_hdmi_dsc_cap dsc_cap;
+};
+
+enum drm_link_status {
+	DRM_LINK_STATUS_GOOD = 0,
+	DRM_LINK_STATUS_BAD = 1,
+};
+
+struct drm_monitor_range_info {
+	u16 min_vfreq;
+	u16 max_vfreq;
+};
+
+struct drm_luminance_range_info {
+	u32 min_luminance;
+	u32 max_luminance;
+};
+
+enum drm_privacy_screen_status {
+	PRIVACY_SCREEN_DISABLED = 0,
+	PRIVACY_SCREEN_ENABLED = 1,
+	PRIVACY_SCREEN_DISABLED_LOCKED = 2,
+	PRIVACY_SCREEN_ENABLED_LOCKED = 3,
+};
+
+struct drm_display_info {
+	unsigned int width_mm;
+	unsigned int height_mm;
+	unsigned int bpc;
+	enum subpixel_order subpixel_order;
+	int panel_orientation;
+	u32 color_formats;
+	const u32 *bus_formats;
+	unsigned int num_bus_formats;
+	u32 bus_flags;
+	int max_tmds_clock;
+	bool dvi_dual;
+	bool is_hdmi;
+	bool has_hdmi_infoframe;
+	bool rgb_quant_range_selectable;
+	u8 edid_hdmi_rgb444_dc_modes;
+	u8 edid_hdmi_ycbcr444_dc_modes;
+	u8 cea_rev;
+	struct drm_hdmi_info hdmi;
+	bool non_desktop;
+	struct drm_monitor_range_info monitor_range;
+	struct drm_luminance_range_info luminance_range;
+	u8 mso_stream_count;
+	u8 mso_pixel_overlap;
+	u32 max_dsc_bpp;
+};
+
+struct drm_connector_tv_margins {
+	unsigned int bottom;
+	unsigned int left;
+	unsigned int right;
+	unsigned int top;
+};
+
+struct drm_tv_connector_state {
+	enum drm_mode_subconnector select_subconnector;
+	enum drm_mode_subconnector subconnector;
+	struct drm_connector_tv_margins margins;
+	unsigned int mode;
+	unsigned int brightness;
+	unsigned int contrast;
+	unsigned int flicker_reduction;
+	unsigned int overscan;
+	unsigned int saturation;
+	unsigned int hue;
+};
+
+struct drm_connector;
+
+struct drm_crtc;
+
+struct drm_encoder;
+
+struct drm_atomic_state;
+
+struct drm_crtc_commit;
+
+struct drm_writeback_job;
+
+struct drm_property_blob;
+
+struct drm_connector_state {
+	struct drm_connector *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	u32 colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_privacy_screen;
+
+struct drm_cmdline_mode {
+	char name[32];
+	bool specified;
+	bool refresh_specified;
+	bool bpp_specified;
+	unsigned int pixel_clock;
+	int xres;
+	int yres;
+	int bpp;
+	int refresh;
+	bool rb;
+	bool interlace;
+	bool cvt;
+	bool margins;
+	enum drm_connector_force force;
+	unsigned int rotation_reflection;
+	enum drm_panel_orientation panel_orientation;
+	struct drm_connector_tv_margins tv_margins;
+};
+
+struct drm_connector_funcs;
+
+struct drm_connector_helper_funcs;
+
+struct drm_edid;
+
+struct i2c_adapter;
+
+struct drm_tile_group;
+
+struct drm_connector {
+	struct drm_device *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	const struct drm_edid *edid_override;
+	struct mutex edid_override_mutex;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+enum drm_mode_status {
+	MODE_OK = 0,
+	MODE_HSYNC = 1,
+	MODE_VSYNC = 2,
+	MODE_H_ILLEGAL = 3,
+	MODE_V_ILLEGAL = 4,
+	MODE_BAD_WIDTH = 5,
+	MODE_NOMODE = 6,
+	MODE_NO_INTERLACE = 7,
+	MODE_NO_DBLESCAN = 8,
+	MODE_NO_VSCAN = 9,
+	MODE_MEM = 10,
+	MODE_VIRTUAL_X = 11,
+	MODE_VIRTUAL_Y = 12,
+	MODE_MEM_VIRT = 13,
+	MODE_NOCLOCK = 14,
+	MODE_CLOCK_HIGH = 15,
+	MODE_CLOCK_LOW = 16,
+	MODE_CLOCK_RANGE = 17,
+	MODE_BAD_HVALUE = 18,
+	MODE_BAD_VVALUE = 19,
+	MODE_BAD_VSCAN = 20,
+	MODE_HSYNC_NARROW = 21,
+	MODE_HSYNC_WIDE = 22,
+	MODE_HBLANK_NARROW = 23,
+	MODE_HBLANK_WIDE = 24,
+	MODE_VSYNC_NARROW = 25,
+	MODE_VSYNC_WIDE = 26,
+	MODE_VBLANK_NARROW = 27,
+	MODE_VBLANK_WIDE = 28,
+	MODE_PANEL = 29,
+	MODE_INTERLACE_WIDTH = 30,
+	MODE_ONE_WIDTH = 31,
+	MODE_ONE_HEIGHT = 32,
+	MODE_ONE_SIZE = 33,
+	MODE_NO_REDUCED = 34,
+	MODE_NO_STEREO = 35,
+	MODE_NO_420 = 36,
+	MODE_STALE = -3,
+	MODE_BAD = -2,
+	MODE_ERROR = -1,
+};
+
+struct drm_display_mode {
+	int clock;
+	u16 hdisplay;
+	u16 hsync_start;
+	u16 hsync_end;
+	u16 htotal;
+	u16 hskew;
+	u16 vdisplay;
+	u16 vsync_start;
+	u16 vsync_end;
+	u16 vtotal;
+	u16 vscan;
+	u32 flags;
+	int crtc_clock;
+	u16 crtc_hdisplay;
+	u16 crtc_hblank_start;
+	u16 crtc_hblank_end;
+	u16 crtc_hsync_start;
+	u16 crtc_hsync_end;
+	u16 crtc_htotal;
+	u16 crtc_hskew;
+	u16 crtc_vdisplay;
+	u16 crtc_vblank_start;
+	u16 crtc_vblank_end;
+	u16 crtc_vsync_start;
+	u16 crtc_vsync_end;
+	u16 crtc_vtotal;
+	u16 width_mm;
+	u16 height_mm;
+	u8 type;
+	bool expose_to_userspace;
+	struct list_head head;
+	char name[32];
+	enum drm_mode_status status;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+};
+
+struct drm_crtc_crc_entry;
+
+struct drm_crtc_crc {
+	spinlock_t lock;
+	const char *source;
+	bool opened;
+	bool overflow;
+	struct drm_crtc_crc_entry *entries;
+	int head;
+	int tail;
+	size_t values_cnt;
+	wait_queue_head_t wq;
+};
+
+struct drm_self_refresh_data;
+
+struct drm_plane;
+
+struct drm_crtc_funcs;
+
+struct drm_crtc_helper_funcs;
+
+struct drm_crtc_state;
+
+struct drm_crtc {
+	struct drm_device *dev;
+	struct device_node *port;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	struct drm_plane *primary;
+	struct drm_plane *cursor;
+	unsigned int index;
+	int cursor_x;
+	int cursor_y;
+	bool enabled;
+	struct drm_display_mode mode;
+	struct drm_display_mode hwmode;
+	int x;
+	int y;
+	const struct drm_crtc_funcs *funcs;
+	uint32_t gamma_size;
+	uint16_t *gamma_store;
+	const struct drm_crtc_helper_funcs *helper_private;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_filter_property;
+	struct drm_crtc_state *state;
+	struct list_head commit_list;
+	spinlock_t commit_lock;
+	struct dentry *debugfs_entry;
+	struct drm_crtc_crc crc;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
+	struct drm_self_refresh_data *self_refresh_data;
+};
+
+struct drm_encoder_funcs;
+
+struct drm_encoder_helper_funcs;
+
+struct drm_encoder {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char *name;
+	int encoder_type;
+	unsigned int index;
+	uint32_t possible_crtcs;
+	uint32_t possible_clones;
+	struct drm_crtc *crtc;
+	struct list_head bridge_chain;
+	const struct drm_encoder_funcs *funcs;
+	const struct drm_encoder_helper_funcs *helper_private;
+};
+
+struct __drm_planes_state;
+
+struct __drm_crtcs_state;
+
+struct __drm_connnectors_state;
+
+struct __drm_private_objs_state;
+
+struct drm_atomic_state {
+	struct kref ref;
+	struct drm_device *dev;
+	bool allow_modeset: 1;
+	bool legacy_cursor_update: 1;
+	bool async_update: 1;
+	bool duplicated: 1;
+	struct __drm_planes_state *planes;
+	struct __drm_crtcs_state *crtcs;
+	int num_connector;
+	struct __drm_connnectors_state *connectors;
+	int num_private_objs;
+	struct __drm_private_objs_state *private_objs;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct drm_crtc_commit *fake_commit;
+	struct work_struct commit_work;
+};
+
+struct drm_pending_vblank_event;
+
+struct drm_crtc_commit {
+	struct drm_crtc *crtc;
+	struct kref ref;
+	struct completion flip_done;
+	struct completion hw_done;
+	struct completion cleanup_done;
+	struct list_head commit_entry;
+	struct drm_pending_vblank_event *event;
+	bool abort_completion;
+};
+
+struct drm_writeback_connector;
+
+struct drm_framebuffer;
+
+struct drm_writeback_job {
+	struct drm_writeback_connector *connector;
+	bool prepared;
+	struct work_struct cleanup_work;
+	struct list_head list_entry;
+	struct drm_framebuffer *fb;
+	struct dma_fence *out_fence;
+	void *priv;
+};
+
+struct drm_property_blob {
+	struct drm_mode_object base;
+	struct drm_device *dev;
+	struct list_head head_global;
+	struct list_head head_file;
+	size_t length;
+	void *data;
+};
+
+struct drm_printer;
+
+struct drm_connector_funcs {
+	int (*dpms)(struct drm_connector *, int);
+	void (*reset)(struct drm_connector *);
+	enum drm_connector_status (*detect)(struct drm_connector *, bool);
+	void (*force)(struct drm_connector *);
+	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector *);
+	void (*early_unregister)(struct drm_connector *);
+	void (*destroy)(struct drm_connector *);
+	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
+	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
+	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
+	void (*oob_hotplug_event)(struct drm_connector *);
+	void (*debugfs_init)(struct drm_connector *, struct dentry *);
+};
+
+struct drm_printer {
+	void (*printfn)(struct drm_printer *, struct va_format *);
+	void (*puts)(struct drm_printer *, const char *);
+	void *arg;
+	const char *prefix;
+};
+
+struct drm_mode_config_funcs;
+
+struct drm_mode_config_helper_funcs;
+
+struct drm_mode_config {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs *funcs;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool prefer_shadow_fbdev;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_vram_mm;
+
+enum switch_power_state {
+	DRM_SWITCH_POWER_ON = 0,
+	DRM_SWITCH_POWER_OFF = 1,
+	DRM_SWITCH_POWER_CHANGING = 2,
+	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
+};
+
+struct drm_fb_helper;
+
+struct drm_driver;
+
+struct drm_minor;
+
+struct drm_master;
+
+struct drm_vblank_crtc;
+
+struct drm_vma_offset_manager;
+
+struct drm_device {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	struct drm_minor *accel;
+	bool registered;
+	struct drm_master *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+};
+
+struct drm_connector_helper_funcs {
+	int (*get_modes)(struct drm_connector *);
+	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
+	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
+	int (*mode_valid_ctx)(struct drm_connector *, struct drm_display_mode *, struct drm_modeset_acquire_ctx *, enum drm_mode_status *);
+	struct drm_encoder * (*best_encoder)(struct drm_connector *);
+	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_atomic_state *);
+	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
+	void (*atomic_commit)(struct drm_connector *, struct drm_atomic_state *);
+	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+};
+
+struct edid;
+
+struct drm_edid {
+	size_t size;
+	const struct edid *edid;
+};
+
+struct drm_tile_group {
+	struct kref refcount;
+	struct drm_device *dev;
+	int id;
+	u8 group_data[8];
+};
+
+struct drm_connector_list_iter {
+	struct drm_device *dev;
+	struct drm_connector *conn;
+};
+
+struct drm_prime_file_private {
+	struct mutex lock;
+	struct rb_root dmabufs;
+	struct rb_root handles;
+};
+
+struct drm_file {
+	bool authenticated;
+	bool stereo_allowed;
+	bool universal_planes;
+	bool atomic;
+	bool aspect_ratio_allowed;
+	bool writeback_connectors;
+	bool was_master;
+	bool is_master;
+	struct drm_master *master;
+	spinlock_t master_lookup_lock;
+	struct pid *pid;
+	drm_magic_t magic;
+	struct list_head lhead;
+	struct drm_minor *minor;
+	struct idr object_idr;
+	spinlock_t table_lock;
+	struct idr syncobj_idr;
+	spinlock_t syncobj_table_lock;
+	struct file *filp;
+	void *driver_priv;
+	struct list_head fbs;
+	struct mutex fbs_lock;
+	struct list_head blobs;
+	wait_queue_head_t event_wait;
+	struct list_head pending_event_list;
+	struct list_head event_list;
+	int event_space;
+	struct mutex event_read_lock;
+	struct drm_prime_file_private prime;
+};
+
+struct drm_master {
+	struct kref refcount;
+	struct drm_device *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+};
+
+struct drm_format_info;
+
+struct drm_mode_config_funcs {
+	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device *);
+	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_framebuffer_funcs;
+
+struct drm_gem_object;
+
+struct drm_framebuffer {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char comm[16];
+	const struct drm_format_info *format;
+	const struct drm_framebuffer_funcs *funcs;
+	unsigned int pitches[4];
+	unsigned int offsets[4];
+	uint64_t modifier;
+	unsigned int width;
+	unsigned int height;
+	int flags;
+	int hot_x;
+	int hot_y;
+	struct list_head filp_head;
+	struct drm_gem_object *obj[4];
+};
+
+struct drm_format_info {
+	u32 format;
+	u8 depth;
+	u8 num_planes;
+	union {
+		u8 cpp[4];
+		u8 char_per_block[4];
+	};
+	u8 block_w[4];
+	u8 block_h[4];
+	u8 hsub;
+	u8 vsub;
+	bool has_alpha;
+	bool is_yuv;
+	bool is_color_indexed;
+};
+
+struct drm_mode_config_helper_funcs {
+	void (*atomic_commit_tail)(struct drm_atomic_state *);
+	int (*atomic_commit_setup)(struct drm_atomic_state *);
+};
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct drm_ioctl_desc;
+
+struct drm_driver {
+	int (*load)(struct drm_device *, long unsigned int);
+	int (*open)(struct drm_device *, struct drm_file *);
+	void (*postclose)(struct drm_device *, struct drm_file *);
+	void (*lastclose)(struct drm_device *);
+	void (*unload)(struct drm_device *);
+	void (*release)(struct drm_device *);
+	void (*master_set)(struct drm_device *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
+	int (*gem_prime_mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
+	int (*dumb_destroy)(struct drm_file *, struct drm_device *, uint32_t);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+};
+
+struct drm_minor {
+	int index;
+	int type;
+	struct device *kdev;
+	struct drm_device *dev;
+	struct dentry *debugfs_root;
+	struct list_head debugfs_list;
+	struct mutex debugfs_lock;
+};
+
+struct drm_vblank_crtc {
+	struct drm_device *dev;
+	wait_queue_head_t queue;
+	struct timer_list disable_timer;
+	seqlock_t seqlock;
+	atomic64_t count;
+	ktime_t time;
+	atomic_t refcount;
+	u32 last;
+	u32 max_vblank_count;
+	unsigned int inmodeset;
+	unsigned int pipe;
+	int framedur_ns;
+	int linedur_ns;
+	struct drm_display_mode hwmode;
+	bool enabled;
+	struct kthread_worker *worker;
+	struct list_head pending_work;
+	wait_queue_head_t work_wait_queue;
+};
+
+enum drm_color_encoding {
+	DRM_COLOR_YCBCR_BT601 = 0,
+	DRM_COLOR_YCBCR_BT709 = 1,
+	DRM_COLOR_YCBCR_BT2020 = 2,
+	DRM_COLOR_ENCODING_MAX = 3,
+};
+
+enum drm_color_range {
+	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
+	DRM_COLOR_YCBCR_FULL_RANGE = 1,
+	DRM_COLOR_RANGE_MAX = 2,
+};
+
+struct drm_rect {
+	int x1;
+	int y1;
+	int x2;
+	int y2;
+};
+
+enum drm_scaling_filter {
+	DRM_SCALING_FILTER_DEFAULT = 0,
+	DRM_SCALING_FILTER_NEAREST_NEIGHBOR = 1,
+};
+
+struct drm_plane_state {
+	struct drm_plane *plane;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct dma_fence *fence;
+	int32_t crtc_x;
+	int32_t crtc_y;
+	uint32_t crtc_w;
+	uint32_t crtc_h;
+	uint32_t src_x;
+	uint32_t src_y;
+	uint32_t src_h;
+	uint32_t src_w;
+	u16 alpha;
+	uint16_t pixel_blend_mode;
+	unsigned int rotation;
+	unsigned int zpos;
+	unsigned int normalized_zpos;
+	enum drm_color_encoding color_encoding;
+	enum drm_color_range color_range;
+	struct drm_property_blob *fb_damage_clips;
+	struct drm_rect src;
+	struct drm_rect dst;
+	bool visible;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+enum drm_plane_type {
+	DRM_PLANE_TYPE_OVERLAY = 0,
+	DRM_PLANE_TYPE_PRIMARY = 1,
+	DRM_PLANE_TYPE_CURSOR = 2,
+};
+
+struct drm_plane_funcs;
+
+struct drm_plane_helper_funcs;
+
+struct drm_plane {
+	struct drm_device *dev;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	uint32_t possible_crtcs;
+	uint32_t *format_types;
+	unsigned int format_count;
+	bool format_default;
+	uint64_t *modifiers;
+	unsigned int modifier_count;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct drm_framebuffer *old_fb;
+	const struct drm_plane_funcs *funcs;
+	struct drm_object_properties properties;
+	enum drm_plane_type type;
+	unsigned int index;
+	const struct drm_plane_helper_funcs *helper_private;
+	struct drm_plane_state *state;
+	struct drm_property *alpha_property;
+	struct drm_property *zpos_property;
+	struct drm_property *rotation_property;
+	struct drm_property *blend_mode_property;
+	struct drm_property *color_encoding_property;
+	struct drm_property *color_range_property;
+	struct drm_property *scaling_filter_property;
+};
+
+struct drm_plane_funcs {
+	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_plane *);
+	void (*reset)(struct drm_plane *);
+	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
+	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
+	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_plane *);
+	void (*early_unregister)(struct drm_plane *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
+	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
+};
+
+struct drm_plane_helper_funcs {
+	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_update)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_plane *, struct drm_atomic_state *);
+	int (*atomic_async_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_async_update)(struct drm_plane *, struct drm_atomic_state *);
+};
+
+struct drm_crtc_crc_entry {
+	bool has_frame_counter;
+	uint32_t frame;
+	uint32_t crcs[10];
+};
+
+struct drm_crtc_state {
+	struct drm_crtc *crtc;
+	bool enable;
+	bool active;
+	bool planes_changed: 1;
+	bool mode_changed: 1;
+	bool active_changed: 1;
+	bool connectors_changed: 1;
+	bool zpos_changed: 1;
+	bool color_mgmt_changed: 1;
+	bool no_vblank: 1;
+	u32 plane_mask;
+	u32 connector_mask;
+	u32 encoder_mask;
+	struct drm_display_mode adjusted_mode;
+	struct drm_display_mode mode;
+	struct drm_property_blob *mode_blob;
+	struct drm_property_blob *degamma_lut;
+	struct drm_property_blob *ctm;
+	struct drm_property_blob *gamma_lut;
+	u32 target_vblank;
+	bool async_flip;
+	bool vrr_enabled;
+	bool self_refresh_active;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_pending_vblank_event *event;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct drm_pending_event {
+	struct completion *completion;
+	void (*completion_release)(struct completion *);
+	struct drm_event *event;
+	struct dma_fence *fence;
+	struct drm_file *file_priv;
+	struct list_head link;
+	struct list_head pending_link;
+};
+
+struct drm_pending_vblank_event {
+	struct drm_pending_event base;
+	unsigned int pipe;
+	u64 sequence;
+	union {
+		struct drm_event base;
+		struct drm_event_vblank vbl;
+		struct drm_event_crtc_sequence seq;
+	} event;
+};
+
+struct drm_mode_set;
+
+struct drm_crtc_funcs {
+	void (*reset)(struct drm_crtc *);
+	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
+	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
+	int (*cursor_move)(struct drm_crtc *, int, int);
+	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_crtc *);
+	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
+	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
+	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
+	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
+	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_crtc *);
+	void (*early_unregister)(struct drm_crtc *);
+	int (*set_crc_source)(struct drm_crtc *, const char *);
+	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
+	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
+	u32 (*get_vblank_counter)(struct drm_crtc *);
+	int (*enable_vblank)(struct drm_crtc *);
+	void (*disable_vblank)(struct drm_crtc *);
+	bool (*get_vblank_timestamp)(struct drm_crtc *, int *, ktime_t *, bool);
+};
+
+struct drm_mode_set {
+	struct drm_framebuffer *fb;
+	struct drm_crtc *crtc;
+	struct drm_display_mode *mode;
+	uint32_t x;
+	uint32_t y;
+	struct drm_connector **connectors;
+	size_t num_connectors;
+};
+
+enum mode_set_atomic;
+
+struct drm_crtc_helper_funcs {
+	void (*dpms)(struct drm_crtc *, int);
+	void (*prepare)(struct drm_crtc *);
+	void (*commit)(struct drm_crtc *);
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
+	void (*mode_set_nofb)(struct drm_crtc *);
+	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
+	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
+	void (*disable)(struct drm_crtc *);
+	int (*atomic_check)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_begin)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_flush)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_crtc *, struct drm_atomic_state *);
+	bool (*get_scanout_position)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+};
+
+struct __drm_planes_state {
+	struct drm_plane *ptr;
+	struct drm_plane_state *state;
+	struct drm_plane_state *old_state;
+	struct drm_plane_state *new_state;
+};
+
+struct __drm_crtcs_state {
+	struct drm_crtc *ptr;
+	struct drm_crtc_state *state;
+	struct drm_crtc_state *old_state;
+	struct drm_crtc_state *new_state;
+	struct drm_crtc_commit *commit;
+	s32 *out_fence_ptr;
+	u64 last_vblank_count;
+};
+
+struct __drm_connnectors_state {
+	struct drm_connector *ptr;
+	struct drm_connector_state *state;
+	struct drm_connector_state *old_state;
+	struct drm_connector_state *new_state;
+	s32 *out_fence_ptr;
+};
+
+struct drm_private_state;
+
+struct drm_private_obj;
+
+struct drm_private_state_funcs {
+	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
+	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_private_state *);
+};
+
+struct drm_private_state {
+	struct drm_atomic_state *state;
+	struct drm_private_obj *obj;
+};
+
+struct drm_private_obj {
+	struct list_head head;
+	struct drm_modeset_lock lock;
+	struct drm_private_state *state;
+	const struct drm_private_state_funcs *funcs;
+};
+
+struct __drm_private_objs_state {
+	struct drm_private_obj *ptr;
+	struct drm_private_state *state;
+	struct drm_private_state *old_state;
+	struct drm_private_state *new_state;
+};
+
+struct drm_bus_cfg {
+	u32 format;
 	u32 flags;
 };
 
-struct kprobe_step_ctx {
-	long unsigned int ss_pending;
-	long unsigned int match_addr;
+struct drm_bridge;
+
+struct drm_bridge_state {
+	struct drm_private_state base;
+	struct drm_bridge *bridge;
+	struct drm_bus_cfg input_bus_cfg;
+	struct drm_bus_cfg output_bus_cfg;
 };
 
-struct kprobe_ctlblk {
-	unsigned int kprobe_status;
-	long unsigned int saved_irqflag;
-	struct prev_kprobe prev_kprobe;
-	struct kprobe_step_ctx ss_ctx;
+enum drm_bridge_ops {
+	DRM_BRIDGE_OP_DETECT = 1,
+	DRM_BRIDGE_OP_EDID = 2,
+	DRM_BRIDGE_OP_HPD = 4,
+	DRM_BRIDGE_OP_MODES = 8,
 };
 
-struct kretprobe_instance;
+struct drm_bridge_timings;
 
-typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+struct drm_bridge_funcs;
 
-struct kretprobe;
+struct drm_bridge {
+	struct drm_private_obj base;
+	struct drm_device *dev;
+	struct drm_encoder *encoder;
+	struct list_head chain_node;
+	struct device_node *of_node;
+	struct list_head list;
+	const struct drm_bridge_timings *timings;
+	const struct drm_bridge_funcs *funcs;
+	void *driver_private;
+	enum drm_bridge_ops ops;
+	int type;
+	bool interlace_allowed;
+	struct i2c_adapter *ddc;
+	struct mutex hpd_mutex;
+	void (*hpd_cb)(void *, enum drm_connector_status);
+	void *hpd_data;
+};
 
-struct kretprobe_instance {
+struct drm_encoder_funcs {
+	void (*reset)(struct drm_encoder *);
+	void (*destroy)(struct drm_encoder *);
+	int (*late_register)(struct drm_encoder *);
+	void (*early_unregister)(struct drm_encoder *);
+};
+
+struct drm_encoder_helper_funcs {
+	void (*dpms)(struct drm_encoder *, int);
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*prepare)(struct drm_encoder *);
+	void (*commit)(struct drm_encoder *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*disable)(struct drm_encoder *);
+	void (*enable)(struct drm_encoder *);
+	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+};
+
+enum drm_bridge_attach_flags {
+	DRM_BRIDGE_ATTACH_NO_CONNECTOR = 1,
+};
+
+struct edid;
+
+struct drm_bridge_funcs {
+	int (*attach)(struct drm_bridge *, enum drm_bridge_attach_flags);
+	void (*detach)(struct drm_bridge *);
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*disable)(struct drm_bridge *);
+	void (*post_disable)(struct drm_bridge *);
+	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
+	void (*pre_enable)(struct drm_bridge *);
+	void (*enable)(struct drm_bridge *);
+	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_post_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	struct drm_bridge_state * (*atomic_duplicate_state)(struct drm_bridge *);
+	void (*atomic_destroy_state)(struct drm_bridge *, struct drm_bridge_state *);
+	u32 * (*atomic_get_output_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, unsigned int *);
+	u32 * (*atomic_get_input_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, u32, unsigned int *);
+	int (*atomic_check)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *);
+	struct drm_bridge_state * (*atomic_reset)(struct drm_bridge *);
+	enum drm_connector_status (*detect)(struct drm_bridge *);
+	int (*get_modes)(struct drm_bridge *, struct drm_connector *);
+	struct edid * (*get_edid)(struct drm_bridge *, struct drm_connector *);
+	void (*hpd_notify)(struct drm_bridge *, enum drm_connector_status);
+	void (*hpd_enable)(struct drm_bridge *);
+	void (*hpd_disable)(struct drm_bridge *);
+	void (*debugfs_init)(struct drm_bridge *, struct dentry *);
+};
+
+struct drm_bridge_timings {
+	u32 input_bus_flags;
+	u32 setup_time_ps;
+	u32 hold_time_ps;
+	bool dual_link;
+};
+
+struct drm_info_list {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+struct drm_info_node {
+	struct drm_minor *minor;
+	const struct drm_info_list *info_ent;
+	struct list_head list;
+	struct dentry *dent;
+};
+
+enum drm_driver_feature {
+	DRIVER_GEM = 1,
+	DRIVER_MODESET = 2,
+	DRIVER_RENDER = 8,
+	DRIVER_ATOMIC = 16,
+	DRIVER_SYNCOBJ = 32,
+	DRIVER_SYNCOBJ_TIMELINE = 64,
+	DRIVER_COMPUTE_ACCEL = 128,
+	DRIVER_USE_AGP = 33554432,
+	DRIVER_LEGACY = 67108864,
+	DRIVER_PCI_DMA = 134217728,
+	DRIVER_SG = 268435456,
+	DRIVER_HAVE_DMA = 536870912,
+	DRIVER_HAVE_IRQ = 1073741824,
+	DRIVER_KMS_LEGACY_CONTEXT = 2147483648,
+};
+
+enum drm_ioctl_flags {
+	DRM_AUTH = 1,
+	DRM_MASTER = 2,
+	DRM_ROOT_ONLY = 4,
+	DRM_UNLOCKED = 16,
+	DRM_RENDER_ALLOW = 32,
+};
+
+typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
+
+struct drm_ioctl_desc {
+	unsigned int cmd;
+	enum drm_ioctl_flags flags;
+	drm_ioctl_t *func;
+	const char *name;
+};
+
+struct drm_framebuffer_funcs {
+	void (*destroy)(struct drm_framebuffer *);
+	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
+	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
+};
+
+enum drm_debug_category {
+	DRM_UT_CORE = 0,
+	DRM_UT_DRIVER = 1,
+	DRM_UT_KMS = 2,
+	DRM_UT_PRIME = 3,
+	DRM_UT_ATOMIC = 4,
+	DRM_UT_VBL = 5,
+	DRM_UT_STATE = 6,
+	DRM_UT_LEASE = 7,
+	DRM_UT_DP = 8,
+	DRM_UT_DRMRES = 9,
+};
+
+struct drm_writeback_connector {
+	struct drm_connector base;
+	struct drm_encoder encoder;
+	struct drm_property_blob *pixel_formats_blob_ptr;
+	spinlock_t job_lock;
+	struct list_head job_queue;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
+};
+
+struct drm_mode_modeinfo {
+	__u32 clock;
+	__u16 hdisplay;
+	__u16 hsync_start;
+	__u16 hsync_end;
+	__u16 htotal;
+	__u16 hskew;
+	__u16 vdisplay;
+	__u16 vsync_start;
+	__u16 vsync_end;
+	__u16 vtotal;
+	__u16 vscan;
+	__u32 vrefresh;
+	__u32 flags;
+	__u32 type;
+	char name[32];
+};
+
+struct drm_mode_get_connector {
+	__u64 encoders_ptr;
+	__u64 modes_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_modes;
+	__u32 count_props;
+	__u32 count_encoders;
+	__u32 encoder_id;
+	__u32 connector_id;
+	__u32 connector_type;
+	__u32 connector_type_id;
+	__u32 connection;
+	__u32 mm_width;
+	__u32 mm_height;
+	__u32 subpixel;
+	__u32 pad;
+};
+
+struct drm_mode_connector_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 connector_id;
+};
+
+struct drm_mode_obj_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	long unsigned int locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct drm_prop_enum_list {
+	int type;
+	const char *name;
+};
+
+typedef void (*drmres_release_t)(struct drm_device *, void *);
+
+struct display_timing;
+
+struct drm_panel;
+
+struct drm_panel_funcs {
+	int (*prepare)(struct drm_panel *);
+	int (*enable)(struct drm_panel *);
+	int (*disable)(struct drm_panel *);
+	int (*unprepare)(struct drm_panel *);
+	int (*get_modes)(struct drm_panel *, struct drm_connector *);
+	enum drm_panel_orientation (*get_orientation)(struct drm_panel *);
+	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
+	void (*debugfs_init)(struct drm_panel *, struct dentry *);
+};
+
+struct drm_panel {
+	struct device *dev;
+	struct backlight_device *backlight;
+	const struct drm_panel_funcs *funcs;
+	int connector_type;
+	struct list_head list;
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+struct drm_conn_prop_enum_list {
+	int type;
+	const char *name;
+	struct ida ida;
+};
+
+struct drm_mode_get_encoder {
+	__u32 encoder_id;
+	__u32 encoder_type;
+	__u32 crtc_id;
+	__u32 possible_crtcs;
+	__u32 possible_clones;
+};
+
+struct iosys_map {
 	union {
-		struct hlist_node hlist;
-		struct callback_head rcu;
+		void *vaddr_iomem;
+		void *vaddr;
 	};
-	struct kretprobe *rp;
-	kprobe_opcode_t *ret_addr;
+	bool is_iomem;
+};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_resv;
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list *fences;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+};
+
+struct drm_gem_close {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_gem_flink {
+	__u32 handle;
+	__u32 name;
+};
+
+struct drm_gem_open {
+	__u32 name;
+	__u32 handle;
+	__u64 size;
+};
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+struct drm_mm;
+
+struct drm_mm_node {
+	long unsigned int color;
+	u64 start;
+	u64 size;
+	struct drm_mm *mm;
+	struct list_head node_list;
+	struct list_head hole_stack;
+	struct rb_node rb;
+	struct rb_node rb_hole_size;
+	struct rb_node rb_hole_addr;
+	u64 __subtree_last;
+	u64 hole_size;
+	u64 subtree_max_hole;
+	long unsigned int flags;
+};
+
+struct drm_mm {
+	void (*color_adjust)(const struct drm_mm_node *, long unsigned int, u64 *, u64 *);
+	struct list_head hole_stack;
+	struct drm_mm_node head_node;
+	struct rb_root_cached interval_tree;
+	struct rb_root_cached holes_size;
+	struct rb_root holes_addr;
+	long unsigned int scan_active;
+};
+
+struct drm_vma_offset_manager {
+	rwlock_t vm_lock;
+	struct drm_mm vm_addr_space_mm;
+};
+
+struct drm_vma_offset_node {
+	rwlock_t vm_lock;
+	struct drm_mm_node vm_node;
+	struct rb_root vm_files;
+	void *driver_private;
+};
+
+struct drm_gem_object_funcs;
+
+struct drm_gem_lru;
+
+struct drm_gem_object {
+	struct kref refcount;
+	unsigned int handle_count;
+	struct drm_device *dev;
+	struct file *filp;
+	struct drm_vma_offset_node vma_node;
+	size_t size;
+	int name;
+	struct dma_buf *dma_buf;
+	struct dma_buf_attachment *import_attach;
+	struct dma_resv *resv;
+	struct dma_resv _resv;
+	const struct drm_gem_object_funcs *funcs;
+	struct list_head lru_node;
+	struct drm_gem_lru *lru;
+};
+
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct drm_gem_object_funcs {
+	void (*free)(struct drm_gem_object *);
+	int (*open)(struct drm_gem_object *, struct drm_file *);
+	void (*close)(struct drm_gem_object *, struct drm_file *);
+	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
+	struct dma_buf * (*export)(struct drm_gem_object *, int);
+	int (*pin)(struct drm_gem_object *);
+	void (*unpin)(struct drm_gem_object *);
+	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
+	int (*vmap)(struct drm_gem_object *, struct iosys_map *);
+	void (*vunmap)(struct drm_gem_object *, struct iosys_map *);
+	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct drm_gem_lru {
+	struct mutex *lock;
+	long int count;
+	struct list_head list;
+};
+
+struct drm_mode_card_res {
+	__u64 fb_id_ptr;
+	__u64 crtc_id_ptr;
+	__u64 connector_id_ptr;
+	__u64 encoder_id_ptr;
+	__u32 count_fbs;
+	__u32 count_crtcs;
+	__u32 count_connectors;
+	__u32 count_encoders;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+};
+
+struct drm_mode_set_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__s32 crtc_x;
+	__s32 crtc_y;
+	__u32 crtc_w;
+	__u32 crtc_h;
+	__u32 src_x;
+	__u32 src_y;
+	__u32 src_h;
+	__u32 src_w;
+};
+
+struct drm_mode_get_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 possible_crtcs;
+	__u32 gamma_size;
+	__u32 count_format_types;
+	__u64 format_type_ptr;
+};
+
+struct drm_mode_get_plane_res {
+	__u64 plane_id_ptr;
+	__u32 count_planes;
+};
+
+struct drm_mode_cursor {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+};
+
+struct drm_mode_cursor2 {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+	__s32 hot_x;
+	__s32 hot_y;
+};
+
+struct drm_mode_crtc_page_flip_target {
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__u32 sequence;
+	__u64 user_data;
+};
+
+struct drm_format_modifier_blob {
+	__u32 version;
+	__u32 flags;
+	__u32 count_formats;
+	__u32 formats_offset;
+	__u32 count_modifiers;
+	__u32 modifiers_offset;
+};
+
+struct drm_format_modifier {
+	__u64 formats;
+	__u32 offset;
+	__u32 pad;
+	__u64 modifier;
+};
+
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct sync_file {
+	struct file *file;
+	char user_name[32];
+	struct list_head sync_file_list;
+	wait_queue_head_t wq;
+	long unsigned int flags;
+	struct dma_fence *fence;
+	struct dma_fence_cb cb;
+};
+
+struct drm_syncobj_create {
+	__u32 handle;
+	__u32 flags;
+};
+
+struct drm_syncobj_destroy {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_syncobj_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_transfer {
+	__u32 src_handle;
+	__u32 dst_handle;
+	__u64 src_point;
+	__u64 dst_point;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct drm_syncobj_wait {
+	__u64 handles;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_wait {
+	__u64 handles;
+	__u64 points;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_array {
+	__u64 handles;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_array {
+	__u64 handles;
+	__u64 points;
+	__u32 count_handles;
+	__u32 flags;
+};
+
+struct dma_fence_chain {
+	struct dma_fence base;
+	struct dma_fence *prev;
+	u64 prev_seqno;
+	struct dma_fence *fence;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
+};
+
+struct drm_syncobj {
+	struct kref refcount;
+	struct dma_fence *fence;
+	struct list_head cb_list;
+	spinlock_t lock;
+	struct file *file;
+};
+
+struct syncobj_wait_entry {
+	struct list_head node;
 	struct task_struct *task;
-	void *fp;
-	char data[0];
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	u64 point;
 };
 
-struct kretprobe {
-	struct kprobe kp;
-	kretprobe_handler_t handler;
-	kretprobe_handler_t entry_handler;
-	int maxactive;
-	int nmissed;
-	size_t data_size;
-	struct hlist_head free_instances;
-	raw_spinlock_t lock;
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
 };
 
-struct kprobe_insn_cache {
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+struct component;
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+struct klist_node;
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+struct wake_irq {
+	struct device *dev;
+	unsigned int status;
+	int irq;
+	const char *name;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
 	struct mutex mutex;
-	void * (*alloc)();
-	void (*free)(void *);
-	const char *sym;
-	struct list_head pages;
-	size_t insn_size;
-	int nr_garbage;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	struct bus_type *bus;
+	struct kset glue_dirs;
+	struct class *class;
 };
 
-enum probe_insn {
-	INSN_REJECTED = 0,
-	INSN_GOOD_NO_SLOT = 1,
-	INSN_GOOD = 2,
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
 };
 
-enum aarch64_insn_special_register {
-	AARCH64_INSN_SPCLREG_SPSR_EL1 = 49664,
-	AARCH64_INSN_SPCLREG_ELR_EL1 = 49665,
-	AARCH64_INSN_SPCLREG_SP_EL0 = 49672,
-	AARCH64_INSN_SPCLREG_SPSEL = 49680,
-	AARCH64_INSN_SPCLREG_CURRENTEL = 49682,
-	AARCH64_INSN_SPCLREG_DAIF = 55825,
-	AARCH64_INSN_SPCLREG_NZCV = 55824,
-	AARCH64_INSN_SPCLREG_FPCR = 55840,
-	AARCH64_INSN_SPCLREG_DSPSR_EL0 = 55848,
-	AARCH64_INSN_SPCLREG_DLR_EL0 = 55849,
-	AARCH64_INSN_SPCLREG_SPSR_EL2 = 57856,
-	AARCH64_INSN_SPCLREG_ELR_EL2 = 57857,
-	AARCH64_INSN_SPCLREG_SP_EL1 = 57864,
-	AARCH64_INSN_SPCLREG_SPSR_INQ = 57880,
-	AARCH64_INSN_SPCLREG_SPSR_ABT = 57881,
-	AARCH64_INSN_SPCLREG_SPSR_UND = 57882,
-	AARCH64_INSN_SPCLREG_SPSR_FIQ = 57883,
-	AARCH64_INSN_SPCLREG_SPSR_EL3 = 61952,
-	AARCH64_INSN_SPCLREG_ELR_EL3 = 61953,
-	AARCH64_INSN_SPCLREG_SP_EL2 = 61968,
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
 };
 
-struct arch_uprobe {
-	union {
-		u8 insn[4];
-		u8 ixol[4];
-	};
-	struct arch_probe_insn api;
-	bool simulate;
-};
-
-enum rp_check {
-	RP_CHECK_CALL = 0,
-	RP_CHECK_CHAIN_CALL = 1,
-	RP_CHECK_RET = 2,
-};
+struct iopf_device_param;
 
 struct iommu_fault_param;
 
@@ -17657,21 +42602,25 @@
 struct dev_iommu {
 	struct mutex lock;
 	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
 	struct iommu_fwspec *fwspec;
 	struct iommu_device *iommu_dev;
 	void *priv;
+	u32 max_pasids;
 };
 
-struct sg_table {
-	struct scatterlist *sgl;
-	unsigned int nents;
-	unsigned int orig_nents;
-};
-
-struct of_phandle_args {
-	struct device_node *np;
-	int args_count;
-	uint32_t args[16];
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
 };
 
 struct iommu_fault_unrecoverable {
@@ -17702,6 +42651,12 @@
 	};
 };
 
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
 struct iommu_page_response {
 	__u32 argsz;
 	__u32 version;
@@ -17711,54 +42666,6 @@
 	__u32 code;
 };
 
-struct iommu_inv_addr_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-	__u64 addr;
-	__u64 granule_size;
-	__u64 nb_granules;
-};
-
-struct iommu_inv_pasid_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-};
-
-struct iommu_cache_invalidate_info {
-	__u32 argsz;
-	__u32 version;
-	__u8 cache;
-	__u8 granularity;
-	__u8 padding[6];
-	union {
-		struct iommu_inv_pasid_info pasid_info;
-		struct iommu_inv_addr_info addr_info;
-	} granu;
-};
-
-struct iommu_gpasid_bind_data_vtd {
-	__u64 flags;
-	__u32 pat;
-	__u32 emt;
-};
-
-struct iommu_gpasid_bind_data {
-	__u32 argsz;
-	__u32 version;
-	__u32 format;
-	__u32 addr_width;
-	__u64 flags;
-	__u64 gpgd;
-	__u64 hpasid;
-	__u64 gpasid;
-	__u8 padding[8];
-	union {
-		struct iommu_gpasid_bind_data_vtd vtd;
-	} vendor;
-};
-
 typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
 
 struct iommu_domain_geometry {
@@ -17767,38 +42674,56 @@
 	bool force_aperture;
 };
 
+struct iommu_dma_cookie;
+
 struct iommu_domain {
 	unsigned int type;
-	const struct iommu_ops *ops;
+	const struct iommu_domain_ops *ops;
 	long unsigned int pgsize_bitmap;
-	iommu_fault_handler_t handler;
-	void *handler_token;
 	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
+	struct iommu_dma_cookie *iova_cookie;
+	enum iommu_page_response_code (*iopf_handler)(struct iommu_fault *, void *);
+	void *fault_data;
+	union {
+		struct {
+			iommu_fault_handler_t handler;
+			void *handler_token;
+		};
+		struct {
+			struct mm_struct *mm;
+			int users;
+		};
+	};
 };
 
 typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
 
-enum iommu_resv_type {
-	IOMMU_RESV_DIRECT = 0,
-	IOMMU_RESV_DIRECT_RELAXABLE = 1,
-	IOMMU_RESV_RESERVED = 2,
-	IOMMU_RESV_MSI = 3,
-	IOMMU_RESV_SW_MSI = 4,
-};
+struct iommu_iotlb_gather;
 
-struct iommu_resv_region {
-	struct list_head list;
-	phys_addr_t start;
-	size_t length;
-	int prot;
-	enum iommu_resv_type type;
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	void (*detach_dev)(struct iommu_domain *, struct device *);
+	int (*set_dev_pasid)(struct iommu_domain *, struct device *, ioasid_t);
+	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
+	void (*free)(struct iommu_domain *);
 };
 
 struct iommu_iotlb_gather {
 	long unsigned int start;
 	long unsigned int end;
 	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
 };
 
 struct iommu_device {
@@ -17806,10 +42731,7 @@
 	const struct iommu_ops *ops;
 	struct fwnode_handle *fwnode;
 	struct device *dev;
-};
-
-struct iommu_sva {
-	struct device *dev;
+	u32 max_pasids;
 };
 
 struct iommu_fault_event {
@@ -17828,3177 +42750,2889 @@
 	const struct iommu_ops *ops;
 	struct fwnode_handle *iommu_fwnode;
 	u32 flags;
-	u32 num_pasid_bits;
 	unsigned int num_ids;
 	u32 ids[0];
 };
 
-enum xen_domain_type {
-	XEN_NATIVE = 0,
-	XEN_PV_DOMAIN = 1,
-	XEN_HVM_DOMAIN = 2,
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
 };
 
-struct hstate {
-	int next_nid_to_alloc;
-	int next_nid_to_free;
-	unsigned int order;
-	long unsigned int mask;
-	long unsigned int max_huge_pages;
-	long unsigned int nr_huge_pages;
-	long unsigned int free_huge_pages;
-	long unsigned int resv_huge_pages;
-	long unsigned int surplus_huge_pages;
-	long unsigned int nr_overcommit_huge_pages;
-	struct list_head hugepage_activelist;
-	struct list_head hugepage_freelists[128];
-	unsigned int nr_huge_pages_node[128];
-	unsigned int free_huge_pages_node[128];
-	unsigned int surplus_huge_pages_node[128];
-	struct cftype cgroup_files_dfl[7];
-	struct cftype cgroup_files_legacy[9];
-	char name[32];
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
 };
 
-struct fault_info {
-	int (*fn)(long unsigned int, unsigned int, struct pt_regs *);
-	int sig;
-	int code;
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
+};
+
+struct attribute_container {
+	struct list_head node;
+	struct klist containers;
+	struct class *class;
+	const struct attribute_group *grp;
+	struct device_attribute **attrs;
+	int (*match)(struct attribute_container *, struct device *);
+	long unsigned int flags;
+};
+
+struct internal_container {
+	struct klist_node node;
+	struct attribute_container *cont;
+	struct device classdev;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+struct req {
+	struct req *next;
+	struct completion done;
+	int err;
 	const char *name;
-};
-
-enum swiotlb_force {
-	SWIOTLB_NORMAL = 0,
-	SWIOTLB_FORCE = 1,
-	SWIOTLB_NO_FORCE = 2,
-};
-
-struct mhp_params {
-	struct vmem_altmap *altmap;
-	pgprot_t pgprot;
-};
-
-struct memory_notify {
-	long unsigned int start_pfn;
-	long unsigned int nr_pages;
-	int status_change_nid_normal;
-	int status_change_nid_high;
-	int status_change_nid;
-};
-
-struct page_change_data {
-	pgprot_t set_mask;
-	pgprot_t clear_mask;
-};
-
-struct hugepage_subpool {
-	spinlock_t lock;
-	long int count;
-	long int max_hpages;
-	long int used_hpages;
-	struct hstate *hstate;
-	long int min_hpages;
-	long int rsv_hpages;
-};
-
-struct hugetlbfs_sb_info {
-	long int max_inodes;
-	long int free_inodes;
-	spinlock_t stat_lock;
-	struct hstate *hstate;
-	struct hugepage_subpool *spool;
+	umode_t mode;
 	kuid_t uid;
 	kgid_t gid;
-	umode_t mode;
+	struct device *dev;
 };
 
-typedef __kernel_long_t __kernel_off_t;
-
-typedef __kernel_off_t off_t;
-
-enum {
-	BPF_REG_0 = 0,
-	BPF_REG_1 = 1,
-	BPF_REG_2 = 2,
-	BPF_REG_3 = 3,
-	BPF_REG_4 = 4,
-	BPF_REG_5 = 5,
-	BPF_REG_6 = 6,
-	BPF_REG_7 = 7,
-	BPF_REG_8 = 8,
-	BPF_REG_9 = 9,
-	BPF_REG_10 = 10,
-	__MAX_BPF_REG = 11,
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_COMPRESSED = 2,
+	REGCACHE_FLAT = 3,
 };
 
-enum {
-	DUMP_PREFIX_NONE = 0,
-	DUMP_PREFIX_ADDRESS = 1,
-	DUMP_PREFIX_OFFSET = 2,
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
 };
 
-struct bpf_binary_header {
-	u32 pages;
-	int: 32;
-	u8 image[0];
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
 };
 
-struct jit_ctx {
-	const struct bpf_prog *prog;
-	int idx;
-	int epilogue_offset;
-	int *offset;
-	int exentry_idx;
-	__le32 *image;
-	u32 stack_size;
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
 };
 
-struct arm64_jit_data {
-	struct bpf_binary_header *header;
-	u8 *image;
-	struct jit_ctx ctx;
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
 };
 
-typedef long unsigned int ulong;
-
-typedef u64 gpa_t;
-
-typedef u64 gfn_t;
-
-typedef u64 hpa_t;
-
-typedef u64 hfn_t;
-
-typedef hfn_t kvm_pfn_t;
-
-struct kvm_memory_slot;
-
-struct gfn_to_hva_cache {
-	u64 generation;
-	gpa_t gpa;
-	long unsigned int hva;
-	long unsigned int len;
-	struct kvm_memory_slot *memslot;
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
 };
 
-struct kvm_arch_memory_slot {};
+typedef void (*regmap_lock)(void *);
 
-struct kvm_memory_slot {
-	gfn_t base_gfn;
-	long unsigned int npages;
-	long unsigned int *dirty_bitmap;
-	struct kvm_arch_memory_slot arch;
-	long unsigned int userspace_addr;
-	u32 flags;
-	short int id;
-	u16 as_id;
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_downshift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	bool io_port;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
 };
 
-struct gfn_to_pfn_cache {
-	u64 generation;
-	gfn_t gfn;
-	kvm_pfn_t pfn;
-	bool dirty;
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
 };
 
-struct kvm_mmu_memory_cache {
-	int nobjs;
-	gfp_t gfp_zero;
-	struct kmem_cache *kmem_cache;
-	void *objects[40];
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+struct regmap;
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
 };
 
-struct kvm_vcpu;
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
 
-struct kvm_io_device;
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
 
-struct kvm_io_device_ops {
-	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
-	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
-	void (*destructor)(struct kvm_io_device *);
+typedef int (*regmap_hw_reg_noinc_read)(void *, unsigned int, void *, size_t);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_noinc_write)(void *, unsigned int, const void *, size_t);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+typedef void (*regmap_hw_free_context)(void *);
+
+struct regmap_bus {
+	bool fast_io;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_noinc_write reg_noinc_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_reg_noinc_read reg_noinc_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool free_on_exit;
 };
 
-struct preempt_ops;
-
-struct preempt_notifier {
-	struct hlist_node link;
-	struct preempt_ops *ops;
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t reg_downshift;
+	size_t val_bytes;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
 };
 
-struct kvm_vcpu_stat {
-	u64 halt_successful_poll;
-	u64 halt_attempted_poll;
-	u64 halt_poll_success_ns;
-	u64 halt_poll_fail_ns;
-	u64 halt_poll_invalid;
-	u64 halt_wakeup;
-	u64 hvc_exit_stat;
-	u64 wfe_exit_stat;
-	u64 wfi_exit_stat;
-	u64 mmio_exit_user;
-	u64 mmio_exit_kernel;
-	u64 exits;
-};
+struct hwspinlock;
 
-struct kvm_mmio_fragment {
-	gpa_t gpa;
-	void *data;
-	unsigned int len;
-};
+struct regcache_ops;
 
-struct kvm_cpu_context {
-	struct user_pt_regs regs;
-	u64 spsr_abt;
-	u64 spsr_und;
-	u64 spsr_irq;
-	u64 spsr_fiq;
-	struct user_fpsimd_state fp_regs;
+struct regmap {
 	union {
-		u64 sys_regs[119];
-		u32 copro[238];
-	};
-	struct kvm_vcpu *__hyp_running_vcpu;
-};
-
-struct kvm_vcpu_fault_info {
-	u32 esr_el2;
-	u64 far_el2;
-	u64 hpfar_el2;
-	u64 disr_el1;
-};
-
-struct kvm_guest_debug_arch {
-	__u64 dbg_bcr[16];
-	__u64 dbg_bvr[16];
-	__u64 dbg_wcr[16];
-	__u64 dbg_wvr[16];
-};
-
-struct vgic_v2_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_apr;
-	u32 vgic_lr[64];
-	unsigned int used_lrs;
-};
-
-struct its_vm;
-
-struct its_vpe {
-	struct page *vpt_page;
-	struct its_vm *its_vm;
-	atomic_t vlpi_count;
-	int irq;
-	irq_hw_number_t vpe_db_lpi;
-	bool resident;
-	union {
+		struct mutex mutex;
 		struct {
-			int vpe_proxy_event;
-			bool idai;
+			spinlock_t spinlock;
+			long unsigned int spinlock_flags;
 		};
 		struct {
-			struct fwnode_handle *fwnode;
-			struct irq_domain *sgi_domain;
-			struct {
-				u8 priority;
-				bool enabled;
-				bool group;
-			} sgi_config[16];
-			atomic_t vmapp_count;
+			raw_spinlock_t raw_spinlock;
+			long unsigned int raw_spinlock_flags;
 		};
 	};
-	raw_spinlock_t vpe_lock;
-	u16 col_idx;
-	u16 vpe_id;
-	bool pending_last;
-};
-
-struct vgic_v3_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_sre;
-	u32 vgic_ap0r[4];
-	u32 vgic_ap1r[4];
-	u64 vgic_lr[16];
-	struct its_vpe its_vpe;
-	unsigned int used_lrs;
-};
-
-enum vgic_irq_config {
-	VGIC_CONFIG_EDGE = 0,
-	VGIC_CONFIG_LEVEL = 1,
-};
-
-struct vgic_irq {
-	raw_spinlock_t irq_lock;
-	struct list_head lpi_list;
-	struct list_head ap_list;
-	struct kvm_vcpu *vcpu;
-	struct kvm_vcpu *target_vcpu;
-	u32 intid;
-	bool line_level;
-	bool pending_latch;
-	bool active;
-	bool enabled;
-	bool hw;
-	struct kref refcount;
-	u32 hwintid;
-	unsigned int host_irq;
-	union {
-		u8 targets;
-		u32 mpidr;
-	};
-	u8 source;
-	u8 active_source;
-	u8 priority;
-	u8 group;
-	enum vgic_irq_config config;
-	bool (*get_input_level)(int);
-	void *owner;
-};
-
-enum iodev_type {
-	IODEV_CPUIF = 0,
-	IODEV_DIST = 1,
-	IODEV_REDIST = 2,
-	IODEV_ITS = 3,
-};
-
-struct kvm_io_device {
-	const struct kvm_io_device_ops *ops;
-};
-
-struct vgic_its;
-
-struct vgic_register_region;
-
-struct vgic_io_device {
-	gpa_t base_addr;
-	union {
-		struct kvm_vcpu *redist_vcpu;
-		struct vgic_its *its;
-	};
-	const struct vgic_register_region *regions;
-	enum iodev_type iodev_type;
-	int nr_regions;
-	struct kvm_io_device dev;
-};
-
-struct vgic_redist_region;
-
-struct vgic_cpu {
-	union {
-		struct vgic_v2_cpu_if vgic_v2;
-		struct vgic_v3_cpu_if vgic_v3;
-	};
-	struct vgic_irq private_irqs[32];
-	raw_spinlock_t ap_list_lock;
-	struct list_head ap_list_head;
-	struct vgic_io_device rd_iodev;
-	struct vgic_redist_region *rdreg;
-	u64 pendbaser;
-	bool lpis_enabled;
-	u32 num_pri_bits;
-	u32 num_id_bits;
-};
-
-struct kvm_irq_level {
-	union {
-		__u32 irq;
-		__s32 status;
-	};
-	__u32 level;
-};
-
-struct arch_timer_context {
-	struct kvm_vcpu *vcpu;
-	struct kvm_irq_level irq;
-	struct hrtimer hrtimer;
-	bool loaded;
-	u32 host_timer_irq;
-	u32 host_timer_irq_flags;
-};
-
-struct arch_timer_cpu {
-	struct arch_timer_context timers[2];
-	struct hrtimer bg_timer;
-	bool enabled;
-};
-
-struct kvm_pmc {
-	u8 idx;
-	struct perf_event *perf_event;
-};
-
-struct kvm_pmu {
-	int irq_num;
-	struct kvm_pmc pmc[32];
-	long unsigned int chained[1];
-	bool ready;
-	bool created;
-	bool irq_level;
-	struct irq_work overflow_work;
-};
-
-struct vcpu_reset_state {
-	long unsigned int pc;
-	long unsigned int r0;
-	bool be;
-	bool reset;
-};
-
-struct kvm_s2_mmu;
-
-struct kvm_vcpu_arch {
-	struct kvm_cpu_context ctxt;
-	void *sve_state;
-	unsigned int sve_max_vl;
-	struct kvm_s2_mmu *hw_mmu;
-	u64 hcr_el2;
-	u32 mdcr_el2;
-	struct kvm_vcpu_fault_info fault;
-	u64 workaround_flags;
-	u64 flags;
-	struct kvm_guest_debug_arch *debug_ptr;
-	struct kvm_guest_debug_arch vcpu_debug_state;
-	struct kvm_guest_debug_arch external_debug_state;
-	struct thread_info *host_thread_info;
-	struct user_fpsimd_state *host_fpsimd_state;
-	struct {
-		struct kvm_guest_debug_arch regs;
-		u64 pmscr_el1;
-	} host_debug_state;
-	struct vgic_cpu vgic_cpu;
-	struct arch_timer_cpu timer_cpu;
-	struct kvm_pmu pmu;
-	struct {
-		u32 mdscr_el1;
-	} guest_debug_preserved;
-	bool power_off;
-	bool pause;
-	struct kvm_mmu_memory_cache mmu_page_cache;
-	int target;
-	long unsigned int features[1];
-	bool has_run_once;
-	u64 vsesr_el2;
-	struct vcpu_reset_state reset_state;
-	bool sysregs_loaded_on_cpu;
-	struct {
-		u64 last_steal;
-		gpa_t base;
-	} steal;
-};
-
-struct kvm;
-
-struct kvm_run;
-
-struct kvm_vcpu {
-	struct kvm *kvm;
-	struct preempt_notifier preempt_notifier;
-	int cpu;
-	int vcpu_id;
-	int vcpu_idx;
-	int srcu_idx;
-	int mode;
-	u64 requests;
-	long unsigned int guest_debug;
-	int pre_pcpu;
-	struct list_head blocked_vcpu_list;
-	struct mutex mutex;
-	struct kvm_run *run;
-	struct rcuwait wait;
-	struct pid *pid;
-	int sigset_active;
-	sigset_t sigset;
-	struct kvm_vcpu_stat stat;
-	unsigned int halt_poll_ns;
-	bool valid_wakeup;
-	int mmio_needed;
-	int mmio_read_completed;
-	int mmio_is_write;
-	int mmio_cur_fragment;
-	int mmio_nr_fragments;
-	struct kvm_mmio_fragment mmio_fragments[2];
-	struct {
-		bool in_spin_loop;
-		bool dy_eligible;
-	} spin_loop;
-	bool preempted;
-	bool ready;
-	struct kvm_vcpu_arch arch;
-};
-
-struct preempt_ops {
-	void (*sched_in)(struct preempt_notifier *, int);
-	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
-};
-
-struct trace_print_flags {
-	long unsigned int mask;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
 	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
 };
 
-enum mmu_notifier_event {
-	MMU_NOTIFY_UNMAP = 0,
-	MMU_NOTIFY_CLEAR = 1,
-	MMU_NOTIFY_PROTECTION_VMA = 2,
-	MMU_NOTIFY_PROTECTION_PAGE = 3,
-	MMU_NOTIFY_SOFT_DIRTY = 4,
-	MMU_NOTIFY_RELEASE = 5,
-	MMU_NOTIFY_MIGRATE = 6,
-};
-
-struct mmu_notifier;
-
-struct mmu_notifier_range;
-
-struct mmu_notifier_ops {
-	void (*release)(struct mmu_notifier *, struct mm_struct *);
-	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
-	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
-	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
-	void (*free_notifier)(struct mmu_notifier *);
-};
-
-struct mmu_notifier {
-	struct hlist_node hlist;
-	const struct mmu_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct callback_head rcu;
-	unsigned int users;
-};
-
-struct mmu_notifier_range {
-	struct vm_area_struct *vma;
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int flags;
-	enum mmu_notifier_event event;
-	void *migrate_pgmap_owner;
-};
-
-enum kobject_action {
-	KOBJ_ADD = 0,
-	KOBJ_REMOVE = 1,
-	KOBJ_CHANGE = 2,
-	KOBJ_MOVE = 3,
-	KOBJ_ONLINE = 4,
-	KOBJ_OFFLINE = 5,
-	KOBJ_BIND = 6,
-	KOBJ_UNBIND = 7,
-};
-
-struct kvm_regs {
-	struct user_pt_regs regs;
-	__u64 sp_el1;
-	__u64 elr_el1;
-	__u64 spsr[5];
-	long: 64;
-	struct user_fpsimd_state fp_regs;
-};
-
-struct kvm_sregs {};
-
-struct kvm_fpu {};
-
-struct kvm_debug_exit_arch {
-	__u32 hsr;
-	__u64 far;
-};
-
-struct kvm_sync_regs {
-	__u64 device_irq_level;
-};
-
-struct kvm_userspace_memory_region {
-	__u32 slot;
-	__u32 flags;
-	__u64 guest_phys_addr;
-	__u64 memory_size;
-	__u64 userspace_addr;
-};
-
-struct kvm_hyperv_exit {
-	__u32 type;
-	__u32 pad1;
-	union {
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 evt_page;
-			__u64 msg_page;
-		} synic;
-		struct {
-			__u64 input;
-			__u64 result;
-			__u64 params[2];
-		} hcall;
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 status;
-			__u64 send_page;
-			__u64 recv_page;
-			__u64 pending_page;
-		} syndbg;
-	} u;
-};
-
-struct kvm_run {
-	__u8 request_interrupt_window;
-	__u8 immediate_exit;
-	__u8 padding1[6];
-	__u32 exit_reason;
-	__u8 ready_for_interrupt_injection;
-	__u8 if_flag;
-	__u16 flags;
-	__u64 cr8;
-	__u64 apic_base;
-	union {
-		struct {
-			__u64 hardware_exit_reason;
-		} hw;
-		struct {
-			__u64 hardware_entry_failure_reason;
-			__u32 cpu;
-		} fail_entry;
-		struct {
-			__u32 exception;
-			__u32 error_code;
-		} ex;
-		struct {
-			__u8 direction;
-			__u8 size;
-			__u16 port;
-			__u32 count;
-			__u64 data_offset;
-		} io;
-		struct {
-			struct kvm_debug_exit_arch arch;
-		} debug;
-		struct {
-			__u64 phys_addr;
-			__u8 data[8];
-			__u32 len;
-			__u8 is_write;
-		} mmio;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u64 ret;
-			__u32 longmode;
-			__u32 pad;
-		} hypercall;
-		struct {
-			__u64 rip;
-			__u32 is_write;
-			__u32 pad;
-		} tpr_access;
-		struct {
-			__u8 icptcode;
-			__u16 ipa;
-			__u32 ipb;
-		} s390_sieic;
-		__u64 s390_reset_flags;
-		struct {
-			__u64 trans_exc_code;
-			__u32 pgm_code;
-		} s390_ucontrol;
-		struct {
-			__u32 dcrn;
-			__u32 data;
-			__u8 is_write;
-		} dcr;
-		struct {
-			__u32 suberror;
-			__u32 ndata;
-			__u64 data[16];
-		} internal;
-		struct {
-			__u64 gprs[32];
-		} osi;
-		struct {
-			__u64 nr;
-			__u64 ret;
-			__u64 args[9];
-		} papr_hcall;
-		struct {
-			__u16 subchannel_id;
-			__u16 subchannel_nr;
-			__u32 io_int_parm;
-			__u32 io_int_word;
-			__u32 ipb;
-			__u8 dequeued;
-		} s390_tsch;
-		struct {
-			__u32 epr;
-		} epr;
-		struct {
-			__u32 type;
-			__u64 flags;
-		} system_event;
-		struct {
-			__u64 addr;
-			__u8 ar;
-			__u8 reserved;
-			__u8 fc;
-			__u8 sel1;
-			__u16 sel2;
-		} s390_stsi;
-		struct {
-			__u8 vector;
-		} eoi;
-		struct kvm_hyperv_exit hyperv;
-		struct {
-			__u64 esr_iss;
-			__u64 fault_ipa;
-		} arm_nisv;
-		struct {
-			__u8 error;
-			__u8 pad[7];
-			__u32 reason;
-			__u32 index;
-			__u64 data;
-		} msr;
-		char padding[256];
-	};
-	__u64 kvm_valid_regs;
-	__u64 kvm_dirty_regs;
-	union {
-		struct kvm_sync_regs regs;
-		char padding[2048];
-	} s;
-};
-
-struct kvm_coalesced_mmio_zone {
-	__u64 addr;
-	__u32 size;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-};
-
-struct kvm_coalesced_mmio {
-	__u64 phys_addr;
-	__u32 len;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-	__u8 data[8];
-};
-
-struct kvm_coalesced_mmio_ring {
-	__u32 first;
-	__u32 last;
-	struct kvm_coalesced_mmio coalesced_mmio[0];
-};
-
-struct kvm_translation {
-	__u64 linear_address;
-	__u64 physical_address;
-	__u8 valid;
-	__u8 writeable;
-	__u8 usermode;
-	__u8 pad[5];
-};
-
-struct kvm_dirty_log {
-	__u32 slot;
-	__u32 padding1;
-	union {
-		void *dirty_bitmap;
-		__u64 padding2;
-	};
-};
-
-struct kvm_clear_dirty_log {
-	__u32 slot;
-	__u32 num_pages;
-	__u64 first_page;
-	union {
-		void *dirty_bitmap;
-		__u64 padding2;
-	};
-};
-
-struct kvm_signal_mask {
-	__u32 len;
-	__u8 sigset[0];
-};
-
-struct kvm_mp_state {
-	__u32 mp_state;
-};
-
-struct kvm_guest_debug {
-	__u32 control;
-	__u32 pad;
-	struct kvm_guest_debug_arch arch;
-};
-
-struct kvm_ioeventfd {
-	__u64 datamatch;
-	__u64 addr;
-	__u32 len;
-	__s32 fd;
-	__u32 flags;
-	__u8 pad[36];
-};
-
-struct kvm_enable_cap {
-	__u32 cap;
-	__u32 flags;
-	__u64 args[4];
-	__u8 pad[64];
-};
-
-struct kvm_irq_routing_irqchip {
-	__u32 irqchip;
-	__u32 pin;
-};
-
-struct kvm_irq_routing_msi {
-	__u32 address_lo;
-	__u32 address_hi;
-	__u32 data;
-	union {
-		__u32 pad;
-		__u32 devid;
-	};
-};
-
-struct kvm_irq_routing_s390_adapter {
-	__u64 ind_addr;
-	__u64 summary_addr;
-	__u64 ind_offset;
-	__u32 summary_offset;
-	__u32 adapter_id;
-};
-
-struct kvm_irq_routing_hv_sint {
-	__u32 vcpu;
-	__u32 sint;
-};
-
-struct kvm_irq_routing_entry {
-	__u32 gsi;
-	__u32 type;
-	__u32 flags;
-	__u32 pad;
-	union {
-		struct kvm_irq_routing_irqchip irqchip;
-		struct kvm_irq_routing_msi msi;
-		struct kvm_irq_routing_s390_adapter adapter;
-		struct kvm_irq_routing_hv_sint hv_sint;
-		__u32 pad[8];
-	} u;
-};
-
-struct kvm_irq_routing {
-	__u32 nr;
-	__u32 flags;
-	struct kvm_irq_routing_entry entries[0];
-};
-
-struct kvm_irqfd {
-	__u32 fd;
-	__u32 gsi;
-	__u32 flags;
-	__u32 resamplefd;
-	__u8 pad[16];
-};
-
-struct kvm_msi {
-	__u32 address_lo;
-	__u32 address_hi;
-	__u32 data;
-	__u32 flags;
-	__u32 devid;
-	__u8 pad[12];
-};
-
-struct kvm_create_device {
-	__u32 type;
-	__u32 fd;
-	__u32 flags;
-};
-
-struct kvm_device_attr {
-	__u32 flags;
-	__u32 group;
-	__u64 attr;
-	__u64 addr;
-};
-
-enum kvm_device_type {
-	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
-	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
-	KVM_DEV_TYPE_XICS = 3,
-	KVM_DEV_TYPE_VFIO = 4,
-	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
-	KVM_DEV_TYPE_FLIC = 6,
-	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
-	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
-	KVM_DEV_TYPE_XIVE = 9,
-	KVM_DEV_TYPE_ARM_PV_TIME = 10,
-	KVM_DEV_TYPE_MAX = 11,
-};
-
-struct its_vm {
-	struct fwnode_handle *fwnode;
-	struct irq_domain *domain;
-	struct page *vprop_page;
-	struct its_vpe **vpes;
-	int nr_vpes;
-	irq_hw_number_t db_lpi_base;
-	long unsigned int *db_bitmap;
-	int nr_db_lpis;
-	u32 vlpi_count[16];
-};
-
-struct kvm_device;
-
-struct vgic_its {
-	gpa_t vgic_its_base;
-	bool enabled;
-	struct vgic_io_device iodev;
-	struct kvm_device *dev;
-	u64 baser_device_table;
-	u64 baser_coll_table;
-	struct mutex cmd_lock;
-	u64 cbaser;
-	u32 creadr;
-	u32 cwriter;
-	u32 abi_rev;
-	struct mutex its_lock;
-	struct list_head device_list;
-	struct list_head collection_list;
-};
-
-struct vgic_register_region {
-	unsigned int reg_offset;
-	unsigned int len;
-	unsigned int bits_per_irq;
-	unsigned int access_flags;
-	union {
-		long unsigned int (*read)(struct kvm_vcpu *, gpa_t, unsigned int);
-		long unsigned int (*its_read)(struct kvm *, struct vgic_its *, gpa_t, unsigned int);
-	};
-	union {
-		void (*write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		void (*its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-	long unsigned int (*uaccess_read)(struct kvm_vcpu *, gpa_t, unsigned int);
-	union {
-		int (*uaccess_write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		int (*uaccess_its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-};
-
-struct kvm_device_ops;
-
-struct kvm_device {
-	const struct kvm_device_ops *ops;
-	struct kvm *kvm;
-	void *private;
-	struct list_head vm_node;
-};
-
-struct vgic_redist_region {
-	u32 index;
-	gpa_t base;
-	u32 count;
-	u32 free_index;
-	struct list_head list;
-};
-
-struct vgic_state_iter;
-
-struct vgic_dist {
-	bool in_kernel;
-	bool ready;
-	bool initialized;
-	u32 vgic_model;
-	u32 implementation_rev;
-	bool v2_groups_user_writable;
-	bool msis_require_devid;
-	int nr_spis;
-	gpa_t vgic_dist_base;
-	union {
-		gpa_t vgic_cpu_base;
-		struct list_head rd_regions;
-	};
-	bool enabled;
-	bool nassgireq;
-	struct vgic_irq *spis;
-	struct vgic_io_device dist_iodev;
-	bool has_its;
-	u64 propbaser;
-	raw_spinlock_t lpi_list_lock;
-	struct list_head lpi_list_head;
-	int lpi_list_count;
-	struct list_head lpi_translation_cache;
-	struct vgic_state_iter *iter;
-	struct its_vm its_vm;
-};
-
-struct kvm_vmid {
-	u64 vmid_gen;
-	u32 vmid;
-};
-
-struct kvm_pgtable;
-
-struct kvm_s2_mmu {
-	struct kvm_vmid vmid;
-	phys_addr_t pgd_phys;
-	struct kvm_pgtable *pgt;
-	int *last_vcpu_ran;
-	struct kvm *kvm;
-};
-
-struct kvm_vm_stat {
-	ulong remote_tlb_flush;
-};
-
-struct kvm_arch {
-	struct kvm_s2_mmu mmu;
-	u64 vtcr;
-	int max_vcpus;
-	struct vgic_dist vgic;
-	u32 psci_version;
-	bool return_nisv_io_abort_to_user;
-	long unsigned int *pmu_filter;
-	unsigned int pmuver;
-	u8 pfr0_csv2;
-};
-
-struct kvm_memslots;
-
-struct kvm_io_bus;
-
-struct kvm_irq_routing_table;
-
-struct kvm_stat_data;
-
-struct kvm {
-	spinlock_t mmu_lock;
-	struct mutex slots_lock;
-	struct mm_struct *mm;
-	struct kvm_memslots *memslots[1];
-	struct kvm_vcpu *vcpus[512];
-	atomic_t online_vcpus;
-	int created_vcpus;
-	int last_boosted_vcpu;
-	struct list_head vm_list;
-	struct mutex lock;
-	struct kvm_io_bus *buses[4];
-	struct {
-		spinlock_t lock;
-		struct list_head items;
-		struct list_head resampler_list;
-		struct mutex resampler_lock;
-	} irqfds;
-	struct list_head ioeventfds;
-	struct kvm_vm_stat stat;
-	struct kvm_arch arch;
-	refcount_t users_count;
-	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
-	spinlock_t ring_lock;
-	struct list_head coalesced_zones;
-	struct mutex irq_lock;
-	struct kvm_irq_routing_table *irq_routing;
-	struct hlist_head irq_ack_notifier_list;
-	struct mmu_notifier mmu_notifier;
-	long unsigned int mmu_notifier_seq;
-	long int mmu_notifier_count;
-	long int tlbs_dirty;
-	struct list_head devices;
-	u64 manual_dirty_log_protect;
-	struct dentry *debugfs_dentry;
-	struct kvm_stat_data **debugfs_stat_data;
-	struct srcu_struct srcu;
-	struct srcu_struct irq_srcu;
-	pid_t userspace_pid;
-	unsigned int max_halt_poll_ns;
-};
-
-struct kvm_io_range {
-	gpa_t addr;
-	int len;
-	struct kvm_io_device *dev;
-};
-
-struct kvm_io_bus {
-	int dev_count;
-	int ioeventfd_count;
-	struct kvm_io_range range[0];
-};
-
-enum {
-	OUTSIDE_GUEST_MODE = 0,
-	IN_GUEST_MODE = 1,
-	EXITING_GUEST_MODE = 2,
-	READING_SHADOW_PAGE_TABLES = 3,
-};
-
-struct kvm_host_map {
-	struct page *page;
-	void *hva;
-	kvm_pfn_t pfn;
-	kvm_pfn_t gfn;
-};
-
-struct kvm_irq_routing_table {
-	int chip[988];
-	u32 nr_rt_entries;
-	struct hlist_head map[0];
-};
-
-struct kvm_memslots {
-	u64 generation;
-	short int id_to_index[512];
-	atomic_t lru_slot;
-	int used_slots;
-	struct kvm_memory_slot memslots[0];
-};
-
-struct kvm_stats_debugfs_item;
-
-struct kvm_stat_data {
-	struct kvm *kvm;
-	struct kvm_stats_debugfs_item *dbgfs_item;
-};
-
-enum kvm_mr_change {
-	KVM_MR_CREATE = 0,
-	KVM_MR_DELETE = 1,
-	KVM_MR_MOVE = 2,
-	KVM_MR_FLAGS_ONLY = 3,
-};
-
-enum kvm_stat_kind {
-	KVM_STAT_VM = 0,
-	KVM_STAT_VCPU = 1,
-};
-
-struct kvm_stats_debugfs_item {
+struct regcache_ops {
 	const char *name;
-	int offset;
-	enum kvm_stat_kind kind;
-	int mode;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
 };
 
-struct kvm_device_ops {
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct regmap_range_node {
+	struct rb_node node;
 	const char *name;
-	int (*create)(struct kvm_device *, u32);
-	void (*init)(struct kvm_device *);
-	void (*destroy)(struct kvm_device *);
-	void (*release)(struct kvm_device *);
-	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
-	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
-	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+	struct regmap *map;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
 };
 
-typedef int (*kvm_vm_thread_fn_t)(struct kvm *, uintptr_t);
-
-struct miscdevice {
-	int minor;
-	const char *name;
-	const struct file_operations *fops;
-	struct list_head list;
-	struct device *parent;
-	struct device *this_device;
-	const struct attribute_group **groups;
-	const char *nodename;
-	umode_t mode;
-};
-
-struct syscore_ops {
-	struct list_head node;
-	int (*suspend)();
-	void (*resume)();
-	void (*shutdown)();
-};
-
-struct trace_event_raw_kvm_userspace_exit {
-	struct trace_entry ent;
-	__u32 reason;
-	int errno;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_vcpu_wakeup {
-	struct trace_entry ent;
-	__u64 ns;
-	bool waited;
-	bool valid;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_irq {
-	struct trace_entry ent;
-	unsigned int gsi;
-	int level;
-	int irq_source_id;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_ack_irq {
-	struct trace_entry ent;
-	unsigned int irqchip;
-	unsigned int pin;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_mmio {
-	struct trace_entry ent;
-	u32 type;
-	u32 len;
-	u64 gpa;
-	u64 val;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_fpu {
-	struct trace_entry ent;
-	u32 load;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_age_page {
-	struct trace_entry ent;
-	u64 hva;
-	u64 gfn;
-	u8 level;
-	u8 referenced;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_halt_poll_ns {
-	struct trace_entry ent;
-	bool grow;
-	unsigned int vcpu_id;
-	unsigned int new;
-	unsigned int old;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_userspace_exit {};
-
-struct trace_event_data_offsets_kvm_vcpu_wakeup {};
-
-struct trace_event_data_offsets_kvm_set_irq {};
-
-struct trace_event_data_offsets_kvm_ack_irq {};
-
-struct trace_event_data_offsets_kvm_mmio {};
-
-struct trace_event_data_offsets_kvm_fpu {};
-
-struct trace_event_data_offsets_kvm_age_page {};
-
-struct trace_event_data_offsets_kvm_halt_poll_ns {};
-
-typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
-
-typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
-
-typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
-
-typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
-
-typedef void (*btf_trace_kvm_fpu)(void *, int);
-
-typedef void (*btf_trace_kvm_age_page)(void *, ulong, int, struct kvm_memory_slot *, int);
-
-typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
-
-struct kvm_cpu_compat_check {
-	void *opaque;
-	int *ret;
-};
-
-struct kvm_vm_worker_thread_context {
-	struct kvm *kvm;
-	struct task_struct *parent;
-	struct completion init_done;
-	kvm_vm_thread_fn_t thread_fn;
-	uintptr_t data;
-	int err;
-};
-
-struct kvm_coalesced_mmio_dev {
-	struct list_head list;
-	struct kvm_io_device dev;
-	struct kvm *kvm;
-	struct kvm_coalesced_mmio_zone zone;
-};
-
-enum {
-	WORK_STRUCT_PENDING_BIT = 0,
-	WORK_STRUCT_DELAYED_BIT = 1,
-	WORK_STRUCT_PWQ_BIT = 2,
-	WORK_STRUCT_LINKED_BIT = 3,
-	WORK_STRUCT_COLOR_SHIFT = 4,
-	WORK_STRUCT_COLOR_BITS = 4,
-	WORK_STRUCT_PENDING = 1,
-	WORK_STRUCT_DELAYED = 2,
-	WORK_STRUCT_PWQ = 4,
-	WORK_STRUCT_LINKED = 8,
-	WORK_STRUCT_STATIC = 0,
-	WORK_NR_COLORS = 15,
-	WORK_NO_COLOR = 15,
-	WORK_CPU_UNBOUND = 128,
-	WORK_STRUCT_FLAG_BITS = 8,
-	WORK_OFFQ_FLAG_BASE = 4,
-	__WORK_OFFQ_CANCELING = 4,
-	WORK_OFFQ_CANCELING = 16,
-	WORK_OFFQ_FLAG_BITS = 1,
-	WORK_OFFQ_POOL_SHIFT = 5,
-	WORK_OFFQ_LEFT = 59,
-	WORK_OFFQ_POOL_BITS = 31,
-	WORK_OFFQ_POOL_NONE = 2147483647,
-	WORK_STRUCT_FLAG_MASK = 255,
-	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
-	WORK_STRUCT_NO_POOL = 4294967264,
-	WORK_BUSY_PENDING = 1,
-	WORK_BUSY_RUNNING = 2,
-	WORKER_DESC_LEN = 24,
-};
-
-struct irq_bypass_consumer;
-
-struct irq_bypass_producer {
-	struct list_head node;
-	void *token;
-	int irq;
-	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*stop)(struct irq_bypass_producer *);
-	void (*start)(struct irq_bypass_producer *);
-};
-
-struct irq_bypass_consumer {
-	struct list_head node;
-	void *token;
-	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*stop)(struct irq_bypass_consumer *);
-	void (*start)(struct irq_bypass_consumer *);
-};
-
-enum {
-	kvm_ioeventfd_flag_nr_datamatch = 0,
-	kvm_ioeventfd_flag_nr_pio = 1,
-	kvm_ioeventfd_flag_nr_deassign = 2,
-	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
-	kvm_ioeventfd_flag_nr_fast_mmio = 4,
-	kvm_ioeventfd_flag_nr_max = 5,
-};
-
-struct fd {
-	struct file *file;
-	unsigned int flags;
-};
-
-struct kvm_s390_adapter_int {
-	u64 ind_addr;
-	u64 summary_addr;
-	u64 ind_offset;
-	u32 summary_offset;
-	u32 adapter_id;
-};
-
-struct kvm_hv_sint {
-	u32 vcpu;
-	u32 sint;
-};
-
-struct kvm_kernel_irq_routing_entry {
-	u32 gsi;
-	u32 type;
-	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
-	union {
-		struct {
-			unsigned int irqchip;
-			unsigned int pin;
-		} irqchip;
-		struct {
-			u32 address_lo;
-			u32 address_hi;
-			u32 data;
-			u32 flags;
-			u32 devid;
-		} msi;
-		struct kvm_s390_adapter_int adapter;
-		struct kvm_hv_sint hv_sint;
-	};
-	struct hlist_node link;
-};
-
-struct kvm_irq_ack_notifier {
-	struct hlist_node link;
-	unsigned int gsi;
-	void (*irq_acked)(struct kvm_irq_ack_notifier *);
-};
-
-typedef struct poll_table_struct poll_table;
-
-struct kvm_kernel_irqfd_resampler {
-	struct kvm *kvm;
-	struct list_head list;
-	struct kvm_irq_ack_notifier notifier;
+struct regmap_debugfs_node {
+	struct regmap *map;
 	struct list_head link;
 };
 
-struct kvm_kernel_irqfd {
-	struct kvm *kvm;
-	wait_queue_entry_t wait;
-	struct kvm_kernel_irq_routing_entry irq_entry;
-	seqcount_spinlock_t irq_entry_sc;
-	int gsi;
-	struct work_struct inject;
-	struct kvm_kernel_irqfd_resampler *resampler;
-	struct eventfd_ctx *resamplefd;
-	struct list_head resampler_link;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	poll_table pt;
-	struct work_struct shutdown;
-	struct irq_bypass_consumer consumer;
-	struct irq_bypass_producer *producer;
-};
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
 
-struct _ioeventfd {
-	struct list_head list;
-	u64 addr;
-	int length;
-	struct eventfd_ctx *eventfd;
-	u64 datamatch;
-	struct kvm_io_device dev;
-	u8 bus_idx;
-	bool wildcard;
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
 };
 
-struct vfio_group;
-
-struct kvm_vfio_group {
-	struct list_head node;
-	struct vfio_group *vfio_group;
-};
-
-struct kvm_vfio {
-	struct list_head group_list;
-	struct mutex lock;
-	bool noncoherent;
-};
-
-struct kvm_vcpu_init {
-	__u32 target;
-	__u32 features[7];
-};
-
-struct kvm_vcpu_events {
-	struct {
-		__u8 serror_pending;
-		__u8 serror_has_esr;
-		__u8 ext_dabt_pending;
-		__u8 pad[5];
-		__u64 serror_esr;
-	} exception;
-	__u32 reserved[12];
-};
-
-struct kvm_reg_list {
-	__u64 n;
-	__u64 reg[0];
-};
-
-struct kvm_one_reg {
-	__u64 id;
-	__u64 addr;
-};
-
-struct kvm_arm_device_addr {
-	__u64 id;
-	__u64 addr;
-};
-
-enum vgic_type {
-	VGIC_V2 = 0,
-	VGIC_V3 = 1,
-};
-
-struct vgic_global {
-	enum vgic_type type;
-	phys_addr_t vcpu_base;
-	void *vcpu_base_va;
-	void *vcpu_hyp_va;
-	void *vctrl_base;
-	void *vctrl_hyp;
-	int nr_lr;
-	unsigned int maint_irq;
-	int max_gic_vcpus;
-	bool can_emulate_gicv2;
-	bool has_gicv4;
-	bool has_gicv4_1;
-	struct static_key_false gicv3_cpuif;
-	u32 ich_vtr_el2;
-};
-
-struct timer_map {
-	struct arch_timer_context *direct_vtimer;
-	struct arch_timer_context *direct_ptimer;
-	struct arch_timer_context *emul_ptimer;
-};
-
-typedef u64 kvm_pte_t;
-
-struct kvm_pgtable {
-	u32 ia_bits;
-	u32 start_level;
-	kvm_pte_t *pgd;
-	struct kvm_s2_mmu *mmu;
-};
-
-struct kvm_pmu_events {
-	u32 events_host;
-	u32 events_guest;
-};
-
-struct kvm_host_data {
-	struct kvm_cpu_context host_ctxt;
-	struct kvm_pmu_events pmu_events;
-	long: 64;
-};
-
-struct trace_event_raw_kvm_entry {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_exit {
-	struct trace_entry ent;
-	int ret;
-	unsigned int esr_ec;
-	long unsigned int vcpu_pc;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_guest_fault {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int hsr;
-	long unsigned int hxfar;
-	long long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_access_fault {
-	struct trace_entry ent;
-	long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_irq_line {
-	struct trace_entry ent;
-	unsigned int type;
-	int vcpu_idx;
-	int irq_num;
-	int level;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_mmio_emulate {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int instr;
-	long unsigned int cpsr;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_unmap_hva_range {
-	struct trace_entry ent;
-	long unsigned int start;
-	long unsigned int end;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_spte_hva {
-	struct trace_entry ent;
-	long unsigned int hva;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_age_hva {
-	struct trace_entry ent;
-	long unsigned int start;
-	long unsigned int end;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_test_age_hva {
-	struct trace_entry ent;
-	long unsigned int hva;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_way_flush {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool cache;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_toggle_cache {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool was;
-	bool now;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_timer_update_irq {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	int level;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_get_timer_map {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	int direct_vtimer;
-	int direct_ptimer;
-	int emul_ptimer;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_timer_save_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_timer_restore_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_timer_hrtimer_expire {
-	struct trace_entry ent;
-	int timer_idx;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_timer_emulate {
-	struct trace_entry ent;
-	int timer_idx;
-	bool should_fire;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_entry {};
-
-struct trace_event_data_offsets_kvm_exit {};
-
-struct trace_event_data_offsets_kvm_guest_fault {};
-
-struct trace_event_data_offsets_kvm_access_fault {};
-
-struct trace_event_data_offsets_kvm_irq_line {};
-
-struct trace_event_data_offsets_kvm_mmio_emulate {};
-
-struct trace_event_data_offsets_kvm_unmap_hva_range {};
-
-struct trace_event_data_offsets_kvm_set_spte_hva {};
-
-struct trace_event_data_offsets_kvm_age_hva {};
-
-struct trace_event_data_offsets_kvm_test_age_hva {};
-
-struct trace_event_data_offsets_kvm_set_way_flush {};
-
-struct trace_event_data_offsets_kvm_toggle_cache {};
-
-struct trace_event_data_offsets_kvm_timer_update_irq {};
-
-struct trace_event_data_offsets_kvm_get_timer_map {};
-
-struct trace_event_data_offsets_kvm_timer_save_state {};
-
-struct trace_event_data_offsets_kvm_timer_restore_state {};
-
-struct trace_event_data_offsets_kvm_timer_hrtimer_expire {};
-
-struct trace_event_data_offsets_kvm_timer_emulate {};
-
-typedef void (*btf_trace_kvm_entry)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_exit)(void *, int, unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_guest_fault)(void *, long unsigned int, long unsigned int, long unsigned int, long long unsigned int);
-
-typedef void (*btf_trace_kvm_access_fault)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_irq_line)(void *, unsigned int, int, int, int);
-
-typedef void (*btf_trace_kvm_mmio_emulate)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_unmap_hva_range)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_set_spte_hva)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_age_hva)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_test_age_hva)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_set_way_flush)(void *, long unsigned int, bool);
-
-typedef void (*btf_trace_kvm_toggle_cache)(void *, long unsigned int, bool, bool);
-
-typedef void (*btf_trace_kvm_timer_update_irq)(void *, long unsigned int, __u32, int);
-
-typedef void (*btf_trace_kvm_get_timer_map)(void *, long unsigned int, struct timer_map *);
-
-typedef void (*btf_trace_kvm_timer_save_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_restore_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_hrtimer_expire)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_emulate)(void *, struct arch_timer_context *, bool);
-
-enum kvm_pgtable_prot {
-	KVM_PGTABLE_PROT_X = 1,
-	KVM_PGTABLE_PROT_W = 2,
-	KVM_PGTABLE_PROT_R = 4,
-	KVM_PGTABLE_PROT_DEVICE = 8,
-};
-
-typedef long unsigned int hva_t;
-
-enum kvm_arch_timers {
-	TIMER_PTIMER = 0,
-	TIMER_VTIMER = 1,
-	NR_KVM_TIMERS = 2,
-};
-
-enum exception_type {
-	except_type_sync = 0,
-	except_type_irq = 128,
-	except_type_fiq = 256,
-	except_type_serror = 384,
-};
-
-struct sys_reg_params;
-
-struct sys_reg_desc {
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	bool (*access)(struct kvm_vcpu *, struct sys_reg_params *, const struct sys_reg_desc *);
-	void (*reset)(struct kvm_vcpu *, const struct sys_reg_desc *);
-	int reg;
-	u64 val;
-	int (*__get_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	int (*set_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	unsigned int (*visibility)(const struct kvm_vcpu *, const struct sys_reg_desc *);
-};
-
-struct sys_reg_params {
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	u64 regval;
-	bool is_write;
-	bool is_aarch32;
-	bool is_32bit;
-};
-
-struct trace_event_raw_kvm_wfx_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_wfe;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_hvc_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int r0;
-	long unsigned int imm;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_setup_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_clear_debug {
-	struct trace_entry ent;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_set_dreg32 {
-	struct trace_entry ent;
-	const char *name;
-	__u32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_arm_set_regset {
-	struct trace_entry ent;
-	const char *name;
-	int len;
-	u64 ctrls[16];
-	u64 values[16];
-	char __data[0];
-};
-
-struct trace_event_raw_trap_reg {
-	struct trace_entry ent;
-	const char *fn;
-	int reg;
-	bool is_write;
-	u64 write_value;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_handle_sys_reg {
-	struct trace_entry ent;
-	long unsigned int hsr;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_sys_access {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_write;
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_guest_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_wfx_arm64 {};
-
-struct trace_event_data_offsets_kvm_hvc_arm64 {};
-
-struct trace_event_data_offsets_kvm_arm_setup_debug {};
-
-struct trace_event_data_offsets_kvm_arm_clear_debug {};
-
-struct trace_event_data_offsets_kvm_arm_set_dreg32 {};
-
-struct trace_event_data_offsets_kvm_arm_set_regset {};
-
-struct trace_event_data_offsets_trap_reg {};
-
-struct trace_event_data_offsets_kvm_handle_sys_reg {};
-
-struct trace_event_data_offsets_kvm_sys_access {};
-
-struct trace_event_data_offsets_kvm_set_guest_debug {};
-
-typedef void (*btf_trace_kvm_wfx_arm64)(void *, long unsigned int, bool);
-
-typedef void (*btf_trace_kvm_hvc_arm64)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_arm_setup_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef void (*btf_trace_kvm_arm_clear_debug)(void *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_dreg32)(void *, const char *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_regset)(void *, const char *, int, __u64 *, __u64 *);
-
-typedef void (*btf_trace_trap_reg)(void *, const char *, int, bool, u64);
-
-typedef void (*btf_trace_kvm_handle_sys_reg)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_sys_access)(void *, long unsigned int, struct sys_reg_params *, const struct sys_reg_desc *);
-
-typedef void (*btf_trace_kvm_set_guest_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef int (*exit_handle_fn)(struct kvm_vcpu *);
-
-struct sve_state_reg_region {
-	unsigned int koffset;
-	unsigned int klen;
-	unsigned int upad;
-};
-
-struct __va_list {
-	void *__stack;
-	void *__gr_top;
-	void *__vr_top;
-	int __gr_offs;
-	int __vr_offs;
-};
-
-typedef struct __va_list __gnuc_va_list;
-
-typedef __gnuc_va_list va_list;
-
-struct va_format {
-	const char *fmt;
-	va_list *va;
-};
-
-enum kvm_arch_timer_regs {
-	TIMER_REG_CNT = 0,
-	TIMER_REG_CVAL = 1,
-	TIMER_REG_TVAL = 2,
-	TIMER_REG_CTL = 3,
-};
-
-struct vgic_vmcr {
-	u32 grpen0;
-	u32 grpen1;
-	u32 ackctl;
-	u32 fiqen;
-	u32 cbpr;
-	u32 eoim;
-	u32 abpr;
-	u32 bpr;
-	u32 pmr;
-};
-
-struct cyclecounter {
-	u64 (*read)(const struct cyclecounter *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-};
-
-struct timecounter {
-	const struct cyclecounter *cc;
-	u64 cycle_last;
-	u64 nsec;
-	u64 mask;
-	u64 frac;
-};
-
-struct arch_timer_kvm_info {
-	struct timecounter timecounter;
-	int virtual_irq;
-	int physical_irq;
-};
-
-enum hrtimer_mode {
-	HRTIMER_MODE_ABS = 0,
-	HRTIMER_MODE_REL = 1,
-	HRTIMER_MODE_PINNED = 2,
-	HRTIMER_MODE_SOFT = 4,
-	HRTIMER_MODE_HARD = 8,
-	HRTIMER_MODE_ABS_PINNED = 2,
-	HRTIMER_MODE_REL_PINNED = 3,
-	HRTIMER_MODE_ABS_SOFT = 4,
-	HRTIMER_MODE_REL_SOFT = 5,
-	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
-	HRTIMER_MODE_REL_PINNED_SOFT = 7,
-	HRTIMER_MODE_ABS_HARD = 8,
-	HRTIMER_MODE_REL_HARD = 9,
-	HRTIMER_MODE_ABS_PINNED_HARD = 10,
-	HRTIMER_MODE_REL_PINNED_HARD = 11,
-};
-
-struct trace_event_raw_vgic_update_irq_pending {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	bool level;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_vgic_update_irq_pending {};
-
-typedef void (*btf_trace_vgic_update_irq_pending)(void *, long unsigned int, __u32, bool);
-
-enum gic_type {
-	GIC_V2 = 0,
-	GIC_V3 = 1,
-};
-
-struct gic_kvm_info {
-	enum gic_type type;
-	struct resource vcpu;
-	unsigned int maint_irq;
-	struct resource vctrl;
-	bool has_v4;
-	bool has_v4_1;
-};
-
-struct its_vlpi_map {
-	struct its_vm *vm;
-	struct its_vpe *vpe;
-	u32 vintid;
-	u8 properties;
-	bool db_enabled;
-};
-
-struct vgic_reg_attr {
-	struct kvm_vcpu *vcpu;
-	gpa_t addr;
-};
-
-struct its_device {
-	struct list_head dev_list;
-	struct list_head itt_head;
-	u32 num_eventid_bits;
-	gpa_t itt_addr;
-	u32 device_id;
-};
-
-struct its_collection {
-	struct list_head coll_list;
-	u32 collection_id;
-	u32 target_addr;
-};
-
-struct its_ite {
-	struct list_head ite_list;
-	struct vgic_irq *irq;
-	struct its_collection *collection;
-	u32 event_id;
-};
-
-struct vgic_translation_cache_entry {
-	struct list_head entry;
-	phys_addr_t db;
-	u32 devid;
-	u32 eventid;
-	struct vgic_irq *irq;
-};
-
-struct vgic_its_abi {
-	int cte_esz;
-	int dte_esz;
-	int ite_esz;
-	int (*save_tables)(struct vgic_its *);
-	int (*restore_tables)(struct vgic_its *);
-	int (*commit)(struct vgic_its *);
-};
-
-typedef int (*entry_fn_t)(struct vgic_its *, u32, void *, void *);
-
-struct vgic_state_iter {
-	int nr_cpus;
-	int nr_spis;
-	int nr_lpis;
-	int dist_id;
-	int vcpu_id;
-	int intid;
-	int lpi_idx;
-	u32 *lpi_array;
-};
-
-struct kvm_pmu_event_filter {
-	__u16 base_event;
-	__u16 nevents;
-	__u8 action;
-	__u8 pad[3];
-};
-
-struct tlb_inv_context {
-	long unsigned int flags;
-	u64 tcr;
-	u64 sctlr;
-};
-
-struct tlb_inv_context___2 {
-	u64 tcr;
-};
-
-enum kvm_pgtable_walk_flags {
-	KVM_PGTABLE_WALK_LEAF = 1,
-	KVM_PGTABLE_WALK_TABLE_PRE = 2,
-	KVM_PGTABLE_WALK_TABLE_POST = 4,
-};
-
-typedef int (*kvm_pgtable_visitor_fn_t)(u64, u64, u32, kvm_pte_t *, enum kvm_pgtable_walk_flags, void * const);
-
-struct kvm_pgtable_walker {
-	const kvm_pgtable_visitor_fn_t cb;
-	void * const arg;
-	const enum kvm_pgtable_walk_flags flags;
-};
-
-struct kvm_pgtable_walk_data {
-	struct kvm_pgtable *pgt;
-	struct kvm_pgtable_walker *walker;
-	u64 addr;
-	u64 end;
-};
-
-struct hyp_map_data {
-	u64 phys;
-	kvm_pte_t attr;
-};
-
-struct stage2_map_data {
-	u64 phys;
-	kvm_pte_t attr;
-	kvm_pte_t *anchor;
-	struct kvm_s2_mmu *mmu;
-	struct kvm_mmu_memory_cache *memcache;
-};
-
-struct stage2_attr_data {
-	kvm_pte_t attr_set;
-	kvm_pte_t attr_clr;
-	kvm_pte_t pte;
-	u32 level;
-};
-
-typedef s8 int8_t;
-
-typedef s16 int16_t;
-
-typedef u16 uint16_t;
-
-typedef uint64_t xen_pfn_t;
-
-typedef uint64_t xen_ulong_t;
-
-typedef struct {
-	union {
-		unsigned char *p;
-		uint64_t q;
-	};
-} __guest_handle_uchar;
-
-typedef struct {
-	union {
-		char *p;
-		uint64_t q;
-	};
-} __guest_handle_char;
-
-typedef struct {
-	union {
-		void *p;
-		uint64_t q;
-	};
-} __guest_handle_void;
-
-typedef struct {
-	union {
-		uint64_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint64_t;
-
-typedef struct {
-	union {
-		uint32_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint32_t;
-
-struct arch_vcpu_info {};
-
-struct arch_shared_info {};
-
-struct pvclock_vcpu_time_info {
-	u32 version;
-	u32 pad0;
-	u64 tsc_timestamp;
-	u64 system_time;
-	u32 tsc_to_system_mul;
-	s8 tsc_shift;
-	u8 flags;
-	u8 pad[2];
-};
-
-struct pvclock_wall_clock {
-	u32 version;
-	u32 sec;
-	u32 nsec;
-	u32 sec_hi;
-};
-
-typedef uint16_t domid_t;
-
-struct vcpu_info {
-	uint8_t evtchn_upcall_pending;
-	uint8_t evtchn_upcall_mask;
-	xen_ulong_t evtchn_pending_sel;
-	struct arch_vcpu_info arch;
-	struct pvclock_vcpu_time_info time;
-};
-
-struct shared_info {
-	struct vcpu_info vcpu_info[1];
-	xen_ulong_t evtchn_pending[64];
-	xen_ulong_t evtchn_mask[64];
-	struct pvclock_wall_clock wc;
-	struct arch_shared_info arch;
-};
-
-struct start_info {
-	char magic[32];
-	long unsigned int nr_pages;
-	long unsigned int shared_info;
-	uint32_t flags;
-	xen_pfn_t store_mfn;
-	uint32_t store_evtchn;
-	union {
-		struct {
-			xen_pfn_t mfn;
-			uint32_t evtchn;
-		} domU;
-		struct {
-			uint32_t info_off;
-			uint32_t info_size;
-		} dom0;
-	} console;
-	long unsigned int pt_base;
-	long unsigned int nr_pt_frames;
-	long unsigned int mfn_list;
-	long unsigned int mod_start;
-	long unsigned int mod_len;
-	int8_t cmd_line[1024];
-	long unsigned int first_p2m_pfn;
-	long unsigned int nr_p2m_frames;
-};
-
-enum vdso_clock_mode {
-	VDSO_CLOCKMODE_NONE = 0,
-	VDSO_CLOCKMODE_ARCHTIMER = 1,
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = 2,
-	VDSO_CLOCKMODE_MAX = 3,
-	VDSO_CLOCKMODE_TIMENS = 2147483647,
-};
-
-struct clocksource {
-	u64 (*read)(struct clocksource *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	u64 max_idle_ns;
-	u32 maxadj;
-	u64 max_cycles;
-	const char *name;
-	struct list_head list;
-	int rating;
-	enum vdso_clock_mode vdso_clock_mode;
-	long unsigned int flags;
-	int (*enable)(struct clocksource *);
-	void (*disable)(struct clocksource *);
-	void (*suspend)(struct clocksource *);
-	void (*resume)(struct clocksource *);
-	void (*mark_unstable)(struct clocksource *);
-	void (*tick_stable)(struct clocksource *);
+struct dma_buf_export_info {
+	const char *exp_name;
 	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
 };
 
-struct sched_shutdown {
-	unsigned int reason;
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
 };
 
-struct xenpf_settime32 {
-	uint32_t secs;
-	uint32_t nsecs;
-	uint64_t system_time;
-};
-
-struct xenpf_settime64 {
-	uint64_t secs;
-	uint32_t nsecs;
-	uint32_t mbz;
-	uint64_t system_time;
-};
-
-struct xenpf_add_memtype {
-	xen_pfn_t mfn;
-	uint64_t nr_mfns;
-	uint32_t type;
-	uint32_t handle;
-	uint32_t reg;
-};
-
-struct xenpf_del_memtype {
-	uint32_t handle;
-	uint32_t reg;
-};
-
-struct xenpf_read_memtype {
-	uint32_t reg;
-	xen_pfn_t mfn;
-	uint64_t nr_mfns;
-	uint32_t type;
-};
-
-struct xenpf_microcode_update {
-	__guest_handle_void data;
-	uint32_t length;
-};
-
-struct xenpf_platform_quirk {
-	uint32_t quirk_id;
-};
-
-struct xenpf_efi_time {
-	uint16_t year;
-	uint8_t month;
-	uint8_t day;
-	uint8_t hour;
-	uint8_t min;
-	uint8_t sec;
-	uint32_t ns;
-	int16_t tz;
-	uint8_t daylight;
-};
-
-struct xenpf_efi_guid {
-	uint32_t data1;
-	uint16_t data2;
-	uint16_t data3;
-	uint8_t data4[8];
-};
-
-struct xenpf_efi_runtime_call {
-	uint32_t function;
-	uint32_t misc;
-	xen_ulong_t status;
-	union {
-		struct {
-			struct xenpf_efi_time time;
-			uint32_t resolution;
-			uint32_t accuracy;
-		} get_time;
-		struct xenpf_efi_time set_time;
-		struct xenpf_efi_time get_wakeup_time;
-		struct xenpf_efi_time set_wakeup_time;
-		struct {
-			__guest_handle_void name;
-			xen_ulong_t size;
-			__guest_handle_void data;
-			struct xenpf_efi_guid vendor_guid;
-		} get_variable;
-		struct {
-			__guest_handle_void name;
-			xen_ulong_t size;
-			__guest_handle_void data;
-			struct xenpf_efi_guid vendor_guid;
-		} set_variable;
-		struct {
-			xen_ulong_t size;
-			__guest_handle_void name;
-			struct xenpf_efi_guid vendor_guid;
-		} get_next_variable_name;
-		struct {
-			uint32_t attr;
-			uint64_t max_store_size;
-			uint64_t remain_store_size;
-			uint64_t max_size;
-		} query_variable_info;
-		struct {
-			__guest_handle_void capsule_header_array;
-			xen_ulong_t capsule_count;
-			uint64_t max_capsule_size;
-			uint32_t reset_type;
-		} query_capsule_capabilities;
-		struct {
-			__guest_handle_void capsule_header_array;
-			xen_ulong_t capsule_count;
-			uint64_t sg_list;
-		} update_capsule;
-	} u;
-};
-
-union xenpf_efi_info {
-	uint32_t version;
-	struct {
-		uint64_t addr;
-		uint32_t nent;
-	} cfg;
-	struct {
-		uint32_t revision;
-		uint32_t bufsz;
-		__guest_handle_void name;
-	} vendor;
-	struct {
-		uint64_t addr;
-		uint64_t size;
-		uint64_t attr;
-		uint32_t type;
-	} mem;
-};
-
-struct xenpf_firmware_info {
-	uint32_t type;
-	uint32_t index;
-	union {
-		struct {
-			uint8_t device;
-			uint8_t version;
-			uint16_t interface_support;
-			uint16_t legacy_max_cylinder;
-			uint8_t legacy_max_head;
-			uint8_t legacy_sectors_per_track;
-			__guest_handle_void edd_params;
-		} disk_info;
-		struct {
-			uint8_t device;
-			uint32_t mbr_signature;
-		} disk_mbr_signature;
-		struct {
-			uint8_t capabilities;
-			uint8_t edid_transfer_time;
-			__guest_handle_uchar edid;
-		} vbeddc_info;
-		union xenpf_efi_info efi_info;
-		uint8_t kbd_shift_flags;
-	} u;
-};
-
-struct xenpf_enter_acpi_sleep {
-	uint16_t val_a;
-	uint16_t val_b;
-	uint32_t sleep_state;
-	uint32_t flags;
-};
-
-struct xenpf_change_freq {
-	uint32_t flags;
-	uint32_t cpu;
-	uint64_t freq;
-};
-
-struct xenpf_getidletime {
-	__guest_handle_uchar cpumap_bitmap;
-	uint32_t cpumap_nr_cpus;
-	__guest_handle_uint64_t idletime;
-	uint64_t now;
-};
-
-struct xen_power_register {
-	uint32_t space_id;
-	uint32_t bit_width;
-	uint32_t bit_offset;
-	uint32_t access_size;
-	uint64_t address;
-};
-
-struct xen_processor_csd {
-	uint32_t domain;
-	uint32_t coord_type;
-	uint32_t num;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_csd *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_csd;
-
-struct xen_processor_cx {
-	struct xen_power_register reg;
-	uint8_t type;
-	uint32_t latency;
-	uint32_t power;
-	uint32_t dpcnt;
-	__guest_handle_xen_processor_csd dp;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_cx *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_cx;
-
-struct xen_processor_flags {
-	uint32_t bm_control: 1;
-	uint32_t bm_check: 1;
-	uint32_t has_cst: 1;
-	uint32_t power_setup_done: 1;
-	uint32_t bm_rld_set: 1;
-};
-
-struct xen_processor_power {
-	uint32_t count;
-	struct xen_processor_flags flags;
-	__guest_handle_xen_processor_cx states;
-};
-
-struct xen_pct_register {
-	uint8_t descriptor;
-	uint16_t length;
-	uint8_t space_id;
-	uint8_t bit_width;
-	uint8_t bit_offset;
-	uint8_t reserved;
-	uint64_t address;
-};
-
-struct xen_processor_px {
-	uint64_t core_frequency;
-	uint64_t power;
-	uint64_t transition_latency;
-	uint64_t bus_master_latency;
-	uint64_t control;
-	uint64_t status;
-};
-
-typedef struct {
-	union {
-		struct xen_processor_px *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_px;
-
-struct xen_psd_package {
-	uint64_t num_entries;
-	uint64_t revision;
-	uint64_t domain;
-	uint64_t coord_type;
-	uint64_t num_processors;
-};
-
-struct xen_processor_performance {
-	uint32_t flags;
-	uint32_t platform_limit;
-	struct xen_pct_register control_register;
-	struct xen_pct_register status_register;
-	uint32_t state_count;
-	__guest_handle_xen_processor_px states;
-	struct xen_psd_package domain_info;
-	uint32_t shared_type;
-};
-
-struct xenpf_set_processor_pminfo {
-	uint32_t id;
-	uint32_t type;
-	union {
-		struct xen_processor_power power;
-		struct xen_processor_performance perf;
-		__guest_handle_uint32_t pdc;
-	};
-};
-
-struct xenpf_pcpuinfo {
-	uint32_t xen_cpuid;
-	uint32_t max_present;
-	uint32_t flags;
-	uint32_t apic_id;
-	uint32_t acpi_id;
-};
-
-struct xenpf_cpu_ol {
-	uint32_t cpuid;
-};
-
-struct xenpf_cpu_hotadd {
-	uint32_t apic_id;
-	uint32_t acpi_id;
-	uint32_t pxm;
-};
-
-struct xenpf_mem_hotadd {
-	uint64_t spfn;
-	uint64_t epfn;
-	uint32_t pxm;
-	uint32_t flags;
-};
-
-struct xenpf_core_parking {
-	uint32_t type;
-	uint32_t idle_nums;
-};
-
-struct xenpf_symdata {
-	uint32_t namelen;
-	uint32_t symnum;
-	__guest_handle_char name;
-	uint64_t address;
-	char type;
-};
-
-struct xen_platform_op {
-	uint32_t cmd;
-	uint32_t interface_version;
-	union {
-		struct xenpf_settime32 settime32;
-		struct xenpf_settime64 settime64;
-		struct xenpf_add_memtype add_memtype;
-		struct xenpf_del_memtype del_memtype;
-		struct xenpf_read_memtype read_memtype;
-		struct xenpf_microcode_update microcode;
-		struct xenpf_platform_quirk platform_quirk;
-		struct xenpf_efi_runtime_call efi_runtime_call;
-		struct xenpf_firmware_info firmware_info;
-		struct xenpf_enter_acpi_sleep enter_acpi_sleep;
-		struct xenpf_change_freq change_freq;
-		struct xenpf_getidletime getidletime;
-		struct xenpf_set_processor_pminfo set_pminfo;
-		struct xenpf_pcpuinfo pcpu_info;
-		struct xenpf_cpu_ol cpu_ol;
-		struct xenpf_cpu_hotadd cpu_add;
-		struct xenpf_mem_hotadd mem_add;
-		struct xenpf_core_parking core_parking;
-		struct xenpf_symdata symdata;
-		uint8_t pad[128];
-	} u;
-};
-
-struct xen_memory_region {
-	long unsigned int start_pfn;
-	long unsigned int n_pfns;
-};
-
-struct grant_frames {
-	xen_pfn_t *pfn;
-	unsigned int count;
-	void *vaddr;
-};
-
-struct xen_hvm_param {
-	domid_t domid;
-	uint32_t index;
-	uint64_t value;
-};
-
-struct vcpu_register_vcpu_info {
-	uint64_t mfn;
-	uint32_t offset;
-	uint32_t rsvd;
-};
-
-struct xen_add_to_physmap {
-	domid_t domid;
-	uint16_t size;
-	unsigned int space;
-	xen_ulong_t idx;
-	xen_pfn_t gpfn;
-};
-
-struct xsd_errors {
-	int errnum;
-	const char *errstring;
-};
-
-struct tk_read_base {
-	struct clocksource *clock;
-	u64 mask;
-	u64 cycle_last;
-	u32 mult;
-	u32 shift;
-	u64 xtime_nsec;
-	ktime_t base;
-	u64 base_real;
-};
-
-struct timekeeper {
-	struct tk_read_base tkr_mono;
-	struct tk_read_base tkr_raw;
-	u64 xtime_sec;
-	long unsigned int ktime_sec;
-	struct timespec64 wall_to_monotonic;
-	ktime_t offs_real;
-	ktime_t offs_boot;
-	ktime_t offs_tai;
-	s32 tai_offset;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-	ktime_t next_leap_ktime;
-	u64 raw_sec;
-	struct timespec64 monotonic_to_boot;
-	u64 cycle_interval;
-	u64 xtime_interval;
-	s64 xtime_remainder;
-	u64 raw_interval;
-	u64 ntp_tick;
-	s64 ntp_error;
-	u32 ntp_error_shift;
-	u32 ntp_err_mult;
-	u32 skip_second_overflow;
-};
-
-typedef uint16_t grant_status_t;
-
-typedef uint32_t grant_ref_t;
-
-typedef uint32_t grant_handle_t;
-
-struct gnttab_map_grant_ref {
-	uint64_t host_addr;
-	uint32_t flags;
-	grant_ref_t ref;
-	domid_t dom;
-	int16_t status;
-	grant_handle_t handle;
-	uint64_t dev_bus_addr;
-};
-
-struct gnttab_unmap_grant_ref {
-	uint64_t host_addr;
-	uint64_t dev_bus_addr;
-	grant_handle_t handle;
-	int16_t status;
-};
-
-struct xen_p2m_entry {
-	long unsigned int pfn;
-	long unsigned int mfn;
-	long unsigned int nr_pages;
-	struct rb_node rbnode_phys;
-};
-
-struct gnttab_cache_flush {
-	union {
-		uint64_t dev_bus_addr;
-		grant_ref_t ref;
-	} a;
-	uint16_t offset;
-	uint16_t length;
-	uint32_t op;
-};
-
-struct static_key_true {
-	struct static_key key;
-};
-
-enum tk_offsets {
-	TK_OFFS_REAL = 0,
-	TK_OFFS_BOOT = 1,
-	TK_OFFS_TAI = 2,
-	TK_OFFS_MAX = 3,
-};
-
-struct clone_args {
+struct dma_buf_sync {
 	__u64 flags;
-	__u64 pidfd;
-	__u64 child_tid;
-	__u64 parent_tid;
-	__u64 exit_signal;
-	__u64 stack;
-	__u64 stack_size;
-	__u64 tls;
-	__u64 set_tid;
-	__u64 set_tid_size;
-	__u64 cgroup;
 };
 
-struct fdtable {
-	unsigned int max_fds;
-	struct file **fd;
-	long unsigned int *close_on_exec;
-	long unsigned int *open_fds;
-	long unsigned int *full_fds_bits;
+struct dma_buf_export_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_import_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct dma_resv_list {
 	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence *table[0];
 };
 
-struct files_struct {
-	atomic_t count;
-	bool resize_in_progress;
-	wait_queue_head_t resize_wait;
-	struct fdtable *fdt;
-	struct fdtable fdtab;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t file_lock;
-	unsigned int next_fd;
-	long unsigned int close_on_exec_init[1];
-	long unsigned int open_fds_init[1];
-	long unsigned int full_fds_bits_init[1];
-	struct file *fd_array[64];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct dma_fence_array {
+	struct dma_fence base;
+	spinlock_t lock;
+	unsigned int num_fences;
+	atomic_t num_pending;
+	struct dma_fence **fences;
+	struct irq_work work;
 };
 
-struct io_identity {
-	struct files_struct *files;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *creds;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	long unsigned int fsize;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	refcount_t count;
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TRANSPORT_MARGINAL = 20,
 };
 
-struct io_uring_task {
-	struct xarray xa;
-	struct wait_queue_head wait;
-	struct file *last;
-	struct percpu_counter inflight;
-	struct io_identity __identity;
-	struct io_identity *identity;
-	atomic_t in_idle;
-	bool sqpoll;
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
 };
 
-struct robust_list {
-	struct robust_list *next;
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
 };
 
-struct robust_list_head {
-	struct robust_list list;
-	long int futex_offset;
-	struct robust_list *list_op_pending;
+struct value_name_pair;
+
+struct sa_name_list {
+	int opcode;
+	const struct value_name_pair *arr;
+	int arr_sz;
 };
 
-struct kernel_clone_args {
-	u64 flags;
-	int *pidfd;
-	int *child_tid;
-	int *parent_tid;
-	int exit_signal;
-	long unsigned int stack;
-	long unsigned int stack_size;
-	long unsigned int tls;
-	pid_t *set_tid;
-	size_t set_tid_size;
-	int cgroup;
-	struct cgroup *cgrp;
-	struct css_set *cset;
-};
-
-struct multiprocess_signals {
-	sigset_t signal;
-	struct hlist_node node;
-};
-
-typedef int (*proc_visitor)(struct task_struct *, void *);
-
-enum {
-	IOPRIO_CLASS_NONE = 0,
-	IOPRIO_CLASS_RT = 1,
-	IOPRIO_CLASS_BE = 2,
-	IOPRIO_CLASS_IDLE = 3,
-};
-
-enum {
-	FUTEX_STATE_OK = 0,
-	FUTEX_STATE_EXITING = 1,
-	FUTEX_STATE_DEAD = 2,
-};
-
-enum proc_hidepid {
-	HIDEPID_OFF = 0,
-	HIDEPID_NO_ACCESS = 1,
-	HIDEPID_INVISIBLE = 2,
-	HIDEPID_NOT_PTRACEABLE = 4,
-};
-
-enum proc_pidonly {
-	PROC_PIDONLY_OFF = 0,
-	PROC_PIDONLY_ON = 1,
-};
-
-struct proc_fs_info {
-	struct pid_namespace *pid_ns;
-	struct dentry *proc_self;
-	struct dentry *proc_thread_self;
-	kgid_t pid_gid;
-	enum proc_hidepid hide_pid;
-	enum proc_pidonly pidonly;
-};
-
-struct trace_event_raw_task_newtask {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	long unsigned int clone_flags;
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_task_rename {
-	struct trace_entry ent;
-	pid_t pid;
-	char oldcomm[16];
-	char newcomm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_task_newtask {};
-
-struct trace_event_data_offsets_task_rename {};
-
-typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
-
-typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
-
-struct taint_flag {
-	char c_true;
-	char c_false;
-	bool module;
-};
-
-enum ftrace_dump_mode {
-	DUMP_NONE = 0,
-	DUMP_ALL = 1,
-	DUMP_ORIG = 2,
-};
-
-enum kmsg_dump_reason {
-	KMSG_DUMP_UNDEF = 0,
-	KMSG_DUMP_PANIC = 1,
-	KMSG_DUMP_OOPS = 2,
-	KMSG_DUMP_EMERG = 3,
-	KMSG_DUMP_SHUTDOWN = 4,
-	KMSG_DUMP_MAX = 5,
-};
-
-enum con_flush_mode {
-	CONSOLE_FLUSH_PENDING = 0,
-	CONSOLE_REPLAY_ALL = 1,
-};
-
-struct warn_args {
-	const char *fmt;
-	va_list args;
-};
-
-enum hk_flags {
-	HK_FLAG_TIMER = 1,
-	HK_FLAG_RCU = 2,
-	HK_FLAG_MISC = 4,
-	HK_FLAG_SCHED = 8,
-	HK_FLAG_TICK = 16,
-	HK_FLAG_DOMAIN = 32,
-	HK_FLAG_WQ = 64,
-	HK_FLAG_MANAGED_IRQ = 128,
-	HK_FLAG_KTHREAD = 256,
-};
-
-enum cpuhp_smt_control {
-	CPU_SMT_ENABLED = 0,
-	CPU_SMT_DISABLED = 1,
-	CPU_SMT_FORCE_DISABLED = 2,
-	CPU_SMT_NOT_SUPPORTED = 3,
-	CPU_SMT_NOT_IMPLEMENTED = 4,
-};
-
-struct smp_hotplug_thread {
-	struct task_struct **store;
-	struct list_head list;
-	int (*thread_should_run)(unsigned int);
-	void (*thread_fn)(unsigned int);
-	void (*create)(unsigned int);
-	void (*setup)(unsigned int);
-	void (*cleanup)(unsigned int, bool);
-	void (*park)(unsigned int);
-	void (*unpark)(unsigned int);
-	bool selfparking;
-	const char *thread_comm;
-};
-
-struct trace_event_raw_cpuhp_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_multi_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_exit {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int state;
-	int idx;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpuhp_enter {};
-
-struct trace_event_data_offsets_cpuhp_multi_enter {};
-
-struct trace_event_data_offsets_cpuhp_exit {};
-
-typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
-
-typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
-
-typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
-
-struct cpuhp_cpu_state {
-	enum cpuhp_state state;
-	enum cpuhp_state target;
-	enum cpuhp_state fail;
-	struct task_struct *thread;
-	bool should_run;
-	bool rollback;
-	bool single;
-	bool bringup;
-	struct hlist_node *node;
-	struct hlist_node *last;
-	enum cpuhp_state cb_state;
-	int result;
-	struct completion done_up;
-	struct completion done_down;
-};
-
-struct cpuhp_step {
+struct value_name_pair {
+	int value;
 	const char *name;
+};
+
+struct error_info {
+	short unsigned int code12;
+	short unsigned int size;
+};
+
+struct error_info2 {
+	unsigned char code1;
+	unsigned char code2_min;
+	unsigned char code2_max;
+	const char *str;
+	const char *fmt;
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 2500,
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+struct bsg_device;
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	short unsigned int queue_depth;
+	short unsigned int max_queue_depth;
+	short unsigned int last_queue_full_depth;
+	short unsigned int last_queue_full_count;
+	long unsigned int last_queue_full_time;
+	long unsigned int queue_ramp_up_period;
+	long unsigned int last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd *vpd_pg0;
+	struct scsi_vpd *vpd_pg83;
+	struct scsi_vpd *vpd_pg80;
+	struct scsi_vpd *vpd_pg89;
+	struct scsi_vpd *vpd_pgb0;
+	struct scsi_vpd *vpd_pgb1;
+	struct scsi_vpd *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int use_16_for_sync: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int manage_start_stop: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	long unsigned int supported_events[1];
+	long unsigned int pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	atomic_t iotmo_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	long unsigned int sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	long unsigned int last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	short unsigned int max_cmd_len;
+	int this_id;
+	int can_queue;
+	short int cmd_per_lun;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	long unsigned int base;
+	long unsigned int io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	long unsigned int hostdata[0];
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	long unsigned int starget_data[0];
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+};
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	long unsigned int jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	short unsigned int cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	long unsigned int state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+enum scsi_timeout_action {
+	SCSI_EH_DONE = 0,
+	SCSI_EH_RESET_TIMER = 1,
+	SCSI_EH_NOT_HANDLED = 2,
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	void (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum scsi_timeout_action (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	int can_queue;
+	int this_id;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	short int cmd_per_lun;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	int rpm_autosuspend_delay;
+};
+
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
+};
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+	const struct cdrom_device_ops *ops;
+	struct list_head list;
+	struct gendisk *disk;
+	void *handle;
+	int mask;
+	int speed;
+	int capacity;
+	unsigned int options: 30;
+	unsigned int mc_flags: 2;
+	unsigned int vfs_events;
+	unsigned int ioctl_events;
+	int use_count;
+	char name[20];
+	__u8 sanyo_slot: 2;
+	__u8 keeplocked: 1;
+	__u8 reserved: 5;
+	int cdda_method;
+	__u8 last_sense;
+	__u8 media_written;
+	short unsigned int mmc3_profile;
+	int for_data;
+	int (*exit)(struct cdrom_device_info *);
+	int mrw_mode_page;
+	__s64 last_media_change_ms;
+};
+
+enum sas_oob_mode {
+	OOB_NOT_CONNECTED = 0,
+	SATA_OOB_MODE = 1,
+	SAS_OOB_MODE = 2,
+};
+
+enum sas_device_type {
+	SAS_PHY_UNUSED = 0,
+	SAS_END_DEVICE = 1,
+	SAS_EDGE_EXPANDER_DEVICE = 2,
+	SAS_FANOUT_EXPANDER_DEVICE = 3,
+	SAS_HA = 4,
+	SAS_SATA_DEV = 5,
+	SAS_SATA_PM = 7,
+	SAS_SATA_PM_PORT = 8,
+	SAS_SATA_PENDING = 9,
+};
+
+enum sas_protocol {
+	SAS_PROTOCOL_NONE = 0,
+	SAS_PROTOCOL_SATA = 1,
+	SAS_PROTOCOL_SMP = 2,
+	SAS_PROTOCOL_STP = 4,
+	SAS_PROTOCOL_SSP = 8,
+	SAS_PROTOCOL_ALL = 14,
+	SAS_PROTOCOL_STP_ALL = 5,
+	SAS_PROTOCOL_INTERNAL_ABORT = 16,
+};
+
+enum phy_func {
+	PHY_FUNC_NOP = 0,
+	PHY_FUNC_LINK_RESET = 1,
+	PHY_FUNC_HARD_RESET = 2,
+	PHY_FUNC_DISABLE = 3,
+	PHY_FUNC_CLEAR_ERROR_LOG = 5,
+	PHY_FUNC_CLEAR_AFFIL = 6,
+	PHY_FUNC_TX_SATA_PS_SIGNAL = 7,
+	PHY_FUNC_RELEASE_SPINUP_HOLD = 16,
+	PHY_FUNC_SET_LINK_RATE = 17,
+	PHY_FUNC_GET_EVENTS = 18,
+};
+
+enum sas_open_rej_reason {
+	SAS_OREJ_UNKNOWN = 0,
+	SAS_OREJ_BAD_DEST = 1,
+	SAS_OREJ_CONN_RATE = 2,
+	SAS_OREJ_EPROTO = 3,
+	SAS_OREJ_RESV_AB0 = 4,
+	SAS_OREJ_RESV_AB1 = 5,
+	SAS_OREJ_RESV_AB2 = 6,
+	SAS_OREJ_RESV_AB3 = 7,
+	SAS_OREJ_WRONG_DEST = 8,
+	SAS_OREJ_STP_NORES = 9,
+	SAS_OREJ_NO_DEST = 10,
+	SAS_OREJ_PATH_BLOCKED = 11,
+	SAS_OREJ_RSVD_CONT0 = 12,
+	SAS_OREJ_RSVD_CONT1 = 13,
+	SAS_OREJ_RSVD_INIT0 = 14,
+	SAS_OREJ_RSVD_INIT1 = 15,
+	SAS_OREJ_RSVD_STOP0 = 16,
+	SAS_OREJ_RSVD_STOP1 = 17,
+	SAS_OREJ_RSVD_RETRY = 18,
+};
+
+struct dev_to_host_fis {
+	u8 fis_type;
+	u8 flags;
+	u8 status;
+	u8 error;
+	u8 lbal;
 	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} startup;
+		u8 lbam;
+		u8 byte_count_low;
+	};
 	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} teardown;
-	struct hlist_head list;
-	bool cant_stop;
-	bool multi_instance;
+		u8 lbah;
+		u8 byte_count_high;
+	};
+	u8 device;
+	u8 lbal_exp;
+	u8 lbam_exp;
+	u8 lbah_exp;
+	u8 _r_a;
+	union {
+		u8 sector_count;
+		u8 interrupt_reason;
+	};
+	u8 sector_count_exp;
+	u8 _r_b;
+	u8 _r_c;
+	u32 _r_d;
 };
 
-enum cpu_mitigations {
-	CPU_MITIGATIONS_OFF = 0,
-	CPU_MITIGATIONS_AUTO = 1,
-	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+struct host_to_dev_fis {
+	u8 fis_type;
+	u8 flags;
+	u8 command;
+	u8 features;
+	u8 lbal;
+	union {
+		u8 lbam;
+		u8 byte_count_low;
+	};
+	union {
+		u8 lbah;
+		u8 byte_count_high;
+	};
+	u8 device;
+	u8 lbal_exp;
+	u8 lbam_exp;
+	u8 lbah_exp;
+	u8 features_exp;
+	union {
+		u8 sector_count;
+		u8 interrupt_reason;
+	};
+	u8 sector_count_exp;
+	u8 _r_a;
+	u8 control;
+	u32 _r_b;
 };
 
-struct __kernel_old_timeval {
-	__kernel_long_t tv_sec;
-	__kernel_long_t tv_usec;
+struct report_phy_sata_resp {
+	u8 _r_a[5];
+	u8 phy_id;
+	u8 _r_b;
+	u8 affil_valid: 1;
+	u8 affil_supp: 1;
+	u8 _r_c: 6;
+	u32 _r_d;
+	u8 stp_sas_addr[8];
+	struct dev_to_host_fis fis;
+	u32 _r_e;
+	u8 affil_stp_ini_addr[8];
+	__be32 crc;
 };
 
-struct old_timeval32 {
-	old_time32_t tv_sec;
-	s32 tv_usec;
+struct smp_rps_resp {
+	u8 frame_type;
+	u8 function;
+	u8 result;
+	u8 reserved;
+	struct report_phy_sata_resp rps;
 };
 
-struct rusage {
-	struct __kernel_old_timeval ru_utime;
-	struct __kernel_old_timeval ru_stime;
-	__kernel_long_t ru_maxrss;
-	__kernel_long_t ru_ixrss;
-	__kernel_long_t ru_idrss;
-	__kernel_long_t ru_isrss;
-	__kernel_long_t ru_minflt;
-	__kernel_long_t ru_majflt;
-	__kernel_long_t ru_nswap;
-	__kernel_long_t ru_inblock;
-	__kernel_long_t ru_oublock;
-	__kernel_long_t ru_msgsnd;
-	__kernel_long_t ru_msgrcv;
-	__kernel_long_t ru_nsignals;
-	__kernel_long_t ru_nvcsw;
-	__kernel_long_t ru_nivcsw;
+struct bsg_buffer {
+	unsigned int payload_len;
+	int sg_cnt;
+	struct scatterlist *sg_list;
 };
 
-typedef u32 compat_uint_t;
-
-struct compat_rusage {
-	struct old_timeval32 ru_utime;
-	struct old_timeval32 ru_stime;
-	compat_long_t ru_maxrss;
-	compat_long_t ru_ixrss;
-	compat_long_t ru_idrss;
-	compat_long_t ru_isrss;
-	compat_long_t ru_minflt;
-	compat_long_t ru_majflt;
-	compat_long_t ru_nswap;
-	compat_long_t ru_inblock;
-	compat_long_t ru_oublock;
-	compat_long_t ru_msgsnd;
-	compat_long_t ru_msgrcv;
-	compat_long_t ru_nsignals;
-	compat_long_t ru_nvcsw;
-	compat_long_t ru_nivcsw;
+struct bsg_job {
+	struct device *dev;
+	struct kref kref;
+	unsigned int timeout;
+	void *request;
+	void *reply;
+	unsigned int request_len;
+	unsigned int reply_len;
+	struct bsg_buffer request_payload;
+	struct bsg_buffer reply_payload;
+	int result;
+	unsigned int reply_payload_rcv_len;
+	struct request *bidi_rq;
+	struct bio *bidi_bio;
+	void *dd_data;
 };
 
-struct waitid_info {
-	pid_t pid;
-	uid_t uid;
-	int status;
-	int cause;
+enum sas_linkrate {
+	SAS_LINK_RATE_UNKNOWN = 0,
+	SAS_PHY_DISABLED = 1,
+	SAS_PHY_RESET_PROBLEM = 2,
+	SAS_SATA_SPINUP_HOLD = 3,
+	SAS_SATA_PORT_SELECTOR = 4,
+	SAS_PHY_RESET_IN_PROGRESS = 5,
+	SAS_LINK_RATE_1_5_GBPS = 8,
+	SAS_LINK_RATE_G1 = 8,
+	SAS_LINK_RATE_3_0_GBPS = 9,
+	SAS_LINK_RATE_G2 = 9,
+	SAS_LINK_RATE_6_0_GBPS = 10,
+	SAS_LINK_RATE_12_0_GBPS = 11,
+	SAS_LINK_RATE_22_5_GBPS = 12,
+	SAS_LINK_RATE_FAILED = 16,
+	SAS_PHY_VIRTUAL = 17,
 };
 
-struct wait_opts {
-	enum pid_type wo_type;
-	int wo_flags;
-	struct pid *wo_pid;
-	struct waitid_info *wo_info;
-	int wo_stat;
-	struct rusage *wo_rusage;
-	wait_queue_entry_t child_wait;
-	int notask_error;
+struct sas_identify {
+	enum sas_device_type device_type;
+	enum sas_protocol initiator_port_protocols;
+	enum sas_protocol target_port_protocols;
+	u64 sas_address;
+	u8 phy_identifier;
 };
 
-typedef struct {
-	unsigned int __softirq_pending;
+struct sas_phy {
+	struct device dev;
+	int number;
+	int enabled;
+	struct sas_identify identify;
+	enum sas_linkrate negotiated_linkrate;
+	enum sas_linkrate minimum_linkrate_hw;
+	enum sas_linkrate minimum_linkrate;
+	enum sas_linkrate maximum_linkrate_hw;
+	enum sas_linkrate maximum_linkrate;
+	u32 invalid_dword_count;
+	u32 running_disparity_error_count;
+	u32 loss_of_dword_sync_count;
+	u32 phy_reset_problem_count;
+	struct list_head port_siblings;
+	void *hostdata;
+};
+
+struct sas_rphy {
+	struct device dev;
+	struct sas_identify identify;
+	struct list_head list;
+	struct request_queue *q;
+	u32 scsi_target_id;
+};
+
+struct sas_port {
+	struct device dev;
+	int port_identifier;
+	int num_phys;
+	unsigned int is_backlink: 1;
+	struct sas_rphy *rphy;
+	struct mutex phy_list_mutex;
+	struct list_head phy_list;
+	struct list_head del_list;
+};
+
+struct sas_phy_linkrates {
+	enum sas_linkrate maximum_linkrate;
+	enum sas_linkrate minimum_linkrate;
+};
+
+struct sas_function_template {
+	int (*get_linkerrors)(struct sas_phy *);
+	int (*get_enclosure_identifier)(struct sas_rphy *, u64 *);
+	int (*get_bay_identifier)(struct sas_rphy *);
+	int (*phy_reset)(struct sas_phy *, int);
+	int (*phy_enable)(struct sas_phy *, int);
+	int (*phy_setup)(struct sas_phy *);
+	void (*phy_release)(struct sas_phy *);
+	int (*set_phy_speed)(struct sas_phy *, struct sas_phy_linkrates *);
+	void (*smp_handler)(struct bsg_job *, struct Scsi_Host *, struct sas_rphy *);
+};
+
+enum {
+	ATA_MAX_DEVICES = 2,
+	ATA_MAX_PRD = 256,
+	ATA_SECT_SIZE = 512,
+	ATA_MAX_SECTORS_128 = 128,
+	ATA_MAX_SECTORS = 256,
+	ATA_MAX_SECTORS_1024 = 1024,
+	ATA_MAX_SECTORS_LBA48 = 65535,
+	ATA_MAX_SECTORS_TAPE = 65535,
+	ATA_MAX_TRIM_RNUM = 64,
+	ATA_ID_WORDS = 256,
+	ATA_ID_CONFIG = 0,
+	ATA_ID_CYLS = 1,
+	ATA_ID_HEADS = 3,
+	ATA_ID_SECTORS = 6,
+	ATA_ID_SERNO = 10,
+	ATA_ID_BUF_SIZE = 21,
+	ATA_ID_FW_REV = 23,
+	ATA_ID_PROD = 27,
+	ATA_ID_MAX_MULTSECT = 47,
+	ATA_ID_DWORD_IO = 48,
+	ATA_ID_TRUSTED = 48,
+	ATA_ID_CAPABILITY = 49,
+	ATA_ID_OLD_PIO_MODES = 51,
+	ATA_ID_OLD_DMA_MODES = 52,
+	ATA_ID_FIELD_VALID = 53,
+	ATA_ID_CUR_CYLS = 54,
+	ATA_ID_CUR_HEADS = 55,
+	ATA_ID_CUR_SECTORS = 56,
+	ATA_ID_MULTSECT = 59,
+	ATA_ID_LBA_CAPACITY = 60,
+	ATA_ID_SWDMA_MODES = 62,
+	ATA_ID_MWDMA_MODES = 63,
+	ATA_ID_PIO_MODES = 64,
+	ATA_ID_EIDE_DMA_MIN = 65,
+	ATA_ID_EIDE_DMA_TIME = 66,
+	ATA_ID_EIDE_PIO = 67,
+	ATA_ID_EIDE_PIO_IORDY = 68,
+	ATA_ID_ADDITIONAL_SUPP = 69,
+	ATA_ID_QUEUE_DEPTH = 75,
+	ATA_ID_SATA_CAPABILITY = 76,
+	ATA_ID_SATA_CAPABILITY_2 = 77,
+	ATA_ID_FEATURE_SUPP = 78,
+	ATA_ID_MAJOR_VER = 80,
+	ATA_ID_COMMAND_SET_1 = 82,
+	ATA_ID_COMMAND_SET_2 = 83,
+	ATA_ID_CFSSE = 84,
+	ATA_ID_CFS_ENABLE_1 = 85,
+	ATA_ID_CFS_ENABLE_2 = 86,
+	ATA_ID_CSF_DEFAULT = 87,
+	ATA_ID_UDMA_MODES = 88,
+	ATA_ID_HW_CONFIG = 93,
+	ATA_ID_SPG = 98,
+	ATA_ID_LBA_CAPACITY_2 = 100,
+	ATA_ID_SECTOR_SIZE = 106,
+	ATA_ID_WWN = 108,
+	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+	ATA_ID_COMMAND_SET_3 = 119,
+	ATA_ID_COMMAND_SET_4 = 120,
+	ATA_ID_LAST_LUN = 126,
+	ATA_ID_DLF = 128,
+	ATA_ID_CSFO = 129,
+	ATA_ID_CFA_POWER = 160,
+	ATA_ID_CFA_KEY_MGMT = 162,
+	ATA_ID_CFA_MODES = 163,
+	ATA_ID_DATA_SET_MGMT = 169,
+	ATA_ID_SCT_CMD_XPORT = 206,
+	ATA_ID_ROT_SPEED = 217,
+	ATA_ID_PIO4 = 2,
+	ATA_ID_SERNO_LEN = 20,
+	ATA_ID_FW_REV_LEN = 8,
+	ATA_ID_PROD_LEN = 40,
+	ATA_ID_WWN_LEN = 8,
+	ATA_PCI_CTL_OFS = 2,
+	ATA_PIO0 = 1,
+	ATA_PIO1 = 3,
+	ATA_PIO2 = 7,
+	ATA_PIO3 = 15,
+	ATA_PIO4 = 31,
+	ATA_PIO5 = 63,
+	ATA_PIO6 = 127,
+	ATA_PIO4_ONLY = 16,
+	ATA_SWDMA0 = 1,
+	ATA_SWDMA1 = 3,
+	ATA_SWDMA2 = 7,
+	ATA_SWDMA2_ONLY = 4,
+	ATA_MWDMA0 = 1,
+	ATA_MWDMA1 = 3,
+	ATA_MWDMA2 = 7,
+	ATA_MWDMA3 = 15,
+	ATA_MWDMA4 = 31,
+	ATA_MWDMA12_ONLY = 6,
+	ATA_MWDMA2_ONLY = 4,
+	ATA_UDMA0 = 1,
+	ATA_UDMA1 = 3,
+	ATA_UDMA2 = 7,
+	ATA_UDMA3 = 15,
+	ATA_UDMA4 = 31,
+	ATA_UDMA5 = 63,
+	ATA_UDMA6 = 127,
+	ATA_UDMA7 = 255,
+	ATA_UDMA24_ONLY = 20,
+	ATA_UDMA_MASK_40C = 7,
+	ATA_PRD_SZ = 8,
+	ATA_PRD_TBL_SZ = 2048,
+	ATA_PRD_EOT = -2147483648,
+	ATA_DMA_TABLE_OFS = 4,
+	ATA_DMA_STATUS = 2,
+	ATA_DMA_CMD = 0,
+	ATA_DMA_WR = 8,
+	ATA_DMA_START = 1,
+	ATA_DMA_INTR = 4,
+	ATA_DMA_ERR = 2,
+	ATA_DMA_ACTIVE = 1,
+	ATA_HOB = 128,
+	ATA_NIEN = 2,
+	ATA_LBA = 64,
+	ATA_DEV1 = 16,
+	ATA_DEVICE_OBS = 160,
+	ATA_DEVCTL_OBS = 8,
+	ATA_BUSY = 128,
+	ATA_DRDY = 64,
+	ATA_DF = 32,
+	ATA_DSC = 16,
+	ATA_DRQ = 8,
+	ATA_CORR = 4,
+	ATA_SENSE = 2,
+	ATA_ERR = 1,
+	ATA_SRST = 4,
+	ATA_ICRC = 128,
+	ATA_BBK = 128,
+	ATA_UNC = 64,
+	ATA_MC = 32,
+	ATA_IDNF = 16,
+	ATA_MCR = 8,
+	ATA_ABORTED = 4,
+	ATA_TRK0NF = 2,
+	ATA_AMNF = 1,
+	ATAPI_LFS = 240,
+	ATAPI_EOM = 2,
+	ATAPI_ILI = 1,
+	ATAPI_IO = 2,
+	ATAPI_COD = 1,
+	ATA_REG_DATA = 0,
+	ATA_REG_ERR = 1,
+	ATA_REG_NSECT = 2,
+	ATA_REG_LBAL = 3,
+	ATA_REG_LBAM = 4,
+	ATA_REG_LBAH = 5,
+	ATA_REG_DEVICE = 6,
+	ATA_REG_STATUS = 7,
+	ATA_REG_FEATURE = 1,
+	ATA_REG_CMD = 7,
+	ATA_REG_BYTEL = 4,
+	ATA_REG_BYTEH = 5,
+	ATA_REG_DEVSEL = 6,
+	ATA_REG_IRQ = 2,
+	ATA_CMD_DEV_RESET = 8,
+	ATA_CMD_CHK_POWER = 229,
+	ATA_CMD_STANDBY = 226,
+	ATA_CMD_IDLE = 227,
+	ATA_CMD_EDD = 144,
+	ATA_CMD_DOWNLOAD_MICRO = 146,
+	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+	ATA_CMD_NOP = 0,
+	ATA_CMD_FLUSH = 231,
+	ATA_CMD_FLUSH_EXT = 234,
+	ATA_CMD_ID_ATA = 236,
+	ATA_CMD_ID_ATAPI = 161,
+	ATA_CMD_SERVICE = 162,
+	ATA_CMD_READ = 200,
+	ATA_CMD_READ_EXT = 37,
+	ATA_CMD_READ_QUEUED = 38,
+	ATA_CMD_READ_STREAM_EXT = 43,
+	ATA_CMD_READ_STREAM_DMA_EXT = 42,
+	ATA_CMD_WRITE = 202,
+	ATA_CMD_WRITE_EXT = 53,
+	ATA_CMD_WRITE_QUEUED = 54,
+	ATA_CMD_WRITE_STREAM_EXT = 59,
+	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+	ATA_CMD_WRITE_FUA_EXT = 61,
+	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+	ATA_CMD_FPDMA_READ = 96,
+	ATA_CMD_FPDMA_WRITE = 97,
+	ATA_CMD_NCQ_NON_DATA = 99,
+	ATA_CMD_FPDMA_SEND = 100,
+	ATA_CMD_FPDMA_RECV = 101,
+	ATA_CMD_PIO_READ = 32,
+	ATA_CMD_PIO_READ_EXT = 36,
+	ATA_CMD_PIO_WRITE = 48,
+	ATA_CMD_PIO_WRITE_EXT = 52,
+	ATA_CMD_READ_MULTI = 196,
+	ATA_CMD_READ_MULTI_EXT = 41,
+	ATA_CMD_WRITE_MULTI = 197,
+	ATA_CMD_WRITE_MULTI_EXT = 57,
+	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+	ATA_CMD_SET_FEATURES = 239,
+	ATA_CMD_SET_MULTI = 198,
+	ATA_CMD_PACKET = 160,
+	ATA_CMD_VERIFY = 64,
+	ATA_CMD_VERIFY_EXT = 66,
+	ATA_CMD_WRITE_UNCORR_EXT = 69,
+	ATA_CMD_STANDBYNOW1 = 224,
+	ATA_CMD_IDLEIMMEDIATE = 225,
+	ATA_CMD_SLEEP = 230,
+	ATA_CMD_INIT_DEV_PARAMS = 145,
+	ATA_CMD_READ_NATIVE_MAX = 248,
+	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+	ATA_CMD_SET_MAX = 249,
+	ATA_CMD_SET_MAX_EXT = 55,
+	ATA_CMD_READ_LOG_EXT = 47,
+	ATA_CMD_WRITE_LOG_EXT = 63,
+	ATA_CMD_READ_LOG_DMA_EXT = 71,
+	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+	ATA_CMD_TRUSTED_NONDATA = 91,
+	ATA_CMD_TRUSTED_RCV = 92,
+	ATA_CMD_TRUSTED_RCV_DMA = 93,
+	ATA_CMD_TRUSTED_SND = 94,
+	ATA_CMD_TRUSTED_SND_DMA = 95,
+	ATA_CMD_PMP_READ = 228,
+	ATA_CMD_PMP_READ_DMA = 233,
+	ATA_CMD_PMP_WRITE = 232,
+	ATA_CMD_PMP_WRITE_DMA = 235,
+	ATA_CMD_CONF_OVERLAY = 177,
+	ATA_CMD_SEC_SET_PASS = 241,
+	ATA_CMD_SEC_UNLOCK = 242,
+	ATA_CMD_SEC_ERASE_PREP = 243,
+	ATA_CMD_SEC_ERASE_UNIT = 244,
+	ATA_CMD_SEC_FREEZE_LOCK = 245,
+	ATA_CMD_SEC_DISABLE_PASS = 246,
+	ATA_CMD_CONFIG_STREAM = 81,
+	ATA_CMD_SMART = 176,
+	ATA_CMD_MEDIA_LOCK = 222,
+	ATA_CMD_MEDIA_UNLOCK = 223,
+	ATA_CMD_DSM = 6,
+	ATA_CMD_CHK_MED_CRD_TYP = 209,
+	ATA_CMD_CFA_REQ_EXT_ERR = 3,
+	ATA_CMD_CFA_WRITE_NE = 56,
+	ATA_CMD_CFA_TRANS_SECT = 135,
+	ATA_CMD_CFA_ERASE = 192,
+	ATA_CMD_CFA_WRITE_MULT_NE = 205,
+	ATA_CMD_REQ_SENSE_DATA = 11,
+	ATA_CMD_SANITIZE_DEVICE = 180,
+	ATA_CMD_ZAC_MGMT_IN = 74,
+	ATA_CMD_ZAC_MGMT_OUT = 159,
+	ATA_CMD_RESTORE = 16,
+	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+	ATA_LOG_DIRECTORY = 0,
+	ATA_LOG_SATA_NCQ = 16,
+	ATA_LOG_NCQ_NON_DATA = 18,
+	ATA_LOG_NCQ_SEND_RECV = 19,
+	ATA_LOG_IDENTIFY_DEVICE = 48,
+	ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+	ATA_LOG_SECURITY = 6,
+	ATA_LOG_SATA_SETTINGS = 8,
+	ATA_LOG_ZONED_INFORMATION = 9,
+	ATA_LOG_DEVSLP_OFFSET = 48,
+	ATA_LOG_DEVSLP_SIZE = 8,
+	ATA_LOG_DEVSLP_MDAT = 0,
+	ATA_LOG_DEVSLP_MDAT_MASK = 31,
+	ATA_LOG_DEVSLP_DETO = 1,
+	ATA_LOG_DEVSLP_VALID = 7,
+	ATA_LOG_DEVSLP_VALID_MASK = 128,
+	ATA_LOG_NCQ_PRIO_OFFSET = 9,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+	ATA_CMD_READ_LONG = 34,
+	ATA_CMD_READ_LONG_ONCE = 35,
+	ATA_CMD_WRITE_LONG = 50,
+	ATA_CMD_WRITE_LONG_ONCE = 51,
+	SETFEATURES_XFER = 3,
+	XFER_UDMA_7 = 71,
+	XFER_UDMA_6 = 70,
+	XFER_UDMA_5 = 69,
+	XFER_UDMA_4 = 68,
+	XFER_UDMA_3 = 67,
+	XFER_UDMA_2 = 66,
+	XFER_UDMA_1 = 65,
+	XFER_UDMA_0 = 64,
+	XFER_MW_DMA_4 = 36,
+	XFER_MW_DMA_3 = 35,
+	XFER_MW_DMA_2 = 34,
+	XFER_MW_DMA_1 = 33,
+	XFER_MW_DMA_0 = 32,
+	XFER_SW_DMA_2 = 18,
+	XFER_SW_DMA_1 = 17,
+	XFER_SW_DMA_0 = 16,
+	XFER_PIO_6 = 14,
+	XFER_PIO_5 = 13,
+	XFER_PIO_4 = 12,
+	XFER_PIO_3 = 11,
+	XFER_PIO_2 = 10,
+	XFER_PIO_1 = 9,
+	XFER_PIO_0 = 8,
+	XFER_PIO_SLOW = 0,
+	SETFEATURES_WC_ON = 2,
+	SETFEATURES_WC_OFF = 130,
+	SETFEATURES_RA_ON = 170,
+	SETFEATURES_RA_OFF = 85,
+	SETFEATURES_AAM_ON = 66,
+	SETFEATURES_AAM_OFF = 194,
+	SETFEATURES_SPINUP = 7,
+	SETFEATURES_SPINUP_TIMEOUT = 30000,
+	SETFEATURES_SATA_ENABLE = 16,
+	SETFEATURES_SATA_DISABLE = 144,
+	SATA_FPDMA_OFFSET = 1,
+	SATA_FPDMA_AA = 2,
+	SATA_DIPM = 3,
+	SATA_FPDMA_IN_ORDER = 4,
+	SATA_AN = 5,
+	SATA_SSP = 6,
+	SATA_DEVSLP = 9,
+	SETFEATURE_SENSE_DATA = 195,
+	ATA_SET_MAX_ADDR = 0,
+	ATA_SET_MAX_PASSWD = 1,
+	ATA_SET_MAX_LOCK = 2,
+	ATA_SET_MAX_UNLOCK = 3,
+	ATA_SET_MAX_FREEZE_LOCK = 4,
+	ATA_SET_MAX_PASSWD_DMA = 5,
+	ATA_SET_MAX_UNLOCK_DMA = 6,
+	ATA_DCO_RESTORE = 192,
+	ATA_DCO_FREEZE_LOCK = 193,
+	ATA_DCO_IDENTIFY = 194,
+	ATA_DCO_SET = 195,
+	ATA_SMART_ENABLE = 216,
+	ATA_SMART_READ_VALUES = 208,
+	ATA_SMART_READ_THRESHOLDS = 209,
+	ATA_DSM_TRIM = 1,
+	ATA_SMART_LBAM_PASS = 79,
+	ATA_SMART_LBAH_PASS = 194,
+	ATAPI_PKT_DMA = 1,
+	ATAPI_DMADIR = 4,
+	ATAPI_CDB_LEN = 16,
+	SATA_PMP_MAX_PORTS = 15,
+	SATA_PMP_CTRL_PORT = 15,
+	SATA_PMP_GSCR_DWORDS = 128,
+	SATA_PMP_GSCR_PROD_ID = 0,
+	SATA_PMP_GSCR_REV = 1,
+	SATA_PMP_GSCR_PORT_INFO = 2,
+	SATA_PMP_GSCR_ERROR = 32,
+	SATA_PMP_GSCR_ERROR_EN = 33,
+	SATA_PMP_GSCR_FEAT = 64,
+	SATA_PMP_GSCR_FEAT_EN = 96,
+	SATA_PMP_PSCR_STATUS = 0,
+	SATA_PMP_PSCR_ERROR = 1,
+	SATA_PMP_PSCR_CONTROL = 2,
+	SATA_PMP_FEAT_BIST = 1,
+	SATA_PMP_FEAT_PMREQ = 2,
+	SATA_PMP_FEAT_DYNSSC = 4,
+	SATA_PMP_FEAT_NOTIFY = 8,
+	ATA_CBL_NONE = 0,
+	ATA_CBL_PATA40 = 1,
+	ATA_CBL_PATA80 = 2,
+	ATA_CBL_PATA40_SHORT = 3,
+	ATA_CBL_PATA_UNK = 4,
+	ATA_CBL_PATA_IGN = 5,
+	ATA_CBL_SATA = 6,
+	SCR_STATUS = 0,
+	SCR_ERROR = 1,
+	SCR_CONTROL = 2,
+	SCR_ACTIVE = 3,
+	SCR_NOTIFICATION = 4,
+	SERR_DATA_RECOVERED = 1,
+	SERR_COMM_RECOVERED = 2,
+	SERR_DATA = 256,
+	SERR_PERSISTENT = 512,
+	SERR_PROTOCOL = 1024,
+	SERR_INTERNAL = 2048,
+	SERR_PHYRDY_CHG = 65536,
+	SERR_PHY_INT_ERR = 131072,
+	SERR_COMM_WAKE = 262144,
+	SERR_10B_8B_ERR = 524288,
+	SERR_DISPARITY = 1048576,
+	SERR_CRC = 2097152,
+	SERR_HANDSHAKE = 4194304,
+	SERR_LINK_SEQ_ERR = 8388608,
+	SERR_TRANS_ST_ERROR = 16777216,
+	SERR_UNRECOG_FIS = 33554432,
+	SERR_DEV_XCHG = 67108864,
+};
+
+struct ata_bmdma_prd {
+	__le32 addr;
+	__le32 flags_len;
+};
+
+struct cdrom_msf0 {
+	__u8 minute;
+	__u8 second;
+	__u8 frame;
+};
+
+union cdrom_addr {
+	struct cdrom_msf0 msf;
+	int lba;
+};
+
+struct cdrom_multisession {
+	union cdrom_addr addr;
+	__u8 xa_flag;
+	__u8 addr_format;
+};
+
+struct cdrom_mcn {
+	__u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct scsi_sense_hdr *sshdr;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	void *reserved[1];
+};
+
+struct cdrom_device_ops {
+	int (*open)(struct cdrom_device_info *, int);
+	void (*release)(struct cdrom_device_info *);
+	int (*drive_status)(struct cdrom_device_info *, int);
+	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+	int (*tray_move)(struct cdrom_device_info *, int);
+	int (*lock_door)(struct cdrom_device_info *, int);
+	int (*select_speed)(struct cdrom_device_info *, int);
+	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+	int (*reset)(struct cdrom_device_info *);
+	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+	int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+	const int capability;
+};
+
+enum {
+	LIBATA_MAX_PRD = 128,
+	LIBATA_DUMB_MAX_PRD = 64,
+	ATA_DEF_QUEUE = 1,
+	ATA_MAX_QUEUE = 32,
+	ATA_TAG_INTERNAL = 32,
+	ATA_SHORT_PAUSE = 16,
+	ATAPI_MAX_DRAIN = 16384,
+	ATA_ALL_DEVICES = 3,
+	ATA_SHT_EMULATED = 1,
+	ATA_SHT_THIS_ID = -1,
+	ATA_TFLAG_LBA48 = 1,
+	ATA_TFLAG_ISADDR = 2,
+	ATA_TFLAG_DEVICE = 4,
+	ATA_TFLAG_WRITE = 8,
+	ATA_TFLAG_LBA = 16,
+	ATA_TFLAG_FUA = 32,
+	ATA_TFLAG_POLLING = 64,
+	ATA_DFLAG_LBA = 1,
+	ATA_DFLAG_LBA48 = 2,
+	ATA_DFLAG_CDB_INTR = 4,
+	ATA_DFLAG_NCQ = 8,
+	ATA_DFLAG_FLUSH_EXT = 16,
+	ATA_DFLAG_ACPI_PENDING = 32,
+	ATA_DFLAG_ACPI_FAILED = 64,
+	ATA_DFLAG_AN = 128,
+	ATA_DFLAG_TRUSTED = 256,
+	ATA_DFLAG_DMADIR = 1024,
+	ATA_DFLAG_CFG_MASK = 4095,
+	ATA_DFLAG_PIO = 4096,
+	ATA_DFLAG_NCQ_OFF = 8192,
+	ATA_DFLAG_SLEEPING = 32768,
+	ATA_DFLAG_DUBIOUS_XFER = 65536,
+	ATA_DFLAG_NO_UNLOAD = 131072,
+	ATA_DFLAG_UNLOCK_HPA = 262144,
+	ATA_DFLAG_NCQ_SEND_RECV = 524288,
+	ATA_DFLAG_NCQ_PRIO = 1048576,
+	ATA_DFLAG_NCQ_PRIO_ENABLED = 2097152,
+	ATA_DFLAG_INIT_MASK = 16777215,
+	ATA_DFLAG_DETACH = 16777216,
+	ATA_DFLAG_DETACHED = 33554432,
+	ATA_DFLAG_DA = 67108864,
+	ATA_DFLAG_DEVSLP = 134217728,
+	ATA_DFLAG_ACPI_DISABLED = 268435456,
+	ATA_DFLAG_D_SENSE = 536870912,
+	ATA_DFLAG_ZAC = 1073741824,
+	ATA_DFLAG_FEATURES_MASK = 202899712,
+	ATA_DEV_UNKNOWN = 0,
+	ATA_DEV_ATA = 1,
+	ATA_DEV_ATA_UNSUP = 2,
+	ATA_DEV_ATAPI = 3,
+	ATA_DEV_ATAPI_UNSUP = 4,
+	ATA_DEV_PMP = 5,
+	ATA_DEV_PMP_UNSUP = 6,
+	ATA_DEV_SEMB = 7,
+	ATA_DEV_SEMB_UNSUP = 8,
+	ATA_DEV_ZAC = 9,
+	ATA_DEV_ZAC_UNSUP = 10,
+	ATA_DEV_NONE = 11,
+	ATA_LFLAG_NO_HRST = 2,
+	ATA_LFLAG_NO_SRST = 4,
+	ATA_LFLAG_ASSUME_ATA = 8,
+	ATA_LFLAG_ASSUME_SEMB = 16,
+	ATA_LFLAG_ASSUME_CLASS = 24,
+	ATA_LFLAG_NO_RETRY = 32,
+	ATA_LFLAG_DISABLED = 64,
+	ATA_LFLAG_SW_ACTIVITY = 128,
+	ATA_LFLAG_NO_LPM = 256,
+	ATA_LFLAG_RST_ONCE = 512,
+	ATA_LFLAG_CHANGED = 1024,
+	ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+	ATA_FLAG_SLAVE_POSS = 1,
+	ATA_FLAG_SATA = 2,
+	ATA_FLAG_NO_LPM = 4,
+	ATA_FLAG_NO_LOG_PAGE = 32,
+	ATA_FLAG_NO_ATAPI = 64,
+	ATA_FLAG_PIO_DMA = 128,
+	ATA_FLAG_PIO_LBA48 = 256,
+	ATA_FLAG_PIO_POLLING = 512,
+	ATA_FLAG_NCQ = 1024,
+	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+	ATA_FLAG_DEBUGMSG = 8192,
+	ATA_FLAG_FPDMA_AA = 16384,
+	ATA_FLAG_IGN_SIMPLEX = 32768,
+	ATA_FLAG_NO_IORDY = 65536,
+	ATA_FLAG_ACPI_SATA = 131072,
+	ATA_FLAG_AN = 262144,
+	ATA_FLAG_PMP = 524288,
+	ATA_FLAG_FPDMA_AUX = 1048576,
+	ATA_FLAG_EM = 2097152,
+	ATA_FLAG_SW_ACTIVITY = 4194304,
+	ATA_FLAG_NO_DIPM = 8388608,
+	ATA_FLAG_SAS_HOST = 16777216,
+	ATA_PFLAG_EH_PENDING = 1,
+	ATA_PFLAG_EH_IN_PROGRESS = 2,
+	ATA_PFLAG_FROZEN = 4,
+	ATA_PFLAG_RECOVERED = 8,
+	ATA_PFLAG_LOADING = 16,
+	ATA_PFLAG_SCSI_HOTPLUG = 64,
+	ATA_PFLAG_INITIALIZING = 128,
+	ATA_PFLAG_RESETTING = 256,
+	ATA_PFLAG_UNLOADING = 512,
+	ATA_PFLAG_UNLOADED = 1024,
+	ATA_PFLAG_SUSPENDED = 131072,
+	ATA_PFLAG_PM_PENDING = 262144,
+	ATA_PFLAG_INIT_GTM_VALID = 524288,
+	ATA_PFLAG_PIO32 = 1048576,
+	ATA_PFLAG_PIO32CHANGE = 2097152,
+	ATA_PFLAG_EXTERNAL = 4194304,
+	ATA_QCFLAG_ACTIVE = 1,
+	ATA_QCFLAG_DMAMAP = 2,
+	ATA_QCFLAG_IO = 8,
+	ATA_QCFLAG_RESULT_TF = 16,
+	ATA_QCFLAG_CLEAR_EXCL = 32,
+	ATA_QCFLAG_QUIET = 64,
+	ATA_QCFLAG_RETRY = 128,
+	ATA_QCFLAG_FAILED = 65536,
+	ATA_QCFLAG_SENSE_VALID = 131072,
+	ATA_QCFLAG_EH_SCHEDULED = 262144,
+	ATA_HOST_SIMPLEX = 1,
+	ATA_HOST_STARTED = 2,
+	ATA_HOST_PARALLEL_SCAN = 4,
+	ATA_HOST_IGNORE_ATA = 8,
+	ATA_TMOUT_BOOT = 30000,
+	ATA_TMOUT_BOOT_QUICK = 7000,
+	ATA_TMOUT_INTERNAL_QUICK = 5000,
+	ATA_TMOUT_MAX_PARK = 30000,
+	ATA_TMOUT_FF_WAIT_LONG = 2000,
+	ATA_TMOUT_FF_WAIT = 800,
+	ATA_WAIT_AFTER_RESET = 150,
+	ATA_TMOUT_PMP_SRST_WAIT = 5000,
+	ATA_TMOUT_SPURIOUS_PHY = 10000,
+	BUS_UNKNOWN = 0,
+	BUS_DMA = 1,
+	BUS_IDLE = 2,
+	BUS_NOINTR = 3,
+	BUS_NODATA = 4,
+	BUS_TIMER = 5,
+	BUS_PIO = 6,
+	BUS_EDD = 7,
+	BUS_IDENTIFY = 8,
+	BUS_PACKET = 9,
+	PORT_UNKNOWN = 0,
+	PORT_ENABLED = 1,
+	PORT_DISABLED = 2,
+	ATA_NR_PIO_MODES = 7,
+	ATA_NR_MWDMA_MODES = 5,
+	ATA_NR_UDMA_MODES = 8,
+	ATA_SHIFT_PIO = 0,
+	ATA_SHIFT_MWDMA = 7,
+	ATA_SHIFT_UDMA = 12,
+	ATA_SHIFT_PRIO = 6,
+	ATA_PRIO_HIGH = 2,
+	ATA_DMA_PAD_SZ = 4,
+	ATA_ERING_SIZE = 32,
+	ATA_DEFER_LINK = 1,
+	ATA_DEFER_PORT = 2,
+	ATA_EH_DESC_LEN = 80,
+	ATA_EH_REVALIDATE = 1,
+	ATA_EH_SOFTRESET = 2,
+	ATA_EH_HARDRESET = 4,
+	ATA_EH_RESET = 6,
+	ATA_EH_ENABLE_LINK = 8,
+	ATA_EH_PARK = 32,
+	ATA_EH_PERDEV_MASK = 33,
+	ATA_EH_ALL_ACTIONS = 15,
+	ATA_EHI_HOTPLUGGED = 1,
+	ATA_EHI_NO_AUTOPSY = 4,
+	ATA_EHI_QUIET = 8,
+	ATA_EHI_NO_RECOVERY = 16,
+	ATA_EHI_DID_SOFTRESET = 65536,
+	ATA_EHI_DID_HARDRESET = 131072,
+	ATA_EHI_PRINTINFO = 262144,
+	ATA_EHI_SETMODE = 524288,
+	ATA_EHI_POST_SETMODE = 1048576,
+	ATA_EHI_DID_RESET = 196608,
+	ATA_EHI_TO_SLAVE_MASK = 12,
+	ATA_EH_MAX_TRIES = 5,
+	ATA_LINK_RESUME_TRIES = 5,
+	ATA_PROBE_MAX_TRIES = 3,
+	ATA_EH_DEV_TRIES = 3,
+	ATA_EH_PMP_TRIES = 5,
+	ATA_EH_PMP_LINK_TRIES = 3,
+	SATA_PMP_RW_TIMEOUT = 3000,
+	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
+	ATA_HORKAGE_DIAGNOSTIC = 1,
+	ATA_HORKAGE_NODMA = 2,
+	ATA_HORKAGE_NONCQ = 4,
+	ATA_HORKAGE_MAX_SEC_128 = 8,
+	ATA_HORKAGE_BROKEN_HPA = 16,
+	ATA_HORKAGE_DISABLE = 32,
+	ATA_HORKAGE_HPA_SIZE = 64,
+	ATA_HORKAGE_IVB = 256,
+	ATA_HORKAGE_STUCK_ERR = 512,
+	ATA_HORKAGE_BRIDGE_OK = 1024,
+	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
+	ATA_HORKAGE_FIRMWARE_WARN = 4096,
+	ATA_HORKAGE_1_5_GBPS = 8192,
+	ATA_HORKAGE_NOSETXFER = 16384,
+	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
+	ATA_HORKAGE_DUMP_ID = 65536,
+	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
+	ATA_HORKAGE_ATAPI_DMADIR = 262144,
+	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
+	ATA_HORKAGE_NOLPM = 1048576,
+	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
+	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
+	ATA_HORKAGE_NO_DMA_LOG = 8388608,
+	ATA_HORKAGE_NOTRIM = 16777216,
+	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
+	ATA_HORKAGE_MAX_TRIM_128M = 67108864,
+	ATA_HORKAGE_NO_NCQ_ON_ATI = 134217728,
+	ATA_HORKAGE_NO_ID_DEV_LOG = 268435456,
+	ATA_HORKAGE_NO_LOG_DIR = 536870912,
+	ATA_DMA_MASK_ATA = 1,
+	ATA_DMA_MASK_ATAPI = 2,
+	ATA_DMA_MASK_CFA = 4,
+	ATAPI_READ = 0,
+	ATAPI_WRITE = 1,
+	ATAPI_READ_CD = 2,
+	ATAPI_PASS_THRU = 3,
+	ATAPI_MISC = 4,
+	ATA_TIMING_SETUP = 1,
+	ATA_TIMING_ACT8B = 2,
+	ATA_TIMING_REC8B = 4,
+	ATA_TIMING_CYC8B = 8,
+	ATA_TIMING_8BIT = 14,
+	ATA_TIMING_ACTIVE = 16,
+	ATA_TIMING_RECOVER = 32,
+	ATA_TIMING_DMACK_HOLD = 64,
+	ATA_TIMING_CYCLE = 128,
+	ATA_TIMING_UDMA = 256,
+	ATA_TIMING_ALL = 511,
+	ATA_ACPI_FILTER_SETXFER = 1,
+	ATA_ACPI_FILTER_LOCK = 2,
+	ATA_ACPI_FILTER_DIPM = 4,
+	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+	ATA_ACPI_FILTER_FPDMA_AA = 16,
+	ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum ata_completion_errors {
+	AC_ERR_OK = 0,
+	AC_ERR_DEV = 1,
+	AC_ERR_HSM = 2,
+	AC_ERR_TIMEOUT = 4,
+	AC_ERR_MEDIA = 8,
+	AC_ERR_ATA_BUS = 16,
+	AC_ERR_HOST_BUS = 32,
+	AC_ERR_SYSTEM = 64,
+	AC_ERR_INVALID = 128,
+	AC_ERR_OTHER = 256,
+	AC_ERR_NODEV_HINT = 512,
+	AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+	ATA_LPM_UNKNOWN = 0,
+	ATA_LPM_MAX_POWER = 1,
+	ATA_LPM_MED_POWER = 2,
+	ATA_LPM_MED_POWER_WITH_DIPM = 3,
+	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+	ATA_LPM_MIN_POWER = 5,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
+	long unsigned int flags;
+	u8 protocol;
+	u8 ctl;
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+	union {
+		u8 error;
+		u8 feature;
+	};
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	union {
+		u8 status;
+		u8 command;
+	};
+	u32 auxiliary;
+};
+
+struct ata_port;
+
+struct ata_device;
+
+struct ata_queued_cmd {
+	struct ata_port *ap;
+	struct ata_device *dev;
+	struct scsi_cmnd *scsicmd;
+	void (*scsidone)(struct scsi_cmnd *);
+	struct ata_taskfile tf;
+	u8 cdb[16];
+	long unsigned int flags;
+	unsigned int tag;
+	unsigned int hw_tag;
+	unsigned int n_elem;
+	unsigned int orig_n_elem;
+	int dma_dir;
+	unsigned int sect_size;
+	unsigned int nbytes;
+	unsigned int extrabytes;
+	unsigned int curbytes;
+	struct scatterlist sgent;
+	struct scatterlist *sg;
+	struct scatterlist *cursg;
+	unsigned int cursg_ofs;
+	unsigned int err_mask;
+	struct ata_taskfile result_tf;
+	ata_qc_cb_t complete_fn;
+	void *private_data;
+	void *lldd_task;
+};
+
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+	struct ata_device *dev;
+	u32 serror;
+	unsigned int err_mask;
+	unsigned int action;
+	unsigned int dev_action[2];
+	unsigned int flags;
+	unsigned int probe_mask;
+	char desc[80];
+	int desc_len;
+};
+
+struct ata_eh_context {
+	struct ata_eh_info i;
+	int tries[2];
+	int cmd_timeout_idx[14];
+	unsigned int classes[2];
+	unsigned int did_probe_mask;
+	unsigned int unloaded_mask;
+	unsigned int saved_ncq_enabled;
+	u8 saved_xfer_mode[2];
+	long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+	unsigned int eflags;
+	unsigned int err_mask;
+	u64 timestamp;
+};
+
+struct ata_ering {
+	int cursor;
+	struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_device {
+	struct ata_link *link;
+	unsigned int devno;
+	unsigned int horkage;
+	long unsigned int flags;
+	struct scsi_device *sdev;
+	void *private_data;
+	union acpi_object *gtf_cache;
+	unsigned int gtf_filter;
+	struct device tdev;
+	u64 n_sectors;
+	u64 n_native_sectors;
+	unsigned int class;
+	long unsigned int unpark_deadline;
+	u8 pio_mode;
+	u8 dma_mode;
+	u8 xfer_mode;
+	unsigned int xfer_shift;
+	unsigned int multi_count;
+	unsigned int max_sectors;
+	unsigned int cdb_len;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	u16 cylinders;
+	u16 heads;
+	u16 sectors;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		u16 id[256];
+		u32 gscr[128];
+	};
+	u8 devslp_timing[8];
+	u8 ncq_send_recv_cmds[20];
+	u8 ncq_non_data_cmds[64];
+	u32 zac_zoned_cap;
+	u32 zac_zones_optimal_open;
+	u32 zac_zones_optimal_nonseq;
+	u32 zac_zones_max_open;
+	struct ata_cpr_log *cpr_log;
+	int spdn_cnt;
+	struct ata_ering ering;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ata_link {
+	struct ata_port *ap;
+	int pmp;
+	struct device tdev;
+	unsigned int active_tag;
+	u32 sactive;
+	unsigned int flags;
+	u32 saved_scontrol;
+	unsigned int hw_sata_spd_limit;
+	unsigned int sata_spd_limit;
+	unsigned int sata_spd;
+	enum ata_lpm_policy lpm_policy;
+	struct ata_eh_info eh_info;
+	struct ata_eh_context eh_context;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_device device[2];
+	long unsigned int last_lpm_change;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+	OFF = 0,
+	BLINK_ON = 1,
+	BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+	void *cmd_addr;
+	void *data_addr;
+	void *error_addr;
+	void *feature_addr;
+	void *nsect_addr;
+	void *lbal_addr;
+	void *lbam_addr;
+	void *lbah_addr;
+	void *device_addr;
+	void *status_addr;
+	void *command_addr;
+	void *altstatus_addr;
+	void *ctl_addr;
+	void *bmdma_addr;
+	void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+	spinlock_t lock;
+	struct device *dev;
+	void * const *iomap;
+	unsigned int n_ports;
+	unsigned int n_tags;
+	void *private_data;
+	struct ata_port_operations *ops;
+	long unsigned int flags;
+	struct kref kref;
+	struct mutex eh_mutex;
+	struct task_struct *eh_owner;
+	struct ata_port *simplex_claimed;
+	struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+	int (*qc_defer)(struct ata_queued_cmd *);
+	int (*check_atapi_dma)(struct ata_queued_cmd *);
+	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+	unsigned int (*qc_issue)(struct ata_queued_cmd *);
+	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
+	int (*cable_detect)(struct ata_port *);
+	unsigned int (*mode_filter)(struct ata_device *, unsigned int);
+	void (*set_piomode)(struct ata_port *, struct ata_device *);
+	void (*set_dmamode)(struct ata_port *, struct ata_device *);
+	int (*set_mode)(struct ata_link *, struct ata_device **);
+	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+	void (*dev_config)(struct ata_device *);
+	void (*freeze)(struct ata_port *);
+	void (*thaw)(struct ata_port *);
+	ata_prereset_fn_t prereset;
+	ata_reset_fn_t softreset;
+	ata_reset_fn_t hardreset;
+	ata_postreset_fn_t postreset;
+	ata_prereset_fn_t pmp_prereset;
+	ata_reset_fn_t pmp_softreset;
+	ata_reset_fn_t pmp_hardreset;
+	ata_postreset_fn_t pmp_postreset;
+	void (*error_handler)(struct ata_port *);
+	void (*lost_interrupt)(struct ata_port *);
+	void (*post_internal_cmd)(struct ata_queued_cmd *);
+	void (*sched_eh)(struct ata_port *);
+	void (*end_eh)(struct ata_port *);
+	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+	int (*scr_write)(struct ata_link *, unsigned int, u32);
+	void (*pmp_attach)(struct ata_port *);
+	void (*pmp_detach)(struct ata_port *);
+	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+	int (*port_suspend)(struct ata_port *, pm_message_t);
+	int (*port_resume)(struct ata_port *);
+	int (*port_start)(struct ata_port *);
+	void (*port_stop)(struct ata_port *);
+	void (*host_stop)(struct ata_host *);
+	void (*sff_dev_select)(struct ata_port *, unsigned int);
+	void (*sff_set_devctl)(struct ata_port *, u8);
+	u8 (*sff_check_status)(struct ata_port *);
+	u8 (*sff_check_altstatus)(struct ata_port *);
+	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+	void (*sff_irq_on)(struct ata_port *);
+	bool (*sff_irq_check)(struct ata_port *);
+	void (*sff_irq_clear)(struct ata_port *);
+	void (*sff_drain_fifo)(struct ata_queued_cmd *);
+	void (*bmdma_setup)(struct ata_queued_cmd *);
+	void (*bmdma_start)(struct ata_queued_cmd *);
+	void (*bmdma_stop)(struct ata_queued_cmd *);
+	u8 (*bmdma_status)(struct ata_port *);
+	ssize_t (*em_show)(struct ata_port *, char *);
+	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+	ssize_t (*sw_activity_show)(struct ata_device *, char *);
+	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+	void (*phy_reset)(struct ata_port *);
+	void (*eng_timeout)(struct ata_port *);
+	const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+	long unsigned int unhandled_irq;
+	long unsigned int idle_irq;
+	long unsigned int rw_reqbuf;
+};
+
+struct ata_acpi_drive {
+	u32 pio;
+	u32 dma;
+};
+
+struct ata_acpi_gtm {
+	struct ata_acpi_drive drive[2];
+	u32 flags;
+};
+
+struct ata_port {
+	struct Scsi_Host *scsi_host;
+	struct ata_port_operations *ops;
+	spinlock_t *lock;
+	long unsigned int flags;
+	unsigned int pflags;
+	unsigned int print_id;
+	unsigned int local_port_no;
+	unsigned int port_no;
+	struct ata_ioports ioaddr;
+	u8 ctl;
+	u8 last_ctl;
+	struct ata_link *sff_pio_task_link;
+	struct delayed_work sff_pio_task;
+	struct ata_bmdma_prd *bmdma_prd;
+	dma_addr_t bmdma_prd_dma;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	unsigned int cbl;
+	struct ata_queued_cmd qcmd[33];
+	u64 qc_active;
+	int nr_active_links;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_link link;
+	struct ata_link *slave_link;
+	int nr_pmp_links;
+	struct ata_link *pmp_link;
+	struct ata_link *excl_link;
+	struct ata_port_stats stats;
+	struct ata_host *host;
+	struct device *dev;
+	struct device tdev;
+	struct mutex scsi_scan_mutex;
+	struct delayed_work hotplug_task;
+	struct work_struct scsi_rescan_task;
+	unsigned int hsm_task_state;
+	struct list_head eh_done_q;
+	wait_queue_head_t eh_wait_q;
+	int eh_tries;
+	struct completion park_req_pending;
+	pm_message_t pm_mesg;
+	enum ata_lpm_policy target_lpm_policy;
+	struct timer_list fastdrain_timer;
+	unsigned int fastdrain_cnt;
+	async_cookie_t cookie;
+	int em_message_type;
+	void *private_data;
+	struct ata_acpi_gtm __acpi_init_gtm;
+	int: 32;
+	u8 sector_buf[512];
+};
+
+struct ata_cpr {
+	u8 num;
+	u8 num_storage_elements;
+	u64 start_lba;
+	u64 num_lbas;
+};
+
+struct ata_cpr_log {
+	u8 nr_cpr;
+	struct ata_cpr cpr[0];
+};
+
+enum sas_class {
+	SAS = 0,
+	EXPANDER = 1,
+};
+
+enum sas_phy_role {
+	PHY_ROLE_NONE = 0,
+	PHY_ROLE_TARGET = 64,
+	PHY_ROLE_INITIATOR = 128,
+};
+
+enum sas_phy_type {
+	PHY_TYPE_PHYSICAL = 0,
+	PHY_TYPE_VIRTUAL = 1,
+};
+
+enum port_event {
+	PORTE_BYTES_DMAED = 0,
+	PORTE_BROADCAST_RCVD = 1,
+	PORTE_LINK_RESET_ERR = 2,
+	PORTE_TIMER_EVENT = 3,
+	PORTE_HARD_RESET = 4,
+	PORT_NUM_EVENTS = 5,
+};
+
+enum phy_event {
+	PHYE_LOSS_OF_SIGNAL = 0,
+	PHYE_OOB_DONE = 1,
+	PHYE_OOB_ERROR = 2,
+	PHYE_SPINUP_HOLD = 3,
+	PHYE_RESUME_TIMEOUT = 4,
+	PHYE_SHUTDOWN = 5,
+	PHY_NUM_EVENTS = 6,
+};
+
+enum discover_event {
+	DISCE_DISCOVER_DOMAIN = 0,
+	DISCE_REVALIDATE_DOMAIN = 1,
+	DISCE_SUSPEND = 2,
+	DISCE_RESUME = 3,
+	DISC_NUM_EVENTS = 4,
+};
+
+enum routing_attribute {
+	DIRECT_ROUTING = 0,
+	SUBTRACTIVE_ROUTING = 1,
+	TABLE_ROUTING = 2,
+};
+
+enum ex_phy_state {
+	PHY_EMPTY = 0,
+	PHY_VACANT = 1,
+	PHY_NOT_PRESENT = 2,
+	PHY_DEVICE_DISCOVERED = 3,
+};
+
+struct ex_phy {
+	int phy_id;
+	enum ex_phy_state phy_state;
+	enum sas_device_type attached_dev_type;
+	enum sas_linkrate linkrate;
+	u8 attached_sata_host: 1;
+	u8 attached_sata_dev: 1;
+	u8 attached_sata_ps: 1;
+	enum sas_protocol attached_tproto;
+	enum sas_protocol attached_iproto;
+	u8 attached_sas_addr[8];
+	u8 attached_phy_id;
+	int phy_change_count;
+	enum routing_attribute routing_attr;
+	u8 virtual: 1;
+	int last_da_index;
+	struct sas_phy *phy;
+	struct sas_port *port;
+};
+
+struct expander_device {
+	struct list_head children;
+	int ex_change_count;
+	u16 max_route_indexes;
+	u8 num_phys;
+	u8 t2t_supp: 1;
+	u8 configuring: 1;
+	u8 conf_route_table: 1;
+	u8 enclosure_logical_id[8];
+	struct ex_phy *ex_phy;
+	struct sas_port *parent_port;
+	struct mutex cmd_mutex;
+};
+
+struct sata_device {
+	unsigned int class;
+	u8 port_no;
+	struct ata_port *ap;
+	struct ata_host *ata_host;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct smp_rps_resp rps_resp;
+	u8 fis[24];
 	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	long: 64;
-} irq_cpustat_t;
+};
 
-struct softirq_action {
-	void (*action)(struct softirq_action *);
+struct ssp_device {
+	struct list_head eh_list_node;
+	struct scsi_lun reset_lun;
+};
+
+struct asd_sas_port;
+
+struct domain_device {
+	spinlock_t done_lock;
+	enum sas_device_type dev_type;
+	enum sas_linkrate linkrate;
+	enum sas_linkrate min_linkrate;
+	enum sas_linkrate max_linkrate;
+	int pathways;
+	struct domain_device *parent;
+	struct list_head siblings;
+	struct asd_sas_port *port;
+	struct sas_phy *phy;
+	struct list_head dev_list_node;
+	struct list_head disco_list_node;
+	enum sas_protocol iproto;
+	enum sas_protocol tproto;
+	struct sas_rphy *rphy;
+	u8 sas_addr[8];
+	u8 hashed_sas_addr[3];
+	u8 frame_rcvd[32];
+	long: 40;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct expander_device ex_dev;
+		struct sata_device sata_dev;
+		struct ssp_device ssp_dev;
+	};
+	void *lldd_dev;
+	long unsigned int state;
+	struct kref kref;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sas_work {
+	struct list_head drain_node;
+	struct work_struct work;
+};
+
+struct sas_discovery_event {
+	struct sas_work work;
+	struct asd_sas_port *port;
+};
+
+struct sas_discovery {
+	struct sas_discovery_event disc_work[4];
+	long unsigned int pending;
+	u8 fanout_sas_addr[8];
+	u8 eeds_a[8];
+	u8 eeds_b[8];
+	int max_level;
+};
+
+struct sas_ha_struct;
+
+struct asd_sas_port {
+	struct sas_discovery disc;
+	struct domain_device *port_dev;
+	spinlock_t dev_list_lock;
+	struct list_head dev_list;
+	struct list_head disco_list;
+	struct list_head destroy_list;
+	struct list_head sas_port_del_list;
+	enum sas_linkrate linkrate;
+	struct sas_work work;
+	int suspended;
+	int id;
+	enum sas_class class;
+	u8 sas_addr[8];
+	u8 attached_sas_addr[8];
+	enum sas_protocol iproto;
+	enum sas_protocol tproto;
+	enum sas_oob_mode oob_mode;
+	spinlock_t phy_list_lock;
+	struct list_head phy_list;
+	int num_phys;
+	u32 phy_mask;
+	struct sas_ha_struct *ha;
+	struct sas_port *port;
+	void *lldd_port;
+};
+
+struct scsi_core {
+	struct Scsi_Host *shost;
+};
+
+struct asd_sas_phy;
+
+struct sas_ha_struct {
+	struct list_head defer_q;
+	struct mutex drain_mutex;
+	long unsigned int state;
+	spinlock_t lock;
+	int eh_active;
+	wait_queue_head_t eh_wait_q;
+	struct list_head eh_dev_q;
+	struct mutex disco_mutex;
+	struct scsi_core core;
+	char *sas_ha_name;
+	struct device *dev;
+	struct module *lldd_module;
+	struct workqueue_struct *event_q;
+	struct workqueue_struct *disco_q;
+	u8 *sas_addr;
+	u8 hashed_sas_addr[3];
+	spinlock_t phy_port_lock;
+	struct asd_sas_phy **sas_phy;
+	struct asd_sas_port **sas_port;
+	int num_phys;
+	int strict_wide_ports;
+	void *lldd_ha;
+	struct list_head eh_done_q;
+	struct list_head eh_ata_q;
+	int event_thres;
+};
+
+struct asd_sas_event {
+	struct sas_work work;
+	struct asd_sas_phy *phy;
+	int event;
+};
+
+struct asd_sas_phy {
+	atomic_t event_nr;
+	int in_shutdown;
+	int error;
+	int suspended;
+	struct sas_phy *phy;
+	int enabled;
+	int id;
+	enum sas_class class;
+	enum sas_protocol iproto;
+	enum sas_protocol tproto;
+	enum sas_phy_type type;
+	enum sas_phy_role role;
+	enum sas_oob_mode oob_mode;
+	enum sas_linkrate linkrate;
+	u8 *sas_addr;
+	u8 attached_sas_addr[8];
+	spinlock_t frame_rcvd_lock;
+	u8 *frame_rcvd;
+	int frame_rcvd_size;
+	spinlock_t sas_prim_lock;
+	u32 sas_prim;
+	struct list_head port_phy_el;
+	struct asd_sas_port *port;
+	struct sas_ha_struct *ha;
+	void *lldd_phy;
+};
+
+enum service_response {
+	SAS_TASK_COMPLETE = 0,
+	SAS_TASK_UNDELIVERED = -1,
+};
+
+enum exec_status {
+	SAS_SAM_STAT_GOOD = 0,
+	SAS_SAM_STAT_BUSY = 8,
+	SAS_SAM_STAT_TASK_ABORTED = 64,
+	SAS_SAM_STAT_CHECK_CONDITION = 2,
+	SAS_DEV_NO_RESPONSE = 128,
+	SAS_DATA_UNDERRUN = 129,
+	SAS_DATA_OVERRUN = 130,
+	SAS_INTERRUPTED = 131,
+	SAS_QUEUE_FULL = 132,
+	SAS_DEVICE_UNKNOWN = 133,
+	SAS_OPEN_REJECT = 134,
+	SAS_OPEN_TO = 135,
+	SAS_PROTO_RESPONSE = 136,
+	SAS_PHY_DOWN = 137,
+	SAS_NAK_R_ERR = 138,
+	SAS_PENDING = 139,
+	SAS_ABORTED_TASK = 140,
+};
+
+struct task_status_struct {
+	enum service_response resp;
+	enum exec_status stat;
+	int buf_valid_size;
+	u8 buf[96];
+	u32 residual;
+	enum sas_open_rej_reason open_rej_reason;
+};
+
+struct sas_ata_task {
+	struct host_to_dev_fis fis;
+	u8 atapi_packet[16];
+	u8 retry_count;
+	u8 dma_xfer: 1;
+	u8 use_ncq: 1;
+	u8 set_affil_pol: 1;
+	u8 stp_affil_pol: 1;
+	u8 device_control_reg_update: 1;
+	bool force_phy;
+	int force_phy_id;
+};
+
+enum sas_internal_abort {
+	SAS_INTERNAL_ABORT_SINGLE = 0,
+	SAS_INTERNAL_ABORT_DEV = 1,
+};
+
+struct sas_internal_abort_task {
+	enum sas_internal_abort type;
+	unsigned int qid;
+	u16 tag;
+};
+
+struct sas_smp_task {
+	struct scatterlist smp_req;
+	struct scatterlist smp_resp;
+};
+
+enum task_attribute {
+	TASK_ATTR_SIMPLE = 0,
+	TASK_ATTR_HOQ = 1,
+	TASK_ATTR_ORDERED = 2,
+	TASK_ATTR_ACA = 4,
+};
+
+struct sas_ssp_task {
+	u8 retry_count;
+	u8 LUN[8];
+	u8 enable_first_burst: 1;
+	enum task_attribute task_attr;
+	u8 task_prio;
+	struct scsi_cmnd *cmd;
+};
+
+struct sas_tmf_task {
+	u8 tmf;
+	u16 tag_of_task_to_be_managed;
+};
+
+struct sas_task_slow;
+
+struct sas_task {
+	struct domain_device *dev;
+	spinlock_t task_state_lock;
+	unsigned int task_state_flags;
+	enum sas_protocol task_proto;
+	union {
+		struct sas_ata_task ata_task;
+		struct sas_smp_task smp_task;
+		struct sas_ssp_task ssp_task;
+		struct sas_internal_abort_task abort_task;
+	};
+	struct scatterlist *scatter;
+	int num_scatter;
+	u32 total_xfer_len;
+	u8 data_dir: 2;
+	struct task_status_struct task_status;
+	void (*task_done)(struct sas_task *);
+	void *lldd_task;
+	void *uldd_task;
+	struct sas_task_slow *slow_task;
+	struct sas_tmf_task *tmf;
+};
+
+struct sas_task_slow {
+	struct timer_list timer;
+	struct completion completion;
+	struct sas_task *task;
+};
+
+struct sas_domain_function_template {
+	void (*lldd_port_formed)(struct asd_sas_phy *);
+	void (*lldd_port_deformed)(struct asd_sas_phy *);
+	int (*lldd_dev_found)(struct domain_device *);
+	void (*lldd_dev_gone)(struct domain_device *);
+	int (*lldd_execute_task)(struct sas_task *, gfp_t);
+	int (*lldd_abort_task)(struct sas_task *);
+	int (*lldd_abort_task_set)(struct domain_device *, u8 *);
+	int (*lldd_clear_task_set)(struct domain_device *, u8 *);
+	int (*lldd_I_T_nexus_reset)(struct domain_device *);
+	int (*lldd_ata_check_ready)(struct domain_device *);
+	void (*lldd_ata_set_dmamode)(struct domain_device *);
+	int (*lldd_lu_reset)(struct domain_device *, u8 *);
+	int (*lldd_query_task)(struct sas_task *);
+	void (*lldd_tmf_exec_complete)(struct domain_device *);
+	void (*lldd_tmf_aborted)(struct sas_task *);
+	bool (*lldd_abort_timeout)(struct sas_task *, void *);
+	int (*lldd_clear_nexus_port)(struct asd_sas_port *);
+	int (*lldd_clear_nexus_ha)(struct sas_ha_struct *);
+	int (*lldd_control_phy)(struct asd_sas_phy *, enum phy_func, void *);
+	int (*lldd_write_gpio)(struct sas_ha_struct *, u8, u8, u8, u8 *);
+};
+
+struct sas_internal {
+	struct scsi_transport_template t;
+	struct sas_function_template *f;
+	struct sas_domain_function_template *dft;
+	struct device_attribute private_host_attrs[0];
+	struct device_attribute private_phy_attrs[17];
+	struct device_attribute private_port_attrs[1];
+	struct device_attribute private_rphy_attrs[8];
+	struct device_attribute private_end_dev_attrs[5];
+	struct device_attribute private_expander_attrs[7];
+	struct transport_container phy_attr_cont;
+	struct transport_container port_attr_cont;
+	struct transport_container rphy_attr_cont;
+	struct transport_container end_dev_attr_cont;
+	struct transport_container expander_attr_cont;
+	struct device_attribute *host_attrs[1];
+	struct device_attribute *phy_attrs[18];
+	struct device_attribute *port_attrs[2];
+	struct device_attribute *rphy_attrs[9];
+	struct device_attribute *end_dev_attrs[6];
+	struct device_attribute *expander_attrs[8];
+};
+
+struct report_general_resp {
+	__be16 change_count;
+	__be16 route_indexes;
+	u8 _r_a;
+	u8 num_phys;
+	u8 conf_route_table: 1;
+	u8 configuring: 1;
+	u8 config_others: 1;
+	u8 orej_retry_supp: 1;
+	u8 stp_cont_awt: 1;
+	u8 self_config: 1;
+	u8 zone_config: 1;
+	u8 t2t_supp: 1;
+	u8 _r_c;
+	u8 enclosure_logical_id[8];
+	u8 _r_d[12];
+};
+
+struct discover_resp {
+	u8 _r_a[5];
+	u8 phy_id;
+	__be16 _r_b;
+	u8 _r_c: 4;
+	u8 attached_dev_type: 3;
+	u8 _r_d: 1;
+	u8 linkrate: 4;
+	u8 _r_e: 4;
+	u8 attached_sata_host: 1;
+	u8 iproto: 3;
+	u8 _r_f: 4;
+	u8 attached_sata_dev: 1;
+	u8 tproto: 3;
+	u8 _r_g: 3;
+	u8 attached_sata_ps: 1;
+	u8 sas_addr[8];
+	u8 attached_sas_addr[8];
+	u8 attached_phy_id;
+	u8 _r_h[7];
+	u8 hmin_linkrate: 4;
+	u8 pmin_linkrate: 4;
+	u8 hmax_linkrate: 4;
+	u8 pmax_linkrate: 4;
+	u8 change_count;
+	u8 pptv: 4;
+	u8 _r_i: 3;
+	u8 virtual: 1;
+	u8 routing_attr: 4;
+	u8 _r_j: 4;
+	u8 conn_type;
+	u8 conn_el_index;
+	u8 conn_phy_link;
+	u8 _r_k[8];
+};
+
+struct smp_rg_resp {
+	u8 frame_type;
+	u8 function;
+	u8 result;
+	u8 reserved;
+	struct report_general_resp rg;
+};
+
+struct smp_disc_resp {
+	u8 frame_type;
+	u8 function;
+	u8 result;
+	u8 reserved;
+	struct discover_resp disc;
+};
+
+struct sas_expander_device {
+	int level;
+	int next_port_id;
+	char vendor_id[9];
+	char product_id[17];
+	char product_rev[5];
+	char component_vendor_id[9];
+	u16 component_id;
+	u8 component_revision_id;
+	struct sas_rphy rphy;
+};
+
+enum {
+	SAS_DEV_GONE = 0,
+	SAS_DEV_FOUND = 1,
+	SAS_DEV_DESTROY = 2,
+	SAS_DEV_EH_PENDING = 3,
+	SAS_DEV_LU_RESET = 4,
+	SAS_DEV_RESET = 5,
+};
+
+enum sas_ha_state {
+	SAS_HA_REGISTERED = 0,
+	SAS_HA_DRAINING = 1,
+	SAS_HA_ATA_EH_ACTIVE = 2,
+	SAS_HA_FROZEN = 3,
+	SAS_HA_RESUMING = 4,
+};
+
+typedef s8 int8_t;
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
 };
 
 struct tasklet_struct {
@@ -21018,9 +45652,26028 @@
 	TASKLET_STATE_RUN = 1,
 };
 
-struct kernel_stat {
-	long unsigned int irqs_sum;
-	unsigned int softirqs[10];
+typedef u32 compat_size_t;
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+struct RAID_CONTEXT {
+	u8 type: 4;
+	u8 nseg: 4;
+	u8 resvd0;
+	__le16 timeout_value;
+	u8 reg_lock_flags;
+	u8 resvd1;
+	__le16 virtual_disk_tgt_id;
+	__le64 reg_lock_row_lba;
+	__le32 reg_lock_length;
+	__le16 next_lmid;
+	u8 ex_status;
+	u8 status;
+	u8 raid_flags;
+	u8 num_sge;
+	__le16 config_seq_num;
+	u8 span_arm;
+	u8 priority;
+	u8 num_sge_ext;
+	u8 resvd2;
+};
+
+struct RAID_CONTEXT_G35 {
+	u16 nseg_type;
+	u16 timeout_value;
+	u16 routing_flags;
+	u16 virtual_disk_tgt_id;
+	__le64 reg_lock_row_lba;
+	u32 reg_lock_length;
+	union {
+		u16 rmw_op_index;
+		u16 peer_smid;
+		u16 r56_arm_map;
+	} flow_specific;
+	u8 ex_status;
+	u8 status;
+	u8 raid_flags;
+	u8 span_arm;
+	u16 config_seq_num;
+	union {
+		struct {
+			u16 num_sge: 12;
+			u16 reserved: 3;
+			u16 stream_detected: 1;
+		} bits;
+		u8 bytes[2];
+	} u;
+	u8 resvd2[2];
+};
+
+union RAID_CONTEXT_UNION {
+	struct RAID_CONTEXT raid_context;
+	struct RAID_CONTEXT_G35 raid_context_g35;
+};
+
+struct MPI2_SGE_SIMPLE_UNION {
+	__le32 FlagsLength;
+	union {
+		__le32 Address32;
+		__le64 Address64;
+	} u;
+};
+
+struct MPI2_SCSI_IO_CDB_EEDP32 {
+	u8 CDB[20];
+	__be32 PrimaryReferenceTag;
+	__be16 PrimaryApplicationTag;
+	__be16 PrimaryApplicationTagMask;
+	__le32 TransferLength;
+};
+
+struct MPI2_SGE_CHAIN_UNION {
+	__le16 Length;
+	u8 NextChainOffset;
+	u8 Flags;
+	union {
+		__le32 Address32;
+		__le64 Address64;
+	} u;
+};
+
+struct MPI2_IEEE_SGE_SIMPLE32 {
+	__le32 Address;
+	__le32 FlagsLength;
+};
+
+struct MPI2_IEEE_SGE_CHAIN32 {
+	__le32 Address;
+	__le32 FlagsLength;
+};
+
+struct MPI2_IEEE_SGE_SIMPLE64 {
+	__le64 Address;
+	__le32 Length;
+	__le16 Reserved1;
+	u8 Reserved2;
+	u8 Flags;
+};
+
+struct MPI2_IEEE_SGE_CHAIN64 {
+	__le64 Address;
+	__le32 Length;
+	__le16 Reserved1;
+	u8 Reserved2;
+	u8 Flags;
+};
+
+union MPI2_IEEE_SGE_SIMPLE_UNION {
+	struct MPI2_IEEE_SGE_SIMPLE32 Simple32;
+	struct MPI2_IEEE_SGE_SIMPLE64 Simple64;
+};
+
+union MPI2_IEEE_SGE_CHAIN_UNION {
+	struct MPI2_IEEE_SGE_CHAIN32 Chain32;
+	struct MPI2_IEEE_SGE_CHAIN64 Chain64;
+};
+
+union MPI2_SGE_IO_UNION {
+	struct MPI2_SGE_SIMPLE_UNION MpiSimple;
+	struct MPI2_SGE_CHAIN_UNION MpiChain;
+	union MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
+	union MPI2_IEEE_SGE_CHAIN_UNION IeeeChain;
+};
+
+union MPI2_SCSI_IO_CDB_UNION {
+	u8 CDB32[32];
+	struct MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
+	struct MPI2_SGE_SIMPLE_UNION SGE;
+};
+
+struct MPI2_RAID_SCSI_IO_REQUEST {
+	__le16 DevHandle;
+	u8 ChainOffset;
+	u8 Function;
+	__le16 Reserved1;
+	u8 Reserved2;
+	u8 MsgFlags;
+	u8 VP_ID;
+	u8 VF_ID;
+	__le16 Reserved3;
+	__le32 SenseBufferLowAddress;
+	__le16 SGLFlags;
+	u8 SenseBufferLength;
+	u8 Reserved4;
+	u8 SGLOffset0;
+	u8 SGLOffset1;
+	u8 SGLOffset2;
+	u8 SGLOffset3;
+	__le32 SkipCount;
+	__le32 DataLength;
+	__le32 BidirectionalDataLength;
+	__le16 IoFlags;
+	__le16 EEDPFlags;
+	__le32 EEDPBlockSize;
+	__le32 SecondaryReferenceTag;
+	__le16 SecondaryApplicationTag;
+	__le16 ApplicationTagTranslationMask;
+	u8 LUN[8];
+	__le32 Control;
+	union MPI2_SCSI_IO_CDB_UNION CDB;
+	union RAID_CONTEXT_UNION RaidContext;
+	union MPI2_SGE_IO_UNION SGL;
+};
+
+struct MEGASAS_RAID_MFA_IO_REQUEST_DESCRIPTOR {
+	u32 RequestFlags: 8;
+	u32 MessageAddress1: 24;
+	u32 MessageAddress2;
+};
+
+struct MPI2_DEFAULT_REQUEST_DESCRIPTOR {
+	u8 RequestFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 LMID;
+	__le16 DescriptorTypeDependent;
+};
+
+struct MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR {
+	u8 RequestFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 LMID;
+	__le16 Reserved1;
+};
+
+struct MPI2_SCSI_IO_REQUEST_DESCRIPTOR {
+	u8 RequestFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 LMID;
+	__le16 DevHandle;
+};
+
+struct MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR {
+	u8 RequestFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 LMID;
+	__le16 IoIndex;
+};
+
+struct MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR {
+	u8 RequestFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 LMID;
+	__le16 Reserved;
+};
+
+union MEGASAS_REQUEST_DESCRIPTOR_UNION {
+	struct MPI2_DEFAULT_REQUEST_DESCRIPTOR Default;
+	struct MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority;
+	struct MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO;
+	struct MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget;
+	struct MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator;
+	struct MEGASAS_RAID_MFA_IO_REQUEST_DESCRIPTOR MFAIo;
+	union {
+		struct {
+			__le32 low;
+			__le32 high;
+		} u;
+		__le64 Words;
+	};
+};
+
+struct MPI2_DEFAULT_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	__le16 DescriptorTypeDependent1;
+	__le32 DescriptorTypeDependent2;
+};
+
+struct MPI2_ADDRESS_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le32 ReplyFrameAddress;
+};
+
+struct MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le16 TaskTag;
+	__le16 Reserved1;
+};
+
+struct MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	u8 SequenceNumber;
+	u8 Reserved1;
+	__le16 IoIndex;
+};
+
+struct MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	u8 VP_ID;
+	u8 Flags;
+	__le16 InitiatorDevHandle;
+	__le16 IoIndex;
+};
+
+struct MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR {
+	u8 ReplyFlags;
+	u8 MSIxIndex;
+	__le16 SMID;
+	__le32 Reserved;
+};
+
+union MPI2_REPLY_DESCRIPTORS_UNION {
+	struct MPI2_DEFAULT_REPLY_DESCRIPTOR Default;
+	struct MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply;
+	struct MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess;
+	struct MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess;
+	struct MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer;
+	struct MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess;
+	__le64 Words;
+};
+
+struct MPI2_IOC_INIT_REQUEST {
+	u8 WhoInit;
+	u8 Reserved1;
+	u8 ChainOffset;
+	u8 Function;
+	__le16 Reserved2;
+	u8 Reserved3;
+	u8 MsgFlags;
+	u8 VP_ID;
+	u8 VF_ID;
+	__le16 Reserved4;
+	__le16 MsgVersion;
+	__le16 HeaderVersion;
+	u32 Reserved5;
+	__le16 Reserved6;
+	u8 HostPageSize;
+	u8 HostMSIxVectors;
+	__le16 Reserved8;
+	__le16 SystemRequestFrameSize;
+	__le16 ReplyDescriptorPostQueueDepth;
+	__le16 ReplyFreeQueueDepth;
+	__le32 SenseBufferAddressHigh;
+	__le32 SystemReplyAddressHigh;
+	__le64 SystemRequestFrameBaseAddress;
+	__le64 ReplyDescriptorPostQueueAddress;
+	__le64 ReplyFreeQueueAddress;
+	__le64 TimeStamp;
+};
+
+struct MR_DEV_HANDLE_INFO {
+	__le16 curDevHdl;
+	u8 validHandles;
+	u8 interfaceType;
+	__le16 devHandle[2];
+};
+
+struct MR_ARRAY_INFO {
+	__le16 pd[32];
+};
+
+struct MR_QUAD_ELEMENT {
+	__le64 logStart;
+	__le64 logEnd;
+	__le64 offsetInSpan;
+	__le32 diff;
+	__le32 reserved1;
+};
+
+struct MR_SPAN_INFO {
+	__le32 noElements;
+	__le32 reserved1;
+	struct MR_QUAD_ELEMENT quad[8];
+};
+
+struct MR_LD_SPAN {
+	__le64 startBlk;
+	__le64 numBlks;
+	__le16 arrayRef;
+	u8 spanRowSize;
+	u8 spanRowDataSize;
+	u8 reserved[4];
+};
+
+struct MR_SPAN_BLOCK_INFO {
+	__le64 num_rows;
+	struct MR_LD_SPAN span;
+	struct MR_SPAN_INFO block_span_info;
+};
+
+struct MR_CPU_AFFINITY_MASK {
+	union {
+		struct {
+			u8 hw_path: 1;
+			u8 cpu0: 1;
+			u8 cpu1: 1;
+			u8 cpu2: 1;
+			u8 cpu3: 1;
+			u8 reserved: 3;
+		};
+		u8 core_mask;
+	};
+};
+
+struct MR_IO_AFFINITY {
+	union {
+		struct {
+			struct MR_CPU_AFFINITY_MASK pdRead;
+			struct MR_CPU_AFFINITY_MASK pdWrite;
+			struct MR_CPU_AFFINITY_MASK ldRead;
+			struct MR_CPU_AFFINITY_MASK ldWrite;
+		};
+		u32 word;
+	};
+	u8 maxCores;
+	u8 reserved[3];
+};
+
+struct MR_LD_RAID {
+	struct {
+		u32 fpCapable: 1;
+		u32 ra_capable: 1;
+		u32 reserved5: 2;
+		u32 ldPiMode: 4;
+		u32 pdPiMode: 4;
+		u32 encryptionType: 8;
+		u32 fpWriteCapable: 1;
+		u32 fpReadCapable: 1;
+		u32 fpWriteAcrossStripe: 1;
+		u32 fpReadAcrossStripe: 1;
+		u32 fpNonRWCapable: 1;
+		u32 tmCapable: 1;
+		u32 fpBypassRegionLock: 1;
+		u32 disable_coalescing: 1;
+		u32 fp_rmw_capable: 1;
+		u32 fp_cache_bypass_capable: 1;
+		u32 reserved4: 2;
+	} capability;
+	__le32 reserved6;
+	__le64 size;
+	u8 spanDepth;
+	u8 level;
+	u8 stripeShift;
+	u8 rowSize;
+	u8 rowDataSize;
+	u8 writeMode;
+	u8 PRL;
+	u8 SRL;
+	__le16 targetId;
+	u8 ldState;
+	u8 regTypeReqOnWrite;
+	u8 modFactor;
+	u8 regTypeReqOnRead;
+	__le16 seqNum;
+	struct {
+		u32 ldSyncRequired: 1;
+		u32 regTypeReqOnReadIsValid: 1;
+		u32 isEPD: 1;
+		u32 enableSLDOnAllRWIOs: 1;
+		u32 reserved: 28;
+	} flags;
+	u8 LUN[8];
+	u8 fpIoTimeoutForLd;
+	u8 ld_accept_priority_type;
+	u8 reserved2[2];
+	u32 logical_block_length;
+	struct {
+		u32 ld_pi_exp: 4;
+		u32 ld_logical_block_exp: 4;
+		u32 reserved1: 24;
+	};
+	struct MR_IO_AFFINITY cpuAffinity;
+	u8 reserved3[64];
+};
+
+struct MR_LD_SPAN_MAP {
+	struct MR_LD_RAID ldRaid;
+	u8 dataArmMap[32];
+	struct MR_SPAN_BLOCK_INFO spanBlock[8];
+};
+
+struct MR_FW_RAID_MAP {
+	__le32 totalSize;
+	union {
+		struct {
+			__le32 maxLd;
+			__le32 maxSpanDepth;
+			__le32 maxRowSize;
+			__le32 maxPdCount;
+			__le32 maxArrays;
+		} validationInfo;
+		__le32 version[5];
+	};
+	__le32 ldCount;
+	__le32 Reserved1;
+	u8 ldTgtIdToLd[128];
+	u8 fpPdIoTimeoutSec;
+	u8 reserved2[7];
+	struct MR_ARRAY_INFO arMapInfo[128];
+	struct MR_DEV_HANDLE_INFO devHndlInfo[256];
+	struct MR_LD_SPAN_MAP ldSpanMap[0];
+};
+
+enum MR_RAID_MAP_DESC_TYPE {
+	RAID_MAP_DESC_TYPE_DEVHDL_INFO = 0,
+	RAID_MAP_DESC_TYPE_TGTID_INFO = 1,
+	RAID_MAP_DESC_TYPE_ARRAY_INFO = 2,
+	RAID_MAP_DESC_TYPE_SPAN_INFO = 3,
+	RAID_MAP_DESC_TYPE_COUNT = 4,
+};
+
+struct MR_RAID_MAP_DESC_TABLE {
+	u32 raid_map_desc_type;
+	u32 raid_map_desc_offset;
+	u32 raid_map_desc_buffer_size;
+	u32 raid_map_desc_elements;
+};
+
+struct MR_FW_RAID_MAP_DYNAMIC {
+	u32 raid_map_size;
+	u32 desc_table_offset;
+	u32 desc_table_size;
+	u32 desc_table_num_elements;
+	u64 reserved1;
+	u32 reserved2[3];
+	u8 fp_pd_io_timeout_sec;
+	u8 reserved3[3];
+	u32 rmw_fp_seq_num;
+	u16 ld_count;
+	u16 ar_count;
+	u16 span_count;
+	u16 reserved4[3];
+	union {
+		struct {
+			struct MR_DEV_HANDLE_INFO *dev_hndl_info;
+			u16 *ld_tgt_id_to_ld;
+			struct MR_ARRAY_INFO *ar_map_info;
+			struct MR_LD_SPAN_MAP *ld_span_map;
+		};
+		u64 ptr_structure_size[4];
+	};
+	struct MR_RAID_MAP_DESC_TABLE raid_map_desc_table[4];
+	u32 raid_map_desc_data[0];
+};
+
+struct megasas_instance;
+
+struct megasas_cmd_fusion {
+	struct MPI2_RAID_SCSI_IO_REQUEST *io_request;
+	dma_addr_t io_request_phys_addr;
+	union MPI2_SGE_IO_UNION *sg_frame;
+	dma_addr_t sg_frame_phys_addr;
+	u8 *sense;
+	dma_addr_t sense_phys_addr;
+	struct list_head list;
+	struct scsi_cmnd *scmd;
+	struct megasas_instance *instance;
+	u8 retry_for_fw_reset;
+	union MEGASAS_REQUEST_DESCRIPTOR_UNION *request_desc;
+	u32 sync_cmd_idx;
+	u32 index;
+	u8 pd_r1_lb;
+	struct completion done;
+	u8 pd_interface;
+	u16 r1_alt_dev_handle;
+	bool cmd_completed;
+};
+
+struct megasas_pd_list {
+	u16 tid;
+	u8 driveType;
+	u8 driveState;
+};
+
+struct dma_pool;
+
+struct megasas_irq_context {
+	char name[32];
+	struct megasas_instance *instance;
+	u32 MSIxIndex;
+	u32 os_irq;
+	struct irq_poll irqpoll;
+	bool irq_poll_scheduled;
+	bool irq_line_enable;
+	atomic_t in_used;
+};
+
+struct MR_DRV_SYSTEM_INFO;
+
+struct MR_LD_VF_AFFILIATION;
+
+struct MR_LD_VF_AFFILIATION_111;
+
+struct MR_CTRL_HB_HOST_MEM;
+
+struct MR_PD_INFO;
+
+struct MR_TARGET_PROPERTIES;
+
+struct MR_PD_LIST;
+
+struct megasas_ctrl_info;
+
+struct MR_LD_LIST;
+
+struct MR_LD_TARGETID_LIST;
+
+struct MR_HOST_DEVICE_LIST;
+
+struct MR_SNAPDUMP_PROPERTIES;
+
+struct megasas_register_set;
+
+struct megasas_aen_event;
+
+struct megasas_cmd;
+
+struct megasas_evt_detail;
+
+struct megasas_instance_template;
+
+struct megasas_instance {
+	unsigned int *reply_map;
+	__le32 *producer;
+	dma_addr_t producer_h;
+	__le32 *consumer;
+	dma_addr_t consumer_h;
+	struct MR_DRV_SYSTEM_INFO *system_info_buf;
+	dma_addr_t system_info_h;
+	struct MR_LD_VF_AFFILIATION *vf_affiliation;
+	dma_addr_t vf_affiliation_h;
+	struct MR_LD_VF_AFFILIATION_111 *vf_affiliation_111;
+	dma_addr_t vf_affiliation_111_h;
+	struct MR_CTRL_HB_HOST_MEM *hb_host_mem;
+	dma_addr_t hb_host_mem_h;
+	struct MR_PD_INFO *pd_info;
+	dma_addr_t pd_info_h;
+	struct MR_TARGET_PROPERTIES *tgt_prop;
+	dma_addr_t tgt_prop_h;
+	__le32 *reply_queue;
+	dma_addr_t reply_queue_h;
+	u32 *crash_dump_buf;
+	dma_addr_t crash_dump_h;
+	struct MR_PD_LIST *pd_list_buf;
+	dma_addr_t pd_list_buf_h;
+	struct megasas_ctrl_info *ctrl_info_buf;
+	dma_addr_t ctrl_info_buf_h;
+	struct MR_LD_LIST *ld_list_buf;
+	dma_addr_t ld_list_buf_h;
+	struct MR_LD_TARGETID_LIST *ld_targetid_list_buf;
+	dma_addr_t ld_targetid_list_buf_h;
+	struct MR_HOST_DEVICE_LIST *host_device_list_buf;
+	dma_addr_t host_device_list_buf_h;
+	struct MR_SNAPDUMP_PROPERTIES *snapdump_prop;
+	dma_addr_t snapdump_prop_h;
+	void *crash_buf[512];
+	unsigned int fw_crash_buffer_size;
+	unsigned int fw_crash_state;
+	unsigned int fw_crash_buffer_offset;
+	u32 drv_buf_index;
+	u32 drv_buf_alloc;
+	u32 crash_dump_fw_support;
+	u32 crash_dump_drv_support;
+	u32 crash_dump_app_support;
+	u32 secure_jbod_support;
+	u32 support_morethan256jbod;
+	bool use_seqnum_jbod_fp;
+	bool smp_affinity_enable;
+	spinlock_t crashdump_lock;
+	struct megasas_register_set *reg_set;
+	u32 *reply_post_host_index_addr[16];
+	struct megasas_pd_list pd_list[256];
+	struct megasas_pd_list local_pd_list[256];
+	u8 ld_ids[256];
+	u8 ld_tgtid_status[256];
+	u8 ld_ids_prev[256];
+	u8 ld_ids_from_raidmap[256];
+	s8 init_id;
+	u16 max_num_sge;
+	u16 max_fw_cmds;
+	u16 max_mpt_cmds;
+	u16 max_mfi_cmds;
+	u16 max_scsi_cmds;
+	u16 ldio_threshold;
+	u16 cur_can_queue;
+	u32 max_sectors_per_req;
+	bool msix_load_balance;
+	struct megasas_aen_event *ev;
+	struct megasas_cmd **cmd_list;
+	struct list_head cmd_pool;
+	spinlock_t mfi_pool_lock;
+	spinlock_t hba_lock;
+	spinlock_t stream_lock;
+	spinlock_t completion_lock;
+	struct dma_pool *frame_dma_pool;
+	struct dma_pool *sense_dma_pool;
+	struct megasas_evt_detail *evt_detail;
+	dma_addr_t evt_detail_h;
+	struct megasas_cmd *aen_cmd;
+	struct semaphore ioctl_sem;
+	struct Scsi_Host *host;
+	wait_queue_head_t int_cmd_wait_q;
+	wait_queue_head_t abort_cmd_wait_q;
+	struct pci_dev *pdev;
+	u32 unique_id;
+	u32 fw_support_ieee;
+	u32 threshold_reply_count;
+	atomic_t fw_outstanding;
+	atomic_t ldio_outstanding;
+	atomic_t fw_reset_no_pci_access;
+	atomic64_t total_io_count;
+	atomic64_t high_iops_outstanding;
+	struct megasas_instance_template *instancet;
+	struct tasklet_struct isr_tasklet;
+	struct work_struct work_init;
+	struct delayed_work fw_fault_work;
+	struct workqueue_struct *fw_fault_work_q;
+	char fault_handler_work_q_name[48];
+	u8 flag;
+	u8 unload;
+	u8 flag_ieee;
+	u8 issuepend_done;
+	u8 disableOnlineCtrlReset;
+	u8 UnevenSpanSupport;
+	u8 supportmax256vd;
+	u8 pd_list_not_supported;
+	u16 fw_supported_vd_count;
+	u16 fw_supported_pd_count;
+	u16 drv_supported_vd_count;
+	u16 drv_supported_pd_count;
+	atomic_t adprecovery;
+	long unsigned int last_time;
+	u32 mfiStatus;
+	u32 last_seq_num;
+	struct list_head internal_reset_pending_q;
+	void *ctrl_context;
+	unsigned int msix_vectors;
+	struct megasas_irq_context irq_context[128];
+	u64 map_id;
+	u64 pd_seq_map_id;
+	struct megasas_cmd *map_update_cmd;
+	struct megasas_cmd *jbod_seq_cmd;
+	long unsigned int bar;
+	long int reset_flags;
+	struct mutex reset_mutex;
+	struct timer_list sriov_heartbeat_timer;
+	char skip_heartbeat_timer_del;
+	u8 requestorId;
+	char PlasmaFW111;
+	char clusterId[16];
+	u8 peerIsPresent;
+	u8 passive;
+	u16 throttlequeuedepth;
+	u8 mask_interrupts;
+	u16 max_chain_frame_sz;
+	u8 is_imr;
+	u8 is_rdpq;
+	bool dev_handle;
+	bool fw_sync_cache_support;
+	u32 mfi_frame_size;
+	bool msix_combined;
+	u16 max_raid_mapsize;
+	u8 r1_ldio_hint_default;
+	u32 nvme_page_size;
+	u8 adapter_type;
+	bool consistent_mask_64bit;
+	bool support_nvme_passthru;
+	bool enable_sdev_max_qd;
+	u8 task_abort_tmo;
+	u8 max_reset_tmo;
+	u8 snapdump_wait_time;
+	struct dentry *debugfs_root;
+	struct dentry *raidmap_dump;
+	u8 enable_fw_dev_list;
+	bool atomic_desc_support;
+	bool support_seqnum_jbod_fp;
+	bool support_pci_lane_margining;
+	u8 low_latency_index_start;
+	int perf_mode;
+	int iopoll_q_count;
+};
+
+struct LD_LOAD_BALANCE_INFO {
+	u8 loadBalanceFlag;
+	u8 reserved1;
+	atomic_t scsi_pending_cmds[256];
+	u64 last_accessed_block[256];
+};
+
+struct _LD_SPAN_SET {
+	u64 log_start_lba;
+	u64 log_end_lba;
+	u64 span_row_start;
+	u64 span_row_end;
+	u64 data_strip_start;
+	u64 data_strip_end;
+	u64 data_row_start;
+	u64 data_row_end;
+	u8 strip_offset[8];
+	u32 span_row_data_width;
+	u32 diff;
+	u32 reserved[2];
+};
+
+typedef struct _LD_SPAN_SET LD_SPAN_SET;
+
+struct LOG_BLOCK_SPAN_INFO {
+	LD_SPAN_SET span_set[8];
+};
+
+typedef struct LOG_BLOCK_SPAN_INFO LD_SPAN_INFO;
+
+struct MR_DRV_RAID_MAP {
+	__le32 totalSize;
+	union {
+		struct {
+			__le32 maxLd;
+			__le32 maxSpanDepth;
+			__le32 maxRowSize;
+			__le32 maxPdCount;
+			__le32 maxArrays;
+		} validationInfo;
+		__le32 version[5];
+	};
+	u8 fpPdIoTimeoutSec;
+	u8 reserved2[7];
+	__le16 ldCount;
+	__le16 arCount;
+	__le16 spanCount;
+	__le16 reserve3;
+	struct MR_DEV_HANDLE_INFO devHndlInfo[512];
+	u16 ldTgtIdToLd[512];
+	struct MR_ARRAY_INFO arMapInfo[512];
+	struct MR_LD_SPAN_MAP ldSpanMap[0];
+};
+
+struct MR_DRV_RAID_MAP_ALL {
+	struct MR_DRV_RAID_MAP raidMap;
+	struct MR_LD_SPAN_MAP ldSpanMap[512];
+};
+
+struct MR_PD_CFG_SEQ {
+	u16 seqNum;
+	u16 devHandle;
+	struct {
+		u8 tmCapable: 1;
+		u8 reserved: 7;
+	} capability;
+	u8 reserved;
+	u16 pd_target_id;
+};
+
+struct MR_PD_CFG_SEQ_NUM_SYNC {
+	__le32 size;
+	__le32 count;
+	struct MR_PD_CFG_SEQ seq[0];
+};
+
+struct STREAM_DETECT {
+	u64 next_seq_lba;
+	struct megasas_cmd_fusion *first_cmd_fusion;
+	struct megasas_cmd_fusion *last_cmd_fusion;
+	u32 count_cmds_in_stream;
+	u16 num_sges_in_group;
+	u8 is_read;
+	u8 group_depth;
+	bool group_flush;
+	u8 reserved[7];
+};
+
+struct LD_STREAM_DETECT {
+	bool write_back;
+	bool fp_write_enabled;
+	bool members_ssds;
+	bool fp_cache_bypass_capable;
+	u32 mru_bit_map;
+	struct STREAM_DETECT stream_track[8];
+};
+
+struct MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY {
+	u64 RDPQBaseAddress;
+	u32 Reserved1;
+	u32 Reserved2;
+};
+
+struct rdpq_alloc_detail {
+	struct dma_pool *dma_pool_ptr;
+	dma_addr_t pool_entry_phys;
+	union MPI2_REPLY_DESCRIPTORS_UNION *pool_entry_virt;
+};
+
+struct fusion_context {
+	struct megasas_cmd_fusion **cmd_list;
+	dma_addr_t req_frames_desc_phys;
+	u8 *req_frames_desc;
+	struct dma_pool *io_request_frames_pool;
+	dma_addr_t io_request_frames_phys;
+	u8 *io_request_frames;
+	struct dma_pool *sg_dma_pool;
+	struct dma_pool *sense_dma_pool;
+	u8 *sense;
+	dma_addr_t sense_phys_addr;
+	atomic_t busy_mq_poll[128];
+	dma_addr_t reply_frames_desc_phys[128];
+	union MPI2_REPLY_DESCRIPTORS_UNION *reply_frames_desc[128];
+	struct rdpq_alloc_detail rdpq_tracker[8];
+	struct dma_pool *reply_frames_desc_pool;
+	struct dma_pool *reply_frames_desc_pool_align;
+	u16 last_reply_idx[128];
+	u32 reply_q_depth;
+	u32 request_alloc_sz;
+	u32 reply_alloc_sz;
+	u32 io_frames_alloc_sz;
+	struct MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY *rdpq_virt;
+	dma_addr_t rdpq_phys;
+	u16 max_sge_in_main_msg;
+	u16 max_sge_in_chain;
+	u8 chain_offset_io_request;
+	u8 chain_offset_mfi_pthru;
+	struct MR_FW_RAID_MAP_DYNAMIC *ld_map[2];
+	dma_addr_t ld_map_phys[2];
+	struct MR_DRV_RAID_MAP_ALL *ld_drv_map[2];
+	u32 max_map_sz;
+	u32 current_map_sz;
+	u32 old_map_sz;
+	u32 new_map_sz;
+	u32 drv_map_sz;
+	u32 drv_map_pages;
+	struct MR_PD_CFG_SEQ_NUM_SYNC *pd_seq_sync[2];
+	dma_addr_t pd_seq_phys[2];
+	u8 fast_path_io;
+	struct LD_LOAD_BALANCE_INFO *load_balance_info;
+	u32 load_balance_info_pages;
+	LD_SPAN_INFO *log_to_span;
+	u32 log_to_span_pages;
+	struct LD_STREAM_DETECT **stream_detect_by_ld;
+	dma_addr_t ioc_init_request_phys;
+	struct MPI2_IOC_INIT_REQUEST *ioc_init_request;
+	struct megasas_cmd *ioc_init_cmd;
+	bool pcie_bw_limitation;
+	bool r56_div_offload;
+};
+
+union megasas_frame;
+
+struct megasas_cmd {
+	union megasas_frame *frame;
+	dma_addr_t frame_phys_addr;
+	u8 *sense;
+	dma_addr_t sense_phys_addr;
+	u32 index;
+	u8 sync_cmd;
+	u8 cmd_status_drv;
+	u8 abort_aen;
+	u8 retry_for_fw_reset;
+	struct list_head list;
+	struct scsi_cmnd *scmd;
+	u8 flags;
+	struct megasas_instance *instance;
+	union {
+		struct {
+			u16 smid;
+			u16 resvd;
+		} context;
+		u32 frame_count;
+	};
+};
+
+struct MR_SNAPDUMP_PROPERTIES {
+	u8 offload_num;
+	u8 max_num_supported;
+	u8 cur_num_supported;
+	u8 trigger_min_num_sec_before_ocr;
+	u8 reserved[12];
+};
+
+enum MFI_CMD_OP {
+	MFI_CMD_INIT = 0,
+	MFI_CMD_LD_READ = 1,
+	MFI_CMD_LD_WRITE = 2,
+	MFI_CMD_LD_SCSI_IO = 3,
+	MFI_CMD_PD_SCSI_IO = 4,
+	MFI_CMD_DCMD = 5,
+	MFI_CMD_ABORT = 6,
+	MFI_CMD_SMP = 7,
+	MFI_CMD_STP = 8,
+	MFI_CMD_NVME = 9,
+	MFI_CMD_TOOLBOX = 10,
+	MFI_CMD_OP_COUNT = 11,
+	MFI_CMD_INVALID = 255,
+};
+
+enum MFI_STAT {
+	MFI_STAT_OK = 0,
+	MFI_STAT_INVALID_CMD = 1,
+	MFI_STAT_INVALID_DCMD = 2,
+	MFI_STAT_INVALID_PARAMETER = 3,
+	MFI_STAT_INVALID_SEQUENCE_NUMBER = 4,
+	MFI_STAT_ABORT_NOT_POSSIBLE = 5,
+	MFI_STAT_APP_HOST_CODE_NOT_FOUND = 6,
+	MFI_STAT_APP_IN_USE = 7,
+	MFI_STAT_APP_NOT_INITIALIZED = 8,
+	MFI_STAT_ARRAY_INDEX_INVALID = 9,
+	MFI_STAT_ARRAY_ROW_NOT_EMPTY = 10,
+	MFI_STAT_CONFIG_RESOURCE_CONFLICT = 11,
+	MFI_STAT_DEVICE_NOT_FOUND = 12,
+	MFI_STAT_DRIVE_TOO_SMALL = 13,
+	MFI_STAT_FLASH_ALLOC_FAIL = 14,
+	MFI_STAT_FLASH_BUSY = 15,
+	MFI_STAT_FLASH_ERROR = 16,
+	MFI_STAT_FLASH_IMAGE_BAD = 17,
+	MFI_STAT_FLASH_IMAGE_INCOMPLETE = 18,
+	MFI_STAT_FLASH_NOT_OPEN = 19,
+	MFI_STAT_FLASH_NOT_STARTED = 20,
+	MFI_STAT_FLUSH_FAILED = 21,
+	MFI_STAT_HOST_CODE_NOT_FOUNT = 22,
+	MFI_STAT_LD_CC_IN_PROGRESS = 23,
+	MFI_STAT_LD_INIT_IN_PROGRESS = 24,
+	MFI_STAT_LD_LBA_OUT_OF_RANGE = 25,
+	MFI_STAT_LD_MAX_CONFIGURED = 26,
+	MFI_STAT_LD_NOT_OPTIMAL = 27,
+	MFI_STAT_LD_RBLD_IN_PROGRESS = 28,
+	MFI_STAT_LD_RECON_IN_PROGRESS = 29,
+	MFI_STAT_LD_WRONG_RAID_LEVEL = 30,
+	MFI_STAT_MAX_SPARES_EXCEEDED = 31,
+	MFI_STAT_MEMORY_NOT_AVAILABLE = 32,
+	MFI_STAT_MFC_HW_ERROR = 33,
+	MFI_STAT_NO_HW_PRESENT = 34,
+	MFI_STAT_NOT_FOUND = 35,
+	MFI_STAT_NOT_IN_ENCL = 36,
+	MFI_STAT_PD_CLEAR_IN_PROGRESS = 37,
+	MFI_STAT_PD_TYPE_WRONG = 38,
+	MFI_STAT_PR_DISABLED = 39,
+	MFI_STAT_ROW_INDEX_INVALID = 40,
+	MFI_STAT_SAS_CONFIG_INVALID_ACTION = 41,
+	MFI_STAT_SAS_CONFIG_INVALID_DATA = 42,
+	MFI_STAT_SAS_CONFIG_INVALID_PAGE = 43,
+	MFI_STAT_SAS_CONFIG_INVALID_TYPE = 44,
+	MFI_STAT_SCSI_DONE_WITH_ERROR = 45,
+	MFI_STAT_SCSI_IO_FAILED = 46,
+	MFI_STAT_SCSI_RESERVATION_CONFLICT = 47,
+	MFI_STAT_SHUTDOWN_FAILED = 48,
+	MFI_STAT_TIME_NOT_SET = 49,
+	MFI_STAT_WRONG_STATE = 50,
+	MFI_STAT_LD_OFFLINE = 51,
+	MFI_STAT_PEER_NOTIFICATION_REJECTED = 52,
+	MFI_STAT_PEER_NOTIFICATION_FAILED = 53,
+	MFI_STAT_RESERVATION_IN_PROGRESS = 54,
+	MFI_STAT_I2C_ERRORS_DETECTED = 55,
+	MFI_STAT_PCI_ERRORS_DETECTED = 56,
+	MFI_STAT_CONFIG_SEQ_MISMATCH = 103,
+	MFI_STAT_INVALID_STATUS = 255,
+};
+
+enum mfi_evt_class {
+	MFI_EVT_CLASS_DEBUG = -2,
+	MFI_EVT_CLASS_PROGRESS = -1,
+	MFI_EVT_CLASS_INFO = 0,
+	MFI_EVT_CLASS_WARNING = 1,
+	MFI_EVT_CLASS_CRITICAL = 2,
+	MFI_EVT_CLASS_FATAL = 3,
+	MFI_EVT_CLASS_DEAD = 4,
+};
+
+enum MR_FW_CRASH_DUMP_STATE {
+	UNAVAILABLE = 0,
+	AVAILABLE = 1,
+	COPYING = 2,
+	COPIED = 3,
+	COPY_ERROR = 4,
+};
+
+enum _MR_CRASH_BUF_STATUS {
+	MR_CRASH_BUF_TURN_OFF = 0,
+	MR_CRASH_BUF_TURN_ON = 1,
+};
+
+enum MR_EVT_CLASS {
+	MR_EVT_CLASS_DEBUG = -2,
+	MR_EVT_CLASS_PROGRESS = -1,
+	MR_EVT_CLASS_INFO = 0,
+	MR_EVT_CLASS_WARNING = 1,
+	MR_EVT_CLASS_CRITICAL = 2,
+	MR_EVT_CLASS_FATAL = 3,
+	MR_EVT_CLASS_DEAD = 4,
+};
+
+enum MR_EVT_LOCALE {
+	MR_EVT_LOCALE_LD = 1,
+	MR_EVT_LOCALE_PD = 2,
+	MR_EVT_LOCALE_ENCL = 4,
+	MR_EVT_LOCALE_BBU = 8,
+	MR_EVT_LOCALE_SAS = 16,
+	MR_EVT_LOCALE_CTRL = 32,
+	MR_EVT_LOCALE_CONFIG = 64,
+	MR_EVT_LOCALE_CLUSTER = 128,
+	MR_EVT_LOCALE_ALL = 65535,
+};
+
+enum MR_PD_QUERY_TYPE {
+	MR_PD_QUERY_TYPE_ALL = 0,
+	MR_PD_QUERY_TYPE_STATE = 1,
+	MR_PD_QUERY_TYPE_POWER_STATE = 2,
+	MR_PD_QUERY_TYPE_MEDIA_TYPE = 3,
+	MR_PD_QUERY_TYPE_SPEED = 4,
+	MR_PD_QUERY_TYPE_EXPOSED_TO_HOST = 5,
+};
+
+enum MR_LD_QUERY_TYPE {
+	MR_LD_QUERY_TYPE_ALL = 0,
+	MR_LD_QUERY_TYPE_EXPOSED_TO_HOST = 1,
+	MR_LD_QUERY_TYPE_USED_TGT_IDS = 2,
+	MR_LD_QUERY_TYPE_CLUSTER_ACCESS = 3,
+	MR_LD_QUERY_TYPE_CLUSTER_LOCALE = 4,
+};
+
+enum MR_PD_STATE {
+	MR_PD_STATE_UNCONFIGURED_GOOD = 0,
+	MR_PD_STATE_UNCONFIGURED_BAD = 1,
+	MR_PD_STATE_HOT_SPARE = 2,
+	MR_PD_STATE_OFFLINE = 16,
+	MR_PD_STATE_FAILED = 17,
+	MR_PD_STATE_REBUILD = 20,
+	MR_PD_STATE_ONLINE = 24,
+	MR_PD_STATE_COPYBACK = 32,
+	MR_PD_STATE_SYSTEM = 64,
+};
+
+union MR_PD_REF {
+	struct {
+		u16 deviceId;
+		u16 seqNum;
+	} mrPdRef;
+	u32 ref;
+};
+
+union MR_PD_DDF_TYPE {
+	struct {
+		union {
+			struct {
+				u16 forcedPDGUID: 1;
+				u16 inVD: 1;
+				u16 isGlobalSpare: 1;
+				u16 isSpare: 1;
+				u16 isForeign: 1;
+				u16 reserved: 7;
+				u16 intf: 4;
+			} pdType;
+			u16 type;
+		};
+		u16 reserved;
+	} ddf;
+	struct {
+		u32 reserved;
+	} nonDisk;
+	u32 type;
+};
+
+union MR_PROGRESS {
+	struct {
+		u16 progress;
+		union {
+			u16 elapsedSecs;
+			u16 elapsedSecsForLastPercent;
+		};
+	} mrProgress;
+	u32 w;
+};
+
+struct MR_PD_PROGRESS {
+	struct {
+		u32 rbld: 1;
+		u32 patrol: 1;
+		u32 clear: 1;
+		u32 copyBack: 1;
+		u32 erase: 1;
+		u32 locate: 1;
+		u32 reserved: 26;
+	} active;
+	union MR_PROGRESS rbld;
+	union MR_PROGRESS patrol;
+	union {
+		union MR_PROGRESS clear;
+		union MR_PROGRESS erase;
+	};
+	struct {
+		u32 rbld: 1;
+		u32 patrol: 1;
+		u32 clear: 1;
+		u32 copyBack: 1;
+		u32 erase: 1;
+		u32 reserved: 27;
+	} pause;
+	union MR_PROGRESS reserved[3];
+};
+
+struct MR_PD_INFO {
+	union MR_PD_REF ref;
+	u8 inquiryData[96];
+	u8 vpdPage83[64];
+	u8 notSupported;
+	u8 scsiDevType;
+	union {
+		u8 connectedPortBitmap;
+		u8 connectedPortNumbers;
+	};
+	u8 deviceSpeed;
+	u32 mediaErrCount;
+	u32 otherErrCount;
+	u32 predFailCount;
+	u32 lastPredFailEventSeqNum;
+	u16 fwState;
+	u8 disabledForRemoval;
+	u8 linkSpeed;
+	union MR_PD_DDF_TYPE state;
+	struct {
+		u8 count;
+		u8 isPathBroken: 4;
+		u8 reserved3: 3;
+		u8 widePortCapable: 1;
+		u8 connectorIndex[2];
+		u8 reserved[4];
+		u64 sasAddr[2];
+		u8 reserved2[16];
+	} pathInfo;
+	u64 rawSize;
+	u64 nonCoercedSize;
+	u64 coercedSize;
+	u16 enclDeviceId;
+	u8 enclIndex;
+	union {
+		u8 slotNumber;
+		u8 enclConnectorIndex;
+	};
+	struct MR_PD_PROGRESS progInfo;
+	u8 badBlockTableFull;
+	u8 unusableInCurrentConfig;
+	u8 vpdPage83Ext[64];
+	u8 powerState;
+	u8 enclPosition;
+	u32 allowedOps;
+	u16 copyBackPartnerId;
+	u16 enclPartnerDeviceId;
+	struct {
+		u16 fdeCapable: 1;
+		u16 fdeEnabled: 1;
+		u16 secured: 1;
+		u16 locked: 1;
+		u16 foreign: 1;
+		u16 needsEKM: 1;
+		u16 reserved: 10;
+	} security;
+	u8 mediaType;
+	u8 notCertified;
+	u8 bridgeVendor[8];
+	u8 bridgeProductIdentification[16];
+	u8 bridgeProductRevisionLevel[4];
+	u8 satBridgeExists;
+	u8 interfaceType;
+	u8 temperature;
+	u8 emulatedBlockSize;
+	u16 userDataBlockSize;
+	u16 reserved2;
+	struct {
+		u32 piType: 3;
+		u32 piFormatted: 1;
+		u32 piEligible: 1;
+		u32 NCQ: 1;
+		u32 WCE: 1;
+		u32 commissionedSpare: 1;
+		u32 emergencySpare: 1;
+		u32 ineligibleForSSCD: 1;
+		u32 ineligibleForLd: 1;
+		u32 useSSEraseType: 1;
+		u32 wceUnchanged: 1;
+		u32 supportScsiUnmap: 1;
+		u32 reserved: 18;
+	} properties;
+	u64 shieldDiagCompletionTime;
+	u8 shieldCounter;
+	u8 linkSpeedOther;
+	u8 reserved4[2];
+	struct {
+		u32 bbmErrCountSupported: 1;
+		u32 bbmErrCount: 31;
+	} bbmErr;
+	u8 reserved1[84];
+} __attribute__((packed));
+
+struct MR_TARGET_PROPERTIES {
+	u32 max_io_size_kb;
+	u32 device_qdepth;
+	u32 sector_size;
+	u8 reset_tmo;
+	u8 reserved[499];
+};
+
+struct MR_PD_ADDRESS {
+	__le16 deviceId;
+	u16 enclDeviceId;
+	union {
+		struct {
+			u8 enclIndex;
+			u8 slotNumber;
+		} mrPdAddress;
+		struct {
+			u8 enclPosition;
+			u8 enclConnectorIndex;
+		} mrEnclAddress;
+	};
+	u8 scsiDevType;
+	union {
+		u8 connectedPortBitmap;
+		u8 connectedPortNumbers;
+	};
+	u64 sasAddr[2];
+};
+
+struct MR_PD_LIST {
+	__le32 size;
+	__le32 count;
+	struct MR_PD_ADDRESS addr[1];
+};
+
+union MR_LD_REF {
+	struct {
+		u8 targetId;
+		u8 reserved;
+		__le16 seqNum;
+	};
+	__le32 ref;
+};
+
+struct MR_LD_LIST {
+	__le32 ldCount;
+	__le32 reserved;
+	struct {
+		union MR_LD_REF ref;
+		u8 state;
+		u8 reserved[3];
+		__le64 size;
+	} ldList[256];
+};
+
+struct MR_LD_TARGETID_LIST {
+	__le32 size;
+	__le32 count;
+	u8 pad[3];
+	u8 targetId[256];
+};
+
+struct MR_HOST_DEVICE_LIST_ENTRY {
+	struct {
+		union {
+			struct {
+				u8 is_sys_pd: 1;
+				u8 reserved: 7;
+			} bits;
+			u8 byte;
+		} u;
+	} flags;
+	u8 scsi_type;
+	__le16 target_id;
+	u8 reserved[4];
+	__le64 sas_addr[2];
+};
+
+struct MR_HOST_DEVICE_LIST {
+	__le32 size;
+	__le32 count;
+	__le32 reserved[2];
+	struct MR_HOST_DEVICE_LIST_ENTRY host_device_list[1];
+};
+
+struct megasas_ctrl_prop {
+	u16 seq_num;
+	u16 pred_fail_poll_interval;
+	u16 intr_throttle_count;
+	u16 intr_throttle_timeouts;
+	u8 rebuild_rate;
+	u8 patrol_read_rate;
+	u8 bgi_rate;
+	u8 cc_rate;
+	u8 recon_rate;
+	u8 cache_flush_interval;
+	u8 spinup_drv_count;
+	u8 spinup_delay;
+	u8 cluster_enable;
+	u8 coercion_mode;
+	u8 alarm_enable;
+	u8 disable_auto_rebuild;
+	u8 disable_battery_warn;
+	u8 ecc_bucket_size;
+	u16 ecc_bucket_leak_rate;
+	u8 restore_hotspare_on_insertion;
+	u8 expose_encl_devices;
+	u8 maintainPdFailHistory;
+	u8 disallowHostRequestReordering;
+	u8 abortCCOnError;
+	u8 loadBalanceMode;
+	u8 disableAutoDetectBackplane;
+	u8 snapVDSpace;
+	struct {
+		u32 copyBackDisabled: 1;
+		u32 SMARTerEnabled: 1;
+		u32 prCorrectUnconfiguredAreas: 1;
+		u32 useFdeOnly: 1;
+		u32 disableNCQ: 1;
+		u32 SSDSMARTerEnabled: 1;
+		u32 SSDPatrolReadEnabled: 1;
+		u32 enableSpinDownUnconfigured: 1;
+		u32 autoEnhancedImport: 1;
+		u32 enableSecretKeyControl: 1;
+		u32 disableOnlineCtrlReset: 1;
+		u32 allowBootWithPinnedCache: 1;
+		u32 disableSpinDownHS: 1;
+		u32 enableJBOD: 1;
+		u32 reserved: 18;
+	} OnOffProperties;
+	union {
+		u8 autoSnapVDSpace;
+		u8 viewSpace;
+		struct {
+			u16 reserved1: 4;
+			u16 enable_snap_dump: 1;
+			u16 reserved2: 1;
+			u16 enable_fw_dev_list: 1;
+			u16 reserved3: 9;
+		} on_off_properties2;
+	};
+	__le16 spinDownTime;
+	u8 reserved[24];
+};
+
+struct megasas_ctrl_info {
+	struct {
+		__le16 vendor_id;
+		__le16 device_id;
+		__le16 sub_vendor_id;
+		__le16 sub_device_id;
+		u8 reserved[24];
+	} pci;
+	struct {
+		u8 PCIX: 1;
+		u8 PCIE: 1;
+		u8 iSCSI: 1;
+		u8 SAS_3G: 1;
+		u8 SRIOV: 1;
+		u8 reserved_0: 3;
+		u8 reserved_1[6];
+		u8 port_count;
+		u64 port_addr[8];
+	} host_interface;
+	struct {
+		u8 SPI: 1;
+		u8 SAS_3G: 1;
+		u8 SATA_1_5G: 1;
+		u8 SATA_3G: 1;
+		u8 reserved_0: 4;
+		u8 reserved_1[6];
+		u8 port_count;
+		u64 port_addr[8];
+	} device_interface;
+	__le32 image_check_word;
+	__le32 image_component_count;
+	struct {
+		char name[8];
+		char version[32];
+		char build_date[16];
+		char built_time[16];
+	} image_component[8];
+	__le32 pending_image_component_count;
+	struct {
+		char name[8];
+		char version[32];
+		char build_date[16];
+		char build_time[16];
+	} pending_image_component[8];
+	u8 max_arms;
+	u8 max_spans;
+	u8 max_arrays;
+	u8 max_lds;
+	char product_name[80];
+	char serial_no[32];
+	struct {
+		u32 bbu: 1;
+		u32 alarm: 1;
+		u32 nvram: 1;
+		u32 uart: 1;
+		u32 reserved: 28;
+	} hw_present;
+	__le32 current_fw_time;
+	__le16 max_concurrent_cmds;
+	__le16 max_sge_count;
+	__le32 max_request_size;
+	__le16 ld_present_count;
+	__le16 ld_degraded_count;
+	__le16 ld_offline_count;
+	__le16 pd_present_count;
+	__le16 pd_disk_present_count;
+	__le16 pd_disk_pred_failure_count;
+	__le16 pd_disk_failed_count;
+	__le16 nvram_size;
+	__le16 memory_size;
+	__le16 flash_size;
+	__le16 mem_correctable_error_count;
+	__le16 mem_uncorrectable_error_count;
+	u8 cluster_permitted;
+	u8 cluster_active;
+	__le16 max_strips_per_io;
+	struct {
+		u32 raid_level_0: 1;
+		u32 raid_level_1: 1;
+		u32 raid_level_5: 1;
+		u32 raid_level_1E: 1;
+		u32 raid_level_6: 1;
+		u32 reserved: 27;
+	} raid_levels;
+	struct {
+		u32 rbld_rate: 1;
+		u32 cc_rate: 1;
+		u32 bgi_rate: 1;
+		u32 recon_rate: 1;
+		u32 patrol_rate: 1;
+		u32 alarm_control: 1;
+		u32 cluster_supported: 1;
+		u32 bbu: 1;
+		u32 spanning_allowed: 1;
+		u32 dedicated_hotspares: 1;
+		u32 revertible_hotspares: 1;
+		u32 foreign_config_import: 1;
+		u32 self_diagnostic: 1;
+		u32 mixed_redundancy_arr: 1;
+		u32 global_hot_spares: 1;
+		u32 reserved: 17;
+	} adapter_operations;
+	struct {
+		u32 read_policy: 1;
+		u32 write_policy: 1;
+		u32 io_policy: 1;
+		u32 access_policy: 1;
+		u32 disk_cache_policy: 1;
+		u32 reserved: 27;
+	} ld_operations;
+	struct {
+		u8 min;
+		u8 max;
+		u8 reserved[2];
+	} stripe_sz_ops;
+	struct {
+		u32 force_online: 1;
+		u32 force_offline: 1;
+		u32 force_rebuild: 1;
+		u32 reserved: 29;
+	} pd_operations;
+	struct {
+		u32 ctrl_supports_sas: 1;
+		u32 ctrl_supports_sata: 1;
+		u32 allow_mix_in_encl: 1;
+		u32 allow_mix_in_ld: 1;
+		u32 allow_sata_in_cluster: 1;
+		u32 reserved: 27;
+	} pd_mix_support;
+	u8 ecc_bucket_count;
+	u8 reserved_2[11];
+	struct megasas_ctrl_prop properties;
+	char package_version[96];
+	__le64 deviceInterfacePortAddr2[8];
+	u8 reserved3[128];
+	struct {
+		u16 minPdRaidLevel_0: 4;
+		u16 maxPdRaidLevel_0: 12;
+		u16 minPdRaidLevel_1: 4;
+		u16 maxPdRaidLevel_1: 12;
+		u16 minPdRaidLevel_5: 4;
+		u16 maxPdRaidLevel_5: 12;
+		u16 minPdRaidLevel_1E: 4;
+		u16 maxPdRaidLevel_1E: 12;
+		u16 minPdRaidLevel_6: 4;
+		u16 maxPdRaidLevel_6: 12;
+		u16 minPdRaidLevel_10: 4;
+		u16 maxPdRaidLevel_10: 12;
+		u16 minPdRaidLevel_50: 4;
+		u16 maxPdRaidLevel_50: 12;
+		u16 minPdRaidLevel_60: 4;
+		u16 maxPdRaidLevel_60: 12;
+		u16 minPdRaidLevel_1E_RLQ0: 4;
+		u16 maxPdRaidLevel_1E_RLQ0: 12;
+		u16 minPdRaidLevel_1E0_RLQ0: 4;
+		u16 maxPdRaidLevel_1E0_RLQ0: 12;
+		u16 reserved[6];
+	} pdsForRaidLevels;
+	__le16 maxPds;
+	__le16 maxDedHSPs;
+	__le16 maxGlobalHSP;
+	__le16 ddfSize;
+	u8 maxLdsPerArray;
+	u8 partitionsInDDF;
+	u8 lockKeyBinding;
+	u8 maxPITsPerLd;
+	u8 maxViewsPerLd;
+	u8 maxTargetId;
+	__le16 maxBvlVdSize;
+	__le16 maxConfigurableSSCSize;
+	__le16 currentSSCsize;
+	char expanderFwVersion[12];
+	__le16 PFKTrialTimeRemaining;
+	__le16 cacheMemorySize;
+	struct {
+		u32 supportPIcontroller: 1;
+		u32 supportLdPIType1: 1;
+		u32 supportLdPIType2: 1;
+		u32 supportLdPIType3: 1;
+		u32 supportLdBBMInfo: 1;
+		u32 supportShieldState: 1;
+		u32 blockSSDWriteCacheChange: 1;
+		u32 supportSuspendResumeBGops: 1;
+		u32 supportEmergencySpares: 1;
+		u32 supportSetLinkSpeed: 1;
+		u32 supportBootTimePFKChange: 1;
+		u32 supportJBOD: 1;
+		u32 disableOnlinePFKChange: 1;
+		u32 supportPerfTuning: 1;
+		u32 supportSSDPatrolRead: 1;
+		u32 realTimeScheduler: 1;
+		u32 supportResetNow: 1;
+		u32 supportEmulatedDrives: 1;
+		u32 headlessMode: 1;
+		u32 dedicatedHotSparesLimited: 1;
+		u32 supportUnevenSpans: 1;
+		u32 supportPointInTimeProgress: 1;
+		u32 supportDataLDonSSCArray: 1;
+		u32 mpio: 1;
+		u32 supportConfigAutoBalance: 1;
+		u32 activePassive: 2;
+		u32 reserved: 5;
+	} adapterOperations2;
+	u8 driverVersion[32];
+	u8 maxDAPdCountSpinup60;
+	u8 temperatureROC;
+	u8 temperatureCtrl;
+	u8 reserved4;
+	__le16 maxConfigurablePds;
+	u8 reserved5[2];
+	struct {
+		u32 peerIsPresent: 1;
+		u32 peerIsIncompatible: 1;
+		u32 hwIncompatible: 1;
+		u32 fwVersionMismatch: 1;
+		u32 ctrlPropIncompatible: 1;
+		u32 premiumFeatureMismatch: 1;
+		u32 passive: 1;
+		u32 reserved: 25;
+	} cluster;
+	char clusterId[16];
+	struct {
+		u8 maxVFsSupported;
+		u8 numVFsEnabled;
+		u8 requestorId;
+		u8 reserved;
+	} iov;
+	struct {
+		u32 supportPersonalityChange: 2;
+		u32 supportThermalPollInterval: 1;
+		u32 supportDisableImmediateIO: 1;
+		u32 supportT10RebuildAssist: 1;
+		u32 supportMaxExtLDs: 1;
+		u32 supportCrashDump: 1;
+		u32 supportSwZone: 1;
+		u32 supportDebugQueue: 1;
+		u32 supportNVCacheErase: 1;
+		u32 supportForceTo512e: 1;
+		u32 supportHOQRebuild: 1;
+		u32 supportAllowedOpsforDrvRemoval: 1;
+		u32 supportDrvActivityLEDSetting: 1;
+		u32 supportNVDRAM: 1;
+		u32 supportForceFlash: 1;
+		u32 supportDisableSESMonitoring: 1;
+		u32 supportCacheBypassModes: 1;
+		u32 supportSecurityonJBOD: 1;
+		u32 discardCacheDuringLDDelete: 1;
+		u32 supportTTYLogCompression: 1;
+		u32 supportCPLDUpdate: 1;
+		u32 supportDiskCacheSettingForSysPDs: 1;
+		u32 supportExtendedSSCSize: 1;
+		u32 useSeqNumJbodFP: 1;
+		u32 reserved: 7;
+	} adapterOperations3;
+	struct {
+		u8 cpld_in_flash: 1;
+		u8 reserved: 7;
+		u8 reserved1[3];
+		u8 userCodeDefinition[12];
+	} cpld;
+	struct {
+		u16 ctrl_info_ext_supported: 1;
+		u16 support_ibutton_less: 1;
+		u16 supported_enc_algo: 1;
+		u16 support_encrypted_mfc: 1;
+		u16 image_upload_supported: 1;
+		u16 support_ses_ctrl_in_multipathcfg: 1;
+		u16 support_pd_map_target_id: 1;
+		u16 fw_swaps_bbu_vpd_info: 1;
+		u16 support_ssc_rev3: 1;
+		u16 support_dual_fw_update: 1;
+		u16 support_host_info: 1;
+		u16 support_flash_comp_info: 1;
+		u16 support_pl_debug_info: 1;
+		u16 support_nvme_passthru: 1;
+		u16 reserved: 2;
+	} adapter_operations4;
+	u8 pad[2];
+	u32 size;
+	u32 pad1;
+	u8 reserved6[64];
+	struct {
+		u32 mr_config_ext2_supported: 1;
+		u32 support_profile_change: 2;
+		u32 support_cvhealth_info: 1;
+		u32 support_pcie: 1;
+		u32 support_ext_mfg_vpd: 1;
+		u32 support_oce_only: 1;
+		u32 support_nvme_tm: 1;
+		u32 support_snap_dump: 1;
+		u32 support_fde_type_mix: 1;
+		u32 support_force_personality_change: 1;
+		u32 support_psoc_update: 1;
+		u32 support_pci_lane_margining: 1;
+		u32 reserved: 19;
+	} adapter_operations5;
+	u32 rsvdForAdptOp[63];
+	u8 reserved7[3];
+	u8 TaskAbortTO;
+	u8 MaxResetTO;
+	u8 reserved8[3];
+};
+
+enum MR_SCSI_CMD_TYPE {
+	READ_WRITE_LDIO = 0,
+	NON_READ_WRITE_LDIO = 1,
+	READ_WRITE_SYSPDIO = 2,
+	NON_READ_WRITE_SYSPDIO = 3,
+};
+
+enum DCMD_TIMEOUT_ACTION {
+	INITIATE_OCR = 0,
+	KILL_ADAPTER = 1,
+	IGNORE_TIMEOUT = 2,
+};
+
+enum MR_ADAPTER_TYPE {
+	MFI_SERIES = 1,
+	THUNDERBOLT_SERIES = 2,
+	INVADER_SERIES = 3,
+	VENTURA_SERIES = 4,
+	AERO_SERIES = 5,
+};
+
+struct megasas_register_set {
+	u32 doorbell;
+	u32 fusion_seq_offset;
+	u32 fusion_host_diag;
+	u32 reserved_01;
+	u32 inbound_msg_0;
+	u32 inbound_msg_1;
+	u32 outbound_msg_0;
+	u32 outbound_msg_1;
+	u32 inbound_doorbell;
+	u32 inbound_intr_status;
+	u32 inbound_intr_mask;
+	u32 outbound_doorbell;
+	u32 outbound_intr_status;
+	u32 outbound_intr_mask;
+	u32 reserved_1[2];
+	u32 inbound_queue_port;
+	u32 outbound_queue_port;
+	u32 reserved_2[9];
+	u32 reply_post_host_index;
+	u32 reserved_2_2[12];
+	u32 outbound_doorbell_clear;
+	u32 reserved_3[3];
+	u32 outbound_scratch_pad_0;
+	u32 outbound_scratch_pad_1;
+	u32 outbound_scratch_pad_2;
+	u32 outbound_scratch_pad_3;
+	u32 inbound_low_queue_port;
+	u32 inbound_high_queue_port;
+	u32 inbound_single_queue_port;
+	u32 res_6[11];
+	u32 host_diag;
+	u32 seq_offset;
+	u32 index_registers[807];
+};
+
+struct megasas_sge32 {
+	__le32 phys_addr;
+	__le32 length;
+};
+
+struct megasas_sge64 {
+	__le64 phys_addr;
+	__le32 length;
+} __attribute__((packed));
+
+struct megasas_sge_skinny {
+	__le64 phys_addr;
+	__le32 length;
+	__le32 flag;
+};
+
+union megasas_sgl {
+	struct megasas_sge32 sge32[1];
+	struct megasas_sge64 sge64[1];
+	struct megasas_sge_skinny sge_skinny[1];
+};
+
+struct megasas_header {
+	u8 cmd;
+	u8 sense_len;
+	u8 cmd_status;
+	u8 scsi_status;
+	u8 target_id;
+	u8 lun;
+	u8 cdb_len;
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 data_xferlen;
+};
+
+union _MFI_CAPABILITIES {
+	struct {
+		u32 support_fp_remote_lun: 1;
+		u32 support_additional_msix: 1;
+		u32 support_fastpath_wb: 1;
+		u32 support_max_255lds: 1;
+		u32 support_ndrive_r1_lb: 1;
+		u32 support_core_affinity: 1;
+		u32 security_protocol_cmds_fw: 1;
+		u32 support_ext_queue_depth: 1;
+		u32 support_ext_io_size: 1;
+		u32 support_vfid_in_ioframe: 1;
+		u32 support_fp_rlbypass: 1;
+		u32 support_qd_throttling: 1;
+		u32 support_pd_map_target_id: 1;
+		u32 support_64bit_mode: 1;
+		u32 support_nvme_passthru: 1;
+		u32 support_fw_exposed_dev_list: 1;
+		u32 reserved: 16;
+	} mfi_capabilities;
+	__le32 reg;
+};
+
+typedef union _MFI_CAPABILITIES MFI_CAPABILITIES;
+
+struct megasas_init_frame {
+	u8 cmd;
+	u8 reserved_0;
+	u8 cmd_status;
+	u8 reserved_1;
+	MFI_CAPABILITIES driver_operations;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 replyqueue_mask;
+	__le32 data_xfer_len;
+	__le32 queue_info_new_phys_addr_lo;
+	__le32 queue_info_new_phys_addr_hi;
+	__le32 queue_info_old_phys_addr_lo;
+	__le32 queue_info_old_phys_addr_hi;
+	__le32 reserved_4[2];
+	__le32 system_info_lo;
+	__le32 system_info_hi;
+	__le32 reserved_5[2];
+};
+
+struct megasas_init_queue_info {
+	__le32 init_flags;
+	__le32 reply_queue_entries;
+	__le32 reply_queue_start_phys_addr_lo;
+	__le32 reply_queue_start_phys_addr_hi;
+	__le32 producer_index_phys_addr_lo;
+	__le32 producer_index_phys_addr_hi;
+	__le32 consumer_index_phys_addr_lo;
+	__le32 consumer_index_phys_addr_hi;
+};
+
+struct megasas_io_frame {
+	u8 cmd;
+	u8 sense_len;
+	u8 cmd_status;
+	u8 scsi_status;
+	u8 target_id;
+	u8 access_byte;
+	u8 reserved_0;
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 lba_count;
+	__le32 sense_buf_phys_addr_lo;
+	__le32 sense_buf_phys_addr_hi;
+	__le32 start_lba_lo;
+	__le32 start_lba_hi;
+	union megasas_sgl sgl;
+};
+
+struct megasas_pthru_frame {
+	u8 cmd;
+	u8 sense_len;
+	u8 cmd_status;
+	u8 scsi_status;
+	u8 target_id;
+	u8 lun;
+	u8 cdb_len;
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 data_xfer_len;
+	__le32 sense_buf_phys_addr_lo;
+	__le32 sense_buf_phys_addr_hi;
+	u8 cdb[16];
+	union megasas_sgl sgl;
+};
+
+struct megasas_dcmd_frame {
+	u8 cmd;
+	u8 reserved_0;
+	u8 cmd_status;
+	u8 reserved_1[4];
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 data_xfer_len;
+	__le32 opcode;
+	union {
+		u8 b[12];
+		__le16 s[6];
+		__le32 w[3];
+	} mbox;
+	union megasas_sgl sgl;
+};
+
+struct megasas_abort_frame {
+	u8 cmd;
+	u8 reserved_0;
+	u8 cmd_status;
+	u8 reserved_1;
+	__le32 reserved_2;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 reserved_3;
+	__le32 reserved_4;
+	__le32 abort_context;
+	__le32 pad_1;
+	__le32 abort_mfi_phys_addr_lo;
+	__le32 abort_mfi_phys_addr_hi;
+	__le32 reserved_5[6];
+};
+
+struct megasas_smp_frame {
+	u8 cmd;
+	u8 reserved_1;
+	u8 cmd_status;
+	u8 connection_status;
+	u8 reserved_2[3];
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 data_xfer_len;
+	__le64 sas_addr;
+	union {
+		struct megasas_sge32 sge32[2];
+		struct megasas_sge64 sge64[2];
+	} sgl;
+};
+
+struct megasas_stp_frame {
+	u8 cmd;
+	u8 reserved_1;
+	u8 cmd_status;
+	u8 reserved_2;
+	u8 target_id;
+	u8 reserved_3[2];
+	u8 sge_count;
+	__le32 context;
+	__le32 pad_0;
+	__le16 flags;
+	__le16 timeout;
+	__le32 data_xfer_len;
+	__le16 fis[10];
+	__le32 stp_flags;
+	union {
+		struct megasas_sge32 sge32[2];
+		struct megasas_sge64 sge64[2];
+	} sgl;
+};
+
+union megasas_frame {
+	struct megasas_header hdr;
+	struct megasas_init_frame init;
+	struct megasas_io_frame io;
+	struct megasas_pthru_frame pthru;
+	struct megasas_dcmd_frame dcmd;
+	struct megasas_abort_frame abort;
+	struct megasas_smp_frame smp;
+	struct megasas_stp_frame stp;
+	u8 raw_bytes[64];
+};
+
+struct MR_PRIV_DEVICE {
+	bool is_tm_capable;
+	bool tm_busy;
+	atomic_t sdev_priv_busy;
+	atomic_t r1_ldio_hint;
+	u8 interface_type;
+	u8 task_abort_tmo;
+	u8 target_reset_tmo;
+};
+
+union megasas_evt_class_locale {
+	struct {
+		u16 locale;
+		u8 reserved;
+		s8 class;
+	} members;
+	u32 word;
+};
+
+struct megasas_evt_log_info {
+	__le32 newest_seq_num;
+	__le32 oldest_seq_num;
+	__le32 clear_seq_num;
+	__le32 shutdown_seq_num;
+	__le32 boot_seq_num;
+};
+
+struct megasas_progress {
+	__le16 progress;
+	__le16 elapsed_seconds;
+};
+
+struct megasas_evtarg_ld {
+	u16 target_id;
+	u8 ld_index;
+	u8 reserved;
+};
+
+struct megasas_evtarg_pd {
+	u16 device_id;
+	u8 encl_index;
+	u8 slot_number;
+};
+
+struct megasas_evt_detail {
+	__le32 seq_num;
+	__le32 time_stamp;
+	__le32 code;
+	union megasas_evt_class_locale cl;
+	u8 arg_type;
+	u8 reserved1[15];
+	union {
+		struct {
+			struct megasas_evtarg_pd pd;
+			u8 cdb_length;
+			u8 sense_length;
+			u8 reserved[2];
+			u8 cdb[16];
+			u8 sense[64];
+		} cdbSense;
+		struct megasas_evtarg_ld ld;
+		struct {
+			struct megasas_evtarg_ld ld;
+			__le64 count;
+		} __attribute__((packed)) ld_count;
+		struct {
+			__le64 lba;
+			struct megasas_evtarg_ld ld;
+		} __attribute__((packed)) ld_lba;
+		struct {
+			struct megasas_evtarg_ld ld;
+			__le32 prevOwner;
+			__le32 newOwner;
+		} ld_owner;
+		struct {
+			u64 ld_lba;
+			u64 pd_lba;
+			struct megasas_evtarg_ld ld;
+			struct megasas_evtarg_pd pd;
+		} ld_lba_pd_lba;
+		struct {
+			struct megasas_evtarg_ld ld;
+			struct megasas_progress prog;
+		} ld_prog;
+		struct {
+			struct megasas_evtarg_ld ld;
+			u32 prev_state;
+			u32 new_state;
+		} ld_state;
+		struct {
+			u64 strip;
+			struct megasas_evtarg_ld ld;
+		} __attribute__((packed)) ld_strip;
+		struct megasas_evtarg_pd pd;
+		struct {
+			struct megasas_evtarg_pd pd;
+			u32 err;
+		} pd_err;
+		struct {
+			u64 lba;
+			struct megasas_evtarg_pd pd;
+		} __attribute__((packed)) pd_lba;
+		struct {
+			u64 lba;
+			struct megasas_evtarg_pd pd;
+			struct megasas_evtarg_ld ld;
+		} pd_lba_ld;
+		struct {
+			struct megasas_evtarg_pd pd;
+			struct megasas_progress prog;
+		} pd_prog;
+		struct {
+			struct megasas_evtarg_pd pd;
+			u32 prevState;
+			u32 newState;
+		} pd_state;
+		struct {
+			u16 vendorId;
+			__le16 deviceId;
+			u16 subVendorId;
+			u16 subDeviceId;
+		} pci;
+		u32 rate;
+		char str[96];
+		struct {
+			u32 rtc;
+			u32 elapsedSeconds;
+		} time;
+		struct {
+			u32 ecar;
+			u32 elog;
+			char str[64];
+		} ecc;
+		u8 b[96];
+		__le16 s[48];
+		__le32 w[24];
+		__le64 d[12];
+	} args;
+	char description[128];
+};
+
+struct megasas_aen_event {
+	struct delayed_work hotplug_work;
+	struct megasas_instance *instance;
+};
+
+struct MR_DRV_SYSTEM_INFO {
+	u8 infoVersion;
+	u8 systemIdLength;
+	u16 reserved0;
+	u8 systemId[64];
+	u8 reserved[1980];
+};
+
+enum MR_PD_TYPE {
+	UNKNOWN_DRIVE = 0,
+	PARALLEL_SCSI = 1,
+	SAS_PD = 2,
+	SATA_PD = 3,
+	FC_PD = 4,
+	NVME_PD = 5,
+};
+
+enum MR_PERF_MODE {
+	MR_BALANCED_PERF_MODE = 0,
+	MR_IOPS_PERF_MODE = 1,
+	MR_LATENCY_PERF_MODE = 2,
+};
+
+enum MEGASAS_LD_TARGET_ID_STATUS {
+	LD_TARGET_ID_INITIAL = 0,
+	LD_TARGET_ID_ACTIVE = 1,
+	LD_TARGET_ID_DELETED = 2,
+};
+
+struct MR_LD_VF_MAP {
+	u32 size;
+	union MR_LD_REF ref;
+	u8 ldVfCount;
+	u8 reserved[6];
+	u8 policy[1];
+};
+
+struct MR_LD_VF_AFFILIATION {
+	u32 size;
+	u8 ldCount;
+	u8 vfCount;
+	u8 thisVf;
+	u8 reserved[9];
+	struct MR_LD_VF_MAP map[1];
+};
+
+struct MR_LD_VF_MAP_111 {
+	u8 targetId;
+	u8 reserved[3];
+	u8 policy[8];
+};
+
+struct MR_LD_VF_AFFILIATION_111 {
+	u8 vdCount;
+	u8 vfCount;
+	u8 thisVf;
+	u8 reserved[5];
+	struct MR_LD_VF_MAP_111 map[64];
+};
+
+struct MR_CTRL_HB_HOST_MEM {
+	struct {
+		u32 fwCounter;
+		struct {
+			u32 debugmode: 1;
+			u32 reserved: 31;
+		} debug;
+		u32 reserved_fw[6];
+		u32 driverCounter;
+		u32 reserved_driver[7];
+	} HB;
+	u8 pad[960];
+};
+
+struct megasas_instance_template {
+	void (*fire_cmd)(struct megasas_instance *, dma_addr_t, u32, struct megasas_register_set *);
+	void (*enable_intr)(struct megasas_instance *);
+	void (*disable_intr)(struct megasas_instance *);
+	int (*clear_intr)(struct megasas_instance *);
+	u32 (*read_fw_status_reg)(struct megasas_instance *);
+	int (*adp_reset)(struct megasas_instance *, struct megasas_register_set *);
+	int (*check_reset)(struct megasas_instance *, struct megasas_register_set *);
+	irqreturn_t (*service_isr)(int, void *);
+	void (*tasklet)(long unsigned int);
+	u32 (*init_adapter)(struct megasas_instance *);
+	u32 (*build_and_issue_cmd)(struct megasas_instance *, struct scsi_cmnd *);
+	void (*issue_dcmd)(struct megasas_instance *, struct megasas_cmd *);
+};
+
+struct IOV_111 {
+	u8 maxVFsSupported;
+	u8 numVFsEnabled;
+	u8 requestorId;
+	u8 reserved[5];
+};
+
+enum {
+	MEGASAS_HBA_OPERATIONAL = 0,
+	MEGASAS_ADPRESET_SM_INFAULT = 1,
+	MEGASAS_ADPRESET_SM_FW_RESET_SUCCESS = 2,
+	MEGASAS_ADPRESET_SM_OPERATIONAL = 3,
+	MEGASAS_HW_CRITICAL_ERROR = 4,
+	MEGASAS_ADPRESET_SM_POLLING = 5,
+	MEGASAS_ADPRESET_INPROG_SIGN = 3735936685,
+};
+
+struct megasas_cmd_priv {
+	void *cmd_priv;
+	u8 status;
+};
+
+struct megasas_iocpacket {
+	u16 host_no;
+	u16 __pad1;
+	u32 sgl_off;
+	u32 sge_count;
+	u32 sense_off;
+	u32 sense_len;
+	union {
+		u8 raw[128];
+		struct megasas_header hdr;
+	} frame;
+	struct iovec sgl[16];
+} __attribute__((packed));
+
+struct megasas_aen {
+	u16 host_no;
+	u16 __pad1;
+	u32 seq_num;
+	u32 class_locale_word;
+};
+
+struct compat_megasas_iocpacket {
+	u16 host_no;
+	u16 __pad1;
+	u32 sgl_off;
+	u32 sge_count;
+	u32 sense_off;
+	u32 sense_len;
+	union {
+		u8 raw[128];
+		struct megasas_header hdr;
+	} frame;
+	struct compat_iovec sgl[16];
+};
+
+struct megasas_mgmt_info {
+	u16 count;
+	struct megasas_instance *instance[1024];
+	int max_index;
+};
+
+enum MEGASAS_OCR_CAUSE {
+	FW_FAULT_OCR = 0,
+	SCSIIO_TIMEOUT_OCR = 1,
+	MFI_IO_TIMEOUT_OCR = 2,
+};
+
+enum DCMD_RETURN_STATUS {
+	DCMD_SUCCESS = 0,
+	DCMD_TIMEOUT = 1,
+	DCMD_FAILED = 2,
+	DCMD_BUSY = 3,
+	DCMD_INIT = 255,
+};
+
+typedef u8 U8___2;
+
+typedef __le16 U16___2;
+
+typedef __le32 U32___2;
+
+typedef __le64 U64___2;
+
+struct _MPI2_SYSTEM_INTERFACE_REGS {
+	U32___2 Doorbell;
+	U32___2 WriteSequence;
+	U32___2 HostDiagnostic;
+	U32___2 Reserved1;
+	U32___2 DiagRWData;
+	U32___2 DiagRWAddressLow;
+	U32___2 DiagRWAddressHigh;
+	U32___2 Reserved2[5];
+	U32___2 HostInterruptStatus;
+	U32___2 HostInterruptMask;
+	U32___2 DCRData;
+	U32___2 DCRAddress;
+	U32___2 Reserved3[2];
+	U32___2 ReplyFreeHostIndex;
+	U32___2 Reserved4[8];
+	U32___2 ReplyPostHostIndex;
+	U32___2 Reserved5;
+	U32___2 HCBSize;
+	U32___2 HCBAddressLow;
+	U32___2 HCBAddressHigh;
+	U32___2 Reserved6[12];
+	U32___2 Scratchpad[4];
+	U32___2 RequestDescriptorPostLow;
+	U32___2 RequestDescriptorPostHigh;
+	U32___2 AtomicRequestDescriptorPost;
+	U32___2 Reserved7[13];
+};
+
+typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS Mpi2SystemInterfaceRegs_t;
+
+struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 LMID;
+	U16___2 DescriptorTypeDependent;
+};
+
+typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR MPI2_DEFAULT_REQUEST_DESCRIPTOR;
+
+struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 LMID;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR;
+
+struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 LMID;
+	U16___2 DevHandle;
+};
+
+typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR MPI2_SCSI_IO_REQUEST_DESCRIPTOR;
+
+struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 LMID;
+	U16___2 IoIndex;
+};
+
+typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR;
+
+struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 LMID;
+	U16___2 Reserved;
+};
+
+typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR;
+
+typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR;
+
+typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR;
+
+union _MPI2_REQUEST_DESCRIPTOR_UNION {
+	MPI2_DEFAULT_REQUEST_DESCRIPTOR Default;
+	MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority;
+	MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO;
+	MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget;
+	MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator;
+	MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR FastPathSCSIIO;
+	MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR PCIeEncapsulated;
+	U64___2 Words;
+};
+
+typedef union _MPI2_REQUEST_DESCRIPTOR_UNION Mpi2RequestDescriptorUnion_t;
+
+struct _MPI26_ATOMIC_REQUEST_DESCRIPTOR {
+	U8___2 RequestFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+};
+
+typedef struct _MPI26_ATOMIC_REQUEST_DESCRIPTOR Mpi26AtomicRequestDescriptor_t;
+
+struct _MPI2_DEFAULT_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U16___2 DescriptorTypeDependent1;
+	U32___2 DescriptorTypeDependent2;
+};
+
+typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR MPI2_DEFAULT_REPLY_DESCRIPTOR;
+
+struct _MPI2_ADDRESS_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U32___2 ReplyFrameAddress;
+};
+
+typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR MPI2_ADDRESS_REPLY_DESCRIPTOR;
+
+struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U16___2 TaskTag;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR;
+
+struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U8___2 SequenceNumber;
+	U8___2 Reserved1;
+	U16___2 IoIndex;
+};
+
+typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR;
+
+struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U8___2 VP_ID;
+	U8___2 Flags;
+	U16___2 InitiatorDevHandle;
+	U16___2 IoIndex;
+};
+
+typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR;
+
+struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR {
+	U8___2 ReplyFlags;
+	U8___2 MSIxIndex;
+	U16___2 SMID;
+	U32___2 Reserved;
+};
+
+typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR;
+
+typedef MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR;
+
+typedef MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR;
+
+union _MPI2_REPLY_DESCRIPTORS_UNION {
+	MPI2_DEFAULT_REPLY_DESCRIPTOR Default;
+	MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply;
+	MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess;
+	MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess;
+	MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer;
+	MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess;
+	MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR FastPathSCSIIOSuccess;
+	MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR PCIeEncapsulatedSuccess;
+	U64___2 Words;
+};
+
+typedef union _MPI2_REPLY_DESCRIPTORS_UNION Mpi2ReplyDescriptorsUnion_t;
+
+struct _MPI2_REQUEST_HEADER {
+	U16___2 FunctionDependent1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 FunctionDependent2;
+	U8___2 FunctionDependent3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_REQUEST_HEADER MPI2RequestHeader_t;
+
+struct _MPI2_DEFAULT_REPLY {
+	U16___2 FunctionDependent1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 FunctionDependent2;
+	U8___2 FunctionDependent3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U16___2 FunctionDependent5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI2_DEFAULT_REPLY MPI2DefaultReply_t;
+
+struct _MPI2_VERSION_STRUCT {
+	U8___2 Dev;
+	U8___2 Unit;
+	U8___2 Minor;
+	U8___2 Major;
+};
+
+typedef struct _MPI2_VERSION_STRUCT MPI2_VERSION_STRUCT;
+
+union _MPI2_VERSION_UNION {
+	MPI2_VERSION_STRUCT Struct;
+	U32___2 Word;
+};
+
+typedef union _MPI2_VERSION_UNION MPI2_VERSION_UNION;
+
+struct _MPI2_SGE_SIMPLE32 {
+	U32___2 FlagsLength;
+	U32___2 Address;
+};
+
+typedef struct _MPI2_SGE_SIMPLE32 Mpi2SGESimple32_t;
+
+struct _MPI2_SGE_SIMPLE64 {
+	U32___2 FlagsLength;
+	U64___2 Address;
+} __attribute__((packed));
+
+typedef struct _MPI2_SGE_SIMPLE64 Mpi2SGESimple64_t;
+
+struct _MPI2_SGE_SIMPLE_UNION {
+	U32___2 FlagsLength;
+	union {
+		U32___2 Address32;
+		U64___2 Address64;
+	} u;
+} __attribute__((packed));
+
+typedef struct _MPI2_SGE_SIMPLE_UNION MPI2_SGE_SIMPLE_UNION;
+
+struct _MPI2_SGE_CHAIN_UNION {
+	U16___2 Length;
+	U8___2 NextChainOffset;
+	U8___2 Flags;
+	union {
+		U32___2 Address32;
+		U64___2 Address64;
+	} u;
+} __attribute__((packed));
+
+typedef struct _MPI2_SGE_CHAIN_UNION MPI2_SGE_CHAIN_UNION;
+
+struct _MPI2_IEEE_SGE_SIMPLE32 {
+	U32___2 Address;
+	U32___2 FlagsLength;
+};
+
+typedef struct _MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_SIMPLE32;
+
+struct _MPI2_IEEE_SGE_SIMPLE64 {
+	U64___2 Address;
+	U32___2 Length;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 Flags;
+};
+
+typedef struct _MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_SIMPLE64;
+
+union _MPI2_IEEE_SGE_SIMPLE_UNION {
+	MPI2_IEEE_SGE_SIMPLE32 Simple32;
+	MPI2_IEEE_SGE_SIMPLE64 Simple64;
+};
+
+typedef union _MPI2_IEEE_SGE_SIMPLE_UNION MPI2_IEEE_SGE_SIMPLE_UNION;
+
+typedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32;
+
+typedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64;
+
+union _MPI2_IEEE_SGE_CHAIN_UNION {
+	MPI2_IEEE_SGE_CHAIN32 Chain32;
+	MPI2_IEEE_SGE_CHAIN64 Chain64;
+};
+
+typedef union _MPI2_IEEE_SGE_CHAIN_UNION MPI2_IEEE_SGE_CHAIN_UNION;
+
+struct _MPI25_IEEE_SGE_CHAIN64 {
+	U64___2 Address;
+	U32___2 Length;
+	U16___2 Reserved1;
+	U8___2 NextChainOffset;
+	U8___2 Flags;
+};
+
+typedef struct _MPI25_IEEE_SGE_CHAIN64 MPI25_IEEE_SGE_CHAIN64;
+
+typedef struct _MPI25_IEEE_SGE_CHAIN64 Mpi25IeeeSgeChain64_t;
+
+typedef struct _MPI25_IEEE_SGE_CHAIN64 *pMpi25IeeeSgeChain64_t;
+
+union _MPI25_SGE_IO_UNION {
+	MPI2_IEEE_SGE_SIMPLE64 IeeeSimple;
+	MPI25_IEEE_SGE_CHAIN64 IeeeChain;
+};
+
+typedef union _MPI25_SGE_IO_UNION MPI25_SGE_IO_UNION;
+
+union _MPI2_SGE_IO_UNION {
+	MPI2_SGE_SIMPLE_UNION MpiSimple;
+	MPI2_SGE_CHAIN_UNION MpiChain;
+	MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
+	MPI2_IEEE_SGE_CHAIN_UNION IeeeChain;
+};
+
+typedef union _MPI2_SGE_IO_UNION MPI2_SGE_IO_UNION;
+
+struct _MPI2_IOC_INIT_REQUEST {
+	U8___2 WhoInit;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 MsgVersion;
+	U16___2 HeaderVersion;
+	U32___2 Reserved5;
+	U16___2 ConfigurationFlags;
+	U8___2 HostPageSize;
+	U8___2 HostMSIxVectors;
+	U16___2 Reserved8;
+	U16___2 SystemRequestFrameSize;
+	U16___2 ReplyDescriptorPostQueueDepth;
+	U16___2 ReplyFreeQueueDepth;
+	U32___2 SenseBufferAddressHigh;
+	U32___2 SystemReplyAddressHigh;
+	U64___2 SystemRequestFrameBaseAddress;
+	U64___2 ReplyDescriptorPostQueueAddress;
+	U64___2 ReplyFreeQueueAddress;
+	U64___2 TimeStamp;
+};
+
+typedef struct _MPI2_IOC_INIT_REQUEST Mpi2IOCInitRequest_t;
+
+struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY {
+	U64___2 RDPQBaseAddress;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+};
+
+typedef struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY Mpi2IOCInitRDPQArrayEntry;
+
+struct _MPI2_IOC_INIT_REPLY {
+	U8___2 WhoInit;
+	U8___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Reserved5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI2_IOC_INIT_REPLY Mpi2IOCInitReply_t;
+
+struct _MPI2_IOC_FACTS_REQUEST {
+	U16___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI2_IOC_FACTS_REQUEST Mpi2IOCFactsRequest_t;
+
+struct _MPI2_IOC_FACTS_REPLY {
+	U16___2 MsgVersion;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 HeaderVersion;
+	U8___2 IOCNumber;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U16___2 IOCExceptions;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U8___2 MaxChainDepth;
+	U8___2 WhoInit;
+	U8___2 NumberOfPorts;
+	U8___2 MaxMSIxVectors;
+	U16___2 RequestCredit;
+	U16___2 ProductID;
+	U32___2 IOCCapabilities;
+	MPI2_VERSION_UNION FWVersion;
+	U16___2 IOCRequestFrameSize;
+	U16___2 IOCMaxChainSegmentSize;
+	U16___2 MaxInitiators;
+	U16___2 MaxTargets;
+	U16___2 MaxSasExpanders;
+	U16___2 MaxEnclosures;
+	U16___2 ProtocolFlags;
+	U16___2 HighPriorityCredit;
+	U16___2 MaxReplyDescriptorPostQueueDepth;
+	U8___2 ReplyFrameSize;
+	U8___2 MaxVolumes;
+	U16___2 MaxDevHandle;
+	U16___2 MaxPersistentEntries;
+	U16___2 MinDevHandle;
+	U8___2 CurrentHostPageSize;
+	U8___2 Reserved4;
+	U8___2 SGEModifierMask;
+	U8___2 SGEModifierValue;
+	U8___2 SGEModifierShift;
+	U8___2 Reserved5;
+};
+
+typedef struct _MPI2_IOC_FACTS_REPLY Mpi2IOCFactsReply_t;
+
+struct _MPI2_PORT_FACTS_REQUEST {
+	U16___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 PortNumber;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+};
+
+typedef struct _MPI2_PORT_FACTS_REQUEST Mpi2PortFactsRequest_t;
+
+struct _MPI2_PORT_FACTS_REPLY {
+	U16___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 PortNumber;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U16___2 Reserved4;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U8___2 Reserved5;
+	U8___2 PortType;
+	U16___2 Reserved6;
+	U16___2 MaxPostedCmdBuffers;
+	U16___2 Reserved7;
+};
+
+typedef struct _MPI2_PORT_FACTS_REPLY Mpi2PortFactsReply_t;
+
+struct _MPI2_PORT_ENABLE_REQUEST {
+	U16___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U8___2 Reserved2;
+	U8___2 PortFlags;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI2_PORT_ENABLE_REQUEST Mpi2PortEnableRequest_t;
+
+struct _MPI2_PORT_ENABLE_REPLY {
+	U16___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U8___2 Reserved2;
+	U8___2 PortFlags;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Reserved5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI2_PORT_ENABLE_REPLY Mpi2PortEnableReply_t;
+
+struct _MPI2_EVENT_NOTIFICATION_REQUEST {
+	U16___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U32___2 Reserved5;
+	U32___2 Reserved6;
+	U32___2 EventMasks[4];
+	U16___2 SASBroadcastPrimitiveMasks;
+	U16___2 SASNotifyPrimitiveMasks;
+	U32___2 Reserved8;
+};
+
+typedef struct _MPI2_EVENT_NOTIFICATION_REQUEST Mpi2EventNotificationRequest_t;
+
+struct _MPI2_EVENT_NOTIFICATION_REPLY {
+	U16___2 EventDataLength;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved1;
+	U8___2 AckRequired;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U16___2 Reserved3;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U16___2 Event;
+	U16___2 Reserved4;
+	U32___2 EventContext;
+	U32___2 EventData[0];
+};
+
+typedef struct _MPI2_EVENT_NOTIFICATION_REPLY Mpi2EventNotificationReply_t;
+
+struct _MPI2_EVENT_DATA_SAS_DISCOVERY {
+	U8___2 Flags;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U8___2 Reserved1;
+	U32___2 DiscoveryStatus;
+};
+
+typedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY Mpi2EventDataSasDiscovery_t;
+
+struct _MPI26_EVENT_DATA_PCIE_ENUMERATION {
+	U8___2 Flags;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U8___2 Reserved1;
+	U32___2 EnumerationStatus;
+};
+
+typedef struct _MPI26_EVENT_DATA_PCIE_ENUMERATION Mpi26EventDataPCIeEnumeration_t;
+
+struct _MPI2_EVENT_ACK_REQUEST {
+	U16___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Event;
+	U16___2 Reserved5;
+	U32___2 EventContext;
+};
+
+typedef struct _MPI2_EVENT_ACK_REQUEST Mpi2EventAckRequest_t;
+
+struct _MPI25_FW_UPLOAD_REQUEST {
+	U8___2 ImageType;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U32___2 Reserved5;
+	U32___2 Reserved6;
+	U32___2 Reserved7;
+	U32___2 ImageOffset;
+	U32___2 ImageSize;
+	MPI25_SGE_IO_UNION SGL;
+};
+
+typedef struct _MPI25_FW_UPLOAD_REQUEST Mpi25FWUploadRequest_t;
+
+struct _MPI2_FW_UPLOAD_REPLY {
+	U8___2 ImageType;
+	U8___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Reserved5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 ActualImageSize;
+};
+
+typedef struct _MPI2_FW_UPLOAD_REPLY Mpi2FWUploadReply_t;
+
+struct _MPI26_IOUNIT_CONTROL_REQUEST {
+	U8___2 Operation;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 DevHandle;
+	U8___2 IOCParameter;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U16___2 Reserved4;
+	U8___2 PhyNum;
+	U8___2 PrimFlags;
+	U32___2 Primitive;
+	U8___2 LookupMethod;
+	U8___2 Reserved5;
+	U16___2 SlotNumber;
+	U64___2 LookupAddress;
+	U32___2 IOCParameterValue;
+	U32___2 Reserved7;
+	U32___2 Reserved8;
+} __attribute__((packed));
+
+typedef struct _MPI26_IOUNIT_CONTROL_REQUEST Mpi26IoUnitControlRequest_t;
+
+struct _MPI26_IOUNIT_CONTROL_REPLY {
+	U8___2 Operation;
+	U8___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 DevHandle;
+	U8___2 IOCParameter;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U16___2 Reserved4;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI26_IOUNIT_CONTROL_REPLY Mpi26IoUnitControlReply_t;
+
+struct _MPI2_CONFIG_PAGE_HEADER {
+	U8___2 PageVersion;
+	U8___2 PageLength;
+	U8___2 PageNumber;
+	U8___2 PageType;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_HEADER MPI2_CONFIG_PAGE_HEADER;
+
+struct _MPI2_CONFIG_EXTENDED_PAGE_HEADER {
+	U8___2 PageVersion;
+	U8___2 Reserved1;
+	U8___2 PageNumber;
+	U8___2 PageType;
+	U16___2 ExtPageLength;
+	U8___2 ExtPageType;
+	U8___2 Reserved2;
+};
+
+typedef struct _MPI2_CONFIG_EXTENDED_PAGE_HEADER MPI2_CONFIG_EXTENDED_PAGE_HEADER;
+
+struct _MPI2_CONFIG_REQUEST {
+	U8___2 Action;
+	U8___2 SGLFlags;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 ExtPageLength;
+	U8___2 ExtPageType;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 ProxyVF_ID;
+	U16___2 Reserved4;
+	U32___2 Reserved3;
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 PageAddress;
+	MPI2_SGE_IO_UNION PageBufferSGE;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_REQUEST Mpi2ConfigRequest_t;
+
+struct _MPI2_CONFIG_REPLY {
+	U8___2 Action;
+	U8___2 SGLFlags;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 ExtPageLength;
+	U8___2 ExtPageType;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U16___2 Reserved2;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	MPI2_CONFIG_PAGE_HEADER Header;
+};
+
+typedef struct _MPI2_CONFIG_REPLY Mpi2ConfigReply_t;
+
+struct _MPI2_CONFIG_PAGE_MAN_0 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 ChipName[16];
+	U8___2 ChipRevision[8];
+	U8___2 BoardName[16];
+	U8___2 BoardAssembly[16];
+	U8___2 BoardTracerNumber[16];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_MAN_0 Mpi2ManufacturingPage0_t;
+
+struct _MPI2_CONFIG_PAGE_MAN_1 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 VPD[256];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_MAN_1 Mpi2ManufacturingPage1_t;
+
+struct _MPI2_CONFIG_PAGE_IO_UNIT_0 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U64___2 UniqueValue;
+	MPI2_VERSION_UNION NvdataVersionDefault;
+	MPI2_VERSION_UNION NvdataVersionPersistent;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_0 Mpi2IOUnitPage0_t;
+
+struct _MPI2_CONFIG_PAGE_IO_UNIT_1 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 Flags;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_1 Mpi2IOUnitPage1_t;
+
+struct _MPI2_IOUNIT8_SENSOR {
+	U16___2 Flags;
+	U16___2 Reserved1;
+	U16___2 Threshold[4];
+	U32___2 Reserved2;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+};
+
+typedef struct _MPI2_IOUNIT8_SENSOR MPI2_IOUNIT8_SENSOR;
+
+struct _MPI2_CONFIG_PAGE_IO_UNIT_8 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+	U8___2 NumSensors;
+	U8___2 PollingInterval;
+	U16___2 Reserved3;
+	MPI2_IOUNIT8_SENSOR Sensor[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_8 Mpi2IOUnitPage8_t;
+
+struct _MPI2_CONFIG_PAGE_IOC_1 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 Flags;
+	U32___2 CoalescingTimeout;
+	U8___2 CoalescingDepth;
+	U8___2 PCISlotNum;
+	U8___2 PCIBusNum;
+	U8___2 PCIDomainSegment;
+	U32___2 Reserved1;
+	U32___2 ProductSpecific;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_IOC_1 Mpi2IOCPage1_t;
+
+struct _MPI2_CONFIG_PAGE_IOC_8 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 NumDevsPerEnclosure;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U16___2 MaxPersistentEntries;
+	U16___2 MaxNumPhysicalMappedIDs;
+	U16___2 Flags;
+	U16___2 Reserved3;
+	U16___2 IRVolumeMappingFlags;
+	U16___2 Reserved4;
+	U32___2 Reserved5;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_IOC_8 Mpi2IOCPage8_t;
+
+struct _MPI2_BOOT_DEVICE_ADAPTER_ORDER {
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+	U32___2 Reserved5;
+	U32___2 Reserved6;
+};
+
+typedef struct _MPI2_BOOT_DEVICE_ADAPTER_ORDER MPI2_BOOT_DEVICE_ADAPTER_ORDER;
+
+struct _MPI2_BOOT_DEVICE_SAS_WWID {
+	U64___2 SASAddress;
+	U8___2 LUN[8];
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+};
+
+typedef struct _MPI2_BOOT_DEVICE_SAS_WWID MPI2_BOOT_DEVICE_SAS_WWID;
+
+struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT {
+	U64___2 EnclosureLogicalID;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+	U16___2 SlotNumber;
+	U16___2 Reserved3;
+	U32___2 Reserved4;
+};
+
+typedef struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT MPI2_BOOT_DEVICE_ENCLOSURE_SLOT;
+
+struct _MPI2_BOOT_DEVICE_DEVICE_NAME {
+	U64___2 DeviceName;
+	U8___2 LUN[8];
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+};
+
+typedef struct _MPI2_BOOT_DEVICE_DEVICE_NAME MPI2_BOOT_DEVICE_DEVICE_NAME;
+
+union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE {
+	MPI2_BOOT_DEVICE_ADAPTER_ORDER AdapterOrder;
+	MPI2_BOOT_DEVICE_SAS_WWID SasWwid;
+	MPI2_BOOT_DEVICE_ENCLOSURE_SLOT EnclosureSlot;
+	MPI2_BOOT_DEVICE_DEVICE_NAME DeviceName;
+};
+
+typedef union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE MPI2_BIOSPAGE2_BOOT_DEVICE;
+
+struct _MPI2_CONFIG_PAGE_BIOS_2 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+	U32___2 Reserved5;
+	U32___2 Reserved6;
+	U8___2 ReqBootDeviceForm;
+	U8___2 Reserved7;
+	U16___2 Reserved8;
+	MPI2_BIOSPAGE2_BOOT_DEVICE RequestedBootDevice;
+	U8___2 ReqAltBootDeviceForm;
+	U8___2 Reserved9;
+	U16___2 Reserved10;
+	MPI2_BIOSPAGE2_BOOT_DEVICE RequestedAltBootDevice;
+	U8___2 CurrentBootDeviceForm;
+	U8___2 Reserved11;
+	U16___2 Reserved12;
+	MPI2_BIOSPAGE2_BOOT_DEVICE CurrentBootDevice;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_BIOS_2 Mpi2BiosPage2_t;
+
+struct _MPI2_ADAPTER_INFO {
+	U8___2 PciBusNumber;
+	U8___2 PciDeviceAndFunctionNumber;
+	U16___2 AdapterFlags;
+};
+
+typedef struct _MPI2_ADAPTER_INFO MPI2_ADAPTER_INFO;
+
+struct _MPI2_ADAPTER_ORDER_AUX {
+	U64___2 WWID;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+};
+
+typedef struct _MPI2_ADAPTER_ORDER_AUX MPI2_ADAPTER_ORDER_AUX;
+
+struct _MPI2_CONFIG_PAGE_BIOS_3 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 GlobalFlags;
+	U32___2 BiosVersion;
+	MPI2_ADAPTER_INFO AdapterOrder[4];
+	U32___2 Reserved1;
+	MPI2_ADAPTER_ORDER_AUX AdapterOrderAux[4];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_BIOS_3 Mpi2BiosPage3_t;
+
+struct _MPI2_BIOS4_ENTRY {
+	U64___2 ReassignmentWWID;
+	U64___2 ReassignmentDeviceName;
+};
+
+typedef struct _MPI2_BIOS4_ENTRY MPI2_BIOS4_ENTRY;
+
+struct _MPI2_CONFIG_PAGE_BIOS_4 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 NumPhys;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	MPI2_BIOS4_ENTRY Phy[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_BIOS_4 Mpi2BiosPage4_t;
+
+struct _MPI2_SAS_IO_UNIT1_PHY_DATA {
+	U8___2 Port;
+	U8___2 PortFlags;
+	U8___2 PhyFlags;
+	U8___2 MaxMinLinkRate;
+	U32___2 ControllerPhyDeviceInfo;
+	U16___2 MaxTargetPortConnectTime;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_SAS_IO_UNIT1_PHY_DATA MPI2_SAS_IO_UNIT1_PHY_DATA;
+
+struct _MPI2_CONFIG_PAGE_SASIOUNIT_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 ControlFlags;
+	U16___2 SASNarrowMaxQueueDepth;
+	U16___2 AdditionalControlFlags;
+	U16___2 SASWideMaxQueueDepth;
+	U8___2 NumPhys;
+	U8___2 SATAMaxQDepth;
+	U8___2 ReportDeviceMissingDelay;
+	U8___2 IODeviceMissingDelay;
+	MPI2_SAS_IO_UNIT1_PHY_DATA PhyData[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_1 Mpi2SasIOUnitPage1_t;
+
+struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U64___2 EnclosureLogicalID;
+	U16___2 Flags;
+	U16___2 EnclosureHandle;
+	U16___2 NumSlots;
+	U16___2 StartSlot;
+	U8___2 ChassisSlot;
+	U8___2 EnclosureLevel;
+	U16___2 SEPDevHandle;
+	U8___2 OEMRD;
+	U8___2 Reserved1a;
+	U16___2 Reserved2;
+	U32___2 Reserved3;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 Mpi2SasEnclosurePage0_t;
+
+struct _MPI26_PCIE_IO_UNIT1_PHY_DATA {
+	U8___2 Link;
+	U8___2 LinkFlags;
+	U8___2 PhyFlags;
+	U8___2 MaxMinLinkRate;
+	U32___2 ControllerPhyDeviceInfo;
+	U32___2 Reserved1;
+};
+
+typedef struct _MPI26_PCIE_IO_UNIT1_PHY_DATA MPI26_PCIE_IO_UNIT1_PHY_DATA;
+
+struct _MPI26_CONFIG_PAGE_PIOUNIT_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 ControlFlags;
+	U16___2 Reserved;
+	U16___2 AdditionalControlFlags;
+	U16___2 NVMeMaxQueueDepth;
+	U8___2 NumPhys;
+	U8___2 DMDReportPCIe;
+	U16___2 Reserved2;
+	MPI26_PCIE_IO_UNIT1_PHY_DATA PhyData[1];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_1 Mpi26PCIeIOUnitPage1_t;
+
+struct _MPI2_SCSI_IO_CDB_EEDP32 {
+	U8___2 CDB[20];
+	__be32 PrimaryReferenceTag;
+	U16___2 PrimaryApplicationTag;
+	U16___2 PrimaryApplicationTagMask;
+	U32___2 TransferLength;
+};
+
+typedef struct _MPI2_SCSI_IO_CDB_EEDP32 MPI2_SCSI_IO_CDB_EEDP32;
+
+union _MPI2_SCSI_IO_CDB_UNION {
+	U8___2 CDB32[32];
+	MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
+	MPI2_SGE_SIMPLE_UNION SGE;
+};
+
+typedef union _MPI2_SCSI_IO_CDB_UNION MPI2_SCSI_IO_CDB_UNION;
+
+struct _MPI2_SCSI_IO_REQUEST {
+	U16___2 DevHandle;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U32___2 SenseBufferLowAddress;
+	U16___2 SGLFlags;
+	U8___2 SenseBufferLength;
+	U8___2 Reserved4;
+	U8___2 SGLOffset0;
+	U8___2 SGLOffset1;
+	U8___2 SGLOffset2;
+	U8___2 SGLOffset3;
+	U32___2 SkipCount;
+	U32___2 DataLength;
+	U32___2 BidirectionalDataLength;
+	U16___2 IoFlags;
+	U16___2 EEDPFlags;
+	U32___2 EEDPBlockSize;
+	U32___2 SecondaryReferenceTag;
+	U16___2 SecondaryApplicationTag;
+	U16___2 ApplicationTagTranslationMask;
+	U8___2 LUN[8];
+	U32___2 Control;
+	MPI2_SCSI_IO_CDB_UNION CDB;
+	MPI2_SGE_IO_UNION SGL;
+};
+
+typedef struct _MPI2_SCSI_IO_REQUEST Mpi2SCSIIORequest_t;
+
+union _MPI25_SCSI_IO_CDB_UNION {
+	U8___2 CDB32[32];
+	MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
+	MPI2_IEEE_SGE_SIMPLE64 SGE;
+};
+
+typedef union _MPI25_SCSI_IO_CDB_UNION MPI25_SCSI_IO_CDB_UNION;
+
+struct _MPI25_SCSI_IO_REQUEST {
+	U16___2 DevHandle;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U32___2 SenseBufferLowAddress;
+	U8___2 DMAFlags;
+	U8___2 Reserved5;
+	U8___2 SenseBufferLength;
+	U8___2 Reserved4;
+	U8___2 SGLOffset0;
+	U8___2 SGLOffset1;
+	U8___2 SGLOffset2;
+	U8___2 SGLOffset3;
+	U32___2 SkipCount;
+	U32___2 DataLength;
+	U32___2 BidirectionalDataLength;
+	U16___2 IoFlags;
+	U16___2 EEDPFlags;
+	U16___2 EEDPBlockSize;
+	U16___2 Reserved6;
+	U32___2 SecondaryReferenceTag;
+	U16___2 SecondaryApplicationTag;
+	U16___2 ApplicationTagTranslationMask;
+	U8___2 LUN[8];
+	U32___2 Control;
+	MPI25_SCSI_IO_CDB_UNION CDB;
+	MPI25_SGE_IO_UNION SGL;
+};
+
+typedef struct _MPI25_SCSI_IO_REQUEST Mpi25SCSIIORequest_t;
+
+struct _MPI2_SEP_REQUEST {
+	U16___2 DevHandle;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U8___2 Action;
+	U8___2 Flags;
+	U8___2 Reserved1;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U32___2 SlotStatus;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+	U32___2 Reserved5;
+	U16___2 Slot;
+	U16___2 EnclosureHandle;
+};
+
+typedef struct _MPI2_SEP_REQUEST Mpi2SepRequest_t;
+
+struct _MPI2_SEP_REPLY {
+	U16___2 DevHandle;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U8___2 Action;
+	U8___2 Flags;
+	U8___2 Reserved1;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U16___2 Reserved3;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 SlotStatus;
+	U32___2 Reserved4;
+	U16___2 Slot;
+	U16___2 EnclosureHandle;
+};
+
+typedef struct _MPI2_SEP_REPLY Mpi2SepReply_t;
+
+struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST {
+	U8___2 Operation;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 DevHandle;
+	U8___2 IOCParameter;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U16___2 Reserved4;
+	U8___2 PhyNum;
+	U8___2 PrimFlags;
+	U32___2 Primitive;
+	U8___2 LookupMethod;
+	U8___2 Reserved5;
+	U16___2 SlotNumber;
+	U64___2 LookupAddress;
+	U32___2 IOCParameterValue;
+	U32___2 Reserved7;
+	U32___2 Reserved8;
+} __attribute__((packed));
+
+typedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST Mpi2SasIoUnitControlRequest_t;
+
+struct _MPI2_SAS_IOUNIT_CONTROL_REPLY {
+	U8___2 Operation;
+	U8___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 DevHandle;
+	U8___2 IOCParameter;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U16___2 Reserved4;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY Mpi2SasIoUnitControlReply_t;
+
+struct _MPI26_NVME_ENCAPSULATED_REQUEST {
+	U16___2 DevHandle;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 EncapsulatedCommandLength;
+	U8___2 Reserved1;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U32___2 Reserved3;
+	U64___2 ErrorResponseBaseAddress;
+	U16___2 ErrorResponseAllocationLength;
+	U16___2 Flags;
+	U32___2 DataLength;
+	U8___2 NVMe_Command[4];
+} __attribute__((packed));
+
+typedef struct _MPI26_NVME_ENCAPSULATED_REQUEST Mpi26NVMeEncapsulatedRequest_t;
+
+struct _MPI2_FW_IMAGE_HEADER {
+	U32___2 Signature;
+	U32___2 Signature0;
+	U32___2 Signature1;
+	U32___2 Signature2;
+	MPI2_VERSION_UNION MPIVersion;
+	MPI2_VERSION_UNION FWVersion;
+	MPI2_VERSION_UNION NVDATAVersion;
+	MPI2_VERSION_UNION PackageVersion;
+	U16___2 VendorID;
+	U16___2 ProductID;
+	U16___2 ProtocolFlags;
+	U16___2 Reserved26;
+	U32___2 IOCCapabilities;
+	U32___2 ImageSize;
+	U32___2 NextImageHeaderOffset;
+	U32___2 Checksum;
+	U32___2 Reserved38;
+	U32___2 Reserved3C;
+	U32___2 Reserved40;
+	U32___2 Reserved44;
+	U32___2 Reserved48;
+	U32___2 Reserved4C;
+	U32___2 Reserved50;
+	U32___2 Reserved54;
+	U32___2 Reserved58;
+	U32___2 Reserved5C;
+	U32___2 BootFlags;
+	U32___2 FirmwareVersionNameWhat;
+	U8___2 FirmwareVersionName[32];
+	U32___2 VendorNameWhat;
+	U8___2 VendorName[32];
+	U32___2 PackageNameWhat;
+	U8___2 PackageName[32];
+	U32___2 ReservedD0;
+	U32___2 ReservedD4;
+	U32___2 ReservedD8;
+	U32___2 ReservedDC;
+	U32___2 ReservedE0;
+	U32___2 ReservedE4;
+	U32___2 ReservedE8;
+	U32___2 ReservedEC;
+	U32___2 ReservedF0;
+	U32___2 ReservedF4;
+	U32___2 ReservedF8;
+	U32___2 ReservedFC;
+};
+
+typedef struct _MPI2_FW_IMAGE_HEADER Mpi2FWImageHeader_t;
+
+struct _MPI26_HASH_EXCLUSION_FORMAT {
+	U32___2 Offset;
+	U32___2 Size;
+};
+
+typedef struct _MPI26_HASH_EXCLUSION_FORMAT MPI26_HASH_EXCLUSION_FORMAT;
+
+struct _MPI26_COMPONENT_IMAGE_HEADER {
+	U32___2 Signature0;
+	U32___2 LoadAddress;
+	U32___2 DataSize;
+	U32___2 StartAddress;
+	U32___2 Signature1;
+	U32___2 FlashOffset;
+	U32___2 FlashSize;
+	U32___2 VersionStringOffset;
+	U32___2 BuildDateStringOffset;
+	U32___2 BuildTimeStringOffset;
+	U32___2 EnvironmentVariableOffset;
+	U32___2 ApplicationSpecific;
+	U32___2 Signature2;
+	U32___2 HeaderSize;
+	U32___2 Crc;
+	U8___2 NotFlashImage;
+	U8___2 Compressed;
+	U16___2 Reserved3E;
+	U32___2 SecondaryFlashOffset;
+	U32___2 Reserved44;
+	U32___2 Reserved48;
+	MPI2_VERSION_UNION RMCInterfaceVersion;
+	MPI2_VERSION_UNION Reserved50;
+	MPI2_VERSION_UNION FWVersion;
+	MPI2_VERSION_UNION NvdataVersion;
+	MPI26_HASH_EXCLUSION_FORMAT HashExclusion[4];
+	U32___2 NextImageHeaderOffset;
+	U32___2 Reserved80[32];
+};
+
+typedef struct _MPI26_COMPONENT_IMAGE_HEADER Mpi26ComponentImageHeader_t;
+
+struct SL_WH_MASTER_TRIGGER_T {
+	uint32_t MasterData;
+};
+
+struct SL_WH_EVENT_TRIGGER_T {
+	uint16_t EventValue;
+	uint16_t LogEntryQualifier;
+};
+
+struct SL_WH_EVENT_TRIGGERS_T {
+	uint32_t ValidEntries;
+	struct SL_WH_EVENT_TRIGGER_T EventTriggerEntry[20];
+};
+
+struct SL_WH_SCSI_TRIGGER_T {
+	U8___2 ASCQ;
+	U8___2 ASC;
+	U8___2 SenseKey;
+	U8___2 Reserved;
+};
+
+struct SL_WH_SCSI_TRIGGERS_T {
+	uint32_t ValidEntries;
+	struct SL_WH_SCSI_TRIGGER_T SCSITriggerEntry[20];
+};
+
+struct SL_WH_MPI_TRIGGER_T {
+	uint16_t IOCStatus;
+	uint16_t Reserved;
+	uint32_t IocLogInfo;
+};
+
+struct SL_WH_MPI_TRIGGERS_T {
+	uint32_t ValidEntries;
+	struct SL_WH_MPI_TRIGGER_T MPITriggerEntry[20];
+};
+
+struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 TriggerFlags;
+	U16___2 Reserved0xA;
+	U32___2 Reserved0xC[61];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_0 Mpi26DriverTriggerPage0_t;
+
+struct _MPI26_DRIVER_MASTER_TIGGER_ENTRY {
+	U32___2 MasterTriggerFlags;
+};
+
+typedef struct _MPI26_DRIVER_MASTER_TIGGER_ENTRY MPI26_DRIVER_MASTER_TIGGER_ENTRY;
+
+struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 NumMasterTrigger;
+	U16___2 Reserved0xA;
+	MPI26_DRIVER_MASTER_TIGGER_ENTRY MasterTriggers[1];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_1 Mpi26DriverTriggerPage1_t;
+
+struct _MPI26_DRIVER_MPI_EVENT_TIGGER_ENTRY {
+	U16___2 MPIEventCode;
+	U16___2 MPIEventCodeSpecific;
+};
+
+typedef struct _MPI26_DRIVER_MPI_EVENT_TIGGER_ENTRY MPI26_DRIVER_MPI_EVENT_TIGGER_ENTRY;
+
+struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_2 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 NumMPIEventTrigger;
+	U16___2 Reserved0xA;
+	MPI26_DRIVER_MPI_EVENT_TIGGER_ENTRY MPIEventTriggers[20];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_2 Mpi26DriverTriggerPage2_t;
+
+struct _MPI26_DRIVER_SCSI_SENSE_TIGGER_ENTRY {
+	U8___2 ASCQ;
+	U8___2 ASC;
+	U8___2 SenseKey;
+	U8___2 Reserved;
+};
+
+typedef struct _MPI26_DRIVER_SCSI_SENSE_TIGGER_ENTRY MPI26_DRIVER_SCSI_SENSE_TIGGER_ENTRY;
+
+struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_3 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 NumSCSISenseTrigger;
+	U16___2 Reserved0xA;
+	MPI26_DRIVER_SCSI_SENSE_TIGGER_ENTRY SCSISenseTriggers[20];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_3 Mpi26DriverTriggerPage3_t;
+
+struct _MPI26_DRIVER_IOCSTATUS_LOGINFO_TIGGER_ENTRY {
+	U16___2 IOCStatus;
+	U16___2 Reserved;
+	U32___2 LogInfo;
+};
+
+typedef struct _MPI26_DRIVER_IOCSTATUS_LOGINFO_TIGGER_ENTRY MPI26_DRIVER_IOCSTATUS_LOGINFO_TIGGER_ENTRY;
+
+struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_4 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 NumIOCStatusLogInfoTrigger;
+	U16___2 Reserved0xA;
+	MPI26_DRIVER_IOCSTATUS_LOGINFO_TIGGER_ENTRY IOCStatusLoginfoTriggers[20];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_DRIVER_TIGGER_4 Mpi26DriverTriggerPage4_t;
+
+struct mpt3sas_nvme_cmd {
+	u8 rsvd[24];
+	__le64 prp1;
+	__le64 prp2;
+};
+
+struct Mpi2ManufacturingPage10_t {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 OEMIdentifier;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U32___2 Reserved3;
+	U32___2 GenericFlags0;
+	U32___2 GenericFlags1;
+	U32___2 Reserved4;
+	U32___2 OEMSpecificFlags0;
+	U32___2 OEMSpecificFlags1;
+	U32___2 Reserved5[18];
+};
+
+struct Mpi2ManufacturingPage11_t {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	__le32 Reserved1;
+	u8 Reserved2;
+	u8 EEDPTagMode;
+	u8 Reserved3;
+	u8 Reserved4;
+	__le32 Reserved5[8];
+	u16 AddlFlags2;
+	u8 AddlFlags3;
+	u8 Reserved6;
+	__le32 Reserved7[7];
+	u8 NVMeAbortTO;
+	u8 NumPerDevEvents;
+	u8 HostTraceBufferDecrementSizeKB;
+	u8 HostTraceBufferFlags;
+	u16 HostTraceBufferMaxSizeKB;
+	u16 HostTraceBufferMinSizeKB;
+	u8 CoreDumpTOSec;
+	u8 TimeSyncInterval;
+	u16 Reserved9;
+	__le32 Reserved10;
+};
+
+struct hba_port {
+	struct list_head list;
+	u64 sas_address;
+	u32 phy_mask;
+	u8 port_id;
+	u8 flags;
+	u32 vphys_mask;
+	struct list_head vphys_list;
+};
+
+struct _pcie_device {
+	struct list_head list;
+	struct scsi_target *starget;
+	u64 wwid;
+	u16 handle;
+	u32 device_info;
+	int id;
+	int channel;
+	u16 slot;
+	u8 port_num;
+	u8 responding;
+	u8 fast_path;
+	u32 nvme_mdts;
+	u16 enclosure_handle;
+	u64 enclosure_logical_id;
+	u8 enclosure_level;
+	u8 connector_name[4];
+	u8 *serial_number;
+	u8 reset_timeout;
+	u8 access_status;
+	u16 shutdown_latency;
+	struct kref refcount;
+};
+
+struct _internal_cmd {
+	struct mutex mutex;
+	struct completion done;
+	void *reply;
+	void *sense;
+	u16 status;
+	u16 smid;
+};
+
+struct _boot_device {
+	int channel;
+	void *device;
+};
+
+struct _sas_phy {
+	struct list_head port_siblings;
+	struct sas_identify identify;
+	struct sas_identify remote_identify;
+	struct sas_phy *phy;
+	u8 phy_id;
+	u16 handle;
+	u16 attached_handle;
+	u8 phy_belongs_to_port;
+	u8 hba_vphy;
+	struct hba_port *port;
+};
+
+struct _sas_node {
+	struct list_head list;
+	struct device *parent_dev;
+	u8 num_phys;
+	u64 sas_address;
+	u16 handle;
+	u64 sas_address_parent;
+	u16 enclosure_handle;
+	u64 enclosure_logical_id;
+	u8 responding;
+	u8 nr_phys_allocated;
+	struct hba_port *port;
+	struct _sas_phy *phy;
+	struct list_head sas_port_list;
+	struct sas_rphy *rphy;
+};
+
+struct _enclosure_node {
+	struct list_head list;
+	Mpi2SasEnclosurePage0_t pg0;
+};
+
+enum reset_type {
+	FORCE_BIG_HAMMER = 0,
+	SOFT_RESET = 1,
+};
+
+struct pcie_sg_list {
+	void *pcie_sgl;
+	dma_addr_t pcie_sgl_dma;
+};
+
+struct chain_tracker {
+	void *chain_buffer;
+	dma_addr_t chain_buffer_dma;
+};
+
+struct chain_lookup {
+	struct chain_tracker *chains_per_smid;
+	atomic_t chain_offset;
+};
+
+struct scsiio_tracker {
+	u16 smid;
+	struct scsi_cmnd *scmd;
+	u8 cb_idx;
+	u8 direct_io;
+	struct pcie_sg_list pcie_sg_list;
+	struct list_head chain_list;
+	u16 msix_io;
+};
+
+struct request_tracker {
+	u16 smid;
+	u8 cb_idx;
+	struct list_head tracker_list;
+};
+
+struct _tr_list {
+	struct list_head list;
+	u16 handle;
+	u16 state;
+};
+
+struct _sc_list {
+	struct list_head list;
+	u16 handle;
+};
+
+struct _event_ack_list {
+	struct list_head list;
+	U16___2 Event;
+	U32___2 EventContext;
+};
+
+struct MPT3SAS_ADAPTER;
+
+struct adapter_reply_queue {
+	struct MPT3SAS_ADAPTER *ioc;
+	u8 msix_index;
+	u32 reply_post_host_index;
+	Mpi2ReplyDescriptorsUnion_t *reply_post_free;
+	char name[32];
+	atomic_t busy;
+	u32 os_irq;
+	struct irq_poll irqpoll;
+	bool irq_poll_scheduled;
+	bool irq_line_enable;
+	bool is_iouring_poll_q;
+	struct list_head list;
+};
+
+typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *);
+
+typedef void (*MPT_ADD_SGE)(void *, u32, dma_addr_t);
+
+typedef int (*MPT_BUILD_SG_SCMD)(struct MPT3SAS_ADAPTER *, struct scsi_cmnd *, u16, struct _pcie_device *);
+
+typedef void (*MPT_BUILD_SG)(struct MPT3SAS_ADAPTER *, void *, dma_addr_t, size_t, dma_addr_t, size_t);
+
+typedef void (*MPT_BUILD_ZERO_LEN_SGE)(struct MPT3SAS_ADAPTER *, void *);
+
+typedef void (*NVME_BUILD_PRP)(struct MPT3SAS_ADAPTER *, u16, Mpi26NVMeEncapsulatedRequest_t *, dma_addr_t, size_t, dma_addr_t, size_t);
+
+union mpi3_version_union {
+	MPI2_VERSION_STRUCT Struct;
+	u32 Word;
+};
+
+struct mpt3sas_facts {
+	u16 MsgVersion;
+	u16 HeaderVersion;
+	u8 IOCNumber;
+	u8 VP_ID;
+	u8 VF_ID;
+	u16 IOCExceptions;
+	u16 IOCStatus;
+	u32 IOCLogInfo;
+	u8 MaxChainDepth;
+	u8 WhoInit;
+	u8 NumberOfPorts;
+	u8 MaxMSIxVectors;
+	u16 RequestCredit;
+	u16 ProductID;
+	u32 IOCCapabilities;
+	union mpi3_version_union FWVersion;
+	u16 IOCRequestFrameSize;
+	u16 IOCMaxChainSegmentSize;
+	u16 MaxInitiators;
+	u16 MaxTargets;
+	u16 MaxSasExpanders;
+	u16 MaxEnclosures;
+	u16 ProtocolFlags;
+	u16 HighPriorityCredit;
+	u16 MaxReplyDescriptorPostQueueDepth;
+	u8 ReplyFrameSize;
+	u8 MaxVolumes;
+	u16 MaxDevHandle;
+	u16 MaxPersistentEntries;
+	u16 MinDevHandle;
+	u8 CurrentHostPageSize;
+};
+
+struct htb_rel_query {
+	u16 buffer_rel_condition;
+	u16 reserved;
+	u32 trigger_type;
+	u32 trigger_info_dwords[2];
+};
+
+typedef u32 (*BASE_READ_REG)(const volatile void *);
+
+typedef void (*PUT_SMID_IO_FP_HIP)(struct MPT3SAS_ADAPTER *, u16, u16);
+
+typedef void (*PUT_SMID_DEFAULT)(struct MPT3SAS_ADAPTER *, u16);
+
+typedef u8 (*GET_MSIX_INDEX)(struct MPT3SAS_ADAPTER *, struct scsi_cmnd *);
+
+struct fw_event_work;
+
+struct io_uring_poll_queue;
+
+struct mpt3sas_port_facts;
+
+struct reply_post_struct;
+
+struct MPT3SAS_ADAPTER {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	u8 id;
+	int cpu_count;
+	char name[32];
+	char driver_name[24];
+	char tmp_string[64];
+	struct pci_dev *pdev;
+	Mpi2SystemInterfaceRegs_t *chip;
+	phys_addr_t chip_phys;
+	int logging_level;
+	int fwfault_debug;
+	u8 ir_firmware;
+	int bars;
+	u8 mask_interrupts;
+	char fault_reset_work_q_name[20];
+	struct workqueue_struct *fault_reset_work_q;
+	struct delayed_work fault_reset_work;
+	char firmware_event_name[20];
+	struct workqueue_struct *firmware_event_thread;
+	spinlock_t fw_event_lock;
+	struct list_head fw_event_list;
+	struct fw_event_work *current_event;
+	u8 fw_events_cleanup;
+	int aen_event_read_flag;
+	u8 broadcast_aen_busy;
+	u16 broadcast_aen_pending;
+	u8 shost_recovery;
+	u8 got_task_abort_from_ioctl;
+	struct mutex reset_in_progress_mutex;
+	spinlock_t ioc_reset_in_progress_lock;
+	u8 ioc_link_reset_in_progress;
+	u8 ignore_loginfos;
+	u8 remove_host;
+	u8 pci_error_recovery;
+	u8 wait_for_discovery_to_complete;
+	u8 is_driver_loading;
+	u8 port_enable_failed;
+	u8 start_scan;
+	u16 start_scan_failed;
+	u8 msix_enable;
+	u16 msix_vector_count;
+	u8 *cpu_msix_table;
+	u16 cpu_msix_table_sz;
+	resource_size_t **reply_post_host_index;
+	u32 ioc_reset_count;
+	MPT3SAS_FLUSH_RUNNING_CMDS schedule_dead_ioc_flush_running_cmds;
+	u32 non_operational_loop;
+	u8 ioc_coredump_loop;
+	u32 timestamp_update_count;
+	u32 time_sync_interval;
+	atomic64_t total_io_cnt;
+	atomic64_t high_iops_outstanding;
+	bool msix_load_balance;
+	u16 thresh_hold;
+	u8 high_iops_queues;
+	u8 iopoll_q_start_index;
+	u32 drv_internal_flags;
+	u32 drv_support_bitmap;
+	u32 dma_mask;
+	bool enable_sdev_max_qd;
+	bool use_32bit_dma;
+	struct io_uring_poll_queue *io_uring_poll_queues;
+	u8 scsi_io_cb_idx;
+	u8 tm_cb_idx;
+	u8 transport_cb_idx;
+	u8 scsih_cb_idx;
+	u8 ctl_cb_idx;
+	u8 base_cb_idx;
+	u8 port_enable_cb_idx;
+	u8 config_cb_idx;
+	u8 tm_tr_cb_idx;
+	u8 tm_tr_volume_cb_idx;
+	u8 tm_sas_control_cb_idx;
+	struct _internal_cmd base_cmds;
+	struct _internal_cmd port_enable_cmds;
+	struct _internal_cmd transport_cmds;
+	struct _internal_cmd scsih_cmds;
+	struct _internal_cmd tm_cmds;
+	struct _internal_cmd ctl_cmds;
+	struct _internal_cmd config_cmds;
+	MPT_ADD_SGE base_add_sg_single;
+	MPT_BUILD_SG_SCMD build_sg_scmd;
+	MPT_BUILD_SG build_sg;
+	MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge;
+	u16 sge_size_ieee;
+	u16 hba_mpi_version_belonged;
+	MPT_BUILD_SG build_sg_mpi;
+	MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge_mpi;
+	NVME_BUILD_PRP build_nvme_prp;
+	u32 event_type[4];
+	u32 event_context;
+	void *event_log;
+	u32 event_masks[4];
+	u8 tm_custom_handling;
+	u8 nvme_abort_timeout;
+	u16 max_shutdown_latency;
+	u16 max_wideport_qd;
+	u16 max_narrowport_qd;
+	u16 max_nvme_qd;
+	u8 max_sata_qd;
+	struct mpt3sas_facts facts;
+	struct mpt3sas_facts prev_fw_facts;
+	struct mpt3sas_port_facts *pfacts;
+	Mpi2ManufacturingPage0_t manu_pg0;
+	struct Mpi2ManufacturingPage10_t manu_pg10;
+	struct Mpi2ManufacturingPage11_t manu_pg11;
+	Mpi2BiosPage2_t bios_pg2;
+	Mpi2BiosPage3_t bios_pg3;
+	Mpi2IOCPage8_t ioc_pg8;
+	Mpi2IOUnitPage0_t iounit_pg0;
+	Mpi2IOUnitPage1_t iounit_pg1;
+	Mpi2IOUnitPage8_t iounit_pg8;
+	Mpi2IOCPage1_t ioc_pg1_copy;
+	struct _boot_device req_boot_device;
+	struct _boot_device req_alt_boot_device;
+	struct _boot_device current_boot_device;
+	struct _sas_node sas_hba;
+	struct list_head sas_expander_list;
+	struct list_head enclosure_list;
+	spinlock_t sas_node_lock;
+	struct list_head sas_device_list;
+	struct list_head sas_device_init_list;
+	spinlock_t sas_device_lock;
+	struct list_head pcie_device_list;
+	struct list_head pcie_device_init_list;
+	spinlock_t pcie_device_lock;
+	struct list_head raid_device_list;
+	spinlock_t raid_device_lock;
+	u8 io_missing_delay;
+	u16 device_missing_delay;
+	int sas_id;
+	int pcie_target_id;
+	void *blocking_handles;
+	void *pd_handles;
+	u16 pd_handles_sz;
+	void *pend_os_device_add;
+	u16 pend_os_device_add_sz;
+	u16 config_page_sz;
+	void *config_page;
+	dma_addr_t config_page_dma;
+	void *config_vaddr;
+	u16 hba_queue_depth;
+	u16 sge_size;
+	u16 scsiio_depth;
+	u16 request_sz;
+	u8 *request;
+	dma_addr_t request_dma;
+	u32 request_dma_sz;
+	struct pcie_sg_list *pcie_sg_lookup;
+	spinlock_t scsi_lookup_lock;
+	int pending_io_count;
+	wait_queue_head_t reset_wq;
+	u16 *io_queue_num;
+	struct dma_pool *pcie_sgl_dma_pool;
+	u32 page_size;
+	struct chain_lookup *chain_lookup;
+	struct list_head free_chain_list;
+	struct dma_pool *chain_dma_pool;
+	ulong chain_pages;
+	u16 max_sges_in_main_message;
+	u16 max_sges_in_chain_message;
+	u16 chains_needed_per_io;
+	u32 chain_depth;
+	u16 chain_segment_sz;
+	u16 chains_per_prp_buffer;
+	u16 hi_priority_smid;
+	u8 *hi_priority;
+	dma_addr_t hi_priority_dma;
+	u16 hi_priority_depth;
+	struct request_tracker *hpr_lookup;
+	struct list_head hpr_free_list;
+	u16 internal_smid;
+	u8 *internal;
+	dma_addr_t internal_dma;
+	u16 internal_depth;
+	struct request_tracker *internal_lookup;
+	struct list_head internal_free_list;
+	u8 *sense;
+	dma_addr_t sense_dma;
+	struct dma_pool *sense_dma_pool;
+	u16 reply_sz;
+	u8 *reply;
+	dma_addr_t reply_dma;
+	u32 reply_dma_max_address;
+	u32 reply_dma_min_address;
+	struct dma_pool *reply_dma_pool;
+	u16 reply_free_queue_depth;
+	__le32 *reply_free;
+	dma_addr_t reply_free_dma;
+	struct dma_pool *reply_free_dma_pool;
+	u32 reply_free_host_index;
+	u16 reply_post_queue_depth;
+	struct reply_post_struct *reply_post;
+	u8 rdpq_array_capable;
+	u8 rdpq_array_enable;
+	u8 rdpq_array_enable_assigned;
+	struct dma_pool *reply_post_free_dma_pool;
+	struct dma_pool *reply_post_free_array_dma_pool;
+	Mpi2IOCInitRDPQArrayEntry *reply_post_free_array;
+	dma_addr_t reply_post_free_array_dma;
+	u8 reply_queue_count;
+	struct list_head reply_queue_list;
+	u8 combined_reply_queue;
+	u8 combined_reply_index_count;
+	u8 smp_affinity_enable;
+	resource_size_t **replyPostRegisterIndex;
+	struct list_head delayed_tr_list;
+	struct list_head delayed_tr_volume_list;
+	struct list_head delayed_sc_list;
+	struct list_head delayed_event_ack_list;
+	u8 temp_sensors_count;
+	struct mutex pci_access_mutex;
+	u8 *diag_buffer[3];
+	u32 diag_buffer_sz[3];
+	dma_addr_t diag_buffer_dma[3];
+	u8 diag_buffer_status[3];
+	u32 unique_id[3];
+	u32 product_specific[69];
+	u32 diagnostic_flags[3];
+	u32 ring_buffer_offset;
+	u32 ring_buffer_sz;
+	struct htb_rel_query htb_rel;
+	u8 reset_from_user;
+	u8 is_warpdrive;
+	u8 is_mcpu_endpoint;
+	u8 hide_ir_msg;
+	u8 mfg_pg10_hide_flag;
+	u8 hide_drives;
+	spinlock_t diag_trigger_lock;
+	u8 diag_trigger_active;
+	u8 atomic_desc_capable;
+	BASE_READ_REG base_readl;
+	struct SL_WH_MASTER_TRIGGER_T diag_trigger_master;
+	struct SL_WH_EVENT_TRIGGERS_T diag_trigger_event;
+	struct SL_WH_SCSI_TRIGGERS_T diag_trigger_scsi;
+	struct SL_WH_MPI_TRIGGERS_T diag_trigger_mpi;
+	u8 supports_trigger_pages;
+	void *device_remove_in_progress;
+	u16 device_remove_in_progress_sz;
+	u8 is_gen35_ioc;
+	u8 is_aero_ioc;
+	struct dentry *debugfs_root;
+	struct dentry *ioc_dump;
+	PUT_SMID_IO_FP_HIP put_smid_scsi_io;
+	PUT_SMID_IO_FP_HIP put_smid_fast_path;
+	PUT_SMID_IO_FP_HIP put_smid_hi_priority;
+	PUT_SMID_DEFAULT put_smid_default;
+	GET_MSIX_INDEX get_msix_index_for_smlio;
+	u8 multipath_on_hba;
+	struct list_head port_table_list;
+};
+
+struct io_uring_poll_queue {
+	atomic_t busy;
+	atomic_t pause;
+	struct adapter_reply_queue *reply_q;
+};
+
+struct mpt3sas_port_facts {
+	u8 PortNumber;
+	u8 VP_ID;
+	u8 VF_ID;
+	u8 PortType;
+	u16 MaxPostedCmdBuffers;
+};
+
+struct reply_post_struct {
+	Mpi2ReplyDescriptorsUnion_t *reply_post_free;
+	dma_addr_t reply_post_free_dma;
+};
+
+typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *, u16, u8, u32);
+
+struct ATTO_SAS_NVRAM {
+	u8 Signature[4];
+	u8 Version;
+	u8 Checksum;
+	u8 Pad[10];
+	u8 SasAddr[8];
+	u8 Reserved[232];
+};
+
+union ATTO_SAS_ADDRESS {
+	U8___2 b[8];
+	U16___2 w[4];
+	U32___2 d[2];
+	U64___2 q;
+};
+
+enum mpt3sas_perf_mode {
+	MPT_PERF_MODE_DEFAULT = -1,
+	MPT_PERF_MODE_BALANCED = 0,
+	MPT_PERF_MODE_IOPS = 1,
+	MPT_PERF_MODE_LATENCY = 2,
+};
+
+union reply_descriptor {
+	u64 word;
+	struct {
+		u32 low;
+		u32 high;
+	} u;
+};
+
+union loginfo_type {
+	u32 loginfo;
+	struct {
+		u32 subcode: 16;
+		u32 code: 8;
+		u32 originator: 4;
+		u32 bus_type: 4;
+	} dw;
+};
+
+struct SL_WH_TRIGGERS_EVENT_DATA_T {
+	uint32_t trigger_type;
+	union {
+		struct SL_WH_MASTER_TRIGGER_T master;
+		struct SL_WH_EVENT_TRIGGER_T event;
+		struct SL_WH_SCSI_TRIGGER_T scsi;
+		struct SL_WH_MPI_TRIGGER_T mpi;
+	} u;
+};
+
+enum {
+	SAS_DATAPRES_NO_DATA = 0,
+	SAS_DATAPRES_RESPONSE_DATA = 1,
+	SAS_DATAPRES_SENSE_DATA = 2,
+};
+
+struct sas_identify_frame {
+	u8 frame_type: 4;
+	u8 dev_type: 3;
+	u8 _un0: 1;
+	u8 _un1;
+	union {
+		struct {
+			u8 _un20: 1;
+			u8 smp_iport: 1;
+			u8 stp_iport: 1;
+			u8 ssp_iport: 1;
+			u8 _un247: 4;
+		};
+		u8 initiator_bits;
+	};
+	union {
+		struct {
+			u8 _un30: 1;
+			u8 smp_tport: 1;
+			u8 stp_tport: 1;
+			u8 ssp_tport: 1;
+			u8 _un347: 4;
+		};
+		u8 target_bits;
+	};
+	u8 _un4_11[8];
+	u8 sas_addr[8];
+	u8 phy_id;
+	u8 _un21_27[7];
+	__be32 crc;
+};
+
+struct ssp_frame_hdr {
+	u8 frame_type;
+	u8 hashed_dest_addr[3];
+	u8 _r_a;
+	u8 hashed_src_addr[3];
+	__be16 _r_b;
+	u8 changing_data_ptr: 1;
+	u8 retransmit: 1;
+	u8 retry_data_frames: 1;
+	u8 _r_c: 5;
+	u8 num_fill_bytes: 2;
+	u8 _r_d: 6;
+	u32 _r_e;
+	__be16 tag;
+	__be16 tptt;
+	__be32 data_offs;
+};
+
+struct ssp_response_iu {
+	u8 _r_a[10];
+	u8 datapres: 2;
+	u8 _r_b: 6;
+	u8 status;
+	u32 _r_c;
+	__be32 sense_data_len;
+	__be32 response_data_len;
+	union {
+		struct {
+			struct {			} __empty_resp_data;
+			u8 resp_data[0];
+		};
+		struct {
+			struct {			} __empty_sense_data;
+			u8 sense_data[0];
+		};
+	};
+};
+
+struct ata_task_resp {
+	u16 frame_len;
+	u8 ending_fis[24];
+};
+
+enum driver_configuration {
+	MVS_TX_RING_SZ = 1024,
+	MVS_RX_RING_SZ = 1024,
+	MVS_SOC_SLOTS = 64,
+	MVS_SOC_TX_RING_SZ = 128,
+	MVS_SOC_RX_RING_SZ = 128,
+	MVS_SLOT_BUF_SZ = 8192,
+	MVS_SSP_CMD_SZ = 64,
+	MVS_ATA_CMD_SZ = 96,
+	MVS_OAF_SZ = 64,
+	MVS_QUEUE_SIZE = 64,
+	MVS_RSVD_SLOTS = 4,
+	MVS_SOC_CAN_QUEUE = 62,
+};
+
+enum hardware_details {
+	MVS_MAX_PHYS = 8,
+	MVS_MAX_PORTS = 8,
+	MVS_SOC_PHYS = 4,
+	MVS_SOC_PORTS = 4,
+	MVS_MAX_DEVICES = 1024,
+};
+
+enum hw_register_bits {
+	INT_EN = 2,
+	HBA_RST = 1,
+	INT_XOR = 16,
+	INT_SAS_SATA = 1,
+	SATA_TARGET = 65536,
+	MODE_AUTO_DET_PORT7 = 32768,
+	MODE_AUTO_DET_PORT6 = 16384,
+	MODE_AUTO_DET_PORT5 = 8192,
+	MODE_AUTO_DET_PORT4 = 4096,
+	MODE_AUTO_DET_PORT3 = 2048,
+	MODE_AUTO_DET_PORT2 = 1024,
+	MODE_AUTO_DET_PORT1 = 512,
+	MODE_AUTO_DET_PORT0 = 256,
+	MODE_AUTO_DET_EN = 65280,
+	MODE_SAS_PORT7_MASK = 128,
+	MODE_SAS_PORT6_MASK = 64,
+	MODE_SAS_PORT5_MASK = 32,
+	MODE_SAS_PORT4_MASK = 16,
+	MODE_SAS_PORT3_MASK = 8,
+	MODE_SAS_PORT2_MASK = 4,
+	MODE_SAS_PORT1_MASK = 2,
+	MODE_SAS_PORT0_MASK = 1,
+	MODE_SAS_SATA = 255,
+	TX_EN = 65536,
+	TX_RING_SZ_MASK = 4095,
+	RX_EN = 65536,
+	RX_RING_SZ_MASK = 4095,
+	COAL_EN = 65536,
+	CINT_I2C = 2147483648,
+	CINT_SW0 = 1073741824,
+	CINT_SW1 = 536870912,
+	CINT_PRD_BC = 268435456,
+	CINT_DMA_PCIE = 134217728,
+	CINT_MEM = 67108864,
+	CINT_I2C_SLAVE = 33554432,
+	CINT_NON_SPEC_NCQ_ERROR = 33554432,
+	CINT_SRS = 8,
+	CINT_CI_STOP = 2,
+	CINT_DONE = 1,
+	CINT_PORT_STOPPED = 65536,
+	CINT_PORT = 256,
+	CINT_PORT_MASK_OFFSET = 8,
+	CINT_PORT_MASK = 65280,
+	CINT_PHY_MASK_OFFSET = 4,
+	CINT_PHY_MASK = 240,
+	TXQ_CMD_SHIFT = 29,
+	TXQ_CMD_SSP = 1,
+	TXQ_CMD_SMP = 2,
+	TXQ_CMD_STP = 3,
+	TXQ_CMD_SSP_FREE_LIST = 4,
+	TXQ_CMD_SLOT_RESET = 7,
+	TXQ_MODE_I = 268435456,
+	TXQ_MODE_TARGET = 0,
+	TXQ_MODE_INITIATOR = 1,
+	TXQ_PRIO_HI = 134217728,
+	TXQ_PRI_NORMAL = 0,
+	TXQ_PRI_HIGH = 1,
+	TXQ_SRS_SHIFT = 20,
+	TXQ_SRS_MASK = 127,
+	TXQ_PHY_SHIFT = 12,
+	TXQ_PHY_MASK = 255,
+	TXQ_SLOT_MASK = 4095,
+	RXQ_GOOD = 8388608,
+	RXQ_SLOT_RESET = 2097152,
+	RXQ_CMD_RX = 1048576,
+	RXQ_ATTN = 524288,
+	RXQ_RSP = 262144,
+	RXQ_ERR = 131072,
+	RXQ_DONE = 65536,
+	RXQ_SLOT_MASK = 4095,
+	MCH_PRD_LEN_SHIFT = 16,
+	MCH_SSP_FR_TYPE_SHIFT = 13,
+	MCH_SSP_FR_CMD = 0,
+	MCH_SSP_FR_TASK = 1,
+	MCH_SSP_FR_XFER_RDY = 4,
+	MCH_SSP_FR_RESP = 5,
+	MCH_SSP_FR_READ = 6,
+	MCH_SSP_FR_READ_RESP = 7,
+	MCH_SSP_MODE_PASSTHRU = 1,
+	MCH_SSP_MODE_NORMAL = 0,
+	MCH_PASSTHRU = 4096,
+	MCH_FBURST = 2048,
+	MCH_CHK_LEN = 1024,
+	MCH_RETRY = 512,
+	MCH_PROTECTION = 256,
+	MCH_RESET = 128,
+	MCH_FPDMA = 64,
+	MCH_ATAPI = 32,
+	MCH_BIST = 16,
+	MCH_PMP_MASK = 15,
+	CCTL_RST = 32,
+	CCTL_ENDIAN_DATA = 8,
+	CCTL_ENDIAN_RSP = 4,
+	CCTL_ENDIAN_OPEN = 2,
+	CCTL_ENDIAN_CMD = 1,
+	PHY_SSP_RST = 8,
+	PHY_BCAST_CHG = 4,
+	PHY_RST_HARD = 2,
+	PHY_RST = 1,
+	PHY_READY_MASK = 1048576,
+	PHYEV_DEC_ERR = 16777216,
+	PHYEV_DCDR_ERR = 8388608,
+	PHYEV_CRC_ERR = 4194304,
+	PHYEV_UNASSOC_FIS = 524288,
+	PHYEV_AN = 262144,
+	PHYEV_BIST_ACT = 131072,
+	PHYEV_SIG_FIS = 65536,
+	PHYEV_POOF = 4096,
+	PHYEV_IU_BIG = 2048,
+	PHYEV_IU_SMALL = 1024,
+	PHYEV_UNK_TAG = 512,
+	PHYEV_BROAD_CH = 256,
+	PHYEV_COMWAKE = 128,
+	PHYEV_PORT_SEL = 64,
+	PHYEV_HARD_RST = 32,
+	PHYEV_ID_TMOUT = 16,
+	PHYEV_ID_FAIL = 8,
+	PHYEV_ID_DONE = 4,
+	PHYEV_HARD_RST_DONE = 2,
+	PHYEV_RDY_CH = 1,
+	PCS_EN_SATA_REG_SHIFT = 16,
+	PCS_EN_PORT_XMT_SHIFT = 12,
+	PCS_EN_PORT_XMT_SHIFT2 = 8,
+	PCS_SATA_RETRY = 256,
+	PCS_RSP_RX_EN = 128,
+	PCS_SATA_RETRY_2 = 64,
+	PCS_SELF_CLEAR = 32,
+	PCS_FIS_RX_EN = 16,
+	PCS_CMD_STOP_ERR = 8,
+	PCS_CMD_RST = 2,
+	PCS_CMD_EN = 1,
+	PORT_DEV_SSP_TRGT = 524288,
+	PORT_DEV_SMP_TRGT = 262144,
+	PORT_DEV_STP_TRGT = 131072,
+	PORT_DEV_SSP_INIT = 2048,
+	PORT_DEV_SMP_INIT = 1024,
+	PORT_DEV_STP_INIT = 512,
+	PORT_PHY_ID_MASK = 4278190080,
+	PORT_SSP_TRGT_MASK = 524288,
+	PORT_SSP_INIT_MASK = 2048,
+	PORT_DEV_TRGT_MASK = 917504,
+	PORT_DEV_INIT_MASK = 3584,
+	PORT_DEV_TYPE_MASK = 7,
+	PHY_RDY = 4,
+	PHY_DW_SYNC = 2,
+	PHY_OOB_DTCTD = 1,
+	PHY_MODE6_LATECLK = 536870912,
+	PHY_MODE6_DTL_SPEED = 134217728,
+	PHY_MODE6_FC_ORDER = 67108864,
+	PHY_MODE6_MUCNT_EN = 16777216,
+	PHY_MODE6_SEL_MUCNT_LEN = 4194304,
+	PHY_MODE6_SELMUPI = 1048576,
+	PHY_MODE6_SELMUPF = 262144,
+	PHY_MODE6_SELMUFF = 65536,
+	PHY_MODE6_SELMUFI = 16384,
+	PHY_MODE6_FREEZE_LOOP = 4096,
+	PHY_MODE6_INT_RXFOFFS = 8,
+	PHY_MODE6_FRC_RXFOFFS = 4,
+	PHY_MODE6_STAU_0D8 = 2,
+	PHY_MODE6_RXSAT_DIS = 1,
+};
+
+enum sas_sata_config_port_regs {
+	PHYR_IDENTIFY = 0,
+	PHYR_ADDR_LO = 4,
+	PHYR_ADDR_HI = 8,
+	PHYR_ATT_DEV_INFO = 12,
+	PHYR_ATT_ADDR_LO = 16,
+	PHYR_ATT_ADDR_HI = 20,
+	PHYR_SATA_CTL = 24,
+	PHYR_PHY_STAT = 28,
+	PHYR_SATA_SIG0 = 32,
+	PHYR_SATA_SIG1 = 36,
+	PHYR_SATA_SIG2 = 40,
+	PHYR_SATA_SIG3 = 44,
+	PHYR_R_ERR_COUNT = 48,
+	PHYR_CRC_ERR_COUNT = 52,
+	PHYR_WIDE_PORT = 56,
+	PHYR_CURRENT0 = 128,
+	PHYR_CURRENT1 = 132,
+	PHYR_CURRENT2 = 136,
+	CONFIG_ID_FRAME0 = 256,
+	CONFIG_ID_FRAME1 = 260,
+	CONFIG_ID_FRAME2 = 264,
+	CONFIG_ID_FRAME3 = 268,
+	CONFIG_ID_FRAME4 = 272,
+	CONFIG_ID_FRAME5 = 276,
+	CONFIG_ID_FRAME6 = 280,
+	CONFIG_ATT_ID_FRAME0 = 284,
+	CONFIG_ATT_ID_FRAME1 = 288,
+	CONFIG_ATT_ID_FRAME2 = 292,
+	CONFIG_ATT_ID_FRAME3 = 296,
+	CONFIG_ATT_ID_FRAME4 = 300,
+	CONFIG_ATT_ID_FRAME5 = 304,
+	CONFIG_ATT_ID_FRAME6 = 308,
+};
+
+enum mvs_info_flags {
+	MVF_PHY_PWR_FIX = 2,
+	MVF_FLAG_SOC = 4,
+};
+
+enum mvs_event_flags {
+	PHY_PLUG_EVENT = 3,
+	PHY_PLUG_IN = 1,
+	PHY_PLUG_OUT = 2,
+	EXP_BRCT_CHG = 4,
+};
+
+enum mvs_port_type {
+	PORT_TGT_MASK = 32,
+	PORT_INIT_PORT = 16,
+	PORT_TGT_PORT = 8,
+	PORT_INIT_TGT_PORT = 24,
+	PORT_TYPE_SAS = 2,
+	PORT_TYPE_SATA = 1,
+};
+
+enum ct_format {
+	SSP_F_H = 0,
+	SSP_F_IU = 24,
+	SSP_F_MAX = 77,
+	STP_CMD_FIS = 0,
+	STP_ATAPI_CMD = 64,
+	STP_F_MAX = 16,
+	SMP_F_T = 0,
+	SMP_F_DEP = 1,
+	SMP_F_MAX = 257,
+};
+
+enum status_buffer {
+	SB_EIR_OFF = 0,
+	SB_RFB_OFF = 8,
+	SB_RFB_MAX = 1024,
+};
+
+enum error_info_rec {
+	CMD_ISS_STPD = 2147483648,
+	CMD_PI_ERR = 1073741824,
+	RSP_OVER = 536870912,
+	RETRY_LIM = 268435456,
+	UNK_FIS = 134217728,
+	DMA_TERM = 67108864,
+	SYNC_ERR = 33554432,
+	TFILE_ERR = 16777216,
+	R_ERR = 8388608,
+	RD_OFS = 1048576,
+	XFER_RDY_OFS = 524288,
+	UNEXP_XFER_RDY = 262144,
+	DATA_OVER_UNDER = 65536,
+	INTERLOCK = 32768,
+	NAK = 16384,
+	ACK_NAK_TO = 8192,
+	CXN_CLOSED = 4096,
+	OPEN_TO = 2048,
+	PATH_BLOCKED = 1024,
+	NO_DEST = 512,
+	STP_RES_BSY = 256,
+	BREAK = 128,
+	BAD_DEST = 64,
+	BAD_PROTO = 32,
+	BAD_RATE = 16,
+	WRONG_DEST = 8,
+	CREDIT_TO = 4,
+	WDOG_TO = 2,
+	BUF_PAR = 1,
+};
+
+enum open_frame_protocol {
+	PROTOCOL_SMP = 0,
+	PROTOCOL_SSP = 1,
+	PROTOCOL_STP = 2,
+};
+
+struct mvs_info;
+
+struct mvs_port;
+
+struct mvs_phy {
+	struct mvs_info *mvi;
+	struct mvs_port *port;
+	struct asd_sas_phy sas_phy;
+	struct sas_identify identify;
+	struct scsi_device *sdev;
+	struct timer_list timer;
+	u64 dev_sas_addr;
+	u64 att_dev_sas_addr;
+	u32 att_dev_info;
+	u32 dev_info;
+	u32 phy_type;
+	u32 phy_status;
+	u32 irq_status;
+	u32 frame_rcvd_size;
+	u8 frame_rcvd[32];
+	u8 phy_attached;
+	u8 phy_mode;
+	u8 reserved[2];
+	u32 phy_event;
+	enum sas_linkrate minimum_linkrate;
+	enum sas_linkrate maximum_linkrate;
+};
+
+struct mvs_port {
+	struct asd_sas_port sas_port;
+	u8 port_attached;
+	u8 wide_port_phymap;
+	struct list_head list;
+};
+
+struct ffe_control {
+	u8 ffe_cap_sel: 4;
+	u8 ffe_rss_sel: 3;
+	u8 reserved: 1;
+};
+
+struct phy_tuning {
+	u8 trans_emp_en: 1;
+	u8 trans_emp_amp: 4;
+	u8 Reserved_2bit_1: 3;
+	u8 trans_amp: 5;
+	u8 trans_amp_adj: 2;
+	u8 resv_2bit_2: 1;
+	u8 reserved[2];
+};
+
+struct hba_info_page {
+	u8 signature[4];
+	u32 reserved1[13];
+	u64 sas_addr[8];
+	struct ffe_control ffe_ctl[8];
+	u32 reserved2[12];
+	u8 phy_rate[8];
+	struct phy_tuning phy_tuning[8];
+	u32 reserved3[10];
+};
+
+struct mvs_device {
+	struct list_head dev_entry;
+	enum sas_device_type dev_type;
+	struct mvs_info *mvi_info;
+	struct domain_device *sas_device;
+	u32 attached_phy;
+	u32 device_id;
+	u32 running_req;
+	u8 taskfileset;
+	u8 dev_status;
+	u16 reserved;
+};
+
+struct mvs_slot_info {
+	struct list_head entry;
+	union {
+		struct sas_task *task;
+		void *tdata;
+	};
+	u32 n_elem;
+	u32 tx;
+	u32 slot_tag;
+	void *buf;
+	dma_addr_t buf_dma;
+	void *response;
+	struct mvs_port *port;
+	struct mvs_device *device;
+	void *open_frame;
+};
+
+struct mvs_cmd_hdr;
+
+struct mvs_chip_info;
+
+struct mvs_info {
+	long unsigned int flags;
+	spinlock_t lock;
+	struct pci_dev *pdev;
+	struct device *dev;
+	void *regs;
+	void *regs_ex;
+	u8 sas_addr[8];
+	struct sas_ha_struct *sas;
+	struct Scsi_Host *shost;
+	__le32 *tx;
+	dma_addr_t tx_dma;
+	u32 tx_prod;
+	__le32 *rx;
+	dma_addr_t rx_dma;
+	u32 rx_cons;
+	__le32 *rx_fis;
+	dma_addr_t rx_fis_dma;
+	struct mvs_cmd_hdr *slot;
+	dma_addr_t slot_dma;
+	u32 chip_id;
+	const struct mvs_chip_info *chip;
+	long unsigned int *rsvd_tags;
+	struct mvs_phy phy[8];
+	struct mvs_port port[8];
+	u32 id;
+	u64 sata_reg_set;
+	struct list_head *hba_list;
+	struct list_head soc_entry;
+	struct list_head wq_list;
+	long unsigned int instance;
+	u16 flashid;
+	u32 flashsize;
+	u32 flashsectSize;
+	void *addon;
+	struct hba_info_page hba_info_param;
+	struct mvs_device devices[1024];
+	void *bulk_buffer;
+	dma_addr_t bulk_buffer_dma;
+	void *bulk_buffer1;
+	dma_addr_t bulk_buffer_dma1;
+	void *dma_pool;
+	struct mvs_slot_info slot_info[0];
+};
+
+struct mvs_prv_info;
+
+struct mvs_dispatch {
+	char *name;
+	int (*chip_init)(struct mvs_info *);
+	int (*spi_init)(struct mvs_info *);
+	int (*chip_ioremap)(struct mvs_info *);
+	void (*chip_iounmap)(struct mvs_info *);
+	irqreturn_t (*isr)(struct mvs_info *, int, u32);
+	u32 (*isr_status)(struct mvs_info *, int);
+	void (*interrupt_enable)(struct mvs_info *);
+	void (*interrupt_disable)(struct mvs_info *);
+	u32 (*read_phy_ctl)(struct mvs_info *, u32);
+	void (*write_phy_ctl)(struct mvs_info *, u32, u32);
+	u32 (*read_port_cfg_data)(struct mvs_info *, u32);
+	void (*write_port_cfg_data)(struct mvs_info *, u32, u32);
+	void (*write_port_cfg_addr)(struct mvs_info *, u32, u32);
+	u32 (*read_port_vsr_data)(struct mvs_info *, u32);
+	void (*write_port_vsr_data)(struct mvs_info *, u32, u32);
+	void (*write_port_vsr_addr)(struct mvs_info *, u32, u32);
+	u32 (*read_port_irq_stat)(struct mvs_info *, u32);
+	void (*write_port_irq_stat)(struct mvs_info *, u32, u32);
+	u32 (*read_port_irq_mask)(struct mvs_info *, u32);
+	void (*write_port_irq_mask)(struct mvs_info *, u32, u32);
+	void (*command_active)(struct mvs_info *, u32);
+	void (*clear_srs_irq)(struct mvs_info *, u8, u8);
+	void (*issue_stop)(struct mvs_info *, enum mvs_port_type, u32);
+	void (*start_delivery)(struct mvs_info *, u32);
+	u32 (*rx_update)(struct mvs_info *);
+	void (*int_full)(struct mvs_info *);
+	u8 (*assign_reg_set)(struct mvs_info *, u8 *);
+	void (*free_reg_set)(struct mvs_info *, u8 *);
+	u32 (*prd_size)();
+	u32 (*prd_count)();
+	void (*make_prd)(struct scatterlist *, int, void *);
+	void (*detect_porttype)(struct mvs_info *, int);
+	int (*oob_done)(struct mvs_info *, int);
+	void (*fix_phy_info)(struct mvs_info *, int, struct sas_identify_frame *);
+	void (*phy_work_around)(struct mvs_info *, int);
+	void (*phy_set_link_rate)(struct mvs_info *, u32, struct sas_phy_linkrates *);
+	u32 (*phy_max_link_rate)();
+	void (*phy_disable)(struct mvs_info *, u32);
+	void (*phy_enable)(struct mvs_info *, u32);
+	void (*phy_reset)(struct mvs_info *, u32, int);
+	void (*stp_reset)(struct mvs_info *, u32);
+	void (*clear_active_cmds)(struct mvs_info *);
+	u32 (*spi_read_data)(struct mvs_info *);
+	void (*spi_write_data)(struct mvs_info *, u32);
+	int (*spi_buildcmd)(struct mvs_info *, u32 *, u8, u8, u8, u32);
+	int (*spi_issuecmd)(struct mvs_info *, u32);
+	int (*spi_waitdataready)(struct mvs_info *, u32);
+	void (*dma_fix)(struct mvs_info *, u32, int, int, void *);
+	void (*tune_interrupt)(struct mvs_info *, u32);
+	void (*non_spec_ncq_error)(struct mvs_info *);
+	int (*gpio_write)(struct mvs_prv_info *, u8, u8, u8, u8 *);
+};
+
+enum dev_status {
+	MVS_DEV_NORMAL = 0,
+	MVS_DEV_EH = 1,
+};
+
+enum dev_reset {
+	MVS_SOFT_RESET = 0,
+	MVS_HARD_RESET = 1,
+	MVS_PHY_TUNE = 2,
+};
+
+struct mvs_prv_info {
+	u8 n_host;
+	u8 n_phy;
+	u8 scan_finished;
+	u8 reserve;
+	struct mvs_info *mvi[2];
+	struct tasklet_struct mv_tasklet;
+};
+
+struct mvs_chip_info {
+	u32 n_host;
+	u32 n_phy;
+	u32 fis_offs;
+	u32 fis_count;
+	u32 srs_sz;
+	u32 sg_width;
+	u32 slot_width;
+	const struct mvs_dispatch *dispatch;
+};
+
+struct mvs_cmd_hdr {
+	__le32 flags;
+	__le32 lens;
+	__le32 tags;
+	__le32 data_len;
+	__le64 cmd_tbl;
+	__le64 open_frame;
+	__le64 status_buf;
+	__le64 prd_tbl;
+	__le32 reserved[4];
+};
+
+struct mvs_wq {
+	struct delayed_work work_q;
+	struct mvs_info *mvi;
+	void *data;
+	int handler;
+	struct list_head entry;
+};
+
+struct mvs_task_exec_info {
+	struct sas_task *task;
+	struct mvs_cmd_hdr *hdr;
+	struct mvs_port *port;
+	u32 tag;
+	int n_elem;
+};
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
+	long unsigned int start;
+};
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
+};
+
+typedef int sec_send_recv(void *, u16, u8, void *, size_t, bool);
+
+enum pr_status {
+	PR_STS_SUCCESS = 0,
+	PR_STS_IOERR = 2,
+	PR_STS_RESERVATION_CONFLICT = 24,
+	PR_STS_RETRY_PATH_FAILURE = 917504,
+	PR_STS_PATH_FAST_FAILED = 983040,
+	PR_STS_PATH_FAILED = 65536,
+};
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct opal_dev;
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+};
+
+enum ata_prot_flags {
+	ATA_PROT_FLAG_PIO = 1,
+	ATA_PROT_FLAG_DMA = 2,
+	ATA_PROT_FLAG_NCQ = 4,
+	ATA_PROT_FLAG_ATAPI = 8,
+	ATA_PROT_UNKNOWN = 255,
+	ATA_PROT_NODATA = 0,
+	ATA_PROT_PIO = 1,
+	ATA_PROT_DMA = 2,
+	ATA_PROT_NCQ_NODATA = 4,
+	ATA_PROT_NCQ = 6,
+	ATAPI_PROT_NODATA = 8,
+	ATAPI_PROT_PIO = 9,
+	ATAPI_PROT_DMA = 10,
+};
+
+enum ata_lpm_hints {
+	ATA_LPM_EMPTY = 1,
+	ATA_LPM_HIPM = 2,
+	ATA_LPM_WAKE_ONLY = 4,
+};
+
+enum ata_link_iter_mode {
+	ATA_LITER_EDGE = 0,
+	ATA_LITER_HOST_FIRST = 1,
+	ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+	ATA_DITER_ENABLED = 0,
+	ATA_DITER_ENABLED_REVERSE = 1,
+	ATA_DITER_ALL = 2,
+	ATA_DITER_ALL_REVERSE = 3,
+};
+
+enum {
+	ATA_READID_POSTRESET = 1,
+	ATA_DNXFER_PIO = 0,
+	ATA_DNXFER_DMA = 1,
+	ATA_DNXFER_40C = 2,
+	ATA_DNXFER_FORCE_PIO = 3,
+	ATA_DNXFER_FORCE_PIO0 = 4,
+	ATA_DNXFER_QUIET = -2147483648,
+};
+
+enum {
+	ATA_EH_SPDN_NCQ_OFF = 1,
+	ATA_EH_SPDN_SPEED_DOWN = 2,
+	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+	ATA_EH_SPDN_KEEP_ERRORS = 8,
+	ATA_EFLAG_IS_IO = 1,
+	ATA_EFLAG_DUBIOUS_XFER = 2,
+	ATA_EFLAG_OLD_ER = -2147483648,
+	ATA_ECAT_NONE = 0,
+	ATA_ECAT_ATA_BUS = 1,
+	ATA_ECAT_TOUT_HSM = 2,
+	ATA_ECAT_UNK_DEV = 3,
+	ATA_ECAT_DUBIOUS_NONE = 4,
+	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+	ATA_ECAT_NR = 8,
+	ATA_EH_CMD_DFL_TIMEOUT = 5000,
+	ATA_EH_RESET_COOL_DOWN = 5000,
+	ATA_EH_PRERESET_TIMEOUT = 10000,
+	ATA_EH_FASTDRAIN_INTERVAL = 3000,
+	ATA_EH_UA_TRIES = 5,
+	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+	ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+	const u8 *commands;
+	const unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+	u64 since;
+	int xfer_ok;
+	int nr_errors[8];
+};
+
+struct ata_port_info {
+	long unsigned int flags;
+	long unsigned int link_flags;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	struct ata_port_operations *port_ops;
+	void *private_data;
+};
+
+struct ata_timing {
+	short unsigned int mode;
+	short unsigned int setup;
+	short unsigned int act8b;
+	short unsigned int rec8b;
+	short unsigned int cyc8b;
+	short unsigned int active;
+	short unsigned int recover;
+	short unsigned int dmack_hold;
+	short unsigned int cycle;
+	short unsigned int udma;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	long unsigned int differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	long unsigned int hs_clk_rate;
+	long unsigned int lp_clk_rate;
+	unsigned char lanes;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy;
+
+struct phy_ops {
+	int (*init)(struct phy *);
+	int (*exit)(struct phy *);
+	int (*power_on)(struct phy *);
+	int (*power_off)(struct phy *);
+	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
+	int (*configure)(struct phy *, union phy_configure_opts *);
+	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy *);
+	int (*calibrate)(struct phy *);
+	void (*release)(struct phy *);
+	struct module *owner;
+};
+
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
+};
+
+struct phy {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
+};
+
+struct reset_control;
+
+enum {
+	AHCI_MAX_PORTS = 32,
+	AHCI_MAX_SG = 168,
+	AHCI_DMA_BOUNDARY = 4294967295,
+	AHCI_MAX_CMDS = 32,
+	AHCI_CMD_SZ = 32,
+	AHCI_CMD_SLOT_SZ = 1024,
+	AHCI_RX_FIS_SZ = 256,
+	AHCI_CMD_TBL_CDB = 64,
+	AHCI_CMD_TBL_HDR_SZ = 128,
+	AHCI_CMD_TBL_SZ = 2816,
+	AHCI_CMD_TBL_AR_SZ = 90112,
+	AHCI_PORT_PRIV_DMA_SZ = 91392,
+	AHCI_PORT_PRIV_FBS_DMA_SZ = 95232,
+	AHCI_IRQ_ON_SG = 2147483648,
+	AHCI_CMD_ATAPI = 32,
+	AHCI_CMD_WRITE = 64,
+	AHCI_CMD_PREFETCH = 128,
+	AHCI_CMD_RESET = 256,
+	AHCI_CMD_CLR_BUSY = 1024,
+	RX_FIS_PIO_SETUP = 32,
+	RX_FIS_D2H_REG = 64,
+	RX_FIS_SDB = 88,
+	RX_FIS_UNK = 96,
+	HOST_CAP = 0,
+	HOST_CTL = 4,
+	HOST_IRQ_STAT = 8,
+	HOST_PORTS_IMPL = 12,
+	HOST_VERSION = 16,
+	HOST_EM_LOC = 28,
+	HOST_EM_CTL = 32,
+	HOST_CAP2 = 36,
+	HOST_RESET = 1,
+	HOST_IRQ_EN = 2,
+	HOST_MRSM = 4,
+	HOST_AHCI_EN = 2147483648,
+	HOST_CAP_SXS = 32,
+	HOST_CAP_EMS = 64,
+	HOST_CAP_CCC = 128,
+	HOST_CAP_PART = 8192,
+	HOST_CAP_SSC = 16384,
+	HOST_CAP_PIO_MULTI = 32768,
+	HOST_CAP_FBS = 65536,
+	HOST_CAP_PMP = 131072,
+	HOST_CAP_ONLY = 262144,
+	HOST_CAP_CLO = 16777216,
+	HOST_CAP_LED = 33554432,
+	HOST_CAP_ALPM = 67108864,
+	HOST_CAP_SSS = 134217728,
+	HOST_CAP_MPS = 268435456,
+	HOST_CAP_SNTF = 536870912,
+	HOST_CAP_NCQ = 1073741824,
+	HOST_CAP_64 = 2147483648,
+	HOST_CAP2_BOH = 1,
+	HOST_CAP2_NVMHCI = 2,
+	HOST_CAP2_APST = 4,
+	HOST_CAP2_SDS = 8,
+	HOST_CAP2_SADM = 16,
+	HOST_CAP2_DESO = 32,
+	PORT_LST_ADDR = 0,
+	PORT_LST_ADDR_HI = 4,
+	PORT_FIS_ADDR = 8,
+	PORT_FIS_ADDR_HI = 12,
+	PORT_IRQ_STAT = 16,
+	PORT_IRQ_MASK = 20,
+	PORT_CMD = 24,
+	PORT_TFDATA = 32,
+	PORT_SIG = 36,
+	PORT_CMD_ISSUE = 56,
+	PORT_SCR_STAT = 40,
+	PORT_SCR_CTL = 44,
+	PORT_SCR_ERR = 48,
+	PORT_SCR_ACT = 52,
+	PORT_SCR_NTF = 60,
+	PORT_FBS = 64,
+	PORT_DEVSLP = 68,
+	PORT_IRQ_COLD_PRES = 2147483648,
+	PORT_IRQ_TF_ERR = 1073741824,
+	PORT_IRQ_HBUS_ERR = 536870912,
+	PORT_IRQ_HBUS_DATA_ERR = 268435456,
+	PORT_IRQ_IF_ERR = 134217728,
+	PORT_IRQ_IF_NONFATAL = 67108864,
+	PORT_IRQ_OVERFLOW = 16777216,
+	PORT_IRQ_BAD_PMP = 8388608,
+	PORT_IRQ_PHYRDY = 4194304,
+	PORT_IRQ_DMPS = 128,
+	PORT_IRQ_CONNECT = 64,
+	PORT_IRQ_SG_DONE = 32,
+	PORT_IRQ_UNK_FIS = 16,
+	PORT_IRQ_SDB_FIS = 8,
+	PORT_IRQ_DMAS_FIS = 4,
+	PORT_IRQ_PIOS_FIS = 2,
+	PORT_IRQ_D2H_REG_FIS = 1,
+	PORT_IRQ_FREEZE = 683671632,
+	PORT_IRQ_ERROR = 2025848912,
+	DEF_PORT_IRQ = 2025848959,
+	PORT_CMD_ASP = 134217728,
+	PORT_CMD_ALPE = 67108864,
+	PORT_CMD_ATAPI = 16777216,
+	PORT_CMD_FBSCP = 4194304,
+	PORT_CMD_ESP = 2097152,
+	PORT_CMD_CPD = 1048576,
+	PORT_CMD_MPSP = 524288,
+	PORT_CMD_HPCP = 262144,
+	PORT_CMD_PMP = 131072,
+	PORT_CMD_LIST_ON = 32768,
+	PORT_CMD_FIS_ON = 16384,
+	PORT_CMD_FIS_RX = 16,
+	PORT_CMD_CLO = 8,
+	PORT_CMD_POWER_ON = 4,
+	PORT_CMD_SPIN_UP = 2,
+	PORT_CMD_START = 1,
+	PORT_CMD_ICC_MASK = 4026531840,
+	PORT_CMD_ICC_ACTIVE = 268435456,
+	PORT_CMD_ICC_PARTIAL = 536870912,
+	PORT_CMD_ICC_SLUMBER = 1610612736,
+	PORT_CMD_CAP = 8126464,
+	PORT_FBS_DWE_OFFSET = 16,
+	PORT_FBS_ADO_OFFSET = 12,
+	PORT_FBS_DEV_OFFSET = 8,
+	PORT_FBS_DEV_MASK = 3840,
+	PORT_FBS_SDE = 4,
+	PORT_FBS_DEC = 2,
+	PORT_FBS_EN = 1,
+	PORT_DEVSLP_DM_OFFSET = 25,
+	PORT_DEVSLP_DM_MASK = 503316480,
+	PORT_DEVSLP_DITO_OFFSET = 15,
+	PORT_DEVSLP_MDAT_OFFSET = 10,
+	PORT_DEVSLP_DETO_OFFSET = 2,
+	PORT_DEVSLP_DSP = 2,
+	PORT_DEVSLP_ADSE = 1,
+	AHCI_HFLAG_NO_NCQ = 1,
+	AHCI_HFLAG_IGN_IRQ_IF_ERR = 2,
+	AHCI_HFLAG_IGN_SERR_INTERNAL = 4,
+	AHCI_HFLAG_32BIT_ONLY = 8,
+	AHCI_HFLAG_MV_PATA = 16,
+	AHCI_HFLAG_NO_MSI = 32,
+	AHCI_HFLAG_NO_PMP = 64,
+	AHCI_HFLAG_SECT255 = 256,
+	AHCI_HFLAG_YES_NCQ = 512,
+	AHCI_HFLAG_NO_SUSPEND = 1024,
+	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,
+	AHCI_HFLAG_NO_SNTF = 4096,
+	AHCI_HFLAG_NO_FPDMA_AA = 8192,
+	AHCI_HFLAG_YES_FBS = 16384,
+	AHCI_HFLAG_DELAY_ENGINE = 32768,
+	AHCI_HFLAG_NO_DEVSLP = 131072,
+	AHCI_HFLAG_NO_FBS = 262144,
+	AHCI_HFLAG_MULTI_MSI = 1048576,
+	AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,
+	AHCI_HFLAG_YES_ALPM = 8388608,
+	AHCI_HFLAG_NO_WRITE_TO_RO = 16777216,
+	AHCI_HFLAG_USE_LPM_POLICY = 33554432,
+	AHCI_HFLAG_SUSPEND_PHYS = 67108864,
+	AHCI_HFLAG_NO_SXS = 268435456,
+	AHCI_FLAG_COMMON = 393346,
+	ICH_MAP = 144,
+	PCS_6 = 146,
+	PCS_7 = 148,
+	EM_MAX_SLOTS = 15,
+	EM_MAX_RETRY = 5,
+	EM_CTL_RST = 512,
+	EM_CTL_TM = 256,
+	EM_CTL_MR = 1,
+	EM_CTL_ALHD = 67108864,
+	EM_CTL_XMT = 33554432,
+	EM_CTL_SMB = 16777216,
+	EM_CTL_SGPIO = 524288,
+	EM_CTL_SES = 262144,
+	EM_CTL_SAFTE = 131072,
+	EM_CTL_LED = 65536,
+	EM_MSG_TYPE_LED = 1,
+	EM_MSG_TYPE_SAFTE = 2,
+	EM_MSG_TYPE_SES2 = 4,
+	EM_MSG_TYPE_SGPIO = 8,
+};
+
+struct ahci_host_priv {
+	unsigned int flags;
+	u32 mask_port_map;
+	void *mmio;
+	u32 cap;
+	u32 cap2;
+	u32 version;
+	u32 port_map;
+	u32 saved_cap;
+	u32 saved_cap2;
+	u32 saved_port_map;
+	u32 saved_port_cap[32];
+	u32 em_loc;
+	u32 em_buf_sz;
+	u32 em_msg_type;
+	u32 remapped_nvme;
+	bool got_runtime_pm;
+	unsigned int n_clks;
+	struct clk_bulk_data *clks;
+	unsigned int f_rsts;
+	struct reset_control *rsts;
+	struct regulator **target_pwrs;
+	struct regulator *ahci_regulator;
+	struct regulator *phy_regulator;
+	struct phy **phys;
+	unsigned int nports;
+	void *plat_data;
+	unsigned int irq;
+	void (*start_engine)(struct ata_port *);
+	int (*stop_engine)(struct ata_port *);
+	irqreturn_t (*irq_handler)(int, void *);
+	int (*get_irq_vector)(struct ata_host *, int);
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
+};
+
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
+};
+
+struct mii_if_info {
+	int phy_id;
+	int advertising;
+	int phy_id_mask;
+	int reg_num_mask;
+	unsigned int full_duplex: 1;
+	unsigned int force_media: 1;
+	unsigned int supports_gmii: 1;
+	struct net_device *dev;
+	int (*mdio_read)(struct net_device *, int, int);
+	void (*mdio_write)(struct net_device *, int, int, int);
+};
+
+struct mii_bus;
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct phy_package_shared;
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22 = 1,
+		MDIOBUS_C45 = 2,
+		MDIOBUS_C22_C45 = 3,
+	} probe_capabilities;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	long unsigned int flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+enum device_link_state {
+	DL_STATE_NONE = -1,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_UP = 3,
+	PHY_RUNNING = 4,
+	PHY_NOLINK = 5,
+	PHY_CABLETEST = 6,
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_QSGMII = 18,
+	PHY_INTERFACE_MODE_TRGMII = 19,
+	PHY_INTERFACE_MODE_100BASEX = 20,
+	PHY_INTERFACE_MODE_1000BASEX = 21,
+	PHY_INTERFACE_MODE_2500BASEX = 22,
+	PHY_INTERFACE_MODE_5GBASER = 23,
+	PHY_INTERFACE_MODE_RXAUI = 24,
+	PHY_INTERFACE_MODE_XAUI = 25,
+	PHY_INTERFACE_MODE_10GBASER = 26,
+	PHY_INTERFACE_MODE_25GBASER = 27,
+	PHY_INTERFACE_MODE_USXGMII = 28,
+	PHY_INTERFACE_MODE_10GKR = 29,
+	PHY_INTERFACE_MODE_QUSGMII = 30,
+	PHY_INTERFACE_MODE_1000BASEKX = 31,
+	PHY_INTERFACE_MODE_MAX = 32,
+} phy_interface_t;
+
+struct pse_control;
+
+struct phy_driver;
+
+struct phylink;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	struct device_link *devlink;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	int rate_matching;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	long unsigned int supported[2];
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	long unsigned int adv_old[2];
+	long unsigned int host_interfaces[1];
+	u32 eee_broken_modes;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	struct pse_control *psec;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	unsigned int link_down_events;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+	const struct macsec_ops *macsec_ops;
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const long unsigned int * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*get_rate_matching)(struct phy_device *, phy_interface_t);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+};
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+typedef __u16 __sum16;
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	struct kmem_cache *bind2_bucket_cachep;
+	struct inet_bind_hashbucket *bhash2;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+	bool pernet;
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	long unsigned int state;
+	int weight;
+	int defer_hard_irqs_count;
+	long unsigned int gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int poll_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	struct hrtimer timer;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	unsigned int napi_id;
+	struct task_struct *thread;
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+enum skb_free_reason {
+	SKB_REASON_CONSUMED = 0,
+	SKB_REASON_DROPPED = 1,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		};
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		} addrs;
+	};
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	u16 incoming_cpu;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog *prog;
+	struct sock *socks[0];
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long int interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long int rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct bnx2_tx_bd {
+	u32 tx_bd_haddr_hi;
+	u32 tx_bd_haddr_lo;
+	u32 tx_bd_mss_nbytes;
+	u32 tx_bd_vlan_tag_flags;
+};
+
+struct bnx2_rx_bd {
+	u32 rx_bd_haddr_hi;
+	u32 rx_bd_haddr_lo;
+	u32 rx_bd_len;
+	u32 rx_bd_flags;
+};
+
+struct status_block {
+	u32 status_attn_bits;
+	u32 status_attn_bits_ack;
+	u16 status_tx_quick_consumer_index1;
+	u16 status_tx_quick_consumer_index0;
+	u16 status_tx_quick_consumer_index3;
+	u16 status_tx_quick_consumer_index2;
+	u16 status_rx_quick_consumer_index1;
+	u16 status_rx_quick_consumer_index0;
+	u16 status_rx_quick_consumer_index3;
+	u16 status_rx_quick_consumer_index2;
+	u16 status_rx_quick_consumer_index5;
+	u16 status_rx_quick_consumer_index4;
+	u16 status_rx_quick_consumer_index7;
+	u16 status_rx_quick_consumer_index6;
+	u16 status_rx_quick_consumer_index9;
+	u16 status_rx_quick_consumer_index8;
+	u16 status_rx_quick_consumer_index11;
+	u16 status_rx_quick_consumer_index10;
+	u16 status_rx_quick_consumer_index13;
+	u16 status_rx_quick_consumer_index12;
+	u16 status_rx_quick_consumer_index15;
+	u16 status_rx_quick_consumer_index14;
+	u16 status_cmd_consumer_index;
+	u16 status_completion_producer_index;
+	u8 status_blk_num;
+	u8 status_unused;
+	u16 status_idx;
+};
+
+struct status_block_msix {
+	u16 status_rx_quick_consumer_index;
+	u16 status_tx_quick_consumer_index;
+	u16 status_cmd_consumer_index;
+	u16 status_completion_producer_index;
+	u32 status_unused;
+	u8 status_blk_num;
+	u8 status_unused2;
+	u16 status_idx;
+};
+
+struct statistics_block {
+	u32 stat_IfHCInOctets_hi;
+	u32 stat_IfHCInOctets_lo;
+	u32 stat_IfHCInBadOctets_hi;
+	u32 stat_IfHCInBadOctets_lo;
+	u32 stat_IfHCOutOctets_hi;
+	u32 stat_IfHCOutOctets_lo;
+	u32 stat_IfHCOutBadOctets_hi;
+	u32 stat_IfHCOutBadOctets_lo;
+	u32 stat_IfHCInUcastPkts_hi;
+	u32 stat_IfHCInUcastPkts_lo;
+	u32 stat_IfHCInMulticastPkts_hi;
+	u32 stat_IfHCInMulticastPkts_lo;
+	u32 stat_IfHCInBroadcastPkts_hi;
+	u32 stat_IfHCInBroadcastPkts_lo;
+	u32 stat_IfHCOutUcastPkts_hi;
+	u32 stat_IfHCOutUcastPkts_lo;
+	u32 stat_IfHCOutMulticastPkts_hi;
+	u32 stat_IfHCOutMulticastPkts_lo;
+	u32 stat_IfHCOutBroadcastPkts_hi;
+	u32 stat_IfHCOutBroadcastPkts_lo;
+	u32 stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
+	u32 stat_Dot3StatsCarrierSenseErrors;
+	u32 stat_Dot3StatsFCSErrors;
+	u32 stat_Dot3StatsAlignmentErrors;
+	u32 stat_Dot3StatsSingleCollisionFrames;
+	u32 stat_Dot3StatsMultipleCollisionFrames;
+	u32 stat_Dot3StatsDeferredTransmissions;
+	u32 stat_Dot3StatsExcessiveCollisions;
+	u32 stat_Dot3StatsLateCollisions;
+	u32 stat_EtherStatsCollisions;
+	u32 stat_EtherStatsFragments;
+	u32 stat_EtherStatsJabbers;
+	u32 stat_EtherStatsUndersizePkts;
+	u32 stat_EtherStatsOverrsizePkts;
+	u32 stat_EtherStatsPktsRx64Octets;
+	u32 stat_EtherStatsPktsRx65Octetsto127Octets;
+	u32 stat_EtherStatsPktsRx128Octetsto255Octets;
+	u32 stat_EtherStatsPktsRx256Octetsto511Octets;
+	u32 stat_EtherStatsPktsRx512Octetsto1023Octets;
+	u32 stat_EtherStatsPktsRx1024Octetsto1522Octets;
+	u32 stat_EtherStatsPktsRx1523Octetsto9022Octets;
+	u32 stat_EtherStatsPktsTx64Octets;
+	u32 stat_EtherStatsPktsTx65Octetsto127Octets;
+	u32 stat_EtherStatsPktsTx128Octetsto255Octets;
+	u32 stat_EtherStatsPktsTx256Octetsto511Octets;
+	u32 stat_EtherStatsPktsTx512Octetsto1023Octets;
+	u32 stat_EtherStatsPktsTx1024Octetsto1522Octets;
+	u32 stat_EtherStatsPktsTx1523Octetsto9022Octets;
+	u32 stat_XonPauseFramesReceived;
+	u32 stat_XoffPauseFramesReceived;
+	u32 stat_OutXonSent;
+	u32 stat_OutXoffSent;
+	u32 stat_FlowControlDone;
+	u32 stat_MacControlFramesReceived;
+	u32 stat_XoffStateEntered;
+	u32 stat_IfInFramesL2FilterDiscards;
+	u32 stat_IfInRuleCheckerDiscards;
+	u32 stat_IfInFTQDiscards;
+	u32 stat_IfInMBUFDiscards;
+	u32 stat_IfInRuleCheckerP4Hit;
+	u32 stat_CatchupInRuleCheckerDiscards;
+	u32 stat_CatchupInFTQDiscards;
+	u32 stat_CatchupInMBUFDiscards;
+	u32 stat_CatchupInRuleCheckerP4Hit;
+	u32 stat_GenStat00;
+	u32 stat_GenStat01;
+	u32 stat_GenStat02;
+	u32 stat_GenStat03;
+	u32 stat_GenStat04;
+	u32 stat_GenStat05;
+	u32 stat_GenStat06;
+	u32 stat_GenStat07;
+	u32 stat_GenStat08;
+	u32 stat_GenStat09;
+	u32 stat_GenStat10;
+	u32 stat_GenStat11;
+	u32 stat_GenStat12;
+	u32 stat_GenStat13;
+	u32 stat_GenStat14;
+	u32 stat_GenStat15;
+	u32 stat_FwRxDrop;
+};
+
+struct l2_fhdr {
+	u32 l2_fhdr_status;
+	u32 l2_fhdr_hash;
+	u16 l2_fhdr_vlan_tag;
+	u16 l2_fhdr_pkt_len;
+	u16 l2_fhdr_tcp_udp_xsum;
+	u16 l2_fhdr_ip_xsum;
+};
+
+struct bnx2_sw_bd {
+	u8 *data;
+	dma_addr_t mapping;
+};
+
+struct bnx2_sw_pg {
+	struct page *page;
+	dma_addr_t mapping;
+};
+
+struct bnx2_sw_tx_bd {
+	struct sk_buff *skb;
+	dma_addr_t mapping;
+	short unsigned int is_gso;
+	short unsigned int nr_frags;
+};
+
+struct flash_spec {
+	u32 strapping;
+	u32 config1;
+	u32 config2;
+	u32 config3;
+	u32 write1;
+	u32 flags;
+	u32 page_bits;
+	u32 page_size;
+	u32 addr_mask;
+	u32 total_size;
+	u8 *name;
+};
+
+struct bnx2_irq {
+	irq_handler_t handler;
+	unsigned int vector;
+	u8 requested;
+	char name[18];
+};
+
+struct bnx2_tx_ring_info {
+	u32 tx_prod_bseq;
+	u16 tx_prod;
+	u32 tx_bidx_addr;
+	u32 tx_bseq_addr;
+	struct bnx2_tx_bd *tx_desc_ring;
+	struct bnx2_sw_tx_bd *tx_buf_ring;
+	u16 tx_cons;
+	u16 hw_tx_cons;
+	dma_addr_t tx_desc_mapping;
+};
+
+struct bnx2_rx_ring_info {
+	u32 rx_prod_bseq;
+	u16 rx_prod;
+	u16 rx_cons;
+	u32 rx_bidx_addr;
+	u32 rx_bseq_addr;
+	u32 rx_pg_bidx_addr;
+	u16 rx_pg_prod;
+	u16 rx_pg_cons;
+	struct bnx2_sw_bd *rx_buf_ring;
+	struct bnx2_rx_bd *rx_desc_ring[8];
+	struct bnx2_sw_pg *rx_pg_ring;
+	struct bnx2_rx_bd *rx_pg_desc_ring[32];
+	dma_addr_t rx_desc_mapping[8];
+	dma_addr_t rx_pg_desc_mapping[32];
+};
+
+struct bnx2;
+
+struct bnx2_napi {
+	struct napi_struct napi;
+	struct bnx2 *bp;
+	union {
+		struct status_block *msi;
+		struct status_block_msix *msix;
+	} status_blk;
+	u16 *hw_tx_cons_ptr;
+	u16 *hw_rx_cons_ptr;
+	u32 last_status_idx;
+	u32 int_num;
+	struct bnx2_rx_ring_info rx_ring;
+	struct bnx2_tx_ring_info tx_ring;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bnx2 {
+	void *regview;
+	struct net_device *dev;
+	struct pci_dev *pdev;
+	atomic_t intr_sem;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bnx2_napi bnx2_napi[9];
+	u32 rx_buf_use_size;
+	u32 rx_buf_size;
+	u32 rx_copy_thresh;
+	u32 rx_jumbo_thresh;
+	u32 rx_max_ring_idx;
+	u32 rx_max_pg_ring_idx;
+	int tx_ring_size;
+	u32 tx_wake_thresh;
+	unsigned int current_interval;
+	struct timer_list timer;
+	struct work_struct reset_task;
+	spinlock_t phy_lock;
+	spinlock_t indirect_lock;
+	u32 phy_flags;
+	u32 mii_bmcr;
+	u32 mii_bmsr;
+	u32 mii_bmsr1;
+	u32 mii_adv;
+	u32 mii_lpa;
+	u32 mii_up1;
+	u32 chip_id;
+	u32 phy_addr;
+	u32 phy_id;
+	u16 bus_speed_mhz;
+	u8 wol;
+	u8 pad;
+	u16 fw_wr_seq;
+	u16 fw_drv_pulse_wr_seq;
+	u32 fw_last_msg;
+	int rx_max_ring;
+	int rx_ring_size;
+	int rx_max_pg_ring;
+	int rx_pg_ring_size;
+	u16 tx_quick_cons_trip;
+	u16 tx_quick_cons_trip_int;
+	u16 rx_quick_cons_trip;
+	u16 rx_quick_cons_trip_int;
+	u16 comp_prod_trip;
+	u16 comp_prod_trip_int;
+	u16 tx_ticks;
+	u16 tx_ticks_int;
+	u16 com_ticks;
+	u16 com_ticks_int;
+	u16 cmd_ticks;
+	u16 cmd_ticks_int;
+	u16 rx_ticks;
+	u16 rx_ticks_int;
+	u32 stats_ticks;
+	dma_addr_t status_blk_mapping;
+	void *status_blk;
+	struct statistics_block *stats_blk;
+	struct statistics_block *temp_stats_blk;
+	dma_addr_t stats_blk_mapping;
+	int ctx_pages;
+	void *ctx_blk[4];
+	dma_addr_t ctx_blk_mapping[4];
+	u32 hc_cmd;
+	u32 rx_mode;
+	u16 req_line_speed;
+	u8 req_duplex;
+	u8 phy_port;
+	u8 link_up;
+	u16 line_speed;
+	u8 duplex;
+	u8 flow_ctrl;
+	u32 advertising;
+	u8 req_flow_ctrl;
+	u8 autoneg;
+	u8 loopback;
+	u8 serdes_an_pending;
+	u8 mac_addr[8];
+	u32 shmem_base;
+	char fw_version[32];
+	int pm_cap;
+	int pcix_cap;
+	const struct flash_spec *flash_info;
+	u32 flash_size;
+	int status_stats_size;
+	struct bnx2_irq irq_tbl[9];
+	int irq_nvecs;
+	u8 func;
+	u8 num_tx_rings;
+	u8 num_rx_rings;
+	int num_req_tx_rings;
+	int num_req_rx_rings;
+	u32 leds_save;
+	u32 idle_chk_status_idx;
+	const struct firmware *mips_firmware;
+	const struct firmware *rv2p_firmware;
+	long: 64;
+};
+
+struct cpu_reg {
+	u32 mode;
+	u32 mode_value_halt;
+	u32 mode_value_sstep;
+	u32 state;
+	u32 state_value_clear;
+	u32 gpr0;
+	u32 evmask;
+	u32 pc;
+	u32 inst;
+	u32 bp;
+	u32 spad_base;
+	u32 mips_view_base;
+};
+
+struct bnx2_fw_file_section {
+	__be32 addr;
+	__be32 len;
+	__be32 offset;
+};
+
+struct bnx2_mips_fw_file_entry {
+	__be32 start_addr;
+	struct bnx2_fw_file_section text;
+	struct bnx2_fw_file_section data;
+	struct bnx2_fw_file_section rodata;
+};
+
+struct bnx2_rv2p_fw_file_entry {
+	struct bnx2_fw_file_section rv2p;
+	__be32 fixup[8];
+};
+
+struct bnx2_mips_fw_file {
+	struct bnx2_mips_fw_file_entry com;
+	struct bnx2_mips_fw_file_entry cp;
+	struct bnx2_mips_fw_file_entry rxp;
+	struct bnx2_mips_fw_file_entry tpat;
+	struct bnx2_mips_fw_file_entry txp;
+};
+
+struct bnx2_rv2p_fw_file {
+	struct bnx2_rv2p_fw_file_entry proc1;
+	struct bnx2_rv2p_fw_file_entry proc2;
+};
+
+enum {
+	BCM5706 = 0,
+	NC370T = 1,
+	NC370I = 2,
+	BCM5706S = 3,
+	NC370F = 4,
+	BCM5708 = 5,
+	BCM5708S = 6,
+	BCM5709 = 7,
+	BCM5709S = 8,
+	BCM5716 = 9,
+	BCM5716S = 10,
+};
+
+struct ftq_reg {
+	char *name;
+	u32 off;
+};
+
+struct mem_entry {
+	u32 offset;
+	u32 len;
+};
+
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
+};
+
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+};
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+};
+
+struct ptp_clock_time {
+	__s64 sec;
+	__u32 nsec;
+	__u32 reserved;
+};
+
+struct ptp_extts_request {
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+	union {
+		struct ptp_clock_time start;
+		struct ptp_clock_time phase;
+	};
+	struct ptp_clock_time period;
+	unsigned int index;
+	unsigned int flags;
+	union {
+		struct ptp_clock_time on;
+		unsigned int rsv[4];
+	};
+};
+
+enum ptp_pin_function {
+	PTP_PF_NONE = 0,
+	PTP_PF_EXTTS = 1,
+	PTP_PF_PEROUT = 2,
+	PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+	char name[64];
+	unsigned int index;
+	unsigned int func;
+	unsigned int chan;
+	unsigned int rsv[5];
+};
+
+struct ptp_clock_request {
+	enum {
+		PTP_CLK_REQ_EXTTS = 0,
+		PTP_CLK_REQ_PEROUT = 1,
+		PTP_CLK_REQ_PPS = 2,
+	} type;
+	union {
+		struct ptp_extts_request extts;
+		struct ptp_perout_request perout;
+	};
+};
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct ptp_clock_info {
+	struct module *owner;
+	char name[32];
+	s32 max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int n_pins;
+	int pps;
+	struct ptp_pin_desc *pin_config;
+	int (*adjfine)(struct ptp_clock_info *, long int);
+	int (*adjphase)(struct ptp_clock_info *, s32);
+	int (*adjtime)(struct ptp_clock_info *, s64);
+	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+	int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+	long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum e1000_mac_type {
+	e1000_82571 = 0,
+	e1000_82572 = 1,
+	e1000_82573 = 2,
+	e1000_82574 = 3,
+	e1000_82583 = 4,
+	e1000_80003es2lan = 5,
+	e1000_ich8lan = 6,
+	e1000_ich9lan = 7,
+	e1000_ich10lan = 8,
+	e1000_pchlan = 9,
+	e1000_pch2lan = 10,
+	e1000_pch_lpt = 11,
+	e1000_pch_spt = 12,
+	e1000_pch_cnp = 13,
+	e1000_pch_tgp = 14,
+	e1000_pch_adp = 15,
+	e1000_pch_mtp = 16,
+	e1000_pch_lnp = 17,
+	e1000_pch_ptp = 18,
+};
+
+enum e1000_media_type {
+	e1000_media_type_unknown = 0,
+	e1000_media_type_copper = 1,
+	e1000_media_type_fiber = 2,
+	e1000_media_type_internal_serdes = 3,
+	e1000_num_media_types = 4,
+};
+
+enum e1000_nvm_type {
+	e1000_nvm_unknown = 0,
+	e1000_nvm_none = 1,
+	e1000_nvm_eeprom_spi = 2,
+	e1000_nvm_flash_hw = 3,
+	e1000_nvm_flash_sw = 4,
+};
+
+enum e1000_nvm_override {
+	e1000_nvm_override_none = 0,
+	e1000_nvm_override_spi_small = 1,
+	e1000_nvm_override_spi_large = 2,
+};
+
+enum e1000_phy_type {
+	e1000_phy_unknown = 0,
+	e1000_phy_none = 1,
+	e1000_phy_m88 = 2,
+	e1000_phy_igp = 3,
+	e1000_phy_igp_2 = 4,
+	e1000_phy_gg82563 = 5,
+	e1000_phy_igp_3 = 6,
+	e1000_phy_ife = 7,
+	e1000_phy_bm = 8,
+	e1000_phy_82578 = 9,
+	e1000_phy_82577 = 10,
+	e1000_phy_82579 = 11,
+	e1000_phy_i217 = 12,
+};
+
+enum e1000_bus_width {
+	e1000_bus_width_unknown = 0,
+	e1000_bus_width_pcie_x1 = 1,
+	e1000_bus_width_pcie_x2 = 2,
+	e1000_bus_width_pcie_x4 = 4,
+	e1000_bus_width_pcie_x8 = 8,
+	e1000_bus_width_32 = 9,
+	e1000_bus_width_64 = 10,
+	e1000_bus_width_reserved = 11,
+};
+
+enum e1000_1000t_rx_status {
+	e1000_1000t_rx_status_not_ok = 0,
+	e1000_1000t_rx_status_ok = 1,
+	e1000_1000t_rx_status_undefined = 255,
+};
+
+enum e1000_rev_polarity {
+	e1000_rev_polarity_normal = 0,
+	e1000_rev_polarity_reversed = 1,
+	e1000_rev_polarity_undefined = 255,
+};
+
+enum e1000_fc_mode {
+	e1000_fc_none = 0,
+	e1000_fc_rx_pause = 1,
+	e1000_fc_tx_pause = 2,
+	e1000_fc_full = 3,
+	e1000_fc_default = 255,
+};
+
+enum e1000_ms_type {
+	e1000_ms_hw_default = 0,
+	e1000_ms_force_master = 1,
+	e1000_ms_force_slave = 2,
+	e1000_ms_auto = 3,
+};
+
+enum e1000_smart_speed {
+	e1000_smart_speed_default = 0,
+	e1000_smart_speed_on = 1,
+	e1000_smart_speed_off = 2,
+};
+
+enum e1000_serdes_link_state {
+	e1000_serdes_link_down = 0,
+	e1000_serdes_link_autoneg_progress = 1,
+	e1000_serdes_link_autoneg_complete = 2,
+	e1000_serdes_link_forced_up = 3,
+};
+
+struct e1000_hw_stats {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorc;
+	u64 gotc;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 tor;
+	u64 tot;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+};
+
+struct e1000_phy_stats {
+	u32 idle_errors;
+	u32 receive_errors;
+};
+
+struct e1000_host_mng_dhcp_cookie {
+	u32 signature;
+	u8 status;
+	u8 reserved0;
+	u16 vlan_id;
+	u32 reserved1;
+	u16 reserved2;
+	u8 reserved3;
+	u8 checksum;
+};
+
+struct e1000_hw;
+
+struct e1000_mac_operations {
+	s32 (*id_led_init)(struct e1000_hw *);
+	s32 (*blink_led)(struct e1000_hw *);
+	bool (*check_mng_mode)(struct e1000_hw *);
+	s32 (*check_for_link)(struct e1000_hw *);
+	s32 (*cleanup_led)(struct e1000_hw *);
+	void (*clear_hw_cntrs)(struct e1000_hw *);
+	void (*clear_vfta)(struct e1000_hw *);
+	s32 (*get_bus_info)(struct e1000_hw *);
+	void (*set_lan_id)(struct e1000_hw *);
+	s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
+	s32 (*led_on)(struct e1000_hw *);
+	s32 (*led_off)(struct e1000_hw *);
+	void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
+	s32 (*reset_hw)(struct e1000_hw *);
+	s32 (*init_hw)(struct e1000_hw *);
+	s32 (*setup_link)(struct e1000_hw *);
+	s32 (*setup_physical_interface)(struct e1000_hw *);
+	s32 (*setup_led)(struct e1000_hw *);
+	void (*write_vfta)(struct e1000_hw *, u32, u32);
+	void (*config_collision_dist)(struct e1000_hw *);
+	int (*rar_set)(struct e1000_hw *, u8 *, u32);
+	s32 (*read_mac_addr)(struct e1000_hw *);
+	u32 (*rar_get_count)(struct e1000_hw *);
+};
+
+struct e1000_mac_info {
+	struct e1000_mac_operations ops;
+	u8 addr[6];
+	u8 perm_addr[6];
+	enum e1000_mac_type type;
+	u32 collision_delta;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	u32 mc_filter_type;
+	u32 tx_packet_delta;
+	u32 txcw;
+	u16 current_ifs_val;
+	u16 ifs_max_val;
+	u16 ifs_min_val;
+	u16 ifs_ratio;
+	u16 ifs_step_size;
+	u16 mta_reg_count;
+	u32 mta_shadow[128];
+	u16 rar_entry_count;
+	u8 forced_speed_duplex;
+	bool adaptive_ifs;
+	bool has_fwsm;
+	bool arc_subsystem_valid;
+	bool autoneg;
+	bool autoneg_failed;
+	bool get_link_status;
+	bool in_ifs_mode;
+	bool serdes_has_link;
+	bool tx_pkt_filtering;
+	enum e1000_serdes_link_state serdes_link_state;
+};
+
+struct e1000_fc_info {
+	u32 high_water;
+	u32 low_water;
+	u16 pause_time;
+	u16 refresh_time;
+	bool send_xon;
+	bool strict_ieee;
+	enum e1000_fc_mode current_mode;
+	enum e1000_fc_mode requested_mode;
+};
+
+struct e1000_phy_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*cfg_on_link_up)(struct e1000_hw *);
+	s32 (*check_polarity)(struct e1000_hw *);
+	s32 (*check_reset_block)(struct e1000_hw *);
+	s32 (*commit)(struct e1000_hw *);
+	s32 (*force_speed_duplex)(struct e1000_hw *);
+	s32 (*get_cfg_done)(struct e1000_hw *);
+	s32 (*get_cable_length)(struct e1000_hw *);
+	s32 (*get_info)(struct e1000_hw *);
+	s32 (*set_page)(struct e1000_hw *, u16);
+	s32 (*read_reg)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *);
+	void (*release)(struct e1000_hw *);
+	s32 (*reset)(struct e1000_hw *);
+	s32 (*set_d0_lplu_state)(struct e1000_hw *, bool);
+	s32 (*set_d3_lplu_state)(struct e1000_hw *, bool);
+	s32 (*write_reg)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_locked)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_page)(struct e1000_hw *, u32, u16);
+	void (*power_up)(struct e1000_hw *);
+	void (*power_down)(struct e1000_hw *);
+};
+
+struct e1000_phy_info {
+	struct e1000_phy_operations ops;
+	enum e1000_phy_type type;
+	enum e1000_1000t_rx_status local_rx;
+	enum e1000_1000t_rx_status remote_rx;
+	enum e1000_ms_type ms_type;
+	enum e1000_ms_type original_ms_type;
+	enum e1000_rev_polarity cable_polarity;
+	enum e1000_smart_speed smart_speed;
+	u32 addr;
+	u32 id;
+	u32 reset_delay_us;
+	u32 revision;
+	enum e1000_media_type media_type;
+	u16 autoneg_advertised;
+	u16 autoneg_mask;
+	u16 cable_length;
+	u16 max_cable_length;
+	u16 min_cable_length;
+	u8 mdix;
+	bool disable_polarity_correction;
+	bool is_mdix;
+	bool polarity_correction;
+	bool speed_downgraded;
+	bool autoneg_wait_to_complete;
+};
+
+struct e1000_nvm_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*read)(struct e1000_hw *, u16, u16, u16 *);
+	void (*release)(struct e1000_hw *);
+	void (*reload)(struct e1000_hw *);
+	s32 (*update)(struct e1000_hw *);
+	s32 (*valid_led_default)(struct e1000_hw *, u16 *);
+	s32 (*validate)(struct e1000_hw *);
+	s32 (*write)(struct e1000_hw *, u16, u16, u16 *);
+};
+
+struct e1000_nvm_info {
+	struct e1000_nvm_operations ops;
+	enum e1000_nvm_type type;
+	enum e1000_nvm_override override;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	u16 word_size;
+	u16 delay_usec;
+	u16 address_bits;
+	u16 opcode_bits;
+	u16 page_size;
+};
+
+struct e1000_bus_info {
+	enum e1000_bus_width width;
+	u16 func;
+};
+
+struct e1000_dev_spec_82571 {
+	bool laa_is_present;
+	u32 smb_counter;
+};
+
+struct e1000_dev_spec_80003es2lan {
+	bool mdic_wa_enable;
+};
+
+struct e1000_shadow_ram {
+	u16 value;
+	bool modified;
+};
+
+enum e1000_ulp_state {
+	e1000_ulp_state_unknown = 0,
+	e1000_ulp_state_off = 1,
+	e1000_ulp_state_on = 2,
+};
+
+struct e1000_dev_spec_ich8lan {
+	bool kmrn_lock_loss_workaround_enabled;
+	struct e1000_shadow_ram shadow_ram[2048];
+	bool nvm_k1_enabled;
+	bool eee_disable;
+	u16 eee_lp_ability;
+	enum e1000_ulp_state ulp_state;
+};
+
+struct e1000_adapter;
+
+struct e1000_hw {
+	struct e1000_adapter *adapter;
+	void *hw_addr;
+	void *flash_address;
+	struct e1000_mac_info mac;
+	struct e1000_fc_info fc;
+	struct e1000_phy_info phy;
+	struct e1000_nvm_info nvm;
+	struct e1000_bus_info bus;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	union {
+		struct e1000_dev_spec_82571 e82571;
+		struct e1000_dev_spec_80003es2lan e80003es2lan;
+		struct e1000_dev_spec_ich8lan ich8lan;
+	} dev_spec;
+};
+
+struct e1000_phy_regs {
+	u16 bmcr;
+	u16 bmsr;
+	u16 advertise;
+	u16 lpa;
+	u16 expansion;
+	u16 ctrl1000;
+	u16 stat1000;
+	u16 estatus;
+};
+
+struct e1000_buffer;
+
+struct e1000_ring {
+	struct e1000_adapter *adapter;
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	u16 next_to_use;
+	u16 next_to_clean;
+	void *head;
+	void *tail;
+	struct e1000_buffer *buffer_info;
+	char name[21];
+	u32 ims_val;
+	u32 itr_val;
+	void *itr_register;
+	int set_itr;
+	struct sk_buff *rx_skb_top;
+};
+
+struct ptp_clock;
+
+struct e1000_info;
+
+struct e1000_adapter {
+	struct timer_list watchdog_timer;
+	struct timer_list phy_info_timer;
+	struct timer_list blink_timer;
+	struct work_struct reset_task;
+	struct work_struct watchdog_task;
+	const struct e1000_info *ei;
+	long unsigned int active_vlans[64];
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u16 mng_vlan_id;
+	u16 link_speed;
+	u16 link_duplex;
+	u16 eeprom_vers;
+	long unsigned int state;
+	u32 itr;
+	u32 itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct e1000_ring *tx_ring;
+	u32 tx_fifo_limit;
+	struct napi_struct napi;
+	unsigned int uncorr_errors;
+	unsigned int corr_errors;
+	unsigned int restart_queue;
+	u32 txd_cmd;
+	bool detect_tx_hung;
+	bool tx_hang_recheck;
+	u8 tx_timeout_factor;
+	u32 tx_int_delay;
+	u32 tx_abs_int_delay;
+	unsigned int total_tx_bytes;
+	unsigned int total_tx_packets;
+	unsigned int total_rx_bytes;
+	unsigned int total_rx_packets;
+	u64 tpt_old;
+	u64 colc_old;
+	u32 gotc;
+	u64 gotc_old;
+	u32 tx_timeout_count;
+	u32 tx_fifo_head;
+	u32 tx_head_addr;
+	u32 tx_fifo_size;
+	u32 tx_dma_failed;
+	u32 tx_hwtstamp_timeouts;
+	u32 tx_hwtstamp_skipped;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	bool (*clean_rx)(struct e1000_ring *, int *, int);
+	void (*alloc_rx_buf)(struct e1000_ring *, int, gfp_t);
+	struct e1000_ring *rx_ring;
+	u32 rx_int_delay;
+	u32 rx_abs_int_delay;
+	u64 hw_csum_err;
+	u64 hw_csum_good;
+	u64 rx_hdr_split;
+	u32 gorc;
+	u64 gorc_old;
+	u32 alloc_rx_buff_failed;
+	u32 rx_dma_failed;
+	u32 rx_hwtstamp_cleared;
+	unsigned int rx_ps_pages;
+	u16 rx_ps_bsize0;
+	u32 max_frame_size;
+	u32 min_frame_size;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct e1000_hw hw;
+	spinlock_t stats64_lock;
+	struct e1000_hw_stats stats;
+	struct e1000_phy_info phy_info;
+	struct e1000_phy_stats phy_stats;
+	struct e1000_phy_regs phy_regs;
+	struct e1000_ring test_tx_ring;
+	struct e1000_ring test_rx_ring;
+	u32 test_icr;
+	u32 msg_enable;
+	unsigned int num_vectors;
+	struct msix_entry *msix_entries;
+	int int_mode;
+	u32 eiac_mask;
+	u32 eeprom_wol;
+	u32 wol;
+	u32 pba;
+	u32 max_hw_frame_size;
+	bool fc_autoneg;
+	unsigned int flags;
+	unsigned int flags2;
+	struct work_struct downshift_task;
+	struct work_struct update_phy_task;
+	struct work_struct print_hang_task;
+	int phy_hang_count;
+	u16 tx_ring_count;
+	u16 rx_ring_count;
+	struct hwtstamp_config hwtstamp_config;
+	struct delayed_work systim_overflow_work;
+	struct sk_buff *tx_hwtstamp_skb;
+	long unsigned int tx_hwtstamp_start;
+	struct work_struct tx_hwtstamp_work;
+	spinlock_t systim_lock;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_clock_info;
+	struct pm_qos_request pm_qos_req;
+	long int ptp_delta;
+	u16 eee_advert;
+	long: 48;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct e1000_ps_page {
+	struct page *page;
+	u64 dma;
+};
+
+struct e1000_buffer {
+	dma_addr_t dma;
+	struct sk_buff *skb;
+	union {
+		struct {
+			long unsigned int time_stamp;
+			u16 length;
+			u16 next_to_watch;
+			unsigned int segs;
+			unsigned int bytecount;
+			u16 mapped_as_page;
+		};
+		struct {
+			struct e1000_ps_page *ps_pages;
+			struct page *page;
+		};
+	};
+};
+
+struct e1000_info {
+	enum e1000_mac_type mac;
+	unsigned int flags;
+	unsigned int flags2;
+	u32 pba;
+	u32 max_hw_frame_size;
+	s32 (*get_variants)(struct e1000_adapter *);
+	const struct e1000_mac_operations *mac_ops;
+	const struct e1000_phy_operations *phy_ops;
+	const struct e1000_nvm_operations *nvm_ops;
+};
+
+enum e1000_state_t {
+	__E1000_TESTING = 0,
+	__E1000_RESETTING = 1,
+	__E1000_ACCESS_SHARED_RESOURCE = 2,
+	__E1000_DOWN = 3,
+};
+
+struct ich8_hsfsts {
+	u16 flcdone: 1;
+	u16 flcerr: 1;
+	u16 dael: 1;
+	u16 berasesz: 2;
+	u16 flcinprog: 1;
+	u16 reserved1: 2;
+	u16 reserved2: 6;
+	u16 fldesvalid: 1;
+	u16 flockdn: 1;
+};
+
+union ich8_hws_flash_status {
+	struct ich8_hsfsts hsf_status;
+	u16 regval;
+};
+
+struct ich8_hsflctl {
+	u16 flcgo: 1;
+	u16 flcycle: 2;
+	u16 reserved: 5;
+	u16 fldbcount: 2;
+	u16 flockdn: 6;
+};
+
+union ich8_hws_flash_ctrl {
+	struct ich8_hsflctl hsf_ctrl;
+	u16 regval;
+};
+
+struct ich8_pr {
+	u32 base: 13;
+	u32 reserved1: 2;
+	u32 rpe: 1;
+	u32 limit: 13;
+	u32 reserved2: 2;
+	u32 wpe: 1;
+};
+
+union ich8_flash_protected_range {
+	struct ich8_pr range;
+	u32 regval;
+};
+
+struct i2c_client {
+	short unsigned int flags;
+	short unsigned int addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+enum e1000_mac_type___2 {
+	e1000_undefined = 0,
+	e1000_82575 = 1,
+	e1000_82576 = 2,
+	e1000_82580 = 3,
+	e1000_i350 = 4,
+	e1000_i354 = 5,
+	e1000_i210 = 6,
+	e1000_i211 = 7,
+	e1000_num_macs = 8,
+};
+
+enum e1000_nvm_type___2 {
+	e1000_nvm_unknown___2 = 0,
+	e1000_nvm_none___2 = 1,
+	e1000_nvm_eeprom_spi___2 = 2,
+	e1000_nvm_flash_hw___2 = 3,
+	e1000_nvm_invm = 4,
+	e1000_nvm_flash_sw___2 = 5,
+};
+
+enum e1000_phy_type___2 {
+	e1000_phy_unknown___2 = 0,
+	e1000_phy_none___2 = 1,
+	e1000_phy_m88___2 = 2,
+	e1000_phy_igp___2 = 3,
+	e1000_phy_igp_2___2 = 4,
+	e1000_phy_gg82563___2 = 5,
+	e1000_phy_igp_3___2 = 6,
+	e1000_phy_ife___2 = 7,
+	e1000_phy_82580 = 8,
+	e1000_phy_i210 = 9,
+	e1000_phy_bcm54616 = 10,
+};
+
+enum e1000_bus_type {
+	e1000_bus_type_unknown = 0,
+	e1000_bus_type_pci = 1,
+	e1000_bus_type_pcix = 2,
+	e1000_bus_type_pci_express = 3,
+	e1000_bus_type_reserved = 4,
+};
+
+enum e1000_bus_speed {
+	e1000_bus_speed_unknown = 0,
+	e1000_bus_speed_33 = 1,
+	e1000_bus_speed_66 = 2,
+	e1000_bus_speed_100 = 3,
+	e1000_bus_speed_120 = 4,
+	e1000_bus_speed_133 = 5,
+	e1000_bus_speed_2500 = 6,
+	e1000_bus_speed_5000 = 7,
+	e1000_bus_speed_reserved = 8,
+};
+
+struct e1000_hw_stats___2 {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorc;
+	u64 gotc;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 tor;
+	u64 tot;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+	u64 cbtmpc;
+	u64 htdpmc;
+	u64 cbrdpc;
+	u64 cbrmpc;
+	u64 rpthc;
+	u64 hgptc;
+	u64 htcbdpc;
+	u64 hgorc;
+	u64 hgotc;
+	u64 lenerrs;
+	u64 scvpc;
+	u64 hrmpc;
+	u64 doosync;
+	u64 o2bgptc;
+	u64 o2bspc;
+	u64 b2ospc;
+	u64 b2ogprc;
+};
+
+struct e1000_sfp_flags {
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e10_base_bx10: 1;
+	u8 e10_base_px: 1;
+};
+
+struct e1000_hw___2;
+
+struct e1000_mac_operations___2 {
+	s32 (*check_for_link)(struct e1000_hw___2 *);
+	s32 (*reset_hw)(struct e1000_hw___2 *);
+	s32 (*init_hw)(struct e1000_hw___2 *);
+	bool (*check_mng_mode)(struct e1000_hw___2 *);
+	s32 (*setup_physical_interface)(struct e1000_hw___2 *);
+	void (*rar_set)(struct e1000_hw___2 *, u8 *, u32);
+	s32 (*read_mac_addr)(struct e1000_hw___2 *);
+	s32 (*get_speed_and_duplex)(struct e1000_hw___2 *, u16 *, u16 *);
+	s32 (*acquire_swfw_sync)(struct e1000_hw___2 *, u16);
+	void (*release_swfw_sync)(struct e1000_hw___2 *, u16);
+	s32 (*get_thermal_sensor_data)(struct e1000_hw___2 *);
+	s32 (*init_thermal_sensor_thresh)(struct e1000_hw___2 *);
+	void (*write_vfta)(struct e1000_hw___2 *, u32, u32);
+};
+
+struct e1000_thermal_diode_data {
+	u8 location;
+	u8 temp;
+	u8 caution_thresh;
+	u8 max_op_thresh;
+};
+
+struct e1000_thermal_sensor_data {
+	struct e1000_thermal_diode_data sensor[3];
+};
+
+struct e1000_mac_info___2 {
+	struct e1000_mac_operations___2 ops;
+	u8 addr[6];
+	u8 perm_addr[6];
+	enum e1000_mac_type___2 type;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	u32 mc_filter_type;
+	u32 txcw;
+	u16 mta_reg_count;
+	u16 uta_reg_count;
+	u32 mta_shadow[128];
+	u16 rar_entry_count;
+	u8 forced_speed_duplex;
+	bool adaptive_ifs;
+	bool arc_subsystem_valid;
+	bool asf_firmware_present;
+	bool autoneg;
+	bool autoneg_failed;
+	bool disable_hw_init_bits;
+	bool get_link_status;
+	bool ifs_params_forced;
+	bool in_ifs_mode;
+	bool report_tx_early;
+	bool serdes_has_link;
+	bool tx_pkt_filtering;
+	struct e1000_thermal_sensor_data thermal_sensor_data;
+};
+
+struct e1000_fc_info___2 {
+	u32 high_water;
+	u32 low_water;
+	u16 pause_time;
+	bool send_xon;
+	bool strict_ieee;
+	enum e1000_fc_mode current_mode;
+	enum e1000_fc_mode requested_mode;
+};
+
+struct e1000_phy_operations___2 {
+	s32 (*acquire)(struct e1000_hw___2 *);
+	s32 (*check_polarity)(struct e1000_hw___2 *);
+	s32 (*check_reset_block)(struct e1000_hw___2 *);
+	s32 (*force_speed_duplex)(struct e1000_hw___2 *);
+	s32 (*get_cfg_done)(struct e1000_hw___2 *);
+	s32 (*get_cable_length)(struct e1000_hw___2 *);
+	s32 (*get_phy_info)(struct e1000_hw___2 *);
+	s32 (*read_reg)(struct e1000_hw___2 *, u32, u16 *);
+	void (*release)(struct e1000_hw___2 *);
+	s32 (*reset)(struct e1000_hw___2 *);
+	s32 (*set_d0_lplu_state)(struct e1000_hw___2 *, bool);
+	s32 (*set_d3_lplu_state)(struct e1000_hw___2 *, bool);
+	s32 (*write_reg)(struct e1000_hw___2 *, u32, u16);
+	s32 (*read_i2c_byte)(struct e1000_hw___2 *, u8, u8, u8 *);
+	s32 (*write_i2c_byte)(struct e1000_hw___2 *, u8, u8, u8);
+};
+
+struct e1000_phy_info___2 {
+	struct e1000_phy_operations___2 ops;
+	enum e1000_phy_type___2 type;
+	enum e1000_1000t_rx_status local_rx;
+	enum e1000_1000t_rx_status remote_rx;
+	enum e1000_ms_type ms_type;
+	enum e1000_ms_type original_ms_type;
+	enum e1000_rev_polarity cable_polarity;
+	enum e1000_smart_speed smart_speed;
+	u32 addr;
+	u32 id;
+	u32 reset_delay_us;
+	u32 revision;
+	enum e1000_media_type media_type;
+	u16 autoneg_advertised;
+	u16 autoneg_mask;
+	u16 cable_length;
+	u16 max_cable_length;
+	u16 min_cable_length;
+	u16 pair_length[4];
+	u8 mdix;
+	bool disable_polarity_correction;
+	bool is_mdix;
+	bool polarity_correction;
+	bool reset_disable;
+	bool speed_downgraded;
+	bool autoneg_wait_to_complete;
+};
+
+struct e1000_nvm_operations___2 {
+	s32 (*acquire)(struct e1000_hw___2 *);
+	s32 (*read)(struct e1000_hw___2 *, u16, u16, u16 *);
+	void (*release)(struct e1000_hw___2 *);
+	s32 (*write)(struct e1000_hw___2 *, u16, u16, u16 *);
+	s32 (*update)(struct e1000_hw___2 *);
+	s32 (*validate)(struct e1000_hw___2 *);
+	s32 (*valid_led_default)(struct e1000_hw___2 *, u16 *);
+};
+
+struct e1000_nvm_info___2 {
+	struct e1000_nvm_operations___2 ops;
+	enum e1000_nvm_type___2 type;
+	enum e1000_nvm_override override;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	u16 word_size;
+	u16 delay_usec;
+	u16 address_bits;
+	u16 opcode_bits;
+	u16 page_size;
+};
+
+struct e1000_bus_info___2 {
+	enum e1000_bus_type type;
+	enum e1000_bus_speed speed;
+	enum e1000_bus_width width;
+	u32 snoop;
+	u16 func;
+	u16 pci_cmd_word;
+};
+
+struct e1000_mbx_operations {
+	s32 (*init_params)(struct e1000_hw___2 *);
+	s32 (*read)(struct e1000_hw___2 *, u32 *, u16, u16, bool);
+	s32 (*write)(struct e1000_hw___2 *, u32 *, u16, u16);
+	s32 (*read_posted)(struct e1000_hw___2 *, u32 *, u16, u16);
+	s32 (*write_posted)(struct e1000_hw___2 *, u32 *, u16, u16);
+	s32 (*check_for_msg)(struct e1000_hw___2 *, u16);
+	s32 (*check_for_ack)(struct e1000_hw___2 *, u16);
+	s32 (*check_for_rst)(struct e1000_hw___2 *, u16);
+	s32 (*unlock)(struct e1000_hw___2 *, u16);
+};
+
+struct e1000_mbx_stats {
+	u32 msgs_tx;
+	u32 msgs_rx;
+	u32 acks;
+	u32 reqs;
+	u32 rsts;
+};
+
+struct e1000_mbx_info {
+	struct e1000_mbx_operations ops;
+	struct e1000_mbx_stats stats;
+	u32 timeout;
+	u32 usec_delay;
+	u16 size;
+};
+
+struct e1000_dev_spec_82575 {
+	bool sgmii_active;
+	bool global_device_reset;
+	bool eee_disable;
+	bool clear_semaphore_once;
+	struct e1000_sfp_flags eth_flags;
+	bool module_plugged;
+	u8 media_port;
+	bool media_changed;
+	bool mas_capable;
+};
+
+struct e1000_hw___2 {
+	void *back;
+	u8 *hw_addr;
+	u8 *flash_address;
+	long unsigned int io_base;
+	struct e1000_mac_info___2 mac;
+	struct e1000_fc_info___2 fc;
+	struct e1000_phy_info___2 phy;
+	struct e1000_nvm_info___2 nvm;
+	struct e1000_bus_info___2 bus;
+	struct e1000_mbx_info mbx;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	union {
+		struct e1000_dev_spec_82575 _82575;
+	} dev_spec;
+	u16 device_id;
+	u16 subsystem_vendor_id;
+	u16 subsystem_device_id;
+	u16 vendor_id;
+	u8 revision_id;
+};
+
+struct e1000_info___2 {
+	s32 (*get_invariants)(struct e1000_hw___2 *);
+	struct e1000_mac_operations___2 *mac_ops;
+	const struct e1000_phy_operations___2 *phy_ops;
+	struct e1000_nvm_operations___2 *nvm_ops;
+};
+
+union e1000_adv_tx_desc {
+	struct {
+		__le64 buffer_addr;
+		__le32 cmd_type_len;
+		__le32 olinfo_status;
+	} read;
+	struct {
+		__le64 rsvd;
+		__le32 nxtseq_seed;
+		__le32 status;
+	} wb;
+};
+
+struct i2c_algo_bit_data {
+	void *data;
+	void (*setsda)(void *, int);
+	void (*setscl)(void *, int);
+	int (*getsda)(void *);
+	int (*getscl)(void *);
+	int (*pre_xfer)(struct i2c_adapter *);
+	void (*post_xfer)(struct i2c_adapter *);
+	int udelay;
+	int timeout;
+	bool can_do_atomic;
+};
+
+struct vf_data_storage {
+	unsigned char vf_mac_addresses[6];
+	u16 vf_mc_hashes[30];
+	u16 num_vf_mc_hashes;
+	u32 flags;
+	long unsigned int last_nack;
+	u16 pf_vlan;
+	u16 pf_qos;
+	u16 tx_rate;
+	bool spoofchk_enabled;
+	bool trusted;
+};
+
+struct vf_mac_filter {
+	struct list_head l;
+	int vf;
+	bool free;
+	u8 vf_mac[6];
+};
+
+enum igb_tx_buf_type {
+	IGB_TYPE_SKB = 0,
+	IGB_TYPE_XDP = 1,
+};
+
+struct igb_tx_buffer {
+	union e1000_adv_tx_desc *next_to_watch;
+	long unsigned int time_stamp;
+	enum igb_tx_buf_type type;
+	union {
+		struct sk_buff *skb;
+		struct xdp_frame *xdpf;
+	};
+	unsigned int bytecount;
+	u16 gso_segs;
+	__be16 protocol;
+	dma_addr_t dma;
+	__u32 len;
+	u32 tx_flags;
+};
+
+struct igb_rx_buffer {
+	dma_addr_t dma;
+	struct page *page;
+	__u32 page_offset;
+	__u16 pagecnt_bias;
+};
+
+struct igb_tx_queue_stats {
+	u64 packets;
+	u64 bytes;
+	u64 restart_queue;
+	u64 restart_queue2;
+};
+
+struct igb_rx_queue_stats {
+	u64 packets;
+	u64 bytes;
+	u64 drops;
+	u64 csum_err;
+	u64 alloc_failed;
+};
+
+struct igb_ring;
+
+struct igb_ring_container {
+	struct igb_ring *ring;
+	unsigned int total_bytes;
+	unsigned int total_packets;
+	u16 work_limit;
+	u8 count;
+	u8 itr;
+};
+
+struct igb_q_vector;
+
+struct igb_ring {
+	struct igb_q_vector *q_vector;
+	struct net_device *netdev;
+	struct bpf_prog *xdp_prog;
+	struct device *dev;
+	union {
+		struct igb_tx_buffer *tx_buffer_info;
+		struct igb_rx_buffer *rx_buffer_info;
+	};
+	void *desc;
+	long unsigned int flags;
+	void *tail;
+	dma_addr_t dma;
+	unsigned int size;
+	u16 count;
+	u8 queue_index;
+	u8 reg_idx;
+	bool launchtime_enable;
+	bool cbs_enable;
+	s32 idleslope;
+	s32 sendslope;
+	s32 hicredit;
+	s32 locredit;
+	u16 next_to_clean;
+	u16 next_to_use;
+	u16 next_to_alloc;
+	union {
+		struct {
+			struct igb_tx_queue_stats tx_stats;
+			struct u64_stats_sync tx_syncp;
+			struct u64_stats_sync tx_syncp2;
+		};
+		struct {
+			struct sk_buff *skb;
+			struct igb_rx_queue_stats rx_stats;
+			struct u64_stats_sync rx_syncp;
+		};
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct igb_adapter;
+
+struct igb_q_vector {
+	struct igb_adapter *adapter;
+	int cpu;
+	u32 eims_value;
+	u16 itr_val;
+	u8 set_itr;
+	void *itr_register;
+	struct igb_ring_container rx;
+	struct igb_ring_container tx;
+	struct napi_struct napi;
+	struct callback_head rcu;
+	char name[25];
+	long: 56;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct igb_ring ring[0];
+};
+
+struct hwmon_buff;
+
+struct igb_mac_addr;
+
+struct igb_adapter {
+	long unsigned int active_vlans[64];
+	struct net_device *netdev;
+	struct bpf_prog *xdp_prog;
+	long unsigned int state;
+	unsigned int flags;
+	unsigned int num_q_vectors;
+	struct msix_entry msix_entries[10];
+	u32 rx_itr_setting;
+	u32 tx_itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	u16 tx_work_limit;
+	u32 tx_timeout_count;
+	int num_tx_queues;
+	struct igb_ring *tx_ring[16];
+	int num_rx_queues;
+	struct igb_ring *rx_ring[16];
+	u32 max_frame_size;
+	u32 min_frame_size;
+	struct timer_list watchdog_timer;
+	struct timer_list phy_info_timer;
+	u16 mng_vlan_id;
+	u32 bd_number;
+	u32 wol;
+	u32 en_mng_pt;
+	u16 link_speed;
+	u16 link_duplex;
+	u8 *io_addr;
+	struct work_struct reset_task;
+	struct work_struct watchdog_task;
+	bool fc_autoneg;
+	u8 tx_timeout_factor;
+	struct timer_list blink_timer;
+	long unsigned int led_status;
+	struct pci_dev *pdev;
+	spinlock_t stats64_lock;
+	struct rtnl_link_stats64 stats64;
+	struct e1000_hw___2 hw;
+	struct e1000_hw_stats___2 stats;
+	struct e1000_phy_info___2 phy_info;
+	u32 test_icr;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct igb_ring test_tx_ring;
+	struct igb_ring test_rx_ring;
+	int msg_enable;
+	struct igb_q_vector *q_vector[8];
+	u32 eims_enable_mask;
+	u32 eims_other;
+	u16 tx_ring_count;
+	u16 rx_ring_count;
+	unsigned int vfs_allocated_count;
+	struct vf_data_storage *vf_data;
+	int vf_rate_link_speed;
+	u32 rss_queues;
+	u32 wvbr;
+	u32 *shadow_vfta;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_caps;
+	struct delayed_work ptp_overflow_work;
+	struct work_struct ptp_tx_work;
+	struct sk_buff *ptp_tx_skb;
+	struct hwtstamp_config tstamp_config;
+	long unsigned int ptp_tx_start;
+	long unsigned int last_rx_ptp_check;
+	long unsigned int last_rx_timestamp;
+	unsigned int ptp_flags;
+	spinlock_t tmreg_lock;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	u32 tx_hwtstamp_timeouts;
+	u32 tx_hwtstamp_skipped;
+	u32 rx_hwtstamp_cleared;
+	bool pps_sys_wrap_on;
+	struct ptp_pin_desc sdp_config[4];
+	struct {
+		struct timespec64 start;
+		struct timespec64 period;
+	} perout[2];
+	char fw_version[32];
+	struct hwmon_buff *igb_hwmon_buff;
+	bool ets;
+	struct i2c_algo_bit_data i2c_algo;
+	struct i2c_adapter i2c_adap;
+	struct i2c_client *i2c_client;
+	u32 rss_indir_tbl_init;
+	u8 rss_indir_tbl[128];
+	long unsigned int link_check_timeout;
+	int copper_tries;
+	struct e1000_info___2 ei;
+	u16 eee_advert;
+	struct hlist_head nfc_filter_list;
+	struct hlist_head cls_flower_list;
+	unsigned int nfc_filter_count;
+	spinlock_t nfc_lock;
+	bool etype_bitmap[3];
+	struct igb_mac_addr *mac_table;
+	struct vf_mac_filter vf_macs;
+	struct vf_mac_filter *vf_mac_list;
+	spinlock_t vfs_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hwmon_attr {
+	struct device_attribute dev_attr;
+	struct e1000_hw___2 *hw;
+	struct e1000_thermal_diode_data *sensor;
+	char name[12];
+};
+
+struct hwmon_buff {
+	struct attribute_group group;
+	const struct attribute_group *groups[2];
+	struct attribute *attrs[13];
+	struct hwmon_attr hwmon_list[12];
+	unsigned int n_hwmon;
+};
+
+struct igb_mac_addr {
+	u8 addr[6];
+	u8 queue;
+	u8 state;
+};
+
+struct i2c_board_info {
+	char type[20];
+	short unsigned int flags;
+	short unsigned int addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+enum {
+	ETH_RSS_HASH_TOP_BIT = 0,
+	ETH_RSS_HASH_XOR_BIT = 1,
+	ETH_RSS_HASH_CRC32_BIT = 2,
+	ETH_RSS_HASH_FUNCS_COUNT = 3,
+};
+
+struct mdio_if_info {
+	int prtad;
+	u32 mmds;
+	unsigned int mode_support;
+	struct net_device *dev;
+	int (*mdio_read)(struct net_device *, int, int, u16);
+	int (*mdio_write)(struct net_device *, int, int, u16, u16);
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_OPT_ID_TCP = 65536,
+	SOF_TIMESTAMPING_LAST = 65536,
+	SOF_TIMESTAMPING_MASK = 131071,
+};
+
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
+};
+
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
+};
+
+struct ixgbe_thermal_diode_data {
+	u8 location;
+	u8 temp;
+	u8 caution_thresh;
+	u8 max_op_thresh;
+};
+
+struct ixgbe_thermal_sensor_data {
+	struct ixgbe_thermal_diode_data sensor[3];
+};
+
+union ixgbe_adv_tx_desc {
+	struct {
+		__le64 buffer_addr;
+		__le32 cmd_type_len;
+		__le32 olinfo_status;
+	} read;
+	struct {
+		__le64 rsvd;
+		__le32 nxtseq_seed;
+		__le32 status;
+	} wb;
+};
+
+union ixgbe_adv_rx_desc {
+	struct {
+		__le64 pkt_addr;
+		__le64 hdr_addr;
+	} read;
+	struct {
+		struct {
+			union {
+				__le32 data;
+				struct {
+					__le16 pkt_info;
+					__le16 hdr_info;
+				} hs_rss;
+			} lo_dword;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length;
+			__le16 vlan;
+		} upper;
+	} wb;
+};
+
+typedef u32 ixgbe_autoneg_advertised;
+
+typedef u32 ixgbe_link_speed;
+
+enum ixgbe_atr_flow_type {
+	IXGBE_ATR_FLOW_TYPE_IPV4 = 0,
+	IXGBE_ATR_FLOW_TYPE_UDPV4 = 1,
+	IXGBE_ATR_FLOW_TYPE_TCPV4 = 2,
+	IXGBE_ATR_FLOW_TYPE_SCTPV4 = 3,
+	IXGBE_ATR_FLOW_TYPE_IPV6 = 4,
+	IXGBE_ATR_FLOW_TYPE_UDPV6 = 5,
+	IXGBE_ATR_FLOW_TYPE_TCPV6 = 6,
+	IXGBE_ATR_FLOW_TYPE_SCTPV6 = 7,
+};
+
+union ixgbe_atr_input {
+	struct {
+		u8 vm_pool;
+		u8 flow_type;
+		__be16 vlan_id;
+		__be32 dst_ip[4];
+		__be32 src_ip[4];
+		__be16 src_port;
+		__be16 dst_port;
+		__be16 flex_bytes;
+		__be16 bkt_hash;
+	} formatted;
+	__be32 dword_stream[11];
+};
+
+enum ixgbe_mvals {
+	IXGBE_EEC_IDX = 0,
+	IXGBE_FLA_IDX = 1,
+	IXGBE_GRC_IDX = 2,
+	IXGBE_FACTPS_IDX = 3,
+	IXGBE_SWSM_IDX = 4,
+	IXGBE_SWFW_SYNC_IDX = 5,
+	IXGBE_FWSM_IDX = 6,
+	IXGBE_SDP0_GPIEN_IDX = 7,
+	IXGBE_SDP1_GPIEN_IDX = 8,
+	IXGBE_SDP2_GPIEN_IDX = 9,
+	IXGBE_EICR_GPI_SDP0_IDX = 10,
+	IXGBE_EICR_GPI_SDP1_IDX = 11,
+	IXGBE_EICR_GPI_SDP2_IDX = 12,
+	IXGBE_CIAA_IDX = 13,
+	IXGBE_CIAD_IDX = 14,
+	IXGBE_I2C_CLK_IN_IDX = 15,
+	IXGBE_I2C_CLK_OUT_IDX = 16,
+	IXGBE_I2C_DATA_IN_IDX = 17,
+	IXGBE_I2C_DATA_OUT_IDX = 18,
+	IXGBE_I2C_DATA_OE_N_EN_IDX = 19,
+	IXGBE_I2C_BB_EN_IDX = 20,
+	IXGBE_I2C_CLK_OE_N_EN_IDX = 21,
+	IXGBE_I2CCTL_IDX = 22,
+	IXGBE_MVALS_IDX_LIMIT = 23,
+};
+
+enum ixgbe_eeprom_type {
+	ixgbe_eeprom_uninitialized = 0,
+	ixgbe_eeprom_spi = 1,
+	ixgbe_flash = 2,
+	ixgbe_eeprom_none = 3,
+};
+
+enum ixgbe_mac_type {
+	ixgbe_mac_unknown = 0,
+	ixgbe_mac_82598EB = 1,
+	ixgbe_mac_82599EB = 2,
+	ixgbe_mac_X540 = 3,
+	ixgbe_mac_X550 = 4,
+	ixgbe_mac_X550EM_x = 5,
+	ixgbe_mac_x550em_a = 6,
+	ixgbe_num_macs = 7,
+};
+
+enum ixgbe_phy_type {
+	ixgbe_phy_unknown = 0,
+	ixgbe_phy_none = 1,
+	ixgbe_phy_tn = 2,
+	ixgbe_phy_aq = 3,
+	ixgbe_phy_x550em_kr = 4,
+	ixgbe_phy_x550em_kx4 = 5,
+	ixgbe_phy_x550em_xfi = 6,
+	ixgbe_phy_x550em_ext_t = 7,
+	ixgbe_phy_ext_1g_t = 8,
+	ixgbe_phy_cu_unknown = 9,
+	ixgbe_phy_qt = 10,
+	ixgbe_phy_xaui = 11,
+	ixgbe_phy_nl = 12,
+	ixgbe_phy_sfp_passive_tyco = 13,
+	ixgbe_phy_sfp_passive_unknown = 14,
+	ixgbe_phy_sfp_active_unknown = 15,
+	ixgbe_phy_sfp_avago = 16,
+	ixgbe_phy_sfp_ftl = 17,
+	ixgbe_phy_sfp_ftl_active = 18,
+	ixgbe_phy_sfp_unknown = 19,
+	ixgbe_phy_sfp_intel = 20,
+	ixgbe_phy_qsfp_passive_unknown = 21,
+	ixgbe_phy_qsfp_active_unknown = 22,
+	ixgbe_phy_qsfp_intel = 23,
+	ixgbe_phy_qsfp_unknown = 24,
+	ixgbe_phy_sfp_unsupported = 25,
+	ixgbe_phy_sgmii = 26,
+	ixgbe_phy_fw = 27,
+	ixgbe_phy_generic = 28,
+};
+
+enum ixgbe_sfp_type {
+	ixgbe_sfp_type_da_cu = 0,
+	ixgbe_sfp_type_sr = 1,
+	ixgbe_sfp_type_lr = 2,
+	ixgbe_sfp_type_da_cu_core0 = 3,
+	ixgbe_sfp_type_da_cu_core1 = 4,
+	ixgbe_sfp_type_srlr_core0 = 5,
+	ixgbe_sfp_type_srlr_core1 = 6,
+	ixgbe_sfp_type_da_act_lmt_core0 = 7,
+	ixgbe_sfp_type_da_act_lmt_core1 = 8,
+	ixgbe_sfp_type_1g_cu_core0 = 9,
+	ixgbe_sfp_type_1g_cu_core1 = 10,
+	ixgbe_sfp_type_1g_sx_core0 = 11,
+	ixgbe_sfp_type_1g_sx_core1 = 12,
+	ixgbe_sfp_type_1g_lx_core0 = 13,
+	ixgbe_sfp_type_1g_lx_core1 = 14,
+	ixgbe_sfp_type_not_present = 65534,
+	ixgbe_sfp_type_unknown = 65535,
+};
+
+enum ixgbe_media_type {
+	ixgbe_media_type_unknown = 0,
+	ixgbe_media_type_fiber = 1,
+	ixgbe_media_type_fiber_qsfp = 2,
+	ixgbe_media_type_fiber_lco = 3,
+	ixgbe_media_type_copper = 4,
+	ixgbe_media_type_backplane = 5,
+	ixgbe_media_type_cx4 = 6,
+	ixgbe_media_type_virtual = 7,
+};
+
+enum ixgbe_fc_mode {
+	ixgbe_fc_none = 0,
+	ixgbe_fc_rx_pause = 1,
+	ixgbe_fc_tx_pause = 2,
+	ixgbe_fc_full = 3,
+	ixgbe_fc_default = 4,
+};
+
+enum ixgbe_smart_speed {
+	ixgbe_smart_speed_auto = 0,
+	ixgbe_smart_speed_on = 1,
+	ixgbe_smart_speed_off = 2,
+};
+
+enum ixgbe_bus_type {
+	ixgbe_bus_type_unknown = 0,
+	ixgbe_bus_type_pci_express = 1,
+	ixgbe_bus_type_internal = 2,
+	ixgbe_bus_type_reserved = 3,
+};
+
+enum ixgbe_bus_speed {
+	ixgbe_bus_speed_unknown = 0,
+	ixgbe_bus_speed_33 = 33,
+	ixgbe_bus_speed_66 = 66,
+	ixgbe_bus_speed_100 = 100,
+	ixgbe_bus_speed_120 = 120,
+	ixgbe_bus_speed_133 = 133,
+	ixgbe_bus_speed_2500 = 2500,
+	ixgbe_bus_speed_5000 = 5000,
+	ixgbe_bus_speed_8000 = 8000,
+	ixgbe_bus_speed_reserved = 8001,
+};
+
+enum ixgbe_bus_width {
+	ixgbe_bus_width_unknown = 0,
+	ixgbe_bus_width_pcie_x1 = 1,
+	ixgbe_bus_width_pcie_x2 = 2,
+	ixgbe_bus_width_pcie_x4 = 4,
+	ixgbe_bus_width_pcie_x8 = 8,
+	ixgbe_bus_width_32 = 32,
+	ixgbe_bus_width_64 = 64,
+	ixgbe_bus_width_reserved = 65,
+};
+
+struct ixgbe_addr_filter_info {
+	u32 num_mc_addrs;
+	u32 rar_used_count;
+	u32 mta_in_use;
+	u32 overflow_promisc;
+	bool uc_set_promisc;
+	bool user_set_promisc;
+};
+
+struct ixgbe_bus_info {
+	enum ixgbe_bus_speed speed;
+	enum ixgbe_bus_width width;
+	enum ixgbe_bus_type type;
+	u8 func;
+	u8 lan_id;
+	u8 instance_id;
+};
+
+struct ixgbe_fc_info {
+	u32 high_water[8];
+	u32 low_water[8];
+	u16 pause_time;
+	bool send_xon;
+	bool strict_ieee;
+	bool disable_fc_autoneg;
+	bool fc_was_autonegged;
+	enum ixgbe_fc_mode current_mode;
+	enum ixgbe_fc_mode requested_mode;
+};
+
+struct ixgbe_hw_stats {
+	u64 crcerrs;
+	u64 illerrc;
+	u64 errbc;
+	u64 mspdc;
+	u64 mpctotal;
+	u64 mpc[8];
+	u64 mlfc;
+	u64 mrfc;
+	u64 rlec;
+	u64 lxontxc;
+	u64 lxonrxc;
+	u64 lxofftxc;
+	u64 lxoffrxc;
+	u64 pxontxc[8];
+	u64 pxonrxc[8];
+	u64 pxofftxc[8];
+	u64 pxoffrxc[8];
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorc;
+	u64 gotc;
+	u64 rnbc[8];
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rjc;
+	u64 mngprc;
+	u64 mngpdc;
+	u64 mngptc;
+	u64 tor;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 xec;
+	u64 rqsmr[16];
+	u64 tqsmr[8];
+	u64 qprc[16];
+	u64 qptc[16];
+	u64 qbrc[16];
+	u64 qbtc[16];
+	u64 qprdc[16];
+	u64 pxon2offc[8];
+	u64 fdirustat_add;
+	u64 fdirustat_remove;
+	u64 fdirfstat_fadd;
+	u64 fdirfstat_fremove;
+	u64 fdirmatch;
+	u64 fdirmiss;
+	u64 fccrc;
+	u64 fcoerpdc;
+	u64 fcoeprc;
+	u64 fcoeptc;
+	u64 fcoedwrc;
+	u64 fcoedwtc;
+	u64 fcoe_noddp;
+	u64 fcoe_noddp_ext_buff;
+	u64 b2ospc;
+	u64 b2ogprc;
+	u64 o2bgptc;
+	u64 o2bspc;
+};
+
+struct ixgbe_hw;
+
+struct ixgbe_eeprom_operations {
+	s32 (*init_params)(struct ixgbe_hw *);
+	s32 (*read)(struct ixgbe_hw *, u16, u16 *);
+	s32 (*read_buffer)(struct ixgbe_hw *, u16, u16, u16 *);
+	s32 (*write)(struct ixgbe_hw *, u16, u16);
+	s32 (*write_buffer)(struct ixgbe_hw *, u16, u16, u16 *);
+	s32 (*validate_checksum)(struct ixgbe_hw *, u16 *);
+	s32 (*update_checksum)(struct ixgbe_hw *);
+	s32 (*calc_checksum)(struct ixgbe_hw *);
+};
+
+struct ixgbe_mac_operations {
+	s32 (*init_hw)(struct ixgbe_hw *);
+	s32 (*reset_hw)(struct ixgbe_hw *);
+	s32 (*start_hw)(struct ixgbe_hw *);
+	s32 (*clear_hw_cntrs)(struct ixgbe_hw *);
+	enum ixgbe_media_type (*get_media_type)(struct ixgbe_hw *);
+	s32 (*get_mac_addr)(struct ixgbe_hw *, u8 *);
+	s32 (*get_san_mac_addr)(struct ixgbe_hw *, u8 *);
+	s32 (*get_device_caps)(struct ixgbe_hw *, u16 *);
+	s32 (*get_wwn_prefix)(struct ixgbe_hw *, u16 *, u16 *);
+	s32 (*stop_adapter)(struct ixgbe_hw *);
+	s32 (*get_bus_info)(struct ixgbe_hw *);
+	void (*set_lan_id)(struct ixgbe_hw *);
+	s32 (*read_analog_reg8)(struct ixgbe_hw *, u32, u8 *);
+	s32 (*write_analog_reg8)(struct ixgbe_hw *, u32, u8);
+	s32 (*setup_sfp)(struct ixgbe_hw *);
+	s32 (*disable_rx_buff)(struct ixgbe_hw *);
+	s32 (*enable_rx_buff)(struct ixgbe_hw *);
+	s32 (*enable_rx_dma)(struct ixgbe_hw *, u32);
+	s32 (*acquire_swfw_sync)(struct ixgbe_hw *, u32);
+	void (*release_swfw_sync)(struct ixgbe_hw *, u32);
+	void (*init_swfw_sync)(struct ixgbe_hw *);
+	s32 (*prot_autoc_read)(struct ixgbe_hw *, bool *, u32 *);
+	s32 (*prot_autoc_write)(struct ixgbe_hw *, u32, bool);
+	void (*disable_tx_laser)(struct ixgbe_hw *);
+	void (*enable_tx_laser)(struct ixgbe_hw *);
+	void (*flap_tx_laser)(struct ixgbe_hw *);
+	void (*stop_link_on_d3)(struct ixgbe_hw *);
+	s32 (*setup_link)(struct ixgbe_hw *, ixgbe_link_speed, bool);
+	s32 (*setup_mac_link)(struct ixgbe_hw *, ixgbe_link_speed, bool);
+	s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *, bool);
+	s32 (*get_link_capabilities)(struct ixgbe_hw *, ixgbe_link_speed *, bool *);
+	void (*set_rate_select_speed)(struct ixgbe_hw *, ixgbe_link_speed);
+	void (*set_rxpba)(struct ixgbe_hw *, int, u32, int);
+	s32 (*led_on)(struct ixgbe_hw *, u32);
+	s32 (*led_off)(struct ixgbe_hw *, u32);
+	s32 (*blink_led_start)(struct ixgbe_hw *, u32);
+	s32 (*blink_led_stop)(struct ixgbe_hw *, u32);
+	s32 (*init_led_link_act)(struct ixgbe_hw *);
+	s32 (*set_rar)(struct ixgbe_hw *, u32, u8 *, u32, u32);
+	s32 (*clear_rar)(struct ixgbe_hw *, u32);
+	s32 (*set_vmdq)(struct ixgbe_hw *, u32, u32);
+	s32 (*set_vmdq_san_mac)(struct ixgbe_hw *, u32);
+	s32 (*clear_vmdq)(struct ixgbe_hw *, u32, u32);
+	s32 (*init_rx_addrs)(struct ixgbe_hw *);
+	s32 (*update_mc_addr_list)(struct ixgbe_hw *, struct net_device *);
+	s32 (*enable_mc)(struct ixgbe_hw *);
+	s32 (*disable_mc)(struct ixgbe_hw *);
+	s32 (*clear_vfta)(struct ixgbe_hw *);
+	s32 (*set_vfta)(struct ixgbe_hw *, u32, u32, bool, bool);
+	s32 (*init_uta_tables)(struct ixgbe_hw *);
+	void (*set_mac_anti_spoofing)(struct ixgbe_hw *, bool, int);
+	void (*set_vlan_anti_spoofing)(struct ixgbe_hw *, bool, int);
+	s32 (*fc_enable)(struct ixgbe_hw *);
+	s32 (*setup_fc)(struct ixgbe_hw *);
+	void (*fc_autoneg)(struct ixgbe_hw *);
+	s32 (*set_fw_drv_ver)(struct ixgbe_hw *, u8, u8, u8, u8, u16, const char *);
+	s32 (*get_thermal_sensor_data)(struct ixgbe_hw *);
+	s32 (*init_thermal_sensor_thresh)(struct ixgbe_hw *);
+	bool (*fw_recovery_mode)(struct ixgbe_hw *);
+	void (*disable_rx)(struct ixgbe_hw *);
+	void (*enable_rx)(struct ixgbe_hw *);
+	void (*set_source_address_pruning)(struct ixgbe_hw *, bool, unsigned int);
+	void (*set_ethertype_anti_spoofing)(struct ixgbe_hw *, bool, int);
+	s32 (*dmac_config)(struct ixgbe_hw *);
+	s32 (*dmac_update_tcs)(struct ixgbe_hw *);
+	s32 (*dmac_config_tcs)(struct ixgbe_hw *);
+	s32 (*read_iosf_sb_reg)(struct ixgbe_hw *, u32, u32, u32 *);
+	s32 (*write_iosf_sb_reg)(struct ixgbe_hw *, u32, u32, u32);
+};
+
+struct ixgbe_mac_info {
+	struct ixgbe_mac_operations ops;
+	enum ixgbe_mac_type type;
+	u8 addr[6];
+	u8 perm_addr[6];
+	u8 san_addr[6];
+	u16 wwnn_prefix;
+	u16 wwpn_prefix;
+	u16 max_msix_vectors;
+	u32 mta_shadow[128];
+	s32 mc_filter_type;
+	u32 mcft_size;
+	u32 vft_size;
+	u32 num_rar_entries;
+	u32 rar_highwater;
+	u32 rx_pb_size;
+	u32 max_tx_queues;
+	u32 max_rx_queues;
+	u32 orig_autoc;
+	u32 orig_autoc2;
+	bool orig_link_settings_stored;
+	bool autotry_restart;
+	u8 flags;
+	u8 san_mac_rar_index;
+	struct ixgbe_thermal_sensor_data thermal_sensor_data;
+	bool set_lben;
+	u8 led_link_act;
+};
+
+struct ixgbe_phy_operations {
+	s32 (*identify)(struct ixgbe_hw *);
+	s32 (*identify_sfp)(struct ixgbe_hw *);
+	s32 (*init)(struct ixgbe_hw *);
+	s32 (*reset)(struct ixgbe_hw *);
+	s32 (*read_reg)(struct ixgbe_hw *, u32, u32, u16 *);
+	s32 (*write_reg)(struct ixgbe_hw *, u32, u32, u16);
+	s32 (*read_reg_mdi)(struct ixgbe_hw *, u32, u32, u16 *);
+	s32 (*write_reg_mdi)(struct ixgbe_hw *, u32, u32, u16);
+	s32 (*setup_link)(struct ixgbe_hw *);
+	s32 (*setup_internal_link)(struct ixgbe_hw *);
+	s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool);
+	s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *);
+	s32 (*read_i2c_byte)(struct ixgbe_hw *, u8, u8, u8 *);
+	s32 (*write_i2c_byte)(struct ixgbe_hw *, u8, u8, u8);
+	s32 (*read_i2c_sff8472)(struct ixgbe_hw *, u8, u8 *);
+	s32 (*read_i2c_eeprom)(struct ixgbe_hw *, u8, u8 *);
+	s32 (*write_i2c_eeprom)(struct ixgbe_hw *, u8, u8);
+	s32 (*check_overtemp)(struct ixgbe_hw *);
+	s32 (*set_phy_power)(struct ixgbe_hw *, bool);
+	s32 (*enter_lplu)(struct ixgbe_hw *);
+	s32 (*handle_lasi)(struct ixgbe_hw *);
+	s32 (*read_i2c_byte_unlocked)(struct ixgbe_hw *, u8, u8, u8 *);
+	s32 (*write_i2c_byte_unlocked)(struct ixgbe_hw *, u8, u8, u8);
+};
+
+struct ixgbe_phy_info {
+	struct ixgbe_phy_operations ops;
+	struct mdio_if_info mdio;
+	enum ixgbe_phy_type type;
+	u32 id;
+	enum ixgbe_sfp_type sfp_type;
+	bool sfp_setup_needed;
+	u32 revision;
+	enum ixgbe_media_type media_type;
+	u32 phy_semaphore_mask;
+	bool reset_disable;
+	ixgbe_autoneg_advertised autoneg_advertised;
+	ixgbe_link_speed speeds_supported;
+	ixgbe_link_speed eee_speeds_supported;
+	ixgbe_link_speed eee_speeds_advertised;
+	enum ixgbe_smart_speed smart_speed;
+	bool smart_speed_active;
+	bool multispeed_fiber;
+	bool reset_if_overtemp;
+	bool qsfp_shared_i2c_bus;
+	u32 nw_mng_if_sel;
+};
+
+struct ixgbe_link_operations {
+	s32 (*read_link)(struct ixgbe_hw *, u8, u16, u16 *);
+	s32 (*read_link_unlocked)(struct ixgbe_hw *, u8, u16, u16 *);
+	s32 (*write_link)(struct ixgbe_hw *, u8, u16, u16);
+	s32 (*write_link_unlocked)(struct ixgbe_hw *, u8, u16, u16);
+};
+
+struct ixgbe_link_info {
+	struct ixgbe_link_operations ops;
+	u8 addr;
+};
+
+struct ixgbe_eeprom_info {
+	struct ixgbe_eeprom_operations ops;
+	enum ixgbe_eeprom_type type;
+	u32 semaphore_delay;
+	u16 word_size;
+	u16 address_bits;
+	u16 word_page_size;
+	u16 ctrl_word_3;
+};
+
+struct ixgbe_mbx_stats {
+	u32 msgs_tx;
+	u32 msgs_rx;
+	u32 acks;
+	u32 reqs;
+	u32 rsts;
+};
+
+struct ixgbe_mbx_operations;
+
+struct ixgbe_mbx_info {
+	const struct ixgbe_mbx_operations *ops;
+	struct ixgbe_mbx_stats stats;
+	u32 timeout;
+	u32 usec_delay;
+	u32 v2p_mailbox;
+	u16 size;
+};
+
+struct ixgbe_hw {
+	u8 *hw_addr;
+	void *back;
+	struct ixgbe_mac_info mac;
+	struct ixgbe_addr_filter_info addr_ctrl;
+	struct ixgbe_fc_info fc;
+	struct ixgbe_phy_info phy;
+	struct ixgbe_link_info link;
+	struct ixgbe_eeprom_info eeprom;
+	struct ixgbe_bus_info bus;
+	struct ixgbe_mbx_info mbx;
+	const u32 *mvals;
+	u16 device_id;
+	u16 vendor_id;
+	u16 subsystem_device_id;
+	u16 subsystem_vendor_id;
+	u8 revision_id;
+	bool adapter_stopped;
+	bool force_full_reset;
+	bool allow_unsupported_sfp;
+	bool wol_enabled;
+	bool need_crosstalk_fix;
+};
+
+struct ixgbe_mbx_operations {
+	s32 (*init_params)(struct ixgbe_hw *);
+	s32 (*read)(struct ixgbe_hw *, u32 *, u16, u16);
+	s32 (*write)(struct ixgbe_hw *, u32 *, u16, u16);
+	s32 (*read_posted)(struct ixgbe_hw *, u32 *, u16, u16);
+	s32 (*write_posted)(struct ixgbe_hw *, u32 *, u16, u16);
+	s32 (*check_for_msg)(struct ixgbe_hw *, u16);
+	s32 (*check_for_ack)(struct ixgbe_hw *, u16);
+	s32 (*check_for_rst)(struct ixgbe_hw *, u16);
+};
+
+struct ieee_ets {
+	__u8 willing;
+	__u8 ets_cap;
+	__u8 cbs;
+	__u8 tc_tx_bw[8];
+	__u8 tc_rx_bw[8];
+	__u8 tc_tsa[8];
+	__u8 prio_tc[8];
+	__u8 tc_reco_bw[8];
+	__u8 tc_reco_tsa[8];
+	__u8 reco_prio_tc[8];
+};
+
+struct ieee_pfc {
+	__u8 pfc_cap;
+	__u8 pfc_en;
+	__u8 mbc;
+	__u16 delay;
+	__u64 requests[8];
+	__u64 indications[8];
+};
+
+enum strict_prio_type {
+	prio_none = 0,
+	prio_group = 1,
+	prio_link = 2,
+};
+
+struct dcb_support {
+	u32 capabilities;
+	u8 traffic_classes;
+	u8 pfc_traffic_classes;
+};
+
+struct tc_bw_alloc {
+	u8 bwg_id;
+	u8 bwg_percent;
+	u8 link_percent;
+	u8 up_to_tc_bitmap;
+	u16 data_credits_refill;
+	u16 data_credits_max;
+	enum strict_prio_type prio_type;
+};
+
+enum dcb_pfc_type {
+	pfc_disabled = 0,
+	pfc_enabled_full = 1,
+	pfc_enabled_tx = 2,
+	pfc_enabled_rx = 3,
+};
+
+struct tc_configuration {
+	struct tc_bw_alloc path[2];
+	enum dcb_pfc_type dcb_pfc;
+	u16 desc_credits_max;
+	u8 tc;
+};
+
+struct dcb_num_tcs {
+	u8 pg_tcs;
+	u8 pfc_tcs;
+};
+
+struct ixgbe_dcb_config {
+	struct dcb_support support;
+	struct dcb_num_tcs num_tcs;
+	struct tc_configuration tc_config[8];
+	u8 bw_percentage[16];
+	bool pfc_mode_enable;
+	u32 dcb_cfg_version;
+	u32 link_speed;
+};
+
+struct ixgbe_fcoe_ddp {
+	int len;
+	u32 err;
+	unsigned int sgc;
+	struct scatterlist *sgl;
+	dma_addr_t udp;
+	u64 *udl;
+	struct dma_pool *pool;
+};
+
+struct ixgbe_fcoe_ddp_pool {
+	struct dma_pool *pool;
+	u64 noddp;
+	u64 noddp_ext_buff;
+};
+
+struct ixgbe_fcoe {
+	struct ixgbe_fcoe_ddp_pool *ddp_pool;
+	atomic_t refcnt;
+	spinlock_t lock;
+	struct ixgbe_fcoe_ddp ddp[2048];
+	void *extra_ddp_buffer;
+	dma_addr_t extra_ddp_buffer_dma;
+	long unsigned int mode;
+	u8 up;
+};
+
+struct vf_stats {
+	u64 gprc;
+	u64 gorc;
+	u64 gptc;
+	u64 gotc;
+	u64 mprc;
+};
+
+struct vf_data_storage___2 {
+	struct pci_dev *vfdev;
+	unsigned char vf_mac_addresses[6];
+	u16 vf_mc_hashes[30];
+	u16 num_vf_mc_hashes;
+	bool clear_to_send;
+	struct vf_stats vfstats;
+	struct vf_stats last_vfstats;
+	struct vf_stats saved_rst_vfstats;
+	bool pf_set_mac;
+	u16 pf_vlan;
+	u16 pf_qos;
+	u16 tx_rate;
+	int link_enable;
+	int link_state;
+	u8 spoofchk_enabled;
+	bool rss_query_enabled;
+	u8 trusted;
+	int xcast_mode;
+	unsigned int vf_api;
+	u8 primary_abort_count;
+};
+
+struct vf_macvlans {
+	struct list_head l;
+	int vf;
+	bool free;
+	bool is_macvlan;
+	u8 vf_macvlan[6];
+};
+
+struct ixgbe_tx_buffer {
+	union ixgbe_adv_tx_desc *next_to_watch;
+	long unsigned int time_stamp;
+	union {
+		struct sk_buff *skb;
+		struct xdp_frame *xdpf;
+	};
+	unsigned int bytecount;
+	short unsigned int gso_segs;
+	__be16 protocol;
+	dma_addr_t dma;
+	__u32 len;
+	u32 tx_flags;
+};
+
+struct ixgbe_rx_buffer {
+	union {
+		struct {
+			struct sk_buff *skb;
+			dma_addr_t dma;
+			struct page *page;
+			__u32 page_offset;
+			__u16 pagecnt_bias;
+		};
+		struct {
+			bool discard;
+			struct xdp_buff *xdp;
+		};
+	};
+};
+
+struct ixgbe_queue_stats {
+	u64 packets;
+	u64 bytes;
+};
+
+struct ixgbe_tx_queue_stats {
+	u64 restart_queue;
+	u64 tx_busy;
+	u64 tx_done_old;
+};
+
+struct ixgbe_rx_queue_stats {
+	u64 rsc_count;
+	u64 rsc_flush;
+	u64 non_eop_descs;
+	u64 alloc_rx_page;
+	u64 alloc_rx_page_failed;
+	u64 alloc_rx_buff_failed;
+	u64 csum_err;
+};
+
+enum ixgbe_ring_state_t {
+	__IXGBE_RX_3K_BUFFER = 0,
+	__IXGBE_RX_BUILD_SKB_ENABLED = 1,
+	__IXGBE_RX_RSC_ENABLED = 2,
+	__IXGBE_RX_CSUM_UDP_ZERO_ERR = 3,
+	__IXGBE_RX_FCOE = 4,
+	__IXGBE_TX_FDIR_INIT_DONE = 5,
+	__IXGBE_TX_XPS_INIT_DONE = 6,
+	__IXGBE_TX_DETECT_HANG = 7,
+	__IXGBE_HANG_CHECK_ARMED = 8,
+	__IXGBE_TX_XDP_RING = 9,
+	__IXGBE_TX_DISABLED = 10,
+};
+
+struct ixgbe_q_vector;
+
+struct ixgbe_ring {
+	struct ixgbe_ring *next;
+	struct ixgbe_q_vector *q_vector;
+	struct net_device *netdev;
+	struct bpf_prog *xdp_prog;
+	struct device *dev;
+	void *desc;
+	union {
+		struct ixgbe_tx_buffer *tx_buffer_info;
+		struct ixgbe_rx_buffer *rx_buffer_info;
+	};
+	long unsigned int state;
+	u8 *tail;
+	dma_addr_t dma;
+	unsigned int size;
+	u16 count;
+	u8 queue_index;
+	u8 reg_idx;
+	u16 next_to_use;
+	u16 next_to_clean;
+	long unsigned int last_rx_timestamp;
+	union {
+		u16 next_to_alloc;
+		struct {
+			u8 atr_sample_rate;
+			u8 atr_count;
+		};
+	};
+	u8 dcb_tc;
+	struct ixgbe_queue_stats stats;
+	struct u64_stats_sync syncp;
+	union {
+		struct ixgbe_tx_queue_stats tx_stats;
+		struct ixgbe_rx_queue_stats rx_stats;
+	};
+	u16 rx_offset;
+	struct xdp_rxq_info xdp_rxq;
+	spinlock_t tx_lock;
+	struct xsk_buff_pool *xsk_pool;
+	u16 ring_idx;
+	u16 rx_buf_len;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ixgbe_ring_container {
+	struct ixgbe_ring *ring;
+	long unsigned int next_update;
+	unsigned int total_bytes;
+	unsigned int total_packets;
+	u16 work_limit;
+	u8 count;
+	u8 itr;
+};
+
+struct ixgbe_adapter;
+
+struct ixgbe_q_vector {
+	struct ixgbe_adapter *adapter;
+	u16 v_idx;
+	u16 itr;
+	struct ixgbe_ring_container rx;
+	struct ixgbe_ring_container tx;
+	struct napi_struct napi;
+	cpumask_t affinity_mask;
+	int numa_node;
+	struct callback_head rcu;
+	char name[25];
+	long: 56;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ixgbe_ring ring[0];
+};
+
+enum ixgbe_ring_f_enum {
+	RING_F_NONE = 0,
+	RING_F_VMDQ = 1,
+	RING_F_RSS = 2,
+	RING_F_FDIR = 3,
+	RING_F_FCOE = 4,
+	RING_F_ARRAY_SIZE = 5,
+};
+
+struct ixgbe_ring_feature {
+	u16 limit;
+	u16 indices;
+	u16 mask;
+	u16 offset;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ixgbe_mac_addr;
+
+struct hwmon_buff___2;
+
+struct ixgbe_jump_table;
+
+struct ixgbe_adapter {
+	long unsigned int active_vlans[64];
+	struct net_device *netdev;
+	struct bpf_prog *xdp_prog;
+	struct pci_dev *pdev;
+	struct mii_bus *mii_bus;
+	long unsigned int state;
+	u32 flags;
+	u32 flags2;
+	int num_tx_queues;
+	u16 tx_itr_setting;
+	u16 tx_work_limit;
+	u64 tx_ipsec;
+	int num_rx_queues;
+	u16 rx_itr_setting;
+	u64 rx_ipsec;
+	__be16 vxlan_port;
+	__be16 geneve_port;
+	int num_xdp_queues;
+	struct ixgbe_ring *xdp_ring[64];
+	long unsigned int *af_xdp_zc_qps;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ixgbe_ring *tx_ring[64];
+	u64 restart_queue;
+	u64 lsc_int;
+	u32 tx_timeout_count;
+	struct ixgbe_ring *rx_ring[64];
+	int num_rx_pools;
+	int num_rx_queues_per_pool;
+	u64 hw_csum_rx_error;
+	u64 hw_rx_no_dma_resources;
+	u64 rsc_total_count;
+	u64 rsc_total_flush;
+	u64 non_eop_descs;
+	u32 alloc_rx_page;
+	u32 alloc_rx_page_failed;
+	u32 alloc_rx_buff_failed;
+	struct ixgbe_q_vector *q_vector[64];
+	struct ieee_pfc *ixgbe_ieee_pfc;
+	struct ieee_ets *ixgbe_ieee_ets;
+	struct ixgbe_dcb_config dcb_cfg;
+	struct ixgbe_dcb_config temp_dcb_cfg;
+	u8 hw_tcs;
+	u8 dcb_set_bitmap;
+	u8 dcbx_cap;
+	enum ixgbe_fc_mode last_lfc_mode;
+	int num_q_vectors;
+	int max_q_vectors;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ixgbe_ring_feature ring_feature[5];
+	struct msix_entry *msix_entries;
+	u32 test_icr;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ixgbe_ring test_tx_ring;
+	struct ixgbe_ring test_rx_ring;
+	struct ixgbe_hw hw;
+	u16 msg_enable;
+	struct ixgbe_hw_stats stats;
+	u64 tx_busy;
+	unsigned int tx_ring_count;
+	unsigned int xdp_ring_count;
+	unsigned int rx_ring_count;
+	u32 link_speed;
+	bool link_up;
+	long unsigned int sfp_poll_time;
+	long unsigned int link_check_timeout;
+	struct timer_list service_timer;
+	struct work_struct service_task;
+	struct hlist_head fdir_filter_list;
+	long unsigned int fdir_overflow;
+	union ixgbe_atr_input fdir_mask;
+	int fdir_filter_count;
+	u32 fdir_pballoc;
+	u32 atr_sample_rate;
+	spinlock_t fdir_perfect_lock;
+	struct ixgbe_fcoe fcoe;
+	u8 *io_addr;
+	u32 wol;
+	u16 bridge_mode;
+	char eeprom_id[32];
+	u16 eeprom_cap;
+	u32 interrupt_event;
+	u32 led_reg;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_caps;
+	struct work_struct ptp_tx_work;
+	struct sk_buff *ptp_tx_skb;
+	struct hwtstamp_config tstamp_config;
+	long unsigned int ptp_tx_start;
+	long unsigned int last_overflow_check;
+	long unsigned int last_rx_ptp_check;
+	long unsigned int last_rx_timestamp;
+	spinlock_t tmreg_lock;
+	struct cyclecounter hw_cc;
+	struct timecounter hw_tc;
+	u32 base_incval;
+	u32 tx_hwtstamp_timeouts;
+	u32 tx_hwtstamp_skipped;
+	u32 rx_hwtstamp_cleared;
+	void (*ptp_setup_sdp)(struct ixgbe_adapter *);
+	long unsigned int active_vfs[1];
+	unsigned int num_vfs;
+	struct vf_data_storage___2 *vfinfo;
+	int vf_rate_link_speed;
+	struct vf_macvlans vf_mvs;
+	struct vf_macvlans *mv_list;
+	u32 timer_event_accumulator;
+	u32 vferr_refcount;
+	struct ixgbe_mac_addr *mac_table;
+	struct kobject *info_kobj;
+	struct hwmon_buff___2 *ixgbe_hwmon_buff;
+	struct dentry *ixgbe_dbg_adapter;
+	u8 default_up;
+	long unsigned int fwd_bitmask[1];
+	struct ixgbe_jump_table *jump_tables[10];
+	long unsigned int tables;
+	u8 rss_indir_tbl[512];
+	u32 *rss_key;
+	spinlock_t vfs_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hwmon_attr___2 {
+	struct device_attribute dev_attr;
+	struct ixgbe_hw *hw;
+	struct ixgbe_thermal_diode_data *sensor;
+	char name[12];
+};
+
+struct hwmon_buff___2 {
+	struct attribute_group group;
+	const struct attribute_group *groups[2];
+	struct attribute *attrs[13];
+	struct hwmon_attr___2 hwmon_list[12];
+	unsigned int n_hwmon;
+};
+
+struct ixgbe_mac_addr {
+	u8 addr[6];
+	u16 pool;
+	u16 state;
+};
+
+struct ixgbe_fdir_filter {
+	struct hlist_node fdir_node;
+	union ixgbe_atr_input filter;
+	u16 sw_idx;
+	u64 action;
+};
+
+enum ixgbe_state_t {
+	__IXGBE_TESTING = 0,
+	__IXGBE_RESETTING = 1,
+	__IXGBE_DOWN = 2,
+	__IXGBE_DISABLED = 3,
+	__IXGBE_REMOVING = 4,
+	__IXGBE_SERVICE_SCHED = 5,
+	__IXGBE_SERVICE_INITED = 6,
+	__IXGBE_IN_SFP_INIT = 7,
+	__IXGBE_PTP_RUNNING = 8,
+	__IXGBE_PTP_TX_IN_PROGRESS = 9,
+	__IXGBE_RESET_REQUESTED = 10,
+};
+
+enum {
+	NETDEV_STATS = 0,
+	IXGBE_STATS = 1,
+};
+
+struct ixgbe_stats {
+	char stat_string[32];
+	int type;
+	int sizeof_stat;
+	int stat_offset;
+};
+
+struct ixgbe_reg_test {
+	u16 reg;
+	u8 array_len;
+	u8 test_type;
+	u32 mask;
+	u32 write;
+};
+
+enum {
+	IFLA_VF_LINK_STATE_AUTO = 0,
+	IFLA_VF_LINK_STATE_ENABLE = 1,
+	IFLA_VF_LINK_STATE_DISABLE = 2,
+	__IFLA_VF_LINK_STATE_MAX = 3,
+};
+
+enum ixgbe_pfvf_api_rev {
+	ixgbe_mbox_api_10 = 0,
+	ixgbe_mbox_api_20 = 1,
+	ixgbe_mbox_api_11 = 2,
+	ixgbe_mbox_api_12 = 3,
+	ixgbe_mbox_api_13 = 4,
+	ixgbe_mbox_api_14 = 5,
+	ixgbe_mbox_api_unknown = 6,
+};
+
+enum ixgbevf_xcast_modes {
+	IXGBEVF_XCAST_MODE_NONE = 0,
+	IXGBEVF_XCAST_MODE_MULTI = 1,
+	IXGBEVF_XCAST_MODE_ALLMULTI = 2,
+	IXGBEVF_XCAST_MODE_PROMISC = 3,
+};
+
+struct ixgbe_adv_tx_context_desc {
+	__le32 vlan_macip_lens;
+	__le32 fceof_saidx;
+	__le32 type_tucmd_mlhl;
+	__le32 mss_l4len_idx;
+};
+
+typedef enum {
+	ixgb_mac_unknown = 0,
+	ixgb_82597 = 1,
+	ixgb_num_macs = 2,
+} ixgb_mac_type;
+
+typedef enum {
+	ixgb_phy_type_unknown = 0,
+	ixgb_phy_type_g6005 = 1,
+	ixgb_phy_type_g6104 = 2,
+	ixgb_phy_type_txn17201 = 3,
+	ixgb_phy_type_txn17401 = 4,
+	ixgb_phy_type_bcm = 5,
+} ixgb_phy_type;
+
+typedef enum {
+	ixgb_fc_none = 0,
+	ixgb_fc_rx_pause = 1,
+	ixgb_fc_tx_pause = 2,
+	ixgb_fc_full = 3,
+	ixgb_fc_default = 255,
+} ixgb_fc_type;
+
+typedef enum {
+	ixgb_bus_type_unknown = 0,
+	ixgb_bus_type_pci = 1,
+	ixgb_bus_type_pcix = 2,
+} ixgb_bus_type;
+
+typedef enum {
+	ixgb_bus_speed_unknown = 0,
+	ixgb_bus_speed_33 = 1,
+	ixgb_bus_speed_66 = 2,
+	ixgb_bus_speed_100 = 3,
+	ixgb_bus_speed_133 = 4,
+	ixgb_bus_speed_reserved = 5,
+} ixgb_bus_speed;
+
+typedef enum {
+	ixgb_bus_width_unknown = 0,
+	ixgb_bus_width_32 = 1,
+	ixgb_bus_width_64 = 2,
+} ixgb_bus_width;
+
+struct ixgb_fc {
+	u32 high_water;
+	u32 low_water;
+	u16 pause_time;
+	bool send_xon;
+	ixgb_fc_type type;
+};
+
+struct ixgb_bus {
+	ixgb_bus_speed speed;
+	ixgb_bus_width width;
+	ixgb_bus_type type;
+};
+
+struct ixgb_hw {
+	u8 *hw_addr;
+	void *back;
+	struct ixgb_fc fc;
+	struct ixgb_bus bus;
+	u32 phy_id;
+	u32 phy_addr;
+	ixgb_mac_type mac_type;
+	ixgb_phy_type phy_type;
+	u32 max_frame_size;
+	u32 mc_filter_type;
+	u32 num_mc_addrs;
+	u8 curr_mac_addr[6];
+	u32 num_tx_desc;
+	u32 num_rx_desc;
+	u32 rx_buffer_size;
+	bool link_up;
+	bool adapter_stopped;
+	u16 device_id;
+	u16 vendor_id;
+	u8 revision_id;
+	u16 subsystem_vendor_id;
+	u16 subsystem_id;
+	u32 bar0;
+	u32 bar1;
+	u32 bar2;
+	u32 bar3;
+	u16 pci_cmd_word;
+	__le16 eeprom[64];
+	long unsigned int io_base;
+	u32 lastLFC;
+	u32 lastRFC;
+};
+
+struct ixgb_ee_map_type {
+	u8 mac_addr[6];
+	__le16 compatibility;
+	__le16 reserved1[4];
+	__le32 pba_number;
+	__le16 init_ctrl_reg_1;
+	__le16 subsystem_id;
+	__le16 subvendor_id;
+	__le16 device_id;
+	__le16 vendor_id;
+	__le16 init_ctrl_reg_2;
+	__le16 oem_reserved[16];
+	__le16 swdpins_reg;
+	__le16 circuit_ctrl_reg;
+	u8 d3_power;
+	u8 d0_power;
+	__le16 reserved2[28];
+	__le16 checksum;
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
+};
+
+struct ixgb_hw_stats {
+	u64 tprl;
+	u64 tprh;
+	u64 gprcl;
+	u64 gprch;
+	u64 bprcl;
+	u64 bprch;
+	u64 mprcl;
+	u64 mprch;
+	u64 uprcl;
+	u64 uprch;
+	u64 vprcl;
+	u64 vprch;
+	u64 jprcl;
+	u64 jprch;
+	u64 gorcl;
+	u64 gorch;
+	u64 torl;
+	u64 torh;
+	u64 rnbc;
+	u64 ruc;
+	u64 roc;
+	u64 rlec;
+	u64 crcerrs;
+	u64 icbc;
+	u64 ecbc;
+	u64 mpc;
+	u64 tptl;
+	u64 tpth;
+	u64 gptcl;
+	u64 gptch;
+	u64 bptcl;
+	u64 bptch;
+	u64 mptcl;
+	u64 mptch;
+	u64 uptcl;
+	u64 uptch;
+	u64 vptcl;
+	u64 vptch;
+	u64 jptcl;
+	u64 jptch;
+	u64 gotcl;
+	u64 gotch;
+	u64 totl;
+	u64 toth;
+	u64 dc;
+	u64 plt64c;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 ibic;
+	u64 rfc;
+	u64 lfc;
+	u64 pfrc;
+	u64 pftc;
+	u64 mcfrc;
+	u64 mcftc;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 rjc;
+};
+
+struct ixgb_buffer {
+	struct sk_buff *skb;
+	dma_addr_t dma;
+	long unsigned int time_stamp;
+	u16 length;
+	u16 next_to_watch;
+	u16 mapped_as_page;
+};
+
+struct ixgb_desc_ring {
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	unsigned int next_to_use;
+	unsigned int next_to_clean;
+	struct ixgb_buffer *buffer_info;
+};
+
+struct ixgb_adapter {
+	struct timer_list watchdog_timer;
+	long unsigned int active_vlans[64];
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u32 part_num;
+	u16 link_speed;
+	u16 link_duplex;
+	struct work_struct tx_timeout_task;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ixgb_desc_ring tx_ring;
+	unsigned int restart_queue;
+	long unsigned int timeo_start;
+	u32 tx_cmd_type;
+	u64 hw_csum_tx_good;
+	u64 hw_csum_tx_error;
+	u32 tx_int_delay;
+	u32 tx_timeout_count;
+	bool tx_int_delay_enable;
+	bool detect_tx_hung;
+	struct ixgb_desc_ring rx_ring;
+	u64 hw_csum_rx_error;
+	u64 hw_csum_rx_good;
+	u32 rx_int_delay;
+	bool rx_csum;
+	struct napi_struct napi;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct ixgb_hw hw;
+	u16 msg_enable;
+	struct ixgb_hw_stats stats;
+	u32 alloc_rx_buff_failed;
+	bool have_msi;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	NETDEV_STATS___2 = 0,
+	IXGB_STATS = 1,
+};
+
+struct ixgb_stats {
+	char stat_string[32];
+	int type;
+	int sizeof_stat;
+	int stat_offset;
+};
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+struct stmmac_mdio_bus_data {
+	unsigned int phy_mask;
+	unsigned int has_xpcs;
+	unsigned int xpcs_an_inband;
+	int *irqs;
+	int probed_phy_irq;
+	bool needs_reset;
+};
+
+struct stmmac_dma_cfg {
+	int pbl;
+	int txpbl;
+	int rxpbl;
+	bool pblx8;
+	int fixed_burst;
+	int mixed_burst;
+	bool aal;
+	bool eame;
+	bool multi_msi_en;
+	bool dche;
+};
+
+struct stmmac_axi {
+	bool axi_lpi_en;
+	bool axi_xit_frm;
+	u32 axi_wr_osr_lmt;
+	u32 axi_rd_osr_lmt;
+	bool axi_kbbe;
+	u32 axi_blen[7];
+	bool axi_fb;
+	bool axi_mb;
+	bool axi_rb;
+};
+
+struct stmmac_est {
+	struct mutex lock;
+	int enable;
+	u32 btr_reserve[2];
+	u32 btr_offset[2];
+	u32 btr[2];
+	u32 ctr[2];
+	u32 ter;
+	u32 gcl_unaligned[1024];
+	u32 gcl[1024];
+	u32 gcl_size;
+};
+
+struct stmmac_rxq_cfg {
+	u8 mode_to_use;
+	u32 chan;
+	u8 pkt_route;
+	bool use_prio;
+	u32 prio;
+};
+
+struct stmmac_txq_cfg {
+	u32 weight;
+	u8 mode_to_use;
+	u32 send_slope;
+	u32 idle_slope;
+	u32 high_credit;
+	u32 low_credit;
+	bool use_prio;
+	u32 prio;
+	int tbs_en;
+};
+
+enum stmmac_fpe_state {
+	FPE_STATE_OFF = 0,
+	FPE_STATE_CAPABLE = 1,
+	FPE_STATE_ENTERING_ON = 2,
+	FPE_STATE_ON = 3,
+};
+
+enum stmmac_mpacket_type {
+	MPACKET_VERIFY = 0,
+	MPACKET_RESPONSE = 1,
+};
+
+struct stmmac_fpe_cfg {
+	bool enable;
+	bool hs_enable;
+	enum stmmac_fpe_state lp_fpe_state;
+	enum stmmac_fpe_state lo_fpe_state;
+};
+
+struct stmmac_safety_feature_cfg {
+	u32 tsoee;
+	u32 mrxpee;
+	u32 mestee;
+	u32 mrxee;
+	u32 mtxee;
+	u32 epsi;
+	u32 edpp;
+	u32 prtyen;
+	u32 tmouten;
+};
+
+struct mac_device_info;
+
+struct plat_stmmacenet_data {
+	int bus_id;
+	int phy_addr;
+	int interface;
+	phy_interface_t phy_interface;
+	struct stmmac_mdio_bus_data *mdio_bus_data;
+	struct device_node *phy_node;
+	struct device_node *phylink_node;
+	struct device_node *mdio_node;
+	struct stmmac_dma_cfg *dma_cfg;
+	struct stmmac_est *est;
+	struct stmmac_fpe_cfg *fpe_cfg;
+	struct stmmac_safety_feature_cfg *safety_feat_cfg;
+	int clk_csr;
+	int has_gmac;
+	int enh_desc;
+	int tx_coe;
+	int rx_coe;
+	int bugged_jumbo;
+	int pmt;
+	int force_sf_dma_mode;
+	int force_thresh_dma_mode;
+	int riwt_off;
+	int max_speed;
+	int maxmtu;
+	int multicast_filter_bins;
+	int unicast_filter_entries;
+	int tx_fifo_size;
+	int rx_fifo_size;
+	u32 addr64;
+	u32 rx_queues_to_use;
+	u32 tx_queues_to_use;
+	u8 rx_sched_algorithm;
+	u8 tx_sched_algorithm;
+	struct stmmac_rxq_cfg rx_queues_cfg[8];
+	struct stmmac_txq_cfg tx_queues_cfg[8];
+	void (*fix_mac_speed)(void *, unsigned int);
+	int (*serdes_powerup)(struct net_device *, void *);
+	void (*serdes_powerdown)(struct net_device *, void *);
+	void (*speed_mode_2500)(struct net_device *, void *);
+	void (*ptp_clk_freq_config)(void *);
+	int (*init)(struct platform_device *, void *);
+	void (*exit)(struct platform_device *, void *);
+	struct mac_device_info * (*setup)(void *);
+	int (*clks_config)(void *, bool);
+	int (*crosststamp)(ktime_t *, struct system_counterval_t *, void *);
+	void (*dump_debug_regs)(void *);
+	void *bsp_priv;
+	struct clk *stmmac_clk;
+	struct clk *pclk;
+	struct clk *clk_ptp_ref;
+	unsigned int clk_ptp_rate;
+	unsigned int clk_ref_rate;
+	unsigned int mult_fact_100ns;
+	s32 ptp_max_adj;
+	u32 cdc_error_adj;
+	struct reset_control *stmmac_rst;
+	struct reset_control *stmmac_ahb_rst;
+	struct stmmac_axi *axi;
+	int has_gmac4;
+	bool has_sun8i;
+	bool tso_en;
+	int rss_en;
+	int mac_port_sel_speed;
+	bool en_tx_lpi_clockgating;
+	bool rx_clk_runs_in_lpi;
+	int has_xgmac;
+	bool vlan_fail_q_en;
+	u8 vlan_fail_q;
+	unsigned int eee_usecs_rate;
+	struct pci_dev *pdev;
+	int int_snapshot_num;
+	int ext_snapshot_num;
+	bool int_snapshot_en;
+	bool ext_snapshot_en;
+	bool multi_msi_en;
+	int msi_mac_vec;
+	int msi_wol_vec;
+	int msi_lpi_vec;
+	int msi_sfty_ce_vec;
+	int msi_sfty_ue_vec;
+	int msi_rx_base_vec;
+	int msi_tx_base_vec;
+	bool use_phy_wol;
+	bool sph_disable;
+	bool serdes_up_after_phy_linkup;
+};
+
+struct mii_regs {
+	unsigned int addr;
+	unsigned int data;
+	unsigned int addr_shift;
+	unsigned int reg_shift;
+	unsigned int addr_mask;
+	unsigned int reg_mask;
+	unsigned int clk_csr_shift;
+	unsigned int clk_csr_mask;
+};
+
+struct mac_link {
+	u32 speed_mask;
+	u32 speed10;
+	u32 speed100;
+	u32 speed1000;
+	u32 speed2500;
+	u32 duplex;
+	struct {
+		u32 speed2500;
+		u32 speed5000;
+		u32 speed10000;
+	} xgmii;
+	struct {
+		u32 speed25000;
+		u32 speed40000;
+		u32 speed50000;
+		u32 speed100000;
+	} xlgmii;
+};
+
+struct stmmac_ops;
+
+struct stmmac_desc_ops;
+
+struct stmmac_dma_ops;
+
+struct stmmac_mode_ops;
+
+struct stmmac_hwtimestamp;
+
+struct stmmac_tc_ops;
+
+struct stmmac_mmc_ops;
+
+struct dw_xpcs;
+
+struct mac_device_info {
+	const struct stmmac_ops *mac;
+	const struct stmmac_desc_ops *desc;
+	const struct stmmac_dma_ops *dma;
+	const struct stmmac_mode_ops *mode;
+	const struct stmmac_hwtimestamp *ptp;
+	const struct stmmac_tc_ops *tc;
+	const struct stmmac_mmc_ops *mmc;
+	struct dw_xpcs *xpcs;
+	struct mii_regs mii;
+	struct mac_link link;
+	void *pcsr;
+	unsigned int multicast_filter_bins;
+	unsigned int unicast_filter_entries;
+	unsigned int mcast_bits_log2;
+	unsigned int rx_csum;
+	unsigned int pcs;
+	unsigned int pmt;
+	unsigned int ps;
+	unsigned int xlgmac;
+	unsigned int num_vlan;
+	u32 vlan_filter[32];
+	unsigned int promisc;
+	bool vlan_fail_q_en;
+	u8 vlan_fail_q;
+};
+
+struct phylink_link_state {
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	int rate_matching;
+	unsigned int link: 1;
+	unsigned int an_enabled: 1;
+	unsigned int an_complete: 1;
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool legacy_pre_march2020;
+	bool poll_fixed_state;
+	bool mac_managed_pm;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	long unsigned int supported_interfaces[1];
+	long unsigned int mac_capabilities;
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, long unsigned int *, const struct phylink_link_state *);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const long unsigned int *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+struct xpcs_id;
+
+struct dw_xpcs {
+	struct mdio_device *mdiodev;
+	const struct xpcs_id *id;
+	struct phylink_pcs pcs;
+};
+
+struct xpcs_compat;
+
+struct xpcs_id {
+	u32 id;
+	u32 mask;
+	const struct xpcs_compat *compat;
+};
+
+struct dma_desc {
+	__le32 des0;
+	__le32 des1;
+	__le32 des2;
+	__le32 des3;
+};
+
+struct dma_extended_desc {
+	struct dma_desc basic;
+	__le32 des4;
+	__le32 des5;
+	__le32 des6;
+	__le32 des7;
+};
+
+struct dma_edesc {
+	__le32 des4;
+	__le32 des5;
+	__le32 des6;
+	__le32 des7;
+	struct dma_desc basic;
+};
+
+struct stmmac_extra_stats;
+
+struct stmmac_desc_ops {
+	void (*init_rx_desc)(struct dma_desc *, int, int, int, int);
+	void (*init_tx_desc)(struct dma_desc *, int, int);
+	void (*prepare_tx_desc)(struct dma_desc *, int, int, bool, int, bool, bool, unsigned int);
+	void (*prepare_tso_tx_desc)(struct dma_desc *, int, int, int, bool, bool, unsigned int, unsigned int);
+	void (*set_tx_owner)(struct dma_desc *);
+	int (*get_tx_owner)(struct dma_desc *);
+	void (*release_tx_desc)(struct dma_desc *, int);
+	void (*set_tx_ic)(struct dma_desc *);
+	int (*get_tx_ls)(struct dma_desc *);
+	int (*tx_status)(void *, struct stmmac_extra_stats *, struct dma_desc *, void *);
+	int (*get_tx_len)(struct dma_desc *);
+	void (*set_rx_owner)(struct dma_desc *, int);
+	int (*get_rx_frame_len)(struct dma_desc *, int);
+	int (*rx_status)(void *, struct stmmac_extra_stats *, struct dma_desc *);
+	void (*rx_extended_status)(void *, struct stmmac_extra_stats *, struct dma_extended_desc *);
+	void (*enable_tx_timestamp)(struct dma_desc *);
+	int (*get_tx_timestamp_status)(struct dma_desc *);
+	void (*get_timestamp)(void *, u32, u64 *);
+	int (*get_rx_timestamp_status)(void *, void *, u32);
+	void (*display_ring)(void *, unsigned int, bool, dma_addr_t, unsigned int);
+	void (*set_mss)(struct dma_desc *, unsigned int);
+	void (*set_addr)(struct dma_desc *, dma_addr_t);
+	void (*clear)(struct dma_desc *);
+	int (*get_rx_hash)(struct dma_desc *, u32 *, enum pkt_hash_types *);
+	void (*get_rx_header_len)(struct dma_desc *, unsigned int *);
+	void (*set_sec_addr)(struct dma_desc *, dma_addr_t, bool);
+	void (*set_sarc)(struct dma_desc *, u32);
+	void (*set_vlan_tag)(struct dma_desc *, u16, u16, u32);
+	void (*set_vlan)(struct dma_desc *, u32);
+	void (*set_tbs)(struct dma_edesc *, u32, u32);
+};
+
+struct stmmac_txq_stats {
+	long unsigned int tx_pkt_n;
+	long unsigned int tx_normal_irq_n;
+};
+
+struct stmmac_rxq_stats {
+	long unsigned int rx_pkt_n;
+	long unsigned int rx_normal_irq_n;
+};
+
+struct stmmac_extra_stats {
+	long unsigned int tx_underflow;
+	long unsigned int tx_carrier;
+	long unsigned int tx_losscarrier;
+	long unsigned int vlan_tag;
+	long unsigned int tx_deferred;
+	long unsigned int tx_vlan;
+	long unsigned int tx_jabber;
+	long unsigned int tx_frame_flushed;
+	long unsigned int tx_payload_error;
+	long unsigned int tx_ip_header_error;
+	long unsigned int rx_desc;
+	long unsigned int sa_filter_fail;
+	long unsigned int overflow_error;
+	long unsigned int ipc_csum_error;
+	long unsigned int rx_collision;
+	long unsigned int rx_crc_errors;
+	long unsigned int dribbling_bit;
+	long unsigned int rx_length;
+	long unsigned int rx_mii;
+	long unsigned int rx_multicast;
+	long unsigned int rx_gmac_overflow;
+	long unsigned int rx_watchdog;
+	long unsigned int da_rx_filter_fail;
+	long unsigned int sa_rx_filter_fail;
+	long unsigned int rx_missed_cntr;
+	long unsigned int rx_overflow_cntr;
+	long unsigned int rx_vlan;
+	long unsigned int rx_split_hdr_pkt_n;
+	long unsigned int tx_undeflow_irq;
+	long unsigned int tx_process_stopped_irq;
+	long unsigned int tx_jabber_irq;
+	long unsigned int rx_overflow_irq;
+	long unsigned int rx_buf_unav_irq;
+	long unsigned int rx_process_stopped_irq;
+	long unsigned int rx_watchdog_irq;
+	long unsigned int tx_early_irq;
+	long unsigned int fatal_bus_error_irq;
+	long unsigned int rx_early_irq;
+	long unsigned int threshold;
+	long unsigned int tx_pkt_n;
+	long unsigned int rx_pkt_n;
+	long unsigned int normal_irq_n;
+	long unsigned int rx_normal_irq_n;
+	long unsigned int napi_poll;
+	long unsigned int tx_normal_irq_n;
+	long unsigned int tx_clean;
+	long unsigned int tx_set_ic_bit;
+	long unsigned int irq_receive_pmt_irq_n;
+	long unsigned int mmc_tx_irq_n;
+	long unsigned int mmc_rx_irq_n;
+	long unsigned int mmc_rx_csum_offload_irq_n;
+	long unsigned int irq_tx_path_in_lpi_mode_n;
+	long unsigned int irq_tx_path_exit_lpi_mode_n;
+	long unsigned int irq_rx_path_in_lpi_mode_n;
+	long unsigned int irq_rx_path_exit_lpi_mode_n;
+	long unsigned int phy_eee_wakeup_error_n;
+	long unsigned int ip_hdr_err;
+	long unsigned int ip_payload_err;
+	long unsigned int ip_csum_bypassed;
+	long unsigned int ipv4_pkt_rcvd;
+	long unsigned int ipv6_pkt_rcvd;
+	long unsigned int no_ptp_rx_msg_type_ext;
+	long unsigned int ptp_rx_msg_type_sync;
+	long unsigned int ptp_rx_msg_type_follow_up;
+	long unsigned int ptp_rx_msg_type_delay_req;
+	long unsigned int ptp_rx_msg_type_delay_resp;
+	long unsigned int ptp_rx_msg_type_pdelay_req;
+	long unsigned int ptp_rx_msg_type_pdelay_resp;
+	long unsigned int ptp_rx_msg_type_pdelay_follow_up;
+	long unsigned int ptp_rx_msg_type_announce;
+	long unsigned int ptp_rx_msg_type_management;
+	long unsigned int ptp_rx_msg_pkt_reserved_type;
+	long unsigned int ptp_frame_type;
+	long unsigned int ptp_ver;
+	long unsigned int timestamp_dropped;
+	long unsigned int av_pkt_rcvd;
+	long unsigned int av_tagged_pkt_rcvd;
+	long unsigned int vlan_tag_priority_val;
+	long unsigned int l3_filter_match;
+	long unsigned int l4_filter_match;
+	long unsigned int l3_l4_filter_no_match;
+	long unsigned int irq_pcs_ane_n;
+	long unsigned int irq_pcs_link_n;
+	long unsigned int irq_rgmii_n;
+	long unsigned int pcs_link;
+	long unsigned int pcs_duplex;
+	long unsigned int pcs_speed;
+	long unsigned int mtl_tx_status_fifo_full;
+	long unsigned int mtl_tx_fifo_not_empty;
+	long unsigned int mmtl_fifo_ctrl;
+	long unsigned int mtl_tx_fifo_read_ctrl_write;
+	long unsigned int mtl_tx_fifo_read_ctrl_wait;
+	long unsigned int mtl_tx_fifo_read_ctrl_read;
+	long unsigned int mtl_tx_fifo_read_ctrl_idle;
+	long unsigned int mac_tx_in_pause;
+	long unsigned int mac_tx_frame_ctrl_xfer;
+	long unsigned int mac_tx_frame_ctrl_idle;
+	long unsigned int mac_tx_frame_ctrl_wait;
+	long unsigned int mac_tx_frame_ctrl_pause;
+	long unsigned int mac_gmii_tx_proto_engine;
+	long unsigned int mtl_rx_fifo_fill_level_full;
+	long unsigned int mtl_rx_fifo_fill_above_thresh;
+	long unsigned int mtl_rx_fifo_fill_below_thresh;
+	long unsigned int mtl_rx_fifo_fill_level_empty;
+	long unsigned int mtl_rx_fifo_read_ctrl_flush;
+	long unsigned int mtl_rx_fifo_read_ctrl_read_data;
+	long unsigned int mtl_rx_fifo_read_ctrl_status;
+	long unsigned int mtl_rx_fifo_read_ctrl_idle;
+	long unsigned int mtl_rx_fifo_ctrl_active;
+	long unsigned int mac_rx_frame_ctrl_fifo;
+	long unsigned int mac_gmii_rx_proto_engine;
+	long unsigned int tx_tso_frames;
+	long unsigned int tx_tso_nfrags;
+	long unsigned int mtl_est_cgce;
+	long unsigned int mtl_est_hlbs;
+	long unsigned int mtl_est_hlbf;
+	long unsigned int mtl_est_btre;
+	long unsigned int mtl_est_btrlm;
+	struct stmmac_txq_stats txq_stats[8];
+	struct stmmac_rxq_stats rxq_stats[8];
+	long: 64;
+	long: 64;
+};
+
+struct dma_features;
+
+struct stmmac_dma_ops {
+	int (*reset)(void *);
+	void (*init)(void *, struct stmmac_dma_cfg *, int);
+	void (*init_chan)(void *, struct stmmac_dma_cfg *, u32);
+	void (*init_rx_chan)(void *, struct stmmac_dma_cfg *, dma_addr_t, u32);
+	void (*init_tx_chan)(void *, struct stmmac_dma_cfg *, dma_addr_t, u32);
+	void (*axi)(void *, struct stmmac_axi *);
+	void (*dump_regs)(void *, u32 *);
+	void (*dma_rx_mode)(void *, int, u32, int, u8);
+	void (*dma_tx_mode)(void *, int, u32, int, u8);
+	void (*dma_diagnostic_fr)(void *, struct stmmac_extra_stats *, void *);
+	void (*enable_dma_transmission)(void *);
+	void (*enable_dma_irq)(void *, u32, bool, bool);
+	void (*disable_dma_irq)(void *, u32, bool, bool);
+	void (*start_tx)(void *, u32);
+	void (*stop_tx)(void *, u32);
+	void (*start_rx)(void *, u32);
+	void (*stop_rx)(void *, u32);
+	int (*dma_interrupt)(void *, struct stmmac_extra_stats *, u32, u32);
+	int (*get_hw_feature)(void *, struct dma_features *);
+	void (*rx_watchdog)(void *, u32, u32);
+	void (*set_tx_ring_len)(void *, u32, u32);
+	void (*set_rx_ring_len)(void *, u32, u32);
+	void (*set_rx_tail_ptr)(void *, u32, u32);
+	void (*set_tx_tail_ptr)(void *, u32, u32);
+	void (*enable_tso)(void *, bool, u32);
+	void (*qmode)(void *, u32, u8);
+	void (*set_bfsize)(void *, int, u32);
+	void (*enable_sph)(void *, bool, u32);
+	int (*enable_tbs)(void *, bool, u32);
+};
+
+struct dma_features {
+	unsigned int mbps_10_100;
+	unsigned int mbps_1000;
+	unsigned int half_duplex;
+	unsigned int hash_filter;
+	unsigned int multi_addr;
+	unsigned int pcs;
+	unsigned int sma_mdio;
+	unsigned int pmt_remote_wake_up;
+	unsigned int pmt_magic_frame;
+	unsigned int rmon;
+	unsigned int time_stamp;
+	unsigned int atime_stamp;
+	unsigned int eee;
+	unsigned int av;
+	unsigned int hash_tb_sz;
+	unsigned int tsoen;
+	unsigned int tx_coe;
+	unsigned int rx_coe;
+	unsigned int rx_coe_type1;
+	unsigned int rx_coe_type2;
+	unsigned int rxfifo_over_2048;
+	unsigned int number_rx_channel;
+	unsigned int number_tx_channel;
+	unsigned int number_rx_queues;
+	unsigned int number_tx_queues;
+	unsigned int pps_out_num;
+	unsigned int enh_desc;
+	unsigned int tx_fifo_size;
+	unsigned int rx_fifo_size;
+	unsigned int asp;
+	unsigned int frpsel;
+	unsigned int frpbs;
+	unsigned int frpes;
+	unsigned int addr64;
+	unsigned int rssen;
+	unsigned int vlhash;
+	unsigned int sphen;
+	unsigned int vlins;
+	unsigned int dvlan;
+	unsigned int l3l4fnum;
+	unsigned int arpoffsel;
+	unsigned int estwid;
+	unsigned int estdep;
+	unsigned int estsel;
+	unsigned int fpesel;
+	unsigned int tbssel;
+	unsigned int aux_snapshot_n;
+};
+
+struct rgmii_adv;
+
+struct stmmac_safety_stats;
+
+struct stmmac_tc_entry;
+
+struct stmmac_pps_cfg;
+
+struct stmmac_rss;
+
+struct stmmac_ops {
+	void (*core_init)(struct mac_device_info *, struct net_device *);
+	void (*set_mac)(void *, bool);
+	int (*rx_ipc)(struct mac_device_info *);
+	void (*rx_queue_enable)(struct mac_device_info *, u8, u32);
+	void (*rx_queue_prio)(struct mac_device_info *, u32, u32);
+	void (*tx_queue_prio)(struct mac_device_info *, u32, u32);
+	void (*rx_queue_routing)(struct mac_device_info *, u8, u32);
+	void (*prog_mtl_rx_algorithms)(struct mac_device_info *, u32);
+	void (*prog_mtl_tx_algorithms)(struct mac_device_info *, u32);
+	void (*set_mtl_tx_queue_weight)(struct mac_device_info *, u32, u32);
+	void (*map_mtl_to_dma)(struct mac_device_info *, u32, u32);
+	void (*config_cbs)(struct mac_device_info *, u32, u32, u32, u32, u32);
+	void (*dump_regs)(struct mac_device_info *, u32 *);
+	int (*host_irq_status)(struct mac_device_info *, struct stmmac_extra_stats *);
+	int (*host_mtl_irq_status)(struct mac_device_info *, u32);
+	void (*set_filter)(struct mac_device_info *, struct net_device *);
+	void (*flow_ctrl)(struct mac_device_info *, unsigned int, unsigned int, unsigned int, u32);
+	void (*pmt)(struct mac_device_info *, long unsigned int);
+	void (*set_umac_addr)(struct mac_device_info *, const unsigned char *, unsigned int);
+	void (*get_umac_addr)(struct mac_device_info *, unsigned char *, unsigned int);
+	void (*set_eee_mode)(struct mac_device_info *, bool);
+	void (*reset_eee_mode)(struct mac_device_info *);
+	void (*set_eee_lpi_entry_timer)(struct mac_device_info *, int);
+	void (*set_eee_timer)(struct mac_device_info *, int, int);
+	void (*set_eee_pls)(struct mac_device_info *, int);
+	void (*debug)(void *, struct stmmac_extra_stats *, u32, u32);
+	void (*pcs_ctrl_ane)(void *, bool, bool, bool);
+	void (*pcs_rane)(void *, bool);
+	void (*pcs_get_adv_lp)(void *, struct rgmii_adv *);
+	int (*safety_feat_config)(void *, unsigned int, struct stmmac_safety_feature_cfg *);
+	int (*safety_feat_irq_status)(struct net_device *, void *, unsigned int, struct stmmac_safety_stats *);
+	int (*safety_feat_dump)(struct stmmac_safety_stats *, int, long unsigned int *, const char **);
+	int (*rxp_config)(void *, struct stmmac_tc_entry *, unsigned int);
+	int (*flex_pps_config)(void *, int, struct stmmac_pps_cfg *, bool, u32, u32);
+	void (*set_mac_loopback)(void *, bool);
+	int (*rss_configure)(struct mac_device_info *, struct stmmac_rss *, u32);
+	void (*update_vlan_hash)(struct mac_device_info *, u32, __le16, bool);
+	void (*enable_vlan)(struct mac_device_info *, u32);
+	int (*add_hw_vlan_rx_fltr)(struct net_device *, struct mac_device_info *, __be16, u16);
+	int (*del_hw_vlan_rx_fltr)(struct net_device *, struct mac_device_info *, __be16, u16);
+	void (*restore_hw_vlan_rx_fltr)(struct net_device *, struct mac_device_info *);
+	int (*get_mac_tx_timestamp)(struct mac_device_info *, u64 *);
+	void (*sarc_configure)(void *, int);
+	int (*config_l3_filter)(struct mac_device_info *, u32, bool, bool, bool, bool, u32);
+	int (*config_l4_filter)(struct mac_device_info *, u32, bool, bool, bool, bool, u32);
+	void (*set_arp_offload)(struct mac_device_info *, bool, u32);
+	int (*est_configure)(void *, struct stmmac_est *, unsigned int);
+	void (*est_irq_status)(void *, struct net_device *, struct stmmac_extra_stats *, u32);
+	void (*fpe_configure)(void *, u32, u32, bool);
+	void (*fpe_send_mpacket)(void *, enum stmmac_mpacket_type);
+	int (*fpe_irq_status)(void *, struct net_device *);
+};
+
+struct rgmii_adv {
+	unsigned int pause;
+	unsigned int duplex;
+	unsigned int lp_pause;
+	unsigned int lp_duplex;
+};
+
+struct stmmac_safety_stats {
+	long unsigned int mac_errors[32];
+	long unsigned int mtl_errors[32];
+	long unsigned int dma_errors[32];
+};
+
+struct stmmac_tc_entry {
+	bool in_use;
+	bool in_hw;
+	bool is_last;
+	bool is_frag;
+	void *frag_ptr;
+	unsigned int table_pos;
+	u32 handle;
+	u32 prio;
+	struct {
+		u32 match_data;
+		u32 match_en;
+		u8 af: 1;
+		u8 rf: 1;
+		u8 im: 1;
+		u8 nc: 1;
+		u8 res1: 4;
+		u8 frame_offset;
+		u8 ok_index;
+		u8 dma_ch_no;
+		u32 res2;
+	} val;
+};
+
+struct stmmac_pps_cfg {
+	bool available;
+	struct timespec64 start;
+	struct timespec64 period;
+};
+
+struct stmmac_rss {
+	int enable;
+	u8 key[40];
+	u32 table[256];
+};
+
+struct stmmac_priv;
+
+struct stmmac_hwtimestamp {
+	void (*config_hw_tstamping)(void *, u32);
+	void (*config_sub_second_increment)(void *, u32, int, u32 *);
+	int (*init_systime)(void *, u32, u32);
+	int (*config_addend)(void *, u32);
+	int (*adjust_systime)(void *, u32, u32, int, int);
+	void (*get_systime)(void *, u64 *);
+	void (*get_ptptime)(void *, u64 *);
+	void (*timestamp_interrupt)(struct stmmac_priv *);
+};
+
+struct stmmac_rx_buffer;
+
+struct stmmac_rx_queue {
+	u32 rx_count_frames;
+	u32 queue_index;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info xdp_rxq;
+	struct xsk_buff_pool *xsk_pool;
+	struct page_pool *page_pool;
+	struct stmmac_rx_buffer *buf_pool;
+	struct stmmac_priv *priv_data;
+	struct dma_extended_desc *dma_erx;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dma_desc *dma_rx;
+	unsigned int cur_rx;
+	unsigned int dirty_rx;
+	unsigned int buf_alloc_num;
+	u32 rx_zeroc_thresh;
+	dma_addr_t dma_rx_phy;
+	u32 rx_tail_addr;
+	unsigned int state_saved;
+	struct {
+		struct sk_buff *skb;
+		unsigned int len;
+		unsigned int error;
+	} state;
+	long: 64;
+};
+
+struct stmmac_tx_info;
+
+struct stmmac_tx_queue {
+	u32 tx_count_frames;
+	int tbs;
+	struct hrtimer txtimer;
+	u32 queue_index;
+	struct stmmac_priv *priv_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dma_extended_desc *dma_etx;
+	struct dma_edesc *dma_entx;
+	struct dma_desc *dma_tx;
+	union {
+		struct sk_buff **tx_skbuff;
+		struct xdp_frame **xdpf;
+	};
+	struct stmmac_tx_info *tx_skbuff_dma;
+	struct xsk_buff_pool *xsk_pool;
+	u32 xsk_frames_done;
+	unsigned int cur_tx;
+	unsigned int dirty_tx;
+	dma_addr_t dma_tx_phy;
+	dma_addr_t tx_tail_addr;
+	u32 mss;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stmmac_dma_conf {
+	unsigned int dma_buf_sz;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct stmmac_rx_queue rx_queue[8];
+	unsigned int dma_rx_size;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct stmmac_tx_queue tx_queue[8];
+	unsigned int dma_tx_size;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stmmac_channel {
+	struct napi_struct rx_napi;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct napi_struct tx_napi;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct napi_struct rxtx_napi;
+	struct stmmac_priv *priv_data;
+	spinlock_t lock;
+	u32 index;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stmmac_counters {
+	unsigned int mmc_tx_octetcount_gb;
+	unsigned int mmc_tx_framecount_gb;
+	unsigned int mmc_tx_broadcastframe_g;
+	unsigned int mmc_tx_multicastframe_g;
+	unsigned int mmc_tx_64_octets_gb;
+	unsigned int mmc_tx_65_to_127_octets_gb;
+	unsigned int mmc_tx_128_to_255_octets_gb;
+	unsigned int mmc_tx_256_to_511_octets_gb;
+	unsigned int mmc_tx_512_to_1023_octets_gb;
+	unsigned int mmc_tx_1024_to_max_octets_gb;
+	unsigned int mmc_tx_unicast_gb;
+	unsigned int mmc_tx_multicast_gb;
+	unsigned int mmc_tx_broadcast_gb;
+	unsigned int mmc_tx_underflow_error;
+	unsigned int mmc_tx_singlecol_g;
+	unsigned int mmc_tx_multicol_g;
+	unsigned int mmc_tx_deferred;
+	unsigned int mmc_tx_latecol;
+	unsigned int mmc_tx_exesscol;
+	unsigned int mmc_tx_carrier_error;
+	unsigned int mmc_tx_octetcount_g;
+	unsigned int mmc_tx_framecount_g;
+	unsigned int mmc_tx_excessdef;
+	unsigned int mmc_tx_pause_frame;
+	unsigned int mmc_tx_vlan_frame_g;
+	unsigned int mmc_rx_framecount_gb;
+	unsigned int mmc_rx_octetcount_gb;
+	unsigned int mmc_rx_octetcount_g;
+	unsigned int mmc_rx_broadcastframe_g;
+	unsigned int mmc_rx_multicastframe_g;
+	unsigned int mmc_rx_crc_error;
+	unsigned int mmc_rx_align_error;
+	unsigned int mmc_rx_run_error;
+	unsigned int mmc_rx_jabber_error;
+	unsigned int mmc_rx_undersize_g;
+	unsigned int mmc_rx_oversize_g;
+	unsigned int mmc_rx_64_octets_gb;
+	unsigned int mmc_rx_65_to_127_octets_gb;
+	unsigned int mmc_rx_128_to_255_octets_gb;
+	unsigned int mmc_rx_256_to_511_octets_gb;
+	unsigned int mmc_rx_512_to_1023_octets_gb;
+	unsigned int mmc_rx_1024_to_max_octets_gb;
+	unsigned int mmc_rx_unicast_g;
+	unsigned int mmc_rx_length_error;
+	unsigned int mmc_rx_autofrangetype;
+	unsigned int mmc_rx_pause_frames;
+	unsigned int mmc_rx_fifo_overflow;
+	unsigned int mmc_rx_vlan_frames_gb;
+	unsigned int mmc_rx_watchdog_error;
+	unsigned int mmc_rx_ipc_intr_mask;
+	unsigned int mmc_rx_ipc_intr;
+	unsigned int mmc_rx_ipv4_gd;
+	unsigned int mmc_rx_ipv4_hderr;
+	unsigned int mmc_rx_ipv4_nopay;
+	unsigned int mmc_rx_ipv4_frag;
+	unsigned int mmc_rx_ipv4_udsbl;
+	unsigned int mmc_rx_ipv4_gd_octets;
+	unsigned int mmc_rx_ipv4_hderr_octets;
+	unsigned int mmc_rx_ipv4_nopay_octets;
+	unsigned int mmc_rx_ipv4_frag_octets;
+	unsigned int mmc_rx_ipv4_udsbl_octets;
+	unsigned int mmc_rx_ipv6_gd_octets;
+	unsigned int mmc_rx_ipv6_hderr_octets;
+	unsigned int mmc_rx_ipv6_nopay_octets;
+	unsigned int mmc_rx_ipv6_gd;
+	unsigned int mmc_rx_ipv6_hderr;
+	unsigned int mmc_rx_ipv6_nopay;
+	unsigned int mmc_rx_udp_gd;
+	unsigned int mmc_rx_udp_err;
+	unsigned int mmc_rx_tcp_gd;
+	unsigned int mmc_rx_tcp_err;
+	unsigned int mmc_rx_icmp_gd;
+	unsigned int mmc_rx_icmp_err;
+	unsigned int mmc_rx_udp_gd_octets;
+	unsigned int mmc_rx_udp_err_octets;
+	unsigned int mmc_rx_tcp_gd_octets;
+	unsigned int mmc_rx_tcp_err_octets;
+	unsigned int mmc_rx_icmp_gd_octets;
+	unsigned int mmc_rx_icmp_err_octets;
+	unsigned int mmc_tx_fpe_fragment_cntr;
+	unsigned int mmc_tx_hold_req_cntr;
+	unsigned int mmc_rx_packet_assembly_err_cntr;
+	unsigned int mmc_rx_packet_smd_err_cntr;
+	unsigned int mmc_rx_packet_assembly_ok_cntr;
+	unsigned int mmc_rx_fpe_fragment_cntr;
+};
+
+struct stmmac_flow_entry;
+
+struct stmmac_rfs_entry;
+
+struct stmmac_priv {
+	u32 tx_coal_frames[8];
+	u32 tx_coal_timer[8];
+	u32 rx_coal_frames[8];
+	int hwts_tx_en;
+	bool tx_path_in_lpi_mode;
+	bool tso;
+	int sph;
+	int sph_cap;
+	u32 sarc_type;
+	unsigned int rx_copybreak;
+	u32 rx_riwt[8];
+	int hwts_rx_en;
+	void *ioaddr;
+	struct net_device *dev;
+	struct device *device;
+	struct mac_device_info *hw;
+	int (*hwif_quirks)(struct stmmac_priv *);
+	struct mutex lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct stmmac_dma_conf dma_conf;
+	struct stmmac_channel channel[8];
+	int speed;
+	unsigned int flow_ctrl;
+	unsigned int pause;
+	struct mii_bus *mii;
+	struct phylink_config phylink_config;
+	struct phylink *phylink;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct stmmac_extra_stats xstats;
+	struct stmmac_safety_stats sstats;
+	struct plat_stmmacenet_data *plat;
+	struct dma_features dma_cap;
+	struct stmmac_counters mmc;
+	int hw_cap_support;
+	int synopsys_id;
+	u32 msg_enable;
+	int wolopts;
+	int wol_irq;
+	int clk_csr;
+	struct timer_list eee_ctrl_timer;
+	int lpi_irq;
+	int eee_enabled;
+	int eee_active;
+	int tx_lpi_timer;
+	int tx_lpi_enabled;
+	int eee_tw_timer;
+	bool eee_sw_timer_en;
+	unsigned int mode;
+	unsigned int chain_mode;
+	int extend_desc;
+	struct hwtstamp_config tstamp_config;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_clock_ops;
+	unsigned int default_addend;
+	u32 sub_second_inc;
+	u32 systime_flags;
+	u32 adv_ts;
+	int use_riwt;
+	int irq_wake;
+	rwlock_t ptp_lock;
+	struct mutex aux_ts_lock;
+	wait_queue_head_t tstamp_busy_wait;
+	void *mmcaddr;
+	void *ptpaddr;
+	long unsigned int active_vlans[64];
+	int sfty_ce_irq;
+	int sfty_ue_irq;
+	int rx_irq[8];
+	int tx_irq[8];
+	char int_name_mac[25];
+	char int_name_wol[25];
+	char int_name_lpi[25];
+	char int_name_sfty_ce[26];
+	char int_name_sfty_ue[26];
+	char int_name_rx_irq[240];
+	char int_name_tx_irq[272];
+	struct dentry *dbgfs_dir;
+	long unsigned int state;
+	struct workqueue_struct *wq;
+	struct work_struct service_task;
+	long unsigned int fpe_task_state;
+	struct workqueue_struct *fpe_wq;
+	struct work_struct fpe_task;
+	char wq_name[20];
+	unsigned int tc_entries_max;
+	unsigned int tc_off_max;
+	struct stmmac_tc_entry *tc_entries;
+	unsigned int flow_entries_max;
+	struct stmmac_flow_entry *flow_entries;
+	unsigned int rfs_entries_max[3];
+	unsigned int rfs_entries_cnt[3];
+	unsigned int rfs_entries_total;
+	struct stmmac_rfs_entry *rfs_entries;
+	struct stmmac_pps_cfg pps[4];
+	struct stmmac_rss rss;
+	long unsigned int *af_xdp_zc_qps;
+	struct bpf_prog *xdp_prog;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stmmac_mode_ops {
+	void (*init)(void *, dma_addr_t, unsigned int, unsigned int);
+	unsigned int (*is_jumbo_frm)(int, int);
+	int (*jumbo_frm)(void *, struct sk_buff *, int);
+	int (*set_16kib_bfsize)(int);
+	void (*init_desc3)(struct dma_desc *);
+	void (*refill_desc3)(void *, struct dma_desc *);
+	void (*clean_desc3)(void *, struct dma_desc *);
+};
+
+struct tc_cls_u32_offload;
+
+struct tc_cbs_qopt_offload;
+
+struct flow_cls_offload;
+
+struct tc_taprio_qopt_offload;
+
+struct tc_etf_qopt_offload;
+
+struct stmmac_tc_ops {
+	int (*init)(struct stmmac_priv *);
+	int (*setup_cls_u32)(struct stmmac_priv *, struct tc_cls_u32_offload *);
+	int (*setup_cbs)(struct stmmac_priv *, struct tc_cbs_qopt_offload *);
+	int (*setup_cls)(struct stmmac_priv *, struct flow_cls_offload *);
+	int (*setup_taprio)(struct stmmac_priv *, struct tc_taprio_qopt_offload *);
+	int (*setup_etf)(struct stmmac_priv *, struct tc_etf_qopt_offload *);
+};
+
+struct stmmac_mmc_ops {
+	void (*ctrl)(void *, unsigned int);
+	void (*intr_all_mask)(void *);
+	void (*read)(void *, struct stmmac_counters *);
+};
+
+enum stmmac_txbuf_type {
+	STMMAC_TXBUF_T_SKB = 0,
+	STMMAC_TXBUF_T_XDP_TX = 1,
+	STMMAC_TXBUF_T_XDP_NDO = 2,
+	STMMAC_TXBUF_T_XSK_TX = 3,
+};
+
+struct stmmac_tx_info {
+	dma_addr_t buf;
+	bool map_as_page;
+	unsigned int len;
+	bool last_segment;
+	bool is_jumbo;
+	enum stmmac_txbuf_type buf_type;
+};
+
+struct stmmac_rx_buffer {
+	union {
+		struct {
+			struct page *page;
+			dma_addr_t addr;
+			__u32 page_offset;
+		};
+		struct xdp_buff *xdp;
+	};
+	struct page *sec_page;
+	dma_addr_t sec_addr;
+};
+
+struct stmmac_flow_entry {
+	long unsigned int cookie;
+	long unsigned int action;
+	u8 ip_proto;
+	int in_use;
+	int idx;
+	int is_l4;
+};
+
+struct stmmac_rfs_entry {
+	long unsigned int cookie;
+	u16 etype;
+	int in_use;
+	int type;
+	int tc;
+};
+
+enum dma_irq_status {
+	tx_hard_error = 1,
+	tx_hard_error_bump_tc = 2,
+	handle_rx = 4,
+	handle_tx = 8,
+};
+
+enum dma_irq_dir {
+	DMA_DIR_RX = 1,
+	DMA_DIR_TX = 2,
+	DMA_DIR_RXTX = 3,
+};
+
+enum ttc_control {
+	DMA_CONTROL_TTC_DEFAULT = 0,
+	DMA_CONTROL_TTC_64 = 16384,
+	DMA_CONTROL_TTC_128 = 32768,
+	DMA_CONTROL_TTC_256 = 49152,
+	DMA_CONTROL_TTC_18 = 4194304,
+	DMA_CONTROL_TTC_24 = 4210688,
+	DMA_CONTROL_TTC_32 = 4227072,
+	DMA_CONTROL_TTC_40 = 4243456,
+	DMA_CONTROL_SE = 8,
+	DMA_CONTROL_OSF = 4,
+};
+
+struct pps_event_time {
+	struct timespec64 ts_real;
+};
+
+enum ptp_clock_events {
+	PTP_CLOCK_ALARM = 0,
+	PTP_CLOCK_EXTTS = 1,
+	PTP_CLOCK_PPS = 2,
+	PTP_CLOCK_PPSUSR = 3,
+};
+
+struct ptp_clock_event {
+	int type;
+	int index;
+	union {
+		u64 timestamp;
+		struct pps_event_time pps_times;
+	};
+};
+
+enum stmmac_rfs_type {
+	STMMAC_RFS_T_VLAN = 0,
+	STMMAC_RFS_T_LLDP = 1,
+	STMMAC_RFS_T_1588 = 2,
+	STMMAC_RFS_T_MAX = 3,
+};
+
+enum {
+	TC_TAPRIO_CMD_SET_GATES = 0,
+	TC_TAPRIO_CMD_SET_AND_HOLD = 1,
+	TC_TAPRIO_CMD_SET_AND_RELEASE = 2,
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+struct tc_u32_key {
+	__be32 mask;
+	__be32 val;
+	int off;
+	int offmask;
+};
+
+struct tc_u32_sel {
+	unsigned char flags;
+	unsigned char offshift;
+	unsigned char nkeys;
+	__be16 offmask;
+	__u16 off;
+	short int offoff;
+	short int hoff;
+	__be32 hmask;
+	struct tc_u32_key keys[0];
+};
+
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+};
+
+struct flow_dissector_key_vlan {
+	union {
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
+	};
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
+};
+
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector {
+	unsigned int used_keys;
+	short unsigned int offset[31];
+};
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		struct {
+			struct {			} __empty_ptr;
+			void *ptr[0];
+		};
+	};
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_RX_QUEUE_MAPPING = 19,
+	FLOW_ACTION_WAKE = 20,
+	FLOW_ACTION_QUEUE = 21,
+	FLOW_ACTION_SAMPLE = 22,
+	FLOW_ACTION_POLICE = 23,
+	FLOW_ACTION_CT = 24,
+	FLOW_ACTION_CT_METADATA = 25,
+	FLOW_ACTION_MPLS_PUSH = 26,
+	FLOW_ACTION_MPLS_POP = 27,
+	FLOW_ACTION_MPLS_MANGLE = 28,
+	FLOW_ACTION_GATE = 29,
+	FLOW_ACTION_PPPOE_PUSH = 30,
+	FLOW_ACTION_JUMP = 31,
+	FLOW_ACTION_PIPE = 32,
+	FLOW_ACTION_VLAN_PUSH_ETH = 33,
+	FLOW_ACTION_VLAN_POP_ETH = 34,
+	FLOW_ACTION_CONTINUE = 35,
+	NUM_FLOW_ACTIONS = 36,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+typedef void (*action_destr)(void *);
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct nf_flowtable;
+
+struct ip_tunnel_info;
+
+struct psample_group;
+
+struct action_gate_entry;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u16 rx_queue;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			long unsigned int cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *cookie;
+};
+
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+enum flow_cls_command {
+	FLOW_CLS_REPLACE = 0,
+	FLOW_CLS_DESTROY = 1,
+	FLOW_CLS_STATS = 2,
+	FLOW_CLS_TMPLT_CREATE = 3,
+	FLOW_CLS_TMPLT_DESTROY = 4,
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct flow_cls_offload {
+	struct flow_cls_common_offload common;
+	enum flow_cls_command command;
+	long unsigned int cookie;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	u32 classid;
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	long unsigned int cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tc_cbs_qopt_offload {
+	u8 enable;
+	s32 queue;
+	s32 hicredit;
+	s32 locredit;
+	s32 idleslope;
+	s32 sendslope;
+};
+
+struct tc_etf_qopt_offload {
+	u8 enable;
+	s32 queue;
+};
+
+struct tc_taprio_sched_entry {
+	u8 command;
+	u32 gate_mask;
+	u32 interval;
+};
+
+struct tc_taprio_qopt_offload {
+	u8 enable;
+	ktime_t base_time;
+	u64 cycle_time;
+	u64 cycle_time_extension;
+	u32 max_sdu[16];
+	size_t num_entries;
+	struct tc_taprio_sched_entry entries[0];
+};
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_action_ops;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_basic_sync *cpu_bstats_hw;
+	struct gnet_stats_queue *cpu_qstats;
+	struct tc_cookie *act_cookie;
+	struct tcf_chain *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	unsigned int net_id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	int action;
+	int police;
+};
+
+struct tc_cls_u32_knode {
+	struct tcf_exts *exts;
+	struct tcf_result *res;
+	struct tc_u32_sel *sel;
+	u32 handle;
+	u32 val;
+	u32 mask;
+	u32 link_handle;
+	u8 fshift;
+};
+
+struct tc_cls_u32_hnode {
+	u32 handle;
+	u32 prio;
+	unsigned int divisor;
+};
+
+enum tc_clsu32_command {
+	TC_CLSU32_NEW_KNODE = 0,
+	TC_CLSU32_REPLACE_KNODE = 1,
+	TC_CLSU32_DELETE_KNODE = 2,
+	TC_CLSU32_NEW_HNODE = 3,
+	TC_CLSU32_REPLACE_HNODE = 4,
+	TC_CLSU32_DELETE_HNODE = 5,
+};
+
+struct tc_cls_u32_offload {
+	struct flow_cls_common_offload common;
+	enum tc_clsu32_command command;
+	union {
+		struct tc_cls_u32_knode knode;
+		struct tc_cls_u32_hnode hnode;
+	};
+};
+
+struct tcf_gact {
+	struct tc_action common;
+	u16 tcfg_ptype;
+	u16 tcfg_pval;
+	int tcfg_paction;
+	atomic_t packets;
+};
+
+enum packets_types {
+	PACKET_AVCPQ = 1,
+	PACKET_PTPQ = 2,
+	PACKET_DCBCPQ = 3,
+	PACKET_UPQ = 4,
+	PACKET_MCBCQ = 5,
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct xdp_umem;
+
+struct xsk_queue;
+
+struct xdp_buff_xsk;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block *head;
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	__le32 bmSublinkSpeedAttr[1];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	char: 8;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	int: 32;
+} __attribute__((packed));
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+};
+
+struct usb_devmap {
+	long unsigned int devicemap[2];
+};
+
+struct mon_bus;
+
+struct usb_device;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+};
+
+struct wusb_dev;
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	short unsigned int bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int wusb: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	long unsigned int active_duration;
+	long unsigned int connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	struct wusb_dev *wusb_dev;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+};
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct usb_phy_roothub;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct gen_pool;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	long unsigned int flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int wireless: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	long unsigned int hcd_priv[0];
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, bool);
+	int (*pci_poweroff_late)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+struct extcon_dev;
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy_io_ops;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+};
+
+typedef u32 usb_port_location_t;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	long unsigned int event_bits[1];
+	long unsigned int change_bits[1];
+	long unsigned int removed_bits[1];
+	long unsigned int wakeup_bits[1];
+	long unsigned int power_bits[1];
+	long unsigned int child_usage_bits[1];
+	long unsigned int warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int early_stop: 1;
+	unsigned int ignore_event: 1;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+typedef __u32 __hc32;
+
+typedef __u16 __hc16;
+
+struct td;
+
+struct ed {
+	__hc32 hwINFO;
+	__hc32 hwTailP;
+	__hc32 hwHeadP;
+	__hc32 hwNextED;
+	dma_addr_t dma;
+	struct td *dummy;
+	struct ed *ed_next;
+	struct ed *ed_prev;
+	struct list_head td_list;
+	struct list_head in_use_list;
+	u8 state;
+	u8 type;
+	u8 branch;
+	u16 interval;
+	u16 load;
+	u16 last_iso;
+	u16 tick;
+	unsigned int takeback_wdh_cnt;
+	struct td *pending_td;
+	long: 64;
+};
+
+struct td {
+	__hc32 hwINFO;
+	__hc32 hwCBP;
+	__hc32 hwNextTD;
+	__hc32 hwBE;
+	__hc16 hwPSW[2];
+	__u8 index;
+	struct ed *ed;
+	struct td *td_hash;
+	struct td *next_dl_td;
+	struct urb *urb;
+	dma_addr_t td_dma;
+	dma_addr_t data_dma;
+	struct list_head td_list;
+	long: 64;
+};
+
+struct ohci_hcca {
+	__hc32 int_table[32];
+	__hc32 frame_no;
+	__hc32 done_head;
+	u8 reserved_for_hc[116];
+	u8 what[4];
+};
+
+struct ohci_roothub_regs {
+	__hc32 a;
+	__hc32 b;
+	__hc32 status;
+	__hc32 portstatus[15];
+};
+
+struct ohci_regs {
+	__hc32 revision;
+	__hc32 control;
+	__hc32 cmdstatus;
+	__hc32 intrstatus;
+	__hc32 intrenable;
+	__hc32 intrdisable;
+	__hc32 hcca;
+	__hc32 ed_periodcurrent;
+	__hc32 ed_controlhead;
+	__hc32 ed_controlcurrent;
+	__hc32 ed_bulkhead;
+	__hc32 ed_bulkcurrent;
+	__hc32 donehead;
+	__hc32 fminterval;
+	__hc32 fmremaining;
+	__hc32 fmnumber;
+	__hc32 periodicstart;
+	__hc32 lsthresh;
+	struct ohci_roothub_regs roothub;
+	long: 64;
+	long: 64;
+};
+
+enum ohci_rh_state {
+	OHCI_RH_HALTED = 0,
+	OHCI_RH_SUSPENDED = 1,
+	OHCI_RH_RUNNING = 2,
+};
+
+struct ohci_hcd {
+	spinlock_t lock;
+	struct ohci_regs *regs;
+	struct ohci_hcca *hcca;
+	dma_addr_t hcca_dma;
+	struct ed *ed_rm_list;
+	struct ed *ed_bulktail;
+	struct ed *ed_controltail;
+	struct ed *periodic[32];
+	void (*start_hnp)(struct ohci_hcd *);
+	struct dma_pool *td_cache;
+	struct dma_pool *ed_cache;
+	struct td *td_hash[64];
+	struct td *dl_start;
+	struct td *dl_end;
+	struct list_head pending;
+	struct list_head eds_in_use;
+	enum ohci_rh_state rh_state;
+	int num_ports;
+	int load[32];
+	u32 hc_control;
+	long unsigned int next_statechange;
+	u32 fminterval;
+	unsigned int autostop: 1;
+	unsigned int working: 1;
+	unsigned int restart_work: 1;
+	long unsigned int flags;
+	unsigned int prev_frame_no;
+	unsigned int wdh_cnt;
+	unsigned int prev_wdh_cnt;
+	u32 prev_donehead;
+	struct timer_list io_watchdog;
+	struct work_struct nec_work;
+	struct dentry *debug_dir;
+	long unsigned int priv[0];
+};
+
+struct ohci_driver_overrides {
+	const char *product_desc;
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+union xhci_trb;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_ring;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+struct xhci_segment;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int num_trbs_free_temp;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_virt_device;
+
+struct xhci_hcd;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int err_count;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	long unsigned int flags;
+	u16 current_mel;
+	void *debugfs_private;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+	u32 irq_pending;
+	u32 irq_control;
+	u32 erst_size;
+	u64 erst_base;
+	u64 erst_dequeue;
+};
+
+struct xhci_bus_state {
+	long unsigned int bus_suspended;
+	long unsigned int next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	long unsigned int resume_done[31];
+	long unsigned int resuming_ports;
+	long unsigned int rexit_ports;
+	struct completion rexit_done[31];
+	struct completion u3exit_done[31];
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_device_context_array;
+
+struct xhci_scratchpad;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	struct xhci_intr_reg *ir_set;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u8 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	u32 isoc_bei_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_scratchpad *scratchpad;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool *device_pool;
+	struct dma_pool *segment_pool;
+	struct dma_pool *small_streams_pool;
+	struct dma_pool *medium_streams_pool;
+	unsigned int xhc_state;
+	long unsigned int run_graceperiod;
+	struct s3_save s3;
+	long long unsigned int quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	long unsigned int priv[0];
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	unsigned int num_trbs;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct urb_priv {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+	unsigned int lpm_incapable: 1;
+};
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct xhci_dbc;
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	int slot_id;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_doorbell {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct async_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 tx;
+	__u32 rx;
+	__u32 frame;
+	__u32 parity;
+	__u32 overrun;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+struct usb_serial;
+
+struct usb_serial_port {
+	struct usb_serial *serial;
+	struct tty_port port;
+	spinlock_t lock;
+	u32 minor;
+	u8 port_number;
+	unsigned char *interrupt_in_buffer;
+	struct urb *interrupt_in_urb;
+	__u8 interrupt_in_endpointAddress;
+	unsigned char *interrupt_out_buffer;
+	int interrupt_out_size;
+	struct urb *interrupt_out_urb;
+	__u8 interrupt_out_endpointAddress;
+	unsigned char *bulk_in_buffer;
+	int bulk_in_size;
+	struct urb *read_urb;
+	__u8 bulk_in_endpointAddress;
+	unsigned char *bulk_in_buffers[2];
+	struct urb *read_urbs[2];
+	long unsigned int read_urbs_free;
+	unsigned char *bulk_out_buffer;
+	int bulk_out_size;
+	struct urb *write_urb;
+	struct kfifo write_fifo;
+	unsigned char *bulk_out_buffers[2];
+	struct urb *write_urbs[2];
+	long unsigned int write_urbs_free;
+	__u8 bulk_out_endpointAddress;
+	struct async_icount icount;
+	int tx_bytes;
+	long unsigned int flags;
+	struct work_struct work;
+	long unsigned int sysrq;
+	struct device dev;
+};
+
+struct usb_serial_driver;
+
+struct usb_serial {
+	struct usb_device *dev;
+	struct usb_serial_driver *type;
+	struct usb_interface *interface;
+	struct usb_interface *sibling;
+	unsigned int suspend_count;
+	unsigned char disconnected: 1;
+	unsigned char attached: 1;
+	unsigned char minors_reserved: 1;
+	unsigned char num_ports;
+	unsigned char num_port_pointers;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	struct usb_serial_port *port[16];
+	struct kref kref;
+	struct mutex disc_mutex;
+	void *private;
+};
+
+struct usb_serial_endpoints;
+
+struct usb_serial_driver {
+	const char *description;
+	const struct usb_device_id *id_table;
+	struct list_head driver_list;
+	struct device_driver driver;
+	struct usb_driver *usb_driver;
+	struct usb_dynids dynids;
+	unsigned char num_ports;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	size_t bulk_in_size;
+	size_t bulk_out_size;
+	int (*probe)(struct usb_serial *, const struct usb_device_id *);
+	int (*attach)(struct usb_serial *);
+	int (*calc_num_ports)(struct usb_serial *, struct usb_serial_endpoints *);
+	void (*disconnect)(struct usb_serial *);
+	void (*release)(struct usb_serial *);
+	int (*port_probe)(struct usb_serial_port *);
+	void (*port_remove)(struct usb_serial_port *);
+	int (*suspend)(struct usb_serial *, pm_message_t);
+	int (*resume)(struct usb_serial *);
+	int (*reset_resume)(struct usb_serial *);
+	int (*open)(struct tty_struct *, struct usb_serial_port *);
+	void (*close)(struct usb_serial_port *);
+	int (*write)(struct tty_struct *, struct usb_serial_port *, const unsigned char *, int);
+	unsigned int (*write_room)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*set_termios)(struct tty_struct *, struct usb_serial_port *, const struct ktermios *);
+	void (*break_ctl)(struct tty_struct *, int);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, long int);
+	bool (*tx_empty)(struct usb_serial_port *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*tiocmiwait)(struct tty_struct *, long unsigned int);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	void (*dtr_rts)(struct usb_serial_port *, int);
+	int (*carrier_raised)(struct usb_serial_port *);
+	void (*init_termios)(struct tty_struct *);
+	void (*read_int_callback)(struct urb *);
+	void (*write_int_callback)(struct urb *);
+	void (*read_bulk_callback)(struct urb *);
+	void (*write_bulk_callback)(struct urb *);
+	void (*process_read_urb)(struct urb *);
+	int (*prepare_write_buffer)(struct usb_serial_port *, void *, size_t);
+};
+
+struct usb_serial_endpoints {
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	struct usb_endpoint_descriptor *bulk_in[16];
+	struct usb_endpoint_descriptor *bulk_out[16];
+	struct usb_endpoint_descriptor *interrupt_in[16];
+	struct usb_endpoint_descriptor *interrupt_out[16];
+};
+
+struct usbcons_info {
+	int magic;
+	int break_flag;
+	struct usb_serial_port *port;
+};
+
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+union input_seq_state {
+	struct {
+		short unsigned int pos;
+		bool mutex_acquired;
+	};
+	void *p;
+};
+
+struct input_devres {
+	struct input_dev *input;
+};
+
+struct input_mt_pos {
+	s16 x;
+	s16 y;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+};
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	long unsigned int flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+};
+
+enum psmouse_state {
+	PSMOUSE_IGNORE = 0,
+	PSMOUSE_INITIALIZING = 1,
+	PSMOUSE_RESYNCING = 2,
+	PSMOUSE_CMD_MODE = 3,
+	PSMOUSE_ACTIVATED = 4,
+};
+
+typedef enum {
+	PSMOUSE_BAD_DATA = 0,
+	PSMOUSE_GOOD_DATA = 1,
+	PSMOUSE_FULL_PACKET = 2,
+} psmouse_ret_t;
+
+enum psmouse_scale {
+	PSMOUSE_SCALE11 = 0,
+	PSMOUSE_SCALE21 = 1,
+};
+
+enum psmouse_type {
+	PSMOUSE_NONE = 0,
+	PSMOUSE_PS2 = 1,
+	PSMOUSE_PS2PP = 2,
+	PSMOUSE_THINKPS = 3,
+	PSMOUSE_GENPS = 4,
+	PSMOUSE_IMPS = 5,
+	PSMOUSE_IMEX = 6,
+	PSMOUSE_SYNAPTICS = 7,
+	PSMOUSE_ALPS = 8,
+	PSMOUSE_LIFEBOOK = 9,
+	PSMOUSE_TRACKPOINT = 10,
+	PSMOUSE_TOUCHKIT_PS2 = 11,
+	PSMOUSE_CORTRON = 12,
+	PSMOUSE_HGPK = 13,
+	PSMOUSE_ELANTECH = 14,
+	PSMOUSE_FSP = 15,
+	PSMOUSE_SYNAPTICS_RELATIVE = 16,
+	PSMOUSE_CYPRESS = 17,
+	PSMOUSE_FOCALTECH = 18,
+	PSMOUSE_VMMOUSE = 19,
+	PSMOUSE_BYD = 20,
+	PSMOUSE_SYNAPTICS_SMBUS = 21,
+	PSMOUSE_ELANTECH_SMBUS = 22,
+	PSMOUSE_AUTO = 23,
+};
+
+struct psmouse;
+
+struct psmouse_protocol {
+	enum psmouse_type type;
+	bool maxproto;
+	bool ignore_parity;
+	bool try_passthru;
+	bool smbus_companion;
+	const char *name;
+	const char *alias;
+	int (*detect)(struct psmouse *, bool);
+	int (*init)(struct psmouse *);
+};
+
+struct psmouse {
+	void *private;
+	struct input_dev *dev;
+	struct ps2dev ps2dev;
+	struct delayed_work resync_work;
+	const char *vendor;
+	const char *name;
+	const struct psmouse_protocol *protocol;
+	unsigned char packet[8];
+	unsigned char badbyte;
+	unsigned char pktcnt;
+	unsigned char pktsize;
+	unsigned char oob_data_type;
+	unsigned char extra_buttons;
+	bool acks_disable_command;
+	unsigned int model;
+	long unsigned int last;
+	long unsigned int out_of_sync_cnt;
+	long unsigned int num_resyncs;
+	enum psmouse_state state;
+	char devname[64];
+	char phys[32];
+	unsigned int rate;
+	unsigned int resolution;
+	unsigned int resetafter;
+	unsigned int resync_time;
+	bool smartscroll;
+	psmouse_ret_t (*protocol_handler)(struct psmouse *);
+	void (*set_rate)(struct psmouse *, unsigned int);
+	void (*set_resolution)(struct psmouse *, unsigned int);
+	void (*set_scale)(struct psmouse *, enum psmouse_scale);
+	int (*reconnect)(struct psmouse *);
+	int (*fast_reconnect)(struct psmouse *);
+	void (*disconnect)(struct psmouse *);
+	void (*cleanup)(struct psmouse *);
+	int (*poll)(struct psmouse *);
+	void (*pt_activate)(struct psmouse *);
+	void (*pt_deactivate)(struct psmouse *);
+};
+
+struct psmouse_attribute {
+	struct device_attribute dattr;
+	void *data;
+	ssize_t (*show)(struct psmouse *, void *, char *);
+	ssize_t (*set)(struct psmouse *, void *, const char *, size_t);
+	bool protect;
+};
+
+struct byd_data {
+	struct timer_list timer;
+	struct psmouse *psmouse;
+	s32 abs_x;
+	s32 abs_y;
+	volatile long unsigned int last_touch_time;
+	bool btn_left;
+	bool btn_right;
+	bool touch;
+};
+
+struct trackpoint_data {
+	u8 variant_id;
+	u8 firmware_id;
+	u8 sensitivity;
+	u8 speed;
+	u8 inertia;
+	u8 reach;
+	u8 draghys;
+	u8 mindrag;
+	u8 thresh;
+	u8 upthresh;
+	u8 ztime;
+	u8 jenks;
+	u8 drift_time;
+	bool press_to_select;
+	bool skipback;
+	bool ext_dev;
+};
+
+struct trackpoint_attr_data {
+	size_t field_offset;
+	u8 command;
+	u8 mask;
+	bool inverted;
+	u8 power_on_default;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct acpi_connection_info {
+	u8 *connection;
+	u16 length;
+	u8 access_length;
+};
+
+enum acpi_reconfig_event {
+	ACPI_RECONFIG_DEVICE_ADD = 0,
+	ACPI_RECONFIG_DEVICE_REMOVE = 1,
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+enum i2c_driver_flags {
+	I2C_DRV_ACPI_WAIVE_D0_PROBE = 1,
+};
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
+	void (*remove)(struct i2c_client *);
+	int (*probe_new)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const short unsigned int *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_acpi_handler_data {
+	struct acpi_connection_info info;
+	struct i2c_adapter *adapter;
+};
+
+struct gsb_buffer {
+	u8 status;
+	u8 len;
+	union {
+		u16 wdata;
+		u8 bdata;
+		struct {
+			struct {			} __empty_data;
+			u8 data[0];
+		};
+	};
+};
+
+struct i2c_acpi_lookup {
+	struct i2c_board_info *info;
+	acpi_handle adapter_handle;
+	acpi_handle device_handle;
+	acpi_handle search_handle;
+	int n;
+	int index;
+	u32 speed;
+	u32 min_speed;
+	u32 force_speed;
+};
+
+struct i2c_acpi_irq_context {
+	int irq;
+	bool wake_capable;
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+enum hwparam_type {
+	hwparam_ioport = 0,
+	hwparam_iomem = 1,
+	hwparam_ioport_or_iomem = 2,
+	hwparam_irq = 3,
+	hwparam_dma = 4,
+	hwparam_dma_addr = 5,
+	hwparam_other = 6,
+};
+
+struct sb800_mmio_cfg {
+	void *addr;
+	bool use_mmio;
+};
+
+struct i2c_piix4_adapdata {
+	short unsigned int smba;
+	bool sb800_main;
+	bool notify_imc;
+	u8 port;
+	struct sb800_mmio_cfg mmio_cfg;
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+};
+
+struct pps_ktime {
+	__s64 sec;
+	__s32 nsec;
+	__u32 flags;
+};
+
+struct pps_kparams {
+	int api_version;
+	int mode;
+	struct pps_ktime assert_off_tu;
+	struct pps_ktime clear_off_tu;
+};
+
+struct pps_device;
+
+struct pps_source_info {
+	char name[32];
+	char path[32];
+	int mode;
+	void (*echo)(struct pps_device *, int, void *);
+	struct module *owner;
+	struct device *dev;
+};
+
+struct pps_device {
+	struct pps_source_info info;
+	struct pps_kparams params;
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime assert_tu;
+	struct pps_ktime clear_tu;
+	int current_mode;
+	unsigned int last_ev;
+	wait_queue_head_t queue;
+	unsigned int id;
+	const void *lookup_cookie;
+	struct cdev cdev;
+	struct device *dev;
+	struct fasync_struct *async_queue;
+	spinlock_t lock;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+struct ptp_extts_event {
+	struct ptp_clock_time t;
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct timestamp_event_queue {
+	struct ptp_extts_event buf[128];
+	int head;
+	int tail;
+	spinlock_t lock;
+};
+
+struct ptp_clock {
+	struct posix_clock clock;
+	struct device dev;
+	struct ptp_clock_info *info;
+	dev_t devid;
+	int index;
+	struct pps_device *pps_source;
+	long int dialed_frequency;
+	struct timestamp_event_queue tsevq;
+	struct mutex tsevq_mux;
+	struct mutex pincfg_mux;
+	wait_queue_head_t tsev_wq;
+	int defunct;
+	struct device_attribute *pin_dev_attr;
+	struct attribute **pin_attr;
+	struct attribute_group pin_attr_group;
+	const struct attribute_group *pin_attr_groups[2];
+	struct kthread_worker *kworker;
+	struct kthread_delayed_work aux_work;
+	unsigned int max_vclocks;
+	unsigned int n_vclocks;
+	int *vclock_index;
+	struct mutex n_vclocks_mux;
+	bool is_virtual_clock;
+	bool has_cycles;
+};
+
+struct ptp_vclock {
+	struct ptp_clock *pclock;
+	struct ptp_clock_info info;
+	struct ptp_clock *clock;
+	struct hlist_node vclock_hash_node;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	spinlock_t lock;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+struct led_pattern;
+
+struct led_trigger;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	int flags;
+	long unsigned int work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	long unsigned int blink_delay_on;
+	long unsigned int blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	int brightness_hw_changed;
+	struct kernfs_node *brightness_hw_changed_kn;
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+enum power_supply_notifier_events {
+	PSY_EVENT_PROP_CHANGED = 0,
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+};
+
+struct power_supply;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+};
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
+	struct device dev;
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_attr;
+
+struct thermal_trip;
+
+struct thermal_zone_device_ops;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	struct thermal_trip *trips;
+	int num_trips;
+	long unsigned int trips_disabled;
+	long unsigned int passive_delay_jiffies;
+	long unsigned int polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+};
+
+struct power_supply_battery_ocv_table {
+	int ocv;
+	int capacity;
+};
+
+struct power_supply_resistance_temp_table {
+	int temp;
+	int resistance;
+};
+
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
+struct power_supply_battery_info {
+	unsigned int technology;
+	int energy_full_design_uwh;
+	int charge_full_design_uah;
+	int voltage_min_design_uv;
+	int voltage_max_design_uv;
+	int tricklecharge_current_ua;
+	int precharge_current_ua;
+	int precharge_voltage_max_uv;
+	int charge_term_current_ua;
+	int charge_restart_voltage_uv;
+	int overvoltage_limit_uv;
+	int constant_charge_current_max_ua;
+	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
+	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
+	int ocv_temp[20];
+	int temp_ambient_alert_min;
+	int temp_ambient_alert_max;
+	int temp_alert_min;
+	int temp_alert_max;
+	int temp_min;
+	int temp_max;
+	struct power_supply_battery_ocv_table *ocv_table[20];
+	int ocv_table_size[20];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+};
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
+	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+};
+
+struct thermal_trip {
+	int temperature;
+	int hysteresis;
+	enum thermal_trip_type type;
+};
+
+struct thermal_bind_params;
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	int num_tbps;
+	struct thermal_bind_params *tbp;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+};
+
+struct thermal_bind_params {
+	struct thermal_cooling_device *cdev;
+	int weight;
+	int trip_mask;
+	long unsigned int *binding_limits;
+	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
+};
+
+struct psy_am_i_supplied_data {
+	struct power_supply *psy;
+	unsigned int count;
+};
+
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
+};
+
+enum hwmon_sensor_types {
+	hwmon_chip = 0,
+	hwmon_temp = 1,
+	hwmon_in = 2,
+	hwmon_curr = 3,
+	hwmon_power = 4,
+	hwmon_energy = 5,
+	hwmon_humidity = 6,
+	hwmon_fan = 7,
+	hwmon_pwm = 8,
+	hwmon_intrusion = 9,
+	hwmon_max = 10,
+};
+
+enum hwmon_chip_attributes {
+	hwmon_chip_temp_reset_history = 0,
+	hwmon_chip_in_reset_history = 1,
+	hwmon_chip_curr_reset_history = 2,
+	hwmon_chip_power_reset_history = 3,
+	hwmon_chip_register_tz = 4,
+	hwmon_chip_update_interval = 5,
+	hwmon_chip_alarms = 6,
+	hwmon_chip_samples = 7,
+	hwmon_chip_curr_samples = 8,
+	hwmon_chip_in_samples = 9,
+	hwmon_chip_power_samples = 10,
+	hwmon_chip_temp_samples = 11,
+};
+
+enum hwmon_temp_attributes {
+	hwmon_temp_enable = 0,
+	hwmon_temp_input = 1,
+	hwmon_temp_type = 2,
+	hwmon_temp_lcrit = 3,
+	hwmon_temp_lcrit_hyst = 4,
+	hwmon_temp_min = 5,
+	hwmon_temp_min_hyst = 6,
+	hwmon_temp_max = 7,
+	hwmon_temp_max_hyst = 8,
+	hwmon_temp_crit = 9,
+	hwmon_temp_crit_hyst = 10,
+	hwmon_temp_emergency = 11,
+	hwmon_temp_emergency_hyst = 12,
+	hwmon_temp_alarm = 13,
+	hwmon_temp_lcrit_alarm = 14,
+	hwmon_temp_min_alarm = 15,
+	hwmon_temp_max_alarm = 16,
+	hwmon_temp_crit_alarm = 17,
+	hwmon_temp_emergency_alarm = 18,
+	hwmon_temp_fault = 19,
+	hwmon_temp_offset = 20,
+	hwmon_temp_label = 21,
+	hwmon_temp_lowest = 22,
+	hwmon_temp_highest = 23,
+	hwmon_temp_reset_history = 24,
+	hwmon_temp_rated_min = 25,
+	hwmon_temp_rated_max = 26,
+};
+
+enum hwmon_in_attributes {
+	hwmon_in_enable = 0,
+	hwmon_in_input = 1,
+	hwmon_in_min = 2,
+	hwmon_in_max = 3,
+	hwmon_in_lcrit = 4,
+	hwmon_in_crit = 5,
+	hwmon_in_average = 6,
+	hwmon_in_lowest = 7,
+	hwmon_in_highest = 8,
+	hwmon_in_reset_history = 9,
+	hwmon_in_label = 10,
+	hwmon_in_alarm = 11,
+	hwmon_in_min_alarm = 12,
+	hwmon_in_max_alarm = 13,
+	hwmon_in_lcrit_alarm = 14,
+	hwmon_in_crit_alarm = 15,
+	hwmon_in_rated_min = 16,
+	hwmon_in_rated_max = 17,
+};
+
+enum hwmon_curr_attributes {
+	hwmon_curr_enable = 0,
+	hwmon_curr_input = 1,
+	hwmon_curr_min = 2,
+	hwmon_curr_max = 3,
+	hwmon_curr_lcrit = 4,
+	hwmon_curr_crit = 5,
+	hwmon_curr_average = 6,
+	hwmon_curr_lowest = 7,
+	hwmon_curr_highest = 8,
+	hwmon_curr_reset_history = 9,
+	hwmon_curr_label = 10,
+	hwmon_curr_alarm = 11,
+	hwmon_curr_min_alarm = 12,
+	hwmon_curr_max_alarm = 13,
+	hwmon_curr_lcrit_alarm = 14,
+	hwmon_curr_crit_alarm = 15,
+	hwmon_curr_rated_min = 16,
+	hwmon_curr_rated_max = 17,
+};
+
+enum hwmon_power_attributes {
+	hwmon_power_enable = 0,
+	hwmon_power_average = 1,
+	hwmon_power_average_interval = 2,
+	hwmon_power_average_interval_max = 3,
+	hwmon_power_average_interval_min = 4,
+	hwmon_power_average_highest = 5,
+	hwmon_power_average_lowest = 6,
+	hwmon_power_average_max = 7,
+	hwmon_power_average_min = 8,
+	hwmon_power_input = 9,
+	hwmon_power_input_highest = 10,
+	hwmon_power_input_lowest = 11,
+	hwmon_power_reset_history = 12,
+	hwmon_power_accuracy = 13,
+	hwmon_power_cap = 14,
+	hwmon_power_cap_hyst = 15,
+	hwmon_power_cap_max = 16,
+	hwmon_power_cap_min = 17,
+	hwmon_power_min = 18,
+	hwmon_power_max = 19,
+	hwmon_power_crit = 20,
+	hwmon_power_lcrit = 21,
+	hwmon_power_label = 22,
+	hwmon_power_alarm = 23,
+	hwmon_power_cap_alarm = 24,
+	hwmon_power_min_alarm = 25,
+	hwmon_power_max_alarm = 26,
+	hwmon_power_lcrit_alarm = 27,
+	hwmon_power_crit_alarm = 28,
+	hwmon_power_rated_min = 29,
+	hwmon_power_rated_max = 30,
+};
+
+enum hwmon_energy_attributes {
+	hwmon_energy_enable = 0,
+	hwmon_energy_input = 1,
+	hwmon_energy_label = 2,
+};
+
+enum hwmon_humidity_attributes {
+	hwmon_humidity_enable = 0,
+	hwmon_humidity_input = 1,
+	hwmon_humidity_label = 2,
+	hwmon_humidity_min = 3,
+	hwmon_humidity_min_hyst = 4,
+	hwmon_humidity_max = 5,
+	hwmon_humidity_max_hyst = 6,
+	hwmon_humidity_alarm = 7,
+	hwmon_humidity_fault = 8,
+	hwmon_humidity_rated_min = 9,
+	hwmon_humidity_rated_max = 10,
+};
+
+enum hwmon_fan_attributes {
+	hwmon_fan_enable = 0,
+	hwmon_fan_input = 1,
+	hwmon_fan_label = 2,
+	hwmon_fan_min = 3,
+	hwmon_fan_max = 4,
+	hwmon_fan_div = 5,
+	hwmon_fan_pulses = 6,
+	hwmon_fan_target = 7,
+	hwmon_fan_alarm = 8,
+	hwmon_fan_min_alarm = 9,
+	hwmon_fan_max_alarm = 10,
+	hwmon_fan_fault = 11,
+};
+
+enum hwmon_pwm_attributes {
+	hwmon_pwm_input = 0,
+	hwmon_pwm_enable = 1,
+	hwmon_pwm_mode = 2,
+	hwmon_pwm_freq = 3,
+	hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+	hwmon_intrusion_alarm = 0,
+	hwmon_intrusion_beep = 1,
+};
+
+struct hwmon_ops {
+	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+	enum hwmon_sensor_types type;
+	const u32 *config;
+};
+
+struct hwmon_chip_info {
+	const struct hwmon_ops *ops;
+	const struct hwmon_channel_info **info;
+};
+
+struct trace_event_raw_hwmon_attr_class {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	long int val;
+	char __data[0];
+};
+
+struct trace_event_raw_hwmon_attr_show_string {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	u32 __data_loc_label;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hwmon_attr_class {
+	u32 attr_name;
+};
+
+struct trace_event_data_offsets_hwmon_attr_show_string {
+	u32 attr_name;
+	u32 label;
+};
+
+typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
+
+struct hwmon_device {
+	const char *name;
+	const char *label;
+	struct device dev;
+	const struct hwmon_chip_info *chip;
+	struct list_head tzdata;
+	struct attribute_group group;
+	const struct attribute_group **groups;
+};
+
+struct hwmon_device_attribute {
+	struct device_attribute dev_attr;
+	const struct hwmon_ops *ops;
+	enum hwmon_sensor_types type;
+	u32 attr;
+	int index;
+	char name[32];
+};
+
+struct hwmon_thermal_data {
+	struct list_head node;
+	struct device *dev;
+	int index;
+	struct thermal_zone_device *tzd;
+};
+
+struct thermal_attr {
+	struct device_attribute attr;
+	char name[20];
+};
+
+struct thermal_instance {
+	int id;
+	char name[20];
+	struct thermal_zone_device *tz;
+	struct thermal_cooling_device *cdev;
+	int trip;
+	bool initialized;
+	long unsigned int upper;
+	long unsigned int lower;
+	long unsigned int target;
+	char attr_name[20];
+	struct device_attribute attr;
+	char weight_attr_name[20];
+	struct device_attribute weight_attr;
+	struct list_head tz_node;
+	struct list_head cdev_node;
+	unsigned int weight;
+};
+
+struct dev_pm_opp_supply {
+	long unsigned int u_volt;
+	long unsigned int u_volt_min;
+	long unsigned int u_volt_max;
+	long unsigned int u_amp;
+	long unsigned int u_watt;
+};
+
+struct dev_pm_opp_icc_bw {
+	u32 avg;
+	u32 peak;
+};
+
+struct dev_pm_opp;
+
+typedef int (*config_regulators_t)(struct device *, struct dev_pm_opp *, struct dev_pm_opp *, struct regulator **, unsigned int);
+
+struct opp_table;
+
+struct dev_pm_opp {
+	struct list_head node;
+	struct kref kref;
+	bool available;
+	bool dynamic;
+	bool turbo;
+	bool suspend;
+	bool removed;
+	unsigned int pstate;
+	long unsigned int *rates;
+	unsigned int level;
+	struct dev_pm_opp_supply *supplies;
+	struct dev_pm_opp_icc_bw *bandwidth;
+	long unsigned int clock_latency_ns;
+	struct dev_pm_opp **required_opps;
+	struct opp_table *opp_table;
+	struct device_node *np;
+	struct dentry *dentry;
+	const char *of_name;
+};
+
+typedef int (*config_clks_t)(struct device *, struct opp_table *, struct dev_pm_opp *, void *, bool);
+
+enum opp_table_access {
+	OPP_TABLE_ACCESS_UNKNOWN = 0,
+	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
+	OPP_TABLE_ACCESS_SHARED = 2,
+};
+
+struct icc_path;
+
+struct opp_table {
+	struct list_head node;
+	struct list_head lazy;
+	struct blocking_notifier_head head;
+	struct list_head dev_list;
+	struct list_head opp_list;
+	struct kref kref;
+	struct mutex lock;
+	struct device_node *np;
+	long unsigned int clock_latency_ns_max;
+	unsigned int voltage_tolerance_v1;
+	unsigned int parsed_static_opps;
+	enum opp_table_access shared_opp;
+	long unsigned int rate_clk_single;
+	struct dev_pm_opp *current_opp;
+	struct dev_pm_opp *suspend_opp;
+	struct mutex genpd_virt_dev_lock;
+	struct device **genpd_virt_devs;
+	struct opp_table **required_opp_tables;
+	unsigned int required_opp_count;
+	unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char *prop_name;
+	config_clks_t config_clks;
+	struct clk **clks;
+	struct clk *clk;
+	int clk_count;
+	config_regulators_t config_regulators;
+	struct regulator **regulators;
+	int regulator_count;
+	struct icc_path **paths;
+	unsigned int path_count;
+	bool enabled;
+	bool genpd_performance_state;
+	bool is_genpd;
+	struct dentry *dentry;
+	char dentry_name[255];
+};
+
+struct opp_device {
+	struct list_head node;
+	const struct device *dev;
+	struct dentry *dentry;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+enum dmi_entry_type {
+	DMI_ENTRY_BIOS = 0,
+	DMI_ENTRY_SYSTEM = 1,
+	DMI_ENTRY_BASEBOARD = 2,
+	DMI_ENTRY_CHASSIS = 3,
+	DMI_ENTRY_PROCESSOR = 4,
+	DMI_ENTRY_MEM_CONTROLLER = 5,
+	DMI_ENTRY_MEM_MODULE = 6,
+	DMI_ENTRY_CACHE = 7,
+	DMI_ENTRY_PORT_CONNECTOR = 8,
+	DMI_ENTRY_SYSTEM_SLOT = 9,
+	DMI_ENTRY_ONBOARD_DEVICE = 10,
+	DMI_ENTRY_OEMSTRINGS = 11,
+	DMI_ENTRY_SYSCONF = 12,
+	DMI_ENTRY_BIOS_LANG = 13,
+	DMI_ENTRY_GROUP_ASSOC = 14,
+	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
+	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
+	DMI_ENTRY_MEM_DEVICE = 17,
+	DMI_ENTRY_32_MEM_ERROR = 18,
+	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
+	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
+	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
+	DMI_ENTRY_PORTABLE_BATTERY = 22,
+	DMI_ENTRY_SYSTEM_RESET = 23,
+	DMI_ENTRY_HW_SECURITY = 24,
+	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
+	DMI_ENTRY_VOLTAGE_PROBE = 26,
+	DMI_ENTRY_COOLING_DEV = 27,
+	DMI_ENTRY_TEMP_PROBE = 28,
+	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
+	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
+	DMI_ENTRY_BIS_ENTRY = 31,
+	DMI_ENTRY_SYSTEM_BOOT = 32,
+	DMI_ENTRY_MGMT_DEV = 33,
+	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
+	DMI_ENTRY_MGMT_DEV_THRES = 35,
+	DMI_ENTRY_MEM_CHANNEL = 36,
+	DMI_ENTRY_IPMI_DEV = 37,
+	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
+	DMI_ENTRY_ADDITIONAL = 39,
+	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
+	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
+	DMI_ENTRY_INACTIVE = 126,
+	DMI_ENTRY_END_OF_TABLE = 127,
+};
+
+struct dmi_sysfs_entry {
+	struct dmi_header dh;
+	struct kobject kobj;
+	int instance;
+	int position;
+	struct list_head list;
+	struct kobject *child;
+};
+
+struct dmi_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dmi_sysfs_entry *, char *);
+};
+
+struct dmi_sysfs_mapped_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dmi_sysfs_entry *, const struct dmi_header *, char *);
+};
+
+typedef ssize_t (*dmi_callback)(struct dmi_sysfs_entry *, const struct dmi_header *, void *);
+
+struct find_dmi_data {
+	struct dmi_sysfs_entry *entry;
+	dmi_callback callback;
+	void *private;
+	int instance_countdown;
+	ssize_t ret;
+};
+
+struct dmi_read_state {
+	char *buf;
+	loff_t pos;
+	size_t count;
+};
+
+struct dmi_entry_attr_show_data {
+	struct attribute *attr;
+	char *buf;
+};
+
+struct dmi_system_event_log {
+	struct dmi_header header;
+	u16 area_length;
+	u16 header_start_offset;
+	u16 data_start_offset;
+	u8 access_method;
+	u8 status;
+	u32 change_token;
+	union {
+		struct {
+			u16 index_addr;
+			u16 data_addr;
+		} io;
+		u32 phys_addr32;
+		u16 gpnv_handle;
+		u32 access_method_address;
+	};
+	u8 header_format;
+	u8 type_descriptors_supported_count;
+	u8 per_log_type_descriptor_length;
+	u8 supported_log_type_descriptos[0];
+} __attribute__((packed));
+
+typedef u8 (*sel_io_reader)(const struct dmi_system_event_log *, loff_t);
+
+typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 table;
+} efi_config_table_32_t;
+
+typedef union {
+	struct {
+		efi_guid_t guid;
+		void *table;
+	};
+	efi_config_table_32_t mixed_mode;
+} efi_config_table_t;
+
+typedef struct {
+	efi_guid_t guid;
+	long unsigned int *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+typedef struct {
+	u16 version;
+	u16 length;
+	u32 runtime_services_supported;
+} efi_rt_properties_table_t;
+
+struct efivar_operations {
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_store_t *query_variable_store;
+};
+
+struct efivars {
+	struct kset *kset;
+	struct kobject *kobject;
+	const struct efivar_operations *ops;
+};
+
+struct linux_efi_random_seed {
+	u32 size;
+	u8 bits[0];
+};
+
+struct linux_efi_memreserve {
+	int size;
+	atomic_t count;
+	phys_addr_t next;
+	struct {
+		phys_addr_t base;
+		phys_addr_t size;
+	} entry[0];
+};
+
+struct linux_efi_initrd {
+	long unsigned int base;
+	long unsigned int size;
+};
+
+struct linux_efi_tpm_eventlog {
+	u32 size;
+	u32 final_events_preboot_size;
+	u8 version;
+	u8 log[0];
+};
+
+struct efi_tcg2_final_events_table {
+	u64 version;
+	u64 nr_events;
+	u8 events[0];
+};
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+enum tpm_duration {
+	TPM_SHORT = 0,
+	TPM_MEDIUM = 1,
+	TPM_LONG = 2,
+	TPM_LONG_LONG = 3,
+	TPM_UNDEFINED = 4,
+	TPM_NUM_DURATIONS = 4,
+};
+
+enum tcpa_event_types {
+	PREBOOT = 0,
+	POST_CODE = 1,
+	UNUSED = 2,
+	NO_ACTION = 3,
+	SEPARATOR = 4,
+	ACTION = 5,
+	EVENT_TAG = 6,
+	SCRTM_CONTENTS = 7,
+	SCRTM_VERSION = 8,
+	CPU_MICROCODE = 9,
+	PLATFORM_CONFIG_FLAGS = 10,
+	TABLE_OF_DEVICES = 11,
+	COMPACT_HASH = 12,
+	IPL = 13,
+	IPL_PARTITION_DATA = 14,
+	NONHOST_CODE = 15,
+	NONHOST_CONFIG = 16,
+	NONHOST_INFO = 17,
+};
+
+struct tcg_efi_specid_event_algs {
+	u16 alg_id;
+	u16 digest_size;
+};
+
+struct tcg_efi_specid_event_head {
+	u8 signature[16];
+	u32 platform_class;
+	u8 spec_version_minor;
+	u8 spec_version_major;
+	u8 spec_errata;
+	u8 uintnsize;
+	u32 num_algs;
+	struct tcg_efi_specid_event_algs digest_sizes[0];
+};
+
+struct tcg_pcr_event {
+	u32 pcr_idx;
+	u32 event_type;
+	u8 digest[20];
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_event_field {
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_pcr_event2_head {
+	u32 pcr_idx;
+	u32 event_type;
+	u32 count;
+	struct tpm_digest digests[0];
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+};
+
+struct efi_runtime_work {
+	void *arg1;
+	void *arg2;
+	void *arg3;
+	void *arg4;
+	void *arg5;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+};
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+enum {
+	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+	POWER_SUPPLY_SCOPE_SYSTEM = 1,
+	POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+enum hid_report_type {
+	HID_INPUT_REPORT = 0,
+	HID_OUTPUT_REPORT = 1,
+	HID_FEATURE_REPORT = 2,
+	HID_REPORT_TYPES = 3,
+};
+
+enum hid_class_request {
+	HID_REQ_GET_REPORT = 1,
+	HID_REQ_GET_IDLE = 2,
+	HID_REQ_GET_PROTOCOL = 3,
+	HID_REQ_SET_REPORT = 9,
+	HID_REQ_SET_IDLE = 10,
+	HID_REQ_SET_PROTOCOL = 11,
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_report;
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_field_entry;
+
+struct hid_device;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	enum hid_report_type type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	bool registered;
+	struct list_head reports;
+	unsigned int application;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+enum hid_battery_status {
+	HID_BATTERY_UNKNOWN = 0,
+	HID_BATTERY_QUERIED = 1,
+	HID_BATTERY_REPORTED = 2,
+};
+
+struct hid_driver;
+
+struct hid_ll_driver;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	struct power_supply *battery;
+	__s32 battery_capacity;
+	__s32 battery_min;
+	__s32 battery_max;
+	__s32 battery_report_type;
+	__s32 battery_report_id;
+	enum hid_battery_status battery_status;
+	bool battery_avoid_query;
+	ktime_t battery_ratelimit_time;
+	long unsigned int status;
+	unsigned int claimed;
+	unsigned int quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	short unsigned int debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+	unsigned int id;
+};
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	int (*suspend)(struct hid_device *, pm_message_t);
+	int (*resume)(struct hid_device *);
+	int (*reset_resume)(struct hid_device *);
+	struct device_driver driver;
+};
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct of_reconfig_data {
+	struct device_node *dn;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+enum of_reconfig_change {
+	OF_RECONFIG_NO_CHANGE = 0,
+	OF_RECONFIG_CHANGE_ADD = 1,
+	OF_RECONFIG_CHANGE_REMOVE = 2,
+};
+
+struct amba_cs_uci_id {
+	unsigned int devarch;
+	unsigned int devarch_mask;
+	unsigned int devtype;
+	void *data;
+};
+
+struct amba_device {
+	struct device dev;
+	struct resource res;
+	struct clk *pclk;
+	struct device_dma_parameters dma_parms;
+	unsigned int periphid;
+	struct mutex periphid_lock;
+	unsigned int cid;
+	struct amba_cs_uci_id uci;
+	unsigned int irq[9];
+	const char *driver_override;
+};
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+struct of_bus {
+	const char *name;
+	const char *addresses;
+	int (*match)(struct device_node *);
+	void (*count_cells)(struct device_node *, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+	bool has_flags;
+	unsigned int (*get_flags)(const __be32 *);
+};
+
+struct of_changeset_entry {
+	struct list_head node;
+	long unsigned int action;
+	struct device_node *np;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+struct of_changeset {
+	struct list_head entries;
+};
+
+enum of_overlay_notify_action {
+	OF_OVERLAY_INIT = 0,
+	OF_OVERLAY_PRE_APPLY = 1,
+	OF_OVERLAY_POST_APPLY = 2,
+	OF_OVERLAY_PRE_REMOVE = 3,
+	OF_OVERLAY_POST_REMOVE = 4,
+};
+
+struct of_overlay_notify_data {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+typedef __be32 fdt32_t;
+
+struct fdt_header {
+	fdt32_t magic;
+	fdt32_t totalsize;
+	fdt32_t off_dt_struct;
+	fdt32_t off_dt_strings;
+	fdt32_t off_mem_rsvmap;
+	fdt32_t version;
+	fdt32_t last_comp_version;
+	fdt32_t boot_cpuid_phys;
+	fdt32_t size_dt_strings;
+	fdt32_t size_dt_struct;
+};
+
+struct target {
+	struct device_node *np;
+	bool in_livetree;
+};
+
+struct fragment {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+struct overlay_changeset {
+	int id;
+	struct list_head ovcs_list;
+	const void *new_fdt;
+	const void *overlay_mem;
+	struct device_node *overlay_root;
+	enum of_overlay_notify_action notify_state;
+	int count;
+	struct fragment *fragments;
+	bool symbols_fragment;
+	struct of_changeset cset;
+};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_struct srcu;
+	struct notifier_block *head;
+};
+
+struct dev_pm_opp;
+
+struct opp_table;
+
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED = 1,
+	DEVFREQ_TIMER_NUM = 2,
+};
+
+struct devfreq_dev_status {
+	long unsigned int total_time;
+	long unsigned int busy_time;
+	long unsigned int current_frequency;
+	void *private_data;
+};
+
+struct devfreq_dev_profile {
+	long unsigned int initial_freq;
+	unsigned int polling_ms;
+	enum devfreq_timer timer;
+	bool is_cooling_device;
+	int (*target)(struct device *, long unsigned int *, u32);
+	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
+	int (*get_cur_freq)(struct device *, long unsigned int *);
+	void (*exit)(struct device *);
+	long unsigned int *freq_table;
+	unsigned int max_state;
+};
+
+struct devfreq_stats {
+	unsigned int total_trans;
+	unsigned int *trans_table;
+	u64 *time_in_state;
+	u64 last_update;
+};
+
+struct devfreq_governor;
+
+struct devfreq {
+	struct list_head node;
+	struct mutex lock;
+	struct device dev;
+	struct devfreq_dev_profile *profile;
+	const struct devfreq_governor *governor;
+	struct opp_table *opp_table;
+	struct notifier_block nb;
+	struct delayed_work work;
+	long unsigned int *freq_table;
+	unsigned int max_state;
+	long unsigned int previous_freq;
+	struct devfreq_dev_status last_status;
+	void *data;
+	void *governor_data;
+	struct dev_pm_qos_request user_min_freq_req;
+	struct dev_pm_qos_request user_max_freq_req;
+	long unsigned int scaling_min_freq;
+	long unsigned int scaling_max_freq;
+	bool stop_polling;
+	long unsigned int suspend_freq;
+	long unsigned int resume_freq;
+	atomic_t suspend_count;
+	struct devfreq_stats stats;
+	struct srcu_notifier_head transition_notifier_list;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct devfreq_governor {
+	struct list_head node;
+	const char name[16];
+	const u64 attrs;
+	const u64 flags;
+	int (*get_target_freq)(struct devfreq *, long unsigned int *);
+	int (*event_handler)(struct devfreq *, unsigned int, void *);
+};
+
+struct devfreq_freqs {
+	long unsigned int old;
+	long unsigned int new;
+};
+
+struct devfreq_cooling_power {
+	int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
+};
+
+struct trace_event_raw_devfreq_frequency {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	long unsigned int freq;
+	long unsigned int prev_freq;
+	long unsigned int busy_time;
+	long unsigned int total_time;
+	char __data[0];
+};
+
+struct trace_event_raw_devfreq_monitor {
+	struct trace_entry ent;
+	long unsigned int freq;
+	long unsigned int busy_time;
+	long unsigned int total_time;
+	unsigned int polling_ms;
+	u32 __data_loc_dev_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devfreq_frequency {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_devfreq_monitor {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_devfreq_frequency)(void *, struct devfreq *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
+
+struct devfreq_notifier_devres {
+	struct devfreq *devfreq;
+	struct notifier_block *nb;
+	unsigned int list;
+};
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
+};
+
+struct trace_event_raw_mc_event {
+	struct trace_entry ent;
+	unsigned int error_type;
+	u32 __data_loc_msg;
+	u32 __data_loc_label;
+	u16 error_count;
+	u8 mc_index;
+	s8 top_layer;
+	s8 middle_layer;
+	s8 lower_layer;
+	long int address;
+	u8 grain_bits;
+	long int syndrome;
+	u32 __data_loc_driver_detail;
+	char __data[0];
+};
+
+struct trace_event_raw_arm_event {
+	struct trace_entry ent;
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+	u8 affinity;
+	char __data[0];
+};
+
+struct trace_event_raw_non_standard_event {
+	struct trace_entry ent;
+	char sec_type[16];
+	char fru_id[16];
+	u32 __data_loc_fru_text;
+	u8 sev;
+	u32 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_aer_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 status;
+	u8 severity;
+	u8 tlp_header_valid;
+	u32 tlp_header[4];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mc_event {
+	u32 msg;
+	u32 label;
+	u32 driver_detail;
+};
+
+struct trace_event_data_offsets_arm_event {};
+
+struct trace_event_data_offsets_non_standard_event {
+	u32 fru_text;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_aer_event {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
+
+typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
+
+typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
+
+typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
+
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
+};
+
+struct linger {
+	int l_onoff;
+	int l_linger;
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable **nhc_pcpu_rth_output;
+	struct rtable *nhc_rth_input;
+	struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	long unsigned int last_probe;
+	struct rt6_info **rt6i_pcpu;
+	struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info *fib6_next;
+	struct fib6_node *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	long unsigned int expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct uncached_list;
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	struct list_head rt6i_uncached;
+	struct uncached_list *rt6i_uncached_list;
+	short unsigned int rt6i_nfheader_len;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct fib6_node {
+	struct fib6_node *parent;
+	struct fib6_node *left;
+	struct fib6_node *right;
+	struct fib6_node *subtree;
+	struct fib6_info *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info *rr_ptr;
+	struct callback_head rcu;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	struct softnet_data *rps_ipi_list;
+	struct sd_flow_limit *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int input_queue_head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int received_rps;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	long unsigned int offload_handle;
+	u8 dir: 2;
+	u8 type: 2;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long int saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+struct so_timestamping {
+	int flags;
+	int bind_phc;
+};
+
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	short unsigned int encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+	struct xfrm_dev_offload xdo;
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+	long: 64;
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u32 tsflags;
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ipv6_opt_hdr;
+
+struct ipv6_rt_hdr;
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct ip_mc_socklist;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__u16 cmsg_flags;
+	struct ip_options_rcu *inet_opt;
+	__be16 inet_sport;
+	__u16 inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct ip_mc_socklist *mc_list;
+	struct inet_cork_full cork;
+};
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	const struct in6_addr *saddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist *ipv6_fl_list;
+	struct ipv6_txoptions *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct inet_bind2_bucket;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	struct inet_bind2_bucket *icsk_bind2_hash;
+	long unsigned int icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		long unsigned int timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 icsk_ca_priv[13];
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	short unsigned int fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct inet_bind2_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	short unsigned int family;
+	union {
+		struct in6_addr v6_rcv_saddr;
+		__be32 rcv_saddr;
+	};
+	struct hlist_node node;
+	struct hlist_head owners;
+	struct hlist_head deathrow;
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(const struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 cwnd_usage_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u8 bpf_chg_cc_inprogress: 1;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 plb_rehash;
+	u32 mtu_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock *fastopen_rsk;
+	struct saved_syn *saved_syn;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist *next;
+	struct ip6_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	long unsigned int linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	long unsigned int lastuse;
+	long unsigned int expires;
+	struct net *fl_net;
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	long unsigned int fnhe_expires;
+	struct rtable *fnhe_rth_input;
+	struct rtable *fnhe_rth_output;
+	long unsigned int fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+};
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception *chain;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *, struct netlink_ext_ack *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct cgroup_cls_state {
+	struct cgroup_subsys_state css;
+	u32 classid;
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
+};
+
+struct sock_fprog {
+	short unsigned int len;
+	struct sock_filter *filter;
+};
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long int tv_nsec;
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+struct scm_fp_list {
+	short int count;
+	short int max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+	u32 secid;
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	long unsigned int state[1];
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr *ifa_list;
+	struct ip_mc_list *mc_list;
+	struct ip_mc_list **mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	long unsigned int mr_v1_seen;
+	long unsigned int mr_v2_seen;
+	long unsigned int mr_maxdelay;
+	long unsigned int mr_qi;
+	long unsigned int mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	NLA_BE16 = 18,
+	NLA_BE32 = 19,
+	__NLA_TYPE_MAX = 20,
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neighbour_cb {
+	long unsigned int sched_next;
+	unsigned int flags;
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	long unsigned int ifa_cstamp;
+	long unsigned int ifa_tstamp;
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+struct gen_cookie {
+	struct pcpu_gen_cookie *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
+};
+
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
+};
+
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
+};
+
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
+};
+
+struct flow_dissector_key_keyid {
+	__be32 keyid;
+};
+
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_dissector_key_l2tpv3 {
+	__be32 session_id;
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_arp {
+	struct flow_dissector_key_arp *key;
+	struct flow_dissector_key_arp *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+struct flow_match_l2tpv3 {
+	struct flow_dissector_key_l2tpv3 *key;
+	struct flow_dissector_key_l2tpv3 *mask;
+};
+
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+};
+
+struct iw_param {
+	__s32 value;
+	__u8 fixed;
+	__u8 disabled;
+	__u16 flags;
+};
+
+struct iw_point {
+	void *pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iw_freq {
+	__s32 m;
+	__s16 e;
+	__u8 i;
+	__u8 flags;
+};
+
+struct iw_quality {
+	__u8 qual;
+	__u8 level;
+	__u8 noise;
+	__u8 updated;
+};
+
+struct iw_discarded {
+	__u32 nwid;
+	__u32 code;
+	__u32 fragment;
+	__u32 retries;
+	__u32 misc;
+};
+
+struct iw_missed {
+	__u32 beacon;
+};
+
+struct iw_statistics {
+	__u16 status;
+	struct iw_quality qual;
+	struct iw_discarded discard;
+	struct iw_missed miss;
+};
+
+union iwreq_data {
+	char name[16];
+	struct iw_point essid;
+	struct iw_param nwid;
+	struct iw_freq freq;
+	struct iw_param sens;
+	struct iw_param bitrate;
+	struct iw_param txpower;
+	struct iw_param rts;
+	struct iw_param frag;
+	__u32 mode;
+	struct iw_param retry;
+	struct iw_point encoding;
+	struct iw_param power;
+	struct iw_quality qual;
+	struct sockaddr ap_addr;
+	struct sockaddr addr;
+	struct iw_param param;
+	struct iw_point data;
+};
+
+struct iw_priv_args {
+	__u32 cmd;
+	__u16 set_args;
+	__u16 get_args;
+	char name[16];
+};
+
+struct iw_request_info {
+	__u16 cmd;
+	__u16 flags;
+};
+
+struct iw_spy_data {
+	int spy_number;
+	u_char spy_address[48];
+	struct iw_quality spy_stat[8];
+	struct iw_quality spy_thr_low;
+	struct iw_quality spy_thr_high;
+	u_char spy_thr_under[8];
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu *cache;
+	long unsigned int reset_ts;
+};
+
+struct dst_cache_pcpu {
+	long unsigned int refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct strp_stats {
+	long long unsigned int msgs;
+	long long unsigned int bytes;
+	unsigned int mem_fail;
+	unsigned int need_more_hdr;
+	unsigned int msg_too_big;
+	unsigned int msg_timeouts;
+	unsigned int bad_hdr_len;
+};
+
+struct strparser;
+
+struct strp_callbacks {
+	int (*parse_msg)(struct strparser *, struct sk_buff *);
+	void (*rcv_msg)(struct strparser *, struct sk_buff *);
+	int (*read_sock_done)(struct strparser *, int);
+	void (*abort_parser)(struct strparser *, int);
+	void (*lock)(struct strparser *);
+	void (*unlock)(struct strparser *);
+};
+
+struct strparser {
+	struct sock *sk;
+	u32 stopped: 1;
+	u32 paused: 1;
+	u32 aborted: 1;
+	u32 interrupted: 1;
+	u32 unrecov_intr: 1;
+	struct sk_buff **skb_nextp;
+	struct sk_buff *skb_head;
+	unsigned int need_bytes;
+	struct delayed_work msg_timer_work;
+	struct work_struct work;
+	struct strp_stats stats;
+	struct strp_callbacks cb;
+};
+
+struct sk_psock_work_state {
+	struct sk_buff *skb;
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	bool redir_ingress;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct strparser strp;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	long unsigned int state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long int);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct work_struct work;
+	struct rcu_work rwork;
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	long unsigned int copy[1];
+	struct scatterlist data[18];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	raw_spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	raw_spinlock_t lock;
+};
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 32;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	union {
+		struct {
+			struct net_device *netdev;
+			int ifindex;
+			char ifname[16];
+		} type_eth;
+		struct {
+			struct ib_device *ibdev;
+		} type_ib;
+	};
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	u8 registered: 1;
+	u8 initialized: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+	u32 tx_priority;
+	u32 tx_weight;
+};
+
+struct napi_gro_cb {
+	void *frag0;
+	unsigned int frag0_len;
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	long unsigned int age;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+	struct sk_buff *last;
+};
+
+struct nvmem_cell;
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	short unsigned int overhead;
+	short int cell_align;
+	short unsigned int mpu;
+	__u32 rate;
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	__TCA_MAX = 16,
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	struct hlist_node hnode;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct qdisc_watchdog {
+	u64 last_expires;
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+struct tc_query_caps_base {
+	enum tc_setup_type type;
+	void *caps;
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	long unsigned int base;
+	long unsigned int cl;
+	u32 classid;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	long unsigned int new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	short unsigned int nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	NLMSGERR_ATTR_MISS_TYPE = 5,
+	NLMSGERR_ATTR_MISS_NEST = 6,
+	__NLMSGERR_ATTR_MAX = 7,
+	NLMSGERR_ATTR_MAX = 6,
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct netlink_sock {
+	struct sock sk;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 flags;
+	u32 subscriptions;
+	u32 ngroups;
+	long unsigned int *groups;
+	long unsigned int state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	long unsigned int masks[0];
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	__ETHTOOL_A_STATS_CNT = 5,
+	ETHTOOL_A_STATS_MAX = 4,
+};
+
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+enum {
+	ETHTOOL_MSG_USER_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET = 1,
+	ETHTOOL_MSG_LINKINFO_GET = 2,
+	ETHTOOL_MSG_LINKINFO_SET = 3,
+	ETHTOOL_MSG_LINKMODES_GET = 4,
+	ETHTOOL_MSG_LINKMODES_SET = 5,
+	ETHTOOL_MSG_LINKSTATE_GET = 6,
+	ETHTOOL_MSG_DEBUG_GET = 7,
+	ETHTOOL_MSG_DEBUG_SET = 8,
+	ETHTOOL_MSG_WOL_GET = 9,
+	ETHTOOL_MSG_WOL_SET = 10,
+	ETHTOOL_MSG_FEATURES_GET = 11,
+	ETHTOOL_MSG_FEATURES_SET = 12,
+	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
+	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
+	ETHTOOL_MSG_RINGS_GET = 15,
+	ETHTOOL_MSG_RINGS_SET = 16,
+	ETHTOOL_MSG_CHANNELS_GET = 17,
+	ETHTOOL_MSG_CHANNELS_SET = 18,
+	ETHTOOL_MSG_COALESCE_GET = 19,
+	ETHTOOL_MSG_COALESCE_SET = 20,
+	ETHTOOL_MSG_PAUSE_GET = 21,
+	ETHTOOL_MSG_PAUSE_SET = 22,
+	ETHTOOL_MSG_EEE_GET = 23,
+	ETHTOOL_MSG_EEE_SET = 24,
+	ETHTOOL_MSG_TSINFO_GET = 25,
+	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
+	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
+	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
+	ETHTOOL_MSG_FEC_GET = 29,
+	ETHTOOL_MSG_FEC_SET = 30,
+	ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+	ETHTOOL_MSG_STATS_GET = 32,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+	ETHTOOL_MSG_MODULE_GET = 34,
+	ETHTOOL_MSG_MODULE_SET = 35,
+	ETHTOOL_MSG_PSE_GET = 36,
+	ETHTOOL_MSG_PSE_SET = 37,
+	ETHTOOL_MSG_RSS_GET = 38,
+	__ETHTOOL_MSG_USER_CNT = 39,
+	ETHTOOL_MSG_USER_MAX = 38,
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	ETHTOOL_MSG_PSE_GET_REPLY = 37,
+	ETHTOOL_MSG_RSS_GET_REPLY = 38,
+	__ETHTOOL_MSG_KERNEL_CNT = 39,
+	ETHTOOL_MSG_KERNEL_MAX = 38,
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRING_UNSPEC = 0,
+	ETHTOOL_A_STRING_INDEX = 1,
+	ETHTOOL_A_STRING_VALUE = 2,
+	__ETHTOOL_A_STRING_CNT = 3,
+	ETHTOOL_A_STRING_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STRINGS_UNSPEC = 0,
+	ETHTOOL_A_STRINGS_STRING = 1,
+	__ETHTOOL_A_STRINGS_CNT = 2,
+	ETHTOOL_A_STRINGS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRINGSET_UNSPEC = 0,
+	ETHTOOL_A_STRINGSET_ID = 1,
+	ETHTOOL_A_STRINGSET_COUNT = 2,
+	ETHTOOL_A_STRINGSET_STRINGS = 3,
+	__ETHTOOL_A_STRINGSET_CNT = 4,
+	ETHTOOL_A_STRINGSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
+	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+	__ETHTOOL_A_STRINGSETS_CNT = 2,
+	ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	ETHTOOL_A_LINKMODES_RATE_MATCHING = 10,
+	__ETHTOOL_A_LINKMODES_CNT = 11,
+	ETHTOOL_A_LINKMODES_MAX = 10,
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT = 7,
+	__ETHTOOL_A_LINKSTATE_CNT = 8,
+	ETHTOOL_A_LINKSTATE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	__ETHTOOL_A_RINGS_CNT = 14,
+	ETHTOOL_A_RINGS_MAX = 13,
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	__ETHTOOL_A_COALESCE_CNT = 26,
+	ETHTOOL_A_COALESCE_MAX = 25,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	__ETHTOOL_A_PAUSE_CNT = 6,
+	ETHTOOL_A_PAUSE_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_PSE_UNSPEC = 0,
+	ETHTOOL_A_PSE_HEADER = 1,
+	ETHTOOL_A_PODL_PSE_ADMIN_STATE = 2,
+	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL = 3,
+	ETHTOOL_A_PODL_PSE_PW_D_STATUS = 4,
+	__ETHTOOL_A_PSE_CNT = 5,
+	ETHTOOL_A_PSE_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_RSS_UNSPEC = 0,
+	ETHTOOL_A_RSS_HEADER = 1,
+	ETHTOOL_A_RSS_CONTEXT = 2,
+	ETHTOOL_A_RSS_HFUNC = 3,
+	ETHTOOL_A_RSS_INDIR = 4,
+	ETHTOOL_A_RSS_HKEY = 5,
+	__ETHTOOL_A_RSS_CNT = 6,
+	ETHTOOL_A_RSS_MAX = 5,
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+};
+
+struct strset_info {
+	bool per_dev;
+	bool free_strings;
+	unsigned int count;
+	const char (*strings)[32];
+};
+
+struct strset_req_info {
+	struct ethnl_req_info base;
+	u32 req_ids;
+	bool counts_only;
+};
+
+struct strset_reply_data {
+	struct ethnl_reply_data base;
+	struct strset_info sets[21];
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	struct ethtool_link_ext_stats link_stats;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
+	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
+	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum macsec_validation_type {
+	MACSEC_VALIDATE_DISABLED = 0,
+	MACSEC_VALIDATE_CHECK = 1,
+	MACSEC_VALIDATE_STRICT = 2,
+	__MACSEC_VALIDATE_END = 3,
+	MACSEC_VALIDATE_MAX = 2,
+};
+
+enum macsec_offload {
+	MACSEC_OFFLOAD_OFF = 0,
+	MACSEC_OFFLOAD_PHY = 1,
+	MACSEC_OFFLOAD_MAC = 2,
+	__MACSEC_OFFLOAD_END = 3,
+	MACSEC_OFFLOAD_MAX = 2,
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__u32 nh_tclassid;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info *nh_info;
+		struct nh_group *nh_grp;
+	};
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct nh_grp_entry;
+
+struct nh_res_bucket {
+	struct nh_grp_entry *nh_entry;
+	atomic_long_t used_time;
+	long unsigned int migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	long unsigned int unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+enum udp_parsable_tunnel_type {
+	UDP_TUNNEL_TYPE_VXLAN = 1,
+	UDP_TUNNEL_TYPE_GENEVE = 2,
+	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+struct udp_tunnel_info {
+	short unsigned int type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+enum udp_tunnel_nic_info_flags {
+	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
+	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
+	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
+	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+typedef u64 sci_t;
+
+typedef u32 ssci_t;
+
+union salt {
+	struct {
+		u32 ssci;
+		u64 pn;
+	} __attribute__((packed));
+	u8 bytes[12];
+};
+
+typedef union salt salt_t;
+
+union pn {
+	struct {
+		u32 lower;
+		u32 upper;
+	};
+	u64 full64;
+};
+
+typedef union pn pn_t;
+
+struct macsec_key {
+	u8 id[16];
+	struct crypto_aead *tfm;
+	salt_t salt;
+};
+
+struct macsec_rx_sc_stats {
+	__u64 InOctetsValidated;
+	__u64 InOctetsDecrypted;
+	__u64 InPktsUnchecked;
+	__u64 InPktsDelayed;
+	__u64 InPktsOK;
+	__u64 InPktsInvalid;
+	__u64 InPktsLate;
+	__u64 InPktsNotValid;
+	__u64 InPktsNotUsingSA;
+	__u64 InPktsUnusedSA;
+};
+
+struct macsec_rx_sa_stats {
+	__u32 InPktsOK;
+	__u32 InPktsInvalid;
+	__u32 InPktsNotValid;
+	__u32 InPktsNotUsingSA;
+	__u32 InPktsUnusedSA;
+};
+
+struct macsec_tx_sa_stats {
+	__u32 OutPktsProtected;
+	__u32 OutPktsEncrypted;
+};
+
+struct macsec_tx_sc_stats {
+	__u64 OutPktsProtected;
+	__u64 OutPktsEncrypted;
+	__u64 OutOctetsProtected;
+	__u64 OutOctetsEncrypted;
+};
+
+struct macsec_dev_stats {
+	__u64 OutPktsUntagged;
+	__u64 InPktsUntagged;
+	__u64 OutPktsTooLong;
+	__u64 InPktsNoTag;
+	__u64 InPktsBadTag;
+	__u64 InPktsUnknownSCI;
+	__u64 InPktsNoSCI;
+	__u64 InPktsOverrun;
+};
+
+struct macsec_rx_sc;
+
+struct macsec_rx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_rx_sa_stats *stats;
+	struct macsec_rx_sc *sc;
+	struct callback_head rcu;
+};
+
+struct pcpu_rx_sc_stats;
+
+struct macsec_rx_sc {
+	struct macsec_rx_sc *next;
+	sci_t sci;
+	bool active;
+	struct macsec_rx_sa *sa[4];
+	struct pcpu_rx_sc_stats *stats;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+};
+
+struct pcpu_rx_sc_stats {
+	struct macsec_rx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_tx_sc_stats {
+	struct macsec_tx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct macsec_tx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_tx_sa_stats *stats;
+	struct callback_head rcu;
+};
+
+struct metadata_dst;
+
+struct macsec_tx_sc {
+	bool active;
+	u8 encoding_sa;
+	bool encrypt;
+	bool send_sci;
+	bool end_station;
+	bool scb;
+	struct macsec_tx_sa *sa[4];
+	struct pcpu_tx_sc_stats *stats;
+	struct metadata_dst *md_dst;
+};
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+	METADATA_MACSEC = 2,
+	METADATA_XFRM = 3,
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct macsec_info {
+	sci_t sci;
+};
+
+struct xfrm_md_info {
+	u32 if_id;
+	int link;
+	struct dst_entry *dst_orig;
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
+	union {
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+		struct macsec_info macsec_info;
+		struct xfrm_md_info xfrm_info;
+	} u;
+};
+
+struct macsec_secy {
+	struct net_device *netdev;
+	unsigned int n_rx_sc;
+	sci_t sci;
+	u16 key_len;
+	u16 icv_len;
+	enum macsec_validation_type validate_frames;
+	bool xpn;
+	bool operational;
+	bool protect_frames;
+	bool replay_protect;
+	u32 replay_window;
+	struct macsec_tx_sc tx_sc;
+	struct macsec_rx_sc *rx_sc;
+};
+
+struct macsec_context {
+	union {
+		struct net_device *netdev;
+		struct phy_device *phydev;
+	};
+	enum macsec_offload offload;
+	struct macsec_secy *secy;
+	struct macsec_rx_sc *rx_sc;
+	struct {
+		unsigned char assoc_num;
+		u8 key[128];
+		union {
+			struct macsec_rx_sa *rx_sa;
+			struct macsec_tx_sa *tx_sa;
+		};
+	} sa;
+	union {
+		struct macsec_tx_sc_stats *tx_sc_stats;
+		struct macsec_tx_sa_stats *tx_sa_stats;
+		struct macsec_rx_sc_stats *rx_sc_stats;
+		struct macsec_rx_sa_stats *rx_sa_stats;
+		struct macsec_dev_stats *dev_stats;
+	} stats;
+};
+
+struct genl_dumpit_info {
+	const struct genl_family *family;
+	struct genl_split_ops op;
+	struct nlattr **attrs;
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+	struct ethnl_req_info req_info;
+	int pos_hash;
+	int pos_idx;
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+typedef u32 u_int32_t;
+
+struct nf_bridge_info {
+	enum {
+		BRNF_PROTO_UNCHANGED = 0,
+		BRNF_PROTO_8021Q = 1,
+		BRNF_PROTO_PPPOE = 2,
+	} orig_proto: 8;
+	u8 pkt_otherhost: 1;
+	u8 in_prerouting: 1;
+	u8 bridged_dnat: 1;
+	__u16 frag_max_size;
+	struct net_device *physindev;
+	struct net_device *physoutdev;
+	union {
+		__be32 ipv4_daddr;
+		struct in6_addr ipv6_daddr;
+		char neigh_header[8];
+	};
+};
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	union {
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		};
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		} addrs;
+	};
+};
+
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct net_device *physin;
+	struct net_device *physout;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+enum l2tp_debug_flags {
+	L2TP_MSG_DEBUG = 1,
+	L2TP_MSG_CONTROL = 2,
+	L2TP_MSG_SEQ = 4,
+	L2TP_MSG_DATA = 8,
+};
+
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
+typedef u16 u_int16_t;
+
+struct xt_action_param;
+
+struct xt_mtchk_param;
+
+struct xt_mtdtor_param;
+
+struct xt_match {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	bool (*match)(const struct sk_buff *, struct xt_action_param *);
+	int (*checkentry)(const struct xt_mtchk_param *);
+	void (*destroy)(const struct xt_mtdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int matchsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_tgchk_param;
+
+struct xt_tgdtor_param;
+
+struct xt_target {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
+	int (*checkentry)(const struct xt_tgchk_param *);
+	void (*destroy)(const struct xt_tgdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int targetsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_action_param {
+	union {
+		const struct xt_match *match;
+		const struct xt_target *target;
+	};
+	union {
+		const void *matchinfo;
+		const void *targinfo;
+	};
+	const struct nf_hook_state *state;
+	unsigned int thoff;
+	u16 fragoff;
+	bool hotdrop;
+};
+
+struct xt_mtchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_match *match;
+	void *matchinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_mtdtor_param {
+	struct net *net;
+	const struct xt_match *match;
+	void *matchinfo;
+	u_int8_t family;
+};
+
+struct xt_tgchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_target *target;
+	void *targinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_tgdtor_param {
+	struct net *net;
+	const struct xt_target *target;
+	void *targinfo;
+	u_int8_t family;
+};
+
+struct xt_tcp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 option;
+	__u8 flg_mask;
+	__u8 flg_cmp;
+	__u8 invflags;
+};
+
+struct xt_udp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 invflags;
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_UNSPECIFIED = 0,
+	XFRM_DEV_OFFLOAD_CRYPTO = 1,
+	XFRM_DEV_OFFLOAD_PACKET = 2,
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+	struct inet_bind2_bucket *tw_tb2;
+	struct hlist_node tw_bind2_node;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
+};
+
+struct mptcp_out_options {};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	long unsigned int sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	long unsigned int sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list *next_rcu;
+	};
+	struct ip_mc_list *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	int pending;
+	unsigned int corkflag;
+	__u8 encap_type;
+	unsigned char no_check6_tx: 1;
+	unsigned char no_check6_rx: 1;
+	unsigned char encap_enabled: 1;
+	unsigned char gro_enabled: 1;
+	unsigned char accept_udp_l4: 1;
+	unsigned char accept_udp_fraglist: 1;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	__u8 pcflag;
+	__u8 unused[3];
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	int forward_threshold;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct fib6_result;
+
+struct fib6_config;
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	long unsigned int fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	struct udp_seq_afinfo *bpf_seq_afinfo;
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	int: 32;
+	int bucket;
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	__be32 imsf_multiaddr;
+	__be32 imsf_interface;
+	__u32 imsf_fmode;
+	__u32 imsf_numsrc;
+	union {
+		__be32 imsf_slist[1];
+		struct {
+			struct {			} __empty_imsf_slist_flex;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct mr_table_ops {
+	const struct rhashtable_params *rht_params;
+	void *cmparg_any;
+};
+
+struct vif_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	long unsigned int bytes_in;
+	long unsigned int bytes_out;
+	long unsigned int pkt_in;
+	long unsigned int pkt_out;
+	long unsigned int rate_limit;
+	unsigned char threshold;
+	short unsigned int flags;
+	int link;
+	struct netdev_phys_item_id dev_parent_id;
+	__be32 local;
+	__be32 remote;
+};
+
+struct mr_table {
+	struct list_head list;
+	possible_net_t net;
+	struct mr_table_ops ops;
+	u32 id;
+	struct sock *mroute_sk;
+	struct timer_list ipmr_expire_timer;
+	struct list_head mfc_unres_queue;
+	struct vif_device vif_table[32];
+	struct rhltable mfc_hash;
+	struct list_head mfc_cache_list;
+	int maxvif;
+	atomic_t cache_resolve_queue_len;
+	bool mroute_do_assert;
+	bool mroute_do_pim;
+	bool mroute_do_wrvifwhole;
+	int mroute_reg_vif_num;
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+struct rtnexthop {
+	short unsigned int rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+typedef u8 dscp_t;
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct {
+			struct {			} __empty_tnode;
+			struct key_vector *tnode[0];
+		};
+	};
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector *parent;
+	struct key_vector kv[1];
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct trie {
+	struct key_vector kv[1];
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	struct hlist_nulls_head ht[256];
+};
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	short unsigned int no;
+};
+
+enum {
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
+};
+
+struct inet_diag_hostcond {
+	__u8 family;
+	__u8 prefix_len;
+	int port;
+	__be32 addr[0];
+};
+
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
+};
+
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct bpf_sk_storage_diag;
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
+	u16 sport;
+	u16 dport;
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
+};
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+struct ip_tunnel;
+
+struct ip6_tnl;
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+struct nf_conn;
+
+enum nf_nat_manip_type;
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_if_decode_session_result {
+	struct net *net;
+	u32 if_id;
+};
+
+struct xfrm_if_cb {
+	bool (*decode_session)(struct sk_buff *, short unsigned int, struct xfrm_if_decode_session_result *);
+};
+
+struct xfrm_dst;
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_node {
+	struct rb_node node;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
+};
+
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
+};
+
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
+	struct callback_head rcu;
+};
+
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 secid;
+	u32 consumed;
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	atomic_long_t inflight;
+	spinlock_t lock;
+	long unsigned int gc_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	IFLA_ALLMULTI = 61,
+	IFLA_DEVLINK_PORT = 62,
+	__IFLA_MAX = 63,
+};
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	short unsigned int ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	short unsigned int prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_MAX = 58,
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
+	refcount_t refcnt;
+	spinlock_t lock;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	long unsigned int cstamp;
+	long unsigned int tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_OIF = 4,
+	IPV6_SADDR_RULE_LABEL = 5,
+	IPV6_SADDR_RULE_PRIVACY = 6,
+	IPV6_SADDR_RULE_ORCHID = 7,
+	IPV6_SADDR_RULE_PREFIX = 8,
+	IPV6_SADDR_RULE_MAX = 9,
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	long unsigned int scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	short unsigned int nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	short unsigned int nduseropt_pad2;
+	unsigned int nduseropt_pad3;
+};
+
+enum {
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	long unsigned int rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+struct route_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved_l: 3;
+	__u8 route_pref: 2;
+	__u8 reserved_h: 3;
+	__be32 lifetime;
+	__u8 prefix[0];
+};
+
+struct flow_dissector_key_tags {
+	u32 flow_label;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	int: 32;
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr *tun_src;
+	struct rhashtable hmac_infos;
+};
+
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+struct icmpv6_msg {
+	struct sk_buff *skb;
+	int offset;
+	uint8_t type;
+};
+
+struct icmp6_err {
+	int err;
+	int fatal;
+};
+
+struct sockaddr_in6 {
+	short unsigned int sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	short unsigned int type;
+	short unsigned int protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+};
+
+struct ip6fl_iter_state {
+	struct seq_net_private p;
+	struct pid_namespace *pid_ns;
+	int bucket;
+};
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+enum {
+	FR_ACT_UNSPEC = 0,
+	FR_ACT_TO_TBL = 1,
+	FR_ACT_GOTO = 2,
+	FR_ACT_NOP = 3,
+	FR_ACT_RES3 = 4,
+	FR_ACT_RES4 = 5,
+	FR_ACT_BLACKHOLE = 6,
+	FR_ACT_UNREACHABLE = 7,
+	FR_ACT_PROHIBIT = 8,
+	__FR_ACT_MAX = 9,
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+enum {
+	PIM_TYPE_HELLO = 0,
+	PIM_TYPE_REGISTER = 1,
+	PIM_TYPE_REGISTER_STOP = 2,
+	PIM_TYPE_JOIN_PRUNE = 3,
+	PIM_TYPE_BOOTSTRAP = 4,
+	PIM_TYPE_ASSERT = 5,
+	PIM_TYPE_GRAFT = 6,
+	PIM_TYPE_GRAFT_ACK = 7,
+	PIM_TYPE_CANDIDATE_RP_ADV = 8,
+};
+
+struct pimreghdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+	__be32 flags;
+};
+
+typedef short unsigned int mifi_t;
+
+typedef __u32 if_mask;
+
+struct if_set {
+	if_mask ifs_bits[8];
+};
+
+struct mif6ctl {
+	mifi_t mif6c_mifi;
+	unsigned char mif6c_flags;
+	unsigned char vifc_threshold;
+	__u16 mif6c_pifi;
+	unsigned int vifc_rate_limit;
+};
+
+struct mf6cctl {
+	struct sockaddr_in6 mf6cc_origin;
+	struct sockaddr_in6 mf6cc_mcastgrp;
+	mifi_t mf6cc_parent;
+	struct if_set mf6cc_ifset;
+};
+
+struct sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	long unsigned int pktcnt;
+	long unsigned int bytecnt;
+	long unsigned int wrong_if;
+};
+
+struct sioc_mif_req6 {
+	mifi_t mifi;
+	long unsigned int icount;
+	long unsigned int ocount;
+	long unsigned int ibytes;
+	long unsigned int obytes;
+};
+
+struct mrt6msg {
+	__u8 im6_mbz;
+	__u8 im6_msgtype;
+	__u16 im6_mif;
+	__u32 im6_pad;
+	struct in6_addr im6_src;
+	struct in6_addr im6_dst;
+};
+
+enum {
+	IP6MRA_CREPORT_UNSPEC = 0,
+	IP6MRA_CREPORT_MSGTYPE = 1,
+	IP6MRA_CREPORT_MIF_ID = 2,
+	IP6MRA_CREPORT_SRC_ADDR = 3,
+	IP6MRA_CREPORT_DST_ADDR = 4,
+	IP6MRA_CREPORT_PKT = 5,
+	__IP6MRA_CREPORT_MAX = 6,
+};
+
+struct vif_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct net_device *dev;
+	short unsigned int vif_index;
+	short unsigned int vif_flags;
+	u32 tb_id;
+};
+
+enum {
+	MFC_STATIC = 1,
+	MFC_OFFLOAD = 2,
+};
+
+struct mr_mfc {
+	struct rhlist_head mnode;
+	short unsigned int mfc_parent;
+	int mfc_flags;
+	union {
+		struct {
+			long unsigned int expires;
+			struct sk_buff_head unresolved;
+		} unres;
+		struct {
+			long unsigned int last_assert;
+			int minvif;
+			int maxvif;
+			long unsigned int bytes;
+			long unsigned int pkt;
+			long unsigned int wrong_if;
+			long unsigned int lastuse;
+			unsigned char ttls[32];
+			refcount_t refcount;
+		} res;
+	} mfc_un;
+	struct list_head list;
+	struct callback_head rcu;
+	void (*free)(struct callback_head *);
+};
+
+struct mfc_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct mr_mfc *mfc;
+	u32 tb_id;
+};
+
+struct mr_vif_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	int ct;
+};
+
+struct mr_mfc_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	struct list_head *cache;
+	spinlock_t *lock;
+};
+
+struct mfc6_cache_cmp_arg {
+	struct in6_addr mf6c_mcastgrp;
+	struct in6_addr mf6c_origin;
+};
+
+struct mfc6_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			struct in6_addr mf6c_mcastgrp;
+			struct in6_addr mf6c_origin;
+		};
+		struct mfc6_cache_cmp_arg cmparg;
+	};
+};
+
+struct ip6mr_result {
+	struct mr_table *mrt;
+};
+
+struct netpoll;
+
+struct netpoll_info {
+	refcount_t refcnt;
+	struct semaphore dev_lock;
+	struct sk_buff_head txq;
+	struct delayed_work tx_work;
+	struct netpoll *netpoll;
+	struct callback_head rcu;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+union inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct netpoll {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	char dev_name[16];
+	const char *name;
+	union inet_addr local_ip;
+	union inet_addr remote_ip;
+	bool ipv6;
+	u16 local_port;
+	u16 remote_port;
+	u8 remote_mac[6];
+};
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+	u8 br_netfilter_broute: 1;
+};
+
+struct nf_bridge_frag_data;
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	LWTUNNEL_ENCAP_XFRM = 10,
+	__LWTUNNEL_ENCAP_MAX = 11,
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+enum {
+	SEG6_IPTUNNEL_UNSPEC = 0,
+	SEG6_IPTUNNEL_SRH = 1,
+	__SEG6_IPTUNNEL_MAX = 2,
+};
+
+struct seg6_iptunnel_encap {
+	int mode;
+	struct ipv6_sr_hdr srh[0];
+};
+
+enum {
+	SEG6_IPTUN_MODE_INLINE = 0,
+	SEG6_IPTUN_MODE_ENCAP = 1,
+	SEG6_IPTUN_MODE_L2ENCAP = 2,
+	SEG6_IPTUN_MODE_ENCAP_RED = 3,
+	SEG6_IPTUN_MODE_L2ENCAP_RED = 4,
+};
+
+struct seg6_lwt {
+	struct dst_cache cache;
+	struct seg6_iptunnel_encap tuninfo[0];
+};
+
+enum {
+	IFLA_IPTUN_UNSPEC = 0,
+	IFLA_IPTUN_LINK = 1,
+	IFLA_IPTUN_LOCAL = 2,
+	IFLA_IPTUN_REMOTE = 3,
+	IFLA_IPTUN_TTL = 4,
+	IFLA_IPTUN_TOS = 5,
+	IFLA_IPTUN_ENCAP_LIMIT = 6,
+	IFLA_IPTUN_FLOWINFO = 7,
+	IFLA_IPTUN_FLAGS = 8,
+	IFLA_IPTUN_PROTO = 9,
+	IFLA_IPTUN_PMTUDISC = 10,
+	IFLA_IPTUN_6RD_PREFIX = 11,
+	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
+	IFLA_IPTUN_6RD_PREFIXLEN = 13,
+	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
+	IFLA_IPTUN_ENCAP_TYPE = 15,
+	IFLA_IPTUN_ENCAP_FLAGS = 16,
+	IFLA_IPTUN_ENCAP_SPORT = 17,
+	IFLA_IPTUN_ENCAP_DPORT = 18,
+	IFLA_IPTUN_COLLECT_METADATA = 19,
+	IFLA_IPTUN_FWMARK = 20,
+	__IFLA_IPTUN_MAX = 21,
+};
+
+enum tunnel_encap_types {
+	TUNNEL_ENCAP_NONE = 0,
+	TUNNEL_ENCAP_FOU = 1,
+	TUNNEL_ENCAP_GUE = 2,
+	TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct ip_tunnel_prl {
+	__be32 addr;
+	__u16 flags;
+	__u16 __reserved;
+	__u32 datalen;
+	__u32 __reserved2;
+};
+
+struct gro_cell;
+
+struct gro_cells {
+	struct gro_cell *cells;
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct ip_tunnel {
+	struct ip_tunnel *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	long unsigned int err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_prl_entry *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct tnl_ptk_info {
+	__be16 flags;
+	__be16 proto;
+	__be32 key;
+	__be32 seq;
+	int hdr_len;
+};
+
+struct xfrm_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm_tunnel *next;
+	int priority;
+};
+
+struct sit_net {
+	struct ip_tunnel *tunnels_r_l[16];
+	struct ip_tunnel *tunnels_r[16];
+	struct ip_tunnel *tunnels_l[16];
+	struct ip_tunnel *tunnels_wc[1];
+	struct ip_tunnel **tunnels[4];
+	struct net_device *fb_tunnel_dev;
+};
+
+struct metadata_dst;
+
+struct sockaddr_pkt {
+	short unsigned int spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+	short unsigned int sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	short unsigned int sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
+};
+
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct tpacket_hdr {
+	long unsigned int tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	short unsigned int tp_mac;
+	short unsigned int tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
+};
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+typedef __u16 __virtio16;
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	short unsigned int type;
+	short unsigned int alen;
+	unsigned char addr[32];
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	short unsigned int kactive_blk_num;
+	short unsigned int blk_sizeof_priv;
+	short unsigned int last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	short unsigned int retire_blk_tov;
+	short unsigned int version;
+	long unsigned int tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int *pending_refcnt;
+	union {
+		long unsigned int *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned int running;
+	unsigned int auxdata: 1;
+	unsigned int origdev: 1;
+	unsigned int has_vnet_hdr: 1;
+	unsigned int tp_loss: 1;
+	unsigned int tp_tx_has_off: 1;
+	int pressure;
+	int ifindex;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device *cached_dev;
+	int (*xmit)(struct sk_buff *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	short unsigned int mr_type;
+	short unsigned int mr_alen;
+	unsigned char mr_address[32];
+};
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+enum {
+	IB_USER_MAD_USER_RMPP = 1,
+};
+
+enum rdma_transport_type {
+	RDMA_TRANSPORT_IB = 0,
+	RDMA_TRANSPORT_IWARP = 1,
+	RDMA_TRANSPORT_USNIC = 2,
+	RDMA_TRANSPORT_USNIC_UDP = 3,
+	RDMA_TRANSPORT_UNSPECIFIED = 4,
+};
+
+enum rdma_network_type {
+	RDMA_NETWORK_IB = 0,
+	RDMA_NETWORK_ROCE_V1 = 1,
+	RDMA_NETWORK_IPV4 = 2,
+	RDMA_NETWORK_IPV6 = 3,
+};
+
+struct rdma_cm_event;
+
+typedef int (*rdma_cm_event_handler)(struct rdma_cm_id *, struct rdma_cm_event *);
+
+struct rdma_dev_addr {
+	unsigned char src_dev_addr[32];
+	unsigned char dst_dev_addr[32];
+	unsigned char broadcast[32];
+	short unsigned int dev_type;
+	int bound_dev_if;
+	enum rdma_transport_type transport;
+	struct net *net;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_network_type network;
+	int hoplimit;
+};
+
+struct rdma_addr {
+	struct __kernel_sockaddr_storage src_addr;
+	struct __kernel_sockaddr_storage dst_addr;
+	struct rdma_dev_addr dev_addr;
+};
+
+struct sa_path_rec;
+
+struct rdma_route {
+	struct rdma_addr addr;
+	struct sa_path_rec *path_rec;
+	struct sa_path_rec *path_rec_inbound;
+	struct sa_path_rec *path_rec_outbound;
+	int num_pri_alt_paths;
+};
+
+enum rdma_ucm_port_space {
+	RDMA_PS_IPOIB = 2,
+	RDMA_PS_IB = 319,
+	RDMA_PS_TCP = 262,
+	RDMA_PS_UDP = 273,
+};
+
+struct rdma_cm_id {
+	struct ib_device *device;
+	void *context;
+	struct ib_qp *qp;
+	rdma_cm_event_handler event_handler;
+	struct rdma_route route;
+	enum rdma_ucm_port_space ps;
+	enum ib_qp_type qp_type;
+	u32 port_num;
+	struct work_struct net_work;
+};
+
+enum {
+	IB_MGMT_MAD_HDR = 24,
+	IB_MGMT_MAD_DATA = 232,
+	IB_MGMT_RMPP_HDR = 36,
+	IB_MGMT_RMPP_DATA = 220,
+	IB_MGMT_VENDOR_HDR = 40,
+	IB_MGMT_VENDOR_DATA = 216,
+	IB_MGMT_SA_HDR = 56,
+	IB_MGMT_SA_DATA = 200,
+	IB_MGMT_DEVICE_HDR = 64,
+	IB_MGMT_DEVICE_DATA = 192,
+	IB_MGMT_MAD_SIZE = 256,
+	OPA_MGMT_MAD_DATA = 2024,
+	OPA_MGMT_RMPP_DATA = 2012,
+	OPA_MGMT_MAD_SIZE = 2048,
+};
+
+enum sa_path_rec_type {
+	SA_PATH_REC_TYPE_IB = 0,
+	SA_PATH_REC_TYPE_ROCE_V1 = 1,
+	SA_PATH_REC_TYPE_ROCE_V2 = 2,
+	SA_PATH_REC_TYPE_OPA = 3,
+};
+
+struct sa_path_rec_ib {
+	__be16 dlid;
+	__be16 slid;
+	u8 raw_traffic;
+};
+
+struct sa_path_rec_roce {
+	bool route_resolved;
+	u8 dmac[6];
+};
+
+struct sa_path_rec_opa {
+	__be32 dlid;
+	__be32 slid;
+	u8 raw_traffic;
+	u8 l2_8B;
+	u8 l2_10B;
+	u8 l2_9B;
+	u8 l2_16B;
+	u8 qos_type;
+	u8 qos_priority;
+};
+
+struct sa_path_rec {
+	union ib_gid dgid;
+	union ib_gid sgid;
+	__be64 service_id;
+	__be32 flow_label;
+	u8 hop_limit;
+	u8 traffic_class;
+	u8 reversible;
+	u8 numb_path;
+	__be16 pkey;
+	__be16 qos_class;
+	u8 sl;
+	u8 mtu_selector;
+	u8 mtu;
+	u8 rate_selector;
+	u8 rate;
+	u8 packet_life_time_selector;
+	u8 packet_life_time;
+	u8 preference;
+	union {
+		struct sa_path_rec_ib ib;
+		struct sa_path_rec_roce roce;
+		struct sa_path_rec_opa opa;
+	};
+	enum sa_path_rec_type rec_type;
+	u32 flags;
+};
+
+struct rdma_ucm_ece {
+	__u32 vendor_id;
+	__u32 attr_mod;
+};
+
+enum rdma_cm_event_type {
+	RDMA_CM_EVENT_ADDR_RESOLVED = 0,
+	RDMA_CM_EVENT_ADDR_ERROR = 1,
+	RDMA_CM_EVENT_ROUTE_RESOLVED = 2,
+	RDMA_CM_EVENT_ROUTE_ERROR = 3,
+	RDMA_CM_EVENT_CONNECT_REQUEST = 4,
+	RDMA_CM_EVENT_CONNECT_RESPONSE = 5,
+	RDMA_CM_EVENT_CONNECT_ERROR = 6,
+	RDMA_CM_EVENT_UNREACHABLE = 7,
+	RDMA_CM_EVENT_REJECTED = 8,
+	RDMA_CM_EVENT_ESTABLISHED = 9,
+	RDMA_CM_EVENT_DISCONNECTED = 10,
+	RDMA_CM_EVENT_DEVICE_REMOVAL = 11,
+	RDMA_CM_EVENT_MULTICAST_JOIN = 12,
+	RDMA_CM_EVENT_MULTICAST_ERROR = 13,
+	RDMA_CM_EVENT_ADDR_CHANGE = 14,
+	RDMA_CM_EVENT_TIMEWAIT_EXIT = 15,
+};
+
+struct rdma_conn_param {
+	const void *private_data;
+	u8 private_data_len;
+	u8 responder_resources;
+	u8 initiator_depth;
+	u8 flow_control;
+	u8 retry_count;
+	u8 rnr_retry_count;
+	u8 srq;
+	u32 qp_num;
+	u32 qkey;
+};
+
+struct rdma_ud_param {
+	const void *private_data;
+	u8 private_data_len;
+	struct rdma_ah_attr ah_attr;
+	u32 qp_num;
+	u32 qkey;
+};
+
+struct rdma_cm_event {
+	enum rdma_cm_event_type event;
+	int status;
+	union {
+		struct rdma_conn_param conn;
+		struct rdma_ud_param ud;
+	} param;
+	struct rdma_ucm_ece ece;
+};
+
+struct rds_info_connection {
+	__u64 next_tx_seq;
+	__u64 next_rx_seq;
+	__be32 laddr;
+	__be32 faddr;
+	__u8 transport[16];
+	__u8 flags;
+	__u8 tos;
+} __attribute__((packed));
+
+struct rds6_info_connection {
+	__u64 next_tx_seq;
+	__u64 next_rx_seq;
+	struct in6_addr laddr;
+	struct in6_addr faddr;
+	__u8 transport[16];
+	__u8 flags;
+} __attribute__((packed));
+
+enum rds_message_rxpath_latency {
+	RDS_MSG_RX_HDR_TO_DGRAM_START = 0,
+	RDS_MSG_RX_DGRAM_REASSEMBLE = 1,
+	RDS_MSG_RX_DGRAM_DELIVERED = 2,
+	RDS_MSG_RX_DGRAM_TRACE_MAX = 3,
+};
+
+typedef __u64 rds_rdma_cookie_t;
+
+struct rds_info_lengths {
+	unsigned int nr;
+	unsigned int each;
+};
+
+struct rds_info_iterator;
+
+typedef void (*rds_info_func)(struct socket *, unsigned int, struct rds_info_iterator *, struct rds_info_lengths *);
+
+struct rds_cong_map {
+	struct rb_node m_rb_node;
+	struct in6_addr m_addr;
+	wait_queue_head_t m_waitq;
+	struct list_head m_conn_list;
+	long unsigned int m_page_addrs[1];
+};
+
+enum {
+	RDS_CONN_DOWN = 0,
+	RDS_CONN_CONNECTING = 1,
+	RDS_CONN_DISCONNECTING = 2,
+	RDS_CONN_UP = 3,
+	RDS_CONN_RESETTING = 4,
+	RDS_CONN_ERROR = 5,
+};
+
+struct rds_connection;
+
+struct rds_message;
+
+struct rds_conn_path {
+	struct rds_connection *cp_conn;
+	struct rds_message *cp_xmit_rm;
+	long unsigned int cp_xmit_sg;
+	unsigned int cp_xmit_hdr_off;
+	unsigned int cp_xmit_data_off;
+	unsigned int cp_xmit_atomic_sent;
+	unsigned int cp_xmit_rdma_sent;
+	unsigned int cp_xmit_data_sent;
+	spinlock_t cp_lock;
+	u64 cp_next_tx_seq;
+	struct list_head cp_send_queue;
+	struct list_head cp_retrans;
+	u64 cp_next_rx_seq;
+	void *cp_transport_data;
+	atomic_t cp_state;
+	long unsigned int cp_send_gen;
+	long unsigned int cp_flags;
+	long unsigned int cp_reconnect_jiffies;
+	struct delayed_work cp_send_w;
+	struct delayed_work cp_recv_w;
+	struct delayed_work cp_conn_w;
+	struct work_struct cp_down_w;
+	struct mutex cp_cm_lock;
+	wait_queue_head_t cp_waitq;
+	unsigned int cp_unacked_packets;
+	unsigned int cp_unacked_bytes;
+	unsigned int cp_index;
+};
+
+struct rds_transport;
+
+struct rds_connection {
+	struct hlist_node c_hash_node;
+	struct in6_addr c_laddr;
+	struct in6_addr c_faddr;
+	int c_dev_if;
+	int c_bound_if;
+	unsigned int c_loopback: 1;
+	unsigned int c_isv6: 1;
+	unsigned int c_ping_triggered: 1;
+	unsigned int c_pad_to_32: 29;
+	int c_npaths;
+	struct rds_connection *c_passive;
+	struct rds_transport *c_trans;
+	struct rds_cong_map *c_lcong;
+	struct rds_cong_map *c_fcong;
+	unsigned int c_proposed_version;
+	unsigned int c_version;
+	possible_net_t c_net;
+	u8 c_tos;
+	struct list_head c_map_item;
+	long unsigned int c_map_queued;
+	struct rds_conn_path *c_path;
+	wait_queue_head_t c_hs_waitq;
+	u32 c_my_gen_num;
+	u32 c_peer_gen_num;
+};
+
+struct rds_header {
+	__be64 h_sequence;
+	__be64 h_ack;
+	__be32 h_len;
+	__be16 h_sport;
+	__be16 h_dport;
+	u8 h_flags;
+	u8 h_credit;
+	u8 h_padding[4];
+	__sum16 h_csum;
+	u8 h_exthdr[16];
+};
+
+struct rds_inc_usercopy {
+	rds_rdma_cookie_t rdma_cookie;
+	ktime_t rx_tstamp;
+};
+
+struct rds_incoming {
+	refcount_t i_refcount;
+	struct list_head i_item;
+	struct rds_connection *i_conn;
+	struct rds_conn_path *i_conn_path;
+	struct rds_header i_hdr;
+	long unsigned int i_rx_jiffies;
+	struct in6_addr i_saddr;
+	struct rds_inc_usercopy i_usercopy;
+	u64 i_rx_lat_trace[4];
+};
+
+struct rds_notifier;
+
+struct rds_mr;
+
+struct rm_atomic_op {
+	int op_type;
+	union {
+		struct {
+			uint64_t compare;
+			uint64_t swap;
+			uint64_t compare_mask;
+			uint64_t swap_mask;
+		} op_m_cswp;
+		struct {
+			uint64_t add;
+			uint64_t nocarry_mask;
+		} op_m_fadd;
+	};
+	u32 op_rkey;
+	u64 op_remote_addr;
+	unsigned int op_notify: 1;
+	unsigned int op_recverr: 1;
+	unsigned int op_mapped: 1;
+	unsigned int op_silent: 1;
+	unsigned int op_active: 1;
+	struct scatterlist *op_sg;
+	struct rds_notifier *op_notifier;
+	struct rds_mr *op_rdma_mr;
+};
+
+struct rm_rdma_op {
+	u32 op_rkey;
+	u64 op_remote_addr;
+	unsigned int op_write: 1;
+	unsigned int op_fence: 1;
+	unsigned int op_notify: 1;
+	unsigned int op_recverr: 1;
+	unsigned int op_mapped: 1;
+	unsigned int op_silent: 1;
+	unsigned int op_active: 1;
+	unsigned int op_bytes;
+	unsigned int op_nents;
+	unsigned int op_count;
+	struct scatterlist *op_sg;
+	struct rds_notifier *op_notifier;
+	struct rds_mr *op_rdma_mr;
+	u64 op_odp_addr;
+	struct rds_mr *op_odp_mr;
+};
+
+struct rds_znotifier;
+
+struct rm_data_op {
+	unsigned int op_active: 1;
+	unsigned int op_nents;
+	unsigned int op_count;
+	unsigned int op_dmasg;
+	unsigned int op_dmaoff;
+	struct rds_znotifier *op_mmp_znotifier;
+	struct scatterlist *op_sg;
+};
+
+struct rds_sock;
+
+struct rds_message {
+	refcount_t m_refcount;
+	struct list_head m_sock_item;
+	struct list_head m_conn_item;
+	struct rds_incoming m_inc;
+	u64 m_ack_seq;
+	struct in6_addr m_daddr;
+	long unsigned int m_flags;
+	spinlock_t m_rs_lock;
+	wait_queue_head_t m_flush_wait;
+	struct rds_sock *m_rs;
+	rds_rdma_cookie_t m_rdma_cookie;
+	unsigned int m_used_sgs;
+	unsigned int m_total_sgs;
+	void *m_final_op;
+	struct {
+		struct rm_atomic_op atomic;
+		struct rm_rdma_op rdma;
+		struct rm_data_op data;
+	};
+	struct rds_conn_path *m_conn_path;
+};
+
+struct rds_transport {
+	char t_name[16];
+	struct list_head t_item;
+	struct module *t_owner;
+	unsigned int t_prefer_loopback: 1;
+	unsigned int t_mp_capable: 1;
+	unsigned int t_type;
+	int (*laddr_check)(struct net *, const struct in6_addr *, __u32);
+	int (*conn_alloc)(struct rds_connection *, gfp_t);
+	void (*conn_free)(void *);
+	int (*conn_path_connect)(struct rds_conn_path *);
+	void (*conn_path_shutdown)(struct rds_conn_path *);
+	void (*xmit_path_prepare)(struct rds_conn_path *);
+	void (*xmit_path_complete)(struct rds_conn_path *);
+	int (*xmit)(struct rds_connection *, struct rds_message *, unsigned int, unsigned int, unsigned int);
+	int (*xmit_rdma)(struct rds_connection *, struct rm_rdma_op *);
+	int (*xmit_atomic)(struct rds_connection *, struct rm_atomic_op *);
+	int (*recv_path)(struct rds_conn_path *);
+	int (*inc_copy_to_user)(struct rds_incoming *, struct iov_iter *);
+	void (*inc_free)(struct rds_incoming *);
+	int (*cm_handle_connect)(struct rdma_cm_id *, struct rdma_cm_event *, bool);
+	int (*cm_initiate_connect)(struct rdma_cm_id *, bool);
+	void (*cm_connect_complete)(struct rds_connection *, struct rdma_cm_event *);
+	unsigned int (*stats_info_copy)(struct rds_info_iterator *, unsigned int);
+	void (*exit)();
+	void * (*get_mr)(struct scatterlist *, long unsigned int, struct rds_sock *, u32 *, struct rds_connection *, u64, u64, int);
+	void (*sync_mr)(void *, int);
+	void (*free_mr)(void *, int);
+	void (*flush_mrs)();
+	bool (*t_unloading)(struct rds_connection *);
+	u8 (*get_tos_map)(u8);
+};
+
+struct rds_mr {
+	struct rb_node r_rb_node;
+	struct kref r_kref;
+	u32 r_key;
+	unsigned int r_use_once: 1;
+	unsigned int r_invalidate: 1;
+	unsigned int r_write: 1;
+	struct rds_sock *r_sock;
+	struct rds_transport *r_trans;
+	void *r_trans_private;
+};
+
+struct rds_msg_zcopy_queue {
+	struct list_head zcookie_head;
+	spinlock_t lock;
+};
+
+struct rds_sock {
+	struct sock rs_sk;
+	u64 rs_user_addr;
+	u64 rs_user_bytes;
+	struct rhash_head rs_bound_node;
+	u8 rs_bound_key[22];
+	struct sockaddr_in6 rs_bound_sin6;
+	struct in6_addr rs_conn_addr;
+	__be16 rs_conn_port;
+	struct rds_transport *rs_transport;
+	struct rds_connection *rs_conn;
+	int rs_congested;
+	int rs_seen_congestion;
+	spinlock_t rs_lock;
+	struct list_head rs_send_queue;
+	u32 rs_snd_bytes;
+	int rs_rcv_bytes;
+	struct list_head rs_notify_queue;
+	uint64_t rs_cong_mask;
+	uint64_t rs_cong_notify;
+	struct list_head rs_cong_list;
+	long unsigned int rs_cong_track;
+	rwlock_t rs_recv_lock;
+	struct list_head rs_recv_queue;
+	struct list_head rs_item;
+	spinlock_t rs_rdma_lock;
+	struct rb_root rs_rdma_keys;
+	unsigned char rs_recverr;
+	unsigned char rs_cong_monitor;
+	u32 rs_hash_initval;
+	u8 rs_rx_traces;
+	u8 rs_rx_trace[3];
+	struct rds_msg_zcopy_queue rs_zcookie_queue;
+	u8 rs_tos;
+};
+
+struct rds_znotifier {
+	struct mmpin z_mmp;
+	u32 z_cookie;
+};
+
+struct rds_notifier {
+	struct list_head n_list;
+	uint64_t n_user_token;
+	int n_status;
+};
+
+struct rds_statistics {
+	uint64_t s_conn_reset;
+	uint64_t s_recv_drop_bad_checksum;
+	uint64_t s_recv_drop_old_seq;
+	uint64_t s_recv_drop_no_sock;
+	uint64_t s_recv_drop_dead_sock;
+	uint64_t s_recv_deliver_raced;
+	uint64_t s_recv_delivered;
+	uint64_t s_recv_queued;
+	uint64_t s_recv_immediate_retry;
+	uint64_t s_recv_delayed_retry;
+	uint64_t s_recv_ack_required;
+	uint64_t s_recv_rdma_bytes;
+	uint64_t s_recv_ping;
+	uint64_t s_send_queue_empty;
+	uint64_t s_send_queue_full;
+	uint64_t s_send_lock_contention;
+	uint64_t s_send_lock_queue_raced;
+	uint64_t s_send_immediate_retry;
+	uint64_t s_send_delayed_retry;
+	uint64_t s_send_drop_acked;
+	uint64_t s_send_ack_required;
+	uint64_t s_send_queued;
+	uint64_t s_send_rdma;
+	uint64_t s_send_rdma_bytes;
+	uint64_t s_send_pong;
+	uint64_t s_page_remainder_hit;
+	uint64_t s_page_remainder_miss;
+	uint64_t s_copy_to_user;
+	uint64_t s_copy_from_user;
+	uint64_t s_cong_update_queued;
+	uint64_t s_cong_update_received;
+	uint64_t s_cong_send_error;
+	uint64_t s_cong_send_blocked;
+	uint64_t s_recv_bytes_added_to_socket;
+	uint64_t s_recv_bytes_removed_from_socket;
+	uint64_t s_send_stuck_rm;
+};
+
+struct rds_info_message {
+	__u64 seq;
+	__u32 len;
+	__be32 laddr;
+	__be32 faddr;
+	__be16 lport;
+	__be16 fport;
+	__u8 flags;
+	__u8 tos;
+} __attribute__((packed));
+
+struct rds6_info_message {
+	__u64 seq;
+	__u32 len;
+	struct in6_addr laddr;
+	struct in6_addr faddr;
+	__be16 lport;
+	__be16 fport;
+	__u8 flags;
+	__u8 tos;
+} __attribute__((packed));
+
+struct rds_cmsg_rx_trace {
+	__u8 rx_traces;
+	__u8 rx_trace_pos[3];
+	__u64 rx_trace[3];
+};
+
+struct rds_rdma_notify {
+	__u64 user_token;
+	__s32 status;
+};
+
+struct rds_zcopy_cookies {
+	__u32 num;
+	__u32 cookies[8];
+};
+
+struct rds_ext_header_version {
+	__be32 h_version;
+};
+
+struct rds_ext_header_rdma {
+	__be32 h_rdma_rkey;
+};
+
+struct rds_ext_header_rdma_dest {
+	__be32 h_rdma_rkey;
+	__be32 h_rdma_offset;
+};
+
+struct rds_msg_zcopy_info {
+	struct list_head rs_zcookie_next;
+	union {
+		struct rds_znotifier znotif;
+		struct rds_zcopy_cookies zcookies;
+	};
+};
+
+enum nl80211_iftype {
+	NL80211_IFTYPE_UNSPECIFIED = 0,
+	NL80211_IFTYPE_ADHOC = 1,
+	NL80211_IFTYPE_STATION = 2,
+	NL80211_IFTYPE_AP = 3,
+	NL80211_IFTYPE_AP_VLAN = 4,
+	NL80211_IFTYPE_WDS = 5,
+	NL80211_IFTYPE_MONITOR = 6,
+	NL80211_IFTYPE_MESH_POINT = 7,
+	NL80211_IFTYPE_P2P_CLIENT = 8,
+	NL80211_IFTYPE_P2P_GO = 9,
+	NL80211_IFTYPE_P2P_DEVICE = 10,
+	NL80211_IFTYPE_OCB = 11,
+	NL80211_IFTYPE_NAN = 12,
+	NUM_NL80211_IFTYPES = 13,
+	NL80211_IFTYPE_MAX = 12,
+};
+
+struct cfg80211_conn;
+
+struct cfg80211_cached_keys;
+
+enum ieee80211_bss_type {
+	IEEE80211_BSS_TYPE_ESS = 0,
+	IEEE80211_BSS_TYPE_PBSS = 1,
+	IEEE80211_BSS_TYPE_IBSS = 2,
+	IEEE80211_BSS_TYPE_MBSS = 3,
+	IEEE80211_BSS_TYPE_ANY = 4,
+};
+
+enum nl80211_chan_width {
+	NL80211_CHAN_WIDTH_20_NOHT = 0,
+	NL80211_CHAN_WIDTH_20 = 1,
+	NL80211_CHAN_WIDTH_40 = 2,
+	NL80211_CHAN_WIDTH_80 = 3,
+	NL80211_CHAN_WIDTH_80P80 = 4,
+	NL80211_CHAN_WIDTH_160 = 5,
+	NL80211_CHAN_WIDTH_5 = 6,
+	NL80211_CHAN_WIDTH_10 = 7,
+	NL80211_CHAN_WIDTH_1 = 8,
+	NL80211_CHAN_WIDTH_2 = 9,
+	NL80211_CHAN_WIDTH_4 = 10,
+	NL80211_CHAN_WIDTH_8 = 11,
+	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
+};
+
+enum ieee80211_edmg_bw_config {
+	IEEE80211_EDMG_BW_CONFIG_4 = 4,
+	IEEE80211_EDMG_BW_CONFIG_5 = 5,
+	IEEE80211_EDMG_BW_CONFIG_6 = 6,
+	IEEE80211_EDMG_BW_CONFIG_7 = 7,
+	IEEE80211_EDMG_BW_CONFIG_8 = 8,
+	IEEE80211_EDMG_BW_CONFIG_9 = 9,
+	IEEE80211_EDMG_BW_CONFIG_10 = 10,
+	IEEE80211_EDMG_BW_CONFIG_11 = 11,
+	IEEE80211_EDMG_BW_CONFIG_12 = 12,
+	IEEE80211_EDMG_BW_CONFIG_13 = 13,
+	IEEE80211_EDMG_BW_CONFIG_14 = 14,
+	IEEE80211_EDMG_BW_CONFIG_15 = 15,
+};
+
+struct ieee80211_edmg {
+	u8 channels;
+	enum ieee80211_edmg_bw_config bw_config;
+};
+
+struct ieee80211_channel;
+
+struct cfg80211_chan_def {
+	struct ieee80211_channel *chan;
+	enum nl80211_chan_width width;
+	u32 center_freq1;
+	u32 center_freq2;
+	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
+};
+
+struct ieee80211_mcs_info {
+	u8 rx_mask[10];
+	__le16 rx_highest;
+	u8 tx_params;
+	u8 reserved[3];
+};
+
+struct ieee80211_ht_cap {
+	__le16 cap_info;
+	u8 ampdu_params_info;
+	struct ieee80211_mcs_info mcs;
+	__le16 extended_ht_cap_info;
+	__le32 tx_BF_cap_info;
+	u8 antenna_selection_info;
+} __attribute__((packed));
+
+struct key_params;
+
+struct cfg80211_ibss_params {
+	const u8 *ssid;
+	const u8 *bssid;
+	struct cfg80211_chan_def chandef;
+	const u8 *ie;
+	u8 ssid_len;
+	u8 ie_len;
+	u16 beacon_interval;
+	u32 basic_rates;
+	bool channel_fixed;
+	bool privacy;
+	bool control_port;
+	bool control_port_over_nl80211;
+	bool userspace_handles_dfs;
+	int: 24;
+	int mcast_rate[6];
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	int: 32;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	int: 32;
+} __attribute__((packed));
+
+enum nl80211_auth_type {
+	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
+	NL80211_AUTHTYPE_SHARED_KEY = 1,
+	NL80211_AUTHTYPE_FT = 2,
+	NL80211_AUTHTYPE_NETWORK_EAP = 3,
+	NL80211_AUTHTYPE_SAE = 4,
+	NL80211_AUTHTYPE_FILS_SK = 5,
+	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
+	NL80211_AUTHTYPE_FILS_PK = 7,
+	__NL80211_AUTHTYPE_NUM = 8,
+	NL80211_AUTHTYPE_MAX = 7,
+	NL80211_AUTHTYPE_AUTOMATIC = 8,
+};
+
+enum nl80211_mfp {
+	NL80211_MFP_NO = 0,
+	NL80211_MFP_REQUIRED = 1,
+	NL80211_MFP_OPTIONAL = 2,
+};
+
+enum nl80211_sae_pwe_mechanism {
+	NL80211_SAE_PWE_UNSPECIFIED = 0,
+	NL80211_SAE_PWE_HUNT_AND_PECK = 1,
+	NL80211_SAE_PWE_HASH_TO_ELEMENT = 2,
+	NL80211_SAE_PWE_BOTH = 3,
+};
+
+struct cfg80211_crypto_settings {
+	u32 wpa_versions;
+	u32 cipher_group;
+	int n_ciphers_pairwise;
+	u32 ciphers_pairwise[5];
+	int n_akm_suites;
+	u32 akm_suites[10];
+	bool control_port;
+	__be16 control_port_ethertype;
+	bool control_port_no_encrypt;
+	bool control_port_over_nl80211;
+	bool control_port_no_preauth;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	const u8 *psk;
+	const u8 *sae_pwd;
+	u8 sae_pwd_len;
+	enum nl80211_sae_pwe_mechanism sae_pwe;
+};
+
+struct ieee80211_vht_mcs_info {
+	__le16 rx_mcs_map;
+	__le16 rx_highest;
+	__le16 tx_mcs_map;
+	__le16 tx_highest;
+};
+
+struct ieee80211_vht_cap {
+	__le32 vht_cap_info;
+	struct ieee80211_vht_mcs_info supp_mcs;
+};
+
+enum nl80211_bss_select_attr {
+	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
+	NL80211_BSS_SELECT_ATTR_RSSI = 1,
+	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
+	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
+	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
+	NL80211_BSS_SELECT_ATTR_MAX = 3,
+};
+
+enum nl80211_band {
+	NL80211_BAND_2GHZ = 0,
+	NL80211_BAND_5GHZ = 1,
+	NL80211_BAND_60GHZ = 2,
+	NL80211_BAND_6GHZ = 3,
+	NL80211_BAND_S1GHZ = 4,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
+};
+
+struct cfg80211_bss_select_adjust {
+	enum nl80211_band band;
+	s8 delta;
+};
+
+struct cfg80211_bss_selection {
+	enum nl80211_bss_select_attr behaviour;
+	union {
+		enum nl80211_band band_pref;
+		struct cfg80211_bss_select_adjust adjust;
+	} param;
+};
+
+struct cfg80211_connect_params {
+	struct ieee80211_channel *channel;
+	struct ieee80211_channel *channel_hint;
+	const u8 *bssid;
+	const u8 *bssid_hint;
+	const u8 *ssid;
+	size_t ssid_len;
+	enum nl80211_auth_type auth_type;
+	int: 32;
+	const u8 *ie;
+	size_t ie_len;
+	bool privacy;
+	int: 24;
+	enum nl80211_mfp mfp;
+	struct cfg80211_crypto_settings crypto;
+	const u8 *key;
+	u8 key_len;
+	u8 key_idx;
+	short: 16;
+	u32 flags;
+	int bg_scan_period;
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	struct ieee80211_vht_cap vht_capa;
+	struct ieee80211_vht_cap vht_capa_mask;
+	bool pbss;
+	int: 24;
+	struct cfg80211_bss_selection bss_select;
+	const u8 *prev_bssid;
+	const u8 *fils_erp_username;
+	size_t fils_erp_username_len;
+	const u8 *fils_erp_realm;
+	size_t fils_erp_realm_len;
+	u16 fils_erp_next_seq_num;
+	long: 48;
+	const u8 *fils_erp_rrk;
+	size_t fils_erp_rrk_len;
+	bool want_1x;
+	int: 24;
+	struct ieee80211_edmg edmg;
+	int: 32;
+} __attribute__((packed));
+
+struct cfg80211_cqm_config;
+
+struct cfg80211_internal_bss;
+
+struct wiphy;
+
+struct wireless_dev {
+	struct wiphy *wiphy;
+	enum nl80211_iftype iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	u32 identifier;
+	struct list_head mgmt_registrations;
+	u8 mgmt_registrations_need_update: 1;
+	struct mutex mtx;
+	bool use_4addr;
+	bool is_running;
+	bool registered;
+	bool registering;
+	u8 address[6];
+	struct cfg80211_conn *conn;
+	struct cfg80211_cached_keys *connect_keys;
+	enum ieee80211_bss_type conn_bss_type;
+	u32 conn_owner_nlportid;
+	struct work_struct disconnect_wk;
+	u8 disconnect_bssid[6];
+	struct list_head event_list;
+	spinlock_t event_lock;
+	u8 connected: 1;
+	bool ps;
+	int ps_timeout;
+	u32 ap_unexpected_nlportid;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	bool cac_started;
+	long unsigned int cac_start_time;
+	unsigned int cac_time_ms;
+	struct {
+		struct cfg80211_ibss_params ibss;
+		struct cfg80211_connect_params connect;
+		struct cfg80211_cached_keys *keys;
+		const u8 *ie;
+		size_t ie_len;
+		u8 bssid[6];
+		u8 prev_bssid[6];
+		u8 ssid[32];
+		s8 default_key;
+		s8 default_mgmt_key;
+		bool prev_bssid_valid;
+	} wext;
+	struct cfg80211_cqm_config *cqm_config;
+	struct list_head pmsr_list;
+	spinlock_t pmsr_lock;
+	struct work_struct pmsr_free_wk;
+	long unsigned int unprot_beacon_reported;
+	union {
+		struct {
+			u8 connected_addr[6];
+			u8 ssid[32];
+			u8 ssid_len;
+			char: 8;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[32];
+			u8 id_len;
+			u8 id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+	struct {
+		u8 addr[6];
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[15];
+	u16 valid_links;
+};
+
+struct iw_encode_ext {
+	__u32 ext_flags;
+	__u8 tx_seq[8];
+	__u8 rx_seq[8];
+	struct sockaddr addr;
+	__u16 alg;
+	__u16 key_len;
+	__u8 key[0];
+};
+
+struct iwreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union iwreq_data u;
+};
+
+struct iw_event {
+	__u16 len;
+	__u16 cmd;
+	union iwreq_data u;
+};
+
+enum nl80211_reg_initiator {
+	NL80211_REGDOM_SET_BY_CORE = 0,
+	NL80211_REGDOM_SET_BY_USER = 1,
+	NL80211_REGDOM_SET_BY_DRIVER = 2,
+	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
+};
+
+enum nl80211_dfs_regions {
+	NL80211_DFS_UNSET = 0,
+	NL80211_DFS_FCC = 1,
+	NL80211_DFS_ETSI = 2,
+	NL80211_DFS_JP = 3,
+};
+
+enum nl80211_user_reg_hint_type {
+	NL80211_USER_REG_HINT_USER = 0,
+	NL80211_USER_REG_HINT_CELL_BASE = 1,
+	NL80211_USER_REG_HINT_INDOOR = 2,
+};
+
+enum nl80211_mntr_flags {
+	__NL80211_MNTR_FLAG_INVALID = 0,
+	NL80211_MNTR_FLAG_FCSFAIL = 1,
+	NL80211_MNTR_FLAG_PLCPFAIL = 2,
+	NL80211_MNTR_FLAG_CONTROL = 3,
+	NL80211_MNTR_FLAG_OTHER_BSS = 4,
+	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
+	NL80211_MNTR_FLAG_ACTIVE = 6,
+	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
+	NL80211_MNTR_FLAG_MAX = 6,
+};
+
+enum nl80211_key_mode {
+	NL80211_KEY_RX_TX = 0,
+	NL80211_KEY_NO_TX = 1,
+	NL80211_KEY_SET_TX = 2,
+};
+
+enum nl80211_bss_scan_width {
+	NL80211_BSS_CHAN_WIDTH_20 = 0,
+	NL80211_BSS_CHAN_WIDTH_10 = 1,
+	NL80211_BSS_CHAN_WIDTH_5 = 2,
+	NL80211_BSS_CHAN_WIDTH_1 = 3,
+	NL80211_BSS_CHAN_WIDTH_2 = 4,
+};
+
+struct nl80211_wowlan_tcp_data_seq {
+	__u32 start;
+	__u32 offset;
+	__u32 len;
+};
+
+struct nl80211_wowlan_tcp_data_token {
+	__u32 offset;
+	__u32 len;
+	__u8 token_stream[0];
+};
+
+struct nl80211_wowlan_tcp_data_token_feature {
+	__u32 min_len;
+	__u32 max_len;
+	__u32 bufsize;
+};
+
+enum nl80211_ext_feature_index {
+	NL80211_EXT_FEATURE_VHT_IBSS = 0,
+	NL80211_EXT_FEATURE_RRM = 1,
+	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
+	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
+	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
+	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
+	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
+	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
+	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
+	NL80211_EXT_FEATURE_FILS_STA = 9,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
+	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
+	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
+	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
+	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
+	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
+	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
+	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
+	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
+	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
+	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
+	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_TXQS = 28,
+	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
+	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
+	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
+	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
+	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
+	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
+	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
+	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
+	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
+	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
+	NL80211_EXT_FEATURE_AQL = 40,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
+	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
+	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
+	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
+	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
+	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
+	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
+	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
+	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
+	NL80211_EXT_FEATURE_BEACON_RATE_HE = 54,
+	NL80211_EXT_FEATURE_SECURE_LTF = 55,
+	NL80211_EXT_FEATURE_SECURE_RTT = 56,
+	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 57,
+	NL80211_EXT_FEATURE_BSS_COLOR = 58,
+	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD = 59,
+	NL80211_EXT_FEATURE_RADAR_BACKGROUND = 60,
+	NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 61,
+	NUM_NL80211_EXT_FEATURES = 62,
+	MAX_NL80211_EXT_FEATURES = 61,
+};
+
+enum nl80211_dfs_state {
+	NL80211_DFS_USABLE = 0,
+	NL80211_DFS_UNAVAILABLE = 1,
+	NL80211_DFS_AVAILABLE = 2,
+};
+
+struct nl80211_vendor_cmd_info {
+	__u32 vendor_id;
+	__u32 subcmd;
+};
+
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
+struct ieee80211_he_cap_elem {
+	u8 mac_cap_info[6];
+	u8 phy_cap_info[11];
+};
+
+struct ieee80211_he_mcs_nss_supp {
+	__le16 rx_mcs_80;
+	__le16 tx_mcs_80;
+	__le16 rx_mcs_160;
+	__le16 tx_mcs_160;
+	__le16 rx_mcs_80p80;
+	__le16 tx_mcs_80p80;
+};
+
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	u8 rx_tx_mcs7_max_nss;
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
+struct ieee80211_he_6ghz_capa {
+	__le16 capa;
+};
+
+struct rfkill;
+
+enum environment_cap {
+	ENVIRON_ANY = 0,
+	ENVIRON_INDOOR = 1,
+	ENVIRON_OUTDOOR = 2,
+};
+
+struct regulatory_request {
+	struct callback_head callback_head;
+	int wiphy_idx;
+	enum nl80211_reg_initiator initiator;
+	enum nl80211_user_reg_hint_type user_reg_hint_type;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	bool intersect;
+	bool processed;
+	enum environment_cap country_ie_env;
+	struct list_head list;
+};
+
+struct ieee80211_freq_range {
+	u32 start_freq_khz;
+	u32 end_freq_khz;
+	u32 max_bandwidth_khz;
+};
+
+struct ieee80211_power_rule {
+	u32 max_antenna_gain;
+	u32 max_eirp;
+};
+
+struct ieee80211_wmm_ac {
+	u16 cw_min;
+	u16 cw_max;
+	u16 cot;
+	u8 aifsn;
+};
+
+struct ieee80211_wmm_rule {
+	struct ieee80211_wmm_ac client[4];
+	struct ieee80211_wmm_ac ap[4];
+};
+
+struct ieee80211_reg_rule {
+	struct ieee80211_freq_range freq_range;
+	struct ieee80211_power_rule power_rule;
+	struct ieee80211_wmm_rule wmm_rule;
+	u32 flags;
+	u32 dfs_cac_ms;
+	bool has_wmm;
+};
+
+struct ieee80211_regdomain {
+	struct callback_head callback_head;
+	u32 n_reg_rules;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	struct ieee80211_reg_rule reg_rules[0];
+};
+
+struct ieee80211_channel {
+	enum nl80211_band band;
+	u32 center_freq;
+	u16 freq_offset;
+	u16 hw_value;
+	u32 flags;
+	int max_antenna_gain;
+	int max_power;
+	int max_reg_power;
+	bool beacon_found;
+	u32 orig_flags;
+	int orig_mag;
+	int orig_mpwr;
+	enum nl80211_dfs_state dfs_state;
+	long unsigned int dfs_state_entered;
+	unsigned int dfs_cac_ms;
+};
+
+struct ieee80211_rate {
+	u32 flags;
+	u16 bitrate;
+	u16 hw_value;
+	u16 hw_value_short;
+};
+
+struct ieee80211_sta_ht_cap {
+	u16 cap;
+	bool ht_supported;
+	u8 ampdu_factor;
+	u8 ampdu_density;
+	struct ieee80211_mcs_info mcs;
+	char: 8;
+} __attribute__((packed));
+
+struct ieee80211_sta_vht_cap {
+	bool vht_supported;
+	u32 cap;
+	struct ieee80211_vht_mcs_info vht_mcs;
+};
+
+struct ieee80211_sta_he_cap {
+	bool has_he;
+	struct ieee80211_he_cap_elem he_cap_elem;
+	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
+	u8 ppe_thres[25];
+} __attribute__((packed));
+
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
+struct ieee80211_sband_iftype_data {
+	u16 types_mask;
+	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
+} __attribute__((packed));
+
+struct ieee80211_sta_s1g_cap {
+	bool s1g;
+	u8 cap[10];
+	u8 nss_mcs[5];
+};
+
+struct ieee80211_supported_band {
+	struct ieee80211_channel *channels;
+	struct ieee80211_rate *bitrates;
+	enum nl80211_band band;
+	int n_channels;
+	int n_bitrates;
+	struct ieee80211_sta_ht_cap ht_cap;
+	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_s1g_cap s1g_cap;
+	struct ieee80211_edmg edmg_cap;
+	u16 n_iftype_data;
+	const struct ieee80211_sband_iftype_data *iftype_data;
+};
+
+struct key_params {
+	const u8 *key;
+	const u8 *seq;
+	int key_len;
+	int seq_len;
+	u16 vlan_id;
+	u32 cipher;
+	enum nl80211_key_mode mode;
+};
+
+struct mac_address {
+	u8 addr[6];
+};
+
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
+struct cfg80211_ssid {
+	u8 ssid[32];
+	u8 ssid_len;
+};
+
+enum cfg80211_signal_type {
+	CFG80211_SIGNAL_TYPE_NONE = 0,
+	CFG80211_SIGNAL_TYPE_MBM = 1,
+	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+};
+
+struct ieee80211_txrx_stypes;
+
+struct ieee80211_iface_combination;
+
+struct wiphy_iftype_akm_suites;
+
+struct wiphy_wowlan_support;
+
+struct cfg80211_wowlan;
+
+struct wiphy_iftype_ext_capab;
+
+struct wiphy_coalesce_support;
+
+struct wiphy_vendor_command;
+
+struct cfg80211_pmsr_capabilities;
+
+struct wiphy {
+	struct mutex mtx;
+	u8 perm_addr[6];
+	u8 addr_mask[6];
+	struct mac_address *addresses;
+	const struct ieee80211_txrx_stypes *mgmt_stypes;
+	const struct ieee80211_iface_combination *iface_combinations;
+	int n_iface_combinations;
+	u16 software_iftypes;
+	u16 n_addresses;
+	u16 interface_modes;
+	u16 max_acl_mac_addrs;
+	u32 flags;
+	u32 regulatory_flags;
+	u32 features;
+	u8 ext_features[8];
+	u32 ap_sme_capa;
+	enum cfg80211_signal_type signal_type;
+	int bss_priv_size;
+	u8 max_scan_ssids;
+	u8 max_sched_scan_reqs;
+	u8 max_sched_scan_ssids;
+	u8 max_match_sets;
+	u16 max_scan_ie_len;
+	u16 max_sched_scan_ie_len;
+	u32 max_sched_scan_plans;
+	u32 max_sched_scan_plan_interval;
+	u32 max_sched_scan_plan_iterations;
+	int n_cipher_suites;
+	const u32 *cipher_suites;
+	int n_akm_suites;
+	const u32 *akm_suites;
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+	u8 retry_short;
+	u8 retry_long;
+	u32 frag_threshold;
+	u32 rts_threshold;
+	u8 coverage_class;
+	char fw_version[32];
+	u32 hw_version;
+	const struct wiphy_wowlan_support *wowlan;
+	struct cfg80211_wowlan *wowlan_config;
+	u16 max_remain_on_channel_duration;
+	u8 max_num_pmkids;
+	u32 available_antennas_tx;
+	u32 available_antennas_rx;
+	u32 probe_resp_offload;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+	unsigned int num_iftype_ext_capab;
+	const void *privid;
+	struct ieee80211_supported_band *bands[6];
+	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
+	const struct ieee80211_regdomain *regd;
+	struct device dev;
+	bool registered;
+	struct dentry *debugfsdir;
+	const struct ieee80211_ht_cap *ht_capa_mod_mask;
+	const struct ieee80211_vht_cap *vht_capa_mod_mask;
+	struct list_head wdev_list;
+	possible_net_t _net;
+	const struct iw_handler_def *wext;
+	const struct wiphy_coalesce_support *coalesce;
+	const struct wiphy_vendor_command *vendor_commands;
+	const struct nl80211_vendor_cmd_info *vendor_events;
+	int n_vendor_commands;
+	int n_vendor_events;
+	u16 max_ap_assoc_sta;
+	u8 max_num_csa_counters;
+	u32 bss_select_support;
+	u8 nan_supported_bands;
+	u32 txq_limit;
+	u32 txq_memory_limit;
+	u32 txq_quantum;
+	long unsigned int tx_queue_len;
+	u8 support_mbssid: 1;
+	u8 support_only_he_mbssid: 1;
+	const struct cfg80211_pmsr_capabilities *pmsr_capa;
+	struct {
+		u64 peer;
+		u64 vif;
+		u8 max_retry;
+	} tid_config_support;
+	u8 max_data_retry_count;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	u16 max_num_akm_suites;
+	int: 32;
+	char priv[0];
+};
+
+struct cfg80211_match_set {
+	struct cfg80211_ssid ssid;
+	u8 bssid[6];
+	s32 rssi_thold;
+	s32 per_band_rssi_thold[6];
+};
+
+struct cfg80211_sched_scan_plan {
+	u32 interval;
+	u32 iterations;
+};
+
+struct cfg80211_sched_scan_request {
+	u64 reqid;
+	struct cfg80211_ssid *ssids;
+	int n_ssids;
+	u32 n_channels;
+	enum nl80211_bss_scan_width scan_width;
+	const u8 *ie;
+	size_t ie_len;
+	u32 flags;
+	struct cfg80211_match_set *match_sets;
+	int n_match_sets;
+	s32 min_rssi_thold;
+	u32 delay;
+	struct cfg80211_sched_scan_plan *scan_plans;
+	int n_scan_plans;
+	u8 mac_addr[6];
+	u8 mac_addr_mask[6];
+	bool relative_rssi_set;
+	s8 relative_rssi;
+	struct cfg80211_bss_select_adjust rssi_adjust;
+	struct wiphy *wiphy;
+	struct net_device *dev;
+	long unsigned int scan_start;
+	bool report_results;
+	struct callback_head callback_head;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	struct list_head list;
+	struct ieee80211_channel *channels[0];
+};
+
+struct cfg80211_pkt_pattern {
+	const u8 *mask;
+	const u8 *pattern;
+	int pattern_len;
+	int pkt_offset;
+};
+
+struct cfg80211_wowlan_tcp {
+	struct socket *sock;
+	__be32 src;
+	__be32 dst;
+	u16 src_port;
+	u16 dst_port;
+	u8 dst_mac[6];
+	int payload_len;
+	const u8 *payload;
+	struct nl80211_wowlan_tcp_data_seq payload_seq;
+	u32 data_interval;
+	u32 wake_len;
+	const u8 *wake_data;
+	const u8 *wake_mask;
+	u32 tokens_size;
+	struct nl80211_wowlan_tcp_data_token payload_tok;
+};
+
+struct cfg80211_wowlan {
+	bool any;
+	bool disconnect;
+	bool magic_pkt;
+	bool gtk_rekey_failure;
+	bool eap_identity_req;
+	bool four_way_handshake;
+	bool rfkill_release;
+	struct cfg80211_pkt_pattern *patterns;
+	struct cfg80211_wowlan_tcp *tcp;
+	int n_patterns;
+	struct cfg80211_sched_scan_request *nd_config;
+};
+
+struct ieee80211_iface_limit {
+	u16 max;
+	u16 types;
+};
+
+struct ieee80211_iface_combination {
+	const struct ieee80211_iface_limit *limits;
+	u32 num_different_channels;
+	u16 max_interfaces;
+	u8 n_limits;
+	bool beacon_int_infra_match;
+	u8 radar_detect_widths;
+	u8 radar_detect_regions;
+	u32 beacon_int_min_gcd;
+};
+
+struct ieee80211_txrx_stypes {
+	u16 tx;
+	u16 rx;
+};
+
+struct wiphy_wowlan_tcp_support {
+	const struct nl80211_wowlan_tcp_data_token_feature *tok;
+	u32 data_payload_max;
+	u32 data_interval_max;
+	u32 wake_payload_max;
+	bool seq;
+};
+
+struct wiphy_wowlan_support {
+	u32 flags;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+	int max_nd_match_sets;
+	const struct wiphy_wowlan_tcp_support *tcp;
+};
+
+struct wiphy_coalesce_support {
+	int n_rules;
+	int max_delay;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+};
+
+struct wiphy_vendor_command {
+	struct nl80211_vendor_cmd_info info;
+	u32 flags;
+	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
+	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+};
+
+struct wiphy_iftype_ext_capab {
+	enum nl80211_iftype iftype;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	u16 eml_capabilities;
+	u16 mld_capa_and_ops;
+};
+
+struct cfg80211_pmsr_capabilities {
+	unsigned int max_peers;
+	u8 report_ap_tsf: 1;
+	u8 randomize_mac_addr: 1;
+	struct {
+		u32 preambles;
+		u32 bandwidths;
+		s8 max_bursts_exponent;
+		u8 max_ftms_per_burst;
+		u8 supported: 1;
+		u8 asap: 1;
+		u8 non_asap: 1;
+		u8 request_lci: 1;
+		u8 request_civicloc: 1;
+		u8 trigger_based: 1;
+		u8 non_trigger_based: 1;
+	} ftm;
+};
+
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+struct iw_ioctl_description {
+	__u8 header_type;
+	__u8 token_type;
+	__u16 token_size;
+	__u16 min_tokens;
+	__u16 max_tokens;
+	__u32 flags;
+};
+
+typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
+
+enum caif_ctrlcmd {
+	CAIF_CTRLCMD_FLOW_OFF_IND = 0,
+	CAIF_CTRLCMD_FLOW_ON_IND = 1,
+	CAIF_CTRLCMD_REMOTE_SHUTDOWN_IND = 2,
+	CAIF_CTRLCMD_INIT_RSP = 3,
+	CAIF_CTRLCMD_DEINIT_RSP = 4,
+	CAIF_CTRLCMD_INIT_FAIL_RSP = 5,
+	_CAIF_CTRLCMD_PHYIF_FLOW_OFF_IND = 6,
+	_CAIF_CTRLCMD_PHYIF_FLOW_ON_IND = 7,
+	_CAIF_CTRLCMD_PHYIF_DOWN_IND = 8,
+};
+
+enum caif_modemcmd {
+	CAIF_MODEMCMD_FLOW_ON_REQ = 0,
+	CAIF_MODEMCMD_FLOW_OFF_REQ = 1,
+	_CAIF_MODEMCMD_PHYIF_USEFULL = 3,
+	_CAIF_MODEMCMD_PHYIF_USELESS = 4,
+};
+
+struct cfpkt;
+
+struct cflayer {
+	struct cflayer *up;
+	struct cflayer *dn;
+	struct list_head node;
+	int (*receive)(struct cflayer *, struct cfpkt *);
+	int (*transmit)(struct cflayer *, struct cfpkt *);
+	void (*ctrlcmd)(struct cflayer *, enum caif_ctrlcmd, int);
+	int (*modemcmd)(struct cflayer *, enum caif_modemcmd);
+	unsigned int id;
+	char name[16];
+};
+
+struct dev_info {
+	void *dev;
+	unsigned int id;
+};
+
+struct caif_payload_info {
+	struct dev_info *dev_info;
+	short unsigned int hdr_len;
+	short unsigned int channel_id;
+};
+
+struct cfsrvl {
+	struct cflayer layer;
+	bool open;
+	bool phy_flow_on;
+	bool modem_flow_on;
+	bool supports_flowctrl;
+	void (*release)(struct cflayer *);
+	struct dev_info dev_info;
+	void (*hold)(struct cflayer *);
+	void (*put)(struct cflayer *);
+	struct callback_head rcu;
+};
+
+enum cfctrl_cmd {
+	CFCTRL_CMD_LINK_SETUP = 0,
+	CFCTRL_CMD_LINK_DESTROY = 1,
+	CFCTRL_CMD_LINK_ERR = 2,
+	CFCTRL_CMD_ENUM = 3,
+	CFCTRL_CMD_SLEEP = 4,
+	CFCTRL_CMD_WAKE = 5,
+	CFCTRL_CMD_LINK_RECONF = 6,
+	CFCTRL_CMD_START_REASON = 7,
+	CFCTRL_CMD_RADIO_SET = 8,
+	CFCTRL_CMD_MODEM_SET = 9,
+	CFCTRL_CMD_MASK = 15,
+};
+
+enum cfctrl_srv {
+	CFCTRL_SRV_DECM = 0,
+	CFCTRL_SRV_VEI = 1,
+	CFCTRL_SRV_VIDEO = 2,
+	CFCTRL_SRV_DBG = 3,
+	CFCTRL_SRV_DATAGRAM = 4,
+	CFCTRL_SRV_RFM = 5,
+	CFCTRL_SRV_UTIL = 6,
+	CFCTRL_SRV_MASK = 15,
+};
+
+struct cfctrl_rsp {
+	void (*linksetup_rsp)(struct cflayer *, u8, enum cfctrl_srv, u8, struct cflayer *);
+	void (*linkdestroy_rsp)(struct cflayer *, u8);
+	void (*linkerror_ind)();
+	void (*enum_rsp)();
+	void (*sleep_rsp)();
+	void (*wake_rsp)();
+	void (*restart_rsp)();
+	void (*radioset_rsp)();
+	void (*reject_rsp)(struct cflayer *, u8, struct cflayer *);
+};
+
+struct cfctrl_link_param {
+	enum cfctrl_srv linktype;
+	u8 priority;
+	u8 phyid;
+	u8 endpoint;
+	u8 chtype;
+	union {
+		struct {
+			u8 connid;
+		} video;
+		struct {
+			u32 connid;
+		} datagram;
+		struct {
+			u32 connid;
+			char volume[20];
+		} rfm;
+		struct {
+			u16 fifosize_kb;
+			u16 fifosize_bufs;
+			char name[16];
+			u8 params[255];
+			u16 paramlen;
+		} utility;
+	} u;
+};
+
+struct cfctrl_request_info {
+	int sequence_no;
+	enum cfctrl_cmd cmd;
+	u8 channel_id;
+	struct cfctrl_link_param param;
+	struct cflayer *client_layer;
+	struct list_head list;
+};
+
+struct cfctrl {
+	struct cfsrvl serv;
+	struct cfctrl_rsp res;
+	atomic_t req_seq_no;
+	atomic_t rsp_seq_no;
+	struct list_head list;
+	spinlock_t info_list_lock;
+	u8 loop_linkid;
+	int loop_linkused[256];
+	spinlock_t loop_linkid_lock;
+};
+
+struct cffrml {
+	struct cflayer layer;
+	bool dofcs;
+	int *pcpu_refcnt;
+};
+
+enum caif_link_selector {
+	CAIF_LINK_HIGH_BANDW = 0,
+	CAIF_LINK_LOW_LATENCY = 1,
+};
+
+enum caif_channel_priority {
+	CAIF_PRIO_MIN = 1,
+	CAIF_PRIO_LOW = 4,
+	CAIF_PRIO_NORMAL = 15,
+	CAIF_PRIO_HIGH = 20,
+	CAIF_PRIO_MAX = 31,
+};
+
+enum caif_protocol_type {
+	CAIFPROTO_AT = 0,
+	CAIFPROTO_DATAGRAM = 1,
+	CAIFPROTO_DATAGRAM_LOOP = 2,
+	CAIFPROTO_UTIL = 3,
+	CAIFPROTO_RFM = 4,
+	CAIFPROTO_DEBUG = 5,
+	_CAIFPROTO_MAX = 6,
+};
+
+struct sockaddr_caif {
+	__kernel_sa_family_t family;
+	union {
+		struct {
+			__u8 type;
+		} at;
+		struct {
+			char service[16];
+		} util;
+		union {
+			__u32 connection_id;
+			__u8 nsapi;
+		} dgm;
+		struct {
+			__u32 connection_id;
+			char volume[16];
+		} rfm;
+		struct {
+			__u8 type;
+			__u8 service;
+		} dbg;
+	} u;
+};
+
+enum caif_socket_opts {
+	CAIFSO_LINK_SELECT = 127,
+	CAIFSO_REQ_PARAM = 128,
+	CAIFSO_RSP_PARAM = 129,
+};
+
+enum caif_direction {
+	CAIF_DIR_IN = 0,
+	CAIF_DIR_OUT = 1,
+};
+
+struct caif_param {
+	u16 size;
+	u8 data[256];
+};
+
+struct caif_connect_request {
+	enum caif_protocol_type protocol;
+	struct sockaddr_caif sockaddr;
+	enum caif_channel_priority priority;
+	enum caif_link_selector link_selector;
+	int ifindex;
+	struct caif_param param;
+};
+
+enum caif_states {
+	CAIF_CONNECTED = 1,
+	CAIF_CONNECTING = 2,
+	CAIF_DISCONNECTED = 7,
+};
+
+struct caifsock {
+	struct sock sk;
+	struct cflayer layer;
+	long unsigned int flow_state;
+	struct caif_connect_request conn_req;
+	struct mutex readlock;
+	struct dentry *debugfs_socket_dir;
+	int headroom;
+	int tailroom;
+	int maxframe;
+};
+
+enum l3mdev_type {
+	L3MDEV_TYPE_UNSPEC = 0,
+	L3MDEV_TYPE_VRF = 1,
+	__L3MDEV_TYPE_MAX = 2,
+};
+
+typedef int (*lookup_by_table_id_t)(struct net *, u32);
+
+struct l3mdev_handler {
+	lookup_by_table_id_t dev_lookup;
+};
+
+struct xdp_ring;
+
+struct xsk_queue {
+	u32 ring_mask;
+	u32 nentries;
+	u32 cached_prod;
+	u32 cached_cons;
+	struct xdp_ring *ring;
+	u64 invalid_descs;
+	u64 queue_empty_descs;
+};
+
+struct xdp_ring {
+	u32 producer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad1;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consumer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad3;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_rxtx_ring {
+	struct xdp_ring ptrs;
+	struct xdp_desc desc[0];
+};
+
+struct xdp_umem_ring {
+	struct xdp_ring ptrs;
+	u64 desc[0];
+};
+
+struct pci_root_info {
+	struct acpi_pci_root_info common;
+	struct pci_config_window *cfg;
+};
+
+struct saved_registers {
+	u32 ecfg;
+	u32 euen;
+	u64 pgd;
+	u64 kpgd;
+	u32 pwctl0;
+	u32 pwctl1;
+};
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef __be64 fdt64_t;
+
+struct fdt_reserve_entry {
+	fdt64_t address;
+	fdt64_t size;
+};
+
+struct fdt_node_header {
+	fdt32_t tag;
+	char name[0];
+};
+
+struct fdt_property {
+	fdt32_t tag;
+	fdt32_t len;
+	fdt32_t nameoff;
+	char data[0];
+};
+
+enum {
+	ASSUME_PERFECT = 255,
+	ASSUME_VALID_DTB = 1,
+	ASSUME_VALID_INPUT = 2,
+	ASSUME_LATEST = 4,
+	ASSUME_NO_ROLLBACK = 8,
+	ASSUME_LIBFDT_ORDER = 16,
+	ASSUME_LIBFDT_FLAWLESS = 32,
+};
+
+struct fprop_local_single {
+	long unsigned int events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+struct radix_tree_iter {
+	long unsigned int index;
+	long unsigned int next_index;
+	long unsigned int tags;
+	struct xa_node *node;
+};
+
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
+};
+
+typedef u64 efi_physical_addr_t;
+
+typedef void *efi_handle_t;
+
+typedef void *efi_event_t;
+
+typedef void (*efi_event_notify_t)(efi_event_t, void *);
+
+typedef enum {
+	EfiTimerCancel = 0,
+	EfiTimerPeriodic = 1,
+	EfiTimerRelative = 2,
+} EFI_TIMER_DELAY;
+
+typedef struct efi_generic_dev_path efi_device_path_protocol_t;
+
+union efi_boot_services {
+	struct {
+		efi_table_hdr_t hdr;
+		void *raise_tpl;
+		void *restore_tpl;
+		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
+		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
+		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
+		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
+		efi_status_t (*free_pool)(void *);
+		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
+		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
+		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
+		void *signal_event;
+		efi_status_t (*close_event)(efi_event_t);
+		void *check_event;
+		void *install_protocol_interface;
+		void *reinstall_protocol_interface;
+		void *uninstall_protocol_interface;
+		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
+		void *__reserved;
+		void *register_protocol_notify;
+		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
+		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
+		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
+		efi_status_t (*load_image)(bool, efi_handle_t, efi_device_path_protocol_t *, void *, long unsigned int, efi_handle_t *);
+		efi_status_t (*start_image)(efi_handle_t, long unsigned int *, efi_char16_t **);
+		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
+		efi_status_t (*unload_image)(efi_handle_t);
+		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
+		void *get_next_monotonic_count;
+		efi_status_t (*stall)(long unsigned int);
+		void *set_watchdog_timer;
+		void *connect_controller;
+		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
+		void *open_protocol;
+		void *close_protocol;
+		void *open_protocol_information;
+		void *protocols_per_handle;
+		void *locate_handle_buffer;
+		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
+		efi_status_t (*install_multiple_protocol_interfaces)(efi_handle_t *, ...);
+		efi_status_t (*uninstall_multiple_protocol_interfaces)(efi_handle_t, ...);
+		void *calculate_crc32;
+		void (*copy_mem)(void *, const void *, long unsigned int);
+		void (*set_mem)(void *, long unsigned int, unsigned char);
+		void *create_event_ex;
+	};
+	struct {
+		efi_table_hdr_t hdr;
+		u32 raise_tpl;
+		u32 restore_tpl;
+		u32 allocate_pages;
+		u32 free_pages;
+		u32 get_memory_map;
+		u32 allocate_pool;
+		u32 free_pool;
+		u32 create_event;
+		u32 set_timer;
+		u32 wait_for_event;
+		u32 signal_event;
+		u32 close_event;
+		u32 check_event;
+		u32 install_protocol_interface;
+		u32 reinstall_protocol_interface;
+		u32 uninstall_protocol_interface;
+		u32 handle_protocol;
+		u32 __reserved;
+		u32 register_protocol_notify;
+		u32 locate_handle;
+		u32 locate_device_path;
+		u32 install_configuration_table;
+		u32 load_image;
+		u32 start_image;
+		u32 exit;
+		u32 unload_image;
+		u32 exit_boot_services;
+		u32 get_next_monotonic_count;
+		u32 stall;
+		u32 set_watchdog_timer;
+		u32 connect_controller;
+		u32 disconnect_controller;
+		u32 open_protocol;
+		u32 close_protocol;
+		u32 open_protocol_information;
+		u32 protocols_per_handle;
+		u32 locate_handle_buffer;
+		u32 locate_protocol;
+		u32 install_multiple_protocol_interfaces;
+		u32 uninstall_multiple_protocol_interfaces;
+		u32 calculate_crc32;
+		u32 copy_mem;
+		u32 set_mem;
+		u32 create_event_ex;
+	} mixed_mode;
+};
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+typedef struct {
+	u16 scan_code;
+	efi_char16_t unicode_char;
+} efi_input_key_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_input_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
+		efi_event_t wait_for_key;
+	};
+	struct {
+		u32 reset;
+		u32 read_keystroke;
+		u32 wait_for_key;
+	} mixed_mode;
+};
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+union efi_simple_text_output_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
+		void *test_string;
+	};
+	struct {
+		u32 reset;
+		u32 output_string;
+		u32 test_string;
+	} mixed_mode;
+};
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		long unsigned int fw_vendor;
+		u32 fw_revision;
+		long unsigned int con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		long unsigned int con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		long unsigned int stderr_handle;
+		long unsigned int stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		long unsigned int nr_tables;
+		long unsigned int tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+typedef union {
+	struct {
+		u32 revision;
+		efi_handle_t parent_handle;
+		efi_system_table_t *system_table;
+		efi_handle_t device_handle;
+		void *file_path;
+		void *reserved;
+		u32 load_options_size;
+		void *load_options;
+		void *image_base;
+		__u64 image_size;
+		unsigned int image_code_type;
+		unsigned int image_data_type;
+		efi_status_t (*unload)(efi_handle_t);
+	};
+	struct {
+		u32 revision;
+		u32 parent_handle;
+		u32 system_table;
+		u32 device_handle;
+		u32 file_path;
+		u32 reserved;
+		u32 load_options_size;
+		u32 load_options;
+		u32 image_base;
+		__u64 image_size;
+		u32 image_code_type;
+		u32 image_data_type;
+		u32 unload;
+	} mixed_mode;
+} efi_loaded_image_t;
+
+struct efi_boot_memmap {
+	long unsigned int map_size;
+	long unsigned int desc_size;
+	u32 desc_ver;
+	long unsigned int map_key;
+	long unsigned int buff_size;
+	efi_memory_desc_t map[0];
+};
+
+typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+
+typedef void (*kernel_entry_t)(bool, long unsigned int, long unsigned int);
+
+struct exit_boot_struct {
+	efi_memory_desc_t *runtime_map;
+	int runtime_entry_count;
+};
+
+union efi_rng_protocol;
+
+typedef union efi_rng_protocol efi_rng_protocol_t;
+
+union efi_rng_protocol {
+	struct {
+		efi_status_t (*get_info)(efi_rng_protocol_t *, long unsigned int *, efi_guid_t *);
+		efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, long unsigned int, u8 *);
+	};
+	struct {
+		u32 get_info;
+		u32 get_rng;
+	} mixed_mode;
+};
+
+typedef enum {
+	EfiPciIoWidthUint8 = 0,
+	EfiPciIoWidthUint16 = 1,
+	EfiPciIoWidthUint32 = 2,
+	EfiPciIoWidthUint64 = 3,
+	EfiPciIoWidthFifoUint8 = 4,
+	EfiPciIoWidthFifoUint16 = 5,
+	EfiPciIoWidthFifoUint32 = 6,
+	EfiPciIoWidthFifoUint64 = 7,
+	EfiPciIoWidthFillUint8 = 8,
+	EfiPciIoWidthFillUint16 = 9,
+	EfiPciIoWidthFillUint32 = 10,
+	EfiPciIoWidthFillUint64 = 11,
+	EfiPciIoWidthMaximum = 12,
+} EFI_PCI_IO_PROTOCOL_WIDTH;
+
+typedef struct {
+	u32 read;
+	u32 write;
+} efi_pci_io_protocol_access_32_t;
+
+typedef struct {
+	void *read;
+	void *write;
+} efi_pci_io_protocol_access_t;
+
+union efi_pci_io_protocol;
+
+typedef union efi_pci_io_protocol efi_pci_io_protocol_t;
+
+typedef efi_status_t (*efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, EFI_PCI_IO_PROTOCOL_WIDTH, u32, long unsigned int, void *);
+
+typedef struct {
+	efi_pci_io_protocol_cfg_t read;
+	efi_pci_io_protocol_cfg_t write;
+} efi_pci_io_protocol_config_access_t;
+
+union efi_pci_io_protocol {
+	struct {
+		void *poll_mem;
+		void *poll_io;
+		efi_pci_io_protocol_access_t mem;
+		efi_pci_io_protocol_access_t io;
+		efi_pci_io_protocol_config_access_t pci;
+		void *copy_mem;
+		void *map;
+		void *unmap;
+		void *allocate_buffer;
+		void *free_buffer;
+		void *flush;
+		efi_status_t (*get_location)(efi_pci_io_protocol_t *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);
+		void *attributes;
+		void *get_bar_attributes;
+		void *set_bar_attributes;
+		uint64_t romsize;
+		void *romimage;
+	};
+	struct {
+		u32 poll_mem;
+		u32 poll_io;
+		efi_pci_io_protocol_access_32_t mem;
+		efi_pci_io_protocol_access_32_t io;
+		efi_pci_io_protocol_access_32_t pci;
+		u32 copy_mem;
+		u32 map;
+		u32 unmap;
+		u32 allocate_buffer;
+		u32 free_buffer;
+		u32 flush;
+		u32 get_location;
+		u32 attributes;
+		u32 get_bar_attributes;
+		u32 set_bar_attributes;
+		u64 romsize;
+		u32 romimage;
+	} mixed_mode;
+};
+
+typedef initcall_t initcall_entry_t;
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+enum {
+	CACHE_PRESENT = 1,
+	CACHE_PRIVATE = 2,
+	CACHE_INCLUSIVE = 4,
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+};
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+enum die_val {
+	DIE_OOPS = 1,
+	DIE_RI = 2,
+	DIE_FP = 3,
+	DIE_SIMD = 4,
+	DIE_TRAP = 5,
+	DIE_PAGE_FAULT = 6,
+	DIE_BREAK = 7,
+	DIE_SSTEPBP = 8,
+	DIE_UPROBE = 9,
+	DIE_UPROBE_XOL = 10,
+};
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = -1,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+enum loongarch_regset {
+	REGSET_GPR = 0,
+	REGSET_FPR = 1,
+	REGSET_CPUCFG = 2,
+};
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+struct alt_instr {
+	s32 instr_offset;
+	s32 replace_offset;
+	u16 feature;
+	u8 instrlen;
+	u8 replacementlen;
+};
+
+typedef int (*reloc_rela_handler)(struct module *, u32 *, Elf64_Addr, s64 *, size_t *, unsigned int);
+
+struct secondary_data {
+	long unsigned int stack;
+	long unsigned int thread_info;
+};
+
+enum ipi_msg_type {
+	IPI_RESCHEDULE = 0,
+	IPI_CALL_FUNCTION = 1,
+};
+
+struct flush_tlb_data {
+	struct vm_area_struct *vma;
+	long unsigned int addr1;
+	long unsigned int addr2;
+};
+
+enum unwinder_type {
+	UNWINDER_GUESS = 0,
+	UNWINDER_PROLOGUE = 1,
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+enum fixed_addresses {
+	FIX_HOLE = 0,
+	FIX_EARLYCON_MEM_BASE = 1,
+	__end_of_fixed_addresses = 2,
+};
+
+struct vm_unmapped_area_info {
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+};
+
+enum mmap_allocation_direction {
+	UP___2 = 0,
+	DOWN___2 = 1,
+};
+
+enum reg2_op {
+	revb2h_op = 12,
+	revb4h_op = 13,
+	revb2w_op = 14,
+	revbd_op = 15,
+	revh2w_op = 16,
+	revhd_op = 17,
+};
+
+enum reg2i5_op {
+	slliw_op = 129,
+	srliw_op = 137,
+	sraiw_op = 145,
+};
+
+enum reg2i6_op {
+	sllid_op = 65,
+	srlid_op = 69,
+	sraid_op = 73,
+};
+
+enum reg2bstrd_op {
+	bstrinsd_op = 2,
+	bstrpickd_op = 3,
+};
+
+enum reg3sa2_op {
+	alslw_op = 2,
+	alslwu_op = 3,
+	alsld_op = 22,
+};
+
+struct jit_ctx {
+	const struct bpf_prog *prog;
+	unsigned int idx;
+	unsigned int flags;
+	unsigned int epilogue_offset;
+	u32 *offset;
+	int num_exentries;
+	union loongarch_instruction *image;
+	u32 stack_size;
+};
+
+struct jit_data {
+	struct bpf_binary_header *header;
+	u8 *image;
+	struct jit_ctx ctx;
+};
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
 };
 
 struct trace_event_raw_irq_handler_entry {
@@ -21066,88 +71719,6 @@
 	struct tasklet_struct **tail;
 };
 
-enum {
-	IORES_DESC_NONE = 0,
-	IORES_DESC_CRASH_KERNEL = 1,
-	IORES_DESC_ACPI_TABLES = 2,
-	IORES_DESC_ACPI_NV_STORAGE = 3,
-	IORES_DESC_PERSISTENT_MEMORY = 4,
-	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
-	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
-	IORES_DESC_RESERVED = 7,
-	IORES_DESC_SOFT_RESERVED = 8,
-};
-
-typedef void (*dr_release_t)(struct device *, void *);
-
-enum {
-	REGION_INTERSECTS = 0,
-	REGION_DISJOINT = 1,
-	REGION_MIXED = 2,
-};
-
-struct resource_constraint {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
-	void *alignf_data;
-};
-
-enum {
-	MAX_IORES_LEVEL = 5,
-};
-
-struct region_devres {
-	struct resource *parent;
-	resource_size_t start;
-	resource_size_t n;
-};
-
-struct dentry_stat_t {
-	long int nr_dentry;
-	long int nr_unused;
-	long int age_limit;
-	long int want_pages;
-	long int nr_negative;
-	long int dummy;
-};
-
-struct files_stat_struct {
-	long unsigned int nr_files;
-	long unsigned int nr_free_files;
-	long unsigned int max_files;
-};
-
-struct inodes_stat_t {
-	long int nr_inodes;
-	long int nr_unused;
-	long int dummy[5];
-};
-
-enum sched_tunable_scaling {
-	SCHED_TUNABLESCALING_NONE = 0,
-	SCHED_TUNABLESCALING_LOG = 1,
-	SCHED_TUNABLESCALING_LINEAR = 2,
-	SCHED_TUNABLESCALING_END = 3,
-};
-
-enum sysctl_writes_mode {
-	SYSCTL_WRITES_LEGACY = 4294967295,
-	SYSCTL_WRITES_WARN = 0,
-	SYSCTL_WRITES_STRICT = 1,
-};
-
-struct do_proc_dointvec_minmax_conv_param {
-	int *min;
-	int *max;
-};
-
-struct do_proc_douintvec_minmax_conv_param {
-	unsigned int *min;
-	unsigned int *max;
-};
-
 struct __user_cap_header_struct {
 	__u32 version;
 	int pid;
@@ -21163,124 +71734,23 @@
 
 typedef struct __user_cap_data_struct *cap_user_data_t;
 
-typedef struct siginfo siginfo_t;
-
-struct sigqueue {
-	struct list_head list;
-	int flags;
-	kernel_siginfo_t info;
-	struct user_struct *user;
-};
-
-struct ptrace_peeksiginfo_args {
-	__u64 off;
-	__u32 flags;
-	__s32 nr;
-};
-
-struct ptrace_syscall_info {
-	__u8 op;
-	__u8 pad[3];
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 stack_pointer;
-	union {
-		struct {
-			__u64 nr;
-			__u64 args[6];
-		} entry;
-		struct {
-			__s64 rval;
-			__u8 is_error;
-		} exit;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u32 ret_data;
-		} seccomp;
-	};
-};
-
-struct compat_iovec {
-	compat_uptr_t iov_base;
-	compat_size_t iov_len;
-};
-
-typedef struct compat_siginfo compat_siginfo_t;
-
-typedef long unsigned int old_sigset_t;
-
-typedef u32 compat_old_sigset_t;
-
-struct compat_sigaction {
-	compat_uptr_t sa_handler;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-	compat_sigset_t sa_mask;
-};
-
-struct compat_old_sigaction {
-	compat_uptr_t sa_handler;
-	compat_old_sigset_t sa_mask;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-};
-
-enum {
-	TRACE_SIGNAL_DELIVERED = 0,
-	TRACE_SIGNAL_IGNORED = 1,
-	TRACE_SIGNAL_ALREADY_PENDING = 2,
-	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
-	TRACE_SIGNAL_LOSE_INFO = 4,
-};
-
-struct trace_event_raw_signal_generate {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	char comm[16];
-	pid_t pid;
-	int group;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_signal_deliver {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	long unsigned int sa_handler;
-	long unsigned int sa_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_signal_generate {};
-
-struct trace_event_data_offsets_signal_deliver {};
-
-typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
-
-typedef __kernel_clock_t clock_t;
-
-struct sysinfo {
-	__kernel_long_t uptime;
-	__kernel_ulong_t loads[3];
-	__kernel_ulong_t totalram;
-	__kernel_ulong_t freeram;
-	__kernel_ulong_t sharedram;
-	__kernel_ulong_t bufferram;
-	__kernel_ulong_t totalswap;
-	__kernel_ulong_t freeswap;
-	__u16 procs;
-	__u16 pad;
-	__kernel_ulong_t totalhigh;
-	__kernel_ulong_t freehigh;
-	__u32 mem_unit;
-	char _f[0];
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
 };
 
 struct rlimit64 {
@@ -21289,11 +71759,12 @@
 };
 
 enum uts_proc {
-	UTS_PROC_OSTYPE = 0,
-	UTS_PROC_OSRELEASE = 1,
-	UTS_PROC_VERSION = 2,
-	UTS_PROC_HOSTNAME = 3,
-	UTS_PROC_DOMAINNAME = 4,
+	UTS_PROC_ARCH = 0,
+	UTS_PROC_OSTYPE = 1,
+	UTS_PROC_OSRELEASE = 2,
+	UTS_PROC_VERSION = 3,
+	UTS_PROC_HOSTNAME = 4,
+	UTS_PROC_DOMAINNAME = 5,
 };
 
 struct prctl_mm_map {
@@ -21313,18 +71784,6 @@
 	__u32 exe_fd;
 };
 
-struct compat_tms {
-	compat_clock_t tms_utime;
-	compat_clock_t tms_stime;
-	compat_clock_t tms_cutime;
-	compat_clock_t tms_cstime;
-};
-
-struct compat_rlimit {
-	compat_ulong_t rlim_cur;
-	compat_ulong_t rlim_max;
-};
-
 struct tms {
 	__kernel_clock_t tms_utime;
 	__kernel_clock_t tms_stime;
@@ -21336,110 +71795,18 @@
 	long unsigned int blob[16];
 };
 
-struct compat_sysinfo {
-	s32 uptime;
-	u32 loads[3];
-	u32 totalram;
-	u32 freeram;
-	u32 sharedram;
-	u32 bufferram;
-	u32 totalswap;
-	u32 freeswap;
-	u16 procs;
-	u16 pad;
-	u32 totalhigh;
-	u32 freehigh;
-	u32 mem_unit;
-	char _f[8];
+enum {
+	PROC_ROOT_INO = 1,
+	PROC_IPC_INIT_INO = 4026531839,
+	PROC_UTS_INIT_INO = 4026531838,
+	PROC_USER_INIT_INO = 4026531837,
+	PROC_PID_INIT_INO = 4026531836,
+	PROC_CGROUP_INIT_INO = 4026531835,
+	PROC_TIME_INIT_INO = 4026531834,
 };
 
-struct wq_flusher;
-
-struct worker;
-
-struct workqueue_attrs;
-
 struct pool_workqueue;
 
-struct wq_device;
-
-struct workqueue_struct {
-	struct list_head pwqs;
-	struct list_head list;
-	struct mutex mutex;
-	int work_color;
-	int flush_color;
-	atomic_t nr_pwqs_to_flush;
-	struct wq_flusher *first_flusher;
-	struct list_head flusher_queue;
-	struct list_head flusher_overflow;
-	struct list_head maydays;
-	struct worker *rescuer;
-	int nr_drainers;
-	int saved_max_active;
-	struct workqueue_attrs *unbound_attrs;
-	struct pool_workqueue *dfl_pwq;
-	struct wq_device *wq_dev;
-	char name[24];
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int flags;
-	struct pool_workqueue *cpu_pwqs;
-	struct pool_workqueue *numa_pwq_tbl[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct workqueue_attrs {
-	int nice;
-	cpumask_var_t cpumask;
-	bool no_numa;
-};
-
-struct execute_work {
-	struct work_struct work;
-};
-
-enum {
-	WQ_UNBOUND = 2,
-	WQ_FREEZABLE = 4,
-	WQ_MEM_RECLAIM = 8,
-	WQ_HIGHPRI = 16,
-	WQ_CPU_INTENSIVE = 32,
-	WQ_SYSFS = 64,
-	WQ_POWER_EFFICIENT = 128,
-	__WQ_DRAINING = 65536,
-	__WQ_ORDERED = 131072,
-	__WQ_LEGACY = 262144,
-	__WQ_ORDERED_EXPLICIT = 524288,
-	WQ_MAX_ACTIVE = 512,
-	WQ_MAX_UNBOUND_PER_CPU = 4,
-	WQ_DFL_ACTIVE = 256,
-};
-
-typedef unsigned int xa_mark_t;
-
-enum xa_lock_type {
-	XA_LOCK_IRQ = 1,
-	XA_LOCK_BH = 2,
-};
-
-struct ida {
-	struct xarray xa;
-};
-
-struct __una_u32 {
-	u32 x;
-};
-
 struct worker_pool;
 
 struct worker {
@@ -21450,6 +71817,7 @@
 	struct work_struct *current_work;
 	work_func_t current_func;
 	struct pool_workqueue *current_pwq;
+	unsigned int current_color;
 	struct list_head scheduled;
 	struct task_struct *task;
 	struct worker_pool *pool;
@@ -21463,397 +71831,6 @@
 	work_func_t last_func;
 };
 
-struct pool_workqueue {
-	struct worker_pool *pool;
-	struct workqueue_struct *wq;
-	int work_color;
-	int flush_color;
-	int refcnt;
-	int nr_in_flight[15];
-	int nr_active;
-	int max_active;
-	struct list_head delayed_works;
-	struct list_head pwqs_node;
-	struct list_head mayday_node;
-	struct work_struct unbound_release_work;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct worker_pool {
-	raw_spinlock_t lock;
-	int cpu;
-	int node;
-	int id;
-	unsigned int flags;
-	long unsigned int watchdog_ts;
-	struct list_head worklist;
-	int nr_workers;
-	int nr_idle;
-	struct list_head idle_list;
-	struct timer_list idle_timer;
-	struct timer_list mayday_timer;
-	struct hlist_head busy_hash[64];
-	struct worker *manager;
-	struct list_head workers;
-	struct completion *detach_completion;
-	struct ida worker_ida;
-	struct workqueue_attrs *attrs;
-	struct hlist_node hash_node;
-	int refcnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_t nr_running;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	POOL_MANAGER_ACTIVE = 1,
-	POOL_DISASSOCIATED = 4,
-	WORKER_DIE = 2,
-	WORKER_IDLE = 4,
-	WORKER_PREP = 8,
-	WORKER_CPU_INTENSIVE = 64,
-	WORKER_UNBOUND = 128,
-	WORKER_REBOUND = 256,
-	WORKER_NOT_RUNNING = 456,
-	NR_STD_WORKER_POOLS = 2,
-	UNBOUND_POOL_HASH_ORDER = 6,
-	BUSY_WORKER_HASH_ORDER = 6,
-	MAX_IDLE_WORKERS_RATIO = 4,
-	IDLE_WORKER_TIMEOUT = 300000,
-	MAYDAY_INITIAL_TIMEOUT = 10,
-	MAYDAY_INTERVAL = 100,
-	CREATE_COOLDOWN = 1000,
-	RESCUER_NICE_LEVEL = 4294967276,
-	HIGHPRI_NICE_LEVEL = 4294967276,
-	WQ_NAME_LEN = 24,
-};
-
-struct wq_flusher {
-	struct list_head list;
-	int flush_color;
-	struct completion done;
-};
-
-struct wq_device {
-	struct workqueue_struct *wq;
-	struct device dev;
-};
-
-struct trace_event_raw_workqueue_queue_work {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	void *workqueue;
-	unsigned int req_cpu;
-	unsigned int cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_activate_work {
-	struct trace_entry ent;
-	void *work;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_start {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_end {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_workqueue_queue_work {};
-
-struct trace_event_data_offsets_workqueue_activate_work {};
-
-struct trace_event_data_offsets_workqueue_execute_start {};
-
-struct trace_event_data_offsets_workqueue_execute_end {};
-
-typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
-
-struct wq_barrier {
-	struct work_struct work;
-	struct completion done;
-	struct task_struct *task;
-};
-
-struct cwt_wait {
-	wait_queue_entry_t wait;
-	struct work_struct *work;
-};
-
-struct apply_wqattrs_ctx {
-	struct workqueue_struct *wq;
-	struct workqueue_attrs *attrs;
-	struct list_head list;
-	struct pool_workqueue *dfl_pwq;
-	struct pool_workqueue *pwq_tbl[0];
-};
-
-struct work_for_cpu {
-	struct work_struct work;
-	long int (*fn)(void *);
-	void *arg;
-	long int ret;
-};
-
-typedef void (*task_work_func_t)(struct callback_head *);
-
-enum task_work_notify_mode {
-	TWA_NONE = 0,
-	TWA_RESUME = 1,
-	TWA_SIGNAL = 2,
-};
-
-enum {
-	KERNEL_PARAM_OPS_FL_NOARG = 1,
-};
-
-enum {
-	KERNEL_PARAM_FL_UNSAFE = 1,
-	KERNEL_PARAM_FL_HWPARAM = 2,
-};
-
-struct param_attribute {
-	struct module_attribute mattr;
-	const struct kernel_param *param;
-};
-
-struct module_param_attrs {
-	unsigned int num;
-	struct attribute_group grp;
-	struct param_attribute attrs[0];
-};
-
-struct module_version_attribute {
-	struct module_attribute mattr;
-	const char *module_name;
-	const char *version;
-};
-
-enum lockdown_reason {
-	LOCKDOWN_NONE = 0,
-	LOCKDOWN_MODULE_SIGNATURE = 1,
-	LOCKDOWN_DEV_MEM = 2,
-	LOCKDOWN_EFI_TEST = 3,
-	LOCKDOWN_KEXEC = 4,
-	LOCKDOWN_HIBERNATION = 5,
-	LOCKDOWN_PCI_ACCESS = 6,
-	LOCKDOWN_IOPORT = 7,
-	LOCKDOWN_MSR = 8,
-	LOCKDOWN_ACPI_TABLES = 9,
-	LOCKDOWN_PCMCIA_CIS = 10,
-	LOCKDOWN_TIOCSSERIAL = 11,
-	LOCKDOWN_MODULE_PARAMETERS = 12,
-	LOCKDOWN_MMIOTRACE = 13,
-	LOCKDOWN_DEBUGFS = 14,
-	LOCKDOWN_XMON_WR = 15,
-	LOCKDOWN_INTEGRITY_MAX = 16,
-	LOCKDOWN_KCORE = 17,
-	LOCKDOWN_KPROBES = 18,
-	LOCKDOWN_BPF_READ = 19,
-	LOCKDOWN_PERF = 20,
-	LOCKDOWN_TRACEFS = 21,
-	LOCKDOWN_XMON_RW = 22,
-	LOCKDOWN_CONFIDENTIALITY_MAX = 23,
-};
-
-struct kmalloced_param {
-	struct list_head list;
-	char val[0];
-};
-
-struct sched_param {
-	int sched_priority;
-};
-
-enum {
-	__PERCPU_REF_ATOMIC = 1,
-	__PERCPU_REF_DEAD = 2,
-	__PERCPU_REF_ATOMIC_DEAD = 3,
-	__PERCPU_REF_FLAG_BITS = 2,
-};
-
-struct kthread_work;
-
-typedef void (*kthread_work_func_t)(struct kthread_work *);
-
-struct kthread_worker;
-
-struct kthread_work {
-	struct list_head node;
-	kthread_work_func_t func;
-	struct kthread_worker *worker;
-	int canceling;
-};
-
-enum {
-	KTW_FREEZABLE = 1,
-};
-
-struct kthread_worker {
-	unsigned int flags;
-	raw_spinlock_t lock;
-	struct list_head work_list;
-	struct list_head delayed_work_list;
-	struct task_struct *task;
-	struct kthread_work *current_work;
-};
-
-struct kthread_delayed_work {
-	struct kthread_work work;
-	struct timer_list timer;
-};
-
-enum {
-	CSS_NO_REF = 1,
-	CSS_ONLINE = 2,
-	CSS_RELEASED = 4,
-	CSS_VISIBLE = 8,
-	CSS_DYING = 16,
-};
-
-struct kthread_create_info {
-	int (*threadfn)(void *);
-	void *data;
-	int node;
-	struct task_struct *result;
-	struct completion *done;
-	struct list_head list;
-};
-
-struct kthread {
-	long unsigned int flags;
-	unsigned int cpu;
-	int (*threadfn)(void *);
-	void *data;
-	mm_segment_t oldfs;
-	struct completion parked;
-	struct completion exited;
-	struct cgroup_subsys_state *blkcg_css;
-};
-
-enum KTHREAD_BITS {
-	KTHREAD_IS_PER_CPU = 0,
-	KTHREAD_SHOULD_STOP = 1,
-	KTHREAD_SHOULD_PARK = 2,
-};
-
-struct kthread_flush_work {
-	struct kthread_work work;
-	struct completion done;
-};
-
-struct pt_regs___2;
-
-struct ipc_ids {
-	int in_use;
-	short unsigned int seq;
-	struct rw_semaphore rwsem;
-	struct idr ipcs_idr;
-	int max_idx;
-	int last_idx;
-	int next_id;
-	struct rhashtable key_ht;
-};
-
-struct ipc_namespace {
-	refcount_t count;
-	struct ipc_ids ids[3];
-	int sem_ctls[4];
-	int used_sems;
-	unsigned int msg_ctlmax;
-	unsigned int msg_ctlmnb;
-	unsigned int msg_ctlmni;
-	atomic_t msg_bytes;
-	atomic_t msg_hdrs;
-	size_t shm_ctlmax;
-	size_t shm_ctlall;
-	long unsigned int shm_tot;
-	int shm_ctlmni;
-	int shm_rmid_forced;
-	struct notifier_block ipcns_nb;
-	struct vfsmount *mq_mnt;
-	unsigned int mq_queues_count;
-	unsigned int mq_queues_max;
-	unsigned int mq_msg_max;
-	unsigned int mq_msgsize_max;
-	unsigned int mq_msg_default;
-	unsigned int mq_msgsize_default;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct llist_node mnt_llist;
-	struct ns_common ns;
-};
-
-struct srcu_notifier_head {
-	struct mutex mutex;
-	struct srcu_struct srcu;
-	struct notifier_block *head;
-};
-
-enum what {
-	PROC_EVENT_NONE = 0,
-	PROC_EVENT_FORK = 1,
-	PROC_EVENT_EXEC = 2,
-	PROC_EVENT_UID = 4,
-	PROC_EVENT_GID = 64,
-	PROC_EVENT_SID = 128,
-	PROC_EVENT_PTRACE = 256,
-	PROC_EVENT_COMM = 512,
-	PROC_EVENT_COREDUMP = 1073741824,
-	PROC_EVENT_EXIT = 2147483648,
-};
-
-enum reboot_type {
-	BOOT_TRIPLE = 116,
-	BOOT_KBD = 107,
-	BOOT_BIOS = 98,
-	BOOT_ACPI = 97,
-	BOOT_EFI = 101,
-	BOOT_CF9_FORCE = 112,
-	BOOT_CF9_SAFE = 113,
-};
-
-typedef u64 async_cookie_t;
-
-typedef void (*async_func_t)(void *, async_cookie_t);
-
-struct async_domain {
-	struct list_head pending;
-	unsigned int registered: 1;
-};
-
 struct async_entry {
 	struct list_head domain_list;
 	struct list_head global_list;
@@ -21864,186 +71841,14 @@
 	struct async_domain *domain;
 };
 
-struct smpboot_thread_data {
-	unsigned int cpu;
-	unsigned int status;
-	struct smp_hotplug_thread *ht;
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
 };
 
 enum {
-	HP_THREAD_NONE = 0,
-	HP_THREAD_ACTIVE = 1,
-	HP_THREAD_PARKED = 2,
-};
-
-struct umd_info {
-	const char *driver_name;
-	struct file *pipe_to_umh;
-	struct file *pipe_from_umh;
-	struct path wd;
-	struct pid *tgid;
-};
-
-struct pin_cookie {};
-
-enum {
-	CSD_FLAG_LOCK = 1,
-	IRQ_WORK_PENDING = 1,
-	IRQ_WORK_BUSY = 2,
-	IRQ_WORK_LAZY = 4,
-	IRQ_WORK_HARD_IRQ = 8,
-	IRQ_WORK_CLAIMED = 3,
-	CSD_TYPE_ASYNC = 0,
-	CSD_TYPE_SYNC = 16,
-	CSD_TYPE_IRQ_WORK = 32,
-	CSD_TYPE_TTWU = 48,
-	CSD_FLAG_TYPE_MASK = 240,
-};
-
-typedef struct __call_single_data call_single_data_t;
-
-struct dl_bw {
-	raw_spinlock_t lock;
-	u64 bw;
-	u64 total_bw;
-};
-
-struct cpudl_item;
-
-struct cpudl {
-	raw_spinlock_t lock;
-	int size;
-	cpumask_var_t free_cpus;
-	struct cpudl_item *elements;
-};
-
-struct cpupri_vec {
-	atomic_t count;
-	cpumask_var_t mask;
-};
-
-struct cpupri {
-	struct cpupri_vec pri_to_cpu[102];
-	int *cpu_to_pri;
-};
-
-struct perf_domain;
-
-struct root_domain {
-	atomic_t refcount;
-	atomic_t rto_count;
-	struct callback_head rcu;
-	cpumask_var_t span;
-	cpumask_var_t online;
-	int overload;
-	int overutilized;
-	cpumask_var_t dlo_mask;
-	atomic_t dlo_count;
-	struct dl_bw dl_bw;
-	struct cpudl cpudl;
-	struct irq_work rto_push_work;
-	raw_spinlock_t rto_lock;
-	int rto_loop;
-	int rto_cpu;
-	atomic_t rto_loop_next;
-	atomic_t rto_loop_start;
-	cpumask_var_t rto_mask;
-	struct cpupri cpupri;
-	long unsigned int max_cpu_capacity;
-	struct perf_domain *pd;
-};
-
-struct cfs_rq {
-	struct load_weight load;
-	unsigned int nr_running;
-	unsigned int h_nr_running;
-	unsigned int idle_h_nr_running;
-	u64 exec_clock;
-	u64 min_vruntime;
-	struct rb_root_cached tasks_timeline;
-	struct sched_entity *curr;
-	struct sched_entity *next;
-	struct sched_entity *last;
-	struct sched_entity *skip;
-	unsigned int nr_spread_over;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg;
-	struct {
-		raw_spinlock_t lock;
-		int nr;
-		long unsigned int load_avg;
-		long unsigned int util_avg;
-		long unsigned int runnable_avg;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	} removed;
-	long unsigned int tg_load_avg_contrib;
-	long int propagate;
-	long int prop_runnable_sum;
-	long unsigned int h_load;
-	u64 last_h_load_update;
-	struct sched_entity *h_load_next;
-	struct rq *rq;
-	int on_list;
-	struct list_head leaf_cfs_rq_list;
-	struct task_group *tg;
-	int runtime_enabled;
-	s64 runtime_remaining;
-	u64 throttled_clock;
-	u64 throttled_clock_task;
-	u64 throttled_clock_task_time;
-	int throttled;
-	int throttle_count;
-	struct list_head throttled_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cfs_bandwidth {
-	raw_spinlock_t lock;
-	ktime_t period;
-	u64 quota;
-	u64 runtime;
-	s64 hierarchical_quota;
-	u8 idle;
-	u8 period_active;
-	u8 slack_started;
-	struct hrtimer period_timer;
-	struct hrtimer slack_timer;
-	struct list_head throttled_cfs_rq;
-	int nr_periods;
-	int nr_throttled;
-	u64 throttled_time;
-};
-
-struct task_group {
-	struct cgroup_subsys_state css;
-	struct sched_entity **se;
-	struct cfs_rq **cfs_rq;
-	long unsigned int shares;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t load_avg;
-	struct callback_head rcu;
-	struct list_head list;
-	struct task_group *parent;
-	struct list_head siblings;
-	struct list_head children;
-	struct autogroup *autogroup;
-	struct cfs_bandwidth cfs_bandwidth;
-	unsigned int uclamp_pct[2];
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
 };
 
 enum {
@@ -22053,867 +71858,14 @@
 	SD_BALANCE_WAKE = 8,
 	SD_WAKE_AFFINE = 16,
 	SD_ASYM_CPUCAPACITY = 32,
-	SD_SHARE_CPUCAPACITY = 64,
-	SD_SHARE_PKG_RESOURCES = 128,
-	SD_SERIALIZE = 256,
-	SD_ASYM_PACKING = 512,
-	SD_PREFER_SIBLING = 1024,
-	SD_OVERLAP = 2048,
-	SD_NUMA = 4096,
-};
-
-struct sched_domain_shared {
-	atomic_t ref;
-	atomic_t nr_busy_cpus;
-	int has_idle_cores;
-};
-
-struct sched_group;
-
-struct sched_domain {
-	struct sched_domain *parent;
-	struct sched_domain *child;
-	struct sched_group *groups;
-	long unsigned int min_interval;
-	long unsigned int max_interval;
-	unsigned int busy_factor;
-	unsigned int imbalance_pct;
-	unsigned int cache_nice_tries;
-	int nohz_idle;
-	int flags;
-	int level;
-	long unsigned int last_balance;
-	unsigned int balance_interval;
-	unsigned int nr_balance_failed;
-	u64 max_newidle_lb_cost;
-	long unsigned int next_decay_max_lb_cost;
-	u64 avg_scan_cost;
-	unsigned int lb_count[3];
-	unsigned int lb_failed[3];
-	unsigned int lb_balanced[3];
-	unsigned int lb_imbalance[3];
-	unsigned int lb_gained[3];
-	unsigned int lb_hot_gained[3];
-	unsigned int lb_nobusyg[3];
-	unsigned int lb_nobusyq[3];
-	unsigned int alb_count;
-	unsigned int alb_failed;
-	unsigned int alb_pushed;
-	unsigned int sbe_count;
-	unsigned int sbe_balanced;
-	unsigned int sbe_pushed;
-	unsigned int sbf_count;
-	unsigned int sbf_balanced;
-	unsigned int sbf_pushed;
-	unsigned int ttwu_wake_remote;
-	unsigned int ttwu_move_affine;
-	unsigned int ttwu_move_balance;
-	char *name;
-	union {
-		void *private;
-		struct callback_head rcu;
-	};
-	struct sched_domain_shared *shared;
-	unsigned int span_weight;
-	long unsigned int span[0];
-};
-
-struct sched_group_capacity;
-
-struct sched_group {
-	struct sched_group *next;
-	atomic_t ref;
-	unsigned int group_weight;
-	struct sched_group_capacity *sgc;
-	int asym_prefer_cpu;
-	long unsigned int cpumask[0];
-};
-
-struct sched_group_capacity {
-	atomic_t ref;
-	long unsigned int capacity;
-	long unsigned int min_capacity;
-	long unsigned int max_capacity;
-	long unsigned int next_update;
-	int imbalance;
-	int id;
-	long unsigned int cpumask[0];
-};
-
-struct autogroup {
-	struct kref kref;
-	struct task_group *tg;
-	struct rw_semaphore lock;
-	long unsigned int id;
-	int nice;
-};
-
-struct kernel_cpustat {
-	u64 cpustat[10];
-};
-
-enum {
-	CFTYPE_ONLY_ON_ROOT = 1,
-	CFTYPE_NOT_ON_ROOT = 2,
-	CFTYPE_NS_DELEGATABLE = 4,
-	CFTYPE_NO_PREFIX = 8,
-	CFTYPE_WORLD_WRITABLE = 16,
-	CFTYPE_DEBUG = 32,
-	__CFTYPE_ONLY_ON_DFL = 65536,
-	__CFTYPE_NOT_ON_DFL = 131072,
-};
-
-struct css_task_iter {
-	struct cgroup_subsys *ss;
-	unsigned int flags;
-	struct list_head *cset_pos;
-	struct list_head *cset_head;
-	struct list_head *tcset_pos;
-	struct list_head *tcset_head;
-	struct list_head *task_pos;
-	struct list_head *cur_tasks_head;
-	struct css_set *cur_cset;
-	struct css_set *cur_dcset;
-	struct task_struct *cur_task;
-	struct list_head iters_node;
-};
-
-struct trace_event_raw_sched_kthread_stop {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_kthread_stop_ret {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wakeup_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int success;
-	int target_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_switch {
-	struct trace_entry ent;
-	char prev_comm[16];
-	pid_t prev_pid;
-	int prev_prio;
-	long int prev_state;
-	char next_comm[16];
-	pid_t next_pid;
-	int next_prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_migrate_task {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int orig_cpu;
-	int dest_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_wait {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_fork {
-	struct trace_entry ent;
-	char parent_comm[16];
-	pid_t parent_pid;
-	char child_comm[16];
-	pid_t child_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_exec {
-	struct trace_entry ent;
-	u32 __data_loc_filename;
-	pid_t pid;
-	pid_t old_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 delay;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_runtime {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 runtime;
-	u64 vruntime;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_pi_setprio {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int oldprio;
-	int newprio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_hang {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_move_numa {
-	struct trace_entry ent;
-	pid_t pid;
-	pid_t tgid;
-	pid_t ngid;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_numa_pair_template {
-	struct trace_entry ent;
-	pid_t src_pid;
-	pid_t src_tgid;
-	pid_t src_ngid;
-	int src_cpu;
-	int src_nid;
-	pid_t dst_pid;
-	pid_t dst_tgid;
-	pid_t dst_ngid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wake_idle_without_ipi {
-	struct trace_entry ent;
-	int cpu;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sched_kthread_stop {};
-
-struct trace_event_data_offsets_sched_kthread_stop_ret {};
-
-struct trace_event_data_offsets_sched_wakeup_template {};
-
-struct trace_event_data_offsets_sched_switch {};
-
-struct trace_event_data_offsets_sched_migrate_task {};
-
-struct trace_event_data_offsets_sched_process_template {};
-
-struct trace_event_data_offsets_sched_process_wait {};
-
-struct trace_event_data_offsets_sched_process_fork {};
-
-struct trace_event_data_offsets_sched_process_exec {
-	u32 filename;
-};
-
-struct trace_event_data_offsets_sched_stat_template {};
-
-struct trace_event_data_offsets_sched_stat_runtime {};
-
-struct trace_event_data_offsets_sched_pi_setprio {};
-
-struct trace_event_data_offsets_sched_process_hang {};
-
-struct trace_event_data_offsets_sched_move_numa {};
-
-struct trace_event_data_offsets_sched_numa_pair_template {};
-
-struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
-
-typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
-
-typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
-
-typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
-
-typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
-
-typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
-
-enum {
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
-};
-
-struct wake_q_head {
-	struct wake_q_node *first;
-	struct wake_q_node **lastp;
-};
-
-struct sched_attr {
-	__u32 size;
-	__u32 sched_policy;
-	__u64 sched_flags;
-	__s32 sched_nice;
-	__u32 sched_priority;
-	__u64 sched_runtime;
-	__u64 sched_deadline;
-	__u64 sched_period;
-	__u32 sched_util_min;
-	__u32 sched_util_max;
-};
-
-struct cpuidle_state_usage {
-	long long unsigned int disable;
-	long long unsigned int usage;
-	u64 time_ns;
-	long long unsigned int above;
-	long long unsigned int below;
-	long long unsigned int rejected;
-	long long unsigned int s2idle_usage;
-	long long unsigned int s2idle_time;
-};
-
-struct cpuidle_device;
-
-struct cpuidle_driver;
-
-struct cpuidle_state {
-	char name[16];
-	char desc[32];
-	u64 exit_latency_ns;
-	u64 target_residency_ns;
-	unsigned int flags;
-	unsigned int exit_latency;
-	int power_usage;
-	unsigned int target_residency;
-	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
-	int (*enter_dead)(struct cpuidle_device *, int);
-	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
-};
-
-struct cpuidle_state_kobj;
-
-struct cpuidle_driver_kobj;
-
-struct cpuidle_device_kobj;
-
-struct cpuidle_device {
-	unsigned int registered: 1;
-	unsigned int enabled: 1;
-	unsigned int poll_time_limit: 1;
-	unsigned int cpu;
-	ktime_t next_hrtimer;
-	int last_state_idx;
-	u64 last_residency_ns;
-	u64 poll_limit_ns;
-	u64 forced_idle_latency_limit_ns;
-	struct cpuidle_state_usage states_usage[10];
-	struct cpuidle_state_kobj *kobjs[10];
-	struct cpuidle_driver_kobj *kobj_driver;
-	struct cpuidle_device_kobj *kobj_dev;
-	struct list_head device_list;
-};
-
-struct cpuidle_driver {
-	const char *name;
-	struct module *owner;
-	unsigned int bctimer: 1;
-	struct cpuidle_state states[10];
-	int state_count;
-	int safe_state_index;
-	struct cpumask *cpumask;
-	const char *governor;
-};
-
-typedef int (*cpu_stop_fn_t)(void *);
-
-struct cpu_stop_done;
-
-struct cpu_stop_work {
-	struct list_head list;
-	cpu_stop_fn_t fn;
-	void *arg;
-	struct cpu_stop_done *done;
-};
-
-struct cpudl_item {
-	u64 dl;
-	int cpu;
-	int idx;
-};
-
-struct rt_prio_array {
-	long unsigned int bitmap[2];
-	struct list_head queue[100];
-};
-
-struct rt_bandwidth {
-	raw_spinlock_t rt_runtime_lock;
-	ktime_t rt_period;
-	u64 rt_runtime;
-	struct hrtimer rt_period_timer;
-	unsigned int rt_period_active;
-};
-
-struct dl_bandwidth {
-	raw_spinlock_t dl_runtime_lock;
-	u64 dl_runtime;
-	u64 dl_period;
-};
-
-typedef int (*tg_visitor)(struct task_group *, void *);
-
-struct uclamp_bucket {
-	long unsigned int value: 11;
-	long unsigned int tasks: 53;
-};
-
-struct uclamp_rq {
-	unsigned int value;
-	struct uclamp_bucket bucket[5];
-};
-
-struct rt_rq {
-	struct rt_prio_array active;
-	unsigned int rt_nr_running;
-	unsigned int rr_nr_running;
-	struct {
-		int curr;
-		int next;
-	} highest_prio;
-	long unsigned int rt_nr_migratory;
-	long unsigned int rt_nr_total;
-	int overloaded;
-	struct plist_head pushable_tasks;
-	int rt_queued;
-	int rt_throttled;
-	u64 rt_time;
-	u64 rt_runtime;
-	raw_spinlock_t rt_runtime_lock;
-};
-
-struct dl_rq {
-	struct rb_root_cached root;
-	long unsigned int dl_nr_running;
-	struct {
-		u64 curr;
-		u64 next;
-	} earliest_dl;
-	long unsigned int dl_nr_migratory;
-	int overloaded;
-	struct rb_root_cached pushable_dl_tasks_root;
-	u64 running_bw;
-	u64 this_bw;
-	u64 extra_bw;
-	u64 bw_ratio;
-};
-
-struct rq {
-	raw_spinlock_t lock;
-	unsigned int nr_running;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-	unsigned int numa_migrate_on;
-	long unsigned int last_blocked_load_update_tick;
-	unsigned int has_blocked_load;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t nohz_csd;
-	unsigned int nohz_tick_stopped;
-	atomic_t nohz_flags;
-	unsigned int ttwu_pending;
-	u64 nr_switches;
-	long: 64;
-	struct uclamp_rq uclamp[2];
-	unsigned int uclamp_flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct cfs_rq cfs;
-	struct rt_rq rt;
-	struct dl_rq dl;
-	struct list_head leaf_cfs_rq_list;
-	struct list_head *tmp_alone_branch;
-	long unsigned int nr_uninterruptible;
-	struct task_struct *curr;
-	struct task_struct *idle;
-	struct task_struct *stop;
-	long unsigned int next_balance;
-	struct mm_struct *prev_mm;
-	unsigned int clock_update_flags;
-	u64 clock;
-	long: 64;
-	long: 64;
-	long: 64;
-	u64 clock_task;
-	u64 clock_pelt;
-	long unsigned int lost_idle_time;
-	atomic_t nr_iowait;
-	int membarrier_state;
-	struct root_domain *rd;
-	struct sched_domain *sd;
-	long unsigned int cpu_capacity;
-	long unsigned int cpu_capacity_orig;
-	struct callback_head *balance_callback;
-	unsigned char nohz_idle_balance;
-	unsigned char idle_balance;
-	long unsigned int misfit_task_load;
-	int active_balance;
-	int push_cpu;
-	struct cpu_stop_work active_balance_work;
-	int cpu;
-	int online;
-	struct list_head cfs_tasks;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg_rt;
-	struct sched_avg avg_dl;
-	struct sched_avg avg_irq;
-	struct sched_avg avg_thermal;
-	u64 idle_stamp;
-	u64 avg_idle;
-	u64 max_idle_balance_cost;
-	u64 prev_steal_time;
-	u64 prev_steal_time_rq;
-	long unsigned int calc_load_update;
-	long int calc_load_active;
-	long: 64;
-	call_single_data_t hrtick_csd;
-	struct hrtimer hrtick_timer;
-	struct sched_info rq_sched_info;
-	long long unsigned int rq_cpu_time;
-	unsigned int yld_count;
-	unsigned int sched_count;
-	unsigned int sched_goidle;
-	unsigned int ttwu_count;
-	unsigned int ttwu_local;
-	struct cpuidle_state *idle_state;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct perf_domain {
-	struct em_perf_domain *em_pd;
-	struct perf_domain *next;
-	struct callback_head rcu;
-};
-
-struct rq_flags {
-	long unsigned int flags;
-	struct pin_cookie cookie;
-	unsigned int clock_update_flags;
-};
-
-enum {
-	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
-	__SCHED_FEAT_START_DEBIT = 1,
-	__SCHED_FEAT_NEXT_BUDDY = 2,
-	__SCHED_FEAT_LAST_BUDDY = 3,
-	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
-	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
-	__SCHED_FEAT_HRTICK = 6,
-	__SCHED_FEAT_DOUBLE_TICK = 7,
-	__SCHED_FEAT_NONTASK_CAPACITY = 8,
-	__SCHED_FEAT_TTWU_QUEUE = 9,
-	__SCHED_FEAT_SIS_AVG_CPU = 10,
-	__SCHED_FEAT_SIS_PROP = 11,
-	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
-	__SCHED_FEAT_RT_PUSH_IPI = 13,
-	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
-	__SCHED_FEAT_LB_MIN = 15,
-	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
-	__SCHED_FEAT_WA_IDLE = 17,
-	__SCHED_FEAT_WA_WEIGHT = 18,
-	__SCHED_FEAT_WA_BIAS = 19,
-	__SCHED_FEAT_UTIL_EST = 20,
-	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
-	__SCHED_FEAT_NR = 22,
-};
-
-struct migration_arg {
-	struct task_struct *task;
-	int dest_cpu;
-};
-
-struct migration_swap_arg {
-	struct task_struct *src_task;
-	struct task_struct *dst_task;
-	int src_cpu;
-	int dst_cpu;
-};
-
-struct uclamp_request {
-	s64 percent;
-	u64 util;
-	int ret;
-};
-
-struct cfs_schedulable_data {
-	struct task_group *tg;
-	u64 period;
-	u64 quota;
-};
-
-enum {
-	cpuset = 0,
-	possible = 1,
-	fail = 2,
-};
-
-enum s2idle_states {
-	S2IDLE_STATE_NONE = 0,
-	S2IDLE_STATE_ENTER = 1,
-	S2IDLE_STATE_WAKE = 2,
-};
-
-struct idle_timer {
-	struct hrtimer timer;
-	int done;
-};
-
-typedef void (*rcu_callback_t)(struct callback_head *);
-
-struct numa_group {
-	refcount_t refcount;
-	spinlock_t lock;
-	int nr_tasks;
-	pid_t gid;
-	int active_nodes;
-	struct callback_head rcu;
-	long unsigned int total_faults;
-	long unsigned int max_faults_cpu;
-	long unsigned int *faults_cpu;
-	long unsigned int faults[0];
-};
-
-struct update_util_data {
-	void (*func)(struct update_util_data *, u64, unsigned int);
-};
-
-enum numa_topology_type {
-	NUMA_DIRECT = 0,
-	NUMA_GLUELESS_MESH = 1,
-	NUMA_BACKPLANE = 2,
-};
-
-enum numa_faults_stats {
-	NUMA_MEM = 0,
-	NUMA_CPU = 1,
-	NUMA_MEMBUF = 2,
-	NUMA_CPUBUF = 3,
-};
-
-enum schedutil_type {
-	FREQUENCY_UTIL = 0,
-	ENERGY_UTIL = 1,
-};
-
-enum numa_type {
-	node_has_spare = 0,
-	node_fully_busy = 1,
-	node_overloaded = 2,
-};
-
-struct numa_stats {
-	long unsigned int load;
-	long unsigned int runnable;
-	long unsigned int util;
-	long unsigned int compute_capacity;
-	unsigned int nr_running;
-	unsigned int weight;
-	enum numa_type node_type;
-	int idle_cpu;
-};
-
-struct task_numa_env {
-	struct task_struct *p;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	struct numa_stats src_stats;
-	struct numa_stats dst_stats;
-	int imbalance_pct;
-	int dist;
-	struct task_struct *best_task;
-	long int best_imp;
-	int best_cpu;
-};
-
-enum fbq_type {
-	regular = 0,
-	remote = 1,
-	all = 2,
-};
-
-enum group_type {
-	group_has_spare = 0,
-	group_fully_busy = 1,
-	group_misfit_task = 2,
-	group_asym_packing = 3,
-	group_imbalanced = 4,
-	group_overloaded = 5,
-};
-
-enum migration_type {
-	migrate_load = 0,
-	migrate_util = 1,
-	migrate_task = 2,
-	migrate_misfit = 3,
-};
-
-struct lb_env {
-	struct sched_domain *sd;
-	struct rq *src_rq;
-	int src_cpu;
-	int dst_cpu;
-	struct rq *dst_rq;
-	struct cpumask *dst_grpmask;
-	int new_dst_cpu;
-	enum cpu_idle_type idle;
-	long int imbalance;
-	struct cpumask *cpus;
-	unsigned int flags;
-	unsigned int loop;
-	unsigned int loop_break;
-	unsigned int loop_max;
-	enum fbq_type fbq_type;
-	enum migration_type migration_type;
-	struct list_head tasks;
-};
-
-struct sg_lb_stats {
-	long unsigned int avg_load;
-	long unsigned int group_load;
-	long unsigned int group_capacity;
-	long unsigned int group_util;
-	long unsigned int group_runnable;
-	unsigned int sum_nr_running;
-	unsigned int sum_h_nr_running;
-	unsigned int idle_cpus;
-	unsigned int group_weight;
-	enum group_type group_type;
-	unsigned int group_asym_packing;
-	long unsigned int group_misfit_task_load;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-};
-
-struct sd_lb_stats {
-	struct sched_group *busiest;
-	struct sched_group *local;
-	long unsigned int total_load;
-	long unsigned int total_capacity;
-	long unsigned int avg_load;
-	unsigned int prefer_sibling;
-	struct sg_lb_stats busiest_stat;
-	struct sg_lb_stats local_stat;
-};
-
-typedef struct rt_rq *rt_rq_iter_t;
-
-struct wait_bit_key {
-	void *flags;
-	int bit_nr;
-	long unsigned int timeout;
-};
-
-struct wait_bit_queue_entry {
-	struct wait_bit_key key;
-	struct wait_queue_entry wq_entry;
-};
-
-typedef int wait_bit_action_f(struct wait_bit_key *, int);
-
-struct swait_queue {
-	struct task_struct *task;
-	struct list_head task_list;
-};
-
-struct sd_flag_debug {
-	unsigned int meta_flags;
-	char *name;
-};
-
-struct sched_domain_attr {
-	int relax_domain_level;
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
 };
 
 typedef const struct cpumask * (*sched_domain_mask_f)(int);
@@ -22933,89 +71885,6 @@
 	int flags;
 	int numa_level;
 	struct sd_data data;
-	char *name;
-};
-
-struct s_data {
-	struct sched_domain **sd;
-	struct root_domain *rd;
-};
-
-enum s_alloc {
-	sa_rootdomain = 0,
-	sa_sd = 1,
-	sa_sd_storage = 2,
-	sa_none = 3,
-};
-
-enum cpuacct_stat_index {
-	CPUACCT_STAT_USER = 0,
-	CPUACCT_STAT_SYSTEM = 1,
-	CPUACCT_STAT_NSTATS = 2,
-};
-
-struct cpuacct_usage {
-	u64 usages[2];
-};
-
-struct cpuacct {
-	struct cgroup_subsys_state css;
-	struct cpuacct_usage *cpuusage;
-	struct kernel_cpustat *cpustat;
-};
-
-struct gov_attr_set {
-	struct kobject kobj;
-	struct list_head policy_list;
-	struct mutex update_lock;
-	int usage_count;
-};
-
-struct governor_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct gov_attr_set *, char *);
-	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
-};
-
-struct sugov_tunables {
-	struct gov_attr_set attr_set;
-	unsigned int rate_limit_us;
-};
-
-struct sugov_policy {
-	struct cpufreq_policy *policy;
-	struct sugov_tunables *tunables;
-	struct list_head tunables_hook;
-	raw_spinlock_t update_lock;
-	u64 last_freq_update_time;
-	s64 freq_update_delay_ns;
-	unsigned int next_freq;
-	unsigned int cached_raw_freq;
-	struct irq_work irq_work;
-	struct kthread_work work;
-	struct mutex work_lock;
-	struct kthread_worker worker;
-	struct task_struct *thread;
-	bool work_in_progress;
-	bool limits_changed;
-	bool need_freq_update;
-};
-
-struct sugov_cpu {
-	struct update_util_data update_util;
-	struct sugov_policy *sg_policy;
-	unsigned int cpu;
-	bool iowait_boost_pending;
-	unsigned int iowait_boost;
-	u64 last_update;
-	long unsigned int bw_dl;
-	long unsigned int max;
-	long unsigned int saved_idle_calls;
-};
-
-enum {
-	MEMBARRIER_FLAG_SYNC_CORE = 1,
-	MEMBARRIER_FLAG_RSEQ = 2,
 };
 
 enum membarrier_cmd {
@@ -23036,177 +71905,93 @@
 	MEMBARRIER_CMD_FLAG_CPU = 1,
 };
 
-struct proc_ops {
-	unsigned int proc_flags;
-	int (*proc_open)(struct inode *, struct file *);
-	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
-	loff_t (*proc_lseek)(struct file *, loff_t, int);
-	int (*proc_release)(struct inode *, struct file *);
-	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
-	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*proc_mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+enum numa_topology_type {
+	NUMA_DIRECT = 0,
+	NUMA_GLUELESS_MESH = 1,
+	NUMA_BACKPLANE = 2,
 };
 
-enum psi_res {
-	PSI_IO = 0,
-	PSI_MEM = 1,
-	PSI_CPU = 2,
-	NR_PSI_RESOURCES = 3,
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
 };
 
-struct psi_window {
-	u64 size;
-	u64 start_time;
-	u64 start_value;
-	u64 prev_growth;
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 *cpuusage;
+	struct kernel_cpustat *cpustat;
 };
 
-struct psi_trigger {
-	enum psi_states state;
-	u64 threshold;
-	struct list_head node;
-	struct psi_group *group;
-	wait_queue_head_t event_wait;
-	int event;
-	struct psi_window win;
-	u64 last_event_time;
-	struct kref refcount;
+struct s_data {
+	struct sched_domain **sd;
+	struct root_domain *rd;
 };
 
-struct ww_acquire_ctx;
-
-struct ww_mutex {
-	struct mutex base;
-	struct ww_acquire_ctx *ctx;
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
 };
 
-struct ww_acquire_ctx {
-	struct task_struct *task;
-	long unsigned int stamp;
-	unsigned int acquired;
-	short unsigned int wounded;
-	short unsigned int is_wait_die;
+struct asym_cap_data {
+	struct list_head link;
+	long unsigned int capacity;
+	long unsigned int cpus[0];
 };
 
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+struct housekeeping {
+	struct cpumask cpumasks[9];
+	long unsigned int flags;
+};
+
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
 struct mutex_waiter {
 	struct list_head list;
 	struct task_struct *task;
 	struct ww_acquire_ctx *ww_ctx;
 };
 
-enum mutex_trylock_recursive_enum {
-	MUTEX_TRYLOCK_FAILED = 0,
-	MUTEX_TRYLOCK_SUCCESS = 1,
-	MUTEX_TRYLOCK_RECURSIVE = 2,
-};
-
-struct semaphore {
-	raw_spinlock_t lock;
-	unsigned int count;
-	struct list_head wait_list;
-};
-
-struct semaphore_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	bool up;
-};
-
-enum rwsem_waiter_type {
-	RWSEM_WAITING_FOR_WRITE = 0,
-	RWSEM_WAITING_FOR_READ = 1,
-};
-
-struct rwsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	enum rwsem_waiter_type type;
-	long unsigned int timeout;
-	long unsigned int last_rowner;
-};
-
-enum rwsem_wake_type {
-	RWSEM_WAKE_ANY = 0,
-	RWSEM_WAKE_READERS = 1,
-	RWSEM_WAKE_READ_OWNED = 2,
-};
-
-enum writer_wait_state {
-	WRITER_NOT_FIRST = 0,
-	WRITER_FIRST = 1,
-	WRITER_HANDOFF = 2,
-};
-
-enum owner_state {
-	OWNER_NULL = 1,
-	OWNER_WRITER = 2,
-	OWNER_READER = 4,
-	OWNER_NONSPINNABLE = 8,
-};
-
-struct optimistic_spin_node {
-	struct optimistic_spin_node *next;
-	struct optimistic_spin_node *prev;
-	int locked;
-	int cpu;
-};
-
-struct mcs_spinlock {
-	struct mcs_spinlock *next;
-	int locked;
-	int count;
-};
-
-struct qnode {
-	struct mcs_spinlock mcs;
-};
-
-struct hrtimer_sleeper {
-	struct hrtimer timer;
-	struct task_struct *task;
-};
-
-struct rt_mutex;
-
-struct rt_mutex_waiter {
-	struct rb_node tree_entry;
-	struct rb_node pi_tree_entry;
-	struct task_struct *task;
-	struct rt_mutex *lock;
-	int prio;
-	u64 deadline;
-};
-
-struct rt_mutex {
-	raw_spinlock_t wait_lock;
-	struct rb_root_cached waiters;
-	struct task_struct *owner;
-};
-
-enum rtmutex_chainwalk {
-	RT_MUTEX_MIN_CHAINWALK = 0,
-	RT_MUTEX_FULL_CHAINWALK = 1,
-};
-
-struct task_struct___2;
-
-struct pm_qos_request {
-	struct plist_node node;
-	struct pm_qos_constraints *qos;
-};
-
 enum pm_qos_req_action {
 	PM_QOS_ADD_REQ = 0,
 	PM_QOS_UPDATE_REQ = 1,
 	PM_QOS_REMOVE_REQ = 2,
 };
 
-typedef int suspend_state_t;
-
 enum suspend_stat_step {
 	SUSPEND_FREEZE = 1,
 	SUSPEND_PREPARE = 2,
@@ -23237,22 +72022,6 @@
 	enum suspend_stat_step failed_steps[2];
 };
 
-enum {
-	TEST_NONE = 0,
-	TEST_CORE = 1,
-	TEST_CPUS = 2,
-	TEST_PLATFORM = 3,
-	TEST_DEVICES = 4,
-	TEST_FREEZER = 5,
-	__TEST_AFTER_LAST = 6,
-};
-
-struct pm_vt_switch {
-	struct list_head head;
-	struct device *dev;
-	bool required;
-};
-
 struct platform_suspend_ops {
 	int (*valid)(suspend_state_t);
 	int (*begin)(suspend_state_t);
@@ -23270,955 +72039,27 @@
 	int (*begin)();
 	int (*prepare)();
 	int (*prepare_late)();
+	void (*check)();
 	bool (*wake)();
 	void (*restore_early)();
 	void (*restore)();
 	void (*end)();
 };
 
-struct platform_hibernation_ops {
-	int (*begin)(pm_message_t);
-	void (*end)();
-	int (*pre_snapshot)();
-	void (*finish)();
-	int (*prepare)();
-	int (*enter)();
-	void (*leave)();
-	int (*pre_restore)();
-	void (*restore_cleanup)();
-	void (*recover)();
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
 };
 
 enum {
-	HIBERNATION_INVALID = 0,
-	HIBERNATION_PLATFORM = 1,
-	HIBERNATION_SHUTDOWN = 2,
-	HIBERNATION_REBOOT = 3,
-	HIBERNATION_SUSPEND = 4,
-	HIBERNATION_TEST_RESUME = 5,
-	__HIBERNATION_AFTER_LAST = 6,
-};
-
-struct swsusp_info {
-	struct new_utsname uts;
-	u32 version_code;
-	long unsigned int num_physpages;
-	int cpus;
-	long unsigned int image_pages;
-	long unsigned int pages;
-	long unsigned int size;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct snapshot_handle {
-	unsigned int cur;
-	void *buffer;
-	int sync_read;
-};
-
-struct linked_page {
-	struct linked_page *next;
-	char data[4088];
-};
-
-struct chain_allocator {
-	struct linked_page *chain;
-	unsigned int used_space;
-	gfp_t gfp_mask;
-	int safe_needed;
-};
-
-struct rtree_node {
-	struct list_head list;
-	long unsigned int *data;
-};
-
-struct mem_zone_bm_rtree {
-	struct list_head list;
-	struct list_head nodes;
-	struct list_head leaves;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	struct rtree_node *rtree;
-	int levels;
-	unsigned int blocks;
-};
-
-struct bm_position {
-	struct mem_zone_bm_rtree *zone;
-	struct rtree_node *node;
-	long unsigned int node_pfn;
-	int node_bit;
-};
-
-struct memory_bitmap {
-	struct list_head zones;
-	struct linked_page *p_list;
-	struct bm_position cur;
-};
-
-struct mem_extent {
-	struct list_head hook;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct nosave_region {
-	struct list_head list;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-};
-
-enum {
-	BIO_NO_PAGE_REF = 0,
-	BIO_CLONED = 1,
-	BIO_BOUNCED = 2,
-	BIO_WORKINGSET = 3,
-	BIO_QUIET = 4,
-	BIO_CHAIN = 5,
-	BIO_REFFED = 6,
-	BIO_THROTTLED = 7,
-	BIO_TRACE_COMPLETION = 8,
-	BIO_CGROUP_ACCT = 9,
-	BIO_TRACKED = 10,
-	BIO_FLAG_LAST = 11,
-};
-
-enum req_opf {
-	REQ_OP_READ = 0,
-	REQ_OP_WRITE = 1,
-	REQ_OP_FLUSH = 2,
-	REQ_OP_DISCARD = 3,
-	REQ_OP_SECURE_ERASE = 5,
-	REQ_OP_WRITE_SAME = 7,
-	REQ_OP_WRITE_ZEROES = 9,
-	REQ_OP_ZONE_OPEN = 10,
-	REQ_OP_ZONE_CLOSE = 11,
-	REQ_OP_ZONE_FINISH = 12,
-	REQ_OP_ZONE_APPEND = 13,
-	REQ_OP_ZONE_RESET = 15,
-	REQ_OP_ZONE_RESET_ALL = 17,
-	REQ_OP_SCSI_IN = 32,
-	REQ_OP_SCSI_OUT = 33,
-	REQ_OP_DRV_IN = 34,
-	REQ_OP_DRV_OUT = 35,
-	REQ_OP_LAST = 36,
-};
-
-enum req_flag_bits {
-	__REQ_FAILFAST_DEV = 8,
-	__REQ_FAILFAST_TRANSPORT = 9,
-	__REQ_FAILFAST_DRIVER = 10,
-	__REQ_SYNC = 11,
-	__REQ_META = 12,
-	__REQ_PRIO = 13,
-	__REQ_NOMERGE = 14,
-	__REQ_IDLE = 15,
-	__REQ_INTEGRITY = 16,
-	__REQ_FUA = 17,
-	__REQ_PREFLUSH = 18,
-	__REQ_RAHEAD = 19,
-	__REQ_BACKGROUND = 20,
-	__REQ_NOWAIT = 21,
-	__REQ_CGROUP_PUNT = 22,
-	__REQ_NOUNMAP = 23,
-	__REQ_HIPRI = 24,
-	__REQ_DRV = 25,
-	__REQ_SWAP = 26,
-	__REQ_NR_BITS = 27,
-};
-
-struct swap_map_page {
-	sector_t entries[511];
-	sector_t next_swap;
-};
-
-struct swap_map_page_list {
-	struct swap_map_page *map;
-	struct swap_map_page_list *next;
-};
-
-struct swap_map_handle {
-	struct swap_map_page *cur;
-	struct swap_map_page_list *maps;
-	sector_t cur_swap;
-	sector_t first_sector;
-	unsigned int k;
-	long unsigned int reqd_free_pages;
-	u32 crc32;
-};
-
-struct swsusp_header {
-	char reserved[4060];
-	u32 crc32;
-	sector_t image;
-	unsigned int flags;
-	char orig_sig[10];
-	char sig[10];
-};
-
-struct swsusp_extent {
-	struct rb_node node;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct hib_bio_batch {
-	atomic_t count;
-	wait_queue_head_t wait;
-	blk_status_t error;
-	struct blk_plug plug;
-};
-
-struct crc_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	unsigned int run_threads;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	u32 *crc32;
-	size_t *unc_len[3];
-	unsigned char *unc[3];
-};
-
-struct cmp_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[131072];
-	unsigned char cmp[143360];
-	unsigned char wrk[16384];
-};
-
-struct dec_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[131072];
-	unsigned char cmp[143360];
-};
-
-typedef s64 compat_loff_t;
-
-struct resume_swap_area {
-	__kernel_loff_t offset;
-	__u32 dev;
-} __attribute__((packed));
-
-struct snapshot_data {
-	struct snapshot_handle handle;
-	int swap;
-	int mode;
-	bool frozen;
-	bool ready;
-	bool platform_support;
-	bool free_bitmaps;
-	dev_t dev;
-};
-
-struct compat_resume_swap_area {
-	compat_loff_t offset;
-	u32 dev;
-} __attribute__((packed));
-
-struct sysrq_key_op {
-	void (* const handler)(int);
-	const char * const help_msg;
-	const char * const action_msg;
-	const int enable_mask;
-};
-
-struct em_data_callback {
-	int (*active_power)(long unsigned int *, long unsigned int *, struct device *);
-};
-
-struct dev_printk_info {
-	char subsystem[16];
-	char device[48];
-};
-
-struct console {
-	char name[16];
-	void (*write)(struct console *, const char *, unsigned int);
-	int (*read)(struct console *, char *, unsigned int);
-	struct tty_driver * (*device)(struct console *, int *);
-	void (*unblank)();
-	int (*setup)(struct console *, char *);
-	int (*exit)(struct console *);
-	int (*match)(struct console *, char *, int, char *);
-	short int flags;
-	short int index;
-	int cflag;
-	void *data;
-	struct console *next;
-};
-
-struct kmsg_dumper {
-	struct list_head list;
-	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
-	enum kmsg_dump_reason max_reason;
-	bool active;
-	bool registered;
-	u32 cur_idx;
-	u32 next_idx;
-	u64 cur_seq;
-	u64 next_seq;
-};
-
-struct trace_event_raw_console {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_console {
-	u32 msg;
-};
-
-typedef void (*btf_trace_console)(void *, const char *, size_t);
-
-struct printk_info {
-	u64 seq;
-	u64 ts_nsec;
-	u16 text_len;
-	u8 facility;
-	u8 flags: 5;
-	u8 level: 3;
-	u32 caller_id;
-	struct dev_printk_info dev_info;
-};
-
-struct printk_record {
-	struct printk_info *info;
-	char *text_buf;
-	unsigned int text_buf_size;
-};
-
-struct prb_data_blk_lpos {
-	long unsigned int begin;
-	long unsigned int next;
-};
-
-struct prb_desc {
-	atomic_long_t state_var;
-	struct prb_data_blk_lpos text_blk_lpos;
-};
-
-struct prb_data_ring {
-	unsigned int size_bits;
-	char *data;
-	atomic_long_t head_lpos;
-	atomic_long_t tail_lpos;
-};
-
-struct prb_desc_ring {
-	unsigned int count_bits;
-	struct prb_desc *descs;
-	struct printk_info *infos;
-	atomic_long_t head_id;
-	atomic_long_t tail_id;
-};
-
-struct printk_ringbuffer {
-	struct prb_desc_ring desc_ring;
-	struct prb_data_ring text_data_ring;
-	atomic_long_t fail;
-};
-
-struct prb_reserved_entry {
-	struct printk_ringbuffer *rb;
-	long unsigned int irqflags;
-	long unsigned int id;
-	unsigned int text_space;
-};
-
-enum desc_state {
-	desc_miss = 4294967295,
-	desc_reserved = 0,
-	desc_committed = 1,
-	desc_finalized = 2,
-	desc_reusable = 3,
-};
-
-struct console_cmdline {
-	char name[16];
-	int index;
-	bool user_specified;
-	char *options;
-	char *brl_options;
-};
-
-enum devkmsg_log_bits {
-	__DEVKMSG_LOG_BIT_ON = 0,
-	__DEVKMSG_LOG_BIT_OFF = 1,
-	__DEVKMSG_LOG_BIT_LOCK = 2,
-};
-
-enum devkmsg_log_masks {
-	DEVKMSG_LOG_MASK_ON = 1,
-	DEVKMSG_LOG_MASK_OFF = 2,
-	DEVKMSG_LOG_MASK_LOCK = 4,
-};
-
-enum con_msg_format_flags {
-	MSG_FORMAT_DEFAULT = 0,
-	MSG_FORMAT_SYSLOG = 1,
-};
-
-enum log_flags {
-	LOG_NEWLINE = 2,
-	LOG_CONT = 8,
-};
-
-struct devkmsg_user {
-	u64 seq;
-	struct ratelimit_state rs;
-	struct mutex lock;
-	char buf[8192];
-	struct printk_info info;
-	char text_buf[8192];
-	struct printk_record record;
-};
-
-struct printk_safe_seq_buf {
-	atomic_t len;
-	atomic_t message_lost;
-	struct irq_work work;
-	unsigned char buffer[8160];
-};
-
-struct prb_data_block {
-	long unsigned int id;
-	char data[0];
-};
-
-enum {
-	IRQS_AUTODETECT = 1,
-	IRQS_SPURIOUS_DISABLED = 2,
-	IRQS_POLL_INPROGRESS = 8,
-	IRQS_ONESHOT = 32,
-	IRQS_REPLAY = 64,
-	IRQS_WAITING = 128,
-	IRQS_PENDING = 512,
-	IRQS_SUSPENDED = 2048,
-	IRQS_TIMINGS = 4096,
-	IRQS_NMI = 8192,
-};
-
-enum {
-	_IRQ_DEFAULT_INIT_FLAGS = 0,
-	_IRQ_PER_CPU = 512,
-	_IRQ_LEVEL = 256,
-	_IRQ_NOPROBE = 1024,
-	_IRQ_NOREQUEST = 2048,
-	_IRQ_NOTHREAD = 65536,
-	_IRQ_NOAUTOEN = 4096,
-	_IRQ_MOVE_PCNTXT = 16384,
-	_IRQ_NO_BALANCING = 8192,
-	_IRQ_NESTED_THREAD = 32768,
-	_IRQ_PER_CPU_DEVID = 131072,
-	_IRQ_IS_POLLED = 262144,
-	_IRQ_DISABLE_UNLAZY = 524288,
-	_IRQ_HIDDEN = 1048576,
-	_IRQF_MODIFY_MASK = 2096911,
-};
-
-enum {
-	IRQTF_RUNTHREAD = 0,
-	IRQTF_WARNED = 1,
-	IRQTF_AFFINITY = 2,
-	IRQTF_FORCED_THREAD = 3,
-};
-
-enum {
-	IRQ_SET_MASK_OK = 0,
-	IRQ_SET_MASK_OK_NOCOPY = 1,
-	IRQ_SET_MASK_OK_DONE = 2,
-};
-
-enum {
-	IRQCHIP_SET_TYPE_MASKED = 1,
-	IRQCHIP_EOI_IF_HANDLED = 2,
-	IRQCHIP_MASK_ON_SUSPEND = 4,
-	IRQCHIP_ONOFFLINE_ENABLED = 8,
-	IRQCHIP_SKIP_SET_WAKE = 16,
-	IRQCHIP_ONESHOT_SAFE = 32,
-	IRQCHIP_EOI_THREADED = 64,
-	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
-	IRQCHIP_SUPPORTS_NMI = 256,
-	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
-};
-
-enum {
-	IRQC_IS_HARDIRQ = 0,
-	IRQC_IS_NESTED = 1,
+	TEST_NONE = 0,
+	TEST_CORE = 1,
+	TEST_CPUS = 2,
+	TEST_PLATFORM = 3,
+	TEST_DEVICES = 4,
+	TEST_FREEZER = 5,
+	__TEST_AFTER_LAST = 6,
 };
 
 enum {
@@ -24227,174 +72068,6 @@
 	IRQ_STARTUP_ABORT = 2,
 };
 
-struct irq_devres {
-	unsigned int irq;
-	void *dev_id;
-};
-
-struct irq_desc_devres {
-	unsigned int from;
-	unsigned int cnt;
-};
-
-struct irq_generic_chip_devres {
-	struct irq_chip_generic *gc;
-	u32 msk;
-	unsigned int clr;
-	unsigned int set;
-};
-
-enum {
-	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
-	IRQ_DOMAIN_NAME_ALLOCATED = 2,
-	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
-	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
-	IRQ_DOMAIN_FLAG_MSI = 16,
-	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
-	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
-	IRQ_DOMAIN_FLAG_NONCORE = 65536,
-};
-
-enum {
-	IRQCHIP_FWNODE_REAL = 0,
-	IRQCHIP_FWNODE_NAMED = 1,
-	IRQCHIP_FWNODE_NAMED_ID = 2,
-};
-
-struct irqchip_fwid {
-	struct fwnode_handle fwnode;
-	unsigned int type;
-	char *name;
-	phys_addr_t *pa;
-};
-
-enum {
-	AFFINITY = 0,
-	AFFINITY_LIST = 1,
-	EFFECTIVE = 2,
-	EFFECTIVE_LIST = 3,
-};
-
-struct msi_alloc_info {
-	struct msi_desc *desc;
-	irq_hw_number_t hwirq;
-	union {
-		long unsigned int ul;
-		void *ptr;
-	} scratchpad[2];
-};
-
-typedef struct msi_alloc_info msi_alloc_info_t;
-
-struct msi_domain_info;
-
-struct msi_domain_ops {
-	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
-	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
-	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
-	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
-	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
-	void (*msi_finish)(msi_alloc_info_t *, int);
-	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
-	int (*handle_error)(struct irq_domain *, struct msi_desc *, int);
-	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
-	void (*domain_free_irqs)(struct irq_domain *, struct device *);
-};
-
-struct msi_domain_info {
-	u32 flags;
-	struct msi_domain_ops *ops;
-	struct irq_chip *chip;
-	void *chip_data;
-	irq_flow_handler_t handler;
-	void *handler_data;
-	const char *handler_name;
-	void *data;
-};
-
-enum {
-	MSI_FLAG_USE_DEF_DOM_OPS = 1,
-	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
-	MSI_FLAG_MULTI_PCI_MSI = 4,
-	MSI_FLAG_PCI_MSIX = 8,
-	MSI_FLAG_ACTIVATE_EARLY = 16,
-	MSI_FLAG_MUST_REACTIVATE = 32,
-	MSI_FLAG_LEVEL_CAPABLE = 64,
-};
-
-struct irq_affinity {
-	unsigned int pre_vectors;
-	unsigned int post_vectors;
-	unsigned int nr_sets;
-	unsigned int set_size[4];
-	void (*calc_sets)(struct irq_affinity *, unsigned int);
-	void *priv;
-};
-
-struct node_vectors {
-	unsigned int id;
-	union {
-		unsigned int nvectors;
-		unsigned int ncpus;
-	};
-};
-
-typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
-
-struct rcu_synchronize {
-	struct callback_head head;
-	struct completion completion;
-};
-
-struct trace_event_raw_rcu_utilization {
-	struct trace_entry ent;
-	const char *s;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rcu_utilization {};
-
-typedef void (*btf_trace_rcu_utilization)(void *, const char *);
-
-struct rcu_tasks;
-
-typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
-
-typedef void (*pregp_func_t)();
-
-typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
-
-typedef void (*postscan_func_t)(struct list_head *);
-
-typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
-
-typedef void (*postgp_func_t)(struct rcu_tasks *);
-
-struct rcu_tasks {
-	struct callback_head *cbs_head;
-	struct callback_head **cbs_tail;
-	struct wait_queue_head cbs_wq;
-	raw_spinlock_t cbs_lock;
-	int gp_state;
-	int gp_sleep;
-	int init_fract;
-	long unsigned int gp_jiffies;
-	long unsigned int gp_start;
-	long unsigned int n_gps;
-	long unsigned int n_ipis;
-	long unsigned int n_ipis_fails;
-	struct task_struct *kthread_ptr;
-	rcu_tasks_gp_func_t gp_func;
-	pregp_func_t pregp_func;
-	pertask_func_t pertask_func;
-	postscan_func_t postscan_func;
-	holdouts_func_t holdouts_func;
-	postgp_func_t postgp_func;
-	call_rcu_func_t call_func;
-	char *name;
-	char *kname;
-};
-
 enum {
 	GP_IDLE = 0,
 	GP_ENTER = 1,
@@ -24403,20 +72076,15 @@
 	GP_REPLAY = 4,
 };
 
-struct rcu_cblist {
-	struct callback_head *head;
-	struct callback_head **tail;
-	long int len;
+struct rcu_gp_oldstate {
+	long unsigned int rgos_norm;
+	long unsigned int rgos_exp;
 };
 
-enum rcutorture_type {
-	RCU_FLAVOR = 0,
-	RCU_TASKS_FLAVOR = 1,
-	RCU_TASKS_RUDE_FLAVOR = 2,
-	RCU_TASKS_TRACING_FLAVOR = 3,
-	RCU_TRIVIAL_FLAVOR = 4,
-	SRCU_FLAVOR = 5,
-	INVALID_RCU_FLAVOR = 6,
+struct context_tracking {
+	atomic_t state;
+	long int dynticks_nesting;
+	long int dynticks_nmi_nesting;
 };
 
 enum tick_dep_bits {
@@ -24428,6 +72096,13 @@
 	TICK_DEP_BIT_RCU_EXP = 5,
 };
 
+struct sysrq_key_op {
+	void (* const handler)(int);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
 struct rcu_exp_work {
 	long unsigned int rew_s;
 	struct work_struct rew_work;
@@ -24460,9 +72135,13 @@
 	struct list_head *boost_tasks;
 	struct rt_mutex boost_mtx;
 	long unsigned int boost_time;
+	struct mutex boost_kthread_mutex;
 	struct task_struct *boost_kthread_task;
 	unsigned int boost_kthread_status;
-	long: 32;
+	long unsigned int n_boosts;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -24480,7 +72159,12 @@
 	wait_queue_head_t exp_wq[4];
 	struct rcu_exp_work rew;
 	bool exp_need_flush;
-	long: 56;
+	raw_spinlock_t exp_poll_lock;
+	long unsigned int exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -24502,7 +72186,6 @@
 	bool core_needs_qs;
 	bool beenonline;
 	bool gpwrap;
-	bool exp_deferred_qs;
 	bool cpu_started;
 	struct rcu_node *mynode;
 	long unsigned int grpmask;
@@ -24516,18 +72199,17 @@
 	long unsigned int n_force_qs_snap;
 	long int blimit;
 	int dynticks_snap;
-	long int dynticks_nesting;
-	long int dynticks_nmi_nesting;
-	atomic_t dynticks;
 	bool rcu_need_heavy_qs;
 	bool rcu_urgent_qs;
 	bool rcu_forced_tick;
 	bool rcu_forced_tick_exp;
+	long unsigned int barrier_seq_snap;
 	struct callback_head barrier_head;
 	int exp_dynticks_snap;
 	struct task_struct *rcu_cpu_kthread_task;
 	unsigned int rcu_cpu_kthread_status;
 	char rcu_cpu_has_work;
+	long unsigned int rcuc_activity;
 	unsigned int softirq_snap;
 	struct irq_work rcu_iw;
 	bool rcu_iw_pending;
@@ -24537,19 +72219,20 @@
 	long unsigned int rcu_onl_gp_seq;
 	short int rcu_onl_gp_flags;
 	long unsigned int last_fqs_resched;
+	long unsigned int last_sched_clock;
+	long int lazy_len;
 	int cpu;
 };
 
 struct rcu_state {
-	struct rcu_node node[9];
+	struct rcu_node node[5];
 	struct rcu_node *level[3];
 	int ncpus;
-	long: 32;
+	int n_online_cpus;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	u8 boost;
 	long unsigned int gp_seq;
 	long unsigned int gp_max;
 	struct task_struct *gp_kthread;
@@ -24558,10 +72241,14 @@
 	short int gp_state;
 	long unsigned int gp_wake_time;
 	long unsigned int gp_wake_seq;
+	long unsigned int gp_seq_polled;
+	long unsigned int gp_seq_polled_snap;
+	long unsigned int gp_seq_polled_exp_snap;
 	struct mutex barrier_mutex;
 	atomic_t barrier_cpu_count;
 	struct completion barrier_completion;
 	long unsigned int barrier_sequence;
+	raw_spinlock_t barrier_lock;
 	struct mutex exp_mutex;
 	struct mutex exp_wake_mutex;
 	long unsigned int expedited_sequence;
@@ -24585,8 +72272,13 @@
 	long: 56;
 	long: 64;
 	long: 64;
-	raw_spinlock_t ofl_lock;
-	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -24596,6 +72288,16 @@
 	long: 64;
 };
 
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
+
 struct kvfree_rcu_bulk_data {
 	long unsigned int nr_records;
 	struct kvfree_rcu_bulk_data *next;
@@ -24617,113 +72319,34 @@
 	struct kfree_rcu_cpu_work krw_arr[2];
 	raw_spinlock_t lock;
 	struct delayed_work monitor_work;
-	bool monitor_todo;
 	bool initialized;
 	int count;
-	struct work_struct page_cache_work;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
 	atomic_t work_in_progress;
 	struct hrtimer hrtimer;
 	struct llist_head bkvcache;
 	int nr_bkv_objs;
 };
 
-enum dma_sync_target {
-	SYNC_FOR_CPU = 0,
-	SYNC_FOR_DEVICE = 1,
+struct module_sect_attr {
+	struct bin_attribute battr;
+	long unsigned int address;
 };
 
-struct dma_devres {
-	size_t size;
-	void *vaddr;
-	dma_addr_t dma_handle;
-	long unsigned int attrs;
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
 };
 
-struct reserved_mem_ops;
-
-struct reserved_mem {
-	const char *name;
-	long unsigned int fdt_node;
-	long unsigned int phandle;
-	const struct reserved_mem_ops *ops;
-	phys_addr_t base;
-	phys_addr_t size;
-	void *priv;
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
 };
 
-struct reserved_mem_ops {
-	int (*device_init)(struct reserved_mem *, struct device *);
-	void (*device_release)(struct reserved_mem *, struct device *);
-};
-
-typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
-
-struct dma_coherent_mem {
-	void *virt_base;
-	dma_addr_t device_base;
-	long unsigned int pfn_base;
-	int size;
-	long unsigned int *bitmap;
-	spinlock_t spinlock;
-	bool use_dev_dma_pfn_offset;
-};
-
-struct trace_event_raw_swiotlb_bounced {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u64 dma_mask;
-	dma_addr_t dev_addr;
-	size_t size;
-	enum swiotlb_force swiotlb_force;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_swiotlb_bounced {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);
-
-struct gen_pool;
-
-typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
-
-struct gen_pool {
-	spinlock_t lock;
-	struct list_head chunks;
-	int min_alloc_order;
-	genpool_algo_t algo;
-	void *data;
-	const char *name;
-};
-
-enum kcmp_type {
-	KCMP_FILE = 0,
-	KCMP_VM = 1,
-	KCMP_FILES = 2,
-	KCMP_FS = 3,
-	KCMP_SIGHAND = 4,
-	KCMP_IO = 5,
-	KCMP_SYSVSEM = 6,
-	KCMP_EPOLL_TFD = 7,
-	KCMP_TYPES = 8,
-};
-
-struct kcmp_epoll_slot {
-	__u32 efd;
-	__u32 tfd;
-	__u32 toff;
-};
-
-enum profile_type {
-	PROFILE_TASK_EXIT = 0,
-	PROFILE_MUNMAP = 1,
-};
-
-struct profile_hit {
-	u32 pc;
-	u32 hits;
-};
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
 
 struct stacktrace_cookie {
 	long unsigned int *store;
@@ -24732,95 +72355,6 @@
 	unsigned int len;
 };
 
-typedef __kernel_long_t __kernel_suseconds_t;
-
-typedef __kernel_suseconds_t suseconds_t;
-
-typedef __u64 timeu64_t;
-
-struct __kernel_itimerspec {
-	struct __kernel_timespec it_interval;
-	struct __kernel_timespec it_value;
-};
-
-struct timezone {
-	int tz_minuteswest;
-	int tz_dsttime;
-};
-
-struct itimerspec64 {
-	struct timespec64 it_interval;
-	struct timespec64 it_value;
-};
-
-struct old_itimerspec32 {
-	struct old_timespec32 it_interval;
-	struct old_timespec32 it_value;
-};
-
-struct old_timex32 {
-	u32 modes;
-	s32 offset;
-	s32 freq;
-	s32 maxerror;
-	s32 esterror;
-	s32 status;
-	s32 constant;
-	s32 precision;
-	s32 tolerance;
-	struct old_timeval32 time;
-	s32 tick;
-	s32 ppsfreq;
-	s32 jitter;
-	s32 shift;
-	s32 stabil;
-	s32 jitcnt;
-	s32 calcnt;
-	s32 errcnt;
-	s32 stbcnt;
-	s32 tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct __kernel_timex_timeval {
-	__kernel_time64_t tv_sec;
-	long long int tv_usec;
-};
-
-struct __kernel_timex {
-	unsigned int modes;
-	long long int offset;
-	long long int freq;
-	long long int maxerror;
-	long long int esterror;
-	int status;
-	long long int constant;
-	long long int precision;
-	long long int tolerance;
-	struct __kernel_timex_timeval time;
-	long long int tick;
-	long long int ppsfreq;
-	long long int jitter;
-	int shift;
-	long long int stabil;
-	long long int jitcnt;
-	long long int calcnt;
-	long long int errcnt;
-	long long int stbcnt;
-	int tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct trace_event_raw_timer_class {
 	struct trace_entry ent;
 	void *timer;
@@ -24958,6 +72492,7 @@
 	unsigned int cpu;
 	bool next_expiry_recalc;
 	bool is_idle;
+	bool timers_pending;
 	long unsigned int pending_map[9];
 	struct hlist_head vectors[576];
 	long: 64;
@@ -24969,148 +72504,6 @@
 	struct task_struct *task;
 };
 
-enum clock_event_state {
-	CLOCK_EVT_STATE_DETACHED = 0,
-	CLOCK_EVT_STATE_SHUTDOWN = 1,
-	CLOCK_EVT_STATE_PERIODIC = 2,
-	CLOCK_EVT_STATE_ONESHOT = 3,
-	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
-};
-
-struct clock_event_device {
-	void (*event_handler)(struct clock_event_device *);
-	int (*set_next_event)(long unsigned int, struct clock_event_device *);
-	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
-	ktime_t next_event;
-	u64 max_delta_ns;
-	u64 min_delta_ns;
-	u32 mult;
-	u32 shift;
-	enum clock_event_state state_use_accessors;
-	unsigned int features;
-	long unsigned int retries;
-	int (*set_state_periodic)(struct clock_event_device *);
-	int (*set_state_oneshot)(struct clock_event_device *);
-	int (*set_state_oneshot_stopped)(struct clock_event_device *);
-	int (*set_state_shutdown)(struct clock_event_device *);
-	int (*tick_resume)(struct clock_event_device *);
-	void (*broadcast)(const struct cpumask *);
-	void (*suspend)(struct clock_event_device *);
-	void (*resume)(struct clock_event_device *);
-	long unsigned int min_delta_ticks;
-	long unsigned int max_delta_ticks;
-	const char *name;
-	int rating;
-	int irq;
-	int bound_on;
-	const struct cpumask *cpumask;
-	struct list_head list;
-	struct module *owner;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum tick_device_mode {
-	TICKDEV_MODE_PERIODIC = 0,
-	TICKDEV_MODE_ONESHOT = 1,
-};
-
-struct tick_device {
-	struct clock_event_device *evtdev;
-	enum tick_device_mode mode;
-};
-
-struct ktime_timestamps {
-	u64 mono;
-	u64 boot;
-	u64 real;
-};
-
-struct system_time_snapshot {
-	u64 cycles;
-	ktime_t real;
-	ktime_t raw;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-};
-
-struct system_device_crosststamp {
-	ktime_t device;
-	ktime_t sys_realtime;
-	ktime_t sys_monoraw;
-};
-
-struct system_counterval_t {
-	u64 cycles;
-	struct clocksource *cs;
-};
-
-typedef struct {
-	seqcount_t seqcount;
-} seqcount_latch_t;
-
-struct audit_ntp_val {
-	long long int oldval;
-	long long int newval;
-};
-
-struct audit_ntp_data {
-	struct audit_ntp_val vals[6];
-};
-
-enum timekeeping_adv_mode {
-	TK_ADV_TICK = 0,
-	TK_ADV_FREQ = 1,
-};
-
-struct tk_fast {
-	seqcount_latch_t seq;
-	struct tk_read_base base[2];
-};
-
-enum tick_nohz_mode {
-	NOHZ_MODE_INACTIVE = 0,
-	NOHZ_MODE_LOWRES = 1,
-	NOHZ_MODE_HIGHRES = 2,
-};
-
-struct tick_sched {
-	struct hrtimer sched_timer;
-	long unsigned int check_clocks;
-	enum tick_nohz_mode nohz_mode;
-	unsigned int inidle: 1;
-	unsigned int tick_stopped: 1;
-	unsigned int idle_active: 1;
-	unsigned int do_timer_last: 1;
-	unsigned int got_idle_tick: 1;
-	ktime_t last_tick;
-	ktime_t next_tick;
-	long unsigned int idle_jiffies;
-	long unsigned int idle_calls;
-	long unsigned int idle_sleeps;
-	ktime_t idle_entrytime;
-	ktime_t idle_waketime;
-	ktime_t idle_exittime;
-	ktime_t idle_sleeptime;
-	ktime_t iowait_sleeptime;
-	long unsigned int last_jiffies;
-	u64 timer_expires;
-	u64 timer_expires_base;
-	u64 next_timer;
-	ktime_t idle_expires;
-	atomic_t tick_dep_mask;
-};
-
-struct timer_list_iter {
-	int cpu;
-	bool second_pass;
-	u64 now;
-};
-
 struct tm {
 	int tm_sec;
 	int tm_min;
@@ -25122,1678 +72515,118 @@
 	int tm_yday;
 };
 
-typedef __kernel_timer_t timer_t;
-
-struct rtc_time {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	int tm_year;
-	int tm_wday;
-	int tm_yday;
-	int tm_isdst;
-};
-
-struct rtc_wkalrm {
-	unsigned char enabled;
-	unsigned char pending;
-	struct rtc_time time;
-};
-
-enum alarmtimer_type {
-	ALARM_REALTIME = 0,
-	ALARM_BOOTTIME = 1,
-	ALARM_NUMTYPE = 2,
-	ALARM_REALTIME_FREEZER = 3,
-	ALARM_BOOTTIME_FREEZER = 4,
-};
-
-enum alarmtimer_restart {
-	ALARMTIMER_NORESTART = 0,
-	ALARMTIMER_RESTART = 1,
-};
-
-struct alarm {
-	struct timerqueue_node node;
-	struct hrtimer timer;
-	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
-	enum alarmtimer_type type;
-	int state;
-	void *data;
-};
-
-struct cpu_timer {
-	struct timerqueue_node node;
-	struct timerqueue_head *head;
-	struct pid *pid;
-	struct list_head elist;
-	int firing;
-};
-
-struct k_clock;
-
-struct k_itimer {
-	struct list_head list;
-	struct hlist_node t_hash;
-	spinlock_t it_lock;
-	const struct k_clock *kclock;
-	clockid_t it_clock;
-	timer_t it_id;
-	int it_active;
-	s64 it_overrun;
-	s64 it_overrun_last;
-	int it_requeue_pending;
-	int it_sigev_notify;
-	ktime_t it_interval;
-	struct signal_struct *it_signal;
-	union {
-		struct pid *it_pid;
-		struct task_struct *it_process;
-	};
-	struct sigqueue *sigq;
-	union {
-		struct {
-			struct hrtimer timer;
-		} real;
-		struct cpu_timer cpu;
-		struct {
-			struct alarm alarmtimer;
-		} alarm;
-	} it;
-	struct callback_head rcu;
-};
-
-struct k_clock {
-	int (*clock_getres)(const clockid_t, struct timespec64 *);
-	int (*clock_set)(const clockid_t, const struct timespec64 *);
-	int (*clock_get_timespec)(const clockid_t, struct timespec64 *);
-	ktime_t (*clock_get_ktime)(const clockid_t);
-	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
-	int (*timer_create)(struct k_itimer *);
-	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
-	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
-	int (*timer_del)(struct k_itimer *);
-	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
-	void (*timer_rearm)(struct k_itimer *);
-	s64 (*timer_forward)(struct k_itimer *, ktime_t);
-	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
-	int (*timer_try_to_cancel)(struct k_itimer *);
-	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
-	void (*timer_wait_running)(struct k_itimer *);
-};
-
-struct class_interface {
-	struct list_head node;
-	struct class *class;
-	int (*add_dev)(struct device *, struct class_interface *);
-	void (*remove_dev)(struct device *, struct class_interface *);
-};
-
-struct rtc_class_ops {
-	int (*ioctl)(struct device *, unsigned int, long unsigned int);
-	int (*read_time)(struct device *, struct rtc_time *);
-	int (*set_time)(struct device *, struct rtc_time *);
-	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*proc)(struct device *, struct seq_file *);
-	int (*alarm_irq_enable)(struct device *, unsigned int);
-	int (*read_offset)(struct device *, long int *);
-	int (*set_offset)(struct device *, long int);
-};
-
-struct rtc_device;
-
-struct rtc_timer {
-	struct timerqueue_node node;
-	ktime_t period;
-	void (*func)(struct rtc_device *);
-	struct rtc_device *rtc;
-	int enabled;
-};
-
-struct rtc_device {
-	struct device dev;
-	struct module *owner;
-	int id;
-	const struct rtc_class_ops *ops;
-	struct mutex ops_lock;
-	struct cdev char_dev;
-	long unsigned int flags;
-	long unsigned int irq_data;
-	spinlock_t irq_lock;
-	wait_queue_head_t irq_queue;
-	struct fasync_struct *async_queue;
-	int irq_freq;
-	int max_user_freq;
-	struct timerqueue_head timerqueue;
-	struct rtc_timer aie_timer;
-	struct rtc_timer uie_rtctimer;
-	struct hrtimer pie_timer;
-	int pie_enabled;
-	struct work_struct irqwork;
-	int uie_unsupported;
-	long int set_offset_nsec;
-	bool registered;
-	bool nvram_old_abi;
-	struct bin_attribute *nvram;
-	time64_t range_min;
-	timeu64_t range_max;
-	time64_t start_secs;
-	time64_t offset_secs;
-	bool set_start_time;
-	struct work_struct uie_task;
-	struct timer_list uie_timer;
-	unsigned int oldsecs;
-	unsigned int uie_irq_active: 1;
-	unsigned int stop_uie_polling: 1;
-	unsigned int uie_task_active: 1;
-	unsigned int uie_timer_active: 1;
-};
-
-struct property_entry;
-
-struct platform_device_info {
-	struct device *parent;
-	struct fwnode_handle *fwnode;
-	bool of_node_reused;
-	const char *name;
-	int id;
-	const struct resource *res;
-	unsigned int num_res;
-	const void *data;
-	size_t size_data;
-	u64 dma_mask;
-	const struct property_entry *properties;
-};
-
-enum dev_prop_type {
-	DEV_PROP_U8 = 0,
-	DEV_PROP_U16 = 1,
-	DEV_PROP_U32 = 2,
-	DEV_PROP_U64 = 3,
-	DEV_PROP_STRING = 4,
-	DEV_PROP_REF = 5,
-};
-
-struct property_entry {
-	const char *name;
-	size_t length;
-	bool is_inline;
-	enum dev_prop_type type;
-	union {
-		const void *pointer;
-		union {
-			u8 u8_data[8];
-			u16 u16_data[4];
-			u32 u32_data[2];
-			u64 u64_data[1];
-			const char *str[1];
-		} value;
-	};
-};
-
-struct trace_event_raw_alarmtimer_suspend {
-	struct trace_entry ent;
-	s64 expires;
-	unsigned char alarm_type;
-	char __data[0];
-};
-
-struct trace_event_raw_alarm_class {
-	struct trace_entry ent;
-	void *alarm;
-	unsigned char alarm_type;
-	s64 expires;
-	s64 now;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_alarmtimer_suspend {};
-
-struct trace_event_data_offsets_alarm_class {};
-
-typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
-
-typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
-
-struct alarm_base {
-	spinlock_t lock;
-	struct timerqueue_head timerqueue;
-	ktime_t (*get_ktime)();
-	void (*get_timespec)(struct timespec64 *);
-	clockid_t base_clockid;
-};
-
-struct sigevent {
-	sigval_t sigev_value;
-	int sigev_signo;
-	int sigev_notify;
-	union {
-		int _pad[12];
-		int _tid;
-		struct {
-			void (*_function)(sigval_t);
-			void *_attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef struct sigevent sigevent_t;
-
-struct compat_sigevent {
-	compat_sigval_t sigev_value;
-	compat_int_t sigev_signo;
-	compat_int_t sigev_notify;
-	union {
-		compat_int_t _pad[13];
-		compat_int_t _tid;
-		struct {
-			compat_uptr_t _function;
-			compat_uptr_t _attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef unsigned int uint;
-
-struct posix_clock;
-
-struct posix_clock_operations {
-	struct module *owner;
-	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
-	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
-	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
-	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
-	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
-	int (*open)(struct posix_clock *, fmode_t);
-	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
-	int (*release)(struct posix_clock *);
-	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
-};
-
-struct posix_clock {
-	struct posix_clock_operations ops;
-	struct cdev cdev;
-	struct device *dev;
-	struct rw_semaphore rwsem;
-	bool zombie;
-};
-
-struct posix_clock_desc {
-	struct file *fp;
-	struct posix_clock *clk;
-};
-
 struct __kernel_old_itimerval {
 	struct __kernel_old_timeval it_interval;
 	struct __kernel_old_timeval it_value;
 };
 
-struct old_itimerval32 {
-	struct old_timeval32 it_interval;
-	struct old_timeval32 it_value;
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
 };
 
-typedef s64 int64_t;
-
-struct ce_unbind {
-	struct clock_event_device *ce;
-	int res;
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
 };
 
-enum tick_broadcast_state {
-	TICK_BROADCAST_EXIT = 0,
-	TICK_BROADCAST_ENTER = 1,
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	long unsigned int ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
 };
 
-enum tick_broadcast_mode {
-	TICK_BROADCAST_OFF = 0,
-	TICK_BROADCAST_ON = 1,
-	TICK_BROADCAST_FORCE = 2,
+struct arch_vdso_data {};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
 };
 
-struct clock_data {
-	seqcount_latch_t seq;
-	struct clock_read_data read_data[2];
-	ktime_t wrap_kt;
-	long unsigned int rate;
-	u64 (*actual_read_sched_clock)();
-};
-
-struct proc_timens_offset {
-	int clockid;
-	struct timespec64 val;
-};
-
-union futex_key {
-	struct {
-		u64 i_seq;
-		long unsigned int pgoff;
-		unsigned int offset;
-	} shared;
-	struct {
-		union {
-			struct mm_struct *mm;
-			u64 __tmp;
-		};
-		long unsigned int address;
-		unsigned int offset;
-	} private;
-	struct {
-		u64 ptr;
-		long unsigned int word;
-		unsigned int offset;
-	} both;
-};
-
-struct futex_pi_state {
-	struct list_head list;
-	struct rt_mutex pi_mutex;
-	struct task_struct *owner;
-	refcount_t refcount;
-	union futex_key key;
-};
-
-struct futex_q {
-	struct plist_node list;
-	struct task_struct *task;
-	spinlock_t *lock_ptr;
-	union futex_key key;
-	struct futex_pi_state *pi_state;
-	struct rt_mutex_waiter *rt_waiter;
-	union futex_key *requeue_pi_key;
-	u32 bitset;
-};
-
-struct futex_hash_bucket {
-	atomic_t waiters;
-	spinlock_t lock;
-	struct plist_head chain;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum futex_access {
-	FUTEX_READ = 0,
-	FUTEX_WRITE = 1,
-};
-
-typedef bool (*smp_cond_func_t)(int, void *);
-
-struct call_function_data {
-	call_single_data_t *csd;
-	cpumask_var_t cpumask;
-	cpumask_var_t cpumask_ipi;
-};
-
-struct smp_call_on_cpu_struct {
-	struct work_struct work;
-	struct completion done;
-	int (*func)(void *);
-	void *data;
-	int ret;
-	int cpu;
-};
-
-typedef short unsigned int __kernel_old_uid_t;
-
-typedef short unsigned int __kernel_old_gid_t;
-
-typedef __kernel_old_uid_t old_uid_t;
-
-typedef __kernel_old_gid_t old_gid_t;
-
-struct latch_tree_root {
-	seqcount_latch_t seq;
-	struct rb_root tree[2];
-};
-
-struct latch_tree_ops {
-	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
-	int (*comp)(void *, struct latch_tree_node *);
-};
-
-struct modversion_info {
-	long unsigned int crc;
-	char name[56];
-};
-
-struct module_use {
-	struct list_head source_list;
-	struct list_head target_list;
-	struct module *source;
-	struct module *target;
-};
-
-struct module_sect_attr {
-	struct bin_attribute battr;
-	long unsigned int address;
-};
-
-struct module_sect_attrs {
-	struct attribute_group grp;
-	unsigned int nsections;
-	struct module_sect_attr attrs[0];
-};
-
-struct module_notes_attrs {
-	struct kobject *dir;
-	unsigned int notes;
-	struct bin_attribute attrs[0];
-};
-
-enum mod_license {
-	NOT_GPL_ONLY = 0,
-	GPL_ONLY = 1,
-	WILL_BE_GPL_ONLY = 2,
-};
-
-struct symsearch {
-	const struct kernel_symbol *start;
-	const struct kernel_symbol *stop;
-	const s32 *crcs;
-	enum mod_license license;
-	bool unused;
-};
-
-enum kernel_read_file_id {
-	READING_UNKNOWN = 0,
-	READING_FIRMWARE = 1,
-	READING_MODULE = 2,
-	READING_KEXEC_IMAGE = 3,
-	READING_KEXEC_INITRAMFS = 4,
-	READING_POLICY = 5,
-	READING_X509_CERTIFICATE = 6,
-	READING_MAX_ID = 7,
-};
-
-enum kernel_load_data_id {
-	LOADING_UNKNOWN = 0,
-	LOADING_FIRMWARE = 1,
-	LOADING_MODULE = 2,
-	LOADING_KEXEC_IMAGE = 3,
-	LOADING_KEXEC_INITRAMFS = 4,
-	LOADING_POLICY = 5,
-	LOADING_X509_CERTIFICATE = 6,
-	LOADING_MAX_ID = 7,
-};
-
-enum {
-	PROC_ENTRY_PERMANENT = 1,
-};
-
-struct _ddebug {
-	const char *modname;
-	const char *function;
-	const char *filename;
-	const char *format;
-	unsigned int lineno: 18;
-	unsigned int flags: 8;
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
 	union {
-		struct static_key_true dd_key_true;
-		struct static_key_false dd_key_false;
-	} key;
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
+	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
 };
 
-struct load_info {
-	const char *name;
-	struct module *mod;
-	Elf64_Ehdr *hdr;
-	long unsigned int len;
-	Elf64_Shdr *sechdrs;
-	char *secstrings;
-	char *strtab;
-	long unsigned int symoffs;
-	long unsigned int stroffs;
-	long unsigned int init_typeoffs;
-	long unsigned int core_typeoffs;
-	struct _ddebug *debug;
-	unsigned int num_debug;
-	bool sig_ok;
-	long unsigned int mod_kallsyms_init_off;
-	struct {
-		unsigned int sym;
-		unsigned int str;
-		unsigned int mod;
-		unsigned int vers;
-		unsigned int info;
-		unsigned int pcpu;
-	} index;
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
 };
 
-struct trace_event_raw_module_load {
-	struct trace_entry ent;
-	unsigned int taints;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_free {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_refcnt {
-	struct trace_entry ent;
-	long unsigned int ip;
-	int refcnt;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_request {
-	struct trace_entry ent;
-	long unsigned int ip;
-	bool wait;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_module_load {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_free {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_refcnt {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_module_load)(void *, struct module *);
-
-typedef void (*btf_trace_module_free)(void *, struct module *);
-
-typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
-
-struct mod_tree_root {
-	struct latch_tree_root root;
-	long unsigned int addr_min;
-	long unsigned int addr_max;
-};
-
-struct find_symbol_arg {
-	const char *name;
-	bool gplok;
-	bool warn;
-	struct module *owner;
-	const s32 *crc;
-	const struct kernel_symbol *sym;
-	enum mod_license license;
-};
-
-struct mod_initfree {
-	struct llist_node node;
-	void *module_init;
-};
-
-struct module_signature {
-	u8 algo;
-	u8 hash;
-	u8 id_type;
-	u8 signer_len;
-	u8 key_id_len;
-	u8 __pad[3];
-	__be32 sig_len;
-};
-
-enum pkey_id_type {
-	PKEY_ID_PGP = 0,
-	PKEY_ID_X509 = 1,
-	PKEY_ID_PKCS7 = 2,
-};
-
-struct kallsym_iter {
-	loff_t pos;
-	loff_t pos_arch_end;
-	loff_t pos_mod_end;
-	loff_t pos_ftrace_mod_end;
-	loff_t pos_bpf_end;
-	long unsigned int value;
-	unsigned int nameoff;
-	char type;
-	char name[128];
-	char module_name[56];
-	int exported;
-	int show_value;
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
 };
 
 typedef struct {
-	int val[2];
-} __kernel_fsid_t;
+	char *from;
+	char *to;
+} substring_t;
 
-struct kstatfs {
-	long int f_type;
-	long int f_bsize;
-	u64 f_blocks;
-	u64 f_bfree;
-	u64 f_bavail;
-	u64 f_files;
-	u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	long int f_namelen;
-	long int f_frsize;
-	long int f_flags;
-	long int f_spare[4];
+enum rdmacg_resource_type {
+	RDMACG_RESOURCE_HCA_HANDLE = 0,
+	RDMACG_RESOURCE_HCA_OBJECT = 1,
+	RDMACG_RESOURCE_MAX = 2,
 };
 
-typedef __u16 comp_t;
-
-struct acct_v3 {
-	char ac_flag;
-	char ac_version;
-	__u16 ac_tty;
-	__u32 ac_exitcode;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u32 ac_etime;
-	comp_t ac_utime;
-	comp_t ac_stime;
-	comp_t ac_mem;
-	comp_t ac_io;
-	comp_t ac_rw;
-	comp_t ac_minflt;
-	comp_t ac_majflt;
-	comp_t ac_swaps;
-	char ac_comm[16];
+enum rdmacg_file_type {
+	RDMACG_RESOURCE_TYPE_MAX = 0,
+	RDMACG_RESOURCE_TYPE_STAT = 1,
 };
 
-typedef struct acct_v3 acct_t;
-
-struct fs_pin {
-	wait_queue_head_t wait;
-	int done;
-	struct hlist_node s_list;
-	struct hlist_node m_list;
-	void (*kill)(struct fs_pin *);
+struct rdmacg_resource {
+	int max;
+	int usage;
 };
 
-struct bsd_acct_struct {
-	struct fs_pin pin;
-	atomic_long_t count;
-	struct callback_head rcu;
-	struct mutex lock;
-	int active;
-	long unsigned int needcheck;
-	struct file *file;
-	struct pid_namespace *ns;
-	struct work_struct work;
-	struct completion done;
-};
-
-struct elf64_note {
-	Elf64_Word n_namesz;
-	Elf64_Word n_descsz;
-	Elf64_Word n_type;
-};
-
-struct elf_note_section {
-	struct elf64_note n_hdr;
-	u8 n_data[0];
-};
-
-typedef long unsigned int elf_greg_t;
-
-typedef elf_greg_t elf_gregset_t[34];
-
-struct elf_siginfo {
-	int si_signo;
-	int si_code;
-	int si_errno;
-};
-
-struct elf_prstatus {
-	struct elf_siginfo pr_info;
-	short int pr_cursig;
-	long unsigned int pr_sigpend;
-	long unsigned int pr_sighold;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	struct __kernel_old_timeval pr_utime;
-	struct __kernel_old_timeval pr_stime;
-	struct __kernel_old_timeval pr_cutime;
-	struct __kernel_old_timeval pr_cstime;
-	elf_gregset_t pr_reg;
-	int pr_fpvalid;
-};
-
-typedef u32 note_buf_t[106];
-
-struct compat_kexec_segment {
-	compat_uptr_t buf;
-	compat_size_t bufsz;
-	compat_ulong_t mem;
-	compat_size_t memsz;
-};
-
-struct elf64_phdr {
-	Elf64_Word p_type;
-	Elf64_Word p_flags;
-	Elf64_Off p_offset;
-	Elf64_Addr p_vaddr;
-	Elf64_Addr p_paddr;
-	Elf64_Xword p_filesz;
-	Elf64_Xword p_memsz;
-	Elf64_Xword p_align;
-};
-
-typedef struct elf64_phdr Elf64_Phdr;
-
-struct crypto_alg;
-
-struct crypto_tfm {
-	u32 crt_flags;
-	int node;
-	void (*exit)(struct crypto_tfm *);
-	struct crypto_alg *__crt_alg;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__crt_ctx[0];
-};
-
-struct cipher_alg {
-	unsigned int cia_min_keysize;
-	unsigned int cia_max_keysize;
-	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_alg {
-	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_type;
-
-struct crypto_alg {
-	struct list_head cra_list;
-	struct list_head cra_users;
-	u32 cra_flags;
-	unsigned int cra_blocksize;
-	unsigned int cra_ctxsize;
-	unsigned int cra_alignmask;
-	int cra_priority;
-	refcount_t cra_refcnt;
-	char cra_name[128];
-	char cra_driver_name[128];
-	const struct crypto_type *cra_type;
-	union {
-		struct cipher_alg cipher;
-		struct compress_alg compress;
-	} cra_u;
-	int (*cra_init)(struct crypto_tfm *);
-	void (*cra_exit)(struct crypto_tfm *);
-	void (*cra_destroy)(struct crypto_alg *);
-	struct module *cra_module;
-};
-
-struct crypto_instance;
-
-struct crypto_type {
-	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
-	unsigned int (*extsize)(struct crypto_alg *);
-	int (*init)(struct crypto_tfm *, u32, u32);
-	int (*init_tfm)(struct crypto_tfm *);
-	void (*show)(struct seq_file *, struct crypto_alg *);
-	int (*report)(struct sk_buff *, struct crypto_alg *);
-	void (*free)(struct crypto_instance *);
-	unsigned int type;
-	unsigned int maskclear;
-	unsigned int maskset;
-	unsigned int tfmsize;
-};
-
-struct crypto_shash;
-
-struct shash_desc {
-	struct crypto_shash *tfm;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_shash {
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct kexec_sha_region {
-	long unsigned int start;
-	long unsigned int len;
-};
-
-enum migrate_reason {
-	MR_COMPACTION = 0,
-	MR_MEMORY_FAILURE = 1,
-	MR_MEMORY_HOTPLUG = 2,
-	MR_SYSCALL = 3,
-	MR_MEMPOLICY_MBIND = 4,
-	MR_NUMA_MISPLACED = 5,
-	MR_CONTIG_RANGE = 6,
-	MR_TYPES = 7,
-};
-
-typedef __kernel_ulong_t __kernel_ino_t;
-
-typedef __kernel_ino_t ino_t;
-
-enum kernfs_node_type {
-	KERNFS_DIR = 1,
-	KERNFS_FILE = 2,
-	KERNFS_LINK = 4,
-};
-
-enum kernfs_root_flag {
-	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
-	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
-	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
-	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
-};
-
-struct kernfs_fs_context {
-	struct kernfs_root *root;
-	void *ns_tag;
-	long unsigned int magic;
-	bool new_sb_created;
-};
-
-enum bpf_link_type {
-	BPF_LINK_TYPE_UNSPEC = 0,
-	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
-	BPF_LINK_TYPE_TRACING = 2,
-	BPF_LINK_TYPE_CGROUP = 3,
-	BPF_LINK_TYPE_ITER = 4,
-	BPF_LINK_TYPE_NETNS = 5,
-	BPF_LINK_TYPE_XDP = 6,
-	MAX_BPF_LINK_TYPE = 7,
-};
-
-struct bpf_link_info {
-	__u32 type;
-	__u32 id;
-	__u32 prog_id;
-	union {
-		struct {
-			__u64 tp_name;
-			__u32 tp_name_len;
-		} raw_tracepoint;
-		struct {
-			__u32 attach_type;
-		} tracing;
-		struct {
-			__u64 cgroup_id;
-			__u32 attach_type;
-		} cgroup;
-		struct {
-			__u64 target_name;
-			__u32 target_name_len;
-			union {
-				struct {
-					__u32 map_id;
-				} map;
-			};
-		} iter;
-		struct {
-			__u32 netns_ino;
-			__u32 attach_type;
-		} netns;
-		struct {
-			__u32 ifindex;
-		} xdp;
-	};
-};
-
-struct bpf_link_ops;
-
-struct bpf_link {
-	atomic64_t refcnt;
-	u32 id;
-	enum bpf_link_type type;
-	const struct bpf_link_ops *ops;
-	struct bpf_prog *prog;
-	struct work_struct work;
-};
-
-struct bpf_link_ops {
-	void (*release)(struct bpf_link *);
-	void (*dealloc)(struct bpf_link *);
-	int (*detach)(struct bpf_link *);
-	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
-	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
-	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
-};
-
-struct bpf_cgroup_link {
-	struct bpf_link link;
-	struct cgroup *cgroup;
-	enum bpf_attach_type type;
-};
-
-enum {
-	CGRP_NOTIFY_ON_RELEASE = 0,
-	CGRP_CPUSET_CLONE_CHILDREN = 1,
-	CGRP_FREEZE = 2,
-	CGRP_FROZEN = 3,
-};
-
-enum {
-	CGRP_ROOT_NOPREFIX = 2,
-	CGRP_ROOT_XATTR = 4,
-	CGRP_ROOT_NS_DELEGATE = 8,
-	CGRP_ROOT_CPUSET_V2_MODE = 16,
-	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 32,
-	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 64,
-};
-
-struct cgroup_taskset {
-	struct list_head src_csets;
-	struct list_head dst_csets;
-	int nr_tasks;
-	int ssid;
-	struct list_head *csets;
-	struct css_set *cur_cset;
-	struct task_struct *cur_task;
-};
-
-struct cgroup_fs_context {
-	struct kernfs_fs_context kfc;
-	struct cgroup_root *root;
-	struct cgroup_namespace *ns;
-	unsigned int flags;
-	bool cpuset_clone_children;
-	bool none;
-	bool all_ss;
-	u16 subsys_mask;
-	char *name;
-	char *release_agent;
-};
-
-struct cgrp_cset_link {
-	struct cgroup *cgrp;
-	struct css_set *cset;
-	struct list_head cset_link;
-	struct list_head cgrp_link;
-};
-
-struct cgroup_mgctx {
-	struct list_head preloaded_src_csets;
-	struct list_head preloaded_dst_csets;
-	struct cgroup_taskset tset;
-	u16 ss_mask;
-};
-
-struct trace_event_raw_cgroup_root {
-	struct trace_entry ent;
-	int root;
-	u16 ss_mask;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_migrate {
-	struct trace_entry ent;
-	int dst_root;
-	int dst_id;
-	int dst_level;
-	int pid;
-	u32 __data_loc_dst_path;
-	u32 __data_loc_comm;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_event {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cgroup_root {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cgroup {
-	u32 path;
-};
-
-struct trace_event_data_offsets_cgroup_migrate {
-	u32 dst_path;
-	u32 comm;
-};
-
-struct trace_event_data_offsets_cgroup_event {
-	u32 path;
-};
-
-typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
-
-typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
-
-enum cgroup2_param {
-	Opt_nsdelegate = 0,
-	Opt_memory_localevents = 1,
-	Opt_memory_recursiveprot = 2,
-	nr__cgroup2_params = 3,
-};
-
-struct cgroupstats {
-	__u64 nr_sleeping;
-	__u64 nr_running;
-	__u64 nr_stopped;
-	__u64 nr_uninterruptible;
-	__u64 nr_io_wait;
-};
-
-enum cgroup_filetype {
-	CGROUP_FILE_PROCS = 0,
-	CGROUP_FILE_TASKS = 1,
-};
-
-struct cgroup_pidlist {
-	struct {
-		enum cgroup_filetype type;
-		struct pid_namespace *ns;
-	} key;
-	pid_t *list;
-	int length;
-	struct list_head links;
-	struct cgroup *owner;
-	struct delayed_work destroy_dwork;
-};
-
-enum cgroup1_param {
-	Opt_all = 0,
-	Opt_clone_children = 1,
-	Opt_cpuset_v2_mode = 2,
-	Opt_name = 3,
-	Opt_none = 4,
-	Opt_noprefix = 5,
-	Opt_release_agent = 6,
-	Opt_xattr = 7,
-};
-
-enum freezer_state_flags {
-	CGROUP_FREEZER_ONLINE = 1,
-	CGROUP_FREEZING_SELF = 2,
-	CGROUP_FREEZING_PARENT = 4,
-	CGROUP_FROZEN = 8,
-	CGROUP_FREEZING = 6,
-};
-
-struct freezer {
-	struct cgroup_subsys_state css;
-	unsigned int state;
-};
-
-struct pids_cgroup {
-	struct cgroup_subsys_state css;
-	atomic64_t counter;
-	atomic64_t limit;
-	struct cgroup_file events_file;
-	atomic64_t events_limit;
-};
-
-struct root_domain___2;
-
-struct fmeter {
-	int cnt;
-	int val;
-	time64_t time;
-	spinlock_t lock;
-};
-
-struct cpuset {
-	struct cgroup_subsys_state css;
-	long unsigned int flags;
-	cpumask_var_t cpus_allowed;
-	nodemask_t mems_allowed;
-	cpumask_var_t effective_cpus;
-	nodemask_t effective_mems;
-	cpumask_var_t subparts_cpus;
-	nodemask_t old_mems_allowed;
-	struct fmeter fmeter;
-	int attach_in_progress;
-	int pn;
-	int relax_domain_level;
-	int nr_subparts_cpus;
-	int partition_root_state;
-	int use_parent_ecpus;
-	int child_ecpus_count;
-};
-
-struct tmpmasks {
-	cpumask_var_t addmask;
-	cpumask_var_t delmask;
-	cpumask_var_t new_cpus;
-};
-
-typedef enum {
-	CS_ONLINE = 0,
-	CS_CPU_EXCLUSIVE = 1,
-	CS_MEM_EXCLUSIVE = 2,
-	CS_MEM_HARDWALL = 3,
-	CS_MEMORY_MIGRATE = 4,
-	CS_SCHED_LOAD_BALANCE = 5,
-	CS_SPREAD_PAGE = 6,
-	CS_SPREAD_SLAB = 7,
-} cpuset_flagbits_t;
-
-enum subparts_cmd {
-	partcmd_enable = 0,
-	partcmd_disable = 1,
-	partcmd_update = 2,
-};
-
-struct cpuset_migrate_mm_work {
-	struct work_struct work;
-	struct mm_struct *mm;
-	nodemask_t from;
-	nodemask_t to;
-};
-
-typedef enum {
-	FILE_MEMORY_MIGRATE = 0,
-	FILE_CPULIST = 1,
-	FILE_MEMLIST = 2,
-	FILE_EFFECTIVE_CPULIST = 3,
-	FILE_EFFECTIVE_MEMLIST = 4,
-	FILE_SUBPARTS_CPULIST = 5,
-	FILE_CPU_EXCLUSIVE = 6,
-	FILE_MEM_EXCLUSIVE = 7,
-	FILE_MEM_HARDWALL = 8,
-	FILE_SCHED_LOAD_BALANCE = 9,
-	FILE_PARTITION_ROOT = 10,
-	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
-	FILE_MEMORY_PRESSURE_ENABLED = 12,
-	FILE_MEMORY_PRESSURE = 13,
-	FILE_SPREAD_PAGE = 14,
-	FILE_SPREAD_SLAB = 15,
-} cpuset_filetype_t;
-
-struct kernel_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-};
-
-enum kernel_pkey_operation {
-	kernel_pkey_encrypt = 0,
-	kernel_pkey_decrypt = 1,
-	kernel_pkey_sign = 2,
-	kernel_pkey_verify = 3,
-};
-
-struct kernel_pkey_params {
-	struct key *key;
-	const char *encoding;
-	const char *hash_algo;
-	char *info;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	enum kernel_pkey_operation op: 8;
-};
-
-struct key_preparsed_payload {
-	char *description;
-	union key_payload payload;
-	const void *data;
-	size_t datalen;
-	size_t quotalen;
-	time64_t expiry;
-};
-
-struct key_match_data {
-	bool (*cmp)(const struct key *, const struct key_match_data *);
-	const void *raw_data;
-	void *preparsed;
-	unsigned int lookup_type;
-};
-
-struct idmap_key {
-	bool map_up;
-	u32 id;
-	u32 count;
-};
-
-struct ctl_path {
-	const char *procname;
-};
-
-typedef void (*exitcall_t)();
-
-struct cpu_stop_done {
-	atomic_t nr_todo;
-	int ret;
-	struct completion completion;
-};
-
-struct cpu_stopper {
-	struct task_struct *thread;
-	raw_spinlock_t lock;
-	bool enabled;
-	struct list_head works;
-	struct cpu_stop_work stop_work;
-};
-
-enum multi_stop_state {
-	MULTI_STOP_NONE = 0,
-	MULTI_STOP_PREPARE = 1,
-	MULTI_STOP_DISABLE_IRQ = 2,
-	MULTI_STOP_RUN = 3,
-	MULTI_STOP_EXIT = 4,
-};
-
-struct multi_stop_data {
-	cpu_stop_fn_t fn;
-	void *data;
-	unsigned int num_threads;
-	const struct cpumask *active_cpus;
-	enum multi_stop_state state;
-	atomic_t thread_ack;
-};
-
-typedef int __kernel_mqd_t;
-
-typedef __kernel_mqd_t mqd_t;
-
-enum audit_state {
-	AUDIT_DISABLED = 0,
-	AUDIT_BUILD_CONTEXT = 1,
-	AUDIT_RECORD_CONTEXT = 2,
-};
-
-struct audit_cap_data {
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	union {
-		unsigned int fE;
-		kernel_cap_t effective;
-	};
-	kernel_cap_t ambient;
-	kuid_t rootid;
-};
-
-struct audit_names {
-	struct list_head list;
-	struct filename *name;
-	int name_len;
-	bool hidden;
-	long unsigned int ino;
-	dev_t dev;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	dev_t rdev;
-	u32 osid;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	unsigned char type;
-	bool should_free;
-};
-
-struct mq_attr {
-	__kernel_long_t mq_flags;
-	__kernel_long_t mq_maxmsg;
-	__kernel_long_t mq_msgsize;
-	__kernel_long_t mq_curmsgs;
-	__kernel_long_t __reserved[4];
-};
-
-struct audit_proctitle {
-	int len;
-	char *value;
-};
-
-struct audit_aux_data;
-
-struct __kernel_sockaddr_storage;
-
-struct audit_tree_refs;
-
-struct audit_context {
-	int dummy;
-	int in_syscall;
-	enum audit_state state;
-	enum audit_state current_state;
-	unsigned int serial;
-	int major;
-	struct timespec64 ctime;
-	long unsigned int argv[4];
-	long int return_code;
-	u64 prio;
-	int return_valid;
-	struct audit_names preallocated_names[5];
-	int name_count;
-	struct list_head names_list;
-	char *filterkey;
-	struct path pwd;
-	struct audit_aux_data *aux;
-	struct audit_aux_data *aux_pids;
-	struct __kernel_sockaddr_storage *sockaddr;
-	size_t sockaddr_len;
-	pid_t pid;
-	pid_t ppid;
-	kuid_t uid;
-	kuid_t euid;
-	kuid_t suid;
-	kuid_t fsuid;
-	kgid_t gid;
-	kgid_t egid;
-	kgid_t sgid;
-	kgid_t fsgid;
-	long unsigned int personality;
-	int arch;
-	pid_t target_pid;
-	kuid_t target_auid;
-	kuid_t target_uid;
-	unsigned int target_sessionid;
-	u32 target_sid;
-	char target_comm[16];
-	struct audit_tree_refs *trees;
-	struct audit_tree_refs *first_trees;
-	struct list_head killed_trees;
-	int tree_count;
-	int type;
-	union {
-		struct {
-			int nargs;
-			long int args[6];
-		} socketcall;
-		struct {
-			kuid_t uid;
-			kgid_t gid;
-			umode_t mode;
-			u32 osid;
-			int has_perm;
-			uid_t perm_uid;
-			gid_t perm_gid;
-			umode_t perm_mode;
-			long unsigned int qbytes;
-		} ipc;
-		struct {
-			mqd_t mqdes;
-			struct mq_attr mqstat;
-		} mq_getsetattr;
-		struct {
-			mqd_t mqdes;
-			int sigev_signo;
-		} mq_notify;
-		struct {
-			mqd_t mqdes;
-			size_t msg_len;
-			unsigned int msg_prio;
-			struct timespec64 abs_timeout;
-		} mq_sendrecv;
-		struct {
-			int oflag;
-			umode_t mode;
-			struct mq_attr attr;
-		} mq_open;
-		struct {
-			pid_t pid;
-			struct audit_cap_data cap;
-		} capset;
-		struct {
-			int fd;
-			int flags;
-		} mmap;
-		struct {
-			int argc;
-		} execve;
-		struct {
-			char *name;
-		} module;
-	};
-	int fds[2];
-	struct audit_proctitle proctitle;
-};
-
-struct __kernel_sockaddr_storage {
-	union {
-		struct {
-			__kernel_sa_family_t ss_family;
-			char __data[126];
-		};
-		void *__align;
-	};
-};
-
-enum audit_nlgrps {
-	AUDIT_NLGRP_NONE = 0,
-	AUDIT_NLGRP_READLOG = 1,
-	__AUDIT_NLGRP_MAX = 2,
-};
-
-struct audit_status {
-	__u32 mask;
-	__u32 enabled;
-	__u32 failure;
-	__u32 pid;
-	__u32 rate_limit;
-	__u32 backlog_limit;
-	__u32 lost;
-	__u32 backlog;
-	union {
-		__u32 version;
-		__u32 feature_bitmap;
-	};
-	__u32 backlog_wait_time;
-	__u32 backlog_wait_time_actual;
-};
-
-struct audit_features {
-	__u32 vers;
-	__u32 mask;
-	__u32 features;
-	__u32 lock;
-};
-
-struct audit_tty_status {
-	__u32 enabled;
-	__u32 log_passwd;
-};
-
-struct audit_sig_info {
-	uid_t uid;
-	pid_t pid;
-	char ctx[0];
-};
-
-struct net_generic {
-	union {
-		struct {
-			unsigned int len;
-			struct callback_head rcu;
-		} s;
-		void *ptr[0];
-	};
-};
-
-struct pernet_operations {
-	struct list_head list;
-	int (*init)(struct net *);
-	void (*pre_exit)(struct net *);
-	void (*exit)(struct net *);
-	void (*exit_batch)(struct list_head *);
-	unsigned int *id;
-	size_t size;
-};
-
-struct scm_creds {
-	u32 pid;
-	kuid_t uid;
-	kgid_t gid;
-};
-
-struct netlink_skb_parms {
-	struct scm_creds creds;
-	__u32 portid;
-	__u32 dst_group;
-	__u32 flags;
-	struct sock *sk;
-	bool nsid_is_set;
-	int nsid;
-};
-
-struct netlink_kernel_cfg {
-	unsigned int groups;
-	unsigned int flags;
-	void (*input)(struct sk_buff *);
-	struct mutex *cb_mutex;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-};
-
-struct audit_netlink_list {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff_head q;
-};
-
-struct audit_net {
-	struct sock *sk;
-};
-
-struct auditd_connection {
-	struct pid *pid;
-	u32 portid;
-	struct net *net;
-	struct callback_head rcu;
-};
-
-struct audit_ctl_mutex {
-	struct mutex lock;
-	void *owner;
-};
-
-struct audit_buffer {
-	struct sk_buff *skb;
-	struct audit_context *ctx;
-	gfp_t gfp_mask;
-};
-
-struct audit_reply {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff *skb;
-};
-
-enum {
-	Audit_equal = 0,
-	Audit_not_equal = 1,
-	Audit_bitmask = 2,
-	Audit_bittest = 3,
-	Audit_lt = 4,
-	Audit_gt = 5,
-	Audit_le = 6,
-	Audit_ge = 7,
-	Audit_bad = 8,
+struct rdmacg_resource_pool {
+	struct rdmacg_device *device;
+	struct rdmacg_resource resources[2];
+	struct list_head cg_node;
+	struct list_head dev_node;
+	u64 usage_sum;
+	int num_max_cnt;
 };
 
 struct audit_rule_data {
@@ -26808,426 +72641,10 @@
 	char buf[0];
 };
 
-struct audit_field;
-
-struct audit_watch;
-
-struct audit_tree;
-
-struct audit_fsnotify_mark;
-
-struct audit_krule {
-	u32 pflags;
-	u32 flags;
-	u32 listnr;
-	u32 action;
-	u32 mask[64];
-	u32 buflen;
-	u32 field_count;
-	char *filterkey;
-	struct audit_field *fields;
-	struct audit_field *arch_f;
-	struct audit_field *inode_f;
-	struct audit_watch *watch;
-	struct audit_tree *tree;
-	struct audit_fsnotify_mark *exe;
-	struct list_head rlist;
-	struct list_head list;
-	u64 prio;
-};
-
-struct audit_field {
-	u32 type;
-	union {
-		u32 val;
-		kuid_t uid;
-		kgid_t gid;
-		struct {
-			char *lsm_str;
-			void *lsm_rule;
-		};
-	};
-	u32 op;
-};
-
-struct audit_entry {
-	struct list_head list;
-	struct callback_head rcu;
-	struct audit_krule rule;
-};
-
-struct audit_buffer___2;
-
-typedef int __kernel_key_t;
-
-typedef __kernel_key_t key_t;
-
-struct kern_ipc_perm {
-	spinlock_t lock;
-	bool deleted;
-	int id;
-	key_t key;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t cuid;
-	kgid_t cgid;
-	umode_t mode;
-	long unsigned int seq;
-	void *security;
-	struct rhash_head khtnode;
-	struct callback_head rcu;
-	refcount_t refcount;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cpu_vfs_cap_data {
-	__u32 magic_etc;
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	kuid_t rootid;
-};
-
-typedef struct fsnotify_mark_connector *fsnotify_connp_t;
-
-struct fsnotify_mark_connector {
-	spinlock_t lock;
-	short unsigned int type;
-	short unsigned int flags;
-	__kernel_fsid_t fsid;
-	union {
-		fsnotify_connp_t *obj;
-		struct fsnotify_mark_connector *destroy_next;
-	};
-	struct hlist_head list;
-};
-
-enum audit_nfcfgop {
-	AUDIT_XT_OP_REGISTER = 0,
-	AUDIT_XT_OP_REPLACE = 1,
-	AUDIT_XT_OP_UNREGISTER = 2,
-	AUDIT_NFT_OP_TABLE_REGISTER = 3,
-	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
-	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
-	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
-	AUDIT_NFT_OP_RULE_REGISTER = 7,
-	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
-	AUDIT_NFT_OP_SET_REGISTER = 9,
-	AUDIT_NFT_OP_SET_UNREGISTER = 10,
-	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
-	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
-	AUDIT_NFT_OP_GEN_REGISTER = 13,
-	AUDIT_NFT_OP_OBJ_REGISTER = 14,
-	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
-	AUDIT_NFT_OP_OBJ_RESET = 16,
-	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
-	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
-	AUDIT_NFT_OP_INVALID = 19,
-};
-
-enum fsnotify_obj_type {
-	FSNOTIFY_OBJ_TYPE_INODE = 0,
-	FSNOTIFY_OBJ_TYPE_PARENT = 1,
-	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 2,
-	FSNOTIFY_OBJ_TYPE_SB = 3,
-	FSNOTIFY_OBJ_TYPE_COUNT = 4,
-	FSNOTIFY_OBJ_TYPE_DETACHED = 4,
-};
-
-struct audit_aux_data {
-	struct audit_aux_data *next;
-	int type;
-};
-
-struct audit_chunk;
-
-struct audit_tree_refs {
-	struct audit_tree_refs *next;
-	struct audit_chunk *c[31];
-};
-
-struct audit_aux_data_pids {
-	struct audit_aux_data d;
-	pid_t target_pid[16];
-	kuid_t target_auid[16];
-	kuid_t target_uid[16];
-	unsigned int target_sessionid[16];
-	u32 target_sid[16];
-	char target_comm[256];
-	int pid_count;
-};
-
-struct audit_aux_data_bprm_fcaps {
-	struct audit_aux_data d;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	struct audit_cap_data old_pcap;
-	struct audit_cap_data new_pcap;
-};
-
-struct audit_nfcfgop_tab {
-	enum audit_nfcfgop op;
-	const char *s;
-};
-
-struct audit_parent;
-
-struct audit_watch {
-	refcount_t count;
-	dev_t dev;
-	char *path;
-	long unsigned int ino;
-	struct audit_parent *parent;
-	struct list_head wlist;
-	struct list_head rules;
-};
-
-struct fsnotify_group;
-
-struct fsnotify_iter_info;
-
-struct fsnotify_mark;
-
-struct fsnotify_event;
-
-struct fsnotify_ops {
-	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
-	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
-	void (*free_group_priv)(struct fsnotify_group *);
-	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
-	void (*free_event)(struct fsnotify_event *);
-	void (*free_mark)(struct fsnotify_mark *);
-};
-
-struct inotify_group_private_data {
-	spinlock_t idr_lock;
-	struct idr idr;
-	struct ucounts *ucounts;
-};
-
-struct fanotify_group_private_data {
-	struct list_head access_list;
-	wait_queue_head_t access_waitq;
-	int flags;
-	int f_flags;
-	unsigned int max_marks;
-	struct user_struct *user;
-};
-
-struct fsnotify_group {
-	const struct fsnotify_ops *ops;
-	refcount_t refcnt;
-	spinlock_t notification_lock;
-	struct list_head notification_list;
-	wait_queue_head_t notification_waitq;
-	unsigned int q_len;
-	unsigned int max_events;
-	unsigned int priority;
-	bool shutdown;
-	struct mutex mark_mutex;
-	atomic_t num_marks;
-	atomic_t user_waits;
-	struct list_head marks_list;
-	struct fasync_struct *fsn_fa;
-	struct fsnotify_event *overflow_event;
-	struct mem_cgroup *memcg;
-	union {
-		void *private;
-		struct inotify_group_private_data inotify_data;
-		struct fanotify_group_private_data fanotify_data;
-	};
-};
-
-struct fsnotify_iter_info {
-	struct fsnotify_mark *marks[4];
-	unsigned int report_mask;
-	int srcu_idx;
-};
-
-struct fsnotify_mark {
-	__u32 mask;
-	refcount_t refcnt;
-	struct fsnotify_group *group;
-	struct list_head g_list;
-	spinlock_t lock;
-	struct hlist_node obj_list;
-	struct fsnotify_mark_connector *connector;
-	__u32 ignored_mask;
-	unsigned int flags;
-};
-
-struct fsnotify_event {
-	struct list_head list;
-	long unsigned int objectid;
-};
-
-struct audit_parent {
-	struct list_head watches;
-	struct fsnotify_mark mark;
-};
-
-struct audit_fsnotify_mark {
-	dev_t dev;
-	long unsigned int ino;
-	char *path;
-	struct fsnotify_mark mark;
-	struct audit_krule *rule;
-};
-
-struct audit_chunk___2;
-
-struct audit_tree {
-	refcount_t count;
-	int goner;
-	struct audit_chunk___2 *root;
-	struct list_head chunks;
-	struct list_head rules;
-	struct list_head list;
-	struct list_head same_root;
-	struct callback_head head;
-	char pathname[0];
-};
-
-struct node {
-	struct list_head list;
-	struct audit_tree *owner;
-	unsigned int index;
-};
-
-struct audit_chunk___2 {
-	struct list_head hash;
-	long unsigned int key;
-	struct fsnotify_mark *mark;
-	struct list_head trees;
-	int count;
-	atomic_long_t refs;
-	struct callback_head head;
-	struct node owners[0];
-};
-
-struct audit_tree_mark {
-	struct fsnotify_mark mark;
-	struct audit_chunk___2 *chunk;
-};
-
-enum {
-	HASH_SIZE = 128,
-};
-
-struct kprobe_blacklist_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-};
-
-enum perf_record_ksymbol_type {
-	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
-	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
-	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
-	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
-};
-
-struct kprobe_insn_page {
-	struct list_head list;
-	kprobe_opcode_t *insns;
-	struct kprobe_insn_cache *cache;
-	int nused;
-	int ngarbage;
-	char slot_used[0];
-};
-
-enum kprobe_slot_state {
-	SLOT_CLEAN = 0,
-	SLOT_DIRTY = 1,
-	SLOT_USED = 2,
-};
-
-struct serial_icounter_struct {
-	int cts;
-	int dsr;
-	int rng;
-	int dcd;
-	int rx;
-	int tx;
-	int frame;
-	int overrun;
-	int parity;
-	int brk;
-	int buf_overrun;
-	int reserved[9];
-};
-
-struct serial_struct {
-	int type;
-	int line;
-	unsigned int port;
-	int irq;
-	int flags;
-	int xmit_fifo_size;
-	int custom_divisor;
-	int baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	int hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	long unsigned int iomap_base;
-};
-
-struct kgdb_io {
-	const char *name;
-	int (*read_char)();
-	void (*write_char)(u8);
-	void (*flush)();
-	int (*init)();
-	void (*deinit)();
-	void (*pre_exception)();
-	void (*post_exception)();
-	struct console *cons;
-};
-
-enum {
-	KDB_NOT_INITIALIZED = 0,
-	KDB_INIT_EARLY = 1,
-	KDB_INIT_FULL = 2,
-};
-
-struct kgdb_state {
-	int ex_vector;
-	int signo;
-	int err_code;
-	int cpu;
-	int pass_exception;
-	long unsigned int thr_query;
-	long unsigned int threadid;
-	long int kgdb_usethreadid;
-	struct pt_regs *linux_regs;
-	atomic_t *send_ready;
-};
-
-struct debuggerinfo_struct {
-	void *debuggerinfo;
-	struct task_struct *task;
-	int exception_state;
-	int ret_state;
-	int irq_depth;
-	int enter_kgdb;
-	bool rounding_up;
-};
-
-struct seccomp_data {
-	int nr;
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 args[6];
+struct audit_netlink_list {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff_head q;
 };
 
 struct seccomp_notif_sizes {
@@ -27258,12 +72675,18 @@
 	__u32 newfd_flags;
 };
 
+struct action_cache {
+	long unsigned int allow_native[8];
+};
+
 struct notification;
 
 struct seccomp_filter {
 	refcount_t refs;
 	refcount_t users;
 	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
 	struct seccomp_filter *prev;
 	struct bpf_prog *prog;
 	struct notification *notif;
@@ -27276,16 +72699,6 @@
 	__u64 flags;
 };
 
-struct sock_fprog {
-	short unsigned int len;
-	struct sock_filter *filter;
-};
-
-struct compat_sock_fprog {
-	u16 len;
-	compat_uptr_t filter;
-};
-
 enum notify_state {
 	SECCOMP_NOTIFY_INIT = 0,
 	SECCOMP_NOTIFY_SENT = 1,
@@ -27309,7 +72722,11 @@
 	struct file *file;
 	int fd;
 	unsigned int flags;
-	int ret;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
 	struct completion completion;
 	struct list_head list;
 };
@@ -27325,274 +72742,6 @@
 	const char *name;
 };
 
-struct rchan;
-
-struct rchan_buf {
-	void *start;
-	void *data;
-	size_t offset;
-	size_t subbufs_produced;
-	size_t subbufs_consumed;
-	struct rchan *chan;
-	wait_queue_head_t read_wait;
-	struct irq_work wakeup_work;
-	struct dentry *dentry;
-	struct kref kref;
-	struct page **page_array;
-	unsigned int page_count;
-	unsigned int finalized;
-	size_t *padding;
-	size_t prev_padding;
-	size_t bytes_consumed;
-	size_t early_bytes;
-	unsigned int cpu;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rchan_callbacks;
-
-struct rchan {
-	u32 version;
-	size_t subbuf_size;
-	size_t n_subbufs;
-	size_t alloc_size;
-	struct rchan_callbacks *cb;
-	struct kref kref;
-	void *private_data;
-	size_t last_toobig;
-	struct rchan_buf **buf;
-	int is_global;
-	struct list_head list;
-	struct dentry *parent;
-	int has_base_filename;
-	char base_filename[255];
-};
-
-struct rchan_callbacks {
-	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
-	void (*buf_mapped)(struct rchan_buf *, struct file *);
-	void (*buf_unmapped)(struct rchan_buf *, struct file *);
-	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
-	int (*remove_buf_file)(struct dentry *);
-};
-
-struct partial_page {
-	unsigned int offset;
-	unsigned int len;
-	long unsigned int private;
-};
-
-struct splice_pipe_desc {
-	struct page **pages;
-	struct partial_page *partial;
-	int nr_pages;
-	unsigned int nr_pages_max;
-	const struct pipe_buf_operations *ops;
-	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
-};
-
-struct rchan_percpu_buf_dispatcher {
-	struct rchan_buf *buf;
-	struct dentry *dentry;
-};
-
-enum {
-	TASKSTATS_TYPE_UNSPEC = 0,
-	TASKSTATS_TYPE_PID = 1,
-	TASKSTATS_TYPE_TGID = 2,
-	TASKSTATS_TYPE_STATS = 3,
-	TASKSTATS_TYPE_AGGR_PID = 4,
-	TASKSTATS_TYPE_AGGR_TGID = 5,
-	TASKSTATS_TYPE_NULL = 6,
-	__TASKSTATS_TYPE_MAX = 7,
-};
-
-enum {
-	TASKSTATS_CMD_ATTR_UNSPEC = 0,
-	TASKSTATS_CMD_ATTR_PID = 1,
-	TASKSTATS_CMD_ATTR_TGID = 2,
-	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
-	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
-	__TASKSTATS_CMD_ATTR_MAX = 5,
-};
-
-enum {
-	CGROUPSTATS_CMD_UNSPEC = 3,
-	CGROUPSTATS_CMD_GET = 4,
-	CGROUPSTATS_CMD_NEW = 5,
-	__CGROUPSTATS_CMD_MAX = 6,
-};
-
-enum {
-	CGROUPSTATS_TYPE_UNSPEC = 0,
-	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
-	__CGROUPSTATS_TYPE_MAX = 2,
-};
-
-enum {
-	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
-	CGROUPSTATS_CMD_ATTR_FD = 1,
-	__CGROUPSTATS_CMD_ATTR_MAX = 2,
-};
-
-struct genlmsghdr {
-	__u8 cmd;
-	__u8 version;
-	__u16 reserved;
-};
-
-enum {
-	NLA_UNSPEC = 0,
-	NLA_U8 = 1,
-	NLA_U16 = 2,
-	NLA_U32 = 3,
-	NLA_U64 = 4,
-	NLA_STRING = 5,
-	NLA_FLAG = 6,
-	NLA_MSECS = 7,
-	NLA_NESTED = 8,
-	NLA_NESTED_ARRAY = 9,
-	NLA_NUL_STRING = 10,
-	NLA_BINARY = 11,
-	NLA_S8 = 12,
-	NLA_S16 = 13,
-	NLA_S32 = 14,
-	NLA_S64 = 15,
-	NLA_BITFIELD32 = 16,
-	NLA_REJECT = 17,
-	__NLA_TYPE_MAX = 18,
-};
-
-struct genl_multicast_group {
-	char name[16];
-};
-
-struct genl_ops;
-
-struct genl_info;
-
-struct genl_small_ops;
-
-struct genl_family {
-	int id;
-	unsigned int hdrsize;
-	char name[16];
-	unsigned int version;
-	unsigned int maxattr;
-	unsigned int mcgrp_offset;
-	u8 netnsok: 1;
-	u8 parallel_ops: 1;
-	u8 n_ops;
-	u8 n_small_ops;
-	u8 n_mcgrps;
-	const struct nla_policy *policy;
-	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	const struct genl_ops *ops;
-	const struct genl_small_ops *small_ops;
-	const struct genl_multicast_group *mcgrps;
-	struct module *module;
-};
-
-struct genl_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*start)(struct netlink_callback *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-struct genl_info {
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr *nlhdr;
-	struct genlmsghdr *genlhdr;
-	void *userhdr;
-	struct nlattr **attrs;
-	possible_net_t _net;
-	void *user_ptr[2];
-	struct netlink_ext_ack *extack;
-};
-
-struct genl_small_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-enum genl_validate_flags {
-	GENL_DONT_VALIDATE_STRICT = 1,
-	GENL_DONT_VALIDATE_DUMP = 2,
-	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
-};
-
-struct listener {
-	struct list_head list;
-	pid_t pid;
-	char valid;
-};
-
-struct listener_list {
-	struct rw_semaphore sem;
-	struct list_head list;
-};
-
-enum actions {
-	REGISTER = 0,
-	DEREGISTER = 1,
-	CPU_DONT_CARE = 2,
-};
-
-struct tp_module {
-	struct list_head list;
-	struct module *mod;
-};
-
-struct tp_probes {
-	struct callback_head rcu;
-	struct tracepoint_func probes[0];
-};
-
-enum {
-	FTRACE_OPS_FL_ENABLED = 1,
-	FTRACE_OPS_FL_DYNAMIC = 2,
-	FTRACE_OPS_FL_SAVE_REGS = 4,
-	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
-	FTRACE_OPS_FL_RECURSION_SAFE = 16,
-	FTRACE_OPS_FL_STUB = 32,
-	FTRACE_OPS_FL_INITIALIZED = 64,
-	FTRACE_OPS_FL_DELETED = 128,
-	FTRACE_OPS_FL_ADDING = 256,
-	FTRACE_OPS_FL_REMOVING = 512,
-	FTRACE_OPS_FL_MODIFYING = 1024,
-	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
-	FTRACE_OPS_FL_IPMODIFY = 4096,
-	FTRACE_OPS_FL_PID = 8192,
-	FTRACE_OPS_FL_RCU = 16384,
-	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
-	FTRACE_OPS_FL_PERMANENT = 65536,
-	FTRACE_OPS_FL_DIRECT = 131072,
-};
-
-struct ftrace_hash {
-	long unsigned int size_bits;
-	struct hlist_head *buckets;
-	long unsigned int count;
-	long unsigned int flags;
-	struct callback_head rcu;
-};
-
 struct ftrace_func_entry {
 	struct hlist_node hlist;
 	long unsigned int ip;
@@ -27636,150 +72785,11 @@
 	FTRACE_ITER_ENABLED = 64,
 };
 
-struct prog_entry;
-
-struct event_filter {
-	struct prog_entry *prog;
-	char *filter_string;
-};
-
-struct trace_array_cpu;
-
-struct array_buffer {
-	struct trace_array *tr;
-	struct trace_buffer *buffer;
-	struct trace_array_cpu *data;
-	u64 time_start;
-	int cpu;
-};
-
-struct trace_pid_list;
-
-struct trace_options;
-
-struct trace_array {
-	struct list_head list;
-	char *name;
-	struct array_buffer array_buffer;
-	struct trace_pid_list *filtered_pids;
-	struct trace_pid_list *filtered_no_pids;
-	arch_spinlock_t max_lock;
-	int buffer_disabled;
-	int sys_refcount_enter;
-	int sys_refcount_exit;
-	struct trace_event_file *enter_syscall_files[441];
-	struct trace_event_file *exit_syscall_files[441];
-	int stop_count;
-	int clock_id;
-	int nr_topts;
-	bool clear_trace;
-	int buffer_percent;
-	unsigned int n_err_log_entries;
-	struct tracer *current_trace;
-	unsigned int trace_flags;
-	unsigned char trace_flags_index[32];
-	unsigned int flags;
-	raw_spinlock_t start_lock;
-	struct list_head err_log;
-	struct dentry *dir;
-	struct dentry *options;
-	struct dentry *percpu_dir;
-	struct dentry *event_dir;
-	struct trace_options *topts;
-	struct list_head systems;
-	struct list_head events;
-	struct trace_event_file *trace_marker_file;
-	cpumask_var_t tracing_cpumask;
-	int ref;
-	int trace_ref;
-	struct ftrace_ops *ops;
-	struct trace_pid_list *function_pids;
-	struct trace_pid_list *function_no_pids;
-	struct list_head func_probes;
-	struct list_head mod_trace;
-	struct list_head mod_notrace;
-	int function_enabled;
-	int time_stamp_abs_ref;
-	struct list_head hist_vars;
-};
-
-struct tracer_flags;
-
-struct tracer {
-	const char *name;
-	int (*init)(struct trace_array *);
-	void (*reset)(struct trace_array *);
-	void (*start)(struct trace_array *);
-	void (*stop)(struct trace_array *);
-	int (*update_thresh)(struct trace_array *);
-	void (*open)(struct trace_iterator *);
-	void (*pipe_open)(struct trace_iterator *);
-	void (*close)(struct trace_iterator *);
-	void (*pipe_close)(struct trace_iterator *);
-	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
-	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	void (*print_header)(struct seq_file *);
-	enum print_line_t (*print_line)(struct trace_iterator *);
-	int (*set_flag)(struct trace_array *, u32, u32, int);
-	int (*flag_changed)(struct trace_array *, u32, int);
-	struct tracer *next;
-	struct tracer_flags *flags;
-	int enabled;
-	bool print_max;
-	bool allow_instances;
-	bool noboot;
-};
-
-struct event_subsystem;
-
-struct trace_subsystem_dir {
-	struct list_head list;
-	struct event_subsystem *subsystem;
-	struct trace_array *tr;
-	struct dentry *entry;
-	int ref_count;
-	int nr_events;
-};
-
-struct trace_array_cpu {
-	atomic_t disabled;
-	void *buffer_page;
-	long unsigned int entries;
-	long unsigned int saved_latency;
-	long unsigned int critical_start;
-	long unsigned int critical_end;
-	long unsigned int critical_sequence;
-	long unsigned int nice;
-	long unsigned int policy;
-	long unsigned int rt_priority;
-	long unsigned int skipped_entries;
-	u64 preempt_timestamp;
-	pid_t pid;
-	kuid_t uid;
-	char comm[16];
-	int ftrace_ignore_pid;
-	bool ignore_pid;
-};
-
-struct trace_option_dentry;
-
-struct trace_options {
-	struct tracer *tracer;
-	struct trace_option_dentry *topts;
-};
-
-struct tracer_opt;
-
-struct trace_option_dentry {
-	struct tracer_opt *opt;
-	struct tracer_flags *flags;
-	struct trace_array *tr;
-	struct dentry *entry;
-};
-
-struct trace_pid_list {
-	int pid_max;
-	long unsigned int *pids;
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
 };
 
 enum {
@@ -27787,39 +72797,6 @@
 	TRACE_NO_PIDS = 2,
 };
 
-enum {
-	TRACE_ARRAY_FL_GLOBAL = 1,
-};
-
-struct tracer_opt {
-	const char *name;
-	u32 bit;
-};
-
-struct tracer_flags {
-	u32 val;
-	struct tracer_opt *opts;
-	struct tracer *trace;
-};
-
-enum {
-	TRACE_FTRACE_BIT = 0,
-	TRACE_FTRACE_NMI_BIT = 1,
-	TRACE_FTRACE_IRQ_BIT = 2,
-	TRACE_FTRACE_SIRQ_BIT = 3,
-	TRACE_INTERNAL_BIT = 4,
-	TRACE_INTERNAL_NMI_BIT = 5,
-	TRACE_INTERNAL_IRQ_BIT = 6,
-	TRACE_INTERNAL_SIRQ_BIT = 7,
-	TRACE_BRANCH_BIT = 8,
-	TRACE_IRQ_BIT = 9,
-	TRACE_GRAPH_BIT = 10,
-	TRACE_GRAPH_DEPTH_START_BIT = 11,
-	TRACE_GRAPH_DEPTH_END_BIT = 12,
-	TRACE_GRAPH_NOTRACE_BIT = 13,
-	TRACE_TRANSITION_BIT = 14,
-};
-
 struct ftrace_mod_load {
 	struct list_head list;
 	char *func;
@@ -27831,21 +72808,6 @@
 	FTRACE_HASH_FL_MOD = 1,
 };
 
-struct ftrace_func_command {
-	struct list_head list;
-	char *name;
-	int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);
-};
-
-struct ftrace_probe_ops {
-	void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);
-	int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);
-	void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);
-	int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);
-};
-
-typedef int (*ftrace_mapper_func)(void *);
-
 struct trace_parser {
 	bool cont;
 	char *buffer;
@@ -27853,44 +72815,6 @@
 	unsigned int size;
 };
 
-enum trace_iterator_bits {
-	TRACE_ITER_PRINT_PARENT_BIT = 0,
-	TRACE_ITER_SYM_OFFSET_BIT = 1,
-	TRACE_ITER_SYM_ADDR_BIT = 2,
-	TRACE_ITER_VERBOSE_BIT = 3,
-	TRACE_ITER_RAW_BIT = 4,
-	TRACE_ITER_HEX_BIT = 5,
-	TRACE_ITER_BIN_BIT = 6,
-	TRACE_ITER_BLOCK_BIT = 7,
-	TRACE_ITER_PRINTK_BIT = 8,
-	TRACE_ITER_ANNOTATE_BIT = 9,
-	TRACE_ITER_USERSTACKTRACE_BIT = 10,
-	TRACE_ITER_SYM_USEROBJ_BIT = 11,
-	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
-	TRACE_ITER_CONTEXT_INFO_BIT = 13,
-	TRACE_ITER_LATENCY_FMT_BIT = 14,
-	TRACE_ITER_RECORD_CMD_BIT = 15,
-	TRACE_ITER_RECORD_TGID_BIT = 16,
-	TRACE_ITER_OVERWRITE_BIT = 17,
-	TRACE_ITER_STOP_ON_FREE_BIT = 18,
-	TRACE_ITER_IRQ_INFO_BIT = 19,
-	TRACE_ITER_MARKERS_BIT = 20,
-	TRACE_ITER_EVENT_FORK_BIT = 21,
-	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
-	TRACE_ITER_FUNCTION_BIT = 23,
-	TRACE_ITER_FUNC_FORK_BIT = 24,
-	TRACE_ITER_DISPLAY_GRAPH_BIT = 25,
-	TRACE_ITER_STACKTRACE_BIT = 26,
-	TRACE_ITER_LAST_BIT = 27,
-};
-
-struct event_subsystem {
-	struct list_head list;
-	const char *name;
-	struct event_filter *filter;
-	int ref_count;
-};
-
 enum regex_type {
 	MATCH_FULL = 0,
 	MATCH_FRONT_ONLY = 1,
@@ -27905,6 +72829,28 @@
 	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
 };
 
+struct ftrace_profile {
+	struct hlist_node node;
+	long unsigned int ip;
+	long unsigned int counter;
+	long long unsigned int time;
+	long long unsigned int time_squared;
+};
+
+struct ftrace_profile_page {
+	struct ftrace_profile_page *next;
+	long unsigned int index;
+	struct ftrace_profile records[0];
+};
+
+struct ftrace_profile_stat {
+	atomic_t disabled;
+	struct hlist_head *hash;
+	struct ftrace_profile_page *pages;
+	struct ftrace_profile_page *start;
+	struct tracer_stat stat;
+};
+
 struct ftrace_func_probe {
 	struct ftrace_probe_ops *probe_ops;
 	struct ftrace_ops ops;
@@ -27918,7 +72864,7 @@
 	struct ftrace_page *next;
 	struct dyn_ftrace *records;
 	int index;
-	int size;
+	int order;
 };
 
 struct ftrace_rec_iter {
@@ -27996,416 +72942,11 @@
 	long unsigned int ip;
 };
 
-enum ring_buffer_type {
-	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
-	RINGBUF_TYPE_PADDING = 29,
-	RINGBUF_TYPE_TIME_EXTEND = 30,
-	RINGBUF_TYPE_TIME_STAMP = 31,
-};
-
-enum ring_buffer_flags {
-	RB_FL_OVERWRITE = 1,
-};
-
-struct ring_buffer_per_cpu;
-
-struct buffer_page;
-
-struct ring_buffer_iter {
-	struct ring_buffer_per_cpu *cpu_buffer;
-	long unsigned int head;
-	long unsigned int next_event;
-	struct buffer_page *head_page;
-	struct buffer_page *cache_reader_page;
-	long unsigned int cache_read;
-	u64 read_stamp;
-	u64 page_stamp;
-	struct ring_buffer_event *event;
-	int missed_events;
-};
-
-struct rb_irq_work {
-	struct irq_work work;
-	wait_queue_head_t waiters;
-	wait_queue_head_t full_waiters;
-	bool waiters_pending;
-	bool full_waiters_pending;
-	bool wakeup_full;
-};
-
-struct trace_buffer___2 {
-	unsigned int flags;
-	int cpus;
-	atomic_t record_disabled;
-	cpumask_var_t cpumask;
-	struct lock_class_key *reader_lock_key;
-	struct mutex mutex;
-	struct ring_buffer_per_cpu **buffers;
-	struct hlist_node node;
-	u64 (*clock)();
-	struct rb_irq_work irq_work;
-	bool time_stamp_abs;
-};
-
-enum {
-	RB_LEN_TIME_EXTEND = 8,
-	RB_LEN_TIME_STAMP = 8,
-};
-
-struct buffer_data_page {
-	u64 time_stamp;
-	local_t commit;
-	unsigned char data[0];
-};
-
-struct buffer_page {
-	struct list_head list;
-	local_t write;
-	unsigned int read;
-	local_t entries;
-	long unsigned int real_end;
-	struct buffer_data_page *page;
-};
-
-struct rb_event_info {
-	u64 ts;
-	u64 delta;
-	u64 before;
-	u64 after;
-	long unsigned int length;
-	struct buffer_page *tail_page;
-	int add_timestamp;
-};
-
-enum {
-	RB_ADD_STAMP_NONE = 0,
-	RB_ADD_STAMP_EXTEND = 2,
-	RB_ADD_STAMP_ABSOLUTE = 4,
-	RB_ADD_STAMP_FORCE = 8,
-};
-
-enum {
-	RB_CTX_TRANSITION = 0,
-	RB_CTX_NMI = 1,
-	RB_CTX_IRQ = 2,
-	RB_CTX_SOFTIRQ = 3,
-	RB_CTX_NORMAL = 4,
-	RB_CTX_MAX = 5,
-};
-
-struct rb_time_struct {
-	local64_t time;
-};
-
-typedef struct rb_time_struct rb_time_t;
-
-struct ring_buffer_per_cpu {
-	int cpu;
-	atomic_t record_disabled;
-	atomic_t resize_disabled;
-	struct trace_buffer___2 *buffer;
-	raw_spinlock_t reader_lock;
-	arch_spinlock_t lock;
-	struct lock_class_key lock_key;
-	struct buffer_data_page *free_page;
-	long unsigned int nr_pages;
-	unsigned int current_context;
-	struct list_head *pages;
-	struct buffer_page *head_page;
-	struct buffer_page *tail_page;
-	struct buffer_page *commit_page;
-	struct buffer_page *reader_page;
-	long unsigned int lost_events;
-	long unsigned int last_overrun;
-	long unsigned int nest;
-	local_t entries_bytes;
-	local_t entries;
-	local_t overrun;
-	local_t commit_overrun;
-	local_t dropped_events;
-	local_t committing;
-	local_t commits;
-	local_t pages_touched;
-	local_t pages_read;
-	long int last_pages_touch;
-	size_t shortest_full;
-	long unsigned int read;
-	long unsigned int read_bytes;
-	rb_time_t write_stamp;
-	rb_time_t before_stamp;
-	u64 read_stamp;
-	long int nr_pages_to_update;
-	struct list_head new_pages;
-	struct work_struct update_pages_work;
-	struct completion update_done;
-	struct rb_irq_work irq_work;
-};
-
-struct trace_export {
-	struct trace_export *next;
-	void (*write)(struct trace_export *, const void *, unsigned int);
-	int flags;
-};
-
-enum trace_iter_flags {
-	TRACE_FILE_LAT_FMT = 1,
-	TRACE_FILE_ANNOTATE = 2,
-	TRACE_FILE_TIME_IN_NS = 4,
-};
-
-enum event_trigger_type {
-	ETT_NONE = 0,
-	ETT_TRACE_ONOFF = 1,
-	ETT_SNAPSHOT = 2,
-	ETT_STACKTRACE = 4,
-	ETT_EVENT_ENABLE = 8,
-	ETT_EVENT_HIST = 16,
-	ETT_HIST_ENABLE = 32,
-};
-
-enum trace_type {
-	__TRACE_FIRST_TYPE = 0,
-	TRACE_FN = 1,
-	TRACE_CTX = 2,
-	TRACE_WAKE = 3,
-	TRACE_STACK = 4,
-	TRACE_PRINT = 5,
-	TRACE_BPRINT = 6,
-	TRACE_MMIO_RW = 7,
-	TRACE_MMIO_MAP = 8,
-	TRACE_BRANCH = 9,
-	TRACE_GRAPH_RET = 10,
-	TRACE_GRAPH_ENT = 11,
-	TRACE_USER_STACK = 12,
-	TRACE_BLK = 13,
-	TRACE_BPUTS = 14,
-	TRACE_HWLAT = 15,
-	TRACE_RAW_DATA = 16,
-	__TRACE_LAST_TYPE = 17,
-};
-
-struct ftrace_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	long unsigned int parent_ip;
-};
-
-struct stack_entry {
-	struct trace_entry ent;
-	int size;
-	long unsigned int caller[8];
-};
-
-struct bprint_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *fmt;
-	u32 buf[0];
-};
-
-struct print_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	char buf[0];
-};
-
-struct raw_data_entry {
-	struct trace_entry ent;
-	unsigned int id;
-	char buf[0];
-};
-
-struct bputs_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *str;
-};
-
-enum trace_flag_type {
-	TRACE_FLAG_IRQS_OFF = 1,
-	TRACE_FLAG_IRQS_NOSUPPORT = 2,
-	TRACE_FLAG_NEED_RESCHED = 4,
-	TRACE_FLAG_HARDIRQ = 8,
-	TRACE_FLAG_SOFTIRQ = 16,
-	TRACE_FLAG_PREEMPT_RESCHED = 32,
-	TRACE_FLAG_NMI = 64,
-};
-
-typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
-
-enum trace_iterator_flags {
-	TRACE_ITER_PRINT_PARENT = 1,
-	TRACE_ITER_SYM_OFFSET = 2,
-	TRACE_ITER_SYM_ADDR = 4,
-	TRACE_ITER_VERBOSE = 8,
-	TRACE_ITER_RAW = 16,
-	TRACE_ITER_HEX = 32,
-	TRACE_ITER_BIN = 64,
-	TRACE_ITER_BLOCK = 128,
-	TRACE_ITER_PRINTK = 256,
-	TRACE_ITER_ANNOTATE = 512,
-	TRACE_ITER_USERSTACKTRACE = 1024,
-	TRACE_ITER_SYM_USEROBJ = 2048,
-	TRACE_ITER_PRINTK_MSGONLY = 4096,
-	TRACE_ITER_CONTEXT_INFO = 8192,
-	TRACE_ITER_LATENCY_FMT = 16384,
-	TRACE_ITER_RECORD_CMD = 32768,
-	TRACE_ITER_RECORD_TGID = 65536,
-	TRACE_ITER_OVERWRITE = 131072,
-	TRACE_ITER_STOP_ON_FREE = 262144,
-	TRACE_ITER_IRQ_INFO = 524288,
-	TRACE_ITER_MARKERS = 1048576,
-	TRACE_ITER_EVENT_FORK = 2097152,
-	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
-	TRACE_ITER_FUNCTION = 8388608,
-	TRACE_ITER_FUNC_FORK = 16777216,
-	TRACE_ITER_DISPLAY_GRAPH = 33554432,
-	TRACE_ITER_STACKTRACE = 67108864,
-};
-
-struct saved_cmdlines_buffer {
-	unsigned int map_pid_to_cmdline[32769];
-	unsigned int *map_cmdline_to_pid;
-	unsigned int cmdline_num;
-	int cmdline_idx;
-	char *saved_cmdlines;
-};
-
-struct ftrace_stack {
-	long unsigned int calls[1024];
-};
-
-struct ftrace_stacks {
-	struct ftrace_stack stacks[4];
-};
-
-struct trace_buffer_struct {
-	int nesting;
-	char buffer[4096];
-};
-
-struct ftrace_buffer_info {
-	struct trace_iterator iter;
-	void *spare;
-	unsigned int spare_cpu;
-	unsigned int read;
-};
-
-struct err_info {
-	const char **errs;
-	u8 type;
-	u8 pos;
-	u64 ts;
-};
-
-struct tracing_log_err {
-	struct list_head list;
-	struct err_info info;
-	char loc[128];
-	char cmd[256];
-};
-
-struct buffer_ref {
-	struct trace_buffer *buffer;
-	void *page;
-	int cpu;
-	refcount_t refcount;
-};
-
-struct ctx_switch_entry {
-	struct trace_entry ent;
-	unsigned int prev_pid;
-	unsigned int next_pid;
-	unsigned int next_cpu;
-	unsigned char prev_prio;
-	unsigned char prev_state;
-	unsigned char next_prio;
-	unsigned char next_state;
-};
-
-struct userstack_entry {
-	struct trace_entry ent;
-	unsigned int tgid;
-	long unsigned int caller[8];
-};
-
-struct hwlat_entry {
-	struct trace_entry ent;
-	u64 duration;
-	u64 outer_duration;
-	u64 nmi_total_ts;
-	struct timespec64 timestamp;
-	unsigned int nmi_count;
-	unsigned int seqnum;
-	unsigned int count;
-};
-
-struct trace_mark {
-	long long unsigned int val;
-	char sym;
-};
-
-typedef int (*cmp_func_t)(const void *, const void *);
-
-struct tracer_stat {
-	const char *name;
-	void * (*stat_start)(struct tracer_stat *);
-	void * (*stat_next)(void *, int);
-	cmp_func_t stat_cmp;
-	int (*stat_show)(struct seq_file *, void *);
-	void (*stat_release)(void *);
-	int (*stat_headers)(struct seq_file *);
-};
-
-struct stat_node {
-	struct rb_node node;
-	void *stat;
-};
-
-struct stat_session {
-	struct list_head session_list;
-	struct tracer_stat *ts;
-	struct rb_root stat_root;
-	struct mutex stat_mutex;
-	struct dentry *file;
-};
-
-struct trace_bprintk_fmt {
-	struct list_head list;
-	const char *fmt;
-};
-
-enum {
-	TRACE_FUNC_OPT_STACK = 1,
-};
-
-struct ftrace_func_mapper___2;
-
-enum {
-	TRACE_NOP_OPT_ACCEPT = 1,
-	TRACE_NOP_OPT_REFUSE = 2,
-};
-
-struct ftrace_graph_ent {
-	long unsigned int func;
-	int depth;
-} __attribute__((packed));
-
-struct ftrace_graph_ret {
-	long unsigned int func;
-	long unsigned int overrun;
-	long long unsigned int calltime;
-	long long unsigned int rettime;
-	int depth;
-} __attribute__((packed));
-
-typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
-
-typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
-
-struct fgraph_ops {
-	trace_func_graph_ent_t entryfunc;
-	trace_func_graph_ret_t retfunc;
+struct kallsyms_data {
+	long unsigned int *addrs;
+	const char **syms;
+	size_t cnt;
+	size_t found;
 };
 
 struct ftrace_graph_ent_entry {
@@ -28416,7 +72957,7 @@
 struct ftrace_graph_ret_entry {
 	struct trace_entry ent;
 	struct ftrace_graph_ret ret;
-} __attribute__((packed));
+};
 
 struct fgraph_cpu_data {
 	pid_t last_pid;
@@ -28432,6 +72973,7 @@
 	struct ftrace_graph_ret_entry ret;
 	int failed;
 	int cpu;
+	int: 32;
 } __attribute__((packed));
 
 enum {
@@ -28440,1246 +72982,90 @@
 	FLAGS_FILL_END = 805306368,
 };
 
-struct blk_crypto_key;
+typedef long unsigned int perf_trace_t[1024];
 
-struct bio_crypt_ctx {
-	const struct blk_crypto_key *bc_key;
-	u64 bc_dun[4];
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
 };
 
-typedef __u32 blk_mq_req_flags_t;
-
-struct disk_stats {
-	u64 nsecs[4];
-	long unsigned int sectors[4];
-	long unsigned int ios[4];
-	long unsigned int merges[4];
-	long unsigned int io_ticks;
-	local_t in_flight[2];
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
 };
 
-struct blk_mq_ctxs;
+struct cpufreq_stats;
 
-struct blk_mq_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head rq_lists[3];
-		long: 64;
-	};
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
 	unsigned int cpu;
-	short unsigned int index_hw[3];
-	struct blk_mq_hw_ctx *hctxs[3];
-	long unsigned int rq_dispatched[2];
-	long unsigned int rq_merged;
-	long unsigned int rq_completed[2];
-	struct request_queue *queue;
-	struct blk_mq_ctxs *ctxs;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
 	struct kobject kobj;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbitmap_word;
-
-struct sbitmap {
-	unsigned int depth;
-	unsigned int shift;
-	unsigned int map_nr;
-	struct sbitmap_word *map;
-};
-
-struct blk_mq_tags;
-
-struct blk_mq_hw_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head dispatch;
-		long unsigned int state;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct delayed_work run_work;
-	cpumask_var_t cpumask;
-	int next_cpu;
-	int next_cpu_batch;
-	long unsigned int flags;
-	void *sched_data;
-	struct request_queue *queue;
-	struct blk_flush_queue *fq;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
 	void *driver_data;
-	struct sbitmap ctx_map;
-	struct blk_mq_ctx *dispatch_from;
-	unsigned int dispatch_busy;
-	short unsigned int type;
-	short unsigned int nr_ctx;
-	struct blk_mq_ctx **ctxs;
-	spinlock_t dispatch_wait_lock;
-	wait_queue_entry_t dispatch_wait;
-	atomic_t wait_index;
-	struct blk_mq_tags *tags;
-	struct blk_mq_tags *sched_tags;
-	long unsigned int queued;
-	long unsigned int run;
-	long unsigned int dispatched[7];
-	unsigned int numa_node;
-	unsigned int queue_num;
-	atomic_t nr_active;
-	atomic_t elevator_queued;
-	struct hlist_node cpuhp_online;
-	struct hlist_node cpuhp_dead;
-	struct kobject kobj;
-	long unsigned int poll_considered;
-	long unsigned int poll_invoked;
-	long unsigned int poll_success;
-	struct list_head hctx_list;
-	struct srcu_struct srcu[0];
-	long: 64;
-	long: 64;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
 };
 
-struct blk_mq_alloc_data {
-	struct request_queue *q;
-	blk_mq_req_flags_t flags;
-	unsigned int shallow_depth;
-	unsigned int cmd_flags;
-	struct blk_mq_ctx *ctx;
-	struct blk_mq_hw_ctx *hctx;
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
 };
 
-struct blk_stat_callback {
-	struct list_head list;
-	struct timer_list timer;
-	struct blk_rq_stat *cpu_stat;
-	int (*bucket_fn)(const struct request *);
-	unsigned int buckets;
-	struct blk_rq_stat *stat;
-	void (*timer_fn)(struct blk_stat_callback *);
-	void *data;
-	struct callback_head rcu;
-};
-
-struct blk_trace {
-	int trace_state;
-	struct rchan *rchan;
-	long unsigned int *sequence;
-	unsigned char *msg_data;
-	u16 act_mask;
-	u64 start_lba;
-	u64 end_lba;
-	u32 pid;
-	u32 dev;
-	struct dentry *dir;
-	struct dentry *dropped_file;
-	struct dentry *msg_file;
-	struct list_head running_list;
-	atomic_t dropped;
-};
-
-struct blk_flush_queue {
-	unsigned int flush_pending_idx: 1;
-	unsigned int flush_running_idx: 1;
-	blk_status_t rq_status;
-	long unsigned int flush_pending_since;
-	struct list_head flush_queue[2];
-	struct list_head flush_data_in_flight;
-	struct request *flush_rq;
-	struct lock_class_key key;
-	spinlock_t mq_flush_lock;
-};
-
-struct blk_mq_queue_map {
-	unsigned int *mq_map;
-	unsigned int nr_queues;
-	unsigned int queue_offset;
-};
-
-struct sbq_wait_state;
-
-struct sbitmap_queue {
-	struct sbitmap sb;
-	unsigned int *alloc_hint;
-	unsigned int wake_batch;
-	atomic_t wake_index;
-	struct sbq_wait_state *ws;
-	atomic_t ws_active;
-	bool round_robin;
-	unsigned int min_shallow_depth;
-};
-
-struct blk_mq_tag_set {
-	struct blk_mq_queue_map map[3];
-	unsigned int nr_maps;
-	const struct blk_mq_ops *ops;
-	unsigned int nr_hw_queues;
-	unsigned int queue_depth;
-	unsigned int reserved_tags;
-	unsigned int cmd_size;
-	int numa_node;
-	unsigned int timeout;
+struct cpufreq_frequency_table {
 	unsigned int flags;
-	void *driver_data;
-	atomic_t active_queues_shared_sbitmap;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct blk_mq_tags **tags;
-	struct mutex tag_list_lock;
-	struct list_head tag_list;
-};
-
-enum blktrace_cat {
-	BLK_TC_READ = 1,
-	BLK_TC_WRITE = 2,
-	BLK_TC_FLUSH = 4,
-	BLK_TC_SYNC = 8,
-	BLK_TC_SYNCIO = 8,
-	BLK_TC_QUEUE = 16,
-	BLK_TC_REQUEUE = 32,
-	BLK_TC_ISSUE = 64,
-	BLK_TC_COMPLETE = 128,
-	BLK_TC_FS = 256,
-	BLK_TC_PC = 512,
-	BLK_TC_NOTIFY = 1024,
-	BLK_TC_AHEAD = 2048,
-	BLK_TC_META = 4096,
-	BLK_TC_DISCARD = 8192,
-	BLK_TC_DRV_DATA = 16384,
-	BLK_TC_FUA = 32768,
-	BLK_TC_END = 32768,
-};
-
-enum blktrace_act {
-	__BLK_TA_QUEUE = 1,
-	__BLK_TA_BACKMERGE = 2,
-	__BLK_TA_FRONTMERGE = 3,
-	__BLK_TA_GETRQ = 4,
-	__BLK_TA_SLEEPRQ = 5,
-	__BLK_TA_REQUEUE = 6,
-	__BLK_TA_ISSUE = 7,
-	__BLK_TA_COMPLETE = 8,
-	__BLK_TA_PLUG = 9,
-	__BLK_TA_UNPLUG_IO = 10,
-	__BLK_TA_UNPLUG_TIMER = 11,
-	__BLK_TA_INSERT = 12,
-	__BLK_TA_SPLIT = 13,
-	__BLK_TA_BOUNCE = 14,
-	__BLK_TA_REMAP = 15,
-	__BLK_TA_ABORT = 16,
-	__BLK_TA_DRV_DATA = 17,
-	__BLK_TA_CGROUP = 256,
-};
-
-enum blktrace_notify {
-	__BLK_TN_PROCESS = 0,
-	__BLK_TN_TIMESTAMP = 1,
-	__BLK_TN_MESSAGE = 2,
-	__BLK_TN_CGROUP = 256,
-};
-
-struct blk_io_trace {
-	__u32 magic;
-	__u32 sequence;
-	__u64 time;
-	__u64 sector;
-	__u32 bytes;
-	__u32 action;
-	__u32 pid;
-	__u32 device;
-	__u32 cpu;
-	__u16 error;
-	__u16 pdu_len;
-};
-
-struct blk_io_trace_remap {
-	__be32 device_from;
-	__be32 device_to;
-	__be64 sector_from;
-};
-
-enum {
-	Blktrace_setup = 1,
-	Blktrace_running = 2,
-	Blktrace_stopped = 3,
-};
-
-struct blk_user_trace_setup {
-	char name[32];
-	__u16 act_mask;
-	__u32 buf_size;
-	__u32 buf_nr;
-	__u64 start_lba;
-	__u64 end_lba;
-	__u32 pid;
-};
-
-struct sbitmap_word {
-	long unsigned int depth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int word;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int cleared;
-	spinlock_t swap_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbq_wait_state {
-	atomic_t wait_cnt;
-	wait_queue_head_t wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_tags {
-	unsigned int nr_tags;
-	unsigned int nr_reserved_tags;
-	atomic_t active_queues;
-	struct sbitmap_queue *bitmap_tags;
-	struct sbitmap_queue *breserved_tags;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct request **rqs;
-	struct request **static_rqs;
-	struct list_head page_list;
-};
-
-struct blk_mq_queue_data {
-	struct request *rq;
-	bool last;
-};
-
-enum blk_crypto_mode_num {
-	BLK_ENCRYPTION_MODE_INVALID = 0,
-	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
-	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
-	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
-	BLK_ENCRYPTION_MODE_MAX = 4,
-};
-
-struct blk_crypto_config {
-	enum blk_crypto_mode_num crypto_mode;
-	unsigned int data_unit_size;
-	unsigned int dun_bytes;
-};
-
-struct blk_crypto_key {
-	struct blk_crypto_config crypto_cfg;
-	unsigned int data_unit_size_bits;
-	unsigned int size;
-	u8 raw[64];
-};
-
-struct blk_mq_ctxs {
-	struct kobject kobj;
-	struct blk_mq_ctx *queue_ctx;
-};
-
-typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
-
-struct ftrace_event_field {
-	struct list_head link;
-	const char *name;
-	const char *type;
-	int filter_type;
-	int offset;
-	int size;
-	int is_signed;
-};
-
-enum {
-	FORMAT_HEADER = 1,
-	FORMAT_FIELD_SEPERATOR = 2,
-	FORMAT_PRINTFMT = 3,
-};
-
-struct event_probe_data {
-	struct trace_event_file *file;
-	long unsigned int count;
-	int ref;
-	bool enable;
-};
-
-struct syscall_trace_enter {
-	struct trace_entry ent;
-	int nr;
-	long unsigned int args[0];
-};
-
-struct syscall_trace_exit {
-	struct trace_entry ent;
-	int nr;
-	long int ret;
-};
-
-struct syscall_tp_t {
-	long long unsigned int regs;
-	long unsigned int syscall_nr;
-	long unsigned int ret;
-};
-
-struct syscall_tp_t___2 {
-	long long unsigned int regs;
-	long unsigned int syscall_nr;
-	long unsigned int args[6];
-};
-
-enum perf_event_sample_format {
-	PERF_SAMPLE_IP = 1,
-	PERF_SAMPLE_TID = 2,
-	PERF_SAMPLE_TIME = 4,
-	PERF_SAMPLE_ADDR = 8,
-	PERF_SAMPLE_READ = 16,
-	PERF_SAMPLE_CALLCHAIN = 32,
-	PERF_SAMPLE_ID = 64,
-	PERF_SAMPLE_CPU = 128,
-	PERF_SAMPLE_PERIOD = 256,
-	PERF_SAMPLE_STREAM_ID = 512,
-	PERF_SAMPLE_RAW = 1024,
-	PERF_SAMPLE_BRANCH_STACK = 2048,
-	PERF_SAMPLE_REGS_USER = 4096,
-	PERF_SAMPLE_STACK_USER = 8192,
-	PERF_SAMPLE_WEIGHT = 16384,
-	PERF_SAMPLE_DATA_SRC = 32768,
-	PERF_SAMPLE_IDENTIFIER = 65536,
-	PERF_SAMPLE_TRANSACTION = 131072,
-	PERF_SAMPLE_REGS_INTR = 262144,
-	PERF_SAMPLE_PHYS_ADDR = 524288,
-	PERF_SAMPLE_AUX = 1048576,
-	PERF_SAMPLE_CGROUP = 2097152,
-	PERF_SAMPLE_MAX = 4194304,
-	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
-};
-
-typedef long unsigned int perf_trace_t[256];
-
-struct filter_pred;
-
-struct prog_entry {
-	int target;
-	int when_to_branch;
-	struct filter_pred *pred;
-};
-
-typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
-
-struct regex;
-
-typedef int (*regex_match_func)(char *, struct regex *, int);
-
-struct regex {
-	char pattern[256];
-	int len;
-	int field_len;
-	regex_match_func match;
-};
-
-struct filter_pred {
-	filter_pred_fn_t fn;
-	u64 val;
-	struct regex regex;
-	short unsigned int *ops;
-	struct ftrace_event_field *field;
-	int offset;
-	int not;
-	int op;
-};
-
-enum filter_op_ids {
-	OP_GLOB = 0,
-	OP_NE = 1,
-	OP_EQ = 2,
-	OP_LE = 3,
-	OP_LT = 4,
-	OP_GE = 5,
-	OP_GT = 6,
-	OP_BAND = 7,
-	OP_MAX = 8,
-};
-
-enum {
-	FILT_ERR_NONE = 0,
-	FILT_ERR_INVALID_OP = 1,
-	FILT_ERR_TOO_MANY_OPEN = 2,
-	FILT_ERR_TOO_MANY_CLOSE = 3,
-	FILT_ERR_MISSING_QUOTE = 4,
-	FILT_ERR_OPERAND_TOO_LONG = 5,
-	FILT_ERR_EXPECT_STRING = 6,
-	FILT_ERR_EXPECT_DIGIT = 7,
-	FILT_ERR_ILLEGAL_FIELD_OP = 8,
-	FILT_ERR_FIELD_NOT_FOUND = 9,
-	FILT_ERR_ILLEGAL_INTVAL = 10,
-	FILT_ERR_BAD_SUBSYS_FILTER = 11,
-	FILT_ERR_TOO_MANY_PREDS = 12,
-	FILT_ERR_INVALID_FILTER = 13,
-	FILT_ERR_IP_FIELD_ONLY = 14,
-	FILT_ERR_INVALID_VALUE = 15,
-	FILT_ERR_ERRNO = 16,
-	FILT_ERR_NO_FILTER = 17,
-};
-
-struct filter_parse_error {
-	int lasterr;
-	int lasterr_pos;
-};
-
-typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
-
-enum {
-	INVERT = 1,
-	PROCESS_AND = 2,
-	PROCESS_OR = 4,
-};
-
-enum {
-	TOO_MANY_CLOSE = 4294967295,
-	TOO_MANY_OPEN = 4294967294,
-	MISSING_QUOTE = 4294967293,
-};
-
-struct filter_list {
-	struct list_head list;
-	struct event_filter *filter;
-};
-
-struct function_filter_data {
-	struct ftrace_ops *ops;
-	int first_filter;
-	int first_notrace;
-};
-
-struct event_trigger_ops;
-
-struct event_command;
-
-struct event_trigger_data {
-	long unsigned int count;
-	int ref;
-	struct event_trigger_ops *ops;
-	struct event_command *cmd_ops;
-	struct event_filter *filter;
-	char *filter_str;
-	void *private_data;
-	bool paused;
-	bool paused_tmp;
-	struct list_head list;
-	char *name;
-	struct list_head named_list;
-	struct event_trigger_data *named_data;
-};
-
-struct event_trigger_ops {
-	void (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);
-	int (*init)(struct event_trigger_ops *, struct event_trigger_data *);
-	void (*free)(struct event_trigger_ops *, struct event_trigger_data *);
-	int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);
-};
-
-struct event_command {
-	struct list_head list;
-	char *name;
-	enum event_trigger_type trigger_type;
-	int flags;
-	int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);
-	int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg_all)(struct trace_event_file *);
-	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
-	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
-};
-
-struct enable_trigger_data {
-	struct trace_event_file *file;
-	bool enable;
-	bool hist;
-};
-
-enum event_command_flags {
-	EVENT_CMD_FL_POST_TRIGGER = 1,
-	EVENT_CMD_FL_NEEDS_REC = 2,
-};
-
-enum bpf_func_id {
-	BPF_FUNC_unspec = 0,
-	BPF_FUNC_map_lookup_elem = 1,
-	BPF_FUNC_map_update_elem = 2,
-	BPF_FUNC_map_delete_elem = 3,
-	BPF_FUNC_probe_read = 4,
-	BPF_FUNC_ktime_get_ns = 5,
-	BPF_FUNC_trace_printk = 6,
-	BPF_FUNC_get_prandom_u32 = 7,
-	BPF_FUNC_get_smp_processor_id = 8,
-	BPF_FUNC_skb_store_bytes = 9,
-	BPF_FUNC_l3_csum_replace = 10,
-	BPF_FUNC_l4_csum_replace = 11,
-	BPF_FUNC_tail_call = 12,
-	BPF_FUNC_clone_redirect = 13,
-	BPF_FUNC_get_current_pid_tgid = 14,
-	BPF_FUNC_get_current_uid_gid = 15,
-	BPF_FUNC_get_current_comm = 16,
-	BPF_FUNC_get_cgroup_classid = 17,
-	BPF_FUNC_skb_vlan_push = 18,
-	BPF_FUNC_skb_vlan_pop = 19,
-	BPF_FUNC_skb_get_tunnel_key = 20,
-	BPF_FUNC_skb_set_tunnel_key = 21,
-	BPF_FUNC_perf_event_read = 22,
-	BPF_FUNC_redirect = 23,
-	BPF_FUNC_get_route_realm = 24,
-	BPF_FUNC_perf_event_output = 25,
-	BPF_FUNC_skb_load_bytes = 26,
-	BPF_FUNC_get_stackid = 27,
-	BPF_FUNC_csum_diff = 28,
-	BPF_FUNC_skb_get_tunnel_opt = 29,
-	BPF_FUNC_skb_set_tunnel_opt = 30,
-	BPF_FUNC_skb_change_proto = 31,
-	BPF_FUNC_skb_change_type = 32,
-	BPF_FUNC_skb_under_cgroup = 33,
-	BPF_FUNC_get_hash_recalc = 34,
-	BPF_FUNC_get_current_task = 35,
-	BPF_FUNC_probe_write_user = 36,
-	BPF_FUNC_current_task_under_cgroup = 37,
-	BPF_FUNC_skb_change_tail = 38,
-	BPF_FUNC_skb_pull_data = 39,
-	BPF_FUNC_csum_update = 40,
-	BPF_FUNC_set_hash_invalid = 41,
-	BPF_FUNC_get_numa_node_id = 42,
-	BPF_FUNC_skb_change_head = 43,
-	BPF_FUNC_xdp_adjust_head = 44,
-	BPF_FUNC_probe_read_str = 45,
-	BPF_FUNC_get_socket_cookie = 46,
-	BPF_FUNC_get_socket_uid = 47,
-	BPF_FUNC_set_hash = 48,
-	BPF_FUNC_setsockopt = 49,
-	BPF_FUNC_skb_adjust_room = 50,
-	BPF_FUNC_redirect_map = 51,
-	BPF_FUNC_sk_redirect_map = 52,
-	BPF_FUNC_sock_map_update = 53,
-	BPF_FUNC_xdp_adjust_meta = 54,
-	BPF_FUNC_perf_event_read_value = 55,
-	BPF_FUNC_perf_prog_read_value = 56,
-	BPF_FUNC_getsockopt = 57,
-	BPF_FUNC_override_return = 58,
-	BPF_FUNC_sock_ops_cb_flags_set = 59,
-	BPF_FUNC_msg_redirect_map = 60,
-	BPF_FUNC_msg_apply_bytes = 61,
-	BPF_FUNC_msg_cork_bytes = 62,
-	BPF_FUNC_msg_pull_data = 63,
-	BPF_FUNC_bind = 64,
-	BPF_FUNC_xdp_adjust_tail = 65,
-	BPF_FUNC_skb_get_xfrm_state = 66,
-	BPF_FUNC_get_stack = 67,
-	BPF_FUNC_skb_load_bytes_relative = 68,
-	BPF_FUNC_fib_lookup = 69,
-	BPF_FUNC_sock_hash_update = 70,
-	BPF_FUNC_msg_redirect_hash = 71,
-	BPF_FUNC_sk_redirect_hash = 72,
-	BPF_FUNC_lwt_push_encap = 73,
-	BPF_FUNC_lwt_seg6_store_bytes = 74,
-	BPF_FUNC_lwt_seg6_adjust_srh = 75,
-	BPF_FUNC_lwt_seg6_action = 76,
-	BPF_FUNC_rc_repeat = 77,
-	BPF_FUNC_rc_keydown = 78,
-	BPF_FUNC_skb_cgroup_id = 79,
-	BPF_FUNC_get_current_cgroup_id = 80,
-	BPF_FUNC_get_local_storage = 81,
-	BPF_FUNC_sk_select_reuseport = 82,
-	BPF_FUNC_skb_ancestor_cgroup_id = 83,
-	BPF_FUNC_sk_lookup_tcp = 84,
-	BPF_FUNC_sk_lookup_udp = 85,
-	BPF_FUNC_sk_release = 86,
-	BPF_FUNC_map_push_elem = 87,
-	BPF_FUNC_map_pop_elem = 88,
-	BPF_FUNC_map_peek_elem = 89,
-	BPF_FUNC_msg_push_data = 90,
-	BPF_FUNC_msg_pop_data = 91,
-	BPF_FUNC_rc_pointer_rel = 92,
-	BPF_FUNC_spin_lock = 93,
-	BPF_FUNC_spin_unlock = 94,
-	BPF_FUNC_sk_fullsock = 95,
-	BPF_FUNC_tcp_sock = 96,
-	BPF_FUNC_skb_ecn_set_ce = 97,
-	BPF_FUNC_get_listener_sock = 98,
-	BPF_FUNC_skc_lookup_tcp = 99,
-	BPF_FUNC_tcp_check_syncookie = 100,
-	BPF_FUNC_sysctl_get_name = 101,
-	BPF_FUNC_sysctl_get_current_value = 102,
-	BPF_FUNC_sysctl_get_new_value = 103,
-	BPF_FUNC_sysctl_set_new_value = 104,
-	BPF_FUNC_strtol = 105,
-	BPF_FUNC_strtoul = 106,
-	BPF_FUNC_sk_storage_get = 107,
-	BPF_FUNC_sk_storage_delete = 108,
-	BPF_FUNC_send_signal = 109,
-	BPF_FUNC_tcp_gen_syncookie = 110,
-	BPF_FUNC_skb_output = 111,
-	BPF_FUNC_probe_read_user = 112,
-	BPF_FUNC_probe_read_kernel = 113,
-	BPF_FUNC_probe_read_user_str = 114,
-	BPF_FUNC_probe_read_kernel_str = 115,
-	BPF_FUNC_tcp_send_ack = 116,
-	BPF_FUNC_send_signal_thread = 117,
-	BPF_FUNC_jiffies64 = 118,
-	BPF_FUNC_read_branch_records = 119,
-	BPF_FUNC_get_ns_current_pid_tgid = 120,
-	BPF_FUNC_xdp_output = 121,
-	BPF_FUNC_get_netns_cookie = 122,
-	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
-	BPF_FUNC_sk_assign = 124,
-	BPF_FUNC_ktime_get_boot_ns = 125,
-	BPF_FUNC_seq_printf = 126,
-	BPF_FUNC_seq_write = 127,
-	BPF_FUNC_sk_cgroup_id = 128,
-	BPF_FUNC_sk_ancestor_cgroup_id = 129,
-	BPF_FUNC_ringbuf_output = 130,
-	BPF_FUNC_ringbuf_reserve = 131,
-	BPF_FUNC_ringbuf_submit = 132,
-	BPF_FUNC_ringbuf_discard = 133,
-	BPF_FUNC_ringbuf_query = 134,
-	BPF_FUNC_csum_level = 135,
-	BPF_FUNC_skc_to_tcp6_sock = 136,
-	BPF_FUNC_skc_to_tcp_sock = 137,
-	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
-	BPF_FUNC_skc_to_tcp_request_sock = 139,
-	BPF_FUNC_skc_to_udp6_sock = 140,
-	BPF_FUNC_get_task_stack = 141,
-	BPF_FUNC_load_hdr_opt = 142,
-	BPF_FUNC_store_hdr_opt = 143,
-	BPF_FUNC_reserve_hdr_opt = 144,
-	BPF_FUNC_inode_storage_get = 145,
-	BPF_FUNC_inode_storage_delete = 146,
-	BPF_FUNC_d_path = 147,
-	BPF_FUNC_copy_from_user = 148,
-	BPF_FUNC_snprintf_btf = 149,
-	BPF_FUNC_seq_printf_btf = 150,
-	BPF_FUNC_skb_cgroup_classid = 151,
-	BPF_FUNC_redirect_neigh = 152,
-	BPF_FUNC_per_cpu_ptr = 153,
-	BPF_FUNC_this_cpu_ptr = 154,
-	BPF_FUNC_redirect_peer = 155,
-	__BPF_FUNC_MAX_ID = 156,
-};
-
-enum {
-	BPF_F_INDEX_MASK = 4294967295,
-	BPF_F_CURRENT_CPU = 4294967295,
-	BPF_F_CTXLEN_MASK = 0,
-};
-
-struct bpf_perf_event_value {
-	__u64 counter;
-	__u64 enabled;
-	__u64 running;
-};
-
-struct bpf_raw_tracepoint_args {
-	__u64 args[0];
-};
-
-enum bpf_task_fd_type {
-	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
-	BPF_FD_TYPE_TRACEPOINT = 1,
-	BPF_FD_TYPE_KPROBE = 2,
-	BPF_FD_TYPE_KRETPROBE = 3,
-	BPF_FD_TYPE_UPROBE = 4,
-	BPF_FD_TYPE_URETPROBE = 5,
-};
-
-struct btf_ptr {
-	void *ptr;
-	__u32 type_id;
-	__u32 flags;
-};
-
-enum {
-	BTF_F_COMPACT = 1,
-	BTF_F_NONAME = 2,
-	BTF_F_PTR_RAW = 4,
-	BTF_F_ZERO = 8,
-};
-
-enum bpf_arg_type {
-	ARG_DONTCARE = 0,
-	ARG_CONST_MAP_PTR = 1,
-	ARG_PTR_TO_MAP_KEY = 2,
-	ARG_PTR_TO_MAP_VALUE = 3,
-	ARG_PTR_TO_UNINIT_MAP_VALUE = 4,
-	ARG_PTR_TO_MAP_VALUE_OR_NULL = 5,
-	ARG_PTR_TO_MEM = 6,
-	ARG_PTR_TO_MEM_OR_NULL = 7,
-	ARG_PTR_TO_UNINIT_MEM = 8,
-	ARG_CONST_SIZE = 9,
-	ARG_CONST_SIZE_OR_ZERO = 10,
-	ARG_PTR_TO_CTX = 11,
-	ARG_PTR_TO_CTX_OR_NULL = 12,
-	ARG_ANYTHING = 13,
-	ARG_PTR_TO_SPIN_LOCK = 14,
-	ARG_PTR_TO_SOCK_COMMON = 15,
-	ARG_PTR_TO_INT = 16,
-	ARG_PTR_TO_LONG = 17,
-	ARG_PTR_TO_SOCKET = 18,
-	ARG_PTR_TO_SOCKET_OR_NULL = 19,
-	ARG_PTR_TO_BTF_ID = 20,
-	ARG_PTR_TO_ALLOC_MEM = 21,
-	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 22,
-	ARG_CONST_ALLOC_SIZE_OR_ZERO = 23,
-	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 24,
-	ARG_PTR_TO_PERCPU_BTF_ID = 25,
-	__BPF_ARG_TYPE_MAX = 26,
-};
-
-enum bpf_return_type {
-	RET_INTEGER = 0,
-	RET_VOID = 1,
-	RET_PTR_TO_MAP_VALUE = 2,
-	RET_PTR_TO_MAP_VALUE_OR_NULL = 3,
-	RET_PTR_TO_SOCKET_OR_NULL = 4,
-	RET_PTR_TO_TCP_SOCK_OR_NULL = 5,
-	RET_PTR_TO_SOCK_COMMON_OR_NULL = 6,
-	RET_PTR_TO_ALLOC_MEM_OR_NULL = 7,
-	RET_PTR_TO_BTF_ID_OR_NULL = 8,
-	RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9,
-	RET_PTR_TO_MEM_OR_BTF_ID = 10,
-};
-
-struct bpf_func_proto {
-	u64 (*func)(u64, u64, u64, u64, u64);
-	bool gpl_only;
-	bool pkt_access;
-	enum bpf_return_type ret_type;
-	union {
-		struct {
-			enum bpf_arg_type arg1_type;
-			enum bpf_arg_type arg2_type;
-			enum bpf_arg_type arg3_type;
-			enum bpf_arg_type arg4_type;
-			enum bpf_arg_type arg5_type;
-		};
-		enum bpf_arg_type arg_type[5];
-	};
-	union {
-		struct {
-			u32 *arg1_btf_id;
-			u32 *arg2_btf_id;
-			u32 *arg3_btf_id;
-			u32 *arg4_btf_id;
-			u32 *arg5_btf_id;
-		};
-		u32 *arg_btf_id[5];
-	};
-	int *ret_btf_id;
-	bool (*allowed)(const struct bpf_prog *);
-};
-
-enum bpf_access_type {
-	BPF_READ = 1,
-	BPF_WRITE = 2,
-};
-
-struct bpf_verifier_log;
-
-struct bpf_insn_access_aux {
-	enum bpf_reg_type reg_type;
-	union {
-		int ctx_field_size;
-		u32 btf_id;
-	};
-	struct bpf_verifier_log *log;
-};
-
-struct bpf_verifier_ops {
-	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
-	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
-	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
-	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
-	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
-};
-
-struct bpf_array_aux {
-	enum bpf_prog_type type;
-	bool jited;
-	struct list_head poke_progs;
-	struct bpf_map *map;
-	struct mutex poke_mutex;
-	struct work_struct work;
-};
-
-struct bpf_array {
-	struct bpf_map map;
-	u32 elem_size;
-	u32 index_mask;
-	struct bpf_array_aux *aux;
-	union {
-		char value[0];
-		void *ptrs[0];
-		void *pptrs[0];
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_event_entry {
-	struct perf_event *event;
-	struct file *perf_file;
-	struct file *map_file;
-	struct callback_head rcu;
-};
-
-typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
-
-typedef struct user_pt_regs bpf_user_pt_regs_t;
-
-struct bpf_perf_event_data {
-	bpf_user_pt_regs_t regs;
-	__u64 sample_period;
-	__u64 addr;
-};
-
-struct perf_event_query_bpf {
-	__u32 ids_len;
-	__u32 prog_cnt;
-	__u32 ids[0];
-};
-
-struct bpf_perf_event_data_kern {
-	bpf_user_pt_regs_t *regs;
-	struct perf_sample_data *data;
-	struct perf_event *event;
-};
-
-struct btf_id_set {
-	u32 cnt;
-	u32 ids[0];
-};
-
-struct trace_event_raw_bpf_trace_printk {
-	struct trace_entry ent;
-	u32 __data_loc_bpf_string;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_trace_printk {
-	u32 bpf_string;
-};
-
-typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
-
-struct bpf_trace_module {
-	struct module *module;
-	struct list_head list;
-};
-
-typedef u64 (*btf_bpf_override_return)(struct pt_regs *, long unsigned int);
-
-typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
-
-typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
-
-struct bpf_seq_printf_buf {
-	char buf[768];
-};
-
-typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
-
-typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
-
-typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
-
-struct bpf_trace_sample_data {
-	struct perf_sample_data sds[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
-
-struct bpf_nested_pt_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_get_current_task)();
-
-typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
-
-struct send_signal_irq_work {
-	struct irq_work irq_work;
-	struct task_struct *task;
-	u32 sig;
-	enum pid_type type;
-};
-
-typedef u64 (*btf_bpf_send_signal)(u32);
-
-typedef u64 (*btf_bpf_send_signal_thread)(u32);
-
-typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
-
-typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
-
-typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
-
-struct bpf_raw_tp_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
-
-enum dynevent_type {
-	DYNEVENT_TYPE_SYNTH = 1,
-	DYNEVENT_TYPE_KPROBE = 2,
-	DYNEVENT_TYPE_NONE = 3,
-};
-
-struct dynevent_cmd;
-
-typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
-
-struct dynevent_cmd {
-	struct seq_buf seq;
-	const char *event_name;
-	unsigned int n_fields;
-	enum dynevent_type type;
-	dynevent_create_fn_t run_command;
-	void *private_data;
-};
-
-struct kprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int ip;
-};
-
-struct kretprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int func;
-	long unsigned int ret_ip;
-};
-
-struct dyn_event;
-
-struct dyn_event_operations {
-	struct list_head list;
-	int (*create)(int, const char **);
-	int (*show)(struct seq_file *, struct dyn_event *);
-	bool (*is_busy)(struct dyn_event *);
-	int (*free)(struct dyn_event *);
-	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
-};
-
-struct dyn_event {
-	struct list_head list;
-	struct dyn_event_operations *ops;
-};
-
-struct dynevent_arg {
-	const char *str;
-	char separator;
-};
-
-typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
-
-enum fetch_op {
-	FETCH_OP_NOP = 0,
-	FETCH_OP_REG = 1,
-	FETCH_OP_STACK = 2,
-	FETCH_OP_STACKP = 3,
-	FETCH_OP_RETVAL = 4,
-	FETCH_OP_IMM = 5,
-	FETCH_OP_COMM = 6,
-	FETCH_OP_ARG = 7,
-	FETCH_OP_FOFFS = 8,
-	FETCH_OP_DATA = 9,
-	FETCH_OP_DEREF = 10,
-	FETCH_OP_UDEREF = 11,
-	FETCH_OP_ST_RAW = 12,
-	FETCH_OP_ST_MEM = 13,
-	FETCH_OP_ST_UMEM = 14,
-	FETCH_OP_ST_STRING = 15,
-	FETCH_OP_ST_USTRING = 16,
-	FETCH_OP_MOD_BF = 17,
-	FETCH_OP_LP_ARRAY = 18,
-	FETCH_OP_END = 19,
-	FETCH_NOP_SYMBOL = 20,
-};
-
-struct fetch_insn {
-	enum fetch_op op;
-	union {
-		unsigned int param;
-		struct {
-			unsigned int size;
-			int offset;
-		};
-		struct {
-			unsigned char basesize;
-			unsigned char lshift;
-			unsigned char rshift;
-		};
-		long unsigned int immediate;
-		void *data;
-	};
-};
-
-struct fetch_type {
-	const char *name;
-	size_t size;
-	int is_signed;
-	print_type_func_t print;
-	const char *fmt;
-	const char *fmttype;
-};
-
-struct probe_arg {
-	struct fetch_insn *code;
-	bool dynamic;
-	unsigned int offset;
-	unsigned int count;
-	const char *name;
-	const char *comm;
-	char *fmt;
-	const struct fetch_type *type;
-};
-
-struct trace_uprobe_filter {
-	rwlock_t rwlock;
-	int nr_systemwide;
-	struct list_head perf_events;
-};
-
-struct trace_probe_event {
-	unsigned int flags;
-	struct trace_event_class class;
-	struct trace_event_call call;
-	struct list_head files;
-	struct list_head probes;
-	struct trace_uprobe_filter filter[0];
-};
-
-struct trace_probe {
-	struct list_head list;
-	struct trace_probe_event *event;
-	ssize_t size;
-	unsigned int nr_args;
-	struct probe_arg args[0];
-};
-
-struct event_file_link {
-	struct trace_event_file *file;
-	struct list_head list;
-};
-
-enum {
-	TP_ERR_FILE_NOT_FOUND = 0,
-	TP_ERR_NO_REGULAR_FILE = 1,
-	TP_ERR_BAD_REFCNT = 2,
-	TP_ERR_REFCNT_OPEN_BRACE = 3,
-	TP_ERR_BAD_REFCNT_SUFFIX = 4,
-	TP_ERR_BAD_UPROBE_OFFS = 5,
-	TP_ERR_MAXACT_NO_KPROBE = 6,
-	TP_ERR_BAD_MAXACT = 7,
-	TP_ERR_MAXACT_TOO_BIG = 8,
-	TP_ERR_BAD_PROBE_ADDR = 9,
-	TP_ERR_BAD_RETPROBE = 10,
-	TP_ERR_BAD_ADDR_SUFFIX = 11,
-	TP_ERR_NO_GROUP_NAME = 12,
-	TP_ERR_GROUP_TOO_LONG = 13,
-	TP_ERR_BAD_GROUP_NAME = 14,
-	TP_ERR_NO_EVENT_NAME = 15,
-	TP_ERR_EVENT_TOO_LONG = 16,
-	TP_ERR_BAD_EVENT_NAME = 17,
-	TP_ERR_RETVAL_ON_PROBE = 18,
-	TP_ERR_BAD_STACK_NUM = 19,
-	TP_ERR_BAD_ARG_NUM = 20,
-	TP_ERR_BAD_VAR = 21,
-	TP_ERR_BAD_REG_NAME = 22,
-	TP_ERR_BAD_MEM_ADDR = 23,
-	TP_ERR_BAD_IMM = 24,
-	TP_ERR_IMMSTR_NO_CLOSE = 25,
-	TP_ERR_FILE_ON_KPROBE = 26,
-	TP_ERR_BAD_FILE_OFFS = 27,
-	TP_ERR_SYM_ON_UPROBE = 28,
-	TP_ERR_TOO_MANY_OPS = 29,
-	TP_ERR_DEREF_NEED_BRACE = 30,
-	TP_ERR_BAD_DEREF_OFFS = 31,
-	TP_ERR_DEREF_OPEN_BRACE = 32,
-	TP_ERR_COMM_CANT_DEREF = 33,
-	TP_ERR_BAD_FETCH_ARG = 34,
-	TP_ERR_ARRAY_NO_CLOSE = 35,
-	TP_ERR_BAD_ARRAY_SUFFIX = 36,
-	TP_ERR_BAD_ARRAY_NUM = 37,
-	TP_ERR_ARRAY_TOO_BIG = 38,
-	TP_ERR_BAD_TYPE = 39,
-	TP_ERR_BAD_STRING = 40,
-	TP_ERR_BAD_BITFIELD = 41,
-	TP_ERR_ARG_NAME_TOO_LONG = 42,
-	TP_ERR_NO_ARG_NAME = 43,
-	TP_ERR_BAD_ARG_NAME = 44,
-	TP_ERR_USED_ARG_NAME = 45,
-	TP_ERR_ARG_TOO_LONG = 46,
-	TP_ERR_NO_ARG_BODY = 47,
-	TP_ERR_BAD_INSN_BNDRY = 48,
-	TP_ERR_FAIL_REG_PROBE = 49,
-	TP_ERR_DIFF_PROBE_TYPE = 50,
-	TP_ERR_DIFF_ARG_TYPE = 51,
-	TP_ERR_SAME_PROBE = 52,
-};
-
-struct trace_kprobe {
-	struct dyn_event devent;
-	struct kretprobe rp;
-	long unsigned int *nhit;
-	const char *symbol;
-	struct trace_probe tp;
+	unsigned int driver_data;
+	unsigned int frequency;
 };
 
 struct trace_event_raw_cpu {
@@ -29689,6 +73075,14 @@
 	char __data[0];
 };
 
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
 struct trace_event_raw_powernv_throttle {
 	struct trace_entry ent;
 	int chip_id;
@@ -29790,8 +73184,18 @@
 	char __data[0];
 };
 
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_cpu {};
 
+struct trace_event_data_offsets_cpu_idle_miss {};
+
 struct trace_event_data_offsets_powernv_throttle {
 	u32 reason;
 };
@@ -29834,8 +73238,12 @@
 	u32 name;
 };
 
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
 typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
 
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
 typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
 
 typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
@@ -29878,6 +73286,16193 @@
 
 typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
 
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+enum cpu_pm_event {
+	CPU_PM_ENTER = 0,
+	CPU_PM_ENTER_FAILED = 1,
+	CPU_PM_EXIT = 2,
+	CPU_CLUSTER_PM_ENTER = 3,
+	CPU_CLUSTER_PM_ENTER_FAILED = 4,
+	CPU_CLUSTER_PM_EXIT = 5,
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long int tgt_addr;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct btf_field *kptr_field;
+	u8 uninit_dynptr_regno;
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum {
+	AT_PKT_END = -1,
+	BEYOND_PKT_END = -2,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+struct bpf_kfunc_call_arg_meta {
+	struct btf *btf;
+	u32 func_id;
+	u32 kfunc_flags;
+	const struct btf_type *func_proto;
+	const char *func_name;
+	u32 ref_obj_id;
+	u8 release_regno;
+	bool r0_rdonly;
+	u32 ret_btf_id;
+	u64 r0_size;
+	struct {
+		u64 value;
+		bool found;
+	} arg_constant;
+	struct {
+		struct btf *btf;
+		u32 btf_id;
+	} arg_obj_drop;
+	struct {
+		struct btf_field *field;
+	} arg_list_head;
+};
+
+enum {
+	KF_ARG_DYNPTR_ID = 0,
+	KF_ARG_LIST_HEAD_ID = 1,
+	KF_ARG_LIST_NODE_ID = 2,
+};
+
+enum kfunc_ptr_arg_type {
+	KF_ARG_PTR_TO_CTX = 0,
+	KF_ARG_PTR_TO_ALLOC_BTF_ID = 1,
+	KF_ARG_PTR_TO_KPTR = 2,
+	KF_ARG_PTR_TO_DYNPTR = 3,
+	KF_ARG_PTR_TO_LIST_HEAD = 4,
+	KF_ARG_PTR_TO_LIST_NODE = 5,
+	KF_ARG_PTR_TO_BTF_ID = 6,
+	KF_ARG_PTR_TO_MEM = 7,
+	KF_ARG_PTR_TO_MEM_SIZE = 8,
+};
+
+enum special_kfunc_type {
+	KF_bpf_obj_new_impl = 0,
+	KF_bpf_obj_drop_impl = 1,
+	KF_bpf_list_push_front = 2,
+	KF_bpf_list_push_back = 3,
+	KF_bpf_list_pop_front = 4,
+	KF_bpf_list_pop_back = 5,
+	KF_bpf_cast_to_kern_ctx = 6,
+	KF_bpf_rdonly_cast = 7,
+	KF_bpf_rcu_read_lock = 8,
+	KF_bpf_rcu_read_unlock = 9,
+};
+
+enum {
+	REASON_BOUNDS = -1,
+	REASON_TYPE = -2,
+	REASON_PATHS = -3,
+	REASON_LIMIT = -4,
+	REASON_STACK = -5,
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
+};
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
+};
+
+struct bpf_event_entry {
+	struct perf_event *event;
+	struct file *perf_file;
+	struct file *map_file;
+	struct callback_head rcu;
+};
+
+struct bpf_iter__bpf_map_elem {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+typedef u64 (*btf_bpf_task_storage_get_recur)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete_recur)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
+	struct mutex mutex;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	void *rw_image;
+	u32 image_off;
+	struct bpf_ksym ksym;
+};
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+};
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+typedef u64 (*btf_bpf_cgrp_storage_get)(struct bpf_map *, struct cgroup *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_cgrp_storage_delete)(struct bpf_map *, struct cgroup *);
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int);
+};
+
+enum bpf_struct_ops_state {
+	BPF_STRUCT_OPS_STATE_INIT = 0,
+	BPF_STRUCT_OPS_STATE_INUSE = 1,
+	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
+};
+
+struct bpf_struct_ops_value {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_struct_ops_map {
+	struct bpf_map map;
+	struct callback_head rcu;
+	const struct bpf_struct_ops *st_ops;
+	struct mutex lock;
+	struct bpf_link **links;
+	void *image;
+	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_struct_ops_value kvalue;
+};
+
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_struct_ops_tcp_congestion_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tcp_congestion_ops data;
+};
+
+enum {
+	BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0,
+	BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1,
+	__NR_BPF_STRUCT_OPS_TYPE = 2,
+};
+
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	bool no_numa;
+};
+
+struct parallel_data;
+
+struct padata_priv {
+	struct list_head list;
+	struct parallel_data *pd;
+	int cb_cpu;
+	unsigned int seq_nr;
+	int info;
+	void (*parallel)(struct padata_priv *);
+	void (*serial)(struct padata_priv *);
+};
+
+struct padata_cpumask {
+	cpumask_var_t pcpu;
+	cpumask_var_t cbcpu;
+};
+
+struct padata_shell;
+
+struct padata_list;
+
+struct padata_serial_queue;
+
+struct parallel_data {
+	struct padata_shell *ps;
+	struct padata_list *reorder_list;
+	struct padata_serial_queue *squeue;
+	refcount_t refcnt;
+	unsigned int seq_nr;
+	unsigned int processed;
+	int cpu;
+	struct padata_cpumask cpumask;
+	struct work_struct reorder_work;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct padata_list {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct padata_serial_queue {
+	struct padata_list serial;
+	struct work_struct work;
+	struct parallel_data *pd;
+};
+
+struct padata_instance;
+
+struct padata_shell {
+	struct padata_instance *pinst;
+	struct parallel_data *pd;
+	struct parallel_data *opd;
+	struct list_head list;
+};
+
+struct padata_instance {
+	struct hlist_node cpu_online_node;
+	struct hlist_node cpu_dead_node;
+	struct workqueue_struct *parallel_wq;
+	struct workqueue_struct *serial_wq;
+	struct list_head pslist;
+	struct padata_cpumask cpumask;
+	struct kobject kobj;
+	struct mutex lock;
+	u8 flags;
+};
+
+struct padata_mt_job {
+	void (*thread_fn)(long unsigned int, long unsigned int, void *);
+	void *fn_arg;
+	long unsigned int start;
+	long unsigned int size;
+	long unsigned int align;
+	long unsigned int min_chunk;
+	int max_threads;
+};
+
+struct padata_work {
+	struct work_struct pw_work;
+	struct list_head pw_list;
+	void *pw_data;
+};
+
+struct padata_mt_job_state {
+	spinlock_t lock;
+	struct completion completion;
+	struct padata_mt_job *job;
+	int nworks;
+	int nworks_fini;
+	long unsigned int chunk_size;
+};
+
+struct padata_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
+	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
+};
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+enum rseq_cpu_id_state {
+	RSEQ_CPU_ID_UNINITIALIZED = -1,
+	RSEQ_CPU_ID_REGISTRATION_FAILED = -2,
+};
+
+enum rseq_flags {
+	RSEQ_FLAG_UNREGISTER = 1,
+};
+
+enum rseq_cs_flags {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
+};
+
+struct rseq_cs {
+	__u32 version;
+	__u32 flags;
+	__u64 start_ip;
+	__u64 post_commit_offset;
+	__u64 abort_ip;
+};
+
+struct trace_event_raw_rseq_update {
+	struct trace_entry ent;
+	s32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rseq_ip_fixup {
+	struct trace_entry ent;
+	long unsigned int regs_ip;
+	long unsigned int start_ip;
+	long unsigned int post_commit_offset;
+	long unsigned int abort_ip;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rseq_update {};
+
+struct trace_event_data_offsets_rseq_ip_fixup {};
+
+typedef void (*btf_trace_rseq_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef unsigned int zap_flags_t;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct encoded_page *encoded_pages[0];
+};
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int delayed_rmap: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	long unsigned int reclaimable;
+	long unsigned int available;
+	long unsigned int min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_mark_victim {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, int);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	enum lru_list lru;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct node {
+	struct device dev;
+	struct list_head access_list;
+	struct list_head cache_attrs;
+	struct device *cache_dev;
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int nr_scanned;
+	long unsigned int nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	long unsigned int nr_migrated;
+	long unsigned int nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, long unsigned int, long unsigned int, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, long unsigned int, long unsigned int, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+struct vmap_area {
+	long unsigned int va_start;
+	long unsigned int va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		long unsigned int subtree_max_size;
+		struct vm_struct *vm;
+	};
+};
+
+typedef unsigned int pgtbl_mod_mask;
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 43,
+	MEMCG_SOCK = 44,
+	MEMCG_PERCPU_B = 45,
+	MEMCG_VMALLOC = 46,
+	MEMCG_KMEM = 47,
+	MEMCG_ZSWAP_B = 48,
+	MEMCG_ZSWAPPED = 49,
+	MEMCG_NR_STAT = 50,
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+struct trace_event_raw_alloc_vmap_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int size;
+	long unsigned int align;
+	long unsigned int vstart;
+	long unsigned int vend;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_raw_purge_vmap_area_lazy {
+	struct trace_entry ent;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int npurged;
+	char __data[0];
+};
+
+struct trace_event_raw_free_vmap_area_noflush {
+	struct trace_entry ent;
+	long unsigned int va_start;
+	long unsigned int nr_lazy;
+	long unsigned int nr_lazy_max;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alloc_vmap_area {};
+
+struct trace_event_data_offsets_purge_vmap_area_lazy {};
+
+struct trace_event_data_offsets_free_vmap_area_noflush {};
+
+typedef void (*btf_trace_alloc_vmap_area)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_purge_vmap_area_lazy)(void *, long unsigned int, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_free_vmap_area_noflush)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	long unsigned int free;
+	long unsigned int dirty;
+	long unsigned int dirty_min;
+	long unsigned int dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+};
+
+typedef long unsigned int pte_marker;
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	size_t size;
+	struct device *dev;
+	size_t allocation;
+	size_t boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+	unsigned int in_use;
+	unsigned int offset;
+};
+
+struct nodemask_scratch {
+	nodemask_t mask1;
+	nodemask_t mask2;
+};
+
+enum {
+	MPOL_DEFAULT = 0,
+	MPOL_PREFERRED = 1,
+	MPOL_BIND = 2,
+	MPOL_INTERLEAVE = 3,
+	MPOL_LOCAL = 4,
+	MPOL_PREFERRED_MANY = 5,
+	MPOL_MAX = 6,
+};
+
+struct sp_node {
+	struct rb_node nd;
+	long unsigned int start;
+	long unsigned int end;
+	struct mempolicy *policy;
+};
+
+struct shared_policy {
+	struct rb_root root;
+	rwlock_t lock;
+};
+
+struct mempolicy_operations {
+	int (*create)(struct mempolicy *, const nodemask_t *);
+	void (*rebind)(struct mempolicy *, const nodemask_t *);
+};
+
+struct queue_pages {
+	struct list_head *pagelist;
+	long unsigned int flags;
+	nodemask_t *nmask;
+	long unsigned int start;
+	long unsigned int end;
+	struct vm_area_struct *first;
+};
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+struct memory_notify {
+	long unsigned int start_pfn;
+	long unsigned int nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+struct partial_context {
+	struct slab **slab;
+	gfp_t flags;
+	unsigned int orig_size;
+};
+
+struct track {
+	long unsigned int addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	long unsigned int when;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+struct location {
+	depot_stack_handle_t handle;
+	long unsigned int count;
+	long unsigned int addr;
+	long unsigned int waste;
+	long long int sum_time;
+	long int min_time;
+	long int max_time;
+	long int min_pid;
+	long int max_pid;
+	long unsigned int cpus[1];
+	nodemask_t nodes;
+};
+
+struct loc_track {
+	long unsigned int max;
+	long unsigned int count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FREE = 2,
+	M_FULL_NOLIST = 3,
+};
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+struct swap_cgroup_ctrl {
+	struct page **map;
+	long unsigned int length;
+	spinlock_t lock;
+};
+
+struct swap_cgroup {
+	short unsigned int id;
+};
+
+struct zpool {
+	struct zpool_driver *driver;
+	void *pool;
+};
+
+enum zs_mapmode {
+	ZS_MM_RW = 0,
+	ZS_MM_RO = 1,
+	ZS_MM_WO = 2,
+};
+
+struct zs_pool_stats {
+	atomic_long_t pages_compacted;
+};
+
+enum fullness_group {
+	ZS_EMPTY = 0,
+	ZS_ALMOST_EMPTY = 1,
+	ZS_ALMOST_FULL = 2,
+	ZS_FULL = 3,
+	NR_ZS_FULLNESS = 4,
+};
+
+enum class_stat_type {
+	CLASS_EMPTY = 0,
+	CLASS_ALMOST_EMPTY = 1,
+	CLASS_ALMOST_FULL = 2,
+	CLASS_FULL = 3,
+	OBJ_ALLOCATED = 4,
+	OBJ_USED = 5,
+	NR_ZS_STAT_TYPE = 6,
+};
+
+struct zs_size_stat {
+	long unsigned int objs[6];
+};
+
+struct size_class {
+	struct list_head fullness_list[4];
+	int size;
+	int objs_per_zspage;
+	int pages_per_zspage;
+	unsigned int index;
+	struct zs_size_stat stats;
+};
+
+struct link_free {
+	union {
+		long unsigned int next;
+		long unsigned int handle;
+		long unsigned int deferred_handle;
+	};
+};
+
+struct zs_pool {
+	const char *name;
+	struct size_class *size_class[257];
+	struct kmem_cache *handle_cachep;
+	struct kmem_cache *zspage_cachep;
+	atomic_long_t pages_allocated;
+	struct zs_pool_stats stats;
+	struct shrinker shrinker;
+	struct list_head lru;
+	struct zpool *zpool;
+	const struct zpool_ops *zpool_ops;
+	struct work_struct free_work;
+	spinlock_t lock;
+};
+
+struct zspage {
+	struct {
+		unsigned int huge: 1;
+		unsigned int fullness: 2;
+		unsigned int class: 9;
+		unsigned int isolated: 3;
+		unsigned int magic: 8;
+	};
+	unsigned int inuse;
+	unsigned int freeobj;
+	struct page *first_page;
+	struct list_head list;
+	struct list_head lru;
+	bool under_reclaim;
+	struct zs_pool *pool;
+	rwlock_t lock;
+};
+
+struct mapping_area {
+	local_lock_t lock;
+	char *vm_buf;
+	char *vm_addr;
+	enum zs_mapmode vm_mm;
+};
+
+struct zs_compact_control {
+	struct page *s_page;
+	struct page *d_page;
+	int obj_idx;
+};
+
+enum mcopy_atomic_mode {
+	MCOPY_ATOMIC_NORMAL = 0,
+	MCOPY_ATOMIC_ZEROPAGE = 1,
+	MCOPY_ATOMIC_CONTINUE = 2,
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	short unsigned int d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	struct linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+struct dentry_stat_t {
+	long int nr_dentry;
+	long int nr_unused;
+	long int age_limit;
+	long int want_pages;
+	long int nr_negative;
+	long int dummy;
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long int found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+struct decrypt_bh_ctx {
+	struct work_struct work;
+	struct buffer_head *bh;
+};
+
+struct bh_lru {
+	struct buffer_head *bhs[16];
+};
+
+struct bh_accounting {
+	int nr;
+	int ratelimit;
+};
+
+struct fanotify_event_metadata {
+	__u32 event_len;
+	__u8 vers;
+	__u8 reserved;
+	__u16 metadata_len;
+	__u64 mask;
+	__s32 fd;
+	__s32 pid;
+};
+
+struct fanotify_event_info_header {
+	__u8 info_type;
+	__u8 pad;
+	__u16 len;
+};
+
+struct fanotify_event_info_fid {
+	struct fanotify_event_info_header hdr;
+	__kernel_fsid_t fsid;
+	unsigned char handle[0];
+};
+
+struct fanotify_event_info_pidfd {
+	struct fanotify_event_info_header hdr;
+	__s32 pidfd;
+};
+
+struct fanotify_event_info_error {
+	struct fanotify_event_info_header hdr;
+	__s32 error;
+	__u32 error_count;
+};
+
+struct fanotify_response {
+	__s32 fd;
+	__u32 response;
+};
+
+struct kstatfs {
+	long int f_type;
+	long int f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long int f_namelen;
+	long int f_frsize;
+	long int f_flags;
+	long int f_spare[4];
+};
+
+enum {
+	FAN_EVENT_INIT = 0,
+	FAN_EVENT_REPORTED = 1,
+	FAN_EVENT_ANSWERED = 2,
+	FAN_EVENT_CANCELED = 3,
+};
+
+struct fanotify_fh {
+	u8 type;
+	u8 len;
+	u8 flags;
+	u8 pad;
+	unsigned char buf[0];
+};
+
+struct fanotify_info {
+	u8 dir_fh_totlen;
+	u8 dir2_fh_totlen;
+	u8 file_fh_totlen;
+	u8 name_len;
+	u8 name2_len;
+	u8 pad[3];
+	unsigned char buf[0];
+};
+
+enum fanotify_event_type {
+	FANOTIFY_EVENT_TYPE_FID = 0,
+	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
+	FANOTIFY_EVENT_TYPE_PATH = 2,
+	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
+	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
+	FANOTIFY_EVENT_TYPE_FS_ERROR = 5,
+	__FANOTIFY_EVENT_TYPE_NUM = 6,
+};
+
+struct fanotify_event {
+	struct fsnotify_event fse;
+	struct hlist_node merge_list;
+	u32 mask;
+	struct {
+		unsigned int type: 3;
+		unsigned int hash: 29;
+	};
+	struct pid *pid;
+};
+
+struct fanotify_fid_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[12];
+	};
+};
+
+struct fanotify_name_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct fanotify_info info;
+};
+
+struct fanotify_error_event {
+	struct fanotify_event fae;
+	s32 error;
+	u32 err_count;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[128];
+	};
+};
+
+struct fanotify_path_event {
+	struct fanotify_event fae;
+	struct path path;
+};
+
+struct fanotify_perm_event {
+	struct fanotify_event fae;
+	struct path path;
+	short unsigned int response;
+	short unsigned int state;
+	int fd;
+};
+
+struct eventfd_ctx {
+	struct kref kref;
+	wait_queue_head_t wqh;
+	__u64 count;
+	unsigned int flags;
+	int id;
+};
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+struct fscrypt_name {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	u32 hash;
+	u32 minor_hash;
+	struct fscrypt_str crypto_buf;
+	bool is_nokey_name;
+};
+
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[32];
+};
+
+struct fscrypt_symlink_data {
+	__le16 len;
+	char encrypted_path[1];
+} __attribute__((packed));
+
+struct fscrypt_get_policy_ex_arg {
+	__u64 policy_size;
+	union {
+		__u8 version;
+		struct fscrypt_policy_v1 v1;
+		struct fscrypt_policy_v2 v2;
+	} policy;
+};
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+struct ahash_request;
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	void *__ctx[0];
+};
+
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
+struct flock64 {
+	short int l_type;
+	short int l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	long unsigned int fl_break_time;
+	long unsigned int fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+struct core_vma_metadata;
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct file *file;
+	long unsigned int limit;
+	long unsigned int mm_flags;
+	int cpu;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct core_vma_metadata {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int flags;
+	long unsigned int dump_size;
+	long unsigned int pgoff;
+	struct file *file;
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_writepage_ctx;
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct iomap_page {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t uptodate_lock;
+	long unsigned int uptodate[0];
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vma_iterator iter;
+	struct mempolicy *task_mempolicy;
+};
+
+struct mem_size_stats {
+	long unsigned int resident;
+	long unsigned int shared_clean;
+	long unsigned int shared_dirty;
+	long unsigned int private_clean;
+	long unsigned int private_dirty;
+	long unsigned int referenced;
+	long unsigned int anonymous;
+	long unsigned int lazyfree;
+	long unsigned int anonymous_thp;
+	long unsigned int shmem_thp;
+	long unsigned int file_thp;
+	long unsigned int swap;
+	long unsigned int shared_hugetlb;
+	long unsigned int private_hugetlb;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct numa_maps {
+	long unsigned int pages;
+	long unsigned int anon;
+	long unsigned int active;
+	long unsigned int writeback;
+	long unsigned int mapcount_max;
+	long unsigned int dirty;
+	long unsigned int swapcache;
+	long unsigned int node[64];
+};
+
+struct numa_maps_private {
+	struct proc_maps_private proc_maps;
+	struct numa_maps md;
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+	unsigned int nr_mmapped;
+	unsigned int nr_to_release;
+};
+
+struct kernfs_super_info {
+	struct super_block *sb;
+	struct kernfs_root *root;
+	const void *ns;
+	struct list_head node;
+};
+
+struct configfs_buffer {
+	size_t count;
+	loff_t pos;
+	char *page;
+	struct configfs_item_operations *ops;
+	struct mutex mutex;
+	int needs_read_fill;
+	bool read_in_progress;
+	bool write_in_progress;
+	char *bin_buffer;
+	int bin_buffer_size;
+	int cb_max_size;
+	struct config_item *item;
+	struct module *owner;
+	union {
+		struct configfs_attribute *attr;
+		struct configfs_bin_attribute *bin_attr;
+	};
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+enum ramfs_param {
+	Opt_mode = 0,
+};
+
+struct utf8data;
+
+struct utf8data_table;
+
+struct unicode_map {
+	unsigned int version;
+	const struct utf8data *ntab[2];
+	const struct utf8data_table *tables;
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+struct utf8data_table {
+	const unsigned int *utf8agetab;
+	int utf8agetab_size;
+	const struct utf8data *utf8nfdicfdata;
+	int utf8nfdicfdata_size;
+	const struct utf8data *utf8nfdidata;
+	int utf8nfdidata_size;
+	const unsigned char *utf8data;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+struct args_protover {
+	__u32 version;
+};
+
+struct args_protosubver {
+	__u32 sub_version;
+};
+
+struct args_openmount {
+	__u32 devid;
+};
+
+struct args_ready {
+	__u32 token;
+};
+
+struct args_fail {
+	__u32 token;
+	__s32 status;
+};
+
+struct args_setpipefd {
+	__s32 pipefd;
+};
+
+struct args_timeout {
+	__u64 timeout;
+};
+
+struct args_requester {
+	__u32 uid;
+	__u32 gid;
+};
+
+struct args_expire {
+	__u32 how;
+};
+
+struct args_askumount {
+	__u32 may_umount;
+};
+
+struct args_in {
+	__u32 type;
+};
+
+struct args_out {
+	__u32 devid;
+	__u32 magic;
+};
+
+struct args_ismountpoint {
+	union {
+		struct args_in in;
+		struct args_out out;
+	};
+};
+
+struct autofs_dev_ioctl {
+	__u32 ver_major;
+	__u32 ver_minor;
+	__u32 size;
+	__s32 ioctlfd;
+	union {
+		struct args_protover protover;
+		struct args_protosubver protosubver;
+		struct args_openmount openmount;
+		struct args_ready ready;
+		struct args_fail fail;
+		struct args_setpipefd setpipefd;
+		struct args_timeout timeout;
+		struct args_requester requester;
+		struct args_expire expire;
+		struct args_askumount askumount;
+		struct args_ismountpoint ismountpoint;
+	};
+	char path[0];
+};
+
+enum {
+	AUTOFS_DEV_IOCTL_VERSION_CMD = 113,
+	AUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,
+	AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,
+	AUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,
+	AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,
+	AUTOFS_DEV_IOCTL_READY_CMD = 118,
+	AUTOFS_DEV_IOCTL_FAIL_CMD = 119,
+	AUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,
+	AUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,
+	AUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,
+	AUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,
+	AUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,
+	AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,
+	AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,
+};
+
+typedef int (*ioctl_fn)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct ipc_proc_iface {
+	const char *path;
+	const char *header;
+	int ids;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct ipc_proc_iter {
+	struct ipc_namespace *ns;
+	struct pid_namespace *pid_ns;
+	struct ipc_proc_iface *iface;
+};
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long int m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct mqueue_fs_context {
+	struct ipc_namespace *ipc_ns;
+	bool newns;
+};
+
+struct posix_msg_tree_node {
+	struct rb_node rb_node;
+	struct list_head msg_list;
+	int priority;
+};
+
+struct ext_wait_queue {
+	struct task_struct *task;
+	struct list_head list;
+	struct msg_msg *msg;
+	int state;
+};
+
+struct mqueue_inode_info {
+	spinlock_t lock;
+	struct inode vfs_inode;
+	wait_queue_head_t wait_q;
+	struct rb_root msg_tree;
+	struct rb_node *msg_tree_rightmost;
+	struct posix_msg_tree_node *node_cache;
+	struct mq_attr attr;
+	struct sigevent notify;
+	struct pid *notify_owner;
+	u32 notify_self_exec_id;
+	struct user_namespace *notify_user_ns;
+	struct ucounts *ucounts;
+	struct sock *notify_sock;
+	struct sk_buff *notify_cookie;
+	struct ext_wait_queue e_wait_q[2];
+	long unsigned int qsize;
+};
+
+struct assoc_array_edit;
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_kpp {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	struct crypto_alg base;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	short unsigned int datalen;
+	long: 48;
+	char data[0];
+};
+
+struct keyctl_dh_params {
+	union {
+		__s32 private;
+		__s32 priv;
+	};
+	__s32 prime;
+	__s32 base;
+};
+
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
+};
+
+struct dh_completion {
+	struct completion completion;
+	int err;
+};
+
+enum sctp_endpoint_type {
+	SCTP_EP_TYPE_SOCKET = 0,
+	SCTP_EP_TYPE_ASSOCIATION = 1,
+};
+
+struct sctp_chunk;
+
+struct sctp_inq {
+	struct list_head in_chunk_list;
+	struct sctp_chunk *in_progress;
+	struct work_struct immediate;
+};
+
+struct sctp_bind_addr {
+	__u16 port;
+	struct list_head address_list;
+};
+
+struct sctp_ep_common {
+	enum sctp_endpoint_type type;
+	refcount_t refcnt;
+	bool dead;
+	struct sock *sk;
+	struct net *net;
+	struct sctp_inq inqueue;
+	struct sctp_bind_addr bind_addr;
+};
+
+typedef __s32 sctp_assoc_t;
+
+union sctp_addr {
+	struct sockaddr_in v4;
+	struct sockaddr_in6 v6;
+	struct sockaddr sa;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+	__u8 params[0];
+};
+
+struct sctp_init_chunk {
+	struct sctp_chunkhdr chunk_hdr;
+	struct sctp_inithdr init_hdr;
+};
+
+struct sctp_cookie {
+	__u32 my_vtag;
+	__u32 peer_vtag;
+	__u32 my_ttag;
+	__u32 peer_ttag;
+	ktime_t expiration;
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u32 initial_tsn;
+	union sctp_addr peer_addr;
+	__u16 my_port;
+	__u8 prsctp_capable;
+	__u8 padding;
+	__u32 adaptation_ind;
+	__u8 auth_random[36];
+	__u8 auth_hmacs[10];
+	__u8 auth_chunks[20];
+	__u32 raw_addr_list_len;
+	struct sctp_init_chunk peer_init[0];
+};
+
+struct sctp_tsnmap {
+	long unsigned int *tsn_map;
+	__u32 base_tsn;
+	__u32 cumulative_tsn_ack_point;
+	__u32 max_tsn_seen;
+	__u16 len;
+	__u16 pending_data;
+	__u16 num_dup_tsns;
+	__be32 dup_tsns[16];
+};
+
+struct sctp_inithdr_host {
+	__u32 init_tag;
+	__u32 a_rwnd;
+	__u16 num_outbound_streams;
+	__u16 num_inbound_streams;
+	__u32 initial_tsn;
+};
+
+enum sctp_state {
+	SCTP_STATE_CLOSED = 0,
+	SCTP_STATE_COOKIE_WAIT = 1,
+	SCTP_STATE_COOKIE_ECHOED = 2,
+	SCTP_STATE_ESTABLISHED = 3,
+	SCTP_STATE_SHUTDOWN_PENDING = 4,
+	SCTP_STATE_SHUTDOWN_SENT = 5,
+	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
+	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+struct sctp_stream_out_ext;
+
+struct sctp_stream_out {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	struct sctp_stream_out_ext *ext;
+	__u8 state;
+};
+
+struct sctp_stream_in {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	__u32 fsn;
+	__u32 fsn_uo;
+	char pd_mode;
+	char pd_mode_uo;
+};
+
+struct sctp_stream_interleave;
+
+struct sctp_stream {
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_out type[0];
+	} out;
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_in type[0];
+	} in;
+	__u16 outcnt;
+	__u16 incnt;
+	struct sctp_stream_out *out_curr;
+	union {
+		struct {
+			struct list_head prio_list;
+		};
+		struct {
+			struct list_head rr_list;
+			struct sctp_stream_out_ext *rr_next;
+		};
+	};
+	struct sctp_stream_interleave *si;
+};
+
+struct sctp_sched_ops;
+
+struct sctp_outq {
+	struct sctp_association *asoc;
+	struct list_head out_chunk_list;
+	struct sctp_sched_ops *sched;
+	unsigned int out_qlen;
+	unsigned int error;
+	struct list_head control_chunk_list;
+	struct list_head sacked;
+	struct list_head retransmit;
+	struct list_head abandoned;
+	__u32 outstanding_bytes;
+	char fast_rtx;
+	char cork;
+};
+
+struct sctp_ulpq {
+	char pd_mode;
+	struct sctp_association *asoc;
+	struct sk_buff_head reasm;
+	struct sk_buff_head reasm_uo;
+	struct sk_buff_head lobby;
+};
+
+struct sctp_priv_assoc_stats {
+	struct __kernel_sockaddr_storage obs_rto_ipaddr;
+	__u64 max_obs_rto;
+	__u64 isacks;
+	__u64 osacks;
+	__u64 opackets;
+	__u64 ipackets;
+	__u64 rtxchunks;
+	__u64 outofseqtsns;
+	__u64 idupchunks;
+	__u64 gapcnt;
+	__u64 ouodchunks;
+	__u64 iuodchunks;
+	__u64 oodchunks;
+	__u64 iodchunks;
+	__u64 octrlchunks;
+	__u64 ictrlchunks;
+};
+
+struct sctp_endpoint;
+
+struct sctp_transport;
+
+struct sctp_random_param;
+
+struct sctp_chunks_param;
+
+struct sctp_hmac_algo_param;
+
+struct sctp_auth_bytes;
+
+struct sctp_shared_key;
+
+struct sctp_association {
+	struct sctp_ep_common base;
+	struct list_head asocs;
+	sctp_assoc_t assoc_id;
+	struct sctp_endpoint *ep;
+	struct sctp_cookie c;
+	struct {
+		struct list_head transport_addr_list;
+		__u32 rwnd;
+		__u16 transport_count;
+		__u16 port;
+		struct sctp_transport *primary_path;
+		union sctp_addr primary_addr;
+		struct sctp_transport *active_path;
+		struct sctp_transport *retran_path;
+		struct sctp_transport *last_sent_to;
+		struct sctp_transport *last_data_from;
+		struct sctp_tsnmap tsn_map;
+		__be16 addip_disabled_mask;
+		__u16 ecn_capable: 1;
+		__u16 ipv4_address: 1;
+		__u16 ipv6_address: 1;
+		__u16 hostname_address: 1;
+		__u16 asconf_capable: 1;
+		__u16 prsctp_capable: 1;
+		__u16 reconf_capable: 1;
+		__u16 intl_capable: 1;
+		__u16 auth_capable: 1;
+		__u16 sack_needed: 1;
+		__u16 sack_generation: 1;
+		__u16 zero_window_announced: 1;
+		__u32 sack_cnt;
+		__u32 adaptation_ind;
+		struct sctp_inithdr_host i;
+		void *cookie;
+		int cookie_len;
+		__u32 addip_serial;
+		struct sctp_random_param *peer_random;
+		struct sctp_chunks_param *peer_chunks;
+		struct sctp_hmac_algo_param *peer_hmacs;
+	} peer;
+	enum sctp_state state;
+	int overall_error_count;
+	ktime_t cookie_life;
+	long unsigned int rto_initial;
+	long unsigned int rto_max;
+	long unsigned int rto_min;
+	int max_burst;
+	int max_retrans;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u16 max_init_attempts;
+	__u16 init_retries;
+	long unsigned int max_init_timeo;
+	long unsigned int hbinterval;
+	long unsigned int probe_interval;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u8 pmtu_pending;
+	__u32 pathmtu;
+	__u32 param_flags;
+	__u32 sackfreq;
+	long unsigned int sackdelay;
+	long unsigned int timeouts[12];
+	struct timer_list timers[12];
+	struct sctp_transport *shutdown_last_sent_to;
+	struct sctp_transport *init_last_sent_to;
+	int shutdown_retries;
+	__u32 next_tsn;
+	__u32 ctsn_ack_point;
+	__u32 adv_peer_ack_point;
+	__u32 highest_sacked;
+	__u32 fast_recovery_exit;
+	__u8 fast_recovery;
+	__u16 unack_data;
+	__u32 rtx_data_chunks;
+	__u32 rwnd;
+	__u32 a_rwnd;
+	__u32 rwnd_over;
+	__u32 rwnd_press;
+	int sndbuf_used;
+	atomic_t rmem_alloc;
+	wait_queue_head_t wait;
+	__u32 frag_point;
+	__u32 user_frag;
+	int init_err_counter;
+	int init_cycle;
+	__u16 default_stream;
+	__u16 default_flags;
+	__u32 default_ppid;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	struct sctp_stream stream;
+	struct sctp_outq outqueue;
+	struct sctp_ulpq ulpq;
+	__u32 last_ecne_tsn;
+	__u32 last_cwr_tsn;
+	int numduptsns;
+	struct sctp_chunk *addip_last_asconf;
+	struct list_head asconf_ack_list;
+	struct list_head addip_chunk_list;
+	__u32 addip_serial;
+	int src_out_of_asoc_ok;
+	union sctp_addr *asconf_addr_del_pending;
+	struct sctp_transport *new_transport;
+	struct list_head endpoint_shared_keys;
+	struct sctp_auth_bytes *asoc_shared_key;
+	struct sctp_shared_key *shkey;
+	__u16 default_hmac_id;
+	__u16 active_key_id;
+	__u8 need_ecne: 1;
+	__u8 temp: 1;
+	__u8 pf_expose: 2;
+	__u8 force_delay: 1;
+	__u8 strreset_enable;
+	__u8 strreset_outstanding;
+	__u32 strreset_outseq;
+	__u32 strreset_inseq;
+	__u32 strreset_result[2];
+	struct sctp_chunk *strreset_chunk;
+	struct sctp_priv_assoc_stats stats;
+	int sent_cnt_removable;
+	__u16 subscribe;
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	u32 secid;
+	u32 peer_secid;
+	struct callback_head rcu;
+};
+
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+};
+
+struct nf_hook_ops {
+	nf_hookfn *hook;
+	struct net_device *dev;
+	void *priv;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
+	unsigned int hooknum;
+	int priority;
+};
+
+enum nf_ip_hook_priorities {
+	NF_IP_PRI_FIRST = -2147483648,
+	NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
+	NF_IP_PRI_CONNTRACK_DEFRAG = -400,
+	NF_IP_PRI_RAW = -300,
+	NF_IP_PRI_SELINUX_FIRST = -225,
+	NF_IP_PRI_CONNTRACK = -200,
+	NF_IP_PRI_MANGLE = -150,
+	NF_IP_PRI_NAT_DST = -100,
+	NF_IP_PRI_FILTER = 0,
+	NF_IP_PRI_SECURITY = 50,
+	NF_IP_PRI_NAT_SRC = 100,
+	NF_IP_PRI_SELINUX_LAST = 225,
+	NF_IP_PRI_CONNTRACK_HELPER = 300,
+	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
+	NF_IP_PRI_LAST = 2147483647,
+};
+
+enum nf_ip6_hook_priorities {
+	NF_IP6_PRI_FIRST = -2147483648,
+	NF_IP6_PRI_RAW_BEFORE_DEFRAG = -450,
+	NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
+	NF_IP6_PRI_RAW = -300,
+	NF_IP6_PRI_SELINUX_FIRST = -225,
+	NF_IP6_PRI_CONNTRACK = -200,
+	NF_IP6_PRI_MANGLE = -150,
+	NF_IP6_PRI_NAT_DST = -100,
+	NF_IP6_PRI_FILTER = 0,
+	NF_IP6_PRI_SECURITY = 50,
+	NF_IP6_PRI_NAT_SRC = 100,
+	NF_IP6_PRI_SELINUX_LAST = 225,
+	NF_IP6_PRI_CONNTRACK_HELPER = 300,
+	NF_IP6_PRI_LAST = 2147483647,
+};
+
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
+};
+
+struct tty_file_private {
+	struct tty_struct *tty;
+	struct file *file;
+	struct list_head list;
+};
+
+struct dccp_hdr {
+	__be16 dccph_sport;
+	__be16 dccph_dport;
+	__u8 dccph_doff;
+	__u8 dccph_cscov: 4;
+	__u8 dccph_ccval: 4;
+	__sum16 dccph_checksum;
+	__u8 dccph_x: 1;
+	__u8 dccph_type: 4;
+	__u8 dccph_reserved: 3;
+	__u8 dccph_seq2;
+	__be16 dccph_seq;
+};
+
+enum dccp_state {
+	DCCP_OPEN = 1,
+	DCCP_REQUESTING = 2,
+	DCCP_LISTEN = 10,
+	DCCP_RESPOND = 3,
+	DCCP_ACTIVE_CLOSEREQ = 4,
+	DCCP_PASSIVE_CLOSE = 8,
+	DCCP_CLOSING = 11,
+	DCCP_TIME_WAIT = 6,
+	DCCP_CLOSED = 7,
+	DCCP_NEW_SYN_RECV = 12,
+	DCCP_PARTOPEN = 13,
+	DCCP_PASSIVE_CLOSEREQ = 14,
+	DCCP_MAX_STATES = 15,
+};
+
+enum sctp_msg_flags {
+	MSG_NOTIFICATION = 32768,
+};
+
+struct sctp_initmsg {
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u16 sinit_max_attempts;
+	__u16 sinit_max_init_timeo;
+};
+
+struct sctp_sndrcvinfo {
+	__u16 sinfo_stream;
+	__u16 sinfo_ssn;
+	__u16 sinfo_flags;
+	__u32 sinfo_ppid;
+	__u32 sinfo_context;
+	__u32 sinfo_timetolive;
+	__u32 sinfo_tsn;
+	__u32 sinfo_cumtsn;
+	sctp_assoc_t sinfo_assoc_id;
+};
+
+struct sctp_rtoinfo {
+	sctp_assoc_t srto_assoc_id;
+	__u32 srto_initial;
+	__u32 srto_max;
+	__u32 srto_min;
+};
+
+struct sctp_assocparams {
+	sctp_assoc_t sasoc_assoc_id;
+	__u16 sasoc_asocmaxrxt;
+	__u16 sasoc_number_peer_destinations;
+	__u32 sasoc_peer_rwnd;
+	__u32 sasoc_local_rwnd;
+	__u32 sasoc_cookie_life;
+};
+
+struct sctp_paddrparams {
+	sctp_assoc_t spp_assoc_id;
+	struct __kernel_sockaddr_storage spp_address;
+	__u32 spp_hbinterval;
+	__u16 spp_pathmaxrxt;
+	__u32 spp_pathmtu;
+	__u32 spp_sackdelay;
+	__u32 spp_flags;
+	__u32 spp_ipv6_flowlabel;
+	__u8 spp_dscp;
+	char: 8;
+} __attribute__((packed));
+
+struct sctphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 vtag;
+	__le32 checksum;
+};
+
+enum sctp_cid {
+	SCTP_CID_DATA = 0,
+	SCTP_CID_INIT = 1,
+	SCTP_CID_INIT_ACK = 2,
+	SCTP_CID_SACK = 3,
+	SCTP_CID_HEARTBEAT = 4,
+	SCTP_CID_HEARTBEAT_ACK = 5,
+	SCTP_CID_ABORT = 6,
+	SCTP_CID_SHUTDOWN = 7,
+	SCTP_CID_SHUTDOWN_ACK = 8,
+	SCTP_CID_ERROR = 9,
+	SCTP_CID_COOKIE_ECHO = 10,
+	SCTP_CID_COOKIE_ACK = 11,
+	SCTP_CID_ECN_ECNE = 12,
+	SCTP_CID_ECN_CWR = 13,
+	SCTP_CID_SHUTDOWN_COMPLETE = 14,
+	SCTP_CID_AUTH = 15,
+	SCTP_CID_I_DATA = 64,
+	SCTP_CID_FWD_TSN = 192,
+	SCTP_CID_ASCONF = 193,
+	SCTP_CID_I_FWD_TSN = 194,
+	SCTP_CID_ASCONF_ACK = 128,
+	SCTP_CID_RECONF = 130,
+	SCTP_CID_PAD = 132,
+};
+
+struct sctp_paramhdr {
+	__be16 type;
+	__be16 length;
+};
+
+enum sctp_param {
+	SCTP_PARAM_HEARTBEAT_INFO = 256,
+	SCTP_PARAM_IPV4_ADDRESS = 1280,
+	SCTP_PARAM_IPV6_ADDRESS = 1536,
+	SCTP_PARAM_STATE_COOKIE = 1792,
+	SCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,
+	SCTP_PARAM_COOKIE_PRESERVATIVE = 2304,
+	SCTP_PARAM_HOST_NAME_ADDRESS = 2816,
+	SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,
+	SCTP_PARAM_ECN_CAPABLE = 128,
+	SCTP_PARAM_RANDOM = 640,
+	SCTP_PARAM_CHUNKS = 896,
+	SCTP_PARAM_HMAC_ALGO = 1152,
+	SCTP_PARAM_SUPPORTED_EXT = 2176,
+	SCTP_PARAM_FWD_TSN_SUPPORT = 192,
+	SCTP_PARAM_ADD_IP = 448,
+	SCTP_PARAM_DEL_IP = 704,
+	SCTP_PARAM_ERR_CAUSE = 960,
+	SCTP_PARAM_SET_PRIMARY = 1216,
+	SCTP_PARAM_SUCCESS_REPORT = 1472,
+	SCTP_PARAM_ADAPTATION_LAYER_IND = 1728,
+	SCTP_PARAM_RESET_OUT_REQUEST = 3328,
+	SCTP_PARAM_RESET_IN_REQUEST = 3584,
+	SCTP_PARAM_RESET_TSN_REQUEST = 3840,
+	SCTP_PARAM_RESET_RESPONSE = 4096,
+	SCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,
+	SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
+};
+
+struct sctp_datahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 ssn;
+	__u32 ppid;
+	__u8 payload[0];
+};
+
+struct sctp_idatahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 reserved;
+	__be32 mid;
+	union {
+		__u32 ppid;
+		__be32 fsn;
+	};
+	__u8 payload[0];
+};
+
+struct sctp_ipv4addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in_addr addr;
+};
+
+struct sctp_ipv6addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in6_addr addr;
+};
+
+struct sctp_cookie_preserve_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 lifespan_increment;
+};
+
+struct sctp_hostname_param {
+	struct sctp_paramhdr param_hdr;
+	uint8_t hostname[0];
+};
+
+struct sctp_supported_addrs_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 types[0];
+};
+
+struct sctp_adaptation_ind_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 adaptation_ind;
+};
+
+struct sctp_supported_ext_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_random_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 random_val[0];
+};
+
+struct sctp_chunks_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_hmac_algo_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 hmac_ids[0];
+};
+
+struct sctp_cookie_param {
+	struct sctp_paramhdr p;
+	__u8 body[0];
+};
+
+struct sctp_gap_ack_block {
+	__be16 start;
+	__be16 end;
+};
+
+union sctp_sack_variable {
+	struct sctp_gap_ack_block gab;
+	__be32 dup;
+};
+
+struct sctp_sackhdr {
+	__be32 cum_tsn_ack;
+	__be32 a_rwnd;
+	__be16 num_gap_ack_blocks;
+	__be16 num_dup_tsns;
+	union sctp_sack_variable variable[0];
+};
+
+struct sctp_heartbeathdr {
+	struct sctp_paramhdr info;
+};
+
+struct sctp_shutdownhdr {
+	__be32 cum_tsn_ack;
+};
+
+struct sctp_errhdr {
+	__be16 cause;
+	__be16 length;
+	__u8 variable[0];
+};
+
+struct sctp_ecnehdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_cwrhdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_fwdtsn_skip {
+	__be16 stream;
+	__be16 ssn;
+};
+
+struct sctp_fwdtsn_hdr {
+	__be32 new_cum_tsn;
+	struct sctp_fwdtsn_skip skip[0];
+};
+
+struct sctp_ifwdtsn_skip {
+	__be16 stream;
+	__u8 reserved;
+	__u8 flags;
+	__be32 mid;
+};
+
+struct sctp_ifwdtsn_hdr {
+	__be32 new_cum_tsn;
+	struct sctp_ifwdtsn_skip skip[0];
+};
+
+struct sctp_addip_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 crr_id;
+};
+
+struct sctp_addiphdr {
+	__be32 serial;
+	__u8 params[0];
+};
+
+struct sctp_authhdr {
+	__be16 shkey_id;
+	__be16 hmac_id;
+	__u8 hmac[0];
+};
+
+struct sctp_auth_bytes {
+	refcount_t refcnt;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct sctp_shared_key {
+	struct list_head key_list;
+	struct sctp_auth_bytes *key;
+	refcount_t refcnt;
+	__u16 key_id;
+	__u8 deactivated;
+};
+
+enum {
+	SCTP_MAX_STREAM = 65535,
+};
+
+enum sctp_event_timeout {
+	SCTP_EVENT_TIMEOUT_NONE = 0,
+	SCTP_EVENT_TIMEOUT_T1_COOKIE = 1,
+	SCTP_EVENT_TIMEOUT_T1_INIT = 2,
+	SCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,
+	SCTP_EVENT_TIMEOUT_T3_RTX = 4,
+	SCTP_EVENT_TIMEOUT_T4_RTO = 5,
+	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
+	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
+	SCTP_EVENT_TIMEOUT_RECONF = 8,
+	SCTP_EVENT_TIMEOUT_PROBE = 9,
+	SCTP_EVENT_TIMEOUT_SACK = 10,
+	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 11,
+};
+
+enum {
+	SCTP_MAX_DUP_TSNS = 16,
+};
+
+enum sctp_scope {
+	SCTP_SCOPE_GLOBAL = 0,
+	SCTP_SCOPE_PRIVATE = 1,
+	SCTP_SCOPE_LINK = 2,
+	SCTP_SCOPE_LOOPBACK = 3,
+	SCTP_SCOPE_UNUSABLE = 4,
+};
+
+enum {
+	SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
+	SCTP_AUTH_HMAC_ID_SHA1 = 1,
+	SCTP_AUTH_HMAC_ID_RESERVED_2 = 2,
+	SCTP_AUTH_HMAC_ID_SHA256 = 3,
+	__SCTP_AUTH_HMAC_MAX = 4,
+};
+
+struct sctp_ulpevent {
+	struct sctp_association *asoc;
+	struct sctp_chunk *chunk;
+	unsigned int rmem_len;
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	union {
+		__u32 ppid;
+		__u32 fsn;
+	};
+	__u32 tsn;
+	__u32 cumtsn;
+	__u16 stream;
+	__u16 flags;
+	__u16 msg_flags;
+} __attribute__((packed));
+
+union sctp_addr_param;
+
+union sctp_params {
+	void *v;
+	struct sctp_paramhdr *p;
+	struct sctp_cookie_preserve_param *life;
+	struct sctp_hostname_param *dns;
+	struct sctp_cookie_param *cookie;
+	struct sctp_supported_addrs_param *sat;
+	struct sctp_ipv4addr_param *v4;
+	struct sctp_ipv6addr_param *v6;
+	union sctp_addr_param *addr;
+	struct sctp_adaptation_ind_param *aind;
+	struct sctp_supported_ext_param *ext;
+	struct sctp_random_param *random;
+	struct sctp_chunks_param *chunks;
+	struct sctp_hmac_algo_param *hmac_algo;
+	struct sctp_addip_param *addip;
+};
+
+struct sctp_sender_hb_info;
+
+struct sctp_signed_cookie;
+
+struct sctp_datamsg;
+
+struct sctp_chunk {
+	struct list_head list;
+	refcount_t refcnt;
+	int sent_count;
+	union {
+		struct list_head transmitted_list;
+		struct list_head stream_list;
+	};
+	struct list_head frag_list;
+	struct sk_buff *skb;
+	union {
+		struct sk_buff *head_skb;
+		struct sctp_shared_key *shkey;
+	};
+	union sctp_params param_hdr;
+	union {
+		__u8 *v;
+		struct sctp_datahdr *data_hdr;
+		struct sctp_inithdr *init_hdr;
+		struct sctp_sackhdr *sack_hdr;
+		struct sctp_heartbeathdr *hb_hdr;
+		struct sctp_sender_hb_info *hbs_hdr;
+		struct sctp_shutdownhdr *shutdown_hdr;
+		struct sctp_signed_cookie *cookie_hdr;
+		struct sctp_ecnehdr *ecne_hdr;
+		struct sctp_cwrhdr *ecn_cwr_hdr;
+		struct sctp_errhdr *err_hdr;
+		struct sctp_addiphdr *addip_hdr;
+		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
+		struct sctp_authhdr *auth_hdr;
+		struct sctp_idatahdr *idata_hdr;
+		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
+	} subh;
+	__u8 *chunk_end;
+	struct sctp_chunkhdr *chunk_hdr;
+	struct sctphdr *sctp_hdr;
+	struct sctp_sndrcvinfo sinfo;
+	struct sctp_association *asoc;
+	struct sctp_ep_common *rcvr;
+	long unsigned int sent_at;
+	union sctp_addr source;
+	union sctp_addr dest;
+	struct sctp_datamsg *msg;
+	struct sctp_transport *transport;
+	struct sk_buff *auth_chunk;
+	__u16 rtt_in_progress: 1;
+	__u16 has_tsn: 1;
+	__u16 has_ssn: 1;
+	__u16 singleton: 1;
+	__u16 end_of_packet: 1;
+	__u16 ecn_ce_done: 1;
+	__u16 pdiscard: 1;
+	__u16 tsn_gap_acked: 1;
+	__u16 data_accepted: 1;
+	__u16 auth: 1;
+	__u16 has_asconf: 1;
+	__u16 pmtu_probe: 1;
+	__u16 tsn_missing_report: 2;
+	__u16 fast_retransmit: 2;
+};
+
+struct sctp_stream_interleave {
+	__u16 data_chunk_len;
+	__u16 ftsn_chunk_len;
+	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
+	void (*assign_number)(struct sctp_chunk *);
+	bool (*validate_data)(struct sctp_chunk *);
+	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
+	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	void (*start_pd)(struct sctp_ulpq *, gfp_t);
+	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
+	void (*generate_ftsn)(struct sctp_outq *, __u32);
+	bool (*validate_ftsn)(struct sctp_chunk *);
+	void (*report_ftsn)(struct sctp_ulpq *, __u32);
+	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
+};
+
+struct sctp_bind_bucket {
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct hlist_node node;
+	struct hlist_head owner;
+	struct net *net;
+};
+
+enum sctp_socket_type {
+	SCTP_SOCKET_UDP = 0,
+	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
+	SCTP_SOCKET_TCP = 2,
+};
+
+struct crypto_shash;
+
+struct sctp_pf;
+
+struct sctp_sock {
+	struct inet_sock inet;
+	enum sctp_socket_type type;
+	int: 32;
+	struct sctp_pf *pf;
+	struct crypto_shash *hmac;
+	char *sctp_hmac_alg;
+	struct sctp_endpoint *ep;
+	struct sctp_bind_bucket *bind_hash;
+	__u16 default_stream;
+	short: 16;
+	__u32 default_ppid;
+	__u16 default_flags;
+	short: 16;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	int max_burst;
+	__u32 hbinterval;
+	__u32 probe_interval;
+	__be16 udp_port;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	short: 16;
+	__u32 flowlabel;
+	__u8 dscp;
+	char: 8;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	short: 16;
+	__u32 pathmtu;
+	__u32 sackdelay;
+	__u32 sackfreq;
+	__u32 param_flags;
+	__u32 default_ss;
+	struct sctp_rtoinfo rtoinfo;
+	struct sctp_paddrparams paddrparam;
+	struct sctp_assocparams assocparams;
+	__u16 subscribe;
+	struct sctp_initmsg initmsg;
+	short: 16;
+	int user_frag;
+	__u32 autoclose;
+	__u32 adaptation_ind;
+	__u32 pd_point;
+	__u16 nodelay: 1;
+	__u16 pf_expose: 2;
+	__u16 reuse: 1;
+	__u16 disable_fragments: 1;
+	__u16 v4mapped: 1;
+	__u16 frag_interleave: 1;
+	__u16 recvrcvinfo: 1;
+	__u16 recvnxtinfo: 1;
+	__u16 data_ready_signalled: 1;
+	int: 22;
+	atomic_t pd_mode;
+	struct sk_buff_head pd_lobby;
+	struct list_head auto_asconf_list;
+	int do_auto_asconf;
+	int: 32;
+} __attribute__((packed));
+
+struct sctp_af;
+
+struct sctp_pf {
+	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
+	void (*skb_msgname)(struct sk_buff *, char *, int *);
+	int (*af_supported)(sa_family_t, struct sctp_sock *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
+	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
+	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
+	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
+	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
+	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
+	void (*copy_ip_options)(struct sock *, struct sock *);
+	struct sctp_af *af;
+};
+
+struct sctp_endpoint {
+	struct sctp_ep_common base;
+	struct hlist_node node;
+	int hashent;
+	struct list_head asocs;
+	__u8 secret_key[32];
+	__u8 *digest;
+	__u32 sndbuf_policy;
+	__u32 rcvbuf_policy;
+	struct crypto_shash **auth_hmacs;
+	struct sctp_hmac_algo_param *auth_hmacs_list;
+	struct sctp_chunks_param *auth_chunk_list;
+	struct list_head endpoint_shared_keys;
+	__u16 active_key_id;
+	__u8 ecn_enable: 1;
+	__u8 auth_enable: 1;
+	__u8 intl_enable: 1;
+	__u8 prsctp_enable: 1;
+	__u8 asconf_enable: 1;
+	__u8 reconf_enable: 1;
+	__u8 strreset_enable;
+	struct callback_head rcu;
+};
+
+struct sctp_signed_cookie {
+	__u8 signature[32];
+	__u32 __pad;
+	struct sctp_cookie c;
+} __attribute__((packed));
+
+union sctp_addr_param {
+	struct sctp_paramhdr p;
+	struct sctp_ipv4addr_param v4;
+	struct sctp_ipv6addr_param v6;
+};
+
+struct sctp_sender_hb_info {
+	struct sctp_paramhdr param_hdr;
+	union sctp_addr daddr;
+	long unsigned int sent_at;
+	__u64 hb_nonce;
+	__u32 probe_size;
+};
+
+struct sctp_af {
+	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
+	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
+	void (*copy_addrlist)(struct list_head *, struct net_device *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
+	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
+	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
+	void (*from_sk)(union sctp_addr *, struct sock *);
+	bool (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
+	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
+	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
+	enum sctp_scope (*scope)(union sctp_addr *);
+	void (*inaddr_any)(union sctp_addr *, __be16);
+	int (*is_any)(const union sctp_addr *);
+	int (*available)(union sctp_addr *, struct sctp_sock *);
+	int (*skb_iif)(const struct sk_buff *);
+	int (*skb_sdif)(const struct sk_buff *);
+	int (*is_ce)(const struct sk_buff *);
+	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
+	void (*ecn_capable)(struct sock *);
+	__u16 net_header_len;
+	int sockaddr_len;
+	int (*ip_options_len)(struct sock *);
+	sa_family_t sa_family;
+	struct list_head list;
+};
+
+struct sctp_packet {
+	__u16 source_port;
+	__u16 destination_port;
+	__u32 vtag;
+	struct list_head chunk_list;
+	size_t overhead;
+	size_t size;
+	size_t max_size;
+	struct sctp_transport *transport;
+	struct sctp_chunk *auth;
+	u8 has_cookie_echo: 1;
+	u8 has_sack: 1;
+	u8 has_auth: 1;
+	u8 has_data: 1;
+	u8 ipfragok: 1;
+};
+
+struct sctp_transport {
+	struct list_head transports;
+	struct rhlist_head node;
+	refcount_t refcnt;
+	__u32 rto_pending: 1;
+	__u32 hb_sent: 1;
+	__u32 pmtu_pending: 1;
+	__u32 dst_pending_confirm: 1;
+	__u32 sack_generation: 1;
+	u32 dst_cookie;
+	struct flowi fl;
+	union sctp_addr ipaddr;
+	struct sctp_af *af_specific;
+	struct sctp_association *asoc;
+	long unsigned int rto;
+	__u32 rtt;
+	__u32 rttvar;
+	__u32 srtt;
+	__u32 cwnd;
+	__u32 ssthresh;
+	__u32 partial_bytes_acked;
+	__u32 flight_size;
+	__u32 burst_limited;
+	struct dst_entry *dst;
+	union sctp_addr saddr;
+	long unsigned int hbinterval;
+	long unsigned int probe_interval;
+	long unsigned int sackdelay;
+	__u32 sackfreq;
+	atomic_t mtu_info;
+	ktime_t last_time_heard;
+	long unsigned int last_time_sent;
+	long unsigned int last_time_ecne_reduced;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 param_flags;
+	int init_sent_count;
+	int state;
+	short unsigned int error_count;
+	struct timer_list T3_rtx_timer;
+	struct timer_list hb_timer;
+	struct timer_list proto_unreach_timer;
+	struct timer_list reconf_timer;
+	struct timer_list probe_timer;
+	struct list_head transmitted;
+	struct sctp_packet packet;
+	struct list_head send_ready;
+	struct {
+		__u32 next_tsn_at_change;
+		char changeover_active;
+		char cycling_changeover;
+		char cacc_saw_newack;
+	} cacc;
+	struct {
+		__u16 pmtu;
+		__u16 probe_size;
+		__u16 probe_high;
+		__u8 probe_count;
+		__u8 state;
+	} pl;
+	__u64 hb_nonce;
+	struct callback_head rcu;
+};
+
+struct sctp_datamsg {
+	struct list_head chunks;
+	refcount_t refcnt;
+	long unsigned int expires_at;
+	int send_error;
+	u8 send_failed: 1;
+	u8 can_delay: 1;
+	u8 abandoned: 1;
+};
+
+struct sctp_stream_priorities {
+	struct list_head prio_sched;
+	struct list_head active;
+	struct sctp_stream_out_ext *next;
+	__u16 prio;
+};
+
+struct sctp_stream_out_ext {
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	struct list_head outq;
+	union {
+		struct {
+			struct list_head prio_list;
+			struct sctp_stream_priorities *prio_head;
+		};
+		struct {
+			struct list_head rr_list;
+		};
+	};
+};
+
+struct file_security_struct {
+	u32 sid;
+	u32 fown_sid;
+	u32 isid;
+	u32 pseqno;
+};
+
+struct superblock_security_struct {
+	u32 sid;
+	u32 def_sid;
+	u32 mntpoint_sid;
+	short unsigned int behavior;
+	short unsigned int flags;
+	struct mutex lock;
+	struct list_head isec_head;
+	spinlock_t isec_lock;
+};
+
+struct msg_security_struct {
+	u32 sid;
+};
+
+struct ipc_security_struct {
+	u16 sclass;
+	u32 sid;
+};
+
+struct sk_security_struct {
+	u32 sid;
+	u32 peer_sid;
+	u16 sclass;
+	enum {
+		SCTP_ASSOC_UNSET = 0,
+		SCTP_ASSOC_SET = 1,
+	} sctp_assoc_state;
+};
+
+struct tun_security_struct {
+	u32 sid;
+};
+
+struct key_security_struct {
+	u32 sid;
+};
+
+struct bpf_security_struct {
+	u32 sid;
+};
+
+struct perf_event_security_struct {
+	u32 sid;
+};
+
+struct security_class_mapping {
+	const char *name;
+	const char *perms[33];
+};
+
+struct selinux_mnt_opts {
+	u32 fscontext_sid;
+	u32 context_sid;
+	u32 rootcontext_sid;
+	u32 defcontext_sid;
+};
+
+enum {
+	Opt_error = -1,
+	Opt_context = 0,
+	Opt_defcontext = 1,
+	Opt_fscontext = 2,
+	Opt_rootcontext = 3,
+	Opt_seclabel = 4,
+};
+
+struct selinux_kernel_status {
+	u32 version;
+	u32 sequence;
+	u32 enforcing;
+	u32 policyload;
+	u32 deny_unknown;
+};
+
+struct perm_datum {
+	u32 value;
+};
+
+struct role_trans_key {
+	u32 role;
+	u32 type;
+	u32 tclass;
+};
+
+struct role_trans_datum {
+	u32 new_role;
+};
+
+struct filename_trans_key {
+	u32 ttype;
+	u16 tclass;
+	const char *name;
+};
+
+struct filename_trans_datum {
+	struct ebitmap stypes;
+	u32 otype;
+	struct filename_trans_datum *next;
+};
+
+struct level_datum {
+	struct mls_level *level;
+	unsigned char isalias;
+};
+
+struct cat_datum {
+	u32 value;
+	unsigned char isalias;
+};
+
+struct range_trans {
+	u32 source_type;
+	u32 target_type;
+	u32 target_class;
+};
+
+struct policydb_compat_info {
+	int version;
+	int sym_num;
+	int ocon_num;
+};
+
+struct audit_cache {
+	struct aa_profile *profile;
+	kernel_cap_t caps;
+};
+
+struct match_workbuf {
+	unsigned int count;
+	unsigned int pos;
+	unsigned int len;
+	unsigned int size;
+	unsigned int history[24];
+};
+
+struct aa_file_ctx {
+	spinlock_t lock;
+	struct aa_label *label;
+	u32 allow;
+};
+
+struct ptrace_relation {
+	struct task_struct *tracer;
+	struct task_struct *tracee;
+	bool invalid;
+	struct list_head node;
+	struct callback_head rcu;
+};
+
+struct access_report_info {
+	struct callback_head work;
+	const char *access;
+	struct task_struct *target;
+	struct task_struct *agent;
+};
+
+enum integrity_status {
+	INTEGRITY_PASS = 0,
+	INTEGRITY_PASS_IMMUTABLE = 1,
+	INTEGRITY_FAIL = 2,
+	INTEGRITY_FAIL_IMMUTABLE = 3,
+	INTEGRITY_NOLABEL = 4,
+	INTEGRITY_NOXATTRS = 5,
+	INTEGRITY_UNKNOWN = 6,
+};
+
+struct ima_digest_data {
+	u8 algo;
+	u8 length;
+	union {
+		struct {
+			u8 unused;
+			u8 type;
+		} sha1;
+		struct {
+			u8 type;
+			u8 algo;
+		} ng;
+		u8 data[2];
+	} xattr;
+	u8 digest[0];
+};
+
+struct integrity_iint_cache {
+	struct rb_node rb_node;
+	struct mutex mutex;
+	struct inode *inode;
+	u64 version;
+	long unsigned int flags;
+	long unsigned int measured_pcrs;
+	long unsigned int atomic_flags;
+	enum integrity_status ima_file_status: 4;
+	enum integrity_status ima_mmap_status: 4;
+	enum integrity_status ima_bprm_status: 4;
+	enum integrity_status ima_read_status: 4;
+	enum integrity_status ima_creds_status: 4;
+	enum integrity_status evm_status: 4;
+	struct ima_digest_data *ima_hash;
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+};
+
+struct aead_instance {
+	void (*free)(struct aead_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
+};
+
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_sync_skcipher;
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+struct crypto_report_akcipher {
+	char type[64];
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	union {
+		struct {
+			char head[72];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct rsa_asn1_template {
+	const char *name;
+	const u8 *data;
+	size_t size;
+};
+
+struct pkcs1pad_ctx {
+	struct crypto_akcipher *child;
+	unsigned int key_size;
+};
+
+struct pkcs1pad_inst_ctx {
+	struct crypto_akcipher_spawn spawn;
+	const struct rsa_asn1_template *digest_info;
+};
+
+struct pkcs1pad_request {
+	struct scatterlist in_sg[2];
+	struct scatterlist out_sg[1];
+	uint8_t *in_buf;
+	uint8_t *out_buf;
+	struct akcipher_request child_req;
+};
+
+struct md5_state {
+	u32 hash[4];
+	u32 block[16];
+	u64 byte_count;
+};
+
+struct sha512_state {
+	u64 state[8];
+	u64 count[2];
+	u8 buf[128];
+};
+
+typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
+
+struct chksum_ctx {
+	u32 key;
+};
+
+struct chksum_desc_ctx {
+	u32 crc;
+};
+
+struct xxhash64_tfm_ctx {
+	u64 seed;
+};
+
+struct xxhash64_desc_ctx {
+	struct xxh64_state xxhstate;
+};
+
+struct zstd_ctx {
+	zstd_cctx *cctx;
+	zstd_dctx *dctx;
+	void *cwksp;
+	void *dwksp;
+};
+
+struct asymmetric_key_subtype {
+	struct module *owner;
+	const char *name;
+	short unsigned int name_len;
+	void (*describe)(const struct key *, struct seq_file *);
+	void (*destroy)(void *, void *);
+	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+};
+
+struct x509_parse_context {
+	struct x509_certificate *cert;
+	long unsigned int data;
+	const void *key;
+	size_t key_size;
+	const void *params;
+	size_t params_size;
+	enum OID key_algo;
+	enum OID last_oid;
+	enum OID sig_algo;
+	u8 o_size;
+	u8 cn_size;
+	u8 email_size;
+	u16 o_offset;
+	u16 cn_offset;
+	u16 email_offset;
+	unsigned int raw_akid_size;
+	const void *raw_akid;
+	const void *akid_raw_issuer;
+	unsigned int akid_raw_issuer_size;
+};
+
+struct kdf_testvec {
+	unsigned char *key;
+	size_t keylen;
+	unsigned char *ikm;
+	size_t ikmlen;
+	struct kvec info;
+	unsigned char *expected;
+	size_t expectedlen;
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 1250,
+};
+
+struct rq_map_data {
+	struct page **pages;
+	long unsigned int offset;
+	short unsigned int page_order;
+	short unsigned int nr_entries;
+	bool null_mapped;
+	bool from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+struct mq_inflight {
+	struct block_device *part;
+	unsigned int inflight[2];
+};
+
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
+struct blk_expired_data {
+	bool has_timedout_rq;
+	long unsigned int next;
+	long unsigned int timeout_start;
+};
+
+struct flush_busy_ctx_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct list_head *list;
+};
+
+struct dispatch_rq_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request *rq;
+};
+
+enum prep_dispatch {
+	PREP_DISPATCH_OK = 0,
+	PREP_DISPATCH_NO_TAG = 1,
+	PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct rq_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	bool has_rq;
+};
+
+struct blk_mq_qe_pair {
+	struct list_head node;
+	struct request_queue *q;
+	struct elevator_type *type;
+};
+
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+typedef int bsg_job_fn(struct bsg_job *);
+
+typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
+
+struct bsg_set {
+	struct blk_mq_tag_set tag_set;
+	struct bsg_device *bd;
+	bsg_job_fn *job_fn;
+	bsg_timeout_fn *timeout_fn;
+};
+
+struct blk_iolatency {
+	struct rq_qos rqos;
+	struct timer_list timer;
+	bool enabled;
+	atomic_t enable_cnt;
+	struct work_struct enable_work;
+};
+
+struct iolatency_grp;
+
+struct child_latency_info {
+	spinlock_t lock;
+	u64 last_scale_event;
+	u64 scale_lat;
+	u64 nr_samples;
+	struct iolatency_grp *scale_grp;
+	atomic_t scale_cookie;
+};
+
+struct percentile_stats {
+	u64 total;
+	u64 missed;
+};
+
+struct latency_stat {
+	union {
+		struct percentile_stats ps;
+		struct blk_rq_stat rqs;
+	};
+};
+
+struct iolatency_grp {
+	struct blkg_policy_data pd;
+	struct latency_stat *stats;
+	struct latency_stat cur_stat;
+	struct blk_iolatency *blkiolat;
+	unsigned int max_depth;
+	struct rq_wait rq_wait;
+	atomic64_t window_start;
+	atomic_t scale_cookie;
+	u64 min_lat_nsec;
+	u64 cur_win_nsec;
+	u64 lat_avg;
+	u64 nr_samples;
+	bool ssd;
+	struct child_latency_info child_lat;
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	long unsigned int latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+struct bfq_group_data {
+	struct blkcg_policy_data pd;
+	unsigned int weight;
+};
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	void *priv;
+	bool reset;
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+enum opal_mbr {
+	OPAL_MBR_ENABLE = 0,
+	OPAL_MBR_DISABLE = 1,
+};
+
+enum opal_mbr_done_flag {
+	OPAL_MBR_NOT_DONE = 0,
+	OPAL_MBR_DONE = 1,
+};
+
+enum opal_user {
+	OPAL_ADMIN1 = 0,
+	OPAL_USER1 = 1,
+	OPAL_USER2 = 2,
+	OPAL_USER3 = 3,
+	OPAL_USER4 = 4,
+	OPAL_USER5 = 5,
+	OPAL_USER6 = 6,
+	OPAL_USER7 = 7,
+	OPAL_USER8 = 8,
+	OPAL_USER9 = 9,
+};
+
+enum opal_lock_state {
+	OPAL_RO = 1,
+	OPAL_RW = 2,
+	OPAL_LK = 4,
+};
+
+enum opal_lock_flags {
+	OPAL_SAVE_FOR_LOCK = 1,
+};
+
+struct opal_key {
+	__u8 lr;
+	__u8 key_len;
+	__u8 __align[6];
+	__u8 key[256];
+};
+
+struct opal_lr_act {
+	struct opal_key key;
+	__u32 sum;
+	__u8 num_lrs;
+	__u8 lr[9];
+	__u8 align[2];
+};
+
+struct opal_session_info {
+	__u32 sum;
+	__u32 who;
+	struct opal_key opal_key;
+};
+
+struct opal_user_lr_setup {
+	__u64 range_start;
+	__u64 range_length;
+	__u32 RLE;
+	__u32 WLE;
+	struct opal_session_info session;
+};
+
+struct opal_lock_unlock {
+	struct opal_session_info session;
+	__u32 l_state;
+	__u16 flags;
+	__u8 __align[2];
+};
+
+struct opal_new_pw {
+	struct opal_session_info session;
+	struct opal_session_info new_user_pw;
+};
+
+struct opal_mbr_data {
+	struct opal_key key;
+	__u8 enable_disable;
+	__u8 __align[7];
+};
+
+struct opal_mbr_done {
+	struct opal_key key;
+	__u8 done_flag;
+	__u8 __align[7];
+};
+
+struct opal_shadow_mbr {
+	struct opal_key key;
+	const __u64 data;
+	__u64 offset;
+	__u64 size;
+};
+
+enum opal_table_ops {
+	OPAL_READ_TABLE = 0,
+	OPAL_WRITE_TABLE = 1,
+};
+
+struct opal_read_write_table {
+	struct opal_key key;
+	const __u64 data;
+	const __u8 table_uid[8];
+	__u64 offset;
+	__u64 size;
+	__u64 flags;
+	__u64 priv;
+};
+
+struct opal_status {
+	__u32 flags;
+	__u32 reserved;
+};
+
+enum {
+	TCG_SECP_00 = 0,
+	TCG_SECP_01 = 1,
+};
+
+enum opal_response_token {
+	OPAL_DTA_TOKENID_BYTESTRING = 224,
+	OPAL_DTA_TOKENID_SINT = 225,
+	OPAL_DTA_TOKENID_UINT = 226,
+	OPAL_DTA_TOKENID_TOKEN = 227,
+	OPAL_DTA_TOKENID_INVALID = 0,
+};
+
+enum opal_uid {
+	OPAL_SMUID_UID = 0,
+	OPAL_THISSP_UID = 1,
+	OPAL_ADMINSP_UID = 2,
+	OPAL_LOCKINGSP_UID = 3,
+	OPAL_ENTERPRISE_LOCKINGSP_UID = 4,
+	OPAL_ANYBODY_UID = 5,
+	OPAL_SID_UID = 6,
+	OPAL_ADMIN1_UID = 7,
+	OPAL_USER1_UID = 8,
+	OPAL_USER2_UID = 9,
+	OPAL_PSID_UID = 10,
+	OPAL_ENTERPRISE_BANDMASTER0_UID = 11,
+	OPAL_ENTERPRISE_ERASEMASTER_UID = 12,
+	OPAL_TABLE_TABLE = 13,
+	OPAL_LOCKINGRANGE_GLOBAL = 14,
+	OPAL_LOCKINGRANGE_ACE_RDLOCKED = 15,
+	OPAL_LOCKINGRANGE_ACE_WRLOCKED = 16,
+	OPAL_MBRCONTROL = 17,
+	OPAL_MBR = 18,
+	OPAL_AUTHORITY_TABLE = 19,
+	OPAL_C_PIN_TABLE = 20,
+	OPAL_LOCKING_INFO_TABLE = 21,
+	OPAL_ENTERPRISE_LOCKING_INFO_TABLE = 22,
+	OPAL_DATASTORE = 23,
+	OPAL_C_PIN_MSID = 24,
+	OPAL_C_PIN_SID = 25,
+	OPAL_C_PIN_ADMIN1 = 26,
+	OPAL_HALF_UID_AUTHORITY_OBJ_REF = 27,
+	OPAL_HALF_UID_BOOLEAN_ACE = 28,
+	OPAL_UID_HEXFF = 29,
+};
+
+enum opal_method {
+	OPAL_PROPERTIES = 0,
+	OPAL_STARTSESSION = 1,
+	OPAL_REVERT = 2,
+	OPAL_ACTIVATE = 3,
+	OPAL_EGET = 4,
+	OPAL_ESET = 5,
+	OPAL_NEXT = 6,
+	OPAL_EAUTHENTICATE = 7,
+	OPAL_GETACL = 8,
+	OPAL_GENKEY = 9,
+	OPAL_REVERTSP = 10,
+	OPAL_GET = 11,
+	OPAL_SET = 12,
+	OPAL_AUTHENTICATE = 13,
+	OPAL_RANDOM = 14,
+	OPAL_ERASE = 15,
+};
+
+enum opal_token {
+	OPAL_TRUE = 1,
+	OPAL_FALSE = 0,
+	OPAL_BOOLEAN_EXPR = 3,
+	OPAL_TABLE = 0,
+	OPAL_STARTROW = 1,
+	OPAL_ENDROW = 2,
+	OPAL_STARTCOLUMN = 3,
+	OPAL_ENDCOLUMN = 4,
+	OPAL_VALUES = 1,
+	OPAL_TABLE_UID = 0,
+	OPAL_TABLE_NAME = 1,
+	OPAL_TABLE_COMMON = 2,
+	OPAL_TABLE_TEMPLATE = 3,
+	OPAL_TABLE_KIND = 4,
+	OPAL_TABLE_COLUMN = 5,
+	OPAL_TABLE_COLUMNS = 6,
+	OPAL_TABLE_ROWS = 7,
+	OPAL_TABLE_ROWS_FREE = 8,
+	OPAL_TABLE_ROW_BYTES = 9,
+	OPAL_TABLE_LASTID = 10,
+	OPAL_TABLE_MIN = 11,
+	OPAL_TABLE_MAX = 12,
+	OPAL_PIN = 3,
+	OPAL_RANGESTART = 3,
+	OPAL_RANGELENGTH = 4,
+	OPAL_READLOCKENABLED = 5,
+	OPAL_WRITELOCKENABLED = 6,
+	OPAL_READLOCKED = 7,
+	OPAL_WRITELOCKED = 8,
+	OPAL_ACTIVEKEY = 10,
+	OPAL_LIFECYCLE = 6,
+	OPAL_MAXRANGES = 4,
+	OPAL_MBRENABLE = 1,
+	OPAL_MBRDONE = 2,
+	OPAL_HOSTPROPERTIES = 0,
+	OPAL_STARTLIST = 240,
+	OPAL_ENDLIST = 241,
+	OPAL_STARTNAME = 242,
+	OPAL_ENDNAME = 243,
+	OPAL_CALL = 248,
+	OPAL_ENDOFDATA = 249,
+	OPAL_ENDOFSESSION = 250,
+	OPAL_STARTTRANSACTON = 251,
+	OPAL_ENDTRANSACTON = 252,
+	OPAL_EMPTYATOM = 255,
+	OPAL_WHERE = 0,
+};
+
+enum opal_parameter {
+	OPAL_SUM_SET_LIST = 393216,
+};
+
+struct opal_compacket {
+	__be32 reserved0;
+	u8 extendedComID[4];
+	__be32 outstandingData;
+	__be32 minTransfer;
+	__be32 length;
+};
+
+struct opal_packet {
+	__be32 tsn;
+	__be32 hsn;
+	__be32 seq_number;
+	__be16 reserved0;
+	__be16 ack_type;
+	__be32 acknowledgment;
+	__be32 length;
+};
+
+struct opal_data_subpacket {
+	u8 reserved0[6];
+	__be16 kind;
+	__be32 length;
+};
+
+struct opal_header {
+	struct opal_compacket cp;
+	struct opal_packet pkt;
+	struct opal_data_subpacket subpkt;
+};
+
+struct d0_header {
+	__be32 length;
+	__be32 revision;
+	__be32 reserved01;
+	__be32 reserved02;
+	u8 ignored[32];
+};
+
+struct d0_tper_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_locking_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_geometry_features {
+	u8 header[4];
+	u8 reserved01;
+	u8 reserved02[7];
+	__be32 logical_block_size;
+	__be64 alignment_granularity;
+	__be64 lowest_aligned_lba;
+};
+
+struct d0_opal_v100 {
+	__be16 baseComID;
+	__be16 numComIDs;
+};
+
+struct d0_single_user_mode {
+	__be32 num_locking_objects;
+	u8 reserved01;
+	u8 reserved02;
+	__be16 reserved03;
+	__be32 reserved04;
+};
+
+struct d0_opal_v200 {
+	__be16 baseComID;
+	__be16 numComIDs;
+	u8 range_crossing;
+	u8 num_locking_admin_auth[2];
+	u8 num_locking_user_auth[2];
+	u8 initialPIN;
+	u8 revertedPIN;
+	u8 reserved01;
+	__be32 reserved02;
+};
+
+struct d0_features {
+	__be16 code;
+	u8 r_version;
+	u8 length;
+	u8 features[0];
+};
+
+struct opal_dev;
+
+struct opal_step {
+	int (*fn)(struct opal_dev *, void *);
+	void *data;
+};
+
+enum opal_atom_width {
+	OPAL_WIDTH_TINY = 0,
+	OPAL_WIDTH_SHORT = 1,
+	OPAL_WIDTH_MEDIUM = 2,
+	OPAL_WIDTH_LONG = 3,
+	OPAL_WIDTH_TOKEN = 4,
+};
+
+struct opal_resp_tok {
+	const u8 *pos;
+	size_t len;
+	enum opal_response_token type;
+	enum opal_atom_width width;
+	union {
+		u64 u;
+		s64 s;
+	} stored;
+};
+
+struct parsed_resp {
+	int num;
+	struct opal_resp_tok toks[64];
+};
+
+struct opal_dev {
+	u32 flags;
+	void *data;
+	sec_send_recv *send_recv;
+	struct mutex dev_lock;
+	u16 comid;
+	u32 hsn;
+	u32 tsn;
+	u64 align;
+	u64 lowest_lba;
+	size_t pos;
+	u8 *cmd;
+	u8 *resp;
+	struct parsed_resp parsed;
+	size_t prev_d_len;
+	void *prev_data;
+	struct list_head unlk_lst;
+};
+
+typedef int cont_fn(struct opal_dev *);
+
+struct opal_suspend_data {
+	struct opal_lock_unlock unlk;
+	u8 lr;
+	struct list_head node;
+};
+
+struct blk_crypto_mode {
+	const char *name;
+	const char *cipher_str;
+	unsigned int keysize;
+	unsigned int ivsize;
+};
+
+struct blk_crypto_kobj {
+	struct kobject kobj;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_crypto_profile *, struct blk_crypto_attr *, char *);
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx *buffer;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u32 flags;
+	int seq;
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+	IOU_POLL_REISSUE = 3,
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	long unsigned int nr_segs;
+};
+
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
+};
+
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
+};
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+union nested_table {
+	union nested_table *table;
+	struct rhash_lock_head *bucket;
+};
+
+typedef enum {
+	trustInput = 0,
+	checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+typedef struct {
+	FSE_CTable CTable[59];
+	U32 scratchBuffer[41];
+	unsigned int count[13];
+	S16 norm[13];
+} HUF_CompressWeightsWksp;
+
+typedef struct {
+	HUF_CompressWeightsWksp wksp;
+	BYTE bitsToWeight[13];
+	BYTE huffWeight[255];
+} HUF_WriteCTableWksp;
+
+struct nodeElt_s {
+	U32 count;
+	U16 parent;
+	BYTE byte;
+	BYTE nbBits;
+};
+
+typedef struct nodeElt_s nodeElt;
+
+typedef struct {
+	U16 base;
+	U16 curr;
+} rankPos;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+	huffNodeTable huffNodeTbl;
+	rankPos rankPosition[192];
+} HUF_buildCTable_wksp_tables;
+
+typedef struct {
+	size_t bitContainer[2];
+	size_t bitPos[2];
+	BYTE *startPtr;
+	BYTE *ptr;
+	BYTE *endPtr;
+} HUF_CStream_t;
+
+typedef enum {
+	HUF_singleStream = 0,
+	HUF_fourStreams = 1,
+} HUF_nbStreams_e;
+
+typedef struct {
+	unsigned int count[256];
+	HUF_CElt CTable[257];
+	union {
+		HUF_buildCTable_wksp_tables buildCTable_wksp;
+		HUF_WriteCTableWksp writeCTable_wksp;
+		U32 hist_wksp[1024];
+	} wksps;
+} HUF_compress_tables_t;
+
+typedef enum {
+	ZSTDcs_created = 0,
+	ZSTDcs_init = 1,
+	ZSTDcs_ongoing = 2,
+	ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+	ZSTD_dictDefaultAttach = 0,
+	ZSTD_dictForceAttach = 1,
+	ZSTD_dictForceCopy = 2,
+	ZSTD_dictForceLoad = 3,
+} ZSTD_dictAttachPref_e;
+
+typedef struct {
+	ZSTD_paramSwitch_e enableLdm;
+	U32 hashLog;
+	U32 bucketSizeLog;
+	U32 minMatchLength;
+	U32 hashRateLog;
+	U32 windowLog;
+} ldmParams_t;
+
+typedef enum {
+	ZSTD_sf_noBlockDelimiters = 0,
+	ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_e;
+
+struct ZSTD_CCtx_params_s {
+	ZSTD_format_e format;
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+	int compressionLevel;
+	int forceWindow;
+	size_t targetCBlockSize;
+	int srcSizeHint;
+	ZSTD_dictAttachPref_e attachDictPref;
+	ZSTD_paramSwitch_e literalCompressionMode;
+	int nbWorkers;
+	size_t jobSize;
+	int overlapLog;
+	int rsyncable;
+	ldmParams_t ldmParams;
+	int enableDedicatedDictSearch;
+	ZSTD_bufferMode_e inBufferMode;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_sequenceFormat_e blockDelimiters;
+	int validateSequences;
+	ZSTD_paramSwitch_e useBlockSplitter;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+	int deterministicRefPrefix;
+	ZSTD_customMem customMem;
+};
+
+typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
+
+typedef enum {
+	ZSTD_cwksp_alloc_objects = 0,
+	ZSTD_cwksp_alloc_buffers = 1,
+	ZSTD_cwksp_alloc_aligned = 2,
+} ZSTD_cwksp_alloc_phase_e;
+
+typedef enum {
+	ZSTD_cwksp_dynamic_alloc = 0,
+	ZSTD_cwksp_static_alloc = 1,
+} ZSTD_cwksp_static_alloc_e;
+
+typedef struct {
+	void *workspace;
+	void *workspaceEnd;
+	void *objectEnd;
+	void *tableEnd;
+	void *tableValidEnd;
+	void *allocStart;
+	BYTE allocFailed;
+	int workspaceOversizedDuration;
+	ZSTD_cwksp_alloc_phase_e phase;
+	ZSTD_cwksp_static_alloc_e isStatic;
+} ZSTD_cwksp;
+
+struct POOL_ctx_s;
+
+typedef struct POOL_ctx_s ZSTD_threadPool;
+
+typedef struct {
+	unsigned int offset;
+	unsigned int litLength;
+	unsigned int matchLength;
+	unsigned int rep;
+} ZSTD_Sequence;
+
+typedef struct {
+	int collectSequences;
+	ZSTD_Sequence *seqStart;
+	size_t seqIndex;
+	size_t maxSequences;
+} SeqCollector;
+
+typedef struct {
+	U32 offset;
+	U32 checksum;
+} ldmEntry_t;
+
+typedef struct {
+	const BYTE *split;
+	U32 hash;
+	U32 checksum;
+	ldmEntry_t *bucket;
+} ldmMatchCandidate_t;
+
+typedef struct {
+	ZSTD_window_t window;
+	ldmEntry_t *hashTable;
+	U32 loadedDictEnd;
+	BYTE *bucketOffsets;
+	size_t splitIndices[64];
+	ldmMatchCandidate_t matchCandidates[64];
+} ldmState_t;
+
+typedef struct {
+	ZSTD_entropyCTables_t entropy;
+	U32 rep[3];
+} ZSTD_compressedBlockState_t;
+
+typedef struct {
+	ZSTD_compressedBlockState_t *prevCBlock;
+	ZSTD_compressedBlockState_t *nextCBlock;
+	ZSTD_matchState_t matchState;
+} ZSTD_blockState_t;
+
+typedef enum {
+	ZSTDb_not_buffered = 0,
+	ZSTDb_buffered = 1,
+} ZSTD_buffered_policy_e;
+
+typedef enum {
+	zcss_init = 0,
+	zcss_load = 1,
+	zcss_flush = 2,
+} ZSTD_cStreamStage;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+struct ZSTD_CDict_s;
+
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+typedef struct {
+	void *dictBuffer;
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+	ZSTD_CDict *cdict;
+} ZSTD_localDict;
+
+struct ZSTD_prefixDict_s {
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+};
+
+typedef struct ZSTD_prefixDict_s ZSTD_prefixDict;
+
+typedef struct {
+	symbolEncodingType_e hType;
+	BYTE hufDesBuffer[128];
+	size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+typedef struct {
+	symbolEncodingType_e llType;
+	symbolEncodingType_e ofType;
+	symbolEncodingType_e mlType;
+	BYTE fseTablesBuffer[133];
+	size_t fseTablesSize;
+	size_t lastCountSize;
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+	ZSTD_hufCTablesMetadata_t hufMetadata;
+	ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+typedef struct {
+	seqStore_t fullSeqStoreChunk;
+	seqStore_t firstHalfSeqStore;
+	seqStore_t secondHalfSeqStore;
+	seqStore_t currSeqStore;
+	seqStore_t nextSeqStore;
+	U32 partitions[196];
+	ZSTD_entropyCTablesMetadata_t entropyMetadata;
+} ZSTD_blockSplitCtx;
+
+struct ZSTD_CCtx_s {
+	ZSTD_compressionStage_e stage;
+	int cParamsChanged;
+	int bmi2;
+	ZSTD_CCtx_params requestedParams;
+	ZSTD_CCtx_params appliedParams;
+	ZSTD_CCtx_params simpleApiParams;
+	U32 dictID;
+	size_t dictContentSize;
+	ZSTD_cwksp workspace;
+	size_t blockSize;
+	long long unsigned int pledgedSrcSizePlusOne;
+	long long unsigned int consumedSrcSize;
+	long long unsigned int producedCSize;
+	struct xxh64_state xxhState;
+	ZSTD_customMem customMem;
+	ZSTD_threadPool *pool;
+	size_t staticSize;
+	SeqCollector seqCollector;
+	int isFirstBlock;
+	int initialized;
+	seqStore_t seqStore;
+	ldmState_t ldmState;
+	rawSeq *ldmSequences;
+	size_t maxNbLdmSequences;
+	rawSeqStore_t externSeqStore;
+	ZSTD_blockState_t blockState;
+	U32 *entropyWorkspace;
+	ZSTD_buffered_policy_e bufferedPolicy;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inToCompress;
+	size_t inBuffPos;
+	size_t inBuffTarget;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outBuffContentSize;
+	size_t outBuffFlushedSize;
+	ZSTD_cStreamStage streamStage;
+	U32 frameEnded;
+	ZSTD_inBuffer expectedInBuffer;
+	size_t expectedOutBufferSize;
+	ZSTD_localDict localDict;
+	const ZSTD_CDict *cdict;
+	ZSTD_prefixDict prefixDict;
+	ZSTD_blockSplitCtx blockSplitCtx;
+};
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx___2;
+
+struct ZSTD_CDict_s {
+	const void *dictContent;
+	size_t dictContentSize;
+	ZSTD_dictContentType_e dictContentType;
+	U32 *entropyWorkspace;
+	ZSTD_cwksp workspace;
+	ZSTD_matchState_t matchState;
+	ZSTD_compressedBlockState_t cBlockState;
+	ZSTD_customMem customMem;
+	U32 dictID;
+	int compressionLevel;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+};
+
+typedef struct {
+	U32 litLength;
+	U32 matchLength;
+} ZSTD_sequenceLength;
+
+typedef U64 ZSTD_VecMask;
+
+typedef enum {
+	search_hashChain = 0,
+	search_binaryTree = 1,
+	search_rowHash = 2,
+} searchMethod_e;
+
+enum gcry_mpi_format {
+	GCRYMPI_FMT_NONE = 0,
+	GCRYMPI_FMT_STD = 1,
+	GCRYMPI_FMT_PGP = 2,
+	GCRYMPI_FMT_SSH = 3,
+	GCRYMPI_FMT_HEX = 4,
+	GCRYMPI_FMT_USG = 5,
+	GCRYMPI_FMT_OPAQUE = 8,
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t;
+
+struct barrett_ctx_s {
+	MPI m;
+	int m_copied;
+	int k;
+	MPI y;
+	MPI r1;
+	MPI r2;
+	MPI r3;
+};
+
+struct karatsuba_ctx {
+	struct karatsuba_ctx *next;
+	mpi_ptr_t tspace;
+	mpi_size_t tspace_size;
+	mpi_ptr_t tp;
+	mpi_size_t tp_size;
+};
+
+struct dim_cq_moder {
+	u16 usec;
+	u16 pkts;
+	u16 comps;
+	u8 cq_period_mode;
+};
+
+enum dim_cq_period_mode {
+	DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,
+	DIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,
+	DIM_CQ_PERIOD_NUM_MODES = 2,
+};
+
+enum dim_state {
+	DIM_START_MEASURE = 0,
+	DIM_MEASURE_IN_PROGRESS = 1,
+	DIM_APPLY_NEW_PROFILE = 2,
+};
+
+enum dim_tune_state {
+	DIM_PARKING_ON_TOP = 0,
+	DIM_PARKING_TIRED = 1,
+	DIM_GOING_RIGHT = 2,
+	DIM_GOING_LEFT = 3,
+};
+
+enum dim_stats_state {
+	DIM_STATS_WORSE = 0,
+	DIM_STATS_SAME = 1,
+	DIM_STATS_BETTER = 2,
+};
+
+enum dim_step_result {
+	DIM_STEPPED = 0,
+	DIM_TOO_TIRED = 1,
+	DIM_ON_EDGE = 2,
+};
+
+struct acpi_vector_group {
+	int node;
+	int pci_segment;
+	struct irq_domain *parent;
+};
+
+struct acpi_madt_msi_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u64 msg_address;
+	u32 start;
+	u32 count;
+} __attribute__((packed));
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+struct eiointc_priv {
+	u32 node;
+	nodemask_t node_map;
+	cpumask_t cpuspan_map;
+	struct fwnode_handle *domain_handle;
+	struct irq_domain *eiointc_domain;
+};
+
+struct eiointc;
+
+struct pch_lpc {
+	void *base;
+	struct irq_domain *lpc_domain;
+	raw_spinlock_t lpc_lock;
+	u32 saved_reg_ctl;
+	u32 saved_reg_ena;
+	u32 saved_reg_pol;
+};
+
+struct gpio {
+	unsigned int gpio;
+	long unsigned int flags;
+	const char *label;
+};
+
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct class *, struct class_attribute *, char *);
+	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
+};
+
+struct gpiod_data {
+	struct gpio_desc *desc;
+	struct mutex mutex;
+	struct kernfs_node *value_kn;
+	int irq;
+	unsigned char irq_flags;
+	bool direction_can_change;
+};
+
+struct msi_map {
+	int index;
+	int virq;
+};
+
+enum pm_qos_flags_status {
+	PM_QOS_FLAGS_UNDEFINED = -1,
+	PM_QOS_FLAGS_NONE = 0,
+	PM_QOS_FLAGS_SOME = 1,
+	PM_QOS_FLAGS_ALL = 2,
+};
+
+struct hpx_type0 {
+	u32 revision;
+	u8 cache_line_size;
+	u8 latency_timer;
+	u8 enable_serr;
+	u8 enable_perr;
+};
+
+struct hpx_type1 {
+	u32 revision;
+	u8 max_mem_read;
+	u8 avg_max_split;
+	u16 tot_max_split;
+};
+
+struct hpx_type2 {
+	u32 revision;
+	u32 unc_err_mask_and;
+	u32 unc_err_mask_or;
+	u32 unc_err_sever_and;
+	u32 unc_err_sever_or;
+	u32 cor_err_mask_and;
+	u32 cor_err_mask_or;
+	u32 adv_err_cap_and;
+	u32 adv_err_cap_or;
+	u16 pci_exp_devctl_and;
+	u16 pci_exp_devctl_or;
+	u16 pci_exp_lnkctl_and;
+	u16 pci_exp_lnkctl_or;
+	u32 sec_unc_err_sever_and;
+	u32 sec_unc_err_sever_or;
+	u32 sec_unc_err_mask_and;
+	u32 sec_unc_err_mask_or;
+};
+
+struct hpx_type3 {
+	u16 device_type;
+	u16 function_type;
+	u16 config_space_location;
+	u16 pci_exp_cap_id;
+	u16 pci_exp_cap_ver;
+	u16 pci_exp_vendor_id;
+	u16 dvsec_id;
+	u16 dvsec_rev;
+	u16 match_offset;
+	u32 match_mask_and;
+	u32 match_value;
+	u16 reg_offset;
+	u32 reg_mask_and;
+	u32 reg_mask_or;
+};
+
+enum hpx_type3_dev_type {
+	HPX_TYPE_ENDPOINT = 1,
+	HPX_TYPE_LEG_END = 2,
+	HPX_TYPE_RC_END = 4,
+	HPX_TYPE_RC_EC = 8,
+	HPX_TYPE_ROOT_PORT = 16,
+	HPX_TYPE_UPSTREAM = 32,
+	HPX_TYPE_DOWNSTREAM = 64,
+	HPX_TYPE_PCI_BRIDGE = 128,
+	HPX_TYPE_PCIE_BRIDGE = 256,
+};
+
+enum hpx_type3_fn_type {
+	HPX_FN_NORMAL = 1,
+	HPX_FN_SRIOV_PHYS = 2,
+	HPX_FN_SRIOV_VIRT = 4,
+};
+
+enum hpx_type3_cfg_loc {
+	HPX_CFG_PCICFG = 0,
+	HPX_CFG_PCIE_CAP = 1,
+	HPX_CFG_PCIE_CAP_EXT = 2,
+	HPX_CFG_VEND_CAP = 3,
+	HPX_CFG_DVSEC = 4,
+	HPX_CFG_MAX = 5,
+};
+
+enum dmi_device_type {
+	DMI_DEV_TYPE_ANY = 0,
+	DMI_DEV_TYPE_OTHER = 1,
+	DMI_DEV_TYPE_UNKNOWN = 2,
+	DMI_DEV_TYPE_VIDEO = 3,
+	DMI_DEV_TYPE_SCSI = 4,
+	DMI_DEV_TYPE_ETHERNET = 5,
+	DMI_DEV_TYPE_TOKENRING = 6,
+	DMI_DEV_TYPE_SOUND = 7,
+	DMI_DEV_TYPE_PATA = 8,
+	DMI_DEV_TYPE_SATA = 9,
+	DMI_DEV_TYPE_SAS = 10,
+	DMI_DEV_TYPE_IPMI = -1,
+	DMI_DEV_TYPE_OEM_STRING = -2,
+	DMI_DEV_TYPE_DEV_ONBOARD = -3,
+	DMI_DEV_TYPE_DEV_SLOT = -4,
+};
+
+struct dmi_device {
+	struct list_head list;
+	int type;
+	const char *name;
+	void *device_data;
+};
+
+struct dmi_dev_onboard {
+	struct dmi_device dev;
+	int instance;
+	int segment;
+	int bus;
+	int devfn;
+};
+
+enum smbios_attr_enum {
+	SMBIOS_ATTR_NONE = 0,
+	SMBIOS_ATTR_LABEL_SHOW = 1,
+	SMBIOS_ATTR_INSTANCE_SHOW = 2,
+};
+
+enum acpi_attr_enum {
+	ACPI_ATTR_LABEL_SHOW = 0,
+	ACPI_ATTR_INDEX_SHOW = 1,
+};
+
+enum rio_device_state {
+	RIO_DEVICE_INITIALIZING = 0,
+	RIO_DEVICE_RUNNING = 1,
+	RIO_DEVICE_GONE = 2,
+	RIO_DEVICE_SHUTDOWN = 3,
+};
+
+struct rio_scan_node {
+	int mport_id;
+	struct list_head node;
+	struct rio_scan *ops;
+};
+
+struct rio_pwrite {
+	struct list_head node;
+	int (*pwcback)(struct rio_mport *, void *, union rio_pw_msg *, int);
+	void *context;
+};
+
+struct rio_disc_work {
+	struct work_struct work;
+	struct rio_mport *mport;
+};
+
+struct aperture_range {
+	struct device *dev;
+	resource_size_t base;
+	resource_size_t size;
+	struct list_head lh;
+	void (*detach)(struct device *);
+};
+
+struct linux_logo {
+	int type;
+	unsigned int width;
+	unsigned int height;
+	unsigned int clutsize;
+	const unsigned char *clut;
+	const unsigned char *data;
+};
+
+struct fb_modelist {
+	struct list_head list;
+	struct fb_videomode mode;
+};
+
+typedef unsigned int u_int;
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+enum {
+	FBCON_LOGO_CANSHOW = -1,
+	FBCON_LOGO_DRAW = -2,
+	FBCON_LOGO_DONTSHOW = -3,
+};
+
+enum ipmi_addr_src {
+	SI_INVALID = 0,
+	SI_HOTMOD = 1,
+	SI_HARDCODED = 2,
+	SI_SPMI = 3,
+	SI_ACPI = 4,
+	SI_SMBIOS = 5,
+	SI_PCI = 6,
+	SI_DEVICETREE = 7,
+	SI_PLATFORM = 8,
+	SI_LAST = 9,
+};
+
+enum ipmi_plat_interface_type {
+	IPMI_PLAT_IF_SI = 0,
+	IPMI_PLAT_IF_SSIF = 1,
+};
+
+struct ipmi_plat_data {
+	enum ipmi_plat_interface_type iftype;
+	unsigned int type;
+	unsigned int space;
+	long unsigned int addr;
+	unsigned int regspacing;
+	unsigned int regsize;
+	unsigned int regshift;
+	unsigned int irq;
+	unsigned int slave_addr;
+	enum ipmi_addr_src addr_source;
+};
+
+enum si_type {
+	SI_TYPE_INVALID = 0,
+	SI_KCS = 1,
+	SI_SMIC = 2,
+	SI_BT = 3,
+	SI_TYPE_MAX = 4,
+};
+
+enum ipmi_addr_space {
+	IPMI_IO_ADDR_SPACE = 0,
+	IPMI_MEM_ADDR_SPACE = 1,
+};
+
+struct acpi_pld_info {
+	u8 revision;
+	u8 ignore_color;
+	u8 red;
+	u8 green;
+	u8 blue;
+	u16 width;
+	u16 height;
+	u8 user_visible;
+	u8 dock;
+	u8 lid;
+	u8 panel;
+	u8 vertical_position;
+	u8 horizontal_position;
+	u8 shape;
+	u8 group_orientation;
+	u8 group_token;
+	u8 group_position;
+	u8 bay;
+	u8 ejectable;
+	u8 ospm_eject_required;
+	u8 cabinet_number;
+	u8 card_cage_number;
+	u8 reference;
+	u8 rotation;
+	u8 order;
+	u8 reserved;
+	u16 vertical_offset;
+	u16 horizontal_offset;
+};
+
+struct acpi_handle_list {
+	u32 count;
+	acpi_handle handles[10];
+};
+
+enum acpi_predicate {
+	all_versions = 0,
+	less_than_or_equal = 1,
+	equal = 2,
+	greater_than_or_equal = 3,
+};
+
+struct acpi_platform_list {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	char *table;
+	enum acpi_predicate pred;
+	char *reason;
+	u32 data;
+};
+
+struct acpi_device_bus_id {
+	const char *bus_id;
+	struct ida instance_ida;
+	struct list_head node;
+};
+
+struct acpi_dev_match_info {
+	struct acpi_device_id hid[2];
+	const char *uid;
+	s64 hrv;
+};
+
+struct acpi_data_node {
+	const char *name;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct fwnode_handle *parent;
+	struct acpi_device_data data;
+	struct list_head sibling;
+	struct kobject kobj;
+	struct completion kobj_done;
+};
+
+struct acpi_data_node_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct acpi_data_node *, char *);
+	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
+};
+
+enum acpi_bus_device_type {
+	ACPI_BUS_TYPE_DEVICE = 0,
+	ACPI_BUS_TYPE_POWER = 1,
+	ACPI_BUS_TYPE_PROCESSOR = 2,
+	ACPI_BUS_TYPE_THERMAL = 3,
+	ACPI_BUS_TYPE_POWER_BUTTON = 4,
+	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
+	ACPI_BUS_TYPE_ECDT_EC = 6,
+	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
+};
+
+struct acpi_dev_walk_context {
+	int (*fn)(struct acpi_device *, void *);
+	void *data;
+};
+
+struct acpi_processor_errata {
+	u8 smp;
+	struct {
+		u8 throttle: 1;
+		u8 fdma: 1;
+		u8 reserved: 6;
+		u32 bmisx;
+	} piix4;
+};
+
+struct acpi_pci_link_irq {
+	u32 active;
+	u8 triggering;
+	u8 polarity;
+	u8 resource_type;
+	u8 possible_count;
+	u32 possible[16];
+	u8 initialized: 1;
+	u8 reserved: 7;
+};
+
+struct acpi_pci_link {
+	struct list_head list;
+	struct acpi_device *device;
+	struct acpi_pci_link_irq irq;
+	int refcnt;
+};
+
+struct apd_private_data;
+
+struct apd_device_desc {
+	unsigned int fixed_clk_rate;
+	struct property_entry *properties;
+	int (*setup)(struct apd_private_data *);
+};
+
+struct apd_private_data {
+	struct clk *clk;
+	struct acpi_device *adev;
+	const struct apd_device_desc *dev_desc;
+};
+
+struct acpi_power_dependent_device {
+	struct device *dev;
+	struct list_head node;
+};
+
+struct acpi_power_resource {
+	struct acpi_device device;
+	struct list_head list_node;
+	u32 system_level;
+	u32 order;
+	unsigned int ref_count;
+	u8 state;
+	struct mutex resource_lock;
+	struct list_head dependents;
+};
+
+struct acpi_power_resource_entry {
+	struct list_head node;
+	struct acpi_power_resource *resource;
+};
+
+struct acpi_device_properties {
+	const guid_t *guid;
+	union acpi_object *properties;
+	struct list_head list;
+	void **bufs;
+};
+
+typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
+
+struct acpi_pcc_info {
+	u8 subspace_id;
+	u16 length;
+	u8 *internal_buffer;
+};
+
+struct acpi_ffh_info {
+	u64 offset;
+	u64 length;
+};
+
+struct acpi_reg_walk_info {
+	u32 function;
+	u32 reg_run_count;
+	acpi_adr_space_type space_id;
+};
+
+struct acpi_fixed_event_handler {
+	acpi_event_handler handler;
+	void *context;
+};
+
+struct acpi_fixed_event_info {
+	u8 status_register_id;
+	u8 enable_register_id;
+	u16 status_bit_mask;
+	u16 enable_bit_mask;
+};
+
+enum {
+	AML_FIELD_UPDATE_PRESERVE = 0,
+	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
+	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
+};
+
+struct acpi_bit_register_info {
+	u8 parent_register;
+	u8 bit_position;
+	u16 access_bit_mask;
+};
+
+typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
+
+struct acpi_init_walk_info {
+	u32 table_index;
+	u32 object_count;
+	u32 method_count;
+	u32 serial_method_count;
+	u32 non_serial_method_count;
+	u32 serialized_method_count;
+	u32 device_count;
+	u32 op_region_count;
+	u32 field_count;
+	u32 buffer_count;
+	u32 package_count;
+	u32 op_region_init;
+	u32 field_init;
+	u32 buffer_init;
+	u32 package_init;
+	acpi_owner_id owner_id;
+};
+
+struct acpi_device_walk_info {
+	struct acpi_table_desc *table_desc;
+	struct acpi_evaluate_info *evaluate_info;
+	u32 device_count;
+	u32 num_STA;
+	u32 num_INI;
+};
+
+typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
+
+struct acpi_repair_info {
+	char name[4];
+	acpi_repair_function repair_function;
+};
+
+struct acpi_device_info {
+	u32 info_size;
+	u32 name;
+	acpi_object_type type;
+	u8 param_count;
+	u16 valid;
+	u8 flags;
+	u8 highest_dstates[4];
+	u8 lowest_dstates[5];
+	u64 address;
+	struct acpi_pnp_device_id hardware_id;
+	struct acpi_pnp_device_id unique_id;
+	struct acpi_pnp_device_id class_code;
+	struct acpi_pnp_device_id_list compatible_id_list;
+};
+
+typedef u16 acpi_rs_length;
+
+struct acpi_vendor_uuid {
+	u8 subtype;
+	u8 data[16];
+};
+
+struct acpi_vendor_walk_info {
+	struct acpi_vendor_uuid *uuid;
+	struct acpi_buffer *buffer;
+	acpi_status status;
+};
+
+typedef u32 (*acpi_sci_handler)(void *);
+
+typedef u32 (*acpi_interface_handler)(acpi_string, u32);
+
+struct acpi_mutex_info {
+	void *mutex;
+	u32 use_count;
+	u64 thread_id;
+};
+
+struct acpi_sci_handler_info {
+	struct acpi_sci_handler_info *next;
+	acpi_sci_handler address;
+	void *context;
+};
+
+struct acpi_comment_node {
+	char *comment;
+	struct acpi_comment_node *next;
+};
+
+struct acpi_interface_info {
+	char *name;
+	struct acpi_interface_info *next;
+	u8 flags;
+	u8 value;
+};
+
+struct acpi_pkg_info {
+	u8 *free_space;
+	acpi_size length;
+	u32 object_space;
+	u32 num_packages;
+};
+
+struct acpi_ac {
+	struct power_supply *charger;
+	struct power_supply_desc charger_desc;
+	struct acpi_device *device;
+	long long unsigned int state;
+	struct notifier_block battery_nb;
+};
+
+struct acpi_fan_fps {
+	u64 control;
+	u64 trip_point;
+	u64 speed;
+	u64 noise_level;
+	u64 power;
+	char name[20];
+	struct device_attribute dev_attr;
+};
+
+struct acpi_fan_fif {
+	u8 revision;
+	u8 fine_grain_ctrl;
+	u8 step_size;
+	u8 low_speed_notification;
+};
+
+struct acpi_fan_fst {
+	u64 revision;
+	u64 control;
+	u64 speed;
+};
+
+struct acpi_fan {
+	bool acpi4;
+	struct acpi_fan_fif fif;
+	struct acpi_fan_fps *fps;
+	int fps_count;
+	struct thermal_cooling_device *cdev;
+	struct device_attribute fst_speed;
+	struct device_attribute fine_grain_control;
+};
+
+typedef int mhp_t;
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	long unsigned int present_kernel_pages;
+	long unsigned int present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			long unsigned int max_pages;
+		} s;
+		struct {
+			long unsigned int unit_pages;
+		} d;
+	};
+};
+
+struct memory_block {
+	long unsigned int start_section_nr;
+	long unsigned int state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	long unsigned int nr_vmemmap_pages;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
+
+struct acpi_memory_info {
+	struct list_head list;
+	u64 start_addr;
+	u64 length;
+	short unsigned int caching;
+	short unsigned int write_protect;
+	unsigned int enabled: 1;
+};
+
+struct acpi_memory_device {
+	struct acpi_device *device;
+	struct list_head res_list;
+	int mgid;
+};
+
+struct pnp_fixup {
+	char id[7];
+	void (*quirk_function)(struct pnp_dev *);
+};
+
+struct devm_clk_state {
+	struct clk *clk;
+	void (*exit)(struct clk *);
+};
+
+struct clk_bulk_devres {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_div_table {
+	unsigned int val;
+	unsigned int div;
+};
+
+struct clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_gate {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct u32_fract {
+	__u32 numerator;
+	__u32 denominator;
+};
+
+struct clk_fractional_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 mshift;
+	u8 mwidth;
+	u32 mmask;
+	u8 nshift;
+	u8 nwidth;
+	u32 nmask;
+	u8 flags;
+	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
+	spinlock_t *lock;
+};
+
+struct acpi_table_csrt {
+	struct acpi_table_header header;
+};
+
+struct acpi_csrt_group {
+	u32 length;
+	u32 vendor_id;
+	u32 subvendor_id;
+	u16 device_id;
+	u16 subdevice_id;
+	u16 revision;
+	u16 reserved;
+	u32 shared_info_length;
+};
+
+struct acpi_csrt_shared_info {
+	u16 major_version;
+	u16 minor_version;
+	u32 mmio_base_low;
+	u32 mmio_base_high;
+	u32 gsi_interrupt;
+	u8 interrupt_polarity;
+	u8 interrupt_mode;
+	u8 num_channels;
+	u8 dma_address_width;
+	u16 base_request_line;
+	u16 num_handshake_signals;
+	u32 max_block_size;
+};
+
+struct acpi_dma_spec {
+	int chan_id;
+	int slave_id;
+	struct device *dev;
+};
+
+struct acpi_dma {
+	struct list_head dma_controllers;
+	struct device *dev;
+	struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
+	void *data;
+	short unsigned int base_request_line;
+	short unsigned int end_request_line;
+};
+
+struct acpi_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct acpi_dma_parser_data {
+	struct acpi_dma_spec dma_spec;
+	size_t index;
+	size_t n;
+};
+
+struct fixed_voltage_config {
+	const char *supply_name;
+	const char *input_supply;
+	int microvolts;
+	unsigned int startup_delay;
+	unsigned int off_on_delay;
+	unsigned int enabled_at_boot: 1;
+	struct regulator_init_data *init_data;
+};
+
+struct fixed_regulator_data {
+	struct fixed_voltage_config cfg;
+	struct regulator_init_data init_data;
+	struct platform_device pdev;
+};
+
+struct regulator_bulk_data {
+	const char *supply;
+	int init_load_uA;
+	struct regulator *consumer;
+	int ret;
+};
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	long unsigned int key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	long unsigned int reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+typedef uint32_t char32_t;
+
+struct uni_screen {
+	char32_t *lines[0];
+};
+
+struct vt_notifier_param {
+	struct vc_data *vc;
+	unsigned int c;
+};
+
+struct tiocl_selection {
+	short unsigned int xs;
+	short unsigned int ys;
+	short unsigned int xe;
+	short unsigned int ye;
+	short unsigned int sel_mode;
+};
+
+struct con_driver {
+	const struct consw *con;
+	const char *desc;
+	struct device *dev;
+	int node;
+	int first;
+	int last;
+	int flag;
+};
+
+enum {
+	blank_off = 0,
+	blank_normal_wait = 1,
+	blank_vesa_wait = 2,
+};
+
+enum {
+	EPecma = 0,
+	EPdec = 1,
+	EPeq = 2,
+	EPgt = 3,
+	EPlt = 4,
+};
+
+struct rgb {
+	u8 r;
+	u8 g;
+	u8 b;
+};
+
+enum {
+	ESnormal = 0,
+	ESesc = 1,
+	ESsquare = 2,
+	ESgetpars = 3,
+	ESfunckey = 4,
+	EShash = 5,
+	ESsetG0 = 6,
+	ESsetG1 = 7,
+	ESpercent = 8,
+	EScsiignore = 9,
+	ESnonstd = 10,
+	ESpalette = 11,
+	ESosc = 12,
+	ESapc = 13,
+	ESpm = 14,
+	ESdcs = 15,
+};
+
+struct interval {
+	uint32_t first;
+	uint32_t last;
+};
+
+struct vc_draw_region {
+	long unsigned int from;
+	long unsigned int to;
+	int x;
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct serial_private;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct timedia_struct {
+	int num;
+	const short unsigned int *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct gpio_array;
+
+enum mctrl_gpio_idx {
+	UART_GPIO_CTS = 0,
+	UART_GPIO_DSR = 1,
+	UART_GPIO_DCD = 2,
+	UART_GPIO_RNG = 3,
+	UART_GPIO_RI = 3,
+	UART_GPIO_RTS = 4,
+	UART_GPIO_DTR = 5,
+	UART_GPIO_MAX = 6,
+};
+
+struct mctrl_gpios {
+	struct uart_port *port;
+	struct gpio_desc *gpio[6];
+	int irq[6];
+	unsigned int mctrl_prev;
+	bool mctrl_on;
+};
+
+struct iommu_group {
+	struct kobject kobj;
+	struct kobject *devices_kobj;
+	struct list_head devices;
+	struct xarray pasid_array;
+	struct mutex mutex;
+	void *iommu_data;
+	void (*iommu_data_release)(void *);
+	char *name;
+	int id;
+	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
+	struct iommu_domain *domain;
+	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
+};
+
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
+};
+
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
+};
+
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
+};
+
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+struct group_device {
+	struct list_head list;
+	struct device *dev;
+	char *name;
+};
+
+struct iommu_group_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct iommu_group *, char *);
+	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+};
+
+struct group_for_pci_data {
+	struct pci_dev *pdev;
+	struct iommu_group *group;
+};
+
+struct __group_domain_type {
+	struct device *dev;
+	unsigned int type;
+};
+
+struct drm_auth {
+	drm_magic_t magic;
+};
+
+struct drm_mode_crtc_lut {
+	__u32 crtc_id;
+	__u32 gamma_size;
+	__u64 red;
+	__u64 green;
+	__u64 blue;
+};
+
+struct drm_color_lut {
+	__u16 red;
+	__u16 green;
+	__u16 blue;
+	__u16 reserved;
+};
+
+enum drm_color_lut_tests {
+	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
+	DRM_COLOR_LUT_NON_DECREASING = 2,
+};
+
+enum drm_minor_type {
+	DRM_MINOR_PRIMARY = 0,
+	DRM_MINOR_CONTROL = 1,
+	DRM_MINOR_RENDER = 2,
+	DRM_MINOR_ACCEL = 32,
+};
+
+struct drm_version {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	__kernel_size_t name_len;
+	char *name;
+	__kernel_size_t date_len;
+	char *date;
+	__kernel_size_t desc_len;
+	char *desc;
+};
+
+struct drm_unique {
+	__kernel_size_t unique_len;
+	char *unique;
+};
+
+struct drm_client {
+	int idx;
+	int auth;
+	long unsigned int pid;
+	long unsigned int uid;
+	long unsigned int magic;
+	long unsigned int iocs;
+};
+
+enum drm_stat_type {
+	_DRM_STAT_LOCK = 0,
+	_DRM_STAT_OPENS = 1,
+	_DRM_STAT_CLOSES = 2,
+	_DRM_STAT_IOCTLS = 3,
+	_DRM_STAT_LOCKS = 4,
+	_DRM_STAT_UNLOCKS = 5,
+	_DRM_STAT_VALUE = 6,
+	_DRM_STAT_BYTE = 7,
+	_DRM_STAT_COUNT = 8,
+	_DRM_STAT_IRQ = 9,
+	_DRM_STAT_PRIMARY = 10,
+	_DRM_STAT_SECONDARY = 11,
+	_DRM_STAT_DMA = 12,
+	_DRM_STAT_SPECIAL = 13,
+	_DRM_STAT_MISSED = 14,
+};
+
+struct drm_stats {
+	long unsigned int count;
+	struct {
+		long unsigned int value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+};
+
+struct drm_get_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_set_client_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+enum drm_mm_insert_mode {
+	DRM_MM_INSERT_BEST = 0,
+	DRM_MM_INSERT_LOW = 1,
+	DRM_MM_INSERT_HIGH = 2,
+	DRM_MM_INSERT_EVICT = 3,
+	DRM_MM_INSERT_ONCE = 2147483648,
+	DRM_MM_INSERT_HIGHEST = 2147483650,
+	DRM_MM_INSERT_LOWEST = 2147483649,
+};
+
+struct drm_mm_scan {
+	struct drm_mm *mm;
+	u64 size;
+	u64 alignment;
+	u64 remainder_mask;
+	u64 range_start;
+	u64 range_end;
+	u64 hit_start;
+	u64 hit_end;
+	long unsigned int color;
+	enum drm_mm_insert_mode mode;
+};
+
+struct drm_print_iterator {
+	void *data;
+	ssize_t start;
+	ssize_t remain;
+	ssize_t offset;
+};
+
+struct trace_event_raw_drm_vblank_event {
+	struct trace_entry ent;
+	int crtc;
+	unsigned int seq;
+	ktime_t time;
+	bool high_prec;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_queued {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_delivered {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_drm_vblank_event {};
+
+struct trace_event_data_offsets_drm_vblank_event_queued {};
+
+struct trace_event_data_offsets_drm_vblank_event_delivered {};
+
+typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
+
+typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
+
+typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
+
+struct drm_vblank_work {
+	struct kthread_work base;
+	struct drm_vblank_crtc *vblank;
+	u64 count;
+	int cancelling;
+	struct list_head node;
+};
+
+struct drm_property_blob;
+
+struct drm_connector___2;
+
+struct drm_connector_state___2 {
+	struct drm_connector___2 *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	u32 colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_device___2;
+
+struct drm_connector_funcs___2;
+
+struct drm_tile_group___2;
+
+struct drm_connector___2 {
+	struct drm_device___2 *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs___2 *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	const struct drm_edid *edid_override;
+	struct mutex edid_override_mutex;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state___2 *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group___2 *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+struct drm_connector_funcs___2 {
+	int (*dpms)(struct drm_connector___2 *, int);
+	void (*reset)(struct drm_connector___2 *);
+	enum drm_connector_status (*detect)(struct drm_connector___2 *, bool);
+	void (*force)(struct drm_connector___2 *);
+	int (*fill_modes)(struct drm_connector___2 *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector___2 *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector___2 *);
+	void (*early_unregister)(struct drm_connector___2 *);
+	void (*destroy)(struct drm_connector___2 *);
+	struct drm_connector_state___2 * (*atomic_duplicate_state)(struct drm_connector___2 *);
+	void (*atomic_destroy_state)(struct drm_connector___2 *, struct drm_connector_state___2 *);
+	int (*atomic_set_property)(struct drm_connector___2 *, struct drm_connector_state___2 *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector___2 *, const struct drm_connector_state___2 *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state___2 *);
+	void (*oob_hotplug_event)(struct drm_connector___2 *);
+	void (*debugfs_init)(struct drm_connector___2 *, struct dentry *);
+};
+
+struct drm_mode_config_funcs___2;
+
+struct drm_mode_config___2 {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs___2 *funcs;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool prefer_shadow_fbdev;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_driver___2;
+
+struct drm_master___2;
+
+struct drm_device___2 {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver___2 *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	struct drm_minor *accel;
+	bool registered;
+	struct drm_master___2 *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config___2 mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+};
+
+struct drm_tile_group___2 {
+	struct kref refcount;
+	struct drm_device___2 *dev;
+	int id;
+	u8 group_data[8];
+};
+
+struct drm_master___2 {
+	struct kref refcount;
+	struct drm_device___2 *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master___2 *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+};
+
+enum drm_mode_status;
+
+struct drm_display_mode;
+
+struct drm_mode_config_funcs___2 {
+	struct drm_framebuffer * (*fb_create)(struct drm_device___2 *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device___2 *);
+	enum drm_mode_status (*mode_valid)(struct drm_device___2 *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device___2 *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device___2 *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device___2 *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_driver___2 {
+	int (*load)(struct drm_device___2 *, long unsigned int);
+	int (*open)(struct drm_device___2 *, struct drm_file *);
+	void (*postclose)(struct drm_device___2 *, struct drm_file *);
+	void (*lastclose)(struct drm_device___2 *);
+	void (*unload)(struct drm_device___2 *);
+	void (*release)(struct drm_device___2 *);
+	void (*master_set)(struct drm_device___2 *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device___2 *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device___2 *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device___2 *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device___2 *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device___2 *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device___2 *, struct dma_buf_attachment *, struct sg_table *);
+	int (*gem_prime_mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*dumb_create)(struct drm_file *, struct drm_device___2 *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device___2 *, uint32_t, uint64_t *);
+	int (*dumb_destroy)(struct drm_file *, struct drm_device___2 *, uint32_t);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	long unsigned int addr;
+	unsigned int order;
+};
+
+typedef void * (*devcon_match_fn_t)(const struct fwnode_handle *, const char *, void *);
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	long unsigned int size;
+};
+
+struct node_hmem_attrs {
+	unsigned int read_bandwidth;
+	unsigned int write_bandwidth;
+	unsigned int read_latency;
+	unsigned int write_latency;
+};
+
+enum cache_indexing {
+	NODE_CACHE_DIRECT_MAP = 0,
+	NODE_CACHE_INDEXED = 1,
+	NODE_CACHE_OTHER = 2,
+};
+
+enum cache_write_policy {
+	NODE_CACHE_WRITE_BACK = 0,
+	NODE_CACHE_WRITE_THROUGH = 1,
+	NODE_CACHE_WRITE_OTHER = 2,
+};
+
+struct node_cache_attrs {
+	enum cache_indexing indexing;
+	enum cache_write_policy write_policy;
+	u64 size;
+	u16 line_size;
+	u8 level;
+};
+
+struct node_access_nodes {
+	struct device dev;
+	struct list_head list_node;
+	unsigned int access;
+	struct node_hmem_attrs hmem_attrs;
+};
+
+struct node_cache_info {
+	struct device dev;
+	struct list_head node;
+	struct node_cache_attrs cache_attrs;
+};
+
+struct node_attr {
+	struct device_attribute attr;
+	enum node_states state;
+};
+
+struct regcache_rbtree_node {
+	void *block;
+	long int *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_chip_data;
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	unsigned int type_base;
+	unsigned int *virt_reg_base;
+	const unsigned int *config_base;
+	unsigned int irq_reg_stride;
+	unsigned int init_ack_masked: 1;
+	unsigned int mask_invert: 1;
+	unsigned int mask_unmask_non_inverted: 1;
+	unsigned int use_ack: 1;
+	unsigned int ack_invert: 1;
+	unsigned int clear_ack: 1;
+	unsigned int wake_invert: 1;
+	unsigned int runtime_pm: 1;
+	unsigned int type_invert: 1;
+	unsigned int type_in_mask: 1;
+	unsigned int clear_on_unmask: 1;
+	unsigned int not_fixed_stride: 1;
+	unsigned int status_invert: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_type_reg;
+	int num_virt_regs;
+	int num_config_bases;
+	int num_config_regs;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*handle_mask_sync)(struct regmap *, int, unsigned int, unsigned int, void *);
+	int (*set_type_virt)(unsigned int **, unsigned int, long unsigned int, int);
+	int (*set_type_config)(unsigned int **, unsigned int, const struct regmap_irq *, int);
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct regmap_irq_chip_data {
+	struct mutex lock;
+	struct irq_chip irq_chip;
+	struct regmap *map;
+	const struct regmap_irq_chip *chip;
+	int irq_base;
+	struct irq_domain *domain;
+	int irq;
+	int wake_count;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	void *status_reg_buf;
+	unsigned int *main_status_buf;
+	unsigned int *status_buf;
+	unsigned int *mask_buf;
+	unsigned int *mask_buf_def;
+	unsigned int *wake_buf;
+	unsigned int *type_buf;
+	unsigned int *type_buf_def;
+	unsigned int **virt_buf;
+	unsigned int **config_buf;
+	unsigned int irq_reg_stride;
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	unsigned int clear_status: 1;
+};
+
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct sync_merge_data {
+	char name[32];
+	__s32 fd2;
+	__s32 fence;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct sync_fence_info {
+	char obj_name[32];
+	char driver_name[32];
+	__s32 status;
+	__u32 flags;
+	__u64 timestamp_ns;
+};
+
+struct sync_file_info {
+	char name[32];
+	__s32 status;
+	__u32 flags;
+	__u32 num_fences;
+	__u32 pad;
+	__u64 sync_fence_info;
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void *reserved[1];
+		void *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	unsigned int dxfer_len;
+	void *dxferp;
+	unsigned char *cmdp;
+	void *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct double_list {
+	struct list_head *top;
+	struct list_head *bottom;
+};
+
+struct scsi_proc_entry {
+	struct list_head entry;
+	const struct scsi_host_template *sht;
+	struct proc_dir_entry *proc_dir;
+	unsigned int present;
+};
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct sas_end_device {
+	struct sas_rphy rphy;
+	unsigned int ready_led_meaning: 1;
+	unsigned int tlr_supported: 1;
+	unsigned int tlr_enabled: 1;
+	u16 I_T_nexus_loss_timeout;
+	u16 initiator_response_timeout;
+};
+
+struct sas_host_attrs {
+	struct list_head rphy_list;
+	struct mutex lock;
+	struct request_queue *q;
+	u32 next_target_id;
+	u32 next_expander_id;
+	int next_port_id;
+};
+
+typedef char *__kernel_caddr_t;
+
+typedef __kernel_caddr_t caddr_t;
+
+typedef struct {
+	uint8_t cmd;
+	uint8_t cmdid;
+	uint16_t numsectors;
+	uint32_t lba;
+	uint32_t xferaddr;
+	uint8_t logdrv;
+	uint8_t numsge;
+	uint8_t resvd;
+	uint8_t busy;
+	uint8_t numstatus;
+	uint8_t status;
+	uint8_t completed[46];
+	uint8_t poll;
+	uint8_t ack;
+} __attribute__((packed)) mbox_t;
+
+typedef struct {
+	uint32_t xferaddr_lo;
+	uint32_t xferaddr_hi;
+	mbox_t mbox32;
+} __attribute__((packed)) mbox64_t;
+
+typedef struct {
+	uint8_t timeout: 3;
+	uint8_t ars: 1;
+	uint8_t reserved: 3;
+	uint8_t islogical: 1;
+	uint8_t logdrv;
+	uint8_t channel;
+	uint8_t target;
+	uint8_t queuetag;
+	uint8_t queueaction;
+	uint8_t cdb[10];
+	uint8_t cdblen;
+	uint8_t reqsenselen;
+	uint8_t reqsensearea[32];
+	uint8_t numsge;
+	uint8_t scsistatus;
+	uint32_t dataxferaddr;
+	uint32_t dataxferlen;
+} mraid_passthru_t;
+
+struct uioc {
+	uint8_t signature[16];
+	uint16_t mb_type;
+	uint16_t app_type;
+	uint32_t opcode;
+	uint32_t adapno;
+	uint64_t cmdbuf;
+	uint32_t xferlen;
+	uint32_t data_dir;
+	int32_t status;
+	uint8_t reserved[128];
+	void *user_data;
+	uint32_t user_data_len;
+	uint32_t pad_for_64bit_align;
+	mraid_passthru_t *user_pthru;
+	mraid_passthru_t *pthru32;
+	dma_addr_t pthru32_h;
+	struct list_head list;
+	void (*done)(struct uioc *);
+	caddr_t buf_vaddr;
+	dma_addr_t buf_paddr;
+	int8_t pool_index;
+	uint8_t free_buf;
+	uint8_t timedout;
+	long: 40;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+} __attribute__((packed));
+
+typedef struct uioc uioc_t;
+
+struct uioc_timeout {
+	struct timer_list timer;
+	uioc_t *uioc;
+};
+
+struct mraid_hba_info {
+	uint16_t pci_vendor_id;
+	uint16_t pci_device_id;
+	uint16_t subsys_vendor_id;
+	uint16_t subsys_device_id;
+	uint64_t baseport;
+	uint8_t pci_bus;
+	uint8_t pci_dev_fn;
+	uint8_t pci_slot;
+	uint8_t irq;
+	uint32_t unique_id;
+	uint32_t host_no;
+	uint8_t num_ldrv;
+	long: 24;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct mraid_hba_info mraid_hba_info_t;
+
+struct mcontroller {
+	uint64_t base;
+	uint8_t irq;
+	uint8_t numldrv;
+	uint8_t pcibus;
+	uint16_t pcidev;
+	uint8_t pcifun;
+	uint16_t pciid;
+	uint16_t pcivendor;
+	uint8_t pcislot;
+	uint32_t uid;
+} __attribute__((packed));
+
+typedef struct mcontroller mcontroller_t;
+
+struct mm_dmapool {
+	caddr_t vaddr;
+	dma_addr_t paddr;
+	uint32_t buf_size;
+	struct dma_pool *handle;
+	spinlock_t lock;
+	uint8_t in_use;
+};
+
+typedef struct mm_dmapool mm_dmapool_t;
+
+struct mraid_mmadp {
+	uint32_t unique_id;
+	uint32_t drvr_type;
+	long unsigned int drvr_data;
+	uint16_t timeout;
+	uint8_t max_kioc;
+	struct pci_dev *pdev;
+	int (*issue_uioc)(long unsigned int, uioc_t *, uint32_t);
+	uint32_t quiescent;
+	struct list_head list;
+	uioc_t *kioc_list;
+	struct list_head kioc_pool;
+	spinlock_t kioc_pool_lock;
+	struct semaphore kioc_semaphore;
+	mbox64_t *mbox_list;
+	struct dma_pool *pthru_dma_pool;
+	mm_dmapool_t dma_pool_list[5];
+};
+
+typedef struct mraid_mmadp mraid_mmadp_t;
+
+struct mimd {
+	uint32_t inlen;
+	uint32_t outlen;
+	union {
+		uint8_t fca[16];
+		struct {
+			uint8_t opcode;
+			uint8_t subopcode;
+			uint16_t adapno;
+			uint8_t *buffer;
+			uint32_t length;
+		} __attribute__((packed)) fcs;
+	} ui;
+	uint8_t mbox[18];
+	mraid_passthru_t pthru;
+	char *data;
+} __attribute__((packed));
+
+typedef struct mimd mimd_t;
+
+enum MR_RAID_FLAGS_IO_SUB_TYPE {
+	MR_RAID_FLAGS_IO_SUB_TYPE_NONE = 0,
+	MR_RAID_FLAGS_IO_SUB_TYPE_SYSTEM_PD = 1,
+	MR_RAID_FLAGS_IO_SUB_TYPE_RMW_DATA = 2,
+	MR_RAID_FLAGS_IO_SUB_TYPE_RMW_P = 3,
+	MR_RAID_FLAGS_IO_SUB_TYPE_RMW_Q = 4,
+	MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS = 6,
+	MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7,
+	MR_RAID_FLAGS_IO_SUB_TYPE_R56_DIV_OFFLOAD = 8,
+};
+
+enum REGION_TYPE {
+	REGION_TYPE_UNUSED = 0,
+	REGION_TYPE_SHARED_READ = 1,
+	REGION_TYPE_SHARED_WRITE = 2,
+	REGION_TYPE_EXCLUSIVE = 3,
+};
+
+struct MPI25_IEEE_SGE_CHAIN64 {
+	__le64 Address;
+	__le32 Length;
+	__le16 Reserved1;
+	u8 NextChainOffset;
+	u8 Flags;
+};
+
+struct MPI2_SCSI_TASK_MANAGE_REQUEST {
+	u16 DevHandle;
+	u8 ChainOffset;
+	u8 Function;
+	u8 Reserved1;
+	u8 TaskType;
+	u8 Reserved2;
+	u8 MsgFlags;
+	u8 VP_ID;
+	u8 VF_ID;
+	u16 Reserved3;
+	u8 LUN[8];
+	u32 Reserved4[7];
+	u16 TaskMID;
+	u16 Reserved5;
+};
+
+struct MPI2_SCSI_TASK_MANAGE_REPLY {
+	u16 DevHandle;
+	u8 MsgLength;
+	u8 Function;
+	u8 ResponseCode;
+	u8 TaskType;
+	u8 Reserved1;
+	u8 MsgFlags;
+	u8 VP_ID;
+	u8 VF_ID;
+	u16 Reserved2;
+	u16 Reserved3;
+	u16 IOCStatus;
+	u32 IOCLogInfo;
+	u32 TerminationCount;
+	u32 ResponseInfo;
+};
+
+struct MR_TM_REQUEST {
+	char request[128];
+};
+
+struct MR_TM_REPLY {
+	char reply[128];
+};
+
+struct MR_TASK_MANAGE_REQUEST {
+	struct MR_TM_REQUEST TmRequest;
+	union {
+		struct {
+			u32 isTMForLD: 1;
+			u32 isTMForPD: 1;
+			u32 reserved1: 30;
+			u32 reserved2;
+		} tmReqFlags;
+		struct MR_TM_REPLY TMReply;
+	};
+};
+
+struct IO_REQUEST_INFO {
+	u64 ldStartBlock;
+	u32 numBlocks;
+	u16 ldTgtId;
+	u8 isRead;
+	__le16 devHandle;
+	u8 pd_interface;
+	u64 pdBlock;
+	u8 fpOkForIo;
+	u8 IoforUnevenSpan;
+	u8 start_span;
+	u8 do_fp_rlbypass;
+	u64 start_row;
+	u8 span_arm;
+	u8 pd_after_lb;
+	u16 r1_alt_dev_handle;
+	bool ra_capable;
+	u8 data_arms;
+};
+
+struct MR_LD_TARGET_SYNC {
+	u8 targetId;
+	u8 reserved;
+	__le16 seqNum;
+};
+
+typedef struct LOG_BLOCK_SPAN_INFO *PLD_SPAN_INFO;
+
+union desc_value {
+	__le64 word;
+	struct {
+		__le32 low;
+		__le32 high;
+	} u;
+};
+
+enum CMD_RET_VALUES {
+	REFIRE_CMD = 1,
+	COMPLETE_CMD = 2,
+	RETURN_CMD = 3,
+};
+
+enum FW_BOOT_CONTEXT {
+	PROBE_CONTEXT = 0,
+	OCR_CONTEXT = 1,
+};
+
+struct _MPI2_MANPAGE7_CONNECTOR_INFO {
+	U32___2 Pinout;
+	U8___2 Connector[16];
+	U8___2 Location;
+	U8___2 ReceptacleID;
+	U16___2 Slot;
+	U16___2 Slotx2;
+	U16___2 Slotx4;
+};
+
+typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO MPI2_MANPAGE7_CONNECTOR_INFO;
+
+struct _MPI2_CONFIG_PAGE_MAN_7 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+	U32___2 Flags;
+	U8___2 EnclosureName[16];
+	U8___2 NumPhys;
+	U8___2 Reserved3;
+	U16___2 Reserved4;
+	MPI2_MANPAGE7_CONNECTOR_INFO ConnectorInfo[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_MAN_7 Mpi2ManufacturingPage7_t;
+
+struct _MPI2_CONFIG_PAGE_IO_UNIT_3 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U8___2 GPIOCount;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U16___2 GPIOVal[36];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_3 Mpi2IOUnitPage3_t;
+
+struct _MPI2_RAIDVOL0_PHYS_DISK {
+	U8___2 RAIDSetNum;
+	U8___2 PhysDiskMap;
+	U8___2 PhysDiskNum;
+	U8___2 Reserved;
+};
+
+typedef struct _MPI2_RAIDVOL0_PHYS_DISK MPI2_RAIDVOL0_PHYS_DISK;
+
+struct _MPI2_RAIDVOL0_SETTINGS {
+	U16___2 Settings;
+	U8___2 HotSparePool;
+	U8___2 Reserved;
+};
+
+typedef struct _MPI2_RAIDVOL0_SETTINGS MPI2_RAIDVOL0_SETTINGS;
+
+struct _MPI2_CONFIG_PAGE_RAID_VOL_0 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U16___2 DevHandle;
+	U8___2 VolumeState;
+	U8___2 VolumeType;
+	U32___2 VolumeStatusFlags;
+	MPI2_RAIDVOL0_SETTINGS VolumeSettings;
+	U64___2 MaxLBA;
+	U32___2 StripeSize;
+	U16___2 BlockSize;
+	U16___2 Reserved1;
+	U8___2 SupportedPhysDisks;
+	U8___2 ResyncRate;
+	U16___2 DataScrubDuration;
+	U8___2 NumPhysDisks;
+	U8___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 InactiveStatus;
+	MPI2_RAIDVOL0_PHYS_DISK PhysDisk[1];
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_0 Mpi2RaidVolPage0_t;
+
+struct _MPI2_CONFIG_PAGE_RAID_VOL_1 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U16___2 DevHandle;
+	U16___2 Reserved0;
+	U8___2 GUID[24];
+	U8___2 Name[16];
+	U64___2 WWID;
+	U32___2 Reserved1;
+	U32___2 Reserved2;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_1 Mpi2RaidVolPage1_t;
+
+struct _MPI2_RAIDPHYSDISK0_SETTINGS {
+	U16___2 Reserved1;
+	U8___2 HotSparePool;
+	U8___2 Reserved2;
+};
+
+typedef struct _MPI2_RAIDPHYSDISK0_SETTINGS MPI2_RAIDPHYSDISK0_SETTINGS;
+
+struct _MPI2_RAIDPHYSDISK0_INQUIRY_DATA {
+	U8___2 VendorID[8];
+	U8___2 ProductID[16];
+	U8___2 ProductRevLevel[4];
+	U8___2 SerialNum[32];
+};
+
+typedef struct _MPI2_RAIDPHYSDISK0_INQUIRY_DATA MPI2_RAIDPHYSDISK0_INQUIRY_DATA;
+
+struct _MPI2_CONFIG_PAGE_RD_PDISK_0 {
+	MPI2_CONFIG_PAGE_HEADER Header;
+	U16___2 DevHandle;
+	U8___2 Reserved1;
+	U8___2 PhysDiskNum;
+	MPI2_RAIDPHYSDISK0_SETTINGS PhysDiskSettings;
+	U32___2 Reserved2;
+	MPI2_RAIDPHYSDISK0_INQUIRY_DATA InquiryData;
+	U32___2 Reserved3;
+	U8___2 PhysDiskState;
+	U8___2 OfflineReason;
+	U8___2 IncompatibleReason;
+	U8___2 PhysDiskAttributes;
+	U32___2 PhysDiskStatusFlags;
+	U64___2 DeviceMaxLBA;
+	U64___2 HostMaxLBA;
+	U64___2 CoercedMaxLBA;
+	U16___2 BlockSize;
+	U16___2 Reserved5;
+	U32___2 Reserved6;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_0 Mpi2RaidPhysDiskPage0_t;
+
+struct _MPI2_SAS_IO_UNIT0_PHY_DATA {
+	U8___2 Port;
+	U8___2 PortFlags;
+	U8___2 PhyFlags;
+	U8___2 NegotiatedLinkRate;
+	U32___2 ControllerPhyDeviceInfo;
+	U16___2 AttachedDevHandle;
+	U16___2 ControllerDevHandle;
+	U32___2 DiscoveryStatus;
+	U32___2 Reserved;
+};
+
+typedef struct _MPI2_SAS_IO_UNIT0_PHY_DATA MPI2_SAS_IO_UNIT0_PHY_DATA;
+
+struct _MPI2_CONFIG_PAGE_SASIOUNIT_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U8___2 NumPhys;
+	U8___2 Reserved2;
+	U16___2 Reserved3;
+	MPI2_SAS_IO_UNIT0_PHY_DATA PhyData[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_0 Mpi2SasIOUnitPage0_t;
+
+struct _MPI2_CONFIG_PAGE_EXPANDER_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U8___2 PhysicalPort;
+	U8___2 ReportGenLength;
+	U16___2 EnclosureHandle;
+	U64___2 SASAddress;
+	U32___2 DiscoveryStatus;
+	U16___2 DevHandle;
+	U16___2 ParentDevHandle;
+	U16___2 ExpanderChangeCount;
+	U16___2 ExpanderRouteIndexes;
+	U8___2 NumPhys;
+	U8___2 SASLevel;
+	U16___2 Flags;
+	U16___2 STPBusInactivityTimeLimit;
+	U16___2 STPMaxConnectTimeLimit;
+	U16___2 STP_SMP_NexusLossTime;
+	U16___2 MaxNumRoutedSasAddresses;
+	U64___2 ActiveZoneManagerSASAddress;
+	U16___2 ZoneLockInactivityLimit;
+	U16___2 Reserved1;
+	U8___2 TimeToReducedFunc;
+	U8___2 InitialTimeToReducedFunc;
+	U8___2 MaxReducedFuncTime;
+	U8___2 Reserved2;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_EXPANDER_0 Mpi2ExpanderPage0_t;
+
+struct _MPI2_CONFIG_PAGE_EXPANDER_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U8___2 PhysicalPort;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U8___2 NumPhys;
+	U8___2 Phy;
+	U16___2 NumTableEntriesProgrammed;
+	U8___2 ProgrammedLinkRate;
+	U8___2 HwLinkRate;
+	U16___2 AttachedDevHandle;
+	U32___2 PhyInfo;
+	U32___2 AttachedDeviceInfo;
+	U16___2 ExpanderDevHandle;
+	U8___2 ChangeCount;
+	U8___2 NegotiatedLinkRate;
+	U8___2 PhyIdentifier;
+	U8___2 AttachedPhyIdentifier;
+	U8___2 Reserved3;
+	U8___2 DiscoveryInfo;
+	U32___2 AttachedPhyInfo;
+	U8___2 ZoneGroup;
+	U8___2 SelfConfigStatus;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_EXPANDER_1 Mpi2ExpanderPage1_t;
+
+struct _MPI2_CONFIG_PAGE_SAS_DEV_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 Slot;
+	U16___2 EnclosureHandle;
+	U64___2 SASAddress;
+	U16___2 ParentDevHandle;
+	U8___2 PhyNum;
+	U8___2 AccessStatus;
+	U16___2 DevHandle;
+	U8___2 AttachedPhyIdentifier;
+	U8___2 ZoneGroup;
+	U32___2 DeviceInfo;
+	U16___2 Flags;
+	U8___2 PhysicalPort;
+	U8___2 MaxPortConnections;
+	U64___2 DeviceName;
+	U8___2 PortGroups;
+	U8___2 DmaGroup;
+	U8___2 ControlGroup;
+	U8___2 EnclosureLevel;
+	U32___2 ConnectorName[4];
+	U32___2 Reserved3;
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 Mpi2SasDevicePage0_t;
+
+struct _MPI2_CONFIG_PAGE_SAS_DEV_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U64___2 SASAddress;
+	U32___2 Reserved2;
+	U16___2 DevHandle;
+	U16___2 Reserved3;
+	U8___2 InitialRegDeviceFIS[20];
+} __attribute__((packed));
+
+typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_1 Mpi2SasDevicePage1_t;
+
+struct _MPI2_CONFIG_PAGE_SAS_PHY_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 OwnerDevHandle;
+	U16___2 Reserved1;
+	U16___2 AttachedDevHandle;
+	U8___2 AttachedPhyIdentifier;
+	U8___2 Reserved2;
+	U32___2 AttachedPhyInfo;
+	U8___2 ProgrammedLinkRate;
+	U8___2 HwLinkRate;
+	U8___2 ChangeCount;
+	U8___2 Flags;
+	U32___2 PhyInfo;
+	U8___2 NegotiatedLinkRate;
+	U8___2 Reserved3;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_0 Mpi2SasPhyPage0_t;
+
+struct _MPI2_CONFIG_PAGE_SAS_PHY_1 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U32___2 Reserved1;
+	U32___2 InvalidDwordCount;
+	U32___2 RunningDisparityErrorCount;
+	U32___2 LossDwordSynchCount;
+	U32___2 PhyResetProblemCount;
+};
+
+typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_1 Mpi2SasPhyPage1_t;
+
+struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT {
+	U16___2 ElementFlags;
+	U16___2 VolDevHandle;
+	U8___2 HotSparePool;
+	U8___2 PhysDiskNum;
+	U16___2 PhysDiskDevHandle;
+};
+
+typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT MPI2_RAIDCONFIG0_CONFIG_ELEMENT;
+
+struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U8___2 NumHotSpares;
+	U8___2 NumPhysDisks;
+	U8___2 NumVolumes;
+	U8___2 ConfigNum;
+	U32___2 Flags;
+	U8___2 ConfigGUID[24];
+	U32___2 Reserved1;
+	U8___2 NumElements;
+	U8___2 Reserved2;
+	U16___2 Reserved3;
+	MPI2_RAIDCONFIG0_CONFIG_ELEMENT ConfigElement[1];
+};
+
+typedef struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 Mpi2RaidConfigurationPage0_t;
+
+struct _MPI26_CONFIG_PAGE_PCIEDEV_0 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 Slot;
+	U16___2 EnclosureHandle;
+	U64___2 WWID;
+	U16___2 ParentDevHandle;
+	U8___2 PortNum;
+	U8___2 AccessStatus;
+	U16___2 DevHandle;
+	U8___2 PhysicalPort;
+	U8___2 Reserved1;
+	U32___2 DeviceInfo;
+	U32___2 Flags;
+	U8___2 SupportedLinkRates;
+	U8___2 MaxPortWidth;
+	U8___2 NegotiatedPortWidth;
+	U8___2 NegotiatedLinkRate;
+	U8___2 EnclosureLevel;
+	U8___2 Reserved2;
+	U16___2 Reserved3;
+	U8___2 ConnectorName[4];
+	U32___2 Reserved4;
+	U32___2 Reserved5;
+} __attribute__((packed));
+
+typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_0 Mpi26PCIeDevicePage0_t;
+
+struct _MPI26_CONFIG_PAGE_PCIEDEV_2 {
+	MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;
+	U16___2 DevHandle;
+	U8___2 ControllerResetTO;
+	U8___2 Reserved1;
+	U32___2 MaximumDataTransferSize;
+	U32___2 Capabilities;
+	U16___2 NOIOB;
+	U16___2 ShutdownLatency;
+	U16___2 VendorID;
+	U16___2 DeviceID;
+	U16___2 SubsystemVendorID;
+	U16___2 SubsystemID;
+	U8___2 RevisionID;
+	U8___2 Reserved21[3];
+};
+
+typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_2 Mpi26PCIeDevicePage2_t;
+
+struct config_request {
+	u16 sz;
+	void *page;
+	dma_addr_t page_dma;
+};
+
+union _MPI2_SIMPLE_SGE_UNION {
+	MPI2_SGE_SIMPLE_UNION MpiSimple;
+	MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
+};
+
+typedef union _MPI2_SIMPLE_SGE_UNION MPI2_SIMPLE_SGE_UNION;
+
+struct _MPI2_SCSI_IO_REPLY {
+	U16___2 DevHandle;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U8___2 SCSIStatus;
+	U8___2 SCSIState;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 TransferCount;
+	U32___2 SenseCount;
+	U32___2 ResponseInfo;
+	U16___2 TaskTag;
+	U16___2 SCSIStatusQualifier;
+	U32___2 BidirectionalTransferCount;
+	U32___2 EEDPErrorOffset;
+	U16___2 EEDPObservedAppTag;
+	U16___2 EEDPObservedGuard;
+	U32___2 EEDPObservedRefTag;
+};
+
+typedef struct _MPI2_SCSI_IO_REPLY Mpi2SCSIIOReply_t;
+
+struct _MPI2_SCSI_TASK_MANAGE_REQUEST {
+	U16___2 DevHandle;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U8___2 Reserved1;
+	U8___2 TaskType;
+	U8___2 Reserved2;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved3;
+	U8___2 LUN[8];
+	U32___2 Reserved4[7];
+	U16___2 TaskMID;
+	U16___2 Reserved5;
+};
+
+typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST Mpi2SCSITaskManagementRequest_t;
+
+struct _MPI2_SCSI_TASK_MANAGE_REPLY {
+	U16___2 DevHandle;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U8___2 ResponseCode;
+	U8___2 TaskType;
+	U8___2 Reserved1;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U16___2 Reserved3;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 TerminationCount;
+	U32___2 ResponseInfo;
+};
+
+typedef struct _MPI2_SCSI_TASK_MANAGE_REPLY Mpi2SCSITaskManagementReply_t;
+
+struct _MPI2_TOOLBOX_CLEAN_REQUEST {
+	U8___2 Tool;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U32___2 Flags;
+};
+
+typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST Mpi2ToolboxCleanRequest_t;
+
+struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST {
+	U8___2 Tool;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	MPI2_SGE_SIMPLE_UNION SGL;
+} __attribute__((packed));
+
+typedef struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST Mpi2ToolboxMemMoveRequest_t;
+
+struct _MPI2_DIAG_BUFFER_POST_REQUEST {
+	U8___2 ExtendedType;
+	U8___2 BufferType;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U64___2 BufferAddress;
+	U32___2 BufferLength;
+	U32___2 Reserved5;
+	U32___2 Reserved6;
+	U32___2 Flags;
+	U32___2 ProductSpecific[23];
+} __attribute__((packed));
+
+typedef struct _MPI2_DIAG_BUFFER_POST_REQUEST Mpi2DiagBufferPostRequest_t;
+
+struct _MPI2_DIAG_BUFFER_POST_REPLY {
+	U8___2 ExtendedType;
+	U8___2 BufferType;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Reserved5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 TransferLength;
+};
+
+typedef struct _MPI2_DIAG_BUFFER_POST_REPLY Mpi2DiagBufferPostReply_t;
+
+struct _MPI2_DIAG_RELEASE_REQUEST {
+	U8___2 Reserved1;
+	U8___2 BufferType;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI2_DIAG_RELEASE_REQUEST Mpi2DiagReleaseRequest_t;
+
+struct _MPI2_DIAG_RELEASE_REPLY {
+	U8___2 Reserved1;
+	U8___2 BufferType;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 Reserved2;
+	U8___2 Reserved3;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved4;
+	U16___2 Reserved5;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+};
+
+typedef struct _MPI2_DIAG_RELEASE_REPLY Mpi2DiagReleaseReply_t;
+
+struct _MPI2_SMP_PASSTHROUGH_REQUEST {
+	U8___2 PassthroughFlags;
+	U8___2 PhysicalPort;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 RequestDataLength;
+	U8___2 SGLFlags;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U32___2 Reserved2;
+	U64___2 SASAddress;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+	MPI2_SIMPLE_SGE_UNION SGL;
+};
+
+typedef struct _MPI2_SMP_PASSTHROUGH_REQUEST Mpi2SmpPassthroughRequest_t;
+
+struct _MPI26_NVME_ENCAPSULATED_ERROR_REPLY {
+	U16___2 DevHandle;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 EncapsulatedCommandLength;
+	U8___2 Reserved1;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U16___2 Reserved3;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U16___2 ErrorResponseCount;
+	U16___2 Reserved4;
+};
+
+typedef struct _MPI26_NVME_ENCAPSULATED_ERROR_REPLY Mpi26NVMeEncapsulatedErrorReply_t;
+
+struct _raid_device;
+
+struct _sas_device;
+
+struct MPT3SAS_TARGET {
+	struct scsi_target *starget;
+	u64 sas_address;
+	struct _raid_device *raid_device;
+	u16 handle;
+	int num_luns;
+	u32 flags;
+	u8 deleted;
+	u8 tm_busy;
+	struct hba_port *port;
+	struct _sas_device *sas_dev;
+	struct _pcie_device *pcie_dev;
+};
+
+struct _raid_device {
+	struct list_head list;
+	struct scsi_target *starget;
+	struct scsi_device *sdev;
+	u64 wwid;
+	u16 handle;
+	u16 block_sz;
+	int id;
+	int channel;
+	u8 volume_type;
+	u8 num_pds;
+	u8 responding;
+	u8 percent_complete;
+	u8 direct_io_enabled;
+	u8 stripe_exponent;
+	u8 block_exponent;
+	u64 max_lba;
+	u32 stripe_sz;
+	u32 device_info;
+	u16 pd_handle[8];
+};
+
+struct _sas_device {
+	struct list_head list;
+	struct scsi_target *starget;
+	u64 sas_address;
+	u64 device_name;
+	u16 handle;
+	u64 sas_address_parent;
+	u16 enclosure_handle;
+	u64 enclosure_logical_id;
+	u16 volume_handle;
+	u64 volume_wwid;
+	u32 device_info;
+	int id;
+	int channel;
+	u16 slot;
+	u8 phy;
+	u8 responding;
+	u8 fast_path;
+	u8 pfa_led_on;
+	u8 pend_sas_rphy_add;
+	u8 enclosure_level;
+	u8 chassis_slot;
+	u8 is_chassis_slot_valid;
+	u8 connector_name[5];
+	struct kref refcount;
+	u8 port_type;
+	struct hba_port *port;
+	struct sas_rphy *rphy;
+};
+
+struct MPT3SAS_DEVICE {
+	struct MPT3SAS_TARGET *sas_target;
+	unsigned int lun;
+	u32 flags;
+	u8 configured_lun;
+	u8 block;
+	u8 tlr_snoop_check;
+	u8 ignore_delay_remove;
+	u8 ncq_prio_enable;
+	long unsigned int ata_command_pending;
+};
+
+struct mpt3_ioctl_header {
+	uint32_t ioc_number;
+	uint32_t port_number;
+	uint32_t max_data_size;
+};
+
+struct mpt3_ioctl_diag_reset {
+	struct mpt3_ioctl_header hdr;
+};
+
+struct mpt3_ioctl_pci_info {
+	union {
+		struct {
+			uint32_t device: 5;
+			uint32_t function: 3;
+			uint32_t bus: 24;
+		} bits;
+		uint32_t word;
+	} u;
+	uint32_t segment_id;
+};
+
+struct mpt3_ioctl_iocinfo {
+	struct mpt3_ioctl_header hdr;
+	uint32_t adapter_type;
+	uint32_t port_number;
+	uint32_t pci_id;
+	uint32_t hw_rev;
+	uint32_t subsystem_device;
+	uint32_t subsystem_vendor;
+	uint32_t rsvd0;
+	uint32_t firmware_version;
+	uint32_t bios_version;
+	uint8_t driver_version[32];
+	uint8_t rsvd1;
+	uint8_t scsi_id;
+	uint16_t rsvd2;
+	struct mpt3_ioctl_pci_info pci_information;
+};
+
+struct mpt3_ioctl_eventquery {
+	struct mpt3_ioctl_header hdr;
+	uint16_t event_entries;
+	uint16_t rsvd;
+	uint32_t event_types[4];
+};
+
+struct mpt3_ioctl_eventenable {
+	struct mpt3_ioctl_header hdr;
+	uint32_t event_types[4];
+};
+
+struct MPT3_IOCTL_EVENTS {
+	uint32_t event;
+	uint32_t context;
+	uint8_t data[192];
+};
+
+struct mpt3_ioctl_eventreport {
+	struct mpt3_ioctl_header hdr;
+	struct MPT3_IOCTL_EVENTS event_data[1];
+};
+
+struct mpt3_ioctl_command {
+	struct mpt3_ioctl_header hdr;
+	uint32_t timeout;
+	void *reply_frame_buf_ptr;
+	void *data_in_buf_ptr;
+	void *data_out_buf_ptr;
+	void *sense_data_ptr;
+	uint32_t max_reply_bytes;
+	uint32_t data_in_size;
+	uint32_t data_out_size;
+	uint32_t max_sense_bytes;
+	uint32_t data_sge_offset;
+	uint8_t mf[1];
+};
+
+struct mpt3_ioctl_btdh_mapping {
+	struct mpt3_ioctl_header hdr;
+	uint32_t id;
+	uint32_t bus;
+	uint16_t handle;
+	uint16_t rsvd;
+};
+
+struct mpt3_diag_register {
+	struct mpt3_ioctl_header hdr;
+	uint8_t reserved;
+	uint8_t buffer_type;
+	uint16_t application_flags;
+	uint32_t diagnostic_flags;
+	uint32_t product_specific[23];
+	uint32_t requested_buffer_size;
+	uint32_t unique_id;
+};
+
+struct mpt3_diag_unregister {
+	struct mpt3_ioctl_header hdr;
+	uint32_t unique_id;
+};
+
+struct mpt3_diag_query {
+	struct mpt3_ioctl_header hdr;
+	uint8_t reserved;
+	uint8_t buffer_type;
+	uint16_t application_flags;
+	uint32_t diagnostic_flags;
+	uint32_t product_specific[23];
+	uint32_t total_buffer_size;
+	uint32_t driver_added_buffer_size;
+	uint32_t unique_id;
+};
+
+struct mpt3_diag_release {
+	struct mpt3_ioctl_header hdr;
+	uint32_t unique_id;
+};
+
+struct mpt3_diag_read_buffer {
+	struct mpt3_ioctl_header hdr;
+	uint8_t status;
+	uint8_t reserved;
+	uint16_t flags;
+	uint32_t starting_offset;
+	uint32_t bytes_to_read;
+	uint32_t unique_id;
+	uint32_t diagnostic_data[1];
+};
+
+struct mpt3_addnl_diag_query {
+	struct mpt3_ioctl_header hdr;
+	uint32_t unique_id;
+	struct htb_rel_query rel_query;
+	uint32_t reserved2[2];
+};
+
+enum block_state {
+	NON_BLOCKING = 0,
+	BLOCKING = 1,
+};
+
+struct DIAG_BUFFER_START {
+	__le32 Size;
+	__le32 DiagVersion;
+	u8 BufferType;
+	u8 Reserved[3];
+	__le32 Reserved1;
+	__le32 Reserved2;
+	__le32 Reserved3;
+};
+
+enum chip_flavors {
+	chip_6320 = 0,
+	chip_6440 = 1,
+	chip_6485 = 2,
+	chip_9480 = 3,
+	chip_9180 = 4,
+	chip_9445 = 5,
+	chip_9485 = 6,
+	chip_1300 = 7,
+	chip_1320 = 8,
+};
+
+enum mvumi_qc_result {
+	MV_QUEUE_COMMAND_RESULT_SENT = 0,
+	MV_QUEUE_COMMAND_RESULT_NO_RESOURCE = 1,
+};
+
+struct mvumi_hw_regs {
+	void *main_int_cause_reg;
+	void *enpointa_mask_reg;
+	void *enpointb_mask_reg;
+	void *rstoutn_en_reg;
+	void *ctrl_sts_reg;
+	void *rstoutn_mask_reg;
+	void *sys_soft_rst_reg;
+	void *pciea_to_arm_drbl_reg;
+	void *arm_to_pciea_drbl_reg;
+	void *arm_to_pciea_mask_reg;
+	void *pciea_to_arm_msg0;
+	void *pciea_to_arm_msg1;
+	void *arm_to_pciea_msg0;
+	void *arm_to_pciea_msg1;
+	void *reset_request;
+	void *reset_enable;
+	void *inb_list_basel;
+	void *inb_list_baseh;
+	void *inb_aval_count_basel;
+	void *inb_aval_count_baseh;
+	void *inb_write_pointer;
+	void *inb_read_pointer;
+	void *outb_list_basel;
+	void *outb_list_baseh;
+	void *outb_copy_basel;
+	void *outb_copy_baseh;
+	void *outb_copy_pointer;
+	void *outb_read_pointer;
+	void *inb_isr_cause;
+	void *outb_isr_cause;
+	void *outb_coal_cfg;
+	void *outb_coal_timeout;
+	u32 int_comaout;
+	u32 int_comaerr;
+	u32 int_dl_cpu2pciea;
+	u32 int_mu;
+	u32 int_drbl_int_mask;
+	u32 int_main_int_mask;
+	u32 cl_pointer_toggle;
+	u32 cl_slot_num_mask;
+	u32 clic_irq;
+	u32 clic_in_err;
+	u32 clic_out_err;
+};
+
+struct mvumi_dyn_list_entry {
+	u32 src_low_addr;
+	u32 src_high_addr;
+	u32 if_length;
+	u32 reserve;
+};
+
+enum {
+	DRBL_HANDSHAKE = 1,
+	DRBL_SOFT_RESET = 2,
+	DRBL_BUS_CHANGE = 4,
+	DRBL_EVENT_NOTIFY = 8,
+	DRBL_MU_RESET = 16,
+	DRBL_HANDSHAKE_ISR = 1,
+	CMD_FLAG_NON_DATA = 1,
+	CMD_FLAG_DMA = 2,
+	CMD_FLAG_PIO = 4,
+	CMD_FLAG_DATA_IN = 8,
+	CMD_FLAG_DATA_OUT = 16,
+	CMD_FLAG_PRDT_IN_HOST = 32,
+};
+
+struct mvumi_hotplug_event {
+	u16 size;
+	u8 dummy[2];
+	u8 bitmap[0];
+};
+
+struct mvumi_driver_event {
+	u32 time_stamp;
+	u32 sequence_no;
+	u32 event_id;
+	u8 severity;
+	u8 param_count;
+	u16 device_id;
+	u32 params[4];
+	u8 sense_data_length;
+	u8 Reserved1;
+	u8 sense_data[30];
+};
+
+struct mvumi_event_req {
+	unsigned char count;
+	unsigned char reserved[3];
+	struct mvumi_driver_event events[6];
+};
+
+struct mvumi_hba;
+
+struct mvumi_events_wq {
+	struct work_struct work_q;
+	struct mvumi_hba *mhba;
+	unsigned int event;
+	void *param;
+};
+
+struct mvumi_tag {
+	short unsigned int *stack;
+	short unsigned int top;
+	short unsigned int size;
+};
+
+struct mvumi_instance_template;
+
+struct mvumi_cmd;
+
+struct mvumi_hba {
+	void *base_addr[6];
+	u32 pci_base[6];
+	void *mmio;
+	struct list_head cmd_pool;
+	struct Scsi_Host *shost;
+	wait_queue_head_t int_cmd_wait_q;
+	struct pci_dev *pdev;
+	unsigned int unique_id;
+	atomic_t fw_outstanding;
+	struct mvumi_instance_template *instancet;
+	void *ib_list;
+	dma_addr_t ib_list_phys;
+	void *ib_frame;
+	dma_addr_t ib_frame_phys;
+	void *ob_list;
+	dma_addr_t ob_list_phys;
+	void *ib_shadow;
+	dma_addr_t ib_shadow_phys;
+	void *ob_shadow;
+	dma_addr_t ob_shadow_phys;
+	void *handshake_page;
+	dma_addr_t handshake_page_phys;
+	unsigned int global_isr;
+	unsigned int isr_status;
+	short unsigned int max_sge;
+	short unsigned int max_target_id;
+	unsigned char *target_map;
+	unsigned int max_io;
+	unsigned int list_num_io;
+	unsigned int ib_max_size;
+	unsigned int ob_max_size;
+	unsigned int ib_max_size_setting;
+	unsigned int ob_max_size_setting;
+	unsigned int max_transfer_size;
+	unsigned char hba_total_pages;
+	unsigned char fw_flag;
+	unsigned char request_id_enabled;
+	unsigned char eot_flag;
+	short unsigned int hba_capability;
+	short unsigned int io_seq;
+	unsigned int ib_cur_slot;
+	unsigned int ob_cur_slot;
+	unsigned int fw_state;
+	struct mutex sas_discovery_mutex;
+	struct list_head ob_data_list;
+	struct list_head free_ob_list;
+	struct list_head res_list;
+	struct list_head waiting_req_list;
+	struct mvumi_tag tag_pool;
+	struct mvumi_cmd **tag_cmd;
+	struct mvumi_hw_regs *regs;
+	struct mutex device_lock;
+	struct list_head mhba_dev_list;
+	struct list_head shost_dev_list;
+	struct task_struct *dm_thread;
+	atomic_t pnp_count;
+};
+
+struct mvumi_sgl {
+	u32 baseaddr_l;
+	u32 baseaddr_h;
+	u32 flags;
+	u32 size;
+};
+
+struct mvumi_compact_sgl {
+	u32 baseaddr_l;
+	u32 baseaddr_h;
+	u32 flags;
+};
+
+struct mvumi_res {
+	struct list_head entry;
+	dma_addr_t bus_addr;
+	void *virt_addr;
+	unsigned int size;
+	short unsigned int type;
+};
+
+enum resource_type {
+	RESOURCE_CACHED_MEMORY = 0,
+	RESOURCE_UNCACHED_MEMORY = 1,
+};
+
+struct mvumi_msg_frame;
+
+struct mvumi_cmd {
+	struct list_head queue_pointer;
+	struct mvumi_msg_frame *frame;
+	dma_addr_t frame_phys;
+	struct scsi_cmnd *scmd;
+	atomic_t sync_cmd;
+	void *data_buf;
+	short unsigned int request_id;
+	unsigned char cmd_status;
+};
+
+struct mvumi_msg_frame {
+	u16 device_id;
+	u16 tag;
+	u8 cmd_flag;
+	u8 req_function;
+	u8 cdb_length;
+	u8 sg_counts;
+	u32 data_transfer_length;
+	u16 request_id;
+	u16 reserved1;
+	u8 cdb[16];
+	u32 payload[1];
+};
+
+struct mvumi_cmd_priv {
+	struct mvumi_cmd *cmd_priv;
+};
+
+struct mvumi_rsp_frame {
+	u16 device_id;
+	u16 tag;
+	u8 req_status;
+	u8 rsp_flag;
+	u16 request_id;
+	u32 payload[1];
+};
+
+struct mvumi_ob_data {
+	struct list_head list;
+	unsigned char data[0];
+};
+
+struct version_info {
+	u32 ver_major;
+	u32 ver_minor;
+	u32 ver_oem;
+	u32 ver_build;
+};
+
+struct mvumi_hs_header {
+	u8 page_code;
+	u8 checksum;
+	u16 frame_length;
+	u32 frame_content[1];
+};
+
+struct mvumi_hs_page1 {
+	u8 pagecode;
+	u8 checksum;
+	u16 frame_length;
+	u16 number_of_ports;
+	u16 max_devices_support;
+	u16 max_io_support;
+	u16 umi_ver;
+	u32 max_transfer_size;
+	struct version_info fw_ver;
+	u8 cl_in_max_entry_size;
+	u8 cl_out_max_entry_size;
+	u8 cl_inout_list_depth;
+	u8 total_pages;
+	u16 capability;
+	u16 reserved1;
+};
+
+struct mvumi_hs_page2 {
+	u8 pagecode;
+	u8 checksum;
+	u16 frame_length;
+	u8 host_type;
+	u8 host_cap;
+	u8 reserved[2];
+	struct version_info host_ver;
+	u32 system_io_bus;
+	u32 slot_number;
+	u32 intr_level;
+	u32 intr_vector;
+	u64 seconds_since1970;
+};
+
+struct mvumi_hs_page3 {
+	u8 pagecode;
+	u8 checksum;
+	u16 frame_length;
+	u16 control;
+	u8 reserved[2];
+	u32 host_bufferaddr_l;
+	u32 host_bufferaddr_h;
+	u32 host_eventaddr_l;
+	u32 host_eventaddr_h;
+};
+
+struct mvumi_hs_page4 {
+	u8 pagecode;
+	u8 checksum;
+	u16 frame_length;
+	u32 ib_baseaddr_l;
+	u32 ib_baseaddr_h;
+	u32 ob_baseaddr_l;
+	u32 ob_baseaddr_h;
+	u8 ib_entry_size;
+	u8 ob_entry_size;
+	u8 ob_depth;
+	u8 ib_depth;
+};
+
+struct mvumi_device {
+	struct list_head list;
+	struct scsi_device *sdev;
+	u64 wwid;
+	u8 dev_type;
+	int id;
+};
+
+struct mvumi_instance_template {
+	void (*fire_cmd)(struct mvumi_hba *, struct mvumi_cmd *);
+	void (*enable_intr)(struct mvumi_hba *);
+	void (*disable_intr)(struct mvumi_hba *);
+	int (*clear_intr)(void *);
+	unsigned int (*read_fw_status_reg)(struct mvumi_hba *);
+	unsigned int (*check_ib_list)(struct mvumi_hba *);
+	int (*check_ob_list)(struct mvumi_hba *, unsigned int *, unsigned int *);
+	int (*reset_host)(struct mvumi_hba *);
+};
+
+enum ata_xfer_mask {
+	ATA_MASK_PIO = 127,
+	ATA_MASK_MWDMA = 3968,
+	ATA_MASK_UDMA = 1044480,
+};
+
+enum hsm_task_states {
+	HSM_ST_IDLE = 0,
+	HSM_ST_FIRST = 1,
+	HSM_ST = 2,
+	HSM_ST_LAST = 3,
+	HSM_ST_ERR = 4,
+};
+
+struct pci_bits {
+	unsigned int reg;
+	unsigned int width;
+	long unsigned int mask;
+	long unsigned int val;
+};
+
+struct trace_event_raw_ata_qc_issue_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	unsigned char proto;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_qc_complete_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char status;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char error;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_tf_load {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_exec_command_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char feature;
+	unsigned char hob_nsect;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_bmdma_status {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char host_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy_qc {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_action_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	long unsigned int deadline;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_end_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	int rc;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_port_eh_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_hsm_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int protocol;
+	unsigned int hsm_state;
+	unsigned char dev_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_transfer_data_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int flags;
+	unsigned int offset;
+	unsigned int bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char hsm_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ata_qc_issue_template {};
+
+struct trace_event_data_offsets_ata_qc_complete_template {};
+
+struct trace_event_data_offsets_ata_tf_load {};
+
+struct trace_event_data_offsets_ata_exec_command_template {};
+
+struct trace_event_data_offsets_ata_bmdma_status {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
+
+struct trace_event_data_offsets_ata_eh_action_template {};
+
+struct trace_event_data_offsets_ata_link_reset_begin_template {};
+
+struct trace_event_data_offsets_ata_link_reset_end_template {};
+
+struct trace_event_data_offsets_ata_port_eh_begin_template {};
+
+struct trace_event_data_offsets_ata_sff_hsm_template {};
+
+struct trace_event_data_offsets_ata_transfer_data_template {};
+
+struct trace_event_data_offsets_ata_sff_template {};
+
+typedef void (*btf_trace_ata_qc_prep)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_tf_load)(void *, struct ata_port *, const struct ata_taskfile *);
+
+typedef void (*btf_trace_ata_exec_command)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_setup)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_start)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_stop)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_status)(void *, struct ata_port *, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_eh_about_to_do)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_done)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_slave_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_softreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_softreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_std_sched_eh)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_freeze)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_thaw)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_sff_hsm_state)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_hsm_command_complete)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_port_intr)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_send_cdb)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_sff_flush_pio_task)(void *, struct ata_port *);
+
+struct ata_force_param {
+	const char *name;
+	u8 cbl;
+	u8 spd_limit;
+	unsigned int xfer_mask;
+	unsigned int horkage_on;
+	unsigned int horkage_off;
+	u16 lflags_on;
+	u16 lflags_off;
+};
+
+struct ata_force_ent {
+	int port;
+	int device;
+	struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+	int shift;
+	int bits;
+	u8 base;
+};
+
+struct ata_blacklist_entry {
+	const char *model_num;
+	const char *model_rev;
+	long unsigned int horkage;
+};
+
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct spi_statistics {
+	struct u64_stats_sync syncp;
+	u64_stats_t messages;
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t timedout;
+	u64_stats_t spi_sync;
+	u64_stats_t spi_sync_immediate;
+	u64_stats_t spi_async;
+	u64_stats_t bytes;
+	u64_stats_t bytes_rx;
+	u64_stats_t bytes_tx;
+	u64_stats_t transfer_bytes_histo[17];
+	u64_stats_t transfers_split_maxsize;
+};
+
+struct spi_delay {
+	u16 value;
+	u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics *pcpu_statistics;
+};
+
+struct spi_message;
+
+struct spi_transfer;
+
+struct spi_controller_mem_ops;
+
+struct spi_controller_mem_caps;
+
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	union {
+		bool slave;
+		bool target;
+	};
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
+	struct device *cur_rx_dma_dev;
+	struct device *cur_tx_dma_dev;
+	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	struct completion cur_msg_completion;
+	bool cur_msg_incomplete;
+	bool cur_msg_need_completion;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	union {
+		int (*slave_abort)(struct spi_controller *);
+		int (*target_abort)(struct spi_controller *);
+	};
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics *pcpu_statistics;
+	struct dma_chan *dma_tx;
+	struct dma_chan *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	long unsigned int irq_flags;
+	bool queue_empty;
+	bool must_async;
+};
+
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	int status;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+	bool prepared;
+};
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_off: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	bool timestamped;
+	struct list_head transfer_list;
+	u16 error;
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
+
+struct spi_res {
+	struct list_head entry;
+	spi_res_release_t release;
+	long long unsigned int data[0];
+};
+
+struct spi_replaced_transfers;
+
+typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
+
+struct spi_replaced_transfers {
+	spi_replaced_release_t release;
+	void *extradata;
+	struct list_head replaced_transfers;
+	struct list_head *replaced_after;
+	size_t inserted;
+	struct spi_transfer inserted_transfers[0];
+};
+
+struct spi_board_info {
+	char modalias[32];
+	const void *platform_data;
+	const struct software_node *swnode;
+	void *controller_data;
+	int irq;
+	u32 max_speed_hz;
+	u16 bus_num;
+	u16 chip_select;
+	u32 mode;
+};
+
+enum spi_mem_data_dir {
+	SPI_MEM_NO_DATA = 0,
+	SPI_MEM_DATA_IN = 1,
+	SPI_MEM_DATA_OUT = 2,
+};
+
+struct spi_mem_op {
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u16 opcode;
+	} cmd;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u64 val;
+	} addr;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+	} dummy;
+	struct {
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 ecc: 1;
+		enum spi_mem_data_dir dir;
+		unsigned int nbytes;
+		union {
+			void *in;
+			const void *out;
+		} buf;
+	} data;
+};
+
+struct spi_mem_dirmap_info {
+	struct spi_mem_op op_tmpl;
+	u64 offset;
+	u64 length;
+};
+
+struct spi_mem_dirmap_desc {
+	struct spi_mem *mem;
+	struct spi_mem_dirmap_info info;
+	unsigned int nodirmap;
+	void *priv;
+};
+
+struct spi_mem {
+	struct spi_device *spi;
+	void *drvpriv;
+	const char *name;
+};
+
+struct trace_event_raw_spi_controller {
+	struct trace_entry ent;
+	int bus_num;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	bool enable;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message_done {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	unsigned int frame;
+	unsigned int actual;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_transfer {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_transfer *xfer;
+	int len;
+	u32 __data_loc_rx_buf;
+	u32 __data_loc_tx_buf;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_spi_controller {};
+
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
+struct trace_event_data_offsets_spi_message {};
+
+struct trace_event_data_offsets_spi_message_done {};
+
+struct trace_event_data_offsets_spi_transfer {
+	u32 rx_buf;
+	u32 tx_buf;
+};
+
+typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
+typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
+
+typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
+
+struct boardinfo {
+	struct list_head list;
+	struct spi_board_info board_info;
+};
+
+struct acpi_spi_lookup {
+	struct spi_controller *ctlr;
+	u32 max_speed_hz;
+	u32 mode;
+	int irq;
+	u8 bits_per_word;
+	u8 chip_select;
+	int n;
+	int index;
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
+};
+
+struct mii_timestamping_ctrl {
+	struct mii_timestamper * (*probe_channel)(struct device *, unsigned int);
+	void (*release_channel)(struct device *, struct mii_timestamper *);
+};
+
+struct mii_timestamping_desc {
+	struct list_head list;
+	struct mii_timestamping_ctrl *ctrl;
+	struct device *device;
+};
+
+typedef enum {
+	e1000_undefined___2 = 0,
+	e1000_82542_rev2_0 = 1,
+	e1000_82542_rev2_1 = 2,
+	e1000_82543 = 3,
+	e1000_82544 = 4,
+	e1000_82540 = 5,
+	e1000_82545 = 6,
+	e1000_82545_rev_3 = 7,
+	e1000_82546 = 8,
+	e1000_ce4100 = 9,
+	e1000_82546_rev_3 = 10,
+	e1000_82541 = 11,
+	e1000_82541_rev_2 = 12,
+	e1000_82547 = 13,
+	e1000_82547_rev_2 = 14,
+	e1000_num_macs___2 = 15,
+} e1000_mac_type;
+
+typedef enum {
+	e1000_eeprom_uninitialized = 0,
+	e1000_eeprom_spi = 1,
+	e1000_eeprom_microwire = 2,
+	e1000_eeprom_flash = 3,
+	e1000_eeprom_none = 4,
+	e1000_num_eeprom_types = 5,
+} e1000_eeprom_type;
+
+typedef enum {
+	e1000_media_type_copper___2 = 0,
+	e1000_media_type_fiber___2 = 1,
+	e1000_media_type_internal_serdes___2 = 2,
+	e1000_num_media_types___2 = 3,
+} e1000_media_type;
+
+enum {
+	e1000_10_half = 0,
+	e1000_10_full = 1,
+	e1000_100_half = 2,
+	e1000_100_full = 3,
+};
+
+typedef enum {
+	E1000_FC_NONE = 0,
+	E1000_FC_RX_PAUSE = 1,
+	E1000_FC_TX_PAUSE = 2,
+	E1000_FC_FULL = 3,
+	E1000_FC_DEFAULT = 255,
+} e1000_fc_type;
+
+struct e1000_shadow_ram___2 {
+	u16 eeprom_word;
+	bool modified;
+};
+
+typedef enum {
+	e1000_bus_type_unknown___2 = 0,
+	e1000_bus_type_pci___2 = 1,
+	e1000_bus_type_pcix___2 = 2,
+	e1000_bus_type_reserved___2 = 3,
+} e1000_bus_type;
+
+typedef enum {
+	e1000_bus_speed_unknown___2 = 0,
+	e1000_bus_speed_33___2 = 1,
+	e1000_bus_speed_66___2 = 2,
+	e1000_bus_speed_100___2 = 3,
+	e1000_bus_speed_120___2 = 4,
+	e1000_bus_speed_133___2 = 5,
+	e1000_bus_speed_reserved___2 = 6,
+} e1000_bus_speed;
+
+typedef enum {
+	e1000_bus_width_unknown___2 = 0,
+	e1000_bus_width_32___2 = 1,
+	e1000_bus_width_64___2 = 2,
+	e1000_bus_width_reserved___2 = 3,
+} e1000_bus_width;
+
+typedef enum {
+	e1000_cable_length_50 = 0,
+	e1000_cable_length_50_80 = 1,
+	e1000_cable_length_80_110 = 2,
+	e1000_cable_length_110_140 = 3,
+	e1000_cable_length_140 = 4,
+	e1000_cable_length_undefined = 255,
+} e1000_cable_length;
+
+enum {
+	e1000_igp_cable_length_10 = 10,
+	e1000_igp_cable_length_20 = 20,
+	e1000_igp_cable_length_30 = 30,
+	e1000_igp_cable_length_40 = 40,
+	e1000_igp_cable_length_50 = 50,
+	e1000_igp_cable_length_60 = 60,
+	e1000_igp_cable_length_70 = 70,
+	e1000_igp_cable_length_80 = 80,
+	e1000_igp_cable_length_90 = 90,
+	e1000_igp_cable_length_100 = 100,
+	e1000_igp_cable_length_110 = 110,
+	e1000_igp_cable_length_115 = 115,
+	e1000_igp_cable_length_120 = 120,
+	e1000_igp_cable_length_130 = 130,
+	e1000_igp_cable_length_140 = 140,
+	e1000_igp_cable_length_150 = 150,
+	e1000_igp_cable_length_160 = 160,
+	e1000_igp_cable_length_170 = 170,
+	e1000_igp_cable_length_180 = 180,
+};
+
+typedef enum {
+	e1000_10bt_ext_dist_enable_normal = 0,
+	e1000_10bt_ext_dist_enable_lower = 1,
+	e1000_10bt_ext_dist_enable_undefined = 255,
+} e1000_10bt_ext_dist_enable;
+
+typedef enum {
+	e1000_rev_polarity_normal___2 = 0,
+	e1000_rev_polarity_reversed___2 = 1,
+	e1000_rev_polarity_undefined___2 = 255,
+} e1000_rev_polarity;
+
+typedef enum {
+	e1000_downshift_normal = 0,
+	e1000_downshift_activated = 1,
+	e1000_downshift_undefined = 255,
+} e1000_downshift;
+
+typedef enum {
+	e1000_smart_speed_default___2 = 0,
+	e1000_smart_speed_on___2 = 1,
+	e1000_smart_speed_off___2 = 2,
+} e1000_smart_speed;
+
+typedef enum {
+	e1000_polarity_reversal_enabled = 0,
+	e1000_polarity_reversal_disabled = 1,
+	e1000_polarity_reversal_undefined = 255,
+} e1000_polarity_reversal;
+
+typedef enum {
+	e1000_auto_x_mode_manual_mdi = 0,
+	e1000_auto_x_mode_manual_mdix = 1,
+	e1000_auto_x_mode_auto1 = 2,
+	e1000_auto_x_mode_auto2 = 3,
+	e1000_auto_x_mode_undefined = 255,
+} e1000_auto_x_mode;
+
+typedef enum {
+	e1000_1000t_rx_status_not_ok___2 = 0,
+	e1000_1000t_rx_status_ok___2 = 1,
+	e1000_1000t_rx_status_undefined___2 = 255,
+} e1000_1000t_rx_status;
+
+typedef enum {
+	e1000_phy_m88___3 = 0,
+	e1000_phy_igp___3 = 1,
+	e1000_phy_8211 = 2,
+	e1000_phy_8201 = 3,
+	e1000_phy_undefined = 255,
+} e1000_phy_type;
+
+typedef enum {
+	e1000_ms_hw_default___2 = 0,
+	e1000_ms_force_master___2 = 1,
+	e1000_ms_force_slave___2 = 2,
+	e1000_ms_auto___2 = 3,
+} e1000_ms_type;
+
+typedef enum {
+	e1000_ffe_config_enabled = 0,
+	e1000_ffe_config_active = 1,
+	e1000_ffe_config_blocked = 2,
+} e1000_ffe_config;
+
+typedef enum {
+	e1000_dsp_config_disabled = 0,
+	e1000_dsp_config_enabled = 1,
+	e1000_dsp_config_activated = 2,
+	e1000_dsp_config_undefined = 255,
+} e1000_dsp_config;
+
+struct e1000_phy_info___3 {
+	e1000_cable_length cable_length;
+	e1000_10bt_ext_dist_enable extended_10bt_distance;
+	e1000_rev_polarity cable_polarity;
+	e1000_downshift downshift;
+	e1000_polarity_reversal polarity_correction;
+	e1000_auto_x_mode mdix_mode;
+	e1000_1000t_rx_status local_rx;
+	e1000_1000t_rx_status remote_rx;
+};
+
+struct e1000_eeprom_info {
+	e1000_eeprom_type type;
+	u16 word_size;
+	u16 opcode_bits;
+	u16 address_bits;
+	u16 delay_usec;
+	u16 page_size;
+};
+
+struct e1000_hw___3 {
+	u8 *hw_addr;
+	u8 *flash_address;
+	void *ce4100_gbe_mdio_base_virt;
+	e1000_mac_type mac_type;
+	e1000_phy_type phy_type;
+	u32 phy_init_script;
+	e1000_media_type media_type;
+	void *back;
+	struct e1000_shadow_ram___2 *eeprom_shadow_ram;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	e1000_fc_type fc;
+	e1000_bus_speed bus_speed;
+	e1000_bus_width bus_width;
+	e1000_bus_type bus_type;
+	struct e1000_eeprom_info eeprom;
+	e1000_ms_type master_slave;
+	e1000_ms_type original_master_slave;
+	e1000_ffe_config ffe_config_state;
+	u32 asf_firmware_present;
+	u32 eeprom_semaphore_present;
+	long unsigned int io_base;
+	u32 phy_id;
+	u32 phy_revision;
+	u32 phy_addr;
+	u32 original_fc;
+	u32 txcw;
+	u32 autoneg_failed;
+	u32 max_frame_size;
+	u32 min_frame_size;
+	u32 mc_filter_type;
+	u32 num_mc_addrs;
+	u32 collision_delta;
+	u32 tx_packet_delta;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	bool tx_pkt_filtering;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	u16 phy_spd_default;
+	u16 autoneg_advertised;
+	u16 pci_cmd_word;
+	u16 fc_high_water;
+	u16 fc_low_water;
+	u16 fc_pause_time;
+	u16 current_ifs_val;
+	u16 ifs_min_val;
+	u16 ifs_max_val;
+	u16 ifs_step_size;
+	u16 ifs_ratio;
+	u16 device_id;
+	u16 vendor_id;
+	u16 subsystem_id;
+	u16 subsystem_vendor_id;
+	u8 revision_id;
+	u8 autoneg;
+	u8 mdix;
+	u8 forced_speed_duplex;
+	u8 wait_autoneg_complete;
+	u8 dma_fairness;
+	u8 mac_addr[6];
+	u8 perm_mac_addr[6];
+	bool disable_polarity_correction;
+	bool speed_downgraded;
+	e1000_smart_speed smart_speed;
+	e1000_dsp_config dsp_config_state;
+	bool get_link_status;
+	bool serdes_has_link;
+	bool tbi_compatibility_en;
+	bool tbi_compatibility_on;
+	bool laa_is_present;
+	bool phy_reset_disable;
+	bool initialize_hw_bits_disable;
+	bool fc_send_xon;
+	bool fc_strict_ieee;
+	bool report_tx_early;
+	bool adaptive_ifs;
+	bool ifs_params_forced;
+	bool in_ifs_mode;
+	bool mng_reg_access_disabled;
+	bool leave_av_bit_off;
+	bool bad_tx_carr_stats_fd;
+	bool has_smbus;
+};
+
+struct e1000_hw_stats___3 {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 txerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorcl;
+	u64 gorch;
+	u64 gotcl;
+	u64 gotch;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rlerrc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 torl;
+	u64 torh;
+	u64 totl;
+	u64 toth;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+};
+
+struct e1000_tx_buffer {
+	struct sk_buff *skb;
+	dma_addr_t dma;
+	long unsigned int time_stamp;
+	u16 length;
+	u16 next_to_watch;
+	bool mapped_as_page;
+	short unsigned int segs;
+	unsigned int bytecount;
+};
+
+struct e1000_rx_buffer {
+	union {
+		struct page *page;
+		u8 *data;
+	} rxbuf;
+	dma_addr_t dma;
+};
+
+struct e1000_tx_ring {
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	unsigned int next_to_use;
+	unsigned int next_to_clean;
+	struct e1000_tx_buffer *buffer_info;
+	u16 tdh;
+	u16 tdt;
+	bool last_tx_tso;
+};
+
+struct e1000_rx_ring {
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	unsigned int next_to_use;
+	unsigned int next_to_clean;
+	struct e1000_rx_buffer *buffer_info;
+	struct sk_buff *rx_skb_top;
+	int cpu;
+	u16 rdh;
+	u16 rdt;
+};
+
+struct e1000_adapter___2 {
+	long unsigned int active_vlans[64];
+	u16 mng_vlan_id;
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u32 wol;
+	u32 smartspeed;
+	u32 en_mng_pt;
+	u16 link_speed;
+	u16 link_duplex;
+	spinlock_t stats_lock;
+	unsigned int total_tx_bytes;
+	unsigned int total_tx_packets;
+	unsigned int total_rx_bytes;
+	unsigned int total_rx_packets;
+	u32 itr;
+	u32 itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	u8 fc_autoneg;
+	struct e1000_tx_ring *tx_ring;
+	unsigned int restart_queue;
+	u32 txd_cmd;
+	u32 tx_int_delay;
+	u32 tx_abs_int_delay;
+	u32 gotcl;
+	u64 gotcl_old;
+	u64 tpt_old;
+	u64 colc_old;
+	u32 tx_timeout_count;
+	u32 tx_fifo_head;
+	u32 tx_head_addr;
+	u32 tx_fifo_size;
+	u8 tx_timeout_factor;
+	atomic_t tx_fifo_stall;
+	bool pcix_82544;
+	bool detect_tx_hung;
+	bool dump_buffers;
+	bool (*clean_rx)(struct e1000_adapter___2 *, struct e1000_rx_ring *, int *, int);
+	void (*alloc_rx_buf)(struct e1000_adapter___2 *, struct e1000_rx_ring *, int);
+	struct e1000_rx_ring *rx_ring;
+	struct napi_struct napi;
+	int num_tx_queues;
+	int num_rx_queues;
+	u64 hw_csum_err;
+	u64 hw_csum_good;
+	u32 alloc_rx_buff_failed;
+	u32 rx_int_delay;
+	u32 rx_abs_int_delay;
+	bool rx_csum;
+	u32 gorcl;
+	u64 gorcl_old;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct e1000_hw___3 hw;
+	struct e1000_hw_stats___3 stats;
+	struct e1000_phy_info___3 phy_info;
+	struct e1000_phy_stats phy_stats;
+	u32 test_icr;
+	struct e1000_tx_ring test_tx_ring;
+	struct e1000_rx_ring test_rx_ring;
+	int msg_enable;
+	bool tso_force;
+	bool smart_power_down;
+	bool quad_port_a;
+	long unsigned int flags;
+	u32 eeprom_wol;
+	int bars;
+	int need_ioport;
+	bool discarding;
+	struct work_struct reset_task;
+	struct delayed_work watchdog_task;
+	struct delayed_work fifo_stall_task;
+	struct delayed_work phy_info_task;
+};
+
+struct e1000_opt_list {
+	int i;
+	char *str;
+};
+
+struct e1000_option {
+	enum {
+		enable_option = 0,
+		range_option = 1,
+		list_option = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			const struct e1000_opt_list *p;
+		} l;
+	} arg;
+};
+
+union e1000_rx_desc_extended {
+	struct {
+		__le64 buffer_addr;
+		__le64 reserved;
+	} read;
+	struct {
+		struct {
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length;
+			__le16 vlan;
+		} upper;
+	} wb;
+};
+
+struct e1000_tx_desc {
+	__le64 buffer_addr;
+	union {
+		__le32 data;
+		struct {
+			__le16 length;
+			u8 cso;
+			u8 cmd;
+		} flags;
+	} lower;
+	union {
+		__le32 data;
+		struct {
+			u8 status;
+			u8 css;
+			__le16 special;
+		} fields;
+	} upper;
+};
+
+enum {
+	NETDEV_STATS___3 = 0,
+	E1000_STATS = 1,
+};
+
+struct e1000_stats {
+	char stat_string[32];
+	int type;
+	int sizeof_stat;
+	int stat_offset;
+};
+
+union e1000_adv_rx_desc {
+	struct {
+		__le64 pkt_addr;
+		__le64 hdr_addr;
+	} read;
+	struct {
+		struct {
+			struct {
+				__le16 pkt_info;
+				__le16 hdr_info;
+			} lo_dword;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length;
+			__le16 vlan;
+		} upper;
+	} wb;
+};
+
+enum igb_filter_match_flags {
+	IGB_FILTER_FLAG_ETHER_TYPE = 1,
+	IGB_FILTER_FLAG_VLAN_TCI = 2,
+	IGB_FILTER_FLAG_SRC_MAC_ADDR = 4,
+	IGB_FILTER_FLAG_DST_MAC_ADDR = 8,
+};
+
+struct igb_nfc_input {
+	u8 match_flags;
+	__be16 etype;
+	__be16 vlan_tci;
+	u8 src_addr[6];
+	u8 dst_addr[6];
+};
+
+struct igb_nfc_filter {
+	struct hlist_node nfc_node;
+	struct igb_nfc_input filter;
+	long unsigned int cookie;
+	u16 etype_reg_index;
+	u16 sw_idx;
+	u16 action;
+};
+
+enum e1000_state_t___2 {
+	__IGB_TESTING = 0,
+	__IGB_RESETTING = 1,
+	__IGB_DOWN = 2,
+	__IGB_PTP_TX_IN_PROGRESS = 3,
+};
+
+struct igb_stats {
+	char stat_string[32];
+	int sizeof_stat;
+	int stat_offset;
+};
+
+enum igb_diagnostics_results {
+	TEST_REG = 0,
+	TEST_EEP = 1,
+	TEST_IRQ = 2,
+	TEST_LOOP = 3,
+	TEST_LINK = 4,
+};
+
+struct igb_reg_test {
+	u16 reg;
+	u16 reg_offset;
+	u16 array_len;
+	u16 test_type;
+	u32 mask;
+	u32 write;
+};
+
+struct e1000_fw_version {
+	u32 etrack_id;
+	u16 eep_major;
+	u16 eep_minor;
+	u16 eep_build;
+	u8 invm_major;
+	u8 invm_minor;
+	u8 invm_img_type;
+	bool or_valid;
+	u16 or_major;
+	u16 or_build;
+	u16 or_patch;
+};
+
+union ixgbe_atr_hash_dword {
+	struct {
+		u8 vm_pool;
+		u8 flow_type;
+		__be16 vlan_id;
+	} formatted;
+	__be32 ip;
+	struct {
+		__be16 src;
+		__be16 dst;
+	} port;
+	__be16 flex_bytes;
+	__be32 dword;
+};
+
+struct ixgbe_info {
+	enum ixgbe_mac_type mac;
+	s32 (*get_invariants)(struct ixgbe_hw *);
+	const struct ixgbe_mac_operations *mac_ops;
+	const struct ixgbe_eeprom_operations *eeprom_ops;
+	const struct ixgbe_phy_operations *phy_ops;
+	const struct ixgbe_mbx_operations *mbx_ops;
+	const struct ixgbe_link_operations *link_ops;
+	const u32 *mvals;
+};
+
+struct ixgbe_hic_hdr {
+	u8 cmd;
+	u8 buf_len;
+	union {
+		u8 cmd_resv;
+		u8 ret_status;
+	} cmd_or_resp;
+	u8 checksum;
+};
+
+struct ixgbe_hic_hdr2_req {
+	u8 cmd;
+	u8 buf_lenh;
+	u8 buf_lenl;
+	u8 checksum;
+};
+
+struct ixgbe_hic_hdr2_rsp {
+	u8 cmd;
+	u8 buf_lenl;
+	u8 buf_lenh_status;
+	u8 checksum;
+};
+
+union ixgbe_hic_hdr2 {
+	struct ixgbe_hic_hdr2_req req;
+	struct ixgbe_hic_hdr2_rsp rsp;
+};
+
+struct ixgbe_hic_drv_info2 {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_num;
+	u8 ver_sub;
+	u8 ver_build;
+	u8 ver_min;
+	u8 ver_maj;
+	char driver_string[39];
+};
+
+struct ixgbe_hic_read_shadow_ram {
+	union ixgbe_hic_hdr2 hdr;
+	u32 address;
+	u16 length;
+	u16 pad2;
+	u16 data;
+	u16 pad3;
+};
+
+struct ixgbe_hic_write_shadow_ram {
+	union ixgbe_hic_hdr2 hdr;
+	__be32 address;
+	__be16 length;
+	u16 pad2;
+	u16 data;
+	u16 pad3;
+};
+
+struct ixgbe_hic_disable_rxen {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_number;
+	u8 pad2;
+	u16 pad3;
+};
+
+struct ixgbe_hic_phy_token_req {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_number;
+	u8 command_type;
+	u16 pad;
+};
+
+struct ixgbe_hic_internal_phy_req {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_number;
+	u8 command_type;
+	__be16 address;
+	u16 rsv1;
+	__be32 write_data;
+	u16 pad;
+} __attribute__((packed));
+
+struct ixgbe_hic_internal_phy_resp {
+	struct ixgbe_hic_hdr hdr;
+	__be32 read_data;
+};
+
+struct ixgbe_hic_phy_activity_req {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_number;
+	u8 pad;
+	__le16 activity_id;
+	__be32 data[4];
+};
+
+struct ixgbe_hic_phy_activity_resp {
+	struct ixgbe_hic_hdr hdr;
+	__be32 data[4];
+};
+
+struct ixgb_rx_desc {
+	__le64 buff_addr;
+	__le16 length;
+	__le16 reserved;
+	u8 status;
+	u8 errors;
+	__le16 special;
+};
+
+struct ixgb_tx_desc {
+	__le64 buff_addr;
+	__le32 cmd_type_len;
+	u8 status;
+	u8 popts;
+	__le16 vlan;
+};
+
+struct ixgb_context_desc {
+	u8 ipcss;
+	u8 ipcso;
+	__le16 ipcse;
+	u8 tucss;
+	u8 tucso;
+	__le16 tucse;
+	__le32 cmd_type_len;
+	u8 status;
+	u8 hdr_len;
+	__le16 mss;
+};
+
+enum ixgb_state_t {
+	__IXGB_DOWN = 0,
+};
+
+struct stmmac_stats {
+	char stat_string[32];
+	int sizeof_stat;
+	int stat_offset;
+};
+
+struct stmmac_regs_off {
+	u32 ptp_off;
+	u32 mmc_off;
+};
+
+struct stmmac_hwif_entry {
+	bool gmac;
+	bool gmac4;
+	bool xgmac;
+	u32 min_id;
+	u32 dev_id;
+	const struct stmmac_regs_off regs;
+	const void *desc;
+	const void *dma;
+	const void *mac;
+	const void *hwtimestamp;
+	const void *mode;
+	const void *tc;
+	const void *mmc;
+	int (*setup)(struct stmmac_priv *);
+	int (*quirks)(struct stmmac_priv *);
+};
+
+enum rx_frame_status {
+	good_frame = 0,
+	discard_frame = 1,
+	csum_none = 2,
+	llc_snap = 4,
+	dma_own = 8,
+	rx_not_ls = 16,
+};
+
+enum tx_frame_status {
+	tx_done = 0,
+	tx_not_ls = 1,
+	tx_err = 2,
+	tx_dma_own = 4,
+	tx_err_bump_tc = 8,
+};
+
+struct stmmac_resources {
+	void *addr;
+	u8 mac[6];
+	int wol_irq;
+	int lpi_irq;
+	int irq;
+	int sfty_ce_irq;
+	int sfty_ue_irq;
+	int rx_irq[8];
+	int tx_irq[8];
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(const struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct usb_class {
+	struct kref kref;
+	struct class *class;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void *data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void *context;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	long unsigned int ifclaimed;
+	u32 disabled_bulk_eps;
+	long unsigned int interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	long unsigned int vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void *userbuffer;
+	void *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE = 1,
+};
+
+struct usb_phy_roothub {
+	struct phy *phy;
+	struct list_head list;
+};
+
+struct acpi_bus_type {
+	struct list_head list;
+	const char *name;
+	bool (*match)(struct device *);
+	struct acpi_device * (*find_companion)(struct device *);
+	void (*setup)(struct device *);
+};
+
+struct ehci_stats {
+	long unsigned int normal;
+	long unsigned int error;
+	long unsigned int iaa;
+	long unsigned int lost_iaa;
+	long unsigned int complete;
+	long unsigned int unlink;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	long unsigned int reset_done[15];
+	long unsigned int bus_suspended;
+	long unsigned int companion_ports;
+	long unsigned int owned_ports;
+	long unsigned int port_c_suspend;
+	long unsigned int suspended_ports;
+	long unsigned int resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	long unsigned int next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	struct ehci_stats stats;
+	struct dentry *debug_dir;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	long unsigned int priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct debug_buffer {
+	ssize_t (*fill_func)(struct debug_buffer *);
+	struct usb_bus *bus;
+	struct mutex mutex;
+	size_t count;
+	char *output_buf;
+	size_t alloc_size;
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum i8042_controller_reset_mode {
+	I8042_RESET_NEVER = 0,
+	I8042_RESET_ALWAYS = 1,
+	I8042_RESET_ON_S2RAM = 2,
+};
+
+struct i8042_port {
+	struct serio *serio;
+	int irq;
+	bool exists;
+	bool driver_bound;
+	signed char mux;
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct key_entry {
+	int type;
+	u32 code;
+	union {
+		u16 keycode;
+		struct {
+			u8 code;
+			u8 value;
+		} sw;
+	};
+};
+
+struct rmi_2d_axis_alignment {
+	bool swap_axes;
+	bool flip_x;
+	bool flip_y;
+	u16 clip_x_low;
+	u16 clip_y_low;
+	u16 clip_x_high;
+	u16 clip_y_high;
+	u16 offset_x;
+	u16 offset_y;
+	u8 delta_x_threshold;
+	u8 delta_y_threshold;
+};
+
+enum rmi_sensor_type {
+	rmi_sensor_default = 0,
+	rmi_sensor_touchscreen = 1,
+	rmi_sensor_touchpad = 2,
+};
+
+struct rmi_2d_sensor_platform_data {
+	struct rmi_2d_axis_alignment axis_align;
+	enum rmi_sensor_type sensor_type;
+	int x_mm;
+	int y_mm;
+	int disable_report_mask;
+	u16 rezero_wait;
+	bool topbuttonpad;
+	bool kernel_tracking;
+	int dmax;
+	int dribble;
+	int palm_detect;
+};
+
+struct rmi_gpio_data {
+	bool buttonpad;
+	bool trackstick_buttons;
+	bool disable;
+};
+
+enum rmi_reg_state {
+	RMI_REG_STATE_DEFAULT = 0,
+	RMI_REG_STATE_OFF = 1,
+	RMI_REG_STATE_ON = 2,
+};
+
+struct rmi_f01_power_management {
+	enum rmi_reg_state nosleep;
+	u8 wakeup_threshold;
+	u8 doze_holdoff;
+	u8 doze_interval;
+};
+
+struct rmi_device_platform_data_spi {
+	u32 block_delay_us;
+	u32 split_read_block_delay_us;
+	u32 read_delay_us;
+	u32 write_delay_us;
+	u32 split_read_byte_delay_us;
+	u32 pre_delay_us;
+	u32 post_delay_us;
+	u8 bits_per_word;
+	u16 mode;
+	void *cs_assert_data;
+	int (*cs_assert)(const void *, const bool);
+};
+
+struct rmi_device_platform_data {
+	int reset_delay_ms;
+	int irq;
+	struct rmi_device_platform_data_spi spi_data;
+	struct rmi_2d_sensor_platform_data sensor_pdata;
+	struct rmi_f01_power_management power_management;
+	struct rmi_gpio_data gpio_data;
+};
+
+enum synaptics_pkt_type {
+	SYN_NEWABS = 0,
+	SYN_NEWABS_STRICT = 1,
+	SYN_NEWABS_RELAXED = 2,
+	SYN_OLDABS = 3,
+};
+
+struct synaptics_hw_state {
+	int x;
+	int y;
+	int z;
+	int w;
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int up: 1;
+	unsigned int down: 1;
+	u8 ext_buttons;
+	s8 scroll;
+};
+
+struct synaptics_device_info {
+	u32 model_id;
+	u32 firmware_id;
+	u32 board_id;
+	u32 capabilities;
+	u32 ext_cap;
+	u32 ext_cap_0c;
+	u32 ext_cap_10;
+	u32 identity;
+	u32 x_res;
+	u32 y_res;
+	u32 x_max;
+	u32 y_max;
+	u32 x_min;
+	u32 y_min;
+};
+
+struct synaptics_data {
+	struct synaptics_device_info info;
+	enum synaptics_pkt_type pkt_type;
+	u8 mode;
+	int scroll;
+	bool absolute_mode;
+	bool disable_gesture;
+	struct serio *pt_port;
+	struct synaptics_hw_state agm;
+	unsigned int agm_count;
+	long unsigned int press_start;
+	bool press;
+	bool report_press;
+	bool is_forcepad;
+};
+
+struct min_max_quirk {
+	const char * const *pnp_ids;
+	struct {
+		u32 min;
+		u32 max;
+	} board_id;
+	u32 x_min;
+	u32 x_max;
+	u32 y_min;
+	u32 y_max;
+};
+
+enum {
+	SYNAPTICS_INTERTOUCH_NOT_SET = -1,
+	SYNAPTICS_INTERTOUCH_OFF = 0,
+	SYNAPTICS_INTERTOUCH_ON = 1,
+};
+
+struct ps2pp_info {
+	u8 model;
+	u8 kind;
+	u16 features;
+};
+
+struct psmouse_smbus_dev {
+	struct i2c_board_info board;
+	struct psmouse *psmouse;
+	struct i2c_client *client;
+	struct list_head node;
+	bool dead;
+	bool need_deactivate;
+};
+
+struct psmouse_smbus_removal_work {
+	struct work_struct work;
+	struct i2c_client *client;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+struct i2c_gpio_platform_data {
+	int udelay;
+	int timeout;
+	unsigned int sda_is_open_drain: 1;
+	unsigned int scl_is_open_drain: 1;
+	unsigned int scl_is_output_only: 1;
+};
+
+struct i2c_gpio_private_data {
+	struct gpio_desc *sda;
+	struct gpio_desc *scl;
+	struct i2c_adapter adap;
+	struct i2c_algo_bit_data bit_data;
+	struct i2c_gpio_platform_data pdata;
+};
+
+struct power_supply_hwmon {
+	struct power_supply *psy;
+	long unsigned int *props;
+};
+
+struct hwmon_type_attr_list {
+	const u32 *attrs;
+	size_t n_attrs;
+};
+
+enum dev_pm_opp_event {
+	OPP_EVENT_ADD = 0,
+	OPP_EVENT_REMOVE = 1,
+	OPP_EVENT_ENABLE = 2,
+	OPP_EVENT_DISABLE = 3,
+	OPP_EVENT_ADJUST_VOLTAGE = 4,
+};
+
+struct dev_pm_opp_config {
+	const char * const *clk_names;
+	config_clks_t config_clks;
+	const char *prop_name;
+	config_regulators_t config_regulators;
+	const unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char * const *regulator_names;
+	const char * const *genpd_names;
+	struct device ***virt_devs;
+};
+
+struct opp_config_data {
+	struct opp_table *opp_table;
+	unsigned int flags;
+};
+
+struct simplefb_platform_data {
+	u32 width;
+	u32 height;
+	u32 stride;
+	const char *format;
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART_PREPARE = 2,
+	SYS_OFF_MODE_RESTART = 3,
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct sys_off_handler;
+
+typedef struct {
+	u64 length;
+	u64 data;
+} efi_capsule_block_desc_t;
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct alias_prop {
+	struct list_head link;
+	const char *alias;
+	struct device_node *np;
+	int id;
+	char stem[0];
+};
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+struct sensor_device_attribute {
+	struct device_attribute dev_attr;
+	int index;
+};
+
+struct devfreq_simple_ondemand_data {
+	unsigned int upthreshold;
+	unsigned int downdifferential;
+};
+
+struct userspace_data {
+	long unsigned int user_frequency;
+	bool valid;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_config;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+struct ubuf_info_msgzc {
+	struct ubuf_info ubuf;
+	union {
+		struct {
+			long unsigned int desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	struct mmpin mmp;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct page_frag_1k {};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	struct page_frag_1k page_small;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t);
+
+typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int);
+
+enum {
+	NETNSA_NONE = 0,
+	NETNSA_NSID = 1,
+	NETNSA_PID = 2,
+	NETNSA_FD = 3,
+	NETNSA_TARGET_NSID = 4,
+	NETNSA_CURRENT_NSID = 5,
+	__NETNSA_MAX = 6,
+};
+
+struct net_fill_args {
+	u32 portid;
+	u32 seq;
+	int flags;
+	int cmd;
+	int nsid;
+	bool add_ref;
+	int ref_nsid;
+};
+
+struct rtnl_net_dump_cb {
+	struct net *tgt_net;
+	struct net *ref_net;
+	struct sk_buff *skb;
+	struct net_fill_args fillargs;
+	int idx;
+	int s_idx;
+};
+
+struct ifbond {
+	__s32 bond_mode;
+	__s32 num_slaves;
+	__s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct ifslave {
+	__s32 slave_id;
+	char slave_name[16];
+	__s8 link;
+	__s8 state;
+	__u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+enum {
+	NAPIF_STATE_SCHED = 1,
+	NAPIF_STATE_MISSED = 2,
+	NAPIF_STATE_DISABLE = 4,
+	NAPIF_STATE_NPSVC = 8,
+	NAPIF_STATE_LISTED = 16,
+	NAPIF_STATE_NO_BUSY_POLL = 32,
+	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
+};
+
+struct bpf_xdp_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	int flags;
+};
+
+struct netdev_net_notifier {
+	struct list_head list;
+	struct notifier_block *nb;
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct netdev_notifier_changelowerstate_info {
+	struct netdev_notifier_info info;
+	void *lower_state_info;
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+	struct netdev_notifier_info info;
+	const unsigned char *dev_addr;
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
+
+enum {
+	NESTED_SYNC_IMM_BIT = 0,
+	NESTED_SYNC_TODO_BIT = 1,
+};
+
+struct netdev_nested_priv {
+	unsigned char flags;
+	void *data;
+};
+
+struct netdev_bonding_info {
+	ifslave slave;
+	ifbond master;
+};
+
+struct netdev_notifier_bonding_info {
+	struct netdev_notifier_info info;
+	struct netdev_bonding_info bonding_info;
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct dev_kfree_skb_cb {
+	enum skb_free_reason reason;
+};
+
+struct netdev_adjacent {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	bool master;
+	bool ignore;
+	u16 ref_nr;
+	void *private;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+typedef u64 u_int64_t;
+
+enum {
+	BPF_F_RECOMPUTE_CSUM = 1,
+	BPF_F_INVALIDATE_HASH = 2,
+};
+
+enum {
+	BPF_F_HDR_FIELD_MASK = 15,
+};
+
+enum {
+	BPF_F_PSEUDO_HDR = 16,
+	BPF_F_MARK_MANGLED_0 = 32,
+	BPF_F_MARK_ENFORCE = 64,
+};
+
+enum {
+	BPF_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+	BPF_F_ZERO_CSUM_TX = 2,
+	BPF_F_DONT_FRAGMENT = 4,
+	BPF_F_SEQ_NUMBER = 8,
+};
+
+enum {
+	BPF_F_TUNINFO_FLAGS = 16,
+};
+
+enum {
+	BPF_F_INDEX_MASK = 4294967295ULL,
+	BPF_F_CURRENT_CPU = 4294967295ULL,
+	BPF_F_CTXLEN_MASK = 4503595332403200ULL,
+};
+
+enum {
+	BPF_CSUM_LEVEL_QUERY = 0,
+	BPF_CSUM_LEVEL_INC = 1,
+	BPF_CSUM_LEVEL_DEC = 2,
+	BPF_CSUM_LEVEL_RESET = 3,
+};
+
+enum {
+	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
+	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
+	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
+	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
+};
+
+enum {
+	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
+	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
+};
+
+enum {
+	BPF_SK_LOOKUP_F_REPLACE = 1,
+	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+enum bpf_adj_room_mode {
+	BPF_ADJ_ROOM_NET = 0,
+	BPF_ADJ_ROOM_MAC = 1,
+};
+
+enum bpf_hdr_start_off {
+	BPF_HDR_START_MAC = 0,
+	BPF_HDR_START_NET = 1,
+};
+
+enum bpf_lwt_encap_mode {
+	BPF_LWT_ENCAP_SEG6 = 0,
+	BPF_LWT_ENCAP_SEG6_INLINE = 1,
+	BPF_LWT_ENCAP_IP = 2,
+};
+
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
+struct bpf_tunnel_key {
+	__u32 tunnel_id;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+	__u8 tunnel_tos;
+	__u8 tunnel_ttl;
+	union {
+		__u16 tunnel_ext;
+		__be16 tunnel_flags;
+	};
+	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
+};
+
+struct bpf_xfrm_state {
+	__u32 reqid;
+	__u32 spi;
+	__u16 family;
+	__u16 ext;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+};
+
+struct bpf_tcp_sock {
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	__u32 dsack_dups;
+	__u32 delivered;
+	__u32 delivered_ce;
+	__u32 icsk_retransmits;
+};
+
+struct bpf_sock_tuple {
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+			__be16 sport;
+			__be16 dport;
+		} ipv4;
+		struct {
+			__be32 saddr[4];
+			__be32 daddr[4];
+			__be16 sport;
+			__be16 dport;
+		} ipv6;
+	};
+};
+
+struct bpf_xdp_sock {
+	__u32 queue_id;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+	__u64 skb_hwtstamp;
+};
+
+enum {
+	TCP_BPF_IW = 1001,
+	TCP_BPF_SNDCWND_CLAMP = 1002,
+	TCP_BPF_DELACK_MAX = 1003,
+	TCP_BPF_RTO_MIN = 1004,
+	TCP_BPF_SYN = 1005,
+	TCP_BPF_SYN_IP = 1006,
+	TCP_BPF_SYN_MAC = 1007,
+};
+
+enum {
+	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+enum {
+	BPF_FIB_LOOKUP_DIRECT = 1,
+	BPF_FIB_LOOKUP_OUTPUT = 2,
+};
+
+enum {
+	BPF_FIB_LKUP_RET_SUCCESS = 0,
+	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
+	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
+	BPF_FIB_LKUP_RET_PROHIBIT = 3,
+	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
+	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
+	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
+	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
+	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
+};
+
+struct bpf_fib_lookup {
+	__u8 family;
+	__u8 l4_protocol;
+	__be16 sport;
+	__be16 dport;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
+	__u32 ifindex;
+	union {
+		__u8 tos;
+		__be32 flowinfo;
+		__u32 rt_metric;
+	};
+	union {
+		__be32 ipv4_src;
+		__u32 ipv6_src[4];
+	};
+	union {
+		__be32 ipv4_dst;
+		__u32 ipv6_dst[4];
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__u8 smac[6];
+	__u8 dmac[6];
+};
+
+struct bpf_redir_neigh {
+	__u32 nh_family;
+	union {
+		__be32 ipv4_nh;
+		__u32 ipv6_nh[4];
+	};
+};
+
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
+};
+
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+	int (*ipv6_setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*ipv6_getsockopt)(struct sock *, int, int, sockptr_t, sockptr_t);
+};
+
+struct mptcp_sock {};
+
+struct strp_msg {
+	int full_len;
+	int offset;
+};
+
+struct _strp_msg {
+	struct strp_msg strp;
+	int accum_len;
+};
+
+struct tls_msg {
+	u8 control;
+};
+
+struct sk_skb_cb {
+	unsigned char data[20];
+	unsigned char pad[4];
+	struct _strp_msg strp;
+	struct tls_msg tls;
+	u64 temp_reg;
+};
+
+struct xdp_sock {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+	long: 64;
+};
+
+enum {
+	SEG6_LOCAL_ACTION_UNSPEC = 0,
+	SEG6_LOCAL_ACTION_END = 1,
+	SEG6_LOCAL_ACTION_END_X = 2,
+	SEG6_LOCAL_ACTION_END_T = 3,
+	SEG6_LOCAL_ACTION_END_DX2 = 4,
+	SEG6_LOCAL_ACTION_END_DX6 = 5,
+	SEG6_LOCAL_ACTION_END_DX4 = 6,
+	SEG6_LOCAL_ACTION_END_DT6 = 7,
+	SEG6_LOCAL_ACTION_END_DT4 = 8,
+	SEG6_LOCAL_ACTION_END_B6 = 9,
+	SEG6_LOCAL_ACTION_END_B6_ENCAP = 10,
+	SEG6_LOCAL_ACTION_END_BM = 11,
+	SEG6_LOCAL_ACTION_END_S = 12,
+	SEG6_LOCAL_ACTION_END_AS = 13,
+	SEG6_LOCAL_ACTION_END_AM = 14,
+	SEG6_LOCAL_ACTION_END_BPF = 15,
+	SEG6_LOCAL_ACTION_END_DT46 = 16,
+	__SEG6_LOCAL_ACTION_MAX = 17,
+};
+
+struct seg6_bpf_srh_state {
+	struct ipv6_sr_hdr *srh;
+	u16 hdrlen;
+	bool valid;
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 msg_ready: 1;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	spinlock_t decrypt_compl_lock;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
+	union {
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
+	};
+};
+
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool in_tcp_sendpages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	long unsigned int flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
+	struct list_head list;
+	refcount_t refcount;
+	struct callback_head rcu;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_udp {
+	long unsigned int stream_ts;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	long unsigned int status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {	} __nfct_init_offset;
+	struct nf_conn *master;
+	u_int32_t mark;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+};
+
+struct nf_conn___init {
+	struct nf_conn ct;
+};
+
+typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
+
+struct bpf_scratchpad {
+	union {
+		__be32 diff[128];
+		u8 buff[512];
+	};
+};
+
+typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
+
+typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
+
+typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
+
+typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
+
+enum {
+	BPF_F_NEIGH = 2,
+	BPF_F_PEER = 4,
+	BPF_F_NEXTHOP = 8,
+};
+
+typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_get_cgroup_classid_curr)();
+
+typedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
+
+typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
+
+typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
+
+typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
+typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
+
+typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
+
+typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
+typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
+
+typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_seg6_store_bytes)(struct sk_buff *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_lwt_seg6_action)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_seg6_adjust_srh)(struct sk_buff *, u32, s32);
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_release)(struct sock *);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *, struct tcphdr *);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *);
+
+typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct bpf_cpu_map_entry;
+
+struct bpf_dtab_netdev;
+
+struct unix_sock;
+
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
+};
+
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	short unsigned int protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long int sysctl_mem[3];
+	long int allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	long unsigned int txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+typedef __u16 port_id;
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	long unsigned int delay_time;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge;
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	long unsigned int multicast_last_member_interval;
+	long unsigned int multicast_membership_interval;
+	long unsigned int multicast_querier_interval;
+	long unsigned int multicast_query_interval;
+	long unsigned int multicast_query_response_interval;
+	long unsigned int multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	long unsigned int options;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	union {
+		struct rtable fake_rtable;
+		struct rt6_info fake_rt6_info;
+	};
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	long unsigned int max_age;
+	long unsigned int hello_time;
+	long unsigned int forward_delay;
+	long unsigned int ageing_time;
+	long unsigned int bridge_max_age;
+	long unsigned int bridge_hello_time;
+	long unsigned int bridge_forward_delay;
+	long unsigned int bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	struct hlist_head fdb_list;
+};
+
+struct net_bridge_port;
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+};
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	long unsigned int flags;
+	struct net_bridge_port *backup_port;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	long unsigned int designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	struct netpoll *np;
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst *tunnel_dst;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long unsigned int updated;
+	long unsigned int used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
+};
+
+enum {
+	LWT_BPF_PROG_UNSPEC = 0,
+	LWT_BPF_PROG_FD = 1,
+	LWT_BPF_PROG_NAME = 2,
+	__LWT_BPF_PROG_MAX = 3,
+};
+
+enum {
+	LWT_BPF_UNSPEC = 0,
+	LWT_BPF_IN = 1,
+	LWT_BPF_OUT = 2,
+	LWT_BPF_XMIT = 3,
+	LWT_BPF_XMIT_HEADROOM = 4,
+	__LWT_BPF_MAX = 5,
+};
+
+enum {
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 1,
+};
+
+struct bpf_lwt_prog {
+	struct bpf_prog *prog;
+	char *name;
+};
+
+struct bpf_lwt {
+	struct bpf_lwt_prog in;
+	struct bpf_lwt_prog out;
+	struct bpf_lwt_prog xmit;
+	int family;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+};
+
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
+};
+
+struct tc_mq_opt_offload_graft_params {
+	long unsigned int queue;
+	u32 child_handle;
+};
+
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
+};
+
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
+};
+
+struct tcf_ematch_tree_hdr {
+	__u16 nmatches;
+	__u16 progid;
+};
+
+enum {
+	TCA_EMATCH_TREE_UNSPEC = 0,
+	TCA_EMATCH_TREE_HDR = 1,
+	TCA_EMATCH_TREE_LIST = 2,
+	__TCA_EMATCH_TREE_MAX = 3,
+};
+
+struct tcf_ematch_hdr {
+	__u16 matchid;
+	__u16 kind;
+	__u16 flags;
+	__u16 pad;
+};
+
+struct tcf_pkt_info {
+	unsigned char *ptr;
+	int nexthdr;
+};
+
+struct tcf_ematch_ops;
+
+struct tcf_ematch {
+	struct tcf_ematch_ops *ops;
+	long unsigned int data;
+	unsigned int datalen;
+	u16 matchid;
+	u16 flags;
+	struct net *net;
+};
+
+struct tcf_ematch_ops {
+	int kind;
+	int datalen;
+	int (*change)(struct net *, void *, int, struct tcf_ematch *);
+	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
+	void (*destroy)(struct tcf_ematch *);
+	int (*dump)(struct sk_buff *, struct tcf_ematch *);
+	struct module *owner;
+	struct list_head link;
+};
+
+struct tcf_ematch_tree {
+	struct tcf_ematch_tree_hdr hdr;
+	struct tcf_ematch *matches;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+struct genl_op_iter {
+	const struct genl_family *family;
+	struct genl_split_ops doit;
+	struct genl_split_ops dumpit;
+	int cmd_idx;
+	int entry_idx;
+	u32 cmd;
+	u8 flags;
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_split_ops *ops;
+	int hdrlen;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	struct genl_op_iter *op_iter;
+	u32 op;
+	u16 fam_id;
+	u8 dump_map: 1;
+	u8 single_op: 1;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	int pos_hash;
+	int pos_idx;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct rss_req_info {
+	struct ethnl_req_info base;
+	u32 rss_context;
+};
+
+struct rss_reply_data {
+	struct ethnl_reply_data base;
+	u32 indir_size;
+	u32 hkey_size;
+	u32 hfunc;
+	u32 *indir_table;
+	u8 *hkey;
+};
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum ethtool_podl_pse_admin_state {
+	ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED = 2,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED = 3,
+};
+
+enum ethtool_podl_pse_pw_d_status {
+	ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED = 2,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING = 3,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING = 4,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP = 5,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE = 6,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR = 7,
+};
+
+struct pse_control_config {
+	enum ethtool_podl_pse_admin_state admin_cotrol;
+};
+
+struct pse_control_status {
+	enum ethtool_podl_pse_admin_state podl_admin_state;
+	enum ethtool_podl_pse_pw_d_status podl_pw_status;
+};
+
+struct pse_reply_data {
+	struct ethnl_reply_data base;
+	struct pse_control_status status;
+};
+
+struct nf_sockopt_ops {
+	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void *, int *);
+	struct module *owner;
+};
+
+struct ip_rt_acct {
+	__u32 o_bytes;
+	__u32 o_packets;
+	__u32 i_bytes;
+	__u32 i_packets;
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+struct tcp_plb_state {
+	u8 consec_cong_rounds: 5;
+	u8 unused: 3;
+	u32 pause_until;
+};
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct rtentry {
+	long unsigned int rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	long unsigned int rt_pad3;
+	void *rt_pad4;
+	short int rt_metric;
+	char *rt_dev;
+	long unsigned int rt_mtu;
+	long unsigned int rt_window;
+	short unsigned int rt_irtt;
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+	INET_FRAG_DROP = 16,
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+};
+
+struct umd_info {
+	const char *driver_name;
+	struct file *pipe_to_umh;
+	struct file *pipe_from_umh;
+	struct path wd;
+	struct pid *tgid;
+};
+
+struct bpfilter_umh_ops {
+	struct umd_info info;
+	struct mutex lock;
+	int (*sockopt)(struct sock *, int, sockptr_t, unsigned int, bool);
+	int (*start)();
+};
+
+struct rta_mfc_stats {
+	__u64 mfcs_packets;
+	__u64 mfcs_bytes;
+	__u64 mfcs_wrong_if;
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+enum rpc_display_format_t {
+	RPC_DISPLAY_ADDR = 0,
+	RPC_DISPLAY_PORT = 1,
+	RPC_DISPLAY_PROTO = 2,
+	RPC_DISPLAY_HEX_ADDR = 3,
+	RPC_DISPLAY_HEX_PORT = 4,
+	RPC_DISPLAY_NETID = 5,
+	RPC_DISPLAY_MAX = 6,
+};
+
+enum nfs_opnum4 {
+	OP_ACCESS = 3,
+	OP_CLOSE = 4,
+	OP_COMMIT = 5,
+	OP_CREATE = 6,
+	OP_DELEGPURGE = 7,
+	OP_DELEGRETURN = 8,
+	OP_GETATTR = 9,
+	OP_GETFH = 10,
+	OP_LINK = 11,
+	OP_LOCK = 12,
+	OP_LOCKT = 13,
+	OP_LOCKU = 14,
+	OP_LOOKUP = 15,
+	OP_LOOKUPP = 16,
+	OP_NVERIFY = 17,
+	OP_OPEN = 18,
+	OP_OPENATTR = 19,
+	OP_OPEN_CONFIRM = 20,
+	OP_OPEN_DOWNGRADE = 21,
+	OP_PUTFH = 22,
+	OP_PUTPUBFH = 23,
+	OP_PUTROOTFH = 24,
+	OP_READ = 25,
+	OP_READDIR = 26,
+	OP_READLINK = 27,
+	OP_REMOVE = 28,
+	OP_RENAME = 29,
+	OP_RENEW = 30,
+	OP_RESTOREFH = 31,
+	OP_SAVEFH = 32,
+	OP_SECINFO = 33,
+	OP_SETATTR = 34,
+	OP_SETCLIENTID = 35,
+	OP_SETCLIENTID_CONFIRM = 36,
+	OP_VERIFY = 37,
+	OP_WRITE = 38,
+	OP_RELEASE_LOCKOWNER = 39,
+	OP_BACKCHANNEL_CTL = 40,
+	OP_BIND_CONN_TO_SESSION = 41,
+	OP_EXCHANGE_ID = 42,
+	OP_CREATE_SESSION = 43,
+	OP_DESTROY_SESSION = 44,
+	OP_FREE_STATEID = 45,
+	OP_GET_DIR_DELEGATION = 46,
+	OP_GETDEVICEINFO = 47,
+	OP_GETDEVICELIST = 48,
+	OP_LAYOUTCOMMIT = 49,
+	OP_LAYOUTGET = 50,
+	OP_LAYOUTRETURN = 51,
+	OP_SECINFO_NO_NAME = 52,
+	OP_SEQUENCE = 53,
+	OP_SET_SSV = 54,
+	OP_TEST_STATEID = 55,
+	OP_WANT_DELEGATION = 56,
+	OP_DESTROY_CLIENTID = 57,
+	OP_RECLAIM_COMPLETE = 58,
+	OP_ALLOCATE = 59,
+	OP_COPY = 60,
+	OP_COPY_NOTIFY = 61,
+	OP_DEALLOCATE = 62,
+	OP_IO_ADVISE = 63,
+	OP_LAYOUTERROR = 64,
+	OP_LAYOUTSTATS = 65,
+	OP_OFFLOAD_CANCEL = 66,
+	OP_OFFLOAD_STATUS = 67,
+	OP_READ_PLUS = 68,
+	OP_SEEK = 69,
+	OP_WRITE_SAME = 70,
+	OP_CLONE = 71,
+	OP_GETXATTR = 72,
+	OP_SETXATTR = 73,
+	OP_LISTXATTRS = 74,
+	OP_REMOVEXATTR = 75,
+	OP_ILLEGAL = 10044,
+};
+
+struct ic_device {
+	struct ic_device *next;
+	struct net_device *dev;
+	short unsigned int flags;
+	short int able;
+	__be32 xid;
+};
+
+struct bootp_pkt {
+	struct iphdr iph;
+	struct udphdr udph;
+	u8 op;
+	u8 htype;
+	u8 hlen;
+	u8 hops;
+	__be32 xid;
+	__be16 secs;
+	__be16 flags;
+	__be32 client_ip;
+	__be32 your_ip;
+	__be32 server_ip;
+	__be32 relay_ip;
+	u8 hw_addr[16];
+	u8 serv_name[64];
+	u8 boot_file[128];
+	u8 exten[312];
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol *next;
+	int priority;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+struct __ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	bool collect_md;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	__u32 fwmark;
+	__u32 index;
+	__u8 erspan_ver;
+	__u8 dir;
+	__u16 hwid;
+};
+
+struct ip6_tnl {
+	struct ip6_tnl *next;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	struct __ip6_tnl_parm parms;
+	struct flowi fl;
+	struct dst_cache dst_cache;
+	struct gro_cells gro_cells;
+	int err_count;
+	long unsigned int err_time;
+	__u32 i_seqno;
+	atomic_t o_seqno;
+	int hlen;
+	int tun_hlen;
+	int encap_hlen;
+	struct ip_tunnel_encap encap;
+	int mlink;
+};
+
+struct xfrm_trans_tasklet {
+	struct work_struct work;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+};
+
+struct xfrm_trans_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	int (*finish)(struct net *, struct sock *, struct sk_buff *);
+	struct net *net;
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	long unsigned int rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+struct rt6_exception {
+	struct hlist_node hlist;
+	struct rt6_info *rt6i;
+	long unsigned int stamp;
+	struct callback_head rcu;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct netevent_redirect {
+	struct dst_entry *old;
+	struct dst_entry *new;
+	struct neighbour *neigh;
+	const void *daddr;
+};
+
+struct trace_event_raw_fib6_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[16];
+	__u8 dst[16];
+	u16 sport;
+	u16 dport;
+	u8 proto;
+	u8 rt_type;
+	char name[16];
+	__u8 gw[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib6_table_lookup {};
+
+typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
+
+enum rt6_nud_state {
+	RT6_NUD_FAIL_HARD = -3,
+	RT6_NUD_FAIL_PROBE = -2,
+	RT6_NUD_FAIL_DO_RR = -1,
+	RT6_NUD_SUCCEED = 1,
+};
+
+struct fib6_nh_dm_arg {
+	struct net *net;
+	const struct in6_addr *saddr;
+	int oif;
+	int flags;
+	struct fib6_nh *nh;
+};
+
+struct __rt6_probe_work {
+	struct work_struct work;
+	struct in6_addr target;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+};
+
+struct fib6_nh_frl_arg {
+	u32 flags;
+	int oif;
+	int strict;
+	int *mpri;
+	bool *do_rr;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_excptn_arg {
+	struct rt6_info *rt;
+	int plen;
+};
+
+struct fib6_nh_match_arg {
+	const struct net_device *dev;
+	const struct in6_addr *gw;
+	struct fib6_nh *match;
+};
+
+struct fib6_nh_age_excptn_arg {
+	struct fib6_gc_args *gc_args;
+	long unsigned int now;
+};
+
+struct fib6_nh_rd_arg {
+	struct fib6_result *res;
+	struct flowi6 *fl6;
+	const struct in6_addr *gw;
+	struct rt6_info **ret;
+};
+
+struct ip6rd_flowi {
+	struct flowi6 fl6;
+	struct in6_addr gateway;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+	struct fib6_config *cfg;
+	struct fib6_info *f6i;
+};
+
+struct arg_dev_net_ip {
+	struct net_device *dev;
+	struct net *net;
+	struct in6_addr *addr;
+};
+
+struct arg_netdev_event {
+	const struct net_device *dev;
+	union {
+		unsigned char nh_flags;
+		long unsigned int event;
+	};
+};
+
+struct rt6_mtu_change_arg {
+	struct net_device *dev;
+	unsigned int mtu;
+	struct fib6_info *f6i;
+};
+
+struct rt6_nh {
+	struct fib6_info *fib6_info;
+	struct fib6_config r_cfg;
+	struct list_head next;
+};
+
+struct fib6_nh_exception_dump_walker {
+	struct rt6_rtnl_dump_arg *dump;
+	struct fib6_info *rt;
+	unsigned int flags;
+	unsigned int skip;
+	unsigned int count;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct in6_addr addr[0];
+		__u8 data[0];
+	} segments;
+};
+
+enum {
+	RPL_IPTUNNEL_UNSPEC = 0,
+	RPL_IPTUNNEL_SRH = 1,
+	__RPL_IPTUNNEL_MAX = 2,
+};
+
+struct rpl_iptunnel_encap {
+	struct ipv6_rpl_sr_hdr srh[0];
+};
+
+struct rpl_lwt {
+	struct dst_cache cache;
+	struct rpl_iptunnel_encap tuninfo;
+};
+
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
+struct rds_info_counter {
+	__u8 name[32];
+	__u64 value;
+};
+
+struct rds_page_remainder {
+	struct page *r_page;
+	long unsigned int r_offset;
+};
+
+struct iw_thrspy {
+	struct sockaddr addr;
+	struct iw_quality qual;
+	struct iw_quality low;
+	struct iw_quality high;
+};
+
+struct cfmuxl {
+	struct cflayer layer;
+	struct list_head srvl_list;
+	struct list_head frml_list;
+	struct cflayer *up_cache[8];
+	struct cflayer *dn_cache[8];
+	spinlock_t transmit_lock;
+	spinlock_t receive_lock;
+};
+
+enum ifla_caif {
+	__IFLA_CAIF_UNSPEC = 0,
+	IFLA_CAIF_IPV4_CONNID = 1,
+	IFLA_CAIF_IPV6_CONNID = 2,
+	IFLA_CAIF_LOOPBACK = 3,
+	__IFLA_CAIF_MAX = 4,
+};
+
+enum caif_states___2 {
+	CAIF_CONNECTED___2 = 1,
+	CAIF_CONNECTING___2 = 2,
+	CAIF_DISCONNECTED___2 = 3,
+	CAIF_SHUTDOWN = 4,
+};
+
+struct chnl_net {
+	struct cflayer chnl;
+	struct caif_connect_request conn_req;
+	struct list_head list_field;
+	struct net_device *netdev;
+	char name[256];
+	wait_queue_head_t netmgmt_wq;
+	bool flowenabled;
+	enum caif_states___2 state;
+};
+
+enum dns_payload_content_type {
+	DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+
+struct dns_payload_header {
+	__u8 zero;
+	__u8 content;
+	__u8 version;
+};
+
+enum {
+	dns_key_data = 0,
+	dns_key_error = 1,
+};
+
+struct xdp_umem_reg {
+	__u64 addr;
+	__u64 len;
+	__u32 chunk_size;
+	__u32 headroom;
+	__u32 flags;
+};
+
+struct group_data {
+	int limit[21];
+	int base[20];
+	int permute[258];
+	int minLen;
+	int maxLen;
+};
+
+struct bunzip_data {
+	int writeCopies;
+	int writePos;
+	int writeRunCountdown;
+	int writeCount;
+	int writeCurrent;
+	long int (*fill)(void *, long unsigned int);
+	long int inbufCount;
+	long int inbufPos;
+	unsigned char *inbuf;
+	unsigned int inbufBitCount;
+	unsigned int inbufBits;
+	unsigned int crc32Table[256];
+	unsigned int headerCRC;
+	unsigned int totalCRC;
+	unsigned int writeCRC;
+	unsigned int *dbuf;
+	unsigned int dbufSize;
+	unsigned char selectors[32768];
+	struct group_data groups[6];
+	int io_error;
+	int byteCount[256];
+	unsigned char symToByte[256];
+	unsigned char mtfSymbol[256];
+};
+
+struct fdt_errtabent {
+	const char *str;
+};
+
+struct ida_bitmap {
+	long unsigned int bitmap[16];
+};
+
+struct uevent_sock {
+	struct list_head list;
+	struct sock *sk;
+};
+
+typedef struct {
+	long unsigned int key[2];
+} hsiphash_key_t;
+
+typedef __u32 Elf32_Word;
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct acpi_table_mcfg {
+	struct acpi_table_header header;
+	u8 reserved[8];
+};
+
+struct acpi_mcfg_allocation {
+	u64 address;
+	u16 pci_segment;
+	u8 start_bus_number;
+	u8 end_bus_number;
+	u32 reserved;
+};
+
+struct sigcontext {
+	__u64 sc_pc;
+	__u64 sc_regs[32];
+	__u32 sc_flags;
+	__u64 sc_extcontext[0];
+};
+
+struct sctx_info {
+	__u32 magic;
+	__u32 size;
+	__u64 padding;
+};
+
+struct fpu_context {
+	__u64 regs[32];
+	__u64 fcc;
+	__u32 fcsr;
+};
+
+struct lsx_context {
+	__u64 regs[64];
+	__u64 fcc;
+	__u32 fcsr;
+};
+
+struct lasx_context {
+	__u64 regs[128];
+	__u64 fcc;
+	__u32 fcsr;
+};
+
+struct sigaltstack {
+	void *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct ucontext {
+	long unsigned int uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	sigset_t uc_sigmask;
+	__u8 __unused[120];
+	long: 64;
+	struct sigcontext uc_mcontext;
+};
+
+struct rt_sigframe {
+	struct siginfo rs_info;
+	struct ucontext rs_uctx;
+};
+
+struct _ctx_layout {
+	struct sctx_info *addr;
+	unsigned int size;
+};
+
+struct extctx_layout {
+	long unsigned int size;
+	unsigned int flags;
+	struct _ctx_layout fpu;
+	struct _ctx_layout lsx;
+	struct _ctx_layout lasx;
+	struct _ctx_layout end;
+};
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	long unsigned int size;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
+};
+
+struct got_entry {
+	Elf64_Addr symbol_addr;
+};
+
+struct plt_idx_entry {
+	Elf64_Addr symbol_addr;
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+struct numa_memblk {
+	u64 start;
+	u64 end;
+	int nid;
+};
+
+struct numa_meminfo {
+	int nr_blks;
+	struct numa_memblk blk[128];
+};
+
+enum invtlb_ops {
+	INVTLB_ALL = 0,
+	INVTLB_CURRENT_ALL = 1,
+	INVTLB_CURRENT_GTRUE = 2,
+	INVTLB_CURRENT_GFALSE = 3,
+	INVTLB_GFALSE_AND_ASID = 4,
+	INVTLB_ADDR_GFALSE_AND_ASID = 5,
+	INVTLB_ADDR_GTRUE_OR_ASID = 6,
+	INVGTLB_GID = 9,
+	INVGTLB_GID_GTRUE = 10,
+	INVGTLB_GID_GFALSE = 11,
+	INVGTLB_GID_GFALSE_ASID = 12,
+	INVGTLB_GID_GFALSE_ASID_ADDR = 13,
+	INVGTLB_GID_GTRUE_ASID_ADDR = 14,
+	INVGTLB_ALLGID_GVA_TO_GPA = 16,
+	INVTLB_ALLGID_GPA_TO_HPA = 17,
+	INVTLB_ALLGID = 18,
+	INVGTLB_GID_GVA_TO_GPA = 19,
+	INVTLB_GID_GPA_TO_HPA = 20,
+	INVTLB_GID_ALL = 21,
+	INVTLB_GID_ADDR = 22,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+struct waitid_info {
+	pid_t pid;
+	uid_t uid;
+	int status;
+	int cause;
+};
+
+struct wait_opts {
+	enum pid_type wo_type;
+	int wo_flags;
+	struct pid *wo_pid;
+	struct waitid_info *wo_info;
+	int wo_stat;
+	struct rusage *wo_rusage;
+	wait_queue_entry_t child_wait;
+	int notask_error;
+};
+
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
+};
+
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	long unsigned int sa_handler;
+	long unsigned int sa_flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+struct kthread_create_info {
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread {
+	long unsigned int flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+enum what {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
+enum uclamp_id {
+	UCLAMP_MIN = 0,
+	UCLAMP_MAX = 1,
+	UCLAMP_CNT = 2,
+};
+
+struct numa_group {
+	refcount_t refcount;
+	spinlock_t lock;
+	int nr_tasks;
+	pid_t gid;
+	int active_nodes;
+	struct callback_head rcu;
+	long unsigned int total_faults;
+	long unsigned int max_faults_cpu;
+	long unsigned int faults[0];
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+enum numa_faults_stats {
+	NUMA_MEM = 0,
+	NUMA_CPU = 1,
+	NUMA_MEMBUF = 2,
+	NUMA_CPUBUF = 3,
+};
+
+enum numa_type {
+	node_has_spare = 0,
+	node_fully_busy = 1,
+	node_overloaded = 2,
+};
+
+struct numa_stats {
+	long unsigned int load;
+	long unsigned int runnable;
+	long unsigned int util;
+	long unsigned int compute_capacity;
+	unsigned int nr_running;
+	unsigned int weight;
+	enum numa_type node_type;
+	int idle_cpu;
+};
+
+struct task_numa_env {
+	struct task_struct *p;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	int imb_numa_nr;
+	struct numa_stats src_stats;
+	struct numa_stats dst_stats;
+	int imbalance_pct;
+	int dist;
+	struct task_struct *best_task;
+	long int best_imp;
+	int best_cpu;
+};
+
+struct energy_env {
+	long unsigned int task_busy_time;
+	long unsigned int pd_busy_time;
+	long unsigned int cpu_cap;
+	long unsigned int pd_cap;
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_asym_packing = 3,
+	group_imbalanced = 4,
+	group_overloaded = 5,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long int imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+};
+
+struct sg_lb_stats {
+	long unsigned int avg_load;
+	long unsigned int group_load;
+	long unsigned int group_capacity;
+	long unsigned int group_util;
+	long unsigned int group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	long unsigned int group_misfit_task_load;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	long unsigned int total_load;
+	long unsigned int total_capacity;
+	long unsigned int avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	long unsigned int timeout;
+	bool handoff_set;
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+struct pm_vt_switch {
+	struct list_head head;
+	struct device *dev;
+	bool required;
+};
+
+struct dev_printk_info;
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+struct msi_domain_template {
+	char name[48];
+	struct irq_chip chip;
+	struct msi_domain_ops ops;
+	struct msi_domain_info info;
+};
+
+struct msi_ctrl {
+	unsigned int domid;
+	unsigned int first;
+	unsigned int last;
+	unsigned int nirqs;
+};
+
+struct dma_map_ops {
+	unsigned int flags;
+	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
+	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
+	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
+	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
+	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
+	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
+	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
+	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
+	int (*dma_supported)(struct device *, u64);
+	u64 (*get_required_mask)(struct device *);
+	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
+	long unsigned int (*get_merge_boundary)(struct device *);
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	long unsigned int attrs;
+};
+
+struct dma_coherent_mem {
+	void *virt_base;
+	dma_addr_t device_base;
+	long unsigned int pfn_base;
+	int size;
+	long unsigned int *bitmap;
+	spinlock_t spinlock;
+	bool use_dev_dma_pfn_offset;
+};
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long int id;
+	long unsigned int args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long int id;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+struct class_interface {
+	struct list_head node;
+	struct class *class;
+	int (*add_dev)(struct device *, struct class_interface *);
+	void (*remove_dev)(struct device *, struct class_interface *);
+};
+
+struct trace_event_raw_alarmtimer_suspend {
+	struct trace_entry ent;
+	s64 expires;
+	unsigned char alarm_type;
+	char __data[0];
+};
+
+struct trace_event_raw_alarm_class {
+	struct trace_entry ent;
+	void *alarm;
+	unsigned char alarm_type;
+	s64 expires;
+	s64 now;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alarmtimer_suspend {};
+
+struct trace_event_data_offsets_alarm_class {};
+
+typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
+
+typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
+
+struct alarm_base {
+	spinlock_t lock;
+	struct timerqueue_head timerqueue;
+	ktime_t (*get_ktime)();
+	void (*get_timespec)(struct timespec64 *);
+	clockid_t base_clockid;
+};
+
+struct clock_read_data {
+	u64 epoch_ns;
+	u64 epoch_cyc;
+	u64 sched_clock_mask;
+	u64 (*read_sched_clock)();
+	u32 mult;
+	u32 shift;
+};
+
+struct clock_data {
+	seqcount_latch_t seq;
+	struct clock_read_data read_data[2];
+	ktime_t wrap_kt;
+	long unsigned int rate;
+	u64 (*actual_read_sched_clock)();
+};
+
+struct kallsym_iter {
+	loff_t pos;
+	loff_t pos_arch_end;
+	loff_t pos_mod_end;
+	loff_t pos_ftrace_mod_end;
+	loff_t pos_bpf_end;
+	long unsigned int value;
+	unsigned int nameoff;
+	char type;
+	char name[512];
+	char module_name[56];
+	int exported;
+	int show_value;
+};
+
+struct bpf_iter__ksym {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct kallsym_iter *ksym;
+	};
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+};
+
+enum freezer_state_flags {
+	CGROUP_FREEZER_ONLINE = 1,
+	CGROUP_FREEZING_SELF = 2,
+	CGROUP_FREEZING_PARENT = 4,
+	CGROUP_FROZEN = 8,
+	CGROUP_FREEZING = 6,
+};
+
+struct freezer {
+	struct cgroup_subsys_state css;
+	unsigned int state;
+};
+
+struct root_domain;
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+enum prs_errcode {
+	PERR_NONE = 0,
+	PERR_INVCPUS = 1,
+	PERR_INVPARENT = 2,
+	PERR_NOTPART = 3,
+	PERR_NOTEXCL = 4,
+	PERR_NOCPUS = 5,
+	PERR_HOTPLUG = 6,
+	PERR_CPUSEMPTY = 7,
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	long unsigned int flags;
+	cpumask_var_t cpus_allowed;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	enum prs_errcode prs_err;
+	struct cgroup_file partition_file;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+	partcmd_invalidate = 3,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+enum audit_nlgrps {
+	AUDIT_NLGRP_NONE = 0,
+	AUDIT_NLGRP_READLOG = 1,
+	__AUDIT_NLGRP_MAX = 2,
+};
+
+struct audit_status {
+	__u32 mask;
+	__u32 enabled;
+	__u32 failure;
+	__u32 pid;
+	__u32 rate_limit;
+	__u32 backlog_limit;
+	__u32 lost;
+	__u32 backlog;
+	union {
+		__u32 version;
+		__u32 feature_bitmap;
+	};
+	__u32 backlog_wait_time;
+	__u32 backlog_wait_time_actual;
+};
+
+struct audit_features {
+	__u32 vers;
+	__u32 mask;
+	__u32 features;
+	__u32 lock;
+};
+
+struct audit_tty_status {
+	__u32 enabled;
+	__u32 log_passwd;
+};
+
+struct audit_sig_info {
+	uid_t uid;
+	pid_t pid;
+	char ctx[0];
+};
+
+struct audit_net {
+	struct sock *sk;
+};
+
+struct auditd_connection {
+	struct pid *pid;
+	u32 portid;
+	struct net *net;
+	struct callback_head rcu;
+};
+
+struct audit_ctl_mutex {
+	struct mutex lock;
+	void *owner;
+};
+
+struct audit_buffer {
+	struct sk_buff *skb;
+	struct audit_context *ctx;
+	gfp_t gfp_mask;
+};
+
+struct audit_reply {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff *skb;
+};
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+enum {
+	TASKSTATS_TYPE_UNSPEC = 0,
+	TASKSTATS_TYPE_PID = 1,
+	TASKSTATS_TYPE_TGID = 2,
+	TASKSTATS_TYPE_STATS = 3,
+	TASKSTATS_TYPE_AGGR_PID = 4,
+	TASKSTATS_TYPE_AGGR_TGID = 5,
+	TASKSTATS_TYPE_NULL = 6,
+	__TASKSTATS_TYPE_MAX = 7,
+};
+
+enum {
+	TASKSTATS_CMD_ATTR_UNSPEC = 0,
+	TASKSTATS_CMD_ATTR_PID = 1,
+	TASKSTATS_CMD_ATTR_TGID = 2,
+	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
+	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
+	__TASKSTATS_CMD_ATTR_MAX = 5,
+};
+
+enum {
+	CGROUPSTATS_CMD_UNSPEC = 3,
+	CGROUPSTATS_CMD_GET = 4,
+	CGROUPSTATS_CMD_NEW = 5,
+	__CGROUPSTATS_CMD_MAX = 6,
+};
+
+enum {
+	CGROUPSTATS_TYPE_UNSPEC = 0,
+	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
+	__CGROUPSTATS_TYPE_MAX = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+	CGROUPSTATS_CMD_ATTR_FD = 1,
+	__CGROUPSTATS_CMD_ATTR_MAX = 2,
+};
+
+struct listener {
+	struct list_head list;
+	pid_t pid;
+	char valid;
+};
+
+struct listener_list {
+	struct rw_semaphore sem;
+	struct list_head list;
+};
+
+enum actions {
+	REGISTER = 0,
+	DEREGISTER = 1,
+	CPU_DONT_CARE = 2,
+};
+
+enum ring_buffer_type {
+	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
+	RINGBUF_TYPE_PADDING = 29,
+	RINGBUF_TYPE_TIME_EXTEND = 30,
+	RINGBUF_TYPE_TIME_STAMP = 31,
+};
+
+enum ring_buffer_flags {
+	RB_FL_OVERWRITE = 1,
+};
+
+struct ring_buffer_per_cpu;
+
+struct buffer_page;
+
+struct ring_buffer_iter {
+	struct ring_buffer_per_cpu *cpu_buffer;
+	long unsigned int head;
+	long unsigned int next_event;
+	struct buffer_page *head_page;
+	struct buffer_page *cache_reader_page;
+	long unsigned int cache_read;
+	u64 read_stamp;
+	u64 page_stamp;
+	struct ring_buffer_event *event;
+	int missed_events;
+};
+
+struct rb_irq_work {
+	struct irq_work work;
+	wait_queue_head_t waiters;
+	wait_queue_head_t full_waiters;
+	long int wait_index;
+	bool waiters_pending;
+	bool full_waiters_pending;
+	bool wakeup_full;
+};
+
+struct trace_buffer {
+	unsigned int flags;
+	int cpus;
+	atomic_t record_disabled;
+	cpumask_var_t cpumask;
+	struct lock_class_key *reader_lock_key;
+	struct mutex mutex;
+	struct ring_buffer_per_cpu **buffers;
+	struct hlist_node node;
+	u64 (*clock)();
+	struct rb_irq_work irq_work;
+	bool time_stamp_abs;
+};
+
+enum {
+	RB_LEN_TIME_EXTEND = 8,
+	RB_LEN_TIME_STAMP = 8,
+};
+
+struct buffer_data_page {
+	u64 time_stamp;
+	local_t commit;
+	unsigned char data[0];
+};
+
+struct buffer_page {
+	struct list_head list;
+	local_t write;
+	unsigned int read;
+	local_t entries;
+	long unsigned int real_end;
+	struct buffer_data_page *page;
+};
+
+struct rb_event_info {
+	u64 ts;
+	u64 delta;
+	u64 before;
+	u64 after;
+	long unsigned int length;
+	struct buffer_page *tail_page;
+	int add_timestamp;
+};
+
+enum {
+	RB_ADD_STAMP_NONE = 0,
+	RB_ADD_STAMP_EXTEND = 2,
+	RB_ADD_STAMP_ABSOLUTE = 4,
+	RB_ADD_STAMP_FORCE = 8,
+};
+
+enum {
+	RB_CTX_TRANSITION = 0,
+	RB_CTX_NMI = 1,
+	RB_CTX_IRQ = 2,
+	RB_CTX_SOFTIRQ = 3,
+	RB_CTX_NORMAL = 4,
+	RB_CTX_MAX = 5,
+};
+
+struct rb_time_struct {
+	local64_t time;
+};
+
+typedef struct rb_time_struct rb_time_t;
+
+struct ring_buffer_per_cpu {
+	int cpu;
+	atomic_t record_disabled;
+	atomic_t resize_disabled;
+	struct trace_buffer *buffer;
+	raw_spinlock_t reader_lock;
+	arch_spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct buffer_data_page *free_page;
+	long unsigned int nr_pages;
+	unsigned int current_context;
+	struct list_head *pages;
+	struct buffer_page *head_page;
+	struct buffer_page *tail_page;
+	struct buffer_page *commit_page;
+	struct buffer_page *reader_page;
+	long unsigned int lost_events;
+	long unsigned int last_overrun;
+	long unsigned int nest;
+	local_t entries_bytes;
+	local_t entries;
+	local_t overrun;
+	local_t commit_overrun;
+	local_t dropped_events;
+	local_t committing;
+	local_t commits;
+	local_t pages_touched;
+	local_t pages_lost;
+	local_t pages_read;
+	long int last_pages_touch;
+	size_t shortest_full;
+	long unsigned int read;
+	long unsigned int read_bytes;
+	rb_time_t write_stamp;
+	rb_time_t before_stamp;
+	u64 event_stamp[5];
+	u64 read_stamp;
+	long int nr_pages_to_update;
+	struct list_head new_pages;
+	struct work_struct update_pages_work;
+	struct completion update_done;
+	struct rb_irq_work irq_work;
+};
+
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
+};
+
+enum {
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct boot_triggers {
+	const char *event;
+	char *trigger;
+};
+
+struct event_probe_data {
+	struct trace_event_file *file;
+	long unsigned int count;
+	int ref;
+	bool enable;
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+struct regex;
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum filter_pred_fn {
+	FILTER_PRED_FN_NOP = 0,
+	FILTER_PRED_FN_64 = 1,
+	FILTER_PRED_FN_S64 = 2,
+	FILTER_PRED_FN_U64 = 3,
+	FILTER_PRED_FN_32 = 4,
+	FILTER_PRED_FN_S32 = 5,
+	FILTER_PRED_FN_U32 = 6,
+	FILTER_PRED_FN_16 = 7,
+	FILTER_PRED_FN_S16 = 8,
+	FILTER_PRED_FN_U16 = 9,
+	FILTER_PRED_FN_8 = 10,
+	FILTER_PRED_FN_S8 = 11,
+	FILTER_PRED_FN_U8 = 12,
+	FILTER_PRED_FN_COMM = 13,
+	FILTER_PRED_FN_STRING = 14,
+	FILTER_PRED_FN_STRLOC = 15,
+	FILTER_PRED_FN_STRRELLOC = 16,
+	FILTER_PRED_FN_PCHAR_USER = 17,
+	FILTER_PRED_FN_PCHAR = 18,
+	FILTER_PRED_FN_CPU = 19,
+	FILTER_PRED_FN_ = 20,
+	FILTER_PRED_TEST_VISITED = 21,
+};
+
+struct filter_pred {
+	enum filter_pred_fn fn_num;
+	u64 val;
+	struct regex regex;
+	short unsigned int *ops;
+	struct ftrace_event_field *field;
+	int offset;
+	int not;
+	int op;
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_OPERAND_TOO_LONG = 5,
+	FILT_ERR_EXPECT_STRING = 6,
+	FILT_ERR_EXPECT_DIGIT = 7,
+	FILT_ERR_ILLEGAL_FIELD_OP = 8,
+	FILT_ERR_FIELD_NOT_FOUND = 9,
+	FILT_ERR_ILLEGAL_INTVAL = 10,
+	FILT_ERR_BAD_SUBSYS_FILTER = 11,
+	FILT_ERR_TOO_MANY_PREDS = 12,
+	FILT_ERR_INVALID_FILTER = 13,
+	FILT_ERR_IP_FIELD_ONLY = 14,
+	FILT_ERR_INVALID_VALUE = 15,
+	FILT_ERR_ERRNO = 16,
+	FILT_ERR_NO_FILTER = 17,
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum {
+	TOO_MANY_CLOSE = -1,
+	TOO_MANY_OPEN = -2,
+	MISSING_QUOTE = -3,
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct function_filter_data {
+	struct ftrace_ops *ops;
+	int first_filter;
+	int first_notrace;
+};
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int);
+
 struct trace_event_raw_rpm_internal {
 	struct trace_entry ent;
 	u32 __data_loc_name;
@@ -29917,15 +89512,6 @@
 
 typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
 
-typedef int (*dynevent_check_arg_fn_t)(void *);
-
-struct dynevent_arg_pair {
-	const char *lhs;
-	const char *rhs;
-	char operator;
-	char separator;
-};
-
 struct trace_probe_log {
 	const char *subsystem;
 	const char **argv;
@@ -29933,758 +89519,13 @@
 	int index;
 };
 
-enum uprobe_filter_ctx {
-	UPROBE_FILTER_REGISTER = 0,
-	UPROBE_FILTER_UNREGISTER = 1,
-	UPROBE_FILTER_MMAP = 2,
-};
-
-struct uprobe_consumer {
-	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
-	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
-	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-	struct uprobe_consumer *next;
-};
-
-struct uprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int vaddr[0];
-};
-
-struct trace_uprobe {
-	struct dyn_event devent;
-	struct uprobe_consumer consumer;
-	struct path path;
-	struct inode *inode;
-	char *filename;
-	long unsigned int offset;
-	long unsigned int ref_ctr_offset;
-	long unsigned int nhit;
-	struct trace_probe tp;
-};
-
-struct uprobe_dispatch_data {
-	struct trace_uprobe *tu;
-	long unsigned int bp_addr;
-};
-
-struct uprobe_cpu_buffer {
-	struct mutex mutex;
-	void *buf;
-};
-
-typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-
-struct rnd_state {
-	__u32 s1;
-	__u32 s2;
-	__u32 s3;
-	__u32 s4;
-};
-
-struct rhash_lock_head;
-
-struct bucket_table {
-	unsigned int size;
-	unsigned int nest;
-	u32 hash_rnd;
-	struct list_head walkers;
-	struct callback_head rcu;
-	struct bucket_table *future_tbl;
-	struct lockdep_map dep_map;
-	long: 64;
-	struct rhash_lock_head *buckets[0];
-};
-
-enum xdp_action {
-	XDP_ABORTED = 0,
-	XDP_DROP = 1,
-	XDP_PASS = 2,
-	XDP_TX = 3,
-	XDP_REDIRECT = 4,
-};
-
-enum bpf_jit_poke_reason {
-	BPF_POKE_REASON_TAIL_CALL = 0,
-};
-
-enum bpf_text_poke_type {
-	BPF_MOD_CALL = 0,
-	BPF_MOD_JUMP = 1,
-};
-
-enum xdp_mem_type {
-	MEM_TYPE_PAGE_SHARED = 0,
-	MEM_TYPE_PAGE_ORDER0 = 1,
-	MEM_TYPE_PAGE_POOL = 2,
-	MEM_TYPE_XSK_BUFF_POOL = 3,
-	MEM_TYPE_MAX = 4,
-};
-
-struct xdp_cpumap_stats {
-	unsigned int redirect;
-	unsigned int pass;
-	unsigned int drop;
-};
-
-typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
-
-struct bpf_prog_dummy {
-	struct bpf_prog prog;
-};
-
-typedef u64 (*btf_bpf_user_rnd_u32)();
-
-typedef u64 (*btf_bpf_get_raw_cpu_id)();
-
-struct _bpf_dtab_netdev {
-	struct net_device *dev;
-};
-
-struct rhash_lock_head {};
-
-struct zero_copy_allocator;
-
-struct page_pool;
-
-struct xdp_mem_allocator {
-	struct xdp_mem_info mem;
-	union {
-		void *allocator;
-		struct page_pool *page_pool;
-		struct zero_copy_allocator *zc_alloc;
-	};
-	struct rhash_head node;
-	struct callback_head rcu;
-};
-
-struct trace_event_raw_xdp_exception {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_bulk_tx {
-	struct trace_entry ent;
-	int ifindex;
-	u32 act;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_redirect_template {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	int err;
-	int to_ifindex;
-	u32 map_id;
-	int map_index;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_kthread {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int sched;
-	unsigned int xdp_pass;
-	unsigned int xdp_drop;
-	unsigned int xdp_redirect;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_enqueue {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int to_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_devmap_xmit {
-	struct trace_entry ent;
-	int from_ifindex;
-	u32 act;
-	int to_ifindex;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_disconnect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_connect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	const struct xdp_rxq_info *rxq;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_return_failed {
-	struct trace_entry ent;
-	const struct page *page;
-	u32 mem_id;
-	u32 mem_type;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_xdp_exception {};
-
-struct trace_event_data_offsets_xdp_bulk_tx {};
-
-struct trace_event_data_offsets_xdp_redirect_template {};
-
-struct trace_event_data_offsets_xdp_cpumap_kthread {};
-
-struct trace_event_data_offsets_xdp_cpumap_enqueue {};
-
-struct trace_event_data_offsets_xdp_devmap_xmit {};
-
-struct trace_event_data_offsets_mem_disconnect {};
-
-struct trace_event_data_offsets_mem_connect {};
-
-struct trace_event_data_offsets_mem_return_failed {};
-
-typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
-
-typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
-
-typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
-
-typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
-
-typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
-
-enum bpf_cmd {
-	BPF_MAP_CREATE = 0,
-	BPF_MAP_LOOKUP_ELEM = 1,
-	BPF_MAP_UPDATE_ELEM = 2,
-	BPF_MAP_DELETE_ELEM = 3,
-	BPF_MAP_GET_NEXT_KEY = 4,
-	BPF_PROG_LOAD = 5,
-	BPF_OBJ_PIN = 6,
-	BPF_OBJ_GET = 7,
-	BPF_PROG_ATTACH = 8,
-	BPF_PROG_DETACH = 9,
-	BPF_PROG_TEST_RUN = 10,
-	BPF_PROG_GET_NEXT_ID = 11,
-	BPF_MAP_GET_NEXT_ID = 12,
-	BPF_PROG_GET_FD_BY_ID = 13,
-	BPF_MAP_GET_FD_BY_ID = 14,
-	BPF_OBJ_GET_INFO_BY_FD = 15,
-	BPF_PROG_QUERY = 16,
-	BPF_RAW_TRACEPOINT_OPEN = 17,
-	BPF_BTF_LOAD = 18,
-	BPF_BTF_GET_FD_BY_ID = 19,
-	BPF_TASK_FD_QUERY = 20,
-	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
-	BPF_MAP_FREEZE = 22,
-	BPF_BTF_GET_NEXT_ID = 23,
-	BPF_MAP_LOOKUP_BATCH = 24,
-	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
-	BPF_MAP_UPDATE_BATCH = 26,
-	BPF_MAP_DELETE_BATCH = 27,
-	BPF_LINK_CREATE = 28,
-	BPF_LINK_UPDATE = 29,
-	BPF_LINK_GET_FD_BY_ID = 30,
-	BPF_LINK_GET_NEXT_ID = 31,
-	BPF_ENABLE_STATS = 32,
-	BPF_ITER_CREATE = 33,
-	BPF_LINK_DETACH = 34,
-	BPF_PROG_BIND_MAP = 35,
-};
-
-enum {
-	BPF_ANY = 0,
-	BPF_NOEXIST = 1,
-	BPF_EXIST = 2,
-	BPF_F_LOCK = 4,
-};
-
-enum {
-	BPF_F_NO_PREALLOC = 1,
-	BPF_F_NO_COMMON_LRU = 2,
-	BPF_F_NUMA_NODE = 4,
-	BPF_F_RDONLY = 8,
-	BPF_F_WRONLY = 16,
-	BPF_F_STACK_BUILD_ID = 32,
-	BPF_F_ZERO_SEED = 64,
-	BPF_F_RDONLY_PROG = 128,
-	BPF_F_WRONLY_PROG = 256,
-	BPF_F_CLONE = 512,
-	BPF_F_MMAPABLE = 1024,
-	BPF_F_PRESERVE_ELEMS = 2048,
-	BPF_F_INNER_MAP = 4096,
-};
-
-enum bpf_stats_type {
-	BPF_STATS_RUN_TIME = 0,
-};
-
-struct bpf_prog_info {
-	__u32 type;
-	__u32 id;
-	__u8 tag[8];
-	__u32 jited_prog_len;
-	__u32 xlated_prog_len;
-	__u64 jited_prog_insns;
-	__u64 xlated_prog_insns;
-	__u64 load_time;
-	__u32 created_by_uid;
-	__u32 nr_map_ids;
-	__u64 map_ids;
-	char name[16];
-	__u32 ifindex;
-	__u32 gpl_compatible: 1;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 nr_jited_ksyms;
-	__u32 nr_jited_func_lens;
-	__u64 jited_ksyms;
-	__u64 jited_func_lens;
-	__u32 btf_id;
-	__u32 func_info_rec_size;
-	__u64 func_info;
-	__u32 nr_func_info;
-	__u32 nr_line_info;
-	__u64 line_info;
-	__u64 jited_line_info;
-	__u32 nr_jited_line_info;
-	__u32 line_info_rec_size;
-	__u32 jited_line_info_rec_size;
-	__u32 nr_prog_tags;
-	__u64 prog_tags;
-	__u64 run_time_ns;
-	__u64 run_cnt;
-};
-
-struct bpf_map_info {
-	__u32 type;
-	__u32 id;
-	__u32 key_size;
-	__u32 value_size;
-	__u32 max_entries;
-	__u32 map_flags;
-	char name[16];
-	__u32 ifindex;
-	__u32 btf_vmlinux_value_type_id;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 btf_id;
-	__u32 btf_key_type_id;
-	__u32 btf_value_type_id;
-};
-
-struct bpf_btf_info {
-	__u64 btf;
-	__u32 btf_size;
-	__u32 id;
-};
-
-struct bpf_spin_lock {
-	__u32 val;
-};
-
-struct bpf_attach_target_info {
-	struct btf_func_model fmodel;
-	long int tgt_addr;
-	const char *tgt_name;
-	const struct btf_type *tgt_type;
-};
-
-struct bpf_link_primer {
-	struct bpf_link *link;
-	struct file *file;
-	int fd;
-	u32 id;
-};
-
-enum perf_bpf_event_type {
-	PERF_BPF_EVENT_UNKNOWN = 0,
-	PERF_BPF_EVENT_PROG_LOAD = 1,
-	PERF_BPF_EVENT_PROG_UNLOAD = 2,
-	PERF_BPF_EVENT_MAX = 3,
-};
-
-enum bpf_audit {
-	BPF_AUDIT_LOAD = 0,
-	BPF_AUDIT_UNLOAD = 1,
-	BPF_AUDIT_MAX = 2,
-};
-
-struct bpf_tracing_link {
-	struct bpf_link link;
-	enum bpf_attach_type attach_type;
-	struct bpf_trampoline *trampoline;
-	struct bpf_prog *tgt_prog;
-};
-
-struct bpf_raw_tp_link {
-	struct bpf_link link;
-	struct bpf_raw_event_map *btp;
-};
-
-struct btf_member {
-	__u32 name_off;
-	__u32 type;
-	__u32 offset;
-};
-
-enum btf_func_linkage {
-	BTF_FUNC_STATIC = 0,
-	BTF_FUNC_GLOBAL = 1,
-	BTF_FUNC_EXTERN = 2,
-};
-
-struct btf_var_secinfo {
-	__u32 type;
-	__u32 offset;
-	__u32 size;
-};
-
-enum sk_action {
-	SK_DROP = 0,
-	SK_PASS = 1,
-};
-
-struct bpf_verifier_log {
-	u32 level;
-	char kbuf[1024];
-	char *ubuf;
-	u32 len_used;
-	u32 len_total;
-};
-
-struct bpf_subprog_info {
-	u32 start;
-	u32 linfo_idx;
-	u16 stack_depth;
-	bool has_tail_call;
-	bool tail_call_reachable;
-	bool has_ld_abs;
-};
-
-struct bpf_verifier_stack_elem;
-
-struct bpf_verifier_state;
-
-struct bpf_verifier_state_list;
-
-struct bpf_insn_aux_data;
-
-struct bpf_verifier_env {
-	u32 insn_idx;
-	u32 prev_insn_idx;
-	struct bpf_prog *prog;
-	const struct bpf_verifier_ops *ops;
-	struct bpf_verifier_stack_elem *head;
-	int stack_size;
-	bool strict_alignment;
-	bool test_state_freq;
-	struct bpf_verifier_state *cur_state;
-	struct bpf_verifier_state_list **explored_states;
-	struct bpf_verifier_state_list *free_list;
-	struct bpf_map *used_maps[64];
-	u32 used_map_cnt;
-	u32 id_gen;
-	bool allow_ptr_leaks;
-	bool allow_ptr_to_map_access;
-	bool bpf_capable;
-	bool bypass_spec_v1;
-	bool bypass_spec_v4;
-	bool seen_direct_write;
-	struct bpf_insn_aux_data *insn_aux_data;
-	const struct bpf_line_info *prev_linfo;
-	struct bpf_verifier_log log;
-	struct bpf_subprog_info subprog_info[257];
-	struct {
-		int *insn_state;
-		int *insn_stack;
-		int cur_stack;
-	} cfg;
-	u32 pass_cnt;
-	u32 subprog_cnt;
-	u32 prev_insn_processed;
-	u32 insn_processed;
-	u32 prev_jmps_processed;
-	u32 jmps_processed;
-	u64 verification_time;
-	u32 max_states_per_insn;
-	u32 total_states;
-	u32 peak_states;
-	u32 longest_mark_read_walk;
-};
-
-struct bpf_struct_ops {
-	const struct bpf_verifier_ops *verifier_ops;
-	int (*init)(struct btf *);
-	int (*check_member)(const struct btf_type *, const struct btf_member *);
-	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
-	int (*reg)(void *);
-	void (*unreg)(void *);
-	const struct btf_type *type;
-	const struct btf_type *value_type;
-	const char *name;
-	struct btf_func_model func_models[64];
-	u32 type_id;
-	u32 value_id;
-};
-
-typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-
-struct tnum {
-	u64 value;
-	u64 mask;
-};
-
-enum bpf_reg_liveness {
-	REG_LIVE_NONE = 0,
-	REG_LIVE_READ32 = 1,
-	REG_LIVE_READ64 = 2,
-	REG_LIVE_READ = 3,
-	REG_LIVE_WRITTEN = 4,
-	REG_LIVE_DONE = 8,
-};
-
-struct bpf_reg_state {
-	enum bpf_reg_type type;
-	union {
-		u16 range;
-		struct bpf_map *map_ptr;
-		u32 btf_id;
-		u32 mem_size;
-		long unsigned int raw;
-	};
-	s32 off;
-	u32 id;
-	u32 ref_obj_id;
-	struct tnum var_off;
-	s64 smin_value;
-	s64 smax_value;
-	u64 umin_value;
-	u64 umax_value;
-	s32 s32_min_value;
-	s32 s32_max_value;
-	u32 u32_min_value;
-	u32 u32_max_value;
-	struct bpf_reg_state *parent;
-	u32 frameno;
-	s32 subreg_def;
-	enum bpf_reg_liveness live;
-	bool precise;
-};
-
-enum bpf_stack_slot_type {
-	STACK_INVALID = 0,
-	STACK_SPILL = 1,
-	STACK_MISC = 2,
-	STACK_ZERO = 3,
-};
-
-struct bpf_stack_state {
-	struct bpf_reg_state spilled_ptr;
-	u8 slot_type[8];
-};
-
-struct bpf_reference_state {
-	int id;
-	int insn_idx;
-};
-
-struct bpf_func_state {
-	struct bpf_reg_state regs[11];
-	int callsite;
-	u32 frameno;
-	u32 subprogno;
-	int acquired_refs;
-	struct bpf_reference_state *refs;
-	int allocated_stack;
-	struct bpf_stack_state *stack;
-};
-
-struct bpf_idx_pair {
-	u32 prev_idx;
-	u32 idx;
-};
-
-struct bpf_verifier_state {
-	struct bpf_func_state *frame[8];
-	struct bpf_verifier_state *parent;
-	u32 branches;
-	u32 insn_idx;
-	u32 curframe;
-	u32 active_spin_lock;
-	bool speculative;
-	u32 first_insn_idx;
-	u32 last_insn_idx;
-	struct bpf_idx_pair *jmp_history;
-	u32 jmp_history_cnt;
-};
-
-struct bpf_verifier_state_list {
-	struct bpf_verifier_state state;
-	struct bpf_verifier_state_list *next;
-	int miss_cnt;
-	int hit_cnt;
-};
-
-struct bpf_insn_aux_data {
-	union {
-		enum bpf_reg_type ptr_type;
-		long unsigned int map_ptr_state;
-		s32 call_imm;
-		u32 alu_limit;
-		struct {
-			u32 map_index;
-			u32 map_off;
-		};
-		struct {
-			enum bpf_reg_type reg_type;
-			union {
-				u32 btf_id;
-				u32 mem_size;
-			};
-		} btf_var;
-	};
-	u64 map_key_state;
-	int ctx_field_size;
-	int sanitize_stack_off;
-	u32 seen;
-	bool zext_dst;
-	u8 alu_state;
-	unsigned int orig_idx;
-	bool prune_point;
-};
-
-struct bpf_verifier_stack_elem {
-	struct bpf_verifier_state st;
-	int insn_idx;
-	int prev_insn_idx;
-	struct bpf_verifier_stack_elem *next;
-	u32 log_pos;
-};
-
-enum {
-	BTF_SOCK_TYPE_INET = 0,
-	BTF_SOCK_TYPE_INET_CONN = 1,
-	BTF_SOCK_TYPE_INET_REQ = 2,
-	BTF_SOCK_TYPE_INET_TW = 3,
-	BTF_SOCK_TYPE_REQ = 4,
-	BTF_SOCK_TYPE_SOCK = 5,
-	BTF_SOCK_TYPE_SOCK_COMMON = 6,
-	BTF_SOCK_TYPE_TCP = 7,
-	BTF_SOCK_TYPE_TCP_REQ = 8,
-	BTF_SOCK_TYPE_TCP_TW = 9,
-	BTF_SOCK_TYPE_TCP6 = 10,
-	BTF_SOCK_TYPE_UDP = 11,
-	BTF_SOCK_TYPE_UDP6 = 12,
-	MAX_BTF_SOCK_TYPE = 13,
-};
-
-typedef void (*bpf_insn_print_t)(void *, const char *, ...);
-
-typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
-
-typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
-
-struct bpf_insn_cbs {
-	bpf_insn_print_t cb_print;
-	bpf_insn_revmap_call_t cb_call;
-	bpf_insn_print_imm_t cb_imm;
-	void *private_data;
-};
-
-struct bpf_call_arg_meta {
-	struct bpf_map *map_ptr;
-	bool raw_mode;
-	bool pkt_access;
-	int regno;
-	int access_size;
-	int mem_size;
-	u64 msize_max_value;
-	int ref_obj_id;
-	int func_id;
-	u32 btf_id;
-	u32 ret_btf_id;
-};
-
-enum reg_arg_type {
-	SRC_OP = 0,
-	DST_OP = 1,
-	DST_OP_NO_MARK = 2,
-};
-
-struct bpf_reg_types {
-	const enum bpf_reg_type types[10];
-	u32 *btf_id;
-};
-
-enum {
-	DISCOVERED = 16,
-	EXPLORED = 32,
-	FALLTHROUGH = 1,
-	BRANCH = 2,
-};
-
-struct idpair {
-	u32 old;
-	u32 cur;
-};
-
-struct tree_descr {
-	const char *name;
-	const struct file_operations *ops;
-	int mode;
-};
-
 struct bpf_preload_info {
 	char link_name[16];
-	int link_id;
+	struct bpf_link *link;
 };
 
 struct bpf_preload_ops {
-	struct umd_info info;
 	int (*preload)(struct bpf_preload_info *);
-	int (*finish)();
 	struct module *owner;
 };
 
@@ -30708,11 +89549,42 @@
 	umode_t mode;
 };
 
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;};
+
+struct bpf_dynptr {
+	long: 64;
+	long: 64;};
+
+struct bpf_list_head {
+	long: 64;
+	long: 64;};
+
+struct bpf_list_node {
+	long: 64;
+	long: 64;};
+
 struct bpf_pidns_info {
 	__u32 pid;
 	__u32 tgid;
 };
 
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
 typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
 
 typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
@@ -30725,6 +89597,8 @@
 
 typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
 
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
 typedef u64 (*btf_bpf_get_smp_processor_id)();
 
 typedef u64 (*btf_bpf_get_numa_node_id)();
@@ -30733,6 +89607,10 @@
 
 typedef u64 (*btf_bpf_ktime_get_boot_ns)();
 
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_tai_ns)();
+
 typedef u64 (*btf_bpf_get_current_pid_tgid)();
 
 typedef u64 (*btf_bpf_get_current_uid_gid)();
@@ -30749,172 +89627,80 @@
 
 typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
 
-typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
-
 typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
 
 typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
 
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
 typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
 
 typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
 
 typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
 
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
 typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
 
 typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
 
-union bpf_iter_link_info {
-	struct {
-		__u32 map_fd;
-	} map;
+struct bpf_bprintf_buffers {
+	char tmp_bufs[1536];
 };
 
-typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
 
-typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
-
-typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
-
-typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
-
-struct bpf_iter_reg {
-	const char *target;
-	bpf_iter_attach_target_t attach_target;
-	bpf_iter_detach_target_t detach_target;
-	bpf_iter_show_fdinfo_t show_fdinfo;
-	bpf_iter_fill_link_info_t fill_link_info;
-	u32 ctx_arg_info_size;
-	struct bpf_ctx_arg_aux ctx_arg_info[2];
-	const struct bpf_iter_seq_info *seq_info;
-};
-
-struct bpf_iter_meta {
-	union {
-		struct seq_file *seq;
-	};
-	u64 session_id;
-	u64 seq_num;
-};
-
-struct bpf_iter_target_info {
-	struct list_head list;
-	const struct bpf_iter_reg *reg_info;
-	u32 btf_id;
-};
-
-struct bpf_iter_link {
-	struct bpf_link link;
-	struct bpf_iter_aux_info aux;
-	struct bpf_iter_target_info *tinfo;
-};
-
-struct bpf_iter_priv_data {
-	struct bpf_iter_target_info *tinfo;
-	const struct bpf_iter_seq_info *seq_info;
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
 	struct bpf_prog *prog;
-	u64 session_id;
-	u64 seq_num;
-	bool done_stop;
-	long: 56;
-	u8 target_private[0];
+	void *callback_fn;
+	void *value;
 };
 
-struct bpf_iter_seq_map_info {
-	u32 map_id;
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
 };
 
-struct bpf_iter__bpf_map {
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, const struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(const struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(const struct bpf_dynptr_kern *, u32, u32);
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
 	union {
 		struct bpf_iter_meta *meta;
 	};
 	union {
-		struct bpf_map *map;
+		struct bpf_link *link;
 	};
 };
 
-struct bpf_iter_seq_task_common {
-	struct pid_namespace *ns;
-};
-
-struct bpf_iter_seq_task_info {
-	struct bpf_iter_seq_task_common common;
-	u32 tid;
-};
-
-struct bpf_iter__task {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-};
-
-struct bpf_iter_seq_task_file_info {
-	struct bpf_iter_seq_task_common common;
-	struct task_struct *task;
-	struct files_struct *files;
-	u32 tid;
-	u32 fd;
-};
-
-struct bpf_iter__task_file {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-	u32 fd;
-	union {
-		struct file *file;
-	};
-};
-
-struct bpf_iter_seq_prog_info {
-	u32 prog_id;
-};
-
-struct bpf_iter__bpf_prog {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_prog *prog;
-	};
-};
-
-struct bpf_iter__bpf_map_elem {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		void *value;
-	};
-};
-
-struct pcpu_freelist_node;
-
-struct pcpu_freelist_head {
-	struct pcpu_freelist_node *first;
-	raw_spinlock_t lock;
-};
-
-struct pcpu_freelist_node {
-	struct pcpu_freelist_node *next;
-};
-
-struct pcpu_freelist {
-	struct pcpu_freelist_head *freelist;
-	struct pcpu_freelist_head extralist;
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
 };
 
 struct bpf_lru_node {
@@ -30976,35 +89762,12670 @@
 	long: 64;
 };
 
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+struct btf_struct_metas {
+	u32 cnt;
+	struct btf_struct_meta types[0];
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_COMMON = 0,
+	BTF_KFUNC_HOOK_XDP = 1,
+	BTF_KFUNC_HOOK_TC = 2,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 3,
+	BTF_KFUNC_HOOK_TRACING = 4,
+	BTF_KFUNC_HOOK_SYSCALL = 5,
+	BTF_KFUNC_HOOK_FMODRET = 6,
+	BTF_KFUNC_HOOK_MAX = 7,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 256,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[7];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, va_list);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+struct btf_field_info {
+	enum btf_field_type type;
+	u32 off;
+	union {
+		struct {
+			u32 type_id;
+		} kptr;
+		struct {
+			const char *node_name;
+			u32 value_btf_id;
+		} list_head;
+	};
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+};
+
+enum {
+	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
+	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
+	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
+	__ctx_convertBPF_PROG_TYPE_XDP = 3,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
+	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
+	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
+	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
+	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
+	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
+	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
+	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
+	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
+	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
+	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
+	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
+	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
+	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
+	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
+	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
+	__ctx_convertBPF_PROG_TYPE_EXT = 27,
+	__ctx_convertBPF_PROG_TYPE_SYSCALL = 28,
+	__ctx_convert_unused = 29,
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+struct reuseport_array {
+	struct bpf_map map;
+	struct sock *ptrs[0];
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = -1,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE = 262144,
+	PERF_SAMPLE_BRANCH_MAX = 524288,
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+enum perf_event_read_format {
+	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
+	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
+	PERF_FORMAT_ID = 4,
+	PERF_FORMAT_GROUP = 8,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
+};
+
+enum perf_event_ioc_flags {
+	PERF_IOC_FLAG_GROUP = 1,
+};
+
+struct perf_event_mmap_page {
+	__u32 version;
+	__u32 compat_version;
+	__u32 lock;
+	__u32 index;
+	__s64 offset;
+	__u64 time_enabled;
+	__u64 time_running;
+	union {
+		__u64 capabilities;
+		struct {
+			__u64 cap_bit0: 1;
+			__u64 cap_bit0_is_deprecated: 1;
+			__u64 cap_user_rdpmc: 1;
+			__u64 cap_user_time: 1;
+			__u64 cap_user_time_zero: 1;
+			__u64 cap_user_time_short: 1;
+			__u64 cap_____res: 58;
+		};
+	};
+	__u16 pmc_width;
+	__u16 time_shift;
+	__u32 time_mult;
+	__u64 time_offset;
+	__u64 time_zero;
+	__u32 size;
+	__u32 __reserved_1;
+	__u64 time_cycles;
+	__u64 time_mask;
+	__u8 __reserved[928];
+	__u64 data_head;
+	__u64 data_tail;
+	__u64 data_offset;
+	__u64 data_size;
+	__u64 aux_head;
+	__u64 aux_tail;
+	__u64 aux_offset;
+	__u64 aux_size;
+};
+
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
+};
+
+struct perf_ns_link_info {
+	__u64 dev;
+	__u64 ino;
+};
+
+enum {
+	NET_NS_INDEX = 0,
+	UTS_NS_INDEX = 1,
+	IPC_NS_INDEX = 2,
+	PID_NS_INDEX = 3,
+	USER_NS_INDEX = 4,
+	MNT_NS_INDEX = 5,
+	CGROUP_NS_INDEX = 6,
+	NR_NAMESPACES = 7,
+};
+
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	long unsigned int offset;
+	long unsigned int size;
+	enum perf_addr_filter_action_t action;
+};
+
+struct swevent_hlist {
+	struct hlist_head heads[256];
+	struct callback_head callback_head;
+};
+
+struct pmu_event_list {
+	raw_spinlock_t lock;
+	struct list_head list;
+};
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	struct work_struct work;
+	int page_order;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long int watermark;
+	long int aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	long unsigned int mmap_locked;
+	struct user_struct *mmap_user;
+	long int aux_head;
+	unsigned int aux_nest;
+	long int aux_wakeup;
+	long unsigned int aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	long unsigned int aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct perf_cpu_context {
+	struct perf_event_context ctx;
+	struct perf_event_context *task_ctx;
+	int online;
+	struct perf_cgroup *cgrp;
+	int heap_size;
+	struct perf_event **heap;
+	struct perf_event *heap_default[2];
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+};
+
+struct min_heap {
+	void *data;
+	int nr;
+	int size;
+};
+
+struct min_heap_callbacks {
+	int elem_size;
+	bool (*less)(const void *, const void *);
+	void (*swp)(void *, void *);
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+	struct task_struct *p;
+	remote_function_f func;
+	void *info;
+	int ret;
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct event_function_struct {
+	struct perf_event *event;
+	event_f func;
+	void *data;
+};
+
+enum event_type_t {
+	EVENT_FLEXIBLE = 1,
+	EVENT_PINNED = 2,
+	EVENT_TIME = 4,
+	EVENT_CPU = 8,
+	EVENT_ALL = 3,
+};
+
+struct __group_key {
+	int cpu;
+	struct pmu *pmu;
+	struct cgroup *cgroup;
+};
+
+struct stop_event_data {
+	struct perf_event *event;
+	unsigned int restart;
+};
+
+struct perf_read_data {
+	struct perf_event *event;
+	bool group;
+	int ret;
+};
+
+struct perf_read_event {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct remote_output {
+	struct perf_buffer *rb;
+	int err;
+};
+
+struct perf_task_event {
+	struct task_struct *task;
+	struct perf_event_context *task_ctx;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 ppid;
+		u32 tid;
+		u32 ptid;
+		u64 time;
+	} event_id;
+};
+
+struct perf_comm_event {
+	struct task_struct *task;
+	char *comm;
+	int comm_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+	} event_id;
+};
+
+struct perf_namespaces_event {
+	struct task_struct *task;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 nr_namespaces;
+		struct perf_ns_link_info link_info[7];
+	} event_id;
+};
+
+struct perf_cgroup_event {
+	char *path;
+	int path_size;
+	struct {
+		struct perf_event_header header;
+		u64 id;
+		char path[0];
+	} event_id;
+};
+
+struct perf_mmap_event {
+	struct vm_area_struct *vma;
+	const char *file_name;
+	int file_size;
+	int maj;
+	int min;
+	u64 ino;
+	u64 ino_generation;
+	u32 prot;
+	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 start;
+		u64 len;
+		u64 pgoff;
+	} event_id;
+};
+
+struct perf_switch_event {
+	struct task_struct *task;
+	struct task_struct *next_prev;
+	struct {
+		struct perf_event_header header;
+		u32 next_prev_pid;
+		u32 next_prev_tid;
+	} event_id;
+};
+
+struct perf_ksymbol_event {
+	const char *name;
+	int name_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+		u32 len;
+		u16 ksym_type;
+		u16 flags;
+	} event_id;
+};
+
+struct perf_bpf_event {
+	struct bpf_prog *prog;
+	struct {
+		struct perf_event_header header;
+		u16 type;
+		u16 flags;
+		u32 id;
+		u8 tag[8];
+	} event_id;
+};
+
+struct perf_text_poke_event {
+	const void *old_bytes;
+	const void *new_bytes;
+	size_t pad;
+	u16 old_len;
+	u16 new_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+	} event_id;
+};
+
+struct swevent_htable {
+	struct swevent_hlist *swevent_hlist;
+	struct mutex hlist_mutex;
+	int hlist_refcount;
+	int recursion[4];
+};
+
+enum perf_probe_config {
+	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
+	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
+	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
+};
+
+enum {
+	IF_ACT_NONE = -1,
+	IF_ACT_FILTER = 0,
+	IF_ACT_START = 1,
+	IF_ACT_STOP = 2,
+	IF_SRC_FILE = 3,
+	IF_SRC_KERNEL = 4,
+	IF_SRC_FILEADDR = 5,
+	IF_SRC_KERNELADDR = 6,
+};
+
+enum {
+	IF_STATE_ACTION = 0,
+	IF_STATE_SOURCE = 1,
+	IF_STATE_END = 2,
+};
+
+struct perf_aux_event {
+	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+struct perf_aux_event___3 {
+	struct perf_event_header header;
+	u64 offset;
+	u64 size;
+	u64 flags;
+};
+
+enum lruvec_flags {
+	LRUVEC_CONGESTED = 0,
+};
+
+enum pgdat_flags {
+	PGDAT_DIRTY = 0,
+	PGDAT_WRITEBACK = 1,
+	PGDAT_RECLAIM_LOCKED = 2,
+};
+
+struct reclaim_stat {
+	unsigned int nr_dirty;
+	unsigned int nr_unqueued_dirty;
+	unsigned int nr_congested;
+	unsigned int nr_writeback;
+	unsigned int nr_immediate;
+	unsigned int nr_pageout;
+	unsigned int nr_activate[2];
+	unsigned int nr_ref_keep;
+	unsigned int nr_unmap_fail;
+	unsigned int nr_lazyfree_fail;
+};
+
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_wake {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_wakeup_kswapd {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
+	struct trace_entry ent;
+	long unsigned int nr_reclaimed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_start {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	void *shrink;
+	int nid;
+	long int nr_objects_to_shrink;
+	long unsigned int gfp_flags;
+	long unsigned int cache_items;
+	long long unsigned int delta;
+	long unsigned int total_scan;
+	int priority;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_end {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	int nid;
+	void *shrink;
+	long int unused_scan;
+	long int new_scan;
+	int retval;
+	long int total_scan;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_isolate {
+	struct trace_entry ent;
+	int highest_zoneidx;
+	int order;
+	long unsigned int nr_requested;
+	long unsigned int nr_scanned;
+	long unsigned int nr_skipped;
+	long unsigned int nr_taken;
+	unsigned int isolate_mode;
+	int lru;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_write_folio {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int nr_congested;
+	long unsigned int nr_immediate;
+	unsigned int nr_activate0;
+	unsigned int nr_activate1;
+	long unsigned int nr_ref_keep;
+	long unsigned int nr_unmap_fail;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_active {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_taken;
+	long unsigned int nr_active;
+	long unsigned int nr_deactivated;
+	long unsigned int nr_referenced;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_node_reclaim_begin {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
+
+struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
+
+struct trace_event_data_offsets_mm_shrink_slab_start {};
+
+struct trace_event_data_offsets_mm_shrink_slab_end {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
+
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
+
+struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
+
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
+typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
+
+typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
+
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
+struct scan_control {
+	long unsigned int nr_to_reclaim;
+	nodemask_t *nodemask;
+	struct mem_cgroup *target_mem_cgroup;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	unsigned int may_deactivate: 2;
+	unsigned int force_deactivate: 1;
+	unsigned int skipped_deactivate: 1;
+	unsigned int may_writepage: 1;
+	unsigned int may_unmap: 1;
+	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
+	unsigned int memcg_low_reclaim: 1;
+	unsigned int memcg_low_skipped: 1;
+	unsigned int hibernation_mode: 1;
+	unsigned int compaction_ready: 1;
+	unsigned int cache_trim_mode: 1;
+	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
+	s8 order;
+	s8 priority;
+	s8 reclaim_idx;
+	gfp_t gfp_mask;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	struct {
+		unsigned int dirty;
+		unsigned int unqueued_dirty;
+		unsigned int congested;
+		unsigned int writeback;
+		unsigned int immediate;
+		unsigned int file_taken;
+		unsigned int taken;
+	} nr;
+	struct reclaim_state reclaim_state;
+};
+
+typedef enum {
+	PAGE_KEEP = 0,
+	PAGE_ACTIVATE = 1,
+	PAGE_SUCCESS = 2,
+	PAGE_CLEAN = 3,
+} pageout_t;
+
+enum folio_references {
+	FOLIOREF_RECLAIM = 0,
+	FOLIOREF_RECLAIM_CLEAN = 1,
+	FOLIOREF_KEEP = 2,
+	FOLIOREF_ACTIVATE = 3,
+};
+
+enum scan_balance {
+	SCAN_EQUAL = 0,
+	SCAN_FRACT = 1,
+	SCAN_ANON = 2,
+	SCAN_FILE = 3,
+};
+
+struct pcpu_group_info {
+	int nr_units;
+	long unsigned int base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void *ptr;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, long unsigned int, bool, bool, size_t, size_t, void *, int, void *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	void *base_addr;
+	long unsigned int *alloc_map;
+	long unsigned int *bound_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	long unsigned int populated[0];
+};
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char *buf;
+	local_t buf_idx;
+};
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	long unsigned int rb_subtree_last;
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int total_vm;
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_mas_szero {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	long unsigned int start;
+	long unsigned int end;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_store {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	struct vm_area_struct *vma;
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	char __data[0];
+};
+
+struct trace_event_raw_exit_mmap {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	struct maple_tree *mt;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+struct trace_event_data_offsets_vma_mas_szero {};
+
+struct trace_event_data_offsets_vma_store {};
+
+struct trace_event_data_offsets_exit_mmap {};
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
+
+typedef void (*btf_trace_vma_mas_szero)(void *, struct maple_tree *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_vma_store)(void *, struct maple_tree *, struct vm_area_struct *);
+
+typedef void (*btf_trace_exit_mmap)(void *, struct mm_struct *);
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+struct resv_map {
+	struct kref refs;
+	spinlock_t lock;
+	struct list_head regions;
+	long int adds_in_progress;
+	struct list_head region_cache;
+	long int region_cache_count;
+	struct page_counter *reservation_counter;
+	long unsigned int pages_per_hpage;
+	struct cgroup_subsys_state *css;
+};
+
+struct file_region {
+	struct list_head link;
+	long int from;
+	long int to;
+	struct page_counter *reservation_counter;
+	struct cgroup_subsys_state *css;
+};
+
+struct hugetlb_vma_lock {
+	struct kref refs;
+	struct rw_semaphore rw_sema;
+	struct vm_area_struct *vma;
+};
+
+enum hugetlb_page_flags {
+	HPG_restore_reserve = 0,
+	HPG_migratable = 1,
+	HPG_temporary = 2,
+	HPG_freed = 3,
+	HPG_vmemmap_optimized = 4,
+	HPG_raw_hwp_unreliable = 5,
+	__NR_HPAGEFLAGS = 6,
+};
+
+struct huge_bootmem_page {
+	struct list_head list;
+	struct hstate *hstate;
+};
+
+struct hugetlb_cgroup_per_node {
+	long unsigned int usage[1];
+};
+
+struct hugetlb_cgroup {
+	struct cgroup_subsys_state css;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct page_counter hugepage[1];
+	struct page_counter rsvd_hugepage[1];
+	atomic_long_t events[1];
+	atomic_long_t events_local[1];
+	struct cgroup_file events_file[1];
+	struct cgroup_file events_local_file[1];
+	struct hugetlb_cgroup_per_node *nodeinfo[0];
+};
+
+enum vma_resv_mode {
+	VMA_NEEDS_RESV = 0,
+	VMA_COMMIT_RESV = 1,
+	VMA_END_RESV = 2,
+	VMA_ADD_RESV = 3,
+	VMA_DEL_RESV = 4,
+};
+
+struct node_hstate {
+	struct kobject *hugepages_kobj;
+	struct kobject *hstate_kobjs[1];
+};
+
+struct memory_tier {
+	struct list_head list;
+	struct list_head memory_types;
+	int adistance_start;
+	struct device dev;
+	nodemask_t lower_tier_mask;
+};
+
+struct memory_dev_type {
+	struct list_head tier_sibiling;
+	int adistance;
+	nodemask_t nodes;
+	struct kref kref;
+};
+
+struct demotion_nodes {
+	nodemask_t preferred;
+};
+
+struct node_memory_type_map {
+	struct memory_dev_type *memtype;
+	int map_count;
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+struct memcg_vmstats {
+	long int state[50];
+	long unsigned int events[19];
+	long int state_pending[50];
+	long unsigned int events_pending[19];
+};
+
+struct memcg_vmstats_percpu {
+	long int state[50];
+	long unsigned int events[19];
+	long int state_prev[50];
+	long unsigned int events_prev[19];
+	long unsigned int nr_page_events;
+	long unsigned int targets[2];
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[64];
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	long unsigned int flags;
+	long unsigned int precharge;
+	long unsigned int moved_charge;
+	long unsigned int moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	long unsigned int flags;
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+union mc_target {
+	struct page *page;
+	swp_entry_t ent;
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	long unsigned int nr_memory;
+	long unsigned int pgpgout;
+	long unsigned int nr_kmem;
+	int nid;
+};
+
+struct numa_stat {
+	const char *name;
+	unsigned int lru_mask;
+};
+
+struct balloon_dev_info {
+	long unsigned int isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+struct hugetlbfs_inode_info {
+	struct shared_policy policy;
+	struct inode vfs_inode;
+	unsigned int seals;
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	long unsigned int flags;
+	long unsigned int alloced;
+	long unsigned int swapped;
+	long unsigned int fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct inode vfs_inode;
+};
+
+struct files_stat_struct {
+	long unsigned int nr_files;
+	long unsigned int nr_free_files;
+	long unsigned int max_files;
+};
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct kobj_map;
+
+struct char_device_struct {
+	struct char_device_struct *next;
+	unsigned int major;
+	unsigned int baseminor;
+	int minorct;
+	char name[64];
+	struct cdev *cdev;
+};
+
+struct saved {
+	struct path link;
+	struct delayed_call done;
+	const char *name;
+	unsigned int seq;
+};
+
+struct nameidata {
+	struct path path;
+	struct qstr last;
+	struct path root;
+	struct inode *inode;
+	unsigned int flags;
+	unsigned int state;
+	unsigned int seq;
+	unsigned int next_seq;
+	unsigned int m_seq;
+	unsigned int r_seq;
+	int last_type;
+	unsigned int depth;
+	int total_link_count;
+	struct saved *stack;
+	struct saved internal[2];
+	struct filename *name;
+	struct nameidata *saved;
+	unsigned int root_seq;
+	int dfd;
+	vfsuid_t dir_vfsuid;
+	umode_t dir_mode;
+};
+
+struct renamedata {
+	struct user_namespace *old_mnt_userns;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct user_namespace *new_mnt_userns;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
+enum {
+	LAST_NORM = 0,
+	LAST_ROOT = 1,
+	LAST_DOT = 2,
+	LAST_DOTDOT = 3,
+};
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+enum {
+	WALK_TRAILING = 1,
+	WALK_MORE = 2,
+	WALK_NOFOLLOW = 4,
+};
+
+struct simple_transaction_argresp {
+	ssize_t size;
+	char data[0];
+};
+
+struct simple_attr {
+	int (*get)(void *, u64 *);
+	int (*set)(void *, u64);
+	char get_buf[24];
+	char set_buf[24];
+	void *data;
+	const char *fmt;
+	struct mutex mutex;
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	dio_submit_t *submit_io;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	long unsigned int refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+	long: 64;
+};
+
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
+struct dnotify_struct {
+	struct dnotify_struct *dn_next;
+	__u32 dn_mask;
+	int dn_fd;
+	struct file *dn_filp;
+	fl_owner_t dn_owner;
+};
+
+struct dnotify_mark {
+	struct fsnotify_mark fsn_mark;
+	struct dnotify_struct *dn;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	short unsigned int expired;
+	short unsigned int settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+typedef enum {
+	FS_DECRYPT = 0,
+	FS_ENCRYPT = 1,
+} fscrypt_direction_t;
+
+struct fscrypt_key {
+	__u32 mode;
+	__u8 raw[64];
+	__u32 size;
+};
+
+struct fscrypt_direct_key {
+	struct super_block *dk_sb;
+	struct hlist_node dk_node;
+	refcount_t dk_refcount;
+	const struct fscrypt_mode *dk_mode;
+	struct fscrypt_prepared_key dk_key;
+	u8 dk_descriptor[8];
+	u8 dk_raw[64];
+};
+
+struct fsverity_enable_arg {
+	__u32 version;
+	__u32 hash_algorithm;
+	__u32 block_size;
+	__u32 salt_size;
+	__u64 salt_ptr;
+	__u32 sig_size;
+	__u32 __reserved1;
+	__u64 sig_ptr;
+	__u64 __reserved2[11];
+};
+
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+struct memelfnote {
+	const char *name;
+	int type;
+	unsigned int datasz;
+	void *data;
+};
+
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	long unsigned int caller;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_writepage_map)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, long unsigned int);
+
+enum {
+	QUOTA_NL_C_UNSPEC = 0,
+	QUOTA_NL_C_WARNING = 1,
+	__QUOTA_NL_C_MAX = 2,
+};
+
+enum {
+	QUOTA_NL_A_UNSPEC = 0,
+	QUOTA_NL_A_QTYPE = 1,
+	QUOTA_NL_A_EXCESS_ID = 2,
+	QUOTA_NL_A_WARNING = 3,
+	QUOTA_NL_A_DEV_MAJOR = 4,
+	QUOTA_NL_A_DEV_MINOR = 5,
+	QUOTA_NL_A_CAUSED_ID = 6,
+	QUOTA_NL_A_PAD = 7,
+	__QUOTA_NL_A_MAX = 8,
+};
+
+enum resctrl_conf_type {
+	CDP_NONE = 0,
+	CDP_CODE = 1,
+	CDP_DATA = 2,
+};
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	long unsigned int start;
+	long unsigned int end;
+	fmode_t mode;
+};
+
+struct timers_private {
+	struct pid *pid;
+	struct task_struct *task;
+	struct sighand_struct *sighand;
+	struct pid_namespace *ns;
+	long unsigned int flags;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
+	struct task_struct *task;
+};
+
+enum hugetlbfs_size_type {
+	NO_SIZE = 0,
+	SIZE_STD = 1,
+	SIZE_PERCENT = 2,
+};
+
+struct hugetlbfs_fs_context {
+	struct hstate *hstate;
+	long long unsigned int max_size_opt;
+	long long unsigned int min_size_opt;
+	long int max_hpages;
+	long int nr_inodes;
+	long int min_hpages;
+	enum hugetlbfs_size_type max_val_type;
+	enum hugetlbfs_size_type min_val_type;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum hugetlb_param {
+	Opt_gid = 0,
+	Opt_min_size = 1,
+	Opt_mode___2 = 2,
+	Opt_nr_inodes = 3,
+	Opt_pagesize = 4,
+	Opt_size = 5,
+	Opt_uid = 6,
+};
+
+struct utf8cursor {
+	const struct unicode_map *um;
+	enum utf8_normalization n;
+	const char *s;
+	const char *p;
+	const char *ss;
+	const char *sp;
+	unsigned int len;
+	unsigned int slen;
+	short int ccc;
+	short int nccc;
+	unsigned char hangul[12];
+};
+
+enum {
+	AUTOFS_IOC_READY_CMD = 96,
+	AUTOFS_IOC_FAIL_CMD = 97,
+	AUTOFS_IOC_CATATONIC_CMD = 98,
+	AUTOFS_IOC_PROTOVER_CMD = 99,
+	AUTOFS_IOC_SETTIMEOUT_CMD = 100,
+	AUTOFS_IOC_EXPIRE_CMD = 101,
+};
+
+enum {
+	AUTOFS_IOC_EXPIRE_MULTI_CMD = 102,
+	AUTOFS_IOC_PROTOSUBVER_CMD = 103,
+	AUTOFS_IOC_ASKUMOUNT_CMD = 112,
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+enum {
+	Opt_uid___2 = 0,
+	Opt_gid___2 = 1,
+	Opt_mode___3 = 2,
+	Opt_err = 3,
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct msg_msgseg {
+	struct msg_msgseg *next;
+};
+
+typedef int __kernel_ipc_pid_t;
+
+struct shmid_ds {
+	struct ipc_perm shm_perm;
+	int shm_segsz;
+	__kernel_old_time_t shm_atime;
+	__kernel_old_time_t shm_dtime;
+	__kernel_old_time_t shm_ctime;
+	__kernel_ipc_pid_t shm_cpid;
+	__kernel_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	void *shm_unused2;
+	void *shm_unused3;
+};
+
+struct shmid64_ds {
+	struct ipc64_perm shm_perm;
+	__kernel_size_t shm_segsz;
+	long int shm_atime;
+	long int shm_dtime;
+	long int shm_ctime;
+	__kernel_pid_t shm_cpid;
+	__kernel_pid_t shm_lpid;
+	long unsigned int shm_nattch;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct shminfo64 {
+	long unsigned int shmmax;
+	long unsigned int shmmin;
+	long unsigned int shmmni;
+	long unsigned int shmseg;
+	long unsigned int shmall;
+	long unsigned int __unused1;
+	long unsigned int __unused2;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct shminfo {
+	int shmmax;
+	int shmmin;
+	int shmmni;
+	int shmseg;
+	int shmall;
+};
+
+struct shm_info {
+	int used_ids;
+	__kernel_ulong_t shm_tot;
+	__kernel_ulong_t shm_rss;
+	__kernel_ulong_t shm_swp;
+	__kernel_ulong_t swap_attempts;
+	__kernel_ulong_t swap_successes;
+};
+
+struct shmid_kernel {
+	struct kern_ipc_perm shm_perm;
+	struct file *shm_file;
+	long unsigned int shm_nattch;
+	long unsigned int shm_segsz;
+	time64_t shm_atim;
+	time64_t shm_dtim;
+	time64_t shm_ctim;
+	struct pid *shm_cprid;
+	struct pid *shm_lprid;
+	struct ucounts *mlock_ucounts;
+	struct task_struct *shm_creator;
+	struct list_head shm_clist;
+	struct ipc_namespace *ns;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct shm_file_data {
+	int id;
+	struct ipc_namespace *ns;
+	struct file *file;
+	const struct vm_operations_struct *vm_ops;
+};
+
+enum key_lookup_flag {
+	KEY_LOOKUP_CREATE = 1,
+	KEY_LOOKUP_PARTIAL = 2,
+	KEY_LOOKUP_ALL = 3,
+};
+
+struct keyctl_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+	__u32 __spare[10];
+};
+
+struct keyctl_pkey_params {
+	__s32 key_id;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	__u32 __spare[7];
+};
+
+enum {
+	Opt_err___2 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
+};
+
+struct xattr;
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+enum {
+	SELNL_MSG_SETENFORCE = 16,
+	SELNL_MSG_POLICYLOAD = 17,
+	SELNL_MSG_MAX = 18,
+};
+
+enum selinux_nlgroups {
+	SELNLGRP_NONE = 0,
+	SELNLGRP_AVC = 1,
+	__SELNLGRP_MAX = 2,
+};
+
+struct selnl_msg_setenforce {
+	__s32 val;
+};
+
+struct selnl_msg_policyload {
+	__u32 seqno;
+};
+
+struct netif_security_struct {
+	struct net *ns;
+	int ifindex;
+	u32 sid;
+};
+
+struct sel_netif {
+	struct list_head list;
+	struct netif_security_struct nsec;
+	struct callback_head callback_head;
+};
+
+struct selinux_policy_convert_data {
+	struct convert_context_args args;
+	struct sidtab_convert_params sidtab_params;
+};
+
+struct selinux_audit_rule {
+	u32 au_seqno;
+	struct context au_ctxt;
+};
+
+struct aa_task_ctx {
+	struct aa_label *nnp;
+	struct aa_label *onexec;
+	struct aa_label *previous;
+	u64 token;
+};
+
+struct aa_sk_ctx {
+	struct aa_label *label;
+	struct aa_label *peer;
+};
+
+union aa_buffer {
+	struct list_head list;
+	char buffer[1];
+};
+
+enum devcg_behavior {
+	DEVCG_DEFAULT_NONE = 0,
+	DEVCG_DEFAULT_ALLOW = 1,
+	DEVCG_DEFAULT_DENY = 2,
+};
+
+struct dev_exception_item {
+	u32 major;
+	u32 minor;
+	short int type;
+	short int access;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head exceptions;
+	enum devcg_behavior behavior;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct crypto_hash_walk {
+	char *data;
+	unsigned int offset;
+	unsigned int alignmask;
+	struct page *pg;
+	unsigned int entrylen;
+	unsigned int total;
+	struct scatterlist *sg;
+	unsigned int flags;
+};
+
+struct shash_instance {
+	void (*free)(struct shash_instance *);
+	union {
+		struct {
+			char head[96];
+			struct crypto_instance base;
+		} s;
+		struct shash_alg alg;
+	};
+};
+
+struct crypto_shash_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_report_hash {
+	char type[64];
+	unsigned int blocksize;
+	unsigned int digestsize;
+};
+
+struct dh_ctx {
+	MPI p;
+	MPI g;
+	MPI xa;
+};
+
+struct ecc_point {
+	u64 *x;
+	u64 *y;
+	u8 ndigits;
+};
+
+struct ecc_curve {
+	char *name;
+	struct ecc_point g;
+	u64 *p;
+	u64 *n;
+	u64 *a;
+	u64 *b;
+};
+
+struct ecc_ctx {
+	unsigned int curve_id;
+	const struct ecc_curve *curve;
+	bool pub_key_set;
+	u64 x[8];
+	u64 y[8];
+	struct ecc_point pub_key;
+};
+
+struct ecdsa_signature_ctx {
+	const struct ecc_curve *curve;
+	u64 r[8];
+	u64 s[8];
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct crypto_test_param {
+	char driver[128];
+	char alg[128];
+	u32 type;
+};
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+struct blake2b_state {
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[128];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 7640891576956012808ULL,
+	BLAKE2B_IV1 = 13503953896175478587ULL,
+	BLAKE2B_IV2 = 4354685564936845355ULL,
+	BLAKE2B_IV3 = 11912009170470909681ULL,
+	BLAKE2B_IV4 = 5840696475078001361ULL,
+	BLAKE2B_IV5 = 11170449401992604703ULL,
+	BLAKE2B_IV6 = 2270897969802886507ULL,
+	BLAKE2B_IV7 = 6620516959819538809ULL,
+};
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *, const u8 *, size_t, u32);
+
+struct blake2b_tfm_ctx {
+	u8 key[64];
+	unsigned int keylen;
+};
+
+struct crypto_report_rng {
+	char type[64];
+	unsigned int seedsize;
+};
+
+typedef struct {
+	u64 m_low;
+	u64 m_high;
+} uint128_t;
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct trace_event_raw_block_buffer {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	char rwbs[8];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+enum {
+	MILLION = 1000000,
+	MIN_PERIOD = 1000,
+	MAX_PERIOD = 1000000,
+	MARGIN_MIN_PCT = 10,
+	MARGIN_LOW_PCT = 20,
+	MARGIN_TARGET_PCT = 50,
+	INUSE_ADJ_STEP_PCT = 25,
+	TIMER_SLACK_PCT = 1,
+	WEIGHT_ONE = 65536,
+};
+
+enum {
+	VTIME_PER_SEC_SHIFT = 37ULL,
+	VTIME_PER_SEC = 137438953472ULL,
+	VTIME_PER_USEC = 137438ULL,
+	VTIME_PER_NSEC = 137ULL,
+	VRATE_MIN_PPM = 10000ULL,
+	VRATE_MAX_PPM = 100000000ULL,
+	VRATE_MIN = 1374ULL,
+	VRATE_CLAMP_ADJ_PCT = 4ULL,
+	RQ_WAIT_BUSY_PCT = 5ULL,
+	UNBUSY_THR_PCT = 75ULL,
+	MIN_DELAY_THR_PCT = 500ULL,
+	MAX_DELAY_THR_PCT = 25000ULL,
+	MIN_DELAY = 250ULL,
+	MAX_DELAY = 250000ULL,
+	DFGV_USAGE_PCT = 50ULL,
+	DFGV_PERIOD = 100000ULL,
+	MAX_LAGGING_PERIODS = 10ULL,
+	AUTOP_CYCLE_NSEC = 10000000000ULL,
+	IOC_PAGE_SHIFT = 12ULL,
+	IOC_PAGE_SIZE = 4096ULL,
+	IOC_SECT_TO_PAGE_SHIFT = 3ULL,
+	LCOEF_RANDIO_PAGES = 4096ULL,
+};
+
+enum ioc_running {
+	IOC_IDLE = 0,
+	IOC_RUNNING = 1,
+	IOC_STOP = 2,
+};
+
+enum {
+	QOS_ENABLE = 0,
+	QOS_CTRL = 1,
+	NR_QOS_CTRL_PARAMS = 2,
+};
+
+enum {
+	QOS_RPPM = 0,
+	QOS_RLAT = 1,
+	QOS_WPPM = 2,
+	QOS_WLAT = 3,
+	QOS_MIN = 4,
+	QOS_MAX = 5,
+	NR_QOS_PARAMS = 6,
+};
+
+enum {
+	COST_CTRL = 0,
+	COST_MODEL = 1,
+	NR_COST_CTRL_PARAMS = 2,
+};
+
+enum {
+	I_LCOEF_RBPS = 0,
+	I_LCOEF_RSEQIOPS = 1,
+	I_LCOEF_RRANDIOPS = 2,
+	I_LCOEF_WBPS = 3,
+	I_LCOEF_WSEQIOPS = 4,
+	I_LCOEF_WRANDIOPS = 5,
+	NR_I_LCOEFS = 6,
+};
+
+enum {
+	LCOEF_RPAGE = 0,
+	LCOEF_RSEQIO = 1,
+	LCOEF_RRANDIO = 2,
+	LCOEF_WPAGE = 3,
+	LCOEF_WSEQIO = 4,
+	LCOEF_WRANDIO = 5,
+	NR_LCOEFS = 6,
+};
+
+enum {
+	AUTOP_INVALID = 0,
+	AUTOP_HDD = 1,
+	AUTOP_SSD_QD1 = 2,
+	AUTOP_SSD_DFL = 3,
+	AUTOP_SSD_FAST = 4,
+};
+
+struct ioc_params {
+	u32 qos[6];
+	u64 i_lcoefs[6];
+	u64 lcoefs[6];
+	u32 too_fast_vrate_pct;
+	u32 too_slow_vrate_pct;
+};
+
+struct ioc_margins {
+	s64 min;
+	s64 low;
+	s64 target;
+};
+
+struct ioc_missed {
+	local_t nr_met;
+	local_t nr_missed;
+	u32 last_met;
+	u32 last_missed;
+};
+
+struct ioc_pcpu_stat {
+	struct ioc_missed missed[2];
+	local64_t rq_wait_ns;
+	u64 last_rq_wait_ns;
+};
+
+struct ioc {
+	struct rq_qos rqos;
+	bool enabled;
+	struct ioc_params params;
+	struct ioc_margins margins;
+	u32 period_us;
+	u32 timer_slack_ns;
+	u64 vrate_min;
+	u64 vrate_max;
+	spinlock_t lock;
+	struct timer_list timer;
+	struct list_head active_iocgs;
+	struct ioc_pcpu_stat *pcpu_stat;
+	enum ioc_running running;
+	atomic64_t vtime_rate;
+	u64 vtime_base_rate;
+	s64 vtime_err;
+	seqcount_spinlock_t period_seqcount;
+	u64 period_at;
+	u64 period_at_vtime;
+	atomic64_t cur_period;
+	int busy_level;
+	bool weights_updated;
+	atomic_t hweight_gen;
+	u64 dfgv_period_at;
+	u64 dfgv_period_rem;
+	u64 dfgv_usage_us_sum;
+	u64 autop_too_fast_at;
+	u64 autop_too_slow_at;
+	int autop_idx;
+	bool user_qos_params: 1;
+	bool user_cost_model: 1;
+};
+
+struct iocg_pcpu_stat {
+	local64_t abs_vusage;
+};
+
+struct iocg_stat {
+	u64 usage_us;
+	u64 wait_us;
+	u64 indebt_us;
+	u64 indelay_us;
+};
+
+struct ioc_gq {
+	struct blkg_policy_data pd;
+	struct ioc *ioc;
+	u32 cfg_weight;
+	u32 weight;
+	u32 active;
+	u32 inuse;
+	u32 last_inuse;
+	s64 saved_margin;
+	sector_t cursor;
+	atomic64_t vtime;
+	atomic64_t done_vtime;
+	u64 abs_vdebt;
+	u64 delay;
+	u64 delay_at;
+	atomic64_t active_period;
+	struct list_head active_list;
+	u64 child_active_sum;
+	u64 child_inuse_sum;
+	u64 child_adjusted_sum;
+	int hweight_gen;
+	u32 hweight_active;
+	u32 hweight_inuse;
+	u32 hweight_donating;
+	u32 hweight_after_donation;
+	struct list_head walk_list;
+	struct list_head surplus_list;
+	struct wait_queue_head waitq;
+	struct hrtimer waitq_timer;
+	u64 activated_at;
+	struct iocg_pcpu_stat *pcpu_stat;
+	struct iocg_stat stat;
+	struct iocg_stat last_stat;
+	u64 last_stat_abs_vusage;
+	u64 usage_delta_us;
+	u64 wait_since;
+	u64 indebt_since;
+	u64 indelay_since;
+	int level;
+	struct ioc_gq *ancestors[0];
+};
+
+struct ioc_cgrp {
+	struct blkcg_policy_data cpd;
+	unsigned int dfl_weight;
+};
+
+struct ioc_now {
+	u64 now_ns;
+	u64 now;
+	u64 vnow;
+};
+
+struct iocg_wait {
+	struct wait_queue_entry wait;
+	struct bio *bio;
+	u64 abs_cost;
+	bool committed;
+};
+
+struct iocg_wake_ctx {
+	struct ioc_gq *iocg;
+	u32 hw_inuse;
+	s64 vbudget;
+};
+
+struct trace_event_raw_iocost_iocg_state {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+	u64 last_period;
+	u64 cur_period;
+	u64 vtime;
+	u32 weight;
+	u32 inuse;
+	u64 hweight_active;
+	u64 hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocg_inuse_update {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u32 old_inuse;
+	u32 new_inuse;
+	u64 old_hweight_inuse;
+	u64 new_hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_ioc_vrate_adj {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u64 old_vrate;
+	u64 new_vrate;
+	int busy_level;
+	u32 read_missed_ppm;
+	u32 write_missed_ppm;
+	u32 rq_wait_pct;
+	int nr_lagging;
+	int nr_shortages;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_iocg_forgive_debt {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u32 usage_pct;
+	u64 old_debt;
+	u64 new_debt;
+	u64 old_delay;
+	u64 new_delay;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iocost_iocg_state {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocg_inuse_update {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocost_ioc_vrate_adj {
+	u32 devname;
+};
+
+struct trace_event_data_offsets_iocost_iocg_forgive_debt {
+	u32 devname;
+	u32 cgroup;
+};
+
+typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
+
+typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
+
+enum wbt_flags {
+	WBT_TRACKED = 1,
+	WBT_READ = 2,
+	WBT_KSWAPD = 4,
+	WBT_DISCARD = 8,
+	WBT_NR_BITS = 4,
+};
+
+enum {
+	WBT_STATE_ON_DEFAULT = 1,
+	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
+	WBT_STATE_OFF_MANUAL = 4,
+};
+
+struct rq_wb {
+	unsigned int wb_background;
+	unsigned int wb_normal;
+	short int enable_state;
+	unsigned int unknown_cnt;
+	u64 win_nsec;
+	u64 cur_win_nsec;
+	struct blk_stat_callback *cb;
+	u64 sync_issue;
+	void *sync_cookie;
+	unsigned int wc;
+	long unsigned int last_issue;
+	long unsigned int last_comp;
+	long unsigned int min_lat_nsec;
+	struct rq_qos rqos;
+	struct rq_wait rq_wait[3];
+	struct rq_depth rq_depth;
+};
+
+struct trace_event_raw_wbt_stat {
+	struct trace_entry ent;
+	char name[32];
+	s64 rmean;
+	u64 rmin;
+	u64 rmax;
+	s64 rnr_samples;
+	s64 rtime;
+	s64 wmean;
+	u64 wmin;
+	u64 wmax;
+	s64 wnr_samples;
+	s64 wtime;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_lat {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int lat;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_step {
+	struct trace_entry ent;
+	char name[32];
+	const char *msg;
+	int step;
+	long unsigned int window;
+	unsigned int bg;
+	unsigned int normal;
+	unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_timer {
+	struct trace_entry ent;
+	char name[32];
+	unsigned int status;
+	int step;
+	unsigned int inflight;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_wbt_stat {};
+
+struct trace_event_data_offsets_wbt_lat {};
+
+struct trace_event_data_offsets_wbt_step {};
+
+struct trace_event_data_offsets_wbt_timer {};
+
+typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
+
+typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
+
+typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
+
+enum {
+	RWB_DEF_DEPTH = 16,
+	RWB_WINDOW_NSEC = 100000000,
+	RWB_MIN_WRITE_SAMPLES = 3,
+	RWB_UNKNOWN_BUMP = 5,
+};
+
+enum {
+	LAT_OK = 1,
+	LAT_UNKNOWN = 2,
+	LAT_UNKNOWN_WRITES = 3,
+	LAT_EXCEEDED = 4,
+};
+
+struct wbt_wait_data {
+	struct rq_wb *rwb;
+	enum wbt_flags wb_acct;
+	blk_opf_t opf;
+};
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct kobject *holder_dir;
+	int refcnt;
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	long unsigned int nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+struct user_msghdr {
+	void *msg_name;
+	int msg_namelen;
+	struct iovec *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+typedef s32 compat_int_t;
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr *addr;
+	int *addr_len;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr *addr;
+	int addr_len;
+	bool in_progress;
+};
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr *umsg_compat;
+		struct user_msghdr *umsg;
+		void *buf;
+	};
+	unsigned int len;
+	unsigned int done_io;
+	unsigned int msg_flags;
+	u16 flags;
+	u16 addr_len;
+	u16 buf_group;
+	void *addr;
+	struct io_kiocb *notif;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u64 pad[4];
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+typedef s32 compat_ssize_t;
+
+struct once_work {
+	struct work_struct work;
+	struct static_key_true *key;
+	struct module *module;
+};
+
+struct btree_head {
+	long unsigned int *node;
+	mempool_t *mempool;
+	int height;
+};
+
+struct btree_geo {
+	int keylen;
+	int no_pairs;
+	int no_longs;
+};
+
+typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
+
+typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
+
+typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
+
+typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	long unsigned int bits[0];
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	long unsigned int offset;
+};
+
+typedef enum {
+	ZSTD_c_compressionLevel = 100,
+	ZSTD_c_windowLog = 101,
+	ZSTD_c_hashLog = 102,
+	ZSTD_c_chainLog = 103,
+	ZSTD_c_searchLog = 104,
+	ZSTD_c_minMatch = 105,
+	ZSTD_c_targetLength = 106,
+	ZSTD_c_strategy = 107,
+	ZSTD_c_enableLongDistanceMatching = 160,
+	ZSTD_c_ldmHashLog = 161,
+	ZSTD_c_ldmMinMatch = 162,
+	ZSTD_c_ldmBucketSizeLog = 163,
+	ZSTD_c_ldmHashRateLog = 164,
+	ZSTD_c_contentSizeFlag = 200,
+	ZSTD_c_checksumFlag = 201,
+	ZSTD_c_dictIDFlag = 202,
+	ZSTD_c_nbWorkers = 400,
+	ZSTD_c_jobSize = 401,
+	ZSTD_c_overlapLog = 402,
+	ZSTD_c_experimentalParam1 = 500,
+	ZSTD_c_experimentalParam2 = 10,
+	ZSTD_c_experimentalParam3 = 1000,
+	ZSTD_c_experimentalParam4 = 1001,
+	ZSTD_c_experimentalParam5 = 1002,
+	ZSTD_c_experimentalParam6 = 1003,
+	ZSTD_c_experimentalParam7 = 1004,
+	ZSTD_c_experimentalParam8 = 1005,
+	ZSTD_c_experimentalParam9 = 1006,
+	ZSTD_c_experimentalParam10 = 1007,
+	ZSTD_c_experimentalParam11 = 1008,
+	ZSTD_c_experimentalParam12 = 1009,
+	ZSTD_c_experimentalParam13 = 1010,
+	ZSTD_c_experimentalParam14 = 1011,
+	ZSTD_c_experimentalParam15 = 1012,
+} ZSTD_cParameter;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef ZSTD_CStream zstd_cstream;
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t___2;
+
+struct gcry_mpi_point {
+	MPI x;
+	MPI y;
+	MPI z;
+};
+
+typedef struct gcry_mpi_point *MPI_POINT;
+
+enum gcry_mpi_ec_models {
+	MPI_EC_WEIERSTRASS = 0,
+	MPI_EC_MONTGOMERY = 1,
+	MPI_EC_EDWARDS = 2,
+};
+
+enum ecc_dialects {
+	ECC_DIALECT_STANDARD = 0,
+	ECC_DIALECT_ED25519 = 1,
+	ECC_DIALECT_SAFECURVE = 2,
+};
+
+struct mpi_ec_ctx {
+	enum gcry_mpi_ec_models model;
+	enum ecc_dialects dialect;
+	int flags;
+	unsigned int nbits;
+	MPI p;
+	MPI a;
+	MPI b;
+	MPI_POINT G;
+	MPI n;
+	unsigned int h;
+	MPI_POINT Q;
+	MPI d;
+	const char *name;
+	struct {
+		struct {
+			unsigned int a_is_pminus3: 1;
+			unsigned int two_inv_p: 1;
+		} valid;
+		int a_is_pminus3;
+		MPI two_inv_p;
+		mpi_barrett_t___2 p_barrett;
+		MPI scratch[11];
+	} t;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+};
+
+struct field_table {
+	const char *p;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+};
+
+enum {
+	IRQ_POLL_F_SCHED = 0,
+	IRQ_POLL_F_DISABLE = 1,
+};
+
+struct acpi_madt_ht_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u64 address;
+	u16 size;
+	u8 cascade[8];
+} __attribute__((packed));
+
+struct htvec {
+	int num_parents;
+	void *base;
+	struct irq_domain *htvec_domain;
+	raw_spinlock_t htvec_lock;
+	u32 saved_vec_en[8];
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+	OF_GPIO_PULL_DISABLE = 64,
+};
+
+struct of_mm_gpio_chip {
+	struct gpio_chip gc;
+	void (*save_regs)(struct of_mm_gpio_chip *);
+	void *regs;
+};
+
+typedef struct gpio_desc * (*of_find_gpio_quirk)(struct device_node *, const char *, unsigned int, enum of_gpio_flags *);
+
+struct of_rename_gpio {
+	const char *con_id;
+	const char *legacy_id;
+	const char *compatible;
+};
+
+struct acpi_gpiolib_dmi_quirk {
+	bool no_edge_events_on_boot;
+	char *ignore_wake;
+	char *ignore_interrupt;
+};
+
+struct acpi_gpio_event {
+	struct list_head node;
+	acpi_handle handle;
+	irq_handler_t handler;
+	unsigned int pin;
+	unsigned int irq;
+	long unsigned int irqflags;
+	bool irq_is_wake;
+	bool irq_requested;
+	struct gpio_desc *desc;
+};
+
+struct acpi_gpio_connection {
+	struct list_head node;
+	unsigned int pin;
+	struct gpio_desc *desc;
+};
+
+struct acpi_gpio_chip {
+	struct acpi_connection_info conn_info;
+	struct list_head conns;
+	struct mutex conn_lock;
+	struct gpio_chip *chip;
+	struct list_head events;
+	struct list_head deferred_req_irqs_list_entry;
+};
+
+struct acpi_gpio_info {
+	struct acpi_device *adev;
+	enum gpiod_flags flags;
+	bool gpioint;
+	int pin_config;
+	int polarity;
+	int triggering;
+	bool wake_capable;
+	unsigned int debounce;
+	unsigned int quirks;
+};
+
+struct acpi_gpio_lookup {
+	struct acpi_gpio_info info;
+	int index;
+	u16 pin_index;
+	bool active_low;
+	struct gpio_desc *desc;
+	int n;
+};
+
+struct pwm_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+	unsigned int period;
+	enum pwm_polarity polarity;
+	const char *module;
+};
+
+struct trace_event_raw_pwm {
+	struct trace_entry ent;
+	struct pwm_device *pwm;
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_pwm {};
+
+typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	long unsigned int flags;
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+enum enable_type {
+	undefined = -1,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+struct aer_stats {
+	u64 dev_cor_errs[16];
+	u64 dev_fatal_errs[27];
+	u64 dev_nonfatal_errs[27];
+	u64 dev_total_cor_errs;
+	u64 dev_total_fatal_errs;
+	u64 dev_total_nonfatal_errs;
+	u64 rootport_total_cor_errs;
+	u64 rootport_total_fatal_errs;
+	u64 rootport_total_nonfatal_errs;
+};
+
+struct aer_err_info {
+	struct pci_dev *dev[5];
+	int error_dev_num;
+	unsigned int id: 16;
+	unsigned int severity: 2;
+	unsigned int __pad1: 5;
+	unsigned int multi_error_valid: 1;
+	unsigned int first_error: 5;
+	unsigned int __pad2: 2;
+	unsigned int tlp_header_valid: 1;
+	unsigned int status;
+	unsigned int mask;
+	struct aer_header_log_regs tlp;
+};
+
+struct aer_err_source {
+	unsigned int status;
+	unsigned int id;
+};
+
+struct aer_rpc {
+	struct pci_dev *rpd;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct aer_err_source *type;
+			const struct aer_err_source *const_type;
+			char (*rectype)[0];
+			struct aer_err_source *ptr;
+			const struct aer_err_source *ptr_const;
+		};
+		struct aer_err_source buf[128];
+	} aer_fifo;
+};
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct event_info {
+	u32 event_type;
+	struct slot *p_slot;
+	struct work_struct work;
+};
+
+struct pushbutton_work_info {
+	struct slot *p_slot;
+	struct work_struct work;
+};
+
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
+struct fb_event {
+	struct fb_info *info;
+	void *data;
+};
+
+enum backlight_update_reason {
+	BACKLIGHT_UPDATE_HOTKEY = 0,
+	BACKLIGHT_UPDATE_SYSFS = 1,
+};
+
+enum backlight_notification {
+	BACKLIGHT_REGISTERED = 0,
+	BACKLIGHT_UNREGISTERED = 1,
+};
+
+struct fb_cmap_user {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct logo_data {
+	int depth;
+	int needs_directpalette;
+	int needs_truepalette;
+	int needs_cmapreset;
+	const struct linux_logo *logo;
+};
+
+struct acpi_madt_local_apic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u32 lapic_flags;
+};
+
+struct acpi_madt_io_apic {
+	struct acpi_subtable_header header;
+	u8 id;
+	u8 reserved;
+	u32 address;
+	u32 global_irq_base;
+};
+
+struct acpi_madt_interrupt_override {
+	struct acpi_subtable_header header;
+	u8 bus;
+	u8 source_irq;
+	u32 global_irq;
+	u16 inti_flags;
+} __attribute__((packed));
+
+struct acpi_madt_nmi_source {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 global_irq;
+};
+
+struct acpi_madt_local_apic_nmi {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u16 inti_flags;
+	u8 lint;
+} __attribute__((packed));
+
+struct acpi_madt_local_apic_override {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_madt_io_sapic {
+	struct acpi_subtable_header header;
+	u8 id;
+	u8 reserved;
+	u32 global_irq_base;
+	u64 address;
+};
+
+struct acpi_madt_local_sapic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u8 eid;
+	u8 reserved[3];
+	u32 lapic_flags;
+	u32 uid;
+	char uid_string[1];
+} __attribute__((packed));
+
+struct acpi_madt_interrupt_source {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u8 type;
+	u8 id;
+	u8 eid;
+	u8 io_sapic_vector;
+	u32 global_irq;
+	u32 flags;
+};
+
+struct acpi_madt_local_x2apic {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 local_apic_id;
+	u32 lapic_flags;
+	u32 uid;
+};
+
+struct acpi_madt_local_x2apic_nmi {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 uid;
+	u8 lint;
+	u8 reserved[3];
+};
+
+struct acpi_madt_generic_interrupt {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 cpu_interface_number;
+	u32 uid;
+	u32 flags;
+	u32 parking_version;
+	u32 performance_interrupt;
+	u64 parked_address;
+	u64 base_address;
+	u64 gicv_base_address;
+	u64 gich_base_address;
+	u32 vgic_interrupt;
+	u64 gicr_base_address;
+	u64 arm_mpidr;
+	u8 efficiency_class;
+	u8 reserved2[1];
+	u16 spe_interrupt;
+} __attribute__((packed));
+
+struct acpi_madt_generic_distributor {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 gic_id;
+	u64 base_address;
+	u32 global_irq_base;
+	u8 version;
+	u8 reserved2[3];
+};
+
+struct acpi_madt_core_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u32 processor_id;
+	u32 core_id;
+	u32 flags;
+} __attribute__((packed));
+
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
+};
+
+enum acpi_subtable_type {
+	ACPI_SUBTABLE_COMMON = 0,
+	ACPI_SUBTABLE_HMAT = 1,
+	ACPI_SUBTABLE_PRMT = 2,
+	ACPI_SUBTABLE_CEDT = 3,
+};
+
+struct acpi_subtable_entry {
+	union acpi_subtable_headers *hdr;
+	enum acpi_subtable_type type;
+};
+
+struct nvs_region {
+	__u64 phys_start;
+	__u64 size;
+	struct list_head node;
+};
+
+struct nvs_page {
+	long unsigned int phys_start;
+	unsigned int size;
+	void *kaddr;
+	void *data;
+	bool unmap;
+	struct list_head node;
+};
+
+struct find_child_walk_data {
+	struct acpi_device *adev;
+	u64 address;
+	int score;
+	bool check_sta;
+	bool check_children;
+};
+
+struct acpi_table_madt {
+	struct acpi_table_header header;
+	u32 address;
+	u32 flags;
+};
+
+struct dock_station {
+	acpi_handle handle;
+	long unsigned int last_dock_time;
+	u32 flags;
+	struct list_head dependent_devices;
+	struct list_head sibling;
+	struct platform_device *dock_device;
+};
+
+struct dock_dependent_device {
+	struct list_head list;
+	struct acpi_device *adev;
+};
+
+enum dock_callback_type {
+	DOCK_CALL_HANDLER = 0,
+	DOCK_CALL_FIXUP = 1,
+	DOCK_CALL_UEVENT = 2,
+};
+
+struct acpi_pci_routing_table {
+	u32 length;
+	u32 pin;
+	u64 address;
+	u32 source_index;
+	char source[4];
+};
+
+struct acpi_prt_entry {
+	struct acpi_pci_id id;
+	u8 pin;
+	acpi_handle link;
+	u32 index;
+};
+
+struct prt_quirk {
+	const struct dmi_system_id *system;
+	unsigned int segment;
+	unsigned int bus;
+	unsigned int device;
+	unsigned char pin;
+	const char *source;
+	const char *actual_source;
+};
+
+struct acpi_table_bert {
+	struct acpi_table_header header;
+	u32 region_length;
+	u64 address;
+};
+
+struct acpi_table_attr {
+	struct bin_attribute attr;
+	char name[4];
+	int instance;
+	char filename[8];
+	struct list_head node;
+};
+
+struct acpi_data_attr {
+	struct bin_attribute attr;
+	u64 addr;
+};
+
+struct acpi_data_obj {
+	char *name;
+	int (*fn)(void *, struct acpi_data_attr *);
+};
+
+struct event_counter {
+	u32 count;
+	u32 flags;
+};
+
+struct acpi_irq_parse_one_ctx {
+	int rc;
+	unsigned int index;
+	long unsigned int *res_flags;
+	struct irq_fwspec *fwspec;
+};
+
+struct acpi_gpe_walk_info {
+	struct acpi_namespace_node *gpe_device;
+	struct acpi_gpe_block_info *gpe_block;
+	u16 count;
+	acpi_owner_id owner_id;
+	u8 execute_by_owner_id;
+};
+
+enum {
+	MATCH_MTR = 0,
+	MATCH_MEQ = 1,
+	MATCH_MLE = 2,
+	MATCH_MLT = 3,
+	MATCH_MGE = 4,
+	MATCH_MGT = 5,
+};
+
+struct acpi_namestring_info {
+	const char *external_name;
+	const char *next_external_char;
+	char *internal_name;
+	u32 length;
+	u32 num_segments;
+	u32 num_carats;
+	u8 fully_qualified;
+};
+
+typedef u32 acpi_rsdesc_size;
+
+struct acpi_fadt_info {
+	const char *name;
+	u16 address64;
+	u16 address32;
+	u16 length;
+	u8 default_length;
+	u8 flags;
+};
+
+struct acpi_fadt_pm_info {
+	struct acpi_generic_address *target;
+	u16 source;
+	u8 register_num;
+};
+
+struct acpi_table_cdat {
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	u8 reserved[6];
+	u32 sequence;
+};
+
+typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
+
+struct mcfg_entry {
+	struct list_head list;
+	phys_addr_t addr;
+	u16 segment;
+	u8 bus_start;
+	u8 bus_end;
+};
+
+struct mcfg_fixup {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	u16 segment;
+	struct resource bus_range;
+	const struct pci_ecam_ops *ops;
+	struct resource cfgres;
+};
+
+struct acpi_video_brightness_flags {
+	u8 _BCL_no_ac_battery_levels: 1;
+	u8 _BCL_reversed: 1;
+	u8 _BQC_use_index: 1;
+};
+
+struct acpi_video_device_brightness {
+	int curr;
+	int count;
+	int *levels;
+	struct acpi_video_brightness_flags flags;
+};
+
+enum acpi_video_level_idx {
+	ACPI_VIDEO_AC_LEVEL = 0,
+	ACPI_VIDEO_BATTERY_LEVEL = 1,
+	ACPI_VIDEO_FIRST_LEVEL = 2,
+};
+
+struct acpi_video_bus_flags {
+	u8 multihead: 1;
+	u8 rom: 1;
+	u8 post: 1;
+	u8 reserved: 5;
+};
+
+struct acpi_video_bus_cap {
+	u8 _DOS: 1;
+	u8 _DOD: 1;
+	u8 _ROM: 1;
+	u8 _GPD: 1;
+	u8 _SPD: 1;
+	u8 _VPO: 1;
+	u8 reserved: 2;
+};
+
+struct acpi_video_device_attrib {
+	u32 display_index: 4;
+	u32 display_port_attachment: 4;
+	u32 display_type: 4;
+	u32 vendor_specific: 4;
+	u32 bios_can_detect: 1;
+	u32 depend_on_vga: 1;
+	u32 pipe_id: 3;
+	u32 reserved: 10;
+	u32 device_id_scheme: 1;
+};
+
+struct acpi_video_device;
+
+struct acpi_video_enumerated_device {
+	union {
+		u32 int_val;
+		struct acpi_video_device_attrib attrib;
+	} value;
+	struct acpi_video_device *bind_info;
+};
+
+struct acpi_video_device_flags {
+	u8 crt: 1;
+	u8 lcd: 1;
+	u8 tvout: 1;
+	u8 dvi: 1;
+	u8 bios: 1;
+	u8 unknown: 1;
+	u8 notify: 1;
+	u8 reserved: 1;
+};
+
+struct acpi_video_device_cap {
+	u8 _ADR: 1;
+	u8 _BCL: 1;
+	u8 _BCM: 1;
+	u8 _BQC: 1;
+	u8 _BCQ: 1;
+	u8 _DDC: 1;
+};
+
+struct acpi_video_bus;
+
+struct acpi_video_device {
+	long unsigned int device_id;
+	struct acpi_video_device_flags flags;
+	struct acpi_video_device_cap cap;
+	struct list_head entry;
+	struct delayed_work switch_brightness_work;
+	int switch_brightness_event;
+	struct acpi_video_bus *video;
+	struct acpi_device *dev;
+	struct acpi_video_device_brightness *brightness;
+	struct backlight_device *backlight;
+	struct thermal_cooling_device *cooling_dev;
+};
+
+struct acpi_video_bus {
+	struct acpi_device *device;
+	bool backlight_registered;
+	u8 dos_setting;
+	struct acpi_video_enumerated_device *attached_array;
+	u8 attached_count;
+	u8 child_count;
+	struct acpi_video_bus_cap cap;
+	struct acpi_video_bus_flags flags;
+	struct list_head video_device_list;
+	struct mutex device_list_lock;
+	struct list_head entry;
+	struct input_dev *input;
+	char phys[32];
+	struct notifier_block pm_nb;
+};
+
+struct throttling_tstate {
+	unsigned int cpu;
+	int target_state;
+};
+
+struct acpi_processor_throttling_arg {
+	struct acpi_processor *pr;
+	int target_state;
+	bool force;
+};
+
+enum acpi_hmat_type {
+	ACPI_HMAT_TYPE_PROXIMITY = 0,
+	ACPI_HMAT_TYPE_LOCALITY = 1,
+	ACPI_HMAT_TYPE_CACHE = 2,
+	ACPI_HMAT_TYPE_RESERVED = 3,
+};
+
+struct acpi_hmat_proximity_domain {
+	struct acpi_hmat_structure header;
+	u16 flags;
+	u16 reserved1;
+	u32 processor_PD;
+	u32 memory_PD;
+	u32 reserved2;
+	u64 reserved3;
+	u64 reserved4;
+};
+
+struct acpi_hmat_locality {
+	struct acpi_hmat_structure header;
+	u8 flags;
+	u8 data_type;
+	u8 min_transfer_size;
+	u8 reserved1;
+	u32 number_of_initiator_Pds;
+	u32 number_of_target_Pds;
+	u32 reserved2;
+	u64 entry_base_unit;
+};
+
+struct acpi_hmat_cache {
+	struct acpi_hmat_structure header;
+	u32 memory_PD;
+	u32 reserved1;
+	u64 cache_size;
+	u32 cache_attributes;
+	u16 reserved2;
+	u16 number_of_SMBIOShandles;
+};
+
+enum locality_types {
+	WRITE_LATENCY = 0,
+	READ_LATENCY = 1,
+	WRITE_BANDWIDTH = 2,
+	READ_BANDWIDTH = 3,
+};
+
+struct memory_locality {
+	struct list_head node;
+	struct acpi_hmat_locality *hmat_loc;
+};
+
+struct target_cache {
+	struct list_head node;
+	struct node_cache_attrs cache_attrs;
+};
+
+struct memory_target {
+	struct list_head node;
+	unsigned int memory_pxm;
+	unsigned int processor_pxm;
+	struct resource memregions;
+	struct node_hmem_attrs hmem_attrs[2];
+	struct list_head caches;
+	struct node_cache_attrs cache_attrs;
+	bool registered;
+};
+
+struct memory_initiator {
+	struct list_head node;
+	unsigned int processor_pxm;
+	bool has_cpu;
+};
+
+struct pnp_info_buffer {
+	char *buffer;
+	char *curr;
+	long unsigned int size;
+	long unsigned int len;
+	int stop;
+	int error;
+};
+
+typedef struct pnp_info_buffer pnp_info_buffer_t;
+
+struct acpipnp_parse_option_s {
+	struct pnp_dev *dev;
+	unsigned int option_flags;
+};
+
+struct clk_notifier {
+	struct clk *clk;
+	struct srcu_notifier_head notifier_head;
+	struct list_head node;
+};
+
+struct clk_notifier_data {
+	struct clk *clk;
+	long unsigned int old_rate;
+	long unsigned int new_rate;
+};
+
+struct clk_parent_map;
+
+struct clk_core {
+	const char *name;
+	const struct clk_ops *ops;
+	struct clk_hw *hw;
+	struct module *owner;
+	struct device *dev;
+	struct device_node *of_node;
+	struct clk_core *parent;
+	struct clk_parent_map *parents;
+	u8 num_parents;
+	u8 new_parent_index;
+	long unsigned int rate;
+	long unsigned int req_rate;
+	long unsigned int new_rate;
+	struct clk_core *new_parent;
+	struct clk_core *new_child;
+	long unsigned int flags;
+	bool orphan;
+	bool rpm_enabled;
+	unsigned int enable_count;
+	unsigned int prepare_count;
+	unsigned int protect_count;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int accuracy;
+	int phase;
+	struct clk_duty duty;
+	struct hlist_head children;
+	struct hlist_node child_node;
+	struct hlist_head clks;
+	unsigned int notifier_count;
+	struct dentry *dentry;
+	struct hlist_node debug_node;
+	struct kref ref;
+};
+
+struct clk_onecell_data {
+	struct clk **clks;
+	unsigned int clk_num;
+};
+
+struct clk_hw_onecell_data {
+	unsigned int num;
+	struct clk_hw *hws[0];
+};
+
+struct clk_parent_map {
+	const struct clk_hw *hw;
+	struct clk_core *core;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct trace_event_raw_clk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int rate;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int min;
+	long unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_parent {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_phase {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int phase;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_duty_cycle {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int num;
+	unsigned int den;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int prate;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_clk {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_parent {
+	u32 name;
+	u32 pname;
+};
+
+struct trace_event_data_offsets_clk_phase {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_duty_cycle {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_request {
+	u32 name;
+	u32 pname;
+};
+
+typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_rate_request_start)(void *, struct clk_rate_request *);
+
+typedef void (*btf_trace_clk_rate_request_done)(void *, struct clk_rate_request *);
+
+struct clk_notifier_devres {
+	struct clk *clk;
+	struct notifier_block *nb;
+};
+
+struct of_clk_provider {
+	struct list_head link;
+	struct device_node *node;
+	struct clk * (*get)(struct of_phandle_args *, void *);
+	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
+	void *data;
+};
+
+struct clock_provider {
+	void (*clk_init_cb)(struct device_node *);
+	struct device_node *np;
+	struct list_head node;
+};
+
+struct clk_gpio {
+	struct clk_hw hw;
+	struct gpio_desc *gpiod;
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct of_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct of_regulator_match {
+	const char *name;
+	void *driver_data;
+	struct regulator_init_data *init_data;
+	struct device_node *of_node;
+	const struct regulator_desc *desc;
+};
+
+struct devm_of_regulator_matches {
+	struct of_regulator_match *matches;
+	unsigned int num_matches;
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	short unsigned int c_iflag;
+	short unsigned int c_oflag;
+	short unsigned int c_cflag;
+	short unsigned int c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct tty_audit_buf {
+	struct mutex mutex;
+	dev_t dev;
+	unsigned int icanon: 1;
+	size_t valid;
+	unsigned char *data;
+};
+
+struct vc_selection {
+	struct mutex lock;
+	struct vc_data *cons;
+	char *buffer;
+	unsigned int buf_len;
+	volatile int start;
+	int end;
+};
+
+struct kbdiacruc {
+	unsigned int diacr;
+	unsigned int base;
+	unsigned int result;
+};
+
+struct hv_ops;
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	long unsigned int flags;
+};
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, int);
+};
+
+struct serial8250_config {
+	const char *name;
+	short unsigned int fifo_size;
+	short unsigned int tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+struct timer_rand_state {
+	long unsigned int last_time;
+	long int last_delta;
+	long int last_delta2;
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 250,
+	CRNG_RESEED_INTERVAL = 15000,
+};
+
+struct crng {
+	u8 key[32];
+	long unsigned int generation;
+	local_lock_t lock;
+};
+
+struct batch_u8 {
+	u8 entropy[96];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u16 {
+	u16 entropy[48];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+struct fast_pool {
+	long unsigned int pool[4];
+	long unsigned int last;
+	unsigned int count;
+	struct timer_list mix;
+};
+
+struct entropy_timer_state {
+	long unsigned int entropy;
+	struct timer_list timer;
+	atomic_t samples;
+	unsigned int samples_per_bit;
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 16,
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct drm_mode_atomic {
+	__u32 flags;
+	__u32 count_objs;
+	__u64 objs_ptr;
+	__u64 count_props_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u64 reserved;
+	__u64 user_data;
+};
+
+struct drm_out_fence_state {
+	s32 *out_fence_ptr;
+	struct sync_file *sync_file;
+	int fd;
+};
+
+struct drm_client_dev;
+
+struct drm_client_funcs {
+	struct module *owner;
+	void (*unregister)(struct drm_client_dev *);
+	int (*restore)(struct drm_client_dev *);
+	int (*hotplug)(struct drm_client_dev *);
+};
+
+struct drm_client_dev {
+	struct drm_device *dev;
+	const char *name;
+	struct list_head list;
+	const struct drm_client_funcs *funcs;
+	struct drm_file *file;
+	struct mutex modeset_mutex;
+	struct drm_mode_set *modesets;
+};
+
+struct drm_client_offset {
+	int x;
+	int y;
+};
+
+struct displayid_header {
+	u8 rev;
+	u8 bytes;
+	u8 prod_id;
+	u8 ext_count;
+};
+
+struct displayid_block {
+	u8 tag;
+	u8 rev;
+	u8 num_bytes;
+};
+
+struct displayid_iter {
+	const struct drm_edid *drm_edid;
+	const u8 *section;
+	int length;
+	int idx;
+	int ext_index;
+};
+
+struct drm_mode_map_dumb {
+	__u32 handle;
+	__u32 pad;
+	__u64 offset;
+};
+
+struct drm_mode_destroy_dumb {
+	__u32 handle;
+};
+
+struct drm_mode_fb_cmd {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pitch;
+	__u32 bpp;
+	__u32 depth;
+	__u32 handle;
+};
+
+struct drm_mode_fb_dirty_cmd {
+	__u32 fb_id;
+	__u32 flags;
+	__u32 color;
+	__u32 num_clips;
+	__u64 clips_ptr;
+};
+
+struct drm_mode_rmfb_work {
+	struct work_struct work;
+	struct list_head fbs;
+};
+
+struct drmres_node {
+	struct list_head entry;
+	drmres_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct drmres {
+	struct drmres_node node;
+	u8 data[0];
+};
+
+struct drm_mode_obj_get_properties {
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_props;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct drm_prime_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+};
+
+struct drm_prime_member {
+	struct dma_buf *dma_buf;
+	uint32_t handle;
+	struct rb_node dmabuf_rb;
+	struct rb_node handle_rb;
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct drm_vma_offset_file {
+	struct rb_node vm_rb;
+	struct drm_file *vm_tag;
+	long unsigned int vm_count;
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+enum drm_lvds_dual_link_pixels {
+	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
+	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
+};
+
+enum drm_of_lvds_pixels {
+	DRM_OF_LVDS_EVEN = 1,
+	DRM_OF_LVDS_ODD = 2,
+};
+
+struct component_match;
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+typedef int (*pm_callback_t)(struct device *);
+
+struct pm_clk_notifier_block {
+	struct notifier_block nb;
+	struct dev_pm_domain *pm_domain;
+	char *con_ids[0];
+};
+
+enum pce_status {
+	PCE_STATUS_NONE = 0,
+	PCE_STATUS_ACQUIRED = 1,
+	PCE_STATUS_PREPARED = 2,
+	PCE_STATUS_ENABLED = 3,
+	PCE_STATUS_ERROR = 4,
+};
+
+struct pm_clock_entry {
+	struct list_head node;
+	char *con_id;
+	struct clk *clk;
+	enum pce_status status;
+	bool enabled_when_prepared;
+};
+
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
+};
+
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
+struct for_each_memory_block_cb_data {
+	walk_memory_blocks_func_t func;
+	void *arg;
+};
+
+struct reg_field {
+	unsigned int reg;
+	unsigned int lsb;
+	unsigned int msb;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct regmap_field {
+	struct regmap *regmap;
+	unsigned int mask;
+	unsigned int shift;
+	unsigned int reg;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct trace_event_raw_regmap_reg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bulk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	u32 __data_loc_buf;
+	int val_len;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_block {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_sync {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_status;
+	u32 __data_loc_type;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bool {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flag;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_async {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_drop_region {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int from;
+	unsigned int to;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regmap_reg {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bulk {
+	u32 name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_regmap_block {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_sync {
+	u32 name;
+	u32 status;
+	u32 type;
+};
+
+struct trace_event_data_offsets_regmap_bool {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_async {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_drop_region {
+	u32 name;
+};
+
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_bulk_write)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_bulk_read)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
+
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
+
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct devcd_entry {
+	struct device devcd_dev;
+	void *data;
+	size_t datalen;
+	struct mutex mutex;
+	bool delete_work;
+	struct module *owner;
+	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
+	void (*free)(void *);
+	struct delayed_work del_wk;
+	struct device *failing_dev;
+};
+
+struct syscon_platform_data {
+	const char *label;
+};
+
+struct syscon {
+	struct device_node *np;
+	struct regmap *regmap;
+	struct list_head list;
+};
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_ml_status {
+	SCSIML_STAT_OK = 0,
+	SCSIML_STAT_RESV_CONFLICT = 1,
+	SCSIML_STAT_NOSPC = 2,
+	SCSIML_STAT_MED_ERROR = 3,
+	SCSIML_STAT_TGT_FAILURE = 4,
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+struct scsi_nl_hdr {
+	__u8 version;
+	__u8 transport;
+	__u16 magic;
+	__u16 msgtype;
+	__u16 msglen;
+};
+
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
+};
+
+struct raid_template {
+	struct transport_container raid_attrs;
+};
+
+struct raid_function_template {
+	void *cookie;
+	int (*is_raid)(struct device *);
+	void (*get_resync)(struct device *);
+	void (*get_state)(struct device *);
+};
+
+enum raid_state {
+	RAID_STATE_UNKNOWN = 0,
+	RAID_STATE_ACTIVE = 1,
+	RAID_STATE_DEGRADED = 2,
+	RAID_STATE_RESYNCING = 3,
+	RAID_STATE_OFFLINE = 4,
+};
+
+enum raid_level {
+	RAID_LEVEL_UNKNOWN = 0,
+	RAID_LEVEL_LINEAR = 1,
+	RAID_LEVEL_0 = 2,
+	RAID_LEVEL_1 = 3,
+	RAID_LEVEL_10 = 4,
+	RAID_LEVEL_1E = 5,
+	RAID_LEVEL_3 = 6,
+	RAID_LEVEL_4 = 7,
+	RAID_LEVEL_5 = 8,
+	RAID_LEVEL_50 = 9,
+	RAID_LEVEL_6 = 10,
+	RAID_LEVEL_JBOD = 11,
+};
+
+struct raid_data {
+	struct list_head component_list;
+	int component_count;
+	enum raid_level level;
+	enum raid_state state;
+	int resync;
+};
+
+struct raid_internal {
+	struct raid_template r;
+	struct raid_function_template *f;
+	struct device_attribute private_attrs[3];
+	struct device_attribute *attrs[4];
+};
+
+struct raid_component {
+	struct list_head node;
+	struct device dev;
+	int num;
+};
+
+enum task_disposition {
+	TASK_IS_DONE = 0,
+	TASK_IS_ABORTED = 1,
+	TASK_IS_AT_LU = 2,
+	TASK_IS_NOT_AT_LU = 3,
+	TASK_ABORT_FAILED = 4,
+};
+
+struct mbox_out {
+	u8 cmd;
+	u8 cmdid;
+	u16 numsectors;
+	u32 lba;
+	u32 xferaddr;
+	u8 logdrv;
+	u8 numsgelements;
+	u8 resvd;
+} __attribute__((packed));
+
+struct mbox_in {
+	volatile u8 busy;
+	volatile u8 numstatus;
+	volatile u8 status;
+	volatile u8 completed[46];
+	volatile u8 poll;
+	volatile u8 ack;
+};
+
+typedef struct {
+	struct mbox_out m_out;
+	struct mbox_in m_in;
+} __attribute__((packed)) mbox_t___2;
+
+typedef struct {
+	u32 xfer_segment_lo;
+	u32 xfer_segment_hi;
+	mbox_t___2 mbox;
+} __attribute__((packed)) mbox64_t___2;
+
+typedef struct {
+	u8 timeout: 3;
+	u8 ars: 1;
+	u8 reserved: 3;
+	u8 islogical: 1;
+	u8 logdrv;
+	u8 channel;
+	u8 target;
+	u8 queuetag;
+	u8 queueaction;
+	u8 cdb[10];
+	u8 cdblen;
+	u8 reqsenselen;
+	u8 reqsensearea[32];
+	u8 numsgelements;
+	u8 scsistatus;
+	u32 dataxferaddr;
+	u32 dataxferlen;
+} mega_passthru;
+
+typedef struct {
+	u8 timeout: 3;
+	u8 ars: 1;
+	u8 rsvd1: 1;
+	u8 cd_rom: 1;
+	u8 rsvd2: 1;
+	u8 islogical: 1;
+	u8 logdrv;
+	u8 channel;
+	u8 target;
+	u8 queuetag;
+	u8 queueaction;
+	u8 cdblen;
+	u8 rsvd3;
+	u8 cdb[16];
+	u8 numsgelements;
+	u8 status;
+	u8 reqsenselen;
+	u8 reqsensearea[32];
+	u8 rsvd4;
+	u32 dataxferaddr;
+	u32 dataxferlen;
+} mega_ext_passthru;
+
+typedef struct {
+	u64 address;
+	u32 length;
+} __attribute__((packed)) mega_sgl64;
+
+typedef struct {
+	u32 address;
+	u32 length;
+} mega_sglist;
+
+typedef struct {
+	int idx;
+	u32 state;
+	struct list_head list;
+	u8 raw_mbox[66];
+	u32 dma_type;
+	u32 dma_direction;
+	struct scsi_cmnd *cmd;
+	dma_addr_t dma_h_bulkdata;
+	dma_addr_t dma_h_sgdata;
+	mega_sglist *sgl;
+	mega_sgl64 *sgl64;
+	dma_addr_t sgl_dma_addr;
+	mega_passthru *pthru;
+	dma_addr_t pthru_dma_addr;
+	mega_ext_passthru *epthru;
+	dma_addr_t epthru_dma_addr;
+} scb_t;
+
+typedef struct {
+	u32 data_size;
+	u32 config_signature;
+	u8 fw_version[16];
+	u8 bios_version[16];
+	u8 product_name[80];
+	u8 max_commands;
+	u8 nchannels;
+	u8 fc_loop_present;
+	u8 mem_type;
+	u32 signature;
+	u16 dram_size;
+	u16 subsysid;
+	u16 subsysvid;
+	u8 notify_counters;
+	u8 pad1k[889];
+} mega_product_info;
+
+struct notify {
+	u32 global_counter;
+	u8 param_counter;
+	u8 param_id;
+	u16 param_val;
+	u8 write_config_counter;
+	u8 write_config_rsvd[3];
+	u8 ldrv_op_counter;
+	u8 ldrv_opid;
+	u8 ldrv_opcmd;
+	u8 ldrv_opstatus;
+	u8 ldrv_state_counter;
+	u8 ldrv_state_id;
+	u8 ldrv_state_new;
+	u8 ldrv_state_old;
+	u8 pdrv_state_counter;
+	u8 pdrv_state_id;
+	u8 pdrv_state_new;
+	u8 pdrv_state_old;
+	u8 pdrv_fmt_counter;
+	u8 pdrv_fmt_id;
+	u8 pdrv_fmt_val;
+	u8 pdrv_fmt_rsvd;
+	u8 targ_xfer_counter;
+	u8 targ_xfer_id;
+	u8 targ_xfer_val;
+	u8 targ_xfer_rsvd;
+	u8 fcloop_id_chg_counter;
+	u8 fcloopid_pdrvid;
+	u8 fcloop_id0;
+	u8 fcloop_id1;
+	u8 fcloop_state_counter;
+	u8 fcloop_state0;
+	u8 fcloop_state1;
+	u8 fcloop_state_rsvd;
+};
+
+typedef struct {
+	u32 data_size;
+	struct notify notify;
+	u8 notify_rsvd[88];
+	u8 rebuild_rate;
+	u8 cache_flush_interval;
+	u8 sense_alert;
+	u8 drive_insert_count;
+	u8 battery_status;
+	u8 num_ldrv;
+	u8 recon_state[5];
+	u16 ldrv_op_status[5];
+	u32 ldrv_size[40];
+	u8 ldrv_prop[40];
+	u8 ldrv_state[40];
+	u8 pdrv_state[256];
+	u16 pdrv_format[16];
+	u8 targ_xfer[80];
+	u8 pad1k[263];
+} __attribute__((packed)) mega_inquiry3;
+
+typedef struct {
+	u8 max_commands;
+	u8 rebuild_rate;
+	u8 max_targ_per_chan;
+	u8 nchannels;
+	u8 fw_version[4];
+	u16 age_of_flash;
+	u8 chip_set_value;
+	u8 dram_size;
+	u8 cache_flush_interval;
+	u8 bios_version[4];
+	u8 board_type;
+	u8 sense_alert;
+	u8 write_config_count;
+	u8 drive_inserted_count;
+	u8 inserted_drive;
+	u8 battery_status;
+	u8 dec_fault_bus_info;
+} mega_adp_info;
+
+typedef struct {
+	u8 num_ldrv;
+	u8 rsvd[3];
+	u32 ldrv_size[8];
+	u8 ldrv_prop[8];
+	u8 ldrv_state[8];
+} mega_ldrv_info;
+
+typedef struct {
+	u8 pdrv_state[75];
+	u8 rsvd;
+} mega_pdrv_info;
+
+typedef struct {
+	mega_adp_info adapter_info;
+	mega_ldrv_info logdrv_info;
+	mega_pdrv_info pdrv_info;
+} mraid_inquiry;
+
+typedef struct {
+	mraid_inquiry raid_inq;
+	u16 phys_drv_format[5];
+	u8 stack_attn;
+	u8 modem_status;
+	u8 rsvd[2];
+} __attribute__((packed)) mraid_ext_inquiry;
+
+typedef struct {
+	u8 channel;
+	u8 target;
+} adp_device;
+
+typedef struct {
+	u32 start_blk;
+	u32 num_blks;
+	adp_device device[32];
+} adp_span_40ld;
+
+typedef struct {
+	u32 start_blk;
+	u32 num_blks;
+	adp_device device[8];
+} adp_span_8ld;
+
+typedef struct {
+	u8 span_depth;
+	u8 level;
+	u8 read_ahead;
+	u8 stripe_sz;
+	u8 status;
+	u8 write_mode;
+	u8 direct_io;
+	u8 row_size;
+} logdrv_param;
+
+typedef struct {
+	logdrv_param lparam;
+	adp_span_40ld span[8];
+} logdrv_40ld;
+
+typedef struct {
+	logdrv_param lparam;
+	adp_span_8ld span[8];
+} logdrv_8ld;
+
+typedef struct {
+	u8 type;
+	u8 cur_status;
+	u8 tag_depth;
+	u8 sync_neg;
+	u32 size;
+} phys_drv;
+
+typedef struct {
+	u8 nlog_drives;
+	u8 resvd[3];
+	logdrv_40ld ldrv[40];
+	phys_drv pdrv[75];
+} disk_array_40ld;
+
+typedef struct {
+	u8 nlog_drives;
+	u8 resvd[3];
+	logdrv_8ld ldrv[8];
+	phys_drv pdrv[75];
+} disk_array_8ld;
+
+struct uioctl_t {
+	u32 inlen;
+	u32 outlen;
+	union {
+		u8 fca[16];
+		struct {
+			u8 opcode;
+			u8 subopcode;
+			u16 adapno;
+			u8 *buffer;
+			u32 length;
+		} __attribute__((packed)) fcs;
+	} ui;
+	u8 mbox[18];
+	mega_passthru pthru;
+	char *data;
+} __attribute__((packed));
+
+struct mcontroller___2 {
+	u64 base;
+	u8 irq;
+	u8 numldrv;
+	u8 pcibus;
+	u16 pcidev;
+	u8 pcifun;
+	u16 pciid;
+	u16 pcivendor;
+	u8 pcislot;
+	u32 uid;
+};
+
+typedef struct {
+	u8 cmd;
+	u8 cmdid;
+	u8 opcode;
+	u8 subopcode;
+	u32 lba;
+	u32 xferaddr;
+	u8 logdrv;
+	u8 rsvd[3];
+	u8 numstatus;
+	u8 status;
+} __attribute__((packed)) megacmd_t;
+
+typedef struct {
+	char signature[8];
+	u32 opcode;
+	u32 adapno;
+	union {
+		u8 __raw_mbox[18];
+		void *__uaddr;
+	} __ua;
+	u32 xferlen;
+	u32 flags;
+} nitioctl_t;
+
+struct private_bios_data {
+	u8 geometry: 4;
+	u8 unused: 4;
+	u8 boot_drv;
+	u8 rsvd[12];
+	u16 cksum;
+};
+
+struct megaraid_cmd_priv {
+	struct list_head entry;
+};
+
+struct scsi_cmd_and_priv {
+	struct scsi_cmnd cmd;
+	struct megaraid_cmd_priv priv;
+};
+
+typedef struct {
+	int this_id;
+	u32 flag;
+	long unsigned int base;
+	void *mmio_base;
+	mbox64_t___2 *una_mbox64;
+	dma_addr_t una_mbox64_dma;
+	volatile mbox64_t___2 *mbox64;
+	volatile mbox_t___2 *mbox;
+	dma_addr_t mbox_dma;
+	struct pci_dev *dev;
+	struct list_head free_list;
+	struct list_head pending_list;
+	struct list_head completed_list;
+	struct Scsi_Host *host;
+	u8 *mega_buffer;
+	dma_addr_t buf_dma_handle;
+	mega_product_info product_info;
+	u8 max_cmds;
+	scb_t *scb_list;
+	atomic_t pend_cmds;
+	u8 numldrv;
+	u8 fw_version[7];
+	u8 bios_version[7];
+	struct proc_dir_entry *controller_proc_dir_entry;
+	int has_64bit_addr;
+	int support_ext_cdb;
+	int boot_ldrv_enabled;
+	int boot_ldrv;
+	int boot_pdrv_enabled;
+	int boot_pdrv_ch;
+	int boot_pdrv_tgt;
+	int support_random_del;
+	int read_ldidmap;
+	atomic_t quiescent;
+	spinlock_t lock;
+	u8 logdrv_chan[9];
+	int mega_ch_class;
+	u8 sglen;
+	scb_t int_scb;
+	struct mutex int_mtx;
+	int int_status;
+	struct completion int_waitq;
+	int has_cluster;
+} adapter_t;
+
+struct mega_hbas {
+	int is_bios_enabled;
+	adapter_t *hostdata_addr;
+};
+
+struct MR_FW_RAID_MAP_ALL {
+	struct MR_FW_RAID_MAP raidMap;
+	struct MR_LD_SPAN_MAP ldSpanMap[64];
+};
+
+struct MR_FW_RAID_MAP_EXT {
+	u32 reserved;
+	union {
+		struct {
+			u32 maxLd;
+			u32 maxSpanDepth;
+			u32 maxRowSize;
+			u32 maxPdCount;
+			u32 maxArrays;
+		} validationInfo;
+		u32 version[5];
+	};
+	u8 fpPdIoTimeoutSec;
+	u8 reserved2[7];
+	__le16 ldCount;
+	__le16 arCount;
+	__le16 spanCount;
+	__le16 reserve3;
+	struct MR_DEV_HANDLE_INFO devHndlInfo[256];
+	u8 ldTgtIdToLd[256];
+	struct MR_ARRAY_INFO arMapInfo[256];
+	struct MR_LD_SPAN_MAP ldSpanMap[256];
+};
+
+struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED {
+	U64___2 TimeStamp;
+	U32___2 Reserved1;
+	U16___2 LogSequence;
+	U16___2 LogEntryQualifier;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U8___2 LogData[28];
+};
+
+typedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED Mpi2EventDataLogEntryAdded_t;
+
+struct _MPI2_EVENT_DATA_TEMPERATURE {
+	U16___2 Status;
+	U8___2 SensorNum;
+	U8___2 Reserved1;
+	U16___2 CurrentTemperature;
+	U16___2 Reserved2;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+};
+
+typedef struct _MPI2_EVENT_DATA_TEMPERATURE Mpi2EventDataTemperature_t;
+
+struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT {
+	U32___2 ActiveCablePowerRequirement;
+	U8___2 ReasonCode;
+	U8___2 ReceptacleID;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT Mpi26EventDataActiveCableExcept_t;
+
+struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE {
+	U16___2 TaskTag;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U8___2 ASC;
+	U8___2 ASCQ;
+	U16___2 DevHandle;
+	U32___2 Reserved2;
+	U64___2 SASAddress;
+	U8___2 LUN[8];
+} __attribute__((packed));
+
+typedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE Mpi2EventDataSasDeviceStatusChange_t;
+
+struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS {
+	U16___2 VolDevHandle;
+	U16___2 Reserved1;
+	U8___2 RAIDOperation;
+	U8___2 PercentComplete;
+	U16___2 Reserved2;
+	U32___2 ElapsedSeconds;
+};
+
+typedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS Mpi2EventDataIrOperationStatus_t;
+
+struct _MPI2_EVENT_DATA_IR_VOLUME {
+	U16___2 VolDevHandle;
+	U8___2 ReasonCode;
+	U8___2 Reserved1;
+	U32___2 NewValue;
+	U32___2 PreviousValue;
+};
+
+typedef struct _MPI2_EVENT_DATA_IR_VOLUME Mpi2EventDataIrVolume_t;
+
+struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK {
+	U16___2 Reserved1;
+	U8___2 ReasonCode;
+	U8___2 PhysDiskNum;
+	U16___2 PhysDiskDevHandle;
+	U16___2 Reserved2;
+	U16___2 Slot;
+	U16___2 EnclosureHandle;
+	U32___2 NewValue;
+	U32___2 PreviousValue;
+};
+
+typedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK Mpi2EventDataIrPhysicalDisk_t;
+
+struct _MPI2_EVENT_IR_CONFIG_ELEMENT {
+	U16___2 ElementFlags;
+	U16___2 VolDevHandle;
+	U8___2 ReasonCode;
+	U8___2 PhysDiskNum;
+	U16___2 PhysDiskDevHandle;
+};
+
+typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT MPI2_EVENT_IR_CONFIG_ELEMENT;
+
+typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT Mpi2EventIrConfigElement_t;
+
+struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST {
+	U8___2 NumElements;
+	U8___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 ConfigNum;
+	U32___2 Flags;
+	MPI2_EVENT_IR_CONFIG_ELEMENT ConfigElement[1];
+};
+
+typedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST Mpi2EventDataIrConfigChangeList_t;
+
+struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE {
+	U8___2 PhyNum;
+	U8___2 Port;
+	U8___2 PortWidth;
+	U8___2 Primitive;
+};
+
+typedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE Mpi2EventDataSasBroadcastPrimitive_t;
+
+struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY {
+	U16___2 AttachedDevHandle;
+	U8___2 LinkRate;
+	U8___2 PhyStatus;
+};
+
+typedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY MPI2_EVENT_SAS_TOPO_PHY_ENTRY;
+
+struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST {
+	U16___2 EnclosureHandle;
+	U16___2 ExpanderDevHandle;
+	U8___2 NumPhys;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U8___2 NumEntries;
+	U8___2 StartPhyNum;
+	U8___2 ExpStatus;
+	U8___2 PhysicalPort;
+	MPI2_EVENT_SAS_TOPO_PHY_ENTRY PHY[1];
+};
+
+typedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST Mpi2EventDataSasTopologyChangeList_t;
+
+struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE {
+	U16___2 EnclosureHandle;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U64___2 EnclosureLogicalID;
+	U16___2 NumSlots;
+	U16___2 StartSlot;
+	U32___2 PhyBits;
+} __attribute__((packed));
+
+typedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE Mpi2EventDataSasEnclDevStatusChange_t;
+
+struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR {
+	U16___2 DevHandle;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U32___2 Reserved1[2];
+	U64___2 SASAddress;
+	U32___2 Reserved2[2];
+} __attribute__((packed));
+
+typedef struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR Mpi25EventDataSasDeviceDiscoveryError_t;
+
+struct _MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE {
+	U16___2 TaskTag;
+	U8___2 ReasonCode;
+	U8___2 PhysicalPort;
+	U8___2 ASC;
+	U8___2 ASCQ;
+	U16___2 DevHandle;
+	U32___2 Reserved2;
+	U64___2 WWID;
+	U8___2 LUN[8];
+} __attribute__((packed));
+
+typedef struct _MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE Mpi26EventDataPCIeDeviceStatusChange_t;
+
+struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY {
+	U16___2 AttachedDevHandle;
+	U8___2 PortStatus;
+	U8___2 Reserved1;
+	U8___2 CurrentPortInfo;
+	U8___2 Reserved2;
+	U8___2 PreviousPortInfo;
+	U8___2 Reserved3;
+};
+
+typedef struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY MPI26_EVENT_PCIE_TOPO_PORT_ENTRY;
+
+struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST {
+	U16___2 EnclosureHandle;
+	U16___2 SwitchDevHandle;
+	U8___2 NumPorts;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U8___2 NumEntries;
+	U8___2 StartPortNum;
+	U8___2 SwitchStatus;
+	U8___2 PhysicalPort;
+	MPI26_EVENT_PCIE_TOPO_PORT_ENTRY PortEntry[1];
+};
+
+typedef struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST Mpi26EventDataPCIeTopologyChangeList_t;
+
+typedef struct _MPI2_BOOT_DEVICE_SAS_WWID Mpi2BootDeviceSasWwid_t;
+
+typedef struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT Mpi2BootDeviceEnclosureSlot_t;
+
+typedef struct _MPI2_BOOT_DEVICE_DEVICE_NAME Mpi2BootDeviceDeviceName_t;
+
+typedef union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE Mpi2BiosPage2BootDevice_t;
+
+struct _MPI2_RAID_ACTION_RATE_DATA {
+	U8___2 RateToChange;
+	U8___2 RateOrMode;
+	U16___2 DataScrubDuration;
+};
+
+typedef struct _MPI2_RAID_ACTION_RATE_DATA MPI2_RAID_ACTION_RATE_DATA;
+
+struct _MPI2_RAID_ACTION_START_RAID_FUNCTION {
+	U8___2 RAIDFunction;
+	U8___2 Flags;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_RAID_ACTION_START_RAID_FUNCTION MPI2_RAID_ACTION_START_RAID_FUNCTION;
+
+struct _MPI2_RAID_ACTION_STOP_RAID_FUNCTION {
+	U8___2 RAIDFunction;
+	U8___2 Flags;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_RAID_ACTION_STOP_RAID_FUNCTION MPI2_RAID_ACTION_STOP_RAID_FUNCTION;
+
+struct _MPI2_RAID_ACTION_HOT_SPARE {
+	U8___2 HotSparePool;
+	U8___2 Reserved1;
+	U16___2 DevHandle;
+};
+
+typedef struct _MPI2_RAID_ACTION_HOT_SPARE MPI2_RAID_ACTION_HOT_SPARE;
+
+struct _MPI2_RAID_ACTION_FW_UPDATE_MODE {
+	U8___2 Flags;
+	U8___2 DeviceFirmwareUpdateModeTimeout;
+	U16___2 Reserved1;
+};
+
+typedef struct _MPI2_RAID_ACTION_FW_UPDATE_MODE MPI2_RAID_ACTION_FW_UPDATE_MODE;
+
+union _MPI2_RAID_ACTION_DATA {
+	U32___2 Word;
+	MPI2_RAID_ACTION_RATE_DATA Rates;
+	MPI2_RAID_ACTION_START_RAID_FUNCTION StartRaidFunction;
+	MPI2_RAID_ACTION_STOP_RAID_FUNCTION StopRaidFunction;
+	MPI2_RAID_ACTION_HOT_SPARE HotSpare;
+	MPI2_RAID_ACTION_FW_UPDATE_MODE FwUpdateMode;
+};
+
+typedef union _MPI2_RAID_ACTION_DATA MPI2_RAID_ACTION_DATA;
+
+struct _MPI2_RAID_ACTION_REQUEST {
+	U8___2 Action;
+	U8___2 Reserved1;
+	U8___2 ChainOffset;
+	U8___2 Function;
+	U16___2 VolDevHandle;
+	U8___2 PhysDiskNum;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U32___2 Reserved3;
+	MPI2_RAID_ACTION_DATA ActionDataWord;
+	MPI2_SGE_SIMPLE_UNION ActionDataSGE;
+} __attribute__((packed));
+
+typedef struct _MPI2_RAID_ACTION_REQUEST Mpi2RaidActionRequest_t;
+
+struct _MPI2_RAID_VOL_INDICATOR {
+	U64___2 TotalBlocks;
+	U64___2 BlocksRemaining;
+	U32___2 Flags;
+	U32___2 ElapsedSeconds;
+};
+
+typedef struct _MPI2_RAID_VOL_INDICATOR MPI2_RAID_VOL_INDICATOR;
+
+struct _MPI2_RAID_COMPATIBILITY_RESULT_STRUCT {
+	U8___2 State;
+	U8___2 Reserved1;
+	U16___2 Reserved2;
+	U32___2 GenericAttributes;
+	U32___2 OEMSpecificAttributes;
+	U32___2 Reserved3;
+	U32___2 Reserved4;
+};
+
+typedef struct _MPI2_RAID_COMPATIBILITY_RESULT_STRUCT MPI2_RAID_COMPATIBILITY_RESULT_STRUCT;
+
+union _MPI2_RAID_ACTION_REPLY_DATA {
+	U32___2 Word[6];
+	MPI2_RAID_VOL_INDICATOR RaidVolumeIndicator;
+	U16___2 VolDevHandle;
+	U8___2 VolumeState;
+	U8___2 PhysDiskNum;
+	MPI2_RAID_COMPATIBILITY_RESULT_STRUCT RaidCompatibilityResult;
+};
+
+typedef union _MPI2_RAID_ACTION_REPLY_DATA MPI2_RAID_ACTION_REPLY_DATA;
+
+struct _MPI2_RAID_ACTION_REPLY {
+	U8___2 Action;
+	U8___2 Reserved1;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 VolDevHandle;
+	U8___2 PhysDiskNum;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved2;
+	U16___2 Reserved3;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	MPI2_RAID_ACTION_REPLY_DATA ActionData;
+} __attribute__((packed));
+
+typedef struct _MPI2_RAID_ACTION_REPLY Mpi2RaidActionReply_t;
+
+enum scsi_host_guard_type {
+	SHOST_DIX_GUARD_CRC = 1,
+	SHOST_DIX_GUARD_IP = 2,
+};
+
+struct _sas_port {
+	struct list_head port_list;
+	u8 num_phys;
+	struct sas_identify remote_identify;
+	struct sas_rphy *rphy;
+	struct sas_port *port;
+	struct hba_port *hba_port;
+	struct list_head phy_list;
+};
+
+struct virtual_phy {
+	struct list_head list;
+	u64 sas_address;
+	u32 phy_mask;
+	u8 flags;
+};
+
+struct fw_event_work {
+	struct list_head list;
+	struct work_struct work;
+	struct MPT3SAS_ADAPTER *ioc;
+	u16 device_handle;
+	u8 VF_ID;
+	u8 VP_ID;
+	u8 ignore;
+	u16 event;
+	struct kref refcount;
+	char event_data[0];
+};
+
+struct sense_info {
+	u8 skey;
+	u8 asc;
+	u8 ascq;
+};
+
+enum hba_port_matched_codes {
+	NOT_MATCHED = 0,
+	MATCHED_WITH_ADDR_AND_PHYMASK = 1,
+	MATCHED_WITH_ADDR_SUBPHYMASK_AND_PORT = 2,
+	MATCHED_WITH_ADDR_AND_SUBPHYMASK = 3,
+	MATCHED_WITH_ADDR = 4,
+};
+
+struct mpt3sas_debugfs_buffer {
+	void *buf;
+	u32 len;
+};
+
+enum sas_gpio_reg_type {
+	SAS_GPIO_REG_CFG = 0,
+	SAS_GPIO_REG_RX = 1,
+	SAS_GPIO_REG_RX_GP = 2,
+	SAS_GPIO_REG_TX = 3,
+	SAS_GPIO_REG_TX_GP = 4,
+};
+
+enum sas_cmd_port_registers {
+	CMD_CMRST_OOB_DET = 256,
+	CMD_CMWK_OOB_DET = 260,
+	CMD_CMSAS_OOB_DET = 264,
+	CMD_BRST_OOB_DET = 268,
+	CMD_OOB_SPACE = 272,
+	CMD_OOB_BURST = 276,
+	CMD_PHY_TIMER = 280,
+	CMD_PHY_CONFIG0 = 284,
+	CMD_PHY_CONFIG1 = 288,
+	CMD_SAS_CTL0 = 292,
+	CMD_SAS_CTL1 = 296,
+	CMD_SAS_CTL2 = 300,
+	CMD_SAS_CTL3 = 304,
+	CMD_ID_TEST = 308,
+	CMD_PL_TIMER = 312,
+	CMD_WD_TIMER = 316,
+	CMD_PORT_SEL_COUNT = 320,
+	CMD_APP_MEM_CTL = 324,
+	CMD_XOR_MEM_CTL = 328,
+	CMD_DMA_MEM_CTL = 332,
+	CMD_PORT_MEM_CTL0 = 336,
+	CMD_PORT_MEM_CTL1 = 340,
+	CMD_SATA_PORT_MEM_CTL0 = 344,
+	CMD_SATA_PORT_MEM_CTL1 = 348,
+	CMD_XOR_MEM_BIST_CTL = 352,
+	CMD_XOR_MEM_BIST_STAT = 356,
+	CMD_DMA_MEM_BIST_CTL = 360,
+	CMD_DMA_MEM_BIST_STAT = 364,
+	CMD_PORT_MEM_BIST_CTL = 368,
+	CMD_PORT_MEM_BIST_STAT0 = 372,
+	CMD_PORT_MEM_BIST_STAT1 = 376,
+	CMD_STP_MEM_BIST_CTL = 380,
+	CMD_STP_MEM_BIST_STAT0 = 384,
+	CMD_STP_MEM_BIST_STAT1 = 388,
+	CMD_RESET_COUNT = 392,
+	CMD_MONTR_DATA_SEL = 396,
+	CMD_PLL_PHY_CONFIG = 400,
+	CMD_PHY_CTL = 404,
+	CMD_PHY_TEST_COUNT0 = 408,
+	CMD_PHY_TEST_COUNT1 = 412,
+	CMD_PHY_TEST_COUNT2 = 416,
+	CMD_APP_ERR_CONFIG = 420,
+	CMD_PND_FIFO_CTL0 = 424,
+	CMD_HOST_CTL = 428,
+	CMD_HOST_WR_DATA = 432,
+	CMD_HOST_RD_DATA = 436,
+	CMD_PHY_MODE_21 = 440,
+	CMD_SL_MODE0 = 444,
+	CMD_SL_MODE1 = 448,
+	CMD_PND_FIFO_CTL1 = 452,
+	CMD_PORT_LAYER_TIMER1 = 480,
+	CMD_LINK_TIMER = 484,
+};
+
+enum pci_cfg_register_bits {
+	PCTL_PWR_OFF = 251658240,
+	PCTL_COM_ON = 15728640,
+	PCTL_LINK_RST = 983040,
+	PCTL_LINK_OFFS = 16,
+	PCTL_PHY_DSBL = 61440,
+	PCTL_PHY_DSBL_OFFS = 12,
+	PRD_REQ_SIZE = 16384,
+	PRD_REQ_MASK = 28672,
+	PLS_NEG_LINK_WD = 1008,
+	PLS_NEG_LINK_WD_OFFS = 4,
+	PLS_LINK_SPD = 15,
+	PLS_LINK_SPD_OFFS = 0,
+};
+
+enum VANIR_REVISION_ID {
+	VANIR_A0_REV = 160,
+	VANIR_B0_REV = 1,
+	VANIR_C0_REV = 2,
+	VANIR_C1_REV = 3,
+	VANIR_C2_REV = 194,
+};
+
+enum host_registers {
+	MVS_HST_CHIP_CONFIG = 65796,
+};
+
+enum hw_registers {
+	MVS_GBL_CTL = 4,
+	MVS_GBL_INT_STAT = 0,
+	MVS_GBL_PI = 12,
+	MVS_PHY_CTL = 64,
+	MVS_PORTS_IMP = 156,
+	MVS_GBL_PORT_TYPE = 160,
+	MVS_CTL = 256,
+	MVS_PCS = 260,
+	MVS_CMD_LIST_LO = 264,
+	MVS_CMD_LIST_HI = 268,
+	MVS_RX_FIS_LO = 272,
+	MVS_RX_FIS_HI = 276,
+	MVS_STP_REG_SET_0 = 280,
+	MVS_STP_REG_SET_1 = 284,
+	MVS_TX_CFG = 288,
+	MVS_TX_LO = 292,
+	MVS_TX_HI = 296,
+	MVS_TX_PROD_IDX = 300,
+	MVS_TX_CONS_IDX = 304,
+	MVS_RX_CFG = 308,
+	MVS_RX_LO = 312,
+	MVS_RX_HI = 316,
+	MVS_RX_CONS_IDX = 320,
+	MVS_INT_COAL = 328,
+	MVS_INT_COAL_TMOUT = 332,
+	MVS_INT_STAT = 336,
+	MVS_INT_MASK = 340,
+	MVS_INT_STAT_SRS_0 = 344,
+	MVS_INT_MASK_SRS_0 = 348,
+	MVS_INT_STAT_SRS_1 = 352,
+	MVS_INT_MASK_SRS_1 = 356,
+	MVS_NON_NCQ_ERR_0 = 360,
+	MVS_NON_NCQ_ERR_1 = 364,
+	MVS_CMD_ADDR = 368,
+	MVS_CMD_DATA = 372,
+	MVS_MEM_PARITY_ERR = 376,
+	MVS_P0_INT_STAT = 384,
+	MVS_P0_INT_MASK = 388,
+	MVS_P4_INT_STAT = 416,
+	MVS_P4_INT_MASK = 420,
+	MVS_P0_SER_CTLSTAT = 464,
+	MVS_P4_SER_CTLSTAT = 480,
+	MVS_P0_CFG_ADDR = 512,
+	MVS_P0_CFG_DATA = 516,
+	MVS_P4_CFG_ADDR = 544,
+	MVS_P4_CFG_DATA = 548,
+	MVS_P0_VSR_ADDR = 592,
+	MVS_P0_VSR_DATA = 596,
+	MVS_P4_VSR_ADDR = 592,
+	MVS_P4_VSR_DATA = 596,
+	MVS_PA_VSR_ADDR = 656,
+	MVS_PA_VSR_PORT = 660,
+	MVS_COMMAND_ACTIVE = 768,
+};
+
+enum pci_cfg_registers {
+	PCR_PHY_CTL = 64,
+	PCR_PHY_CTL2 = 144,
+	PCR_DEV_CTRL = 120,
+	PCR_LINK_STAT = 130,
+};
+
+enum sas_sata_vsp_regs {
+	VSR_PHY_STAT = 0,
+	VSR_PHY_MODE1 = 4,
+	VSR_PHY_MODE2 = 8,
+	VSR_PHY_MODE3 = 12,
+	VSR_PHY_MODE4 = 16,
+	VSR_PHY_MODE5 = 20,
+	VSR_PHY_MODE6 = 24,
+	VSR_PHY_MODE7 = 28,
+	VSR_PHY_MODE8 = 32,
+	VSR_PHY_MODE9 = 36,
+	VSR_PHY_MODE10 = 40,
+	VSR_PHY_MODE11 = 44,
+	VSR_PHY_ACT_LED = 48,
+	VSR_PHY_FFE_CONTROL = 268,
+	VSR_PHY_DFE_UPDATE_CRTL = 272,
+	VSR_REF_CLOCK_CRTL = 416,
+};
+
+enum chip_register_bits {
+	PHY_MIN_SPP_PHYS_LINK_RATE_MASK = 1792,
+	PHY_MAX_SPP_PHYS_LINK_RATE_MASK = 28672,
+	PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET = 16,
+	PHY_NEG_SPP_PHYS_LINK_RATE_MASK = 196608,
+};
+
+enum pci_interrupt_cause {
+	MVS_IRQ_COM_IN_I2O_IOP0 = 1,
+	MVS_IRQ_COM_IN_I2O_IOP1 = 2,
+	MVS_IRQ_COM_IN_I2O_IOP2 = 4,
+	MVS_IRQ_COM_IN_I2O_IOP3 = 8,
+	MVS_IRQ_COM_OUT_I2O_HOS0 = 16,
+	MVS_IRQ_COM_OUT_I2O_HOS1 = 32,
+	MVS_IRQ_COM_OUT_I2O_HOS2 = 64,
+	MVS_IRQ_COM_OUT_I2O_HOS3 = 128,
+	MVS_IRQ_PCIF_TO_CPU_DRBL0 = 256,
+	MVS_IRQ_PCIF_TO_CPU_DRBL1 = 512,
+	MVS_IRQ_PCIF_TO_CPU_DRBL2 = 1024,
+	MVS_IRQ_PCIF_TO_CPU_DRBL3 = 2048,
+	MVS_IRQ_PCIF_DRBL0 = 4096,
+	MVS_IRQ_PCIF_DRBL1 = 8192,
+	MVS_IRQ_PCIF_DRBL2 = 16384,
+	MVS_IRQ_PCIF_DRBL3 = 32768,
+	MVS_IRQ_XOR_A = 65536,
+	MVS_IRQ_XOR_B = 131072,
+	MVS_IRQ_SAS_A = 262144,
+	MVS_IRQ_SAS_B = 524288,
+	MVS_IRQ_CPU_CNTRL = 1048576,
+	MVS_IRQ_GPIO = 2097152,
+	MVS_IRQ_UART = 4194304,
+	MVS_IRQ_SPI = 8388608,
+	MVS_IRQ_I2C = 16777216,
+	MVS_IRQ_SGPIO = 33554432,
+	MVS_IRQ_COM_ERR = 536870912,
+	MVS_IRQ_I2O_ERR = 1073741824,
+	MVS_IRQ_PCIE_ERR = -2147483648,
+};
+
+union reg_phy_cfg {
+	u32 v;
+	struct {
+		u32 phy_reset: 1;
+		u32 sas_support: 1;
+		u32 sata_support: 1;
+		u32 sata_host_mode: 1;
+		u32 speed_support: 3;
+		u32 snw_3_support: 1;
+		u32 tx_lnk_parity: 1;
+		u32 tx_spt_phs_lnk_rate: 6;
+		u32 tx_lgcl_lnk_rate: 4;
+		u32 tx_ssc_type: 1;
+		u32 sata_spin_up_spt: 1;
+		u32 sata_spin_up_en: 1;
+		u32 bypass_oob: 1;
+		u32 disable_phy: 1;
+		u32 rsvd: 8;
+	} u;
+};
+
+struct mvs_prd_imt {
+	__le32 len: 22;
+	u8 _r_a: 2;
+	u8 misc_ctl: 4;
+	u8 inter_sel: 4;
+};
+
+struct mvs_prd {
+	__le64 addr;
+	__le32 im_len;
+} __attribute__((packed));
+
+enum sgpio_registers {
+	MVS_SGPIO_HOST_OFFSET = 256,
+	MVS_SGPIO_CFG0 = 49664,
+	MVS_SGPIO_CFG0_ENABLE = 1,
+	MVS_SGPIO_CFG0_BLINKB = 2,
+	MVS_SGPIO_CFG0_BLINKA = 4,
+	MVS_SGPIO_CFG0_INVSCLK = 8,
+	MVS_SGPIO_CFG0_INVSLOAD = 16,
+	MVS_SGPIO_CFG0_INVSDOUT = 32,
+	MVS_SGPIO_CFG0_SLOAD_FALLEDGE = 64,
+	MVS_SGPIO_CFG0_SDOUT_FALLEDGE = 128,
+	MVS_SGPIO_CFG0_SDIN_RISEEDGE = 256,
+	MVS_SGPIO_CFG0_MAN_BITLEN_SHIFT = 18,
+	MVS_SGPIO_CFG0_AUT_BITLEN_SHIFT = 24,
+	MVS_SGPIO_CFG1 = 49668,
+	MVS_SGPIO_CFG1_LOWA_SHIFT = 0,
+	MVS_SGPIO_CFG1_HIA_SHIFT = 4,
+	MVS_SGPIO_CFG1_LOWB_SHIFT = 8,
+	MVS_SGPIO_CFG1_HIB_SHIFT = 12,
+	MVS_SGPIO_CFG1_MAXACTON_SHIFT = 16,
+	MVS_SGPIO_CFG1_FORCEACTOFF_SHIFT = 20,
+	MVS_SGPIO_CFG1_STRCHACTON_SHIFT = 24,
+	MVS_SGPIO_CFG1_STRCHACTOFF_SHIFT = 28,
+	MVS_SGPIO_CFG2 = 49672,
+	MVS_SGPIO_CFG2_CLK_SHIFT = 0,
+	MVS_SGPIO_CFG2_BLINK_SHIFT = 20,
+	MVS_SGPIO_CTRL = 49676,
+	MVS_SGPIO_CTRL_SDOUT_AUTO = 2,
+	MVS_SGPIO_CTRL_SDOUT_SHIFT = 2,
+	MVS_SGPIO_DSRC = 49696,
+	MVS_SGPIO_DCTRL = 49720,
+	MVS_SGPIO_DCTRL_ERR_SHIFT = 0,
+	MVS_SGPIO_DCTRL_LOC_SHIFT = 3,
+	MVS_SGPIO_DCTRL_ACT_SHIFT = 5,
+};
+
+enum sgpio_led_status {
+	LED_OFF___2 = 0,
+	LED_ON___2 = 1,
+	LED_BLINKA = 2,
+	LED_BLINKA_INV = 3,
+	LED_BLINKA_SOF = 4,
+	LED_BLINKA_EOF = 5,
+	LED_BLINKB = 6,
+	LED_BLINKB_INV = 7,
+};
+
+enum sas_sata_phy_regs {
+	GENERATION_1_SETTING = 280,
+	GENERATION_1_2_SETTING = 284,
+	GENERATION_2_3_SETTING = 288,
+	GENERATION_3_4_SETTING = 292,
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+	struct ata_device *dev;
+	u16 *id;
+	struct scsi_cmnd *cmd;
+};
+
+struct ata_acpi_gtf {
+	u8 tf[7];
+};
+
+struct ata_acpi_hotplug_context {
+	struct acpi_hotplug_context hp;
+	union {
+		struct ata_port *ap;
+		struct ata_device *dev;
+	} data;
+};
+
+struct ahci_cmd_hdr {
+	__le32 opts;
+	__le32 status;
+	__le32 tbl_addr;
+	__le32 tbl_addr_hi;
+	__le32 reserved[4];
+};
+
+struct ahci_sg {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 reserved;
+	__le32 flags_size;
+};
+
+struct ahci_em_priv {
+	enum sw_activity blink_policy;
+	struct timer_list timer;
+	long unsigned int saved_activity;
+	long unsigned int activity;
+	long unsigned int led_state;
+	struct ata_link *link;
+};
+
+struct ahci_port_priv {
+	struct ata_link *active_link;
+	struct ahci_cmd_hdr *cmd_slot;
+	dma_addr_t cmd_slot_dma;
+	void *cmd_tbl;
+	dma_addr_t cmd_tbl_dma;
+	void *rx_fis;
+	dma_addr_t rx_fis_dma;
+	unsigned int ncq_saw_d2h: 1;
+	unsigned int ncq_saw_dmas: 1;
+	unsigned int ncq_saw_sdb: 1;
+	spinlock_t lock;
+	u32 intr_mask;
+	bool fbs_supported;
+	bool fbs_enabled;
+	int fbs_last_dev;
+	struct ahci_em_priv em_priv[15];
+	char *irq_desc;
+};
+
+struct mdio_board_info {
+	const char *bus_id;
+	char modalias[32];
+	int mdio_addr;
+	const void *platform_data;
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+struct phylink_mac_ops;
+
+struct phylink {
+	struct net_device *netdev;
+	const struct phylink_mac_ops *mac_ops;
+	struct phylink_config *config;
+	struct phylink_pcs *pcs;
+	struct device *dev;
+	unsigned int old_link_state: 1;
+	long unsigned int phylink_disable_state;
+	struct phy_device *phydev;
+	phy_interface_t link_interface;
+	u8 cfg_link_an_mode;
+	u8 cur_link_an_mode;
+	u8 link_port;
+	long unsigned int supported[2];
+	struct phylink_link_state link_config;
+	phy_interface_t cur_interface;
+	struct gpio_desc *link_gpio;
+	unsigned int link_irq;
+	struct timer_list link_poll;
+	void (*get_fixed_state)(struct net_device *, struct phylink_link_state *);
+	struct mutex state_mutex;
+	struct phylink_link_state phy_state;
+	struct work_struct resolve;
+	bool mac_link_dropped;
+	bool using_mac_select_pcs;
+	struct sfp_bus *sfp_bus;
+	bool sfp_may_have_phy;
+	long unsigned int sfp_interfaces[1];
+	long unsigned int sfp_support[2];
+	u8 sfp_port;
+};
+
+enum {
+	MLO_PAUSE_NONE = 0,
+	MLO_PAUSE_RX = 1,
+	MLO_PAUSE_TX = 2,
+	MLO_PAUSE_TXRX_MASK = 3,
+	MLO_PAUSE_AN = 4,
+	MLO_AN_PHY = 0,
+	MLO_AN_FIXED = 1,
+	MLO_AN_INBAND = 2,
+	MAC_SYM_PAUSE = 1,
+	MAC_ASYM_PAUSE = 2,
+	MAC_10HD = 4,
+	MAC_10FD = 8,
+	MAC_10 = 12,
+	MAC_100HD = 16,
+	MAC_100FD = 32,
+	MAC_100 = 48,
+	MAC_1000HD = 64,
+	MAC_1000FD = 128,
+	MAC_1000 = 192,
+	MAC_2500FD = 256,
+	MAC_5000FD = 512,
+	MAC_10000FD = 1024,
+	MAC_20000FD = 2048,
+	MAC_25000FD = 4096,
+	MAC_40000FD = 8192,
+	MAC_50000FD = 16384,
+	MAC_56000FD = 32768,
+	MAC_100000FD = 65536,
+	MAC_200000FD = 131072,
+	MAC_400000FD = 262144,
+};
+
+struct phylink_mac_ops {
+	void (*validate)(struct phylink_config *, long unsigned int *, struct phylink_link_state *);
+	struct phylink_pcs * (*mac_select_pcs)(struct phylink_config *, phy_interface_t);
+	void (*mac_pcs_get_state)(struct phylink_config *, struct phylink_link_state *);
+	int (*mac_prepare)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_config)(struct phylink_config *, unsigned int, const struct phylink_link_state *);
+	int (*mac_finish)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_an_restart)(struct phylink_config *);
+	void (*mac_link_down)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_up)(struct phylink_config *, struct phy_device *, unsigned int, phy_interface_t, int, int, bool, bool);
+};
+
+enum {
+	PHYLINK_DISABLE_STOPPED = 0,
+	PHYLINK_DISABLE_LINK = 1,
+	PHYLINK_DISABLE_MAC_WOL = 2,
+};
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct mdio_device_id {
+	__u32 phy_id;
+	__u32 phy_id_mask;
+};
+
+struct rtl821x_priv {
+	u16 phycr1;
+	u16 phycr2;
+	bool has_phycr2;
+};
+
+struct e1000_rx_desc {
+	__le64 buffer_addr;
+	__le16 length;
+	__le16 csum;
+	u8 status;
+	u8 errors;
+	__le16 special;
+};
+
+enum e1000_state_t___3 {
+	__E1000_TESTING___2 = 0,
+	__E1000_RESETTING___2 = 1,
+	__E1000_DOWN___2 = 2,
+	__E1000_DISABLED = 3,
+};
+
+struct e1000_host_mng_command_header {
+	u8 command_id;
+	u8 checksum;
+	u16 reserved1;
+	u16 reserved2;
+	u16 command_length;
+};
+
+enum e1000_mng_mode {
+	e1000_mng_mode_none = 0,
+	e1000_mng_mode_asf = 1,
+	e1000_mng_mode_pt = 2,
+	e1000_mng_mode_ipmi = 3,
+	e1000_mng_mode_host_if_only = 4,
+};
+
+struct e1000_option___2 {
+	enum {
+		enable_option___2 = 0,
+		range_option___2 = 1,
+		list_option___2 = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			struct e1000_opt_list *p;
+		} l;
+	} arg;
+};
+
+struct e1000_adv_tx_context_desc {
+	__le32 vlan_macip_lens;
+	__le32 seqnum_seed;
+	__le32 type_tucmd_mlhl;
+	__le32 mss_l4len_idx;
+};
+
+enum igb_tx_flags {
+	IGB_TX_FLAGS_VLAN = 1,
+	IGB_TX_FLAGS_TSO = 2,
+	IGB_TX_FLAGS_TSTAMP = 4,
+	IGB_TX_FLAGS_IPV4 = 16,
+	IGB_TX_FLAGS_CSUM = 32,
+};
+
+enum e1000_ring_flags_t {
+	IGB_RING_FLAG_RX_3K_BUFFER = 0,
+	IGB_RING_FLAG_RX_BUILD_SKB_ENABLED = 1,
+	IGB_RING_FLAG_RX_SCTP_CSUM = 2,
+	IGB_RING_FLAG_RX_LB_VLAN_BSWAP = 3,
+	IGB_RING_FLAG_TX_CTX_IDX = 4,
+	IGB_RING_FLAG_TX_DETECT_HANG = 5,
+};
+
+enum igb_boards {
+	board_82575 = 0,
+};
+
+enum queue_mode {
+	QUEUE_MODE_STRICT_PRIORITY = 0,
+	QUEUE_MODE_STREAM_RESERVATION = 1,
+};
+
+enum tx_queue_prio {
+	TX_QUEUE_PRIO_HIGH = 0,
+	TX_QUEUE_PRIO_LOW = 1,
+};
+
+struct igb_reg_info {
+	u32 ofs;
+	char *name;
+};
+
+enum latency_range {
+	lowest_latency = 0,
+	low_latency = 1,
+	bulk_latency = 2,
+	latency_invalid = 255,
+};
+
+struct my_u0 {
+	__le64 a;
+	__le64 b;
+};
+
+enum E1000_INVM_STRUCTURE_TYPE {
+	E1000_INVM_UNINITIALIZED_STRUCTURE = 0,
+	E1000_INVM_WORD_AUTOLOAD_STRUCTURE = 1,
+	E1000_INVM_CSR_AUTOLOAD_STRUCTURE = 2,
+	E1000_INVM_PHY_REGISTER_AUTOLOAD_STRUCTURE = 3,
+	E1000_INVM_RSA_KEY_SHA256_STRUCTURE = 4,
+	E1000_INVM_INVALIDATED_STRUCTURE = 15,
+};
+
+struct ixgbe_nvm_version {
+	u32 etk_id;
+	u8 nvm_major;
+	u16 nvm_minor;
+	u8 nvm_id;
+	bool oem_valid;
+	u8 oem_major;
+	u8 oem_minor;
+	u16 oem_release;
+	bool or_valid;
+	u8 or_major;
+	u16 or_build;
+	u8 or_patch;
+};
+
+enum {
+	PBA_STRATEGY_EQUAL = 0,
+	PBA_STRATEGY_WEIGHTED = 1,
+};
+
+struct ixgbe_hic_drv_info {
+	struct ixgbe_hic_hdr hdr;
+	u8 port_num;
+	u8 ver_sub;
+	u8 ver_build;
+	u8 ver_min;
+	u8 ver_maj;
+	u8 pad;
+	u16 pad2;
+};
+
+struct fc_frame_header {
+	__u8 fh_r_ctl;
+	__u8 fh_d_id[3];
+	__u8 fh_cs_ctl;
+	__u8 fh_s_id[3];
+	__u8 fh_type;
+	__u8 fh_f_ctl[3];
+	__u8 fh_seq_id;
+	__u8 fh_df_ctl;
+	__be16 fh_seq_cnt;
+	__be16 fh_ox_id;
+	__be16 fh_rx_id;
+	__be32 fh_parm_offset;
+};
+
+enum fc_rctl {
+	FC_RCTL_DD_UNCAT = 0,
+	FC_RCTL_DD_SOL_DATA = 1,
+	FC_RCTL_DD_UNSOL_CTL = 2,
+	FC_RCTL_DD_SOL_CTL = 3,
+	FC_RCTL_DD_UNSOL_DATA = 4,
+	FC_RCTL_DD_DATA_DESC = 5,
+	FC_RCTL_DD_UNSOL_CMD = 6,
+	FC_RCTL_DD_CMD_STATUS = 7,
+	FC_RCTL_ELS_REQ = 34,
+	FC_RCTL_ELS_REP = 35,
+	FC_RCTL_ELS4_REQ = 50,
+	FC_RCTL_ELS4_REP = 51,
+	FC_RCTL_VFTH = 80,
+	FC_RCTL_IFRH = 81,
+	FC_RCTL_ENCH = 82,
+	FC_RCTL_BA_NOP = 128,
+	FC_RCTL_BA_ABTS = 129,
+	FC_RCTL_BA_RMC = 130,
+	FC_RCTL_BA_ACC = 132,
+	FC_RCTL_BA_RJT = 133,
+	FC_RCTL_BA_PRMT = 134,
+	FC_RCTL_ACK_1 = 192,
+	FC_RCTL_ACK_0 = 193,
+	FC_RCTL_P_RJT = 194,
+	FC_RCTL_F_RJT = 195,
+	FC_RCTL_P_BSY = 196,
+	FC_RCTL_F_BSY = 197,
+	FC_RCTL_F_BSYL = 198,
+	FC_RCTL_LCR = 199,
+	FC_RCTL_END = 201,
+};
+
+struct fcoe_hdr {
+	__u8 fcoe_ver;
+	__u8 fcoe_resvd[12];
+	__u8 fcoe_sof;
+};
+
+struct fcoe_crc_eof {
+	__le32 fcoe_crc32;
+	__u8 fcoe_eof;
+	__u8 fcoe_resvd[3];
+};
+
+enum ixgbe_tx_flags {
+	IXGBE_TX_FLAGS_HW_VLAN = 1,
+	IXGBE_TX_FLAGS_TSO = 2,
+	IXGBE_TX_FLAGS_TSTAMP = 4,
+	IXGBE_TX_FLAGS_CC = 8,
+	IXGBE_TX_FLAGS_IPV4 = 16,
+	IXGBE_TX_FLAGS_CSUM = 32,
+	IXGBE_TX_FLAGS_IPSEC = 64,
+	IXGBE_TX_FLAGS_SW_VLAN = 128,
+	IXGBE_TX_FLAGS_FCOE = 256,
+};
+
+enum fc_sof {
+	FC_SOF_F = 40,
+	FC_SOF_I4 = 41,
+	FC_SOF_I2 = 45,
+	FC_SOF_I3 = 46,
+	FC_SOF_N4 = 49,
+	FC_SOF_N2 = 53,
+	FC_SOF_N3 = 54,
+	FC_SOF_C4 = 57,
+};
+
+enum fc_eof {
+	FC_EOF_N = 65,
+	FC_EOF_T = 66,
+	FC_EOF_RT = 68,
+	FC_EOF_DT = 70,
+	FC_EOF_NI = 73,
+	FC_EOF_DTI = 78,
+	FC_EOF_RTI = 79,
+	FC_EOF_A = 80,
+};
+
+struct ixgb_opt_list {
+	int i;
+	const char *str;
+};
+
+struct ixgb_option {
+	enum {
+		enable_option___3 = 0,
+		range_option___3 = 1,
+		list_option___3 = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			const struct ixgb_opt_list *p;
+		} l;
+	} arg;
+};
+
+enum power_event {
+	pointer_reset = 2147483648,
+	global_unicast = 512,
+	wake_up_rx_frame = 64,
+	magic_frame = 32,
+	wake_up_frame_en = 4,
+	magic_pkt_en = 2,
+	power_down = 1,
+};
+
+struct stmmac_rx_routing {
+	u32 reg_mask;
+	u32 reg_shift;
+};
+
+enum dwmac4_irq_status {
+	time_stamp_irq = 4096,
+	mmc_rx_csum_offload_irq = 2048,
+	mmc_tx_irq = 1024,
+	mmc_rx_irq = 512,
+	mmc_irq = 256,
+	lpi_irq = 32,
+	pmt_irq = 16,
+};
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct urb_priv___2 {
+	struct ed *ed;
+	u16 length;
+	u16 td_cnt;
+	struct list_head pending;
+	struct td *td[0];
+};
+
+typedef struct urb_priv___2 urb_priv_t;
+
+struct debug_buffer___2 {
+	ssize_t (*fill_func)(struct debug_buffer___2 *);
+	struct ohci_hcd *ohci;
+	struct mutex mutex;
+	size_t count;
+	char *page;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct evdev_client;
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	long unsigned int *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
+enum SS4_PACKET_ID {
+	SS4_PACKET_ID_IDLE = 0,
+	SS4_PACKET_ID_ONE = 1,
+	SS4_PACKET_ID_TWO = 2,
+	SS4_PACKET_ID_MULTI = 3,
+	SS4_PACKET_ID_STICK = 4,
+};
+
+enum V7_PACKET_ID {
+	V7_PACKET_ID_IDLE = 0,
+	V7_PACKET_ID_TWO = 1,
+	V7_PACKET_ID_MULTI = 2,
+	V7_PACKET_ID_NEW = 3,
+	V7_PACKET_ID_UNKNOWN = 4,
+};
+
+struct alps_protocol_info {
+	u16 version;
+	u8 byte0;
+	u8 mask0;
+	unsigned int flags;
+};
+
+struct alps_model_info {
+	u8 signature[3];
+	struct alps_protocol_info protocol_info;
+};
+
+struct alps_nibble_commands {
+	int command;
+	unsigned char data;
+};
+
+struct alps_bitmap_point {
+	int start_bit;
+	int num_bits;
+};
+
+struct alps_fields {
+	unsigned int x_map;
+	unsigned int y_map;
+	unsigned int fingers;
+	int pressure;
+	struct input_mt_pos st;
+	struct input_mt_pos mt[4];
+	unsigned int first_mp: 1;
+	unsigned int is_mp: 1;
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int ts_left: 1;
+	unsigned int ts_right: 1;
+	unsigned int ts_middle: 1;
+};
+
+struct alps_data {
+	struct psmouse *psmouse;
+	struct input_dev *dev2;
+	struct input_dev *dev3;
+	char phys2[32];
+	char phys3[32];
+	struct delayed_work dev3_register_work;
+	const struct alps_nibble_commands *nibble_commands;
+	int addr_command;
+	u16 proto_version;
+	u8 byte0;
+	u8 mask0;
+	u8 dev_id[3];
+	u8 fw_ver[3];
+	int flags;
+	int x_max;
+	int y_max;
+	int x_bits;
+	int y_bits;
+	unsigned int x_res;
+	unsigned int y_res;
+	int (*hw_init)(struct psmouse *);
+	void (*process_packet)(struct psmouse *);
+	int (*decode_fields)(struct alps_fields *, unsigned char *, struct psmouse *);
+	void (*set_abs_params)(struct alps_data *, struct input_dev *);
+	int prev_fin;
+	int multi_packet;
+	int second_touch;
+	unsigned char multi_data[6];
+	struct alps_fields f;
+	u8 quirks;
+	struct timer_list timer;
+};
+
+struct fsp_data {
+	unsigned char ver;
+	unsigned char rev;
+	unsigned int buttons;
+	unsigned int flags;
+	bool vscroll;
+	bool hscroll;
+	unsigned char last_reg;
+	unsigned char last_val;
+	unsigned int last_mt_fgr;
+};
+
+struct trace_event_raw_rtc_time_alarm_class {
+	struct trace_entry ent;
+	time64_t secs;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_freq {
+	struct trace_entry ent;
+	int freq;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_state {
+	struct trace_entry ent;
+	int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_alarm_irq_enable {
+	struct trace_entry ent;
+	unsigned int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_offset_class {
+	struct trace_entry ent;
+	long int offset;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_timer_class {
+	struct trace_entry ent;
+	struct rtc_timer *timer;
+	ktime_t expires;
+	ktime_t period;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rtc_time_alarm_class {};
+
+struct trace_event_data_offsets_rtc_irq_set_freq {};
+
+struct trace_event_data_offsets_rtc_irq_set_state {};
+
+struct trace_event_data_offsets_rtc_alarm_irq_enable {};
+
+struct trace_event_data_offsets_rtc_offset_class {};
+
+struct trace_event_data_offsets_rtc_timer_class {};
+
+typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
+
+typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
+
+typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
+
+enum {
+	none = 0,
+	day = 1,
+	month = 2,
+	year = 3,
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_result {};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct class_compat;
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct i2c_smbus_ioctl_data {
+	__u8 read_write;
+	__u8 command;
+	__u32 size;
+	union i2c_smbus_data *data;
+};
+
+struct i2c_rdwr_ioctl_data {
+	struct i2c_msg *msgs;
+	__u32 nmsgs;
+};
+
+struct i2c_dev {
+	struct list_head list;
+	struct i2c_adapter *adap;
+	struct device dev;
+	struct cdev cdev;
+};
+
+struct ptp_clock_caps {
+	int max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int pps;
+	int n_pins;
+	int cross_timestamping;
+	int adjust_phase;
+	int rsv[12];
+};
+
+struct ptp_sys_offset {
+	unsigned int n_samples;
+	unsigned int rsv[3];
+	struct ptp_clock_time ts[51];
+};
+
+struct ptp_sys_offset_extended {
+	unsigned int n_samples;
+	unsigned int rsv[3];
+	struct ptp_clock_time ts[75];
+};
+
+struct ptp_sys_offset_precise {
+	struct ptp_clock_time device;
+	struct ptp_clock_time sys_realtime;
+	struct ptp_clock_time sys_monoraw;
+	unsigned int rsv[4];
+};
+
+enum {
+	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
+	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
+	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
+	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
+	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
+	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
+	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
+};
+
+enum {
+	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
+	POWER_SUPPLY_HEALTH_GOOD = 1,
+	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
+	POWER_SUPPLY_HEALTH_DEAD = 3,
+	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
+	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
+	POWER_SUPPLY_HEALTH_COLD = 6,
+	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
+	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
+	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
+	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
+	POWER_SUPPLY_HEALTH_WARM = 11,
+	POWER_SUPPLY_HEALTH_COOL = 12,
+	POWER_SUPPLY_HEALTH_HOT = 13,
+	POWER_SUPPLY_HEALTH_NO_BATTERY = 14,
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[31];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+struct thermal_hwmon_device {
+	char type[20];
+	struct device *device;
+	int count;
+	struct list_head tz_list;
+	struct list_head node;
+};
+
+struct thermal_hwmon_attr {
+	struct device_attribute attr;
+	char name[16];
+};
+
+struct thermal_hwmon_temp {
+	struct list_head hwmon_node;
+	struct thermal_zone_device *tz;
+	struct thermal_hwmon_attr temp_input;
+	struct thermal_hwmon_attr temp_crit;
+};
+
+struct keyboard_notifier_param {
+	struct vc_data *vc;
+	int down;
+	int shift;
+	int ledstate;
+	unsigned int value;
+};
+
+struct em_data_callback {};
+
+enum cpu_led_event {
+	CPU_LED_IDLE_START = 0,
+	CPU_LED_IDLE_END = 1,
+	CPU_LED_START = 2,
+	CPU_LED_STOP = 3,
+	CPU_LED_HALTED = 4,
+};
+
+struct led_trigger_cpu {
+	bool is_active;
+	char name[8];
+	struct led_trigger *_trig;
+};
+
+struct dmi_device_attribute {
+	struct device_attribute dev_attr;
+	int field;
+};
+
+struct mafield {
+	const char *prefix;
+	int field;
+};
+
+enum {
+	M_I17 = 0,
+	M_I20 = 1,
+	M_I20_SR = 2,
+	M_I24 = 3,
+	M_I24_8_1 = 4,
+	M_I24_10_1 = 5,
+	M_I27_11_1 = 6,
+	M_MINI = 7,
+	M_MINI_3_1 = 8,
+	M_MINI_4_1 = 9,
+	M_MB = 10,
+	M_MB_2 = 11,
+	M_MB_3 = 12,
+	M_MB_5_1 = 13,
+	M_MB_6_1 = 14,
+	M_MB_7_1 = 15,
+	M_MB_SR = 16,
+	M_MBA = 17,
+	M_MBA_3 = 18,
+	M_MBP = 19,
+	M_MBP_2 = 20,
+	M_MBP_2_2 = 21,
+	M_MBP_SR = 22,
+	M_MBP_4 = 23,
+	M_MBP_5_1 = 24,
+	M_MBP_5_2 = 25,
+	M_MBP_5_3 = 26,
+	M_MBP_6_1 = 27,
+	M_MBP_6_2 = 28,
+	M_MBP_7_1 = 29,
+	M_MBP_8_2 = 30,
+	M_UNKNOWN = 31,
+};
+
+struct efifb_dmi_info {
+	char *optname;
+	long unsigned int base;
+	int stride;
+	int width;
+	int height;
+	int flags;
+};
+
+enum {
+	OVERRIDE_NONE = 0,
+	OVERRIDE_BASE = 1,
+	OVERRIDE_STRIDE = 2,
+	OVERRIDE_HEIGHT = 4,
+	OVERRIDE_WIDTH = 8,
+};
+
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+enum {
+	VMGENID_SIZE = 16,
+};
+
+struct vmgenid_state {
+	u8 *next_id;
+	u8 this_id[16];
+};
+
+struct extcon_cable;
+
+struct extcon_dev {
+	const char *name;
+	const unsigned int *supported_cable;
+	const u32 *mutually_exclusive;
+	struct device dev;
+	struct raw_notifier_head nh_all;
+	struct raw_notifier_head *nh;
+	struct list_head entry;
+	int max_supported;
+	spinlock_t lock;
+	u32 state;
+	struct device_type extcon_dev_type;
+	struct extcon_cable *cables;
+	struct attribute_group attr_g_muex;
+	struct attribute **attrs_muex;
+	struct device_attribute *d_attrs_muex;
+};
+
+struct extcon_dev_notifier_devres {
+	struct extcon_dev *edev;
+	unsigned int id;
+	struct notifier_block *nb;
+};
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+};
+
+struct nvmem_cell_lookup {
+	const char *nvmem_name;
+	const char *cell_name;
+	const char *dev_id;
+	const char *con_id;
+	struct list_head node;
+};
+
+enum {
+	NVMEM_ADD = 1,
+	NVMEM_REMOVE = 2,
+	NVMEM_CELL_ADD = 3,
+	NVMEM_CELL_REMOVE = 4,
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t);
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct nvmem_cell_table {
+	const char *nvmem_name;
+	const struct nvmem_cell_info *cells;
+	size_t ncells;
+	struct list_head node;
+};
+
+struct nvmem_device {
+	struct module *owner;
+	struct device dev;
+	int stride;
+	int word_size;
+	int id;
+	struct kref refcnt;
+	size_t size;
+	bool read_only;
+	bool root_only;
+	int flags;
+	enum nvmem_type type;
+	struct bin_attribute eeprom;
+	struct device *base_dev;
+	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	struct gpio_desc *wp_gpio;
+	void *priv;
+};
+
+struct nvmem_cell_entry {
+	const char *name;
+	int offset;
+	int bytes;
+	int bit_offset;
+	int nbits;
+	struct device_node *np;
+	struct nvmem_device *nvmem;
+	struct list_head node;
+};
+
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
+};
+
+struct ahash_request;
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum {
+	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+};
+
+struct gre_full_hdr {
+	struct gre_base_hdr fixed_header;
+	__be16 csum;
+	__be16 reserved1;
+	__be32 key;
+	__be32 seq;
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
+};
+
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
+};
+
+struct nf_ct_ext {
+	u8 offset[6];
+	u8 len;
+	unsigned int gen_id;
+	int: 32;
+	char data[0];
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_LABELS = 4,
+	NF_CT_EXT_SYNPROXY = 5,
+	NF_CT_EXT_NUM = 6,
+};
+
+struct nf_conn_labels {
+	long unsigned int bits[2];
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	IFLA_BRPORT_MAB = 40,
+	__IFLA_BRPORT_MAX = 41,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[63];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[41];
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char *ifcu_buf;
+		struct ifreq *ifcu_req;
+	} ifc_ifcu;
+};
+
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
+typedef u32 compat_caddr_t;
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
+struct net_bridge;
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+struct tc_skb_ext {
+	__u32 chain;
+	__u16 mru;
+	__u16 zone;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+};
+
+struct update_classid_context {
+	u32 classid;
+	unsigned int batch;
+};
+
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_eswitch_mode {
+	DEVLINK_ESWITCH_MODE_LEGACY = 0,
+	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
+};
+
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+enum {
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
+};
+
+enum {
+	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
+	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
+	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
+	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
+};
+
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
+};
+
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
+};
+
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
+};
+
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	DEVLINK_ATTR_RATE_TX_PRIORITY = 177,
+	DEVLINK_ATTR_RATE_TX_WEIGHT = 178,
+	DEVLINK_ATTR_REGION_DIRECT = 179,
+	__DEVLINK_ATTR_MAX = 180,
+	DEVLINK_ATTR_MAX = 179,
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+enum devlink_dpipe_field_ethernet_id {
+	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
+};
+
+enum devlink_dpipe_field_ipv4_id {
+	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
+};
+
+enum devlink_dpipe_field_ipv6_id {
+	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
+};
+
+enum devlink_dpipe_header_id {
+	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
+	DEVLINK_DPIPE_HEADER_IPV4 = 1,
+	DEVLINK_DPIPE_HEADER_IPV6 = 2,
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+enum devlink_port_fn_attr_cap {
+	DEVLINK_PORT_FN_ATTR_CAP_ROCE_BIT = 0,
+	DEVLINK_PORT_FN_ATTR_CAP_MIGRATABLE_BIT = 1,
+	__DEVLINK_PORT_FN_ATTR_CAPS_MAX = 2,
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	DEVLINK_PORT_FN_ATTR_CAPS = 4,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 5,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct xarray ports;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	struct mutex linecards_lock;
+	const struct devlink_ops *ops;
+	u64 features;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct completion comp;
+	struct callback_head rcu;
+	struct notifier_block netdevice_nb;
+	char priv[0];
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	refcount_t refcount;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	long unsigned int done;
+	long unsigned int total;
+	long unsigned int timeout;
+};
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	long unsigned int supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	struct mutex dump_lock;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+	refcount_t refcount;
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	DEVLINK_TRAP_GENERIC_ID_EAPOL = 92,
+	DEVLINK_TRAP_GENERIC_ID_LOCKED_PORT = 93,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 94,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 93,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EAPOL = 26,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 27,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+};
+
+enum {
+	DEVLINK_F_RELOAD = 1,
+};
+
+struct devlink_info_req;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	long unsigned int reload_actions;
+	long unsigned int reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_function_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_function_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_fn_roce_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_roce_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_migratable_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_migratable_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *);
+	int (*port_del)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+enum devlink_info_version_type {
+	DEVLINK_INFO_VERSION_TYPE_NONE = 0,
+	DEVLINK_INFO_VERSION_TYPE_COMPONENT = 1,
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+	void (*version_cb)(const char *, enum devlink_info_version_type, void *);
+	void *version_cb_priv;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	long unsigned int type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+struct devlink_flash_component_lookup_ctx {
+	const char *lookup_name;
+	bool lookup_name_found;
+};
+
+typedef int devlink_chunk_fill_t(void *, u8 *, u32, u64, struct netlink_ext_ack *);
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats *stats;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats *stats;
+	void *priv;
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc **p_miniq;
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+struct tcamsg {
+	unsigned char tca_family;
+	unsigned char tca__pad1;
+	short unsigned int tca__pad2;
+};
+
+enum {
+	TCA_ROOT_UNSPEC = 0,
+	TCA_ROOT_TAB = 1,
+	TCA_ROOT_FLAGS = 2,
+	TCA_ROOT_COUNT = 3,
+	TCA_ROOT_TIME_DELTA = 4,
+	__TCA_ROOT_MAX = 5,
+};
+
+struct tc_action_net {
+	struct tcf_idrinfo *idrinfo;
+	const struct tc_action_ops *ops;
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	u32 tcfp_off_max_hint;
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	long: 64;
+};
+
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
+};
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	struct xdp_frame frm;
+	u8 data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct prog_test_pass1 {
+	int x0;
+	struct {
+		int x1;
+		struct {
+			int x2;
+			struct {
+				int x3;
+			};
+		};
+	};
+};
+
+struct prog_test_pass2 {
+	int len;
+	short int arr1[4];
+	struct {
+		char arr2[4];
+		long unsigned int arr3[8];
+	} x;
+};
+
+struct prog_test_fail1 {
+	void *p;
+	int x;
+};
+
+struct prog_test_fail2 {
+	int x8;
+	struct prog_test_pass1 x;
+};
+
+struct prog_test_fail3 {
+	int len;
+	char arr1[2];
+	char arr2[0];
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+struct linkmodes_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+	bool peer_empty;
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE = 2,
+	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
+	ETHTOOL_A_CABLE_RESULT_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
+	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_NEST_RESULT = 1,
+	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
+	__ETHTOOL_A_CABLE_NEST_CNT = 3,
+	ETHTOOL_A_CABLE_NEST_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
+	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
+	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
+	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
+	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
+	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
+	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
+	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_PULSE_mV = 1,
+	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
+	ETHTOOL_A_CABLE_PULSE_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
+	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
+	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
+	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
+	__ETHTOOL_A_CABLE_STEP_CNT = 4,
+	ETHTOOL_A_CABLE_STEP_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
+	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
+	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
+	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
+	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 4,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	long unsigned int stat_mask[1];
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+struct nf_hook_entries_rcu_head {
+	struct callback_head head;
+	void *allocation;
+};
+
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
+};
+
+struct nf_conntrack_tuple;
+
+struct nf_ct_hook {
+	int (*update)(struct net *, struct sk_buff *);
+	void (*destroy)(struct nf_conntrack *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
+};
+
+struct nfnl_ct_hook {
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	long unsigned int last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block *tcpm_next;
+	possible_net_t tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	long unsigned int tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block *chain;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+enum {
+	AX25_VALUES_IPDEFMODE = 0,
+	AX25_VALUES_AXDEFMODE = 1,
+	AX25_VALUES_BACKOFF = 2,
+	AX25_VALUES_CONMODE = 3,
+	AX25_VALUES_WINDOW = 4,
+	AX25_VALUES_EWINDOW = 5,
+	AX25_VALUES_T1 = 6,
+	AX25_VALUES_T2 = 7,
+	AX25_VALUES_T3 = 8,
+	AX25_VALUES_IDLE = 9,
+	AX25_VALUES_N2 = 10,
+	AX25_VALUES_PACLEN = 11,
+	AX25_VALUES_PROTOCOL = 12,
+	AX25_VALUES_DS_TIMEOUT = 13,
+	AX25_MAX_VALUES = 14,
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+};
+
+struct geneve_opt {
+	__be16 opt_class;
+	u8 type;
+	u8 length: 5;
+	u8 r3: 1;
+	u8 r2: 1;
+	u8 r1: 1;
+	u8 opt_data[0];
+};
+
+struct vxlan_metadata {
+	u32 gbp;
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+struct nhmsg {
+	unsigned char nh_family;
+	unsigned char nh_scope;
+	unsigned char nh_protocol;
+	unsigned char resvd;
+	unsigned int nh_flags;
+};
+
+struct nexthop_grp {
+	__u32 id;
+	__u8 weight;
+	__u8 resvd1;
+	__u16 resvd2;
+};
+
+enum {
+	NEXTHOP_GRP_TYPE_MPATH = 0,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+enum {
+	NHA_UNSPEC = 0,
+	NHA_ID = 1,
+	NHA_GROUP = 2,
+	NHA_GROUP_TYPE = 3,
+	NHA_BLACKHOLE = 4,
+	NHA_OIF = 5,
+	NHA_GATEWAY = 6,
+	NHA_ENCAP_TYPE = 7,
+	NHA_ENCAP = 8,
+	NHA_GROUPS = 9,
+	NHA_MASTER = 10,
+	NHA_FDB = 11,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
+};
+
+struct nh_config {
+	u32 nh_id;
+	u8 nh_family;
+	u8 nh_protocol;
+	u8 nh_blackhole;
+	u8 nh_fdb;
+	u32 nh_flags;
+	int nh_ifindex;
+	struct net_device *dev;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} gw;
+	struct nlattr *nh_grp;
+	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	long unsigned int nh_grp_res_idle_timer;
+	long unsigned int nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
+	struct nlattr *nh_encap;
+	u16 nh_encap_type;
+	u32 nlflags;
+	struct nl_info nlinfo;
+};
+
+enum nexthop_event_type {
+	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+	u32 done_nh_idx;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+enum {
+	FRA_UNSPEC = 0,
+	FRA_DST = 1,
+	FRA_SRC = 2,
+	FRA_IIFNAME = 3,
+	FRA_GOTO = 4,
+	FRA_UNUSED2 = 5,
+	FRA_PRIORITY = 6,
+	FRA_UNUSED3 = 7,
+	FRA_UNUSED4 = 8,
+	FRA_UNUSED5 = 9,
+	FRA_FWMARK = 10,
+	FRA_FLOW = 11,
+	FRA_TUN_ID = 12,
+	FRA_SUPPRESS_IFGROUP = 13,
+	FRA_SUPPRESS_PREFIXLEN = 14,
+	FRA_TABLE = 15,
+	FRA_FWMASK = 16,
+	FRA_OIFNAME = 17,
+	FRA_PAD = 18,
+	FRA_L3MDEV = 19,
+	FRA_UID_RANGE = 20,
+	FRA_PROTOCOL = 21,
+	FRA_IP_PROTO = 22,
+	FRA_SPORT_RANGE = 23,
+	FRA_DPORT_RANGE = 24,
+	__FRA_MAX = 25,
+};
+
+struct fib4_rule {
+	struct fib_rule common;
+	u8 dst_len;
+	u8 src_len;
+	dscp_t dscp;
+	__be32 src;
+	__be32 srcmask;
+	__be32 dst;
+	__be32 dstmask;
+	u32 tclassid;
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+	__u32 tcpi_rcv_wnd;
+	__u32 tcpi_rehash;
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	spinlock_t encrypt_compl_lock;
+	int async_notify;
+	u8 async_capable: 1;
+	long unsigned int tx_bitmask;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct sadb_alg {
+	__u8 sadb_alg_id;
+	__u8 sadb_alg_ivlen;
+	__u16 sadb_alg_minbits;
+	__u16 sadb_alg_maxbits;
+	__u16 sadb_alg_reserved;
+};
+
+enum {
+	XFRM_SHARE_ANY = 0,
+	XFRM_SHARE_SESSION = 1,
+	XFRM_SHARE_USER = 2,
+	XFRM_SHARE_UNIQUE = 3,
+};
+
+struct xfrm_user_sec_ctx {
+	__u16 len;
+	__u16 exttype;
+	__u8 ctx_alg;
+	__u8 ctx_doi;
+	__u16 ctx_len;
+};
+
+struct xfrm_user_tmpl {
+	struct xfrm_id id;
+	__u16 family;
+	xfrm_address_t saddr;
+	__u32 reqid;
+	__u8 mode;
+	__u8 share;
+	__u8 optional;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+};
+
+struct xfrm_userpolicy_type {
+	__u8 type;
+	__u16 reserved1;
+	__u8 reserved2;
+};
+
+enum xfrm_sadattr_type_t {
+	XFRMA_SAD_UNSPEC = 0,
+	XFRMA_SAD_CNT = 1,
+	XFRMA_SAD_HINFO = 2,
+	__XFRMA_SAD_MAX = 3,
+};
+
+struct xfrmu_sadhinfo {
+	__u32 sadhcnt;
+	__u32 sadhmcnt;
+};
+
+enum xfrm_spdattr_type_t {
+	XFRMA_SPD_UNSPEC = 0,
+	XFRMA_SPD_INFO = 1,
+	XFRMA_SPD_HINFO = 2,
+	XFRMA_SPD_IPV4_HTHRESH = 3,
+	XFRMA_SPD_IPV6_HTHRESH = 4,
+	__XFRMA_SPD_MAX = 5,
+};
+
+struct xfrmu_spdinfo {
+	__u32 incnt;
+	__u32 outcnt;
+	__u32 fwdcnt;
+	__u32 inscnt;
+	__u32 outscnt;
+	__u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+	__u32 spdhcnt;
+	__u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+	__u8 lbits;
+	__u8 rbits;
+};
+
+struct xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq;
+	__u32 reqid;
+	__u16 family;
+	__u8 mode;
+	__u8 replay_window;
+	__u8 flags;
+};
+
+struct xfrm_usersa_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u16 family;
+	__u8 proto;
+};
+
+struct xfrm_aevent_id {
+	struct xfrm_usersa_id sa_id;
+	xfrm_address_t saddr;
+	__u32 flags;
+	__u32 reqid;
+};
+
+struct xfrm_userspi_info {
+	struct xfrm_usersa_info info;
+	__u32 min;
+	__u32 max;
+};
+
+struct xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	__u32 priority;
+	__u32 index;
+	__u8 dir;
+	__u8 action;
+	__u8 flags;
+	__u8 share;
+};
+
+struct xfrm_userpolicy_id {
+	struct xfrm_selector sel;
+	__u32 index;
+	__u8 dir;
+};
+
+struct xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct xfrm_userpolicy_info policy;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+	__u32 seq;
+};
+
+struct xfrm_user_expire {
+	struct xfrm_usersa_info state;
+	__u8 hard;
+};
+
+struct xfrm_user_polexpire {
+	struct xfrm_userpolicy_info pol;
+	__u8 hard;
+};
+
+struct xfrm_usersa_flush {
+	__u8 proto;
+};
+
+struct xfrm_user_report {
+	__u8 proto;
+	struct xfrm_selector sel;
+};
+
+struct xfrm_user_mapping {
+	struct xfrm_usersa_id id;
+	__u32 reqid;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_saddr;
+	__be16 old_sport;
+	__be16 new_sport;
+};
+
+struct xfrm_user_offload {
+	int ifindex;
+	__u8 flags;
+};
+
+struct xfrm_userpolicy_default {
+	__u8 in;
+	__u8 fwd;
+	__u8 out;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+	XFRM_DEV_OFFLOAD_FWD = 3,
+};
+
+struct xfrm_algo_aead_info {
+	char *geniv;
+	u16 icv_truncbits;
+};
+
+struct xfrm_algo_auth_info {
+	u16 icv_truncbits;
+	u16 icv_fullbits;
+};
+
+struct xfrm_algo_encr_info {
+	char *geniv;
+	u16 blockbits;
+	u16 defkeybits;
+};
+
+struct xfrm_algo_comp_info {
+	u16 threshold;
+};
+
+struct xfrm_algo_desc {
+	char *name;
+	char *compat;
+	u8 available: 1;
+	u8 pfkey_supported: 1;
+	union {
+		struct xfrm_algo_aead_info aead;
+		struct xfrm_algo_auth_info auth;
+		struct xfrm_algo_encr_info encr;
+		struct xfrm_algo_comp_info comp;
+	} uinfo;
+	struct sadb_alg desc;
+};
+
+struct xfrm_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct xfrm_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *nla_pol;
+	int nla_max;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
+};
+
+enum {
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
+};
+
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
+};
+
+struct seg6_hmac_info {
+	struct rhash_head node;
+	struct callback_head rcu;
+	u32 hmackeyid;
+	char secret[64];
+	u8 slen;
+	u8 alg_id;
+};
+
+struct xfrm6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_protocol *next;
+	int priority;
+};
+
+struct sr6_tlv_hmac {
+	struct sr6_tlv tlvhdr;
+	__u16 reserved;
+	__be32 hmackeyid;
+	__u8 hmac[32];
+};
+
+enum {
+	SEG6_HMAC_ALGO_SHA1 = 1,
+	SEG6_HMAC_ALGO_SHA256 = 2,
+};
+
+struct seg6_hmac_algo {
+	u8 alg_id;
+	char name[64];
+	struct crypto_shash **tfms;
+	struct shash_desc **shashs;
+};
+
+struct vlan_group {
+	unsigned int nr_vlan_devs;
+	struct hlist_node hlist;
+	struct net_device **vlan_devices_arrays[16];
+};
+
+struct vlan_info {
+	struct net_device *real_dev;
+	struct vlan_group grp;
+	struct list_head vid_list;
+	unsigned int nr_vids;
+	struct callback_head rcu;
+};
+
+enum vlan_flags {
+	VLAN_FLAG_REORDER_HDR = 1,
+	VLAN_FLAG_GVRP = 2,
+	VLAN_FLAG_LOOSE_BINDING = 4,
+	VLAN_FLAG_MVRP = 8,
+	VLAN_FLAG_BRIDGE_BINDING = 16,
+};
+
+struct vlan_pcpu_stats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errors;
+	u32 tx_dropped;
+};
+
+struct vlan_priority_tci_mapping {
+	u32 priority;
+	u16 vlan_qos;
+	struct vlan_priority_tci_mapping *next;
+};
+
+struct vlan_dev_priv {
+	unsigned int nr_ingress_mappings;
+	u32 ingress_priority_map[8];
+	unsigned int nr_egress_mappings;
+	struct vlan_priority_tci_mapping *egress_priority_map[16];
+	__be16 vlan_proto;
+	u16 vlan_id;
+	u16 flags;
+	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
+	unsigned char real_dev_addr[6];
+	struct proc_dir_entry *dent;
+	struct vlan_pcpu_stats *vlan_pcpu_stats;
+	struct netpoll *netpoll;
+};
+
+enum vlan_protos {
+	VLAN_PROTO_8021Q = 0,
+	VLAN_PROTO_8021AD = 1,
+	VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_vid_info {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+	int refcount;
+};
+
+typedef int (*is_acked_func)(struct rds_message *, uint64_t);
+
+struct rds_loop_connection {
+	struct list_head loop_node;
+	struct rds_connection *conn;
+};
+
+enum cfcnfg_phy_preference {
+	CFPHYPREF_UNSPECIFIED = 0,
+	CFPHYPREF_LOW_LAT = 1,
+	CFPHYPREF_HIGH_BW = 2,
+	CFPHYPREF_LOOP = 3,
+};
+
+struct cfcnfg_phyinfo {
+	struct list_head node;
+	bool up;
+	struct cflayer *frm_layer;
+	struct cflayer *phy_layer;
+	unsigned int id;
+	enum cfcnfg_phy_preference pref;
+	struct dev_info dev_info;
+	int ifindex;
+	int head_room;
+	bool use_fcs;
+};
+
+struct cfcnfg {
+	struct cflayer layer;
+	struct cflayer *ctrl;
+	struct cflayer *mux;
+	struct list_head phys;
+	struct mutex lock;
+};
+
+struct cfpkt {
+	struct sk_buff skb;
+};
+
+struct cfpkt_priv_data {
+	struct dev_info dev_info;
+	bool erronous;
+};
+
+struct sockaddr_xdp {
+	__u16 sxdp_family;
+	__u16 sxdp_flags;
+	__u32 sxdp_ifindex;
+	__u32 sxdp_queue_id;
+	__u32 sxdp_shared_umem_fd;
+};
+
+struct xdp_ring_offset {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+	__u64 flags;
+};
+
+struct xdp_mmap_offsets {
+	struct xdp_ring_offset rx;
+	struct xdp_ring_offset tx;
+	struct xdp_ring_offset fr;
+	struct xdp_ring_offset cr;
+};
+
+struct xdp_statistics {
+	__u64 rx_dropped;
+	__u64 rx_invalid_descs;
+	__u64 tx_invalid_descs;
+	__u64 rx_ring_full;
+	__u64 rx_fill_ring_empty_descs;
+	__u64 tx_ring_empty_descs;
+};
+
+struct xdp_options {
+	__u32 flags;
+};
+
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct xdp_sock *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_ring_offset_v1 {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+};
+
+struct xdp_mmap_offsets_v1 {
+	struct xdp_ring_offset_v1 rx;
+	struct xdp_ring_offset_v1 tx;
+	struct xdp_ring_offset_v1 fr;
+	struct xdp_ring_offset_v1 cr;
+};
+
+struct xsk_map_node {
+	struct list_head node;
+	struct xsk_map *map;
+	struct xdp_sock **map_entry;
+};
+
+struct warn_args;
+
+struct rc {
+	long int (*fill)(void *, long unsigned int);
+	uint8_t *ptr;
+	uint8_t *buffer;
+	uint8_t *buffer_end;
+	long int buffer_size;
+	uint32_t code;
+	uint32_t range;
+	uint32_t bound;
+	void (*error)(char *);
+};
+
+struct lzma_header {
+	uint8_t pos;
+	uint32_t dict_size;
+	uint64_t dst_size;
+} __attribute__((packed));
+
+struct writer {
+	uint8_t *buffer;
+	uint8_t previous_byte;
+	size_t buffer_pos;
+	int bufsize;
+	size_t global_pos;
+	long int (*flush)(void *, long unsigned int);
+	struct lzma_header *header;
+};
+
+struct cstate {
+	int state;
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+};
+
+enum format_type {
+	FORMAT_TYPE_NONE = 0,
+	FORMAT_TYPE_WIDTH = 1,
+	FORMAT_TYPE_PRECISION = 2,
+	FORMAT_TYPE_CHAR = 3,
+	FORMAT_TYPE_STR = 4,
+	FORMAT_TYPE_PTR = 5,
+	FORMAT_TYPE_PERCENT_CHAR = 6,
+	FORMAT_TYPE_INVALID = 7,
+	FORMAT_TYPE_LONG_LONG = 8,
+	FORMAT_TYPE_ULONG = 9,
+	FORMAT_TYPE_LONG = 10,
+	FORMAT_TYPE_UBYTE = 11,
+	FORMAT_TYPE_BYTE = 12,
+	FORMAT_TYPE_USHORT = 13,
+	FORMAT_TYPE_SHORT = 14,
+	FORMAT_TYPE_UINT = 15,
+	FORMAT_TYPE_INT = 16,
+	FORMAT_TYPE_SIZE_T = 17,
+	FORMAT_TYPE_PTRDIFF = 18,
+};
+
+struct printf_spec {
+	unsigned int type: 8;
+	int field_width: 24;
+	unsigned int flags: 8;
+	unsigned int base: 8;
+	int precision: 16;
+};
+
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
+struct tcpa_event {
+	u32 pcr_index;
+	u32 event_type;
+	u8 pcr_value[20];
+	u32 event_size;
+	u8 event_data[0];
+};
+
+typedef u32 efi_tcg2_event_log_format;
+
+struct efi_tcg2_event {
+	u32 event_size;
+	struct {
+		u32 header_size;
+		u16 header_version;
+		u32 pcr_index;
+		u32 event_type;
+	} __attribute__((packed)) event_header;
+} __attribute__((packed));
+
+typedef struct efi_tcg2_event efi_tcg2_event_t;
+
+union efi_tcg2_protocol;
+
+typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
+
+union efi_tcg2_protocol {
+	struct {
+		void *get_capability;
+		efi_status_t (*get_event_log)(efi_tcg2_protocol_t *, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
+		efi_status_t (*hash_log_extend_event)(efi_tcg2_protocol_t *, u64, efi_physical_addr_t, u64, const efi_tcg2_event_t *);
+		void *submit_command;
+		void *get_active_pcr_banks;
+		void *set_active_pcr_banks;
+		void *get_result_of_set_active_pcr_banks;
+	};
+	struct {
+		u32 get_capability;
+		u32 get_event_log;
+		u32 hash_log_extend_event;
+		u32 submit_command;
+		u32 get_active_pcr_banks;
+		u32 set_active_pcr_banks;
+		u32 get_result_of_set_active_pcr_banks;
+	} mixed_mode;
+};
+
+struct efi_file_path_dev_path {
+	struct efi_generic_dev_path header;
+	efi_char16_t filename[0];
+};
+
+union efi_device_path_from_text_protocol {
+	struct {
+		efi_device_path_protocol_t * (*convert_text_to_device_node)(const efi_char16_t *);
+		efi_device_path_protocol_t * (*convert_text_to_device_path)(const efi_char16_t *);
+	};
+	struct {
+		u32 convert_text_to_device_node;
+		u32 convert_text_to_device_path;
+	} mixed_mode;
+};
+
+typedef union efi_device_path_from_text_protocol efi_device_path_from_text_protocol_t;
+
+typedef struct {
+	u64 size;
+	u64 file_size;
+	u64 phys_size;
+	efi_time_t create_time;
+	efi_time_t last_access_time;
+	efi_time_t modification_time;
+	__u64 attribute;
+	efi_char16_t filename[0];
+} efi_file_info_t;
+
+union efi_file_protocol;
+
+typedef union efi_file_protocol efi_file_protocol_t;
+
+union efi_file_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
+		efi_status_t (*close)(efi_file_protocol_t *);
+		efi_status_t (*delete)(efi_file_protocol_t *);
+		efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
+		efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
+		efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
+		efi_status_t (*set_position)(efi_file_protocol_t *, u64);
+		efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
+		efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
+		efi_status_t (*flush)(efi_file_protocol_t *);
+	};
+	struct {
+		u64 revision;
+		u32 open;
+		u32 close;
+		u32 delete;
+		u32 read;
+		u32 write;
+		u32 get_position;
+		u32 set_position;
+		u32 get_info;
+		u32 set_info;
+		u32 flush;
+	} mixed_mode;
+};
+
+union efi_simple_file_system_protocol;
+
+typedef union efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
+
+union efi_simple_file_system_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
+	};
+	struct {
+		u64 revision;
+		u32 open_volume;
+	} mixed_mode;
+};
+
+struct finfo {
+	efi_file_info_t info;
+	efi_char16_t filename[256];
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+struct msgbuf;
+
+typedef long int (*sys_call_fn)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+struct futex_waitv;
+
+enum landlock_rule_type;
+
+struct landlock_ruleset_attr;
+
+struct mount_attr;
+
+struct iovec;
+
+struct io_uring_params;
+
+struct __aio_sigset;
+
+struct sched_attr;
+
+struct mmsghdr;
+
+struct user_msghdr;
+
+struct msqid_ds;
+
+struct mq_attr;
+
+struct getcpu_cache;
+
+struct new_utsname;
+
+struct tms;
+
+struct sched_param;
+
+struct kexec_segment;
+
+struct linux_dirent64;
+
+struct statfs;
+
+struct vdso_pcpu_data {
+	u32 node;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct loongarch_vdso_data {
+	struct vdso_pcpu_data pdata[64];
+	struct vdso_data data[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum perf_event_loongarch_regs {
+	PERF_REG_LOONGARCH_PC = 0,
+	PERF_REG_LOONGARCH_R1 = 1,
+	PERF_REG_LOONGARCH_R2 = 2,
+	PERF_REG_LOONGARCH_R3 = 3,
+	PERF_REG_LOONGARCH_R4 = 4,
+	PERF_REG_LOONGARCH_R5 = 5,
+	PERF_REG_LOONGARCH_R6 = 6,
+	PERF_REG_LOONGARCH_R7 = 7,
+	PERF_REG_LOONGARCH_R8 = 8,
+	PERF_REG_LOONGARCH_R9 = 9,
+	PERF_REG_LOONGARCH_R10 = 10,
+	PERF_REG_LOONGARCH_R11 = 11,
+	PERF_REG_LOONGARCH_R12 = 12,
+	PERF_REG_LOONGARCH_R13 = 13,
+	PERF_REG_LOONGARCH_R14 = 14,
+	PERF_REG_LOONGARCH_R15 = 15,
+	PERF_REG_LOONGARCH_R16 = 16,
+	PERF_REG_LOONGARCH_R17 = 17,
+	PERF_REG_LOONGARCH_R18 = 18,
+	PERF_REG_LOONGARCH_R19 = 19,
+	PERF_REG_LOONGARCH_R20 = 20,
+	PERF_REG_LOONGARCH_R21 = 21,
+	PERF_REG_LOONGARCH_R22 = 22,
+	PERF_REG_LOONGARCH_R23 = 23,
+	PERF_REG_LOONGARCH_R24 = 24,
+	PERF_REG_LOONGARCH_R25 = 25,
+	PERF_REG_LOONGARCH_R26 = 26,
+	PERF_REG_LOONGARCH_R27 = 27,
+	PERF_REG_LOONGARCH_R28 = 28,
+	PERF_REG_LOONGARCH_R29 = 29,
+	PERF_REG_LOONGARCH_R30 = 30,
+	PERF_REG_LOONGARCH_R31 = 31,
+	PERF_REG_LOONGARCH_MAX = 32,
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = -1,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+struct wq_flusher;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int flags;
+	struct pool_workqueue *cpu_pwqs;
+	struct pool_workqueue *numa_pwq_tbl[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	struct work_struct unbound_release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	long unsigned int watchdog_ts;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 75000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 25,
+	CREATE_COOLDOWN = 250,
+	RESCUER_NICE_LEVEL = -20,
+	HIGHPRI_NICE_LEVEL = -20,
+	WQ_NAME_LEN = 24,
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long int (*fn)(void *);
+	void *arg;
+	long int ret;
+};
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long int err;
+	int trapnr;
+	int signr;
+};
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+struct dl_bandwidth {
+	raw_spinlock_t dl_runtime_lock;
+	u64 dl_runtime;
+	u64 dl_period;
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
+typedef struct task_group *rt_rq_iter_t;
+
+struct rt_schedulable_data {
+	struct task_group *tg;
+	u64 rt_period;
+	u64 rt_runtime;
+};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+struct mcs_spinlock {
+	struct mcs_spinlock *next;
+	int locked;
+	int count;
+};
+
+struct qnode {
+	struct mcs_spinlock mcs;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum devkmsg_log_bits {
+	__DEVKMSG_LOG_BIT_ON = 0,
+	__DEVKMSG_LOG_BIT_OFF = 1,
+	__DEVKMSG_LOG_BIT_LOCK = 2,
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	char buf[8192];
+	struct printk_info info;
+	char text_buf[8192];
+	struct printk_record record;
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+struct irq_generic_chip_devres {
+	struct irq_chip_generic *gc;
+	u32 msk;
+	unsigned int clr;
+	unsigned int set;
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+struct node_vectors {
+	unsigned int id;
+	union {
+		unsigned int nvectors;
+		unsigned int ncpus;
+	};
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+struct io_tlb_area {
+	long unsigned int used;
+	unsigned int index;
+	spinlock_t lock;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+struct trace_event_raw_swiotlb_bounced {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u64 dma_mask;
+	dma_addr_t dev_addr;
+	size_t size;
+	bool force;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_swiotlb_bounced {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
+
+enum kcmp_type {
+	KCMP_FILE = 0,
+	KCMP_VM = 1,
+	KCMP_FILES = 2,
+	KCMP_FS = 3,
+	KCMP_SIGHAND = 4,
+	KCMP_IO = 5,
+	KCMP_SYSVSEM = 6,
+	KCMP_EPOLL_TFD = 7,
+	KCMP_TYPES = 8,
+};
+
+struct kcmp_epoll_slot {
+	__u32 efd;
+	__u32 tfd;
+	__u32 toff;
+};
+
+typedef struct sigevent sigevent_t;
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+typedef __u16 comp_t;
+
+struct acct_v3 {
+	char ac_flag;
+	char ac_version;
+	__u16 ac_tty;
+	__u32 ac_exitcode;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u32 ac_etime;
+	comp_t ac_utime;
+	comp_t ac_stime;
+	comp_t ac_mem;
+	comp_t ac_io;
+	comp_t ac_rw;
+	comp_t ac_minflt;
+	comp_t ac_majflt;
+	comp_t ac_swaps;
+	char ac_comm[16];
+};
+
+typedef struct acct_v3 acct_t;
+
+struct bsd_acct_struct {
+	struct fs_pin pin;
+	atomic_long_t count;
+	struct callback_head rcu;
+	struct mutex lock;
+	int active;
+	long unsigned int needcheck;
+	struct file *file;
+	struct pid_namespace *ns;
+	struct work_struct work;
+	struct completion done;
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+enum cgroup_opt_features {
+	OPT_FEATURE_COUNT = 0,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods___2 = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+enum audit_nfcfgop {
+	AUDIT_XT_OP_REGISTER = 0,
+	AUDIT_XT_OP_REPLACE = 1,
+	AUDIT_XT_OP_UNREGISTER = 2,
+	AUDIT_NFT_OP_TABLE_REGISTER = 3,
+	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
+	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
+	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
+	AUDIT_NFT_OP_RULE_REGISTER = 7,
+	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
+	AUDIT_NFT_OP_SET_REGISTER = 9,
+	AUDIT_NFT_OP_SET_UNREGISTER = 10,
+	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
+	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
+	AUDIT_NFT_OP_GEN_REGISTER = 13,
+	AUDIT_NFT_OP_OBJ_REGISTER = 14,
+	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
+	AUDIT_NFT_OP_OBJ_RESET = 16,
+	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
+	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
+	AUDIT_NFT_OP_INVALID = 19,
+};
+
+struct audit_aux_data {
+	struct audit_aux_data *next;
+	int type;
+};
+
+struct audit_chunk;
+
+struct audit_tree_refs {
+	struct audit_tree_refs *next;
+	struct audit_chunk *c[31];
+};
+
+struct audit_aux_data_pids {
+	struct audit_aux_data d;
+	pid_t target_pid[16];
+	kuid_t target_auid[16];
+	kuid_t target_uid[16];
+	unsigned int target_sessionid[16];
+	u32 target_sid[16];
+	char target_comm[256];
+	int pid_count;
+};
+
+struct audit_aux_data_bprm_fcaps {
+	struct audit_aux_data d;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	struct audit_cap_data old_pcap;
+	struct audit_cap_data new_pcap;
+};
+
+struct audit_nfcfgop_tab {
+	enum audit_nfcfgop op;
+	const char *s;
+};
+
+struct audit_chunk;
+
+struct audit_tree {
+	refcount_t count;
+	int goner;
+	struct audit_chunk *root;
+	struct list_head chunks;
+	struct list_head rules;
+	struct list_head list;
+	struct list_head same_root;
+	struct callback_head head;
+	char pathname[0];
+};
+
+struct audit_node {
+	struct list_head list;
+	struct audit_tree *owner;
+	unsigned int index;
+};
+
+struct audit_chunk {
+	struct list_head hash;
+	long unsigned int key;
+	struct fsnotify_mark *mark;
+	struct list_head trees;
+	int count;
+	atomic_long_t refs;
+	struct callback_head head;
+	struct audit_node owners[0];
+};
+
+struct audit_tree_mark {
+	struct fsnotify_mark mark;
+	struct audit_chunk *chunk;
+};
+
+enum {
+	HASH_SIZE = 128,
+};
+
+struct trace_export {
+	struct trace_export *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char *saved_cmdlines;
+};
+
+struct ftrace_stack {
+	long unsigned int calls[4096];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+enum blktrace_notify {
+	__BLK_TN_PROCESS = 0,
+	__BLK_TN_TIMESTAMP = 1,
+	__BLK_TN_MESSAGE = 2,
+	__BLK_TN_CGROUP = 256,
+};
+
+struct blk_io_trace {
+	__u32 magic;
+	__u32 sequence;
+	__u64 time;
+	__u64 sector;
+	__u32 bytes;
+	__u32 action;
+	__u32 pid;
+	__u32 device;
+	__u32 cpu;
+	__u16 error;
+	__u16 pdu_len;
+};
+
+struct blk_io_trace_remap {
+	__be32 device_from;
+	__be32 device_to;
+	__be64 sector_from;
+};
+
+enum {
+	Blktrace_setup = 1,
+	Blktrace_running = 2,
+	Blktrace_stopped = 3,
+};
+
+struct blk_user_trace_setup {
+	char name[32];
+	__u16 act_mask;
+	__u32 buf_size;
+	__u32 buf_nr;
+	__u64 start_lba;
+	__u64 end_lba;
+	__u32 pid;
+};
+
+typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
+struct bpf_perf_event_value {
+	__u64 counter;
+	__u64 enabled;
+	__u64 running;
+};
+
+struct btf_ptr {
+	void *ptr;
+	__u32 type_id;
+	__u32 flags;
+};
+
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct bpf_key {
+	struct key *key;
+	bool has_ref;
+};
+
+struct perf_event_query_bpf {
+	__u32 ids_len;
+	__u32 prog_cnt;
+	__u32 ids[0];
+};
+
+struct trace_event_raw_bpf_trace_printk {
+	struct trace_entry ent;
+	u32 __data_loc_bpf_string;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_trace_printk {
+	u32 bpf_string;
+};
+
+typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
+
+struct bpf_trace_module {
+	struct module *module;
+	struct list_head list;
+};
+
+typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
+
+typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
+
+struct bpf_trace_sample_data {
+	struct perf_sample_data sds[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_nested_pt_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_get_current_task)();
+
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+struct send_signal_irq_work {
+	struct irq_work irq_work;
+	struct task_struct *task;
+	u32 sig;
+	enum pid_type type;
+};
+
+typedef u64 (*btf_bpf_send_signal)(u32);
+
+typedef u64 (*btf_bpf_send_signal_thread)(u32);
+
+typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
+
+typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
+typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
+
+typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bpf_raw_tp_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct bpf_iter_seq_map_info {
+	u32 map_id;
+};
+
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+};
+
 struct bucket {
 	struct hlist_nulls_head head;
-	union {
-		raw_spinlock_t raw_lock;
-		spinlock_t lock;
-	};
+	raw_spinlock_t raw_lock;
 };
 
 struct htab_elem;
 
 struct bpf_htab {
 	struct bpf_map map;
+	struct bpf_mem_alloc ma;
+	struct bpf_mem_alloc pcpu_ma;
 	struct bucket *buckets;
 	void *elems;
 	long: 64;
 	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct pcpu_freelist freelist;
 		struct bpf_lru lru;
 	};
 	struct htab_elem **extra_elems;
+	struct percpu_counter pcount;
 	atomic_t count;
+	bool use_percpu_counter;
 	u32 n_buckets;
 	u32 elem_size;
 	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int *map_locked[8];
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -31018,14 +102439,13 @@
 		struct {
 			void *padding;
 			union {
-				struct bpf_htab *htab;
 				struct pcpu_freelist_node fnode;
 				struct htab_elem *batch_flink;
 			};
 		};
 	};
 	union {
-		struct callback_head rcu;
+		void *ptr_to_pptr;
 		struct bpf_lru_node lru_node;
 	};
 	u32 hash;
@@ -31041,69 +102461,13 @@
 	u32 skip_elems;
 };
 
-struct bpf_iter_seq_array_map_info {
-	struct bpf_map *map;
-	void *percpu_value_buf;
-	u32 index;
-};
-
-struct prog_poke_elem {
-	struct list_head list;
-	struct bpf_prog_aux *aux;
-};
-
-enum bpf_lru_list_type {
-	BPF_LRU_LIST_T_ACTIVE = 0,
-	BPF_LRU_LIST_T_INACTIVE = 1,
-	BPF_LRU_LIST_T_FREE = 2,
-	BPF_LRU_LOCAL_LIST_T_FREE = 3,
-	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
-};
-
-struct bpf_lpm_trie_key {
-	__u32 prefixlen;
-	__u8 data[0];
-};
-
-struct lpm_trie_node {
-	struct callback_head rcu;
-	struct lpm_trie_node *child[2];
-	u32 prefixlen;
-	u32 flags;
-	u8 data[0];
-};
-
-struct lpm_trie {
+struct bpf_bloom_filter {
 	struct bpf_map map;
-	struct lpm_trie_node *root;
-	size_t n_entries;
-	size_t max_prefixlen;
-	size_t data_size;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_cgroup_storage_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct rb_root root;
-	struct list_head list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_queue_stack {
-	struct bpf_map map;
-	raw_spinlock_t lock;
-	u32 head;
-	u32 tail;
-	u32 size;
-	char elements[0];
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 aligned_u32_count;
+	u32 nr_hash_funcs;
+	long unsigned int bitset[0];
 	long: 64;
 	long: 64;
 	long: 64;
@@ -31143,7 +102507,6 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
 	spinlock_t spinlock;
 	long: 32;
 	long: 64;
@@ -31153,6 +102516,1543 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	atomic_t busy;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -32153,6 +105053,1542 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	long unsigned int producer_pos;
 	long: 64;
 	long: 64;
@@ -32665,18 +107101,1555 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	char data[0];
 };
 
 struct bpf_ringbuf_map {
 	struct bpf_map map;
-	struct bpf_map_memory memory;
 	struct bpf_ringbuf *rb;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct bpf_ringbuf_hdr {
@@ -32694,866 +108667,17 @@
 
 typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
 
-enum {
-	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
-	BPF_SK_STORAGE_GET_F_CREATE = 1,
-};
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
 
-struct bpf_local_storage_map_bucket;
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_map {
-	struct bpf_map map;
-	struct bpf_local_storage_map_bucket *buckets;
-	u32 bucket_log;
-	u16 elem_size;
-	u16 cache_idx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_data;
+typedef u64 (*btf_bpf_user_ringbuf_drain)(struct bpf_map *, void *, void *, u64);
 
-struct bpf_local_storage {
-	struct bpf_local_storage_data *cache[16];
-	struct hlist_head list;
-	void *owner;
-	struct callback_head rcu;
-	raw_spinlock_t lock;
-};
+typedef u64 (*bpf_trampoline_enter_t)(struct bpf_prog *, struct bpf_tramp_run_ctx *);
 
-struct bpf_local_storage_map_bucket {
-	struct hlist_head list;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_data {
-	struct bpf_local_storage_map *smap;
-	u8 data[0];
-};
-
-struct bpf_local_storage_elem {
-	struct hlist_node map_node;
-	struct hlist_node snode;
-	struct bpf_local_storage *local_storage;
-	struct callback_head rcu;
-	long: 64;
-	struct bpf_local_storage_data sdata;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_local_storage_cache {
-	spinlock_t idx_lock;
-	u64 idx_usage_counts[16];
-};
-
-struct lsm_blob_sizes {
-	int lbs_cred;
-	int lbs_file;
-	int lbs_inode;
-	int lbs_ipc;
-	int lbs_msg_msg;
-	int lbs_task;
-};
-
-struct bpf_storage_blob {
-	struct bpf_local_storage *storage;
-};
-
-typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64);
-
-typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
-
-struct bpf_tramp_progs {
-	struct bpf_prog *progs[40];
-	int nr_progs;
-};
-
-struct btf_enum {
-	__u32 name_off;
-	__s32 val;
-};
-
-struct btf_array {
-	__u32 type;
-	__u32 index_type;
-	__u32 nelems;
-};
-
-struct btf_param {
-	__u32 name_off;
-	__u32 type;
-};
-
-enum {
-	BTF_VAR_STATIC = 0,
-	BTF_VAR_GLOBAL_ALLOCATED = 1,
-	BTF_VAR_GLOBAL_EXTERN = 2,
-};
-
-struct btf_var {
-	__u32 linkage;
-};
-
-struct bpf_flow_keys {
-	__u16 nhoff;
-	__u16 thoff;
-	__u16 addr_proto;
-	__u8 is_frag;
-	__u8 is_first_frag;
-	__u8 is_encap;
-	__u8 ip_proto;
-	__be16 n_proto;
-	__be16 sport;
-	__be16 dport;
-	union {
-		struct {
-			__be32 ipv4_src;
-			__be32 ipv4_dst;
-		};
-		struct {
-			__u32 ipv6_src[4];
-			__u32 ipv6_dst[4];
-		};
-	};
-	__u32 flags;
-	__be32 flow_label;
-};
-
-struct bpf_sock {
-	__u32 bound_dev_if;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 mark;
-	__u32 priority;
-	__u32 src_ip4;
-	__u32 src_ip6[4];
-	__u32 src_port;
-	__u32 dst_port;
-	__u32 dst_ip4;
-	__u32 dst_ip6[4];
-	__u32 state;
-	__s32 rx_queue_mapping;
-};
-
-struct __sk_buff {
-	__u32 len;
-	__u32 pkt_type;
-	__u32 mark;
-	__u32 queue_mapping;
-	__u32 protocol;
-	__u32 vlan_present;
-	__u32 vlan_tci;
-	__u32 vlan_proto;
-	__u32 priority;
-	__u32 ingress_ifindex;
-	__u32 ifindex;
-	__u32 tc_index;
-	__u32 cb[5];
-	__u32 hash;
-	__u32 tc_classid;
-	__u32 data;
-	__u32 data_end;
-	__u32 napi_id;
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 data_meta;
-	union {
-		struct bpf_flow_keys *flow_keys;
-	};
-	__u64 tstamp;
-	__u32 wire_len;
-	__u32 gso_segs;
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 gso_size;
-};
-
-struct xdp_md {
-	__u32 data;
-	__u32 data_end;
-	__u32 data_meta;
-	__u32 ingress_ifindex;
-	__u32 rx_queue_index;
-	__u32 egress_ifindex;
-};
-
-struct sk_msg_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 size;
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct sk_reuseport_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 len;
-	__u32 eth_protocol;
-	__u32 ip_protocol;
-	__u32 bind_inany;
-	__u32 hash;
-};
-
-struct bpf_sock_addr {
-	__u32 user_family;
-	__u32 user_ip4;
-	__u32 user_ip6[4];
-	__u32 user_port;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 msg_src_ip4;
-	__u32 msg_src_ip6[4];
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct bpf_sock_ops {
-	__u32 op;
-	union {
-		__u32 args[4];
-		__u32 reply;
-		__u32 replylong[4];
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 is_fullsock;
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 bpf_sock_ops_cb_flags;
-	__u32 state;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u32 sk_txhash;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *skb_data;
-	};
-	union {
-		void *skb_data_end;
-	};
-	__u32 skb_len;
-	__u32 skb_tcp_flags;
-};
-
-struct bpf_cgroup_dev_ctx {
-	__u32 access_type;
-	__u32 major;
-	__u32 minor;
-};
-
-struct bpf_sysctl {
-	__u32 write;
-	__u32 file_pos;
-};
-
-struct bpf_sockopt {
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *optval;
-	};
-	union {
-		void *optval_end;
-	};
-	__s32 level;
-	__s32 optname;
-	__s32 optlen;
-	__s32 retval;
-};
-
-struct bpf_sk_lookup {
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 family;
-	__u32 protocol;
-	__u32 remote_ip4;
-	__u32 remote_ip6[4];
-	__u32 remote_port;
-	__u32 local_ip4;
-	__u32 local_ip6[4];
-	__u32 local_port;
-};
-
-struct sk_reuseport_kern {
-	struct sk_buff *skb;
-	struct sock *sk;
-	struct sock *selected_sk;
-	void *data_end;
-	u32 hash;
-	u32 reuseport_id;
-	bool bind_inany;
-};
-
-struct bpf_flow_dissector {
-	struct bpf_flow_keys *flow_keys;
-	const struct sk_buff *skb;
-	void *data;
-	void *data_end;
-};
-
-struct inet_listen_hashbucket {
-	spinlock_t lock;
-	unsigned int count;
-	union {
-		struct hlist_head head;
-		struct hlist_nulls_head nulls_head;
-	};
-};
-
-struct inet_ehash_bucket;
-
-struct inet_bind_hashbucket;
-
-struct inet_hashinfo {
-	struct inet_ehash_bucket *ehash;
-	spinlock_t *ehash_locks;
-	unsigned int ehash_mask;
-	unsigned int ehash_locks_mask;
-	struct kmem_cache *bind_bucket_cachep;
-	struct inet_bind_hashbucket *bhash;
-	unsigned int bhash_size;
-	unsigned int lhash2_mask;
-	struct inet_listen_hashbucket *lhash2;
-	long: 64;
-	struct inet_listen_hashbucket listening_hash[32];
-};
-
-struct ip_ra_chain {
-	struct ip_ra_chain *next;
-	struct sock *sk;
-	union {
-		void (*destructor)(struct sock *);
-		struct sock *saved_sk;
-	};
-	struct callback_head rcu;
-};
-
-struct fib_table {
-	struct hlist_node tb_hlist;
-	u32 tb_id;
-	int tb_num_default;
-	struct callback_head rcu;
-	long unsigned int *tb_data;
-	long unsigned int __data[0];
-};
-
-struct inet_peer_base {
-	struct rb_root rb_root;
-	seqlock_t lock;
-	int total;
-};
-
-struct tcp_fastopen_context {
-	siphash_key_t key[2];
-	int num;
-	struct callback_head rcu;
-};
-
-struct xdp_txq_info {
-	struct net_device *dev;
-};
-
-struct xdp_buff {
-	void *data;
-	void *data_end;
-	void *data_meta;
-	void *data_hard_start;
-	struct xdp_rxq_info *rxq;
-	struct xdp_txq_info *txq;
-	u32 frame_sz;
-};
-
-struct bpf_sock_addr_kern {
-	struct sock *sk;
-	struct sockaddr *uaddr;
-	u64 tmp_reg;
-	void *t_ctx;
-};
-
-struct bpf_sock_ops_kern {
-	struct sock *sk;
-	union {
-		u32 args[4];
-		u32 reply;
-		u32 replylong[4];
-	};
-	struct sk_buff *syn_skb;
-	struct sk_buff *skb;
-	void *skb_data_end;
-	u8 op;
-	u8 is_fullsock;
-	u8 remaining_opt_len;
-	u64 temp;
-};
-
-struct bpf_sysctl_kern {
-	struct ctl_table_header *head;
-	struct ctl_table *table;
-	void *cur_val;
-	size_t cur_len;
-	void *new_val;
-	size_t new_len;
-	int new_updated;
-	int write;
-	loff_t *ppos;
-	u64 tmp_reg;
-};
-
-struct bpf_sockopt_kern {
-	struct sock *sk;
-	u8 *optval;
-	u8 *optval_end;
-	s32 level;
-	s32 optname;
-	s32 optlen;
-	s32 retval;
-};
-
-struct bpf_sk_lookup_kern {
-	u16 family;
-	u16 protocol;
-	__be16 sport;
-	u16 dport;
-	struct {
-		__be32 saddr;
-		__be32 daddr;
-	} v4;
-	struct {
-		const struct in6_addr *saddr;
-		const struct in6_addr *daddr;
-	} v6;
-	struct sock *selected_sk;
-	bool no_reuseport;
-};
-
-struct sock_reuseport {
-	struct callback_head rcu;
-	u16 max_socks;
-	u16 num_socks;
-	unsigned int synq_overflow_ts;
-	unsigned int reuseport_id;
-	unsigned int bind_inany: 1;
-	unsigned int has_conns: 1;
-	struct bpf_prog *prog;
-	struct sock *socks[0];
-};
-
-struct inet_ehash_bucket {
-	struct hlist_nulls_head chain;
-};
-
-struct inet_bind_hashbucket {
-	spinlock_t lock;
-	struct hlist_head chain;
-};
-
-struct ack_sample {
-	u32 pkts_acked;
-	s32 rtt_us;
-	u32 in_flight;
-};
-
-struct rate_sample {
-	u64 prior_mstamp;
-	u32 prior_delivered;
-	s32 delivered;
-	long int interval_us;
-	u32 snd_interval_us;
-	u32 rcv_interval_us;
-	long int rtt_us;
-	int losses;
-	u32 acked_sacked;
-	u32 prior_in_flight;
-	bool is_app_limited;
-	bool is_retrans;
-	bool is_ack_delayed;
-};
-
-struct sk_msg_sg {
-	u32 start;
-	u32 curr;
-	u32 end;
-	u32 size;
-	u32 copybreak;
-	long unsigned int copy;
-	struct scatterlist data[19];
-};
-
-struct sk_msg {
-	struct sk_msg_sg sg;
-	void *data;
-	void *data_end;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 flags;
-	struct sk_buff *skb;
-	struct sock *sk_redir;
-	struct sock *sk;
-	struct list_head list;
-};
-
-enum verifier_phase {
-	CHECK_META = 0,
-	CHECK_TYPE = 1,
-};
-
-struct resolve_vertex {
-	const struct btf_type *t;
-	u32 type_id;
-	u16 next_member;
-};
-
-enum visit_state {
-	NOT_VISITED = 0,
-	VISITED = 1,
-	RESOLVED = 2,
-};
-
-enum resolve_mode {
-	RESOLVE_TBD = 0,
-	RESOLVE_PTR = 1,
-	RESOLVE_STRUCT_OR_ARRAY = 2,
-};
-
-struct btf_sec_info {
-	u32 off;
-	u32 len;
-};
-
-struct btf_verifier_env {
-	struct btf *btf;
-	u8 *visit_states;
-	struct resolve_vertex stack[32];
-	struct bpf_verifier_log log;
-	u32 log_type_id;
-	u32 top_stack;
-	enum verifier_phase phase;
-	enum resolve_mode resolve_mode;
-};
-
-struct btf_show {
-	u64 flags;
-	void *target;
-	void (*showfn)(struct btf_show *, const char *, va_list);
-	const struct btf *btf;
-	struct {
-		u8 depth;
-		u8 depth_to_show;
-		u8 depth_check;
-		u8 array_member: 1;
-		u8 array_terminated: 1;
-		u16 array_encoding;
-		u32 type_id;
-		int status;
-		const struct btf_type *type;
-		const struct btf_member *member;
-		char name[80];
-	} state;
-	struct {
-		u32 size;
-		void *head;
-		void *data;
-		u8 safe[32];
-	} obj;
-};
-
-struct btf_kind_operations {
-	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
-	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
-	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
-	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
-};
-
-struct bpf_ctx_convert {
-	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
-	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
-	struct xdp_md BPF_PROG_TYPE_XDP_prog;
-	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
-	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
-	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
-	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
-	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
-	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
-	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
-	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
-	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
-	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
-	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
-	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
-	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
-	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
-	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
-	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
-	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
-	void *BPF_PROG_TYPE_TRACING_prog;
-	void *BPF_PROG_TYPE_TRACING_kern;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
-	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
-	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
-	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
-	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
-	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
-	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
-	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
-	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
-	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
-	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
-	void *BPF_PROG_TYPE_EXT_prog;
-	void *BPF_PROG_TYPE_EXT_kern;
-	void *BPF_PROG_TYPE_LSM_prog;
-	void *BPF_PROG_TYPE_LSM_kern;
-};
-
-enum {
-	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
-	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
-	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
-	__ctx_convertBPF_PROG_TYPE_XDP = 3,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
-	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
-	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
-	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
-	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
-	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
-	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
-	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
-	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
-	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
-	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
-	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
-	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
-	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
-	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
-	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
-	__ctx_convertBPF_PROG_TYPE_EXT = 27,
-	__ctx_convertBPF_PROG_TYPE_LSM = 28,
-	__ctx_convert_unused = 29,
-};
-
-enum bpf_struct_walk_result {
-	WALK_SCALAR = 0,
-	WALK_PTR = 1,
-	WALK_STRUCT = 2,
-};
-
-struct btf_show_snprintf {
-	struct btf_show show;
-	int len_left;
-	int len;
-};
-
-struct bpf_dispatcher_prog {
-	struct bpf_prog *prog;
-	refcount_t users;
-};
-
-struct bpf_dispatcher {
-	struct mutex mutex;
-	void *func;
-	struct bpf_dispatcher_prog progs[48];
-	int num_progs;
-	void *image;
-	u32 image_off;
-	struct bpf_ksym ksym;
-};
-
-struct bpf_devmap_val {
-	__u32 ifindex;
-	union {
-		int fd;
-		__u32 id;
-	} bpf_prog;
-};
-
-enum net_device_flags {
-	IFF_UP = 1,
-	IFF_BROADCAST = 2,
-	IFF_DEBUG = 4,
-	IFF_LOOPBACK = 8,
-	IFF_POINTOPOINT = 16,
-	IFF_NOTRAILERS = 32,
-	IFF_RUNNING = 64,
-	IFF_NOARP = 128,
-	IFF_PROMISC = 256,
-	IFF_ALLMULTI = 512,
-	IFF_MASTER = 1024,
-	IFF_SLAVE = 2048,
-	IFF_MULTICAST = 4096,
-	IFF_PORTSEL = 8192,
-	IFF_AUTOMEDIA = 16384,
-	IFF_DYNAMIC = 32768,
-	IFF_LOWER_UP = 65536,
-	IFF_DORMANT = 131072,
-	IFF_ECHO = 262144,
-};
-
-struct xdp_dev_bulk_queue {
-	struct xdp_frame *q[16];
-	struct list_head flush_node;
-	struct net_device *dev;
-	struct net_device *dev_rx;
-	unsigned int count;
-};
-
-enum netdev_cmd {
-	NETDEV_UP = 1,
-	NETDEV_DOWN = 2,
-	NETDEV_REBOOT = 3,
-	NETDEV_CHANGE = 4,
-	NETDEV_REGISTER = 5,
-	NETDEV_UNREGISTER = 6,
-	NETDEV_CHANGEMTU = 7,
-	NETDEV_CHANGEADDR = 8,
-	NETDEV_PRE_CHANGEADDR = 9,
-	NETDEV_GOING_DOWN = 10,
-	NETDEV_CHANGENAME = 11,
-	NETDEV_FEAT_CHANGE = 12,
-	NETDEV_BONDING_FAILOVER = 13,
-	NETDEV_PRE_UP = 14,
-	NETDEV_PRE_TYPE_CHANGE = 15,
-	NETDEV_POST_TYPE_CHANGE = 16,
-	NETDEV_POST_INIT = 17,
-	NETDEV_RELEASE = 18,
-	NETDEV_NOTIFY_PEERS = 19,
-	NETDEV_JOIN = 20,
-	NETDEV_CHANGEUPPER = 21,
-	NETDEV_RESEND_IGMP = 22,
-	NETDEV_PRECHANGEMTU = 23,
-	NETDEV_CHANGEINFODATA = 24,
-	NETDEV_BONDING_INFO = 25,
-	NETDEV_PRECHANGEUPPER = 26,
-	NETDEV_CHANGELOWERSTATE = 27,
-	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
-	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
-	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
-	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
-	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
-	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
-	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
-};
-
-struct netdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct bpf_dtab;
-
-struct bpf_dtab_netdev {
-	struct net_device *dev;
-	struct hlist_node index_hlist;
-	struct bpf_dtab *dtab;
-	struct bpf_prog *xdp_prog;
-	struct callback_head rcu;
-	unsigned int idx;
-	struct bpf_devmap_val val;
-};
-
-struct bpf_dtab {
-	struct bpf_map map;
-	struct bpf_dtab_netdev **netdev_map;
-	struct list_head list;
-	struct hlist_head *dev_index_head;
-	spinlock_t index_lock;
-	unsigned int items;
-	u32 n_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-};
+typedef void (*bpf_trampoline_exit_t)(struct bpf_prog *, u64, struct bpf_tramp_run_ctx *);
 
 struct bpf_cpumap_val {
 	__u32 qsize;
@@ -33563,76 +108687,6 @@
 	} bpf_prog;
 };
 
-typedef struct bio_vec skb_frag_t;
-
-struct skb_shared_hwtstamps {
-	ktime_t hwtstamp;
-};
-
-struct skb_shared_info {
-	__u8 __unused;
-	__u8 meta_len;
-	__u8 nr_frags;
-	__u8 tx_flags;
-	short unsigned int gso_size;
-	short unsigned int gso_segs;
-	struct sk_buff *frag_list;
-	struct skb_shared_hwtstamps hwtstamps;
-	unsigned int gso_type;
-	u32 tskey;
-	atomic_t dataref;
-	void *destructor_arg;
-	skb_frag_t frags[17];
-};
-
-struct bpf_nh_params {
-	u32 nh_family;
-	union {
-		u32 ipv4_nh;
-		struct in6_addr ipv6_nh;
-	};
-};
-
-struct bpf_redirect_info {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map *map;
-	u32 kern_flags;
-	struct bpf_nh_params nh;
-};
-
-struct ptr_ring {
-	int producer;
-	spinlock_t producer_lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int consumer_head;
-	int consumer_tail;
-	spinlock_t consumer_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int size;
-	int batch;
-	void **queue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct bpf_cpu_map_entry;
 
 struct xdp_bulk_queue {
@@ -33670,201 +108724,48 @@
 	long: 64;
 };
 
-struct rhlist_head {
-	struct rhash_head rhead;
-	struct rhlist_head *next;
-};
-
-struct bpf_prog_offload_ops {
-	int (*insn_hook)(struct bpf_verifier_env *, int, int);
-	int (*finalize)(struct bpf_verifier_env *);
-	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
-	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
-	int (*prepare)(struct bpf_prog *);
-	int (*translate)(struct bpf_prog *);
-	void (*destroy)(struct bpf_prog *);
-};
-
-struct bpf_offload_dev {
-	const struct bpf_prog_offload_ops *ops;
-	struct list_head netdevs;
-	void *priv;
-};
-
-struct bpf_offload_netdev {
-	struct rhash_head l;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	struct list_head progs;
-	struct list_head maps;
-	struct list_head offdev_netdevs;
-};
-
-struct ns_get_path_bpf_prog_args {
-	struct bpf_prog *prog;
-	struct bpf_prog_info *info;
-};
-
-struct ns_get_path_bpf_map_args {
-	struct bpf_offloaded_map *offmap;
-	struct bpf_map_info *info;
-};
-
-struct bpf_netns_link {
-	struct bpf_link link;
-	enum bpf_attach_type type;
-	enum netns_bpf_attach_type netns_type;
-	struct net *net;
-	struct list_head node;
-};
-
-enum bpf_stack_build_id_status {
-	BPF_STACK_BUILD_ID_EMPTY = 0,
-	BPF_STACK_BUILD_ID_VALID = 1,
-	BPF_STACK_BUILD_ID_IP = 2,
-};
-
-struct bpf_stack_build_id {
-	__s32 status;
-	unsigned char build_id[20];
+struct bpf_iter__cgroup {
 	union {
-		__u64 offset;
-		__u64 ip;
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct cgroup *cgroup;
 	};
 };
 
-enum {
-	BPF_F_SKIP_FIELD_MASK = 255,
-	BPF_F_USER_STACK = 256,
-	BPF_F_FAST_STACK_CMP = 512,
-	BPF_F_REUSE_STACKID = 1024,
-	BPF_F_USER_BUILD_ID = 2048,
+struct cgroup_iter_priv {
+	struct cgroup_subsys_state *start_css;
+	bool visited_all;
+	bool terminate;
+	int order;
 };
 
-typedef __u32 Elf32_Addr;
-
-typedef __u16 Elf32_Half;
-
-typedef __u32 Elf32_Off;
-
-struct elf32_hdr {
-	unsigned char e_ident[16];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-};
-
-typedef struct elf32_hdr Elf32_Ehdr;
-
-struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-};
-
-typedef struct elf32_phdr Elf32_Phdr;
-
-typedef struct elf32_note Elf32_Nhdr;
-
-enum perf_callchain_context {
-	PERF_CONTEXT_HV = 4294967264,
-	PERF_CONTEXT_KERNEL = 4294967168,
-	PERF_CONTEXT_USER = 4294966784,
-	PERF_CONTEXT_GUEST = 4294965248,
-	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
-	PERF_CONTEXT_GUEST_USER = 4294964736,
-	PERF_CONTEXT_MAX = 4294963201,
-};
-
-struct stack_map_bucket {
-	struct pcpu_freelist_node fnode;
-	u32 hash;
-	u32 nr;
-	u64 data[0];
-};
-
-struct bpf_stack_map {
-	struct bpf_map map;
-	void *elems;
-	struct pcpu_freelist freelist;
-	u32 n_buckets;
-	struct stack_map_bucket *buckets[0];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct stack_map_irq_work {
-	struct irq_work irq_work;
-	struct mm_struct *mm;
-};
-
-typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
-
 enum {
 	BPF_F_SYSCTL_BASE_NAME = 1,
 };
 
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
 struct bpf_prog_list {
-	struct list_head node;
+	struct hlist_node node;
 	struct bpf_prog *prog;
 	struct bpf_cgroup_link *link;
 	struct bpf_cgroup_storage *storage[2];
 };
 
-struct qdisc_skb_cb {
-	struct {
-		unsigned int pkt_len;
-		u16 slave_dev_queue_mapping;
-		u16 tc_classid;
-	};
-	unsigned char data[20];
-	u16 mru;
-};
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
 
-struct bpf_skb_data_end {
-	struct qdisc_skb_cb qdisc_cb;
-	void *data_meta;
-	void *data_end;
-};
+typedef u64 (*btf_bpf_get_retval)();
 
-enum {
-	TCPF_ESTABLISHED = 2,
-	TCPF_SYN_SENT = 4,
-	TCPF_SYN_RECV = 8,
-	TCPF_FIN_WAIT1 = 16,
-	TCPF_FIN_WAIT2 = 32,
-	TCPF_TIME_WAIT = 64,
-	TCPF_CLOSE = 128,
-	TCPF_CLOSE_WAIT = 256,
-	TCPF_LAST_ACK = 512,
-	TCPF_LISTEN = 1024,
-	TCPF_CLOSING = 2048,
-	TCPF_NEW_SYN_RECV = 4096,
-};
+typedef u64 (*btf_bpf_set_retval)(int);
 
 typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
 
@@ -33874,1256 +108775,15 @@
 
 typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
 
-enum sock_type {
-	SOCK_STREAM = 1,
-	SOCK_DGRAM = 2,
-	SOCK_RAW = 3,
-	SOCK_RDM = 4,
-	SOCK_SEQPACKET = 5,
-	SOCK_DCCP = 6,
-	SOCK_PACKET = 10,
-};
-
-enum {
-	IPPROTO_IP = 0,
-	IPPROTO_ICMP = 1,
-	IPPROTO_IGMP = 2,
-	IPPROTO_IPIP = 4,
-	IPPROTO_TCP = 6,
-	IPPROTO_EGP = 8,
-	IPPROTO_PUP = 12,
-	IPPROTO_UDP = 17,
-	IPPROTO_IDP = 22,
-	IPPROTO_TP = 29,
-	IPPROTO_DCCP = 33,
-	IPPROTO_IPV6 = 41,
-	IPPROTO_RSVP = 46,
-	IPPROTO_GRE = 47,
-	IPPROTO_ESP = 50,
-	IPPROTO_AH = 51,
-	IPPROTO_MTP = 92,
-	IPPROTO_BEETPH = 94,
-	IPPROTO_ENCAP = 98,
-	IPPROTO_PIM = 103,
-	IPPROTO_COMP = 108,
-	IPPROTO_SCTP = 132,
-	IPPROTO_UDPLITE = 136,
-	IPPROTO_MPLS = 137,
-	IPPROTO_ETHERNET = 143,
-	IPPROTO_RAW = 255,
-	IPPROTO_MPTCP = 262,
-	IPPROTO_MAX = 263,
-};
-
-enum sock_flags {
-	SOCK_DEAD = 0,
-	SOCK_DONE = 1,
-	SOCK_URGINLINE = 2,
-	SOCK_KEEPOPEN = 3,
-	SOCK_LINGER = 4,
-	SOCK_DESTROY = 5,
-	SOCK_BROADCAST = 6,
-	SOCK_TIMESTAMP = 7,
-	SOCK_ZAPPED = 8,
-	SOCK_USE_WRITE_QUEUE = 9,
-	SOCK_DBG = 10,
-	SOCK_RCVTSTAMP = 11,
-	SOCK_RCVTSTAMPNS = 12,
-	SOCK_LOCALROUTE = 13,
-	SOCK_MEMALLOC = 14,
-	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
-	SOCK_FASYNC = 16,
-	SOCK_RXQ_OVFL = 17,
-	SOCK_ZEROCOPY = 18,
-	SOCK_WIFI_STATUS = 19,
-	SOCK_NOFCS = 20,
-	SOCK_FILTER_LOCKED = 21,
-	SOCK_SELECT_ERR_QUEUE = 22,
-	SOCK_RCU_FREE = 23,
-	SOCK_TXTIME = 24,
-	SOCK_XDP = 25,
-	SOCK_TSTAMP_NEW = 26,
-};
-
-struct reuseport_array {
-	struct bpf_map map;
-	struct sock *ptrs[0];
-};
-
-enum bpf_struct_ops_state {
-	BPF_STRUCT_OPS_STATE_INIT = 0,
-	BPF_STRUCT_OPS_STATE_INUSE = 1,
-	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
-};
-
-struct bpf_struct_ops_value {
-	refcount_t refcnt;
-	enum bpf_struct_ops_state state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	char data[0];
-};
-
-struct bpf_struct_ops_map {
-	struct bpf_map map;
-	const struct bpf_struct_ops *st_ops;
-	struct mutex lock;
-	struct bpf_prog **progs;
-	void *image;
-	struct bpf_struct_ops_value *uvalue;
-	struct bpf_struct_ops_value kvalue;
-};
-
-struct bpf_struct_ops_tcp_congestion_ops {
-	refcount_t refcnt;
-	enum bpf_struct_ops_state state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct tcp_congestion_ops data;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sembuf {
-	short unsigned int sem_num;
-	short int sem_op;
-	short int sem_flg;
-};
-
-enum key_need_perm {
-	KEY_NEED_UNSPECIFIED = 0,
-	KEY_NEED_VIEW = 1,
-	KEY_NEED_READ = 2,
-	KEY_NEED_WRITE = 3,
-	KEY_NEED_SEARCH = 4,
-	KEY_NEED_LINK = 5,
-	KEY_NEED_SETATTR = 6,
-	KEY_NEED_UNLINK = 7,
-	KEY_SYSADMIN_OVERRIDE = 8,
-	KEY_AUTHTOKEN_OVERRIDE = 9,
-	KEY_DEFER_PERM_CHECK = 10,
-};
-
-struct __key_reference_with_attributes;
-
-typedef struct __key_reference_with_attributes *key_ref_t;
-
-struct xfrm_sec_ctx {
-	__u8 ctx_doi;
-	__u8 ctx_alg;
-	__u16 ctx_len;
-	__u32 ctx_sid;
-	char ctx_str[0];
-};
-
-struct xfrm_user_sec_ctx {
-	__u16 len;
-	__u16 exttype;
-	__u8 ctx_alg;
-	__u8 ctx_doi;
-	__u16 ctx_len;
-};
-
-enum perf_branch_sample_type {
-	PERF_SAMPLE_BRANCH_USER = 1,
-	PERF_SAMPLE_BRANCH_KERNEL = 2,
-	PERF_SAMPLE_BRANCH_HV = 4,
-	PERF_SAMPLE_BRANCH_ANY = 8,
-	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
-	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
-	PERF_SAMPLE_BRANCH_IND_CALL = 64,
-	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
-	PERF_SAMPLE_BRANCH_IN_TX = 256,
-	PERF_SAMPLE_BRANCH_NO_TX = 512,
-	PERF_SAMPLE_BRANCH_COND = 1024,
-	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
-	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
-	PERF_SAMPLE_BRANCH_CALL = 8192,
-	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
-	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
-	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
-	PERF_SAMPLE_BRANCH_MAX = 262144,
-};
-
-enum perf_event_read_format {
-	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
-	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
-	PERF_FORMAT_ID = 4,
-	PERF_FORMAT_GROUP = 8,
-	PERF_FORMAT_MAX = 16,
-};
-
-enum perf_event_ioc_flags {
-	PERF_IOC_FLAG_GROUP = 1,
-};
-
-struct perf_event_header {
-	__u32 type;
-	__u16 misc;
-	__u16 size;
-};
-
-struct perf_ns_link_info {
-	__u64 dev;
-	__u64 ino;
-};
-
-enum {
-	NET_NS_INDEX = 0,
-	UTS_NS_INDEX = 1,
-	IPC_NS_INDEX = 2,
-	PID_NS_INDEX = 3,
-	USER_NS_INDEX = 4,
-	MNT_NS_INDEX = 5,
-	CGROUP_NS_INDEX = 6,
-	NR_NAMESPACES = 7,
-};
-
-enum perf_event_type {
-	PERF_RECORD_MMAP = 1,
-	PERF_RECORD_LOST = 2,
-	PERF_RECORD_COMM = 3,
-	PERF_RECORD_EXIT = 4,
-	PERF_RECORD_THROTTLE = 5,
-	PERF_RECORD_UNTHROTTLE = 6,
-	PERF_RECORD_FORK = 7,
-	PERF_RECORD_READ = 8,
-	PERF_RECORD_SAMPLE = 9,
-	PERF_RECORD_MMAP2 = 10,
-	PERF_RECORD_AUX = 11,
-	PERF_RECORD_ITRACE_START = 12,
-	PERF_RECORD_LOST_SAMPLES = 13,
-	PERF_RECORD_SWITCH = 14,
-	PERF_RECORD_SWITCH_CPU_WIDE = 15,
-	PERF_RECORD_NAMESPACES = 16,
-	PERF_RECORD_KSYMBOL = 17,
-	PERF_RECORD_BPF_EVENT = 18,
-	PERF_RECORD_CGROUP = 19,
-	PERF_RECORD_TEXT_POKE = 20,
-	PERF_RECORD_MAX = 21,
-};
-
-enum perf_addr_filter_action_t {
-	PERF_ADDR_FILTER_ACTION_STOP = 0,
-	PERF_ADDR_FILTER_ACTION_START = 1,
-	PERF_ADDR_FILTER_ACTION_FILTER = 2,
-};
-
-struct perf_addr_filter {
-	struct list_head entry;
-	struct path path;
-	long unsigned int offset;
-	long unsigned int size;
-	enum perf_addr_filter_action_t action;
-};
-
-struct swevent_hlist {
-	struct hlist_head heads[256];
-	struct callback_head callback_head;
-};
-
-struct pmu_event_list {
-	raw_spinlock_t lock;
-	struct list_head list;
-};
-
-struct perf_buffer {
-	refcount_t refcount;
-	struct callback_head callback_head;
-	int nr_pages;
-	int overwrite;
-	int paused;
-	atomic_t poll;
-	local_t head;
-	unsigned int nest;
-	local_t events;
-	local_t wakeup;
-	local_t lost;
-	long int watermark;
-	long int aux_watermark;
-	spinlock_t event_lock;
-	struct list_head event_list;
-	atomic_t mmap_count;
-	long unsigned int mmap_locked;
-	struct user_struct *mmap_user;
-	long int aux_head;
-	unsigned int aux_nest;
-	long int aux_wakeup;
-	long unsigned int aux_pgoff;
-	int aux_nr_pages;
-	int aux_overwrite;
-	atomic_t aux_mmap_count;
-	long unsigned int aux_mmap_locked;
-	void (*free_aux)(void *);
-	refcount_t aux_refcount;
-	int aux_in_sampling;
-	void **aux_pages;
-	void *aux_priv;
-	struct perf_event_mmap_page *user_page;
-	void *data_pages[0];
-};
-
-struct match_token {
-	int token;
-	const char *pattern;
-};
-
-enum {
-	MAX_OPT_ARGS = 3,
-};
-
-typedef struct {
-	char *from;
-	char *to;
-} substring_t;
-
-struct min_heap {
-	void *data;
-	int nr;
-	int size;
-};
-
-struct min_heap_callbacks {
-	int elem_size;
-	bool (*less)(const void *, const void *);
-	void (*swp)(void *, void *);
-};
-
-typedef int (*remote_function_f)(void *);
-
-struct remote_function_call {
-	struct task_struct *p;
-	remote_function_f func;
-	void *info;
-	int ret;
-};
-
-typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
-
-struct event_function_struct {
-	struct perf_event *event;
-	event_f func;
-	void *data;
-};
-
-enum event_type_t {
-	EVENT_FLEXIBLE = 1,
-	EVENT_PINNED = 2,
-	EVENT_TIME = 4,
-	EVENT_CPU = 8,
-	EVENT_ALL = 3,
-};
-
-struct stop_event_data {
-	struct perf_event *event;
-	unsigned int restart;
-};
-
-struct perf_read_data {
-	struct perf_event *event;
-	bool group;
-	int ret;
-};
-
-struct perf_read_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-typedef void perf_iterate_f(struct perf_event *, void *);
-
-struct remote_output {
-	struct perf_buffer *rb;
-	int err;
-};
-
-struct perf_task_event {
-	struct task_struct *task;
-	struct perf_event_context *task_ctx;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 ppid;
-		u32 tid;
-		u32 ptid;
-		u64 time;
-	} event_id;
-};
-
-struct perf_comm_event {
-	struct task_struct *task;
-	char *comm;
-	int comm_size;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-	} event_id;
-};
-
-struct perf_namespaces_event {
-	struct task_struct *task;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 nr_namespaces;
-		struct perf_ns_link_info link_info[7];
-	} event_id;
-};
-
-struct perf_cgroup_event {
-	char *path;
-	int path_size;
-	struct {
-		struct perf_event_header header;
-		u64 id;
-		char path[0];
-	} event_id;
-};
-
-struct perf_mmap_event {
-	struct vm_area_struct *vma;
-	const char *file_name;
-	int file_size;
-	int maj;
-	int min;
-	u64 ino;
-	u64 ino_generation;
-	u32 prot;
-	u32 flags;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 start;
-		u64 len;
-		u64 pgoff;
-	} event_id;
-};
-
-struct perf_switch_event {
-	struct task_struct *task;
-	struct task_struct *next_prev;
-	struct {
-		struct perf_event_header header;
-		u32 next_prev_pid;
-		u32 next_prev_tid;
-	} event_id;
-};
-
-struct perf_ksymbol_event {
-	const char *name;
-	int name_len;
-	struct {
-		struct perf_event_header header;
-		u64 addr;
-		u32 len;
-		u16 ksym_type;
-		u16 flags;
-	} event_id;
-};
-
-struct perf_bpf_event {
-	struct bpf_prog *prog;
-	struct {
-		struct perf_event_header header;
-		u16 type;
-		u16 flags;
-		u32 id;
-		u8 tag[8];
-	} event_id;
-};
-
-struct perf_text_poke_event {
-	const void *old_bytes;
-	const void *new_bytes;
-	size_t pad;
-	u16 old_len;
-	u16 new_len;
-	struct {
-		struct perf_event_header header;
-		u64 addr;
-	} event_id;
-};
-
-struct swevent_htable {
-	struct swevent_hlist *swevent_hlist;
-	struct mutex hlist_mutex;
-	int hlist_refcount;
-	int recursion[4];
-};
-
-enum perf_probe_config {
-	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
-	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
-	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
-};
-
-enum {
-	IF_ACT_NONE = 4294967295,
-	IF_ACT_FILTER = 0,
-	IF_ACT_START = 1,
-	IF_ACT_STOP = 2,
-	IF_SRC_FILE = 3,
-	IF_SRC_KERNEL = 4,
-	IF_SRC_FILEADDR = 5,
-	IF_SRC_KERNELADDR = 6,
-};
-
-enum {
-	IF_STATE_ACTION = 0,
-	IF_STATE_SOURCE = 1,
-	IF_STATE_END = 2,
-};
-
-struct perf_aux_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-struct perf_aux_event___2 {
-	struct perf_event_header header;
-	u64 offset;
-	u64 size;
-	u64 flags;
-};
-
-struct callchain_cpus_entries {
-	struct callback_head callback_head;
-	struct perf_callchain_entry *cpu_entries[0];
-};
-
-struct bp_cpuinfo {
-	unsigned int cpu_pinned;
-	unsigned int *tsk_pinned;
-	unsigned int flexible;
-};
-
-struct bp_busy_slots {
-	unsigned int pinned;
-	unsigned int flexible;
-};
-
-struct compact_control;
-
-struct capture_control {
-	struct compact_control *cc;
-	struct page *page;
-};
-
-typedef u32 uprobe_opcode_t;
-
-struct uprobe {
-	struct rb_node rb_node;
-	refcount_t ref;
-	struct rw_semaphore register_rwsem;
-	struct rw_semaphore consumer_rwsem;
-	struct list_head pending_list;
-	struct uprobe_consumer *consumers;
-	struct inode *inode;
-	loff_t offset;
-	loff_t ref_ctr_offset;
-	long unsigned int flags;
-	struct arch_uprobe arch;
-};
-
-struct xol_area {
-	wait_queue_head_t wq;
-	atomic_t slot_count;
-	long unsigned int *bitmap;
-	struct vm_special_mapping xol_mapping;
-	struct page *pages[2];
-	long unsigned int vaddr;
-};
-
-typedef long unsigned int vm_flags_t;
-
-struct page_vma_mapped_walk {
-	struct page *page;
-	struct vm_area_struct *vma;
-	long unsigned int address;
-	pmd_t *pmd;
-	pte_t *pte;
-	spinlock_t *ptl;
-	unsigned int flags;
-};
-
-struct compact_control {
-	struct list_head freepages;
-	struct list_head migratepages;
-	unsigned int nr_freepages;
-	unsigned int nr_migratepages;
-	long unsigned int free_pfn;
-	long unsigned int migrate_pfn;
-	long unsigned int fast_start_pfn;
-	struct zone *zone;
-	long unsigned int total_migrate_scanned;
-	long unsigned int total_free_scanned;
-	short unsigned int fast_search_fail;
-	short int search_order;
-	const gfp_t gfp_mask;
-	int order;
-	int migratetype;
-	const unsigned int alloc_flags;
-	const int highest_zoneidx;
-	enum migrate_mode mode;
-	bool ignore_skip_hint;
-	bool no_set_skip_hint;
-	bool ignore_block_suitable;
-	bool direct_compaction;
-	bool proactive_compaction;
-	bool whole_zone;
-	bool contended;
-	bool rescan;
-	bool alloc_contig;
-};
-
-struct delayed_uprobe {
-	struct list_head list;
-	struct uprobe *uprobe;
-	struct mm_struct *mm;
-};
-
-struct map_info {
-	struct map_info *next;
-	struct mm_struct *mm;
-	long unsigned int vaddr;
-};
-
-struct parallel_data;
-
-struct padata_priv {
-	struct list_head list;
-	struct parallel_data *pd;
-	int cb_cpu;
-	unsigned int seq_nr;
-	int info;
-	void (*parallel)(struct padata_priv *);
-	void (*serial)(struct padata_priv *);
-};
-
-struct padata_cpumask {
-	cpumask_var_t pcpu;
-	cpumask_var_t cbcpu;
-};
-
-struct padata_shell;
-
-struct padata_list;
-
-struct padata_serial_queue;
-
-struct parallel_data {
-	struct padata_shell *ps;
-	struct padata_list *reorder_list;
-	struct padata_serial_queue *squeue;
-	atomic_t refcnt;
-	unsigned int seq_nr;
-	unsigned int processed;
-	int cpu;
-	struct padata_cpumask cpumask;
-	struct work_struct reorder_work;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct padata_list {
-	struct list_head list;
-	spinlock_t lock;
-};
-
-struct padata_serial_queue {
-	struct padata_list serial;
-	struct work_struct work;
-	struct parallel_data *pd;
-};
-
-struct padata_instance;
-
-struct padata_shell {
-	struct padata_instance *pinst;
-	struct parallel_data *pd;
-	struct parallel_data *opd;
-	struct list_head list;
-};
-
-struct padata_instance {
-	struct hlist_node cpu_online_node;
-	struct hlist_node cpu_dead_node;
-	struct workqueue_struct *parallel_wq;
-	struct workqueue_struct *serial_wq;
-	struct list_head pslist;
-	struct padata_cpumask cpumask;
-	struct kobject kobj;
-	struct mutex lock;
-	u8 flags;
-};
-
-struct padata_mt_job {
-	void (*thread_fn)(long unsigned int, long unsigned int, void *);
-	void *fn_arg;
-	long unsigned int start;
-	long unsigned int size;
-	long unsigned int align;
-	long unsigned int min_chunk;
-	int max_threads;
-};
-
-struct padata_work {
-	struct work_struct pw_work;
-	struct list_head pw_list;
-	void *pw_data;
-};
-
-struct padata_mt_job_state {
-	spinlock_t lock;
-	struct completion completion;
-	struct padata_mt_job *job;
-	int nworks;
-	int nworks_fini;
-	long unsigned int chunk_size;
-};
-
-struct padata_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
-	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
-};
-
-struct static_key_mod {
-	struct static_key_mod *next;
-	struct jump_entry *entries;
-	struct module *mod;
-};
-
-struct static_key_deferred {
-	struct static_key key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-enum rseq_cpu_id_state {
-	RSEQ_CPU_ID_UNINITIALIZED = 4294967295,
-	RSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294,
-};
-
-enum rseq_flags {
-	RSEQ_FLAG_UNREGISTER = 1,
-};
-
-enum rseq_cs_flags {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
-};
-
-struct rseq_cs {
-	__u32 version;
-	__u32 flags;
-	__u64 start_ip;
-	__u64 post_commit_offset;
-	__u64 abort_ip;
-};
-
-struct trace_event_raw_rseq_update {
-	struct trace_entry ent;
-	s32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_rseq_ip_fixup {
-	struct trace_entry ent;
-	long unsigned int regs_ip;
-	long unsigned int start_ip;
-	long unsigned int post_commit_offset;
-	long unsigned int abort_ip;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rseq_update {};
-
-struct trace_event_data_offsets_rseq_ip_fixup {};
-
-typedef void (*btf_trace_rseq_update)(void *, struct task_struct *);
-
-typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-struct watch;
-
-struct watch_list {
-	struct callback_head rcu;
-	struct hlist_head watchers;
-	void (*release_watch)(struct watch *);
-	spinlock_t lock;
-};
-
-enum watch_notification_type {
-	WATCH_TYPE_META = 0,
-	WATCH_TYPE_KEY_NOTIFY = 1,
-	WATCH_TYPE__NR = 2,
-};
-
-enum watch_meta_notification_subtype {
-	WATCH_META_REMOVAL_NOTIFICATION = 0,
-	WATCH_META_LOSS_NOTIFICATION = 1,
-};
-
-struct watch_notification {
-	__u32 type: 24;
-	__u32 subtype: 8;
-	__u32 info;
-};
-
-struct watch_notification_type_filter {
-	__u32 type;
-	__u32 info_filter;
-	__u32 info_mask;
-	__u32 subtype_filter[8];
-};
-
-struct watch_notification_filter {
-	__u32 nr_filters;
-	__u32 __reserved;
-	struct watch_notification_type_filter filters[0];
-};
-
-struct watch_notification_removal {
-	struct watch_notification watch;
-	__u64 id;
-};
-
-struct watch_type_filter {
-	enum watch_notification_type type;
-	__u32 subtype_filter[1];
-	__u32 info_filter;
-	__u32 info_mask;
-};
-
-struct watch_filter {
-	union {
-		struct callback_head rcu;
-		long unsigned int type_filter[2];
-	};
-	u32 nr_filters;
-	struct watch_type_filter filters[0];
-};
-
-struct watch_queue {
-	struct callback_head rcu;
-	struct watch_filter *filter;
-	struct pipe_inode_info *pipe;
-	struct hlist_head watches;
-	struct page **notes;
-	long unsigned int *notes_bitmap;
-	struct kref usage;
-	spinlock_t lock;
-	unsigned int nr_notes;
-	unsigned int nr_pages;
-	bool defunct;
-};
-
-struct watch {
-	union {
-		struct callback_head rcu;
-		u32 info_id;
-	};
-	struct watch_queue *queue;
-	struct hlist_node queue_node;
-	struct watch_list *watch_list;
-	struct hlist_node list_node;
-	const struct cred *cred;
-	void *private;
-	u64 id;
-	struct kref usage;
-};
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
 
 struct pkcs7_message;
 
-typedef int __kernel_rwf_t;
-
-enum positive_aop_returns {
-	AOP_WRITEPAGE_ACTIVATE = 524288,
-	AOP_TRUNCATED_PAGE = 524289,
-};
-
-struct vm_event_state {
-	long unsigned int event[95];
-};
-
-enum iter_type {
-	ITER_IOVEC = 4,
-	ITER_KVEC = 8,
-	ITER_BVEC = 16,
-	ITER_PIPE = 32,
-	ITER_DISCARD = 64,
-};
-
-enum mapping_flags {
-	AS_EIO = 0,
-	AS_ENOSPC = 1,
-	AS_MM_ALL_LOCKS = 2,
-	AS_UNEVICTABLE = 3,
-	AS_EXITING = 4,
-	AS_NO_WRITEBACK_TAGS = 5,
-	AS_THP_SUPPORT = 6,
-};
-
-struct wait_page_key {
-	struct page *page;
-	int bit_nr;
-	int page_match;
-};
-
-struct pagevec {
-	unsigned char nr;
-	bool percpu_pvec_drained;
-	struct page *pages[15];
-};
-
-struct fid {
-	union {
-		struct {
-			u32 ino;
-			u32 gen;
-			u32 parent_ino;
-			u32 parent_gen;
-		} i32;
-		struct {
-			u32 block;
-			u16 partref;
-			u16 parent_partref;
-			u32 generation;
-			u32 parent_block;
-			u32 parent_generation;
-		} udf;
-		__u32 raw[0];
-	};
-};
-
-struct trace_event_raw_mm_filemap_op_page_cache {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	long unsigned int i_ino;
-	long unsigned int index;
-	dev_t s_dev;
-	char __data[0];
-};
-
-struct trace_event_raw_filemap_set_wb_err {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t errseq;
-	char __data[0];
-};
-
-struct trace_event_raw_file_check_and_advance_wb_err {
-	struct trace_entry ent;
-	struct file *file;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t old;
-	errseq_t new;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_filemap_op_page_cache {};
-
-struct trace_event_data_offsets_filemap_set_wb_err {};
-
-struct trace_event_data_offsets_file_check_and_advance_wb_err {};
-
-typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
-
-typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
-
-enum behavior {
-	EXCLUSIVE = 0,
-	SHARED = 1,
-	DROP = 2,
-};
-
-struct reciprocal_value {
-	u32 m;
-	u8 sh1;
-	u8 sh2;
-};
-
-struct array_cache;
-
-struct kmem_cache_node;
-
-struct kmem_cache {
-	struct array_cache *cpu_cache;
-	unsigned int batchcount;
-	unsigned int limit;
-	unsigned int shared;
-	unsigned int size;
-	struct reciprocal_value reciprocal_buffer_size;
-	slab_flags_t flags;
-	unsigned int num;
-	unsigned int gfporder;
-	gfp_t allocflags;
-	size_t colour;
-	unsigned int colour_off;
-	struct kmem_cache *freelist_cache;
-	unsigned int freelist_size;
-	void (*ctor)(void *);
-	const char *name;
-	struct list_head list;
-	int refcount;
-	int object_size;
-	int align;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct kmem_cache_node *node[128];
-};
-
-struct alien_cache;
-
-struct kmem_cache_node {
-	spinlock_t list_lock;
-	struct list_head slabs_partial;
-	struct list_head slabs_full;
-	struct list_head slabs_free;
-	long unsigned int total_slabs;
-	long unsigned int free_slabs;
-	long unsigned int free_objects;
-	unsigned int free_limit;
-	unsigned int colour_next;
-	struct array_cache *shared;
-	struct alien_cache **alien;
-	long unsigned int next_reap;
-	int free_touched;
-};
-
-enum oom_constraint {
-	CONSTRAINT_NONE = 0,
-	CONSTRAINT_CPUSET = 1,
-	CONSTRAINT_MEMORY_POLICY = 2,
-	CONSTRAINT_MEMCG = 3,
-};
-
-struct oom_control {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct mem_cgroup *memcg;
-	const gfp_t gfp_mask;
-	const int order;
-	long unsigned int totalpages;
-	struct task_struct *chosen;
-	long int chosen_points;
-	enum oom_constraint constraint;
-};
-
-struct mmu_table_batch {
-	struct callback_head rcu;
-	unsigned int nr;
-	void *tables[0];
-};
-
-struct mmu_gather_batch {
-	struct mmu_gather_batch *next;
-	unsigned int nr;
-	unsigned int max;
-	struct page *pages[0];
-};
-
-struct mmu_gather {
-	struct mm_struct *mm;
-	struct mmu_table_batch *batch;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int fullmm: 1;
-	unsigned int need_flush_all: 1;
-	unsigned int freed_tables: 1;
-	unsigned int cleared_ptes: 1;
-	unsigned int cleared_pmds: 1;
-	unsigned int cleared_puds: 1;
-	unsigned int cleared_p4ds: 1;
-	unsigned int vma_exec: 1;
-	unsigned int vma_huge: 1;
-	unsigned int batch_count;
-	struct mmu_gather_batch *active;
-	struct mmu_gather_batch local;
-	struct page *__pages[8];
-};
-
-enum compact_priority {
-	COMPACT_PRIO_SYNC_FULL = 0,
-	MIN_COMPACT_PRIORITY = 0,
-	COMPACT_PRIO_SYNC_LIGHT = 1,
-	MIN_COMPACT_COSTLY_PRIORITY = 1,
-	DEF_COMPACT_PRIORITY = 1,
-	COMPACT_PRIO_ASYNC = 2,
-	INIT_COMPACT_PRIORITY = 2,
-};
-
-enum compact_result {
-	COMPACT_NOT_SUITABLE_ZONE = 0,
-	COMPACT_SKIPPED = 1,
-	COMPACT_DEFERRED = 2,
-	COMPACT_NO_SUITABLE_PAGE = 3,
-	COMPACT_CONTINUE = 4,
-	COMPACT_COMPLETE = 5,
-	COMPACT_PARTIAL_SKIPPED = 6,
-	COMPACT_CONTENDED = 7,
-	COMPACT_SUCCESS = 8,
-};
-
-struct trace_event_raw_oom_score_adj_update {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_reclaim_retry_zone {
-	struct trace_entry ent;
-	int node;
-	int zone_idx;
-	int order;
-	long unsigned int reclaimable;
-	long unsigned int available;
-	long unsigned int min_wmark;
-	int no_progress_loops;
-	bool wmark_check;
-	char __data[0];
-};
-
-struct trace_event_raw_mark_victim {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_wake_reaper {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_start_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_finish_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_skip_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_compact_retry {
-	struct trace_entry ent;
-	int order;
-	int priority;
-	int result;
-	int retries;
-	int max_retries;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_oom_score_adj_update {};
-
-struct trace_event_data_offsets_reclaim_retry_zone {};
-
-struct trace_event_data_offsets_mark_victim {};
-
-struct trace_event_data_offsets_wake_reaper {};
-
-struct trace_event_data_offsets_start_task_reaping {};
-
-struct trace_event_data_offsets_finish_task_reaping {};
-
-struct trace_event_data_offsets_skip_task_reaping {};
-
-struct trace_event_data_offsets_compact_retry {};
-
-typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
-
-typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
-
-typedef void (*btf_trace_mark_victim)(void *, int);
-
-typedef void (*btf_trace_wake_reaper)(void *, int);
-
-typedef void (*btf_trace_start_task_reaping)(void *, int);
-
-typedef void (*btf_trace_finish_task_reaping)(void *, int);
-
-typedef void (*btf_trace_skip_task_reaping)(void *, int);
-
-typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
-
-enum wb_congested_state {
-	WB_async_congested = 0,
-	WB_sync_congested = 1,
-};
-
-enum {
-	XA_CHECK_SCHED = 4096,
-};
-
-enum wb_state {
-	WB_registered = 0,
-	WB_writeback_running = 1,
-	WB_has_dirty_io = 2,
-	WB_start_all = 3,
-};
-
-enum {
-	BLK_RW_ASYNC = 0,
-	BLK_RW_SYNC = 1,
-};
-
 struct wb_lock_cookie {
 	bool locked;
 	long unsigned int flags;
 };
 
-typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
-
 struct dirty_throttle_control {
 	struct wb_domain *dom;
 	struct dirty_throttle_control *gdtc;
@@ -35139,420 +108799,12 @@
 	long unsigned int pos_ratio;
 };
 
-typedef void compound_page_dtor(struct page *);
-
-typedef struct {} local_lock_t;
-
-struct trace_event_raw_mm_lru_insertion {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	int lru;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_lru_activate {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_lru_insertion {};
-
-struct trace_event_data_offsets_mm_lru_activate {};
-
-typedef void (*btf_trace_mm_lru_insertion)(void *, struct page *, int);
-
-typedef void (*btf_trace_mm_lru_activate)(void *, struct page *);
-
-struct lru_rotate {
-	local_lock_t lock;
-	struct pagevec pvec;
-};
-
-struct lru_pvecs {
-	local_lock_t lock;
-	struct pagevec lru_add;
-	struct pagevec lru_deactivate_file;
-	struct pagevec lru_deactivate;
-	struct pagevec lru_lazyfree;
-	struct pagevec activate_page;
-};
-
-enum lruvec_flags {
-	LRUVEC_CONGESTED = 0,
-};
-
-enum pgdat_flags {
-	PGDAT_DIRTY = 0,
-	PGDAT_WRITEBACK = 1,
-	PGDAT_RECLAIM_LOCKED = 2,
-};
-
-struct reclaim_stat {
-	unsigned int nr_dirty;
-	unsigned int nr_unqueued_dirty;
-	unsigned int nr_congested;
-	unsigned int nr_writeback;
-	unsigned int nr_immediate;
-	unsigned int nr_pageout;
-	unsigned int nr_activate[2];
-	unsigned int nr_ref_keep;
-	unsigned int nr_unmap_fail;
-	unsigned int nr_lazyfree_fail;
-};
-
-enum ttu_flags {
-	TTU_MIGRATION = 1,
-	TTU_MUNLOCK = 2,
-	TTU_SPLIT_HUGE_PMD = 4,
-	TTU_IGNORE_MLOCK = 8,
-	TTU_IGNORE_HWPOISON = 32,
-	TTU_BATCH_FLUSH = 64,
-	TTU_RMAP_LOCKED = 128,
-	TTU_SPLIT_FREEZE = 256,
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_wake {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_wakeup_kswapd {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
-	struct trace_entry ent;
-	long unsigned int nr_reclaimed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_start {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	void *shrink;
-	int nid;
-	long int nr_objects_to_shrink;
-	gfp_t gfp_flags;
-	long unsigned int cache_items;
-	long long unsigned int delta;
-	long unsigned int total_scan;
-	int priority;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_end {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	int nid;
-	void *shrink;
-	long int unused_scan;
-	long int new_scan;
-	int retval;
-	long int total_scan;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_isolate {
-	struct trace_entry ent;
-	int highest_zoneidx;
-	int order;
-	long unsigned int nr_requested;
-	long unsigned int nr_scanned;
-	long unsigned int nr_skipped;
-	long unsigned int nr_taken;
-	isolate_mode_t isolate_mode;
-	int lru;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_writepage {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int nr_congested;
-	long unsigned int nr_immediate;
-	unsigned int nr_activate0;
-	unsigned int nr_activate1;
-	long unsigned int nr_ref_keep;
-	long unsigned int nr_unmap_fail;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_active {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_taken;
-	long unsigned int nr_active;
-	long unsigned int nr_deactivated;
-	long unsigned int nr_referenced;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_inactive_list_is_low {
-	struct trace_entry ent;
-	int nid;
-	int reclaim_idx;
-	long unsigned int total_inactive;
-	long unsigned int inactive;
-	long unsigned int total_active;
-	long unsigned int active;
-	long unsigned int ratio;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_node_reclaim_begin {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
-
-struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
-
-struct trace_event_data_offsets_mm_shrink_slab_start {};
-
-struct trace_event_data_offsets_mm_shrink_slab_end {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
-
-struct trace_event_data_offsets_mm_vmscan_writepage {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
-
-struct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};
-
-struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
-
-typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
-
-typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
-
-typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
-
-struct scan_control {
-	long unsigned int nr_to_reclaim;
-	nodemask_t *nodemask;
-	struct mem_cgroup *target_mem_cgroup;
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	unsigned int may_deactivate: 2;
-	unsigned int force_deactivate: 1;
-	unsigned int skipped_deactivate: 1;
-	unsigned int may_writepage: 1;
-	unsigned int may_unmap: 1;
-	unsigned int may_swap: 1;
-	unsigned int memcg_low_reclaim: 1;
-	unsigned int memcg_low_skipped: 1;
-	unsigned int hibernation_mode: 1;
-	unsigned int compaction_ready: 1;
-	unsigned int cache_trim_mode: 1;
-	unsigned int file_is_tiny: 1;
-	s8 order;
-	s8 priority;
-	s8 reclaim_idx;
-	gfp_t gfp_mask;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	struct {
-		unsigned int dirty;
-		unsigned int unqueued_dirty;
-		unsigned int congested;
-		unsigned int writeback;
-		unsigned int immediate;
-		unsigned int file_taken;
-		unsigned int taken;
-	} nr;
-	struct reclaim_state reclaim_state;
-};
-
-typedef enum {
-	PAGE_KEEP = 0,
-	PAGE_ACTIVATE = 1,
-	PAGE_SUCCESS = 2,
-	PAGE_CLEAN = 3,
-} pageout_t;
-
-enum page_references {
-	PAGEREF_RECLAIM = 0,
-	PAGEREF_RECLAIM_CLEAN = 1,
-	PAGEREF_KEEP = 2,
-	PAGEREF_ACTIVATE = 3,
-};
-
-enum scan_balance {
-	SCAN_EQUAL = 0,
-	SCAN_FRACT = 1,
-	SCAN_ANON = 2,
-	SCAN_FILE = 3,
-};
-
-enum transparent_hugepage_flag {
-	TRANSPARENT_HUGEPAGE_FLAG = 0,
-	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 1,
-	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 2,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 3,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 4,
-	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 5,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 6,
-	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 7,
-};
-
-struct xattr {
-	const char *name;
-	void *value;
-	size_t value_len;
-};
-
-struct constant_table {
-	const char *name;
-	int value;
-};
-
-enum {
-	MPOL_DEFAULT = 0,
-	MPOL_PREFERRED = 1,
-	MPOL_BIND = 2,
-	MPOL_INTERLEAVE = 3,
-	MPOL_LOCAL = 4,
-	MPOL_MAX = 5,
-};
-
-struct shared_policy {
-	struct rb_root root;
-	rwlock_t lock;
-};
-
-struct simple_xattrs {
-	struct list_head head;
-	spinlock_t lock;
-};
-
-struct simple_xattr {
-	struct list_head list;
-	char *name;
-	size_t size;
-	char value[0];
-};
-
-enum fid_type {
-	FILEID_ROOT = 0,
-	FILEID_INO32_GEN = 1,
-	FILEID_INO32_GEN_PARENT = 2,
-	FILEID_BTRFS_WITHOUT_PARENT = 77,
-	FILEID_BTRFS_WITH_PARENT = 78,
-	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
-	FILEID_UDF_WITHOUT_PARENT = 81,
-	FILEID_UDF_WITH_PARENT = 82,
-	FILEID_NILFS_WITHOUT_PARENT = 97,
-	FILEID_NILFS_WITH_PARENT = 98,
-	FILEID_FAT_WITHOUT_PARENT = 113,
-	FILEID_FAT_WITH_PARENT = 114,
-	FILEID_LUSTRE = 151,
-	FILEID_KERNFS = 254,
-	FILEID_INVALID = 255,
-};
-
-struct shmem_inode_info {
-	spinlock_t lock;
-	unsigned int seals;
-	long unsigned int flags;
-	long unsigned int alloced;
-	long unsigned int swapped;
-	struct list_head shrinklist;
-	struct list_head swaplist;
-	struct shared_policy policy;
-	struct simple_xattrs xattrs;
-	atomic_t stop_eviction;
-	struct inode vfs_inode;
-};
-
 struct shmem_sb_info {
 	long unsigned int max_blocks;
 	struct percpu_counter used_blocks;
 	long unsigned int max_inodes;
 	long unsigned int free_inodes;
-	spinlock_t stat_lock;
+	raw_spinlock_t stat_lock;
 	umode_t mode;
 	unsigned char huge;
 	kuid_t uid;
@@ -35566,15 +108818,6 @@
 	long unsigned int shrinklist_len;
 };
 
-enum sgp_type {
-	SGP_READ = 0,
-	SGP_CACHE = 1,
-	SGP_NOHUGE = 2,
-	SGP_HUGE = 3,
-	SGP_WRITE = 4,
-	SGP_FALLOC = 5,
-};
-
 struct shmem_falloc {
 	wait_queue_head_t *waitq;
 	long unsigned int start;
@@ -35596,727 +108839,118 @@
 };
 
 enum shmem_param {
-	Opt_gid = 0,
+	Opt_gid___3 = 0,
 	Opt_huge = 1,
-	Opt_mode = 2,
+	Opt_mode___4 = 2,
 	Opt_mpol = 3,
 	Opt_nr_blocks = 4,
-	Opt_nr_inodes = 5,
-	Opt_size = 6,
-	Opt_uid = 7,
+	Opt_nr_inodes___2 = 5,
+	Opt_size___2 = 6,
+	Opt_uid___3 = 7,
 	Opt_inode32 = 8,
 	Opt_inode64 = 9,
 };
 
-enum writeback_stat_item {
-	NR_DIRTY_THRESHOLD = 0,
-	NR_DIRTY_BG_THRESHOLD = 1,
-	NR_VM_WRITEBACK_STAT_ITEMS = 2,
-};
-
-struct contig_page_info {
-	long unsigned int free_pages;
-	long unsigned int free_blocks_total;
-	long unsigned int free_blocks_suitable;
-};
-
-struct radix_tree_iter {
-	long unsigned int index;
-	long unsigned int next_index;
-	long unsigned int tags;
-	struct xa_node *node;
-};
-
-enum {
-	RADIX_TREE_ITER_TAG_MASK = 15,
-	RADIX_TREE_ITER_TAGGED = 16,
-	RADIX_TREE_ITER_CONTIG = 32,
-};
-
-enum mminit_level {
-	MMINIT_WARNING = 0,
-	MMINIT_VERIFY = 1,
-	MMINIT_TRACE = 2,
-};
-
-struct pcpu_group_info {
-	int nr_units;
-	long unsigned int base_offset;
-	unsigned int *cpu_map;
-};
-
-struct pcpu_alloc_info {
-	size_t static_size;
-	size_t reserved_size;
-	size_t dyn_size;
-	size_t unit_size;
-	size_t atom_size;
-	size_t alloc_size;
-	size_t __ai_size;
-	int nr_groups;
-	struct pcpu_group_info groups[0];
-};
-
-typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);
-
-typedef void (*pcpu_fc_free_fn_t)(void *, size_t);
-
-typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
-
-struct trace_event_raw_percpu_alloc_percpu {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_free_percpu {
-	struct trace_entry ent;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_alloc_percpu_fail {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_create_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_destroy_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_percpu_alloc_percpu {};
-
-struct trace_event_data_offsets_percpu_free_percpu {};
-
-struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
-
-struct trace_event_data_offsets_percpu_create_chunk {};
-
-struct trace_event_data_offsets_percpu_destroy_chunk {};
-
-typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);
-
-typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
-
-typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
-
-typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
-
-typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
-
-enum pcpu_chunk_type {
-	PCPU_CHUNK_ROOT = 0,
-	PCPU_CHUNK_MEMCG = 1,
-	PCPU_NR_CHUNK_TYPES = 2,
-	PCPU_FAIL_ALLOC = 2,
-};
-
-struct pcpu_block_md {
-	int scan_hint;
-	int scan_hint_start;
-	int contig_hint;
-	int contig_hint_start;
-	int left_free;
-	int right_free;
-	int first_free;
-	int nr_bits;
-};
-
-struct pcpu_chunk {
-	struct list_head list;
-	int free_bytes;
-	struct pcpu_block_md chunk_md;
-	void *base_addr;
-	long unsigned int *alloc_map;
-	long unsigned int *bound_map;
-	struct pcpu_block_md *md_blocks;
-	void *data;
-	bool immutable;
-	int start_offset;
-	int end_offset;
-	struct obj_cgroup **obj_cgroups;
-	int nr_pages;
-	int nr_populated;
-	int nr_empty_pop_pages;
-	long unsigned int populated[0];
-};
-
-struct trace_event_raw_kmem_alloc {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_alloc_node {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	int node;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_free {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free_batched {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	gfp_t gfp_flags;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_pcpu_drain {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc_extfrag {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int alloc_order;
-	int fallback_order;
-	int alloc_migratetype;
-	int fallback_migratetype;
-	int change_ownership;
-	char __data[0];
-};
-
-struct trace_event_raw_rss_stat {
-	struct trace_entry ent;
-	unsigned int mm_id;
-	unsigned int curr;
-	int member;
-	long int size;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kmem_alloc {};
-
-struct trace_event_data_offsets_kmem_alloc_node {};
-
-struct trace_event_data_offsets_kmem_free {};
-
-struct trace_event_data_offsets_mm_page_free {};
-
-struct trace_event_data_offsets_mm_page_free_batched {};
-
-struct trace_event_data_offsets_mm_page_alloc {};
-
-struct trace_event_data_offsets_mm_page {};
-
-struct trace_event_data_offsets_mm_page_pcpu_drain {};
-
-struct trace_event_data_offsets_mm_page_alloc_extfrag {};
-
-struct trace_event_data_offsets_rss_stat {};
-
-typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
-
-typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
-
-typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
-
-typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
-
-typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);
-
-enum slab_state {
-	DOWN = 0,
-	PARTIAL = 1,
-	PARTIAL_NODE = 2,
-	UP = 3,
-	FULL = 4,
-};
-
-struct kmalloc_info_struct {
-	const char *name[3];
-	unsigned int size;
-};
-
-struct slabinfo {
-	long unsigned int active_objs;
-	long unsigned int num_objs;
-	long unsigned int active_slabs;
-	long unsigned int num_slabs;
-	long unsigned int shared_avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int shared;
-	unsigned int objects_per_slab;
-	unsigned int cache_order;
-};
-
-enum pageblock_bits {
-	PB_migrate = 0,
-	PB_migrate_end = 2,
-	PB_migrate_skip = 3,
-	NR_PAGEBLOCK_BITS = 4,
-};
-
-struct node___2 {
-	struct device dev;
-	struct list_head access_list;
-	struct work_struct node_work;
-	struct list_head cache_attrs;
-	struct device *cache_dev;
-};
-
-struct alloc_context {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct zoneref *preferred_zoneref;
-	int migratetype;
-	enum zone_type highest_zoneidx;
-	bool spread_dirty_pages;
-};
-
-struct trace_event_raw_mm_compaction_isolate_template {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int nr_scanned;
-	long unsigned int nr_taken;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_migratepages {
-	struct trace_entry ent;
-	long unsigned int nr_migrated;
-	long unsigned int nr_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_begin {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_end {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_try_to_compact_pages {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_mask;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_suitable_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_defer_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	unsigned int considered;
-	unsigned int defer_shift;
-	int order_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_kcompactd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_kcompactd_wake_template {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	enum zone_type highest_zoneidx;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_compaction_isolate_template {};
-
-struct trace_event_data_offsets_mm_compaction_migratepages {};
-
-struct trace_event_data_offsets_mm_compaction_begin {};
-
-struct trace_event_data_offsets_mm_compaction_end {};
-
-struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
-
-struct trace_event_data_offsets_mm_compaction_suitable_template {};
-
-struct trace_event_data_offsets_mm_compaction_defer_template {};
-
-struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
-
-struct trace_event_data_offsets_kcompactd_wake_template {};
-
-typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);
-
-typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);
-
-typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);
-
-typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
-
-typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
-
-typedef enum {
-	ISOLATE_ABORT = 0,
-	ISOLATE_NONE = 1,
-	ISOLATE_SUCCESS = 2,
-} isolate_migrate_t;
-
-struct anon_vma_chain {
-	struct vm_area_struct *vma;
-	struct anon_vma *anon_vma;
-	struct list_head same_vma;
-	struct rb_node rb;
-	long unsigned int rb_subtree_last;
-};
-
-struct rb_augment_callbacks {
-	void (*propagate)(struct rb_node *, struct rb_node *);
-	void (*copy)(struct rb_node *, struct rb_node *);
-	void (*rotate)(struct rb_node *, struct rb_node *);
-};
-
-enum lru_status {
-	LRU_REMOVED = 0,
-	LRU_REMOVED_RETRY = 1,
-	LRU_ROTATE = 2,
-	LRU_SKIP = 3,
-	LRU_RETRY = 4,
-};
-
-typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
-
-typedef struct {
-	long unsigned int pd;
-} hugepd_t;
-
-struct migration_target_control {
-	int nid;
-	nodemask_t *nmask;
-	gfp_t gfp_mask;
-};
-
-struct follow_page_context {
-	struct dev_pagemap *pgmap;
-	unsigned int page_mask;
-};
-
 typedef struct {
 	u64 val;
 } pfn_t;
 
-typedef unsigned int pgtbl_mod_mask;
-
-struct zap_details {
-	struct address_space *check_mapping;
-	long unsigned int first_index;
-	long unsigned int last_index;
-};
-
 typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
 
-enum {
-	SWP_USED = 1,
-	SWP_WRITEOK = 2,
-	SWP_DISCARDABLE = 4,
-	SWP_DISCARDING = 8,
-	SWP_SOLIDSTATE = 16,
-	SWP_CONTINUED = 32,
-	SWP_BLKDEV = 64,
-	SWP_ACTIVATED = 128,
-	SWP_FS_OPS = 256,
-	SWP_AREA_DISCARD = 512,
-	SWP_PAGE_DISCARD = 1024,
-	SWP_STABLE_WRITES = 2048,
-	SWP_SYNCHRONOUS_IO = 4096,
-	SWP_VALID = 8192,
-	SWP_SCANNING = 16384,
-};
-
 struct copy_subpage_arg {
 	struct page *dst;
 	struct page *src;
 	struct vm_area_struct *vma;
 };
 
-struct mm_walk;
-
-struct mm_walk_ops {
-	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
-	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
-	void (*post_vma)(struct mm_walk *);
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
 };
 
-enum page_walk_action {
-	ACTION_SUBTREE = 0,
-	ACTION_CONTINUE = 1,
-	ACTION_AGAIN = 2,
-};
-
-struct mm_walk {
-	const struct mm_walk_ops *ops;
-	struct mm_struct *mm;
-	pgd_t *pgd;
-	struct vm_area_struct *vma;
-	enum page_walk_action action;
-	bool no_vma;
-	void *private;
-};
-
-struct vm_unmapped_area_info {
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
-};
-
-enum {
-	HUGETLB_SHMFS_INODE = 1,
-	HUGETLB_ANONHUGE_INODE = 2,
-};
-
-struct trace_event_raw_vm_unmapped_area {
+struct trace_event_raw_tlb_flush {
 	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int total_vm;
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
+	int reason;
+	long unsigned int pages;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_vm_unmapped_area {};
+struct trace_event_data_offsets_tlb_flush {};
 
-typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
+typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
 
-struct rmap_walk_control {
-	void *arg;
-	bool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *);
-	int (*done)(struct page *);
-	struct anon_vma * (*anon_lock)(struct page *);
-	bool (*invalid_vma)(struct vm_area_struct *, void *);
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	long unsigned int succeeded;
+	long unsigned int failed;
+	long unsigned int thp_succeeded;
+	long unsigned int thp_failed;
+	long unsigned int thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
 };
 
-struct page_referenced_arg {
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+struct folio_referenced_arg {
 	int mapcount;
 	int referenced;
 	long unsigned int vm_flags;
 	struct mem_cgroup *memcg;
 };
 
-struct vmap_area {
-	long unsigned int va_start;
-	long unsigned int va_end;
-	struct rb_node rb_node;
-	struct list_head list;
-	union {
-		long unsigned int subtree_max_size;
-		struct vm_struct *vm;
-		struct llist_node purge_list;
-	};
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
 };
 
-struct vfree_deferred {
-	struct llist_head list;
-	struct work_struct wq;
+struct auto_movable_stats {
+	long unsigned int kernel_early_pages;
+	long unsigned int movable_pages;
 };
 
-enum fit_type {
-	NOTHING_FIT = 0,
-	FL_FIT_TYPE = 1,
-	LE_FIT_TYPE = 2,
-	RE_FIT_TYPE = 3,
-	NE_FIT_TYPE = 4,
-};
-
-struct vmap_block_queue {
-	spinlock_t lock;
-	struct list_head free;
-};
-
-struct vmap_block {
-	spinlock_t lock;
-	struct vmap_area *va;
-	long unsigned int free;
-	long unsigned int dirty;
-	long unsigned int dirty_min;
-	long unsigned int dirty_max;
-	struct list_head free_list;
-	struct callback_head callback_head;
-	struct list_head purge;
-};
-
-struct page_frag_cache {
-	void *va;
-	__u16 offset;
-	__u16 size;
-	unsigned int pagecnt_bias;
-	bool pfmemalloc;
-};
-
-enum zone_flags {
-	ZONE_BOOSTED_WATERMARK = 0,
-};
-
-struct mminit_pfnnid_cache {
-	long unsigned int last_start;
-	long unsigned int last_end;
-	int last_nid;
-};
-
-typedef int fpi_t;
-
-struct pcpu_drain {
-	struct zone *zone;
-	struct work_struct work;
-};
-
-enum mf_flags {
-	MF_COUNT_INCREASED = 1,
-	MF_ACTION_REQUIRED = 2,
-	MF_MUST_KILL = 4,
-	MF_SOFT_OFFLINE = 8,
-};
-
-struct madvise_walk_private {
-	struct mmu_gather *tlb;
-	bool pageout;
-};
-
-struct vma_swap_readahead {
-	short unsigned int win;
-	short unsigned int offset;
-	short unsigned int nr_pte;
-	pte_t *ptes;
+struct auto_movable_group_stats {
+	long unsigned int movable_pages;
+	long unsigned int req_kernel_early_pages;
 };
 
 union swap_header {
 	struct {
-		char reserved[4086];
+		char reserved[16374];
 		char magic[10];
 	} magic;
 	struct {
@@ -36338,228 +108972,25 @@
 	sector_t start_block;
 };
 
-struct swap_slots_cache {
-	bool lock_initialized;
-	struct mutex alloc_lock;
-	swp_entry_t *slots;
-	int nr;
-	int cur;
-	spinlock_t free_lock;
-	swp_entry_t *slots_ret;
-	int n_ret;
+struct vmemmap_remap_walk {
+	void (*remap_pte)(pte_t *, long unsigned int, struct vmemmap_remap_walk *);
+	long unsigned int nr_walked;
+	struct page *reuse_page;
+	long unsigned int reuse_addr;
+	struct list_head *vmemmap_pages;
 };
 
-struct frontswap_ops {
-	void (*init)(unsigned int);
-	int (*store)(unsigned int, long unsigned int, struct page *);
-	int (*load)(unsigned int, long unsigned int, struct page *);
-	void (*invalidate_page)(unsigned int, long unsigned int);
-	void (*invalidate_area)(unsigned int);
-	struct frontswap_ops *next;
+struct ksm_rmap_item;
+
+struct ksm_mm_slot {
+	struct mm_slot slot;
+	struct ksm_rmap_item *rmap_list;
 };
 
-struct crypto_comp {
-	struct crypto_tfm base;
-};
+struct ksm_stable_node;
 
-struct zpool;
-
-struct zpool_ops {
-	int (*evict)(struct zpool *, long unsigned int);
-};
-
-enum zpool_mapmode {
-	ZPOOL_MM_RW = 0,
-	ZPOOL_MM_RO = 1,
-	ZPOOL_MM_WO = 2,
-	ZPOOL_MM_DEFAULT = 0,
-};
-
-struct zswap_pool {
-	struct zpool *zpool;
-	struct crypto_comp **tfm;
-	struct kref kref;
-	struct list_head list;
-	struct work_struct release_work;
-	struct work_struct shrink_work;
-	struct hlist_node node;
-	char tfm_name[128];
-};
-
-struct zswap_entry {
-	struct rb_node rbnode;
-	long unsigned int offset;
-	int refcount;
-	unsigned int length;
-	struct zswap_pool *pool;
-	union {
-		long unsigned int handle;
-		long unsigned int value;
-	};
-};
-
-struct zswap_header {
-	swp_entry_t swpentry;
-};
-
-struct zswap_tree {
-	struct rb_root rbroot;
-	spinlock_t lock;
-};
-
-enum zswap_get_swap_ret {
-	ZSWAP_SWAPCACHE_NEW = 0,
-	ZSWAP_SWAPCACHE_EXIST = 1,
-	ZSWAP_SWAPCACHE_FAIL = 2,
-};
-
-struct dma_pool {
-	struct list_head page_list;
-	spinlock_t lock;
-	size_t size;
-	struct device *dev;
-	size_t allocation;
-	size_t boundary;
-	char name[32];
-	struct list_head pools;
-};
-
-struct dma_page {
-	struct list_head page_list;
-	void *vaddr;
-	dma_addr_t dma;
-	unsigned int in_use;
-	unsigned int offset;
-};
-
-enum string_size_units {
-	STRING_UNITS_10 = 0,
-	STRING_UNITS_2 = 1,
-};
-
-struct resv_map {
-	struct kref refs;
-	spinlock_t lock;
-	struct list_head regions;
-	long int adds_in_progress;
-	struct list_head region_cache;
-	long int region_cache_count;
-	struct page_counter *reservation_counter;
-	long unsigned int pages_per_hpage;
-	struct cgroup_subsys_state *css;
-};
-
-struct file_region {
-	struct list_head link;
-	long int from;
-	long int to;
-	struct page_counter *reservation_counter;
-	struct cgroup_subsys_state *css;
-};
-
-struct huge_bootmem_page {
-	struct list_head list;
-	struct hstate *hstate;
-};
-
-enum hugetlb_memory_event {
-	HUGETLB_MAX = 0,
-	HUGETLB_NR_MEMORY_EVENTS = 1,
-};
-
-struct hugetlb_cgroup {
-	struct cgroup_subsys_state css;
-	struct page_counter hugepage[4];
-	struct page_counter rsvd_hugepage[4];
-	atomic_long_t events[4];
-	atomic_long_t events_local[4];
-	struct cgroup_file events_file[4];
-	struct cgroup_file events_local_file[4];
-};
-
-enum vma_resv_mode {
-	VMA_NEEDS_RESV = 0,
-	VMA_COMMIT_RESV = 1,
-	VMA_END_RESV = 2,
-	VMA_ADD_RESV = 3,
-};
-
-struct node_hstate {
-	struct kobject *hugepages_kobj;
-	struct kobject *hstate_kobjs[4];
-};
-
-struct nodemask_scratch {
-	nodemask_t mask1;
-	nodemask_t mask2;
-};
-
-struct sp_node {
-	struct rb_node nd;
-	long unsigned int start;
-	long unsigned int end;
-	struct mempolicy *policy;
-};
-
-struct mempolicy_operations {
-	int (*create)(struct mempolicy *, const nodemask_t *);
-	void (*rebind)(struct mempolicy *, const nodemask_t *);
-};
-
-struct queue_pages {
-	struct list_head *pagelist;
-	long unsigned int flags;
-	nodemask_t *nmask;
-	long unsigned int start;
-	long unsigned int end;
-	struct vm_area_struct *first;
-};
-
-struct mmu_notifier_subscriptions {
-	struct hlist_head list;
-	bool has_itree;
-	spinlock_t lock;
-	long unsigned int invalidate_seq;
-	long unsigned int active_invalidate_ranges;
-	struct rb_root_cached itree;
-	wait_queue_head_t wq;
-	struct hlist_head deferred_list;
-};
-
-struct interval_tree_node {
-	struct rb_node rb;
-	long unsigned int start;
-	long unsigned int last;
-	long unsigned int __subtree_last;
-};
-
-struct mmu_interval_notifier;
-
-struct mmu_interval_notifier_ops {
-	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
-};
-
-struct mmu_interval_notifier {
-	struct interval_tree_node interval_tree;
-	const struct mmu_interval_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct hlist_node deferred_item;
-	long unsigned int invalidate_seq;
-};
-
-struct rmap_item;
-
-struct mm_slot {
-	struct hlist_node link;
-	struct list_head mm_list;
-	struct rmap_item *rmap_list;
-	struct mm_struct *mm;
-};
-
-struct stable_node;
-
-struct rmap_item {
-	struct rmap_item *rmap_list;
+struct ksm_rmap_item {
+	struct ksm_rmap_item *rmap_list;
 	union {
 		struct anon_vma *anon_vma;
 		int nid;
@@ -36570,20 +109001,20 @@
 	union {
 		struct rb_node node;
 		struct {
-			struct stable_node *head;
+			struct ksm_stable_node *head;
 			struct hlist_node hlist;
 		};
 	};
 };
 
 struct ksm_scan {
-	struct mm_slot *mm_slot;
+	struct ksm_mm_slot *mm_slot;
 	long unsigned int address;
-	struct rmap_item **rmap_list;
+	struct ksm_rmap_item **rmap_list;
 	long unsigned int seqnr;
 };
 
-struct stable_node {
+struct ksm_stable_node {
 	union {
 		struct rb_node node;
 		struct {
@@ -36609,351 +109040,42 @@
 	GET_KSM_PAGE_TRYLOCK = 2,
 };
 
-struct array_cache {
-	unsigned int avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int touched;
-	void *entry[0];
-};
-
-struct alien_cache {
-	spinlock_t lock;
-	struct array_cache ac;
-};
-
-typedef unsigned char freelist_idx_t;
-
-enum {
-	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
-	SECTION_INFO = 12,
-	MIX_SECTION_INFO = 13,
-	NODE_INFO = 14,
-	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
-};
-
-enum {
-	MMOP_OFFLINE = 0,
-	MMOP_ONLINE = 1,
-	MMOP_ONLINE_KERNEL = 2,
-	MMOP_ONLINE_MOVABLE = 3,
-};
-
-typedef int mhp_t;
-
-typedef void (*online_page_callback_t)(struct page *, unsigned int);
-
-struct memory_block {
-	long unsigned int start_section_nr;
-	long unsigned int state;
-	int online_type;
-	int phys_device;
-	struct device dev;
-	int nid;
-};
-
-struct buffer_head;
-
-typedef void bh_end_io_t(struct buffer_head *, int);
-
-struct buffer_head {
-	long unsigned int b_state;
-	struct buffer_head *b_this_page;
-	struct page *b_page;
-	sector_t b_blocknr;
-	size_t b_size;
-	char *b_data;
-	struct block_device *b_bdev;
-	bh_end_io_t *b_end_io;
-	void *b_private;
-	struct list_head b_assoc_buffers;
-	struct address_space *b_assoc_map;
-	atomic_t b_count;
-	spinlock_t b_uptodate_lock;
-};
-
-typedef struct page *new_page_t(struct page *, long unsigned int);
-
-typedef void free_page_t(struct page *, long unsigned int);
-
-enum bh_state_bits {
-	BH_Uptodate = 0,
-	BH_Dirty = 1,
-	BH_Lock = 2,
-	BH_Req = 3,
-	BH_Mapped = 4,
-	BH_New = 5,
-	BH_Async_Read = 6,
-	BH_Async_Write = 7,
-	BH_Delay = 8,
-	BH_Boundary = 9,
-	BH_Write_EIO = 10,
-	BH_Unwritten = 11,
-	BH_Quiet = 12,
-	BH_Meta = 13,
-	BH_Prio = 14,
-	BH_Defer_Completion = 15,
-	BH_PrivateStart = 16,
-};
-
-struct trace_event_raw_mm_migrate_pages {
+struct trace_event_raw_hugepage_set_pmd {
 	struct trace_entry ent;
-	long unsigned int succeeded;
-	long unsigned int failed;
-	long unsigned int thp_succeeded;
-	long unsigned int thp_failed;
-	long unsigned int thp_split;
-	enum migrate_mode mode;
-	int reason;
+	long unsigned int addr;
+	long unsigned int pmd;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_mm_migrate_pages {};
-
-typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
-
-enum scan_result {
-	SCAN_FAIL = 0,
-	SCAN_SUCCEED = 1,
-	SCAN_PMD_NULL = 2,
-	SCAN_EXCEED_NONE_PTE = 3,
-	SCAN_EXCEED_SWAP_PTE = 4,
-	SCAN_EXCEED_SHARED_PTE = 5,
-	SCAN_PTE_NON_PRESENT = 6,
-	SCAN_PTE_UFFD_WP = 7,
-	SCAN_PAGE_RO = 8,
-	SCAN_LACK_REFERENCED_PAGE = 9,
-	SCAN_PAGE_NULL = 10,
-	SCAN_SCAN_ABORT = 11,
-	SCAN_PAGE_COUNT = 12,
-	SCAN_PAGE_LRU = 13,
-	SCAN_PAGE_LOCK = 14,
-	SCAN_PAGE_ANON = 15,
-	SCAN_PAGE_COMPOUND = 16,
-	SCAN_ANY_PROCESS = 17,
-	SCAN_VMA_NULL = 18,
-	SCAN_VMA_CHECK = 19,
-	SCAN_ADDRESS_RANGE = 20,
-	SCAN_SWAP_CACHE_PAGE = 21,
-	SCAN_DEL_PAGE_LRU = 22,
-	SCAN_ALLOC_HUGE_PAGE_FAIL = 23,
-	SCAN_CGROUP_CHARGE_FAIL = 24,
-	SCAN_TRUNCATED = 25,
-	SCAN_PAGE_HAS_PRIVATE = 26,
-};
-
-struct trace_event_raw_mm_khugepaged_scan_pmd {
+struct trace_event_raw_hugepage_update {
 	struct trace_entry ent;
-	struct mm_struct *mm;
-	long unsigned int pfn;
-	bool writable;
-	int referenced;
-	int none_or_zero;
-	int status;
-	int unmapped;
+	long unsigned int addr;
+	long unsigned int pte;
+	long unsigned int clr;
+	long unsigned int set;
 	char __data[0];
 };
 
-struct trace_event_raw_mm_collapse_huge_page {
+struct trace_event_raw_migration_pmd {
 	struct trace_entry ent;
-	struct mm_struct *mm;
-	int isolated;
-	int status;
+	long unsigned int addr;
+	long unsigned int pmd;
 	char __data[0];
 };
 
-struct trace_event_raw_mm_collapse_huge_page_isolate {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int none_or_zero;
-	int referenced;
-	bool writable;
-	int status;
-	char __data[0];
-};
+struct trace_event_data_offsets_hugepage_set_pmd {};
 
-struct trace_event_raw_mm_collapse_huge_page_swapin {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	int swapped_in;
-	int referenced;
-	int ret;
-	char __data[0];
-};
+struct trace_event_data_offsets_hugepage_update {};
 
-struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+struct trace_event_data_offsets_migration_pmd {};
 
-struct trace_event_data_offsets_mm_collapse_huge_page {};
+typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
 
-struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
 
-struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+typedef void (*btf_trace_set_migration_pmd)(void *, long unsigned int, long unsigned int);
 
-typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
-
-struct mm_slot___2 {
-	struct hlist_node hash;
-	struct list_head mm_node;
-	struct mm_struct *mm;
-	int nr_pte_mapped_thp;
-	long unsigned int pte_mapped_thp[8];
-};
-
-struct khugepaged_scan {
-	struct list_head mm_head;
-	struct mm_slot___2 *mm_slot;
-	long unsigned int address;
-};
-
-struct mem_cgroup_reclaim_cookie {
-	pg_data_t *pgdat;
-	unsigned int generation;
-};
-
-struct mem_cgroup_tree_per_node {
-	struct rb_root rb_root;
-	struct rb_node *rb_rightmost;
-	spinlock_t lock;
-};
-
-struct mem_cgroup_tree {
-	struct mem_cgroup_tree_per_node *rb_tree_per_node[128];
-};
-
-struct mem_cgroup_eventfd_list {
-	struct list_head list;
-	struct eventfd_ctx *eventfd;
-};
-
-struct mem_cgroup_event {
-	struct mem_cgroup *memcg;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
-	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
-	poll_table pt;
-	wait_queue_head_t *wqh;
-	wait_queue_entry_t wait;
-	struct work_struct remove;
-};
-
-struct move_charge_struct {
-	spinlock_t lock;
-	struct mm_struct *mm;
-	struct mem_cgroup *from;
-	struct mem_cgroup *to;
-	long unsigned int flags;
-	long unsigned int precharge;
-	long unsigned int moved_charge;
-	long unsigned int moved_swap;
-	struct task_struct *moving_task;
-	wait_queue_head_t waitq;
-};
-
-enum res_type {
-	_MEM = 0,
-	_MEMSWAP = 1,
-	_OOM_TYPE = 2,
-	_KMEM = 3,
-	_TCP = 4,
-};
-
-struct memory_stat {
-	const char *name;
-	unsigned int ratio;
-	unsigned int idx;
-};
-
-struct oom_wait_info {
-	struct mem_cgroup *memcg;
-	wait_queue_entry_t wait;
-};
-
-enum oom_status {
-	OOM_SUCCESS = 0,
-	OOM_FAILED = 1,
-	OOM_ASYNC = 2,
-	OOM_SKIPPED = 3,
-};
-
-struct memcg_stock_pcp {
-	struct mem_cgroup *cached;
-	unsigned int nr_pages;
-	struct obj_cgroup *cached_objcg;
-	unsigned int nr_bytes;
-	struct work_struct work;
-	long unsigned int flags;
-};
-
-enum {
-	RES_USAGE = 0,
-	RES_LIMIT = 1,
-	RES_MAX_USAGE = 2,
-	RES_FAILCNT = 3,
-	RES_SOFT_LIMIT = 4,
-};
-
-union mc_target {
-	struct page *page;
-	swp_entry_t ent;
-};
-
-enum mc_target_type {
-	MC_TARGET_NONE = 0,
-	MC_TARGET_PAGE = 1,
-	MC_TARGET_SWAP = 2,
-	MC_TARGET_DEVICE = 3,
-};
-
-struct uncharge_gather {
-	struct mem_cgroup *memcg;
-	long unsigned int nr_pages;
-	long unsigned int pgpgout;
-	long unsigned int nr_kmem;
-	struct page *dummy_page;
-};
-
-struct numa_stat {
-	const char *name;
-	unsigned int lru_mask;
-};
-
-enum vmpressure_levels {
-	VMPRESSURE_LOW = 0,
-	VMPRESSURE_MEDIUM = 1,
-	VMPRESSURE_CRITICAL = 2,
-	VMPRESSURE_NUM_LEVELS = 3,
-};
-
-enum vmpressure_modes {
-	VMPRESSURE_NO_PASSTHROUGH = 0,
-	VMPRESSURE_HIERARCHY = 1,
-	VMPRESSURE_LOCAL = 2,
-	VMPRESSURE_NUM_MODES = 3,
-};
-
-struct vmpressure_event {
-	struct eventfd_ctx *efd;
-	enum vmpressure_levels level;
-	enum vmpressure_modes mode;
-	struct list_head node;
-};
-
-struct swap_cgroup_ctrl {
-	struct page **map;
-	long unsigned int length;
-	spinlock_t lock;
-};
-
-struct swap_cgroup {
-	short unsigned int id;
-};
+typedef void (*btf_trace_remove_migration_pmd)(void *, long unsigned int, long unsigned int);
 
 enum {
 	RES_USAGE___2 = 0,
@@ -36966,153 +109088,14 @@
 	RES_RSVD_FAILCNT = 7,
 };
 
-enum mf_result {
-	MF_IGNORED = 0,
-	MF_FAILED = 1,
-	MF_DELAYED = 2,
-	MF_RECOVERED = 3,
-};
-
-enum mf_action_page_type {
-	MF_MSG_KERNEL = 0,
-	MF_MSG_KERNEL_HIGH_ORDER = 1,
-	MF_MSG_SLAB = 2,
-	MF_MSG_DIFFERENT_COMPOUND = 3,
-	MF_MSG_POISONED_HUGE = 4,
-	MF_MSG_HUGE = 5,
-	MF_MSG_FREE_HUGE = 6,
-	MF_MSG_NON_PMD_HUGE = 7,
-	MF_MSG_UNMAP_FAILED = 8,
-	MF_MSG_DIRTY_SWAPCACHE = 9,
-	MF_MSG_CLEAN_SWAPCACHE = 10,
-	MF_MSG_DIRTY_MLOCKED_LRU = 11,
-	MF_MSG_CLEAN_MLOCKED_LRU = 12,
-	MF_MSG_DIRTY_UNEVICTABLE_LRU = 13,
-	MF_MSG_CLEAN_UNEVICTABLE_LRU = 14,
-	MF_MSG_DIRTY_LRU = 15,
-	MF_MSG_CLEAN_LRU = 16,
-	MF_MSG_TRUNCATED_LRU = 17,
-	MF_MSG_BUDDY = 18,
-	MF_MSG_BUDDY_2ND = 19,
-	MF_MSG_DAX = 20,
-	MF_MSG_UNSPLIT_THP = 21,
-	MF_MSG_UNKNOWN = 22,
-};
-
-typedef long unsigned int dax_entry_t;
-
-struct __kfifo {
-	unsigned int in;
-	unsigned int out;
-	unsigned int mask;
-	unsigned int esize;
-	void *data;
-};
-
-struct to_kill {
-	struct list_head nd;
-	struct task_struct *tsk;
-	long unsigned int addr;
-	short int size_shift;
-};
-
-struct page_state {
-	long unsigned int mask;
-	long unsigned int res;
-	enum mf_action_page_type type;
-	int (*action)(struct page *, long unsigned int);
-};
-
-struct memory_failure_entry {
-	long unsigned int pfn;
-	int flags;
-};
-
-struct memory_failure_cpu {
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct memory_failure_entry *type;
-			const struct memory_failure_entry *const_type;
-			char (*rectype)[0];
-			struct memory_failure_entry *ptr;
-			const struct memory_failure_entry *ptr_const;
-		};
-		struct memory_failure_entry buf[16];
-	} fifo;
-	spinlock_t lock;
-	struct work_struct work;
-};
-
-struct cleancache_filekey {
-	union {
-		ino_t ino;
-		__u32 fh[6];
-		u32 key[6];
-	} u;
-};
-
-struct cleancache_ops {
-	int (*init_fs)(size_t);
-	int (*init_shared_fs)(uuid_t *, size_t);
-	int (*get_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*put_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*invalidate_page)(int, struct cleancache_filekey, long unsigned int);
-	void (*invalidate_inode)(int, struct cleancache_filekey);
-	void (*invalidate_fs)(int);
-};
-
-struct trace_event_raw_test_pages_isolated {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int fin_pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_test_pages_isolated {};
-
-typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-struct zpool_driver;
-
-struct zpool {
-	struct zpool_driver *driver;
-	void *pool;
-	const struct zpool_ops *ops;
-	bool evictable;
-	struct list_head list;
-};
-
-struct zpool_driver {
-	char *type;
-	struct module *owner;
-	atomic_t refcount;
-	struct list_head list;
-	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
-	void (*destroy)(void *);
-	bool malloc_support_movable;
-	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
-	void (*free)(void *, long unsigned int);
-	int (*shrink)(void *, unsigned int, unsigned int *);
-	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
-	void (*unmap)(void *, long unsigned int);
-	u64 (*total_size)(void *);
-};
-
-struct zbud_pool;
-
-struct zbud_ops {
-	int (*evict)(struct zbud_pool *, long unsigned int);
-};
-
 struct zbud_pool {
 	spinlock_t lock;
-	struct list_head unbuddied[63];
-	struct list_head buddied;
+	union {
+		struct list_head buddied;
+		struct list_head unbuddied[63];
+	};
 	struct list_head lru;
 	u64 pages_nr;
-	const struct zbud_ops *ops;
 	struct zpool *zpool;
 	const struct zpool_ops *zpool_ops;
 };
@@ -37125,173 +109108,66 @@
 	bool under_reclaim;
 };
 
-enum buddy {
-	FIRST = 0,
-	LAST = 1,
+enum buddy___2 {
+	FIRST___2 = 0,
+	LAST___2 = 1,
 };
 
-enum zs_mapmode {
-	ZS_MM_RW = 0,
-	ZS_MM_RO = 1,
-	ZS_MM_WO = 2,
-};
-
-struct zs_pool_stats {
-	long unsigned int pages_compacted;
-};
-
-enum fullness_group {
-	ZS_EMPTY = 0,
-	ZS_ALMOST_EMPTY = 1,
-	ZS_ALMOST_FULL = 2,
-	ZS_FULL = 3,
-	NR_ZS_FULLNESS = 4,
-};
-
-enum zs_stat_type {
-	CLASS_EMPTY = 0,
-	CLASS_ALMOST_EMPTY = 1,
-	CLASS_ALMOST_FULL = 2,
-	CLASS_FULL = 3,
-	OBJ_ALLOCATED = 4,
-	OBJ_USED = 5,
-	NR_ZS_STAT_TYPE = 6,
-};
-
-struct zs_size_stat {
-	long unsigned int objs[6];
-};
-
-struct size_class {
-	spinlock_t lock;
-	struct list_head fullness_list[4];
-	int size;
-	int objs_per_zspage;
-	int pages_per_zspage;
-	unsigned int index;
-	struct zs_size_stat stats;
-};
-
-struct link_free {
-	union {
-		long unsigned int next;
-		long unsigned int handle;
-	};
-};
-
-struct zs_pool {
-	const char *name;
-	struct size_class *size_class[255];
-	struct kmem_cache *handle_cachep;
-	struct kmem_cache *zspage_cachep;
-	atomic_long_t pages_allocated;
-	struct zs_pool_stats stats;
-	struct shrinker shrinker;
-	struct inode *inode;
-	struct work_struct free_work;
-	struct wait_queue_head migration_wait;
-	atomic_long_t isolated_pages;
-	bool destroying;
-};
-
-struct zspage {
-	struct {
-		unsigned int fullness: 2;
-		unsigned int class: 9;
-		unsigned int isolated: 3;
-		unsigned int magic: 8;
-	};
-	unsigned int inuse;
-	unsigned int freeobj;
-	struct page *first_page;
-	struct list_head list;
-	rwlock_t lock;
-};
-
-struct mapping_area {
-	char *vm_buf;
-	char *vm_addr;
-	enum zs_mapmode vm_mm;
-};
-
-struct zs_compact_control {
-	struct page *s_page;
-	struct page *d_page;
-	int obj_idx;
-};
-
-struct cma {
-	long unsigned int base_pfn;
-	long unsigned int count;
-	long unsigned int *bitmap;
-	unsigned int order_per_bit;
-	struct mutex lock;
-	char name[64];
-};
-
-struct trace_event_raw_cma_alloc {
+struct trace_event_raw_cma_alloc_class {
 	struct trace_entry ent;
+	u32 __data_loc_name;
 	long unsigned int pfn;
 	const struct page *page;
-	unsigned int count;
+	long unsigned int count;
 	unsigned int align;
 	char __data[0];
 };
 
 struct trace_event_raw_cma_release {
 	struct trace_entry ent;
+	u32 __data_loc_name;
 	long unsigned int pfn;
 	const struct page *page;
-	unsigned int count;
+	long unsigned int count;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_cma_alloc {};
-
-struct trace_event_data_offsets_cma_release {};
-
-typedef void (*btf_trace_cma_alloc)(void *, long unsigned int, const struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cma_release)(void *, long unsigned int, const struct page *, unsigned int);
-
-struct balloon_dev_info {
-	long unsigned int isolated_pages;
-	spinlock_t pages_lock;
-	struct list_head pages;
-	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
-	struct inode *inode;
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
 };
 
-struct page_ext_operations {
-	size_t offset;
-	size_t size;
-	bool (*need)();
-	void (*init)();
+struct trace_event_data_offsets_cma_alloc_class {
+	u32 name;
 };
 
-struct frame_vector {
-	unsigned int nr_allocated;
-	unsigned int nr_frames;
-	bool got_ref;
-	bool is_pfns;
-	void *ptrs[0];
+struct trace_event_data_offsets_cma_release {
+	u32 name;
 };
 
-enum {
-	BAD_STACK = 4294967295,
-	NOT_STACK = 0,
-	GOOD_FRAME = 1,
-	GOOD_STACK = 2,
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
 };
 
+typedef void (*btf_trace_cma_release)(void *, const char *, long unsigned int, const struct page *, long unsigned int);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
 enum hmm_pfn_flags {
-	HMM_PFN_VALID = 0,
-	HMM_PFN_WRITE = 0,
-	HMM_PFN_ERROR = 0,
-	HMM_PFN_ORDER_SHIFT = 56,
-	HMM_PFN_REQ_FAULT = 0,
-	HMM_PFN_REQ_WRITE = 0,
-	HMM_PFN_FLAGS = 0,
+	HMM_PFN_VALID = 9223372036854775808ULL,
+	HMM_PFN_WRITE = 4611686018427387904ULL,
+	HMM_PFN_ERROR = 2305843009213693952ULL,
+	HMM_PFN_ORDER_SHIFT = 56ULL,
+	HMM_PFN_REQ_FAULT = 9223372036854775808ULL,
+	HMM_PFN_REQ_WRITE = 4611686018427387904ULL,
+	HMM_PFN_FLAGS = 18374686479671623680ULL,
 };
 
 struct hmm_range {
@@ -37316,376 +109192,12 @@
 	HMM_NEED_ALL_BITS = 3,
 };
 
-struct hugetlbfs_inode_info {
-	struct shared_policy policy;
-	struct inode vfs_inode;
-	unsigned int seals;
-};
-
-struct page_reporting_dev_info {
-	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
-	struct delayed_work work;
-	atomic_t state;
-};
-
-enum {
-	PAGE_REPORTING_IDLE = 0,
-	PAGE_REPORTING_REQUESTED = 1,
-	PAGE_REPORTING_ACTIVE = 2,
-};
-
-typedef s32 compat_off_t;
-
-struct open_how {
-	__u64 flags;
-	__u64 mode;
-	__u64 resolve;
-};
-
-enum fsnotify_data_type {
-	FSNOTIFY_EVENT_NONE = 0,
-	FSNOTIFY_EVENT_PATH = 1,
-	FSNOTIFY_EVENT_INODE = 2,
-};
-
-struct open_flags {
-	int open_flag;
-	umode_t mode;
-	int acc_mode;
-	int intent;
-	int lookup_flags;
-};
-
-typedef __kernel_rwf_t rwf_t;
-
-struct fscrypt_policy_v1 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 master_key_descriptor[8];
-};
-
-struct fscrypt_policy_v2 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 __reserved[4];
-	__u8 master_key_identifier[16];
-};
-
-union fscrypt_policy {
-	u8 version;
-	struct fscrypt_policy_v1 v1;
-	struct fscrypt_policy_v2 v2;
-};
-
-enum vfs_get_super_keying {
-	vfs_get_single_super = 0,
-	vfs_get_single_reconf_super = 1,
-	vfs_get_keyed_super = 2,
-	vfs_get_independent_super = 3,
-};
-
-struct kobj_map;
-
-struct char_device_struct {
-	struct char_device_struct *next;
-	unsigned int major;
-	unsigned int baseminor;
-	int minorct;
-	char name[64];
-	struct cdev *cdev;
-};
-
-struct stat {
-	long unsigned int st_dev;
-	long unsigned int st_ino;
-	unsigned int st_mode;
-	unsigned int st_nlink;
-	unsigned int st_uid;
-	unsigned int st_gid;
-	long unsigned int st_rdev;
-	long unsigned int __pad1;
-	long int st_size;
-	int st_blksize;
-	int __pad2;
-	long int st_blocks;
-	long int st_atime;
-	long unsigned int st_atime_nsec;
-	long int st_mtime;
-	long unsigned int st_mtime_nsec;
-	long int st_ctime;
-	long unsigned int st_ctime_nsec;
-	unsigned int __unused4;
-	unsigned int __unused5;
-};
-
-typedef u32 compat_ino_t;
-
-typedef u16 compat_ushort_t;
-
-typedef s64 compat_s64;
-
-typedef u16 __compat_uid16_t;
-
-typedef u16 __compat_gid16_t;
-
-typedef u16 compat_mode_t;
-
-typedef u32 compat_dev_t;
-
-struct compat_stat {
-	compat_dev_t st_dev;
-	compat_ino_t st_ino;
-	compat_mode_t st_mode;
-	compat_ushort_t st_nlink;
-	__compat_uid16_t st_uid;
-	__compat_gid16_t st_gid;
-	compat_dev_t st_rdev;
-	compat_off_t st_size;
-	compat_off_t st_blksize;
-	compat_off_t st_blocks;
-	old_time32_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	old_time32_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	old_time32_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_ulong_t __unused4[2];
-};
-
-struct stat64 {
-	compat_u64 st_dev;
-	unsigned char __pad0[4];
-	compat_ulong_t __st_ino;
-	compat_uint_t st_mode;
-	compat_uint_t st_nlink;
-	compat_ulong_t st_uid;
-	compat_ulong_t st_gid;
-	compat_u64 st_rdev;
-	unsigned char __pad3[4];
-	compat_s64 st_size;
-	compat_ulong_t st_blksize;
-	compat_u64 st_blocks;
-	compat_ulong_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	compat_ulong_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	compat_ulong_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_u64 st_ino;
-};
-
-struct statx_timestamp {
-	__s64 tv_sec;
-	__u32 tv_nsec;
-	__s32 __reserved;
-};
-
-struct statx {
-	__u32 stx_mask;
-	__u32 stx_blksize;
-	__u64 stx_attributes;
-	__u32 stx_nlink;
-	__u32 stx_uid;
-	__u32 stx_gid;
-	__u16 stx_mode;
-	__u16 __spare0[1];
-	__u64 stx_ino;
-	__u64 stx_size;
-	__u64 stx_blocks;
-	__u64 stx_attributes_mask;
-	struct statx_timestamp stx_atime;
-	struct statx_timestamp stx_btime;
-	struct statx_timestamp stx_ctime;
-	struct statx_timestamp stx_mtime;
-	__u32 stx_rdev_major;
-	__u32 stx_rdev_minor;
-	__u32 stx_dev_major;
-	__u32 stx_dev_minor;
-	__u64 stx_mnt_id;
-	__u64 __spare2;
-	__u64 __spare3[12];
-};
-
-struct mount;
-
-struct mnt_namespace {
-	atomic_t count;
-	struct ns_common ns;
-	struct mount *root;
-	struct list_head list;
-	spinlock_t ns_lock;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	u64 seq;
-	wait_queue_head_t poll;
-	u64 event;
-	unsigned int mounts;
-	unsigned int pending_mounts;
-};
-
-struct mnt_pcp;
-
-struct mountpoint;
-
-struct mount {
-	struct hlist_node mnt_hash;
-	struct mount *mnt_parent;
-	struct dentry *mnt_mountpoint;
-	struct vfsmount mnt;
-	union {
-		struct callback_head mnt_rcu;
-		struct llist_node mnt_llist;
-	};
-	struct mnt_pcp *mnt_pcp;
-	struct list_head mnt_mounts;
-	struct list_head mnt_child;
-	struct list_head mnt_instance;
-	const char *mnt_devname;
-	struct list_head mnt_list;
-	struct list_head mnt_expire;
-	struct list_head mnt_share;
-	struct list_head mnt_slave_list;
-	struct list_head mnt_slave;
-	struct mount *mnt_master;
-	struct mnt_namespace *mnt_ns;
-	struct mountpoint *mnt_mp;
-	union {
-		struct hlist_node mnt_mp_list;
-		struct hlist_node mnt_umount;
-	};
-	struct list_head mnt_umounting;
-	struct fsnotify_mark_connector *mnt_fsnotify_marks;
-	__u32 mnt_fsnotify_mask;
-	int mnt_id;
-	int mnt_group_id;
-	int mnt_expiry_mark;
-	struct hlist_head mnt_pins;
-	struct hlist_head mnt_stuck_children;
-};
-
-struct mnt_pcp {
-	int mnt_count;
-	int mnt_writers;
-};
-
-struct mountpoint {
-	struct hlist_node m_hash;
-	struct dentry *m_dentry;
-	struct hlist_head m_list;
-	int m_count;
-};
-
-typedef short unsigned int ushort;
-
 struct user_arg_ptr {
-	bool is_compat;
 	union {
 		const char * const *native;
-		const compat_uptr_t *compat;
 	} ptr;
 };
 
-enum inode_i_mutex_lock_class {
-	I_MUTEX_NORMAL = 0,
-	I_MUTEX_PARENT = 1,
-	I_MUTEX_CHILD = 2,
-	I_MUTEX_XATTR = 3,
-	I_MUTEX_NONDIR2 = 4,
-	I_MUTEX_PARENT2 = 5,
-};
-
-struct pseudo_fs_context {
-	const struct super_operations *ops;
-	const struct xattr_handler **xattr;
-	const struct dentry_operations *dops;
-	long unsigned int magic;
-};
-
-struct name_snapshot {
-	struct qstr name;
-	unsigned char inline_name[32];
-};
-
-struct saved {
-	struct path link;
-	struct delayed_call done;
-	const char *name;
-	unsigned int seq;
-};
-
-struct nameidata {
-	struct path path;
-	struct qstr last;
-	struct path root;
-	struct inode *inode;
-	unsigned int flags;
-	unsigned int seq;
-	unsigned int m_seq;
-	unsigned int r_seq;
-	int last_type;
-	unsigned int depth;
-	int total_link_count;
-	struct saved *stack;
-	struct saved internal[2];
-	struct filename *name;
-	struct nameidata *saved;
-	unsigned int root_seq;
-	int dfd;
-	kuid_t dir_uid;
-	umode_t dir_mode;
-};
-
-enum {
-	LAST_NORM = 0,
-	LAST_ROOT = 1,
-	LAST_DOT = 2,
-	LAST_DOTDOT = 3,
-};
-
-enum {
-	WALK_TRAILING = 1,
-	WALK_MORE = 2,
-	WALK_NOFOLLOW = 4,
-};
-
-struct word_at_a_time {
-	const long unsigned int one_bits;
-	const long unsigned int high_bits;
-};
-
-struct compat_flock {
-	short int l_type;
-	short int l_whence;
-	compat_off_t l_start;
-	compat_off_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct compat_flock64 {
-	short int l_type;
-	short int l_whence;
-	compat_loff_t l_start;
-	compat_loff_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct f_owner_ex {
-	int type;
-	__kernel_pid_t pid;
-};
-
-struct flock {
-	short int l_type;
-	short int l_whence;
-	__kernel_off_t l_start;
-	__kernel_off_t l_len;
-	__kernel_pid_t l_pid;
-};
-
 struct file_clone_range {
 	__s64 src_fd;
 	__u64 src_offset;
@@ -37693,32 +109205,13 @@
 	__u64 dest_offset;
 };
 
-struct file_dedupe_range_info {
-	__s64 dest_fd;
-	__u64 dest_offset;
-	__u64 bytes_deduped;
-	__s32 status;
-	__u32 reserved;
-};
-
-struct file_dedupe_range {
-	__u64 src_offset;
-	__u64 src_length;
-	__u16 dest_count;
-	__u16 reserved1;
-	__u32 reserved2;
-	struct file_dedupe_range_info info[0];
-};
-
-typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
-
-struct fiemap_extent;
-
-struct fiemap_extent_info {
-	unsigned int fi_flags;
-	unsigned int fi_extents_mapped;
-	unsigned int fi_extents_max;
-	struct fiemap_extent *fi_extents_start;
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
 };
 
 struct space_resv {
@@ -37731,15 +109224,6 @@
 	__s32 l_pad[4];
 };
 
-struct fiemap_extent {
-	__u64 fe_logical;
-	__u64 fe_physical;
-	__u64 fe_length;
-	__u64 fe_reserved64[2];
-	__u32 fe_flags;
-	__u32 fe_reserved[3];
-};
-
 struct fiemap {
 	__u64 fm_start;
 	__u64 fm_length;
@@ -37750,177 +109234,10 @@
 	struct fiemap_extent fm_extents[0];
 };
 
-struct linux_dirent64 {
-	u64 d_ino;
-	s64 d_off;
-	short unsigned int d_reclen;
-	unsigned char d_type;
-	char d_name[0];
-};
-
-struct linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct getdents_callback {
-	struct dir_context ctx;
-	struct linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct getdents_callback64 {
-	struct dir_context ctx;
-	struct linux_dirent64 *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct compat_old_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct compat_readdir_callback {
-	struct dir_context ctx;
-	struct compat_old_linux_dirent *dirent;
-	int result;
-};
-
-struct compat_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct compat_getdents_callback {
-	struct dir_context ctx;
-	struct compat_linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-typedef struct {
-	long unsigned int fds_bits[16];
-} __kernel_fd_set;
-
-typedef __kernel_fd_set fd_set;
-
-struct poll_table_entry {
-	struct file *filp;
-	__poll_t key;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *wait_address;
-};
-
-struct poll_table_page;
-
-struct poll_wqueues {
-	poll_table pt;
-	struct poll_table_page *table;
-	struct task_struct *polling_task;
-	int triggered;
-	int error;
-	int inline_index;
-	struct poll_table_entry inline_entries[9];
-};
-
-struct poll_table_page {
-	struct poll_table_page *next;
-	struct poll_table_entry *entry;
-	struct poll_table_entry entries[0];
-};
-
-enum poll_time_type {
-	PT_TIMEVAL = 0,
-	PT_OLD_TIMEVAL = 1,
-	PT_TIMESPEC = 2,
-	PT_OLD_TIMESPEC = 3,
-};
-
-typedef struct {
-	long unsigned int *in;
-	long unsigned int *out;
-	long unsigned int *ex;
-	long unsigned int *res_in;
-	long unsigned int *res_out;
-	long unsigned int *res_ex;
-} fd_set_bits;
-
-struct sigset_argpack {
-	sigset_t *p;
-	size_t size;
-};
-
-struct poll_list {
-	struct poll_list *next;
-	int len;
-	struct pollfd entries[0];
-};
-
-struct compat_sel_arg_struct {
-	compat_ulong_t n;
-	compat_uptr_t inp;
-	compat_uptr_t outp;
-	compat_uptr_t exp;
-	compat_uptr_t tvp;
-};
-
-struct compat_sigset_argpack {
-	compat_uptr_t p;
-	compat_size_t size;
-};
-
-enum dentry_d_lock_class {
-	DENTRY_D_LOCK_NORMAL = 0,
-	DENTRY_D_LOCK_NESTED = 1,
-};
-
-struct external_name {
-	union {
-		atomic_t count;
-		struct callback_head head;
-	} u;
-	unsigned char name[0];
-};
-
-enum d_walk_ret {
-	D_WALK_CONTINUE = 0,
-	D_WALK_QUIT = 1,
-	D_WALK_NORETRY = 2,
-	D_WALK_SKIP = 3,
-};
-
-struct check_mount {
-	struct vfsmount *mnt;
-	unsigned int mounted;
-};
-
-struct select_data {
-	struct dentry *start;
-	union {
-		long int found;
-		struct dentry *victim;
-	};
-	struct list_head dispose;
-};
-
-struct fsxattr {
-	__u32 fsx_xflags;
-	__u32 fsx_extsize;
-	__u32 fsx_nextents;
-	__u32 fsx_projid;
-	__u32 fsx_cowextsize;
-	unsigned char fsx_pad[8];
+struct inodes_stat_t {
+	long int nr_inodes;
+	long int nr_unused;
+	long int dummy[5];
 };
 
 enum file_time_flags {
@@ -37930,11 +109247,21 @@
 	S_VERSION = 8,
 };
 
-struct proc_mounts {
-	struct mnt_namespace *ns;
-	struct path root;
-	int (*show)(struct seq_file *, struct vfsmount *);
-	struct mount cursor;
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+	struct mnt_idmap *mnt_idmap;
 };
 
 enum umount_tree_flags {
@@ -37943,420 +109270,13 @@
 	UMOUNT_CONNECTED = 4,
 };
 
-struct unicode_map {
-	const char *charset;
-	int version;
-};
-
-struct simple_transaction_argresp {
-	ssize_t size;
-	char data[0];
-};
-
-struct simple_attr {
-	int (*get)(void *, u64 *);
-	int (*set)(void *, u64);
-	char get_buf[24];
-	char set_buf[24];
-	void *data;
-	const char *fmt;
-	struct mutex mutex;
-};
-
-struct wb_writeback_work {
-	long int nr_pages;
-	struct super_block *sb;
-	enum writeback_sync_modes sync_mode;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_kupdate: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_background: 1;
-	unsigned int for_sync: 1;
-	unsigned int auto_free: 1;
-	enum wb_reason reason;
-	struct list_head list;
-	struct wb_completion *done;
-};
-
-struct trace_event_raw_writeback_page_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_dirty_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_foreign_history {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t cgroup_ino;
-	unsigned int history;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_switch_wbs {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t old_cgroup_ino;
-	ino_t new_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_track_foreign_dirty {
-	struct trace_entry ent;
-	char name[32];
-	u64 bdi_id;
-	ino_t ino;
-	unsigned int memcg_id;
-	ino_t cgroup_ino;
-	ino_t page_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_flush_foreign {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	unsigned int frn_bdi_id;
-	unsigned int frn_memcg_id;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_write_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	int sync_mode;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_work_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_pages;
-	dev_t sb_dev;
-	int sync_mode;
-	int for_kupdate;
-	int range_cyclic;
-	int for_background;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_pages_written {
-	struct trace_entry ent;
-	long int pages;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_class {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_bdi_register {
-	struct trace_entry ent;
-	char name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wbc_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_to_write;
-	long int pages_skipped;
-	int sync_mode;
-	int for_kupdate;
-	int for_background;
-	int for_reclaim;
-	int range_cyclic;
-	long int range_start;
-	long int range_end;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_queue_io {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int older;
-	long int age;
-	int moved;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_global_dirty_state {
-	struct trace_entry ent;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int background_thresh;
-	long unsigned int dirty_thresh;
-	long unsigned int dirty_limit;
-	long unsigned int nr_dirtied;
-	long unsigned int nr_written;
-	char __data[0];
-};
-
-struct trace_event_raw_bdi_dirty_ratelimit {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int write_bw;
-	long unsigned int avg_write_bw;
-	long unsigned int dirty_rate;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_balance_dirty_pages {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int limit;
-	long unsigned int setpoint;
-	long unsigned int dirty;
-	long unsigned int bdi_setpoint;
-	long unsigned int bdi_dirty;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	unsigned int dirtied;
-	unsigned int dirtied_pause;
-	long unsigned int paused;
-	long int pause;
-	long unsigned int period;
-	long int think;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_sb_inodes_requeue {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_congest_waited_template {
-	struct trace_entry ent;
-	unsigned int usec_timeout;
-	unsigned int usec_delayed;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_single_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	long unsigned int writeback_index;
-	long int nr_to_write;
-	long unsigned int wrote;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_inode_template {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int state;
-	__u16 mode;
-	long unsigned int dirtied_when;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_writeback_page_template {};
-
-struct trace_event_data_offsets_writeback_dirty_inode_template {};
-
-struct trace_event_data_offsets_inode_foreign_history {};
-
-struct trace_event_data_offsets_inode_switch_wbs {};
-
-struct trace_event_data_offsets_track_foreign_dirty {};
-
-struct trace_event_data_offsets_flush_foreign {};
-
-struct trace_event_data_offsets_writeback_write_inode_template {};
-
-struct trace_event_data_offsets_writeback_work_class {};
-
-struct trace_event_data_offsets_writeback_pages_written {};
-
-struct trace_event_data_offsets_writeback_class {};
-
-struct trace_event_data_offsets_writeback_bdi_register {};
-
-struct trace_event_data_offsets_wbc_class {};
-
-struct trace_event_data_offsets_writeback_queue_io {};
-
-struct trace_event_data_offsets_global_dirty_state {};
-
-struct trace_event_data_offsets_bdi_dirty_ratelimit {};
-
-struct trace_event_data_offsets_balance_dirty_pages {};
-
-struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
-
-struct trace_event_data_offsets_writeback_congest_waited_template {};
-
-struct trace_event_data_offsets_writeback_single_inode_template {};
-
-struct trace_event_data_offsets_writeback_inode_template {};
-
-typedef void (*btf_trace_writeback_dirty_page)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_wait_on_page_writeback)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
-
-typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
-
-typedef void (*btf_trace_track_foreign_dirty)(void *, struct page *, struct bdi_writeback *);
-
-typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_pages_written)(void *, long int);
-
-typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
-
-typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
-
-typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
-
-typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
-
-typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
-
-typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
-
-struct inode_switch_wbs_context {
-	struct inode *inode;
-	struct bdi_writeback *new_wb;
-	struct callback_head callback_head;
-	struct work_struct work;
-};
-
-struct splice_desc {
-	size_t total_len;
-	unsigned int len;
-	unsigned int flags;
-	union {
-		void *userptr;
-		struct file *file;
-		void *data;
-	} u;
-	loff_t pos;
-	loff_t *opos;
-	size_t num_spliced;
-	bool need_wakeup;
-};
-
-typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
-
 typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
 
-struct old_utimbuf32 {
-	old_time32_t actime;
-	old_time32_t modtime;
-};
-
 typedef int __kernel_daddr_t;
 
 struct ustat {
 	__kernel_daddr_t f_tfree;
-	__kernel_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-typedef s32 compat_daddr_t;
-
-typedef __kernel_fsid_t compat_fsid_t;
-
-struct compat_statfs {
-	int f_type;
-	int f_bsize;
-	int f_blocks;
-	int f_bfree;
-	int f_bavail;
-	int f_files;
-	int f_ffree;
-	compat_fsid_t f_fsid;
-	int f_namelen;
-	int f_frsize;
-	int f_flags;
-	int f_spare[4];
-};
-
-struct compat_ustat {
-	compat_daddr_t f_tfree;
-	compat_ino_t f_tinode;
+	long unsigned int f_tinode;
 	char f_fname[6];
 	char f_fpack[6];
 };
@@ -38391,40 +109311,6 @@
 	__kernel_long_t f_spare[4];
 };
 
-struct compat_statfs64___2 {
-	__u32 f_type;
-	__u32 f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__u32 f_namelen;
-	__u32 f_frsize;
-	__u32 f_flags;
-	__u32 f_spare[4];
-} __attribute__((packed));
-
-typedef struct ns_common *ns_get_path_helper_t(void *);
-
-struct ns_get_path_task_args {
-	const struct proc_ns_operations *ns_ops;
-	struct task_struct *task;
-};
-
-enum legacy_fs_param {
-	LEGACY_FS_UNSET_PARAMS = 0,
-	LEGACY_FS_MONOLITHIC_PARAMS = 1,
-	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
-};
-
-struct legacy_fs_context {
-	char *legacy_data;
-	size_t data_size;
-	enum legacy_fs_param param_type;
-};
-
 enum fsconfig_command {
 	FSCONFIG_SET_FLAG = 0,
 	FSCONFIG_SET_STRING = 1,
@@ -38436,150 +109322,9 @@
 	FSCONFIG_CMD_RECONFIGURE = 7,
 };
 
-struct dax_device;
-
-struct iomap_page_ops;
-
-struct iomap___2 {
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	struct block_device *bdev;
-	struct dax_device *dax_dev;
-	void *inline_data;
-	void *private;
-	const struct iomap_page_ops *page_ops;
-};
-
-struct iomap_page_ops {
-	int (*page_prepare)(struct inode *, loff_t, unsigned int, struct iomap___2 *);
-	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *, struct iomap___2 *);
-};
-
-struct decrypt_bh_ctx {
-	struct work_struct work;
-	struct buffer_head *bh;
-};
-
-struct bh_lru {
-	struct buffer_head *bhs[16];
-};
-
-struct bh_accounting {
-	int nr;
-	int ratelimit;
-};
-
-enum {
-	DISK_EVENT_MEDIA_CHANGE = 1,
-	DISK_EVENT_EJECT_REQUEST = 2,
-};
-
-enum {
-	BIOSET_NEED_BVECS = 1,
-	BIOSET_NEED_RESCUER = 2,
-};
-
-struct bdev_inode {
-	struct block_device bdev;
-	struct inode vfs_inode;
-};
-
-struct blkdev_dio {
-	union {
-		struct kiocb *iocb;
-		struct task_struct *waiter;
-	};
-	size_t size;
-	atomic_t ref;
-	bool multi_bio: 1;
-	bool should_dirty: 1;
-	bool is_sync: 1;
-	struct bio bio;
-};
-
-struct bd_holder_disk {
-	struct list_head list;
-	struct gendisk *disk;
-	int refcnt;
-};
-
-typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
-
-typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
-
-enum {
-	DIO_LOCKING = 1,
-	DIO_SKIP_HOLES = 2,
-};
-
-struct dio_submit {
-	struct bio *bio;
-	unsigned int blkbits;
-	unsigned int blkfactor;
-	unsigned int start_zero_done;
-	int pages_in_io;
-	sector_t block_in_file;
-	unsigned int blocks_available;
-	int reap_counter;
-	sector_t final_block_in_request;
-	int boundary;
-	get_block_t *get_block;
-	dio_submit_t *submit_io;
-	loff_t logical_offset_in_bio;
-	sector_t final_block_in_bio;
-	sector_t next_block_for_io;
-	struct page *cur_page;
-	unsigned int cur_page_offset;
-	unsigned int cur_page_len;
-	sector_t cur_page_block;
-	loff_t cur_page_fs_offset;
-	struct iov_iter *iter;
-	unsigned int head;
-	unsigned int tail;
-	size_t from;
-	size_t to;
-};
-
-struct dio {
-	int flags;
-	int op;
-	int op_flags;
-	blk_qc_t bio_cookie;
-	struct gendisk *bio_disk;
-	struct inode *inode;
-	loff_t i_size;
-	dio_iodone_t *end_io;
-	void *private;
-	spinlock_t bio_lock;
-	int page_errors;
-	int is_async;
-	bool defer_completion;
-	bool should_dirty;
-	int io_error;
-	long unsigned int refcount;
-	struct bio *bio_list;
-	struct task_struct *waiter;
-	struct kiocb *iocb;
-	ssize_t result;
-	union {
-		struct page *pages[64];
-		struct work_struct complete_work;
-	};
-	long: 64;
-};
-
-struct bvec_iter_all {
-	struct bio_vec bv;
-	int idx;
-	unsigned int done;
-};
-
 struct mpage_readpage_args {
 	struct bio *bio;
-	struct page *page;
+	struct folio *folio;
 	unsigned int nr_pages;
 	bool is_readahead;
 	sector_t last_block_in_bio;
@@ -38592,101 +109337,6 @@
 	struct bio *bio;
 	sector_t last_block_in_bio;
 	get_block_t *get_block;
-	unsigned int use_writepage;
-};
-
-typedef u32 nlink_t;
-
-typedef int (*proc_write_t)(struct file *, char *, size_t);
-
-struct proc_dir_entry {
-	atomic_t in_use;
-	refcount_t refcnt;
-	struct list_head pde_openers;
-	spinlock_t pde_unload_lock;
-	struct completion *pde_unload_completion;
-	const struct inode_operations *proc_iops;
-	union {
-		const struct proc_ops *proc_ops;
-		const struct file_operations *proc_dir_ops;
-	};
-	const struct dentry_operations *proc_dops;
-	union {
-		const struct seq_operations *seq_ops;
-		int (*single_show)(struct seq_file *, void *);
-	};
-	proc_write_t write;
-	void *data;
-	unsigned int state_size;
-	unsigned int low_ino;
-	nlink_t nlink;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct proc_dir_entry *parent;
-	struct rb_root subdir;
-	struct rb_node subdir_node;
-	char *name;
-	umode_t mode;
-	u8 flags;
-	u8 namelen;
-	char inline_name[0];
-};
-
-union proc_op {
-	int (*proc_get_link)(struct dentry *, struct path *);
-	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
-	const char *lsm;
-};
-
-struct proc_inode {
-	struct pid *pid;
-	unsigned int fd;
-	union proc_op op;
-	struct proc_dir_entry *pde;
-	struct ctl_table_header *sysctl;
-	struct ctl_table *sysctl_entry;
-	struct hlist_node sibling_inodes;
-	const struct proc_ns_operations *ns_ops;
-	struct inode vfs_inode;
-};
-
-struct proc_fs_opts {
-	int flag;
-	const char *str;
-};
-
-struct file_handle {
-	__u32 handle_bytes;
-	int handle_type;
-	unsigned char f_handle[0];
-};
-
-struct inotify_inode_mark {
-	struct fsnotify_mark fsn_mark;
-	int wd;
-};
-
-struct dnotify_struct {
-	struct dnotify_struct *dn_next;
-	__u32 dn_mask;
-	int dn_fd;
-	struct file *dn_filp;
-	fl_owner_t dn_owner;
-};
-
-struct dnotify_mark {
-	struct fsnotify_mark fsn_mark;
-	struct dnotify_struct *dn;
-};
-
-struct inotify_event_info {
-	struct fsnotify_event fse;
-	u32 mask;
-	int wd;
-	u32 sync_cookie;
-	int name_len;
-	char name[0];
 };
 
 struct inotify_event {
@@ -38697,169 +109347,6 @@
 	char name[0];
 };
 
-enum {
-	FAN_EVENT_INIT = 0,
-	FAN_EVENT_REPORTED = 1,
-	FAN_EVENT_ANSWERED = 2,
-	FAN_EVENT_CANCELED = 3,
-};
-
-struct fanotify_fh {
-	u8 type;
-	u8 len;
-	u8 flags;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-struct fanotify_info {
-	u8 dir_fh_totlen;
-	u8 file_fh_totlen;
-	u8 name_len;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-enum fanotify_event_type {
-	FANOTIFY_EVENT_TYPE_FID = 0,
-	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
-	FANOTIFY_EVENT_TYPE_PATH = 2,
-	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
-	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
-};
-
-struct fanotify_event {
-	struct fsnotify_event fse;
-	u32 mask;
-	enum fanotify_event_type type;
-	struct pid *pid;
-};
-
-struct fanotify_fid_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_fh object_fh;
-	unsigned char _inline_fh_buf[12];
-};
-
-struct fanotify_name_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_info info;
-};
-
-struct fanotify_path_event {
-	struct fanotify_event fae;
-	struct path path;
-};
-
-struct fanotify_perm_event {
-	struct fanotify_event fae;
-	struct path path;
-	short unsigned int response;
-	short unsigned int state;
-	int fd;
-};
-
-struct fanotify_event_metadata {
-	__u32 event_len;
-	__u8 vers;
-	__u8 reserved;
-	__u16 metadata_len;
-	__u64 mask;
-	__s32 fd;
-	__s32 pid;
-};
-
-struct fanotify_event_info_header {
-	__u8 info_type;
-	__u8 pad;
-	__u16 len;
-};
-
-struct fanotify_event_info_fid {
-	struct fanotify_event_info_header hdr;
-	__kernel_fsid_t fsid;
-	unsigned char handle[0];
-};
-
-struct fanotify_response {
-	__s32 fd;
-	__u32 response;
-};
-
-struct epoll_event {
-	__poll_t events;
-	__u64 data;
-};
-
-struct epoll_filefd {
-	struct file *file;
-	int fd;
-} __attribute__((packed));
-
-struct nested_call_node {
-	struct list_head llink;
-	void *cookie;
-	void *ctx;
-};
-
-struct nested_calls {
-	struct list_head tasks_call_list;
-	spinlock_t lock;
-};
-
-struct eventpoll;
-
-struct epitem {
-	union {
-		struct rb_node rbn;
-		struct callback_head rcu;
-	};
-	struct list_head rdllink;
-	struct epitem *next;
-	struct epoll_filefd ffd;
-	int nwait;
-	struct list_head pwqlist;
-	struct eventpoll *ep;
-	struct list_head fllink;
-	struct wakeup_source *ws;
-	struct epoll_event event;
-};
-
-struct eventpoll {
-	struct mutex mtx;
-	wait_queue_head_t wq;
-	wait_queue_head_t poll_wait;
-	struct list_head rdllist;
-	rwlock_t lock;
-	struct rb_root_cached rbr;
-	struct epitem *ovflist;
-	struct wakeup_source *ws;
-	struct user_struct *user;
-	struct file *file;
-	u64 gen;
-	unsigned int napi_id;
-};
-
-struct eppoll_entry {
-	struct list_head llink;
-	struct epitem *base;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *whead;
-};
-
-struct ep_pqueue {
-	poll_table pt;
-	struct epitem *epi;
-};
-
-struct ep_send_events_data {
-	int maxevents;
-	struct epoll_event *events;
-	int res;
-};
-
 struct signalfd_siginfo {
 	__u32 ssi_signo;
 	__s32 ssi_errno;
@@ -38889,37 +109376,6 @@
 	sigset_t sigmask;
 };
 
-struct timerfd_ctx {
-	union {
-		struct hrtimer tmr;
-		struct alarm alarm;
-	} t;
-	ktime_t tintv;
-	ktime_t moffs;
-	wait_queue_head_t wqh;
-	u64 ticks;
-	int clockid;
-	short unsigned int expired;
-	short unsigned int settime_flags;
-	struct callback_head rcu;
-	struct list_head clist;
-	spinlock_t cancel_lock;
-	bool might_cancel;
-};
-
-struct eventfd_ctx___2 {
-	struct kref kref;
-	wait_queue_head_t wqh;
-	__u64 count;
-	unsigned int flags;
-	int id;
-};
-
-enum userfaultfd_state {
-	UFFD_STATE_WAIT_API = 0,
-	UFFD_STATE_RUNNING = 1,
-};
-
 struct userfaultfd_ctx {
 	wait_queue_head_t fault_pending_wqh;
 	wait_queue_head_t fault_wqh;
@@ -38929,9 +109385,8 @@
 	refcount_t refcount;
 	unsigned int flags;
 	unsigned int features;
-	enum userfaultfd_state state;
 	bool released;
-	bool mmap_changing;
+	atomic_t mmap_changing;
 	struct mm_struct *mm;
 };
 
@@ -39004,6 +109459,12 @@
 	__u64 mode;
 };
 
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
 struct userfaultfd_fork_ctx {
 	struct userfaultfd_ctx *orig;
 	struct userfaultfd_ctx *new;
@@ -39029,1640 +109490,9 @@
 	long unsigned int len;
 };
 
-typedef u32 compat_aio_context_t;
-
-struct kioctx;
-
-struct kioctx_table {
-	struct callback_head rcu;
-	unsigned int nr;
-	struct kioctx *table[0];
-};
-
-typedef __kernel_ulong_t aio_context_t;
-
-enum {
-	IOCB_CMD_PREAD = 0,
-	IOCB_CMD_PWRITE = 1,
-	IOCB_CMD_FSYNC = 2,
-	IOCB_CMD_FDSYNC = 3,
-	IOCB_CMD_POLL = 5,
-	IOCB_CMD_NOOP = 6,
-	IOCB_CMD_PREADV = 7,
-	IOCB_CMD_PWRITEV = 8,
-};
-
-struct io_event {
-	__u64 data;
-	__u64 obj;
-	__s64 res;
-	__s64 res2;
-};
-
-struct iocb {
-	__u64 aio_data;
-	__u32 aio_key;
-	__kernel_rwf_t aio_rw_flags;
-	__u16 aio_lio_opcode;
-	__s16 aio_reqprio;
-	__u32 aio_fildes;
-	__u64 aio_buf;
-	__u64 aio_nbytes;
-	__s64 aio_offset;
-	__u64 aio_reserved2;
-	__u32 aio_flags;
-	__u32 aio_resfd;
-};
-
-typedef int kiocb_cancel_fn(struct kiocb *);
-
-struct aio_ring {
-	unsigned int id;
-	unsigned int nr;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int magic;
-	unsigned int compat_features;
-	unsigned int incompat_features;
-	unsigned int header_length;
-	struct io_event io_events[0];
-};
-
-struct kioctx_cpu;
-
-struct ctx_rq_wait;
-
-struct kioctx {
-	struct percpu_ref users;
-	atomic_t dead;
-	struct percpu_ref reqs;
-	long unsigned int user_id;
-	struct kioctx_cpu *cpu;
-	unsigned int req_batch;
-	unsigned int max_reqs;
-	unsigned int nr_events;
-	long unsigned int mmap_base;
-	long unsigned int mmap_size;
-	struct page **ring_pages;
-	long int nr_pages;
-	struct rcu_work free_rwork;
-	struct ctx_rq_wait *rq_wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct {
-		atomic_t reqs_available;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		spinlock_t ctx_lock;
-		struct list_head active_reqs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex ring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		unsigned int tail;
-		unsigned int completed_events;
-		spinlock_t completion_lock;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct page *internal_pages[8];
-	struct file *aio_ring_file;
-	unsigned int id;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kioctx_cpu {
-	unsigned int reqs_available;
-};
-
-struct ctx_rq_wait {
-	struct completion comp;
-	atomic_t count;
-};
-
-struct fsync_iocb {
-	struct file *file;
-	struct work_struct work;
-	bool datasync;
-	struct cred *creds;
-};
-
-struct poll_iocb {
-	struct file *file;
-	struct wait_queue_head *head;
-	__poll_t events;
-	bool done;
-	bool cancelled;
-	struct wait_queue_entry wait;
-	struct work_struct work;
-};
-
-struct aio_kiocb {
-	union {
-		struct file *ki_filp;
-		struct kiocb rw;
-		struct fsync_iocb fsync;
-		struct poll_iocb poll;
-	};
-	struct kioctx *ki_ctx;
-	kiocb_cancel_fn *ki_cancel;
-	struct io_event ki_res;
-	struct list_head ki_list;
-	refcount_t ki_refcnt;
-	struct eventfd_ctx *ki_eventfd;
-};
-
-struct aio_poll_table {
-	struct poll_table_struct pt;
-	struct aio_kiocb *iocb;
-	int error;
-};
-
-struct __aio_sigset {
-	const sigset_t *sigmask;
-	size_t sigsetsize;
-};
-
-struct __compat_aio_sigset {
-	compat_uptr_t sigmask;
-	compat_size_t sigsetsize;
-};
-
-typedef s32 compat_ssize_t;
-
-enum {
-	PERCPU_REF_INIT_ATOMIC = 1,
-	PERCPU_REF_INIT_DEAD = 2,
-	PERCPU_REF_ALLOW_REINIT = 4,
-};
-
-struct user_msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iovec *msg_iov;
-	__kernel_size_t msg_iovlen;
-	void *msg_control;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-};
-
-struct compat_msghdr {
-	compat_uptr_t msg_name;
-	compat_int_t msg_namelen;
-	compat_uptr_t msg_iov;
-	compat_size_t msg_iovlen;
-	compat_uptr_t msg_control;
-	compat_size_t msg_controllen;
-	compat_uint_t msg_flags;
-};
-
-struct scm_fp_list {
-	short int count;
-	short int max;
-	struct user_struct *user;
-	struct file *fp[253];
-};
-
-struct unix_skb_parms {
-	struct pid *pid;
-	kuid_t uid;
-	kgid_t gid;
-	struct scm_fp_list *fp;
-	u32 secid;
-	u32 consumed;
-};
-
-struct trace_event_raw_io_uring_create {
-	struct trace_entry ent;
-	int fd;
-	void *ctx;
-	u32 sq_entries;
-	u32 cq_entries;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_register {
-	struct trace_entry ent;
-	void *ctx;
-	unsigned int opcode;
-	unsigned int nr_files;
-	unsigned int nr_bufs;
-	bool eventfd;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_file_get {
-	struct trace_entry ent;
-	void *ctx;
-	int fd;
-	char __data[0];
-};
-
-struct io_wq_work;
-
-struct trace_event_raw_io_uring_queue_async_work {
-	struct trace_entry ent;
-	void *ctx;
-	int rw;
-	void *req;
-	struct io_wq_work *work;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct io_wq_work_node {
-	struct io_wq_work_node *next;
-};
-
-struct io_wq_work {
-	struct io_wq_work_node list;
-	struct io_identity *identity;
-	unsigned int flags;
-};
-
-struct trace_event_raw_io_uring_defer {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	long long unsigned int data;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_link {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	void *target_req;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_cqring_wait {
-	struct trace_entry ent;
-	void *ctx;
-	int min_events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_fail_link {
-	struct trace_entry ent;
-	void *req;
-	void *link;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_complete {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	long int res;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_submit_sqe {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	bool force_nonblock;
-	bool sq_thread;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_arm {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	int events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_wake {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_add {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_run {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_io_uring_create {};
-
-struct trace_event_data_offsets_io_uring_register {};
-
-struct trace_event_data_offsets_io_uring_file_get {};
-
-struct trace_event_data_offsets_io_uring_queue_async_work {};
-
-struct trace_event_data_offsets_io_uring_defer {};
-
-struct trace_event_data_offsets_io_uring_link {};
-
-struct trace_event_data_offsets_io_uring_cqring_wait {};
-
-struct trace_event_data_offsets_io_uring_fail_link {};
-
-struct trace_event_data_offsets_io_uring_complete {};
-
-struct trace_event_data_offsets_io_uring_submit_sqe {};
-
-struct trace_event_data_offsets_io_uring_poll_arm {};
-
-struct trace_event_data_offsets_io_uring_poll_wake {};
-
-struct trace_event_data_offsets_io_uring_task_add {};
-
-struct trace_event_data_offsets_io_uring_task_run {};
-
-typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
-
-typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);
-
-typedef void (*btf_trace_io_uring_file_get)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);
-
-typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);
-
-typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);
-
-typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u8, u64, bool, bool);
-
-typedef void (*btf_trace_io_uring_poll_arm)(void *, void *, u8, u64, int, int);
-
-typedef void (*btf_trace_io_uring_poll_wake)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_add)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_run)(void *, void *, u8, u64);
-
-struct io_uring_sqe {
-	__u8 opcode;
-	__u8 flags;
-	__u16 ioprio;
-	__s32 fd;
-	union {
-		__u64 off;
-		__u64 addr2;
-	};
-	union {
-		__u64 addr;
-		__u64 splice_off_in;
-	};
-	__u32 len;
-	union {
-		__kernel_rwf_t rw_flags;
-		__u32 fsync_flags;
-		__u16 poll_events;
-		__u32 poll32_events;
-		__u32 sync_range_flags;
-		__u32 msg_flags;
-		__u32 timeout_flags;
-		__u32 accept_flags;
-		__u32 cancel_flags;
-		__u32 open_flags;
-		__u32 statx_flags;
-		__u32 fadvise_advice;
-		__u32 splice_flags;
-	};
-	__u64 user_data;
-	union {
-		struct {
-			union {
-				__u16 buf_index;
-				__u16 buf_group;
-			};
-			__u16 personality;
-			__s32 splice_fd_in;
-		};
-		__u64 __pad2[3];
-	};
-};
-
-enum {
-	IOSQE_FIXED_FILE_BIT = 0,
-	IOSQE_IO_DRAIN_BIT = 1,
-	IOSQE_IO_LINK_BIT = 2,
-	IOSQE_IO_HARDLINK_BIT = 3,
-	IOSQE_ASYNC_BIT = 4,
-	IOSQE_BUFFER_SELECT_BIT = 5,
-};
-
-enum {
-	IORING_OP_NOP = 0,
-	IORING_OP_READV = 1,
-	IORING_OP_WRITEV = 2,
-	IORING_OP_FSYNC = 3,
-	IORING_OP_READ_FIXED = 4,
-	IORING_OP_WRITE_FIXED = 5,
-	IORING_OP_POLL_ADD = 6,
-	IORING_OP_POLL_REMOVE = 7,
-	IORING_OP_SYNC_FILE_RANGE = 8,
-	IORING_OP_SENDMSG = 9,
-	IORING_OP_RECVMSG = 10,
-	IORING_OP_TIMEOUT = 11,
-	IORING_OP_TIMEOUT_REMOVE = 12,
-	IORING_OP_ACCEPT = 13,
-	IORING_OP_ASYNC_CANCEL = 14,
-	IORING_OP_LINK_TIMEOUT = 15,
-	IORING_OP_CONNECT = 16,
-	IORING_OP_FALLOCATE = 17,
-	IORING_OP_OPENAT = 18,
-	IORING_OP_CLOSE = 19,
-	IORING_OP_FILES_UPDATE = 20,
-	IORING_OP_STATX = 21,
-	IORING_OP_READ = 22,
-	IORING_OP_WRITE = 23,
-	IORING_OP_FADVISE = 24,
-	IORING_OP_MADVISE = 25,
-	IORING_OP_SEND = 26,
-	IORING_OP_RECV = 27,
-	IORING_OP_OPENAT2 = 28,
-	IORING_OP_EPOLL_CTL = 29,
-	IORING_OP_SPLICE = 30,
-	IORING_OP_PROVIDE_BUFFERS = 31,
-	IORING_OP_REMOVE_BUFFERS = 32,
-	IORING_OP_TEE = 33,
-	IORING_OP_LAST = 34,
-};
-
-struct io_uring_cqe {
-	__u64 user_data;
-	__s32 res;
-	__u32 flags;
-};
-
-enum {
-	IORING_CQE_BUFFER_SHIFT = 16,
-};
-
-struct io_sqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 flags;
-	__u32 dropped;
-	__u32 array;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_cqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 overflow;
-	__u32 cqes;
-	__u32 flags;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_uring_params {
-	__u32 sq_entries;
-	__u32 cq_entries;
-	__u32 flags;
-	__u32 sq_thread_cpu;
-	__u32 sq_thread_idle;
-	__u32 features;
-	__u32 wq_fd;
-	__u32 resv[3];
-	struct io_sqring_offsets sq_off;
-	struct io_cqring_offsets cq_off;
-};
-
-enum {
-	IORING_REGISTER_BUFFERS = 0,
-	IORING_UNREGISTER_BUFFERS = 1,
-	IORING_REGISTER_FILES = 2,
-	IORING_UNREGISTER_FILES = 3,
-	IORING_REGISTER_EVENTFD = 4,
-	IORING_UNREGISTER_EVENTFD = 5,
-	IORING_REGISTER_FILES_UPDATE = 6,
-	IORING_REGISTER_EVENTFD_ASYNC = 7,
-	IORING_REGISTER_PROBE = 8,
-	IORING_REGISTER_PERSONALITY = 9,
-	IORING_UNREGISTER_PERSONALITY = 10,
-	IORING_REGISTER_RESTRICTIONS = 11,
-	IORING_REGISTER_ENABLE_RINGS = 12,
-	IORING_REGISTER_LAST = 13,
-};
-
-struct io_uring_files_update {
-	__u32 offset;
-	__u32 resv;
-	__u64 fds;
-};
-
-struct io_uring_probe_op {
-	__u8 op;
-	__u8 resv;
-	__u16 flags;
-	__u32 resv2;
-};
-
-struct io_uring_probe {
-	__u8 last_op;
-	__u8 ops_len;
-	__u16 resv;
-	__u32 resv2[3];
-	struct io_uring_probe_op ops[0];
-};
-
-struct io_uring_restriction {
-	__u16 opcode;
-	union {
-		__u8 register_op;
-		__u8 sqe_op;
-		__u8 sqe_flags;
-	};
-	__u8 resv;
-	__u32 resv2[3];
-};
-
-enum {
-	IORING_RESTRICTION_REGISTER_OP = 0,
-	IORING_RESTRICTION_SQE_OP = 1,
-	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
-	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
-	IORING_RESTRICTION_LAST = 4,
-};
-
-enum {
-	IO_WQ_WORK_CANCEL = 1,
-	IO_WQ_WORK_HASHED = 2,
-	IO_WQ_WORK_UNBOUND = 4,
-	IO_WQ_WORK_NO_CANCEL = 8,
-	IO_WQ_WORK_CONCURRENT = 16,
-	IO_WQ_WORK_FILES = 32,
-	IO_WQ_WORK_FS = 64,
-	IO_WQ_WORK_MM = 128,
-	IO_WQ_WORK_CREDS = 256,
-	IO_WQ_WORK_BLKCG = 512,
-	IO_WQ_WORK_FSIZE = 1024,
-	IO_WQ_HASH_SHIFT = 24,
-};
-
-enum io_wq_cancel {
-	IO_WQ_CANCEL_OK = 0,
-	IO_WQ_CANCEL_RUNNING = 1,
-	IO_WQ_CANCEL_NOTFOUND = 2,
-};
-
-typedef void free_work_fn(struct io_wq_work *);
-
-typedef struct io_wq_work *io_wq_work_fn(struct io_wq_work *);
-
-struct io_wq_data {
-	struct user_struct *user;
-	io_wq_work_fn *do_work;
-	free_work_fn *free_work;
-};
-
-struct io_uring {
-	u32 head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 tail;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_rings {
-	struct io_uring sq;
-	struct io_uring cq;
-	u32 sq_ring_mask;
-	u32 cq_ring_mask;
-	u32 sq_ring_entries;
-	u32 cq_ring_entries;
-	u32 sq_dropped;
-	u32 sq_flags;
-	u32 cq_flags;
-	u32 cq_overflow;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct io_uring_cqe cqes[0];
-};
-
-struct io_mapped_ubuf {
-	u64 ubuf;
-	size_t len;
-	struct bio_vec *bvec;
-	unsigned int nr_bvecs;
-	long unsigned int acct_pages;
-};
-
-struct fixed_file_table {
-	struct file **files;
-};
-
-struct fixed_file_data;
-
-struct fixed_file_ref_node {
-	struct percpu_ref refs;
-	struct list_head node;
-	struct list_head file_list;
-	struct fixed_file_data *file_data;
-	struct llist_node llist;
-	bool done;
-};
-
-struct io_ring_ctx;
-
-struct fixed_file_data {
-	struct fixed_file_table *table;
-	struct io_ring_ctx *ctx;
-	struct fixed_file_ref_node *node;
-	struct percpu_ref refs;
-	struct completion done;
-	struct list_head ref_list;
+struct fscrypt_keyring {
 	spinlock_t lock;
-};
-
-struct io_wq;
-
-struct io_restriction {
-	long unsigned int register_op[1];
-	long unsigned int sqe_op[1];
-	u8 sqe_flags_allowed;
-	u8 sqe_flags_required;
-	bool registered;
-};
-
-struct io_sq_data;
-
-struct io_kiocb;
-
-struct io_ring_ctx {
-	struct {
-		struct percpu_ref refs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		unsigned int flags;
-		unsigned int compat: 1;
-		unsigned int limit_mem: 1;
-		unsigned int cq_overflow_flushed: 1;
-		unsigned int drain_next: 1;
-		unsigned int eventfd_async: 1;
-		unsigned int restricted: 1;
-		unsigned int sqo_dead: 1;
-		u32 *sq_array;
-		unsigned int cached_sq_head;
-		unsigned int sq_entries;
-		unsigned int sq_mask;
-		unsigned int sq_thread_idle;
-		unsigned int cached_sq_dropped;
-		unsigned int cached_cq_overflow;
-		long unsigned int sq_check_overflow;
-		struct list_head defer_list;
-		struct list_head timeout_list;
-		struct list_head cq_overflow_list;
-		wait_queue_head_t inflight_wait;
-		struct io_uring_sqe *sq_sqes;
-	};
-	struct io_rings *rings;
-	struct io_wq *io_wq;
-	struct task_struct *sqo_task;
-	struct mm_struct *mm_account;
-	struct cgroup_subsys_state *sqo_blkcg_css;
-	struct io_sq_data *sq_data;
-	struct wait_queue_head sqo_sq_wait;
-	struct wait_queue_entry sqo_wait_entry;
-	struct list_head sqd_list;
-	struct fixed_file_data *file_data;
-	unsigned int nr_user_files;
-	unsigned int nr_user_bufs;
-	struct io_mapped_ubuf *user_bufs;
-	struct user_struct *user;
-	const struct cred *creds;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct completion ref_comp;
-	struct completion sq_thread_comp;
-	struct io_kiocb *fallback_req;
-	struct socket *ring_sock;
-	struct idr io_buffer_idr;
-	struct idr personality_idr;
-	long: 64;
-	long: 64;
-	struct {
-		unsigned int cached_cq_tail;
-		unsigned int cq_entries;
-		unsigned int cq_mask;
-		atomic_t cq_timeouts;
-		unsigned int cq_last_tm_flush;
-		long unsigned int cq_check_overflow;
-		struct wait_queue_head cq_wait;
-		struct fasync_struct *cq_fasync;
-		struct eventfd_ctx *cq_ev_fd;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex uring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		spinlock_t completion_lock;
-		struct list_head iopoll_list;
-		struct hlist_head *cancel_hash;
-		unsigned int cancel_hash_bits;
-		bool poll_multi_file;
-		spinlock_t inflight_lock;
-		struct list_head inflight_list;
-	};
-	struct delayed_work file_put_work;
-	struct llist_head file_put_llist;
-	struct work_struct exit_work;
-	struct io_restriction restrictions;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_buffer {
-	struct list_head list;
-	__u64 addr;
-	__s32 len;
-	__u16 bid;
-};
-
-struct io_sq_data {
-	refcount_t refs;
-	struct mutex lock;
-	struct list_head ctx_list;
-	struct list_head ctx_new_list;
-	struct mutex ctx_lock;
-	struct task_struct *thread;
-	struct wait_queue_head wait;
-};
-
-struct io_rw {
-	struct kiocb kiocb;
-	u64 addr;
-	u64 len;
-};
-
-struct io_poll_iocb {
-	struct file *file;
-	union {
-		struct wait_queue_head *head;
-		u64 addr;
-	};
-	__poll_t events;
-	bool done;
-	bool canceled;
-	struct wait_queue_entry wait;
-};
-
-struct io_accept {
-	struct file *file;
-	struct sockaddr *addr;
-	int *addr_len;
-	int flags;
-	long unsigned int nofile;
-};
-
-struct io_sync {
-	struct file *file;
-	loff_t len;
-	loff_t off;
-	int flags;
-	int mode;
-};
-
-struct io_cancel {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_timeout {
-	struct file *file;
-	u32 off;
-	u32 target_seq;
-	struct list_head list;
-};
-
-struct io_timeout_rem {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_connect {
-	struct file *file;
-	struct sockaddr *addr;
-	int addr_len;
-};
-
-struct io_sr_msg {
-	struct file *file;
-	union {
-		struct user_msghdr *umsg;
-		void *buf;
-	};
-	int msg_flags;
-	int bgid;
-	size_t len;
-	struct io_buffer *kbuf;
-};
-
-struct io_open {
-	struct file *file;
-	int dfd;
-	bool ignore_nonblock;
-	struct filename *filename;
-	struct open_how how;
-	long unsigned int nofile;
-};
-
-struct io_close {
-	struct file *file;
-	struct file *put_file;
-	int fd;
-};
-
-struct io_files_update {
-	struct file *file;
-	u64 arg;
-	u32 nr_args;
-	u32 offset;
-};
-
-struct io_fadvise {
-	struct file *file;
-	u64 offset;
-	u32 len;
-	u32 advice;
-};
-
-struct io_madvise {
-	struct file *file;
-	u64 addr;
-	u32 len;
-	u32 advice;
-};
-
-struct io_epoll {
-	struct file *file;
-	int epfd;
-	int op;
-	int fd;
-	struct epoll_event event;
-};
-
-struct io_splice {
-	struct file *file_out;
-	struct file *file_in;
-	loff_t off_out;
-	loff_t off_in;
-	u64 len;
-	unsigned int flags;
-};
-
-struct io_provide_buf {
-	struct file *file;
-	__u64 addr;
-	__s32 len;
-	__u32 bgid;
-	__u16 nbufs;
-	__u16 bid;
-};
-
-struct io_statx {
-	struct file *file;
-	int dfd;
-	unsigned int mask;
-	unsigned int flags;
-	const char *filename;
-	struct statx *buffer;
-};
-
-struct io_completion {
-	struct file *file;
-	struct list_head list;
-	int cflags;
-};
-
-struct async_poll;
-
-struct io_kiocb {
-	union {
-		struct file *file;
-		struct io_rw rw;
-		struct io_poll_iocb poll;
-		struct io_accept accept;
-		struct io_sync sync;
-		struct io_cancel cancel;
-		struct io_timeout timeout;
-		struct io_timeout_rem timeout_rem;
-		struct io_connect connect;
-		struct io_sr_msg sr_msg;
-		struct io_open open;
-		struct io_close close;
-		struct io_files_update files_update;
-		struct io_fadvise fadvise;
-		struct io_madvise madvise;
-		struct io_epoll epoll;
-		struct io_splice splice;
-		struct io_provide_buf pbuf;
-		struct io_statx statx;
-		struct io_completion compl;
-	};
-	void *async_data;
-	u8 opcode;
-	u8 iopoll_completed;
-	u16 buf_index;
-	u32 result;
-	struct io_ring_ctx *ctx;
-	unsigned int flags;
-	refcount_t refs;
-	struct task_struct *task;
-	u64 user_data;
-	struct list_head link_list;
-	struct list_head inflight_entry;
-	struct percpu_ref *fixed_file_refs;
-	struct callback_head task_work;
-	struct hlist_node hash_node;
-	struct async_poll *apoll;
-	struct io_wq_work work;
-};
-
-struct io_timeout_data {
-	struct io_kiocb *req;
-	struct hrtimer timer;
-	struct timespec64 ts;
-	enum hrtimer_mode mode;
-};
-
-struct io_async_connect {
-	struct __kernel_sockaddr_storage address;
-};
-
-struct io_async_msghdr {
-	struct iovec fast_iov[8];
-	struct iovec *iov;
-	struct sockaddr *uaddr;
-	struct msghdr msg;
-	struct __kernel_sockaddr_storage addr;
-};
-
-struct io_async_rw {
-	struct iovec fast_iov[8];
-	const struct iovec *free_iovec;
-	struct iov_iter iter;
-	size_t bytes_done;
-	struct wait_page_queue wpq;
-};
-
-enum {
-	REQ_F_FIXED_FILE_BIT = 0,
-	REQ_F_IO_DRAIN_BIT = 1,
-	REQ_F_LINK_BIT = 2,
-	REQ_F_HARDLINK_BIT = 3,
-	REQ_F_FORCE_ASYNC_BIT = 4,
-	REQ_F_BUFFER_SELECT_BIT = 5,
-	REQ_F_LINK_HEAD_BIT = 6,
-	REQ_F_FAIL_LINK_BIT = 7,
-	REQ_F_INFLIGHT_BIT = 8,
-	REQ_F_CUR_POS_BIT = 9,
-	REQ_F_NOWAIT_BIT = 10,
-	REQ_F_LINK_TIMEOUT_BIT = 11,
-	REQ_F_ISREG_BIT = 12,
-	REQ_F_NEED_CLEANUP_BIT = 13,
-	REQ_F_POLLED_BIT = 14,
-	REQ_F_BUFFER_SELECTED_BIT = 15,
-	REQ_F_NO_FILE_TABLE_BIT = 16,
-	REQ_F_WORK_INITIALIZED_BIT = 17,
-	REQ_F_LTIMEOUT_ACTIVE_BIT = 18,
-	__REQ_F_LAST_BIT = 19,
-};
-
-enum {
-	REQ_F_FIXED_FILE = 1,
-	REQ_F_IO_DRAIN = 2,
-	REQ_F_LINK = 4,
-	REQ_F_HARDLINK = 8,
-	REQ_F_FORCE_ASYNC = 16,
-	REQ_F_BUFFER_SELECT = 32,
-	REQ_F_LINK_HEAD = 64,
-	REQ_F_FAIL_LINK = 128,
-	REQ_F_INFLIGHT = 256,
-	REQ_F_CUR_POS = 512,
-	REQ_F_NOWAIT = 1024,
-	REQ_F_LINK_TIMEOUT = 2048,
-	REQ_F_ISREG = 4096,
-	REQ_F_NEED_CLEANUP = 8192,
-	REQ_F_POLLED = 16384,
-	REQ_F_BUFFER_SELECTED = 32768,
-	REQ_F_NO_FILE_TABLE = 65536,
-	REQ_F_WORK_INITIALIZED = 131072,
-	REQ_F_LTIMEOUT_ACTIVE = 262144,
-};
-
-struct async_poll {
-	struct io_poll_iocb poll;
-	struct io_poll_iocb *double_poll;
-};
-
-struct io_defer_entry {
-	struct list_head list;
-	struct io_kiocb *req;
-	u32 seq;
-};
-
-struct io_comp_state {
-	unsigned int nr;
-	struct list_head list;
-	struct io_ring_ctx *ctx;
-};
-
-struct io_submit_state {
-	struct blk_plug plug;
-	void *reqs[8];
-	unsigned int free_reqs;
-	struct io_comp_state comp;
-	struct file *file;
-	unsigned int fd;
-	unsigned int has_refs;
-	unsigned int ios_left;
-};
-
-struct io_op_def {
-	unsigned int needs_file: 1;
-	unsigned int needs_file_no_error: 1;
-	unsigned int hash_reg_file: 1;
-	unsigned int unbound_nonreg_file: 1;
-	unsigned int not_supported: 1;
-	unsigned int pollin: 1;
-	unsigned int pollout: 1;
-	unsigned int buffer_select: 1;
-	unsigned int needs_async_data: 1;
-	short unsigned int async_size;
-	unsigned int work_flags;
-};
-
-enum io_mem_account {
-	ACCT_LOCKED = 0,
-	ACCT_PINNED = 1,
-};
-
-struct req_batch {
-	void *reqs[8];
-	int to_free;
-	struct task_struct *task;
-	int task_refs;
-};
-
-struct io_poll_table {
-	struct poll_table_struct pt;
-	struct io_kiocb *req;
-	int error;
-};
-
-enum sq_ret {
-	SQT_IDLE = 1,
-	SQT_SPIN = 2,
-	SQT_DID_WORK = 4,
-};
-
-struct io_wait_queue {
-	struct wait_queue_entry wq;
-	struct io_ring_ctx *ctx;
-	unsigned int to_wait;
-	unsigned int nr_timeouts;
-};
-
-struct io_file_put {
-	struct list_head list;
-	struct file *file;
-};
-
-struct io_wq_work_list {
-	struct io_wq_work_node *first;
-	struct io_wq_work_node *last;
-};
-
-typedef bool work_cancel_fn(struct io_wq_work *, void *);
-
-enum {
-	IO_WORKER_F_UP = 1,
-	IO_WORKER_F_RUNNING = 2,
-	IO_WORKER_F_FREE = 4,
-	IO_WORKER_F_FIXED = 8,
-	IO_WORKER_F_BOUND = 16,
-};
-
-enum {
-	IO_WQ_BIT_EXIT = 0,
-	IO_WQ_BIT_CANCEL = 1,
-	IO_WQ_BIT_ERROR = 2,
-};
-
-enum {
-	IO_WQE_FLAG_STALLED = 1,
-};
-
-struct io_wqe;
-
-struct io_worker {
-	refcount_t ref;
-	unsigned int flags;
-	struct hlist_nulls_node nulls_node;
-	struct list_head all_list;
-	struct task_struct *task;
-	struct io_wqe *wqe;
-	struct io_wq_work *cur_work;
-	spinlock_t lock;
-	struct callback_head rcu;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *cur_creds;
-	const struct cred *saved_creds;
-	struct files_struct *restore_files;
-	struct nsproxy *restore_nsproxy;
-	struct fs_struct *restore_fs;
-};
-
-struct io_wqe_acct {
-	unsigned int nr_workers;
-	unsigned int max_workers;
-	atomic_t nr_running;
-};
-
-struct io_wq___2;
-
-struct io_wqe {
-	struct {
-		raw_spinlock_t lock;
-		struct io_wq_work_list work_list;
-		long unsigned int hash_map;
-		unsigned int flags;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	int node;
-	struct io_wqe_acct acct[2];
-	struct hlist_nulls_head free_list;
-	struct list_head all_list;
-	struct io_wq___2 *wq;
-	struct io_wq_work *hash_tail[64];
-};
-
-enum {
-	IO_WQ_ACCT_BOUND = 0,
-	IO_WQ_ACCT_UNBOUND = 1,
-};
-
-struct io_wq___2 {
-	struct io_wqe **wqes;
-	long unsigned int state;
-	free_work_fn *free_work;
-	io_wq_work_fn *do_work;
-	struct task_struct *manager;
-	struct user_struct *user;
-	refcount_t refs;
-	struct completion done;
-	struct hlist_node cpuhp_node;
-	refcount_t use_refs;
-};
-
-struct io_cb_cancel_data {
-	work_cancel_fn *fn;
-	void *data;
-	int nr_running;
-	int nr_pending;
-	bool cancel_all;
-};
-
-struct iomap_ops {
-	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap___2 *, struct iomap___2 *);
-	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap___2 *);
-};
-
-struct trace_event_raw_dax_pmd_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	long unsigned int max_pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_load_hole_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	struct page *zero_page;
-	void *radix_entry;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_insert_mapping_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long int length;
-	u64 pfn_val;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pte_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_insert_mapping {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_range_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int start_index;
-	long unsigned int end_index;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_one {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int pgoff;
-	long unsigned int pglen;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dax_pmd_fault_class {};
-
-struct trace_event_data_offsets_dax_pmd_load_hole_class {};
-
-struct trace_event_data_offsets_dax_pmd_insert_mapping_class {};
-
-struct trace_event_data_offsets_dax_pte_fault_class {};
-
-struct trace_event_data_offsets_dax_insert_mapping {};
-
-struct trace_event_data_offsets_dax_writeback_range_class {};
-
-struct trace_event_data_offsets_dax_writeback_one {};
-
-typedef void (*btf_trace_dax_pmd_fault)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_fault_done)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_load_hole)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_load_hole_fallback)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_insert_mapping)(void *, struct inode *, struct vm_fault *, long int, pfn_t, void *);
-
-typedef void (*btf_trace_dax_pte_fault)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_pte_fault_done)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_load_hole)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite_no_entry)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_mapping)(void *, struct inode *, struct vm_fault *, void *);
-
-typedef void (*btf_trace_dax_writeback_range)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_range_done)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_one)(void *, struct inode *, long unsigned int, long unsigned int);
-
-struct exceptional_entry_key {
-	struct xarray *xa;
-	long unsigned int entry_start;
-};
-
-struct wait_exceptional_entry_queue {
-	wait_queue_entry_t wait;
-	struct exceptional_entry_key key;
-};
-
-struct crypto_skcipher;
-
-struct fscrypt_blk_crypto_key;
-
-struct fscrypt_prepared_key {
-	struct crypto_skcipher *tfm;
-	struct fscrypt_blk_crypto_key *blk_key;
-};
-
-struct fscrypt_mode;
-
-struct fscrypt_direct_key;
-
-struct fscrypt_info {
-	struct fscrypt_prepared_key ci_enc_key;
-	bool ci_owns_key;
-	bool ci_inlinecrypt;
-	struct fscrypt_mode *ci_mode;
-	struct inode *ci_inode;
-	struct key *ci_master_key;
-	struct list_head ci_master_key_link;
-	struct fscrypt_direct_key *ci_direct_key;
-	siphash_key_t ci_dirhash_key;
-	bool ci_dirhash_key_initialized;
-	union fscrypt_policy ci_policy;
-	u8 ci_nonce[16];
-	u32 ci_hashed_ino;
-};
-
-struct crypto_async_request;
-
-typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
-
-struct crypto_async_request {
-	struct list_head list;
-	crypto_completion_t complete;
-	void *data;
-	struct crypto_tfm *tfm;
-	u32 flags;
-};
-
-struct crypto_wait {
-	struct completion completion;
-	int err;
-};
-
-struct skcipher_request {
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	struct crypto_async_request base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_skcipher {
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct fscrypt_mode {
-	const char *friendly_name;
-	const char *cipher_str;
-	int keysize;
-	int ivsize;
-	int logged_impl_name;
-	enum blk_crypto_mode_num blk_crypto_mode;
-};
-
-typedef enum {
-	FS_DECRYPT = 0,
-	FS_ENCRYPT = 1,
-} fscrypt_direction_t;
-
-union fscrypt_iv {
-	struct {
-		__le64 lblk_num;
-		u8 nonce[16];
-	};
-	u8 raw[32];
-	__le64 dun[4];
-};
-
-struct fscrypt_str {
-	unsigned char *name;
-	u32 len;
-};
-
-struct fscrypt_name {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	u32 hash;
-	u32 minor_hash;
-	struct fscrypt_str crypto_buf;
-	bool is_nokey_name;
-};
-
-struct fscrypt_nokey_name {
-	u32 dirhash[2];
-	u8 bytes[149];
-	u8 sha256[32];
-};
-
-struct shash_alg {
-	int (*init)(struct shash_desc *);
-	int (*update)(struct shash_desc *, const u8 *, unsigned int);
-	int (*final)(struct shash_desc *, u8 *);
-	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*export)(struct shash_desc *, void *);
-	int (*import)(struct shash_desc *, const void *);
-	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_shash *);
-	void (*exit_tfm)(struct crypto_shash *);
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int digestsize;
-	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fscrypt_hkdf {
-	struct crypto_shash *hmac_tfm;
-};
-
-struct fscrypt_key_specifier {
-	__u32 type;
-	__u32 __reserved;
-	union {
-		__u8 __reserved[32];
-		__u8 descriptor[8];
-		__u8 identifier[16];
-	} u;
-};
-
-struct fscrypt_symlink_data {
-	__le16 len;
-	char encrypted_path[1];
-} __attribute__((packed));
-
-struct fscrypt_master_key_secret {
-	struct fscrypt_hkdf hkdf;
-	u32 size;
-	u8 raw[64];
-};
-
-struct fscrypt_master_key {
-	struct fscrypt_master_key_secret mk_secret;
-	struct rw_semaphore mk_secret_sem;
-	struct fscrypt_key_specifier mk_spec;
-	struct key *mk_users;
-	refcount_t mk_refcount;
-	struct list_head mk_decrypted_inodes;
-	spinlock_t mk_decrypted_inodes_lock;
-	struct fscrypt_prepared_key mk_direct_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[10];
-	siphash_key_t mk_ino_hash_key;
-	bool mk_ino_hash_key_initialized;
-};
-
-enum key_state {
-	KEY_IS_UNINSTANTIATED = 0,
-	KEY_IS_POSITIVE = 1,
+	struct hlist_head key_hashtable[128];
 };
 
 struct fscrypt_provisioning_key_payload {
@@ -40694,675 +109524,1706 @@
 	__u32 __out_reserved[13];
 };
 
-struct skcipher_alg {
-	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
-	int (*encrypt)(struct skcipher_request *);
-	int (*decrypt)(struct skcipher_request *);
-	int (*init)(struct crypto_skcipher *);
-	void (*exit)(struct crypto_skcipher *);
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-	unsigned int chunksize;
-	unsigned int walksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fscrypt_context_v1 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 master_key_descriptor[8];
-	u8 nonce[16];
-};
-
-struct fscrypt_context_v2 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 __reserved[4];
-	u8 master_key_identifier[16];
-	u8 nonce[16];
-};
-
-union fscrypt_context {
-	u8 version;
-	struct fscrypt_context_v1 v1;
-	struct fscrypt_context_v2 v2;
-};
-
-struct crypto_template;
-
-struct crypto_spawn;
-
-struct crypto_instance {
-	struct crypto_alg alg;
-	struct crypto_template *tmpl;
-	union {
-		struct hlist_node list;
-		struct crypto_spawn *spawns;
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_spawn {
-	struct list_head list;
-	struct crypto_alg *alg;
-	union {
-		struct crypto_instance *inst;
-		struct crypto_spawn *next;
-	};
-	const struct crypto_type *frontend;
-	u32 mask;
-	bool dead;
-	bool registered;
-};
-
-struct rtattr;
-
-struct crypto_template {
-	struct list_head list;
-	struct hlist_head instances;
-	struct module *module;
-	int (*create)(struct crypto_template *, struct rtattr **);
-	char name[128];
-};
-
-struct user_key_payload {
-	struct callback_head rcu;
-	short unsigned int datalen;
-	long: 48;
-	char data[0];
-};
-
-struct fscrypt_key {
-	__u32 mode;
-	__u8 raw[64];
-	__u32 size;
-};
-
-struct fscrypt_direct_key {
-	struct hlist_node dk_node;
-	refcount_t dk_refcount;
-	const struct fscrypt_mode *dk_mode;
-	struct fscrypt_prepared_key dk_key;
-	u8 dk_descriptor[8];
-	u8 dk_raw[64];
-};
-
-struct fscrypt_get_policy_ex_arg {
-	__u64 policy_size;
-	union {
-		__u8 version;
-		struct fscrypt_policy_v1 v1;
-		struct fscrypt_policy_v2 v2;
-	} policy;
-};
-
-struct fscrypt_dummy_policy {
-	const union fscrypt_policy *policy;
-};
-
-struct fscrypt_blk_crypto_key {
-	struct blk_crypto_key base;
-	int num_devs;
-	struct request_queue *devs[0];
-};
-
-struct fsverity_hash_alg;
-
-struct merkle_tree_params {
-	struct fsverity_hash_alg *hash_alg;
-	const u8 *hashstate;
-	unsigned int digest_size;
-	unsigned int block_size;
-	unsigned int hashes_per_block;
-	unsigned int log_blocksize;
-	unsigned int log_arity;
-	unsigned int num_levels;
-	u64 tree_size;
-	long unsigned int level0_blocks;
-	u64 level_start[8];
-};
-
-struct fsverity_info {
-	struct merkle_tree_params tree_params;
-	u8 root_hash[64];
-	u8 measurement[64];
-	const struct inode *inode;
-};
-
-struct fsverity_enable_arg {
-	__u32 version;
-	__u32 hash_algorithm;
-	__u32 block_size;
-	__u32 salt_size;
-	__u64 salt_ptr;
-	__u32 sig_size;
-	__u32 __reserved1;
-	__u64 sig_ptr;
-	__u64 __reserved2[11];
-};
-
-struct crypto_ahash;
-
-struct fsverity_hash_alg {
-	struct crypto_ahash *tfm;
-	const char *name;
-	unsigned int digest_size;
-	unsigned int block_size;
-	mempool_t req_pool;
-};
-
-struct ahash_request;
-
-struct crypto_ahash {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct fsverity_descriptor {
-	__u8 version;
-	__u8 hash_algorithm;
-	__u8 log_blocksize;
-	__u8 salt_size;
-	__le32 sig_size;
-	__le64 data_size;
-	__u8 root_hash[64];
-	__u8 salt[32];
-	__u8 __reserved[144];
-	__u8 signature[0];
-};
-
-struct ahash_request {
-	struct crypto_async_request base;
-	unsigned int nbytes;
-	struct scatterlist *src;
-	u8 *result;
-	void *priv;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct hash_alg_common {
-	unsigned int digestsize;
-	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct fsverity_digest {
-	__u16 digest_algorithm;
-	__u16 digest_size;
-	__u8 digest[0];
-};
-
-struct flock64 {
-	short int l_type;
-	short int l_whence;
-	__kernel_loff_t l_start;
-	__kernel_loff_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct trace_event_raw_locks_get_lock_context {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	unsigned char type;
-	struct file_lock_context *ctx;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lock {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_pid;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	loff_t fl_start;
-	loff_t fl_end;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lease {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	char __data[0];
-};
-
-struct trace_event_raw_generic_add_lease {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	int wcount;
-	int rcount;
-	int icount;
-	dev_t s_dev;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	char __data[0];
-};
-
-struct trace_event_raw_leases_conflict {
-	struct trace_entry ent;
-	void *lease;
-	void *breaker;
-	unsigned int l_fl_flags;
-	unsigned int b_fl_flags;
-	unsigned char l_fl_type;
-	unsigned char b_fl_type;
-	bool conflict;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_locks_get_lock_context {};
-
-struct trace_event_data_offsets_filelock_lock {};
-
-struct trace_event_data_offsets_filelock_lease {};
-
-struct trace_event_data_offsets_generic_add_lease {};
-
-struct trace_event_data_offsets_leases_conflict {};
-
-typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
-
-typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
-
-struct file_lock_list_struct {
-	spinlock_t lock;
-	struct hlist_head hlist;
-};
-
-struct locks_iterator {
-	int li_cpu;
-	loff_t li_pos;
-};
-
-typedef unsigned int __kernel_uid_t;
-
-typedef unsigned int __kernel_gid_t;
-
-struct gnu_property {
-	u32 pr_type;
-	u32 pr_datasz;
-};
-
-struct elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	long unsigned int pr_flag;
-	__kernel_uid_t pr_uid;
-	__kernel_gid_t pr_gid;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct core_vma_metadata {
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int flags;
-	long unsigned int dump_size;
-};
-
-struct memelfnote {
-	const char *name;
-	int type;
-	unsigned int datasz;
-	void *data;
-};
-
-struct elf_thread_core_info {
-	struct elf_thread_core_info *next;
-	struct task_struct *task;
-	struct elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info {
-	struct elf_thread_core_info *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct elf32_shdr {
-	Elf32_Word sh_name;
-	Elf32_Word sh_type;
-	Elf32_Word sh_flags;
-	Elf32_Addr sh_addr;
-	Elf32_Off sh_offset;
-	Elf32_Word sh_size;
-	Elf32_Word sh_link;
-	Elf32_Word sh_info;
-	Elf32_Word sh_addralign;
-	Elf32_Word sh_entsize;
-};
-
-typedef u16 __compat_uid_t;
-
-typedef u16 __compat_gid_t;
-
-typedef unsigned int compat_elf_greg_t;
-
-typedef compat_elf_greg_t compat_elf_gregset_t[18];
-
-struct compat_elf_siginfo {
-	compat_int_t si_signo;
-	compat_int_t si_code;
-	compat_int_t si_errno;
-};
-
-struct compat_elf_prstatus {
-	struct compat_elf_siginfo pr_info;
-	short int pr_cursig;
-	compat_ulong_t pr_sigpend;
-	compat_ulong_t pr_sighold;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	struct old_timeval32 pr_utime;
-	struct old_timeval32 pr_stime;
-	struct old_timeval32 pr_cutime;
-	struct old_timeval32 pr_cstime;
-	compat_elf_gregset_t pr_reg;
-	compat_int_t pr_fpvalid;
-};
-
-struct compat_elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	compat_ulong_t pr_flag;
-	__compat_uid_t pr_uid;
-	__compat_gid_t pr_gid;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct elf_thread_core_info___2 {
-	struct elf_thread_core_info___2 *next;
-	struct task_struct *task;
-	struct compat_elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info___2 {
-	struct elf_thread_core_info___2 *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	compat_siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct mb_cache_entry {
-	struct list_head e_list;
-	struct hlist_bl_node e_hash_list;
-	atomic_t e_refcnt;
-	u32 e_key;
-	u32 e_referenced: 1;
-	u32 e_reusable: 1;
-	u64 e_value;
-};
-
-struct mb_cache {
-	struct hlist_bl_head *c_hash;
-	int c_bucket_bits;
-	long unsigned int c_max_entries;
-	spinlock_t c_list_lock;
-	struct list_head c_list;
-	long unsigned int c_entry_count;
-	struct shrinker c_shrink;
-	struct work_struct c_shrink_work;
-};
-
-struct posix_acl_xattr_entry {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-};
-
-struct posix_acl_xattr_header {
-	__le32 a_version;
-};
-
-struct core_name {
-	char *corename;
-	int used;
-	int size;
-};
-
-struct trace_event_raw_iomap_readpage_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	int nr_pages;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_range_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t size;
-	long unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	dev_t bdev;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_apply {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t pos;
-	loff_t length;
-	unsigned int flags;
-	const void *ops;
-	void *actor;
-	long unsigned int caller;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iomap_readpage_class {};
-
-struct trace_event_data_offsets_iomap_range_class {};
-
-struct trace_event_data_offsets_iomap_class {};
-
-struct trace_event_data_offsets_iomap_apply {};
-
-typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_releasepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply)(void *, struct inode *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);
-
-typedef loff_t (*iomap_actor_t)(struct inode *, loff_t, loff_t, void *, struct iomap___2 *, struct iomap___2 *);
-
-struct iomap_ioend {
-	struct list_head io_list;
-	u16 io_type;
-	u16 io_flags;
-	struct inode *io_inode;
-	size_t io_size;
-	loff_t io_offset;
-	void *io_private;
-	struct bio *io_bio;
-	struct bio io_inline_bio;
-};
-
-struct iomap_writepage_ctx;
-
-struct iomap_writeback_ops {
-	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
-	int (*prepare_ioend)(struct iomap_ioend *, int);
-	void (*discard_page)(struct page *, loff_t);
-};
-
-struct iomap_writepage_ctx {
-	struct iomap___2 iomap;
-	struct iomap_ioend *ioend;
-	const struct iomap_writeback_ops *ops;
-};
-
-struct iomap_page {
-	atomic_t read_bytes_pending;
-	atomic_t write_bytes_pending;
-	spinlock_t uptodate_lock;
-	long unsigned int uptodate[0];
-};
-
-struct iomap_readpage_ctx {
-	struct page *cur_page;
-	bool cur_page_in_bio;
-	struct bio *bio;
-	struct readahead_control *rac;
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
 };
 
 enum {
-	IOMAP_WRITE_F_UNSHARE = 1,
+	VERBOSE_STATUS = 1,
+};
+
+enum {
+	Enabled = 0,
+	Magic = 1,
+};
+
+typedef struct {
+	struct list_head list;
+	long unsigned int flags;
+	int offset;
+	int size;
+	char *magic;
+	char *mask;
+	const char *interpreter;
+	char *name;
+	struct dentry *dentry;
+	struct file *interp_file;
+} Node;
+
+struct rpc_timer {
+	struct list_head list;
+	long unsigned int expires;
+	struct delayed_work dwork;
+};
+
+struct rpc_wait_queue {
+	spinlock_t lock;
+	struct list_head tasks[4];
+	unsigned char maxpriority;
+	unsigned char priority;
+	unsigned char nr;
+	short unsigned int qlen;
+	struct rpc_timer timer_list;
+	const char *name;
+};
+
+struct nfs_seqid_counter {
+	ktime_t create_time;
+	int owner_id;
+	int flags;
+	u32 counter;
+	spinlock_t lock;
+	struct list_head list;
+	struct rpc_wait_queue wait;
+};
+
+struct nfs4_stateid_struct {
+	union {
+		char data[16];
+		struct {
+			__be32 seqid;
+			char other[12];
+		};
+	};
+	enum {
+		NFS4_INVALID_STATEID_TYPE = 0,
+		NFS4_SPECIAL_STATEID_TYPE = 1,
+		NFS4_OPEN_STATEID_TYPE = 2,
+		NFS4_LOCK_STATEID_TYPE = 3,
+		NFS4_DELEGATION_STATEID_TYPE = 4,
+		NFS4_LAYOUT_STATEID_TYPE = 5,
+		NFS4_PNFS_DS_STATEID_TYPE = 6,
+		NFS4_REVOKED_STATEID_TYPE = 7,
+	} type;
+};
+
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+struct nfs4_state;
+
+struct nfs4_lock_state {
+	struct list_head ls_locks;
+	struct nfs4_state *ls_state;
+	long unsigned int ls_flags;
+	struct nfs_seqid_counter ls_seqid;
+	nfs4_stateid ls_stateid;
+	refcount_t ls_count;
+	fl_owner_t ls_owner;
+};
+
+struct xdr_netobj {
+	unsigned int len;
+	u8 *data;
+};
+
+struct xdr_buf {
+	struct kvec head[1];
+	struct kvec tail[1];
+	struct bio_vec *bvec;
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int flags;
+	unsigned int buflen;
+	unsigned int len;
+};
+
+struct rpc_rqst;
+
+struct xdr_stream {
+	__be32 *p;
+	struct xdr_buf *buf;
+	__be32 *end;
+	struct kvec *iov;
+	struct kvec scratch;
+	struct page **page_ptr;
+	unsigned int nwords;
+	struct rpc_rqst *rqst;
+};
+
+struct rpc_xprt;
+
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+	struct rpc_xprt *rq_xprt;
+	struct xdr_buf rq_snd_buf;
+	struct xdr_buf rq_rcv_buf;
+	struct rpc_task *rq_task;
+	struct rpc_cred *rq_cred;
+	__be32 rq_xid;
+	int rq_cong;
+	u32 rq_seqno;
+	int rq_enc_pages_num;
+	struct page **rq_enc_pages;
+	void (*rq_release_snd_buf)(struct rpc_rqst *);
+	union {
+		struct list_head rq_list;
+		struct rb_node rq_recv;
+	};
+	struct list_head rq_xmit;
+	struct list_head rq_xmit2;
+	void *rq_buffer;
+	size_t rq_callsize;
+	void *rq_rbuffer;
+	size_t rq_rcvsize;
+	size_t rq_xmit_bytes_sent;
+	size_t rq_reply_bytes_recvd;
+	struct xdr_buf rq_private_buf;
+	long unsigned int rq_majortimeo;
+	long unsigned int rq_minortimeo;
+	long unsigned int rq_timeout;
+	ktime_t rq_rtt;
+	unsigned int rq_retries;
+	unsigned int rq_connect_cookie;
+	atomic_t rq_pin;
+	u32 rq_bytes_sent;
+	ktime_t rq_xtime;
+	int rq_ntrans;
+	struct list_head rq_bc_list;
+	long unsigned int rq_bc_pa_state;
+	struct list_head rq_bc_pa_list;
+};
+
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+	const struct rpc_procinfo *rpc_proc;
+	void *rpc_argp;
+	void *rpc_resp;
+	const struct cred *rpc_cred;
+};
+
+struct rpc_procinfo {
+	u32 p_proc;
+	kxdreproc_t p_encode;
+	kxdrdproc_t p_decode;
+	unsigned int p_arglen;
+	unsigned int p_replen;
+	unsigned int p_timer;
+	u32 p_statidx;
+	const char *p_name;
+};
+
+struct rpc_wait {
+	struct list_head list;
+	struct list_head links;
+	struct list_head timer_list;
+};
+
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+	atomic_t tk_count;
+	int tk_status;
+	struct list_head tk_task;
+	void (*tk_callback)(struct rpc_task *);
+	void (*tk_action)(struct rpc_task *);
+	long unsigned int tk_timeout;
+	long unsigned int tk_runstate;
+	struct rpc_wait_queue *tk_waitqueue;
+	union {
+		struct work_struct tk_work;
+		struct rpc_wait tk_wait;
+	} u;
+	struct rpc_message tk_msg;
+	void *tk_calldata;
+	const struct rpc_call_ops *tk_ops;
+	struct rpc_clnt *tk_client;
+	struct rpc_xprt *tk_xprt;
+	struct rpc_cred *tk_op_cred;
+	struct rpc_rqst *tk_rqstp;
+	struct workqueue_struct *tk_workqueue;
+	ktime_t tk_start;
+	pid_t tk_owner;
+	int tk_rpc_status;
+	short unsigned int tk_flags;
+	short unsigned int tk_timeouts;
+	short unsigned int tk_pid;
+	unsigned char tk_priority: 2;
+	unsigned char tk_garb_retry: 2;
+	unsigned char tk_cred_retry: 2;
+	unsigned char tk_rebind_retry: 2;
+};
+
+struct rpc_call_ops {
+	void (*rpc_call_prepare)(struct rpc_task *, void *);
+	void (*rpc_call_done)(struct rpc_task *, void *);
+	void (*rpc_count_stats)(struct rpc_task *, void *);
+	void (*rpc_release)(void *);
+};
+
+struct rpc_iostats;
+
+struct rpc_pipe_dir_head {
+	struct list_head pdh_entries;
+	struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+	long unsigned int timeo;
+	long unsigned int srtt[5];
+	long unsigned int sdrtt[5];
+	int ntimeouts[5];
+};
+
+struct rpc_timeout {
+	long unsigned int to_initval;
+	long unsigned int to_maxval;
+	long unsigned int to_increment;
+	unsigned int to_retries;
+	unsigned char to_exponential;
+};
+
+struct rpc_sysfs_client;
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+	struct rpc_xprt_switch *xpi_xpswitch;
+	struct rpc_xprt *xpi_cursor;
+	const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_program;
+
+struct rpc_clnt {
+	refcount_t cl_count;
+	unsigned int cl_clid;
+	struct list_head cl_clients;
+	struct list_head cl_tasks;
+	atomic_t cl_pid;
+	spinlock_t cl_lock;
+	struct rpc_xprt *cl_xprt;
+	const struct rpc_procinfo *cl_procinfo;
+	u32 cl_prog;
+	u32 cl_vers;
+	u32 cl_maxproc;
+	struct rpc_auth *cl_auth;
+	struct rpc_stat *cl_stats;
+	struct rpc_iostats *cl_metrics;
+	unsigned int cl_softrtry: 1;
+	unsigned int cl_softerr: 1;
+	unsigned int cl_discrtry: 1;
+	unsigned int cl_noretranstimeo: 1;
+	unsigned int cl_autobind: 1;
+	unsigned int cl_chatty: 1;
+	struct rpc_rtt *cl_rtt;
+	const struct rpc_timeout *cl_timeout;
+	atomic_t cl_swapper;
+	int cl_nodelen;
+	char cl_nodename[65];
+	struct rpc_pipe_dir_head cl_pipedir_objects;
+	struct rpc_clnt *cl_parent;
+	struct rpc_rtt cl_rtt_default;
+	struct rpc_timeout cl_timeout_default;
+	const struct rpc_program *cl_program;
+	const char *cl_principal;
+	struct dentry *cl_debugfs;
+	struct rpc_sysfs_client *cl_sysfs;
+	union {
+		struct rpc_xprt_iter cl_xpi;
+		struct work_struct cl_work;
+	};
+	const struct cred *cl_cred;
+	unsigned int cl_max_connect;
+};
+
+struct svc_xprt;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt_ops;
+
+struct svc_serv;
+
+struct xprt_class;
+
+struct rpc_xprt {
+	struct kref kref;
+	const struct rpc_xprt_ops *ops;
+	unsigned int id;
+	const struct rpc_timeout *timeout;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	int prot;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	size_t max_payload;
+	struct rpc_wait_queue binding;
+	struct rpc_wait_queue sending;
+	struct rpc_wait_queue pending;
+	struct rpc_wait_queue backlog;
+	struct list_head free;
+	unsigned int max_reqs;
+	unsigned int min_reqs;
+	unsigned int num_reqs;
+	long unsigned int state;
+	unsigned char resvport: 1;
+	unsigned char reuseport: 1;
+	atomic_t swapper;
+	unsigned int bind_index;
+	struct list_head xprt_switch;
+	long unsigned int bind_timeout;
+	long unsigned int reestablish_timeout;
+	unsigned int connect_cookie;
+	struct work_struct task_cleanup;
+	struct timer_list timer;
+	long unsigned int last_used;
+	long unsigned int idle_timeout;
+	long unsigned int connect_timeout;
+	long unsigned int max_reconnect_timeout;
+	atomic_long_t queuelen;
+	spinlock_t transport_lock;
+	spinlock_t reserve_lock;
+	spinlock_t queue_lock;
+	u32 xid;
+	struct rpc_task *snd_task;
+	struct list_head xmit_queue;
+	atomic_long_t xmit_queuelen;
+	struct svc_xprt *bc_xprt;
+	struct svc_serv *bc_serv;
+	unsigned int bc_alloc_max;
+	unsigned int bc_alloc_count;
+	atomic_t bc_slot_count;
+	spinlock_t bc_pa_lock;
+	struct list_head bc_pa_list;
+	struct rb_root recv_queue;
+	struct {
+		long unsigned int bind_count;
+		long unsigned int connect_count;
+		long unsigned int connect_start;
+		long unsigned int connect_time;
+		long unsigned int sends;
+		long unsigned int recvs;
+		long unsigned int bad_xids;
+		long unsigned int max_slots;
+		long long unsigned int req_u;
+		long long unsigned int bklog_u;
+		long long unsigned int sending_u;
+		long long unsigned int pending_u;
+	} stat;
+	struct net *xprt_net;
+	netns_tracker ns_tracker;
+	const char *servername;
+	const char *address_strings[6];
+	struct dentry *debugfs;
+	struct callback_head rcu;
+	const struct xprt_class *xprt_class;
+	struct rpc_sysfs_xprt *xprt_sysfs;
+	bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+	struct hlist_node cr_hash;
+	struct list_head cr_lru;
+	struct callback_head cr_rcu;
+	struct rpc_auth *cr_auth;
+	const struct rpc_credops *cr_ops;
+	long unsigned int cr_expire;
+	long unsigned int cr_flags;
+	refcount_t cr_count;
+	const struct cred *cr_cred;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+	const struct cred *cred;
+	const char *principal;
+};
+
+struct rpc_cred_cache;
+
+struct rpc_authops;
+
+struct rpc_auth {
+	unsigned int au_cslack;
+	unsigned int au_rslack;
+	unsigned int au_verfsize;
+	unsigned int au_ralign;
+	long unsigned int au_flags;
+	const struct rpc_authops *au_ops;
+	rpc_authflavor_t au_flavor;
+	refcount_t au_count;
+	struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+	const char *cr_name;
+	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+	void (*crdestroy)(struct rpc_cred *);
+	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+	int (*crrefresh)(struct rpc_task *);
+	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+	int (*crkey_timeout)(struct rpc_cred *);
+	char * (*crstringify_acceptor)(struct rpc_cred *);
+	bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+	struct module *owner;
+	rpc_authflavor_t au_flavor;
+	char *au_name;
+	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+	void (*destroy)(struct rpc_auth *);
+	int (*hash_cred)(struct auth_cred *, unsigned int);
+	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+};
+
+struct rpc_auth_create_args {
+	rpc_authflavor_t pseudoflavor;
+	const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+	unsigned int len;
+	u8 data[32];
+};
+
+struct rpcsec_gss_info {
+	struct rpcsec_gss_oid oid;
+	u32 qop;
+	u32 service;
+};
+
+struct rpc_xprt_ops {
+	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+	void (*rpcbind)(struct rpc_task *);
+	void (*set_port)(struct rpc_xprt *, short unsigned int);
+	void (*connect)(struct rpc_xprt *, struct rpc_task *);
+	int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+	short unsigned int (*get_srcport)(struct rpc_xprt *);
+	int (*buf_alloc)(struct rpc_task *);
+	void (*buf_free)(struct rpc_task *);
+	int (*prepare_request)(struct rpc_rqst *, struct xdr_buf *);
+	int (*send_request)(struct rpc_rqst *);
+	void (*wait_for_reply_request)(struct rpc_task *);
+	void (*timer)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_request)(struct rpc_task *);
+	void (*close)(struct rpc_xprt *);
+	void (*destroy)(struct rpc_xprt *);
+	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+	int (*enable_swap)(struct rpc_xprt *);
+	void (*disable_swap)(struct rpc_xprt *);
+	void (*inject_disconnect)(struct rpc_xprt *);
+	int (*bc_setup)(struct rpc_xprt *, unsigned int);
+	size_t (*bc_maxpayload)(struct rpc_xprt *);
+	unsigned int (*bc_num_slots)(struct rpc_xprt *);
+	void (*bc_free_rqst)(struct rpc_rqst *);
+	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_pool;
+
+struct svc_serv {
+	struct svc_program *sv_program;
+	struct svc_stat *sv_stats;
+	spinlock_t sv_lock;
+	struct kref sv_refcnt;
+	unsigned int sv_nrthreads;
+	unsigned int sv_maxconn;
+	unsigned int sv_max_payload;
+	unsigned int sv_max_mesg;
+	unsigned int sv_xdrsize;
+	struct list_head sv_permsocks;
+	struct list_head sv_tempsocks;
+	int sv_tmpcnt;
+	struct timer_list sv_temptimer;
+	char *sv_name;
+	unsigned int sv_nrpools;
+	struct svc_pool *sv_pools;
+	int (*sv_threadfn)(void *);
+	struct list_head sv_cb_list;
+	spinlock_t sv_cb_lock;
+	wait_queue_head_t sv_cb_waitq;
+	bool sv_bc_enabled;
+};
+
+struct xprt_create;
+
+struct xprt_class {
+	struct list_head list;
+	int ident;
+	struct rpc_xprt * (*setup)(struct xprt_create *);
+	struct module *owner;
+	char name[32];
+	const char *netid[0];
+};
+
+struct xprt_create {
+	int ident;
+	struct net *net;
+	struct sockaddr *srcaddr;
+	struct sockaddr *dstaddr;
+	size_t addrlen;
+	const char *servername;
+	struct svc_xprt *bc_xprt;
+	struct rpc_xprt_switch *bc_xps;
+	unsigned int flags;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+	spinlock_t xps_lock;
+	struct kref xps_kref;
+	unsigned int xps_id;
+	unsigned int xps_nxprts;
+	unsigned int xps_nactive;
+	unsigned int xps_nunique_destaddr_xprts;
+	atomic_long_t xps_queuelen;
+	struct list_head xps_xprt_list;
+	struct net *xps_net;
+	const struct rpc_xprt_iter_ops *xps_iter_ops;
+	struct rpc_sysfs_xprt_switch *xps_sysfs;
+	struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+	const struct rpc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int netreconn;
+	unsigned int rpccnt;
+	unsigned int rpcretrans;
+	unsigned int rpcauthrefresh;
+	unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+	const char *name;
+	u32 number;
+	unsigned int nrvers;
+	const struct rpc_version **version;
+	struct rpc_stat *stats;
+	const char *pipe_dir_name;
+};
+
+struct svc_stat {
+	struct svc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int rpccnt;
+	unsigned int rpcbadfmt;
+	unsigned int rpcbadauth;
+	unsigned int rpcbadclnt;
+};
+
+struct svc_version;
+
+struct svc_rqst;
+
+struct svc_process_info;
+
+struct svc_program {
+	struct svc_program *pg_next;
+	u32 pg_prog;
+	unsigned int pg_lovers;
+	unsigned int pg_hivers;
+	unsigned int pg_nvers;
+	const struct svc_version **pg_vers;
+	char *pg_name;
+	char *pg_class;
+	struct svc_stat *pg_stats;
+	int (*pg_authenticate)(struct svc_rqst *);
+	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct rpc_xprt_iter_ops {
+	void (*xpi_rewind)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_version {
+	u32 number;
+	unsigned int nrprocs;
+	const struct rpc_procinfo *procs;
+	unsigned int *counts;
+};
+
+struct nfs_fh {
+	short unsigned int size;
+	unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+	NFS_UNSTABLE = 0,
+	NFS_DATA_SYNC = 1,
+	NFS_FILE_SYNC = 2,
+	NFS_INVALID_STABLE_HOW = -1,
+};
+
+struct nfs4_label {
+	uint32_t lfs;
+	uint32_t pi;
+	u32 len;
+	char *label;
+};
+
+typedef struct {
+	char data[8];
+} nfs4_verifier;
+
+enum nfs4_change_attr_type {
+	NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+	NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+	NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+	struct gss_api_mech *mech_type;
+	void *internal_ctx_id;
+	unsigned int slack;
+	unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+	struct list_head gm_list;
+	struct module *gm_owner;
+	struct rpcsec_gss_oid gm_oid;
+	char *gm_name;
+	const struct gss_api_ops *gm_ops;
+	int gm_pf_num;
+	struct pf_desc *gm_pfs;
+	const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+	u32 pseudoflavor;
+	u32 qop;
+	u32 service;
+	char *name;
+	char *auth_domain_name;
+	struct auth_domain *domain;
+	bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+	struct kref ref;
+	struct hlist_node hash;
+	char *name;
+	struct auth_ops *flavour;
+	struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+	u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+	void (*gss_delete_sec_context)(void *);
+};
+
+struct nfs4_string {
+	unsigned int len;
+	char *data;
+};
+
+struct nfs_fsid {
+	uint64_t major;
+	uint64_t minor;
+};
+
+struct nfs4_threshold {
+	__u32 bm;
+	__u32 l_type;
+	__u64 rd_sz;
+	__u64 wr_sz;
+	__u64 rd_io_sz;
+	__u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+	unsigned int valid;
+	umode_t mode;
+	__u32 nlink;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	__u64 size;
+	union {
+		struct {
+			__u32 blocksize;
+			__u32 blocks;
+		} nfs2;
+		struct {
+			__u64 used;
+		} nfs3;
+	} du;
+	struct nfs_fsid fsid;
+	__u64 fileid;
+	__u64 mounted_on_fileid;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	__u64 change_attr;
+	__u64 pre_change_attr;
+	__u64 pre_size;
+	struct timespec64 pre_mtime;
+	struct timespec64 pre_ctime;
+	long unsigned int time_start;
+	long unsigned int gencount;
+	struct nfs4_string *owner_name;
+	struct nfs4_string *group_name;
+	struct nfs4_threshold *mdsthreshold;
+	struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+	struct nfs_fattr *fattr;
+	__u32 rtmax;
+	__u32 rtpref;
+	__u32 rtmult;
+	__u32 wtmax;
+	__u32 wtpref;
+	__u32 wtmult;
+	__u32 dtpref;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	__u32 lease_time;
+	__u32 nlayouttypes;
+	__u32 layouttype[8];
+	__u32 blksize;
+	__u32 clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	__u32 xattr_support;
+};
+
+struct nfs_fsstat {
+	struct nfs_fattr *fattr;
+	__u64 tbytes;
+	__u64 fbytes;
+	__u64 abytes;
+	__u64 tfiles;
+	__u64 ffiles;
+	__u64 afiles;
+};
+
+struct nfs_pathconf {
+	struct nfs_fattr *fattr;
+	__u32 max_link;
+	__u32 max_namelen;
+};
+
+struct nfs4_change_info {
+	u32 atomic;
+	u64 before;
+	u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+	struct nfs4_slot *sa_slot;
+	u8 sa_cache_this: 1;
+	u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+	struct nfs4_slot *sr_slot;
+	long unsigned int sr_timestamp;
+	int sr_status;
+	u32 sr_status_flags;
+	u32 sr_highest_slotid;
+	u32 sr_target_highest_slotid;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+	refcount_t count;
+	struct list_head list;
+	struct nfs_open_context *open_context;
+	fl_owner_t lockowner;
+	atomic_t io_count;
+	struct callback_head callback_head;
+};
+
+struct nfs_open_context {
+	struct nfs_lock_context lock_context;
+	fl_owner_t flock_owner;
+	struct dentry *dentry;
+	const struct cred *cred;
+	struct rpc_cred *ll_cred;
+	struct nfs4_state *state;
+	fmode_t mode;
+	long unsigned int flags;
+	int error;
+	struct list_head list;
+	struct nfs4_threshold *mdsthreshold;
+	struct callback_head callback_head;
+};
+
+struct nlm_host;
+
+struct nfs_iostats;
+
+struct nfs_auth_info {
+	unsigned int flavor_len;
+	rpc_authflavor_t flavors[12];
+};
+
+struct fscache_volume;
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_client;
+
+struct nfs_server {
+	struct nfs_client *nfs_client;
+	struct list_head client_link;
+	struct list_head master_link;
+	struct rpc_clnt *client;
+	struct rpc_clnt *client_acl;
+	struct nlm_host *nlm_host;
+	struct nfs_iostats *io_stats;
+	atomic_long_t writeback;
+	unsigned int write_congested;
+	unsigned int flags;
+	unsigned int fattr_valid;
+	unsigned int caps;
+	unsigned int rsize;
+	unsigned int rpages;
+	unsigned int wsize;
+	unsigned int wpages;
+	unsigned int wtmult;
+	unsigned int dtsize;
+	short unsigned int port;
+	unsigned int bsize;
+	unsigned int gxasize;
+	unsigned int sxasize;
+	unsigned int lxasize;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namelen;
+	unsigned int options;
+	unsigned int clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	struct nfs_fsid fsid;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	long unsigned int mount_time;
+	struct super_block *super;
+	dev_t s_dev;
+	struct nfs_auth_info auth_info;
+	struct fscache_volume *fscache;
+	char *fscache_uniq;
+	u32 pnfs_blksize;
+	u32 attr_bitmask[3];
+	u32 attr_bitmask_nl[3];
+	u32 exclcreat_bitmask[3];
+	u32 cache_consistency_bitmask[3];
+	u32 acl_bitmask;
+	u32 fh_expire_type;
+	struct pnfs_layoutdriver_type *pnfs_curr_ld;
+	struct rpc_wait_queue roc_rpcwaitq;
+	void *pnfs_ld_data;
+	struct rb_root state_owners;
+	struct ida openowner_id;
+	struct ida lockowner_id;
+	struct list_head state_owners_lru;
+	struct list_head layouts;
+	struct list_head delegations;
+	struct list_head ss_copies;
+	long unsigned int mig_gen;
+	long unsigned int mig_status;
+	void (*destroy)(struct nfs_server *);
+	atomic_t active;
+	struct __kernel_sockaddr_storage mountd_address;
+	size_t mountd_addrlen;
+	u32 mountd_version;
+	short unsigned int mountd_port;
+	short unsigned int mountd_protocol;
+	struct rpc_wait_queue uoc_rpcwaitq;
+	unsigned int read_hdrsize;
+	const struct cred *cred;
+	bool has_sec_mnt_opts;
+};
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs_rpc_ops;
+
+struct nfs4_minor_version_ops;
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_client {
+	refcount_t cl_count;
+	atomic_t cl_mds_count;
+	int cl_cons_state;
+	long unsigned int cl_res_state;
+	long unsigned int cl_flags;
+	struct __kernel_sockaddr_storage cl_addr;
+	size_t cl_addrlen;
+	char *cl_hostname;
+	char *cl_acceptor;
+	struct list_head cl_share_link;
+	struct list_head cl_superblocks;
+	struct rpc_clnt *cl_rpcclient;
+	const struct nfs_rpc_ops *rpc_ops;
+	int cl_proto;
+	struct nfs_subversion *cl_nfs_mod;
+	u32 cl_minorversion;
+	unsigned int cl_nconnect;
+	unsigned int cl_max_connect;
+	const char *cl_principal;
+	struct list_head cl_ds_clients;
+	u64 cl_clientid;
+	nfs4_verifier cl_confirm;
+	long unsigned int cl_state;
+	spinlock_t cl_lock;
+	long unsigned int cl_lease_time;
+	long unsigned int cl_last_renewal;
+	struct delayed_work cl_renewd;
+	struct rpc_wait_queue cl_rpcwaitq;
+	struct idmap *cl_idmap;
+	const char *cl_owner_id;
+	u32 cl_cb_ident;
+	const struct nfs4_minor_version_ops *cl_mvops;
+	long unsigned int cl_mig_gen;
+	struct nfs4_slot_table *cl_slot_tbl;
+	u32 cl_seqid;
+	u32 cl_exchange_flags;
+	struct nfs4_session *cl_session;
+	bool cl_preserve_clid;
+	struct nfs41_server_owner *cl_serverowner;
+	struct nfs41_server_scope *cl_serverscope;
+	struct nfs41_impl_id *cl_implid;
+	long unsigned int cl_sp4_flags;
+	wait_queue_head_t cl_lock_waitq;
+	char cl_ipaddr[48];
+	struct net *cl_net;
+	struct list_head pending_cb_stateids;
+};
+
+struct pnfs_layout_segment;
+
+struct nfs_seqid {
+	struct nfs_seqid_counter *sequence;
+	struct list_head list;
+	struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+	char data[8];
+};
+
+struct nfs_writeverf {
+	struct nfs_write_verifier verifier;
+	enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct nfs_open_context *context;
+	struct nfs_lock_context *lock_context;
+	nfs4_stateid stateid;
+	__u64 offset;
+	__u32 count;
+	unsigned int pgbase;
+	struct page **pages;
+	union {
+		unsigned int replen;
+		struct {
+			const u32 *bitmask;
+			u32 bitmask_store[3];
+			enum nfs3_stable_how stable;
+		};
+	};
+};
+
+struct nfs_pgio_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	__u64 count;
+	__u32 op_status;
+	union {
+		struct {
+			unsigned int replen;
+			int eof;
+		};
+		struct {
+			struct nfs_writeverf *verf;
+			const struct nfs_server *server;
+		};
+	};
+};
+
+struct nfs_commitargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	__u64 offset;
+	__u32 count;
+	const u32 *bitmask;
+};
+
+struct nfs_commitres {
+	struct nfs4_sequence_res seq_res;
+	__u32 op_status;
+	struct nfs_fattr *fattr;
+	struct nfs_writeverf *verf;
+	const struct nfs_server *server;
+};
+
+struct nfs_removeargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct qstr name;
+};
+
+struct nfs_removeres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs_fattr *dir_attr;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *old_dir;
+	const struct nfs_fh *new_dir;
+	const struct qstr *old_name;
+	const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs4_change_info old_cinfo;
+	struct nfs_fattr *old_fattr;
+	struct nfs4_change_info new_cinfo;
+	struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+	__u64 ino;
+	__u64 cookie;
+	const char *name;
+	unsigned int len;
+	int eof;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	unsigned char d_type;
+	struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+	struct dentry *dentry;
+	const struct cred *cred;
+	__be32 *verf;
+	u64 cookie;
+	struct page **pages;
+	unsigned int page_len;
+	bool plus;
+};
+
+struct nfs_readdir_res {
+	__be32 *verf;
+};
+
+struct nfs4_pathname {
+	unsigned int ncomponents;
+	struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+	unsigned int nservers;
+	struct nfs4_string servers[10];
+	struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	struct nfs4_pathname fs_path;
+	int nlocations;
+	struct nfs4_fs_location locations[10];
+};
+
+struct nfstime4 {
+	u64 seconds;
+	u32 nseconds;
+};
+
+struct pnfs_commit_ops;
+
+struct pnfs_ds_commit_info {
+	struct list_head commits;
+	unsigned int nwritten;
+	unsigned int ncommitting;
+	const struct pnfs_commit_ops *ops;
+};
+
+struct nfs41_server_owner {
+	uint64_t minor_id;
+	uint32_t major_id_sz;
+	char major_id[1024];
+};
+
+struct nfs41_server_scope {
+	uint32_t server_scope_sz;
+	char server_scope[1024];
+};
+
+struct nfs41_impl_id {
+	char domain[1025];
+	char name[1025];
+	struct nfstime4 date;
+};
+
+struct nfs_page_array {
+	struct page **pagevec;
+	unsigned int npages;
+	struct page *page_array[8];
+};
+
+struct nfs_page;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_pgio_header {
+	struct inode *inode;
+	const struct cred *cred;
+	struct list_head pages;
+	struct nfs_page *req;
+	struct nfs_writeverf verf;
+	fmode_t rw_mode;
+	struct pnfs_layout_segment *lseg;
+	loff_t io_start;
+	const struct rpc_call_ops *mds_ops;
+	void (*release)(struct nfs_pgio_header *);
+	const struct nfs_pgio_completion_ops *completion_ops;
+	const struct nfs_rw_ops *rw_ops;
+	struct nfs_io_completion *io_completion;
+	struct nfs_direct_req *dreq;
+	int pnfs_error;
+	int error;
+	unsigned int good_bytes;
+	long unsigned int flags;
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct nfs_pgio_args args;
+	struct nfs_pgio_res res;
+	long unsigned int timestamp;
+	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+	__u64 mds_offset;
+	struct nfs_page_array page_array;
+	struct nfs_client *ds_clp;
+	u32 ds_commit_idx;
+	u32 pgio_mirror_idx;
+};
+
+struct nfs_pgio_completion_ops {
+	void (*error_cleanup)(struct list_head *, int);
+	void (*init_hdr)(struct nfs_pgio_header *);
+	void (*completion)(struct nfs_pgio_header *);
+	void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct nfs_mds_commit_info {
+	atomic_t rpcs_out;
+	atomic_long_t ncommit;
+	struct list_head list;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_info;
+
+struct nfs_commit_completion_ops {
+	void (*completion)(struct nfs_commit_data *);
+	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+	struct rpc_task task;
+	struct inode *inode;
+	const struct cred *cred;
+	struct nfs_fattr fattr;
+	struct nfs_writeverf verf;
+	struct list_head pages;
+	struct list_head list;
+	struct nfs_direct_req *dreq;
+	struct nfs_commitargs args;
+	struct nfs_commitres res;
+	struct nfs_open_context *context;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_client *ds_clp;
+	int ds_commit_index;
+	loff_t lwb;
+	const struct rpc_call_ops *mds_ops;
+	const struct nfs_commit_completion_ops *completion_ops;
+	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+	long unsigned int flags;
+};
+
+struct nfs_commit_info {
+	struct inode *inode;
+	struct nfs_mds_commit_info *mds;
+	struct pnfs_ds_commit_info *ds;
+	struct nfs_direct_req *dreq;
+	const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+	struct nfs_removeargs args;
+	struct nfs_removeres res;
+	struct dentry *dentry;
+	wait_queue_head_t wq;
+	const struct cred *cred;
+	struct nfs_fattr dir_attr;
+	long int timeout;
+};
+
+struct nfs_renamedata {
+	struct nfs_renameargs args;
+	struct nfs_renameres res;
+	struct rpc_task task;
+	const struct cred *cred;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct nfs_fattr old_fattr;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct nfs_fattr new_fattr;
+	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+	long int timeout;
+	bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_client_initdata;
+
+struct nfs_access_entry;
+
+struct nfs_rpc_ops {
+	u32 version;
+	const struct dentry_operations *dentry_ops;
+	const struct inode_operations *dir_inode_ops;
+	const struct inode_operations *file_inode_ops;
+	const struct file_operations *file_ops;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*submount)(struct fs_context *, struct nfs_server *);
+	int (*try_get_tree)(struct fs_context *);
+	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+	int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+	int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+	int (*remove)(struct inode *, struct dentry *);
+	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+	int (*unlink_done)(struct rpc_task *, struct inode *);
+	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+	int (*link)(struct inode *, struct inode *, const struct qstr *);
+	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
+	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+	int (*rmdir)(struct inode *, const struct qstr *);
+	int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+	int (*lock)(struct file *, int, struct file_lock *);
+	int (*lock_check_bounds)(const struct file_lock *);
+	void (*clear_acl_cache)(struct inode *);
+	void (*close_context)(struct nfs_open_context *, int);
+	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+	int (*have_delegation)(struct inode *, fmode_t);
+	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+	void (*free_client)(struct nfs_client *);
+	struct nfs_server * (*create_server)(struct fs_context *);
+	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+	int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+	void (*enable_swap)(struct inode *);
+	void (*disable_swap)(struct inode *);
+};
+
+struct nfs_access_entry {
+	struct rb_node rb_node;
+	struct list_head lru;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	struct group_info *group_info;
+	u64 timestamp;
+	__u32 mask;
+	struct callback_head callback_head;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+	u32 minor_version;
+	unsigned int init_caps;
+	int (*init_client)(struct nfs_client *);
+	void (*shutdown_client)(struct nfs_client *);
+	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
+	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	const struct rpc_call_ops *call_sync_ops;
+	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+	const struct nfs4_state_maintenance_ops *state_renewal_ops;
+	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+	struct list_head open_states;
+	struct list_head inode_states;
+	struct list_head lock_states;
+	struct nfs4_state_owner *owner;
+	struct inode *inode;
+	long unsigned int flags;
+	spinlock_t state_lock;
+	seqlock_t seqlock;
+	nfs4_stateid stateid;
+	nfs4_stateid open_stateid;
+	unsigned int n_rdonly;
+	unsigned int n_wronly;
+	unsigned int n_rdwr;
+	fmode_t state;
+	refcount_t count;
+	wait_queue_head_t waitq;
+	struct callback_head callback_head;
+};
+
+struct cache_head {
+	struct hlist_node cache_list;
+	time64_t expiry_time;
+	time64_t last_refresh;
+	struct kref ref;
+	long unsigned int flags;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+	struct cache_deferred_req * (*defer)(struct cache_req *);
+	long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+	struct hlist_node hash;
+	struct list_head recent;
+	struct cache_head *item;
+	void *owner;
+	void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct svc_cred {
+	kuid_t cr_uid;
+	kgid_t cr_gid;
+	struct group_info *cr_group_info;
+	u32 cr_flavor;
+	char *cr_raw_principal;
+	char *cr_principal;
+	char *cr_targ_princ;
+	struct gss_api_mech *cr_gss_mech;
+};
+
+struct auth_ops {
+	char *name;
+	struct module *owner;
+	int flavour;
+	int (*accept)(struct svc_rqst *);
+	int (*release)(struct svc_rqst *);
+	void (*domain_release)(struct auth_domain *);
+	int (*set_client)(struct svc_rqst *);
+};
+
+struct svc_cacherep;
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_rqst {
+	struct list_head rq_all;
+	struct callback_head rq_rcu_head;
+	struct svc_xprt *rq_xprt;
+	struct __kernel_sockaddr_storage rq_addr;
+	size_t rq_addrlen;
+	struct __kernel_sockaddr_storage rq_daddr;
+	size_t rq_daddrlen;
+	struct svc_serv *rq_server;
+	struct svc_pool *rq_pool;
+	const struct svc_procedure *rq_procinfo;
+	struct auth_ops *rq_authop;
+	struct svc_cred rq_cred;
+	void *rq_xprt_ctxt;
+	struct svc_deferred_req *rq_deferred;
+	struct xdr_buf rq_arg;
+	struct xdr_stream rq_arg_stream;
+	struct xdr_stream rq_res_stream;
+	struct page *rq_scratch_page;
+	struct xdr_buf rq_res;
+	struct page *rq_pages[68];
+	struct page **rq_respages;
+	struct page **rq_next_page;
+	struct page **rq_page_end;
+	struct pagevec rq_pvec;
+	struct kvec rq_vec[67];
+	struct bio_vec rq_bvec[67];
+	__be32 rq_xid;
+	u32 rq_prog;
+	u32 rq_vers;
+	u32 rq_proc;
+	u32 rq_prot;
+	int rq_cachetype;
+	long unsigned int rq_flags;
+	ktime_t rq_qtime;
+	void *rq_argp;
+	void *rq_resp;
+	void *rq_auth_data;
+	__be32 rq_auth_stat;
+	int rq_auth_slack;
+	int rq_reserved;
+	ktime_t rq_stime;
+	struct cache_req rq_chandle;
+	struct auth_domain *rq_client;
+	struct auth_domain *rq_gssclient;
+	struct svc_cacherep *rq_cacherep;
+	struct task_struct *rq_task;
+	struct net *rq_bc_net;
+	void **rq_lease_breaker;
+};
+
+struct svc_pool_stats {
+	atomic_long_t packets;
+	long unsigned int sockets_queued;
+	atomic_long_t threads_woken;
+	atomic_long_t threads_timedout;
+};
+
+struct svc_pool {
+	unsigned int sp_id;
+	spinlock_t sp_lock;
+	struct list_head sp_sockets;
+	unsigned int sp_nrthreads;
+	struct list_head sp_all_threads;
+	struct svc_pool_stats sp_stats;
+	long unsigned int sp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct svc_procedure {
+	__be32 (*pc_func)(struct svc_rqst *);
+	bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+	bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+	void (*pc_release)(struct svc_rqst *);
+	unsigned int pc_argsize;
+	unsigned int pc_argzero;
+	unsigned int pc_ressize;
+	unsigned int pc_cachetype;
+	unsigned int pc_xdrressize;
+	const char *pc_name;
+};
+
+struct svc_deferred_req {
+	u32 prot;
+	struct svc_xprt *xprt;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	struct __kernel_sockaddr_storage daddr;
+	size_t daddrlen;
+	void *xprt_ctxt;
+	struct cache_deferred_req handle;
+	int argslen;
+	__be32 args[0];
+};
+
+struct svc_process_info {
+	union {
+		int (*dispatch)(struct svc_rqst *, __be32 *);
+		struct {
+			unsigned int lovers;
+			unsigned int hivers;
+		} mismatch;
+	};
+};
+
+struct svc_version {
+	u32 vs_vers;
+	u32 vs_nproc;
+	const struct svc_procedure *vs_proc;
+	unsigned int *vs_count;
+	u32 vs_xdrsize;
+	bool vs_hidden;
+	bool vs_rpcb_optnl;
+	bool vs_need_cong_ctrl;
+	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
+};
+
+struct nfs4_ssc_client_ops;
+
+struct nfs_ssc_client_ops;
+
+struct nfs_ssc_client_ops_tbl {
+	const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
+	const struct nfs_ssc_client_ops *ssc_nfs_ops;
+};
+
+struct nfs4_ssc_client_ops {
+	struct file * (*sco_open)(struct vfsmount *, struct nfs_fh *, nfs4_stateid *);
+	void (*sco_close)(struct file *);
+};
+
+struct nfs_ssc_client_ops {
+	void (*sco_sb_deactive)(struct super_block *);
+};
+
+struct nfs4_state_recovery_ops {
+	int owner_flag_bit;
+	int state_flag_bit;
+	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+	int (*establish_clid)(struct nfs_client *, const struct cred *);
+	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+	int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+	int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+	int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+	struct nfs_server *so_server;
+	struct list_head so_lru;
+	long unsigned int so_expires;
+	struct rb_node so_server_node;
+	const struct cred *so_cred;
+	spinlock_t so_lock;
+	atomic_t so_count;
+	long unsigned int so_flags;
+	struct list_head so_states;
+	struct nfs_seqid_counter so_seqid;
+	seqcount_spinlock_t so_reclaim_seqcount;
+	struct mutex so_delegreturn_mutex;
 };
 
 struct iomap_dio_ops {
 	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
-	blk_qc_t (*submit_io)(struct inode *, struct iomap___2 *, struct bio *, loff_t);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
 };
 
 struct iomap_dio {
@@ -41373,13 +111234,13 @@
 	atomic_t ref;
 	unsigned int flags;
 	int error;
+	size_t done_before;
 	bool wait_for_completion;
 	union {
 		struct {
 			struct iov_iter *iter;
 			struct task_struct *waiter;
-			struct request_queue *last_queue;
-			blk_qc_t cookie;
+			struct bio *poll_bio;
 		} submit;
 		struct {
 			struct work_struct work;
@@ -41387,31 +111248,6 @@
 	};
 };
 
-struct fiemap_ctx {
-	struct fiemap_extent_info *fi;
-	struct iomap___2 prev;
-};
-
-struct iomap_swapfile_info {
-	struct iomap___2 iomap;
-	struct swap_info_struct *sis;
-	uint64_t lowest_ppage;
-	uint64_t highest_ppage;
-	long unsigned int nr_pages;
-	int nr_extents;
-};
-
-enum {
-	QIF_BLIMITS_B = 0,
-	QIF_SPACE_B = 1,
-	QIF_ILIMITS_B = 2,
-	QIF_INODES_B = 3,
-	QIF_BTIME_B = 4,
-	QIF_ITIME_B = 5,
-};
-
-typedef __kernel_uid32_t qid_t;
-
 enum {
 	DQF_INFO_DIRTY_B = 17,
 };
@@ -41421,13 +111257,6 @@
 	struct percpu_counter counter[8];
 };
 
-enum {
-	_DQUOT_USAGE_ENABLED = 0,
-	_DQUOT_LIMITS_ENABLED = 1,
-	_DQUOT_SUSPENDED = 2,
-	_DQUOT_STATE_FLAGS = 3,
-};
-
 struct quota_module_name {
 	int qm_fmt_id;
 	char *qm_mod_name;
@@ -41439,224 +111268,6 @@
 	short int w_type;
 };
 
-struct fs_disk_quota {
-	__s8 d_version;
-	__s8 d_flags;
-	__u16 d_fieldmask;
-	__u32 d_id;
-	__u64 d_blk_hardlimit;
-	__u64 d_blk_softlimit;
-	__u64 d_ino_hardlimit;
-	__u64 d_ino_softlimit;
-	__u64 d_bcount;
-	__u64 d_icount;
-	__s32 d_itimer;
-	__s32 d_btimer;
-	__u16 d_iwarns;
-	__u16 d_bwarns;
-	__s8 d_itimer_hi;
-	__s8 d_btimer_hi;
-	__s8 d_rtbtimer_hi;
-	__s8 d_padding2;
-	__u64 d_rtb_hardlimit;
-	__u64 d_rtb_softlimit;
-	__u64 d_rtbcount;
-	__s32 d_rtbtimer;
-	__u16 d_rtbwarns;
-	__s16 d_padding3;
-	char d_padding4[8];
-};
-
-struct fs_qfilestat {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-};
-
-typedef struct fs_qfilestat fs_qfilestat_t;
-
-struct fs_quota_stat {
-	__s8 qs_version;
-	__u16 qs_flags;
-	__s8 qs_pad;
-	fs_qfilestat_t qs_uquota;
-	fs_qfilestat_t qs_gquota;
-	__u32 qs_incoredqs;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-};
-
-struct fs_qfilestatv {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-	__u32 qfs_pad;
-};
-
-struct fs_quota_statv {
-	__s8 qs_version;
-	__u8 qs_pad1;
-	__u16 qs_flags;
-	__u32 qs_incoredqs;
-	struct fs_qfilestatv qs_uquota;
-	struct fs_qfilestatv qs_gquota;
-	struct fs_qfilestatv qs_pquota;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-	__u64 qs_pad2[8];
-};
-
-struct if_dqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-};
-
-struct if_nextdqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-	__u32 dqb_id;
-};
-
-struct if_dqinfo {
-	__u64 dqi_bgrace;
-	__u64 dqi_igrace;
-	__u32 dqi_flags;
-	__u32 dqi_valid;
-};
-
-struct compat_if_dqblk {
-	compat_u64 dqb_bhardlimit;
-	compat_u64 dqb_bsoftlimit;
-	compat_u64 dqb_curspace;
-	compat_u64 dqb_ihardlimit;
-	compat_u64 dqb_isoftlimit;
-	compat_u64 dqb_curinodes;
-	compat_u64 dqb_btime;
-	compat_u64 dqb_itime;
-	compat_uint_t dqb_valid;
-};
-
-enum {
-	QUOTA_NL_C_UNSPEC = 0,
-	QUOTA_NL_C_WARNING = 1,
-	__QUOTA_NL_C_MAX = 2,
-};
-
-enum {
-	QUOTA_NL_A_UNSPEC = 0,
-	QUOTA_NL_A_QTYPE = 1,
-	QUOTA_NL_A_EXCESS_ID = 2,
-	QUOTA_NL_A_WARNING = 3,
-	QUOTA_NL_A_DEV_MAJOR = 4,
-	QUOTA_NL_A_DEV_MINOR = 5,
-	QUOTA_NL_A_CAUSED_ID = 6,
-	QUOTA_NL_A_PAD = 7,
-	__QUOTA_NL_A_MAX = 8,
-};
-
-struct proc_maps_private {
-	struct inode *inode;
-	struct task_struct *task;
-	struct mm_struct *mm;
-	struct vm_area_struct *tail_vma;
-	struct mempolicy *task_mempolicy;
-};
-
-struct mem_size_stats {
-	long unsigned int resident;
-	long unsigned int shared_clean;
-	long unsigned int shared_dirty;
-	long unsigned int private_clean;
-	long unsigned int private_dirty;
-	long unsigned int referenced;
-	long unsigned int anonymous;
-	long unsigned int lazyfree;
-	long unsigned int anonymous_thp;
-	long unsigned int shmem_thp;
-	long unsigned int file_thp;
-	long unsigned int swap;
-	long unsigned int shared_hugetlb;
-	long unsigned int private_hugetlb;
-	u64 pss;
-	u64 pss_anon;
-	u64 pss_file;
-	u64 pss_shmem;
-	u64 pss_locked;
-	u64 swap_pss;
-	bool check_shmem_swap;
-};
-
-enum clear_refs_types {
-	CLEAR_REFS_ALL = 1,
-	CLEAR_REFS_ANON = 2,
-	CLEAR_REFS_MAPPED = 3,
-	CLEAR_REFS_SOFT_DIRTY = 4,
-	CLEAR_REFS_MM_HIWATER_RSS = 5,
-	CLEAR_REFS_LAST = 6,
-};
-
-struct clear_refs_private {
-	enum clear_refs_types type;
-};
-
-typedef struct {
-	u64 pme;
-} pagemap_entry_t;
-
-struct pagemapread {
-	int pos;
-	int len;
-	pagemap_entry_t *buffer;
-	bool show_pfn;
-};
-
-struct numa_maps {
-	long unsigned int pages;
-	long unsigned int anon;
-	long unsigned int active;
-	long unsigned int writeback;
-	long unsigned int mapcount_max;
-	long unsigned int dirty;
-	long unsigned int swapcache;
-	long unsigned int node[128];
-};
-
-struct numa_maps_private {
-	struct proc_maps_private proc_maps;
-	struct numa_maps md;
-};
-
-struct pde_opener {
-	struct list_head lh;
-	struct file *file;
-	bool closing;
-	struct completion *c;
-};
-
-enum {
-	BIAS = 2147483648,
-};
-
 struct proc_fs_context {
 	struct pid_namespace *pid_ns;
 	unsigned int mask;
@@ -41666,243 +111277,12 @@
 };
 
 enum proc_param {
-	Opt_gid___2 = 0,
+	Opt_gid___4 = 0,
 	Opt_hidepid = 1,
 	Opt_subset = 2,
 };
 
-struct genradix_root;
-
-struct __genradix {
-	struct genradix_root *root;
-};
-
-struct syscall_info {
-	__u64 sp;
-	struct seccomp_data data;
-};
-
-typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
-
-struct pid_entry {
-	const char *name;
-	unsigned int len;
-	umode_t mode;
-	const struct inode_operations *iop;
-	const struct file_operations *fop;
-	union proc_op op;
-};
-
-struct limit_names {
-	const char *name;
-	const char *unit;
-};
-
-struct map_files_info {
-	long unsigned int start;
-	long unsigned int end;
-	fmode_t mode;
-};
-
-struct timers_private {
-	struct pid *pid;
-	struct task_struct *task;
-	struct sighand_struct *sighand;
-	struct pid_namespace *ns;
-	long unsigned int flags;
-};
-
-struct tgid_iter {
-	unsigned int tgid;
-	struct task_struct *task;
-};
-
-struct fd_data {
-	fmode_t mode;
-	unsigned int fd;
-};
-
-struct sysctl_alias {
-	const char *kernel_param;
-	const char *sysctl_param;
-};
-
-struct seq_net_private {
-	struct net *net;
-};
-
-struct bpf_iter_aux_info___2;
-
-enum kcore_type {
-	KCORE_TEXT = 0,
-	KCORE_VMALLOC = 1,
-	KCORE_RAM = 2,
-	KCORE_VMEMMAP = 3,
-	KCORE_USER = 4,
-	KCORE_OTHER = 5,
-	KCORE_REMAP = 6,
-};
-
-struct kcore_list {
-	struct list_head list;
-	long unsigned int addr;
-	long unsigned int vaddr;
-	size_t size;
-	int type;
-};
-
-struct kernfs_iattrs {
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct simple_xattrs xattrs;
-	atomic_t nr_user_xattrs;
-	atomic_t user_xattr_size;
-};
-
-struct kernfs_super_info {
-	struct super_block *sb;
-	struct kernfs_root *root;
-	const void *ns;
-	struct list_head node;
-};
-
-enum kernfs_node_flag {
-	KERNFS_ACTIVATED = 16,
-	KERNFS_NS = 32,
-	KERNFS_HAS_SEQ_SHOW = 64,
-	KERNFS_HAS_MMAP = 128,
-	KERNFS_LOCKDEP = 256,
-	KERNFS_SUICIDAL = 1024,
-	KERNFS_SUICIDED = 2048,
-	KERNFS_EMPTY_DIR = 4096,
-	KERNFS_HAS_RELEASE = 8192,
-};
-
-struct kernfs_open_node {
-	atomic_t refcnt;
-	atomic_t event;
-	wait_queue_head_t poll;
-	struct list_head files;
-};
-
-struct config_group;
-
-struct config_item_type;
-
-struct config_item {
-	char *ci_name;
-	char ci_namebuf[20];
-	struct kref ci_kref;
-	struct list_head ci_entry;
-	struct config_item *ci_parent;
-	struct config_group *ci_group;
-	const struct config_item_type *ci_type;
-	struct dentry *ci_dentry;
-};
-
-struct configfs_subsystem;
-
-struct config_group {
-	struct config_item cg_item;
-	struct list_head cg_children;
-	struct configfs_subsystem *cg_subsys;
-	struct list_head default_groups;
-	struct list_head group_entry;
-};
-
-struct configfs_item_operations;
-
-struct configfs_group_operations;
-
-struct configfs_attribute;
-
-struct configfs_bin_attribute;
-
-struct config_item_type {
-	struct module *ct_owner;
-	struct configfs_item_operations *ct_item_ops;
-	struct configfs_group_operations *ct_group_ops;
-	struct configfs_attribute **ct_attrs;
-	struct configfs_bin_attribute **ct_bin_attrs;
-};
-
-struct configfs_item_operations {
-	void (*release)(struct config_item *);
-	int (*allow_link)(struct config_item *, struct config_item *);
-	void (*drop_link)(struct config_item *, struct config_item *);
-};
-
-struct configfs_group_operations {
-	struct config_item * (*make_item)(struct config_group *, const char *);
-	struct config_group * (*make_group)(struct config_group *, const char *);
-	int (*commit_item)(struct config_item *);
-	void (*disconnect_notify)(struct config_group *, struct config_item *);
-	void (*drop_item)(struct config_group *, struct config_item *);
-};
-
-struct configfs_attribute {
-	const char *ca_name;
-	struct module *ca_owner;
-	umode_t ca_mode;
-	ssize_t (*show)(struct config_item *, char *);
-	ssize_t (*store)(struct config_item *, const char *, size_t);
-};
-
-struct configfs_bin_attribute {
-	struct configfs_attribute cb_attr;
-	void *cb_private;
-	size_t cb_max_size;
-	ssize_t (*read)(struct config_item *, void *, size_t);
-	ssize_t (*write)(struct config_item *, const void *, size_t);
-};
-
-struct configfs_subsystem {
-	struct config_group su_group;
-	struct mutex su_mutex;
-};
-
-struct configfs_fragment {
-	atomic_t frag_count;
-	struct rw_semaphore frag_sem;
-	bool frag_dead;
-};
-
-struct configfs_dirent {
-	atomic_t s_count;
-	int s_dependent_count;
-	struct list_head s_sibling;
-	struct list_head s_children;
-	int s_links;
-	void *s_element;
-	int s_type;
-	umode_t s_mode;
-	struct dentry *s_dentry;
-	struct iattr *s_iattr;
-	struct configfs_fragment *s_frag;
-};
-
-struct configfs_buffer {
-	size_t count;
-	loff_t pos;
-	char *page;
-	struct configfs_item_operations *ops;
-	struct mutex mutex;
-	int needs_read_fill;
-	bool read_in_progress;
-	bool write_in_progress;
-	char *bin_buffer;
-	int bin_buffer_size;
-	int cb_max_size;
-	struct config_item *item;
-	struct module *owner;
-	union {
-		struct configfs_attribute *attr;
-		struct configfs_bin_attribute *bin_attr;
-	};
-};
+struct bpf_iter_aux_info;
 
 struct pts_mount_opts {
 	int setuid;
@@ -41916,13 +111296,13 @@
 };
 
 enum {
-	Opt_uid___2 = 0,
-	Opt_gid___3 = 1,
-	Opt_mode___2 = 2,
+	Opt_uid___4 = 0,
+	Opt_gid___5 = 1,
+	Opt_mode___5 = 2,
 	Opt_ptmxmode = 3,
 	Opt_newinstance = 4,
 	Opt_max = 5,
-	Opt_err = 6,
+	Opt_err___3 = 6,
 };
 
 struct pts_fs_info {
@@ -41932,3420 +111312,8 @@
 	struct dentry *ptmx_dentry;
 };
 
-struct dcookie_struct {
-	struct path path;
-	struct list_head hash_list;
-};
-
-struct dcookie_user {
-	struct list_head next;
-};
-
-typedef unsigned int tid_t;
-
-struct transaction_chp_stats_s {
-	long unsigned int cs_chp_time;
-	__u32 cs_forced_to_close;
-	__u32 cs_written;
-	__u32 cs_dropped;
-};
-
-struct journal_s;
-
-typedef struct journal_s journal_t;
-
-struct journal_head;
-
-struct transaction_s;
-
-typedef struct transaction_s transaction_t;
-
-struct transaction_s {
-	journal_t *t_journal;
-	tid_t t_tid;
-	enum {
-		T_RUNNING = 0,
-		T_LOCKED = 1,
-		T_SWITCH = 2,
-		T_FLUSH = 3,
-		T_COMMIT = 4,
-		T_COMMIT_DFLUSH = 5,
-		T_COMMIT_JFLUSH = 6,
-		T_COMMIT_CALLBACK = 7,
-		T_FINISHED = 8,
-	} t_state;
-	long unsigned int t_log_start;
-	int t_nr_buffers;
-	struct journal_head *t_reserved_list;
-	struct journal_head *t_buffers;
-	struct journal_head *t_forget;
-	struct journal_head *t_checkpoint_list;
-	struct journal_head *t_checkpoint_io_list;
-	struct journal_head *t_shadow_list;
-	struct list_head t_inode_list;
-	spinlock_t t_handle_lock;
-	long unsigned int t_max_wait;
-	long unsigned int t_start;
-	long unsigned int t_requested;
-	struct transaction_chp_stats_s t_chp_stats;
-	atomic_t t_updates;
-	atomic_t t_outstanding_credits;
-	atomic_t t_outstanding_revokes;
-	atomic_t t_handle_count;
-	transaction_t *t_cpnext;
-	transaction_t *t_cpprev;
-	long unsigned int t_expires;
-	ktime_t t_start_time;
-	unsigned int t_synchronous_commit: 1;
-	int t_need_data_flush;
-	struct list_head t_private_list;
-};
-
-struct jbd2_buffer_trigger_type;
-
-struct journal_head {
-	struct buffer_head *b_bh;
-	spinlock_t b_state_lock;
-	int b_jcount;
-	unsigned int b_jlist;
-	unsigned int b_modified;
-	char *b_frozen_data;
-	char *b_committed_data;
-	transaction_t *b_transaction;
-	transaction_t *b_next_transaction;
-	struct journal_head *b_tnext;
-	struct journal_head *b_tprev;
-	transaction_t *b_cp_transaction;
-	struct journal_head *b_cpnext;
-	struct journal_head *b_cpprev;
-	struct jbd2_buffer_trigger_type *b_triggers;
-	struct jbd2_buffer_trigger_type *b_frozen_triggers;
-};
-
-struct jbd2_buffer_trigger_type {
-	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
-	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
-};
-
-struct jbd2_journal_handle;
-
-typedef struct jbd2_journal_handle handle_t;
-
-struct jbd2_journal_handle {
-	union {
-		transaction_t *h_transaction;
-		journal_t *h_journal;
-	};
-	handle_t *h_rsv_handle;
-	int h_total_credits;
-	int h_revoke_credits;
-	int h_revoke_credits_requested;
-	int h_ref;
-	int h_err;
-	unsigned int h_sync: 1;
-	unsigned int h_jdata: 1;
-	unsigned int h_reserved: 1;
-	unsigned int h_aborted: 1;
-	unsigned int h_type: 8;
-	unsigned int h_line_no: 16;
-	long unsigned int h_start_jiffies;
-	unsigned int h_requested_credits;
-	unsigned int saved_alloc_context;
-};
-
-struct transaction_run_stats_s {
-	long unsigned int rs_wait;
-	long unsigned int rs_request_delay;
-	long unsigned int rs_running;
-	long unsigned int rs_locked;
-	long unsigned int rs_flushing;
-	long unsigned int rs_logging;
-	__u32 rs_handle_count;
-	__u32 rs_blocks;
-	__u32 rs_blocks_logged;
-};
-
-struct transaction_stats_s {
-	long unsigned int ts_tid;
-	long unsigned int ts_requested;
-	struct transaction_run_stats_s run;
-};
-
-enum passtype {
-	PASS_SCAN = 0,
-	PASS_REVOKE = 1,
-	PASS_REPLAY = 2,
-};
-
-struct journal_superblock_s;
-
-typedef struct journal_superblock_s journal_superblock_t;
-
-struct jbd2_revoke_table_s;
-
-struct jbd2_inode;
-
-struct journal_s {
-	long unsigned int j_flags;
-	int j_errno;
-	struct mutex j_abort_mutex;
-	struct buffer_head *j_sb_buffer;
-	journal_superblock_t *j_superblock;
-	int j_format_version;
-	rwlock_t j_state_lock;
-	int j_barrier_count;
-	struct mutex j_barrier;
-	transaction_t *j_running_transaction;
-	transaction_t *j_committing_transaction;
-	transaction_t *j_checkpoint_transactions;
-	wait_queue_head_t j_wait_transaction_locked;
-	wait_queue_head_t j_wait_done_commit;
-	wait_queue_head_t j_wait_commit;
-	wait_queue_head_t j_wait_updates;
-	wait_queue_head_t j_wait_reserved;
-	wait_queue_head_t j_fc_wait;
-	struct mutex j_checkpoint_mutex;
-	struct buffer_head *j_chkpt_bhs[64];
-	long unsigned int j_head;
-	long unsigned int j_tail;
-	long unsigned int j_free;
-	long unsigned int j_first;
-	long unsigned int j_last;
-	long unsigned int j_fc_first;
-	long unsigned int j_fc_off;
-	long unsigned int j_fc_last;
-	struct block_device *j_dev;
-	int j_blocksize;
-	long long unsigned int j_blk_offset;
-	char j_devname[56];
-	struct block_device *j_fs_dev;
-	unsigned int j_total_len;
-	atomic_t j_reserved_credits;
-	spinlock_t j_list_lock;
-	struct inode *j_inode;
-	tid_t j_tail_sequence;
-	tid_t j_transaction_sequence;
-	tid_t j_commit_sequence;
-	tid_t j_commit_request;
-	__u8 j_uuid[16];
-	struct task_struct *j_task;
-	int j_max_transaction_buffers;
-	int j_revoke_records_per_block;
-	long unsigned int j_commit_interval;
-	struct timer_list j_commit_timer;
-	spinlock_t j_revoke_lock;
-	struct jbd2_revoke_table_s *j_revoke;
-	struct jbd2_revoke_table_s *j_revoke_table[2];
-	struct buffer_head **j_wbuf;
-	struct buffer_head **j_fc_wbuf;
-	int j_wbufsize;
-	int j_fc_wbufsize;
-	pid_t j_last_sync_writer;
-	u64 j_average_commit_time;
-	u32 j_min_batch_time;
-	u32 j_max_batch_time;
-	void (*j_commit_callback)(journal_t *, transaction_t *);
-	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
-	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
-	spinlock_t j_history_lock;
-	struct proc_dir_entry *j_proc_entry;
-	struct transaction_stats_s j_stats;
-	unsigned int j_failed_commit;
-	void *j_private;
-	struct crypto_shash *j_chksum_driver;
-	__u32 j_csum_seed;
-	void (*j_fc_cleanup_callback)(struct journal_s *, int);
-	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
-};
-
-struct journal_header_s {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-};
-
-typedef struct journal_header_s journal_header_t;
-
-struct journal_superblock_s {
-	journal_header_t s_header;
-	__be32 s_blocksize;
-	__be32 s_maxlen;
-	__be32 s_first;
-	__be32 s_sequence;
-	__be32 s_start;
-	__be32 s_errno;
-	__be32 s_feature_compat;
-	__be32 s_feature_incompat;
-	__be32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	__be32 s_nr_users;
-	__be32 s_dynsuper;
-	__be32 s_max_transaction;
-	__be32 s_max_trans_data;
-	__u8 s_checksum_type;
-	__u8 s_padding2[3];
-	__be32 s_num_fc_blks;
-	__u32 s_padding[41];
-	__be32 s_checksum;
-	__u8 s_users[768];
-};
-
-enum jbd_state_bits {
-	BH_JBD = 16,
-	BH_JWrite = 17,
-	BH_Freed = 18,
-	BH_Revoked = 19,
-	BH_RevokeValid = 20,
-	BH_JBDDirty = 21,
-	BH_JournalHead = 22,
-	BH_Shadow = 23,
-	BH_Verified = 24,
-	BH_JBDPrivateStart = 25,
-};
-
-struct jbd2_inode {
-	transaction_t *i_transaction;
-	transaction_t *i_next_transaction;
-	struct list_head i_list;
-	struct inode *i_vfs_inode;
-	long unsigned int i_flags;
-	loff_t i_dirty_start;
-	loff_t i_dirty_end;
-};
-
-struct bgl_lock {
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blockgroup_lock {
-	struct bgl_lock locks[128];
-};
-
-typedef int ext4_grpblk_t;
-
-typedef long long unsigned int ext4_fsblk_t;
-
-typedef __u32 ext4_lblk_t;
-
-typedef unsigned int ext4_group_t;
-
-struct ext4_allocation_request {
-	struct inode *inode;
-	unsigned int len;
-	ext4_lblk_t logical;
-	ext4_lblk_t lleft;
-	ext4_lblk_t lright;
-	ext4_fsblk_t goal;
-	ext4_fsblk_t pleft;
-	ext4_fsblk_t pright;
-	unsigned int flags;
-};
-
-struct ext4_system_blocks {
-	struct rb_root root;
-	struct callback_head rcu;
-};
-
-struct ext4_group_desc {
-	__le32 bg_block_bitmap_lo;
-	__le32 bg_inode_bitmap_lo;
-	__le32 bg_inode_table_lo;
-	__le16 bg_free_blocks_count_lo;
-	__le16 bg_free_inodes_count_lo;
-	__le16 bg_used_dirs_count_lo;
-	__le16 bg_flags;
-	__le32 bg_exclude_bitmap_lo;
-	__le16 bg_block_bitmap_csum_lo;
-	__le16 bg_inode_bitmap_csum_lo;
-	__le16 bg_itable_unused_lo;
-	__le16 bg_checksum;
-	__le32 bg_block_bitmap_hi;
-	__le32 bg_inode_bitmap_hi;
-	__le32 bg_inode_table_hi;
-	__le16 bg_free_blocks_count_hi;
-	__le16 bg_free_inodes_count_hi;
-	__le16 bg_used_dirs_count_hi;
-	__le16 bg_itable_unused_hi;
-	__le32 bg_exclude_bitmap_hi;
-	__le16 bg_block_bitmap_csum_hi;
-	__le16 bg_inode_bitmap_csum_hi;
-	__u32 bg_reserved;
-};
-
-struct flex_groups {
-	atomic64_t free_clusters;
-	atomic_t free_inodes;
-	atomic_t used_dirs;
-};
-
-struct extent_status {
-	struct rb_node rb_node;
-	ext4_lblk_t es_lblk;
-	ext4_lblk_t es_len;
-	ext4_fsblk_t es_pblk;
-};
-
-struct ext4_es_tree {
-	struct rb_root root;
-	struct extent_status *cache_es;
-};
-
-struct ext4_es_stats {
-	long unsigned int es_stats_shrunk;
-	struct percpu_counter es_stats_cache_hits;
-	struct percpu_counter es_stats_cache_misses;
-	u64 es_stats_scan_time;
-	u64 es_stats_max_scan_time;
-	struct percpu_counter es_stats_all_cnt;
-	struct percpu_counter es_stats_shk_cnt;
-};
-
-struct ext4_pending_tree {
-	struct rb_root root;
-};
-
-struct ext4_fc_stats {
-	unsigned int fc_ineligible_reason_count[10];
-	long unsigned int fc_num_commits;
-	long unsigned int fc_ineligible_commits;
-	long unsigned int fc_numblks;
-};
-
-struct ext4_fc_alloc_region {
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	int ino;
-	int len;
-};
-
-struct ext4_fc_replay_state {
-	int fc_replay_num_tags;
-	int fc_replay_expected_off;
-	int fc_current_pass;
-	int fc_cur_tag;
-	int fc_crc;
-	struct ext4_fc_alloc_region *fc_regions;
-	int fc_regions_size;
-	int fc_regions_used;
-	int fc_regions_valid;
-	int *fc_modified_inodes;
-	int fc_modified_inodes_used;
-	int fc_modified_inodes_size;
-};
-
-struct ext4_inode_info {
-	__le32 i_data[15];
-	__u32 i_dtime;
-	ext4_fsblk_t i_file_acl;
-	ext4_group_t i_block_group;
-	ext4_lblk_t i_dir_start_lookup;
-	long unsigned int i_flags;
-	struct rw_semaphore xattr_sem;
-	struct list_head i_orphan;
-	struct list_head i_fc_list;
-	ext4_lblk_t i_fc_lblk_start;
-	ext4_lblk_t i_fc_lblk_len;
-	atomic_t i_fc_updates;
-	wait_queue_head_t i_fc_wait;
-	struct mutex i_fc_lock;
-	loff_t i_disksize;
-	struct rw_semaphore i_data_sem;
-	struct rw_semaphore i_mmap_sem;
-	struct inode vfs_inode;
-	struct jbd2_inode *jinode;
-	spinlock_t i_raw_lock;
-	struct timespec64 i_crtime;
-	atomic_t i_prealloc_active;
-	struct list_head i_prealloc_list;
-	spinlock_t i_prealloc_lock;
-	struct ext4_es_tree i_es_tree;
-	rwlock_t i_es_lock;
-	struct list_head i_es_list;
-	unsigned int i_es_all_nr;
-	unsigned int i_es_shk_nr;
-	ext4_lblk_t i_es_shrink_lblk;
-	ext4_group_t i_last_alloc_group;
-	unsigned int i_reserved_data_blocks;
-	struct ext4_pending_tree i_pending_tree;
-	__u16 i_extra_isize;
-	u16 i_inline_off;
-	u16 i_inline_size;
-	qsize_t i_reserved_quota;
-	spinlock_t i_completed_io_lock;
-	struct list_head i_rsv_conversion_list;
-	struct work_struct i_rsv_conversion_work;
-	atomic_t i_unwritten;
-	spinlock_t i_block_reservation_lock;
-	tid_t i_sync_tid;
-	tid_t i_datasync_tid;
-	struct dquot *i_dquot[3];
-	__u32 i_csum_seed;
-	kprojid_t i_projid;
-};
-
-struct ext4_super_block {
-	__le32 s_inodes_count;
-	__le32 s_blocks_count_lo;
-	__le32 s_r_blocks_count_lo;
-	__le32 s_free_blocks_count_lo;
-	__le32 s_free_inodes_count;
-	__le32 s_first_data_block;
-	__le32 s_log_block_size;
-	__le32 s_log_cluster_size;
-	__le32 s_blocks_per_group;
-	__le32 s_clusters_per_group;
-	__le32 s_inodes_per_group;
-	__le32 s_mtime;
-	__le32 s_wtime;
-	__le16 s_mnt_count;
-	__le16 s_max_mnt_count;
-	__le16 s_magic;
-	__le16 s_state;
-	__le16 s_errors;
-	__le16 s_minor_rev_level;
-	__le32 s_lastcheck;
-	__le32 s_checkinterval;
-	__le32 s_creator_os;
-	__le32 s_rev_level;
-	__le16 s_def_resuid;
-	__le16 s_def_resgid;
-	__le32 s_first_ino;
-	__le16 s_inode_size;
-	__le16 s_block_group_nr;
-	__le32 s_feature_compat;
-	__le32 s_feature_incompat;
-	__le32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	char s_volume_name[16];
-	char s_last_mounted[64];
-	__le32 s_algorithm_usage_bitmap;
-	__u8 s_prealloc_blocks;
-	__u8 s_prealloc_dir_blocks;
-	__le16 s_reserved_gdt_blocks;
-	__u8 s_journal_uuid[16];
-	__le32 s_journal_inum;
-	__le32 s_journal_dev;
-	__le32 s_last_orphan;
-	__le32 s_hash_seed[4];
-	__u8 s_def_hash_version;
-	__u8 s_jnl_backup_type;
-	__le16 s_desc_size;
-	__le32 s_default_mount_opts;
-	__le32 s_first_meta_bg;
-	__le32 s_mkfs_time;
-	__le32 s_jnl_blocks[17];
-	__le32 s_blocks_count_hi;
-	__le32 s_r_blocks_count_hi;
-	__le32 s_free_blocks_count_hi;
-	__le16 s_min_extra_isize;
-	__le16 s_want_extra_isize;
-	__le32 s_flags;
-	__le16 s_raid_stride;
-	__le16 s_mmp_update_interval;
-	__le64 s_mmp_block;
-	__le32 s_raid_stripe_width;
-	__u8 s_log_groups_per_flex;
-	__u8 s_checksum_type;
-	__u8 s_encryption_level;
-	__u8 s_reserved_pad;
-	__le64 s_kbytes_written;
-	__le32 s_snapshot_inum;
-	__le32 s_snapshot_id;
-	__le64 s_snapshot_r_blocks_count;
-	__le32 s_snapshot_list;
-	__le32 s_error_count;
-	__le32 s_first_error_time;
-	__le32 s_first_error_ino;
-	__le64 s_first_error_block;
-	__u8 s_first_error_func[32];
-	__le32 s_first_error_line;
-	__le32 s_last_error_time;
-	__le32 s_last_error_ino;
-	__le32 s_last_error_line;
-	__le64 s_last_error_block;
-	__u8 s_last_error_func[32];
-	__u8 s_mount_opts[64];
-	__le32 s_usr_quota_inum;
-	__le32 s_grp_quota_inum;
-	__le32 s_overhead_clusters;
-	__le32 s_backup_bgs[2];
-	__u8 s_encrypt_algos[4];
-	__u8 s_encrypt_pw_salt[16];
-	__le32 s_lpf_ino;
-	__le32 s_prj_quota_inum;
-	__le32 s_checksum_seed;
-	__u8 s_wtime_hi;
-	__u8 s_mtime_hi;
-	__u8 s_mkfs_time_hi;
-	__u8 s_lastcheck_hi;
-	__u8 s_first_error_time_hi;
-	__u8 s_last_error_time_hi;
-	__u8 s_first_error_errcode;
-	__u8 s_last_error_errcode;
-	__le16 s_encoding;
-	__le16 s_encoding_flags;
-	__le32 s_reserved[95];
-	__le32 s_checksum;
-};
-
-struct mb_cache___2;
-
-struct ext4_group_info;
-
-struct ext4_locality_group;
-
-struct ext4_li_request;
-
-struct ext4_sb_info {
-	long unsigned int s_desc_size;
-	long unsigned int s_inodes_per_block;
-	long unsigned int s_blocks_per_group;
-	long unsigned int s_clusters_per_group;
-	long unsigned int s_inodes_per_group;
-	long unsigned int s_itb_per_group;
-	long unsigned int s_gdb_count;
-	long unsigned int s_desc_per_block;
-	ext4_group_t s_groups_count;
-	ext4_group_t s_blockfile_groups;
-	long unsigned int s_overhead;
-	unsigned int s_cluster_ratio;
-	unsigned int s_cluster_bits;
-	loff_t s_bitmap_maxbytes;
-	struct buffer_head *s_sbh;
-	struct ext4_super_block *s_es;
-	struct buffer_head **s_group_desc;
-	unsigned int s_mount_opt;
-	unsigned int s_mount_opt2;
-	long unsigned int s_mount_flags;
-	unsigned int s_def_mount_opt;
-	ext4_fsblk_t s_sb_block;
-	atomic64_t s_resv_clusters;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	short unsigned int s_mount_state;
-	short unsigned int s_pad;
-	int s_addr_per_block_bits;
-	int s_desc_per_block_bits;
-	int s_inode_size;
-	int s_first_ino;
-	unsigned int s_inode_readahead_blks;
-	unsigned int s_inode_goal;
-	u32 s_hash_seed[4];
-	int s_def_hash_version;
-	int s_hash_unsigned;
-	struct percpu_counter s_freeclusters_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
-	struct percpu_counter s_dirtyclusters_counter;
-	struct blockgroup_lock *s_blockgroup_lock;
-	struct proc_dir_entry *s_proc;
-	struct kobject s_kobj;
-	struct completion s_kobj_unregister;
-	struct super_block *s_sb;
-	struct journal_s *s_journal;
-	struct list_head s_orphan;
-	struct mutex s_orphan_lock;
-	long unsigned int s_ext4_flags;
-	long unsigned int s_commit_interval;
-	u32 s_max_batch_time;
-	u32 s_min_batch_time;
-	struct block_device *s_journal_bdev;
-	char *s_qf_names[3];
-	int s_jquota_fmt;
-	unsigned int s_want_extra_isize;
-	struct ext4_system_blocks *s_system_blks;
-	struct ext4_group_info ***s_group_info;
-	struct inode *s_buddy_cache;
-	spinlock_t s_md_lock;
-	short unsigned int *s_mb_offsets;
-	unsigned int *s_mb_maxs;
-	unsigned int s_group_info_size;
-	unsigned int s_mb_free_pending;
-	struct list_head s_freed_data_list;
-	long unsigned int s_stripe;
-	unsigned int s_mb_stream_request;
-	unsigned int s_mb_max_to_scan;
-	unsigned int s_mb_min_to_scan;
-	unsigned int s_mb_stats;
-	unsigned int s_mb_order2_reqs;
-	unsigned int s_mb_group_prealloc;
-	unsigned int s_mb_max_inode_prealloc;
-	unsigned int s_max_dir_size_kb;
-	long unsigned int s_mb_last_group;
-	long unsigned int s_mb_last_start;
-	unsigned int s_mb_prefetch;
-	unsigned int s_mb_prefetch_limit;
-	atomic_t s_bal_reqs;
-	atomic_t s_bal_success;
-	atomic_t s_bal_allocated;
-	atomic_t s_bal_ex_scanned;
-	atomic_t s_bal_goals;
-	atomic_t s_bal_breaks;
-	atomic_t s_bal_2orders;
-	spinlock_t s_bal_lock;
-	long unsigned int s_mb_buddies_generated;
-	long long unsigned int s_mb_generation_time;
-	atomic_t s_mb_lost_chunks;
-	atomic_t s_mb_preallocated;
-	atomic_t s_mb_discarded;
-	atomic_t s_lock_busy;
-	struct ext4_locality_group *s_locality_groups;
-	long unsigned int s_sectors_written_start;
-	u64 s_kbytes_written;
-	unsigned int s_extent_max_zeroout_kb;
-	unsigned int s_log_groups_per_flex;
-	struct flex_groups **s_flex_groups;
-	ext4_group_t s_flex_groups_allocated;
-	struct workqueue_struct *rsv_conversion_wq;
-	struct timer_list s_err_report;
-	struct ext4_li_request *s_li_request;
-	unsigned int s_li_wait_mult;
-	struct task_struct *s_mmp_tsk;
-	atomic_t s_last_trim_minblks;
-	struct crypto_shash *s_chksum_driver;
-	__u32 s_csum_seed;
-	struct shrinker s_es_shrinker;
-	struct list_head s_es_list;
-	long int s_es_nr_inode;
-	struct ext4_es_stats s_es_stats;
-	struct mb_cache___2 *s_ea_block_cache;
-	struct mb_cache___2 *s_ea_inode_cache;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_es_lock;
-	struct ratelimit_state s_err_ratelimit_state;
-	struct ratelimit_state s_warning_ratelimit_state;
-	struct ratelimit_state s_msg_ratelimit_state;
-	atomic_t s_warning_count;
-	atomic_t s_msg_count;
-	struct fscrypt_dummy_policy s_dummy_enc_policy;
-	struct percpu_rw_semaphore s_writepages_rwsem;
-	struct dax_device *s_daxdev;
-	errseq_t s_bdev_wb_err;
-	spinlock_t s_bdev_wb_lock;
-	atomic_t s_fc_subtid;
-	atomic_t s_fc_ineligible_updates;
-	struct list_head s_fc_q[2];
-	struct list_head s_fc_dentry_q[2];
-	unsigned int s_fc_bytes;
-	spinlock_t s_fc_lock;
-	struct buffer_head *s_fc_bh;
-	struct ext4_fc_stats s_fc_stats;
-	u64 s_fc_avg_commit_time;
-	struct ext4_fc_replay_state s_fc_replay_state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ext4_group_info {
-	long unsigned int bb_state;
-	struct rb_root bb_free_root;
-	ext4_grpblk_t bb_first_free;
-	ext4_grpblk_t bb_free;
-	ext4_grpblk_t bb_fragments;
-	ext4_grpblk_t bb_largest_free_order;
-	struct list_head bb_prealloc_list;
-	struct rw_semaphore alloc_sem;
-	ext4_grpblk_t bb_counters[0];
-};
-
-struct ext4_locality_group {
-	struct mutex lg_mutex;
-	struct list_head lg_prealloc_list[10];
-	spinlock_t lg_prealloc_lock;
-};
-
-enum ext4_li_mode {
-	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
-	EXT4_LI_MODE_ITABLE = 1,
-};
-
-struct ext4_li_request {
-	struct super_block *lr_super;
-	enum ext4_li_mode lr_mode;
-	ext4_group_t lr_first_not_zeroed;
-	ext4_group_t lr_next_group;
-	struct list_head lr_request;
-	long unsigned int lr_next_sched;
-	long unsigned int lr_timeout;
-};
-
-struct ext4_map_blocks {
-	ext4_fsblk_t m_pblk;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	unsigned int m_flags;
-};
-
-struct ext4_system_zone {
-	struct rb_node node;
-	ext4_fsblk_t start_blk;
-	unsigned int count;
-	u32 ino;
-};
-
-enum {
-	EXT4_INODE_SECRM = 0,
-	EXT4_INODE_UNRM = 1,
-	EXT4_INODE_COMPR = 2,
-	EXT4_INODE_SYNC = 3,
-	EXT4_INODE_IMMUTABLE = 4,
-	EXT4_INODE_APPEND = 5,
-	EXT4_INODE_NODUMP = 6,
-	EXT4_INODE_NOATIME = 7,
-	EXT4_INODE_DIRTY = 8,
-	EXT4_INODE_COMPRBLK = 9,
-	EXT4_INODE_NOCOMPR = 10,
-	EXT4_INODE_ENCRYPT = 11,
-	EXT4_INODE_INDEX = 12,
-	EXT4_INODE_IMAGIC = 13,
-	EXT4_INODE_JOURNAL_DATA = 14,
-	EXT4_INODE_NOTAIL = 15,
-	EXT4_INODE_DIRSYNC = 16,
-	EXT4_INODE_TOPDIR = 17,
-	EXT4_INODE_HUGE_FILE = 18,
-	EXT4_INODE_EXTENTS = 19,
-	EXT4_INODE_VERITY = 20,
-	EXT4_INODE_EA_INODE = 21,
-	EXT4_INODE_DAX = 25,
-	EXT4_INODE_INLINE_DATA = 28,
-	EXT4_INODE_PROJINHERIT = 29,
-	EXT4_INODE_CASEFOLD = 30,
-	EXT4_INODE_RESERVED = 31,
-};
-
-enum {
-	EXT4_FC_REASON_OK = 0,
-	EXT4_FC_REASON_INELIGIBLE = 1,
-	EXT4_FC_REASON_ALREADY_COMMITTED = 2,
-	EXT4_FC_REASON_FC_START_FAILED = 3,
-	EXT4_FC_REASON_FC_FAILED = 4,
-	EXT4_FC_REASON_XATTR = 0,
-	EXT4_FC_REASON_CROSS_RENAME = 1,
-	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
-	EXT4_FC_REASON_NOMEM = 3,
-	EXT4_FC_REASON_SWAP_BOOT = 4,
-	EXT4_FC_REASON_RESIZE = 5,
-	EXT4_FC_REASON_RENAME_DIR = 6,
-	EXT4_FC_REASON_FALLOC_RANGE = 7,
-	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
-	EXT4_FC_COMMIT_FAILED = 9,
-	EXT4_FC_REASON_MAX = 10,
-};
-
-struct ext4_dir_entry_2 {
-	__le32 inode;
-	__le16 rec_len;
-	__u8 name_len;
-	__u8 file_type;
-	char name[255];
-};
-
-struct fname;
-
-struct dir_private_info {
-	struct rb_root root;
-	struct rb_node *curr_node;
-	struct fname *extra_fname;
-	loff_t last_pos;
-	__u32 curr_hash;
-	__u32 curr_minor_hash;
-	__u32 next_hash;
-};
-
-struct fname {
-	__u32 hash;
-	__u32 minor_hash;
-	struct rb_node rb_hash;
-	struct fname *next;
-	__u32 inode;
-	__u8 name_len;
-	__u8 file_type;
-	char name[0];
-};
-
-enum SHIFT_DIRECTION {
-	SHIFT_LEFT = 0,
-	SHIFT_RIGHT = 1,
-};
-
-struct ext4_io_end_vec {
-	struct list_head list;
-	loff_t offset;
-	ssize_t size;
-};
-
-struct ext4_io_end {
-	struct list_head list;
-	handle_t *handle;
-	struct inode *inode;
-	struct bio *bio;
-	unsigned int flag;
-	atomic_t count;
-	struct list_head list_vec;
-};
-
-typedef struct ext4_io_end ext4_io_end_t;
-
-enum {
-	ES_WRITTEN_B = 0,
-	ES_UNWRITTEN_B = 1,
-	ES_DELAYED_B = 2,
-	ES_HOLE_B = 3,
-	ES_REFERENCED_B = 4,
-	ES_FLAGS = 5,
-};
-
-enum {
-	EXT4_STATE_JDATA = 0,
-	EXT4_STATE_NEW = 1,
-	EXT4_STATE_XATTR = 2,
-	EXT4_STATE_NO_EXPAND = 3,
-	EXT4_STATE_DA_ALLOC_CLOSE = 4,
-	EXT4_STATE_EXT_MIGRATE = 5,
-	EXT4_STATE_NEWENTRY = 6,
-	EXT4_STATE_MAY_INLINE_DATA = 7,
-	EXT4_STATE_EXT_PRECACHED = 8,
-	EXT4_STATE_LUSTRE_EA_INODE = 9,
-	EXT4_STATE_VERITY_IN_PROGRESS = 10,
-	EXT4_STATE_FC_COMMITTING = 11,
-};
-
-struct ext4_iloc {
-	struct buffer_head *bh;
-	long unsigned int offset;
-	ext4_group_t block_group;
-};
-
-struct ext4_extent_tail {
-	__le32 et_checksum;
-};
-
-struct ext4_extent {
-	__le32 ee_block;
-	__le16 ee_len;
-	__le16 ee_start_hi;
-	__le32 ee_start_lo;
-};
-
-struct ext4_extent_idx {
-	__le32 ei_block;
-	__le32 ei_leaf_lo;
-	__le16 ei_leaf_hi;
-	__u16 ei_unused;
-};
-
-struct ext4_extent_header {
-	__le16 eh_magic;
-	__le16 eh_entries;
-	__le16 eh_max;
-	__le16 eh_depth;
-	__le32 eh_generation;
-};
-
-struct ext4_ext_path {
-	ext4_fsblk_t p_block;
-	__u16 p_depth;
-	__u16 p_maxdepth;
-	struct ext4_extent *p_ext;
-	struct ext4_extent_idx *p_idx;
-	struct ext4_extent_header *p_hdr;
-	struct buffer_head *p_bh;
-};
-
-struct partial_cluster {
-	ext4_fsblk_t pclu;
-	ext4_lblk_t lblk;
-	enum {
-		initial = 0,
-		tofree = 1,
-		nofree = 2,
-	} state;
-};
-
-struct pending_reservation {
-	struct rb_node rb_node;
-	ext4_lblk_t lclu;
-};
-
-struct rsvd_count {
-	int ndelonly;
-	bool first_do_lblk_found;
-	ext4_lblk_t first_do_lblk;
-	ext4_lblk_t last_do_lblk;
-	struct extent_status *left_es;
-	bool partial;
-	ext4_lblk_t lclu;
-};
-
-enum {
-	EXT4_MF_MNTDIR_SAMPLED = 0,
-	EXT4_MF_FS_ABORTED = 1,
-	EXT4_MF_FC_INELIGIBLE = 2,
-	EXT4_MF_FC_COMMITTING = 3,
-};
-
-struct fsmap {
-	__u32 fmr_device;
-	__u32 fmr_flags;
-	__u64 fmr_physical;
-	__u64 fmr_owner;
-	__u64 fmr_offset;
-	__u64 fmr_length;
-	__u64 fmr_reserved[3];
-};
-
-struct ext4_fsmap {
-	struct list_head fmr_list;
-	dev_t fmr_device;
-	uint32_t fmr_flags;
-	uint64_t fmr_physical;
-	uint64_t fmr_owner;
-	uint64_t fmr_length;
-};
-
-struct ext4_fsmap_head {
-	uint32_t fmh_iflags;
-	uint32_t fmh_oflags;
-	unsigned int fmh_count;
-	unsigned int fmh_entries;
-	struct ext4_fsmap fmh_keys[2];
-};
-
-typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
-
-struct ext4_getfsmap_info {
-	struct ext4_fsmap_head *gfi_head;
-	ext4_fsmap_format_t gfi_formatter;
-	void *gfi_format_arg;
-	ext4_fsblk_t gfi_next_fsblk;
-	u32 gfi_dev;
-	ext4_group_t gfi_agno;
-	struct ext4_fsmap gfi_low;
-	struct ext4_fsmap gfi_high;
-	struct ext4_fsmap gfi_lastfree;
-	struct list_head gfi_meta_list;
-	bool gfi_last;
-};
-
-struct ext4_getfsmap_dev {
-	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
-	u32 gfd_dev;
-};
-
-struct dx_hash_info {
-	u32 hash;
-	u32 minor_hash;
-	int hash_version;
-	u32 *seed;
-};
-
-typedef unsigned int __kernel_mode_t;
-
-typedef __kernel_mode_t mode_t;
-
-struct ext4_inode {
-	__le16 i_mode;
-	__le16 i_uid;
-	__le32 i_size_lo;
-	__le32 i_atime;
-	__le32 i_ctime;
-	__le32 i_mtime;
-	__le32 i_dtime;
-	__le16 i_gid;
-	__le16 i_links_count;
-	__le32 i_blocks_lo;
-	__le32 i_flags;
-	union {
-		struct {
-			__le32 l_i_version;
-		} linux1;
-		struct {
-			__u32 h_i_translator;
-		} hurd1;
-		struct {
-			__u32 m_i_reserved1;
-		} masix1;
-	} osd1;
-	__le32 i_block[15];
-	__le32 i_generation;
-	__le32 i_file_acl_lo;
-	__le32 i_size_high;
-	__le32 i_obso_faddr;
-	union {
-		struct {
-			__le16 l_i_blocks_high;
-			__le16 l_i_file_acl_high;
-			__le16 l_i_uid_high;
-			__le16 l_i_gid_high;
-			__le16 l_i_checksum_lo;
-			__le16 l_i_reserved;
-		} linux2;
-		struct {
-			__le16 h_i_reserved1;
-			__u16 h_i_mode_high;
-			__u16 h_i_uid_high;
-			__u16 h_i_gid_high;
-			__u32 h_i_author;
-		} hurd2;
-		struct {
-			__le16 h_i_reserved1;
-			__le16 m_i_file_acl_high;
-			__u32 m_i_reserved2[2];
-		} masix2;
-	} osd2;
-	__le16 i_extra_isize;
-	__le16 i_checksum_hi;
-	__le32 i_ctime_extra;
-	__le32 i_mtime_extra;
-	__le32 i_atime_extra;
-	__le32 i_crtime;
-	__le32 i_crtime_extra;
-	__le32 i_version_hi;
-	__le32 i_projid;
-};
-
-struct orlov_stats {
-	__u64 free_clusters;
-	__u32 free_inodes;
-	__u32 used_dirs;
-};
-
-typedef struct {
-	__le32 *p;
-	__le32 key;
-	struct buffer_head *bh;
-} Indirect;
-
-struct ext4_filename {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	struct dx_hash_info hinfo;
-	struct fscrypt_str crypto_buf;
-	struct fscrypt_str cf_name;
-};
-
-struct ext4_xattr_ibody_header {
-	__le32 h_magic;
-};
-
-struct ext4_xattr_entry {
-	__u8 e_name_len;
-	__u8 e_name_index;
-	__le16 e_value_offs;
-	__le32 e_value_inum;
-	__le32 e_value_size;
-	__le32 e_hash;
-	char e_name[0];
-};
-
-struct ext4_xattr_info {
-	const char *name;
-	const void *value;
-	size_t value_len;
-	int name_index;
-	int in_inode;
-};
-
-struct ext4_xattr_search {
-	struct ext4_xattr_entry *first;
-	void *base;
-	void *end;
-	struct ext4_xattr_entry *here;
-	int not_found;
-};
-
-struct ext4_xattr_ibody_find {
-	struct ext4_xattr_search s;
-	struct ext4_iloc iloc;
-};
-
-typedef short unsigned int __kernel_uid16_t;
-
-typedef short unsigned int __kernel_gid16_t;
-
-typedef __kernel_uid16_t uid16_t;
-
-typedef __kernel_gid16_t gid16_t;
-
-struct ext4_io_submit {
-	struct writeback_control *io_wbc;
-	struct bio *io_bio;
-	ext4_io_end_t *io_end;
-	sector_t io_next_block;
-};
-
-typedef enum {
-	EXT4_IGET_NORMAL = 0,
-	EXT4_IGET_SPECIAL = 1,
-	EXT4_IGET_HANDLE = 2,
-} ext4_iget_flags;
-
-struct ext4_xattr_inode_array {
-	unsigned int count;
-	struct inode *inodes[0];
-};
-
-struct mpage_da_data {
-	struct inode *inode;
-	struct writeback_control *wbc;
-	long unsigned int first_page;
-	long unsigned int next_page;
-	long unsigned int last_page;
-	struct ext4_map_blocks map;
-	struct ext4_io_submit io_submit;
-	unsigned int do_map: 1;
-	unsigned int scanned_until_end: 1;
-};
-
-struct fstrim_range {
-	__u64 start;
-	__u64 len;
-	__u64 minlen;
-};
-
-struct ext4_new_group_input {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 unused;
-};
-
-struct compat_ext4_new_group_input {
-	u32 group;
-	compat_u64 block_bitmap;
-	compat_u64 inode_bitmap;
-	compat_u64 inode_table;
-	u32 blocks_count;
-	u16 reserved_blocks;
-	u16 unused;
-};
-
-struct ext4_new_group_data {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 mdata_blocks;
-	__u32 free_clusters_count;
-};
-
-struct move_extent {
-	__u32 reserved;
-	__u32 donor_fd;
-	__u64 orig_start;
-	__u64 donor_start;
-	__u64 len;
-	__u64 moved_len;
-};
-
-struct fsmap_head {
-	__u32 fmh_iflags;
-	__u32 fmh_oflags;
-	__u32 fmh_count;
-	__u32 fmh_entries;
-	__u64 fmh_reserved[6];
-	struct fsmap fmh_keys[2];
-	struct fsmap fmh_recs[0];
-};
-
-struct getfsmap_info {
-	struct super_block *gi_sb;
-	struct fsmap_head *gi_data;
-	unsigned int gi_idx;
-	__u32 gi_last_flags;
-};
-
-enum blk_default_limits {
-	BLK_MAX_SEGMENTS = 128,
-	BLK_SAFE_MAX_SECTORS = 255,
-	BLK_DEF_MAX_SECTORS = 2560,
-	BLK_MAX_SEGMENT_SIZE = 65536,
-	BLK_SEG_BOUNDARY_MASK = 4294967295,
-};
-
-struct ext4_free_data {
-	struct list_head efd_list;
-	struct rb_node efd_node;
-	ext4_group_t efd_group;
-	ext4_grpblk_t efd_start_cluster;
-	ext4_grpblk_t efd_count;
-	tid_t efd_tid;
-};
-
-struct ext4_prealloc_space {
-	struct list_head pa_inode_list;
-	struct list_head pa_group_list;
-	union {
-		struct list_head pa_tmp_list;
-		struct callback_head pa_rcu;
-	} u;
-	spinlock_t pa_lock;
-	atomic_t pa_count;
-	unsigned int pa_deleted;
-	ext4_fsblk_t pa_pstart;
-	ext4_lblk_t pa_lstart;
-	ext4_grpblk_t pa_len;
-	ext4_grpblk_t pa_free;
-	short unsigned int pa_type;
-	spinlock_t *pa_obj_lock;
-	struct inode *pa_inode;
-};
-
-enum {
-	MB_INODE_PA = 0,
-	MB_GROUP_PA = 1,
-};
-
-struct ext4_free_extent {
-	ext4_lblk_t fe_logical;
-	ext4_grpblk_t fe_start;
-	ext4_group_t fe_group;
-	ext4_grpblk_t fe_len;
-};
-
-struct ext4_allocation_context {
-	struct inode *ac_inode;
-	struct super_block *ac_sb;
-	struct ext4_free_extent ac_o_ex;
-	struct ext4_free_extent ac_g_ex;
-	struct ext4_free_extent ac_b_ex;
-	struct ext4_free_extent ac_f_ex;
-	__u16 ac_groups_scanned;
-	__u16 ac_found;
-	__u16 ac_tail;
-	__u16 ac_buddy;
-	__u16 ac_flags;
-	__u8 ac_status;
-	__u8 ac_criteria;
-	__u8 ac_2order;
-	__u8 ac_op;
-	struct page *ac_bitmap_page;
-	struct page *ac_buddy_page;
-	struct ext4_prealloc_space *ac_pa;
-	struct ext4_locality_group *ac_lg;
-};
-
-struct ext4_buddy {
-	struct page *bd_buddy_page;
-	void *bd_buddy;
-	struct page *bd_bitmap_page;
-	void *bd_bitmap;
-	struct ext4_group_info *bd_info;
-	struct super_block *bd_sb;
-	__u16 bd_blkbits;
-	ext4_group_t bd_group;
-};
-
-typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
-
-struct sg {
-	struct ext4_group_info info;
-	ext4_grpblk_t counters[18];
-};
-
-struct migrate_struct {
-	ext4_lblk_t first_block;
-	ext4_lblk_t last_block;
-	ext4_lblk_t curr_block;
-	ext4_fsblk_t first_pblock;
-	ext4_fsblk_t last_pblock;
-};
-
-struct mmp_struct {
-	__le32 mmp_magic;
-	__le32 mmp_seq;
-	__le64 mmp_time;
-	char mmp_nodename[64];
-	char mmp_bdevname[32];
-	__le16 mmp_check_interval;
-	__le16 mmp_pad1;
-	__le32 mmp_pad2[226];
-	__le32 mmp_checksum;
-};
-
-struct mmpd_data {
-	struct buffer_head *bh;
-	struct super_block *sb;
-};
-
-struct ext4_dir_entry {
-	__le32 inode;
-	__le16 rec_len;
-	__le16 name_len;
-	char name[255];
-};
-
-struct ext4_dir_entry_tail {
-	__le32 det_reserved_zero1;
-	__le16 det_rec_len;
-	__u8 det_reserved_zero2;
-	__u8 det_reserved_ft;
-	__le32 det_checksum;
-};
-
-typedef enum {
-	EITHER = 0,
-	INDEX = 1,
-	DIRENT = 2,
-	DIRENT_HTREE = 3,
-} dirblock_type_t;
-
-struct fake_dirent {
-	__le32 inode;
-	__le16 rec_len;
-	u8 name_len;
-	u8 file_type;
-};
-
-struct dx_countlimit {
-	__le16 limit;
-	__le16 count;
-};
-
-struct dx_entry {
-	__le32 hash;
-	__le32 block;
-};
-
-struct dx_root_info {
-	__le32 reserved_zero;
-	u8 hash_version;
-	u8 info_length;
-	u8 indirect_levels;
-	u8 unused_flags;
-};
-
-struct dx_root {
-	struct fake_dirent dot;
-	char dot_name[4];
-	struct fake_dirent dotdot;
-	char dotdot_name[4];
-	struct dx_root_info info;
-	struct dx_entry entries[0];
-};
-
-struct dx_node {
-	struct fake_dirent fake;
-	struct dx_entry entries[0];
-};
-
-struct dx_frame {
-	struct buffer_head *bh;
-	struct dx_entry *entries;
-	struct dx_entry *at;
-};
-
-struct dx_map_entry {
-	u32 hash;
-	u16 offs;
-	u16 size;
-};
-
-struct dx_tail {
-	u32 dt_reserved;
-	__le32 dt_checksum;
-};
-
-struct ext4_renament {
-	struct inode *dir;
-	struct dentry *dentry;
-	struct inode *inode;
-	bool is_dir;
-	int dir_nlink_delta;
-	struct buffer_head *bh;
-	struct ext4_dir_entry_2 *de;
-	int inlined;
-	struct buffer_head *dir_bh;
-	struct ext4_dir_entry_2 *parent_de;
-	int dir_inlined;
-};
-
-enum bio_post_read_step {
-	STEP_INITIAL = 0,
-	STEP_DECRYPT = 1,
-	STEP_VERITY = 2,
-	STEP_MAX = 3,
-};
-
-struct bio_post_read_ctx {
-	struct bio *bio;
-	struct work_struct work;
-	unsigned int cur_step;
-	unsigned int enabled_steps;
-};
-
-enum {
-	BLOCK_BITMAP = 0,
-	INODE_BITMAP = 1,
-	INODE_TABLE = 2,
-	GROUP_TABLE_COUNT = 3,
-};
-
-struct ext4_rcu_ptr {
-	struct callback_head rcu;
-	void *ptr;
-};
-
-struct ext4_new_flex_group_data {
-	struct ext4_new_group_data *groups;
-	__u16 *bg_flags;
-	ext4_group_t count;
-};
-
-enum stat_group {
-	STAT_READ = 0,
-	STAT_WRITE = 1,
-	STAT_DISCARD = 2,
-	STAT_FLUSH = 3,
-	NR_STAT_GROUPS = 4,
-};
-
-enum {
-	I_DATA_SEM_NORMAL = 0,
-	I_DATA_SEM_OTHER = 1,
-	I_DATA_SEM_QUOTA = 2,
-};
-
-struct ext4_lazy_init {
-	long unsigned int li_state;
-	struct list_head li_request_list;
-	struct mutex li_list_mtx;
-};
-
-struct ext4_journal_cb_entry {
-	struct list_head jce_list;
-	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
-};
-
-struct trace_event_raw_ext4_other_inode_update_time {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t orig_ino;
-	uid_t uid;
-	gid_t gid;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_free_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	uid_t uid;
-	gid_t gid;
-	__u64 blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_request_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t dir;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_allocate_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t dir;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_evict_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int nlink;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_drop_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int drop;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_nfs_commit_metadata {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mark_inode_dirty {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int ip;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_begin_ordered_truncate {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t new_size;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__write_begin {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int len;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__write_end {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int len;
-	unsigned int copied;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_writepages {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	long unsigned int writeback_index;
-	int sync_mode;
-	char for_kupdate;
-	char range_cyclic;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_write_pages {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int first_page;
-	long int nr_to_write;
-	int sync_mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_write_pages_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 lblk;
-	__u32 len;
-	__u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_writepages_result {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	int pages_written;
-	long int pages_skipped;
-	long unsigned int writeback_index;
-	int sync_mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__page_op {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_invalidatepage_op {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int index;
-	unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_discard_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	__u64 blk;
-	__u64 count;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__mb_new_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 pa_pstart;
-	__u64 pa_lstart;
-	__u32 pa_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_release_inode_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	__u32 count;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_release_group_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	__u64 pa_pstart;
-	__u32 pa_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_discard_preallocations {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int len;
-	unsigned int needed;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_discard_preallocations {
-	struct trace_entry ent;
-	dev_t dev;
-	int needed;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_request_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int len;
-	__u32 logical;
-	__u32 lleft;
-	__u32 lright;
-	__u64 goal;
-	__u64 pleft;
-	__u64 pright;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_allocate_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	unsigned int len;
-	__u32 logical;
-	__u32 lleft;
-	__u32 lright;
-	__u64 goal;
-	__u64 pleft;
-	__u64 pright;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_free_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	long unsigned int count;
-	int flags;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_file_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t parent;
-	int datasync;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_file_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_fs {
-	struct trace_entry ent;
-	dev_t dev;
-	int wait;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_alloc_da_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int data_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mballoc_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u32 orig_logical;
-	int orig_start;
-	__u32 orig_group;
-	int orig_len;
-	__u32 goal_logical;
-	int goal_start;
-	__u32 goal_group;
-	int goal_len;
-	__u32 result_logical;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	__u16 found;
-	__u16 groups;
-	__u16 buddy;
-	__u16 flags;
-	__u16 tail;
-	__u8 cr;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mballoc_prealloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u32 orig_logical;
-	int orig_start;
-	__u32 orig_group;
-	int orig_len;
-	__u32 result_logical;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__mballoc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_forget {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	int is_metadata;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_update_reserve_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int used_blocks;
-	int reserved_data_blocks;
-	int quota_claim;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_reserve_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int reserved_data_blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_release_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int freed_blocks;
-	int reserved_data_blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__bitmap_load {
-	struct trace_entry ent;
-	dev_t dev;
-	__u32 group;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_read_block_bitmap_load {
-	struct trace_entry ent;
-	dev_t dev;
-	__u32 group;
-	bool prefetch;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__fallocate_mode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	int mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fallocate_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int blocks;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_unlink_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t parent;
-	loff_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_unlink_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__truncate {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_convert_to_initialized_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	ext4_lblk_t u_lblk;
-	unsigned int u_len;
-	ext4_fsblk_t u_pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	ext4_lblk_t u_lblk;
-	unsigned int u_len;
-	ext4_fsblk_t u_pblk;
-	ext4_lblk_t i_lblk;
-	unsigned int i_len;
-	ext4_fsblk_t i_pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__map_blocks_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__map_blocks_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int flags;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	unsigned int mflags;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_load_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_load_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_journal_start {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int ip;
-	int blocks;
-	int rsv_blocks;
-	int revoke_creds;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_journal_start_reserved {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int ip;
-	int blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__trim {
-	struct trace_entry ent;
-	int dev_major;
-	int dev_minor;
-	__u32 group;
-	int start;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_handle_unwritten_extents {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int flags;
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	unsigned int len;
-	unsigned int allocated;
-	ext4_fsblk_t newblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_implied_cluster_alloc_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	unsigned int flags;
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	unsigned int len;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_put_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	ext4_fsblk_t start;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_find_delalloc_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	int reverse;
-	int found;
-	ext4_lblk_t found_blk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_reserved_cluster_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_show_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	short unsigned int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_remove_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	ext4_fsblk_t ee_pblk;
-	ext4_lblk_t ee_lblk;
-	short unsigned int ee_len;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_rm_leaf {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t ee_lblk;
-	ext4_fsblk_t ee_pblk;
-	short int ee_len;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_rm_idx {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_remove_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-	int depth;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_remove_space_done {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-	int depth;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	short unsigned int eh_entries;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__es_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_remove_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t lblk;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_find_extent_range_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_find_extent_range_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_lookup_extent_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_lookup_extent_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	int found;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__es_shrink_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_to_scan;
-	int cache_cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_shrink_scan_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_shrunk;
-	int cache_cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_collapse_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_insert_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_shrink {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_shrunk;
-	long long unsigned int scan_time;
-	int nr_skipped;
-	int retried;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_insert_delayed_block {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	bool allocated;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fsmap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	dev_t keydev;
-	u32 agno;
-	u64 bno;
-	u64 len;
-	u64 owner;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_getfsmap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	dev_t keydev;
-	u64 block;
-	u64 len;
-	u64 owner;
-	u64 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_shutdown {
-	struct trace_entry ent;
-	dev_t dev;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_error {
-	struct trace_entry ent;
-	dev_t dev;
-	const char *function;
-	unsigned int line;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_prefetch_bitmaps {
-	struct trace_entry ent;
-	dev_t dev;
-	__u32 group;
-	__u32 next;
-	__u32 ios;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_lazy_itable_init {
-	struct trace_entry ent;
-	dev_t dev;
-	__u32 group;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_replay_scan {
-	struct trace_entry ent;
-	dev_t dev;
-	int error;
-	int off;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_replay {
-	struct trace_entry ent;
-	dev_t dev;
-	int tag;
-	int ino;
-	int priv1;
-	int priv2;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_commit_start {
-	struct trace_entry ent;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_commit_stop {
-	struct trace_entry ent;
-	dev_t dev;
-	int nblks;
-	int reason;
-	int num_fc;
-	int num_fc_ineligible;
-	int nblks_agg;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	struct ext4_sb_info *sbi;
-	int count;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_create {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_link {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_unlink {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_range {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	long int start;
-	long int end;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_ext4_other_inode_update_time {};
-
-struct trace_event_data_offsets_ext4_free_inode {};
-
-struct trace_event_data_offsets_ext4_request_inode {};
-
-struct trace_event_data_offsets_ext4_allocate_inode {};
-
-struct trace_event_data_offsets_ext4_evict_inode {};
-
-struct trace_event_data_offsets_ext4_drop_inode {};
-
-struct trace_event_data_offsets_ext4_nfs_commit_metadata {};
-
-struct trace_event_data_offsets_ext4_mark_inode_dirty {};
-
-struct trace_event_data_offsets_ext4_begin_ordered_truncate {};
-
-struct trace_event_data_offsets_ext4__write_begin {};
-
-struct trace_event_data_offsets_ext4__write_end {};
-
-struct trace_event_data_offsets_ext4_writepages {};
-
-struct trace_event_data_offsets_ext4_da_write_pages {};
-
-struct trace_event_data_offsets_ext4_da_write_pages_extent {};
-
-struct trace_event_data_offsets_ext4_writepages_result {};
-
-struct trace_event_data_offsets_ext4__page_op {};
-
-struct trace_event_data_offsets_ext4_invalidatepage_op {};
-
-struct trace_event_data_offsets_ext4_discard_blocks {};
-
-struct trace_event_data_offsets_ext4__mb_new_pa {};
-
-struct trace_event_data_offsets_ext4_mb_release_inode_pa {};
-
-struct trace_event_data_offsets_ext4_mb_release_group_pa {};
-
-struct trace_event_data_offsets_ext4_discard_preallocations {};
-
-struct trace_event_data_offsets_ext4_mb_discard_preallocations {};
-
-struct trace_event_data_offsets_ext4_request_blocks {};
-
-struct trace_event_data_offsets_ext4_allocate_blocks {};
-
-struct trace_event_data_offsets_ext4_free_blocks {};
-
-struct trace_event_data_offsets_ext4_sync_file_enter {};
-
-struct trace_event_data_offsets_ext4_sync_file_exit {};
-
-struct trace_event_data_offsets_ext4_sync_fs {};
-
-struct trace_event_data_offsets_ext4_alloc_da_blocks {};
-
-struct trace_event_data_offsets_ext4_mballoc_alloc {};
-
-struct trace_event_data_offsets_ext4_mballoc_prealloc {};
-
-struct trace_event_data_offsets_ext4__mballoc {};
-
-struct trace_event_data_offsets_ext4_forget {};
-
-struct trace_event_data_offsets_ext4_da_update_reserve_space {};
-
-struct trace_event_data_offsets_ext4_da_reserve_space {};
-
-struct trace_event_data_offsets_ext4_da_release_space {};
-
-struct trace_event_data_offsets_ext4__bitmap_load {};
-
-struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
-
-struct trace_event_data_offsets_ext4_direct_IO_enter {};
-
-struct trace_event_data_offsets_ext4_direct_IO_exit {};
-
-struct trace_event_data_offsets_ext4__fallocate_mode {};
-
-struct trace_event_data_offsets_ext4_fallocate_exit {};
-
-struct trace_event_data_offsets_ext4_unlink_enter {};
-
-struct trace_event_data_offsets_ext4_unlink_exit {};
-
-struct trace_event_data_offsets_ext4__truncate {};
-
-struct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};
-
-struct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};
-
-struct trace_event_data_offsets_ext4__map_blocks_enter {};
-
-struct trace_event_data_offsets_ext4__map_blocks_exit {};
-
-struct trace_event_data_offsets_ext4_ext_load_extent {};
-
-struct trace_event_data_offsets_ext4_load_inode {};
-
-struct trace_event_data_offsets_ext4_journal_start {};
-
-struct trace_event_data_offsets_ext4_journal_start_reserved {};
-
-struct trace_event_data_offsets_ext4__trim {};
-
-struct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};
-
-struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
-
-struct trace_event_data_offsets_ext4_ext_put_in_cache {};
-
-struct trace_event_data_offsets_ext4_ext_in_cache {};
-
-struct trace_event_data_offsets_ext4_find_delalloc_range {};
-
-struct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};
-
-struct trace_event_data_offsets_ext4_ext_show_extent {};
-
-struct trace_event_data_offsets_ext4_remove_blocks {};
-
-struct trace_event_data_offsets_ext4_ext_rm_leaf {};
-
-struct trace_event_data_offsets_ext4_ext_rm_idx {};
-
-struct trace_event_data_offsets_ext4_ext_remove_space {};
-
-struct trace_event_data_offsets_ext4_ext_remove_space_done {};
-
-struct trace_event_data_offsets_ext4__es_extent {};
-
-struct trace_event_data_offsets_ext4_es_remove_extent {};
-
-struct trace_event_data_offsets_ext4_es_find_extent_range_enter {};
-
-struct trace_event_data_offsets_ext4_es_find_extent_range_exit {};
-
-struct trace_event_data_offsets_ext4_es_lookup_extent_enter {};
-
-struct trace_event_data_offsets_ext4_es_lookup_extent_exit {};
-
-struct trace_event_data_offsets_ext4__es_shrink_enter {};
-
-struct trace_event_data_offsets_ext4_es_shrink_scan_exit {};
-
-struct trace_event_data_offsets_ext4_collapse_range {};
-
-struct trace_event_data_offsets_ext4_insert_range {};
-
-struct trace_event_data_offsets_ext4_es_shrink {};
-
-struct trace_event_data_offsets_ext4_es_insert_delayed_block {};
-
-struct trace_event_data_offsets_ext4_fsmap_class {};
-
-struct trace_event_data_offsets_ext4_getfsmap_class {};
-
-struct trace_event_data_offsets_ext4_shutdown {};
-
-struct trace_event_data_offsets_ext4_error {};
-
-struct trace_event_data_offsets_ext4_prefetch_bitmaps {};
-
-struct trace_event_data_offsets_ext4_lazy_itable_init {};
-
-struct trace_event_data_offsets_ext4_fc_replay_scan {};
-
-struct trace_event_data_offsets_ext4_fc_replay {};
-
-struct trace_event_data_offsets_ext4_fc_commit_start {};
-
-struct trace_event_data_offsets_ext4_fc_commit_stop {};
-
-struct trace_event_data_offsets_ext4_fc_stats {};
-
-struct trace_event_data_offsets_ext4_fc_track_create {};
-
-struct trace_event_data_offsets_ext4_fc_track_link {};
-
-struct trace_event_data_offsets_ext4_fc_track_unlink {};
-
-struct trace_event_data_offsets_ext4_fc_track_inode {};
-
-struct trace_event_data_offsets_ext4_fc_track_range {};
-
-typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
-
-typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, long unsigned int);
-
-typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
-
-typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, long unsigned int, struct writeback_control *);
-
-typedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);
-
-typedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);
-
-typedef void (*btf_trace_ext4_writepage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_readpage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
-
-typedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, long long unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);
-
-typedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);
-
-typedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, long long unsigned int);
-
-typedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);
-
-typedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);
-
-typedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);
-
-typedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);
-
-typedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);
-
-typedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);
-
-typedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);
-
-typedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
-
-typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);
-
-typedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);
-
-typedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);
-
-typedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);
-
-typedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);
-
-typedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_load_inode)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_journal_start)(void *, struct super_block *, int, int, int, long unsigned int);
-
-typedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, long unsigned int);
-
-typedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);
-
-typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
-
-typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
-
-typedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);
-
-typedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);
-
-typedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);
-
-typedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);
-
-typedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);
-
-typedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);
-
-typedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);
-
-typedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);
-
-typedef void (*btf_trace_ext4_prefetch_bitmaps)(void *, struct super_block *, ext4_group_t, ext4_group_t, unsigned int);
-
-typedef void (*btf_trace_ext4_lazy_itable_init)(void *, struct super_block *, ext4_group_t);
-
-typedef void (*btf_trace_ext4_fc_replay_scan)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
-
-typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *);
-
-typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
-
-typedef void (*btf_trace_ext4_fc_track_create)(void *, struct inode *, struct dentry *, int);
-
-typedef void (*btf_trace_ext4_fc_track_link)(void *, struct inode *, struct dentry *, int);
-
-typedef void (*btf_trace_ext4_fc_track_unlink)(void *, struct inode *, struct dentry *, int);
-
-typedef void (*btf_trace_ext4_fc_track_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_fc_track_range)(void *, struct inode *, long int, long int, int);
-
-enum {
-	Opt_bsd_df = 0,
-	Opt_minix_df = 1,
-	Opt_grpid = 2,
-	Opt_nogrpid = 3,
-	Opt_resgid = 4,
-	Opt_resuid = 5,
-	Opt_sb = 6,
-	Opt_err_cont = 7,
-	Opt_err_panic = 8,
-	Opt_err_ro = 9,
-	Opt_nouid32 = 10,
-	Opt_debug = 11,
-	Opt_removed = 12,
-	Opt_user_xattr = 13,
-	Opt_nouser_xattr = 14,
-	Opt_acl = 15,
-	Opt_noacl = 16,
-	Opt_auto_da_alloc = 17,
-	Opt_noauto_da_alloc = 18,
-	Opt_noload = 19,
-	Opt_commit = 20,
-	Opt_min_batch_time = 21,
-	Opt_max_batch_time = 22,
-	Opt_journal_dev = 23,
-	Opt_journal_path = 24,
-	Opt_journal_checksum = 25,
-	Opt_journal_async_commit = 26,
-	Opt_abort = 27,
-	Opt_data_journal = 28,
-	Opt_data_ordered = 29,
-	Opt_data_writeback = 30,
-	Opt_data_err_abort = 31,
-	Opt_data_err_ignore = 32,
-	Opt_test_dummy_encryption = 33,
-	Opt_inlinecrypt = 34,
-	Opt_usrjquota = 35,
-	Opt_grpjquota = 36,
-	Opt_offusrjquota = 37,
-	Opt_offgrpjquota = 38,
-	Opt_jqfmt_vfsold = 39,
-	Opt_jqfmt_vfsv0 = 40,
-	Opt_jqfmt_vfsv1 = 41,
-	Opt_quota = 42,
-	Opt_noquota = 43,
-	Opt_barrier = 44,
-	Opt_nobarrier = 45,
-	Opt_err___2 = 46,
-	Opt_usrquota = 47,
-	Opt_grpquota = 48,
-	Opt_prjquota = 49,
-	Opt_i_version = 50,
-	Opt_dax = 51,
-	Opt_dax_always = 52,
-	Opt_dax_inode = 53,
-	Opt_dax_never = 54,
-	Opt_stripe = 55,
-	Opt_delalloc = 56,
-	Opt_nodelalloc = 57,
-	Opt_warn_on_error = 58,
-	Opt_nowarn_on_error = 59,
-	Opt_mblk_io_submit = 60,
-	Opt_lazytime = 61,
-	Opt_nolazytime = 62,
-	Opt_debug_want_extra_isize = 63,
-	Opt_nomblk_io_submit = 64,
-	Opt_block_validity = 65,
-	Opt_noblock_validity = 66,
-	Opt_inode_readahead_blks = 67,
-	Opt_journal_ioprio = 68,
-	Opt_dioread_nolock = 69,
-	Opt_dioread_lock = 70,
-	Opt_discard = 71,
-	Opt_nodiscard = 72,
-	Opt_init_itable = 73,
-	Opt_noinit_itable = 74,
-	Opt_max_dir_size_kb = 75,
-	Opt_nojournal_checksum = 76,
-	Opt_nombcache = 77,
-	Opt_prefetch_block_bitmaps = 78,
-};
-
-struct mount_opts {
-	int token;
-	int mount_opt;
-	int flags;
-};
-
-struct ext4_sb_encodings {
-	__u16 magic;
-	char *name;
-	char *version;
-};
-
-struct ext4_mount_options {
-	long unsigned int s_mount_opt;
-	long unsigned int s_mount_opt2;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	long unsigned int s_commit_interval;
-	u32 s_min_batch_time;
-	u32 s_max_batch_time;
-	int s_jquota_fmt;
-	char *s_qf_names[3];
-};
-
-enum {
-	attr_noop = 0,
-	attr_delayed_allocation_blocks = 1,
-	attr_session_write_kbytes = 2,
-	attr_lifetime_write_kbytes = 3,
-	attr_reserved_clusters = 4,
-	attr_inode_readahead = 5,
-	attr_trigger_test_error = 6,
-	attr_first_error_time = 7,
-	attr_last_error_time = 8,
-	attr_feature = 9,
-	attr_pointer_ui = 10,
-	attr_pointer_ul = 11,
-	attr_pointer_u64 = 12,
-	attr_pointer_u8 = 13,
-	attr_pointer_string = 14,
-	attr_pointer_atomic = 15,
-	attr_journal_task = 16,
-};
-
-enum {
-	ptr_explicit = 0,
-	ptr_ext4_sb_info_offset = 1,
-	ptr_ext4_super_block_offset = 2,
-};
-
-struct ext4_attr {
-	struct attribute attr;
-	short int attr_id;
-	short int attr_ptr;
-	short unsigned int attr_size;
-	union {
-		int offset;
-		void *explicit_ptr;
-	} u;
-};
-
-struct ext4_xattr_header {
-	__le32 h_magic;
-	__le32 h_refcount;
-	__le32 h_blocks;
-	__le32 h_hash;
-	__le32 h_checksum;
-	__u32 h_reserved[3];
-};
-
-struct ext4_xattr_block_find {
-	struct ext4_xattr_search s;
-	struct buffer_head *bh;
-};
-
-struct ext4_fc_tl {
-	__le16 fc_tag;
-	__le16 fc_len;
-};
-
-struct ext4_fc_head {
-	__le32 fc_features;
-	__le32 fc_tid;
-};
-
-struct ext4_fc_add_range {
-	__le32 fc_ino;
-	__u8 fc_ex[12];
-};
-
-struct ext4_fc_del_range {
-	__le32 fc_ino;
-	__le32 fc_lblk;
-	__le32 fc_len;
-};
-
-struct ext4_fc_dentry_info {
-	__le32 fc_parent_ino;
-	__le32 fc_ino;
-	u8 fc_dname[0];
-};
-
-struct ext4_fc_inode {
-	__le32 fc_ino;
-	__u8 fc_raw_inode[0];
-};
-
-struct ext4_fc_tail {
-	__le32 fc_tid;
-	__le32 fc_crc;
-};
-
-struct ext4_fc_dentry_update {
-	int fcd_op;
-	int fcd_parent;
-	int fcd_ino;
-	struct qstr fcd_name;
-	unsigned char fcd_iname[32];
-	struct list_head fcd_list;
-};
-
-struct __track_dentry_update_args {
-	struct dentry *dentry;
-	int op;
-};
-
-struct __track_range_args {
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-};
-
-struct dentry_info_args {
-	int parent_ino;
-	int dname_len;
-	int ino;
-	int inode_len;
-	char *dname;
-};
-
-typedef struct {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-} ext4_acl_entry;
-
-typedef struct {
-	__le32 a_version;
-} ext4_acl_header;
-
-struct commit_header {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-	unsigned char h_chksum_type;
-	unsigned char h_chksum_size;
-	unsigned char h_padding[2];
-	__be32 h_chksum[8];
-	__be64 h_commit_sec;
-	__be32 h_commit_nsec;
-};
-
-struct journal_block_tag3_s {
-	__be32 t_blocknr;
-	__be32 t_flags;
-	__be32 t_blocknr_high;
-	__be32 t_checksum;
-};
-
-typedef struct journal_block_tag3_s journal_block_tag3_t;
-
-struct journal_block_tag_s {
-	__be32 t_blocknr;
-	__be16 t_checksum;
-	__be16 t_flags;
-	__be32 t_blocknr_high;
-};
-
-typedef struct journal_block_tag_s journal_block_tag_t;
-
-struct jbd2_journal_block_tail {
-	__be32 t_checksum;
-};
-
-struct jbd2_journal_revoke_header_s {
-	journal_header_t r_header;
-	__be32 r_count;
-};
-
-typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
-
-struct recovery_info {
-	tid_t start_transaction;
-	tid_t end_transaction;
-	int nr_replays;
-	int nr_revokes;
-	int nr_revoke_hits;
-};
-
-struct jbd2_revoke_table_s {
-	int hash_size;
-	int hash_shift;
-	struct list_head *hash_table;
-};
-
-struct jbd2_revoke_record_s {
-	struct list_head hash;
-	tid_t sequence;
-	long long unsigned int blocknr;
-};
-
-struct trace_event_raw_jbd2_checkpoint {
-	struct trace_entry ent;
-	dev_t dev;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_end_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	int head;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_submit_inode_data {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_start_class {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_extend {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int buffer_credits;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int interval;
-	int sync;
-	int requested_blocks;
-	int dirtied_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_run_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int wait;
-	long unsigned int request_delay;
-	long unsigned int running;
-	long unsigned int locked;
-	long unsigned int flushing;
-	long unsigned int logging;
-	__u32 handle_count;
-	__u32 blocks;
-	__u32 blocks_logged;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_checkpoint_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int chp_time;
-	__u32 forced_to_close;
-	__u32 written;
-	__u32 dropped;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_update_log_tail {
-	struct trace_entry ent;
-	dev_t dev;
-	tid_t tail_sequence;
-	tid_t first_tid;
-	long unsigned int block_nr;
-	long unsigned int freed;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_write_superblock {
-	struct trace_entry ent;
-	dev_t dev;
-	int write_op;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_lock_buffer_stall {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int stall_ms;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_jbd2_checkpoint {};
-
-struct trace_event_data_offsets_jbd2_commit {};
-
-struct trace_event_data_offsets_jbd2_end_commit {};
-
-struct trace_event_data_offsets_jbd2_submit_inode_data {};
-
-struct trace_event_data_offsets_jbd2_handle_start_class {};
-
-struct trace_event_data_offsets_jbd2_handle_extend {};
-
-struct trace_event_data_offsets_jbd2_handle_stats {};
-
-struct trace_event_data_offsets_jbd2_run_stats {};
-
-struct trace_event_data_offsets_jbd2_checkpoint_stats {};
-
-struct trace_event_data_offsets_jbd2_update_log_tail {};
-
-struct trace_event_data_offsets_jbd2_write_superblock {};
-
-struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
-
-typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
-
-typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
-
-typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
-
-typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
-
-typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
-
-typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
-
-struct jbd2_stats_proc_session {
-	journal_t *journal;
-	struct transaction_stats_s *stats;
-	int start;
-	int max;
-};
-
-struct ramfs_mount_opts {
-	umode_t mode;
-};
-
-struct ramfs_fs_info {
-	struct ramfs_mount_opts mount_opts;
-};
-
-enum ramfs_param {
-	Opt_mode___3 = 0,
-};
-
-enum hugetlbfs_size_type {
-	NO_SIZE = 0,
-	SIZE_STD = 1,
-	SIZE_PERCENT = 2,
-};
-
-struct hugetlbfs_fs_context {
-	struct hstate *hstate;
-	long long unsigned int max_size_opt;
-	long long unsigned int min_size_opt;
-	long int max_hpages;
-	long int nr_inodes;
-	long int min_hpages;
-	enum hugetlbfs_size_type max_val_type;
-	enum hugetlbfs_size_type min_val_type;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-enum hugetlb_param {
-	Opt_gid___4 = 0,
-	Opt_min_size = 1,
-	Opt_mode___4 = 2,
-	Opt_nr_inodes___2 = 3,
-	Opt_pagesize = 4,
-	Opt_size___2 = 5,
-	Opt_uid___3 = 6,
-};
-
-struct getdents_callback___2 {
-	struct dir_context ctx;
-	char *name;
-	u64 ino;
-	int found;
-	int sequence;
-};
-
-typedef u16 wchar_t;
-
 typedef u32 unicode_t;
 
-struct nls_table {
-	const char *charset;
-	const char *alias;
-	int (*uni2char)(wchar_t, unsigned char *, int);
-	int (*char2uni)(const unsigned char *, int, wchar_t *);
-	const unsigned char *charset2lower;
-	const unsigned char *charset2upper;
-	struct module *owner;
-	struct nls_table *next;
-};
-
-enum utf16_endian {
-	UTF16_HOST_ENDIAN = 0,
-	UTF16_LITTLE_ENDIAN = 1,
-	UTF16_BIG_ENDIAN = 2,
-};
-
 struct utf8_table {
 	int cmask;
 	int cval;
@@ -45354,80 +111322,23 @@
 	long int lval;
 };
 
-struct utf8data;
-
-struct utf8cursor {
-	const struct utf8data *data;
-	const char *s;
-	const char *p;
-	const char *ss;
-	const char *sp;
-	unsigned int len;
-	unsigned int slen;
-	short int ccc;
-	short int nccc;
-	unsigned char hangul[12];
-};
-
-struct utf8data {
-	unsigned int maxage;
-	unsigned int offset;
-};
-
 typedef const unsigned char utf8trie_t;
 
 typedef const unsigned char utf8leaf_t;
 
-typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
-
-struct debugfs_fsdata {
-	const struct file_operations *real_fops;
-	refcount_t active_users;
-	struct completion active_users_drained;
-};
-
-struct debugfs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
 enum {
-	Opt_uid___4 = 0,
-	Opt_gid___5 = 1,
-	Opt_mode___5 = 2,
-	Opt_err___3 = 3,
-};
-
-struct debugfs_fs_info {
-	struct debugfs_mount_opts mount_opts;
-};
-
-struct debugfs_blob_wrapper {
-	void *data;
-	long unsigned int size;
-};
-
-struct debugfs_reg32 {
-	char *name;
-	long unsigned int offset;
-};
-
-struct debugfs_regset32 {
-	const struct debugfs_reg32 *regs;
-	int nregs;
-	void *base;
-	struct device *dev;
-};
-
-struct debugfs_u32_array {
-	u32 *array;
-	u32 n_elements;
-};
-
-struct debugfs_devm_entry {
-	int (*read)(struct seq_file *, void *);
-	struct device *dev;
+	Opt_err___4 = 0,
+	Opt_fd = 1,
+	Opt_uid___5 = 2,
+	Opt_gid___6 = 3,
+	Opt_pgrp = 4,
+	Opt_minproto = 5,
+	Opt_maxproto = 6,
+	Opt_indirect = 7,
+	Opt_direct = 8,
+	Opt_offset = 9,
+	Opt_strictexpire = 10,
+	Opt_ignore = 11,
 };
 
 struct tracefs_dir_ops {
@@ -45439,186 +111350,13 @@
 	kuid_t uid;
 	kgid_t gid;
 	umode_t mode;
+	unsigned int opts;
 };
 
 struct tracefs_fs_info {
 	struct tracefs_mount_opts mount_opts;
 };
 
-enum pstore_type_id {
-	PSTORE_TYPE_DMESG = 0,
-	PSTORE_TYPE_MCE = 1,
-	PSTORE_TYPE_CONSOLE = 2,
-	PSTORE_TYPE_FTRACE = 3,
-	PSTORE_TYPE_PPC_RTAS = 4,
-	PSTORE_TYPE_PPC_OF = 5,
-	PSTORE_TYPE_PPC_COMMON = 6,
-	PSTORE_TYPE_PMSG = 7,
-	PSTORE_TYPE_PPC_OPAL = 8,
-	PSTORE_TYPE_MAX = 9,
-};
-
-struct pstore_info;
-
-struct pstore_record {
-	struct pstore_info *psi;
-	enum pstore_type_id type;
-	u64 id;
-	struct timespec64 time;
-	char *buf;
-	ssize_t size;
-	ssize_t ecc_notice_size;
-	int count;
-	enum kmsg_dump_reason reason;
-	unsigned int part;
-	bool compressed;
-};
-
-struct pstore_info {
-	struct module *owner;
-	const char *name;
-	struct semaphore buf_lock;
-	char *buf;
-	size_t bufsize;
-	struct mutex read_mutex;
-	int flags;
-	int max_reason;
-	void *data;
-	int (*open)(struct pstore_info *);
-	int (*close)(struct pstore_info *);
-	ssize_t (*read)(struct pstore_record *);
-	int (*write)(struct pstore_record *);
-	int (*write_user)(struct pstore_record *, const char *);
-	int (*erase)(struct pstore_record *);
-};
-
-struct pstore_ftrace_record {
-	long unsigned int ip;
-	long unsigned int parent_ip;
-	u64 ts;
-};
-
-struct pstore_private {
-	struct list_head list;
-	struct dentry *dentry;
-	struct pstore_record *record;
-	size_t total_size;
-};
-
-struct pstore_ftrace_seq_data {
-	const void *ptr;
-	size_t off;
-	size_t size;
-};
-
-enum {
-	Opt_kmsg_bytes = 0,
-	Opt_err___4 = 1,
-};
-
-struct pstore_zbackend {
-	int (*zbufsize)(size_t);
-	const char *name;
-};
-
-typedef s32 compat_key_t;
-
-struct ipc64_perm {
-	__kernel_key_t key;
-	__kernel_uid32_t uid;
-	__kernel_gid32_t gid;
-	__kernel_uid32_t cuid;
-	__kernel_gid32_t cgid;
-	__kernel_mode_t mode;
-	unsigned char __pad1[0];
-	short unsigned int seq;
-	short unsigned int __pad2;
-	__kernel_ulong_t __unused1;
-	__kernel_ulong_t __unused2;
-};
-
-typedef u32 __compat_gid32_t;
-
-struct compat_ipc64_perm {
-	compat_key_t key;
-	__compat_uid32_t uid;
-	__compat_gid32_t gid;
-	__compat_uid32_t cuid;
-	__compat_gid32_t cgid;
-	short unsigned int mode;
-	short unsigned int __pad1;
-	short unsigned int seq;
-	short unsigned int __pad2;
-	compat_ulong_t unused1;
-	compat_ulong_t unused2;
-};
-
-struct compat_ipc_perm {
-	key_t key;
-	__compat_uid_t uid;
-	__compat_gid_t gid;
-	__compat_uid_t cuid;
-	__compat_gid_t cgid;
-	compat_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_perm {
-	__kernel_key_t key;
-	__kernel_uid_t uid;
-	__kernel_gid_t gid;
-	__kernel_uid_t cuid;
-	__kernel_gid_t cgid;
-	__kernel_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_params {
-	key_t key;
-	int flg;
-	union {
-		size_t size;
-		int nsems;
-	} u;
-};
-
-struct ipc_ops {
-	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
-	int (*associate)(struct kern_ipc_perm *, int);
-	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
-};
-
-struct ipc_proc_iface {
-	const char *path;
-	const char *header;
-	int ids;
-	int (*show)(struct seq_file *, void *);
-};
-
-struct ipc_proc_iter {
-	struct ipc_namespace *ns;
-	struct pid_namespace *pid_ns;
-	struct ipc_proc_iface *iface;
-};
-
-struct msg_msgseg;
-
-struct msg_msg {
-	struct list_head m_list;
-	long int m_type;
-	size_t m_ts;
-	struct msg_msgseg *next;
-	void *security;
-};
-
-struct msg_msgseg {
-	struct msg_msgseg *next;
-};
-
-typedef int __kernel_ipc_pid_t;
-
-typedef __kernel_long_t __kernel_old_time_t;
-
 struct msgbuf {
 	__kernel_long_t mtype;
 	char mtext[1];
@@ -45667,25 +111405,6 @@
 	short unsigned int msgseg;
 };
 
-typedef u16 compat_ipc_pid_t;
-
-struct compat_msqid64_ds {
-	struct compat_ipc64_perm msg_perm;
-	compat_ulong_t msg_stime;
-	compat_ulong_t msg_stime_high;
-	compat_ulong_t msg_rtime;
-	compat_ulong_t msg_rtime_high;
-	compat_ulong_t msg_ctime;
-	compat_ulong_t msg_ctime_high;
-	compat_ulong_t msg_cbytes;
-	compat_ulong_t msg_qnum;
-	compat_ulong_t msg_qbytes;
-	compat_pid_t msg_lspid;
-	compat_pid_t msg_lrpid;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
 struct msg_queue {
 	struct kern_ipc_perm q_perm;
 	time64_t q_stime;
@@ -45718,1340 +111437,6 @@
 	size_t msgsz;
 };
 
-struct compat_msqid_ds {
-	struct compat_ipc_perm msg_perm;
-	compat_uptr_t msg_first;
-	compat_uptr_t msg_last;
-	old_time32_t msg_stime;
-	old_time32_t msg_rtime;
-	old_time32_t msg_ctime;
-	compat_ulong_t msg_lcbytes;
-	compat_ulong_t msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	compat_ipc_pid_t msg_lspid;
-	compat_ipc_pid_t msg_lrpid;
-};
-
-struct compat_msgbuf {
-	compat_long_t mtype;
-	char mtext[1];
-};
-
-struct sem;
-
-struct sem_queue;
-
-struct sem_undo;
-
-struct semid_ds {
-	struct ipc_perm sem_perm;
-	__kernel_old_time_t sem_otime;
-	__kernel_old_time_t sem_ctime;
-	struct sem *sem_base;
-	struct sem_queue *sem_pending;
-	struct sem_queue **sem_pending_last;
-	struct sem_undo *undo;
-	short unsigned int sem_nsems;
-};
-
-struct sem {
-	int semval;
-	struct pid *sempid;
-	spinlock_t lock;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	time64_t sem_otime;
-};
-
-struct sem_queue {
-	struct list_head list;
-	struct task_struct *sleeper;
-	struct sem_undo *undo;
-	struct pid *pid;
-	int status;
-	struct sembuf *sops;
-	struct sembuf *blocking;
-	int nsops;
-	bool alter;
-	bool dupsop;
-};
-
-struct sem_undo {
-	struct list_head list_proc;
-	struct callback_head rcu;
-	struct sem_undo_list *ulp;
-	struct list_head list_id;
-	int semid;
-	short int *semadj;
-};
-
-struct semid64_ds {
-	struct ipc64_perm sem_perm;
-	long int sem_otime;
-	long int sem_ctime;
-	long unsigned int sem_nsems;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct seminfo {
-	int semmap;
-	int semmni;
-	int semmns;
-	int semmnu;
-	int semmsl;
-	int semopm;
-	int semume;
-	int semusz;
-	int semvmx;
-	int semaem;
-};
-
-struct sem_undo_list {
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct list_head list_proc;
-};
-
-struct compat_semid64_ds {
-	struct compat_ipc64_perm sem_perm;
-	compat_ulong_t sem_otime;
-	compat_ulong_t sem_otime_high;
-	compat_ulong_t sem_ctime;
-	compat_ulong_t sem_ctime_high;
-	compat_ulong_t sem_nsems;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct sem_array {
-	struct kern_ipc_perm sem_perm;
-	time64_t sem_ctime;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	struct list_head list_id;
-	int sem_nsems;
-	int complex_count;
-	unsigned int use_global_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sem sems[0];
-};
-
-struct compat_semid_ds {
-	struct compat_ipc_perm sem_perm;
-	old_time32_t sem_otime;
-	old_time32_t sem_ctime;
-	compat_uptr_t sem_base;
-	compat_uptr_t sem_pending;
-	compat_uptr_t sem_pending_last;
-	compat_uptr_t undo;
-	short unsigned int sem_nsems;
-};
-
-struct shmid_ds {
-	struct ipc_perm shm_perm;
-	int shm_segsz;
-	__kernel_old_time_t shm_atime;
-	__kernel_old_time_t shm_dtime;
-	__kernel_old_time_t shm_ctime;
-	__kernel_ipc_pid_t shm_cpid;
-	__kernel_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	void *shm_unused2;
-	void *shm_unused3;
-};
-
-struct shmid64_ds {
-	struct ipc64_perm shm_perm;
-	size_t shm_segsz;
-	long int shm_atime;
-	long int shm_dtime;
-	long int shm_ctime;
-	__kernel_pid_t shm_cpid;
-	__kernel_pid_t shm_lpid;
-	long unsigned int shm_nattch;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-};
-
-struct shminfo64 {
-	long unsigned int shmmax;
-	long unsigned int shmmin;
-	long unsigned int shmmni;
-	long unsigned int shmseg;
-	long unsigned int shmall;
-	long unsigned int __unused1;
-	long unsigned int __unused2;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct shminfo {
-	int shmmax;
-	int shmmin;
-	int shmmni;
-	int shmseg;
-	int shmall;
-};
-
-struct shm_info {
-	int used_ids;
-	__kernel_ulong_t shm_tot;
-	__kernel_ulong_t shm_rss;
-	__kernel_ulong_t shm_swp;
-	__kernel_ulong_t swap_attempts;
-	__kernel_ulong_t swap_successes;
-};
-
-struct compat_shmid64_ds {
-	struct compat_ipc64_perm shm_perm;
-	compat_size_t shm_segsz;
-	compat_ulong_t shm_atime;
-	compat_ulong_t shm_atime_high;
-	compat_ulong_t shm_dtime;
-	compat_ulong_t shm_dtime_high;
-	compat_ulong_t shm_ctime;
-	compat_ulong_t shm_ctime_high;
-	compat_pid_t shm_cpid;
-	compat_pid_t shm_lpid;
-	compat_ulong_t shm_nattch;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct shmid_kernel {
-	struct kern_ipc_perm shm_perm;
-	struct file *shm_file;
-	long unsigned int shm_nattch;
-	long unsigned int shm_segsz;
-	time64_t shm_atim;
-	time64_t shm_dtim;
-	time64_t shm_ctim;
-	struct pid *shm_cprid;
-	struct pid *shm_lprid;
-	struct user_struct *mlock_user;
-	struct task_struct *shm_creator;
-	struct list_head shm_clist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct shm_file_data {
-	int id;
-	struct ipc_namespace *ns;
-	struct file *file;
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct compat_shmid_ds {
-	struct compat_ipc_perm shm_perm;
-	int shm_segsz;
-	old_time32_t shm_atime;
-	old_time32_t shm_dtime;
-	old_time32_t shm_ctime;
-	compat_ipc_pid_t shm_cpid;
-	compat_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	compat_uptr_t shm_unused2;
-	compat_uptr_t shm_unused3;
-};
-
-struct compat_shminfo64 {
-	compat_ulong_t shmmax;
-	compat_ulong_t shmmin;
-	compat_ulong_t shmmni;
-	compat_ulong_t shmseg;
-	compat_ulong_t shmall;
-	compat_ulong_t __unused1;
-	compat_ulong_t __unused2;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct compat_shm_info {
-	compat_int_t used_ids;
-	compat_ulong_t shm_tot;
-	compat_ulong_t shm_rss;
-	compat_ulong_t shm_swp;
-	compat_ulong_t swap_attempts;
-	compat_ulong_t swap_successes;
-};
-
-struct mqueue_fs_context {
-	struct ipc_namespace *ipc_ns;
-};
-
-struct posix_msg_tree_node {
-	struct rb_node rb_node;
-	struct list_head msg_list;
-	int priority;
-};
-
-struct ext_wait_queue {
-	struct task_struct *task;
-	struct list_head list;
-	struct msg_msg *msg;
-	int state;
-};
-
-struct mqueue_inode_info {
-	spinlock_t lock;
-	struct inode vfs_inode;
-	wait_queue_head_t wait_q;
-	struct rb_root msg_tree;
-	struct rb_node *msg_tree_rightmost;
-	struct posix_msg_tree_node *node_cache;
-	struct mq_attr attr;
-	struct sigevent notify;
-	struct pid *notify_owner;
-	u32 notify_self_exec_id;
-	struct user_namespace *notify_user_ns;
-	struct user_struct *user;
-	struct sock *notify_sock;
-	struct sk_buff *notify_cookie;
-	struct ext_wait_queue e_wait_q[2];
-	long unsigned int qsize;
-};
-
-struct compat_mq_attr {
-	compat_long_t mq_flags;
-	compat_long_t mq_maxmsg;
-	compat_long_t mq_msgsize;
-	compat_long_t mq_curmsgs;
-	compat_long_t __reserved[4];
-};
-
-struct key_user {
-	struct rb_node node;
-	struct mutex cons_lock;
-	spinlock_t lock;
-	refcount_t usage;
-	atomic_t nkeys;
-	atomic_t nikeys;
-	kuid_t uid;
-	int qnkeys;
-	int qnbytes;
-};
-
-enum key_notification_subtype {
-	NOTIFY_KEY_INSTANTIATED = 0,
-	NOTIFY_KEY_UPDATED = 1,
-	NOTIFY_KEY_LINKED = 2,
-	NOTIFY_KEY_UNLINKED = 3,
-	NOTIFY_KEY_CLEARED = 4,
-	NOTIFY_KEY_REVOKED = 5,
-	NOTIFY_KEY_INVALIDATED = 6,
-	NOTIFY_KEY_SETATTR = 7,
-};
-
-struct key_notification {
-	struct watch_notification watch;
-	__u32 key_id;
-	__u32 aux;
-};
-
-struct assoc_array_edit;
-
-struct assoc_array_ops {
-	long unsigned int (*get_key_chunk)(const void *, int);
-	long unsigned int (*get_object_key_chunk)(const void *, int);
-	bool (*compare_object)(const void *, const void *);
-	int (*diff_objects)(const void *, const void *);
-	void (*free_object)(void *);
-};
-
-struct assoc_array_node {
-	struct assoc_array_ptr *back_pointer;
-	u8 parent_slot;
-	struct assoc_array_ptr *slots[16];
-	long unsigned int nr_leaves_on_branch;
-};
-
-struct assoc_array_shortcut {
-	struct assoc_array_ptr *back_pointer;
-	int parent_slot;
-	int skip_to_level;
-	struct assoc_array_ptr *next_node;
-	long unsigned int index_key[0];
-};
-
-struct assoc_array_edit___2 {
-	struct callback_head rcu;
-	struct assoc_array *array;
-	const struct assoc_array_ops *ops;
-	const struct assoc_array_ops *ops_for_excised_subtree;
-	struct assoc_array_ptr *leaf;
-	struct assoc_array_ptr **leaf_p;
-	struct assoc_array_ptr *dead_leaf;
-	struct assoc_array_ptr *new_meta[3];
-	struct assoc_array_ptr *excised_meta[1];
-	struct assoc_array_ptr *excised_subtree;
-	struct assoc_array_ptr **set_backpointers[16];
-	struct assoc_array_ptr *set_backpointers_to;
-	struct assoc_array_node *adjust_count_on;
-	long int adjust_count_by;
-	struct {
-		struct assoc_array_ptr **ptr;
-		struct assoc_array_ptr *to;
-	} set[2];
-	struct {
-		u8 *p;
-		u8 to;
-	} set_parent_slot[1];
-	u8 segment_cache[17];
-};
-
-struct keyring_search_context {
-	struct keyring_index_key index_key;
-	const struct cred *cred;
-	struct key_match_data match_data;
-	unsigned int flags;
-	int (*iterator)(const void *, void *);
-	int skipped_ret;
-	bool possessed;
-	key_ref_t result;
-	time64_t now;
-};
-
-struct keyring_read_iterator_context {
-	size_t buflen;
-	size_t count;
-	key_serial_t *buffer;
-};
-
-struct keyctl_dh_params {
-	union {
-		__s32 private;
-		__s32 priv;
-	};
-	__s32 prime;
-	__s32 base;
-};
-
-struct keyctl_kdf_params {
-	char *hashname;
-	char *otherinfo;
-	__u32 otherinfolen;
-	__u32 __spare[8];
-};
-
-struct keyctl_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-	__u32 __spare[10];
-};
-
-struct keyctl_pkey_params {
-	__s32 key_id;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	__u32 __spare[7];
-};
-
-struct request_key_auth {
-	struct callback_head rcu;
-	struct key *target_key;
-	struct key *dest_keyring;
-	const struct cred *cred;
-	void *callout_info;
-	size_t callout_len;
-	pid_t pid;
-	char op[8];
-};
-
-enum {
-	Opt_err___5 = 0,
-	Opt_enc = 1,
-	Opt_hash = 2,
-};
-
-enum hash_algo {
-	HASH_ALGO_MD4 = 0,
-	HASH_ALGO_MD5 = 1,
-	HASH_ALGO_SHA1 = 2,
-	HASH_ALGO_RIPE_MD_160 = 3,
-	HASH_ALGO_SHA256 = 4,
-	HASH_ALGO_SHA384 = 5,
-	HASH_ALGO_SHA512 = 6,
-	HASH_ALGO_SHA224 = 7,
-	HASH_ALGO_RIPE_MD_128 = 8,
-	HASH_ALGO_RIPE_MD_256 = 9,
-	HASH_ALGO_RIPE_MD_320 = 10,
-	HASH_ALGO_WP_256 = 11,
-	HASH_ALGO_WP_384 = 12,
-	HASH_ALGO_WP_512 = 13,
-	HASH_ALGO_TGR_128 = 14,
-	HASH_ALGO_TGR_160 = 15,
-	HASH_ALGO_TGR_192 = 16,
-	HASH_ALGO_SM3_256 = 17,
-	HASH_ALGO_STREEBOG_256 = 18,
-	HASH_ALGO_STREEBOG_512 = 19,
-	HASH_ALGO__LAST = 20,
-};
-
-enum tpm_duration {
-	TPM_SHORT = 0,
-	TPM_MEDIUM = 1,
-	TPM_LONG = 2,
-	TPM_LONG_LONG = 3,
-	TPM_UNDEFINED = 4,
-	TPM_NUM_DURATIONS = 4,
-};
-
-struct encrypted_key_payload {
-	struct callback_head rcu;
-	char *format;
-	char *master_desc;
-	char *datalen;
-	u8 *iv;
-	u8 *encrypted_data;
-	short unsigned int datablob_len;
-	short unsigned int decrypted_datalen;
-	short unsigned int payload_datalen;
-	short unsigned int encrypted_key_format;
-	u8 *decrypted_data;
-	u8 payload_data[0];
-};
-
-struct ecryptfs_session_key {
-	u32 flags;
-	u32 encrypted_key_size;
-	u32 decrypted_key_size;
-	u8 encrypted_key[512];
-	u8 decrypted_key[64];
-};
-
-struct ecryptfs_password {
-	u32 password_bytes;
-	s32 hash_algo;
-	u32 hash_iterations;
-	u32 session_key_encryption_key_bytes;
-	u32 flags;
-	u8 session_key_encryption_key[64];
-	u8 signature[17];
-	u8 salt[8];
-};
-
-struct ecryptfs_private_key {
-	u32 key_size;
-	u32 data_len;
-	u8 signature[17];
-	char pki_type[17];
-	u8 data[0];
-};
-
-struct ecryptfs_auth_tok {
-	u16 version;
-	u16 token_type;
-	u32 flags;
-	struct ecryptfs_session_key session_key;
-	u8 reserved[32];
-	union {
-		struct ecryptfs_password password;
-		struct ecryptfs_private_key private_key;
-	} token;
-};
-
-enum {
-	Opt_new = 0,
-	Opt_load = 1,
-	Opt_update = 2,
-	Opt_err___6 = 3,
-};
-
-enum {
-	Opt_default = 0,
-	Opt_ecryptfs = 1,
-	Opt_enc32 = 2,
-	Opt_error = 3,
-};
-
-enum derived_key_type {
-	ENC_KEY = 0,
-	AUTH_KEY = 1,
-};
-
-enum ecryptfs_token_types {
-	ECRYPTFS_PASSWORD = 0,
-	ECRYPTFS_PRIVATE_KEY = 1,
-};
-
-struct vfs_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-};
-
-struct vfs_ns_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-	__le32 rootid;
-};
-
-struct sctp_endpoint;
-
-union security_list_options {
-	int (*binder_set_context_mgr)(struct task_struct *);
-	int (*binder_transaction)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_binder)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);
-	int (*ptrace_access_check)(struct task_struct *, unsigned int);
-	int (*ptrace_traceme)(struct task_struct *);
-	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
-	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
-	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
-	int (*quotactl)(int, int, int, struct super_block *);
-	int (*quota_on)(struct dentry *);
-	int (*syslog)(int);
-	int (*settime)(const struct timespec64 *, const struct timezone *);
-	int (*vm_enough_memory)(struct mm_struct *, long int);
-	int (*bprm_creds_for_exec)(struct linux_binprm *);
-	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
-	int (*bprm_check_security)(struct linux_binprm *);
-	void (*bprm_committing_creds)(struct linux_binprm *);
-	void (*bprm_committed_creds)(struct linux_binprm *);
-	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
-	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*sb_alloc_security)(struct super_block *);
-	void (*sb_free_security)(struct super_block *);
-	void (*sb_free_mnt_opts)(void *);
-	int (*sb_eat_lsm_opts)(char *, void **);
-	int (*sb_remount)(struct super_block *, void *);
-	int (*sb_kern_mount)(struct super_block *);
-	int (*sb_show_options)(struct seq_file *, struct super_block *);
-	int (*sb_statfs)(struct dentry *);
-	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
-	int (*sb_umount)(struct vfsmount *, int);
-	int (*sb_pivotroot)(const struct path *, const struct path *);
-	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
-	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
-	int (*sb_add_mnt_opt)(const char *, const char *, int, void **);
-	int (*move_mount)(const struct path *, const struct path *);
-	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);
-	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
-	int (*path_unlink)(const struct path *, struct dentry *);
-	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
-	int (*path_rmdir)(const struct path *, struct dentry *);
-	int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
-	int (*path_truncate)(const struct path *);
-	int (*path_symlink)(const struct path *, struct dentry *, const char *);
-	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
-	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *);
-	int (*path_chmod)(const struct path *, umode_t);
-	int (*path_chown)(const struct path *, kuid_t, kgid_t);
-	int (*path_chroot)(const struct path *);
-	int (*path_notify)(const struct path *, u64, unsigned int);
-	int (*inode_alloc_security)(struct inode *);
-	void (*inode_free_security)(struct inode *);
-	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
-	int (*inode_create)(struct inode *, struct dentry *, umode_t);
-	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
-	int (*inode_unlink)(struct inode *, struct dentry *);
-	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
-	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
-	int (*inode_rmdir)(struct inode *, struct dentry *);
-	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
-	int (*inode_readlink)(struct dentry *);
-	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
-	int (*inode_permission)(struct inode *, int);
-	int (*inode_setattr)(struct dentry *, struct iattr *);
-	int (*inode_getattr)(const struct path *);
-	int (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	int (*inode_getxattr)(struct dentry *, const char *);
-	int (*inode_listxattr)(struct dentry *);
-	int (*inode_removexattr)(struct dentry *, const char *);
-	int (*inode_need_killpriv)(struct dentry *);
-	int (*inode_killpriv)(struct dentry *);
-	int (*inode_getsecurity)(struct inode *, const char *, void **, bool);
-	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
-	int (*inode_listsecurity)(struct inode *, char *, size_t);
-	void (*inode_getsecid)(struct inode *, u32 *);
-	int (*inode_copy_up)(struct dentry *, struct cred **);
-	int (*inode_copy_up_xattr)(const char *);
-	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
-	int (*file_permission)(struct file *, int);
-	int (*file_alloc_security)(struct file *);
-	void (*file_free_security)(struct file *);
-	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap_addr)(long unsigned int);
-	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
-	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
-	int (*file_lock)(struct file *, unsigned int);
-	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
-	void (*file_set_fowner)(struct file *);
-	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
-	int (*file_receive)(struct file *);
-	int (*file_open)(struct file *);
-	int (*task_alloc)(struct task_struct *, long unsigned int);
-	void (*task_free)(struct task_struct *);
-	int (*cred_alloc_blank)(struct cred *, gfp_t);
-	void (*cred_free)(struct cred *);
-	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
-	void (*cred_transfer)(struct cred *, const struct cred *);
-	void (*cred_getsecid)(const struct cred *, u32 *);
-	int (*kernel_act_as)(struct cred *, u32);
-	int (*kernel_create_files_as)(struct cred *, struct inode *);
-	int (*kernel_module_request)(char *);
-	int (*kernel_load_data)(enum kernel_load_data_id, bool);
-	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
-	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
-	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
-	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
-	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
-	int (*task_setpgid)(struct task_struct *, pid_t);
-	int (*task_getpgid)(struct task_struct *);
-	int (*task_getsid)(struct task_struct *);
-	void (*task_getsecid)(struct task_struct *, u32 *);
-	int (*task_setnice)(struct task_struct *, int);
-	int (*task_setioprio)(struct task_struct *, int);
-	int (*task_getioprio)(struct task_struct *);
-	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
-	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
-	int (*task_setscheduler)(struct task_struct *);
-	int (*task_getscheduler)(struct task_struct *);
-	int (*task_movememory)(struct task_struct *);
-	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
-	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	void (*task_to_inode)(struct task_struct *, struct inode *);
-	int (*ipc_permission)(struct kern_ipc_perm *, short int);
-	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
-	int (*msg_msg_alloc_security)(struct msg_msg *);
-	void (*msg_msg_free_security)(struct msg_msg *);
-	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
-	void (*msg_queue_free_security)(struct kern_ipc_perm *);
-	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
-	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
-	int (*shm_alloc_security)(struct kern_ipc_perm *);
-	void (*shm_free_security)(struct kern_ipc_perm *);
-	int (*shm_associate)(struct kern_ipc_perm *, int);
-	int (*shm_shmctl)(struct kern_ipc_perm *, int);
-	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
-	int (*sem_alloc_security)(struct kern_ipc_perm *);
-	void (*sem_free_security)(struct kern_ipc_perm *);
-	int (*sem_associate)(struct kern_ipc_perm *, int);
-	int (*sem_semctl)(struct kern_ipc_perm *, int);
-	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
-	int (*netlink_send)(struct sock *, struct sk_buff *);
-	void (*d_instantiate)(struct dentry *, struct inode *);
-	int (*getprocattr)(struct task_struct *, char *, char **);
-	int (*setprocattr)(const char *, void *, size_t);
-	int (*ismaclabel)(const char *);
-	int (*secid_to_secctx)(u32, char **, u32 *);
-	int (*secctx_to_secid)(const char *, u32, u32 *);
-	void (*release_secctx)(char *, u32);
-	void (*inode_invalidate_secctx)(struct inode *);
-	int (*inode_notifysecctx)(struct inode *, void *, u32);
-	int (*inode_setsecctx)(struct dentry *, void *, u32);
-	int (*inode_getsecctx)(struct inode *, void **, u32 *);
-	int (*post_notification)(const struct cred *, const struct cred *, struct watch_notification *);
-	int (*watch_key)(struct key *);
-	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
-	int (*unix_may_send)(struct socket *, struct socket *);
-	int (*socket_create)(int, int, int, int);
-	int (*socket_post_create)(struct socket *, int, int, int, int);
-	int (*socket_socketpair)(struct socket *, struct socket *);
-	int (*socket_bind)(struct socket *, struct sockaddr *, int);
-	int (*socket_connect)(struct socket *, struct sockaddr *, int);
-	int (*socket_listen)(struct socket *, int);
-	int (*socket_accept)(struct socket *, struct socket *);
-	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
-	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
-	int (*socket_getsockname)(struct socket *);
-	int (*socket_getpeername)(struct socket *);
-	int (*socket_getsockopt)(struct socket *, int, int);
-	int (*socket_setsockopt)(struct socket *, int, int);
-	int (*socket_shutdown)(struct socket *, int);
-	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
-	int (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);
-	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
-	int (*sk_alloc_security)(struct sock *, int, gfp_t);
-	void (*sk_free_security)(struct sock *);
-	void (*sk_clone_security)(const struct sock *, struct sock *);
-	void (*sk_getsecid)(struct sock *, u32 *);
-	void (*sock_graft)(struct sock *, struct socket *);
-	int (*inet_conn_request)(struct sock *, struct sk_buff *, struct request_sock *);
-	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
-	void (*inet_conn_established)(struct sock *, struct sk_buff *);
-	int (*secmark_relabel_packet)(u32);
-	void (*secmark_refcount_inc)();
-	void (*secmark_refcount_dec)();
-	void (*req_classify_flow)(const struct request_sock *, struct flowi *);
-	int (*tun_dev_alloc_security)(void **);
-	void (*tun_dev_free_security)(void *);
-	int (*tun_dev_create)();
-	int (*tun_dev_attach_queue)(void *);
-	int (*tun_dev_attach)(struct sock *, void *);
-	int (*tun_dev_open)(void *);
-	int (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);
-	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
-	void (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);
-	int (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);
-	int (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);
-	void (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_policy_delete_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_state_alloc)(struct xfrm_state *, struct xfrm_user_sec_ctx *);
-	int (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);
-	void (*xfrm_state_free_security)(struct xfrm_state *);
-	int (*xfrm_state_delete_security)(struct xfrm_state *);
-	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32, u8);
-	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi *);
-	int (*xfrm_decode_session)(struct sk_buff *, u32 *, int);
-	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
-	void (*key_free)(struct key *);
-	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
-	int (*key_getsecurity)(struct key *, char **);
-	int (*audit_rule_init)(u32, u32, char *, void **);
-	int (*audit_rule_known)(struct audit_krule *);
-	int (*audit_rule_match)(u32, u32, u32, void *);
-	void (*audit_rule_free)(void *);
-	int (*bpf)(int, union bpf_attr *, unsigned int);
-	int (*bpf_map)(struct bpf_map *, fmode_t);
-	int (*bpf_prog)(struct bpf_prog *);
-	int (*bpf_map_alloc_security)(struct bpf_map *);
-	void (*bpf_map_free_security)(struct bpf_map *);
-	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
-	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
-	int (*locked_down)(enum lockdown_reason);
-	int (*perf_event_open)(struct perf_event_attr *, int);
-	int (*perf_event_alloc)(struct perf_event *);
-	void (*perf_event_free)(struct perf_event *);
-	int (*perf_event_read)(struct perf_event *);
-	int (*perf_event_write)(struct perf_event *);
-};
-
-struct security_hook_heads {
-	struct hlist_head binder_set_context_mgr;
-	struct hlist_head binder_transaction;
-	struct hlist_head binder_transfer_binder;
-	struct hlist_head binder_transfer_file;
-	struct hlist_head ptrace_access_check;
-	struct hlist_head ptrace_traceme;
-	struct hlist_head capget;
-	struct hlist_head capset;
-	struct hlist_head capable;
-	struct hlist_head quotactl;
-	struct hlist_head quota_on;
-	struct hlist_head syslog;
-	struct hlist_head settime;
-	struct hlist_head vm_enough_memory;
-	struct hlist_head bprm_creds_for_exec;
-	struct hlist_head bprm_creds_from_file;
-	struct hlist_head bprm_check_security;
-	struct hlist_head bprm_committing_creds;
-	struct hlist_head bprm_committed_creds;
-	struct hlist_head fs_context_dup;
-	struct hlist_head fs_context_parse_param;
-	struct hlist_head sb_alloc_security;
-	struct hlist_head sb_free_security;
-	struct hlist_head sb_free_mnt_opts;
-	struct hlist_head sb_eat_lsm_opts;
-	struct hlist_head sb_remount;
-	struct hlist_head sb_kern_mount;
-	struct hlist_head sb_show_options;
-	struct hlist_head sb_statfs;
-	struct hlist_head sb_mount;
-	struct hlist_head sb_umount;
-	struct hlist_head sb_pivotroot;
-	struct hlist_head sb_set_mnt_opts;
-	struct hlist_head sb_clone_mnt_opts;
-	struct hlist_head sb_add_mnt_opt;
-	struct hlist_head move_mount;
-	struct hlist_head dentry_init_security;
-	struct hlist_head dentry_create_files_as;
-	struct hlist_head path_unlink;
-	struct hlist_head path_mkdir;
-	struct hlist_head path_rmdir;
-	struct hlist_head path_mknod;
-	struct hlist_head path_truncate;
-	struct hlist_head path_symlink;
-	struct hlist_head path_link;
-	struct hlist_head path_rename;
-	struct hlist_head path_chmod;
-	struct hlist_head path_chown;
-	struct hlist_head path_chroot;
-	struct hlist_head path_notify;
-	struct hlist_head inode_alloc_security;
-	struct hlist_head inode_free_security;
-	struct hlist_head inode_init_security;
-	struct hlist_head inode_create;
-	struct hlist_head inode_link;
-	struct hlist_head inode_unlink;
-	struct hlist_head inode_symlink;
-	struct hlist_head inode_mkdir;
-	struct hlist_head inode_rmdir;
-	struct hlist_head inode_mknod;
-	struct hlist_head inode_rename;
-	struct hlist_head inode_readlink;
-	struct hlist_head inode_follow_link;
-	struct hlist_head inode_permission;
-	struct hlist_head inode_setattr;
-	struct hlist_head inode_getattr;
-	struct hlist_head inode_setxattr;
-	struct hlist_head inode_post_setxattr;
-	struct hlist_head inode_getxattr;
-	struct hlist_head inode_listxattr;
-	struct hlist_head inode_removexattr;
-	struct hlist_head inode_need_killpriv;
-	struct hlist_head inode_killpriv;
-	struct hlist_head inode_getsecurity;
-	struct hlist_head inode_setsecurity;
-	struct hlist_head inode_listsecurity;
-	struct hlist_head inode_getsecid;
-	struct hlist_head inode_copy_up;
-	struct hlist_head inode_copy_up_xattr;
-	struct hlist_head kernfs_init_security;
-	struct hlist_head file_permission;
-	struct hlist_head file_alloc_security;
-	struct hlist_head file_free_security;
-	struct hlist_head file_ioctl;
-	struct hlist_head mmap_addr;
-	struct hlist_head mmap_file;
-	struct hlist_head file_mprotect;
-	struct hlist_head file_lock;
-	struct hlist_head file_fcntl;
-	struct hlist_head file_set_fowner;
-	struct hlist_head file_send_sigiotask;
-	struct hlist_head file_receive;
-	struct hlist_head file_open;
-	struct hlist_head task_alloc;
-	struct hlist_head task_free;
-	struct hlist_head cred_alloc_blank;
-	struct hlist_head cred_free;
-	struct hlist_head cred_prepare;
-	struct hlist_head cred_transfer;
-	struct hlist_head cred_getsecid;
-	struct hlist_head kernel_act_as;
-	struct hlist_head kernel_create_files_as;
-	struct hlist_head kernel_module_request;
-	struct hlist_head kernel_load_data;
-	struct hlist_head kernel_post_load_data;
-	struct hlist_head kernel_read_file;
-	struct hlist_head kernel_post_read_file;
-	struct hlist_head task_fix_setuid;
-	struct hlist_head task_fix_setgid;
-	struct hlist_head task_setpgid;
-	struct hlist_head task_getpgid;
-	struct hlist_head task_getsid;
-	struct hlist_head task_getsecid;
-	struct hlist_head task_setnice;
-	struct hlist_head task_setioprio;
-	struct hlist_head task_getioprio;
-	struct hlist_head task_prlimit;
-	struct hlist_head task_setrlimit;
-	struct hlist_head task_setscheduler;
-	struct hlist_head task_getscheduler;
-	struct hlist_head task_movememory;
-	struct hlist_head task_kill;
-	struct hlist_head task_prctl;
-	struct hlist_head task_to_inode;
-	struct hlist_head ipc_permission;
-	struct hlist_head ipc_getsecid;
-	struct hlist_head msg_msg_alloc_security;
-	struct hlist_head msg_msg_free_security;
-	struct hlist_head msg_queue_alloc_security;
-	struct hlist_head msg_queue_free_security;
-	struct hlist_head msg_queue_associate;
-	struct hlist_head msg_queue_msgctl;
-	struct hlist_head msg_queue_msgsnd;
-	struct hlist_head msg_queue_msgrcv;
-	struct hlist_head shm_alloc_security;
-	struct hlist_head shm_free_security;
-	struct hlist_head shm_associate;
-	struct hlist_head shm_shmctl;
-	struct hlist_head shm_shmat;
-	struct hlist_head sem_alloc_security;
-	struct hlist_head sem_free_security;
-	struct hlist_head sem_associate;
-	struct hlist_head sem_semctl;
-	struct hlist_head sem_semop;
-	struct hlist_head netlink_send;
-	struct hlist_head d_instantiate;
-	struct hlist_head getprocattr;
-	struct hlist_head setprocattr;
-	struct hlist_head ismaclabel;
-	struct hlist_head secid_to_secctx;
-	struct hlist_head secctx_to_secid;
-	struct hlist_head release_secctx;
-	struct hlist_head inode_invalidate_secctx;
-	struct hlist_head inode_notifysecctx;
-	struct hlist_head inode_setsecctx;
-	struct hlist_head inode_getsecctx;
-	struct hlist_head post_notification;
-	struct hlist_head watch_key;
-	struct hlist_head unix_stream_connect;
-	struct hlist_head unix_may_send;
-	struct hlist_head socket_create;
-	struct hlist_head socket_post_create;
-	struct hlist_head socket_socketpair;
-	struct hlist_head socket_bind;
-	struct hlist_head socket_connect;
-	struct hlist_head socket_listen;
-	struct hlist_head socket_accept;
-	struct hlist_head socket_sendmsg;
-	struct hlist_head socket_recvmsg;
-	struct hlist_head socket_getsockname;
-	struct hlist_head socket_getpeername;
-	struct hlist_head socket_getsockopt;
-	struct hlist_head socket_setsockopt;
-	struct hlist_head socket_shutdown;
-	struct hlist_head socket_sock_rcv_skb;
-	struct hlist_head socket_getpeersec_stream;
-	struct hlist_head socket_getpeersec_dgram;
-	struct hlist_head sk_alloc_security;
-	struct hlist_head sk_free_security;
-	struct hlist_head sk_clone_security;
-	struct hlist_head sk_getsecid;
-	struct hlist_head sock_graft;
-	struct hlist_head inet_conn_request;
-	struct hlist_head inet_csk_clone;
-	struct hlist_head inet_conn_established;
-	struct hlist_head secmark_relabel_packet;
-	struct hlist_head secmark_refcount_inc;
-	struct hlist_head secmark_refcount_dec;
-	struct hlist_head req_classify_flow;
-	struct hlist_head tun_dev_alloc_security;
-	struct hlist_head tun_dev_free_security;
-	struct hlist_head tun_dev_create;
-	struct hlist_head tun_dev_attach_queue;
-	struct hlist_head tun_dev_attach;
-	struct hlist_head tun_dev_open;
-	struct hlist_head sctp_assoc_request;
-	struct hlist_head sctp_bind_connect;
-	struct hlist_head sctp_sk_clone;
-	struct hlist_head xfrm_policy_alloc_security;
-	struct hlist_head xfrm_policy_clone_security;
-	struct hlist_head xfrm_policy_free_security;
-	struct hlist_head xfrm_policy_delete_security;
-	struct hlist_head xfrm_state_alloc;
-	struct hlist_head xfrm_state_alloc_acquire;
-	struct hlist_head xfrm_state_free_security;
-	struct hlist_head xfrm_state_delete_security;
-	struct hlist_head xfrm_policy_lookup;
-	struct hlist_head xfrm_state_pol_flow_match;
-	struct hlist_head xfrm_decode_session;
-	struct hlist_head key_alloc;
-	struct hlist_head key_free;
-	struct hlist_head key_permission;
-	struct hlist_head key_getsecurity;
-	struct hlist_head audit_rule_init;
-	struct hlist_head audit_rule_known;
-	struct hlist_head audit_rule_match;
-	struct hlist_head audit_rule_free;
-	struct hlist_head bpf;
-	struct hlist_head bpf_map;
-	struct hlist_head bpf_prog;
-	struct hlist_head bpf_map_alloc_security;
-	struct hlist_head bpf_map_free_security;
-	struct hlist_head bpf_prog_alloc_security;
-	struct hlist_head bpf_prog_free_security;
-	struct hlist_head locked_down;
-	struct hlist_head perf_event_open;
-	struct hlist_head perf_event_alloc;
-	struct hlist_head perf_event_free;
-	struct hlist_head perf_event_read;
-	struct hlist_head perf_event_write;
-};
-
-struct security_hook_list {
-	struct hlist_node list;
-	struct hlist_head *head;
-	union security_list_options hook;
-	char *lsm;
-};
-
-enum lsm_order {
-	LSM_ORDER_FIRST = 4294967295,
-	LSM_ORDER_MUTABLE = 0,
-};
-
-struct lsm_info {
-	const char *name;
-	enum lsm_order order;
-	long unsigned int flags;
-	int *enabled;
-	int (*init)();
-	struct lsm_blob_sizes *blobs;
-};
-
-enum lsm_event {
-	LSM_POLICY_CHANGE = 0,
-};
-
-typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
-
-enum ib_uverbs_write_cmds {
-	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
-	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
-	IB_USER_VERBS_CMD_QUERY_PORT = 2,
-	IB_USER_VERBS_CMD_ALLOC_PD = 3,
-	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
-	IB_USER_VERBS_CMD_CREATE_AH = 5,
-	IB_USER_VERBS_CMD_MODIFY_AH = 6,
-	IB_USER_VERBS_CMD_QUERY_AH = 7,
-	IB_USER_VERBS_CMD_DESTROY_AH = 8,
-	IB_USER_VERBS_CMD_REG_MR = 9,
-	IB_USER_VERBS_CMD_REG_SMR = 10,
-	IB_USER_VERBS_CMD_REREG_MR = 11,
-	IB_USER_VERBS_CMD_QUERY_MR = 12,
-	IB_USER_VERBS_CMD_DEREG_MR = 13,
-	IB_USER_VERBS_CMD_ALLOC_MW = 14,
-	IB_USER_VERBS_CMD_BIND_MW = 15,
-	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
-	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
-	IB_USER_VERBS_CMD_CREATE_CQ = 18,
-	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
-	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
-	IB_USER_VERBS_CMD_POLL_CQ = 21,
-	IB_USER_VERBS_CMD_PEEK_CQ = 22,
-	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
-	IB_USER_VERBS_CMD_CREATE_QP = 24,
-	IB_USER_VERBS_CMD_QUERY_QP = 25,
-	IB_USER_VERBS_CMD_MODIFY_QP = 26,
-	IB_USER_VERBS_CMD_DESTROY_QP = 27,
-	IB_USER_VERBS_CMD_POST_SEND = 28,
-	IB_USER_VERBS_CMD_POST_RECV = 29,
-	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
-	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
-	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
-	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
-	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
-	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
-	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
-	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
-	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
-	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
-	IB_USER_VERBS_CMD_OPEN_QP = 40,
-};
-
-enum ib_uverbs_wc_opcode {
-	IB_UVERBS_WC_SEND = 0,
-	IB_UVERBS_WC_RDMA_WRITE = 1,
-	IB_UVERBS_WC_RDMA_READ = 2,
-	IB_UVERBS_WC_COMP_SWAP = 3,
-	IB_UVERBS_WC_FETCH_ADD = 4,
-	IB_UVERBS_WC_BIND_MW = 5,
-	IB_UVERBS_WC_LOCAL_INV = 6,
-	IB_UVERBS_WC_TSO = 7,
-};
-
-enum ib_uverbs_create_qp_mask {
-	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
-};
-
-enum ib_uverbs_wr_opcode {
-	IB_UVERBS_WR_RDMA_WRITE = 0,
-	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
-	IB_UVERBS_WR_SEND = 2,
-	IB_UVERBS_WR_SEND_WITH_IMM = 3,
-	IB_UVERBS_WR_RDMA_READ = 4,
-	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
-	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
-	IB_UVERBS_WR_LOCAL_INV = 7,
-	IB_UVERBS_WR_BIND_MW = 8,
-	IB_UVERBS_WR_SEND_WITH_INV = 9,
-	IB_UVERBS_WR_TSO = 10,
-	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
-	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
-	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
-};
-
-enum ib_uverbs_access_flags {
-	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
-	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
-	IB_UVERBS_ACCESS_REMOTE_READ = 4,
-	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
-	IB_UVERBS_ACCESS_MW_BIND = 16,
-	IB_UVERBS_ACCESS_ZERO_BASED = 32,
-	IB_UVERBS_ACCESS_ON_DEMAND = 64,
-	IB_UVERBS_ACCESS_HUGETLB = 128,
-	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
-	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
-};
-
-enum ib_uverbs_srq_type {
-	IB_UVERBS_SRQT_BASIC = 0,
-	IB_UVERBS_SRQT_XRC = 1,
-	IB_UVERBS_SRQT_TM = 2,
-};
-
-enum ib_uverbs_wq_type {
-	IB_UVERBS_WQT_RQ = 0,
-};
-
-enum ib_uverbs_wq_flags {
-	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
-	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
-	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
-	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
-};
-
-enum ib_uverbs_qp_type {
-	IB_UVERBS_QPT_RC = 2,
-	IB_UVERBS_QPT_UC = 3,
-	IB_UVERBS_QPT_UD = 4,
-	IB_UVERBS_QPT_RAW_PACKET = 8,
-	IB_UVERBS_QPT_XRC_INI = 9,
-	IB_UVERBS_QPT_XRC_TGT = 10,
-	IB_UVERBS_QPT_DRIVER = 255,
-};
-
-enum ib_uverbs_qp_create_flags {
-	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
-	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
-	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
-	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
-	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
-};
-
-enum ib_uverbs_gid_type {
-	IB_UVERBS_GID_TYPE_IB = 0,
-	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
-	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
-};
-
-enum ib_poll_context {
-	IB_POLL_SOFTIRQ = 0,
-	IB_POLL_WORKQUEUE = 1,
-	IB_POLL_UNBOUND_WORKQUEUE = 2,
-	IB_POLL_LAST_POOL_TYPE = 2,
-	IB_POLL_DIRECT = 3,
-};
-
-struct lsm_network_audit {
-	int netif;
-	struct sock *sk;
-	u16 family;
-	__be16 dport;
-	__be16 sport;
-	union {
-		struct {
-			__be32 daddr;
-			__be32 saddr;
-		} v4;
-		struct {
-			struct in6_addr daddr;
-			struct in6_addr saddr;
-		} v6;
-	} fam;
-};
-
-struct lsm_ioctlop_audit {
-	struct path path;
-	u16 cmd;
-};
-
-struct lsm_ibpkey_audit {
-	u64 subnet_prefix;
-	u16 pkey;
-};
-
-struct lsm_ibendport_audit {
-	char dev_name[64];
-	u8 port;
-};
-
-struct selinux_state;
-
-struct selinux_audit_data {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	u32 requested;
-	u32 audited;
-	u32 denied;
-	int result;
-	struct selinux_state *state;
-};
-
-struct smack_audit_data;
-
-struct apparmor_audit_data;
-
-struct common_audit_data {
-	char type;
-	union {
-		struct path path;
-		struct dentry *dentry;
-		struct inode *inode;
-		struct lsm_network_audit *net;
-		int cap;
-		int ipc_id;
-		struct task_struct *tsk;
-		struct {
-			key_serial_t key;
-			char *key_desc;
-		} key_struct;
-		char *kmod_name;
-		struct lsm_ioctlop_audit *op;
-		struct file *file;
-		struct lsm_ibpkey_audit *ibpkey;
-		struct lsm_ibendport_audit *ibendport;
-		int reason;
-	} u;
-	union {
-		struct smack_audit_data *smack_audit_data;
-		struct selinux_audit_data *selinux_audit_data;
-		struct apparmor_audit_data *apparmor_audit_data;
-	};
-};
-
-enum {
-	POLICYDB_CAPABILITY_NETPEER = 0,
-	POLICYDB_CAPABILITY_OPENPERM = 1,
-	POLICYDB_CAPABILITY_EXTSOCKCLASS = 2,
-	POLICYDB_CAPABILITY_ALWAYSNETWORK = 3,
-	POLICYDB_CAPABILITY_CGROUPSECLABEL = 4,
-	POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,
-	POLICYDB_CAPABILITY_GENFS_SECLABEL_SYMLINKS = 6,
-	__POLICYDB_CAPABILITY_MAX = 7,
-};
-
-struct selinux_avc;
-
-struct selinux_policy;
-
-struct selinux_state {
-	bool disabled;
-	bool enforcing;
-	bool checkreqprot;
-	bool initialized;
-	bool policycap[7];
-	struct page *status_page;
-	struct mutex status_lock;
-	struct selinux_avc *avc;
-	struct selinux_policy *policy;
-	struct mutex policy_mutex;
-};
-
 struct avc_cache {
 	struct hlist_head slots[512];
 	spinlock_t slots_lock[512];
@@ -47065,44 +111450,6 @@
 	struct avc_cache avc_cache;
 };
 
-struct av_decision {
-	u32 allowed;
-	u32 auditallow;
-	u32 auditdeny;
-	u32 seqno;
-	u32 flags;
-};
-
-struct extended_perms_data {
-	u32 p[8];
-};
-
-struct extended_perms_decision {
-	u8 used;
-	u8 driver;
-	struct extended_perms_data *allowed;
-	struct extended_perms_data *auditallow;
-	struct extended_perms_data *dontaudit;
-};
-
-struct extended_perms {
-	u16 len;
-	struct extended_perms_data drivers;
-};
-
-struct avc_cache_stats {
-	unsigned int lookups;
-	unsigned int misses;
-	unsigned int allocations;
-	unsigned int reclaims;
-	unsigned int frees;
-};
-
-struct security_class_mapping {
-	const char *name;
-	const char *perms[33];
-};
-
 struct trace_event_raw_selinux_audited {
 	struct trace_entry ent;
 	u32 requested;
@@ -47155,1841 +111502,11 @@
 	struct avc_callback_node *next;
 };
 
-typedef __u16 __sum16;
-
-enum sctp_endpoint_type {
-	SCTP_EP_TYPE_SOCKET = 0,
-	SCTP_EP_TYPE_ASSOCIATION = 1,
-};
-
-struct sctp_chunk;
-
-struct sctp_inq {
-	struct list_head in_chunk_list;
-	struct sctp_chunk *in_progress;
-	struct work_struct immediate;
-};
-
-struct sctp_bind_addr {
-	__u16 port;
-	struct list_head address_list;
-};
-
-struct sctp_ep_common {
-	struct hlist_node node;
-	int hashent;
-	enum sctp_endpoint_type type;
-	refcount_t refcnt;
-	bool dead;
-	struct sock *sk;
-	struct net *net;
-	struct sctp_inq inqueue;
-	struct sctp_bind_addr bind_addr;
-};
-
-struct crypto_shash___2;
-
-struct sctp_hmac_algo_param;
-
-struct sctp_chunks_param;
-
-struct sctp_endpoint {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	__u8 secret_key[32];
-	__u8 *digest;
-	__u32 sndbuf_policy;
-	__u32 rcvbuf_policy;
-	struct crypto_shash___2 **auth_hmacs;
-	struct sctp_hmac_algo_param *auth_hmacs_list;
-	struct sctp_chunks_param *auth_chunk_list;
-	struct list_head endpoint_shared_keys;
-	__u16 active_key_id;
-	__u8 ecn_enable: 1;
-	__u8 auth_enable: 1;
-	__u8 intl_enable: 1;
-	__u8 prsctp_enable: 1;
-	__u8 asconf_enable: 1;
-	__u8 reconf_enable: 1;
-	__u8 strreset_enable;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct sockaddr_in6 {
-	short unsigned int sin6_family;
-	__be16 sin6_port;
-	__be32 sin6_flowinfo;
-	struct in6_addr sin6_addr;
-	__u32 sin6_scope_id;
-};
-
-struct in_addr {
-	__be32 s_addr;
-};
-
-struct sockaddr_in {
-	__kernel_sa_family_t sin_family;
-	__be16 sin_port;
-	struct in_addr sin_addr;
-	unsigned char __pad[8];
-};
-
-struct nf_hook_state;
-
-typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
-
-struct nf_hook_entry {
-	nf_hookfn *hook;
-	void *priv;
-};
-
-struct nf_hook_entries {
-	u16 num_hook_entries;
-	struct nf_hook_entry hooks[0];
-};
-
-struct nf_hook_state {
-	unsigned int hook;
-	u_int8_t pf;
-	struct net_device *in;
-	struct net_device *out;
-	struct sock *sk;
-	struct net *net;
-	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
-};
-
-struct nf_hook_ops {
-	nf_hookfn *hook;
-	struct net_device *dev;
-	void *priv;
-	u_int8_t pf;
-	unsigned int hooknum;
-	int priority;
-};
-
-enum nf_ip_hook_priorities {
-	NF_IP_PRI_FIRST = 2147483648,
-	NF_IP_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP_PRI_RAW = 4294966996,
-	NF_IP_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP_PRI_CONNTRACK = 4294967096,
-	NF_IP_PRI_MANGLE = 4294967146,
-	NF_IP_PRI_NAT_DST = 4294967196,
-	NF_IP_PRI_FILTER = 0,
-	NF_IP_PRI_SECURITY = 50,
-	NF_IP_PRI_NAT_SRC = 100,
-	NF_IP_PRI_SELINUX_LAST = 225,
-	NF_IP_PRI_CONNTRACK_HELPER = 300,
-	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
-	NF_IP_PRI_LAST = 2147483647,
-};
-
-enum nf_ip6_hook_priorities {
-	NF_IP6_PRI_FIRST = 2147483648,
-	NF_IP6_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP6_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP6_PRI_RAW = 4294966996,
-	NF_IP6_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP6_PRI_CONNTRACK = 4294967096,
-	NF_IP6_PRI_MANGLE = 4294967146,
-	NF_IP6_PRI_NAT_DST = 4294967196,
-	NF_IP6_PRI_FILTER = 0,
-	NF_IP6_PRI_SECURITY = 50,
-	NF_IP6_PRI_NAT_SRC = 100,
-	NF_IP6_PRI_SELINUX_LAST = 225,
-	NF_IP6_PRI_CONNTRACK_HELPER = 300,
-	NF_IP6_PRI_LAST = 2147483647,
-};
-
-struct socket_alloc {
-	struct socket socket;
-	struct inode vfs_inode;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ip_options {
-	__be32 faddr;
-	__be32 nexthop;
-	unsigned char optlen;
-	unsigned char srr;
-	unsigned char rr;
-	unsigned char ts;
-	unsigned char is_strictroute: 1;
-	unsigned char srr_is_hit: 1;
-	unsigned char is_changed: 1;
-	unsigned char rr_needaddr: 1;
-	unsigned char ts_needtime: 1;
-	unsigned char ts_needaddr: 1;
-	unsigned char router_alert;
-	unsigned char cipso;
-	unsigned char __pad2;
-	unsigned char __data[0];
-};
-
-struct ip_options_rcu {
-	struct callback_head rcu;
-	struct ip_options opt;
-};
-
-struct ipv6_opt_hdr;
-
-struct ipv6_rt_hdr;
-
-struct ipv6_txoptions {
-	refcount_t refcnt;
-	int tot_len;
-	__u16 opt_flen;
-	__u16 opt_nflen;
-	struct ipv6_opt_hdr *hopopt;
-	struct ipv6_opt_hdr *dst0opt;
-	struct ipv6_rt_hdr *srcrt;
-	struct ipv6_opt_hdr *dst1opt;
-	struct callback_head rcu;
-};
-
-struct inet_cork {
-	unsigned int flags;
-	__be32 addr;
-	struct ip_options *opt;
-	unsigned int fragsize;
-	int length;
-	struct dst_entry *dst;
-	u8 tx_flags;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-	u64 transmit_time;
-	u32 mark;
-};
-
-struct inet_cork_full {
-	struct inet_cork base;
-	struct flowi fl;
-};
-
-struct ipv6_pinfo;
-
-struct ip_mc_socklist;
-
-struct inet_sock {
-	struct sock sk;
-	struct ipv6_pinfo *pinet6;
-	__be32 inet_saddr;
-	__s16 uc_ttl;
-	__u16 cmsg_flags;
-	__be16 inet_sport;
-	__u16 inet_id;
-	struct ip_options_rcu *inet_opt;
-	int rx_dst_ifindex;
-	__u8 tos;
-	__u8 min_ttl;
-	__u8 mc_ttl;
-	__u8 pmtudisc;
-	__u8 recverr: 1;
-	__u8 is_icsk: 1;
-	__u8 freebind: 1;
-	__u8 hdrincl: 1;
-	__u8 mc_loop: 1;
-	__u8 transparent: 1;
-	__u8 mc_all: 1;
-	__u8 nodefrag: 1;
-	__u8 bind_address_no_port: 1;
-	__u8 recverr_rfc4884: 1;
-	__u8 defer_connect: 1;
-	__u8 rcv_tos;
-	__u8 convert_csum;
-	int uc_index;
-	int mc_index;
-	__be32 mc_addr;
-	struct ip_mc_socklist *mc_list;
-	struct inet_cork_full cork;
-};
-
-struct in6_pktinfo {
-	struct in6_addr ipi6_addr;
-	int ipi6_ifindex;
-};
-
-struct inet6_cork {
-	struct ipv6_txoptions *opt;
-	u8 hop_limit;
-	u8 tclass;
-};
-
-struct ipv6_mc_socklist;
-
-struct ipv6_ac_socklist;
-
-struct ipv6_fl_socklist;
-
-struct ipv6_pinfo {
-	struct in6_addr saddr;
-	struct in6_pktinfo sticky_pktinfo;
-	const struct in6_addr *daddr_cache;
-	const struct in6_addr *saddr_cache;
-	__be32 flow_label;
-	__u32 frag_size;
-	__u16 __unused_1: 7;
-	__s16 hop_limit: 9;
-	__u16 mc_loop: 1;
-	__u16 __unused_2: 6;
-	__s16 mcast_hops: 9;
-	int ucast_oif;
-	int mcast_oif;
-	union {
-		struct {
-			__u16 srcrt: 1;
-			__u16 osrcrt: 1;
-			__u16 rxinfo: 1;
-			__u16 rxoinfo: 1;
-			__u16 rxhlim: 1;
-			__u16 rxohlim: 1;
-			__u16 hopopts: 1;
-			__u16 ohopopts: 1;
-			__u16 dstopts: 1;
-			__u16 odstopts: 1;
-			__u16 rxflow: 1;
-			__u16 rxtclass: 1;
-			__u16 rxpmtu: 1;
-			__u16 rxorigdstaddr: 1;
-			__u16 recvfragsize: 1;
-		} bits;
-		__u16 all;
-	} rxopt;
-	__u16 recverr: 1;
-	__u16 sndflow: 1;
-	__u16 repflow: 1;
-	__u16 pmtudisc: 3;
-	__u16 padding: 1;
-	__u16 srcprefs: 3;
-	__u16 dontfrag: 1;
-	__u16 autoflowlabel: 1;
-	__u16 autoflowlabel_set: 1;
-	__u16 mc_all: 1;
-	__u16 recverr_rfc4884: 1;
-	__u16 rtalert_isolate: 1;
-	__u8 min_hopcount;
-	__u8 tclass;
-	__be32 rcv_flowinfo;
-	__u32 dst_cookie;
-	__u32 rx_dst_cookie;
-	struct ipv6_mc_socklist *ipv6_mc_list;
-	struct ipv6_ac_socklist *ipv6_ac_list;
-	struct ipv6_fl_socklist *ipv6_fl_list;
-	struct ipv6_txoptions *opt;
-	struct sk_buff *pktoptions;
-	struct sk_buff *rxpmtu;
-	struct inet6_cork cork;
-};
-
-struct tcphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 seq;
-	__be32 ack_seq;
-	__u16 res1: 4;
-	__u16 doff: 4;
-	__u16 fin: 1;
-	__u16 syn: 1;
-	__u16 rst: 1;
-	__u16 psh: 1;
-	__u16 ack: 1;
-	__u16 urg: 1;
-	__u16 ece: 1;
-	__u16 cwr: 1;
-	__be16 window;
-	__sum16 check;
-	__be16 urg_ptr;
-};
-
-struct iphdr {
-	__u8 ihl: 4;
-	__u8 version: 4;
-	__u8 tos;
-	__be16 tot_len;
-	__be16 id;
-	__be16 frag_off;
-	__u8 ttl;
-	__u8 protocol;
-	__sum16 check;
-	__be32 saddr;
-	__be32 daddr;
-};
-
-struct ipv6_rt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-};
-
-struct ipv6_opt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-};
-
-struct ipv6hdr {
-	__u8 priority: 4;
-	__u8 version: 4;
-	__u8 flow_lbl[3];
-	__be16 payload_len;
-	__u8 nexthdr;
-	__u8 hop_limit;
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-};
-
-struct udphdr {
-	__be16 source;
-	__be16 dest;
-	__be16 len;
-	__sum16 check;
-};
-
-struct inet6_skb_parm {
-	int iif;
-	__be16 ra;
-	__u16 dst0;
-	__u16 srcrt;
-	__u16 dst1;
-	__u16 lastopt;
-	__u16 nhoff;
-	__u16 flags;
-	__u16 dsthao;
-	__u16 frag_max_size;
-};
-
-struct ip6_sf_socklist;
-
-struct ipv6_mc_socklist {
-	struct in6_addr addr;
-	int ifindex;
-	unsigned int sfmode;
-	struct ipv6_mc_socklist *next;
-	rwlock_t sflock;
-	struct ip6_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ipv6_ac_socklist {
-	struct in6_addr acl_addr;
-	int acl_ifindex;
-	struct ipv6_ac_socklist *acl_next;
-};
-
-struct ip6_flowlabel;
-
-struct ipv6_fl_socklist {
-	struct ipv6_fl_socklist *next;
-	struct ip6_flowlabel *fl;
-	struct callback_head rcu;
-};
-
-struct ip6_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct in6_addr sl_addr[0];
-};
-
-struct ip6_flowlabel {
-	struct ip6_flowlabel *next;
-	__be32 label;
-	atomic_t users;
-	struct in6_addr dst;
-	struct ipv6_txoptions *opt;
-	long unsigned int linger;
-	struct callback_head rcu;
-	u8 share;
-	union {
-		struct pid *pid;
-		kuid_t uid;
-	} owner;
-	long unsigned int lastuse;
-	long unsigned int expires;
-	struct net *fl_net;
-};
-
-struct inet_skb_parm {
-	int iif;
-	struct ip_options opt;
-	u16 flags;
-	u16 frag_max_size;
-};
-
-struct tty_file_private {
-	struct tty_struct *tty;
-	struct file *file;
-	struct list_head list;
-};
-
-struct netlbl_lsm_cache {
-	refcount_t refcount;
-	void (*free)(const void *);
-	void *data;
-};
-
-struct netlbl_lsm_catmap {
-	u32 startbit;
-	u64 bitmap[4];
-	struct netlbl_lsm_catmap *next;
-};
-
-struct netlbl_lsm_secattr {
-	u32 flags;
-	u32 type;
-	char *domain;
-	struct netlbl_lsm_cache *cache;
-	struct {
-		struct {
-			struct netlbl_lsm_catmap *cat;
-			u32 lvl;
-		} mls;
-		u32 secid;
-	} attr;
-};
-
-struct dccp_hdr {
-	__be16 dccph_sport;
-	__be16 dccph_dport;
-	__u8 dccph_doff;
-	__u8 dccph_cscov: 4;
-	__u8 dccph_ccval: 4;
-	__sum16 dccph_checksum;
-	__u8 dccph_x: 1;
-	__u8 dccph_type: 4;
-	__u8 dccph_reserved: 3;
-	__u8 dccph_seq2;
-	__be16 dccph_seq;
-};
-
-enum dccp_state {
-	DCCP_OPEN = 1,
-	DCCP_REQUESTING = 2,
-	DCCP_LISTEN = 10,
-	DCCP_RESPOND = 3,
-	DCCP_ACTIVE_CLOSEREQ = 4,
-	DCCP_PASSIVE_CLOSE = 8,
-	DCCP_CLOSING = 11,
-	DCCP_TIME_WAIT = 6,
-	DCCP_CLOSED = 7,
-	DCCP_NEW_SYN_RECV = 12,
-	DCCP_PARTOPEN = 13,
-	DCCP_PASSIVE_CLOSEREQ = 14,
-	DCCP_MAX_STATES = 15,
-};
-
-typedef __s32 sctp_assoc_t;
-
-enum sctp_msg_flags {
-	MSG_NOTIFICATION = 32768,
-};
-
-struct sctp_initmsg {
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u16 sinit_max_attempts;
-	__u16 sinit_max_init_timeo;
-};
-
-struct sctp_sndrcvinfo {
-	__u16 sinfo_stream;
-	__u16 sinfo_ssn;
-	__u16 sinfo_flags;
-	__u32 sinfo_ppid;
-	__u32 sinfo_context;
-	__u32 sinfo_timetolive;
-	__u32 sinfo_tsn;
-	__u32 sinfo_cumtsn;
-	sctp_assoc_t sinfo_assoc_id;
-};
-
-struct sctp_rtoinfo {
-	sctp_assoc_t srto_assoc_id;
-	__u32 srto_initial;
-	__u32 srto_max;
-	__u32 srto_min;
-};
-
-struct sctp_assocparams {
-	sctp_assoc_t sasoc_assoc_id;
-	__u16 sasoc_asocmaxrxt;
-	__u16 sasoc_number_peer_destinations;
-	__u32 sasoc_peer_rwnd;
-	__u32 sasoc_local_rwnd;
-	__u32 sasoc_cookie_life;
-};
-
-struct sctp_paddrparams {
-	sctp_assoc_t spp_assoc_id;
-	struct __kernel_sockaddr_storage spp_address;
-	__u32 spp_hbinterval;
-	__u16 spp_pathmaxrxt;
-	__u32 spp_pathmtu;
-	__u32 spp_sackdelay;
-	__u32 spp_flags;
-	__u32 spp_ipv6_flowlabel;
-	__u8 spp_dscp;
-	char: 8;
-} __attribute__((packed));
-
-struct sctphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 vtag;
-	__le32 checksum;
-};
-
-struct sctp_chunkhdr {
-	__u8 type;
-	__u8 flags;
-	__be16 length;
-};
-
-enum sctp_cid {
-	SCTP_CID_DATA = 0,
-	SCTP_CID_INIT = 1,
-	SCTP_CID_INIT_ACK = 2,
-	SCTP_CID_SACK = 3,
-	SCTP_CID_HEARTBEAT = 4,
-	SCTP_CID_HEARTBEAT_ACK = 5,
-	SCTP_CID_ABORT = 6,
-	SCTP_CID_SHUTDOWN = 7,
-	SCTP_CID_SHUTDOWN_ACK = 8,
-	SCTP_CID_ERROR = 9,
-	SCTP_CID_COOKIE_ECHO = 10,
-	SCTP_CID_COOKIE_ACK = 11,
-	SCTP_CID_ECN_ECNE = 12,
-	SCTP_CID_ECN_CWR = 13,
-	SCTP_CID_SHUTDOWN_COMPLETE = 14,
-	SCTP_CID_AUTH = 15,
-	SCTP_CID_I_DATA = 64,
-	SCTP_CID_FWD_TSN = 192,
-	SCTP_CID_ASCONF = 193,
-	SCTP_CID_I_FWD_TSN = 194,
-	SCTP_CID_ASCONF_ACK = 128,
-	SCTP_CID_RECONF = 130,
-};
-
-struct sctp_paramhdr {
-	__be16 type;
-	__be16 length;
-};
-
-enum sctp_param {
-	SCTP_PARAM_HEARTBEAT_INFO = 256,
-	SCTP_PARAM_IPV4_ADDRESS = 1280,
-	SCTP_PARAM_IPV6_ADDRESS = 1536,
-	SCTP_PARAM_STATE_COOKIE = 1792,
-	SCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,
-	SCTP_PARAM_COOKIE_PRESERVATIVE = 2304,
-	SCTP_PARAM_HOST_NAME_ADDRESS = 2816,
-	SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,
-	SCTP_PARAM_ECN_CAPABLE = 128,
-	SCTP_PARAM_RANDOM = 640,
-	SCTP_PARAM_CHUNKS = 896,
-	SCTP_PARAM_HMAC_ALGO = 1152,
-	SCTP_PARAM_SUPPORTED_EXT = 2176,
-	SCTP_PARAM_FWD_TSN_SUPPORT = 192,
-	SCTP_PARAM_ADD_IP = 448,
-	SCTP_PARAM_DEL_IP = 704,
-	SCTP_PARAM_ERR_CAUSE = 960,
-	SCTP_PARAM_SET_PRIMARY = 1216,
-	SCTP_PARAM_SUCCESS_REPORT = 1472,
-	SCTP_PARAM_ADAPTATION_LAYER_IND = 1728,
-	SCTP_PARAM_RESET_OUT_REQUEST = 3328,
-	SCTP_PARAM_RESET_IN_REQUEST = 3584,
-	SCTP_PARAM_RESET_TSN_REQUEST = 3840,
-	SCTP_PARAM_RESET_RESPONSE = 4096,
-	SCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,
-	SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
-};
-
-struct sctp_datahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 ssn;
-	__u32 ppid;
-	__u8 payload[0];
-};
-
-struct sctp_idatahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 reserved;
-	__be32 mid;
-	union {
-		__u32 ppid;
-		__be32 fsn;
-	};
-	__u8 payload[0];
-};
-
-struct sctp_inithdr {
-	__be32 init_tag;
-	__be32 a_rwnd;
-	__be16 num_outbound_streams;
-	__be16 num_inbound_streams;
-	__be32 initial_tsn;
-	__u8 params[0];
-};
-
-struct sctp_init_chunk {
-	struct sctp_chunkhdr chunk_hdr;
-	struct sctp_inithdr init_hdr;
-};
-
-struct sctp_ipv4addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in_addr addr;
-};
-
-struct sctp_ipv6addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in6_addr addr;
-};
-
-struct sctp_cookie_preserve_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 lifespan_increment;
-};
-
-struct sctp_hostname_param {
-	struct sctp_paramhdr param_hdr;
-	uint8_t hostname[0];
-};
-
-struct sctp_supported_addrs_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 types[0];
-};
-
-struct sctp_adaptation_ind_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 adaptation_ind;
-};
-
-struct sctp_supported_ext_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_random_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 random_val[0];
-};
-
-struct sctp_chunks_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_hmac_algo_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 hmac_ids[0];
-};
-
-struct sctp_cookie_param {
-	struct sctp_paramhdr p;
-	__u8 body[0];
-};
-
-struct sctp_gap_ack_block {
-	__be16 start;
-	__be16 end;
-};
-
-union sctp_sack_variable {
-	struct sctp_gap_ack_block gab;
-	__be32 dup;
-};
-
-struct sctp_sackhdr {
-	__be32 cum_tsn_ack;
-	__be32 a_rwnd;
-	__be16 num_gap_ack_blocks;
-	__be16 num_dup_tsns;
-	union sctp_sack_variable variable[0];
-};
-
-struct sctp_heartbeathdr {
-	struct sctp_paramhdr info;
-};
-
-struct sctp_shutdownhdr {
-	__be32 cum_tsn_ack;
-};
-
-struct sctp_errhdr {
-	__be16 cause;
-	__be16 length;
-	__u8 variable[0];
-};
-
-struct sctp_ecnehdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_cwrhdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_fwdtsn_skip {
-	__be16 stream;
-	__be16 ssn;
-};
-
-struct sctp_fwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_fwdtsn_skip skip[0];
-};
-
-struct sctp_ifwdtsn_skip {
-	__be16 stream;
-	__u8 reserved;
-	__u8 flags;
-	__be32 mid;
-};
-
-struct sctp_ifwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_ifwdtsn_skip skip[0];
-};
-
-struct sctp_addip_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 crr_id;
-};
-
-struct sctp_addiphdr {
-	__be32 serial;
-	__u8 params[0];
-};
-
-struct sctp_authhdr {
-	__be16 shkey_id;
-	__be16 hmac_id;
-	__u8 hmac[0];
-};
-
-union sctp_addr {
-	struct sockaddr_in v4;
-	struct sockaddr_in6 v6;
-	struct sockaddr sa;
-};
-
-struct sctp_cookie {
-	__u32 my_vtag;
-	__u32 peer_vtag;
-	__u32 my_ttag;
-	__u32 peer_ttag;
-	ktime_t expiration;
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u32 initial_tsn;
-	union sctp_addr peer_addr;
-	__u16 my_port;
-	__u8 prsctp_capable;
-	__u8 padding;
-	__u32 adaptation_ind;
-	__u8 auth_random[36];
-	__u8 auth_hmacs[10];
-	__u8 auth_chunks[20];
-	__u32 raw_addr_list_len;
-	struct sctp_init_chunk peer_init[0];
-};
-
-struct sctp_tsnmap {
-	long unsigned int *tsn_map;
-	__u32 base_tsn;
-	__u32 cumulative_tsn_ack_point;
-	__u32 max_tsn_seen;
-	__u16 len;
-	__u16 pending_data;
-	__u16 num_dup_tsns;
-	__be32 dup_tsns[16];
-};
-
-struct sctp_inithdr_host {
-	__u32 init_tag;
-	__u32 a_rwnd;
-	__u16 num_outbound_streams;
-	__u16 num_inbound_streams;
-	__u32 initial_tsn;
-};
-
-enum sctp_state {
-	SCTP_STATE_CLOSED = 0,
-	SCTP_STATE_COOKIE_WAIT = 1,
-	SCTP_STATE_COOKIE_ECHOED = 2,
-	SCTP_STATE_ESTABLISHED = 3,
-	SCTP_STATE_SHUTDOWN_PENDING = 4,
-	SCTP_STATE_SHUTDOWN_SENT = 5,
-	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
-	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
-};
-
-struct sctp_stream_out_ext;
-
-struct sctp_stream_out {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	struct sctp_stream_out_ext *ext;
-	__u8 state;
-};
-
-struct sctp_stream_in {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	__u32 fsn;
-	__u32 fsn_uo;
-	char pd_mode;
-	char pd_mode_uo;
-};
-
-struct sctp_stream_interleave;
-
-struct sctp_stream {
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_out type[0];
-	} out;
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_in type[0];
-	} in;
-	__u16 outcnt;
-	__u16 incnt;
-	struct sctp_stream_out *out_curr;
-	union {
-		struct {
-			struct list_head prio_list;
-		};
-		struct {
-			struct list_head rr_list;
-			struct sctp_stream_out_ext *rr_next;
-		};
-	};
-	struct sctp_stream_interleave *si;
-};
-
-struct sctp_sched_ops;
-
-struct sctp_association;
-
-struct sctp_outq {
-	struct sctp_association *asoc;
-	struct list_head out_chunk_list;
-	struct sctp_sched_ops *sched;
-	unsigned int out_qlen;
-	unsigned int error;
-	struct list_head control_chunk_list;
-	struct list_head sacked;
-	struct list_head retransmit;
-	struct list_head abandoned;
-	__u32 outstanding_bytes;
-	char fast_rtx;
-	char cork;
-};
-
-struct sctp_ulpq {
-	char pd_mode;
-	struct sctp_association *asoc;
-	struct sk_buff_head reasm;
-	struct sk_buff_head reasm_uo;
-	struct sk_buff_head lobby;
-};
-
-struct sctp_priv_assoc_stats {
-	struct __kernel_sockaddr_storage obs_rto_ipaddr;
-	__u64 max_obs_rto;
-	__u64 isacks;
-	__u64 osacks;
-	__u64 opackets;
-	__u64 ipackets;
-	__u64 rtxchunks;
-	__u64 outofseqtsns;
-	__u64 idupchunks;
-	__u64 gapcnt;
-	__u64 ouodchunks;
-	__u64 iuodchunks;
-	__u64 oodchunks;
-	__u64 iodchunks;
-	__u64 octrlchunks;
-	__u64 ictrlchunks;
-};
-
-struct sctp_transport;
-
-struct sctp_auth_bytes;
-
-struct sctp_shared_key;
-
-struct sctp_association {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	sctp_assoc_t assoc_id;
-	struct sctp_endpoint *ep;
-	struct sctp_cookie c;
-	struct {
-		struct list_head transport_addr_list;
-		__u32 rwnd;
-		__u16 transport_count;
-		__u16 port;
-		struct sctp_transport *primary_path;
-		union sctp_addr primary_addr;
-		struct sctp_transport *active_path;
-		struct sctp_transport *retran_path;
-		struct sctp_transport *last_sent_to;
-		struct sctp_transport *last_data_from;
-		struct sctp_tsnmap tsn_map;
-		__be16 addip_disabled_mask;
-		__u16 ecn_capable: 1;
-		__u16 ipv4_address: 1;
-		__u16 ipv6_address: 1;
-		__u16 hostname_address: 1;
-		__u16 asconf_capable: 1;
-		__u16 prsctp_capable: 1;
-		__u16 reconf_capable: 1;
-		__u16 intl_capable: 1;
-		__u16 auth_capable: 1;
-		__u16 sack_needed: 1;
-		__u16 sack_generation: 1;
-		__u16 zero_window_announced: 1;
-		__u32 sack_cnt;
-		__u32 adaptation_ind;
-		struct sctp_inithdr_host i;
-		void *cookie;
-		int cookie_len;
-		__u32 addip_serial;
-		struct sctp_random_param *peer_random;
-		struct sctp_chunks_param *peer_chunks;
-		struct sctp_hmac_algo_param *peer_hmacs;
-	} peer;
-	enum sctp_state state;
-	int overall_error_count;
-	ktime_t cookie_life;
-	long unsigned int rto_initial;
-	long unsigned int rto_max;
-	long unsigned int rto_min;
-	int max_burst;
-	int max_retrans;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u16 max_init_attempts;
-	__u16 init_retries;
-	long unsigned int max_init_timeo;
-	long unsigned int hbinterval;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u8 pmtu_pending;
-	__u32 pathmtu;
-	__u32 param_flags;
-	__u32 sackfreq;
-	long unsigned int sackdelay;
-	long unsigned int timeouts[11];
-	struct timer_list timers[11];
-	struct sctp_transport *shutdown_last_sent_to;
-	struct sctp_transport *init_last_sent_to;
-	int shutdown_retries;
-	__u32 next_tsn;
-	__u32 ctsn_ack_point;
-	__u32 adv_peer_ack_point;
-	__u32 highest_sacked;
-	__u32 fast_recovery_exit;
-	__u8 fast_recovery;
-	__u16 unack_data;
-	__u32 rtx_data_chunks;
-	__u32 rwnd;
-	__u32 a_rwnd;
-	__u32 rwnd_over;
-	__u32 rwnd_press;
-	int sndbuf_used;
-	atomic_t rmem_alloc;
-	wait_queue_head_t wait;
-	__u32 frag_point;
-	__u32 user_frag;
-	int init_err_counter;
-	int init_cycle;
-	__u16 default_stream;
-	__u16 default_flags;
-	__u32 default_ppid;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	struct sctp_stream stream;
-	struct sctp_outq outqueue;
-	struct sctp_ulpq ulpq;
-	__u32 last_ecne_tsn;
-	__u32 last_cwr_tsn;
-	int numduptsns;
-	struct sctp_chunk *addip_last_asconf;
-	struct list_head asconf_ack_list;
-	struct list_head addip_chunk_list;
-	__u32 addip_serial;
-	int src_out_of_asoc_ok;
-	union sctp_addr *asconf_addr_del_pending;
-	struct sctp_transport *new_transport;
-	struct list_head endpoint_shared_keys;
-	struct sctp_auth_bytes *asoc_shared_key;
-	struct sctp_shared_key *shkey;
-	__u16 default_hmac_id;
-	__u16 active_key_id;
-	__u8 need_ecne: 1;
-	__u8 temp: 1;
-	__u8 pf_expose: 2;
-	__u8 force_delay: 1;
-	__u8 strreset_enable;
-	__u8 strreset_outstanding;
-	__u32 strreset_outseq;
-	__u32 strreset_inseq;
-	__u32 strreset_result[2];
-	struct sctp_chunk *strreset_chunk;
-	struct sctp_priv_assoc_stats stats;
-	int sent_cnt_removable;
-	__u16 subscribe;
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct callback_head rcu;
-};
-
-struct sctp_auth_bytes {
-	refcount_t refcnt;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct sctp_shared_key {
-	struct list_head key_list;
-	struct sctp_auth_bytes *key;
-	refcount_t refcnt;
-	__u16 key_id;
-	__u8 deactivated;
-};
-
-enum {
-	SCTP_MAX_STREAM = 65535,
-};
-
-enum sctp_event_timeout {
-	SCTP_EVENT_TIMEOUT_NONE = 0,
-	SCTP_EVENT_TIMEOUT_T1_COOKIE = 1,
-	SCTP_EVENT_TIMEOUT_T1_INIT = 2,
-	SCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,
-	SCTP_EVENT_TIMEOUT_T3_RTX = 4,
-	SCTP_EVENT_TIMEOUT_T4_RTO = 5,
-	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
-	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
-	SCTP_EVENT_TIMEOUT_RECONF = 8,
-	SCTP_EVENT_TIMEOUT_SACK = 9,
-	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,
-};
-
-enum {
-	SCTP_MAX_DUP_TSNS = 16,
-};
-
-enum sctp_scope {
-	SCTP_SCOPE_GLOBAL = 0,
-	SCTP_SCOPE_PRIVATE = 1,
-	SCTP_SCOPE_LINK = 2,
-	SCTP_SCOPE_LOOPBACK = 3,
-	SCTP_SCOPE_UNUSABLE = 4,
-};
-
-enum {
-	SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
-	SCTP_AUTH_HMAC_ID_SHA1 = 1,
-	SCTP_AUTH_HMAC_ID_RESERVED_2 = 2,
-	SCTP_AUTH_HMAC_ID_SHA256 = 3,
-	__SCTP_AUTH_HMAC_MAX = 4,
-};
-
-struct sctp_ulpevent {
-	struct sctp_association *asoc;
-	struct sctp_chunk *chunk;
-	unsigned int rmem_len;
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	union {
-		__u32 ppid;
-		__u32 fsn;
-	};
-	__u32 tsn;
-	__u32 cumtsn;
-	__u16 stream;
-	__u16 flags;
-	__u16 msg_flags;
-} __attribute__((packed));
-
-union sctp_addr_param;
-
-union sctp_params {
-	void *v;
-	struct sctp_paramhdr *p;
-	struct sctp_cookie_preserve_param *life;
-	struct sctp_hostname_param *dns;
-	struct sctp_cookie_param *cookie;
-	struct sctp_supported_addrs_param *sat;
-	struct sctp_ipv4addr_param *v4;
-	struct sctp_ipv6addr_param *v6;
-	union sctp_addr_param *addr;
-	struct sctp_adaptation_ind_param *aind;
-	struct sctp_supported_ext_param *ext;
-	struct sctp_random_param *random;
-	struct sctp_chunks_param *chunks;
-	struct sctp_hmac_algo_param *hmac_algo;
-	struct sctp_addip_param *addip;
-};
-
-struct sctp_sender_hb_info;
-
-struct sctp_signed_cookie;
-
-struct sctp_datamsg;
-
-struct sctp_chunk {
-	struct list_head list;
-	refcount_t refcnt;
-	int sent_count;
-	union {
-		struct list_head transmitted_list;
-		struct list_head stream_list;
-	};
-	struct list_head frag_list;
-	struct sk_buff *skb;
-	union {
-		struct sk_buff *head_skb;
-		struct sctp_shared_key *shkey;
-	};
-	union sctp_params param_hdr;
-	union {
-		__u8 *v;
-		struct sctp_datahdr *data_hdr;
-		struct sctp_inithdr *init_hdr;
-		struct sctp_sackhdr *sack_hdr;
-		struct sctp_heartbeathdr *hb_hdr;
-		struct sctp_sender_hb_info *hbs_hdr;
-		struct sctp_shutdownhdr *shutdown_hdr;
-		struct sctp_signed_cookie *cookie_hdr;
-		struct sctp_ecnehdr *ecne_hdr;
-		struct sctp_cwrhdr *ecn_cwr_hdr;
-		struct sctp_errhdr *err_hdr;
-		struct sctp_addiphdr *addip_hdr;
-		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
-		struct sctp_authhdr *auth_hdr;
-		struct sctp_idatahdr *idata_hdr;
-		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
-	} subh;
-	__u8 *chunk_end;
-	struct sctp_chunkhdr *chunk_hdr;
-	struct sctphdr *sctp_hdr;
-	struct sctp_sndrcvinfo sinfo;
-	struct sctp_association *asoc;
-	struct sctp_ep_common *rcvr;
-	long unsigned int sent_at;
-	union sctp_addr source;
-	union sctp_addr dest;
-	struct sctp_datamsg *msg;
-	struct sctp_transport *transport;
-	struct sk_buff *auth_chunk;
-	__u16 rtt_in_progress: 1;
-	__u16 has_tsn: 1;
-	__u16 has_ssn: 1;
-	__u16 singleton: 1;
-	__u16 end_of_packet: 1;
-	__u16 ecn_ce_done: 1;
-	__u16 pdiscard: 1;
-	__u16 tsn_gap_acked: 1;
-	__u16 data_accepted: 1;
-	__u16 auth: 1;
-	__u16 has_asconf: 1;
-	__u16 tsn_missing_report: 2;
-	__u16 fast_retransmit: 2;
-};
-
-struct sctp_stream_interleave {
-	__u16 data_chunk_len;
-	__u16 ftsn_chunk_len;
-	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
-	void (*assign_number)(struct sctp_chunk *);
-	bool (*validate_data)(struct sctp_chunk *);
-	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
-	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	void (*start_pd)(struct sctp_ulpq *, gfp_t);
-	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
-	void (*generate_ftsn)(struct sctp_outq *, __u32);
-	bool (*validate_ftsn)(struct sctp_chunk *);
-	void (*report_ftsn)(struct sctp_ulpq *, __u32);
-	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
-};
-
-struct sctp_bind_bucket {
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct hlist_node node;
-	struct hlist_head owner;
-	struct net *net;
-};
-
-enum sctp_socket_type {
-	SCTP_SOCKET_UDP = 0,
-	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
-	SCTP_SOCKET_TCP = 2,
-};
-
-struct sctp_pf;
-
-struct sctp_sock {
-	struct inet_sock inet;
-	enum sctp_socket_type type;
-	int: 32;
-	struct sctp_pf *pf;
-	struct crypto_shash___2 *hmac;
-	char *sctp_hmac_alg;
-	struct sctp_endpoint *ep;
-	struct sctp_bind_bucket *bind_hash;
-	__u16 default_stream;
-	short: 16;
-	__u32 default_ppid;
-	__u16 default_flags;
-	short: 16;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	int max_burst;
-	__u32 hbinterval;
-	__u16 pathmaxrxt;
-	short: 16;
-	__u32 flowlabel;
-	__u8 dscp;
-	char: 8;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	short: 16;
-	__u32 pathmtu;
-	__u32 sackdelay;
-	__u32 sackfreq;
-	__u32 param_flags;
-	__u32 default_ss;
-	struct sctp_rtoinfo rtoinfo;
-	struct sctp_paddrparams paddrparam;
-	struct sctp_assocparams assocparams;
-	__u16 subscribe;
-	struct sctp_initmsg initmsg;
-	short: 16;
-	int user_frag;
-	__u32 autoclose;
-	__u32 adaptation_ind;
-	__u32 pd_point;
-	__u16 nodelay: 1;
-	__u16 pf_expose: 2;
-	__u16 reuse: 1;
-	__u16 disable_fragments: 1;
-	__u16 v4mapped: 1;
-	__u16 frag_interleave: 1;
-	__u16 recvrcvinfo: 1;
-	__u16 recvnxtinfo: 1;
-	__u16 data_ready_signalled: 1;
-	int: 22;
-	atomic_t pd_mode;
-	struct sk_buff_head pd_lobby;
-	struct list_head auto_asconf_list;
-	int do_auto_asconf;
-	int: 32;
-} __attribute__((packed));
-
-struct sctp_af;
-
-struct sctp_pf {
-	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
-	void (*skb_msgname)(struct sk_buff *, char *, int *);
-	int (*af_supported)(sa_family_t, struct sctp_sock *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
-	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
-	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
-	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
-	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
-	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
-	void (*copy_ip_options)(struct sock *, struct sock *);
-	struct sctp_af *af;
-};
-
-struct sctp_signed_cookie {
-	__u8 signature[32];
-	__u32 __pad;
-	struct sctp_cookie c;
-} __attribute__((packed));
-
-union sctp_addr_param {
-	struct sctp_paramhdr p;
-	struct sctp_ipv4addr_param v4;
-	struct sctp_ipv6addr_param v6;
-};
-
-struct sctp_sender_hb_info {
-	struct sctp_paramhdr param_hdr;
-	union sctp_addr daddr;
-	long unsigned int sent_at;
-	__u64 hb_nonce;
-};
-
-struct sctp_af {
-	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
-	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
-	void (*copy_addrlist)(struct list_head *, struct net_device *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
-	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
-	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
-	void (*from_sk)(union sctp_addr *, struct sock *);
-	void (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
-	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
-	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
-	enum sctp_scope (*scope)(union sctp_addr *);
-	void (*inaddr_any)(union sctp_addr *, __be16);
-	int (*is_any)(const union sctp_addr *);
-	int (*available)(union sctp_addr *, struct sctp_sock *);
-	int (*skb_iif)(const struct sk_buff *);
-	int (*is_ce)(const struct sk_buff *);
-	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
-	void (*ecn_capable)(struct sock *);
-	__u16 net_header_len;
-	int sockaddr_len;
-	int (*ip_options_len)(struct sock *);
-	sa_family_t sa_family;
-	struct list_head list;
-};
-
-struct sctp_packet {
-	__u16 source_port;
-	__u16 destination_port;
-	__u32 vtag;
-	struct list_head chunk_list;
-	size_t overhead;
-	size_t size;
-	size_t max_size;
-	struct sctp_transport *transport;
-	struct sctp_chunk *auth;
-	u8 has_cookie_echo: 1;
-	u8 has_sack: 1;
-	u8 has_auth: 1;
-	u8 has_data: 1;
-	u8 ipfragok: 1;
-};
-
-struct sctp_transport {
-	struct list_head transports;
-	struct rhlist_head node;
-	refcount_t refcnt;
-	__u32 rto_pending: 1;
-	__u32 hb_sent: 1;
-	__u32 pmtu_pending: 1;
-	__u32 dst_pending_confirm: 1;
-	__u32 sack_generation: 1;
-	u32 dst_cookie;
-	struct flowi fl;
-	union sctp_addr ipaddr;
-	struct sctp_af *af_specific;
-	struct sctp_association *asoc;
-	long unsigned int rto;
-	__u32 rtt;
-	__u32 rttvar;
-	__u32 srtt;
-	__u32 cwnd;
-	__u32 ssthresh;
-	__u32 partial_bytes_acked;
-	__u32 flight_size;
-	__u32 burst_limited;
-	struct dst_entry *dst;
-	union sctp_addr saddr;
-	long unsigned int hbinterval;
-	long unsigned int sackdelay;
-	__u32 sackfreq;
-	atomic_t mtu_info;
-	ktime_t last_time_heard;
-	long unsigned int last_time_sent;
-	long unsigned int last_time_ecne_reduced;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u32 pathmtu;
-	__u32 param_flags;
-	int init_sent_count;
-	int state;
-	short unsigned int error_count;
-	struct timer_list T3_rtx_timer;
-	struct timer_list hb_timer;
-	struct timer_list proto_unreach_timer;
-	struct timer_list reconf_timer;
-	struct list_head transmitted;
-	struct sctp_packet packet;
-	struct list_head send_ready;
-	struct {
-		__u32 next_tsn_at_change;
-		char changeover_active;
-		char cycling_changeover;
-		char cacc_saw_newack;
-	} cacc;
-	__u64 hb_nonce;
-	struct callback_head rcu;
-};
-
-struct sctp_datamsg {
-	struct list_head chunks;
-	refcount_t refcnt;
-	long unsigned int expires_at;
-	int send_error;
-	u8 send_failed: 1;
-	u8 can_delay: 1;
-	u8 abandoned: 1;
-};
-
-struct sctp_stream_priorities {
-	struct list_head prio_sched;
-	struct list_head active;
-	struct sctp_stream_out_ext *next;
-	__u16 prio;
-};
-
-struct sctp_stream_out_ext {
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct list_head outq;
-	union {
-		struct {
-			struct list_head prio_list;
-			struct sctp_stream_priorities *prio_head;
-		};
-		struct {
-			struct list_head rr_list;
-		};
-	};
-};
-
-struct task_security_struct {
-	u32 osid;
-	u32 sid;
-	u32 exec_sid;
-	u32 create_sid;
-	u32 keycreate_sid;
-	u32 sockcreate_sid;
-};
-
-enum label_initialized {
-	LABEL_INVALID = 0,
-	LABEL_INITIALIZED = 1,
-	LABEL_PENDING = 2,
-};
-
-struct inode_security_struct {
-	struct inode *inode;
-	struct list_head list;
-	u32 task_sid;
-	u32 sid;
-	u16 sclass;
-	unsigned char initialized;
-	spinlock_t lock;
-};
-
-struct file_security_struct {
-	u32 sid;
-	u32 fown_sid;
-	u32 isid;
-	u32 pseqno;
-};
-
-struct superblock_security_struct {
-	struct super_block *sb;
-	u32 sid;
-	u32 def_sid;
-	u32 mntpoint_sid;
-	short unsigned int behavior;
-	short unsigned int flags;
-	struct mutex lock;
-	struct list_head isec_head;
-	spinlock_t isec_lock;
-};
-
-struct msg_security_struct {
-	u32 sid;
-};
-
-struct ipc_security_struct {
-	u16 sclass;
-	u32 sid;
-};
-
-struct sk_security_struct {
-	enum {
-		NLBL_UNSET = 0,
-		NLBL_REQUIRE = 1,
-		NLBL_LABELED = 2,
-		NLBL_REQSKB = 3,
-		NLBL_CONNLABELED = 4,
-	} nlbl_state;
-	struct netlbl_lsm_secattr *nlbl_secattr;
-	u32 sid;
-	u32 peer_sid;
-	u16 sclass;
-	enum {
-		SCTP_ASSOC_UNSET = 0,
-		SCTP_ASSOC_SET = 1,
-	} sctp_assoc_state;
-};
-
-struct tun_security_struct {
-	u32 sid;
-};
-
-struct key_security_struct {
-	u32 sid;
-};
-
-struct bpf_security_struct {
-	u32 sid;
-};
-
-struct perf_event_security_struct {
-	u32 sid;
-};
-
-struct selinux_mnt_opts {
-	const char *fscontext;
-	const char *context;
-	const char *rootcontext;
-	const char *defcontext;
-};
-
-enum {
-	Opt_error___2 = 4294967295,
-	Opt_context = 0,
-	Opt_defcontext = 1,
-	Opt_fscontext = 2,
-	Opt_rootcontext = 3,
-	Opt_seclabel = 4,
-};
-
-enum sel_inos {
-	SEL_ROOT_INO = 2,
-	SEL_LOAD = 3,
-	SEL_ENFORCE = 4,
-	SEL_CONTEXT = 5,
-	SEL_ACCESS = 6,
-	SEL_CREATE = 7,
-	SEL_RELABEL = 8,
-	SEL_USER = 9,
-	SEL_POLICYVERS = 10,
-	SEL_COMMIT_BOOLS = 11,
-	SEL_MLS = 12,
-	SEL_DISABLE = 13,
-	SEL_MEMBER = 14,
-	SEL_CHECKREQPROT = 15,
-	SEL_COMPAT_NET = 16,
-	SEL_REJECT_UNKNOWN = 17,
-	SEL_DENY_UNKNOWN = 18,
-	SEL_STATUS = 19,
-	SEL_POLICY = 20,
-	SEL_VALIDATE_TRANS = 21,
-	SEL_INO_NEXT = 22,
-};
-
-struct selinux_fs_info {
-	struct dentry *bool_dir;
-	unsigned int bool_num;
-	char **bool_pending_names;
-	unsigned int *bool_pending_values;
-	struct dentry *class_dir;
-	long unsigned int last_class_ino;
-	bool policy_opened;
-	struct dentry *policycap_dir;
-	long unsigned int last_ino;
-	struct selinux_state *state;
-	struct super_block *sb;
-};
-
-struct policy_load_memory {
-	size_t len;
-	void *data;
-};
-
-enum {
-	SELNL_MSG_SETENFORCE = 16,
-	SELNL_MSG_POLICYLOAD = 17,
-	SELNL_MSG_MAX = 18,
-};
-
-enum selinux_nlgroups {
-	SELNLGRP_NONE = 0,
-	SELNLGRP_AVC = 1,
-	__SELNLGRP_MAX = 2,
-};
-
-struct selnl_msg_setenforce {
-	__s32 val;
-};
-
-struct selnl_msg_policyload {
-	__u32 seqno;
-};
-
-enum {
-	XFRM_MSG_BASE = 16,
-	XFRM_MSG_NEWSA = 16,
-	XFRM_MSG_DELSA = 17,
-	XFRM_MSG_GETSA = 18,
-	XFRM_MSG_NEWPOLICY = 19,
-	XFRM_MSG_DELPOLICY = 20,
-	XFRM_MSG_GETPOLICY = 21,
-	XFRM_MSG_ALLOCSPI = 22,
-	XFRM_MSG_ACQUIRE = 23,
-	XFRM_MSG_EXPIRE = 24,
-	XFRM_MSG_UPDPOLICY = 25,
-	XFRM_MSG_UPDSA = 26,
-	XFRM_MSG_POLEXPIRE = 27,
-	XFRM_MSG_FLUSHSA = 28,
-	XFRM_MSG_FLUSHPOLICY = 29,
-	XFRM_MSG_NEWAE = 30,
-	XFRM_MSG_GETAE = 31,
-	XFRM_MSG_REPORT = 32,
-	XFRM_MSG_MIGRATE = 33,
-	XFRM_MSG_NEWSADINFO = 34,
-	XFRM_MSG_GETSADINFO = 35,
-	XFRM_MSG_NEWSPDINFO = 36,
-	XFRM_MSG_GETSPDINFO = 37,
-	XFRM_MSG_MAPPING = 38,
-	__XFRM_MSG_MAX = 39,
-};
-
-enum {
-	RTM_BASE = 16,
-	RTM_NEWLINK = 16,
-	RTM_DELLINK = 17,
-	RTM_GETLINK = 18,
-	RTM_SETLINK = 19,
-	RTM_NEWADDR = 20,
-	RTM_DELADDR = 21,
-	RTM_GETADDR = 22,
-	RTM_NEWROUTE = 24,
-	RTM_DELROUTE = 25,
-	RTM_GETROUTE = 26,
-	RTM_NEWNEIGH = 28,
-	RTM_DELNEIGH = 29,
-	RTM_GETNEIGH = 30,
-	RTM_NEWRULE = 32,
-	RTM_DELRULE = 33,
-	RTM_GETRULE = 34,
-	RTM_NEWQDISC = 36,
-	RTM_DELQDISC = 37,
-	RTM_GETQDISC = 38,
-	RTM_NEWTCLASS = 40,
-	RTM_DELTCLASS = 41,
-	RTM_GETTCLASS = 42,
-	RTM_NEWTFILTER = 44,
-	RTM_DELTFILTER = 45,
-	RTM_GETTFILTER = 46,
-	RTM_NEWACTION = 48,
-	RTM_DELACTION = 49,
-	RTM_GETACTION = 50,
-	RTM_NEWPREFIX = 52,
-	RTM_GETMULTICAST = 58,
-	RTM_GETANYCAST = 62,
-	RTM_NEWNEIGHTBL = 64,
-	RTM_GETNEIGHTBL = 66,
-	RTM_SETNEIGHTBL = 67,
-	RTM_NEWNDUSEROPT = 68,
-	RTM_NEWADDRLABEL = 72,
-	RTM_DELADDRLABEL = 73,
-	RTM_GETADDRLABEL = 74,
-	RTM_GETDCB = 78,
-	RTM_SETDCB = 79,
-	RTM_NEWNETCONF = 80,
-	RTM_DELNETCONF = 81,
-	RTM_GETNETCONF = 82,
-	RTM_NEWMDB = 84,
-	RTM_DELMDB = 85,
-	RTM_GETMDB = 86,
-	RTM_NEWNSID = 88,
-	RTM_DELNSID = 89,
-	RTM_GETNSID = 90,
-	RTM_NEWSTATS = 92,
-	RTM_GETSTATS = 94,
-	RTM_NEWCACHEREPORT = 96,
-	RTM_NEWCHAIN = 100,
-	RTM_DELCHAIN = 101,
-	RTM_GETCHAIN = 102,
-	RTM_NEWNEXTHOP = 104,
-	RTM_DELNEXTHOP = 105,
-	RTM_GETNEXTHOP = 106,
-	RTM_NEWLINKPROP = 108,
-	RTM_DELLINKPROP = 109,
-	RTM_GETLINKPROP = 110,
-	RTM_NEWVLAN = 112,
-	RTM_DELVLAN = 113,
-	RTM_GETVLAN = 114,
-	__RTM_MAX = 115,
-};
-
 struct nlmsg_perm {
 	u16 nlmsg_type;
 	u32 perm;
 };
 
-struct netif_security_struct {
-	struct net *ns;
-	int ifindex;
-	u32 sid;
-};
-
-struct sel_netif {
-	struct list_head list;
-	struct netif_security_struct nsec;
-	struct callback_head callback_head;
-};
-
-struct netnode_security_struct {
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} addr;
-	u32 sid;
-	u16 family;
-};
-
-struct sel_netnode_bkt {
-	unsigned int size;
-	struct list_head list;
-};
-
-struct sel_netnode {
-	struct netnode_security_struct nsec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
 struct netport_security_struct {
 	u32 sid;
 	u16 port;
@@ -49007,2409 +111524,14 @@
 	struct callback_head rcu;
 };
 
-struct selinux_kernel_status {
-	u32 version;
-	u32 sequence;
-	u32 enforcing;
-	u32 policyload;
-	u32 deny_unknown;
-};
-
-struct ebitmap_node {
-	struct ebitmap_node *next;
-	long unsigned int maps[6];
-	u32 startbit;
-};
-
-struct ebitmap {
-	struct ebitmap_node *node;
-	u32 highbit;
-};
-
-struct policy_file {
-	char *data;
-	size_t len;
-};
-
-struct hashtab_node {
-	void *key;
-	void *datum;
-	struct hashtab_node *next;
-};
-
-struct hashtab {
-	struct hashtab_node **htable;
-	u32 size;
-	u32 nel;
-};
-
-struct hashtab_info {
-	u32 slots_used;
-	u32 max_chain_len;
-};
-
-struct hashtab_key_params {
-	u32 (*hash)(const void *);
-	int (*cmp)(const void *, const void *);
-};
-
-struct symtab {
-	struct hashtab table;
-	u32 nprim;
-};
-
-struct mls_level {
-	u32 sens;
-	struct ebitmap cat;
-};
-
-struct mls_range {
-	struct mls_level level[2];
-};
-
-struct context {
-	u32 user;
-	u32 role;
-	u32 type;
-	u32 len;
-	struct mls_range range;
-	char *str;
-};
-
-struct sidtab_str_cache;
-
-struct sidtab_entry {
-	u32 sid;
-	u32 hash;
-	struct context context;
-	struct sidtab_str_cache *cache;
-	struct hlist_node list;
-};
-
-struct sidtab_str_cache {
-	struct callback_head rcu_member;
-	struct list_head lru_member;
-	struct sidtab_entry *parent;
-	u32 len;
-	char str[0];
-};
-
-struct sidtab_node_inner;
-
-struct sidtab_node_leaf;
-
-union sidtab_entry_inner {
-	struct sidtab_node_inner *ptr_inner;
-	struct sidtab_node_leaf *ptr_leaf;
-};
-
-struct sidtab_node_inner {
-	union sidtab_entry_inner entries[512];
-};
-
-struct sidtab_node_leaf {
-	struct sidtab_entry entries[39];
-};
-
-struct sidtab_isid_entry {
-	int set;
-	struct sidtab_entry entry;
-};
-
-struct sidtab;
-
-struct sidtab_convert_params {
-	int (*func)(struct context *, struct context *, void *);
-	void *args;
-	struct sidtab *target;
-};
-
-struct sidtab {
-	union sidtab_entry_inner roots[4];
-	u32 count;
-	struct sidtab_convert_params *convert;
-	spinlock_t lock;
-	u32 cache_free_slots;
-	struct list_head cache_lru_list;
-	spinlock_t cache_lock;
-	struct sidtab_isid_entry isids[27];
-	struct hlist_head context_to_sid[512];
-};
-
-struct avtab_key {
-	u16 source_type;
-	u16 target_type;
-	u16 target_class;
-	u16 specified;
-};
-
-struct avtab_extended_perms {
-	u8 specified;
-	u8 driver;
-	struct extended_perms_data perms;
-};
-
-struct avtab_datum {
-	union {
-		u32 data;
-		struct avtab_extended_perms *xperms;
-	} u;
-};
-
-struct avtab_node {
-	struct avtab_key key;
-	struct avtab_datum datum;
-	struct avtab_node *next;
-};
-
-struct avtab {
-	struct avtab_node **htable;
-	u32 nel;
-	u32 nslot;
-	u32 mask;
-};
-
-struct type_set;
-
-struct constraint_expr {
-	u32 expr_type;
-	u32 attr;
-	u32 op;
-	struct ebitmap names;
-	struct type_set *type_names;
-	struct constraint_expr *next;
-};
-
-struct type_set {
-	struct ebitmap types;
-	struct ebitmap negset;
-	u32 flags;
-};
-
-struct constraint_node {
-	u32 permissions;
-	struct constraint_expr *expr;
-	struct constraint_node *next;
-};
-
-struct common_datum {
-	u32 value;
-	struct symtab permissions;
-};
-
-struct class_datum {
-	u32 value;
-	char *comkey;
-	struct common_datum *comdatum;
-	struct symtab permissions;
-	struct constraint_node *constraints;
-	struct constraint_node *validatetrans;
-	char default_user;
-	char default_role;
-	char default_type;
-	char default_range;
-};
-
-struct role_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap dominates;
-	struct ebitmap types;
-};
-
-struct role_allow {
-	u32 role;
-	u32 new_role;
-	struct role_allow *next;
-};
-
-struct type_datum {
-	u32 value;
-	u32 bounds;
-	unsigned char primary;
-	unsigned char attribute;
-};
-
-struct user_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap roles;
-	struct mls_range range;
-	struct mls_level dfltlevel;
-};
-
-struct cond_bool_datum {
-	__u32 value;
-	int state;
-};
-
-struct ocontext {
-	union {
-		char *name;
-		struct {
-			u8 protocol;
-			u16 low_port;
-			u16 high_port;
-		} port;
-		struct {
-			u32 addr;
-			u32 mask;
-		} node;
-		struct {
-			u32 addr[4];
-			u32 mask[4];
-		} node6;
-		struct {
-			u64 subnet_prefix;
-			u16 low_pkey;
-			u16 high_pkey;
-		} ibpkey;
-		struct {
-			char *dev_name;
-			u8 port;
-		} ibendport;
-	} u;
-	union {
-		u32 sclass;
-		u32 behavior;
-	} v;
-	struct context context[2];
-	u32 sid[2];
-	struct ocontext *next;
-};
-
-struct genfs {
-	char *fstype;
-	struct ocontext *head;
-	struct genfs *next;
-};
-
-struct cond_node;
-
-struct policydb {
-	int mls_enabled;
-	struct symtab symtab[8];
-	char **sym_val_to_name[8];
-	struct class_datum **class_val_to_struct;
-	struct role_datum **role_val_to_struct;
-	struct user_datum **user_val_to_struct;
-	struct type_datum **type_val_to_struct;
-	struct avtab te_avtab;
-	struct hashtab role_tr;
-	struct ebitmap filename_trans_ttypes;
-	struct hashtab filename_trans;
-	u32 compat_filename_trans_count;
-	struct cond_bool_datum **bool_val_to_struct;
-	struct avtab te_cond_avtab;
-	struct cond_node *cond_list;
-	u32 cond_list_len;
-	struct role_allow *role_allow;
-	struct ocontext *ocontexts[9];
-	struct genfs *genfs;
-	struct hashtab range_tr;
-	struct ebitmap *type_attr_map_array;
-	struct ebitmap policycaps;
-	struct ebitmap permissive_map;
-	size_t len;
-	unsigned int policyvers;
-	unsigned int reject_unknown: 1;
-	unsigned int allow_unknown: 1;
-	u16 process_class;
-	u32 process_trans_perms;
-};
-
-struct perm_datum {
-	u32 value;
-};
-
-struct role_trans_key {
-	u32 role;
-	u32 type;
-	u32 tclass;
-};
-
-struct role_trans_datum {
-	u32 new_role;
-};
-
-struct filename_trans_key {
-	u32 ttype;
-	u16 tclass;
-	const char *name;
-};
-
-struct filename_trans_datum {
-	struct ebitmap stypes;
-	u32 otype;
-	struct filename_trans_datum *next;
-};
-
-struct level_datum {
-	struct mls_level *level;
-	unsigned char isalias;
-};
-
-struct cat_datum {
-	u32 value;
-	unsigned char isalias;
-};
-
-struct range_trans {
-	u32 source_type;
-	u32 target_type;
-	u32 target_class;
-};
-
-struct cond_expr_node;
-
-struct cond_expr {
-	struct cond_expr_node *nodes;
-	u32 len;
-};
-
-struct cond_av_list {
-	struct avtab_node **nodes;
-	u32 len;
-};
-
-struct cond_node {
-	int cur_state;
-	struct cond_expr expr;
-	struct cond_av_list true_list;
-	struct cond_av_list false_list;
-};
-
-struct policy_data {
-	struct policydb *p;
-	void *fp;
-};
-
-struct cond_expr_node {
-	u32 expr_type;
-	u32 bool;
-};
-
-struct policydb_compat_info {
-	int version;
-	int sym_num;
-	int ocon_num;
-};
-
-struct selinux_mapping;
-
-struct selinux_map {
-	struct selinux_mapping *mapping;
-	u16 size;
-};
-
-struct selinux_policy {
-	struct sidtab *sidtab;
-	struct policydb policydb;
-	struct selinux_map map;
-	u32 latest_granting;
-};
-
-struct selinux_mapping {
-	u16 value;
-	unsigned int num_perms;
-	u32 perms[32];
-};
-
-struct convert_context_args {
-	struct selinux_state *state;
-	struct policydb *oldp;
-	struct policydb *newp;
-};
-
-struct selinux_audit_rule {
-	u32 au_seqno;
-	struct context au_ctxt;
-};
-
-struct cond_insertf_data {
-	struct policydb *p;
-	struct avtab_node **dst;
-	struct cond_av_list *other;
-};
-
-struct rt6key {
-	struct in6_addr addr;
-	int plen;
-};
-
-struct rtable;
-
-struct fnhe_hash_bucket;
-
-struct fib_nh_common {
-	struct net_device *nhc_dev;
-	int nhc_oif;
-	unsigned char nhc_scope;
-	u8 nhc_family;
-	u8 nhc_gw_family;
-	unsigned char nhc_flags;
-	struct lwtunnel_state *nhc_lwtstate;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} nhc_gw;
-	int nhc_weight;
-	atomic_t nhc_upper_bound;
-	struct rtable **nhc_pcpu_rth_output;
-	struct rtable *nhc_rth_input;
-	struct fnhe_hash_bucket *nhc_exceptions;
-};
-
-struct rt6_exception_bucket;
-
-struct fib6_nh {
-	struct fib_nh_common nh_common;
-	long unsigned int last_probe;
-	struct rt6_info **rt6i_pcpu;
-	struct rt6_exception_bucket *rt6i_exception_bucket;
-};
-
-struct fib6_node;
-
-struct dst_metrics;
-
-struct nexthop;
-
-struct fib6_info {
-	struct fib6_table *fib6_table;
-	struct fib6_info *fib6_next;
-	struct fib6_node *fib6_node;
-	union {
-		struct list_head fib6_siblings;
-		struct list_head nh_list;
-	};
-	unsigned int fib6_nsiblings;
-	refcount_t fib6_ref;
-	long unsigned int expires;
-	struct dst_metrics *fib6_metrics;
-	struct rt6key fib6_dst;
-	u32 fib6_flags;
-	struct rt6key fib6_src;
-	struct rt6key fib6_prefsrc;
-	u32 fib6_metric;
-	u8 fib6_protocol;
-	u8 fib6_type;
-	u8 should_flush: 1;
-	u8 dst_nocount: 1;
-	u8 dst_nopolicy: 1;
-	u8 fib6_destroying: 1;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 2;
-	struct callback_head rcu;
-	struct nexthop *nh;
-	struct fib6_nh fib6_nh[0];
-};
-
-struct uncached_list;
-
-struct rt6_info {
-	struct dst_entry dst;
-	struct fib6_info *from;
-	int sernum;
-	struct rt6key rt6i_dst;
-	struct rt6key rt6i_src;
-	struct in6_addr rt6i_gateway;
-	struct inet6_dev *rt6i_idev;
-	u32 rt6i_flags;
-	struct list_head rt6i_uncached;
-	struct uncached_list *rt6i_uncached_list;
-	short unsigned int rt6i_nfheader_len;
-};
-
-struct rt6_statistics {
-	__u32 fib_nodes;
-	__u32 fib_route_nodes;
-	__u32 fib_rt_entries;
-	__u32 fib_rt_cache;
-	__u32 fib_discarded_routes;
-	atomic_t fib_rt_alloc;
-	atomic_t fib_rt_uncache;
-};
-
-struct fib6_node {
-	struct fib6_node *parent;
-	struct fib6_node *left;
-	struct fib6_node *right;
-	struct fib6_node *subtree;
-	struct fib6_info *leaf;
-	__u16 fn_bit;
-	__u16 fn_flags;
-	int fn_sernum;
-	struct fib6_info *rr_ptr;
-	struct callback_head rcu;
-};
-
-struct fib6_table {
-	struct hlist_node tb6_hlist;
-	u32 tb6_id;
-	spinlock_t tb6_lock;
-	struct fib6_node tb6_root;
-	struct inet_peer_base tb6_peers;
-	unsigned int flags;
-	unsigned int fib_seq;
-};
-
-typedef union {
-	__be32 a4;
-	__be32 a6[4];
-	struct in6_addr in6;
-} xfrm_address_t;
-
-struct xfrm_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u8 proto;
-};
-
-struct xfrm_selector {
-	xfrm_address_t daddr;
-	xfrm_address_t saddr;
-	__be16 dport;
-	__be16 dport_mask;
-	__be16 sport;
-	__be16 sport_mask;
-	__u16 family;
-	__u8 prefixlen_d;
-	__u8 prefixlen_s;
-	__u8 proto;
-	int ifindex;
-	__kernel_uid32_t user;
-};
-
-struct xfrm_lifetime_cfg {
-	__u64 soft_byte_limit;
-	__u64 hard_byte_limit;
-	__u64 soft_packet_limit;
-	__u64 hard_packet_limit;
-	__u64 soft_add_expires_seconds;
-	__u64 hard_add_expires_seconds;
-	__u64 soft_use_expires_seconds;
-	__u64 hard_use_expires_seconds;
-};
-
-struct xfrm_lifetime_cur {
-	__u64 bytes;
-	__u64 packets;
-	__u64 add_time;
-	__u64 use_time;
-};
-
-struct xfrm_replay_state {
-	__u32 oseq;
-	__u32 seq;
-	__u32 bitmap;
-};
-
-struct xfrm_replay_state_esn {
-	unsigned int bmp_len;
-	__u32 oseq;
-	__u32 seq;
-	__u32 oseq_hi;
-	__u32 seq_hi;
-	__u32 replay_window;
-	__u32 bmp[0];
-};
-
-struct xfrm_algo {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_auth {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_trunc_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_aead {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_icv_len;
-	char alg_key[0];
-};
-
-struct xfrm_stats {
-	__u32 replay_window;
-	__u32 replay;
-	__u32 integrity_failed;
-};
-
-enum {
-	XFRM_POLICY_TYPE_MAIN = 0,
-	XFRM_POLICY_TYPE_SUB = 1,
-	XFRM_POLICY_TYPE_MAX = 2,
-	XFRM_POLICY_TYPE_ANY = 255,
-};
-
-struct xfrm_encap_tmpl {
-	__u16 encap_type;
-	__be16 encap_sport;
-	__be16 encap_dport;
-	xfrm_address_t encap_oa;
-};
-
-enum xfrm_attr_type_t {
-	XFRMA_UNSPEC = 0,
-	XFRMA_ALG_AUTH = 1,
-	XFRMA_ALG_CRYPT = 2,
-	XFRMA_ALG_COMP = 3,
-	XFRMA_ENCAP = 4,
-	XFRMA_TMPL = 5,
-	XFRMA_SA = 6,
-	XFRMA_POLICY = 7,
-	XFRMA_SEC_CTX = 8,
-	XFRMA_LTIME_VAL = 9,
-	XFRMA_REPLAY_VAL = 10,
-	XFRMA_REPLAY_THRESH = 11,
-	XFRMA_ETIMER_THRESH = 12,
-	XFRMA_SRCADDR = 13,
-	XFRMA_COADDR = 14,
-	XFRMA_LASTUSED = 15,
-	XFRMA_POLICY_TYPE = 16,
-	XFRMA_MIGRATE = 17,
-	XFRMA_ALG_AEAD = 18,
-	XFRMA_KMADDRESS = 19,
-	XFRMA_ALG_AUTH_TRUNC = 20,
-	XFRMA_MARK = 21,
-	XFRMA_TFCPAD = 22,
-	XFRMA_REPLAY_ESN_VAL = 23,
-	XFRMA_SA_EXTRA_FLAGS = 24,
-	XFRMA_PROTO = 25,
-	XFRMA_ADDRESS_FILTER = 26,
-	XFRMA_PAD = 27,
-	XFRMA_OFFLOAD_DEV = 28,
-	XFRMA_SET_MARK = 29,
-	XFRMA_SET_MARK_MASK = 30,
-	XFRMA_IF_ID = 31,
-	__XFRMA_MAX = 32,
-};
-
-struct xfrm_mark {
-	__u32 v;
-	__u32 m;
-};
-
-struct xfrm_address_filter {
-	xfrm_address_t saddr;
-	xfrm_address_t daddr;
-	__u16 family;
-	__u8 splen;
-	__u8 dplen;
-};
-
-struct xfrm_state_walk {
-	struct list_head all;
-	u8 state;
-	u8 dying;
-	u8 proto;
-	u32 seq;
-	struct xfrm_address_filter *filter;
-};
-
-struct xfrm_state_offload {
-	struct net_device *dev;
-	struct net_device *real_dev;
-	long unsigned int offload_handle;
-	unsigned int num_exthdrs;
-	u8 flags;
-};
-
-struct xfrm_mode {
-	u8 encap;
-	u8 family;
-	u8 flags;
-};
-
-struct xfrm_replay;
-
-struct xfrm_type;
-
-struct xfrm_type_offload;
-
-struct xfrm_state {
-	possible_net_t xs_net;
-	union {
-		struct hlist_node gclist;
-		struct hlist_node bydst;
-	};
-	struct hlist_node bysrc;
-	struct hlist_node byspi;
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct xfrm_id id;
-	struct xfrm_selector sel;
-	struct xfrm_mark mark;
-	u32 if_id;
-	u32 tfcpad;
-	u32 genid;
-	struct xfrm_state_walk km;
-	struct {
-		u32 reqid;
-		u8 mode;
-		u8 replay_window;
-		u8 aalgo;
-		u8 ealgo;
-		u8 calgo;
-		u8 flags;
-		u16 family;
-		xfrm_address_t saddr;
-		int header_len;
-		int trailer_len;
-		u32 extra_flags;
-		struct xfrm_mark smark;
-	} props;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_algo_auth *aalg;
-	struct xfrm_algo *ealg;
-	struct xfrm_algo *calg;
-	struct xfrm_algo_aead *aead;
-	const char *geniv;
-	struct xfrm_encap_tmpl *encap;
-	struct sock *encap_sk;
-	xfrm_address_t *coaddr;
-	struct xfrm_state *tunnel;
-	atomic_t tunnel_users;
-	struct xfrm_replay_state replay;
-	struct xfrm_replay_state_esn *replay_esn;
-	struct xfrm_replay_state preplay;
-	struct xfrm_replay_state_esn *preplay_esn;
-	const struct xfrm_replay *repl;
-	u32 xflags;
-	u32 replay_maxage;
-	u32 replay_maxdiff;
-	struct timer_list rtimer;
-	struct xfrm_stats stats;
-	struct xfrm_lifetime_cur curlft;
-	struct hrtimer mtimer;
-	struct xfrm_state_offload xso;
-	long int saved_tmo;
-	time64_t lastused;
-	struct page_frag xfrag;
-	const struct xfrm_type *type;
-	struct xfrm_mode inner_mode;
-	struct xfrm_mode inner_mode_iaf;
-	struct xfrm_mode outer_mode;
-	const struct xfrm_type_offload *type_offload;
-	struct xfrm_sec_ctx *security;
-	void *data;
-};
-
-struct dst_metrics {
-	u32 metrics[17];
-	refcount_t refcnt;
-};
-
-struct xfrm_policy_walk_entry {
-	struct list_head all;
-	u8 dead;
-};
-
-struct xfrm_policy_queue {
-	struct sk_buff_head hold_queue;
-	struct timer_list hold_timer;
-	long unsigned int timeout;
-};
-
-struct xfrm_tmpl {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	short unsigned int encap_family;
-	u32 reqid;
-	u8 mode;
-	u8 share;
-	u8 optional;
-	u8 allalgs;
-	u32 aalgos;
-	u32 ealgos;
-	u32 calgos;
-};
-
-struct xfrm_policy {
-	possible_net_t xp_net;
-	struct hlist_node bydst;
-	struct hlist_node byidx;
-	rwlock_t lock;
-	refcount_t refcnt;
-	u32 pos;
-	struct timer_list timer;
-	atomic_t genid;
-	u32 priority;
-	u32 index;
-	u32 if_id;
-	struct xfrm_mark mark;
-	struct xfrm_selector selector;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_policy_walk_entry walk;
-	struct xfrm_policy_queue polq;
-	bool bydst_reinsert;
-	u8 type;
-	u8 action;
-	u8 flags;
-	u8 xfrm_nr;
-	u16 family;
-	struct xfrm_sec_ctx *security;
-	struct xfrm_tmpl xfrm_vec[6];
-	struct hlist_node bydst_inexact_list;
-	struct callback_head rcu;
-};
-
-struct udp_hslot;
-
-struct udp_table {
-	struct udp_hslot *hash;
-	struct udp_hslot *hash2;
-	unsigned int mask;
-	unsigned int log;
-};
-
-struct fib_nh_exception {
-	struct fib_nh_exception *fnhe_next;
-	int fnhe_genid;
-	__be32 fnhe_daddr;
-	u32 fnhe_pmtu;
-	bool fnhe_mtu_locked;
-	__be32 fnhe_gw;
-	long unsigned int fnhe_expires;
-	struct rtable *fnhe_rth_input;
-	struct rtable *fnhe_rth_output;
-	long unsigned int fnhe_stamp;
-	struct callback_head rcu;
-};
-
-struct rtable {
-	struct dst_entry dst;
-	int rt_genid;
-	unsigned int rt_flags;
-	__u16 rt_type;
-	__u8 rt_is_input;
-	__u8 rt_uses_gateway;
-	int rt_iif;
-	u8 rt_gw_family;
-	union {
-		__be32 rt_gw4;
-		struct in6_addr rt_gw6;
-	};
-	u32 rt_mtu_locked: 1;
-	u32 rt_pmtu: 31;
-	struct list_head rt_uncached;
-	struct uncached_list *rt_uncached_list;
-};
-
-struct fnhe_hash_bucket {
-	struct fib_nh_exception *chain;
-};
-
-struct rt6_exception_bucket {
-	struct hlist_head chain;
-	int depth;
-};
-
-struct xfrm_replay {
-	void (*advance)(struct xfrm_state *, __be32);
-	int (*check)(struct xfrm_state *, struct sk_buff *, __be32);
-	int (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);
-	void (*notify)(struct xfrm_state *, int);
-	int (*overflow)(struct xfrm_state *, struct sk_buff *);
-};
-
-struct xfrm_type {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	u8 flags;
-	int (*init_state)(struct xfrm_state *);
-	void (*destructor)(struct xfrm_state *);
-	int (*input)(struct xfrm_state *, struct sk_buff *);
-	int (*output)(struct xfrm_state *, struct sk_buff *);
-	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
-	int (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);
-};
-
-struct xfrm_type_offload {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	void (*encap)(struct xfrm_state *, struct sk_buff *);
-	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
-	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
-};
-
-struct xfrm_dst {
-	union {
-		struct dst_entry dst;
-		struct rtable rt;
-		struct rt6_info rt6;
-	} u;
-	struct dst_entry *route;
-	struct dst_entry *child;
-	struct dst_entry *path;
-	struct xfrm_policy *pols[2];
-	int num_pols;
-	int num_xfrms;
-	u32 xfrm_genid;
-	u32 policy_genid;
-	u32 route_mtu_cached;
-	u32 child_mtu_cached;
-	u32 route_cookie;
-	u32 path_cookie;
-};
-
-struct xfrm_offload {
-	struct {
-		__u32 low;
-		__u32 hi;
-	} seq;
-	__u32 flags;
-	__u32 status;
-	__u8 proto;
-};
-
-struct sec_path {
-	int len;
-	int olen;
-	struct xfrm_state *xvec[6];
-	struct xfrm_offload ovec[1];
-};
-
-struct udp_hslot {
-	struct hlist_head head;
-	int count;
-	spinlock_t lock;
-};
-
-struct smack_audit_data {
-	const char *function;
-	char *subject;
-	char *object;
-	char *request;
-	int result;
-};
-
-struct smack_known {
-	struct list_head list;
-	struct hlist_node smk_hashed;
-	char *smk_known;
-	u32 smk_secid;
-	struct netlbl_lsm_secattr smk_netlabel;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-};
-
-struct superblock_smack {
-	struct smack_known *smk_root;
-	struct smack_known *smk_floor;
-	struct smack_known *smk_hat;
-	struct smack_known *smk_default;
-	int smk_flags;
-};
-
-struct socket_smack {
-	struct smack_known *smk_out;
-	struct smack_known *smk_in;
-	struct smack_known *smk_packet;
-	int smk_state;
-};
-
-struct inode_smack {
-	struct smack_known *smk_inode;
-	struct smack_known *smk_task;
-	struct smack_known *smk_mmap;
-	int smk_flags;
-};
-
-struct task_smack {
-	struct smack_known *smk_task;
-	struct smack_known *smk_forked;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-	struct list_head smk_relabel;
-};
-
-struct smack_rule {
-	struct list_head list;
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access;
-};
-
-struct smk_net4addr {
-	struct list_head list;
-	struct in_addr smk_host;
-	struct in_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smk_net6addr {
-	struct list_head list;
-	struct in6_addr smk_host;
-	struct in6_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smack_known_list_elem {
-	struct list_head list;
-	struct smack_known *smk_label;
-};
-
-enum {
-	Opt_error___3 = 4294967295,
-	Opt_fsdefault = 0,
-	Opt_fsfloor = 1,
-	Opt_fshat = 2,
-	Opt_fsroot = 3,
-	Opt_fstransmute = 4,
-};
-
-struct smk_audit_info {
-	struct common_audit_data a;
-	struct smack_audit_data sad;
-};
-
-struct smack_mnt_opts {
-	const char *fsdefault;
-	const char *fsfloor;
-	const char *fshat;
-	const char *fsroot;
-	const char *fstransmute;
-};
-
-struct netlbl_audit {
-	u32 secid;
-	kuid_t loginuid;
-	unsigned int sessionid;
-};
-
-struct cipso_v4_std_map_tbl {
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} lvl;
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} cat;
-};
-
-struct cipso_v4_doi {
-	u32 doi;
-	u32 type;
-	union {
-		struct cipso_v4_std_map_tbl *std;
-	} map;
-	u8 tags[5];
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-enum smk_inos {
-	SMK_ROOT_INO = 2,
-	SMK_LOAD = 3,
-	SMK_CIPSO = 4,
-	SMK_DOI = 5,
-	SMK_DIRECT = 6,
-	SMK_AMBIENT = 7,
-	SMK_NET4ADDR = 8,
-	SMK_ONLYCAP = 9,
-	SMK_LOGGING = 10,
-	SMK_LOAD_SELF = 11,
-	SMK_ACCESSES = 12,
-	SMK_MAPPED = 13,
-	SMK_LOAD2 = 14,
-	SMK_LOAD_SELF2 = 15,
-	SMK_ACCESS2 = 16,
-	SMK_CIPSO2 = 17,
-	SMK_REVOKE_SUBJ = 18,
-	SMK_CHANGE_RULE = 19,
-	SMK_SYSLOG = 20,
-	SMK_PTRACE = 21,
-	SMK_NET6ADDR = 23,
-	SMK_RELABEL_SELF = 24,
-};
-
-struct smack_parsed_rule {
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access1;
-	int smk_access2;
-};
-
-struct sockaddr_un {
-	__kernel_sa_family_t sun_family;
-	char sun_path[108];
-};
-
-struct unix_address {
-	refcount_t refcnt;
-	int len;
-	unsigned int hash;
-	struct sockaddr_un name[0];
-};
-
-struct scm_stat {
-	atomic_t nr_fds;
-};
-
-struct unix_sock {
-	struct sock sk;
-	struct unix_address *addr;
-	struct path path;
-	struct mutex iolock;
-	struct mutex bindlock;
-	struct sock *peer;
-	struct list_head link;
-	atomic_long_t inflight;
-	spinlock_t lock;
-	long unsigned int gc_flags;
-	struct socket_wq peer_wq;
-	wait_queue_entry_t peer_wake;
-	struct scm_stat scm_stat;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef unsigned char Byte;
-
-typedef long unsigned int uLong;
-
-struct internal_state;
-
-struct z_stream_s {
-	const Byte *next_in;
-	uLong avail_in;
-	uLong total_in;
-	Byte *next_out;
-	uLong avail_out;
-	uLong total_out;
-	char *msg;
-	struct internal_state *state;
-	void *workspace;
-	int data_type;
-	uLong adler;
-	uLong reserved;
-};
-
-struct internal_state {
-	int dummy;
-};
-
-enum audit_mode {
-	AUDIT_NORMAL = 0,
-	AUDIT_QUIET_DENIED = 1,
-	AUDIT_QUIET = 2,
-	AUDIT_NOQUIET = 3,
-	AUDIT_ALL = 4,
-};
-
-enum aa_sfs_type {
-	AA_SFS_TYPE_BOOLEAN = 0,
-	AA_SFS_TYPE_STRING = 1,
-	AA_SFS_TYPE_U64 = 2,
-	AA_SFS_TYPE_FOPS = 3,
-	AA_SFS_TYPE_DIR = 4,
-};
-
-struct aa_sfs_entry {
-	const char *name;
-	struct dentry *dentry;
-	umode_t mode;
-	enum aa_sfs_type v_type;
-	union {
-		bool boolean;
-		char *string;
-		long unsigned int u64;
-		struct aa_sfs_entry *files;
-	} v;
-	const struct file_operations *file_ops;
-};
-
-enum aafs_ns_type {
-	AAFS_NS_DIR = 0,
-	AAFS_NS_PROFS = 1,
-	AAFS_NS_NS = 2,
-	AAFS_NS_RAW_DATA = 3,
-	AAFS_NS_LOAD = 4,
-	AAFS_NS_REPLACE = 5,
-	AAFS_NS_REMOVE = 6,
-	AAFS_NS_REVISION = 7,
-	AAFS_NS_COUNT = 8,
-	AAFS_NS_MAX_COUNT = 9,
-	AAFS_NS_SIZE = 10,
-	AAFS_NS_MAX_SIZE = 11,
-	AAFS_NS_OWNER = 12,
-	AAFS_NS_SIZEOF = 13,
-};
-
-enum aafs_prof_type {
-	AAFS_PROF_DIR = 0,
-	AAFS_PROF_PROFS = 1,
-	AAFS_PROF_NAME = 2,
-	AAFS_PROF_MODE = 3,
-	AAFS_PROF_ATTACH = 4,
-	AAFS_PROF_HASH = 5,
-	AAFS_PROF_RAW_DATA = 6,
-	AAFS_PROF_RAW_HASH = 7,
-	AAFS_PROF_RAW_ABI = 8,
-	AAFS_PROF_SIZEOF = 9,
-};
-
-struct table_header {
-	u16 td_id;
-	u16 td_flags;
-	u32 td_hilen;
-	u32 td_lolen;
-	char td_data[0];
-};
-
-struct aa_dfa {
-	struct kref count;
-	u16 flags;
-	u32 max_oob;
-	struct table_header *tables[8];
-};
-
-struct aa_policy {
-	const char *name;
-	char *hname;
-	struct list_head list;
-	struct list_head profiles;
-};
-
-struct aa_labelset {
-	rwlock_t lock;
-	struct rb_root root;
-};
-
-enum label_flags {
-	FLAG_HAT = 1,
-	FLAG_UNCONFINED = 2,
-	FLAG_NULL = 4,
-	FLAG_IX_ON_NAME_ERROR = 8,
-	FLAG_IMMUTIBLE = 16,
-	FLAG_USER_DEFINED = 32,
-	FLAG_NO_LIST_REF = 64,
-	FLAG_NS_COUNT = 128,
-	FLAG_IN_TREE = 256,
-	FLAG_PROFILE = 512,
-	FLAG_EXPLICIT = 1024,
-	FLAG_STALE = 2048,
-	FLAG_RENAMED = 4096,
-	FLAG_REVOKED = 8192,
-};
-
-struct aa_label;
-
-struct aa_proxy {
-	struct kref count;
-	struct aa_label *label;
-};
-
-struct aa_profile;
-
-struct aa_label {
-	struct kref count;
-	struct rb_node node;
-	struct callback_head rcu;
-	struct aa_proxy *proxy;
-	char *hname;
-	long int flags;
-	u32 secid;
-	int size;
-	struct aa_profile *vec[0];
-};
-
-struct label_it {
-	int i;
-	int j;
-};
-
-struct aa_policydb {
-	struct aa_dfa *dfa;
-	unsigned int start[17];
-};
-
-struct aa_domain {
-	int size;
-	char **table;
-};
-
-struct aa_file_rules {
-	unsigned int start;
-	struct aa_dfa *dfa;
-	struct aa_domain trans;
-};
-
-struct aa_caps {
-	kernel_cap_t allow;
-	kernel_cap_t audit;
-	kernel_cap_t denied;
-	kernel_cap_t quiet;
-	kernel_cap_t kill;
-	kernel_cap_t extended;
-};
-
-struct aa_rlimit {
-	unsigned int mask;
-	struct rlimit limits[16];
-};
-
-struct aa_ns;
-
-struct aa_secmark;
-
-struct aa_loaddata;
-
-struct aa_profile {
-	struct aa_policy base;
-	struct aa_profile *parent;
-	struct aa_ns *ns;
-	const char *rename;
-	const char *attach;
-	struct aa_dfa *xmatch;
-	int xmatch_len;
-	enum audit_mode audit;
-	long int mode;
-	u32 path_flags;
-	const char *disconnected;
-	int size;
-	struct aa_policydb policy;
-	struct aa_file_rules file;
-	struct aa_caps caps;
-	int xattr_count;
-	char **xattrs;
-	struct aa_rlimit rlimits;
-	int secmark_count;
-	struct aa_secmark *secmark;
-	struct aa_loaddata *rawdata;
-	unsigned char *hash;
-	char *dirname;
-	struct dentry *dents[9];
-	struct rhashtable *data;
-	struct aa_label label;
-};
-
-struct aa_perms {
-	u32 allow;
-	u32 audit;
-	u32 deny;
-	u32 quiet;
-	u32 kill;
-	u32 stop;
-	u32 complain;
-	u32 cond;
-	u32 hide;
-	u32 prompt;
-	u16 xindex;
-};
-
-struct path_cond {
-	kuid_t uid;
-	umode_t mode;
-};
-
-struct aa_secmark {
-	u8 audit;
-	u8 deny;
-	u32 secid;
-	char *label;
-};
-
-enum profile_mode {
-	APPARMOR_ENFORCE = 0,
-	APPARMOR_COMPLAIN = 1,
-	APPARMOR_KILL = 2,
-	APPARMOR_UNCONFINED = 3,
-};
-
-struct aa_data {
-	char *key;
-	u32 size;
-	char *data;
-	struct rhash_head head;
-};
-
-struct aa_ns_acct {
-	int max_size;
-	int max_count;
-	int size;
-	int count;
-};
-
-struct aa_ns {
-	struct aa_policy base;
-	struct aa_ns *parent;
-	struct mutex lock;
-	struct aa_ns_acct acct;
-	struct aa_profile *unconfined;
-	struct list_head sub_ns;
-	atomic_t uniq_null;
-	long int uniq_id;
-	int level;
-	long int revision;
-	wait_queue_head_t wait;
-	struct aa_labelset labels;
-	struct list_head rawdata_list;
-	struct dentry *dents[13];
-};
-
-struct aa_loaddata {
-	struct kref count;
-	struct list_head list;
-	struct work_struct work;
-	struct dentry *dents[6];
-	struct aa_ns *ns;
-	char *name;
-	size_t size;
-	size_t compressed_size;
-	long int revision;
-	int abi;
-	unsigned char *hash;
-	char *data;
-};
-
-enum {
-	AAFS_LOADDATA_ABI = 0,
-	AAFS_LOADDATA_REVISION = 1,
-	AAFS_LOADDATA_HASH = 2,
-	AAFS_LOADDATA_DATA = 3,
-	AAFS_LOADDATA_COMPRESSED_SIZE = 4,
-	AAFS_LOADDATA_DIR = 5,
-	AAFS_LOADDATA_NDENTS = 6,
-};
-
-struct rawdata_f_data {
-	struct aa_loaddata *loaddata;
-};
-
-struct aa_revision {
-	struct aa_ns *ns;
-	long int last_read;
-};
-
-struct multi_transaction {
-	struct kref count;
-	ssize_t size;
-	char data[0];
-};
-
-struct apparmor_audit_data {
-	int error;
-	int type;
-	const char *op;
-	struct aa_label *label;
-	const char *name;
-	const char *info;
-	u32 request;
-	u32 denied;
-	union {
-		struct {
-			struct aa_label *peer;
-			union {
-				struct {
-					const char *target;
-					kuid_t ouid;
-				} fs;
-				struct {
-					int rlim;
-					long unsigned int max;
-				} rlim;
-				struct {
-					int signal;
-					int unmappedsig;
-				};
-				struct {
-					int type;
-					int protocol;
-					struct sock *peer_sk;
-					void *addr;
-					int addrlen;
-				} net;
-			};
-		};
-		struct {
-			struct aa_profile *profile;
-			const char *ns;
-			long int pos;
-		} iface;
-		struct {
-			const char *src_name;
-			const char *type;
-			const char *trans;
-			const char *data;
-			long unsigned int flags;
-		} mnt;
-	};
-};
-
-enum audit_type {
-	AUDIT_APPARMOR_AUDIT = 0,
-	AUDIT_APPARMOR_ALLOWED = 1,
-	AUDIT_APPARMOR_DENIED = 2,
-	AUDIT_APPARMOR_HINT = 3,
-	AUDIT_APPARMOR_STATUS = 4,
-	AUDIT_APPARMOR_ERROR = 5,
-	AUDIT_APPARMOR_KILL = 6,
-	AUDIT_APPARMOR_AUTO = 7,
-};
-
 struct aa_audit_rule {
 	struct aa_label *label;
 };
 
-struct audit_cache {
-	struct aa_profile *profile;
-	kernel_cap_t caps;
-};
-
-struct aa_task_ctx {
-	struct aa_label *nnp;
-	struct aa_label *onexec;
-	struct aa_label *previous;
-	u64 token;
-};
-
-struct counted_str {
-	struct kref count;
-	char name[0];
-};
-
-struct match_workbuf {
-	unsigned int count;
-	unsigned int pos;
-	unsigned int len;
-	unsigned int size;
-	unsigned int history[24];
-};
-
-enum path_flags {
-	PATH_IS_DIR = 1,
-	PATH_CONNECT_PATH = 4,
-	PATH_CHROOT_REL = 8,
-	PATH_CHROOT_NSCONNECT = 16,
-	PATH_DELEGATE_DELETED = 32768,
-	PATH_MEDIATE_DELETED = 65536,
-};
-
-struct aa_load_ent {
-	struct list_head list;
-	struct aa_profile *new;
-	struct aa_profile *old;
-	struct aa_profile *rename;
-	const char *ns_name;
-};
-
-enum aa_code {
-	AA_U8 = 0,
-	AA_U16 = 1,
-	AA_U32 = 2,
-	AA_U64 = 3,
-	AA_NAME = 4,
-	AA_STRING = 5,
-	AA_BLOB = 6,
-	AA_STRUCT = 7,
-	AA_STRUCTEND = 8,
-	AA_LIST = 9,
-	AA_LISTEND = 10,
-	AA_ARRAY = 11,
-	AA_ARRAYEND = 12,
-};
-
-struct aa_ext {
-	void *start;
-	void *end;
-	void *pos;
-	u32 version;
-};
-
-struct aa_file_ctx {
-	spinlock_t lock;
-	struct aa_label *label;
-	u32 allow;
-};
-
-struct aa_sk_ctx {
-	struct aa_label *label;
-	struct aa_label *peer;
-};
-
-union aa_buffer {
-	struct list_head list;
-	char buffer[1];
-};
-
-struct ptrace_relation {
-	struct task_struct *tracer;
-	struct task_struct *tracee;
-	bool invalid;
-	struct list_head node;
-	struct callback_head rcu;
-};
-
-struct access_report_info {
-	struct callback_head work;
-	const char *access;
-	struct task_struct *target;
-	struct task_struct *agent;
-};
-
-enum sid_policy_type {
-	SIDPOL_DEFAULT = 0,
-	SIDPOL_CONSTRAINED = 1,
-	SIDPOL_ALLOWED = 2,
-};
-
-typedef union {
-	kuid_t uid;
-	kgid_t gid;
-} kid_t;
-
-enum setid_type {
-	UID = 0,
-	GID = 1,
-};
-
-struct setid_rule {
-	struct hlist_node next;
-	kid_t src_id;
-	kid_t dst_id;
-	enum setid_type type;
-};
-
-struct setid_ruleset {
-	struct hlist_head rules[256];
-	char *policy_str;
-	struct callback_head rcu;
-	enum setid_type type;
-};
-
-enum devcg_behavior {
-	DEVCG_DEFAULT_NONE = 0,
-	DEVCG_DEFAULT_ALLOW = 1,
-	DEVCG_DEFAULT_DENY = 2,
-};
-
-struct dev_exception_item {
-	u32 major;
-	u32 minor;
-	short int type;
-	short int access;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct dev_cgroup {
-	struct cgroup_subsys_state css;
-	struct list_head exceptions;
-	enum devcg_behavior behavior;
-};
-
-struct altha_list_struct {
-	struct path path;
-	char *spath;
-	char *spath_p;
-	struct list_head list;
-};
-
-struct kiosk_list_struct {
-	struct path path;
-	struct list_head list;
-};
-
-enum kiosk_cmd {
-	KIOSK_UNSPEC = 0,
-	KIOSK_REQUEST = 1,
-	KIOSK_REPLY = 2,
-	KIOSK_CMD_LAST = 3,
-};
-
-enum kiosk_mode {
-	KIOSK_PERMISSIVE = 0,
-	KIOSK_NONSYSTEM = 1,
-	KIOSK_MODE_LAST = 2,
-};
-
-enum kiosk_action {
-	KIOSK_SET_MODE = 0,
-	KIOSK_USERLIST_ADD = 1,
-	KIOSK_USERLIST_DEL = 2,
-	KIOSK_USER_LIST = 3,
-};
-
-enum kiosk_attrs {
-	KIOSK_NOATTR = 0,
-	KIOSK_ACTION = 1,
-	KIOSK_DATA = 2,
-	KIOSK_MAX_ATTR = 3,
-};
-
-enum integrity_status {
-	INTEGRITY_PASS = 0,
-	INTEGRITY_PASS_IMMUTABLE = 1,
-	INTEGRITY_FAIL = 2,
-	INTEGRITY_NOLABEL = 3,
-	INTEGRITY_NOXATTRS = 4,
-	INTEGRITY_UNKNOWN = 5,
-};
-
-struct ima_digest_data {
-	u8 algo;
-	u8 length;
-	union {
-		struct {
-			u8 unused;
-			u8 type;
-		} sha1;
-		struct {
-			u8 type;
-			u8 algo;
-		} ng;
-		u8 data[2];
-	} xattr;
-	u8 digest[0];
-};
-
-struct integrity_iint_cache {
-	struct rb_node rb_node;
-	struct mutex mutex;
-	struct inode *inode;
-	u64 version;
-	long unsigned int flags;
-	long unsigned int measured_pcrs;
-	long unsigned int atomic_flags;
-	enum integrity_status ima_file_status: 4;
-	enum integrity_status ima_mmap_status: 4;
-	enum integrity_status ima_bprm_status: 4;
-	enum integrity_status ima_read_status: 4;
-	enum integrity_status ima_creds_status: 4;
-	enum integrity_status evm_status: 4;
-	struct ima_digest_data *ima_hash;
-};
-
-struct modsig;
-
-struct asymmetric_key_id;
-
-struct public_key_signature {
-	struct asymmetric_key_id *auth_ids[2];
-	u8 *s;
-	u32 s_size;
-	u8 *digest;
-	u8 digest_size;
-	const char *pkey_algo;
-	const char *hash_algo;
-	const char *encoding;
-	const void *data;
-	unsigned int data_size;
-};
-
-struct asymmetric_key_id {
-	short unsigned int len;
-	unsigned char data[0];
-};
-
-struct signature_v2_hdr {
-	uint8_t type;
-	uint8_t version;
-	uint8_t hash_algo;
-	__be32 keyid;
-	__be16 sig_size;
-	uint8_t sig[0];
-} __attribute__((packed));
-
-struct tpm_digest {
-	u16 alg_id;
-	u8 digest[64];
-};
-
-struct evm_ima_xattr_data {
-	u8 type;
-	u8 data[0];
-};
-
-enum ima_show_type {
-	IMA_SHOW_BINARY = 0,
-	IMA_SHOW_BINARY_NO_FIELD_LEN = 1,
-	IMA_SHOW_BINARY_OLD_STRING_FMT = 2,
-	IMA_SHOW_ASCII = 3,
-};
-
-struct ima_event_data {
-	struct integrity_iint_cache *iint;
-	struct file *file;
-	const unsigned char *filename;
-	struct evm_ima_xattr_data *xattr_value;
-	int xattr_len;
-	const struct modsig *modsig;
-	const char *violation;
-	const void *buf;
-	int buf_len;
-};
-
-struct ima_field_data {
-	u8 *data;
-	u32 len;
-};
-
-struct ima_template_field {
-	const char field_id[16];
-	int (*field_init)(struct ima_event_data *, struct ima_field_data *);
-	void (*field_show)(struct seq_file *, enum ima_show_type, struct ima_field_data *);
-};
-
-struct ima_template_desc {
-	struct list_head list;
-	char *name;
-	char *fmt;
-	int num_fields;
-	const struct ima_template_field **fields;
-};
-
-struct ima_template_entry {
-	int pcr;
-	struct tpm_digest *digests;
-	struct ima_template_desc *template_desc;
-	u32 template_data_len;
-	struct ima_field_data template_data[0];
-};
-
-struct ima_queue_entry {
-	struct hlist_node hnext;
-	struct list_head later;
-	struct ima_template_entry *entry;
-};
-
-struct ima_h_table {
-	atomic_long_t len;
-	atomic_long_t violations;
-	struct hlist_head queue[1024];
-};
-
-enum ima_fs_flags {
-	IMA_FS_BUSY = 0,
-};
-
-struct hwrng {
-	const char *name;
-	int (*init)(struct hwrng *);
-	void (*cleanup)(struct hwrng *);
-	int (*data_present)(struct hwrng *, int);
-	int (*data_read)(struct hwrng *, u32 *);
-	int (*read)(struct hwrng *, void *, size_t, bool);
-	long unsigned int priv;
-	short unsigned int quality;
-	struct list_head list;
-	struct kref ref;
-	struct completion cleanup_done;
-};
-
-struct tpm_bank_info {
-	u16 alg_id;
-	u16 digest_size;
-	u16 crypto_id;
-};
-
-struct tpm_chip;
-
-struct tpm_class_ops {
-	unsigned int flags;
-	const u8 req_complete_mask;
-	const u8 req_complete_val;
-	bool (*req_canceled)(struct tpm_chip *, u8);
-	int (*recv)(struct tpm_chip *, u8 *, size_t);
-	int (*send)(struct tpm_chip *, u8 *, size_t);
-	void (*cancel)(struct tpm_chip *);
-	u8 (*status)(struct tpm_chip *);
-	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
-	void (*update_durations)(struct tpm_chip *, long unsigned int *);
-	int (*go_idle)(struct tpm_chip *);
-	int (*cmd_ready)(struct tpm_chip *);
-	int (*request_locality)(struct tpm_chip *, int);
-	int (*relinquish_locality)(struct tpm_chip *, int);
-	void (*clk_enable)(struct tpm_chip *, bool);
-};
-
-struct tpm_bios_log {
-	void *bios_event_log;
-	void *bios_event_log_end;
-};
-
-struct tpm_chip_seqops {
-	struct tpm_chip *chip;
-	const struct seq_operations *seqops;
-};
-
-struct tpm_space {
-	u32 context_tbl[3];
-	u8 *context_buf;
-	u32 session_tbl[3];
-	u8 *session_buf;
-	u32 buf_size;
-};
-
-struct tpm_chip {
-	struct device dev;
-	struct device devs;
-	struct cdev cdev;
-	struct cdev cdevs;
-	struct rw_semaphore ops_sem;
-	const struct tpm_class_ops *ops;
-	struct tpm_bios_log log;
-	struct tpm_chip_seqops bin_log_seqops;
-	struct tpm_chip_seqops ascii_log_seqops;
-	unsigned int flags;
-	int dev_num;
-	long unsigned int is_open;
-	char hwrng_name[64];
-	struct hwrng hwrng;
-	struct mutex tpm_mutex;
-	long unsigned int timeout_a;
-	long unsigned int timeout_b;
-	long unsigned int timeout_c;
-	long unsigned int timeout_d;
-	bool timeout_adjusted;
-	long unsigned int duration[4];
-	bool duration_adjusted;
-	struct dentry *bios_dir[3];
-	const struct attribute_group *groups[3];
-	unsigned int groups_cnt;
-	u32 nr_allocated_banks;
-	struct tpm_bank_info *allocated_banks;
-	acpi_handle acpi_dev_handle;
-	char ppi_version[4];
-	struct tpm_space work_space;
-	u32 last_cc;
-	u32 nr_commands;
-	u32 *cc_attrs_tbl;
-	int locality;
-};
-
-enum evm_ima_xattr_type {
-	IMA_XATTR_DIGEST = 1,
-	EVM_XATTR_HMAC = 2,
-	EVM_IMA_XATTR_DIGSIG = 3,
-	IMA_XATTR_DIGEST_NG = 4,
-	EVM_XATTR_PORTABLE_DIGSIG = 5,
-	IMA_XATTR_LAST = 6,
-};
-
-enum ima_hooks {
-	NONE = 0,
-	FILE_CHECK = 1,
-	MMAP_CHECK = 2,
-	BPRM_CHECK = 3,
-	CREDS_CHECK = 4,
-	POST_SETATTR = 5,
-	MODULE_CHECK = 6,
-	FIRMWARE_CHECK = 7,
-	KEXEC_KERNEL_CHECK = 8,
-	KEXEC_INITRAMFS_CHECK = 9,
-	POLICY_CHECK = 10,
-	KEXEC_CMDLINE = 11,
-	KEY_CHECK = 12,
-	MAX_CHECK = 13,
-};
-
-enum tpm_algorithms {
-	TPM_ALG_ERROR = 0,
-	TPM_ALG_SHA1 = 4,
-	TPM_ALG_KEYEDHASH = 8,
-	TPM_ALG_SHA256 = 11,
-	TPM_ALG_SHA384 = 12,
-	TPM_ALG_SHA512 = 13,
-	TPM_ALG_NULL = 16,
-	TPM_ALG_SM3_256 = 18,
-};
-
-enum tpm_pcrs {
-	TPM_PCR0 = 0,
-	TPM_PCR8 = 8,
-	TPM_PCR10 = 10,
-};
-
-struct ima_algo_desc {
-	struct crypto_shash *tfm;
-	enum hash_algo algo;
-};
-
-enum lsm_rule_types {
-	LSM_OBJ_USER = 0,
-	LSM_OBJ_ROLE = 1,
-	LSM_OBJ_TYPE = 2,
-	LSM_SUBJ_USER = 3,
-	LSM_SUBJ_ROLE = 4,
-	LSM_SUBJ_TYPE = 5,
-};
-
-enum policy_types {
-	ORIGINAL_TCB = 1,
-	DEFAULT_TCB = 2,
-};
-
-enum policy_rule_list {
-	IMA_DEFAULT_POLICY = 1,
-	IMA_CUSTOM_POLICY = 2,
-};
-
-struct ima_rule_opt_list {
-	size_t count;
-	char *items[0];
-};
-
-struct ima_rule_entry {
-	struct list_head list;
-	int action;
-	unsigned int flags;
-	enum ima_hooks func;
-	int mask;
-	long unsigned int fsmagic;
-	uuid_t fsuuid;
-	kuid_t uid;
-	kuid_t fowner;
-	bool (*uid_op)(kuid_t, kuid_t);
-	bool (*fowner_op)(kuid_t, kuid_t);
-	int pcr;
-	struct {
-		void *rule;
-		char *args_p;
-		int type;
-	} lsm[6];
-	char *fsname;
-	struct ima_rule_opt_list *keyrings;
-	struct ima_template_desc *template;
-};
-
-enum {
-	Opt_measure = 0,
-	Opt_dont_measure = 1,
-	Opt_appraise = 2,
-	Opt_dont_appraise = 3,
-	Opt_audit = 4,
-	Opt_hash___2 = 5,
-	Opt_dont_hash = 6,
-	Opt_obj_user = 7,
-	Opt_obj_role = 8,
-	Opt_obj_type = 9,
-	Opt_subj_user = 10,
-	Opt_subj_role = 11,
-	Opt_subj_type = 12,
-	Opt_func = 13,
-	Opt_mask = 14,
-	Opt_fsmagic = 15,
-	Opt_fsname = 16,
-	Opt_fsuuid = 17,
-	Opt_uid_eq = 18,
-	Opt_euid_eq = 19,
-	Opt_fowner_eq = 20,
-	Opt_uid_gt = 21,
-	Opt_euid_gt = 22,
-	Opt_fowner_gt = 23,
-	Opt_uid_lt = 24,
-	Opt_euid_lt = 25,
-	Opt_fowner_lt = 26,
-	Opt_appraise_type = 27,
-	Opt_appraise_flag = 28,
-	Opt_permit_directio = 29,
-	Opt_pcr = 30,
-	Opt_template = 31,
-	Opt_keyrings = 32,
-	Opt_err___7 = 33,
-};
-
-enum {
-	mask_exec = 0,
-	mask_write = 1,
-	mask_read = 2,
-	mask_append = 3,
-};
-
-struct ima_kexec_hdr {
-	u16 version;
-	u16 _reserved0;
-	u32 _reserved1;
-	u64 buffer_size;
-	u64 count;
-};
-
-enum header_fields {
-	HDR_PCR = 0,
-	HDR_DIGEST = 1,
-	HDR_TEMPLATE_NAME = 2,
-	HDR_TEMPLATE_DATA = 3,
-	HDR__LAST = 4,
-};
-
-enum data_formats {
-	DATA_FMT_DIGEST = 0,
-	DATA_FMT_DIGEST_WITH_ALGO = 1,
-	DATA_FMT_STRING = 2,
-	DATA_FMT_HEX = 3,
-};
-
-struct ima_key_entry {
-	struct list_head list;
-	void *payload;
-	size_t payload_len;
-	char *keyring_name;
-};
-
-struct evm_xattr {
-	struct evm_ima_xattr_data data;
-	u8 digest[20];
-};
-
-struct xattr_list {
-	struct list_head list;
-	char *name;
-};
-
-struct evm_digest {
-	struct ima_digest_data hdr;
-	char digest[64];
-};
-
-struct h_misc {
-	long unsigned int ino;
-	__u32 generation;
-	uid_t uid;
-	gid_t gid;
-	umode_t mode;
-};
-
-enum {
-	CRYPTO_MSG_ALG_REQUEST = 0,
-	CRYPTO_MSG_ALG_REGISTER = 1,
-	CRYPTO_MSG_ALG_LOADED = 2,
-};
-
-struct crypto_larval {
-	struct crypto_alg alg;
-	struct crypto_alg *adult;
-	struct completion completion;
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct crypto_cipher {
+struct crypto_comp {
 	struct crypto_tfm base;
 };
 
-enum {
-	CRYPTOA_UNSPEC = 0,
-	CRYPTOA_ALG = 1,
-	CRYPTOA_TYPE = 2,
-	CRYPTOA_U32 = 3,
-	__CRYPTOA_MAX = 4,
-};
-
-struct crypto_attr_alg {
-	char name[128];
-};
-
-struct crypto_attr_type {
-	u32 type;
-	u32 mask;
-};
-
-struct crypto_attr_u32 {
-	u32 num;
-};
-
-struct rtattr {
-	short unsigned int rta_len;
-	short unsigned int rta_type;
-};
-
-struct crypto_queue {
-	struct list_head list;
-	struct list_head *backlog;
-	unsigned int qlen;
-	unsigned int max_qlen;
-};
-
-enum {
-	NAPI_STATE_SCHED = 0,
-	NAPI_STATE_MISSED = 1,
-	NAPI_STATE_DISABLE = 2,
-	NAPI_STATE_NPSVC = 3,
-	NAPI_STATE_LISTED = 4,
-	NAPI_STATE_NO_BUSY_POLL = 5,
-	NAPI_STATE_IN_BUSY_POLL = 6,
-};
-
-enum bpf_xdp_mode {
-	XDP_MODE_SKB = 0,
-	XDP_MODE_DRV = 1,
-	XDP_MODE_HW = 2,
-	__MAX_XDP_MODE = 3,
-};
-
-enum {
-	NETIF_MSG_DRV_BIT = 0,
-	NETIF_MSG_PROBE_BIT = 1,
-	NETIF_MSG_LINK_BIT = 2,
-	NETIF_MSG_TIMER_BIT = 3,
-	NETIF_MSG_IFDOWN_BIT = 4,
-	NETIF_MSG_IFUP_BIT = 5,
-	NETIF_MSG_RX_ERR_BIT = 6,
-	NETIF_MSG_TX_ERR_BIT = 7,
-	NETIF_MSG_TX_QUEUED_BIT = 8,
-	NETIF_MSG_INTR_BIT = 9,
-	NETIF_MSG_TX_DONE_BIT = 10,
-	NETIF_MSG_RX_STATUS_BIT = 11,
-	NETIF_MSG_PKTDATA_BIT = 12,
-	NETIF_MSG_HW_BIT = 13,
-	NETIF_MSG_WOL_BIT = 14,
-	NETIF_MSG_CLASS_COUNT = 15,
-};
-
-struct scatter_walk {
-	struct scatterlist *sg;
-	unsigned int offset;
-};
-
-struct aead_request {
-	struct crypto_async_request base;
-	unsigned int assoclen;
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_aead;
-
-struct aead_alg {
-	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
-	int (*setauthsize)(struct crypto_aead *, unsigned int);
-	int (*encrypt)(struct aead_request *);
-	int (*decrypt)(struct aead_request *);
-	int (*init)(struct crypto_aead *);
-	void (*exit)(struct crypto_aead *);
-	unsigned int ivsize;
-	unsigned int maxauthsize;
-	unsigned int chunksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct crypto_aead {
-	unsigned int authsize;
-	unsigned int reqsize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
-struct aead_instance {
-	void (*free)(struct aead_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct aead_alg alg;
-	};
-};
-
-struct crypto_aead_spawn {
-	struct crypto_spawn base;
-};
-
-enum crypto_attr_type_t {
-	CRYPTOCFGA_UNSPEC = 0,
-	CRYPTOCFGA_PRIORITY_VAL = 1,
-	CRYPTOCFGA_REPORT_LARVAL = 2,
-	CRYPTOCFGA_REPORT_HASH = 3,
-	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
-	CRYPTOCFGA_REPORT_AEAD = 5,
-	CRYPTOCFGA_REPORT_COMPRESS = 6,
-	CRYPTOCFGA_REPORT_RNG = 7,
-	CRYPTOCFGA_REPORT_CIPHER = 8,
-	CRYPTOCFGA_REPORT_AKCIPHER = 9,
-	CRYPTOCFGA_REPORT_KPP = 10,
-	CRYPTOCFGA_REPORT_ACOMP = 11,
-	CRYPTOCFGA_STAT_LARVAL = 12,
-	CRYPTOCFGA_STAT_HASH = 13,
-	CRYPTOCFGA_STAT_BLKCIPHER = 14,
-	CRYPTOCFGA_STAT_AEAD = 15,
-	CRYPTOCFGA_STAT_COMPRESS = 16,
-	CRYPTOCFGA_STAT_RNG = 17,
-	CRYPTOCFGA_STAT_CIPHER = 18,
-	CRYPTOCFGA_STAT_AKCIPHER = 19,
-	CRYPTOCFGA_STAT_KPP = 20,
-	CRYPTOCFGA_STAT_ACOMP = 21,
-	__CRYPTOCFGA_MAX = 22,
-};
-
 struct crypto_report_aead {
 	char type[64];
 	char geniv[64];
@@ -51418,146 +111540,6 @@
 	unsigned int ivsize;
 };
 
-struct crypto_sync_skcipher;
-
-struct aead_geniv_ctx {
-	spinlock_t lock;
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *sknull;
-	u8 salt[0];
-};
-
-struct crypto_rng;
-
-struct rng_alg {
-	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
-	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
-	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
-	unsigned int seedsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct crypto_rng {
-	struct crypto_tfm base;
-};
-
-struct crypto_cipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_sync_skcipher {
-	struct crypto_skcipher base;
-};
-
-struct skcipher_instance {
-	void (*free)(struct skcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct skcipher_alg alg;
-	};
-};
-
-struct crypto_skcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct skcipher_walk {
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} src;
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} dst;
-	struct scatter_walk in;
-	unsigned int nbytes;
-	struct scatter_walk out;
-	unsigned int total;
-	struct list_head buffers;
-	u8 *page;
-	u8 *buffer;
-	u8 *oiv;
-	void *iv;
-	unsigned int ivsize;
-	int flags;
-	unsigned int blocksize;
-	unsigned int stride;
-	unsigned int alignmask;
-};
-
-struct skcipher_ctx_simple {
-	struct crypto_cipher *cipher;
-};
-
-struct crypto_report_blkcipher {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-};
-
-enum {
-	SKCIPHER_WALK_PHYS = 1,
-	SKCIPHER_WALK_SLOW = 2,
-	SKCIPHER_WALK_COPY = 4,
-	SKCIPHER_WALK_DIFF = 8,
-	SKCIPHER_WALK_SLEEP = 16,
-};
-
-struct skcipher_walk_buffer {
-	struct list_head entry;
-	struct scatter_walk dst;
-	unsigned int len;
-	u8 *data;
-	u8 buffer[0];
-};
-
 struct ahash_alg {
 	int (*init)(struct ahash_request *);
 	int (*update)(struct ahash_request *);
@@ -51569,46 +111551,14 @@
 	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
 	int (*init_tfm)(struct crypto_ahash *);
 	void (*exit_tfm)(struct crypto_ahash *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct hash_alg_common halg;
 };
 
-struct crypto_hash_walk {
-	char *data;
-	unsigned int offset;
-	unsigned int alignmask;
-	struct page *pg;
-	unsigned int entrylen;
-	unsigned int total;
-	struct scatterlist *sg;
-	unsigned int flags;
-};
-
 struct ahash_instance {
 	void (*free)(struct ahash_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[256];
+			char head[88];
 			struct crypto_instance base;
 		} s;
 		struct ahash_alg alg;
@@ -51619,396 +111569,43 @@
 	struct crypto_spawn base;
 };
 
-struct crypto_report_hash {
-	char type[64];
-	unsigned int blocksize;
-	unsigned int digestsize;
-};
-
 struct ahash_request_priv {
 	crypto_completion_t complete;
 	void *data;
 	u8 *result;
 	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *ubuf[0];
 };
 
-struct shash_instance {
-	void (*free)(struct shash_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[256];
-			struct crypto_instance base;
-		} s;
-		struct shash_alg alg;
-	};
-};
-
-struct crypto_shash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_akcipher {
-	char type[64];
-};
-
-struct akcipher_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_akcipher {
-	struct crypto_tfm base;
-};
-
-struct akcipher_alg {
-	int (*sign)(struct akcipher_request *);
-	int (*verify)(struct akcipher_request *);
-	int (*encrypt)(struct akcipher_request *);
-	int (*decrypt)(struct akcipher_request *);
-	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
-	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
-	unsigned int (*max_size)(struct crypto_akcipher *);
-	int (*init)(struct crypto_akcipher *);
-	void (*exit)(struct crypto_akcipher *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct akcipher_instance {
-	void (*free)(struct akcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct {
-			char head[128];
-			struct crypto_instance base;
-		} s;
-		struct akcipher_alg alg;
-	};
-};
-
-struct crypto_akcipher_spawn {
-	struct crypto_spawn base;
-};
-
 struct crypto_report_kpp {
 	char type[64];
 };
 
-struct kpp_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	union {
+		struct {
+			char head[48];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
 };
 
-struct crypto_kpp {
-	struct crypto_tfm base;
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
 };
 
-struct kpp_alg {
-	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
-	int (*generate_public_key)(struct kpp_request *);
-	int (*compute_shared_secret)(struct kpp_request *);
-	unsigned int (*max_size)(struct crypto_kpp *);
-	int (*init)(struct crypto_kpp *);
-	void (*exit)(struct crypto_kpp *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-enum asn1_class {
-	ASN1_UNIV = 0,
-	ASN1_APPL = 1,
-	ASN1_CONT = 2,
-	ASN1_PRIV = 3,
-};
-
-enum asn1_method {
-	ASN1_PRIM = 0,
-	ASN1_CONS = 1,
-};
-
-enum asn1_tag {
-	ASN1_EOC = 0,
-	ASN1_BOOL = 1,
-	ASN1_INT = 2,
-	ASN1_BTS = 3,
-	ASN1_OTS = 4,
-	ASN1_NULL = 5,
-	ASN1_OID = 6,
-	ASN1_ODE = 7,
-	ASN1_EXT = 8,
-	ASN1_REAL = 9,
-	ASN1_ENUM = 10,
-	ASN1_EPDV = 11,
-	ASN1_UTF8STR = 12,
-	ASN1_RELOID = 13,
-	ASN1_SEQ = 16,
-	ASN1_SET = 17,
-	ASN1_NUMSTR = 18,
-	ASN1_PRNSTR = 19,
-	ASN1_TEXSTR = 20,
-	ASN1_VIDSTR = 21,
-	ASN1_IA5STR = 22,
-	ASN1_UNITIM = 23,
-	ASN1_GENTIM = 24,
-	ASN1_GRASTR = 25,
-	ASN1_VISSTR = 26,
-	ASN1_GENSTR = 27,
-	ASN1_UNISTR = 28,
-	ASN1_CHRSTR = 29,
-	ASN1_BMPSTR = 30,
-	ASN1_LONG_TAG = 31,
-};
-
-typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
-
-struct asn1_decoder {
-	const unsigned char *machine;
-	size_t machlen;
-	const asn1_action_t *actions;
-};
-
-enum asn1_opcode {
-	ASN1_OP_MATCH = 0,
-	ASN1_OP_MATCH_OR_SKIP = 1,
-	ASN1_OP_MATCH_ACT = 2,
-	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
-	ASN1_OP_MATCH_JUMP = 4,
-	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
-	ASN1_OP_MATCH_ANY = 8,
-	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
-	ASN1_OP_MATCH_ANY_ACT = 10,
-	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
-	ASN1_OP_COND_MATCH_OR_SKIP = 17,
-	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
-	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
-	ASN1_OP_COND_MATCH_ANY = 24,
-	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
-	ASN1_OP_COND_MATCH_ANY_ACT = 26,
-	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
-	ASN1_OP_COND_FAIL = 28,
-	ASN1_OP_COMPLETE = 29,
-	ASN1_OP_ACT = 30,
-	ASN1_OP_MAYBE_ACT = 31,
-	ASN1_OP_END_SEQ = 32,
-	ASN1_OP_END_SET = 33,
-	ASN1_OP_END_SEQ_OF = 34,
-	ASN1_OP_END_SET_OF = 35,
-	ASN1_OP_END_SEQ_ACT = 36,
-	ASN1_OP_END_SET_ACT = 37,
-	ASN1_OP_END_SEQ_OF_ACT = 38,
-	ASN1_OP_END_SET_OF_ACT = 39,
-	ASN1_OP_RETURN = 40,
-	ASN1_OP__NR = 41,
-};
-
-enum rsapubkey_actions {
-	ACT_rsa_get_e = 0,
-	ACT_rsa_get_n = 1,
-	NR__rsapubkey_actions = 2,
-};
-
-enum rsaprivkey_actions {
-	ACT_rsa_get_d = 0,
-	ACT_rsa_get_dp = 1,
-	ACT_rsa_get_dq = 2,
-	ACT_rsa_get_e___2 = 3,
-	ACT_rsa_get_n___2 = 4,
-	ACT_rsa_get_p = 5,
-	ACT_rsa_get_q = 6,
-	ACT_rsa_get_qinv = 7,
-	NR__rsaprivkey_actions = 8,
-};
-
-typedef long unsigned int mpi_limb_t;
-
-struct gcry_mpi {
-	int alloced;
-	int nlimbs;
-	int nbits;
-	int sign;
-	unsigned int flags;
-	mpi_limb_t *d;
-};
-
-typedef struct gcry_mpi *MPI;
-
-struct rsa_key {
-	const u8 *n;
-	const u8 *e;
-	const u8 *d;
-	const u8 *p;
-	const u8 *q;
-	const u8 *dp;
-	const u8 *dq;
-	const u8 *qinv;
-	size_t n_sz;
-	size_t e_sz;
-	size_t d_sz;
-	size_t p_sz;
-	size_t q_sz;
-	size_t dp_sz;
-	size_t dq_sz;
-	size_t qinv_sz;
-};
-
-struct rsa_mpi_key {
-	MPI n;
-	MPI e;
-	MPI d;
-};
-
-struct asn1_decoder___2;
-
-struct rsa_asn1_template {
-	const char *name;
-	const u8 *data;
-	size_t size;
-};
-
-struct pkcs1pad_ctx {
-	struct crypto_akcipher *child;
-	unsigned int key_size;
-};
-
-struct pkcs1pad_inst_ctx {
-	struct crypto_akcipher_spawn spawn;
-	const struct rsa_asn1_template *digest_info;
-};
-
-struct pkcs1pad_request {
-	struct scatterlist in_sg[2];
-	struct scatterlist out_sg[1];
-	uint8_t *in_buf;
-	uint8_t *out_buf;
-	long: 64;
-	long: 64;
-	struct akcipher_request child_req;
+enum ecdsasignature_actions {
+	ACT_ecdsa_get_signature_r = 0,
+	ACT_ecdsa_get_signature_s = 1,
+	NR__ecdsasignature_actions = 2,
 };
 
 struct crypto_report_acomp {
 	char type[64];
 };
 
-struct acomp_req {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int slen;
-	unsigned int dlen;
-	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_acomp {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
 struct acomp_alg {
 	int (*compress)(struct acomp_req *);
 	int (*decompress)(struct acomp_req *);
@@ -52016,93 +111613,13 @@
 	int (*init)(struct crypto_acomp *);
 	void (*exit)(struct crypto_acomp *);
 	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
-struct crypto_report_comp {
-	char type[64];
-};
-
-struct crypto_scomp {
-	struct crypto_tfm base;
-};
-
-struct scomp_alg {
-	void * (*alloc_ctx)(struct crypto_scomp *);
-	void (*free_ctx)(struct crypto_scomp *, void *);
-	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
-struct scomp_scratch {
-	spinlock_t lock;
-	void *src;
-	void *dst;
-};
-
-struct cryptomgr_param {
-	struct rtattr *tb[34];
-	struct {
-		struct rtattr attr;
-		struct crypto_attr_type data;
-	} type;
-	union {
-		struct rtattr attr;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_alg data;
-		} alg;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_u32 data;
-		} nu32;
-	} attrs[32];
-	char template[128];
-	struct crypto_larval *larval;
-	u32 otype;
-	u32 omask;
-};
-
-struct crypto_test_param {
-	char driver[128];
-	char alg[128];
-	u32 type;
-};
-
 struct hmac_ctx {
 	struct crypto_shash *hash;
 };
 
-struct md5_state {
-	u32 hash[4];
-	u32 block[16];
-	u64 byte_count;
-};
-
 struct sha1_state {
 	u32 state[5];
 	u64 count;
@@ -52111,83 +111628,6 @@
 
 typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
 
-struct sha256_state {
-	u32 state[8];
-	u64 count;
-	u8 buf[64];
-};
-
-struct sha512_state {
-	u64 state[8];
-	u64 count[2];
-	u8 buf[128];
-};
-
-typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
-
-typedef struct {
-	u64 a;
-	u64 b;
-} u128;
-
-typedef struct {
-	__be64 a;
-	__be64 b;
-} be128;
-
-typedef struct {
-	__le64 b;
-	__le64 a;
-} le128;
-
-struct gf128mul_4k {
-	be128 t[256];
-};
-
-struct gf128mul_64k {
-	struct gf128mul_4k *t[16];
-};
-
-struct crypto_cts_ctx {
-	struct crypto_skcipher *child;
-};
-
-struct crypto_cts_reqctx {
-	struct scatterlist sg[2];
-	unsigned int offset;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct skcipher_request subreq;
-};
-
-struct xts_tfm_ctx {
-	struct crypto_skcipher *child;
-	struct crypto_cipher *tweak;
-};
-
-struct xts_instance_ctx {
-	struct crypto_skcipher_spawn spawn;
-	char name[128];
-};
-
-struct xts_request_ctx {
-	le128 t;
-	struct scatterlist *tail;
-	struct scatterlist sg[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct skcipher_request subreq;
-};
-
 struct crypto_rfc3686_ctx {
 	struct crypto_skcipher *child;
 	u8 nonce[4];
@@ -52195,134 +111635,13 @@
 
 struct crypto_rfc3686_req_ctx {
 	u8 iv[16];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct skcipher_request subreq;
 };
 
-struct gcm_instance_ctx {
-	struct crypto_skcipher_spawn ctr;
-	struct crypto_ahash_spawn ghash;
-};
-
-struct crypto_gcm_ctx {
-	struct crypto_skcipher *ctr;
-	struct crypto_ahash *ghash;
-};
-
-struct crypto_rfc4106_ctx {
-	struct crypto_aead *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4106_req_ctx {
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct aead_request subreq;
-};
-
-struct crypto_rfc4543_instance_ctx {
-	struct crypto_aead_spawn aead;
-};
-
-struct crypto_rfc4543_ctx {
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *null;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4543_req_ctx {
-	struct aead_request subreq;
-};
-
-struct crypto_gcm_ghash_ctx {
-	unsigned int cryptlen;
-	struct scatterlist *src;
-	int (*complete)(struct aead_request *, u32);
-};
-
-struct crypto_gcm_req_priv_ctx {
-	u8 iv[16];
-	u8 auth_tag[16];
-	u8 iauth_tag[16];
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct scatterlist sg;
-	struct crypto_gcm_ghash_ctx ghash_ctx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct ahash_request ahreq;
-		struct skcipher_request skreq;
-	} u;
-};
-
-struct crypto_aes_ctx {
-	u32 key_enc[60];
-	u32 key_dec[60];
-	u32 key_length;
-};
-
-struct chksum_ctx {
-	u32 key;
-};
-
-struct chksum_desc_ctx {
-	u32 crc;
-};
-
 struct chksum_desc_ctx___2 {
 	__u16 crc;
 };
 
-struct lzo_ctx {
-	void *lzo_comp_mem;
-};
-
-struct lzorle_ctx {
-	void *lzorle_comp_mem;
-};
-
-struct crypto_report_rng {
-	char type[64];
-	unsigned int seedsize;
-};
-
-struct random_ready_callback {
-	struct list_head list;
-	void (*func)(struct random_ready_callback *);
-	struct module *owner;
-};
-
 struct drbg_string {
 	const unsigned char *buf;
 	size_t len;
@@ -52348,6 +111667,12 @@
 	int (*crypto_fini)(struct drbg_state *);
 };
 
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
 struct drbg_state {
 	struct mutex drbg_mutex;
 	unsigned char *V;
@@ -52366,16 +111691,15 @@
 	struct crypto_wait ctr_wait;
 	struct scatterlist sg_in;
 	struct scatterlist sg_out;
-	bool seeded;
+	enum drbg_seed_state seeded;
+	long unsigned int last_seed_time;
 	bool pr;
 	bool fips_primed;
 	unsigned char *prev;
-	struct work_struct seed_work;
 	struct crypto_rng *jent;
 	const struct drbg_state_ops *d_ops;
 	const struct drbg_core *core;
 	struct drbg_string test_data;
-	struct random_ready_callback random_ready;
 };
 
 enum drbg_prefixes {
@@ -52390,116 +111714,6 @@
 	char ctx[0];
 };
 
-struct s {
-	__be32 conv;
-};
-
-struct rand_data {
-	__u64 data;
-	__u64 old_data;
-	__u64 prev_time;
-	__u64 last_delta;
-	__s64 last_delta2;
-	unsigned int osr;
-	unsigned char *mem;
-	unsigned int memlocation;
-	unsigned int memblocks;
-	unsigned int memblocksize;
-	unsigned int memaccessloops;
-	int rct_count;
-	unsigned int apt_observations;
-	unsigned int apt_count;
-	unsigned int apt_base;
-	unsigned int apt_base_set: 1;
-	unsigned int health_failure: 1;
-};
-
-struct rand_data___2;
-
-struct jitterentropy {
-	spinlock_t jent_lock;
-	struct rand_data___2 *entropy_collector;
-	unsigned int reset_cnt;
-};
-
-struct ghash_ctx {
-	struct gf128mul_4k *gf128;
-};
-
-struct ghash_desc_ctx {
-	u8 buffer[16];
-	u32 bytes;
-};
-
-typedef enum {
-	ZSTD_fast = 0,
-	ZSTD_dfast = 1,
-	ZSTD_greedy = 2,
-	ZSTD_lazy = 3,
-	ZSTD_lazy2 = 4,
-	ZSTD_btlazy2 = 5,
-	ZSTD_btopt = 6,
-	ZSTD_btopt2 = 7,
-} ZSTD_strategy;
-
-typedef struct {
-	unsigned int windowLog;
-	unsigned int chainLog;
-	unsigned int hashLog;
-	unsigned int searchLog;
-	unsigned int searchLength;
-	unsigned int targetLength;
-	ZSTD_strategy strategy;
-} ZSTD_compressionParameters;
-
-typedef struct {
-	unsigned int contentSizeFlag;
-	unsigned int checksumFlag;
-	unsigned int noDictIDFlag;
-} ZSTD_frameParameters;
-
-typedef struct {
-	ZSTD_compressionParameters cParams;
-	ZSTD_frameParameters fParams;
-} ZSTD_parameters;
-
-struct ZSTD_CCtx_s;
-
-typedef struct ZSTD_CCtx_s ZSTD_CCtx;
-
-struct ZSTD_DCtx_s;
-
-typedef struct ZSTD_DCtx_s ZSTD_DCtx;
-
-struct zstd_ctx {
-	ZSTD_CCtx *cctx;
-	ZSTD_DCtx *dctx;
-	void *cwksp;
-	void *dwksp;
-};
-
-enum asymmetric_payload_bits {
-	asym_crypto = 0,
-	asym_subtype = 1,
-	asym_key_ids = 2,
-	asym_auth = 3,
-};
-
-struct asymmetric_key_ids {
-	void *id[2];
-};
-
-struct asymmetric_key_subtype {
-	struct module *owner;
-	const char *name;
-	short unsigned int name_len;
-	void (*describe)(const struct key *, struct seq_file *);
-	void (*destroy)(void *, void *);
-	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
-	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
-	int (*verify_signature)(const struct key *, const struct public_key_signature *);
-};
-
 struct asymmetric_key_parser {
 	struct list_head link;
 	struct module *owner;
@@ -52507,109 +111721,16 @@
 	int (*parse)(struct key_preparsed_payload *);
 };
 
-enum OID {
-	OID_id_dsa_with_sha1 = 0,
-	OID_id_dsa = 1,
-	OID_id_ecdsa_with_sha1 = 2,
-	OID_id_ecPublicKey = 3,
-	OID_rsaEncryption = 4,
-	OID_md2WithRSAEncryption = 5,
-	OID_md3WithRSAEncryption = 6,
-	OID_md4WithRSAEncryption = 7,
-	OID_sha1WithRSAEncryption = 8,
-	OID_sha256WithRSAEncryption = 9,
-	OID_sha384WithRSAEncryption = 10,
-	OID_sha512WithRSAEncryption = 11,
-	OID_sha224WithRSAEncryption = 12,
-	OID_data = 13,
-	OID_signed_data = 14,
-	OID_email_address = 15,
-	OID_contentType = 16,
-	OID_messageDigest = 17,
-	OID_signingTime = 18,
-	OID_smimeCapabilites = 19,
-	OID_smimeAuthenticatedAttrs = 20,
-	OID_md2 = 21,
-	OID_md4 = 22,
-	OID_md5 = 23,
-	OID_msIndirectData = 24,
-	OID_msStatementType = 25,
-	OID_msSpOpusInfo = 26,
-	OID_msPeImageDataObjId = 27,
-	OID_msIndividualSPKeyPurpose = 28,
-	OID_msOutlookExpress = 29,
-	OID_certAuthInfoAccess = 30,
-	OID_sha1 = 31,
-	OID_sha256 = 32,
-	OID_sha384 = 33,
-	OID_sha512 = 34,
-	OID_sha224 = 35,
-	OID_commonName = 36,
-	OID_surname = 37,
-	OID_countryName = 38,
-	OID_locality = 39,
-	OID_stateOrProvinceName = 40,
-	OID_organizationName = 41,
-	OID_organizationUnitName = 42,
-	OID_title = 43,
-	OID_description = 44,
-	OID_name = 45,
-	OID_givenName = 46,
-	OID_initials = 47,
-	OID_generationalQualifier = 48,
-	OID_subjectKeyIdentifier = 49,
-	OID_keyUsage = 50,
-	OID_subjectAltName = 51,
-	OID_issuerAltName = 52,
-	OID_basicConstraints = 53,
-	OID_crlDistributionPoints = 54,
-	OID_certPolicies = 55,
-	OID_authorityKeyIdentifier = 56,
-	OID_extKeyUsage = 57,
-	OID_gostCPSignA = 58,
-	OID_gostCPSignB = 59,
-	OID_gostCPSignC = 60,
-	OID_gost2012PKey256 = 61,
-	OID_gost2012PKey512 = 62,
-	OID_gost2012Digest256 = 63,
-	OID_gost2012Digest512 = 64,
-	OID_gost2012Signature256 = 65,
-	OID_gost2012Signature512 = 66,
-	OID_gostTC26Sign256A = 67,
-	OID_gostTC26Sign256B = 68,
-	OID_gostTC26Sign256C = 69,
-	OID_gostTC26Sign256D = 70,
-	OID_gostTC26Sign512A = 71,
-	OID_gostTC26Sign512B = 72,
-	OID_gostTC26Sign512C = 73,
-	OID_sm2 = 74,
-	OID_sm3 = 75,
-	OID_SM2_with_SM3 = 76,
-	OID_sm3WithRSAEncryption = 77,
-	OID__NR = 78,
-};
-
-struct public_key {
-	void *key;
-	u32 keylen;
-	enum OID algo;
-	void *params;
-	u32 paramlen;
-	bool key_is_private;
-	const char *id_type;
-	const char *pkey_algo;
-};
-
 enum x509_actions {
 	ACT_x509_extract_key_data = 0,
-	ACT_x509_extract_name_segment = 1,
-	ACT_x509_note_OID = 2,
+	ACT_x509_extract_name_segment___2 = 1,
+	ACT_x509_note_OID___2 = 2,
 	ACT_x509_note_issuer = 3,
 	ACT_x509_note_not_after = 4,
 	ACT_x509_note_not_before = 5,
 	ACT_x509_note_params = 6,
-	ACT_x509_note_pkey_algo = 7,
-	ACT_x509_note_serial = 8,
+	ACT_x509_note_serial = 7,
+	ACT_x509_note_sig_algo = 8,
 	ACT_x509_note_signature = 9,
 	ACT_x509_note_subject = 10,
 	ACT_x509_note_tbs_certificate = 11,
@@ -52617,447 +111738,37 @@
 	NR__x509_actions = 13,
 };
 
-enum x509_akid_actions {
-	ACT_x509_akid_note_kid = 0,
-	ACT_x509_akid_note_name = 1,
-	ACT_x509_akid_note_serial = 2,
-	ACT_x509_extract_name_segment___2 = 3,
-	ACT_x509_note_OID___2 = 4,
-	NR__x509_akid_actions = 5,
-};
-
-struct x509_certificate {
-	struct x509_certificate *next;
-	struct x509_certificate *signer;
-	struct public_key *pub;
-	struct public_key_signature *sig;
-	char *issuer;
-	char *subject;
-	struct asymmetric_key_id *id;
-	struct asymmetric_key_id *skid;
-	time64_t valid_from;
-	time64_t valid_to;
-	const void *tbs;
-	unsigned int tbs_size;
-	unsigned int raw_sig_size;
-	const void *raw_sig;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_subject;
-	unsigned int raw_subject_size;
-	unsigned int raw_skid_size;
-	const void *raw_skid;
-	unsigned int index;
-	bool seen;
-	bool verified;
-	bool self_signed;
-	bool unsupported_key;
-	bool unsupported_sig;
-	bool blacklisted;
-};
-
-struct x509_parse_context {
-	struct x509_certificate *cert;
-	long unsigned int data;
-	const void *cert_start;
-	const void *key;
-	size_t key_size;
-	const void *params;
-	size_t params_size;
-	enum OID key_algo;
-	enum OID last_oid;
-	enum OID algo_oid;
-	unsigned char nr_mpi;
-	u8 o_size;
-	u8 cn_size;
-	u8 email_size;
-	u16 o_offset;
-	u16 cn_offset;
-	u16 email_offset;
-	unsigned int raw_akid_size;
-	const void *raw_akid;
-	const void *akid_raw_issuer;
-	unsigned int akid_raw_issuer_size;
-};
-
-enum pkcs7_actions {
-	ACT_pkcs7_check_content_type = 0,
-	ACT_pkcs7_extract_cert = 1,
-	ACT_pkcs7_note_OID = 2,
-	ACT_pkcs7_note_certificate_list = 3,
-	ACT_pkcs7_note_content = 4,
-	ACT_pkcs7_note_data = 5,
-	ACT_pkcs7_note_signed_info = 6,
-	ACT_pkcs7_note_signeddata_version = 7,
-	ACT_pkcs7_note_signerinfo_version = 8,
-	ACT_pkcs7_sig_note_authenticated_attr = 9,
-	ACT_pkcs7_sig_note_digest_algo = 10,
-	ACT_pkcs7_sig_note_issuer = 11,
-	ACT_pkcs7_sig_note_pkey_algo = 12,
-	ACT_pkcs7_sig_note_serial = 13,
-	ACT_pkcs7_sig_note_set_of_authattrs = 14,
-	ACT_pkcs7_sig_note_signature = 15,
-	ACT_pkcs7_sig_note_skid = 16,
-	NR__pkcs7_actions = 17,
-};
-
-struct pkcs7_signed_info {
-	struct pkcs7_signed_info *next;
-	struct x509_certificate *signer;
-	unsigned int index;
-	bool unsupported_crypto;
-	bool blacklisted;
-	const void *msgdigest;
-	unsigned int msgdigest_len;
-	unsigned int authattrs_len;
-	const void *authattrs;
-	long unsigned int aa_set;
-	time64_t signing_time;
-	struct public_key_signature *sig;
-};
-
-struct pkcs7_message___2 {
-	struct x509_certificate *certs;
-	struct x509_certificate *crl;
-	struct pkcs7_signed_info *signed_infos;
-	u8 version;
-	bool have_authattrs;
-	enum OID data_type;
-	size_t data_len;
-	size_t data_hdrlen;
-	const void *data;
-};
-
-struct pkcs7_parse_context {
-	struct pkcs7_message___2 *msg;
-	struct pkcs7_signed_info *sinfo;
-	struct pkcs7_signed_info **ppsinfo;
-	struct x509_certificate *certs;
-	struct x509_certificate **ppcerts;
-	long unsigned int data;
-	enum OID last_oid;
-	unsigned int x509_index;
-	unsigned int sinfo_index;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_skid;
-	unsigned int raw_skid_size;
-	bool expect_skid;
-};
-
-struct biovec_slab {
-	int nr_vecs;
-	char *name;
-	struct kmem_cache *slab;
-};
-
-enum rq_qos_id {
-	RQ_QOS_WBT = 0,
-	RQ_QOS_LATENCY = 1,
-	RQ_QOS_COST = 2,
-};
-
-struct rq_qos_ops;
-
-struct rq_qos {
-	struct rq_qos_ops *ops;
-	struct request_queue *q;
-	enum rq_qos_id id;
-	struct rq_qos *next;
-};
-
-enum hctx_type {
-	HCTX_TYPE_DEFAULT = 0,
-	HCTX_TYPE_READ = 1,
-	HCTX_TYPE_POLL = 2,
-	HCTX_MAX_TYPES = 3,
-};
-
-struct blk_mq_debugfs_attr;
-
-struct rq_qos_ops {
-	void (*throttle)(struct rq_qos *, struct bio *);
-	void (*track)(struct rq_qos *, struct request *, struct bio *);
-	void (*merge)(struct rq_qos *, struct request *, struct bio *);
-	void (*issue)(struct rq_qos *, struct request *);
-	void (*requeue)(struct rq_qos *, struct request *);
-	void (*done)(struct rq_qos *, struct request *);
-	void (*done_bio)(struct rq_qos *, struct bio *);
-	void (*cleanup)(struct rq_qos *, struct bio *);
-	void (*queue_depth_changed)(struct rq_qos *);
-	void (*exit)(struct rq_qos *);
-	const struct blk_mq_debugfs_attr *debugfs_attrs;
-};
-
-struct bio_slab {
-	struct kmem_cache *slab;
-	unsigned int slab_ref;
-	unsigned int slab_size;
-	char name[8];
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
 };
 
 enum {
-	BLK_MQ_F_SHOULD_MERGE = 1,
-	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
-	BLK_MQ_F_STACKING = 4,
-	BLK_MQ_F_TAG_HCTX_SHARED = 8,
-	BLK_MQ_F_BLOCKING = 32,
-	BLK_MQ_F_NO_SCHED = 64,
-	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
-	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
-	BLK_MQ_S_STOPPED = 0,
-	BLK_MQ_S_TAG_ACTIVE = 1,
-	BLK_MQ_S_SCHED_RESTART = 2,
-	BLK_MQ_S_INACTIVE = 3,
-	BLK_MQ_MAX_DEPTH = 10240,
-	BLK_MQ_CPU_WORK_BATCH = 8,
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
 };
 
-enum {
-	WBT_RWQ_BG = 0,
-	WBT_RWQ_KSWAPD = 1,
-	WBT_RWQ_DISCARD = 2,
-	WBT_NUM_RWQ = 3,
-};
-
-struct req_iterator {
-	struct bvec_iter iter;
-	struct bio *bio;
-};
-
-struct blk_plug_cb;
-
-typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
-
-struct blk_plug_cb {
-	struct list_head list;
-	blk_plug_cb_fn callback;
-	void *data;
-};
-
-enum {
-	BLK_MQ_REQ_NOWAIT = 1,
-	BLK_MQ_REQ_RESERVED = 2,
-	BLK_MQ_REQ_PM = 4,
-};
-
-struct trace_event_raw_block_buffer {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
 	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_requeue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	unsigned int bytes;
-	char rwbs[8];
-	char comm[16];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_bounce {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_merge {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_queue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_get_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_plug {
-	struct trace_entry ent;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_unplug {
-	struct trace_entry ent;
-	int nr_rq;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_split {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	sector_t new_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	unsigned int nr_bios;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_block_buffer {};
-
-struct trace_event_data_offsets_block_rq_requeue {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq_complete {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_bio_bounce {};
-
-struct trace_event_data_offsets_block_bio_complete {};
-
-struct trace_event_data_offsets_block_bio_merge {};
-
-struct trace_event_data_offsets_block_bio_queue {};
-
-struct trace_event_data_offsets_block_get_rq {};
-
-struct trace_event_data_offsets_block_plug {};
-
-struct trace_event_data_offsets_block_unplug {};
-
-struct trace_event_data_offsets_block_split {};
-
-struct trace_event_data_offsets_block_bio_remap {};
-
-struct trace_event_data_offsets_block_rq_remap {};
-
-typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_rq_requeue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);
-
-typedef void (*btf_trace_block_rq_insert)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_issue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_merge)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_bio_bounce)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_backmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_frontmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_queue)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_getrq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_sleeprq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
-
-typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
-
-typedef void (*btf_trace_block_split)(void *, struct request_queue *, struct bio *, unsigned int);
-
-typedef void (*btf_trace_block_bio_remap)(void *, struct request_queue *, struct bio *, dev_t, sector_t);
-
-typedef void (*btf_trace_block_rq_remap)(void *, struct request_queue *, struct request *, dev_t, sector_t);
-
-enum {
-	BLK_MQ_NO_TAG = 4294967295,
-	BLK_MQ_TAG_MIN = 1,
-	BLK_MQ_TAG_MAX = 4294967294,
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct queue_sysfs_entry {
@@ -53067,130 +111778,16 @@
 };
 
 enum {
-	REQ_FSEQ_PREFLUSH = 1,
-	REQ_FSEQ_DATA = 2,
-	REQ_FSEQ_POSTFLUSH = 4,
-	REQ_FSEQ_DONE = 8,
-	REQ_FSEQ_ACTIONS = 7,
-	FLUSH_PENDING_TIMEOUT = 5000,
-};
-
-enum {
 	ICQ_EXITED = 4,
 	ICQ_DESTROYED = 8,
 };
 
-struct rq_map_data {
-	struct page **pages;
-	int page_order;
-	int nr_entries;
-	long unsigned int offset;
-	int null_mapped;
-	int from_user;
-};
-
-struct bio_map_data {
-	bool is_our_pages: 1;
-	bool is_null_mapped: 1;
-	struct iov_iter iter;
-	struct iovec iov[0];
-};
-
-enum bio_merge_status {
-	BIO_MERGE_OK = 0,
-	BIO_MERGE_NONE = 1,
-	BIO_MERGE_FAILED = 2,
-};
-
-typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
-
-enum {
-	BLK_MQ_UNIQUE_TAG_BITS = 16,
-	BLK_MQ_UNIQUE_TAG_MASK = 65535,
-};
-
-struct mq_inflight {
-	struct hd_struct *part;
-	unsigned int inflight[2];
-};
-
-struct flush_busy_ctx_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct list_head *list;
-};
-
-struct dispatch_rq_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct request *rq;
-};
-
-enum prep_dispatch {
-	PREP_DISPATCH_OK = 0,
-	PREP_DISPATCH_NO_TAG = 1,
-	PREP_DISPATCH_NO_BUDGET = 2,
-};
-
-struct rq_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	bool has_rq;
-};
-
-struct blk_mq_qe_pair {
-	struct list_head node;
-	struct request_queue *q;
-	struct elevator_type *type;
-};
-
-struct sbq_wait {
-	struct sbitmap_queue *sbq;
-	struct wait_queue_entry wait;
-};
-
-typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);
-
-typedef bool busy_tag_iter_fn(struct request *, void *, bool);
-
-struct bt_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	busy_iter_fn *fn;
-	void *data;
-	bool reserved;
-};
-
-struct bt_tags_iter_data {
-	struct blk_mq_tags *tags;
-	busy_tag_iter_fn *fn;
-	void *data;
-	unsigned int flags;
-};
-
-struct blk_queue_stats {
-	struct list_head callbacks;
-	spinlock_t lock;
-	bool enable_accounting;
-};
-
-struct blk_mq_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);
-};
-
 struct blk_mq_hw_ctx_sysfs_entry {
 	struct attribute attr;
 	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
 	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
 };
 
-typedef u32 compat_caddr_t;
-
-struct hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	long unsigned int start;
-};
-
 struct blkpg_ioctl_arg {
 	int op;
 	int flags;
@@ -53232,50 +111829,6 @@
 	__u32 __pad;
 };
 
-struct compat_blkpg_ioctl_arg {
-	compat_int_t op;
-	compat_int_t flags;
-	compat_int_t datalen;
-	compat_caddr_t data;
-};
-
-struct compat_hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	u32 start;
-};
-
-struct klist_node;
-
-struct klist {
-	spinlock_t k_lock;
-	struct list_head k_list;
-	void (*get)(struct klist_node *);
-	void (*put)(struct klist_node *);
-};
-
-struct klist_node {
-	void *n_klist;
-	struct list_head n_node;
-	struct kref n_ref;
-};
-
-struct klist_iter {
-	struct klist *i_klist;
-	struct klist_node *i_cur;
-};
-
-struct class_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-enum {
-	DISK_EVENT_FLAG_POLL = 1,
-	DISK_EVENT_FLAG_UEVENT = 2,
-};
-
 struct disk_events {
 	struct list_head node;
 	struct gendisk *disk;
@@ -53288,1764 +111841,54 @@
 	struct delayed_work dwork;
 };
 
-struct badblocks {
-	struct device *dev;
-	int count;
-	int unacked_exist;
-	int shift;
-	u64 *page;
-	int changed;
-	seqlock_t lock;
-	sector_t sector;
-	sector_t size;
-};
-
-struct disk_part_iter {
-	struct gendisk *disk;
-	struct hd_struct *part;
-	int idx;
-	unsigned int flags;
-};
-
-struct blk_major_name {
-	struct blk_major_name *next;
-	int major;
-	char name[16];
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
 };
 
 enum {
-	IOPRIO_WHO_PROCESS = 1,
-	IOPRIO_WHO_PGRP = 2,
-	IOPRIO_WHO_USER = 3,
+	DD_DIR_COUNT = 2,
 };
 
-struct parsed_partitions {
-	struct block_device *bdev;
-	char name[32];
-	struct {
-		sector_t from;
-		sector_t size;
-		int flags;
-		bool has_info;
-		struct partition_meta_info info;
-	} *parts;
-	int next;
-	int limit;
-	bool access_beyond_eod;
-	char *pp_buf;
-};
-
-typedef struct {
-	struct page *v;
-} Sector;
-
-struct RigidDiskBlock {
-	__u32 rdb_ID;
-	__be32 rdb_SummedLongs;
-	__s32 rdb_ChkSum;
-	__u32 rdb_HostID;
-	__be32 rdb_BlockBytes;
-	__u32 rdb_Flags;
-	__u32 rdb_BadBlockList;
-	__be32 rdb_PartitionList;
-	__u32 rdb_FileSysHeaderList;
-	__u32 rdb_DriveInit;
-	__u32 rdb_Reserved1[6];
-	__u32 rdb_Cylinders;
-	__u32 rdb_Sectors;
-	__u32 rdb_Heads;
-	__u32 rdb_Interleave;
-	__u32 rdb_Park;
-	__u32 rdb_Reserved2[3];
-	__u32 rdb_WritePreComp;
-	__u32 rdb_ReducedWrite;
-	__u32 rdb_StepRate;
-	__u32 rdb_Reserved3[5];
-	__u32 rdb_RDBBlocksLo;
-	__u32 rdb_RDBBlocksHi;
-	__u32 rdb_LoCylinder;
-	__u32 rdb_HiCylinder;
-	__u32 rdb_CylBlocks;
-	__u32 rdb_AutoParkSeconds;
-	__u32 rdb_HighRDSKBlock;
-	__u32 rdb_Reserved4;
-	char rdb_DiskVendor[8];
-	char rdb_DiskProduct[16];
-	char rdb_DiskRevision[4];
-	char rdb_ControllerVendor[8];
-	char rdb_ControllerProduct[16];
-	char rdb_ControllerRevision[4];
-	__u32 rdb_Reserved5[10];
-};
-
-struct PartitionBlock {
-	__be32 pb_ID;
-	__be32 pb_SummedLongs;
-	__s32 pb_ChkSum;
-	__u32 pb_HostID;
-	__be32 pb_Next;
-	__u32 pb_Flags;
-	__u32 pb_Reserved1[2];
-	__u32 pb_DevFlags;
-	__u8 pb_DriveName[32];
-	__u32 pb_Reserved2[15];
-	__be32 pb_Environment[17];
-	__u32 pb_EReserved[15];
-};
-
-struct partition_info {
-	u8 flg;
-	char id[3];
-	__be32 st;
-	__be32 siz;
-};
-
-struct rootsector {
-	char unused[342];
-	struct partition_info icdpart[8];
-	char unused2[12];
-	u32 hd_siz;
-	struct partition_info part[4];
-	u32 bsl_st;
-	u32 bsl_cnt;
-	u16 checksum;
-} __attribute__((packed));
-
-struct mac_partition {
-	__be16 signature;
-	__be16 res1;
-	__be32 map_count;
-	__be32 start_block;
-	__be32 block_count;
-	char name[32];
-	char type[32];
-	__be32 data_start;
-	__be32 data_count;
-	__be32 status;
-	__be32 boot_start;
-	__be32 boot_size;
-	__be32 boot_load;
-	__be32 boot_load2;
-	__be32 boot_entry;
-	__be32 boot_entry2;
-	__be32 boot_cksum;
-	char processor[16];
-};
-
-struct mac_driver_desc {
-	__be16 signature;
-	__be16 block_size;
-	__be32 block_count;
-};
-
-struct msdos_partition {
-	u8 boot_ind;
-	u8 head;
-	u8 sector;
-	u8 cyl;
-	u8 sys_ind;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_cyl;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct frag {
-	struct list_head list;
-	u32 group;
-	u8 num;
-	u8 rec;
-	u8 map;
-	u8 data[0];
-};
-
-struct privhead {
-	u16 ver_major;
-	u16 ver_minor;
-	u64 logical_disk_start;
-	u64 logical_disk_size;
-	u64 config_start;
-	u64 config_size;
-	uuid_t disk_id;
-};
-
-struct tocblock {
-	u8 bitmap1_name[16];
-	u64 bitmap1_start;
-	u64 bitmap1_size;
-	u8 bitmap2_name[16];
-	u64 bitmap2_start;
-	u64 bitmap2_size;
-};
-
-struct vmdb {
-	u16 ver_major;
-	u16 ver_minor;
-	u32 vblk_size;
-	u32 vblk_offset;
-	u32 last_vblk_seq;
-};
-
-struct vblk_comp {
-	u8 state[16];
-	u64 parent_id;
-	u8 type;
-	u8 children;
-	u16 chunksize;
-};
-
-struct vblk_dgrp {
-	u8 disk_id[64];
-};
-
-struct vblk_disk {
-	uuid_t disk_id;
-	u8 alt_name[128];
-};
-
-struct vblk_part {
-	u64 start;
-	u64 size;
-	u64 volume_offset;
-	u64 parent_id;
-	u64 disk_id;
-	u8 partnum;
-};
-
-struct vblk_volu {
-	u8 volume_type[16];
-	u8 volume_state[16];
-	u8 guid[16];
-	u8 drive_hint[4];
-	u64 size;
-	u8 partition_type;
-};
-
-struct vblk {
-	u8 name[64];
-	u64 obj_id;
-	u32 sequence;
-	u8 flags;
-	u8 type;
-	union {
-		struct vblk_comp comp;
-		struct vblk_dgrp dgrp;
-		struct vblk_disk disk;
-		struct vblk_part part;
-		struct vblk_volu volu;
-	} vblk;
-	struct list_head list;
-};
-
-struct ldmdb {
-	struct privhead ph;
-	struct tocblock toc;
-	struct vmdb vm;
-	struct list_head v_dgrp;
-	struct list_head v_disk;
-	struct list_head v_volu;
-	struct list_head v_comp;
-	struct list_head v_part;
-};
-
-struct fat_boot_sector {
-	__u8 ignored[3];
-	__u8 system_id[8];
-	__u8 sector_size[2];
-	__u8 sec_per_clus;
-	__le16 reserved;
-	__u8 fats;
-	__u8 dir_entries[2];
-	__u8 sectors[2];
-	__u8 media;
-	__le16 fat_length;
-	__le16 secs_track;
-	__le16 heads;
-	__le32 hidden;
-	__le32 total_sect;
-	union {
-		struct {
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat16;
-		struct {
-			__le32 length;
-			__le16 flags;
-			__u8 version[2];
-			__le32 root_cluster;
-			__le16 info_sector;
-			__le16 backup_boot;
-			__le16 reserved2[6];
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat32;
-	};
-};
-
-enum msdos_sys_ind {
-	DOS_EXTENDED_PARTITION = 5,
-	LINUX_EXTENDED_PARTITION = 133,
-	WIN98_EXTENDED_PARTITION = 15,
-	LINUX_DATA_PARTITION = 131,
-	LINUX_LVM_PARTITION = 142,
-	LINUX_RAID_PARTITION = 253,
-	SOLARIS_X86_PARTITION = 130,
-	NEW_SOLARIS_X86_PARTITION = 191,
-	DM6_AUX1PARTITION = 81,
-	DM6_AUX3PARTITION = 83,
-	DM6_PARTITION = 84,
-	EZD_PARTITION = 85,
-	FREEBSD_PARTITION = 165,
-	OPENBSD_PARTITION = 166,
-	NETBSD_PARTITION = 169,
-	BSDI_PARTITION = 183,
-	MINIX_PARTITION = 129,
-	UNIXWARE_PARTITION = 99,
-};
-
-struct solaris_x86_slice {
-	__le16 s_tag;
-	__le16 s_flag;
-	__le32 s_start;
-	__le32 s_size;
-};
-
-struct solaris_x86_vtoc {
-	unsigned int v_bootinfo[3];
-	__le32 v_sanity;
-	__le32 v_version;
-	char v_volume[8];
-	__le16 v_sectorsz;
-	__le16 v_nparts;
-	unsigned int v_reserved[10];
-	struct solaris_x86_slice v_slice[16];
-	unsigned int timestamp[16];
-	char v_asciilabel[128];
-};
-
-struct bsd_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	__u8 p_fstype;
-	__u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct bsd_disklabel {
-	__le32 d_magic;
-	__s16 d_type;
-	__s16 d_subtype;
-	char d_typename[16];
-	char d_packname[16];
-	__u32 d_secsize;
-	__u32 d_nsectors;
-	__u32 d_ntracks;
-	__u32 d_ncylinders;
-	__u32 d_secpercyl;
-	__u32 d_secperunit;
-	__u16 d_sparespertrack;
-	__u16 d_sparespercyl;
-	__u32 d_acylinders;
-	__u16 d_rpm;
-	__u16 d_interleave;
-	__u16 d_trackskew;
-	__u16 d_cylskew;
-	__u32 d_headswitch;
-	__u32 d_trkseek;
-	__u32 d_flags;
-	__u32 d_drivedata[5];
-	__u32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct bsd_partition d_partitions[16];
-};
-
-struct unixware_slice {
-	__le16 s_label;
-	__le16 s_flags;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct unixware_vtoc {
-	__le32 v_magic;
-	__le32 v_version;
-	char v_name[8];
-	__le16 v_nslices;
-	__le16 v_unknown1;
-	__le32 v_reserved[10];
-	struct unixware_slice v_slice[16];
-};
-
-struct unixware_disklabel {
-	__le32 d_type;
-	__le32 d_magic;
-	__le32 d_version;
-	char d_serial[12];
-	__le32 d_ncylinders;
-	__le32 d_ntracks;
-	__le32 d_nsectors;
-	__le32 d_secsize;
-	__le32 d_part_start;
-	__le32 d_unknown1[12];
-	__le32 d_alt_tbl;
-	__le32 d_alt_len;
-	__le32 d_phys_cyl;
-	__le32 d_phys_trk;
-	__le32 d_phys_sec;
-	__le32 d_phys_bytes;
-	__le32 d_unknown2;
-	__le32 d_unknown3;
-	__le32 d_pad[8];
-	struct unixware_vtoc vtoc;
-};
-
-struct d_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	u8 p_fstype;
-	u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct disklabel {
-	__le32 d_magic;
-	__le16 d_type;
-	__le16 d_subtype;
-	u8 d_typename[16];
-	u8 d_packname[16];
-	__le32 d_secsize;
-	__le32 d_nsectors;
-	__le32 d_ntracks;
-	__le32 d_ncylinders;
-	__le32 d_secpercyl;
-	__le32 d_secprtunit;
-	__le16 d_sparespertrack;
-	__le16 d_sparespercyl;
-	__le32 d_acylinders;
-	__le16 d_rpm;
-	__le16 d_interleave;
-	__le16 d_trackskew;
-	__le16 d_cylskew;
-	__le32 d_headswitch;
-	__le32 d_trkseek;
-	__le32 d_flags;
-	__le32 d_drivedata[5];
-	__le32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct d_partition d_partitions[18];
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
 };
 
 enum {
-	LINUX_RAID_PARTITION___2 = 253,
+	DD_PRIO_COUNT = 3,
 };
 
-struct sgi_volume {
-	s8 name[8];
-	__be32 block_num;
-	__be32 num_bytes;
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
 };
 
-struct sgi_partition {
-	__be32 num_blocks;
-	__be32 first_block;
-	__be32 type;
-};
-
-struct sgi_disklabel {
-	__be32 magic_mushroom;
-	__be16 root_part_num;
-	__be16 swap_part_num;
-	s8 boot_file[16];
-	u8 _unused0[48];
-	struct sgi_volume volume[15];
-	struct sgi_partition partitions[16];
-	__be32 csum;
-	__be32 _unused1;
-};
-
-enum {
-	SUN_WHOLE_DISK = 5,
-	LINUX_RAID_PARTITION___3 = 253,
-};
-
-struct sun_info {
-	__be16 id;
-	__be16 flags;
-};
-
-struct sun_vtoc {
-	__be32 version;
-	char volume[8];
-	__be16 nparts;
-	struct sun_info infos[8];
-	__be16 padding;
-	__be32 bootinfo[3];
-	__be32 sanity;
-	__be32 reserved[10];
-	__be32 timestamp[8];
-};
-
-struct sun_partition {
-	__be32 start_cylinder;
-	__be32 num_sectors;
-};
-
-struct sun_disklabel {
-	unsigned char info[128];
-	struct sun_vtoc vtoc;
-	__be32 write_reinstruct;
-	__be32 read_reinstruct;
-	unsigned char spare[148];
-	__be16 rspeed;
-	__be16 pcylcount;
-	__be16 sparecyl;
-	__be16 obs1;
-	__be16 obs2;
-	__be16 ilfact;
-	__be16 ncyl;
-	__be16 nacyl;
-	__be16 ntrks;
-	__be16 nsect;
-	__be16 obs3;
-	__be16 obs4;
-	struct sun_partition partitions[8];
-	__be16 magic;
-	__be16 csum;
-};
-
-struct pt_info {
-	s32 pi_nblocks;
-	u32 pi_blkoff;
-};
-
-struct ultrix_disklabel {
-	s32 pt_magic;
-	s32 pt_valid;
-	struct pt_info pt_part[8];
-};
-
-struct _gpt_header {
-	__le64 signature;
-	__le32 revision;
-	__le32 header_size;
-	__le32 header_crc32;
-	__le32 reserved1;
-	__le64 my_lba;
-	__le64 alternate_lba;
-	__le64 first_usable_lba;
-	__le64 last_usable_lba;
-	efi_guid_t disk_guid;
-	__le64 partition_entry_lba;
-	__le32 num_partition_entries;
-	__le32 sizeof_partition_entry;
-	__le32 partition_entry_array_crc32;
-} __attribute__((packed));
-
-typedef struct _gpt_header gpt_header;
-
-struct _gpt_entry_attributes {
-	u64 required_to_function: 1;
-	u64 reserved: 47;
-	u64 type_guid_specific: 16;
-};
-
-typedef struct _gpt_entry_attributes gpt_entry_attributes;
-
-struct _gpt_entry {
-	efi_guid_t partition_type_guid;
-	efi_guid_t unique_partition_guid;
-	__le64 starting_lba;
-	__le64 ending_lba;
-	gpt_entry_attributes attributes;
-	__le16 partition_name[36];
-};
-
-typedef struct _gpt_entry gpt_entry;
-
-struct _gpt_mbr_record {
-	u8 boot_indicator;
-	u8 start_head;
-	u8 start_sector;
-	u8 start_track;
-	u8 os_type;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_track;
-	__le32 starting_lba;
-	__le32 size_in_lba;
-};
-
-typedef struct _gpt_mbr_record gpt_mbr_record;
-
-struct _legacy_mbr {
-	u8 boot_code[440];
-	__le32 unique_mbr_signature;
-	__le16 unknown;
-	gpt_mbr_record partition_record[4];
-	__le16 signature;
-} __attribute__((packed));
-
-typedef struct _legacy_mbr legacy_mbr;
-
-struct d_partition___2 {
-	__le32 p_res;
-	u8 p_fstype;
-	u8 p_res2[3];
-	__le32 p_offset;
-	__le32 p_size;
-};
-
-struct disklabel___2 {
-	u8 d_reserved[270];
-	struct d_partition___2 d_partitions[2];
-	u8 d_blank[208];
-	__le16 d_magic;
-} __attribute__((packed));
-
-struct volumeid {
-	u8 vid_unused[248];
-	u8 vid_mac[8];
-};
-
-struct dkconfig {
-	u8 ios_unused0[128];
-	__be32 ios_slcblk;
-	__be16 ios_slccnt;
-	u8 ios_unused1[122];
-};
-
-struct dkblk0 {
-	struct volumeid dk_vid;
-	struct dkconfig dk_ios;
-};
-
-struct slice {
-	__be32 nblocks;
-	__be32 blkoff;
-};
-
-struct rq_wait {
-	wait_queue_head_t wait;
-	atomic_t inflight;
-};
-
-struct rq_depth {
-	unsigned int max_depth;
-	int scale_step;
-	bool scaled_max;
-	unsigned int queue_depth;
-	unsigned int default_depth;
-};
-
-typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
-
-typedef void cleanup_cb_t(struct rq_wait *, void *);
-
-struct rq_qos_wait_data {
-	struct wait_queue_entry wq;
-	struct task_struct *task;
-	struct rq_wait *rqw;
-	acquire_inflight_cb_t *cb;
-	void *private_data;
-	bool got_token;
-};
-
-struct cdrom_device_ops;
-
-struct cdrom_device_info {
-	const struct cdrom_device_ops *ops;
-	struct list_head list;
-	struct gendisk *disk;
-	void *handle;
-	int mask;
-	int speed;
-	int capacity;
-	unsigned int options: 30;
-	unsigned int mc_flags: 2;
-	unsigned int vfs_events;
-	unsigned int ioctl_events;
-	int use_count;
-	char name[20];
-	__u8 sanyo_slot: 2;
-	__u8 keeplocked: 1;
-	__u8 reserved: 5;
-	int cdda_method;
-	__u8 last_sense;
-	__u8 media_written;
-	short unsigned int mmc3_profile;
-	int for_data;
-	int (*exit)(struct cdrom_device_info *);
-	int mrw_mode_page;
-};
-
-struct scsi_sense_hdr {
-	u8 response_code;
-	u8 sense_key;
-	u8 asc;
-	u8 ascq;
-	u8 byte4;
-	u8 byte5;
-	u8 byte6;
-	u8 additional_length;
-};
-
-struct cdrom_msf0 {
-	__u8 minute;
-	__u8 second;
-	__u8 frame;
-};
-
-union cdrom_addr {
-	struct cdrom_msf0 msf;
-	int lba;
-};
-
-struct cdrom_multisession {
-	union cdrom_addr addr;
-	__u8 xa_flag;
-	__u8 addr_format;
-};
-
-struct cdrom_mcn {
-	__u8 medium_catalog_number[14];
-};
-
-struct request_sense;
-
-struct cdrom_generic_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct request_sense *sense;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	union {
-		void *reserved[1];
-		void *unused;
-	};
-};
-
-struct request_sense {
-	__u8 error_code: 7;
-	__u8 valid: 1;
-	__u8 segment_number;
-	__u8 sense_key: 4;
-	__u8 reserved2: 1;
-	__u8 ili: 1;
-	__u8 reserved1: 2;
-	__u8 information[4];
-	__u8 add_sense_len;
-	__u8 command_info[4];
-	__u8 asc;
-	__u8 ascq;
-	__u8 fruc;
-	__u8 sks[3];
-	__u8 asb[46];
-};
-
-struct packet_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct scsi_sense_hdr *sshdr;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct cdrom_device_ops {
-	int (*open)(struct cdrom_device_info *, int);
-	void (*release)(struct cdrom_device_info *);
-	int (*drive_status)(struct cdrom_device_info *, int);
-	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
-	int (*tray_move)(struct cdrom_device_info *, int);
-	int (*lock_door)(struct cdrom_device_info *, int);
-	int (*select_speed)(struct cdrom_device_info *, int);
-	int (*select_disc)(struct cdrom_device_info *, int);
-	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
-	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
-	int (*reset)(struct cdrom_device_info *);
-	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
-	const int capability;
-	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
-};
-
-struct scsi_ioctl_command {
-	unsigned int inlen;
-	unsigned int outlen;
-	unsigned char data[0];
-};
-
-enum scsi_device_event {
-	SDEV_EVT_MEDIA_CHANGE = 1,
-	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
-	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
-	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
-	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
-	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
-	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
-	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
-	SDEV_EVT_FIRST = 1,
-	SDEV_EVT_LAST = 8,
-	SDEV_EVT_MAXBITS = 9,
-};
-
-struct scsi_request {
-	unsigned char __cmd[16];
-	unsigned char *cmd;
-	short unsigned int cmd_len;
-	int result;
-	unsigned int sense_len;
-	unsigned int resid_len;
-	int retries;
-	void *sense;
-};
-
-struct sg_io_hdr {
-	int interface_id;
-	int dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	unsigned int dxfer_len;
-	void *dxferp;
-	unsigned char *cmdp;
-	void *sbp;
-	unsigned int timeout;
-	unsigned int flags;
-	int pack_id;
-	void *usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	int resid;
-	unsigned int duration;
-	unsigned int info;
-};
-
-struct compat_sg_io_hdr {
-	compat_int_t interface_id;
-	compat_int_t dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	compat_uint_t dxfer_len;
-	compat_uint_t dxferp;
-	compat_uptr_t cmdp;
-	compat_uptr_t sbp;
-	compat_uint_t timeout;
-	compat_uint_t flags;
-	compat_int_t pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	compat_int_t resid;
-	compat_uint_t duration;
-	compat_uint_t info;
-};
-
-struct blk_cmd_filter {
-	long unsigned int read_ok[4];
-	long unsigned int write_ok[4];
-};
-
-struct compat_cdrom_generic_command {
-	unsigned char cmd[12];
-	compat_caddr_t buffer;
-	compat_uint_t buflen;
-	compat_int_t stat;
-	compat_caddr_t sense;
-	unsigned char data_direction;
-	unsigned char pad[3];
-	compat_int_t quiet;
-	compat_int_t timeout;
-	compat_caddr_t unused;
-};
-
-enum {
-	OMAX_SB_LEN = 16,
-};
-
-struct bsg_device {
-	struct request_queue *queue;
-	spinlock_t lock;
-	struct hlist_node dev_list;
-	refcount_t ref_count;
-	char name[20];
-	int max_queue;
-};
-
-struct bsg_job;
-
-typedef int bsg_job_fn(struct bsg_job *);
-
-struct bsg_buffer {
-	unsigned int payload_len;
-	int sg_cnt;
-	struct scatterlist *sg_list;
-};
-
-struct bsg_job {
-	struct device *dev;
-	struct kref kref;
-	unsigned int timeout;
-	void *request;
-	void *reply;
-	unsigned int request_len;
-	unsigned int reply_len;
-	struct bsg_buffer request_payload;
-	struct bsg_buffer reply_payload;
-	int result;
-	unsigned int reply_payload_rcv_len;
-	struct request *bidi_rq;
-	struct bio *bidi_bio;
-	void *dd_data;
-};
-
-typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
-
-struct bsg_set {
-	struct blk_mq_tag_set tag_set;
-	bsg_job_fn *job_fn;
-	bsg_timeout_fn *timeout_fn;
-};
-
-typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
-
-typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
-
-typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
-
-typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
-
-typedef size_t blkcg_pol_stat_pd_fn(struct blkg_policy_data *, char *, size_t);
-
-struct blkcg_policy {
-	int plid;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
-	blkcg_pol_init_cpd_fn *cpd_init_fn;
-	blkcg_pol_free_cpd_fn *cpd_free_fn;
-	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
-	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
-	blkcg_pol_init_pd_fn *pd_init_fn;
-	blkcg_pol_online_pd_fn *pd_online_fn;
-	blkcg_pol_offline_pd_fn *pd_offline_fn;
-	blkcg_pol_free_pd_fn *pd_free_fn;
-	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
-	blkcg_pol_stat_pd_fn *pd_stat_fn;
-};
-
-struct blkg_conf_ctx {
-	struct gendisk *disk;
-	struct blkcg_gq *blkg;
-	char *body;
-};
-
-enum blkg_rwstat_type {
-	BLKG_RWSTAT_READ = 0,
-	BLKG_RWSTAT_WRITE = 1,
-	BLKG_RWSTAT_SYNC = 2,
-	BLKG_RWSTAT_ASYNC = 3,
-	BLKG_RWSTAT_DISCARD = 4,
-	BLKG_RWSTAT_NR = 5,
-	BLKG_RWSTAT_TOTAL = 5,
-};
-
-struct blkg_rwstat {
-	struct percpu_counter cpu_cnt[5];
-	atomic64_t aux_cnt[5];
-};
-
-struct blkg_rwstat_sample {
-	u64 cnt[5];
-};
-
-struct throtl_service_queue {
-	struct throtl_service_queue *parent_sq;
-	struct list_head queued[2];
-	unsigned int nr_queued[2];
-	struct rb_root_cached pending_tree;
-	unsigned int nr_pending;
-	long unsigned int first_pending_disptime;
-	struct timer_list pending_timer;
-};
-
-struct latency_bucket {
-	long unsigned int total_latency;
-	int samples;
-};
-
-struct avg_latency_bucket {
-	long unsigned int latency;
-	bool valid;
-};
-
-struct throtl_data {
-	struct throtl_service_queue service_queue;
-	struct request_queue *queue;
-	unsigned int nr_queued[2];
-	unsigned int throtl_slice;
-	struct work_struct dispatch_work;
-	unsigned int limit_index;
-	bool limit_valid[2];
-	long unsigned int low_upgrade_time;
-	long unsigned int low_downgrade_time;
-	unsigned int scale;
-	struct latency_bucket tmp_buckets[18];
-	struct avg_latency_bucket avg_buckets[18];
-	struct latency_bucket *latency_buckets[2];
-	long unsigned int last_calculate_time;
-	long unsigned int filtered_latency;
-	bool track_bio_latency;
-};
-
-struct throtl_grp;
-
-struct throtl_qnode {
-	struct list_head node;
-	struct bio_list bios;
-	struct throtl_grp *tg;
-};
-
-struct throtl_grp {
-	struct blkg_policy_data pd;
-	struct rb_node rb_node;
-	struct throtl_data *td;
-	struct throtl_service_queue service_queue;
-	struct throtl_qnode qnode_on_self[2];
-	struct throtl_qnode qnode_on_parent[2];
-	long unsigned int disptime;
-	unsigned int flags;
-	bool has_rules[2];
-	uint64_t bps[4];
-	uint64_t bps_conf[4];
-	unsigned int iops[4];
-	unsigned int iops_conf[4];
-	uint64_t bytes_disp[2];
-	unsigned int io_disp[2];
-	long unsigned int last_low_overflow_time[2];
-	uint64_t last_bytes_disp[2];
-	unsigned int last_io_disp[2];
-	long unsigned int last_check_time;
-	long unsigned int latency_target;
-	long unsigned int latency_target_conf;
-	long unsigned int slice_start[2];
-	long unsigned int slice_end[2];
-	long unsigned int last_finish_time;
-	long unsigned int checked_last_finish_time;
-	long unsigned int avg_idletime;
-	long unsigned int idletime_threshold;
-	long unsigned int idletime_threshold_conf;
-	unsigned int bio_cnt;
-	unsigned int bad_bio_cnt;
-	long unsigned int bio_cnt_reset_time;
-	struct blkg_rwstat stat_bytes;
-	struct blkg_rwstat stat_ios;
-};
-
-enum tg_state_flags {
-	THROTL_TG_PENDING = 1,
-	THROTL_TG_WAS_EMPTY = 2,
-};
-
-enum {
-	LIMIT_LOW = 0,
-	LIMIT_MAX = 1,
-	LIMIT_CNT = 2,
-};
-
-struct blk_iolatency {
-	struct rq_qos rqos;
-	struct timer_list timer;
-	atomic_t enabled;
-};
-
-struct iolatency_grp;
-
-struct child_latency_info {
-	spinlock_t lock;
-	u64 last_scale_event;
-	u64 scale_lat;
-	u64 nr_samples;
-	struct iolatency_grp *scale_grp;
-	atomic_t scale_cookie;
-};
-
-struct percentile_stats {
-	u64 total;
-	u64 missed;
-};
-
-struct latency_stat {
-	union {
-		struct percentile_stats ps;
-		struct blk_rq_stat rqs;
-	};
-};
-
-struct iolatency_grp {
-	struct blkg_policy_data pd;
-	struct latency_stat *stats;
-	struct latency_stat cur_stat;
-	struct blk_iolatency *blkiolat;
-	struct rq_depth rq_depth;
-	struct rq_wait rq_wait;
-	atomic64_t window_start;
-	atomic_t scale_cookie;
-	u64 min_lat_nsec;
-	u64 cur_win_nsec;
-	u64 lat_avg;
-	u64 nr_samples;
-	bool ssd;
-	struct child_latency_info child_lat;
-};
-
-enum {
-	MILLION = 1000000,
-	MIN_PERIOD = 1000,
-	MAX_PERIOD = 1000000,
-	MARGIN_MIN_PCT = 10,
-	MARGIN_LOW_PCT = 20,
-	MARGIN_TARGET_PCT = 50,
-	INUSE_ADJ_STEP_PCT = 25,
-	TIMER_SLACK_PCT = 1,
-	WEIGHT_ONE = 65536,
-	VTIME_PER_SEC_SHIFT = 37,
-	VTIME_PER_SEC = 0,
-	VTIME_PER_USEC = 137438,
-	VTIME_PER_NSEC = 137,
-	VRATE_MIN_PPM = 10000,
-	VRATE_MAX_PPM = 100000000,
-	VRATE_MIN = 1374,
-	VRATE_CLAMP_ADJ_PCT = 4,
-	RQ_WAIT_BUSY_PCT = 5,
-	UNBUSY_THR_PCT = 75,
-	MIN_DELAY_THR_PCT = 500,
-	MAX_DELAY_THR_PCT = 25000,
-	MIN_DELAY = 250,
-	MAX_DELAY = 250000,
-	DFGV_USAGE_PCT = 50,
-	DFGV_PERIOD = 100000,
-	MAX_LAGGING_PERIODS = 10,
-	AUTOP_CYCLE_NSEC = 1410065408,
-	IOC_PAGE_SHIFT = 12,
-	IOC_PAGE_SIZE = 4096,
-	IOC_SECT_TO_PAGE_SHIFT = 3,
-	LCOEF_RANDIO_PAGES = 4096,
-};
-
-enum ioc_running {
-	IOC_IDLE = 0,
-	IOC_RUNNING = 1,
-	IOC_STOP = 2,
-};
-
-enum {
-	QOS_ENABLE = 0,
-	QOS_CTRL = 1,
-	NR_QOS_CTRL_PARAMS = 2,
-};
-
-enum {
-	QOS_RPPM = 0,
-	QOS_RLAT = 1,
-	QOS_WPPM = 2,
-	QOS_WLAT = 3,
-	QOS_MIN = 4,
-	QOS_MAX = 5,
-	NR_QOS_PARAMS = 6,
-};
-
-enum {
-	COST_CTRL = 0,
-	COST_MODEL = 1,
-	NR_COST_CTRL_PARAMS = 2,
-};
-
-enum {
-	I_LCOEF_RBPS = 0,
-	I_LCOEF_RSEQIOPS = 1,
-	I_LCOEF_RRANDIOPS = 2,
-	I_LCOEF_WBPS = 3,
-	I_LCOEF_WSEQIOPS = 4,
-	I_LCOEF_WRANDIOPS = 5,
-	NR_I_LCOEFS = 6,
-};
-
-enum {
-	LCOEF_RPAGE = 0,
-	LCOEF_RSEQIO = 1,
-	LCOEF_RRANDIO = 2,
-	LCOEF_WPAGE = 3,
-	LCOEF_WSEQIO = 4,
-	LCOEF_WRANDIO = 5,
-	NR_LCOEFS = 6,
-};
-
-enum {
-	AUTOP_INVALID = 0,
-	AUTOP_HDD = 1,
-	AUTOP_SSD_QD1 = 2,
-	AUTOP_SSD_DFL = 3,
-	AUTOP_SSD_FAST = 4,
-};
-
-struct ioc_params {
-	u32 qos[6];
-	u64 i_lcoefs[6];
-	u64 lcoefs[6];
-	u32 too_fast_vrate_pct;
-	u32 too_slow_vrate_pct;
-};
-
-struct ioc_margins {
-	s64 min;
-	s64 low;
-	s64 target;
-};
-
-struct ioc_missed {
-	local_t nr_met;
-	local_t nr_missed;
-	u32 last_met;
-	u32 last_missed;
-};
-
-struct ioc_pcpu_stat {
-	struct ioc_missed missed[2];
-	local64_t rq_wait_ns;
-	u64 last_rq_wait_ns;
-};
-
-struct ioc {
-	struct rq_qos rqos;
-	bool enabled;
-	struct ioc_params params;
-	struct ioc_margins margins;
-	u32 period_us;
-	u32 timer_slack_ns;
-	u64 vrate_min;
-	u64 vrate_max;
-	spinlock_t lock;
-	struct timer_list timer;
-	struct list_head active_iocgs;
-	struct ioc_pcpu_stat *pcpu_stat;
-	enum ioc_running running;
-	atomic64_t vtime_rate;
-	u64 vtime_base_rate;
-	s64 vtime_err;
-	seqcount_spinlock_t period_seqcount;
-	u64 period_at;
-	u64 period_at_vtime;
-	atomic64_t cur_period;
-	int busy_level;
-	bool weights_updated;
-	atomic_t hweight_gen;
-	u64 dfgv_period_at;
-	u64 dfgv_period_rem;
-	u64 dfgv_usage_us_sum;
-	u64 autop_too_fast_at;
-	u64 autop_too_slow_at;
-	int autop_idx;
-	bool user_qos_params: 1;
-	bool user_cost_model: 1;
-};
-
-struct iocg_pcpu_stat {
-	local64_t abs_vusage;
-};
-
-struct iocg_stat {
-	u64 usage_us;
-	u64 wait_us;
-	u64 indebt_us;
-	u64 indelay_us;
-};
-
-struct ioc_gq {
-	struct blkg_policy_data pd;
-	struct ioc *ioc;
-	u32 cfg_weight;
-	u32 weight;
-	u32 active;
-	u32 inuse;
-	u32 last_inuse;
-	s64 saved_margin;
-	sector_t cursor;
-	atomic64_t vtime;
-	atomic64_t done_vtime;
-	u64 abs_vdebt;
-	u64 delay;
-	u64 delay_at;
-	atomic64_t active_period;
-	struct list_head active_list;
-	u64 child_active_sum;
-	u64 child_inuse_sum;
-	u64 child_adjusted_sum;
-	int hweight_gen;
-	u32 hweight_active;
-	u32 hweight_inuse;
-	u32 hweight_donating;
-	u32 hweight_after_donation;
-	struct list_head walk_list;
-	struct list_head surplus_list;
-	struct wait_queue_head waitq;
-	struct hrtimer waitq_timer;
-	u64 activated_at;
-	struct iocg_pcpu_stat *pcpu_stat;
-	struct iocg_stat local_stat;
-	struct iocg_stat desc_stat;
-	struct iocg_stat last_stat;
-	u64 last_stat_abs_vusage;
-	u64 usage_delta_us;
-	u64 wait_since;
-	u64 indebt_since;
-	u64 indelay_since;
-	int level;
-	struct ioc_gq *ancestors[0];
-};
-
-struct ioc_cgrp {
-	struct blkcg_policy_data cpd;
-	unsigned int dfl_weight;
-};
-
-struct ioc_now {
-	u64 now_ns;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-};
-
-struct iocg_wait {
-	struct wait_queue_entry wait;
-	struct bio *bio;
-	u64 abs_cost;
-	bool committed;
-};
-
-struct iocg_wake_ctx {
-	struct ioc_gq *iocg;
-	u32 hw_inuse;
-	s64 vbudget;
-};
-
-struct trace_event_raw_iocost_iocg_activate {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-	u64 last_period;
-	u64 cur_period;
-	u64 vtime;
-	u32 weight;
-	u32 inuse;
-	u64 hweight_active;
-	u64 hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocg_inuse_update {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u32 old_inuse;
-	u32 new_inuse;
-	u64 old_hweight_inuse;
-	u64 new_hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_ioc_vrate_adj {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u64 old_vrate;
-	u64 new_vrate;
-	int busy_level;
-	u32 read_missed_ppm;
-	u32 write_missed_ppm;
-	u32 rq_wait_pct;
-	int nr_lagging;
-	int nr_shortages;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_iocg_forgive_debt {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u32 usage_pct;
-	u64 old_debt;
-	u64 new_debt;
-	u64 old_delay;
-	u64 new_delay;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iocost_iocg_activate {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocg_inuse_update {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocost_ioc_vrate_adj {
-	u32 devname;
-};
-
-struct trace_event_data_offsets_iocost_iocg_forgive_debt {
-	u32 devname;
-	u32 cgroup;
-};
-
-typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
-
-typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
-
-struct deadline_data {
+struct dd_per_prio {
+	struct list_head dispatch;
 	struct rb_root sort_list[2];
 	struct list_head fifo_list[2];
 	struct request *next_rq[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
 	unsigned int batching;
 	unsigned int starved;
 	int fifo_expire[2];
 	int fifo_batch;
 	int writes_starved;
 	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
 	spinlock_t lock;
 	spinlock_t zone_lock;
-	struct list_head dispatch;
-};
-
-struct bfq_entity;
-
-struct bfq_service_tree {
-	struct rb_root active;
-	struct rb_root idle;
-	struct bfq_entity *first_idle;
-	struct bfq_entity *last_idle;
-	u64 vtime;
-	long unsigned int wsum;
-};
-
-struct bfq_sched_data;
-
-struct bfq_entity {
-	struct rb_node rb_node;
-	bool on_st_or_in_serv;
-	u64 start;
-	u64 finish;
-	struct rb_root *tree;
-	u64 min_start;
-	int service;
-	int budget;
-	int dev_weight;
-	int weight;
-	int new_weight;
-	int orig_weight;
-	struct bfq_entity *parent;
-	struct bfq_sched_data *my_sched_data;
-	struct bfq_sched_data *sched_data;
-	int prio_changed;
-	bool in_groups_with_pending_reqs;
-};
-
-struct bfq_sched_data {
-	struct bfq_entity *in_service_entity;
-	struct bfq_entity *next_in_service;
-	struct bfq_service_tree service_tree[3];
-	long unsigned int bfq_class_idle_last_service;
-};
-
-struct bfq_weight_counter {
-	unsigned int weight;
-	unsigned int num_active;
-	struct rb_node weights_node;
-};
-
-struct bfq_ttime {
-	u64 last_end_request;
-	u64 ttime_total;
-	long unsigned int ttime_samples;
-	u64 ttime_mean;
-};
-
-struct bfq_data;
-
-struct bfq_io_cq;
-
-struct bfq_queue {
-	int ref;
-	struct bfq_data *bfqd;
-	short unsigned int ioprio;
-	short unsigned int ioprio_class;
-	short unsigned int new_ioprio;
-	short unsigned int new_ioprio_class;
-	u64 last_serv_time_ns;
-	unsigned int inject_limit;
-	long unsigned int decrease_time_jif;
-	struct bfq_queue *new_bfqq;
-	struct rb_node pos_node;
-	struct rb_root *pos_root;
-	struct rb_root sort_list;
-	struct request *next_rq;
-	int queued[2];
-	int allocated;
-	int meta_pending;
-	struct list_head fifo;
-	struct bfq_entity entity;
-	struct bfq_weight_counter *weight_counter;
-	int max_budget;
-	long unsigned int budget_timeout;
-	int dispatched;
-	long unsigned int flags;
-	struct list_head bfqq_list;
-	struct bfq_ttime ttime;
-	u32 seek_history;
-	struct hlist_node burst_list_node;
-	sector_t last_request_pos;
-	unsigned int requests_within_timer;
-	pid_t pid;
-	struct bfq_io_cq *bic;
-	long unsigned int wr_cur_max_time;
-	long unsigned int soft_rt_next_start;
-	long unsigned int last_wr_start_finish;
-	unsigned int wr_coeff;
-	long unsigned int last_idle_bklogged;
-	long unsigned int service_from_backlogged;
-	long unsigned int service_from_wr;
-	long unsigned int wr_start_at_switch_to_srt;
-	long unsigned int split_time;
-	long unsigned int first_IO_time;
-	u32 max_service_rate;
-	struct bfq_queue *waker_bfqq;
-	struct hlist_node woken_list_node;
-	struct hlist_head woken_list;
-};
-
-struct bfq_group;
-
-struct bfq_data {
-	struct request_queue *queue;
-	struct list_head dispatch;
-	struct bfq_group *root_group;
-	struct rb_root_cached queue_weights_tree;
-	unsigned int num_groups_with_pending_reqs;
-	unsigned int busy_queues[3];
-	int wr_busy_queues;
-	int queued;
-	int rq_in_driver;
-	bool nonrot_with_queueing;
-	int max_rq_in_driver;
-	int hw_tag_samples;
-	int hw_tag;
-	int budgets_assigned;
-	struct hrtimer idle_slice_timer;
-	struct bfq_queue *in_service_queue;
-	sector_t last_position;
-	sector_t in_serv_last_pos;
-	u64 last_completion;
-	struct bfq_queue *last_completed_rq_bfqq;
-	u64 last_empty_occupied_ns;
-	bool wait_dispatch;
-	struct request *waited_rq;
-	bool rqs_injected;
-	u64 first_dispatch;
-	u64 last_dispatch;
-	ktime_t last_budget_start;
-	ktime_t last_idling_start;
-	long unsigned int last_idling_start_jiffies;
-	int peak_rate_samples;
-	u32 sequential_samples;
-	u64 tot_sectors_dispatched;
-	u32 last_rq_max_size;
-	u64 delta_from_first;
-	u32 peak_rate;
-	int bfq_max_budget;
-	struct list_head active_list;
-	struct list_head idle_list;
-	u64 bfq_fifo_expire[2];
-	unsigned int bfq_back_penalty;
-	unsigned int bfq_back_max;
-	u32 bfq_slice_idle;
-	int bfq_user_max_budget;
-	unsigned int bfq_timeout;
-	unsigned int bfq_requests_within_timer;
-	bool strict_guarantees;
-	long unsigned int last_ins_in_burst;
-	long unsigned int bfq_burst_interval;
-	int burst_size;
-	struct bfq_entity *burst_parent_entity;
-	long unsigned int bfq_large_burst_thresh;
-	bool large_burst;
-	struct hlist_head burst_list;
-	bool low_latency;
-	unsigned int bfq_wr_coeff;
-	unsigned int bfq_wr_max_time;
-	unsigned int bfq_wr_rt_max_time;
-	unsigned int bfq_wr_min_idle_time;
-	long unsigned int bfq_wr_min_inter_arr_async;
-	unsigned int bfq_wr_max_softrt_rate;
-	u64 rate_dur_prod;
-	struct bfq_queue oom_bfqq;
-	spinlock_t lock;
-	struct bfq_io_cq *bio_bic;
-	struct bfq_queue *bio_bfqq;
-	unsigned int word_depths[4];
-};
-
-struct bfq_io_cq {
-	struct io_cq icq;
-	struct bfq_queue *bfqq[2];
-	int ioprio;
-	uint64_t blkcg_serial_nr;
-	bool saved_has_short_ttime;
-	bool saved_IO_bound;
-	bool saved_in_large_burst;
-	bool was_in_burst_list;
-	unsigned int saved_weight;
-	long unsigned int saved_wr_coeff;
-	long unsigned int saved_last_wr_start_finish;
-	long unsigned int saved_wr_start_at_switch_to_srt;
-	unsigned int saved_wr_cur_max_time;
-	struct bfq_ttime saved_ttime;
-};
-
-struct bfqg_stats {
-	struct blkg_rwstat bytes;
-	struct blkg_rwstat ios;
-};
-
-struct bfq_group {
-	struct blkg_policy_data pd;
-	char blkg_path[128];
-	int ref;
-	struct bfq_entity entity;
-	struct bfq_sched_data sched_data;
-	void *bfqd;
-	struct bfq_queue *async_bfqq[16];
-	struct bfq_queue *async_idle_bfqq;
-	struct bfq_entity *my_entity;
-	int active_entities;
-	struct rb_root rq_pos_tree;
-	struct bfqg_stats stats;
-};
-
-enum bfqq_state_flags {
-	BFQQF_just_created = 0,
-	BFQQF_busy = 1,
-	BFQQF_wait_request = 2,
-	BFQQF_non_blocking_wait_rq = 3,
-	BFQQF_fifo_expire = 4,
-	BFQQF_has_short_ttime = 5,
-	BFQQF_sync = 6,
-	BFQQF_IO_bound = 7,
-	BFQQF_in_large_burst = 8,
-	BFQQF_softrt_update = 9,
-	BFQQF_coop = 10,
-	BFQQF_split_coop = 11,
-	BFQQF_has_waker = 12,
-};
-
-enum bfqq_expiration {
-	BFQQE_TOO_IDLE = 0,
-	BFQQE_BUDGET_TIMEOUT = 1,
-	BFQQE_BUDGET_EXHAUSTED = 2,
-	BFQQE_NO_MORE_REQUESTS = 3,
-	BFQQE_PREEMPTED = 4,
-};
-
-struct bfq_group_data {
-	struct blkcg_policy_data pd;
-	unsigned int weight;
-};
-
-enum bip_flags {
-	BIP_BLOCK_INTEGRITY = 1,
-	BIP_MAPPED_INTEGRITY = 2,
-	BIP_CTRL_NOCHECK = 4,
-	BIP_DISK_NOCHECK = 8,
-	BIP_IP_CHECKSUM = 16,
-};
-
-enum blk_integrity_flags {
-	BLK_INTEGRITY_VERIFY = 1,
-	BLK_INTEGRITY_GENERATE = 2,
-	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
-	BLK_INTEGRITY_IP_CHECKSUM = 8,
-};
-
-struct integrity_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_integrity *, char *);
-	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
-};
-
-enum t10_dif_type {
-	T10_PI_TYPE0_PROTECTION = 0,
-	T10_PI_TYPE1_PROTECTION = 1,
-	T10_PI_TYPE2_PROTECTION = 2,
-	T10_PI_TYPE3_PROTECTION = 3,
 };
 
 struct t10_pi_tuple {
@@ -55054,1765 +111897,14 @@
 	__be32 ref_tag;
 };
 
+struct crc64_pi_tuple {
+	__be64 guard_tag;
+	__be16 app_tag;
+	__u8 ref_tag[6];
+};
+
 typedef __be16 csum_fn(void *, unsigned int);
 
-struct virtio_device_id {
-	__u32 device;
-	__u32 vendor;
-};
-
-struct virtio_device;
-
-struct virtqueue {
-	struct list_head list;
-	void (*callback)(struct virtqueue *);
-	const char *name;
-	struct virtio_device *vdev;
-	unsigned int index;
-	unsigned int num_free;
-	void *priv;
-};
-
-struct vringh_config_ops;
-
-struct virtio_config_ops;
-
-struct virtio_device {
-	int index;
-	bool failed;
-	bool config_enabled;
-	bool config_change_pending;
-	spinlock_t config_lock;
-	struct device dev;
-	struct virtio_device_id id;
-	const struct virtio_config_ops *config;
-	const struct vringh_config_ops *vringh_config;
-	struct list_head vqs;
-	u64 features;
-	void *priv;
-};
-
-typedef void vq_callback_t(struct virtqueue *);
-
-struct irq_affinity___2;
-
-struct virtio_shm_region;
-
-struct virtio_config_ops {
-	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
-	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
-	u32 (*generation)(struct virtio_device *);
-	u8 (*get_status)(struct virtio_device *);
-	void (*set_status)(struct virtio_device *, u8);
-	void (*reset)(struct virtio_device *);
-	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity___2 *);
-	void (*del_vqs)(struct virtio_device *);
-	u64 (*get_features)(struct virtio_device *);
-	int (*finalize_features)(struct virtio_device *);
-	const char * (*bus_name)(struct virtio_device *);
-	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
-	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
-	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
-};
-
-struct virtio_shm_region {
-	u64 addr;
-	u64 len;
-};
-
-struct irq_poll;
-
-typedef int irq_poll_fn(struct irq_poll *, int);
-
-struct irq_poll {
-	struct list_head list;
-	long unsigned int state;
-	int weight;
-	irq_poll_fn *poll;
-};
-
-struct dim_sample {
-	ktime_t time;
-	u32 pkt_ctr;
-	u32 byte_ctr;
-	u16 event_ctr;
-	u32 comp_ctr;
-};
-
-struct dim_stats {
-	int ppms;
-	int bpms;
-	int epms;
-	int cpms;
-	int cpe_ratio;
-};
-
-struct dim {
-	u8 state;
-	struct dim_stats prev_stats;
-	struct dim_sample start_sample;
-	struct dim_sample measuring_sample;
-	struct work_struct work;
-	void *priv;
-	u8 profile_ix;
-	u8 mode;
-	u8 tune_state;
-	u8 steps_right;
-	u8 steps_left;
-	u8 tired;
-};
-
-enum rdma_nl_counter_mode {
-	RDMA_COUNTER_MODE_NONE = 0,
-	RDMA_COUNTER_MODE_AUTO = 1,
-	RDMA_COUNTER_MODE_MANUAL = 2,
-	RDMA_COUNTER_MODE_MAX = 3,
-};
-
-enum rdma_nl_counter_mask {
-	RDMA_COUNTER_MASK_QP_TYPE = 1,
-	RDMA_COUNTER_MASK_PID = 2,
-};
-
-enum rdma_restrack_type {
-	RDMA_RESTRACK_PD = 0,
-	RDMA_RESTRACK_CQ = 1,
-	RDMA_RESTRACK_QP = 2,
-	RDMA_RESTRACK_CM_ID = 3,
-	RDMA_RESTRACK_MR = 4,
-	RDMA_RESTRACK_CTX = 5,
-	RDMA_RESTRACK_COUNTER = 6,
-	RDMA_RESTRACK_MAX = 7,
-};
-
-struct rdma_restrack_entry {
-	bool valid;
-	struct kref kref;
-	struct completion comp;
-	struct task_struct *task;
-	const char *kern_name;
-	enum rdma_restrack_type type;
-	bool user;
-	u32 id;
-};
-
-struct rdma_link_ops {
-	struct list_head list;
-	const char *type;
-	int (*newlink)(const char *, struct net_device *);
-};
-
-struct auto_mode_param {
-	int qp_type;
-};
-
-struct rdma_counter_mode {
-	enum rdma_nl_counter_mode mode;
-	enum rdma_nl_counter_mask mask;
-	struct auto_mode_param param;
-};
-
-struct rdma_hw_stats;
-
-struct rdma_port_counter {
-	struct rdma_counter_mode mode;
-	struct rdma_hw_stats *hstats;
-	unsigned int num_counters;
-	struct mutex lock;
-};
-
-struct rdma_hw_stats {
-	struct mutex lock;
-	long unsigned int timestamp;
-	long unsigned int lifespan;
-	const char * const *names;
-	int num_counters;
-	u64 value[0];
-};
-
-struct ib_device;
-
-struct rdma_counter {
-	struct rdma_restrack_entry res;
-	struct ib_device *device;
-	uint32_t id;
-	struct kref kref;
-	struct rdma_counter_mode mode;
-	struct mutex lock;
-	struct rdma_hw_stats *stats;
-	u8 port;
-};
-
-enum rdma_driver_id {
-	RDMA_DRIVER_UNKNOWN = 0,
-	RDMA_DRIVER_MLX5 = 1,
-	RDMA_DRIVER_MLX4 = 2,
-	RDMA_DRIVER_CXGB3 = 3,
-	RDMA_DRIVER_CXGB4 = 4,
-	RDMA_DRIVER_MTHCA = 5,
-	RDMA_DRIVER_BNXT_RE = 6,
-	RDMA_DRIVER_OCRDMA = 7,
-	RDMA_DRIVER_NES = 8,
-	RDMA_DRIVER_I40IW = 9,
-	RDMA_DRIVER_VMW_PVRDMA = 10,
-	RDMA_DRIVER_QEDR = 11,
-	RDMA_DRIVER_HNS = 12,
-	RDMA_DRIVER_USNIC = 13,
-	RDMA_DRIVER_RXE = 14,
-	RDMA_DRIVER_HFI1 = 15,
-	RDMA_DRIVER_QIB = 16,
-	RDMA_DRIVER_EFA = 17,
-	RDMA_DRIVER_SIW = 18,
-};
-
-enum ib_cq_notify_flags {
-	IB_CQ_SOLICITED = 1,
-	IB_CQ_NEXT_COMP = 2,
-	IB_CQ_SOLICITED_MASK = 3,
-	IB_CQ_REPORT_MISSED_EVENTS = 4,
-};
-
-struct ib_mad;
-
-enum rdma_link_layer {
-	IB_LINK_LAYER_UNSPECIFIED = 0,
-	IB_LINK_LAYER_INFINIBAND = 1,
-	IB_LINK_LAYER_ETHERNET = 2,
-};
-
-enum rdma_netdev_t {
-	RDMA_NETDEV_OPA_VNIC = 0,
-	RDMA_NETDEV_IPOIB = 1,
-};
-
-enum ib_srq_attr_mask {
-	IB_SRQ_MAX_WR = 1,
-	IB_SRQ_LIMIT = 2,
-};
-
-enum ib_mr_type {
-	IB_MR_TYPE_MEM_REG = 0,
-	IB_MR_TYPE_SG_GAPS = 1,
-	IB_MR_TYPE_DM = 2,
-	IB_MR_TYPE_USER = 3,
-	IB_MR_TYPE_DMA = 4,
-	IB_MR_TYPE_INTEGRITY = 5,
-};
-
-enum ib_uverbs_advise_mr_advice {
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
-	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
-};
-
-struct uverbs_attr_bundle;
-
-struct rdma_cm_id;
-
-struct iw_cm_id;
-
-struct iw_cm_conn_param;
-
-struct ib_qp;
-
-struct ib_send_wr;
-
-struct ib_recv_wr;
-
-struct ib_cq;
-
-struct ib_wc;
-
-struct ib_srq;
-
-struct ib_grh;
-
-struct ib_device_attr;
-
-struct ib_udata;
-
-struct ib_device_modify;
-
-struct ib_port_attr;
-
-struct ib_port_modify;
-
-struct ib_port_immutable;
-
-struct rdma_netdev_alloc_params;
-
-union ib_gid;
-
-struct ib_gid_attr;
-
-struct ib_ucontext;
-
-struct rdma_user_mmap_entry;
-
-struct ib_pd;
-
-struct ib_ah;
-
-struct rdma_ah_init_attr;
-
-struct rdma_ah_attr;
-
-struct ib_srq_init_attr;
-
-struct ib_srq_attr;
-
-struct ib_qp_init_attr;
-
-struct ib_qp_attr;
-
-struct ib_cq_init_attr;
-
-struct ib_mr;
-
-struct ib_sge;
-
-struct ib_mr_status;
-
-struct ib_mw;
-
-struct ib_xrcd;
-
-struct ib_flow;
-
-struct ib_flow_attr;
-
-struct ib_flow_action;
-
-struct ib_flow_action_attrs_esp;
-
-struct ib_wq;
-
-struct ib_wq_init_attr;
-
-struct ib_wq_attr;
-
-struct ib_rwq_ind_table;
-
-struct ib_rwq_ind_table_init_attr;
-
-struct ib_dm;
-
-struct ib_dm_alloc_attr;
-
-struct ib_dm_mr_attr;
-
-struct ib_counters;
-
-struct ib_counters_read_attr;
-
-struct ib_device_ops {
-	struct module *owner;
-	enum rdma_driver_id driver_id;
-	u32 uverbs_abi_ver;
-	unsigned int uverbs_no_driver_id_binding: 1;
-	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
-	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	void (*drain_rq)(struct ib_qp *);
-	void (*drain_sq)(struct ib_qp *);
-	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
-	int (*peek_cq)(struct ib_cq *, int);
-	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
-	int (*req_ncomp_notif)(struct ib_cq *, int);
-	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	int (*process_mad)(struct ib_device *, int, u8, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
-	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
-	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
-	void (*get_dev_fw_str)(struct ib_device *, char *);
-	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
-	int (*query_port)(struct ib_device *, u8, struct ib_port_attr *);
-	int (*modify_port)(struct ib_device *, u8, int, struct ib_port_modify *);
-	int (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);
-	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u8);
-	struct net_device * (*get_netdev)(struct ib_device *, u8);
-	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u8, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
-	int (*rdma_netdev_get_params)(struct ib_device *, u8, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
-	int (*query_gid)(struct ib_device *, u8, int, union ib_gid *);
-	int (*add_gid)(const struct ib_gid_attr *, void **);
-	int (*del_gid)(const struct ib_gid_attr *, void **);
-	int (*query_pkey)(struct ib_device *, u8, u16, u16 *);
-	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
-	void (*dealloc_ucontext)(struct ib_ucontext *);
-	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
-	void (*mmap_free)(struct rdma_user_mmap_entry *);
-	void (*disassociate_ucontext)(struct ib_ucontext *);
-	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
-	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
-	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
-	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
-	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
-	int (*destroy_ah)(struct ib_ah *, u32);
-	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
-	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
-	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
-	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
-	struct ib_qp * (*create_qp)(struct ib_pd *, struct ib_qp_init_attr *, struct ib_udata *);
-	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
-	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
-	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
-	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
-	int (*modify_cq)(struct ib_cq *, u16, u16);
-	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
-	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
-	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
-	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
-	int (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
-	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
-	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
-	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
-	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
-	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
-	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
-	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
-	int (*dealloc_mw)(struct ib_mw *);
-	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
-	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
-	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
-	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
-	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
-	int (*destroy_flow)(struct ib_flow *);
-	struct ib_flow_action * (*create_flow_action_esp)(struct ib_device *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*destroy_flow_action)(struct ib_flow_action *);
-	int (*modify_flow_action_esp)(struct ib_flow_action *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*set_vf_link_state)(struct ib_device *, int, u8, int);
-	int (*get_vf_config)(struct ib_device *, int, u8, struct ifla_vf_info *);
-	int (*get_vf_stats)(struct ib_device *, int, u8, struct ifla_vf_stats *);
-	int (*get_vf_guid)(struct ib_device *, int, u8, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*set_vf_guid)(struct ib_device *, int, u8, u64, int);
-	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
-	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
-	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
-	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
-	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
-	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
-	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
-	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
-	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
-	int (*destroy_counters)(struct ib_counters *);
-	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
-	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
-	struct rdma_hw_stats * (*alloc_hw_stats)(struct ib_device *, u8);
-	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u8, int);
-	int (*init_port)(struct ib_device *, u8, struct kobject *);
-	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
-	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
-	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
-	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
-	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
-	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
-	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
-	int (*enable_driver)(struct ib_device *);
-	void (*dealloc_driver)(struct ib_device *);
-	void (*iw_add_ref)(struct ib_qp *);
-	void (*iw_rem_ref)(struct ib_qp *);
-	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
-	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
-	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
-	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
-	int (*iw_create_listen)(struct iw_cm_id *, int);
-	int (*iw_destroy_listen)(struct iw_cm_id *);
-	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
-	int (*counter_unbind_qp)(struct ib_qp *);
-	int (*counter_dealloc)(struct rdma_counter *);
-	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
-	int (*counter_update_stats)(struct rdma_counter *);
-	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
-	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
-	size_t size_ib_ah;
-	size_t size_ib_counters;
-	size_t size_ib_cq;
-	size_t size_ib_mw;
-	size_t size_ib_pd;
-	size_t size_ib_rwq_ind_table;
-	size_t size_ib_srq;
-	size_t size_ib_ucontext;
-	size_t size_ib_xrcd;
-};
-
-struct ib_core_device {
-	struct device dev;
-	possible_net_t rdma_net;
-	struct kobject *ports_kobj;
-	struct list_head port_list;
-	struct ib_device *owner;
-};
-
-enum ib_atomic_cap {
-	IB_ATOMIC_NONE = 0,
-	IB_ATOMIC_HCA = 1,
-	IB_ATOMIC_GLOB = 2,
-};
-
-struct ib_odp_caps {
-	uint64_t general_caps;
-	struct {
-		uint32_t rc_odp_caps;
-		uint32_t uc_odp_caps;
-		uint32_t ud_odp_caps;
-		uint32_t xrc_odp_caps;
-	} per_transport_caps;
-};
-
-struct ib_rss_caps {
-	u32 supported_qpts;
-	u32 max_rwq_indirection_tables;
-	u32 max_rwq_indirection_table_size;
-};
-
-struct ib_tm_caps {
-	u32 max_rndv_hdr_size;
-	u32 max_num_tags;
-	u32 flags;
-	u32 max_ops;
-	u32 max_sge;
-};
-
-struct ib_cq_caps {
-	u16 max_cq_moderation_count;
-	u16 max_cq_moderation_period;
-};
-
-struct ib_device_attr {
-	u64 fw_ver;
-	__be64 sys_image_guid;
-	u64 max_mr_size;
-	u64 page_size_cap;
-	u32 vendor_id;
-	u32 vendor_part_id;
-	u32 hw_ver;
-	int max_qp;
-	int max_qp_wr;
-	u64 device_cap_flags;
-	int max_send_sge;
-	int max_recv_sge;
-	int max_sge_rd;
-	int max_cq;
-	int max_cqe;
-	int max_mr;
-	int max_pd;
-	int max_qp_rd_atom;
-	int max_ee_rd_atom;
-	int max_res_rd_atom;
-	int max_qp_init_rd_atom;
-	int max_ee_init_rd_atom;
-	enum ib_atomic_cap atomic_cap;
-	enum ib_atomic_cap masked_atomic_cap;
-	int max_ee;
-	int max_rdd;
-	int max_mw;
-	int max_raw_ipv6_qp;
-	int max_raw_ethy_qp;
-	int max_mcast_grp;
-	int max_mcast_qp_attach;
-	int max_total_mcast_qp_attach;
-	int max_ah;
-	int max_srq;
-	int max_srq_wr;
-	int max_srq_sge;
-	unsigned int max_fast_reg_page_list_len;
-	unsigned int max_pi_fast_reg_page_list_len;
-	u16 max_pkeys;
-	u8 local_ca_ack_delay;
-	int sig_prot_cap;
-	int sig_guard_cap;
-	struct ib_odp_caps odp_caps;
-	uint64_t timestamp_mask;
-	uint64_t hca_core_clock;
-	struct ib_rss_caps rss_caps;
-	u32 max_wq_type_rq;
-	u32 raw_packet_caps;
-	struct ib_tm_caps tm_caps;
-	struct ib_cq_caps cq_caps;
-	u64 max_dm_size;
-	u32 max_sgl_rd;
-};
-
-struct rdma_restrack_root;
-
-struct uapi_definition;
-
-struct ib_port_data;
-
-struct ib_device {
-	struct device *dma_device;
-	struct ib_device_ops ops;
-	char name[64];
-	struct callback_head callback_head;
-	struct list_head event_handler_list;
-	struct rw_semaphore event_handler_rwsem;
-	spinlock_t qp_open_list_lock;
-	struct rw_semaphore client_data_rwsem;
-	struct xarray client_data;
-	struct mutex unregistration_lock;
-	rwlock_t cache_lock;
-	struct ib_port_data *port_data;
-	int num_comp_vectors;
-	union {
-		struct device dev;
-		struct ib_core_device coredev;
-	};
-	const struct attribute_group *groups[3];
-	u64 uverbs_cmd_mask;
-	u64 uverbs_ex_cmd_mask;
-	char node_desc[64];
-	__be64 node_guid;
-	u32 local_dma_lkey;
-	u16 is_switch: 1;
-	u16 kverbs_provider: 1;
-	u16 use_cq_dim: 1;
-	u8 node_type;
-	u8 phys_port_cnt;
-	struct ib_device_attr attrs;
-	struct attribute_group *hw_stats_ag;
-	struct rdma_hw_stats *hw_stats;
-	u32 index;
-	spinlock_t cq_pools_lock;
-	struct list_head cq_pools[3];
-	struct rdma_restrack_root *res;
-	const struct uapi_definition *driver_def;
-	refcount_t refcount;
-	struct completion unreg_completion;
-	struct work_struct unregistration_work;
-	const struct rdma_link_ops *link_ops;
-	struct mutex compat_devs_mutex;
-	struct xarray compat_devs;
-	char iw_ifname[16];
-	u32 iw_driver_flags;
-	u32 lag_flags;
-};
-
-enum ib_signature_type {
-	IB_SIG_TYPE_NONE = 0,
-	IB_SIG_TYPE_T10_DIF = 1,
-};
-
-enum ib_t10_dif_bg_type {
-	IB_T10DIF_CRC = 0,
-	IB_T10DIF_CSUM = 1,
-};
-
-struct ib_t10_dif_domain {
-	enum ib_t10_dif_bg_type bg_type;
-	u16 pi_interval;
-	u16 bg;
-	u16 app_tag;
-	u32 ref_tag;
-	bool ref_remap;
-	bool app_escape;
-	bool ref_escape;
-	u16 apptag_check_mask;
-};
-
-struct ib_sig_domain {
-	enum ib_signature_type sig_type;
-	union {
-		struct ib_t10_dif_domain dif;
-	} sig;
-};
-
-struct ib_sig_attrs {
-	u8 check_mask;
-	struct ib_sig_domain mem;
-	struct ib_sig_domain wire;
-	int meta_length;
-};
-
-enum ib_sig_err_type {
-	IB_SIG_BAD_GUARD = 0,
-	IB_SIG_BAD_REFTAG = 1,
-	IB_SIG_BAD_APPTAG = 2,
-};
-
-struct ib_sig_err {
-	enum ib_sig_err_type err_type;
-	u32 expected;
-	u32 actual;
-	u64 sig_err_offset;
-	u32 key;
-};
-
-enum ib_uverbs_flow_action_esp_keymat {
-	IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM = 0,
-};
-
-struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
-	__u64 iv;
-	__u32 iv_algo;
-	__u32 salt;
-	__u32 icv_len;
-	__u32 key_len;
-	__u32 aes_key[8];
-};
-
-enum ib_uverbs_flow_action_esp_replay {
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE = 0,
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP = 1,
-};
-
-struct ib_uverbs_flow_action_esp_replay_bmp {
-	__u32 size;
-};
-
-union ib_gid {
-	u8 raw[16];
-	struct {
-		__be64 subnet_prefix;
-		__be64 interface_id;
-	} global;
-};
-
-enum ib_gid_type {
-	IB_GID_TYPE_IB = 0,
-	IB_GID_TYPE_ROCE = 1,
-	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
-	IB_GID_TYPE_SIZE = 3,
-};
-
-struct ib_gid_attr {
-	struct net_device *ndev;
-	struct ib_device *device;
-	union ib_gid gid;
-	enum ib_gid_type gid_type;
-	u16 index;
-	u8 port_num;
-};
-
-struct ib_cq_init_attr {
-	unsigned int cqe;
-	u32 comp_vector;
-	u32 flags;
-};
-
-struct ib_dm_mr_attr {
-	u64 length;
-	u64 offset;
-	u32 access_flags;
-};
-
-struct ib_dm_alloc_attr {
-	u64 length;
-	u32 alignment;
-	u32 flags;
-};
-
-enum ib_mtu {
-	IB_MTU_256 = 1,
-	IB_MTU_512 = 2,
-	IB_MTU_1024 = 3,
-	IB_MTU_2048 = 4,
-	IB_MTU_4096 = 5,
-};
-
-enum ib_port_state {
-	IB_PORT_NOP = 0,
-	IB_PORT_DOWN = 1,
-	IB_PORT_INIT = 2,
-	IB_PORT_ARMED = 3,
-	IB_PORT_ACTIVE = 4,
-	IB_PORT_ACTIVE_DEFER = 5,
-};
-
-struct ib_port_attr {
-	u64 subnet_prefix;
-	enum ib_port_state state;
-	enum ib_mtu max_mtu;
-	enum ib_mtu active_mtu;
-	u32 phys_mtu;
-	int gid_tbl_len;
-	unsigned int ip_gids: 1;
-	u32 port_cap_flags;
-	u32 max_msg_sz;
-	u32 bad_pkey_cntr;
-	u32 qkey_viol_cntr;
-	u16 pkey_tbl_len;
-	u32 sm_lid;
-	u32 lid;
-	u8 lmc;
-	u8 max_vl_num;
-	u8 sm_sl;
-	u8 subnet_timeout;
-	u8 init_type_reply;
-	u8 active_width;
-	u16 active_speed;
-	u8 phys_state;
-	u16 port_cap_flags2;
-};
-
-struct ib_device_modify {
-	u64 sys_image_guid;
-	char node_desc[64];
-};
-
-struct ib_port_modify {
-	u32 set_port_cap_mask;
-	u32 clr_port_cap_mask;
-	u8 init_type;
-};
-
-enum ib_event_type {
-	IB_EVENT_CQ_ERR = 0,
-	IB_EVENT_QP_FATAL = 1,
-	IB_EVENT_QP_REQ_ERR = 2,
-	IB_EVENT_QP_ACCESS_ERR = 3,
-	IB_EVENT_COMM_EST = 4,
-	IB_EVENT_SQ_DRAINED = 5,
-	IB_EVENT_PATH_MIG = 6,
-	IB_EVENT_PATH_MIG_ERR = 7,
-	IB_EVENT_DEVICE_FATAL = 8,
-	IB_EVENT_PORT_ACTIVE = 9,
-	IB_EVENT_PORT_ERR = 10,
-	IB_EVENT_LID_CHANGE = 11,
-	IB_EVENT_PKEY_CHANGE = 12,
-	IB_EVENT_SM_CHANGE = 13,
-	IB_EVENT_SRQ_ERR = 14,
-	IB_EVENT_SRQ_LIMIT_REACHED = 15,
-	IB_EVENT_QP_LAST_WQE_REACHED = 16,
-	IB_EVENT_CLIENT_REREGISTER = 17,
-	IB_EVENT_GID_CHANGE = 18,
-	IB_EVENT_WQ_FATAL = 19,
-};
-
-struct ib_ucq_object;
-
-typedef void (*ib_comp_handler)(struct ib_cq *, void *);
-
-struct ib_event;
-
-struct ib_cq {
-	struct ib_device *device;
-	struct ib_ucq_object *uobject;
-	ib_comp_handler comp_handler;
-	void (*event_handler)(struct ib_event *, void *);
-	void *cq_context;
-	int cqe;
-	unsigned int cqe_used;
-	atomic_t usecnt;
-	enum ib_poll_context poll_ctx;
-	struct ib_wc *wc;
-	struct list_head pool_entry;
-	union {
-		struct irq_poll iop;
-		struct work_struct work;
-	};
-	struct workqueue_struct *comp_wq;
-	struct dim *dim;
-	ktime_t timestamp;
-	u8 interrupt: 1;
-	u8 shared: 1;
-	unsigned int comp_vector;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_uqp_object;
-
-enum ib_qp_type {
-	IB_QPT_SMI = 0,
-	IB_QPT_GSI = 1,
-	IB_QPT_RC = 2,
-	IB_QPT_UC = 3,
-	IB_QPT_UD = 4,
-	IB_QPT_RAW_IPV6 = 5,
-	IB_QPT_RAW_ETHERTYPE = 6,
-	IB_QPT_RAW_PACKET = 8,
-	IB_QPT_XRC_INI = 9,
-	IB_QPT_XRC_TGT = 10,
-	IB_QPT_MAX = 11,
-	IB_QPT_DRIVER = 255,
-	IB_QPT_RESERVED1 = 4096,
-	IB_QPT_RESERVED2 = 4097,
-	IB_QPT_RESERVED3 = 4098,
-	IB_QPT_RESERVED4 = 4099,
-	IB_QPT_RESERVED5 = 4100,
-	IB_QPT_RESERVED6 = 4101,
-	IB_QPT_RESERVED7 = 4102,
-	IB_QPT_RESERVED8 = 4103,
-	IB_QPT_RESERVED9 = 4104,
-	IB_QPT_RESERVED10 = 4105,
-};
-
-struct ib_qp_security;
-
-struct ib_qp {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_cq *send_cq;
-	struct ib_cq *recv_cq;
-	spinlock_t mr_lock;
-	int mrs_used;
-	struct list_head rdma_mrs;
-	struct list_head sig_mrs;
-	struct ib_srq *srq;
-	struct ib_xrcd *xrcd;
-	struct list_head xrcd_list;
-	atomic_t usecnt;
-	struct list_head open_list;
-	struct ib_qp *real_qp;
-	struct ib_uqp_object *uobject;
-	void (*event_handler)(struct ib_event *, void *);
-	void *qp_context;
-	const struct ib_gid_attr *av_sgid_attr;
-	const struct ib_gid_attr *alt_path_sgid_attr;
-	u32 qp_num;
-	u32 max_write_sge;
-	u32 max_read_sge;
-	enum ib_qp_type qp_type;
-	struct ib_rwq_ind_table *rwq_ind_tbl;
-	struct ib_qp_security *qp_sec;
-	u8 port;
-	bool integrity_en;
-	struct rdma_restrack_entry res;
-	struct rdma_counter *counter;
-};
-
-struct ib_usrq_object;
-
-enum ib_srq_type {
-	IB_SRQT_BASIC = 0,
-	IB_SRQT_XRC = 1,
-	IB_SRQT_TM = 2,
-};
-
-struct ib_srq {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_usrq_object *uobject;
-	void (*event_handler)(struct ib_event *, void *);
-	void *srq_context;
-	enum ib_srq_type srq_type;
-	atomic_t usecnt;
-	struct {
-		struct ib_cq *cq;
-		union {
-			struct {
-				struct ib_xrcd *xrcd;
-				u32 srq_num;
-			} xrc;
-		};
-	} ext;
-};
-
-struct ib_uwq_object;
-
-enum ib_wq_state {
-	IB_WQS_RESET = 0,
-	IB_WQS_RDY = 1,
-	IB_WQS_ERR = 2,
-};
-
-enum ib_wq_type {
-	IB_WQT_RQ = 0,
-};
-
-struct ib_wq {
-	struct ib_device *device;
-	struct ib_uwq_object *uobject;
-	void *wq_context;
-	void (*event_handler)(struct ib_event *, void *);
-	struct ib_pd *pd;
-	struct ib_cq *cq;
-	u32 wq_num;
-	enum ib_wq_state state;
-	enum ib_wq_type wq_type;
-	atomic_t usecnt;
-};
-
-struct ib_event {
-	struct ib_device *device;
-	union {
-		struct ib_cq *cq;
-		struct ib_qp *qp;
-		struct ib_srq *srq;
-		struct ib_wq *wq;
-		u8 port_num;
-	} element;
-	enum ib_event_type event;
-};
-
-struct ib_global_route {
-	const struct ib_gid_attr *sgid_attr;
-	union ib_gid dgid;
-	u32 flow_label;
-	u8 sgid_index;
-	u8 hop_limit;
-	u8 traffic_class;
-};
-
-struct ib_grh {
-	__be32 version_tclass_flow;
-	__be16 paylen;
-	u8 next_hdr;
-	u8 hop_limit;
-	union ib_gid sgid;
-	union ib_gid dgid;
-};
-
-struct ib_mr_status {
-	u32 fail_status;
-	struct ib_sig_err sig_err;
-};
-
-struct rdma_ah_init_attr {
-	struct rdma_ah_attr *ah_attr;
-	u32 flags;
-	struct net_device *xmit_slave;
-};
-
-enum rdma_ah_attr_type {
-	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
-	RDMA_AH_ATTR_TYPE_IB = 1,
-	RDMA_AH_ATTR_TYPE_ROCE = 2,
-	RDMA_AH_ATTR_TYPE_OPA = 3,
-};
-
-struct ib_ah_attr {
-	u16 dlid;
-	u8 src_path_bits;
-};
-
-struct roce_ah_attr {
-	u8 dmac[6];
-};
-
-struct opa_ah_attr {
-	u32 dlid;
-	u8 src_path_bits;
-	bool make_grd;
-};
-
-struct rdma_ah_attr {
-	struct ib_global_route grh;
-	u8 sl;
-	u8 static_rate;
-	u8 port_num;
-	u8 ah_flags;
-	enum rdma_ah_attr_type type;
-	union {
-		struct ib_ah_attr ib;
-		struct roce_ah_attr roce;
-		struct opa_ah_attr opa;
-	};
-};
-
-enum ib_wc_status {
-	IB_WC_SUCCESS = 0,
-	IB_WC_LOC_LEN_ERR = 1,
-	IB_WC_LOC_QP_OP_ERR = 2,
-	IB_WC_LOC_EEC_OP_ERR = 3,
-	IB_WC_LOC_PROT_ERR = 4,
-	IB_WC_WR_FLUSH_ERR = 5,
-	IB_WC_MW_BIND_ERR = 6,
-	IB_WC_BAD_RESP_ERR = 7,
-	IB_WC_LOC_ACCESS_ERR = 8,
-	IB_WC_REM_INV_REQ_ERR = 9,
-	IB_WC_REM_ACCESS_ERR = 10,
-	IB_WC_REM_OP_ERR = 11,
-	IB_WC_RETRY_EXC_ERR = 12,
-	IB_WC_RNR_RETRY_EXC_ERR = 13,
-	IB_WC_LOC_RDD_VIOL_ERR = 14,
-	IB_WC_REM_INV_RD_REQ_ERR = 15,
-	IB_WC_REM_ABORT_ERR = 16,
-	IB_WC_INV_EECN_ERR = 17,
-	IB_WC_INV_EEC_STATE_ERR = 18,
-	IB_WC_FATAL_ERR = 19,
-	IB_WC_RESP_TIMEOUT_ERR = 20,
-	IB_WC_GENERAL_ERR = 21,
-};
-
-enum ib_wc_opcode {
-	IB_WC_SEND = 0,
-	IB_WC_RDMA_WRITE = 1,
-	IB_WC_RDMA_READ = 2,
-	IB_WC_COMP_SWAP = 3,
-	IB_WC_FETCH_ADD = 4,
-	IB_WC_BIND_MW = 5,
-	IB_WC_LOCAL_INV = 6,
-	IB_WC_LSO = 7,
-	IB_WC_REG_MR = 8,
-	IB_WC_MASKED_COMP_SWAP = 9,
-	IB_WC_MASKED_FETCH_ADD = 10,
-	IB_WC_RECV = 128,
-	IB_WC_RECV_RDMA_WITH_IMM = 129,
-};
-
-struct ib_cqe {
-	void (*done)(struct ib_cq *, struct ib_wc *);
-};
-
-struct ib_wc {
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	enum ib_wc_status status;
-	enum ib_wc_opcode opcode;
-	u32 vendor_err;
-	u32 byte_len;
-	struct ib_qp *qp;
-	union {
-		__be32 imm_data;
-		u32 invalidate_rkey;
-	} ex;
-	u32 src_qp;
-	u32 slid;
-	int wc_flags;
-	u16 pkey_index;
-	u8 sl;
-	u8 dlid_path_bits;
-	u8 port_num;
-	u8 smac[6];
-	u16 vlan_id;
-	u8 network_hdr_type;
-};
-
-struct ib_srq_attr {
-	u32 max_wr;
-	u32 max_sge;
-	u32 srq_limit;
-};
-
-struct ib_xrcd {
-	struct ib_device *device;
-	atomic_t usecnt;
-	struct inode *inode;
-	struct rw_semaphore tgt_qps_rwsem;
-	struct xarray tgt_qps;
-};
-
-struct ib_srq_init_attr {
-	void (*event_handler)(struct ib_event *, void *);
-	void *srq_context;
-	struct ib_srq_attr attr;
-	enum ib_srq_type srq_type;
-	struct {
-		struct ib_cq *cq;
-		union {
-			struct {
-				struct ib_xrcd *xrcd;
-			} xrc;
-			struct {
-				u32 max_num_tags;
-			} tag_matching;
-		};
-	} ext;
-};
-
-struct ib_qp_cap {
-	u32 max_send_wr;
-	u32 max_recv_wr;
-	u32 max_send_sge;
-	u32 max_recv_sge;
-	u32 max_inline_data;
-	u32 max_rdma_ctxs;
-};
-
-enum ib_sig_type {
-	IB_SIGNAL_ALL_WR = 0,
-	IB_SIGNAL_REQ_WR = 1,
-};
-
-struct ib_qp_init_attr {
-	void (*event_handler)(struct ib_event *, void *);
-	void *qp_context;
-	struct ib_cq *send_cq;
-	struct ib_cq *recv_cq;
-	struct ib_srq *srq;
-	struct ib_xrcd *xrcd;
-	struct ib_qp_cap cap;
-	enum ib_sig_type sq_sig_type;
-	enum ib_qp_type qp_type;
-	u32 create_flags;
-	u8 port_num;
-	struct ib_rwq_ind_table *rwq_ind_tbl;
-	u32 source_qpn;
-};
-
-struct ib_uobject;
-
-struct ib_rwq_ind_table {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-	u32 ind_tbl_num;
-	u32 log_ind_tbl_size;
-	struct ib_wq **ind_tbl;
-};
-
-enum ib_qp_state {
-	IB_QPS_RESET = 0,
-	IB_QPS_INIT = 1,
-	IB_QPS_RTR = 2,
-	IB_QPS_RTS = 3,
-	IB_QPS_SQD = 4,
-	IB_QPS_SQE = 5,
-	IB_QPS_ERR = 6,
-};
-
-enum ib_mig_state {
-	IB_MIG_MIGRATED = 0,
-	IB_MIG_REARM = 1,
-	IB_MIG_ARMED = 2,
-};
-
-enum ib_mw_type {
-	IB_MW_TYPE_1 = 1,
-	IB_MW_TYPE_2 = 2,
-};
-
-struct ib_qp_attr {
-	enum ib_qp_state qp_state;
-	enum ib_qp_state cur_qp_state;
-	enum ib_mtu path_mtu;
-	enum ib_mig_state path_mig_state;
-	u32 qkey;
-	u32 rq_psn;
-	u32 sq_psn;
-	u32 dest_qp_num;
-	int qp_access_flags;
-	struct ib_qp_cap cap;
-	struct rdma_ah_attr ah_attr;
-	struct rdma_ah_attr alt_ah_attr;
-	u16 pkey_index;
-	u16 alt_pkey_index;
-	u8 en_sqd_async_notify;
-	u8 sq_draining;
-	u8 max_rd_atomic;
-	u8 max_dest_rd_atomic;
-	u8 min_rnr_timer;
-	u8 port_num;
-	u8 timeout;
-	u8 retry_cnt;
-	u8 rnr_retry;
-	u8 alt_port_num;
-	u8 alt_timeout;
-	u32 rate_limit;
-	struct net_device *xmit_slave;
-};
-
-enum ib_wr_opcode {
-	IB_WR_RDMA_WRITE = 0,
-	IB_WR_RDMA_WRITE_WITH_IMM = 1,
-	IB_WR_SEND = 2,
-	IB_WR_SEND_WITH_IMM = 3,
-	IB_WR_RDMA_READ = 4,
-	IB_WR_ATOMIC_CMP_AND_SWP = 5,
-	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
-	IB_WR_BIND_MW = 8,
-	IB_WR_LSO = 10,
-	IB_WR_SEND_WITH_INV = 9,
-	IB_WR_RDMA_READ_WITH_INV = 11,
-	IB_WR_LOCAL_INV = 7,
-	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
-	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
-	IB_WR_REG_MR = 32,
-	IB_WR_REG_MR_INTEGRITY = 33,
-	IB_WR_RESERVED1 = 240,
-	IB_WR_RESERVED2 = 241,
-	IB_WR_RESERVED3 = 242,
-	IB_WR_RESERVED4 = 243,
-	IB_WR_RESERVED5 = 244,
-	IB_WR_RESERVED6 = 245,
-	IB_WR_RESERVED7 = 246,
-	IB_WR_RESERVED8 = 247,
-	IB_WR_RESERVED9 = 248,
-	IB_WR_RESERVED10 = 249,
-};
-
-struct ib_sge {
-	u64 addr;
-	u32 length;
-	u32 lkey;
-};
-
-struct ib_send_wr {
-	struct ib_send_wr *next;
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	struct ib_sge *sg_list;
-	int num_sge;
-	enum ib_wr_opcode opcode;
-	int send_flags;
-	union {
-		__be32 imm_data;
-		u32 invalidate_rkey;
-	} ex;
-};
-
-struct ib_ah {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_uobject *uobject;
-	const struct ib_gid_attr *sgid_attr;
-	enum rdma_ah_attr_type type;
-};
-
-struct ib_mr {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	u32 lkey;
-	u32 rkey;
-	u64 iova;
-	u64 length;
-	unsigned int page_size;
-	enum ib_mr_type type;
-	bool need_inval;
-	union {
-		struct ib_uobject *uobject;
-		struct list_head qp_entry;
-	};
-	struct ib_dm *dm;
-	struct ib_sig_attrs *sig_attrs;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_recv_wr {
-	struct ib_recv_wr *next;
-	union {
-		u64 wr_id;
-		struct ib_cqe *wr_cqe;
-	};
-	struct ib_sge *sg_list;
-	int num_sge;
-};
-
-struct ib_rdmacg_object {};
-
-struct ib_uverbs_file;
-
-struct ib_ucontext {
-	struct ib_device *device;
-	struct ib_uverbs_file *ufile;
-	bool cleanup_retryable;
-	struct ib_rdmacg_object cg_obj;
-	struct rdma_restrack_entry res;
-	struct xarray mmap_xa;
-};
-
-struct uverbs_api_object;
-
-struct ib_uobject {
-	u64 user_handle;
-	struct ib_uverbs_file *ufile;
-	struct ib_ucontext *context;
-	void *object;
-	struct list_head list;
-	struct ib_rdmacg_object cg_obj;
-	int id;
-	struct kref ref;
-	atomic_t usecnt;
-	struct callback_head rcu;
-	const struct uverbs_api_object *uapi_object;
-};
-
-struct ib_udata {
-	const void *inbuf;
-	void *outbuf;
-	size_t inlen;
-	size_t outlen;
-};
-
-struct ib_pd {
-	u32 local_dma_lkey;
-	u32 flags;
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-	u32 unsafe_global_rkey;
-	struct ib_mr *__internal_mr;
-	struct rdma_restrack_entry res;
-};
-
-struct ib_wq_init_attr {
-	void *wq_context;
-	enum ib_wq_type wq_type;
-	u32 max_wr;
-	u32 max_sge;
-	struct ib_cq *cq;
-	void (*event_handler)(struct ib_event *, void *);
-	u32 create_flags;
-};
-
-struct ib_wq_attr {
-	enum ib_wq_state wq_state;
-	enum ib_wq_state curr_wq_state;
-	u32 flags;
-	u32 flags_mask;
-};
-
-struct ib_rwq_ind_table_init_attr {
-	u32 log_ind_tbl_size;
-	struct ib_wq **ind_tbl;
-};
-
-enum port_pkey_state {
-	IB_PORT_PKEY_NOT_VALID = 0,
-	IB_PORT_PKEY_VALID = 1,
-	IB_PORT_PKEY_LISTED = 2,
-};
-
-struct ib_port_pkey {
-	enum port_pkey_state state;
-	u16 pkey_index;
-	u8 port_num;
-	struct list_head qp_list;
-	struct list_head to_error_list;
-	struct ib_qp_security *sec;
-};
-
-struct ib_ports_pkeys;
-
-struct ib_qp_security {
-	struct ib_qp *qp;
-	struct ib_device *dev;
-	struct mutex mutex;
-	struct ib_ports_pkeys *ports_pkeys;
-	struct list_head shared_qp_list;
-	void *security;
-	bool destroying;
-	atomic_t error_list_count;
-	struct completion error_complete;
-	int error_comps_pending;
-};
-
-struct ib_ports_pkeys {
-	struct ib_port_pkey main;
-	struct ib_port_pkey alt;
-};
-
-struct ib_dm {
-	struct ib_device *device;
-	u32 length;
-	u32 flags;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-};
-
-struct ib_mw {
-	struct ib_device *device;
-	struct ib_pd *pd;
-	struct ib_uobject *uobject;
-	u32 rkey;
-	enum ib_mw_type type;
-};
-
-enum ib_flow_attr_type {
-	IB_FLOW_ATTR_NORMAL = 0,
-	IB_FLOW_ATTR_ALL_DEFAULT = 1,
-	IB_FLOW_ATTR_MC_DEFAULT = 2,
-	IB_FLOW_ATTR_SNIFFER = 3,
-};
-
-enum ib_flow_spec_type {
-	IB_FLOW_SPEC_ETH = 32,
-	IB_FLOW_SPEC_IB = 34,
-	IB_FLOW_SPEC_IPV4 = 48,
-	IB_FLOW_SPEC_IPV6 = 49,
-	IB_FLOW_SPEC_ESP = 52,
-	IB_FLOW_SPEC_TCP = 64,
-	IB_FLOW_SPEC_UDP = 65,
-	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
-	IB_FLOW_SPEC_GRE = 81,
-	IB_FLOW_SPEC_MPLS = 96,
-	IB_FLOW_SPEC_INNER = 256,
-	IB_FLOW_SPEC_ACTION_TAG = 4096,
-	IB_FLOW_SPEC_ACTION_DROP = 4097,
-	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
-	IB_FLOW_SPEC_ACTION_COUNT = 4099,
-};
-
-struct ib_flow_eth_filter {
-	u8 dst_mac[6];
-	u8 src_mac[6];
-	__be16 ether_type;
-	__be16 vlan_tag;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_eth {
-	u32 type;
-	u16 size;
-	struct ib_flow_eth_filter val;
-	struct ib_flow_eth_filter mask;
-};
-
-struct ib_flow_ib_filter {
-	__be16 dlid;
-	__u8 sl;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ib {
-	u32 type;
-	u16 size;
-	struct ib_flow_ib_filter val;
-	struct ib_flow_ib_filter mask;
-};
-
-struct ib_flow_ipv4_filter {
-	__be32 src_ip;
-	__be32 dst_ip;
-	u8 proto;
-	u8 tos;
-	u8 ttl;
-	u8 flags;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ipv4 {
-	u32 type;
-	u16 size;
-	struct ib_flow_ipv4_filter val;
-	struct ib_flow_ipv4_filter mask;
-};
-
-struct ib_flow_ipv6_filter {
-	u8 src_ip[16];
-	u8 dst_ip[16];
-	__be32 flow_label;
-	u8 next_hdr;
-	u8 traffic_class;
-	u8 hop_limit;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_ipv6 {
-	u32 type;
-	u16 size;
-	struct ib_flow_ipv6_filter val;
-	struct ib_flow_ipv6_filter mask;
-};
-
-struct ib_flow_tcp_udp_filter {
-	__be16 dst_port;
-	__be16 src_port;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_tcp_udp {
-	u32 type;
-	u16 size;
-	struct ib_flow_tcp_udp_filter val;
-	struct ib_flow_tcp_udp_filter mask;
-};
-
-struct ib_flow_tunnel_filter {
-	__be32 tunnel_id;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_tunnel {
-	u32 type;
-	u16 size;
-	struct ib_flow_tunnel_filter val;
-	struct ib_flow_tunnel_filter mask;
-};
-
-struct ib_flow_esp_filter {
-	__be32 spi;
-	__be32 seq;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_esp {
-	u32 type;
-	u16 size;
-	struct ib_flow_esp_filter val;
-	struct ib_flow_esp_filter mask;
-};
-
-struct ib_flow_gre_filter {
-	__be16 c_ks_res0_ver;
-	__be16 protocol;
-	__be32 key;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_gre {
-	u32 type;
-	u16 size;
-	struct ib_flow_gre_filter val;
-	struct ib_flow_gre_filter mask;
-};
-
-struct ib_flow_mpls_filter {
-	__be32 tag;
-	u8 real_sz[0];
-};
-
-struct ib_flow_spec_mpls {
-	u32 type;
-	u16 size;
-	struct ib_flow_mpls_filter val;
-	struct ib_flow_mpls_filter mask;
-};
-
-struct ib_flow_spec_action_tag {
-	enum ib_flow_spec_type type;
-	u16 size;
-	u32 tag_id;
-};
-
-struct ib_flow_spec_action_drop {
-	enum ib_flow_spec_type type;
-	u16 size;
-};
-
-struct ib_flow_spec_action_handle {
-	enum ib_flow_spec_type type;
-	u16 size;
-	struct ib_flow_action *act;
-};
-
-enum ib_flow_action_type {
-	IB_FLOW_ACTION_UNSPECIFIED = 0,
-	IB_FLOW_ACTION_ESP = 1,
-};
-
-struct ib_flow_action {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	enum ib_flow_action_type type;
-	atomic_t usecnt;
-};
-
-struct ib_flow_spec_action_count {
-	enum ib_flow_spec_type type;
-	u16 size;
-	struct ib_counters *counters;
-};
-
-struct ib_counters {
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-	atomic_t usecnt;
-};
-
-union ib_flow_spec {
-	struct {
-		u32 type;
-		u16 size;
-	};
-	struct ib_flow_spec_eth eth;
-	struct ib_flow_spec_ib ib;
-	struct ib_flow_spec_ipv4 ipv4;
-	struct ib_flow_spec_tcp_udp tcp_udp;
-	struct ib_flow_spec_ipv6 ipv6;
-	struct ib_flow_spec_tunnel tunnel;
-	struct ib_flow_spec_esp esp;
-	struct ib_flow_spec_gre gre;
-	struct ib_flow_spec_mpls mpls;
-	struct ib_flow_spec_action_tag flow_tag;
-	struct ib_flow_spec_action_drop drop;
-	struct ib_flow_spec_action_handle action;
-	struct ib_flow_spec_action_count flow_count;
-};
-
-struct ib_flow_attr {
-	enum ib_flow_attr_type type;
-	u16 size;
-	u16 priority;
-	u32 flags;
-	u8 num_of_specs;
-	u8 port;
-	union ib_flow_spec flows[0];
-};
-
-struct ib_flow {
-	struct ib_qp *qp;
-	struct ib_device *device;
-	struct ib_uobject *uobject;
-};
-
-struct ib_flow_action_attrs_esp_keymats {
-	enum ib_uverbs_flow_action_esp_keymat protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;
-	} keymat;
-};
-
-struct ib_flow_action_attrs_esp_replays {
-	enum ib_uverbs_flow_action_esp_replay protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_replay_bmp bmp;
-	} replay;
-};
-
-struct ib_flow_spec_list {
-	struct ib_flow_spec_list *next;
-	union ib_flow_spec spec;
-};
-
-struct ib_flow_action_attrs_esp {
-	struct ib_flow_action_attrs_esp_keymats *keymat;
-	struct ib_flow_action_attrs_esp_replays *replay;
-	struct ib_flow_spec_list *encap;
-	u32 esn;
-	u32 spi;
-	u32 seq;
-	u32 tfc_pad;
-	u64 flags;
-	u64 hard_limit_pkts;
-};
-
-struct ib_pkey_cache;
-
-struct ib_gid_table;
-
-struct ib_port_cache {
-	u64 subnet_prefix;
-	struct ib_pkey_cache *pkey;
-	struct ib_gid_table *gid;
-	u8 lmc;
-	enum ib_port_state port_state;
-};
-
-struct ib_port_immutable {
-	int pkey_tbl_len;
-	int gid_tbl_len;
-	u32 core_cap_flags;
-	u32 max_mad_size;
-};
-
-struct ib_port_data {
-	struct ib_device *ib_dev;
-	struct ib_port_immutable immutable;
-	spinlock_t pkey_list_lock;
-	struct list_head pkey_list;
-	struct ib_port_cache cache;
-	spinlock_t netdev_lock;
-	struct net_device *netdev;
-	struct hlist_node ndev_hash_link;
-	struct rdma_port_counter port_counter;
-	struct rdma_hw_stats *hw_stats;
-};
-
-struct rdma_netdev_alloc_params {
-	size_t sizeof_priv;
-	unsigned int txqs;
-	unsigned int rxqs;
-	void *param;
-	int (*initialize_rdma_netdev)(struct ib_device *, u8, struct net_device *, void *);
-};
-
-struct ib_counters_read_attr {
-	u64 *counters_buff;
-	u32 ncounters;
-	u32 flags;
-};
-
-struct rdma_user_mmap_entry {
-	struct kref ref;
-	struct ib_ucontext *ucontext;
-	long unsigned int start_pgoff;
-	size_t npages;
-	bool driver_removed;
-};
-
 enum blk_zone_type {
 	BLK_ZONE_TYPE_CONVENTIONAL = 1,
 	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
@@ -56859,152 +111951,6 @@
 	sector_t sector;
 };
 
-enum wbt_flags {
-	WBT_TRACKED = 1,
-	WBT_READ = 2,
-	WBT_KSWAPD = 4,
-	WBT_DISCARD = 8,
-	WBT_NR_BITS = 4,
-};
-
-enum {
-	WBT_STATE_ON_DEFAULT = 1,
-	WBT_STATE_ON_MANUAL = 2,
-};
-
-struct rq_wb {
-	unsigned int wb_background;
-	unsigned int wb_normal;
-	short int enable_state;
-	unsigned int unknown_cnt;
-	u64 win_nsec;
-	u64 cur_win_nsec;
-	struct blk_stat_callback *cb;
-	u64 sync_issue;
-	void *sync_cookie;
-	unsigned int wc;
-	long unsigned int last_issue;
-	long unsigned int last_comp;
-	long unsigned int min_lat_nsec;
-	struct rq_qos rqos;
-	struct rq_wait rq_wait[3];
-	struct rq_depth rq_depth;
-};
-
-struct trace_event_raw_wbt_stat {
-	struct trace_entry ent;
-	char name[32];
-	s64 rmean;
-	u64 rmin;
-	u64 rmax;
-	s64 rnr_samples;
-	s64 rtime;
-	s64 wmean;
-	u64 wmin;
-	u64 wmax;
-	s64 wnr_samples;
-	s64 wtime;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_lat {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int lat;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_step {
-	struct trace_entry ent;
-	char name[32];
-	const char *msg;
-	int step;
-	long unsigned int window;
-	unsigned int bg;
-	unsigned int normal;
-	unsigned int max;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_timer {
-	struct trace_entry ent;
-	char name[32];
-	unsigned int status;
-	int step;
-	unsigned int inflight;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_wbt_stat {};
-
-struct trace_event_data_offsets_wbt_lat {};
-
-struct trace_event_data_offsets_wbt_step {};
-
-struct trace_event_data_offsets_wbt_timer {};
-
-typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
-
-typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
-
-typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
-
-enum {
-	RWB_DEF_DEPTH = 16,
-	RWB_WINDOW_NSEC = 100000000,
-	RWB_MIN_WRITE_SAMPLES = 3,
-	RWB_UNKNOWN_BUMP = 5,
-};
-
-enum {
-	LAT_OK = 1,
-	LAT_UNKNOWN = 2,
-	LAT_UNKNOWN_WRITES = 3,
-	LAT_EXCEEDED = 4,
-};
-
-struct wbt_wait_data {
-	struct rq_wb *rwb;
-	enum wbt_flags wb_acct;
-	long unsigned int rw;
-};
-
-struct blk_ksm_keyslot {
-	atomic_t slot_refs;
-	struct list_head idle_slot_node;
-	struct hlist_node hash_node;
-	const struct blk_crypto_key *key;
-	struct blk_keyslot_manager *ksm;
-};
-
-struct blk_ksm_ll_ops {
-	int (*keyslot_program)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-	int (*keyslot_evict)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-};
-
-struct blk_keyslot_manager {
-	struct blk_ksm_ll_ops ksm_ll_ops;
-	unsigned int max_dun_bytes_supported;
-	unsigned int crypto_modes_supported[4];
-	struct device *dev;
-	unsigned int num_slots;
-	struct rw_semaphore lock;
-	wait_queue_head_t idle_slots_wait_queue;
-	struct list_head idle_slots;
-	spinlock_t idle_slots_lock;
-	struct hlist_head *slot_hashtable;
-	unsigned int log_slot_ht_size;
-	struct blk_ksm_keyslot *slots;
-};
-
-struct blk_crypto_mode {
-	const char *cipher_str;
-	unsigned int keysize;
-	unsigned int ivsize;
-};
-
 struct bio_fallback_crypt_ctx {
 	struct bio_crypt_ctx crypt_ctx;
 	struct bvec_iter crypt_iter;
@@ -57020,9 +111966,9 @@
 	};
 };
 
-struct blk_crypto_keyslot {
+struct blk_crypto_fallback_keyslot {
 	enum blk_crypto_mode_num crypto_mode;
-	struct crypto_skcipher *tfms[4];
+	struct crypto_skcipher *tfms[5];
 };
 
 union blk_crypto_iv {
@@ -57030,89 +111976,170 @@
 	u8 bytes[32];
 };
 
-typedef void (*swap_func_t)(void *, void *, int);
-
-typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
-
-struct siprand_state {
-	long unsigned int v0;
-	long unsigned int v1;
-	long unsigned int v2;
-	long unsigned int v3;
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
 };
 
-typedef __kernel_long_t __kernel_ptrdiff_t;
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
 
-typedef __kernel_ptrdiff_t ptrdiff_t;
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
 
-struct region {
-	unsigned int start;
-	unsigned int off;
-	unsigned int group_len;
-	unsigned int end;
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
+	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
 };
 
 enum {
-	REG_OP_ISFREE = 0,
-	REG_OP_ALLOC = 1,
-	REG_OP_RELEASE = 2,
+	IO_WQ_BOUND = 0,
+	IO_WQ_UNBOUND = 1,
 };
 
-typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+struct io_wqe;
 
-typedef void sg_free_fn(struct scatterlist *, unsigned int);
-
-struct sg_page_iter {
-	struct scatterlist *sg;
-	unsigned int sg_pgoffset;
-	unsigned int __nents;
-	int __pg_advance;
+struct io_wq {
+	long unsigned int state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wqe *wqes[0];
 };
 
-struct sg_dma_page_iter {
-	struct sg_page_iter base;
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
 };
 
-struct sg_mapping_iter {
-	struct page *page;
-	void *addr;
-	size_t length;
-	size_t consumed;
-	struct sg_page_iter piter;
-	unsigned int __offset;
-	unsigned int __remaining;
-	unsigned int __flags;
+enum {
+	IO_WQ_BIT_EXIT = 0,
 };
 
-typedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);
-
-struct rhltable {
-	struct rhashtable ht;
+enum {
+	IO_ACCT_STALLED_BIT = 0,
 };
 
-struct rhashtable_walker {
-	struct list_head list;
-	struct bucket_table *tbl;
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wqe *wqe;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	long unsigned int create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
 };
 
-struct rhashtable_iter {
-	struct rhashtable *ht;
-	struct rhash_head *p;
-	struct rhlist_head *list;
-	struct rhashtable_walker walker;
-	unsigned int slot;
-	unsigned int skip;
-	bool end_of_table;
+struct io_wqe_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	long unsigned int flags;
 };
 
-union nested_table {
-	union nested_table *table;
-	struct rhash_lock_head *bucket;
+struct io_wqe {
+	raw_spinlock_t lock;
+	struct io_wqe_acct acct[2];
+	int node;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq *wq;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
 };
 
-struct once_work {
-	struct work_struct work;
-	struct static_key_true *key;
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
 };
 
 struct genradix_iter {
@@ -57122,48 +112149,16 @@
 
 struct genradix_node {
 	union {
-		struct genradix_node *children[512];
-		u8 data[4096];
+		struct genradix_node *children[2048];
+		u8 data[16384];
 	};
 };
 
-struct reciprocal_value_adv {
-	u32 m;
-	u8 sh;
-	u8 exp;
-	bool is_wide_m;
+struct strarray {
+	char **array;
+	size_t n;
 };
 
-enum devm_ioremap_type {
-	DEVM_IOREMAP = 0,
-	DEVM_IOREMAP_UC = 1,
-	DEVM_IOREMAP_WC = 2,
-};
-
-struct pcim_iomap_devres {
-	void *table[6];
-};
-
-struct btree_head {
-	long unsigned int *node;
-	mempool_t *mempool;
-	int height;
-};
-
-struct btree_geo {
-	int keylen;
-	int no_pairs;
-	int no_longs;
-};
-
-typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
-
-typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
-
-typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
-
-typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
-
 enum assoc_array_walk_status {
 	assoc_array_walk_tree_empty = 0,
 	assoc_array_walk_found_terminal_node = 1,
@@ -57191,64 +112186,25 @@
 	int slot;
 };
 
-struct linear_range {
-	unsigned int min;
-	unsigned int min_sel;
-	unsigned int max_sel;
-	unsigned int step;
-};
+typedef unsigned char Byte;
 
-enum packing_op {
-	PACK = 0,
-	UNPACK = 1,
-};
+typedef long unsigned int uLong;
 
-struct crc_test {
-	u32 crc;
-	u32 start;
-	u32 length;
-	u32 crc_le;
-	u32 crc_be;
-	u32 crc32c_le;
-};
+struct internal_state;
 
-struct xxh32_state {
-	uint32_t total_len_32;
-	uint32_t large_len;
-	uint32_t v1;
-	uint32_t v2;
-	uint32_t v3;
-	uint32_t v4;
-	uint32_t mem32[4];
-	uint32_t memsize;
-};
-
-struct xxh64_state {
-	uint64_t total_len;
-	uint64_t v1;
-	uint64_t v2;
-	uint64_t v3;
-	uint64_t v4;
-	uint64_t mem64[4];
-	uint32_t memsize;
-};
-
-struct gen_pool_chunk {
-	struct list_head next_chunk;
-	atomic_long_t avail;
-	phys_addr_t phys_addr;
-	void *owner;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	long unsigned int bits[0];
-};
-
-struct genpool_data_align {
-	int align;
-};
-
-struct genpool_data_fixed {
-	long unsigned int offset;
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
 };
 
 typedef struct z_stream_s z_stream;
@@ -57334,479 +112290,180 @@
 
 typedef unsigned int uInt;
 
-struct inflate_workspace {
-	struct inflate_state inflate_state;
-	unsigned char working_window[32768];
-};
-
 typedef enum {
 	CODES = 0,
 	LENS = 1,
 	DISTS = 2,
 } codetype;
 
-typedef unsigned char uch;
-
-typedef short unsigned int ush;
-
-typedef long unsigned int ulg;
-
-struct ct_data_s {
-	union {
-		ush freq;
-		ush code;
-	} fc;
-	union {
-		ush dad;
-		ush len;
-	} dl;
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
 };
 
-typedef struct ct_data_s ct_data;
-
-struct static_tree_desc_s {
-	const ct_data *static_tree;
-	const int *extra_bits;
-	int extra_base;
-	int elems;
-	int max_length;
+struct internal_state {
+	int dummy;
 };
 
-typedef struct static_tree_desc_s static_tree_desc;
-
-struct tree_desc_s {
-	ct_data *dyn_tree;
-	int max_code;
-	static_tree_desc *stat_desc;
-};
-
-typedef ush Pos;
-
-typedef unsigned int IPos;
-
-struct deflate_state {
-	z_streamp strm;
-	int status;
-	Byte *pending_buf;
-	ulg pending_buf_size;
-	Byte *pending_out;
-	int pending;
-	int noheader;
-	Byte data_type;
-	Byte method;
-	int last_flush;
-	uInt w_size;
-	uInt w_bits;
-	uInt w_mask;
-	Byte *window;
-	ulg window_size;
-	Pos *prev;
-	Pos *head;
-	uInt ins_h;
-	uInt hash_size;
-	uInt hash_bits;
-	uInt hash_mask;
-	uInt hash_shift;
-	long int block_start;
-	uInt match_length;
-	IPos prev_match;
-	int match_available;
-	uInt strstart;
-	uInt match_start;
-	uInt lookahead;
-	uInt prev_length;
-	uInt max_chain_length;
-	uInt max_lazy_match;
-	int level;
-	int strategy;
-	uInt good_match;
-	int nice_match;
-	struct ct_data_s dyn_ltree[573];
-	struct ct_data_s dyn_dtree[61];
-	struct ct_data_s bl_tree[39];
-	struct tree_desc_s l_desc;
-	struct tree_desc_s d_desc;
-	struct tree_desc_s bl_desc;
-	ush bl_count[16];
-	int heap[573];
-	int heap_len;
-	int heap_max;
-	uch depth[573];
-	uch *l_buf;
-	uInt lit_bufsize;
-	uInt last_lit;
-	ush *d_buf;
-	ulg opt_len;
-	ulg static_len;
-	ulg compressed_len;
-	uInt matches;
-	int last_eob_len;
-	ush bi_buf;
-	int bi_valid;
-};
-
-typedef struct deflate_state deflate_state;
-
-typedef enum {
-	need_more = 0,
-	block_done = 1,
-	finish_started = 2,
-	finish_done = 3,
-} block_state;
-
-typedef block_state (*compress_func)(deflate_state *, int);
-
-struct deflate_workspace {
-	deflate_state deflate_memory;
-	Byte *window_memory;
-	Pos *prev_memory;
-	Pos *head_memory;
-	char *overlay_memory;
-};
-
-typedef struct deflate_workspace deflate_workspace;
-
-struct config_s {
-	ush good_length;
-	ush max_lazy;
-	ush nice_length;
-	ush max_chain;
-	compress_func func;
-};
-
-typedef struct config_s config;
-
-typedef struct tree_desc_s tree_desc;
-
 typedef struct {
-	uint32_t hashTable[4096];
-	uint32_t currentOffset;
-	uint32_t initCheck;
-	const uint8_t *dictionary;
-	uint8_t *bufferStart;
-	uint32_t dictSize;
-} LZ4_stream_t_internal;
-
-typedef union {
-	long long unsigned int table[2052];
-	LZ4_stream_t_internal internal_donotuse;
-} LZ4_stream_t;
-
-typedef uint8_t BYTE;
-
-typedef uint16_t U16;
-
-typedef uint32_t U32;
-
-typedef uint64_t U64;
-
-typedef uintptr_t uptrval;
-
-typedef enum {
-	noLimit = 0,
-	limitedOutput = 1,
-} limitedOutput_directive;
-
-typedef enum {
-	byPtr = 0,
-	byU32 = 1,
-	byU16 = 2,
-} tableType_t;
-
-typedef enum {
-	noDict = 0,
-	withPrefix64k = 1,
-	usingExtDict = 2,
-} dict_directive;
-
-typedef enum {
-	noDictIssue = 0,
-	dictSmall = 1,
-} dictIssue_directive;
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
 
 typedef struct {
-	const uint8_t *externalDict;
-	size_t extDictSize;
-	const uint8_t *prefixEnd;
-	size_t prefixSize;
-} LZ4_streamDecode_t_internal;
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
 
-typedef union {
-	long long unsigned int table[4];
-	LZ4_streamDecode_t_internal internal_donotuse;
-} LZ4_streamDecode_t;
+typedef ZSTD_CCtx___2 ZSTD_CStream___2;
 
 typedef enum {
-	endOnOutputSize = 0,
-	endOnInputSize = 1,
-} endCondition_directive;
+	ZSTD_e_continue = 0,
+	ZSTD_e_flush = 1,
+	ZSTD_e_end = 2,
+} ZSTD_EndDirective;
 
 typedef enum {
-	decode_full_block = 0,
-	partial_decode = 1,
-} earlyEnd_directive;
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
 
 typedef struct {
-	size_t bitContainer;
-	int bitPos;
-	char *startPtr;
-	char *ptr;
-	char *endPtr;
-} BIT_CStream_t;
-
-typedef unsigned int FSE_CTable;
-
-typedef struct {
-	ptrdiff_t value;
-	const void *stateTable;
-	const void *symbolTT;
-	unsigned int stateLog;
-} FSE_CState_t;
-
-typedef struct {
-	int deltaFindState;
-	U32 deltaNbBits;
-} FSE_symbolCompressionTransform;
-
-typedef int16_t S16;
-
-struct HUF_CElt_s {
-	U16 val;
-	BYTE nbBits;
-};
-
-typedef struct HUF_CElt_s HUF_CElt;
+	long long unsigned int ingested;
+	long long unsigned int consumed;
+	long long unsigned int produced;
+	long long unsigned int flushed;
+	unsigned int currentJobID;
+	unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
 
 typedef enum {
-	HUF_repeat_none = 0,
-	HUF_repeat_check = 1,
-	HUF_repeat_valid = 2,
-} HUF_repeat;
+	ZSTD_cpm_noAttachDict = 0,
+	ZSTD_cpm_attachDict = 1,
+	ZSTD_cpm_createCDict = 2,
+	ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
 
-struct nodeElt_s {
-	U32 count;
-	U16 parent;
-	BYTE byte;
-	BYTE nbBits;
-};
-
-typedef struct nodeElt_s nodeElt;
-
-typedef struct {
-	U32 base;
-	U32 curr;
-} rankPos;
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
 
 typedef enum {
-	ZSTDcs_created = 0,
-	ZSTDcs_init = 1,
-	ZSTDcs_ongoing = 2,
-	ZSTDcs_ending = 3,
-} ZSTD_compressionStage_e;
-
-typedef void * (*ZSTD_allocFunction)(void *, size_t);
-
-typedef void (*ZSTD_freeFunction)(void *, void *);
-
-typedef struct {
-	ZSTD_allocFunction customAlloc;
-	ZSTD_freeFunction customFree;
-	void *opaque;
-} ZSTD_customMem;
-
-typedef struct {
-	U32 price;
-	U32 off;
-	U32 mlen;
-	U32 litlen;
-	U32 rep[3];
-} ZSTD_optimal_t;
-
-typedef struct {
-	U32 off;
-	U32 len;
-} ZSTD_match_t;
-
-struct seqDef_s;
-
-typedef struct seqDef_s seqDef;
-
-typedef struct {
-	seqDef *sequencesStart;
-	seqDef *sequences;
-	BYTE *litStart;
-	BYTE *lit;
-	BYTE *llCode;
-	BYTE *mlCode;
-	BYTE *ofCode;
-	U32 longLengthID;
-	U32 longLengthPos;
-	ZSTD_optimal_t *priceTable;
-	ZSTD_match_t *matchTable;
-	U32 *matchLengthFreq;
-	U32 *litLengthFreq;
-	U32 *litFreq;
-	U32 *offCodeFreq;
-	U32 matchLengthSum;
-	U32 matchSum;
-	U32 litLengthSum;
-	U32 litSum;
-	U32 offCodeSum;
-	U32 log2matchLengthSum;
-	U32 log2matchSum;
-	U32 log2litLengthSum;
-	U32 log2litSum;
-	U32 log2offCodeSum;
-	U32 factor;
-	U32 staticPrices;
-	U32 cachedPrice;
-	U32 cachedLitLength;
-	const BYTE *cachedLiterals;
-} seqStore_t;
-
-struct HUF_CElt_s___2;
-
-typedef struct HUF_CElt_s___2 HUF_CElt___2;
-
-struct ZSTD_CCtx_s___2 {
-	const BYTE *nextSrc;
-	const BYTE *base;
-	const BYTE *dictBase;
-	U32 dictLimit;
-	U32 lowLimit;
-	U32 nextToUpdate;
-	U32 nextToUpdate3;
-	U32 hashLog3;
-	U32 loadedDictEnd;
-	U32 forceWindow;
-	U32 forceRawDict;
-	ZSTD_compressionStage_e stage;
-	U32 rep[3];
-	U32 repToConfirm[3];
-	U32 dictID;
-	ZSTD_parameters params;
-	void *workSpace;
-	size_t workSpaceSize;
-	size_t blockSize;
-	U64 frameContentSize;
-	struct xxh64_state xxhState;
-	ZSTD_customMem customMem;
-	seqStore_t seqStore;
-	U32 *hashTable;
-	U32 *hashTable3;
-	U32 *chainTable;
-	HUF_CElt___2 *hufTable;
-	U32 flagStaticTables;
-	HUF_repeat flagStaticHufTable;
-	FSE_CTable offcodeCTable[187];
-	FSE_CTable matchlengthCTable[363];
-	FSE_CTable litlengthCTable[329];
-	unsigned int tmpCounters[1536];
-};
-
-typedef struct ZSTD_CCtx_s___2 ZSTD_CCtx___2;
-
-struct ZSTD_CDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictContentSize;
-	ZSTD_CCtx___2 *refContext;
-};
-
-typedef struct ZSTD_CDict_s ZSTD_CDict;
-
-struct ZSTD_inBuffer_s {
-	const void *src;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
-
-struct ZSTD_outBuffer_s {
-	void *dst;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
-
-typedef enum {
-	zcss_init = 0,
-	zcss_load = 1,
-	zcss_flush = 2,
-	zcss_final = 3,
-} ZSTD_cStreamStage;
-
-struct ZSTD_CStream_s {
-	ZSTD_CCtx___2 *cctx;
-	ZSTD_CDict *cdictLocal;
-	const ZSTD_CDict *cdict;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inToCompress;
-	size_t inBuffPos;
-	size_t inBuffTarget;
-	size_t blockSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outBuffContentSize;
-	size_t outBuffFlushedSize;
-	ZSTD_cStreamStage stage;
-	U32 checksum;
-	U32 frameEnded;
-	U64 pledgedSrcSize;
-	U64 inputProcessed;
-	ZSTD_parameters params;
-	ZSTD_customMem customMem;
-};
-
-typedef struct ZSTD_CStream_s ZSTD_CStream;
-
-typedef int32_t S32;
-
-typedef enum {
-	set_basic = 0,
-	set_rle = 1,
-	set_compressed = 2,
-	set_repeat = 3,
-} symbolEncodingType_e;
-
-struct seqDef_s {
-	U32 offset;
-	U16 litLength;
-	U16 matchLength;
-};
-
-typedef enum {
-	ZSTDcrp_continue = 0,
-	ZSTDcrp_noMemset = 1,
-	ZSTDcrp_fullReset = 2,
+	ZSTDcrp_makeClean = 0,
+	ZSTDcrp_leaveDirty = 1,
 } ZSTD_compResetPolicy_e;
 
-typedef void (*ZSTD_blockCompressor)(ZSTD_CCtx___2 *, const void *, size_t);
+typedef enum {
+	ZSTDirp_continue = 0,
+	ZSTDirp_reset = 1,
+} ZSTD_indexResetPolicy_e;
 
 typedef enum {
-	zsf_gather = 0,
-	zsf_flush = 1,
-	zsf_end = 2,
-} ZSTD_flush_e;
-
-typedef size_t (*searchMax_f)(ZSTD_CCtx___2 *, const BYTE *, const BYTE *, size_t *, U32, U32);
+	ZSTD_resetTarget_CDict = 0,
+	ZSTD_resetTarget_CCtx = 1,
+} ZSTD_resetTarget_e;
 
 typedef struct {
-	size_t bitContainer;
-	unsigned int bitsConsumed;
-	const char *ptr;
-	const char *start;
-} BIT_DStream_t;
+	U32 LLtype;
+	U32 Offtype;
+	U32 MLtype;
+	size_t size;
+	size_t lastCountSize;
+} ZSTD_symbolEncodingTypeStats_t;
+
+enum {
+	ZSTDbss_compress = 0,
+	ZSTDbss_noCompress = 1,
+};
+
+typedef struct {
+	U32 *splitLocations;
+	size_t idx;
+} seqStoreSplits;
+
+typedef struct {
+	U32 idx;
+	U32 posInSequence;
+	size_t posInSrc;
+} ZSTD_sequencePosition;
+
+typedef size_t (*ZSTD_sequenceCopier)(ZSTD_CCtx___2 *, ZSTD_sequencePosition *, const ZSTD_Sequence * const, size_t, const void *, size_t);
+
+typedef struct {
+	U64 rolling;
+	U64 stopMask;
+} ldmRollingHashState_t;
+
+typedef struct {
+	BYTE maxTableLog;
+	BYTE tableType;
+	BYTE tableLog;
+	BYTE reserved;
+} DTableDesc;
+
+typedef struct {
+	BYTE nbBits;
+	BYTE byte;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[13];
+	U32 rankStart[13];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
+
+typedef struct {
+	U16 sequence;
+	BYTE nbBits;
+	BYTE length;
+} HUF_DEltX2;
+
+typedef struct {
+	BYTE symbol;
+} sortedSymbol_t;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+	U32 rankVal[156];
+	U32 rankStats[13];
+	U32 rankStart0[15];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+	U32 tableTime;
+	U32 decode256Time;
+} algo_time_t;
 
 typedef enum {
-	BIT_DStream_unfinished = 0,
-	BIT_DStream_endOfBuffer = 1,
-	BIT_DStream_completed = 2,
-	BIT_DStream_overflow = 3,
-} BIT_DStream_status;
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef ZSTD_DCtx___2 ZSTD_DStream___2;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef struct {
+	size_t compressedSize;
+	long long unsigned int decompressedBound;
+} ZSTD_frameSizeInfo;
 
 typedef unsigned int FSE_DTable;
 
@@ -57827,217 +112484,9 @@
 } FSE_decode_t;
 
 typedef struct {
-	void *ptr;
-	const void *end;
-} ZSTD_stack;
-
-typedef U32 HUF_DTable;
-
-typedef struct {
-	BYTE maxTableLog;
-	BYTE tableType;
-	BYTE tableLog;
-	BYTE reserved;
-} DTableDesc;
-
-typedef struct {
-	BYTE byte;
-	BYTE nbBits;
-} HUF_DEltX2;
-
-typedef struct {
-	U16 sequence;
-	BYTE nbBits;
-	BYTE length;
-} HUF_DEltX4;
-
-typedef struct {
-	BYTE symbol;
-	BYTE weight;
-} sortedSymbol_t;
-
-typedef U32 rankValCol_t[13];
-
-typedef struct {
-	U32 tableTime;
-	U32 decode256Time;
-} algo_time_t;
-
-typedef struct {
-	FSE_DTable LLTable[513];
-	FSE_DTable OFTable[257];
-	FSE_DTable MLTable[513];
-	HUF_DTable hufTable[4097];
-	U64 workspace[384];
-	U32 rep[3];
-} ZSTD_entropyTables_t;
-
-typedef struct {
-	long long unsigned int frameContentSize;
-	unsigned int windowSize;
-	unsigned int dictID;
-	unsigned int checksumFlag;
-} ZSTD_frameParams;
-
-typedef enum {
-	bt_raw = 0,
-	bt_rle = 1,
-	bt_compressed = 2,
-	bt_reserved = 3,
-} blockType_e;
-
-typedef enum {
-	ZSTDds_getFrameHeaderSize = 0,
-	ZSTDds_decodeFrameHeader = 1,
-	ZSTDds_decodeBlockHeader = 2,
-	ZSTDds_decompressBlock = 3,
-	ZSTDds_decompressLastBlock = 4,
-	ZSTDds_checkChecksum = 5,
-	ZSTDds_decodeSkippableHeader = 6,
-	ZSTDds_skipFrame = 7,
-} ZSTD_dStage;
-
-struct ZSTD_DCtx_s___2 {
-	const FSE_DTable *LLTptr;
-	const FSE_DTable *MLTptr;
-	const FSE_DTable *OFTptr;
-	const HUF_DTable *HUFptr;
-	ZSTD_entropyTables_t entropy;
-	const void *previousDstEnd;
-	const void *base;
-	const void *vBase;
-	const void *dictEnd;
-	size_t expected;
-	ZSTD_frameParams fParams;
-	blockType_e bType;
-	ZSTD_dStage stage;
-	U32 litEntropy;
-	U32 fseEntropy;
-	struct xxh64_state xxhState;
-	size_t headerSize;
-	U32 dictID;
-	const BYTE *litPtr;
-	ZSTD_customMem customMem;
-	size_t litSize;
-	size_t rleSize;
-	BYTE litBuffer[131080];
-	BYTE headerBuffer[18];
-};
-
-typedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;
-
-struct ZSTD_DDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictSize;
-	ZSTD_entropyTables_t entropy;
-	U32 dictID;
-	U32 entropyPresent;
-	ZSTD_customMem cMem;
-};
-
-typedef struct ZSTD_DDict_s ZSTD_DDict;
-
-typedef enum {
-	zdss_init = 0,
-	zdss_loadHeader = 1,
-	zdss_read = 2,
-	zdss_load = 3,
-	zdss_flush = 4,
-} ZSTD_dStreamStage;
-
-struct ZSTD_DStream_s {
-	ZSTD_DCtx___2 *dctx;
-	ZSTD_DDict *ddictLocal;
-	const ZSTD_DDict *ddict;
-	ZSTD_frameParams fParams;
-	ZSTD_dStreamStage stage;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inPos;
-	size_t maxWindowSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outStart;
-	size_t outEnd;
-	size_t blockSize;
-	BYTE headerBuffer[18];
-	size_t lhSize;
-	ZSTD_customMem customMem;
-	void *legacyContext;
-	U32 previousLegacyVersion;
-	U32 legacyVersion;
-	U32 hostageByte;
-};
-
-typedef struct ZSTD_DStream_s ZSTD_DStream;
-
-typedef enum {
-	ZSTDnit_frameHeader = 0,
-	ZSTDnit_blockHeader = 1,
-	ZSTDnit_block = 2,
-	ZSTDnit_lastBlock = 3,
-	ZSTDnit_checksum = 4,
-	ZSTDnit_skippableFrame = 5,
-} ZSTD_nextInputType_e;
-
-typedef uintptr_t uPtrDiff;
-
-typedef struct {
-	blockType_e blockType;
-	U32 lastBlock;
-	U32 origSize;
-} blockProperties_t;
-
-typedef union {
-	FSE_decode_t realData;
-	U32 alignedBy4;
-} FSE_decode_t4;
-
-typedef struct {
-	size_t litLength;
-	size_t matchLength;
-	size_t offset;
-	const BYTE *match;
-} seq_t;
-
-typedef struct {
-	BIT_DStream_t DStream;
-	FSE_DState_t stateLL;
-	FSE_DState_t stateOffb;
-	FSE_DState_t stateML;
-	size_t prevOffset[3];
-	const BYTE *base;
-	size_t pos;
-	uPtrDiff gotoDict;
-} seqState_t;
-
-enum xz_mode {
-	XZ_SINGLE = 0,
-	XZ_PREALLOC = 1,
-	XZ_DYNALLOC = 2,
-};
-
-enum xz_ret {
-	XZ_OK = 0,
-	XZ_STREAM_END = 1,
-	XZ_UNSUPPORTED_CHECK = 2,
-	XZ_MEM_ERROR = 3,
-	XZ_MEMLIMIT_ERROR = 4,
-	XZ_FORMAT_ERROR = 5,
-	XZ_OPTIONS_ERROR = 6,
-	XZ_DATA_ERROR = 7,
-	XZ_BUF_ERROR = 8,
-};
-
-struct xz_buf {
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_size;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-};
+	short int ncount[256];
+	FSE_DTable dtable[1];
+} FSE_DecompressWksp;
 
 typedef uint64_t vli_type;
 
@@ -58198,9 +112647,10 @@
 	uint32_t compressed;
 	bool need_dict_reset;
 	bool need_props;
+	bool pedantic_microlzma;
 };
 
-struct xz_dec_lzma2___2 {
+struct xz_dec_lzma2 {
 	struct rc_dec rc;
 	struct dictionary dict;
 	struct lzma2_dec lzma2;
@@ -58211,7 +112661,11 @@
 	} temp;
 };
 
-struct xz_dec_bcj___2 {
+struct xz_dec_microlzma {
+	struct xz_dec_lzma2 s;
+};
+
+struct xz_dec_bcj {
 	enum {
 		BCJ_X86 = 4,
 		BCJ_POWERPC = 5,
@@ -58234,4690 +112688,99 @@
 	} temp;
 };
 
-struct ts_state {
-	unsigned int offset;
-	char cb[40];
-};
-
-struct ts_config;
-
-struct ts_ops {
-	const char *name;
-	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
-	unsigned int (*find)(struct ts_config *, struct ts_state *);
-	void (*destroy)(struct ts_config *);
-	void * (*get_pattern)(struct ts_config *);
-	unsigned int (*get_pattern_len)(struct ts_config *);
-	struct module *owner;
-	struct list_head list;
-};
-
-struct ts_config {
-	struct ts_ops *ops;
-	int flags;
-	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
-	void (*finish)(struct ts_config *, struct ts_state *);
-};
-
 struct ts_linear_state {
 	unsigned int len;
 	const void *data;
 };
 
-struct ei_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	int etype;
-	void *priv;
+struct ddebug_class_param {
+	union {
+		long unsigned int *bits;
+		unsigned int *lvl;
+	};
+	char flags[8];
+	const struct ddebug_class_map *map;
 };
 
-struct nla_bitfield32 {
-	__u32 value;
-	__u32 selector;
+struct ddebug_table {
+	struct list_head link;
+	struct list_head maps;
+	const char *mod_name;
+	unsigned int num_ddebugs;
+	struct _ddebug *ddebugs;
 };
 
-enum nla_policy_validation {
-	NLA_VALIDATE_NONE = 0,
-	NLA_VALIDATE_RANGE = 1,
-	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
-	NLA_VALIDATE_MIN = 3,
-	NLA_VALIDATE_MAX = 4,
-	NLA_VALIDATE_MASK = 5,
-	NLA_VALIDATE_RANGE_PTR = 6,
-	NLA_VALIDATE_FUNCTION = 7,
+struct ddebug_query {
+	const char *filename;
+	const char *module;
+	const char *function;
+	const char *format;
+	const char *class_string;
+	unsigned int first_lineno;
+	unsigned int last_lineno;
 };
 
-enum netlink_validation {
-	NL_VALIDATE_LIBERAL = 0,
-	NL_VALIDATE_TRAILING = 1,
-	NL_VALIDATE_MAXTYPE = 2,
-	NL_VALIDATE_UNSPEC = 4,
-	NL_VALIDATE_STRICT_ATTRS = 8,
-	NL_VALIDATE_NESTED = 16,
+struct ddebug_iter {
+	struct ddebug_table *table;
+	int idx;
 };
 
-struct cpu_rmap {
-	struct kref refcount;
-	u16 size;
-	u16 used;
-	void **obj;
-	struct {
-		u16 index;
-		u16 dist;
-	} near[0];
+struct flag_settings {
+	unsigned int flags;
+	unsigned int mask;
 };
 
-struct irq_glue {
-	struct irq_affinity_notify notify;
-	struct cpu_rmap *rmap;
-	u16 index;
-};
-
-typedef mpi_limb_t *mpi_ptr_t;
-
-typedef int mpi_size_t;
-
-typedef mpi_limb_t UWtype;
-
-typedef unsigned int UHWtype;
-
-enum gcry_mpi_constants {
-	MPI_C_ZERO = 0,
-	MPI_C_ONE = 1,
-	MPI_C_TWO = 2,
-	MPI_C_THREE = 3,
-	MPI_C_FOUR = 4,
-	MPI_C_EIGHT = 5,
-};
-
-struct barrett_ctx_s;
-
-typedef struct barrett_ctx_s *mpi_barrett_t;
-
-struct gcry_mpi_point {
-	MPI x;
-	MPI y;
-	MPI z;
-};
-
-typedef struct gcry_mpi_point *MPI_POINT;
-
-enum gcry_mpi_ec_models {
-	MPI_EC_WEIERSTRASS = 0,
-	MPI_EC_MONTGOMERY = 1,
-	MPI_EC_EDWARDS = 2,
-};
-
-enum ecc_dialects {
-	ECC_DIALECT_STANDARD = 0,
-	ECC_DIALECT_ED25519 = 1,
-	ECC_DIALECT_SAFECURVE = 2,
-};
-
-struct mpi_ec_ctx {
-	enum gcry_mpi_ec_models model;
-	enum ecc_dialects dialect;
-	int flags;
-	unsigned int nbits;
-	MPI p;
-	MPI a;
-	MPI b;
-	MPI_POINT G;
-	MPI n;
-	unsigned int h;
-	MPI_POINT Q;
-	MPI d;
-	const char *name;
-	struct {
-		struct {
-			unsigned int a_is_pminus3: 1;
-			unsigned int two_inv_p: 1;
-		} valid;
-		int a_is_pminus3;
-		MPI two_inv_p;
-		mpi_barrett_t p_barrett;
-		MPI scratch[11];
-	} t;
-	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
-	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
-};
-
-struct field_table {
-	const char *p;
-	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
-	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
-};
-
-enum gcry_mpi_format {
-	GCRYMPI_FMT_NONE = 0,
-	GCRYMPI_FMT_STD = 1,
-	GCRYMPI_FMT_PGP = 2,
-	GCRYMPI_FMT_SSH = 3,
-	GCRYMPI_FMT_HEX = 4,
-	GCRYMPI_FMT_USG = 5,
-	GCRYMPI_FMT_OPAQUE = 8,
-};
-
-struct barrett_ctx_s___2;
-
-typedef struct barrett_ctx_s___2 *mpi_barrett_t___2;
-
-struct barrett_ctx_s___2 {
-	MPI m;
-	int m_copied;
-	int k;
-	MPI y;
-	MPI r1;
-	MPI r2;
-	MPI r3;
-};
-
-struct karatsuba_ctx {
-	struct karatsuba_ctx *next;
-	mpi_ptr_t tspace;
-	mpi_size_t tspace_size;
-	mpi_ptr_t tp;
-	mpi_size_t tp_size;
+struct flagsbuf {
+	char buf[7];
 };
 
 typedef long int mpi_limb_signed_t;
 
-enum dim_tune_state {
-	DIM_PARKING_ON_TOP = 0,
-	DIM_PARKING_TIRED = 1,
-	DIM_GOING_RIGHT = 2,
-	DIM_GOING_LEFT = 3,
-};
-
-struct dim_cq_moder {
-	u16 usec;
-	u16 pkts;
-	u16 comps;
-	u8 cq_period_mode;
-};
-
-enum dim_cq_period_mode {
-	DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,
-	DIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,
-	DIM_CQ_PERIOD_NUM_MODES = 2,
-};
-
-enum dim_state {
-	DIM_START_MEASURE = 0,
-	DIM_MEASURE_IN_PROGRESS = 1,
-	DIM_APPLY_NEW_PROFILE = 2,
-};
-
-enum dim_stats_state {
-	DIM_STATS_WORSE = 0,
-	DIM_STATS_SAME = 1,
-	DIM_STATS_BETTER = 2,
-};
-
-enum dim_step_result {
-	DIM_STEPPED = 0,
-	DIM_TOO_TIRED = 1,
-	DIM_ON_EDGE = 2,
-};
-
-enum pubkey_algo {
-	PUBKEY_ALGO_RSA = 0,
-	PUBKEY_ALGO_MAX = 1,
-};
-
-struct pubkey_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct signature_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t hash;
-	uint8_t keyid[8];
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct sg_splitter {
-	struct scatterlist *in_sg0;
-	int nents;
-	off_t skip_sg0;
-	unsigned int length_last_sg;
-	struct scatterlist *out_sg;
-};
-
-struct sg_pool {
-	size_t size;
-	char *name;
-	struct kmem_cache *slab;
-	mempool_t *pool;
-};
-
-enum {
-	IRQ_POLL_F_SCHED = 0,
-	IRQ_POLL_F_DISABLE = 1,
-};
-
-struct font_desc {
-	int idx;
-	const char *name;
-	int width;
-	int height;
-	const void *data;
-	int pref;
-};
-
-struct font_data {
-	unsigned int extra[4];
-	const unsigned char data[0];
-};
-
-typedef u16 ucs2_char_t;
-
-struct firmware {
-	size_t size;
-	const u8 *data;
-	void *priv;
-};
-
-struct pldmfw_record {
-	struct list_head entry;
-	struct list_head descs;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u16 package_data_len;
-	u32 device_update_flags;
-	const u8 *package_data;
-	long unsigned int *component_bitmap;
-	u16 component_bitmap_len;
-};
-
-struct pldmfw_desc_tlv {
-	struct list_head entry;
-	const u8 *data;
-	u16 type;
-	u16 size;
-};
-
-struct pldmfw_component {
-	struct list_head entry;
-	u16 classification;
-	u16 identifier;
-	u16 options;
-	u16 activation_method;
-	u32 comparison_stamp;
-	u32 component_size;
-	const u8 *component_data;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u8 index;
-};
-
-struct pldmfw_ops;
-
-struct pldmfw {
-	const struct pldmfw_ops *ops;
-	struct device *dev;
-};
-
-struct pldmfw_ops {
-	bool (*match_record)(struct pldmfw *, struct pldmfw_record *);
-	int (*send_package_data)(struct pldmfw *, const u8 *, u16);
-	int (*send_component_table)(struct pldmfw *, struct pldmfw_component *, u8);
-	int (*flash_component)(struct pldmfw *, struct pldmfw_component *);
-	int (*finalize_update)(struct pldmfw *);
-};
-
-struct __pldm_timestamp {
-	u8 b[13];
-};
-
-struct __pldm_header {
-	uuid_t id;
-	u8 revision;
-	__le16 size;
-	struct __pldm_timestamp release_date;
-	__le16 component_bitmap_len;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_record_info {
-	__le16 record_len;
-	u8 descriptor_count;
-	__le32 device_update_flags;
-	u8 version_type;
-	u8 version_len;
-	__le16 package_data_len;
-	u8 variable_record_data[0];
-} __attribute__((packed));
-
-struct __pldmfw_desc_tlv {
-	__le16 type;
-	__le16 size;
-	u8 data[0];
-};
-
-struct __pldmfw_record_area {
-	u8 record_count;
-	u8 records[0];
-};
-
-struct __pldmfw_component_info {
-	__le16 classification;
-	__le16 identifier;
-	__le32 comparison_stamp;
-	__le16 options;
-	__le16 activation_method;
-	__le32 location_offset;
-	__le32 size;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_component_area {
-	__le16 component_image_count;
-	u8 components[0];
-};
-
-struct pldmfw_priv {
-	struct pldmfw *context;
-	const struct firmware *fw;
-	size_t offset;
-	struct list_head records;
-	struct list_head components;
-	const struct __pldm_header *header;
-	u16 total_header_size;
-	u16 component_bitmap_len;
-	u16 bitmap_size;
-	u16 component_count;
-	const u8 *component_start;
-	const u8 *record_start;
-	u8 record_count;
-	u32 header_crc;
-	struct pldmfw_record *matching_record;
-};
-
-struct pldm_pci_record_id {
-	int vendor;
-	int device;
-	int subsystem_vendor;
-	int subsystem_device;
-};
-
-typedef long unsigned int cycles_t;
-
-struct compress_format {
-	unsigned char magic[2];
-	const char *name;
-	decompress_fn decompressor;
-};
-
-struct group_data {
-	int limit[21];
-	int base[20];
-	int permute[258];
-	int minLen;
-	int maxLen;
-};
-
-struct bunzip_data {
-	int writeCopies;
-	int writePos;
-	int writeRunCountdown;
-	int writeCount;
-	int writeCurrent;
-	long int (*fill)(void *, long unsigned int);
-	long int inbufCount;
-	long int inbufPos;
-	unsigned char *inbuf;
-	unsigned int inbufBitCount;
-	unsigned int inbufBits;
-	unsigned int crc32Table[256];
-	unsigned int headerCRC;
-	unsigned int totalCRC;
-	unsigned int writeCRC;
-	unsigned int *dbuf;
-	unsigned int dbufSize;
-	unsigned char selectors[32768];
-	struct group_data groups[6];
-	int io_error;
-	int byteCount[256];
-	unsigned char symToByte[256];
-	unsigned char mtfSymbol[256];
-};
-
-struct rc {
-	long int (*fill)(void *, long unsigned int);
-	uint8_t *ptr;
-	uint8_t *buffer;
-	uint8_t *buffer_end;
-	long int buffer_size;
-	uint32_t code;
-	uint32_t range;
-	uint32_t bound;
-	void (*error)(char *);
-};
-
-struct lzma_header {
-	uint8_t pos;
-	uint32_t dict_size;
-	uint64_t dst_size;
-} __attribute__((packed));
-
-struct writer {
-	uint8_t *buffer;
-	uint8_t previous_byte;
-	size_t buffer_pos;
-	int bufsize;
-	size_t global_pos;
-	long int (*flush)(void *, long unsigned int);
-	struct lzma_header *header;
-};
-
-struct cstate {
-	int state;
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-};
-
-struct xz_dec___2;
-
-typedef enum {
-	ZSTD_error_no_error = 0,
-	ZSTD_error_GENERIC = 1,
-	ZSTD_error_prefix_unknown = 2,
-	ZSTD_error_version_unsupported = 3,
-	ZSTD_error_parameter_unknown = 4,
-	ZSTD_error_frameParameter_unsupported = 5,
-	ZSTD_error_frameParameter_unsupportedBy32bits = 6,
-	ZSTD_error_frameParameter_windowTooLarge = 7,
-	ZSTD_error_compressionParameter_unsupported = 8,
-	ZSTD_error_init_missing = 9,
-	ZSTD_error_memory_allocation = 10,
-	ZSTD_error_stage_wrong = 11,
-	ZSTD_error_dstSize_tooSmall = 12,
-	ZSTD_error_srcSize_wrong = 13,
-	ZSTD_error_corruption_detected = 14,
-	ZSTD_error_checksum_wrong = 15,
-	ZSTD_error_tableLog_tooLarge = 16,
-	ZSTD_error_maxSymbolValue_tooLarge = 17,
-	ZSTD_error_maxSymbolValue_tooSmall = 18,
-	ZSTD_error_dictionary_corrupted = 19,
-	ZSTD_error_dictionary_wrong = 20,
-	ZSTD_error_dictionaryCreation_failed = 21,
-	ZSTD_error_maxCode = 22,
-} ZSTD_ErrorCode;
-
-struct ZSTD_DStream_s___2;
-
-typedef struct ZSTD_DStream_s___2 ZSTD_DStream___2;
-
-struct cpio_data {
-	void *data;
-	size_t size;
-	char name[18];
-};
-
-enum cpio_fields {
-	C_MAGIC = 0,
-	C_INO = 1,
-	C_MODE = 2,
-	C_UID = 3,
-	C_GID = 4,
-	C_NLINK = 5,
-	C_MTIME = 6,
-	C_FILESIZE = 7,
-	C_MAJ = 8,
-	C_MIN = 9,
-	C_RMAJ = 10,
-	C_RMIN = 11,
-	C_NAMESIZE = 12,
-	C_CHKSUM = 13,
-	C_NFIELDS = 14,
-};
-
-enum {
-	ASSUME_PERFECT = 255,
-	ASSUME_VALID_DTB = 1,
-	ASSUME_VALID_INPUT = 2,
-	ASSUME_LATEST = 4,
-	ASSUME_NO_ROLLBACK = 8,
-	ASSUME_LIBFDT_ORDER = 16,
-	ASSUME_LIBFDT_FLAWLESS = 32,
-};
-
-struct fdt_reserve_entry {
-	fdt64_t address;
-	fdt64_t size;
-};
-
-struct fdt_node_header {
-	fdt32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	fdt32_t tag;
-	fdt32_t len;
-	fdt32_t nameoff;
-	char data[0];
-};
-
-struct fdt_errtabent {
-	const char *str;
-};
-
-struct fprop_local_single {
-	long unsigned int events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-struct ida_bitmap {
-	long unsigned int bitmap[16];
-};
-
-struct klist_waiter {
-	struct list_head list;
-	struct klist_node *node;
-	struct task_struct *process;
-	int woken;
-};
-
-struct uevent_sock {
-	struct list_head list;
-	struct sock *sk;
-};
-
-enum {
-	LOGIC_PIO_INDIRECT = 0,
-	LOGIC_PIO_CPU_MMIO = 1,
-};
-
-struct logic_pio_host_ops;
-
-struct logic_pio_hwaddr {
-	struct list_head list;
-	struct fwnode_handle *fwnode;
-	resource_size_t hw_start;
-	resource_size_t io_start;
-	resource_size_t size;
-	long unsigned int flags;
-	void *hostdata;
-	const struct logic_pio_host_ops *ops;
-};
-
-struct logic_pio_host_ops {
-	u32 (*in)(void *, long unsigned int, size_t);
-	void (*out)(void *, long unsigned int, u32, size_t);
-	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
-	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
-};
-
-struct radix_tree_preload {
-	unsigned int nr;
-	struct xa_node *nodes;
-};
-
-typedef struct {
-	long unsigned int key[2];
-} hsiphash_key_t;
-
-enum format_type {
-	FORMAT_TYPE_NONE = 0,
-	FORMAT_TYPE_WIDTH = 1,
-	FORMAT_TYPE_PRECISION = 2,
-	FORMAT_TYPE_CHAR = 3,
-	FORMAT_TYPE_STR = 4,
-	FORMAT_TYPE_PTR = 5,
-	FORMAT_TYPE_PERCENT_CHAR = 6,
-	FORMAT_TYPE_INVALID = 7,
-	FORMAT_TYPE_LONG_LONG = 8,
-	FORMAT_TYPE_ULONG = 9,
-	FORMAT_TYPE_LONG = 10,
-	FORMAT_TYPE_UBYTE = 11,
-	FORMAT_TYPE_BYTE = 12,
-	FORMAT_TYPE_USHORT = 13,
-	FORMAT_TYPE_SHORT = 14,
-	FORMAT_TYPE_UINT = 15,
-	FORMAT_TYPE_INT = 16,
-	FORMAT_TYPE_SIZE_T = 17,
-	FORMAT_TYPE_PTRDIFF = 18,
-};
-
-struct printf_spec {
-	unsigned int type: 8;
-	int field_width: 24;
-	unsigned int flags: 8;
-	unsigned int base: 8;
-	int precision: 16;
-};
-
-struct minmax_sample {
-	u32 t;
-	u32 v;
-};
-
-struct minmax {
-	struct minmax_sample s[3];
-};
-
-struct xa_limit {
-	u32 max;
-	u32 min;
-};
-
-typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
-
-typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
-
-struct acpi_probe_entry;
-
-typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
-
-struct acpi_probe_entry {
-	__u8 id[5];
-	__u8 type;
-	acpi_probe_entry_validate_subtbl subtable_valid;
-	union {
-		acpi_tbl_table_handler probe_table;
-		acpi_tbl_entry_handler probe_subtbl;
-	};
-	kernel_ulong_t driver_data;
-};
-
-typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
-
-typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
-
-struct armctrl_ic {
-	void *base;
-	void *pending[3];
-	void *enable[3];
-	void *disable[3];
-	struct irq_domain *domain;
-};
-
-struct bcm2836_arm_irqchip_intc {
-	struct irq_domain *domain;
-	void *base;
-};
-
-struct tegra_ictlr_soc {
-	unsigned int num_ictlrs;
-};
-
-struct tegra_ictlr_info {
-	void *base[6];
-	u32 cop_ier[6];
-	u32 cop_iep[6];
-	u32 cpu_ier[6];
-	u32 cpu_iep[6];
-	u32 ictlr_wake_mask[6];
-};
-
-struct sun4i_irq_chip_data {
-	void *irq_base;
-	struct irq_domain *irq_domain;
-	u32 enable_reg_offset;
-	u32 mask_reg_offset;
-};
-
-enum {
-	SUNXI_SRC_TYPE_LEVEL_LOW = 0,
-	SUNXI_SRC_TYPE_EDGE_FALLING = 1,
-	SUNXI_SRC_TYPE_LEVEL_HIGH = 2,
-	SUNXI_SRC_TYPE_EDGE_RISING = 3,
-};
-
-struct sunxi_sc_nmi_reg_offs {
-	u32 ctrl;
-	u32 pend;
-	u32 enable;
-};
-
-struct acpi_madt_generic_distributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 gic_id;
-	u64 base_address;
-	u32 global_irq_base;
-	u8 version;
-	u8 reserved2[3];
-};
-
-enum acpi_madt_gic_version {
-	ACPI_MADT_GIC_VERSION_NONE = 0,
-	ACPI_MADT_GIC_VERSION_V1 = 1,
-	ACPI_MADT_GIC_VERSION_V2 = 2,
-	ACPI_MADT_GIC_VERSION_V3 = 3,
-	ACPI_MADT_GIC_VERSION_V4 = 4,
-	ACPI_MADT_GIC_VERSION_RESERVED = 5,
-};
-
-enum acpi_irq_model_id {
-	ACPI_IRQ_MODEL_PIC = 0,
-	ACPI_IRQ_MODEL_IOAPIC = 1,
-	ACPI_IRQ_MODEL_IOSAPIC = 2,
-	ACPI_IRQ_MODEL_PLATFORM = 3,
-	ACPI_IRQ_MODEL_GIC = 4,
-	ACPI_IRQ_MODEL_COUNT = 5,
-};
-
-union gic_base {
-	void *common_base;
-	void **percpu_base;
-};
-
-struct gic_chip_data {
-	struct irq_chip chip;
-	union gic_base dist_base;
-	union gic_base cpu_base;
-	void *raw_dist_base;
-	void *raw_cpu_base;
-	u32 percpu_offset;
-	u32 saved_spi_enable[32];
-	u32 saved_spi_active[32];
-	u32 saved_spi_conf[64];
-	u32 saved_spi_target[255];
-	u32 *saved_ppi_enable;
-	u32 *saved_ppi_active;
-	u32 *saved_ppi_conf;
-	struct irq_domain *domain;
-	unsigned int gic_irqs;
-};
-
-struct gic_quirk {
-	const char *desc;
-	const char *compatible;
-	bool (*init)(void *);
-	u32 iidr;
-	u32 mask;
-};
-
-struct clk_bulk_data {
-	const char *id;
-	struct clk *clk;
-};
-
-struct gic_clk_data {
-	unsigned int num_clocks;
-	const char * const *clocks;
-};
-
-struct gic_chip_data___2;
-
-struct gic_chip_pm {
-	struct gic_chip_data___2 *chip_data;
-	const struct gic_clk_data *clk_data;
-	struct clk_bulk_data *clks;
-};
-
-struct acpi_table_madt {
-	struct acpi_table_header header;
-	u32 address;
-	u32 flags;
-};
-
-struct acpi_madt_generic_msi_frame {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 msi_frame_id;
-	u64 base_address;
-	u32 flags;
-	u16 spi_count;
-	u16 spi_base;
-};
-
-struct v2m_data {
-	struct list_head entry;
-	struct fwnode_handle *fwnode;
-	struct resource res;
-	void *base;
-	u32 spi_start;
-	u32 nr_spis;
-	u32 spi_offset;
-	long unsigned int *bm;
-	u32 flags;
-};
-
-struct acpi_madt_generic_redistributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 base_address;
-	u32 length;
-} __attribute__((packed));
-
-struct rdists {
+union handle_parts {
+	depot_stack_handle_t handle;
 	struct {
-		raw_spinlock_t rd_lock;
-		void *rd_base;
-		struct page *pend_page;
-		phys_addr_t phys_base;
-		bool lpi_enabled;
-		cpumask_t *vpe_table_mask;
-		void *vpe_l1_base;
-	} *rdist;
-	phys_addr_t prop_table_pa;
-	void *prop_table_va;
-	u64 flags;
-	u32 gicd_typer;
-	u32 gicd_typer2;
-	bool has_vlpis;
-	bool has_rvpeid;
-	bool has_direct_lpi;
-	bool has_vpend_valid_dirty;
-};
-
-struct partition_affinity {
-	cpumask_t mask;
-	void *partition_id;
-};
-
-struct redist_region {
-	void *redist_base;
-	phys_addr_t phys_base;
-	bool single_redist;
-};
-
-struct partition_desc;
-
-struct gic_chip_data___3 {
-	struct fwnode_handle *fwnode;
-	void *dist_base;
-	struct redist_region *redist_regions;
-	struct rdists rdists;
-	struct irq_domain *domain;
-	u64 redist_stride;
-	u32 nr_redist_regions;
-	u64 flags;
-	bool has_rss;
-	unsigned int ppi_nr;
-	struct partition_desc **ppi_descs;
-};
-
-enum gic_intid_range {
-	SGI_RANGE = 0,
-	PPI_RANGE = 1,
-	SPI_RANGE = 2,
-	EPPI_RANGE = 3,
-	ESPI_RANGE = 4,
-	LPI_RANGE = 5,
-	__INVALID_RANGE__ = 6,
-};
-
-struct mbi_range {
-	u32 spi_start;
-	u32 nr_spis;
-	long unsigned int *bm;
-};
-
-struct acpi_madt_generic_translator {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 translation_id;
-	u64 base_address;
-	u32 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_gic_its_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u32 its_id;
-} __attribute__((packed));
-
-enum its_vcpu_info_cmd_type {
-	MAP_VLPI = 0,
-	GET_VLPI = 1,
-	PROP_UPDATE_VLPI = 2,
-	PROP_UPDATE_AND_INV_VLPI = 3,
-	SCHEDULE_VPE = 4,
-	DESCHEDULE_VPE = 5,
-	INVALL_VPE = 6,
-	PROP_UPDATE_VSGI = 7,
-};
-
-struct its_cmd_info {
-	enum its_vcpu_info_cmd_type cmd_type;
-	union {
-		struct its_vlpi_map *map;
-		u8 config;
-		bool req_db;
-		struct {
-			bool g0en;
-			bool g1en;
-		};
-		struct {
-			u8 priority;
-			bool group;
-		};
+		u32 slabindex: 14;
+		u32 offset: 12;
+		u32 valid: 1;
+		u32 extra: 5;
 	};
 };
 
-struct its_collection___2 {
-	u64 target_address;
-	u16 col_id;
-};
-
-struct its_baser {
-	void *base;
-	u64 val;
-	u32 order;
-	u32 psz;
-};
-
-struct its_cmd_block;
-
-struct its_device___2;
-
-struct its_node {
-	raw_spinlock_t lock;
-	struct mutex dev_alloc_lock;
-	struct list_head entry;
-	void *base;
-	void *sgir_base;
-	phys_addr_t phys_base;
-	struct its_cmd_block *cmd_base;
-	struct its_cmd_block *cmd_write;
-	struct its_baser tables[8];
-	struct its_collection___2 *collections;
-	struct fwnode_handle *fwnode_handle;
-	u64 (*get_msi_base)(struct its_device___2 *);
-	u64 typer;
-	u64 cbaser_save;
-	u32 ctlr_save;
-	u32 mpidr;
-	struct list_head its_device_list;
-	u64 flags;
-	long unsigned int list_nr;
-	int numa_node;
-	unsigned int msi_domain_flags;
-	u32 pre_its_base;
-	int vlpi_redist_offset;
-};
-
-struct its_cmd_block {
-	union {
-		u64 raw_cmd[4];
-		__le64 raw_cmd_le[4];
-	};
-};
-
-struct event_lpi_map {
-	long unsigned int *lpi_map;
-	u16 *col_map;
-	irq_hw_number_t lpi_base;
-	int nr_lpis;
-	raw_spinlock_t vlpi_lock;
-	struct its_vm *vm;
-	struct its_vlpi_map *vlpi_maps;
-	int nr_vlpis;
-};
-
-struct its_device___2 {
-	struct list_head entry;
-	struct its_node *its;
-	struct event_lpi_map event_map;
-	void *itt;
-	u32 nr_ites;
-	u32 device_id;
-	bool shared;
-};
-
-struct cpu_lpi_count {
-	atomic_t managed;
-	atomic_t unmanaged;
-};
-
-struct its_cmd_desc {
-	union {
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_inv_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_clear_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_int_cmd;
-		struct {
-			struct its_device___2 *dev;
-			int valid;
-		} its_mapd_cmd;
-		struct {
-			struct its_collection___2 *col;
-			int valid;
-		} its_mapc_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 phys_id;
-			u32 event_id;
-		} its_mapti_cmd;
-		struct {
-			struct its_device___2 *dev;
-			struct its_collection___2 *col;
-			u32 event_id;
-		} its_movi_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_discard_cmd;
-		struct {
-			struct its_collection___2 *col;
-		} its_invall_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_vinvall_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			bool valid;
-		} its_vmapp_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 virt_id;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmapti_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmovi_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			u16 seq_num;
-			u16 its_list;
-		} its_vmovp_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_invdb_cmd;
-		struct {
-			struct its_vpe *vpe;
-			u8 sgi;
-			u8 priority;
-			bool enable;
-			bool group;
-			bool clear;
-		} its_vsgi_cmd;
-	};
-};
-
-typedef struct its_collection___2 * (*its_cmd_builder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-typedef struct its_vpe * (*its_cmd_vbuilder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-struct lpi_range {
-	struct list_head entry;
-	u32 base_id;
-	u32 span;
-};
-
-struct its_srat_map {
-	u32 numa_node;
-	u32 its_id;
-};
-
-struct msi_controller {
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct list_head list;
-	int (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);
-	int (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);
-	void (*teardown_irq)(struct msi_controller *, unsigned int);
-};
-
-struct partition_desc___2 {
-	int nr_parts;
-	struct partition_affinity *parts;
-	struct irq_domain *domain;
-	struct irq_desc *chained_desc;
-	long unsigned int *bitmap;
-	struct irq_domain_ops ops;
-};
-
-struct mbigen_device {
-	struct platform_device *pdev;
-	void *base;
-};
-
-struct mtk_sysirq_chip_data {
-	raw_spinlock_t lock;
-	u32 nr_intpol_bases;
-	void **intpol_bases;
-	u32 *intpol_words;
-	u8 *intpol_idx;
-	u16 *which_word;
-};
-
-struct mtk_cirq_chip_data {
-	void *base;
-	unsigned int ext_irq_start;
-	unsigned int ext_irq_end;
-	struct irq_domain *domain;
-};
-
-struct mvebu_gicp_spi_range {
-	unsigned int start;
-	unsigned int count;
-};
-
-struct mvebu_gicp {
-	struct mvebu_gicp_spi_range *spi_ranges;
-	unsigned int spi_ranges_cnt;
-	unsigned int spi_cnt;
-	long unsigned int *spi_bitmap;
-	spinlock_t spi_lock;
-	struct resource *res;
-	struct device *dev;
-};
-
-struct mvebu_icu_subset_data {
-	unsigned int icu_group;
-	unsigned int offset_set_ah;
-	unsigned int offset_set_al;
-	unsigned int offset_clr_ah;
-	unsigned int offset_clr_al;
-};
-
-struct mvebu_icu {
-	void *base;
-	struct device *dev;
-};
-
-struct mvebu_icu_msi_data {
-	struct mvebu_icu *icu;
-	atomic_t initialized;
-	const struct mvebu_icu_subset_data *subset_data;
-};
-
-struct mvebu_icu_irq_data {
-	struct mvebu_icu *icu;
-	unsigned int icu_group;
-	unsigned int type;
-};
-
-struct odmi_data {
-	struct resource res;
-	void *base;
-	unsigned int spi_base;
-};
-
-struct mvebu_pic {
-	void *base;
-	u32 parent_irq;
-	struct irq_domain *domain;
-	struct irq_chip irq_chip;
-};
-
-struct mvebu_sei_interrupt_range {
-	u32 first;
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
 	u32 size;
+	union handle_parts handle;
+	long unsigned int entries[0];
 };
 
-struct mvebu_sei_caps {
-	struct mvebu_sei_interrupt_range ap_range;
-	struct mvebu_sei_interrupt_range cp_range;
-};
+struct liointc_priv;
 
-struct mvebu_sei {
-	struct device *dev;
-	void *base;
-	struct resource *res;
-	struct irq_domain *sei_domain;
-	struct irq_domain *ap_domain;
-	struct irq_domain *cp_domain;
-	const struct mvebu_sei_caps *caps;
-	struct mutex cp_msi_lock;
-	long unsigned int cp_msi_bitmap[1];
-	raw_spinlock_t mask_lock;
+struct liointc_handler_data {
+	struct liointc_priv *priv;
+	u32 parent_int_map;
 };
 
-struct meson_gpio_irq_controller;
-
-struct irq_ctl_ops {
-	void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *, unsigned int, long unsigned int);
-	void (*gpio_irq_init)(struct meson_gpio_irq_controller *);
+struct liointc_priv {
+	struct irq_chip_generic *gc;
+	struct liointc_handler_data handler[4];
+	void *core_isr[4];
+	u8 map_cache[32];
+	u32 int_pol;
+	u32 int_edge;
+	bool has_lpc_irq_errata;
 };
 
-struct meson_gpio_irq_params;
-
-struct meson_gpio_irq_controller {
-	const struct meson_gpio_irq_params *params;
-	void *base;
-	u32 channel_irqs[8];
-	long unsigned int channel_map[1];
-	spinlock_t lock;
-};
-
-struct meson_gpio_irq_params {
-	unsigned int nr_hwirq;
-	bool support_edge_both;
-	unsigned int edge_both_offset;
-	unsigned int edge_single_offset;
-	unsigned int pol_low_offset;
-	unsigned int pin_sel_mask;
-	struct irq_ctl_ops ops;
-};
-
-struct regmap_irq_type {
-	unsigned int type_reg_offset;
-	unsigned int type_reg_mask;
-	unsigned int type_rising_val;
-	unsigned int type_falling_val;
-	unsigned int type_level_low_val;
-	unsigned int type_level_high_val;
-	unsigned int types_supported;
-};
-
-struct regmap_irq {
-	unsigned int reg_offset;
-	unsigned int mask;
-	struct regmap_irq_type type;
-};
-
-struct regmap_irq_sub_irq_map {
-	unsigned int num_regs;
-	unsigned int *offset;
-};
-
-struct regmap_irq_chip {
-	const char *name;
-	unsigned int main_status;
-	unsigned int num_main_status_bits;
-	struct regmap_irq_sub_irq_map *sub_reg_offsets;
-	int num_main_regs;
-	unsigned int status_base;
-	unsigned int mask_base;
-	unsigned int unmask_base;
-	unsigned int ack_base;
-	unsigned int wake_base;
-	unsigned int type_base;
-	unsigned int irq_reg_stride;
-	bool mask_writeonly: 1;
-	bool init_ack_masked: 1;
-	bool mask_invert: 1;
-	bool use_ack: 1;
-	bool ack_invert: 1;
-	bool clear_ack: 1;
-	bool wake_invert: 1;
-	bool runtime_pm: 1;
-	bool type_invert: 1;
-	bool type_in_mask: 1;
-	bool clear_on_unmask: 1;
-	int num_regs;
-	const struct regmap_irq *irqs;
-	int num_irqs;
-	int num_type_reg;
-	unsigned int type_reg_stride;
-	int (*handle_pre_irq)(void *);
-	int (*handle_post_irq)(void *);
-	void *irq_drv_data;
-};
-
-struct gpio_desc;
-
-struct regulator_init_data;
-
-struct arizona_ldo1_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator_state {
-	int uV;
-	int min_uV;
-	int max_uV;
-	unsigned int mode;
-	int enabled;
-	bool changeable;
-};
-
-struct regulation_constraints {
-	const char *name;
-	int min_uV;
-	int max_uV;
-	int uV_offset;
-	int min_uA;
-	int max_uA;
-	int ilim_uA;
-	int system_load;
-	u32 *max_spread;
-	int max_uV_step;
-	unsigned int valid_modes_mask;
-	unsigned int valid_ops_mask;
-	int input_uV;
-	struct regulator_state state_disk;
-	struct regulator_state state_mem;
-	struct regulator_state state_standby;
-	suspend_state_t initial_state;
-	unsigned int initial_mode;
-	unsigned int ramp_delay;
-	unsigned int settling_time;
-	unsigned int settling_time_up;
-	unsigned int settling_time_down;
-	unsigned int enable_time;
-	unsigned int active_discharge;
-	unsigned int always_on: 1;
-	unsigned int boot_on: 1;
-	unsigned int apply_uV: 1;
-	unsigned int ramp_disable: 1;
-	unsigned int soft_start: 1;
-	unsigned int pull_down: 1;
-	unsigned int over_current_protection: 1;
-};
-
-struct regulator_consumer_supply;
-
-struct regulator_init_data {
-	const char *supply_regulator;
-	struct regulation_constraints constraints;
-	int num_consumer_supplies;
-	struct regulator_consumer_supply *consumer_supplies;
-	int (*regulator_init)(void *);
-	void *driver_data;
-};
-
-struct arizona_micsupp_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator;
-
-struct regulator_bulk_data {
-	const char *supply;
-	struct regulator *consumer;
-	int ret;
-};
-
-struct regulator_consumer_supply {
-	const char *dev_name;
-	const char *supply;
-};
-
-struct madera_codec_pdata {
-	u32 max_channels_clocked[4];
-	u32 dmic_ref[6];
-	u32 inmode[24];
-	bool out_mono[6];
-	u32 pdm_fmt[2];
-	u32 pdm_mute[2];
-};
-
-struct pinctrl_map;
-
-struct madera_pdata {
-	struct gpio_desc *reset;
-	struct arizona_ldo1_pdata ldo1;
-	struct arizona_micsupp_pdata micvdd;
-	unsigned int irq_flags;
-	int gpio_base;
-	const struct pinctrl_map *gpio_configs;
-	int n_gpio_configs;
-	u32 gpsw[2];
-	struct madera_codec_pdata codec;
-};
-
-enum pinctrl_map_type {
-	PIN_MAP_TYPE_INVALID = 0,
-	PIN_MAP_TYPE_DUMMY_STATE = 1,
-	PIN_MAP_TYPE_MUX_GROUP = 2,
-	PIN_MAP_TYPE_CONFIGS_PIN = 3,
-	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
-};
-
-struct pinctrl_map_mux {
-	const char *group;
-	const char *function;
-};
-
-struct pinctrl_map_configs {
-	const char *group_or_pin;
-	long unsigned int *configs;
-	unsigned int num_configs;
-};
-
-struct pinctrl_map {
-	const char *dev_name;
-	const char *name;
-	enum pinctrl_map_type type;
-	const char *ctrl_dev_name;
-	union {
-		struct pinctrl_map_mux mux;
-		struct pinctrl_map_configs configs;
-	} data;
-};
-
-enum madera_type {
-	CS47L35 = 1,
-	CS47L85 = 2,
-	CS47L90 = 3,
-	CS47L91 = 4,
-	CS47L92 = 5,
-	CS47L93 = 6,
-	WM1840 = 7,
-	CS47L15 = 8,
-	CS42L92 = 9,
-};
-
-enum {
-	MADERA_MCLK1 = 0,
-	MADERA_MCLK2 = 1,
-	MADERA_MCLK3 = 2,
-	MADERA_NUM_MCLK = 3,
-};
-
-struct regmap;
-
-struct regmap_irq_chip_data;
-
-struct snd_soc_dapm_context;
-
-struct madera {
-	struct regmap *regmap;
-	struct regmap *regmap_32bit;
-	struct device *dev;
-	enum madera_type type;
-	unsigned int rev;
-	const char *type_name;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool internal_dcvdd;
-	struct madera_pdata pdata;
-	struct device *irq_dev;
-	struct regmap_irq_chip_data *irq_data;
-	int irq;
-	struct clk_bulk_data mclk[3];
-	unsigned int num_micbias;
-	unsigned int num_childbias[4];
-	struct snd_soc_dapm_context *dapm;
-	struct mutex dapm_ptr_lock;
-	unsigned int hp_ena;
-	bool out_clamp[3];
-	bool out_shorted[3];
-	struct blocking_notifier_head notifier;
-};
-
-struct mst_intc_chip_data {
-	raw_spinlock_t lock;
-	unsigned int irq_start;
-	unsigned int nr_irqs;
-	void *base;
-	bool no_eoi;
-};
-
-struct of_dev_auxdata {
-	char *compatible;
-	resource_size_t phys_addr;
-	char *name;
-	void *platform_data;
-};
-
-struct circ_buf {
-	char *buf;
-	int head;
-	int tail;
-};
-
-struct serial_rs485 {
-	__u32 flags;
-	__u32 delay_rts_before_send;
-	__u32 delay_rts_after_send;
-	__u32 padding[5];
-};
-
-struct serial_iso7816 {
-	__u32 flags;
-	__u32 tg;
-	__u32 sc_fi;
-	__u32 sc_di;
-	__u32 clk;
-	__u32 reserved[5];
-};
-
-struct uart_port;
-
-struct uart_ops {
-	unsigned int (*tx_empty)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*stop_tx)(struct uart_port *);
-	void (*start_tx)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	void (*send_xchar)(struct uart_port *, char);
-	void (*stop_rx)(struct uart_port *);
-	void (*enable_ms)(struct uart_port *);
-	void (*break_ctl)(struct uart_port *, int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*flush_buffer)(struct uart_port *);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	const char * (*type)(struct uart_port *);
-	void (*release_port)(struct uart_port *);
-	int (*request_port)(struct uart_port *);
-	void (*config_port)(struct uart_port *, int);
-	int (*verify_port)(struct uart_port *, struct serial_struct *);
-	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
-	int (*poll_init)(struct uart_port *);
-	void (*poll_put_char)(struct uart_port *, unsigned char);
-	int (*poll_get_char)(struct uart_port *);
-};
-
-struct uart_icount {
-	__u32 cts;
-	__u32 dsr;
-	__u32 rng;
-	__u32 dcd;
-	__u32 rx;
-	__u32 tx;
-	__u32 frame;
-	__u32 overrun;
-	__u32 parity;
-	__u32 brk;
-	__u32 buf_overrun;
-};
-
-typedef unsigned int upf_t;
-
-typedef unsigned int upstat_t;
-
-struct uart_state;
-
-struct uart_port {
-	spinlock_t lock;
-	long unsigned int iobase;
-	unsigned char *membase;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
-	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	unsigned int fifosize;
-	unsigned char x_char;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char quirks;
-	unsigned int read_status_mask;
-	unsigned int ignore_status_mask;
-	struct uart_state *state;
-	struct uart_icount icount;
-	struct console *cons;
-	upf_t flags;
-	upstat_t status;
-	int hw_stopped;
-	unsigned int mctrl;
-	unsigned int timeout;
-	unsigned int type;
-	const struct uart_ops *ops;
-	unsigned int custom_divisor;
-	unsigned int line;
-	unsigned int minor;
-	resource_size_t mapbase;
-	resource_size_t mapsize;
-	struct device *dev;
-	long unsigned int sysrq;
-	unsigned int sysrq_ch;
-	unsigned char has_sysrq;
-	unsigned char sysrq_seq;
-	unsigned char hub6;
-	unsigned char suspended;
-	unsigned char console_reinit;
-	const char *name;
-	struct attribute_group *attr_group;
-	const struct attribute_group **tty_groups;
-	struct serial_rs485 rs485;
-	struct gpio_desc *rs485_term_gpio;
-	struct serial_iso7816 iso7816;
-	void *private_data;
-};
-
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3,
-	UART_PM_STATE_UNDEFINED = 4,
-};
-
-struct uart_state {
-	struct tty_port port;
-	enum uart_pm_state pm_state;
-	struct circ_buf xmit;
-	atomic_t refcount;
-	wait_queue_head_t remove_wait;
-	struct uart_port *uart_port;
-};
-
-struct plat_serial8250_port {
-	long unsigned int iobase;
-	void *membase;
-	resource_size_t mapbase;
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	void *private_data;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char hub6;
-	unsigned char has_sysrq;
-	upf_t flags;
-	unsigned int type;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-};
-
-struct lpc_cycle_para {
-	unsigned int opflags;
-	unsigned int csize;
-};
-
-struct hisi_lpc_dev {
-	spinlock_t cycle_lock;
-	void *membase;
-	struct logic_pio_hwaddr *io_host;
-};
-
-struct hisi_lpc_acpi_cell {
-	const char *hid;
-	const char *name;
-	void *pdata;
-	size_t pdata_size;
-};
-
-enum regcache_type {
-	REGCACHE_NONE = 0,
-	REGCACHE_RBTREE = 1,
-	REGCACHE_COMPRESSED = 2,
-	REGCACHE_FLAT = 3,
-};
-
-struct reg_default {
-	unsigned int reg;
-	unsigned int def;
-};
-
-enum regmap_endian {
-	REGMAP_ENDIAN_DEFAULT = 0,
-	REGMAP_ENDIAN_BIG = 1,
-	REGMAP_ENDIAN_LITTLE = 2,
-	REGMAP_ENDIAN_NATIVE = 3,
-};
-
-struct regmap_range {
-	unsigned int range_min;
-	unsigned int range_max;
-};
-
-struct regmap_access_table {
-	const struct regmap_range *yes_ranges;
-	unsigned int n_yes_ranges;
-	const struct regmap_range *no_ranges;
-	unsigned int n_no_ranges;
-};
-
-typedef void (*regmap_lock)(void *);
-
-typedef void (*regmap_unlock)(void *);
-
-struct regmap_range_cfg;
-
-struct regmap_config {
-	const char *name;
-	int reg_bits;
-	int reg_stride;
-	int pad_bits;
-	int val_bits;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	bool disable_locking;
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	bool fast_io;
-	unsigned int max_register;
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	const struct reg_default *reg_defaults;
-	unsigned int num_reg_defaults;
-	enum regcache_type cache_type;
-	const void *reg_defaults_raw;
-	unsigned int num_reg_defaults_raw;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	bool zero_flag_mask;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	enum regmap_endian reg_format_endian;
-	enum regmap_endian val_format_endian;
-	const struct regmap_range_cfg *ranges;
-	unsigned int num_ranges;
-	bool use_hwlock;
-	unsigned int hwlock_id;
-	unsigned int hwlock_mode;
-	bool can_sleep;
-};
-
-struct regmap_range_cfg {
-	const char *name;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct vexpress_syscfg {
-	struct device *dev;
-	void *base;
-	struct list_head funcs;
-};
-
-struct vexpress_syscfg_func {
-	struct list_head list;
-	struct vexpress_syscfg *syscfg;
-	struct regmap *regmap;
-	int num_templates;
-	u32 template[0];
-};
-
-struct vexpress_config_bridge_ops {
-	struct regmap * (*regmap_init)(struct device *, void *);
-	void (*regmap_exit)(struct regmap *, void *);
-};
-
-struct vexpress_config_bridge {
-	struct vexpress_config_bridge_ops *ops;
-	void *context;
-};
-
-enum device_link_state {
-	DL_STATE_NONE = 4294967295,
-	DL_STATE_DORMANT = 0,
-	DL_STATE_AVAILABLE = 1,
-	DL_STATE_CONSUMER_PROBE = 2,
-	DL_STATE_ACTIVE = 3,
-	DL_STATE_SUPPLIER_UNBIND = 4,
-};
-
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	struct device link_dev;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-	struct callback_head callback_head;
-	bool supplier_preactivated;
-};
-
-struct phy_configure_opts_dp {
-	unsigned int link_rate;
-	unsigned int lanes;
-	unsigned int voltage[4];
-	unsigned int pre[4];
-	u8 ssc: 1;
-	u8 set_rate: 1;
-	u8 set_lanes: 1;
-	u8 set_voltages: 1;
-};
-
-struct phy_configure_opts_mipi_dphy {
-	unsigned int clk_miss;
-	unsigned int clk_post;
-	unsigned int clk_pre;
-	unsigned int clk_prepare;
-	unsigned int clk_settle;
-	unsigned int clk_term_en;
-	unsigned int clk_trail;
-	unsigned int clk_zero;
-	unsigned int d_term_en;
-	unsigned int eot;
-	unsigned int hs_exit;
-	unsigned int hs_prepare;
-	unsigned int hs_settle;
-	unsigned int hs_skip;
-	unsigned int hs_trail;
-	unsigned int hs_zero;
-	unsigned int init;
-	unsigned int lpx;
-	unsigned int ta_get;
-	unsigned int ta_go;
-	unsigned int ta_sure;
-	unsigned int wakeup;
-	long unsigned int hs_clk_rate;
-	long unsigned int lp_clk_rate;
-	unsigned char lanes;
-};
-
-enum phy_mode {
-	PHY_MODE_INVALID = 0,
-	PHY_MODE_USB_HOST = 1,
-	PHY_MODE_USB_HOST_LS = 2,
-	PHY_MODE_USB_HOST_FS = 3,
-	PHY_MODE_USB_HOST_HS = 4,
-	PHY_MODE_USB_HOST_SS = 5,
-	PHY_MODE_USB_DEVICE = 6,
-	PHY_MODE_USB_DEVICE_LS = 7,
-	PHY_MODE_USB_DEVICE_FS = 8,
-	PHY_MODE_USB_DEVICE_HS = 9,
-	PHY_MODE_USB_DEVICE_SS = 10,
-	PHY_MODE_USB_OTG = 11,
-	PHY_MODE_UFS_HS_A = 12,
-	PHY_MODE_UFS_HS_B = 13,
-	PHY_MODE_PCIE = 14,
-	PHY_MODE_ETHERNET = 15,
-	PHY_MODE_MIPI_DPHY = 16,
-	PHY_MODE_SATA = 17,
-	PHY_MODE_LVDS = 18,
-	PHY_MODE_DP = 19,
-};
-
-union phy_configure_opts {
-	struct phy_configure_opts_mipi_dphy mipi_dphy;
-	struct phy_configure_opts_dp dp;
-};
-
-struct phy;
-
-struct phy_ops {
-	int (*init)(struct phy *);
-	int (*exit)(struct phy *);
-	int (*power_on)(struct phy *);
-	int (*power_off)(struct phy *);
-	int (*set_mode)(struct phy *, enum phy_mode, int);
-	int (*configure)(struct phy *, union phy_configure_opts *);
-	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
-	int (*reset)(struct phy *);
-	int (*calibrate)(struct phy *);
-	void (*release)(struct phy *);
-	struct module *owner;
-};
-
-struct phy_attrs {
-	u32 bus_width;
-	u32 max_link_rate;
-	enum phy_mode mode;
-};
-
-struct phy {
-	struct device dev;
-	int id;
-	const struct phy_ops *ops;
-	struct mutex mutex;
-	int init_count;
-	int power_count;
-	struct phy_attrs attrs;
-	struct regulator *pwr;
-};
-
-struct phy_provider {
-	struct device *dev;
-	struct device_node *children;
-	struct module *owner;
-	struct list_head list;
-	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
-};
-
-struct phy_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct phy *phy;
-};
-
-enum usb_dr_mode {
-	USB_DR_MODE_UNKNOWN = 0,
-	USB_DR_MODE_HOST = 1,
-	USB_DR_MODE_PERIPHERAL = 2,
-	USB_DR_MODE_OTG = 3,
-};
-
-struct phy_meson8b_usb2_match_data {
-	bool host_enable_aca;
-};
-
-struct reset_control;
-
-struct phy_meson8b_usb2_priv {
-	struct regmap *regmap;
-	enum usb_dr_mode dr_mode;
-	struct clk *clk_usb_general;
-	struct clk *clk_usb;
-	struct reset_control *reset;
-	const struct phy_meson8b_usb2_match_data *match;
-};
-
-struct phy_meson_gxl_usb2_priv {
-	struct regmap *regmap;
-	enum phy_mode mode;
-	int is_enabled;
-	struct clk *clk;
-	struct reset_control *reset;
-};
-
-enum meson_soc_id {
-	MESON_SOC_G12A = 0,
-	MESON_SOC_A1 = 1,
-};
-
-struct phy_meson_g12a_usb2_priv {
-	struct device *dev;
-	struct regmap *regmap;
-	struct clk *clk;
-	struct reset_control *reset;
-	int soc_id;
-};
-
-struct phy_g12a_usb3_pcie_priv {
-	struct regmap *regmap;
-	struct regmap *regmap_cr;
-	struct clk *clk_ref;
-	struct reset_control *reset;
-	struct phy *phy;
-	unsigned int mode;
-};
-
-struct phy_axg_pcie_priv {
-	struct phy *phy;
-	struct phy *analog;
-	struct regmap *regmap;
-	struct reset_control *reset;
-};
-
-struct phy_axg_mipi_pcie_analog_priv {
-	struct phy *phy;
-	unsigned int mode;
-	struct regmap *regmap;
-};
-
-enum ethtool_link_mode_bit_indices {
-	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
-	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
-	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
-	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
-	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
-	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
-	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
-	ETHTOOL_LINK_MODE_TP_BIT = 7,
-	ETHTOOL_LINK_MODE_AUI_BIT = 8,
-	ETHTOOL_LINK_MODE_MII_BIT = 9,
-	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
-	ETHTOOL_LINK_MODE_BNC_BIT = 11,
-	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
-	ETHTOOL_LINK_MODE_Pause_BIT = 13,
-	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
-	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
-	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
-	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
-	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
-	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
-	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
-	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
-	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
-	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
-	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
-	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
-	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
-	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
-	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
-	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
-	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
-	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
-	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
-	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
-	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
-	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
-	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
-	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
-	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
-	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
-	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
-	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
-	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
-	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
-	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
-	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
-	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
-	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
-	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
-	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
-	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
-	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
-	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
-	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
-	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
-	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
-	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
-	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
-	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
-	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
-	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
-	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
-	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
-	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
-	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
-	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
-	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
-	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
-	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
-	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
-	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
-	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
-	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
-	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
-	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
-	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
-	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
-	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
-	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
-	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
-	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
-	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
-	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
-	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
-	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
-	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
-	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
-	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
-	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
-	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
-	__ETHTOOL_LINK_MODE_MASK_NBITS = 92,
-};
-
-struct mvebu_a3700_comphy_conf {
-	unsigned int lane;
-	enum phy_mode mode;
-	int submode;
-	unsigned int port;
-	u32 fw_mode;
-};
-
-struct mvebu_a3700_comphy_lane {
-	struct device *dev;
-	unsigned int id;
-	enum phy_mode mode;
-	int submode;
-	int port;
-};
-
-struct mvebu_a3700_utmi_caps {
-	int usb32;
-	const struct phy_ops *ops;
-};
-
-struct mvebu_a3700_utmi {
-	void *regs;
-	struct regmap *usb_misc;
-	const struct mvebu_a3700_utmi_caps *caps;
-	struct phy *phy;
-};
-
-struct exynos_dp_video_phy_drvdata {
-	u32 phy_ctrl_offset;
-};
-
-struct exynos_dp_video_phy {
-	struct regmap *regs;
-	const struct exynos_dp_video_phy_drvdata *drvdata;
-};
-
-enum exynos_mipi_phy_id {
-	EXYNOS_MIPI_PHY_ID_NONE = 4294967295,
-	EXYNOS_MIPI_PHY_ID_CSIS0 = 0,
-	EXYNOS_MIPI_PHY_ID_DSIM0 = 1,
-	EXYNOS_MIPI_PHY_ID_CSIS1 = 2,
-	EXYNOS_MIPI_PHY_ID_DSIM1 = 3,
-	EXYNOS_MIPI_PHY_ID_CSIS2 = 4,
-	EXYNOS_MIPI_PHYS_NUM = 5,
-};
-
-enum exynos_mipi_phy_regmap_id {
-	EXYNOS_MIPI_REGMAP_PMU = 0,
-	EXYNOS_MIPI_REGMAP_DISP = 1,
-	EXYNOS_MIPI_REGMAP_CAM0 = 2,
-	EXYNOS_MIPI_REGMAP_CAM1 = 3,
-	EXYNOS_MIPI_REGMAPS_NUM = 4,
-};
-
-struct exynos_mipi_phy_desc {
-	enum exynos_mipi_phy_id coupled_phy_id;
-	u32 enable_val;
-	unsigned int enable_reg;
-	enum exynos_mipi_phy_regmap_id enable_map;
-	u32 resetn_val;
-	unsigned int resetn_reg;
-	enum exynos_mipi_phy_regmap_id resetn_map;
-};
-
-struct mipi_phy_device_desc {
-	int num_phys;
-	int num_regmaps;
-	const char *regmap_names[4];
-	struct exynos_mipi_phy_desc phys[5];
-};
-
-struct video_phy_desc {
-	struct phy *phy;
-	unsigned int index;
-	const struct exynos_mipi_phy_desc *data;
-};
-
-struct exynos_mipi_video_phy {
-	struct regmap *regmaps[4];
-	int num_phys;
-	struct video_phy_desc phys[5];
-	spinlock_t slock;
-};
-
-struct pinctrl;
-
-struct pinctrl_state;
-
-struct dev_pin_info {
-	struct pinctrl *p;
-	struct pinctrl_state *default_state;
-	struct pinctrl_state *init_state;
-	struct pinctrl_state *sleep_state;
-	struct pinctrl_state *idle_state;
-};
-
-struct pinctrl {
-	struct list_head node;
-	struct device *dev;
-	struct list_head states;
-	struct pinctrl_state *state;
-	struct list_head dt_maps;
-	struct kref users;
-};
-
-struct pinctrl_state {
-	struct list_head node;
-	const char *name;
-	struct list_head settings;
-};
-
-struct pinctrl_pin_desc {
-	unsigned int number;
-	const char *name;
-	void *drv_data;
-};
-
-struct gpio_chip;
-
-struct pinctrl_gpio_range {
-	struct list_head node;
-	const char *name;
-	unsigned int id;
-	unsigned int base;
-	unsigned int pin_base;
-	const unsigned int *pins;
-	unsigned int npins;
-	struct gpio_chip *gc;
-};
-
-struct gpio_irq_chip {
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	const struct irq_domain_ops *domain_ops;
-	struct fwnode_handle *fwnode;
-	struct irq_domain *parent_domain;
-	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
-	void * (*populate_parent_alloc_arg)(struct gpio_chip *, unsigned int, unsigned int);
-	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
-	struct irq_domain_ops child_irq_domain_ops;
-	irq_flow_handler_t handler;
-	unsigned int default_type;
-	struct lock_class_key *lock_key;
-	struct lock_class_key *request_key;
-	irq_flow_handler_t parent_handler;
-	void *parent_handler_data;
-	unsigned int num_parents;
-	unsigned int *parents;
-	unsigned int *map;
-	bool threaded;
-	int (*init_hw)(struct gpio_chip *);
-	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
-	long unsigned int *valid_mask;
-	unsigned int first;
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-};
-
-struct gpio_device;
-
-struct gpio_chip {
-	const char *label;
-	struct gpio_device *gpiodev;
-	struct device *parent;
-	struct module *owner;
-	int (*request)(struct gpio_chip *, unsigned int);
-	void (*free)(struct gpio_chip *, unsigned int);
-	int (*get_direction)(struct gpio_chip *, unsigned int);
-	int (*direction_input)(struct gpio_chip *, unsigned int);
-	int (*direction_output)(struct gpio_chip *, unsigned int, int);
-	int (*get)(struct gpio_chip *, unsigned int);
-	int (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
-	void (*set)(struct gpio_chip *, unsigned int, int);
-	void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
-	int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
-	int (*to_irq)(struct gpio_chip *, unsigned int);
-	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
-	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
-	int (*add_pin_ranges)(struct gpio_chip *);
-	int base;
-	u16 ngpio;
-	const char * const *names;
-	bool can_sleep;
-	long unsigned int (*read_reg)(void *);
-	void (*write_reg)(void *, long unsigned int);
-	bool be_bits;
-	void *reg_dat;
-	void *reg_set;
-	void *reg_clr;
-	void *reg_dir_out;
-	void *reg_dir_in;
-	bool bgpio_dir_unreadable;
-	int bgpio_bits;
-	spinlock_t bgpio_lock;
-	long unsigned int bgpio_data;
-	long unsigned int bgpio_dir;
-	struct gpio_irq_chip irq;
-	long unsigned int *valid_mask;
-	struct device_node *of_node;
-	unsigned int of_gpio_n_cells;
-	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
-};
-
-struct pinctrl_dev;
-
-struct pinctrl_ops {
-	int (*get_groups_count)(struct pinctrl_dev *);
-	const char * (*get_group_name)(struct pinctrl_dev *, unsigned int);
-	int (*get_group_pins)(struct pinctrl_dev *, unsigned int, const unsigned int **, unsigned int *);
-	void (*pin_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	int (*dt_node_to_map)(struct pinctrl_dev *, struct device_node *, struct pinctrl_map **, unsigned int *);
-	void (*dt_free_map)(struct pinctrl_dev *, struct pinctrl_map *, unsigned int);
-};
-
-struct pinctrl_desc;
-
-struct pinctrl_dev {
-	struct list_head node;
-	struct pinctrl_desc *desc;
-	struct xarray pin_desc_tree;
-	struct xarray pin_group_tree;
-	unsigned int num_groups;
-	struct xarray pin_function_tree;
-	unsigned int num_functions;
-	struct list_head gpio_ranges;
-	struct device *dev;
-	struct module *owner;
-	void *driver_data;
-	struct pinctrl *p;
-	struct pinctrl_state *hog_default;
-	struct pinctrl_state *hog_sleep;
-	struct mutex mutex;
-	struct dentry *device_root;
-};
-
-struct pinmux_ops;
-
-struct pinconf_ops;
-
-struct pinconf_generic_params;
-
-struct pin_config_item;
-
-struct pinctrl_desc {
-	const char *name;
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	const struct pinctrl_ops *pctlops;
-	const struct pinmux_ops *pmxops;
-	const struct pinconf_ops *confops;
-	struct module *owner;
-	unsigned int num_custom_params;
-	const struct pinconf_generic_params *custom_params;
-	const struct pin_config_item *custom_conf_items;
-	bool link_consumers;
-};
-
-struct pinmux_ops {
-	int (*request)(struct pinctrl_dev *, unsigned int);
-	int (*free)(struct pinctrl_dev *, unsigned int);
-	int (*get_functions_count)(struct pinctrl_dev *);
-	const char * (*get_function_name)(struct pinctrl_dev *, unsigned int);
-	int (*get_function_groups)(struct pinctrl_dev *, unsigned int, const char * const **, unsigned int *);
-	int (*set_mux)(struct pinctrl_dev *, unsigned int, unsigned int);
-	int (*gpio_request_enable)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
-	void (*gpio_disable_free)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
-	int (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);
-	bool strict;
-};
-
-struct pinconf_ops {
-	bool is_generic;
-	int (*pin_config_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
-	int (*pin_config_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
-	int (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);
-	int (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);
-	void (*pin_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	void (*pin_config_group_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
-	void (*pin_config_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, long unsigned int);
-};
-
-enum pin_config_param {
-	PIN_CONFIG_BIAS_BUS_HOLD = 0,
-	PIN_CONFIG_BIAS_DISABLE = 1,
-	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
-	PIN_CONFIG_BIAS_PULL_DOWN = 3,
-	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
-	PIN_CONFIG_BIAS_PULL_UP = 5,
-	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
-	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
-	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
-	PIN_CONFIG_DRIVE_STRENGTH = 9,
-	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
-	PIN_CONFIG_INPUT_DEBOUNCE = 11,
-	PIN_CONFIG_INPUT_ENABLE = 12,
-	PIN_CONFIG_INPUT_SCHMITT = 13,
-	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
-	PIN_CONFIG_LOW_POWER_MODE = 15,
-	PIN_CONFIG_OUTPUT_ENABLE = 16,
-	PIN_CONFIG_OUTPUT = 17,
-	PIN_CONFIG_POWER_SOURCE = 18,
-	PIN_CONFIG_SLEEP_HARDWARE_STATE = 19,
-	PIN_CONFIG_SLEW_RATE = 20,
-	PIN_CONFIG_SKEW_DELAY = 21,
-	PIN_CONFIG_PERSIST_STATE = 22,
-	PIN_CONFIG_END = 127,
-	PIN_CONFIG_MAX = 255,
-};
-
-struct pinconf_generic_params {
-	const char * const property;
-	enum pin_config_param param;
-	u32 default_value;
-};
-
-struct pin_config_item {
-	const enum pin_config_param param;
-	const char * const display;
-	const char * const format;
-	bool has_arg;
-};
-
-struct gpio_desc___2;
-
-struct gpio_device {
-	int id;
-	struct device dev;
-	struct cdev chrdev;
-	struct device *mockdev;
-	struct module *owner;
-	struct gpio_chip *chip;
-	struct gpio_desc___2 *descs;
-	int base;
-	u16 ngpio;
-	const char *label;
-	void *data;
-	struct list_head list;
-	struct blocking_notifier_head notifier;
-	struct list_head pin_ranges;
-};
-
-struct gpio_desc___2 {
-	struct gpio_device *gdev;
-	long unsigned int flags;
-	const char *label;
-	const char *name;
-	struct device_node *hog;
-	unsigned int debounce_period_us;
-};
-
-struct pinctrl_setting_mux {
-	unsigned int group;
-	unsigned int func;
-};
-
-struct pinctrl_setting_configs {
-	unsigned int group_or_pin;
-	long unsigned int *configs;
-	unsigned int num_configs;
-};
-
-struct pinctrl_setting {
-	struct list_head node;
-	enum pinctrl_map_type type;
-	struct pinctrl_dev *pctldev;
-	const char *dev_name;
-	union {
-		struct pinctrl_setting_mux mux;
-		struct pinctrl_setting_configs configs;
-	} data;
-};
-
-struct pin_desc {
-	struct pinctrl_dev *pctldev;
-	const char *name;
-	bool dynamic_name;
-	void *drv_data;
-	unsigned int mux_usecount;
-	const char *mux_owner;
-	const struct pinctrl_setting_mux *mux_setting;
-	const char *gpio_owner;
-};
-
-struct pinctrl_maps {
-	struct list_head node;
-	const struct pinctrl_map *maps;
-	unsigned int num_maps;
-};
-
-struct group_desc {
-	const char *name;
-	int *pins;
-	int num_pins;
-	void *data;
-};
-
-struct pctldev;
-
-struct function_desc {
-	const char *name;
-	const char **group_names;
-	int num_group_names;
-	void *data;
-};
-
-struct pinctrl_dt_map {
-	struct list_head node;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_map *map;
-	unsigned int num_maps;
-};
-
-struct amd_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int npins;
-};
-
-struct amd_gpio {
-	raw_spinlock_t lock;
-	void *base;
-	const struct amd_pingroup *groups;
-	u32 ngroups;
-	struct pinctrl_dev *pctrl;
-	struct gpio_chip gc;
-	unsigned int hwbank_num;
-	struct resource *res;
-	struct platform_device *pdev;
-	u32 *saved_regs;
-};
-
-struct meson_pmx_group {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int num_pins;
-	const void *data;
-};
-
-struct meson_pmx_func {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct meson_reg_desc {
-	unsigned int reg;
-	unsigned int bit;
-};
-
-enum meson_reg_type {
-	REG_PULLEN = 0,
-	REG_PULL = 1,
-	REG_DIR = 2,
-	REG_OUT = 3,
-	REG_IN = 4,
-	REG_DS = 5,
-	NUM_REG = 6,
-};
-
-enum meson_pinconf_drv {
-	MESON_PINCONF_DRV_500UA = 0,
-	MESON_PINCONF_DRV_2500UA = 1,
-	MESON_PINCONF_DRV_3000UA = 2,
-	MESON_PINCONF_DRV_4000UA = 3,
-};
-
-struct meson_bank {
-	const char *name;
-	unsigned int first;
-	unsigned int last;
-	int irq_first;
-	int irq_last;
-	struct meson_reg_desc regs[6];
-};
-
-struct meson_pinctrl;
-
-struct meson_pinctrl_data {
-	const char *name;
-	const struct pinctrl_pin_desc *pins;
-	struct meson_pmx_group *groups;
-	struct meson_pmx_func *funcs;
-	unsigned int num_pins;
-	unsigned int num_groups;
-	unsigned int num_funcs;
-	struct meson_bank *banks;
-	unsigned int num_banks;
-	const struct pinmux_ops *pmx_ops;
-	void *pmx_data;
-	int (*parse_dt)(struct meson_pinctrl *);
-};
-
-struct meson_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pcdev;
-	struct pinctrl_desc desc;
-	struct meson_pinctrl_data *data;
-	struct regmap *reg_mux;
-	struct regmap *reg_pullen;
-	struct regmap *reg_pull;
-	struct regmap *reg_gpio;
-	struct regmap *reg_ds;
-	struct gpio_chip chip;
-	struct device_node *of_node;
-};
-
-struct meson8_pmx_data {
-	bool is_gpio;
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct meson_pmx_bank {
-	const char *name;
-	unsigned int first;
-	unsigned int last;
-	unsigned int reg;
-	unsigned int offset;
-};
-
-struct meson_axg_pmx_data {
-	struct meson_pmx_bank *pmx_banks;
-	unsigned int num_pmx_banks;
-};
-
-struct meson_pmx_axg_data {
-	unsigned int func;
-};
-
-enum rockchip_pinctrl_type {
-	PX30 = 0,
-	RV1108 = 1,
-	RK2928 = 2,
-	RK3066B = 3,
-	RK3128 = 4,
-	RK3188 = 5,
-	RK3288 = 6,
-	RK3308 = 7,
-	RK3368 = 8,
-	RK3399 = 9,
-};
-
-struct rockchip_iomux {
-	int type;
-	int offset;
-};
-
-enum rockchip_pin_drv_type {
-	DRV_TYPE_IO_DEFAULT = 0,
-	DRV_TYPE_IO_1V8_OR_3V0 = 1,
-	DRV_TYPE_IO_1V8_ONLY = 2,
-	DRV_TYPE_IO_1V8_3V0_AUTO = 3,
-	DRV_TYPE_IO_3V3_ONLY = 4,
-	DRV_TYPE_MAX = 5,
-};
-
-enum rockchip_pin_pull_type {
-	PULL_TYPE_IO_DEFAULT = 0,
-	PULL_TYPE_IO_1V8_ONLY = 1,
-	PULL_TYPE_MAX = 2,
-};
-
-struct rockchip_drv {
-	enum rockchip_pin_drv_type drv_type;
-	int offset;
-};
-
-struct rockchip_pinctrl;
-
-struct rockchip_pin_bank {
-	void *reg_base;
-	struct regmap *regmap_pull;
-	struct clk *clk;
-	int irq;
-	u32 saved_masks;
-	u32 pin_base;
-	u8 nr_pins;
-	char *name;
-	u8 bank_num;
-	struct rockchip_iomux iomux[4];
-	struct rockchip_drv drv[4];
-	enum rockchip_pin_pull_type pull_type[4];
-	bool valid;
-	struct device_node *of_node;
-	struct rockchip_pinctrl *drvdata;
-	struct irq_domain *domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	raw_spinlock_t slock;
-	u32 toggle_edge_mode;
-	u32 recalced_mask;
-	u32 route_mask;
-};
-
-struct rockchip_pin_ctrl;
-
-struct rockchip_pin_group;
-
-struct rockchip_pmx_func;
-
-struct rockchip_pinctrl {
-	struct regmap *regmap_base;
-	int reg_size;
-	struct regmap *regmap_pull;
-	struct regmap *regmap_pmu;
-	struct device *dev;
-	struct rockchip_pin_ctrl *ctrl;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct rockchip_pin_group *groups;
-	unsigned int ngroups;
-	struct rockchip_pmx_func *functions;
-	unsigned int nfunctions;
-};
-
-struct rockchip_mux_recalced_data {
-	u8 num;
-	u8 pin;
-	u32 reg;
-	u8 bit;
-	u8 mask;
-};
-
-enum rockchip_mux_route_location {
-	ROCKCHIP_ROUTE_SAME = 0,
-	ROCKCHIP_ROUTE_PMU = 1,
-	ROCKCHIP_ROUTE_GRF = 2,
-};
-
-struct rockchip_mux_route_data {
-	u8 bank_num;
-	u8 pin;
-	u8 func;
-	enum rockchip_mux_route_location route_location;
-	u32 route_offset;
-	u32 route_val;
-};
-
-struct rockchip_pin_ctrl {
-	struct rockchip_pin_bank *pin_banks;
-	u32 nr_banks;
-	u32 nr_pins;
-	char *label;
-	enum rockchip_pinctrl_type type;
-	int grf_mux_offset;
-	int pmu_mux_offset;
-	int grf_drv_offset;
-	int pmu_drv_offset;
-	struct rockchip_mux_recalced_data *iomux_recalced;
-	u32 niomux_recalced;
-	struct rockchip_mux_route_data *iomux_routes;
-	u32 niomux_routes;
-	void (*pull_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	void (*drv_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	int (*schmitt_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-};
-
-struct rockchip_pin_config {
-	unsigned int func;
-	long unsigned int *configs;
-	unsigned int nconfigs;
-};
-
-struct rockchip_pin_group {
-	const char *name;
-	unsigned int npins;
-	unsigned int *pins;
-	struct rockchip_pin_config *data;
-};
-
-struct rockchip_pmx_func {
-	const char *name;
-	const char **groups;
-	u8 ngroups;
-};
-
-struct pcs_pdata {
-	int irq;
-	void (*rearm)();
-};
-
-struct pcs_func_vals {
-	void *reg;
-	unsigned int val;
-	unsigned int mask;
-};
-
-struct pcs_conf_vals {
-	enum pin_config_param param;
-	unsigned int val;
-	unsigned int enable;
-	unsigned int disable;
-	unsigned int mask;
-};
-
-struct pcs_conf_type {
-	const char *name;
-	enum pin_config_param param;
-};
-
-struct pcs_function {
-	const char *name;
-	struct pcs_func_vals *vals;
-	unsigned int nvals;
-	const char **pgnames;
-	int npgnames;
-	struct pcs_conf_vals *conf;
-	int nconfs;
-	struct list_head node;
-};
-
-struct pcs_gpiofunc_range {
-	unsigned int offset;
-	unsigned int npins;
-	unsigned int gpiofunc;
-	struct list_head node;
-};
-
-struct pcs_data {
-	struct pinctrl_pin_desc *pa;
-	int cur;
-};
-
-struct pcs_soc_data {
-	unsigned int flags;
-	int irq;
-	unsigned int irq_enable_mask;
-	unsigned int irq_status_mask;
-	void (*rearm)();
-};
-
-struct pcs_device {
-	struct resource *res;
-	void *base;
-	void *saved_vals;
-	unsigned int size;
-	struct device *dev;
-	struct device_node *np;
-	struct pinctrl_dev *pctl;
-	unsigned int flags;
-	struct property *missing_nr_pinctrl_cells;
-	struct pcs_soc_data socdata;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	unsigned int width;
-	unsigned int fmask;
-	unsigned int fshift;
-	unsigned int foff;
-	unsigned int fmax;
-	bool bits_per_mux;
-	unsigned int bits_per_pin;
-	struct pcs_data pins;
-	struct list_head gpiofuncs;
-	struct list_head irqs;
-	struct irq_chip chip;
-	struct irq_domain *domain;
-	struct pinctrl_desc desc;
-	unsigned int (*read)(void *);
-	void (*write)(unsigned int, void *);
-};
-
-struct pcs_interrupt {
-	void *reg;
-	irq_hw_number_t hwirq;
-	unsigned int irq;
-	struct list_head node;
-};
-
-struct tegra_pinctrl_soc_data;
-
-struct tegra_pmx {
-	struct device *dev;
-	struct pinctrl_dev *pctl;
-	const struct tegra_pinctrl_soc_data *soc;
-	const char **group_pins;
-	int nbanks;
-	void **regs;
-	u32 *backup_regs;
-};
-
-struct tegra_function;
-
-struct tegra_pingroup;
-
-struct tegra_pinctrl_soc_data {
-	unsigned int ngpios;
-	const char *gpio_compatible;
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	struct tegra_function *functions;
-	unsigned int nfunctions;
-	const struct tegra_pingroup *groups;
-	unsigned int ngroups;
-	bool hsm_in_mux;
-	bool schmitt_in_mux;
-	bool drvtype_in_mux;
-	bool sfsel_in_mux;
-};
-
-enum tegra_pinconf_param {
-	TEGRA_PINCONF_PARAM_PULL = 0,
-	TEGRA_PINCONF_PARAM_TRISTATE = 1,
-	TEGRA_PINCONF_PARAM_ENABLE_INPUT = 2,
-	TEGRA_PINCONF_PARAM_OPEN_DRAIN = 3,
-	TEGRA_PINCONF_PARAM_LOCK = 4,
-	TEGRA_PINCONF_PARAM_IORESET = 5,
-	TEGRA_PINCONF_PARAM_RCV_SEL = 6,
-	TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE = 7,
-	TEGRA_PINCONF_PARAM_SCHMITT = 8,
-	TEGRA_PINCONF_PARAM_LOW_POWER_MODE = 9,
-	TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH = 10,
-	TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH = 11,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING = 12,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_RISING = 13,
-	TEGRA_PINCONF_PARAM_DRIVE_TYPE = 14,
-};
-
-struct tegra_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct tegra_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	u8 npins;
-	u8 funcs[4];
-	s32 mux_reg;
-	s32 pupd_reg;
-	s32 tri_reg;
-	s32 drv_reg;
-	u32 mux_bank: 2;
-	u32 pupd_bank: 2;
-	u32 tri_bank: 2;
-	u32 drv_bank: 2;
-	s32 mux_bit: 6;
-	s32 pupd_bit: 6;
-	s32 tri_bit: 6;
-	s32 einput_bit: 6;
-	s32 odrain_bit: 6;
-	s32 lock_bit: 6;
-	s32 ioreset_bit: 6;
-	s32 rcv_sel_bit: 6;
-	s32 hsm_bit: 6;
-	char: 2;
-	s32 sfsel_bit: 6;
-	s32 schmitt_bit: 6;
-	s32 lpmd_bit: 6;
-	s32 drvdn_bit: 6;
-	s32 drvup_bit: 6;
-	char: 2;
-	s32 slwr_bit: 6;
-	s32 slwf_bit: 6;
-	s32 drvtype_bit: 6;
-	s32 drvdn_width: 6;
-	s32 drvup_width: 6;
-	char: 2;
-	s32 slwr_width: 6;
-	s32 slwf_width: 6;
-	u32 parked_bitmask;
-};
-
-struct cfg_param {
-	const char *property;
-	enum tegra_pinconf_param param;
-};
-
-enum tegra_mux {
-	TEGRA_MUX_BLINK = 0,
-	TEGRA_MUX_CCLA = 1,
-	TEGRA_MUX_CEC = 2,
-	TEGRA_MUX_CLDVFS = 3,
-	TEGRA_MUX_CLK = 4,
-	TEGRA_MUX_CLK12 = 5,
-	TEGRA_MUX_CPU = 6,
-	TEGRA_MUX_CSI = 7,
-	TEGRA_MUX_DAP = 8,
-	TEGRA_MUX_DAP1 = 9,
-	TEGRA_MUX_DAP2 = 10,
-	TEGRA_MUX_DEV3 = 11,
-	TEGRA_MUX_DISPLAYA = 12,
-	TEGRA_MUX_DISPLAYA_ALT = 13,
-	TEGRA_MUX_DISPLAYB = 14,
-	TEGRA_MUX_DP = 15,
-	TEGRA_MUX_DSI_B = 16,
-	TEGRA_MUX_DTV = 17,
-	TEGRA_MUX_EXTPERIPH1 = 18,
-	TEGRA_MUX_EXTPERIPH2 = 19,
-	TEGRA_MUX_EXTPERIPH3 = 20,
-	TEGRA_MUX_GMI = 21,
-	TEGRA_MUX_GMI_ALT = 22,
-	TEGRA_MUX_HDA = 23,
-	TEGRA_MUX_HSI = 24,
-	TEGRA_MUX_I2C1 = 25,
-	TEGRA_MUX_I2C2 = 26,
-	TEGRA_MUX_I2C3 = 27,
-	TEGRA_MUX_I2C4 = 28,
-	TEGRA_MUX_I2CPWR = 29,
-	TEGRA_MUX_I2S0 = 30,
-	TEGRA_MUX_I2S1 = 31,
-	TEGRA_MUX_I2S2 = 32,
-	TEGRA_MUX_I2S3 = 33,
-	TEGRA_MUX_I2S4 = 34,
-	TEGRA_MUX_IRDA = 35,
-	TEGRA_MUX_KBC = 36,
-	TEGRA_MUX_OWR = 37,
-	TEGRA_MUX_PE = 38,
-	TEGRA_MUX_PE0 = 39,
-	TEGRA_MUX_PE1 = 40,
-	TEGRA_MUX_PMI = 41,
-	TEGRA_MUX_PWM0 = 42,
-	TEGRA_MUX_PWM1 = 43,
-	TEGRA_MUX_PWM2 = 44,
-	TEGRA_MUX_PWM3 = 45,
-	TEGRA_MUX_PWRON = 46,
-	TEGRA_MUX_RESET_OUT_N = 47,
-	TEGRA_MUX_RSVD1 = 48,
-	TEGRA_MUX_RSVD2 = 49,
-	TEGRA_MUX_RSVD3 = 50,
-	TEGRA_MUX_RSVD4 = 51,
-	TEGRA_MUX_RTCK = 52,
-	TEGRA_MUX_SATA = 53,
-	TEGRA_MUX_SDMMC1 = 54,
-	TEGRA_MUX_SDMMC2 = 55,
-	TEGRA_MUX_SDMMC3 = 56,
-	TEGRA_MUX_SDMMC4 = 57,
-	TEGRA_MUX_SOC = 58,
-	TEGRA_MUX_SPDIF = 59,
-	TEGRA_MUX_SPI1 = 60,
-	TEGRA_MUX_SPI2 = 61,
-	TEGRA_MUX_SPI3 = 62,
-	TEGRA_MUX_SPI4 = 63,
-	TEGRA_MUX_SPI5 = 64,
-	TEGRA_MUX_SPI6 = 65,
-	TEGRA_MUX_SYS = 66,
-	TEGRA_MUX_TMDS = 67,
-	TEGRA_MUX_TRACE = 68,
-	TEGRA_MUX_UARTA = 69,
-	TEGRA_MUX_UARTB = 70,
-	TEGRA_MUX_UARTC = 71,
-	TEGRA_MUX_UARTD = 72,
-	TEGRA_MUX_ULPI = 73,
-	TEGRA_MUX_USB = 74,
-	TEGRA_MUX_VGP1 = 75,
-	TEGRA_MUX_VGP2 = 76,
-	TEGRA_MUX_VGP3 = 77,
-	TEGRA_MUX_VGP4 = 78,
-	TEGRA_MUX_VGP5 = 79,
-	TEGRA_MUX_VGP6 = 80,
-	TEGRA_MUX_VI = 81,
-	TEGRA_MUX_VI_ALT1 = 82,
-	TEGRA_MUX_VI_ALT3 = 83,
-	TEGRA_MUX_VIMCLK2 = 84,
-	TEGRA_MUX_VIMCLK2_ALT = 85,
-};
-
-enum tegra_mux___2 {
-	TEGRA_MUX_AUD = 0,
-	TEGRA_MUX_BCL = 1,
-	TEGRA_MUX_BLINK___2 = 2,
-	TEGRA_MUX_CCLA___2 = 3,
-	TEGRA_MUX_CEC___2 = 4,
-	TEGRA_MUX_CLDVFS___2 = 5,
-	TEGRA_MUX_CLK___2 = 6,
-	TEGRA_MUX_CORE = 7,
-	TEGRA_MUX_CPU___2 = 8,
-	TEGRA_MUX_DISPLAYA___2 = 9,
-	TEGRA_MUX_DISPLAYB___2 = 10,
-	TEGRA_MUX_DMIC1 = 11,
-	TEGRA_MUX_DMIC2 = 12,
-	TEGRA_MUX_DMIC3 = 13,
-	TEGRA_MUX_DP___2 = 14,
-	TEGRA_MUX_DTV___2 = 15,
-	TEGRA_MUX_EXTPERIPH3___2 = 16,
-	TEGRA_MUX_I2C1___2 = 17,
-	TEGRA_MUX_I2C2___2 = 18,
-	TEGRA_MUX_I2C3___2 = 19,
-	TEGRA_MUX_I2CPMU = 20,
-	TEGRA_MUX_I2CVI = 21,
-	TEGRA_MUX_I2S1___2 = 22,
-	TEGRA_MUX_I2S2___2 = 23,
-	TEGRA_MUX_I2S3___2 = 24,
-	TEGRA_MUX_I2S4A = 25,
-	TEGRA_MUX_I2S4B = 26,
-	TEGRA_MUX_I2S5A = 27,
-	TEGRA_MUX_I2S5B = 28,
-	TEGRA_MUX_IQC0 = 29,
-	TEGRA_MUX_IQC1 = 30,
-	TEGRA_MUX_JTAG = 31,
-	TEGRA_MUX_PE___2 = 32,
-	TEGRA_MUX_PE0___2 = 33,
-	TEGRA_MUX_PE1___2 = 34,
-	TEGRA_MUX_PMI___2 = 35,
-	TEGRA_MUX_PWM0___2 = 36,
-	TEGRA_MUX_PWM1___2 = 37,
-	TEGRA_MUX_PWM2___2 = 38,
-	TEGRA_MUX_PWM3___2 = 39,
-	TEGRA_MUX_QSPI = 40,
-	TEGRA_MUX_RSVD0 = 41,
-	TEGRA_MUX_RSVD1___2 = 42,
-	TEGRA_MUX_RSVD2___2 = 43,
-	TEGRA_MUX_RSVD3___2 = 44,
-	TEGRA_MUX_SATA___2 = 45,
-	TEGRA_MUX_SDMMC1___2 = 46,
-	TEGRA_MUX_SDMMC3___2 = 47,
-	TEGRA_MUX_SHUTDOWN = 48,
-	TEGRA_MUX_SOC___2 = 49,
-	TEGRA_MUX_SOR0 = 50,
-	TEGRA_MUX_SOR1 = 51,
-	TEGRA_MUX_SPDIF___2 = 52,
-	TEGRA_MUX_SPI1___2 = 53,
-	TEGRA_MUX_SPI2___2 = 54,
-	TEGRA_MUX_SPI3___2 = 55,
-	TEGRA_MUX_SPI4___2 = 56,
-	TEGRA_MUX_SYS___2 = 57,
-	TEGRA_MUX_TOUCH = 58,
-	TEGRA_MUX_UART = 59,
-	TEGRA_MUX_UARTA___2 = 60,
-	TEGRA_MUX_UARTB___2 = 61,
-	TEGRA_MUX_UARTC___2 = 62,
-	TEGRA_MUX_UARTD___2 = 63,
-	TEGRA_MUX_USB___2 = 64,
-	TEGRA_MUX_VGP1___2 = 65,
-	TEGRA_MUX_VGP2___2 = 66,
-	TEGRA_MUX_VGP3___2 = 67,
-	TEGRA_MUX_VGP4___2 = 68,
-	TEGRA_MUX_VGP5___2 = 69,
-	TEGRA_MUX_VGP6___2 = 70,
-	TEGRA_MUX_VIMCLK = 71,
-	TEGRA_MUX_VIMCLK2___2 = 72,
-};
-
-struct tegra_xusb_padctl_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct tegra_xusb_padctl_lane;
-
-struct tegra_xusb_padctl_soc {
-	const struct pinctrl_pin_desc *pins;
-	unsigned int num_pins;
-	const struct tegra_xusb_padctl_function *functions;
-	unsigned int num_functions;
-	const struct tegra_xusb_padctl_lane *lanes;
-	unsigned int num_lanes;
-};
-
-struct tegra_xusb_padctl_lane {
-	const char *name;
-	unsigned int offset;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int iddq;
-	const unsigned int *funcs;
-	unsigned int num_funcs;
-};
-
-struct tegra_xusb_padctl {
-	struct device *dev;
-	void *regs;
-	struct mutex lock;
-	struct reset_control *rst;
-	const struct tegra_xusb_padctl_soc *soc;
-	struct pinctrl_dev *pinctrl;
-	struct pinctrl_desc desc;
-	struct phy_provider *provider;
-	struct phy *phys[2];
-	unsigned int enable;
-};
-
-enum tegra_xusb_padctl_param {
-	TEGRA_XUSB_PADCTL_IDDQ = 0,
-};
-
-struct tegra_xusb_padctl_property {
-	const char *name;
-	enum tegra_xusb_padctl_param param;
-};
-
-enum tegra124_function {
-	TEGRA124_FUNC_SNPS = 0,
-	TEGRA124_FUNC_XUSB = 1,
-	TEGRA124_FUNC_UART = 2,
-	TEGRA124_FUNC_PCIE = 3,
-	TEGRA124_FUNC_USB3 = 4,
-	TEGRA124_FUNC_SATA = 5,
-	TEGRA124_FUNC_RSVD = 6,
-};
-
-struct bcm2835_pinctrl {
-	struct device *dev;
-	void *base;
-	int *wake_irq;
-	long unsigned int enabled_irq_map[2];
-	unsigned int irq_type[58];
-	struct pinctrl_dev *pctl_dev;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_desc pctl_desc;
-	struct pinctrl_gpio_range gpio_range;
-	raw_spinlock_t irq_lock[2];
-};
-
-enum bcm2835_fsel {
-	BCM2835_FSEL_COUNT = 8,
-	BCM2835_FSEL_MASK = 7,
-};
-
-struct bcm_plat_data {
-	const struct gpio_chip *gpio_chip;
-	const struct pinctrl_desc *pctl_desc;
-	const struct pinctrl_gpio_range *gpio_range;
-};
-
-struct mvebu_mpp_ctrl_data {
-	union {
-		void *base;
-		struct {
-			struct regmap *map;
-			u32 offset;
-		} regmap;
-	};
-};
-
-struct mvebu_mpp_ctrl {
-	const char *name;
-	u8 pid;
-	u8 npins;
-	unsigned int *pins;
-	int (*mpp_get)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int *);
-	int (*mpp_set)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int);
-	int (*mpp_gpio_req)(struct mvebu_mpp_ctrl_data *, unsigned int);
-	int (*mpp_gpio_dir)(struct mvebu_mpp_ctrl_data *, unsigned int, bool);
-};
-
-struct mvebu_mpp_ctrl_setting {
-	u8 val;
-	const char *name;
-	const char *subname;
-	u8 variant;
-	u8 flags;
-};
-
-struct mvebu_mpp_mode {
-	u8 pid;
-	struct mvebu_mpp_ctrl_setting *settings;
-};
-
-struct mvebu_pinctrl_soc_info {
-	u8 variant;
-	const struct mvebu_mpp_ctrl *controls;
-	struct mvebu_mpp_ctrl_data *control_data;
-	int ncontrols;
-	struct mvebu_mpp_mode *modes;
-	int nmodes;
-	struct pinctrl_gpio_range *gpioranges;
-	int ngpioranges;
-};
-
-struct mvebu_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int num_groups;
-};
-
-struct mvebu_pinctrl_group {
-	const char *name;
-	const struct mvebu_mpp_ctrl *ctrl;
-	struct mvebu_mpp_ctrl_data *data;
-	struct mvebu_mpp_ctrl_setting *settings;
-	unsigned int num_settings;
-	unsigned int gid;
-	unsigned int *pins;
-	unsigned int npins;
-};
-
-struct mvebu_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_desc desc;
-	struct mvebu_pinctrl_group *groups;
-	unsigned int num_groups;
-	struct mvebu_pinctrl_function *functions;
-	unsigned int num_functions;
-	u8 variant;
-};
-
-enum {
-	V_ARMADA_7K = 1,
-	V_ARMADA_8K_CPM = 2,
-	V_ARMADA_8K_CPS = 4,
-	V_CP115_STANDALONE = 8,
-	V_ARMADA_7K_8K_CPM = 3,
-	V_ARMADA_7K_8K_CPS = 5,
-};
-
-struct armada_37xx_pin_group {
-	const char *name;
-	unsigned int start_pin;
-	unsigned int npins;
-	u32 reg_mask;
-	u32 val[3];
-	unsigned int extra_pin;
-	unsigned int extra_npins;
-	const char *funcs[3];
-	unsigned int *pins;
-};
-
-struct armada_37xx_pin_data {
-	u8 nr_pins;
-	char *name;
-	struct armada_37xx_pin_group *groups;
-	int ngroups;
-};
-
-struct armada_37xx_pmx_func {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct armada_37xx_pm_state {
-	u32 out_en_l;
-	u32 out_en_h;
-	u32 out_val_l;
-	u32 out_val_h;
-	u32 irq_en_l;
-	u32 irq_en_h;
-	u32 irq_pol_l;
-	u32 irq_pol_h;
-	u32 selection;
-};
-
-struct armada_37xx_pinctrl {
-	struct regmap *regmap;
-	void *base;
-	const struct armada_37xx_pin_data *data;
-	struct device *dev;
-	struct gpio_chip gpio_chip;
-	struct irq_chip irq_chip;
-	spinlock_t irq_lock;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct armada_37xx_pin_group *groups;
-	unsigned int ngroups;
-	struct armada_37xx_pmx_func *funcs;
-	unsigned int nfuncs;
-	struct armada_37xx_pm_state pm;
-};
-
-struct msm_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int ngroups;
-};
-
-struct msm_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int npins;
-	unsigned int *funcs;
-	unsigned int nfuncs;
-	u32 ctl_reg;
-	u32 io_reg;
-	u32 intr_cfg_reg;
-	u32 intr_status_reg;
-	u32 intr_target_reg;
-	unsigned int tile: 2;
-	unsigned int mux_bit: 5;
-	unsigned int pull_bit: 5;
-	unsigned int drv_bit: 5;
-	unsigned int od_bit: 5;
-	unsigned int oe_bit: 5;
-	unsigned int in_bit: 5;
-	unsigned int out_bit: 5;
-	unsigned int intr_enable_bit: 5;
-	unsigned int intr_status_bit: 5;
-	unsigned int intr_ack_high: 1;
-	unsigned int intr_target_bit: 5;
-	unsigned int intr_target_kpss_val: 5;
-	unsigned int intr_raw_status_bit: 5;
-	char: 1;
-	unsigned int intr_polarity_bit: 5;
-	unsigned int intr_detection_bit: 5;
-	unsigned int intr_detection_width: 5;
-};
-
-struct msm_gpio_wakeirq_map {
-	unsigned int gpio;
-	unsigned int wakeirq;
-};
-
-struct msm_pinctrl_soc_data {
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	const struct msm_function *functions;
-	unsigned int nfunctions;
-	const struct msm_pingroup *groups;
-	unsigned int ngroups;
-	unsigned int ngpios;
-	bool pull_no_keeper;
-	const char * const *tiles;
-	unsigned int ntiles;
-	const int *reserved_gpios;
-	const struct msm_gpio_wakeirq_map *wakeirq_map;
-	unsigned int nwakeirq_map;
-	bool wakeirq_dual_edge_errata;
-	unsigned int gpio_func;
-};
-
-struct msm_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pctrl;
-	struct gpio_chip chip;
-	struct pinctrl_desc desc;
-	struct notifier_block restart_nb;
-	struct irq_chip irq_chip;
-	int irq;
-	bool intr_target_use_scm;
-	raw_spinlock_t lock;
-	long unsigned int dual_edge_irqs[5];
-	long unsigned int enabled_irqs[5];
-	long unsigned int skip_wake_irqs[5];
-	long unsigned int disabled_for_mux[5];
-	const struct msm_pinctrl_soc_data *soc;
-	void *regs[4];
-	u32 phys_base[4];
-};
-
-enum msm8916_functions {
-	MSM_MUX_adsp_ext = 0,
-	MSM_MUX_alsp_int = 1,
-	MSM_MUX_atest_bbrx0 = 2,
-	MSM_MUX_atest_bbrx1 = 3,
-	MSM_MUX_atest_char = 4,
-	MSM_MUX_atest_char0 = 5,
-	MSM_MUX_atest_char1 = 6,
-	MSM_MUX_atest_char2 = 7,
-	MSM_MUX_atest_char3 = 8,
-	MSM_MUX_atest_combodac = 9,
-	MSM_MUX_atest_gpsadc0 = 10,
-	MSM_MUX_atest_gpsadc1 = 11,
-	MSM_MUX_atest_tsens = 12,
-	MSM_MUX_atest_wlan0 = 13,
-	MSM_MUX_atest_wlan1 = 14,
-	MSM_MUX_backlight_en = 15,
-	MSM_MUX_bimc_dte0 = 16,
-	MSM_MUX_bimc_dte1 = 17,
-	MSM_MUX_blsp_i2c1 = 18,
-	MSM_MUX_blsp_i2c2 = 19,
-	MSM_MUX_blsp_i2c3 = 20,
-	MSM_MUX_blsp_i2c4 = 21,
-	MSM_MUX_blsp_i2c5 = 22,
-	MSM_MUX_blsp_i2c6 = 23,
-	MSM_MUX_blsp_spi1 = 24,
-	MSM_MUX_blsp_spi1_cs1 = 25,
-	MSM_MUX_blsp_spi1_cs2 = 26,
-	MSM_MUX_blsp_spi1_cs3 = 27,
-	MSM_MUX_blsp_spi2 = 28,
-	MSM_MUX_blsp_spi2_cs1 = 29,
-	MSM_MUX_blsp_spi2_cs2 = 30,
-	MSM_MUX_blsp_spi2_cs3 = 31,
-	MSM_MUX_blsp_spi3 = 32,
-	MSM_MUX_blsp_spi3_cs1 = 33,
-	MSM_MUX_blsp_spi3_cs2 = 34,
-	MSM_MUX_blsp_spi3_cs3 = 35,
-	MSM_MUX_blsp_spi4 = 36,
-	MSM_MUX_blsp_spi5 = 37,
-	MSM_MUX_blsp_spi6 = 38,
-	MSM_MUX_blsp_uart1 = 39,
-	MSM_MUX_blsp_uart2 = 40,
-	MSM_MUX_blsp_uim1 = 41,
-	MSM_MUX_blsp_uim2 = 42,
-	MSM_MUX_cam1_rst = 43,
-	MSM_MUX_cam1_standby = 44,
-	MSM_MUX_cam_mclk0 = 45,
-	MSM_MUX_cam_mclk1 = 46,
-	MSM_MUX_cci_async = 47,
-	MSM_MUX_cci_i2c = 48,
-	MSM_MUX_cci_timer0 = 49,
-	MSM_MUX_cci_timer1 = 50,
-	MSM_MUX_cci_timer2 = 51,
-	MSM_MUX_cdc_pdm0 = 52,
-	MSM_MUX_codec_mad = 53,
-	MSM_MUX_dbg_out = 54,
-	MSM_MUX_display_5v = 55,
-	MSM_MUX_dmic0_clk = 56,
-	MSM_MUX_dmic0_data = 57,
-	MSM_MUX_dsi_rst = 58,
-	MSM_MUX_ebi0_wrcdc = 59,
-	MSM_MUX_euro_us = 60,
-	MSM_MUX_ext_lpass = 61,
-	MSM_MUX_flash_strobe = 62,
-	MSM_MUX_gcc_gp1_clk_a = 63,
-	MSM_MUX_gcc_gp1_clk_b = 64,
-	MSM_MUX_gcc_gp2_clk_a = 65,
-	MSM_MUX_gcc_gp2_clk_b = 66,
-	MSM_MUX_gcc_gp3_clk_a = 67,
-	MSM_MUX_gcc_gp3_clk_b = 68,
-	MSM_MUX_gpio = 69,
-	MSM_MUX_gsm0_tx0 = 70,
-	MSM_MUX_gsm0_tx1 = 71,
-	MSM_MUX_gsm1_tx0 = 72,
-	MSM_MUX_gsm1_tx1 = 73,
-	MSM_MUX_gyro_accl = 74,
-	MSM_MUX_kpsns0 = 75,
-	MSM_MUX_kpsns1 = 76,
-	MSM_MUX_kpsns2 = 77,
-	MSM_MUX_ldo_en = 78,
-	MSM_MUX_ldo_update = 79,
-	MSM_MUX_mag_int = 80,
-	MSM_MUX_mdp_vsync = 81,
-	MSM_MUX_modem_tsync = 82,
-	MSM_MUX_m_voc = 83,
-	MSM_MUX_nav_pps = 84,
-	MSM_MUX_nav_tsync = 85,
-	MSM_MUX_pa_indicator = 86,
-	MSM_MUX_pbs0 = 87,
-	MSM_MUX_pbs1 = 88,
-	MSM_MUX_pbs2 = 89,
-	MSM_MUX_pri_mi2s = 90,
-	MSM_MUX_pri_mi2s_ws = 91,
-	MSM_MUX_prng_rosc = 92,
-	MSM_MUX_pwr_crypto_enabled_a = 93,
-	MSM_MUX_pwr_crypto_enabled_b = 94,
-	MSM_MUX_pwr_modem_enabled_a = 95,
-	MSM_MUX_pwr_modem_enabled_b = 96,
-	MSM_MUX_pwr_nav_enabled_a = 97,
-	MSM_MUX_pwr_nav_enabled_b = 98,
-	MSM_MUX_qdss_ctitrig_in_a0 = 99,
-	MSM_MUX_qdss_ctitrig_in_a1 = 100,
-	MSM_MUX_qdss_ctitrig_in_b0 = 101,
-	MSM_MUX_qdss_ctitrig_in_b1 = 102,
-	MSM_MUX_qdss_ctitrig_out_a0 = 103,
-	MSM_MUX_qdss_ctitrig_out_a1 = 104,
-	MSM_MUX_qdss_ctitrig_out_b0 = 105,
-	MSM_MUX_qdss_ctitrig_out_b1 = 106,
-	MSM_MUX_qdss_traceclk_a = 107,
-	MSM_MUX_qdss_traceclk_b = 108,
-	MSM_MUX_qdss_tracectl_a = 109,
-	MSM_MUX_qdss_tracectl_b = 110,
-	MSM_MUX_qdss_tracedata_a = 111,
-	MSM_MUX_qdss_tracedata_b = 112,
-	MSM_MUX_reset_n = 113,
-	MSM_MUX_sd_card = 114,
-	MSM_MUX_sd_write = 115,
-	MSM_MUX_sec_mi2s = 116,
-	MSM_MUX_smb_int = 117,
-	MSM_MUX_ssbi_wtr0 = 118,
-	MSM_MUX_ssbi_wtr1 = 119,
-	MSM_MUX_uim1 = 120,
-	MSM_MUX_uim2 = 121,
-	MSM_MUX_uim3 = 122,
-	MSM_MUX_uim_batt = 123,
-	MSM_MUX_wcss_bt = 124,
-	MSM_MUX_wcss_fm = 125,
-	MSM_MUX_wcss_wlan = 126,
-	MSM_MUX_webcam1_rst = 127,
-	MSM_MUX_NA = 128,
-};
-
-enum msm8994_functions {
-	MSM_MUX_audio_ref_clk = 0,
-	MSM_MUX_blsp_i2c1___2 = 1,
-	MSM_MUX_blsp_i2c2___2 = 2,
-	MSM_MUX_blsp_i2c3___2 = 3,
-	MSM_MUX_blsp_i2c4___2 = 4,
-	MSM_MUX_blsp_i2c5___2 = 5,
-	MSM_MUX_blsp_i2c6___2 = 6,
-	MSM_MUX_blsp_i2c7 = 7,
-	MSM_MUX_blsp_i2c8 = 8,
-	MSM_MUX_blsp_i2c9 = 9,
-	MSM_MUX_blsp_i2c10 = 10,
-	MSM_MUX_blsp_i2c11 = 11,
-	MSM_MUX_blsp_i2c12 = 12,
-	MSM_MUX_blsp_spi1___2 = 13,
-	MSM_MUX_blsp_spi1_cs1___2 = 14,
-	MSM_MUX_blsp_spi1_cs2___2 = 15,
-	MSM_MUX_blsp_spi1_cs3___2 = 16,
-	MSM_MUX_blsp_spi2___2 = 17,
-	MSM_MUX_blsp_spi2_cs1___2 = 18,
-	MSM_MUX_blsp_spi2_cs2___2 = 19,
-	MSM_MUX_blsp_spi2_cs3___2 = 20,
-	MSM_MUX_blsp_spi3___2 = 21,
-	MSM_MUX_blsp_spi4___2 = 22,
-	MSM_MUX_blsp_spi5___2 = 23,
-	MSM_MUX_blsp_spi6___2 = 24,
-	MSM_MUX_blsp_spi7 = 25,
-	MSM_MUX_blsp_spi8 = 26,
-	MSM_MUX_blsp_spi9 = 27,
-	MSM_MUX_blsp_spi10 = 28,
-	MSM_MUX_blsp_spi10_cs1 = 29,
-	MSM_MUX_blsp_spi10_cs2 = 30,
-	MSM_MUX_blsp_spi10_cs3 = 31,
-	MSM_MUX_blsp_spi11 = 32,
-	MSM_MUX_blsp_spi12 = 33,
-	MSM_MUX_blsp_uart1___2 = 34,
-	MSM_MUX_blsp_uart2___2 = 35,
-	MSM_MUX_blsp_uart3 = 36,
-	MSM_MUX_blsp_uart4 = 37,
-	MSM_MUX_blsp_uart5 = 38,
-	MSM_MUX_blsp_uart6 = 39,
-	MSM_MUX_blsp_uart7 = 40,
-	MSM_MUX_blsp_uart8 = 41,
-	MSM_MUX_blsp_uart9 = 42,
-	MSM_MUX_blsp_uart10 = 43,
-	MSM_MUX_blsp_uart11 = 44,
-	MSM_MUX_blsp_uart12 = 45,
-	MSM_MUX_blsp_uim1___2 = 46,
-	MSM_MUX_blsp_uim2___2 = 47,
-	MSM_MUX_blsp_uim3 = 48,
-	MSM_MUX_blsp_uim4 = 49,
-	MSM_MUX_blsp_uim5 = 50,
-	MSM_MUX_blsp_uim6 = 51,
-	MSM_MUX_blsp_uim7 = 52,
-	MSM_MUX_blsp_uim8 = 53,
-	MSM_MUX_blsp_uim9 = 54,
-	MSM_MUX_blsp_uim10 = 55,
-	MSM_MUX_blsp_uim11 = 56,
-	MSM_MUX_blsp_uim12 = 57,
-	MSM_MUX_blsp11_i2c_scl_b = 58,
-	MSM_MUX_blsp11_i2c_sda_b = 59,
-	MSM_MUX_blsp11_uart_rx_b = 60,
-	MSM_MUX_blsp11_uart_tx_b = 61,
-	MSM_MUX_cam_mclk0___2 = 62,
-	MSM_MUX_cam_mclk1___2 = 63,
-	MSM_MUX_cam_mclk2 = 64,
-	MSM_MUX_cam_mclk3 = 65,
-	MSM_MUX_cci_async_in0 = 66,
-	MSM_MUX_cci_async_in1 = 67,
-	MSM_MUX_cci_async_in2 = 68,
-	MSM_MUX_cci_i2c0 = 69,
-	MSM_MUX_cci_i2c1 = 70,
-	MSM_MUX_cci_timer0___2 = 71,
-	MSM_MUX_cci_timer1___2 = 72,
-	MSM_MUX_cci_timer2___2 = 73,
-	MSM_MUX_cci_timer3 = 74,
-	MSM_MUX_cci_timer4 = 75,
-	MSM_MUX_gcc_gp1_clk_a___2 = 76,
-	MSM_MUX_gcc_gp1_clk_b___2 = 77,
-	MSM_MUX_gcc_gp2_clk_a___2 = 78,
-	MSM_MUX_gcc_gp2_clk_b___2 = 79,
-	MSM_MUX_gcc_gp3_clk_a___2 = 80,
-	MSM_MUX_gcc_gp3_clk_b___2 = 81,
-	MSM_MUX_gp_mn = 82,
-	MSM_MUX_gp_pdm0 = 83,
-	MSM_MUX_gp_pdm1 = 84,
-	MSM_MUX_gp_pdm2 = 85,
-	MSM_MUX_gp0_clk = 86,
-	MSM_MUX_gp1_clk = 87,
-	MSM_MUX_gps_tx = 88,
-	MSM_MUX_gsm_tx = 89,
-	MSM_MUX_hdmi_cec = 90,
-	MSM_MUX_hdmi_ddc = 91,
-	MSM_MUX_hdmi_hpd = 92,
-	MSM_MUX_hdmi_rcv = 93,
-	MSM_MUX_mdp_vsync___2 = 94,
-	MSM_MUX_mss_lte = 95,
-	MSM_MUX_nav_pps___2 = 96,
-	MSM_MUX_nav_tsync___2 = 97,
-	MSM_MUX_qdss_cti_trig_in_a = 98,
-	MSM_MUX_qdss_cti_trig_in_b = 99,
-	MSM_MUX_qdss_cti_trig_in_c = 100,
-	MSM_MUX_qdss_cti_trig_in_d = 101,
-	MSM_MUX_qdss_cti_trig_out_a = 102,
-	MSM_MUX_qdss_cti_trig_out_b = 103,
-	MSM_MUX_qdss_cti_trig_out_c = 104,
-	MSM_MUX_qdss_cti_trig_out_d = 105,
-	MSM_MUX_qdss_traceclk_a___2 = 106,
-	MSM_MUX_qdss_traceclk_b___2 = 107,
-	MSM_MUX_qdss_tracectl_a___2 = 108,
-	MSM_MUX_qdss_tracectl_b___2 = 109,
-	MSM_MUX_qdss_tracedata_a___2 = 110,
-	MSM_MUX_qdss_tracedata_b___2 = 111,
-	MSM_MUX_qua_mi2s = 112,
-	MSM_MUX_pci_e0 = 113,
-	MSM_MUX_pci_e1 = 114,
-	MSM_MUX_pri_mi2s___2 = 115,
-	MSM_MUX_sdc4 = 116,
-	MSM_MUX_sec_mi2s___2 = 117,
-	MSM_MUX_slimbus = 118,
-	MSM_MUX_spkr_i2s = 119,
-	MSM_MUX_ter_mi2s = 120,
-	MSM_MUX_tsif1 = 121,
-	MSM_MUX_tsif2 = 122,
-	MSM_MUX_uim1___2 = 123,
-	MSM_MUX_uim2___2 = 124,
-	MSM_MUX_uim3___2 = 125,
-	MSM_MUX_uim4 = 126,
-	MSM_MUX_uim_batt_alarm = 127,
-	MSM_MUX_gpio___2 = 128,
-	MSM_MUX_NA___2 = 129,
-};
-
-enum msm8996_functions {
-	msm_mux_adsp_ext = 0,
-	msm_mux_atest_bbrx0 = 1,
-	msm_mux_atest_bbrx1 = 2,
-	msm_mux_atest_char = 3,
-	msm_mux_atest_char0 = 4,
-	msm_mux_atest_char1 = 5,
-	msm_mux_atest_char2 = 6,
-	msm_mux_atest_char3 = 7,
-	msm_mux_atest_gpsadc0 = 8,
-	msm_mux_atest_gpsadc1 = 9,
-	msm_mux_atest_tsens = 10,
-	msm_mux_atest_tsens2 = 11,
-	msm_mux_atest_usb1 = 12,
-	msm_mux_atest_usb10 = 13,
-	msm_mux_atest_usb11 = 14,
-	msm_mux_atest_usb12 = 15,
-	msm_mux_atest_usb13 = 16,
-	msm_mux_atest_usb2 = 17,
-	msm_mux_atest_usb20 = 18,
-	msm_mux_atest_usb21 = 19,
-	msm_mux_atest_usb22 = 20,
-	msm_mux_atest_usb23 = 21,
-	msm_mux_audio_ref = 22,
-	msm_mux_bimc_dte0 = 23,
-	msm_mux_bimc_dte1 = 24,
-	msm_mux_blsp10_spi = 25,
-	msm_mux_blsp11_i2c_scl_b = 26,
-	msm_mux_blsp11_i2c_sda_b = 27,
-	msm_mux_blsp11_uart_rx_b = 28,
-	msm_mux_blsp11_uart_tx_b = 29,
-	msm_mux_blsp1_spi = 30,
-	msm_mux_blsp2_spi = 31,
-	msm_mux_blsp_i2c1 = 32,
-	msm_mux_blsp_i2c10 = 33,
-	msm_mux_blsp_i2c11 = 34,
-	msm_mux_blsp_i2c12 = 35,
-	msm_mux_blsp_i2c2 = 36,
-	msm_mux_blsp_i2c3 = 37,
-	msm_mux_blsp_i2c4 = 38,
-	msm_mux_blsp_i2c5 = 39,
-	msm_mux_blsp_i2c6 = 40,
-	msm_mux_blsp_i2c7 = 41,
-	msm_mux_blsp_i2c8 = 42,
-	msm_mux_blsp_i2c9 = 43,
-	msm_mux_blsp_spi1 = 44,
-	msm_mux_blsp_spi10 = 45,
-	msm_mux_blsp_spi11 = 46,
-	msm_mux_blsp_spi12 = 47,
-	msm_mux_blsp_spi2 = 48,
-	msm_mux_blsp_spi3 = 49,
-	msm_mux_blsp_spi4 = 50,
-	msm_mux_blsp_spi5 = 51,
-	msm_mux_blsp_spi6 = 52,
-	msm_mux_blsp_spi7 = 53,
-	msm_mux_blsp_spi8 = 54,
-	msm_mux_blsp_spi9 = 55,
-	msm_mux_blsp_uart1 = 56,
-	msm_mux_blsp_uart10 = 57,
-	msm_mux_blsp_uart11 = 58,
-	msm_mux_blsp_uart12 = 59,
-	msm_mux_blsp_uart2 = 60,
-	msm_mux_blsp_uart3 = 61,
-	msm_mux_blsp_uart4 = 62,
-	msm_mux_blsp_uart5 = 63,
-	msm_mux_blsp_uart6 = 64,
-	msm_mux_blsp_uart7 = 65,
-	msm_mux_blsp_uart8 = 66,
-	msm_mux_blsp_uart9 = 67,
-	msm_mux_blsp_uim1 = 68,
-	msm_mux_blsp_uim10 = 69,
-	msm_mux_blsp_uim11 = 70,
-	msm_mux_blsp_uim12 = 71,
-	msm_mux_blsp_uim2 = 72,
-	msm_mux_blsp_uim3 = 73,
-	msm_mux_blsp_uim4 = 74,
-	msm_mux_blsp_uim5 = 75,
-	msm_mux_blsp_uim6 = 76,
-	msm_mux_blsp_uim7 = 77,
-	msm_mux_blsp_uim8 = 78,
-	msm_mux_blsp_uim9 = 79,
-	msm_mux_btfm_slimbus = 80,
-	msm_mux_cam_mclk = 81,
-	msm_mux_cci_async = 82,
-	msm_mux_cci_i2c = 83,
-	msm_mux_cci_timer0 = 84,
-	msm_mux_cci_timer1 = 85,
-	msm_mux_cci_timer2 = 86,
-	msm_mux_cci_timer3 = 87,
-	msm_mux_cci_timer4 = 88,
-	msm_mux_cri_trng = 89,
-	msm_mux_cri_trng0 = 90,
-	msm_mux_cri_trng1 = 91,
-	msm_mux_dac_calib0 = 92,
-	msm_mux_dac_calib1 = 93,
-	msm_mux_dac_calib10 = 94,
-	msm_mux_dac_calib11 = 95,
-	msm_mux_dac_calib12 = 96,
-	msm_mux_dac_calib13 = 97,
-	msm_mux_dac_calib14 = 98,
-	msm_mux_dac_calib15 = 99,
-	msm_mux_dac_calib16 = 100,
-	msm_mux_dac_calib17 = 101,
-	msm_mux_dac_calib18 = 102,
-	msm_mux_dac_calib19 = 103,
-	msm_mux_dac_calib2 = 104,
-	msm_mux_dac_calib20 = 105,
-	msm_mux_dac_calib21 = 106,
-	msm_mux_dac_calib22 = 107,
-	msm_mux_dac_calib23 = 108,
-	msm_mux_dac_calib24 = 109,
-	msm_mux_dac_calib25 = 110,
-	msm_mux_dac_calib26 = 111,
-	msm_mux_dac_calib3 = 112,
-	msm_mux_dac_calib4 = 113,
-	msm_mux_dac_calib5 = 114,
-	msm_mux_dac_calib6 = 115,
-	msm_mux_dac_calib7 = 116,
-	msm_mux_dac_calib8 = 117,
-	msm_mux_dac_calib9 = 118,
-	msm_mux_dac_gpio = 119,
-	msm_mux_dbg_out = 120,
-	msm_mux_ddr_bist = 121,
-	msm_mux_edp_hot = 122,
-	msm_mux_edp_lcd = 123,
-	msm_mux_gcc_gp1_clk_a = 124,
-	msm_mux_gcc_gp1_clk_b = 125,
-	msm_mux_gcc_gp2_clk_a = 126,
-	msm_mux_gcc_gp2_clk_b = 127,
-	msm_mux_gcc_gp3_clk_a = 128,
-	msm_mux_gcc_gp3_clk_b = 129,
-	msm_mux_gsm_tx = 130,
-	msm_mux_hdmi_cec = 131,
-	msm_mux_hdmi_ddc = 132,
-	msm_mux_hdmi_hot = 133,
-	msm_mux_hdmi_rcv = 134,
-	msm_mux_isense_dbg = 135,
-	msm_mux_ldo_en = 136,
-	msm_mux_ldo_update = 137,
-	msm_mux_lpass_slimbus = 138,
-	msm_mux_m_voc = 139,
-	msm_mux_mdp_vsync = 140,
-	msm_mux_mdp_vsync_p_b = 141,
-	msm_mux_mdp_vsync_s_b = 142,
-	msm_mux_modem_tsync = 143,
-	msm_mux_mss_lte = 144,
-	msm_mux_nav_dr = 145,
-	msm_mux_nav_pps = 146,
-	msm_mux_pa_indicator = 147,
-	msm_mux_pci_e0 = 148,
-	msm_mux_pci_e1 = 149,
-	msm_mux_pci_e2 = 150,
-	msm_mux_pll_bypassnl = 151,
-	msm_mux_pll_reset = 152,
-	msm_mux_pri_mi2s = 153,
-	msm_mux_prng_rosc = 154,
-	msm_mux_pwr_crypto = 155,
-	msm_mux_pwr_modem = 156,
-	msm_mux_pwr_nav = 157,
-	msm_mux_qdss_cti = 158,
-	msm_mux_qdss_cti_trig_in_a = 159,
-	msm_mux_qdss_cti_trig_in_b = 160,
-	msm_mux_qdss_cti_trig_out_a = 161,
-	msm_mux_qdss_cti_trig_out_b = 162,
-	msm_mux_qdss_stm0 = 163,
-	msm_mux_qdss_stm1 = 164,
-	msm_mux_qdss_stm10 = 165,
-	msm_mux_qdss_stm11 = 166,
-	msm_mux_qdss_stm12 = 167,
-	msm_mux_qdss_stm13 = 168,
-	msm_mux_qdss_stm14 = 169,
-	msm_mux_qdss_stm15 = 170,
-	msm_mux_qdss_stm16 = 171,
-	msm_mux_qdss_stm17 = 172,
-	msm_mux_qdss_stm18 = 173,
-	msm_mux_qdss_stm19 = 174,
-	msm_mux_qdss_stm2 = 175,
-	msm_mux_qdss_stm20 = 176,
-	msm_mux_qdss_stm21 = 177,
-	msm_mux_qdss_stm22 = 178,
-	msm_mux_qdss_stm23 = 179,
-	msm_mux_qdss_stm24 = 180,
-	msm_mux_qdss_stm25 = 181,
-	msm_mux_qdss_stm26 = 182,
-	msm_mux_qdss_stm27 = 183,
-	msm_mux_qdss_stm28 = 184,
-	msm_mux_qdss_stm29 = 185,
-	msm_mux_qdss_stm3 = 186,
-	msm_mux_qdss_stm30 = 187,
-	msm_mux_qdss_stm31 = 188,
-	msm_mux_qdss_stm4 = 189,
-	msm_mux_qdss_stm5 = 190,
-	msm_mux_qdss_stm6 = 191,
-	msm_mux_qdss_stm7 = 192,
-	msm_mux_qdss_stm8 = 193,
-	msm_mux_qdss_stm9 = 194,
-	msm_mux_qdss_traceclk_a = 195,
-	msm_mux_qdss_traceclk_b = 196,
-	msm_mux_qdss_tracectl_a = 197,
-	msm_mux_qdss_tracectl_b = 198,
-	msm_mux_qdss_tracedata_11 = 199,
-	msm_mux_qdss_tracedata_12 = 200,
-	msm_mux_qdss_tracedata_a = 201,
-	msm_mux_qdss_tracedata_b = 202,
-	msm_mux_qspi0 = 203,
-	msm_mux_qspi1 = 204,
-	msm_mux_qspi2 = 205,
-	msm_mux_qspi3 = 206,
-	msm_mux_qspi_clk = 207,
-	msm_mux_qspi_cs = 208,
-	msm_mux_qua_mi2s = 209,
-	msm_mux_sd_card = 210,
-	msm_mux_sd_write = 211,
-	msm_mux_sdc40 = 212,
-	msm_mux_sdc41 = 213,
-	msm_mux_sdc42 = 214,
-	msm_mux_sdc43 = 215,
-	msm_mux_sdc4_clk = 216,
-	msm_mux_sdc4_cmd = 217,
-	msm_mux_sec_mi2s = 218,
-	msm_mux_spkr_i2s = 219,
-	msm_mux_ssbi1 = 220,
-	msm_mux_ssbi2 = 221,
-	msm_mux_ssc_irq = 222,
-	msm_mux_ter_mi2s = 223,
-	msm_mux_tsense_pwm1 = 224,
-	msm_mux_tsense_pwm2 = 225,
-	msm_mux_tsif1_clk = 226,
-	msm_mux_tsif1_data = 227,
-	msm_mux_tsif1_en = 228,
-	msm_mux_tsif1_error = 229,
-	msm_mux_tsif1_sync = 230,
-	msm_mux_tsif2_clk = 231,
-	msm_mux_tsif2_data = 232,
-	msm_mux_tsif2_en = 233,
-	msm_mux_tsif2_error = 234,
-	msm_mux_tsif2_sync = 235,
-	msm_mux_uim1 = 236,
-	msm_mux_uim2 = 237,
-	msm_mux_uim3 = 238,
-	msm_mux_uim4 = 239,
-	msm_mux_uim_batt = 240,
-	msm_mux_vfr_1 = 241,
-	msm_mux_gpio = 242,
-	msm_mux_NA = 243,
-};
-
-enum pincfg_type {
-	PINCFG_TYPE_FUNC = 0,
-	PINCFG_TYPE_DAT = 1,
-	PINCFG_TYPE_PUD = 2,
-	PINCFG_TYPE_DRV = 3,
-	PINCFG_TYPE_CON_PDN = 4,
-	PINCFG_TYPE_PUD_PDN = 5,
-	PINCFG_TYPE_NUM = 6,
-};
-
-enum eint_type {
-	EINT_TYPE_NONE = 0,
-	EINT_TYPE_GPIO = 1,
-	EINT_TYPE_WKUP = 2,
-	EINT_TYPE_WKUP_MUX = 3,
-};
-
-struct samsung_pin_bank_type {
-	u8 fld_width[6];
-	u8 reg_offset[6];
-};
-
-struct samsung_pin_bank_data {
-	const struct samsung_pin_bank_type *type;
-	u32 pctl_offset;
-	u8 pctl_res_idx;
-	u8 nr_pins;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-};
-
-struct samsung_pinctrl_drv_data;
-
-struct exynos_irq_chip;
-
-struct samsung_pin_bank {
-	const struct samsung_pin_bank_type *type;
-	void *pctl_base;
-	u32 pctl_offset;
-	u8 nr_pins;
-	void *eint_base;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-	u32 pin_base;
-	void *soc_priv;
-	struct device_node *of_node;
-	struct samsung_pinctrl_drv_data *drvdata;
-	struct irq_domain *irq_domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	struct exynos_irq_chip *irq_chip;
-	spinlock_t slock;
-	u32 pm_save[7];
-};
-
-struct samsung_pin_group;
-
-struct samsung_pmx_func;
-
-struct samsung_retention_ctrl;
-
-struct samsung_pinctrl_drv_data {
-	struct list_head node;
-	void *virt_base;
-	struct device *dev;
-	int irq;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	const struct samsung_pin_group *pin_groups;
-	unsigned int nr_groups;
-	const struct samsung_pmx_func *pmx_functions;
-	unsigned int nr_functions;
-	struct samsung_pin_bank *pin_banks;
-	unsigned int nr_banks;
-	unsigned int pin_base;
-	unsigned int nr_pins;
-	struct samsung_retention_ctrl *retention_ctrl;
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_ctrl {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	void *priv;
-	void (*enable)(struct samsung_pinctrl_drv_data *);
-	void (*disable)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_data {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	struct samsung_retention_ctrl * (*init)(struct samsung_pinctrl_drv_data *, const struct samsung_retention_data *);
-};
-
-struct samsung_pin_ctrl {
-	const struct samsung_pin_bank_data *pin_banks;
-	unsigned int nr_banks;
-	unsigned int nr_ext_resources;
-	const struct samsung_retention_data *retention_data;
-	int (*eint_gpio_init)(struct samsung_pinctrl_drv_data *);
-	int (*eint_wkup_init)(struct samsung_pinctrl_drv_data *);
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_pin_group {
-	const char *name;
-	const unsigned int *pins;
-	u8 num_pins;
-	u8 func;
-};
-
-struct samsung_pmx_func {
-	const char *name;
-	const char **groups;
-	u8 num_groups;
-	u32 val;
-};
-
-struct samsung_pinctrl_of_match_data {
-	const struct samsung_pin_ctrl *ctrl;
-	unsigned int num_ctrl;
-};
-
-struct pin_config {
-	const char *property;
-	enum pincfg_type param;
-};
-
-struct exynos_irq_chip {
-	struct irq_chip chip;
-	u32 eint_con;
-	u32 eint_mask;
-	u32 eint_pend;
-	u32 *eint_wake_mask_value;
-	u32 eint_wake_mask_reg;
-	void (*set_eint_wakeup_mask)(struct samsung_pinctrl_drv_data *, struct exynos_irq_chip *);
-};
-
-struct exynos_weint_data {
-	unsigned int irq;
-	struct samsung_pin_bank *bank;
-};
-
-struct exynos_muxed_weint_data {
-	unsigned int nr_banks;
-	struct samsung_pin_bank *banks[0];
-};
-
-struct exynos_eint_gpio_save {
-	u32 eint_con;
-	u32 eint_fltcon0;
-	u32 eint_fltcon1;
-	u32 eint_mask;
-};
-
-enum sunxi_desc_bias_voltage {
-	BIAS_VOLTAGE_NONE = 0,
-	BIAS_VOLTAGE_GRP_CONFIG = 1,
-	BIAS_VOLTAGE_PIO_POW_MODE_SEL = 2,
-};
-
-struct sunxi_desc_function {
-	long unsigned int variant;
-	const char *name;
-	u8 muxval;
-	u8 irqbank;
-	u8 irqnum;
-};
-
-struct sunxi_desc_pin {
-	struct pinctrl_pin_desc pin;
-	long unsigned int variant;
-	struct sunxi_desc_function *functions;
-};
-
-struct sunxi_pinctrl_desc {
-	const struct sunxi_desc_pin *pins;
-	int npins;
-	unsigned int pin_base;
-	unsigned int irq_banks;
-	const unsigned int *irq_bank_map;
-	bool irq_read_needs_mux;
-	bool disable_strict_mode;
-	enum sunxi_desc_bias_voltage io_bias_cfg_variant;
-};
-
-struct sunxi_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct sunxi_pinctrl_group {
-	const char *name;
-	unsigned int pin;
-};
-
-struct sunxi_pinctrl_regulator {
-	struct regulator *regulator;
-	refcount_t refcount;
-};
-
-struct sunxi_pinctrl {
-	void *membase;
-	struct gpio_chip *chip;
-	const struct sunxi_pinctrl_desc *desc;
-	struct device *dev;
-	struct sunxi_pinctrl_regulator regulators[9];
-	struct irq_domain *domain;
-	struct sunxi_pinctrl_function *functions;
-	unsigned int nfunctions;
-	struct sunxi_pinctrl_group *groups;
-	unsigned int ngroups;
-	int *irq;
-	unsigned int *irq_array;
-	raw_spinlock_t lock;
-	struct pinctrl_dev *pctl_dev;
-	long unsigned int variant;
-};
-
-struct mtk_eint_regs {
-	unsigned int stat;
-	unsigned int ack;
-	unsigned int mask;
-	unsigned int mask_set;
-	unsigned int mask_clr;
-	unsigned int sens;
-	unsigned int sens_set;
-	unsigned int sens_clr;
-	unsigned int soft;
-	unsigned int soft_set;
-	unsigned int soft_clr;
-	unsigned int pol;
-	unsigned int pol_set;
-	unsigned int pol_clr;
-	unsigned int dom_en;
-	unsigned int dbnc_ctrl;
-	unsigned int dbnc_set;
-	unsigned int dbnc_clr;
-};
-
-struct mtk_eint_hw {
-	u8 port_mask;
-	u8 ports;
-	unsigned int ap_num;
-	unsigned int db_cnt;
-};
-
-struct mtk_eint_xt {
-	int (*get_gpio_n)(void *, long unsigned int, unsigned int *, struct gpio_chip **);
-	int (*get_gpio_state)(void *, long unsigned int);
-	int (*set_gpio_as_eint)(void *, long unsigned int);
-};
-
-struct mtk_eint {
-	struct device *dev;
-	void *base;
-	struct irq_domain *domain;
-	int irq;
-	int *dual_edge;
-	u32 *wake_mask;
-	u32 *cur_mask;
-	const struct mtk_eint_hw *hw;
-	const struct mtk_eint_regs *regs;
-	void *pctl;
-	const struct mtk_eint_xt *gpio_xlate;
-};
-
-struct mtk_desc_function {
-	const char *name;
-	unsigned char muxval;
-};
-
-struct mtk_desc_eint {
-	unsigned char eintmux;
-	unsigned char eintnum;
-};
-
-struct mtk_desc_pin {
-	struct pinctrl_pin_desc pin;
-	const struct mtk_desc_eint eint;
-	const struct mtk_desc_function *functions;
-};
-
-struct mtk_pinctrl_group {
-	const char *name;
-	long unsigned int config;
-	unsigned int pin;
-};
-
-struct mtk_drv_group_desc {
-	unsigned char min_drv;
-	unsigned char max_drv;
-	unsigned char low_bit;
-	unsigned char high_bit;
-	unsigned char step;
-};
-
-struct mtk_pin_drv_grp {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char bit;
-	unsigned char grp;
-};
-
-struct mtk_pin_spec_pupd_set_samereg {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char pupd_bit;
-	unsigned char r1_bit;
-	unsigned char r0_bit;
-};
-
-struct mtk_pin_ies_smt_set {
-	short unsigned int start;
-	short unsigned int end;
-	short unsigned int offset;
-	unsigned char bit;
-};
-
-struct mtk_pinctrl_devdata {
-	const struct mtk_desc_pin *pins;
-	unsigned int npins;
-	const struct mtk_drv_group_desc *grp_desc;
-	unsigned int n_grp_cls;
-	const struct mtk_pin_drv_grp *pin_drv_grp;
-	unsigned int n_pin_drv_grps;
-	int (*spec_pull_set)(struct regmap *, unsigned int, unsigned char, bool, unsigned int);
-	int (*spec_ies_smt_set)(struct regmap *, unsigned int, unsigned char, int, enum pin_config_param);
-	void (*spec_pinmux_set)(struct regmap *, unsigned int, unsigned int);
-	void (*spec_dir_set)(unsigned int *, unsigned int);
-	unsigned int dir_offset;
-	unsigned int ies_offset;
-	unsigned int smt_offset;
-	unsigned int pullen_offset;
-	unsigned int pullsel_offset;
-	unsigned int drv_offset;
-	unsigned int dout_offset;
-	unsigned int din_offset;
-	unsigned int pinmux_offset;
-	short unsigned int type1_start;
-	short unsigned int type1_end;
-	unsigned char port_shf;
-	unsigned char port_mask;
-	unsigned char port_align;
-	struct mtk_eint_hw eint_hw;
-	struct mtk_eint_regs *eint_regs;
-};
-
-struct mtk_pinctrl {
-	struct regmap *regmap1;
-	struct regmap *regmap2;
-	struct pinctrl_desc pctl_desc;
-	struct device *dev;
-	struct gpio_chip *chip;
-	struct mtk_pinctrl_group *groups;
-	unsigned int ngroups;
-	const char **grp_names;
-	struct pinctrl_dev *pctl_dev;
-	const struct mtk_pinctrl_devdata *devdata;
-	struct mtk_eint *eint;
-};
-
-enum {
-	PINCTRL_PIN_REG_MODE = 0,
-	PINCTRL_PIN_REG_DIR = 1,
-	PINCTRL_PIN_REG_DI = 2,
-	PINCTRL_PIN_REG_DO = 3,
-	PINCTRL_PIN_REG_SR = 4,
-	PINCTRL_PIN_REG_SMT = 5,
-	PINCTRL_PIN_REG_PD = 6,
-	PINCTRL_PIN_REG_PU = 7,
-	PINCTRL_PIN_REG_E4 = 8,
-	PINCTRL_PIN_REG_E8 = 9,
-	PINCTRL_PIN_REG_TDSEL = 10,
-	PINCTRL_PIN_REG_RDSEL = 11,
-	PINCTRL_PIN_REG_DRV = 12,
-	PINCTRL_PIN_REG_PUPD = 13,
-	PINCTRL_PIN_REG_R0 = 14,
-	PINCTRL_PIN_REG_R1 = 15,
-	PINCTRL_PIN_REG_IES = 16,
-	PINCTRL_PIN_REG_PULLEN = 17,
-	PINCTRL_PIN_REG_PULLSEL = 18,
-	PINCTRL_PIN_REG_DRV_EN = 19,
-	PINCTRL_PIN_REG_DRV_E0 = 20,
-	PINCTRL_PIN_REG_DRV_E1 = 21,
-	PINCTRL_PIN_REG_MAX = 22,
-};
-
-enum {
-	DRV_FIXED = 0,
-	DRV_GRP0 = 1,
-	DRV_GRP1 = 2,
-	DRV_GRP2 = 3,
-	DRV_GRP3 = 4,
-	DRV_GRP4 = 5,
-	DRV_GRP_MAX = 6,
-};
-
-struct mtk_pin_field {
-	u8 index;
-	u32 offset;
-	u32 mask;
-	u8 bitpos;
-	u8 next;
-};
-
-struct mtk_pin_field_calc {
-	u16 s_pin;
-	u16 e_pin;
-	u8 i_base;
-	u32 s_addr;
-	u8 x_addrs;
-	u8 s_bit;
-	u8 x_bits;
-	u8 sz_reg;
-	u8 fixed;
-};
-
-struct mtk_pin_reg_calc {
-	const struct mtk_pin_field_calc *range;
-	unsigned int nranges;
-};
-
-struct mtk_func_desc {
-	const char *name;
-	u8 muxval;
-};
-
-struct mtk_eint_desc {
-	u16 eint_m;
-	u16 eint_n;
-};
-
-struct mtk_pin_desc {
-	unsigned int number;
-	const char *name;
-	struct mtk_eint_desc eint;
-	u8 drv_n;
-	struct mtk_func_desc *funcs;
-};
-
-struct mtk_pinctrl___2;
-
-struct mtk_pin_soc {
-	const struct mtk_pin_reg_calc *reg_cal;
-	const struct mtk_pin_desc *pins;
-	unsigned int npins;
-	const struct group_desc *grps;
-	unsigned int ngrps;
-	const struct function_desc *funcs;
-	unsigned int nfuncs;
-	const struct mtk_eint_regs *eint_regs;
-	const struct mtk_eint_hw *eint_hw;
-	u8 gpio_m;
-	bool ies_present;
-	const char * const *base_names;
-	unsigned int nbase_names;
-	int (*bias_disable_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *);
-	int (*bias_disable_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*bias_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool);
-	int (*bias_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, int *);
-	int (*bias_set_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32, u32);
-	int (*bias_get_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *, u32 *);
-	int (*drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*adv_pull_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32);
-	int (*adv_pull_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32 *);
-	int (*adv_drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*adv_drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *);
-	void *driver_data;
-};
-
-struct mtk_pinctrl___2 {
-	struct pinctrl_dev *pctrl;
-	void **base;
-	u8 nbase;
-	struct device *dev;
-	struct gpio_chip chip;
-	const struct mtk_pin_soc *soc;
-	struct mtk_eint *eint;
-	struct mtk_pinctrl_group *groups;
-	const char **grp_names;
-};
-
-struct mtk_drive_desc {
-	u8 min;
-	u8 max;
-	u8 step;
-	u8 scal;
-};
-
-struct mt6397_chip {
-	struct device *dev;
-	struct regmap *regmap;
-	struct notifier_block pm_nb;
-	int irq;
-	struct irq_domain *irq_domain;
-	struct mutex irqlock;
-	u16 wake_mask[2];
-	u16 irq_masks_cur[2];
-	u16 irq_masks_cache[2];
-	u16 int_con[2];
-	u16 int_status[2];
-	u16 chip_id;
-	void *irq_data;
-};
-
-struct madera_pin_groups {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int n_pins;
-};
-
-struct madera_pin_chip {
-	unsigned int n_pins;
-	const struct madera_pin_groups *pin_groups;
-	unsigned int n_pin_groups;
-};
-
-struct madera_pin_private {
-	struct madera *madera;
-	const struct madera_pin_chip *chip;
-	struct device *dev;
-	struct pinctrl_dev *pctl;
-};
-
-struct gpio_pin_range {
-	struct list_head node;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_gpio_range range;
-};
-
-struct gpio_array;
-
-struct gpio_descs {
-	struct gpio_array *info;
-	unsigned int ndescs;
-	struct gpio_desc___2 *desc[0];
-};
-
-struct gpio_array {
-	struct gpio_desc___2 **desc;
-	unsigned int size;
-	struct gpio_chip *chip;
-	long unsigned int *get_mask;
-	long unsigned int *set_mask;
-	long unsigned int invert_mask[0];
-};
-
-enum gpiod_flags {
-	GPIOD_ASIS = 0,
-	GPIOD_IN = 1,
-	GPIOD_OUT_LOW = 3,
-	GPIOD_OUT_HIGH = 7,
-	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
-	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
-};
-
-enum gpio_lookup_flags {
-	GPIO_ACTIVE_HIGH = 0,
-	GPIO_ACTIVE_LOW = 1,
-	GPIO_OPEN_DRAIN = 2,
-	GPIO_OPEN_SOURCE = 4,
-	GPIO_PERSISTENT = 0,
-	GPIO_TRANSITORY = 8,
-	GPIO_PULL_UP = 16,
-	GPIO_PULL_DOWN = 32,
-	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
-};
-
-struct gpiod_lookup {
-	const char *key;
-	u16 chip_hwnum;
-	const char *con_id;
-	unsigned int idx;
-	long unsigned int flags;
-};
-
-struct gpiod_lookup_table {
-	struct list_head list;
-	const char *dev_id;
-	struct gpiod_lookup table[0];
-};
-
-struct gpiod_hog {
-	struct list_head list;
-	const char *chip_label;
-	u16 chip_hwnum;
-	const char *line_name;
-	long unsigned int lflags;
-	int dflags;
-};
-
-enum {
-	GPIOLINE_CHANGED_REQUESTED = 1,
-	GPIOLINE_CHANGED_RELEASED = 2,
-	GPIOLINE_CHANGED_CONFIG = 3,
-};
-
-struct acpi_gpio_info {
-	struct acpi_device *adev;
-	enum gpiod_flags flags;
-	bool gpioint;
-	int pin_config;
-	int polarity;
-	int triggering;
-	unsigned int quirks;
-};
-
-struct trace_event_raw_gpio_direction {
-	struct trace_entry ent;
-	unsigned int gpio;
-	int in;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_gpio_value {
-	struct trace_entry ent;
-	unsigned int gpio;
-	int get;
-	int value;
-	char __data[0];
+struct pch_msi_data {
+	struct mutex msi_map_lock;
+	phys_addr_t doorbell;
+	u32 irq_first;
+	u32 num_irqs;
+	long unsigned int *msi_map;
 };
 
-struct trace_event_data_offsets_gpio_direction {};
-
-struct trace_event_data_offsets_gpio_value {};
-
-typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
-
-typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
-
 struct devres;
 
-struct gpio {
-	unsigned int gpio;
-	long unsigned int flags;
-	const char *label;
-};
-
-struct of_reconfig_data {
-	struct device_node *dn;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-enum of_reconfig_change {
-	OF_RECONFIG_NO_CHANGE = 0,
-	OF_RECONFIG_CHANGE_ADD = 1,
-	OF_RECONFIG_CHANGE_REMOVE = 2,
-};
-
-enum of_gpio_flags {
-	OF_GPIO_ACTIVE_LOW = 1,
-	OF_GPIO_SINGLE_ENDED = 2,
-	OF_GPIO_OPEN_DRAIN = 4,
-	OF_GPIO_TRANSITORY = 8,
-	OF_GPIO_PULL_UP = 16,
-	OF_GPIO_PULL_DOWN = 32,
-};
-
-struct of_mm_gpio_chip {
-	struct gpio_chip gc;
-	void (*save_regs)(struct of_mm_gpio_chip *);
-	void *regs;
-};
-
 struct gpiochip_info {
 	char name[32];
 	char label[32];
@@ -62936,6 +112799,8 @@
 	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
 	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
 	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
 };
 
 struct gpio_v2_line_values {
@@ -63064,20 +112929,26 @@
 	__u32 id;
 };
 
+typedef __poll_t (*poll_fn)(struct file *, struct poll_table_struct *);
+
+typedef long int (*ioctl_fn___2)(struct file *, unsigned int, long unsigned int);
+
+typedef ssize_t (*read_fn)(struct file *, char *, size_t, loff_t *);
+
 struct linehandle_state {
 	struct gpio_device *gdev;
 	const char *label;
-	struct gpio_desc___2 *descs[64];
+	struct gpio_desc *descs[64];
 	u32 num_descs;
 };
 
 struct linereq;
 
 struct line {
-	struct gpio_desc___2 *desc;
+	struct gpio_desc *desc;
 	struct linereq *req;
 	unsigned int irq;
-	u64 eflags;
+	u64 edflags;
 	u64 timestamp_ns;
 	u32 req_seqno;
 	u32 line_seqno;
@@ -63111,7 +112982,7 @@
 struct lineevent_state {
 	struct gpio_device *gdev;
 	const char *label;
-	struct gpio_desc___2 *desc;
+	struct gpio_desc *desc;
 	u32 eflags;
 	int irq;
 	wait_queue_head_t wait;
@@ -63148,1192 +113019,6 @@
 	atomic_t watch_abi_version;
 };
 
-struct class_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct class *, struct class_attribute *, char *);
-	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
-};
-
-struct gpiod_data {
-	struct gpio_desc___2 *desc;
-	struct mutex mutex;
-	struct kernfs_node *value_kn;
-	int irq;
-	unsigned char irq_flags;
-	bool direction_can_change;
-};
-
-enum dmi_field {
-	DMI_NONE = 0,
-	DMI_BIOS_VENDOR = 1,
-	DMI_BIOS_VERSION = 2,
-	DMI_BIOS_DATE = 3,
-	DMI_BIOS_RELEASE = 4,
-	DMI_EC_FIRMWARE_RELEASE = 5,
-	DMI_SYS_VENDOR = 6,
-	DMI_PRODUCT_NAME = 7,
-	DMI_PRODUCT_VERSION = 8,
-	DMI_PRODUCT_SERIAL = 9,
-	DMI_PRODUCT_UUID = 10,
-	DMI_PRODUCT_SKU = 11,
-	DMI_PRODUCT_FAMILY = 12,
-	DMI_BOARD_VENDOR = 13,
-	DMI_BOARD_NAME = 14,
-	DMI_BOARD_VERSION = 15,
-	DMI_BOARD_SERIAL = 16,
-	DMI_BOARD_ASSET_TAG = 17,
-	DMI_CHASSIS_VENDOR = 18,
-	DMI_CHASSIS_TYPE = 19,
-	DMI_CHASSIS_VERSION = 20,
-	DMI_CHASSIS_SERIAL = 21,
-	DMI_CHASSIS_ASSET_TAG = 22,
-	DMI_STRING_MAX = 23,
-	DMI_OEM_STRING = 24,
-};
-
-struct dmi_strmatch {
-	unsigned char slot: 7;
-	unsigned char exact_match: 1;
-	char substr[79];
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-typedef u8 acpi_adr_space_type;
-
-struct acpi_connection_info {
-	u8 *connection;
-	u16 length;
-	u8 access_length;
-};
-
-struct acpi_resource_irq {
-	u8 descriptor_length;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	u8 interrupts[1];
-};
-
-struct acpi_resource_dma {
-	u8 type;
-	u8 bus_master;
-	u8 transfer;
-	u8 channel_count;
-	u8 channels[1];
-};
-
-struct acpi_resource_start_dependent {
-	u8 descriptor_length;
-	u8 compatibility_priority;
-	u8 performance_robustness;
-};
-
-struct acpi_resource_io {
-	u8 io_decode;
-	u8 alignment;
-	u8 address_length;
-	u16 minimum;
-	u16 maximum;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_io {
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_dma {
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct acpi_resource_vendor {
-	u16 byte_length;
-	u8 byte_data[1];
-} __attribute__((packed));
-
-struct acpi_resource_vendor_typed {
-	u16 byte_length;
-	u8 uuid_subtype;
-	u8 uuid[16];
-	u8 byte_data[1];
-};
-
-struct acpi_resource_end_tag {
-	u8 checksum;
-};
-
-struct acpi_resource_memory24 {
-	u8 write_protect;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_memory32 {
-	u8 write_protect;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_memory32 {
-	u8 write_protect;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_memory_attribute {
-	u8 write_protect;
-	u8 caching;
-	u8 range_type;
-	u8 translation;
-};
-
-struct acpi_io_attribute {
-	u8 range_type;
-	u8 translation;
-	u8 translation_type;
-	u8 reserved1;
-};
-
-union acpi_resource_attribute {
-	struct acpi_memory_attribute mem;
-	struct acpi_io_attribute io;
-	u8 type_specific;
-};
-
-struct acpi_resource_label {
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_resource_source {
-	u8 index;
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_address16_attribute {
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-};
-
-struct acpi_address32_attribute {
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-};
-
-struct acpi_address64_attribute {
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-};
-
-struct acpi_resource_address {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-};
-
-struct acpi_resource_address16 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address16_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address32 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address32_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address64_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_extended_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	u8 revision_ID;
-	struct acpi_address64_attribute address;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct acpi_resource_extended_irq {
-	u8 producer_consumer;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	struct acpi_resource_source resource_source;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_resource_generic_register {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_resource_gpio {
-	u8 revision_id;
-	u8 connection_type;
-	u8 producer_consumer;
-	u8 pin_config;
-	u8 shareable;
-	u8 wake_capable;
-	u8 io_restriction;
-	u8 triggering;
-	u8 polarity;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_common_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_i2c_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 access_mode;
-	u16 slave_address;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_spi_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 wire_mode;
-	u8 device_polarity;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_uart_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 endian;
-	u8 data_bits;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 parity;
-	u8 lines_enabled;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u32 default_baud_rate;
-} __attribute__((packed));
-
-struct acpi_resource_pin_function {
-	u8 revision_id;
-	u8 pin_config;
-	u8 shareable;
-	u16 function_number;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group {
-	u8 revision_id;
-	u8 producer_consumer;
-	u16 pin_table_length;
-	u16 vendor_length;
-	u16 *pin_table;
-	struct acpi_resource_label resource_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_function {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u16 function_number;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-union acpi_resource_data {
-	struct acpi_resource_irq irq;
-	struct acpi_resource_dma dma;
-	struct acpi_resource_start_dependent start_dpf;
-	struct acpi_resource_io io;
-	struct acpi_resource_fixed_io fixed_io;
-	struct acpi_resource_fixed_dma fixed_dma;
-	struct acpi_resource_vendor vendor;
-	struct acpi_resource_vendor_typed vendor_typed;
-	struct acpi_resource_end_tag end_tag;
-	struct acpi_resource_memory24 memory24;
-	struct acpi_resource_memory32 memory32;
-	struct acpi_resource_fixed_memory32 fixed_memory32;
-	struct acpi_resource_address16 address16;
-	struct acpi_resource_address32 address32;
-	struct acpi_resource_address64 address64;
-	struct acpi_resource_extended_address64 ext_address64;
-	struct acpi_resource_extended_irq extended_irq;
-	struct acpi_resource_generic_register generic_reg;
-	struct acpi_resource_gpio gpio;
-	struct acpi_resource_i2c_serialbus i2c_serial_bus;
-	struct acpi_resource_spi_serialbus spi_serial_bus;
-	struct acpi_resource_uart_serialbus uart_serial_bus;
-	struct acpi_resource_common_serialbus common_serial_bus;
-	struct acpi_resource_pin_function pin_function;
-	struct acpi_resource_pin_config pin_config;
-	struct acpi_resource_pin_group pin_group;
-	struct acpi_resource_pin_group_function pin_group_function;
-	struct acpi_resource_pin_group_config pin_group_config;
-	struct acpi_resource_address address;
-};
-
-struct acpi_resource {
-	u32 type;
-	u32 length;
-	union acpi_resource_data data;
-} __attribute__((packed));
-
-struct acpi_gpiolib_dmi_quirk {
-	bool no_edge_events_on_boot;
-	char *ignore_wake;
-};
-
-struct acpi_gpio_event {
-	struct list_head node;
-	acpi_handle handle;
-	irq_handler_t handler;
-	unsigned int pin;
-	unsigned int irq;
-	long unsigned int irqflags;
-	bool irq_is_wake;
-	bool irq_requested;
-	struct gpio_desc___2 *desc;
-};
-
-struct acpi_gpio_connection {
-	struct list_head node;
-	unsigned int pin;
-	struct gpio_desc___2 *desc;
-};
-
-struct acpi_gpio_chip {
-	struct acpi_connection_info conn_info;
-	struct list_head conns;
-	struct mutex conn_lock;
-	struct gpio_chip *chip;
-	struct list_head events;
-	struct list_head deferred_req_irqs_list_entry;
-};
-
-struct acpi_gpio_lookup {
-	struct acpi_gpio_info info;
-	int index;
-	int pin_index;
-	bool active_low;
-	struct gpio_desc___2 *desc;
-	int n;
-};
-
-struct bgpio_pdata {
-	const char *label;
-	int base;
-	int ngpio;
-};
-
-enum pwm_polarity {
-	PWM_POLARITY_NORMAL = 0,
-	PWM_POLARITY_INVERSED = 1,
-};
-
-struct pwm_args {
-	u64 period;
-	enum pwm_polarity polarity;
-};
-
-struct pwm_state {
-	u64 period;
-	u64 duty_cycle;
-	enum pwm_polarity polarity;
-	bool enabled;
-};
-
-struct pwm_chip;
-
-struct pwm_device {
-	const char *label;
-	long unsigned int flags;
-	unsigned int hwpwm;
-	unsigned int pwm;
-	struct pwm_chip *chip;
-	void *chip_data;
-	struct pwm_args args;
-	struct pwm_state state;
-	struct pwm_state last;
-};
-
-struct pwm_ops;
-
-struct pwm_chip {
-	struct device *dev;
-	const struct pwm_ops *ops;
-	int base;
-	unsigned int npwm;
-	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
-	unsigned int of_pwm_n_cells;
-	struct list_head list;
-	struct pwm_device *pwms;
-};
-
-struct pwm_capture;
-
-struct pwm_ops {
-	int (*request)(struct pwm_chip *, struct pwm_device *);
-	void (*free)(struct pwm_chip *, struct pwm_device *);
-	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
-	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
-	void (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
-	struct module *owner;
-	int (*config)(struct pwm_chip *, struct pwm_device *, int, int);
-	int (*set_polarity)(struct pwm_chip *, struct pwm_device *, enum pwm_polarity);
-	int (*enable)(struct pwm_chip *, struct pwm_device *);
-	void (*disable)(struct pwm_chip *, struct pwm_device *);
-};
-
-struct pwm_capture {
-	unsigned int period;
-	unsigned int duty_cycle;
-};
-
-struct mvebu_gpio_chip;
-
-struct mvebu_pwm {
-	void *membase;
-	long unsigned int clk_rate;
-	struct gpio_desc *gpiod;
-	struct pwm_chip chip;
-	spinlock_t lock;
-	struct mvebu_gpio_chip *mvchip;
-	u32 blink_select;
-	u32 blink_on_duration;
-	u32 blink_off_duration;
-};
-
-struct mvebu_gpio_chip {
-	struct gpio_chip chip;
-	struct regmap *regs;
-	u32 offset;
-	struct regmap *percpu_regs;
-	int irqbase;
-	struct irq_domain *domain;
-	int soc_variant;
-	struct clk *clk;
-	struct mvebu_pwm *mvpwm;
-	u32 out_reg;
-	u32 io_conf_reg;
-	u32 blink_en_reg;
-	u32 in_pol_reg;
-	u32 edge_mask_regs[4];
-	u32 level_mask_regs[4];
-};
-
-struct amba_id {
-	unsigned int id;
-	unsigned int mask;
-	void *data;
-};
-
-struct amba_cs_uci_id {
-	unsigned int devarch;
-	unsigned int devarch_mask;
-	unsigned int devtype;
-	void *data;
-};
-
-struct amba_device {
-	struct device dev;
-	struct resource res;
-	struct clk *pclk;
-	struct device_dma_parameters dma_parms;
-	unsigned int periphid;
-	unsigned int cid;
-	struct amba_cs_uci_id uci;
-	unsigned int irq[9];
-	char *driver_override;
-};
-
-struct amba_driver {
-	struct device_driver drv;
-	int (*probe)(struct amba_device *, const struct amba_id *);
-	int (*remove)(struct amba_device *);
-	void (*shutdown)(struct amba_device *);
-	const struct amba_id *id_table;
-};
-
-struct pl061_context_save_regs {
-	u8 gpio_data;
-	u8 gpio_dir;
-	u8 gpio_is;
-	u8 gpio_ibe;
-	u8 gpio_iev;
-	u8 gpio_ie;
-};
-
-struct pl061 {
-	raw_spinlock_t lock;
-	void *base;
-	struct gpio_chip gc;
-	struct irq_chip irq_chip;
-	int parent_irq;
-	struct pl061_context_save_regs csave_regs;
-};
-
-enum rpi_firmware_property_tag {
-	RPI_FIRMWARE_PROPERTY_END = 0,
-	RPI_FIRMWARE_GET_FIRMWARE_REVISION = 1,
-	RPI_FIRMWARE_SET_CURSOR_INFO = 32784,
-	RPI_FIRMWARE_SET_CURSOR_STATE = 32785,
-	RPI_FIRMWARE_GET_BOARD_MODEL = 65537,
-	RPI_FIRMWARE_GET_BOARD_REVISION = 65538,
-	RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 65539,
-	RPI_FIRMWARE_GET_BOARD_SERIAL = 65540,
-	RPI_FIRMWARE_GET_ARM_MEMORY = 65541,
-	RPI_FIRMWARE_GET_VC_MEMORY = 65542,
-	RPI_FIRMWARE_GET_CLOCKS = 65543,
-	RPI_FIRMWARE_GET_POWER_STATE = 131073,
-	RPI_FIRMWARE_GET_TIMING = 131074,
-	RPI_FIRMWARE_SET_POWER_STATE = 163841,
-	RPI_FIRMWARE_GET_CLOCK_STATE = 196609,
-	RPI_FIRMWARE_GET_CLOCK_RATE = 196610,
-	RPI_FIRMWARE_GET_VOLTAGE = 196611,
-	RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 196612,
-	RPI_FIRMWARE_GET_MAX_VOLTAGE = 196613,
-	RPI_FIRMWARE_GET_TEMPERATURE = 196614,
-	RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 196615,
-	RPI_FIRMWARE_GET_MIN_VOLTAGE = 196616,
-	RPI_FIRMWARE_GET_TURBO = 196617,
-	RPI_FIRMWARE_GET_MAX_TEMPERATURE = 196618,
-	RPI_FIRMWARE_GET_STC = 196619,
-	RPI_FIRMWARE_ALLOCATE_MEMORY = 196620,
-	RPI_FIRMWARE_LOCK_MEMORY = 196621,
-	RPI_FIRMWARE_UNLOCK_MEMORY = 196622,
-	RPI_FIRMWARE_RELEASE_MEMORY = 196623,
-	RPI_FIRMWARE_EXECUTE_CODE = 196624,
-	RPI_FIRMWARE_EXECUTE_QPU = 196625,
-	RPI_FIRMWARE_SET_ENABLE_QPU = 196626,
-	RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 196628,
-	RPI_FIRMWARE_GET_EDID_BLOCK = 196640,
-	RPI_FIRMWARE_GET_CUSTOMER_OTP = 196641,
-	RPI_FIRMWARE_GET_DOMAIN_STATE = 196656,
-	RPI_FIRMWARE_GET_THROTTLED = 196678,
-	RPI_FIRMWARE_GET_CLOCK_MEASURED = 196679,
-	RPI_FIRMWARE_NOTIFY_REBOOT = 196680,
-	RPI_FIRMWARE_SET_CLOCK_STATE = 229377,
-	RPI_FIRMWARE_SET_CLOCK_RATE = 229378,
-	RPI_FIRMWARE_SET_VOLTAGE = 229379,
-	RPI_FIRMWARE_SET_TURBO = 229385,
-	RPI_FIRMWARE_SET_CUSTOMER_OTP = 229409,
-	RPI_FIRMWARE_SET_DOMAIN_STATE = 229424,
-	RPI_FIRMWARE_GET_GPIO_STATE = 196673,
-	RPI_FIRMWARE_SET_GPIO_STATE = 229441,
-	RPI_FIRMWARE_SET_SDHOST_CLOCK = 229442,
-	RPI_FIRMWARE_GET_GPIO_CONFIG = 196675,
-	RPI_FIRMWARE_SET_GPIO_CONFIG = 229443,
-	RPI_FIRMWARE_GET_PERIPH_REG = 196677,
-	RPI_FIRMWARE_SET_PERIPH_REG = 229445,
-	RPI_FIRMWARE_GET_POE_HAT_VAL = 196681,
-	RPI_FIRMWARE_SET_POE_HAT_VAL = 196688,
-	RPI_FIRMWARE_NOTIFY_XHCI_RESET = 196696,
-	RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 262145,
-	RPI_FIRMWARE_FRAMEBUFFER_BLANK = 262146,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 262147,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 262148,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 262149,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 262150,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 262151,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 262152,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 262153,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 262154,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 262155,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 262159,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 262160,
-	RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 294913,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 278531,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 278532,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 278533,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 278534,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 278535,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 278537,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 278538,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 278539,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 278542,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 294915,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 294916,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 294917,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 294918,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 294919,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 294921,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 294922,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 294923,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 294943,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 294944,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 294926,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 294927,
-	RPI_FIRMWARE_VCHIQ_INIT = 294928,
-	RPI_FIRMWARE_GET_COMMAND_LINE = 327681,
-	RPI_FIRMWARE_GET_DMA_CHANNELS = 393217,
-};
-
-struct rpi_firmware;
-
-struct rpi_exp_gpio {
-	struct gpio_chip gc;
-	struct rpi_firmware *fw;
-};
-
-struct gpio_set_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-	u32 state;
-};
-
-struct gpio_get_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-};
-
-struct gpio_get_set_state {
-	u32 gpio;
-	u32 state;
-};
-
-struct tegra_gpio_port {
-	const char *name;
-	unsigned int bank;
-	unsigned int port;
-	unsigned int pins;
-};
-
-struct tegra186_pin_range {
-	unsigned int offset;
-	const char *group;
-};
-
-struct tegra_gpio_soc {
-	const struct tegra_gpio_port *ports;
-	unsigned int num_ports;
-	const char *name;
-	unsigned int instance;
-	const struct tegra186_pin_range *pin_ranges;
-	unsigned int num_pin_ranges;
-	const char *pinmux;
-};
-
-struct tegra_gpio {
-	struct gpio_chip gpio;
-	struct irq_chip intc;
-	unsigned int num_irq;
-	unsigned int *irq;
-	const struct tegra_gpio_soc *soc;
-	void *secure;
-	void *base;
-};
-
-struct tegra_gpio_info;
-
-struct tegra_gpio_bank {
-	unsigned int bank;
-	unsigned int irq;
-	spinlock_t lvl_lock[4];
-	spinlock_t dbc_lock[4];
-	u32 cnf[4];
-	u32 out[4];
-	u32 oe[4];
-	u32 int_enb[4];
-	u32 int_lvl[4];
-	u32 wake_enb[4];
-	u32 dbc_enb[4];
-	u32 dbc_cnt[4];
-	struct tegra_gpio_info *tgi;
-};
-
-struct tegra_gpio_soc_config;
-
-struct tegra_gpio_info {
-	struct device *dev;
-	void *regs;
-	struct irq_domain *irq_domain;
-	struct tegra_gpio_bank *bank_info;
-	const struct tegra_gpio_soc_config *soc;
-	struct gpio_chip gc;
-	struct irq_chip ic;
-	u32 bank_count;
-};
-
-struct tegra_gpio_soc_config {
-	bool debounce_supported;
-	u32 bank_stride;
-	u32 upper_offset;
-};
-
-struct msix_entry {
-	u32 vector;
-	u16 entry;
-};
-
-struct thunderx_gpio;
-
-struct thunderx_line {
-	struct thunderx_gpio *txgpio;
-	unsigned int line;
-	unsigned int fil_bits;
-};
-
-struct thunderx_gpio {
-	struct gpio_chip chip;
-	u8 *register_base;
-	struct msix_entry *msix_entries;
-	struct thunderx_line *line_entries;
-	raw_spinlock_t lock;
-	long unsigned int invert_mask[2];
-	long unsigned int od_mask[2];
-	int base_msi;
-};
-
-struct xgene_gpio {
-	struct gpio_chip chip;
-	void *base;
-	spinlock_t lock;
-	u32 set_dr_val[3];
-};
-
-enum {
-	PWMF_REQUESTED = 1,
-	PWMF_EXPORTED = 2,
-};
-
-struct pwm_lookup {
-	struct list_head list;
-	const char *provider;
-	unsigned int index;
-	const char *dev_id;
-	const char *con_id;
-	unsigned int period;
-	enum pwm_polarity polarity;
-	const char *module;
-};
-
-struct trace_event_raw_pwm {
-	struct trace_entry ent;
-	struct pwm_device *pwm;
-	u64 period;
-	u64 duty_cycle;
-	enum pwm_polarity polarity;
-	bool enabled;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_pwm {};
-
-typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *);
-
-typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *);
-
-struct pwm_export {
-	struct device child;
-	struct pwm_device *pwm;
-	struct mutex lock;
-	struct pwm_state suspend;
-};
-
-enum {
-	pci_channel_io_normal = 1,
-	pci_channel_io_frozen = 2,
-	pci_channel_io_perm_failure = 3,
-};
-
-struct pci_sriov {
-	int pos;
-	int nres;
-	u32 cap;
-	u16 ctrl;
-	u16 total_VFs;
-	u16 initial_VFs;
-	u16 num_VFs;
-	u16 offset;
-	u16 stride;
-	u16 vf_device;
-	u32 pgsz;
-	u8 link;
-	u8 max_VF_buses;
-	u16 driver_max_VFs;
-	struct pci_dev *dev;
-	struct pci_dev *self;
-	u32 class;
-	u8 hdr_type;
-	u16 subsystem_vendor;
-	u16 subsystem_device;
-	resource_size_t barsz[6];
-	bool drivers_autoprobe;
-};
-
-struct pci_bus_resource {
-	struct list_head list;
-	struct resource *res;
-	unsigned int flags;
-};
-
-typedef u64 pci_bus_addr_t;
-
-struct pci_bus_region {
-	pci_bus_addr_t start;
-	pci_bus_addr_t end;
-};
-
-enum pci_fixup_pass {
-	pci_fixup_early = 0,
-	pci_fixup_header = 1,
-	pci_fixup_final = 2,
-	pci_fixup_enable = 3,
-	pci_fixup_resume = 4,
-	pci_fixup_suspend = 5,
-	pci_fixup_resume_early = 6,
-	pci_fixup_suspend_late = 7,
-};
-
-struct hotplug_slot_ops;
-
-struct hotplug_slot {
-	const struct hotplug_slot_ops *ops;
-	struct list_head slot_list;
-	struct pci_slot *pci_slot;
-	struct module *owner;
-	const char *mod_name;
-};
-
-enum pci_dev_flags {
-	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
-	PCI_DEV_FLAGS_NO_D3 = 2,
-	PCI_DEV_FLAGS_ASSIGNED = 4,
-	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
-	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
-	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
-	PCI_DEV_FLAGS_NO_PM_RESET = 128,
-	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
-	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
-	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
-	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
-};
-
-enum pci_bus_flags {
-	PCI_BUS_FLAGS_NO_MSI = 1,
-	PCI_BUS_FLAGS_NO_MMRBC = 2,
-	PCI_BUS_FLAGS_NO_AERSID = 4,
-	PCI_BUS_FLAGS_NO_EXTCFG = 8,
-};
-
-enum pci_bus_speed {
-	PCI_SPEED_33MHz = 0,
-	PCI_SPEED_66MHz = 1,
-	PCI_SPEED_66MHz_PCIX = 2,
-	PCI_SPEED_100MHz_PCIX = 3,
-	PCI_SPEED_133MHz_PCIX = 4,
-	PCI_SPEED_66MHz_PCIX_ECC = 5,
-	PCI_SPEED_100MHz_PCIX_ECC = 6,
-	PCI_SPEED_133MHz_PCIX_ECC = 7,
-	PCI_SPEED_66MHz_PCIX_266 = 9,
-	PCI_SPEED_100MHz_PCIX_266 = 10,
-	PCI_SPEED_133MHz_PCIX_266 = 11,
-	AGP_UNKNOWN = 12,
-	AGP_1X = 13,
-	AGP_2X = 14,
-	AGP_4X = 15,
-	AGP_8X = 16,
-	PCI_SPEED_66MHz_PCIX_533 = 17,
-	PCI_SPEED_100MHz_PCIX_533 = 18,
-	PCI_SPEED_133MHz_PCIX_533 = 19,
-	PCIE_SPEED_2_5GT = 20,
-	PCIE_SPEED_5_0GT = 21,
-	PCIE_SPEED_8_0GT = 22,
-	PCIE_SPEED_16_0GT = 23,
-	PCIE_SPEED_32_0GT = 24,
-	PCI_SPEED_UNKNOWN = 255,
-};
-
-enum {
-	PCI_REASSIGN_ALL_RSRC = 1,
-	PCI_REASSIGN_ALL_BUS = 2,
-	PCI_PROBE_ONLY = 4,
-	PCI_CAN_SKIP_ISA_ALIGN = 8,
-	PCI_ENABLE_PROC_DOMAINS = 16,
-	PCI_COMPAT_DOMAIN_0 = 32,
-	PCI_SCAN_ALL_PCIE_DEVS = 64,
-};
-
-enum pcie_bus_config_types {
-	PCIE_BUS_TUNE_OFF = 0,
-	PCIE_BUS_DEFAULT = 1,
-	PCIE_BUS_SAFE = 2,
-	PCIE_BUS_PERFORMANCE = 3,
-	PCIE_BUS_PEER2PEER = 4,
-};
-
-struct hotplug_slot_ops {
-	int (*enable_slot)(struct hotplug_slot *);
-	int (*disable_slot)(struct hotplug_slot *);
-	int (*set_attention_status)(struct hotplug_slot *, u8);
-	int (*hardware_test)(struct hotplug_slot *, u32);
-	int (*get_power_status)(struct hotplug_slot *, u8 *);
-	int (*get_attention_status)(struct hotplug_slot *, u8 *);
-	int (*get_latch_status)(struct hotplug_slot *, u8 *);
-	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
-	int (*reset_slot)(struct hotplug_slot *, int);
-};
-
-enum pci_bar_type {
-	pci_bar_unknown = 0,
-	pci_bar_io = 1,
-	pci_bar_mem32 = 2,
-	pci_bar_mem64 = 3,
-};
-
-struct pci_domain_busn_res {
-	struct list_head list;
-	struct resource res;
-	int domain_nr;
-};
-
-struct bus_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct bus_type *, char *);
-	ssize_t (*store)(struct bus_type *, const char *, size_t);
-};
-
-enum pcie_reset_state {
-	pcie_deassert_reset = 1,
-	pcie_warm_reset = 2,
-	pcie_hot_reset = 3,
-};
-
-enum pcie_link_width {
-	PCIE_LNK_WIDTH_RESRV = 0,
-	PCIE_LNK_X1 = 1,
-	PCIE_LNK_X2 = 2,
-	PCIE_LNK_X4 = 4,
-	PCIE_LNK_X8 = 8,
-	PCIE_LNK_X12 = 12,
-	PCIE_LNK_X16 = 16,
-	PCIE_LNK_X32 = 32,
-	PCIE_LNK_WIDTH_UNKNOWN = 255,
-};
-
-struct pci_cap_saved_data {
-	u16 cap_nr;
-	bool cap_extended;
-	unsigned int size;
-	u32 data[0];
-};
-
-struct pci_cap_saved_state {
-	struct hlist_node next;
-	struct pci_cap_saved_data cap;
-};
-
-typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
-
-struct pci_platform_pm_ops {
-	bool (*bridge_d3)(struct pci_dev *);
-	bool (*is_manageable)(struct pci_dev *);
-	int (*set_state)(struct pci_dev *, pci_power_t);
-	pci_power_t (*get_state)(struct pci_dev *);
-	void (*refresh_state)(struct pci_dev *);
-	pci_power_t (*choose_state)(struct pci_dev *);
-	int (*set_wakeup)(struct pci_dev *, bool);
-	bool (*need_resume)(struct pci_dev *);
-};
-
-struct pci_pme_device {
-	struct list_head list;
-	struct pci_dev *dev;
-};
-
-struct pci_saved_state {
-	u32 config_space[16];
-	struct pci_cap_saved_data cap[0];
-};
-
-struct pci_devres {
-	unsigned int enabled: 1;
-	unsigned int pinned: 1;
-	unsigned int orig_intx: 1;
-	unsigned int restore_intx: 1;
-	unsigned int mwi: 1;
-	u32 region_mask;
-};
-
-struct driver_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device_driver *, char *);
-	ssize_t (*store)(struct device_driver *, const char *, size_t);
-};
-
-enum pci_ers_result {
-	PCI_ERS_RESULT_NONE = 1,
-	PCI_ERS_RESULT_CAN_RECOVER = 2,
-	PCI_ERS_RESULT_NEED_RESET = 3,
-	PCI_ERS_RESULT_DISCONNECT = 4,
-	PCI_ERS_RESULT_RECOVERED = 5,
-	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
-};
-
-enum dev_dma_attr {
-	DEV_DMA_NOT_SUPPORTED = 0,
-	DEV_DMA_NON_COHERENT = 1,
-	DEV_DMA_COHERENT = 2,
-};
-
-struct pcie_device {
-	int irq;
-	struct pci_dev *port;
-	u32 service;
-	void *priv_data;
-	struct device device;
-};
-
-struct pcie_port_service_driver {
-	const char *name;
-	int (*probe)(struct pcie_device *);
-	void (*remove)(struct pcie_device *);
-	int (*suspend)(struct pcie_device *);
-	int (*resume_noirq)(struct pcie_device *);
-	int (*resume)(struct pcie_device *);
-	int (*runtime_suspend)(struct pcie_device *);
-	int (*runtime_resume)(struct pcie_device *);
-	void (*error_resume)(struct pci_dev *);
-	int port_type;
-	u32 service;
-	struct device_driver driver;
-};
-
 struct pci_dynid {
 	struct list_head node;
 	struct pci_device_id id;
@@ -64345,175 +113030,10 @@
 	const struct pci_device_id *id;
 };
 
-enum pci_mmap_state {
-	pci_mmap_io = 0,
-	pci_mmap_mem = 1,
-};
-
-enum pci_mmap_api {
-	PCI_MMAP_SYSFS = 0,
-	PCI_MMAP_PROCFS = 1,
-};
-
-struct pci_vpd_ops;
-
-struct pci_vpd {
-	const struct pci_vpd_ops *ops;
-	struct bin_attribute *attr;
-	struct mutex lock;
-	unsigned int len;
-	u16 flag;
-	u8 cap;
-	unsigned int busy: 1;
-	unsigned int valid: 1;
-};
-
-struct pci_vpd_ops {
-	ssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);
-	ssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);
-	int (*set_size)(struct pci_dev *, size_t);
-};
-
-struct pci_dev_resource {
-	struct list_head list;
-	struct resource *res;
-	struct pci_dev *dev;
-	resource_size_t start;
-	resource_size_t end;
-	resource_size_t add_size;
-	resource_size_t min_align;
-	long unsigned int flags;
-};
-
-enum release_type {
-	leaf_only = 0,
-	whole_subtree = 1,
-};
-
-enum enable_type {
-	undefined = 4294967295,
-	user_disabled = 0,
-	auto_disabled = 1,
-	user_enabled = 2,
-	auto_enabled = 3,
-};
-
-struct portdrv_service_data {
-	struct pcie_port_service_driver *drv;
-	struct device *dev;
-	u32 service;
-};
-
-typedef int (*pcie_pm_callback_t)(struct pcie_device *);
-
-struct aspm_latency {
-	u32 l0s;
-	u32 l1;
-};
-
-struct pcie_link_state {
-	struct pci_dev *pdev;
-	struct pci_dev *downstream;
-	struct pcie_link_state *root;
-	struct pcie_link_state *parent;
-	struct list_head sibling;
-	u32 aspm_support: 7;
-	u32 aspm_enabled: 7;
-	u32 aspm_capable: 7;
-	u32 aspm_default: 7;
-	char: 4;
-	u32 aspm_disable: 7;
-	u32 clkpm_capable: 1;
-	u32 clkpm_enabled: 1;
-	u32 clkpm_default: 1;
-	u32 clkpm_disable: 1;
-	struct aspm_latency latency_up;
-	struct aspm_latency latency_dw;
-	struct aspm_latency acceptable[8];
-};
-
-enum {
-	CPER_SEV_RECOVERABLE = 0,
-	CPER_SEV_FATAL = 1,
-	CPER_SEV_CORRECTED = 2,
-	CPER_SEV_INFORMATIONAL = 3,
-};
-
-struct aer_stats {
-	u64 dev_cor_errs[16];
-	u64 dev_fatal_errs[27];
-	u64 dev_nonfatal_errs[27];
-	u64 dev_total_cor_errs;
-	u64 dev_total_fatal_errs;
-	u64 dev_total_nonfatal_errs;
-	u64 rootport_total_cor_errs;
-	u64 rootport_total_fatal_errs;
-	u64 rootport_total_nonfatal_errs;
-};
-
-struct aer_header_log_regs {
-	unsigned int dw0;
-	unsigned int dw1;
-	unsigned int dw2;
-	unsigned int dw3;
-};
-
-struct aer_capability_regs {
-	u32 header;
-	u32 uncor_status;
-	u32 uncor_mask;
-	u32 uncor_severity;
-	u32 cor_status;
-	u32 cor_mask;
-	u32 cap_control;
-	struct aer_header_log_regs header_log;
-	u32 root_command;
-	u32 root_status;
-	u16 cor_err_source;
-	u16 uncor_err_source;
-};
-
-struct aer_err_info {
-	struct pci_dev *dev[5];
-	int error_dev_num;
-	unsigned int id: 16;
-	unsigned int severity: 2;
-	unsigned int __pad1: 5;
-	unsigned int multi_error_valid: 1;
-	unsigned int first_error: 5;
-	unsigned int __pad2: 2;
-	unsigned int tlp_header_valid: 1;
-	unsigned int status;
-	unsigned int mask;
-	struct aer_header_log_regs tlp;
-};
-
-struct aer_err_source {
-	unsigned int status;
-	unsigned int id;
-};
-
-struct aer_rpc {
-	struct pci_dev *rpd;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct aer_err_source *type;
-			const struct aer_err_source *const_type;
-			char (*rectype)[0];
-			struct aer_err_source *ptr;
-			const struct aer_err_source *ptr_const;
-		};
-		struct aer_err_source buf[128];
-	} aer_fifo;
-};
-
-struct aer_recover_entry {
-	u8 bus;
-	u8 devfn;
-	u16 domain;
-	int severity;
-	struct aer_capability_regs *regs;
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
 };
 
 struct pcie_pme_service_data {
@@ -64523,143 +113043,6 @@
 	bool noirq;
 };
 
-struct pci_slot_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct pci_slot *, char *);
-	ssize_t (*store)(struct pci_slot *, const char *, size_t);
-};
-
-struct acpi_buffer {
-	acpi_size length;
-	void *pointer;
-};
-
-struct acpi_bus_type {
-	struct list_head list;
-	const char *name;
-	bool (*match)(struct device *);
-	struct acpi_device * (*find_companion)(struct device *);
-	void (*setup)(struct device *);
-	void (*cleanup)(struct device *);
-};
-
-enum pm_qos_flags_status {
-	PM_QOS_FLAGS_UNDEFINED = 4294967295,
-	PM_QOS_FLAGS_NONE = 0,
-	PM_QOS_FLAGS_SOME = 1,
-	PM_QOS_FLAGS_ALL = 2,
-};
-
-struct hpx_type0 {
-	u32 revision;
-	u8 cache_line_size;
-	u8 latency_timer;
-	u8 enable_serr;
-	u8 enable_perr;
-};
-
-struct hpx_type1 {
-	u32 revision;
-	u8 max_mem_read;
-	u8 avg_max_split;
-	u16 tot_max_split;
-};
-
-struct hpx_type2 {
-	u32 revision;
-	u32 unc_err_mask_and;
-	u32 unc_err_mask_or;
-	u32 unc_err_sever_and;
-	u32 unc_err_sever_or;
-	u32 cor_err_mask_and;
-	u32 cor_err_mask_or;
-	u32 adv_err_cap_and;
-	u32 adv_err_cap_or;
-	u16 pci_exp_devctl_and;
-	u16 pci_exp_devctl_or;
-	u16 pci_exp_lnkctl_and;
-	u16 pci_exp_lnkctl_or;
-	u32 sec_unc_err_sever_and;
-	u32 sec_unc_err_sever_or;
-	u32 sec_unc_err_mask_and;
-	u32 sec_unc_err_mask_or;
-};
-
-struct hpx_type3 {
-	u16 device_type;
-	u16 function_type;
-	u16 config_space_location;
-	u16 pci_exp_cap_id;
-	u16 pci_exp_cap_ver;
-	u16 pci_exp_vendor_id;
-	u16 dvsec_id;
-	u16 dvsec_rev;
-	u16 match_offset;
-	u32 match_mask_and;
-	u32 match_value;
-	u16 reg_offset;
-	u32 reg_mask_and;
-	u32 reg_mask_or;
-};
-
-enum hpx_type3_dev_type {
-	HPX_TYPE_ENDPOINT = 1,
-	HPX_TYPE_LEG_END = 2,
-	HPX_TYPE_RC_END = 4,
-	HPX_TYPE_RC_EC = 8,
-	HPX_TYPE_ROOT_PORT = 16,
-	HPX_TYPE_UPSTREAM = 32,
-	HPX_TYPE_DOWNSTREAM = 64,
-	HPX_TYPE_PCI_BRIDGE = 128,
-	HPX_TYPE_PCIE_BRIDGE = 256,
-};
-
-enum hpx_type3_fn_type {
-	HPX_FN_NORMAL = 1,
-	HPX_FN_SRIOV_PHYS = 2,
-	HPX_FN_SRIOV_VIRT = 4,
-};
-
-enum hpx_type3_cfg_loc {
-	HPX_CFG_PCICFG = 0,
-	HPX_CFG_PCIE_CAP = 1,
-	HPX_CFG_PCIE_CAP_EXT = 2,
-	HPX_CFG_VEND_CAP = 3,
-	HPX_CFG_DVSEC = 4,
-	HPX_CFG_MAX = 5,
-};
-
-struct of_bus;
-
-struct of_pci_range_parser {
-	struct device_node *node;
-	struct of_bus *bus;
-	const __be32 *range;
-	const __be32 *end;
-	int na;
-	int ns;
-	int pna;
-	bool dma;
-};
-
-struct of_pci_range {
-	union {
-		u64 pci_addr;
-		u64 bus_addr;
-	};
-	u64 cpu_addr;
-	u64 size;
-	u32 flags;
-};
-
-struct pci_fixup {
-	u16 vendor;
-	u16 device;
-	u32 class;
-	unsigned int class_shift;
-	int hook_offset;
-};
-
 enum {
 	NVME_REG_CAP = 0,
 	NVME_REG_VS = 8,
@@ -64676,6 +113059,8 @@
 	NVME_REG_BPINFO = 64,
 	NVME_REG_BPRSEL = 68,
 	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
 	NVME_REG_PMRCAP = 3584,
 	NVME_REG_PMRCTL = 3588,
 	NVME_REG_PMRSTS = 3592,
@@ -64705,8 +113090,10 @@
 	NVME_CC_SHN_MASK = 49152,
 	NVME_CC_IOSQES = 393216,
 	NVME_CC_IOCQES = 4194304,
-	NVME_CAP_CSS_NVM = 1,
-	NVME_CAP_CSS_CSI = 64,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
 	NVME_CSTS_RDY = 1,
 	NVME_CSTS_CFS = 2,
 	NVME_CSTS_NSSRO = 16,
@@ -64790,12 +113177,7 @@
 struct pci_dev_reset_methods {
 	u16 vendor;
 	u16 device;
-	int (*reset)(struct pci_dev *, int);
-};
-
-struct acs_on_id {
-	short unsigned int vendor;
-	short unsigned int device;
+	int (*reset)(struct pci_dev *, bool);
 };
 
 struct pci_dev_acs_enabled {
@@ -64811,1841 +113193,28 @@
 	int (*disable_acs_redir)(struct pci_dev *);
 };
 
-struct slot {
-	u8 number;
-	unsigned int devfn;
-	struct pci_bus *bus;
-	struct pci_dev *dev;
-	unsigned int latch_status: 1;
-	unsigned int adapter_status: 1;
-	unsigned int extracting;
-	struct hotplug_slot hotplug_slot;
-	struct list_head slot_list;
-};
-
-struct cpci_hp_controller_ops {
-	int (*query_enum)();
-	int (*enable_irq)();
-	int (*disable_irq)();
-	int (*check_irq)(void *);
-	int (*hardware_test)(struct slot *, u32);
-	u8 (*get_power)(struct slot *);
-	int (*set_power)(struct slot *, int);
-};
-
-struct cpci_hp_controller {
-	unsigned int irq;
-	long unsigned int irq_flags;
-	char *devname;
-	void *dev_id;
-	char *name;
-	struct cpci_hp_controller_ops *ops;
-};
-
-struct controller {
-	struct pcie_device *pcie;
-	u32 slot_cap;
-	unsigned int inband_presence_disabled: 1;
-	u16 slot_ctrl;
-	struct mutex ctrl_lock;
-	long unsigned int cmd_started;
-	unsigned int cmd_busy: 1;
-	wait_queue_head_t queue;
-	atomic_t pending_events;
-	unsigned int notification_enabled: 1;
-	unsigned int power_fault_detected;
-	struct task_struct *poll_thread;
-	u8 state;
-	struct mutex state_lock;
-	struct delayed_work button_work;
-	struct hotplug_slot hotplug_slot;
-	struct rw_semaphore reset_lock;
-	unsigned int ist_running;
-	int request_result;
-	wait_queue_head_t requester;
-};
-
-struct acpiphp_slot;
-
-struct slot___2 {
-	struct hotplug_slot hotplug_slot;
-	struct acpiphp_slot *acpi_slot;
-	unsigned int sun;
-};
-
-struct acpiphp_slot {
-	struct list_head node;
-	struct pci_bus *bus;
-	struct list_head funcs;
-	struct slot___2 *slot;
-	u8 device;
+struct loongson_pci_data {
 	u32 flags;
-};
-
-struct acpiphp_attention_info {
-	int (*set_attn)(struct hotplug_slot *, u8);
-	int (*get_attn)(struct hotplug_slot *, u8 *);
-	struct module *owner;
-};
-
-struct acpiphp_context;
-
-struct acpiphp_bridge {
-	struct list_head list;
-	struct list_head slots;
-	struct kref ref;
-	struct acpiphp_context *context;
-	int nr_slots;
-	struct pci_bus *pci_bus;
-	struct pci_dev *pci_dev;
-	bool is_going_away;
-};
-
-struct acpiphp_func {
-	struct acpiphp_bridge *parent;
-	struct acpiphp_slot *slot;
-	struct list_head sibling;
-	u8 function;
-	u32 flags;
-};
-
-struct acpiphp_context {
-	struct acpi_hotplug_context hp;
-	struct acpiphp_func func;
-	struct acpiphp_bridge *bridge;
-	unsigned int refcount;
-};
-
-struct acpiphp_root_context {
-	struct acpi_hotplug_context hp;
-	struct acpiphp_bridge *root_bridge;
-};
-
-struct pci_bridge_emul_conf {
-	__le16 vendor;
-	__le16 device;
-	__le16 command;
-	__le16 status;
-	__le32 class_revision;
-	u8 cache_line_size;
-	u8 latency_timer;
-	u8 header_type;
-	u8 bist;
-	__le32 bar[2];
-	u8 primary_bus;
-	u8 secondary_bus;
-	u8 subordinate_bus;
-	u8 secondary_latency_timer;
-	u8 iobase;
-	u8 iolimit;
-	__le16 secondary_status;
-	__le16 membase;
-	__le16 memlimit;
-	__le16 pref_mem_base;
-	__le16 pref_mem_limit;
-	__le32 prefbaseupper;
-	__le32 preflimitupper;
-	__le16 iobaseupper;
-	__le16 iolimitupper;
-	u8 capabilities_pointer;
-	u8 reserve[3];
-	__le32 romaddr;
-	u8 intline;
-	u8 intpin;
-	__le16 bridgectrl;
-};
-
-struct pci_bridge_emul_pcie_conf {
-	u8 cap_id;
-	u8 next;
-	__le16 cap;
-	__le32 devcap;
-	__le16 devctl;
-	__le16 devsta;
-	__le32 lnkcap;
-	__le16 lnkctl;
-	__le16 lnksta;
-	__le32 slotcap;
-	__le16 slotctl;
-	__le16 slotsta;
-	__le16 rootctl;
-	__le16 rsvd;
-	__le32 rootsta;
-	__le32 devcap2;
-	__le16 devctl2;
-	__le16 devsta2;
-	__le32 lnkcap2;
-	__le16 lnkctl2;
-	__le16 lnksta2;
-	__le32 slotcap2;
-	__le16 slotctl2;
-	__le16 slotsta2;
-};
-
-typedef enum {
-	PCI_BRIDGE_EMUL_HANDLED = 0,
-	PCI_BRIDGE_EMUL_NOT_HANDLED = 1,
-} pci_bridge_emul_read_status_t;
-
-struct pci_bridge_emul;
-
-struct pci_bridge_emul_ops {
-	pci_bridge_emul_read_status_t (*read_base)(struct pci_bridge_emul *, int, u32 *);
-	pci_bridge_emul_read_status_t (*read_pcie)(struct pci_bridge_emul *, int, u32 *);
-	void (*write_base)(struct pci_bridge_emul *, int, u32, u32, u32);
-	void (*write_pcie)(struct pci_bridge_emul *, int, u32, u32, u32);
-};
-
-struct pci_bridge_reg_behavior;
-
-struct pci_bridge_emul {
-	struct pci_bridge_emul_conf conf;
-	struct pci_bridge_emul_pcie_conf pcie_conf;
-	struct pci_bridge_emul_ops *ops;
-	struct pci_bridge_reg_behavior *pci_regs_behavior;
-	struct pci_bridge_reg_behavior *pcie_cap_regs_behavior;
-	void *data;
-	bool has_pcie;
-};
-
-struct pci_bridge_reg_behavior {
-	u32 ro;
-	u32 rw;
-	u32 w1c;
-};
-
-enum {
-	PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR = 1,
-};
-
-enum dmi_device_type {
-	DMI_DEV_TYPE_ANY = 0,
-	DMI_DEV_TYPE_OTHER = 1,
-	DMI_DEV_TYPE_UNKNOWN = 2,
-	DMI_DEV_TYPE_VIDEO = 3,
-	DMI_DEV_TYPE_SCSI = 4,
-	DMI_DEV_TYPE_ETHERNET = 5,
-	DMI_DEV_TYPE_TOKENRING = 6,
-	DMI_DEV_TYPE_SOUND = 7,
-	DMI_DEV_TYPE_PATA = 8,
-	DMI_DEV_TYPE_SATA = 9,
-	DMI_DEV_TYPE_SAS = 10,
-	DMI_DEV_TYPE_IPMI = 4294967295,
-	DMI_DEV_TYPE_OEM_STRING = 4294967294,
-	DMI_DEV_TYPE_DEV_ONBOARD = 4294967293,
-	DMI_DEV_TYPE_DEV_SLOT = 4294967292,
-};
-
-struct dmi_device {
-	struct list_head list;
-	int type;
-	const char *name;
-	void *device_data;
-};
-
-struct dmi_dev_onboard {
-	struct dmi_device dev;
-	int instance;
-	int segment;
-	int bus;
-	int devfn;
-};
-
-enum smbios_attr_enum {
-	SMBIOS_ATTR_NONE = 0,
-	SMBIOS_ATTR_LABEL_SHOW = 1,
-	SMBIOS_ATTR_INSTANCE_SHOW = 2,
-};
-
-enum acpi_attr_enum {
-	ACPI_ATTR_LABEL_SHOW = 0,
-	ACPI_ATTR_INDEX_SHOW = 1,
-};
-
-struct pci_epf_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-enum pci_interrupt_pin {
-	PCI_INTERRUPT_UNKNOWN = 0,
-	PCI_INTERRUPT_INTA = 1,
-	PCI_INTERRUPT_INTB = 2,
-	PCI_INTERRUPT_INTC = 3,
-	PCI_INTERRUPT_INTD = 4,
-};
-
-enum pci_barno {
-	BAR_0 = 0,
-	BAR_1 = 1,
-	BAR_2 = 2,
-	BAR_3 = 3,
-	BAR_4 = 4,
-	BAR_5 = 5,
-};
-
-struct pci_epf_header {
-	u16 vendorid;
-	u16 deviceid;
-	u8 revid;
-	u8 progif_code;
-	u8 subclass_code;
-	u8 baseclass_code;
-	u8 cache_line_size;
-	u16 subsys_vendor_id;
-	u16 subsys_id;
-	enum pci_interrupt_pin interrupt_pin;
-};
-
-struct pci_epf;
-
-struct pci_epf_ops {
-	int (*bind)(struct pci_epf *);
-	void (*unbind)(struct pci_epf *);
-};
-
-struct pci_epf_bar {
-	dma_addr_t phys_addr;
-	void *addr;
-	size_t size;
-	enum pci_barno barno;
-	int flags;
-};
-
-struct pci_epc;
-
-struct pci_epf_driver;
-
-struct pci_epf {
-	struct device dev;
-	const char *name;
-	struct pci_epf_header *header;
-	struct pci_epf_bar bar[6];
-	u8 msi_interrupts;
-	u16 msix_interrupts;
-	u8 func_no;
-	struct pci_epc *epc;
-	struct pci_epf_driver *driver;
-	struct list_head list;
-	struct notifier_block nb;
-	struct mutex lock;
-};
-
-struct pci_epf_driver {
-	int (*probe)(struct pci_epf *);
-	int (*remove)(struct pci_epf *);
-	struct device_driver driver;
-	struct pci_epf_ops *ops;
-	struct module *owner;
-	struct list_head epf_group;
-	const struct pci_epf_device_id *id_table;
-};
-
-struct pci_epc_ops;
-
-struct pci_epc_mem;
-
-struct pci_epc {
-	struct device dev;
-	struct list_head pci_epf;
-	const struct pci_epc_ops *ops;
-	struct pci_epc_mem **windows;
-	struct pci_epc_mem *mem;
-	unsigned int num_windows;
-	u8 max_functions;
-	struct config_group *group;
-	struct mutex lock;
-	long unsigned int function_num_map;
-	struct atomic_notifier_head notifier;
-};
-
-enum pci_epc_irq_type {
-	PCI_EPC_IRQ_UNKNOWN = 0,
-	PCI_EPC_IRQ_LEGACY = 1,
-	PCI_EPC_IRQ_MSI = 2,
-	PCI_EPC_IRQ_MSIX = 3,
-};
-
-struct pci_epc_features;
-
-struct pci_epc_ops {
-	int (*write_header)(struct pci_epc *, u8, struct pci_epf_header *);
-	int (*set_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	void (*clear_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	int (*map_addr)(struct pci_epc *, u8, phys_addr_t, u64, size_t);
-	void (*unmap_addr)(struct pci_epc *, u8, phys_addr_t);
-	int (*set_msi)(struct pci_epc *, u8, u8);
-	int (*get_msi)(struct pci_epc *, u8);
-	int (*set_msix)(struct pci_epc *, u8, u16, enum pci_barno, u32);
-	int (*get_msix)(struct pci_epc *, u8);
-	int (*raise_irq)(struct pci_epc *, u8, enum pci_epc_irq_type, u16);
-	int (*start)(struct pci_epc *);
-	void (*stop)(struct pci_epc *);
-	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8);
-	struct module *owner;
-};
-
-struct pci_epc_features {
-	unsigned int linkup_notifier: 1;
-	unsigned int core_init_notifier: 1;
-	unsigned int msi_capable: 1;
-	unsigned int msix_capable: 1;
-	u8 reserved_bar;
-	u8 bar_fixed_64bit;
-	u64 bar_fixed_size[6];
-	size_t align;
-};
-
-struct pci_epc_mem_window {
-	phys_addr_t phys_base;
-	size_t size;
-	size_t page_size;
-};
-
-struct pci_epc_mem {
-	struct pci_epc_mem_window window;
-	long unsigned int *bitmap;
-	int pages;
-	struct mutex lock;
-};
-
-struct pci_epf_group {
-	struct config_group group;
-	struct pci_epf *epf;
-	int index;
-};
-
-struct pci_epc_group {
-	struct config_group group;
-	struct pci_epc *epc;
-	bool start;
-};
-
-enum pci_notify_event {
-	CORE_INIT = 0,
-	LINK_UP = 1,
-};
-
-struct advk_pcie {
-	struct platform_device *pdev;
-	void *base;
-	struct irq_domain *irq_domain;
-	struct irq_chip irq_chip;
-	struct irq_domain *msi_domain;
-	struct irq_domain *msi_inner_domain;
-	struct irq_chip msi_bottom_irq_chip;
-	struct irq_chip msi_irq_chip;
-	struct msi_domain_info msi_domain_info;
-	long unsigned int msi_used[1];
-	struct mutex msi_used_lock;
-	u16 msi_msg;
-	int link_gen;
-	struct pci_bridge_emul bridge;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
-};
-
-struct tegra_msi {
-	struct msi_controller chip;
-	long unsigned int used[4];
-	struct irq_domain *domain;
-	struct mutex lock;
-	void *virt;
-	dma_addr_t phys;
-	int irq;
-};
-
-struct tegra_pcie_port_soc {
-	struct {
-		u8 turnoff_bit;
-		u8 ack_bit;
-	} pme;
-};
-
-struct tegra_pcie_soc {
-	unsigned int num_ports;
-	const struct tegra_pcie_port_soc *ports;
-	unsigned int msi_base_shift;
-	long unsigned int afi_pex2_ctrl;
-	u32 pads_pll_ctl;
-	u32 tx_ref_sel;
-	u32 pads_refclk_cfg0;
-	u32 pads_refclk_cfg1;
-	u32 update_fc_threshold;
-	bool has_pex_clkreq_en;
-	bool has_pex_bias_ctrl;
-	bool has_intr_prsnt_sense;
-	bool has_cml_clk;
-	bool has_gen2;
-	bool force_pca_enable;
-	bool program_uphy;
-	bool update_clamp_threshold;
-	bool program_deskew_time;
-	bool update_fc_timer;
-	bool has_cache_bars;
-	struct {
-		struct {
-			u32 rp_ectl_2_r1;
-			u32 rp_ectl_4_r1;
-			u32 rp_ectl_5_r1;
-			u32 rp_ectl_6_r1;
-			u32 rp_ectl_2_r2;
-			u32 rp_ectl_4_r2;
-			u32 rp_ectl_5_r2;
-			u32 rp_ectl_6_r2;
-		} regs;
-		bool enable;
-	} ectl;
-};
-
-struct tegra_pcie {
-	struct device *dev;
-	void *pads;
-	void *afi;
-	void *cfg;
-	int irq;
-	struct resource cs;
-	struct clk *pex_clk;
-	struct clk *afi_clk;
-	struct clk *pll_e;
-	struct clk *cml_clk;
-	struct reset_control *pex_rst;
-	struct reset_control *afi_rst;
-	struct reset_control *pcie_xrst;
-	bool legacy_phy;
-	struct phy *phy;
-	struct tegra_msi msi;
-	struct list_head ports;
-	u32 xbar_config;
-	struct regulator_bulk_data *supplies;
-	unsigned int num_supplies;
-	const struct tegra_pcie_soc *soc;
-	struct dentry *debugfs;
-};
-
-struct tegra_pcie_port {
-	struct tegra_pcie *pcie;
-	struct device_node *np;
-	struct list_head list;
-	struct resource regs;
-	void *base;
-	unsigned int index;
-	unsigned int lanes;
-	struct phy **phys;
-	struct gpio_desc *reset_gpio;
-};
-
-struct xgene_msi;
-
-struct xgene_msi_group {
-	struct xgene_msi *msi;
-	int gic_irq;
-	u32 msi_grp;
-};
-
-struct xgene_msi {
-	struct device_node *node;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	u64 msi_addr;
-	void *msi_regs;
-	long unsigned int *bitmap;
-	struct mutex bitmap_lock;
-	struct xgene_msi_group *msi_groups;
-	int num_cpus;
-};
-
-struct rockchip_pcie {
-	void *reg_base;
-	void *apb_base;
-	bool legacy_phy;
-	struct phy *phys[4];
-	struct reset_control *core_rst;
-	struct reset_control *mgmt_rst;
-	struct reset_control *mgmt_sticky_rst;
-	struct reset_control *pipe_rst;
-	struct reset_control *pm_rst;
-	struct reset_control *aclk_rst;
-	struct reset_control *pclk_rst;
-	struct clk *aclk_pcie;
-	struct clk *aclk_perf_pcie;
-	struct clk *hclk_pcie;
-	struct clk *clk_pcie_pm;
-	struct regulator *vpcie12v;
-	struct regulator *vpcie3v3;
-	struct regulator *vpcie1v8;
-	struct regulator *vpcie0v9;
-	struct gpio_desc *ep_gpio;
-	u32 lanes;
-	u8 lanes_map;
-	int link_gen;
-	struct device *dev;
-	struct irq_domain *irq_domain;
-	int offset;
-	void *msg_region;
-	phys_addr_t msg_bus_addr;
-	bool is_rc;
-	struct resource *mem_res;
-};
-
-struct rockchip_pcie_ep {
-	struct rockchip_pcie rockchip;
-	struct pci_epc *epc;
-	u32 max_regions;
-	long unsigned int ob_region_map;
-	phys_addr_t *ob_addr;
-	phys_addr_t irq_phys_addr;
-	void *irq_cpu_addr;
-	u64 irq_pci_addr;
-	u8 irq_pci_fn;
-	u8 irq_pending;
-};
-
-struct mtk_pcie_port;
-
-struct mtk_pcie_soc {
-	bool need_fix_class_id;
-	bool need_fix_device_id;
-	unsigned int device_id;
 	struct pci_ops *ops;
-	int (*startup)(struct mtk_pcie_port *);
-	int (*setup_irq)(struct mtk_pcie_port *, struct device_node *);
 };
 
-struct mtk_pcie;
-
-struct mtk_pcie_port {
-	void *base;
-	struct list_head list;
-	struct mtk_pcie *pcie;
-	struct reset_control *reset;
-	struct clk *sys_ck;
-	struct clk *ahb_ck;
-	struct clk *axi_ck;
-	struct clk *aux_ck;
-	struct clk *obff_ck;
-	struct clk *pipe_ck;
-	struct phy *phy;
-	u32 slot;
-	int irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	struct mutex lock;
-	long unsigned int msi_irq_in_use[1];
+struct loongson_pci {
+	void *cfg0_base;
+	void *cfg1_base;
+	struct platform_device *pdev;
+	const struct loongson_pci_data *data;
 };
 
-struct mtk_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *free_ck;
-	struct list_head ports;
-	const struct mtk_pcie_soc *soc;
+struct dp_sdp_header {
+	u8 HB0;
+	u8 HB1;
+	u8 HB2;
+	u8 HB3;
 };
 
-enum {
-	RGR1_SW_INIT_1 = 0,
-	EXT_CFG_INDEX = 1,
-	EXT_CFG_DATA = 2,
-};
-
-enum pcie_type {
-	GENERIC = 0,
-	BCM7278 = 1,
-	BCM2711 = 2,
-};
-
-struct brcm_pcie;
-
-struct pcie_cfg_data {
-	const int *offsets;
-	const enum pcie_type type;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi;
-
-struct brcm_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *clk;
-	struct device_node *np;
-	bool ssc;
-	int gen;
-	u64 msi_target_addr;
-	struct brcm_msi *msi;
-	const int *reg_offsets;
-	enum pcie_type type;
-	struct reset_control *rescal;
-	int num_memc;
-	u64 memc_size[3];
-	u32 hw_rev;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi {
-	struct device *dev;
-	void *base;
-	struct device_node *np;
-	struct irq_domain *msi_domain;
-	struct irq_domain *inner_domain;
-	struct mutex lock;
-	u64 target_addr;
-	int irq;
-	long unsigned int used;
-	bool legacy;
-	int legacy_shift;
-	int nr;
-	void *intr_base;
-};
-
-enum dw_pcie_region_type {
-	DW_PCIE_REGION_UNKNOWN = 0,
-	DW_PCIE_REGION_INBOUND = 1,
-	DW_PCIE_REGION_OUTBOUND = 2,
-};
-
-struct pcie_port;
-
-struct dw_pcie_host_ops {
-	int (*host_init)(struct pcie_port *);
-	void (*set_num_vectors)(struct pcie_port *);
-	int (*msi_host_init)(struct pcie_port *);
-};
-
-struct pcie_port {
-	u64 cfg0_base;
-	void *va_cfg0_base;
-	u32 cfg0_size;
-	resource_size_t io_base;
-	phys_addr_t io_bus_addr;
-	u32 io_size;
-	int irq;
-	const struct dw_pcie_host_ops *ops;
-	int msi_irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *msi_domain;
-	u16 msi_msg;
-	dma_addr_t msi_data;
-	struct irq_chip *msi_irq_chip;
-	u32 num_vectors;
-	u32 irq_mask[8];
-	struct pci_host_bridge *bridge;
-	raw_spinlock_t lock;
-	long unsigned int msi_irq_in_use[4];
-};
-
-enum dw_pcie_as_type {
-	DW_PCIE_AS_UNKNOWN = 0,
-	DW_PCIE_AS_MEM = 1,
-	DW_PCIE_AS_IO = 2,
-};
-
-struct dw_pcie_ep;
-
-struct dw_pcie_ep_ops {
-	void (*ep_init)(struct dw_pcie_ep *);
-	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
-	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
-	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
-};
-
-struct dw_pcie_ep {
-	struct pci_epc *epc;
-	struct list_head func_list;
-	const struct dw_pcie_ep_ops *ops;
-	phys_addr_t phys_base;
-	size_t addr_size;
-	size_t page_size;
-	u8 bar_to_atu[6];
-	phys_addr_t *outbound_addr;
-	long unsigned int *ib_window_map;
-	long unsigned int *ob_window_map;
-	u32 num_ib_windows;
-	u32 num_ob_windows;
-	void *msi_mem;
-	phys_addr_t msi_mem_phys;
-	struct pci_epf_bar *epf_bar[6];
-};
-
-struct dw_pcie;
-
-struct dw_pcie_ops {
-	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
-	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
-	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
-	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
-	int (*link_up)(struct dw_pcie *);
-	int (*start_link)(struct dw_pcie *);
-	void (*stop_link)(struct dw_pcie *);
-};
-
-struct dw_pcie {
-	struct device *dev;
-	void *dbi_base;
-	void *dbi_base2;
-	void *atu_base;
-	u32 num_viewport;
-	u8 iatu_unroll_enabled;
-	struct pcie_port pp;
-	struct dw_pcie_ep ep;
-	const struct dw_pcie_ops *ops;
-	unsigned int version;
-	int num_lanes;
-	int link_gen;
-	u8 n_fts[2];
-};
-
-struct pci_epf_msix_tbl {
-	u64 msg_addr;
-	u32 msg_data;
-	u32 vector_ctrl;
-};
-
-struct dw_pcie_ep_func {
-	struct list_head list;
-	u8 func_no;
-	u8 msi_cap;
-	u8 msix_cap;
-};
-
-enum dw_pcie_device_mode {
-	DW_PCIE_UNKNOWN_TYPE = 0,
-	DW_PCIE_EP_TYPE = 1,
-	DW_PCIE_LEG_EP_TYPE = 2,
-	DW_PCIE_RC_TYPE = 3,
-};
-
-struct dw_plat_pcie {
-	struct dw_pcie *pci;
-	struct regmap *regmap;
-	enum dw_pcie_device_mode mode;
-};
-
-struct dw_plat_pcie_of_data {
-	enum dw_pcie_device_mode mode;
-};
-
-struct qcom_pcie_resources_2_1_0 {
-	struct clk_bulk_data clks[5];
-	struct reset_control *pci_reset;
-	struct reset_control *axi_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *por_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *ext_reset;
-	struct regulator_bulk_data supplies[3];
-};
-
-struct qcom_pcie_resources_1_0_0 {
-	struct clk *iface;
-	struct clk *aux;
-	struct clk *master_bus;
-	struct clk *slave_bus;
-	struct reset_control *core;
-	struct regulator *vdda;
-};
-
-struct qcom_pcie_resources_2_3_2 {
-	struct clk *aux_clk;
-	struct clk *master_clk;
-	struct clk *slave_clk;
-	struct clk *cfg_clk;
-	struct clk *pipe_clk;
-	struct regulator_bulk_data supplies[2];
-};
-
-struct qcom_pcie_resources_2_4_0 {
-	struct clk_bulk_data clks[4];
-	int num_clks;
-	struct reset_control *axi_m_reset;
-	struct reset_control *axi_s_reset;
-	struct reset_control *pipe_reset;
-	struct reset_control *axi_m_vmid_reset;
-	struct reset_control *axi_s_xpu_reset;
-	struct reset_control *parf_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *axi_m_sticky_reset;
-	struct reset_control *pipe_sticky_reset;
-	struct reset_control *pwr_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *phy_ahb_reset;
-};
-
-struct qcom_pcie_resources_2_3_3 {
-	struct clk *iface;
-	struct clk *axi_m_clk;
-	struct clk *axi_s_clk;
-	struct clk *ahb_clk;
-	struct clk *aux_clk;
-	struct reset_control *rst[7];
-};
-
-struct qcom_pcie_resources_2_7_0 {
-	struct clk_bulk_data clks[6];
-	struct regulator_bulk_data supplies[2];
-	struct reset_control *pci_reset;
-	struct clk *pipe_clk;
-};
-
-union qcom_pcie_resources {
-	struct qcom_pcie_resources_1_0_0 v1_0_0;
-	struct qcom_pcie_resources_2_1_0 v2_1_0;
-	struct qcom_pcie_resources_2_3_2 v2_3_2;
-	struct qcom_pcie_resources_2_3_3 v2_3_3;
-	struct qcom_pcie_resources_2_4_0 v2_4_0;
-	struct qcom_pcie_resources_2_7_0 v2_7_0;
-};
-
-struct qcom_pcie;
-
-struct qcom_pcie_ops {
-	int (*get_resources)(struct qcom_pcie *);
-	int (*init)(struct qcom_pcie *);
-	int (*post_init)(struct qcom_pcie *);
-	void (*deinit)(struct qcom_pcie *);
-	void (*post_deinit)(struct qcom_pcie *);
-	void (*ltssm_enable)(struct qcom_pcie *);
-};
-
-struct qcom_pcie {
-	struct dw_pcie *pci;
-	void *parf;
-	void *elbi;
-	union qcom_pcie_resources res;
-	struct phy *phy;
-	struct gpio_desc *reset;
-	const struct qcom_pcie_ops *ops;
-};
-
-struct armada8k_pcie {
-	struct dw_pcie *pci;
-	struct clk *clk;
-	struct clk *clk_reg;
-	struct phy *phy[4];
-	unsigned int phy_count;
-};
-
-struct kirin_pcie {
-	struct dw_pcie *pci;
-	void *apb_base;
-	void *phy_base;
-	struct regmap *crgctrl;
-	struct regmap *sysctrl;
-	struct clk *apb_sys_clk;
-	struct clk *apb_phy_clk;
-	struct clk *phy_ref_clk;
-	struct clk *pcie_aclk;
-	struct clk *pcie_aux_clk;
-	int gpio_id_reset;
-};
-
-struct histb_pcie {
-	struct dw_pcie *pci;
-	struct clk *aux_clk;
-	struct clk *pipe_clk;
-	struct clk *sys_clk;
-	struct clk *bus_clk;
-	struct phy *phy;
-	struct reset_control *soft_reset;
-	struct reset_control *sys_reset;
-	struct reset_control *bus_reset;
-	void *ctrl;
-	int reset_gpio;
-	struct regulator *vpcie;
-};
-
-enum pcie_data_rate {
-	PCIE_GEN1 = 0,
-	PCIE_GEN2 = 1,
-	PCIE_GEN3 = 2,
-	PCIE_GEN4 = 3,
-};
-
-struct meson_pcie_clk_res {
-	struct clk *clk;
-	struct clk *port_clk;
-	struct clk *general_clk;
-};
-
-struct meson_pcie_rc_reset {
-	struct reset_control *port;
-	struct reset_control *apb;
-};
-
-struct meson_pcie {
-	struct dw_pcie pci;
-	void *cfg_base;
-	struct meson_pcie_clk_res clk_res;
-	struct meson_pcie_rc_reset mrst;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
-};
-
-struct al_pcie_acpi {
-	void *dbi_base;
-};
-
-struct thunder_pem_pci {
-	u32 ea_entry[3];
-	void *pem_reg_base;
-};
-
-struct xgene_pcie_port {
-	struct device_node *node;
-	struct device *dev;
-	struct clk *clk;
-	void *csr_base;
-	void *cfg_base;
-	long unsigned int cfg_addr;
-	bool link_up;
-	u32 version;
-};
-
-struct rio_device_id {
-	__u16 did;
-	__u16 vid;
-	__u16 asm_did;
-	__u16 asm_vid;
-};
-
-typedef s32 dma_cookie_t;
-
-enum dma_status {
-	DMA_COMPLETE = 0,
-	DMA_IN_PROGRESS = 1,
-	DMA_PAUSED = 2,
-	DMA_ERROR = 3,
-	DMA_OUT_OF_ORDER = 4,
-};
-
-enum dma_transaction_type {
-	DMA_MEMCPY = 0,
-	DMA_XOR = 1,
-	DMA_PQ = 2,
-	DMA_XOR_VAL = 3,
-	DMA_PQ_VAL = 4,
-	DMA_MEMSET = 5,
-	DMA_MEMSET_SG = 6,
-	DMA_INTERRUPT = 7,
-	DMA_PRIVATE = 8,
-	DMA_ASYNC_TX = 9,
-	DMA_SLAVE = 10,
-	DMA_CYCLIC = 11,
-	DMA_INTERLEAVE = 12,
-	DMA_COMPLETION_NO_ORDER = 13,
-	DMA_REPEAT = 14,
-	DMA_LOAD_EOT = 15,
-	DMA_TX_TYPE_END = 16,
-};
-
-enum dma_transfer_direction {
-	DMA_MEM_TO_MEM = 0,
-	DMA_MEM_TO_DEV = 1,
-	DMA_DEV_TO_MEM = 2,
-	DMA_DEV_TO_DEV = 3,
-	DMA_TRANS_NONE = 4,
-};
-
-struct data_chunk {
-	size_t size;
-	size_t icg;
-	size_t dst_icg;
-	size_t src_icg;
-};
-
-struct dma_interleaved_template {
-	dma_addr_t src_start;
-	dma_addr_t dst_start;
-	enum dma_transfer_direction dir;
-	bool src_inc;
-	bool dst_inc;
-	bool src_sgl;
-	bool dst_sgl;
-	size_t numf;
-	size_t frame_size;
-	struct data_chunk sgl[0];
-};
-
-enum dma_ctrl_flags {
-	DMA_PREP_INTERRUPT = 1,
-	DMA_CTRL_ACK = 2,
-	DMA_PREP_PQ_DISABLE_P = 4,
-	DMA_PREP_PQ_DISABLE_Q = 8,
-	DMA_PREP_CONTINUE = 16,
-	DMA_PREP_FENCE = 32,
-	DMA_CTRL_REUSE = 64,
-	DMA_PREP_CMD = 128,
-	DMA_PREP_REPEAT = 256,
-	DMA_PREP_LOAD_EOT = 512,
-};
-
-enum sum_check_bits {
-	SUM_CHECK_P = 0,
-	SUM_CHECK_Q = 1,
-};
-
-enum sum_check_flags {
-	SUM_CHECK_P_RESULT = 1,
-	SUM_CHECK_Q_RESULT = 2,
-};
-
-typedef struct {
-	long unsigned int bits[1];
-} dma_cap_mask_t;
-
-enum dma_desc_metadata_mode {
-	DESC_METADATA_NONE = 0,
-	DESC_METADATA_CLIENT = 1,
-	DESC_METADATA_ENGINE = 2,
-};
-
-struct dma_chan_percpu {
-	long unsigned int memcpy_count;
-	long unsigned int bytes_transferred;
-};
-
-struct dma_router {
-	struct device *dev;
-	void (*route_free)(struct device *, void *);
-};
-
-struct dma_device;
-
-struct dma_chan_dev;
-
-struct dma_chan {
-	struct dma_device *device;
-	struct device *slave;
-	dma_cookie_t cookie;
-	dma_cookie_t completed_cookie;
-	int chan_id;
-	struct dma_chan_dev *dev;
-	const char *name;
-	char *dbg_client_name;
-	struct list_head device_node;
-	struct dma_chan_percpu *local;
-	int client_count;
-	int table_count;
-	struct dma_router *router;
-	void *route_data;
-	void *private;
-};
-
-typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
-
-struct dma_slave_map;
-
-struct dma_filter {
-	dma_filter_fn fn;
-	int mapcnt;
-	const struct dma_slave_map *map;
-};
-
-enum dmaengine_alignment {
-	DMAENGINE_ALIGN_1_BYTE = 0,
-	DMAENGINE_ALIGN_2_BYTES = 1,
-	DMAENGINE_ALIGN_4_BYTES = 2,
-	DMAENGINE_ALIGN_8_BYTES = 3,
-	DMAENGINE_ALIGN_16_BYTES = 4,
-	DMAENGINE_ALIGN_32_BYTES = 5,
-	DMAENGINE_ALIGN_64_BYTES = 6,
-};
-
-enum dma_residue_granularity {
-	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
-	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
-	DMA_RESIDUE_GRANULARITY_BURST = 2,
-};
-
-struct dma_async_tx_descriptor;
-
-struct dma_slave_caps;
-
-struct dma_slave_config;
-
-struct dma_tx_state;
-
-struct dma_device {
-	struct kref ref;
-	unsigned int chancnt;
-	unsigned int privatecnt;
-	struct list_head channels;
-	struct list_head global_node;
-	struct dma_filter filter;
-	dma_cap_mask_t cap_mask;
-	enum dma_desc_metadata_mode desc_metadata_modes;
-	short unsigned int max_xor;
-	short unsigned int max_pq;
-	enum dmaengine_alignment copy_align;
-	enum dmaengine_alignment xor_align;
-	enum dmaengine_alignment pq_align;
-	enum dmaengine_alignment fill_align;
-	int dev_id;
-	struct device *dev;
-	struct module *owner;
-	struct ida chan_ida;
-	struct mutex chan_mutex;
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool descriptor_reuse;
-	enum dma_residue_granularity residue_granularity;
-	int (*device_alloc_chan_resources)(struct dma_chan *);
-	void (*device_free_chan_resources)(struct dma_chan *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
-	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
-	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
-	int (*device_pause)(struct dma_chan *);
-	int (*device_resume)(struct dma_chan *);
-	int (*device_terminate_all)(struct dma_chan *);
-	void (*device_synchronize)(struct dma_chan *);
-	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
-	void (*device_issue_pending)(struct dma_chan *);
-	void (*device_release)(struct dma_device *);
-	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
-	struct dentry *dbg_dev_root;
-};
-
-struct dma_chan_dev {
-	struct dma_chan *chan;
-	struct device device;
-	int dev_id;
-};
-
-enum dma_slave_buswidth {
-	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
-	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
-	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
-	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
-	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
-	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
-	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
-	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
-	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
-};
-
-struct dma_slave_config {
-	enum dma_transfer_direction direction;
-	phys_addr_t src_addr;
-	phys_addr_t dst_addr;
-	enum dma_slave_buswidth src_addr_width;
-	enum dma_slave_buswidth dst_addr_width;
-	u32 src_maxburst;
-	u32 dst_maxburst;
-	u32 src_port_window_size;
-	u32 dst_port_window_size;
-	bool device_fc;
-	unsigned int slave_id;
-};
-
-struct dma_slave_caps {
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool cmd_pause;
-	bool cmd_resume;
-	bool cmd_terminate;
-	enum dma_residue_granularity residue_granularity;
-	bool descriptor_reuse;
-};
-
-typedef void (*dma_async_tx_callback)(void *);
-
-enum dmaengine_tx_result {
-	DMA_TRANS_NOERROR = 0,
-	DMA_TRANS_READ_FAILED = 1,
-	DMA_TRANS_WRITE_FAILED = 2,
-	DMA_TRANS_ABORTED = 3,
-};
-
-struct dmaengine_result {
-	enum dmaengine_tx_result result;
-	u32 residue;
-};
-
-typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
-
-struct dmaengine_unmap_data {
-	u16 map_cnt;
-	u8 to_cnt;
-	u8 from_cnt;
-	u8 bidi_cnt;
-	struct device *dev;
-	struct kref kref;
-	size_t len;
-	dma_addr_t addr[0];
-};
-
-struct dma_descriptor_metadata_ops {
-	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
-	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
-	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
-};
-
-struct dma_async_tx_descriptor {
-	dma_cookie_t cookie;
-	enum dma_ctrl_flags flags;
-	dma_addr_t phys;
-	struct dma_chan *chan;
-	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
-	int (*desc_free)(struct dma_async_tx_descriptor *);
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-	struct dmaengine_unmap_data *unmap;
-	enum dma_desc_metadata_mode desc_metadata_mode;
-	struct dma_descriptor_metadata_ops *metadata_ops;
-	struct dma_async_tx_descriptor *next;
-	struct dma_async_tx_descriptor *parent;
-	spinlock_t lock;
-};
-
-struct dma_tx_state {
-	dma_cookie_t last;
-	dma_cookie_t used;
-	u32 residue;
-	u32 in_flight_bytes;
-};
-
-struct dma_slave_map {
-	const char *devname;
-	const char *slave;
-	void *param;
-};
-
-struct rio_switch_ops;
-
-struct rio_dev;
-
-struct rio_switch {
-	struct list_head node;
-	u8 *route_table;
-	u32 port_ok;
-	struct rio_switch_ops *ops;
-	spinlock_t lock;
-	struct rio_dev *nextdev[0];
-};
-
-struct rio_mport;
-
-struct rio_switch_ops {
-	struct module *owner;
-	int (*add_entry)(struct rio_mport *, u16, u8, u16, u16, u8);
-	int (*get_entry)(struct rio_mport *, u16, u8, u16, u16, u8 *);
-	int (*clr_table)(struct rio_mport *, u16, u8, u16);
-	int (*set_domain)(struct rio_mport *, u16, u8, u8);
-	int (*get_domain)(struct rio_mport *, u16, u8, u8 *);
-	int (*em_init)(struct rio_dev *);
-	int (*em_handle)(struct rio_dev *, u8);
-};
-
-struct rio_net;
-
-struct rio_driver;
-
-union rio_pw_msg;
-
-struct rio_dev {
-	struct list_head global_list;
-	struct list_head net_list;
-	struct rio_net *net;
-	bool do_enum;
-	u16 did;
-	u16 vid;
-	u32 device_rev;
-	u16 asm_did;
-	u16 asm_vid;
-	u16 asm_rev;
-	u16 efptr;
-	u32 pef;
-	u32 swpinfo;
-	u32 src_ops;
-	u32 dst_ops;
-	u32 comp_tag;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	u32 em_efptr;
-	u64 dma_mask;
-	struct rio_driver *driver;
-	struct device dev;
-	struct resource riores[16];
-	int (*pwcback)(struct rio_dev *, union rio_pw_msg *, int);
-	u16 destid;
-	u8 hopcount;
-	struct rio_dev *prev;
-	atomic_t state;
-	struct rio_switch rswitch[0];
-};
-
-struct rio_msg {
-	struct resource *res;
-	void (*mcback)(struct rio_mport *, void *, int, int);
-};
-
-struct rio_ops;
-
-struct rio_scan;
-
-struct rio_mport {
-	struct list_head dbells;
-	struct list_head pwrites;
-	struct list_head node;
-	struct list_head nnode;
-	struct rio_net *net;
-	struct mutex lock;
-	struct resource iores;
-	struct resource riores[16];
-	struct rio_msg inb_msg[4];
-	struct rio_msg outb_msg[4];
-	int host_deviceid;
-	struct rio_ops *ops;
-	unsigned char id;
-	unsigned char index;
-	unsigned int sys_size;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	unsigned char name[40];
-	struct device dev;
-	void *priv;
-	struct dma_device dma;
-	struct rio_scan *nscan;
-	atomic_t state;
-	unsigned int pwe_refcnt;
-};
-
-enum rio_device_state {
-	RIO_DEVICE_INITIALIZING = 0,
-	RIO_DEVICE_RUNNING = 1,
-	RIO_DEVICE_GONE = 2,
-	RIO_DEVICE_SHUTDOWN = 3,
-};
-
-struct rio_net {
-	struct list_head node;
-	struct list_head devices;
-	struct list_head switches;
-	struct list_head mports;
-	struct rio_mport *hport;
-	unsigned char id;
-	struct device dev;
-	void *enum_data;
-	void (*release)(struct rio_net *);
-};
-
-struct rio_driver {
-	struct list_head node;
-	char *name;
-	const struct rio_device_id *id_table;
-	int (*probe)(struct rio_dev *, const struct rio_device_id *);
-	void (*remove)(struct rio_dev *);
-	void (*shutdown)(struct rio_dev *);
-	int (*suspend)(struct rio_dev *, u32);
-	int (*resume)(struct rio_dev *);
-	int (*enable_wake)(struct rio_dev *, u32, int);
-	struct device_driver driver;
-};
-
-union rio_pw_msg {
-	struct {
-		u32 comptag;
-		u32 errdetect;
-		u32 is_port;
-		u32 ltlerrdet;
-		u32 padding[12];
-	} em;
-	u32 raw[16];
-};
-
-struct rio_dbell {
-	struct list_head node;
-	struct resource *res;
-	void (*dinb)(struct rio_mport *, void *, u16, u16, u16);
-	void *dev_id;
-};
-
-struct rio_mport_attr;
-
-struct rio_ops {
-	int (*lcread)(struct rio_mport *, int, u32, int, u32 *);
-	int (*lcwrite)(struct rio_mport *, int, u32, int, u32);
-	int (*cread)(struct rio_mport *, int, u16, u8, u32, int, u32 *);
-	int (*cwrite)(struct rio_mport *, int, u16, u8, u32, int, u32);
-	int (*dsend)(struct rio_mport *, int, u16, u16);
-	int (*pwenable)(struct rio_mport *, int);
-	int (*open_outb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_outb_mbox)(struct rio_mport *, int);
-	int (*open_inb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_inb_mbox)(struct rio_mport *, int);
-	int (*add_outb_message)(struct rio_mport *, struct rio_dev *, int, void *, size_t);
-	int (*add_inb_buffer)(struct rio_mport *, int, void *);
-	void * (*get_inb_message)(struct rio_mport *, int);
-	int (*map_inb)(struct rio_mport *, dma_addr_t, u64, u64, u32);
-	void (*unmap_inb)(struct rio_mport *, dma_addr_t);
-	int (*query_mport)(struct rio_mport *, struct rio_mport_attr *);
-	int (*map_outb)(struct rio_mport *, u16, u64, u32, u32, dma_addr_t *);
-	void (*unmap_outb)(struct rio_mport *, u16, u64);
-};
-
-struct rio_scan {
-	struct module *owner;
-	int (*enumerate)(struct rio_mport *, u32);
-	int (*discover)(struct rio_mport *, u32);
-};
-
-struct rio_mport_attr {
-	int flags;
-	int link_speed;
-	int link_width;
-	int dma_max_sge;
-	int dma_max_size;
-	int dma_align;
-};
-
-enum rio_write_type {
-	RDW_DEFAULT = 0,
-	RDW_ALL_NWRITE = 1,
-	RDW_ALL_NWRITE_R = 2,
-	RDW_LAST_NWRITE_R = 3,
-};
-
-struct rio_dma_ext {
-	u16 destid;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum rio_write_type wr_type;
-};
-
-struct rio_dma_data {
-	struct scatterlist *sg;
-	unsigned int sg_len;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum rio_write_type wr_type;
-};
-
-struct rio_scan_node {
-	int mport_id;
-	struct list_head node;
-	struct rio_scan *ops;
-};
-
-struct rio_pwrite {
-	struct list_head node;
-	int (*pwcback)(struct rio_mport *, void *, union rio_pw_msg *, int);
-	void *context;
-};
-
-struct rio_disc_work {
-	struct work_struct work;
-	struct rio_mport *mport;
-};
-
-enum rio_link_speed {
-	RIO_LINK_DOWN = 0,
-	RIO_LINK_125 = 1,
-	RIO_LINK_250 = 2,
-	RIO_LINK_312 = 3,
-	RIO_LINK_500 = 4,
-	RIO_LINK_625 = 5,
-};
-
-enum rio_mport_flags {
-	RIO_MPORT_DMA = 1,
-	RIO_MPORT_DMA_SG = 2,
-	RIO_MPORT_IBSG = 4,
-};
-
-struct kfifo {
-	union {
-		struct __kfifo kfifo;
-		unsigned char *type;
-		const unsigned char *const_type;
-		char (*rectype)[0];
-		void *ptr;
-		const void *ptr_const;
-	};
-	unsigned char buf[0];
-};
-
-enum {
-	DBG_NONE = 0,
-	DBG_INIT = 1,
-	DBG_EXIT = 2,
-	DBG_MPORT = 4,
-	DBG_MAINT = 8,
-	DBG_DMA = 16,
-	DBG_DMAV = 32,
-	DBG_IBW = 64,
-	DBG_EVENT = 128,
-	DBG_OBW = 256,
-	DBG_DBELL = 512,
-	DBG_OMSG = 1024,
-	DBG_IMSG = 2048,
-	DBG_ALL = 4294967295,
-};
-
-struct tsi721_dma_desc {
-	__le32 type_id;
-	__le32 bcount;
-	union {
-		__le32 raddr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 raddr_hi;
-		__le32 next_hi;
-	};
-	union {
-		struct {
-			__le32 bufptr_lo;
-			__le32 bufptr_hi;
-			__le32 s_dist;
-			__le32 s_size;
-		} t1;
-		__le32 data[4];
-		u32 reserved[4];
-	};
-};
-
-struct tsi721_imsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	__le32 bufptr_lo;
-	__le32 bufptr_hi;
-	u32 reserved[12];
-};
-
-struct tsi721_omsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	union {
-		__le32 bufptr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 bufptr_hi;
-		__le32 next_hi;
-	};
-};
-
-enum dma_dtype {
-	DTYPE1 = 1,
-	DTYPE2 = 2,
-	DTYPE3 = 3,
-	DTYPE4 = 4,
-	DTYPE5 = 5,
-	DTYPE6 = 6,
-};
-
-enum dma_rtype {
-	NREAD = 0,
-	LAST_NWRITE_R = 1,
-	ALL_NWRITE = 2,
-	ALL_NWRITE_R = 3,
-	MAINT_RD = 4,
-	MAINT_WR = 5,
-};
-
-struct tsi721_tx_desc {
-	struct dma_async_tx_descriptor txd;
-	u16 destid;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum dma_rtype rtype;
-	struct list_head desc_node;
-	struct scatterlist *sg;
-	unsigned int sg_len;
-	enum dma_status status;
-};
-
-struct tsi721_bdma_chan {
-	int id;
-	void *regs;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-	u32 sts_rdptr;
-	u32 wr_count;
-	u32 wr_count_next;
-	struct dma_chan dchan;
-	struct tsi721_tx_desc *tx_desc;
-	spinlock_t lock;
-	struct tsi721_tx_desc *active_tx;
-	struct list_head queue;
-	struct list_head free_list;
-	struct tasklet_struct tasklet;
-	bool active;
-};
-
-struct tsi721_bdma_maint {
-	int ch_id;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-};
-
-struct tsi721_imsg_ring {
-	u32 size;
-	void *buf_base;
-	dma_addr_t buf_phys;
-	void *imfq_base;
-	dma_addr_t imfq_phys;
-	void *imd_base;
-	dma_addr_t imd_phys;
-	void *imq_base[512];
-	u32 rx_slot;
-	void *dev_id;
-	u32 fq_wrptr;
-	u32 desc_rdptr;
-	spinlock_t lock;
-};
-
-struct tsi721_omsg_ring {
-	u32 size;
-	void *omd_base;
-	dma_addr_t omd_phys;
-	void *omq_base[512];
-	dma_addr_t omq_phys[512];
-	void *sts_base;
-	dma_addr_t sts_phys;
-	u32 sts_size;
-	u32 sts_rdptr;
-	u32 tx_slot;
-	void *dev_id;
-	u32 wr_count;
-	spinlock_t lock;
-};
-
-enum tsi721_flags {
-	TSI721_USING_MSI = 1,
-	TSI721_USING_MSIX = 2,
-	TSI721_IMSGID_SET = 4,
-};
-
-enum tsi721_msix_vect {
-	TSI721_VECT_IDB = 0,
-	TSI721_VECT_PWRX = 1,
-	TSI721_VECT_OMB0_DONE = 2,
-	TSI721_VECT_OMB1_DONE = 3,
-	TSI721_VECT_OMB2_DONE = 4,
-	TSI721_VECT_OMB3_DONE = 5,
-	TSI721_VECT_OMB0_INT = 6,
-	TSI721_VECT_OMB1_INT = 7,
-	TSI721_VECT_OMB2_INT = 8,
-	TSI721_VECT_OMB3_INT = 9,
-	TSI721_VECT_IMB0_RCV = 10,
-	TSI721_VECT_IMB1_RCV = 11,
-	TSI721_VECT_IMB2_RCV = 12,
-	TSI721_VECT_IMB3_RCV = 13,
-	TSI721_VECT_IMB0_INT = 14,
-	TSI721_VECT_IMB1_INT = 15,
-	TSI721_VECT_IMB2_INT = 16,
-	TSI721_VECT_IMB3_INT = 17,
-	TSI721_VECT_DMA0_DONE = 18,
-	TSI721_VECT_DMA1_DONE = 19,
-	TSI721_VECT_DMA2_DONE = 20,
-	TSI721_VECT_DMA3_DONE = 21,
-	TSI721_VECT_DMA4_DONE = 22,
-	TSI721_VECT_DMA5_DONE = 23,
-	TSI721_VECT_DMA6_DONE = 24,
-	TSI721_VECT_DMA7_DONE = 25,
-	TSI721_VECT_DMA0_INT = 26,
-	TSI721_VECT_DMA1_INT = 27,
-	TSI721_VECT_DMA2_INT = 28,
-	TSI721_VECT_DMA3_INT = 29,
-	TSI721_VECT_DMA4_INT = 30,
-	TSI721_VECT_DMA5_INT = 31,
-	TSI721_VECT_DMA6_INT = 32,
-	TSI721_VECT_DMA7_INT = 33,
-	TSI721_VECT_MAX = 34,
-};
-
-struct msix_irq {
-	u16 vector;
-	char irq_name[64];
-};
-
-struct tsi721_ib_win_mapping {
-	struct list_head node;
-	dma_addr_t lstart;
-};
-
-struct tsi721_ib_win {
-	u64 rstart;
-	u32 size;
-	dma_addr_t lstart;
-	bool active;
-	bool xlat;
-	struct list_head mappings;
-};
-
-struct tsi721_obw_bar {
-	u64 base;
-	u64 size;
-	u64 free;
-};
-
-struct tsi721_ob_win {
-	u64 base;
-	u32 size;
-	u16 destid;
-	u64 rstart;
-	bool active;
-	struct tsi721_obw_bar *pbar;
-};
-
-struct tsi721_device {
-	struct pci_dev *pdev;
-	struct rio_mport mport;
-	u32 flags;
-	void *regs;
-	struct msix_irq msix[34];
-	void *odb_base;
-	void *idb_base;
-	dma_addr_t idb_dma;
-	struct work_struct idb_work;
-	u32 db_discard_count;
-	struct work_struct pw_work;
-	struct kfifo pw_fifo;
-	spinlock_t pw_fifo_lock;
-	u32 pw_discard_count;
-	struct tsi721_bdma_maint mdma;
-	struct tsi721_bdma_chan bdma[8];
-	int imsg_init[8];
-	struct tsi721_imsg_ring imsg_ring[8];
-	int omsg_init[4];
-	struct tsi721_omsg_ring omsg_ring[4];
-	struct tsi721_ib_win ib_win[8];
-	int ibwin_cnt;
-	struct tsi721_obw_bar p2r_bar[2];
-	struct tsi721_ob_win ob_win[8];
-	int obwin_cnt;
+struct dp_sdp {
+	struct dp_sdp_header sdp_header;
+	u8 db[32];
 };
 
 enum hdmi_infoframe_type {
@@ -66687,15 +113256,6 @@
 	HDMI_COLORIMETRY_EXTENDED = 3,
 };
 
-enum hdmi_picture_aspect {
-	HDMI_PICTURE_ASPECT_NONE = 0,
-	HDMI_PICTURE_ASPECT_4_3 = 1,
-	HDMI_PICTURE_ASPECT_16_9 = 2,
-	HDMI_PICTURE_ASPECT_64_27 = 3,
-	HDMI_PICTURE_ASPECT_256_135 = 4,
-	HDMI_PICTURE_ASPECT_RESERVED = 5,
-};
-
 enum hdmi_active_aspect {
 	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
 	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
@@ -66747,7 +113307,7 @@
 };
 
 enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
+	HDMI_STATIC_METADATA_TYPE1 = 0,
 };
 
 enum hdmi_eotf {
@@ -66891,7 +113451,7 @@
 };
 
 enum hdmi_3d_structure {
-	HDMI_3D_STRUCTURE_INVALID = 4294967295,
+	HDMI_3D_STRUCTURE_INVALID = -1,
 	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
 	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
 	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
@@ -66931,1110 +113491,28 @@
 	struct hdmi_drm_infoframe drm;
 };
 
-enum con_scroll {
-	SM_UP = 0,
-	SM_DOWN = 1,
+struct lcd_properties {
+	int max_contrast;
 };
 
-enum vc_intensity {
-	VCI_HALF_BRIGHT = 0,
-	VCI_NORMAL = 1,
-	VCI_BOLD = 2,
-	VCI_MASK = 3,
+struct lcd_device;
+
+struct lcd_ops {
+	int (*get_power)(struct lcd_device *);
+	int (*set_power)(struct lcd_device *, int);
+	int (*get_contrast)(struct lcd_device *);
+	int (*set_contrast)(struct lcd_device *, int);
+	int (*set_mode)(struct lcd_device *, struct fb_videomode *);
+	int (*check_fb)(struct lcd_device *, struct fb_info *);
 };
 
-struct vc_data;
-
-struct console_font;
-
-struct consw {
-	struct module *owner;
-	const char * (*con_startup)();
-	void (*con_init)(struct vc_data *, int);
-	void (*con_deinit)(struct vc_data *);
-	void (*con_clear)(struct vc_data *, int, int, int, int);
-	void (*con_putc)(struct vc_data *, int, int, int);
-	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
-	void (*con_cursor)(struct vc_data *, int);
-	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
-	int (*con_switch)(struct vc_data *);
-	int (*con_blank)(struct vc_data *, int, int);
-	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
-	int (*con_font_get)(struct vc_data *, struct console_font *);
-	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
-	int (*con_font_copy)(struct vc_data *, int);
-	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
-	void (*con_set_palette)(struct vc_data *, const unsigned char *);
-	void (*con_scrolldelta)(struct vc_data *, int);
-	int (*con_set_origin)(struct vc_data *);
-	void (*con_save_screen)(struct vc_data *);
-	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
-	void (*con_invert_region)(struct vc_data *, u16 *, int);
-	u16 * (*con_screen_pos)(const struct vc_data *, int);
-	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
-	void (*con_flush_scrollback)(struct vc_data *);
-	int (*con_debug_enter)(struct vc_data *);
-	int (*con_debug_leave)(struct vc_data *);
-};
-
-struct vc_state {
-	unsigned int x;
-	unsigned int y;
-	unsigned char color;
-	unsigned char Gx_charset[2];
-	unsigned int charset: 1;
-	enum vc_intensity intensity;
-	bool italic;
-	bool underline;
-	bool blink;
-	bool reverse;
-};
-
-struct console_font {
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_mode {
-	char mode;
-	char waitv;
-	short int relsig;
-	short int acqsig;
-	short int frsig;
-};
-
-struct uni_pagedir;
-
-struct uni_screen;
-
-struct vc_data {
-	struct tty_port port;
-	struct vc_state state;
-	struct vc_state saved_state;
-	short unsigned int vc_num;
-	unsigned int vc_cols;
-	unsigned int vc_rows;
-	unsigned int vc_size_row;
-	unsigned int vc_scan_lines;
-	long unsigned int vc_origin;
-	long unsigned int vc_scr_end;
-	long unsigned int vc_visible_origin;
-	unsigned int vc_top;
-	unsigned int vc_bottom;
-	const struct consw *vc_sw;
-	short unsigned int *vc_screenbuf;
-	unsigned int vc_screenbuf_size;
-	unsigned char vc_mode;
-	unsigned char vc_attr;
-	unsigned char vc_def_color;
-	unsigned char vc_ulcolor;
-	unsigned char vc_itcolor;
-	unsigned char vc_halfcolor;
-	unsigned int vc_cursor_type;
-	short unsigned int vc_complement_mask;
-	short unsigned int vc_s_complement_mask;
-	long unsigned int vc_pos;
-	short unsigned int vc_hi_font_mask;
-	struct console_font vc_font;
-	short unsigned int vc_video_erase_char;
-	unsigned int vc_state;
-	unsigned int vc_npar;
-	unsigned int vc_par[16];
-	struct vt_mode vt_mode;
-	struct pid *vt_pid;
-	int vt_newvt;
-	wait_queue_head_t paste_wait;
-	unsigned int vc_disp_ctrl: 1;
-	unsigned int vc_toggle_meta: 1;
-	unsigned int vc_decscnm: 1;
-	unsigned int vc_decom: 1;
-	unsigned int vc_decawm: 1;
-	unsigned int vc_deccm: 1;
-	unsigned int vc_decim: 1;
-	unsigned int vc_priv: 3;
-	unsigned int vc_need_wrap: 1;
-	unsigned int vc_can_do_color: 1;
-	unsigned int vc_report_mouse: 2;
-	unsigned char vc_utf: 1;
-	unsigned char vc_utf_count;
-	int vc_utf_char;
-	long unsigned int vc_tab_stop[4];
-	unsigned char vc_palette[48];
-	short unsigned int *vc_translate;
-	unsigned int vc_resize_user;
-	unsigned int vc_bell_pitch;
-	unsigned int vc_bell_duration;
-	short unsigned int vc_cur_blink_ms;
-	struct vc_data **vc_display_fg;
-	struct uni_pagedir *vc_uni_pagedir;
-	struct uni_pagedir **vc_uni_pagedir_loc;
-	struct uni_screen *vc_uni_screen;
-};
-
-struct linux_logo {
-	int type;
-	unsigned int width;
-	unsigned int height;
-	unsigned int clutsize;
-	const unsigned char *clut;
-	const unsigned char *data;
-};
-
-struct fb_fix_screeninfo {
-	char id[16];
-	long unsigned int smem_start;
-	__u32 smem_len;
-	__u32 type;
-	__u32 type_aux;
-	__u32 visual;
-	__u16 xpanstep;
-	__u16 ypanstep;
-	__u16 ywrapstep;
-	__u32 line_length;
-	long unsigned int mmio_start;
-	__u32 mmio_len;
-	__u32 accel;
-	__u16 capabilities;
-	__u16 reserved[2];
-};
-
-struct fb_bitfield {
-	__u32 offset;
-	__u32 length;
-	__u32 msb_right;
-};
-
-struct fb_var_screeninfo {
-	__u32 xres;
-	__u32 yres;
-	__u32 xres_virtual;
-	__u32 yres_virtual;
-	__u32 xoffset;
-	__u32 yoffset;
-	__u32 bits_per_pixel;
-	__u32 grayscale;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	__u32 nonstd;
-	__u32 activate;
-	__u32 height;
-	__u32 width;
-	__u32 accel_flags;
-	__u32 pixclock;
-	__u32 left_margin;
-	__u32 right_margin;
-	__u32 upper_margin;
-	__u32 lower_margin;
-	__u32 hsync_len;
-	__u32 vsync_len;
-	__u32 sync;
-	__u32 vmode;
-	__u32 rotate;
-	__u32 colorspace;
-	__u32 reserved[4];
-};
-
-struct fb_cmap {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-enum {
-	FB_BLANK_UNBLANK = 0,
-	FB_BLANK_NORMAL = 1,
-	FB_BLANK_VSYNC_SUSPEND = 2,
-	FB_BLANK_HSYNC_SUSPEND = 3,
-	FB_BLANK_POWERDOWN = 4,
-};
-
-struct fb_copyarea {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 sx;
-	__u32 sy;
-};
-
-struct fb_fillrect {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 color;
-	__u32 rop;
-};
-
-struct fb_image {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 fg_color;
-	__u32 bg_color;
-	__u8 depth;
-	const char *data;
-	struct fb_cmap cmap;
-};
-
-struct fbcurpos {
-	__u16 x;
-	__u16 y;
-};
-
-struct fb_cursor {
-	__u16 set;
-	__u16 enable;
-	__u16 rop;
-	const char *mask;
-	struct fbcurpos hot;
-	struct fb_image image;
-};
-
-struct fb_chroma {
-	__u32 redx;
-	__u32 greenx;
-	__u32 bluex;
-	__u32 whitex;
-	__u32 redy;
-	__u32 greeny;
-	__u32 bluey;
-	__u32 whitey;
-};
-
-struct fb_videomode;
-
-struct fb_monspecs {
-	struct fb_chroma chroma;
-	struct fb_videomode *modedb;
-	__u8 manufacturer[4];
-	__u8 monitor[14];
-	__u8 serial_no[14];
-	__u8 ascii[14];
-	__u32 modedb_len;
-	__u32 model;
-	__u32 serial;
-	__u32 year;
-	__u32 week;
-	__u32 hfmin;
-	__u32 hfmax;
-	__u32 dclkmin;
-	__u32 dclkmax;
-	__u16 input;
-	__u16 dpms;
-	__u16 signal;
-	__u16 vfmin;
-	__u16 vfmax;
-	__u16 gamma;
-	__u16 gtf: 1;
-	__u16 misc;
-	__u8 version;
-	__u8 revision;
-	__u8 max_x;
-	__u8 max_y;
-};
-
-struct fb_videomode {
-	const char *name;
-	u32 refresh;
-	u32 xres;
-	u32 yres;
-	u32 pixclock;
-	u32 left_margin;
-	u32 right_margin;
-	u32 upper_margin;
-	u32 lower_margin;
-	u32 hsync_len;
-	u32 vsync_len;
-	u32 sync;
-	u32 vmode;
-	u32 flag;
-};
-
-struct fb_info;
-
-struct fb_event {
-	struct fb_info *info;
-	void *data;
-};
-
-struct fb_pixmap {
-	u8 *addr;
-	u32 size;
-	u32 offset;
-	u32 buf_align;
-	u32 scan_align;
-	u32 access_align;
-	u32 flags;
-	u32 blit_x;
-	u32 blit_y;
-	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
-	void (*readio)(struct fb_info *, void *, void *, unsigned int);
-};
-
-struct backlight_device;
-
-struct fb_deferred_io;
-
-struct fb_ops;
-
-struct fb_tile_ops;
-
-struct apertures_struct;
-
-struct fb_info {
-	atomic_t count;
-	int node;
-	int flags;
-	int fbcon_rotate_hint;
-	struct mutex lock;
-	struct mutex mm_lock;
-	struct fb_var_screeninfo var;
-	struct fb_fix_screeninfo fix;
-	struct fb_monspecs monspecs;
-	struct work_struct queue;
-	struct fb_pixmap pixmap;
-	struct fb_pixmap sprite;
-	struct fb_cmap cmap;
-	struct list_head modelist;
-	struct fb_videomode *mode;
-	struct backlight_device *bl_dev;
-	struct mutex bl_curve_mutex;
-	u8 bl_curve[128];
-	struct delayed_work deferred_work;
-	struct fb_deferred_io *fbdefio;
-	const struct fb_ops *fbops;
-	struct device *device;
-	struct device *dev;
-	int class_flag;
-	struct fb_tile_ops *tileops;
-	union {
-		char *screen_base;
-		char *screen_buffer;
-	};
-	long unsigned int screen_size;
-	void *pseudo_palette;
-	u32 state;
-	void *fbcon_par;
-	void *par;
-	struct apertures_struct *apertures;
-	bool skip_vt_switch;
-};
-
-struct fb_blit_caps {
-	u32 x;
-	u32 y;
-	u32 len;
-	u32 flags;
-};
-
-struct fb_deferred_io {
-	long unsigned int delay;
-	struct mutex lock;
-	struct list_head pagelist;
-	void (*first_io)(struct fb_info *);
-	void (*deferred_io)(struct fb_info *, struct list_head *);
-};
-
-struct fb_ops {
-	struct module *owner;
-	int (*fb_open)(struct fb_info *, int);
-	int (*fb_release)(struct fb_info *, int);
-	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
-	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
-	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
-	int (*fb_set_par)(struct fb_info *);
-	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
-	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
-	int (*fb_blank)(int, struct fb_info *);
-	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
-	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
-	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
-	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
-	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
-	int (*fb_sync)(struct fb_info *);
-	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
-	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
-	void (*fb_destroy)(struct fb_info *);
-	int (*fb_debug_enter)(struct fb_info *);
-	int (*fb_debug_leave)(struct fb_info *);
-};
-
-struct fb_tilemap {
-	__u32 width;
-	__u32 height;
-	__u32 depth;
-	__u32 length;
-	const __u8 *data;
-};
-
-struct fb_tilerect {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 index;
-	__u32 fg;
-	__u32 bg;
-	__u32 rop;
-};
-
-struct fb_tilearea {
-	__u32 sx;
-	__u32 sy;
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-};
-
-struct fb_tileblit {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 fg;
-	__u32 bg;
-	__u32 length;
-	__u32 *indices;
-};
-
-struct fb_tilecursor {
-	__u32 sx;
-	__u32 sy;
-	__u32 mode;
-	__u32 shape;
-	__u32 fg;
-	__u32 bg;
-};
-
-struct fb_tile_ops {
-	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
-	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
-	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
-	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
-	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
-	int (*fb_get_tilemax)(struct fb_info *);
-};
-
-struct aperture {
-	resource_size_t base;
-	resource_size_t size;
-};
-
-struct apertures_struct {
-	unsigned int count;
-	struct aperture ranges[0];
-};
-
-enum backlight_type {
-	BACKLIGHT_RAW = 1,
-	BACKLIGHT_PLATFORM = 2,
-	BACKLIGHT_FIRMWARE = 3,
-	BACKLIGHT_TYPE_MAX = 4,
-};
-
-enum backlight_scale {
-	BACKLIGHT_SCALE_UNKNOWN = 0,
-	BACKLIGHT_SCALE_LINEAR = 1,
-	BACKLIGHT_SCALE_NON_LINEAR = 2,
-};
-
-struct backlight_properties {
-	int brightness;
-	int max_brightness;
-	int power;
-	int fb_blank;
-	enum backlight_type type;
-	unsigned int state;
-	enum backlight_scale scale;
-};
-
-struct backlight_ops;
-
-struct backlight_device {
-	struct backlight_properties props;
-	struct mutex update_lock;
+struct lcd_device {
+	struct lcd_properties props;
 	struct mutex ops_lock;
-	const struct backlight_ops *ops;
+	struct lcd_ops *ops;
+	struct mutex update_lock;
 	struct notifier_block fb_notif;
-	struct list_head entry;
 	struct device dev;
-	bool fb_bl_on[32];
-	int use_count;
-};
-
-enum backlight_update_reason {
-	BACKLIGHT_UPDATE_HOTKEY = 0,
-	BACKLIGHT_UPDATE_SYSFS = 1,
-};
-
-enum backlight_notification {
-	BACKLIGHT_REGISTERED = 0,
-	BACKLIGHT_UNREGISTERED = 1,
-};
-
-struct backlight_ops {
-	unsigned int options;
-	int (*update_status)(struct backlight_device *);
-	int (*get_brightness)(struct backlight_device *);
-	int (*check_fb)(struct backlight_device *, struct fb_info *);
-};
-
-struct fb_cmap_user {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-struct fb_modelist {
-	struct list_head list;
-	struct fb_videomode mode;
-};
-
-struct logo_data {
-	int depth;
-	int needs_directpalette;
-	int needs_truepalette;
-	int needs_cmapreset;
-	const struct linux_logo *logo;
-};
-
-struct fb_fix_screeninfo32 {
-	char id[16];
-	compat_caddr_t smem_start;
-	u32 smem_len;
-	u32 type;
-	u32 type_aux;
-	u32 visual;
-	u16 xpanstep;
-	u16 ypanstep;
-	u16 ywrapstep;
-	u32 line_length;
-	compat_caddr_t mmio_start;
-	u32 mmio_len;
-	u32 accel;
-	u16 reserved[3];
-};
-
-struct fb_cmap32 {
-	u32 start;
-	u32 len;
-	compat_caddr_t red;
-	compat_caddr_t green;
-	compat_caddr_t blue;
-	compat_caddr_t transp;
-};
-
-struct dmt_videomode {
-	u32 dmt_id;
-	u32 std_2byte_code;
-	u32 cvt_3byte_code;
-	const struct fb_videomode *mode;
-};
-
-enum display_flags {
-	DISPLAY_FLAGS_HSYNC_LOW = 1,
-	DISPLAY_FLAGS_HSYNC_HIGH = 2,
-	DISPLAY_FLAGS_VSYNC_LOW = 4,
-	DISPLAY_FLAGS_VSYNC_HIGH = 8,
-	DISPLAY_FLAGS_DE_LOW = 16,
-	DISPLAY_FLAGS_DE_HIGH = 32,
-	DISPLAY_FLAGS_PIXDATA_POSEDGE = 64,
-	DISPLAY_FLAGS_PIXDATA_NEGEDGE = 128,
-	DISPLAY_FLAGS_INTERLACED = 256,
-	DISPLAY_FLAGS_DOUBLESCAN = 512,
-	DISPLAY_FLAGS_DOUBLECLK = 1024,
-	DISPLAY_FLAGS_SYNC_POSEDGE = 2048,
-	DISPLAY_FLAGS_SYNC_NEGEDGE = 4096,
-};
-
-struct videomode {
-	long unsigned int pixelclock;
-	u32 hactive;
-	u32 hfront_porch;
-	u32 hback_porch;
-	u32 hsync_len;
-	u32 vactive;
-	u32 vfront_porch;
-	u32 vback_porch;
-	u32 vsync_len;
-	enum display_flags flags;
-};
-
-struct broken_edid {
-	u8 manufacturer[4];
-	u32 model;
-	u32 fix;
-};
-
-struct __fb_timings {
-	u32 dclk;
-	u32 hfreq;
-	u32 vfreq;
-	u32 hactive;
-	u32 vactive;
-	u32 hblank;
-	u32 vblank;
-	u32 htotal;
-	u32 vtotal;
-};
-
-typedef unsigned int u_int;
-
-struct fb_cvt_data {
-	u32 xres;
-	u32 yres;
-	u32 refresh;
-	u32 f_refresh;
-	u32 pixclock;
-	u32 hperiod;
-	u32 hblank;
-	u32 hfreq;
-	u32 htotal;
-	u32 vtotal;
-	u32 vsync;
-	u32 hsync;
-	u32 h_front_porch;
-	u32 h_back_porch;
-	u32 v_front_porch;
-	u32 v_back_porch;
-	u32 h_margin;
-	u32 v_margin;
-	u32 interlace;
-	u32 aspect_ratio;
-	u32 active_pixels;
-	u32 flags;
-	u32 status;
-};
-
-typedef unsigned char u_char;
-
-typedef short unsigned int u_short;
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
-};
-
-struct vc {
-	struct vc_data *d;
-	struct work_struct SAK_work;
-};
-
-struct fbcon_display {
-	const u_char *fontdata;
-	int userfont;
-	u_short scrollmode;
-	u_short inverse;
-	short int yscroll;
-	int vrows;
-	int cursor_shape;
-	int con_rotate;
-	u32 xres_virtual;
-	u32 yres_virtual;
-	u32 height;
-	u32 width;
-	u32 bits_per_pixel;
-	u32 grayscale;
-	u32 nonstd;
-	u32 accel_flags;
-	u32 rotate;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	const struct fb_videomode *mode;
-};
-
-struct fbcon_ops {
-	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
-	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
-	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
-	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
-	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
-	int (*update_start)(struct fb_info *);
-	int (*rotate_font)(struct fb_info *, struct vc_data *);
-	struct fb_var_screeninfo var;
-	struct timer_list cursor_timer;
-	struct fb_cursor cursor_state;
-	struct fbcon_display *p;
-	struct fb_info *info;
-	int currcon;
-	int cur_blink_jiffies;
-	int cursor_flash;
-	int cursor_reset;
-	int blank_state;
-	int graphics;
-	int save_graphics;
-	int flags;
-	int rotate;
-	int cur_rotate;
-	char *cursor_data;
-	u8 *fontbuffer;
-	u8 *fontdata;
-	u8 *cursor_src;
-	u32 cursor_size;
-	u32 fd_size;
-};
-
-enum {
-	FBCON_LOGO_CANSHOW = 4294967295,
-	FBCON_LOGO_DRAW = 4294967294,
-	FBCON_LOGO_DONTSHOW = 4294967293,
-};
-
-enum {
-	CLCD_CAP_RGB444 = 1,
-	CLCD_CAP_RGB5551 = 2,
-	CLCD_CAP_RGB565 = 4,
-	CLCD_CAP_RGB888 = 8,
-	CLCD_CAP_BGR444 = 16,
-	CLCD_CAP_BGR5551 = 32,
-	CLCD_CAP_BGR565 = 64,
-	CLCD_CAP_BGR888 = 128,
-	CLCD_CAP_444 = 17,
-	CLCD_CAP_5551 = 34,
-	CLCD_CAP_565 = 68,
-	CLCD_CAP_888 = 136,
-	CLCD_CAP_RGB = 15,
-	CLCD_CAP_BGR = 240,
-	CLCD_CAP_ALL = 255,
-};
-
-struct clcd_panel {
-	struct fb_videomode mode;
-	short int width;
-	short int height;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	u32 caps;
-	unsigned int bpp: 8;
-	unsigned int fixedtimings: 1;
-	unsigned int grayscale: 1;
-	unsigned int connector;
-	struct backlight_device *backlight;
-	bool bgr_connection;
-};
-
-struct clcd_regs {
-	u32 tim0;
-	u32 tim1;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	long unsigned int pixclock;
-};
-
-struct clcd_fb;
-
-struct clcd_board {
-	const char *name;
-	u32 caps;
-	int (*check)(struct clcd_fb *, struct fb_var_screeninfo *);
-	void (*decode)(struct clcd_fb *, struct clcd_regs *);
-	void (*disable)(struct clcd_fb *);
-	void (*enable)(struct clcd_fb *);
-	int (*setup)(struct clcd_fb *);
-	int (*mmap)(struct clcd_fb *, struct vm_area_struct *);
-	void (*remove)(struct clcd_fb *);
-};
-
-struct clcd_fb {
-	struct fb_info fb;
-	struct amba_device *dev;
-	struct clk *clk;
-	struct clcd_panel *panel;
-	struct clcd_board *board;
-	void *board_data;
-	void *regs;
-	u16 off_ienb;
-	u16 off_cntl;
-	u32 clcd_cntl;
-	u32 cmap[16];
-	bool clk_enabled;
-};
-
-struct timing_entry {
-	u32 min;
-	u32 typ;
-	u32 max;
-};
-
-struct display_timing {
-	struct timing_entry pixelclock;
-	struct timing_entry hactive;
-	struct timing_entry hfront_porch;
-	struct timing_entry hback_porch;
-	struct timing_entry hsync_len;
-	struct timing_entry vactive;
-	struct timing_entry vfront_porch;
-	struct timing_entry vback_porch;
-	struct timing_entry vsync_len;
-	enum display_flags flags;
-};
-
-struct xenfb_update {
-	uint8_t type;
-	int32_t x;
-	int32_t y;
-	int32_t width;
-	int32_t height;
-};
-
-struct xenfb_resize {
-	uint8_t type;
-	int32_t width;
-	int32_t height;
-	int32_t stride;
-	int32_t depth;
-	int32_t offset;
-};
-
-union xenfb_out_event {
-	uint8_t type;
-	struct xenfb_update update;
-	struct xenfb_resize resize;
-	char pad[40];
-};
-
-struct xenfb_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-	int32_t width;
-	int32_t height;
-	uint32_t line_length;
-	uint32_t mem_length;
-	uint8_t depth;
-	long unsigned int pd[256];
-};
-
-enum xenbus_state {
-	XenbusStateUnknown = 0,
-	XenbusStateInitialising = 1,
-	XenbusStateInitWait = 2,
-	XenbusStateInitialised = 3,
-	XenbusStateConnected = 4,
-	XenbusStateClosing = 5,
-	XenbusStateClosed = 6,
-	XenbusStateReconfiguring = 7,
-	XenbusStateReconfigured = 8,
-};
-
-struct xenbus_watch {
-	struct list_head list;
-	const char *node;
-	unsigned int nr_pending;
-	bool (*will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*callback)(struct xenbus_watch *, const char *, const char *);
-};
-
-struct xenbus_device {
-	const char *devicetype;
-	const char *nodename;
-	const char *otherend;
-	int otherend_id;
-	struct xenbus_watch otherend_watch;
-	struct device dev;
-	enum xenbus_state state;
-	struct completion down;
-	struct work_struct work;
-	struct semaphore reclaim_sem;
-};
-
-struct xenbus_device_id {
-	char devicetype[32];
-};
-
-struct xenbus_driver {
-	const char *name;
-	const struct xenbus_device_id *ids;
-	bool allow_rebind;
-	int (*probe)(struct xenbus_device *, const struct xenbus_device_id *);
-	void (*otherend_changed)(struct xenbus_device *, enum xenbus_state);
-	int (*remove)(struct xenbus_device *);
-	int (*suspend)(struct xenbus_device *);
-	int (*resume)(struct xenbus_device *);
-	int (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);
-	struct device_driver driver;
-	int (*read_otherend_details)(struct xenbus_device *);
-	int (*is_ready)(struct xenbus_device *);
-	void (*reclaim_memory)(struct xenbus_device *);
-};
-
-struct xenbus_transaction {
-	u32 id;
-};
-
-struct xenfb_info {
-	unsigned char *fb;
-	struct fb_info *fb_info;
-	int x1;
-	int y1;
-	int x2;
-	int y2;
-	spinlock_t dirty_lock;
-	int nr_pages;
-	int irq;
-	struct xenfb_page *page;
-	long unsigned int *gfns;
-	int update_wanted;
-	int feature_resize;
-	struct xenfb_resize resize;
-	int resize_dpy;
-	spinlock_t resize_lock;
-	struct xenbus_device *xbdev;
-};
-
-enum {
-	KPARAM_MEM = 0,
-	KPARAM_WIDTH = 1,
-	KPARAM_HEIGHT = 2,
-	KPARAM_CNT = 3,
-};
-
-struct acpi_table_bgrt {
-	struct acpi_table_header header;
-	u16 version;
-	u8 status;
-	u8 image_type;
-	u64 image_address;
-	u32 image_offset_x;
-	u32 image_offset_y;
-};
-
-enum drm_panel_orientation {
-	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,
-	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
-	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
-	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
-	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
-};
-
-struct bmp_file_header {
-	u16 id;
-	u32 file_size;
-	u32 reserved;
-	u32 bitmap_offset;
-} __attribute__((packed));
-
-struct bmp_dib_header {
-	u32 dib_header_size;
-	s32 width;
-	s32 height;
-	u16 planes;
-	u16 bpp;
-	u32 compression;
-	u32 bitmap_size;
-	u32 horz_resolution;
-	u32 vert_resolution;
-	u32 colors_used;
-	u32 colors_important;
-};
-
-struct simplefb_format {
-	const char *name;
-	u32 bits_per_pixel;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	u32 fourcc;
-};
-
-struct simplefb_platform_data {
-	u32 width;
-	u32 height;
-	u32 stride;
-	const char *format;
-};
-
-struct simplefb_params {
-	u32 width;
-	u32 height;
-	u32 stride;
-	struct simplefb_format *format;
-};
-
-struct simplefb_par {
-	u32 palette[16];
-	bool clks_enabled;
-	unsigned int clk_count;
-	struct clk **clks;
-	bool regulators_enabled;
-	u32 regulator_count;
-	struct regulator **regulators;
-};
-
-struct display_timings {
-	unsigned int num_timings;
-	unsigned int native_mode;
-	struct display_timing **timings;
-};
-
-enum ipmi_addr_src {
-	SI_INVALID = 0,
-	SI_HOTMOD = 1,
-	SI_HARDCODED = 2,
-	SI_SPMI = 3,
-	SI_ACPI = 4,
-	SI_SMBIOS = 5,
-	SI_PCI = 6,
-	SI_DEVICETREE = 7,
-	SI_PLATFORM = 8,
-	SI_LAST = 9,
-};
-
-struct dmi_header {
-	u8 type;
-	u8 length;
-	u16 handle;
-};
-
-enum si_type {
-	SI_TYPE_INVALID = 0,
-	SI_KCS = 1,
-	SI_SMIC = 2,
-	SI_BT = 3,
-};
-
-enum ipmi_addr_space {
-	IPMI_IO_ADDR_SPACE = 0,
-	IPMI_MEM_ADDR_SPACE = 1,
-};
-
-enum ipmi_plat_interface_type {
-	IPMI_PLAT_IF_SI = 0,
-	IPMI_PLAT_IF_SSIF = 1,
-};
-
-struct ipmi_plat_data {
-	enum ipmi_plat_interface_type iftype;
-	unsigned int type;
-	unsigned int space;
-	long unsigned int addr;
-	unsigned int regspacing;
-	unsigned int regsize;
-	unsigned int regshift;
-	unsigned int irq;
-	unsigned int slave_addr;
-	enum ipmi_addr_src addr_source;
 };
 
 struct ipmi_dmi_info {
@@ -68045,129 +113523,6 @@
 	struct ipmi_dmi_info *next;
 };
 
-typedef u16 acpi_owner_id;
-
-union acpi_name_union {
-	u32 integer;
-	char ascii[4];
-};
-
-struct acpi_table_desc {
-	acpi_physical_address address;
-	struct acpi_table_header *pointer;
-	u32 length;
-	union acpi_name_union signature;
-	acpi_owner_id owner_id;
-	u8 flags;
-	u16 validation_count;
-};
-
-struct acpi_madt_local_apic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u32 lapic_flags;
-};
-
-struct acpi_madt_io_apic {
-	struct acpi_subtable_header header;
-	u8 id;
-	u8 reserved;
-	u32 address;
-	u32 global_irq_base;
-};
-
-struct acpi_madt_interrupt_override {
-	struct acpi_subtable_header header;
-	u8 bus;
-	u8 source_irq;
-	u32 global_irq;
-	u16 inti_flags;
-} __attribute__((packed));
-
-struct acpi_madt_nmi_source {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 global_irq;
-};
-
-struct acpi_madt_local_apic_nmi {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u16 inti_flags;
-	u8 lint;
-} __attribute__((packed));
-
-struct acpi_madt_local_apic_override {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_madt_io_sapic {
-	struct acpi_subtable_header header;
-	u8 id;
-	u8 reserved;
-	u32 global_irq_base;
-	u64 address;
-};
-
-struct acpi_madt_local_sapic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u8 eid;
-	u8 reserved[3];
-	u32 lapic_flags;
-	u32 uid;
-	char uid_string[1];
-} __attribute__((packed));
-
-struct acpi_madt_interrupt_source {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u8 type;
-	u8 id;
-	u8 eid;
-	u8 io_sapic_vector;
-	u32 global_irq;
-	u32 flags;
-};
-
-struct acpi_madt_local_x2apic {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 local_apic_id;
-	u32 lapic_flags;
-	u32 uid;
-};
-
-struct acpi_madt_local_x2apic_nmi {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 uid;
-	u8 lint;
-	u8 reserved[3];
-};
-
-struct acpi_subtable_proc {
-	int id;
-	acpi_tbl_entry_handler handler;
-	int count;
-};
-
-enum acpi_subtable_type {
-	ACPI_SUBTABLE_COMMON = 0,
-	ACPI_SUBTABLE_HMAT = 1,
-};
-
-struct acpi_subtable_entry {
-	union acpi_subtable_headers *hdr;
-	enum acpi_subtable_type type;
-};
-
-typedef char *acpi_string;
-
 struct acpi_osi_entry {
 	char string[64];
 	bool enable;
@@ -68183,1063 +113538,24 @@
 	unsigned int darwin_cmdline: 1;
 };
 
-struct acpi_predefined_names {
-	const char *name;
-	u8 type;
-	char *val;
-};
-
-typedef u32 (*acpi_osd_handler)(void *);
-
-typedef void (*acpi_osd_exec_callback)(void *);
-
-typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_object_handler)(acpi_handle, void *);
-
-typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
-
-typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
-
-struct acpi_pci_id {
-	u16 segment;
-	u16 bus;
-	u16 device;
-	u16 function;
-};
-
-struct acpi_mem_mapping {
-	acpi_physical_address physical_address;
-	u8 *logical_address;
-	acpi_size length;
-	struct acpi_mem_mapping *next_mm;
-};
-
-struct acpi_mem_space_context {
-	u32 length;
-	acpi_physical_address address;
-	struct acpi_mem_mapping *cur_mm;
-	struct acpi_mem_mapping *first_mm;
-};
-
-typedef enum {
-	OSL_GLOBAL_LOCK_HANDLER = 0,
-	OSL_NOTIFY_HANDLER = 1,
-	OSL_GPE_HANDLER = 2,
-	OSL_DEBUGGER_MAIN_THREAD = 3,
-	OSL_DEBUGGER_EXEC_THREAD = 4,
-	OSL_EC_POLL_HANDLER = 5,
-	OSL_EC_BURST_HANDLER = 6,
-} acpi_execute_type;
-
-union acpi_operand_object;
-
-struct acpi_namespace_node {
-	union acpi_operand_object *object;
-	u8 descriptor_type;
-	u8 type;
-	u16 flags;
-	union acpi_name_union name;
-	struct acpi_namespace_node *parent;
-	struct acpi_namespace_node *child;
-	struct acpi_namespace_node *peer;
-	acpi_owner_id owner_id;
-};
-
-struct acpi_object_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-};
-
-struct acpi_object_integer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 fill[3];
-	u64 value;
-};
-
-struct acpi_object_string {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	char *pointer;
-	u32 length;
-};
-
-struct acpi_object_buffer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 *pointer;
-	u32 length;
-	u32 aml_length;
-	u8 *aml_start;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_object_package {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **elements;
-	u8 *aml_start;
-	u32 aml_length;
-	u32 count;
-};
-
-struct acpi_object_event {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	void *os_semaphore;
-};
-
-struct acpi_walk_state;
-
-typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
-
-struct acpi_object_method {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 info_flags;
-	u8 param_count;
-	u8 sync_level;
-	union acpi_operand_object *mutex;
-	union acpi_operand_object *node;
-	u8 *aml_start;
-	union {
-		acpi_internal_method implementation;
-		union acpi_operand_object *handler;
-	} dispatch;
-	u32 aml_length;
-	acpi_owner_id owner_id;
-	u8 thread_count;
-};
-
-struct acpi_thread_state;
-
-struct acpi_object_mutex {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 sync_level;
-	u16 acquisition_depth;
-	void *os_mutex;
-	u64 thread_id;
-	struct acpi_thread_state *owner_thread;
-	union acpi_operand_object *prev;
-	union acpi_operand_object *next;
-	struct acpi_namespace_node *node;
-	u8 original_sync_level;
-};
-
-struct acpi_object_region {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler;
-	union acpi_operand_object *next;
-	acpi_physical_address address;
-	u32 length;
-};
-
-struct acpi_object_notify_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_gpe_block_info;
-
-struct acpi_object_device {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	struct acpi_gpe_block_info *gpe_block;
-};
-
-struct acpi_object_power_resource {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	u32 system_level;
-	u32 resource_order;
-};
-
-struct acpi_object_processor {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 proc_id;
-	u8 length;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	acpi_io_address address;
-};
-
-struct acpi_object_thermal_zone {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_object_field_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-};
-
-struct acpi_object_region_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	u16 resource_length;
-	union acpi_operand_object *region_obj;
-	u8 *resource_buffer;
-	u16 pin_number_index;
-	u8 *internal_pcc_buffer;
-};
-
-struct acpi_object_buffer_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	u8 is_create_field;
-	union acpi_operand_object *buffer_obj;
-};
-
-struct acpi_object_bank_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-	union acpi_operand_object *bank_obj;
-};
-
-struct acpi_object_index_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *index_obj;
-	union acpi_operand_object *data_obj;
-};
-
-struct acpi_object_notify_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	u32 handler_type;
-	acpi_notify_handler handler;
-	void *context;
-	union acpi_operand_object *next[2];
-};
-
-struct acpi_object_addr_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	u8 handler_flags;
-	acpi_adr_space_handler handler;
-	struct acpi_namespace_node *node;
-	void *context;
-	acpi_adr_space_setup setup;
-	union acpi_operand_object *region_list;
-	union acpi_operand_object *next;
-};
-
-struct acpi_object_reference {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 class;
-	u8 target_type;
-	u8 resolved;
-	void *object;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **where;
-	u8 *index_pointer;
-	u8 *aml;
-	u32 value;
-};
-
-struct acpi_object_extra {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *method_REG;
-	struct acpi_namespace_node *scope_node;
-	void *region_context;
-	u8 *aml_start;
-	u32 aml_length;
-};
-
-struct acpi_object_data {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	acpi_object_handler handler;
-	void *pointer;
-};
-
-struct acpi_object_cache_list {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *next;
-};
-
-union acpi_operand_object {
-	struct acpi_object_common common;
-	struct acpi_object_integer integer;
-	struct acpi_object_string string;
-	struct acpi_object_buffer buffer;
-	struct acpi_object_package package;
-	struct acpi_object_event event;
-	struct acpi_object_method method;
-	struct acpi_object_mutex mutex;
-	struct acpi_object_region region;
-	struct acpi_object_notify_common common_notify;
-	struct acpi_object_device device;
-	struct acpi_object_power_resource power_resource;
-	struct acpi_object_processor processor;
-	struct acpi_object_thermal_zone thermal_zone;
-	struct acpi_object_field_common common_field;
-	struct acpi_object_region_field field;
-	struct acpi_object_buffer_field buffer_field;
-	struct acpi_object_bank_field bank_field;
-	struct acpi_object_index_field index_field;
-	struct acpi_object_notify_handler notify;
-	struct acpi_object_addr_handler address_space;
-	struct acpi_object_reference reference;
-	struct acpi_object_extra extra;
-	struct acpi_object_data data;
-	struct acpi_object_cache_list cache;
-	struct acpi_namespace_node node;
-};
-
-union acpi_parse_object;
-
-union acpi_generic_state;
-
-struct acpi_parse_state {
-	u8 *aml_start;
-	u8 *aml;
-	u8 *aml_end;
-	u8 *pkg_start;
-	u8 *pkg_end;
-	union acpi_parse_object *start_op;
-	struct acpi_namespace_node *start_node;
-	union acpi_generic_state *scope;
-	union acpi_parse_object *start_scope;
-	u32 aml_size;
-};
-
-typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
-
-typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
-
-struct acpi_opcode_info;
-
-struct acpi_walk_state {
-	struct acpi_walk_state *next;
-	u8 descriptor_type;
-	u8 walk_type;
-	u16 opcode;
-	u8 next_op_info;
-	u8 num_operands;
-	u8 operand_index;
-	acpi_owner_id owner_id;
-	u8 last_predicate;
-	u8 current_result;
-	u8 return_used;
-	u8 scope_depth;
-	u8 pass_number;
-	u8 namespace_override;
-	u8 result_size;
-	u8 result_count;
-	u8 *aml;
-	u32 arg_types;
-	u32 method_breakpoint;
-	u32 user_breakpoint;
-	u32 parse_flags;
-	struct acpi_parse_state parser_state;
-	u32 prev_arg_types;
-	u32 arg_count;
-	u16 method_nesting_depth;
-	u8 method_is_nested;
-	struct acpi_namespace_node arguments[7];
-	struct acpi_namespace_node local_variables[8];
-	union acpi_operand_object *operands[9];
-	union acpi_operand_object **params;
-	u8 *aml_last_while;
-	union acpi_operand_object **caller_return_desc;
-	union acpi_generic_state *control_state;
-	struct acpi_namespace_node *deferred_node;
-	union acpi_operand_object *implicit_return_obj;
-	struct acpi_namespace_node *method_call_node;
-	union acpi_parse_object *method_call_op;
-	union acpi_operand_object *method_desc;
-	struct acpi_namespace_node *method_node;
-	char *method_pathname;
-	union acpi_parse_object *op;
-	const struct acpi_opcode_info *op_info;
-	union acpi_parse_object *origin;
-	union acpi_operand_object *result_obj;
-	union acpi_generic_state *results;
-	union acpi_operand_object *return_desc;
-	union acpi_generic_state *scope_info;
-	union acpi_parse_object *prev_op;
-	union acpi_parse_object *next_op;
-	struct acpi_thread_state *thread;
-	acpi_parse_downwards descending_callback;
-	acpi_parse_upwards ascending_callback;
-};
-
-struct acpi_gpe_handler_info {
-	acpi_gpe_handler address;
-	void *context;
-	struct acpi_namespace_node *method_node;
-	u8 original_flags;
-	u8 originally_enabled;
-};
-
-struct acpi_gpe_notify_info {
-	struct acpi_namespace_node *device_node;
-	struct acpi_gpe_notify_info *next;
-};
-
-union acpi_gpe_dispatch_info {
-	struct acpi_namespace_node *method_node;
-	struct acpi_gpe_handler_info *handler;
-	struct acpi_gpe_notify_info *notify_list;
-};
-
-struct acpi_gpe_register_info;
-
-struct acpi_gpe_event_info {
-	union acpi_gpe_dispatch_info dispatch;
-	struct acpi_gpe_register_info *register_info;
-	u8 flags;
-	u8 gpe_number;
-	u8 runtime_count;
-	u8 disable_for_dispatch;
-};
-
-struct acpi_gpe_address {
-	u8 space_id;
-	u64 address;
-};
-
-struct acpi_gpe_register_info {
-	struct acpi_gpe_address status_address;
-	struct acpi_gpe_address enable_address;
-	u16 base_gpe_number;
-	u8 enable_for_wake;
-	u8 enable_for_run;
-	u8 mask_for_run;
-	u8 enable_mask;
-};
-
-struct acpi_gpe_xrupt_info;
-
-struct acpi_gpe_block_info {
-	struct acpi_namespace_node *node;
-	struct acpi_gpe_block_info *previous;
-	struct acpi_gpe_block_info *next;
-	struct acpi_gpe_xrupt_info *xrupt_block;
-	struct acpi_gpe_register_info *register_info;
-	struct acpi_gpe_event_info *event_info;
-	u64 address;
-	u32 register_count;
-	u16 gpe_count;
-	u16 block_base_number;
-	u8 space_id;
-	u8 initialized;
-};
-
-struct acpi_gpe_xrupt_info {
-	struct acpi_gpe_xrupt_info *previous;
-	struct acpi_gpe_xrupt_info *next;
-	struct acpi_gpe_block_info *gpe_block_list_head;
-	u32 interrupt_number;
-};
-
-struct acpi_common_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-};
-
-struct acpi_update_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *object;
-};
-
-struct acpi_pkg_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 index;
-	union acpi_operand_object *source_object;
-	union acpi_operand_object *dest_object;
-	struct acpi_walk_state *walk_state;
-	void *this_target_obj;
-	u32 num_packages;
-};
-
-struct acpi_control_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u16 opcode;
-	union acpi_parse_object *predicate_op;
-	u8 *aml_predicate_start;
-	u8 *package_end;
-	u64 loop_timeout;
-};
-
-union acpi_parse_value {
-	u64 integer;
-	u32 size;
-	char *string;
-	u8 *buffer;
-	char *name;
-	union acpi_parse_object *arg;
-};
-
-struct acpi_parse_obj_common {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-};
-
-struct acpi_parse_obj_named {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	char *path;
-	u8 *data;
-	u32 length;
-	u32 name;
-};
-
-struct acpi_parse_obj_asl {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	union acpi_parse_object *child;
-	union acpi_parse_object *parent_method;
-	char *filename;
-	u8 file_changed;
-	char *parent_filename;
-	char *external_name;
-	char *namepath;
-	char name_seg[4];
-	u32 extra_value;
-	u32 column;
-	u32 line_number;
-	u32 logical_line_number;
-	u32 logical_byte_offset;
-	u32 end_line;
-	u32 end_logical_line;
-	u32 acpi_btype;
-	u32 aml_length;
-	u32 aml_subtree_length;
-	u32 final_aml_length;
-	u32 final_aml_offset;
-	u32 compile_flags;
-	u16 parse_opcode;
-	u8 aml_opcode_length;
-	u8 aml_pkg_len_bytes;
-	u8 extra;
-	char parse_op_name[20];
-};
-
-union acpi_parse_object {
-	struct acpi_parse_obj_common common;
-	struct acpi_parse_obj_named named;
-	struct acpi_parse_obj_asl asl;
-};
-
-struct acpi_scope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_pscope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 arg_count;
-	union acpi_parse_object *op;
-	u8 *arg_end;
-	u8 *pkg_end;
-	u32 arg_list;
-};
-
-struct acpi_thread_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 current_sync_level;
-	struct acpi_walk_state *walk_state_list;
-	union acpi_operand_object *acquired_mutex_list;
-	u64 thread_id;
-};
-
-struct acpi_result_values {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *obj_desc[8];
-};
-
-struct acpi_global_notify_handler {
-	acpi_notify_handler handler;
-	void *context;
-};
-
-struct acpi_notify_info {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 handler_list_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler_list_head;
-	struct acpi_global_notify_handler *global;
-};
-
-union acpi_generic_state {
-	struct acpi_common_state common;
-	struct acpi_control_state control;
-	struct acpi_update_state update;
-	struct acpi_scope_state scope;
-	struct acpi_pscope_state parse_scope;
-	struct acpi_pkg_state pkg;
-	struct acpi_thread_state thread;
-	struct acpi_result_values results;
-	struct acpi_notify_info notify;
-};
-
-struct acpi_opcode_info {
-	u32 parse_args;
-	u32 runtime_args;
-	u16 flags;
-	u8 object_type;
-	u8 class;
-	u8 type;
-};
-
-struct acpi_os_dpc {
-	acpi_osd_exec_callback function;
-	void *context;
-	struct work_struct work;
-};
-
-struct acpi_ioremap {
-	struct list_head list;
-	void *virt;
-	acpi_physical_address phys;
-	acpi_size size;
-	union {
-		long unsigned int refcount;
-		struct rcu_work rwork;
-	} track;
-};
-
-struct acpi_hp_work {
-	struct work_struct work;
-	struct acpi_device *adev;
-	u32 src;
-};
-
-struct acpi_object_list {
-	u32 count;
-	union acpi_object *pointer;
-};
-
-struct acpi_pld_info {
-	u8 revision;
-	u8 ignore_color;
-	u8 red;
-	u8 green;
-	u8 blue;
-	u16 width;
-	u16 height;
-	u8 user_visible;
-	u8 dock;
-	u8 lid;
-	u8 panel;
-	u8 vertical_position;
-	u8 horizontal_position;
-	u8 shape;
-	u8 group_orientation;
-	u8 group_token;
-	u8 group_position;
-	u8 bay;
-	u8 ejectable;
-	u8 ospm_eject_required;
-	u8 cabinet_number;
-	u8 card_cage_number;
-	u8 reference;
-	u8 rotation;
-	u8 order;
-	u8 reserved;
-	u16 vertical_offset;
-	u16 horizontal_offset;
-};
-
-struct acpi_handle_list {
-	u32 count;
-	acpi_handle handles[10];
-};
-
-enum acpi_predicate {
-	all_versions = 0,
-	less_than_or_equal = 1,
-	equal = 2,
-	greater_than_or_equal = 3,
-};
-
-struct acpi_platform_list {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	char *table;
-	enum acpi_predicate pred;
-	char *reason;
-	u32 data;
-};
-
-struct acpi_device_bus_id {
-	const char *bus_id;
-	unsigned int instance_no;
-	struct list_head node;
-};
-
-struct acpi_dev_match_info {
-	struct acpi_device_id hid[2];
-	const char *uid;
-	s64 hrv;
-};
-
-struct nvs_region {
-	__u64 phys_start;
-	__u64 size;
-	struct list_head node;
-};
-
-struct acpi_wakeup_handler {
-	struct list_head list_node;
-	bool (*wakeup)(void *);
-	void *context;
-};
-
-struct acpi_hardware_id {
-	struct list_head list;
-	const char *id;
-};
-
-struct acpi_data_node {
-	const char *name;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct fwnode_handle *parent;
-	struct acpi_device_data data;
-	struct list_head sibling;
-	struct kobject kobj;
-	struct completion kobj_done;
-};
-
-struct acpi_data_node_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct acpi_data_node *, char *);
-	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
-};
-
-struct pm_domain_data {
-	struct list_head list_node;
-	struct device *dev;
-};
-
-typedef u32 (*acpi_event_handler)(void *);
-
-enum acpi_bus_device_type {
-	ACPI_BUS_TYPE_DEVICE = 0,
-	ACPI_BUS_TYPE_POWER = 1,
-	ACPI_BUS_TYPE_PROCESSOR = 2,
-	ACPI_BUS_TYPE_THERMAL = 3,
-	ACPI_BUS_TYPE_POWER_BUTTON = 4,
-	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
-	ACPI_BUS_TYPE_ECDT_EC = 6,
-	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
-};
-
-struct acpi_device_physical_node {
-	unsigned int node_id;
-	struct list_head node;
-	struct device *dev;
-	bool put_online: 1;
-};
-
-struct acpi_osc_context {
-	char *uuid_str;
-	int rev;
-	struct acpi_buffer cap;
-	struct acpi_buffer ret;
-};
-
-struct acpi_pnp_device_id {
-	u32 length;
-	char *string;
-};
-
-struct acpi_pnp_device_id_list {
-	u32 count;
-	u32 list_size;
-	struct acpi_pnp_device_id ids[0];
-};
-
-struct acpi_device_info {
-	u32 info_size;
-	u32 name;
-	acpi_object_type type;
-	u8 param_count;
-	u16 valid;
-	u8 flags;
-	u8 highest_dstates[4];
-	u8 lowest_dstates[5];
-	u64 address;
-	struct acpi_pnp_device_id hardware_id;
-	struct acpi_pnp_device_id unique_id;
-	struct acpi_pnp_device_id class_code;
-	struct acpi_pnp_device_id_list compatible_id_list;
-};
-
-struct acpi_table_spcr {
-	struct acpi_table_header header;
-	u8 interface_type;
-	u8 reserved[3];
-	struct acpi_generic_address serial_port;
-	u8 interrupt_type;
-	u8 pc_interrupt;
-	u32 interrupt;
-	u8 baud_rate;
-	u8 parity;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 terminal_type;
-	u8 reserved1;
-	u16 pci_device_id;
-	u16 pci_vendor_id;
-	u8 pci_bus;
-	u8 pci_device;
-	u8 pci_function;
-	u32 pci_flags;
-	u8 pci_segment;
-	u32 reserved2;
-} __attribute__((packed));
-
 struct acpi_table_stao {
 	struct acpi_table_header header;
 	u8 ignore_uart;
 } __attribute__((packed));
 
-enum acpi_reconfig_event {
-	ACPI_RECONFIG_DEVICE_ADD = 0,
-	ACPI_RECONFIG_DEVICE_REMOVE = 1,
-};
-
 struct acpi_dep_data {
 	struct list_head node;
-	acpi_handle master;
-	acpi_handle slave;
+	acpi_handle supplier;
+	acpi_handle consumer;
+	bool honor_dep;
 };
 
-struct acpi_table_events_work {
+struct acpi_scan_clear_dep_work {
 	struct work_struct work;
-	void *table;
-	u32 event;
+	struct acpi_device *adev;
 };
 
-struct resource_win {
-	struct resource res;
-	resource_size_t offset;
-};
-
-struct res_proc_context {
-	struct list_head *list;
-	int (*preproc)(struct acpi_resource *, void *);
-	void *preproc_data;
-	int count;
-	int error;
-};
-
-struct acpi_processor_errata {
-	u8 smp;
-	struct {
-		u8 throttle: 1;
-		u8 fdma: 1;
-		u8 reserved: 6;
-		u32 bmisx;
-	} piix4;
-};
-
-typedef u32 acpi_event_status;
+struct platform_device;
 
 struct acpi_table_ecdt {
 	struct acpi_table_header header;
@@ -69250,10 +113566,17 @@
 	u8 id[1];
 } __attribute__((packed));
 
+enum acpi_ec_event_state {
+	EC_EVENT_READY = 0,
+	EC_EVENT_IN_PROGRESS = 1,
+	EC_EVENT_COMPLETE = 2,
+};
+
 struct transaction;
 
 struct acpi_ec {
 	acpi_handle handle;
+	acpi_handle address_space_handler_holder;
 	int gpe;
 	int irq;
 	long unsigned int command_addr;
@@ -69268,7 +113591,10 @@
 	spinlock_t lock;
 	struct work_struct work;
 	long unsigned int timestamp;
-	long unsigned int nr_pending_queries;
+	enum acpi_ec_event_state event_state;
+	unsigned int events_to_process;
+	unsigned int events_in_progress;
+	unsigned int queries_in_progress;
 	bool busy_polling;
 	unsigned int polling_guard;
 };
@@ -69297,14 +113623,13 @@
 
 enum {
 	EC_FLAGS_QUERY_ENABLED = 0,
-	EC_FLAGS_QUERY_PENDING = 1,
-	EC_FLAGS_QUERY_GUARDING = 2,
-	EC_FLAGS_EVENT_HANDLER_INSTALLED = 3,
-	EC_FLAGS_EC_HANDLER_INSTALLED = 4,
-	EC_FLAGS_QUERY_METHODS_INSTALLED = 5,
-	EC_FLAGS_STARTED = 6,
-	EC_FLAGS_STOPPED = 7,
-	EC_FLAGS_EVENTS_MASKED = 8,
+	EC_FLAGS_EVENT_HANDLER_INSTALLED = 1,
+	EC_FLAGS_EC_HANDLER_INSTALLED = 2,
+	EC_FLAGS_EC_REG_CALLED = 3,
+	EC_FLAGS_QUERY_METHODS_INSTALLED = 4,
+	EC_FLAGS_STARTED = 5,
+	EC_FLAGS_STOPPED = 6,
+	EC_FLAGS_EVENTS_MASKED = 7,
 };
 
 struct acpi_ec_query_handler {
@@ -69320,142 +113645,7 @@
 	struct transaction transaction;
 	struct work_struct work;
 	struct acpi_ec_query_handler *handler;
-};
-
-struct dock_station {
-	acpi_handle handle;
-	long unsigned int last_dock_time;
-	u32 flags;
-	struct list_head dependent_devices;
-	struct list_head sibling;
-	struct platform_device *dock_device;
-};
-
-struct dock_dependent_device {
-	struct list_head list;
-	struct acpi_device *adev;
-};
-
-enum dock_callback_type {
-	DOCK_CALL_HANDLER = 0,
-	DOCK_CALL_FIXUP = 1,
-	DOCK_CALL_UEVENT = 2,
-};
-
-struct pci_osc_bit_struct {
-	u32 bit;
-	char *desc;
-};
-
-struct acpi_handle_node {
-	struct list_head node;
-	acpi_handle handle;
-};
-
-struct acpi_pci_link_irq {
-	u32 active;
-	u8 triggering;
-	u8 polarity;
-	u8 resource_type;
-	u8 possible_count;
-	u32 possible[16];
-	u8 initialized: 1;
-	u8 reserved: 7;
-};
-
-struct acpi_pci_link {
-	struct list_head list;
-	struct acpi_device *device;
-	struct acpi_pci_link_irq irq;
-	int refcnt;
-};
-
-struct acpi_pci_routing_table {
-	u32 length;
-	u32 pin;
-	u64 address;
-	u32 source_index;
-	char source[4];
-};
-
-struct acpi_prt_entry {
-	struct acpi_pci_id id;
-	u8 pin;
-	acpi_handle link;
-	u32 index;
-};
-
-struct prt_quirk {
-	const struct dmi_system_id *system;
-	unsigned int segment;
-	unsigned int bus;
-	unsigned int device;
-	unsigned char pin;
-	const char *source;
-	const char *actual_source;
-};
-
-struct apd_private_data;
-
-struct apd_device_desc {
-	unsigned int fixed_clk_rate;
-	struct property_entry *properties;
-	int (*setup)(struct apd_private_data *);
-};
-
-struct apd_private_data {
-	struct clk *clk;
-	struct acpi_device *adev;
-	const struct apd_device_desc *dev_desc;
-};
-
-struct acpi_power_dependent_device {
-	struct device *dev;
-	struct list_head node;
-};
-
-struct acpi_power_resource {
-	struct acpi_device device;
-	struct list_head list_node;
-	char *name;
-	u32 system_level;
-	u32 order;
-	unsigned int ref_count;
-	bool wakeup_enabled;
-	struct mutex resource_lock;
-	struct list_head dependents;
-};
-
-struct acpi_power_resource_entry {
-	struct list_head node;
-	struct acpi_power_resource *resource;
-};
-
-struct acpi_bus_event {
-	struct list_head node;
-	acpi_device_class device_class;
-	acpi_bus_id bus_id;
-	u32 type;
-	u32 data;
-};
-
-struct acpi_genl_event {
-	acpi_device_class device_class;
-	char bus_id[15];
-	u32 type;
-	u32 data;
-};
-
-enum {
-	ACPI_GENL_ATTR_UNSPEC = 0,
-	ACPI_GENL_ATTR_EVENT = 1,
-	__ACPI_GENL_ATTR_MAX = 2,
-};
-
-enum {
-	ACPI_GENL_CMD_UNSPEC = 0,
-	ACPI_GENL_CMD_EVENT = 1,
-	__ACPI_GENL_CMD_MAX = 2,
+	struct acpi_ec *ec;
 };
 
 struct acpi_ged_device {
@@ -69471,296 +113661,22 @@
 	acpi_handle handle;
 };
 
-typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
-
-struct acpi_table_bert {
-	struct acpi_table_header header;
-	u32 region_length;
-	u64 address;
-};
-
-struct acpi_table_attr {
-	struct bin_attribute attr;
-	char name[4];
-	int instance;
-	char filename[8];
-	struct list_head node;
-};
-
-struct acpi_data_attr {
-	struct bin_attribute attr;
-	u64 addr;
-};
-
-struct acpi_data_obj {
-	char *name;
-	int (*fn)(void *, struct acpi_data_attr *);
-};
-
-struct event_counter {
-	u32 count;
-	u32 flags;
-};
-
-struct acpi_device_properties {
-	const guid_t *guid;
-	const union acpi_object *properties;
-	struct list_head list;
-};
-
-struct acpi_lpat {
-	int temp;
-	int raw;
-};
-
-struct acpi_lpat_conversion_table {
-	struct acpi_lpat *lpat;
-	int lpat_count;
-};
-
-struct acpi_irq_parse_one_ctx {
-	int rc;
-	unsigned int index;
-	long unsigned int *res_flags;
-	struct irq_fwspec *fwspec;
-};
-
-enum {
-	ACPI_REFCLASS_LOCAL = 0,
-	ACPI_REFCLASS_ARG = 1,
-	ACPI_REFCLASS_REFOF = 2,
-	ACPI_REFCLASS_INDEX = 3,
-	ACPI_REFCLASS_TABLE = 4,
-	ACPI_REFCLASS_NAME = 5,
-	ACPI_REFCLASS_DEBUG = 6,
-	ACPI_REFCLASS_MAX = 6,
-};
-
-struct acpi_common_descriptor {
-	void *common_pointer;
-	u8 descriptor_type;
-};
-
-union acpi_descriptor {
-	struct acpi_common_descriptor common;
-	union acpi_operand_object object;
-	struct acpi_namespace_node node;
-	union acpi_parse_object op;
-};
-
-struct acpi_create_field_info {
-	struct acpi_namespace_node *region_node;
-	struct acpi_namespace_node *field_node;
-	struct acpi_namespace_node *register_node;
-	struct acpi_namespace_node *data_register_node;
-	struct acpi_namespace_node *connection_node;
-	u8 *resource_buffer;
-	u32 bank_value;
-	u32 field_bit_position;
-	u32 field_bit_length;
-	u16 resource_length;
-	u16 pin_number_index;
-	u8 field_flags;
-	u8 attribute;
-	u8 field_type;
-	u8 access_length;
-};
-
-struct acpi_init_walk_info {
-	u32 table_index;
-	u32 object_count;
-	u32 method_count;
-	u32 serial_method_count;
-	u32 non_serial_method_count;
-	u32 serialized_method_count;
-	u32 device_count;
-	u32 op_region_count;
-	u32 field_count;
-	u32 buffer_count;
-	u32 package_count;
-	u32 op_region_init;
-	u32 field_init;
-	u32 buffer_init;
-	u32 package_init;
-	acpi_owner_id owner_id;
-};
-
-typedef u32 acpi_name;
-
-typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
-
-struct acpi_name_info {
-	char name[4];
-	u16 argument_list;
-	u8 expected_btypes;
-} __attribute__((packed));
-
-struct acpi_package_info {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 object_type2;
-	u8 count2;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info2 {
-	u8 type;
-	u8 count;
-	u8 object_type[4];
-	u8 reserved;
-};
-
-struct acpi_package_info3 {
-	u8 type;
-	u8 count;
-	u8 object_type[2];
-	u8 tail_object_type;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info4 {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 sub_object_types;
-	u8 pkg_count;
-	u16 reserved;
-} __attribute__((packed));
-
-union acpi_predefined_info {
-	struct acpi_name_info info;
-	struct acpi_package_info ret_info;
-	struct acpi_package_info2 ret_info2;
-	struct acpi_package_info3 ret_info3;
-	struct acpi_package_info4 ret_info4;
-};
-
-struct acpi_evaluate_info {
-	struct acpi_namespace_node *prefix_node;
-	const char *relative_pathname;
-	union acpi_operand_object **parameters;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *obj_desc;
-	char *full_pathname;
-	const union acpi_predefined_info *predefined;
-	union acpi_operand_object *return_object;
-	union acpi_operand_object *parent_package;
-	u32 return_flags;
-	u32 return_btype;
-	u16 param_count;
-	u16 node_flags;
-	u8 pass_number;
-	u8 return_object_type;
-	u8 flags;
-};
-
-enum {
-	AML_FIELD_ACCESS_ANY = 0,
-	AML_FIELD_ACCESS_BYTE = 1,
-	AML_FIELD_ACCESS_WORD = 2,
-	AML_FIELD_ACCESS_DWORD = 3,
-	AML_FIELD_ACCESS_QWORD = 4,
-	AML_FIELD_ACCESS_BUFFER = 5,
-};
-
-typedef enum {
-	ACPI_IMODE_LOAD_PASS1 = 1,
-	ACPI_IMODE_LOAD_PASS2 = 2,
-	ACPI_IMODE_EXECUTE = 3,
-} acpi_interpreter_mode;
-
-typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
-
-struct acpi_reg_walk_info {
-	u32 function;
-	u32 reg_run_count;
-	acpi_adr_space_type space_id;
-};
-
-enum {
-	AML_FIELD_UPDATE_PRESERVE = 0,
-	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
-	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
-};
-
 struct acpi_signal_fatal_info {
 	u32 type;
 	u32 code;
 	u32 argument;
 };
 
-enum {
-	MATCH_MTR = 0,
-	MATCH_MEQ = 1,
-	MATCH_MLE = 2,
-	MATCH_MLT = 3,
-	MATCH_MGE = 4,
-	MATCH_MGT = 5,
-};
-
-enum {
-	AML_FIELD_ATTRIB_QUICK = 2,
-	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
-	AML_FIELD_ATTRIB_BYTE = 6,
-	AML_FIELD_ATTRIB_WORD = 8,
-	AML_FIELD_ATTRIB_BLOCK = 10,
-	AML_FIELD_ATTRIB_BYTES = 11,
-	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
-	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
-	AML_FIELD_ATTRIB_RAW_BYTES = 14,
-	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
-};
-
 typedef enum {
 	ACPI_TRACE_AML_METHOD = 0,
 	ACPI_TRACE_AML_OPCODE = 1,
 	ACPI_TRACE_AML_REGION = 2,
 } acpi_trace_event_type;
 
-struct acpi_port_info {
-	char *name;
-	u16 start;
-	u16 end;
-	u8 osi_dependency;
-};
-
-struct acpi_pci_device {
-	acpi_handle device;
-	struct acpi_pci_device *next;
-};
-
-typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
-
-struct acpi_device_walk_info {
-	struct acpi_table_desc *table_desc;
-	struct acpi_evaluate_info *evaluate_info;
-	u32 device_count;
-	u32 num_STA;
-	u32 num_INI;
-};
-
-struct acpi_table_list {
-	struct acpi_table_desc *tables;
-	u32 current_table_count;
-	u32 max_table_count;
-	u8 flags;
-};
-
-enum acpi_return_package_types {
-	ACPI_PTYPE1_FIXED = 1,
-	ACPI_PTYPE1_VAR = 2,
-	ACPI_PTYPE1_OPTION = 3,
-	ACPI_PTYPE2 = 4,
-	ACPI_PTYPE2_COUNT = 5,
-	ACPI_PTYPE2_PKG_COUNT = 6,
-	ACPI_PTYPE2_FIXED = 7,
-	ACPI_PTYPE2_MIN = 8,
-	ACPI_PTYPE2_REV_FIXED = 9,
-	ACPI_PTYPE2_FIX_VAR = 10,
-	ACPI_PTYPE2_VAR_VAR = 11,
-	ACPI_PTYPE2_UUID_PAIR = 12,
-	ACPI_PTYPE_CUSTOM = 13,
+struct acpi_gpe_block_status_context {
+	struct acpi_gpe_register_info *gpe_skip_register_info;
+	u8 gpe_skip_mask;
+	u8 retval;
 };
 
 typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);
@@ -69772,1990 +113688,145 @@
 	acpi_object_converter object_converter;
 };
 
-typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
-
-struct acpi_repair_info {
-	char name[4];
-	acpi_repair_function repair_function;
-};
-
-struct acpi_namestring_info {
-	const char *external_name;
-	const char *next_external_char;
-	char *internal_name;
-	u32 length;
-	u32 num_segments;
-	u32 num_carats;
-	u8 fully_qualified;
-};
-
-typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
-
-struct acpi_rw_lock {
-	void *writer_mutex;
-	void *reader_mutex;
-	u32 num_readers;
-};
-
-struct acpi_get_devices_info {
-	acpi_walk_callback user_function;
-	void *context;
-	const char *hid;
-};
-
-struct aml_resource_small_header {
-	u8 descriptor_type;
-};
-
-struct aml_resource_irq {
-	u8 descriptor_type;
-	u16 irq_mask;
-	u8 flags;
-} __attribute__((packed));
-
-struct aml_resource_dma {
-	u8 descriptor_type;
-	u8 dma_channel_mask;
-	u8 flags;
-};
-
-struct aml_resource_start_dependent {
-	u8 descriptor_type;
-	u8 flags;
-};
-
-struct aml_resource_end_dependent {
-	u8 descriptor_type;
-};
-
-struct aml_resource_io {
-	u8 descriptor_type;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u8 alignment;
-	u8 address_length;
-};
-
-struct aml_resource_fixed_io {
-	u8 descriptor_type;
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_small {
-	u8 descriptor_type;
-};
-
-struct aml_resource_end_tag {
-	u8 descriptor_type;
-	u8 checksum;
-};
-
-struct aml_resource_fixed_dma {
-	u8 descriptor_type;
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct aml_resource_large_header {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory24 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_large {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_fixed_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-} __attribute__((packed));
-
-struct aml_resource_extended_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u8 revision_ID;
-	u8 reserved;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct aml_resource_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address16 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_extended_irq {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u8 interrupt_count;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct aml_resource_generic_register {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 address_space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct aml_resource_gpio {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 connection_type;
-	u16 flags;
-	u16 int_flags;
-	u8 pin_config;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_common_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-} __attribute__((packed));
-
-struct aml_resource_i2c_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u16 slave_address;
-} __attribute__((packed));
-
-struct aml_resource_spi_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-} __attribute__((packed));
-
-struct aml_resource_uart_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 default_baud_rate;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u8 parity;
-	u8 lines_enabled;
-} __attribute__((packed));
-
-struct aml_resource_pin_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config;
-	u16 function_number;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 pin_table_offset;
-	u16 label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 function_number;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-union aml_resource {
-	u8 descriptor_type;
-	struct aml_resource_small_header small_header;
-	struct aml_resource_large_header large_header;
-	struct aml_resource_irq irq;
-	struct aml_resource_dma dma;
-	struct aml_resource_start_dependent start_dpf;
-	struct aml_resource_end_dependent end_dpf;
-	struct aml_resource_io io;
-	struct aml_resource_fixed_io fixed_io;
-	struct aml_resource_fixed_dma fixed_dma;
-	struct aml_resource_vendor_small vendor_small;
-	struct aml_resource_end_tag end_tag;
-	struct aml_resource_memory24 memory24;
-	struct aml_resource_generic_register generic_reg;
-	struct aml_resource_vendor_large vendor_large;
-	struct aml_resource_memory32 memory32;
-	struct aml_resource_fixed_memory32 fixed_memory32;
-	struct aml_resource_address16 address16;
-	struct aml_resource_address32 address32;
-	struct aml_resource_address64 address64;
-	struct aml_resource_extended_address64 ext_address64;
-	struct aml_resource_extended_irq extended_irq;
-	struct aml_resource_gpio gpio;
-	struct aml_resource_i2c_serialbus i2c_serial_bus;
-	struct aml_resource_spi_serialbus spi_serial_bus;
-	struct aml_resource_uart_serialbus uart_serial_bus;
-	struct aml_resource_common_serialbus common_serial_bus;
-	struct aml_resource_pin_function pin_function;
-	struct aml_resource_pin_config pin_config;
-	struct aml_resource_pin_group pin_group;
-	struct aml_resource_pin_group_function pin_group_function;
-	struct aml_resource_pin_group_config pin_group_config;
-	struct aml_resource_address address;
-	u32 dword_item;
-	u16 word_item;
-	u8 byte_item;
-};
-
-struct acpi_rsconvert_info {
-	u8 opcode;
-	u8 resource_offset;
-	u8 aml_offset;
-	u8 value;
-};
-
-enum {
-	ACPI_RSC_INITGET = 0,
-	ACPI_RSC_INITSET = 1,
-	ACPI_RSC_FLAGINIT = 2,
-	ACPI_RSC_1BITFLAG = 3,
-	ACPI_RSC_2BITFLAG = 4,
-	ACPI_RSC_3BITFLAG = 5,
-	ACPI_RSC_ADDRESS = 6,
-	ACPI_RSC_BITMASK = 7,
-	ACPI_RSC_BITMASK16 = 8,
-	ACPI_RSC_COUNT = 9,
-	ACPI_RSC_COUNT16 = 10,
-	ACPI_RSC_COUNT_GPIO_PIN = 11,
-	ACPI_RSC_COUNT_GPIO_RES = 12,
-	ACPI_RSC_COUNT_GPIO_VEN = 13,
-	ACPI_RSC_COUNT_SERIAL_RES = 14,
-	ACPI_RSC_COUNT_SERIAL_VEN = 15,
-	ACPI_RSC_DATA8 = 16,
-	ACPI_RSC_EXIT_EQ = 17,
-	ACPI_RSC_EXIT_LE = 18,
-	ACPI_RSC_EXIT_NE = 19,
-	ACPI_RSC_LENGTH = 20,
-	ACPI_RSC_MOVE_GPIO_PIN = 21,
-	ACPI_RSC_MOVE_GPIO_RES = 22,
-	ACPI_RSC_MOVE_SERIAL_RES = 23,
-	ACPI_RSC_MOVE_SERIAL_VEN = 24,
-	ACPI_RSC_MOVE8 = 25,
-	ACPI_RSC_MOVE16 = 26,
-	ACPI_RSC_MOVE32 = 27,
-	ACPI_RSC_MOVE64 = 28,
-	ACPI_RSC_SET8 = 29,
-	ACPI_RSC_SOURCE = 30,
-	ACPI_RSC_SOURCEX = 31,
-};
-
-typedef u16 acpi_rs_length;
-
-typedef u32 acpi_rsdesc_size;
-
-struct acpi_vendor_uuid {
-	u8 subtype;
-	u8 data[16];
-};
-
-typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
-
-struct acpi_vendor_walk_info {
-	struct acpi_vendor_uuid *uuid;
-	struct acpi_buffer *buffer;
-	acpi_status status;
-};
-
-typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
-
-struct acpi_fadt_info {
-	const char *name;
-	u16 address64;
-	u16 address32;
-	u16 length;
-	u8 default_length;
-	u8 flags;
-};
-
-struct acpi_fadt_pm_info {
-	struct acpi_generic_address *target;
-	u16 source;
-	u8 register_num;
-};
-
-struct acpi_table_rsdp {
-	char signature[8];
-	u8 checksum;
-	char oem_id[6];
-	u8 revision;
-	u32 rsdt_physical_address;
-	u32 length;
-	u64 xsdt_physical_address;
-	u8 extended_checksum;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_address_range {
-	struct acpi_address_range *next;
-	struct acpi_namespace_node *region_node;
-	acpi_physical_address start_address;
-	acpi_physical_address end_address;
-};
-
-struct acpi_pkg_info {
-	u8 *free_space;
-	acpi_size length;
-	u32 object_space;
-	u32 num_packages;
-};
-
-struct acpi_exception_info {
-	char *name;
-};
-
-typedef u32 (*acpi_sci_handler)(void *);
-
-typedef u32 (*acpi_interface_handler)(acpi_string, u32);
-
-struct acpi_mutex_info {
-	void *mutex;
-	u32 use_count;
-	u64 thread_id;
-};
-
-struct acpi_sci_handler_info {
-	struct acpi_sci_handler_info *next;
-	acpi_sci_handler address;
-	void *context;
-};
-
-struct acpi_comment_node {
-	char *comment;
-	struct acpi_comment_node *next;
-};
-
-struct acpi_interface_info {
-	char *name;
-	struct acpi_interface_info *next;
-	u8 flags;
-	u8 value;
-};
-
-typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
-
-typedef u32 acpi_mutex_handle;
-
-typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
-
-struct acpi_table_mcfg {
-	struct acpi_table_header header;
-	u8 reserved[8];
-};
-
-struct acpi_mcfg_allocation {
-	u64 address;
-	u16 pci_segment;
-	u8 start_bus_number;
-	u8 end_bus_number;
-	u32 reserved;
-};
-
-struct mcfg_entry {
-	struct list_head list;
-	phys_addr_t addr;
-	u16 segment;
-	u8 bus_start;
-	u8 bus_end;
-};
-
-struct mcfg_fixup {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	u16 segment;
-	struct resource bus_range;
-	const struct pci_ecam_ops *ops;
-	struct resource cfgres;
-};
-
 struct acpi_pci_slot {
 	struct pci_slot *pci_slot;
 	struct list_head list;
 };
 
-struct acpi_power_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_lpi_states_array {
-	unsigned int size;
-	unsigned int composite_states_size;
-	struct acpi_lpi_state *entries;
-	struct acpi_lpi_state *composite_states[8];
+struct acpi_thermal_state {
+	u8 critical: 1;
+	u8 hot: 1;
+	u8 passive: 1;
+	u8 active: 1;
+	u8 reserved: 4;
+	int active_index;
 };
 
-struct container_dev {
-	struct device dev;
-	int (*offline)(struct container_dev *);
+struct acpi_thermal_state_flags {
+	u8 valid: 1;
+	u8 enabled: 1;
+	u8 reserved: 6;
 };
 
-struct acpi_table_slit {
-	struct acpi_table_header header;
-	u64 locality_count;
-	u8 entry[1];
-} __attribute__((packed));
-
-struct acpi_table_srat {
-	struct acpi_table_header header;
-	u32 table_revision;
-	u64 reserved;
+struct acpi_thermal_critical {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
 };
 
-struct acpi_srat_cpu_affinity {
-	struct acpi_subtable_header header;
-	u8 proximity_domain_lo;
-	u8 apic_id;
-	u32 flags;
-	u8 local_sapic_eid;
-	u8 proximity_domain_hi[3];
-	u32 clock_domain;
+struct acpi_thermal_hot {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
 };
 
-struct acpi_srat_mem_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u64 base_address;
-	u64 length;
-	u32 reserved1;
-	u32 flags;
-	u64 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_x2apic_cpu_affinity {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 proximity_domain;
-	u32 apic_id;
-	u32 flags;
-	u32 clock_domain;
-	u32 reserved2;
+struct acpi_thermal_passive {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	long unsigned int tc1;
+	long unsigned int tc2;
+	long unsigned int tsp;
+	struct acpi_handle_list devices;
 };
 
-struct acpi_srat_generic_affinity {
-	struct acpi_subtable_header header;
-	u8 reserved;
-	u8 device_handle_type;
-	u32 proximity_domain;
-	u8 device_handle[16];
-	u32 flags;
-	u32 reserved1;
+struct acpi_thermal_active {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	struct acpi_handle_list devices;
 };
 
-enum acpi_hmat_type {
-	ACPI_HMAT_TYPE_PROXIMITY = 0,
-	ACPI_HMAT_TYPE_LOCALITY = 1,
-	ACPI_HMAT_TYPE_CACHE = 2,
-	ACPI_HMAT_TYPE_RESERVED = 3,
+struct acpi_thermal_trips {
+	struct acpi_thermal_critical critical;
+	struct acpi_thermal_hot hot;
+	struct acpi_thermal_passive passive;
+	struct acpi_thermal_active active[10];
 };
 
-struct acpi_hmat_proximity_domain {
-	struct acpi_hmat_structure header;
-	u16 flags;
-	u16 reserved1;
-	u32 processor_PD;
-	u32 memory_PD;
-	u32 reserved2;
-	u64 reserved3;
-	u64 reserved4;
+struct acpi_thermal_flags {
+	u8 cooling_mode: 1;
+	u8 devices: 1;
+	u8 reserved: 6;
 };
 
-struct acpi_hmat_locality {
-	struct acpi_hmat_structure header;
-	u8 flags;
-	u8 data_type;
-	u16 reserved1;
-	u32 number_of_initiator_Pds;
-	u32 number_of_target_Pds;
-	u32 reserved2;
-	u64 entry_base_unit;
-};
-
-struct acpi_hmat_cache {
-	struct acpi_hmat_structure header;
-	u32 memory_PD;
-	u32 reserved1;
-	u64 cache_size;
-	u32 cache_attributes;
-	u16 reserved2;
-	u16 number_of_SMBIOShandles;
-};
-
-struct node_hmem_attrs {
-	unsigned int read_bandwidth;
-	unsigned int write_bandwidth;
-	unsigned int read_latency;
-	unsigned int write_latency;
-};
-
-enum cache_indexing {
-	NODE_CACHE_DIRECT_MAP = 0,
-	NODE_CACHE_INDEXED = 1,
-	NODE_CACHE_OTHER = 2,
-};
-
-enum cache_write_policy {
-	NODE_CACHE_WRITE_BACK = 0,
-	NODE_CACHE_WRITE_THROUGH = 1,
-	NODE_CACHE_WRITE_OTHER = 2,
-};
-
-struct node_cache_attrs {
-	enum cache_indexing indexing;
-	enum cache_write_policy write_policy;
-	u64 size;
-	u16 line_size;
-	u8 level;
-};
-
-enum locality_types {
-	WRITE_LATENCY = 0,
-	READ_LATENCY = 1,
-	WRITE_BANDWIDTH = 2,
-	READ_BANDWIDTH = 3,
-};
-
-struct memory_locality {
-	struct list_head node;
-	struct acpi_hmat_locality *hmat_loc;
-};
-
-struct target_cache {
-	struct list_head node;
-	struct node_cache_attrs cache_attrs;
-};
-
-struct memory_target {
-	struct list_head node;
-	unsigned int memory_pxm;
-	unsigned int processor_pxm;
-	struct resource memregions;
-	struct node_hmem_attrs hmem_attrs[2];
-	struct list_head caches;
-	struct node_cache_attrs cache_attrs;
-	bool registered;
-};
-
-struct memory_initiator {
-	struct list_head node;
-	unsigned int processor_pxm;
-	bool has_cpu;
-};
-
-struct acpi_memory_info {
-	struct list_head list;
-	u64 start_addr;
-	u64 length;
-	short unsigned int caching;
-	short unsigned int write_protect;
-	unsigned int enabled: 1;
-};
-
-struct acpi_memory_device {
+struct acpi_thermal {
 	struct acpi_device *device;
-	struct list_head res_list;
+	acpi_bus_id name;
+	long unsigned int temperature;
+	long unsigned int last_temperature;
+	long unsigned int polling_frequency;
+	volatile u8 zombie;
+	struct acpi_thermal_flags flags;
+	struct acpi_thermal_state state;
+	struct acpi_thermal_trips trips;
+	struct acpi_handle_list devices;
+	struct thermal_zone_device *thermal_zone;
+	int kelvin_offset;
+	struct work_struct thermal_check_work;
+	struct mutex thermal_check_lock;
+	refcount_t thermal_check_count;
 };
 
-struct acpi_pcct_hw_reduced {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_shared_memory {
-	u32 signature;
-	u16 command;
-	u16 status;
-};
-
-struct mbox_chan;
-
-struct mbox_chan_ops {
-	int (*send_data)(struct mbox_chan *, void *);
-	int (*flush)(struct mbox_chan *, long unsigned int);
-	int (*startup)(struct mbox_chan *);
-	void (*shutdown)(struct mbox_chan *);
-	bool (*last_tx_done)(struct mbox_chan *);
-	bool (*peek_data)(struct mbox_chan *);
-};
-
-struct mbox_controller;
-
-struct mbox_client;
-
-struct mbox_chan {
-	struct mbox_controller *mbox;
-	unsigned int txdone_method;
-	struct mbox_client *cl;
-	struct completion tx_complete;
-	void *active_req;
-	unsigned int msg_count;
-	unsigned int msg_free;
-	void *msg_data[20];
-	spinlock_t lock;
-	void *con_priv;
-};
-
-struct mbox_controller {
-	struct device *dev;
-	const struct mbox_chan_ops *ops;
-	struct mbox_chan *chans;
-	int num_chans;
-	bool txdone_irq;
-	bool txdone_poll;
-	unsigned int txpoll_period;
-	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
-	struct hrtimer poll_hrt;
-	struct list_head node;
-};
-
-struct mbox_client {
-	struct device *dev;
-	bool tx_block;
-	long unsigned int tx_tout;
-	bool knows_txdone;
-	void (*rx_callback)(struct mbox_client *, void *);
-	void (*tx_prepare)(struct mbox_client *, void *);
-	void (*tx_done)(struct mbox_client *, void *, int);
-};
-
-struct cpc_reg {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct cpc_register_resource {
-	acpi_object_type type;
-	u64 *sys_mem_vaddr;
-	union {
-		struct cpc_reg reg;
-		u64 int_value;
-	} cpc_entry;
-};
-
-struct cpc_desc {
-	int num_entries;
-	int version;
-	int cpu_id;
-	int write_cmd_status;
-	int write_cmd_id;
-	struct cpc_register_resource cpc_regs[21];
-	struct acpi_psd_package domain_info;
-	struct kobject kobj;
-};
-
-enum cppc_regs {
-	HIGHEST_PERF = 0,
-	NOMINAL_PERF = 1,
-	LOW_NON_LINEAR_PERF = 2,
-	LOWEST_PERF = 3,
-	GUARANTEED_PERF = 4,
-	DESIRED_PERF = 5,
-	MIN_PERF = 6,
-	MAX_PERF = 7,
-	PERF_REDUC_TOLERANCE = 8,
-	TIME_WINDOW = 9,
-	CTR_WRAP_TIME = 10,
-	REFERENCE_CTR = 11,
-	DELIVERED_CTR = 12,
-	PERF_LIMITED = 13,
-	ENABLE = 14,
-	AUTO_SEL_ENABLE = 15,
-	AUTO_ACT_WINDOW = 16,
-	ENERGY_PERF = 17,
-	REFERENCE_PERF = 18,
-	LOWEST_FREQ = 19,
-	NOMINAL_FREQ = 20,
-};
-
-struct cppc_perf_caps {
-	u32 guaranteed_perf;
-	u32 highest_perf;
-	u32 nominal_perf;
-	u32 lowest_perf;
-	u32 lowest_nonlinear_perf;
-	u32 lowest_freq;
-	u32 nominal_freq;
-};
-
-struct cppc_perf_ctrls {
-	u32 max_perf;
-	u32 min_perf;
-	u32 desired_perf;
-};
-
-struct cppc_perf_fb_ctrs {
-	u64 reference;
-	u64 delivered;
-	u64 reference_perf;
-	u64 wraparound_time;
-};
-
-struct cppc_cpudata {
-	int cpu;
-	struct cppc_perf_caps perf_caps;
-	struct cppc_perf_ctrls perf_ctrls;
-	struct cppc_perf_fb_ctrs perf_fb_ctrs;
-	struct cpufreq_policy *cur_policy;
-	unsigned int shared_type;
-	cpumask_var_t shared_cpu_map;
-};
-
-struct cppc_pcc_data {
-	struct mbox_chan *pcc_channel;
-	void *pcc_comm_addr;
-	bool pcc_channel_acquired;
-	unsigned int deadline_us;
-	unsigned int pcc_mpar;
-	unsigned int pcc_mrtt;
-	unsigned int pcc_nominal;
-	bool pending_pcc_write_cmd;
-	bool platform_owns_pcc;
-	unsigned int pcc_write_cnt;
-	struct rw_semaphore pcc_lock;
-	wait_queue_head_t pcc_write_wait_q;
-	ktime_t last_cmd_cmpl_time;
-	ktime_t last_mpar_reset;
-	int mpar_count;
-	int refcount;
-};
-
-struct cppc_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, ssize_t);
-};
-
-enum acpi_pptt_type {
-	ACPI_PPTT_TYPE_PROCESSOR = 0,
-	ACPI_PPTT_TYPE_CACHE = 1,
-	ACPI_PPTT_TYPE_ID = 2,
-	ACPI_PPTT_TYPE_RESERVED = 3,
-};
-
-struct acpi_pptt_processor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 parent;
-	u32 acpi_processor_id;
-	u32 number_of_priv_resources;
-};
-
-struct acpi_pptt_cache {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 next_level_of_cache;
-	u32 size;
-	u32 number_of_sets;
-	u8 associativity;
-	u8 attributes;
-	u16 line_size;
-};
-
-struct acpi_whea_header {
-	u8 action;
-	u8 instruction;
-	u8 flags;
-	u8 reserved;
-	struct acpi_generic_address register_region;
-	u64 value;
-	u64 mask;
-} __attribute__((packed));
-
-struct acpi_hest_header {
-	u16 type;
-	u16 source_id;
-};
-
-struct cper_sec_mem_err {
-	u64 validation_bits;
-	u64 error_status;
-	u64 physical_addr;
-	u64 physical_addr_mask;
-	u16 node;
-	u16 card;
-	u16 module;
-	u16 bank;
-	u16 device;
-	u16 row;
-	u16 column;
-	u16 bit_pos;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 target_id;
-	u8 error_type;
-	u8 extended;
-	u16 rank;
-	u16 mem_array_handle;
-	u16 mem_dev_handle;
-};
-
-struct apei_exec_context;
-
-typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);
-
-struct apei_exec_ins_type;
-
-struct apei_exec_context {
-	u32 ip;
-	u64 value;
-	u64 var1;
-	u64 var2;
-	u64 src_base;
-	u64 dst_base;
-	struct apei_exec_ins_type *ins_table;
-	u32 instructions;
-	struct acpi_whea_header *action_table;
-	u32 entries;
-};
-
-struct apei_exec_ins_type {
-	u32 flags;
-	apei_exec_ins_func_t run;
-};
-
-struct apei_resources {
-	struct list_head iomem;
-	struct list_head ioport;
-};
-
-typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);
-
-struct apei_res {
+struct acpi_battery_hook {
+	const char *name;
+	int (*add_battery)(struct power_supply *, struct acpi_battery_hook *);
+	int (*remove_battery)(struct power_supply *, struct acpi_battery_hook *);
 	struct list_head list;
-	long unsigned int start;
-	long unsigned int end;
 };
 
-struct acpi_table_hest {
-	struct acpi_table_header header;
-	u32 error_source_count;
+enum {
+	ACPI_BATTERY_ALARM_PRESENT = 0,
+	ACPI_BATTERY_XINFO_PRESENT = 1,
+	ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,
+	ACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,
+	ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,
 };
 
-enum acpi_hest_types {
-	ACPI_HEST_TYPE_IA32_CHECK = 0,
-	ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
-	ACPI_HEST_TYPE_IA32_NMI = 2,
-	ACPI_HEST_TYPE_NOT_USED3 = 3,
-	ACPI_HEST_TYPE_NOT_USED4 = 4,
-	ACPI_HEST_TYPE_NOT_USED5 = 5,
-	ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
-	ACPI_HEST_TYPE_AER_ENDPOINT = 7,
-	ACPI_HEST_TYPE_AER_BRIDGE = 8,
-	ACPI_HEST_TYPE_GENERIC_ERROR = 9,
-	ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
-	ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
-	ACPI_HEST_TYPE_RESERVED = 12,
-};
-
-struct acpi_hest_notify {
-	u8 type;
-	u8 length;
-	u16 config_write_enable;
-	u32 poll_interval;
-	u32 vector;
-	u32 polling_threshold_value;
-	u32 polling_threshold_window;
-	u32 error_threshold_value;
-	u32 error_threshold_window;
-};
-
-struct acpi_hest_ia_machine_check {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	u64 global_capability_data;
-	u64 global_control_data;
-	u8 num_hardware_banks;
-	u8 reserved3[7];
-};
-
-struct acpi_hest_ia_corrected {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	struct acpi_hest_notify notify;
-	u8 num_hardware_banks;
-	u8 reserved2[3];
-};
-
-struct acpi_hest_ia_deferred_check {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	struct acpi_hest_notify notify;
-	u8 num_hardware_banks;
-	u8 reserved2[3];
-};
-
-enum hest_status {
-	HEST_ENABLED = 0,
-	HEST_DISABLED = 1,
-	HEST_NOT_FOUND = 2,
-};
-
-typedef int (*apei_hest_func_t)(struct acpi_hest_header *, void *);
-
-struct acpi_table_erst {
-	struct acpi_table_header header;
-	u32 header_length;
-	u32 reserved;
-	u32 entries;
-};
-
-enum acpi_erst_actions {
-	ACPI_ERST_BEGIN_WRITE = 0,
-	ACPI_ERST_BEGIN_READ = 1,
-	ACPI_ERST_BEGIN_CLEAR = 2,
-	ACPI_ERST_END = 3,
-	ACPI_ERST_SET_RECORD_OFFSET = 4,
-	ACPI_ERST_EXECUTE_OPERATION = 5,
-	ACPI_ERST_CHECK_BUSY_STATUS = 6,
-	ACPI_ERST_GET_COMMAND_STATUS = 7,
-	ACPI_ERST_GET_RECORD_ID = 8,
-	ACPI_ERST_SET_RECORD_ID = 9,
-	ACPI_ERST_GET_RECORD_COUNT = 10,
-	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
-	ACPI_ERST_NOT_USED = 12,
-	ACPI_ERST_GET_ERROR_RANGE = 13,
-	ACPI_ERST_GET_ERROR_LENGTH = 14,
-	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
-	ACPI_ERST_EXECUTE_TIMINGS = 16,
-	ACPI_ERST_ACTION_RESERVED = 17,
-};
-
-enum acpi_erst_instructions {
-	ACPI_ERST_READ_REGISTER = 0,
-	ACPI_ERST_READ_REGISTER_VALUE = 1,
-	ACPI_ERST_WRITE_REGISTER = 2,
-	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
-	ACPI_ERST_NOOP = 4,
-	ACPI_ERST_LOAD_VAR1 = 5,
-	ACPI_ERST_LOAD_VAR2 = 6,
-	ACPI_ERST_STORE_VAR1 = 7,
-	ACPI_ERST_ADD = 8,
-	ACPI_ERST_SUBTRACT = 9,
-	ACPI_ERST_ADD_VALUE = 10,
-	ACPI_ERST_SUBTRACT_VALUE = 11,
-	ACPI_ERST_STALL = 12,
-	ACPI_ERST_STALL_WHILE_TRUE = 13,
-	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
-	ACPI_ERST_GOTO = 15,
-	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
-	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
-	ACPI_ERST_MOVE_DATA = 18,
-	ACPI_ERST_INSTRUCTION_RESERVED = 19,
-};
-
-struct cper_record_header {
-	char signature[4];
-	u16 revision;
-	u32 signature_end;
-	u16 section_count;
-	u32 error_severity;
-	u32 validation_bits;
-	u32 record_length;
-	u64 timestamp;
-	guid_t platform_id;
-	guid_t partition_id;
-	guid_t creator_id;
-	guid_t notification_type;
-	u64 record_id;
-	u32 flags;
-	u64 persistence_information;
-	u8 reserved[12];
-} __attribute__((packed));
-
-struct cper_section_descriptor {
-	u32 section_offset;
-	u32 section_length;
-	u16 revision;
-	u8 validation_bits;
-	u8 reserved;
-	u32 flags;
-	guid_t section_type;
-	guid_t fru_id;
-	u32 section_severity;
-	u8 fru_text[20];
-};
-
-struct erst_erange {
-	u64 base;
-	u64 size;
-	void *vaddr;
-	u32 attr;
-};
-
-struct erst_record_id_cache {
+struct acpi_battery {
 	struct mutex lock;
-	u64 *entries;
-	int len;
-	int size;
-	int refcount;
-};
-
-struct cper_pstore_record {
-	struct cper_record_header hdr;
-	struct cper_section_descriptor sec_hdr;
-	char data[0];
-};
-
-struct acpi_bert_region {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct acpi_hest_generic_status {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct pmic_table {
-	int address;
-	int reg;
-	int bit;
-};
-
-struct intel_pmic_opregion_data {
-	int (*get_power)(struct regmap *, int, int, u64 *);
-	int (*update_power)(struct regmap *, int, int, bool);
-	int (*get_raw_temp)(struct regmap *, int);
-	int (*update_aux)(struct regmap *, int, int);
-	int (*get_policy)(struct regmap *, int, int, u64 *);
-	int (*update_policy)(struct regmap *, int, int, int);
-	int (*exec_mipi_pmic_seq_element)(struct regmap *, u16, u32, u32, u32);
-	struct pmic_table *power_table;
-	int power_table_count;
-	struct pmic_table *thermal_table;
-	int thermal_table_count;
-	int pmic_i2c_address;
-};
-
-struct intel_pmic_regs_handler_ctx {
-	unsigned int val;
-	u16 addr;
-};
-
-struct intel_pmic_opregion {
-	struct mutex lock;
-	struct acpi_lpat_conversion_table *lpat_table;
-	struct regmap *regmap;
-	struct intel_pmic_opregion_data *data;
-	struct intel_pmic_regs_handler_ctx ctx;
-};
-
-struct acpi_table_iort {
-	struct acpi_table_header header;
-	u32 node_count;
-	u32 node_offset;
-	u32 reserved;
-};
-
-struct acpi_iort_node {
-	u8 type;
-	u16 length;
-	u8 revision;
-	u32 reserved;
-	u32 mapping_count;
-	u32 mapping_offset;
-	char node_data[1];
-} __attribute__((packed));
-
-enum acpi_iort_node_type {
-	ACPI_IORT_NODE_ITS_GROUP = 0,
-	ACPI_IORT_NODE_NAMED_COMPONENT = 1,
-	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 2,
-	ACPI_IORT_NODE_SMMU = 3,
-	ACPI_IORT_NODE_SMMU_V3 = 4,
-	ACPI_IORT_NODE_PMCG = 5,
-};
-
-struct acpi_iort_id_mapping {
-	u32 input_base;
-	u32 id_count;
-	u32 output_base;
-	u32 output_reference;
-	u32 flags;
-};
-
-struct acpi_iort_its_group {
-	u32 its_count;
-	u32 identifiers[1];
-};
-
-struct acpi_iort_named_component {
-	u32 node_flags;
-	u64 memory_properties;
-	u8 memory_address_limit;
-	char device_name[1];
-} __attribute__((packed));
-
-struct acpi_iort_root_complex {
-	u64 memory_properties;
-	u32 ats_attribute;
-	u32 pci_segment_number;
-	u8 memory_address_limit;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_iort_smmu {
-	u64 base_address;
-	u64 span;
-	u32 model;
-	u32 flags;
-	u32 global_interrupt_offset;
-	u32 context_interrupt_count;
-	u32 context_interrupt_offset;
-	u32 pmu_interrupt_count;
-	u32 pmu_interrupt_offset;
-	u64 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_iort_smmu_v3 {
-	u64 base_address;
-	u32 flags;
-	u32 reserved;
-	u64 vatos_address;
-	u32 model;
-	u32 event_gsiv;
-	u32 pri_gsiv;
-	u32 gerr_gsiv;
-	u32 sync_gsiv;
-	u32 pxm;
-	u32 id_mapping_index;
-} __attribute__((packed));
-
-struct acpi_iort_pmcg {
-	u64 page0_base_address;
-	u32 overflow_gsiv;
-	u32 node_reference;
-	u64 page1_base_address;
-};
-
-struct iort_its_msi_chip {
+	struct mutex sysfs_lock;
+	struct power_supply *bat;
+	struct power_supply_desc bat_desc;
+	struct acpi_device *device;
+	struct notifier_block pm_nb;
 	struct list_head list;
-	struct fwnode_handle *fw_node;
-	phys_addr_t base_addr;
-	u32 translation_id;
-};
-
-struct iort_fwnode {
-	struct list_head list;
-	struct acpi_iort_node *iort_node;
-	struct fwnode_handle *fwnode;
-};
-
-typedef acpi_status (*iort_find_node_callback)(struct acpi_iort_node *, void *);
-
-struct iort_pci_alias_info {
-	struct device *dev;
-	struct acpi_iort_node *node;
-};
-
-struct iort_dev_config {
-	const char *name;
-	int (*dev_init)(struct acpi_iort_node *);
-	void (*dev_dma_configure)(struct device *, struct acpi_iort_node *);
-	int (*dev_count_resources)(struct acpi_iort_node *);
-	void (*dev_init_resources)(struct resource *, struct acpi_iort_node *);
-	int (*dev_set_proximity)(struct device *, struct acpi_iort_node *);
-	int (*dev_add_platdata)(struct platform_device *);
-};
-
-enum arch_timer_ppi_nr {
-	ARCH_TIMER_PHYS_SECURE_PPI = 0,
-	ARCH_TIMER_PHYS_NONSECURE_PPI = 1,
-	ARCH_TIMER_VIRT_PPI = 2,
-	ARCH_TIMER_HYP_PPI = 3,
-	ARCH_TIMER_MAX_TIMER_PPI = 4,
-};
-
-struct arch_timer_mem_frame {
-	bool valid;
-	phys_addr_t cntbase;
-	size_t size;
-	int phys_irq;
-	int virt_irq;
-};
-
-struct arch_timer_mem {
-	phys_addr_t cntctlbase;
-	size_t size;
-	struct arch_timer_mem_frame frame[8];
-};
-
-struct acpi_table_gtdt {
-	struct acpi_table_header header;
-	u64 counter_block_addresss;
-	u32 reserved;
-	u32 secure_el1_interrupt;
-	u32 secure_el1_flags;
-	u32 non_secure_el1_interrupt;
-	u32 non_secure_el1_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 non_secure_el2_interrupt;
-	u32 non_secure_el2_flags;
-	u64 counter_read_block_address;
-	u32 platform_timer_count;
-	u32 platform_timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_header {
-	u8 type;
-	u16 length;
-} __attribute__((packed));
-
-enum acpi_gtdt_type {
-	ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
-	ACPI_GTDT_TYPE_WATCHDOG = 1,
-	ACPI_GTDT_TYPE_RESERVED = 2,
-};
-
-struct acpi_gtdt_timer_block {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 block_address;
-	u32 timer_count;
-	u32 timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_timer_entry {
-	u8 frame_number;
-	u8 reserved[3];
-	u64 base_address;
-	u64 el0_base_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 common_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_watchdog {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 refresh_frame_address;
-	u64 control_frame_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_descriptor {
-	struct acpi_table_gtdt *gtdt;
-	void *gtdt_end;
-	void *platform_timer;
-};
-
-struct pnp_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-};
-
-struct pnp_card_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-	struct {
-		__u8 id[8];
-	} devs[8];
-};
-
-struct pnp_protocol;
-
-struct pnp_id;
-
-struct pnp_card {
-	struct device dev;
-	unsigned char number;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head devices;
-	struct pnp_protocol *protocol;
-	struct pnp_id *id;
-	char name[50];
-	unsigned char pnpver;
-	unsigned char productver;
-	unsigned int serial;
-	unsigned char checksum;
-	struct proc_dir_entry *procdir;
-};
-
-struct pnp_dev;
-
-struct pnp_protocol {
-	struct list_head protocol_list;
-	char *name;
-	int (*get)(struct pnp_dev *);
-	int (*set)(struct pnp_dev *);
-	int (*disable)(struct pnp_dev *);
-	bool (*can_wakeup)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	unsigned char number;
-	struct device dev;
-	struct list_head cards;
-	struct list_head devices;
-};
-
-struct pnp_id {
-	char id[8];
-	struct pnp_id *next;
-};
-
-struct pnp_card_driver;
-
-struct pnp_card_link {
-	struct pnp_card *card;
-	struct pnp_card_driver *driver;
-	void *driver_data;
-	pm_message_t pm_state;
-};
-
-struct pnp_driver {
-	const char *name;
-	const struct pnp_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
-	void (*remove)(struct pnp_dev *);
-	void (*shutdown)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	struct device_driver driver;
-};
-
-struct pnp_card_driver {
-	struct list_head global_list;
-	char *name;
-	const struct pnp_card_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
-	void (*remove)(struct pnp_card_link *);
-	int (*suspend)(struct pnp_card_link *, pm_message_t);
-	int (*resume)(struct pnp_card_link *);
-	struct pnp_driver link;
-};
-
-struct pnp_dev {
-	struct device dev;
-	u64 dma_mask;
-	unsigned int number;
-	int status;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head card_list;
-	struct list_head rdev_list;
-	struct pnp_protocol *protocol;
-	struct pnp_card *card;
-	struct pnp_driver *driver;
-	struct pnp_card_link *card_link;
-	struct pnp_id *id;
-	int active;
-	int capabilities;
-	unsigned int num_dependent_sets;
-	struct list_head resources;
-	struct list_head options;
-	char name[50];
-	int flags;
-	struct proc_dir_entry *procent;
-	void *data;
-};
-
-struct pnp_resource {
-	struct list_head list;
-	struct resource res;
-};
-
-struct pnp_port {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-typedef struct {
-	long unsigned int bits[4];
-} pnp_irq_mask_t;
-
-struct pnp_irq {
-	pnp_irq_mask_t map;
-	unsigned char flags;
-};
-
-struct pnp_dma {
-	unsigned char map;
-	unsigned char flags;
-};
-
-struct pnp_mem {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-struct pnp_option {
-	struct list_head list;
-	unsigned int flags;
-	long unsigned int type;
-	union {
-		struct pnp_port port;
-		struct pnp_irq irq;
-		struct pnp_dma dma;
-		struct pnp_mem mem;
-	} u;
-};
-
-struct pnp_info_buffer {
-	char *buffer;
-	char *curr;
-	long unsigned int size;
-	long unsigned int len;
-	int stop;
-	int error;
-};
-
-typedef struct pnp_info_buffer pnp_info_buffer_t;
-
-struct pnp_fixup {
-	char id[7];
-	void (*quirk_function)(struct pnp_dev *);
-};
-
-struct acpipnp_parse_option_s {
-	struct pnp_dev *dev;
-	unsigned int option_flags;
-};
-
-struct deferred_device {
-	struct amba_device *dev;
-	struct resource *parent;
-	struct list_head node;
-};
-
-struct find_data {
-	struct amba_device *dev;
-	struct device *parent;
-	const char *busid;
-	unsigned int id;
-	unsigned int mask;
-};
-
-struct tegra_ahb {
-	void *regs;
-	struct device *dev;
-	u32 ctx[0];
-};
-
-struct clk_bulk_devres {
-	struct clk_bulk_data *clks;
-	int num_clks;
-};
-
-struct clk_hw;
-
-struct clk_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct clk *clk;
-	struct clk_hw *clk_hw;
-};
-
-struct clk_core;
-
-struct clk_init_data;
-
-struct clk_hw {
-	struct clk_core *core;
-	struct clk *clk;
-	const struct clk_init_data *init;
-};
-
-struct clk_rate_request {
-	long unsigned int rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int best_parent_rate;
-	struct clk_hw *best_parent_hw;
-};
-
-struct clk_duty {
-	unsigned int num;
-	unsigned int den;
-};
-
-struct clk_ops {
-	int (*prepare)(struct clk_hw *);
-	void (*unprepare)(struct clk_hw *);
-	int (*is_prepared)(struct clk_hw *);
-	void (*unprepare_unused)(struct clk_hw *);
-	int (*enable)(struct clk_hw *);
-	void (*disable)(struct clk_hw *);
-	int (*is_enabled)(struct clk_hw *);
-	void (*disable_unused)(struct clk_hw *);
-	int (*save_context)(struct clk_hw *);
-	void (*restore_context)(struct clk_hw *);
-	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
-	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
-	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
-	int (*set_parent)(struct clk_hw *, u8);
-	u8 (*get_parent)(struct clk_hw *);
-	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
-	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
-	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
-	int (*get_phase)(struct clk_hw *);
-	int (*set_phase)(struct clk_hw *, int);
-	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*init)(struct clk_hw *);
-	void (*terminate)(struct clk_hw *);
-	void (*debug_init)(struct clk_hw *, struct dentry *);
-};
-
-struct clk_parent_data {
-	const struct clk_hw *hw;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct clk_init_data {
-	const char *name;
-	const struct clk_ops *ops;
-	const char * const *parent_names;
-	const struct clk_parent_data *parent_data;
-	const struct clk_hw **parent_hws;
-	u8 num_parents;
+	long unsigned int update_time;
+	int revision;
+	int rate_now;
+	int capacity_now;
+	int voltage_now;
+	int design_capacity;
+	int full_charge_capacity;
+	int technology;
+	int design_voltage;
+	int design_capacity_warning;
+	int design_capacity_low;
+	int cycle_count;
+	int measurement_accuracy;
+	int max_sampling_time;
+	int min_sampling_time;
+	int max_averaging_interval;
+	int min_averaging_interval;
+	int capacity_granularity_1;
+	int capacity_granularity_2;
+	int alarm;
+	char model_number[32];
+	char serial_number[32];
+	char type[32];
+	char oem_info[32];
+	int state;
+	int power_unit;
 	long unsigned int flags;
 };
 
-struct clk_lookup_alloc {
-	struct clk_lookup cl;
-	char dev_id[20];
-	char con_id[16];
+struct acpi_offsets {
+	size_t offset;
+	u8 mode;
 };
 
-struct clk_notifier {
-	struct clk *clk;
-	struct srcu_notifier_head notifier_head;
-	struct list_head node;
-};
-
-struct clk {
-	struct clk_core *core;
-	struct device *dev;
-	const char *dev_id;
-	const char *con_id;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	unsigned int exclusive_count;
-	struct hlist_node clks_node;
-};
-
-struct clk_notifier_data {
-	struct clk *clk;
-	long unsigned int old_rate;
-	long unsigned int new_rate;
-};
-
-struct clk_parent_map;
-
-struct clk_core {
-	const char *name;
-	const struct clk_ops *ops;
-	struct clk_hw *hw;
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct clk_core *parent;
-	struct clk_parent_map *parents;
-	u8 num_parents;
-	u8 new_parent_index;
-	long unsigned int rate;
-	long unsigned int req_rate;
-	long unsigned int new_rate;
-	struct clk_core *new_parent;
-	struct clk_core *new_child;
-	long unsigned int flags;
-	bool orphan;
-	bool rpm_enabled;
-	unsigned int enable_count;
-	unsigned int prepare_count;
-	unsigned int protect_count;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int accuracy;
-	int phase;
-	struct clk_duty duty;
-	struct hlist_head children;
-	struct hlist_node child_node;
-	struct hlist_head clks;
-	unsigned int notifier_count;
-	struct dentry *dentry;
-	struct hlist_node debug_node;
-	struct kref ref;
-};
-
-struct clk_onecell_data {
-	struct clk **clks;
-	unsigned int clk_num;
-};
-
-struct clk_hw_onecell_data {
-	unsigned int num;
-	struct clk_hw *hws[0];
-};
-
-struct clk_parent_map {
-	const struct clk_hw *hw;
-	struct clk_core *core;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct trace_event_raw_clk {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_rate {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int rate;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_parent {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_pname;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_phase {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int phase;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_duty_cycle {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int num;
-	unsigned int den;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_clk {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_rate {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_parent {
-	u32 name;
-	u32 pname;
-};
-
-struct trace_event_data_offsets_clk_phase {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_duty_cycle {
-	u32 name;
-};
-
-typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
-
-typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
-
-struct of_clk_provider {
-	struct list_head link;
-	struct device_node *node;
-	struct clk * (*get)(struct of_phandle_args *, void *);
-	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
-	void *data;
-};
-
-struct clock_provider {
-	void (*clk_init_cb)(struct device_node *);
-	struct device_node *np;
-	struct list_head node;
-};
-
-struct clk_div_table {
-	unsigned int val;
-	unsigned int div;
-};
-
-struct clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-typedef void (*of_init_fn_1)(struct device_node *);
-
 struct clk_fixed_factor {
 	struct clk_hw hw;
 	unsigned int mult;
 	unsigned int div;
 };
 
-struct clk_fixed_rate {
-	struct clk_hw hw;
-	long unsigned int fixed_rate;
-	long unsigned int fixed_accuracy;
-	long unsigned int flags;
-};
-
-struct clk_gate {
-	struct clk_hw hw;
-	void *reg;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
 struct clk_multiplier {
 	struct clk_hw hw;
 	void *reg;
@@ -71765,16 +113836,6 @@
 	spinlock_t *lock;
 };
 
-struct clk_mux {
-	struct clk_hw hw;
-	void *reg;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
 struct clk_composite {
 	struct clk_hw hw;
 	struct clk_ops ops;
@@ -71786,3503 +113847,6 @@
 	const struct clk_ops *gate_ops;
 };
 
-struct clk_fractional_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 mshift;
-	u8 mwidth;
-	u32 mmask;
-	u8 nshift;
-	u8 nwidth;
-	u32 nmask;
-	u8 flags;
-	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
-	spinlock_t *lock;
-};
-
-struct clk_gpio {
-	struct clk_hw hw;
-	struct gpio_desc *gpiod;
-};
-
-struct ccsr_guts {
-	u32 porpllsr;
-	u32 porbmsr;
-	u32 porimpscr;
-	u32 pordevsr;
-	u32 pordbgmsr;
-	u32 pordevsr2;
-	u8 res018[8];
-	u32 porcir;
-	u8 res024[12];
-	u32 gpiocr;
-	u8 res034[12];
-	u32 gpoutdr;
-	u8 res044[12];
-	u32 gpindr;
-	u8 res054[12];
-	u32 pmuxcr;
-	u32 pmuxcr2;
-	u32 dmuxcr;
-	u8 res06c[4];
-	u32 devdisr;
-	u32 devdisr2;
-	u8 res078[4];
-	u32 pmjcr;
-	u32 powmgtcsr;
-	u32 pmrccr;
-	u32 pmpdccr;
-	u32 pmcdr;
-	u32 mcpsumr;
-	u32 rstrscr;
-	u32 ectrstcr;
-	u32 autorstsr;
-	u32 pvr;
-	u32 svr;
-	u8 res0a8[8];
-	u32 rstcr;
-	u8 res0b4[12];
-	u32 iovselsr;
-	u8 res0c4[60];
-	u32 rcwsr[16];
-	u8 res140[228];
-	u32 iodelay1;
-	u32 iodelay2;
-	u8 res22c[984];
-	u32 pamubypenr;
-	u8 res608[504];
-	u32 clkdvdr;
-	u8 res804[252];
-	u32 ircr;
-	u8 res904[4];
-	u32 dmacr;
-	u8 res90c[8];
-	u32 elbccr;
-	u8 res918[520];
-	u32 ddr1clkdr;
-	u32 ddr2clkdr;
-	u32 ddrclkdr;
-	u8 resb2c[724];
-	u32 clkocr;
-	u8 rese04[12];
-	u32 ddrdllcr;
-	u8 rese14[12];
-	u32 lbcdllcr;
-	u32 cpfor;
-	u8 rese28[220];
-	u32 srds1cr0;
-	u32 srds1cr1;
-	u8 resf0c[32];
-	u32 itcr;
-	u8 resf30[16];
-	u32 srds2cr0;
-	u32 srds2cr1;
-};
-
-struct clockgen_pll_div {
-	struct clk *clk;
-	char name[32];
-};
-
-struct clockgen_pll {
-	struct clockgen_pll_div div[32];
-};
-
-struct clockgen_sourceinfo {
-	u32 flags;
-	int pll;
-	int div;
-};
-
-struct clockgen_muxinfo {
-	struct clockgen_sourceinfo clksel[16];
-};
-
-struct clockgen;
-
-struct clockgen_chipinfo {
-	const char *compat;
-	const char *guts_compat;
-	const struct clockgen_muxinfo *cmux_groups[2];
-	const struct clockgen_muxinfo *hwaccel[5];
-	void (*init_periph)(struct clockgen *);
-	int cmux_to_group[9];
-	u32 pll_mask;
-	u32 flags;
-};
-
-struct clockgen {
-	struct device_node *node;
-	void *regs;
-	struct clockgen_chipinfo info;
-	struct clk *sysclk;
-	struct clk *coreclk;
-	struct clockgen_pll pll[6];
-	struct clk *cmux[8];
-	struct clk *hwaccel[5];
-	struct clk *fman[2];
-	struct ccsr_guts *guts;
-};
-
-struct mux_hwclock {
-	struct clk_hw hw;
-	struct clockgen *cg;
-	const struct clockgen_muxinfo *info;
-	u32 *reg;
-	u8 parent_to_clksel[16];
-	s8 clksel_to_parent[16];
-	int num_parents;
-};
-
-struct scpi_opp {
-	u32 freq;
-	u32 m_volt;
-};
-
-struct scpi_dvfs_info {
-	unsigned int count;
-	unsigned int latency;
-	struct scpi_opp *opps;
-};
-
-struct scpi_sensor_info {
-	u16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct scpi_ops {
-	u32 (*get_version)();
-	int (*clk_get_range)(u16, long unsigned int *, long unsigned int *);
-	long unsigned int (*clk_get_val)(u16);
-	int (*clk_set_val)(u16, long unsigned int);
-	int (*dvfs_get_idx)(u8);
-	int (*dvfs_set_idx)(u8, u8);
-	struct scpi_dvfs_info * (*dvfs_get_info)(u8);
-	int (*device_domain_id)(struct device *);
-	int (*get_transition_latency)(struct device *);
-	int (*add_opps_to_device)(struct device *);
-	int (*sensor_get_capability)(u16 *);
-	int (*sensor_get_info)(u16, struct scpi_sensor_info *);
-	int (*sensor_get_value)(u16, u64 *);
-	int (*device_get_power_state)(u16);
-	int (*device_set_power_state)(u16, u8);
-};
-
-struct scpi_clk {
-	u32 id;
-	struct clk_hw hw;
-	struct scpi_dvfs_info *info;
-	struct scpi_ops *scpi_ops;
-};
-
-struct scpi_clk_data {
-	struct scpi_clk **clk;
-	unsigned int clk_num;
-};
-
-enum xgene_pll_type {
-	PLL_TYPE_PCP = 0,
-	PLL_TYPE_SOC = 1,
-};
-
-struct xgene_clk_pll {
-	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	u32 pll_offset;
-	enum xgene_pll_type type;
-	int version;
-};
-
-struct xgene_clk_pmd {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u32 mask;
-	u64 denom;
-	u32 flags;
-	spinlock_t *lock;
-};
-
-struct xgene_dev_parameters {
-	void *csr_reg;
-	u32 reg_clk_offset;
-	u32 reg_clk_mask;
-	u32 reg_csr_offset;
-	u32 reg_csr_mask;
-	void *divider_reg;
-	u32 reg_divider_offset;
-	u32 reg_divider_shift;
-	u32 reg_divider_width;
-};
-
-struct xgene_clk {
-	struct clk_hw hw;
-	spinlock_t *lock;
-	struct xgene_dev_parameters param;
-};
-
-struct reset_controller_dev;
-
-struct reset_control_ops {
-	int (*reset)(struct reset_controller_dev *, long unsigned int);
-	int (*assert)(struct reset_controller_dev *, long unsigned int);
-	int (*deassert)(struct reset_controller_dev *, long unsigned int);
-	int (*status)(struct reset_controller_dev *, long unsigned int);
-};
-
-struct reset_controller_dev {
-	const struct reset_control_ops *ops;
-	struct module *owner;
-	struct list_head list;
-	struct list_head reset_control_head;
-	struct device *dev;
-	struct device_node *of_node;
-	int of_reset_n_cells;
-	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
-	unsigned int nr_resets;
-};
-
-struct reset_simple_data {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-	bool active_low;
-	bool status_active_low;
-	unsigned int reset_us;
-};
-
-struct clk_dvp {
-	struct clk_hw_onecell_data *data;
-	struct reset_simple_data reset;
-};
-
-struct bcm2835_cprman {
-	struct device *dev;
-	void *regs;
-	spinlock_t regs_lock;
-	unsigned int soc;
-	const char *real_parent_names[7];
-	struct clk_hw_onecell_data onecell;
-};
-
-struct cprman_plat_data {
-	unsigned int soc;
-};
-
-struct bcm2835_pll_ana_bits;
-
-struct bcm2835_pll_data {
-	const char *name;
-	u32 cm_ctrl_reg;
-	u32 a2w_ctrl_reg;
-	u32 frac_reg;
-	u32 ana_reg_base;
-	u32 reference_enable_mask;
-	u32 lock_mask;
-	u32 flags;
-	const struct bcm2835_pll_ana_bits *ana;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int max_fb_rate;
-};
-
-struct bcm2835_pll_ana_bits {
-	u32 mask0;
-	u32 set0;
-	u32 mask1;
-	u32 set1;
-	u32 mask3;
-	u32 set3;
-	u32 fb_prediv_mask;
-};
-
-struct bcm2835_pll_divider_data {
-	const char *name;
-	const char *source_pll;
-	u32 cm_reg;
-	u32 a2w_reg;
-	u32 load_mask;
-	u32 hold_mask;
-	u32 fixed_divider;
-	u32 flags;
-};
-
-struct bcm2835_clock_data {
-	const char *name;
-	const char * const *parents;
-	int num_mux_parents;
-	unsigned int set_rate_parent;
-	u32 ctl_reg;
-	u32 div_reg;
-	u32 int_bits;
-	u32 frac_bits;
-	u32 flags;
-	bool is_vpu_clock;
-	bool is_mash_clock;
-	bool low_jitter;
-	u32 tcnt_mux;
-};
-
-struct bcm2835_gate_data {
-	const char *name;
-	const char *parent;
-	u32 ctl_reg;
-};
-
-struct bcm2835_pll {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_data *data;
-};
-
-struct bcm2835_pll_divider {
-	struct clk_divider div;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_divider_data *data;
-};
-
-struct bcm2835_clock {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_clock_data *data;
-};
-
-struct bcm2835_clk_desc {
-	struct clk_hw * (*clk_register)(struct bcm2835_cprman *, const void *);
-	unsigned int supported;
-	const void *data;
-};
-
-struct hisi_clock_data {
-	struct clk_onecell_data clk_data;
-	void *base;
-};
-
-struct hisi_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct hisi_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct hisi_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-	u32 *table;
-	const char *alias;
-};
-
-struct hisi_phase_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_names;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 *phase_degrees;
-	u32 *phase_regvals;
-	u8 phase_num;
-};
-
-struct hisi_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-	const char *alias;
-};
-
-struct hi6220_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 mask_bit;
-	const char *alias;
-};
-
-struct hisi_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-	const char *alias;
-};
-
-struct clkgate_separated {
-	struct clk_hw hw;
-	void *enable;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct hi6220_clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u32 mask;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-struct clk_hisi_phase {
-	struct clk_hw hw;
-	void *reg;
-	u32 *phase_degrees;
-	u32 *phase_regvals;
-	u8 phase_num;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct hisi_crg_funcs {
-	struct hisi_clock_data * (*register_clks)(struct platform_device *);
-	void (*unregister_clks)(struct platform_device *);
-};
-
-struct hisi_reset_controller;
-
-struct hisi_crg_dev {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-	const struct hisi_crg_funcs *funcs;
-};
-
-struct hi3519_crg_data {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-};
-
-struct hisi_reset_controller___2 {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-};
-
-struct mbox_chan___2;
-
-struct hi6220_stub_clk {
-	u32 id;
-	struct device *dev;
-	struct clk_hw hw;
-	struct regmap *dfs_map;
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi6220_mbox_msg {
-	unsigned char type;
-	unsigned char cmd;
-	unsigned char obj;
-	unsigned char src;
-	unsigned char para[4];
-};
-
-union hi6220_mbox_data {
-	unsigned int data[8];
-	struct hi6220_mbox_msg msg;
-};
-
-struct hi3660_stub_clk_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi3660_stub_clk {
-	unsigned int id;
-	struct clk_hw hw;
-	unsigned int cmd;
-	unsigned int msg[8];
-	unsigned int rate;
-};
-
-struct mtk_fixed_clk {
-	int id;
-	const char *name;
-	const char *parent;
-	long unsigned int rate;
-};
-
-struct mtk_fixed_factor {
-	int id;
-	const char *name;
-	const char *parent_name;
-	int mult;
-	int div;
-};
-
-struct mtk_composite {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	const char *parent;
-	unsigned int flags;
-	uint32_t mux_reg;
-	uint32_t divider_reg;
-	uint32_t gate_reg;
-	signed char mux_shift;
-	signed char mux_width;
-	signed char gate_shift;
-	signed char divider_shift;
-	signed char divider_width;
-	u8 mux_flags;
-	signed char num_parents;
-};
-
-struct mtk_gate_regs {
-	u32 sta_ofs;
-	u32 clr_ofs;
-	u32 set_ofs;
-};
-
-struct mtk_gate {
-	int id;
-	const char *name;
-	const char *parent_name;
-	const struct mtk_gate_regs *regs;
-	int shift;
-	const struct clk_ops *ops;
-	long unsigned int flags;
-};
-
-struct mtk_clk_divider {
-	int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	u32 div_reg;
-	unsigned char div_shift;
-	unsigned char div_width;
-	unsigned char clk_divider_flags;
-	const struct clk_div_table *clk_div_table;
-};
-
-struct mtk_pll_div_table {
-	u32 div;
-	long unsigned int freq;
-};
-
-struct mtk_pll_data {
-	int id;
-	const char *name;
-	uint32_t reg;
-	uint32_t pwr_reg;
-	uint32_t en_mask;
-	uint32_t pd_reg;
-	uint32_t tuner_reg;
-	uint32_t tuner_en_reg;
-	uint8_t tuner_en_bit;
-	int pd_shift;
-	unsigned int flags;
-	const struct clk_ops *ops;
-	u32 rst_bar_mask;
-	long unsigned int fmin;
-	long unsigned int fmax;
-	int pcwbits;
-	int pcwibits;
-	uint32_t pcw_reg;
-	int pcw_shift;
-	uint32_t pcw_chg_reg;
-	const struct mtk_pll_div_table *div_table;
-	const char *parent_name;
-};
-
-struct mtk_clk_pll {
-	struct clk_hw hw;
-	void *base_addr;
-	void *pd_addr;
-	void *pwr_addr;
-	void *tuner_addr;
-	void *tuner_en_addr;
-	void *pcw_addr;
-	void *pcw_chg_addr;
-	const struct mtk_pll_data *data;
-};
-
-struct mtk_clk_gate {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	int set_ofs;
-	int clr_ofs;
-	int sta_ofs;
-	u8 bit;
-};
-
-struct mtk_ref2usb_tx {
-	struct clk_hw hw;
-	void *base_addr;
-};
-
-struct mtk_clk_cpumux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 mask;
-	u8 shift;
-};
-
-struct mtk_reset {
-	struct regmap *regmap;
-	int regofs;
-	struct reset_controller_dev rcdev;
-};
-
-struct mtk_mux;
-
-struct mtk_clk_mux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	const struct mtk_mux *data;
-	spinlock_t *lock;
-};
-
-struct mtk_mux {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	unsigned int flags;
-	u32 mux_ofs;
-	u32 set_ofs;
-	u32 clr_ofs;
-	u32 upd_ofs;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 gate_shift;
-	s8 upd_shift;
-	const struct clk_ops *ops;
-	signed char num_parents;
-};
-
-struct clk_mt8167_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct mtk_clk_usb {
-	int id;
-	const char *name;
-	const char *parent;
-	u32 reg_ofs;
-};
-
-struct clk_mt8173_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct clk_regmap {
-	struct clk_hw hw;
-	struct regmap *map;
-	void *data;
-};
-
-struct meson_aoclk_data {
-	const unsigned int reset_reg;
-	const int num_reset;
-	const unsigned int *reset;
-	const int num_clks;
-	struct clk_regmap **clks;
-	const struct clk_hw_onecell_data *hw_data;
-};
-
-struct meson_aoclk_reset_controller {
-	struct reset_controller_dev reset;
-	const struct meson_aoclk_data *data;
-	struct regmap *regmap;
-};
-
-struct parm {
-	u16 reg_off;
-	u8 shift;
-	u8 width;
-};
-
-struct meson_clk_cpu_dyndiv_data {
-	struct parm div;
-	struct parm dyn;
-};
-
-struct meson_clk_dualdiv_param {
-	unsigned int n1;
-	unsigned int n2;
-	unsigned int m1;
-	unsigned int m2;
-	unsigned int dual;
-};
-
-struct meson_clk_dualdiv_data {
-	struct parm n1;
-	struct parm n2;
-	struct parm m1;
-	struct parm m2;
-	struct parm dual;
-	const struct meson_clk_dualdiv_param *table;
-};
-
-struct reg_sequence {
-	unsigned int reg;
-	unsigned int def;
-	unsigned int delay_us;
-};
-
-struct meson_eeclkc_data {
-	struct clk_regmap * const *regmap_clks;
-	unsigned int regmap_clk_num;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	struct clk_hw_onecell_data *hw_onecell_data;
-};
-
-struct meson_clk_mpll_data {
-	struct parm sdm;
-	struct parm sdm_en;
-	struct parm n2;
-	struct parm ssen;
-	struct parm misc;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	spinlock_t *lock;
-	u8 flags;
-};
-
-struct pll_params_table {
-	unsigned int m;
-	unsigned int n;
-};
-
-struct pll_mult_range {
-	unsigned int min;
-	unsigned int max;
-};
-
-struct meson_clk_pll_data {
-	struct parm en;
-	struct parm m;
-	struct parm n;
-	struct parm frac;
-	struct parm l;
-	struct parm rst;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	const struct pll_params_table *table;
-	const struct pll_mult_range *range;
-	u8 flags;
-};
-
-struct clk_regmap_gate_data {
-	unsigned int offset;
-	u8 bit_idx;
-	u8 flags;
-};
-
-struct clk_regmap_div_data {
-	unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-};
-
-struct clk_regmap_mux_data {
-	unsigned int offset;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-};
-
-struct meson_vid_pll_div_data {
-	struct parm val;
-	struct parm sel;
-};
-
-struct vid_pll_div {
-	unsigned int shift_val;
-	unsigned int shift_sel;
-	unsigned int divider;
-	unsigned int multiplier;
-};
-
-struct g12a_cpu_clk_postmux_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *xtal;
-	struct clk_hw *cpu_clk_dyn;
-	struct clk_hw *cpu_clk_postmux0;
-	struct clk_hw *cpu_clk_postmux1;
-	struct clk_hw *cpu_clk_premux1;
-};
-
-struct g12a_sys_pll_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *sys_pll;
-	struct clk_hw *cpu_clk;
-	struct clk_hw *cpu_clk_dyn;
-};
-
-struct meson_g12a_data {
-	const struct meson_eeclkc_data eeclkc_data;
-	int (*dvfs_setup)(struct platform_device *);
-};
-
-struct tbg_def {
-	char *name;
-	u32 refdiv_offset;
-	u32 fbdiv_offset;
-	u32 vcodiv_reg;
-	u32 vcodiv_offset;
-};
-
-struct clk_periph_driver_data {
-	struct clk_hw_onecell_data *hw_data;
-	spinlock_t lock;
-	void *reg;
-	u32 tbg_sel;
-	u32 div_sel0;
-	u32 div_sel1;
-	u32 div_sel2;
-	u32 clk_sel;
-	u32 clk_dis;
-};
-
-struct clk_double_div {
-	struct clk_hw hw;
-	void *reg1;
-	u8 shift1;
-	void *reg2;
-	u8 shift2;
-};
-
-struct clk_pm_cpu {
-	struct clk_hw hw;
-	void *reg_mux;
-	u8 shift_mux;
-	u32 mask_mux;
-	void *reg_div;
-	u8 shift_div;
-	struct regmap *nb_pm_base;
-};
-
-struct clk_periph_data {
-	const char *name;
-	const char * const *parent_names;
-	int num_parents;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	struct clk_hw *muxrate_hw;
-	bool is_double_div;
-};
-
-struct cpu_dfs_regs {
-	unsigned int divider_reg;
-	unsigned int force_reg;
-	unsigned int ratio_reg;
-	unsigned int ratio_state_reg;
-	unsigned int divider_mask;
-	unsigned int cluster_offset;
-	unsigned int force_mask;
-	int divider_offset;
-	int divider_ratio;
-	int ratio_offset;
-	int ratio_state_offset;
-	int ratio_state_cluster_offset;
-};
-
-struct ap_cpu_clk {
-	unsigned int cluster;
-	const char *clk_name;
-	struct device *dev;
-	struct clk_hw hw;
-	struct regmap *pll_cr_base;
-	const struct cpu_dfs_regs *pll_regs;
-};
-
-enum {
-	CP110_CLK_TYPE_CORE = 0,
-	CP110_CLK_TYPE_GATABLE = 1,
-};
-
-struct cp110_gate_clk {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u8 bit_idx;
-};
-
-struct clk_regmap___2;
-
-struct qcom_reset_map;
-
-struct gdsc;
-
-struct qcom_cc_desc {
-	const struct regmap_config *config;
-	struct clk_regmap___2 **clks;
-	size_t num_clks;
-	const struct qcom_reset_map *resets;
-	size_t num_resets;
-	struct gdsc **gdscs;
-	size_t num_gdscs;
-	struct clk_hw **clk_hws;
-	size_t num_clk_hws;
-};
-
-struct clk_regmap___2 {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	bool enable_is_inverted;
-};
-
-struct qcom_reset_map {
-	unsigned int reg;
-	u8 bit;
-};
-
-enum gpd_status {
-	GENPD_STATE_ON = 0,
-	GENPD_STATE_OFF = 1,
-};
-
-struct opp_table;
-
-struct dev_pm_opp;
-
-struct gpd_dev_ops {
-	int (*start)(struct device *);
-	int (*stop)(struct device *);
-};
-
-struct dev_power_governor;
-
-struct genpd_power_state;
-
-struct genpd_lock_ops;
-
-struct generic_pm_domain {
-	struct device dev;
-	struct dev_pm_domain domain;
-	struct list_head gpd_list_node;
-	struct list_head parent_links;
-	struct list_head child_links;
-	struct list_head dev_list;
-	struct dev_power_governor *gov;
-	struct work_struct power_off_work;
-	struct fwnode_handle *provider;
-	bool has_provider;
-	const char *name;
-	atomic_t sd_count;
-	enum gpd_status status;
-	unsigned int device_count;
-	unsigned int suspended_count;
-	unsigned int prepared_count;
-	unsigned int performance_state;
-	cpumask_var_t cpus;
-	int (*power_off)(struct generic_pm_domain *);
-	int (*power_on)(struct generic_pm_domain *);
-	struct raw_notifier_head power_notifiers;
-	struct opp_table *opp_table;
-	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
-	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
-	struct gpd_dev_ops dev_ops;
-	s64 max_off_time_ns;
-	bool max_off_time_changed;
-	bool cached_power_down_ok;
-	bool cached_power_down_state_idx;
-	int (*attach_dev)(struct generic_pm_domain *, struct device *);
-	void (*detach_dev)(struct generic_pm_domain *, struct device *);
-	unsigned int flags;
-	struct genpd_power_state *states;
-	void (*free_states)(struct genpd_power_state *, unsigned int);
-	unsigned int state_count;
-	unsigned int state_idx;
-	ktime_t on_time;
-	ktime_t accounting_time;
-	const struct genpd_lock_ops *lock_ops;
-	union {
-		struct mutex mlock;
-		struct {
-			spinlock_t slock;
-			long unsigned int lock_flags;
-		};
-	};
-};
-
-struct gdsc {
-	struct generic_pm_domain pd;
-	struct generic_pm_domain *parent;
-	struct regmap *regmap;
-	unsigned int gdscr;
-	unsigned int gds_hw_ctrl;
-	unsigned int clamp_io_ctrl;
-	unsigned int *cxcs;
-	unsigned int cxc_count;
-	const u8 pwrsts;
-	const u8 flags;
-	struct reset_controller_dev *rcdev;
-	unsigned int *resets;
-	unsigned int reset_count;
-	const char *supply;
-	struct regulator *rsupply;
-};
-
-struct parent_map {
-	u8 src;
-	u8 cfg;
-};
-
-struct freq_tbl {
-	long unsigned int freq;
-	u8 src;
-	u8 pre_div;
-	u16 m;
-	u16 n;
-};
-
-struct qcom_reset_controller {
-	const struct qcom_reset_map *reset_map;
-	struct regmap *regmap;
-	struct reset_controller_dev rcdev;
-};
-
-struct dev_power_governor {
-	bool (*power_down_ok)(struct dev_pm_domain *);
-	bool (*suspend_ok)(struct device *);
-};
-
-struct genpd_power_state {
-	s64 power_off_latency_ns;
-	s64 power_on_latency_ns;
-	s64 residency_ns;
-	u64 usage;
-	u64 rejected;
-	struct fwnode_handle *fwnode;
-	ktime_t idle_time;
-	void *data;
-};
-
-struct genpd_lock_ops {
-	void (*lock)(struct generic_pm_domain *);
-	void (*lock_nested)(struct generic_pm_domain *, int);
-	int (*lock_interruptible)(struct generic_pm_domain *);
-	void (*unlock)(struct generic_pm_domain *);
-};
-
-struct gdsc_desc {
-	struct device *dev;
-	struct gdsc **scs;
-	size_t num;
-};
-
-struct qcom_cc {
-	struct qcom_reset_controller reset;
-	struct clk_regmap___2 **rclks;
-	size_t num_rclks;
-};
-
-enum {
-	CLK_ALPHA_PLL_TYPE_DEFAULT = 0,
-	CLK_ALPHA_PLL_TYPE_HUAYRA = 1,
-	CLK_ALPHA_PLL_TYPE_BRAMMO = 2,
-	CLK_ALPHA_PLL_TYPE_FABIA = 3,
-	CLK_ALPHA_PLL_TYPE_TRION = 4,
-	CLK_ALPHA_PLL_TYPE_LUCID = 4,
-	CLK_ALPHA_PLL_TYPE_MAX = 5,
-};
-
-enum {
-	PLL_OFF_L_VAL = 0,
-	PLL_OFF_CAL_L_VAL = 1,
-	PLL_OFF_ALPHA_VAL = 2,
-	PLL_OFF_ALPHA_VAL_U = 3,
-	PLL_OFF_USER_CTL = 4,
-	PLL_OFF_USER_CTL_U = 5,
-	PLL_OFF_USER_CTL_U1 = 6,
-	PLL_OFF_CONFIG_CTL = 7,
-	PLL_OFF_CONFIG_CTL_U = 8,
-	PLL_OFF_CONFIG_CTL_U1 = 9,
-	PLL_OFF_TEST_CTL = 10,
-	PLL_OFF_TEST_CTL_U = 11,
-	PLL_OFF_TEST_CTL_U1 = 12,
-	PLL_OFF_STATUS = 13,
-	PLL_OFF_OPMODE = 14,
-	PLL_OFF_FRAC = 15,
-	PLL_OFF_CAL_VAL = 16,
-	PLL_OFF_MAX_REGS = 17,
-};
-
-struct pll_vco {
-	long unsigned int min_freq;
-	long unsigned int max_freq;
-	u32 val;
-};
-
-struct clk_alpha_pll {
-	u32 offset;
-	const u8 *regs;
-	const struct pll_vco *vco_table;
-	size_t num_vco;
-	u8 flags;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_alpha_pll_postdiv {
-	u32 offset;
-	u8 width;
-	const u8 *regs;
-	struct clk_regmap___2 clkr;
-	int post_div_shift;
-	const struct clk_div_table *post_div_table;
-	size_t num_post_div;
-};
-
-struct alpha_pll_config {
-	u32 l;
-	u32 alpha;
-	u32 alpha_hi;
-	u32 config_ctl_val;
-	u32 config_ctl_hi_val;
-	u32 config_ctl_hi1_val;
-	u32 user_ctl_val;
-	u32 user_ctl_hi_val;
-	u32 user_ctl_hi1_val;
-	u32 test_ctl_val;
-	u32 test_ctl_hi_val;
-	u32 test_ctl_hi1_val;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-	u32 aux2_output_mask;
-	u32 early_output_mask;
-	u32 alpha_en_mask;
-	u32 alpha_mode_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 vco_val;
-	u32 vco_mask;
-};
-
-struct pll_freq_tbl {
-	long unsigned int freq;
-	u16 l;
-	u16 m;
-	u16 n;
-	u32 ibits;
-};
-
-struct clk_pll {
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 config_reg;
-	u32 mode_reg;
-	u32 status_reg;
-	u8 status_bit;
-	u8 post_div_width;
-	u8 post_div_shift;
-	const struct pll_freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct pll_config {
-	u16 l;
-	u32 m;
-	u32 n;
-	u32 vco_val;
-	u32 vco_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 mn_ena_mask;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-};
-
-struct mn {
-	u8 mnctr_en_bit;
-	u8 mnctr_reset_bit;
-	u8 mnctr_mode_shift;
-	u8 n_val_shift;
-	u8 m_val_shift;
-	u8 width;
-	bool reset_in_cc;
-};
-
-struct pre_div {
-	u8 pre_div_shift;
-	u8 pre_div_width;
-};
-
-struct src_sel {
-	u8 src_sel_shift;
-	const struct parent_map *parent_map;
-};
-
-struct clk_rcg {
-	u32 ns_reg;
-	u32 md_reg;
-	struct mn mn;
-	struct pre_div p;
-	struct src_sel s;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_dyn_rcg {
-	u32 ns_reg[2];
-	u32 md_reg[2];
-	u32 bank_reg;
-	u8 mux_sel_bit;
-	struct mn mn[2];
-	struct pre_div p[2];
-	struct src_sel s[2];
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct frac_entry {
-	int num;
-	int den;
-};
-
-struct clk_rcg2 {
-	u32 cmd_rcgr;
-	u8 mnd_width;
-	u8 hid_width;
-	u8 safe_src_index;
-	const struct parent_map *parent_map;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-	u8 cfg_off;
-};
-
-struct clk_rcg_dfs_data {
-	struct clk_rcg2 *rcg;
-	struct clk_init_data *init;
-};
-
-enum freq_policy {
-	FLOOR = 0,
-	CEIL = 1,
-};
-
-struct clk_branch {
-	u32 hwcg_reg;
-	u32 halt_reg;
-	u8 hwcg_bit;
-	u8 halt_bit;
-	u8 halt_check;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_div {
-	u32 reg;
-	u32 shift;
-	u32 width;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_mux {
-	u32 reg;
-	u32 shift;
-	u32 width;
-	const struct parent_map *parent_map;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_mux_div {
-	u32 reg_offset;
-	u32 hid_width;
-	u32 hid_shift;
-	u32 src_width;
-	u32 src_shift;
-	u32 div;
-	u32 src;
-	const u32 *parent_map;
-	struct clk_regmap___2 clkr;
-	struct clk *pclk;
-	struct notifier_block clk_nb;
-};
-
-struct hfpll_data {
-	u32 mode_reg;
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 user_reg;
-	u32 droop_reg;
-	u32 config_reg;
-	u32 status_reg;
-	u8 lock_bit;
-	u32 droop_val;
-	u32 config_val;
-	u32 user_val;
-	u32 user_vco_mask;
-	long unsigned int low_vco_max_rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-};
-
-struct clk_hfpll {
-	const struct hfpll_data *d;
-	int init_done;
-	struct clk_regmap___2 clkr;
-	spinlock_t lock;
-};
-
-typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
-
-struct genpd_onecell_data {
-	struct generic_pm_domain **domains;
-	unsigned int num_domains;
-	genpd_xlate_t xlate;
-};
-
-enum gdsc_status {
-	GDSC_OFF = 0,
-	GDSC_ON = 1,
-};
-
-enum {
-	P_XO = 0,
-	P_GPLL0 = 1,
-	P_GPLL0_AUX = 2,
-	P_BIMC = 3,
-	P_GPLL1 = 4,
-	P_GPLL1_AUX = 5,
-	P_GPLL2 = 6,
-	P_GPLL2_AUX = 7,
-	P_SLEEP_CLK = 8,
-	P_DSI0_PHYPLL_BYTE = 9,
-	P_DSI0_PHYPLL_DSI = 10,
-	P_EXT_PRI_I2S = 11,
-	P_EXT_SEC_I2S = 12,
-	P_EXT_MCLK = 13,
-};
-
-enum {
-	P_XO___2 = 0,
-	P_GPLL0___2 = 1,
-	P_GPLL4 = 2,
-};
-
-enum {
-	P_XO___3 = 0,
-	P_GPLL0___3 = 1,
-	P_GPLL2___2 = 2,
-	P_GPLL3 = 3,
-	P_GPLL1___2 = 4,
-	P_GPLL2_EARLY = 5,
-	P_GPLL0_EARLY_DIV = 6,
-	P_SLEEP_CLK___2 = 7,
-	P_GPLL4___2 = 8,
-	P_AUD_REF_CLK = 9,
-	P_GPLL1_EARLY_DIV = 10,
-};
-
-enum {
-	P_XO___4 = 0,
-	P_MMPLL0 = 1,
-	P_GPLL0___4 = 2,
-	P_GPLL0_DIV = 3,
-	P_MMPLL1 = 4,
-	P_MMPLL9 = 5,
-	P_MMPLL2 = 6,
-	P_MMPLL8 = 7,
-	P_MMPLL3 = 8,
-	P_DSI0PLL = 9,
-	P_DSI1PLL = 10,
-	P_MMPLL5 = 11,
-	P_HDMIPLL = 12,
-	P_DSI0PLL_BYTE = 13,
-	P_DSI1PLL_BYTE = 14,
-	P_MMPLL4 = 15,
-};
-
-enum rockchip_pll_type {
-	pll_rk3036 = 0,
-	pll_rk3066 = 1,
-	pll_rk3328 = 2,
-	pll_rk3399 = 3,
-};
-
-struct rockchip_clk_provider {
-	void *reg_base;
-	struct clk_onecell_data clk_data;
-	struct device_node *cru_node;
-	struct regmap *grf;
-	spinlock_t lock;
-};
-
-struct rockchip_pll_rate_table {
-	long unsigned int rate;
-	unsigned int nr;
-	unsigned int nf;
-	unsigned int no;
-	unsigned int nb;
-	unsigned int fbdiv;
-	unsigned int postdiv1;
-	unsigned int refdiv;
-	unsigned int postdiv2;
-	unsigned int dsmpd;
-	unsigned int frac;
-};
-
-struct rockchip_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int con_offset;
-	int mode_offset;
-	int mode_shift;
-	int lock_shift;
-	enum rockchip_pll_type type;
-	u8 pll_flags;
-	struct rockchip_pll_rate_table *rate_table;
-};
-
-struct rockchip_cpuclk_clksel {
-	int reg;
-	u32 val;
-};
-
-struct rockchip_cpuclk_rate_table {
-	long unsigned int prate;
-	struct rockchip_cpuclk_clksel divs[2];
-};
-
-struct rockchip_cpuclk_reg_data {
-	int core_reg;
-	u8 div_core_shift;
-	u32 div_core_mask;
-	u8 mux_core_alt;
-	u8 mux_core_main;
-	u8 mux_core_shift;
-	u32 mux_core_mask;
-};
-
-enum rockchip_clk_branch_type {
-	branch_composite = 0,
-	branch_mux = 1,
-	branch_muxgrf = 2,
-	branch_divider = 3,
-	branch_fraction_divider = 4,
-	branch_gate = 5,
-	branch_mmc = 6,
-	branch_inverter = 7,
-	branch_factor = 8,
-	branch_ddrclk = 9,
-	branch_half_divider = 10,
-};
-
-struct rockchip_clk_branch {
-	unsigned int id;
-	enum rockchip_clk_branch_type branch_type;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int muxdiv_offset;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 mux_flags;
-	int div_offset;
-	u8 div_shift;
-	u8 div_width;
-	u8 div_flags;
-	struct clk_div_table *div_table;
-	int gate_offset;
-	u8 gate_shift;
-	u8 gate_flags;
-	struct rockchip_clk_branch *child;
-};
-
-struct rockchip_clk_frac {
-	struct notifier_block clk_nb;
-	struct clk_fractional_divider div;
-	struct clk_gate gate;
-	struct clk_mux mux;
-	const struct clk_ops *mux_ops;
-	int mux_frac_idx;
-	bool rate_change_remuxed;
-	int rate_change_idx;
-};
-
-struct rockchip_clk_pll {
-	struct clk_hw hw;
-	struct clk_mux pll_mux;
-	const struct clk_ops *pll_mux_ops;
-	struct notifier_block clk_nb;
-	void *reg_base;
-	int lock_offset;
-	unsigned int lock_shift;
-	enum rockchip_pll_type type;
-	u8 flags;
-	const struct rockchip_pll_rate_table *rate_table;
-	unsigned int rate_count;
-	spinlock_t *lock;
-	struct rockchip_clk_provider *ctx;
-};
-
-struct rockchip_cpuclk {
-	struct clk_hw hw;
-	struct clk_mux cpu_mux;
-	const struct clk_ops *cpu_mux_ops;
-	struct clk *alt_parent;
-	void *reg_base;
-	struct notifier_block clk_nb;
-	unsigned int rate_count;
-	struct rockchip_cpuclk_rate_table *rate_table;
-	const struct rockchip_cpuclk_reg_data *reg_data;
-	spinlock_t *lock;
-};
-
-struct rockchip_inv_clock {
-	struct clk_hw hw;
-	void *reg;
-	int shift;
-	int flags;
-	spinlock_t *lock;
-};
-
-struct rockchip_mmc_clock {
-	struct clk_hw hw;
-	void *reg;
-	int id;
-	int shift;
-	int cached_phase;
-	struct notifier_block clk_rate_change_nb;
-};
-
-struct rockchip_muxgrf_clock {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 shift;
-	u32 width;
-	int flags;
-};
-
-struct rockchip_ddrclk {
-	struct clk_hw hw;
-	void *reg_base;
-	int mux_offset;
-	int mux_shift;
-	int mux_width;
-	int div_shift;
-	int div_width;
-	int ddr_flag;
-	spinlock_t *lock;
-};
-
-struct rockchip_softrst {
-	struct reset_controller_dev rcdev;
-	void *reg_base;
-	int num_regs;
-	int num_per_reg;
-	u8 flags;
-	spinlock_t lock;
-};
-
-enum px30_plls {
-	apll = 0,
-	dpll = 1,
-	cpll = 2,
-	npll = 3,
-	apll_b_h = 4,
-	apll_b_l = 5,
-};
-
-enum px30_pmu_plls {
-	gpll = 0,
-};
-
-enum rv1108_plls {
-	apll___2 = 0,
-	dpll___2 = 1,
-	gpll___2 = 2,
-};
-
-enum rk3036_plls {
-	apll___3 = 0,
-	dpll___3 = 1,
-	gpll___3 = 2,
-};
-
-enum rk3128_plls {
-	apll___4 = 0,
-	dpll___4 = 1,
-	cpll___2 = 2,
-	gpll___4 = 3,
-};
-
-enum rk3188_plls {
-	apll___5 = 0,
-	cpll___3 = 1,
-	dpll___5 = 2,
-	gpll___5 = 3,
-};
-
-enum rk3228_plls {
-	apll___6 = 0,
-	dpll___6 = 1,
-	cpll___4 = 2,
-	gpll___6 = 3,
-};
-
-enum rk3308_plls {
-	apll___7 = 0,
-	dpll___7 = 1,
-	vpll0 = 2,
-	vpll1 = 3,
-};
-
-enum rk3328_plls {
-	apll___8 = 0,
-	dpll___8 = 1,
-	cpll___5 = 2,
-	gpll___7 = 3,
-	npll___2 = 4,
-};
-
-enum rk3368_plls {
-	apllb = 0,
-	aplll = 1,
-	dpll___9 = 2,
-	cpll___6 = 3,
-	gpll___8 = 4,
-	npll___3 = 5,
-};
-
-enum rk3399_plls {
-	lpll = 0,
-	bpll = 1,
-	dpll___10 = 2,
-	cpll___7 = 3,
-	gpll___9 = 4,
-	npll___4 = 5,
-	vpll = 6,
-};
-
-enum rk3399_pmu_plls {
-	ppll = 0,
-};
-
-struct clk_rk3399_inits {
-	void (*inits)(struct device_node *);
-};
-
-enum samsung_pll_type {
-	pll_2126 = 0,
-	pll_3000 = 1,
-	pll_35xx = 2,
-	pll_36xx = 3,
-	pll_2550 = 4,
-	pll_2650 = 5,
-	pll_4500 = 6,
-	pll_4502 = 7,
-	pll_4508 = 8,
-	pll_4600 = 9,
-	pll_4650 = 10,
-	pll_4650c = 11,
-	pll_6552 = 12,
-	pll_6552_s3c2416 = 13,
-	pll_6553 = 14,
-	pll_s3c2410_mpll = 15,
-	pll_s3c2410_upll = 16,
-	pll_s3c2440_mpll = 17,
-	pll_2550x = 18,
-	pll_2550xx = 19,
-	pll_2650x = 20,
-	pll_2650xx = 21,
-	pll_1450x = 22,
-	pll_1451x = 23,
-	pll_1452x = 24,
-	pll_1460x = 25,
-};
-
-struct samsung_pll_rate_table {
-	unsigned int rate;
-	unsigned int pdiv;
-	unsigned int mdiv;
-	unsigned int sdiv;
-	unsigned int kdiv;
-	unsigned int afc;
-	unsigned int mfr;
-	unsigned int mrr;
-	unsigned int vsel;
-};
-
-struct samsung_clk_provider {
-	void *reg_base;
-	struct device *dev;
-	spinlock_t lock;
-	struct clk_hw_onecell_data clk_data;
-};
-
-struct samsung_clock_alias {
-	unsigned int id;
-	const char *dev_name;
-	const char *alias;
-};
-
-struct samsung_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct samsung_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct samsung_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-};
-
-struct samsung_div_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-};
-
-struct samsung_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-};
-
-struct samsung_clk_reg_dump {
-	u32 offset;
-	u32 value;
-};
-
-struct samsung_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	int con_offset;
-	int lock_offset;
-	enum samsung_pll_type type;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct samsung_clock_reg_cache {
-	struct list_head node;
-	void *reg_base;
-	struct samsung_clk_reg_dump *rdump;
-	unsigned int rd_num;
-	const struct samsung_clk_reg_dump *rsuspend;
-	unsigned int rsuspend_num;
-};
-
-struct samsung_cmu_info {
-	const struct samsung_pll_clock *pll_clks;
-	unsigned int nr_pll_clks;
-	const struct samsung_mux_clock *mux_clks;
-	unsigned int nr_mux_clks;
-	const struct samsung_div_clock *div_clks;
-	unsigned int nr_div_clks;
-	const struct samsung_gate_clock *gate_clks;
-	unsigned int nr_gate_clks;
-	const struct samsung_fixed_rate_clock *fixed_clks;
-	unsigned int nr_fixed_clks;
-	const struct samsung_fixed_factor_clock *fixed_factor_clks;
-	unsigned int nr_fixed_factor_clks;
-	unsigned int nr_clk_ids;
-	const long unsigned int *clk_regs;
-	unsigned int nr_clk_regs;
-	const struct samsung_clk_reg_dump *suspend_regs;
-	unsigned int nr_suspend_regs;
-	const char *clk_name;
-};
-
-struct samsung_clk_pll {
-	struct clk_hw hw;
-	void *lock_reg;
-	void *con_reg;
-	short unsigned int enable_offs;
-	short unsigned int lock_offs;
-	enum samsung_pll_type type;
-	unsigned int rate_count;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct exynos_cpuclk_cfg_data {
-	long unsigned int prate;
-	long unsigned int div0;
-	long unsigned int div1;
-};
-
-struct exynos_cpuclk {
-	struct clk_hw hw;
-	const struct clk_hw *alt_parent;
-	void *ctrl_base;
-	spinlock_t *lock;
-	const struct exynos_cpuclk_cfg_data *cfg;
-	const long unsigned int num_cfgs;
-	struct notifier_block clk_nb;
-	long unsigned int flags;
-};
-
-struct exynos5433_cmu_data {
-	struct samsung_clk_reg_dump *clk_save;
-	unsigned int nr_clk_save;
-	const struct samsung_clk_reg_dump *clk_suspend;
-	unsigned int nr_clk_suspend;
-	struct clk *clk;
-	struct clk **pclks;
-	int nr_pclks;
-	struct samsung_clk_provider ctx;
-};
-
-struct exynos_audss_clk_drvdata {
-	unsigned int has_adma_clk: 1;
-	unsigned int has_mst_clk: 1;
-	unsigned int enable_epll: 1;
-	unsigned int num_clks;
-};
-
-struct exynos_clkout {
-	struct clk_gate gate;
-	struct clk_mux mux;
-	spinlock_t slock;
-	void *reg;
-	u32 pmu_debug_save;
-	struct clk_hw_onecell_data data;
-};
-
-struct clk_factors_config {
-	u8 nshift;
-	u8 nwidth;
-	u8 kshift;
-	u8 kwidth;
-	u8 mshift;
-	u8 mwidth;
-	u8 pshift;
-	u8 pwidth;
-	u8 n_start;
-};
-
-struct factors_request {
-	long unsigned int rate;
-	long unsigned int parent_rate;
-	u8 parent_index;
-	u8 n;
-	u8 k;
-	u8 m;
-	u8 p;
-};
-
-struct factors_data {
-	int enable;
-	int mux;
-	int muxmask;
-	const struct clk_factors_config *table;
-	void (*getter)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	const char *name;
-};
-
-struct clk_factors {
-	struct clk_hw hw;
-	void *reg;
-	const struct clk_factors_config *config;
-	void (*get_factors)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	spinlock_t *lock;
-	struct clk_mux *mux;
-	struct clk_gate *gate;
-};
-
-struct mux_data {
-	u8 shift;
-};
-
-struct div_data {
-	u8 shift;
-	u8 pow;
-	u8 width;
-	const struct clk_div_table *table;
-};
-
-struct divs_data {
-	const struct factors_data *factors;
-	int ndivs;
-	struct {
-		u8 self;
-		u8 fixed;
-		struct clk_div_table *table;
-		u8 shift;
-		u8 pow;
-		u8 gate;
-		bool critical;
-	} div[4];
-};
-
-struct ve_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct mmc_phase {
-	struct clk_hw hw;
-	u8 offset;
-	void *reg;
-	spinlock_t *lock;
-};
-
-struct sun4i_a10_display_clk_data {
-	bool has_div;
-	u8 num_rst;
-	u8 parents;
-	u8 offset_en;
-	u8 offset_div;
-	u8 offset_mux;
-	u8 offset_rst;
-	u8 width_div;
-	u8 width_mux;
-	u32 flags;
-};
-
-struct reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-	u8 offset;
-};
-
-struct tcon_ch1_clk {
-	struct clk_hw hw;
-	spinlock_t lock;
-	void *reg;
-};
-
-enum {
-	AHB1 = 0,
-	AHB2 = 1,
-	APB1 = 2,
-	APB2 = 3,
-	PARENT_MAX = 4,
-};
-
-struct sun9i_mmc_clk_data {
-	spinlock_t lock;
-	void *membase;
-	struct clk *clk;
-	struct reset_control *reset;
-	struct clk_onecell_data clk_data;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct clk *clk;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_clk_data {
-	u32 clk_mask;
-	u32 reset_mask;
-	bool reset_needs_clk;
-};
-
-struct sun9i_a80_cpus_clk {
-	struct clk_hw hw;
-	void *reg;
-};
-
-struct gates_data {
-	long unsigned int mask[1];
-};
-
-struct ccu_common {
-	void *base;
-	u16 reg;
-	u16 lock_reg;
-	u32 prediv;
-	long unsigned int features;
-	spinlock_t *lock;
-	struct clk_hw hw;
-};
-
-struct ccu_reset_map;
-
-struct sunxi_ccu_desc {
-	struct ccu_common **ccu_clks;
-	long unsigned int num_ccu_clks;
-	struct clk_hw_onecell_data *hw_clks;
-	struct ccu_reset_map *resets;
-	long unsigned int num_resets;
-};
-
-struct ccu_reset_map {
-	u16 reg;
-	u32 bit;
-};
-
-struct ccu_pll_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	u32 enable;
-	u32 lock;
-};
-
-struct ccu_reset {
-	void *base;
-	struct ccu_reset_map *reset_map;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct ccu_mux_fixed_prediv {
-	u8 index;
-	u16 div;
-};
-
-struct ccu_mux_var_prediv {
-	u8 index;
-	u8 shift;
-	u8 width;
-};
-
-struct ccu_mux_internal {
-	u8 shift;
-	u8 width;
-	const u8 *table;
-	const struct ccu_mux_fixed_prediv *fixed_predivs;
-	u8 n_predivs;
-	const struct ccu_mux_var_prediv *var_predivs;
-	u8 n_var_predivs;
-};
-
-struct ccu_div_internal {
-	u8 shift;
-	u8 width;
-	u32 max;
-	u32 offset;
-	u32 flags;
-	struct clk_div_table *table;
-};
-
-struct ccu_div {
-	u32 enable;
-	struct ccu_div_internal div;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-	unsigned int fixed_post_div;
-};
-
-struct ccu_frac_internal {
-	u32 enable;
-	u32 select;
-	long unsigned int rates[2];
-};
-
-struct ccu_gate {
-	u32 enable;
-	struct ccu_common common;
-};
-
-struct ccu_mux {
-	u16 reg;
-	u32 enable;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct ccu_mux_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	struct ccu_mux_internal *cm;
-	u32 delay_us;
-	u8 bypass_index;
-	u8 original_index;
-};
-
-struct ccu_mult_internal {
-	u8 offset;
-	u8 shift;
-	u8 width;
-	u8 min;
-	u8 max;
-};
-
-struct ccu_mult {
-	u32 enable;
-	u32 lock;
-	struct ccu_frac_internal frac;
-	struct ccu_mult_internal mult;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct _ccu_mult {
-	long unsigned int mult;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct ccu_phase {
-	u8 shift;
-	u8 width;
-	struct ccu_common common;
-};
-
-struct ccu_sdm_setting {
-	long unsigned int rate;
-	u32 pattern;
-	u32 m;
-	u32 n;
-};
-
-struct ccu_sdm_internal {
-	struct ccu_sdm_setting *table;
-	u32 table_size;
-	u32 enable;
-	u32 tuning_enable;
-	u16 tuning_reg;
-};
-
-struct ccu_nk {
-	u16 reg;
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct _ccu_nk {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-};
-
-struct ccu_nkm {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	struct ccu_div_internal m;
-	struct ccu_mux_internal mux;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct _ccu_nkm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_nkmp {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	unsigned int fixed_post_div;
-	unsigned int max_rate;
-	struct ccu_common common;
-};
-
-struct _ccu_nkmp {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-	long unsigned int p;
-	long unsigned int min_p;
-	long unsigned int max_p;
-};
-
-struct ccu_nm {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_div_internal m;
-	struct ccu_frac_internal frac;
-	struct ccu_sdm_internal sdm;
-	unsigned int fixed_post_div;
-	unsigned int min_rate;
-	unsigned int max_rate;
-	struct ccu_common common;
-};
-
-struct _ccu_nm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_mp {
-	u32 enable;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	struct ccu_mux_internal mux;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct tegra_cpu_car_ops {
-	void (*wait_for_reset)(u32);
-	void (*put_in_reset)(u32);
-	void (*out_of_reset)(u32);
-	void (*enable_clock)(u32);
-	void (*disable_clock)(u32);
-	bool (*rail_off_ready)();
-	void (*suspend)();
-	void (*resume)();
-};
-
-struct tegra_clk_periph_regs {
-	u32 enb_reg;
-	u32 enb_set_reg;
-	u32 enb_clr_reg;
-	u32 rst_reg;
-	u32 rst_set_reg;
-	u32 rst_clr_reg;
-};
-
-struct tegra_clk_init_table {
-	unsigned int clk_id;
-	unsigned int parent_id;
-	long unsigned int rate;
-	int state;
-};
-
-struct tegra_clk_duplicate {
-	int clk_id;
-	struct clk_lookup lookup;
-};
-
-struct tegra_clk {
-	int dt_id;
-	bool present;
-};
-
-struct tegra_devclk {
-	int dt_id;
-	char *dev_id;
-	char *con_id;
-};
-
-typedef void (*tegra_clk_apply_init_table_func)();
-
-struct tegra_clk_sync_source {
-	struct clk_hw hw;
-	long unsigned int rate;
-	long unsigned int max_rate;
-};
-
-struct i2c_msg {
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	__u8 *buf;
-};
-
-union i2c_smbus_data {
-	__u8 byte;
-	__u16 word;
-	__u8 block[34];
-};
-
-enum i2c_slave_event {
-	I2C_SLAVE_READ_REQUESTED = 0,
-	I2C_SLAVE_WRITE_REQUESTED = 1,
-	I2C_SLAVE_READ_PROCESSED = 2,
-	I2C_SLAVE_WRITE_RECEIVED = 3,
-	I2C_SLAVE_STOP = 4,
-};
-
-struct i2c_client;
-
-typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
-
-struct i2c_adapter;
-
-struct i2c_client {
-	short unsigned int flags;
-	short unsigned int addr;
-	char name[20];
-	struct i2c_adapter *adapter;
-	struct device dev;
-	int init_irq;
-	int irq;
-	struct list_head detected;
-	i2c_slave_cb_t slave_cb;
-};
-
-struct i2c_algorithm;
-
-struct i2c_lock_operations;
-
-struct i2c_bus_recovery_info;
-
-struct i2c_adapter_quirks;
-
-struct i2c_adapter {
-	struct module *owner;
-	unsigned int class;
-	const struct i2c_algorithm *algo;
-	void *algo_data;
-	const struct i2c_lock_operations *lock_ops;
-	struct rt_mutex bus_lock;
-	struct rt_mutex mux_lock;
-	int timeout;
-	int retries;
-	struct device dev;
-	long unsigned int locked_flags;
-	int nr;
-	char name[48];
-	struct completion dev_released;
-	struct mutex userspace_clients_lock;
-	struct list_head userspace_clients;
-	struct i2c_bus_recovery_info *bus_recovery_info;
-	const struct i2c_adapter_quirks *quirks;
-	struct irq_domain *host_notify_domain;
-};
-
-struct i2c_algorithm {
-	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	u32 (*functionality)(struct i2c_adapter *);
-	int (*reg_slave)(struct i2c_client *);
-	int (*unreg_slave)(struct i2c_client *);
-};
-
-struct i2c_lock_operations {
-	void (*lock_bus)(struct i2c_adapter *, unsigned int);
-	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
-	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
-};
-
-struct i2c_bus_recovery_info {
-	int (*recover_bus)(struct i2c_adapter *);
-	int (*get_scl)(struct i2c_adapter *);
-	void (*set_scl)(struct i2c_adapter *, int);
-	int (*get_sda)(struct i2c_adapter *);
-	void (*set_sda)(struct i2c_adapter *, int);
-	int (*get_bus_free)(struct i2c_adapter *);
-	void (*prepare_recovery)(struct i2c_adapter *);
-	void (*unprepare_recovery)(struct i2c_adapter *);
-	struct gpio_desc *scl_gpiod;
-	struct gpio_desc *sda_gpiod;
-	struct pinctrl *pinctrl;
-	struct pinctrl_state *pins_default;
-	struct pinctrl_state *pins_gpio;
-};
-
-struct i2c_adapter_quirks {
-	u64 flags;
-	int max_num_msgs;
-	u16 max_write_len;
-	u16 max_read_len;
-	u16 max_comb_1st_msg_len;
-	u16 max_comb_2nd_msg_len;
-};
-
-struct rail_alignment {
-	int offset_uv;
-	int step_uv;
-};
-
-struct cvb_coefficients {
-	int c0;
-	int c1;
-	int c2;
-};
-
-struct cvb_table_freq_entry {
-	long unsigned int freq;
-	struct cvb_coefficients coefficients;
-};
-
-struct cvb_cpu_dfll_data {
-	u32 tune0_low;
-	u32 tune0_high;
-	u32 tune1;
-	unsigned int tune_high_min_millivolts;
-};
-
-struct cvb_table {
-	int speedo_id;
-	int process_id;
-	int min_millivolts;
-	int max_millivolts;
-	int speedo_scale;
-	int voltage_scale;
-	struct cvb_table_freq_entry entries[40];
-	struct cvb_cpu_dfll_data cpu_dfll_data;
-};
-
-struct tegra_dfll_soc_data {
-	struct device *dev;
-	long unsigned int max_freq;
-	const struct cvb_table *cvb;
-	struct rail_alignment alignment;
-	void (*init_clock_trimmers)();
-	void (*set_clock_trimmers_high)();
-	void (*set_clock_trimmers_low)();
-};
-
-enum dfll_ctrl_mode {
-	DFLL_UNINITIALIZED = 0,
-	DFLL_DISABLED = 1,
-	DFLL_OPEN_LOOP = 2,
-	DFLL_CLOSED_LOOP = 3,
-};
-
-enum dfll_tune_range {
-	DFLL_TUNE_UNINITIALIZED = 0,
-	DFLL_TUNE_LOW = 1,
-};
-
-enum tegra_dfll_pmu_if {
-	TEGRA_DFLL_PMU_I2C = 0,
-	TEGRA_DFLL_PMU_PWM = 1,
-};
-
-struct dfll_rate_req {
-	long unsigned int rate;
-	long unsigned int dvco_target_rate;
-	int lut_index;
-	u8 mult_bits;
-	u8 scale_bits;
-};
-
-struct tegra_dfll {
-	struct device *dev;
-	struct tegra_dfll_soc_data *soc;
-	void *base;
-	void *i2c_base;
-	void *i2c_controller_base;
-	void *lut_base;
-	struct regulator *vdd_reg;
-	struct clk *soc_clk;
-	struct clk *ref_clk;
-	struct clk *i2c_clk;
-	struct clk *dfll_clk;
-	struct reset_control *dvco_rst;
-	long unsigned int ref_rate;
-	long unsigned int i2c_clk_rate;
-	long unsigned int dvco_rate_min;
-	enum dfll_ctrl_mode mode;
-	enum dfll_tune_range tune_range;
-	struct dentry *debugfs_dir;
-	struct clk_hw dfll_clk_hw;
-	const char *output_clock_name;
-	struct dfll_rate_req last_req;
-	long unsigned int last_unrounded_rate;
-	u32 droop_ctrl;
-	u32 sample_rate;
-	u32 force_mode;
-	u32 cf;
-	u32 ci;
-	u32 cg;
-	bool cg_scale;
-	u32 i2c_fs_rate;
-	u32 i2c_reg;
-	u32 i2c_slave_addr;
-	unsigned int lut[33];
-	long unsigned int lut_uv[33];
-	int lut_size;
-	u8 lut_bottom;
-	u8 lut_min;
-	u8 lut_max;
-	u8 lut_safe;
-	enum tegra_dfll_pmu_if pmu_if;
-	long unsigned int pwm_rate;
-	struct pinctrl *pwm_pin;
-	struct pinctrl_state *pwm_enable_state;
-	struct pinctrl_state *pwm_disable_state;
-	u32 reg_init_uV;
-};
-
-struct tegra_clk_frac_div {
-	struct clk_hw hw;
-	void *reg;
-	u8 flags;
-	u8 shift;
-	u8 width;
-	u8 frac_width;
-	spinlock_t *lock;
-};
-
-struct tegra_clk_periph_gate {
-	u32 magic;
-	struct clk_hw hw;
-	void *clk_base;
-	u8 flags;
-	int clk_num;
-	int *enable_refcnt;
-	const struct tegra_clk_periph_regs *regs;
-};
-
-struct tegra_clk_periph {
-	u32 magic;
-	struct clk_hw hw;
-	struct clk_mux mux;
-	struct tegra_clk_frac_div divider;
-	struct tegra_clk_periph_gate gate;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *div_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct tegra_periph_init_data {
-	const char *name;
-	int clk_id;
-	union {
-		const char * const *parent_names;
-		const char *parent_name;
-	} p;
-	int num_parents;
-	struct tegra_clk_periph periph;
-	u32 offset;
-	const char *con_id;
-	const char *dev_id;
-	long unsigned int flags;
-};
-
-struct tegra_clk_periph_fixed {
-	struct clk_hw hw;
-	void *base;
-	const struct tegra_clk_periph_regs *regs;
-	unsigned int mul;
-	unsigned int div;
-	unsigned int num;
-};
-
-struct tegra_clk_pll_freq_table {
-	long unsigned int input_rate;
-	long unsigned int output_rate;
-	u32 n;
-	u32 m;
-	u8 p;
-	u8 cpcon;
-	u16 sdm_data;
-};
-
-struct pdiv_map {
-	u8 pdiv;
-	u8 hw_val;
-};
-
-struct div_nmp {
-	u8 divn_shift;
-	u8 divn_width;
-	u8 divm_shift;
-	u8 divm_width;
-	u8 divp_shift;
-	u8 divp_width;
-	u8 override_divn_shift;
-	u8 override_divm_shift;
-	u8 override_divp_shift;
-};
-
-struct tegra_clk_pll;
-
-struct tegra_clk_pll_params {
-	long unsigned int input_min;
-	long unsigned int input_max;
-	long unsigned int cf_min;
-	long unsigned int cf_max;
-	long unsigned int vco_min;
-	long unsigned int vco_max;
-	u32 base_reg;
-	u32 misc_reg;
-	u32 lock_reg;
-	u32 lock_mask;
-	u32 lock_enable_bit_idx;
-	u32 iddq_reg;
-	u32 iddq_bit_idx;
-	u32 reset_reg;
-	u32 reset_bit_idx;
-	u32 sdm_din_reg;
-	u32 sdm_din_mask;
-	u32 sdm_ctrl_reg;
-	u32 sdm_ctrl_en_mask;
-	u32 ssc_ctrl_reg;
-	u32 ssc_ctrl_en_mask;
-	u32 aux_reg;
-	u32 dyn_ramp_reg;
-	u32 ext_misc_reg[6];
-	u32 pmc_divnm_reg;
-	u32 pmc_divp_reg;
-	u32 flags;
-	int stepa_shift;
-	int stepb_shift;
-	int lock_delay;
-	int max_p;
-	bool defaults_set;
-	const struct pdiv_map *pdiv_tohw;
-	struct div_nmp *div_nmp;
-	struct tegra_clk_pll_freq_table *freq_table;
-	long unsigned int fixed_rate;
-	u16 mdiv_default;
-	u32 (*round_p_to_pdiv)(u32, u32 *);
-	void (*set_gain)(struct tegra_clk_pll_freq_table *);
-	int (*calc_rate)(struct clk_hw *, struct tegra_clk_pll_freq_table *, long unsigned int, long unsigned int);
-	long unsigned int (*adjust_vco)(struct tegra_clk_pll_params *, long unsigned int);
-	void (*set_defaults)(struct tegra_clk_pll *);
-	int (*dyn_ramp)(struct tegra_clk_pll *, struct tegra_clk_pll_freq_table *);
-	int (*pre_rate_change)();
-	void (*post_rate_change)();
-};
-
-struct tegra_clk_pll {
-	struct clk_hw hw;
-	void *clk_base;
-	void *pmc;
-	spinlock_t *lock;
-	struct tegra_clk_pll_params *params;
-};
-
-struct utmi_clk_param {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u8 stable_count;
-	u8 active_delay_count;
-	u8 xtal_freq_count;
-};
-
-struct tegra_clk_pll_out {
-	struct clk_hw hw;
-	void *reg;
-	u8 enb_bit_idx;
-	u8 rst_bit_idx;
-	spinlock_t *lock;
-	u8 flags;
-};
-
-struct tegra_sdmmc_mux {
-	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	const struct clk_ops *gate_ops;
-	struct tegra_clk_periph_gate gate;
-	u8 div_flags;
-};
-
-struct tegra_clk_super_mux {
-	struct clk_hw hw;
-	void *reg;
-	struct tegra_clk_frac_div frac_div;
-	const struct clk_ops *div_ops;
-	u8 width;
-	u8 flags;
-	u8 div2_index;
-	u8 pllx_index;
-	spinlock_t *lock;
-};
-
-struct tegra_audio_clk_info {
-	char *name;
-	struct tegra_clk_pll_params *pll_params;
-	int clk_id;
-	char *parent;
-};
-
-enum clk_id {
-	tegra_clk_actmon = 0,
-	tegra_clk_adx = 1,
-	tegra_clk_adx1 = 2,
-	tegra_clk_afi = 3,
-	tegra_clk_amx = 4,
-	tegra_clk_amx1 = 5,
-	tegra_clk_apb2ape = 6,
-	tegra_clk_ahbdma = 7,
-	tegra_clk_apbdma = 8,
-	tegra_clk_apbif = 9,
-	tegra_clk_ape = 10,
-	tegra_clk_audio0 = 11,
-	tegra_clk_audio0_2x = 12,
-	tegra_clk_audio0_mux = 13,
-	tegra_clk_audio1 = 14,
-	tegra_clk_audio1_2x = 15,
-	tegra_clk_audio1_mux = 16,
-	tegra_clk_audio2 = 17,
-	tegra_clk_audio2_2x = 18,
-	tegra_clk_audio2_mux = 19,
-	tegra_clk_audio3 = 20,
-	tegra_clk_audio3_2x = 21,
-	tegra_clk_audio3_mux = 22,
-	tegra_clk_audio4 = 23,
-	tegra_clk_audio4_2x = 24,
-	tegra_clk_audio4_mux = 25,
-	tegra_clk_bsea = 26,
-	tegra_clk_bsev = 27,
-	tegra_clk_cclk_g = 28,
-	tegra_clk_cclk_lp = 29,
-	tegra_clk_cilab = 30,
-	tegra_clk_cilcd = 31,
-	tegra_clk_cile = 32,
-	tegra_clk_clk_32k = 33,
-	tegra_clk_clk72Mhz = 34,
-	tegra_clk_clk72Mhz_8 = 35,
-	tegra_clk_clk_m = 36,
-	tegra_clk_osc = 37,
-	tegra_clk_osc_div2 = 38,
-	tegra_clk_osc_div4 = 39,
-	tegra_clk_cml0 = 40,
-	tegra_clk_cml1 = 41,
-	tegra_clk_csi = 42,
-	tegra_clk_csite = 43,
-	tegra_clk_csite_8 = 44,
-	tegra_clk_csus = 45,
-	tegra_clk_cve = 46,
-	tegra_clk_dam0 = 47,
-	tegra_clk_dam1 = 48,
-	tegra_clk_dam2 = 49,
-	tegra_clk_d_audio = 50,
-	tegra_clk_dbgapb = 51,
-	tegra_clk_dds = 52,
-	tegra_clk_dfll_ref = 53,
-	tegra_clk_dfll_soc = 54,
-	tegra_clk_disp1 = 55,
-	tegra_clk_disp1_8 = 56,
-	tegra_clk_disp2 = 57,
-	tegra_clk_disp2_8 = 58,
-	tegra_clk_dp2 = 59,
-	tegra_clk_dpaux = 60,
-	tegra_clk_dpaux1 = 61,
-	tegra_clk_dsialp = 62,
-	tegra_clk_dsia_mux = 63,
-	tegra_clk_dsiblp = 64,
-	tegra_clk_dsib_mux = 65,
-	tegra_clk_dtv = 66,
-	tegra_clk_emc = 67,
-	tegra_clk_entropy = 68,
-	tegra_clk_entropy_8 = 69,
-	tegra_clk_epp = 70,
-	tegra_clk_epp_8 = 71,
-	tegra_clk_extern1 = 72,
-	tegra_clk_extern2 = 73,
-	tegra_clk_extern3 = 74,
-	tegra_clk_fuse = 75,
-	tegra_clk_fuse_burn = 76,
-	tegra_clk_gpu = 77,
-	tegra_clk_gr2d = 78,
-	tegra_clk_gr2d_8 = 79,
-	tegra_clk_gr3d = 80,
-	tegra_clk_gr3d_8 = 81,
-	tegra_clk_hclk = 82,
-	tegra_clk_hda = 83,
-	tegra_clk_hda_8 = 84,
-	tegra_clk_hda2codec_2x = 85,
-	tegra_clk_hda2codec_2x_8 = 86,
-	tegra_clk_hda2hdmi = 87,
-	tegra_clk_hdmi = 88,
-	tegra_clk_hdmi_audio = 89,
-	tegra_clk_host1x = 90,
-	tegra_clk_host1x_8 = 91,
-	tegra_clk_host1x_9 = 92,
-	tegra_clk_hsic_trk = 93,
-	tegra_clk_i2c1 = 94,
-	tegra_clk_i2c2 = 95,
-	tegra_clk_i2c3 = 96,
-	tegra_clk_i2c4 = 97,
-	tegra_clk_i2c5 = 98,
-	tegra_clk_i2c6 = 99,
-	tegra_clk_i2cslow = 100,
-	tegra_clk_i2s0 = 101,
-	tegra_clk_i2s0_sync = 102,
-	tegra_clk_i2s1 = 103,
-	tegra_clk_i2s1_sync = 104,
-	tegra_clk_i2s2 = 105,
-	tegra_clk_i2s2_sync = 106,
-	tegra_clk_i2s3 = 107,
-	tegra_clk_i2s3_sync = 108,
-	tegra_clk_i2s4 = 109,
-	tegra_clk_i2s4_sync = 110,
-	tegra_clk_isp = 111,
-	tegra_clk_isp_8 = 112,
-	tegra_clk_isp_9 = 113,
-	tegra_clk_ispb = 114,
-	tegra_clk_kbc = 115,
-	tegra_clk_kfuse = 116,
-	tegra_clk_la = 117,
-	tegra_clk_maud = 118,
-	tegra_clk_mipi = 119,
-	tegra_clk_mipibif = 120,
-	tegra_clk_mipi_cal = 121,
-	tegra_clk_mpe = 122,
-	tegra_clk_mselect = 123,
-	tegra_clk_msenc = 124,
-	tegra_clk_ndflash = 125,
-	tegra_clk_ndflash_8 = 126,
-	tegra_clk_ndspeed = 127,
-	tegra_clk_ndspeed_8 = 128,
-	tegra_clk_nor = 129,
-	tegra_clk_nvdec = 130,
-	tegra_clk_nvenc = 131,
-	tegra_clk_nvjpg = 132,
-	tegra_clk_owr = 133,
-	tegra_clk_owr_8 = 134,
-	tegra_clk_pcie = 135,
-	tegra_clk_pclk = 136,
-	tegra_clk_pll_a = 137,
-	tegra_clk_pll_a_out0 = 138,
-	tegra_clk_pll_a1 = 139,
-	tegra_clk_pll_c = 140,
-	tegra_clk_pll_c2 = 141,
-	tegra_clk_pll_c3 = 142,
-	tegra_clk_pll_c4 = 143,
-	tegra_clk_pll_c4_out0 = 144,
-	tegra_clk_pll_c4_out1 = 145,
-	tegra_clk_pll_c4_out2 = 146,
-	tegra_clk_pll_c4_out3 = 147,
-	tegra_clk_pll_c_out1 = 148,
-	tegra_clk_pll_d = 149,
-	tegra_clk_pll_d2 = 150,
-	tegra_clk_pll_d2_out0 = 151,
-	tegra_clk_pll_d_out0 = 152,
-	tegra_clk_pll_dp = 153,
-	tegra_clk_pll_e_out0 = 154,
-	tegra_clk_pll_g_ref = 155,
-	tegra_clk_pll_m = 156,
-	tegra_clk_pll_m_out1 = 157,
-	tegra_clk_pll_mb = 158,
-	tegra_clk_pll_p = 159,
-	tegra_clk_pll_p_out1 = 160,
-	tegra_clk_pll_p_out2 = 161,
-	tegra_clk_pll_p_out2_int = 162,
-	tegra_clk_pll_p_out3 = 163,
-	tegra_clk_pll_p_out4 = 164,
-	tegra_clk_pll_p_out4_cpu = 165,
-	tegra_clk_pll_p_out5 = 166,
-	tegra_clk_pll_p_out_hsio = 167,
-	tegra_clk_pll_p_out_xusb = 168,
-	tegra_clk_pll_p_out_cpu = 169,
-	tegra_clk_pll_p_out_adsp = 170,
-	tegra_clk_pll_ref = 171,
-	tegra_clk_pll_re_out = 172,
-	tegra_clk_pll_re_vco = 173,
-	tegra_clk_pll_u = 174,
-	tegra_clk_pll_u_out = 175,
-	tegra_clk_pll_u_out1 = 176,
-	tegra_clk_pll_u_out2 = 177,
-	tegra_clk_pll_u_12m = 178,
-	tegra_clk_pll_u_480m = 179,
-	tegra_clk_pll_u_48m = 180,
-	tegra_clk_pll_u_60m = 181,
-	tegra_clk_pll_x = 182,
-	tegra_clk_pll_x_out0 = 183,
-	tegra_clk_pwm = 184,
-	tegra_clk_qspi = 185,
-	tegra_clk_rtc = 186,
-	tegra_clk_sata = 187,
-	tegra_clk_sata_8 = 188,
-	tegra_clk_sata_cold = 189,
-	tegra_clk_sata_oob = 190,
-	tegra_clk_sata_oob_8 = 191,
-	tegra_clk_sbc1 = 192,
-	tegra_clk_sbc1_8 = 193,
-	tegra_clk_sbc1_9 = 194,
-	tegra_clk_sbc2 = 195,
-	tegra_clk_sbc2_8 = 196,
-	tegra_clk_sbc2_9 = 197,
-	tegra_clk_sbc3 = 198,
-	tegra_clk_sbc3_8 = 199,
-	tegra_clk_sbc3_9 = 200,
-	tegra_clk_sbc4 = 201,
-	tegra_clk_sbc4_8 = 202,
-	tegra_clk_sbc4_9 = 203,
-	tegra_clk_sbc5 = 204,
-	tegra_clk_sbc5_8 = 205,
-	tegra_clk_sbc6 = 206,
-	tegra_clk_sbc6_8 = 207,
-	tegra_clk_sclk = 208,
-	tegra_clk_sdmmc_legacy = 209,
-	tegra_clk_sdmmc1 = 210,
-	tegra_clk_sdmmc1_8 = 211,
-	tegra_clk_sdmmc1_9 = 212,
-	tegra_clk_sdmmc2 = 213,
-	tegra_clk_sdmmc2_8 = 214,
-	tegra_clk_sdmmc3 = 215,
-	tegra_clk_sdmmc3_8 = 216,
-	tegra_clk_sdmmc3_9 = 217,
-	tegra_clk_sdmmc4 = 218,
-	tegra_clk_sdmmc4_8 = 219,
-	tegra_clk_se = 220,
-	tegra_clk_se_10 = 221,
-	tegra_clk_soc_therm = 222,
-	tegra_clk_soc_therm_8 = 223,
-	tegra_clk_sor0 = 224,
-	tegra_clk_sor0_out = 225,
-	tegra_clk_sor1 = 226,
-	tegra_clk_sor1_out = 227,
-	tegra_clk_spdif = 228,
-	tegra_clk_spdif_2x = 229,
-	tegra_clk_spdif_in = 230,
-	tegra_clk_spdif_in_8 = 231,
-	tegra_clk_spdif_in_sync = 232,
-	tegra_clk_spdif_mux = 233,
-	tegra_clk_spdif_out = 234,
-	tegra_clk_timer = 235,
-	tegra_clk_trace = 236,
-	tegra_clk_tsec = 237,
-	tegra_clk_tsec_8 = 238,
-	tegra_clk_tsecb = 239,
-	tegra_clk_tsensor = 240,
-	tegra_clk_tvdac = 241,
-	tegra_clk_tvo = 242,
-	tegra_clk_uarta = 243,
-	tegra_clk_uarta_8 = 244,
-	tegra_clk_uartb = 245,
-	tegra_clk_uartb_8 = 246,
-	tegra_clk_uartc = 247,
-	tegra_clk_uartc_8 = 248,
-	tegra_clk_uartd = 249,
-	tegra_clk_uartd_8 = 250,
-	tegra_clk_uarte = 251,
-	tegra_clk_uarte_8 = 252,
-	tegra_clk_uartape = 253,
-	tegra_clk_usb2 = 254,
-	tegra_clk_usb2_hsic_trk = 255,
-	tegra_clk_usb2_trk = 256,
-	tegra_clk_usb3 = 257,
-	tegra_clk_usbd = 258,
-	tegra_clk_vcp = 259,
-	tegra_clk_vde = 260,
-	tegra_clk_vde_8 = 261,
-	tegra_clk_vfir = 262,
-	tegra_clk_vi = 263,
-	tegra_clk_vi_8 = 264,
-	tegra_clk_vi_9 = 265,
-	tegra_clk_vi_10 = 266,
-	tegra_clk_vi_i2c = 267,
-	tegra_clk_vic03 = 268,
-	tegra_clk_vic03_8 = 269,
-	tegra_clk_vim2_clk = 270,
-	tegra_clk_vimclk_sync = 271,
-	tegra_clk_vi_sensor = 272,
-	tegra_clk_vi_sensor_8 = 273,
-	tegra_clk_vi_sensor_9 = 274,
-	tegra_clk_vi_sensor2 = 275,
-	tegra_clk_vi_sensor2_8 = 276,
-	tegra_clk_xusb_dev = 277,
-	tegra_clk_xusb_dev_src = 278,
-	tegra_clk_xusb_dev_src_8 = 279,
-	tegra_clk_xusb_falcon_src = 280,
-	tegra_clk_xusb_falcon_src_8 = 281,
-	tegra_clk_xusb_fs_src = 282,
-	tegra_clk_xusb_gate = 283,
-	tegra_clk_xusb_host = 284,
-	tegra_clk_xusb_host_src = 285,
-	tegra_clk_xusb_host_src_8 = 286,
-	tegra_clk_xusb_hs_src = 287,
-	tegra_clk_xusb_hs_src_4 = 288,
-	tegra_clk_xusb_ss = 289,
-	tegra_clk_xusb_ss_src = 290,
-	tegra_clk_xusb_ss_src_8 = 291,
-	tegra_clk_xusb_ss_div2 = 292,
-	tegra_clk_xusb_ssp_src = 293,
-	tegra_clk_sclk_mux = 294,
-	tegra_clk_sor_safe = 295,
-	tegra_clk_cec = 296,
-	tegra_clk_ispa = 297,
-	tegra_clk_dmic1 = 298,
-	tegra_clk_dmic2 = 299,
-	tegra_clk_dmic3 = 300,
-	tegra_clk_dmic1_sync_clk = 301,
-	tegra_clk_dmic2_sync_clk = 302,
-	tegra_clk_dmic3_sync_clk = 303,
-	tegra_clk_dmic1_sync_clk_mux = 304,
-	tegra_clk_dmic2_sync_clk_mux = 305,
-	tegra_clk_dmic3_sync_clk_mux = 306,
-	tegra_clk_iqc1 = 307,
-	tegra_clk_iqc2 = 308,
-	tegra_clk_pll_a_out_adsp = 309,
-	tegra_clk_pll_a_out0_out_adsp = 310,
-	tegra_clk_adsp = 311,
-	tegra_clk_adsp_neon = 312,
-	tegra_clk_max = 313,
-};
-
-struct tegra_sync_source_initdata {
-	char *name;
-	long unsigned int rate;
-	long unsigned int max_rate;
-	int clk_id;
-};
-
-struct tegra_audio_clk_initdata {
-	char *gate_name;
-	char *mux_name;
-	u32 offset;
-	int gate_clk_id;
-	int mux_clk_id;
-};
-
-struct tegra_audio2x_clk_initdata {
-	char *parent;
-	char *gate_name;
-	char *name_2x;
-	char *div_name;
-	int clk_id;
-	int clk_num;
-	u8 div_offset;
-};
-
-struct pll_out_data {
-	char *div_name;
-	char *pll_out_name;
-	u32 offset;
-	int clk_id;
-	u8 div_shift;
-	u8 div_flags;
-	u8 rst_shift;
-	spinlock_t *lock;
-};
-
-enum tegra_super_gen {
-	gen4 = 4,
-	gen5 = 5,
-};
-
-struct tegra_super_gen_info {
-	enum tegra_super_gen gen;
-	const char **sclk_parents;
-	const char **cclk_g_parents;
-	const char **cclk_lp_parents;
-	int num_sclk_parents;
-	int num_cclk_g_parents;
-	int num_cclk_lp_parents;
-};
-
-enum tegra_revision {
-	TEGRA_REVISION_UNKNOWN = 0,
-	TEGRA_REVISION_A01 = 1,
-	TEGRA_REVISION_A02 = 2,
-	TEGRA_REVISION_A03 = 3,
-	TEGRA_REVISION_A03p = 4,
-	TEGRA_REVISION_A04 = 5,
-	TEGRA_REVISION_MAX = 6,
-};
-
-struct tegra_sku_info {
-	int sku_id;
-	int cpu_process_id;
-	int cpu_speedo_id;
-	int cpu_speedo_value;
-	int cpu_iddq_value;
-	int soc_process_id;
-	int soc_speedo_id;
-	int soc_speedo_value;
-	int gpu_process_id;
-	int gpu_speedo_id;
-	int gpu_speedo_value;
-	enum tegra_revision revision;
-};
-
-struct dfll_fcpu_data {
-	const long unsigned int *cpu_max_freq_table;
-	unsigned int cpu_max_freq_table_size;
-	const struct cvb_table *cpu_cvb_tables;
-	unsigned int cpu_cvb_tables_size;
-};
-
-struct cpu_clk_suspend_context {
-	u32 clk_csite_src;
-	u32 cclkg_burst;
-	u32 cclkg_divider;
-};
-
-enum {
-	DOWN___2 = 0,
-	UP___2 = 1,
-};
-
-struct cpu_clk_suspend_context___2 {
-	u32 clk_csite_src;
-};
-
-struct tegra210_domain_mbist_war {
-	void (*handle_lvl2_ovr)(struct tegra210_domain_mbist_war *);
-	const u32 lvl2_offset;
-	const u32 lvl2_mask;
-	const unsigned int num_clks;
-	const unsigned int *clk_init_data;
-	struct clk_bulk_data *clks;
-};
-
-struct utmi_clk_param___2 {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u16 stable_count;
-	u8 active_delay_count;
-	u16 xtal_freq_count;
-};
-
-struct tegra210_clk_emc_config {
-	long unsigned int rate;
-	bool same_freq;
-	u32 value;
-	long unsigned int parent_rate;
-	u8 parent;
-};
-
-struct tegra210_clk_emc_provider {
-	struct module *owner;
-	struct device *dev;
-	struct tegra210_clk_emc_config *configs;
-	unsigned int num_configs;
-	int (*set_rate)(struct device *, const struct tegra210_clk_emc_config *);
-};
-
-struct tegra210_clk_emc {
-	struct clk_hw hw;
-	void *regs;
-	struct tegra210_clk_emc_provider *provider;
-	struct clk *parents[8];
-};
-
-enum {
-	CMD_CLK_GET_RATE = 1,
-	CMD_CLK_SET_RATE = 2,
-	CMD_CLK_ROUND_RATE = 3,
-	CMD_CLK_GET_PARENT = 4,
-	CMD_CLK_SET_PARENT = 5,
-	CMD_CLK_IS_ENABLED = 6,
-	CMD_CLK_ENABLE = 7,
-	CMD_CLK_DISABLE = 8,
-	CMD_CLK_GET_ALL_INFO = 14,
-	CMD_CLK_GET_MAX_CLK_ID = 15,
-	CMD_CLK_GET_FMAX_AT_VMIN = 16,
-	CMD_CLK_MAX = 17,
-};
-
-struct cmd_clk_get_rate_request {};
-
-struct cmd_clk_get_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_set_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_set_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_round_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_round_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_get_parent_request {};
-
-struct cmd_clk_get_parent_response {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_set_parent_request {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_set_parent_response {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_is_enabled_request {};
-
-struct cmd_clk_is_enabled_response {
-	int32_t state;
-};
-
-struct cmd_clk_enable_request {};
-
-struct cmd_clk_disable_request {};
-
-struct cmd_clk_get_all_info_request {};
-
-struct cmd_clk_get_all_info_response {
-	uint32_t flags;
-	uint32_t parent;
-	uint32_t parents[16];
-	uint8_t num_parents;
-	uint8_t name[40];
-} __attribute__((packed));
-
-struct cmd_clk_get_max_clk_id_request {};
-
-struct cmd_clk_get_max_clk_id_response {
-	uint32_t max_id;
-};
-
-struct cmd_clk_get_fmax_at_vmin_request {};
-
-struct mrq_clk_request {
-	uint32_t cmd_and_id;
-	union {
-		struct cmd_clk_get_rate_request clk_get_rate;
-		struct cmd_clk_set_rate_request clk_set_rate;
-		struct cmd_clk_round_rate_request clk_round_rate;
-		struct cmd_clk_get_parent_request clk_get_parent;
-		struct cmd_clk_set_parent_request clk_set_parent;
-		struct cmd_clk_enable_request clk_enable;
-		struct cmd_clk_disable_request clk_disable;
-		struct cmd_clk_is_enabled_request clk_is_enabled;
-		struct cmd_clk_get_all_info_request clk_get_all_info;
-		struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id;
-		struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin;
-	};
-} __attribute__((packed));
-
-struct tegra_bpmp_ops;
-
-struct tegra_bpmp_soc {
-	struct {
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_tx;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} thread;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_rx;
-	} channels;
-	const struct tegra_bpmp_ops *ops;
-	unsigned int num_resets;
-};
-
-struct tegra_bpmp;
-
-struct tegra_bpmp_channel;
-
-struct tegra_bpmp_ops {
-	int (*init)(struct tegra_bpmp *);
-	void (*deinit)(struct tegra_bpmp *);
-	bool (*is_response_ready)(struct tegra_bpmp_channel *);
-	bool (*is_request_ready)(struct tegra_bpmp_channel *);
-	int (*ack_response)(struct tegra_bpmp_channel *);
-	int (*ack_request)(struct tegra_bpmp_channel *);
-	bool (*is_response_channel_free)(struct tegra_bpmp_channel *);
-	bool (*is_request_channel_free)(struct tegra_bpmp_channel *);
-	int (*post_response)(struct tegra_bpmp_channel *);
-	int (*post_request)(struct tegra_bpmp_channel *);
-	int (*ring_doorbell)(struct tegra_bpmp *);
-	int (*resume)(struct tegra_bpmp *);
-};
-
-struct tegra_bpmp_mb_data {
-	u32 code;
-	u32 flags;
-	u8 data[120];
-};
-
-struct tegra_ivc;
-
-struct tegra_bpmp_channel {
-	struct tegra_bpmp *bpmp;
-	struct tegra_bpmp_mb_data *ib;
-	struct tegra_bpmp_mb_data *ob;
-	struct completion completion;
-	struct tegra_ivc *ivc;
-	unsigned int index;
-};
-
-struct tegra_bpmp_clk;
-
-struct tegra_bpmp {
-	const struct tegra_bpmp_soc *soc;
-	struct device *dev;
-	void *priv;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
-	spinlock_t atomic_tx_lock;
-	struct tegra_bpmp_channel *tx_channel;
-	struct tegra_bpmp_channel *rx_channel;
-	struct tegra_bpmp_channel *threaded_channels;
-	struct {
-		long unsigned int *allocated;
-		long unsigned int *busy;
-		unsigned int count;
-		struct semaphore lock;
-	} threaded;
-	struct list_head mrqs;
-	spinlock_t lock;
-	struct tegra_bpmp_clk **clocks;
-	unsigned int num_clocks;
-	struct reset_controller_dev rstc;
-	struct genpd_onecell_data genpd;
-	struct dentry *debugfs_mirror;
-};
-
-struct tegra_bpmp_clk {
-	struct clk_hw hw;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-	unsigned int num_parents;
-	unsigned int *parents;
-};
-
-struct tegra_bpmp_message {
-	unsigned int mrq;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
-};
-
-struct tegra_bpmp_clk_info {
-	unsigned int id;
-	char name[40];
-	unsigned int parents[16];
-	unsigned int num_parents;
-	long unsigned int flags;
-};
-
-struct tegra_bpmp_clk_message {
-	unsigned int cmd;
-	unsigned int id;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
-};
-
-struct clk_sp810;
-
-struct clk_sp810_timerclken {
-	struct clk_hw hw;
-	struct clk *clk;
-	struct clk_sp810 *sp810;
-	int channel;
-};
-
-struct clk_sp810 {
-	struct device_node *node;
-	void *base;
-	spinlock_t lock;
-	struct clk_sp810_timerclken timerclken[4];
-};
-
-struct vexpress_osc {
-	struct regmap *reg;
-	struct clk_hw hw;
-	long unsigned int rate_min;
-	long unsigned int rate_max;
-};
-
 struct dma_chan_tbl_ent {
 	struct dma_chan *chan;
 };
@@ -75294,2803 +113858,12 @@
 	size_t size;
 };
 
-struct dmaengine_desc_callback {
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-};
-
-struct virt_dma_desc {
-	struct dma_async_tx_descriptor tx;
-	struct dmaengine_result tx_result;
-	struct list_head node;
-};
-
-struct virt_dma_chan {
-	struct dma_chan chan;
-	struct tasklet_struct task;
-	void (*desc_free)(struct virt_dma_desc *);
-	spinlock_t lock;
-	struct list_head desc_allocated;
-	struct list_head desc_submitted;
-	struct list_head desc_issued;
-	struct list_head desc_completed;
-	struct list_head desc_terminated;
-	struct virt_dma_desc *cyclic;
-};
-
-struct acpi_table_csrt {
-	struct acpi_table_header header;
-};
-
-struct acpi_csrt_group {
-	u32 length;
-	u32 vendor_id;
-	u32 subvendor_id;
-	u16 device_id;
-	u16 subdevice_id;
-	u16 revision;
-	u16 reserved;
-	u32 shared_info_length;
-};
-
-struct acpi_csrt_shared_info {
-	u16 major_version;
-	u16 minor_version;
-	u32 mmio_base_low;
-	u32 mmio_base_high;
-	u32 gsi_interrupt;
-	u8 interrupt_polarity;
-	u8 interrupt_mode;
-	u8 num_channels;
-	u8 dma_address_width;
-	u16 base_request_line;
-	u16 num_handshake_signals;
-	u32 max_block_size;
-};
-
-struct acpi_dma_spec {
-	int chan_id;
-	int slave_id;
-	struct device *dev;
-};
-
-struct acpi_dma {
-	struct list_head dma_controllers;
-	struct device *dev;
-	struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
-	void *data;
-	short unsigned int base_request_line;
-	short unsigned int end_request_line;
-};
-
-struct acpi_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct acpi_dma_parser_data {
-	struct acpi_dma_spec dma_spec;
-	size_t index;
-	size_t n;
-};
-
-struct of_dma {
-	struct list_head of_dma_controllers;
-	struct device_node *of_node;
-	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
-	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
-	struct dma_router *dma_router;
-	void *of_dma_data;
-};
-
-struct of_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct mv_xor_v2_descriptor {
-	u16 desc_id;
-	u16 flags;
-	u32 crc32_result;
-	u32 desc_ctrl;
-	u32 buff_size;
-	u32 fill_pattern_src_addr[4];
-	u32 data_buff_addr[12];
-	u32 reserved[12];
-};
-
-struct mv_xor_v2_sw_desc;
-
-struct mv_xor_v2_device {
-	spinlock_t lock;
-	void *dma_base;
-	void *glob_base;
-	struct clk *clk;
-	struct clk *reg_clk;
-	struct tasklet_struct irq_tasklet;
-	struct list_head free_sw_desc;
-	struct dma_device dmadev;
-	struct dma_chan dmachan;
-	dma_addr_t hw_desq;
-	struct mv_xor_v2_descriptor *hw_desq_virt;
-	struct mv_xor_v2_sw_desc *sw_desq;
-	int desc_size;
-	unsigned int npendings;
-	unsigned int hw_queue_idx;
-	struct msi_desc *msi_desc;
-};
-
-struct mv_xor_v2_sw_desc {
-	int idx;
-	struct dma_async_tx_descriptor async_tx;
-	struct mv_xor_v2_descriptor hw_desc;
-	struct list_head free_list;
-};
-
-struct bam_desc_hw {
-	__le32 addr;
-	__le16 size;
-	__le16 flags;
-};
-
-struct bam_async_desc {
-	struct virt_dma_desc vd;
-	u32 num_desc;
-	u32 xfer_len;
-	u16 flags;
-	struct bam_desc_hw *curr_desc;
-	struct list_head desc_node;
-	enum dma_transfer_direction dir;
-	size_t length;
-	struct bam_desc_hw desc[0];
-};
-
-enum bam_reg {
-	BAM_CTRL = 0,
-	BAM_REVISION = 1,
-	BAM_NUM_PIPES = 2,
-	BAM_DESC_CNT_TRSHLD = 3,
-	BAM_IRQ_SRCS = 4,
-	BAM_IRQ_SRCS_MSK = 5,
-	BAM_IRQ_SRCS_UNMASKED = 6,
-	BAM_IRQ_STTS = 7,
-	BAM_IRQ_CLR = 8,
-	BAM_IRQ_EN = 9,
-	BAM_CNFG_BITS = 10,
-	BAM_IRQ_SRCS_EE = 11,
-	BAM_IRQ_SRCS_MSK_EE = 12,
-	BAM_P_CTRL = 13,
-	BAM_P_RST = 14,
-	BAM_P_HALT = 15,
-	BAM_P_IRQ_STTS = 16,
-	BAM_P_IRQ_CLR = 17,
-	BAM_P_IRQ_EN = 18,
-	BAM_P_EVNT_DEST_ADDR = 19,
-	BAM_P_EVNT_REG = 20,
-	BAM_P_SW_OFSTS = 21,
-	BAM_P_DATA_FIFO_ADDR = 22,
-	BAM_P_DESC_FIFO_ADDR = 23,
-	BAM_P_EVNT_GEN_TRSHLD = 24,
-	BAM_P_FIFO_SIZES = 25,
-};
-
-struct reg_offset_data {
-	u32 base_offset;
-	unsigned int pipe_mult;
-	unsigned int evnt_mult;
-	unsigned int ee_mult;
-};
-
-struct bam_device;
-
-struct bam_chan {
-	struct virt_dma_chan vc;
-	struct bam_device *bdev;
-	u32 id;
-	struct dma_slave_config slave;
-	struct bam_desc_hw *fifo_virt;
-	dma_addr_t fifo_phys;
-	short unsigned int head;
-	short unsigned int tail;
-	unsigned int initialized;
-	unsigned int paused;
-	unsigned int reconfigure;
-	struct list_head desc_list;
-	struct list_head node;
-};
-
-struct bam_device {
-	void *regs;
-	struct device *dev;
-	struct dma_device common;
-	struct bam_chan *channels;
-	u32 num_channels;
-	u32 num_ees;
-	u32 ee;
-	bool controlled_remotely;
-	const struct reg_offset_data *layout;
-	struct clk *bamclk;
-	int irq;
-	struct tasklet_struct task;
-};
-
-struct bcm2835_pm {
-	struct device *dev;
-	void *base;
-	void *asb;
-};
-
-struct bcm2835_power;
-
-struct bcm2835_power_domain {
-	struct generic_pm_domain base;
-	struct bcm2835_power *power;
-	u32 domain;
-	struct clk *clk;
-};
-
-struct bcm2835_power {
-	struct device *dev;
-	void *base;
-	void *asb;
-	struct genpd_onecell_data pd_xlate;
-	struct bcm2835_power_domain domains[13];
-	struct reset_controller_dev reset;
-};
-
-struct rpi_power_domain {
-	u32 domain;
-	bool enabled;
-	bool old_interface;
-	struct generic_pm_domain base;
-	struct rpi_firmware *fw;
-};
-
-struct rpi_power_domains {
-	bool has_new_interface;
-	struct genpd_onecell_data xlate;
-	struct rpi_firmware *fw;
-	struct rpi_power_domain domains[23];
-};
-
-struct rpi_power_domain_packet {
-	u32 domain;
-	u32 on;
-};
-
-struct soc_device_attribute {
-	const char *machine;
-	const char *family;
-	const char *revision;
-	const char *serial_number;
-	const char *soc_id;
-	const void *data;
-	const struct attribute_group *custom_attr_group;
-};
-
-struct soc_device;
-
-enum cpubiuctrl_regs {
-	CPU_CREDIT_REG = 0,
-	CPU_MCP_FLOW_REG = 1,
-	CPU_WRITEBACK_CTRL_REG = 2,
-	RAC_CONFIG0_REG = 3,
-	RAC_CONFIG1_REG = 4,
-	NUM_CPU_BIUCTRL_REGS = 5,
-};
-
-enum mtk_ddp_comp_id {
-	DDP_COMPONENT_AAL0 = 0,
-	DDP_COMPONENT_AAL1 = 1,
-	DDP_COMPONENT_BLS = 2,
-	DDP_COMPONENT_CCORR = 3,
-	DDP_COMPONENT_COLOR0 = 4,
-	DDP_COMPONENT_COLOR1 = 5,
-	DDP_COMPONENT_DITHER = 6,
-	DDP_COMPONENT_DPI0 = 7,
-	DDP_COMPONENT_DPI1 = 8,
-	DDP_COMPONENT_DSI0 = 9,
-	DDP_COMPONENT_DSI1 = 10,
-	DDP_COMPONENT_DSI2 = 11,
-	DDP_COMPONENT_DSI3 = 12,
-	DDP_COMPONENT_GAMMA = 13,
-	DDP_COMPONENT_OD0 = 14,
-	DDP_COMPONENT_OD1 = 15,
-	DDP_COMPONENT_OVL0 = 16,
-	DDP_COMPONENT_OVL_2L0 = 17,
-	DDP_COMPONENT_OVL_2L1 = 18,
-	DDP_COMPONENT_OVL1 = 19,
-	DDP_COMPONENT_PWM0 = 20,
-	DDP_COMPONENT_PWM1 = 21,
-	DDP_COMPONENT_PWM2 = 22,
-	DDP_COMPONENT_RDMA0 = 23,
-	DDP_COMPONENT_RDMA1 = 24,
-	DDP_COMPONENT_RDMA2 = 25,
-	DDP_COMPONENT_UFOE = 26,
-	DDP_COMPONENT_WDMA0 = 27,
-	DDP_COMPONENT_WDMA1 = 28,
-	DDP_COMPONENT_ID_MAX = 29,
-};
-
-struct mtk_mmsys_driver_data {
-	const char *clk_driver;
-};
-
-struct meson_msr;
-
-struct meson_msr_id {
-	struct meson_msr *priv;
-	unsigned int id;
-	const char *name;
-};
-
-struct meson_msr {
-	struct regmap *regmap;
-	struct meson_msr_id msr_table[128];
-};
-
-struct meson_gx_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-struct meson_gx_package_id {
-	const char *name;
-	unsigned int major_id;
-	unsigned int pack_id;
-	unsigned int pack_mask;
-};
-
-struct meson_gx_pwrc_vpu {
-	struct generic_pm_domain genpd;
-	struct regmap *regmap_ao;
-	struct regmap *regmap_hhi;
-	struct reset_control *rstc;
-	struct clk *vpu_clk;
-	struct clk *vapb_clk;
-};
-
-struct meson_ee_pwrc_mem_domain {
-	unsigned int reg;
-	unsigned int mask;
-};
-
-struct meson_ee_pwrc_top_domain {
-	unsigned int sleep_reg;
-	unsigned int sleep_mask;
-	unsigned int iso_reg;
-	unsigned int iso_mask;
-};
-
-struct meson_ee_pwrc_domain;
-
-struct meson_ee_pwrc_domain_desc {
-	char *name;
-	unsigned int reset_names_count;
-	unsigned int clk_names_count;
-	struct meson_ee_pwrc_top_domain *top_pd;
-	unsigned int mem_pd_count;
-	struct meson_ee_pwrc_mem_domain *mem_pd;
-	bool (*get_power)(struct meson_ee_pwrc_domain *);
-};
-
-struct meson_ee_pwrc;
-
-struct meson_ee_pwrc_domain {
-	struct generic_pm_domain base;
-	bool enabled;
-	struct meson_ee_pwrc *pwrc;
-	struct meson_ee_pwrc_domain_desc desc;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	struct reset_control *rstc;
-	int num_rstc;
-};
-
-struct meson_ee_pwrc_domain_data {
-	unsigned int count;
-	struct meson_ee_pwrc_domain_desc *domains;
-};
-
-struct meson_ee_pwrc {
-	struct regmap *regmap_ao;
-	struct regmap *regmap_hhi;
-	struct meson_ee_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-};
-
-enum {
-	SM_EFUSE_READ = 0,
-	SM_EFUSE_WRITE = 1,
-	SM_EFUSE_USER_MAX = 2,
-	SM_GET_CHIP_ID = 3,
-	SM_A1_PWRC_SET = 4,
-	SM_A1_PWRC_GET = 5,
-};
-
-struct meson_secure_pwrc;
-
-struct meson_secure_pwrc_domain {
-	struct generic_pm_domain base;
-	unsigned int index;
-	struct meson_secure_pwrc *pwrc;
-};
-
-struct meson_sm_firmware;
-
-struct meson_secure_pwrc {
-	struct meson_secure_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-	struct meson_sm_firmware *fw;
-};
-
-struct meson_secure_pwrc_domain_desc {
-	unsigned int index;
-	unsigned int flags;
-	char *name;
-	bool (*is_off)(struct meson_secure_pwrc_domain *);
-};
-
-struct meson_secure_pwrc_domain_data {
-	unsigned int count;
-	struct meson_secure_pwrc_domain_desc *domains;
-};
-
-enum cmd_db_hw_type {
-	CMD_DB_HW_INVALID = 0,
-	CMD_DB_HW_MIN = 3,
-	CMD_DB_HW_ARC = 3,
-	CMD_DB_HW_VRM = 4,
-	CMD_DB_HW_BCM = 5,
-	CMD_DB_HW_MAX = 5,
-	CMD_DB_HW_ALL = 255,
-};
-
-struct entry_header {
-	u8 id[8];
-	__le32 priority[2];
-	__le32 addr;
-	__le16 len;
-	__le16 offset;
-};
-
-struct rsc_hdr {
-	__le16 slv_id;
-	__le16 header_offset;
-	__le16 data_offset;
-	__le16 cnt;
-	__le16 version;
-	__le16 reserved[3];
-};
-
-struct cmd_db_header {
-	__le32 version;
-	u8 magic[4];
-	struct rsc_hdr header[8];
-	__le32 checksum;
-	__le32 reserved;
-	u8 data[0];
-};
-
-struct smem_proc_comm {
-	__le32 command;
-	__le32 status;
-	__le32 params[2];
-};
-
-struct smem_global_entry {
-	__le32 allocated;
-	__le32 offset;
-	__le32 size;
-	__le32 aux_base;
-};
-
-struct smem_header {
-	struct smem_proc_comm proc_comm[4];
-	__le32 version[32];
-	__le32 initialized;
-	__le32 free_offset;
-	__le32 available;
-	__le32 reserved;
-	struct smem_global_entry toc[512];
-};
-
-struct smem_ptable_entry {
-	__le32 offset;
-	__le32 size;
-	__le32 flags;
-	__le16 host0;
-	__le16 host1;
-	__le32 cacheline;
-	__le32 reserved[7];
-};
-
-struct smem_ptable {
-	u8 magic[4];
-	__le32 version;
-	__le32 num_entries;
-	__le32 reserved[5];
-	struct smem_ptable_entry entry[0];
-};
-
-struct smem_partition_header {
-	u8 magic[4];
-	__le16 host0;
-	__le16 host1;
-	__le32 size;
-	__le32 offset_free_uncached;
-	__le32 offset_free_cached;
-	__le32 reserved[3];
-};
-
-struct smem_private_entry {
-	u16 canary;
-	__le16 item;
-	__le32 size;
-	__le16 padding_data;
-	__le16 padding_hdr;
-	__le32 reserved;
-};
-
-struct smem_info {
-	u8 magic[4];
-	__le32 size;
-	__le32 base_addr;
-	__le32 reserved;
-	__le16 num_items;
-};
-
-struct smem_region {
-	u32 aux_base;
-	void *virt_base;
-	size_t size;
-};
-
-struct hwspinlock;
-
-struct qcom_smem {
-	struct device *dev;
-	struct hwspinlock *hwlock;
-	struct smem_partition_header *global_partition;
-	size_t global_cacheline;
-	struct smem_partition_header *partitions[11];
-	size_t cacheline[11];
-	u32 item_count;
-	struct platform_device *socinfo;
-	unsigned int num_regions;
-	struct smem_region regions[0];
-};
-
-struct rockchip_grf_value {
-	const char *desc;
-	u32 reg;
-	u32 val;
-};
-
-struct rockchip_grf_info {
-	const struct rockchip_grf_value *values;
-	int num_values;
-};
-
-struct rockchip_domain_info {
-	int pwr_mask;
-	int status_mask;
-	int req_mask;
-	int idle_mask;
-	int ack_mask;
-	bool active_wakeup;
-	int pwr_w_mask;
-	int req_w_mask;
-};
-
-struct rockchip_pmu_info {
-	u32 pwr_offset;
-	u32 status_offset;
-	u32 req_offset;
-	u32 idle_offset;
-	u32 ack_offset;
-	u32 core_pwrcnt_offset;
-	u32 gpu_pwrcnt_offset;
-	unsigned int core_power_transition_time;
-	unsigned int gpu_power_transition_time;
-	int num_domains;
-	const struct rockchip_domain_info *domain_info;
-};
-
-struct rockchip_pmu;
-
-struct rockchip_pm_domain {
-	struct generic_pm_domain genpd;
-	const struct rockchip_domain_info *info;
-	struct rockchip_pmu *pmu;
-	int num_qos;
-	struct regmap **qos_regmap;
-	u32 *qos_save_regs[5];
-	int num_clks;
-	struct clk_bulk_data *clks;
-};
-
-struct rockchip_pmu {
-	struct device *dev;
-	struct regmap *regmap;
-	const struct rockchip_pmu_info *info;
-	struct mutex mutex;
-	struct genpd_onecell_data genpd_data;
-	struct generic_pm_domain *domains[0];
-};
-
-struct exynos_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-enum sys_powerdown {
-	SYS_AFTR = 0,
-	SYS_LPA = 1,
-	SYS_SLEEP = 2,
-	NUM_SYS_POWERDOWN = 3,
-};
-
-struct exynos_pmu_conf {
-	unsigned int offset;
-	u8 val[3];
-};
-
-struct exynos_pmu_data {
-	const struct exynos_pmu_conf *pmu_config;
-	void (*pmu_init)();
-	void (*powerdown_conf)(enum sys_powerdown);
-	void (*powerdown_conf_extra)(enum sys_powerdown);
-};
-
-struct exynos_pmu_context {
-	struct device *dev;
-	const struct exynos_pmu_data *pmu_data;
-};
-
-struct exynos_pm_domain_config {
-	u32 local_pwr_cfg;
-};
-
-struct exynos_pm_domain {
-	void *base;
-	bool is_off;
-	struct generic_pm_domain pd;
-	u32 local_pwr_cfg;
-};
-
-struct sunxi_sram_func {
-	char *func;
-	u8 val;
-	u32 reg_val;
-};
-
-struct sunxi_sram_data {
-	char *name;
-	u8 reg;
-	u8 offset;
-	u8 width;
-	struct sunxi_sram_func *func;
-	struct list_head list;
-};
-
-struct sunxi_sram_desc {
-	struct sunxi_sram_data data;
-	bool claimed;
-};
-
-struct sunxi_sramc_variant {
-	bool has_emac_clock;
-};
-
-struct nvmem_cell_info {
-	const char *name;
-	unsigned int offset;
-	unsigned int bytes;
-	unsigned int bit_offset;
-	unsigned int nbits;
-};
-
-struct nvmem_cell_lookup {
-	const char *nvmem_name;
-	const char *cell_name;
-	const char *dev_id;
-	const char *con_id;
-	struct list_head node;
-};
-
-typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
-
-typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
-
-enum nvmem_type {
-	NVMEM_TYPE_UNKNOWN = 0,
-	NVMEM_TYPE_EEPROM = 1,
-	NVMEM_TYPE_OTP = 2,
-	NVMEM_TYPE_BATTERY_BACKED = 3,
-};
-
-struct nvmem_config {
-	struct device *dev;
-	const char *name;
-	int id;
-	struct module *owner;
-	struct gpio_desc *wp_gpio;
-	const struct nvmem_cell_info *cells;
-	int ncells;
-	enum nvmem_type type;
-	bool read_only;
-	bool root_only;
-	bool no_of_node;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	int size;
-	int word_size;
-	int stride;
-	void *priv;
-	bool compat;
-	struct device *base_dev;
-};
-
-struct tegra_fuse;
-
-struct tegra_fuse_info {
-	u32 (*read)(struct tegra_fuse *, unsigned int);
-	unsigned int size;
-	unsigned int spare;
-};
-
-struct nvmem_device;
-
-struct tegra_fuse_soc;
-
-struct tegra_fuse {
-	struct device *dev;
-	void *base;
-	phys_addr_t phys;
-	struct clk *clk;
-	u32 (*read_early)(struct tegra_fuse *, unsigned int);
-	u32 (*read)(struct tegra_fuse *, unsigned int);
-	const struct tegra_fuse_soc *soc;
-	struct {
-		struct mutex lock;
-		struct completion wait;
-		struct dma_chan *chan;
-		struct dma_slave_config config;
-		dma_addr_t phys;
-		u32 *virt;
-	} apbdma;
-	struct nvmem_device *nvmem;
-	struct nvmem_cell_lookup *lookups;
-};
-
-struct tegra_fuse_soc {
-	void (*init)(struct tegra_fuse *);
-	void (*speedo_init)(struct tegra_sku_info *);
-	int (*probe)(struct tegra_fuse *);
-	const struct tegra_fuse_info *info;
-	const struct nvmem_cell_lookup *lookups;
-	unsigned int num_lookups;
-	const struct attribute_group *soc_attr_group;
-};
-
-enum {
-	THRESHOLD_INDEX_0 = 0,
-	THRESHOLD_INDEX_1 = 1,
-	THRESHOLD_INDEX_COUNT = 2,
-};
-
-enum tegra_suspend_mode {
-	TEGRA_SUSPEND_NONE = 0,
-	TEGRA_SUSPEND_LP2 = 1,
-	TEGRA_SUSPEND_LP1 = 2,
-	TEGRA_SUSPEND_LP0 = 3,
-	TEGRA_MAX_SUSPEND_MODE = 4,
-};
-
-enum tegra_io_pad {
-	TEGRA_IO_PAD_AUDIO = 0,
-	TEGRA_IO_PAD_AUDIO_HV = 1,
-	TEGRA_IO_PAD_BB = 2,
-	TEGRA_IO_PAD_CAM = 3,
-	TEGRA_IO_PAD_COMP = 4,
-	TEGRA_IO_PAD_CONN = 5,
-	TEGRA_IO_PAD_CSIA = 6,
-	TEGRA_IO_PAD_CSIB = 7,
-	TEGRA_IO_PAD_CSIC = 8,
-	TEGRA_IO_PAD_CSID = 9,
-	TEGRA_IO_PAD_CSIE = 10,
-	TEGRA_IO_PAD_CSIF = 11,
-	TEGRA_IO_PAD_CSIG = 12,
-	TEGRA_IO_PAD_CSIH = 13,
-	TEGRA_IO_PAD_DAP3 = 14,
-	TEGRA_IO_PAD_DAP5 = 15,
-	TEGRA_IO_PAD_DBG = 16,
-	TEGRA_IO_PAD_DEBUG_NONAO = 17,
-	TEGRA_IO_PAD_DMIC = 18,
-	TEGRA_IO_PAD_DMIC_HV = 19,
-	TEGRA_IO_PAD_DP = 20,
-	TEGRA_IO_PAD_DSI = 21,
-	TEGRA_IO_PAD_DSIB = 22,
-	TEGRA_IO_PAD_DSIC = 23,
-	TEGRA_IO_PAD_DSID = 24,
-	TEGRA_IO_PAD_EDP = 25,
-	TEGRA_IO_PAD_EMMC = 26,
-	TEGRA_IO_PAD_EMMC2 = 27,
-	TEGRA_IO_PAD_EQOS = 28,
-	TEGRA_IO_PAD_GPIO = 29,
-	TEGRA_IO_PAD_GP_PWM2 = 30,
-	TEGRA_IO_PAD_GP_PWM3 = 31,
-	TEGRA_IO_PAD_HDMI = 32,
-	TEGRA_IO_PAD_HDMI_DP0 = 33,
-	TEGRA_IO_PAD_HDMI_DP1 = 34,
-	TEGRA_IO_PAD_HDMI_DP2 = 35,
-	TEGRA_IO_PAD_HDMI_DP3 = 36,
-	TEGRA_IO_PAD_HSIC = 37,
-	TEGRA_IO_PAD_HV = 38,
-	TEGRA_IO_PAD_LVDS = 39,
-	TEGRA_IO_PAD_MIPI_BIAS = 40,
-	TEGRA_IO_PAD_NAND = 41,
-	TEGRA_IO_PAD_PEX_BIAS = 42,
-	TEGRA_IO_PAD_PEX_CLK_BIAS = 43,
-	TEGRA_IO_PAD_PEX_CLK1 = 44,
-	TEGRA_IO_PAD_PEX_CLK2 = 45,
-	TEGRA_IO_PAD_PEX_CLK3 = 46,
-	TEGRA_IO_PAD_PEX_CLK_2_BIAS = 47,
-	TEGRA_IO_PAD_PEX_CLK_2 = 48,
-	TEGRA_IO_PAD_PEX_CNTRL = 49,
-	TEGRA_IO_PAD_PEX_CTL2 = 50,
-	TEGRA_IO_PAD_PEX_L0_RST_N = 51,
-	TEGRA_IO_PAD_PEX_L1_RST_N = 52,
-	TEGRA_IO_PAD_PEX_L5_RST_N = 53,
-	TEGRA_IO_PAD_PWR_CTL = 54,
-	TEGRA_IO_PAD_SDMMC1 = 55,
-	TEGRA_IO_PAD_SDMMC1_HV = 56,
-	TEGRA_IO_PAD_SDMMC2 = 57,
-	TEGRA_IO_PAD_SDMMC2_HV = 58,
-	TEGRA_IO_PAD_SDMMC3 = 59,
-	TEGRA_IO_PAD_SDMMC3_HV = 60,
-	TEGRA_IO_PAD_SDMMC4 = 61,
-	TEGRA_IO_PAD_SOC_GPIO10 = 62,
-	TEGRA_IO_PAD_SOC_GPIO12 = 63,
-	TEGRA_IO_PAD_SOC_GPIO13 = 64,
-	TEGRA_IO_PAD_SOC_GPIO53 = 65,
-	TEGRA_IO_PAD_SPI = 66,
-	TEGRA_IO_PAD_SPI_HV = 67,
-	TEGRA_IO_PAD_SYS_DDC = 68,
-	TEGRA_IO_PAD_UART = 69,
-	TEGRA_IO_PAD_UART4 = 70,
-	TEGRA_IO_PAD_UART5 = 71,
-	TEGRA_IO_PAD_UFS = 72,
-	TEGRA_IO_PAD_USB0 = 73,
-	TEGRA_IO_PAD_USB1 = 74,
-	TEGRA_IO_PAD_USB2 = 75,
-	TEGRA_IO_PAD_USB3 = 76,
-	TEGRA_IO_PAD_USB_BIAS = 77,
-	TEGRA_IO_PAD_AO_HV = 78,
-};
-
-struct pmc_clk {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 mux_shift;
-	u32 force_en_shift;
-};
-
-struct pmc_clk_gate {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 shift;
-};
-
-struct pmc_clk_init_data {
-	char *name;
-	const char * const *parents;
-	int num_parents;
-	int clk_id;
-	u8 mux_shift;
-	u8 force_en_shift;
-};
-
-struct tegra_pmc;
-
-struct tegra_powergate {
-	struct generic_pm_domain genpd;
-	struct tegra_pmc *pmc;
-	unsigned int id;
-	struct clk **clks;
-	unsigned int num_clks;
-	struct reset_control *reset;
-};
-
-struct tegra_pmc_soc;
-
-struct tegra_pmc {
-	struct device *dev;
-	void *base;
-	void *wake;
-	void *aotag;
-	void *scratch;
-	struct clk *clk;
-	struct dentry *debugfs;
-	const struct tegra_pmc_soc *soc;
-	bool tz_only;
-	long unsigned int rate;
-	enum tegra_suspend_mode suspend_mode;
-	u32 cpu_good_time;
-	u32 cpu_off_time;
-	u32 core_osc_time;
-	u32 core_pmu_time;
-	u32 core_off_time;
-	bool corereq_high;
-	bool sysclkreq_high;
-	bool combined_req;
-	bool cpu_pwr_good_en;
-	u32 lp0_vec_phys;
-	u32 lp0_vec_size;
-	long unsigned int powergates_available[1];
-	struct mutex powergates_lock;
-	struct pinctrl_dev *pctl_dev;
-	struct irq_domain *domain;
-	struct irq_chip irq;
-	struct notifier_block clk_nb;
-};
-
-struct tegra_io_pad_soc {
-	enum tegra_io_pad id;
-	unsigned int dpd;
-	unsigned int voltage;
-	const char *name;
-};
-
-struct tegra_pmc_regs {
-	unsigned int scratch0;
-	unsigned int dpd_req;
-	unsigned int dpd_status;
-	unsigned int dpd2_req;
-	unsigned int dpd2_status;
-	unsigned int rst_status;
-	unsigned int rst_source_shift;
-	unsigned int rst_source_mask;
-	unsigned int rst_level_shift;
-	unsigned int rst_level_mask;
-};
-
-struct tegra_wake_event {
-	const char *name;
-	unsigned int id;
-	unsigned int irq;
-	struct {
-		unsigned int instance;
-		unsigned int pin;
-	} gpio;
-};
-
-struct tegra_pmc_soc {
-	unsigned int num_powergates;
-	const char * const *powergates;
-	unsigned int num_cpu_powergates;
-	const u8 *cpu_powergates;
-	bool has_tsense_reset;
-	bool has_gpu_clamps;
-	bool needs_mbist_war;
-	bool has_impl_33v_pwr;
-	bool maybe_tz_only;
-	const struct tegra_io_pad_soc *io_pads;
-	unsigned int num_io_pads;
-	const struct pinctrl_pin_desc *pin_descs;
-	unsigned int num_pin_descs;
-	const struct tegra_pmc_regs *regs;
-	void (*init)(struct tegra_pmc *);
-	void (*setup_irq_polarity)(struct tegra_pmc *, struct device_node *, bool);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	const char * const *reset_sources;
-	unsigned int num_reset_sources;
-	const char * const *reset_levels;
-	unsigned int num_reset_levels;
-	const struct tegra_wake_event *wake_events;
-	unsigned int num_wake_events;
-	const struct pmc_clk_init_data *pmc_clks_data;
-	unsigned int num_pmc_clks;
-	bool has_blink_output;
-};
-
-enum mrq_pg_cmd {
-	CMD_PG_QUERY_ABI = 0,
-	CMD_PG_SET_STATE = 1,
-	CMD_PG_GET_STATE = 2,
-	CMD_PG_GET_NAME = 3,
-	CMD_PG_GET_MAX_ID = 4,
-};
-
-enum pg_states {
-	PG_STATE_OFF = 0,
-	PG_STATE_ON = 1,
-	PG_STATE_RUNNING = 2,
-};
-
-struct cmd_pg_query_abi_request {
-	uint32_t type;
-};
-
-struct cmd_pg_set_state_request {
-	uint32_t state;
-};
-
-struct cmd_pg_get_state_response {
-	uint32_t state;
-};
-
-struct cmd_pg_get_name_response {
-	uint8_t name[40];
-};
-
-struct cmd_pg_get_max_id_response {
-	uint32_t max_id;
-};
-
-struct mrq_pg_request {
-	uint32_t cmd;
-	uint32_t id;
-	union {
-		struct cmd_pg_query_abi_request query_abi;
-		struct cmd_pg_set_state_request set_state;
-	};
-};
-
-struct mrq_pg_response {
-	union {
-		struct cmd_pg_get_state_response get_state;
-		struct cmd_pg_get_name_response get_name;
-		struct cmd_pg_get_max_id_response get_max_id;
-	};
-};
-
-struct tegra_powergate_info {
-	unsigned int id;
-	char *name;
-};
-
-struct tegra_powergate___2 {
-	struct generic_pm_domain genpd;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-};
-
-typedef struct {
-	union {
-		xen_pfn_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_pfn_t;
-
-struct grant_entry_v1 {
-	uint16_t flags;
-	domid_t domid;
-	uint32_t frame;
-};
-
-struct grant_entry_header {
-	uint16_t flags;
-	domid_t domid;
-};
-
-union grant_entry_v2 {
-	struct grant_entry_header hdr;
-	struct {
-		struct grant_entry_header hdr;
-		uint32_t pad0;
-		uint64_t frame;
-	} full_page;
-	struct {
-		struct grant_entry_header hdr;
-		uint16_t page_off;
-		uint16_t length;
-		uint64_t frame;
-	} sub_page;
-	struct {
-		struct grant_entry_header hdr;
-		domid_t trans_domid;
-		uint16_t pad0;
-		grant_ref_t gref;
-	} transitive;
-	uint32_t __spacer[4];
-};
-
-struct gnttab_setup_table {
-	domid_t dom;
-	uint32_t nr_frames;
-	int16_t status;
-	__guest_handle_xen_pfn_t frame_list;
-};
-
-struct gnttab_copy {
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} source;
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} dest;
-	uint16_t len;
-	uint16_t flags;
-	int16_t status;
-};
-
-struct gnttab_query_size {
-	domid_t dom;
-	uint32_t nr_frames;
-	uint32_t max_nr_frames;
-	int16_t status;
-};
-
-struct gnttab_set_version {
-	uint32_t version;
-};
-
-struct gnttab_get_status_frames {
-	uint32_t nr_frames;
-	domid_t dom;
-	int16_t status;
-	__guest_handle_uint64_t frame_list;
-};
-
-struct gnttab_free_callback {
-	struct gnttab_free_callback *next;
-	void (*fn)(void *);
-	void *arg;
-	u16 count;
-};
-
-struct gntab_unmap_queue_data;
-
-typedef void (*gnttab_unmap_refs_done)(int, struct gntab_unmap_queue_data *);
-
-struct gntab_unmap_queue_data {
-	struct delayed_work gnttab_work;
-	void *data;
-	gnttab_unmap_refs_done done;
-	struct gnttab_unmap_grant_ref *unmap_ops;
-	struct gnttab_unmap_grant_ref *kunmap_ops;
-	struct page **pages;
-	unsigned int count;
-	unsigned int age;
-};
-
-struct gnttab_page_cache {
-	spinlock_t lock;
-	struct list_head pages;
-	unsigned int num_pages;
-};
-
-struct xen_page_foreign {
-	domid_t domid;
-	grant_ref_t gref;
-};
-
-typedef void (*xen_grant_fn_t)(long unsigned int, unsigned int, unsigned int, void *);
-
-struct gnttab_ops {
-	unsigned int version;
-	unsigned int grefs_per_grant_frame;
-	int (*map_frames)(xen_pfn_t *, unsigned int);
-	void (*unmap_frames)();
-	void (*update_entry)(grant_ref_t, domid_t, long unsigned int, unsigned int);
-	int (*end_foreign_access_ref)(grant_ref_t, int);
-	long unsigned int (*end_foreign_transfer_ref)(grant_ref_t);
-	int (*query_foreign_access)(grant_ref_t);
-};
-
-struct unmap_refs_callback_data {
-	struct completion completion;
-	int result;
-};
-
-struct deferred_entry {
-	struct list_head list;
-	grant_ref_t ref;
-	bool ro;
-	uint16_t warn_delay;
-	struct page *page;
-};
-
-struct xen_feature_info {
-	unsigned int submap_idx;
-	uint32_t submap;
-};
-
-struct balloon_stats {
-	long unsigned int current_pages;
-	long unsigned int target_pages;
-	long unsigned int target_unpopulated;
-	long unsigned int balloon_low;
-	long unsigned int balloon_high;
-	long unsigned int total_pages;
-	long unsigned int schedule_delay;
-	long unsigned int max_schedule_delay;
-	long unsigned int retry_count;
-	long unsigned int max_retry_count;
-};
-
-enum bp_state {
-	BP_DONE = 0,
-	BP_WAIT = 1,
-	BP_EAGAIN = 2,
-	BP_ECANCELED = 3,
-};
-
-enum shutdown_state {
-	SHUTDOWN_INVALID = 4294967295,
-	SHUTDOWN_POWEROFF = 0,
-	SHUTDOWN_SUSPEND = 2,
-	SHUTDOWN_HALT = 4,
-};
-
-struct suspend_info {
-	int cancelled;
-};
-
-struct shutdown_handler {
-	const char command[11];
-	bool flag;
-	void (*cb)();
-};
-
-struct vcpu_runstate_info {
-	int state;
-	uint64_t state_entry_time;
-	uint64_t time[4];
-};
-
-typedef struct {
-	union {
-		struct vcpu_runstate_info *p;
-		uint64_t q;
-	};
-} __guest_handle_vcpu_runstate_info;
-
-struct vcpu_register_runstate_memory_area {
-	union {
-		__guest_handle_vcpu_runstate_info h;
-		struct vcpu_runstate_info *v;
-		uint64_t p;
-	} addr;
-};
-
-struct xen_memory_reservation {
-	__guest_handle_xen_pfn_t extent_start;
-	xen_ulong_t nr_extents;
-	unsigned int extent_order;
-	unsigned int address_bits;
-	domid_t domid;
-};
-
-typedef uint32_t evtchn_port_t;
-
-typedef struct {
-	union {
-		evtchn_port_t *p;
-		uint64_t q;
-	};
-} __guest_handle_evtchn_port_t;
-
-struct evtchn_bind_interdomain {
-	domid_t remote_dom;
-	evtchn_port_t remote_port;
-	evtchn_port_t local_port;
-};
-
-struct evtchn_bind_virq {
-	uint32_t virq;
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_pirq {
-	uint32_t pirq;
-	uint32_t flags;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_ipi {
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_close {
-	evtchn_port_t port;
-};
-
-struct evtchn_send {
-	evtchn_port_t port;
-};
-
-struct evtchn_status {
-	domid_t dom;
-	evtchn_port_t port;
-	uint32_t status;
-	uint32_t vcpu;
-	union {
-		struct {
-			domid_t dom;
-		} unbound;
-		struct {
-			domid_t dom;
-			evtchn_port_t port;
-		} interdomain;
-		uint32_t pirq;
-		uint32_t virq;
-	} u;
-};
-
-struct evtchn_bind_vcpu {
-	evtchn_port_t port;
-	uint32_t vcpu;
-};
-
-struct evtchn_set_priority {
-	evtchn_port_t port;
-	uint32_t priority;
-};
-
-struct sched_poll {
-	__guest_handle_evtchn_port_t ports;
-	unsigned int nr_ports;
-	uint64_t timeout;
-};
-
-enum ipi_vector {
-	XEN_PLACEHOLDER_VECTOR = 0,
-	XEN_NR_IPIS = 1,
-};
-
-struct physdev_eoi {
-	uint32_t irq;
-};
-
-struct physdev_irq_status_query {
-	uint32_t irq;
-	uint32_t flags;
-};
-
-struct physdev_irq {
-	uint32_t irq;
-	uint32_t vector;
-};
-
-struct physdev_map_pirq {
-	domid_t domid;
-	int type;
-	int index;
-	int pirq;
-	int bus;
-	int devfn;
-	int entry_nr;
-	uint64_t table_base;
-};
-
-struct physdev_unmap_pirq {
-	domid_t domid;
-	int pirq;
-};
-
-struct physdev_get_free_pirq {
-	int type;
-	uint32_t pirq;
-};
-
-struct evtchn_loop_ctrl;
-
-struct evtchn_ops {
-	unsigned int (*max_channels)();
-	unsigned int (*nr_channels)();
-	int (*setup)(evtchn_port_t);
-	void (*bind_to_cpu)(evtchn_port_t, unsigned int, unsigned int);
-	void (*clear_pending)(evtchn_port_t);
-	void (*set_pending)(evtchn_port_t);
-	bool (*is_pending)(evtchn_port_t);
-	bool (*test_and_set_mask)(evtchn_port_t);
-	void (*mask)(evtchn_port_t);
-	void (*unmask)(evtchn_port_t);
-	void (*handle_events)(unsigned int, struct evtchn_loop_ctrl *);
-	void (*resume)();
-	int (*percpu_init)(unsigned int);
-	int (*percpu_deinit)(unsigned int);
-};
-
-struct evtchn_loop_ctrl {
-	ktime_t timeout;
-	unsigned int count;
-	bool defer_eoi;
-};
-
-enum xen_irq_type {
-	IRQT_UNBOUND = 0,
-	IRQT_PIRQ = 1,
-	IRQT_VIRQ = 2,
-	IRQT_IPI = 3,
-	IRQT_EVTCHN = 4,
-};
-
-struct irq_info {
-	struct list_head list;
-	struct list_head eoi_list;
-	short int refcnt;
-	short int spurious_cnt;
-	enum xen_irq_type type;
-	unsigned int irq;
-	evtchn_port_t evtchn;
-	short unsigned int cpu;
-	short unsigned int eoi_cpu;
-	unsigned int irq_epoch;
-	u64 eoi_time;
-	union {
-		short unsigned int virq;
-		enum ipi_vector ipi;
-		struct {
-			short unsigned int pirq;
-			short unsigned int gsi;
-			unsigned char vector;
-			unsigned char flags;
-			uint16_t domid;
-		} pirq;
-	} u;
-};
-
-struct lateeoi_work {
-	struct delayed_work delayed;
-	spinlock_t eoi_list_lock;
-	struct list_head eoi_list;
-};
-
-struct evtchn_unmask {
-	evtchn_port_t port;
-};
-
-struct evtchn_init_control {
-	uint64_t control_gfn;
-	uint32_t offset;
-	uint32_t vcpu;
-	uint8_t link_bits;
-	uint8_t _pad[7];
-};
-
-struct evtchn_expand_array {
-	uint64_t array_gfn;
-};
-
-typedef uint32_t event_word_t;
-
-struct evtchn_fifo_control_block {
-	uint32_t ready;
-	uint32_t _rsvd;
-	event_word_t head[16];
-};
-
-struct evtchn_fifo_queue {
-	uint32_t head[16];
-};
-
-struct evtchn_alloc_unbound {
-	domid_t dom;
-	domid_t remote_dom;
-	evtchn_port_t port;
-};
-
-struct xenbus_map_node {
-	struct list_head next;
-	union {
-		struct {
-			struct vm_struct *area;
-		} pv;
-		struct {
-			struct page *pages[16];
-			long unsigned int addrs[16];
-			void *addr;
-		} hvm;
-	};
-	grant_handle_t handles[16];
-	unsigned int nr_handles;
-};
-
-struct map_ring_valloc {
-	struct xenbus_map_node *node;
-	long unsigned int addrs[16];
-	phys_addr_t phys_addrs[16];
-	struct gnttab_map_grant_ref map[16];
-	struct gnttab_unmap_grant_ref unmap[16];
-	unsigned int idx;
-};
-
-struct xenbus_ring_ops {
-	int (*map)(struct xenbus_device *, struct map_ring_valloc *, grant_ref_t *, unsigned int, void **);
-	int (*unmap)(struct xenbus_device *, void *);
-};
-
-struct unmap_ring_hvm {
-	unsigned int idx;
-	long unsigned int addrs[16];
-};
-
-enum xsd_sockmsg_type {
-	XS_DEBUG = 0,
-	XS_DIRECTORY = 1,
-	XS_READ = 2,
-	XS_GET_PERMS = 3,
-	XS_WATCH = 4,
-	XS_UNWATCH = 5,
-	XS_TRANSACTION_START = 6,
-	XS_TRANSACTION_END = 7,
-	XS_INTRODUCE = 8,
-	XS_RELEASE = 9,
-	XS_GET_DOMAIN_PATH = 10,
-	XS_WRITE = 11,
-	XS_MKDIR = 12,
-	XS_RM = 13,
-	XS_SET_PERMS = 14,
-	XS_WATCH_EVENT = 15,
-	XS_ERROR = 16,
-	XS_IS_DOMAIN_INTRODUCED = 17,
-	XS_RESUME = 18,
-	XS_SET_TARGET = 19,
-	XS_RESTRICT = 20,
-	XS_RESET_WATCHES = 21,
-};
-
-struct xsd_sockmsg {
-	uint32_t type;
-	uint32_t req_id;
-	uint32_t tx_id;
-	uint32_t len;
-};
-
-typedef uint32_t XENSTORE_RING_IDX;
-
-struct xenstore_domain_interface {
-	char req[1024];
-	char rsp[1024];
-	XENSTORE_RING_IDX req_cons;
-	XENSTORE_RING_IDX req_prod;
-	XENSTORE_RING_IDX rsp_cons;
-	XENSTORE_RING_IDX rsp_prod;
-};
-
-struct xs_watch_event {
-	struct list_head list;
-	unsigned int len;
-	struct xenbus_watch *handle;
-	const char *path;
-	const char *token;
-	char body[0];
-};
-
-enum xb_req_state {
-	xb_req_state_queued = 0,
-	xb_req_state_wait_reply = 1,
-	xb_req_state_got_reply = 2,
-	xb_req_state_aborted = 3,
-};
-
-struct xb_req_data {
-	struct list_head list;
-	wait_queue_head_t wq;
-	struct xsd_sockmsg msg;
-	uint32_t caller_req_id;
-	enum xsd_sockmsg_type type;
-	char *body;
-	const struct kvec *vec;
-	int num_vecs;
-	int err;
-	enum xb_req_state state;
-	bool user_req;
-	void (*cb)(struct xb_req_data *);
-	void *par;
-};
-
-enum xenstore_init {
-	XS_UNKNOWN = 0,
-	XS_PV = 1,
-	XS_HVM = 2,
-	XS_LOCAL = 3,
-};
-
-struct xen_bus_type {
-	char *root;
-	unsigned int levels;
-	int (*get_bus_id)(char *, const char *);
-	int (*probe)(struct xen_bus_type *, const char *, const char *);
-	bool (*otherend_will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*otherend_changed)(struct xenbus_watch *, const char *, const char *);
-	struct bus_type bus;
-};
-
-struct xb_find_info {
-	struct xenbus_device *dev;
-	const char *nodename;
-};
-
-struct xenbus_transaction_holder {
-	struct list_head list;
-	struct xenbus_transaction handle;
-	unsigned int generation_id;
-};
-
-struct read_buffer {
-	struct list_head list;
-	unsigned int cons;
-	unsigned int len;
-	char msg[0];
-};
-
-struct xenbus_file_priv {
-	struct mutex msgbuffer_mutex;
-	struct list_head transactions;
-	struct list_head watches;
-	unsigned int len;
-	union {
-		struct xsd_sockmsg msg;
-		char buffer[4096];
-	} u;
-	struct mutex reply_mutex;
-	struct list_head read_buffers;
-	wait_queue_head_t read_waitq;
-	struct kref kref;
-	struct work_struct wq;
-};
-
-struct watch_adapter {
-	struct list_head list;
-	struct xenbus_watch watch;
-	struct xenbus_file_priv *dev_data;
-	char *token;
-};
-
-typedef struct {
-	union {
-		int *p;
-		uint64_t q;
-	};
-} __guest_handle_int;
-
-typedef struct {
-	union {
-		xen_ulong_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_ulong_t;
-
-struct xen_add_to_physmap_range {
-	domid_t domid;
-	uint16_t space;
-	uint16_t size;
-	domid_t foreign_domid;
-	__guest_handle_xen_ulong_t idxs;
-	__guest_handle_xen_pfn_t gpfns;
-	__guest_handle_int errs;
-};
-
-struct xen_remove_from_physmap {
-	domid_t domid;
-	xen_pfn_t gpfn;
-};
-
-struct physdev_manage_pci {
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct physdev_manage_pci_ext {
-	uint8_t bus;
-	uint8_t devfn;
-	unsigned int is_extfn;
-	unsigned int is_virtfn;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-};
-
-struct physdev_pci_device_add {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-	uint32_t flags;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-	uint32_t optarr[0];
-};
-
-struct physdev_pci_device {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct usb_device_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdUSB;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bMaxPacketSize0;
-	__le16 idVendor;
-	__le16 idProduct;
-	__le16 bcdDevice;
-	__u8 iManufacturer;
-	__u8 iProduct;
-	__u8 iSerialNumber;
-	__u8 bNumConfigurations;
-};
-
-struct usb_config_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumInterfaces;
-	__u8 bConfigurationValue;
-	__u8 iConfiguration;
-	__u8 bmAttributes;
-	__u8 bMaxPower;
-} __attribute__((packed));
-
-struct usb_interface_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bInterfaceNumber;
-	__u8 bAlternateSetting;
-	__u8 bNumEndpoints;
-	__u8 bInterfaceClass;
-	__u8 bInterfaceSubClass;
-	__u8 bInterfaceProtocol;
-	__u8 iInterface;
-};
-
-struct usb_endpoint_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bEndpointAddress;
-	__u8 bmAttributes;
-	__le16 wMaxPacketSize;
-	__u8 bInterval;
-	__u8 bRefresh;
-	__u8 bSynchAddress;
-} __attribute__((packed));
-
-struct usb_ssp_isoc_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wReseved;
-	__le32 dwBytesPerInterval;
-};
-
-struct usb_ss_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bMaxBurst;
-	__u8 bmAttributes;
-	__le16 wBytesPerInterval;
-};
-
-struct usb_interface_assoc_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bFirstInterface;
-	__u8 bInterfaceCount;
-	__u8 bFunctionClass;
-	__u8 bFunctionSubClass;
-	__u8 bFunctionProtocol;
-	__u8 iFunction;
-};
-
-struct usb_bos_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumDeviceCaps;
-} __attribute__((packed));
-
-struct usb_ext_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__le32 bmAttributes;
-} __attribute__((packed));
-
-struct usb_ss_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bmAttributes;
-	__le16 wSpeedSupported;
-	__u8 bFunctionalitySupport;
-	__u8 bU1devExitLat;
-	__le16 bU2DevExitLat;
-};
-
-struct usb_ss_container_id_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__u8 ContainerID[16];
-};
-
-struct usb_ssp_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__le32 bmAttributes;
-	__le16 wFunctionalitySupport;
-	__le16 wReserved;
-	__le32 bmSublinkSpeedAttr[1];
-};
-
-struct usb_ptm_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-};
-
-enum usb_device_speed {
-	USB_SPEED_UNKNOWN = 0,
-	USB_SPEED_LOW = 1,
-	USB_SPEED_FULL = 2,
-	USB_SPEED_HIGH = 3,
-	USB_SPEED_WIRELESS = 4,
-	USB_SPEED_SUPER = 5,
-	USB_SPEED_SUPER_PLUS = 6,
-};
-
-enum usb_device_state {
-	USB_STATE_NOTATTACHED = 0,
-	USB_STATE_ATTACHED = 1,
-	USB_STATE_POWERED = 2,
-	USB_STATE_RECONNECTING = 3,
-	USB_STATE_UNAUTHENTICATED = 4,
-	USB_STATE_DEFAULT = 5,
-	USB_STATE_ADDRESS = 6,
-	USB_STATE_CONFIGURED = 7,
-	USB_STATE_SUSPENDED = 8,
-};
-
-enum usb3_link_state {
-	USB3_LPM_U0 = 0,
-	USB3_LPM_U1 = 1,
-	USB3_LPM_U2 = 2,
-	USB3_LPM_U3 = 3,
-};
-
-struct ep_device;
-
-struct usb_host_endpoint {
-	struct usb_endpoint_descriptor desc;
-	struct usb_ss_ep_comp_descriptor ss_ep_comp;
-	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
-	char: 8;
-	struct list_head urb_list;
-	void *hcpriv;
-	struct ep_device *ep_dev;
-	unsigned char *extra;
-	int extralen;
-	int enabled;
-	int streams;
-	int: 32;
-} __attribute__((packed));
-
-struct usb_host_interface {
-	struct usb_interface_descriptor desc;
-	int extralen;
-	unsigned char *extra;
-	struct usb_host_endpoint *endpoint;
-	char *string;
-};
-
-enum usb_interface_condition {
-	USB_INTERFACE_UNBOUND = 0,
-	USB_INTERFACE_BINDING = 1,
-	USB_INTERFACE_BOUND = 2,
-	USB_INTERFACE_UNBINDING = 3,
-};
-
-struct usb_interface {
-	struct usb_host_interface *altsetting;
-	struct usb_host_interface *cur_altsetting;
-	unsigned int num_altsetting;
-	struct usb_interface_assoc_descriptor *intf_assoc;
-	int minor;
-	enum usb_interface_condition condition;
-	unsigned int sysfs_files_created: 1;
-	unsigned int ep_devs_created: 1;
-	unsigned int unregistering: 1;
-	unsigned int needs_remote_wakeup: 1;
-	unsigned int needs_altsetting0: 1;
-	unsigned int needs_binding: 1;
-	unsigned int resetting_device: 1;
-	unsigned int authorized: 1;
-	struct device dev;
-	struct device *usb_dev;
-	struct work_struct reset_ws;
-};
-
-struct usb_interface_cache {
-	unsigned int num_altsetting;
-	struct kref ref;
-	struct usb_host_interface altsetting[0];
-};
-
-struct usb_host_config {
-	struct usb_config_descriptor desc;
-	char *string;
-	struct usb_interface_assoc_descriptor *intf_assoc[16];
-	struct usb_interface *interface[32];
-	struct usb_interface_cache *intf_cache[32];
-	unsigned char *extra;
-	int extralen;
-};
-
-struct usb_host_bos {
-	struct usb_bos_descriptor *desc;
-	struct usb_ext_cap_descriptor *ext_cap;
-	struct usb_ss_cap_descriptor *ss_cap;
-	struct usb_ssp_cap_descriptor *ssp_cap;
-	struct usb_ss_container_id_descriptor *ss_id;
-	struct usb_ptm_cap_descriptor *ptm_cap;
-};
-
-struct usb_devmap {
-	long unsigned int devicemap[2];
-};
-
-struct mon_bus;
-
-struct usb_device;
-
-struct usb_bus {
-	struct device *controller;
-	struct device *sysdev;
-	int busnum;
-	const char *bus_name;
-	u8 uses_pio_for_control;
-	u8 otg_port;
-	unsigned int is_b_host: 1;
-	unsigned int b_hnp_enable: 1;
-	unsigned int no_stop_on_short: 1;
-	unsigned int no_sg_constraint: 1;
-	unsigned int sg_tablesize;
-	int devnum_next;
-	struct mutex devnum_next_mutex;
-	struct usb_devmap devmap;
-	struct usb_device *root_hub;
-	struct usb_bus *hs_companion;
-	int bandwidth_allocated;
-	int bandwidth_int_reqs;
-	int bandwidth_isoc_reqs;
-	unsigned int resuming_ports;
-	struct mon_bus *mon_bus;
-	int monitored;
-};
-
-struct wusb_dev;
-
-enum usb_device_removable {
-	USB_DEVICE_REMOVABLE_UNKNOWN = 0,
-	USB_DEVICE_REMOVABLE = 1,
-	USB_DEVICE_FIXED = 2,
-};
-
-struct usb2_lpm_parameters {
-	unsigned int besl;
-	int timeout;
-};
-
-struct usb3_lpm_parameters {
-	unsigned int mel;
-	unsigned int pel;
-	unsigned int sel;
-	int timeout;
-};
-
-struct usb_tt;
-
-struct usb_device {
-	int devnum;
-	char devpath[16];
-	u32 route;
-	enum usb_device_state state;
-	enum usb_device_speed speed;
-	unsigned int rx_lanes;
-	unsigned int tx_lanes;
-	struct usb_tt *tt;
-	int ttport;
-	unsigned int toggle[2];
-	struct usb_device *parent;
-	struct usb_bus *bus;
-	struct usb_host_endpoint ep0;
-	struct device dev;
-	struct usb_device_descriptor descriptor;
-	struct usb_host_bos *bos;
-	struct usb_host_config *config;
-	struct usb_host_config *actconfig;
-	struct usb_host_endpoint *ep_in[16];
-	struct usb_host_endpoint *ep_out[16];
-	char **rawdescriptors;
-	short unsigned int bus_mA;
-	u8 portnum;
-	u8 level;
-	u8 devaddr;
-	unsigned int can_submit: 1;
-	unsigned int persist_enabled: 1;
-	unsigned int have_langid: 1;
-	unsigned int authorized: 1;
-	unsigned int authenticated: 1;
-	unsigned int wusb: 1;
-	unsigned int lpm_capable: 1;
-	unsigned int usb2_hw_lpm_capable: 1;
-	unsigned int usb2_hw_lpm_besl_capable: 1;
-	unsigned int usb2_hw_lpm_enabled: 1;
-	unsigned int usb2_hw_lpm_allowed: 1;
-	unsigned int usb3_lpm_u1_enabled: 1;
-	unsigned int usb3_lpm_u2_enabled: 1;
-	int string_langid;
-	char *product;
-	char *manufacturer;
-	char *serial;
-	struct list_head filelist;
-	int maxchild;
-	u32 quirks;
-	atomic_t urbnum;
-	long unsigned int active_duration;
-	long unsigned int connect_time;
-	unsigned int do_remote_wakeup: 1;
-	unsigned int reset_resume: 1;
-	unsigned int port_is_suspended: 1;
-	struct wusb_dev *wusb_dev;
-	int slot_id;
-	enum usb_device_removable removable;
-	struct usb2_lpm_parameters l1_params;
-	struct usb3_lpm_parameters u1_params;
-	struct usb3_lpm_parameters u2_params;
-	unsigned int lpm_disable_count;
-	u16 hub_delay;
-	unsigned int use_generic_driver: 1;
-};
-
-struct usb_tt {
-	struct usb_device *hub;
-	int multi;
-	unsigned int think_time;
-	void *hcpriv;
-	spinlock_t lock;
-	struct list_head clear_list;
-	struct work_struct clear_work;
-};
-
-struct usb_iso_packet_descriptor {
-	unsigned int offset;
-	unsigned int length;
-	unsigned int actual_length;
-	int status;
-};
-
-struct usb_anchor {
-	struct list_head urb_list;
-	wait_queue_head_t wait;
-	spinlock_t lock;
-	atomic_t suspend_wakeups;
-	unsigned int poisoned: 1;
-};
-
-struct urb;
-
-typedef void (*usb_complete_t)(struct urb *);
-
-struct urb {
-	struct kref kref;
-	int unlinked;
-	void *hcpriv;
-	atomic_t use_count;
-	atomic_t reject;
-	struct list_head urb_list;
-	struct list_head anchor_list;
-	struct usb_anchor *anchor;
-	struct usb_device *dev;
-	struct usb_host_endpoint *ep;
-	unsigned int pipe;
-	unsigned int stream_id;
-	int status;
-	unsigned int transfer_flags;
-	void *transfer_buffer;
-	dma_addr_t transfer_dma;
-	struct scatterlist *sg;
-	int num_mapped_sgs;
-	int num_sgs;
-	u32 transfer_buffer_length;
-	u32 actual_length;
-	unsigned char *setup_packet;
-	dma_addr_t setup_dma;
-	int start_frame;
-	int number_of_packets;
-	int interval;
-	int error_count;
-	void *context;
-	usb_complete_t complete;
-	struct usb_iso_packet_descriptor iso_frame_desc[0];
-};
-
-struct giveback_urb_bh {
-	bool running;
-	spinlock_t lock;
-	struct list_head head;
-	struct tasklet_struct bh;
-	struct usb_host_endpoint *completing_ep;
-};
-
-enum usb_dev_authorize_policy {
-	USB_DEVICE_AUTHORIZE_NONE = 0,
-	USB_DEVICE_AUTHORIZE_ALL = 1,
-	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
-};
-
-struct usb_phy;
-
-struct usb_phy_roothub;
-
-struct dma_pool___2;
-
-struct gen_pool___2;
-
-struct hc_driver;
-
-struct usb_hcd {
-	struct usb_bus self;
-	struct kref kref;
-	const char *product_desc;
-	int speed;
-	char irq_descr[24];
-	struct timer_list rh_timer;
-	struct urb *status_urb;
-	struct work_struct wakeup_work;
-	struct work_struct died_work;
-	const struct hc_driver *driver;
-	struct usb_phy *usb_phy;
-	struct usb_phy_roothub *phy_roothub;
-	long unsigned int flags;
-	enum usb_dev_authorize_policy dev_policy;
-	unsigned int rh_registered: 1;
-	unsigned int rh_pollable: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int msi_enabled: 1;
-	unsigned int skip_phy_initialization: 1;
-	unsigned int uses_new_polling: 1;
-	unsigned int wireless: 1;
-	unsigned int has_tt: 1;
-	unsigned int amd_resume_bug: 1;
-	unsigned int can_do_streams: 1;
-	unsigned int tpl_support: 1;
-	unsigned int cant_recv_wakeups: 1;
-	unsigned int irq;
-	void *regs;
-	resource_size_t rsrc_start;
-	resource_size_t rsrc_len;
-	unsigned int power_budget;
-	struct giveback_urb_bh high_prio_bh;
-	struct giveback_urb_bh low_prio_bh;
-	struct mutex *address0_mutex;
-	struct mutex *bandwidth_mutex;
-	struct usb_hcd *shared_hcd;
-	struct usb_hcd *primary_hcd;
-	struct dma_pool___2 *pool[4];
-	int state;
-	struct gen_pool___2 *localmem_pool;
-	long unsigned int hcd_priv[0];
-};
-
-struct hc_driver {
-	const char *description;
-	const char *product_desc;
-	size_t hcd_priv_size;
-	irqreturn_t (*irq)(struct usb_hcd *);
-	int flags;
-	int (*reset)(struct usb_hcd *);
-	int (*start)(struct usb_hcd *);
-	int (*pci_suspend)(struct usb_hcd *, bool);
-	int (*pci_resume)(struct usb_hcd *, bool);
-	void (*stop)(struct usb_hcd *);
-	void (*shutdown)(struct usb_hcd *);
-	int (*get_frame_number)(struct usb_hcd *);
-	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
-	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
-	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
-	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
-	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
-	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*hub_status_data)(struct usb_hcd *, char *);
-	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
-	int (*bus_suspend)(struct usb_hcd *);
-	int (*bus_resume)(struct usb_hcd *);
-	int (*start_port_reset)(struct usb_hcd *, unsigned int);
-	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
-	void (*relinquish_port)(struct usb_hcd *, int);
-	int (*port_handed_over)(struct usb_hcd *, int);
-	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
-	void (*free_dev)(struct usb_hcd *, struct usb_device *);
-	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
-	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
-	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
-	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
-	int (*address_device)(struct usb_hcd *, struct usb_device *);
-	int (*enable_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
-	int (*reset_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_device)(struct usb_hcd *, struct usb_device *);
-	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
-	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*find_raw_port_number)(struct usb_hcd *, int);
-	int (*port_power)(struct usb_hcd *, int, bool);
-};
-
-struct physdev_dbgp_op {
-	uint8_t op;
-	uint8_t bus;
-	union {
-		struct physdev_pci_device pci;
-	} u;
-};
-
-struct dev_ext_attribute {
-	struct device_attribute attr;
-	void *var;
-};
-
-struct ioctl_evtchn_bind_virq {
-	unsigned int virq;
-};
-
-struct ioctl_evtchn_bind_interdomain {
-	unsigned int remote_domain;
-	unsigned int remote_port;
-};
-
-struct ioctl_evtchn_bind_unbound_port {
-	unsigned int remote_domain;
-};
-
-struct ioctl_evtchn_unbind {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_notify {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_restrict_domid {
-	domid_t domid;
-};
-
-struct per_user_data {
-	struct mutex bind_mutex;
-	struct rb_root evtchns;
-	unsigned int nr_evtchns;
-	unsigned int ring_size;
-	evtchn_port_t *ring;
-	unsigned int ring_cons;
-	unsigned int ring_prod;
-	unsigned int ring_overflow;
-	struct mutex ring_cons_mutex;
-	spinlock_t ring_prod_lock;
-	wait_queue_head_t evtchn_wait;
-	struct fasync_struct *evtchn_async_queue;
-	const char *name;
-	domid_t restrict_domid;
-};
-
-struct user_evtchn {
-	struct rb_node node;
-	struct per_user_data *user;
-	evtchn_port_t port;
-	bool enabled;
-};
-
-typedef uint8_t xen_domain_handle_t[16];
-
-struct xen_compile_info {
-	char compiler[64];
-	char compile_by[16];
-	char compile_domain[32];
-	char compile_date[32];
-};
-
-struct xen_platform_parameters {
-	xen_ulong_t virt_start;
-};
-
-struct xen_build_id {
-	uint32_t len;
-	unsigned char buf[0];
-};
-
-struct hyp_sysfs_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct hyp_sysfs_attr *, char *);
-	ssize_t (*store)(struct hyp_sysfs_attr *, const char *, size_t);
-	void *hyp_attr_data;
-};
-
-enum xen_swiotlb_err {
-	XEN_SWIOTLB_UNKNOWN = 0,
-	XEN_SWIOTLB_ENOMEM = 1,
-	XEN_SWIOTLB_EFIXUP = 2,
-};
-
-typedef void (*xen_gfn_fn_t)(long unsigned int, void *);
-
-struct xen_remap_gfn_info;
-
-struct remap_data {
-	xen_pfn_t *fgfn;
-	int nr_fgfn;
-	pgprot_t prot;
-	domid_t domid;
-	struct vm_area_struct *vma;
-	int index;
-	struct page **pages;
-	struct xen_remap_gfn_info *info;
-	int *err_ptr;
-	int mapped;
-	int h_errs[1];
-	xen_ulong_t h_idxs[1];
-	xen_pfn_t h_gpfns[1];
-	int h_iter;
-};
-
-struct map_balloon_pages {
-	xen_pfn_t *pfns;
-	unsigned int idx;
-};
-
-struct remap_pfn {
-	struct mm_struct *mm;
-	struct page **pages;
-	pgprot_t prot;
-	long unsigned int i;
-};
-
-struct fastopen_queue {
-	struct request_sock *rskq_rst_head;
-	struct request_sock *rskq_rst_tail;
-	spinlock_t lock;
-	int qlen;
-	int max_qlen;
-	struct tcp_fastopen_context *ctx;
-};
-
-struct request_sock_queue {
-	spinlock_t rskq_lock;
-	u8 rskq_defer_accept;
-	u32 synflood_warned;
-	atomic_t qlen;
-	atomic_t young;
-	struct request_sock *rskq_accept_head;
-	struct request_sock *rskq_accept_tail;
-	struct fastopen_queue fastopenq;
-};
-
-struct inet_connection_sock_af_ops {
-	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
-	void (*send_check)(struct sock *, struct sk_buff *);
-	int (*rebuild_header)(struct sock *);
-	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
-	int (*conn_request)(struct sock *, struct sk_buff *);
-	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
-	u16 net_header_len;
-	u16 net_frag_header_len;
-	u16 sockaddr_len;
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
-	void (*mtu_reduced)(struct sock *);
-};
-
-struct inet_bind_bucket;
-
-struct tcp_ulp_ops;
-
-struct inet_connection_sock {
-	struct inet_sock icsk_inet;
-	struct request_sock_queue icsk_accept_queue;
-	struct inet_bind_bucket *icsk_bind_hash;
-	long unsigned int icsk_timeout;
-	struct timer_list icsk_retransmit_timer;
-	struct timer_list icsk_delack_timer;
-	__u32 icsk_rto;
-	__u32 icsk_rto_min;
-	__u32 icsk_delack_max;
-	__u32 icsk_pmtu_cookie;
-	const struct tcp_congestion_ops *icsk_ca_ops;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	const struct tcp_ulp_ops *icsk_ulp_ops;
-	void *icsk_ulp_data;
-	void (*icsk_clean_acked)(struct sock *, u32);
-	struct hlist_node icsk_listen_portaddr_node;
-	unsigned int (*icsk_sync_mss)(struct sock *, u32);
-	__u8 icsk_ca_state: 5;
-	__u8 icsk_ca_initialized: 1;
-	__u8 icsk_ca_setsockopt: 1;
-	__u8 icsk_ca_dst_locked: 1;
-	__u8 icsk_retransmits;
-	__u8 icsk_pending;
-	__u8 icsk_backoff;
-	__u8 icsk_syn_retries;
-	__u8 icsk_probes_out;
-	__u16 icsk_ext_hdr_len;
-	struct {
-		__u8 pending;
-		__u8 quick;
-		__u8 pingpong;
-		__u8 retry;
-		__u32 ato;
-		long unsigned int timeout;
-		__u32 lrcvtime;
-		__u16 last_seg_size;
-		__u16 rcv_mss;
-	} icsk_ack;
-	struct {
-		int enabled;
-		int search_high;
-		int search_low;
-		int probe_size;
-		u32 probe_timestamp;
-	} icsk_mtup;
-	u32 icsk_probes_tstamp;
-	u32 icsk_user_timeout;
-	u64 icsk_ca_priv[13];
-};
-
-struct tcp_ulp_ops {
-	struct list_head list;
-	int (*init)(struct sock *);
-	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
-	void (*release)(struct sock *);
-	int (*get_info)(const struct sock *, struct sk_buff *);
-	size_t (*get_info_size)(const struct sock *);
-	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
-	char name[16];
-	struct module *owner;
-};
-
-typedef unsigned int RING_IDX;
-
-struct pvcalls_data_intf {
-	RING_IDX in_cons;
-	RING_IDX in_prod;
-	RING_IDX in_error;
-	uint8_t pad1[52];
-	RING_IDX out_cons;
-	RING_IDX out_prod;
-	RING_IDX out_error;
-	uint8_t pad2[52];
-	RING_IDX ring_order;
-	grant_ref_t ref[0];
-};
-
-struct pvcalls_data {
-	unsigned char *in;
-	unsigned char *out;
-};
-
-struct xen_pvcalls_socket {
-	uint64_t id;
-	uint32_t domain;
-	uint32_t type;
-	uint32_t protocol;
-};
-
-struct xen_pvcalls_connect {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-	uint32_t flags;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_release {
-	uint64_t id;
-	uint8_t reuse;
-};
-
-struct xen_pvcalls_bind {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-};
-
-struct xen_pvcalls_listen {
-	uint64_t id;
-	uint32_t backlog;
-};
-
-struct xen_pvcalls_accept {
-	uint64_t id;
-	uint64_t id_new;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct xen_pvcalls_dummy {
-	uint8_t dummy[56];
-};
-
-struct xen_pvcalls_request {
-	uint32_t req_id;
-	uint32_t cmd;
-	union {
-		struct xen_pvcalls_socket socket;
-		struct xen_pvcalls_connect connect;
-		struct xen_pvcalls_release release;
-		struct xen_pvcalls_bind bind;
-		struct xen_pvcalls_listen listen;
-		struct xen_pvcalls_accept accept;
-		struct xen_pvcalls_poll poll;
-		struct xen_pvcalls_dummy dummy;
-	} u;
-};
-
-struct _xen_pvcalls_socket {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_connect {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_release {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_bind {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_listen {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_accept {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_dummy {
-	uint8_t dummy[8];
-};
-
-struct xen_pvcalls_response {
-	uint32_t req_id;
-	uint32_t cmd;
-	int32_t ret;
-	uint32_t pad;
-	union {
-		struct _xen_pvcalls_socket socket;
-		struct _xen_pvcalls_connect connect;
-		struct _xen_pvcalls_release release;
-		struct _xen_pvcalls_bind bind;
-		struct _xen_pvcalls_listen listen;
-		struct _xen_pvcalls_accept accept;
-		struct _xen_pvcalls_poll poll;
-		struct _xen_pvcalls_dummy dummy;
-	} u;
-};
-
-union xen_pvcalls_sring_entry {
-	struct xen_pvcalls_request req;
-	struct xen_pvcalls_response rsp;
-};
-
-struct xen_pvcalls_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_pvcalls_sring_entry ring[1];
-};
-
-struct xen_pvcalls_back_ring {
-	RING_IDX rsp_prod_pvt;
-	RING_IDX req_cons;
-	unsigned int nr_ents;
-	struct xen_pvcalls_sring *sring;
-};
-
-struct pvcalls_back_global {
-	struct list_head frontends;
-	struct semaphore frontends_lock;
-};
-
-struct pvcalls_fedata {
-	struct list_head list;
-	struct xenbus_device *dev;
-	struct xen_pvcalls_sring *sring;
-	struct xen_pvcalls_back_ring ring;
-	int irq;
-	struct list_head socket_mappings;
-	struct xarray socketpass_mappings;
-	struct semaphore socket_lock;
-};
-
-struct pvcalls_ioworker {
-	struct work_struct register_work;
-	struct workqueue_struct *wq;
-};
-
-struct sockpass_mapping;
-
-struct sock_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct sockpass_mapping *sockpass;
-	struct socket *sock;
-	uint64_t id;
-	grant_ref_t ref;
-	struct pvcalls_data_intf *ring;
-	void *bytes;
-	struct pvcalls_data data;
-	uint32_t ring_order;
-	int irq;
-	atomic_t read;
-	atomic_t write;
-	atomic_t io;
-	atomic_t release;
-	atomic_t eoi;
-	void (*saved_data_ready)(struct sock *);
-	struct pvcalls_ioworker ioworker;
-};
-
-struct sockpass_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct socket *sock;
-	uint64_t id;
-	struct xen_pvcalls_request reqcopy;
-	spinlock_t copy_lock;
-	struct workqueue_struct *wq;
-	struct work_struct register_work;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct ww_class {
-	atomic_long_t stamp;
-	struct lock_class_key acquire_key;
-	struct lock_class_key mutex_key;
-	const char *acquire_name;
-	const char *mutex_name;
-	unsigned int is_wait_die;
-};
-
-enum regulator_type {
-	REGULATOR_VOLTAGE = 0,
-	REGULATOR_CURRENT = 1,
-};
-
-struct regulator_config;
-
-struct regulator_ops;
-
-struct regulator_desc {
-	const char *name;
-	const char *supply_name;
-	const char *of_match;
-	const char *regulators_node;
-	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
-	int id;
-	unsigned int continuous_voltage_range: 1;
-	unsigned int n_voltages;
-	unsigned int n_current_limits;
-	const struct regulator_ops *ops;
-	int irq;
-	enum regulator_type type;
-	struct module *owner;
-	unsigned int min_uV;
-	unsigned int uV_step;
-	unsigned int linear_min_sel;
-	int fixed_uV;
-	unsigned int ramp_delay;
-	int min_dropout_uV;
-	const struct linear_range *linear_ranges;
-	const unsigned int *linear_range_selectors;
-	int n_linear_ranges;
-	const unsigned int *volt_table;
-	const unsigned int *curr_table;
-	unsigned int vsel_range_reg;
-	unsigned int vsel_range_mask;
-	unsigned int vsel_reg;
-	unsigned int vsel_mask;
-	unsigned int vsel_step;
-	unsigned int csel_reg;
-	unsigned int csel_mask;
-	unsigned int apply_reg;
-	unsigned int apply_bit;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	unsigned int enable_val;
-	unsigned int disable_val;
-	bool enable_is_inverted;
-	unsigned int bypass_reg;
-	unsigned int bypass_mask;
-	unsigned int bypass_val_on;
-	unsigned int bypass_val_off;
-	unsigned int active_discharge_on;
-	unsigned int active_discharge_off;
-	unsigned int active_discharge_mask;
-	unsigned int active_discharge_reg;
-	unsigned int soft_start_reg;
-	unsigned int soft_start_mask;
-	unsigned int soft_start_val_on;
-	unsigned int pull_down_reg;
-	unsigned int pull_down_mask;
-	unsigned int pull_down_val_on;
-	unsigned int enable_time;
-	unsigned int off_on_delay;
-	unsigned int poll_enabled_time;
-	unsigned int (*of_map_mode)(unsigned int);
-};
-
 struct pre_voltage_change_data {
 	long unsigned int old_uV;
 	long unsigned int min_uV;
 	long unsigned int max_uV;
 };
 
-struct regulator_voltage {
-	int min_uV;
-	int max_uV;
-};
-
-struct regulator_dev;
-
-struct regulator {
-	struct device *dev;
-	struct list_head list;
-	unsigned int always_on: 1;
-	unsigned int bypass: 1;
-	unsigned int device_link: 1;
-	int uA_load;
-	unsigned int enable_count;
-	unsigned int deferred_disables;
-	struct regulator_voltage voltage[5];
-	const char *supply_name;
-	struct device_attribute dev_attr;
-	struct regulator_dev *rdev;
-	struct dentry *debugfs;
-};
-
 struct regulator_coupler {
 	struct list_head list;
 	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
@@ -78098,43 +113871,6 @@
 	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
 };
 
-struct coupling_desc {
-	struct regulator_dev **coupled_rdevs;
-	struct regulator_coupler *coupler;
-	int n_resolved;
-	int n_coupled;
-};
-
-struct regulator_enable_gpio;
-
-struct regulator_dev {
-	const struct regulator_desc *desc;
-	int exclusive;
-	u32 use_count;
-	u32 open_count;
-	u32 bypass_count;
-	struct list_head list;
-	struct list_head consumer_list;
-	struct coupling_desc coupling_desc;
-	struct blocking_notifier_head notifier;
-	struct ww_mutex mutex;
-	struct task_struct *mutex_owner;
-	int ref_cnt;
-	struct module *owner;
-	struct device dev;
-	struct regulation_constraints *constraints;
-	struct regulator *supply;
-	const char *supply_name;
-	struct regmap *regmap;
-	struct delayed_work disable_work;
-	void *reg_data;
-	struct dentry *debugfs;
-	struct regulator_enable_gpio *ena_pin;
-	unsigned int ena_gpio_state: 1;
-	unsigned int is_switch: 1;
-	long unsigned int last_off_jiffy;
-};
-
 enum regulator_status {
 	REGULATOR_STATUS_OFF = 0,
 	REGULATOR_STATUS_ON = 1,
@@ -78147,49 +113883,10 @@
 	REGULATOR_STATUS_UNDEFINED = 8,
 };
 
-struct regulator_ops {
-	int (*list_voltage)(struct regulator_dev *, unsigned int);
-	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
-	int (*map_voltage)(struct regulator_dev *, int, int);
-	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
-	int (*get_voltage)(struct regulator_dev *);
-	int (*get_voltage_sel)(struct regulator_dev *);
-	int (*set_current_limit)(struct regulator_dev *, int, int);
-	int (*get_current_limit)(struct regulator_dev *);
-	int (*set_input_current_limit)(struct regulator_dev *, int);
-	int (*set_over_current_protection)(struct regulator_dev *);
-	int (*set_active_discharge)(struct regulator_dev *, bool);
-	int (*enable)(struct regulator_dev *);
-	int (*disable)(struct regulator_dev *);
-	int (*is_enabled)(struct regulator_dev *);
-	int (*set_mode)(struct regulator_dev *, unsigned int);
-	unsigned int (*get_mode)(struct regulator_dev *);
-	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
-	int (*enable_time)(struct regulator_dev *);
-	int (*set_ramp_delay)(struct regulator_dev *, int);
-	int (*set_voltage_time)(struct regulator_dev *, int, int);
-	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
-	int (*set_soft_start)(struct regulator_dev *);
-	int (*get_status)(struct regulator_dev *);
-	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
-	int (*set_load)(struct regulator_dev *, int);
-	int (*set_bypass)(struct regulator_dev *, bool);
-	int (*get_bypass)(struct regulator_dev *, bool *);
-	int (*set_suspend_voltage)(struct regulator_dev *, int);
-	int (*set_suspend_enable)(struct regulator_dev *);
-	int (*set_suspend_disable)(struct regulator_dev *);
-	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
-	int (*resume)(struct regulator_dev *);
-	int (*set_pull_down)(struct regulator_dev *);
-};
-
-struct regulator_config {
-	struct device *dev;
-	const struct regulator_init_data *init_data;
-	void *driver_data;
-	struct device_node *of_node;
-	struct regmap *regmap;
-	struct gpio_desc *ena_gpiod;
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
 };
 
 struct regulator_enable_gpio {
@@ -78199,12 +113896,6 @@
 	u32 request_count;
 };
 
-enum regulator_active_discharge {
-	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
-	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
-	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
-};
-
 struct trace_event_raw_regulator_basic {
 	struct trace_entry ent;
 	u32 __data_loc_name;
@@ -78260,13 +113951,6 @@
 
 typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
 
-enum regulator_get_type {
-	NORMAL_GET = 0,
-	EXCLUSIVE_GET = 1,
-	OPTIONAL_GET = 2,
-	MAX_GET_TYPE = 3,
-};
-
 struct regulator_map {
 	struct list_head list;
 	const char *dev_name;
@@ -78294,96 +113978,16 @@
 	struct regulator_dev **old_contended_rdev;
 };
 
-struct fixed_voltage_config {
-	const char *supply_name;
-	const char *input_supply;
-	int microvolts;
-	unsigned int startup_delay;
-	unsigned int off_on_delay;
-	unsigned int enabled_at_boot: 1;
-	struct regulator_init_data *init_data;
-};
+struct reset_control;
 
-struct fixed_regulator_data {
-	struct fixed_voltage_config cfg;
-	struct regulator_init_data init_data;
-	struct platform_device pdev;
-};
-
-struct regulator_bulk_devres {
-	struct regulator_bulk_data *consumers;
-	int num_consumers;
-};
-
-struct regulator_supply_alias_match {
-	struct device *dev;
+struct reset_control_bulk_data {
 	const char *id;
+	struct reset_control *rstc;
 };
 
-struct regulator_notifier_match {
-	struct regulator *regulator;
-	struct notifier_block *nb;
-};
+struct reset_controller_dev;
 
-struct of_regulator_match {
-	const char *name;
-	void *driver_data;
-	struct regulator_init_data *init_data;
-	struct device_node *of_node;
-	const struct regulator_desc *desc;
-};
-
-struct devm_of_regulator_matches {
-	struct of_regulator_match *matches;
-	unsigned int num_matches;
-};
-
-struct fixed_voltage_data {
-	struct regulator_desc desc;
-	struct regulator_dev *dev;
-	struct clk *enable_clock;
-	unsigned int clk_enable_counter;
-};
-
-struct fixed_dev_type {
-	bool has_enable_clock;
-};
-
-struct gpio_regulator_state {
-	int value;
-	int gpios;
-};
-
-struct gpio_regulator_config {
-	const char *supply_name;
-	unsigned int enabled_at_boot: 1;
-	unsigned int startup_delay;
-	enum gpiod_flags *gflags;
-	int ngpios;
-	struct gpio_regulator_state *states;
-	int nr_states;
-	enum regulator_type type;
-	struct regulator_init_data *init_data;
-};
-
-struct gpio_regulator_data {
-	struct regulator_desc desc;
-	struct gpio_desc **gpiods;
-	int nr_gpios;
-	struct gpio_regulator_state *states;
-	int nr_states;
-	int state;
-};
-
-struct reset_control_lookup {
-	struct list_head list;
-	const char *provider;
-	unsigned int index;
-	const char *dev_id;
-	const char *con_id;
-};
-
-struct reset_control___2 {
+struct reset_control {
 	struct reset_controller_dev *rcdev;
 	struct list_head list;
 	unsigned int id;
@@ -78395,143 +113999,42 @@
 	atomic_t triggered_count;
 };
 
+struct reset_control_ops {
+	int (*reset)(struct reset_controller_dev *, long unsigned int);
+	int (*assert)(struct reset_controller_dev *, long unsigned int);
+	int (*deassert)(struct reset_controller_dev *, long unsigned int);
+	int (*status)(struct reset_controller_dev *, long unsigned int);
+};
+
+struct reset_controller_dev {
+	const struct reset_control_ops *ops;
+	struct module *owner;
+	struct list_head list;
+	struct list_head reset_control_head;
+	struct device *dev;
+	struct device_node *of_node;
+	int of_reset_n_cells;
+	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+	unsigned int nr_resets;
+};
+
+struct reset_control_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+};
+
 struct reset_control_array {
-	struct reset_control___2 base;
+	struct reset_control base;
 	unsigned int num_rstcs;
-	struct reset_control___2 *rstc[0];
+	struct reset_control *rstc[0];
 };
 
-enum hi6220_reset_ctrl_type {
-	PERIPHERAL = 0,
-	MEDIA = 1,
-	AO = 2,
-};
-
-struct hi6220_reset_data {
-	struct reset_controller_dev rc_dev;
-	struct regmap *regmap;
-};
-
-struct hi3660_reset_controller {
-	struct reset_controller_dev rst;
-	struct regmap *map;
-};
-
-enum mrq_reset_commands {
-	CMD_RESET_ASSERT = 1,
-	CMD_RESET_DEASSERT = 2,
-	CMD_RESET_MODULE = 3,
-	CMD_RESET_GET_MAX_ID = 4,
-	CMD_RESET_MAX = 5,
-};
-
-struct mrq_reset_request {
-	uint32_t cmd;
-	uint32_t reset_id;
-};
-
-struct meson_reset_param {
-	int reg_count;
-	int level_offset;
-};
-
-struct meson_reset {
-	void *reg_base;
-	const struct meson_reset_param *param;
-	struct reset_controller_dev rcdev;
-	spinlock_t lock;
-};
-
-struct reset_simple_devdata {
-	u32 reg_offset;
-	u32 nr_resets;
-	bool active_low;
-	bool status_active_low;
-};
-
-struct serial_struct32 {
-	compat_int_t type;
-	compat_int_t line;
-	compat_uint_t port;
-	compat_int_t irq;
-	compat_int_t flags;
-	compat_int_t xmit_fifo_size;
-	compat_int_t custom_divisor;
-	compat_int_t baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char;
-	compat_int_t hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	compat_uint_t iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	compat_int_t reserved;
-};
-
-struct n_tty_data {
-	size_t read_head;
-	size_t commit_head;
-	size_t canon_head;
-	size_t echo_head;
-	size_t echo_commit;
-	size_t echo_mark;
-	long unsigned int char_map[4];
-	long unsigned int overrun_time;
-	int num_overrun;
-	bool no_room;
-	unsigned char lnext: 1;
-	unsigned char erasing: 1;
-	unsigned char raw: 1;
-	unsigned char real_raw: 1;
-	unsigned char icanon: 1;
-	unsigned char push: 1;
-	char read_buf[4096];
-	long unsigned int read_flags[64];
-	unsigned char echo_buf[4096];
-	size_t read_tail;
-	size_t line_start;
-	unsigned int column;
-	unsigned int canon_column;
-	size_t echo_tail;
-	struct mutex atomic_read_lock;
-	struct mutex output_lock;
-};
-
-enum {
-	ERASE = 0,
-	WERASE = 1,
-	KILL = 2,
-};
-
-struct termios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-};
-
-struct termios2 {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct termio {
-	short unsigned int c_iflag;
-	short unsigned int c_oflag;
-	short unsigned int c_cflag;
-	short unsigned int c_lflag;
-	unsigned char c_line;
-	unsigned char c_cc[8];
+struct reset_control_bulk_devres {
+	int num_rstcs;
+	struct reset_control_bulk_data *rstcs;
 };
 
 struct ldsem_waiter {
@@ -78539,362 +114042,7 @@
 	struct task_struct *task;
 };
 
-struct pts_fs_info___2;
-
-struct tty_audit_buf {
-	struct mutex mutex;
-	dev_t dev;
-	unsigned int icanon: 1;
-	size_t valid;
-	unsigned char *data;
-};
-
-struct input_id {
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-};
-
-struct input_absinfo {
-	__s32 value;
-	__s32 minimum;
-	__s32 maximum;
-	__s32 fuzz;
-	__s32 flat;
-	__s32 resolution;
-};
-
-struct input_keymap_entry {
-	__u8 flags;
-	__u8 len;
-	__u16 index;
-	__u32 keycode;
-	__u8 scancode[32];
-};
-
-struct ff_replay {
-	__u16 length;
-	__u16 delay;
-};
-
-struct ff_trigger {
-	__u16 button;
-	__u16 interval;
-};
-
-struct ff_envelope {
-	__u16 attack_length;
-	__u16 attack_level;
-	__u16 fade_length;
-	__u16 fade_level;
-};
-
-struct ff_constant_effect {
-	__s16 level;
-	struct ff_envelope envelope;
-};
-
-struct ff_ramp_effect {
-	__s16 start_level;
-	__s16 end_level;
-	struct ff_envelope envelope;
-};
-
-struct ff_condition_effect {
-	__u16 right_saturation;
-	__u16 left_saturation;
-	__s16 right_coeff;
-	__s16 left_coeff;
-	__u16 deadband;
-	__s16 center;
-};
-
-struct ff_periodic_effect {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	__s16 *custom_data;
-};
-
-struct ff_rumble_effect {
-	__u16 strong_magnitude;
-	__u16 weak_magnitude;
-};
-
-struct ff_effect {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_device_id {
-	kernel_ulong_t flags;
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-	kernel_ulong_t evbit[1];
-	kernel_ulong_t keybit[12];
-	kernel_ulong_t relbit[1];
-	kernel_ulong_t absbit[1];
-	kernel_ulong_t mscbit[1];
-	kernel_ulong_t ledbit[1];
-	kernel_ulong_t sndbit[1];
-	kernel_ulong_t ffbit[2];
-	kernel_ulong_t swbit[1];
-	kernel_ulong_t propbit[1];
-	kernel_ulong_t driver_info;
-};
-
-struct input_value {
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-enum input_clock_type {
-	INPUT_CLK_REAL = 0,
-	INPUT_CLK_MONO = 1,
-	INPUT_CLK_BOOT = 2,
-	INPUT_CLK_MAX = 3,
-};
-
-struct ff_device;
-
-struct input_dev_poller;
-
-struct input_mt;
-
-struct input_handle;
-
-struct input_dev {
-	const char *name;
-	const char *phys;
-	const char *uniq;
-	struct input_id id;
-	long unsigned int propbit[1];
-	long unsigned int evbit[1];
-	long unsigned int keybit[12];
-	long unsigned int relbit[1];
-	long unsigned int absbit[1];
-	long unsigned int mscbit[1];
-	long unsigned int ledbit[1];
-	long unsigned int sndbit[1];
-	long unsigned int ffbit[2];
-	long unsigned int swbit[1];
-	unsigned int hint_events_per_packet;
-	unsigned int keycodemax;
-	unsigned int keycodesize;
-	void *keycode;
-	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
-	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
-	struct ff_device *ff;
-	struct input_dev_poller *poller;
-	unsigned int repeat_key;
-	struct timer_list timer;
-	int rep[2];
-	struct input_mt *mt;
-	struct input_absinfo *absinfo;
-	long unsigned int key[12];
-	long unsigned int led[1];
-	long unsigned int snd[1];
-	long unsigned int sw[1];
-	int (*open)(struct input_dev *);
-	void (*close)(struct input_dev *);
-	int (*flush)(struct input_dev *, struct file *);
-	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
-	struct input_handle *grab;
-	spinlock_t event_lock;
-	struct mutex mutex;
-	unsigned int users;
-	bool going_away;
-	struct device dev;
-	struct list_head h_list;
-	struct list_head node;
-	unsigned int num_vals;
-	unsigned int max_vals;
-	struct input_value *vals;
-	bool devres_managed;
-	ktime_t timestamp[3];
-};
-
-struct ff_device {
-	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
-	int (*erase)(struct input_dev *, int);
-	int (*playback)(struct input_dev *, int, int);
-	void (*set_gain)(struct input_dev *, u16);
-	void (*set_autocenter)(struct input_dev *, u16);
-	void (*destroy)(struct ff_device *);
-	void *private;
-	long unsigned int ffbit[2];
-	struct mutex mutex;
-	int max_effects;
-	struct ff_effect *effects;
-	struct file *effect_owners[0];
-};
-
-struct input_handler;
-
-struct input_handle {
-	void *private;
-	int open;
-	const char *name;
-	struct input_dev *dev;
-	struct input_handler *handler;
-	struct list_head d_node;
-	struct list_head h_node;
-};
-
-struct input_handler {
-	void *private;
-	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
-	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
-	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
-	bool (*match)(struct input_handler *, struct input_dev *);
-	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
-	void (*disconnect)(struct input_handle *);
-	void (*start)(struct input_handle *);
-	bool legacy_minors;
-	int minor;
-	const char *name;
-	const struct input_device_id *id_table;
-	struct list_head h_list;
-	struct list_head node;
-};
-
-struct sysrq_state {
-	struct input_handle handle;
-	struct work_struct reinject_work;
-	long unsigned int key_down[12];
-	unsigned int alt;
-	unsigned int alt_use;
-	unsigned int shift;
-	unsigned int shift_use;
-	bool active;
-	bool need_reinject;
-	bool reinjecting;
-	bool reset_canceled;
-	bool reset_requested;
-	long unsigned int reset_keybit[12];
-	int reset_seq_len;
-	int reset_seq_cnt;
-	int reset_seq_version;
-	struct timer_list keyreset_timer;
-};
-
-struct consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	char *chardata;
-};
-
-struct unipair {
-	short unsigned int unicode;
-	short unsigned int fontpos;
-};
-
-struct unimapdesc {
-	short unsigned int entry_ct;
-	struct unipair *entries;
-};
-
-struct kbd_repeat {
-	int delay;
-	int period;
-};
-
-struct console_font_op {
-	unsigned int op;
-	unsigned int flags;
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_stat {
-	short unsigned int v_active;
-	short unsigned int v_signal;
-	short unsigned int v_state;
-};
-
-struct vt_sizes {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_scrollsize;
-};
-
-struct vt_consize {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_vlin;
-	short unsigned int v_clin;
-	short unsigned int v_vcol;
-	short unsigned int v_ccol;
-};
-
-struct vt_event {
-	unsigned int event;
-	unsigned int oldev;
-	unsigned int newev;
-	unsigned int pad[4];
-};
-
-struct vt_setactivate {
-	unsigned int console;
-	struct vt_mode mode;
-};
-
-struct vt_spawn_console {
-	spinlock_t lock;
-	struct pid *pid;
-	int sig;
-};
-
-struct vt_event_wait {
-	struct list_head list;
-	struct vt_event event;
-	int done;
-};
-
-struct compat_consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	compat_caddr_t chardata;
-};
-
-struct compat_console_font_op {
-	compat_uint_t op;
-	compat_uint_t flags;
-	compat_uint_t width;
-	compat_uint_t height;
-	compat_uint_t charcount;
-	compat_caddr_t data;
-};
-
-struct compat_unimapdesc {
-	short unsigned int entry_ct;
-	compat_caddr_t entries;
-};
-
-struct vt_notifier_param {
-	struct vc_data *vc;
-	unsigned int c;
-};
+struct pts_fs_info;
 
 struct vcs_poll_data {
 	struct notifier_block notifier;
@@ -78904,118 +114052,6 @@
 	struct fasync_struct *fasync;
 };
 
-struct tiocl_selection {
-	short unsigned int xs;
-	short unsigned int ys;
-	short unsigned int xe;
-	short unsigned int ye;
-	short unsigned int sel_mode;
-};
-
-struct vc_selection {
-	struct mutex lock;
-	struct vc_data *cons;
-	char *buffer;
-	unsigned int buf_len;
-	volatile int start;
-	int end;
-};
-
-enum led_brightness {
-	LED_OFF = 0,
-	LED_ON = 1,
-	LED_HALF = 127,
-	LED_FULL = 255,
-};
-
-struct led_hw_trigger_type {
-	int dummy;
-};
-
-struct led_pattern;
-
-struct led_trigger;
-
-struct led_classdev {
-	const char *name;
-	enum led_brightness brightness;
-	enum led_brightness max_brightness;
-	int flags;
-	long unsigned int work_flags;
-	void (*brightness_set)(struct led_classdev *, enum led_brightness);
-	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
-	enum led_brightness (*brightness_get)(struct led_classdev *);
-	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
-	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
-	int (*pattern_clear)(struct led_classdev *);
-	struct device *dev;
-	const struct attribute_group **groups;
-	struct list_head node;
-	const char *default_trigger;
-	long unsigned int blink_delay_on;
-	long unsigned int blink_delay_off;
-	struct timer_list blink_timer;
-	int blink_brightness;
-	int new_blink_brightness;
-	void (*flash_resume)(struct led_classdev *);
-	struct work_struct set_brightness_work;
-	int delayed_set_value;
-	struct rw_semaphore trigger_lock;
-	struct led_trigger *trigger;
-	struct list_head trig_list;
-	void *trigger_data;
-	bool activated;
-	struct led_hw_trigger_type *trigger_type;
-	struct mutex led_access;
-};
-
-struct led_pattern {
-	u32 delta_t;
-	int brightness;
-};
-
-struct led_trigger {
-	const char *name;
-	int (*activate)(struct led_classdev *);
-	void (*deactivate)(struct led_classdev *);
-	struct led_hw_trigger_type *trigger_type;
-	rwlock_t leddev_list_lock;
-	struct list_head led_cdevs;
-	struct list_head next_trig;
-	const struct attribute_group **groups;
-};
-
-struct keyboard_notifier_param {
-	struct vc_data *vc;
-	int down;
-	int shift;
-	int ledstate;
-	unsigned int value;
-};
-
-struct kbd_struct {
-	unsigned char lockstate;
-	unsigned char slockstate;
-	unsigned char ledmode: 1;
-	unsigned char ledflagstate: 4;
-	char: 3;
-	unsigned char default_ledflagstate: 4;
-	unsigned char kbdmode: 3;
-	char: 1;
-	unsigned char modeflags: 5;
-};
-
-struct kbentry {
-	unsigned char kb_table;
-	unsigned char kb_index;
-	short unsigned int kb_value;
-};
-
-struct kbsentry {
-	unsigned char kb_func;
-	unsigned char kb_string[512];
-};
-
 struct kbdiacr {
 	unsigned char diacr;
 	unsigned char base;
@@ -79027,20 +114063,21 @@
 	struct kbdiacr kbdiacr[256];
 };
 
-struct kbdiacruc {
-	unsigned int diacr;
-	unsigned int base;
-	unsigned int result;
-};
-
 struct kbdiacrsuc {
 	unsigned int kb_cnt;
 	struct kbdiacruc kbdiacruc[256];
 };
 
-struct kbkeycode {
-	unsigned int scancode;
-	unsigned int keycode;
+struct kbd_struct {
+	unsigned char lockstate;
+	unsigned char slockstate;
+	unsigned char ledmode: 1;
+	unsigned char ledflagstate: 4;
+	char: 3;
+	unsigned char default_ledflagstate: 4;
+	unsigned char kbdmode: 3;
+	char: 1;
+	unsigned char modeflags: 5;
 };
 
 typedef void k_handler_fn(struct vc_data *, unsigned char, char);
@@ -79057,174 +114094,32 @@
 	unsigned int mask;
 };
 
-struct uni_pagedir {
-	u16 **uni_pgdir[32];
-	long unsigned int refcount;
-	long unsigned int sum;
-	unsigned char *inverse_translations[4];
-	u16 *inverse_trans_unicode;
-};
-
-typedef uint32_t char32_t;
-
-struct uni_screen {
-	char32_t *lines[0];
-};
-
-struct con_driver {
-	const struct consw *con;
-	const char *desc;
-	struct device *dev;
-	int node;
-	int first;
-	int last;
-	int flag;
+struct plat_serial8250_port {
+	long unsigned int iobase;
+	void *membase;
+	resource_size_t mapbase;
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	upf_t flags;
+	unsigned int type;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
 };
 
 enum {
-	blank_off = 0,
-	blank_normal_wait = 1,
-	blank_vesa_wait = 2,
-};
-
-enum {
-	EPecma = 0,
-	EPdec = 1,
-	EPeq = 2,
-	EPgt = 3,
-	EPlt = 4,
-};
-
-struct rgb {
-	u8 r;
-	u8 g;
-	u8 b;
-};
-
-enum {
-	ESnormal = 0,
-	ESesc = 1,
-	ESsquare = 2,
-	ESgetpars = 3,
-	ESfunckey = 4,
-	EShash = 5,
-	ESsetG0 = 6,
-	ESsetG1 = 7,
-	ESpercent = 8,
-	EScsiignore = 9,
-	ESnonstd = 10,
-	ESpalette = 11,
-	ESosc = 12,
-};
-
-struct interval {
-	uint32_t first;
-	uint32_t last;
-};
-
-struct vc_draw_region {
-	long unsigned int from;
-	long unsigned int to;
-	int x;
-};
-
-struct hv_ops;
-
-struct hvc_struct {
-	struct tty_port port;
-	spinlock_t lock;
-	int index;
-	int do_wakeup;
-	char *outbuf;
-	int outbuf_size;
-	int n_outbuf;
-	uint32_t vtermno;
-	const struct hv_ops *ops;
-	int irq_requested;
-	int data;
-	struct winsize ws;
-	struct work_struct tty_resize;
-	struct list_head next;
-	long unsigned int flags;
-};
-
-struct hv_ops {
-	int (*get_chars)(uint32_t, char *, int);
-	int (*put_chars)(uint32_t, const char *, int);
-	int (*flush)(uint32_t, bool);
-	int (*notifier_add)(struct hvc_struct *, int);
-	void (*notifier_del)(struct hvc_struct *, int);
-	void (*notifier_hangup)(struct hvc_struct *, int);
-	int (*tiocmget)(struct hvc_struct *);
-	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
-	void (*dtr_rts)(struct hvc_struct *, int);
-};
-
-struct earlycon_device {
-	struct console *con;
-	struct uart_port port;
-	char options[16];
-	unsigned int baud;
-};
-
-struct earlycon_id {
-	char name[15];
-	char name_term;
-	char compatible[128];
-	int (*setup)(struct earlycon_device *, const char *);
-};
-
-typedef uint32_t XENCONS_RING_IDX;
-
-struct xencons_interface {
-	char in[1024];
-	char out[2048];
-	XENCONS_RING_IDX in_cons;
-	XENCONS_RING_IDX in_prod;
-	XENCONS_RING_IDX out_cons;
-	XENCONS_RING_IDX out_prod;
-};
-
-struct xencons_info {
-	struct list_head list;
-	struct xenbus_device *xbdev;
-	struct xencons_interface *intf;
-	unsigned int evtchn;
-	struct hvc_struct *hvc;
-	int irq;
-	int vtermno;
-	grant_ref_t gntref;
-};
-
-struct uart_driver {
-	struct module *owner;
-	const char *driver_name;
-	const char *dev_name;
-	int major;
-	int minor;
-	int nr;
-	struct console *cons;
-	struct uart_state *state;
-	struct tty_driver *tty_driver;
-};
-
-struct uart_match {
-	struct uart_port *port;
-	struct uart_driver *driver;
-};
-
-enum hwparam_type {
-	hwparam_ioport = 0,
-	hwparam_iomem = 1,
-	hwparam_ioport_or_iomem = 2,
-	hwparam_irq = 3,
-	hwparam_dma = 4,
-	hwparam_dma_addr = 5,
-	hwparam_other = 6,
-};
-
-enum {
-	PLAT8250_DEV_LEGACY = 4294967295,
+	PLAT8250_DEV_LEGACY = -1,
 	PLAT8250_DEV_PLATFORM = 0,
 	PLAT8250_DEV_PLATFORM1 = 1,
 	PLAT8250_DEV_PLATFORM2 = 2,
@@ -79237,84 +114132,6 @@
 	PLAT8250_DEV_SM501 = 9,
 };
 
-struct uart_8250_port;
-
-struct uart_8250_ops {
-	int (*setup_irq)(struct uart_8250_port *);
-	void (*release_irq)(struct uart_8250_port *);
-};
-
-struct mctrl_gpios;
-
-struct uart_8250_dma;
-
-struct uart_8250_em485;
-
-struct uart_8250_port {
-	struct uart_port port;
-	struct timer_list timer;
-	struct list_head list;
-	u32 capabilities;
-	short unsigned int bugs;
-	bool fifo_bug;
-	unsigned int tx_loadsz;
-	unsigned char acr;
-	unsigned char fcr;
-	unsigned char ier;
-	unsigned char lcr;
-	unsigned char mcr;
-	unsigned char mcr_mask;
-	unsigned char mcr_force;
-	unsigned char cur_iotype;
-	unsigned int rpm_tx_active;
-	unsigned char canary;
-	unsigned char probe;
-	struct mctrl_gpios *gpios;
-	unsigned char lsr_saved_flags;
-	unsigned char msr_saved_flags;
-	struct uart_8250_dma *dma;
-	const struct uart_8250_ops *ops;
-	int (*dl_read)(struct uart_8250_port *);
-	void (*dl_write)(struct uart_8250_port *, int);
-	struct uart_8250_em485 *em485;
-	void (*rs485_start_tx)(struct uart_8250_port *);
-	void (*rs485_stop_tx)(struct uart_8250_port *);
-	struct delayed_work overrun_backoff;
-	u32 overrun_backoff_time_ms;
-};
-
-struct uart_8250_em485 {
-	struct hrtimer start_tx_timer;
-	struct hrtimer stop_tx_timer;
-	struct hrtimer *active_timer;
-	struct uart_8250_port *port;
-	unsigned int tx_stopped: 1;
-};
-
-struct uart_8250_dma {
-	int (*tx_dma)(struct uart_8250_port *);
-	int (*rx_dma)(struct uart_8250_port *);
-	dma_filter_fn fn;
-	void *rx_param;
-	void *tx_param;
-	struct dma_slave_config rxconf;
-	struct dma_slave_config txconf;
-	struct dma_chan *rxchan;
-	struct dma_chan *txchan;
-	phys_addr_t rx_dma_addr;
-	phys_addr_t tx_dma_addr;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	void *rx_buf;
-	size_t rx_size;
-	size_t tx_size;
-	unsigned char tx_running;
-	unsigned char tx_err;
-	unsigned char rx_running;
-};
-
 struct old_serial_port {
 	unsigned int uart;
 	unsigned int baud_base;
@@ -79326,196 +114143,18 @@
 	short unsigned int iomem_reg_shift;
 };
 
-struct irq_info___2 {
+struct irq_info {
 	struct hlist_node node;
 	int irq;
 	spinlock_t lock;
 	struct list_head *head;
 };
 
-struct serial8250_config {
-	const char *name;
-	short unsigned int fifo_size;
-	short unsigned int tx_loadsz;
-	unsigned char fcr;
-	unsigned char rxtrig_bytes[4];
-	unsigned int flags;
-};
-
-struct dw8250_port_data {
-	int line;
-	struct uart_8250_dma dma;
-	u8 dlf_size;
-};
-
-struct pciserial_board {
-	unsigned int flags;
-	unsigned int num_ports;
-	unsigned int base_baud;
-	unsigned int uart_offset;
-	unsigned int reg_shift;
-	unsigned int first_offset;
-};
-
-struct serial_private;
-
-struct pci_serial_quirk {
-	u32 vendor;
-	u32 device;
-	u32 subvendor;
-	u32 subdevice;
-	int (*probe)(struct pci_dev *);
-	int (*init)(struct pci_dev *);
-	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct serial_private {
-	struct pci_dev *dev;
-	unsigned int nr;
-	struct pci_serial_quirk *quirk;
-	const struct pciserial_board *board;
-	int line[0];
-};
-
-struct f815xxa_data {
-	spinlock_t lock;
-	int idx;
-};
-
-struct timedia_struct {
-	int num;
-	const short unsigned int *ids;
-};
-
-struct quatech_feature {
-	u16 devid;
-	bool amcc;
-};
-
-enum pci_board_num_t {
-	pbn_default = 0,
-	pbn_b0_1_115200 = 1,
-	pbn_b0_2_115200 = 2,
-	pbn_b0_4_115200 = 3,
-	pbn_b0_5_115200 = 4,
-	pbn_b0_8_115200 = 5,
-	pbn_b0_1_921600 = 6,
-	pbn_b0_2_921600 = 7,
-	pbn_b0_4_921600 = 8,
-	pbn_b0_2_1130000 = 9,
-	pbn_b0_4_1152000 = 10,
-	pbn_b0_4_1250000 = 11,
-	pbn_b0_2_1843200 = 12,
-	pbn_b0_4_1843200 = 13,
-	pbn_b0_1_4000000 = 14,
-	pbn_b0_bt_1_115200 = 15,
-	pbn_b0_bt_2_115200 = 16,
-	pbn_b0_bt_4_115200 = 17,
-	pbn_b0_bt_8_115200 = 18,
-	pbn_b0_bt_1_460800 = 19,
-	pbn_b0_bt_2_460800 = 20,
-	pbn_b0_bt_4_460800 = 21,
-	pbn_b0_bt_1_921600 = 22,
-	pbn_b0_bt_2_921600 = 23,
-	pbn_b0_bt_4_921600 = 24,
-	pbn_b0_bt_8_921600 = 25,
-	pbn_b1_1_115200 = 26,
-	pbn_b1_2_115200 = 27,
-	pbn_b1_4_115200 = 28,
-	pbn_b1_8_115200 = 29,
-	pbn_b1_16_115200 = 30,
-	pbn_b1_1_921600 = 31,
-	pbn_b1_2_921600 = 32,
-	pbn_b1_4_921600 = 33,
-	pbn_b1_8_921600 = 34,
-	pbn_b1_2_1250000 = 35,
-	pbn_b1_bt_1_115200 = 36,
-	pbn_b1_bt_2_115200 = 37,
-	pbn_b1_bt_4_115200 = 38,
-	pbn_b1_bt_2_921600 = 39,
-	pbn_b1_1_1382400 = 40,
-	pbn_b1_2_1382400 = 41,
-	pbn_b1_4_1382400 = 42,
-	pbn_b1_8_1382400 = 43,
-	pbn_b2_1_115200 = 44,
-	pbn_b2_2_115200 = 45,
-	pbn_b2_4_115200 = 46,
-	pbn_b2_8_115200 = 47,
-	pbn_b2_1_460800 = 48,
-	pbn_b2_4_460800 = 49,
-	pbn_b2_8_460800 = 50,
-	pbn_b2_16_460800 = 51,
-	pbn_b2_1_921600 = 52,
-	pbn_b2_4_921600 = 53,
-	pbn_b2_8_921600 = 54,
-	pbn_b2_8_1152000 = 55,
-	pbn_b2_bt_1_115200 = 56,
-	pbn_b2_bt_2_115200 = 57,
-	pbn_b2_bt_4_115200 = 58,
-	pbn_b2_bt_2_921600 = 59,
-	pbn_b2_bt_4_921600 = 60,
-	pbn_b3_2_115200 = 61,
-	pbn_b3_4_115200 = 62,
-	pbn_b3_8_115200 = 63,
-	pbn_b4_bt_2_921600 = 64,
-	pbn_b4_bt_4_921600 = 65,
-	pbn_b4_bt_8_921600 = 66,
-	pbn_panacom = 67,
-	pbn_panacom2 = 68,
-	pbn_panacom4 = 69,
-	pbn_plx_romulus = 70,
-	pbn_endrun_2_4000000 = 71,
-	pbn_oxsemi = 72,
-	pbn_oxsemi_1_4000000 = 73,
-	pbn_oxsemi_2_4000000 = 74,
-	pbn_oxsemi_4_4000000 = 75,
-	pbn_oxsemi_8_4000000 = 76,
-	pbn_intel_i960 = 77,
-	pbn_sgi_ioc3 = 78,
-	pbn_computone_4 = 79,
-	pbn_computone_6 = 80,
-	pbn_computone_8 = 81,
-	pbn_sbsxrsio = 82,
-	pbn_pasemi_1682M = 83,
-	pbn_ni8430_2 = 84,
-	pbn_ni8430_4 = 85,
-	pbn_ni8430_8 = 86,
-	pbn_ni8430_16 = 87,
-	pbn_ADDIDATA_PCIe_1_3906250 = 88,
-	pbn_ADDIDATA_PCIe_2_3906250 = 89,
-	pbn_ADDIDATA_PCIe_4_3906250 = 90,
-	pbn_ADDIDATA_PCIe_8_3906250 = 91,
-	pbn_ce4100_1_115200 = 92,
-	pbn_omegapci = 93,
-	pbn_NETMOS9900_2s_115200 = 94,
-	pbn_brcm_trumanage = 95,
-	pbn_fintek_4 = 96,
-	pbn_fintek_8 = 97,
-	pbn_fintek_12 = 98,
-	pbn_fintek_F81504A = 99,
-	pbn_fintek_F81508A = 100,
-	pbn_fintek_F81512A = 101,
-	pbn_wch382_2 = 102,
-	pbn_wch384_4 = 103,
-	pbn_wch384_8 = 104,
-	pbn_pericom_PI7C9X7951 = 105,
-	pbn_pericom_PI7C9X7952 = 106,
-	pbn_pericom_PI7C9X7954 = 107,
-	pbn_pericom_PI7C9X7958 = 108,
-	pbn_sunix_pci_1s = 109,
-	pbn_sunix_pci_2s = 110,
-	pbn_sunix_pci_4s = 111,
-	pbn_sunix_pci_8s = 112,
-	pbn_sunix_pci_16s = 113,
-	pbn_moxa8250_2p = 114,
-	pbn_moxa8250_4p = 115,
-	pbn_moxa8250_8p = 116,
-};
-
 struct exar8250_platform {
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	const struct serial_rs485 *rs485_supported;
 	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
+	void (*unregister_gpio)(struct uart_8250_port *);
 };
 
 struct exar8250;
@@ -79534,45 +114173,6 @@
 	int line[0];
 };
 
-struct bcm2835aux_data {
-	struct clk *clk;
-	int line;
-	u32 cntl;
-};
-
-struct fsl8250_data {
-	int line;
-};
-
-enum dma_rx_status {
-	DMA_RX_START = 0,
-	DMA_RX_RUNNING = 1,
-	DMA_RX_SHUTDOWN = 2,
-};
-
-struct mtk8250_data {
-	int line;
-	unsigned int rx_pos;
-	unsigned int clk_count;
-	struct clk *uart_clk;
-	struct clk *bus_clk;
-	struct uart_8250_dma *dma;
-	enum dma_rx_status rx_status;
-	int rx_wakeup_irq;
-};
-
-enum {
-	MTK_UART_FC_NONE = 0,
-	MTK_UART_FC_SW = 1,
-	MTK_UART_FC_HW = 2,
-};
-
-struct tegra_uart {
-	struct clk *clk;
-	struct reset_control *rst;
-	int line;
-};
-
 struct of_serial_info {
 	struct clk *clk;
 	struct reset_control *rst;
@@ -79580,2426 +114180,389 @@
 	int line;
 };
 
-enum amba_vendor {
-	AMBA_VENDOR_ARM = 65,
-	AMBA_VENDOR_ST = 128,
-	AMBA_VENDOR_QCOM = 81,
-	AMBA_VENDOR_LSI = 182,
-	AMBA_VENDOR_LINUX = 254,
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	long unsigned int priv;
+	short unsigned int quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+	struct completion dying;
 };
 
-struct amba_pl011_data {
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	bool dma_rx_poll_enable;
-	unsigned int dma_rx_poll_rate;
-	unsigned int dma_rx_poll_timeout;
-	void (*init)();
-	void (*exit)();
+struct pci_dev;
+
+struct drm_client_buffer {
+	struct drm_client_dev *client;
+	u32 handle;
+	u32 pitch;
+	struct drm_gem_object *gem;
+	struct iosys_map map;
+	struct drm_framebuffer *fb;
 };
 
-enum {
-	REG_DR = 0,
-	REG_ST_DMAWM = 1,
-	REG_ST_TIMEOUT = 2,
-	REG_FR = 3,
-	REG_LCRH_RX = 4,
-	REG_LCRH_TX = 5,
-	REG_IBRD = 6,
-	REG_FBRD = 7,
-	REG_CR = 8,
-	REG_IFLS = 9,
-	REG_IMSC = 10,
-	REG_RIS = 11,
-	REG_MIS = 12,
-	REG_ICR = 13,
-	REG_DMACR = 14,
-	REG_ST_XFCR = 15,
-	REG_ST_XON1 = 16,
-	REG_ST_XON2 = 17,
-	REG_ST_XOFF1 = 18,
-	REG_ST_XOFF2 = 19,
-	REG_ST_ITCR = 20,
-	REG_ST_ITIP = 21,
-	REG_ST_ABCR = 22,
-	REG_ST_ABIMSC = 23,
-	REG_ARRAY_SIZE = 24,
+struct drm_mode_crtc {
+	__u64 set_connectors_ptr;
+	__u32 count_connectors;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 x;
+	__u32 y;
+	__u32 gamma_size;
+	__u32 mode_valid;
+	struct drm_mode_modeinfo mode;
 };
 
-struct vendor_data {
-	const u16 *reg_offset;
-	unsigned int ifls;
-	unsigned int fr_busy;
-	unsigned int fr_dsr;
-	unsigned int fr_cts;
-	unsigned int fr_ri;
-	unsigned int inv_fr;
-	bool access_32b;
-	bool oversampling;
-	bool dma_threshold;
-	bool cts_event_workaround;
-	bool always_enabled;
-	bool fixed_options;
-	unsigned int (*get_fifosize)(struct amba_device *);
+struct displayid_tiled_block {
+	struct displayid_block base;
+	u8 tile_cap;
+	u8 topo[3];
+	u8 tile_size[4];
+	u8 tile_pixel_bezel[5];
+	u8 topology_id[8];
 };
 
-struct pl011_sgbuf {
-	struct scatterlist sg;
-	char *buf;
+struct displayid_detailed_timings_1 {
+	u8 pixel_clock[3];
+	u8 flags;
+	u8 hactive[2];
+	u8 hblank[2];
+	u8 hsync[2];
+	u8 hsw[2];
+	u8 vactive[2];
+	u8 vblank[2];
+	u8 vsync[2];
+	u8 vsw[2];
 };
 
-struct pl011_dmarx_data {
-	struct dma_chan *chan;
-	struct completion complete;
-	bool use_buf_b;
-	struct pl011_sgbuf sgbuf_a;
-	struct pl011_sgbuf sgbuf_b;
-	dma_cookie_t cookie;
-	bool running;
-	struct timer_list timer;
-	unsigned int last_residue;
-	long unsigned int last_jiffies;
-	bool auto_poll_rate;
-	unsigned int poll_rate;
-	unsigned int poll_timeout;
+struct displayid_detailed_timing_block {
+	struct displayid_block base;
+	struct displayid_detailed_timings_1 timings[0];
 };
 
-struct pl011_dmatx_data {
-	struct dma_chan *chan;
-	struct scatterlist sg;
-	char *buf;
-	bool queued;
+struct displayid_vesa_vendor_specific_block {
+	struct displayid_block base;
+	u8 oui[3];
+	u8 data_structure_type;
+	u8 mso;
 };
 
-struct uart_amba_port {
-	struct uart_port port;
-	const u16 *reg_offset;
-	struct clk *clk;
-	const struct vendor_data *vendor;
-	unsigned int dmacr;
-	unsigned int im;
-	unsigned int old_status;
-	unsigned int fifosize;
-	unsigned int old_cr;
-	unsigned int fixed_baud;
-	char type[12];
-	bool using_tx_dma;
-	bool using_rx_dma;
-	struct pl011_dmarx_data dmarx;
-	struct pl011_dmatx_data dmatx;
-	bool dma_probed;
+struct est_timings {
+	u8 t1;
+	u8 t2;
+	u8 mfg_rsvd;
 };
 
-struct s3c2410_uartcfg {
-	unsigned char hwport;
-	unsigned char unused;
-	short unsigned int flags;
-	upf_t uart_flags;
-	unsigned int clk_sel;
-	unsigned int has_fracval;
-	long unsigned int ucon;
-	long unsigned int ulcon;
-	long unsigned int ufcon;
+struct std_timing {
+	u8 hsize;
+	u8 vfreq_aspect;
 };
 
-struct s3c24xx_uart_info {
-	char *name;
-	unsigned int type;
-	unsigned int fifosize;
-	long unsigned int rx_fifomask;
-	long unsigned int rx_fifoshift;
-	long unsigned int rx_fifofull;
-	long unsigned int tx_fifomask;
-	long unsigned int tx_fifoshift;
-	long unsigned int tx_fifofull;
-	unsigned int def_clk_sel;
-	long unsigned int num_clks;
-	long unsigned int clksel_mask;
-	long unsigned int clksel_shift;
-	unsigned int has_divslot: 1;
+struct detailed_pixel_timing {
+	u8 hactive_lo;
+	u8 hblank_lo;
+	u8 hactive_hblank_hi;
+	u8 vactive_lo;
+	u8 vblank_lo;
+	u8 vactive_vblank_hi;
+	u8 hsync_offset_lo;
+	u8 hsync_pulse_width_lo;
+	u8 vsync_offset_pulse_width_lo;
+	u8 hsync_vsync_offset_pulse_width_hi;
+	u8 width_mm_lo;
+	u8 height_mm_lo;
+	u8 width_height_mm_hi;
+	u8 hborder;
+	u8 vborder;
+	u8 misc;
 };
 
-struct s3c24xx_serial_drv_data {
-	struct s3c24xx_uart_info *info;
-	struct s3c2410_uartcfg *def_cfg;
-	unsigned int fifosize[4];
+struct detailed_data_string {
+	u8 str[13];
 };
 
-struct s3c24xx_uart_dma {
-	unsigned int rx_chan_id;
-	unsigned int tx_chan_id;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
-	struct dma_chan *rx_chan;
-	struct dma_chan *tx_chan;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	char *rx_buf;
-	dma_addr_t tx_transfer_addr;
-	size_t rx_size;
-	size_t tx_size;
-	struct dma_async_tx_descriptor *tx_desc;
-	struct dma_async_tx_descriptor *rx_desc;
-	int tx_bytes_requested;
-	int rx_bytes_requested;
+struct detailed_data_monitor_range {
+	u8 min_vfreq;
+	u8 max_vfreq;
+	u8 min_hfreq_khz;
+	u8 max_hfreq_khz;
+	u8 pixel_clock_mhz;
+	u8 flags;
+	union {
+		struct {
+			u8 reserved;
+			u8 hfreq_start_khz;
+			u8 c;
+			__le16 m;
+			u8 k;
+			u8 j;
+		} __attribute__((packed)) gtf2;
+		struct {
+			u8 version;
+			u8 data1;
+			u8 data2;
+			u8 supported_aspects;
+			u8 flags;
+			u8 supported_scalings;
+			u8 preferred_refresh;
+		} cvt;
+	} formula;
+} __attribute__((packed));
+
+struct detailed_data_wpindex {
+	u8 white_yx_lo;
+	u8 white_x_hi;
+	u8 white_y_hi;
+	u8 gamma;
 };
 
-struct s3c24xx_uart_port {
-	unsigned char rx_claimed;
-	unsigned char tx_claimed;
-	unsigned char rx_enabled;
-	unsigned char tx_enabled;
-	unsigned int pm_level;
-	long unsigned int baudclk_rate;
-	unsigned int min_dma_size;
-	unsigned int rx_irq;
-	unsigned int tx_irq;
-	unsigned int tx_in_progress;
-	unsigned int tx_mode;
-	unsigned int rx_mode;
-	struct s3c24xx_uart_info *info;
-	struct clk *clk;
-	struct clk *baudclk;
-	struct uart_port port;
-	struct s3c24xx_serial_drv_data *drv_data;
-	struct s3c2410_uartcfg *cfg;
-	struct s3c24xx_uart_dma *dma;
+struct cvt_timing {
+	u8 code[3];
 };
 
-struct samsung_early_console_data {
-	u32 txfull_mask;
+struct detailed_non_pixel {
+	u8 pad1;
+	u8 type;
+	u8 pad2;
+	union {
+		struct detailed_data_string str;
+		struct detailed_data_monitor_range range;
+		struct detailed_data_wpindex color;
+		struct std_timing timings[6];
+		struct cvt_timing cvt[4];
+	} data;
+} __attribute__((packed));
+
+struct detailed_timing {
+	__le16 pixel_clock;
+	union {
+		struct detailed_pixel_timing pixel_data;
+		struct detailed_non_pixel other_data;
+	} data;
 };
 
-enum {
-	UARTDM_1P1 = 1,
-	UARTDM_1P2 = 2,
-	UARTDM_1P3 = 3,
-	UARTDM_1P4 = 4,
+struct edid {
+	u8 header[8];
+	u8 mfg_id[2];
+	u8 prod_code[2];
+	u32 serial;
+	u8 mfg_week;
+	u8 mfg_year;
+	u8 version;
+	u8 revision;
+	u8 input;
+	u8 width_cm;
+	u8 height_cm;
+	u8 gamma;
+	u8 features;
+	u8 red_green_lo;
+	u8 blue_white_lo;
+	u8 red_x;
+	u8 red_y;
+	u8 green_x;
+	u8 green_y;
+	u8 blue_x;
+	u8 blue_y;
+	u8 white_x;
+	u8 white_y;
+	struct est_timings established_timings;
+	struct std_timing standard_timings[8];
+	struct detailed_timing detailed_timings[4];
+	u8 extensions;
+	u8 checksum;
 };
 
-struct msm_dma {
-	struct dma_chan *chan;
-	enum dma_data_direction dir;
-	dma_addr_t phys;
-	unsigned char *virt;
-	dma_cookie_t cookie;
-	u32 enable_bit;
-	unsigned int count;
-	struct dma_async_tx_descriptor *desc;
+struct cea_sad {
+	u8 format;
+	u8 channels;
+	u8 freq;
+	u8 byte2;
 };
 
-struct msm_port {
-	struct uart_port uart;
-	char name[16];
-	struct clk *clk;
-	struct clk *pclk;
-	unsigned int imr;
-	int is_uartdm;
-	unsigned int old_snap_state;
-	bool break_detected;
-	struct msm_dma tx_dma;
-	struct msm_dma rx_dma;
-};
-
-struct msm_baud_map {
-	u16 divisor;
-	u8 code;
-	u8 rxstale;
-};
-
-struct cdns_uart {
-	struct uart_port *port;
-	struct clk *uartclk;
-	struct clk *pclk;
-	struct uart_driver *cdns_uart_driver;
-	unsigned int baud;
-	struct notifier_block clk_rate_change_nb;
+struct detailed_mode_closure {
+	struct drm_connector *connector;
+	const struct drm_edid *drm_edid;
+	bool preferred;
 	u32 quirks;
-	bool cts_override;
+	int modes;
 };
 
-struct cdns_platform_data {
+struct edid_quirk {
+	u32 panel_id;
 	u32 quirks;
 };
 
-enum {
-	UART_IRQ_SUM = 0,
-	UART_RX_IRQ = 0,
-	UART_TX_IRQ = 1,
-	UART_IRQ_COUNT = 2,
+struct minimode {
+	short int w;
+	short int h;
+	short int r;
+	short int rb;
 };
 
-struct uart_regs_layout {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-};
-
-struct uart_flags {
-	unsigned int ctrl_tx_rdy_int;
-	unsigned int ctrl_rx_rdy_int;
-	unsigned int stat_tx_rdy;
-	unsigned int stat_rx_rdy;
-};
-
-struct mvebu_uart_driver_data {
-	bool is_ext;
-	struct uart_regs_layout regs;
-	struct uart_flags flags;
-};
-
-struct mvebu_uart_pm_regs {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-	unsigned int stat;
-	unsigned int brdv;
-	unsigned int osamp;
-};
-
-struct mvebu_uart {
-	struct uart_port *port;
-	struct clk *clk;
-	int irq[2];
-	unsigned char *nb;
-	struct mvebu_uart_driver_data *data;
-	struct mvebu_uart_pm_regs pm_regs;
-};
-
-enum mctrl_gpio_idx {
-	UART_GPIO_CTS = 0,
-	UART_GPIO_DSR = 1,
-	UART_GPIO_DCD = 2,
-	UART_GPIO_RNG = 3,
-	UART_GPIO_RI = 3,
-	UART_GPIO_RTS = 4,
-	UART_GPIO_DTR = 5,
-	UART_GPIO_MAX = 6,
-};
-
-struct mctrl_gpios___2 {
-	struct uart_port *port;
-	struct gpio_desc *gpio[6];
-	int irq[6];
-	unsigned int mctrl_prev;
-	bool mctrl_on;
-};
-
-struct serdev_device;
-
-struct serdev_device_ops {
-	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct serdev_device *);
-};
-
-struct serdev_controller;
-
-struct serdev_device {
-	struct device dev;
-	int nr;
-	struct serdev_controller *ctrl;
-	const struct serdev_device_ops *ops;
-	struct completion write_comp;
-	struct mutex write_lock;
-};
-
-struct serdev_controller_ops;
-
-struct serdev_controller {
-	struct device dev;
-	unsigned int nr;
-	struct serdev_device *serdev;
-	const struct serdev_controller_ops *ops;
-};
-
-struct serdev_device_driver {
-	struct device_driver driver;
-	int (*probe)(struct serdev_device *);
-	void (*remove)(struct serdev_device *);
-};
-
-enum serdev_parity {
-	SERDEV_PARITY_NONE = 0,
-	SERDEV_PARITY_EVEN = 1,
-	SERDEV_PARITY_ODD = 2,
-};
-
-struct serdev_controller_ops {
-	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
-	void (*write_flush)(struct serdev_controller *);
-	int (*write_room)(struct serdev_controller *);
-	int (*open)(struct serdev_controller *);
-	void (*close)(struct serdev_controller *);
-	void (*set_flow_control)(struct serdev_controller *, bool);
-	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
-	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
-	void (*wait_until_sent)(struct serdev_controller *, long int);
-	int (*get_tiocm)(struct serdev_controller *);
-	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
-};
-
-struct acpi_serdev_lookup {
-	acpi_handle device_handle;
-	acpi_handle controller_handle;
-	int n;
+struct drm_edid_iter {
+	const struct drm_edid *drm_edid;
 	int index;
 };
 
-struct serport {
-	struct tty_port *port;
-	struct tty_struct *tty;
-	struct tty_driver *tty_drv;
-	int tty_idx;
-	long unsigned int flags;
+enum edid_block_status {
+	EDID_BLOCK_OK = 0,
+	EDID_BLOCK_READ_FAIL = 1,
+	EDID_BLOCK_NULL = 2,
+	EDID_BLOCK_ZERO = 3,
+	EDID_BLOCK_HEADER_CORRUPT = 4,
+	EDID_BLOCK_HEADER_REPAIR = 5,
+	EDID_BLOCK_HEADER_FIXED = 6,
+	EDID_BLOCK_CHECKSUM = 7,
+	EDID_BLOCK_VERSION = 8,
 };
 
-struct memdev {
-	const char *name;
-	umode_t mode;
-	const struct file_operations *fops;
-	fmode_t fmode;
-};
+typedef int read_block_fn(void *, u8 *, unsigned int, size_t);
 
-struct timer_rand_state {
-	cycles_t last_time;
-	long int last_delta;
-	long int last_delta2;
-};
+typedef void detailed_cb(const struct detailed_timing *, void *);
 
-struct trace_event_raw_add_device_randomness {
-	struct trace_entry ent;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__mix_pool_bytes {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_credit_entropy_bits {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bits;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_push_to_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int pool_bits;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_debit_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int debit_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_input_randomness {
-	struct trace_entry ent;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_disk_randomness {
-	struct trace_entry ent;
-	dev_t dev;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_xfer_secondary_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int xfer_bits;
-	int request_bits;
-	int pool_entropy;
-	int input_entropy;
-	char __data[0];
-};
-
-struct trace_event_raw_random__get_random_bytes {
-	struct trace_entry ent;
-	int nbytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__extract_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int nbytes;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random_read {
-	struct trace_entry ent;
-	int got_bits;
-	int need_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_urandom_read {
-	struct trace_entry ent;
-	int got_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_prandom_u32 {
-	struct trace_entry ent;
-	unsigned int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_add_device_randomness {};
-
-struct trace_event_data_offsets_random__mix_pool_bytes {};
-
-struct trace_event_data_offsets_credit_entropy_bits {};
-
-struct trace_event_data_offsets_push_to_pool {};
-
-struct trace_event_data_offsets_debit_entropy {};
-
-struct trace_event_data_offsets_add_input_randomness {};
-
-struct trace_event_data_offsets_add_disk_randomness {};
-
-struct trace_event_data_offsets_xfer_secondary_pool {};
-
-struct trace_event_data_offsets_random__get_random_bytes {};
-
-struct trace_event_data_offsets_random__extract_entropy {};
-
-struct trace_event_data_offsets_random_read {};
-
-struct trace_event_data_offsets_urandom_read {};
-
-struct trace_event_data_offsets_prandom_u32 {};
-
-typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);
-
-typedef void (*btf_trace_debit_entropy)(void *, const char *, int);
-
-typedef void (*btf_trace_add_input_randomness)(void *, int);
-
-typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);
-
-typedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);
-
-typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_random_read)(void *, int, int, int, int);
-
-typedef void (*btf_trace_urandom_read)(void *, int, int, int);
-
-typedef void (*btf_trace_prandom_u32)(void *, unsigned int);
-
-struct poolinfo {
-	int poolbitshift;
-	int poolwords;
-	int poolbytes;
-	int poolfracbits;
-	int tap1;
-	int tap2;
-	int tap3;
-	int tap4;
-	int tap5;
-};
-
-struct crng_state {
-	__u32 state[16];
-	long unsigned int init_time;
-	spinlock_t lock;
-};
-
-struct entropy_store {
-	const struct poolinfo *poolinfo;
-	__u32 *pool;
-	const char *name;
-	spinlock_t lock;
-	short unsigned int add_ptr;
-	short unsigned int input_rotate;
-	int entropy_count;
-	unsigned int initialized: 1;
-	unsigned int last_data_init: 1;
-	__u8 last_data[10];
-};
-
-struct fast_pool {
-	__u32 pool[4];
-	long unsigned int last;
-	short unsigned int reg_idx;
-	unsigned char count;
-};
-
-struct batched_entropy {
-	union {
-		u64 entropy_u64[8];
-		u32 entropy_u32[16];
-	};
-	unsigned int position;
-	spinlock_t batch_lock;
-};
-
-struct ttyprintk_port {
-	struct tty_port port;
-	spinlock_t spinlock;
-};
-
-enum tpm2_startup_types {
-	TPM2_SU_CLEAR = 0,
-	TPM2_SU_STATE = 1,
-};
-
-enum tpm_chip_flags {
-	TPM_CHIP_FLAG_TPM2 = 2,
-	TPM_CHIP_FLAG_IRQ = 4,
-	TPM_CHIP_FLAG_VIRTUAL = 8,
-	TPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,
-	TPM_CHIP_FLAG_ALWAYS_POWERED = 32,
-	TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,
-};
-
-enum tpm2_structures {
-	TPM2_ST_NO_SESSIONS = 32769,
-	TPM2_ST_SESSIONS = 32770,
-};
-
-enum tpm2_return_codes {
-	TPM2_RC_SUCCESS = 0,
-	TPM2_RC_HASH = 131,
-	TPM2_RC_HANDLE = 139,
-	TPM2_RC_INITIALIZE = 256,
-	TPM2_RC_FAILURE = 257,
-	TPM2_RC_DISABLED = 288,
-	TPM2_RC_COMMAND_CODE = 323,
-	TPM2_RC_TESTING = 2314,
-	TPM2_RC_REFERENCE_H0 = 2320,
-	TPM2_RC_RETRY = 2338,
-};
-
-struct tpm_header {
-	__be16 tag;
-	__be32 length;
-	union {
-		__be32 ordinal;
-		__be32 return_code;
-	};
-} __attribute__((packed));
-
-struct file_priv {
-	struct tpm_chip *chip;
-	struct tpm_space *space;
-	struct mutex buffer_mutex;
-	struct timer_list user_read_timer;
-	struct work_struct timeout_work;
-	struct work_struct async_work;
-	wait_queue_head_t async_wait;
-	ssize_t response_length;
-	bool response_read;
-	bool command_enqueued;
-	u8 data_buffer[4096];
-};
-
-enum TPM_OPS_FLAGS {
-	TPM_OPS_AUTO_STARTUP = 1,
-};
-
-enum tpm2_timeouts {
-	TPM2_TIMEOUT_A = 750,
-	TPM2_TIMEOUT_B = 2000,
-	TPM2_TIMEOUT_C = 200,
-	TPM2_TIMEOUT_D = 30,
-	TPM2_DURATION_SHORT = 20,
-	TPM2_DURATION_MEDIUM = 750,
-	TPM2_DURATION_LONG = 2000,
-	TPM2_DURATION_LONG_LONG = 300000,
-	TPM2_DURATION_DEFAULT = 120000,
-};
-
-enum tpm2_command_codes {
-	TPM2_CC_FIRST = 287,
-	TPM2_CC_HIERARCHY_CONTROL = 289,
-	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
-	TPM2_CC_CREATE_PRIMARY = 305,
-	TPM2_CC_SEQUENCE_COMPLETE = 318,
-	TPM2_CC_SELF_TEST = 323,
-	TPM2_CC_STARTUP = 324,
-	TPM2_CC_SHUTDOWN = 325,
-	TPM2_CC_NV_READ = 334,
-	TPM2_CC_CREATE = 339,
-	TPM2_CC_LOAD = 343,
-	TPM2_CC_SEQUENCE_UPDATE = 348,
-	TPM2_CC_UNSEAL = 350,
-	TPM2_CC_CONTEXT_LOAD = 353,
-	TPM2_CC_CONTEXT_SAVE = 354,
-	TPM2_CC_FLUSH_CONTEXT = 357,
-	TPM2_CC_VERIFY_SIGNATURE = 375,
-	TPM2_CC_GET_CAPABILITY = 378,
-	TPM2_CC_GET_RANDOM = 379,
-	TPM2_CC_PCR_READ = 382,
-	TPM2_CC_PCR_EXTEND = 386,
-	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
-	TPM2_CC_HASH_SEQUENCE_START = 390,
-	TPM2_CC_CREATE_LOADED = 401,
-	TPM2_CC_LAST = 403,
-};
-
-struct tpm_buf {
+struct stereo_mandatory_mode {
+	int width;
+	int height;
+	int vrefresh;
 	unsigned int flags;
-	u8 *data;
 };
 
-enum tpm_timeout {
-	TPM_TIMEOUT = 5,
-	TPM_TIMEOUT_RETRY = 100,
-	TPM_TIMEOUT_RANGE_US = 300,
-	TPM_TIMEOUT_POLL = 1,
-	TPM_TIMEOUT_USECS_MIN = 100,
-	TPM_TIMEOUT_USECS_MAX = 500,
+struct cea_db_iter {
+	struct drm_edid_iter edid_iter;
+	struct displayid_iter displayid_iter;
+	const u8 *collection;
+	int index;
+	int end;
 };
 
-enum tpm_buf_flags {
-	TPM_BUF_OVERFLOW = 1,
+struct cea_db {
+	u8 tag_length;
+	u8 data[0];
 };
 
-struct stclear_flags_t {
-	__be16 tag;
-	u8 deactivated;
-	u8 disableForceClear;
-	u8 physicalPresence;
-	u8 physicalPresenceLock;
-	u8 bGlobalLock;
-} __attribute__((packed));
-
-struct tpm1_version {
-	u8 major;
-	u8 minor;
-	u8 rev_major;
-	u8 rev_minor;
+struct drm_mode_create_lease {
+	__u64 object_ids;
+	__u32 object_count;
+	__u32 flags;
+	__u32 lessee_id;
+	__u32 fd;
 };
 
-struct tpm1_version2 {
-	__be16 tag;
-	struct tpm1_version version;
+struct drm_mode_list_lessees {
+	__u32 count_lessees;
+	__u32 pad;
+	__u64 lessees_ptr;
 };
 
-struct timeout_t {
-	__be32 a;
-	__be32 b;
-	__be32 c;
-	__be32 d;
+struct drm_mode_get_lease {
+	__u32 count_objects;
+	__u32 pad;
+	__u64 objects_ptr;
 };
 
-struct duration_t {
-	__be32 tpm_short;
-	__be32 tpm_medium;
-	__be32 tpm_long;
+struct drm_mode_revoke_lease {
+	__u32 lessee_id;
 };
 
-struct permanent_flags_t {
-	__be16 tag;
-	u8 disable;
-	u8 ownership;
-	u8 deactivated;
-	u8 readPubek;
-	u8 disableOwnerClear;
-	u8 allowMaintenance;
-	u8 physicalPresenceLifetimeLock;
-	u8 physicalPresenceHWEnable;
-	u8 physicalPresenceCMDEnable;
-	u8 CEKPUsed;
-	u8 TPMpost;
-	u8 TPMpostLock;
-	u8 FIPS;
-	u8 operator;
-	u8 enableRevokeEK;
-	u8 nvLocked;
-	u8 readSRKPub;
-	u8 tpmEstablished;
-	u8 maintenanceDone;
-	u8 disableFullDALogicInfo;
-};
-
-typedef union {
-	struct permanent_flags_t perm_flags;
-	struct stclear_flags_t stclear_flags;
-	__u8 owned;
-	__be32 num_pcrs;
-	struct tpm1_version version1;
-	struct tpm1_version2 version2;
-	__be32 manufacturer_id;
-	struct timeout_t timeout;
-	struct duration_t duration;
-} cap_t;
-
-enum tpm_capabilities {
-	TPM_CAP_FLAG = 4,
-	TPM_CAP_PROP = 5,
-	TPM_CAP_VERSION_1_1 = 6,
-	TPM_CAP_VERSION_1_2 = 26,
-};
-
-enum tpm_sub_capabilities {
-	TPM_CAP_PROP_PCR = 257,
-	TPM_CAP_PROP_MANUFACTURER = 259,
-	TPM_CAP_FLAG_PERM = 264,
-	TPM_CAP_FLAG_VOL = 265,
-	TPM_CAP_PROP_OWNER = 273,
-	TPM_CAP_PROP_TIS_TIMEOUT = 277,
-	TPM_CAP_PROP_TIS_DURATION = 288,
-};
-
-struct tpm1_get_random_out {
-	__be32 rng_data_len;
-	u8 rng_data[128];
-};
-
-enum tpm2_const {
-	TPM2_PLATFORM_PCR = 24,
-	TPM2_PCR_SELECT_MIN = 3,
-};
-
-enum tpm2_permanent_handles {
-	TPM2_RS_PW = 1073741833,
-};
-
-enum tpm2_capabilities {
-	TPM2_CAP_HANDLES = 1,
-	TPM2_CAP_COMMANDS = 2,
-	TPM2_CAP_PCRS = 5,
-	TPM2_CAP_TPM_PROPERTIES = 6,
-};
-
-enum tpm2_properties {
-	TPM_PT_TOTAL_COMMANDS = 297,
-};
-
-enum tpm2_cc_attrs {
-	TPM2_CC_ATTR_CHANDLES = 25,
-	TPM2_CC_ATTR_RHANDLE = 28,
-};
-
-struct tpm2_hash {
-	unsigned int crypto_id;
-	unsigned int tpm_id;
-};
-
-struct tpm2_pcr_read_out {
-	__be32 update_cnt;
-	__be32 pcr_selects_cnt;
-	__be16 hash_alg;
-	u8 pcr_select_size;
-	u8 pcr_select[3];
-	__be32 digests_cnt;
-	__be16 digest_size;
-	u8 digest[0];
-} __attribute__((packed));
-
-struct tpm2_null_auth_area {
-	__be32 handle;
-	__be16 nonce_size;
-	u8 attributes;
-	__be16 auth_size;
-} __attribute__((packed));
-
-struct tpm2_get_random_out {
-	__be16 size;
-	u8 buffer[128];
-};
-
-struct tpm2_get_cap_out {
-	u8 more_data;
-	__be32 subcap_id;
-	__be32 property_cnt;
-	__be32 property_id;
-	__be32 value;
-} __attribute__((packed));
-
-struct tpm2_pcr_selection {
-	__be16 hash_alg;
-	u8 size_of_select;
-	u8 pcr_select[3];
-};
-
-struct tpmrm_priv {
-	struct file_priv priv;
-	struct tpm_space space;
-};
-
-enum tpm2_handle_types {
-	TPM2_HT_HMAC_SESSION = 33554432,
-	TPM2_HT_POLICY_SESSION = 50331648,
-	TPM2_HT_TRANSIENT = 2147483648,
-};
-
-struct tpm2_context {
-	__be64 sequence;
-	__be32 saved_handle;
-	__be32 hierarchy;
-	__be16 blob_size;
-} __attribute__((packed));
-
-struct tpm2_cap_handles {
-	u8 more_data;
-	__be32 capability;
-	__be32 count;
-	__be32 handles[0];
-} __attribute__((packed));
-
-struct tpm_readpubek_out {
-	u8 algorithm[4];
-	u8 encscheme[2];
-	u8 sigscheme[2];
-	__be32 paramsize;
-	u8 parameters[12];
-	__be32 keysize;
-	u8 modulus[256];
-	u8 checksum[20];
-};
-
-struct tcpa_event {
-	u32 pcr_index;
-	u32 event_type;
-	u8 pcr_value[20];
-	u32 event_size;
-	u8 event_data[0];
-};
-
-enum tcpa_event_types {
-	PREBOOT = 0,
-	POST_CODE = 1,
-	UNUSED = 2,
-	NO_ACTION = 3,
-	SEPARATOR = 4,
-	ACTION = 5,
-	EVENT_TAG = 6,
-	SCRTM_CONTENTS = 7,
-	SCRTM_VERSION = 8,
-	CPU_MICROCODE = 9,
-	PLATFORM_CONFIG_FLAGS = 10,
-	TABLE_OF_DEVICES = 11,
-	COMPACT_HASH = 12,
-	IPL = 13,
-	IPL_PARTITION_DATA = 14,
-	NONHOST_CODE = 15,
-	NONHOST_CONFIG = 16,
-	NONHOST_INFO = 17,
-};
-
-struct tcpa_pc_event {
-	u32 event_id;
-	u32 event_size;
-	u8 event_data[0];
-};
-
-enum tcpa_pc_event_ids {
-	SMBIOS = 1,
-	BIS_CERT = 2,
-	POST_BIOS_ROM = 3,
-	ESCD = 4,
-	CMOS = 5,
-	NVRAM = 6,
-	OPTION_ROM_EXEC = 7,
-	OPTION_ROM_CONFIG = 8,
-	OPTION_ROM_MICROCODE = 10,
-	S_CRTM_VERSION = 11,
-	S_CRTM_CONTENTS = 12,
-	POST_CONTENTS = 13,
-	HOST_TABLE_OF_DEVICES = 14,
-};
-
-struct tcg_efi_specid_event_algs {
-	u16 alg_id;
-	u16 digest_size;
-};
-
-struct tcg_efi_specid_event_head {
-	u8 signature[16];
-	u32 platform_class;
-	u8 spec_version_minor;
-	u8 spec_version_major;
-	u8 spec_errata;
-	u8 uintnsize;
-	u32 num_algs;
-	struct tcg_efi_specid_event_algs digest_sizes[0];
-};
-
-struct tcg_pcr_event {
-	u32 pcr_idx;
-	u32 event_type;
-	u8 digest[20];
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_event_field {
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_pcr_event2_head {
-	u32 pcr_idx;
-	u32 event_type;
-	u32 count;
-	struct tpm_digest digests[0];
-};
-
-struct acpi_table_tpm2 {
-	struct acpi_table_header header;
-	u16 platform_class;
-	u16 reserved;
-	u64 control_address;
-	u32 start_method;
-} __attribute__((packed));
-
-struct acpi_tpm2_phy {
-	u8 start_method_specific[12];
-	u32 log_area_minimum_length;
-	u64 log_area_start_address;
-};
-
-enum bios_platform_class {
-	BIOS_CLIENT = 0,
-	BIOS_SERVER = 1,
-};
-
-struct client_hdr {
-	u32 log_max_len;
-	u64 log_start_addr;
-} __attribute__((packed));
-
-struct server_hdr {
-	u16 reserved;
-	u64 log_max_len;
-	u64 log_start_addr;
-} __attribute__((packed));
-
-struct acpi_tcpa {
-	struct acpi_table_header hdr;
-	u16 platform_class;
-	union {
-		struct client_hdr client;
-		struct server_hdr server;
-	};
-} __attribute__((packed));
-
-struct linux_efi_tpm_eventlog {
-	u32 size;
-	u32 final_events_preboot_size;
-	u8 version;
-	u8 log[0];
-};
-
-struct efi_tcg2_final_events_table {
-	u64 version;
-	u64 nr_events;
-	u8 events[0];
-};
-
-enum tis_access {
-	TPM_ACCESS_VALID = 128,
-	TPM_ACCESS_ACTIVE_LOCALITY = 32,
-	TPM_ACCESS_REQUEST_PENDING = 4,
-	TPM_ACCESS_REQUEST_USE = 2,
-};
-
-enum tis_status {
-	TPM_STS_VALID = 128,
-	TPM_STS_COMMAND_READY = 64,
-	TPM_STS_GO = 32,
-	TPM_STS_DATA_AVAIL = 16,
-	TPM_STS_DATA_EXPECT = 8,
-	TPM_STS_READ_ZERO = 35,
-};
-
-enum tis_int_flags {
-	TPM_GLOBAL_INT_ENABLE = 2147483648,
-	TPM_INTF_BURST_COUNT_STATIC = 256,
-	TPM_INTF_CMD_READY_INT = 128,
-	TPM_INTF_INT_EDGE_FALLING = 64,
-	TPM_INTF_INT_EDGE_RISING = 32,
-	TPM_INTF_INT_LEVEL_LOW = 16,
-	TPM_INTF_INT_LEVEL_HIGH = 8,
-	TPM_INTF_LOCALITY_CHANGE_INT = 4,
-	TPM_INTF_STS_VALID_INT = 2,
-	TPM_INTF_DATA_AVAIL_INT = 1,
-};
-
-enum tis_defaults {
-	TIS_MEM_LEN = 20480,
-	TIS_SHORT_TIMEOUT = 750,
-	TIS_LONG_TIMEOUT = 2000,
-};
-
-enum tpm_tis_flags {
-	TPM_TIS_ITPM_WORKAROUND = 1,
-};
-
-struct tpm_tis_phy_ops;
-
-struct tpm_tis_data {
-	u16 manufacturer_id;
-	int locality;
-	int irq;
-	bool irq_tested;
+struct drm_named_mode {
+	const char *name;
+	unsigned int pixel_clock_khz;
+	unsigned int xres;
+	unsigned int yres;
 	unsigned int flags;
-	void *ilb_base_addr;
-	u16 clkrun_enabled;
-	wait_queue_head_t int_queue;
-	wait_queue_head_t read_queue;
-	const struct tpm_tis_phy_ops *phy_ops;
-	short unsigned int rng_quality;
 };
 
-struct tpm_tis_phy_ops {
-	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *);
-	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *);
-	int (*read16)(struct tpm_tis_data *, u32, u16 *);
-	int (*read32)(struct tpm_tis_data *, u32, u32 *);
-	int (*write32)(struct tpm_tis_data *, u32, u32);
+struct drm_mode_property_enum {
+	__u64 value;
+	char name[32];
 };
 
-struct tis_vendor_durations_override {
-	u32 did_vid;
-	struct tpm1_version version;
-	long unsigned int durations[3];
+struct drm_mode_get_property {
+	__u64 values_ptr;
+	__u64 enum_blob_ptr;
+	__u32 prop_id;
+	__u32 flags;
+	char name[32];
+	__u32 count_values;
+	__u32 count_enum_blobs;
 };
 
-struct tis_vendor_timeout_override {
-	u32 did_vid;
-	long unsigned int timeout_us[4];
+struct drm_mode_get_blob {
+	__u32 blob_id;
+	__u32 length;
+	__u64 data;
 };
 
-struct tpm_info {
-	struct resource res;
-	int irq;
+struct drm_mode_create_blob {
+	__u64 data;
+	__u32 length;
+	__u32 blob_id;
 };
 
-struct tpm_tis_tcg_phy {
-	struct tpm_tis_data priv;
-	void *iobase;
+struct drm_mode_destroy_blob {
+	__u32 blob_id;
 };
 
-enum crb_defaults {
-	CRB_ACPI_START_REVISION_ID = 1,
-	CRB_ACPI_START_INDEX = 1,
+struct drm_property_enum {
+	uint64_t value;
+	struct list_head head;
+	char name[32];
 };
 
-enum crb_loc_ctrl {
-	CRB_LOC_CTRL_REQUEST_ACCESS = 1,
-	CRB_LOC_CTRL_RELINQUISH = 2,
+enum drm_vblank_seq_type {
+	_DRM_VBLANK_ABSOLUTE = 0,
+	_DRM_VBLANK_RELATIVE = 1,
+	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
+	_DRM_VBLANK_EVENT = 67108864,
+	_DRM_VBLANK_FLIP = 134217728,
+	_DRM_VBLANK_NEXTONMISS = 268435456,
+	_DRM_VBLANK_SECONDARY = 536870912,
+	_DRM_VBLANK_SIGNAL = 1073741824,
 };
 
-enum crb_loc_state {
-	CRB_LOC_STATE_LOC_ASSIGNED = 2,
-	CRB_LOC_STATE_TPM_REG_VALID_STS = 128,
+struct drm_wait_vblank_request {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long unsigned int signal;
 };
 
-enum crb_ctrl_req {
-	CRB_CTRL_REQ_CMD_READY = 1,
-	CRB_CTRL_REQ_GO_IDLE = 2,
+struct drm_wait_vblank_reply {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long int tval_sec;
+	long int tval_usec;
 };
 
-enum crb_ctrl_sts {
-	CRB_CTRL_STS_ERROR = 1,
-	CRB_CTRL_STS_TPM_IDLE = 2,
+union drm_wait_vblank {
+	struct drm_wait_vblank_request request;
+	struct drm_wait_vblank_reply reply;
 };
 
-enum crb_start {
-	CRB_START_INVOKE = 1,
+struct drm_modeset_ctl {
+	__u32 crtc;
+	__u32 cmd;
 };
 
-enum crb_cancel {
-	CRB_CANCEL_INVOKE = 1,
+struct drm_crtc_get_sequence {
+	__u32 crtc_id;
+	__u32 active;
+	__u64 sequence;
+	__s64 sequence_ns;
 };
 
-struct crb_regs_head {
-	u32 loc_state;
-	u32 reserved1;
-	u32 loc_ctrl;
-	u32 loc_sts;
-	u8 reserved2[32];
-	u64 intf_id;
-	u64 ctrl_ext;
+struct drm_crtc_queue_sequence {
+	__u32 crtc_id;
+	__u32 flags;
+	__u64 sequence;
+	__u64 user_data;
 };
 
-struct crb_regs_tail {
-	u32 ctrl_req;
-	u32 ctrl_sts;
-	u32 ctrl_cancel;
-	u32 ctrl_start;
-	u32 ctrl_int_enable;
-	u32 ctrl_int_sts;
-	u32 ctrl_cmd_size;
-	u32 ctrl_cmd_pa_low;
-	u32 ctrl_cmd_pa_high;
-	u32 ctrl_rsp_size;
-	u64 ctrl_rsp_pa;
-};
-
-enum crb_status {
-	CRB_DRV_STS_COMPLETE = 1,
-};
-
-struct crb_priv {
-	u32 sm;
-	const char *hid;
-	struct crb_regs_head *regs_h;
-	struct crb_regs_tail *regs_t;
-	u8 *cmd;
-	u8 *rsp;
-	u32 cmd_size;
-	u32 smc_func_id;
-};
-
-struct tpm2_crb_smc {
-	u32 interrupt;
-	u8 interrupt_flags;
-	u8 op_flags;
-	u16 reserved2;
-	u32 smc_func_id;
-};
-
-enum io_pgtable_fmt {
-	ARM_32_LPAE_S1 = 0,
-	ARM_32_LPAE_S2 = 1,
-	ARM_64_LPAE_S1 = 2,
-	ARM_64_LPAE_S2 = 3,
-	ARM_V7S = 4,
-	ARM_MALI_LPAE = 5,
-	IO_PGTABLE_NUM_FMTS = 6,
-};
-
-struct iommu_flush_ops {
-	void (*tlb_flush_all)(void *);
-	void (*tlb_flush_walk)(long unsigned int, size_t, size_t, void *);
-	void (*tlb_flush_leaf)(long unsigned int, size_t, size_t, void *);
-	void (*tlb_add_page)(struct iommu_iotlb_gather *, long unsigned int, size_t, void *);
-};
-
-struct io_pgtable_cfg {
-	long unsigned int quirks;
-	long unsigned int pgsize_bitmap;
-	unsigned int ias;
-	unsigned int oas;
-	bool coherent_walk;
-	const struct iommu_flush_ops *tlb;
-	struct device *iommu_dev;
-	union {
-		struct {
-			u64 ttbr;
-			struct {
-				u32 ips: 3;
-				u32 tg: 2;
-				u32 sh: 2;
-				u32 orgn: 2;
-				u32 irgn: 2;
-				u32 tsz: 6;
-			} tcr;
-			u64 mair;
-		} arm_lpae_s1_cfg;
-		struct {
-			u64 vttbr;
-			struct {
-				u32 ps: 3;
-				u32 tg: 2;
-				u32 sh: 2;
-				u32 orgn: 2;
-				u32 irgn: 2;
-				u32 sl: 2;
-				u32 tsz: 6;
-			} vtcr;
-		} arm_lpae_s2_cfg;
-		struct {
-			u32 ttbr;
-			u32 tcr;
-			u32 nmrr;
-			u32 prrr;
-		} arm_v7s_cfg;
-		struct {
-			u64 transtab;
-			u64 memattr;
-		} arm_mali_lpae_cfg;
-	};
-};
-
-struct io_pgtable_ops {
-	int (*map)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct io_pgtable_ops *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *, long unsigned int);
-};
-
-enum arm_smmu_s2cr_privcfg {
-	S2CR_PRIVCFG_DEFAULT = 0,
-	S2CR_PRIVCFG_DIPAN = 1,
-	S2CR_PRIVCFG_UNPRIV = 2,
-	S2CR_PRIVCFG_PRIV = 3,
-};
-
-enum arm_smmu_s2cr_type {
-	S2CR_TYPE_TRANS = 0,
-	S2CR_TYPE_BYPASS = 1,
-	S2CR_TYPE_FAULT = 2,
-};
-
-enum arm_smmu_cbar_type {
-	CBAR_TYPE_S2_TRANS = 0,
-	CBAR_TYPE_S1_TRANS_S2_BYPASS = 1,
-	CBAR_TYPE_S1_TRANS_S2_FAULT = 2,
-	CBAR_TYPE_S1_TRANS_S2_TRANS = 3,
-};
-
-enum arm_smmu_arch_version {
-	ARM_SMMU_V1 = 0,
-	ARM_SMMU_V1_64K = 1,
-	ARM_SMMU_V2 = 2,
-};
-
-enum arm_smmu_implementation {
-	GENERIC_SMMU = 0,
-	ARM_MMU500 = 1,
-	CAVIUM_SMMUV2 = 2,
-	QCOM_SMMUV2 = 3,
-};
-
-struct arm_smmu_s2cr {
-	struct iommu_group *group;
-	int count;
-	enum arm_smmu_s2cr_type type;
-	enum arm_smmu_s2cr_privcfg privcfg;
-	u8 cbndx;
-};
-
-struct arm_smmu_smr {
-	u16 mask;
-	u16 id;
-	bool valid;
-	bool pinned;
-};
-
-struct arm_smmu_impl;
-
-struct arm_smmu_cb;
-
-struct arm_smmu_device {
-	struct device *dev;
-	void *base;
-	unsigned int numpage;
-	unsigned int pgshift;
-	u32 features;
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
-	const struct arm_smmu_impl *impl;
-	u32 num_context_banks;
-	u32 num_s2_context_banks;
-	long unsigned int context_map[2];
-	struct arm_smmu_cb *cbs;
-	atomic_t irptndx;
-	u32 num_mapping_groups;
-	u16 streamid_mask;
-	u16 smr_mask_mask;
-	struct arm_smmu_smr *smrs;
-	struct arm_smmu_s2cr *s2crs;
-	struct mutex stream_map_mutex;
-	long unsigned int va_size;
-	long unsigned int ipa_size;
-	long unsigned int pa_size;
-	long unsigned int pgsize_bitmap;
-	u32 num_global_irqs;
-	u32 num_context_irqs;
-	unsigned int *irqs;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	spinlock_t global_sync_lock;
-	struct iommu_device iommu;
-};
-
-struct arm_smmu_domain;
-
-struct arm_smmu_impl {
-	u32 (*read_reg)(struct arm_smmu_device *, int, int);
-	void (*write_reg)(struct arm_smmu_device *, int, int, u32);
-	u64 (*read_reg64)(struct arm_smmu_device *, int, int);
-	void (*write_reg64)(struct arm_smmu_device *, int, int, u64);
-	int (*cfg_probe)(struct arm_smmu_device *);
-	int (*reset)(struct arm_smmu_device *);
-	int (*init_context)(struct arm_smmu_domain *, struct io_pgtable_cfg *, struct device *);
-	void (*tlb_sync)(struct arm_smmu_device *, int, int, int);
-	int (*def_domain_type)(struct device *);
-	irqreturn_t (*global_fault)(int, void *);
-	irqreturn_t (*context_fault)(int, void *);
-	int (*alloc_context_bank)(struct arm_smmu_domain *, struct arm_smmu_device *, struct device *, int);
-	void (*write_s2cr)(struct arm_smmu_device *, int);
-};
-
-struct arm_smmu_cfg;
-
-struct arm_smmu_cb {
-	u64 ttbr[2];
-	u32 tcr[2];
-	u32 mair[2];
-	struct arm_smmu_cfg *cfg;
-};
-
-enum arm_smmu_context_fmt {
-	ARM_SMMU_CTX_FMT_NONE = 0,
-	ARM_SMMU_CTX_FMT_AARCH64 = 1,
-	ARM_SMMU_CTX_FMT_AARCH32_L = 2,
-	ARM_SMMU_CTX_FMT_AARCH32_S = 3,
-};
-
-struct arm_smmu_cfg {
-	u8 cbndx;
-	u8 irptndx;
-	union {
-		u16 asid;
-		u16 vmid;
-	};
-	enum arm_smmu_cbar_type cbar;
-	enum arm_smmu_context_fmt fmt;
-};
-
-enum arm_smmu_domain_stage {
-	ARM_SMMU_DOMAIN_S1 = 0,
-	ARM_SMMU_DOMAIN_S2 = 1,
-	ARM_SMMU_DOMAIN_NESTED = 2,
-	ARM_SMMU_DOMAIN_BYPASS = 3,
-};
-
-struct arm_smmu_domain {
-	struct arm_smmu_device *smmu;
-	struct io_pgtable_ops *pgtbl_ops;
-	const struct iommu_flush_ops *flush_ops;
-	struct arm_smmu_cfg cfg;
-	enum arm_smmu_domain_stage stage;
-	bool non_strict;
-	struct mutex init_mutex;
-	spinlock_t cb_lock;
-	struct iommu_domain domain;
-};
-
-struct arm_smmu_master_cfg {
-	struct arm_smmu_device *smmu;
-	s16 smendx[0];
-};
-
-struct arm_smmu_match_data {
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
-};
-
-struct cavium_smmu {
-	struct arm_smmu_device smmu;
-	u32 id_base;
-};
-
-struct nvidia_smmu {
-	struct arm_smmu_device smmu;
-	void *bases[2];
-};
-
-struct qcom_smmu {
-	struct arm_smmu_device smmu;
-	bool bypass_quirk;
-	u8 bypass_cbndx;
-};
-
-enum pri_resp {
-	PRI_RESP_DENY = 0,
-	PRI_RESP_FAIL = 1,
-	PRI_RESP_SUCC = 2,
-};
-
-struct arm_smmu_cmdq_ent {
-	u8 opcode;
-	bool substream_valid;
-	union {
-		struct {
-			u32 sid;
-			u8 size;
-			u64 addr;
-		} prefetch;
-		struct {
-			u32 sid;
-			u32 ssid;
-			union {
-				bool leaf;
-				u8 span;
-			};
-		} cfgi;
-		struct {
-			u8 num;
-			u8 scale;
-			u16 asid;
-			u16 vmid;
-			bool leaf;
-			u8 ttl;
-			u8 tg;
-			u64 addr;
-		} tlbi;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u64 addr;
-			u8 size;
-			bool global;
-		} atc;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u16 grpid;
-			enum pri_resp resp;
-		} pri;
-		struct {
-			u64 msiaddr;
-		} sync;
-	};
-};
-
-struct arm_smmu_ll_queue {
-	union {
-		u64 val;
-		struct {
-			u32 prod;
-			u32 cons;
-		};
-		struct {
-			atomic_t prod;
-			atomic_t cons;
-		} atomic;
-		u8 __pad[64];
-	};
-	u32 max_n_shift;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_queue {
-	struct arm_smmu_ll_queue llq;
-	int irq;
-	__le64 *base;
-	dma_addr_t base_dma;
-	u64 q_base;
-	size_t ent_dwords;
-	u32 *prod_reg;
-	u32 *cons_reg;
-	long: 64;
-};
-
-struct arm_smmu_queue_poll {
-	ktime_t timeout;
-	unsigned int delay;
-	unsigned int spin_cnt;
-	bool wfe;
-};
-
-struct arm_smmu_cmdq {
-	struct arm_smmu_queue q;
-	atomic_long_t *valid_map;
-	atomic_t owner_prod;
-	atomic_t lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_cmdq_batch {
-	u64 cmds[128];
-	int num;
-};
-
-struct arm_smmu_evtq {
-	struct arm_smmu_queue q;
-	u32 max_stalls;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_priq {
-	struct arm_smmu_queue q;
-};
-
-struct arm_smmu_strtab_l1_desc {
-	u8 span;
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
-};
-
-struct arm_smmu_ctx_desc {
-	u16 asid;
-	u64 ttbr;
-	u64 tcr;
-	u64 mair;
-	refcount_t refs;
-	struct mm_struct *mm;
-};
-
-struct arm_smmu_l1_ctx_desc {
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
-};
-
-struct arm_smmu_ctx_desc_cfg {
-	__le64 *cdtab;
-	dma_addr_t cdtab_dma;
-	struct arm_smmu_l1_ctx_desc *l1_desc;
-	unsigned int num_l1_ents;
-};
-
-struct arm_smmu_s1_cfg {
-	struct arm_smmu_ctx_desc_cfg cdcfg;
-	struct arm_smmu_ctx_desc cd;
-	u8 s1fmt;
-	u8 s1cdmax;
-};
-
-struct arm_smmu_s2_cfg {
-	u16 vmid;
-	u64 vttbr;
-	u64 vtcr;
-};
-
-struct arm_smmu_strtab_cfg {
-	__le64 *strtab;
-	dma_addr_t strtab_dma;
-	struct arm_smmu_strtab_l1_desc *l1_desc;
-	unsigned int num_l1_ents;
-	u64 strtab_base;
-	u32 strtab_base_cfg;
-};
-
-struct arm_smmu_device___2 {
-	struct device *dev;
-	void *base;
-	void *page1;
-	u32 features;
-	u32 options;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct arm_smmu_cmdq cmdq;
-	struct arm_smmu_evtq evtq;
-	struct arm_smmu_priq priq;
-	int gerr_irq;
-	int combined_irq;
-	long unsigned int ias;
-	long unsigned int oas;
-	long unsigned int pgsize_bitmap;
-	unsigned int asid_bits;
-	unsigned int vmid_bits;
-	long unsigned int vmid_map[1024];
-	unsigned int ssid_bits;
-	unsigned int sid_bits;
-	struct arm_smmu_strtab_cfg strtab_cfg;
-	struct iommu_device iommu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct arm_smmu_domain___2;
-
-struct arm_smmu_master {
-	struct arm_smmu_device___2 *smmu;
-	struct device *dev;
-	struct arm_smmu_domain___2 *domain;
-	struct list_head domain_head;
-	u32 *sids;
-	unsigned int num_sids;
-	bool ats_enabled;
-	bool sva_enabled;
-	struct list_head bonds;
-	unsigned int ssid_bits;
-};
-
-struct arm_smmu_domain___2 {
-	struct arm_smmu_device___2 *smmu;
-	struct mutex init_mutex;
-	struct io_pgtable_ops *pgtbl_ops;
-	bool non_strict;
-	atomic_t nr_ats_masters;
-	enum arm_smmu_domain_stage stage;
-	union {
-		struct arm_smmu_s1_cfg s1_cfg;
-		struct arm_smmu_s2_cfg s2_cfg;
-	};
-	struct iommu_domain domain;
-	struct list_head devices;
-	spinlock_t devices_lock;
-};
-
-enum arm_smmu_msi_index {
-	EVTQ_MSI_INDEX = 0,
-	GERROR_MSI_INDEX = 1,
-	PRIQ_MSI_INDEX = 2,
-	ARM_SMMU_MAX_MSIS = 3,
-};
-
-struct arm_smmu_option_prop {
-	u32 opt;
-	const char *prop;
-};
-
-struct iommu_group {
-	struct kobject kobj;
-	struct kobject *devices_kobj;
-	struct list_head devices;
-	struct mutex mutex;
-	struct blocking_notifier_head notifier;
-	void *iommu_data;
-	void (*iommu_data_release)(void *);
-	char *name;
-	int id;
-	struct iommu_domain *default_domain;
-	struct iommu_domain *domain;
-	struct list_head entry;
-};
-
-typedef unsigned int ioasid_t;
-
-enum iommu_fault_type {
-	IOMMU_FAULT_DMA_UNRECOV = 1,
-	IOMMU_FAULT_PAGE_REQ = 2,
-};
-
-enum iommu_inv_granularity {
-	IOMMU_INV_GRANU_DOMAIN = 0,
-	IOMMU_INV_GRANU_PASID = 1,
-	IOMMU_INV_GRANU_ADDR = 2,
-	IOMMU_INV_GRANU_NR = 3,
-};
-
-struct fsl_mc_obj_desc {
-	char type[16];
-	int id;
-	u16 vendor;
-	u16 ver_major;
-	u16 ver_minor;
-	u8 irq_count;
-	u8 region_count;
-	u32 state;
-	char label[16];
-	u16 flags;
-};
-
-struct fsl_mc_io;
-
-struct fsl_mc_device_irq;
-
-struct fsl_mc_resource;
-
-struct fsl_mc_device {
-	struct device dev;
-	u64 dma_mask;
-	u16 flags;
-	u32 icid;
-	u16 mc_handle;
-	struct fsl_mc_io *mc_io;
-	struct fsl_mc_obj_desc obj_desc;
-	struct resource *regions;
-	struct fsl_mc_device_irq **irqs;
-	struct fsl_mc_resource *resource;
-	struct device_link *consumer_link;
-	char *driver_override;
-};
-
-enum fsl_mc_pool_type {
-	FSL_MC_POOL_DPMCP = 0,
-	FSL_MC_POOL_DPBP = 1,
-	FSL_MC_POOL_DPCON = 2,
-	FSL_MC_POOL_IRQ = 3,
-	FSL_MC_NUM_POOL_TYPES = 4,
-};
-
-struct fsl_mc_resource_pool;
-
-struct fsl_mc_resource {
-	enum fsl_mc_pool_type type;
-	s32 id;
-	void *data;
-	struct fsl_mc_resource_pool *parent_pool;
-	struct list_head node;
-};
-
-struct fsl_mc_device_irq {
-	struct msi_desc *msi_desc;
-	struct fsl_mc_device *mc_dev;
-	u8 dev_irq_index;
-	struct fsl_mc_resource resource;
-};
-
-struct fsl_mc_io {
-	struct device *dev;
-	u16 flags;
-	u32 portal_size;
-	phys_addr_t portal_phys_addr;
-	void *portal_virt_addr;
-	struct fsl_mc_device *dpmcp_dev;
-	union {
-		struct mutex mutex;
-		raw_spinlock_t spinlock;
-	};
-};
-
-struct group_device {
-	struct list_head list;
-	struct device *dev;
-	char *name;
-};
-
-struct iommu_group_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct iommu_group *, char *);
-	ssize_t (*store)(struct iommu_group *, const char *, size_t);
-};
-
-struct group_for_pci_data {
-	struct pci_dev *pdev;
-	struct iommu_group *group;
-};
-
-struct __group_domain_type {
-	struct device *dev;
-	unsigned int type;
-};
-
-struct trace_event_raw_iommu_group_event {
-	struct trace_entry ent;
-	int gid;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_device_event {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_map {
-	struct trace_entry ent;
-	u64 iova;
-	u64 paddr;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_unmap {
-	struct trace_entry ent;
-	u64 iova;
-	size_t size;
-	size_t unmapped_size;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_error {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u64 iova;
-	int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iommu_group_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_iommu_device_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_map {};
-
-struct trace_event_data_offsets_unmap {};
-
-struct trace_event_data_offsets_iommu_error {
-	u32 device;
-	u32 driver;
-};
-
-typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
-
-typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
-
-typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
-
-typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
-
-typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
-
-struct iova {
-	struct rb_node node;
-	long unsigned int pfn_hi;
-	long unsigned int pfn_lo;
-};
-
-struct iova_magazine;
-
-struct iova_cpu_rcache;
-
-struct iova_rcache {
-	spinlock_t lock;
-	long unsigned int depot_size;
-	struct iova_magazine *depot[32];
-	struct iova_cpu_rcache *cpu_rcaches;
-};
-
-struct iova_domain;
-
-typedef void (*iova_flush_cb)(struct iova_domain *);
-
-typedef void (*iova_entry_dtor)(long unsigned int);
-
-struct iova_fq;
-
-struct iova_domain {
-	spinlock_t iova_rbtree_lock;
-	struct rb_root rbroot;
-	struct rb_node *cached_node;
-	struct rb_node *cached32_node;
-	long unsigned int granule;
-	long unsigned int start_pfn;
-	long unsigned int dma_32bit_pfn;
-	long unsigned int max32_alloc_size;
-	struct iova_fq *fq;
-	atomic64_t fq_flush_start_cnt;
-	atomic64_t fq_flush_finish_cnt;
-	struct iova anchor;
-	struct iova_rcache rcaches[6];
-	iova_flush_cb flush_cb;
-	iova_entry_dtor entry_dtor;
-	struct timer_list fq_timer;
-	atomic_t fq_timer_on;
-};
-
-struct iova_fq_entry {
-	long unsigned int iova_pfn;
-	long unsigned int pages;
-	long unsigned int data;
-	u64 counter;
-};
-
-struct iova_fq {
-	struct iova_fq_entry entries[256];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t lock;
-};
-
-struct iommu_dma_msi_page {
-	struct list_head list;
-	dma_addr_t iova;
-	phys_addr_t phys;
-};
-
-enum iommu_dma_cookie_type {
-	IOMMU_DMA_IOVA_COOKIE = 0,
-	IOMMU_DMA_MSI_COOKIE = 1,
-};
-
-struct iommu_dma_cookie {
-	enum iommu_dma_cookie_type type;
-	union {
-		struct iova_domain iovad;
-		dma_addr_t msi_iova;
-	};
-	struct list_head msi_page_list;
-	struct iommu_domain *fq_domain;
-};
-
-struct io_pgtable {
-	enum io_pgtable_fmt fmt;
-	void *cookie;
-	struct io_pgtable_cfg cfg;
-	struct io_pgtable_ops ops;
-};
-
-struct io_pgtable_init_fns {
-	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
-	void (*free)(struct io_pgtable *);
-};
-
-struct arm_lpae_io_pgtable {
-	struct io_pgtable iop;
-	int pgd_bits;
-	int start_level;
-	int bits_per_level;
-	void *pgd;
-};
-
-typedef u64 arm_lpae_iopte;
-
-struct iova_magazine {
-	long unsigned int size;
-	long unsigned int pfns[128];
-};
-
-struct iova_cpu_rcache {
-	spinlock_t lock;
-	struct iova_magazine *loaded;
-	struct iova_magazine *prev;
-};
-
-struct of_pci_iommu_alias_info {
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct rk_iommu_domain {
-	struct list_head iommus;
-	u32 *dt;
-	dma_addr_t dt_dma;
-	spinlock_t iommus_lock;
-	spinlock_t dt_lock;
-	struct iommu_domain domain;
-};
-
-struct rk_iommu {
-	struct device *dev;
-	void **bases;
-	int num_mmu;
-	int num_irq;
-	struct clk_bulk_data *clocks;
-	int num_clocks;
-	bool reset_disabled;
-	struct iommu_device iommu;
-	struct list_head node;
-	struct iommu_domain *domain;
-	struct iommu_group *group;
-};
-
-struct rk_iommudata {
-	struct device_link *link;
-	struct rk_iommu *iommu;
-};
-
-struct tegra_smmu_enable {
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct tegra_mc_timing {
-	long unsigned int rate;
-	u32 *emem_data;
-};
-
-struct tegra_mc_la {
-	unsigned int reg;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int def;
-};
-
-struct tegra_mc_client {
-	unsigned int id;
-	const char *name;
-	unsigned int swgroup;
-	unsigned int fifo_size;
-	struct tegra_smmu_enable smmu;
-	struct tegra_mc_la la;
-};
-
-struct tegra_smmu_swgroup {
-	const char *name;
-	unsigned int swgroup;
-	unsigned int reg;
-};
-
-struct tegra_smmu_group_soc {
-	const char *name;
-	const unsigned int *swgroups;
-	unsigned int num_swgroups;
-};
-
-struct tegra_smmu_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const struct tegra_smmu_swgroup *swgroups;
-	unsigned int num_swgroups;
-	const struct tegra_smmu_group_soc *groups;
-	unsigned int num_groups;
-	bool supports_round_robin_arbitration;
-	bool supports_request_limit;
-	unsigned int num_tlb_lines;
-	unsigned int num_asids;
-};
-
-struct tegra_mc_reset {
-	const char *name;
-	long unsigned int id;
-	unsigned int control;
-	unsigned int status;
-	unsigned int reset;
-	unsigned int bit;
-};
-
-struct tegra_mc;
-
-struct tegra_mc_reset_ops {
-	int (*hotreset_assert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*hotreset_deassert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*block_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	bool (*dma_idling)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*unblock_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*reset_status)(struct tegra_mc *, const struct tegra_mc_reset *);
-};
-
-struct gart_device;
-
-struct tegra_smmu;
-
-struct tegra_mc_soc;
-
-struct tegra_mc {
-	struct device *dev;
-	struct tegra_smmu *smmu;
-	struct gart_device *gart;
-	void *regs;
-	struct clk *clk;
-	int irq;
-	const struct tegra_mc_soc *soc;
-	long unsigned int tick;
-	struct tegra_mc_timing *timings;
-	unsigned int num_timings;
-	struct reset_controller_dev reset;
-	spinlock_t lock;
-};
-
-struct tegra_mc_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const long unsigned int *emem_regs;
-	unsigned int num_emem_regs;
-	unsigned int num_address_bits;
-	unsigned int atom_size;
-	u8 client_id_mask;
-	const struct tegra_smmu_soc *smmu;
-	u32 intmask;
-	const struct tegra_mc_reset_ops *reset_ops;
-	const struct tegra_mc_reset *resets;
-	unsigned int num_resets;
-};
-
-struct tegra_smmu {
-	void *regs;
-	struct device *dev;
-	struct tegra_mc *mc;
-	const struct tegra_smmu_soc *soc;
-	struct list_head groups;
-	long unsigned int pfn_mask;
-	long unsigned int tlb_mask;
-	long unsigned int *asids;
-	struct mutex lock;
-	struct list_head list;
-	struct dentry *debugfs;
-	struct iommu_device iommu;
-};
-
-struct tegra_smmu_group {
-	struct list_head list;
-	struct tegra_smmu *smmu;
-	const struct tegra_smmu_group_soc *soc;
-	struct iommu_group *group;
-	unsigned int swgroup;
-};
-
-struct tegra_smmu_as {
-	struct iommu_domain domain;
-	struct tegra_smmu *smmu;
-	unsigned int use_count;
-	spinlock_t lock;
-	u32 *count;
-	struct page **pts;
-	struct page *pd;
-	dma_addr_t pd_dma;
-	unsigned int id;
-	u32 attr;
-};
-
-struct mipi_dsi_msg {
-	u8 channel;
-	u8 type;
-	u16 flags;
-	size_t tx_len;
-	const void *tx_buf;
-	size_t rx_len;
-	void *rx_buf;
-};
-
-struct mipi_dsi_packet {
-	size_t size;
-	u8 header[4];
-	size_t payload_length;
-	const u8 *payload;
-};
-
-struct mipi_dsi_host;
-
-struct mipi_dsi_device;
-
-struct mipi_dsi_host_ops {
-	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
-};
-
-struct mipi_dsi_host {
-	struct device *dev;
-	const struct mipi_dsi_host_ops *ops;
-	struct list_head list;
-};
-
-enum mipi_dsi_pixel_format {
-	MIPI_DSI_FMT_RGB888 = 0,
-	MIPI_DSI_FMT_RGB666 = 1,
-	MIPI_DSI_FMT_RGB666_PACKED = 2,
-	MIPI_DSI_FMT_RGB565 = 3,
-};
-
-struct mipi_dsi_device {
-	struct mipi_dsi_host *host;
-	struct device dev;
-	char name[20];
-	unsigned int channel;
-	unsigned int lanes;
-	enum mipi_dsi_pixel_format format;
-	long unsigned int mode_flags;
-	long unsigned int hs_rate;
-	long unsigned int lp_rate;
-};
-
-struct mipi_dsi_device_info {
-	char type[20];
-	u32 channel;
-	struct device_node *node;
-};
-
-enum mipi_dsi_dcs_tear_mode {
-	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
-	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
-};
-
-struct mipi_dsi_driver {
-	struct device_driver driver;
-	int (*probe)(struct mipi_dsi_device *);
-	int (*remove)(struct mipi_dsi_device *);
-	void (*shutdown)(struct mipi_dsi_device *);
-};
-
-struct drm_dsc_picture_parameter_set {
-	u8 dsc_version;
-	u8 pps_identifier;
-	u8 pps_reserved;
-	u8 pps_3;
-	u8 pps_4;
-	u8 bits_per_pixel_low;
-	__be16 pic_height;
-	__be16 pic_width;
-	__be16 slice_height;
-	__be16 slice_width;
-	__be16 chunk_size;
-	u8 initial_xmit_delay_high;
-	u8 initial_xmit_delay_low;
-	__be16 initial_dec_delay;
-	u8 pps20_reserved;
-	u8 initial_scale_value;
-	__be16 scale_increment_interval;
-	u8 scale_decrement_interval_high;
-	u8 scale_decrement_interval_low;
-	u8 pps26_reserved;
-	u8 first_line_bpg_offset;
-	__be16 nfl_bpg_offset;
-	__be16 slice_bpg_offset;
-	__be16 initial_offset;
-	__be16 final_offset;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	__be16 rc_model_size;
-	u8 rc_edge_factor;
-	u8 rc_quant_incr_limit0;
-	u8 rc_quant_incr_limit1;
-	u8 rc_tgt_offset;
-	u8 rc_buf_thresh[14];
-	__be16 rc_range_parameters[15];
-	u8 native_422_420;
-	u8 second_line_bpg_offset;
-	__be16 nsl_bpg_offset;
-	__be16 second_line_offset_adj;
-	u32 pps_long_94_reserved;
-	u32 pps_long_98_reserved;
-	u32 pps_long_102_reserved;
-	u32 pps_long_106_reserved;
-	u32 pps_long_110_reserved;
-	u32 pps_long_114_reserved;
-	u32 pps_long_118_reserved;
-	u32 pps_long_122_reserved;
-	__be16 pps_short_126_reserved;
-} __attribute__((packed));
-
-enum {
-	MIPI_DSI_V_SYNC_START = 1,
-	MIPI_DSI_V_SYNC_END = 17,
-	MIPI_DSI_H_SYNC_START = 33,
-	MIPI_DSI_H_SYNC_END = 49,
-	MIPI_DSI_COMPRESSION_MODE = 7,
-	MIPI_DSI_END_OF_TRANSMISSION = 8,
-	MIPI_DSI_COLOR_MODE_OFF = 2,
-	MIPI_DSI_COLOR_MODE_ON = 18,
-	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
-	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
-	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
-	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
-	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
-	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
-	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
-	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
-	MIPI_DSI_DCS_SHORT_WRITE = 5,
-	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
-	MIPI_DSI_DCS_READ = 6,
-	MIPI_DSI_EXECUTE_QUEUE = 22,
-	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
-	MIPI_DSI_NULL_PACKET = 9,
-	MIPI_DSI_BLANKING_PACKET = 25,
-	MIPI_DSI_GENERIC_LONG_WRITE = 41,
-	MIPI_DSI_DCS_LONG_WRITE = 57,
-	MIPI_DSI_PICTURE_PARAMETER_SET = 10,
-	MIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,
-	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
-	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
-	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
-	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
-	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
-	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
-	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
-};
-
-enum {
-	MIPI_DCS_NOP = 0,
-	MIPI_DCS_SOFT_RESET = 1,
-	MIPI_DCS_GET_COMPRESSION_MODE = 3,
-	MIPI_DCS_GET_DISPLAY_ID = 4,
-	MIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,
-	MIPI_DCS_GET_RED_CHANNEL = 6,
-	MIPI_DCS_GET_GREEN_CHANNEL = 7,
-	MIPI_DCS_GET_BLUE_CHANNEL = 8,
-	MIPI_DCS_GET_DISPLAY_STATUS = 9,
-	MIPI_DCS_GET_POWER_MODE = 10,
-	MIPI_DCS_GET_ADDRESS_MODE = 11,
-	MIPI_DCS_GET_PIXEL_FORMAT = 12,
-	MIPI_DCS_GET_DISPLAY_MODE = 13,
-	MIPI_DCS_GET_SIGNAL_MODE = 14,
-	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
-	MIPI_DCS_ENTER_SLEEP_MODE = 16,
-	MIPI_DCS_EXIT_SLEEP_MODE = 17,
-	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
-	MIPI_DCS_ENTER_NORMAL_MODE = 19,
-	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,
-	MIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,
-	MIPI_DCS_EXIT_INVERT_MODE = 32,
-	MIPI_DCS_ENTER_INVERT_MODE = 33,
-	MIPI_DCS_SET_GAMMA_CURVE = 38,
-	MIPI_DCS_SET_DISPLAY_OFF = 40,
-	MIPI_DCS_SET_DISPLAY_ON = 41,
-	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
-	MIPI_DCS_SET_PAGE_ADDRESS = 43,
-	MIPI_DCS_WRITE_MEMORY_START = 44,
-	MIPI_DCS_WRITE_LUT = 45,
-	MIPI_DCS_READ_MEMORY_START = 46,
-	MIPI_DCS_SET_PARTIAL_ROWS = 48,
-	MIPI_DCS_SET_PARTIAL_COLUMNS = 49,
-	MIPI_DCS_SET_SCROLL_AREA = 51,
-	MIPI_DCS_SET_TEAR_OFF = 52,
-	MIPI_DCS_SET_TEAR_ON = 53,
-	MIPI_DCS_SET_ADDRESS_MODE = 54,
-	MIPI_DCS_SET_SCROLL_START = 55,
-	MIPI_DCS_EXIT_IDLE_MODE = 56,
-	MIPI_DCS_ENTER_IDLE_MODE = 57,
-	MIPI_DCS_SET_PIXEL_FORMAT = 58,
-	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
-	MIPI_DCS_SET_3D_CONTROL = 61,
-	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
-	MIPI_DCS_GET_3D_CONTROL = 63,
-	MIPI_DCS_SET_VSYNC_TIMING = 64,
-	MIPI_DCS_SET_TEAR_SCANLINE = 68,
-	MIPI_DCS_GET_SCANLINE = 69,
-	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
-	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
-	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
-	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
-	MIPI_DCS_WRITE_POWER_SAVE = 85,
-	MIPI_DCS_GET_POWER_SAVE = 86,
-	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
-	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
-	MIPI_DCS_READ_DDB_START = 161,
-	MIPI_DCS_READ_PPS_START = 162,
-	MIPI_DCS_READ_DDB_CONTINUE = 168,
-	MIPI_DCS_READ_PPS_CONTINUE = 169,
-};
+typedef bool (*drm_vblank_get_scanout_position_func)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
 
 struct drm_dmi_panel_orientation_data {
 	int width;
@@ -82008,633 +114571,11 @@
 	int orientation;
 };
 
-struct vga_device {
-	struct list_head list;
-	struct pci_dev *pdev;
-	unsigned int decodes;
-	unsigned int owns;
-	unsigned int locks;
-	unsigned int io_lock_cnt;
-	unsigned int mem_lock_cnt;
-	unsigned int io_norm_cnt;
-	unsigned int mem_norm_cnt;
-	bool bridge_has_one_vga;
-	void *cookie;
-	void (*irq_set_state)(void *, bool);
-	unsigned int (*set_vga_decode)(void *, bool);
-};
-
-struct vga_arb_user_card {
-	struct pci_dev *pdev;
-	unsigned int mem_cnt;
-	unsigned int io_cnt;
-};
-
-struct vga_arb_private {
-	struct list_head list;
-	struct pci_dev *target;
-	struct vga_arb_user_card cards[16];
-	spinlock_t lock;
-};
-
-struct cb_id {
-	__u32 idx;
-	__u32 val;
-};
-
-struct cn_msg {
-	struct cb_id id;
-	__u32 seq;
-	__u32 ack;
-	__u16 len;
-	__u16 flags;
-	__u8 data[0];
-};
-
-struct cn_queue_dev {
-	atomic_t refcnt;
-	unsigned char name[32];
-	struct list_head queue_list;
-	spinlock_t queue_lock;
-	struct sock *nls;
-};
-
-struct cn_callback_id {
-	unsigned char name[32];
-	struct cb_id id;
-};
-
-struct cn_callback_entry {
-	struct list_head callback_entry;
-	refcount_t refcnt;
-	struct cn_queue_dev *pdev;
-	struct cn_callback_id id;
-	void (*callback)(struct cn_msg *, struct netlink_skb_parms *);
-	u32 seq;
-	u32 group;
-};
-
-struct cn_dev {
-	struct cb_id id;
-	u32 seq;
-	u32 groups;
-	struct sock *nls;
-	struct cn_queue_dev *cbdev;
-};
-
-enum proc_cn_mcast_op {
-	PROC_CN_MCAST_LISTEN = 1,
-	PROC_CN_MCAST_IGNORE = 2,
-};
-
-struct fork_proc_event {
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-	__kernel_pid_t child_pid;
-	__kernel_pid_t child_tgid;
-};
-
-struct exec_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct id_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	union {
-		__u32 ruid;
-		__u32 rgid;
-	} r;
-	union {
-		__u32 euid;
-		__u32 egid;
-	} e;
-};
-
-struct sid_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct ptrace_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t tracer_pid;
-	__kernel_pid_t tracer_tgid;
-};
-
-struct comm_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	char comm[16];
-};
-
-struct coredump_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct exit_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__u32 exit_code;
-	__u32 exit_signal;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct proc_event {
-	enum what what;
-	__u32 cpu;
-	__u64 timestamp_ns;
-	union {
-		struct {
-			__u32 err;
-		} ack;
-		struct fork_proc_event fork;
-		struct exec_proc_event exec;
-		struct id_proc_event id;
-		struct sid_proc_event sid;
-		struct ptrace_proc_event ptrace;
-		struct comm_proc_event comm;
-		struct coredump_proc_event coredump;
-		struct exit_proc_event exit;
-	} event_data;
-};
-
-struct local_event {
-	local_lock_t lock;
-	__u32 count;
-};
-
-struct nvm_ioctl_info_tgt {
-	__u32 version[3];
-	__u32 reserved;
-	char tgtname[48];
-};
-
-struct nvm_ioctl_info {
-	__u32 version[3];
-	__u16 tgtsize;
-	__u16 reserved16;
-	__u32 reserved[12];
-	struct nvm_ioctl_info_tgt tgts[63];
-};
-
-struct nvm_ioctl_device_info {
-	char devname[32];
-	char bmname[48];
-	__u32 bmversion[3];
-	__u32 flags;
-	__u32 reserved[8];
-};
-
-struct nvm_ioctl_get_devices {
-	__u32 nr_devices;
-	__u32 reserved[31];
-	struct nvm_ioctl_device_info info[31];
-};
-
-struct nvm_ioctl_create_simple {
-	__u32 lun_begin;
-	__u32 lun_end;
-};
-
-struct nvm_ioctl_create_extended {
-	__u16 lun_begin;
-	__u16 lun_end;
-	__u16 op;
-	__u16 rsv;
-};
-
-enum {
-	NVM_CONFIG_TYPE_SIMPLE = 0,
-	NVM_CONFIG_TYPE_EXTENDED = 1,
-};
-
-struct nvm_ioctl_create_conf {
-	__u32 type;
-	union {
-		struct nvm_ioctl_create_simple s;
-		struct nvm_ioctl_create_extended e;
-	};
-};
-
-enum {
-	NVM_TARGET_FACTORY = 1,
-};
-
-struct nvm_ioctl_create {
-	char dev[32];
-	char tgttype[48];
-	char tgtname[32];
-	__u32 flags;
-	struct nvm_ioctl_create_conf conf;
-};
-
-struct nvm_ioctl_remove {
-	char tgtname[32];
-	__u32 flags;
-};
-
-struct nvm_ioctl_dev_init {
-	char dev[32];
-	char mmtype[8];
-	__u32 flags;
-};
-
-enum {
-	NVM_FACTORY_ERASE_ONLY_USER = 1,
-	NVM_FACTORY_RESET_HOST_BLKS = 2,
-	NVM_FACTORY_RESET_GRWN_BBLKS = 4,
-	NVM_FACTORY_NR_BITS = 8,
-};
-
-struct nvm_ioctl_dev_factory {
-	char dev[32];
-	__u32 flags;
-};
-
-enum {
-	NVM_INFO_CMD = 32,
-	NVM_GET_DEVICES_CMD = 33,
-	NVM_DEV_CREATE_CMD = 34,
-	NVM_DEV_REMOVE_CMD = 35,
-	NVM_DEV_INIT_CMD = 36,
-	NVM_DEV_FACTORY_CMD = 37,
-	NVM_DEV_VIO_ADMIN_CMD = 65,
-	NVM_DEV_VIO_CMD = 66,
-	NVM_DEV_VIO_USER_CMD = 67,
-};
-
-enum {
-	NVM_OCSSD_SPEC_12 = 12,
-	NVM_OCSSD_SPEC_20 = 20,
-};
-
-struct ppa_addr {
-	union {
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 reserved: 32;
-		} a;
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 pg: 16;
-			u64 pl: 4;
-			u64 sec: 4;
-			u64 reserved: 8;
-		} g;
-		struct {
-			u64 grp: 8;
-			u64 pu: 8;
-			u64 chk: 16;
-			u64 sec: 24;
-			u64 reserved: 8;
-		} m;
-		struct {
-			u64 line: 63;
-			u64 is_cached: 1;
-		} c;
-		u64 ppa;
-	};
-};
-
-struct nvm_dev;
-
-typedef int nvm_id_fn(struct nvm_dev *);
-
-struct nvm_addrf {
-	u8 ch_len;
-	u8 lun_len;
-	u8 chk_len;
-	u8 sec_len;
-	u8 rsv_len[2];
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 chk_offset;
-	u8 sec_offset;
-	u8 rsv_off[2];
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 chk_mask;
-	u64 sec_mask;
-	u64 rsv_mask[2];
-};
-
-struct nvm_geo {
-	u8 major_ver_id;
-	u8 minor_ver_id;
-	u8 version;
-	int num_ch;
-	int num_lun;
-	int all_luns;
-	int all_chunks;
-	int op;
-	sector_t total_secs;
-	u32 num_chk;
-	u32 clba;
-	u16 csecs;
-	u16 sos;
-	bool ext;
-	u32 mdts;
-	u32 ws_min;
-	u32 ws_opt;
-	u32 mw_cunits;
-	u32 maxoc;
-	u32 maxocpu;
-	u32 mccap;
-	u32 trdt;
-	u32 trdm;
-	u32 tprt;
-	u32 tprm;
-	u32 tbet;
-	u32 tbem;
-	struct nvm_addrf addrf;
-	u8 vmnt;
-	u32 cap;
-	u32 dom;
-	u8 mtype;
-	u8 fmtype;
-	u16 cpar;
-	u32 mpos;
-	u8 num_pln;
-	u8 pln_mode;
-	u16 num_pg;
-	u16 fpg_sz;
-};
-
-struct nvm_dev_ops;
-
-struct nvm_dev {
-	struct nvm_dev_ops *ops;
-	struct list_head devices;
-	struct nvm_geo geo;
-	long unsigned int *lun_map;
-	void *dma_pool;
-	struct request_queue *q;
-	char name[32];
-	void *private_data;
-	struct kref ref;
-	void *rmap;
-	struct mutex mlock;
-	spinlock_t lock;
-	struct list_head area_list;
-	struct list_head targets;
-};
-
-typedef int nvm_op_bb_tbl_fn(struct nvm_dev *, struct ppa_addr, u8 *);
-
-typedef int nvm_op_set_bb_fn(struct nvm_dev *, struct ppa_addr *, int, int);
-
-struct nvm_chk_meta;
-
-typedef int nvm_get_chk_meta_fn(struct nvm_dev *, sector_t, int, struct nvm_chk_meta *);
-
-struct nvm_chk_meta {
-	u8 state;
-	u8 type;
-	u8 wi;
-	u8 rsvd[5];
-	u64 slba;
-	u64 cnlb;
-	u64 wp;
-};
-
-struct nvm_rq;
-
-typedef int nvm_submit_io_fn(struct nvm_dev *, struct nvm_rq *, void *);
-
-typedef void nvm_end_io_fn(struct nvm_rq *);
-
-struct nvm_tgt_dev;
-
-struct nvm_rq {
-	struct nvm_tgt_dev *dev;
-	struct bio *bio;
-	union {
-		struct ppa_addr ppa_addr;
-		dma_addr_t dma_ppa_list;
-	};
-	struct ppa_addr *ppa_list;
-	void *meta_list;
-	dma_addr_t dma_meta_list;
-	nvm_end_io_fn *end_io;
-	uint8_t opcode;
-	uint16_t nr_ppas;
-	uint16_t flags;
-	u64 ppa_status;
-	int error;
-	int is_seq;
-	void *private;
-};
-
-typedef void *nvm_create_dma_pool_fn(struct nvm_dev *, char *, int);
-
-typedef void nvm_destroy_dma_pool_fn(void *);
-
-typedef void *nvm_dev_dma_alloc_fn(struct nvm_dev *, void *, gfp_t, dma_addr_t *);
-
-typedef void nvm_dev_dma_free_fn(void *, void *, dma_addr_t);
-
-struct nvm_dev_ops {
-	nvm_id_fn *identity;
-	nvm_op_bb_tbl_fn *get_bb_tbl;
-	nvm_op_set_bb_fn *set_bb_tbl;
-	nvm_get_chk_meta_fn *get_chk_meta;
-	nvm_submit_io_fn *submit_io;
-	nvm_create_dma_pool_fn *create_dma_pool;
-	nvm_destroy_dma_pool_fn *destroy_dma_pool;
-	nvm_dev_dma_alloc_fn *dev_dma_alloc;
-	nvm_dev_dma_free_fn *dev_dma_free;
-};
-
-enum {
-	NVM_RSP_L2P = 1,
-	NVM_RSP_ECC = 2,
-	NVM_ADDRMODE_LINEAR = 0,
-	NVM_ADDRMODE_CHANNEL = 1,
-	NVM_PLANE_SINGLE = 1,
-	NVM_PLANE_DOUBLE = 2,
-	NVM_PLANE_QUAD = 4,
-	NVM_RSP_SUCCESS = 0,
-	NVM_RSP_NOT_CHANGEABLE = 1,
-	NVM_RSP_ERR_FAILWRITE = 16639,
-	NVM_RSP_ERR_EMPTYPAGE = 17151,
-	NVM_RSP_ERR_FAILECC = 17025,
-	NVM_RSP_ERR_FAILCRC = 16388,
-	NVM_RSP_WARN_HIGHECC = 18176,
-	NVM_OP_PWRITE = 145,
-	NVM_OP_PREAD = 146,
-	NVM_OP_ERASE = 144,
-	NVM_IO_SNGL_ACCESS = 0,
-	NVM_IO_DUAL_ACCESS = 1,
-	NVM_IO_QUAD_ACCESS = 2,
-	NVM_IO_SUSPEND = 128,
-	NVM_IO_SLC_MODE = 256,
-	NVM_IO_SCRAMBLE_ENABLE = 512,
-	NVM_BLK_T_FREE = 0,
-	NVM_BLK_T_BAD = 1,
-	NVM_BLK_T_GRWN_BAD = 2,
-	NVM_BLK_T_DEV = 4,
-	NVM_BLK_T_HOST = 8,
-	NVM_ID_CAP_SLC = 1,
-	NVM_ID_CAP_CMD_SUSPEND = 2,
-	NVM_ID_CAP_SCRAMBLE = 4,
-	NVM_ID_CAP_ENCRYPT = 8,
-	NVM_ID_FMTYPE_SLC = 0,
-	NVM_ID_FMTYPE_MLC = 1,
-	NVM_ID_DCAP_BBLKMGMT = 1,
-	NVM_UD_DCAP_ECC = 2,
-};
-
-struct nvm_addrf_12 {
-	u8 ch_len;
-	u8 lun_len;
-	u8 blk_len;
-	u8 pg_len;
-	u8 pln_len;
-	u8 sec_len;
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 blk_offset;
-	u8 pg_offset;
-	u8 pln_offset;
-	u8 sec_offset;
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 blk_mask;
-	u64 pg_mask;
-	u64 pln_mask;
-	u64 sec_mask;
-};
-
-enum {
-	NVM_CHK_ST_FREE = 1,
-	NVM_CHK_ST_CLOSED = 2,
-	NVM_CHK_ST_OPEN = 4,
-	NVM_CHK_ST_OFFLINE = 8,
-	NVM_CHK_TP_W_SEQ = 1,
-	NVM_CHK_TP_W_RAN = 2,
-	NVM_CHK_TP_SZ_SPEC = 16,
-};
-
-struct nvm_tgt_type;
-
-struct nvm_target {
-	struct list_head list;
-	struct nvm_tgt_dev *dev;
-	struct nvm_tgt_type *type;
-	struct gendisk *disk;
-};
-
-struct nvm_tgt_dev {
-	struct nvm_geo geo;
-	struct ppa_addr *luns;
-	struct request_queue *q;
-	struct nvm_dev *parent;
-	void *map;
-};
-
-typedef sector_t nvm_tgt_capacity_fn(void *);
-
-typedef void *nvm_tgt_init_fn(struct nvm_tgt_dev *, struct gendisk *, int);
-
-typedef void nvm_tgt_exit_fn(void *, bool);
-
-typedef int nvm_tgt_sysfs_init_fn(struct gendisk *);
-
-typedef void nvm_tgt_sysfs_exit_fn(struct gendisk *);
-
-struct nvm_tgt_type {
-	const char *name;
-	unsigned int version[3];
-	int flags;
-	const struct block_device_operations *bops;
-	nvm_tgt_capacity_fn *capacity;
-	nvm_tgt_init_fn *init;
-	nvm_tgt_exit_fn *exit;
-	nvm_tgt_sysfs_init_fn *sysfs_init;
-	nvm_tgt_sysfs_exit_fn *sysfs_exit;
-	struct list_head list;
-	struct module *owner;
-};
-
-enum {
-	NVM_TGT_F_DEV_L2P = 0,
-	NVM_TGT_F_HOST_L2P = 1,
-};
-
-struct nvm_ch_map {
-	int ch_off;
-	int num_lun;
-	int *lun_offs;
-};
-
-struct nvm_dev_map {
-	struct nvm_ch_map *chnls;
-	int num_ch;
-};
-
-struct component_ops {
-	int (*bind)(struct device *, struct device *, void *);
-	void (*unbind)(struct device *, struct device *, void *);
-};
-
-struct component_master_ops {
-	int (*bind)(struct device *);
-	void (*unbind)(struct device *);
-};
-
-struct component;
-
-struct component_match_array {
-	void *data;
-	int (*compare)(struct device *, void *);
-	int (*compare_typed)(struct device *, int, void *);
-	void (*release)(struct device *, void *);
-	struct component *component;
-	bool duplicate;
-};
-
-struct master;
-
-struct component {
-	struct list_head node;
-	struct master *master;
-	bool bound;
-	const struct component_ops *ops;
-	int subcomponent;
-	struct device *dev;
-};
-
-struct component_match {
-	size_t alloc;
-	size_t num;
-	struct component_match_array *compare;
-};
-
-struct master {
-	struct list_head node;
-	bool bound;
-	const struct component_master_ops *ops;
-	struct device *dev;
-	struct component_match *match;
-	struct dentry *dentry;
-};
-
-struct wake_irq {
-	struct device *dev;
-	unsigned int status;
-	int irq;
-	const char *name;
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
 };
 
 enum dpm_order {
@@ -82644,40 +114585,9 @@
 	DPM_ORDER_DEV_LAST = 3,
 };
 
-struct subsys_private {
-	struct kset subsys;
-	struct kset *devices_kset;
-	struct list_head interfaces;
-	struct mutex mutex;
-	struct kset *drivers_kset;
-	struct klist klist_devices;
-	struct klist klist_drivers;
-	struct blocking_notifier_head bus_notifier;
-	unsigned int drivers_autoprobe: 1;
-	struct bus_type *bus;
-	struct kset glue_dirs;
-	struct class *class;
-};
-
-struct driver_private {
-	struct kobject kobj;
-	struct klist klist_devices;
-	struct klist_node knode_bus;
-	struct module_kobject *mkobj;
-	struct device_driver *driver;
-};
-
-struct device_private {
-	struct klist klist_children;
-	struct klist_node knode_parent;
-	struct klist_node knode_driver;
-	struct klist_node knode_bus;
-	struct klist_node knode_class;
-	struct list_head deferred_probe;
-	struct device_driver *async_driver;
-	char *deferred_probe_reason;
-	struct device *device;
-	u8 dead: 1;
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
 };
 
 union device_attr_group_devres {
@@ -82695,47 +114605,6 @@
 	struct module *owner;
 };
 
-struct subsys_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-struct subsys_interface {
-	const char *name;
-	struct bus_type *subsys;
-	struct list_head node;
-	int (*add_dev)(struct device *, struct subsys_interface *);
-	void (*remove_dev)(struct device *, struct subsys_interface *);
-};
-
-struct device_attach_data {
-	struct device *dev;
-	bool check_async;
-	bool want_async;
-	bool have_async;
-};
-
-struct class_attribute_string {
-	struct class_attribute attr;
-	char *str;
-};
-
-struct class_compat {
-	struct kobject *kobj;
-};
-
-struct platform_object {
-	struct platform_device pdev;
-	char name[0];
-};
-
-struct cpu_attr {
-	struct device_attribute attr;
-	const struct cpumask * const map;
-};
-
-typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
-
 struct probe {
 	struct probe *next;
 	dev_t dev;
@@ -82746,460 +114615,28 @@
 	void *data;
 };
 
-struct kobj_map___2 {
+struct kobj_map {
 	struct probe *probes[255];
 	struct mutex *lock;
 };
 
-typedef int (*dr_match_t)(struct device *, void *, void *);
-
-struct devres_node {
-	struct list_head entry;
-	dr_release_t release;
-};
-
-struct devres___2 {
-	struct devres_node node;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u8 data[0];
-};
-
-struct devres_group {
-	struct devres_node node[2];
-	void *id;
-	int color;
-};
-
-struct action_devres {
-	void *data;
-	void (*action)(void *);
-};
-
-struct pages_devres {
-	long unsigned int addr;
-	unsigned int order;
-};
-
-struct attribute_container {
-	struct list_head node;
-	struct klist containers;
-	struct class *class;
-	const struct attribute_group *grp;
-	struct device_attribute **attrs;
-	int (*match)(struct attribute_container *, struct device *);
-	long unsigned int flags;
-};
-
-struct internal_container {
-	struct klist_node node;
-	struct attribute_container *cont;
-	struct device classdev;
-};
-
-struct transport_container;
-
-struct transport_class {
-	struct class class;
-	int (*setup)(struct transport_container *, struct device *, struct device *);
-	int (*configure)(struct transport_container *, struct device *, struct device *);
-	int (*remove)(struct transport_container *, struct device *, struct device *);
-};
-
-struct transport_container {
-	struct attribute_container ac;
-	const struct attribute_group *statistics;
-};
-
-struct anon_transport_class {
-	struct transport_class tclass;
-	struct attribute_container container;
-};
-
-typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
-
-struct mii_bus;
-
-struct mdio_device {
-	struct device dev;
-	struct mii_bus *bus;
-	char modalias[32];
-	int (*bus_match)(struct device *, struct device_driver *);
-	void (*device_free)(struct mdio_device *);
-	void (*device_remove)(struct mdio_device *);
-	int addr;
-	int flags;
-	struct gpio_desc *reset_gpio;
-	struct reset_control *reset_ctrl;
-	unsigned int reset_assert_delay;
-	unsigned int reset_deassert_delay;
-};
-
-struct phy_c45_device_ids {
-	u32 devices_in_package;
-	u32 mmds_present;
-	u32 device_ids[32];
-};
-
-enum phy_state {
-	PHY_DOWN = 0,
-	PHY_READY = 1,
-	PHY_HALTED = 2,
-	PHY_UP = 3,
-	PHY_RUNNING = 4,
-	PHY_NOLINK = 5,
-	PHY_CABLETEST = 6,
-};
-
-typedef enum {
-	PHY_INTERFACE_MODE_NA = 0,
-	PHY_INTERFACE_MODE_INTERNAL = 1,
-	PHY_INTERFACE_MODE_MII = 2,
-	PHY_INTERFACE_MODE_GMII = 3,
-	PHY_INTERFACE_MODE_SGMII = 4,
-	PHY_INTERFACE_MODE_TBI = 5,
-	PHY_INTERFACE_MODE_REVMII = 6,
-	PHY_INTERFACE_MODE_RMII = 7,
-	PHY_INTERFACE_MODE_RGMII = 8,
-	PHY_INTERFACE_MODE_RGMII_ID = 9,
-	PHY_INTERFACE_MODE_RGMII_RXID = 10,
-	PHY_INTERFACE_MODE_RGMII_TXID = 11,
-	PHY_INTERFACE_MODE_RTBI = 12,
-	PHY_INTERFACE_MODE_SMII = 13,
-	PHY_INTERFACE_MODE_XGMII = 14,
-	PHY_INTERFACE_MODE_XLGMII = 15,
-	PHY_INTERFACE_MODE_MOCA = 16,
-	PHY_INTERFACE_MODE_QSGMII = 17,
-	PHY_INTERFACE_MODE_TRGMII = 18,
-	PHY_INTERFACE_MODE_1000BASEX = 19,
-	PHY_INTERFACE_MODE_2500BASEX = 20,
-	PHY_INTERFACE_MODE_RXAUI = 21,
-	PHY_INTERFACE_MODE_XAUI = 22,
-	PHY_INTERFACE_MODE_10GBASER = 23,
-	PHY_INTERFACE_MODE_USXGMII = 24,
-	PHY_INTERFACE_MODE_10GKR = 25,
-	PHY_INTERFACE_MODE_MAX = 26,
-} phy_interface_t;
-
-struct phylink;
-
-struct phy_driver;
-
-struct phy_package_shared;
-
-struct mii_timestamper;
-
-struct phy_device {
-	struct mdio_device mdio;
-	struct phy_driver *drv;
-	u32 phy_id;
-	struct phy_c45_device_ids c45_ids;
-	unsigned int is_c45: 1;
-	unsigned int is_internal: 1;
-	unsigned int is_pseudo_fixed_link: 1;
-	unsigned int is_gigabit_capable: 1;
-	unsigned int has_fixups: 1;
-	unsigned int suspended: 1;
-	unsigned int suspended_by_mdio_bus: 1;
-	unsigned int sysfs_links: 1;
-	unsigned int loopback_enabled: 1;
-	unsigned int downshifted_rate: 1;
-	unsigned int autoneg: 1;
-	unsigned int link: 1;
-	unsigned int autoneg_complete: 1;
-	unsigned int interrupts: 1;
-	enum phy_state state;
-	u32 dev_flags;
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-	u8 master_slave_get;
-	u8 master_slave_set;
-	u8 master_slave_state;
-	long unsigned int supported[2];
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	long unsigned int adv_old[2];
-	u32 eee_broken_modes;
-	int irq;
-	void *priv;
-	struct phy_package_shared *shared;
-	struct sk_buff *skb;
-	void *ehdr;
-	struct nlattr *nest;
-	struct delayed_work state_queue;
-	struct mutex lock;
-	bool sfp_bus_attached;
-	struct sfp_bus *sfp_bus;
-	struct phylink *phylink;
-	struct net_device *attached_dev;
-	struct mii_timestamper *mii_ts;
-	u8 mdix;
-	u8 mdix_ctrl;
-	void (*phy_link_change)(struct phy_device *, bool);
-	void (*adjust_link)(struct net_device *);
-	const struct macsec_ops *macsec_ops;
-};
-
-struct phy_tdr_config {
-	u32 first;
-	u32 last;
-	u32 step;
-	s8 pair;
-};
-
-struct mdio_bus_stats {
-	u64_stats_t transfers;
-	u64_stats_t errors;
-	u64_stats_t writes;
-	u64_stats_t reads;
-	struct u64_stats_sync syncp;
-};
-
-struct mii_bus {
-	struct module *owner;
-	const char *name;
-	char id[61];
-	void *priv;
-	int (*read)(struct mii_bus *, int, int);
-	int (*write)(struct mii_bus *, int, int, u16);
-	int (*reset)(struct mii_bus *);
-	struct mdio_bus_stats stats[32];
-	struct mutex mdio_lock;
-	struct device *parent;
-	enum {
-		MDIOBUS_ALLOCATED = 1,
-		MDIOBUS_REGISTERED = 2,
-		MDIOBUS_UNREGISTERED = 3,
-		MDIOBUS_RELEASED = 4,
-	} state;
-	struct device dev;
-	struct mdio_device *mdio_map[32];
-	u32 phy_mask;
-	u32 phy_ignore_ta_mask;
-	int irq[32];
-	int reset_delay_us;
-	int reset_post_delay_us;
-	struct gpio_desc *reset_gpiod;
-	enum {
-		MDIOBUS_NO_CAP = 0,
-		MDIOBUS_C22 = 1,
-		MDIOBUS_C45 = 2,
-		MDIOBUS_C22_C45 = 3,
-	} probe_capabilities;
-	struct mutex shared_lock;
-	struct phy_package_shared *shared[32];
-};
-
-struct mdio_driver_common {
-	struct device_driver driver;
-	int flags;
-};
-
-struct mii_timestamper {
-	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
-	void (*link_state)(struct mii_timestamper *, struct phy_device *);
-	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
-	struct device *device;
-};
-
-struct phy_package_shared {
-	int addr;
-	refcount_t refcnt;
-	long unsigned int flags;
-	size_t priv_size;
-	void *priv;
-};
-
-struct phy_driver {
-	struct mdio_driver_common mdiodrv;
-	u32 phy_id;
-	char *name;
-	u32 phy_id_mask;
-	const long unsigned int * const features;
-	u32 flags;
-	const void *driver_data;
-	int (*soft_reset)(struct phy_device *);
-	int (*config_init)(struct phy_device *);
-	int (*probe)(struct phy_device *);
-	int (*get_features)(struct phy_device *);
-	int (*suspend)(struct phy_device *);
-	int (*resume)(struct phy_device *);
-	int (*config_aneg)(struct phy_device *);
-	int (*aneg_done)(struct phy_device *);
-	int (*read_status)(struct phy_device *);
-	int (*ack_interrupt)(struct phy_device *);
-	int (*config_intr)(struct phy_device *);
-	int (*did_interrupt)(struct phy_device *);
-	irqreturn_t (*handle_interrupt)(struct phy_device *);
-	void (*remove)(struct phy_device *);
-	int (*match_phy_device)(struct phy_device *);
-	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*link_change_notify)(struct phy_device *);
-	int (*read_mmd)(struct phy_device *, int, u16);
-	int (*write_mmd)(struct phy_device *, int, u16, u16);
-	int (*read_page)(struct phy_device *);
-	int (*write_page)(struct phy_device *, int);
-	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
-	int (*cable_test_start)(struct phy_device *);
-	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
-	int (*cable_test_get_status)(struct phy_device *, bool *);
-	int (*get_sset_count)(struct phy_device *);
-	void (*get_strings)(struct phy_device *, u8 *);
-	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
-	int (*set_loopback)(struct phy_device *, bool);
-	int (*get_sqi)(struct phy_device *);
-	int (*get_sqi_max)(struct phy_device *);
-};
-
-struct cache_type_info {
-	const char *size_prop;
-	const char *line_size_props[2];
-	const char *nr_sets_prop;
-};
-
-struct software_node;
-
 struct software_node_ref_args {
 	const struct software_node *node;
 	unsigned int nargs;
 	u64 args[8];
 };
 
-struct software_node {
-	const char *name;
-	const struct software_node *parent;
-	const struct property_entry *properties;
-};
-
 struct swnode {
-	int id;
 	struct kobject kobj;
 	struct fwnode_handle fwnode;
 	const struct software_node *node;
+	int id;
 	struct ida child_ids;
 	struct list_head entry;
 	struct list_head children;
 	struct swnode *parent;
 	unsigned int allocated: 1;
-};
-
-struct req {
-	struct req *next;
-	struct completion done;
-	int err;
-	const char *name;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	struct device *dev;
-};
-
-typedef int (*pm_callback_t)(struct device *);
-
-struct of_phandle_iterator {
-	const char *cells_name;
-	int cell_count;
-	const struct device_node *parent;
-	const __be32 *list_end;
-	const __be32 *phandle_end;
-	const __be32 *cur;
-	uint32_t cur_count;
-	phandle phandle;
-	struct device_node *node;
-};
-
-enum genpd_notication {
-	GENPD_NOTIFY_PRE_OFF = 0,
-	GENPD_NOTIFY_OFF = 1,
-	GENPD_NOTIFY_PRE_ON = 2,
-	GENPD_NOTIFY_ON = 3,
-};
-
-struct gpd_link {
-	struct generic_pm_domain *parent;
-	struct list_head parent_node;
-	struct generic_pm_domain *child;
-	struct list_head child_node;
-	unsigned int performance_state;
-	unsigned int prev_performance_state;
-};
-
-struct gpd_timing_data {
-	s64 suspend_latency_ns;
-	s64 resume_latency_ns;
-	s64 effective_constraint_ns;
-	bool constraint_changed;
-	bool cached_suspend_ok;
-};
-
-struct generic_pm_domain_data {
-	struct pm_domain_data base;
-	struct gpd_timing_data td;
-	struct notifier_block nb;
-	struct notifier_block *power_nb;
-	int cpu;
-	unsigned int performance_state;
-	void *data;
-};
-
-struct of_genpd_provider {
-	struct list_head link;
-	struct device_node *node;
-	genpd_xlate_t xlate;
-	void *data;
-};
-
-struct pm_clk_notifier_block {
-	struct notifier_block nb;
-	struct dev_pm_domain *pm_domain;
-	char *con_ids[0];
-};
-
-enum pce_status {
-	PCE_STATUS_NONE = 0,
-	PCE_STATUS_ACQUIRED = 1,
-	PCE_STATUS_ENABLED = 2,
-	PCE_STATUS_ERROR = 3,
-};
-
-struct pm_clock_entry {
-	struct list_head node;
-	char *con_id;
-	struct clk *clk;
-	enum pce_status status;
-};
-
-struct firmware_fallback_config {
-	unsigned int force_sysfs_fallback;
-	unsigned int ignore_sysfs_fallback;
-	int old_timeout;
-	int loading_timeout;
-};
-
-struct builtin_fw {
-	char *name;
-	void *data;
-	long unsigned int size;
+	unsigned int managed: 1;
 };
 
 enum fw_opt {
@@ -83241,8 +114678,6 @@
 	struct page **pages;
 	int nr_pages;
 	int page_array_size;
-	bool need_uevent;
-	struct list_head pending_list;
 	const char *fw_name;
 };
 
@@ -83250,6 +114685,20 @@
 	spinlock_t lock;
 	struct list_head head;
 	int state;
+	spinlock_t name_lock;
+	struct list_head fw_names;
+	struct delayed_work work;
+	struct notifier_block pm_notify;
+};
+
+struct fw_cache_entry {
+	struct list_head list;
+	const char *name;
+};
+
+struct fw_name_devm {
+	long unsigned int magic;
+	const char *name;
 };
 
 struct firmware_work {
@@ -83262,1450 +114711,16 @@
 	u32 opt_flags;
 };
 
-struct fw_sysfs {
-	bool nowait;
-	struct device dev;
-	struct fw_priv *fw_priv;
-	struct firmware *fw;
-};
-
-typedef void (*node_registration_func_t)(struct node___2 *);
-
-typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
-
-struct node_access_nodes {
-	struct device dev;
-	struct list_head list_node;
-	unsigned int access;
-	struct node_hmem_attrs hmem_attrs;
-};
-
-struct node_cache_info {
-	struct device dev;
-	struct list_head node;
-	struct node_cache_attrs cache_attrs;
-};
-
-struct node_attr {
-	struct device_attribute attr;
-	enum node_states state;
-};
-
-struct for_each_memory_block_cb_data {
-	walk_memory_blocks_func_t func;
-	void *arg;
-};
-
-typedef int (*regmap_hw_write)(void *, const void *, size_t);
-
-typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
-
-struct regmap_async;
-
-typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
-
-struct regmap___2;
-
-struct regmap_async {
-	struct list_head list;
-	struct regmap___2 *map;
-	void *work_buf;
-};
-
-typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
-
-typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
-
-typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
-
-typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-
-typedef struct regmap_async * (*regmap_hw_async_alloc)();
-
-typedef void (*regmap_hw_free_context)(void *);
-
-struct regmap_bus {
-	bool fast_io;
-	regmap_hw_write write;
-	regmap_hw_gather_write gather_write;
-	regmap_hw_async_write async_write;
-	regmap_hw_reg_write reg_write;
-	regmap_hw_reg_update_bits reg_update_bits;
-	regmap_hw_read read;
-	regmap_hw_reg_read reg_read;
-	regmap_hw_free_context free_context;
-	regmap_hw_async_alloc async_alloc;
-	u8 read_flag_mask;
-	enum regmap_endian reg_format_endian_default;
-	enum regmap_endian val_format_endian_default;
-	size_t max_raw_read;
-	size_t max_raw_write;
-};
-
-struct reg_field {
-	unsigned int reg;
-	unsigned int lsb;
-	unsigned int msb;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct regmap_format {
-	size_t buf_size;
-	size_t reg_bytes;
-	size_t pad_bytes;
-	size_t val_bytes;
-	void (*format_write)(struct regmap___2 *, unsigned int, unsigned int);
-	void (*format_reg)(void *, unsigned int, unsigned int);
-	void (*format_val)(void *, unsigned int, unsigned int);
-	unsigned int (*parse_val)(const void *);
-	void (*parse_inplace)(void *);
-};
-
-struct regcache_ops;
-
-struct regmap___2 {
-	union {
-		struct mutex mutex;
-		struct {
-			spinlock_t spinlock;
-			long unsigned int spinlock_flags;
-		};
-	};
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	gfp_t alloc_flags;
-	struct device *dev;
-	void *work_buf;
-	struct regmap_format format;
-	const struct regmap_bus *bus;
-	void *bus_context;
-	const char *name;
-	bool async;
-	spinlock_t async_lock;
-	wait_queue_head_t async_waitq;
-	struct list_head async_list;
-	struct list_head async_free;
-	int async_ret;
-	bool debugfs_disable;
-	struct dentry *debugfs;
-	const char *debugfs_name;
-	unsigned int debugfs_reg_len;
-	unsigned int debugfs_val_len;
-	unsigned int debugfs_tot_len;
-	struct list_head debugfs_off_cache;
-	struct mutex cache_lock;
-	unsigned int max_register;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-	bool defer_caching;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	int reg_shift;
-	int reg_stride;
-	int reg_stride_order;
-	const struct regcache_ops *cache_ops;
-	enum regcache_type cache_type;
-	unsigned int cache_size_raw;
-	unsigned int cache_word_size;
-	unsigned int num_reg_defaults;
-	unsigned int num_reg_defaults_raw;
-	bool cache_only;
-	bool cache_bypass;
-	bool cache_free;
-	struct reg_default *reg_defaults;
-	const void *reg_defaults_raw;
-	void *cache;
-	bool cache_dirty;
-	bool no_sync_defaults;
-	struct reg_sequence *patch;
-	int patch_regs;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	size_t max_raw_read;
-	size_t max_raw_write;
-	struct rb_root range_tree;
-	void *selector_work_buf;
-	struct hwspinlock *hwlock;
-	bool can_sleep;
-};
-
-struct regcache_ops {
-	const char *name;
-	enum regcache_type type;
-	int (*init)(struct regmap___2 *);
-	int (*exit)(struct regmap___2 *);
-	void (*debugfs_init)(struct regmap___2 *);
-	int (*read)(struct regmap___2 *, unsigned int, unsigned int *);
-	int (*write)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*sync)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*drop)(struct regmap___2 *, unsigned int, unsigned int);
-};
-
-struct regmap_range_node {
-	struct rb_node node;
-	const char *name;
-	struct regmap___2 *map;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct regmap_field {
-	struct regmap___2 *regmap;
-	unsigned int mask;
-	unsigned int shift;
-	unsigned int reg;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct trace_event_raw_regmap_reg {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_block {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	int count;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_sync {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_status;
-	u32 __data_loc_type;
-	int type;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_bool {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flag;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_async {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_drop_region {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int from;
-	unsigned int to;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regmap_reg {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_block {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_sync {
-	u32 name;
-	u32 status;
-	u32 type;
-};
-
-struct trace_event_data_offsets_regmap_bool {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_async {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_drop_region {
-	u32 name;
-};
-
-typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regcache_sync)(void *, struct regmap___2 *, const char *, const char *);
-
-typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap___2 *, bool);
-
-typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap___2 *, bool);
-
-typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-struct regcache_rbtree_node {
-	void *block;
-	long int *cache_present;
-	unsigned int base_reg;
-	unsigned int blklen;
-	struct rb_node node;
-};
-
-struct regcache_rbtree_ctx {
-	struct rb_root root;
-	struct regcache_rbtree_node *cached_rbnode;
-};
-
-struct regmap_debugfs_off_cache {
-	struct list_head list;
-	off_t min;
-	off_t max;
-	unsigned int base_reg;
-	unsigned int max_reg;
-};
-
-struct regmap_debugfs_node {
-	struct regmap___2 *map;
-	struct list_head link;
-};
-
-struct ptp_system_timestamp {
-	struct timespec64 pre_ts;
-	struct timespec64 post_ts;
-};
-
-struct spi_statistics {
-	spinlock_t lock;
-	long unsigned int messages;
-	long unsigned int transfers;
-	long unsigned int errors;
-	long unsigned int timedout;
-	long unsigned int spi_sync;
-	long unsigned int spi_sync_immediate;
-	long unsigned int spi_async;
-	long long unsigned int bytes;
-	long long unsigned int bytes_rx;
-	long long unsigned int bytes_tx;
-	long unsigned int transfer_bytes_histo[17];
-	long unsigned int transfers_split_maxsize;
-};
-
-struct spi_delay {
-	u16 value;
-	u8 unit;
-};
-
-struct spi_controller;
-
-struct spi_device {
-	struct device dev;
-	struct spi_controller *controller;
-	struct spi_controller *master;
-	u32 max_speed_hz;
-	u8 chip_select;
-	u8 bits_per_word;
-	bool rt;
-	u32 mode;
-	int irq;
-	void *controller_state;
-	void *controller_data;
-	char modalias[32];
-	const char *driver_override;
-	int cs_gpio;
-	struct gpio_desc *cs_gpiod;
-	struct spi_delay word_delay;
-	struct spi_statistics statistics;
-};
-
-struct spi_message;
-
-struct spi_transfer;
-
-struct spi_controller_mem_ops;
-
-struct spi_controller {
-	struct device dev;
-	struct list_head list;
-	s16 bus_num;
-	u16 num_chipselect;
-	u16 dma_alignment;
-	u32 mode_bits;
-	u32 buswidth_override_bits;
-	u32 bits_per_word_mask;
-	u32 min_speed_hz;
-	u32 max_speed_hz;
-	u16 flags;
-	bool slave;
-	size_t (*max_transfer_size)(struct spi_device *);
-	size_t (*max_message_size)(struct spi_device *);
-	struct mutex io_mutex;
-	spinlock_t bus_lock_spinlock;
-	struct mutex bus_lock_mutex;
-	bool bus_lock_flag;
-	int (*setup)(struct spi_device *);
-	int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
-	int (*transfer)(struct spi_device *, struct spi_message *);
-	void (*cleanup)(struct spi_device *);
-	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	bool queued;
-	struct kthread_worker *kworker;
-	struct kthread_work pump_messages;
-	spinlock_t queue_lock;
-	struct list_head queue;
-	struct spi_message *cur_msg;
-	bool idling;
-	bool busy;
-	bool running;
-	bool rt;
-	bool auto_runtime_pm;
-	bool cur_msg_prepared;
-	bool cur_msg_mapped;
-	bool last_cs_enable;
-	bool last_cs_mode_high;
-	bool fallback;
-	struct completion xfer_completion;
-	size_t max_dma_len;
-	int (*prepare_transfer_hardware)(struct spi_controller *);
-	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_transfer_hardware)(struct spi_controller *);
-	int (*prepare_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
-	int (*slave_abort)(struct spi_controller *);
-	void (*set_cs)(struct spi_device *, bool);
-	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	void (*handle_err)(struct spi_controller *, struct spi_message *);
-	const struct spi_controller_mem_ops *mem_ops;
-	struct spi_delay cs_setup;
-	struct spi_delay cs_hold;
-	struct spi_delay cs_inactive;
-	int *cs_gpios;
-	struct gpio_desc **cs_gpiods;
-	bool use_gpio_descriptors;
-	u8 unused_native_cs;
-	u8 max_native_cs;
-	struct spi_statistics statistics;
-	struct dma_chan *dma_tx;
-	struct dma_chan *dma_rx;
-	void *dummy_rx;
-	void *dummy_tx;
-	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
-	bool ptp_sts_supported;
-	long unsigned int irq_flags;
-};
-
-struct spi_message {
-	struct list_head transfers;
-	struct spi_device *spi;
-	unsigned int is_dma_mapped: 1;
-	void (*complete)(void *);
-	void *context;
-	unsigned int frame_length;
-	unsigned int actual_length;
-	int status;
-	struct list_head queue;
-	void *state;
-	struct list_head resources;
-};
-
-struct spi_transfer {
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int len;
-	dma_addr_t tx_dma;
-	dma_addr_t rx_dma;
-	struct sg_table tx_sg;
-	struct sg_table rx_sg;
-	unsigned int cs_change: 1;
-	unsigned int tx_nbits: 3;
-	unsigned int rx_nbits: 3;
-	u8 bits_per_word;
-	u16 delay_usecs;
-	struct spi_delay delay;
-	struct spi_delay cs_change_delay;
-	struct spi_delay word_delay;
-	u32 speed_hz;
-	u32 effective_speed_hz;
-	unsigned int ptp_sts_word_pre;
-	unsigned int ptp_sts_word_post;
-	struct ptp_system_timestamp *ptp_sts;
-	bool timestamped;
-	struct list_head transfer_list;
-	u16 error;
-};
-
-struct spi_mem;
-
-struct spi_mem_op;
-
-struct spi_mem_dirmap_desc;
-
-struct spi_controller_mem_ops {
-	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
-	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
-	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
-	const char * (*get_name)(struct spi_mem *);
-	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
-	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
-	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
-	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
-};
-
-struct regmap_async_spi {
-	struct regmap_async core;
-	struct spi_message m;
-	struct spi_transfer t[2];
-};
-
 struct regmap_mmio_context {
 	void *regs;
 	unsigned int val_bytes;
+	bool big_endian;
 	bool attached_clk;
 	struct clk *clk;
 	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
 	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
 };
 
-struct regmap_irq_chip_data___2 {
-	struct mutex lock;
-	struct irq_chip irq_chip;
-	struct regmap___2 *map;
-	const struct regmap_irq_chip *chip;
-	int irq_base;
-	struct irq_domain *domain;
-	int irq;
-	int wake_count;
-	void *status_reg_buf;
-	unsigned int *main_status_buf;
-	unsigned int *status_buf;
-	unsigned int *mask_buf;
-	unsigned int *mask_buf_def;
-	unsigned int *wake_buf;
-	unsigned int *type_buf;
-	unsigned int *type_buf_def;
-	unsigned int irq_reg_stride;
-	unsigned int type_reg_stride;
-	bool clear_status: 1;
-};
-
-struct soc_device___2 {
-	struct device dev;
-	struct soc_device_attribute *attr;
-	int soc_dev_num;
-};
-
-struct devcd_entry {
-	struct device devcd_dev;
-	void *data;
-	size_t datalen;
-	struct module *owner;
-	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
-	void (*free)(void *);
-	struct delayed_work del_wk;
-	struct device *failing_dev;
-};
-
-typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
-
-struct platform_msi_priv_data {
-	struct device *dev;
-	void *host_data;
-	msi_alloc_info_t arg;
-	irq_write_msi_msg_t write_msg;
-	int devid;
-};
-
-struct brd_device {
-	int brd_number;
-	struct request_queue *brd_queue;
-	struct gendisk *brd_disk;
-	struct list_head brd_list;
-	spinlock_t brd_lock;
-	struct xarray brd_pages;
-};
-
-typedef unsigned int __kernel_old_dev_t;
-
-enum {
-	LO_FLAGS_READ_ONLY = 1,
-	LO_FLAGS_AUTOCLEAR = 4,
-	LO_FLAGS_PARTSCAN = 8,
-	LO_FLAGS_DIRECT_IO = 16,
-};
-
-struct loop_info {
-	int lo_number;
-	__kernel_old_dev_t lo_device;
-	long unsigned int lo_inode;
-	__kernel_old_dev_t lo_rdevice;
-	int lo_offset;
-	int lo_encrypt_type;
-	int lo_encrypt_key_size;
-	int lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	long unsigned int lo_init[2];
-	char reserved[4];
-};
-
-struct loop_info64 {
-	__u64 lo_device;
-	__u64 lo_inode;
-	__u64 lo_rdevice;
-	__u64 lo_offset;
-	__u64 lo_sizelimit;
-	__u32 lo_number;
-	__u32 lo_encrypt_type;
-	__u32 lo_encrypt_key_size;
-	__u32 lo_flags;
-	__u8 lo_file_name[64];
-	__u8 lo_crypt_name[64];
-	__u8 lo_encrypt_key[32];
-	__u64 lo_init[2];
-};
-
-struct loop_config {
-	__u32 fd;
-	__u32 block_size;
-	struct loop_info64 info;
-	__u64 __reserved[8];
-};
-
-enum {
-	Lo_unbound = 0,
-	Lo_bound = 1,
-	Lo_rundown = 2,
-};
-
-struct loop_func_table;
-
-struct loop_device {
-	int lo_number;
-	atomic_t lo_refcnt;
-	loff_t lo_offset;
-	loff_t lo_sizelimit;
-	int lo_flags;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	char lo_file_name[64];
-	char lo_crypt_name[64];
-	char lo_encrypt_key[32];
-	int lo_encrypt_key_size;
-	struct loop_func_table *lo_encryption;
-	__u32 lo_init[2];
-	kuid_t lo_key_owner;
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct file *lo_backing_file;
-	struct block_device *lo_device;
-	void *key_data;
-	gfp_t old_gfp_mask;
-	spinlock_t lo_lock;
-	int lo_state;
-	struct kthread_worker worker;
-	struct task_struct *worker_task;
-	bool use_dio;
-	bool sysfs_inited;
-	struct request_queue *lo_queue;
-	struct blk_mq_tag_set tag_set;
-	struct gendisk *lo_disk;
-};
-
-struct loop_func_table {
-	int number;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	int (*init)(struct loop_device *, const struct loop_info64 *);
-	int (*release)(struct loop_device *);
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct module *owner;
-};
-
-struct loop_cmd {
-	struct kthread_work work;
-	bool use_aio;
-	atomic_t ref;
-	long int ret;
-	struct kiocb iocb;
-	struct bio_vec *bvec;
-	struct cgroup_subsys_state *css;
-};
-
-struct compat_loop_info {
-	compat_int_t lo_number;
-	compat_dev_t lo_device;
-	compat_ulong_t lo_inode;
-	compat_dev_t lo_rdevice;
-	compat_int_t lo_offset;
-	compat_int_t lo_encrypt_type;
-	compat_int_t lo_encrypt_key_size;
-	compat_int_t lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	compat_ulong_t lo_init[2];
-	char reserved[4];
-};
-
-typedef uint16_t blkif_vdev_t;
-
-typedef uint64_t blkif_sector_t;
-
-struct blkif_request_segment {
-	grant_ref_t gref;
-	uint8_t first_sect;
-	uint8_t last_sect;
-};
-
-struct blkif_request_rw {
-	uint8_t nr_segments;
-	blkif_vdev_t handle;
-	uint32_t _pad1;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	struct blkif_request_segment seg[11];
-} __attribute__((packed));
-
-struct blkif_request_discard {
-	uint8_t flag;
-	blkif_vdev_t _pad1;
-	uint32_t _pad2;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	uint64_t nr_sectors;
-	uint8_t _pad3;
-} __attribute__((packed));
-
-struct blkif_request_other {
-	uint8_t _pad1;
-	blkif_vdev_t _pad2;
-	uint32_t _pad3;
-	uint64_t id;
-} __attribute__((packed));
-
-struct blkif_request_indirect {
-	uint8_t indirect_op;
-	uint16_t nr_segments;
-	uint32_t _pad1;
-	uint64_t id;
-	blkif_sector_t sector_number;
-	blkif_vdev_t handle;
-	uint16_t _pad2;
-	grant_ref_t indirect_grefs[8];
-	uint32_t _pad3;
-} __attribute__((packed));
-
-struct blkif_request {
-	uint8_t operation;
-	union {
-		struct blkif_request_rw rw;
-		struct blkif_request_discard discard;
-		struct blkif_request_other other;
-		struct blkif_request_indirect indirect;
-	} u;
-} __attribute__((packed));
-
-struct blkif_response {
-	uint64_t id;
-	uint8_t operation;
-	int16_t status;
-};
-
-union blkif_sring_entry {
-	struct blkif_request req;
-	struct blkif_response rsp;
-};
-
-struct blkif_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union blkif_sring_entry ring[1];
-};
-
-struct blkif_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct blkif_sring *sring;
-};
-
-enum blkif_state {
-	BLKIF_STATE_DISCONNECTED = 0,
-	BLKIF_STATE_CONNECTED = 1,
-	BLKIF_STATE_SUSPENDED = 2,
-};
-
-struct grant {
-	grant_ref_t gref;
-	struct page *page;
-	struct list_head node;
-};
-
-enum blk_req_status {
-	REQ_WAITING = 0,
-	REQ_DONE = 1,
-	REQ_ERROR = 2,
-	REQ_EOPNOTSUPP = 3,
-};
-
-struct blk_shadow {
-	struct blkif_request req;
-	struct request *request;
-	struct grant **grants_used;
-	struct grant **indirect_grants;
-	struct scatterlist *sg;
-	unsigned int num_sg;
-	enum blk_req_status status;
-	long unsigned int associated_id;
-};
-
-struct blkif_req {
-	blk_status_t error;
-};
-
-struct blkfront_info;
-
-struct blkfront_ring_info {
-	spinlock_t ring_lock;
-	struct blkif_front_ring ring;
-	unsigned int ring_ref[16];
-	unsigned int evtchn;
-	unsigned int irq;
-	struct work_struct work;
-	struct gnttab_free_callback callback;
-	struct list_head indirect_pages;
-	struct list_head grants;
-	unsigned int persistent_gnts_c;
-	long unsigned int shadow_free;
-	struct blkfront_info *dev_info;
-	struct blk_shadow shadow[0];
-};
-
-struct blkfront_info {
-	struct mutex mutex;
-	struct xenbus_device *xbdev;
-	struct gendisk *gd;
-	u16 sector_size;
-	unsigned int physical_sector_size;
-	int vdevice;
-	blkif_vdev_t handle;
-	enum blkif_state connected;
-	unsigned int nr_ring_pages;
-	struct request_queue *rq;
-	unsigned int feature_flush: 1;
-	unsigned int feature_fua: 1;
-	unsigned int feature_discard: 1;
-	unsigned int feature_secdiscard: 1;
-	unsigned int feature_persistent: 1;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	unsigned int max_indirect_segments;
-	int is_ready;
-	struct blk_mq_tag_set tag_set;
-	struct blkfront_ring_info *rinfo;
-	unsigned int nr_rings;
-	unsigned int rinfo_size;
-	struct list_head requests;
-	struct bio_list bio_list;
-	struct list_head info_list;
-};
-
-struct setup_rw_req {
-	unsigned int grant_idx;
-	struct blkif_request_segment *segments;
-	struct blkfront_ring_info *rinfo;
-	struct blkif_request *ring_req;
-	grant_ref_t gref_head;
-	unsigned int id;
-	bool need_copy;
-	unsigned int bvec_off;
-	char *bvec_data;
-	bool require_extra_req;
-	struct blkif_request *extra_ring_req;
-};
-
-struct copy_from_grant {
-	const struct blk_shadow *s;
-	unsigned int grant_idx;
-	unsigned int bvec_offset;
-	char *bvec_data;
-};
-
-struct test_struct {
-	char *get;
-	char *put;
-	void (*get_handler)(char *);
-	int (*put_handler)(char *, char *);
-};
-
-struct test_state {
-	char *name;
-	struct test_struct *tst;
-	int idx;
-	int (*run_test)(int, int);
-	int (*validate_put)(char *);
-};
-
-struct sram_partition {
-	void *base;
-	struct gen_pool *pool;
-	struct bin_attribute battr;
-	struct mutex lock;
-	struct list_head list;
-};
-
-struct sram_dev {
-	struct device *dev;
-	void *virt_base;
-	struct gen_pool *pool;
-	struct clk *clk;
-	struct sram_partition *partition;
-	u32 partitions;
-};
-
-struct sram_reserve {
-	struct list_head list;
-	u32 start;
-	u32 size;
-	bool export;
-	bool pool;
-	bool protect_exec;
-	const char *label;
-};
-
-struct mfd_cell_acpi_match;
-
-struct mfd_cell {
-	const char *name;
-	int id;
-	int level;
-	int (*enable)(struct platform_device *);
-	int (*disable)(struct platform_device *);
-	int (*suspend)(struct platform_device *);
-	int (*resume)(struct platform_device *);
-	void *platform_data;
-	size_t pdata_size;
-	const struct property_entry *properties;
-	const char *of_compatible;
-	const u64 of_reg;
-	bool use_of_reg;
-	const struct mfd_cell_acpi_match *acpi_match;
-	int num_resources;
-	const struct resource *resources;
-	bool ignore_resource_conflicts;
-	bool pm_runtime_no_callbacks;
-	const char * const *parent_supplies;
-	int num_parent_supplies;
-};
-
-struct mfd_cell_acpi_match {
-	const char *pnpid;
-	const long long unsigned int adr;
-};
-
-struct prcm_data {
-	int nsubdevs;
-	const struct mfd_cell *subdevs;
-};
-
-struct arizona_micbias {
-	int mV;
-	unsigned int ext_cap: 1;
-	unsigned int discharge: 1;
-	unsigned int soft_start: 1;
-	unsigned int bypass: 1;
-};
-
-struct arizona_micd_config {
-	unsigned int src;
-	unsigned int bias;
-	bool gpio;
-};
-
-struct arizona_micd_range {
-	int max;
-	int key;
-};
-
-struct arizona_pdata {
-	struct gpio_desc *reset;
-	struct arizona_micsupp_pdata micvdd;
-	struct arizona_ldo1_pdata ldo1;
-	int clk32k_src;
-	unsigned int irq_flags;
-	int gpio_base;
-	unsigned int gpio_defaults[5];
-	unsigned int max_channels_clocked[3];
-	bool jd_gpio5;
-	bool jd_gpio5_nopull;
-	bool jd_invert;
-	bool hpdet_acc_id;
-	bool hpdet_acc_id_line;
-	int hpdet_id_gpio;
-	unsigned int hpdet_channel;
-	bool micd_software_compare;
-	unsigned int micd_detect_debounce;
-	int micd_pol_gpio;
-	unsigned int micd_bias_start_time;
-	unsigned int micd_rate;
-	unsigned int micd_dbtime;
-	unsigned int micd_timeout;
-	bool micd_force_micbias;
-	const struct arizona_micd_range *micd_ranges;
-	int num_micd_ranges;
-	struct arizona_micd_config *micd_configs;
-	int num_micd_configs;
-	int dmic_ref[4];
-	struct arizona_micbias micbias[3];
-	int inmode[4];
-	int out_mono[6];
-	unsigned int out_vol_limit[12];
-	unsigned int spk_mute[2];
-	unsigned int spk_fmt[2];
-	unsigned int hap_act;
-	int irq_gpio;
-	unsigned int gpsw;
-};
-
-enum {
-	ARIZONA_MCLK1 = 0,
-	ARIZONA_MCLK2 = 1,
-	ARIZONA_NUM_MCLK = 2,
-};
-
-enum arizona_type {
-	WM5102 = 1,
-	WM5110 = 2,
-	WM8997 = 3,
-	WM8280 = 4,
-	WM8998 = 5,
-	WM1814 = 6,
-	WM1831 = 7,
-	CS47L24 = 8,
-};
-
-struct arizona {
-	struct regmap *regmap;
-	struct device *dev;
-	enum arizona_type type;
-	unsigned int rev;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool has_fully_powered_off;
-	struct arizona_pdata pdata;
-	unsigned int external_dcvdd: 1;
-	int irq;
-	struct irq_domain *virq;
-	struct regmap_irq_chip_data *aod_irq_chip;
-	struct regmap_irq_chip_data *irq_chip;
-	bool hpdet_clamp;
-	unsigned int hp_ena;
-	struct mutex clk_lock;
-	int clk32k_ref;
-	struct clk *mclk[2];
-	bool ctrlif_error;
-	struct snd_soc_dapm_context *dapm;
-	int tdm_width[3];
-	int tdm_slots[3];
-	uint16_t dac_comp_coeff;
-	uint8_t dac_comp_enabled;
-	struct mutex dac_comp_lock;
-	struct blocking_notifier_head notifier;
-};
-
-struct arizona_sysclk_state {
-	unsigned int fll;
-	unsigned int sysclk;
-};
-
-enum tps65912_irqs {
-	TPS65912_IRQ_PWRHOLD_F = 0,
-	TPS65912_IRQ_VMON = 1,
-	TPS65912_IRQ_PWRON = 2,
-	TPS65912_IRQ_PWRON_LP = 3,
-	TPS65912_IRQ_PWRHOLD_R = 4,
-	TPS65912_IRQ_HOTDIE = 5,
-	TPS65912_IRQ_GPIO1_R = 6,
-	TPS65912_IRQ_GPIO1_F = 7,
-	TPS65912_IRQ_GPIO2_R = 8,
-	TPS65912_IRQ_GPIO2_F = 9,
-	TPS65912_IRQ_GPIO3_R = 10,
-	TPS65912_IRQ_GPIO3_F = 11,
-	TPS65912_IRQ_GPIO4_R = 12,
-	TPS65912_IRQ_GPIO4_F = 13,
-	TPS65912_IRQ_GPIO5_R = 14,
-	TPS65912_IRQ_GPIO5_F = 15,
-	TPS65912_IRQ_PGOOD_DCDC1 = 16,
-	TPS65912_IRQ_PGOOD_DCDC2 = 17,
-	TPS65912_IRQ_PGOOD_DCDC3 = 18,
-	TPS65912_IRQ_PGOOD_DCDC4 = 19,
-	TPS65912_IRQ_PGOOD_LDO1 = 20,
-	TPS65912_IRQ_PGOOD_LDO2 = 21,
-	TPS65912_IRQ_PGOOD_LDO3 = 22,
-	TPS65912_IRQ_PGOOD_LDO4 = 23,
-	TPS65912_IRQ_PGOOD_LDO5 = 24,
-	TPS65912_IRQ_PGOOD_LDO6 = 25,
-	TPS65912_IRQ_PGOOD_LDO7 = 26,
-	TPS65912_IRQ_PGOOD_LDO8 = 27,
-	TPS65912_IRQ_PGOOD_LDO9 = 28,
-	TPS65912_IRQ_PGOOD_LDO10 = 29,
-};
-
-struct tps65912 {
-	struct device *dev;
-	struct regmap *regmap;
-	int irq;
-	struct regmap_irq_chip_data *irq_data;
-};
-
-struct spi_device_id {
-	char name[32];
-	kernel_ulong_t driver_data;
-};
-
-struct spi_driver {
-	const struct spi_device_id *id_table;
-	int (*probe)(struct spi_device *);
-	int (*remove)(struct spi_device *);
-	void (*shutdown)(struct spi_device *);
-	struct device_driver driver;
-};
-
-struct mfd_of_node_entry {
-	struct list_head list;
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct da9052 {
-	struct device *dev;
-	struct regmap *regmap;
-	struct mutex auxadc_lock;
-	struct completion done;
-	int irq_base;
-	struct regmap_irq_chip_data *irq_data;
-	u8 chip_id;
-	int chip_irq;
-	int (*fix_io)(struct da9052 *, unsigned char);
-};
-
-struct led_platform_data;
-
-struct da9052_pdata {
-	struct led_platform_data *pled;
-	int (*init)(struct da9052 *);
-	int irq_base;
-	int gpio_base;
-	int use_for_apm;
-	struct regulator_init_data *regulators[14];
-};
-
-enum da9052_chip_id {
-	DA9052 = 0,
-	DA9053_AA = 1,
-	DA9053_BA = 2,
-	DA9053_BB = 3,
-	DA9053_BC = 4,
-};
-
-struct syscon_platform_data {
-	const char *label;
-};
-
-struct syscon {
-	struct device_node *np;
-	struct regmap *regmap;
-	struct list_head list;
-};
-
-struct dax_device___2;
-
-struct dax_operations {
-	long int (*direct_access)(struct dax_device___2 *, long unsigned int, long int, void **, pfn_t *);
-	bool (*dax_supported)(struct dax_device___2 *, struct block_device *, int, sector_t, sector_t);
-	size_t (*copy_from_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	size_t (*copy_to_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	int (*zero_page_range)(struct dax_device___2 *, long unsigned int, size_t);
-};
-
-struct dax_device___2 {
-	struct hlist_node list;
-	struct inode inode;
-	struct cdev cdev;
-	const char *host;
-	void *private;
-	long unsigned int flags;
-	const struct dax_operations *ops;
-};
-
-enum dax_device_flags {
-	DAXDEV_ALIVE = 0,
-	DAXDEV_WRITE_CACHE = 1,
-	DAXDEV_SYNC = 2,
-};
-
-struct dax_region {
-	int id;
-	int target_node;
-	struct kref kref;
-	struct device *dev;
-	unsigned int align;
-	struct ida ida;
-	struct resource res;
-	struct device *seed;
-	struct device *youngest;
-};
-
-struct dax_mapping {
-	struct device dev;
-	int range_id;
-	int id;
-};
-
-struct dev_dax_range {
-	long unsigned int pgoff;
-	struct range range;
-	struct dax_mapping *mapping;
-};
-
-struct dev_dax {
-	struct dax_region *region;
-	struct dax_device *dax_dev;
-	unsigned int align;
-	int target_node;
-	int id;
-	struct ida ida;
-	struct device dev;
-	struct dev_pagemap *pgmap;
-	int nr_range;
-	struct dev_dax_range *ranges;
-};
-
-enum dev_dax_subsys {
-	DEV_DAX_BUS = 0,
-	DEV_DAX_CLASS = 1,
-};
-
-struct dev_dax_data {
-	struct dax_region *dax_region;
-	struct dev_pagemap *pgmap;
-	enum dev_dax_subsys subsys;
-	resource_size_t size;
-	int id;
-};
-
-struct dax_device_driver {
-	struct device_driver drv;
-	struct list_head ids;
-	int match_always;
-	int (*probe)(struct dev_dax *);
-	int (*remove)(struct dev_dax *);
-};
-
-struct dax_id {
-	struct list_head list;
-	char dev_name[30];
-};
-
-enum id_action {
-	ID_REMOVE = 0,
-	ID_ADD = 1,
-};
-
-struct memregion_info {
-	int target_node;
-};
-
-struct seqcount_ww_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_ww_mutex seqcount_ww_mutex_t;
-
-struct dma_fence_ops;
-
-struct dma_fence {
-	spinlock_t *lock;
-	const struct dma_fence_ops *ops;
-	union {
-		struct list_head cb_list;
-		ktime_t timestamp;
-		struct callback_head rcu;
-	};
-	u64 context;
-	u64 seqno;
-	long unsigned int flags;
-	struct kref refcount;
-	int error;
-};
-
-struct dma_fence_ops {
-	bool use_64bit_seqno;
-	const char * (*get_driver_name)(struct dma_fence *);
-	const char * (*get_timeline_name)(struct dma_fence *);
-	bool (*enable_signaling)(struct dma_fence *);
-	bool (*signaled)(struct dma_fence *);
-	long int (*wait)(struct dma_fence *, bool, long int);
-	void (*release)(struct dma_fence *);
-	void (*fence_value_str)(struct dma_fence *, char *, int);
-	void (*timeline_value_str)(struct dma_fence *, char *, int);
-};
-
-enum dma_fence_flag_bits {
-	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
-	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
-	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
-	DMA_FENCE_FLAG_USER_BITS = 3,
-};
-
-struct dma_fence_cb;
-
-typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
-
-struct dma_fence_cb {
-	struct list_head node;
-	dma_fence_func_t func;
-};
-
-struct dma_buf;
-
-struct dma_buf_attachment;
-
-struct dma_buf_ops {
-	bool cache_sgt_mapping;
-	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
-	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
-	int (*pin)(struct dma_buf_attachment *);
-	void (*unpin)(struct dma_buf_attachment *);
-	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
-	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
-	void (*release)(struct dma_buf *);
-	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
-	void * (*vmap)(struct dma_buf *);
-	void (*vunmap)(struct dma_buf *, void *);
-};
-
-struct dma_buf_poll_cb_t {
-	struct dma_fence_cb cb;
-	wait_queue_head_t *poll;
-	__poll_t active;
-};
-
-struct dma_resv;
-
-struct dma_buf {
-	size_t size;
-	struct file *file;
-	struct list_head attachments;
-	const struct dma_buf_ops *ops;
-	struct mutex lock;
-	unsigned int vmapping_counter;
-	void *vmap_ptr;
-	const char *exp_name;
-	const char *name;
-	spinlock_t name_lock;
-	struct module *owner;
-	struct list_head list_node;
-	void *priv;
-	struct dma_resv *resv;
-	wait_queue_head_t poll;
-	struct dma_buf_poll_cb_t cb_excl;
-	struct dma_buf_poll_cb_t cb_shared;
-};
-
-struct dma_buf_attach_ops;
-
-struct dma_buf_attachment {
-	struct dma_buf *dmabuf;
-	struct device *dev;
-	struct list_head node;
-	struct sg_table *sgt;
-	enum dma_data_direction dir;
-	bool peer2peer;
-	const struct dma_buf_attach_ops *importer_ops;
-	void *importer_priv;
-	void *priv;
-};
-
-struct dma_resv_list;
-
-struct dma_resv {
-	struct ww_mutex lock;
-	seqcount_ww_mutex_t seq;
-	struct dma_fence *fence_excl;
-	struct dma_resv_list *fence;
-};
-
-struct dma_buf_attach_ops {
-	bool allow_peer2peer;
-	void (*move_notify)(struct dma_buf_attachment *);
-};
-
-struct dma_buf_export_info {
-	const char *exp_name;
-	struct module *owner;
-	const struct dma_buf_ops *ops;
-	size_t size;
-	int flags;
-	struct dma_resv *resv;
-	void *priv;
-};
-
-struct dma_resv_list {
-	struct callback_head rcu;
-	u32 shared_count;
-	u32 shared_max;
-	struct dma_fence *shared[0];
-};
-
-struct dma_buf_sync {
-	__u64 flags;
-};
-
-struct dma_buf_list {
-	struct list_head head;
-	struct mutex lock;
-};
-
 struct trace_event_raw_dma_fence {
 	struct trace_entry ent;
 	u32 __data_loc_driver;
@@ -84739,2704 +114754,549 @@
 	struct task_struct *task;
 };
 
-struct dma_fence_array;
-
-struct dma_fence_array_cb {
-	struct dma_fence_cb cb;
-	struct dma_fence_array *array;
-};
-
-struct dma_fence_array {
-	struct dma_fence base;
-	spinlock_t lock;
-	unsigned int num_fences;
-	atomic_t num_pending;
-	struct dma_fence **fences;
-	struct irq_work work;
-};
-
-struct dma_fence_chain {
-	struct dma_fence base;
-	spinlock_t lock;
-	struct dma_fence *prev;
-	u64 prev_seqno;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-	struct irq_work work;
-};
-
-enum seqno_fence_condition {
-	SEQNO_FENCE_WAIT_GEQUAL = 0,
-	SEQNO_FENCE_WAIT_NONZERO = 1,
-};
-
-struct seqno_fence {
-	struct dma_fence base;
-	const struct dma_fence_ops *ops;
-	struct dma_buf *sync_buf;
-	uint32_t seqno_ofs;
-	enum seqno_fence_condition condition;
-};
-
-struct sync_file {
-	struct file *file;
-	char user_name[32];
-	struct list_head sync_file_list;
-	wait_queue_head_t wq;
-	long unsigned int flags;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-};
-
-struct sync_merge_data {
-	char name[32];
-	__s32 fd2;
-	__s32 fence;
-	__u32 flags;
-	__u32 pad;
-};
-
-struct sync_fence_info {
-	char obj_name[32];
-	char driver_name[32];
-	__s32 status;
-	__u32 flags;
-	__u64 timestamp_ns;
-};
-
-struct sync_file_info {
-	char name[32];
-	__s32 status;
-	__u32 flags;
-	__u32 num_fences;
-	__u32 pad;
-	__u64 sync_fence_info;
-};
-
-struct scsi_lun {
-	__u8 scsi_lun[8];
-};
-
-struct nvme_user_io {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nblocks;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 slba;
-	__u32 dsmgmt;
-	__u32 reftag;
-	__u16 apptag;
-	__u16 appmask;
-};
-
-struct nvme_passthru_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 result;
-};
-
-struct nvme_passthru_cmd64 {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 rsvd2;
-	__u64 result;
-};
-
-struct nvme_id_power_state {
-	__le16 max_power;
-	__u8 rsvd2;
-	__u8 flags;
-	__le32 entry_lat;
-	__le32 exit_lat;
-	__u8 read_tput;
-	__u8 read_lat;
-	__u8 write_tput;
-	__u8 write_lat;
-	__le16 idle_power;
-	__u8 idle_scale;
-	__u8 rsvd19;
-	__le16 active_power;
-	__u8 active_work_scale;
-	__u8 rsvd23[9];
-};
-
-enum {
-	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
-	NVME_PS_FLAGS_NON_OP_STATE = 2,
-};
-
-enum nvme_ctrl_attr {
-	NVME_CTRL_ATTR_HID_128_BIT = 1,
-	NVME_CTRL_ATTR_TBKAS = 64,
-};
-
-struct nvme_id_ctrl {
-	__le16 vid;
-	__le16 ssvid;
-	char sn[20];
-	char mn[40];
-	char fr[8];
-	__u8 rab;
-	__u8 ieee[3];
-	__u8 cmic;
-	__u8 mdts;
-	__le16 cntlid;
-	__le32 ver;
-	__le32 rtd3r;
-	__le32 rtd3e;
-	__le32 oaes;
-	__le32 ctratt;
-	__u8 rsvd100[28];
-	__le16 crdt1;
-	__le16 crdt2;
-	__le16 crdt3;
-	__u8 rsvd134[122];
-	__le16 oacs;
-	__u8 acl;
-	__u8 aerl;
-	__u8 frmw;
-	__u8 lpa;
-	__u8 elpe;
-	__u8 npss;
-	__u8 avscc;
-	__u8 apsta;
-	__le16 wctemp;
-	__le16 cctemp;
-	__le16 mtfa;
-	__le32 hmpre;
-	__le32 hmmin;
-	__u8 tnvmcap[16];
-	__u8 unvmcap[16];
-	__le32 rpmbs;
-	__le16 edstt;
-	__u8 dsto;
-	__u8 fwug;
-	__le16 kas;
-	__le16 hctma;
-	__le16 mntmt;
-	__le16 mxtmt;
-	__le32 sanicap;
-	__le32 hmminds;
-	__le16 hmmaxd;
-	__u8 rsvd338[4];
-	__u8 anatt;
-	__u8 anacap;
-	__le32 anagrpmax;
-	__le32 nanagrpid;
-	__u8 rsvd352[160];
-	__u8 sqes;
-	__u8 cqes;
-	__le16 maxcmd;
-	__le32 nn;
-	__le16 oncs;
-	__le16 fuses;
-	__u8 fna;
-	__u8 vwc;
-	__le16 awun;
-	__le16 awupf;
-	__u8 nvscc;
-	__u8 nwpc;
-	__le16 acwu;
-	__u8 rsvd534[2];
-	__le32 sgls;
-	__le32 mnan;
-	__u8 rsvd544[224];
-	char subnqn[256];
-	__u8 rsvd1024[768];
-	__le32 ioccsz;
-	__le32 iorcsz;
-	__le16 icdoff;
-	__u8 ctrattr;
-	__u8 msdbd;
-	__u8 rsvd1804[244];
-	struct nvme_id_power_state psd[32];
-	__u8 vs[1024];
-};
-
-enum {
-	NVME_CTRL_CMIC_MULTI_CTRL = 2,
-	NVME_CTRL_CMIC_ANA = 8,
-	NVME_CTRL_ONCS_COMPARE = 1,
-	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
-	NVME_CTRL_ONCS_DSM = 4,
-	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
-	NVME_CTRL_ONCS_RESERVATIONS = 32,
-	NVME_CTRL_ONCS_TIMESTAMP = 64,
-	NVME_CTRL_VWC_PRESENT = 1,
-	NVME_CTRL_OACS_SEC_SUPP = 1,
-	NVME_CTRL_OACS_DIRECTIVES = 32,
-	NVME_CTRL_OACS_DBBUF_SUPP = 256,
-	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
-	NVME_CTRL_CTRATT_128_ID = 1,
-	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
-	NVME_CTRL_CTRATT_NVM_SETS = 4,
-	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
-	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
-	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
-	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
-	NVME_CTRL_CTRATT_UUID_LIST = 512,
-};
-
-struct nvme_lbaf {
-	__le16 ms;
-	__u8 ds;
-	__u8 rp;
-};
-
-struct nvme_id_ns {
-	__le64 nsze;
-	__le64 ncap;
-	__le64 nuse;
-	__u8 nsfeat;
-	__u8 nlbaf;
-	__u8 flbas;
-	__u8 mc;
-	__u8 dpc;
-	__u8 dps;
-	__u8 nmic;
-	__u8 rescap;
-	__u8 fpi;
-	__u8 dlfeat;
-	__le16 nawun;
-	__le16 nawupf;
-	__le16 nacwu;
-	__le16 nabsn;
-	__le16 nabo;
-	__le16 nabspf;
-	__le16 noiob;
-	__u8 nvmcap[16];
-	__le16 npwg;
-	__le16 npwa;
-	__le16 npdg;
-	__le16 npda;
-	__le16 nows;
-	__u8 rsvd74[18];
-	__le32 anagrpid;
-	__u8 rsvd96[3];
-	__u8 nsattr;
-	__le16 nvmsetid;
-	__le16 endgid;
-	__u8 nguid[16];
-	__u8 eui64[8];
-	struct nvme_lbaf lbaf[16];
-	__u8 rsvd192[192];
-	__u8 vs[3712];
-};
-
-enum {
-	NVME_ID_CNS_NS = 0,
-	NVME_ID_CNS_CTRL = 1,
-	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
-	NVME_ID_CNS_NS_DESC_LIST = 3,
-	NVME_ID_CNS_CS_NS = 5,
-	NVME_ID_CNS_CS_CTRL = 6,
-	NVME_ID_CNS_NS_PRESENT_LIST = 16,
-	NVME_ID_CNS_NS_PRESENT = 17,
-	NVME_ID_CNS_CTRL_NS_LIST = 18,
-	NVME_ID_CNS_CTRL_LIST = 19,
-	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
-	NVME_ID_CNS_NS_GRANULARITY = 22,
-	NVME_ID_CNS_UUID_LIST = 23,
-};
-
-enum {
-	NVME_CSI_NVM = 0,
-	NVME_CSI_ZNS = 2,
-};
-
-enum {
-	NVME_DIR_IDENTIFY = 0,
-	NVME_DIR_STREAMS = 1,
-	NVME_DIR_SND_ID_OP_ENABLE = 1,
-	NVME_DIR_SND_ST_OP_REL_ID = 1,
-	NVME_DIR_SND_ST_OP_REL_RSC = 2,
-	NVME_DIR_RCV_ID_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_STATUS = 2,
-	NVME_DIR_RCV_ST_OP_RESOURCE = 3,
-	NVME_DIR_ENDIR = 1,
-};
-
-enum {
-	NVME_NS_FEAT_THIN = 1,
-	NVME_NS_FEAT_ATOMICS = 2,
-	NVME_NS_FEAT_IO_OPT = 16,
-	NVME_NS_ATTR_RO = 1,
-	NVME_NS_FLBAS_LBA_MASK = 15,
-	NVME_NS_FLBAS_META_EXT = 16,
-	NVME_NS_NMIC_SHARED = 1,
-	NVME_LBAF_RP_BEST = 0,
-	NVME_LBAF_RP_BETTER = 1,
-	NVME_LBAF_RP_GOOD = 2,
-	NVME_LBAF_RP_DEGRADED = 3,
-	NVME_NS_DPC_PI_LAST = 16,
-	NVME_NS_DPC_PI_FIRST = 8,
-	NVME_NS_DPC_PI_TYPE3 = 4,
-	NVME_NS_DPC_PI_TYPE2 = 2,
-	NVME_NS_DPC_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_FIRST = 8,
-	NVME_NS_DPS_PI_MASK = 7,
-	NVME_NS_DPS_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_TYPE2 = 2,
-	NVME_NS_DPS_PI_TYPE3 = 3,
-};
-
-struct nvme_ns_id_desc {
-	__u8 nidt;
-	__u8 nidl;
-	__le16 reserved;
-};
-
-enum {
-	NVME_NIDT_EUI64 = 1,
-	NVME_NIDT_NGUID = 2,
-	NVME_NIDT_UUID = 3,
-	NVME_NIDT_CSI = 4,
-};
-
-struct nvme_fw_slot_info_log {
-	__u8 afi;
-	__u8 rsvd1[7];
-	__le64 frs[7];
-	__u8 rsvd64[448];
-};
-
-enum {
-	NVME_CMD_EFFECTS_CSUPP = 1,
-	NVME_CMD_EFFECTS_LBCC = 2,
-	NVME_CMD_EFFECTS_NCC = 4,
-	NVME_CMD_EFFECTS_NIC = 8,
-	NVME_CMD_EFFECTS_CCC = 16,
-	NVME_CMD_EFFECTS_CSE_MASK = 196608,
-	NVME_CMD_EFFECTS_UUID_SEL = 524288,
-};
-
-struct nvme_effects_log {
-	__le32 acs[256];
-	__le32 iocs[256];
-	__u8 resv[2048];
-};
-
-enum {
-	NVME_AER_ERROR = 0,
-	NVME_AER_SMART = 1,
-	NVME_AER_NOTICE = 2,
-	NVME_AER_CSS = 6,
-	NVME_AER_VS = 7,
-};
-
-enum {
-	NVME_AER_NOTICE_NS_CHANGED = 0,
-	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
-	NVME_AER_NOTICE_ANA = 3,
-	NVME_AER_NOTICE_DISC_CHANGED = 240,
-};
-
-enum {
-	NVME_AEN_CFG_NS_ATTR = 256,
-	NVME_AEN_CFG_FW_ACT = 512,
-	NVME_AEN_CFG_ANA_CHANGE = 2048,
-	NVME_AEN_CFG_DISC_CHANGE = 2147483648,
-};
-
-enum nvme_opcode {
-	nvme_cmd_flush = 0,
-	nvme_cmd_write = 1,
-	nvme_cmd_read = 2,
-	nvme_cmd_write_uncor = 4,
-	nvme_cmd_compare = 5,
-	nvme_cmd_write_zeroes = 8,
-	nvme_cmd_dsm = 9,
-	nvme_cmd_verify = 12,
-	nvme_cmd_resv_register = 13,
-	nvme_cmd_resv_report = 14,
-	nvme_cmd_resv_acquire = 17,
-	nvme_cmd_resv_release = 21,
-	nvme_cmd_zone_mgmt_send = 121,
-	nvme_cmd_zone_mgmt_recv = 122,
-	nvme_cmd_zone_append = 125,
-};
-
-struct nvme_sgl_desc {
-	__le64 addr;
-	__le32 length;
-	__u8 rsvd[3];
-	__u8 type;
-};
-
-struct nvme_keyed_sgl_desc {
-	__le64 addr;
-	__u8 length[3];
-	__u8 key[4];
-	__u8 type;
-};
-
-union nvme_data_ptr {
-	struct {
-		__le64 prp1;
-		__le64 prp2;
-	};
-	struct nvme_sgl_desc sgl;
-	struct nvme_keyed_sgl_desc ksgl;
-};
-
-enum {
-	NVME_CMD_FUSE_FIRST = 1,
-	NVME_CMD_FUSE_SECOND = 2,
-	NVME_CMD_SGL_METABUF = 64,
-	NVME_CMD_SGL_METASEG = 128,
-	NVME_CMD_SGL_ALL = 192,
-};
-
-struct nvme_common_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le32 cdw10;
-	__le32 cdw11;
-	__le32 cdw12;
-	__le32 cdw13;
-	__le32 cdw14;
-	__le32 cdw15;
-};
-
-struct nvme_rw_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum {
-	NVME_RW_LR = 32768,
-	NVME_RW_FUA = 16384,
-	NVME_RW_APPEND_PIREMAP = 512,
-	NVME_RW_DSM_FREQ_UNSPEC = 0,
-	NVME_RW_DSM_FREQ_TYPICAL = 1,
-	NVME_RW_DSM_FREQ_RARE = 2,
-	NVME_RW_DSM_FREQ_READS = 3,
-	NVME_RW_DSM_FREQ_WRITES = 4,
-	NVME_RW_DSM_FREQ_RW = 5,
-	NVME_RW_DSM_FREQ_ONCE = 6,
-	NVME_RW_DSM_FREQ_PREFETCH = 7,
-	NVME_RW_DSM_FREQ_TEMP = 8,
-	NVME_RW_DSM_LATENCY_NONE = 0,
-	NVME_RW_DSM_LATENCY_IDLE = 16,
-	NVME_RW_DSM_LATENCY_NORM = 32,
-	NVME_RW_DSM_LATENCY_LOW = 48,
-	NVME_RW_DSM_SEQ_REQ = 64,
-	NVME_RW_DSM_COMPRESSED = 128,
-	NVME_RW_PRINFO_PRCHK_REF = 1024,
-	NVME_RW_PRINFO_PRCHK_APP = 2048,
-	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
-	NVME_RW_PRINFO_PRACT = 8192,
-	NVME_RW_DTYPE_STREAMS = 16,
-};
-
-struct nvme_dsm_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 nr;
-	__le32 attributes;
-	__u32 rsvd12[4];
-};
-
-enum {
-	NVME_DSMGMT_IDR = 1,
-	NVME_DSMGMT_IDW = 2,
-	NVME_DSMGMT_AD = 4,
-};
-
-struct nvme_dsm_range {
-	__le32 cattr;
-	__le32 nlb;
-	__le64 slba;
-};
-
-struct nvme_write_zeroes_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum nvme_zone_mgmt_action {
-	NVME_ZONE_CLOSE = 1,
-	NVME_ZONE_FINISH = 2,
-	NVME_ZONE_OPEN = 3,
-	NVME_ZONE_RESET = 4,
-	NVME_ZONE_OFFLINE = 5,
-	NVME_ZONE_SET_DESC_EXT = 16,
-};
-
-struct nvme_zone_mgmt_send_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 cdw12;
-	__u8 zsa;
-	__u8 select_all;
-	__u8 rsvd13[2];
-	__le32 cdw14[2];
-};
-
-struct nvme_zone_mgmt_recv_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 numd;
-	__u8 zra;
-	__u8 zrasf;
-	__u8 pr;
-	__u8 rsvd13;
-	__le32 cdw14[2];
-};
-
-struct nvme_feat_auto_pst {
-	__le64 entries[32];
-};
-
-struct nvme_feat_host_behavior {
-	__u8 acre;
-	__u8 resv1[511];
-};
-
-enum {
-	NVME_ENABLE_ACRE = 1,
-};
-
-enum nvme_admin_opcode {
-	nvme_admin_delete_sq = 0,
-	nvme_admin_create_sq = 1,
-	nvme_admin_get_log_page = 2,
-	nvme_admin_delete_cq = 4,
-	nvme_admin_create_cq = 5,
-	nvme_admin_identify = 6,
-	nvme_admin_abort_cmd = 8,
-	nvme_admin_set_features = 9,
-	nvme_admin_get_features = 10,
-	nvme_admin_async_event = 12,
-	nvme_admin_ns_mgmt = 13,
-	nvme_admin_activate_fw = 16,
-	nvme_admin_download_fw = 17,
-	nvme_admin_dev_self_test = 20,
-	nvme_admin_ns_attach = 21,
-	nvme_admin_keep_alive = 24,
-	nvme_admin_directive_send = 25,
-	nvme_admin_directive_recv = 26,
-	nvme_admin_virtual_mgmt = 28,
-	nvme_admin_nvme_mi_send = 29,
-	nvme_admin_nvme_mi_recv = 30,
-	nvme_admin_dbbuf = 124,
-	nvme_admin_format_nvm = 128,
-	nvme_admin_security_send = 129,
-	nvme_admin_security_recv = 130,
-	nvme_admin_sanitize_nvm = 132,
-	nvme_admin_get_lba_status = 134,
-	nvme_admin_vendor_start = 192,
-};
-
-enum {
-	NVME_QUEUE_PHYS_CONTIG = 1,
-	NVME_CQ_IRQ_ENABLED = 2,
-	NVME_SQ_PRIO_URGENT = 0,
-	NVME_SQ_PRIO_HIGH = 2,
-	NVME_SQ_PRIO_MEDIUM = 4,
-	NVME_SQ_PRIO_LOW = 6,
-	NVME_FEAT_ARBITRATION = 1,
-	NVME_FEAT_POWER_MGMT = 2,
-	NVME_FEAT_LBA_RANGE = 3,
-	NVME_FEAT_TEMP_THRESH = 4,
-	NVME_FEAT_ERR_RECOVERY = 5,
-	NVME_FEAT_VOLATILE_WC = 6,
-	NVME_FEAT_NUM_QUEUES = 7,
-	NVME_FEAT_IRQ_COALESCE = 8,
-	NVME_FEAT_IRQ_CONFIG = 9,
-	NVME_FEAT_WRITE_ATOMIC = 10,
-	NVME_FEAT_ASYNC_EVENT = 11,
-	NVME_FEAT_AUTO_PST = 12,
-	NVME_FEAT_HOST_MEM_BUF = 13,
-	NVME_FEAT_TIMESTAMP = 14,
-	NVME_FEAT_KATO = 15,
-	NVME_FEAT_HCTM = 16,
-	NVME_FEAT_NOPSC = 17,
-	NVME_FEAT_RRL = 18,
-	NVME_FEAT_PLM_CONFIG = 19,
-	NVME_FEAT_PLM_WINDOW = 20,
-	NVME_FEAT_HOST_BEHAVIOR = 22,
-	NVME_FEAT_SANITIZE = 23,
-	NVME_FEAT_SW_PROGRESS = 128,
-	NVME_FEAT_HOST_ID = 129,
-	NVME_FEAT_RESV_MASK = 130,
-	NVME_FEAT_RESV_PERSIST = 131,
-	NVME_FEAT_WRITE_PROTECT = 132,
-	NVME_FEAT_VENDOR_START = 192,
-	NVME_FEAT_VENDOR_END = 255,
-	NVME_LOG_ERROR = 1,
-	NVME_LOG_SMART = 2,
-	NVME_LOG_FW_SLOT = 3,
-	NVME_LOG_CHANGED_NS = 4,
-	NVME_LOG_CMD_EFFECTS = 5,
-	NVME_LOG_DEVICE_SELF_TEST = 6,
-	NVME_LOG_TELEMETRY_HOST = 7,
-	NVME_LOG_TELEMETRY_CTRL = 8,
-	NVME_LOG_ENDURANCE_GROUP = 9,
-	NVME_LOG_ANA = 12,
-	NVME_LOG_DISC = 112,
-	NVME_LOG_RESERVATION = 128,
-	NVME_FWACT_REPL = 0,
-	NVME_FWACT_REPL_ACTV = 8,
-	NVME_FWACT_ACTV = 16,
-};
-
-struct nvme_identify {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 cns;
-	__u8 rsvd3;
-	__le16 ctrlid;
-	__u8 rsvd11[3];
-	__u8 csi;
-	__u32 rsvd12[4];
-};
-
-struct nvme_features {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 fid;
-	__le32 dword11;
-	__le32 dword12;
-	__le32 dword13;
-	__le32 dword14;
-	__le32 dword15;
-};
-
-struct nvme_create_cq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 cqid;
-	__le16 qsize;
-	__le16 cq_flags;
-	__le16 irq_vector;
-	__u32 rsvd12[4];
-};
-
-struct nvme_create_sq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 sqid;
-	__le16 qsize;
-	__le16 sq_flags;
-	__le16 cqid;
-	__u32 rsvd12[4];
-};
-
-struct nvme_delete_queue {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 qid;
-	__u16 rsvd10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_abort_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 sqid;
-	__u16 cid;
-	__u32 rsvd11[5];
-};
-
-struct nvme_download_firmware {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__le32 offset;
-	__u32 rsvd12[4];
-};
-
-struct nvme_format_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[4];
-	__le32 cdw10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_get_log_page_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 lid;
-	__u8 lsp;
-	__le16 numdl;
-	__le16 numdu;
-	__u16 rsvd11;
-	union {
-		struct {
-			__le32 lpol;
-			__le32 lpou;
-		};
-		__le64 lpo;
-	};
-	__u8 rsvd14[3];
-	__u8 csi;
-	__u32 rsvd15;
-};
-
-struct nvme_directive_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__u8 doper;
-	__u8 dtype;
-	__le16 dspec;
-	__u8 endir;
-	__u8 tdtype;
-	__u16 rsvd15;
-	__u32 rsvd16[3];
-};
-
-enum nvmf_fabrics_opcode {
-	nvme_fabrics_command = 127,
-};
-
-enum nvmf_capsule_command {
-	nvme_fabrics_type_property_set = 0,
-	nvme_fabrics_type_connect = 1,
-	nvme_fabrics_type_property_get = 4,
-};
-
-struct nvmf_common_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 ts[24];
-};
-
-struct nvmf_connect_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[19];
-	union nvme_data_ptr dptr;
-	__le16 recfmt;
-	__le16 qid;
-	__le16 sqsize;
-	__u8 cattr;
-	__u8 resv3;
-	__le32 kato;
-	__u8 resv4[12];
-};
-
-struct nvmf_property_set_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__le64 value;
-	__u8 resv4[8];
-};
-
-struct nvmf_property_get_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__u8 resv4[16];
-};
-
-struct nvme_dbbuf {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd12[6];
-};
-
-struct streams_directive_params {
-	__le16 msl;
-	__le16 nssa;
-	__le16 nsso;
-	__u8 rsvd[10];
-	__le32 sws;
-	__le16 sgs;
-	__le16 nsa;
-	__le16 nso;
-	__u8 rsvd2[6];
-};
-
-struct nvme_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_rw_command rw;
-		struct nvme_identify identify;
-		struct nvme_features features;
-		struct nvme_create_cq create_cq;
-		struct nvme_create_sq create_sq;
-		struct nvme_delete_queue delete_queue;
-		struct nvme_download_firmware dlfw;
-		struct nvme_format_cmd format;
-		struct nvme_dsm_cmd dsm;
-		struct nvme_write_zeroes_cmd write_zeroes;
-		struct nvme_zone_mgmt_send_cmd zms;
-		struct nvme_zone_mgmt_recv_cmd zmr;
-		struct nvme_abort_cmd abort;
-		struct nvme_get_log_page_command get_log_page;
-		struct nvmf_common_command fabrics;
-		struct nvmf_connect_command connect;
-		struct nvmf_property_set_command prop_set;
-		struct nvmf_property_get_command prop_get;
-		struct nvme_dbbuf dbbuf;
-		struct nvme_directive_cmd directive;
-	};
-};
-
-enum {
-	NVME_SC_SUCCESS = 0,
-	NVME_SC_INVALID_OPCODE = 1,
-	NVME_SC_INVALID_FIELD = 2,
-	NVME_SC_CMDID_CONFLICT = 3,
-	NVME_SC_DATA_XFER_ERROR = 4,
-	NVME_SC_POWER_LOSS = 5,
-	NVME_SC_INTERNAL = 6,
-	NVME_SC_ABORT_REQ = 7,
-	NVME_SC_ABORT_QUEUE = 8,
-	NVME_SC_FUSED_FAIL = 9,
-	NVME_SC_FUSED_MISSING = 10,
-	NVME_SC_INVALID_NS = 11,
-	NVME_SC_CMD_SEQ_ERROR = 12,
-	NVME_SC_SGL_INVALID_LAST = 13,
-	NVME_SC_SGL_INVALID_COUNT = 14,
-	NVME_SC_SGL_INVALID_DATA = 15,
-	NVME_SC_SGL_INVALID_METADATA = 16,
-	NVME_SC_SGL_INVALID_TYPE = 17,
-	NVME_SC_SGL_INVALID_OFFSET = 22,
-	NVME_SC_SGL_INVALID_SUBTYPE = 23,
-	NVME_SC_SANITIZE_FAILED = 28,
-	NVME_SC_SANITIZE_IN_PROGRESS = 29,
-	NVME_SC_NS_WRITE_PROTECTED = 32,
-	NVME_SC_CMD_INTERRUPTED = 33,
-	NVME_SC_LBA_RANGE = 128,
-	NVME_SC_CAP_EXCEEDED = 129,
-	NVME_SC_NS_NOT_READY = 130,
-	NVME_SC_RESERVATION_CONFLICT = 131,
-	NVME_SC_CQ_INVALID = 256,
-	NVME_SC_QID_INVALID = 257,
-	NVME_SC_QUEUE_SIZE = 258,
-	NVME_SC_ABORT_LIMIT = 259,
-	NVME_SC_ABORT_MISSING = 260,
-	NVME_SC_ASYNC_LIMIT = 261,
-	NVME_SC_FIRMWARE_SLOT = 262,
-	NVME_SC_FIRMWARE_IMAGE = 263,
-	NVME_SC_INVALID_VECTOR = 264,
-	NVME_SC_INVALID_LOG_PAGE = 265,
-	NVME_SC_INVALID_FORMAT = 266,
-	NVME_SC_FW_NEEDS_CONV_RESET = 267,
-	NVME_SC_INVALID_QUEUE = 268,
-	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
-	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
-	NVME_SC_FEATURE_NOT_PER_NS = 271,
-	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
-	NVME_SC_FW_NEEDS_RESET = 273,
-	NVME_SC_FW_NEEDS_MAX_TIME = 274,
-	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
-	NVME_SC_OVERLAPPING_RANGE = 276,
-	NVME_SC_NS_INSUFFICIENT_CAP = 277,
-	NVME_SC_NS_ID_UNAVAILABLE = 278,
-	NVME_SC_NS_ALREADY_ATTACHED = 280,
-	NVME_SC_NS_IS_PRIVATE = 281,
-	NVME_SC_NS_NOT_ATTACHED = 282,
-	NVME_SC_THIN_PROV_NOT_SUPP = 283,
-	NVME_SC_CTRL_LIST_INVALID = 284,
-	NVME_SC_BP_WRITE_PROHIBITED = 286,
-	NVME_SC_PMR_SAN_PROHIBITED = 291,
-	NVME_SC_BAD_ATTRIBUTES = 384,
-	NVME_SC_INVALID_PI = 385,
-	NVME_SC_READ_ONLY = 386,
-	NVME_SC_ONCS_NOT_SUPPORTED = 387,
-	NVME_SC_CONNECT_FORMAT = 384,
-	NVME_SC_CONNECT_CTRL_BUSY = 385,
-	NVME_SC_CONNECT_INVALID_PARAM = 386,
-	NVME_SC_CONNECT_RESTART_DISC = 387,
-	NVME_SC_CONNECT_INVALID_HOST = 388,
-	NVME_SC_DISCOVERY_RESTART = 400,
-	NVME_SC_AUTH_REQUIRED = 401,
-	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
-	NVME_SC_ZONE_FULL = 441,
-	NVME_SC_ZONE_READ_ONLY = 442,
-	NVME_SC_ZONE_OFFLINE = 443,
-	NVME_SC_ZONE_INVALID_WRITE = 444,
-	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
-	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
-	NVME_SC_ZONE_INVALID_TRANSITION = 447,
-	NVME_SC_WRITE_FAULT = 640,
-	NVME_SC_READ_ERROR = 641,
-	NVME_SC_GUARD_CHECK = 642,
-	NVME_SC_APPTAG_CHECK = 643,
-	NVME_SC_REFTAG_CHECK = 644,
-	NVME_SC_COMPARE_FAILED = 645,
-	NVME_SC_ACCESS_DENIED = 646,
-	NVME_SC_UNWRITTEN_BLOCK = 647,
-	NVME_SC_ANA_PERSISTENT_LOSS = 769,
-	NVME_SC_ANA_INACCESSIBLE = 770,
-	NVME_SC_ANA_TRANSITION = 771,
-	NVME_SC_HOST_PATH_ERROR = 880,
-	NVME_SC_HOST_ABORTED_CMD = 881,
-	NVME_SC_CRD = 6144,
-	NVME_SC_DNR = 16384,
-};
-
-union nvme_result {
-	__le16 u16;
-	__le32 u32;
-	__le64 u64;
-};
-
-enum nvme_quirks {
-	NVME_QUIRK_STRIPE_SIZE = 1,
-	NVME_QUIRK_IDENTIFY_CNS = 2,
-	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
-	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
-	NVME_QUIRK_NO_APST = 16,
-	NVME_QUIRK_NO_DEEPEST_PS = 32,
-	NVME_QUIRK_LIGHTNVM = 64,
-	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
-	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
-	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
-	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
-	NVME_QUIRK_SINGLE_VECTOR = 2048,
-	NVME_QUIRK_128_BYTES_SQES = 4096,
-	NVME_QUIRK_SHARED_TAGS = 8192,
-	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
-	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
-};
-
-struct nvme_ctrl;
-
-struct nvme_request {
-	struct nvme_command *cmd;
-	union nvme_result result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	struct nvme_ctrl *ctrl;
-};
-
-enum nvme_ctrl_state {
-	NVME_CTRL_NEW = 0,
-	NVME_CTRL_LIVE = 1,
-	NVME_CTRL_RESETTING = 2,
-	NVME_CTRL_CONNECTING = 3,
-	NVME_CTRL_DELETING = 4,
-	NVME_CTRL_DELETING_NOIO = 5,
-	NVME_CTRL_DEAD = 6,
-};
-
-struct opal_dev;
-
-struct nvme_fault_inject {};
-
-struct nvme_ctrl_ops;
-
-struct nvme_subsystem;
-
-struct nvmf_ctrl_options;
-
-struct nvme_ctrl {
-	bool comp_seen;
-	enum nvme_ctrl_state state;
-	bool identified;
-	spinlock_t lock;
-	struct mutex scan_lock;
-	const struct nvme_ctrl_ops *ops;
-	struct request_queue *admin_q;
-	struct request_queue *connect_q;
-	struct request_queue *fabrics_q;
-	struct device *dev;
-	int instance;
-	int numa_node;
-	struct blk_mq_tag_set *tagset;
-	struct blk_mq_tag_set *admin_tagset;
-	struct list_head namespaces;
-	struct rw_semaphore namespaces_rwsem;
-	struct device ctrl_device;
-	struct device *device;
-	struct cdev cdev;
-	struct work_struct reset_work;
-	struct work_struct delete_work;
-	wait_queue_head_t state_wq;
-	struct nvme_subsystem *subsys;
-	struct list_head subsys_entry;
-	struct opal_dev *opal_dev;
-	char name[12];
-	u16 cntlid;
-	u32 ctrl_config;
-	u16 mtfa;
-	u32 queue_count;
-	u64 cap;
-	u32 max_hw_sectors;
-	u32 max_segments;
-	u32 max_integrity_segments;
-	u32 max_zone_append;
-	u16 crdt[3];
-	u16 oncs;
-	u16 oacs;
-	u16 nssa;
-	u16 nr_streams;
-	u16 sqsize;
-	u32 max_namespaces;
-	atomic_t abort_limit;
-	u8 vwc;
-	u32 vs;
-	u32 sgls;
-	u16 kas;
-	u8 npss;
-	u8 apsta;
-	u16 wctemp;
-	u16 cctemp;
-	u32 oaes;
-	u32 aen_result;
-	u32 ctratt;
-	unsigned int shutdown_timeout;
-	unsigned int kato;
-	bool subsystem;
-	long unsigned int quirks;
-	struct nvme_id_power_state psd[32];
-	struct nvme_effects_log *effects;
-	struct xarray cels;
-	struct work_struct scan_work;
-	struct work_struct async_event_work;
-	struct delayed_work ka_work;
-	struct nvme_command ka_cmd;
-	struct work_struct fw_act_work;
-	long unsigned int events;
-	u64 ps_max_latency_us;
-	bool apst_enabled;
-	u32 hmpre;
-	u32 hmmin;
-	u32 hmminds;
-	u16 hmmaxd;
-	u32 ioccsz;
-	u32 iorcsz;
-	u16 icdoff;
-	u16 maxcmd;
-	int nr_reconnects;
-	struct nvmf_ctrl_options *opts;
-	struct page *discard_page;
-	long unsigned int discard_page_busy;
-	struct nvme_fault_inject fault_inject;
-};
-
-enum {
-	NVME_REQ_CANCELLED = 1,
-	NVME_REQ_USERCMD = 2,
-};
-
-struct nvme_ctrl_ops {
-	const char *name;
-	struct module *module;
-	unsigned int flags;
-	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
-	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
-	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
-	void (*free_ctrl)(struct nvme_ctrl *);
-	void (*submit_async_event)(struct nvme_ctrl *);
-	void (*delete_ctrl)(struct nvme_ctrl *);
-	int (*get_address)(struct nvme_ctrl *, char *, int);
-};
-
-struct nvme_subsystem {
-	int instance;
-	struct device dev;
-	struct kref ref;
-	struct list_head entry;
-	struct mutex lock;
-	struct list_head ctrls;
-	struct list_head nsheads;
-	char subnqn[223];
-	char serial[20];
-	char model[40];
-	char firmware_rev[8];
-	u8 cmic;
-	u16 vendor_id;
-	u16 awupf;
-	struct ida ns_ida;
-};
-
-struct nvmf_host;
-
-struct nvmf_ctrl_options {
-	unsigned int mask;
-	char *transport;
-	char *subsysnqn;
-	char *traddr;
-	char *trsvcid;
-	char *host_traddr;
-	size_t queue_size;
-	unsigned int nr_io_queues;
-	unsigned int reconnect_delay;
-	bool discovery_nqn;
-	bool duplicate_connect;
-	unsigned int kato;
-	struct nvmf_host *host;
-	int max_reconnects;
-	bool disable_sqflow;
-	bool hdr_digest;
-	bool data_digest;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-	int tos;
-};
-
-struct nvme_ns_ids {
-	u8 eui64[8];
-	u8 nguid[16];
-	uuid_t uuid;
-	u8 csi;
-};
-
-struct nvme_ns_head {
-	struct list_head list;
-	struct srcu_struct srcu;
-	struct nvme_subsystem *subsys;
-	unsigned int ns_id;
-	struct nvme_ns_ids ids;
-	struct list_head entry;
-	struct kref ref;
-	bool shared;
-	int instance;
-	struct nvme_effects_log *effects;
-};
-
-enum nvme_ns_features {
-	NVME_NS_EXT_LBAS = 1,
-	NVME_NS_METADATA_SUPPORTED = 2,
-};
-
-struct nvme_ns {
-	struct list_head list;
-	struct nvme_ctrl *ctrl;
-	struct request_queue *queue;
-	struct gendisk *disk;
-	struct list_head siblings;
-	struct nvm_dev *ndev;
-	struct kref kref;
-	struct nvme_ns_head *head;
-	int lba_shift;
-	u16 ms;
-	u16 sgs;
-	u32 sws;
-	u8 pi_type;
-	u64 zsze;
-	long unsigned int features;
-	long unsigned int flags;
-	struct nvme_fault_inject fault_inject;
-};
-
-struct nvmf_host {
-	struct kref ref;
-	struct list_head list;
-	char nqn[223];
-	uuid_t id;
-};
-
-struct trace_event_raw_nvme_setup_cmd {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	u8 opcode;
-	u8 flags;
-	u8 fctype;
-	u16 cid;
-	u32 nsid;
-	u64 metadata;
-	u8 cdw10[24];
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_complete_rq {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	int cid;
-	u64 result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_async_event {
-	struct trace_entry ent;
-	int ctrl_id;
-	u32 result;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_sq {
-	struct trace_entry ent;
-	int ctrl_id;
-	char disk[32];
-	int qid;
-	u16 sq_head;
-	u16 sq_tail;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nvme_setup_cmd {};
-
-struct trace_event_data_offsets_nvme_complete_rq {};
-
-struct trace_event_data_offsets_nvme_async_event {};
-
-struct trace_event_data_offsets_nvme_sq {};
-
-typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
-
-typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
-
-typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
-
-typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
-
-enum nvme_disposition {
-	COMPLETE = 0,
-	RETRY = 1,
-	FAILOVER = 2,
-};
-
-struct nvme_core_quirk_entry {
-	u16 vid;
-	const char *mn;
-	const char *fr;
-	long unsigned int quirks;
-};
-
-struct nvm_user_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nppas;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 ppa_list;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 status;
-	__u32 result;
-	__u32 rsvd3[3];
-};
-
-struct nvm_passthru_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u8 rsvd[2];
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 ppa_list;
-	__u16 nppas;
-	__u16 control;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u64 status;
-	__u32 result;
-	__u32 timeout_ms;
-};
-
-enum nvme_nvm_admin_opcode {
-	nvme_nvm_admin_identity = 226,
-	nvme_nvm_admin_get_bb_tbl = 242,
-	nvme_nvm_admin_set_bb_tbl = 241,
-};
-
-enum nvme_nvm_log_page {
-	NVME_NVM_LOG_REPORT_CHUNK = 202,
-};
-
-struct nvme_nvm_ph_rw {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_erase_blk {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_identity {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd11[6];
-};
-
-struct nvme_nvm_getbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__u32 rsvd4[4];
-};
-
-struct nvme_nvm_setbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 nlb;
-	__u8 value;
-	__u8 rsvd3;
-	__u32 rsvd4[3];
-};
-
-struct nvme_nvm_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_nvm_ph_rw ph_rw;
-		struct nvme_nvm_erase_blk erase;
-		struct nvme_nvm_identity identity;
-		struct nvme_nvm_getbbtbl get_bb;
-		struct nvme_nvm_setbbtbl set_bb;
-	};
-};
-
-struct nvme_nvm_id12_grp {
-	__u8 mtype;
-	__u8 fmtype;
-	__le16 res16;
-	__u8 num_ch;
-	__u8 num_lun;
-	__u8 num_pln;
-	__u8 rsvd1;
-	__le16 num_chk;
-	__le16 num_pg;
-	__le16 fpg_sz;
-	__le16 csecs;
-	__le16 sos;
-	__le16 rsvd2;
-	__le32 trdt;
-	__le32 trdm;
-	__le32 tprt;
-	__le32 tprm;
-	__le32 tbet;
-	__le32 tbem;
-	__le32 mpos;
-	__le32 mccap;
-	__le16 cpar;
-	__u8 reserved[906];
-};
-
-struct nvme_nvm_id12_addrf {
-	__u8 ch_offset;
-	__u8 ch_len;
-	__u8 lun_offset;
-	__u8 lun_len;
-	__u8 pln_offset;
-	__u8 pln_len;
-	__u8 blk_offset;
-	__u8 blk_len;
-	__u8 pg_offset;
-	__u8 pg_len;
-	__u8 sec_offset;
-	__u8 sec_len;
-	__u8 res[4];
-};
-
-struct nvme_nvm_id12 {
-	__u8 ver_id;
-	__u8 vmnt;
-	__u8 cgrps;
-	__u8 res;
-	__le32 cap;
-	__le32 dom;
-	struct nvme_nvm_id12_addrf ppaf;
-	__u8 resv[228];
-	struct nvme_nvm_id12_grp grp;
-	__u8 resv2[2880];
-};
-
-struct nvme_nvm_bb_tbl {
-	__u8 tblid[4];
-	__le16 verid;
-	__le16 revid;
-	__le32 rvsd1;
-	__le32 tblks;
-	__le32 tfact;
-	__le32 tgrown;
-	__le32 tdresv;
-	__le32 thresv;
-	__le32 rsvd2[8];
-	__u8 blk[0];
-};
-
-struct nvme_nvm_id20_addrf {
-	__u8 grp_len;
-	__u8 pu_len;
-	__u8 chk_len;
-	__u8 lba_len;
-	__u8 resv[4];
-};
-
-struct nvme_nvm_id20 {
-	__u8 mjr;
-	__u8 mnr;
-	__u8 resv[6];
-	struct nvme_nvm_id20_addrf lbaf;
-	__le32 mccap;
-	__u8 resv2[12];
-	__u8 wit;
-	__u8 resv3[31];
-	__le16 num_grp;
-	__le16 num_pu;
-	__le32 num_chk;
-	__le32 clba;
-	__u8 resv4[52];
-	__le32 ws_min;
-	__le32 ws_opt;
-	__le32 mw_cunits;
-	__le32 maxoc;
-	__le32 maxocpu;
-	__u8 resv5[44];
-	__le32 trdt;
-	__le32 trdm;
-	__le32 twrt;
-	__le32 twrm;
-	__le32 tcrst;
-	__le32 tcrsm;
-	__u8 resv6[40];
-	__u8 resv7[2816];
-	__u8 vs[1024];
-};
-
-struct nvme_nvm_chk_meta {
-	__u8 state;
-	__u8 type;
-	__u8 wi;
-	__u8 rsvd[5];
-	__le64 slba;
-	__le64 cnlb;
-	__le64 wp;
-};
-
-struct nvme_zns_lbafe {
-	__le64 zsze;
-	__u8 zdes;
-	__u8 rsvd9[7];
-};
-
-struct nvme_id_ns_zns {
-	__le16 zoc;
-	__le16 ozcs;
-	__le32 mar;
-	__le32 mor;
-	__le32 rrl;
-	__le32 frl;
-	__u8 rsvd20[2796];
-	struct nvme_zns_lbafe lbafe[16];
-	__u8 rsvd3072[768];
-	__u8 vs[256];
-};
-
-struct nvme_id_ctrl_zns {
-	__u8 zasl;
-	__u8 rsvd1[4095];
-};
-
-struct nvme_zone_descriptor {
-	__u8 zt;
-	__u8 zs;
-	__u8 za;
-	__u8 rsvd3[5];
-	__le64 zcap;
-	__le64 zslba;
-	__le64 wp;
-	__u8 rsvd32[32];
-};
-
-enum {
-	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
-};
-
-struct nvme_zone_report {
-	__le64 nr_zones;
-	__u8 resv8[56];
-	struct nvme_zone_descriptor entries[0];
-};
-
-enum {
-	NVME_ZRA_ZONE_REPORT = 0,
-	NVME_ZRASF_ZONE_REPORT_ALL = 0,
-	NVME_REPORT_ZONE_PARTIAL = 1,
-};
-
-enum {
-	NVME_CMBSZ_SQS = 1,
-	NVME_CMBSZ_CQS = 2,
-	NVME_CMBSZ_LISTS = 4,
-	NVME_CMBSZ_RDS = 8,
-	NVME_CMBSZ_WDS = 16,
-	NVME_CMBSZ_SZ_SHIFT = 12,
-	NVME_CMBSZ_SZ_MASK = 1048575,
-	NVME_CMBSZ_SZU_SHIFT = 8,
-	NVME_CMBSZ_SZU_MASK = 15,
-};
-
-enum {
-	NVME_SGL_FMT_DATA_DESC = 0,
-	NVME_SGL_FMT_SEG_DESC = 2,
-	NVME_SGL_FMT_LAST_SEG_DESC = 3,
-	NVME_KEY_SGL_FMT_DATA_DESC = 4,
-	NVME_TRANSPORT_SGL_DATA_DESC = 5,
-};
-
-enum {
-	NVME_HOST_MEM_ENABLE = 1,
-	NVME_HOST_MEM_RETURN = 2,
-};
-
-struct nvme_host_mem_buf_desc {
-	__le64 addr;
-	__le32 size;
-	__u32 rsvd;
-};
-
-struct nvme_completion {
-	union nvme_result result;
-	__le16 sq_head;
-	__le16 sq_id;
-	__u16 command_id;
-	__le16 status;
-};
-
-struct nvme_queue;
-
-struct nvme_dev {
-	struct nvme_queue *queues;
-	struct blk_mq_tag_set tagset;
-	struct blk_mq_tag_set admin_tagset;
-	u32 *dbs;
-	struct device *dev;
-	struct dma_pool___2 *prp_page_pool;
-	struct dma_pool___2 *prp_small_pool;
-	unsigned int online_queues;
-	unsigned int max_qid;
-	unsigned int io_queues[3];
-	unsigned int num_vecs;
-	u32 q_depth;
-	int io_sqes;
-	u32 db_stride;
-	void *bar;
-	long unsigned int bar_mapped_size;
-	struct work_struct remove_work;
-	struct mutex shutdown_lock;
-	bool subsystem;
-	u64 cmb_size;
-	bool cmb_use_sqes;
-	u32 cmbsz;
-	u32 cmbloc;
-	struct nvme_ctrl ctrl;
-	u32 last_ps;
-	mempool_t *iod_mempool;
-	u32 *dbbuf_dbs;
-	dma_addr_t dbbuf_dbs_dma_addr;
-	u32 *dbbuf_eis;
-	dma_addr_t dbbuf_eis_dma_addr;
-	u64 host_mem_size;
-	u32 nr_host_mem_descs;
-	dma_addr_t host_mem_descs_dma;
-	struct nvme_host_mem_buf_desc *host_mem_descs;
-	void **host_mem_desc_bufs;
-	unsigned int nr_allocated_queues;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-};
-
-struct nvme_queue {
-	struct nvme_dev *dev;
-	spinlock_t sq_lock;
-	void *sq_cmds;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t cq_poll_lock;
-	struct nvme_completion *cqes;
-	dma_addr_t sq_dma_addr;
-	dma_addr_t cq_dma_addr;
-	u32 *q_db;
-	u32 q_depth;
-	u16 cq_vector;
-	u16 sq_tail;
-	u16 last_sq_tail;
-	u16 cq_head;
-	u16 qid;
-	u8 cq_phase;
-	u8 sqes;
-	long unsigned int flags;
-	u32 *dbbuf_sq_db;
-	u32 *dbbuf_cq_db;
-	u32 *dbbuf_sq_ei;
-	u32 *dbbuf_cq_ei;
-	struct completion delete_done;
-};
-
-struct nvme_iod {
-	struct nvme_request req;
-	struct nvme_queue *nvmeq;
-	bool use_sgl;
-	int aborted;
-	int npages;
-	int nents;
-	dma_addr_t first_dma;
-	unsigned int dma_len;
-	dma_addr_t meta_dma;
-	struct scatterlist *sg;
-};
-
-typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
-
-struct spi_res {
-	struct list_head entry;
-	spi_res_release_t release;
-	long long unsigned int data[0];
-};
-
-struct spi_replaced_transfers;
-
-typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
-
-struct spi_replaced_transfers {
-	spi_replaced_release_t release;
-	void *extradata;
-	struct list_head replaced_transfers;
-	struct list_head *replaced_after;
-	size_t inserted;
-	struct spi_transfer inserted_transfers[0];
-};
-
-struct spi_board_info {
-	char modalias[32];
-	const void *platform_data;
-	const struct property_entry *properties;
-	void *controller_data;
-	int irq;
-	u32 max_speed_hz;
-	u16 bus_num;
-	u16 chip_select;
-	u32 mode;
-};
-
-enum spi_mem_data_dir {
-	SPI_MEM_NO_DATA = 0,
-	SPI_MEM_DATA_IN = 1,
-	SPI_MEM_DATA_OUT = 2,
-};
-
-struct spi_mem_op {
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u16 opcode;
-	} cmd;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u64 val;
-	} addr;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-	} dummy;
-	struct {
-		u8 buswidth;
-		u8 dtr: 1;
-		enum spi_mem_data_dir dir;
-		unsigned int nbytes;
-		union {
-			void *in;
-			const void *out;
-		} buf;
-	} data;
-};
-
-struct spi_mem_dirmap_info {
-	struct spi_mem_op op_tmpl;
-	u64 offset;
-	u64 length;
-};
-
-struct spi_mem_dirmap_desc {
-	struct spi_mem *mem;
-	struct spi_mem_dirmap_info info;
-	unsigned int nodirmap;
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
 	void *priv;
 };
 
-struct spi_mem {
-	struct spi_device *spi;
-	void *drvpriv;
-	const char *name;
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
 };
 
-struct trace_event_raw_spi_controller {
-	struct trace_entry ent;
-	int bus_num;
-	char __data[0];
+struct sas_phy_data {
+	struct sas_phy *phy;
+	struct mutex event_lock;
+	int hard_reset;
+	int reset_result;
+	struct sas_work reset_work;
+	int enable;
+	int enable_result;
+	struct sas_work enable_work;
 };
 
-struct trace_event_raw_spi_message {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	char __data[0];
-};
-
-struct trace_event_raw_spi_message_done {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	unsigned int frame;
-	unsigned int actual;
-	char __data[0];
-};
-
-struct trace_event_raw_spi_transfer {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_transfer *xfer;
-	int len;
-	u32 __data_loc_rx_buf;
-	u32 __data_loc_tx_buf;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_spi_controller {};
-
-struct trace_event_data_offsets_spi_message {};
-
-struct trace_event_data_offsets_spi_message_done {};
-
-struct trace_event_data_offsets_spi_transfer {
-	u32 rx_buf;
-	u32 tx_buf;
-};
-
-typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
-
-typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
-
-struct boardinfo {
+typedef struct {
+	caddr_t ccb;
 	struct list_head list;
-	struct spi_board_info board_info;
-};
+	long unsigned int gp;
+	unsigned int sno;
+	struct scsi_cmnd *scp;
+	uint32_t state;
+	uint32_t dma_direction;
+	uint32_t dma_type;
+	uint16_t dev_channel;
+	uint16_t dev_target;
+	uint32_t status;
+} scb_t___2;
 
-struct acpi_spi_lookup {
-	struct spi_controller *ctlr;
-	u32 max_speed_hz;
-	u32 mode;
-	int irq;
-	u8 bits_per_word;
-	u8 chip_select;
-};
-
-struct spi_mem_driver {
-	struct spi_driver spidrv;
-	int (*probe)(struct spi_mem *);
-	int (*remove)(struct spi_mem *);
-	void (*shutdown)(struct spi_mem *);
-};
-
-struct meson_spifc {
-	struct spi_controller *master;
-	struct regmap *regmap;
-	struct clk *clk;
-	struct device *dev;
-};
-
-enum orion_spi_type {
-	ORION_SPI = 0,
-	ARMADA_SPI = 1,
-};
-
-struct orion_spi_dev {
-	enum orion_spi_type typ;
-	long unsigned int max_hz;
-	unsigned int min_divisor;
-	unsigned int max_divisor;
-	u32 prescale_mask;
-	bool is_errata_50mhz_ac;
-};
-
-struct orion_direct_acc {
-	void *vaddr;
-	u32 size;
-};
-
-struct orion_child_options {
-	struct orion_direct_acc direct_access;
-};
-
-struct orion_spi {
-	struct spi_controller *master;
-	void *base;
-	struct clk *clk;
-	struct clk *axi_clk;
-	const struct orion_spi_dev *devdata;
-	struct orion_child_options child[8];
-};
-
-enum ssp_loopback {
-	LOOPBACK_DISABLED = 0,
-	LOOPBACK_ENABLED = 1,
-};
-
-enum ssp_interface {
-	SSP_INTERFACE_MOTOROLA_SPI = 0,
-	SSP_INTERFACE_TI_SYNC_SERIAL = 1,
-	SSP_INTERFACE_NATIONAL_MICROWIRE = 2,
-	SSP_INTERFACE_UNIDIRECTIONAL = 3,
-};
-
-enum ssp_hierarchy {
-	SSP_MASTER = 0,
-	SSP_SLAVE = 1,
-};
-
-struct ssp_clock_params {
-	u8 cpsdvsr;
-	u8 scr;
-};
-
-enum ssp_rx_endian {
-	SSP_RX_MSB = 0,
-	SSP_RX_LSB = 1,
-};
-
-enum ssp_tx_endian {
-	SSP_TX_MSB = 0,
-	SSP_TX_LSB = 1,
-};
-
-enum ssp_data_size {
-	SSP_DATA_BITS_4 = 3,
-	SSP_DATA_BITS_5 = 4,
-	SSP_DATA_BITS_6 = 5,
-	SSP_DATA_BITS_7 = 6,
-	SSP_DATA_BITS_8 = 7,
-	SSP_DATA_BITS_9 = 8,
-	SSP_DATA_BITS_10 = 9,
-	SSP_DATA_BITS_11 = 10,
-	SSP_DATA_BITS_12 = 11,
-	SSP_DATA_BITS_13 = 12,
-	SSP_DATA_BITS_14 = 13,
-	SSP_DATA_BITS_15 = 14,
-	SSP_DATA_BITS_16 = 15,
-	SSP_DATA_BITS_17 = 16,
-	SSP_DATA_BITS_18 = 17,
-	SSP_DATA_BITS_19 = 18,
-	SSP_DATA_BITS_20 = 19,
-	SSP_DATA_BITS_21 = 20,
-	SSP_DATA_BITS_22 = 21,
-	SSP_DATA_BITS_23 = 22,
-	SSP_DATA_BITS_24 = 23,
-	SSP_DATA_BITS_25 = 24,
-	SSP_DATA_BITS_26 = 25,
-	SSP_DATA_BITS_27 = 26,
-	SSP_DATA_BITS_28 = 27,
-	SSP_DATA_BITS_29 = 28,
-	SSP_DATA_BITS_30 = 29,
-	SSP_DATA_BITS_31 = 30,
-	SSP_DATA_BITS_32 = 31,
-};
-
-enum ssp_mode {
-	INTERRUPT_TRANSFER = 0,
-	POLLING_TRANSFER = 1,
-	DMA_TRANSFER = 2,
-};
-
-enum ssp_rx_level_trig {
-	SSP_RX_1_OR_MORE_ELEM = 0,
-	SSP_RX_4_OR_MORE_ELEM = 1,
-	SSP_RX_8_OR_MORE_ELEM = 2,
-	SSP_RX_16_OR_MORE_ELEM = 3,
-	SSP_RX_32_OR_MORE_ELEM = 4,
-};
-
-enum ssp_tx_level_trig {
-	SSP_TX_1_OR_MORE_EMPTY_LOC = 0,
-	SSP_TX_4_OR_MORE_EMPTY_LOC = 1,
-	SSP_TX_8_OR_MORE_EMPTY_LOC = 2,
-	SSP_TX_16_OR_MORE_EMPTY_LOC = 3,
-	SSP_TX_32_OR_MORE_EMPTY_LOC = 4,
-};
-
-enum ssp_spi_clk_phase {
-	SSP_CLK_FIRST_EDGE = 0,
-	SSP_CLK_SECOND_EDGE = 1,
-};
-
-enum ssp_spi_clk_pol {
-	SSP_CLK_POL_IDLE_LOW = 0,
-	SSP_CLK_POL_IDLE_HIGH = 1,
-};
-
-enum ssp_microwire_ctrl_len {
-	SSP_BITS_4 = 3,
-	SSP_BITS_5 = 4,
-	SSP_BITS_6 = 5,
-	SSP_BITS_7 = 6,
-	SSP_BITS_8 = 7,
-	SSP_BITS_9 = 8,
-	SSP_BITS_10 = 9,
-	SSP_BITS_11 = 10,
-	SSP_BITS_12 = 11,
-	SSP_BITS_13 = 12,
-	SSP_BITS_14 = 13,
-	SSP_BITS_15 = 14,
-	SSP_BITS_16 = 15,
-	SSP_BITS_17 = 16,
-	SSP_BITS_18 = 17,
-	SSP_BITS_19 = 18,
-	SSP_BITS_20 = 19,
-	SSP_BITS_21 = 20,
-	SSP_BITS_22 = 21,
-	SSP_BITS_23 = 22,
-	SSP_BITS_24 = 23,
-	SSP_BITS_25 = 24,
-	SSP_BITS_26 = 25,
-	SSP_BITS_27 = 26,
-	SSP_BITS_28 = 27,
-	SSP_BITS_29 = 28,
-	SSP_BITS_30 = 29,
-	SSP_BITS_31 = 30,
-	SSP_BITS_32 = 31,
-};
-
-enum ssp_microwire_wait_state {
-	SSP_MWIRE_WAIT_ZERO = 0,
-	SSP_MWIRE_WAIT_ONE = 1,
-};
-
-enum ssp_duplex {
-	SSP_MICROWIRE_CHANNEL_FULL_DUPLEX = 0,
-	SSP_MICROWIRE_CHANNEL_HALF_DUPLEX = 1,
-};
-
-enum ssp_clkdelay {
-	SSP_FEEDBACK_CLK_DELAY_NONE = 0,
-	SSP_FEEDBACK_CLK_DELAY_1T = 1,
-	SSP_FEEDBACK_CLK_DELAY_2T = 2,
-	SSP_FEEDBACK_CLK_DELAY_3T = 3,
-	SSP_FEEDBACK_CLK_DELAY_4T = 4,
-	SSP_FEEDBACK_CLK_DELAY_5T = 5,
-	SSP_FEEDBACK_CLK_DELAY_6T = 6,
-	SSP_FEEDBACK_CLK_DELAY_7T = 7,
-};
-
-enum ssp_chip_select {
-	SSP_CHIP_SELECT = 0,
-	SSP_CHIP_DESELECT = 1,
-};
-
-struct pl022_ssp_controller {
-	u16 bus_id;
-	u8 num_chipselect;
-	u8 enable_dma: 1;
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	int autosuspend_delay;
-	bool rt;
-	int *chipselects;
-};
-
-struct pl022_config_chip {
-	enum ssp_interface iface;
-	enum ssp_hierarchy hierarchy;
-	bool slave_tx_disable;
-	struct ssp_clock_params clk_freq;
-	enum ssp_mode com_mode;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	enum ssp_microwire_ctrl_len ctrl_len;
-	enum ssp_microwire_wait_state wait_state;
-	enum ssp_duplex duplex;
-	enum ssp_clkdelay clkdelay;
-	void (*cs_control)(u32);
-};
-
-enum ssp_reading {
-	READING_NULL = 0,
-	READING_U8 = 1,
-	READING_U16 = 2,
-	READING_U32 = 3,
-};
-
-enum ssp_writing {
-	WRITING_NULL = 0,
-	WRITING_U8 = 1,
-	WRITING_U16 = 2,
-	WRITING_U32 = 3,
-};
-
-struct vendor_data___2 {
-	int fifodepth;
-	int max_bpw;
-	bool unidir;
-	bool extended_cr;
-	bool pl023;
-	bool loopback;
-	bool internal_cs_ctrl;
-};
-
-struct chip_data;
-
-struct pl022 {
-	struct amba_device *adev;
-	struct vendor_data___2 *vendor;
-	resource_size_t phybase;
-	void *virtbase;
-	struct clk *clk;
-	struct spi_controller *master;
-	struct pl022_ssp_controller *master_info;
-	struct tasklet_struct pump_transfers;
-	struct spi_message *cur_msg;
-	struct spi_transfer *cur_transfer;
-	struct chip_data *cur_chip;
-	bool next_msg_cs_active;
-	void *tx;
-	void *tx_end;
-	void *rx;
-	void *rx_end;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	u32 exp_fifo_level;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	struct dma_chan *dma_rx_channel;
-	struct dma_chan *dma_tx_channel;
-	struct sg_table sgt_rx;
-	struct sg_table sgt_tx;
-	char *dummypage;
-	bool dma_running;
-	int cur_cs;
-	int *chipselects;
-};
-
-struct chip_data {
-	u32 cr0;
-	u16 cr1;
-	u16 dmacr;
-	u16 cpsr;
-	u8 n_bytes;
-	bool enable_dma;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	void (*cs_control)(u32);
-	int xfer_type;
-};
-
-struct spi_qup {
-	void *base;
-	struct device *dev;
-	struct clk *cclk;
-	struct clk *iclk;
-	int irq;
+typedef struct {
+	struct tasklet_struct dpc_h;
+	struct pci_dev *pdev;
+	struct Scsi_Host *host;
 	spinlock_t lock;
-	int in_fifo_sz;
-	int out_fifo_sz;
-	int in_blk_sz;
-	int out_blk_sz;
-	struct spi_transfer *xfer;
-	struct completion done;
-	int error;
-	int w_size;
-	int n_words;
-	int tx_bytes;
-	int rx_bytes;
-	const u8 *tx_buf;
-	u8 *rx_buf;
-	int qup_v1;
-	int mode;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
+	uint8_t quiescent;
+	int outstanding_cmds;
+	scb_t___2 *kscb_list;
+	struct list_head kscb_pool;
+	spinlock_t kscb_pool_lock;
+	struct list_head pend_list;
+	spinlock_t pend_list_lock;
+	struct list_head completed_list;
+	spinlock_t completed_list_lock;
+	uint16_t sglen;
+	int device_ids[1040];
+	caddr_t raid_device;
+	uint8_t max_channel;
+	uint16_t max_target;
+	uint8_t max_lun;
+	uint32_t unique_id;
+	int irq;
+	uint8_t ito;
+	caddr_t ibuf;
+	dma_addr_t ibuf_dma_h;
+	scb_t___2 *uscb_list;
+	struct list_head uscb_pool;
+	spinlock_t uscb_pool_lock;
+	int max_cmds;
+	uint8_t fw_version[16];
+	uint8_t bios_version[16];
+	uint8_t max_cdb_sz;
+	uint8_t ha;
+	uint16_t init_id;
+	uint16_t max_sectors;
+	uint16_t cmd_per_lun;
+	atomic_t being_detached;
+} adapter_t___2;
+
+struct mraid_pci_blk {
+	caddr_t vaddr;
+	dma_addr_t dma_addr;
 };
 
-struct rockchip_spi {
-	struct device *dev;
-	struct clk *spiclk;
-	struct clk *apb_pclk;
-	void *regs;
-	dma_addr_t dma_addr_rx;
-	dma_addr_t dma_addr_tx;
-	const void *tx;
-	void *rx;
-	unsigned int tx_left;
-	unsigned int rx_left;
-	atomic_t state;
-	u32 fifo_len;
-	u32 freq;
-	u8 n_bytes;
-	u8 rsd;
-	bool cs_asserted[2];
-	bool slave_abort;
+typedef struct {
+	uint8_t timeout: 3;
+	uint8_t ars: 1;
+	uint8_t rsvd1: 1;
+	uint8_t cd_rom: 1;
+	uint8_t rsvd2: 1;
+	uint8_t islogical: 1;
+	uint8_t logdrv;
+	uint8_t channel;
+	uint8_t target;
+	uint8_t queuetag;
+	uint8_t queueaction;
+	uint8_t cdblen;
+	uint8_t rsvd3;
+	uint8_t cdb[16];
+	uint8_t numsge;
+	uint8_t status;
+	uint8_t reqsenselen;
+	uint8_t reqsensearea[32];
+	uint8_t rsvd4;
+	uint32_t dataxferaddr;
+	uint32_t dataxferlen;
+} mraid_epassthru_t;
+
+typedef struct {
+	uint32_t data_size;
+	uint32_t config_signature;
+	uint8_t fw_version[16];
+	uint8_t bios_version[16];
+	uint8_t product_name[80];
+	uint8_t max_commands;
+	uint8_t nchannels;
+	uint8_t fc_loop_present;
+	uint8_t mem_type;
+	uint32_t signature;
+	uint16_t dram_size;
+	uint16_t subsysid;
+	uint16_t subsysvid;
+	uint8_t notify_counters;
+	uint8_t pad1k[889];
+} mraid_pinfo_t;
+
+typedef struct {
+	uint32_t global_counter;
+	uint8_t param_counter;
+	uint8_t param_id;
+	uint16_t param_val;
+	uint8_t write_config_counter;
+	uint8_t write_config_rsvd[3];
+	uint8_t ldrv_op_counter;
+	uint8_t ldrv_opid;
+	uint8_t ldrv_opcmd;
+	uint8_t ldrv_opstatus;
+	uint8_t ldrv_state_counter;
+	uint8_t ldrv_state_id;
+	uint8_t ldrv_state_new;
+	uint8_t ldrv_state_old;
+	uint8_t pdrv_state_counter;
+	uint8_t pdrv_state_id;
+	uint8_t pdrv_state_new;
+	uint8_t pdrv_state_old;
+	uint8_t pdrv_fmt_counter;
+	uint8_t pdrv_fmt_id;
+	uint8_t pdrv_fmt_val;
+	uint8_t pdrv_fmt_rsvd;
+	uint8_t targ_xfer_counter;
+	uint8_t targ_xfer_id;
+	uint8_t targ_xfer_val;
+	uint8_t targ_xfer_rsvd;
+	uint8_t fcloop_id_chg_counter;
+	uint8_t fcloopid_pdrvid;
+	uint8_t fcloop_id0;
+	uint8_t fcloop_id1;
+	uint8_t fcloop_state_counter;
+	uint8_t fcloop_state0;
+	uint8_t fcloop_state1;
+	uint8_t fcloop_state_rsvd;
+} mraid_notify_t;
+
+typedef struct {
+	uint32_t data_size;
+	mraid_notify_t notify;
+	uint8_t notify_rsvd[88];
+	uint8_t rebuild_rate;
+	uint8_t cache_flush_int;
+	uint8_t sense_alert;
+	uint8_t drive_insert_count;
+	uint8_t battery_status;
+	uint8_t num_ldrv;
+	uint8_t recon_state[5];
+	uint16_t ldrv_op_status[5];
+	uint32_t ldrv_size[40];
+	uint8_t ldrv_prop[40];
+	uint8_t ldrv_state[40];
+	uint8_t pdrv_state[256];
+	uint16_t pdrv_format[16];
+	uint8_t targ_xfer[80];
+	uint8_t pad1k[263];
+} __attribute__((packed)) mraid_inquiry3_t;
+
+typedef struct {
+	uint64_t address;
+	uint32_t length;
+} __attribute__((packed)) mbox_sgl64;
+
+typedef struct {
+	uint32_t address;
+	uint32_t length;
+} mbox_sgl32;
+
+typedef struct {
+	uint8_t *raw_mbox;
+	mbox_t *mbox;
+	mbox64_t *mbox64;
+	dma_addr_t mbox_dma_h;
+	mbox_sgl64 *sgl64;
+	mbox_sgl32 *sgl32;
+	dma_addr_t sgl_dma_h;
+	mraid_passthru_t *pthru;
+	dma_addr_t pthru_dma_h;
+	mraid_epassthru_t *epthru;
+	dma_addr_t epthru_dma_h;
+	dma_addr_t buf_dma_h;
+} mbox_ccb_t;
+
+typedef struct {
+	mbox64_t *una_mbox64;
+	dma_addr_t una_mbox64_dma;
+	mbox_t *mbox;
+	mbox64_t *mbox64;
+	dma_addr_t mbox_dma;
+	spinlock_t mailbox_lock;
+	long unsigned int baseport;
+	void *baseaddr;
+	struct mraid_pci_blk mbox_pool[128];
+	struct dma_pool *mbox_pool_handle;
+	struct mraid_pci_blk epthru_pool[128];
+	struct dma_pool *epthru_pool_handle;
+	struct mraid_pci_blk sg_pool[128];
+	struct dma_pool *sg_pool_handle;
+	mbox_ccb_t ccb_list[128];
+	mbox_ccb_t uccb_list[32];
+	mbox64_t umbox64[32];
+	uint8_t pdrv_state[75];
+	uint32_t last_disp;
+	int hw_error;
+	int fast_load;
+	uint8_t channel_class;
+	struct mutex sysfs_mtx;
+	uioc_t *sysfs_uioc;
+	mbox64_t *sysfs_mbox64;
+	caddr_t sysfs_buffer;
+	dma_addr_t sysfs_buffer_dma;
+	wait_queue_head_t sysfs_wait_q;
+	int random_del_supported;
+	uint16_t curr_ldmap[64];
+} mraid_device_t;
+
+struct megasas_debugfs_buffer {
+	void *buf;
+	u32 len;
 };
 
-struct s3c64xx_spi_csinfo {
-	u8 fb_delay;
-	unsigned int line;
+struct megasas_debug_buffer;
+
+struct _MPI2_SMP_PASSTHROUGH_REPLY {
+	U8___2 PassthroughFlags;
+	U8___2 PhysicalPort;
+	U8___2 MsgLength;
+	U8___2 Function;
+	U16___2 ResponseDataLength;
+	U8___2 SGLFlags;
+	U8___2 MsgFlags;
+	U8___2 VP_ID;
+	U8___2 VF_ID;
+	U16___2 Reserved1;
+	U8___2 Reserved2;
+	U8___2 SASStatus;
+	U16___2 IOCStatus;
+	U32___2 IOCLogInfo;
+	U32___2 Reserved3;
+	U8___2 ResponseData[4];
 };
 
-struct s3c64xx_spi_info {
-	int src_clk_nr;
-	int num_cs;
-	bool no_cs;
-	int (*cfg_gpio)();
+typedef struct _MPI2_SMP_PASSTHROUGH_REPLY Mpi2SmpPassthroughReply_t;
+
+struct rep_manu_request {
+	u8 smp_frame_type;
+	u8 function;
+	u8 reserved;
+	u8 request_length;
 };
 
-struct s3c64xx_spi_dma_data {
-	struct dma_chan *ch;
-	dma_cookie_t cookie;
-	enum dma_transfer_direction direction;
+struct rep_manu_reply {
+	u8 smp_frame_type;
+	u8 function;
+	u8 function_result;
+	u8 response_length;
+	u16 expander_change_count;
+	u8 reserved0[2];
+	u8 sas_format;
+	u8 reserved2[3];
+	u8 vendor_id[8];
+	u8 product_id[16];
+	u8 product_rev[4];
+	u8 component_vendor_id[8];
+	u16 component_id;
+	u8 component_revision_id;
+	u8 reserved3;
+	u8 vendor_specific[8];
 };
 
-struct s3c64xx_spi_port_config {
-	int fifo_lvl_mask[6];
-	int rx_lvl_offset;
-	int tx_st_done;
-	int quirks;
-	bool high_speed;
-	bool clk_from_cmu;
-	bool clk_ioclk;
+struct phy_error_log_request {
+	u8 smp_frame_type;
+	u8 function;
+	u8 allocated_response_length;
+	u8 request_length;
+	u8 reserved_1[5];
+	u8 phy_identifier;
+	u8 reserved_2[2];
 };
 
-struct s3c64xx_spi_driver_data {
-	void *regs;
-	struct clk *clk;
-	struct clk *src_clk;
-	struct clk *ioclk;
-	struct platform_device *pdev;
-	struct spi_controller *master;
-	struct s3c64xx_spi_info *cntrlr_info;
-	spinlock_t lock;
-	long unsigned int sfr_start;
-	struct completion xfer_completion;
-	unsigned int state;
-	unsigned int cur_mode;
-	unsigned int cur_bpw;
-	unsigned int cur_speed;
-	struct s3c64xx_spi_dma_data rx_dma;
-	struct s3c64xx_spi_dma_data tx_dma;
-	struct s3c64xx_spi_port_config *port_conf;
-	unsigned int port_id;
+struct phy_error_log_reply {
+	u8 smp_frame_type;
+	u8 function;
+	u8 function_result;
+	u8 response_length;
+	__be16 expander_change_count;
+	u8 reserved_1[3];
+	u8 phy_identifier;
+	u8 reserved_2[2];
+	__be32 invalid_dword;
+	__be32 running_disparity_error;
+	__be32 loss_of_dword_sync;
+	__be32 phy_reset_problem;
 };
 
-struct devprobe2 {
-	struct net_device * (*probe)(int);
-	int status;
+struct phy_control_request {
+	u8 smp_frame_type;
+	u8 function;
+	u8 allocated_response_length;
+	u8 request_length;
+	u16 expander_change_count;
+	u8 reserved_1[3];
+	u8 phy_identifier;
+	u8 phy_operation;
+	u8 reserved_2[13];
+	u64 attached_device_name;
+	u8 programmed_min_physical_link_rate;
+	u8 programmed_max_physical_link_rate;
+	u8 reserved_3[6];
+};
+
+struct phy_control_reply {
+	u8 smp_frame_type;
+	u8 function;
+	u8 function_result;
+	u8 response_length;
+};
+
+enum hw_registers___2 {
+	MVS_GBL_CTL___2 = 4,
+	MVS_GBL_INT_STAT___2 = 8,
+	MVS_GBL_PI___2 = 12,
+	MVS_PHY_CTL___2 = 64,
+	MVS_PORTS_IMP___2 = 156,
+	MVS_GBL_PORT_TYPE___2 = 160,
+	MVS_CTL___2 = 256,
+	MVS_PCS___2 = 260,
+	MVS_CMD_LIST_LO___2 = 264,
+	MVS_CMD_LIST_HI___2 = 268,
+	MVS_RX_FIS_LO___2 = 272,
+	MVS_RX_FIS_HI___2 = 276,
+	MVS_TX_CFG___2 = 288,
+	MVS_TX_LO___2 = 292,
+	MVS_TX_HI___2 = 296,
+	MVS_TX_PROD_IDX___2 = 300,
+	MVS_TX_CONS_IDX___2 = 304,
+	MVS_RX_CFG___2 = 308,
+	MVS_RX_LO___2 = 312,
+	MVS_RX_HI___2 = 316,
+	MVS_RX_CONS_IDX___2 = 320,
+	MVS_INT_COAL___2 = 328,
+	MVS_INT_COAL_TMOUT___2 = 332,
+	MVS_INT_STAT___2 = 336,
+	MVS_INT_MASK___2 = 340,
+	MVS_INT_STAT_SRS_0___2 = 344,
+	MVS_INT_MASK_SRS_0___2 = 348,
+	MVS_P0_INT_STAT___2 = 352,
+	MVS_P0_INT_MASK___2 = 356,
+	MVS_P4_INT_STAT___2 = 512,
+	MVS_P4_INT_MASK___2 = 516,
+	MVS_P0_SER_CTLSTAT___2 = 384,
+	MVS_P4_SER_CTLSTAT___2 = 544,
+	MVS_CMD_ADDR___2 = 440,
+	MVS_CMD_DATA___2 = 444,
+	MVS_P0_CFG_ADDR___2 = 448,
+	MVS_P0_CFG_DATA___2 = 452,
+	MVS_P4_CFG_ADDR___2 = 560,
+	MVS_P4_CFG_DATA___2 = 564,
+	MVS_P0_VSR_ADDR___2 = 480,
+	MVS_P0_VSR_DATA___2 = 484,
+	MVS_P4_VSR_ADDR___2 = 592,
+	MVS_P4_VSR_DATA___2 = 596,
+};
+
+enum pci_cfg_registers___2 {
+	PCR_PHY_CTL___2 = 64,
+	PCR_PHY_CTL2___2 = 144,
+	PCR_DEV_CTRL___2 = 232,
+	PCR_LINK_STAT___2 = 242,
+};
+
+enum sas_sata_vsp_regs___2 {
+	VSR_PHY_STAT___2 = 0,
+	VSR_PHY_MODE1___2 = 1,
+	VSR_PHY_MODE2___2 = 2,
+	VSR_PHY_MODE3___2 = 3,
+	VSR_PHY_MODE4___2 = 4,
+	VSR_PHY_MODE5___2 = 5,
+	VSR_PHY_MODE6___2 = 6,
+	VSR_PHY_MODE7___2 = 7,
+	VSR_PHY_MODE8___2 = 8,
+	VSR_PHY_MODE9___2 = 9,
+	VSR_PHY_MODE10___2 = 10,
+	VSR_PHY_MODE11___2 = 11,
+	VSR_PHY_VS0 = 12,
+	VSR_PHY_VS1 = 13,
+};
+
+enum chip_register_bits___2 {
+	PHY_MIN_SPP_PHYS_LINK_RATE_MASK___2 = 3840,
+	PHY_MAX_SPP_PHYS_LINK_RATE_MASK___2 = 61440,
+	PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET___2 = 16,
+	PHY_NEG_SPP_PHYS_LINK_RATE_MASK___2 = 983040,
+};
+
+struct mvs_prd___2 {
+	__le64 addr;
+	__le32 reserved;
+	__le32 len;
+};
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+struct trace_event_raw_scsi_prepare_zone_append {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t lba;
+	unsigned int wp_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_zone_wp_update {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t rq_sector;
+	unsigned int wp_offset;
+	unsigned int good_bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_prepare_zone_append {};
+
+struct trace_event_data_offsets_scsi_zone_wp_update {};
+
+typedef void (*btf_trace_scsi_prepare_zone_append)(void *, struct scsi_cmnd *, sector_t, unsigned int);
+
+typedef void (*btf_trace_scsi_zone_wp_update)(void *, struct scsi_cmnd *, sector_t, unsigned int, unsigned int);
+
+struct ata_internal {
+	struct scsi_transport_template t;
+	struct device_attribute private_port_attrs[3];
+	struct device_attribute private_link_attrs[3];
+	struct device_attribute private_dev_attrs[9];
+	struct transport_container link_attr_cont;
+	struct transport_container dev_attr_cont;
+	struct device_attribute *link_attrs[4];
+	struct device_attribute *port_attrs[4];
+	struct device_attribute *dev_attrs[10];
+};
+
+struct ata_show_ering_arg {
+	char *buf;
+	int written;
 };
 
 enum {
-	NETIF_F_SG_BIT = 0,
-	NETIF_F_IP_CSUM_BIT = 1,
-	__UNUSED_NETIF_F_1 = 2,
-	NETIF_F_HW_CSUM_BIT = 3,
-	NETIF_F_IPV6_CSUM_BIT = 4,
-	NETIF_F_HIGHDMA_BIT = 5,
-	NETIF_F_FRAGLIST_BIT = 6,
-	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
-	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
-	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
-	NETIF_F_VLAN_CHALLENGED_BIT = 10,
-	NETIF_F_GSO_BIT = 11,
-	NETIF_F_LLTX_BIT = 12,
-	NETIF_F_NETNS_LOCAL_BIT = 13,
-	NETIF_F_GRO_BIT = 14,
-	NETIF_F_LRO_BIT = 15,
-	NETIF_F_GSO_SHIFT = 16,
-	NETIF_F_TSO_BIT = 16,
-	NETIF_F_GSO_ROBUST_BIT = 17,
-	NETIF_F_TSO_ECN_BIT = 18,
-	NETIF_F_TSO_MANGLEID_BIT = 19,
-	NETIF_F_TSO6_BIT = 20,
-	NETIF_F_FSO_BIT = 21,
-	NETIF_F_GSO_GRE_BIT = 22,
-	NETIF_F_GSO_GRE_CSUM_BIT = 23,
-	NETIF_F_GSO_IPXIP4_BIT = 24,
-	NETIF_F_GSO_IPXIP6_BIT = 25,
-	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
-	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
-	NETIF_F_GSO_PARTIAL_BIT = 28,
-	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
-	NETIF_F_GSO_SCTP_BIT = 30,
-	NETIF_F_GSO_ESP_BIT = 31,
-	NETIF_F_GSO_UDP_BIT = 32,
-	NETIF_F_GSO_UDP_L4_BIT = 33,
-	NETIF_F_GSO_FRAGLIST_BIT = 34,
-	NETIF_F_GSO_LAST = 34,
-	NETIF_F_FCOE_CRC_BIT = 35,
-	NETIF_F_SCTP_CRC_BIT = 36,
-	NETIF_F_FCOE_MTU_BIT = 37,
-	NETIF_F_NTUPLE_BIT = 38,
-	NETIF_F_RXHASH_BIT = 39,
-	NETIF_F_RXCSUM_BIT = 40,
-	NETIF_F_NOCACHE_COPY_BIT = 41,
-	NETIF_F_LOOPBACK_BIT = 42,
-	NETIF_F_RXFCS_BIT = 43,
-	NETIF_F_RXALL_BIT = 44,
-	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
-	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
-	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
-	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
-	NETIF_F_HW_TC_BIT = 49,
-	NETIF_F_HW_ESP_BIT = 50,
-	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
-	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
-	NETIF_F_HW_TLS_TX_BIT = 53,
-	NETIF_F_HW_TLS_RX_BIT = 54,
-	NETIF_F_GRO_HW_BIT = 55,
-	NETIF_F_HW_TLS_RECORD_BIT = 56,
-	NETIF_F_GRO_FRAGLIST_BIT = 57,
-	NETIF_F_HW_MACSEC_BIT = 58,
-	NETDEV_FEATURE_COUNT = 59,
+	AHCI_PCI_BAR_STA2X11 = 0,
+	AHCI_PCI_BAR_CAVIUM = 0,
+	AHCI_PCI_BAR_LOONGSON = 0,
+	AHCI_PCI_BAR_ENMOTUS = 2,
+	AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
+	AHCI_PCI_BAR_STANDARD = 5,
+};
+
+enum board_ids {
+	board_ahci = 0,
+	board_ahci_ign_iferr = 1,
+	board_ahci_low_power = 2,
+	board_ahci_no_debounce_delay = 3,
+	board_ahci_nomsi = 4,
+	board_ahci_noncq = 5,
+	board_ahci_nosntf = 6,
+	board_ahci_yes_fbs = 7,
+	board_ahci_al = 8,
+	board_ahci_avn = 9,
+	board_ahci_mcp65 = 10,
+	board_ahci_mcp77 = 11,
+	board_ahci_mcp89 = 12,
+	board_ahci_mv = 13,
+	board_ahci_sb600 = 14,
+	board_ahci_sb700 = 15,
+	board_ahci_vt8251 = 16,
+	board_ahci_pcs7 = 17,
+	board_ahci_mcp_linux = 10,
+	board_ahci_mcp67 = 10,
+	board_ahci_mcp73 = 10,
+	board_ahci_mcp79 = 11,
 };
 
 enum {
-	SKBTX_HW_TSTAMP = 1,
-	SKBTX_SW_TSTAMP = 2,
-	SKBTX_IN_PROGRESS = 4,
-	SKBTX_DEV_ZEROCOPY = 8,
-	SKBTX_WIFI_STATUS = 16,
-	SKBTX_SHARED_FRAG = 32,
-	SKBTX_SCHED_TSTAMP = 64,
-};
-
-enum netdev_priv_flags {
-	IFF_802_1Q_VLAN = 1,
-	IFF_EBRIDGE = 2,
-	IFF_BONDING = 4,
-	IFF_ISATAP = 8,
-	IFF_WAN_HDLC = 16,
-	IFF_XMIT_DST_RELEASE = 32,
-	IFF_DONT_BRIDGE = 64,
-	IFF_DISABLE_NETPOLL = 128,
-	IFF_MACVLAN_PORT = 256,
-	IFF_BRIDGE_PORT = 512,
-	IFF_OVS_DATAPATH = 1024,
-	IFF_TX_SKB_SHARING = 2048,
-	IFF_UNICAST_FLT = 4096,
-	IFF_TEAM_PORT = 8192,
-	IFF_SUPP_NOFCS = 16384,
-	IFF_LIVE_ADDR_CHANGE = 32768,
-	IFF_MACVLAN = 65536,
-	IFF_XMIT_DST_RELEASE_PERM = 131072,
-	IFF_L3MDEV_MASTER = 262144,
-	IFF_NO_QUEUE = 524288,
-	IFF_OPENVSWITCH = 1048576,
-	IFF_L3MDEV_SLAVE = 2097152,
-	IFF_TEAM = 4194304,
-	IFF_RXFH_CONFIGURED = 8388608,
-	IFF_PHONY_HEADROOM = 16777216,
-	IFF_MACSEC = 33554432,
-	IFF_NO_RX_HANDLER = 67108864,
-	IFF_FAILOVER = 134217728,
-	IFF_FAILOVER_SLAVE = 268435456,
-	IFF_L3MDEV_RX_HANDLER = 536870912,
-	IFF_LIVE_RENAME_OK = 1073741824,
-};
-
-struct mdio_board_info {
-	const char *bus_id;
-	char modalias[32];
-	int mdio_addr;
-	const void *platform_data;
-};
-
-struct mdio_board_entry {
-	struct list_head list;
-	struct mdio_board_info board_info;
-};
-
-struct mdiobus_devres {
-	struct mii_bus *mii;
-};
-
-enum netdev_state_t {
-	__LINK_STATE_START = 0,
-	__LINK_STATE_PRESENT = 1,
-	__LINK_STATE_NOCARRIER = 2,
-	__LINK_STATE_LINKWATCH_PENDING = 3,
-	__LINK_STATE_DORMANT = 4,
-	__LINK_STATE_TESTING = 5,
-};
-
-struct mii_ioctl_data {
-	__u16 phy_id;
-	__u16 reg_num;
-	__u16 val_in;
-	__u16 val_out;
-};
-
-enum {
-	ETHTOOL_MSG_KERNEL_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
-	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
-	ETHTOOL_MSG_LINKINFO_NTF = 3,
-	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
-	ETHTOOL_MSG_LINKMODES_NTF = 5,
-	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
-	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
-	ETHTOOL_MSG_DEBUG_NTF = 8,
-	ETHTOOL_MSG_WOL_GET_REPLY = 9,
-	ETHTOOL_MSG_WOL_NTF = 10,
-	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
-	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
-	ETHTOOL_MSG_FEATURES_NTF = 13,
-	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
-	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
-	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
-	ETHTOOL_MSG_RINGS_NTF = 17,
-	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
-	ETHTOOL_MSG_CHANNELS_NTF = 19,
-	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
-	ETHTOOL_MSG_COALESCE_NTF = 21,
-	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
-	ETHTOOL_MSG_PAUSE_NTF = 23,
-	ETHTOOL_MSG_EEE_GET_REPLY = 24,
-	ETHTOOL_MSG_EEE_NTF = 25,
-	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
-	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
-	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
-	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
-	__ETHTOOL_MSG_KERNEL_CNT = 30,
-	ETHTOOL_MSG_KERNEL_MAX = 29,
-};
-
-struct phy_setting {
-	u32 speed;
-	u8 duplex;
-	u8 bit;
-};
-
-struct ethtool_phy_ops {
-	int (*get_sset_count)(struct phy_device *);
-	int (*get_strings)(struct phy_device *, u8 *);
-	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
-	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
-};
-
-struct phy_fixup {
-	struct list_head list;
-	char bus_id[64];
-	u32 phy_uid;
-	u32 phy_uid_mask;
-	int (*run)(struct phy_device *);
-};
-
-struct sfp_eeprom_base {
-	u8 phys_id;
-	u8 phys_ext_id;
-	u8 connector;
-	u8 if_1x_copper_passive: 1;
-	u8 if_1x_copper_active: 1;
-	u8 if_1x_lx: 1;
-	u8 if_1x_sx: 1;
-	u8 e10g_base_sr: 1;
-	u8 e10g_base_lr: 1;
-	u8 e10g_base_lrm: 1;
-	u8 e10g_base_er: 1;
-	u8 sonet_oc3_short_reach: 1;
-	u8 sonet_oc3_smf_intermediate_reach: 1;
-	u8 sonet_oc3_smf_long_reach: 1;
-	u8 unallocated_5_3: 1;
-	u8 sonet_oc12_short_reach: 1;
-	u8 sonet_oc12_smf_intermediate_reach: 1;
-	u8 sonet_oc12_smf_long_reach: 1;
-	u8 unallocated_5_7: 1;
-	u8 sonet_oc48_short_reach: 1;
-	u8 sonet_oc48_intermediate_reach: 1;
-	u8 sonet_oc48_long_reach: 1;
-	u8 sonet_reach_bit2: 1;
-	u8 sonet_reach_bit1: 1;
-	u8 sonet_oc192_short_reach: 1;
-	u8 escon_smf_1310_laser: 1;
-	u8 escon_mmf_1310_led: 1;
-	u8 e1000_base_sx: 1;
-	u8 e1000_base_lx: 1;
-	u8 e1000_base_cx: 1;
-	u8 e1000_base_t: 1;
-	u8 e100_base_lx: 1;
-	u8 e100_base_fx: 1;
-	u8 e_base_bx10: 1;
-	u8 e_base_px: 1;
-	u8 fc_tech_electrical_inter_enclosure: 1;
-	u8 fc_tech_lc: 1;
-	u8 fc_tech_sa: 1;
-	u8 fc_ll_m: 1;
-	u8 fc_ll_l: 1;
-	u8 fc_ll_i: 1;
-	u8 fc_ll_s: 1;
-	u8 fc_ll_v: 1;
-	u8 unallocated_8_0: 1;
-	u8 unallocated_8_1: 1;
-	u8 sfp_ct_passive: 1;
-	u8 sfp_ct_active: 1;
-	u8 fc_tech_ll: 1;
-	u8 fc_tech_sl: 1;
-	u8 fc_tech_sn: 1;
-	u8 fc_tech_electrical_intra_enclosure: 1;
-	u8 fc_media_sm: 1;
-	u8 unallocated_9_1: 1;
-	u8 fc_media_m5: 1;
-	u8 fc_media_m6: 1;
-	u8 fc_media_tv: 1;
-	u8 fc_media_mi: 1;
-	u8 fc_media_tp: 1;
-	u8 fc_media_tw: 1;
-	u8 fc_speed_100: 1;
-	u8 unallocated_10_1: 1;
-	u8 fc_speed_200: 1;
-	u8 fc_speed_3200: 1;
-	u8 fc_speed_400: 1;
-	u8 fc_speed_1600: 1;
-	u8 fc_speed_800: 1;
-	u8 fc_speed_1200: 1;
-	u8 encoding;
-	u8 br_nominal;
-	u8 rate_id;
-	u8 link_len[6];
-	char vendor_name[16];
-	u8 extended_cc;
-	char vendor_oui[3];
-	char vendor_pn[16];
-	char vendor_rev[4];
-	union {
-		__be16 optical_wavelength;
-		__be16 cable_compliance;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 reserved60_2: 6;
-			u8 reserved61: 8;
-		} passive;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 sff8431_lim: 1;
-			u8 fc_pi_4_lim: 1;
-			u8 reserved60_4: 4;
-			u8 reserved61: 8;
-		} active;
-	};
-	u8 reserved62;
-	u8 cc_base;
-};
-
-struct sfp_eeprom_ext {
-	__be16 options;
-	u8 br_max;
-	u8 br_min;
-	char vendor_sn[16];
-	char datecode[8];
-	u8 diagmon;
-	u8 enhopts;
-	u8 sff8472_compliance;
-	u8 cc_ext;
-};
-
-struct sfp_eeprom_id {
-	struct sfp_eeprom_base base;
-	struct sfp_eeprom_ext ext;
-};
-
-struct sfp_upstream_ops {
-	void (*attach)(void *, struct sfp_bus *);
-	void (*detach)(void *, struct sfp_bus *);
-	int (*module_insert)(void *, const struct sfp_eeprom_id *);
-	void (*module_remove)(void *);
-	int (*module_start)(void *);
-	void (*module_stop)(void *);
-	void (*link_down)(void *);
-	void (*link_up)(void *);
-	int (*connect_phy)(void *, struct phy_device *);
-	void (*disconnect_phy)(void *);
+	ATIIXP_IDE_PIO_TIMING = 64,
+	ATIIXP_IDE_MWDMA_TIMING = 68,
+	ATIIXP_IDE_PIO_CONTROL = 72,
+	ATIIXP_IDE_PIO_MODE = 74,
+	ATIIXP_IDE_UDMA_CONTROL = 84,
+	ATIIXP_IDE_UDMA_MODE = 86,
 };
 
 struct trace_event_raw_mdio_access {
@@ -87458,2281 +115318,633 @@
 	unsigned int field_offset;
 };
 
-struct mdio_driver {
-	struct mdio_driver_common mdiodrv;
-	int (*probe)(struct mdio_device *);
-	void (*remove)(struct mdio_device *);
-};
-
-struct fixed_phy_status {
-	int link;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-};
-
-struct swmii_regs {
-	u16 bmsr;
-	u16 lpa;
-	u16 lpagb;
-	u16 estat;
-};
-
 enum {
-	SWMII_SPEED_10 = 0,
-	SWMII_SPEED_100 = 1,
-	SWMII_SPEED_1000 = 2,
-	SWMII_DUPLEX_HALF = 0,
-	SWMII_DUPLEX_FULL = 1,
+	DW_XPCS_USXGMII = 0,
+	DW_XPCS_10GKR = 1,
+	DW_XPCS_XLGMII = 2,
+	DW_XPCS_SGMII = 3,
+	DW_XPCS_1000BASEX = 4,
+	DW_XPCS_2500BASEX = 5,
+	DW_XPCS_INTERFACE_MAX = 6,
 };
 
-struct sfp;
-
-struct sfp_socket_ops;
-
-struct sfp_quirk;
-
-struct sfp_bus {
-	struct kref kref;
-	struct list_head node;
-	struct fwnode_handle *fwnode;
-	const struct sfp_socket_ops *socket_ops;
-	struct device *sfp_dev;
-	struct sfp *sfp;
-	const struct sfp_quirk *sfp_quirk;
-	const struct sfp_upstream_ops *upstream_ops;
-	void *upstream;
-	struct phy_device *phydev;
-	bool registered;
-	bool started;
+struct xpcs_compat {
+	const int *supported;
+	const phy_interface_t *interface;
+	int num_interfaces;
+	int an_mode;
+	int (*pma_config)(struct dw_xpcs *);
 };
 
-enum {
-	SFF8024_ID_UNK = 0,
-	SFF8024_ID_SFF_8472 = 2,
-	SFF8024_ID_SFP = 3,
-	SFF8024_ID_DWDM_SFP = 11,
-	SFF8024_ID_QSFP_8438 = 12,
-	SFF8024_ID_QSFP_8436_8636 = 13,
-	SFF8024_ID_QSFP28_8636 = 17,
-	SFF8024_ENCODING_UNSPEC = 0,
-	SFF8024_ENCODING_8B10B = 1,
-	SFF8024_ENCODING_4B5B = 2,
-	SFF8024_ENCODING_NRZ = 3,
-	SFF8024_ENCODING_8472_MANCHESTER = 4,
-	SFF8024_ENCODING_8472_SONET = 5,
-	SFF8024_ENCODING_8472_64B66B = 6,
-	SFF8024_ENCODING_8436_MANCHESTER = 6,
-	SFF8024_ENCODING_8436_SONET = 4,
-	SFF8024_ENCODING_8436_64B66B = 5,
-	SFF8024_ENCODING_256B257B = 7,
-	SFF8024_ENCODING_PAM4 = 8,
-	SFF8024_CONNECTOR_UNSPEC = 0,
-	SFF8024_CONNECTOR_SC = 1,
-	SFF8024_CONNECTOR_FIBERJACK = 6,
-	SFF8024_CONNECTOR_LC = 7,
-	SFF8024_CONNECTOR_MT_RJ = 8,
-	SFF8024_CONNECTOR_MU = 9,
-	SFF8024_CONNECTOR_SG = 10,
-	SFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,
-	SFF8024_CONNECTOR_MPO_1X12 = 12,
-	SFF8024_CONNECTOR_MPO_2X16 = 13,
-	SFF8024_CONNECTOR_HSSDC_II = 32,
-	SFF8024_CONNECTOR_COPPER_PIGTAIL = 33,
-	SFF8024_CONNECTOR_RJ45 = 34,
-	SFF8024_CONNECTOR_NOSEPARATE = 35,
-	SFF8024_CONNECTOR_MXC_2X16 = 36,
-	SFF8024_ECC_UNSPEC = 0,
-	SFF8024_ECC_100G_25GAUI_C2M_AOC = 1,
-	SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,
-	SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,
-	SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,
-	SFF8024_ECC_100GBASE_SR10 = 5,
-	SFF8024_ECC_100GBASE_CR4 = 11,
-	SFF8024_ECC_25GBASE_CR_S = 12,
-	SFF8024_ECC_25GBASE_CR_N = 13,
-	SFF8024_ECC_10GBASE_T_SFI = 22,
-	SFF8024_ECC_10GBASE_T_SR = 28,
-	SFF8024_ECC_5GBASE_T = 29,
-	SFF8024_ECC_2_5GBASE_T = 30,
-};
-
-struct sfp_socket_ops {
-	void (*attach)(struct sfp *);
-	void (*detach)(struct sfp *);
-	void (*start)(struct sfp *);
-	void (*stop)(struct sfp *);
-	int (*module_info)(struct sfp *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);
-};
-
-struct sfp_quirk {
-	const char *vendor;
-	const char *part;
-	void (*modes)(const struct sfp_eeprom_id *, long unsigned int *);
-};
-
-struct mdio_device_id {
-	__u32 phy_id;
-	__u32 phy_id_mask;
-};
-
-enum {
-	MDIO_AN_C22 = 65504,
-};
-
-struct fixed_mdio_bus {
-	struct mii_bus *mii_bus;
-	struct list_head phys;
-};
-
-struct fixed_phy {
-	int addr;
-	struct phy_device *phydev;
-	struct fixed_phy_status status;
-	bool no_carrier;
-	int (*link_update)(struct net_device *, struct fixed_phy_status *);
-	struct list_head node;
-	struct gpio_desc *link_gpiod;
-};
-
-struct mdio_mux_child_bus;
-
-struct mdio_mux_parent_bus {
-	struct mii_bus *mii_bus;
-	int current_child;
-	int parent_id;
-	void *switch_data;
-	int (*switch_fn)(int, int, void *);
-	struct mdio_mux_child_bus *children;
-};
-
-struct mdio_mux_child_bus {
-	struct mii_bus *mii_bus;
-	struct mdio_mux_parent_bus *parent;
-	struct mdio_mux_child_bus *next;
-	int bus_number;
-};
-
-struct mdio_mux_mmioreg_state {
-	void *mux_handle;
-	phys_addr_t phys;
-	unsigned int iosize;
-	unsigned int mask;
-};
-
-struct flow_dissector {
-	unsigned int used_keys;
-	short unsigned int offset[28];
-};
-
-struct flow_match {
-	struct flow_dissector *dissector;
-	void *mask;
-	void *key;
-};
-
-enum flow_action_id {
-	FLOW_ACTION_ACCEPT = 0,
-	FLOW_ACTION_DROP = 1,
-	FLOW_ACTION_TRAP = 2,
-	FLOW_ACTION_GOTO = 3,
-	FLOW_ACTION_REDIRECT = 4,
-	FLOW_ACTION_MIRRED = 5,
-	FLOW_ACTION_REDIRECT_INGRESS = 6,
-	FLOW_ACTION_MIRRED_INGRESS = 7,
-	FLOW_ACTION_VLAN_PUSH = 8,
-	FLOW_ACTION_VLAN_POP = 9,
-	FLOW_ACTION_VLAN_MANGLE = 10,
-	FLOW_ACTION_TUNNEL_ENCAP = 11,
-	FLOW_ACTION_TUNNEL_DECAP = 12,
-	FLOW_ACTION_MANGLE = 13,
-	FLOW_ACTION_ADD = 14,
-	FLOW_ACTION_CSUM = 15,
-	FLOW_ACTION_MARK = 16,
-	FLOW_ACTION_PTYPE = 17,
-	FLOW_ACTION_PRIORITY = 18,
-	FLOW_ACTION_WAKE = 19,
-	FLOW_ACTION_QUEUE = 20,
-	FLOW_ACTION_SAMPLE = 21,
-	FLOW_ACTION_POLICE = 22,
-	FLOW_ACTION_CT = 23,
-	FLOW_ACTION_CT_METADATA = 24,
-	FLOW_ACTION_MPLS_PUSH = 25,
-	FLOW_ACTION_MPLS_POP = 26,
-	FLOW_ACTION_MPLS_MANGLE = 27,
-	FLOW_ACTION_GATE = 28,
-	NUM_FLOW_ACTIONS = 29,
-};
-
-enum flow_action_hw_stats {
-	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
-	FLOW_ACTION_HW_STATS_DELAYED = 2,
-	FLOW_ACTION_HW_STATS_ANY = 3,
-	FLOW_ACTION_HW_STATS_DISABLED = 4,
-	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
-};
-
-typedef void (*action_destr)(void *);
-
-enum flow_action_mangle_base {
-	FLOW_ACT_MANGLE_UNSPEC = 0,
-	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
-	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
-	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
-};
-
-struct nf_flowtable;
-
-struct ip_tunnel_info;
-
-struct psample_group;
-
-struct action_gate_entry;
-
-struct flow_action_cookie;
-
-struct flow_action_entry {
-	enum flow_action_id id;
-	enum flow_action_hw_stats hw_stats;
-	action_destr destructor;
-	void *destructor_priv;
+struct e1000_context_desc {
 	union {
-		u32 chain_index;
-		struct net_device *dev;
+		__le32 ip_config;
 		struct {
-			u16 vid;
-			__be16 proto;
-			u8 prio;
-		} vlan;
-		struct {
-			enum flow_action_mangle_base htype;
-			u32 offset;
-			u32 mask;
-			u32 val;
-		} mangle;
-		struct ip_tunnel_info *tunnel;
-		u32 csum_flags;
-		u32 mark;
-		u16 ptype;
-		u32 priority;
-		struct {
-			u32 ctx;
-			u32 index;
-			u8 vf;
-		} queue;
-		struct {
-			struct psample_group *psample_group;
-			u32 rate;
-			u32 trunc_size;
-			bool truncate;
-		} sample;
-		struct {
-			u32 index;
-			u32 burst;
-			u64 rate_bytes_ps;
-			u32 mtu;
-		} police;
-		struct {
-			int action;
-			u16 zone;
-			struct nf_flowtable *flow_table;
-		} ct;
-		struct {
-			long unsigned int cookie;
-			u32 mark;
-			u32 labels[4];
-		} ct_metadata;
-		struct {
-			u32 label;
-			__be16 proto;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_push;
-		struct {
-			__be16 proto;
-		} mpls_pop;
-		struct {
-			u32 label;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_mangle;
-		struct {
-			u32 index;
-			s32 prio;
-			u64 basetime;
-			u64 cycletime;
-			u64 cycletimeext;
-			u32 num_entries;
-			struct action_gate_entry *entries;
-		} gate;
-	};
-	struct flow_action_cookie *cookie;
-};
-
-struct flow_action {
-	unsigned int num_entries;
-	struct flow_action_entry entries[0];
-};
-
-struct flow_rule {
-	struct flow_match match;
-	struct flow_action action;
-};
-
-struct dsa_chip_data {
-	struct device *host_dev;
-	int sw_addr;
-	struct device *netdev[12];
-	int eeprom_len;
-	struct device_node *of_node;
-	char *port_names[12];
-	struct device_node *port_dn[12];
-	s8 rtable[4];
-};
-
-struct dsa_platform_data {
-	struct device *netdev;
-	struct net_device *of_netdev;
-	int nr_chips;
-	struct dsa_chip_data *chip;
-};
-
-struct phylink_link_state {
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	unsigned int link: 1;
-	unsigned int an_enabled: 1;
-	unsigned int an_complete: 1;
-};
-
-enum phylink_op_type {
-	PHYLINK_NETDEV = 0,
-	PHYLINK_DEV = 1,
-};
-
-struct phylink_config {
-	struct device *dev;
-	enum phylink_op_type type;
-	bool pcs_poll;
-	bool poll_fixed_state;
-	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
-};
-
-enum devlink_port_type {
-	DEVLINK_PORT_TYPE_NOTSET = 0,
-	DEVLINK_PORT_TYPE_AUTO = 1,
-	DEVLINK_PORT_TYPE_ETH = 2,
-	DEVLINK_PORT_TYPE_IB = 3,
-};
-
-enum devlink_port_flavour {
-	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
-	DEVLINK_PORT_FLAVOUR_CPU = 1,
-	DEVLINK_PORT_FLAVOUR_DSA = 2,
-	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
-	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
-	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
-	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
-};
-
-struct devlink_port_phys_attrs {
-	u32 port_number;
-	u32 split_subport_number;
-};
-
-struct devlink_port_pci_pf_attrs {
-	u32 controller;
-	u16 pf;
-	u8 external: 1;
-};
-
-struct devlink_port_pci_vf_attrs {
-	u32 controller;
-	u16 pf;
-	u16 vf;
-	u8 external: 1;
-};
-
-struct devlink_port_attrs {
-	u8 split: 1;
-	u8 splittable: 1;
-	u32 lanes;
-	enum devlink_port_flavour flavour;
-	struct netdev_phys_item_id switch_id;
+			u8 ipcss;
+			u8 ipcso;
+			__le16 ipcse;
+		} ip_fields;
+	} lower_setup;
 	union {
-		struct devlink_port_phys_attrs phys;
-		struct devlink_port_pci_pf_attrs pci_pf;
-		struct devlink_port_pci_vf_attrs pci_vf;
-	};
-};
-
-struct devlink;
-
-struct devlink_port {
-	struct list_head list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct devlink *devlink;
-	unsigned int index;
-	bool registered;
-	spinlock_t type_lock;
-	enum devlink_port_type type;
-	enum devlink_port_type desired_type;
-	void *type_dev;
-	struct devlink_port_attrs attrs;
-	u8 attrs_set: 1;
-	u8 switch_port: 1;
-	struct delayed_work type_warn_dw;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-};
-
-struct dsa_device_ops;
-
-struct dsa_switch_tree;
-
-struct packet_type;
-
-struct dsa_switch;
-
-struct dsa_netdevice_ops;
-
-struct dsa_port {
-	union {
-		struct net_device *master;
-		struct net_device *slave;
-	};
-	const struct dsa_device_ops *tag_ops;
-	struct dsa_switch_tree *dst;
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	enum {
-		DSA_PORT_TYPE_UNUSED = 0,
-		DSA_PORT_TYPE_CPU = 1,
-		DSA_PORT_TYPE_DSA = 2,
-		DSA_PORT_TYPE_USER = 3,
-	} type;
-	struct dsa_switch *ds;
-	unsigned int index;
-	const char *name;
-	struct dsa_port *cpu_dp;
-	const char *mac;
-	struct device_node *dn;
-	unsigned int ageing_time;
-	bool vlan_filtering;
-	u8 stp_state;
-	struct net_device *bridge_dev;
-	struct devlink_port devlink_port;
-	bool devlink_port_setup;
-	struct phylink *pl;
-	struct phylink_config pl_config;
-	struct list_head list;
-	void *priv;
-	const struct ethtool_ops *orig_ethtool_ops;
-	const struct dsa_netdevice_ops *netdev_ops;
-	bool setup;
-};
-
-struct packet_type {
-	__be16 type;
-	bool ignore_outgoing;
-	struct net_device *dev;
-	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
-	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
-	bool (*id_match)(struct packet_type *, struct sock *);
-	void *af_packet_priv;
-	struct list_head list;
-};
-
-struct flow_action_cookie {
-	u32 cookie_len;
-	u8 cookie[0];
-};
-
-struct flow_stats {
-	u64 pkts;
-	u64 bytes;
-	u64 drops;
-	u64 lastused;
-	enum flow_action_hw_stats used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-enum flow_cls_command {
-	FLOW_CLS_REPLACE = 0,
-	FLOW_CLS_DESTROY = 1,
-	FLOW_CLS_STATS = 2,
-	FLOW_CLS_TMPLT_CREATE = 3,
-	FLOW_CLS_TMPLT_DESTROY = 4,
-};
-
-struct flow_cls_common_offload {
-	u32 chain_index;
-	__be16 protocol;
-	u32 prio;
-	struct netlink_ext_ack *extack;
-};
-
-struct flow_cls_offload {
-	struct flow_cls_common_offload common;
-	enum flow_cls_command command;
-	long unsigned int cookie;
-	struct flow_rule *rule;
-	struct flow_stats stats;
-	u32 classid;
-};
-
-enum devlink_sb_pool_type {
-	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
-	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
-};
-
-enum devlink_sb_threshold_type {
-	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
-	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
-};
-
-enum devlink_eswitch_encap_mode {
-	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
-	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
-};
-
-enum devlink_param_cmode {
-	DEVLINK_PARAM_CMODE_RUNTIME = 0,
-	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
-	DEVLINK_PARAM_CMODE_PERMANENT = 2,
-	__DEVLINK_PARAM_CMODE_MAX = 3,
-	DEVLINK_PARAM_CMODE_MAX = 2,
-};
-
-enum devlink_trap_action {
-	DEVLINK_TRAP_ACTION_DROP = 0,
-	DEVLINK_TRAP_ACTION_TRAP = 1,
-	DEVLINK_TRAP_ACTION_MIRROR = 2,
-};
-
-enum devlink_trap_type {
-	DEVLINK_TRAP_TYPE_DROP = 0,
-	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
-	DEVLINK_TRAP_TYPE_CONTROL = 2,
-};
-
-enum devlink_reload_action {
-	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
-	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
-	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
-	__DEVLINK_RELOAD_ACTION_MAX = 3,
-	DEVLINK_RELOAD_ACTION_MAX = 2,
-};
-
-enum devlink_reload_limit {
-	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
-	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
-	__DEVLINK_RELOAD_LIMIT_MAX = 2,
-	DEVLINK_RELOAD_LIMIT_MAX = 1,
-};
-
-enum devlink_dpipe_field_mapping_type {
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
-};
-
-struct devlink_dev_stats {
-	u32 reload_stats[6];
-	u32 remote_reload_stats[6];
-};
-
-struct devlink_dpipe_headers;
-
-struct devlink_ops;
-
-struct devlink {
-	struct list_head list;
-	struct list_head port_list;
-	struct list_head sb_list;
-	struct list_head dpipe_table_list;
-	struct list_head resource_list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-	struct devlink_dpipe_headers *dpipe_headers;
-	struct list_head trap_list;
-	struct list_head trap_group_list;
-	struct list_head trap_policer_list;
-	const struct devlink_ops *ops;
-	struct xarray snapshot_ids;
-	struct devlink_dev_stats stats;
-	struct device *dev;
-	possible_net_t _net;
-	struct mutex lock;
-	u8 reload_failed: 1;
-	u8 reload_enabled: 1;
-	u8 registered: 1;
-	long: 61;
-	long: 64;
-	char priv[0];
-};
-
-struct devlink_dpipe_header;
-
-struct devlink_dpipe_headers {
-	struct devlink_dpipe_header **headers;
-	unsigned int headers_count;
-};
-
-struct devlink_sb_pool_info;
-
-struct devlink_info_req;
-
-struct devlink_flash_update_params;
-
-struct devlink_trap;
-
-struct devlink_trap_group;
-
-struct devlink_trap_policer;
-
-struct devlink_ops {
-	u32 supported_flash_update_params;
-	long unsigned int reload_actions;
-	long unsigned int reload_limits;
-	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
-	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
-	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
-	int (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);
-	int (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);
-	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
-	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
-	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
-	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
-	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
-	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
-	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
-	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
-	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
-	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
-	int (*eswitch_mode_get)(struct devlink *, u16 *);
-	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
-	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
-	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
-	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
-	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
-	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
-	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
-	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
-	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
-	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
-	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
-	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
-	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
-	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
-	int (*port_function_hw_addr_get)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
-	int (*port_function_hw_addr_set)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
-};
-
-struct devlink_sb_pool_info {
-	enum devlink_sb_pool_type pool_type;
-	u32 size;
-	enum devlink_sb_threshold_type threshold_type;
-	u32 cell_size;
-};
-
-struct devlink_dpipe_field {
-	const char *name;
-	unsigned int id;
-	unsigned int bitwidth;
-	enum devlink_dpipe_field_mapping_type mapping_type;
-};
-
-struct devlink_dpipe_header {
-	const char *name;
-	unsigned int id;
-	struct devlink_dpipe_field *fields;
-	unsigned int fields_count;
-	bool global;
-};
-
-union devlink_param_value {
-	u8 vu8;
-	u16 vu16;
-	u32 vu32;
-	char vstr[32];
-	bool vbool;
-};
-
-struct devlink_param_gset_ctx {
-	union devlink_param_value val;
-	enum devlink_param_cmode cmode;
-};
-
-struct devlink_flash_update_params {
-	const char *file_name;
-	const char *component;
-	u32 overwrite_mask;
-};
-
-struct devlink_trap_policer {
-	u32 id;
-	u64 init_rate;
-	u64 init_burst;
-	u64 max_rate;
-	u64 min_rate;
-	u64 max_burst;
-	u64 min_burst;
-};
-
-struct devlink_trap_group {
-	const char *name;
-	u16 id;
-	bool generic;
-	u32 init_policer_id;
-};
-
-struct devlink_trap {
-	enum devlink_trap_type type;
-	enum devlink_trap_action init_action;
-	bool generic;
-	u16 id;
-	const char *name;
-	u16 init_group_id;
-	u32 metadata_cap;
-};
-
-struct switchdev_trans {
-	bool ph_prepare;
-};
-
-enum switchdev_obj_id {
-	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
-	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
-	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
-	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
-	SWITCHDEV_OBJ_ID_MRP = 4,
-	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
-	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
-	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
-	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
-	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
-	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
-};
-
-struct switchdev_obj {
-	struct net_device *orig_dev;
-	enum switchdev_obj_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
-};
-
-struct switchdev_obj_port_vlan {
-	struct switchdev_obj obj;
-	u16 flags;
-	u16 vid_begin;
-	u16 vid_end;
-};
-
-struct switchdev_obj_port_mdb {
-	struct switchdev_obj obj;
-	unsigned char addr[6];
-	u16 vid;
-};
-
-enum dsa_tag_protocol {
-	DSA_TAG_PROTO_NONE = 0,
-	DSA_TAG_PROTO_BRCM = 1,
-	DSA_TAG_PROTO_BRCM_PREPEND = 2,
-	DSA_TAG_PROTO_DSA = 3,
-	DSA_TAG_PROTO_EDSA = 4,
-	DSA_TAG_PROTO_GSWIP = 5,
-	DSA_TAG_PROTO_KSZ9477 = 6,
-	DSA_TAG_PROTO_KSZ9893 = 7,
-	DSA_TAG_PROTO_LAN9303 = 8,
-	DSA_TAG_PROTO_MTK = 9,
-	DSA_TAG_PROTO_QCA = 10,
-	DSA_TAG_PROTO_TRAILER = 11,
-	DSA_TAG_PROTO_8021Q = 12,
-	DSA_TAG_PROTO_SJA1105 = 13,
-	DSA_TAG_PROTO_KSZ8795 = 14,
-	DSA_TAG_PROTO_OCELOT = 15,
-	DSA_TAG_PROTO_AR9331 = 16,
-	DSA_TAG_PROTO_RTL4_A = 17,
-};
-
-struct dsa_device_ops {
-	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	unsigned int overhead;
-	const char *name;
-	enum dsa_tag_protocol proto;
-	bool promisc_on_master;
-	bool tail_tag;
-};
-
-struct dsa_netdevice_ops {
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-};
-
-struct dsa_switch_tree {
-	struct list_head list;
-	struct raw_notifier_head nh;
-	unsigned int index;
-	struct kref refcount;
-	bool setup;
-	struct dsa_platform_data *pd;
-	struct list_head ports;
-	struct list_head rtable;
-};
-
-struct dsa_mall_mirror_tc_entry {
-	u8 to_local_port;
-	bool ingress;
-};
-
-struct dsa_mall_policer_tc_entry {
-	u32 burst;
-	u64 rate_bytes_per_sec;
-};
-
-struct dsa_switch_ops;
-
-struct dsa_switch {
-	bool setup;
-	struct device *dev;
-	struct dsa_switch_tree *dst;
-	unsigned int index;
-	struct notifier_block nb;
-	void *priv;
-	struct dsa_chip_data *cd;
-	const struct dsa_switch_ops *ops;
-	u32 phys_mii_mask;
-	struct mii_bus *slave_mii_bus;
-	unsigned int ageing_time_min;
-	unsigned int ageing_time_max;
-	struct devlink *devlink;
-	unsigned int num_tx_queues;
-	bool vlan_filtering_is_global;
-	bool configure_vlan_while_not_filtering;
-	bool untag_bridge_pvid;
-	bool vlan_filtering;
-	bool pcs_poll;
-	bool mtu_enforcement_ingress;
-	size_t num_ports;
-};
-
-struct fixed_phy_status___2;
-
-typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
-
-struct dsa_switch_ops {
-	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
-	int (*setup)(struct dsa_switch *);
-	void (*teardown)(struct dsa_switch *);
-	u32 (*get_phy_flags)(struct dsa_switch *, int);
-	int (*phy_read)(struct dsa_switch *, int, int);
-	int (*phy_write)(struct dsa_switch *, int, int, u16);
-	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
-	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);
-	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
-	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
-	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
-	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
-	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
-	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
-	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
-	int (*get_sset_count)(struct dsa_switch *, int, int);
-	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
-	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
-	int (*suspend)(struct dsa_switch *);
-	int (*resume)(struct dsa_switch *);
-	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
-	void (*port_disable)(struct dsa_switch *, int);
-	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_eeprom_len)(struct dsa_switch *);
-	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*get_regs_len)(struct dsa_switch *, int);
-	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
-	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
-	int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
-	void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
-	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
-	void (*port_fast_age)(struct dsa_switch *, int);
-	int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
-	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);
-	int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
-	int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
-	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
-	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
-	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
-	void (*port_policer_del)(struct dsa_switch *, int);
-	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
-	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
-	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
-	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
-	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
-	bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*port_change_mtu)(struct dsa_switch *, int, int);
-	int (*port_max_mtu)(struct dsa_switch *, int);
-};
-
-struct dsa_loop_pdata {
-	struct dsa_chip_data cd;
-	const char *name;
-	unsigned int enabled_ports;
-	const char *netdev;
-};
-
-struct ptp_clock_time {
-	__s64 sec;
-	__u32 nsec;
-	__u32 reserved;
-};
-
-struct ptp_extts_request {
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-struct ptp_perout_request {
-	union {
-		struct ptp_clock_time start;
-		struct ptp_clock_time phase;
-	};
-	struct ptp_clock_time period;
-	unsigned int index;
-	unsigned int flags;
-	union {
-		struct ptp_clock_time on;
-		unsigned int rsv[4];
-	};
-};
-
-enum ptp_pin_function {
-	PTP_PF_NONE = 0,
-	PTP_PF_EXTTS = 1,
-	PTP_PF_PEROUT = 2,
-	PTP_PF_PHYSYNC = 3,
-};
-
-struct ptp_pin_desc {
-	char name[64];
-	unsigned int index;
-	unsigned int func;
-	unsigned int chan;
-	unsigned int rsv[5];
-};
-
-struct ptp_clock_request {
-	enum {
-		PTP_CLK_REQ_EXTTS = 0,
-		PTP_CLK_REQ_PEROUT = 1,
-		PTP_CLK_REQ_PPS = 2,
-	} type;
-	union {
-		struct ptp_extts_request extts;
-		struct ptp_perout_request perout;
-	};
-};
-
-struct ptp_clock_info {
-	struct module *owner;
-	char name[16];
-	s32 max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int n_pins;
-	int pps;
-	struct ptp_pin_desc *pin_config;
-	int (*adjfine)(struct ptp_clock_info *, long int);
-	int (*adjfreq)(struct ptp_clock_info *, s32);
-	int (*adjphase)(struct ptp_clock_info *, s32);
-	int (*adjtime)(struct ptp_clock_info *, s64);
-	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
-	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
-	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
-	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
-	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
-	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
-	long int (*do_aux_work)(struct ptp_clock_info *);
-};
-
-struct ptp_clock;
-
-struct cavium_ptp {
-	struct pci_dev *pdev;
-	spinlock_t spin_lock;
-	struct cyclecounter cycle_counter;
-	struct timecounter time_counter;
-	void *reg_base;
-	u32 clock_rate;
-	struct ptp_clock_info ptp_info;
-	struct ptp_clock *ptp_clock;
-};
-
-struct mlxfw_dev_ops;
-
-struct mlxfw_dev {
-	const struct mlxfw_dev_ops *ops;
-	const char *psid;
-	u16 psid_size;
-	struct devlink *devlink;
-};
-
-enum mlxfw_fsm_state {
-	MLXFW_FSM_STATE_IDLE = 0,
-	MLXFW_FSM_STATE_LOCKED = 1,
-	MLXFW_FSM_STATE_INITIALIZE = 2,
-	MLXFW_FSM_STATE_DOWNLOAD = 3,
-	MLXFW_FSM_STATE_VERIFY = 4,
-	MLXFW_FSM_STATE_APPLY = 5,
-	MLXFW_FSM_STATE_ACTIVATE = 6,
-};
-
-enum mlxfw_fsm_state_err {
-	MLXFW_FSM_STATE_ERR_OK = 0,
-	MLXFW_FSM_STATE_ERR_ERROR = 1,
-	MLXFW_FSM_STATE_ERR_REJECTED_DIGEST_ERR = 2,
-	MLXFW_FSM_STATE_ERR_REJECTED_NOT_APPLICABLE = 3,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNKNOWN_KEY = 4,
-	MLXFW_FSM_STATE_ERR_REJECTED_AUTH_FAILED = 5,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNSIGNED = 6,
-	MLXFW_FSM_STATE_ERR_REJECTED_KEY_NOT_APPLICABLE = 7,
-	MLXFW_FSM_STATE_ERR_REJECTED_BAD_FORMAT = 8,
-	MLXFW_FSM_STATE_ERR_BLOCKED_PENDING_RESET = 9,
-	MLXFW_FSM_STATE_ERR_MAX = 10,
-};
-
-struct mlxfw_dev_ops {
-	int (*component_query)(struct mlxfw_dev *, u16, u32 *, u8 *, u16 *);
-	int (*fsm_lock)(struct mlxfw_dev *, u32 *);
-	int (*fsm_component_update)(struct mlxfw_dev *, u32, u16, u32);
-	int (*fsm_block_download)(struct mlxfw_dev *, u32, u8 *, u16, u32);
-	int (*fsm_component_verify)(struct mlxfw_dev *, u32, u16);
-	int (*fsm_activate)(struct mlxfw_dev *, u32);
-	int (*fsm_reactivate)(struct mlxfw_dev *, u8 *);
-	int (*fsm_query_state)(struct mlxfw_dev *, u32, enum mlxfw_fsm_state *, enum mlxfw_fsm_state_err *);
-	void (*fsm_cancel)(struct mlxfw_dev *, u32);
-	void (*fsm_release)(struct mlxfw_dev *, u32);
-};
-
-enum mlxfw_fsm_reactivate_status {
-	MLXFW_FSM_REACTIVATE_STATUS_OK = 0,
-	MLXFW_FSM_REACTIVATE_STATUS_BUSY = 1,
-	MLXFW_FSM_REACTIVATE_STATUS_PROHIBITED_FW_VER_ERR = 2,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_COPY_FAILED = 3,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_ERASE_FAILED = 4,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_RESTORE_FAILED = 5,
-	MLXFW_FSM_REACTIVATE_STATUS_CANDIDATE_FW_DEACTIVATION_FAILED = 6,
-	MLXFW_FSM_REACTIVATE_STATUS_FW_ALREADY_ACTIVATED = 7,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_DEVICE_RESET_REQUIRED = 8,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_FW_PROGRAMMING_NEEDED = 9,
-	MLXFW_FSM_REACTIVATE_STATUS_MAX = 10,
-};
-
-struct mlxfw_mfa2_component {
-	u16 index;
-	u32 data_size;
-	u8 *data;
-};
-
-struct mlxfw_mfa2_file;
-
-struct mlxfw_mfa2_tlv;
-
-struct mlxfw_mfa2_file___2 {
-	const struct firmware *fw;
-	const struct mlxfw_mfa2_tlv *first_dev;
-	u16 dev_count;
-	const struct mlxfw_mfa2_tlv *first_component;
-	u16 component_count;
-	const void *cb;
-	u32 cb_archive_size;
-};
-
-struct mlxfw_mfa2_tlv {
-	u8 version;
-	u8 type;
-	__be16 len;
-	u8 data[0];
-};
-
-enum mlxfw_mfa2_tlv_type {
-	MLXFW_MFA2_TLV_MULTI_PART = 1,
-	MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR = 2,
-	MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR = 4,
-	MLXFW_MFA2_TLV_COMPONENT_PTR = 34,
-	MLXFW_MFA2_TLV_PSID = 42,
-};
-
-struct mlxfw_mfa2_tlv_multi {
-	__be16 num_extensions;
-	__be16 total_len;
-};
-
-struct mlxfw_mfa2_tlv_package_descriptor {
-	__be16 num_components;
-	__be16 num_devices;
-	__be32 cb_offset;
-	__be32 cb_archive_size;
-	__be32 cb_size_h;
-	__be32 cb_size_l;
-	u8 padding[3];
-	u8 cv_compression;
-	__be32 user_data_offset;
-};
-
-struct mlxfw_mfa2_tlv_psid {
-	u8 psid[0];
-};
-
-struct mlxfw_mfa2_tlv_component_ptr {
-	__be16 storage_id;
-	__be16 component_index;
-	__be32 storage_address;
-};
-
-struct mlxfw_mfa2_tlv_component_descriptor {
-	__be16 pldm_classification;
-	__be16 identifier;
-	__be32 cb_offset_h;
-	__be32 cb_offset_l;
-	__be32 size;
-};
-
-struct mlxfw_mfa2_comp_data {
-	struct mlxfw_mfa2_component comp;
-	u8 buff[0];
-};
-
-struct wl1251_platform_data {
-	int power_gpio;
-	int irq;
-	bool use_eeprom;
-};
-
-enum {
-	SKB_GSO_TCPV4 = 1,
-	SKB_GSO_DODGY = 2,
-	SKB_GSO_TCP_ECN = 4,
-	SKB_GSO_TCP_FIXEDID = 8,
-	SKB_GSO_TCPV6 = 16,
-	SKB_GSO_FCOE = 32,
-	SKB_GSO_GRE = 64,
-	SKB_GSO_GRE_CSUM = 128,
-	SKB_GSO_IPXIP4 = 256,
-	SKB_GSO_IPXIP6 = 512,
-	SKB_GSO_UDP_TUNNEL = 1024,
-	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
-	SKB_GSO_PARTIAL = 4096,
-	SKB_GSO_TUNNEL_REMCSUM = 8192,
-	SKB_GSO_SCTP = 16384,
-	SKB_GSO_ESP = 32768,
-	SKB_GSO_UDP = 65536,
-	SKB_GSO_UDP_L4 = 131072,
-	SKB_GSO_FRAGLIST = 262144,
-};
-
-enum ethtool_stringset {
-	ETH_SS_TEST = 0,
-	ETH_SS_STATS = 1,
-	ETH_SS_PRIV_FLAGS = 2,
-	ETH_SS_NTUPLE_FILTERS = 3,
-	ETH_SS_FEATURES = 4,
-	ETH_SS_RSS_HASH_FUNCS = 5,
-	ETH_SS_TUNABLES = 6,
-	ETH_SS_PHY_STATS = 7,
-	ETH_SS_PHY_TUNABLES = 8,
-	ETH_SS_LINK_MODES = 9,
-	ETH_SS_MSG_CLASSES = 10,
-	ETH_SS_WOL_MODES = 11,
-	ETH_SS_SOF_TIMESTAMPING = 12,
-	ETH_SS_TS_TX_TYPES = 13,
-	ETH_SS_TS_RX_FILTERS = 14,
-	ETH_SS_UDP_TUNNEL_TYPES = 15,
-	ETH_SS_COUNT = 16,
-};
-
-struct gro_list {
-	struct list_head list;
-	int count;
-};
-
-struct napi_struct {
-	struct list_head poll_list;
-	long unsigned int state;
-	int weight;
-	int defer_hard_irqs_count;
-	long unsigned int gro_bitmask;
-	int (*poll)(struct napi_struct *, int);
-	int poll_owner;
-	struct net_device *dev;
-	struct gro_list gro_hash[8];
-	struct sk_buff *skb;
-	struct list_head rx_list;
-	int rx_count;
-	struct hrtimer timer;
-	struct list_head dev_list;
-	struct hlist_node napi_hash_node;
-	unsigned int napi_id;
-};
-
-enum netdev_queue_state_t {
-	__QUEUE_STATE_DRV_XOFF = 0,
-	__QUEUE_STATE_STACK_XOFF = 1,
-	__QUEUE_STATE_FROZEN = 2,
-};
-
-enum skb_free_reason {
-	SKB_REASON_CONSUMED = 0,
-	SKB_REASON_DROPPED = 1,
-};
-
-struct pp_alloc_cache {
-	u32 count;
-	void *cache[128];
-};
-
-struct page_pool_params {
-	unsigned int flags;
-	unsigned int order;
-	unsigned int pool_size;
-	int nid;
-	struct device *dev;
-	enum dma_data_direction dma_dir;
-	unsigned int max_len;
-	unsigned int offset;
-};
-
-struct page_pool {
-	struct page_pool_params p;
-	struct delayed_work release_dw;
-	void (*disconnect)(void *);
-	long unsigned int defer_start;
-	long unsigned int defer_warn;
-	u32 pages_state_hold_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct pp_alloc_cache alloc;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct ptr_ring ring;
-	atomic_t pages_state_release_cnt;
-	refcount_t user_cnt;
-	u64 destroy_cnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xen_netif_tx_request {
-	grant_ref_t gref;
-	uint16_t offset;
-	uint16_t flags;
-	uint16_t id;
-	uint16_t size;
-};
-
-struct xen_netif_extra_info {
-	uint8_t type;
-	uint8_t flags;
-	union {
+		__le32 tcp_config;
 		struct {
-			uint16_t size;
-			uint8_t type;
-			uint8_t pad;
-			uint16_t features;
-		} gso;
+			u8 tucss;
+			u8 tucso;
+			__le16 tucse;
+		} tcp_fields;
+	} upper_setup;
+	__le32 cmd_and_length;
+	union {
+		__le32 data;
 		struct {
-			uint8_t addr[6];
-		} mcast;
+			u8 status;
+			u8 hdr_len;
+			__le16 mss;
+		} fields;
+	} tcp_seg_setup;
+};
+
+struct my_u {
+	__le64 a;
+	__le64 b;
+};
+
+union e1000_rx_desc_packet_split {
+	struct {
+		__le64 buffer_addr[4];
+	} read;
+	struct {
 		struct {
-			uint8_t type;
-			uint8_t algorithm;
-			uint8_t value[4];
-		} hash;
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
 		struct {
-			uint16_t headroom;
-			uint16_t pad[2];
-		} xdp;
-		uint16_t pad[3];
-	} u;
+			__le32 status_error;
+			__le16 length0;
+			__le16 vlan;
+		} middle;
+		struct {
+			__le16 header_status;
+			__le16 length[3];
+		} upper;
+		__le64 reserved;
+	} wb;
 };
 
-struct xen_netif_tx_response {
-	uint16_t id;
-	int16_t status;
+enum e1000_boards {
+	board_82571 = 0,
+	board_82572 = 1,
+	board_82573 = 2,
+	board_82574 = 3,
+	board_82583 = 4,
+	board_80003es2lan = 5,
+	board_ich8lan = 6,
+	board_ich9lan = 7,
+	board_ich10lan = 8,
+	board_pchlan = 9,
+	board_pch2lan = 10,
+	board_pch_lpt = 11,
+	board_pch_spt = 12,
+	board_pch_cnp = 13,
+	board_pch_tgp = 14,
+	board_pch_adp = 15,
+	board_pch_mtp = 16,
 };
 
-struct xen_netif_rx_request {
-	uint16_t id;
-	uint16_t pad;
-	grant_ref_t gref;
+struct trace_event_raw_e1000e_trace_mac_register {
+	struct trace_entry ent;
+	uint32_t reg;
+	char __data[0];
 };
 
-struct xen_netif_rx_response {
-	uint16_t id;
-	uint16_t offset;
-	uint16_t flags;
-	int16_t status;
-};
+struct trace_event_data_offsets_e1000e_trace_mac_register {};
 
-union xen_netif_tx_sring_entry {
-	struct xen_netif_tx_request req;
-	struct xen_netif_tx_response rsp;
-};
+typedef void (*btf_trace_e1000e_trace_mac_register)(void *, uint32_t);
 
-struct xen_netif_tx_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_netif_tx_sring_entry ring[1];
-};
-
-struct xen_netif_tx_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct xen_netif_tx_sring *sring;
-};
-
-union xen_netif_rx_sring_entry {
-	struct xen_netif_rx_request req;
-	struct xen_netif_rx_response rsp;
-};
-
-struct xen_netif_rx_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_netif_rx_sring_entry ring[1];
-};
-
-struct xen_netif_rx_front_ring {
-	RING_IDX req_prod_pvt;
-	RING_IDX rsp_cons;
-	unsigned int nr_ents;
-	struct xen_netif_rx_sring *sring;
-};
-
-struct netfront_cb {
-	int pull_to;
-};
-
-struct netfront_stats {
-	u64 packets;
-	u64 bytes;
-	struct u64_stats_sync syncp;
-};
-
-union skb_entry {
-	struct sk_buff *skb;
-	long unsigned int link;
-};
-
-struct netfront_info;
-
-struct netfront_queue {
-	unsigned int id;
-	char name[22];
-	struct netfront_info *info;
-	struct bpf_prog *xdp_prog;
-	struct napi_struct napi;
-	unsigned int tx_evtchn;
-	unsigned int rx_evtchn;
-	unsigned int tx_irq;
-	unsigned int rx_irq;
-	char tx_irq_name[25];
-	char rx_irq_name[25];
-	spinlock_t tx_lock;
-	struct xen_netif_tx_front_ring tx;
-	int tx_ring_ref;
-	union skb_entry tx_skbs[256];
-	grant_ref_t gref_tx_head;
-	grant_ref_t grant_tx_ref[256];
-	struct page *grant_tx_page[256];
-	unsigned int tx_skb_freelist;
-	long: 32;
-	long: 64;
-	long: 64;
-	spinlock_t rx_lock;
-	struct xen_netif_rx_front_ring rx;
-	int rx_ring_ref;
-	struct timer_list rx_refill_timer;
-	struct sk_buff *rx_skbs[256];
-	grant_ref_t gref_rx_head;
-	grant_ref_t grant_rx_ref[256];
-	struct page_pool *page_pool;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-};
-
-struct netfront_info {
-	struct list_head list;
-	struct net_device *netdev;
-	struct xenbus_device *xbdev;
-	struct netfront_queue *queues;
-	struct netfront_stats *rx_stats;
-	struct netfront_stats *tx_stats;
-	bool netback_has_xdp_headroom;
-	bool netfront_xdp_enabled;
-	atomic_t rx_gso_checksum_fixup;
-};
-
-struct netfront_rx_info {
-	struct xen_netif_rx_response rx;
-	struct xen_netif_extra_info extras[5];
-};
-
-struct xennet_gnttab_make_txreq {
-	struct netfront_queue *queue;
-	struct sk_buff *skb;
-	struct page *page;
-	struct xen_netif_tx_request *tx;
-	unsigned int size;
-};
-
-struct xennet_stat {
-	char name[32];
-	u16 offset;
-};
-
-enum usb_otg_state {
-	OTG_STATE_UNDEFINED = 0,
-	OTG_STATE_B_IDLE = 1,
-	OTG_STATE_B_SRP_INIT = 2,
-	OTG_STATE_B_PERIPHERAL = 3,
-	OTG_STATE_B_WAIT_ACON = 4,
-	OTG_STATE_B_HOST = 5,
-	OTG_STATE_A_IDLE = 6,
-	OTG_STATE_A_WAIT_VRISE = 7,
-	OTG_STATE_A_WAIT_BCON = 8,
-	OTG_STATE_A_HOST = 9,
-	OTG_STATE_A_SUSPEND = 10,
-	OTG_STATE_A_PERIPHERAL = 11,
-	OTG_STATE_A_WAIT_VFALL = 12,
-	OTG_STATE_A_VBUS_ERR = 13,
-};
-
-struct usb_otg_caps {
-	u16 otg_rev;
-	bool hnp_support;
-	bool srp_support;
-	bool adp_support;
-};
-
-struct extcon_dev;
-
-enum usb_charger_type {
-	UNKNOWN_TYPE = 0,
-	SDP_TYPE = 1,
-	DCP_TYPE = 2,
-	CDP_TYPE = 3,
-	ACA_TYPE = 4,
-};
-
-enum usb_charger_state {
-	USB_CHARGER_DEFAULT = 0,
-	USB_CHARGER_PRESENT = 1,
-	USB_CHARGER_ABSENT = 2,
-};
-
-enum usb_phy_events {
-	USB_EVENT_NONE = 0,
-	USB_EVENT_VBUS = 1,
-	USB_EVENT_ID = 2,
-	USB_EVENT_CHARGER = 3,
-	USB_EVENT_ENUMERATED = 4,
-};
-
-enum usb_phy_type {
-	USB_PHY_TYPE_UNDEFINED = 0,
-	USB_PHY_TYPE_USB2 = 1,
-	USB_PHY_TYPE_USB3 = 2,
-};
-
-struct usb_phy___2;
-
-struct usb_phy_io_ops {
-	int (*read)(struct usb_phy___2 *, u32);
-	int (*write)(struct usb_phy___2 *, u32, u32);
-};
-
-struct usb_charger_current {
-	unsigned int sdp_min;
-	unsigned int sdp_max;
-	unsigned int dcp_min;
-	unsigned int dcp_max;
-	unsigned int cdp_min;
-	unsigned int cdp_max;
-	unsigned int aca_min;
-	unsigned int aca_max;
-};
-
-struct usb_otg;
-
-struct usb_phy___2 {
-	struct device *dev;
-	const char *label;
-	unsigned int flags;
-	enum usb_phy_type type;
-	enum usb_phy_events last_event;
-	struct usb_otg *otg;
-	struct device *io_dev;
-	struct usb_phy_io_ops *io_ops;
-	void *io_priv;
-	struct extcon_dev *edev;
-	struct extcon_dev *id_edev;
-	struct notifier_block vbus_nb;
-	struct notifier_block id_nb;
-	struct notifier_block type_nb;
-	enum usb_charger_type chg_type;
-	enum usb_charger_state chg_state;
-	struct usb_charger_current chg_cur;
-	struct work_struct chg_work;
-	struct atomic_notifier_head notifier;
-	u16 port_status;
-	u16 port_change;
-	struct list_head head;
-	int (*init)(struct usb_phy___2 *);
-	void (*shutdown)(struct usb_phy___2 *);
-	int (*set_vbus)(struct usb_phy___2 *, int);
-	int (*set_power)(struct usb_phy___2 *, unsigned int);
-	int (*set_suspend)(struct usb_phy___2 *, int);
-	int (*set_wakeup)(struct usb_phy___2 *, bool);
-	int (*notify_connect)(struct usb_phy___2 *, enum usb_device_speed);
-	int (*notify_disconnect)(struct usb_phy___2 *, enum usb_device_speed);
-	enum usb_charger_type (*charger_detect)(struct usb_phy___2 *);
-};
-
-struct phy_devm {
-	struct usb_phy___2 *phy;
-	struct notifier_block *nb;
-};
-
-enum usb_phy_interface {
-	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
-	USBPHY_INTERFACE_MODE_UTMI = 1,
-	USBPHY_INTERFACE_MODE_UTMIW = 2,
-	USBPHY_INTERFACE_MODE_ULPI = 3,
-	USBPHY_INTERFACE_MODE_SERIAL = 4,
-	USBPHY_INTERFACE_MODE_HSIC = 5,
-};
-
-struct usb_gadget;
-
-struct usb_otg {
-	u8 default_a;
-	struct phy *phy;
-	struct usb_phy___2 *usb_phy;
-	struct usb_bus *host;
-	struct usb_gadget *gadget;
-	enum usb_otg_state state;
-	int (*set_host)(struct usb_otg *, struct usb_bus *);
-	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
-	int (*set_vbus)(struct usb_otg *, bool);
-	int (*start_srp)(struct usb_otg *);
-	int (*start_hnp)(struct usb_otg *);
-};
-
-struct ulpi_info {
-	unsigned int id;
+struct e1000_reg_info {
+	u32 ofs;
 	char *name;
 };
 
-enum amd_chipset_gen {
-	NOT_AMD_CHIPSET = 0,
-	AMD_CHIPSET_SB600 = 1,
-	AMD_CHIPSET_SB700 = 2,
-	AMD_CHIPSET_SB800 = 3,
-	AMD_CHIPSET_HUDSON2 = 4,
-	AMD_CHIPSET_BOLTON = 5,
-	AMD_CHIPSET_YANGTZE = 6,
-	AMD_CHIPSET_TAISHAN = 7,
-	AMD_CHIPSET_UNKNOWN = 8,
+struct my_u1 {
+	__le64 a;
+	__le64 b;
+	__le64 c;
+	__le64 d;
 };
 
-struct amd_chipset_type {
-	enum amd_chipset_gen gen;
-	u8 rev;
+enum macvlan_mode {
+	MACVLAN_MODE_PRIVATE = 1,
+	MACVLAN_MODE_VEPA = 2,
+	MACVLAN_MODE_BRIDGE = 4,
+	MACVLAN_MODE_PASSTHRU = 8,
+	MACVLAN_MODE_SOURCE = 16,
 };
 
-struct amd_chipset_info {
-	struct pci_dev *nb_dev;
-	struct pci_dev *smbus_dev;
-	int nb_type;
-	struct amd_chipset_type sb_type;
-	int isoc_reqs;
-	int probe_count;
-	bool need_pll_quirk;
+enum {
+	TC_MQPRIO_HW_OFFLOAD_NONE = 0,
+	TC_MQPRIO_HW_OFFLOAD_TCS = 1,
+	__TC_MQPRIO_HW_OFFLOAD_MAX = 2,
 };
 
-struct serio_device_id {
-	__u8 type;
-	__u8 extra;
-	__u8 id;
-	__u8 proto;
+struct tc_mqprio_qopt {
+	__u8 num_tc;
+	__u8 prio_tc_map[16];
+	__u8 hw;
+	__u16 count[16];
+	__u16 offset[16];
 };
 
-struct serio_driver;
+struct netpoll;
 
-struct serio {
-	void *port_data;
-	char name[32];
-	char phys[32];
-	char firmware_id[128];
-	bool manual_bind;
-	struct serio_device_id id;
-	spinlock_t lock;
-	int (*write)(struct serio *, unsigned char);
-	int (*open)(struct serio *);
-	void (*close)(struct serio *);
-	int (*start)(struct serio *);
-	void (*stop)(struct serio *);
-	struct serio *parent;
-	struct list_head child_node;
-	struct list_head children;
-	unsigned int depth;
-	struct serio_driver *drv;
-	struct mutex drv_mutex;
-	struct device dev;
-	struct list_head node;
-	struct mutex *ps2_cmd_mutex;
+struct macvlan_port;
+
+struct macvlan_dev {
+	struct net_device *dev;
+	struct list_head list;
+	struct hlist_node hlist;
+	struct macvlan_port *port;
+	struct net_device *lowerdev;
+	netdevice_tracker dev_tracker;
+	void *accel_priv;
+	struct vlan_pcpu_stats *pcpu_stats;
+	long unsigned int mc_filter[4];
+	netdev_features_t set_features;
+	enum macvlan_mode mode;
+	u16 flags;
+	unsigned int macaddr_count;
+	u32 bc_queue_len_req;
+	struct netpoll *netpoll;
 };
 
-struct serio_driver {
-	const char *description;
-	const struct serio_device_id *id_table;
-	bool manual_bind;
-	void (*write_wakeup)(struct serio *);
-	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
-	int (*connect)(struct serio *, struct serio_driver *);
-	int (*reconnect)(struct serio *);
-	int (*fast_reconnect)(struct serio *);
-	void (*disconnect)(struct serio *);
-	void (*cleanup)(struct serio *);
-	struct device_driver driver;
+struct tcf_mirred {
+	struct tc_action common;
+	int tcfm_eaction;
+	bool tcfm_mac_header_xmit;
+	struct net_device *tcfm_dev;
+	netdevice_tracker tcfm_dev_tracker;
+	struct list_head tcfm_list;
 };
 
-enum serio_event_type {
-	SERIO_RESCAN_PORT = 0,
-	SERIO_RECONNECT_PORT = 1,
-	SERIO_RECONNECT_SUBTREE = 2,
-	SERIO_REGISTER_PORT = 3,
-	SERIO_ATTACH_DRIVER = 4,
+enum ixgbe_fdir_pballoc_type {
+	IXGBE_FDIR_PBALLOC_NONE = 0,
+	IXGBE_FDIR_PBALLOC_64K = 1,
+	IXGBE_FDIR_PBALLOC_128K = 2,
+	IXGBE_FDIR_PBALLOC_256K = 3,
 };
 
-struct serio_event {
-	enum serio_event_type type;
-	void *object;
-	struct module *owner;
-	struct list_head node;
+struct ixgbe_ipsec_tx_data {
+	u32 flags;
+	u16 trailer_len;
+	u16 sa_idx;
 };
 
-struct amba_kmi_port {
-	struct serio *io;
-	struct clk *clk;
-	void *base;
-	unsigned int irq;
-	unsigned int divisor;
-	unsigned int open;
+struct ixgbe_fwd_adapter {
+	long unsigned int active_vlans[64];
+	struct net_device *netdev;
+	unsigned int tx_base_queue;
+	unsigned int rx_base_queue;
+	int pool;
 };
 
-struct ps2dev {
-	struct serio *serio;
-	struct mutex cmd_mutex;
-	wait_queue_head_t wait;
-	long unsigned int flags;
-	u8 cmdbuf[8];
-	u8 cmdcnt;
-	u8 nak;
+struct ixgbe_mat_field;
+
+struct ixgbe_jump_table {
+	struct ixgbe_mat_field *mat;
+	struct ixgbe_fdir_filter *input;
+	union ixgbe_atr_input *mask;
+	u32 link_hdl;
+	long unsigned int child_loc_map[32];
 };
 
-struct input_mt_slot {
-	int abs[14];
-	unsigned int frame;
-	unsigned int key;
-};
-
-struct input_mt {
-	int trkid;
-	int num_slots;
-	int slot;
-	unsigned int flags;
-	unsigned int frame;
-	int *red;
-	struct input_mt_slot slots[0];
-};
-
-union input_seq_state {
-	struct {
-		short unsigned int pos;
-		bool mutex_acquired;
-	};
-	void *p;
-};
-
-struct input_devres {
-	struct input_dev *input;
-};
-
-struct input_event {
-	__kernel_ulong_t __sec;
-	__kernel_ulong_t __usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct input_event_compat {
-	compat_ulong_t sec;
-	compat_ulong_t usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct ff_periodic_effect_compat {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	compat_uptr_t custom_data;
-};
-
-struct ff_effect_compat {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
+struct ixgbe_cb {
 	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect_compat periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	};
+	dma_addr_t dma;
+	u16 append_cnt;
+	bool page_released;
 };
 
-struct input_mt_pos {
-	s16 x;
-	s16 y;
+enum ixgbe_boards {
+	board_82598 = 0,
+	board_82599 = 1,
+	board_X540 = 2,
+	board_X550 = 3,
+	board_X550EM_x = 4,
+	board_x550em_x_fw = 5,
+	board_x550em_a = 6,
+	board_x550em_a_fw = 7,
 };
 
-struct input_dev_poller {
-	void (*poll)(struct input_dev *);
-	unsigned int poll_interval;
-	unsigned int poll_interval_max;
-	unsigned int poll_interval_min;
-	struct input_dev *input;
-	struct delayed_work work;
+struct ixgbe_mat_field {
+	unsigned int off;
+	int (*val)(struct ixgbe_fdir_filter *, union ixgbe_atr_input *, u32, u32);
+	unsigned int type;
 };
 
-struct mousedev_hw_data {
-	int dx;
-	int dy;
-	int dz;
+struct ixgbe_nexthdr {
+	unsigned int o;
+	u32 s;
+	u32 m;
+	unsigned int off;
+	u32 val;
+	u32 mask;
+	struct ixgbe_mat_field *jump;
+};
+
+struct ixgbe_reg_info {
+	u32 ofs;
+	char *name;
+};
+
+struct upper_walk_data {
+	struct ixgbe_adapter *adapter;
+	u64 action;
+	int ifindex;
+	u8 queue;
+};
+
+struct my_u0___2 {
+	u64 a;
+	u64 b;
+};
+
+typedef enum {
+	ixgb_xpak_vendor_intel = 0,
+	ixgb_xpak_vendor_infineon = 1,
+} ixgb_xpak_vendor;
+
+enum stmmac_fpe_task_state_t {
+	__FPE_REMOVING = 0,
+	__FPE_TASK_SCHED = 1,
+};
+
+enum request_irq_err {
+	REQ_IRQ_ERR_ALL = 0,
+	REQ_IRQ_ERR_TX = 1,
+	REQ_IRQ_ERR_RX = 2,
+	REQ_IRQ_ERR_SFTY_UE = 3,
+	REQ_IRQ_ERR_SFTY_CE = 4,
+	REQ_IRQ_ERR_LPI = 5,
+	REQ_IRQ_ERR_WOL = 6,
+	REQ_IRQ_ERR_MAC = 7,
+	REQ_IRQ_ERR_NO = 8,
+};
+
+enum stmmac_state {
+	STMMAC_DOWN = 0,
+	STMMAC_RESET_REQUESTED = 1,
+	STMMAC_RESETING = 2,
+	STMMAC_SERVICE_SCHED = 3,
+};
+
+enum ttc_control___2 {
+	DMA_CONTROL_TTC_64___2 = 0,
+	DMA_CONTROL_TTC_128___2 = 16384,
+	DMA_CONTROL_TTC_192 = 32768,
+	DMA_CONTROL_TTC_256___2 = 49152,
+	DMA_CONTROL_TTC_40___2 = 65536,
+	DMA_CONTROL_TTC_32___2 = 81920,
+	DMA_CONTROL_TTC_24___2 = 98304,
+	DMA_CONTROL_TTC_16 = 114688,
+};
+
+enum rtc_control {
+	DMA_CONTROL_RTC_64 = 0,
+	DMA_CONTROL_RTC_32 = 8,
+	DMA_CONTROL_RTC_96 = 16,
+	DMA_CONTROL_RTC_128 = 24,
+};
+
+struct dwmac5_error_desc {
+	bool valid;
+	const char *desc;
+	const char *detailed_desc;
+};
+
+struct dwmac5_error {
+	const struct dwmac5_error_desc *desc;
+};
+
+struct dwxgmac3_error_desc {
+	bool valid;
+	const char *desc;
+	const char *detailed_desc;
+};
+
+struct dwxgmac3_error {
+	const struct dwxgmac3_error_desc *desc;
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+struct uhci_td;
+
+struct uhci_qh {
+	__le32 link;
+	__le32 element;
+	dma_addr_t dma_handle;
+	struct list_head node;
+	struct usb_host_endpoint *hep;
+	struct usb_device *udev;
+	struct list_head queue;
+	struct uhci_td *dummy_td;
+	struct uhci_td *post_td;
+	struct usb_iso_packet_descriptor *iso_packet_desc;
+	long unsigned int advance_jiffies;
+	unsigned int unlink_frame;
+	unsigned int period;
+	short int phase;
+	short int load;
+	unsigned int iso_frame;
+	int state;
+	int type;
+	int skel;
+	unsigned int initial_toggle: 1;
+	unsigned int needs_fixup: 1;
+	unsigned int is_stopped: 1;
+	unsigned int wait_expired: 1;
+	unsigned int bandwidth_reserved: 1;
+};
+
+struct uhci_td {
+	__le32 link;
+	__le32 status;
+	__le32 token;
+	__le32 buffer;
+	dma_addr_t dma_handle;
+	struct list_head list;
+	int frame;
+	struct list_head fl_list;
+};
+
+enum uhci_rh_state {
+	UHCI_RH_RESET = 0,
+	UHCI_RH_SUSPENDED = 1,
+	UHCI_RH_AUTO_STOPPED = 2,
+	UHCI_RH_RESUMING = 3,
+	UHCI_RH_SUSPENDING = 4,
+	UHCI_RH_RUNNING = 5,
+	UHCI_RH_RUNNING_NODEVS = 6,
+};
+
+struct uhci_hcd {
+	long unsigned int io_addr;
+	void *regs;
+	struct dma_pool *qh_pool;
+	struct dma_pool *td_pool;
+	struct uhci_td *term_td;
+	struct uhci_qh *skelqh[11];
+	struct uhci_qh *next_qh;
+	spinlock_t lock;
+	dma_addr_t frame_dma_handle;
+	__le32 *frame;
+	void **frame_cpu;
+	enum uhci_rh_state rh_state;
+	long unsigned int auto_stop_time;
+	unsigned int frame_number;
+	unsigned int is_stopped;
+	unsigned int last_iso_frame;
+	unsigned int cur_iso_frame;
+	unsigned int scan_in_progress: 1;
+	unsigned int need_rescan: 1;
+	unsigned int dead: 1;
+	unsigned int RD_enable: 1;
+	unsigned int is_initialized: 1;
+	unsigned int fsbr_is_on: 1;
+	unsigned int fsbr_is_wanted: 1;
+	unsigned int fsbr_expiring: 1;
+	struct timer_list fsbr_timer;
+	unsigned int oc_low: 1;
+	unsigned int wait_for_hp: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int is_aspeed: 1;
+	long unsigned int port_c_suspend;
+	long unsigned int resuming_ports;
+	long unsigned int ports_timeout;
+	struct list_head idle_qh_list;
+	int rh_numports;
+	wait_queue_head_t waitqh;
+	int num_waiting;
+	int total_load;
+	short int load[32];
+	struct clk *clk;
+	void (*reset_hc)(struct uhci_hcd *);
+	int (*check_and_reset_hc)(struct uhci_hcd *);
+	void (*configure_hc)(struct uhci_hcd *);
+	int (*resume_detect_interrupts_are_broken)(struct uhci_hcd *);
+	int (*global_suspend_mode_is_broken)(struct uhci_hcd *);
+};
+
+struct urb_priv___3 {
+	struct list_head node;
+	struct urb *urb;
+	struct uhci_qh *qh;
+	struct list_head td_list;
+	unsigned int fsbr: 1;
+};
+
+struct uhci_debug {
+	int size;
+	char *data;
+};
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+struct input_led {
+	struct led_classdev cdev;
+	struct input_handle *handle;
+	unsigned int code;
+};
+
+struct input_leds {
+	struct input_handle handle;
+	unsigned int num_leds;
+	struct input_led leds[0];
+};
+
+struct focaltech_finger_state {
+	bool active;
+	bool valid;
+	unsigned int x;
+	unsigned int y;
+};
+
+struct focaltech_hw_state {
+	struct focaltech_finger_state fingers[5];
+	unsigned int width;
+	bool pressed;
+};
+
+struct focaltech_data {
+	unsigned int x_max;
+	unsigned int y_max;
+	struct focaltech_hw_state state;
+};
+
+struct finger_pos {
+	unsigned int x;
+	unsigned int y;
+};
+
+struct elantech_device_info {
+	unsigned char capabilities[3];
+	unsigned char samples[3];
+	unsigned char debug;
+	unsigned char hw_version;
+	unsigned char pattern;
+	unsigned int fw_version;
+	unsigned int ic_version;
+	unsigned int product_id;
+	unsigned int x_min;
+	unsigned int y_min;
+	unsigned int x_max;
+	unsigned int y_max;
+	unsigned int x_res;
+	unsigned int y_res;
+	unsigned int x_traces;
+	unsigned int y_traces;
+	unsigned int width;
+	unsigned int bus;
+	bool paritycheck;
+	bool jumpy_cursor;
+	bool reports_pressure;
+	bool crc_enabled;
+	bool set_hw_resolution;
+	bool has_trackpoint;
+	bool has_middle_button;
+	int (*send_cmd)(struct psmouse *, unsigned char, unsigned char *);
+};
+
+struct elantech_data {
+	struct input_dev *tp_dev;
+	char tp_phys[32];
+	unsigned char reg_07;
+	unsigned char reg_10;
+	unsigned char reg_11;
+	unsigned char reg_20;
+	unsigned char reg_21;
+	unsigned char reg_22;
+	unsigned char reg_23;
+	unsigned char reg_24;
+	unsigned char reg_25;
+	unsigned char reg_26;
+	unsigned int single_finger_reports;
+	unsigned int y_max;
+	unsigned int width;
+	struct finger_pos mt[5];
+	unsigned char parity[256];
+	struct elantech_device_info info;
+	void (*original_set_rate)(struct psmouse *, unsigned int);
+};
+
+struct elantech_attr_data {
+	size_t field_offset;
+	unsigned char reg;
+};
+
+enum {
+	ELANTECH_SMBUS_NOT_SET = -1,
+	ELANTECH_SMBUS_OFF = 0,
+	ELANTECH_SMBUS_ON = 1,
+};
+
+struct cytp_contact {
 	int x;
 	int y;
-	int abs_event;
-	long unsigned int buttons;
+	int z;
 };
 
-struct mousedev {
-	int open;
-	struct input_handle handle;
-	wait_queue_head_t wait;
-	struct list_head client_list;
-	spinlock_t client_lock;
-	struct mutex mutex;
-	struct device dev;
-	struct cdev cdev;
-	bool exist;
-	struct list_head mixdev_node;
-	bool opened_by_mixdev;
-	struct mousedev_hw_data packet;
-	unsigned int pkt_count;
-	int old_x[4];
-	int old_y[4];
-	int frac_dx;
-	int frac_dy;
-	long unsigned int touch;
-	int (*open_device)(struct mousedev *);
-	void (*close_device)(struct mousedev *);
+struct cytp_report_data {
+	int contact_cnt;
+	struct cytp_contact contacts[2];
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int tap: 1;
 };
 
-enum mousedev_emul {
-	MOUSEDEV_EMUL_PS2 = 0,
-	MOUSEDEV_EMUL_IMPS = 1,
-	MOUSEDEV_EMUL_EXPS = 2,
+struct cytp_data {
+	int fw_version;
+	int pkt_size;
+	int mode;
+	int tp_min_pressure;
+	int tp_max_pressure;
+	int tp_width;
+	int tp_high;
+	int tp_max_abs_x;
+	int tp_max_abs_y;
+	int tp_res_x;
+	int tp_res_y;
+	int tp_metrics_supported;
 };
 
-struct mousedev_motion {
-	int dx;
-	int dy;
-	int dz;
-	long unsigned int buttons;
-};
-
-struct mousedev_client {
-	struct fasync_struct *fasync;
-	struct mousedev *mousedev;
-	struct list_head node;
-	struct mousedev_motion packets[16];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t packet_lock;
-	int pos_x;
-	int pos_y;
-	u8 ps2[6];
-	unsigned char ready;
-	unsigned char buffer;
-	unsigned char bufsiz;
-	unsigned char imexseq;
-	unsigned char impsseq;
-	enum mousedev_emul mode;
-	long unsigned int last_buttons;
-};
-
-enum {
-	FRACTION_DENOM = 128,
-};
-
-struct atkbd {
-	struct ps2dev ps2dev;
-	struct input_dev *dev;
-	char name[64];
-	char phys[32];
-	short unsigned int id;
-	short unsigned int keycode[512];
-	long unsigned int force_release_mask[8];
-	unsigned char set;
-	bool translated;
-	bool extra;
-	bool write;
-	bool softrepeat;
-	bool softraw;
-	bool scroll;
-	bool enabled;
-	unsigned char emul;
-	bool resend;
-	bool release;
-	long unsigned int xl_bit;
-	unsigned int last;
-	long unsigned int time;
-	long unsigned int err_count;
-	struct delayed_work event_work;
-	long unsigned int event_jiffies;
-	long unsigned int event_mask;
-	struct mutex mutex;
-	u32 function_row_physmap[24];
-	int num_function_row_keys;
-};
-
-struct touchscreen_properties {
-	unsigned int max_x;
-	unsigned int max_y;
-	bool invert_x;
-	bool invert_y;
-	bool swap_x_y;
-};
-
-struct xenkbd_motion {
-	uint8_t type;
-	int32_t rel_x;
-	int32_t rel_y;
-	int32_t rel_z;
-};
-
-struct xenkbd_key {
-	uint8_t type;
-	uint8_t pressed;
-	uint32_t keycode;
-};
-
-struct xenkbd_position {
-	uint8_t type;
-	int32_t abs_x;
-	int32_t abs_y;
-	int32_t rel_z;
-};
-
-struct xenkbd_mtouch {
-	uint8_t type;
-	uint8_t event_type;
-	uint8_t contact_id;
-	uint8_t reserved[5];
-	union {
-		struct {
-			int32_t abs_x;
-			int32_t abs_y;
-		} pos;
-		struct {
-			uint32_t major;
-			uint32_t minor;
-		} shape;
-		int16_t orientation;
-	} u;
-};
-
-union xenkbd_in_event {
-	uint8_t type;
-	struct xenkbd_motion motion;
-	struct xenkbd_key key;
-	struct xenkbd_position pos;
-	struct xenkbd_mtouch mtouch;
-	char pad[40];
-};
-
-struct xenkbd_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-};
-
-struct xenkbd_info {
-	struct input_dev *kbd;
-	struct input_dev *ptr;
-	struct input_dev *mtouch;
-	struct xenkbd_page *page;
-	int gref;
-	int irq;
-	struct xenbus_device *xbdev;
-	char phys[32];
-	int mtouch_cur_contact_id;
-};
-
-enum {
-	KPARAM_X = 0,
-	KPARAM_Y = 1,
-	KPARAM_CNT___2 = 2,
-};
-
-struct trace_event_raw_rtc_time_alarm_class {
-	struct trace_entry ent;
-	time64_t secs;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_freq {
-	struct trace_entry ent;
-	int freq;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_state {
-	struct trace_entry ent;
-	int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_alarm_irq_enable {
-	struct trace_entry ent;
-	unsigned int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_offset_class {
-	struct trace_entry ent;
-	long int offset;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_timer_class {
-	struct trace_entry ent;
-	struct rtc_timer *timer;
-	ktime_t expires;
-	ktime_t period;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rtc_time_alarm_class {};
-
-struct trace_event_data_offsets_rtc_irq_set_freq {};
-
-struct trace_event_data_offsets_rtc_irq_set_state {};
-
-struct trace_event_data_offsets_rtc_alarm_irq_enable {};
-
-struct trace_event_data_offsets_rtc_offset_class {};
-
-struct trace_event_data_offsets_rtc_timer_class {};
-
-typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
-
-typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
-
-typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
-
-typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
-
-enum {
-	none = 0,
-	day = 1,
-	month = 2,
-	year = 3,
-};
-
-struct pl031_vendor_data {
-	struct rtc_class_ops ops;
-	bool clockwatch;
-	bool st_weekday;
-	long unsigned int irqflags;
-	time64_t range_min;
-	timeu64_t range_max;
-};
-
-struct pl031_local {
-	struct pl031_vendor_data *vendor;
-	struct rtc_device *rtc;
-	void *base;
-};
-
-struct sun6i_rtc_clk_data {
-	long unsigned int rc_osc_rate;
-	unsigned int fixed_prescaler: 16;
-	unsigned int has_prescaler: 1;
-	unsigned int has_out_clk: 1;
-	unsigned int export_iosc: 1;
-	unsigned int has_losc_en: 1;
-	unsigned int has_auto_swt: 1;
-};
-
-struct sun6i_rtc_dev {
-	struct rtc_device *rtc;
-	const struct sun6i_rtc_clk_data *data;
-	void *base;
-	int irq;
-	long unsigned int alarm;
-	struct clk_hw hw;
-	struct clk_hw *int_osc;
-	struct clk *losc;
-	struct clk *ext_losc;
-	spinlock_t lock;
-};
-
-struct xgene_rtc_dev {
-	struct rtc_device *rtc;
-	void *csr_base;
-	struct clk *clk;
-	unsigned int irq_wake;
-	unsigned int irq_enabled;
-};
-
-struct i2c_board_info {
-	char type[20];
-	short unsigned int flags;
-	short unsigned int addr;
-	const char *dev_name;
-	void *platform_data;
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	const struct property_entry *properties;
-	const struct resource *resources;
-	unsigned int num_resources;
-	int irq;
-};
-
-struct i2c_devinfo {
-	struct list_head list;
-	int busnum;
-	struct i2c_board_info board_info;
-};
-
-struct i2c_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-struct i2c_device_identity {
-	u16 manufacturer_id;
-	u16 part_id;
-	u8 die_revision;
-};
-
-enum i2c_alert_protocol {
-	I2C_PROTOCOL_SMBUS_ALERT = 0,
-	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
-};
-
-struct i2c_driver {
-	unsigned int class;
-	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-	int (*remove)(struct i2c_client *);
-	int (*probe_new)(struct i2c_client *);
-	void (*shutdown)(struct i2c_client *);
-	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
-	int (*command)(struct i2c_client *, unsigned int, void *);
-	struct device_driver driver;
-	const struct i2c_device_id *id_table;
-	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-	const short unsigned int *address_list;
-	struct list_head clients;
-};
-
-struct i2c_timings {
-	u32 bus_freq_hz;
-	u32 scl_rise_ns;
-	u32 scl_fall_ns;
-	u32 scl_int_delay_ns;
-	u32 sda_fall_ns;
-	u32 sda_hold_ns;
-	u32 digital_filter_width_ns;
-	u32 analog_filter_cutoff_freq_hz;
-};
-
-struct trace_event_raw_i2c_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 nr_msgs;
-	__s16 ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_i2c_write {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_read {};
-
-struct trace_event_data_offsets_i2c_reply {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_result {};
-
-typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
-
-struct i2c_dummy_devres {
-	struct i2c_client *client;
-};
-
-struct class_compat___2;
-
-struct i2c_cmd_arg {
-	unsigned int cmd;
-	void *arg;
-};
+struct nvmem_device;
 
 struct i2c_smbus_alert_setup {
 	int irq;
@@ -89801,150 +116013,6 @@
 
 typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
 
-struct i2c_acpi_handler_data {
-	struct acpi_connection_info info;
-	struct i2c_adapter *adapter;
-};
-
-struct gsb_buffer {
-	u8 status;
-	u8 len;
-	union {
-		u16 wdata;
-		u8 bdata;
-		u8 data[0];
-	};
-};
-
-struct i2c_acpi_lookup {
-	struct i2c_board_info *info;
-	acpi_handle adapter_handle;
-	acpi_handle device_handle;
-	acpi_handle search_handle;
-	int n;
-	int index;
-	u32 speed;
-	u32 min_speed;
-	u32 force_speed;
-};
-
-struct dw_i2c_dev {
-	struct device *dev;
-	struct regmap *map;
-	struct regmap *sysmap;
-	void *base;
-	void *ext;
-	struct completion cmd_complete;
-	struct clk *clk;
-	struct clk *pclk;
-	struct reset_control *rst;
-	struct i2c_client *slave;
-	u32 (*get_clk_rate_khz)(struct dw_i2c_dev *);
-	int cmd_err;
-	struct i2c_msg *msgs;
-	int msgs_num;
-	int msg_write_idx;
-	u32 tx_buf_len;
-	u8 *tx_buf;
-	int msg_read_idx;
-	u32 rx_buf_len;
-	u8 *rx_buf;
-	int msg_err;
-	unsigned int status;
-	u32 abort_source;
-	int irq;
-	u32 flags;
-	struct i2c_adapter adapter;
-	u32 functionality;
-	u32 master_cfg;
-	u32 slave_cfg;
-	unsigned int tx_fifo_depth;
-	unsigned int rx_fifo_depth;
-	int rx_outstanding;
-	struct i2c_timings timings;
-	u32 sda_hold_time;
-	u16 ss_hcnt;
-	u16 ss_lcnt;
-	u16 fs_hcnt;
-	u16 fs_lcnt;
-	u16 fp_hcnt;
-	u16 fp_lcnt;
-	u16 hs_hcnt;
-	u16 hs_lcnt;
-	int (*acquire_lock)();
-	void (*release_lock)();
-	bool shared_with_punit;
-	void (*disable)(struct dw_i2c_dev *);
-	void (*disable_int)(struct dw_i2c_dev *);
-	int (*init)(struct dw_i2c_dev *);
-	int (*set_sda_hold_time)(struct dw_i2c_dev *);
-	int mode;
-	struct i2c_bus_recovery_info rinfo;
-	bool suspended;
-};
-
-struct dw_i2c_platform_data {
-	unsigned int i2c_scl_freq;
-};
-
-struct bsc_regs {
-	u32 chip_address;
-	u32 data_in[8];
-	u32 cnt_reg;
-	u32 ctl_reg;
-	u32 iic_enable;
-	u32 data_out[8];
-	u32 ctlhi_reg;
-	u32 scl_param;
-};
-
-struct bsc_clk_param {
-	u32 hz;
-	u32 scl_mask;
-	u32 div_mask;
-};
-
-enum bsc_xfer_cmd {
-	CMD_WR = 0,
-	CMD_RD = 1,
-	CMD_WR_NOACK = 2,
-	CMD_RD_NOACK = 3,
-};
-
-enum bus_speeds {
-	SPD_375K = 0,
-	SPD_390K = 1,
-	SPD_187K = 2,
-	SPD_200K = 3,
-	SPD_93K = 4,
-	SPD_97K = 5,
-	SPD_46K = 6,
-	SPD_50K = 7,
-};
-
-struct brcmstb_i2c_dev {
-	struct device *device;
-	void *base;
-	int irq;
-	struct bsc_regs *bsc_regmap;
-	struct i2c_adapter adapter;
-	struct completion done;
-	u32 clk_freq_hz;
-	int data_regsz;
-};
-
-struct pps_ktime {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_ktime_compat {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
 struct pps_kinfo {
 	__u32 assert_sequence;
 	__u32 clear_sequence;
@@ -89953,715 +116021,17 @@
 	int current_mode;
 };
 
-struct pps_kinfo_compat {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime_compat assert_tu;
-	struct pps_ktime_compat clear_tu;
-	int current_mode;
-} __attribute__((packed));
-
-struct pps_kparams {
-	int api_version;
-	int mode;
-	struct pps_ktime assert_off_tu;
-	struct pps_ktime clear_off_tu;
-};
-
 struct pps_fdata {
 	struct pps_kinfo info;
 	struct pps_ktime timeout;
 };
 
-struct pps_fdata_compat {
-	struct pps_kinfo_compat info;
-	struct pps_ktime_compat timeout;
-} __attribute__((packed));
-
 struct pps_bind_args {
 	int tsformat;
 	int edge;
 	int consumer;
 };
 
-struct pps_device;
-
-struct pps_source_info {
-	char name[32];
-	char path[32];
-	int mode;
-	void (*echo)(struct pps_device *, int, void *);
-	struct module *owner;
-	struct device *dev;
-};
-
-struct pps_device {
-	struct pps_source_info info;
-	struct pps_kparams params;
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-	unsigned int last_ev;
-	wait_queue_head_t queue;
-	unsigned int id;
-	const void *lookup_cookie;
-	struct cdev cdev;
-	struct device *dev;
-	struct fasync_struct *async_queue;
-	spinlock_t lock;
-};
-
-struct pps_event_time {
-	struct timespec64 ts_real;
-};
-
-struct ptp_extts_event {
-	struct ptp_clock_time t;
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-enum ptp_clock_events {
-	PTP_CLOCK_ALARM = 0,
-	PTP_CLOCK_EXTTS = 1,
-	PTP_CLOCK_PPS = 2,
-	PTP_CLOCK_PPSUSR = 3,
-};
-
-struct ptp_clock_event {
-	int type;
-	int index;
-	union {
-		u64 timestamp;
-		struct pps_event_time pps_times;
-	};
-};
-
-struct timestamp_event_queue {
-	struct ptp_extts_event buf[128];
-	int head;
-	int tail;
-	spinlock_t lock;
-};
-
-struct ptp_clock___2 {
-	struct posix_clock clock;
-	struct device dev;
-	struct ptp_clock_info *info;
-	dev_t devid;
-	int index;
-	struct pps_device *pps_source;
-	long int dialed_frequency;
-	struct timestamp_event_queue tsevq;
-	struct mutex tsevq_mux;
-	struct mutex pincfg_mux;
-	wait_queue_head_t tsev_wq;
-	int defunct;
-	struct device_attribute *pin_dev_attr;
-	struct attribute **pin_attr;
-	struct attribute_group pin_attr_group;
-	const struct attribute_group *pin_attr_groups[2];
-	struct kthread_worker *kworker;
-	struct kthread_delayed_work aux_work;
-};
-
-struct ptp_clock_caps {
-	int max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int pps;
-	int n_pins;
-	int cross_timestamping;
-	int adjust_phase;
-	int rsv[12];
-};
-
-struct ptp_sys_offset {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[51];
-};
-
-struct ptp_sys_offset_extended {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[75];
-};
-
-struct ptp_sys_offset_precise {
-	struct ptp_clock_time device;
-	struct ptp_clock_time sys_realtime;
-	struct ptp_clock_time sys_monoraw;
-	unsigned int rsv[4];
-};
-
-struct gpio_restart {
-	struct gpio_desc *reset_gpio;
-	struct notifier_block restart_handler;
-	u32 active_delay_ms;
-	u32 inactive_delay_ms;
-	u32 wait_delay_ms;
-};
-
-enum vexpress_reset_func {
-	FUNC_RESET = 0,
-	FUNC_SHUTDOWN = 1,
-	FUNC_REBOOT = 2,
-};
-
-struct xgene_reboot_context {
-	struct device *dev;
-	void *csr;
-	u32 mask;
-	struct notifier_block restart_handler;
-};
-
-struct syscon_reboot_context {
-	struct regmap *map;
-	u32 offset;
-	u32 value;
-	u32 mask;
-	struct notifier_block restart_handler;
-};
-
-struct reboot_mode_driver {
-	struct device *dev;
-	struct list_head head;
-	int (*write)(struct reboot_mode_driver *, unsigned int);
-	struct notifier_block reboot_notifier;
-};
-
-struct mode_info {
-	const char *mode;
-	u32 magic;
-	struct list_head list;
-};
-
-struct syscon_reboot_mode {
-	struct regmap *map;
-	struct reboot_mode_driver reboot;
-	u32 offset;
-	u32 mask;
-};
-
-enum power_supply_property {
-	POWER_SUPPLY_PROP_STATUS = 0,
-	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
-	POWER_SUPPLY_PROP_HEALTH = 2,
-	POWER_SUPPLY_PROP_PRESENT = 3,
-	POWER_SUPPLY_PROP_ONLINE = 4,
-	POWER_SUPPLY_PROP_AUTHENTIC = 5,
-	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
-	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
-	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
-	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
-	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
-	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
-	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
-	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
-	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
-	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
-	POWER_SUPPLY_PROP_POWER_NOW = 20,
-	POWER_SUPPLY_PROP_POWER_AVG = 21,
-	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
-	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
-	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
-	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
-	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
-	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,
-	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,
-	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,
-	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,
-	POWER_SUPPLY_PROP_ENERGY_FULL = 42,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY = 43,
-	POWER_SUPPLY_PROP_ENERGY_NOW = 44,
-	POWER_SUPPLY_PROP_ENERGY_AVG = 45,
-	POWER_SUPPLY_PROP_CAPACITY = 46,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,
-	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 49,
-	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 50,
-	POWER_SUPPLY_PROP_TEMP = 51,
-	POWER_SUPPLY_PROP_TEMP_MAX = 52,
-	POWER_SUPPLY_PROP_TEMP_MIN = 53,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 54,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 55,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT = 56,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 57,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 58,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 59,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 60,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 61,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 62,
-	POWER_SUPPLY_PROP_TYPE = 63,
-	POWER_SUPPLY_PROP_USB_TYPE = 64,
-	POWER_SUPPLY_PROP_SCOPE = 65,
-	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 66,
-	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 67,
-	POWER_SUPPLY_PROP_CALIBRATE = 68,
-	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 69,
-	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 70,
-	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 71,
-	POWER_SUPPLY_PROP_MODEL_NAME = 72,
-	POWER_SUPPLY_PROP_MANUFACTURER = 73,
-	POWER_SUPPLY_PROP_SERIAL_NUMBER = 74,
-};
-
-enum power_supply_type {
-	POWER_SUPPLY_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_TYPE_BATTERY = 1,
-	POWER_SUPPLY_TYPE_UPS = 2,
-	POWER_SUPPLY_TYPE_MAINS = 3,
-	POWER_SUPPLY_TYPE_USB = 4,
-	POWER_SUPPLY_TYPE_USB_DCP = 5,
-	POWER_SUPPLY_TYPE_USB_CDP = 6,
-	POWER_SUPPLY_TYPE_USB_ACA = 7,
-	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
-	POWER_SUPPLY_TYPE_USB_PD = 9,
-	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
-	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
-	POWER_SUPPLY_TYPE_WIRELESS = 12,
-};
-
-enum power_supply_usb_type {
-	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_USB_TYPE_SDP = 1,
-	POWER_SUPPLY_USB_TYPE_DCP = 2,
-	POWER_SUPPLY_USB_TYPE_CDP = 3,
-	POWER_SUPPLY_USB_TYPE_ACA = 4,
-	POWER_SUPPLY_USB_TYPE_C = 5,
-	POWER_SUPPLY_USB_TYPE_PD = 6,
-	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
-	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
-	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
-};
-
-enum power_supply_notifier_events {
-	PSY_EVENT_PROP_CHANGED = 0,
-};
-
-union power_supply_propval {
-	int intval;
-	const char *strval;
-};
-
-struct power_supply_config {
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	void *drv_data;
-	const struct attribute_group **attr_grp;
-	char **supplied_to;
-	size_t num_supplicants;
-};
-
-struct power_supply;
-
-struct power_supply_desc {
-	const char *name;
-	enum power_supply_type type;
-	const enum power_supply_usb_type *usb_types;
-	size_t num_usb_types;
-	const enum power_supply_property *properties;
-	size_t num_properties;
-	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
-	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
-	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
-	void (*external_power_changed)(struct power_supply *);
-	void (*set_charged)(struct power_supply *);
-	bool no_thermal;
-	int use_for_apm;
-};
-
-struct thermal_zone_device;
-
-struct power_supply {
-	const struct power_supply_desc *desc;
-	char **supplied_to;
-	size_t num_supplicants;
-	char **supplied_from;
-	size_t num_supplies;
-	struct device_node *of_node;
-	void *drv_data;
-	struct device dev;
-	struct work_struct changed_work;
-	struct delayed_work deferred_register_work;
-	spinlock_t changed_lock;
-	bool changed;
-	bool initialized;
-	bool removing;
-	atomic_t use_cnt;
-	struct thermal_zone_device *tzd;
-	struct thermal_cooling_device *tcd;
-	struct led_trigger *charging_full_trig;
-	char *charging_full_trig_name;
-	struct led_trigger *charging_trig;
-	char *charging_trig_name;
-	struct led_trigger *full_trig;
-	char *full_trig_name;
-	struct led_trigger *online_trig;
-	char *online_trig_name;
-	struct led_trigger *charging_blink_full_solid_trig;
-	char *charging_blink_full_solid_trig_name;
-};
-
-enum thermal_device_mode {
-	THERMAL_DEVICE_DISABLED = 0,
-	THERMAL_DEVICE_ENABLED = 1,
-};
-
-enum thermal_notify_event {
-	THERMAL_EVENT_UNSPECIFIED = 0,
-	THERMAL_EVENT_TEMP_SAMPLE = 1,
-	THERMAL_TRIP_VIOLATED = 2,
-	THERMAL_TRIP_CHANGED = 3,
-	THERMAL_DEVICE_DOWN = 4,
-	THERMAL_DEVICE_UP = 5,
-	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
-	THERMAL_TABLE_CHANGED = 7,
-	THERMAL_EVENT_KEEP_ALIVE = 8,
-};
-
-struct thermal_attr;
-
-struct thermal_zone_device_ops;
-
-struct thermal_zone_params;
-
-struct thermal_governor;
-
-struct thermal_zone_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct attribute_group trips_attribute_group;
-	struct thermal_attr *trip_temp_attrs;
-	struct thermal_attr *trip_type_attrs;
-	struct thermal_attr *trip_hyst_attrs;
-	enum thermal_device_mode mode;
-	void *devdata;
-	int trips;
-	long unsigned int trips_disabled;
-	int passive_delay;
-	int polling_delay;
-	int temperature;
-	int last_temperature;
-	int emul_temperature;
-	int passive;
-	int prev_low_trip;
-	int prev_high_trip;
-	unsigned int forced_passive;
-	atomic_t need_update;
-	struct thermal_zone_device_ops *ops;
-	struct thermal_zone_params *tzp;
-	struct thermal_governor *governor;
-	void *governor_data;
-	struct list_head thermal_instances;
-	struct ida ida;
-	struct mutex lock;
-	struct list_head node;
-	struct delayed_work poll_queue;
-	enum thermal_notify_event notify_event;
-};
-
-struct power_supply_battery_ocv_table {
-	int ocv;
-	int capacity;
-};
-
-struct power_supply_resistance_temp_table {
-	int temp;
-	int resistance;
-};
-
-struct power_supply_battery_info {
-	int energy_full_design_uwh;
-	int charge_full_design_uah;
-	int voltage_min_design_uv;
-	int voltage_max_design_uv;
-	int tricklecharge_current_ua;
-	int precharge_current_ua;
-	int precharge_voltage_max_uv;
-	int charge_term_current_ua;
-	int charge_restart_voltage_uv;
-	int overvoltage_limit_uv;
-	int constant_charge_current_max_ua;
-	int constant_charge_voltage_max_uv;
-	int factory_internal_resistance_uohm;
-	int ocv_temp[20];
-	int temp_ambient_alert_min;
-	int temp_ambient_alert_max;
-	int temp_alert_min;
-	int temp_alert_max;
-	int temp_min;
-	int temp_max;
-	struct power_supply_battery_ocv_table *ocv_table[20];
-	int ocv_table_size[20];
-	struct power_supply_resistance_temp_table *resist_table;
-	int resist_table_size;
-};
-
-enum thermal_trip_type {
-	THERMAL_TRIP_ACTIVE = 0,
-	THERMAL_TRIP_PASSIVE = 1,
-	THERMAL_TRIP_HOT = 2,
-	THERMAL_TRIP_CRITICAL = 3,
-};
-
-enum thermal_trend {
-	THERMAL_TREND_STABLE = 0,
-	THERMAL_TREND_RAISING = 1,
-	THERMAL_TREND_DROPPING = 2,
-	THERMAL_TREND_RAISE_FULL = 3,
-	THERMAL_TREND_DROP_FULL = 4,
-};
-
-struct thermal_zone_device_ops {
-	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*get_temp)(struct thermal_zone_device *, int *);
-	int (*set_trips)(struct thermal_zone_device *, int, int);
-	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
-	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
-	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
-	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
-	int (*get_crit_temp)(struct thermal_zone_device *, int *);
-	int (*set_emul_temp)(struct thermal_zone_device *, int);
-	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
-	int (*notify)(struct thermal_zone_device *, int, enum thermal_trip_type);
-};
-
-struct thermal_bind_params;
-
-struct thermal_zone_params {
-	char governor_name[20];
-	bool no_hwmon;
-	int num_tbps;
-	struct thermal_bind_params *tbp;
-	u32 sustainable_power;
-	s32 k_po;
-	s32 k_pu;
-	s32 k_i;
-	s32 k_d;
-	s32 integral_cutoff;
-	int slope;
-	int offset;
-};
-
-struct thermal_governor {
-	char name[20];
-	int (*bind_to_tz)(struct thermal_zone_device *);
-	void (*unbind_from_tz)(struct thermal_zone_device *);
-	int (*throttle)(struct thermal_zone_device *, int);
-	struct list_head governor_list;
-};
-
-struct thermal_bind_params {
-	struct thermal_cooling_device *cdev;
-	int weight;
-	int trip_mask;
-	long unsigned int *binding_limits;
-	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
-};
-
-struct psy_am_i_supplied_data {
-	struct power_supply *psy;
-	unsigned int count;
-};
-
-enum {
-	POWER_SUPPLY_STATUS_UNKNOWN = 0,
-	POWER_SUPPLY_STATUS_CHARGING = 1,
-	POWER_SUPPLY_STATUS_DISCHARGING = 2,
-	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
-	POWER_SUPPLY_STATUS_FULL = 4,
-};
-
-enum {
-	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
-	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
-	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
-	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
-	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
-	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
-	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
-};
-
-enum {
-	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-	POWER_SUPPLY_HEALTH_GOOD = 1,
-	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
-	POWER_SUPPLY_HEALTH_DEAD = 3,
-	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
-	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
-	POWER_SUPPLY_HEALTH_COLD = 6,
-	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
-	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
-	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
-	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
-	POWER_SUPPLY_HEALTH_WARM = 11,
-	POWER_SUPPLY_HEALTH_COOL = 12,
-	POWER_SUPPLY_HEALTH_HOT = 13,
-};
-
-enum {
-	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
-	POWER_SUPPLY_TECHNOLOGY_LION = 2,
-	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
-	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
-	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
-	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
-};
-
-enum {
-	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
-	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
-	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
-	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
-	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
-};
-
-enum {
-	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
-	POWER_SUPPLY_SCOPE_SYSTEM = 1,
-	POWER_SUPPLY_SCOPE_DEVICE = 2,
-};
-
-struct power_supply_attr {
-	const char *prop_name;
-	char attr_name[31];
-	struct device_attribute dev_attr;
-	const char * const *text_values;
-	int text_values_len;
-};
-
-enum data_source {
-	CM_BATTERY_PRESENT = 0,
-	CM_NO_BATTERY = 1,
-	CM_FUEL_GAUGE = 2,
-	CM_CHARGER_STAT = 3,
-};
-
-enum polling_modes {
-	CM_POLL_DISABLE = 0,
-	CM_POLL_ALWAYS = 1,
-	CM_POLL_EXTERNAL_POWER_ONLY = 2,
-	CM_POLL_CHARGING_ONLY = 3,
-};
-
-enum cm_batt_temp {
-	CM_BATT_OK = 0,
-	CM_BATT_OVERHEAT = 1,
-	CM_BATT_COLD = 2,
-};
-
-struct charger_regulator;
-
-struct charger_manager;
-
-struct charger_cable {
-	const char *extcon_name;
-	const char *name;
-	struct extcon_dev *extcon_dev;
-	u64 extcon_type;
-	struct work_struct wq;
-	struct notifier_block nb;
-	bool attached;
-	struct charger_regulator *charger;
-	int min_uA;
-	int max_uA;
-	struct charger_manager *cm;
-};
-
-struct charger_regulator {
-	const char *regulator_name;
-	struct regulator *consumer;
-	int externally_control;
-	struct charger_cable *cables;
-	int num_cables;
-	struct attribute_group attr_grp;
-	struct device_attribute attr_name;
-	struct device_attribute attr_state;
-	struct device_attribute attr_externally_control;
-	struct attribute *attrs[4];
-	struct charger_manager *cm;
-};
-
-struct charger_desc;
-
-struct charger_manager {
-	struct list_head entry;
-	struct device *dev;
-	struct charger_desc *desc;
-	struct thermal_zone_device *tzd_batt;
-	bool charger_enabled;
-	int emergency_stop;
-	char psy_name_buf[31];
-	struct power_supply_desc charger_psy_desc;
-	struct power_supply *charger_psy;
-	u64 charging_start_time;
-	u64 charging_end_time;
-	int battery_status;
-};
-
-struct charger_desc {
-	const char *psy_name;
-	enum polling_modes polling_mode;
-	unsigned int polling_interval_ms;
-	unsigned int fullbatt_vchkdrop_uV;
-	unsigned int fullbatt_uV;
-	unsigned int fullbatt_soc;
-	unsigned int fullbatt_full_capacity;
-	enum data_source battery_present;
-	const char **psy_charger_stat;
-	int num_charger_regulators;
-	struct charger_regulator *charger_regulators;
-	const struct attribute_group **sysfs_groups;
-	const char *psy_fuel_gauge;
-	const char *thermal_zone;
-	int temp_min;
-	int temp_max;
-	int temp_diff;
-	bool measure_battery_temp;
-	u32 charging_max_duration_ms;
-	u32 discharging_max_duration_ms;
-};
-
-struct thermal_attr {
-	struct device_attribute attr;
-	char name[20];
-};
-
-struct devfreq_dev_status {
-	long unsigned int total_time;
-	long unsigned int busy_time;
-	long unsigned int current_frequency;
-	void *private_data;
-};
-
 struct trace_event_raw_thermal_temperature {
 	struct trace_entry ent;
 	u32 __data_loc_thermal_zone;
@@ -90687,45 +116057,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_thermal_power_cpu_get_power {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	long unsigned int freq;
-	u32 __data_loc_load;
-	size_t load_len;
-	u32 dynamic_power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_cpu_limit {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	unsigned int freq;
-	long unsigned int cdev_state;
-	u32 power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_devfreq_get_power {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	long unsigned int freq;
-	u32 load;
-	u32 dynamic_power;
-	u32 static_power;
-	u32 power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_devfreq_limit {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	unsigned int freq;
-	long unsigned int cdev_state;
-	u32 power;
-	char __data[0];
-};
-
 struct trace_event_data_offsets_thermal_temperature {
 	u32 thermal_zone;
 };
@@ -90738,1919 +116069,17 @@
 	u32 thermal_zone;
 };
 
-struct trace_event_data_offsets_thermal_power_cpu_get_power {
-	u32 cpumask;
-	u32 load;
-};
-
-struct trace_event_data_offsets_thermal_power_cpu_limit {
-	u32 cpumask;
-};
-
-struct trace_event_data_offsets_thermal_power_devfreq_get_power {
-	u32 type;
-};
-
-struct trace_event_data_offsets_thermal_power_devfreq_limit {
-	u32 type;
-};
-
 typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
 
 typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);
 
 typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
 
-typedef void (*btf_trace_thermal_power_cpu_get_power)(void *, const struct cpumask *, long unsigned int, u32 *, size_t, u32);
-
-typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, long unsigned int, u32);
-
-typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, long unsigned int, u32, u32, u32);
-
-typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, long unsigned int, long unsigned int, u32);
-
-struct thermal_instance {
-	int id;
-	char name[20];
-	struct thermal_zone_device *tz;
-	struct thermal_cooling_device *cdev;
-	int trip;
-	bool initialized;
-	long unsigned int upper;
-	long unsigned int lower;
-	long unsigned int target;
-	char attr_name[20];
-	struct device_attribute attr;
-	char weight_attr_name[20];
-	struct device_attribute weight_attr;
-	struct list_head tz_node;
-	struct list_head cdev_node;
-	unsigned int weight;
-};
-
-struct genl_dumpit_info {
-	const struct genl_family *family;
-	struct genl_ops op;
-	struct nlattr **attrs;
-};
-
-enum thermal_genl_attr {
-	THERMAL_GENL_ATTR_UNSPEC = 0,
-	THERMAL_GENL_ATTR_TZ = 1,
-	THERMAL_GENL_ATTR_TZ_ID = 2,
-	THERMAL_GENL_ATTR_TZ_TEMP = 3,
-	THERMAL_GENL_ATTR_TZ_TRIP = 4,
-	THERMAL_GENL_ATTR_TZ_TRIP_ID = 5,
-	THERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,
-	THERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,
-	THERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,
-	THERMAL_GENL_ATTR_TZ_MODE = 9,
-	THERMAL_GENL_ATTR_TZ_NAME = 10,
-	THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,
-	THERMAL_GENL_ATTR_TZ_GOV = 12,
-	THERMAL_GENL_ATTR_TZ_GOV_NAME = 13,
-	THERMAL_GENL_ATTR_CDEV = 14,
-	THERMAL_GENL_ATTR_CDEV_ID = 15,
-	THERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,
-	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
-	THERMAL_GENL_ATTR_CDEV_NAME = 18,
-	THERMAL_GENL_ATTR_GOV_NAME = 19,
-	__THERMAL_GENL_ATTR_MAX = 20,
-};
-
-enum thermal_genl_sampling {
-	THERMAL_GENL_SAMPLING_TEMP = 0,
-	__THERMAL_GENL_SAMPLING_MAX = 1,
-};
-
-enum thermal_genl_event {
-	THERMAL_GENL_EVENT_UNSPEC = 0,
-	THERMAL_GENL_EVENT_TZ_CREATE = 1,
-	THERMAL_GENL_EVENT_TZ_DELETE = 2,
-	THERMAL_GENL_EVENT_TZ_DISABLE = 3,
-	THERMAL_GENL_EVENT_TZ_ENABLE = 4,
-	THERMAL_GENL_EVENT_TZ_TRIP_UP = 5,
-	THERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,
-	THERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,
-	THERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,
-	THERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,
-	THERMAL_GENL_EVENT_CDEV_ADD = 10,
-	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
-	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
-	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
-	__THERMAL_GENL_EVENT_MAX = 14,
-};
-
-enum thermal_genl_cmd {
-	THERMAL_GENL_CMD_UNSPEC = 0,
-	THERMAL_GENL_CMD_TZ_GET_ID = 1,
-	THERMAL_GENL_CMD_TZ_GET_TRIP = 2,
-	THERMAL_GENL_CMD_TZ_GET_TEMP = 3,
-	THERMAL_GENL_CMD_TZ_GET_GOV = 4,
-	THERMAL_GENL_CMD_TZ_GET_MODE = 5,
-	THERMAL_GENL_CMD_CDEV_GET = 6,
-	__THERMAL_GENL_CMD_MAX = 7,
-};
-
-struct param {
-	struct nlattr **attrs;
-	struct sk_buff *msg;
-	const char *name;
-	int tz_id;
-	int cdev_id;
-	int trip_id;
-	int trip_temp;
-	int trip_type;
-	int trip_hyst;
-	int temp;
-	int cdev_state;
-	int cdev_max_state;
-};
-
-typedef int (*cb_t)(struct param *);
-
-struct thermal_zone_of_device_ops {
-	int (*get_temp)(void *, int *);
-	int (*get_trend)(void *, int, enum thermal_trend *);
-	int (*set_trips)(void *, int, int);
-	int (*set_emul_temp)(void *, int);
-	int (*set_trip_temp)(void *, int, int);
-};
-
-struct thermal_trip {
-	struct device_node *np;
-	int temperature;
-	int hysteresis;
-	enum thermal_trip_type type;
-};
-
-struct __thermal_cooling_bind_param {
-	struct device_node *cooling_device;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct __thermal_bind_params {
-	struct __thermal_cooling_bind_param *tcbp;
-	unsigned int count;
-	unsigned int trip_id;
-	unsigned int usage;
-};
-
-struct __thermal_zone {
-	int passive_delay;
-	int polling_delay;
-	int slope;
-	int offset;
-	int ntrips;
-	struct thermal_trip *trips;
-	int num_tbps;
-	struct __thermal_bind_params *tbps;
-	void *sensor_data;
-	const struct thermal_zone_of_device_ops *ops;
-};
-
-struct time_in_idle {
-	u64 time;
-	u64 timestamp;
-};
-
-struct cpufreq_cooling_device {
-	int id;
-	u32 last_load;
-	unsigned int cpufreq_state;
-	unsigned int max_level;
-	struct em_perf_domain *em;
-	struct cpufreq_policy *policy;
-	struct list_head node;
-	struct time_in_idle *idle_time;
-	struct freq_qos_request qos_req;
-};
-
-enum devfreq_timer {
-	DEVFREQ_TIMER_DEFERRABLE = 0,
-	DEVFREQ_TIMER_DELAYED = 1,
-	DEVFREQ_TIMER_NUM = 2,
-};
-
-struct devfreq_dev_profile {
-	long unsigned int initial_freq;
-	unsigned int polling_ms;
-	enum devfreq_timer timer;
-	int (*target)(struct device *, long unsigned int *, u32);
-	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
-	int (*get_cur_freq)(struct device *, long unsigned int *);
-	void (*exit)(struct device *);
-	long unsigned int *freq_table;
-	unsigned int max_state;
-};
-
-struct devfreq_stats {
-	unsigned int total_trans;
-	unsigned int *trans_table;
-	u64 *time_in_state;
-	u64 last_update;
-};
-
-struct devfreq_governor;
-
-struct devfreq {
-	struct list_head node;
-	struct mutex lock;
-	struct device dev;
-	struct devfreq_dev_profile *profile;
-	const struct devfreq_governor *governor;
-	char governor_name[16];
-	struct notifier_block nb;
-	struct delayed_work work;
-	long unsigned int previous_freq;
-	struct devfreq_dev_status last_status;
-	void *data;
-	struct dev_pm_qos_request user_min_freq_req;
-	struct dev_pm_qos_request user_max_freq_req;
-	long unsigned int scaling_min_freq;
-	long unsigned int scaling_max_freq;
-	bool stop_polling;
-	long unsigned int suspend_freq;
-	long unsigned int resume_freq;
-	atomic_t suspend_count;
-	struct devfreq_stats stats;
-	struct srcu_notifier_head transition_notifier_list;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct devfreq_governor {
-	struct list_head node;
-	const char name[16];
-	const unsigned int immutable;
-	const unsigned int interrupt_driven;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	int (*event_handler)(struct devfreq *, unsigned int, void *);
-};
-
-struct devfreq_cooling_power {
-	long unsigned int (*get_static_power)(struct devfreq *, long unsigned int);
-	long unsigned int (*get_dynamic_power)(struct devfreq *, long unsigned int, long unsigned int);
-	int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
-	long unsigned int dyn_power_coeff;
-};
-
-struct devfreq_cooling_device {
-	int id;
-	struct thermal_cooling_device *cdev;
-	struct devfreq *devfreq;
-	long unsigned int cooling_state;
-	u32 *power_table;
-	u32 *freq_table;
-	size_t freq_table_size;
-	struct devfreq_cooling_power *power_ops;
-	u32 res_util;
-	int capped_state;
-	struct dev_pm_qos_request req_max_freq;
-};
-
-struct amlogic_thermal_soc_calib_data {
-	int A;
-	int B;
-	int m;
-	int n;
-};
-
-struct amlogic_thermal_data {
-	int u_efuse_off;
-	const struct amlogic_thermal_soc_calib_data *calibration_parameters;
-	const struct regmap_config *regmap_config;
-};
-
-struct amlogic_thermal {
-	struct platform_device *pdev;
-	const struct amlogic_thermal_data *data;
-	struct regmap *regmap;
-	struct regmap *sec_ao_map;
-	struct clk *clk;
-	struct thermal_zone_device *tzd;
-	u32 trim_info;
-};
-
-struct watchdog_info {
-	__u32 options;
-	__u32 firmware_version;
-	__u8 identity[32];
-};
-
-struct watchdog_device;
-
-struct watchdog_ops {
-	struct module *owner;
-	int (*start)(struct watchdog_device *);
-	int (*stop)(struct watchdog_device *);
-	int (*ping)(struct watchdog_device *);
-	unsigned int (*status)(struct watchdog_device *);
-	int (*set_timeout)(struct watchdog_device *, unsigned int);
-	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
-	unsigned int (*get_timeleft)(struct watchdog_device *);
-	int (*restart)(struct watchdog_device *, long unsigned int, void *);
-	long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);
-};
-
-struct watchdog_governor;
-
-struct watchdog_core_data;
-
-struct watchdog_device {
-	int id;
-	struct device *parent;
-	const struct attribute_group **groups;
-	const struct watchdog_info *info;
-	const struct watchdog_ops *ops;
-	const struct watchdog_governor *gov;
-	unsigned int bootstatus;
-	unsigned int timeout;
-	unsigned int pretimeout;
-	unsigned int min_timeout;
-	unsigned int max_timeout;
-	unsigned int min_hw_heartbeat_ms;
-	unsigned int max_hw_heartbeat_ms;
-	struct notifier_block reboot_nb;
-	struct notifier_block restart_nb;
-	void *driver_data;
-	struct watchdog_core_data *wd_data;
-	long unsigned int status;
-	struct list_head deferred;
-};
-
-struct watchdog_governor {
-	const char name[20];
-	void (*pretimeout)(struct watchdog_device *);
-};
-
-struct watchdog_core_data {
-	struct device dev;
-	struct cdev cdev;
-	struct watchdog_device *wdd;
-	struct mutex lock;
-	ktime_t last_keepalive;
-	ktime_t last_hw_keepalive;
-	ktime_t open_deadline;
-	struct hrtimer timer;
-	struct kthread_work work;
-	long unsigned int status;
-};
-
-struct mdp_device_descriptor_s {
-	__u32 number;
-	__u32 major;
-	__u32 minor;
-	__u32 raid_disk;
-	__u32 state;
-	__u32 reserved[27];
-};
-
-typedef struct mdp_device_descriptor_s mdp_disk_t;
-
-struct mdp_superblock_s {
-	__u32 md_magic;
-	__u32 major_version;
-	__u32 minor_version;
-	__u32 patch_version;
-	__u32 gvalid_words;
-	__u32 set_uuid0;
-	__u32 ctime;
-	__u32 level;
-	__u32 size;
-	__u32 nr_disks;
-	__u32 raid_disks;
-	__u32 md_minor;
-	__u32 not_persistent;
-	__u32 set_uuid1;
-	__u32 set_uuid2;
-	__u32 set_uuid3;
-	__u32 gstate_creserved[16];
-	__u32 utime;
-	__u32 state;
-	__u32 active_disks;
-	__u32 working_disks;
-	__u32 failed_disks;
-	__u32 spare_disks;
-	__u32 sb_csum;
-	__u32 events_lo;
-	__u32 events_hi;
-	__u32 cp_events_lo;
-	__u32 cp_events_hi;
-	__u32 recovery_cp;
-	__u64 reshape_position;
-	__u32 new_level;
-	__u32 delta_disks;
-	__u32 new_layout;
-	__u32 new_chunk;
-	__u32 gstate_sreserved[14];
-	__u32 layout;
-	__u32 chunk_size;
-	__u32 root_pv;
-	__u32 root_block;
-	__u32 pstate_reserved[60];
-	mdp_disk_t disks[27];
-	__u32 reserved[0];
-	mdp_disk_t this_disk;
-};
-
-typedef struct mdp_superblock_s mdp_super_t;
-
-struct mdp_superblock_1 {
-	__le32 magic;
-	__le32 major_version;
-	__le32 feature_map;
-	__le32 pad0;
-	__u8 set_uuid[16];
-	char set_name[32];
-	__le64 ctime;
-	__le32 level;
-	__le32 layout;
-	__le64 size;
-	__le32 chunksize;
-	__le32 raid_disks;
-	union {
-		__le32 bitmap_offset;
-		struct {
-			__le16 offset;
-			__le16 size;
-		} ppl;
-	};
-	__le32 new_level;
-	__le64 reshape_position;
-	__le32 delta_disks;
-	__le32 new_layout;
-	__le32 new_chunk;
-	__le32 new_offset;
-	__le64 data_offset;
-	__le64 data_size;
-	__le64 super_offset;
-	union {
-		__le64 recovery_offset;
-		__le64 journal_tail;
-	};
-	__le32 dev_number;
-	__le32 cnt_corrected_read;
-	__u8 device_uuid[16];
-	__u8 devflags;
-	__u8 bblog_shift;
-	__le16 bblog_size;
-	__le32 bblog_offset;
-	__le64 utime;
-	__le64 events;
-	__le64 resync_offset;
-	__le32 sb_csum;
-	__le32 max_dev;
-	__u8 pad3[32];
-	__le16 dev_roles[0];
-};
-
-struct mdu_version_s {
-	int major;
-	int minor;
-	int patchlevel;
-};
-
-typedef struct mdu_version_s mdu_version_t;
-
-struct mdu_array_info_s {
-	int major_version;
-	int minor_version;
-	int patch_version;
-	unsigned int ctime;
-	int level;
-	int size;
-	int nr_disks;
-	int raid_disks;
-	int md_minor;
-	int not_persistent;
-	unsigned int utime;
-	int state;
-	int active_disks;
-	int working_disks;
-	int failed_disks;
-	int spare_disks;
-	int layout;
-	int chunk_size;
-};
-
-typedef struct mdu_array_info_s mdu_array_info_t;
-
-struct mdu_disk_info_s {
-	int number;
-	int major;
-	int minor;
-	int raid_disk;
-	int state;
-};
-
-typedef struct mdu_disk_info_s mdu_disk_info_t;
-
-struct mdu_bitmap_file_s {
-	char pathname[4096];
-};
-
-typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
-
-struct mddev;
-
-struct md_rdev;
-
-struct md_cluster_operations {
-	int (*join)(struct mddev *, int);
-	int (*leave)(struct mddev *);
-	int (*slot_number)(struct mddev *);
-	int (*resync_info_update)(struct mddev *, sector_t, sector_t);
-	void (*resync_info_get)(struct mddev *, sector_t *, sector_t *);
-	int (*metadata_update_start)(struct mddev *);
-	int (*metadata_update_finish)(struct mddev *);
-	void (*metadata_update_cancel)(struct mddev *);
-	int (*resync_start)(struct mddev *);
-	int (*resync_finish)(struct mddev *);
-	int (*area_resyncing)(struct mddev *, int, sector_t, sector_t);
-	int (*add_new_disk)(struct mddev *, struct md_rdev *);
-	void (*add_new_disk_cancel)(struct mddev *);
-	int (*new_disk_ack)(struct mddev *, bool);
-	int (*remove_disk)(struct mddev *, struct md_rdev *);
-	void (*load_bitmaps)(struct mddev *, int);
-	int (*gather_bitmaps)(struct md_rdev *);
-	int (*resize_bitmaps)(struct mddev *, sector_t, sector_t);
-	int (*lock_all_bitmaps)(struct mddev *);
-	void (*unlock_all_bitmaps)(struct mddev *);
-	void (*update_size)(struct mddev *, sector_t);
-};
-
-struct md_cluster_info;
-
-struct md_personality;
-
-struct md_thread;
-
-struct bitmap;
-
-struct mddev {
-	void *private;
-	struct md_personality *pers;
-	dev_t unit;
-	int md_minor;
-	struct list_head disks;
-	long unsigned int flags;
-	long unsigned int sb_flags;
-	int suspended;
-	atomic_t active_io;
-	int ro;
-	int sysfs_active;
-	struct gendisk *gendisk;
-	struct kobject kobj;
-	int hold_active;
-	int major_version;
-	int minor_version;
-	int patch_version;
-	int persistent;
-	int external;
-	char metadata_type[17];
-	int chunk_sectors;
-	time64_t ctime;
-	time64_t utime;
-	int level;
-	int layout;
-	char clevel[16];
-	int raid_disks;
-	int max_disks;
-	sector_t dev_sectors;
-	sector_t array_sectors;
-	int external_size;
-	__u64 events;
-	int can_decrease_events;
-	char uuid[16];
-	sector_t reshape_position;
-	int delta_disks;
-	int new_level;
-	int new_layout;
-	int new_chunk_sectors;
-	int reshape_backwards;
-	struct md_thread *thread;
-	struct md_thread *sync_thread;
-	char *last_sync_action;
-	sector_t curr_resync;
-	sector_t curr_resync_completed;
-	long unsigned int resync_mark;
-	sector_t resync_mark_cnt;
-	sector_t curr_mark_cnt;
-	sector_t resync_max_sectors;
-	atomic64_t resync_mismatches;
-	sector_t suspend_lo;
-	sector_t suspend_hi;
-	int sync_speed_min;
-	int sync_speed_max;
-	int parallel_resync;
-	int ok_start_degraded;
-	long unsigned int recovery;
-	int recovery_disabled;
-	int in_sync;
-	struct mutex open_mutex;
-	struct mutex reconfig_mutex;
-	atomic_t active;
-	atomic_t openers;
-	int changed;
-	int degraded;
-	atomic_t recovery_active;
-	wait_queue_head_t recovery_wait;
-	sector_t recovery_cp;
-	sector_t resync_min;
-	sector_t resync_max;
-	struct kernfs_node *sysfs_state;
-	struct kernfs_node *sysfs_action;
-	struct kernfs_node *sysfs_completed;
-	struct kernfs_node *sysfs_degraded;
-	struct kernfs_node *sysfs_level;
-	struct work_struct del_work;
-	spinlock_t lock;
-	wait_queue_head_t sb_wait;
-	atomic_t pending_writes;
-	unsigned int safemode;
-	unsigned int safemode_delay;
-	struct timer_list safemode_timer;
-	struct percpu_ref writes_pending;
-	int sync_checkers;
-	struct request_queue *queue;
-	struct bitmap *bitmap;
-	struct {
-		struct file *file;
-		loff_t offset;
-		long unsigned int space;
-		loff_t default_offset;
-		long unsigned int default_space;
-		struct mutex mutex;
-		long unsigned int chunksize;
-		long unsigned int daemon_sleep;
-		long unsigned int max_write_behind;
-		int external;
-		int nodes;
-		char cluster_name[64];
-	} bitmap_info;
-	atomic_t max_corr_read_errors;
-	struct list_head all_mddevs;
-	struct attribute_group *to_remove;
-	struct bio_set bio_set;
-	struct bio_set sync_set;
-	mempool_t md_io_pool;
-	struct bio *flush_bio;
-	atomic_t flush_pending;
-	ktime_t start_flush;
-	ktime_t last_flush;
-	struct work_struct flush_work;
-	struct work_struct event_work;
-	mempool_t *serial_info_pool;
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	struct md_cluster_info *cluster_info;
-	unsigned int good_device_nr;
-	unsigned int noio_flag;
-	bool has_superblocks: 1;
-	bool fail_last_dev: 1;
-	bool serialize_policy: 1;
-};
-
-struct serial_in_rdev;
-
-struct md_rdev {
-	struct list_head same_set;
-	sector_t sectors;
-	struct mddev *mddev;
-	int last_events;
-	struct block_device *meta_bdev;
-	struct block_device *bdev;
-	struct page *sb_page;
-	struct page *bb_page;
-	int sb_loaded;
-	__u64 sb_events;
-	sector_t data_offset;
-	sector_t new_data_offset;
-	sector_t sb_start;
-	int sb_size;
-	int preferred_minor;
-	struct kobject kobj;
-	long unsigned int flags;
-	wait_queue_head_t blocked_wait;
-	int desc_nr;
-	int raid_disk;
-	int new_raid_disk;
-	int saved_raid_disk;
-	union {
-		sector_t recovery_offset;
-		sector_t journal_tail;
-	};
-	atomic_t nr_pending;
-	atomic_t read_errors;
-	time64_t last_read_error;
-	atomic_t corrected_errors;
-	struct serial_in_rdev *serial;
-	struct work_struct del_work;
-	struct kernfs_node *sysfs_state;
-	struct kernfs_node *sysfs_unack_badblocks;
-	struct kernfs_node *sysfs_badblocks;
-	struct badblocks badblocks;
-	struct {
-		short int offset;
-		unsigned int size;
-		sector_t sector;
-	} ppl;
-};
-
-struct serial_in_rdev {
-	struct rb_root_cached serial_rb;
-	spinlock_t serial_lock;
-	wait_queue_head_t serial_io_wait;
-};
-
-enum flag_bits {
-	Faulty = 0,
-	In_sync = 1,
-	Bitmap_sync = 2,
-	WriteMostly = 3,
-	AutoDetected = 4,
-	Blocked = 5,
-	WriteErrorSeen = 6,
-	FaultRecorded = 7,
-	BlockedBadBlocks = 8,
-	WantReplacement = 9,
-	Replacement = 10,
-	Candidate = 11,
-	Journal = 12,
-	ClusterRemove = 13,
-	RemoveSynchronized = 14,
-	ExternalBbl = 15,
-	FailFast = 16,
-	LastDev = 17,
-	CollisionCheck = 18,
-};
-
-enum mddev_flags {
-	MD_ARRAY_FIRST_USE = 0,
-	MD_CLOSING = 1,
-	MD_JOURNAL_CLEAN = 2,
-	MD_HAS_JOURNAL = 3,
-	MD_CLUSTER_RESYNC_LOCKED = 4,
-	MD_FAILFAST_SUPPORTED = 5,
-	MD_HAS_PPL = 6,
-	MD_HAS_MULTIPLE_PPLS = 7,
-	MD_ALLOW_SB_UPDATE = 8,
-	MD_UPDATING_SB = 9,
-	MD_NOT_READY = 10,
-	MD_BROKEN = 11,
-};
-
-enum mddev_sb_flags {
-	MD_SB_CHANGE_DEVS = 0,
-	MD_SB_CHANGE_CLEAN = 1,
-	MD_SB_CHANGE_PENDING = 2,
-	MD_SB_NEED_REWRITE = 3,
-};
-
-struct md_personality {
-	char *name;
-	int level;
-	struct list_head list;
-	struct module *owner;
-	bool (*make_request)(struct mddev *, struct bio *);
-	int (*run)(struct mddev *);
-	int (*start)(struct mddev *);
-	void (*free)(struct mddev *, void *);
-	void (*status)(struct seq_file *, struct mddev *);
-	void (*error_handler)(struct mddev *, struct md_rdev *);
-	int (*hot_add_disk)(struct mddev *, struct md_rdev *);
-	int (*hot_remove_disk)(struct mddev *, struct md_rdev *);
-	int (*spare_active)(struct mddev *);
-	sector_t (*sync_request)(struct mddev *, sector_t, int *);
-	int (*resize)(struct mddev *, sector_t);
-	sector_t (*size)(struct mddev *, sector_t, int);
-	int (*check_reshape)(struct mddev *);
-	int (*start_reshape)(struct mddev *);
-	void (*finish_reshape)(struct mddev *);
-	void (*update_reshape_pos)(struct mddev *);
-	void (*quiesce)(struct mddev *, int);
-	void * (*takeover)(struct mddev *);
-	int (*change_consistency_policy)(struct mddev *, const char *);
-};
-
-struct md_thread {
-	void (*run)(struct md_thread *);
-	struct mddev *mddev;
-	wait_queue_head_t wqueue;
-	long unsigned int flags;
-	struct task_struct *tsk;
-	long unsigned int timeout;
-	void *private;
-};
-
-struct bitmap_page;
-
-struct bitmap_counts {
-	spinlock_t lock;
-	struct bitmap_page *bp;
-	long unsigned int pages;
-	long unsigned int missing_pages;
-	long unsigned int chunkshift;
-	long unsigned int chunks;
-};
-
-struct bitmap_storage {
-	struct file *file;
-	struct page *sb_page;
-	struct page **filemap;
-	long unsigned int *filemap_attr;
-	long unsigned int file_pages;
-	long unsigned int bytes;
-};
-
-struct bitmap {
-	struct bitmap_counts counts;
-	struct mddev *mddev;
-	__u64 events_cleared;
-	int need_sync;
-	struct bitmap_storage storage;
-	long unsigned int flags;
-	int allclean;
-	atomic_t behind_writes;
-	long unsigned int behind_writes_used;
-	long unsigned int daemon_lastrun;
-	long unsigned int last_end_sync;
-	atomic_t pending_writes;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t overflow_wait;
-	wait_queue_head_t behind_wait;
-	struct kernfs_node *sysfs_can_clear;
-	int cluster_slot;
-};
-
-enum recovery_flags {
-	MD_RECOVERY_RUNNING = 0,
-	MD_RECOVERY_SYNC = 1,
-	MD_RECOVERY_RECOVER = 2,
-	MD_RECOVERY_INTR = 3,
-	MD_RECOVERY_DONE = 4,
-	MD_RECOVERY_NEEDED = 5,
-	MD_RECOVERY_REQUESTED = 6,
-	MD_RECOVERY_CHECK = 7,
-	MD_RECOVERY_RESHAPE = 8,
-	MD_RECOVERY_FROZEN = 9,
-	MD_RECOVERY_ERROR = 10,
-	MD_RECOVERY_WAIT = 11,
-	MD_RESYNCING_REMOTE = 12,
-};
-
-struct md_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct mddev *, char *);
-	ssize_t (*store)(struct mddev *, const char *, size_t);
-};
-
-struct bitmap_page {
-	char *map;
-	unsigned int hijacked: 1;
-	unsigned int pending: 1;
-	unsigned int count: 30;
-};
-
-struct md_io {
-	struct mddev *mddev;
-	bio_end_io_t *orig_bi_end_io;
-	void *orig_bi_private;
-	long unsigned int start_time;
-	struct hd_struct *part;
-};
-
-struct super_type {
-	char *name;
-	struct module *owner;
-	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
-	int (*validate_super)(struct mddev *, struct md_rdev *);
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
-	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
-};
-
-struct rdev_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct md_rdev *, char *);
-	ssize_t (*store)(struct md_rdev *, const char *, size_t);
-};
-
-enum array_state {
-	clear = 0,
-	inactive = 1,
-	suspended = 2,
-	readonly = 3,
-	read_auto = 4,
-	clean = 5,
-	active = 6,
-	write_pending = 7,
-	active_idle = 8,
-	broken = 9,
-	bad_word = 10,
-};
-
-struct detected_devices_node {
-	struct list_head list;
-	dev_t dev;
-};
-
-typedef __u16 bitmap_counter_t;
-
-enum bitmap_state {
-	BITMAP_STALE = 1,
-	BITMAP_WRITE_ERROR = 2,
-	BITMAP_HOSTENDIAN = 15,
-};
-
-struct bitmap_super_s {
-	__le32 magic;
-	__le32 version;
-	__u8 uuid[16];
-	__le64 events;
-	__le64 events_cleared;
-	__le64 sync_size;
-	__le32 state;
-	__le32 chunksize;
-	__le32 daemon_sleep;
-	__le32 write_behind;
-	__le32 sectors_reserved;
-	__le32 nodes;
-	__u8 cluster_name[64];
-	__u8 pad[120];
-};
-
-typedef struct bitmap_super_s bitmap_super_t;
-
-enum bitmap_page_attr {
-	BITMAP_PAGE_DIRTY = 0,
-	BITMAP_PAGE_PENDING = 1,
-	BITMAP_PAGE_NEEDWRITE = 2,
-};
-
-struct md_setup_args {
-	int minor;
-	int partitioned;
-	int level;
-	int chunk;
-	char *device_names;
-};
-
 struct dm_kobject_holder {
 	struct kobject kobj;
 	struct completion completion;
 };
 
-enum dev_type {
-	DEV_UNKNOWN = 0,
-	DEV_X1 = 1,
-	DEV_X2 = 2,
-	DEV_X4 = 3,
-	DEV_X8 = 4,
-	DEV_X16 = 5,
-	DEV_X32 = 6,
-	DEV_X64 = 7,
-};
-
-enum hw_event_mc_err_type {
-	HW_EVENT_ERR_CORRECTED = 0,
-	HW_EVENT_ERR_UNCORRECTED = 1,
-	HW_EVENT_ERR_DEFERRED = 2,
-	HW_EVENT_ERR_FATAL = 3,
-	HW_EVENT_ERR_INFO = 4,
-};
-
-enum mem_type {
-	MEM_EMPTY = 0,
-	MEM_RESERVED = 1,
-	MEM_UNKNOWN = 2,
-	MEM_FPM = 3,
-	MEM_EDO = 4,
-	MEM_BEDO = 5,
-	MEM_SDR = 6,
-	MEM_RDR = 7,
-	MEM_DDR = 8,
-	MEM_RDDR = 9,
-	MEM_RMBS = 10,
-	MEM_DDR2 = 11,
-	MEM_FB_DDR2 = 12,
-	MEM_RDDR2 = 13,
-	MEM_XDR = 14,
-	MEM_DDR3 = 15,
-	MEM_RDDR3 = 16,
-	MEM_LRDDR3 = 17,
-	MEM_DDR4 = 18,
-	MEM_RDDR4 = 19,
-	MEM_LRDDR4 = 20,
-	MEM_NVDIMM = 21,
-};
-
-enum edac_type {
-	EDAC_UNKNOWN = 0,
-	EDAC_NONE = 1,
-	EDAC_RESERVED = 2,
-	EDAC_PARITY = 3,
-	EDAC_EC = 4,
-	EDAC_SECDED = 5,
-	EDAC_S2ECD2ED = 6,
-	EDAC_S4ECD4ED = 7,
-	EDAC_S8ECD8ED = 8,
-	EDAC_S16ECD16ED = 9,
-};
-
-enum scrub_type {
-	SCRUB_UNKNOWN = 0,
-	SCRUB_NONE = 1,
-	SCRUB_SW_PROG = 2,
-	SCRUB_SW_SRC = 3,
-	SCRUB_SW_PROG_SRC = 4,
-	SCRUB_SW_TUNABLE = 5,
-	SCRUB_HW_PROG = 6,
-	SCRUB_HW_SRC = 7,
-	SCRUB_HW_PROG_SRC = 8,
-	SCRUB_HW_TUNABLE = 9,
-};
-
-enum edac_mc_layer_type {
-	EDAC_MC_LAYER_BRANCH = 0,
-	EDAC_MC_LAYER_CHANNEL = 1,
-	EDAC_MC_LAYER_SLOT = 2,
-	EDAC_MC_LAYER_CHIP_SELECT = 3,
-	EDAC_MC_LAYER_ALL_MEM = 4,
-};
-
-struct edac_mc_layer {
-	enum edac_mc_layer_type type;
-	unsigned int size;
-	bool is_virt_csrow;
-};
-
-struct mem_ctl_info;
-
-struct dimm_info {
-	struct device dev;
-	char label[32];
-	unsigned int location[3];
-	struct mem_ctl_info *mci;
-	unsigned int idx;
-	u32 grain;
-	enum dev_type dtype;
-	enum mem_type mtype;
-	enum edac_type edac_mode;
-	u32 nr_pages;
-	unsigned int csrow;
-	unsigned int cschannel;
-	u16 smbios_handle;
-	u32 ce_count;
-	u32 ue_count;
-};
-
-struct mcidev_sysfs_attribute;
-
-struct edac_raw_error_desc {
-	char location[256];
-	char label[296];
-	long int grain;
-	u16 error_count;
-	enum hw_event_mc_err_type type;
-	int top_layer;
-	int mid_layer;
-	int low_layer;
-	long unsigned int page_frame_number;
-	long unsigned int offset_in_page;
-	long unsigned int syndrome;
-	const char *msg;
-	const char *other_detail;
-};
-
-struct csrow_info;
-
-struct mem_ctl_info {
-	struct device dev;
-	struct bus_type *bus;
-	struct list_head link;
-	struct module *owner;
-	long unsigned int mtype_cap;
-	long unsigned int edac_ctl_cap;
-	long unsigned int edac_cap;
-	long unsigned int scrub_cap;
-	enum scrub_type scrub_mode;
-	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
-	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
-	void (*edac_check)(struct mem_ctl_info *);
-	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
-	int mc_idx;
-	struct csrow_info **csrows;
-	unsigned int nr_csrows;
-	unsigned int num_cschannel;
-	unsigned int n_layers;
-	struct edac_mc_layer *layers;
-	bool csbased;
-	unsigned int tot_dimms;
-	struct dimm_info **dimms;
-	struct device *pdev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	u32 ce_noinfo_count;
-	u32 ue_noinfo_count;
-	u32 ue_mc;
-	u32 ce_mc;
-	struct completion complete;
-	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
-	struct delayed_work work;
-	struct edac_raw_error_desc error_desc;
-	int op_state;
-	struct dentry *debugfs;
-	u8 fake_inject_layer[3];
-	bool fake_inject_ue;
-	u16 fake_inject_count;
-};
-
-struct rank_info {
-	int chan_idx;
-	struct csrow_info *csrow;
-	struct dimm_info *dimm;
-	u32 ce_count;
-};
-
-struct csrow_info {
-	struct device dev;
-	long unsigned int first_page;
-	long unsigned int last_page;
-	long unsigned int page_mask;
-	int csrow_idx;
-	u32 ue_count;
-	u32 ce_count;
-	struct mem_ctl_info *mci;
-	u32 nr_channels;
-	struct rank_info **channels;
-};
-
-struct edac_device_counter {
-	u32 ue_count;
-	u32 ce_count;
-};
-
-struct edac_device_ctl_info;
-
-struct edac_dev_sysfs_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_ctl_info *, char *);
-	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
-};
-
-struct edac_device_instance;
-
-struct edac_device_ctl_info {
-	struct list_head link;
-	struct module *owner;
-	int dev_idx;
-	int log_ue;
-	int log_ce;
-	int panic_on_ue;
-	unsigned int poll_msec;
-	long unsigned int delay;
-	struct edac_dev_sysfs_attribute *sysfs_attributes;
-	struct bus_type *edac_subsys;
-	int op_state;
-	struct delayed_work work;
-	void (*edac_check)(struct edac_device_ctl_info *);
-	struct device *dev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	struct completion removal_complete;
-	char name[32];
-	u32 nr_instances;
-	struct edac_device_instance *instances;
-	struct edac_device_counter counters;
-	struct kobject kobj;
-};
-
-struct edac_device_block;
-
-struct edac_dev_sysfs_block_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
-	struct edac_device_block *block;
-	unsigned int value;
-};
-
-struct edac_device_block {
-	struct edac_device_instance *instance;
-	char name[32];
-	struct edac_device_counter counters;
-	int nr_attribs;
-	struct edac_dev_sysfs_block_attribute *block_attributes;
-	struct kobject kobj;
-};
-
-struct edac_device_instance {
-	struct edac_device_ctl_info *ctl;
-	char name[35];
-	struct edac_device_counter counters;
-	u32 nr_blocks;
-	struct edac_device_block *blocks;
-	struct kobject kobj;
-};
-
-struct dev_ch_attribute {
-	struct device_attribute attr;
-	unsigned int channel;
-};
-
-struct ctl_info_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_ctl_info *, char *);
-	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
-};
-
-struct instance_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_instance *, char *);
-	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
-};
-
-struct edac_pci_counter {
-	atomic_t pe_count;
-	atomic_t npe_count;
-};
-
-struct edac_pci_ctl_info {
-	struct list_head link;
-	int pci_idx;
-	struct bus_type *edac_subsys;
-	int op_state;
-	struct delayed_work work;
-	void (*edac_check)(struct edac_pci_ctl_info *);
-	struct device *dev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	struct completion complete;
-	char name[32];
-	struct edac_pci_counter counters;
-	struct kobject kobj;
-};
-
-struct edac_pci_gen_data {
-	int edac_idx;
-};
-
-struct instance_attribute___2 {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
-	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
-};
-
-struct edac_pci_dev_attribute {
-	struct attribute attr;
-	void *value;
-	ssize_t (*show)(void *, char *);
-	ssize_t (*store)(void *, const char *, size_t);
-};
-
-typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
-
-enum opp_table_access {
-	OPP_TABLE_ACCESS_UNKNOWN = 0,
-	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
-	OPP_TABLE_ACCESS_SHARED = 2,
-};
-
-struct icc_path;
-
-struct dev_pm_opp___2;
-
-struct dev_pm_set_opp_data;
-
-struct opp_table___2 {
-	struct list_head node;
-	struct blocking_notifier_head head;
-	struct list_head dev_list;
-	struct list_head opp_list;
-	struct kref kref;
-	struct mutex lock;
-	struct device_node *np;
-	long unsigned int clock_latency_ns_max;
-	unsigned int voltage_tolerance_v1;
-	unsigned int parsed_static_opps;
-	enum opp_table_access shared_opp;
-	struct dev_pm_opp___2 *suspend_opp;
-	struct mutex genpd_virt_dev_lock;
-	struct device **genpd_virt_devs;
-	struct opp_table___2 **required_opp_tables;
-	unsigned int required_opp_count;
-	unsigned int *supported_hw;
-	unsigned int supported_hw_count;
-	const char *prop_name;
-	struct clk *clk;
-	struct regulator **regulators;
-	int regulator_count;
-	struct icc_path **paths;
-	unsigned int path_count;
-	bool enabled;
-	bool genpd_performance_state;
-	bool is_genpd;
-	int (*set_opp)(struct dev_pm_set_opp_data *);
-	struct dev_pm_set_opp_data *set_opp_data;
-	struct dentry *dentry;
-	char dentry_name[255];
-};
-
-struct dev_pm_opp_supply;
-
-struct dev_pm_opp_icc_bw;
-
-struct dev_pm_opp___2 {
-	struct list_head node;
-	struct kref kref;
-	bool available;
-	bool dynamic;
-	bool turbo;
-	bool suspend;
-	unsigned int pstate;
-	long unsigned int rate;
-	unsigned int level;
-	struct dev_pm_opp_supply *supplies;
-	struct dev_pm_opp_icc_bw *bandwidth;
-	long unsigned int clock_latency_ns;
-	struct dev_pm_opp___2 **required_opps;
-	struct opp_table___2 *opp_table;
-	struct device_node *np;
-	struct dentry *dentry;
-};
-
-enum dev_pm_opp_event {
-	OPP_EVENT_ADD = 0,
-	OPP_EVENT_REMOVE = 1,
-	OPP_EVENT_ENABLE = 2,
-	OPP_EVENT_DISABLE = 3,
-	OPP_EVENT_ADJUST_VOLTAGE = 4,
-};
-
-struct dev_pm_opp_supply {
-	long unsigned int u_volt;
-	long unsigned int u_volt_min;
-	long unsigned int u_volt_max;
-	long unsigned int u_amp;
-};
-
-struct dev_pm_opp_icc_bw {
-	u32 avg;
-	u32 peak;
-};
-
-struct dev_pm_opp_info {
-	long unsigned int rate;
-	struct dev_pm_opp_supply *supplies;
-};
-
-struct dev_pm_set_opp_data {
-	struct dev_pm_opp_info old_opp;
-	struct dev_pm_opp_info new_opp;
-	struct regulator **regulators;
-	unsigned int regulator_count;
-	struct clk *clk;
-	struct device *dev;
-};
-
-struct opp_device {
-	struct list_head node;
-	const struct device *dev;
-	struct dentry *dentry;
-};
-
-struct cpufreq_policy_data {
-	struct cpufreq_cpuinfo cpuinfo;
-	struct cpufreq_frequency_table *freq_table;
-	unsigned int cpu;
-	unsigned int min;
-	unsigned int max;
-};
-
-struct cpufreq_freqs {
-	struct cpufreq_policy *policy;
-	unsigned int old;
-	unsigned int new;
-	u8 flags;
-};
-
-struct freq_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpufreq_policy *, char *);
-	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
-};
-
-struct cpufreq_driver {
-	char name[16];
-	u16 flags;
-	void *driver_data;
-	int (*init)(struct cpufreq_policy *);
-	int (*verify)(struct cpufreq_policy_data *);
-	int (*setpolicy)(struct cpufreq_policy *);
-	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
-	int (*target_index)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get)(unsigned int);
-	void (*update_limits)(unsigned int);
-	int (*bios_limit)(int, unsigned int *);
-	int (*online)(struct cpufreq_policy *);
-	int (*offline)(struct cpufreq_policy *);
-	int (*exit)(struct cpufreq_policy *);
-	void (*stop_cpu)(struct cpufreq_policy *);
-	int (*suspend)(struct cpufreq_policy *);
-	int (*resume)(struct cpufreq_policy *);
-	void (*ready)(struct cpufreq_policy *);
-	struct freq_attr **attr;
-	bool boost_enabled;
-	int (*set_boost)(struct cpufreq_policy *, int);
-};
-
-struct cpufreq_stats {
-	unsigned int total_trans;
-	long long unsigned int last_time;
-	unsigned int max_state;
-	unsigned int state_num;
-	unsigned int last_index;
-	u64 *time_in_state;
-	unsigned int *freq_table;
-	unsigned int *trans_table;
-	unsigned int reset_pending;
-	long long unsigned int reset_time;
-};
-
-struct dbs_data {
-	struct gov_attr_set attr_set;
-	void *tuners;
-	unsigned int ignore_nice_load;
-	unsigned int sampling_rate;
-	unsigned int sampling_down_factor;
-	unsigned int up_threshold;
-	unsigned int io_is_busy;
-};
-
-struct policy_dbs_info {
-	struct cpufreq_policy *policy;
-	struct mutex update_mutex;
-	u64 last_sample_time;
-	s64 sample_delay_ns;
-	atomic_t work_count;
-	struct irq_work irq_work;
-	struct work_struct work;
-	struct dbs_data *dbs_data;
-	struct list_head list;
-	unsigned int rate_mult;
-	unsigned int idle_periods;
-	bool is_shared;
-	bool work_in_progress;
-};
-
-struct cpu_dbs_info {
-	u64 prev_cpu_idle;
-	u64 prev_update_time;
-	u64 prev_cpu_nice;
-	unsigned int prev_load;
-	struct update_util_data update_util;
-	struct policy_dbs_info *policy_dbs;
-};
-
-struct dbs_governor {
-	struct cpufreq_governor gov;
-	struct kobj_type kobj_type;
-	struct dbs_data *gdbs_data;
-	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
-	struct policy_dbs_info * (*alloc)();
-	void (*free)(struct policy_dbs_info *);
-	int (*init)(struct dbs_data *);
-	void (*exit)(struct dbs_data *);
-	void (*start)(struct cpufreq_policy *);
-};
-
-struct cpufreq_policy___2;
-
-struct cpufreq_dt_platform_data {
-	bool have_governor_per_policy;
-	unsigned int (*get_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*suspend)(struct cpufreq_policy___2 *);
-	int (*resume)(struct cpufreq_policy___2 *);
-};
-
-struct tegra124_cpufreq_priv {
-	struct clk *cpu_clk;
-	struct clk *pllp_clk;
-	struct clk *pllx_clk;
-	struct clk *dfll_clk;
-	struct platform_device *cpufreq_dt_pdev;
-};
-
-struct cpuidle_governor {
-	char name[16];
-	struct list_head governor_list;
-	unsigned int rating;
-	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
-	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
-	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
-	void (*reflect)(struct cpuidle_device *, int);
-};
-
-struct cpuidle_state_kobj {
-	struct cpuidle_state *state;
-	struct cpuidle_state_usage *state_usage;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-	struct cpuidle_device *device;
-};
-
-struct cpuidle_driver_kobj {
-	struct cpuidle_driver *drv;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_device_kobj {
-	struct cpuidle_device *dev;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_device *, char *);
-	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
-};
-
-struct cpuidle_state_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
-	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
-};
-
-struct cpuidle_driver_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_driver *, char *);
-	ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
-};
-
-struct ladder_device_state {
-	struct {
-		u32 promotion_count;
-		u32 demotion_count;
-		u64 promotion_time_ns;
-		u64 demotion_time_ns;
-	} threshold;
-	struct {
-		int promotion_count;
-		int demotion_count;
-	} stats;
-};
-
-struct ladder_device {
-	struct ladder_device_state states[10];
-};
-
-struct menu_device {
-	int needs_update;
-	int tick_wakeup;
-	u64 next_timer_ns;
-	unsigned int bucket;
-	unsigned int correction_factor[12];
-	unsigned int intervals[8];
-	int interval_ptr;
-};
-
-struct teo_idle_state {
-	unsigned int early_hits;
-	unsigned int hits;
-	unsigned int misses;
-};
-
-struct teo_cpu {
-	u64 time_span_ns;
-	u64 sleep_length_ns;
-	struct teo_idle_state states[10];
-	int interval_idx;
-	u64 intervals[8];
-};
-
-struct pci_dev___2;
-
-struct sdhci_pci_data {
-	struct pci_dev___2 *pdev;
-	int slotno;
-	int rst_n_gpio;
-	int cd_gpio;
-	int (*setup)(struct sdhci_pci_data *);
-	void (*cleanup)(struct sdhci_pci_data *);
-};
-
-struct led_init_data {
-	struct fwnode_handle *fwnode;
-	const char *default_label;
-	const char *devicename;
-	bool devname_mandatory;
-};
-
-struct led_properties {
-	u32 color;
-	bool color_present;
-	const char *function;
-	u32 func_enum;
-	bool func_enum_present;
-	const char *label;
-};
-
-enum cpu_led_event {
-	CPU_LED_IDLE_START = 0,
-	CPU_LED_IDLE_END = 1,
-	CPU_LED_START = 2,
-	CPU_LED_STOP = 3,
-	CPU_LED_HALTED = 4,
-};
-
-struct led_trigger_cpu {
-	bool is_active;
-	char name[8];
-	struct led_trigger *_trig;
-};
-
-enum scpi_error_codes {
-	SCPI_SUCCESS = 0,
-	SCPI_ERR_PARAM = 1,
-	SCPI_ERR_ALIGN = 2,
-	SCPI_ERR_SIZE = 3,
-	SCPI_ERR_HANDLER = 4,
-	SCPI_ERR_ACCESS = 5,
-	SCPI_ERR_RANGE = 6,
-	SCPI_ERR_TIMEOUT = 7,
-	SCPI_ERR_NOMEM = 8,
-	SCPI_ERR_PWRSTATE = 9,
-	SCPI_ERR_SUPPORT = 10,
-	SCPI_ERR_DEVICE = 11,
-	SCPI_ERR_BUSY = 12,
-	SCPI_ERR_MAX = 13,
-};
-
-enum scpi_std_cmd {
-	SCPI_CMD_INVALID = 0,
-	SCPI_CMD_SCPI_READY = 1,
-	SCPI_CMD_SCPI_CAPABILITIES = 2,
-	SCPI_CMD_SET_CSS_PWR_STATE = 3,
-	SCPI_CMD_GET_CSS_PWR_STATE = 4,
-	SCPI_CMD_SET_SYS_PWR_STATE = 5,
-	SCPI_CMD_SET_CPU_TIMER = 6,
-	SCPI_CMD_CANCEL_CPU_TIMER = 7,
-	SCPI_CMD_DVFS_CAPABILITIES = 8,
-	SCPI_CMD_GET_DVFS_INFO = 9,
-	SCPI_CMD_SET_DVFS = 10,
-	SCPI_CMD_GET_DVFS = 11,
-	SCPI_CMD_GET_DVFS_STAT = 12,
-	SCPI_CMD_CLOCK_CAPABILITIES = 13,
-	SCPI_CMD_GET_CLOCK_INFO = 14,
-	SCPI_CMD_SET_CLOCK_VALUE = 15,
-	SCPI_CMD_GET_CLOCK_VALUE = 16,
-	SCPI_CMD_PSU_CAPABILITIES = 17,
-	SCPI_CMD_GET_PSU_INFO = 18,
-	SCPI_CMD_SET_PSU = 19,
-	SCPI_CMD_GET_PSU = 20,
-	SCPI_CMD_SENSOR_CAPABILITIES = 21,
-	SCPI_CMD_SENSOR_INFO = 22,
-	SCPI_CMD_SENSOR_VALUE = 23,
-	SCPI_CMD_SENSOR_CFG_PERIODIC = 24,
-	SCPI_CMD_SENSOR_CFG_BOUNDS = 25,
-	SCPI_CMD_SENSOR_ASYNC_VALUE = 26,
-	SCPI_CMD_SET_DEVICE_PWR_STATE = 27,
-	SCPI_CMD_GET_DEVICE_PWR_STATE = 28,
-	SCPI_CMD_COUNT = 29,
-};
-
-enum legacy_scpi_std_cmd {
-	LEGACY_SCPI_CMD_INVALID = 0,
-	LEGACY_SCPI_CMD_SCPI_READY = 1,
-	LEGACY_SCPI_CMD_SCPI_CAPABILITIES = 2,
-	LEGACY_SCPI_CMD_EVENT = 3,
-	LEGACY_SCPI_CMD_SET_CSS_PWR_STATE = 4,
-	LEGACY_SCPI_CMD_GET_CSS_PWR_STATE = 5,
-	LEGACY_SCPI_CMD_CFG_PWR_STATE_STAT = 6,
-	LEGACY_SCPI_CMD_GET_PWR_STATE_STAT = 7,
-	LEGACY_SCPI_CMD_SYS_PWR_STATE = 8,
-	LEGACY_SCPI_CMD_L2_READY = 9,
-	LEGACY_SCPI_CMD_SET_AP_TIMER = 10,
-	LEGACY_SCPI_CMD_CANCEL_AP_TIME = 11,
-	LEGACY_SCPI_CMD_DVFS_CAPABILITIES = 12,
-	LEGACY_SCPI_CMD_GET_DVFS_INFO = 13,
-	LEGACY_SCPI_CMD_SET_DVFS = 14,
-	LEGACY_SCPI_CMD_GET_DVFS = 15,
-	LEGACY_SCPI_CMD_GET_DVFS_STAT = 16,
-	LEGACY_SCPI_CMD_SET_RTC = 17,
-	LEGACY_SCPI_CMD_GET_RTC = 18,
-	LEGACY_SCPI_CMD_CLOCK_CAPABILITIES = 19,
-	LEGACY_SCPI_CMD_SET_CLOCK_INDEX = 20,
-	LEGACY_SCPI_CMD_SET_CLOCK_VALUE = 21,
-	LEGACY_SCPI_CMD_GET_CLOCK_VALUE = 22,
-	LEGACY_SCPI_CMD_PSU_CAPABILITIES = 23,
-	LEGACY_SCPI_CMD_SET_PSU = 24,
-	LEGACY_SCPI_CMD_GET_PSU = 25,
-	LEGACY_SCPI_CMD_SENSOR_CAPABILITIES = 26,
-	LEGACY_SCPI_CMD_SENSOR_INFO = 27,
-	LEGACY_SCPI_CMD_SENSOR_VALUE = 28,
-	LEGACY_SCPI_CMD_SENSOR_CFG_PERIODIC = 29,
-	LEGACY_SCPI_CMD_SENSOR_CFG_BOUNDS = 30,
-	LEGACY_SCPI_CMD_SENSOR_ASYNC_VALUE = 31,
-	LEGACY_SCPI_CMD_COUNT = 32,
-};
-
-enum scpi_drv_cmds {
-	CMD_SCPI_CAPABILITIES = 0,
-	CMD_GET_CLOCK_INFO = 1,
-	CMD_GET_CLOCK_VALUE = 2,
-	CMD_SET_CLOCK_VALUE = 3,
-	CMD_GET_DVFS = 4,
-	CMD_SET_DVFS = 5,
-	CMD_GET_DVFS_INFO = 6,
-	CMD_SENSOR_CAPABILITIES = 7,
-	CMD_SENSOR_INFO = 8,
-	CMD_SENSOR_VALUE = 9,
-	CMD_SET_DEVICE_PWR_STATE = 10,
-	CMD_GET_DEVICE_PWR_STATE = 11,
-	CMD_MAX_COUNT = 12,
-};
-
-struct scpi_xfer {
-	u32 slot;
-	u32 cmd;
-	u32 status;
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int tx_len;
-	unsigned int rx_len;
-	struct list_head node;
-	struct completion done;
-};
-
-struct scpi_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	void *tx_payload;
-	void *rx_payload;
-	struct list_head rx_pending;
-	struct list_head xfers_list;
-	struct scpi_xfer *xfers;
-	spinlock_t rx_lock;
-	struct mutex xfers_lock;
-	u8 token;
-};
-
-struct scpi_drvinfo {
-	u32 protocol_version;
-	u32 firmware_version;
-	bool is_legacy;
-	int num_chans;
-	int *commands;
-	long unsigned int cmd_priority[1];
-	atomic_t next_chan;
-	struct scpi_ops *scpi_ops;
-	struct scpi_chan *channels;
-	struct scpi_dvfs_info *dvfs[8];
-};
-
-struct scpi_shared_mem {
-	__le32 command;
-	__le32 status;
-	u8 payload[0];
-};
-
-struct legacy_scpi_shared_mem {
-	__le32 status;
-	u8 payload[0];
-};
-
-struct scp_capabilities {
-	__le32 protocol_version;
-	__le32 event_version;
-	__le32 platform_version;
-	__le32 commands[4];
-};
-
-struct clk_get_info {
-	__le16 id;
-	__le16 flags;
-	__le32 min_rate;
-	__le32 max_rate;
-	u8 name[20];
-};
-
-struct clk_set_value {
-	__le16 id;
-	__le16 reserved;
-	__le32 rate;
-};
-
-struct legacy_clk_set_value {
-	__le32 rate;
-	__le16 id;
-	__le16 reserved;
-};
-
-struct dvfs_info {
-	u8 domain;
-	u8 opp_count;
-	__le16 latency;
-	struct {
-		__le32 freq;
-		__le32 m_volt;
-	} opps[16];
-};
-
-struct dvfs_set {
-	u8 domain;
-	u8 index;
-};
-
-struct _scpi_sensor_info {
-	__le16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct dev_pstate_set {
-	__le16 dev_id;
-	u8 pstate;
-} __attribute__((packed));
-
-struct scpi_pm_domain {
-	struct generic_pm_domain genpd;
-	struct scpi_ops *ops;
-	u32 domain;
-	char name[30];
-};
-
-enum scpi_power_domain_state {
-	SCPI_PD_STATE_ON = 0,
-	SCPI_PD_STATE_OFF = 3,
-};
-
-enum dmi_entry_type {
-	DMI_ENTRY_BIOS = 0,
-	DMI_ENTRY_SYSTEM = 1,
-	DMI_ENTRY_BASEBOARD = 2,
-	DMI_ENTRY_CHASSIS = 3,
-	DMI_ENTRY_PROCESSOR = 4,
-	DMI_ENTRY_MEM_CONTROLLER = 5,
-	DMI_ENTRY_MEM_MODULE = 6,
-	DMI_ENTRY_CACHE = 7,
-	DMI_ENTRY_PORT_CONNECTOR = 8,
-	DMI_ENTRY_SYSTEM_SLOT = 9,
-	DMI_ENTRY_ONBOARD_DEVICE = 10,
-	DMI_ENTRY_OEMSTRINGS = 11,
-	DMI_ENTRY_SYSCONF = 12,
-	DMI_ENTRY_BIOS_LANG = 13,
-	DMI_ENTRY_GROUP_ASSOC = 14,
-	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
-	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
-	DMI_ENTRY_MEM_DEVICE = 17,
-	DMI_ENTRY_32_MEM_ERROR = 18,
-	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
-	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
-	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
-	DMI_ENTRY_PORTABLE_BATTERY = 22,
-	DMI_ENTRY_SYSTEM_RESET = 23,
-	DMI_ENTRY_HW_SECURITY = 24,
-	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
-	DMI_ENTRY_VOLTAGE_PROBE = 26,
-	DMI_ENTRY_COOLING_DEV = 27,
-	DMI_ENTRY_TEMP_PROBE = 28,
-	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
-	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
-	DMI_ENTRY_BIS_ENTRY = 31,
-	DMI_ENTRY_SYSTEM_BOOT = 32,
-	DMI_ENTRY_MGMT_DEV = 33,
-	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
-	DMI_ENTRY_MGMT_DEV_THRES = 35,
-	DMI_ENTRY_MEM_CHANNEL = 36,
-	DMI_ENTRY_IPMI_DEV = 37,
-	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
-	DMI_ENTRY_ADDITIONAL = 39,
-	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
-	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
-	DMI_ENTRY_INACTIVE = 126,
-	DMI_ENTRY_END_OF_TABLE = 127,
-};
-
 struct dmi_memdev_info {
 	const char *device;
 	const char *bank;
@@ -92659,264 +116088,14 @@
 	u8 type;
 };
 
-struct dmi_device_attribute {
-	struct device_attribute dev_attr;
-	int field;
-};
-
-struct mafield {
-	const char *prefix;
-	int field;
-};
-
-struct firmware_map_entry {
-	u64 start;
-	u64 end;
-	const char *type;
-	struct list_head list;
-	struct kobject kobj;
-};
-
-struct memmap_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct firmware_map_entry *, char *);
-};
-
-enum rpi_firmware_property_status {
-	RPI_FIRMWARE_STATUS_REQUEST = 0,
-	RPI_FIRMWARE_STATUS_SUCCESS = 2147483648,
-	RPI_FIRMWARE_STATUS_ERROR = 2147483649,
-};
-
-struct rpi_firmware_property_tag_header {
-	u32 tag;
-	u32 buf_size;
-	u32 req_resp_size;
-};
-
-struct rpi_firmware___2 {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	struct completion c;
-	u32 enabled;
-};
-
-struct qcom_scm_hdcp_req {
-	u32 addr;
-	u32 val;
-};
-
-struct qcom_scm_vmperm {
-	int vmid;
-	int perm;
-};
-
-enum qcom_scm_ocmem_client {
-	QCOM_SCM_OCMEM_UNUSED_ID = 0,
-	QCOM_SCM_OCMEM_GRAPHICS_ID = 1,
-	QCOM_SCM_OCMEM_VIDEO_ID = 2,
-	QCOM_SCM_OCMEM_LP_AUDIO_ID = 3,
-	QCOM_SCM_OCMEM_SENSORS_ID = 4,
-	QCOM_SCM_OCMEM_OTHER_OS_ID = 5,
-	QCOM_SCM_OCMEM_DEBUG_ID = 6,
-};
-
-enum qcom_scm_ice_cipher {
-	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
-	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
-	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
-	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
-};
-
-enum qcom_scm_convention {
-	SMC_CONVENTION_UNKNOWN = 0,
-	SMC_CONVENTION_LEGACY = 1,
-	SMC_CONVENTION_ARM_32 = 2,
-	SMC_CONVENTION_ARM_64 = 3,
-};
-
-enum qcom_scm_arg_types {
-	QCOM_SCM_VAL = 0,
-	QCOM_SCM_RO = 1,
-	QCOM_SCM_RW = 2,
-	QCOM_SCM_BUFVAL = 3,
-};
-
-struct qcom_scm_desc {
-	u32 svc;
-	u32 cmd;
-	u32 arginfo;
-	u64 args[10];
-	u32 owner;
-};
-
-struct qcom_scm_res {
-	u64 result[3];
-};
-
-struct qcom_scm {
-	struct device *dev;
-	struct clk *core_clk;
-	struct clk *iface_clk;
-	struct clk *bus_clk;
-	struct reset_controller_dev reset;
-	u64 dload_mode_addr;
-};
-
-struct qcom_scm_current_perm_info {
-	__le32 vmid;
-	__le32 perm;
-	__le64 ctx;
-	__le32 ctx_size;
-	__le32 unused;
-};
-
-struct qcom_scm_mem_map_info {
-	__le64 mem_addr;
-	__le64 mem_size;
-};
-
-struct qcom_scm_wb_entry {
-	int flag;
-	void *entry;
-};
-
-struct arm_smccc_quirk {
-	int id;
-	union {
-		long unsigned int a6;
-	} state;
-};
-
-struct arm_smccc_args {
-	long unsigned int args[8];
-};
-
-struct scm_legacy_command {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 resp_hdr_offset;
-	__le32 id;
-	__le32 buf[0];
-};
-
-struct scm_legacy_response {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 is_complete;
-};
-
-struct meson_sm_cmd {
-	unsigned int index;
-	u32 smc_id;
-};
-
-struct meson_sm_chip {
-	unsigned int shmem_size;
-	u32 cmd_shmem_in_base;
-	u32 cmd_shmem_out_base;
-	struct meson_sm_cmd cmd[0];
-};
-
-struct meson_sm_firmware___2 {
-	const struct meson_sm_chip *chip;
-	void *sm_shmem_in_base;
-	void *sm_shmem_out_base;
-};
-
-struct bmp_header {
-	u16 id;
-	u32 size;
-} __attribute__((packed));
-
-typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
-
-typedef struct {
-	efi_guid_t guid;
-	u64 table;
-} efi_config_table_64_t;
-
-typedef struct {
-	efi_guid_t guid;
-	u32 table;
-} efi_config_table_32_t;
-
-typedef union {
-	struct {
-		efi_guid_t guid;
-		void *table;
-	};
-	efi_config_table_32_t mixed_mode;
-} efi_config_table_t;
-
-typedef struct {
-	efi_guid_t guid;
-	long unsigned int *ptr;
-	const char name[16];
-} efi_config_table_type_t;
-
-typedef struct {
-	u16 version;
-	u16 length;
-	u32 runtime_services_supported;
-} efi_rt_properties_table_t;
-
-struct efivar_operations {
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_set_variable_t *set_variable_nonblocking;
-	efi_query_variable_store_t *query_variable_store;
-};
-
-struct efivars {
-	struct kset *kset;
-	struct kobject *kobject;
-	const struct efivar_operations *ops;
-};
-
-struct efi_variable {
-	efi_char16_t VariableName[512];
-	efi_guid_t VendorGuid;
-	long unsigned int DataSize;
-	__u8 Data[1024];
-	efi_status_t Status;
-	__u32 Attributes;
-} __attribute__((packed));
-
-struct efivar_entry {
-	struct efi_variable var;
-	struct list_head list;
-	struct kobject kobj;
-	bool scanning;
-	bool deleting;
-};
-
-struct linux_efi_random_seed {
-	u32 size;
-	u8 bits[0];
-};
-
-struct linux_efi_memreserve {
-	int size;
-	atomic_t count;
-	phys_addr_t next;
-	struct {
-		phys_addr_t base;
-		phys_addr_t size;
-	} entry[0];
-};
-
-struct efi_generic_dev_path {
-	u8 type;
-	u8 sub_type;
-	u16 length;
-};
-
-struct variable_validate {
-	efi_guid_t vendor;
-	char *name;
-	bool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);
+struct simplefb_format {
+	const char *name;
+	u32 bits_per_pixel;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	u32 fourcc;
 };
 
 typedef struct {
@@ -92929,35 +116108,6 @@
 
 typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
 
-typedef u64 efi_physical_addr_t;
-
-typedef struct {
-	u64 length;
-	u64 data;
-} efi_capsule_block_desc_t;
-
-struct efi_memory_map_data {
-	phys_addr_t phys_map;
-	long unsigned int size;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-	long unsigned int flags;
-};
-
-struct efi_mem_range {
-	struct range range;
-	u64 attribute;
-};
-
-enum {
-	SYSTAB = 0,
-	MMBASE = 1,
-	MMSIZE = 2,
-	DCSIZE = 3,
-	DCVERS = 4,
-	PARAMCOUNT = 5,
-};
-
 struct efi_system_resource_entry_v1 {
 	efi_guid_t fw_class;
 	u32 fw_type;
@@ -92989,743 +116139,110 @@
 	ssize_t (*store)(struct esre_entry *, const char *, size_t);
 };
 
-struct cper_sec_proc_generic {
-	u64 validation_bits;
-	u8 proc_type;
-	u8 proc_isa;
-	u8 proc_error_type;
-	u8 operation;
-	u8 flags;
-	u8 level;
-	u16 reserved;
-	u64 cpu_version;
-	char cpu_brand[128];
-	u64 proc_id;
-	u64 target_addr;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 ip;
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
 };
 
-struct cper_sec_proc_arm {
-	u32 validation_bits;
-	u16 err_info_num;
-	u16 context_info_num;
-	u32 section_length;
-	u8 affinity_level;
-	u8 reserved[3];
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
 };
 
-struct cper_mem_err_compact {
-	u64 validation_bits;
-	u16 node;
-	u16 card;
-	u16 module;
-	u16 bank;
-	u16 device;
-	u16 row;
-	u16 column;
-	u16 bit_pos;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 target_id;
-	u16 rank;
-	u16 mem_array_handle;
-	u16 mem_dev_handle;
-	u8 extended;
-} __attribute__((packed));
-
-struct cper_sec_pcie {
-	u64 validation_bits;
-	u32 port_type;
-	struct {
-		u8 minor;
-		u8 major;
-		u8 reserved[2];
-	} version;
-	u16 command;
-	u16 status;
-	u32 reserved;
-	struct {
-		u16 vendor_id;
-		u16 device_id;
-		u8 class_code[3];
-		u8 function;
-		u8 device;
-		u16 segment;
-		u8 bus;
-		u8 secondary_bus;
-		u16 slot;
-		u8 reserved;
-	} __attribute__((packed)) device_id;
-	struct {
-		u32 lower;
-		u32 upper;
-	} serial_number;
-	struct {
-		u16 secondary_status;
-		u16 control;
-	} bridge;
-	u8 capability[60];
-	u8 aer_info[96];
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
 };
 
-struct cper_sec_fw_err_rec_ref {
-	u8 record_type;
-	u8 revision;
-	u8 reserved[6];
-	u64 record_identifier;
-	guid_t record_identifier_guid;
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
 };
 
-struct acpi_hest_generic_data {
-	u8 section_type[16];
-	u32 error_severity;
-	u16 revision;
-	u8 validation_bits;
-	u8 flags;
-	u32 error_data_length;
-	u8 fru_id[16];
-	u8 fru_text[20];
-};
-
-struct acpi_hest_generic_data_v300 {
-	u8 section_type[16];
-	u32 error_severity;
-	u16 revision;
-	u8 validation_bits;
-	u8 flags;
-	u32 error_data_length;
-	u8 fru_id[16];
-	u8 fru_text[20];
-	u64 time_stamp;
-};
-
-enum efi_rts_ids {
-	EFI_NONE = 0,
-	EFI_GET_TIME = 1,
-	EFI_SET_TIME = 2,
-	EFI_GET_WAKEUP_TIME = 3,
-	EFI_SET_WAKEUP_TIME = 4,
-	EFI_GET_VARIABLE = 5,
-	EFI_GET_NEXT_VARIABLE = 6,
-	EFI_SET_VARIABLE = 7,
-	EFI_QUERY_VARIABLE_INFO = 8,
-	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
-	EFI_RESET_SYSTEM = 10,
-	EFI_UPDATE_CAPSULE = 11,
-	EFI_QUERY_CAPSULE_CAPS = 12,
-};
-
-struct efi_runtime_work {
-	void *arg1;
-	void *arg2;
-	void *arg3;
-	void *arg4;
-	void *arg5;
-	efi_status_t status;
-	struct work_struct work;
-	enum efi_rts_ids efi_rts_id;
-	struct completion efi_rts_comp;
-};
-
-typedef void *efi_event_t;
-
-typedef void (*efi_event_notify_t)(efi_event_t, void *);
-
-typedef enum {
-	EfiTimerCancel = 0,
-	EfiTimerPeriodic = 1,
-	EfiTimerRelative = 2,
-} EFI_TIMER_DELAY;
-
-typedef void *efi_handle_t;
-
-typedef struct efi_generic_dev_path efi_device_path_protocol_t;
-
-union efi_boot_services {
-	struct {
-		efi_table_hdr_t hdr;
-		void *raise_tpl;
-		void *restore_tpl;
-		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
-		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
-		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
-		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
-		efi_status_t (*free_pool)(void *);
-		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
-		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
-		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
-		void *signal_event;
-		efi_status_t (*close_event)(efi_event_t);
-		void *check_event;
-		void *install_protocol_interface;
-		void *reinstall_protocol_interface;
-		void *uninstall_protocol_interface;
-		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
-		void *__reserved;
-		void *register_protocol_notify;
-		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
-		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
-		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
-		void *load_image;
-		void *start_image;
-		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
-		void *unload_image;
-		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
-		void *get_next_monotonic_count;
-		efi_status_t (*stall)(long unsigned int);
-		void *set_watchdog_timer;
-		void *connect_controller;
-		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
-		void *open_protocol;
-		void *close_protocol;
-		void *open_protocol_information;
-		void *protocols_per_handle;
-		void *locate_handle_buffer;
-		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
-		void *install_multiple_protocol_interfaces;
-		void *uninstall_multiple_protocol_interfaces;
-		void *calculate_crc32;
-		void *copy_mem;
-		void *set_mem;
-		void *create_event_ex;
-	};
-	struct {
-		efi_table_hdr_t hdr;
-		u32 raise_tpl;
-		u32 restore_tpl;
-		u32 allocate_pages;
-		u32 free_pages;
-		u32 get_memory_map;
-		u32 allocate_pool;
-		u32 free_pool;
-		u32 create_event;
-		u32 set_timer;
-		u32 wait_for_event;
-		u32 signal_event;
-		u32 close_event;
-		u32 check_event;
-		u32 install_protocol_interface;
-		u32 reinstall_protocol_interface;
-		u32 uninstall_protocol_interface;
-		u32 handle_protocol;
-		u32 __reserved;
-		u32 register_protocol_notify;
-		u32 locate_handle;
-		u32 locate_device_path;
-		u32 install_configuration_table;
-		u32 load_image;
-		u32 start_image;
-		u32 exit;
-		u32 unload_image;
-		u32 exit_boot_services;
-		u32 get_next_monotonic_count;
-		u32 stall;
-		u32 set_watchdog_timer;
-		u32 connect_controller;
-		u32 disconnect_controller;
-		u32 open_protocol;
-		u32 close_protocol;
-		u32 open_protocol_information;
-		u32 protocols_per_handle;
-		u32 locate_handle_buffer;
-		u32 locate_protocol;
-		u32 install_multiple_protocol_interfaces;
-		u32 uninstall_multiple_protocol_interfaces;
-		u32 calculate_crc32;
-		u32 copy_mem;
-		u32 set_mem;
-		u32 create_event_ex;
-	} mixed_mode;
-};
-
-typedef union efi_boot_services efi_boot_services_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 fw_vendor;
-	u32 fw_revision;
-	u32 con_in_handle;
-	u32 con_in;
-	u32 con_out_handle;
-	u32 con_out;
-	u32 stderr_handle;
-	u32 stderr;
-	u32 runtime;
-	u32 boottime;
-	u32 nr_tables;
-	u32 tables;
-} efi_system_table_32_t;
-
-typedef struct {
-	u16 scan_code;
-	efi_char16_t unicode_char;
-} efi_input_key_t;
-
-union efi_simple_text_input_protocol;
-
-typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
-
-union efi_simple_text_input_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
-		efi_event_t wait_for_key;
-	};
-	struct {
-		u32 reset;
-		u32 read_keystroke;
-		u32 wait_for_key;
-	} mixed_mode;
-};
-
-union efi_simple_text_output_protocol;
-
-typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
-
-union efi_simple_text_output_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
-		void *test_string;
-	};
-	struct {
-		u32 reset;
-		u32 output_string;
-		u32 test_string;
-	} mixed_mode;
-};
-
-typedef union {
-	struct {
-		efi_table_hdr_t hdr;
-		long unsigned int fw_vendor;
-		u32 fw_revision;
-		long unsigned int con_in_handle;
-		efi_simple_text_input_protocol_t *con_in;
-		long unsigned int con_out_handle;
-		efi_simple_text_output_protocol_t *con_out;
-		long unsigned int stderr_handle;
-		long unsigned int stderr;
-		efi_runtime_services_t *runtime;
-		efi_boot_services_t *boottime;
-		long unsigned int nr_tables;
-		long unsigned int tables;
-	};
-	efi_system_table_32_t mixed_mode;
-} efi_system_table_t;
-
-struct cper_arm_err_info {
-	u8 version;
-	u8 length;
-	u16 validation_bits;
-	u8 type;
-	u16 multiple_error;
-	u8 flags;
-	u64 error_info;
-	u64 virt_fault_addr;
-	u64 physical_fault_addr;
-} __attribute__((packed));
-
-struct cper_arm_ctx_info {
-	u16 version;
-	u16 type;
-	u32 size;
-};
-
-typedef long unsigned int psci_fn(long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-enum psci_function {
-	PSCI_FN_CPU_SUSPEND = 0,
-	PSCI_FN_CPU_ON = 1,
-	PSCI_FN_CPU_OFF = 2,
-	PSCI_FN_MIGRATE = 3,
-	PSCI_FN_MAX = 4,
-};
-
-typedef int (*psci_initcall_t)(const struct device_node *);
-
-struct mrq_ping_request {
-	uint32_t challenge;
-};
-
-struct mrq_ping_response {
-	uint32_t reply;
-};
-
-struct mrq_query_tag_request {
-	uint32_t addr;
-};
-
-struct mrq_query_fw_tag_response {
-	uint8_t tag[32];
-};
-
-struct mrq_query_abi_request {
-	uint32_t mrq;
-};
-
-struct mrq_query_abi_response {
-	int32_t status;
-};
-
-struct tegra_ivc_header;
-
-struct tegra_ivc {
-	struct device *peer;
-	struct {
-		struct tegra_ivc_header *channel;
-		unsigned int position;
-		dma_addr_t phys;
-	} rx;
-	struct {
-		struct tegra_ivc_header *channel;
-		unsigned int position;
-		dma_addr_t phys;
-	} tx;
-	void (*notify)(struct tegra_ivc *, void *);
-	void *notify_data;
-	unsigned int num_frames;
-	size_t frame_size;
-};
-
-typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int, struct tegra_bpmp_channel *, void *);
-
-struct tegra_bpmp_mrq {
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
 	struct list_head list;
-	unsigned int mrq;
-	tegra_bpmp_mrq_handler_t handler;
-	void *data;
+	spinlock_t list_lock;
+	bool initialized;
 };
 
-struct tegra210_bpmp {
-	void *atomics;
-	void *arb_sema;
-	struct irq_data *tx_irq_data;
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
 };
 
-struct tegra186_bpmp {
-	struct tegra_bpmp *parent;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} tx;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} rx;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
 };
 
-enum mrq_debugfs_commands {
-	CMD_DEBUGFS_READ = 1,
-	CMD_DEBUGFS_WRITE = 2,
-	CMD_DEBUGFS_DUMPDIR = 3,
-	CMD_DEBUGFS_MAX = 4,
+struct hidraw_devinfo {
+	__u32 bustype;
+	__s16 vendor;
+	__s16 product;
 };
 
-struct cmd_debugfs_fileop_request {
-	uint32_t fnameaddr;
-	uint32_t fnamelen;
-	uint32_t dataaddr;
-	uint32_t datalen;
+struct hidraw_report {
+	__u8 *value;
+	int len;
 };
 
-struct cmd_debugfs_dumpdir_request {
-	uint32_t dataaddr;
-	uint32_t datalen;
-};
-
-struct cmd_debugfs_fileop_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct cmd_debugfs_dumpdir_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct mrq_debugfs_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debugfs_fileop_request fop;
-		struct cmd_debugfs_dumpdir_request dumpdir;
-	};
-};
-
-struct mrq_debugfs_response {
-	int32_t reserved;
-	union {
-		struct cmd_debugfs_fileop_response fop;
-		struct cmd_debugfs_dumpdir_response dumpdir;
-	};
-};
-
-enum mrq_debug_commands {
-	CMD_DEBUG_OPEN_RO = 0,
-	CMD_DEBUG_OPEN_WO = 1,
-	CMD_DEBUG_READ = 2,
-	CMD_DEBUG_WRITE = 3,
-	CMD_DEBUG_CLOSE = 4,
-	CMD_DEBUG_MAX = 5,
-};
-
-struct cmd_debug_fopen_request {
-	char name[116];
-};
-
-struct cmd_debug_fopen_response {
-	uint32_t fd;
-	uint32_t datalen;
-};
-
-struct cmd_debug_fread_request {
-	uint32_t fd;
-};
-
-struct cmd_debug_fread_response {
-	uint32_t readlen;
-	char data[116];
-};
-
-struct cmd_debug_fwrite_request {
-	uint32_t fd;
-	uint32_t datalen;
-	char data[108];
-};
-
-struct cmd_debug_fclose_request {
-	uint32_t fd;
-};
-
-struct mrq_debug_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debug_fopen_request fop;
-		struct cmd_debug_fread_request frd;
-		struct cmd_debug_fwrite_request fwr;
-		struct cmd_debug_fclose_request fcl;
-	};
-};
-
-struct mrq_debug_response {
-	union {
-		struct cmd_debug_fopen_response fop;
-		struct cmd_debug_fread_response frd;
-	};
-};
-
-struct seqbuf {
-	char *buf;
-	size_t pos;
-	size_t size;
-};
-
-struct tegra_ivc_header {
-	union {
-		struct {
-			u32 count;
-			u32 state;
-		};
-		u8 pad[64];
-	} tx;
-	union {
-		u32 count;
-		u8 pad[64];
-	} rx;
-};
-
-enum tegra_ivc_state {
-	TEGRA_IVC_STATE_ESTABLISHED = 0,
-	TEGRA_IVC_STATE_SYNC = 1,
-	TEGRA_IVC_STATE_ACK = 2,
-};
-
-struct of_timer_irq {
-	int irq;
-	int index;
-	int percpu;
-	const char *name;
-	long unsigned int flags;
-	irq_handler_t handler;
-};
-
-struct of_timer_base {
-	void *base;
-	const char *name;
-	int index;
-};
-
-struct of_timer_clk {
-	struct clk *clk;
-	const char *name;
-	int index;
-	long unsigned int rate;
-	long unsigned int period;
-};
-
-struct timer_of {
-	unsigned int flags;
-	struct device_node *np;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device clkevt;
-	struct of_timer_base of_base;
-	struct of_timer_irq of_irq;
-	struct of_timer_clk of_clk;
-	void *private_data;
-	long: 64;
-	long: 64;
-};
-
-typedef int (*of_init_fn_1_ret)(struct device_node *);
-
-struct clocksource_mmio {
-	void *reg;
-	struct clocksource clksrc;
-};
-
-struct rk_timer {
-	void *base;
-	void *ctrl;
-	struct clk *clk;
-	struct clk *pclk;
-	u32 freq;
-	int irq;
-};
-
-struct rk_clkevt {
-	struct clock_event_device ce;
-	struct rk_timer timer;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum arch_timer_reg {
-	ARCH_TIMER_REG_CTRL = 0,
-	ARCH_TIMER_REG_TVAL = 1,
-};
-
-enum arch_timer_spi_nr {
-	ARCH_TIMER_PHYS_SPI = 0,
-	ARCH_TIMER_VIRT_SPI = 1,
-	ARCH_TIMER_MAX_TIMER_SPI = 2,
-};
-
-enum arch_timer_erratum_match_type {
-	ate_match_dt = 0,
-	ate_match_local_cap_id = 1,
-	ate_match_acpi_oem_info = 2,
-};
-
-struct arch_timer_erratum_workaround {
-	enum arch_timer_erratum_match_type match_type;
-	const void *id;
-	const char *desc;
-	u32 (*read_cntp_tval_el0)();
-	u32 (*read_cntv_tval_el0)();
-	u64 (*read_cntpct_el0)();
-	u64 (*read_cntvct_el0)();
-	int (*set_next_event_phys)(long unsigned int, struct clock_event_device *);
-	int (*set_next_event_virt)(long unsigned int, struct clock_event_device *);
-	bool disable_compat_vdso;
-};
-
-struct arch_timer {
-	void *base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device evt;
-};
-
-struct ate_acpi_oem_info {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-};
-
-typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, const void *);
-
-struct sp804_timer {
-	int load;
-	int load_h;
-	int value;
-	int value_h;
-	int ctrl;
-	int intclr;
-	int ris;
-	int mis;
-	int bgload;
-	int bgload_h;
-	int timer_base[2];
-	int width;
-};
-
-struct sp804_clkevt {
-	void *base;
-	void *load;
-	void *load_h;
-	void *value;
-	void *value_h;
-	void *ctrl;
-	void *intclr;
-	void *ris;
-	void *mis;
-	void *bgload;
-	void *bgload_h;
-	long unsigned int reload;
-	int width;
-};
-
-struct alias_prop {
-	struct list_head link;
-	const char *alias;
-	struct device_node *np;
-	int id;
-	char stem[0];
-};
-
-struct of_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct device_node *local_node;
+struct hidraw_list {
+	struct hidraw_report buffer[64];
+	int head;
+	int tail;
+	struct fasync_struct *fasync;
+	struct hidraw *hidraw;
+	struct list_head node;
+	struct mutex read_mutex;
 };
 
 struct supplier_bindings {
 	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
-};
-
-struct of_changeset_entry {
-	struct list_head node;
-	long unsigned int action;
-	struct device_node *np;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-struct of_changeset {
-	struct list_head entries;
+	bool optional;
+	bool node_not_dev;
 };
 
 struct of_bus___2 {
@@ -93734,1407 +116251,29 @@
 	int (*translate)(__be32 *, u64, int);
 };
 
-struct of_bus {
-	const char *name;
-	const char *addresses;
-	int (*match)(struct device_node *);
-	void (*count_cells)(struct device_node *, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-	bool has_flags;
-	unsigned int (*get_flags)(const __be32 *);
-};
-
-struct of_intc_desc {
-	struct list_head list;
-	of_irq_init_cb_t irq_init_cb;
-	struct device_node *dev;
-	struct device_node *interrupt_parent;
-};
-
 struct rmem_assigned_device {
 	struct device *dev;
 	struct reserved_mem *rmem;
 	struct list_head list;
 };
 
-enum of_overlay_notify_action {
-	OF_OVERLAY_PRE_APPLY = 0,
-	OF_OVERLAY_POST_APPLY = 1,
-	OF_OVERLAY_PRE_REMOVE = 2,
-	OF_OVERLAY_POST_REMOVE = 3,
-};
-
-struct of_overlay_notify_data {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct target {
-	struct device_node *np;
-	bool in_livetree;
-};
-
-struct fragment {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct overlay_changeset {
-	int id;
-	struct list_head ovcs_list;
-	const void *fdt;
-	struct device_node *overlay_tree;
-	int count;
-	struct fragment *fragments;
-	bool symbols_fragment;
-	struct of_changeset cset;
-};
-
-enum vchiq_reason {
-	VCHIQ_SERVICE_OPENED = 0,
-	VCHIQ_SERVICE_CLOSED = 1,
-	VCHIQ_MESSAGE_AVAILABLE = 2,
-	VCHIQ_BULK_TRANSMIT_DONE = 3,
-	VCHIQ_BULK_RECEIVE_DONE = 4,
-	VCHIQ_BULK_TRANSMIT_ABORTED = 5,
-	VCHIQ_BULK_RECEIVE_ABORTED = 6,
-};
-
-enum vchiq_status {
-	VCHIQ_ERROR = 4294967295,
-	VCHIQ_SUCCESS = 0,
-	VCHIQ_RETRY = 1,
-};
-
-enum vchiq_bulk_mode {
-	VCHIQ_BULK_MODE_CALLBACK = 0,
-	VCHIQ_BULK_MODE_BLOCKING = 1,
-	VCHIQ_BULK_MODE_NOCALLBACK = 2,
-	VCHIQ_BULK_MODE_WAITING = 3,
-};
-
-enum vchiq_service_option {
-	VCHIQ_SERVICE_OPTION_AUTOCLOSE = 0,
-	VCHIQ_SERVICE_OPTION_SLOT_QUOTA = 1,
-	VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA = 2,
-	VCHIQ_SERVICE_OPTION_SYNCHRONOUS = 3,
-	VCHIQ_SERVICE_OPTION_TRACE = 4,
-};
-
-struct vchiq_header {
-	int msgid;
-	unsigned int size;
-	char data[0];
-};
-
-struct vchiq_service_base {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-};
-
-struct vchiq_service_params_kernel {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-typedef uint32_t BITSET_T;
-
-enum {
-	DEBUG_ENTRIES = 0,
-	DEBUG_SLOT_HANDLER_COUNT = 1,
-	DEBUG_SLOT_HANDLER_LINE = 2,
-	DEBUG_PARSE_LINE = 3,
-	DEBUG_PARSE_HEADER = 4,
-	DEBUG_PARSE_MSGID = 5,
-	DEBUG_AWAIT_COMPLETION_LINE = 6,
-	DEBUG_DEQUEUE_MESSAGE_LINE = 7,
-	DEBUG_SERVICE_CALLBACK_LINE = 8,
-	DEBUG_MSG_QUEUE_FULL_COUNT = 9,
-	DEBUG_COMPLETION_QUEUE_FULL_COUNT = 10,
-	DEBUG_MAX = 11,
-};
-
-enum vchiq_connstate {
-	VCHIQ_CONNSTATE_DISCONNECTED = 0,
-	VCHIQ_CONNSTATE_CONNECTING = 1,
-	VCHIQ_CONNSTATE_CONNECTED = 2,
-	VCHIQ_CONNSTATE_PAUSING = 3,
-	VCHIQ_CONNSTATE_PAUSE_SENT = 4,
-	VCHIQ_CONNSTATE_PAUSED = 5,
-	VCHIQ_CONNSTATE_RESUMING = 6,
-	VCHIQ_CONNSTATE_PAUSE_TIMEOUT = 7,
-	VCHIQ_CONNSTATE_RESUME_TIMEOUT = 8,
-};
-
-enum {
-	VCHIQ_SRVSTATE_FREE = 0,
-	VCHIQ_SRVSTATE_HIDDEN = 1,
-	VCHIQ_SRVSTATE_LISTENING = 2,
-	VCHIQ_SRVSTATE_OPENING = 3,
-	VCHIQ_SRVSTATE_OPEN = 4,
-	VCHIQ_SRVSTATE_OPENSYNC = 5,
-	VCHIQ_SRVSTATE_CLOSESENT = 6,
-	VCHIQ_SRVSTATE_CLOSERECVD = 7,
-	VCHIQ_SRVSTATE_CLOSEWAIT = 8,
-	VCHIQ_SRVSTATE_CLOSED = 9,
-};
-
-enum {
-	VCHIQ_POLL_TERMINATE = 0,
-	VCHIQ_POLL_REMOVE = 1,
-	VCHIQ_POLL_TXNOTIFY = 2,
-	VCHIQ_POLL_RXNOTIFY = 3,
-	VCHIQ_POLL_COUNT = 4,
-};
-
-enum vchiq_bulk_dir {
-	VCHIQ_BULK_TRANSMIT = 0,
-	VCHIQ_BULK_RECEIVE = 1,
-};
-
-typedef void (*vchiq_userdata_term)(void *);
-
-struct vchiq_bulk {
-	short int mode;
-	short int dir;
-	void *userdata;
-	dma_addr_t data;
-	int size;
-	void *remote_data;
-	int remote_size;
-	int actual;
-};
-
-struct vchiq_bulk_queue {
-	int local_insert;
-	int remote_insert;
-	int process;
-	int remote_notify;
-	int remove;
-	struct vchiq_bulk bulks[4];
-};
-
-struct remote_event {
-	int armed;
-	int fired;
-	u32 __unused;
-};
-
-struct vchiq_slot {
-	char data[4096];
-};
-
-struct vchiq_slot_info {
-	short int use_count;
-	short int release_count;
-};
-
-struct service_stats_struct {
-	int quota_stalls;
-	int slot_stalls;
-	int bulk_stalls;
-	int error_count;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int bulk_tx_count;
-	int bulk_rx_count;
-	int bulk_aborted_count;
-	uint64_t ctrl_tx_bytes;
-	uint64_t ctrl_rx_bytes;
-	uint64_t bulk_tx_bytes;
-	uint64_t bulk_rx_bytes;
-};
-
-struct vchiq_state;
-
-struct vchiq_instance;
-
-struct vchiq_service {
-	struct vchiq_service_base base;
-	unsigned int handle;
-	struct kref ref_count;
-	struct callback_head rcu;
-	int srvstate;
-	vchiq_userdata_term userdata_term;
-	unsigned int localport;
-	unsigned int remoteport;
-	int public_fourcc;
-	int client_id;
-	char auto_close;
-	char sync;
-	char closing;
-	char trace;
-	atomic_t poll_flags;
-	short int version;
-	short int version_min;
-	short int peer_version;
-	struct vchiq_state *state;
-	struct vchiq_instance *instance;
-	int service_use_count;
-	struct vchiq_bulk_queue bulk_tx;
-	struct vchiq_bulk_queue bulk_rx;
-	struct completion remove_event;
-	struct completion bulk_remove_event;
-	struct mutex bulk_mutex;
-	struct service_stats_struct stats;
-	int msg_queue_read;
-	int msg_queue_write;
-	struct completion msg_queue_pop;
-	struct completion msg_queue_push;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct state_stats_struct {
-	int slot_stalls;
-	int data_stalls;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int error_count;
-};
-
-struct vchiq_service_quota {
-	short unsigned int slot_quota;
-	short unsigned int slot_use_count;
-	short unsigned int message_quota;
-	short unsigned int message_use_count;
-	struct completion quota_event;
-	int previous_tx_index;
-};
-
-struct opaque_platform_state;
-
-struct vchiq_shared_state;
-
-struct vchiq_state {
-	int id;
-	int initialised;
-	enum vchiq_connstate conn_state;
-	short int version_common;
-	struct vchiq_shared_state *local;
-	struct vchiq_shared_state *remote;
-	struct vchiq_slot *slot_data;
-	short unsigned int default_slot_quota;
-	short unsigned int default_message_quota;
-	struct completion connect;
-	struct mutex mutex;
-	struct vchiq_instance **instance;
-	struct task_struct *slot_handler_thread;
-	struct task_struct *recycle_thread;
-	struct task_struct *sync_thread;
-	wait_queue_head_t trigger_event;
-	wait_queue_head_t recycle_event;
-	wait_queue_head_t sync_trigger_event;
-	wait_queue_head_t sync_release_event;
-	char *tx_data;
-	char *rx_data;
-	struct vchiq_slot_info *rx_info;
-	struct mutex slot_mutex;
-	struct mutex recycle_mutex;
-	struct mutex sync_mutex;
-	struct mutex bulk_transfer_mutex;
-	int rx_pos;
-	int local_tx_pos;
-	int slot_queue_available;
-	int poll_needed;
-	int previous_data_index;
-	short unsigned int data_use_count;
-	short unsigned int data_quota;
-	atomic_t poll_services[128];
-	int unused_service;
-	struct completion slot_available_event;
-	struct completion slot_remove_event;
-	struct completion data_quota_event;
-	struct state_stats_struct stats;
-	struct vchiq_service *services[4096];
-	struct vchiq_service_quota service_quotas[4096];
-	struct vchiq_slot_info slot_info[128];
-	struct opaque_platform_state *platform_state;
-};
-
-struct vchiq_shared_state {
-	int initialised;
-	int slot_first;
-	int slot_last;
-	int slot_sync;
-	struct remote_event trigger;
-	int tx_pos;
-	struct remote_event recycle;
-	int slot_queue_recycle;
-	struct remote_event sync_trigger;
-	struct remote_event sync_release;
-	int slot_queue[64];
-	int debug[11];
-};
-
-struct vchiq_slot_zero {
-	int magic;
-	short int version;
-	short int version_min;
-	int slot_zero_size;
-	int slot_size;
-	int max_slots;
-	int max_slots_per_side;
-	int platform_data[2];
-	struct vchiq_shared_state master;
-	struct vchiq_shared_state slave;
-	struct vchiq_slot_info slots[128];
-};
-
-struct bulk_waiter {
-	struct vchiq_bulk *bulk;
-	struct completion event;
-	int actual;
-};
-
-struct vchiq_config {
-	unsigned int max_msg_size;
-	unsigned int bulk_threshold;
-	unsigned int max_outstanding_bulks;
-	unsigned int max_services;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_open_payload {
-	int fourcc;
-	int client_id;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_openack_payload {
-	short int version;
-};
-
-enum {
-	QMFLAGS_IS_BLOCKING = 1,
-	QMFLAGS_NO_MUTEX_LOCK = 2,
-	QMFLAGS_NO_MUTEX_UNLOCK = 4,
-};
-
-struct vchiq_element {
-	const void *data;
-	unsigned int size;
-};
-
-struct vchiq_completion_data_kernel {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_debugfs_node {
-	struct dentry *dentry;
-};
-
-struct vchiq_instance {
-	struct vchiq_state *state;
-	struct vchiq_completion_data_kernel completions[128];
-	int completion_insert;
-	int completion_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct mutex completion_mutex;
-	int connected;
-	int closing;
-	int pid;
-	int mark;
-	int use_close_delivered;
-	int trace;
-	struct list_head bulk_waiter_list;
-	struct mutex bulk_waiter_list_mutex;
-	struct vchiq_debugfs_node debugfs_node;
-};
-
-struct vchiq_service_params {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service {
-	struct vchiq_service_params params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_queue_message {
-	unsigned int handle;
-	unsigned int count;
-	const struct vchiq_element *elements;
-};
-
-struct vchiq_queue_bulk_transfer {
-	unsigned int handle;
-	void *data;
-	unsigned int size;
-	void *userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_completion_data {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_await_completion {
-	unsigned int count;
-	struct vchiq_completion_data *buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	void **msgbufs;
-};
-
-struct vchiq_dequeue_message {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	void *buf;
-};
-
-struct vchiq_get_config {
-	unsigned int config_size;
-	struct vchiq_config *pconfig;
-};
-
-struct vchiq_set_service_option {
-	unsigned int handle;
-	enum vchiq_service_option option;
-	int value;
-};
-
-enum USE_TYPE_E {
-	USE_TYPE_SERVICE = 0,
-	USE_TYPE_VCHIQ = 1,
-};
-
-struct vchiq_arm_state {
-	struct task_struct *ka_thread;
-	struct completion ka_evt;
-	atomic_t ka_use_count;
-	atomic_t ka_use_ack_count;
-	atomic_t ka_release_count;
-	rwlock_t susp_res_lock;
-	struct vchiq_state *state;
-	int videocore_use_count;
-	int peer_use_count;
-	int first_connect;
-};
-
-struct vchiq_drvdata {
-	const unsigned int cache_line_size;
-	struct rpi_firmware *fw;
-};
-
-struct user_service {
-	struct vchiq_service *service;
-	void *userdata;
-	struct vchiq_instance *instance;
-	char is_vchi;
-	char dequeue_pending;
-	char close_pending;
-	int message_available_pos;
-	int msg_insert;
-	int msg_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct completion close_event;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct bulk_waiter_node {
-	struct bulk_waiter bulk_waiter;
-	int pid;
-	struct list_head list;
-};
-
-struct dump_context {
-	char *buf;
-	size_t actual;
-	size_t space;
-	loff_t offset;
-};
-
-struct vchiq_io_copy_callback_context {
-	struct vchiq_element *element;
-	size_t element_offset;
-	long unsigned int elements_to_go;
-};
-
-struct vchiq_completion_data32 {
-	enum vchiq_reason reason;
-	compat_uptr_t header;
-	compat_uptr_t service_userdata;
-	compat_uptr_t bulk_userdata;
-};
-
-struct vchiq_service_params32 {
-	int fourcc;
-	compat_uptr_t callback;
-	compat_uptr_t userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service32 {
-	struct vchiq_service_params32 params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_element32 {
-	compat_uptr_t data;
-	unsigned int size;
-};
-
-struct vchiq_queue_message32 {
-	unsigned int handle;
-	unsigned int count;
-	compat_uptr_t elements;
-};
-
-struct vchiq_queue_bulk_transfer32 {
-	unsigned int handle;
-	compat_uptr_t data;
-	unsigned int size;
-	compat_uptr_t userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_await_completion32 {
-	unsigned int count;
-	compat_uptr_t buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	compat_uptr_t msgbufs;
-};
-
-struct vchiq_dequeue_message32 {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	compat_uptr_t buf;
-};
-
-struct vchiq_get_config32 {
-	unsigned int config_size;
-	compat_uptr_t pconfig;
-};
-
-struct service_data_struct {
-	int fourcc;
-	int clientid;
-	int use_count;
-};
-
-struct pagelist {
-	u32 length;
-	u16 type;
-	u16 offset;
-	u32 addrs[1];
-};
-
-struct vchiq_2835_state {
-	int inited;
-	struct vchiq_arm_state arm_state;
-};
-
-struct vchiq_pagelist_info {
-	struct pagelist *pagelist;
-	size_t pagelist_buffer_size;
-	dma_addr_t dma_addr;
-	enum dma_data_direction dma_dir;
-	unsigned int num_pages;
-	unsigned int pages_need_release;
-	struct page **pages;
-	struct scatterlist *scatterlist;
-	unsigned int scatterlist_mapped;
-};
-
-struct vchiq_debugfs_log_entry {
-	const char *name;
-	void *plevel;
-};
-
-typedef void (*VCHIQ_CONNECTED_CALLBACK_T)();
-
-enum ec_status {
-	EC_RES_SUCCESS = 0,
-	EC_RES_INVALID_COMMAND = 1,
-	EC_RES_ERROR = 2,
-	EC_RES_INVALID_PARAM = 3,
-	EC_RES_ACCESS_DENIED = 4,
-	EC_RES_INVALID_RESPONSE = 5,
-	EC_RES_INVALID_VERSION = 6,
-	EC_RES_INVALID_CHECKSUM = 7,
-	EC_RES_IN_PROGRESS = 8,
-	EC_RES_UNAVAILABLE = 9,
-	EC_RES_TIMEOUT = 10,
-	EC_RES_OVERFLOW = 11,
-	EC_RES_INVALID_HEADER = 12,
-	EC_RES_REQUEST_TRUNCATED = 13,
-	EC_RES_RESPONSE_TOO_BIG = 14,
-	EC_RES_BUS_ERROR = 15,
-	EC_RES_BUSY = 16,
-	EC_RES_INVALID_HEADER_VERSION = 17,
-	EC_RES_INVALID_HEADER_CRC = 18,
-	EC_RES_INVALID_DATA_CRC = 19,
-	EC_RES_DUP_UNAVAILABLE = 20,
-};
-
-enum host_event_code {
-	EC_HOST_EVENT_LID_CLOSED = 1,
-	EC_HOST_EVENT_LID_OPEN = 2,
-	EC_HOST_EVENT_POWER_BUTTON = 3,
-	EC_HOST_EVENT_AC_CONNECTED = 4,
-	EC_HOST_EVENT_AC_DISCONNECTED = 5,
-	EC_HOST_EVENT_BATTERY_LOW = 6,
-	EC_HOST_EVENT_BATTERY_CRITICAL = 7,
-	EC_HOST_EVENT_BATTERY = 8,
-	EC_HOST_EVENT_THERMAL_THRESHOLD = 9,
-	EC_HOST_EVENT_DEVICE = 10,
-	EC_HOST_EVENT_THERMAL = 11,
-	EC_HOST_EVENT_USB_CHARGER = 12,
-	EC_HOST_EVENT_KEY_PRESSED = 13,
-	EC_HOST_EVENT_INTERFACE_READY = 14,
-	EC_HOST_EVENT_KEYBOARD_RECOVERY = 15,
-	EC_HOST_EVENT_THERMAL_SHUTDOWN = 16,
-	EC_HOST_EVENT_BATTERY_SHUTDOWN = 17,
-	EC_HOST_EVENT_THROTTLE_START = 18,
-	EC_HOST_EVENT_THROTTLE_STOP = 19,
-	EC_HOST_EVENT_HANG_DETECT = 20,
-	EC_HOST_EVENT_HANG_REBOOT = 21,
-	EC_HOST_EVENT_PD_MCU = 22,
-	EC_HOST_EVENT_BATTERY_STATUS = 23,
-	EC_HOST_EVENT_PANIC = 24,
-	EC_HOST_EVENT_KEYBOARD_FASTBOOT = 25,
-	EC_HOST_EVENT_RTC = 26,
-	EC_HOST_EVENT_MKBP = 27,
-	EC_HOST_EVENT_USB_MUX = 28,
-	EC_HOST_EVENT_MODE_CHANGE = 29,
-	EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT = 30,
-	EC_HOST_EVENT_WOV = 31,
-	EC_HOST_EVENT_INVALID = 32,
-};
-
-struct ec_host_request {
-	uint8_t struct_version;
-	uint8_t checksum;
-	uint16_t command;
-	uint8_t command_version;
-	uint8_t reserved;
-	uint16_t data_len;
-};
-
-struct ec_params_hello {
-	uint32_t in_data;
-};
-
-struct ec_response_hello {
-	uint32_t out_data;
-};
-
-struct ec_params_get_cmd_versions {
-	uint8_t cmd;
-};
-
-struct ec_response_get_cmd_versions {
-	uint32_t version_mask;
-};
-
-enum ec_comms_status {
-	EC_COMMS_STATUS_PROCESSING = 1,
-};
-
-struct ec_response_get_comms_status {
-	uint32_t flags;
-};
-
-struct ec_response_get_protocol_info {
-	uint32_t protocol_versions;
-	uint16_t max_request_packet_size;
-	uint16_t max_response_packet_size;
-	uint32_t flags;
-};
-
-enum ec_led_colors {
-	EC_LED_COLOR_RED = 0,
-	EC_LED_COLOR_GREEN = 1,
-	EC_LED_COLOR_BLUE = 2,
-	EC_LED_COLOR_YELLOW = 3,
-	EC_LED_COLOR_WHITE = 4,
-	EC_LED_COLOR_AMBER = 5,
-	EC_LED_COLOR_COUNT = 6,
-};
-
-enum motionsense_command {
-	MOTIONSENSE_CMD_DUMP = 0,
-	MOTIONSENSE_CMD_INFO = 1,
-	MOTIONSENSE_CMD_EC_RATE = 2,
-	MOTIONSENSE_CMD_SENSOR_ODR = 3,
-	MOTIONSENSE_CMD_SENSOR_RANGE = 4,
-	MOTIONSENSE_CMD_KB_WAKE_ANGLE = 5,
-	MOTIONSENSE_CMD_DATA = 6,
-	MOTIONSENSE_CMD_FIFO_INFO = 7,
-	MOTIONSENSE_CMD_FIFO_FLUSH = 8,
-	MOTIONSENSE_CMD_FIFO_READ = 9,
-	MOTIONSENSE_CMD_PERFORM_CALIB = 10,
-	MOTIONSENSE_CMD_SENSOR_OFFSET = 11,
-	MOTIONSENSE_CMD_LIST_ACTIVITIES = 12,
-	MOTIONSENSE_CMD_SET_ACTIVITY = 13,
-	MOTIONSENSE_CMD_LID_ANGLE = 14,
-	MOTIONSENSE_CMD_FIFO_INT_ENABLE = 15,
-	MOTIONSENSE_CMD_SPOOF = 16,
-	MOTIONSENSE_CMD_TABLET_MODE_LID_ANGLE = 17,
-	MOTIONSENSE_CMD_SENSOR_SCALE = 18,
-	MOTIONSENSE_NUM_CMDS = 19,
-};
-
-struct ec_response_motion_sensor_data {
-	uint8_t flags;
-	uint8_t sensor_num;
-	union {
-		int16_t data[3];
-		struct {
-			uint16_t reserved;
-			uint32_t timestamp;
-		} __attribute__((packed));
-		struct {
-			uint8_t activity;
-			uint8_t state;
-			int16_t add_info[2];
-		};
-	};
-} __attribute__((packed));
-
-struct ec_response_motion_sense_fifo_info {
-	uint16_t size;
-	uint16_t count;
-	uint32_t timestamp;
-	uint16_t total_lost;
-	uint16_t lost[0];
-} __attribute__((packed));
-
-struct ec_response_motion_sense_fifo_data {
-	uint32_t number_data;
-	struct ec_response_motion_sensor_data data[0];
-};
-
-struct ec_motion_sense_activity {
-	uint8_t sensor_num;
-	uint8_t activity;
-	uint8_t enable;
-	uint8_t reserved;
-	uint16_t parameters[3];
-};
-
-struct ec_params_motion_sense {
-	uint8_t cmd;
-	union {
-		struct {
-			uint8_t max_sensor_count;
-		} dump;
-		struct {
-			int16_t data;
-		} kb_wake_angle;
-		struct {
-			uint8_t sensor_num;
-		} info;
-		struct {
-			uint8_t sensor_num;
-		} info_3;
-		struct {
-			uint8_t sensor_num;
-		} data;
-		struct {
-			uint8_t sensor_num;
-		} fifo_flush;
-		struct {
-			uint8_t sensor_num;
-		} perform_calib;
-		struct {
-			uint8_t sensor_num;
-		} list_activities;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} ec_rate;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} sensor_odr;
-		struct {
-			uint8_t sensor_num;
-			uint8_t roundup;
-			uint16_t reserved;
-			int32_t data;
-		} sensor_range;
-		struct {
-			uint8_t sensor_num;
-			uint16_t flags;
-			int16_t temp;
-			int16_t offset[3];
-		} __attribute__((packed)) sensor_offset;
-		struct {
-			uint8_t sensor_num;
-			uint16_t flags;
-			int16_t temp;
-			uint16_t scale[3];
-		} __attribute__((packed)) sensor_scale;
-		struct {
-			uint32_t max_data_vector;
-		} fifo_read;
-		struct ec_motion_sense_activity set_activity;
-		struct {
-			int8_t enable;
-		} fifo_int_enable;
-		struct {
-			uint8_t sensor_id;
-			uint8_t spoof_enable;
-			uint8_t reserved;
-			int16_t components[3];
-		} __attribute__((packed)) spoof;
-		struct {
-			int16_t lid_angle;
-			int16_t hys_degree;
-		} tablet_mode_threshold;
-	};
-} __attribute__((packed));
-
-struct ec_response_motion_sense {
-	union {
-		struct {
-			uint8_t module_flags;
-			uint8_t sensor_count;
-			struct ec_response_motion_sensor_data sensor[0];
-		} __attribute__((packed)) dump;
-		struct {
-			uint8_t type;
-			uint8_t location;
-			uint8_t chip;
-		} info;
-		struct {
-			uint8_t type;
-			uint8_t location;
-			uint8_t chip;
-			uint32_t min_frequency;
-			uint32_t max_frequency;
-			uint32_t fifo_max_event_count;
-		} info_3;
-		struct ec_response_motion_sensor_data data;
-		struct {
-			int32_t ret;
-		} ec_rate;
-		struct {
-			int32_t ret;
-		} sensor_odr;
-		struct {
-			int32_t ret;
-		} sensor_range;
-		struct {
-			int32_t ret;
-		} kb_wake_angle;
-		struct {
-			int32_t ret;
-		} fifo_int_enable;
-		struct {
-			int32_t ret;
-		} spoof;
-		struct {
-			int16_t temp;
-			int16_t offset[3];
-		} sensor_offset;
-		struct {
-			int16_t temp;
-			int16_t offset[3];
-		} perform_calib;
-		struct {
-			int16_t temp;
-			uint16_t scale[3];
-		} sensor_scale;
-		struct ec_response_motion_sense_fifo_info fifo_info;
-		struct ec_response_motion_sense_fifo_info fifo_flush;
-		struct ec_response_motion_sense_fifo_data fifo_read;
-		struct {
-			uint16_t reserved;
-			uint32_t enabled;
-			uint32_t disabled;
-		} __attribute__((packed)) list_activities;
-		struct {
-			uint16_t value;
-		} lid_angle;
-		struct {
-			uint16_t lid_angle;
-			uint16_t hys_degree;
-		} tablet_mode_threshold;
-	};
-};
-
-enum ec_temp_thresholds {
-	EC_TEMP_THRESH_WARN = 0,
-	EC_TEMP_THRESH_HIGH = 1,
-	EC_TEMP_THRESH_HALT = 2,
-	EC_TEMP_THRESH_COUNT = 3,
-};
-
-enum ec_mkbp_event {
-	EC_MKBP_EVENT_KEY_MATRIX = 0,
-	EC_MKBP_EVENT_HOST_EVENT = 1,
-	EC_MKBP_EVENT_SENSOR_FIFO = 2,
-	EC_MKBP_EVENT_BUTTON = 3,
-	EC_MKBP_EVENT_SWITCH = 4,
-	EC_MKBP_EVENT_FINGERPRINT = 5,
-	EC_MKBP_EVENT_SYSRQ = 6,
-	EC_MKBP_EVENT_HOST_EVENT64 = 7,
-	EC_MKBP_EVENT_CEC_EVENT = 8,
-	EC_MKBP_EVENT_CEC_MESSAGE = 9,
-	EC_MKBP_EVENT_COUNT = 10,
-};
-
-union ec_response_get_next_data_v1 {
-	uint8_t key_matrix[16];
-	uint32_t host_event;
-	uint64_t host_event64;
-	struct {
-		uint8_t reserved[3];
-		struct ec_response_motion_sense_fifo_info info;
-	} __attribute__((packed)) sensor_fifo;
-	uint32_t buttons;
-	uint32_t switches;
-	uint32_t fp_events;
-	uint32_t sysrq;
-	uint32_t cec_events;
-	uint8_t cec_message[16];
-};
-
-struct ec_response_get_next_event_v1 {
-	uint8_t event_type;
-	union ec_response_get_next_data_v1 data;
-} __attribute__((packed));
-
-struct ec_response_host_event_mask {
-	uint32_t mask;
-};
-
-enum {
-	EC_MSG_TX_HEADER_BYTES = 3,
-	EC_MSG_TX_TRAILER_BYTES = 1,
-	EC_MSG_TX_PROTO_BYTES = 4,
-	EC_MSG_RX_PROTO_BYTES = 3,
-	EC_PROTO2_MSG_BYTES = 256,
-	EC_MAX_MSG_BYTES = 65536,
-};
-
-struct cros_ec_command {
-	uint32_t version;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	uint32_t result;
-	uint8_t data[0];
-};
-
-struct platform_device___2;
-
-struct cros_ec_device {
-	const char *phys_name;
-	struct device *dev;
-	bool was_wake_device;
-	struct class *cros_class;
-	int (*cmd_readmem)(struct cros_ec_device *, unsigned int, unsigned int, void *);
-	u16 max_request;
-	u16 max_response;
-	u16 max_passthru;
-	u16 proto_version;
-	void *priv;
-	int irq;
-	u8 *din;
-	u8 *dout;
-	int din_size;
-	int dout_size;
-	bool wake_enabled;
-	bool suspended;
-	int (*cmd_xfer)(struct cros_ec_device *, struct cros_ec_command *);
-	int (*pkt_xfer)(struct cros_ec_device *, struct cros_ec_command *);
-	struct mutex lock;
-	u8 mkbp_event_supported;
-	bool host_sleep_v1;
-	struct blocking_notifier_head event_notifier;
-	struct ec_response_get_next_event_v1 event_data;
-	int event_size;
-	u32 host_event_wake_mask;
-	u32 last_resume_result;
-	ktime_t last_event_time;
-	struct notifier_block notifier_ready;
-	struct platform_device___2 *ec;
-	struct platform_device___2 *pd;
-};
-
-struct cros_ec_debugfs;
-
-struct cros_ec_dev {
-	struct device class_dev;
-	struct cros_ec_device *ec_dev;
-	struct device *dev;
-	struct cros_ec_debugfs *debug_info;
-	bool has_kb_wake_angle;
-	u16 cmd_offset;
-	u32 features[2];
-};
-
-struct trace_event_raw_cros_ec_request_start {
-	struct trace_entry ent;
-	uint32_t version;
-	uint32_t offset;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	char __data[0];
-};
-
-struct trace_event_raw_cros_ec_request_done {
-	struct trace_entry ent;
-	uint32_t version;
-	uint32_t offset;
-	uint32_t command;
-	uint32_t outsize;
-	uint32_t insize;
-	uint32_t result;
-	int retval;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cros_ec_request_start {};
-
-struct trace_event_data_offsets_cros_ec_request_done {};
-
-typedef void (*btf_trace_cros_ec_request_start)(void *, struct cros_ec_command *);
-
-typedef void (*btf_trace_cros_ec_request_done)(void *, struct cros_ec_command *, int);
-
-struct platform_mhu_link {
-	int irq;
-	void *tx_reg;
-	void *rx_reg;
-};
-
-struct platform_mhu {
-	void *base;
-	struct platform_mhu_link mlink[3];
-	struct mbox_chan chan[3];
-	struct mbox_controller mbox;
-};
-
-struct acpi_table_pcct {
-	struct acpi_table_header header;
-	u32 flags;
-	u64 reserved;
-};
-
-enum acpi_pcct_type {
-	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
-	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
-	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
-	ACPI_PCCT_TYPE_RESERVED = 5,
-};
-
-struct acpi_pcct_subspace {
-	struct acpi_subtable_header header;
-	u8 reserved[6];
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_hw_reduced_type2 {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-	struct acpi_generic_address platform_ack_register;
-	u64 ack_preserve_mask;
-	u64 ack_write_mask;
-} __attribute__((packed));
-
-struct bcm2835_mbox {
-	void *regs;
-	spinlock_t lock;
-	struct mbox_controller controller;
-};
-
-struct slimpro_mbox_chan {
-	struct device *dev;
-	struct mbox_chan *chan;
-	void *reg;
-	int irq;
-	u32 rx_msg[3];
-};
-
-struct slimpro_mbox {
-	struct mbox_controller mb_ctrl;
-	struct slimpro_mbox_chan mc[8];
-	struct mbox_chan chans[8];
-};
-
-struct hi3660_chan_info {
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-};
-
-struct hi3660_mbox {
-	struct device *dev;
-	void *base;
-	struct mbox_chan chan[32];
-	struct hi3660_chan_info mchan[32];
-	struct mbox_controller controller;
-};
-
-struct hi6220_mbox;
-
-struct hi6220_mbox_chan {
-	unsigned int dir;
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-	unsigned int slot;
-	struct hi6220_mbox *parent;
-};
-
-struct hi6220_mbox {
-	struct device *dev;
-	int irq;
-	bool tx_irq_mode;
-	void *ipc;
-	void *base;
-	unsigned int chan_num;
-	struct hi6220_mbox_chan *mchan;
-	void *irq_map_chan[32];
-	struct mbox_chan *chan;
-	struct mbox_controller controller;
-};
-
-struct tegra_hsp;
-
-struct tegra_hsp_channel {
-	struct tegra_hsp *hsp;
-	struct mbox_chan *chan;
-	void *regs;
-};
-
-struct tegra_hsp_soc;
-
-struct tegra_hsp_mailbox;
-
-struct tegra_hsp {
-	struct device *dev;
-	const struct tegra_hsp_soc *soc;
-	struct mbox_controller mbox_db;
-	struct mbox_controller mbox_sm;
-	void *regs;
-	unsigned int doorbell_irq;
-	unsigned int *shared_irqs;
-	unsigned int shared_irq;
-	unsigned int num_sm;
-	unsigned int num_as;
-	unsigned int num_ss;
-	unsigned int num_db;
-	unsigned int num_si;
-	spinlock_t lock;
-	struct list_head doorbells;
-	struct tegra_hsp_mailbox *mailboxes;
-	long unsigned int mask;
-};
-
-struct tegra_hsp_doorbell {
-	struct tegra_hsp_channel channel;
-	struct list_head list;
-	const char *name;
-	unsigned int master;
-	unsigned int index;
-};
-
-struct tegra_hsp_mailbox {
-	struct tegra_hsp_channel channel;
-	unsigned int index;
-	bool producer;
-};
-
-struct tegra_hsp_db_map {
-	const char *name;
-	unsigned int master;
-	unsigned int index;
-};
-
-struct tegra_hsp_soc {
-	const struct tegra_hsp_db_map *map;
-	bool has_per_mb_ie;
-};
-
-struct sun6i_msgbox {
-	struct mbox_controller controller;
-	struct clk *clk;
-	spinlock_t lock;
-	void *regs;
-};
-
-struct hwspinlock___2;
-
-struct hwspinlock_ops {
-	int (*trylock)(struct hwspinlock___2 *);
-	void (*unlock)(struct hwspinlock___2 *);
-	void (*relax)(struct hwspinlock___2 *);
-};
-
-struct hwspinlock_device;
-
-struct hwspinlock___2 {
-	struct hwspinlock_device *bank;
-	spinlock_t lock;
-	void *priv;
-};
-
-struct hwspinlock_device {
-	struct device *dev;
-	const struct hwspinlock_ops *ops;
-	int base_id;
-	int num_locks;
-	struct hwspinlock___2 lock[0];
-};
-
-struct regmap_field___2;
-
-struct devfreq_freqs {
-	long unsigned int old;
-	long unsigned int new;
-};
-
-struct devfreq_passive_data {
-	struct devfreq *parent;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	struct devfreq *this;
-	struct notifier_block nb;
-};
-
-struct trace_event_raw_devfreq_monitor {
-	struct trace_entry ent;
-	long unsigned int freq;
-	long unsigned int busy_time;
-	long unsigned int total_time;
-	unsigned int polling_ms;
-	u32 __data_loc_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devfreq_monitor {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
-
-struct devfreq_notifier_devres {
-	struct devfreq *devfreq;
-	struct notifier_block *nb;
-	unsigned int list;
-};
-
-struct devfreq_event_desc;
-
-struct devfreq_event_dev {
-	struct list_head node;
-	struct device dev;
-	struct mutex lock;
-	u32 enable_count;
-	const struct devfreq_event_desc *desc;
-};
-
-struct devfreq_event_ops;
-
-struct devfreq_event_desc {
-	const char *name;
-	u32 event_type;
-	void *driver_data;
-	const struct devfreq_event_ops *ops;
-};
-
-struct devfreq_event_data {
-	long unsigned int load_count;
-	long unsigned int total_count;
-};
-
-struct devfreq_event_ops {
-	int (*enable)(struct devfreq_event_dev *);
-	int (*disable)(struct devfreq_event_dev *);
-	int (*reset)(struct devfreq_event_dev *);
-	int (*set_event)(struct devfreq_event_dev *);
-	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
-};
-
-struct devfreq_simple_ondemand_data {
-	unsigned int upthreshold;
-	unsigned int downdifferential;
-};
-
-struct userspace_data {
-	long unsigned int user_frequency;
-	bool valid;
+struct generic_sub_driver {
+	u32 type;
+	char *name;
+	acpi_handle *handle;
+	struct acpi_device *device;
+	struct platform_driver *driver;
+	int (*init)(struct generic_sub_driver *);
+	void (*notify)(struct generic_sub_driver *, u32);
+	u8 acpi_notify_installed;
 };
 
 union extcon_property_value {
 	int intval;
 };
 
-struct extcon_cable;
-
-struct extcon_dev___2 {
-	const char *name;
-	const unsigned int *supported_cable;
-	const u32 *mutually_exclusive;
-	struct device dev;
-	struct raw_notifier_head nh_all;
-	struct raw_notifier_head *nh;
-	struct list_head entry;
-	int max_supported;
-	spinlock_t lock;
-	u32 state;
-	struct device_type extcon_dev_type;
-	struct extcon_cable *cables;
-	struct attribute_group attr_g_muex;
-	struct attribute **attrs_muex;
-	struct device_attribute *d_attrs_muex;
-};
-
 struct extcon_cable {
-	struct extcon_dev___2 *edev;
+	struct extcon_dev *edev;
 	int cable_index;
 	struct attribute_group attr_g;
 	struct device_attribute attr_name;
@@ -95156,787 +116295,15 @@
 	const char *name;
 };
 
-struct extcon_dev_notifier_devres {
-	struct extcon_dev___2 *edev;
-	unsigned int id;
-	struct notifier_block *nb;
-};
-
-struct mtk_smi_larb_iommu {
-	struct device *dev;
-	unsigned int mmu;
-};
-
-enum mtk_smi_gen {
-	MTK_SMI_GEN1 = 0,
-	MTK_SMI_GEN2 = 1,
-};
-
-struct mtk_smi_common_plat {
-	enum mtk_smi_gen gen;
-	bool has_gals;
-	u32 bus_sel;
-};
-
-struct mtk_smi_larb_gen {
-	int port_in_larb[17];
-	void (*config_port)(struct device *);
-	unsigned int larb_direct_to_common_mask;
-	bool has_gals;
-};
-
-struct mtk_smi {
-	struct device *dev;
-	struct clk *clk_apb;
-	struct clk *clk_smi;
-	struct clk *clk_gals0;
-	struct clk *clk_gals1;
-	struct clk *clk_async;
-	union {
-		void *smi_ao_base;
-		void *base;
-	};
-	const struct mtk_smi_common_plat *plat;
-};
-
-struct mtk_smi_larb {
-	struct mtk_smi smi;
-	void *base;
-	struct device *smi_common_dev;
-	const struct mtk_smi_larb_gen *larb_gen;
-	int larbid;
-	u32 *mmu;
-};
-
-struct tegra186_mc_client {
-	const char *name;
-	unsigned int sid;
-	struct {
-		unsigned int override;
-		unsigned int security;
-	} regs;
-};
-
-struct tegra186_mc_soc {
-	const struct tegra186_mc_client *clients;
-	unsigned int num_clients;
-};
-
-struct tegra186_mc {
-	struct device *dev;
-	void *regs;
-	const struct tegra186_mc_soc *soc;
-};
-
-struct emc_dvfs_latency {
-	uint32_t freq;
-	uint32_t latency;
-};
-
-struct mrq_emc_dvfs_latency_response {
-	uint32_t num_pairs;
-	struct emc_dvfs_latency pairs[14];
-};
-
-struct tegra186_emc_dvfs {
-	long unsigned int latency;
-	long unsigned int rate;
-};
-
-struct tegra186_emc {
-	struct tegra_bpmp *bpmp;
-	struct device *dev;
-	struct clk *clk;
-	struct tegra186_emc_dvfs *dvfs;
-	unsigned int num_dvfs;
-	struct {
-		struct dentry *root;
-		long unsigned int min_rate;
-		long unsigned int max_rate;
-	} debugfs;
-};
-
-enum vme_resource_type {
-	VME_MASTER = 0,
-	VME_SLAVE = 1,
-	VME_DMA = 2,
-	VME_LM = 3,
-};
-
-struct vme_dma_attr {
-	u32 type;
-	void *private;
-};
-
-struct vme_resource {
-	enum vme_resource_type type;
-	struct list_head *entry;
-};
-
-struct vme_bridge;
-
-struct vme_dev {
-	int num;
-	struct vme_bridge *bridge;
-	struct device dev;
-	struct list_head drv_list;
-	struct list_head bridge_list;
-};
-
-struct vme_callback {
-	void (*func)(int, int, void *);
-	void *priv_data;
-};
-
-struct vme_irq {
-	int count;
-	struct vme_callback callback[256];
-};
-
-struct vme_slave_resource;
-
-struct vme_master_resource;
-
-struct vme_dma_list;
-
-struct vme_lm_resource;
-
-struct vme_bridge {
-	char name[16];
-	int num;
-	struct list_head master_resources;
-	struct list_head slave_resources;
-	struct list_head dma_resources;
-	struct list_head lm_resources;
-	struct list_head vme_error_handlers;
-	struct list_head devices;
-	struct device *parent;
-	void *driver_priv;
-	struct list_head bus_list;
-	struct vme_irq irq[7];
-	struct mutex irq_mtx;
-	int (*slave_get)(struct vme_slave_resource *, int *, long long unsigned int *, long long unsigned int *, dma_addr_t *, u32 *, u32 *);
-	int (*slave_set)(struct vme_slave_resource *, int, long long unsigned int, long long unsigned int, dma_addr_t, u32, u32);
-	int (*master_get)(struct vme_master_resource *, int *, long long unsigned int *, long long unsigned int *, u32 *, u32 *, u32 *);
-	int (*master_set)(struct vme_master_resource *, int, long long unsigned int, long long unsigned int, u32, u32, u32);
-	ssize_t (*master_read)(struct vme_master_resource *, void *, size_t, loff_t);
-	ssize_t (*master_write)(struct vme_master_resource *, void *, size_t, loff_t);
-	unsigned int (*master_rmw)(struct vme_master_resource *, unsigned int, unsigned int, unsigned int, loff_t);
-	int (*dma_list_add)(struct vme_dma_list *, struct vme_dma_attr *, struct vme_dma_attr *, size_t);
-	int (*dma_list_exec)(struct vme_dma_list *);
-	int (*dma_list_empty)(struct vme_dma_list *);
-	void (*irq_set)(struct vme_bridge *, int, int, int);
-	int (*irq_generate)(struct vme_bridge *, int, int);
-	int (*lm_set)(struct vme_lm_resource *, long long unsigned int, u32, u32);
-	int (*lm_get)(struct vme_lm_resource *, long long unsigned int *, u32 *, u32 *);
-	int (*lm_attach)(struct vme_lm_resource *, int, void (*)(void *), void *);
-	int (*lm_detach)(struct vme_lm_resource *, int);
-	int (*slot_get)(struct vme_bridge *);
-	void * (*alloc_consistent)(struct device *, size_t, dma_addr_t *);
-	void (*free_consistent)(struct device *, size_t, void *, dma_addr_t);
-};
-
-struct vme_driver {
-	const char *name;
-	int (*match)(struct vme_dev *);
-	int (*probe)(struct vme_dev *);
-	int (*remove)(struct vme_dev *);
-	struct device_driver driver;
-	struct list_head devices;
-};
-
-struct vme_master_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	spinlock_t lock;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
-	u32 width_attr;
-	struct resource bus_resource;
-	void *kern_base;
-};
-
-struct vme_slave_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
-};
-
-struct vme_dma_pattern {
-	u32 pattern;
-	u32 type;
-};
-
-struct vme_dma_pci {
-	dma_addr_t address;
-};
-
-struct vme_dma_vme {
-	long long unsigned int address;
-	u32 aspace;
-	u32 cycle;
-	u32 dwidth;
-};
-
-struct vme_dma_resource;
-
-struct vme_dma_list {
-	struct list_head list;
-	struct vme_dma_resource *parent;
-	struct list_head entries;
-	struct mutex mtx;
-};
-
-struct vme_dma_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	struct list_head pending;
-	struct list_head running;
-	u32 route_attr;
-};
-
-struct vme_lm_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	int monitors;
-};
-
-struct vme_error_handler {
-	struct list_head list;
-	long long unsigned int start;
-	long long unsigned int end;
-	long long unsigned int first_error;
-	u32 aspace;
-	unsigned int num_errors;
-};
-
-struct powercap_control_type;
-
-struct powercap_control_type_ops {
-	int (*set_enable)(struct powercap_control_type *, bool);
-	int (*get_enable)(struct powercap_control_type *, bool *);
-	int (*release)(struct powercap_control_type *);
-};
-
-struct powercap_control_type {
-	struct device dev;
-	struct idr idr;
-	int nr_zones;
-	const struct powercap_control_type_ops *ops;
-	struct mutex lock;
-	bool allocated;
-	struct list_head node;
-};
-
-struct powercap_zone;
-
-struct powercap_zone_ops {
-	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
-	int (*get_energy_uj)(struct powercap_zone *, u64 *);
-	int (*reset_energy_uj)(struct powercap_zone *);
-	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
-	int (*get_power_uw)(struct powercap_zone *, u64 *);
-	int (*set_enable)(struct powercap_zone *, bool);
-	int (*get_enable)(struct powercap_zone *, bool *);
-	int (*release)(struct powercap_zone *);
-};
-
-struct powercap_zone_constraint;
-
-struct powercap_zone {
-	int id;
-	char *name;
-	void *control_type_inst;
-	const struct powercap_zone_ops *ops;
-	struct device dev;
-	int const_id_cnt;
-	struct idr idr;
-	struct idr *parent_idr;
-	void *private_data;
-	struct attribute **zone_dev_attrs;
-	int zone_attr_count;
-	struct attribute_group dev_zone_attr_group;
-	const struct attribute_group *dev_attr_groups[2];
-	bool allocated;
-	struct powercap_zone_constraint *constraints;
-};
-
-struct powercap_zone_constraint_ops;
-
-struct powercap_zone_constraint {
-	int id;
-	struct powercap_zone *power_zone;
-	const struct powercap_zone_constraint_ops *ops;
-};
-
-struct powercap_zone_constraint_ops {
-	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
-	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
-	int (*set_time_window_us)(struct powercap_zone *, int, u64);
-	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
-	const char * (*get_name)(struct powercap_zone *, int);
-};
-
-struct powercap_constraint_attr {
-	struct device_attribute power_limit_attr;
-	struct device_attribute time_window_attr;
-	struct device_attribute max_power_attr;
-	struct device_attribute min_power_attr;
-	struct device_attribute max_time_window_attr;
-	struct device_attribute min_time_window_attr;
-	struct device_attribute name_attr;
-};
-
-enum {
-	CCI_IF_SLAVE = 0,
-	CCI_IF_MASTER = 1,
-	CCI_IF_MAX = 2,
-};
-
-struct event_range {
-	u32 min;
-	u32 max;
-};
-
-struct cci_pmu_hw_events {
-	struct perf_event **events;
-	long unsigned int *used_mask;
-	raw_spinlock_t pmu_lock;
-};
-
-struct cci_pmu;
-
-struct cci_pmu_model {
-	char *name;
-	u32 fixed_hw_cntrs;
-	u32 num_hw_cntrs;
-	u32 cntr_size;
-	struct attribute **format_attrs;
-	struct attribute **event_attrs;
-	struct event_range event_ranges[2];
-	int (*validate_hw_event)(struct cci_pmu *, long unsigned int);
-	int (*get_event_idx)(struct cci_pmu *, struct cci_pmu_hw_events *, long unsigned int);
-	void (*write_counters)(struct cci_pmu *, long unsigned int *);
-};
-
-struct cci_pmu {
-	void *base;
-	void *ctrl_base;
-	struct pmu pmu;
-	int cpu;
-	int nr_irqs;
-	int *irqs;
-	long unsigned int active_irqs;
-	const struct cci_pmu_model *model;
-	struct cci_pmu_hw_events hw_events;
-	struct platform_device *plat_device;
-	int num_cntrs;
-	atomic_t active_events;
-	struct mutex reserve_mutex;
-};
-
-enum cci_models {
-	CCI400_R0 = 0,
-	CCI400_R1 = 1,
-	CCI_MODEL_MAX = 2,
-};
-
-enum cci400_perf_events {
-	CCI400_PMU_CYCLES = 255,
-};
-
-struct arm_ccn_component {
-	void *base;
-	u32 type;
-	long unsigned int pmu_events_mask[1];
-	union {
-		struct {
-			long unsigned int dt_cmp_mask[1];
-		} xp;
-	};
-};
-
-struct arm_ccn_dt {
-	int id;
-	void *base;
-	spinlock_t config_lock;
-	long unsigned int pmu_counters_mask[1];
-	struct {
-		struct arm_ccn_component *source;
-		struct perf_event *event;
-	} pmu_counters[9];
-	struct {
-		u64 l;
-		u64 h;
-	} cmp_mask[12];
-	struct hrtimer hrtimer;
-	unsigned int cpu;
-	struct hlist_node node;
-	struct pmu pmu;
-};
-
-struct arm_ccn {
-	struct device *dev;
-	void *base;
-	unsigned int irq;
-	unsigned int sbas_present: 1;
-	unsigned int sbsx_present: 1;
-	int num_nodes;
-	struct arm_ccn_component *node;
-	int num_xps;
-	struct arm_ccn_component *xp;
-	struct arm_ccn_dt dt;
-	int mn_id;
-};
-
-struct arm_ccn_pmu_event {
-	struct device_attribute attr;
-	u32 type;
-	u32 event;
-	int num_ports;
-	int num_vcs;
-	const char *def;
-	int mask;
-};
-
-struct pmu_irq_ops {
-	void (*enable_pmuirq)(unsigned int);
-	void (*disable_pmuirq)(unsigned int);
-	void (*free_pmuirq)(unsigned int, int, void *);
-};
-
-typedef int (*armpmu_init_fn)(struct arm_pmu *);
-
-struct pmu_probe_info {
-	unsigned int cpuid;
-	unsigned int mask;
-	armpmu_init_fn init;
-};
-
-struct hisi_pmu;
-
-struct hisi_uncore_ops {
-	void (*write_evtype)(struct hisi_pmu *, int, u32);
-	int (*get_event_idx)(struct perf_event *);
-	u64 (*read_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*write_counter)(struct hisi_pmu *, struct hw_perf_event *, u64);
-	void (*enable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*enable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*start_counters)(struct hisi_pmu *);
-	void (*stop_counters)(struct hisi_pmu *);
-};
-
-struct hisi_pmu_hwevents {
-	struct perf_event *hw_events[16];
-	long unsigned int used_mask[1];
-};
-
-struct hisi_pmu {
-	struct pmu pmu;
-	const struct hisi_uncore_ops *ops;
-	struct hisi_pmu_hwevents pmu_events;
-	cpumask_t associated_cpus;
-	int on_cpu;
-	int irq;
-	struct device *dev;
-	struct hlist_node node;
-	int sccl_id;
-	int ccl_id;
-	void *base;
-	u32 index_id;
-	int num_counters;
-	int counter_bits;
-	int check_event;
-};
-
-struct hw_pmu_info {
-	u32 type;
-	u32 enable_mask;
-	void *csr;
-};
-
-struct xgene_pmu;
-
-struct xgene_pmu_dev {
-	struct hw_pmu_info *inf;
-	struct xgene_pmu *parent;
-	struct pmu pmu;
-	u8 max_counters;
-	long unsigned int cntr_assign_mask[1];
-	u64 max_period;
-	const struct attribute_group **attr_groups;
-	struct perf_event *pmu_counter_event[4];
-};
-
-struct xgene_pmu_ops;
-
-struct xgene_pmu {
-	struct device *dev;
-	struct hlist_node node;
-	int version;
-	void *pcppmu_csr;
-	u32 mcb_active_mask;
-	u32 mc_active_mask;
-	u32 l3c_active_mask;
-	cpumask_t cpu;
-	int irq;
-	raw_spinlock_t lock;
-	const struct xgene_pmu_ops *ops;
-	struct list_head l3cpmus;
-	struct list_head iobpmus;
-	struct list_head mcbpmus;
-	struct list_head mcpmus;
-};
-
-struct xgene_pmu_ops {
-	void (*mask_int)(struct xgene_pmu *);
-	void (*unmask_int)(struct xgene_pmu *);
-	u64 (*read_counter)(struct xgene_pmu_dev *, int);
-	void (*write_counter)(struct xgene_pmu_dev *, int, u64);
-	void (*write_evttype)(struct xgene_pmu_dev *, int, u32);
-	void (*write_agentmsk)(struct xgene_pmu_dev *, u32);
-	void (*write_agent1msk)(struct xgene_pmu_dev *, u32);
-	void (*enable_counter)(struct xgene_pmu_dev *, int);
-	void (*disable_counter)(struct xgene_pmu_dev *, int);
-	void (*enable_counter_int)(struct xgene_pmu_dev *, int);
-	void (*disable_counter_int)(struct xgene_pmu_dev *, int);
-	void (*reset_counters)(struct xgene_pmu_dev *);
-	void (*start_counters)(struct xgene_pmu_dev *);
-	void (*stop_counters)(struct xgene_pmu_dev *);
-};
-
-struct xgene_pmu_dev_ctx {
-	char *name;
-	struct list_head next;
-	struct xgene_pmu_dev *pmu_dev;
-	struct hw_pmu_info inf;
-};
-
-struct xgene_pmu_data {
-	int id;
-	u32 data;
-};
-
-enum xgene_pmu_version {
-	PCP_PMU_V1 = 1,
-	PCP_PMU_V2 = 2,
-	PCP_PMU_V3 = 3,
-};
-
-enum xgene_pmu_dev_type {
-	PMU_TYPE_L3C = 0,
-	PMU_TYPE_IOB = 1,
-	PMU_TYPE_IOB_SLOW = 2,
-	PMU_TYPE_MCB = 3,
-	PMU_TYPE_MC = 4,
-};
-
-struct trace_event_raw_mc_event {
-	struct trace_entry ent;
-	unsigned int error_type;
-	u32 __data_loc_msg;
-	u32 __data_loc_label;
-	u16 error_count;
-	u8 mc_index;
-	s8 top_layer;
-	s8 middle_layer;
-	s8 lower_layer;
-	long int address;
-	u8 grain_bits;
-	long int syndrome;
-	u32 __data_loc_driver_detail;
-	char __data[0];
-};
-
-struct trace_event_raw_arm_event {
-	struct trace_entry ent;
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-	u8 affinity;
-	char __data[0];
-};
-
-struct trace_event_raw_non_standard_event {
-	struct trace_entry ent;
-	char sec_type[16];
-	char fru_id[16];
-	u32 __data_loc_fru_text;
-	u8 sev;
-	u32 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_aer_event {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u32 status;
-	u8 severity;
-	u8 tlp_header_valid;
-	u32 tlp_header[4];
-	char __data[0];
-};
-
-struct trace_event_raw_memory_failure_event {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int type;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mc_event {
-	u32 msg;
-	u32 label;
-	u32 driver_detail;
-};
-
-struct trace_event_data_offsets_arm_event {};
-
-struct trace_event_data_offsets_non_standard_event {
-	u32 fru_text;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_aer_event {
-	u32 dev_name;
-};
-
-struct trace_event_data_offsets_memory_failure_event {};
-
-typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
-
-typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
-
-typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
-
-typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
-
-typedef void (*btf_trace_memory_failure_event)(void *, long unsigned int, int, int);
-
-enum {
-	NVMEM_ADD = 1,
-	NVMEM_REMOVE = 2,
-	NVMEM_CELL_ADD = 3,
-	NVMEM_CELL_REMOVE = 4,
-};
-
-struct nvmem_cell_table {
-	const char *nvmem_name;
-	const struct nvmem_cell_info *cells;
-	size_t ncells;
-	struct list_head node;
-};
-
-struct nvmem_device___2 {
-	struct module *owner;
-	struct device dev;
-	int stride;
-	int word_size;
-	int id;
-	struct kref refcnt;
-	size_t size;
-	bool read_only;
-	bool root_only;
-	int flags;
-	enum nvmem_type type;
-	struct bin_attribute eeprom;
-	struct device *base_dev;
-	struct list_head cells;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	struct gpio_desc *wp_gpio;
-	void *priv;
-};
-
-struct nvmem_cell {
-	const char *name;
-	int offset;
-	int bytes;
-	int bit_offset;
-	int nbits;
-	struct device_node *np;
-	struct nvmem_device___2 *nvmem;
-	struct list_head node;
-};
-
-struct net_device_devres {
-	struct net_device *ndev;
-};
-
-struct __kernel_old_timespec {
-	__kernel_old_time_t tv_sec;
-	long int tv_nsec;
-};
-
-struct __kernel_sock_timeval {
-	__s64 tv_sec;
-	__s64 tv_usec;
-};
-
 struct mmsghdr {
 	struct user_msghdr msg_hdr;
 	unsigned int msg_len;
 };
 
-struct scm_timestamping_internal {
-	struct timespec64 ts[3];
-};
-
-enum sock_shutdown_cmd {
-	SHUT_RD = 0,
-	SHUT_WR = 1,
-	SHUT_RDWR = 2,
-};
-
-struct net_proto_family {
-	int family;
-	int (*create)(struct net *, struct socket *, int, int);
-	struct module *owner;
-};
-
-enum {
-	SOCK_WAKE_IO = 0,
-	SOCK_WAKE_WAITD = 1,
-	SOCK_WAKE_SPACE = 2,
-	SOCK_WAKE_URG = 3,
-};
-
-struct ifconf {
-	int ifc_len;
-	union {
-		char *ifcu_buf;
-		struct ifreq *ifcu_req;
-	} ifc_ifcu;
-};
-
-struct compat_ifmap {
-	compat_ulong_t mem_start;
-	compat_ulong_t mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
 };
 
 struct compat_if_settings {
@@ -95966,834 +116333,26 @@
 	} ifr_ifru;
 };
 
-struct compat_ifconf {
-	compat_int_t ifc_len;
-	compat_caddr_t ifcbuf;
-};
-
-struct compat_ethtool_rx_flow_spec {
-	u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	compat_u64 ring_cookie;
-	u32 location;
-};
-
-struct compat_ethtool_rxnfc {
-	u32 cmd;
-	u32 flow_type;
-	compat_u64 data;
-	struct compat_ethtool_rx_flow_spec fs;
-	u32 rule_cnt;
-	u32 rule_locs[0];
-};
-
-struct libipw_device;
-
-struct iw_spy_data;
-
-struct iw_public_data {
-	struct iw_spy_data *spy_data;
-	struct libipw_device *libipw;
-};
-
-struct iw_param {
-	__s32 value;
-	__u8 fixed;
-	__u8 disabled;
-	__u16 flags;
-};
-
-struct iw_point {
-	void *pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct iw_freq {
-	__s32 m;
-	__s16 e;
-	__u8 i;
-	__u8 flags;
-};
-
-struct iw_quality {
-	__u8 qual;
-	__u8 level;
-	__u8 noise;
-	__u8 updated;
-};
-
-struct iw_discarded {
-	__u32 nwid;
-	__u32 code;
-	__u32 fragment;
-	__u32 retries;
-	__u32 misc;
-};
-
-struct iw_missed {
-	__u32 beacon;
-};
-
-struct iw_statistics {
-	__u16 status;
-	struct iw_quality qual;
-	struct iw_discarded discard;
-	struct iw_missed miss;
-};
-
-union iwreq_data {
-	char name[16];
-	struct iw_point essid;
-	struct iw_param nwid;
-	struct iw_freq freq;
-	struct iw_param sens;
-	struct iw_param bitrate;
-	struct iw_param txpower;
-	struct iw_param rts;
-	struct iw_param frag;
-	__u32 mode;
-	struct iw_param retry;
-	struct iw_point encoding;
-	struct iw_param power;
-	struct iw_quality qual;
-	struct sockaddr ap_addr;
-	struct sockaddr addr;
-	struct iw_param param;
-	struct iw_point data;
-};
-
-struct iw_priv_args {
-	__u32 cmd;
-	__u16 set_args;
-	__u16 get_args;
-	char name[16];
-};
-
 struct compat_mmsghdr {
 	struct compat_msghdr msg_hdr;
 	compat_uint_t msg_len;
 };
 
-struct iw_request_info {
-	__u16 cmd;
-	__u16 flags;
-};
-
-struct iw_spy_data {
-	int spy_number;
-	u_char spy_address[48];
-	struct iw_quality spy_stat[8];
-	struct iw_quality spy_thr_low;
-	struct iw_quality spy_thr_high;
-	u_char spy_thr_under[8];
-};
-
-enum {
-	SOF_TIMESTAMPING_TX_HARDWARE = 1,
-	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
-	SOF_TIMESTAMPING_RX_HARDWARE = 4,
-	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
-	SOF_TIMESTAMPING_SOFTWARE = 16,
-	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
-	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
-	SOF_TIMESTAMPING_OPT_ID = 128,
-	SOF_TIMESTAMPING_TX_SCHED = 256,
-	SOF_TIMESTAMPING_TX_ACK = 512,
-	SOF_TIMESTAMPING_OPT_CMSG = 1024,
-	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
-	SOF_TIMESTAMPING_OPT_STATS = 4096,
-	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
-	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
-	SOF_TIMESTAMPING_LAST = 16384,
-	SOF_TIMESTAMPING_MASK = 32767,
-};
-
-struct scm_ts_pktinfo {
-	__u32 if_index;
-	__u32 pkt_length;
-	__u32 reserved[2];
-};
-
-struct sock_skb_cb {
-	u32 dropcount;
-};
-
-struct sock_ee_data_rfc4884 {
-	__u16 len;
-	__u8 flags;
-	__u8 reserved;
-};
-
-struct sock_extended_err {
-	__u32 ee_errno;
-	__u8 ee_origin;
-	__u8 ee_type;
-	__u8 ee_code;
-	__u8 ee_pad;
-	__u32 ee_info;
-	union {
-		__u32 ee_data;
-		struct sock_ee_data_rfc4884 ee_rfc4884;
-	};
-};
-
-struct sock_exterr_skb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	struct sock_extended_err ee;
-	u16 addr_offset;
-	__be16 port;
-	u8 opt_stats: 1;
-	u8 unused: 7;
-};
-
 struct used_address {
 	struct __kernel_sockaddr_storage name;
 	unsigned int name_len;
 };
 
-struct linger {
-	int l_onoff;
-	int l_linger;
-};
-
-struct cmsghdr {
-	__kernel_size_t cmsg_len;
-	int cmsg_level;
-	int cmsg_type;
-};
-
-struct ucred {
-	__u32 pid;
-	__u32 uid;
-	__u32 gid;
-};
-
-struct mmpin {
-	struct user_struct *user;
-	unsigned int num_pg;
-};
-
-struct ubuf_info {
-	void (*callback)(struct ubuf_info *, bool);
-	union {
-		struct {
-			long unsigned int desc;
-			void *ctx;
-		};
-		struct {
-			u32 id;
-			u16 len;
-			u16 zerocopy: 1;
-			u32 bytelen;
-		};
-	};
-	refcount_t refcnt;
-	struct mmpin mmp;
-};
-
-struct prot_inuse {
-	int val[64];
-};
-
-struct sd_flow_limit {
-	u64 count;
-	unsigned int num_buckets;
-	unsigned int history_head;
-	u16 history[128];
-	u8 buckets[0];
-};
-
-struct softnet_data {
-	struct list_head poll_list;
-	struct sk_buff_head process_queue;
-	unsigned int processed;
-	unsigned int time_squeeze;
-	unsigned int received_rps;
-	struct softnet_data *rps_ipi_list;
-	struct sd_flow_limit *flow_limit;
-	struct Qdisc *output_queue;
-	struct Qdisc **output_queue_tailp;
-	struct sk_buff *completion_queue;
-	struct sk_buff_head xfrm_backlog;
-	struct {
-		u16 recursion;
-		u8 more;
-	} xmit;
-	int: 32;
-	unsigned int input_queue_head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t csd;
-	struct softnet_data *rps_ipi_next;
-	unsigned int cpu;
-	unsigned int input_queue_tail;
-	unsigned int dropped;
-	struct sk_buff_head input_pkt_queue;
-	struct napi_struct backlog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum txtime_flags {
-	SOF_TXTIME_DEADLINE_MODE = 1,
-	SOF_TXTIME_REPORT_ERRORS = 2,
-	SOF_TXTIME_FLAGS_LAST = 2,
-	SOF_TXTIME_FLAGS_MASK = 3,
-};
-
-struct sock_txtime {
-	__kernel_clockid_t clockid;
-	__u32 flags;
-};
-
-enum sk_pacing {
-	SK_PACING_NONE = 0,
-	SK_PACING_NEEDED = 1,
-	SK_PACING_FQ = 2,
-};
-
-struct sockcm_cookie {
-	u64 transmit_time;
-	u32 mark;
-	u16 tsflags;
-};
-
-struct inet_bind_bucket {
-	possible_net_t ib_net;
-	int l3mdev;
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct in6_addr fast_v6_rcv_saddr;
-	__be32 fast_rcv_saddr;
-	short unsigned int fast_sk_family;
-	bool fast_ipv6_only;
-	struct hlist_node node;
-	struct hlist_head owners;
-};
-
-struct tcp_fastopen_cookie {
-	__le64 val[2];
-	s8 len;
-	bool exp;
-};
-
-struct tcp_sack_block {
-	u32 start_seq;
-	u32 end_seq;
-};
-
-struct tcp_options_received {
-	int ts_recent_stamp;
-	u32 ts_recent;
-	u32 rcv_tsval;
-	u32 rcv_tsecr;
-	u16 saw_tstamp: 1;
-	u16 tstamp_ok: 1;
-	u16 dsack: 1;
-	u16 wscale_ok: 1;
-	u16 sack_ok: 3;
-	u16 smc_ok: 1;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u8 saw_unknown: 1;
-	u8 unused: 7;
-	u8 num_sacks;
-	u16 user_mss;
-	u16 mss_clamp;
-};
-
-struct tcp_rack {
-	u64 mstamp;
-	u32 rtt_us;
-	u32 end_seq;
-	u32 last_delivered;
-	u8 reo_wnd_steps;
-	u8 reo_wnd_persist: 5;
-	u8 dsack_seen: 1;
-	u8 advanced: 1;
-};
-
-struct tcp_sock_af_ops;
-
-struct tcp_md5sig_info;
-
-struct tcp_fastopen_request;
-
-struct tcp_sock {
-	struct inet_connection_sock inet_conn;
-	u16 tcp_header_len;
-	u16 gso_segs;
-	__be32 pred_flags;
-	u64 bytes_received;
-	u32 segs_in;
-	u32 data_segs_in;
-	u32 rcv_nxt;
-	u32 copied_seq;
-	u32 rcv_wup;
-	u32 snd_nxt;
-	u32 segs_out;
-	u32 data_segs_out;
-	u64 bytes_sent;
-	u64 bytes_acked;
-	u32 dsack_dups;
-	u32 snd_una;
-	u32 snd_sml;
-	u32 rcv_tstamp;
-	u32 lsndtime;
-	u32 last_oow_ack_time;
-	u32 compressed_ack_rcv_nxt;
-	u32 tsoffset;
-	struct list_head tsq_node;
-	struct list_head tsorted_sent_queue;
-	u32 snd_wl1;
-	u32 snd_wnd;
-	u32 max_window;
-	u32 mss_cache;
-	u32 window_clamp;
-	u32 rcv_ssthresh;
-	struct tcp_rack rack;
-	u16 advmss;
-	u8 compressed_ack;
-	u8 dup_ack_counter: 2;
-	u8 tlp_retrans: 1;
-	u8 unused: 5;
-	u32 chrono_start;
-	u32 chrono_stat[3];
-	u8 chrono_type: 2;
-	u8 rate_app_limited: 1;
-	u8 fastopen_connect: 1;
-	u8 fastopen_no_cookie: 1;
-	u8 is_sack_reneg: 1;
-	u8 fastopen_client_fail: 2;
-	u8 nonagle: 4;
-	u8 thin_lto: 1;
-	u8 recvmsg_inq: 1;
-	u8 repair: 1;
-	u8 frto: 1;
-	u8 repair_queue;
-	u8 save_syn: 2;
-	u8 syn_data: 1;
-	u8 syn_fastopen: 1;
-	u8 syn_fastopen_exp: 1;
-	u8 syn_fastopen_ch: 1;
-	u8 syn_data_acked: 1;
-	u8 is_cwnd_limited: 1;
-	u32 tlp_high_seq;
-	u32 tcp_tx_delay;
-	u64 tcp_wstamp_ns;
-	u64 tcp_clock_cache;
-	u64 tcp_mstamp;
-	u32 srtt_us;
-	u32 mdev_us;
-	u32 mdev_max_us;
-	u32 rttvar_us;
-	u32 rtt_seq;
-	struct minmax rtt_min;
-	u32 packets_out;
-	u32 retrans_out;
-	u32 max_packets_out;
-	u32 max_packets_seq;
-	u16 urg_data;
-	u8 ecn_flags;
-	u8 keepalive_probes;
-	u32 reordering;
-	u32 reord_seen;
-	u32 snd_up;
-	struct tcp_options_received rx_opt;
-	u32 snd_ssthresh;
-	u32 snd_cwnd;
-	u32 snd_cwnd_cnt;
-	u32 snd_cwnd_clamp;
-	u32 snd_cwnd_used;
-	u32 snd_cwnd_stamp;
-	u32 prior_cwnd;
-	u32 prr_delivered;
-	u32 prr_out;
-	u32 delivered;
-	u32 delivered_ce;
-	u32 lost;
-	u32 app_limited;
-	u64 first_tx_mstamp;
-	u64 delivered_mstamp;
-	u32 rate_delivered;
-	u32 rate_interval_us;
-	u32 rcv_wnd;
-	u32 write_seq;
-	u32 notsent_lowat;
-	u32 pushed_seq;
-	u32 lost_out;
-	u32 sacked_out;
-	struct hrtimer pacing_timer;
-	struct hrtimer compressed_ack_timer;
-	struct sk_buff *lost_skb_hint;
-	struct sk_buff *retransmit_skb_hint;
-	struct rb_root out_of_order_queue;
-	struct sk_buff *ooo_last_skb;
-	struct tcp_sack_block duplicate_sack[1];
-	struct tcp_sack_block selective_acks[4];
-	struct tcp_sack_block recv_sack_cache[4];
-	struct sk_buff *highest_sack;
-	int lost_cnt_hint;
-	u32 prior_ssthresh;
-	u32 high_seq;
-	u32 retrans_stamp;
-	u32 undo_marker;
-	int undo_retrans;
-	u64 bytes_retrans;
-	u32 total_retrans;
-	u32 urg_seq;
-	unsigned int keepalive_time;
-	unsigned int keepalive_intvl;
-	int linger2;
-	u8 bpf_sock_ops_cb_flags;
-	u16 timeout_rehash;
-	u32 rcv_ooopack;
-	u32 rcv_rtt_last_tsecr;
-	struct {
-		u32 rtt_us;
-		u32 seq;
-		u64 time;
-	} rcv_rtt_est;
-	struct {
-		u32 space;
-		u32 seq;
-		u64 time;
-	} rcvq_space;
-	struct {
-		u32 probe_seq_start;
-		u32 probe_seq_end;
-	} mtu_probe;
-	u32 mtu_info;
-	bool is_mptcp;
-	bool syn_smc;
-	const struct tcp_sock_af_ops *af_specific;
-	struct tcp_md5sig_info *md5sig_info;
-	struct tcp_fastopen_request *fastopen_req;
-	struct request_sock *fastopen_rsk;
-	struct saved_syn *saved_syn;
-};
-
-struct tcp_md5sig_key;
-
-struct tcp_sock_af_ops {
-	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	int (*md5_parse)(struct sock *, int, sockptr_t, int);
-};
-
-struct tcp_md5sig_info {
-	struct hlist_head head;
-	struct callback_head rcu;
-};
-
-struct tcp_fastopen_request {
-	struct tcp_fastopen_cookie cookie;
-	struct msghdr *data;
-	size_t size;
-	int copied;
-	struct ubuf_info *uarg;
-};
-
-union tcp_md5_addr {
-	struct in_addr a4;
-	struct in6_addr a6;
-};
-
-struct tcp_md5sig_key {
-	struct hlist_node node;
-	u8 keylen;
-	u8 family;
-	u8 prefixlen;
-	union tcp_md5_addr addr;
-	int l3index;
-	u8 key[80];
-	struct callback_head rcu;
-};
-
-struct net_protocol {
-	int (*early_demux)(struct sk_buff *);
-	int (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, u32);
-	unsigned int no_policy: 1;
-	unsigned int netns_ok: 1;
-	unsigned int icmp_strict_tag_validation: 1;
-};
-
-struct cgroup_cls_state {
-	struct cgroup_subsys_state css;
-	u32 classid;
-};
-
-enum {
-	SK_MEMINFO_RMEM_ALLOC = 0,
-	SK_MEMINFO_RCVBUF = 1,
-	SK_MEMINFO_WMEM_ALLOC = 2,
-	SK_MEMINFO_SNDBUF = 3,
-	SK_MEMINFO_FWD_ALLOC = 4,
-	SK_MEMINFO_WMEM_QUEUED = 5,
-	SK_MEMINFO_OPTMEM = 6,
-	SK_MEMINFO_BACKLOG = 7,
-	SK_MEMINFO_DROPS = 8,
-	SK_MEMINFO_VARS = 9,
-};
-
-enum sknetlink_groups {
-	SKNLGRP_NONE = 0,
-	SKNLGRP_INET_TCP_DESTROY = 1,
-	SKNLGRP_INET_UDP_DESTROY = 2,
-	SKNLGRP_INET6_TCP_DESTROY = 3,
-	SKNLGRP_INET6_UDP_DESTROY = 4,
-	__SKNLGRP_MAX = 5,
-};
-
-struct inet_request_sock {
-	struct request_sock req;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u16 tstamp_ok: 1;
-	u16 sack_ok: 1;
-	u16 wscale_ok: 1;
-	u16 ecn_ok: 1;
-	u16 acked: 1;
-	u16 no_srccheck: 1;
-	u16 smc_ok: 1;
-	u32 ir_mark;
-	union {
-		struct ip_options_rcu *ireq_opt;
-		struct {
-			struct ipv6_txoptions *ipv6_opt;
-			struct sk_buff *pktopts;
-		};
-	};
-};
-
-struct tcp_request_sock_ops;
-
-struct tcp_request_sock {
-	struct inet_request_sock req;
-	const struct tcp_request_sock_ops *af_specific;
-	u64 snt_synack;
-	bool tfo_listener;
-	bool is_mptcp;
-	bool drop_req;
-	u32 txhash;
-	u32 rcv_isn;
-	u32 snt_isn;
-	u32 ts_off;
-	u32 last_oow_ack_time;
-	u32 rcv_nxt;
-	u8 syn_tos;
-};
-
-enum tcp_synack_type {
-	TCP_SYNACK_NORMAL = 0,
-	TCP_SYNACK_FASTOPEN = 1,
-	TCP_SYNACK_COOKIE = 2,
-};
-
-struct tcp_request_sock_ops {
-	u16 mss_clamp;
-	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	void (*init_req)(struct request_sock *, const struct sock *, struct sk_buff *);
-	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
-	struct dst_entry * (*route_req)(const struct sock *, struct flowi *, const struct request_sock *);
-	u32 (*init_seq)(const struct sk_buff *);
-	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
-	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
-};
-
-struct nf_conntrack {
-	atomic_t use;
-};
-
-enum {
-	SKB_FCLONE_UNAVAILABLE = 0,
-	SKB_FCLONE_ORIG = 1,
-	SKB_FCLONE_CLONE = 2,
-};
-
-struct sk_buff_fclones {
-	struct sk_buff skb1;
-	struct sk_buff skb2;
-	refcount_t fclone_ref;
-};
-
-struct skb_seq_state {
-	__u32 lower_offset;
-	__u32 upper_offset;
-	__u32 frag_idx;
-	__u32 stepped_offset;
-	struct sk_buff *root_skb;
-	struct sk_buff *cur_skb;
-	__u8 *frag_data;
-};
-
-struct skb_checksum_ops {
-	__wsum (*update)(const void *, int, __wsum);
-	__wsum (*combine)(__wsum, __wsum, int, int);
-};
-
-struct skb_gso_cb {
-	union {
-		int mac_offset;
-		int data_offset;
-	};
-	int encap_level;
-	__wsum csum;
-	__u16 csum_start;
-};
-
-struct napi_gro_cb {
-	void *frag0;
-	unsigned int frag0_len;
-	int data_offset;
-	u16 flush;
-	u16 flush_id;
-	u16 count;
-	u16 gro_remcsum_start;
-	long unsigned int age;
-	u16 proto;
-	u8 same_flow: 1;
-	u8 encap_mark: 1;
-	u8 csum_valid: 1;
-	u8 csum_cnt: 3;
-	u8 free: 2;
-	u8 is_ipv6: 1;
-	u8 is_fou: 1;
-	u8 is_atomic: 1;
-	u8 recursion_counter: 4;
-	u8 is_flist: 1;
-	__wsum csum;
-	struct sk_buff *last;
-};
-
-struct vlan_hdr {
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct vlan_ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct qdisc_walker {
-	int stop;
-	int skip;
-	int count;
-	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
-};
-
-struct ip_auth_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__be16 reserved;
-	__be32 spi;
-	__be32 seq_no;
-	__u8 auth_data[0];
-};
-
-struct frag_hdr {
-	__u8 nexthdr;
-	__u8 reserved;
-	__be16 frag_off;
-	__be32 identification;
-};
-
-enum {
-	SCM_TSTAMP_SND = 0,
-	SCM_TSTAMP_SCHED = 1,
-	SCM_TSTAMP_ACK = 2,
-};
-
-struct mpls_shim_hdr {
-	__be32 label_stack_entry;
-};
-
-struct napi_alloc_cache {
-	struct page_frag_cache page;
-	unsigned int skb_count;
-	void *skb_cache[64];
-};
-
-struct ahash_request___2;
-
-struct scm_cookie {
-	struct pid *pid;
-	struct scm_fp_list *fp;
-	struct scm_creds creds;
-	u32 secid;
-};
-
-struct scm_timestamping {
-	struct __kernel_old_timespec ts[3];
-};
-
-struct scm_timestamping64 {
-	struct __kernel_timespec ts[3];
-};
-
-enum {
-	TCA_STATS_UNSPEC = 0,
-	TCA_STATS_BASIC = 1,
-	TCA_STATS_RATE_EST = 2,
-	TCA_STATS_QUEUE = 3,
-	TCA_STATS_APP = 4,
-	TCA_STATS_RATE_EST64 = 5,
-	TCA_STATS_PAD = 6,
-	TCA_STATS_BASIC_HW = 7,
-	TCA_STATS_PKT64 = 8,
-	__TCA_STATS_MAX = 9,
-};
-
-struct gnet_stats_basic {
-	__u64 bytes;
-	__u32 packets;
-};
-
-struct gnet_stats_rate_est {
-	__u32 bps;
-	__u32 pps;
-};
-
-struct gnet_stats_rate_est64 {
-	__u64 bps;
-	__u64 pps;
-};
-
 struct gnet_estimator {
 	signed char interval;
 	unsigned char ewma_log;
 };
 
 struct net_rate_estimator {
-	struct gnet_stats_basic_packed *bstats;
+	struct gnet_stats_basic_sync *bstats;
 	spinlock_t *stats_lock;
-	seqcount_t *running;
-	struct gnet_stats_basic_cpu *cpu_bstats;
+	bool running;
+	struct gnet_stats_basic_sync *cpu_bstats;
 	u8 ewma_log;
 	u8 intvl_log;
 	seqcount_t seq;
@@ -96806,1724 +116365,6 @@
 	struct callback_head rcu;
 };
 
-struct rtgenmsg {
-	unsigned char rtgen_family;
-};
-
-enum rtnetlink_groups {
-	RTNLGRP_NONE = 0,
-	RTNLGRP_LINK = 1,
-	RTNLGRP_NOTIFY = 2,
-	RTNLGRP_NEIGH = 3,
-	RTNLGRP_TC = 4,
-	RTNLGRP_IPV4_IFADDR = 5,
-	RTNLGRP_IPV4_MROUTE = 6,
-	RTNLGRP_IPV4_ROUTE = 7,
-	RTNLGRP_IPV4_RULE = 8,
-	RTNLGRP_IPV6_IFADDR = 9,
-	RTNLGRP_IPV6_MROUTE = 10,
-	RTNLGRP_IPV6_ROUTE = 11,
-	RTNLGRP_IPV6_IFINFO = 12,
-	RTNLGRP_DECnet_IFADDR = 13,
-	RTNLGRP_NOP2 = 14,
-	RTNLGRP_DECnet_ROUTE = 15,
-	RTNLGRP_DECnet_RULE = 16,
-	RTNLGRP_NOP4 = 17,
-	RTNLGRP_IPV6_PREFIX = 18,
-	RTNLGRP_IPV6_RULE = 19,
-	RTNLGRP_ND_USEROPT = 20,
-	RTNLGRP_PHONET_IFADDR = 21,
-	RTNLGRP_PHONET_ROUTE = 22,
-	RTNLGRP_DCB = 23,
-	RTNLGRP_IPV4_NETCONF = 24,
-	RTNLGRP_IPV6_NETCONF = 25,
-	RTNLGRP_MDB = 26,
-	RTNLGRP_MPLS_ROUTE = 27,
-	RTNLGRP_NSID = 28,
-	RTNLGRP_MPLS_NETCONF = 29,
-	RTNLGRP_IPV4_MROUTE_R = 30,
-	RTNLGRP_IPV6_MROUTE_R = 31,
-	RTNLGRP_NEXTHOP = 32,
-	RTNLGRP_BRVLAN = 33,
-	__RTNLGRP_MAX = 34,
-};
-
-enum {
-	NETNSA_NONE = 0,
-	NETNSA_NSID = 1,
-	NETNSA_PID = 2,
-	NETNSA_FD = 3,
-	NETNSA_TARGET_NSID = 4,
-	NETNSA_CURRENT_NSID = 5,
-	__NETNSA_MAX = 6,
-};
-
-struct pcpu_gen_cookie {
-	local_t nesting;
-	u64 last;
-};
-
-struct gen_cookie {
-	struct pcpu_gen_cookie *local;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic64_t forward_last;
-	atomic64_t reverse_last;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum rtnl_link_flags {
-	RTNL_FLAG_DOIT_UNLOCKED = 1,
-};
-
-struct net_fill_args {
-	u32 portid;
-	u32 seq;
-	int flags;
-	int cmd;
-	int nsid;
-	bool add_ref;
-	int ref_nsid;
-};
-
-struct rtnl_net_dump_cb {
-	struct net *tgt_net;
-	struct net *ref_net;
-	struct sk_buff *skb;
-	struct net_fill_args fillargs;
-	int idx;
-	int s_idx;
-};
-
-typedef u16 u_int16_t;
-
-typedef u32 u_int32_t;
-
-typedef u64 u_int64_t;
-
-struct flow_dissector_key_control {
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
-};
-
-enum flow_dissect_ret {
-	FLOW_DISSECT_RET_OUT_GOOD = 0,
-	FLOW_DISSECT_RET_OUT_BAD = 1,
-	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
-	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
-	FLOW_DISSECT_RET_CONTINUE = 4,
-};
-
-struct flow_dissector_key_basic {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-};
-
-struct flow_dissector_key_tags {
-	u32 flow_label;
-};
-
-struct flow_dissector_key_vlan {
-	union {
-		struct {
-			u16 vlan_id: 12;
-			u16 vlan_dei: 1;
-			u16 vlan_priority: 3;
-		};
-		__be16 vlan_tci;
-	};
-	__be16 vlan_tpid;
-};
-
-struct flow_dissector_mpls_lse {
-	u32 mpls_ttl: 8;
-	u32 mpls_bos: 1;
-	u32 mpls_tc: 3;
-	u32 mpls_label: 20;
-};
-
-struct flow_dissector_key_mpls {
-	struct flow_dissector_mpls_lse ls[7];
-	u8 used_lses;
-};
-
-struct flow_dissector_key_enc_opts {
-	u8 data[255];
-	u8 len;
-	__be16 dst_opt_type;
-};
-
-struct flow_dissector_key_keyid {
-	__be32 keyid;
-};
-
-struct flow_dissector_key_ipv4_addrs {
-	__be32 src;
-	__be32 dst;
-};
-
-struct flow_dissector_key_ipv6_addrs {
-	struct in6_addr src;
-	struct in6_addr dst;
-};
-
-struct flow_dissector_key_tipc {
-	__be32 key;
-};
-
-struct flow_dissector_key_addrs {
-	union {
-		struct flow_dissector_key_ipv4_addrs v4addrs;
-		struct flow_dissector_key_ipv6_addrs v6addrs;
-		struct flow_dissector_key_tipc tipckey;
-	};
-};
-
-struct flow_dissector_key_arp {
-	__u32 sip;
-	__u32 tip;
-	__u8 op;
-	unsigned char sha[6];
-	unsigned char tha[6];
-};
-
-struct flow_dissector_key_ports {
-	union {
-		__be32 ports;
-		struct {
-			__be16 src;
-			__be16 dst;
-		};
-	};
-};
-
-struct flow_dissector_key_icmp {
-	struct {
-		u8 type;
-		u8 code;
-	};
-	u16 id;
-};
-
-struct flow_dissector_key_eth_addrs {
-	unsigned char dst[6];
-	unsigned char src[6];
-};
-
-struct flow_dissector_key_tcp {
-	__be16 flags;
-};
-
-struct flow_dissector_key_ip {
-	__u8 tos;
-	__u8 ttl;
-};
-
-struct flow_dissector_key_meta {
-	int ingress_ifindex;
-	u16 ingress_iftype;
-};
-
-struct flow_dissector_key_ct {
-	u16 ct_state;
-	u16 ct_zone;
-	u32 ct_mark;
-	u32 ct_labels[4];
-};
-
-struct flow_dissector_key_hash {
-	u32 hash;
-};
-
-struct flow_dissector_key {
-	enum flow_dissector_key_id key_id;
-	size_t offset;
-};
-
-struct flow_keys_basic {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-};
-
-struct flow_keys {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-	struct flow_dissector_key_tags tags;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_vlan cvlan;
-	struct flow_dissector_key_keyid keyid;
-	struct flow_dissector_key_ports ports;
-	struct flow_dissector_key_icmp icmp;
-	struct flow_dissector_key_addrs addrs;
-	int: 32;
-};
-
-struct flow_keys_digest {
-	u8 data[16];
-};
-
-enum ip_conntrack_info {
-	IP_CT_ESTABLISHED = 0,
-	IP_CT_RELATED = 1,
-	IP_CT_NEW = 2,
-	IP_CT_IS_REPLY = 3,
-	IP_CT_ESTABLISHED_REPLY = 3,
-	IP_CT_RELATED_REPLY = 4,
-	IP_CT_NUMBER = 5,
-	IP_CT_UNTRACKED = 7,
-};
-
-struct xt_table_info;
-
-struct xt_table {
-	struct list_head list;
-	unsigned int valid_hooks;
-	struct xt_table_info *private;
-	struct module *me;
-	u_int8_t af;
-	int priority;
-	int (*table_init)(struct net *);
-	const char name[32];
-};
-
-union nf_inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-struct ip_ct_tcp_state {
-	u_int32_t td_end;
-	u_int32_t td_maxend;
-	u_int32_t td_maxwin;
-	u_int32_t td_maxack;
-	u_int8_t td_scale;
-	u_int8_t flags;
-};
-
-struct ip_ct_tcp {
-	struct ip_ct_tcp_state seen[2];
-	u_int8_t state;
-	u_int8_t last_dir;
-	u_int8_t retrans;
-	u_int8_t last_index;
-	u_int32_t last_seq;
-	u_int32_t last_ack;
-	u_int32_t last_end;
-	u_int16_t last_win;
-	u_int8_t last_wscale;
-	u_int8_t last_flags;
-};
-
-union nf_conntrack_man_proto {
-	__be16 all;
-	struct {
-		__be16 port;
-	} tcp;
-	struct {
-		__be16 port;
-	} udp;
-	struct {
-		__be16 id;
-	} icmp;
-	struct {
-		__be16 port;
-	} dccp;
-	struct {
-		__be16 port;
-	} sctp;
-	struct {
-		__be16 key;
-	} gre;
-};
-
-struct nf_ct_dccp {
-	u_int8_t role[2];
-	u_int8_t state;
-	u_int8_t last_pkt;
-	u_int8_t last_dir;
-	u_int64_t handshake_seq;
-};
-
-struct ip_ct_sctp {
-	enum sctp_conntrack state;
-	__be32 vtag[2];
-	u8 last_dir;
-	u8 flags;
-};
-
-struct nf_ct_event;
-
-struct nf_ct_event_notifier {
-	int (*fcn)(unsigned int, struct nf_ct_event *);
-};
-
-struct nf_exp_event;
-
-struct nf_exp_event_notifier {
-	int (*fcn)(unsigned int, struct nf_exp_event *);
-};
-
-enum bpf_ret_code {
-	BPF_OK = 0,
-	BPF_DROP = 2,
-	BPF_REDIRECT = 7,
-	BPF_LWT_REROUTE = 128,
-};
-
-enum {
-	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
-};
-
-struct ip_tunnel_parm {
-	char name[16];
-	int link;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	struct iphdr iph;
-};
-
-struct ip_tunnel_key {
-	__be64 tun_id;
-	union {
-		struct {
-			__be32 src;
-			__be32 dst;
-		} ipv4;
-		struct {
-			struct in6_addr src;
-			struct in6_addr dst;
-		} ipv6;
-	} u;
-	__be16 tun_flags;
-	u8 tos;
-	u8 ttl;
-	__be32 label;
-	__be16 tp_src;
-	__be16 tp_dst;
-};
-
-struct dst_cache_pcpu;
-
-struct dst_cache {
-	struct dst_cache_pcpu *cache;
-	long unsigned int reset_ts;
-};
-
-struct ip_tunnel_info {
-	struct ip_tunnel_key key;
-	struct dst_cache dst_cache;
-	u8 options_len;
-	u8 mode;
-};
-
-struct lwtunnel_state {
-	__u16 type;
-	__u16 flags;
-	__u16 headroom;
-	atomic_t refcnt;
-	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
-	int (*orig_input)(struct sk_buff *);
-	struct callback_head rcu;
-	__u8 data[0];
-};
-
-union tcp_word_hdr {
-	struct tcphdr hdr;
-	__be32 words[5];
-};
-
-struct arphdr {
-	__be16 ar_hrd;
-	__be16 ar_pro;
-	unsigned char ar_hln;
-	unsigned char ar_pln;
-	__be16 ar_op;
-};
-
-struct fib_info;
-
-struct fib_nh {
-	struct fib_nh_common nh_common;
-	struct hlist_node nh_hash;
-	struct fib_info *nh_parent;
-	__u32 nh_tclassid;
-	__be32 nh_saddr;
-	int nh_saddr_genid;
-};
-
-struct fib_info {
-	struct hlist_node fib_hash;
-	struct hlist_node fib_lhash;
-	struct list_head nh_list;
-	struct net *fib_net;
-	int fib_treeref;
-	refcount_t fib_clntref;
-	unsigned int fib_flags;
-	unsigned char fib_dead;
-	unsigned char fib_protocol;
-	unsigned char fib_scope;
-	unsigned char fib_type;
-	__be32 fib_prefsrc;
-	u32 fib_tb_id;
-	u32 fib_priority;
-	struct dst_metrics *fib_metrics;
-	int fib_nhs;
-	bool fib_nh_is_v6;
-	bool nh_updated;
-	struct nexthop *nh;
-	struct callback_head rcu;
-	struct fib_nh fib_nh[0];
-};
-
-struct nh_info;
-
-struct nh_group;
-
-struct nexthop {
-	struct rb_node rb_node;
-	struct list_head fi_list;
-	struct list_head f6i_list;
-	struct list_head fdb_list;
-	struct list_head grp_list;
-	struct net *net;
-	u32 id;
-	u8 protocol;
-	u8 nh_flags;
-	bool is_group;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	union {
-		struct nh_info *nh_info;
-		struct nh_group *nh_grp;
-	};
-};
-
-struct nh_info {
-	struct hlist_node dev_hash;
-	struct nexthop *nh_parent;
-	u8 family;
-	bool reject_nh;
-	bool fdb_nh;
-	union {
-		struct fib_nh_common fib_nhc;
-		struct fib_nh fib_nh;
-		struct fib6_nh fib6_nh;
-	};
-};
-
-struct nh_grp_entry {
-	struct nexthop *nh;
-	u8 weight;
-	atomic_t upper_bound;
-	struct list_head nh_list;
-	struct nexthop *nh_parent;
-};
-
-struct nh_group {
-	struct nh_group *spare;
-	u16 num_nh;
-	bool mpath;
-	bool fdb_nh;
-	bool has_v4;
-	struct nh_grp_entry nh_entries[0];
-};
-
-enum metadata_type {
-	METADATA_IP_TUNNEL = 0,
-	METADATA_HW_PORT_MUX = 1,
-};
-
-struct hw_port_info {
-	struct net_device *lower_dev;
-	u32 port_id;
-};
-
-struct metadata_dst {
-	struct dst_entry dst;
-	enum metadata_type type;
-	union {
-		struct ip_tunnel_info tun_info;
-		struct hw_port_info port_info;
-	} u;
-};
-
-struct gre_base_hdr {
-	__be16 flags;
-	__be16 protocol;
-};
-
-struct gre_full_hdr {
-	struct gre_base_hdr fixed_header;
-	__be16 csum;
-	__be16 reserved1;
-	__be32 key;
-	__be32 seq;
-};
-
-struct pptp_gre_header {
-	struct gre_base_hdr gre_hd;
-	__be16 payload_len;
-	__be16 call_id;
-	__be32 seq;
-	__be32 ack;
-};
-
-struct tipc_basic_hdr {
-	__be32 w[4];
-};
-
-struct icmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 checksum;
-	union {
-		struct {
-			__be16 id;
-			__be16 sequence;
-		} echo;
-		__be32 gateway;
-		struct {
-			__be16 __unused;
-			__be16 mtu;
-		} frag;
-		__u8 reserved[4];
-	} un;
-};
-
-enum l2tp_debug_flags {
-	L2TP_MSG_DEBUG = 1,
-	L2TP_MSG_CONTROL = 2,
-	L2TP_MSG_SEQ = 4,
-	L2TP_MSG_DATA = 8,
-};
-
-struct pppoe_tag {
-	__be16 tag_type;
-	__be16 tag_len;
-	char tag_data[0];
-};
-
-struct pppoe_hdr {
-	__u8 type: 4;
-	__u8 ver: 4;
-	__u8 code;
-	__be16 sid;
-	__be16 length;
-	struct pppoe_tag tag[0];
-};
-
-struct mpls_label {
-	__be32 entry;
-};
-
-enum batadv_packettype {
-	BATADV_IV_OGM = 0,
-	BATADV_BCAST = 1,
-	BATADV_CODED = 2,
-	BATADV_ELP = 3,
-	BATADV_OGM2 = 4,
-	BATADV_UNICAST = 64,
-	BATADV_UNICAST_FRAG = 65,
-	BATADV_UNICAST_4ADDR = 66,
-	BATADV_ICMP = 67,
-	BATADV_UNICAST_TVLV = 68,
-};
-
-struct batadv_unicast_packet {
-	__u8 packet_type;
-	__u8 version;
-	__u8 ttl;
-	__u8 ttvn;
-	__u8 dest[6];
-};
-
-struct nf_conntrack_zone {
-	u16 id;
-	u8 flags;
-	u8 dir;
-};
-
-struct nf_conntrack_man {
-	union nf_inet_addr u3;
-	union nf_conntrack_man_proto u;
-	u_int16_t l3num;
-};
-
-struct nf_conntrack_tuple {
-	struct nf_conntrack_man src;
-	struct {
-		union nf_inet_addr u3;
-		union {
-			__be16 all;
-			struct {
-				__be16 port;
-			} tcp;
-			struct {
-				__be16 port;
-			} udp;
-			struct {
-				u_int8_t type;
-				u_int8_t code;
-			} icmp;
-			struct {
-				__be16 port;
-			} dccp;
-			struct {
-				__be16 port;
-			} sctp;
-			struct {
-				__be16 key;
-			} gre;
-		} u;
-		u_int8_t protonum;
-		u_int8_t dir;
-	} dst;
-};
-
-struct nf_conntrack_tuple_hash {
-	struct hlist_nulls_node hnnode;
-	struct nf_conntrack_tuple tuple;
-};
-
-struct nf_ct_udp {
-	long unsigned int stream_ts;
-};
-
-struct nf_ct_gre {
-	unsigned int stream_timeout;
-	unsigned int timeout;
-};
-
-union nf_conntrack_proto {
-	struct nf_ct_dccp dccp;
-	struct ip_ct_sctp sctp;
-	struct ip_ct_tcp tcp;
-	struct nf_ct_udp udp;
-	struct nf_ct_gre gre;
-	unsigned int tmpl_padto;
-};
-
-struct nf_ct_ext;
-
-struct nf_conn {
-	struct nf_conntrack ct_general;
-	spinlock_t lock;
-	u32 timeout;
-	struct nf_conntrack_zone zone;
-	struct nf_conntrack_tuple_hash tuplehash[2];
-	long unsigned int status;
-	u16 cpu;
-	possible_net_t ct_net;
-	struct hlist_node nat_bysource;
-	struct {	} __nfct_init_offset;
-	struct nf_conn *master;
-	u_int32_t mark;
-	u_int32_t secmark;
-	struct nf_ct_ext *ext;
-	union nf_conntrack_proto proto;
-};
-
-struct xt_table_info {
-	unsigned int size;
-	unsigned int number;
-	unsigned int initial_entries;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int stacksize;
-	void ***jumpstack;
-	unsigned char entries[0];
-};
-
-struct nf_conntrack_tuple_mask {
-	struct {
-		union nf_inet_addr u3;
-		union nf_conntrack_man_proto u;
-	} src;
-};
-
-struct nf_ct_ext {
-	u8 offset[9];
-	u8 len;
-	char data[0];
-};
-
-struct nf_conntrack_helper;
-
-struct nf_conntrack_expect {
-	struct hlist_node lnode;
-	struct hlist_node hnode;
-	struct nf_conntrack_tuple tuple;
-	struct nf_conntrack_tuple_mask mask;
-	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
-	struct nf_conntrack_helper *helper;
-	struct nf_conn *master;
-	struct timer_list timeout;
-	refcount_t use;
-	unsigned int flags;
-	unsigned int class;
-	union nf_inet_addr saved_addr;
-	union nf_conntrack_man_proto saved_proto;
-	enum ip_conntrack_dir dir;
-	struct callback_head rcu;
-};
-
-enum nf_ct_ext_id {
-	NF_CT_EXT_HELPER = 0,
-	NF_CT_EXT_NAT = 1,
-	NF_CT_EXT_SEQADJ = 2,
-	NF_CT_EXT_ACCT = 3,
-	NF_CT_EXT_ECACHE = 4,
-	NF_CT_EXT_TSTAMP = 5,
-	NF_CT_EXT_TIMEOUT = 6,
-	NF_CT_EXT_LABELS = 7,
-	NF_CT_EXT_SYNPROXY = 8,
-	NF_CT_EXT_NUM = 9,
-};
-
-struct nf_ct_event {
-	struct nf_conn *ct;
-	u32 portid;
-	int report;
-};
-
-struct nf_exp_event {
-	struct nf_conntrack_expect *exp;
-	u32 portid;
-	int report;
-};
-
-struct nf_conn_labels {
-	long unsigned int bits[2];
-};
-
-struct _flow_keys_digest_data {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-	__be32 ports;
-	__be32 src;
-	__be32 dst;
-};
-
-struct rps_sock_flow_table {
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 ents[0];
-};
-
-enum {
-	IF_OPER_UNKNOWN = 0,
-	IF_OPER_NOTPRESENT = 1,
-	IF_OPER_DOWN = 2,
-	IF_OPER_LOWERLAYERDOWN = 3,
-	IF_OPER_TESTING = 4,
-	IF_OPER_DORMANT = 5,
-	IF_OPER_UP = 6,
-};
-
-struct ipv4_devconf {
-	void *sysctl;
-	int data[32];
-	long unsigned int state[1];
-};
-
-enum nf_dev_hooks {
-	NF_NETDEV_INGRESS = 0,
-	NF_NETDEV_NUMHOOKS = 1,
-};
-
-struct ifbond {
-	__s32 bond_mode;
-	__s32 num_slaves;
-	__s32 miimon;
-};
-
-typedef struct ifbond ifbond;
-
-struct ifslave {
-	__s32 slave_id;
-	char slave_name[16];
-	__s8 link;
-	__s8 state;
-	__u32 link_failure_count;
-};
-
-typedef struct ifslave ifslave;
-
-struct netdev_boot_setup {
-	char name[16];
-	struct ifmap map;
-};
-
-enum {
-	NAPIF_STATE_SCHED = 1,
-	NAPIF_STATE_MISSED = 2,
-	NAPIF_STATE_DISABLE = 4,
-	NAPIF_STATE_NPSVC = 8,
-	NAPIF_STATE_LISTED = 16,
-	NAPIF_STATE_NO_BUSY_POLL = 32,
-	NAPIF_STATE_IN_BUSY_POLL = 64,
-};
-
-enum gro_result {
-	GRO_MERGED = 0,
-	GRO_MERGED_FREE = 1,
-	GRO_HELD = 2,
-	GRO_NORMAL = 3,
-	GRO_DROP = 4,
-	GRO_CONSUMED = 5,
-};
-
-typedef enum gro_result gro_result_t;
-
-struct bpf_xdp_link {
-	struct bpf_link link;
-	struct net_device *dev;
-	int flags;
-};
-
-struct netdev_net_notifier {
-	struct list_head list;
-	struct notifier_block *nb;
-};
-
-struct netpoll;
-
-struct netpoll_info {
-	refcount_t refcnt;
-	struct semaphore dev_lock;
-	struct sk_buff_head txq;
-	struct delayed_work tx_work;
-	struct netpoll *netpoll;
-	struct callback_head rcu;
-};
-
-struct udp_tunnel_info {
-	short unsigned int type;
-	sa_family_t sa_family;
-	__be16 port;
-	u8 hw_priv;
-};
-
-struct in_ifaddr;
-
-struct ip_mc_list;
-
-struct in_device {
-	struct net_device *dev;
-	refcount_t refcnt;
-	int dead;
-	struct in_ifaddr *ifa_list;
-	struct ip_mc_list *mc_list;
-	struct ip_mc_list **mc_hash;
-	int mc_count;
-	spinlock_t mc_tomb_lock;
-	struct ip_mc_list *mc_tomb;
-	long unsigned int mr_v1_seen;
-	long unsigned int mr_v2_seen;
-	long unsigned int mr_maxdelay;
-	long unsigned int mr_qi;
-	long unsigned int mr_qri;
-	unsigned char mr_qrv;
-	unsigned char mr_gq_running;
-	unsigned char mr_ifc_count;
-	struct timer_list mr_gq_timer;
-	struct timer_list mr_ifc_timer;
-	struct neigh_parms *arp_parms;
-	struct ipv4_devconf cnf;
-	struct callback_head callback_head;
-};
-
-struct offload_callbacks {
-	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
-	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sk_buff *, int);
-};
-
-struct packet_offload {
-	__be16 type;
-	u16 priority;
-	struct offload_callbacks callbacks;
-	struct list_head list;
-};
-
-struct netdev_notifier_info_ext {
-	struct netdev_notifier_info info;
-	union {
-		u32 mtu;
-	} ext;
-};
-
-struct netdev_notifier_change_info {
-	struct netdev_notifier_info info;
-	unsigned int flags_changed;
-};
-
-struct netdev_notifier_changeupper_info {
-	struct netdev_notifier_info info;
-	struct net_device *upper_dev;
-	bool master;
-	bool linking;
-	void *upper_info;
-};
-
-struct netdev_notifier_changelowerstate_info {
-	struct netdev_notifier_info info;
-	void *lower_state_info;
-};
-
-struct netdev_notifier_pre_changeaddr_info {
-	struct netdev_notifier_info info;
-	const unsigned char *dev_addr;
-};
-
-typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
-
-enum {
-	NESTED_SYNC_IMM_BIT = 0,
-	NESTED_SYNC_TODO_BIT = 1,
-};
-
-struct netdev_nested_priv {
-	unsigned char flags;
-	void *data;
-};
-
-struct netdev_bonding_info {
-	ifslave slave;
-	ifbond master;
-};
-
-struct netdev_notifier_bonding_info {
-	struct netdev_notifier_info info;
-	struct netdev_bonding_info bonding_info;
-};
-
-union inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-struct netpoll {
-	struct net_device *dev;
-	char dev_name[16];
-	const char *name;
-	union inet_addr local_ip;
-	union inet_addr remote_ip;
-	bool ipv6;
-	u16 local_port;
-	u16 remote_port;
-	u8 remote_mac[6];
-};
-
-enum qdisc_state_t {
-	__QDISC_STATE_SCHED = 0,
-	__QDISC_STATE_DEACTIVATED = 1,
-};
-
-struct tcf_walker {
-	int stop;
-	int skip;
-	int count;
-	bool nonempty;
-	long unsigned int cookie;
-	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
-};
-
-enum {
-	IPV4_DEVCONF_FORWARDING = 1,
-	IPV4_DEVCONF_MC_FORWARDING = 2,
-	IPV4_DEVCONF_PROXY_ARP = 3,
-	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
-	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
-	IPV4_DEVCONF_SEND_REDIRECTS = 6,
-	IPV4_DEVCONF_SHARED_MEDIA = 7,
-	IPV4_DEVCONF_RP_FILTER = 8,
-	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
-	IPV4_DEVCONF_BOOTP_RELAY = 10,
-	IPV4_DEVCONF_LOG_MARTIANS = 11,
-	IPV4_DEVCONF_TAG = 12,
-	IPV4_DEVCONF_ARPFILTER = 13,
-	IPV4_DEVCONF_MEDIUM_ID = 14,
-	IPV4_DEVCONF_NOXFRM = 15,
-	IPV4_DEVCONF_NOPOLICY = 16,
-	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
-	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
-	IPV4_DEVCONF_ARP_IGNORE = 19,
-	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
-	IPV4_DEVCONF_ARP_ACCEPT = 21,
-	IPV4_DEVCONF_ARP_NOTIFY = 22,
-	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
-	IPV4_DEVCONF_SRC_VMARK = 24,
-	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
-	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
-	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
-	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
-	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
-	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
-	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
-	IPV4_DEVCONF_BC_FORWARDING = 32,
-	__IPV4_DEVCONF_MAX = 33,
-};
-
-struct in_ifaddr {
-	struct hlist_node hash;
-	struct in_ifaddr *ifa_next;
-	struct in_device *ifa_dev;
-	struct callback_head callback_head;
-	__be32 ifa_local;
-	__be32 ifa_address;
-	__be32 ifa_mask;
-	__u32 ifa_rt_priority;
-	__be32 ifa_broadcast;
-	unsigned char ifa_scope;
-	unsigned char ifa_prefixlen;
-	__u32 ifa_flags;
-	char ifa_label[16];
-	__u32 ifa_valid_lft;
-	__u32 ifa_preferred_lft;
-	long unsigned int ifa_cstamp;
-	long unsigned int ifa_tstamp;
-};
-
-struct udp_tunnel_nic_shared {
-	struct udp_tunnel_nic *udp_tunnel_nic_info;
-	struct list_head devices;
-};
-
-struct dev_kfree_skb_cb {
-	enum skb_free_reason reason;
-};
-
-struct netdev_adjacent {
-	struct net_device *dev;
-	bool master;
-	bool ignore;
-	u16 ref_nr;
-	void *private;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netdev_hw_addr {
-	struct list_head list;
-	unsigned char addr[32];
-	unsigned char type;
-	bool global_use;
-	int sync_cnt;
-	int refcount;
-	int synced;
-	struct callback_head callback_head;
-};
-
-enum {
-	NDA_UNSPEC = 0,
-	NDA_DST = 1,
-	NDA_LLADDR = 2,
-	NDA_CACHEINFO = 3,
-	NDA_PROBES = 4,
-	NDA_VLAN = 5,
-	NDA_PORT = 6,
-	NDA_VNI = 7,
-	NDA_IFINDEX = 8,
-	NDA_MASTER = 9,
-	NDA_LINK_NETNSID = 10,
-	NDA_SRC_VNI = 11,
-	NDA_PROTOCOL = 12,
-	NDA_NH_ID = 13,
-	NDA_FDB_EXT_ATTRS = 14,
-	__NDA_MAX = 15,
-};
-
-struct nda_cacheinfo {
-	__u32 ndm_confirmed;
-	__u32 ndm_used;
-	__u32 ndm_updated;
-	__u32 ndm_refcnt;
-};
-
-struct ndt_stats {
-	__u64 ndts_allocs;
-	__u64 ndts_destroys;
-	__u64 ndts_hash_grows;
-	__u64 ndts_res_failed;
-	__u64 ndts_lookups;
-	__u64 ndts_hits;
-	__u64 ndts_rcv_probes_mcast;
-	__u64 ndts_rcv_probes_ucast;
-	__u64 ndts_periodic_gc_runs;
-	__u64 ndts_forced_gc_runs;
-	__u64 ndts_table_fulls;
-};
-
-enum {
-	NDTPA_UNSPEC = 0,
-	NDTPA_IFINDEX = 1,
-	NDTPA_REFCNT = 2,
-	NDTPA_REACHABLE_TIME = 3,
-	NDTPA_BASE_REACHABLE_TIME = 4,
-	NDTPA_RETRANS_TIME = 5,
-	NDTPA_GC_STALETIME = 6,
-	NDTPA_DELAY_PROBE_TIME = 7,
-	NDTPA_QUEUE_LEN = 8,
-	NDTPA_APP_PROBES = 9,
-	NDTPA_UCAST_PROBES = 10,
-	NDTPA_MCAST_PROBES = 11,
-	NDTPA_ANYCAST_DELAY = 12,
-	NDTPA_PROXY_DELAY = 13,
-	NDTPA_PROXY_QLEN = 14,
-	NDTPA_LOCKTIME = 15,
-	NDTPA_QUEUE_LENBYTES = 16,
-	NDTPA_MCAST_REPROBES = 17,
-	NDTPA_PAD = 18,
-	__NDTPA_MAX = 19,
-};
-
-struct ndtmsg {
-	__u8 ndtm_family;
-	__u8 ndtm_pad1;
-	__u16 ndtm_pad2;
-};
-
-struct ndt_config {
-	__u16 ndtc_key_len;
-	__u16 ndtc_entry_size;
-	__u32 ndtc_entries;
-	__u32 ndtc_last_flush;
-	__u32 ndtc_last_rand;
-	__u32 ndtc_hash_rnd;
-	__u32 ndtc_hash_mask;
-	__u32 ndtc_hash_chain_gc;
-	__u32 ndtc_proxy_qlen;
-};
-
-enum {
-	NDTA_UNSPEC = 0,
-	NDTA_NAME = 1,
-	NDTA_THRESH1 = 2,
-	NDTA_THRESH2 = 3,
-	NDTA_THRESH3 = 4,
-	NDTA_CONFIG = 5,
-	NDTA_PARMS = 6,
-	NDTA_STATS = 7,
-	NDTA_GC_INTERVAL = 8,
-	NDTA_PAD = 9,
-	__NDTA_MAX = 10,
-};
-
-enum {
-	RTN_UNSPEC = 0,
-	RTN_UNICAST = 1,
-	RTN_LOCAL = 2,
-	RTN_BROADCAST = 3,
-	RTN_ANYCAST = 4,
-	RTN_MULTICAST = 5,
-	RTN_BLACKHOLE = 6,
-	RTN_UNREACHABLE = 7,
-	RTN_PROHIBIT = 8,
-	RTN_THROW = 9,
-	RTN_NAT = 10,
-	RTN_XRESOLVE = 11,
-	__RTN_MAX = 12,
-};
-
-enum {
-	NEIGH_ARP_TABLE = 0,
-	NEIGH_ND_TABLE = 1,
-	NEIGH_DN_TABLE = 2,
-	NEIGH_NR_TABLES = 3,
-	NEIGH_LINK_TABLE = 3,
-};
-
-struct neigh_seq_state {
-	struct seq_net_private p;
-	struct neigh_table *tbl;
-	struct neigh_hash_table *nht;
-	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
-	unsigned int bucket;
-	unsigned int flags;
-};
-
-struct neighbour_cb {
-	long unsigned int sched_next;
-	unsigned int flags;
-};
-
-enum netevent_notif_type {
-	NETEVENT_NEIGH_UPDATE = 1,
-	NETEVENT_REDIRECT = 2,
-	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
-	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
-	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
-	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
-};
-
-struct neigh_dump_filter {
-	int master_idx;
-	int dev_idx;
-};
-
-struct neigh_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table neigh_vars[21];
-};
-
-struct netlink_dump_control {
-	int (*start)(struct netlink_callback *);
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	u32 min_dump_alloc;
-};
-
-struct rtnl_link_stats {
-	__u32 rx_packets;
-	__u32 tx_packets;
-	__u32 rx_bytes;
-	__u32 tx_bytes;
-	__u32 rx_errors;
-	__u32 tx_errors;
-	__u32 rx_dropped;
-	__u32 tx_dropped;
-	__u32 multicast;
-	__u32 collisions;
-	__u32 rx_length_errors;
-	__u32 rx_over_errors;
-	__u32 rx_crc_errors;
-	__u32 rx_frame_errors;
-	__u32 rx_fifo_errors;
-	__u32 rx_missed_errors;
-	__u32 tx_aborted_errors;
-	__u32 tx_carrier_errors;
-	__u32 tx_fifo_errors;
-	__u32 tx_heartbeat_errors;
-	__u32 tx_window_errors;
-	__u32 rx_compressed;
-	__u32 tx_compressed;
-	__u32 rx_nohandler;
-};
-
-struct rtnl_link_ifmap {
-	__u64 mem_start;
-	__u64 mem_end;
-	__u64 base_addr;
-	__u16 irq;
-	__u8 dma;
-	__u8 port;
-};
-
-enum {
-	IFLA_UNSPEC = 0,
-	IFLA_ADDRESS = 1,
-	IFLA_BROADCAST = 2,
-	IFLA_IFNAME = 3,
-	IFLA_MTU = 4,
-	IFLA_LINK = 5,
-	IFLA_QDISC = 6,
-	IFLA_STATS = 7,
-	IFLA_COST = 8,
-	IFLA_PRIORITY = 9,
-	IFLA_MASTER = 10,
-	IFLA_WIRELESS = 11,
-	IFLA_PROTINFO = 12,
-	IFLA_TXQLEN = 13,
-	IFLA_MAP = 14,
-	IFLA_WEIGHT = 15,
-	IFLA_OPERSTATE = 16,
-	IFLA_LINKMODE = 17,
-	IFLA_LINKINFO = 18,
-	IFLA_NET_NS_PID = 19,
-	IFLA_IFALIAS = 20,
-	IFLA_NUM_VF = 21,
-	IFLA_VFINFO_LIST = 22,
-	IFLA_STATS64 = 23,
-	IFLA_VF_PORTS = 24,
-	IFLA_PORT_SELF = 25,
-	IFLA_AF_SPEC = 26,
-	IFLA_GROUP = 27,
-	IFLA_NET_NS_FD = 28,
-	IFLA_EXT_MASK = 29,
-	IFLA_PROMISCUITY = 30,
-	IFLA_NUM_TX_QUEUES = 31,
-	IFLA_NUM_RX_QUEUES = 32,
-	IFLA_CARRIER = 33,
-	IFLA_PHYS_PORT_ID = 34,
-	IFLA_CARRIER_CHANGES = 35,
-	IFLA_PHYS_SWITCH_ID = 36,
-	IFLA_LINK_NETNSID = 37,
-	IFLA_PHYS_PORT_NAME = 38,
-	IFLA_PROTO_DOWN = 39,
-	IFLA_GSO_MAX_SEGS = 40,
-	IFLA_GSO_MAX_SIZE = 41,
-	IFLA_PAD = 42,
-	IFLA_XDP = 43,
-	IFLA_EVENT = 44,
-	IFLA_NEW_NETNSID = 45,
-	IFLA_IF_NETNSID = 46,
-	IFLA_TARGET_NETNSID = 46,
-	IFLA_CARRIER_UP_COUNT = 47,
-	IFLA_CARRIER_DOWN_COUNT = 48,
-	IFLA_NEW_IFINDEX = 49,
-	IFLA_MIN_MTU = 50,
-	IFLA_MAX_MTU = 51,
-	IFLA_PROP_LIST = 52,
-	IFLA_ALT_IFNAME = 53,
-	IFLA_PERM_ADDRESS = 54,
-	IFLA_PROTO_DOWN_REASON = 55,
-	__IFLA_MAX = 56,
-};
-
-enum {
-	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
-	IFLA_PROTO_DOWN_REASON_MASK = 1,
-	IFLA_PROTO_DOWN_REASON_VALUE = 2,
-	__IFLA_PROTO_DOWN_REASON_CNT = 3,
-	IFLA_PROTO_DOWN_REASON_MAX = 2,
-};
-
-enum {
-	IFLA_BRPORT_UNSPEC = 0,
-	IFLA_BRPORT_STATE = 1,
-	IFLA_BRPORT_PRIORITY = 2,
-	IFLA_BRPORT_COST = 3,
-	IFLA_BRPORT_MODE = 4,
-	IFLA_BRPORT_GUARD = 5,
-	IFLA_BRPORT_PROTECT = 6,
-	IFLA_BRPORT_FAST_LEAVE = 7,
-	IFLA_BRPORT_LEARNING = 8,
-	IFLA_BRPORT_UNICAST_FLOOD = 9,
-	IFLA_BRPORT_PROXYARP = 10,
-	IFLA_BRPORT_LEARNING_SYNC = 11,
-	IFLA_BRPORT_PROXYARP_WIFI = 12,
-	IFLA_BRPORT_ROOT_ID = 13,
-	IFLA_BRPORT_BRIDGE_ID = 14,
-	IFLA_BRPORT_DESIGNATED_PORT = 15,
-	IFLA_BRPORT_DESIGNATED_COST = 16,
-	IFLA_BRPORT_ID = 17,
-	IFLA_BRPORT_NO = 18,
-	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
-	IFLA_BRPORT_CONFIG_PENDING = 20,
-	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
-	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
-	IFLA_BRPORT_HOLD_TIMER = 23,
-	IFLA_BRPORT_FLUSH = 24,
-	IFLA_BRPORT_MULTICAST_ROUTER = 25,
-	IFLA_BRPORT_PAD = 26,
-	IFLA_BRPORT_MCAST_FLOOD = 27,
-	IFLA_BRPORT_MCAST_TO_UCAST = 28,
-	IFLA_BRPORT_VLAN_TUNNEL = 29,
-	IFLA_BRPORT_BCAST_FLOOD = 30,
-	IFLA_BRPORT_GROUP_FWD_MASK = 31,
-	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
-	IFLA_BRPORT_ISOLATED = 33,
-	IFLA_BRPORT_BACKUP_PORT = 34,
-	IFLA_BRPORT_MRP_RING_OPEN = 35,
-	IFLA_BRPORT_MRP_IN_OPEN = 36,
-	__IFLA_BRPORT_MAX = 37,
-};
-
-enum {
-	IFLA_INFO_UNSPEC = 0,
-	IFLA_INFO_KIND = 1,
-	IFLA_INFO_DATA = 2,
-	IFLA_INFO_XSTATS = 3,
-	IFLA_INFO_SLAVE_KIND = 4,
-	IFLA_INFO_SLAVE_DATA = 5,
-	__IFLA_INFO_MAX = 6,
-};
-
-enum {
-	IFLA_VF_INFO_UNSPEC = 0,
-	IFLA_VF_INFO = 1,
-	__IFLA_VF_INFO_MAX = 2,
-};
-
-enum {
-	IFLA_VF_UNSPEC = 0,
-	IFLA_VF_MAC = 1,
-	IFLA_VF_VLAN = 2,
-	IFLA_VF_TX_RATE = 3,
-	IFLA_VF_SPOOFCHK = 4,
-	IFLA_VF_LINK_STATE = 5,
-	IFLA_VF_RATE = 6,
-	IFLA_VF_RSS_QUERY_EN = 7,
-	IFLA_VF_STATS = 8,
-	IFLA_VF_TRUST = 9,
-	IFLA_VF_IB_NODE_GUID = 10,
-	IFLA_VF_IB_PORT_GUID = 11,
-	IFLA_VF_VLAN_LIST = 12,
-	IFLA_VF_BROADCAST = 13,
-	__IFLA_VF_MAX = 14,
-};
-
-struct ifla_vf_mac {
-	__u32 vf;
-	__u8 mac[32];
-};
-
-struct ifla_vf_broadcast {
-	__u8 broadcast[32];
-};
-
-struct ifla_vf_vlan {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-};
-
-enum {
-	IFLA_VF_VLAN_INFO_UNSPEC = 0,
-	IFLA_VF_VLAN_INFO = 1,
-	__IFLA_VF_VLAN_INFO_MAX = 2,
-};
-
-struct ifla_vf_vlan_info {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-	__be16 vlan_proto;
-};
-
-struct ifla_vf_tx_rate {
-	__u32 vf;
-	__u32 rate;
-};
-
-struct ifla_vf_rate {
-	__u32 vf;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-};
-
-struct ifla_vf_spoofchk {
-	__u32 vf;
-	__u32 setting;
-};
-
-struct ifla_vf_link_state {
-	__u32 vf;
-	__u32 link_state;
-};
-
-struct ifla_vf_rss_query_en {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_STATS_RX_PACKETS = 0,
-	IFLA_VF_STATS_TX_PACKETS = 1,
-	IFLA_VF_STATS_RX_BYTES = 2,
-	IFLA_VF_STATS_TX_BYTES = 3,
-	IFLA_VF_STATS_BROADCAST = 4,
-	IFLA_VF_STATS_MULTICAST = 5,
-	IFLA_VF_STATS_PAD = 6,
-	IFLA_VF_STATS_RX_DROPPED = 7,
-	IFLA_VF_STATS_TX_DROPPED = 8,
-	__IFLA_VF_STATS_MAX = 9,
-};
-
-struct ifla_vf_trust {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_PORT_UNSPEC = 0,
-	IFLA_VF_PORT = 1,
-	__IFLA_VF_PORT_MAX = 2,
-};
-
-enum {
-	IFLA_PORT_UNSPEC = 0,
-	IFLA_PORT_VF = 1,
-	IFLA_PORT_PROFILE = 2,
-	IFLA_PORT_VSI_TYPE = 3,
-	IFLA_PORT_INSTANCE_UUID = 4,
-	IFLA_PORT_HOST_UUID = 5,
-	IFLA_PORT_REQUEST = 6,
-	IFLA_PORT_RESPONSE = 7,
-	__IFLA_PORT_MAX = 8,
-};
-
-struct if_stats_msg {
-	__u8 family;
-	__u8 pad1;
-	__u16 pad2;
-	__u32 ifindex;
-	__u32 filter_mask;
-};
-
-enum {
-	IFLA_STATS_UNSPEC = 0,
-	IFLA_STATS_LINK_64 = 1,
-	IFLA_STATS_LINK_XSTATS = 2,
-	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
-	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
-	IFLA_STATS_AF_SPEC = 5,
-	__IFLA_STATS_MAX = 6,
-};
-
-enum {
-	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
-	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
-	__IFLA_OFFLOAD_XSTATS_MAX = 2,
-};
-
-enum {
-	XDP_ATTACHED_NONE = 0,
-	XDP_ATTACHED_DRV = 1,
-	XDP_ATTACHED_SKB = 2,
-	XDP_ATTACHED_HW = 3,
-	XDP_ATTACHED_MULTI = 4,
-};
-
-enum {
-	IFLA_XDP_UNSPEC = 0,
-	IFLA_XDP_FD = 1,
-	IFLA_XDP_ATTACHED = 2,
-	IFLA_XDP_FLAGS = 3,
-	IFLA_XDP_PROG_ID = 4,
-	IFLA_XDP_DRV_PROG_ID = 5,
-	IFLA_XDP_SKB_PROG_ID = 6,
-	IFLA_XDP_HW_PROG_ID = 7,
-	IFLA_XDP_EXPECTED_FD = 8,
-	__IFLA_XDP_MAX = 9,
-};
-
-enum {
-	IFLA_EVENT_NONE = 0,
-	IFLA_EVENT_REBOOT = 1,
-	IFLA_EVENT_FEATURES = 2,
-	IFLA_EVENT_BONDING_FAILOVER = 3,
-	IFLA_EVENT_NOTIFY_PEERS = 4,
-	IFLA_EVENT_IGMP_RESEND = 5,
-	IFLA_EVENT_BONDING_OPTIONS = 6,
-};
-
-enum {
-	IFLA_BRIDGE_FLAGS = 0,
-	IFLA_BRIDGE_MODE = 1,
-	IFLA_BRIDGE_VLAN_INFO = 2,
-	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
-	IFLA_BRIDGE_MRP = 4,
-	__IFLA_BRIDGE_MAX = 5,
-};
-
-enum {
-	BR_MCAST_DIR_RX = 0,
-	BR_MCAST_DIR_TX = 1,
-	BR_MCAST_DIR_SIZE = 2,
-};
-
-enum rtattr_type_t {
-	RTA_UNSPEC = 0,
-	RTA_DST = 1,
-	RTA_SRC = 2,
-	RTA_IIF = 3,
-	RTA_OIF = 4,
-	RTA_GATEWAY = 5,
-	RTA_PRIORITY = 6,
-	RTA_PREFSRC = 7,
-	RTA_METRICS = 8,
-	RTA_MULTIPATH = 9,
-	RTA_PROTOINFO = 10,
-	RTA_FLOW = 11,
-	RTA_CACHEINFO = 12,
-	RTA_SESSION = 13,
-	RTA_MP_ALGO = 14,
-	RTA_TABLE = 15,
-	RTA_MARK = 16,
-	RTA_MFC_STATS = 17,
-	RTA_VIA = 18,
-	RTA_NEWDST = 19,
-	RTA_PREF = 20,
-	RTA_ENCAP_TYPE = 21,
-	RTA_ENCAP = 22,
-	RTA_EXPIRES = 23,
-	RTA_PAD = 24,
-	RTA_UID = 25,
-	RTA_TTL_PROPAGATE = 26,
-	RTA_IP_PROTO = 27,
-	RTA_SPORT = 28,
-	RTA_DPORT = 29,
-	RTA_NH_ID = 30,
-	__RTA_MAX = 31,
-};
-
-struct rta_cacheinfo {
-	__u32 rta_clntref;
-	__u32 rta_lastuse;
-	__s32 rta_expires;
-	__u32 rta_error;
-	__u32 rta_used;
-	__u32 rta_id;
-	__u32 rta_ts;
-	__u32 rta_tsage;
-};
-
-struct ifinfomsg {
-	unsigned char ifi_family;
-	unsigned char __ifi_pad;
-	short unsigned int ifi_type;
-	int ifi_index;
-	unsigned int ifi_flags;
-	unsigned int ifi_change;
-};
-
-typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
-
-typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
-
-struct rtnl_af_ops {
-	struct list_head list;
-	int family;
-	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
-	size_t (*get_link_af_size)(const struct net_device *, u32);
-	int (*validate_link_af)(const struct net_device *, const struct nlattr *);
-	int (*set_link_af)(struct net_device *, const struct nlattr *);
-	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
-	size_t (*get_stats_af_size)(const struct net_device *);
-};
-
-struct rtnl_link {
-	rtnl_doit_func doit;
-	rtnl_dumpit_func dumpit;
-	struct module *owner;
-	unsigned int flags;
-	struct callback_head rcu;
-};
-
 enum {
 	IF_LINK_MODE_DEFAULT = 0,
 	IF_LINK_MODE_DORMANT = 1,
@@ -98534,1014 +116375,6 @@
 	LW_URGENT = 0,
 };
 
-struct seg6_pernet_data {
-	struct mutex lock;
-	struct in6_addr *tun_src;
-};
-
-enum {
-	BPF_F_RECOMPUTE_CSUM = 1,
-	BPF_F_INVALIDATE_HASH = 2,
-};
-
-enum {
-	BPF_F_HDR_FIELD_MASK = 15,
-};
-
-enum {
-	BPF_F_PSEUDO_HDR = 16,
-	BPF_F_MARK_MANGLED_0 = 32,
-	BPF_F_MARK_ENFORCE = 64,
-};
-
-enum {
-	BPF_F_INGRESS = 1,
-};
-
-enum {
-	BPF_F_TUNINFO_IPV6 = 1,
-};
-
-enum {
-	BPF_F_ZERO_CSUM_TX = 2,
-	BPF_F_DONT_FRAGMENT = 4,
-	BPF_F_SEQ_NUMBER = 8,
-};
-
-enum {
-	BPF_CSUM_LEVEL_QUERY = 0,
-	BPF_CSUM_LEVEL_INC = 1,
-	BPF_CSUM_LEVEL_DEC = 2,
-	BPF_CSUM_LEVEL_RESET = 3,
-};
-
-enum {
-	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
-	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
-	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
-	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
-};
-
-enum {
-	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
-	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
-};
-
-enum {
-	BPF_SK_LOOKUP_F_REPLACE = 1,
-	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
-};
-
-enum bpf_adj_room_mode {
-	BPF_ADJ_ROOM_NET = 0,
-	BPF_ADJ_ROOM_MAC = 1,
-};
-
-enum bpf_hdr_start_off {
-	BPF_HDR_START_MAC = 0,
-	BPF_HDR_START_NET = 1,
-};
-
-enum bpf_lwt_encap_mode {
-	BPF_LWT_ENCAP_SEG6 = 0,
-	BPF_LWT_ENCAP_SEG6_INLINE = 1,
-	BPF_LWT_ENCAP_IP = 2,
-};
-
-struct bpf_tunnel_key {
-	__u32 tunnel_id;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-	__u8 tunnel_tos;
-	__u8 tunnel_ttl;
-	__u16 tunnel_ext;
-	__u32 tunnel_label;
-};
-
-struct bpf_xfrm_state {
-	__u32 reqid;
-	__u32 spi;
-	__u16 family;
-	__u16 ext;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-};
-
-struct bpf_tcp_sock {
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	__u32 dsack_dups;
-	__u32 delivered;
-	__u32 delivered_ce;
-	__u32 icsk_retransmits;
-};
-
-struct bpf_sock_tuple {
-	union {
-		struct {
-			__be32 saddr;
-			__be32 daddr;
-			__be16 sport;
-			__be16 dport;
-		} ipv4;
-		struct {
-			__be32 saddr[4];
-			__be32 daddr[4];
-			__be16 sport;
-			__be16 dport;
-		} ipv6;
-	};
-};
-
-struct bpf_xdp_sock {
-	__u32 queue_id;
-};
-
-enum {
-	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
-	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
-	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
-	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
-	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
-	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
-	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
-};
-
-enum {
-	BPF_SOCK_OPS_VOID = 0,
-	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
-	BPF_SOCK_OPS_RWND_INIT = 2,
-	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
-	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
-	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
-	BPF_SOCK_OPS_NEEDS_ECN = 6,
-	BPF_SOCK_OPS_BASE_RTT = 7,
-	BPF_SOCK_OPS_RTO_CB = 8,
-	BPF_SOCK_OPS_RETRANS_CB = 9,
-	BPF_SOCK_OPS_STATE_CB = 10,
-	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
-	BPF_SOCK_OPS_RTT_CB = 12,
-	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
-	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
-};
-
-enum {
-	TCP_BPF_IW = 1001,
-	TCP_BPF_SNDCWND_CLAMP = 1002,
-	TCP_BPF_DELACK_MAX = 1003,
-	TCP_BPF_RTO_MIN = 1004,
-	TCP_BPF_SYN = 1005,
-	TCP_BPF_SYN_IP = 1006,
-	TCP_BPF_SYN_MAC = 1007,
-};
-
-enum {
-	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
-};
-
-enum {
-	BPF_FIB_LOOKUP_DIRECT = 1,
-	BPF_FIB_LOOKUP_OUTPUT = 2,
-};
-
-enum {
-	BPF_FIB_LKUP_RET_SUCCESS = 0,
-	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
-	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
-	BPF_FIB_LKUP_RET_PROHIBIT = 3,
-	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
-	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
-	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
-	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
-	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
-};
-
-struct bpf_fib_lookup {
-	__u8 family;
-	__u8 l4_protocol;
-	__be16 sport;
-	__be16 dport;
-	__u16 tot_len;
-	__u32 ifindex;
-	union {
-		__u8 tos;
-		__be32 flowinfo;
-		__u32 rt_metric;
-	};
-	union {
-		__be32 ipv4_src;
-		__u32 ipv6_src[4];
-	};
-	union {
-		__be32 ipv4_dst;
-		__u32 ipv6_dst[4];
-	};
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__u8 smac[6];
-	__u8 dmac[6];
-};
-
-struct bpf_redir_neigh {
-	__u32 nh_family;
-	union {
-		__be32 ipv4_nh;
-		__u32 ipv6_nh[4];
-	};
-};
-
-enum rt_scope_t {
-	RT_SCOPE_UNIVERSE = 0,
-	RT_SCOPE_SITE = 200,
-	RT_SCOPE_LINK = 253,
-	RT_SCOPE_HOST = 254,
-	RT_SCOPE_NOWHERE = 255,
-};
-
-enum rt_class_t {
-	RT_TABLE_UNSPEC = 0,
-	RT_TABLE_COMPAT = 252,
-	RT_TABLE_DEFAULT = 253,
-	RT_TABLE_MAIN = 254,
-	RT_TABLE_LOCAL = 255,
-	RT_TABLE_MAX = 4294967295,
-};
-
-struct nl_info {
-	struct nlmsghdr *nlh;
-	struct net *nl_net;
-	u32 portid;
-	u8 skip_notify: 1;
-	u8 skip_notify_kernel: 1;
-};
-
-typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
-
-struct inet_timewait_sock {
-	struct sock_common __tw_common;
-	__u32 tw_mark;
-	volatile unsigned char tw_substate;
-	unsigned char tw_rcv_wscale;
-	__be16 tw_sport;
-	unsigned int tw_kill: 1;
-	unsigned int tw_transparent: 1;
-	unsigned int tw_flowlabel: 20;
-	unsigned int tw_pad: 2;
-	unsigned int tw_tos: 8;
-	u32 tw_txhash;
-	u32 tw_priority;
-	struct timer_list tw_timer;
-	struct inet_bind_bucket *tw_tb;
-};
-
-struct tcp_timewait_sock {
-	struct inet_timewait_sock tw_sk;
-	u32 tw_rcv_wnd;
-	u32 tw_ts_offset;
-	u32 tw_ts_recent;
-	u32 tw_last_oow_ack_time;
-	int tw_ts_recent_stamp;
-	u32 tw_tx_delay;
-	struct tcp_md5sig_key *tw_md5_key;
-};
-
-struct udp_sock {
-	struct inet_sock inet;
-	int pending;
-	unsigned int corkflag;
-	__u8 encap_type;
-	unsigned char no_check6_tx: 1;
-	unsigned char no_check6_rx: 1;
-	unsigned char encap_enabled: 1;
-	unsigned char gro_enabled: 1;
-	__u16 len;
-	__u16 gso_size;
-	__u16 pcslen;
-	__u16 pcrlen;
-	__u8 pcflag;
-	__u8 unused[3];
-	int (*encap_rcv)(struct sock *, struct sk_buff *);
-	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
-	void (*encap_destroy)(struct sock *);
-	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sock *, struct sk_buff *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head reader_queue;
-	int forward_deficit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct udp6_sock {
-	struct udp_sock udp;
-	struct ipv6_pinfo inet6;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcp6_sock {
-	struct tcp_sock tcp;
-	struct ipv6_pinfo inet6;
-};
-
-struct fib6_result;
-
-struct fib6_config;
-
-struct ipv6_stub {
-	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
-	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
-	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
-	int (*ipv6_route_input)(struct sk_buff *);
-	struct fib6_table * (*fib6_get_table)(struct net *, u32);
-	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
-	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
-	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
-	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
-	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
-	void (*fib6_nh_release)(struct fib6_nh *);
-	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
-	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
-	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
-	void (*udpv6_encap_enable)();
-	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
-	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
-	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
-	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
-	struct neigh_table *nd_tbl;
-	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-};
-
-struct fib6_result {
-	struct fib6_nh *nh;
-	struct fib6_info *f6i;
-	u32 fib6_flags;
-	u8 fib6_type;
-	struct rt6_info *rt6;
-};
-
-struct fib6_config {
-	u32 fc_table;
-	u32 fc_metric;
-	int fc_dst_len;
-	int fc_src_len;
-	int fc_ifindex;
-	u32 fc_flags;
-	u32 fc_protocol;
-	u16 fc_type;
-	u16 fc_delete_all_nh: 1;
-	u16 fc_ignore_dev_down: 1;
-	u16 __unused: 14;
-	u32 fc_nh_id;
-	struct in6_addr fc_dst;
-	struct in6_addr fc_src;
-	struct in6_addr fc_prefsrc;
-	struct in6_addr fc_gateway;
-	long unsigned int fc_expires;
-	struct nlattr *fc_mx;
-	int fc_mx_len;
-	int fc_mp_len;
-	struct nlattr *fc_mp;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-	bool fc_is_fdb;
-};
-
-struct ipv6_bpf_stub {
-	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
-	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
-};
-
-struct fib_result {
-	__be32 prefix;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	u32 tclassid;
-	struct fib_nh_common *nhc;
-	struct fib_info *fi;
-	struct fib_table *table;
-	struct hlist_head *fa_head;
-};
-
-enum {
-	INET_ECN_NOT_ECT = 0,
-	INET_ECN_ECT_1 = 1,
-	INET_ECN_ECT_0 = 2,
-	INET_ECN_CE = 3,
-	INET_ECN_MASK = 3,
-};
-
-struct tcp_skb_cb {
-	__u32 seq;
-	__u32 end_seq;
-	union {
-		__u32 tcp_tw_isn;
-		struct {
-			u16 tcp_gso_segs;
-			u16 tcp_gso_size;
-		};
-	};
-	__u8 tcp_flags;
-	__u8 sacked;
-	__u8 ip_dsfield;
-	__u8 txstamp_ack: 1;
-	__u8 eor: 1;
-	__u8 has_rxtstamp: 1;
-	__u8 unused: 5;
-	__u32 ack_seq;
-	union {
-		struct {
-			__u32 in_flight: 30;
-			__u32 is_app_limited: 1;
-			__u32 unused: 1;
-			__u32 delivered;
-			u64 first_tx_mstamp;
-			u64 delivered_mstamp;
-		} tx;
-		union {
-			struct inet_skb_parm h4;
-			struct inet6_skb_parm h6;
-		} header;
-		struct {
-			__u32 flags;
-			struct sock *sk_redir;
-			void *data_end;
-		} bpf;
-	};
-};
-
-struct strp_stats {
-	long long unsigned int msgs;
-	long long unsigned int bytes;
-	unsigned int mem_fail;
-	unsigned int need_more_hdr;
-	unsigned int msg_too_big;
-	unsigned int msg_timeouts;
-	unsigned int bad_hdr_len;
-};
-
-struct strparser;
-
-struct strp_callbacks {
-	int (*parse_msg)(struct strparser *, struct sk_buff *);
-	void (*rcv_msg)(struct strparser *, struct sk_buff *);
-	int (*read_sock_done)(struct strparser *, int);
-	void (*abort_parser)(struct strparser *, int);
-	void (*lock)(struct strparser *);
-	void (*unlock)(struct strparser *);
-};
-
-struct strparser {
-	struct sock *sk;
-	u32 stopped: 1;
-	u32 paused: 1;
-	u32 aborted: 1;
-	u32 interrupted: 1;
-	u32 unrecov_intr: 1;
-	struct sk_buff **skb_nextp;
-	struct sk_buff *skb_head;
-	unsigned int need_bytes;
-	struct delayed_work msg_timer_work;
-	struct work_struct work;
-	struct strp_stats stats;
-	struct strp_callbacks cb;
-};
-
-struct strp_msg {
-	int full_len;
-	int offset;
-};
-
-struct xdp_umem {
-	void *addrs;
-	u64 size;
-	u32 headroom;
-	u32 chunk_size;
-	u32 chunks;
-	u32 npgs;
-	struct user_struct *user;
-	refcount_t users;
-	u8 flags;
-	bool zc;
-	struct page **pgs;
-	int id;
-	struct list_head xsk_dma_list;
-	struct work_struct work;
-};
-
-struct xdp_sock;
-
-struct xsk_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct xdp_sock *xsk_map[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xsk_queue;
-
-struct xdp_sock {
-	struct sock sk;
-	long: 64;
-	struct xsk_queue *rx;
-	struct net_device *dev;
-	struct xdp_umem *umem;
-	struct list_head flush_node;
-	struct xsk_buff_pool *pool;
-	u16 queue_id;
-	bool zc;
-	enum {
-		XSK_READY = 0,
-		XSK_BOUND = 1,
-		XSK_UNBOUND = 2,
-	} state;
-	long: 64;
-	struct xsk_queue *tx;
-	struct list_head tx_list;
-	spinlock_t rx_lock;
-	u64 rx_dropped;
-	u64 rx_queue_full;
-	struct list_head map_list;
-	spinlock_t map_list_lock;
-	struct mutex mutex;
-	struct xsk_queue *fq_tmp;
-	struct xsk_queue *cq_tmp;
-	long: 64;
-};
-
-struct ipv6_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u8 first_segment;
-	__u8 flags;
-	__u16 tag;
-	struct in6_addr segments[0];
-};
-
-enum {
-	SEG6_LOCAL_ACTION_UNSPEC = 0,
-	SEG6_LOCAL_ACTION_END = 1,
-	SEG6_LOCAL_ACTION_END_X = 2,
-	SEG6_LOCAL_ACTION_END_T = 3,
-	SEG6_LOCAL_ACTION_END_DX2 = 4,
-	SEG6_LOCAL_ACTION_END_DX6 = 5,
-	SEG6_LOCAL_ACTION_END_DX4 = 6,
-	SEG6_LOCAL_ACTION_END_DT6 = 7,
-	SEG6_LOCAL_ACTION_END_DT4 = 8,
-	SEG6_LOCAL_ACTION_END_B6 = 9,
-	SEG6_LOCAL_ACTION_END_B6_ENCAP = 10,
-	SEG6_LOCAL_ACTION_END_BM = 11,
-	SEG6_LOCAL_ACTION_END_S = 12,
-	SEG6_LOCAL_ACTION_END_AS = 13,
-	SEG6_LOCAL_ACTION_END_AM = 14,
-	SEG6_LOCAL_ACTION_END_BPF = 15,
-	__SEG6_LOCAL_ACTION_MAX = 16,
-};
-
-struct seg6_bpf_srh_state {
-	struct ipv6_sr_hdr *srh;
-	u16 hdrlen;
-	bool valid;
-};
-
-struct tls_crypto_info {
-	__u16 version;
-	__u16 cipher_type;
-};
-
-struct tls12_crypto_info_aes_gcm_128 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[16];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls12_crypto_info_aes_gcm_256 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[32];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls_sw_context_rx {
-	struct crypto_aead *aead_recv;
-	struct crypto_wait async_wait;
-	struct strparser strp;
-	struct sk_buff_head rx_list;
-	void (*saved_data_ready)(struct sock *);
-	struct sk_buff *recv_pkt;
-	u8 control;
-	u8 async_capable: 1;
-	u8 decrypted: 1;
-	atomic_t decrypt_pending;
-	spinlock_t decrypt_compl_lock;
-	bool async_notify;
-};
-
-struct cipher_context {
-	char *iv;
-	char *rec_seq;
-};
-
-union tls_crypto_context {
-	struct tls_crypto_info info;
-	union {
-		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
-		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
-	};
-};
-
-struct tls_prot_info {
-	u16 version;
-	u16 cipher_type;
-	u16 prepend_size;
-	u16 tag_size;
-	u16 overhead_size;
-	u16 iv_size;
-	u16 salt_size;
-	u16 rec_seq_size;
-	u16 aad_size;
-	u16 tail_size;
-};
-
-struct tls_context {
-	struct tls_prot_info prot_info;
-	u8 tx_conf: 3;
-	u8 rx_conf: 3;
-	int (*push_pending_record)(struct sock *, int);
-	void (*sk_write_space)(struct sock *);
-	void *priv_ctx_tx;
-	void *priv_ctx_rx;
-	struct net_device *netdev;
-	struct cipher_context tx;
-	struct cipher_context rx;
-	struct scatterlist *partially_sent_record;
-	u16 partially_sent_offset;
-	bool in_tcp_sendpages;
-	bool pending_open_record_frags;
-	struct mutex tx_lock;
-	long unsigned int flags;
-	struct proto *sk_proto;
-	void (*sk_destruct)(struct sock *);
-	union tls_crypto_context crypto_send;
-	union tls_crypto_context crypto_recv;
-	struct list_head list;
-	refcount_t refcount;
-	struct callback_head rcu;
-};
-
-typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
-
-struct bpf_scratchpad {
-	union {
-		__be32 diff[128];
-		u8 buff[512];
-	};
-};
-
-typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
-
-typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
-
-typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
-
-typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
-
-enum {
-	BPF_F_NEIGH = 2,
-	BPF_F_PEER = 4,
-	BPF_F_NEXTHOP = 8,
-};
-
-typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
-
-typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
-
-typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_get_cgroup_classid_curr)();
-
-typedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
-
-typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
-
-typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
-
-typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
-
-typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
-
-typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
-
-typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
-
-typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
-
-typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
-
-typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
-
-typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
-
-typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_store_bytes)(struct sk_buff *, u32, const void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_action)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_adjust_srh)(struct sk_buff *, u32, s32);
-
-typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_release)(struct sock *);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
-
-typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
-
-typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
-
-typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
-
-typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
-
-typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
-
-struct bpf_dtab_netdev___2;
-
-enum {
-	INET_DIAG_REQ_NONE = 0,
-	INET_DIAG_REQ_BYTECODE = 1,
-	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
-	INET_DIAG_REQ_PROTOCOL = 3,
-	__INET_DIAG_REQ_MAX = 4,
-};
-
-struct sock_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-};
-
-struct sock_diag_handler {
-	__u8 family;
-	int (*dump)(struct sk_buff *, struct nlmsghdr *);
-	int (*get_info)(struct sk_buff *, struct sock *);
-	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
-};
-
-struct broadcast_sk {
-	struct sock *sk;
-	struct work_struct work;
-};
-
-typedef int gifconf_func_t(struct net_device *, char *, int, int);
-
-struct hwtstamp_config {
-	int flags;
-	int tx_type;
-	int rx_filter;
-};
-
-enum hwtstamp_tx_types {
-	HWTSTAMP_TX_OFF = 0,
-	HWTSTAMP_TX_ON = 1,
-	HWTSTAMP_TX_ONESTEP_SYNC = 2,
-	HWTSTAMP_TX_ONESTEP_P2P = 3,
-	__HWTSTAMP_TX_CNT = 4,
-};
-
-enum hwtstamp_rx_filters {
-	HWTSTAMP_FILTER_NONE = 0,
-	HWTSTAMP_FILTER_ALL = 1,
-	HWTSTAMP_FILTER_SOME = 2,
-	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
-	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
-	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
-	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
-	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
-	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
-	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
-	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
-	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
-	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
-	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
-	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
-	HWTSTAMP_FILTER_NTP_ALL = 15,
-	__HWTSTAMP_FILTER_CNT = 16,
-};
-
 struct tso_t {
 	int next_frag_idx;
 	int size;
@@ -99552,27 +116385,10 @@
 	u32 tcp_seq;
 };
 
-struct fib_notifier_info {
-	int family;
-	struct netlink_ext_ack *extack;
-};
-
-enum fib_event_type {
-	FIB_EVENT_ENTRY_REPLACE = 0,
-	FIB_EVENT_ENTRY_APPEND = 1,
-	FIB_EVENT_ENTRY_ADD = 2,
-	FIB_EVENT_ENTRY_DEL = 3,
-	FIB_EVENT_RULE_ADD = 4,
-	FIB_EVENT_RULE_DEL = 5,
-	FIB_EVENT_NH_ADD = 6,
-	FIB_EVENT_NH_DEL = 7,
-	FIB_EVENT_VIF_ADD = 8,
-	FIB_EVENT_VIF_DEL = 9,
-};
-
-struct fib_notifier_net {
-	struct list_head fib_notifier_ops;
-	struct atomic_notifier_head fib_chain;
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
 };
 
 struct xdp_attachment_info {
@@ -99580,2231 +116396,26 @@
 	u32 flags;
 };
 
-struct xdp_buff_xsk;
-
-struct xsk_buff_pool {
-	struct device *dev;
-	struct net_device *netdev;
-	struct list_head xsk_tx_list;
-	spinlock_t xsk_tx_list_lock;
-	refcount_t users;
-	struct xdp_umem *umem;
-	struct work_struct work;
-	struct list_head free_list;
-	u32 heads_cnt;
-	u16 queue_id;
-	long: 16;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xsk_queue *fq;
-	struct xsk_queue *cq;
-	dma_addr_t *dma_pages;
-	struct xdp_buff_xsk *heads;
-	u64 chunk_mask;
-	u64 addrs_cnt;
-	u32 free_list_cnt;
-	u32 dma_pages_cnt;
-	u32 free_heads_cnt;
-	u32 headroom;
-	u32 chunk_size;
-	u32 frame_len;
-	u8 cached_need_wakeup;
-	bool uses_need_wakeup;
-	bool dma_need_sync;
-	bool unaligned;
-	void *addrs;
-	spinlock_t cq_lock;
-	struct xdp_buff_xsk *free_heads[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_buff_xsk {
-	struct xdp_buff xdp;
-	dma_addr_t dma;
-	dma_addr_t frame_dma;
-	struct xsk_buff_pool *pool;
-	bool unaligned;
-	u64 orig_addr;
-	struct list_head free_list_node;
-};
-
-struct flow_match_meta {
-	struct flow_dissector_key_meta *key;
-	struct flow_dissector_key_meta *mask;
-};
-
-struct flow_match_basic {
-	struct flow_dissector_key_basic *key;
-	struct flow_dissector_key_basic *mask;
-};
-
-struct flow_match_control {
-	struct flow_dissector_key_control *key;
-	struct flow_dissector_key_control *mask;
-};
-
-struct flow_match_eth_addrs {
-	struct flow_dissector_key_eth_addrs *key;
-	struct flow_dissector_key_eth_addrs *mask;
-};
-
-struct flow_match_vlan {
-	struct flow_dissector_key_vlan *key;
-	struct flow_dissector_key_vlan *mask;
-};
-
-struct flow_match_ipv4_addrs {
-	struct flow_dissector_key_ipv4_addrs *key;
-	struct flow_dissector_key_ipv4_addrs *mask;
-};
-
-struct flow_match_ipv6_addrs {
-	struct flow_dissector_key_ipv6_addrs *key;
-	struct flow_dissector_key_ipv6_addrs *mask;
-};
-
-struct flow_match_ip {
-	struct flow_dissector_key_ip *key;
-	struct flow_dissector_key_ip *mask;
-};
-
-struct flow_match_ports {
-	struct flow_dissector_key_ports *key;
-	struct flow_dissector_key_ports *mask;
-};
-
-struct flow_match_icmp {
-	struct flow_dissector_key_icmp *key;
-	struct flow_dissector_key_icmp *mask;
-};
-
-struct flow_match_tcp {
-	struct flow_dissector_key_tcp *key;
-	struct flow_dissector_key_tcp *mask;
-};
-
-struct flow_match_mpls {
-	struct flow_dissector_key_mpls *key;
-	struct flow_dissector_key_mpls *mask;
-};
-
-struct flow_match_enc_keyid {
-	struct flow_dissector_key_keyid *key;
-	struct flow_dissector_key_keyid *mask;
-};
-
-struct flow_match_enc_opts {
-	struct flow_dissector_key_enc_opts *key;
-	struct flow_dissector_key_enc_opts *mask;
-};
-
-struct flow_match_ct {
-	struct flow_dissector_key_ct *key;
-	struct flow_dissector_key_ct *mask;
-};
-
-enum flow_block_command {
-	FLOW_BLOCK_BIND = 0,
-	FLOW_BLOCK_UNBIND = 1,
-};
-
-enum flow_block_binder_type {
-	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
-	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
-	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
-};
-
-struct flow_block_offload {
-	enum flow_block_command command;
-	enum flow_block_binder_type binder_type;
-	bool block_shared;
-	bool unlocked_driver_cb;
-	struct net *net;
-	struct flow_block *block;
-	struct list_head cb_list;
-	struct list_head *driver_block_list;
-	struct netlink_ext_ack *extack;
-	struct Qdisc *sch;
-};
-
-struct flow_block_cb;
-
-struct flow_block_indr {
-	struct list_head list;
-	struct net_device *dev;
-	struct Qdisc *sch;
-	enum flow_block_binder_type binder_type;
-	void *data;
-	void *cb_priv;
-	void (*cleanup)(struct flow_block_cb *);
-};
-
-struct flow_block_cb {
-	struct list_head driver_list;
-	struct list_head list;
-	flow_setup_cb_t *cb;
-	void *cb_ident;
-	void *cb_priv;
-	void (*release)(void *);
-	struct flow_block_indr indr;
-	unsigned int refcnt;
-};
-
-typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
-
-struct flow_indr_dev {
-	struct list_head list;
-	flow_indr_block_bind_cb_t *cb;
-	void *cb_priv;
-	refcount_t refcnt;
-	struct callback_head rcu;
-};
-
-struct rx_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_rx_queue *, char *);
-	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
-};
-
-struct netdev_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_queue *, char *);
-	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
-};
-
-enum __sk_action {
-	__SK_DROP = 0,
-	__SK_PASS = 1,
-	__SK_REDIRECT = 2,
-	__SK_NONE = 3,
-};
-
-struct sk_psock_progs {
-	struct bpf_prog *msg_parser;
-	struct bpf_prog *skb_parser;
-	struct bpf_prog *skb_verdict;
-};
-
-enum sk_psock_state_bits {
-	SK_PSOCK_TX_ENABLED = 0,
-};
-
-struct sk_psock_link {
-	struct list_head list;
-	struct bpf_map *map;
-	void *link_raw;
-};
-
-struct sk_psock_parser {
-	struct strparser strp;
-	bool enabled;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct sk_psock_work_state {
-	struct sk_buff *skb;
-	u32 len;
-	u32 off;
-};
-
-struct sk_psock {
-	struct sock *sk;
-	struct sock *sk_redir;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 eval;
-	struct sk_msg *cork;
-	struct sk_psock_progs progs;
-	struct sk_psock_parser parser;
-	struct sk_buff_head ingress_skb;
-	struct list_head ingress_msg;
-	long unsigned int state;
-	struct list_head link;
-	spinlock_t link_lock;
-	refcount_t refcnt;
-	void (*saved_unhash)(struct sock *);
-	void (*saved_close)(struct sock *, long int);
-	void (*saved_write_space)(struct sock *);
-	struct proto *sk_proto;
-	struct sk_psock_work_state work_state;
-	struct work_struct work;
-	union {
-		struct callback_head rcu;
-		struct work_struct gc;
-	};
-};
-
-struct inet6_ifaddr {
-	struct in6_addr addr;
-	__u32 prefix_len;
-	__u32 rt_priority;
-	__u32 valid_lft;
-	__u32 prefered_lft;
-	refcount_t refcnt;
-	spinlock_t lock;
-	int state;
-	__u32 flags;
-	__u8 dad_probes;
-	__u8 stable_privacy_retry;
-	__u16 scope;
-	__u64 dad_nonce;
-	long unsigned int cstamp;
-	long unsigned int tstamp;
-	struct delayed_work dad_work;
-	struct inet6_dev *idev;
-	struct fib6_info *rt;
-	struct hlist_node addr_lst;
-	struct list_head if_list;
-	struct list_head tmp_list;
-	struct inet6_ifaddr *ifpub;
-	int regen_count;
-	bool tokenized;
-	struct callback_head rcu;
-	struct in6_addr peer_addr;
-};
-
 struct fib_rule_uid_range {
 	__u32 start;
 	__u32 end;
 };
 
-enum {
-	FRA_UNSPEC = 0,
-	FRA_DST = 1,
-	FRA_SRC = 2,
-	FRA_IIFNAME = 3,
-	FRA_GOTO = 4,
-	FRA_UNUSED2 = 5,
-	FRA_PRIORITY = 6,
-	FRA_UNUSED3 = 7,
-	FRA_UNUSED4 = 8,
-	FRA_UNUSED5 = 9,
-	FRA_FWMARK = 10,
-	FRA_FLOW = 11,
-	FRA_TUN_ID = 12,
-	FRA_SUPPRESS_IFGROUP = 13,
-	FRA_SUPPRESS_PREFIXLEN = 14,
-	FRA_TABLE = 15,
-	FRA_FWMASK = 16,
-	FRA_OIFNAME = 17,
-	FRA_PAD = 18,
-	FRA_L3MDEV = 19,
-	FRA_UID_RANGE = 20,
-	FRA_PROTOCOL = 21,
-	FRA_IP_PROTO = 22,
-	FRA_SPORT_RANGE = 23,
-	FRA_DPORT_RANGE = 24,
-	__FRA_MAX = 25,
-};
-
-enum {
-	FR_ACT_UNSPEC = 0,
-	FR_ACT_TO_TBL = 1,
-	FR_ACT_GOTO = 2,
-	FR_ACT_NOP = 3,
-	FR_ACT_RES3 = 4,
-	FR_ACT_RES4 = 5,
-	FR_ACT_BLACKHOLE = 6,
-	FR_ACT_UNREACHABLE = 7,
-	FR_ACT_PROHIBIT = 8,
-	__FR_ACT_MAX = 9,
-};
-
 struct fib_rule_notifier_info {
 	struct fib_notifier_info info;
 	struct fib_rule *rule;
 };
 
-struct trace_event_raw_kfree_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	void *location;
-	short unsigned int protocol;
-	char __data[0];
-};
-
-struct trace_event_raw_consume_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	char __data[0];
-};
-
-struct trace_event_raw_skb_copy_datagram_iovec {
-	struct trace_entry ent;
-	const void *skbaddr;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kfree_skb {};
-
-struct trace_event_data_offsets_consume_skb {};
-
-struct trace_event_data_offsets_skb_copy_datagram_iovec {};
-
-typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);
-
-typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
-
-struct trace_event_raw_net_dev_start_xmit {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	unsigned int len;
-	unsigned int data_len;
-	int network_offset;
-	bool transport_offset_valid;
-	int transport_offset;
-	u8 tx_flags;
-	u16 gso_size;
-	u16 gso_segs;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	int rc;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit_timeout {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_driver;
-	int queue_index;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_template {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_verbose_template {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int napi_id;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	u32 hash;
-	bool l4_hash;
-	unsigned int len;
-	unsigned int data_len;
-	unsigned int truesize;
-	bool mac_header_valid;
-	int mac_header;
-	unsigned char nr_frags;
-	u16 gso_size;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_exit_template {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_net_dev_start_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit_timeout {
-	u32 name;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_net_dev_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_verbose_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_exit_template {};
-
-typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
-
-typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
-
-typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
-
-typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
-
-typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_ni_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
-
-struct trace_event_raw_napi_poll {
-	struct trace_entry ent;
-	struct napi_struct *napi;
-	u32 __data_loc_dev_name;
-	int work;
-	int budget;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_napi_poll {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
-
-enum tcp_ca_state {
-	TCP_CA_Open = 0,
-	TCP_CA_Disorder = 1,
-	TCP_CA_CWR = 2,
-	TCP_CA_Recovery = 3,
-	TCP_CA_Loss = 4,
-};
-
-struct trace_event_raw_sock_rcvqueue_full {
-	struct trace_entry ent;
-	int rmem_alloc;
-	unsigned int truesize;
-	int sk_rcvbuf;
-	char __data[0];
-};
-
-struct trace_event_raw_sock_exceed_buf_limit {
-	struct trace_entry ent;
-	char name[32];
-	long int *sysctl_mem;
-	long int allocated;
-	int sysctl_rmem;
-	int rmem_alloc;
-	int sysctl_wmem;
-	int wmem_alloc;
-	int wmem_queued;
-	int kind;
-	char __data[0];
-};
-
-struct trace_event_raw_inet_sock_set_state {
-	struct trace_entry ent;
-	const void *skaddr;
-	int oldstate;
-	int newstate;
-	__u16 sport;
-	__u16 dport;
-	__u16 family;
-	__u16 protocol;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sock_rcvqueue_full {};
-
-struct trace_event_data_offsets_sock_exceed_buf_limit {};
-
-struct trace_event_data_offsets_inet_sock_set_state {};
-
-typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
-
-typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
-
-typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
-
-struct trace_event_raw_udp_fail_queue_rcv_skb {
-	struct trace_entry ent;
-	int rc;
-	__u16 lport;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
-
-typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
-
-struct trace_event_raw_tcp_event_sk_skb {
-	struct trace_entry ent;
-	const void *skbaddr;
-	const void *skaddr;
-	int state;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_event_sk {
-	struct trace_entry ent;
-	const void *skaddr;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_retransmit_synack {
-	struct trace_entry ent;
-	const void *skaddr;
-	const void *req;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_probe {
-	struct trace_entry ent;
-	__u8 saddr[28];
-	__u8 daddr[28];
-	__u16 sport;
-	__u16 dport;
-	__u32 mark;
-	__u16 data_len;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 snd_cwnd;
-	__u32 ssthresh;
-	__u32 snd_wnd;
-	__u32 srtt;
-	__u32 rcv_wnd;
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_tcp_event_sk_skb {};
-
-struct trace_event_data_offsets_tcp_event_sk {};
-
-struct trace_event_data_offsets_tcp_retransmit_synack {};
-
-struct trace_event_data_offsets_tcp_probe {};
-
-typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
-
-typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
-
-struct trace_event_raw_fib_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	u8 proto;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[4];
-	__u8 dst[4];
-	__u8 gw4[4];
-	__u8 gw6[16];
-	u16 sport;
-	u16 dport;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
-
-struct trace_event_raw_qdisc_dequeue {
-	struct trace_entry ent;
-	struct Qdisc *qdisc;
-	const struct netdev_queue *txq;
-	int packets;
-	void *skbaddr;
-	int ifindex;
-	u32 handle;
-	u32 parent;
-	long unsigned int txq_state;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_reset {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_destroy {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_create {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_qdisc_dequeue {};
-
-struct trace_event_data_offsets_qdisc_reset {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_destroy {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_create {
-	u32 dev;
-	u32 kind;
-};
-
-typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
-
-typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
-
-struct bridge_stp_xstats {
-	__u64 transition_blk;
-	__u64 transition_fwd;
-	__u64 rx_bpdu;
-	__u64 tx_bpdu;
-	__u64 rx_tcn;
-	__u64 tx_tcn;
-};
-
-struct br_mcast_stats {
-	__u64 igmp_v1queries[2];
-	__u64 igmp_v2queries[2];
-	__u64 igmp_v3queries[2];
-	__u64 igmp_leaves[2];
-	__u64 igmp_v1reports[2];
-	__u64 igmp_v2reports[2];
-	__u64 igmp_v3reports[2];
-	__u64 igmp_parse_errors;
-	__u64 mld_v1queries[2];
-	__u64 mld_v2queries[2];
-	__u64 mld_leaves[2];
-	__u64 mld_v1reports[2];
-	__u64 mld_v2reports[2];
-	__u64 mld_parse_errors;
-	__u64 mcast_bytes[2];
-	__u64 mcast_packets[2];
-};
-
-struct br_ip {
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} src;
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} dst;
-	__be16 proto;
-	__u16 vid;
-};
-
-struct bridge_id {
-	unsigned char prio[2];
-	unsigned char addr[6];
-};
-
-typedef struct bridge_id bridge_id;
-
-struct mac_addr {
-	unsigned char addr[6];
-};
-
-typedef struct mac_addr mac_addr;
-
-typedef __u16 port_id;
-
-struct bridge_mcast_own_query {
-	struct timer_list timer;
-	u32 startup_sent;
-};
-
-struct bridge_mcast_other_query {
-	struct timer_list timer;
-	long unsigned int delay_time;
-};
-
-struct net_bridge_port;
-
-struct bridge_mcast_querier {
-	struct br_ip addr;
-	struct net_bridge_port *port;
-};
-
-struct net_bridge;
-
-struct net_bridge_vlan_group;
-
-struct bridge_mcast_stats;
-
-struct net_bridge_port {
-	struct net_bridge *br;
-	struct net_device *dev;
-	struct list_head list;
-	long unsigned int flags;
-	struct net_bridge_vlan_group *vlgrp;
-	struct net_bridge_port *backup_port;
-	u8 priority;
-	u8 state;
-	u16 port_no;
-	unsigned char topology_change_ack;
-	unsigned char config_pending;
-	port_id port_id;
-	port_id designated_port;
-	bridge_id designated_root;
-	bridge_id designated_bridge;
-	u32 path_cost;
-	u32 designated_cost;
-	long unsigned int designated_age;
-	struct timer_list forward_delay_timer;
-	struct timer_list hold_timer;
-	struct timer_list message_age_timer;
-	struct kobject kobj;
-	struct callback_head rcu;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	unsigned char multicast_router;
-	struct bridge_mcast_stats *mcast_stats;
-	struct timer_list multicast_router_timer;
-	struct hlist_head mglist;
-	struct hlist_node rlist;
-	char sysfs_name[16];
-	struct netpoll *np;
-	int offload_fwd_mark;
-	u16 group_fwd_mask;
-	u16 backup_redirected_cnt;
-	struct bridge_stp_xstats stp_xstats;
-};
-
-struct bridge_mcast_stats {
-	struct br_mcast_stats mstats;
-	struct u64_stats_sync syncp;
-};
-
-struct net_bridge {
-	spinlock_t lock;
-	spinlock_t hash_lock;
-	struct list_head port_list;
-	struct net_device *dev;
-	struct pcpu_sw_netstats *stats;
-	long unsigned int options;
-	__be16 vlan_proto;
-	u16 default_pvid;
-	struct net_bridge_vlan_group *vlgrp;
-	struct rhashtable fdb_hash_tbl;
-	union {
-		struct rtable fake_rtable;
-		struct rt6_info fake_rt6_info;
-	};
-	u16 group_fwd_mask;
-	u16 group_fwd_mask_required;
-	bridge_id designated_root;
-	bridge_id bridge_id;
-	unsigned char topology_change;
-	unsigned char topology_change_detected;
-	u16 root_port;
-	long unsigned int max_age;
-	long unsigned int hello_time;
-	long unsigned int forward_delay;
-	long unsigned int ageing_time;
-	long unsigned int bridge_max_age;
-	long unsigned int bridge_hello_time;
-	long unsigned int bridge_forward_delay;
-	long unsigned int bridge_ageing_time;
-	u32 root_path_cost;
-	u8 group_addr[6];
-	enum {
-		BR_NO_STP = 0,
-		BR_KERNEL_STP = 1,
-		BR_USER_STP = 2,
-	} stp_enabled;
-	u32 hash_max;
-	u32 multicast_last_member_count;
-	u32 multicast_startup_query_count;
-	u8 multicast_igmp_version;
-	u8 multicast_router;
-	u8 multicast_mld_version;
-	spinlock_t multicast_lock;
-	long unsigned int multicast_last_member_interval;
-	long unsigned int multicast_membership_interval;
-	long unsigned int multicast_querier_interval;
-	long unsigned int multicast_query_interval;
-	long unsigned int multicast_query_response_interval;
-	long unsigned int multicast_startup_query_interval;
-	struct rhashtable mdb_hash_tbl;
-	struct rhashtable sg_port_tbl;
-	struct hlist_head mcast_gc_list;
-	struct hlist_head mdb_list;
-	struct hlist_head router_list;
-	struct timer_list multicast_router_timer;
-	struct bridge_mcast_other_query ip4_other_query;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_querier ip4_querier;
-	struct bridge_mcast_stats *mcast_stats;
-	struct bridge_mcast_other_query ip6_other_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	struct bridge_mcast_querier ip6_querier;
-	struct work_struct mcast_gc_work;
-	struct timer_list hello_timer;
-	struct timer_list tcn_timer;
-	struct timer_list topology_change_timer;
-	struct delayed_work gc_work;
-	struct kobject *ifobj;
-	u32 auto_cnt;
-	int offload_fwd_mark;
-	struct hlist_head fdb_list;
-	struct list_head mrp_list;
-};
-
-struct net_bridge_vlan_group {
-	struct rhashtable vlan_hash;
-	struct rhashtable tunnel_hash;
-	struct list_head vlan_list;
-	u16 num_vlans;
-	u16 pvid;
-	u8 pvid_state;
-};
-
-struct net_bridge_fdb_key {
-	mac_addr addr;
-	u16 vlan_id;
-};
-
-struct net_bridge_fdb_entry {
-	struct rhash_head rhnode;
-	struct net_bridge_port *dst;
-	struct net_bridge_fdb_key key;
-	struct hlist_node fdb_node;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long unsigned int updated;
-	long unsigned int used;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct trace_event_raw_br_fdb_add {
-	struct trace_entry ent;
-	u8 ndm_flags;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	u16 nlh_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_external_learn_add {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_fdb_delete {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_update {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_br_fdb_add {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_external_learn_add {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_fdb_delete {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_update {
-	u32 br_dev;
-	u32 dev;
-};
-
-typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
-
-typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
-
-typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
-
-typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
-
-struct trace_event_raw_page_pool_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	s32 inflight;
-	u32 hold;
-	u32 release;
-	u64 cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 release;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_hold {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 hold;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_update_nid {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	int pool_nid;
-	int new_nid;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_page_pool_release {};
-
-struct trace_event_data_offsets_page_pool_state_release {};
-
-struct trace_event_data_offsets_page_pool_state_hold {};
-
-struct trace_event_data_offsets_page_pool_update_nid {};
-
-typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
-
-typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
-
-struct trace_event_raw_neigh_create {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	int entries;
-	u8 created;
-	u8 gc_exempt;
-	u8 primary_key4[4];
-	u8 primary_key6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_neigh_update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u8 new_lladdr[32];
-	u8 new_state;
-	u32 update_flags;
-	u32 pid;
-	char __data[0];
-};
-
-struct trace_event_raw_neigh__update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u32 err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_neigh_create {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh_update {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh__update {
-	u32 dev;
-};
-
-typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
-
-typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
-
-typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
-
-struct clock_identity {
-	u8 id[8];
-};
-
-struct port_identity {
-	struct clock_identity clock_identity;
-	__be16 port_number;
-};
-
-struct ptp_header {
-	u8 tsmt;
-	u8 ver;
-	__be16 message_length;
-	u8 domain_number;
-	u8 reserved1;
-	u8 flag_field[2];
-	__be64 correction;
-	__be32 reserved2;
-	struct port_identity source_port_identity;
-	__be16 sequence_id;
-	u8 control;
-	u8 log_message_interval;
-} __attribute__((packed));
-
-struct update_classid_context {
-	u32 classid;
-	unsigned int batch;
-};
-
-enum lwtunnel_encap_types {
-	LWTUNNEL_ENCAP_NONE = 0,
-	LWTUNNEL_ENCAP_MPLS = 1,
-	LWTUNNEL_ENCAP_IP = 2,
-	LWTUNNEL_ENCAP_ILA = 3,
-	LWTUNNEL_ENCAP_IP6 = 4,
-	LWTUNNEL_ENCAP_SEG6 = 5,
-	LWTUNNEL_ENCAP_BPF = 6,
-	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
-	LWTUNNEL_ENCAP_RPL = 8,
-	__LWTUNNEL_ENCAP_MAX = 9,
-};
-
-struct rtnexthop {
-	short unsigned int rtnh_len;
-	unsigned char rtnh_flags;
-	unsigned char rtnh_hops;
-	int rtnh_ifindex;
-};
-
-struct lwtunnel_encap_ops {
-	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
-	void (*destroy_state)(struct lwtunnel_state *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*input)(struct sk_buff *);
-	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
-	int (*get_encap_size)(struct lwtunnel_state *);
-	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
-	int (*xmit)(struct sk_buff *);
-	struct module *owner;
-};
-
-enum {
-	LWT_BPF_PROG_UNSPEC = 0,
-	LWT_BPF_PROG_FD = 1,
-	LWT_BPF_PROG_NAME = 2,
-	__LWT_BPF_PROG_MAX = 3,
-};
-
-enum {
-	LWT_BPF_UNSPEC = 0,
-	LWT_BPF_IN = 1,
-	LWT_BPF_OUT = 2,
-	LWT_BPF_XMIT = 3,
-	LWT_BPF_XMIT_HEADROOM = 4,
-	__LWT_BPF_MAX = 5,
-};
-
-enum {
-	LWTUNNEL_XMIT_DONE = 0,
-	LWTUNNEL_XMIT_CONTINUE = 1,
-};
-
-struct bpf_lwt_prog {
-	struct bpf_prog *prog;
-	char *name;
-};
-
-struct bpf_lwt {
-	struct bpf_lwt_prog in;
-	struct bpf_lwt_prog out;
-	struct bpf_lwt_prog xmit;
-	int family;
-};
-
-struct bpf_stab {
-	struct bpf_map map;
-	struct sock **sks;
-	struct sk_psock_progs progs;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
-
-struct sock_map_seq_info {
-	struct bpf_map *map;
-	struct sock *sk;
-	u32 index;
-};
-
-struct bpf_iter__sockmap {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		struct sock *sk;
-	};
-};
-
-struct bpf_shtab_elem {
-	struct callback_head rcu;
-	u32 hash;
-	struct sock *sk;
-	struct hlist_node node;
-	u8 key[0];
-};
-
-struct bpf_shtab_bucket {
-	struct hlist_head head;
-	raw_spinlock_t lock;
-};
-
-struct bpf_shtab {
-	struct bpf_map map;
-	struct bpf_shtab_bucket *buckets;
-	u32 buckets_num;
-	u32 elem_size;
-	struct sk_psock_progs progs;
-	atomic_t count;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
-
-struct sock_hash_seq_info {
-	struct bpf_map *map;
-	struct bpf_shtab *htab;
-	u32 bucket_id;
-};
-
-struct dst_cache_pcpu {
-	long unsigned int refresh_ts;
-	struct dst_entry *dst;
-	u32 cookie;
-	union {
-		struct in_addr in_saddr;
-		struct in6_addr in6_saddr;
-	};
-};
-
-enum devlink_command {
-	DEVLINK_CMD_UNSPEC = 0,
-	DEVLINK_CMD_GET = 1,
-	DEVLINK_CMD_SET = 2,
-	DEVLINK_CMD_NEW = 3,
-	DEVLINK_CMD_DEL = 4,
-	DEVLINK_CMD_PORT_GET = 5,
-	DEVLINK_CMD_PORT_SET = 6,
-	DEVLINK_CMD_PORT_NEW = 7,
-	DEVLINK_CMD_PORT_DEL = 8,
-	DEVLINK_CMD_PORT_SPLIT = 9,
-	DEVLINK_CMD_PORT_UNSPLIT = 10,
-	DEVLINK_CMD_SB_GET = 11,
-	DEVLINK_CMD_SB_SET = 12,
-	DEVLINK_CMD_SB_NEW = 13,
-	DEVLINK_CMD_SB_DEL = 14,
-	DEVLINK_CMD_SB_POOL_GET = 15,
-	DEVLINK_CMD_SB_POOL_SET = 16,
-	DEVLINK_CMD_SB_POOL_NEW = 17,
-	DEVLINK_CMD_SB_POOL_DEL = 18,
-	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
-	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
-	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
-	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
-	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
-	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
-	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
-	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
-	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
-	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
-	DEVLINK_CMD_ESWITCH_GET = 29,
-	DEVLINK_CMD_ESWITCH_SET = 30,
-	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
-	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
-	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
-	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
-	DEVLINK_CMD_RESOURCE_SET = 35,
-	DEVLINK_CMD_RESOURCE_DUMP = 36,
-	DEVLINK_CMD_RELOAD = 37,
-	DEVLINK_CMD_PARAM_GET = 38,
-	DEVLINK_CMD_PARAM_SET = 39,
-	DEVLINK_CMD_PARAM_NEW = 40,
-	DEVLINK_CMD_PARAM_DEL = 41,
-	DEVLINK_CMD_REGION_GET = 42,
-	DEVLINK_CMD_REGION_SET = 43,
-	DEVLINK_CMD_REGION_NEW = 44,
-	DEVLINK_CMD_REGION_DEL = 45,
-	DEVLINK_CMD_REGION_READ = 46,
-	DEVLINK_CMD_PORT_PARAM_GET = 47,
-	DEVLINK_CMD_PORT_PARAM_SET = 48,
-	DEVLINK_CMD_PORT_PARAM_NEW = 49,
-	DEVLINK_CMD_PORT_PARAM_DEL = 50,
-	DEVLINK_CMD_INFO_GET = 51,
-	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
-	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
-	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
-	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
-	DEVLINK_CMD_FLASH_UPDATE = 58,
-	DEVLINK_CMD_FLASH_UPDATE_END = 59,
-	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
-	DEVLINK_CMD_TRAP_GET = 61,
-	DEVLINK_CMD_TRAP_SET = 62,
-	DEVLINK_CMD_TRAP_NEW = 63,
-	DEVLINK_CMD_TRAP_DEL = 64,
-	DEVLINK_CMD_TRAP_GROUP_GET = 65,
-	DEVLINK_CMD_TRAP_GROUP_SET = 66,
-	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
-	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
-	DEVLINK_CMD_TRAP_POLICER_GET = 69,
-	DEVLINK_CMD_TRAP_POLICER_SET = 70,
-	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
-	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
-	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
-	__DEVLINK_CMD_MAX = 74,
-	DEVLINK_CMD_MAX = 73,
-};
-
-enum devlink_eswitch_mode {
-	DEVLINK_ESWITCH_MODE_LEGACY = 0,
-	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
-};
-
-enum {
-	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
-	DEVLINK_ATTR_STATS_RX_BYTES = 1,
-	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
-	__DEVLINK_ATTR_STATS_MAX = 3,
-	DEVLINK_ATTR_STATS_MAX = 2,
-};
-
-enum {
-	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
-	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
-	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
-	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
-};
-
-enum {
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
-};
-
-enum devlink_attr {
-	DEVLINK_ATTR_UNSPEC = 0,
-	DEVLINK_ATTR_BUS_NAME = 1,
-	DEVLINK_ATTR_DEV_NAME = 2,
-	DEVLINK_ATTR_PORT_INDEX = 3,
-	DEVLINK_ATTR_PORT_TYPE = 4,
-	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
-	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
-	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
-	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
-	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
-	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
-	DEVLINK_ATTR_SB_INDEX = 11,
-	DEVLINK_ATTR_SB_SIZE = 12,
-	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
-	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
-	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
-	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
-	DEVLINK_ATTR_SB_POOL_INDEX = 17,
-	DEVLINK_ATTR_SB_POOL_TYPE = 18,
-	DEVLINK_ATTR_SB_POOL_SIZE = 19,
-	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
-	DEVLINK_ATTR_SB_THRESHOLD = 21,
-	DEVLINK_ATTR_SB_TC_INDEX = 22,
-	DEVLINK_ATTR_SB_OCC_CUR = 23,
-	DEVLINK_ATTR_SB_OCC_MAX = 24,
-	DEVLINK_ATTR_ESWITCH_MODE = 25,
-	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
-	DEVLINK_ATTR_DPIPE_TABLES = 27,
-	DEVLINK_ATTR_DPIPE_TABLE = 28,
-	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
-	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
-	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
-	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
-	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
-	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
-	DEVLINK_ATTR_DPIPE_ENTRY = 35,
-	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
-	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
-	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
-	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
-	DEVLINK_ATTR_DPIPE_MATCH = 40,
-	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
-	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
-	DEVLINK_ATTR_DPIPE_ACTION = 43,
-	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
-	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
-	DEVLINK_ATTR_DPIPE_VALUE = 46,
-	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
-	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
-	DEVLINK_ATTR_DPIPE_HEADERS = 49,
-	DEVLINK_ATTR_DPIPE_HEADER = 50,
-	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
-	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
-	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
-	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
-	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
-	DEVLINK_ATTR_DPIPE_FIELD = 56,
-	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
-	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
-	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
-	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
-	DEVLINK_ATTR_PAD = 61,
-	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
-	DEVLINK_ATTR_RESOURCE_LIST = 63,
-	DEVLINK_ATTR_RESOURCE = 64,
-	DEVLINK_ATTR_RESOURCE_NAME = 65,
-	DEVLINK_ATTR_RESOURCE_ID = 66,
-	DEVLINK_ATTR_RESOURCE_SIZE = 67,
-	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
-	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
-	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
-	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
-	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
-	DEVLINK_ATTR_RESOURCE_UNIT = 73,
-	DEVLINK_ATTR_RESOURCE_OCC = 74,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
-	DEVLINK_ATTR_PORT_FLAVOUR = 77,
-	DEVLINK_ATTR_PORT_NUMBER = 78,
-	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
-	DEVLINK_ATTR_PARAM = 80,
-	DEVLINK_ATTR_PARAM_NAME = 81,
-	DEVLINK_ATTR_PARAM_GENERIC = 82,
-	DEVLINK_ATTR_PARAM_TYPE = 83,
-	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
-	DEVLINK_ATTR_PARAM_VALUE = 85,
-	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
-	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
-	DEVLINK_ATTR_REGION_NAME = 88,
-	DEVLINK_ATTR_REGION_SIZE = 89,
-	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
-	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
-	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
-	DEVLINK_ATTR_REGION_CHUNKS = 93,
-	DEVLINK_ATTR_REGION_CHUNK = 94,
-	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
-	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
-	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
-	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
-	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
-	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
-	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
-	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
-	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
-	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
-	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
-	DEVLINK_ATTR_FMSG = 106,
-	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
-	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
-	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
-	DEVLINK_ATTR_FMSG_NEST_END = 110,
-	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
-	DEVLINK_ATTR_HEALTH_REPORTER = 114,
-	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
-	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
-	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
-	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
-	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
-	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
-	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
-	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
-	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
-	DEVLINK_ATTR_STATS = 129,
-	DEVLINK_ATTR_TRAP_NAME = 130,
-	DEVLINK_ATTR_TRAP_ACTION = 131,
-	DEVLINK_ATTR_TRAP_TYPE = 132,
-	DEVLINK_ATTR_TRAP_GENERIC = 133,
-	DEVLINK_ATTR_TRAP_METADATA = 134,
-	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
-	DEVLINK_ATTR_RELOAD_FAILED = 136,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
-	DEVLINK_ATTR_NETNS_FD = 138,
-	DEVLINK_ATTR_NETNS_PID = 139,
-	DEVLINK_ATTR_NETNS_ID = 140,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
-	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
-	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
-	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
-	DEVLINK_ATTR_PORT_FUNCTION = 145,
-	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
-	DEVLINK_ATTR_PORT_LANES = 147,
-	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
-	DEVLINK_ATTR_PORT_EXTERNAL = 149,
-	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
-	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
-	DEVLINK_ATTR_RELOAD_ACTION = 153,
-	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
-	DEVLINK_ATTR_RELOAD_LIMITS = 155,
-	DEVLINK_ATTR_DEV_STATS = 156,
-	DEVLINK_ATTR_RELOAD_STATS = 157,
-	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
-	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
-	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
-	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
-	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
-	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
-	__DEVLINK_ATTR_MAX = 164,
-	DEVLINK_ATTR_MAX = 163,
-};
-
-enum devlink_dpipe_match_type {
-	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
-};
-
-enum devlink_dpipe_action_type {
-	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
-};
-
-enum devlink_dpipe_field_ethernet_id {
-	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
-};
-
-enum devlink_dpipe_field_ipv4_id {
-	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
-};
-
-enum devlink_dpipe_field_ipv6_id {
-	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
-};
-
-enum devlink_dpipe_header_id {
-	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
-	DEVLINK_DPIPE_HEADER_IPV4 = 1,
-	DEVLINK_DPIPE_HEADER_IPV6 = 2,
-};
-
-enum devlink_resource_unit {
-	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
-};
-
-enum devlink_port_function_attr {
-	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
-	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
-	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 2,
-	DEVLINK_PORT_FUNCTION_ATTR_MAX = 1,
-};
-
-struct devlink_dpipe_match {
-	enum devlink_dpipe_match_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_action {
-	enum devlink_dpipe_action_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_value {
-	union {
-		struct devlink_dpipe_action *action;
-		struct devlink_dpipe_match *match;
-	};
-	unsigned int mapping_value;
-	bool mapping_valid;
-	unsigned int value_size;
-	void *value;
-	void *mask;
-};
-
-struct devlink_dpipe_entry {
-	u64 index;
-	struct devlink_dpipe_value *match_values;
-	unsigned int match_values_count;
-	struct devlink_dpipe_value *action_values;
-	unsigned int action_values_count;
-	u64 counter;
-	bool counter_valid;
-};
-
-struct devlink_dpipe_dump_ctx {
-	struct genl_info *info;
-	enum devlink_command cmd;
-	struct sk_buff *skb;
-	struct nlattr *nest;
-	void *hdr;
-};
-
-struct devlink_dpipe_table_ops;
-
-struct devlink_dpipe_table {
-	void *priv;
-	struct list_head list;
-	const char *name;
-	bool counters_enabled;
-	bool counter_control_extern;
-	bool resource_valid;
-	u64 resource_id;
-	u64 resource_units;
-	struct devlink_dpipe_table_ops *table_ops;
-	struct callback_head rcu;
-};
-
-struct devlink_dpipe_table_ops {
-	int (*actions_dump)(void *, struct sk_buff *);
-	int (*matches_dump)(void *, struct sk_buff *);
-	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
-	int (*counters_set_update)(void *, bool);
-	u64 (*size_get)(void *);
-};
-
-struct devlink_resource_size_params {
-	u64 size_min;
-	u64 size_max;
-	u64 size_granularity;
-	enum devlink_resource_unit unit;
-};
-
-typedef u64 devlink_resource_occ_get_t(void *);
-
-struct devlink_resource {
-	const char *name;
-	u64 id;
-	u64 size;
-	u64 size_new;
-	bool size_valid;
-	struct devlink_resource *parent;
-	struct devlink_resource_size_params size_params;
-	struct list_head list;
-	struct list_head resource_list;
-	devlink_resource_occ_get_t *occ_get;
-	void *occ_get_priv;
-};
-
-enum devlink_param_type {
-	DEVLINK_PARAM_TYPE_U8 = 0,
-	DEVLINK_PARAM_TYPE_U16 = 1,
-	DEVLINK_PARAM_TYPE_U32 = 2,
-	DEVLINK_PARAM_TYPE_STRING = 3,
-	DEVLINK_PARAM_TYPE_BOOL = 4,
-};
-
-struct devlink_flash_notify {
-	const char *status_msg;
-	const char *component;
-	long unsigned int done;
-	long unsigned int total;
-	long unsigned int timeout;
-};
-
-struct devlink_param {
-	u32 id;
-	const char *name;
-	bool generic;
-	enum devlink_param_type type;
-	long unsigned int supported_cmodes;
-	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
-};
-
-struct devlink_param_item {
-	struct list_head list;
-	const struct devlink_param *param;
-	union devlink_param_value driverinit_value;
-	bool driverinit_value_valid;
-	bool published;
-};
-
-enum devlink_param_generic_id {
-	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
-	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
-	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
-	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
-	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
-	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
-	__DEVLINK_PARAM_GENERIC_ID_MAX = 11,
-	DEVLINK_PARAM_GENERIC_ID_MAX = 10,
-};
-
-struct devlink_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-struct devlink_port_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-enum devlink_health_reporter_state {
-	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
-	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
-};
-
-struct devlink_health_reporter;
-
-struct devlink_fmsg;
-
-struct devlink_health_reporter_ops {
-	char *name;
-	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
-	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
-	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
-	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
-};
-
-struct devlink_health_reporter {
-	struct list_head list;
-	void *priv;
-	const struct devlink_health_reporter_ops *ops;
-	struct devlink *devlink;
-	struct devlink_port *devlink_port;
-	struct devlink_fmsg *dump_fmsg;
-	struct mutex dump_lock;
-	u64 graceful_period;
-	bool auto_recover;
-	bool auto_dump;
-	u8 health_state;
-	u64 dump_ts;
-	u64 dump_real_ts;
-	u64 error_count;
-	u64 recovery_count;
-	u64 last_recovery_ts;
-	refcount_t refcount;
-};
-
-struct devlink_fmsg {
-	struct list_head item_list;
-	bool putting_binary;
-};
-
-struct devlink_trap_metadata {
-	const char *trap_name;
-	const char *trap_group_name;
-	struct net_device *input_dev;
-	const struct flow_action_cookie *fa_cookie;
-	enum devlink_trap_type trap_type;
-};
-
-enum devlink_trap_generic_id {
-	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
-	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
-	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
-	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
-	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
-	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
-	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
-	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
-	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
-	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
-	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
-	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
-	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
-	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
-	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
-	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
-	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
-	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
-	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
-	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
-	DEVLINK_TRAP_GENERIC_ID_STP = 29,
-	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
-	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
-	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
-	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
-	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
-	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
-	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
-	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
-	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
-	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
-	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
-	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
-	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
-	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
-	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
-	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
-	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
-	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
-	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
-	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
-	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
-	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
-	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
-	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
-	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
-	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
-	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
-	__DEVLINK_TRAP_GENERIC_ID_MAX = 90,
-	DEVLINK_TRAP_GENERIC_ID_MAX = 89,
-};
-
-enum devlink_trap_group_generic_id {
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
-	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
-};
-
-struct devlink_info_req {
-	struct sk_buff *msg;
-};
-
-struct trace_event_raw_devlink_hwmsg {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	bool incoming;
-	long unsigned int type;
-	u32 __data_loc_buf;
-	size_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_hwerr {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	int err;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_recover_aborted {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	bool health_state;
-	u64 time_since_last_recover;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_reporter_state_update {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u8 new_state;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_trap_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_trap_name;
-	u32 __data_loc_trap_group_name;
-	u32 __data_loc_input_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devlink_hwmsg {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_devlink_hwerr {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_recover_aborted {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_health_reporter_state_update {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_trap_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 trap_name;
-	u32 trap_group_name;
-	u32 input_dev_name;
-};
-
-typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
-
-typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
-
-typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
-
-typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
-
-typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
-
-typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
-
-struct devlink_sb {
-	struct list_head list;
-	unsigned int index;
-	u32 size;
-	u16 ingress_pools_count;
-	u16 egress_pools_count;
-	u16 ingress_tc_count;
-	u16 egress_tc_count;
-};
-
-struct devlink_region {
-	struct devlink *devlink;
-	struct devlink_port *port;
-	struct list_head list;
-	union {
-		const struct devlink_region_ops *ops;
-		const struct devlink_port_region_ops *port_ops;
-	};
-	struct list_head snapshot_list;
-	u32 max_snapshots;
-	u32 cur_snapshots;
-	u64 size;
-};
-
-struct devlink_snapshot {
-	struct list_head list;
-	struct devlink_region *region;
-	u8 *data;
-	u32 id;
-};
-
-enum devlink_multicast_groups {
-	DEVLINK_MCGRP_CONFIG = 0,
-};
-
-struct devlink_reload_combination {
-	enum devlink_reload_action action;
-	enum devlink_reload_limit limit;
-};
-
-struct devlink_fmsg_item {
-	struct list_head list;
-	int attrtype;
-	u8 nla_type;
-	u16 len;
-	int value[0];
-};
-
-struct devlink_stats {
-	u64 rx_bytes;
-	u64 rx_packets;
-	struct u64_stats_sync syncp;
-};
-
-struct devlink_trap_policer_item {
-	const struct devlink_trap_policer *policer;
-	u64 rate;
-	u64 burst;
-	struct list_head list;
-};
-
-struct devlink_trap_group_item {
-	const struct devlink_trap_group *group;
-	struct devlink_trap_policer_item *policer_item;
-	struct list_head list;
-	struct devlink_stats *stats;
-};
-
-struct devlink_trap_item {
-	const struct devlink_trap *trap;
-	struct devlink_trap_group_item *group_item;
-	struct list_head list;
-	enum devlink_trap_action action;
-	struct devlink_stats *stats;
-	void *priv;
-};
-
-struct gro_cell;
-
-struct gro_cells {
-	struct gro_cell *cells;
-};
-
 struct gro_cell {
 	struct sk_buff_head napi_skbs;
 	struct napi_struct napi;
 };
 
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void *ptr;
+};
+
 enum {
 	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
 	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
@@ -101825,10 +116436,14 @@
 	__SK_DIAG_BPF_STORAGE_MAX = 4,
 };
 
-typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
 
 typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
 
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
 struct bpf_sk_storage_diag {
 	u32 nr_maps;
 	struct bpf_map *maps[0];
@@ -101855,16 +116470,6 @@
 	};
 };
 
-struct compat_cmsghdr {
-	compat_size_t cmsg_len;
-	compat_int_t cmsg_level;
-	compat_int_t cmsg_type;
-};
-
-typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
-
-struct nvmem_cell___2;
-
 struct fch_hdr {
 	__u8 daddr[6];
 	__u8 saddr[6];
@@ -101878,329 +116483,15 @@
 	__be16 ethertype;
 };
 
-struct fddi_8022_1_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-};
-
-struct fddi_8022_2_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl_1;
-	__u8 ctrl_2;
-};
-
-struct fddi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct fddihdr {
-	__u8 fc;
-	__u8 daddr[6];
-	__u8 saddr[6];
-	union {
-		struct fddi_8022_1_hdr llc_8022_1;
-		struct fddi_8022_2_hdr llc_8022_2;
-		struct fddi_snap_hdr llc_snap;
-	} hdr;
-} __attribute__((packed));
-
-struct hippi_fp_hdr {
-	__be32 fixed;
-	__be32 d2_size;
-};
-
-struct hippi_le_hdr {
-	__u8 message_type: 4;
-	__u8 double_wide: 1;
-	__u8 fc: 3;
-	__u8 dest_switch_addr[3];
-	__u8 src_addr_type: 4;
-	__u8 dest_addr_type: 4;
-	__u8 src_switch_addr[3];
-	__u16 reserved;
-	__u8 daddr[6];
-	__u16 locally_administered;
-	__u8 saddr[6];
-};
-
-struct hippi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct hippi_hdr {
-	struct hippi_fp_hdr fp;
-	struct hippi_le_hdr le;
-	struct hippi_snap_hdr snap;
-};
-
-struct hippi_cb {
-	__u32 ifield;
-};
-
-enum macvlan_mode {
-	MACVLAN_MODE_PRIVATE = 1,
-	MACVLAN_MODE_VEPA = 2,
-	MACVLAN_MODE_BRIDGE = 4,
-	MACVLAN_MODE_PASSTHRU = 8,
-	MACVLAN_MODE_SOURCE = 16,
-};
-
-struct tc_ratespec {
-	unsigned char cell_log;
-	__u8 linklayer;
-	short unsigned int overhead;
-	short int cell_align;
-	short unsigned int mpu;
-	__u32 rate;
-};
-
-struct tc_prio_qopt {
-	int bands;
-	__u8 priomap[16];
-};
-
-enum {
-	TCA_UNSPEC = 0,
-	TCA_KIND = 1,
-	TCA_OPTIONS = 2,
-	TCA_STATS = 3,
-	TCA_XSTATS = 4,
-	TCA_RATE = 5,
-	TCA_FCNT = 6,
-	TCA_STATS2 = 7,
-	TCA_STAB = 8,
-	TCA_PAD = 9,
-	TCA_DUMP_INVISIBLE = 10,
-	TCA_CHAIN = 11,
-	TCA_HW_OFFLOAD = 12,
-	TCA_INGRESS_BLOCK = 13,
-	TCA_EGRESS_BLOCK = 14,
-	TCA_DUMP_FLAGS = 15,
-	__TCA_MAX = 16,
-};
-
-struct vlan_pcpu_stats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 rx_multicast;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-	u32 rx_errors;
-	u32 tx_dropped;
-};
-
-struct netpoll___2;
-
-struct skb_array {
-	struct ptr_ring ring;
-};
-
-struct macvlan_port;
-
-struct macvlan_dev {
-	struct net_device *dev;
-	struct list_head list;
-	struct hlist_node hlist;
-	struct macvlan_port *port;
-	struct net_device *lowerdev;
-	void *accel_priv;
-	struct vlan_pcpu_stats *pcpu_stats;
-	long unsigned int mc_filter[4];
-	netdev_features_t set_features;
-	enum macvlan_mode mode;
-	u16 flags;
-	unsigned int macaddr_count;
-	struct netpoll___2 *netpoll;
-};
-
-struct psched_ratecfg {
-	u64 rate_bytes_ps;
-	u32 mult;
-	u16 overhead;
-	u8 linklayer;
-	u8 shift;
-};
-
-struct mini_Qdisc_pair {
-	struct mini_Qdisc miniq1;
-	struct mini_Qdisc miniq2;
-	struct mini_Qdisc **p_miniq;
-};
-
-struct pfifo_fast_priv {
-	struct skb_array q[3];
-};
-
-struct tc_qopt_offload_stats {
-	struct gnet_stats_basic_packed *bstats;
-	struct gnet_stats_queue *qstats;
-};
-
-enum tc_mq_command {
-	TC_MQ_CREATE = 0,
-	TC_MQ_DESTROY = 1,
-	TC_MQ_STATS = 2,
-	TC_MQ_GRAFT = 3,
-};
-
-struct tc_mq_opt_offload_graft_params {
-	long unsigned int queue;
-	u32 child_handle;
-};
-
-struct tc_mq_qopt_offload {
-	enum tc_mq_command command;
-	u32 handle;
-	union {
-		struct tc_qopt_offload_stats stats;
-		struct tc_mq_opt_offload_graft_params graft_params;
-	};
-};
-
-struct mq_sched {
-	struct Qdisc **qdiscs;
-};
-
-enum tc_link_layer {
-	TC_LINKLAYER_UNAWARE = 0,
-	TC_LINKLAYER_ETHERNET = 1,
-	TC_LINKLAYER_ATM = 2,
-};
-
-enum {
-	TCA_STAB_UNSPEC = 0,
-	TCA_STAB_BASE = 1,
-	TCA_STAB_DATA = 2,
-	__TCA_STAB_MAX = 3,
-};
-
-struct qdisc_rate_table {
-	struct tc_ratespec rate;
-	u32 data[256];
-	struct qdisc_rate_table *next;
-	int refcnt;
-};
-
-struct Qdisc_class_common {
-	u32 classid;
-	struct hlist_node hnode;
-};
-
-struct Qdisc_class_hash {
-	struct hlist_head *hash;
-	unsigned int hashsize;
-	unsigned int hashmask;
-	unsigned int hashelems;
-};
-
-struct qdisc_watchdog {
-	u64 last_expires;
-	struct hrtimer timer;
-	struct Qdisc *qdisc;
-};
-
-enum tc_root_command {
-	TC_ROOT_GRAFT = 0,
-};
-
-struct tc_root_qopt_offload {
-	enum tc_root_command command;
-	u32 handle;
-	bool ingress;
-};
-
-struct check_loop_arg {
-	struct qdisc_walker w;
-	struct Qdisc *p;
-	int depth;
-};
-
-struct tcf_bind_args {
-	struct tcf_walker w;
-	long unsigned int base;
-	long unsigned int cl;
-	u32 classid;
-};
-
-struct tc_bind_class_args {
-	struct qdisc_walker w;
-	long unsigned int new_cl;
-	u32 portid;
-	u32 clid;
-};
-
-struct qdisc_dump_args {
-	struct qdisc_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-};
-
-enum net_xmit_qdisc_t {
-	__NET_XMIT_STOLEN = 65536,
-	__NET_XMIT_BYPASS = 131072,
-};
-
-struct tc_skb_ext {
-	__u32 chain;
-	__u16 mru;
-};
-
-enum {
-	TCA_ACT_UNSPEC = 0,
-	TCA_ACT_KIND = 1,
-	TCA_ACT_OPTIONS = 2,
-	TCA_ACT_INDEX = 3,
-	TCA_ACT_STATS = 4,
-	TCA_ACT_PAD = 5,
-	TCA_ACT_COOKIE = 6,
-	TCA_ACT_FLAGS = 7,
-	TCA_ACT_HW_STATS = 8,
-	TCA_ACT_USED_HW_STATS = 9,
-	__TCA_ACT_MAX = 10,
-};
-
-enum tca_id {
-	TCA_ID_UNSPEC = 0,
-	TCA_ID_POLICE = 1,
-	TCA_ID_GACT = 5,
-	TCA_ID_IPT = 6,
-	TCA_ID_PEDIT = 7,
-	TCA_ID_MIRRED = 8,
-	TCA_ID_NAT = 9,
-	TCA_ID_XT = 10,
-	TCA_ID_SKBEDIT = 11,
-	TCA_ID_VLAN = 12,
-	TCA_ID_BPF = 13,
-	TCA_ID_CONNMARK = 14,
-	TCA_ID_SKBMOD = 15,
-	TCA_ID_CSUM = 16,
-	TCA_ID_TUNNEL_KEY = 17,
-	TCA_ID_SIMP = 22,
-	TCA_ID_IFE = 25,
-	TCA_ID_SAMPLE = 26,
-	TCA_ID_CTINFO = 27,
-	TCA_ID_MPLS = 28,
-	TCA_ID_CT = 29,
-	TCA_ID_GATE = 30,
-	__TCA_ID_MAX = 255,
-};
-
-struct tcf_t {
-	__u64 install;
-	__u64 lastuse;
-	__u64 expires;
-	__u64 firstuse;
+struct sch_frag_data {
+	long unsigned int dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
 };
 
 struct psample_group {
@@ -102229,67 +116520,6 @@
 
 typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
 
-struct tcf_idrinfo {
-	struct mutex lock;
-	struct idr action_idr;
-	struct net *net;
-};
-
-struct tc_action_ops;
-
-struct tc_cookie;
-
-struct tc_action {
-	const struct tc_action_ops *ops;
-	__u32 type;
-	struct tcf_idrinfo *idrinfo;
-	u32 tcfa_index;
-	refcount_t tcfa_refcnt;
-	atomic_t tcfa_bindcnt;
-	int tcfa_action;
-	struct tcf_t tcfa_tm;
-	struct gnet_stats_basic_packed tcfa_bstats;
-	struct gnet_stats_basic_packed tcfa_bstats_hw;
-	struct gnet_stats_queue tcfa_qstats;
-	struct net_rate_estimator *tcfa_rate_est;
-	spinlock_t tcfa_lock;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_basic_cpu *cpu_bstats_hw;
-	struct gnet_stats_queue *cpu_qstats;
-	struct tc_cookie *act_cookie;
-	struct tcf_chain *goto_chain;
-	u32 tcfa_flags;
-	u8 hw_stats;
-	u8 used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-typedef void (*tc_action_priv_destructor)(void *);
-
-struct tc_action_ops {
-	struct list_head head;
-	char kind[16];
-	enum tca_id id;
-	size_t size;
-	struct module *owner;
-	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
-	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
-	void (*cleanup)(struct tc_action *);
-	int (*lookup)(struct net *, struct tc_action **, u32);
-	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);
-	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
-	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
-	size_t (*get_fill_size)(const struct tc_action *);
-	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
-	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
-};
-
-struct tc_cookie {
-	u8 *data;
-	u32 len;
-	struct callback_head rcu;
-};
-
 struct tcf_block_ext_info {
 	enum flow_block_binder_type binder_type;
 	tcf_chain_head_change_t *chain_head_change;
@@ -102303,241 +116533,6 @@
 	struct tcf_proto *filter_chain;
 };
 
-struct tcf_exts {
-	__u32 type;
-	int nr_actions;
-	struct tc_action **actions;
-	struct net *net;
-	int action;
-	int police;
-};
-
-enum pedit_header_type {
-	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
-	__PEDIT_HDR_TYPE_MAX = 6,
-};
-
-enum pedit_cmd {
-	TCA_PEDIT_KEY_EX_CMD_SET = 0,
-	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
-	__PEDIT_CMD_MAX = 2,
-};
-
-struct tc_pedit_key {
-	__u32 mask;
-	__u32 val;
-	__u32 off;
-	__u32 at;
-	__u32 offmask;
-	__u32 shift;
-};
-
-struct tcf_pedit_key_ex {
-	enum pedit_header_type htype;
-	enum pedit_cmd cmd;
-};
-
-struct tcf_pedit {
-	struct tc_action common;
-	unsigned char tcfp_nkeys;
-	unsigned char tcfp_flags;
-	struct tc_pedit_key *tcfp_keys;
-	struct tcf_pedit_key_ex *tcfp_keys_ex;
-};
-
-struct tcf_mirred {
-	struct tc_action common;
-	int tcfm_eaction;
-	bool tcfm_mac_header_xmit;
-	struct net_device *tcfm_dev;
-	struct list_head tcfm_list;
-};
-
-struct tcf_vlan_params {
-	int tcfv_action;
-	unsigned char tcfv_push_dst[6];
-	unsigned char tcfv_push_src[6];
-	u16 tcfv_push_vid;
-	__be16 tcfv_push_proto;
-	u8 tcfv_push_prio;
-	struct callback_head rcu;
-};
-
-struct tcf_vlan {
-	struct tc_action common;
-	struct tcf_vlan_params *vlan_p;
-};
-
-struct tcf_tunnel_key_params {
-	struct callback_head rcu;
-	int tcft_action;
-	struct metadata_dst *tcft_enc_metadata;
-};
-
-struct tcf_tunnel_key {
-	struct tc_action common;
-	struct tcf_tunnel_key_params *params;
-};
-
-struct tcf_csum_params {
-	u32 update_flags;
-	struct callback_head rcu;
-};
-
-struct tcf_csum {
-	struct tc_action common;
-	struct tcf_csum_params *params;
-};
-
-struct tcf_gact {
-	struct tc_action common;
-	u16 tcfg_ptype;
-	u16 tcfg_pval;
-	int tcfg_paction;
-	atomic_t packets;
-};
-
-struct tcf_police_params {
-	int tcfp_result;
-	u32 tcfp_ewma_rate;
-	s64 tcfp_burst;
-	u32 tcfp_mtu;
-	s64 tcfp_mtu_ptoks;
-	struct psched_ratecfg rate;
-	bool rate_present;
-	struct psched_ratecfg peak;
-	bool peak_present;
-	struct callback_head rcu;
-};
-
-struct tcf_police {
-	struct tc_action common;
-	struct tcf_police_params *params;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t tcfp_lock;
-	s64 tcfp_toks;
-	s64 tcfp_ptoks;
-	s64 tcfp_t_c;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcf_sample {
-	struct tc_action common;
-	u32 rate;
-	bool truncate;
-	u32 trunc_size;
-	struct psample_group *psample_group;
-	u32 psample_group_num;
-	struct list_head tcfm_list;
-};
-
-struct tcf_skbedit_params {
-	u32 flags;
-	u32 priority;
-	u32 mark;
-	u32 mask;
-	u16 queue_mapping;
-	u16 ptype;
-	struct callback_head rcu;
-};
-
-struct tcf_skbedit {
-	struct tc_action common;
-	struct tcf_skbedit_params *params;
-};
-
-struct nf_nat_range2 {
-	unsigned int flags;
-	union nf_inet_addr min_addr;
-	union nf_inet_addr max_addr;
-	union nf_conntrack_man_proto min_proto;
-	union nf_conntrack_man_proto max_proto;
-	union nf_conntrack_man_proto base_proto;
-};
-
-struct tcf_ct_flow_table;
-
-struct tcf_ct_params {
-	struct nf_conn *tmpl;
-	u16 zone;
-	u32 mark;
-	u32 mark_mask;
-	u32 labels[4];
-	u32 labels_mask[4];
-	struct nf_nat_range2 range;
-	bool ipv4_range;
-	u16 ct_action;
-	struct callback_head rcu;
-	struct tcf_ct_flow_table *ct_ft;
-	struct nf_flowtable *nf_ft;
-};
-
-struct tcf_ct {
-	struct tc_action common;
-	struct tcf_ct_params *params;
-};
-
-struct tcf_mpls_params {
-	int tcfm_action;
-	u32 tcfm_label;
-	u8 tcfm_tc;
-	u8 tcfm_ttl;
-	u8 tcfm_bos;
-	__be16 tcfm_proto;
-	struct callback_head rcu;
-};
-
-struct tcf_mpls {
-	struct tc_action common;
-	struct tcf_mpls_params *mpls_p;
-};
-
-struct tcfg_gate_entry {
-	int index;
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-	struct list_head list;
-};
-
-struct tcf_gate_params {
-	s32 tcfg_priority;
-	u64 tcfg_basetime;
-	u64 tcfg_cycletime;
-	u64 tcfg_cycletime_ext;
-	u32 tcfg_flags;
-	s32 tcfg_clockid;
-	size_t num_entries;
-	struct list_head entries;
-};
-
-struct tcf_gate {
-	struct tc_action common;
-	struct tcf_gate_params param;
-	u8 current_gate_status;
-	ktime_t current_close_time;
-	u32 current_entry_octets;
-	s32 current_max_octets;
-	struct tcfg_gate_entry *next_entry;
-	struct hrtimer hitimer;
-	enum tk_offsets tk_offset;
-};
-
 struct tcf_filter_chain_list_item {
 	struct list_head list;
 	tcf_chain_head_change_t *chain_head_change;
@@ -102570,506 +116565,34 @@
 	bool terse_dump;
 };
 
-struct tcamsg {
-	unsigned char tca_family;
-	unsigned char tca__pad1;
-	short unsigned int tca__pad2;
-};
-
-enum {
-	TCA_ROOT_UNSPEC = 0,
-	TCA_ROOT_TAB = 1,
-	TCA_ROOT_FLAGS = 2,
-	TCA_ROOT_COUNT = 3,
-	TCA_ROOT_TIME_DELTA = 4,
-	__TCA_ROOT_MAX = 5,
-};
-
-struct tc_action_net {
-	struct tcf_idrinfo *idrinfo;
-	const struct tc_action_ops *ops;
-};
-
-struct tc_act_bpf {
-	__u32 index;
-	__u32 capab;
-	int action;
-	int refcnt;
-	int bindcnt;
-};
-
-enum {
-	TCA_ACT_BPF_UNSPEC = 0,
-	TCA_ACT_BPF_TM = 1,
-	TCA_ACT_BPF_PARMS = 2,
-	TCA_ACT_BPF_OPS_LEN = 3,
-	TCA_ACT_BPF_OPS = 4,
-	TCA_ACT_BPF_FD = 5,
-	TCA_ACT_BPF_NAME = 6,
-	TCA_ACT_BPF_PAD = 7,
-	TCA_ACT_BPF_TAG = 8,
-	TCA_ACT_BPF_ID = 9,
-	__TCA_ACT_BPF_MAX = 10,
-};
-
-struct tcf_bpf {
-	struct tc_action common;
-	struct bpf_prog *filter;
-	union {
-		u32 bpf_fd;
-		u16 bpf_num_ops;
-	};
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-};
-
-struct tcf_bpf_cfg {
-	struct bpf_prog *filter;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	u16 bpf_num_ops;
-	bool is_ebpf;
-};
-
-struct tc_fifo_qopt {
-	__u32 limit;
-};
-
-enum tc_fifo_command {
-	TC_FIFO_REPLACE = 0,
-	TC_FIFO_DESTROY = 1,
-	TC_FIFO_STATS = 2,
-};
-
-struct tc_fifo_qopt_offload {
-	enum tc_fifo_command command;
-	u32 handle;
-	u32 parent;
-	union {
-		struct tc_qopt_offload_stats stats;
-	};
-};
-
-enum {
-	TCA_CGROUP_UNSPEC = 0,
-	TCA_CGROUP_ACT = 1,
-	TCA_CGROUP_POLICE = 2,
-	TCA_CGROUP_EMATCHES = 3,
-	__TCA_CGROUP_MAX = 4,
-};
-
-struct tcf_ematch_tree_hdr {
-	__u16 nmatches;
-	__u16 progid;
-};
-
-struct tcf_pkt_info {
-	unsigned char *ptr;
-	int nexthdr;
-};
-
-struct tcf_ematch_ops;
-
-struct tcf_ematch {
-	struct tcf_ematch_ops *ops;
-	long unsigned int data;
-	unsigned int datalen;
-	u16 matchid;
-	u16 flags;
-	struct net *net;
-};
-
-struct tcf_ematch_ops {
-	int kind;
-	int datalen;
-	int (*change)(struct net *, void *, int, struct tcf_ematch *);
-	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
-	void (*destroy)(struct tcf_ematch *);
-	int (*dump)(struct sk_buff *, struct tcf_ematch *);
-	struct module *owner;
-	struct list_head link;
-};
-
-struct tcf_ematch_tree {
-	struct tcf_ematch_tree_hdr hdr;
-	struct tcf_ematch *matches;
-};
-
-struct cls_cgroup_head {
-	u32 handle;
-	struct tcf_exts exts;
-	struct tcf_ematch_tree ematches;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_BPF_UNSPEC = 0,
-	TCA_BPF_ACT = 1,
-	TCA_BPF_POLICE = 2,
-	TCA_BPF_CLASSID = 3,
-	TCA_BPF_OPS_LEN = 4,
-	TCA_BPF_OPS = 5,
-	TCA_BPF_FD = 6,
-	TCA_BPF_NAME = 7,
-	TCA_BPF_FLAGS = 8,
-	TCA_BPF_FLAGS_GEN = 9,
-	TCA_BPF_TAG = 10,
-	TCA_BPF_ID = 11,
-	__TCA_BPF_MAX = 12,
-};
-
-enum tc_clsbpf_command {
-	TC_CLSBPF_OFFLOAD = 0,
-	TC_CLSBPF_STATS = 1,
-};
-
-struct tc_cls_bpf_offload {
-	struct flow_cls_common_offload common;
-	enum tc_clsbpf_command command;
-	struct tcf_exts *exts;
-	struct bpf_prog *prog;
-	struct bpf_prog *oldprog;
-	const char *name;
-	bool exts_integrated;
-};
-
-struct cls_bpf_head {
-	struct list_head plist;
-	struct idr handle_idr;
-	struct callback_head rcu;
-};
-
-struct cls_bpf_prog {
-	struct bpf_prog *filter;
-	struct list_head link;
-	struct tcf_result res;
-	bool exts_integrated;
-	u32 gen_flags;
-	unsigned int in_hw_count;
-	struct tcf_exts exts;
-	u32 handle;
-	u16 bpf_num_ops;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_EMATCH_TREE_UNSPEC = 0,
-	TCA_EMATCH_TREE_HDR = 1,
-	TCA_EMATCH_TREE_LIST = 2,
-	__TCA_EMATCH_TREE_MAX = 3,
-};
-
-struct tcf_ematch_hdr {
-	__u16 matchid;
-	__u16 kind;
-	__u16 flags;
+struct netlink_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
 	__u16 pad;
+	__u32 ndiag_ino;
+	__u32 ndiag_show;
+	__u32 ndiag_cookie[2];
 };
 
-struct sockaddr_nl {
-	__kernel_sa_family_t nl_family;
-	short unsigned int nl_pad;
-	__u32 nl_pid;
-	__u32 nl_groups;
-};
-
-struct nlmsgerr {
-	int error;
-	struct nlmsghdr msg;
-};
-
-enum nlmsgerr_attrs {
-	NLMSGERR_ATTR_UNUSED = 0,
-	NLMSGERR_ATTR_MSG = 1,
-	NLMSGERR_ATTR_OFFS = 2,
-	NLMSGERR_ATTR_COOKIE = 3,
-	NLMSGERR_ATTR_POLICY = 4,
-	__NLMSGERR_ATTR_MAX = 5,
-	NLMSGERR_ATTR_MAX = 4,
-};
-
-struct nl_pktinfo {
-	__u32 group;
+struct netlink_diag_msg {
+	__u8 ndiag_family;
+	__u8 ndiag_type;
+	__u8 ndiag_protocol;
+	__u8 ndiag_state;
+	__u32 ndiag_portid;
+	__u32 ndiag_dst_portid;
+	__u32 ndiag_dst_group;
+	__u32 ndiag_ino;
+	__u32 ndiag_cookie[2];
 };
 
 enum {
-	NETLINK_UNCONNECTED = 0,
-	NETLINK_CONNECTED = 1,
-};
-
-enum netlink_skb_flags {
-	NETLINK_SKB_DST = 8,
-};
-
-struct netlink_notify {
-	struct net *net;
-	u32 portid;
-	int protocol;
-};
-
-struct netlink_tap {
-	struct net_device *dev;
-	struct module *module;
-	struct list_head list;
-};
-
-struct netlink_sock {
-	struct sock sk;
-	u32 portid;
-	u32 dst_portid;
-	u32 dst_group;
-	u32 flags;
-	u32 subscriptions;
-	u32 ngroups;
-	long unsigned int *groups;
-	long unsigned int state;
-	size_t max_recvmsg_len;
-	wait_queue_head_t wait;
-	bool bound;
-	bool cb_running;
-	int dump_done_errno;
-	struct netlink_callback cb;
-	struct mutex *cb_mutex;
-	struct mutex cb_def_mutex;
-	void (*netlink_rcv)(struct sk_buff *);
-	int (*netlink_bind)(struct net *, int);
-	void (*netlink_unbind)(struct net *, int);
-	struct module *module;
-	struct rhash_head node;
-	struct callback_head rcu;
-	struct work_struct work;
-};
-
-struct listeners;
-
-struct netlink_table {
-	struct rhashtable hash;
-	struct hlist_head mc_list;
-	struct listeners *listeners;
-	unsigned int flags;
-	unsigned int groups;
-	struct mutex *cb_mutex;
-	struct module *module;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-	int registered;
-};
-
-struct listeners {
-	struct callback_head rcu;
-	long unsigned int masks[0];
-};
-
-struct netlink_tap_net {
-	struct list_head netlink_tap_all;
-	struct mutex netlink_tap_lock;
-};
-
-struct netlink_compare_arg {
-	possible_net_t pnet;
-	u32 portid;
-};
-
-struct netlink_broadcast_data {
-	struct sock *exclude_sk;
-	struct net *net;
-	u32 portid;
-	u32 group;
-	int failure;
-	int delivery_failure;
-	int congested;
-	int delivered;
-	gfp_t allocation;
-	struct sk_buff *skb;
-	struct sk_buff *skb2;
-	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
-	void *tx_data;
-};
-
-struct netlink_set_err_data {
-	struct sock *exclude_sk;
-	u32 portid;
-	u32 group;
-	int code;
-};
-
-struct nl_seq_iter {
-	struct seq_net_private p;
-	struct rhashtable_iter hti;
-	int link;
-};
-
-struct bpf_iter__netlink {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct netlink_sock *sk;
-	};
-};
-
-enum {
-	CTRL_CMD_UNSPEC = 0,
-	CTRL_CMD_NEWFAMILY = 1,
-	CTRL_CMD_DELFAMILY = 2,
-	CTRL_CMD_GETFAMILY = 3,
-	CTRL_CMD_NEWOPS = 4,
-	CTRL_CMD_DELOPS = 5,
-	CTRL_CMD_GETOPS = 6,
-	CTRL_CMD_NEWMCAST_GRP = 7,
-	CTRL_CMD_DELMCAST_GRP = 8,
-	CTRL_CMD_GETMCAST_GRP = 9,
-	CTRL_CMD_GETPOLICY = 10,
-	__CTRL_CMD_MAX = 11,
-};
-
-enum {
-	CTRL_ATTR_UNSPEC = 0,
-	CTRL_ATTR_FAMILY_ID = 1,
-	CTRL_ATTR_FAMILY_NAME = 2,
-	CTRL_ATTR_VERSION = 3,
-	CTRL_ATTR_HDRSIZE = 4,
-	CTRL_ATTR_MAXATTR = 5,
-	CTRL_ATTR_OPS = 6,
-	CTRL_ATTR_MCAST_GROUPS = 7,
-	CTRL_ATTR_POLICY = 8,
-	CTRL_ATTR_OP_POLICY = 9,
-	CTRL_ATTR_OP = 10,
-	__CTRL_ATTR_MAX = 11,
-};
-
-enum {
-	CTRL_ATTR_OP_UNSPEC = 0,
-	CTRL_ATTR_OP_ID = 1,
-	CTRL_ATTR_OP_FLAGS = 2,
-	__CTRL_ATTR_OP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
-	CTRL_ATTR_MCAST_GRP_NAME = 1,
-	CTRL_ATTR_MCAST_GRP_ID = 2,
-	__CTRL_ATTR_MCAST_GRP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_POLICY_UNSPEC = 0,
-	CTRL_ATTR_POLICY_DO = 1,
-	CTRL_ATTR_POLICY_DUMP = 2,
-	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
-	CTRL_ATTR_POLICY_DUMP_MAX = 2,
-};
-
-struct genl_start_context {
-	const struct genl_family *family;
-	struct nlmsghdr *nlh;
-	struct netlink_ext_ack *extack;
-	const struct genl_ops *ops;
-	int hdrlen;
-};
-
-struct netlink_policy_dump_state;
-
-struct ctrl_dump_policy_ctx {
-	struct netlink_policy_dump_state *state;
-	const struct genl_family *rt;
-	unsigned int opidx;
-	u32 op;
-	u16 fam_id;
-	u8 policies: 1;
-	u8 single_op: 1;
-};
-
-enum netlink_attribute_type {
-	NL_ATTR_TYPE_INVALID = 0,
-	NL_ATTR_TYPE_FLAG = 1,
-	NL_ATTR_TYPE_U8 = 2,
-	NL_ATTR_TYPE_U16 = 3,
-	NL_ATTR_TYPE_U32 = 4,
-	NL_ATTR_TYPE_U64 = 5,
-	NL_ATTR_TYPE_S8 = 6,
-	NL_ATTR_TYPE_S16 = 7,
-	NL_ATTR_TYPE_S32 = 8,
-	NL_ATTR_TYPE_S64 = 9,
-	NL_ATTR_TYPE_BINARY = 10,
-	NL_ATTR_TYPE_STRING = 11,
-	NL_ATTR_TYPE_NUL_STRING = 12,
-	NL_ATTR_TYPE_NESTED = 13,
-	NL_ATTR_TYPE_NESTED_ARRAY = 14,
-	NL_ATTR_TYPE_BITFIELD32 = 15,
-};
-
-enum netlink_policy_type_attr {
-	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
-	NL_POLICY_TYPE_ATTR_TYPE = 1,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
-	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
-	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
-	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
-	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
-	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
-	NL_POLICY_TYPE_ATTR_PAD = 11,
-	NL_POLICY_TYPE_ATTR_MASK = 12,
-	__NL_POLICY_TYPE_ATTR_MAX = 13,
-	NL_POLICY_TYPE_ATTR_MAX = 12,
-};
-
-struct netlink_policy_dump_state___2 {
-	unsigned int policy_idx;
-	unsigned int attr_idx;
-	unsigned int n_alloc;
-	struct {
-		const struct nla_policy *policy;
-		unsigned int maxtype;
-	} policies[0];
-};
-
-struct trace_event_raw_bpf_test_finish {
-	struct trace_entry ent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_test_finish {};
-
-typedef void (*btf_trace_bpf_test_finish)(void *, int *);
-
-struct bpf_fentry_test_t {
-	struct bpf_fentry_test_t *a;
-};
-
-struct bpf_raw_tp_test_run_info {
-	struct bpf_prog *prog;
-	void *ctx;
-	u32 retval;
-};
-
-struct ethtool_cmd {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertising;
-	__u16 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 transceiver;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u32 maxtxpkt;
-	__u32 maxrxpkt;
-	__u16 speed_hi;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__u32 lp_advertising;
-	__u32 reserved[2];
+	NETLINK_DIAG_MEMINFO = 0,
+	NETLINK_DIAG_GROUPS = 1,
+	NETLINK_DIAG_RX_RING = 2,
+	NETLINK_DIAG_TX_RING = 3,
+	NETLINK_DIAG_FLAGS = 4,
+	__NETLINK_DIAG_MAX = 5,
 };
 
 struct ethtool_value {
@@ -103077,14 +116600,6 @@
 	__u32 data;
 };
 
-enum tunable_id {
-	ETHTOOL_ID_UNSPEC = 0,
-	ETHTOOL_RX_COPYBREAK = 1,
-	ETHTOOL_TX_COPYBREAK = 2,
-	ETHTOOL_PFC_PREVENTION_TOUT = 3,
-	__ETHTOOL_TUNABLE_COUNT = 4,
-};
-
 enum tunable_type_id {
 	ETHTOOL_TUNABLE_UNSPEC = 0,
 	ETHTOOL_TUNABLE_U8 = 1,
@@ -103098,14 +116613,6 @@
 	ETHTOOL_TUNABLE_S64 = 9,
 };
 
-enum phy_tunable_id {
-	ETHTOOL_PHY_ID_UNSPEC = 0,
-	ETHTOOL_PHY_DOWNSHIFT = 1,
-	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
-	ETHTOOL_PHY_EDPD = 3,
-	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
-};
-
 struct ethtool_gstrings {
 	__u32 cmd;
 	__u32 string_set;
@@ -103182,11 +116689,13 @@
 	char data[0];
 };
 
-enum {
-	ETH_RSS_HASH_TOP_BIT = 0,
-	ETH_RSS_HASH_XOR_BIT = 1,
-	ETH_RSS_HASH_CRC32_BIT = 2,
-	ETH_RSS_HASH_FUNCS_COUNT = 3,
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
 };
 
 struct ethtool_rx_flow_rule {
@@ -103199,12 +116708,20 @@
 	u32 rss_ctx;
 };
 
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
 struct ethtool_link_usettings {
 	struct ethtool_link_settings base;
 	struct {
-		__u32 supported[3];
-		__u32 advertising[3];
-		__u32 lp_advertising[3];
+		__u32 supported[4];
+		__u32 advertising[4];
+		__u32 lp_advertising[4];
 	} link_modes;
 };
 
@@ -103218,7 +116735,6 @@
 	struct flow_dissector_key_ip ip;
 	struct flow_dissector_key_vlan vlan;
 	struct flow_dissector_key_eth_addrs eth_addrs;
-	long: 48;
 };
 
 struct ethtool_rx_flow_match {
@@ -103228,454 +116744,33 @@
 	struct ethtool_rx_flow_key mask;
 };
 
-enum {
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
-	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
-	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
-};
-
-enum {
-	ETHTOOL_MSG_USER_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET = 1,
-	ETHTOOL_MSG_LINKINFO_GET = 2,
-	ETHTOOL_MSG_LINKINFO_SET = 3,
-	ETHTOOL_MSG_LINKMODES_GET = 4,
-	ETHTOOL_MSG_LINKMODES_SET = 5,
-	ETHTOOL_MSG_LINKSTATE_GET = 6,
-	ETHTOOL_MSG_DEBUG_GET = 7,
-	ETHTOOL_MSG_DEBUG_SET = 8,
-	ETHTOOL_MSG_WOL_GET = 9,
-	ETHTOOL_MSG_WOL_SET = 10,
-	ETHTOOL_MSG_FEATURES_GET = 11,
-	ETHTOOL_MSG_FEATURES_SET = 12,
-	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
-	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
-	ETHTOOL_MSG_RINGS_GET = 15,
-	ETHTOOL_MSG_RINGS_SET = 16,
-	ETHTOOL_MSG_CHANNELS_GET = 17,
-	ETHTOOL_MSG_CHANNELS_SET = 18,
-	ETHTOOL_MSG_COALESCE_GET = 19,
-	ETHTOOL_MSG_COALESCE_SET = 20,
-	ETHTOOL_MSG_PAUSE_GET = 21,
-	ETHTOOL_MSG_PAUSE_SET = 22,
-	ETHTOOL_MSG_EEE_GET = 23,
-	ETHTOOL_MSG_EEE_SET = 24,
-	ETHTOOL_MSG_TSINFO_GET = 25,
-	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
-	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
-	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
-	__ETHTOOL_MSG_USER_CNT = 29,
-	ETHTOOL_MSG_USER_MAX = 28,
-};
-
-enum {
-	ETHTOOL_A_HEADER_UNSPEC = 0,
-	ETHTOOL_A_HEADER_DEV_INDEX = 1,
-	ETHTOOL_A_HEADER_DEV_NAME = 2,
-	ETHTOOL_A_HEADER_FLAGS = 3,
-	__ETHTOOL_A_HEADER_CNT = 4,
-	ETHTOOL_A_HEADER_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_STRSET_UNSPEC = 0,
-	ETHTOOL_A_STRSET_HEADER = 1,
-	ETHTOOL_A_STRSET_STRINGSETS = 2,
-	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
-	__ETHTOOL_A_STRSET_CNT = 4,
-	ETHTOOL_A_STRSET_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_LINKINFO_UNSPEC = 0,
-	ETHTOOL_A_LINKINFO_HEADER = 1,
-	ETHTOOL_A_LINKINFO_PORT = 2,
-	ETHTOOL_A_LINKINFO_PHYADDR = 3,
-	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
-	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
-	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
-	__ETHTOOL_A_LINKINFO_CNT = 7,
-	ETHTOOL_A_LINKINFO_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_LINKMODES_UNSPEC = 0,
-	ETHTOOL_A_LINKMODES_HEADER = 1,
-	ETHTOOL_A_LINKMODES_AUTONEG = 2,
-	ETHTOOL_A_LINKMODES_OURS = 3,
-	ETHTOOL_A_LINKMODES_PEER = 4,
-	ETHTOOL_A_LINKMODES_SPEED = 5,
-	ETHTOOL_A_LINKMODES_DUPLEX = 6,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
-	__ETHTOOL_A_LINKMODES_CNT = 9,
-	ETHTOOL_A_LINKMODES_MAX = 8,
-};
-
-enum {
-	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
-	ETHTOOL_A_LINKSTATE_HEADER = 1,
-	ETHTOOL_A_LINKSTATE_LINK = 2,
-	ETHTOOL_A_LINKSTATE_SQI = 3,
-	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
-	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
-	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
-	__ETHTOOL_A_LINKSTATE_CNT = 7,
-	ETHTOOL_A_LINKSTATE_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_DEBUG_UNSPEC = 0,
-	ETHTOOL_A_DEBUG_HEADER = 1,
-	ETHTOOL_A_DEBUG_MSGMASK = 2,
-	__ETHTOOL_A_DEBUG_CNT = 3,
-	ETHTOOL_A_DEBUG_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_WOL_UNSPEC = 0,
-	ETHTOOL_A_WOL_HEADER = 1,
-	ETHTOOL_A_WOL_MODES = 2,
-	ETHTOOL_A_WOL_SOPASS = 3,
-	__ETHTOOL_A_WOL_CNT = 4,
-	ETHTOOL_A_WOL_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_FEATURES_UNSPEC = 0,
-	ETHTOOL_A_FEATURES_HEADER = 1,
-	ETHTOOL_A_FEATURES_HW = 2,
-	ETHTOOL_A_FEATURES_WANTED = 3,
-	ETHTOOL_A_FEATURES_ACTIVE = 4,
-	ETHTOOL_A_FEATURES_NOCHANGE = 5,
-	__ETHTOOL_A_FEATURES_CNT = 6,
-	ETHTOOL_A_FEATURES_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
-	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
-	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
-	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
-	ETHTOOL_A_PRIVFLAGS_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_RINGS_UNSPEC = 0,
-	ETHTOOL_A_RINGS_HEADER = 1,
-	ETHTOOL_A_RINGS_RX_MAX = 2,
-	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
-	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
-	ETHTOOL_A_RINGS_TX_MAX = 5,
-	ETHTOOL_A_RINGS_RX = 6,
-	ETHTOOL_A_RINGS_RX_MINI = 7,
-	ETHTOOL_A_RINGS_RX_JUMBO = 8,
-	ETHTOOL_A_RINGS_TX = 9,
-	__ETHTOOL_A_RINGS_CNT = 10,
-	ETHTOOL_A_RINGS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_CHANNELS_UNSPEC = 0,
-	ETHTOOL_A_CHANNELS_HEADER = 1,
-	ETHTOOL_A_CHANNELS_RX_MAX = 2,
-	ETHTOOL_A_CHANNELS_TX_MAX = 3,
-	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
-	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
-	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
-	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
-	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
-	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
-	__ETHTOOL_A_CHANNELS_CNT = 10,
-	ETHTOOL_A_CHANNELS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_COALESCE_UNSPEC = 0,
-	ETHTOOL_A_COALESCE_HEADER = 1,
-	ETHTOOL_A_COALESCE_RX_USECS = 2,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
-	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
-	ETHTOOL_A_COALESCE_TX_USECS = 6,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
-	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
-	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
-	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
-	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
-	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
-	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
-	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
-	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
-	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
-	__ETHTOOL_A_COALESCE_CNT = 24,
-	ETHTOOL_A_COALESCE_MAX = 23,
-};
-
-enum {
-	ETHTOOL_A_PAUSE_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_HEADER = 1,
-	ETHTOOL_A_PAUSE_AUTONEG = 2,
-	ETHTOOL_A_PAUSE_RX = 3,
-	ETHTOOL_A_PAUSE_TX = 4,
-	ETHTOOL_A_PAUSE_STATS = 5,
-	__ETHTOOL_A_PAUSE_CNT = 6,
-	ETHTOOL_A_PAUSE_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_EEE_UNSPEC = 0,
-	ETHTOOL_A_EEE_HEADER = 1,
-	ETHTOOL_A_EEE_MODES_OURS = 2,
-	ETHTOOL_A_EEE_MODES_PEER = 3,
-	ETHTOOL_A_EEE_ACTIVE = 4,
-	ETHTOOL_A_EEE_ENABLED = 5,
-	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
-	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
-	__ETHTOOL_A_EEE_CNT = 8,
-	ETHTOOL_A_EEE_MAX = 7,
-};
-
-enum {
-	ETHTOOL_A_TSINFO_UNSPEC = 0,
-	ETHTOOL_A_TSINFO_HEADER = 1,
-	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
-	ETHTOOL_A_TSINFO_TX_TYPES = 3,
-	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
-	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
-	__ETHTOOL_A_TSINFO_CNT = 6,
-	ETHTOOL_A_TSINFO_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_HEADER = 1,
-	__ETHTOOL_A_CABLE_TEST_CNT = 2,
-	ETHTOOL_A_CABLE_TEST_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
-	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
-	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
-	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
-	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
-	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
-};
-
-enum ethtool_multicast_groups {
-	ETHNL_MCGRP_MONITOR = 0,
-};
-
-struct ethnl_req_info {
-	struct net_device *dev;
-	u32 flags;
-};
-
-struct ethnl_reply_data {
-	struct net_device *dev;
-};
-
-struct ethnl_request_ops {
-	u8 request_cmd;
-	u8 reply_cmd;
-	u16 hdr_attr;
-	unsigned int req_info_size;
-	unsigned int reply_data_size;
-	bool allow_nodev_do;
-	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
-	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
-	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	void (*cleanup_data)(struct ethnl_reply_data *);
-};
-
-struct ethnl_dump_ctx {
-	const struct ethnl_request_ops *ops;
-	struct ethnl_req_info *req_info;
-	struct ethnl_reply_data *reply_data;
-	int pos_hash;
-	int pos_idx;
-};
-
-typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
-
-enum {
-	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BIT_INDEX = 1,
-	ETHTOOL_A_BITSET_BIT_NAME = 2,
-	ETHTOOL_A_BITSET_BIT_VALUE = 3,
-	__ETHTOOL_A_BITSET_BIT_CNT = 4,
-	ETHTOOL_A_BITSET_BIT_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BITS_BIT = 1,
-	__ETHTOOL_A_BITSET_BITS_CNT = 2,
-	ETHTOOL_A_BITSET_BITS_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_BITSET_UNSPEC = 0,
-	ETHTOOL_A_BITSET_NOMASK = 1,
-	ETHTOOL_A_BITSET_SIZE = 2,
-	ETHTOOL_A_BITSET_BITS = 3,
-	ETHTOOL_A_BITSET_VALUE = 4,
-	ETHTOOL_A_BITSET_MASK = 5,
-	__ETHTOOL_A_BITSET_CNT = 6,
-	ETHTOOL_A_BITSET_MAX = 5,
-};
-
-typedef const char (* const ethnl_string_array_t)[32];
-
-enum {
-	ETHTOOL_A_STRING_UNSPEC = 0,
-	ETHTOOL_A_STRING_INDEX = 1,
-	ETHTOOL_A_STRING_VALUE = 2,
-	__ETHTOOL_A_STRING_CNT = 3,
-	ETHTOOL_A_STRING_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_STRINGS_UNSPEC = 0,
-	ETHTOOL_A_STRINGS_STRING = 1,
-	__ETHTOOL_A_STRINGS_CNT = 2,
-	ETHTOOL_A_STRINGS_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_STRINGSET_UNSPEC = 0,
-	ETHTOOL_A_STRINGSET_ID = 1,
-	ETHTOOL_A_STRINGSET_COUNT = 2,
-	ETHTOOL_A_STRINGSET_STRINGS = 3,
-	__ETHTOOL_A_STRINGSET_CNT = 4,
-	ETHTOOL_A_STRINGSET_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
-	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
-	__ETHTOOL_A_STRINGSETS_CNT = 2,
-	ETHTOOL_A_STRINGSETS_MAX = 1,
-};
-
-struct strset_info {
-	bool per_dev;
-	bool free_strings;
-	unsigned int count;
-	const char (*strings)[32];
-};
-
-struct strset_req_info {
-	struct ethnl_req_info base;
-	u32 req_ids;
-	bool counts_only;
-};
-
-struct strset_reply_data {
-	struct ethnl_reply_data base;
-	struct strset_info sets[16];
-};
-
 struct linkinfo_reply_data {
 	struct ethnl_reply_data base;
 	struct ethtool_link_ksettings ksettings;
 	struct ethtool_link_settings *lsettings;
 };
 
-struct linkmodes_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_link_ksettings ksettings;
-	struct ethtool_link_settings *lsettings;
-	bool peer_empty;
-};
-
-struct link_mode_info {
-	int speed;
-	u8 duplex;
-};
-
-struct linkstate_reply_data {
-	struct ethnl_reply_data base;
-	int link;
-	int sqi;
-	int sqi_max;
-	bool link_ext_state_provided;
-	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
-};
-
 struct debug_reply_data {
 	struct ethnl_reply_data base;
 	u32 msg_mask;
 };
 
-struct wol_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_wolinfo wol;
-	bool show_sopass;
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
 };
 
-struct features_reply_data {
-	struct ethnl_reply_data base;
-	u32 hw[2];
-	u32 wanted[2];
-	u32 active[2];
-	u32 nochange[2];
-	u32 all[2];
-};
-
-struct privflags_reply_data {
-	struct ethnl_reply_data base;
-	const char (*priv_flag_names)[32];
-	unsigned int n_priv_flags;
-	u32 priv_flags;
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
 };
 
 struct rings_reply_data {
 	struct ethnl_reply_data base;
 	struct ethtool_ringparam ringparam;
-};
-
-struct channels_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_channels channels;
-};
-
-struct coalesce_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_coalesce coalesce;
-	u32 supported_params;
-};
-
-enum {
-	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_STAT_PAD = 1,
-	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
-	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
-	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
-	ETHTOOL_A_PAUSE_STAT_MAX = 3,
-};
-
-struct pause_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_pauseparam pauseparam;
-	struct ethtool_pause_stats pausestat;
+	struct kernel_ethtool_ringparam kernel_ringparam;
 };
 
 struct eee_reply_data {
@@ -103683,200 +116778,35 @@
 	struct ethtool_eee eee;
 };
 
-struct tsinfo_reply_data {
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
 	struct ethnl_reply_data base;
-	struct ethtool_ts_info ts_info;
+	long unsigned int fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
 };
 
-enum {
-	ETHTOOL_A_CABLE_PAIR_A = 0,
-	ETHTOOL_A_CABLE_PAIR_B = 1,
-	ETHTOOL_A_CABLE_PAIR_C = 2,
-	ETHTOOL_A_CABLE_PAIR_D = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
-	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
-	ETHTOOL_A_CABLE_RESULT_CODE = 2,
-	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
-	ETHTOOL_A_CABLE_RESULT_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
-	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
-	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_NEST_RESULT = 1,
-	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
-	__ETHTOOL_A_CABLE_NEST_CNT = 3,
-	ETHTOOL_A_CABLE_NEST_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
-	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
-	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
-	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
-	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
-	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
-};
-
-enum {
-	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
-	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
-	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
-	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
-	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
-	ETHTOOL_A_CABLE_PULSE_mV = 1,
-	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
-	ETHTOOL_A_CABLE_PULSE_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
-	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
-	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
-	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
-	__ETHTOOL_A_CABLE_STEP_CNT = 4,
-	ETHTOOL_A_CABLE_STEP_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
-	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
-	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
-	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
-	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
-	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
-	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
-	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
-	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
-};
-
-enum udp_parsable_tunnel_type {
-	UDP_TUNNEL_TYPE_VXLAN = 1,
-	UDP_TUNNEL_TYPE_GENEVE = 2,
-	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
-};
-
-enum udp_tunnel_nic_info_flags {
-	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
-	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
-	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
-	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
-};
-
-struct udp_tunnel_nic_ops {
-	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
-	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*reset_ntf)(struct net_device *);
-	size_t (*dump_size)(struct net_device *, unsigned int);
-	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
-};
-
-struct ethnl_tunnel_info_dump_ctx {
-	struct ethnl_req_info req_info;
-	int pos_hash;
-	int pos_idx;
-};
-
-struct nf_hook_entries_rcu_head {
-	struct callback_head head;
-	void *allocation;
-};
-
-struct nf_conn___2;
-
-enum nf_nat_manip_type;
-
-struct nf_nat_hook {
-	int (*parse_nat_setup)(struct nf_conn___2 *, enum nf_nat_manip_type, const struct nlattr *);
-	void (*decode_session)(struct sk_buff *, struct flowi *);
-	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn___2 *, enum nf_nat_manip_type, enum ip_conntrack_dir);
-};
-
-struct nf_conntrack_tuple___2;
-
-struct nf_ct_hook {
-	int (*update)(struct net *, struct sk_buff *);
-	void (*destroy)(struct nf_conntrack *);
-	bool (*get_tuple_skb)(struct nf_conntrack_tuple___2 *, const struct sk_buff *);
-};
-
-struct nfnl_ct_hook {
-	struct nf_conn___2 * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);
-	size_t (*build_size)(const struct nf_conn___2 *);
-	int (*build)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, u_int16_t, u_int16_t);
-	int (*parse)(const struct nlattr *, struct nf_conn___2 *);
-	int (*attach_expect)(const struct nlattr *, struct nf_conn___2 *, u32, u32);
-	void (*seq_adjust)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, s32);
-};
-
-struct nf_ipv6_ops {
-	void (*route_input)(struct sk_buff *);
-	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
-};
-
-struct nf_queue_entry {
-	struct list_head list;
-	struct sk_buff *skb;
-	unsigned int id;
-	unsigned int hook_index;
-	struct net_device *physin;
-	struct net_device *physout;
-	struct nf_hook_state state;
-	u16 size;
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
 };
 
 struct nf_loginfo {
@@ -103900,241 +116830,116 @@
 	char buf[1020];
 };
 
-struct nf_bridge_info {
-	enum {
-		BRNF_PROTO_UNCHANGED = 0,
-		BRNF_PROTO_8021Q = 1,
-		BRNF_PROTO_PPPOE = 2,
-	} orig_proto: 8;
-	u8 pkt_otherhost: 1;
-	u8 in_prerouting: 1;
-	u8 bridged_dnat: 1;
-	__u16 frag_max_size;
-	struct net_device *physindev;
-	struct net_device *physoutdev;
-	union {
-		__be32 ipv4_daddr;
-		struct in6_addr ipv6_daddr;
-		char neigh_header[8];
-	};
-};
-
-struct ip_rt_info {
-	__be32 daddr;
-	__be32 saddr;
-	u_int8_t tos;
-	u_int32_t mark;
-};
-
-struct ip6_rt_info {
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	u_int32_t mark;
-};
-
-struct nf_sockopt_ops {
-	struct list_head list;
-	u_int8_t pf;
-	int set_optmin;
-	int set_optmax;
-	int (*set)(struct sock *, int, sockptr_t, unsigned int);
-	int get_optmin;
-	int get_optmax;
-	int (*get)(struct sock *, int, void *, int *);
-	struct module *owner;
-};
-
-struct ip_mreqn {
-	struct in_addr imr_multiaddr;
-	struct in_addr imr_address;
-	int imr_ifindex;
-};
-
-struct rtmsg {
-	unsigned char rtm_family;
-	unsigned char rtm_dst_len;
-	unsigned char rtm_src_len;
-	unsigned char rtm_tos;
-	unsigned char rtm_table;
-	unsigned char rtm_protocol;
-	unsigned char rtm_scope;
-	unsigned char rtm_type;
-	unsigned int rtm_flags;
-};
-
-struct rtvia {
-	__kernel_sa_family_t rtvia_family;
-	__u8 rtvia_addr[0];
-};
-
-struct ip_sf_list;
-
-struct ip_mc_list {
-	struct in_device *interface;
-	__be32 multiaddr;
-	unsigned int sfmode;
-	struct ip_sf_list *sources;
-	struct ip_sf_list *tomb;
-	long unsigned int sfcount[2];
-	union {
-		struct ip_mc_list *next;
-		struct ip_mc_list *next_rcu;
-	};
-	struct ip_mc_list *next_hash;
-	struct timer_list timer;
-	int users;
-	refcount_t refcnt;
-	spinlock_t lock;
-	char tm_running;
-	char reporter;
-	char unsolicit_count;
-	char loaded;
-	unsigned char gsquery;
-	unsigned char crcount;
-	struct callback_head rcu;
-};
-
-struct ip_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct callback_head rcu;
-	__be32 sl_addr[0];
-};
-
-struct ip_mc_socklist {
-	struct ip_mc_socklist *next_rcu;
-	struct ip_mreqn multi;
-	unsigned int sfmode;
-	struct ip_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ip_sf_list {
-	struct ip_sf_list *sf_next;
-	long unsigned int sf_count[2];
-	__be32 sf_inaddr;
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ipv4_addr_key {
-	__be32 addr;
-	int vif;
-};
-
-struct inetpeer_addr {
-	union {
-		struct ipv4_addr_key a4;
-		struct in6_addr a6;
-		u32 key[4];
-	};
-	__u16 family;
-};
-
-struct inet_peer {
-	struct rb_node rb_node;
-	struct inetpeer_addr daddr;
-	u32 metrics[17];
-	u32 rate_tokens;
-	u32 n_redirects;
-	long unsigned int rate_last;
+struct xt_entry_match {
 	union {
 		struct {
-			atomic_t rid;
-		};
-		struct callback_head rcu;
-	};
-	__u32 dtime;
-	refcount_t refcnt;
+			__u16 match_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 match_size;
+			struct xt_match *match;
+		} kernel;
+		__u16 match_size;
+	} u;
+	unsigned char data[0];
 };
 
-struct fib_rt_info {
-	struct fib_info *fi;
-	u32 tb_id;
-	__be32 dst;
-	int dst_len;
-	u8 tos;
-	u8 type;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
+struct xt_entry_target {
+	union {
+		struct {
+			__u16 target_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 target_size;
+			struct xt_target *target;
+		} kernel;
+		__u16 target_size;
+	} u;
+	unsigned char data[0];
 };
 
-struct uncached_list {
-	spinlock_t lock;
-	struct list_head head;
+struct xt_standard_target {
+	struct xt_entry_target target;
+	int verdict;
 };
 
-struct ip_rt_acct {
-	__u32 o_bytes;
-	__u32 o_packets;
-	__u32 i_bytes;
-	__u32 i_packets;
+struct xt_error_target {
+	struct xt_entry_target target;
+	char errorname[30];
 };
 
-struct rt_cache_stat {
-	unsigned int in_slow_tot;
-	unsigned int in_slow_mc;
-	unsigned int in_no_route;
-	unsigned int in_brd;
-	unsigned int in_martian_dst;
-	unsigned int in_martian_src;
-	unsigned int out_slow_tot;
-	unsigned int out_slow_mc;
+struct xt_counters {
+	__u64 pcnt;
+	__u64 bcnt;
 };
 
-struct fib_alias {
-	struct hlist_node fa_list;
-	struct fib_info *fa_info;
-	u8 fa_tos;
-	u8 fa_type;
-	u8 fa_state;
-	u8 fa_slen;
-	u32 tb_id;
-	s16 fa_default;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
-	struct callback_head rcu;
+struct xt_counters_info {
+	char name[32];
+	unsigned int num_counters;
+	struct xt_counters counters[0];
 };
 
-struct fib_prop {
-	int error;
-	u8 scope;
+struct xt_table_info;
+
+struct xt_table {
+	struct list_head list;
+	unsigned int valid_hooks;
+	struct xt_table_info *private;
+	struct nf_hook_ops *ops;
+	struct module *me;
+	u_int8_t af;
+	int priority;
+	const char name[32];
 };
 
-struct net_offload {
-	struct offload_callbacks callbacks;
-	unsigned int flags;
+struct xt_table_info {
+	unsigned int size;
+	unsigned int number;
+	unsigned int initial_entries;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int stacksize;
+	void ***jumpstack;
+	unsigned char entries[0];
 };
 
-struct raw_hashinfo {
-	rwlock_t lock;
-	struct hlist_head ht[256];
+struct xt_percpu_counter_alloc_state {
+	unsigned int off;
+	const char *mem;
 };
 
-enum ip_defrag_users {
-	IP_DEFRAG_LOCAL_DELIVER = 0,
-	IP_DEFRAG_CALL_RA_CHAIN = 1,
-	IP_DEFRAG_CONNTRACK_IN = 2,
-	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
-	IP_DEFRAG_CONNTRACK_OUT = 65538,
-	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
-	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
-	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
-	IP_DEFRAG_VS_IN = 196610,
-	IP_DEFRAG_VS_OUT = 196611,
-	IP_DEFRAG_VS_FWD = 196612,
-	IP_DEFRAG_AF_PACKET = 196613,
-	IP_DEFRAG_MACVLAN = 196614,
+struct xt_template {
+	struct list_head list;
+	int (*table_init)(struct net *);
+	struct module *me;
+	char name[32];
+};
+
+struct xt_pernet {
+	struct list_head tables[11];
+};
+
+struct xt_af {
+	struct mutex mutex;
+	struct list_head match;
+	struct list_head target;
+};
+
+struct nf_mttg_trav {
+	struct list_head *head;
+	struct list_head *curr;
+	uint8_t class;
 };
 
 enum {
-	INET_FRAG_FIRST_IN = 1,
-	INET_FRAG_LAST_IN = 2,
-	INET_FRAG_COMPLETE = 4,
-	INET_FRAG_HASH_DEAD = 8,
+	MTTG_TRAV_INIT = 0,
+	MTTG_TRAV_NFP_UNSPEC = 1,
+	MTTG_TRAV_NFP_SPEC = 2,
+	MTTG_TRAV_DONE = 3,
 };
 
 struct ipq {
@@ -104146,108 +116951,6 @@
 	struct inet_peer *peer;
 };
 
-struct ip_options_data {
-	struct ip_options_rcu opt;
-	char data[40];
-};
-
-struct ipcm_cookie {
-	struct sockcm_cookie sockc;
-	__be32 addr;
-	int oif;
-	struct ip_options_rcu *opt;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-};
-
-struct ip_fraglist_iter {
-	struct sk_buff *frag;
-	struct iphdr *iph;
-	int offset;
-	unsigned int hlen;
-};
-
-struct ip_frag_state {
-	bool DF;
-	unsigned int hlen;
-	unsigned int ll_rs;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	__be16 not_last_frag;
-};
-
-struct ip_reply_arg {
-	struct kvec iov[1];
-	int flags;
-	__wsum csum;
-	int csumoffset;
-	int bound_dev_if;
-	u8 tos;
-	kuid_t uid;
-};
-
-struct ip_mreq_source {
-	__be32 imr_multiaddr;
-	__be32 imr_interface;
-	__be32 imr_sourceaddr;
-};
-
-struct ip_msfilter {
-	__be32 imsf_multiaddr;
-	__be32 imsf_interface;
-	__u32 imsf_fmode;
-	__u32 imsf_numsrc;
-	__be32 imsf_slist[1];
-};
-
-struct group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-};
-
-struct group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-};
-
-struct group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-};
-
-struct in_pktinfo {
-	int ipi_ifindex;
-	struct in_addr ipi_spec_dst;
-	struct in_addr ipi_addr;
-};
-
-struct compat_group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-} __attribute__((packed));
-
-struct compat_group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-} __attribute__((packed));
-
-struct compat_group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-} __attribute__((packed));
-
 enum {
 	BPFILTER_IPT_SO_SET_REPLACE = 64,
 	BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
@@ -104262,72 +116965,6 @@
 	BPFILTER_IPT_GET_MAX = 68,
 };
 
-struct tcpvegas_info {
-	__u32 tcpv_enabled;
-	__u32 tcpv_rttcnt;
-	__u32 tcpv_rtt;
-	__u32 tcpv_minrtt;
-};
-
-struct tcp_dctcp_info {
-	__u16 dctcp_enabled;
-	__u16 dctcp_ce_state;
-	__u32 dctcp_alpha;
-	__u32 dctcp_ab_ecn;
-	__u32 dctcp_ab_tot;
-};
-
-struct tcp_bbr_info {
-	__u32 bbr_bw_lo;
-	__u32 bbr_bw_hi;
-	__u32 bbr_min_rtt;
-	__u32 bbr_pacing_gain;
-	__u32 bbr_cwnd_gain;
-};
-
-union tcp_cc_info {
-	struct tcpvegas_info vegas;
-	struct tcp_dctcp_info dctcp;
-	struct tcp_bbr_info bbr;
-};
-
-enum {
-	BPF_TCP_ESTABLISHED = 1,
-	BPF_TCP_SYN_SENT = 2,
-	BPF_TCP_SYN_RECV = 3,
-	BPF_TCP_FIN_WAIT1 = 4,
-	BPF_TCP_FIN_WAIT2 = 5,
-	BPF_TCP_TIME_WAIT = 6,
-	BPF_TCP_CLOSE = 7,
-	BPF_TCP_CLOSE_WAIT = 8,
-	BPF_TCP_LAST_ACK = 9,
-	BPF_TCP_LISTEN = 10,
-	BPF_TCP_CLOSING = 11,
-	BPF_TCP_NEW_SYN_RECV = 12,
-	BPF_TCP_MAX_STATES = 13,
-};
-
-enum inet_csk_ack_state_t {
-	ICSK_ACK_SCHED = 1,
-	ICSK_ACK_TIMER = 2,
-	ICSK_ACK_PUSHED = 4,
-	ICSK_ACK_PUSHED2 = 8,
-	ICSK_ACK_NOW = 16,
-};
-
-enum {
-	TCP_FLAG_CWR = 32768,
-	TCP_FLAG_ECE = 16384,
-	TCP_FLAG_URG = 8192,
-	TCP_FLAG_ACK = 4096,
-	TCP_FLAG_PSH = 2048,
-	TCP_FLAG_RST = 1024,
-	TCP_FLAG_SYN = 512,
-	TCP_FLAG_FIN = 256,
-	TCP_RESERVED_BITS = 15,
-	TCP_DATA_OFFSET = 240,
-};
-
 struct tcp_repair_opt {
 	__u32 opt_code;
 	__u32 opt_val;
@@ -104342,72 +116979,6 @@
 };
 
 enum {
-	TCP_NO_QUEUE = 0,
-	TCP_RECV_QUEUE = 1,
-	TCP_SEND_QUEUE = 2,
-	TCP_QUEUES_NR = 3,
-};
-
-struct tcp_info {
-	__u8 tcpi_state;
-	__u8 tcpi_ca_state;
-	__u8 tcpi_retransmits;
-	__u8 tcpi_probes;
-	__u8 tcpi_backoff;
-	__u8 tcpi_options;
-	__u8 tcpi_snd_wscale: 4;
-	__u8 tcpi_rcv_wscale: 4;
-	__u8 tcpi_delivery_rate_app_limited: 1;
-	__u8 tcpi_fastopen_client_fail: 2;
-	__u32 tcpi_rto;
-	__u32 tcpi_ato;
-	__u32 tcpi_snd_mss;
-	__u32 tcpi_rcv_mss;
-	__u32 tcpi_unacked;
-	__u32 tcpi_sacked;
-	__u32 tcpi_lost;
-	__u32 tcpi_retrans;
-	__u32 tcpi_fackets;
-	__u32 tcpi_last_data_sent;
-	__u32 tcpi_last_ack_sent;
-	__u32 tcpi_last_data_recv;
-	__u32 tcpi_last_ack_recv;
-	__u32 tcpi_pmtu;
-	__u32 tcpi_rcv_ssthresh;
-	__u32 tcpi_rtt;
-	__u32 tcpi_rttvar;
-	__u32 tcpi_snd_ssthresh;
-	__u32 tcpi_snd_cwnd;
-	__u32 tcpi_advmss;
-	__u32 tcpi_reordering;
-	__u32 tcpi_rcv_rtt;
-	__u32 tcpi_rcv_space;
-	__u32 tcpi_total_retrans;
-	__u64 tcpi_pacing_rate;
-	__u64 tcpi_max_pacing_rate;
-	__u64 tcpi_bytes_acked;
-	__u64 tcpi_bytes_received;
-	__u32 tcpi_segs_out;
-	__u32 tcpi_segs_in;
-	__u32 tcpi_notsent_bytes;
-	__u32 tcpi_min_rtt;
-	__u32 tcpi_data_segs_in;
-	__u32 tcpi_data_segs_out;
-	__u64 tcpi_delivery_rate;
-	__u64 tcpi_busy_time;
-	__u64 tcpi_rwnd_limited;
-	__u64 tcpi_sndbuf_limited;
-	__u32 tcpi_delivered;
-	__u32 tcpi_delivered_ce;
-	__u64 tcpi_bytes_sent;
-	__u64 tcpi_bytes_retrans;
-	__u32 tcpi_dsack_dups;
-	__u32 tcpi_reord_seen;
-	__u32 tcpi_rcv_ooopack;
-	__u32 tcpi_snd_wnd;
-};
-
-enum {
 	TCP_NLA_PAD = 0,
 	TCP_NLA_BUSY = 1,
 	TCP_NLA_RWND_LIMITED = 2,
@@ -104434,6 +117005,8 @@
 	TCP_NLA_TIMEOUT_REHASH = 23,
 	TCP_NLA_BYTES_NOTSENT = 24,
 	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
+	TCP_NLA_REHASH = 27,
 };
 
 struct tcp_zerocopy_receive {
@@ -104442,19 +117015,34 @@
 	__u32 recv_skip_hint;
 	__u32 inq;
 	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
 };
 
-struct tcp_md5sig_pool {
-	struct ahash_request *md5_req;
-	void *scratch;
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
 };
 
-enum tcp_chrono {
-	TCP_CHRONO_UNSPEC = 0,
-	TCP_CHRONO_BUSY = 1,
-	TCP_CHRONO_RWND_LIMITED = 2,
-	TCP_CHRONO_SNDBUF_LIMITED = 3,
-	__TCP_CHRONO_MAX = 4,
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
 };
 
 struct tcp_splice_state {
@@ -104463,170 +117051,13 @@
 	unsigned int flags;
 };
 
-enum tcp_fastopen_client_fail {
-	TFO_STATUS_UNSPEC = 0,
-	TFO_COOKIE_UNAVAILABLE = 1,
-	TFO_DATA_NOT_ACKED = 2,
-	TFO_SYN_RETRANSMITTED = 3,
-};
-
-struct tcp_sack_block_wire {
-	__be32 start_seq;
-	__be32 end_seq;
-};
-
-struct static_key_false_deferred {
-	struct static_key_false key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-struct mptcp_ext {
-	union {
-		u64 data_ack;
-		u32 data_ack32;
-	};
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-};
-
-enum tcp_queue {
-	TCP_FRAG_IN_WRITE_QUEUE = 0,
-	TCP_FRAG_IN_RTX_QUEUE = 1,
-};
-
-enum tcp_ca_ack_event_flags {
-	CA_ACK_SLOWPATH = 1,
-	CA_ACK_WIN_UPDATE = 2,
-	CA_ACK_ECE = 4,
-};
-
-struct tcp_sacktag_state {
-	u64 first_sackt;
-	u64 last_sackt;
-	u32 reord;
-	u32 sack_delivered;
-	int flag;
-	unsigned int mss_now;
-	struct rate_sample *rate;
-};
-
-enum pkt_hash_types {
-	PKT_HASH_TYPE_NONE = 0,
-	PKT_HASH_TYPE_L2 = 1,
-	PKT_HASH_TYPE_L3 = 2,
-	PKT_HASH_TYPE_L4 = 3,
-};
-
-enum {
-	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
-	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
-};
-
-enum tsq_flags {
-	TSQF_THROTTLED = 1,
-	TSQF_QUEUED = 2,
-	TCPF_TSQ_DEFERRED = 4,
-	TCPF_WRITE_TIMER_DEFERRED = 8,
-	TCPF_DELACK_TIMER_DEFERRED = 16,
-	TCPF_MTU_REDUCED_DEFERRED = 32,
-};
-
-struct mptcp_out_options {
-	u16 suboptions;
-	u64 sndr_key;
-	u64 rcvr_key;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-	u8 addr_id;
-	u64 ahmac;
-	u8 rm_id;
-	u8 join_id;
-	u8 backup;
-	u32 nonce;
-	u64 thmac;
-	u32 token;
-	u8 hmac[20];
-	struct mptcp_ext ext_copy;
-};
-
-struct tcp_out_options {
-	u16 options;
-	u16 mss;
-	u8 ws;
-	u8 num_sack_blocks;
-	u8 hash_size;
-	u8 bpf_opt_len;
-	__u8 *hash_location;
-	__u32 tsval;
-	__u32 tsecr;
-	struct tcp_fastopen_cookie *fastopen_cookie;
-	struct mptcp_out_options mptcp;
-};
-
-struct tsq_tasklet {
-	struct tasklet_struct tasklet;
-	struct list_head head;
-};
-
-struct tcp_md5sig {
-	struct __kernel_sockaddr_storage tcpm_addr;
-	__u8 tcpm_flags;
-	__u8 tcpm_prefixlen;
-	__u16 tcpm_keylen;
-	int tcpm_ifindex;
-	__u8 tcpm_key[80];
-};
-
-struct icmp_err {
-	int errno;
-	unsigned int fatal: 1;
-};
-
-enum tcp_tw_status {
-	TCP_TW_SUCCESS = 0,
-	TCP_TW_RST = 1,
-	TCP_TW_ACK = 2,
-	TCP_TW_SYN = 3,
-};
-
-struct tcp4_pseudohdr {
-	__be32 saddr;
-	__be32 daddr;
-	__u8 pad;
-	__u8 protocol;
-	__be16 len;
-};
-
-enum tcp_seq_states {
-	TCP_SEQ_STATE_LISTENING = 0,
-	TCP_SEQ_STATE_ESTABLISHED = 1,
-};
-
-struct tcp_seq_afinfo {
-	sa_family_t family;
-};
-
-struct tcp_iter_state {
-	struct seq_net_private p;
-	enum tcp_seq_states state;
-	struct sock *syn_wait_sk;
-	struct tcp_seq_afinfo *bpf_seq_afinfo;
-	int bucket;
-	int offset;
-	int sbucket;
-	int num;
-	loff_t last_pos;
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
 };
 
 struct bpf_iter__tcp {
@@ -104639,185 +117070,6 @@
 	uid_t uid;
 };
 
-enum tcp_metric_index {
-	TCP_METRIC_RTT = 0,
-	TCP_METRIC_RTTVAR = 1,
-	TCP_METRIC_SSTHRESH = 2,
-	TCP_METRIC_CWND = 3,
-	TCP_METRIC_REORDERING = 4,
-	TCP_METRIC_RTT_US = 5,
-	TCP_METRIC_RTTVAR_US = 6,
-	__TCP_METRIC_MAX = 7,
-};
-
-enum {
-	TCP_METRICS_ATTR_UNSPEC = 0,
-	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
-	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
-	TCP_METRICS_ATTR_AGE = 3,
-	TCP_METRICS_ATTR_TW_TSVAL = 4,
-	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
-	TCP_METRICS_ATTR_VALS = 6,
-	TCP_METRICS_ATTR_FOPEN_MSS = 7,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
-	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
-	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
-	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
-	TCP_METRICS_ATTR_PAD = 13,
-	__TCP_METRICS_ATTR_MAX = 14,
-};
-
-enum {
-	TCP_METRICS_CMD_UNSPEC = 0,
-	TCP_METRICS_CMD_GET = 1,
-	TCP_METRICS_CMD_DEL = 2,
-	__TCP_METRICS_CMD_MAX = 3,
-};
-
-struct tcp_fastopen_metrics {
-	u16 mss;
-	u16 syn_loss: 10;
-	u16 try_exp: 2;
-	long unsigned int last_syn_loss;
-	struct tcp_fastopen_cookie cookie;
-};
-
-struct tcp_metrics_block {
-	struct tcp_metrics_block *tcpm_next;
-	possible_net_t tcpm_net;
-	struct inetpeer_addr tcpm_saddr;
-	struct inetpeer_addr tcpm_daddr;
-	long unsigned int tcpm_stamp;
-	u32 tcpm_lock;
-	u32 tcpm_vals[5];
-	struct tcp_fastopen_metrics tcpm_fastopen;
-	struct callback_head callback_head;
-};
-
-struct tcpm_hash_bucket {
-	struct tcp_metrics_block *chain;
-};
-
-struct icmp_filter {
-	__u32 data;
-};
-
-struct raw_iter_state {
-	struct seq_net_private p;
-	int bucket;
-};
-
-struct raw_sock {
-	struct inet_sock inet;
-	struct icmp_filter filter;
-	u32 ipmr_table;
-};
-
-struct raw_frag_vec {
-	struct msghdr *msg;
-	union {
-		struct icmphdr icmph;
-		char c[1];
-	} hdr;
-	int hlen;
-};
-
-struct ip_tunnel_encap {
-	u16 type;
-	u16 flags;
-	__be16 sport;
-	__be16 dport;
-};
-
-struct ip_tunnel_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
-	int (*err_handler)(struct sk_buff *, u32);
-};
-
-struct udp_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	__u16 cscov;
-	__u8 partial_cov;
-};
-
-struct udp_dev_scratch {
-	u32 _tsize_state;
-	u16 len;
-	bool is_linear;
-	bool csum_unnecessary;
-};
-
-struct udp_seq_afinfo {
-	sa_family_t family;
-	struct udp_table *udp_table;
-};
-
-struct udp_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	struct udp_seq_afinfo *bpf_seq_afinfo;
-};
-
-struct bpf_iter__udp {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct udp_sock *udp_sk;
-	};
-	uid_t uid;
-	int: 32;
-	int bucket;
-};
-
-struct inet_protosw {
-	struct list_head list;
-	short unsigned int type;
-	short unsigned int protocol;
-	struct proto *prot;
-	const struct proto_ops *ops;
-	unsigned char flags;
-};
-
-typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
-
-typedef struct sock * (*udp_lookup_t)(struct sk_buff *, __be16, __be16);
-
-struct arpreq {
-	struct sockaddr arp_pa;
-	struct sockaddr arp_ha;
-	int arp_flags;
-	struct sockaddr arp_netmask;
-	char arp_dev[16];
-};
-
-typedef struct {
-	char ax25_call[7];
-} ax25_address;
-
-enum {
-	AX25_VALUES_IPDEFMODE = 0,
-	AX25_VALUES_AXDEFMODE = 1,
-	AX25_VALUES_BACKOFF = 2,
-	AX25_VALUES_CONMODE = 3,
-	AX25_VALUES_WINDOW = 4,
-	AX25_VALUES_EWINDOW = 5,
-	AX25_VALUES_T1 = 6,
-	AX25_VALUES_T2 = 7,
-	AX25_VALUES_T3 = 8,
-	AX25_VALUES_IDLE = 9,
-	AX25_VALUES_N2 = 10,
-	AX25_VALUES_PACLEN = 11,
-	AX25_VALUES_PROTOCOL = 12,
-	AX25_VALUES_DS_TIMEOUT = 13,
-	AX25_MAX_VALUES = 14,
-};
-
 enum ip_conntrack_status {
 	IPS_EXPECTED_BIT = 0,
 	IPS_EXPECTED = 1,
@@ -104859,12 +117111,6 @@
 	__IPS_MAX_BIT = 16,
 };
 
-enum {
-	XFRM_LOOKUP_ICMP = 1,
-	XFRM_LOOKUP_QUEUE = 2,
-	XFRM_LOOKUP_KEEP_DST_REF = 4,
-};
-
 struct icmp_ext_hdr {
 	__u8 reserved1: 4;
 	__u8 version: 4;
@@ -104878,6 +117124,27 @@
 	__u8 class_type;
 };
 
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
 struct icmp_bxm {
 	struct sk_buff *skb;
 	int offset;
@@ -104891,577 +117158,26 @@
 };
 
 struct icmp_control {
-	bool (*handler)(struct sk_buff *);
+	enum skb_drop_reason (*handler)(struct sk_buff *);
 	short int error;
 };
 
-struct ifaddrmsg {
-	__u8 ifa_family;
-	__u8 ifa_prefixlen;
-	__u8 ifa_flags;
-	__u8 ifa_scope;
-	__u32 ifa_index;
-};
-
-enum {
-	IFA_UNSPEC = 0,
-	IFA_ADDRESS = 1,
-	IFA_LOCAL = 2,
-	IFA_LABEL = 3,
-	IFA_BROADCAST = 4,
-	IFA_ANYCAST = 5,
-	IFA_CACHEINFO = 6,
-	IFA_MULTICAST = 7,
-	IFA_FLAGS = 8,
-	IFA_RT_PRIORITY = 9,
-	IFA_TARGET_NETNSID = 10,
-	__IFA_MAX = 11,
-};
-
-struct ifa_cacheinfo {
-	__u32 ifa_prefered;
-	__u32 ifa_valid;
-	__u32 cstamp;
-	__u32 tstamp;
-};
-
-enum {
-	IFLA_INET_UNSPEC = 0,
-	IFLA_INET_CONF = 1,
-	__IFLA_INET_MAX = 2,
-};
-
-struct in_validator_info {
-	__be32 ivi_addr;
-	struct in_device *ivi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct netconfmsg {
-	__u8 ncm_family;
-};
-
-enum {
-	NETCONFA_UNSPEC = 0,
-	NETCONFA_IFINDEX = 1,
-	NETCONFA_FORWARDING = 2,
-	NETCONFA_RP_FILTER = 3,
-	NETCONFA_MC_FORWARDING = 4,
-	NETCONFA_PROXY_NEIGH = 5,
-	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
-	NETCONFA_INPUT = 7,
-	NETCONFA_BC_FORWARDING = 8,
-	__NETCONFA_MAX = 9,
-};
-
-struct inet_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-};
-
-struct devinet_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table devinet_vars[33];
-};
-
-struct rtentry {
-	long unsigned int rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	long unsigned int rt_pad3;
-	void *rt_pad4;
-	short int rt_metric;
-	char *rt_dev;
-	long unsigned int rt_mtu;
-	long unsigned int rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct pingv6_ops {
-	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
-	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	int (*icmpv6_err_convert)(u8, u8, int *);
-	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
-	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
-};
-
-struct compat_rtentry {
-	u32 rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	u32 rt_pad3;
-	unsigned char rt_tos;
-	unsigned char rt_class;
-	short int rt_pad4;
-	short int rt_metric;
-	compat_uptr_t rt_dev;
-	u32 rt_mtu;
-	u32 rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct igmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-};
-
-struct igmpv3_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	__be32 grec_mca;
-	__be32 grec_src[0];
-};
-
-struct igmpv3_report {
-	__u8 type;
-	__u8 resv1;
-	__sum16 csum;
-	__be16 resv2;
-	__be16 ngrec;
-	struct igmpv3_grec grec[0];
-};
-
-struct igmpv3_query {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-	__u8 qrv: 3;
-	__u8 suppress: 1;
-	__u8 resv: 4;
-	__u8 qqic;
-	__be16 nsrcs;
-	__be32 srcs[0];
-};
-
-struct igmp_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *in_dev;
-};
-
-struct igmp_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *idev;
-	struct ip_mc_list *im;
-};
-
-struct fib_config {
-	u8 fc_dst_len;
-	u8 fc_tos;
-	u8 fc_protocol;
-	u8 fc_scope;
-	u8 fc_type;
-	u8 fc_gw_family;
-	u32 fc_table;
-	__be32 fc_dst;
-	union {
-		__be32 fc_gw4;
-		struct in6_addr fc_gw6;
-	};
-	int fc_oif;
-	u32 fc_flags;
-	u32 fc_priority;
-	__be32 fc_prefsrc;
-	u32 fc_nh_id;
-	struct nlattr *fc_mx;
-	struct rtnexthop *fc_mp;
-	int fc_mx_len;
-	int fc_mp_len;
-	u32 fc_flow;
-	u32 fc_nlflags;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-};
-
-struct fib_result_nl {
-	__be32 fl_addr;
-	u32 fl_mark;
-	unsigned char fl_tos;
-	unsigned char fl_scope;
-	unsigned char tb_id_in;
-	unsigned char tb_id;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	int err;
-};
-
-struct fib_dump_filter {
-	u32 table_id;
-	bool filter_set;
-	bool dump_routes;
-	bool dump_exceptions;
-	unsigned char protocol;
-	unsigned char rt_type;
-	unsigned int flags;
-	struct net_device *dev;
-};
-
 struct fib_nh_notifier_info {
 	struct fib_notifier_info info;
 	struct fib_nh *fib_nh;
 };
 
-struct fib_entry_notifier_info {
-	struct fib_notifier_info info;
-	u32 dst;
-	int dst_len;
-	struct fib_info *fi;
-	u8 tos;
-	u8 type;
-	u32 tb_id;
-};
-
-typedef unsigned int t_key;
-
-struct key_vector {
-	t_key key;
-	unsigned char pos;
-	unsigned char bits;
-	unsigned char slen;
-	union {
-		struct hlist_head leaf;
-		struct key_vector *tnode[0];
-	};
-};
-
-struct tnode {
-	struct callback_head rcu;
-	t_key empty_children;
-	t_key full_children;
-	struct key_vector *parent;
-	struct key_vector kv[1];
-};
-
-struct trie_use_stats {
-	unsigned int gets;
-	unsigned int backtrack;
-	unsigned int semantic_match_passed;
-	unsigned int semantic_match_miss;
-	unsigned int null_node_hit;
-	unsigned int resize_node_skipped;
-};
-
-struct trie_stat {
-	unsigned int totdepth;
-	unsigned int maxdepth;
-	unsigned int tnodes;
-	unsigned int leaves;
-	unsigned int nullpointers;
-	unsigned int prefixes;
-	unsigned int nodesizes[32];
-};
-
-struct trie {
-	struct key_vector kv[1];
-	struct trie_use_stats *stats;
-};
-
-struct fib_trie_iter {
-	struct seq_net_private p;
-	struct fib_table *tb;
-	struct key_vector *tnode;
-	unsigned int index;
-	unsigned int depth;
-};
-
-struct fib_route_iter {
-	struct seq_net_private p;
-	struct fib_table *main_tb;
-	struct key_vector *tnode;
-	loff_t pos;
-	t_key key;
-};
-
-struct ipfrag_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	};
-	struct sk_buff *next_frag;
-	int frag_run_len;
-};
-
-struct icmpv6_echo {
-	__be16 identifier;
-	__be16 sequence;
-};
-
-struct icmpv6_nd_advt {
-	__u32 reserved: 5;
-	__u32 override: 1;
-	__u32 solicited: 1;
-	__u32 router: 1;
-	__u32 reserved2: 24;
-};
-
-struct icmpv6_nd_ra {
-	__u8 hop_limit;
-	__u8 reserved: 3;
-	__u8 router_pref: 2;
-	__u8 home_agent: 1;
-	__u8 other: 1;
-	__u8 managed: 1;
-	__be16 rt_lifetime;
-};
-
-struct icmp6hdr {
-	__u8 icmp6_type;
-	__u8 icmp6_code;
-	__sum16 icmp6_cksum;
-	union {
-		__be32 un_data32[1];
-		__be16 un_data16[2];
-		__u8 un_data8[4];
-		struct icmpv6_echo u_echo;
-		struct icmpv6_nd_advt u_nd_advt;
-		struct icmpv6_nd_ra u_nd_ra;
-	} icmp6_dataun;
-};
-
-struct ping_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	sa_family_t family;
-};
-
-struct pingfakehdr {
-	struct icmphdr icmph;
-	struct msghdr *msg;
-	sa_family_t family;
-	__wsum wcheck;
-};
-
 struct ping_table {
 	struct hlist_nulls_head hash[64];
-	rwlock_t lock;
+	spinlock_t lock;
 };
 
-enum lwtunnel_ip_t {
-	LWTUNNEL_IP_UNSPEC = 0,
-	LWTUNNEL_IP_ID = 1,
-	LWTUNNEL_IP_DST = 2,
-	LWTUNNEL_IP_SRC = 3,
-	LWTUNNEL_IP_TTL = 4,
-	LWTUNNEL_IP_TOS = 5,
-	LWTUNNEL_IP_FLAGS = 6,
-	LWTUNNEL_IP_PAD = 7,
-	LWTUNNEL_IP_OPTS = 8,
-	__LWTUNNEL_IP_MAX = 9,
-};
-
-enum lwtunnel_ip6_t {
-	LWTUNNEL_IP6_UNSPEC = 0,
-	LWTUNNEL_IP6_ID = 1,
-	LWTUNNEL_IP6_DST = 2,
-	LWTUNNEL_IP6_SRC = 3,
-	LWTUNNEL_IP6_HOPLIMIT = 4,
-	LWTUNNEL_IP6_TC = 5,
-	LWTUNNEL_IP6_FLAGS = 6,
-	LWTUNNEL_IP6_PAD = 7,
-	LWTUNNEL_IP6_OPTS = 8,
-	__LWTUNNEL_IP6_MAX = 9,
-};
-
-enum {
-	LWTUNNEL_IP_OPTS_UNSPEC = 0,
-	LWTUNNEL_IP_OPTS_GENEVE = 1,
-	LWTUNNEL_IP_OPTS_VXLAN = 2,
-	LWTUNNEL_IP_OPTS_ERSPAN = 3,
-	__LWTUNNEL_IP_OPTS_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
-	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
-	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
-	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
-	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
-	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
-	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
-	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
-	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
-};
-
-struct ip6_tnl_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-};
-
-struct geneve_opt {
-	__be16 opt_class;
-	u8 type;
-	u8 length: 5;
-	u8 r3: 1;
-	u8 r2: 1;
-	u8 r1: 1;
-	u8 opt_data[0];
-};
-
-struct vxlan_metadata {
-	u32 gbp;
-};
-
-struct erspan_md2 {
-	__be32 timestamp;
-	__be16 sgt;
-	__u8 hwid_upper: 2;
-	__u8 ft: 5;
-	__u8 p: 1;
-	__u8 o: 1;
-	__u8 gra: 2;
-	__u8 dir: 1;
-	__u8 hwid: 4;
-};
-
-struct erspan_metadata {
-	int version;
-	union {
-		__be32 index;
-		struct erspan_md2 md2;
-	} u;
-};
-
-struct nhmsg {
-	unsigned char nh_family;
-	unsigned char nh_scope;
-	unsigned char nh_protocol;
-	unsigned char resvd;
-	unsigned int nh_flags;
-};
-
-struct nexthop_grp {
-	__u32 id;
-	__u8 weight;
-	__u8 resvd1;
-	__u16 resvd2;
-};
-
-enum {
-	NEXTHOP_GRP_TYPE_MPATH = 0,
-	__NEXTHOP_GRP_TYPE_MAX = 1,
-};
-
-enum {
-	NHA_UNSPEC = 0,
-	NHA_ID = 1,
-	NHA_GROUP = 2,
-	NHA_GROUP_TYPE = 3,
-	NHA_BLACKHOLE = 4,
-	NHA_OIF = 5,
-	NHA_GATEWAY = 6,
-	NHA_ENCAP_TYPE = 7,
-	NHA_ENCAP = 8,
-	NHA_GROUPS = 9,
-	NHA_MASTER = 10,
-	NHA_FDB = 11,
-	__NHA_MAX = 12,
-};
-
-struct nh_config {
-	u32 nh_id;
-	u8 nh_family;
-	u8 nh_protocol;
-	u8 nh_blackhole;
-	u8 nh_fdb;
-	u32 nh_flags;
-	int nh_ifindex;
-	struct net_device *dev;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} gw;
-	struct nlattr *nh_grp;
-	u16 nh_grp_type;
-	struct nlattr *nh_encap;
-	u16 nh_encap_type;
-	u32 nlflags;
-	struct nl_info nlinfo;
-};
-
-enum nexthop_event_type {
-	NEXTHOP_EVENT_DEL = 0,
-};
-
-struct bpfilter_umh_ops {
-	struct umd_info info;
-	struct mutex lock;
-	int (*sockopt)(struct sock *, int, sockptr_t, unsigned int, bool);
-	int (*start)();
-};
-
-struct inet6_protocol {
-	void (*early_demux)(struct sk_buff *);
-	void (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	unsigned int flags;
-};
-
-struct snmp_mib {
-	const char *name;
-	int entry;
-};
-
-struct fib4_rule {
-	struct fib_rule common;
-	u8 dst_len;
-	u8 src_len;
-	u8 tos;
-	__be32 src;
-	__be32 srcmask;
-	__be32 dst;
-	__be32 dstmask;
-	u32 tclassid;
-};
-
-enum {
-	PIM_TYPE_HELLO = 0,
-	PIM_TYPE_REGISTER = 1,
-	PIM_TYPE_REGISTER_STOP = 2,
-	PIM_TYPE_JOIN_PRUNE = 3,
-	PIM_TYPE_BOOTSTRAP = 4,
-	PIM_TYPE_ASSERT = 5,
-	PIM_TYPE_GRAFT = 6,
-	PIM_TYPE_GRAFT_ACK = 7,
-	PIM_TYPE_CANDIDATE_RP_ADV = 8,
-};
-
-struct pimreghdr {
-	__u8 type;
-	__u8 reserved;
-	__be16 csum;
-	__be32 flags;
+struct ip_tunnel_net {
+	struct net_device *fb_tunnel_dev;
+	struct rtnl_link_ops *rtnl_link_ops;
+	struct hlist_head tunnels[128];
+	struct ip_tunnel *collect_md_tun;
+	int type;
 };
 
 typedef short unsigned int vifi_t;
@@ -105560,103 +117276,6 @@
 	__IPMRA_CREPORT_MAX = 7,
 };
 
-struct vif_device {
-	struct net_device *dev;
-	long unsigned int bytes_in;
-	long unsigned int bytes_out;
-	long unsigned int pkt_in;
-	long unsigned int pkt_out;
-	long unsigned int rate_limit;
-	unsigned char threshold;
-	short unsigned int flags;
-	int link;
-	struct netdev_phys_item_id dev_parent_id;
-	__be32 local;
-	__be32 remote;
-};
-
-struct vif_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct net_device *dev;
-	short unsigned int vif_index;
-	short unsigned int vif_flags;
-	u32 tb_id;
-};
-
-enum {
-	MFC_STATIC = 1,
-	MFC_OFFLOAD = 2,
-};
-
-struct mr_mfc {
-	struct rhlist_head mnode;
-	short unsigned int mfc_parent;
-	int mfc_flags;
-	union {
-		struct {
-			long unsigned int expires;
-			struct sk_buff_head unresolved;
-		} unres;
-		struct {
-			long unsigned int last_assert;
-			int minvif;
-			int maxvif;
-			long unsigned int bytes;
-			long unsigned int pkt;
-			long unsigned int wrong_if;
-			long unsigned int lastuse;
-			unsigned char ttls[32];
-			refcount_t refcount;
-		} res;
-	} mfc_un;
-	struct list_head list;
-	struct callback_head rcu;
-	void (*free)(struct callback_head *);
-};
-
-struct mfc_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct mr_mfc *mfc;
-	u32 tb_id;
-};
-
-struct mr_table_ops {
-	const struct rhashtable_params *rht_params;
-	void *cmparg_any;
-};
-
-struct mr_table {
-	struct list_head list;
-	possible_net_t net;
-	struct mr_table_ops ops;
-	u32 id;
-	struct sock *mroute_sk;
-	struct timer_list ipmr_expire_timer;
-	struct list_head mfc_unres_queue;
-	struct vif_device vif_table[32];
-	struct rhltable mfc_hash;
-	struct list_head mfc_cache_list;
-	int maxvif;
-	atomic_t cache_resolve_queue_len;
-	bool mroute_do_assert;
-	bool mroute_do_pim;
-	bool mroute_do_wrvifwhole;
-	int mroute_reg_vif_num;
-};
-
-struct mr_vif_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	int ct;
-};
-
-struct mr_mfc_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	struct list_head *cache;
-	spinlock_t *lock;
-};
-
 struct mfc_cache_cmp_arg {
 	__be32 mfc_mcastgrp;
 	__be32 mfc_origin;
@@ -105673,70 +117292,6 @@
 	};
 };
 
-struct ipmr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_vif_req {
-	vifi_t vifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct rta_mfc_stats {
-	__u64 mfcs_packets;
-	__u64 mfcs_bytes;
-	__u64 mfcs_wrong_if;
-};
-
-enum rpc_display_format_t {
-	RPC_DISPLAY_ADDR = 0,
-	RPC_DISPLAY_PORT = 1,
-	RPC_DISPLAY_PROTO = 2,
-	RPC_DISPLAY_HEX_ADDR = 3,
-	RPC_DISPLAY_HEX_PORT = 4,
-	RPC_DISPLAY_NETID = 5,
-	RPC_DISPLAY_MAX = 6,
-};
-
-struct ic_device {
-	struct ic_device *next;
-	struct net_device *dev;
-	short unsigned int flags;
-	short int able;
-	__be32 xid;
-};
-
-struct bootp_pkt {
-	struct iphdr iph;
-	struct udphdr udph;
-	u8 op;
-	u8 htype;
-	u8 hlen;
-	u8 hops;
-	__be32 xid;
-	__be16 secs;
-	__be16 flags;
-	__be32 client_ip;
-	__be32 your_ip;
-	__be32 server_ip;
-	__be32 relay_ip;
-	u8 hw_addr[16];
-	u8 serv_name[64];
-	u8 boot_file[128];
-	u8 exten[312];
-};
-
 struct bictcp {
 	u32 cnt;
 	u32 last_max_cwnd;
@@ -105757,905 +117312,24 @@
 	u32 curr_rtt;
 };
 
-struct tls_rec {
-	struct list_head list;
-	int tx_ready;
-	int tx_flags;
-	struct sk_msg msg_plaintext;
-	struct sk_msg msg_encrypted;
-	struct scatterlist sg_aead_in[2];
-	struct scatterlist sg_aead_out[2];
-	char content_type;
-	struct scatterlist sg_content_type;
-	char aad_space[13];
-	u8 iv_data[16];
-	long: 24;
-	long: 64;
-	long: 64;
-	struct aead_request aead_req;
-	u8 aead_req_ctx[0];
-};
-
-struct tx_work {
-	struct delayed_work work;
-	struct sock *sk;
-};
-
-struct tls_sw_context_tx {
-	struct crypto_aead *aead_send;
-	struct crypto_wait async_wait;
-	struct tx_work tx_work;
-	struct tls_rec *open_rec;
-	struct list_head tx_list;
-	atomic_t encrypt_pending;
-	spinlock_t encrypt_compl_lock;
-	int async_notify;
-	u8 async_capable: 1;
-	long unsigned int tx_bitmask;
-};
-
-enum {
-	TCP_BPF_IPV4 = 0,
-	TCP_BPF_IPV6 = 1,
-	TCP_BPF_NUM_PROTS = 2,
-};
-
-enum {
-	TCP_BPF_BASE = 0,
-	TCP_BPF_TX = 1,
-	TCP_BPF_NUM_CFGS = 2,
-};
-
-enum {
-	UDP_BPF_IPV4 = 0,
-	UDP_BPF_IPV6 = 1,
-	UDP_BPF_NUM_PROTS = 2,
-};
-
-struct cipso_v4_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct cipso_v4_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-struct xfrm_policy_afinfo {
-	struct dst_ops *dst_ops;
-	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
-	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
-	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
-	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
-};
-
-struct xfrm_state_afinfo {
-	u8 family;
-	u8 proto;
-	const struct xfrm_type_offload *type_offload_esp;
-	const struct xfrm_type *type_esp;
-	const struct xfrm_type *type_ipip;
-	const struct xfrm_type *type_ipip6;
-	const struct xfrm_type *type_comp;
-	const struct xfrm_type *type_ah;
-	const struct xfrm_type *type_routing;
-	const struct xfrm_type *type_dstopts;
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*transport_finish)(struct sk_buff *, int);
-	void (*local_error)(struct sk_buff *, u32);
-};
-
-struct ip_tunnel;
-
-struct ip6_tnl;
-
-struct xfrm_tunnel_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	union {
-		struct ip_tunnel *ip4;
-		struct ip6_tnl *ip6;
-	} tunnel;
-};
-
-struct xfrm_mode_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	__be16 id;
-	__be16 frag_off;
-	u8 ihl;
-	u8 tos;
-	u8 ttl;
-	u8 protocol;
-	u8 optlen;
-	u8 flow_lbl[3];
-};
-
-struct xfrm_spi_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	unsigned int daddroff;
-	unsigned int family;
-	__be32 seq;
-};
-
-struct xfrm_input_afinfo {
-	u8 family;
-	bool is_ipip;
-	int (*callback)(struct sk_buff *, u8, int);
-};
-
-struct xfrm4_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, u32);
-	struct xfrm4_protocol *next;
-	int priority;
-};
-
 typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
 
-struct seqcount_mutex {
-	seqcount_t seqcount;
+struct xfrm_algo_list {
+	struct xfrm_algo_desc *algs;
+	int entries;
+	u32 type;
+	u32 mask;
 };
 
-typedef struct seqcount_mutex seqcount_mutex_t;
-
-enum {
-	XFRM_STATE_VOID = 0,
-	XFRM_STATE_ACQ = 1,
-	XFRM_STATE_VALID = 2,
-	XFRM_STATE_ERROR = 3,
-	XFRM_STATE_EXPIRED = 4,
-	XFRM_STATE_DEAD = 5,
+struct xfrm_aead_name {
+	const char *name;
+	int icvbits;
 };
 
-struct xfrm_if;
-
-struct xfrm_if_cb {
-	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
-};
-
-struct xfrm_if_parms {
-	int link;
-	u32 if_id;
-};
-
-struct xfrm_if {
-	struct xfrm_if *next;
-	struct net_device *dev;
-	struct net *net;
-	struct xfrm_if_parms p;
-	struct gro_cells gro_cells;
-};
-
-struct xfrm_policy_walk {
-	struct xfrm_policy_walk_entry walk;
-	u8 type;
-	u32 seq;
-};
-
-struct xfrmk_spdinfo {
-	u32 incnt;
-	u32 outcnt;
-	u32 fwdcnt;
-	u32 inscnt;
-	u32 outscnt;
-	u32 fwdscnt;
-	u32 spdhcnt;
-	u32 spdhmcnt;
-};
-
-struct ip6_mh {
-	__u8 ip6mh_proto;
-	__u8 ip6mh_hdrlen;
-	__u8 ip6mh_type;
-	__u8 ip6mh_reserved;
-	__u16 ip6mh_cksum;
-	__u8 data[0];
-};
-
-struct xfrm_flo {
-	struct dst_entry *dst_orig;
-	u8 flags;
-};
-
-struct xfrm_pol_inexact_node {
-	struct rb_node node;
-	union {
-		xfrm_address_t addr;
-		struct callback_head rcu;
-	};
-	u8 prefixlen;
-	struct rb_root root;
-	struct hlist_head hhead;
-};
-
-struct xfrm_pol_inexact_key {
-	possible_net_t net;
-	u32 if_id;
-	u16 family;
-	u8 dir;
-	u8 type;
-};
-
-struct xfrm_pol_inexact_bin {
-	struct xfrm_pol_inexact_key k;
-	struct rhash_head head;
-	struct hlist_head hhead;
-	seqcount_spinlock_t count;
-	struct rb_root root_d;
-	struct rb_root root_s;
-	struct list_head inexact_bins;
-	struct callback_head rcu;
-};
-
-enum xfrm_pol_inexact_candidate_type {
-	XFRM_POL_CAND_BOTH = 0,
-	XFRM_POL_CAND_SADDR = 1,
-	XFRM_POL_CAND_DADDR = 2,
-	XFRM_POL_CAND_ANY = 3,
-	XFRM_POL_CAND_MAX = 4,
-};
-
-struct xfrm_pol_inexact_candidates {
-	struct hlist_head *res[4];
-};
-
-enum xfrm_ae_ftype_t {
-	XFRM_AE_UNSPEC = 0,
-	XFRM_AE_RTHR = 1,
-	XFRM_AE_RVAL = 2,
-	XFRM_AE_LVAL = 4,
-	XFRM_AE_ETHR = 8,
-	XFRM_AE_CR = 16,
-	XFRM_AE_CE = 32,
-	XFRM_AE_CU = 64,
-	__XFRM_AE_MAX = 65,
-};
-
-enum xfrm_nlgroups {
-	XFRMNLGRP_NONE = 0,
-	XFRMNLGRP_ACQUIRE = 1,
-	XFRMNLGRP_EXPIRE = 2,
-	XFRMNLGRP_SA = 3,
-	XFRMNLGRP_POLICY = 4,
-	XFRMNLGRP_AEVENTS = 5,
-	XFRMNLGRP_REPORT = 6,
-	XFRMNLGRP_MIGRATE = 7,
-	XFRMNLGRP_MAPPING = 8,
-	__XFRMNLGRP_MAX = 9,
-};
-
-enum {
-	XFRM_MODE_FLAG_TUNNEL = 1,
-};
-
-struct km_event {
-	union {
-		u32 hard;
-		u32 proto;
-		u32 byid;
-		u32 aevent;
-		u32 type;
-	} data;
-	u32 seq;
-	u32 portid;
-	u32 event;
-	struct net *net;
-};
-
-struct xfrm_kmaddress {
-	xfrm_address_t local;
-	xfrm_address_t remote;
-	u32 reserved;
-	u16 family;
-};
-
-struct xfrm_migrate {
-	xfrm_address_t old_daddr;
-	xfrm_address_t old_saddr;
-	xfrm_address_t new_daddr;
-	xfrm_address_t new_saddr;
-	u8 proto;
-	u8 mode;
-	u16 reserved;
-	u32 reqid;
-	u16 old_family;
-	u16 new_family;
-};
-
-struct xfrm_mgr {
-	struct list_head list;
-	int (*notify)(struct xfrm_state *, const struct km_event *);
-	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
-	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
-	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
-	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
-	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
-	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
-	bool (*is_alive)(const struct km_event *);
-};
-
-struct xfrmk_sadinfo {
-	u32 sadhcnt;
-	u32 sadhmcnt;
-	u32 sadcnt;
-};
-
-struct xfrm_translator {
-	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
-	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
-	int (*xlate_user_policy_sockptr)(u8 **, int);
-	struct module *owner;
-};
-
-struct ip_beet_phdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 padlen;
-	__u8 reserved;
-};
-
-struct ip_tunnel_6rd_parm {
-	struct in6_addr prefix;
-	__be32 relay_prefix;
-	u16 prefixlen;
-	u16 relay_prefixlen;
-};
-
-struct ip_tunnel_prl_entry;
-
-struct ip_tunnel {
-	struct ip_tunnel *next;
-	struct hlist_node hash_node;
-	struct net_device *dev;
-	struct net *net;
-	long unsigned int err_time;
-	int err_count;
-	u32 i_seqno;
-	u32 o_seqno;
-	int tun_hlen;
-	u32 index;
-	u8 erspan_ver;
-	u8 dir;
-	u16 hwid;
-	struct dst_cache dst_cache;
-	struct ip_tunnel_parm parms;
-	int mlink;
-	int encap_hlen;
-	int hlen;
-	struct ip_tunnel_encap encap;
-	struct ip_tunnel_6rd_parm ip6rd;
-	struct ip_tunnel_prl_entry *prl;
-	unsigned int prl_count;
-	unsigned int ip_tnl_net_id;
-	struct gro_cells gro_cells;
-	__u32 fwmark;
-	bool collect_md;
-	bool ignore_df;
-};
-
-struct __ip6_tnl_parm {
-	char name[16];
-	int link;
-	__u8 proto;
-	__u8 encap_limit;
-	__u8 hop_limit;
-	bool collect_md;
-	__be32 flowinfo;
-	__u32 flags;
-	struct in6_addr laddr;
-	struct in6_addr raddr;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	__u32 fwmark;
-	__u32 index;
-	__u8 erspan_ver;
-	__u8 dir;
-	__u16 hwid;
-};
-
-struct ip6_tnl {
-	struct ip6_tnl *next;
-	struct net_device *dev;
-	struct net *net;
-	struct __ip6_tnl_parm parms;
-	struct flowi fl;
-	struct dst_cache dst_cache;
-	struct gro_cells gro_cells;
-	int err_count;
-	long unsigned int err_time;
-	__u32 i_seqno;
-	__u32 o_seqno;
-	int hlen;
-	int tun_hlen;
-	int encap_hlen;
-	struct ip_tunnel_encap encap;
-	int mlink;
-};
-
-struct xfrm_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	union {
-		struct {
-			__u32 low;
-			__u32 hi;
-		} output;
-		struct {
-			__be32 low;
-			__be32 hi;
-		} input;
-	} seq;
-};
-
-struct ip_tunnel_prl_entry {
-	struct ip_tunnel_prl_entry *next;
-	__be32 addr;
-	u16 flags;
-	struct callback_head callback_head;
-};
-
-struct xfrm_trans_tasklet {
-	struct tasklet_struct tasklet;
-	struct sk_buff_head queue;
-};
-
-struct xfrm_trans_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	int (*finish)(struct net *, struct sock *, struct sk_buff *);
-	struct net *net;
-};
-
-struct xfrm_user_offload {
-	int ifindex;
-	__u8 flags;
-};
-
-struct espintcp_msg {
-	struct sk_buff *skb;
-	struct sk_msg skmsg;
-	int offset;
-	int len;
-};
-
-struct espintcp_ctx {
-	struct strparser strp;
-	struct sk_buff_head ike_queue;
-	struct sk_buff_head out_queue;
-	struct espintcp_msg partial;
-	void (*saved_data_ready)(struct sock *);
-	void (*saved_write_space)(struct sock *);
-	void (*saved_destruct)(struct sock *);
-	struct work_struct work;
-	bool tx_running;
-};
-
-struct unix_stream_read_state {
-	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
-	struct socket *socket;
-	struct msghdr *msg;
-	struct pipe_inode_info *pipe;
-	size_t size;
-	int flags;
-	unsigned int splice_flags;
-};
-
-struct ipv6_params {
-	__s32 disable_ipv6;
-	__s32 autoconf;
-};
-
-enum flowlabel_reflect {
-	FLOWLABEL_REFLECT_ESTABLISHED = 1,
-	FLOWLABEL_REFLECT_TCP_RESET = 2,
-	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
-};
-
-struct in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	__u32 rtmsg_type;
-	__u16 rtmsg_dst_len;
-	__u16 rtmsg_src_len;
-	__u32 rtmsg_metric;
-	long unsigned int rtmsg_info;
-	__u32 rtmsg_flags;
-	int rtmsg_ifindex;
-};
-
-struct compat_in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	u32 rtmsg_type;
-	u16 rtmsg_dst_len;
-	u16 rtmsg_src_len;
-	u32 rtmsg_metric;
-	u32 rtmsg_info;
-	u32 rtmsg_flags;
-	s32 rtmsg_ifindex;
-};
-
-struct ac6_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct ip6_fraglist_iter {
-	struct ipv6hdr *tmp_hdr;
-	struct sk_buff *frag;
-	int offset;
-	unsigned int hlen;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_frag_state {
-	u8 *prevhdr;
-	unsigned int hlen;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	int hroom;
-	int troom;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_ra_chain {
-	struct ip6_ra_chain *next;
-	struct sock *sk;
-	int sel;
-	void (*destructor)(struct sock *);
-};
-
-struct ipcm6_cookie {
-	struct sockcm_cookie sockc;
-	__s16 hlimit;
-	__s16 tclass;
-	__s8 dontfrag;
-	struct ipv6_txoptions *opt;
-	__u16 gso_size;
-};
-
-enum {
-	IFLA_INET6_UNSPEC = 0,
-	IFLA_INET6_FLAGS = 1,
-	IFLA_INET6_CONF = 2,
-	IFLA_INET6_STATS = 3,
-	IFLA_INET6_MCAST = 4,
-	IFLA_INET6_CACHEINFO = 5,
-	IFLA_INET6_ICMP6STATS = 6,
-	IFLA_INET6_TOKEN = 7,
-	IFLA_INET6_ADDR_GEN_MODE = 8,
-	__IFLA_INET6_MAX = 9,
-};
-
-enum in6_addr_gen_mode {
-	IN6_ADDR_GEN_MODE_EUI64 = 0,
-	IN6_ADDR_GEN_MODE_NONE = 1,
-	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
-	IN6_ADDR_GEN_MODE_RANDOM = 3,
-};
-
-struct ifla_cacheinfo {
-	__u32 max_reasm_len;
-	__u32 tstamp;
-	__u32 reachable_time;
-	__u32 retrans_time;
-};
-
-struct wpan_phy;
-
-struct wpan_dev_header_ops;
-
-struct wpan_dev {
-	struct wpan_phy *wpan_phy;
-	int iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	const struct wpan_dev_header_ops *header_ops;
-	struct net_device *lowpan_dev;
-	u32 identifier;
-	__le16 pan_id;
-	__le16 short_addr;
-	__le64 extended_addr;
-	atomic_t bsn;
-	atomic_t dsn;
-	u8 min_be;
-	u8 max_be;
-	u8 csma_retries;
-	s8 frame_retries;
-	bool lbt;
-	bool promiscuous_mode;
-	bool ackreq;
-};
-
-struct prefixmsg {
-	unsigned char prefix_family;
-	unsigned char prefix_pad1;
-	short unsigned int prefix_pad2;
-	int prefix_ifindex;
-	unsigned char prefix_type;
-	unsigned char prefix_len;
-	unsigned char prefix_flags;
-	unsigned char prefix_pad3;
-};
-
-enum {
-	PREFIX_UNSPEC = 0,
-	PREFIX_ADDRESS = 1,
-	PREFIX_CACHEINFO = 2,
-	__PREFIX_MAX = 3,
-};
-
-struct prefix_cacheinfo {
-	__u32 preferred_time;
-	__u32 valid_time;
-};
-
-struct in6_ifreq {
-	struct in6_addr ifr6_addr;
-	__u32 ifr6_prefixlen;
-	int ifr6_ifindex;
-};
-
-enum {
-	DEVCONF_FORWARDING = 0,
-	DEVCONF_HOPLIMIT = 1,
-	DEVCONF_MTU6 = 2,
-	DEVCONF_ACCEPT_RA = 3,
-	DEVCONF_ACCEPT_REDIRECTS = 4,
-	DEVCONF_AUTOCONF = 5,
-	DEVCONF_DAD_TRANSMITS = 6,
-	DEVCONF_RTR_SOLICITS = 7,
-	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
-	DEVCONF_RTR_SOLICIT_DELAY = 9,
-	DEVCONF_USE_TEMPADDR = 10,
-	DEVCONF_TEMP_VALID_LFT = 11,
-	DEVCONF_TEMP_PREFERED_LFT = 12,
-	DEVCONF_REGEN_MAX_RETRY = 13,
-	DEVCONF_MAX_DESYNC_FACTOR = 14,
-	DEVCONF_MAX_ADDRESSES = 15,
-	DEVCONF_FORCE_MLD_VERSION = 16,
-	DEVCONF_ACCEPT_RA_DEFRTR = 17,
-	DEVCONF_ACCEPT_RA_PINFO = 18,
-	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
-	DEVCONF_RTR_PROBE_INTERVAL = 20,
-	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
-	DEVCONF_PROXY_NDP = 22,
-	DEVCONF_OPTIMISTIC_DAD = 23,
-	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
-	DEVCONF_MC_FORWARDING = 25,
-	DEVCONF_DISABLE_IPV6 = 26,
-	DEVCONF_ACCEPT_DAD = 27,
-	DEVCONF_FORCE_TLLAO = 28,
-	DEVCONF_NDISC_NOTIFY = 29,
-	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
-	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
-	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
-	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
-	DEVCONF_USE_OPTIMISTIC = 34,
-	DEVCONF_ACCEPT_RA_MTU = 35,
-	DEVCONF_STABLE_SECRET = 36,
-	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
-	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
-	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
-	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
-	DEVCONF_DROP_UNSOLICITED_NA = 41,
-	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
-	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
-	DEVCONF_SEG6_ENABLED = 44,
-	DEVCONF_SEG6_REQUIRE_HMAC = 45,
-	DEVCONF_ENHANCED_DAD = 46,
-	DEVCONF_ADDR_GEN_MODE = 47,
-	DEVCONF_DISABLE_POLICY = 48,
-	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
-	DEVCONF_NDISC_TCLASS = 50,
-	DEVCONF_RPL_SEG_ENABLED = 51,
-	DEVCONF_MAX = 52,
-};
-
-enum {
-	INET6_IFADDR_STATE_PREDAD = 0,
-	INET6_IFADDR_STATE_DAD = 1,
-	INET6_IFADDR_STATE_POSTDAD = 2,
-	INET6_IFADDR_STATE_ERRDAD = 3,
-	INET6_IFADDR_STATE_DEAD = 4,
-};
-
-enum nl802154_cca_modes {
-	__NL802154_CCA_INVALID = 0,
-	NL802154_CCA_ENERGY = 1,
-	NL802154_CCA_CARRIER = 2,
-	NL802154_CCA_ENERGY_CARRIER = 3,
-	NL802154_CCA_ALOHA = 4,
-	NL802154_CCA_UWB_SHR = 5,
-	NL802154_CCA_UWB_MULTIPLEXED = 6,
-	__NL802154_CCA_ATTR_AFTER_LAST = 7,
-	NL802154_CCA_ATTR_MAX = 6,
-};
-
-enum nl802154_cca_opts {
-	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
-	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
-	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
-	NL802154_CCA_OPT_ATTR_MAX = 1,
-};
-
-enum nl802154_supported_bool_states {
-	NL802154_SUPPORTED_BOOL_FALSE = 0,
-	NL802154_SUPPORTED_BOOL_TRUE = 1,
-	__NL802154_SUPPORTED_BOOL_INVALD = 2,
-	NL802154_SUPPORTED_BOOL_BOTH = 3,
-	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
-	NL802154_SUPPORTED_BOOL_MAX = 3,
-};
-
-struct wpan_phy_supported {
-	u32 channels[32];
-	u32 cca_modes;
-	u32 cca_opts;
-	u32 iftypes;
-	enum nl802154_supported_bool_states lbt;
-	u8 min_minbe;
-	u8 max_minbe;
-	u8 min_maxbe;
-	u8 max_maxbe;
-	u8 min_csma_backoffs;
-	u8 max_csma_backoffs;
-	s8 min_frame_retries;
-	s8 max_frame_retries;
-	size_t tx_powers_size;
-	size_t cca_ed_levels_size;
-	const s32 *tx_powers;
-	const s32 *cca_ed_levels;
-};
-
-struct wpan_phy_cca {
-	enum nl802154_cca_modes mode;
-	enum nl802154_cca_opts opt;
-};
-
-struct wpan_phy {
-	const void *privid;
-	u32 flags;
-	u8 current_channel;
-	u8 current_page;
-	struct wpan_phy_supported supported;
-	s32 transmit_power;
-	struct wpan_phy_cca cca;
-	__le64 perm_extended_addr;
-	s32 cca_ed_level;
-	u8 symbol_duration;
-	u16 lifs_period;
-	u16 sifs_period;
-	struct device dev;
-	possible_net_t _net;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct ieee802154_addr {
-	u8 mode;
-	__le16 pan_id;
-	union {
-		__le16 short_addr;
-		__le64 extended_addr;
-	};
-};
-
-struct wpan_dev_header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
-};
-
-union fwnet_hwaddr {
-	u8 u[16];
-	struct {
-		__be64 uniq_id;
-		u8 max_rec;
-		u8 sspd;
-		__be16 fifo_hi;
-		__be32 fifo_lo;
-	} uc;
-};
-
-struct in6_validator_info {
-	struct in6_addr i6vi_addr;
-	struct inet6_dev *i6vi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct ifa6_config {
-	const struct in6_addr *pfx;
-	unsigned int plen;
-	const struct in6_addr *peer_pfx;
-	u32 rt_priority;
-	u32 ifa_flags;
-	u32 preferred_lft;
-	u32 valid_lft;
-	u16 scope;
-};
-
-enum cleanup_prefix_rt_t {
-	CLEANUP_PREFIX_RT_NOP = 0,
-	CLEANUP_PREFIX_RT_DEL = 1,
-	CLEANUP_PREFIX_RT_EXPIRE = 2,
-};
-
-enum {
-	IPV6_SADDR_RULE_INIT = 0,
-	IPV6_SADDR_RULE_LOCAL = 1,
-	IPV6_SADDR_RULE_SCOPE = 2,
-	IPV6_SADDR_RULE_PREFERRED = 3,
-	IPV6_SADDR_RULE_OIF = 4,
-	IPV6_SADDR_RULE_LABEL = 5,
-	IPV6_SADDR_RULE_PRIVACY = 6,
-	IPV6_SADDR_RULE_ORCHID = 7,
-	IPV6_SADDR_RULE_PREFIX = 8,
-	IPV6_SADDR_RULE_MAX = 9,
-};
-
-struct ipv6_saddr_score {
-	int rule;
-	int addr_type;
-	struct inet6_ifaddr *ifa;
-	long unsigned int scorebits[1];
-	int scopedist;
-	int matchlen;
-};
-
-struct ipv6_saddr_dst {
-	const struct in6_addr *addr;
-	int ifindex;
-	int scope;
-	int label;
-	unsigned int prefs;
-};
-
-struct if6_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	int offset;
-};
-
-enum addr_type_t {
-	UNICAST_ADDR = 0,
-	MULTICAST_ADDR = 1,
-	ANYCAST_ADDR = 2,
-};
-
-struct inet6_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-	enum addr_type_t type;
-};
-
-enum {
-	DAD_PROCESS = 0,
-	DAD_BEGIN = 1,
-	DAD_ABORT = 2,
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
 };
 
 struct ifaddrlblmsg {
@@ -106689,173 +117363,6 @@
 	u32 label;
 };
 
-struct rd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	struct in6_addr dest;
-	__u8 opt[0];
-};
-
-struct fib6_gc_args {
-	int timeout;
-	int more;
-};
-
-struct rt6_exception {
-	struct hlist_node hlist;
-	struct rt6_info *rt6i;
-	long unsigned int stamp;
-	struct callback_head rcu;
-};
-
-struct route_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved_l: 3;
-	__u8 route_pref: 2;
-	__u8 reserved_h: 3;
-	__be32 lifetime;
-	__u8 prefix[0];
-};
-
-struct rt6_rtnl_dump_arg {
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct net *net;
-	struct fib_dump_filter filter;
-};
-
-struct netevent_redirect {
-	struct dst_entry *old;
-	struct dst_entry *new;
-	struct neighbour *neigh;
-	const void *daddr;
-};
-
-struct trace_event_raw_fib6_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[16];
-	__u8 dst[16];
-	u16 sport;
-	u16 dport;
-	u8 proto;
-	u8 rt_type;
-	u32 __data_loc_name;
-	__u8 gw[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib6_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
-
-enum rt6_nud_state {
-	RT6_NUD_FAIL_HARD = 4294967293,
-	RT6_NUD_FAIL_PROBE = 4294967294,
-	RT6_NUD_FAIL_DO_RR = 4294967295,
-	RT6_NUD_SUCCEED = 1,
-};
-
-struct fib6_nh_dm_arg {
-	struct net *net;
-	const struct in6_addr *saddr;
-	int oif;
-	int flags;
-	struct fib6_nh *nh;
-};
-
-struct __rt6_probe_work {
-	struct work_struct work;
-	struct in6_addr target;
-	struct net_device *dev;
-};
-
-struct fib6_nh_frl_arg {
-	u32 flags;
-	int oif;
-	int strict;
-	int *mpri;
-	bool *do_rr;
-	struct fib6_nh *nh;
-};
-
-struct fib6_nh_excptn_arg {
-	struct rt6_info *rt;
-	int plen;
-};
-
-struct fib6_nh_match_arg {
-	const struct net_device *dev;
-	const struct in6_addr *gw;
-	struct fib6_nh *match;
-};
-
-struct fib6_nh_age_excptn_arg {
-	struct fib6_gc_args *gc_args;
-	long unsigned int now;
-};
-
-struct fib6_nh_rd_arg {
-	struct fib6_result *res;
-	struct flowi6 *fl6;
-	const struct in6_addr *gw;
-	struct rt6_info **ret;
-};
-
-struct ip6rd_flowi {
-	struct flowi6 fl6;
-	struct in6_addr gateway;
-};
-
-struct fib6_nh_del_cached_rt_arg {
-	struct fib6_config *cfg;
-	struct fib6_info *f6i;
-};
-
-struct arg_dev_net_ip {
-	struct net_device *dev;
-	struct net *net;
-	struct in6_addr *addr;
-};
-
-struct arg_netdev_event {
-	const struct net_device *dev;
-	union {
-		unsigned char nh_flags;
-		long unsigned int event;
-	};
-};
-
-struct rt6_mtu_change_arg {
-	struct net_device *dev;
-	unsigned int mtu;
-	struct fib6_info *f6i;
-};
-
-struct rt6_nh {
-	struct fib6_info *fib6_info;
-	struct fib6_config r_cfg;
-	struct list_head next;
-};
-
-struct fib6_nh_exception_dump_walker {
-	struct rt6_rtnl_dump_arg *dump;
-	struct fib6_info *rt;
-	unsigned int flags;
-	unsigned int skip;
-	unsigned int count;
-};
-
 enum fib6_walk_state {
 	FWS_S = 0,
 	FWS_L = 1,
@@ -106929,143 +117436,6 @@
 	const struct in6_addr *addr;
 };
 
-struct ipv6_mreq {
-	struct in6_addr ipv6mr_multiaddr;
-	int ipv6mr_ifindex;
-};
-
-struct in6_flowlabel_req {
-	struct in6_addr flr_dst;
-	__be32 flr_label;
-	__u8 flr_action;
-	__u8 flr_share;
-	__u16 flr_flags;
-	__u16 flr_expires;
-	__u16 flr_linger;
-	__u32 __flr_pad;
-};
-
-struct ip6_mtuinfo {
-	struct sockaddr_in6 ip6m_addr;
-	__u32 ip6m_mtu;
-};
-
-struct nduseroptmsg {
-	unsigned char nduseropt_family;
-	unsigned char nduseropt_pad1;
-	short unsigned int nduseropt_opts_len;
-	int nduseropt_ifindex;
-	__u8 nduseropt_icmp_type;
-	__u8 nduseropt_icmp_code;
-	short unsigned int nduseropt_pad2;
-	unsigned int nduseropt_pad3;
-};
-
-enum {
-	NDUSEROPT_UNSPEC = 0,
-	NDUSEROPT_SRCADDR = 1,
-	__NDUSEROPT_MAX = 2,
-};
-
-struct nd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	__u8 opt[0];
-};
-
-struct rs_msg {
-	struct icmp6hdr icmph;
-	__u8 opt[0];
-};
-
-struct ra_msg {
-	struct icmp6hdr icmph;
-	__be32 reachable_time;
-	__be32 retrans_timer;
-};
-
-struct icmp6_filter {
-	__u32 data[8];
-};
-
-struct raw6_sock {
-	struct inet_sock inet;
-	__u32 checksum;
-	__u32 offset;
-	struct icmp6_filter filter;
-	__u32 ip6mr_table;
-	struct ipv6_pinfo inet6;
-};
-
-typedef int mh_filter_t(struct sock *, struct sk_buff *);
-
-struct raw6_frag_vec {
-	struct msghdr *msg;
-	int hlen;
-	char c[4];
-};
-
-typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *);
-
-struct ipv6_destopt_hao {
-	__u8 type;
-	__u8 length;
-	struct in6_addr addr;
-} __attribute__((packed));
-
-struct icmpv6_msg {
-	struct sk_buff *skb;
-	int offset;
-	uint8_t type;
-};
-
-struct icmp6_err {
-	int err;
-	int fatal;
-};
-
-struct mld_msg {
-	struct icmp6hdr mld_hdr;
-	struct in6_addr mld_mca;
-};
-
-struct mld2_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	struct in6_addr grec_mca;
-	struct in6_addr grec_src[0];
-};
-
-struct mld2_report {
-	struct icmp6hdr mld2r_hdr;
-	struct mld2_grec mld2r_grec[0];
-};
-
-struct mld2_query {
-	struct icmp6hdr mld2q_hdr;
-	struct in6_addr mld2q_mca;
-	__u8 mld2q_qrv: 3;
-	__u8 mld2q_suppress: 1;
-	__u8 mld2q_resv2: 4;
-	__u8 mld2q_qqic;
-	__be16 mld2q_nsrcs;
-	struct in6_addr mld2q_srcs[0];
-};
-
-struct igmp6_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct igmp6_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *im;
-};
-
 enum ip6_defrag_users {
 	IP6_DEFRAG_LOCAL_DELIVER = 0,
 	IP6_DEFRAG_CONNTRACK_IN = 1,
@@ -107083,264 +117453,107 @@
 	u8 ecn;
 };
 
-struct tcp6_pseudohdr {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	__be32 len;
-	__be32 protocol;
-};
-
 struct rt0_hdr {
 	struct ipv6_rt_hdr rt_hdr;
 	__u32 reserved;
 	struct in6_addr addr[0];
 };
 
-struct ipv6_rpl_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
 	__u8 type;
-	__u8 segments_left;
-	__u32 cmpre: 4;
-	__u32 cmpri: 4;
-	__u32 reserved: 4;
-	__u32 pad: 4;
-	__u32 reserved1: 16;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
 	union {
-		struct in6_addr addr[0];
-		__u8 data[0];
-	} segments;
-};
-
-struct tlvtype_proc {
-	int type;
-	bool (*func)(struct sk_buff *, int);
-};
-
-struct ip6fl_iter_state {
-	struct seq_net_private p;
-	struct pid_namespace *pid_ns;
-	int bucket;
-};
-
-struct sr6_tlv {
-	__u8 type;
-	__u8 len;
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
 	__u8 data[0];
 };
 
-enum {
-	SEG6_ATTR_UNSPEC = 0,
-	SEG6_ATTR_DST = 1,
-	SEG6_ATTR_DSTLEN = 2,
-	SEG6_ATTR_HMACKEYID = 3,
-	SEG6_ATTR_SECRET = 4,
-	SEG6_ATTR_SECRETLEN = 5,
-	SEG6_ATTR_ALGID = 6,
-	SEG6_ATTR_HMACINFO = 7,
-	__SEG6_ATTR_MAX = 8,
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
 };
 
 enum {
-	SEG6_CMD_UNSPEC = 0,
-	SEG6_CMD_SETHMAC = 1,
-	SEG6_CMD_DUMPHMAC = 2,
-	SEG6_CMD_SET_TUNSRC = 3,
-	SEG6_CMD_GET_TUNSRC = 4,
-	__SEG6_CMD_MAX = 5,
-};
-
-typedef short unsigned int mifi_t;
-
-typedef __u32 if_mask;
-
-struct if_set {
-	if_mask ifs_bits[8];
-};
-
-struct mif6ctl {
-	mifi_t mif6c_mifi;
-	unsigned char mif6c_flags;
-	unsigned char vifc_threshold;
-	__u16 mif6c_pifi;
-	unsigned int vifc_rate_limit;
-};
-
-struct mf6cctl {
-	struct sockaddr_in6 mf6cc_origin;
-	struct sockaddr_in6 mf6cc_mcastgrp;
-	mifi_t mf6cc_parent;
-	struct if_set mf6cc_ifset;
-};
-
-struct sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_mif_req6 {
-	mifi_t mifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct mrt6msg {
-	__u8 im6_mbz;
-	__u8 im6_msgtype;
-	__u16 im6_mif;
-	__u32 im6_pad;
-	struct in6_addr im6_src;
-	struct in6_addr im6_dst;
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
 };
 
 enum {
-	IP6MRA_CREPORT_UNSPEC = 0,
-	IP6MRA_CREPORT_MSGTYPE = 1,
-	IP6MRA_CREPORT_MIF_ID = 2,
-	IP6MRA_CREPORT_SRC_ADDR = 3,
-	IP6MRA_CREPORT_DST_ADDR = 4,
-	IP6MRA_CREPORT_PKT = 5,
-	__IP6MRA_CREPORT_MAX = 6,
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
 };
 
-struct mfc6_cache_cmp_arg {
-	struct in6_addr mf6c_mcastgrp;
-	struct in6_addr mf6c_origin;
-};
-
-struct mfc6_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			struct in6_addr mf6c_mcastgrp;
-			struct in6_addr mf6c_origin;
-		};
-		struct mfc6_cache_cmp_arg cmparg;
-	};
-};
-
-struct ip6mr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_mif_req6 {
-	mifi_t mifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct xfrm6_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	struct xfrm6_protocol *next;
-	int priority;
-};
-
-struct br_input_skb_cb {
-	struct net_device *brdev;
-	u16 frag_max_size;
-	u8 igmp;
-	u8 mrouters_only: 1;
-	u8 proxyarp_replied: 1;
-	u8 src_port_isolated: 1;
-	u8 vlan_filtered: 1;
-	u8 br_netfilter_broute: 1;
-	int offload_fwd_mark;
-};
-
-struct nf_bridge_frag_data;
-
-typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
-
 struct fib6_rule {
 	struct fib_rule common;
 	struct rt6key src;
 	struct rt6key dst;
-	u8 tclass;
-};
-
-struct calipso_doi;
-
-struct netlbl_calipso_ops {
-	int (*doi_add)(struct calipso_doi *, struct netlbl_audit *);
-	void (*doi_free)(struct calipso_doi *);
-	int (*doi_remove)(u32, struct netlbl_audit *);
-	struct calipso_doi * (*doi_getdef)(u32);
-	void (*doi_putdef)(struct calipso_doi *);
-	int (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);
-	int (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);
-	int (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*sock_delattr)(struct sock *);
-	int (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*req_delattr)(struct request_sock *);
-	int (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);
-	unsigned char * (*skbuff_optptr)(const struct sk_buff *);
-	int (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	int (*skbuff_delattr)(struct sk_buff *);
-	void (*cache_invalidate)();
-	int (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);
-};
-
-struct calipso_doi {
-	u32 doi;
-	u32 type;
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct calipso_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct calipso_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-enum {
-	SEG6_IPTUNNEL_UNSPEC = 0,
-	SEG6_IPTUNNEL_SRH = 1,
-	__SEG6_IPTUNNEL_MAX = 2,
-};
-
-struct seg6_iptunnel_encap {
-	int mode;
-	struct ipv6_sr_hdr srh[0];
-};
-
-enum {
-	SEG6_IPTUN_MODE_INLINE = 0,
-	SEG6_IPTUN_MODE_ENCAP = 1,
-	SEG6_IPTUN_MODE_L2ENCAP = 2,
-};
-
-struct seg6_lwt {
-	struct dst_cache cache;
-	struct seg6_iptunnel_encap tuninfo[0];
+	dscp_t dscp;
 };
 
 enum {
@@ -107353,7 +117566,10 @@
 	SEG6_LOCAL_IIF = 6,
 	SEG6_LOCAL_OIF = 7,
 	SEG6_LOCAL_BPF = 8,
-	__SEG6_LOCAL_MAX = 9,
+	SEG6_LOCAL_VRFTABLE = 9,
+	SEG6_LOCAL_COUNTERS = 10,
+	SEG6_LOCAL_FLAVORS = 11,
+	__SEG6_LOCAL_MAX = 12,
 };
 
 enum {
@@ -107363,15 +117579,63 @@
 	__SEG6_LOCAL_BPF_PROG_MAX = 3,
 };
 
+enum {
+	SEG6_LOCAL_CNT_UNSPEC = 0,
+	SEG6_LOCAL_CNT_PAD = 1,
+	SEG6_LOCAL_CNT_PACKETS = 2,
+	SEG6_LOCAL_CNT_BYTES = 3,
+	SEG6_LOCAL_CNT_ERRORS = 4,
+	__SEG6_LOCAL_CNT_MAX = 5,
+};
+
+enum {
+	SEG6_LOCAL_FLV_UNSPEC = 0,
+	SEG6_LOCAL_FLV_OPERATION = 1,
+	SEG6_LOCAL_FLV_LCBLOCK_BITS = 2,
+	SEG6_LOCAL_FLV_LCNODE_FN_BITS = 3,
+	__SEG6_LOCAL_FLV_MAX = 4,
+};
+
+enum {
+	SEG6_LOCAL_FLV_OP_UNSPEC = 0,
+	SEG6_LOCAL_FLV_OP_PSP = 1,
+	SEG6_LOCAL_FLV_OP_USP = 2,
+	SEG6_LOCAL_FLV_OP_USD = 3,
+	SEG6_LOCAL_FLV_OP_NEXT_CSID = 4,
+	__SEG6_LOCAL_FLV_OP_MAX = 5,
+};
+
 struct seg6_local_lwt;
 
-struct seg6_action_desc {
-	int action;
-	long unsigned int attrs;
-	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
-	int static_headroom;
+struct seg6_local_lwtunnel_ops {
+	int (*build_state)(struct seg6_local_lwt *, const void *, struct netlink_ext_ack *);
+	void (*destroy_state)(struct seg6_local_lwt *);
 };
 
+enum seg6_end_dt_mode {
+	DT_INVALID_MODE = -22,
+	DT_LEGACY_MODE = 0,
+	DT_VRF_MODE = 1,
+};
+
+struct seg6_end_dt_info {
+	enum seg6_end_dt_mode mode;
+	struct net *net;
+	int vrf_ifindex;
+	int vrf_table;
+	u16 family;
+};
+
+struct seg6_flavors_info {
+	__u32 flv_ops;
+	__u8 lcblock_bits;
+	__u8 lcnode_func_bits;
+};
+
+struct pcpu_seg6_local_counters;
+
+struct seg6_action_desc;
+
 struct seg6_local_lwt {
 	int action;
 	struct ipv6_sr_hdr *srh;
@@ -107381,2420 +117645,411 @@
 	int iif;
 	int oif;
 	struct bpf_lwt_prog bpf;
+	struct seg6_end_dt_info dt_info;
+	struct seg6_flavors_info flv_info;
+	struct pcpu_seg6_local_counters *pcpu_counters;
 	int headroom;
 	struct seg6_action_desc *desc;
+	long unsigned int parsed_optattrs;
+};
+
+struct seg6_action_desc {
+	int action;
+	long unsigned int attrs;
+	long unsigned int optattrs;
+	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
+	int static_headroom;
+	struct seg6_local_lwtunnel_ops slwt_ops;
+};
+
+struct pcpu_seg6_local_counters {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	u64_stats_t errors;
+	struct u64_stats_sync syncp;
+};
+
+struct seg6_local_counters {
+	__u64 packets;
+	__u64 bytes;
+	__u64 errors;
 };
 
 struct seg6_action_param {
-	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
+	int (*parse)(struct nlattr **, struct seg6_local_lwt *, struct netlink_ext_ack *);
 	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
 	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
+	void (*destroy)(struct seg6_local_lwt *);
+};
+
+struct sadb_msg {
+	__u8 sadb_msg_version;
+	__u8 sadb_msg_type;
+	__u8 sadb_msg_errno;
+	__u8 sadb_msg_satype;
+	__u16 sadb_msg_len;
+	__u16 sadb_msg_reserved;
+	__u32 sadb_msg_seq;
+	__u32 sadb_msg_pid;
+};
+
+struct sadb_ext {
+	__u16 sadb_ext_len;
+	__u16 sadb_ext_type;
+};
+
+struct sadb_sa {
+	__u16 sadb_sa_len;
+	__u16 sadb_sa_exttype;
+	__be32 sadb_sa_spi;
+	__u8 sadb_sa_replay;
+	__u8 sadb_sa_state;
+	__u8 sadb_sa_auth;
+	__u8 sadb_sa_encrypt;
+	__u32 sadb_sa_flags;
+};
+
+struct sadb_lifetime {
+	__u16 sadb_lifetime_len;
+	__u16 sadb_lifetime_exttype;
+	__u32 sadb_lifetime_allocations;
+	__u64 sadb_lifetime_bytes;
+	__u64 sadb_lifetime_addtime;
+	__u64 sadb_lifetime_usetime;
+};
+
+struct sadb_address {
+	__u16 sadb_address_len;
+	__u16 sadb_address_exttype;
+	__u8 sadb_address_proto;
+	__u8 sadb_address_prefixlen;
+	__u16 sadb_address_reserved;
+};
+
+struct sadb_key {
+	__u16 sadb_key_len;
+	__u16 sadb_key_exttype;
+	__u16 sadb_key_bits;
+	__u16 sadb_key_reserved;
+};
+
+struct sadb_prop {
+	__u16 sadb_prop_len;
+	__u16 sadb_prop_exttype;
+	__u8 sadb_prop_replay;
+	__u8 sadb_prop_reserved[3];
+};
+
+struct sadb_comb {
+	__u8 sadb_comb_auth;
+	__u8 sadb_comb_encrypt;
+	__u16 sadb_comb_flags;
+	__u16 sadb_comb_auth_minbits;
+	__u16 sadb_comb_auth_maxbits;
+	__u16 sadb_comb_encrypt_minbits;
+	__u16 sadb_comb_encrypt_maxbits;
+	__u32 sadb_comb_reserved;
+	__u32 sadb_comb_soft_allocations;
+	__u32 sadb_comb_hard_allocations;
+	__u64 sadb_comb_soft_bytes;
+	__u64 sadb_comb_hard_bytes;
+	__u64 sadb_comb_soft_addtime;
+	__u64 sadb_comb_hard_addtime;
+	__u64 sadb_comb_soft_usetime;
+	__u64 sadb_comb_hard_usetime;
+};
+
+struct sadb_supported {
+	__u16 sadb_supported_len;
+	__u16 sadb_supported_exttype;
+	__u32 sadb_supported_reserved;
+};
+
+struct sadb_spirange {
+	__u16 sadb_spirange_len;
+	__u16 sadb_spirange_exttype;
+	__u32 sadb_spirange_min;
+	__u32 sadb_spirange_max;
+	__u32 sadb_spirange_reserved;
+};
+
+struct sadb_x_sa2 {
+	__u16 sadb_x_sa2_len;
+	__u16 sadb_x_sa2_exttype;
+	__u8 sadb_x_sa2_mode;
+	__u8 sadb_x_sa2_reserved1;
+	__u16 sadb_x_sa2_reserved2;
+	__u32 sadb_x_sa2_sequence;
+	__u32 sadb_x_sa2_reqid;
+};
+
+struct sadb_x_policy {
+	__u16 sadb_x_policy_len;
+	__u16 sadb_x_policy_exttype;
+	__u16 sadb_x_policy_type;
+	__u8 sadb_x_policy_dir;
+	__u8 sadb_x_policy_reserved;
+	__u32 sadb_x_policy_id;
+	__u32 sadb_x_policy_priority;
+};
+
+struct sadb_x_ipsecrequest {
+	__u16 sadb_x_ipsecrequest_len;
+	__u16 sadb_x_ipsecrequest_proto;
+	__u8 sadb_x_ipsecrequest_mode;
+	__u8 sadb_x_ipsecrequest_level;
+	__u16 sadb_x_ipsecrequest_reserved1;
+	__u32 sadb_x_ipsecrequest_reqid;
+	__u32 sadb_x_ipsecrequest_reserved2;
+};
+
+struct sadb_x_nat_t_type {
+	__u16 sadb_x_nat_t_type_len;
+	__u16 sadb_x_nat_t_type_exttype;
+	__u8 sadb_x_nat_t_type_type;
+	__u8 sadb_x_nat_t_type_reserved[3];
+};
+
+struct sadb_x_nat_t_port {
+	__u16 sadb_x_nat_t_port_len;
+	__u16 sadb_x_nat_t_port_exttype;
+	__be16 sadb_x_nat_t_port_port;
+	__u16 sadb_x_nat_t_port_reserved;
+};
+
+struct sadb_x_sec_ctx {
+	__u16 sadb_x_sec_len;
+	__u16 sadb_x_sec_exttype;
+	__u8 sadb_x_ctx_alg;
+	__u8 sadb_x_ctx_doi;
+	__u16 sadb_x_ctx_len;
+};
+
+struct sadb_x_filter {
+	__u16 sadb_x_filter_len;
+	__u16 sadb_x_filter_exttype;
+	__u32 sadb_x_filter_saddr[4];
+	__u32 sadb_x_filter_daddr[4];
+	__u16 sadb_x_filter_family;
+	__u8 sadb_x_filter_splen;
+	__u8 sadb_x_filter_dplen;
 };
 
 enum {
-	RPL_IPTUNNEL_UNSPEC = 0,
-	RPL_IPTUNNEL_SRH = 1,
-	__RPL_IPTUNNEL_MAX = 2,
-};
-
-struct rpl_iptunnel_encap {
-	struct ipv6_rpl_sr_hdr srh[0];
-};
-
-struct rpl_lwt {
-	struct dst_cache cache;
-	struct rpl_iptunnel_encap tuninfo;
+	IPSEC_MODE_ANY = 0,
+	IPSEC_MODE_TRANSPORT = 1,
+	IPSEC_MODE_TUNNEL = 2,
+	IPSEC_MODE_BEET = 3,
 };
 
 enum {
-	IP6_FH_F_FRAG = 1,
-	IP6_FH_F_AUTH = 2,
-	IP6_FH_F_SKIP_RH = 4,
+	IPSEC_DIR_ANY = 0,
+	IPSEC_DIR_INBOUND = 1,
+	IPSEC_DIR_OUTBOUND = 2,
+	IPSEC_DIR_FWD = 3,
+	IPSEC_DIR_MAX = 4,
+	IPSEC_DIR_INVALID = 5,
 };
 
-struct _strp_msg {
-	struct strp_msg strp;
-	int accum_len;
+enum {
+	IPSEC_POLICY_DISCARD = 0,
+	IPSEC_POLICY_NONE = 1,
+	IPSEC_POLICY_IPSEC = 2,
+	IPSEC_POLICY_ENTRUST = 3,
+	IPSEC_POLICY_BYPASS = 4,
 };
 
-struct vlan_group {
-	unsigned int nr_vlan_devs;
-	struct hlist_node hlist;
-	struct net_device **vlan_devices_arrays[16];
+enum {
+	IPSEC_LEVEL_DEFAULT = 0,
+	IPSEC_LEVEL_USE = 1,
+	IPSEC_LEVEL_REQUIRE = 2,
+	IPSEC_LEVEL_UNIQUE = 3,
 };
 
-struct vlan_info {
-	struct net_device *real_dev;
-	struct vlan_group grp;
-	struct list_head vid_list;
-	unsigned int nr_vids;
-	struct callback_head rcu;
+struct netns_pfkey {
+	struct hlist_head table;
+	atomic_t socks_nr;
 };
 
-enum vlan_flags {
-	VLAN_FLAG_REORDER_HDR = 1,
-	VLAN_FLAG_GVRP = 2,
-	VLAN_FLAG_LOOSE_BINDING = 4,
-	VLAN_FLAG_MVRP = 8,
-	VLAN_FLAG_BRIDGE_BINDING = 16,
-};
-
-struct vlan_priority_tci_mapping {
-	u32 priority;
-	u16 vlan_qos;
-	struct vlan_priority_tci_mapping *next;
-};
-
-struct vlan_dev_priv {
-	unsigned int nr_ingress_mappings;
-	u32 ingress_priority_map[8];
-	unsigned int nr_egress_mappings;
-	struct vlan_priority_tci_mapping *egress_priority_map[16];
-	__be16 vlan_proto;
-	u16 vlan_id;
-	u16 flags;
-	struct net_device *real_dev;
-	unsigned char real_dev_addr[6];
-	struct proc_dir_entry *dent;
-	struct vlan_pcpu_stats *vlan_pcpu_stats;
-	struct netpoll *netpoll;
-};
-
-enum vlan_protos {
-	VLAN_PROTO_8021Q = 0,
-	VLAN_PROTO_8021AD = 1,
-	VLAN_PROTO_NUM = 2,
-};
-
-struct vlan_vid_info {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-	int refcount;
-};
-
-enum nl80211_iftype {
-	NL80211_IFTYPE_UNSPECIFIED = 0,
-	NL80211_IFTYPE_ADHOC = 1,
-	NL80211_IFTYPE_STATION = 2,
-	NL80211_IFTYPE_AP = 3,
-	NL80211_IFTYPE_AP_VLAN = 4,
-	NL80211_IFTYPE_WDS = 5,
-	NL80211_IFTYPE_MONITOR = 6,
-	NL80211_IFTYPE_MESH_POINT = 7,
-	NL80211_IFTYPE_P2P_CLIENT = 8,
-	NL80211_IFTYPE_P2P_GO = 9,
-	NL80211_IFTYPE_P2P_DEVICE = 10,
-	NL80211_IFTYPE_OCB = 11,
-	NL80211_IFTYPE_NAN = 12,
-	NUM_NL80211_IFTYPES = 13,
-	NL80211_IFTYPE_MAX = 12,
-};
-
-struct cfg80211_conn;
-
-struct cfg80211_cached_keys;
-
-enum ieee80211_bss_type {
-	IEEE80211_BSS_TYPE_ESS = 0,
-	IEEE80211_BSS_TYPE_PBSS = 1,
-	IEEE80211_BSS_TYPE_IBSS = 2,
-	IEEE80211_BSS_TYPE_MBSS = 3,
-	IEEE80211_BSS_TYPE_ANY = 4,
-};
-
-struct cfg80211_internal_bss;
-
-enum nl80211_chan_width {
-	NL80211_CHAN_WIDTH_20_NOHT = 0,
-	NL80211_CHAN_WIDTH_20 = 1,
-	NL80211_CHAN_WIDTH_40 = 2,
-	NL80211_CHAN_WIDTH_80 = 3,
-	NL80211_CHAN_WIDTH_80P80 = 4,
-	NL80211_CHAN_WIDTH_160 = 5,
-	NL80211_CHAN_WIDTH_5 = 6,
-	NL80211_CHAN_WIDTH_10 = 7,
-	NL80211_CHAN_WIDTH_1 = 8,
-	NL80211_CHAN_WIDTH_2 = 9,
-	NL80211_CHAN_WIDTH_4 = 10,
-	NL80211_CHAN_WIDTH_8 = 11,
-	NL80211_CHAN_WIDTH_16 = 12,
-};
-
-enum ieee80211_edmg_bw_config {
-	IEEE80211_EDMG_BW_CONFIG_4 = 4,
-	IEEE80211_EDMG_BW_CONFIG_5 = 5,
-	IEEE80211_EDMG_BW_CONFIG_6 = 6,
-	IEEE80211_EDMG_BW_CONFIG_7 = 7,
-	IEEE80211_EDMG_BW_CONFIG_8 = 8,
-	IEEE80211_EDMG_BW_CONFIG_9 = 9,
-	IEEE80211_EDMG_BW_CONFIG_10 = 10,
-	IEEE80211_EDMG_BW_CONFIG_11 = 11,
-	IEEE80211_EDMG_BW_CONFIG_12 = 12,
-	IEEE80211_EDMG_BW_CONFIG_13 = 13,
-	IEEE80211_EDMG_BW_CONFIG_14 = 14,
-	IEEE80211_EDMG_BW_CONFIG_15 = 15,
-};
-
-struct ieee80211_edmg {
-	u8 channels;
-	enum ieee80211_edmg_bw_config bw_config;
-};
-
-struct ieee80211_channel;
-
-struct cfg80211_chan_def {
-	struct ieee80211_channel *chan;
-	enum nl80211_chan_width width;
-	u32 center_freq1;
-	u32 center_freq2;
-	struct ieee80211_edmg edmg;
-	u16 freq1_offset;
-};
-
-struct ieee80211_mcs_info {
-	u8 rx_mask[10];
-	__le16 rx_highest;
-	u8 tx_params;
-	u8 reserved[3];
-};
-
-struct ieee80211_ht_cap {
-	__le16 cap_info;
-	u8 ampdu_params_info;
-	struct ieee80211_mcs_info mcs;
-	__le16 extended_ht_cap_info;
-	__le32 tx_BF_cap_info;
-	u8 antenna_selection_info;
-} __attribute__((packed));
-
-struct key_params;
-
-struct cfg80211_ibss_params {
-	const u8 *ssid;
-	const u8 *bssid;
-	struct cfg80211_chan_def chandef;
-	const u8 *ie;
-	u8 ssid_len;
-	u8 ie_len;
-	u16 beacon_interval;
-	u32 basic_rates;
-	bool channel_fixed;
-	bool privacy;
-	bool control_port;
-	bool control_port_over_nl80211;
-	bool userspace_handles_dfs;
-	int: 24;
-	int mcast_rate[5];
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	int: 32;
-} __attribute__((packed));
-
-enum nl80211_auth_type {
-	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
-	NL80211_AUTHTYPE_SHARED_KEY = 1,
-	NL80211_AUTHTYPE_FT = 2,
-	NL80211_AUTHTYPE_NETWORK_EAP = 3,
-	NL80211_AUTHTYPE_SAE = 4,
-	NL80211_AUTHTYPE_FILS_SK = 5,
-	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
-	NL80211_AUTHTYPE_FILS_PK = 7,
-	__NL80211_AUTHTYPE_NUM = 8,
-	NL80211_AUTHTYPE_MAX = 7,
-	NL80211_AUTHTYPE_AUTOMATIC = 8,
-};
-
-enum nl80211_mfp {
-	NL80211_MFP_NO = 0,
-	NL80211_MFP_REQUIRED = 1,
-	NL80211_MFP_OPTIONAL = 2,
-};
-
-struct cfg80211_crypto_settings {
-	u32 wpa_versions;
-	u32 cipher_group;
-	int n_ciphers_pairwise;
-	u32 ciphers_pairwise[5];
-	int n_akm_suites;
-	u32 akm_suites[2];
-	bool control_port;
-	__be16 control_port_ethertype;
-	bool control_port_no_encrypt;
-	bool control_port_over_nl80211;
-	bool control_port_no_preauth;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	const u8 *psk;
-	const u8 *sae_pwd;
-	u8 sae_pwd_len;
-};
-
-struct ieee80211_vht_mcs_info {
-	__le16 rx_mcs_map;
-	__le16 rx_highest;
-	__le16 tx_mcs_map;
-	__le16 tx_highest;
-};
-
-struct ieee80211_vht_cap {
-	__le32 vht_cap_info;
-	struct ieee80211_vht_mcs_info supp_mcs;
-};
-
-enum nl80211_bss_select_attr {
-	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
-	NL80211_BSS_SELECT_ATTR_RSSI = 1,
-	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
-	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
-	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
-	NL80211_BSS_SELECT_ATTR_MAX = 3,
-};
-
-enum nl80211_band {
-	NL80211_BAND_2GHZ = 0,
-	NL80211_BAND_5GHZ = 1,
-	NL80211_BAND_60GHZ = 2,
-	NL80211_BAND_6GHZ = 3,
-	NL80211_BAND_S1GHZ = 4,
-	NUM_NL80211_BANDS = 5,
-};
-
-struct cfg80211_bss_select_adjust {
-	enum nl80211_band band;
-	s8 delta;
-};
-
-struct cfg80211_bss_selection {
-	enum nl80211_bss_select_attr behaviour;
-	union {
-		enum nl80211_band band_pref;
-		struct cfg80211_bss_select_adjust adjust;
-	} param;
-};
-
-struct cfg80211_connect_params {
-	struct ieee80211_channel *channel;
-	struct ieee80211_channel *channel_hint;
-	const u8 *bssid;
-	const u8 *bssid_hint;
-	const u8 *ssid;
-	size_t ssid_len;
-	enum nl80211_auth_type auth_type;
-	int: 32;
-	const u8 *ie;
-	size_t ie_len;
-	bool privacy;
-	int: 24;
-	enum nl80211_mfp mfp;
-	struct cfg80211_crypto_settings crypto;
-	const u8 *key;
-	u8 key_len;
-	u8 key_idx;
-	short: 16;
-	u32 flags;
-	int bg_scan_period;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	bool pbss;
-	int: 24;
-	struct cfg80211_bss_selection bss_select;
-	const u8 *prev_bssid;
-	const u8 *fils_erp_username;
-	size_t fils_erp_username_len;
-	const u8 *fils_erp_realm;
-	size_t fils_erp_realm_len;
-	u16 fils_erp_next_seq_num;
-	long: 48;
-	const u8 *fils_erp_rrk;
-	size_t fils_erp_rrk_len;
-	bool want_1x;
-	int: 24;
-	struct ieee80211_edmg edmg;
-	int: 32;
-} __attribute__((packed));
-
-struct cfg80211_cqm_config;
-
-struct wiphy;
-
-struct wireless_dev {
-	struct wiphy *wiphy;
-	enum nl80211_iftype iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	u32 identifier;
-	struct list_head mgmt_registrations;
-	spinlock_t mgmt_registrations_lock;
-	u8 mgmt_registrations_need_update: 1;
-	struct mutex mtx;
-	bool use_4addr;
-	bool is_running;
-	u8 address[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 mesh_id_len;
-	u8 mesh_id_up_len;
-	struct cfg80211_conn *conn;
-	struct cfg80211_cached_keys *connect_keys;
-	enum ieee80211_bss_type conn_bss_type;
-	u32 conn_owner_nlportid;
-	struct work_struct disconnect_wk;
-	u8 disconnect_bssid[6];
-	struct list_head event_list;
-	spinlock_t event_lock;
-	struct cfg80211_internal_bss *current_bss;
-	struct cfg80211_chan_def preset_chandef;
-	struct cfg80211_chan_def chandef;
-	bool ibss_fixed;
-	bool ibss_dfs_possible;
-	bool ps;
-	int ps_timeout;
-	int beacon_interval;
-	u32 ap_unexpected_nlportid;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	bool cac_started;
-	long unsigned int cac_start_time;
-	unsigned int cac_time_ms;
+struct pfkey_sock {
+	struct sock sk;
+	int registered;
+	int promisc;
 	struct {
-		struct cfg80211_ibss_params ibss;
-		struct cfg80211_connect_params connect;
-		struct cfg80211_cached_keys *keys;
-		const u8 *ie;
-		size_t ie_len;
-		u8 bssid[6];
-		u8 prev_bssid[6];
-		u8 ssid[32];
-		s8 default_key;
-		s8 default_mgmt_key;
-		bool prev_bssid_valid;
-	} wext;
-	struct cfg80211_cqm_config *cqm_config;
-	struct list_head pmsr_list;
-	spinlock_t pmsr_lock;
-	struct work_struct pmsr_free_wk;
-	long unsigned int unprot_beacon_reported;
+		uint8_t msg_version;
+		uint32_t msg_portid;
+		int (*dump)(struct pfkey_sock *);
+		void (*done)(struct pfkey_sock *);
+		union {
+			struct xfrm_policy_walk policy;
+			struct xfrm_state_walk state;
+		} u;
+		struct sk_buff *skb;
+	} dump;
+	struct mutex dump_lock;
 };
 
-struct iw_encode_ext {
-	__u32 ext_flags;
-	__u8 tx_seq[8];
-	__u8 rx_seq[8];
-	struct sockaddr addr;
-	__u16 alg;
-	__u16 key_len;
-	__u8 key[0];
-};
+typedef int (*pfkey_handler)(struct sock *, struct sk_buff *, const struct sadb_msg *, void * const *);
 
-struct iwreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union iwreq_data u;
-};
+typedef __u8 rds_tos_t;
 
-struct iw_event {
-	__u16 len;
-	__u16 cmd;
-	union iwreq_data u;
-};
-
-struct compat_iw_point {
-	compat_caddr_t pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct __compat_iw_event {
-	__u16 len;
-	__u16 cmd;
-	compat_caddr_t pointer;
-};
-
-enum nl80211_reg_initiator {
-	NL80211_REGDOM_SET_BY_CORE = 0,
-	NL80211_REGDOM_SET_BY_USER = 1,
-	NL80211_REGDOM_SET_BY_DRIVER = 2,
-	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
-};
-
-enum nl80211_dfs_regions {
-	NL80211_DFS_UNSET = 0,
-	NL80211_DFS_FCC = 1,
-	NL80211_DFS_ETSI = 2,
-	NL80211_DFS_JP = 3,
-};
-
-enum nl80211_user_reg_hint_type {
-	NL80211_USER_REG_HINT_USER = 0,
-	NL80211_USER_REG_HINT_CELL_BASE = 1,
-	NL80211_USER_REG_HINT_INDOOR = 2,
-};
-
-enum nl80211_mntr_flags {
-	__NL80211_MNTR_FLAG_INVALID = 0,
-	NL80211_MNTR_FLAG_FCSFAIL = 1,
-	NL80211_MNTR_FLAG_PLCPFAIL = 2,
-	NL80211_MNTR_FLAG_CONTROL = 3,
-	NL80211_MNTR_FLAG_OTHER_BSS = 4,
-	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
-	NL80211_MNTR_FLAG_ACTIVE = 6,
-	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
-	NL80211_MNTR_FLAG_MAX = 6,
-};
-
-enum nl80211_key_mode {
-	NL80211_KEY_RX_TX = 0,
-	NL80211_KEY_NO_TX = 1,
-	NL80211_KEY_SET_TX = 2,
-};
-
-enum nl80211_bss_scan_width {
-	NL80211_BSS_CHAN_WIDTH_20 = 0,
-	NL80211_BSS_CHAN_WIDTH_10 = 1,
-	NL80211_BSS_CHAN_WIDTH_5 = 2,
-	NL80211_BSS_CHAN_WIDTH_1 = 3,
-	NL80211_BSS_CHAN_WIDTH_2 = 4,
-};
-
-struct nl80211_wowlan_tcp_data_seq {
-	__u32 start;
-	__u32 offset;
-	__u32 len;
-};
-
-struct nl80211_wowlan_tcp_data_token {
-	__u32 offset;
-	__u32 len;
-	__u8 token_stream[0];
-};
-
-struct nl80211_wowlan_tcp_data_token_feature {
-	__u32 min_len;
-	__u32 max_len;
-	__u32 bufsize;
-};
-
-enum nl80211_ext_feature_index {
-	NL80211_EXT_FEATURE_VHT_IBSS = 0,
-	NL80211_EXT_FEATURE_RRM = 1,
-	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
-	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
-	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
-	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
-	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
-	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
-	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
-	NL80211_EXT_FEATURE_FILS_STA = 9,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
-	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
-	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
-	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
-	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
-	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
-	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
-	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
-	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
-	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
-	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
-	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_TXQS = 28,
-	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
-	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
-	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
-	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
-	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
-	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
-	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
-	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
-	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
-	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
-	NL80211_EXT_FEATURE_AQL = 40,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
-	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
-	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
-	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
-	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
-	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
-	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
-	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
-	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
-	NUM_NL80211_EXT_FEATURES = 54,
-	MAX_NL80211_EXT_FEATURES = 53,
-};
-
-enum nl80211_dfs_state {
-	NL80211_DFS_USABLE = 0,
-	NL80211_DFS_UNAVAILABLE = 1,
-	NL80211_DFS_AVAILABLE = 2,
-};
-
-struct nl80211_vendor_cmd_info {
-	__u32 vendor_id;
-	__u32 subcmd;
-};
-
-struct ieee80211_he_cap_elem {
-	u8 mac_cap_info[6];
-	u8 phy_cap_info[11];
-};
-
-struct ieee80211_he_mcs_nss_supp {
-	__le16 rx_mcs_80;
-	__le16 tx_mcs_80;
-	__le16 rx_mcs_160;
-	__le16 tx_mcs_160;
-	__le16 rx_mcs_80p80;
-	__le16 tx_mcs_80p80;
-};
-
-struct ieee80211_he_6ghz_capa {
-	__le16 capa;
-};
-
-enum environment_cap {
-	ENVIRON_ANY = 0,
-	ENVIRON_INDOOR = 1,
-	ENVIRON_OUTDOOR = 2,
-};
-
-struct regulatory_request {
-	struct callback_head callback_head;
-	int wiphy_idx;
-	enum nl80211_reg_initiator initiator;
-	enum nl80211_user_reg_hint_type user_reg_hint_type;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	bool intersect;
-	bool processed;
-	enum environment_cap country_ie_env;
-	struct list_head list;
-};
-
-struct ieee80211_freq_range {
-	u32 start_freq_khz;
-	u32 end_freq_khz;
-	u32 max_bandwidth_khz;
-};
-
-struct ieee80211_power_rule {
-	u32 max_antenna_gain;
-	u32 max_eirp;
-};
-
-struct ieee80211_wmm_ac {
-	u16 cw_min;
-	u16 cw_max;
-	u16 cot;
-	u8 aifsn;
-};
-
-struct ieee80211_wmm_rule {
-	struct ieee80211_wmm_ac client[4];
-	struct ieee80211_wmm_ac ap[4];
-};
-
-struct ieee80211_reg_rule {
-	struct ieee80211_freq_range freq_range;
-	struct ieee80211_power_rule power_rule;
-	struct ieee80211_wmm_rule wmm_rule;
-	u32 flags;
-	u32 dfs_cac_ms;
-	bool has_wmm;
-};
-
-struct ieee80211_regdomain {
-	struct callback_head callback_head;
-	u32 n_reg_rules;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	struct ieee80211_reg_rule reg_rules[0];
-};
-
-struct ieee80211_channel {
-	enum nl80211_band band;
-	u32 center_freq;
-	u16 freq_offset;
-	u16 hw_value;
-	u32 flags;
-	int max_antenna_gain;
-	int max_power;
-	int max_reg_power;
-	bool beacon_found;
-	u32 orig_flags;
-	int orig_mag;
-	int orig_mpwr;
-	enum nl80211_dfs_state dfs_state;
-	long unsigned int dfs_state_entered;
-	unsigned int dfs_cac_ms;
-};
-
-struct ieee80211_rate {
-	u32 flags;
-	u16 bitrate;
-	u16 hw_value;
-	u16 hw_value_short;
-};
-
-struct ieee80211_sta_ht_cap {
-	u16 cap;
-	bool ht_supported;
-	u8 ampdu_factor;
-	u8 ampdu_density;
-	struct ieee80211_mcs_info mcs;
-	char: 8;
+struct rds_info_socket {
+	__u32 sndbuf;
+	__be32 bound_addr;
+	__be32 connected_addr;
+	__be16 bound_port;
+	__be16 connected_port;
+	__u32 rcvbuf;
+	__u64 inum;
 } __attribute__((packed));
 
-struct ieee80211_sta_vht_cap {
-	bool vht_supported;
-	u32 cap;
-	struct ieee80211_vht_mcs_info vht_mcs;
-};
-
-struct ieee80211_sta_he_cap {
-	bool has_he;
-	struct ieee80211_he_cap_elem he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
-	u8 ppe_thres[25];
+struct rds6_info_socket {
+	__u32 sndbuf;
+	struct in6_addr bound_addr;
+	struct in6_addr connected_addr;
+	__be16 bound_port;
+	__be16 connected_port;
+	__u32 rcvbuf;
+	__u64 inum;
 } __attribute__((packed));
 
-struct ieee80211_sband_iftype_data {
-	u16 types_mask;
-	struct ieee80211_sta_he_cap he_cap;
-	struct ieee80211_he_6ghz_capa he_6ghz_capa;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_s1g_cap {
-	bool s1g;
-	u8 cap[10];
-	u8 nss_mcs[5];
+struct rds_rx_trace_so {
+	__u8 rx_traces;
+	__u8 rx_trace_pos[3];
 };
 
-struct ieee80211_supported_band {
-	struct ieee80211_channel *channels;
-	struct ieee80211_rate *bitrates;
-	enum nl80211_band band;
-	int n_channels;
-	int n_bitrates;
-	struct ieee80211_sta_ht_cap ht_cap;
-	struct ieee80211_sta_vht_cap vht_cap;
-	struct ieee80211_sta_s1g_cap s1g_cap;
-	struct ieee80211_edmg edmg_cap;
-	u16 n_iftype_data;
-	const struct ieee80211_sband_iftype_data *iftype_data;
-};
+struct rds_info_iterator;
 
-struct key_params {
-	const u8 *key;
-	const u8 *seq;
-	int key_len;
-	int seq_len;
-	u16 vlan_id;
-	u32 cipher;
-	enum nl80211_key_mode mode;
-};
+typedef void (*rds_info_func___2)(struct socket *, unsigned int, struct rds_info_iterator *, struct rds_info_lengths *);
 
-struct mac_address {
-	u8 addr[6];
+struct rds_info_iterator {
+	struct page **pages;
+	void *addr;
+	long unsigned int offset;
 };
 
-struct cfg80211_ssid {
-	u8 ssid[32];
-	u8 ssid_len;
+struct rds_iovec {
+	__u64 addr;
+	__u64 bytes;
 };
 
-enum cfg80211_signal_type {
-	CFG80211_SIGNAL_TYPE_NONE = 0,
-	CFG80211_SIGNAL_TYPE_MBM = 1,
-	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+struct rds_rdma_args {
+	rds_rdma_cookie_t cookie;
+	struct rds_iovec remote_vec;
+	__u64 local_vec_addr;
+	__u64 nr_local;
+	__u64 flags;
+	__u64 user_token;
 };
 
-struct ieee80211_txrx_stypes;
-
-struct ieee80211_iface_combination;
-
-struct wiphy_iftype_akm_suites;
-
-struct wiphy_wowlan_support;
-
-struct cfg80211_wowlan;
-
-struct wiphy_iftype_ext_capab;
-
-struct wiphy_coalesce_support;
-
-struct wiphy_vendor_command;
-
-struct cfg80211_pmsr_capabilities;
-
-struct wiphy {
-	u8 perm_addr[6];
-	u8 addr_mask[6];
-	struct mac_address *addresses;
-	const struct ieee80211_txrx_stypes *mgmt_stypes;
-	const struct ieee80211_iface_combination *iface_combinations;
-	int n_iface_combinations;
-	u16 software_iftypes;
-	u16 n_addresses;
-	u16 interface_modes;
-	u16 max_acl_mac_addrs;
-	u32 flags;
-	u32 regulatory_flags;
-	u32 features;
-	u8 ext_features[7];
-	u32 ap_sme_capa;
-	enum cfg80211_signal_type signal_type;
-	int bss_priv_size;
-	u8 max_scan_ssids;
-	u8 max_sched_scan_reqs;
-	u8 max_sched_scan_ssids;
-	u8 max_match_sets;
-	u16 max_scan_ie_len;
-	u16 max_sched_scan_ie_len;
-	u32 max_sched_scan_plans;
-	u32 max_sched_scan_plan_interval;
-	u32 max_sched_scan_plan_iterations;
-	int n_cipher_suites;
-	const u32 *cipher_suites;
-	int n_akm_suites;
-	const u32 *akm_suites;
-	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
-	unsigned int num_iftype_akm_suites;
-	u8 retry_short;
-	u8 retry_long;
-	u32 frag_threshold;
-	u32 rts_threshold;
-	u8 coverage_class;
-	char fw_version[32];
-	u32 hw_version;
-	const struct wiphy_wowlan_support *wowlan;
-	struct cfg80211_wowlan *wowlan_config;
-	u16 max_remain_on_channel_duration;
-	u8 max_num_pmkids;
-	u32 available_antennas_tx;
-	u32 available_antennas_rx;
-	u32 probe_resp_offload;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
-	unsigned int num_iftype_ext_capab;
-	const void *privid;
-	struct ieee80211_supported_band *bands[5];
-	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
-	const struct ieee80211_regdomain *regd;
-	struct device dev;
-	bool registered;
-	struct dentry *debugfsdir;
-	const struct ieee80211_ht_cap *ht_capa_mod_mask;
-	const struct ieee80211_vht_cap *vht_capa_mod_mask;
-	struct list_head wdev_list;
-	possible_net_t _net;
-	const struct iw_handler_def *wext;
-	const struct wiphy_coalesce_support *coalesce;
-	const struct wiphy_vendor_command *vendor_commands;
-	const struct nl80211_vendor_cmd_info *vendor_events;
-	int n_vendor_commands;
-	int n_vendor_events;
-	u16 max_ap_assoc_sta;
-	u8 max_num_csa_counters;
-	u32 bss_select_support;
-	u8 nan_supported_bands;
-	u32 txq_limit;
-	u32 txq_memory_limit;
-	u32 txq_quantum;
-	long unsigned int tx_queue_len;
-	u8 support_mbssid: 1;
-	u8 support_only_he_mbssid: 1;
-	const struct cfg80211_pmsr_capabilities *pmsr_capa;
-	struct {
-		u64 peer;
-		u64 vif;
-		u8 max_retry;
-	} tid_config_support;
-	u8 max_data_retry_count;
-	long: 56;
-	long: 64;
-	char priv[0];
+struct rds_iov_vector {
+	struct rds_iovec *iov;
+	int len;
 };
 
-struct cfg80211_match_set {
-	struct cfg80211_ssid ssid;
-	u8 bssid[6];
-	s32 rssi_thold;
-	s32 per_band_rssi_thold[5];
+struct rds_iov_vector_arr {
+	struct rds_iov_vector *vec;
+	int len;
+	int indx;
+	int incr;
 };
 
-struct cfg80211_sched_scan_plan {
-	u32 interval;
-	u32 iterations;
-};
-
-struct cfg80211_sched_scan_request {
-	u64 reqid;
-	struct cfg80211_ssid *ssids;
-	int n_ssids;
-	u32 n_channels;
-	enum nl80211_bss_scan_width scan_width;
-	const u8 *ie;
-	size_t ie_len;
-	u32 flags;
-	struct cfg80211_match_set *match_sets;
-	int n_match_sets;
-	s32 min_rssi_thold;
-	u32 delay;
-	struct cfg80211_sched_scan_plan *scan_plans;
-	int n_scan_plans;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	bool relative_rssi_set;
-	s8 relative_rssi;
-	struct cfg80211_bss_select_adjust rssi_adjust;
-	struct wiphy *wiphy;
-	struct net_device *dev;
-	long unsigned int scan_start;
-	bool report_results;
-	struct callback_head callback_head;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	struct list_head list;
-	struct ieee80211_channel *channels[0];
-};
-
-struct cfg80211_pkt_pattern {
-	const u8 *mask;
-	const u8 *pattern;
-	int pattern_len;
-	int pkt_offset;
-};
-
-struct cfg80211_wowlan_tcp {
-	struct socket *sock;
-	__be32 src;
-	__be32 dst;
-	u16 src_port;
-	u16 dst_port;
-	u8 dst_mac[6];
-	int payload_len;
-	const u8 *payload;
-	struct nl80211_wowlan_tcp_data_seq payload_seq;
-	u32 data_interval;
-	u32 wake_len;
-	const u8 *wake_data;
-	const u8 *wake_mask;
-	u32 tokens_size;
-	struct nl80211_wowlan_tcp_data_token payload_tok;
-};
-
-struct cfg80211_wowlan {
-	bool any;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	struct cfg80211_pkt_pattern *patterns;
-	struct cfg80211_wowlan_tcp *tcp;
-	int n_patterns;
-	struct cfg80211_sched_scan_request *nd_config;
-};
-
-struct ieee80211_iface_limit {
-	u16 max;
-	u16 types;
-};
-
-struct ieee80211_iface_combination {
-	const struct ieee80211_iface_limit *limits;
-	u32 num_different_channels;
-	u16 max_interfaces;
-	u8 n_limits;
-	bool beacon_int_infra_match;
-	u8 radar_detect_widths;
-	u8 radar_detect_regions;
-	u32 beacon_int_min_gcd;
-};
-
-struct ieee80211_txrx_stypes {
-	u16 tx;
-	u16 rx;
-};
-
-struct wiphy_wowlan_tcp_support {
-	const struct nl80211_wowlan_tcp_data_token_feature *tok;
-	u32 data_payload_max;
-	u32 data_interval_max;
-	u32 wake_payload_max;
-	bool seq;
-};
-
-struct wiphy_wowlan_support {
-	u32 flags;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-	int max_nd_match_sets;
-	const struct wiphy_wowlan_tcp_support *tcp;
-};
-
-struct wiphy_coalesce_support {
-	int n_rules;
-	int max_delay;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-};
-
-struct wiphy_vendor_command {
-	struct nl80211_vendor_cmd_info info;
-	u32 flags;
-	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
-	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-};
-
-struct wiphy_iftype_ext_capab {
-	enum nl80211_iftype iftype;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-};
-
-struct cfg80211_pmsr_capabilities {
-	unsigned int max_peers;
-	u8 report_ap_tsf: 1;
-	u8 randomize_mac_addr: 1;
-	struct {
-		u32 preambles;
-		u32 bandwidths;
-		s8 max_bursts_exponent;
-		u8 max_ftms_per_burst;
-		u8 supported: 1;
-		u8 asap: 1;
-		u8 non_asap: 1;
-		u8 request_lci: 1;
-		u8 request_civicloc: 1;
-		u8 trigger_based: 1;
-		u8 non_trigger_based: 1;
-	} ftm;
-};
-
-struct wiphy_iftype_akm_suites {
-	u16 iftypes_mask;
-	const u32 *akm_suites;
-	int n_akm_suites;
-};
-
-struct iw_ioctl_description {
-	__u8 header_type;
-	__u8 token_type;
-	__u16 token_size;
-	__u16 min_tokens;
-	__u16 max_tokens;
-	__u32 flags;
-};
-
-typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
-
-struct iw_thrspy {
-	struct sockaddr addr;
-	struct iw_quality qual;
-	struct iw_quality low;
-	struct iw_quality high;
-};
-
-struct netlbl_af4list {
-	__be32 addr;
-	__be32 mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_af6list {
-	struct in6_addr addr;
-	struct in6_addr mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_domaddr_map {
-	struct list_head list4;
-	struct list_head list6;
-};
-
-struct netlbl_dommap_def {
-	u32 type;
-	union {
-		struct netlbl_domaddr_map *addrsel;
-		struct cipso_v4_doi *cipso;
-		struct calipso_doi *calipso;
-	};
-};
-
-struct netlbl_domaddr4_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af4list list;
-};
-
-struct netlbl_domaddr6_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af6list list;
-};
-
-struct netlbl_dom_map {
-	char *domain;
-	u16 family;
-	struct netlbl_dommap_def def;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_domhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-enum {
-	NLBL_MGMT_C_UNSPEC = 0,
-	NLBL_MGMT_C_ADD = 1,
-	NLBL_MGMT_C_REMOVE = 2,
-	NLBL_MGMT_C_LISTALL = 3,
-	NLBL_MGMT_C_ADDDEF = 4,
-	NLBL_MGMT_C_REMOVEDEF = 5,
-	NLBL_MGMT_C_LISTDEF = 6,
-	NLBL_MGMT_C_PROTOCOLS = 7,
-	NLBL_MGMT_C_VERSION = 8,
-	NLBL_MGMT_C_S0_SET = 9,
-	NLBL_MGMT_C_S0_GET = 10,
-	__NLBL_MGMT_C_MAX = 11,
-};
-
-enum {
-	NLBL_MGMT_A_UNSPEC = 0,
-	NLBL_MGMT_A_DOMAIN = 1,
-	NLBL_MGMT_A_PROTOCOL = 2,
-	NLBL_MGMT_A_VERSION = 3,
-	NLBL_MGMT_A_CV4DOI = 4,
-	NLBL_MGMT_A_IPV6ADDR = 5,
-	NLBL_MGMT_A_IPV6MASK = 6,
-	NLBL_MGMT_A_IPV4ADDR = 7,
-	NLBL_MGMT_A_IPV4MASK = 8,
-	NLBL_MGMT_A_ADDRSELECTOR = 9,
-	NLBL_MGMT_A_SELECTORLIST = 10,
-	NLBL_MGMT_A_FAMILY = 11,
-	NLBL_MGMT_A_CLPDOI = 12,
-	NLBL_MGMT_A_S0 = 13,
-	__NLBL_MGMT_A_MAX = 14,
-};
-
-struct netlbl_domhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_UNLABEL_C_UNSPEC = 0,
-	NLBL_UNLABEL_C_ACCEPT = 1,
-	NLBL_UNLABEL_C_LIST = 2,
-	NLBL_UNLABEL_C_STATICADD = 3,
-	NLBL_UNLABEL_C_STATICREMOVE = 4,
-	NLBL_UNLABEL_C_STATICLIST = 5,
-	NLBL_UNLABEL_C_STATICADDDEF = 6,
-	NLBL_UNLABEL_C_STATICREMOVEDEF = 7,
-	NLBL_UNLABEL_C_STATICLISTDEF = 8,
-	__NLBL_UNLABEL_C_MAX = 9,
-};
-
-enum {
-	NLBL_UNLABEL_A_UNSPEC = 0,
-	NLBL_UNLABEL_A_ACPTFLG = 1,
-	NLBL_UNLABEL_A_IPV6ADDR = 2,
-	NLBL_UNLABEL_A_IPV6MASK = 3,
-	NLBL_UNLABEL_A_IPV4ADDR = 4,
-	NLBL_UNLABEL_A_IPV4MASK = 5,
-	NLBL_UNLABEL_A_IFACE = 6,
-	NLBL_UNLABEL_A_SECCTX = 7,
-	__NLBL_UNLABEL_A_MAX = 8,
-};
-
-struct netlbl_unlhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-struct netlbl_unlhsh_addr4 {
-	u32 secid;
-	struct netlbl_af4list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_addr6 {
-	u32 secid;
-	struct netlbl_af6list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_iface {
-	int ifindex;
-	struct list_head addr4_list;
-	struct list_head addr6_list;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_CIPSOV4_C_UNSPEC = 0,
-	NLBL_CIPSOV4_C_ADD = 1,
-	NLBL_CIPSOV4_C_REMOVE = 2,
-	NLBL_CIPSOV4_C_LIST = 3,
-	NLBL_CIPSOV4_C_LISTALL = 4,
-	__NLBL_CIPSOV4_C_MAX = 5,
-};
-
-enum {
-	NLBL_CIPSOV4_A_UNSPEC = 0,
-	NLBL_CIPSOV4_A_DOI = 1,
-	NLBL_CIPSOV4_A_MTYPE = 2,
-	NLBL_CIPSOV4_A_TAG = 3,
-	NLBL_CIPSOV4_A_TAGLST = 4,
-	NLBL_CIPSOV4_A_MLSLVLLOC = 5,
-	NLBL_CIPSOV4_A_MLSLVLREM = 6,
-	NLBL_CIPSOV4_A_MLSLVL = 7,
-	NLBL_CIPSOV4_A_MLSLVLLST = 8,
-	NLBL_CIPSOV4_A_MLSCATLOC = 9,
-	NLBL_CIPSOV4_A_MLSCATREM = 10,
-	NLBL_CIPSOV4_A_MLSCAT = 11,
-	NLBL_CIPSOV4_A_MLSCATLST = 12,
-	__NLBL_CIPSOV4_A_MAX = 13,
-};
-
-struct netlbl_cipsov4_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct netlbl_domhsh_walk_arg___2 {
-	struct netlbl_audit *audit_info;
-	u32 doi;
-};
-
-enum {
-	NLBL_CALIPSO_C_UNSPEC = 0,
-	NLBL_CALIPSO_C_ADD = 1,
-	NLBL_CALIPSO_C_REMOVE = 2,
-	NLBL_CALIPSO_C_LIST = 3,
-	NLBL_CALIPSO_C_LISTALL = 4,
-	__NLBL_CALIPSO_C_MAX = 5,
-};
-
-enum {
-	NLBL_CALIPSO_A_UNSPEC = 0,
-	NLBL_CALIPSO_A_DOI = 1,
-	NLBL_CALIPSO_A_MTYPE = 2,
-	__NLBL_CALIPSO_A_MAX = 3,
-};
-
-struct netlbl_calipso_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct dcbmsg {
-	__u8 dcb_family;
-	__u8 cmd;
-	__u16 dcb_pad;
-};
-
-enum dcbnl_commands {
-	DCB_CMD_UNDEFINED = 0,
-	DCB_CMD_GSTATE = 1,
-	DCB_CMD_SSTATE = 2,
-	DCB_CMD_PGTX_GCFG = 3,
-	DCB_CMD_PGTX_SCFG = 4,
-	DCB_CMD_PGRX_GCFG = 5,
-	DCB_CMD_PGRX_SCFG = 6,
-	DCB_CMD_PFC_GCFG = 7,
-	DCB_CMD_PFC_SCFG = 8,
-	DCB_CMD_SET_ALL = 9,
-	DCB_CMD_GPERM_HWADDR = 10,
-	DCB_CMD_GCAP = 11,
-	DCB_CMD_GNUMTCS = 12,
-	DCB_CMD_SNUMTCS = 13,
-	DCB_CMD_PFC_GSTATE = 14,
-	DCB_CMD_PFC_SSTATE = 15,
-	DCB_CMD_BCN_GCFG = 16,
-	DCB_CMD_BCN_SCFG = 17,
-	DCB_CMD_GAPP = 18,
-	DCB_CMD_SAPP = 19,
-	DCB_CMD_IEEE_SET = 20,
-	DCB_CMD_IEEE_GET = 21,
-	DCB_CMD_GDCBX = 22,
-	DCB_CMD_SDCBX = 23,
-	DCB_CMD_GFEATCFG = 24,
-	DCB_CMD_SFEATCFG = 25,
-	DCB_CMD_CEE_GET = 26,
-	DCB_CMD_IEEE_DEL = 27,
-	__DCB_CMD_ENUM_MAX = 28,
-	DCB_CMD_MAX = 27,
-};
-
-enum dcbnl_attrs {
-	DCB_ATTR_UNDEFINED = 0,
-	DCB_ATTR_IFNAME = 1,
-	DCB_ATTR_STATE = 2,
-	DCB_ATTR_PFC_STATE = 3,
-	DCB_ATTR_PFC_CFG = 4,
-	DCB_ATTR_NUM_TC = 5,
-	DCB_ATTR_PG_CFG = 6,
-	DCB_ATTR_SET_ALL = 7,
-	DCB_ATTR_PERM_HWADDR = 8,
-	DCB_ATTR_CAP = 9,
-	DCB_ATTR_NUMTCS = 10,
-	DCB_ATTR_BCN = 11,
-	DCB_ATTR_APP = 12,
-	DCB_ATTR_IEEE = 13,
-	DCB_ATTR_DCBX = 14,
-	DCB_ATTR_FEATCFG = 15,
-	DCB_ATTR_CEE = 16,
-	__DCB_ATTR_ENUM_MAX = 17,
-	DCB_ATTR_MAX = 16,
-};
-
-enum ieee_attrs {
-	DCB_ATTR_IEEE_UNSPEC = 0,
-	DCB_ATTR_IEEE_ETS = 1,
-	DCB_ATTR_IEEE_PFC = 2,
-	DCB_ATTR_IEEE_APP_TABLE = 3,
-	DCB_ATTR_IEEE_PEER_ETS = 4,
-	DCB_ATTR_IEEE_PEER_PFC = 5,
-	DCB_ATTR_IEEE_PEER_APP = 6,
-	DCB_ATTR_IEEE_MAXRATE = 7,
-	DCB_ATTR_IEEE_QCN = 8,
-	DCB_ATTR_IEEE_QCN_STATS = 9,
-	DCB_ATTR_DCB_BUFFER = 10,
-	__DCB_ATTR_IEEE_MAX = 11,
-};
-
-enum ieee_attrs_app {
-	DCB_ATTR_IEEE_APP_UNSPEC = 0,
-	DCB_ATTR_IEEE_APP = 1,
-	__DCB_ATTR_IEEE_APP_MAX = 2,
-};
-
-enum cee_attrs {
-	DCB_ATTR_CEE_UNSPEC = 0,
-	DCB_ATTR_CEE_PEER_PG = 1,
-	DCB_ATTR_CEE_PEER_PFC = 2,
-	DCB_ATTR_CEE_PEER_APP_TABLE = 3,
-	DCB_ATTR_CEE_TX_PG = 4,
-	DCB_ATTR_CEE_RX_PG = 5,
-	DCB_ATTR_CEE_PFC = 6,
-	DCB_ATTR_CEE_APP_TABLE = 7,
-	DCB_ATTR_CEE_FEAT = 8,
-	__DCB_ATTR_CEE_MAX = 9,
-};
-
-enum peer_app_attr {
-	DCB_ATTR_CEE_PEER_APP_UNSPEC = 0,
-	DCB_ATTR_CEE_PEER_APP_INFO = 1,
-	DCB_ATTR_CEE_PEER_APP = 2,
-	__DCB_ATTR_CEE_PEER_APP_MAX = 3,
-};
-
-enum dcbnl_pfc_up_attrs {
-	DCB_PFC_UP_ATTR_UNDEFINED = 0,
-	DCB_PFC_UP_ATTR_0 = 1,
-	DCB_PFC_UP_ATTR_1 = 2,
-	DCB_PFC_UP_ATTR_2 = 3,
-	DCB_PFC_UP_ATTR_3 = 4,
-	DCB_PFC_UP_ATTR_4 = 5,
-	DCB_PFC_UP_ATTR_5 = 6,
-	DCB_PFC_UP_ATTR_6 = 7,
-	DCB_PFC_UP_ATTR_7 = 8,
-	DCB_PFC_UP_ATTR_ALL = 9,
-	__DCB_PFC_UP_ATTR_ENUM_MAX = 10,
-	DCB_PFC_UP_ATTR_MAX = 9,
-};
-
-enum dcbnl_pg_attrs {
-	DCB_PG_ATTR_UNDEFINED = 0,
-	DCB_PG_ATTR_TC_0 = 1,
-	DCB_PG_ATTR_TC_1 = 2,
-	DCB_PG_ATTR_TC_2 = 3,
-	DCB_PG_ATTR_TC_3 = 4,
-	DCB_PG_ATTR_TC_4 = 5,
-	DCB_PG_ATTR_TC_5 = 6,
-	DCB_PG_ATTR_TC_6 = 7,
-	DCB_PG_ATTR_TC_7 = 8,
-	DCB_PG_ATTR_TC_MAX = 9,
-	DCB_PG_ATTR_TC_ALL = 10,
-	DCB_PG_ATTR_BW_ID_0 = 11,
-	DCB_PG_ATTR_BW_ID_1 = 12,
-	DCB_PG_ATTR_BW_ID_2 = 13,
-	DCB_PG_ATTR_BW_ID_3 = 14,
-	DCB_PG_ATTR_BW_ID_4 = 15,
-	DCB_PG_ATTR_BW_ID_5 = 16,
-	DCB_PG_ATTR_BW_ID_6 = 17,
-	DCB_PG_ATTR_BW_ID_7 = 18,
-	DCB_PG_ATTR_BW_ID_MAX = 19,
-	DCB_PG_ATTR_BW_ID_ALL = 20,
-	__DCB_PG_ATTR_ENUM_MAX = 21,
-	DCB_PG_ATTR_MAX = 20,
-};
-
-enum dcbnl_tc_attrs {
-	DCB_TC_ATTR_PARAM_UNDEFINED = 0,
-	DCB_TC_ATTR_PARAM_PGID = 1,
-	DCB_TC_ATTR_PARAM_UP_MAPPING = 2,
-	DCB_TC_ATTR_PARAM_STRICT_PRIO = 3,
-	DCB_TC_ATTR_PARAM_BW_PCT = 4,
-	DCB_TC_ATTR_PARAM_ALL = 5,
-	__DCB_TC_ATTR_PARAM_ENUM_MAX = 6,
-	DCB_TC_ATTR_PARAM_MAX = 5,
-};
-
-enum dcbnl_cap_attrs {
-	DCB_CAP_ATTR_UNDEFINED = 0,
-	DCB_CAP_ATTR_ALL = 1,
-	DCB_CAP_ATTR_PG = 2,
-	DCB_CAP_ATTR_PFC = 3,
-	DCB_CAP_ATTR_UP2TC = 4,
-	DCB_CAP_ATTR_PG_TCS = 5,
-	DCB_CAP_ATTR_PFC_TCS = 6,
-	DCB_CAP_ATTR_GSP = 7,
-	DCB_CAP_ATTR_BCN = 8,
-	DCB_CAP_ATTR_DCBX = 9,
-	__DCB_CAP_ATTR_ENUM_MAX = 10,
-	DCB_CAP_ATTR_MAX = 9,
-};
-
-enum dcbnl_numtcs_attrs {
-	DCB_NUMTCS_ATTR_UNDEFINED = 0,
-	DCB_NUMTCS_ATTR_ALL = 1,
-	DCB_NUMTCS_ATTR_PG = 2,
-	DCB_NUMTCS_ATTR_PFC = 3,
-	__DCB_NUMTCS_ATTR_ENUM_MAX = 4,
-	DCB_NUMTCS_ATTR_MAX = 3,
-};
-
-enum dcbnl_bcn_attrs {
-	DCB_BCN_ATTR_UNDEFINED = 0,
-	DCB_BCN_ATTR_RP_0 = 1,
-	DCB_BCN_ATTR_RP_1 = 2,
-	DCB_BCN_ATTR_RP_2 = 3,
-	DCB_BCN_ATTR_RP_3 = 4,
-	DCB_BCN_ATTR_RP_4 = 5,
-	DCB_BCN_ATTR_RP_5 = 6,
-	DCB_BCN_ATTR_RP_6 = 7,
-	DCB_BCN_ATTR_RP_7 = 8,
-	DCB_BCN_ATTR_RP_ALL = 9,
-	DCB_BCN_ATTR_BCNA_0 = 10,
-	DCB_BCN_ATTR_BCNA_1 = 11,
-	DCB_BCN_ATTR_ALPHA = 12,
-	DCB_BCN_ATTR_BETA = 13,
-	DCB_BCN_ATTR_GD = 14,
-	DCB_BCN_ATTR_GI = 15,
-	DCB_BCN_ATTR_TMAX = 16,
-	DCB_BCN_ATTR_TD = 17,
-	DCB_BCN_ATTR_RMIN = 18,
-	DCB_BCN_ATTR_W = 19,
-	DCB_BCN_ATTR_RD = 20,
-	DCB_BCN_ATTR_RU = 21,
-	DCB_BCN_ATTR_WRTT = 22,
-	DCB_BCN_ATTR_RI = 23,
-	DCB_BCN_ATTR_C = 24,
-	DCB_BCN_ATTR_ALL = 25,
-	__DCB_BCN_ATTR_ENUM_MAX = 26,
-	DCB_BCN_ATTR_MAX = 25,
-};
-
-enum dcb_general_attr_values {
-	DCB_ATTR_VALUE_UNDEFINED = 255,
-};
-
-enum dcbnl_app_attrs {
-	DCB_APP_ATTR_UNDEFINED = 0,
-	DCB_APP_ATTR_IDTYPE = 1,
-	DCB_APP_ATTR_ID = 2,
-	DCB_APP_ATTR_PRIORITY = 3,
-	__DCB_APP_ATTR_ENUM_MAX = 4,
-	DCB_APP_ATTR_MAX = 3,
-};
-
-enum dcbnl_featcfg_attrs {
-	DCB_FEATCFG_ATTR_UNDEFINED = 0,
-	DCB_FEATCFG_ATTR_ALL = 1,
-	DCB_FEATCFG_ATTR_PG = 2,
-	DCB_FEATCFG_ATTR_PFC = 3,
-	DCB_FEATCFG_ATTR_APP = 4,
-	__DCB_FEATCFG_ATTR_ENUM_MAX = 5,
-	DCB_FEATCFG_ATTR_MAX = 4,
-};
-
-struct dcb_app_type {
-	int ifindex;
-	struct dcb_app app;
-	struct list_head list;
-	u8 dcbx;
-};
-
-struct dcb_ieee_app_prio_map {
-	u64 map[8];
-};
-
-struct dcb_ieee_app_dscp_map {
-	u8 map[64];
-};
-
-enum dcbevent_notif_type {
-	DCB_APP_EVENT = 1,
-};
-
-struct reply_func {
-	int type;
-	int (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);
-};
-
-enum switchdev_attr_id {
-	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
-	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
-	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 2,
-	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 3,
-	SWITCHDEV_ATTR_ID_PORT_MROUTER = 4,
-	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 5,
-	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 6,
-	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 7,
-	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 8,
-	SWITCHDEV_ATTR_ID_MRP_PORT_STATE = 9,
-	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 10,
-};
-
-struct switchdev_attr {
-	struct net_device *orig_dev;
-	enum switchdev_attr_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
-	union {
-		u8 stp_state;
-		long unsigned int brport_flags;
-		bool mrouter;
-		clock_t ageing_time;
-		bool vlan_filtering;
-		bool mc_disabled;
-		u8 mrp_port_state;
-		u8 mrp_port_role;
-	} u;
-};
-
-enum switchdev_notifier_type {
-	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
-	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
-	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
-	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
-	SWITCHDEV_FDB_OFFLOADED = 5,
-	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
-	SWITCHDEV_PORT_OBJ_ADD = 7,
-	SWITCHDEV_PORT_OBJ_DEL = 8,
-	SWITCHDEV_PORT_ATTR_SET = 9,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
-	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
-};
-
-struct switchdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct switchdev_notifier_port_obj_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_obj *obj;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-struct switchdev_notifier_port_attr_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_attr *attr;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-typedef void switchdev_deferred_func_t(struct net_device *, const void *);
-
-struct switchdev_deferred_item {
-	struct list_head list;
-	struct net_device *dev;
-	switchdev_deferred_func_t *func;
-	long unsigned int data[0];
-};
-
-enum l3mdev_type {
-	L3MDEV_TYPE_UNSPEC = 0,
-	L3MDEV_TYPE_VRF = 1,
-	__L3MDEV_TYPE_MAX = 2,
-};
-
-typedef int (*lookup_by_table_id_t)(struct net *, u32);
-
-struct l3mdev_handler {
-	lookup_by_table_id_t dev_lookup;
-};
-
-struct ncsi_dev {
-	int state;
-	int link_up;
-	struct net_device *dev;
-	void (*handler)(struct ncsi_dev *);
-};
-
-enum {
-	NCSI_CAP_BASE = 0,
-	NCSI_CAP_GENERIC = 0,
-	NCSI_CAP_BC = 1,
-	NCSI_CAP_MC = 2,
-	NCSI_CAP_BUFFER = 3,
-	NCSI_CAP_AEN = 4,
-	NCSI_CAP_VLAN = 5,
-	NCSI_CAP_MAX = 6,
-};
-
-enum {
-	NCSI_MODE_BASE = 0,
-	NCSI_MODE_ENABLE = 0,
-	NCSI_MODE_TX_ENABLE = 1,
-	NCSI_MODE_LINK = 2,
-	NCSI_MODE_VLAN = 3,
-	NCSI_MODE_BC = 4,
-	NCSI_MODE_MC = 5,
-	NCSI_MODE_AEN = 6,
-	NCSI_MODE_FC = 7,
-	NCSI_MODE_MAX = 8,
-};
-
-struct ncsi_channel_version {
-	u32 version;
-	u32 alpha2;
-	u8 fw_name[12];
-	u32 fw_version;
-	u16 pci_ids[4];
-	u32 mf_id;
-};
-
-struct ncsi_channel_cap {
-	u32 index;
-	u32 cap;
-};
-
-struct ncsi_channel_mode {
-	u32 index;
-	u32 enable;
-	u32 size;
-	u32 data[8];
-};
-
-struct ncsi_channel_mac_filter {
-	u8 n_uc;
-	u8 n_mc;
-	u8 n_mixed;
-	u64 bitmap;
-	unsigned char *addrs;
-};
-
-struct ncsi_channel_vlan_filter {
-	u8 n_vids;
-	u64 bitmap;
-	u16 *vids;
-};
-
-struct ncsi_channel_stats {
-	u32 hnc_cnt_hi;
-	u32 hnc_cnt_lo;
-	u32 hnc_rx_bytes;
-	u32 hnc_tx_bytes;
-	u32 hnc_rx_uc_pkts;
-	u32 hnc_rx_mc_pkts;
-	u32 hnc_rx_bc_pkts;
-	u32 hnc_tx_uc_pkts;
-	u32 hnc_tx_mc_pkts;
-	u32 hnc_tx_bc_pkts;
-	u32 hnc_fcs_err;
-	u32 hnc_align_err;
-	u32 hnc_false_carrier;
-	u32 hnc_runt_pkts;
-	u32 hnc_jabber_pkts;
-	u32 hnc_rx_pause_xon;
-	u32 hnc_rx_pause_xoff;
-	u32 hnc_tx_pause_xon;
-	u32 hnc_tx_pause_xoff;
-	u32 hnc_tx_s_collision;
-	u32 hnc_tx_m_collision;
-	u32 hnc_l_collision;
-	u32 hnc_e_collision;
-	u32 hnc_rx_ctl_frames;
-	u32 hnc_rx_64_frames;
-	u32 hnc_rx_127_frames;
-	u32 hnc_rx_255_frames;
-	u32 hnc_rx_511_frames;
-	u32 hnc_rx_1023_frames;
-	u32 hnc_rx_1522_frames;
-	u32 hnc_rx_9022_frames;
-	u32 hnc_tx_64_frames;
-	u32 hnc_tx_127_frames;
-	u32 hnc_tx_255_frames;
-	u32 hnc_tx_511_frames;
-	u32 hnc_tx_1023_frames;
-	u32 hnc_tx_1522_frames;
-	u32 hnc_tx_9022_frames;
-	u32 hnc_rx_valid_bytes;
-	u32 hnc_rx_runt_pkts;
-	u32 hnc_rx_jabber_pkts;
-	u32 ncsi_rx_cmds;
-	u32 ncsi_dropped_cmds;
-	u32 ncsi_cmd_type_errs;
-	u32 ncsi_cmd_csum_errs;
-	u32 ncsi_rx_pkts;
-	u32 ncsi_tx_pkts;
-	u32 ncsi_tx_aen_pkts;
-	u32 pt_tx_pkts;
-	u32 pt_tx_dropped;
-	u32 pt_tx_channel_err;
-	u32 pt_tx_us_err;
-	u32 pt_rx_pkts;
-	u32 pt_rx_dropped;
-	u32 pt_rx_channel_err;
-	u32 pt_rx_us_err;
-	u32 pt_rx_os_err;
-};
-
-struct ncsi_package;
-
-struct ncsi_channel {
-	unsigned char id;
-	int state;
-	bool reconfigure_needed;
-	spinlock_t lock;
-	struct ncsi_package *package;
-	struct ncsi_channel_version version;
-	struct ncsi_channel_cap caps[6];
-	struct ncsi_channel_mode modes[8];
-	struct ncsi_channel_mac_filter mac_filter;
-	struct ncsi_channel_vlan_filter vlan_filter;
-	struct ncsi_channel_stats stats;
-	struct {
-		struct timer_list timer;
-		bool enabled;
-		unsigned int state;
-	} monitor;
-	struct list_head node;
-	struct list_head link;
-};
-
-struct ncsi_dev_priv;
-
-struct ncsi_package {
-	unsigned char id;
-	unsigned char uuid[16];
-	struct ncsi_dev_priv *ndp;
-	spinlock_t lock;
-	unsigned int channel_num;
-	struct list_head channels;
-	struct list_head node;
-	bool multi_channel;
-	u32 channel_whitelist;
-	struct ncsi_channel *preferred_channel;
-};
-
-struct ncsi_request {
-	unsigned char id;
-	bool used;
-	unsigned int flags;
-	struct ncsi_dev_priv *ndp;
-	struct sk_buff *cmd;
-	struct sk_buff *rsp;
-	struct timer_list timer;
-	bool enabled;
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr nlhdr;
-};
-
-struct ncsi_dev_priv {
-	struct ncsi_dev ndev;
-	unsigned int flags;
-	unsigned int gma_flag;
-	spinlock_t lock;
-	unsigned int package_probe_id;
-	unsigned int package_num;
-	struct list_head packages;
-	struct ncsi_channel *hot_channel;
-	struct ncsi_request requests[256];
-	unsigned int request_id;
-	unsigned int pending_req_num;
-	struct ncsi_package *active_package;
-	struct ncsi_channel *active_channel;
-	struct list_head channel_queue;
-	struct work_struct work;
-	struct packet_type ptype;
-	struct list_head node;
-	struct list_head vlan_vids;
-	bool multi_package;
-	bool mlx_multi_host;
-	u32 package_whitelist;
-};
-
-struct ncsi_cmd_arg {
-	struct ncsi_dev_priv *ndp;
-	unsigned char type;
-	unsigned char id;
-	unsigned char package;
-	unsigned char channel;
-	short unsigned int payload;
-	unsigned int req_flags;
-	union {
-		unsigned char bytes[16];
-		short unsigned int words[8];
-		unsigned int dwords[4];
-	};
-	unsigned char *data;
-	struct genl_info *info;
-};
-
-struct ncsi_pkt_hdr {
-	unsigned char mc_id;
-	unsigned char revision;
-	unsigned char reserved;
-	unsigned char id;
-	unsigned char type;
-	unsigned char channel;
-	__be16 length;
-	__be32 reserved1[2];
-};
-
-struct ncsi_cmd_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-};
-
-struct ncsi_cmd_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 checksum;
-	unsigned char pad[26];
-};
-
-struct ncsi_cmd_sp_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char hw_arbitration;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_dc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char ald;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_rc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 reserved;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_ae_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mc_id;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_sl_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 oem_mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_svf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be16 reserved;
-	__be16 vlan;
-	__be16 reserved1;
-	unsigned char index;
-	unsigned char enable;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ev_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_sma_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char mac[6];
-	unsigned char index;
-	unsigned char at_e;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ebf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_egmf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_snfc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_oem_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_cmd_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct sk_buff *, struct ncsi_cmd_arg *);
-};
-
-enum {
-	NCSI_CAP_GENERIC_HWA = 1,
-	NCSI_CAP_GENERIC_HDS = 2,
-	NCSI_CAP_GENERIC_FC = 4,
-	NCSI_CAP_GENERIC_FC1 = 8,
-	NCSI_CAP_GENERIC_MC = 16,
-	NCSI_CAP_GENERIC_HWA_UNKNOWN = 0,
-	NCSI_CAP_GENERIC_HWA_SUPPORT = 32,
-	NCSI_CAP_GENERIC_HWA_NOT_SUPPORT = 64,
-	NCSI_CAP_GENERIC_HWA_RESERVED = 96,
-	NCSI_CAP_GENERIC_HWA_MASK = 96,
-	NCSI_CAP_GENERIC_MASK = 127,
-	NCSI_CAP_BC_ARP = 1,
-	NCSI_CAP_BC_DHCPC = 2,
-	NCSI_CAP_BC_DHCPS = 4,
-	NCSI_CAP_BC_NETBIOS = 8,
-	NCSI_CAP_BC_MASK = 15,
-	NCSI_CAP_MC_IPV6_NEIGHBOR = 1,
-	NCSI_CAP_MC_IPV6_ROUTER = 2,
-	NCSI_CAP_MC_DHCPV6_RELAY = 4,
-	NCSI_CAP_MC_DHCPV6_WELL_KNOWN = 8,
-	NCSI_CAP_MC_IPV6_MLD = 16,
-	NCSI_CAP_MC_IPV6_NEIGHBOR_S = 32,
-	NCSI_CAP_MC_MASK = 63,
-	NCSI_CAP_AEN_LSC = 1,
-	NCSI_CAP_AEN_CR = 2,
-	NCSI_CAP_AEN_HDS = 4,
-	NCSI_CAP_AEN_MASK = 7,
-	NCSI_CAP_VLAN_ONLY = 1,
-	NCSI_CAP_VLAN_NO = 2,
-	NCSI_CAP_VLAN_ANY = 4,
-	NCSI_CAP_VLAN_MASK = 7,
-};
-
-struct ncsi_rsp_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	__be16 code;
-	__be16 reason;
-};
-
-struct ncsi_rsp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_rsp_oem_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_mlx_pkt {
-	unsigned char cmd_rev;
-	unsigned char cmd;
-	unsigned char param;
-	unsigned char optional;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_bcm_pkt {
-	unsigned char ver;
-	unsigned char type;
-	__be16 len;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_gls_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 other;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[10];
-};
-
-struct ncsi_rsp_gvi_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 ncsi_version;
-	unsigned char reserved[3];
-	unsigned char alpha2;
-	unsigned char fw_name[12];
-	__be32 fw_version;
-	__be16 pci_ids[4];
-	__be32 mf_id;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gc_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cap;
-	__be32 bc_cap;
-	__be32 mc_cap;
-	__be32 buf_cap;
-	__be32 aen_cap;
-	unsigned char vlan_cnt;
-	unsigned char mixed_cnt;
-	unsigned char mc_cnt;
-	unsigned char uc_cnt;
-	unsigned char reserved[2];
-	unsigned char vlan_mode;
-	unsigned char channel_cnt;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char mac_cnt;
-	unsigned char reserved[2];
-	unsigned char mac_enable;
-	unsigned char vlan_cnt;
-	unsigned char reserved1;
-	__be16 vlan_enable;
-	__be32 link_mode;
-	__be32 bc_mode;
-	__be32 valid_modes;
-	unsigned char vlan_mode;
-	unsigned char fc_mode;
-	unsigned char reserved2[2];
-	__be32 aen_mode;
-	unsigned char mac[6];
-	__be16 vlan;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gcps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cnt_hi;
-	__be32 cnt_lo;
-	__be32 rx_bytes;
-	__be32 tx_bytes;
-	__be32 rx_uc_pkts;
-	__be32 rx_mc_pkts;
-	__be32 rx_bc_pkts;
-	__be32 tx_uc_pkts;
-	__be32 tx_mc_pkts;
-	__be32 tx_bc_pkts;
-	__be32 fcs_err;
-	__be32 align_err;
-	__be32 false_carrier;
-	__be32 runt_pkts;
-	__be32 jabber_pkts;
-	__be32 rx_pause_xon;
-	__be32 rx_pause_xoff;
-	__be32 tx_pause_xon;
-	__be32 tx_pause_xoff;
-	__be32 tx_s_collision;
-	__be32 tx_m_collision;
-	__be32 l_collision;
-	__be32 e_collision;
-	__be32 rx_ctl_frames;
-	__be32 rx_64_frames;
-	__be32 rx_127_frames;
-	__be32 rx_255_frames;
-	__be32 rx_511_frames;
-	__be32 rx_1023_frames;
-	__be32 rx_1522_frames;
-	__be32 rx_9022_frames;
-	__be32 tx_64_frames;
-	__be32 tx_127_frames;
-	__be32 tx_255_frames;
-	__be32 tx_511_frames;
-	__be32 tx_1023_frames;
-	__be32 tx_1522_frames;
-	__be32 tx_9022_frames;
-	__be32 rx_valid_bytes;
-	__be32 rx_runt_pkts;
-	__be32 rx_jabber_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gns_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 rx_cmds;
-	__be32 dropped_cmds;
-	__be32 cmd_type_errs;
-	__be32 cmd_csum_errs;
-	__be32 rx_pkts;
-	__be32 tx_pkts;
-	__be32 tx_aen_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gnpts_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 tx_pkts;
-	__be32 tx_dropped;
-	__be32 tx_channel_err;
-	__be32 tx_us_err;
-	__be32 rx_pkts;
-	__be32 rx_dropped;
-	__be32 rx_channel_err;
-	__be32 rx_us_err;
-	__be32 rx_os_err;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gpuuid_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char uuid[16];
-	__be32 checksum;
-};
-
-struct ncsi_rsp_oem_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_rsp_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_aen_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	unsigned char reserved2[3];
-	unsigned char type;
-};
-
-struct ncsi_aen_lsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[14];
-};
-
-struct ncsi_aen_hncdsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_aen_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_dev_priv *, struct ncsi_aen_pkt_hdr *);
-};
-
-enum {
-	ncsi_dev_state_registered = 0,
-	ncsi_dev_state_functional = 256,
-	ncsi_dev_state_probe = 512,
-	ncsi_dev_state_config = 768,
-	ncsi_dev_state_suspend = 1024,
-};
-
-enum {
-	MLX_MC_RBT_SUPPORT = 1,
-	MLX_MC_RBT_AVL = 8,
-};
-
-enum {
-	ncsi_dev_state_major = 65280,
-	ncsi_dev_state_minor = 255,
-	ncsi_dev_state_probe_deselect = 513,
-	ncsi_dev_state_probe_package = 514,
-	ncsi_dev_state_probe_channel = 515,
-	ncsi_dev_state_probe_mlx_gma = 516,
-	ncsi_dev_state_probe_mlx_smaf = 517,
-	ncsi_dev_state_probe_cis = 518,
-	ncsi_dev_state_probe_gvi = 519,
-	ncsi_dev_state_probe_gc = 520,
-	ncsi_dev_state_probe_gls = 521,
-	ncsi_dev_state_probe_dp = 522,
-	ncsi_dev_state_config_sp = 769,
-	ncsi_dev_state_config_cis = 770,
-	ncsi_dev_state_config_oem_gma = 771,
-	ncsi_dev_state_config_clear_vids = 772,
-	ncsi_dev_state_config_svf = 773,
-	ncsi_dev_state_config_ev = 774,
-	ncsi_dev_state_config_sma = 775,
-	ncsi_dev_state_config_ebf = 776,
-	ncsi_dev_state_config_dgmf = 777,
-	ncsi_dev_state_config_ecnt = 778,
-	ncsi_dev_state_config_ec = 779,
-	ncsi_dev_state_config_ae = 780,
-	ncsi_dev_state_config_gls = 781,
-	ncsi_dev_state_config_done = 782,
-	ncsi_dev_state_suspend_select = 1025,
-	ncsi_dev_state_suspend_gls = 1026,
-	ncsi_dev_state_suspend_dcnt = 1027,
-	ncsi_dev_state_suspend_dc = 1028,
-	ncsi_dev_state_suspend_deselect = 1029,
-	ncsi_dev_state_suspend_done = 1030,
-};
-
-struct vlan_vid {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-};
-
-struct ncsi_oem_gma_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_cmd_arg *);
-};
-
-enum ncsi_nl_commands {
-	NCSI_CMD_UNSPEC = 0,
-	NCSI_CMD_PKG_INFO = 1,
-	NCSI_CMD_SET_INTERFACE = 2,
-	NCSI_CMD_CLEAR_INTERFACE = 3,
-	NCSI_CMD_SEND_CMD = 4,
-	NCSI_CMD_SET_PACKAGE_MASK = 5,
-	NCSI_CMD_SET_CHANNEL_MASK = 6,
-	__NCSI_CMD_AFTER_LAST = 7,
-	NCSI_CMD_MAX = 6,
-};
-
-enum ncsi_nl_attrs {
-	NCSI_ATTR_UNSPEC = 0,
-	NCSI_ATTR_IFINDEX = 1,
-	NCSI_ATTR_PACKAGE_LIST = 2,
-	NCSI_ATTR_PACKAGE_ID = 3,
-	NCSI_ATTR_CHANNEL_ID = 4,
-	NCSI_ATTR_DATA = 5,
-	NCSI_ATTR_MULTI_FLAG = 6,
-	NCSI_ATTR_PACKAGE_MASK = 7,
-	NCSI_ATTR_CHANNEL_MASK = 8,
-	__NCSI_ATTR_AFTER_LAST = 9,
-	NCSI_ATTR_MAX = 8,
-};
-
-enum ncsi_nl_pkg_attrs {
-	NCSI_PKG_ATTR_UNSPEC = 0,
-	NCSI_PKG_ATTR = 1,
-	NCSI_PKG_ATTR_ID = 2,
-	NCSI_PKG_ATTR_FORCED = 3,
-	NCSI_PKG_ATTR_CHANNEL_LIST = 4,
-	__NCSI_PKG_ATTR_AFTER_LAST = 5,
-	NCSI_PKG_ATTR_MAX = 4,
-};
-
-enum ncsi_nl_channel_attrs {
-	NCSI_CHANNEL_ATTR_UNSPEC = 0,
-	NCSI_CHANNEL_ATTR = 1,
-	NCSI_CHANNEL_ATTR_ID = 2,
-	NCSI_CHANNEL_ATTR_VERSION_MAJOR = 3,
-	NCSI_CHANNEL_ATTR_VERSION_MINOR = 4,
-	NCSI_CHANNEL_ATTR_VERSION_STR = 5,
-	NCSI_CHANNEL_ATTR_LINK_STATE = 6,
-	NCSI_CHANNEL_ATTR_ACTIVE = 7,
-	NCSI_CHANNEL_ATTR_FORCED = 8,
-	NCSI_CHANNEL_ATTR_VLAN_LIST = 9,
-	NCSI_CHANNEL_ATTR_VLAN_ID = 10,
-	__NCSI_CHANNEL_ATTR_AFTER_LAST = 11,
-	NCSI_CHANNEL_ATTR_MAX = 10,
-};
-
-struct sockaddr_xdp {
-	__u16 sxdp_family;
-	__u16 sxdp_flags;
-	__u32 sxdp_ifindex;
-	__u32 sxdp_queue_id;
-	__u32 sxdp_shared_umem_fd;
-};
-
-struct xdp_ring_offset {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
+struct rds_get_mr_args {
+	struct rds_iovec vec;
+	__u64 cookie_addr;
 	__u64 flags;
 };
 
-struct xdp_mmap_offsets {
-	struct xdp_ring_offset rx;
-	struct xdp_ring_offset tx;
-	struct xdp_ring_offset fr;
-	struct xdp_ring_offset cr;
+struct rds_get_mr_for_dest_args {
+	struct __kernel_sockaddr_storage dest_addr;
+	struct rds_iovec vec;
+	__u64 cookie_addr;
+	__u64 flags;
 };
 
-struct xdp_umem_reg {
-	__u64 addr;
-	__u64 len;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 flags;
+struct rds_free_mr_args {
+	rds_rdma_cookie_t cookie;
+	__u64 flags;
 };
 
-struct xdp_statistics {
-	__u64 rx_dropped;
-	__u64 rx_invalid_descs;
-	__u64 tx_invalid_descs;
-	__u64 rx_ring_full;
-	__u64 rx_fill_ring_empty_descs;
-	__u64 tx_ring_empty_descs;
+struct rds_atomic_args {
+	rds_rdma_cookie_t cookie;
+	__u64 local_addr;
+	__u64 remote_addr;
+	union {
+		struct {
+			__u64 compare;
+			__u64 swap;
+		} cswp;
+		struct {
+			__u64 add;
+		} fadd;
+		struct {
+			__u64 compare;
+			__u64 swap;
+			__u64 compare_mask;
+			__u64 swap_mask;
+		} m_cswp;
+		struct {
+			__u64 add;
+			__u64 nocarry_mask;
+		} m_fadd;
+	};
+	__u64 flags;
+	__u64 user_token;
 };
 
-struct xdp_options {
-	__u32 flags;
+enum {
+	ODP_NOT_NEEDED = 0,
+	ODP_ZEROBASED = 1,
+	ODP_VIRTUAL = 2,
 };
 
-struct xdp_desc {
-	__u64 addr;
-	__u32 len;
-	__u32 options;
+struct caif_dev_common {
+	void (*flowctrl)(struct net_device *, int);
+	enum caif_link_selector link_select;
+	int use_frag;
+	int use_fcs;
+	int use_stx;
 };
 
-struct xdp_ring;
-
-struct xsk_queue {
-	u32 ring_mask;
-	u32 nentries;
-	u32 cached_prod;
-	u32 cached_cons;
-	struct xdp_ring *ring;
-	u64 invalid_descs;
-	u64 queue_empty_descs;
+struct caif_device_entry {
+	struct cflayer layer;
+	struct list_head list;
+	struct net_device *netdev;
+	int *pcpu_refcnt;
+	spinlock_t flow_lock;
+	struct sk_buff *xoff_skb;
+	void (*xoff_skb_dtor)(struct sk_buff *);
+	bool xoff;
 };
 
-struct xdp_ring_offset_v1 {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
+struct caif_device_entry_list {
+	struct list_head list;
+	struct mutex lock;
 };
 
-struct xdp_mmap_offsets_v1 {
-	struct xdp_ring_offset_v1 rx;
-	struct xdp_ring_offset_v1 tx;
-	struct xdp_ring_offset_v1 fr;
-	struct xdp_ring_offset_v1 cr;
+struct cfcnfg;
+
+struct caif_net {
+	struct cfcnfg *cfg;
+	struct caif_device_entry_list caifdevs;
 };
 
-struct xsk_map_node {
-	struct list_head node;
-	struct xsk_map *map;
-	struct xdp_sock **map_entry;
+struct cfserl {
+	struct cflayer layer;
+	struct cfpkt *incomplete_frm;
+	spinlock_t sync;
+	bool usestx;
 };
 
-struct xdp_ring {
-	u32 producer;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 pad;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 consumer;
-	u32 flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_rxtx_ring {
-	struct xdp_ring ptrs;
-	struct xdp_desc desc[0];
-};
-
-struct xdp_umem_ring {
-	struct xdp_ring ptrs;
-	u64 desc[0];
+struct cfrfml {
+	struct cfsrvl serv;
+	struct cfpkt *incomplete_frm;
+	int fragment_size;
+	u8 seghead[6];
+	u16 pdu_size;
+	spinlock_t sync;
 };
 
 struct xsk_dma_map {
@@ -109807,513 +118062,223 @@
 	bool dma_need_sync;
 };
 
-struct xdp_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_show;
-	__u32 xdiag_cookie[2];
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
 };
 
-struct xdp_diag_msg {
-	__u8 xdiag_family;
-	__u8 xdiag_type;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_cookie[2];
+typedef struct elf32_hdr Elf32_Ehdr;
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
 };
 
-enum {
-	XDP_DIAG_NONE = 0,
-	XDP_DIAG_INFO = 1,
-	XDP_DIAG_UID = 2,
-	XDP_DIAG_RX_RING = 3,
-	XDP_DIAG_TX_RING = 4,
-	XDP_DIAG_UMEM = 5,
-	XDP_DIAG_UMEM_FILL_RING = 6,
-	XDP_DIAG_UMEM_COMPLETION_RING = 7,
-	XDP_DIAG_MEMINFO = 8,
-	XDP_DIAG_STATS = 9,
-	__XDP_DIAG_MAX = 10,
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
 };
 
-struct xdp_diag_info {
-	__u32 ifindex;
-	__u32 queue_id;
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
 };
 
-struct xdp_diag_ring {
-	__u32 entries;
+struct maple_metadata {
+	unsigned char end;
+	unsigned char gap;
 };
 
-struct xdp_diag_umem {
-	__u64 size;
-	__u32 id;
-	__u32 num_pages;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 ifindex;
-	__u32 queue_id;
-	__u32 flags;
-	__u32 refs;
-};
+struct maple_pnode;
 
-struct xdp_diag_stats {
-	__u64 n_rx_dropped;
-	__u64 n_rx_invalid;
-	__u64 n_rx_full;
-	__u64 n_fill_ring_empty;
-	__u64 n_tx_invalid;
-	__u64 n_tx_ring_empty;
-};
-
-struct mptcp_mib {
-	long unsigned int mibs[23];
-};
-
-struct mptcp_options_received {
-	u64 sndr_key;
-	u64 rcvr_key;
-	u64 data_ack;
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 dss: 1;
-	u16 add_addr: 1;
-	u16 rm_addr: 1;
-	u16 family: 4;
-	u16 echo: 1;
-	u16 backup: 1;
-	u32 token;
-	u32 nonce;
-	u64 thmac;
-	u8 hmac[20];
-	u8 join_id;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-	u8 addr_id;
-	u8 rm_id;
+struct maple_range_64 {
+	struct maple_pnode *parent;
+	long unsigned int pivot[15];
 	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
+		void *slot[16];
+		struct {
+			void *pad[15];
+			struct maple_metadata meta;
+		};
 	};
-	u64 ahmac;
-	u16 port;
 };
 
-struct mptcp_addr_info {
-	sa_family_t family;
-	__be16 port;
-	u8 id;
-	u8 flags;
-	int ifindex;
+struct maple_arange_64 {
+	struct maple_pnode *parent;
+	long unsigned int pivot[9];
+	void *slot[10];
+	long unsigned int gap[10];
+	struct maple_metadata meta;
+};
+
+struct maple_topiary {
+	struct maple_pnode *parent;
+	struct maple_enode *next;
+};
+
+enum maple_type {
+	maple_dense = 0,
+	maple_leaf_64 = 1,
+	maple_range_64 = 2,
+	maple_arange_64 = 3,
+};
+
+struct maple_node {
 	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
+		struct {
+			struct maple_pnode *parent;
+			void *slot[31];
+		};
+		struct {
+			void *pad;
+			struct callback_head rcu;
+			struct maple_enode *piv_parent;
+			unsigned char parent_slot;
+			enum maple_type type;
+			unsigned char slot_len;
+			unsigned int ma_flags;
+		};
+		struct maple_range_64 mr64;
+		struct maple_arange_64 ma64;
+		struct maple_alloc alloc;
 	};
 };
 
-enum mptcp_pm_status {
-	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
-	MPTCP_PM_RM_ADDR_RECEIVED = 1,
-	MPTCP_PM_ESTABLISHED = 2,
-	MPTCP_PM_SUBFLOW_ESTABLISHED = 3,
+struct ma_topiary {
+	struct maple_enode *head;
+	struct maple_enode *tail;
+	struct maple_tree *mtree;
 };
 
-struct mptcp_pm_data {
-	struct mptcp_addr_info local;
-	struct mptcp_addr_info remote;
-	struct list_head anno_list;
-	spinlock_t lock;
-	bool add_addr_signal;
-	bool rm_addr_signal;
-	bool server_side;
-	bool work_pending;
-	bool accept_addr;
-	bool accept_subflow;
-	bool add_addr_echo;
-	u8 add_addr_signaled;
-	u8 add_addr_accepted;
-	u8 local_addr_used;
-	u8 subflows;
-	u8 add_addr_signal_max;
-	u8 add_addr_accept_max;
-	u8 local_addr_max;
-	u8 subflows_max;
-	u8 status;
-	u8 rm_id;
+struct ma_wr_state {
+	struct ma_state *mas;
+	struct maple_node *node;
+	long unsigned int r_min;
+	long unsigned int r_max;
+	enum maple_type type;
+	unsigned char offset_end;
+	unsigned char node_end;
+	long unsigned int *pivots;
+	long unsigned int end_piv;
+	void **slots;
+	void *entry;
+	void *content;
 };
 
-struct mptcp_data_frag {
-	struct list_head list;
-	u64 data_seq;
-	int data_len;
-	int offset;
-	int overhead;
-	struct page *page;
+struct trace_event_raw_ma_op {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	void *node;
+	char __data[0];
 };
 
-struct mptcp_sock {
-	struct inet_connection_sock sk;
-	u64 local_key;
-	u64 remote_key;
-	u64 write_seq;
-	u64 ack_seq;
-	u64 rcv_data_fin_seq;
-	struct sock *last_snd;
-	int snd_burst;
-	atomic64_t snd_una;
-	long unsigned int timer_ival;
-	u32 token;
-	long unsigned int flags;
-	bool can_ack;
-	bool fully_established;
-	bool rcv_data_fin;
-	bool snd_data_fin_enable;
-	bool use_64bit_ack;
-	spinlock_t join_list_lock;
-	struct work_struct work;
-	struct sk_buff *ooo_last_skb;
-	struct rb_root out_of_order_queue;
-	struct list_head conn_list;
-	struct list_head rtx_queue;
-	struct list_head join_list;
-	struct skb_ext *cached_ext;
-	struct socket *subflow;
-	struct sock *first;
-	struct mptcp_pm_data pm;
-	struct {
-		u32 space;
-		u32 copied;
-		u64 time;
-		u64 rtt_us;
-	} rcvq_space;
+struct trace_event_raw_ma_read {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	void *node;
+	char __data[0];
 };
 
-struct mptcp_subflow_request_sock {
-	struct tcp_request_sock sk;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 backup: 1;
-	u8 local_id;
-	u8 remote_id;
-	u64 local_key;
-	u64 idsn;
-	u32 token;
-	u32 ssn_offset;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_nonce;
-	struct mptcp_sock *msk;
-	struct hlist_nulls_node token_node;
+struct trace_event_raw_ma_write {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	long unsigned int piv;
+	void *val;
+	void *node;
+	char __data[0];
 };
 
-enum mptcp_data_avail {
-	MPTCP_SUBFLOW_NODATA = 0,
-	MPTCP_SUBFLOW_DATA_AVAIL = 1,
-	MPTCP_SUBFLOW_OOO_DATA = 2,
-};
+struct trace_event_data_offsets_ma_op {};
 
-struct mptcp_subflow_context {
-	struct list_head node;
-	u64 local_key;
-	u64 remote_key;
-	u64 idsn;
-	u64 map_seq;
-	u32 snd_isn;
-	u32 token;
-	u32 rel_write_seq;
-	u32 map_subflow_seq;
-	u32 ssn_offset;
-	u32 map_data_len;
-	u32 request_mptcp: 1;
-	u32 request_join: 1;
-	u32 request_bkup: 1;
-	u32 mp_capable: 1;
-	u32 mp_join: 1;
-	u32 fully_established: 1;
-	u32 pm_notified: 1;
-	u32 conn_finished: 1;
-	u32 map_valid: 1;
-	u32 mpc_map: 1;
-	u32 backup: 1;
-	u32 rx_eof: 1;
-	u32 can_ack: 1;
-	enum mptcp_data_avail data_avail;
-	u32 remote_nonce;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_token;
-	u8 hmac[20];
-	u8 local_id;
-	u8 remote_id;
-	struct sock *tcp_sock;
-	struct sock *conn;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	void (*tcp_data_ready)(struct sock *);
-	void (*tcp_state_change)(struct sock *);
-	void (*tcp_write_space)(struct sock *);
-	struct callback_head rcu;
-};
+struct trace_event_data_offsets_ma_read {};
 
-enum linux_mptcp_mib_field {
-	MPTCP_MIB_NUM = 0,
-	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
-	MPTCP_MIB_MPCAPABLEPASSIVEACK = 2,
-	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 3,
-	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 4,
-	MPTCP_MIB_RETRANSSEGS = 5,
-	MPTCP_MIB_JOINNOTOKEN = 6,
-	MPTCP_MIB_JOINSYNRX = 7,
-	MPTCP_MIB_JOINSYNACKRX = 8,
-	MPTCP_MIB_JOINSYNACKMAC = 9,
-	MPTCP_MIB_JOINACKRX = 10,
-	MPTCP_MIB_JOINACKMAC = 11,
-	MPTCP_MIB_DSSNOMATCH = 12,
-	MPTCP_MIB_INFINITEMAPRX = 13,
-	MPTCP_MIB_OFOQUEUETAIL = 14,
-	MPTCP_MIB_OFOQUEUE = 15,
-	MPTCP_MIB_OFOMERGE = 16,
-	MPTCP_MIB_NODSSWINDOW = 17,
-	MPTCP_MIB_DUPDATA = 18,
-	MPTCP_MIB_ADDADDR = 19,
-	MPTCP_MIB_ECHOADD = 20,
-	MPTCP_MIB_RMADDR = 21,
-	MPTCP_MIB_RMSUBFLOW = 22,
-	__MPTCP_MIB_MAX = 23,
-};
+struct trace_event_data_offsets_ma_write {};
 
-struct mptcp_skb_cb {
-	u64 map_seq;
-	u64 end_seq;
-	u32 offset;
-};
+typedef void (*btf_trace_ma_op)(void *, const char *, struct ma_state *);
 
-struct subflow_send_info {
-	struct sock *ssk;
-	u64 ratio;
-};
+typedef void (*btf_trace_ma_read)(void *, const char *, struct ma_state *);
 
-enum mapping_status {
-	MAPPING_OK = 0,
-	MAPPING_INVALID = 1,
-	MAPPING_EMPTY = 2,
-	MAPPING_DATA_FIN = 3,
-	MAPPING_DUMMY = 4,
-};
+typedef void (*btf_trace_ma_write)(void *, const char *, struct ma_state *, long unsigned int, void *);
 
-struct token_bucket {
-	spinlock_t lock;
-	int chain_len;
-	struct hlist_nulls_head req_chain;
-	struct hlist_nulls_head msk_chain;
-};
-
-struct mptcp_pernet {
-	struct ctl_table_header *ctl_table_hdr;
-	int mptcp_enabled;
-};
-
-enum {
-	INET_ULP_INFO_UNSPEC = 0,
-	INET_ULP_INFO_NAME = 1,
-	INET_ULP_INFO_TLS = 2,
-	INET_ULP_INFO_MPTCP = 3,
-	__INET_ULP_INFO_MAX = 4,
-};
-
-enum {
-	MPTCP_SUBFLOW_ATTR_UNSPEC = 0,
-	MPTCP_SUBFLOW_ATTR_TOKEN_REM = 1,
-	MPTCP_SUBFLOW_ATTR_TOKEN_LOC = 2,
-	MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ = 3,
-	MPTCP_SUBFLOW_ATTR_MAP_SEQ = 4,
-	MPTCP_SUBFLOW_ATTR_MAP_SFSEQ = 5,
-	MPTCP_SUBFLOW_ATTR_SSN_OFFSET = 6,
-	MPTCP_SUBFLOW_ATTR_MAP_DATALEN = 7,
-	MPTCP_SUBFLOW_ATTR_FLAGS = 8,
-	MPTCP_SUBFLOW_ATTR_ID_REM = 9,
-	MPTCP_SUBFLOW_ATTR_ID_LOC = 10,
-	MPTCP_SUBFLOW_ATTR_PAD = 11,
-	__MPTCP_SUBFLOW_ATTR_MAX = 12,
-};
-
-enum {
-	MPTCP_PM_ATTR_UNSPEC = 0,
-	MPTCP_PM_ATTR_ADDR = 1,
-	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
-	MPTCP_PM_ATTR_SUBFLOWS = 3,
-	__MPTCP_PM_ATTR_MAX = 4,
-};
-
-enum {
-	MPTCP_PM_ADDR_ATTR_UNSPEC = 0,
-	MPTCP_PM_ADDR_ATTR_FAMILY = 1,
-	MPTCP_PM_ADDR_ATTR_ID = 2,
-	MPTCP_PM_ADDR_ATTR_ADDR4 = 3,
-	MPTCP_PM_ADDR_ATTR_ADDR6 = 4,
-	MPTCP_PM_ADDR_ATTR_PORT = 5,
-	MPTCP_PM_ADDR_ATTR_FLAGS = 6,
-	MPTCP_PM_ADDR_ATTR_IF_IDX = 7,
-	__MPTCP_PM_ADDR_ATTR_MAX = 8,
-};
-
-enum {
-	MPTCP_PM_CMD_UNSPEC = 0,
-	MPTCP_PM_CMD_ADD_ADDR = 1,
-	MPTCP_PM_CMD_DEL_ADDR = 2,
-	MPTCP_PM_CMD_GET_ADDR = 3,
-	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
-	MPTCP_PM_CMD_SET_LIMITS = 5,
-	MPTCP_PM_CMD_GET_LIMITS = 6,
-	__MPTCP_PM_CMD_AFTER_LAST = 7,
-};
-
-struct mptcp_pm_addr_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct callback_head rcu;
-};
-
-struct mptcp_pm_add_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct timer_list add_timer;
-	struct mptcp_sock *sock;
-	u8 retrans_times;
-};
-
-struct pm_nl_pernet {
-	spinlock_t lock;
-	struct list_head local_addr_list;
-	unsigned int addrs;
-	unsigned int add_addr_signal_max;
-	unsigned int add_addr_accept_max;
-	unsigned int local_addr_max;
-	unsigned int subflows_max;
-	unsigned int next_id;
-};
-
-struct join_entry {
-	u32 token;
-	u32 remote_nonce;
-	u32 local_nonce;
-	u8 join_id;
-	u8 local_id;
-	u8 backup;
-	u8 valid;
-};
-
-typedef struct {
-	u32 version;
-	u32 length;
-	u64 memory_protection_attribute;
-} efi_properties_table_t;
-
-enum efi_secureboot_mode {
-	efi_secureboot_mode_unset = 0,
-	efi_secureboot_mode_unknown = 1,
-	efi_secureboot_mode_disabled = 2,
-	efi_secureboot_mode_enabled = 3,
-};
-
-typedef union {
-	struct {
-		u32 revision;
-		efi_handle_t parent_handle;
-		efi_system_table_t *system_table;
-		efi_handle_t device_handle;
-		void *file_path;
-		void *reserved;
-		u32 load_options_size;
-		void *load_options;
-		void *image_base;
-		__u64 image_size;
-		unsigned int image_code_type;
-		unsigned int image_data_type;
-		efi_status_t (*unload)(efi_handle_t);
+struct maple_big_node {
+	struct maple_pnode *parent;
+	long unsigned int pivot[33];
+	union {
+		struct maple_enode *slot[34];
+		struct {
+			long unsigned int padding[21];
+			long unsigned int gap[21];
+		};
 	};
-	struct {
-		u32 revision;
-		u32 parent_handle;
-		u32 system_table;
-		u32 device_handle;
-		u32 file_path;
-		u32 reserved;
-		u32 load_options_size;
-		u32 load_options;
-		u32 image_base;
-		__u64 image_size;
-		u32 image_code_type;
-		u32 image_data_type;
-		u32 unload;
-	} mixed_mode;
-} efi_loaded_image_t;
-
-struct efi_boot_memmap {
-	efi_memory_desc_t **map;
-	long unsigned int *map_size;
-	long unsigned int *desc_size;
-	u32 *desc_ver;
-	long unsigned int *key_ptr;
-	long unsigned int *buff_size;
+	unsigned char b_end;
+	enum maple_type type;
 };
 
-struct exit_boot_struct {
-	efi_memory_desc_t *runtime_map;
-	int *runtime_entry_count;
-	void *new_fdt_addr;
-};
-
-typedef struct {
-	u64 size;
-	u64 file_size;
-	u64 phys_size;
-	efi_time_t create_time;
-	efi_time_t last_access_time;
-	efi_time_t modification_time;
-	__u64 attribute;
-	efi_char16_t filename[0];
-} efi_file_info_t;
-
-struct efi_file_protocol;
-
-typedef struct efi_file_protocol efi_file_protocol_t;
-
-struct efi_file_protocol {
-	u64 revision;
-	efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
-	efi_status_t (*close)(efi_file_protocol_t *);
-	efi_status_t (*delete)(efi_file_protocol_t *);
-	efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
-	efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
-	efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
-	efi_status_t (*set_position)(efi_file_protocol_t *, u64);
-	efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
-	efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
-	efi_status_t (*flush)(efi_file_protocol_t *);
-};
-
-struct efi_simple_file_system_protocol;
-
-typedef struct efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
-
-struct efi_simple_file_system_protocol {
-	u64 revision;
-	int (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
-};
-
-struct finfo {
-	efi_file_info_t info;
-	efi_char16_t filename[256];
+struct maple_subtree_state {
+	struct ma_state *orig_l;
+	struct ma_state *orig_r;
+	struct ma_state *l;
+	struct ma_state *m;
+	struct ma_state *r;
+	struct ma_topiary *free;
+	struct ma_topiary *destroy;
+	struct maple_big_node *bn;
 };
 
 typedef struct {
@@ -110380,52 +118345,19 @@
 	EFI_CMDLINE_LIST = 4,
 };
 
-union efi_rng_protocol;
-
-typedef union efi_rng_protocol efi_rng_protocol_t;
-
-union efi_rng_protocol {
-	struct {
-		efi_status_t (*get_info)(efi_rng_protocol_t *, long unsigned int *, efi_guid_t *);
-		efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, long unsigned int, u8 *);
-	};
-	struct {
-		u32 get_info;
-		u32 get_rng;
-	} mixed_mode;
-};
-
-typedef u32 efi_tcg2_event_log_format;
-
-union efi_tcg2_protocol {
-	struct {
-		void *get_capability;
-		efi_status_t (*get_event_log)(efi_handle_t, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
-		void *hash_log_extend_event;
-		void *submit_command;
-		void *get_active_pcr_banks;
-		void *set_active_pcr_banks;
-		void *get_result_of_set_active_pcr_banks;
-	};
-	struct {
-		u32 get_capability;
-		u32 get_event_log;
-		u32 hash_log_extend_event;
-		u32 submit_command;
-		u32 get_active_pcr_banks;
-		u32 set_active_pcr_banks;
-		u32 get_result_of_set_active_pcr_banks;
-	} mixed_mode;
-};
-
-typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
-
 struct efi_vendor_dev_path {
 	struct efi_generic_dev_path header;
 	efi_guid_t vendorguid;
 	u8 vendordata[0];
 };
 
+struct efi_tcg2_tagged_event {
+	u32 tagged_event_id;
+	u32 tagged_event_data_size;
+};
+
+typedef struct efi_tcg2_tagged_event efi_tcg2_tagged_event_t;
+
 union efi_load_file_protocol;
 
 typedef union efi_load_file_protocol efi_load_file_protocol_t;
@@ -110452,90 +118384,22 @@
 	u16 file_path_list_length;
 	const efi_char16_t *description;
 	const efi_device_path_protocol_t *file_path_list;
-	size_t optional_data_size;
+	u32 optional_data_size;
 	const void *optional_data;
 } efi_load_option_unpacked_t;
 
-typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
-
-typedef enum {
-	EfiPciIoWidthUint8 = 0,
-	EfiPciIoWidthUint16 = 1,
-	EfiPciIoWidthUint32 = 2,
-	EfiPciIoWidthUint64 = 3,
-	EfiPciIoWidthFifoUint8 = 4,
-	EfiPciIoWidthFifoUint16 = 5,
-	EfiPciIoWidthFifoUint32 = 6,
-	EfiPciIoWidthFifoUint64 = 7,
-	EfiPciIoWidthFillUint8 = 8,
-	EfiPciIoWidthFillUint16 = 9,
-	EfiPciIoWidthFillUint32 = 10,
-	EfiPciIoWidthFillUint64 = 11,
-	EfiPciIoWidthMaximum = 12,
-} EFI_PCI_IO_PROTOCOL_WIDTH;
-
-typedef struct {
-	u32 read;
-	u32 write;
-} efi_pci_io_protocol_access_32_t;
-
-typedef struct {
-	void *read;
-	void *write;
-} efi_pci_io_protocol_access_t;
-
-union efi_pci_io_protocol;
-
-typedef union efi_pci_io_protocol efi_pci_io_protocol_t;
-
-typedef efi_status_t (*efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, EFI_PCI_IO_PROTOCOL_WIDTH, u32, long unsigned int, void *);
-
-typedef struct {
-	efi_pci_io_protocol_cfg_t read;
-	efi_pci_io_protocol_cfg_t write;
-} efi_pci_io_protocol_config_access_t;
-
-union efi_pci_io_protocol {
-	struct {
-		void *poll_mem;
-		void *poll_io;
-		efi_pci_io_protocol_access_t mem;
-		efi_pci_io_protocol_access_t io;
-		efi_pci_io_protocol_config_access_t pci;
-		void *copy_mem;
-		void *map;
-		void *unmap;
-		void *allocate_buffer;
-		void *free_buffer;
-		void *flush;
-		efi_status_t (*get_location)(efi_pci_io_protocol_t *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);
-		void *attributes;
-		void *get_bar_attributes;
-		void *set_bar_attributes;
-		uint64_t romsize;
-		void *romimage;
-	};
-	struct {
-		u32 poll_mem;
-		u32 poll_io;
-		efi_pci_io_protocol_access_32_t mem;
-		efi_pci_io_protocol_access_32_t io;
-		efi_pci_io_protocol_access_32_t pci;
-		u32 copy_mem;
-		u32 map;
-		u32 unmap;
-		u32 allocate_buffer;
-		u32 free_buffer;
-		u32 flush;
-		u32 get_location;
-		u32 attributes;
-		u32 get_bar_attributes;
-		u32 set_bar_attributes;
-		u64 romsize;
-		u32 romimage;
-	} mixed_mode;
+enum efistub_event {
+	EFISTUB_EVT_INITRD = 0,
+	EFISTUB_EVT_LOAD_OPTIONS = 1,
+	EFISTUB_EVT_COUNT = 2,
 };
 
+struct efi_measured_event {
+	efi_tcg2_event_t event_data;
+	efi_tcg2_tagged_event_t tagged_event;
+	u8 tagged_event_data[0];
+} __attribute__((packed));
+
 #ifndef BPF_NO_PRESERVE_ACCESS_INDEX
 #pragma clang attribute pop
 #endif
diff --git a/libbpf-tools/maps.bpf.h b/libbpf-tools/maps.bpf.h
index 51d1012..ea5b568 100644
--- a/libbpf-tools/maps.bpf.h
+++ b/libbpf-tools/maps.bpf.h
@@ -10,7 +10,23 @@
 bpf_map_lookup_or_try_init(void *map, const void *key, const void *init)
 {
 	void *val;
-	long err;
+	/* bpf helper functions like bpf_map_update_elem() below normally return
+	 * long, but using int instead of long to store the result is a workaround
+	 * to avoid incorrectly evaluating err in cases where the following criteria
+	 * is met:
+	 *     the architecture is 64-bit
+	 *     the helper function return type is long
+	 *     the helper function returns the value of a call to a bpf_map_ops func
+	 *     the bpf_map_ops function return type is int
+	 *     the compiler inlines the helper function
+	 *     the compiler does not sign extend the result of the bpf_map_ops func
+	 *
+	 * if this criteria is met, at best an error can only be checked as zero or
+	 * non-zero. it will not be possible to check for a negative value or a
+	 * specific error value. this is because the sign bit would have been stuck
+	 * at the 32nd bit of a 64-bit long int.
+	 */
+	int err;
 
 	val = bpf_map_lookup_elem(map, key);
 	if (val)
diff --git a/libbpf-tools/mdflush.bpf.c b/libbpf-tools/mdflush.bpf.c
new file mode 100644
index 0000000..2c73f03
--- /dev/null
+++ b/libbpf-tools/mdflush.bpf.c
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/* Copyright (c) 2021~2022 Hengqi Chen */
+#include <vmlinux.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include "core_fixes.bpf.h"
+#include "mdflush.h"
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__type(key, __u32);
+	__type(value, __u32);
+} events SEC(".maps");
+
+SEC("fentry/md_flush_request")
+int BPF_PROG(md_flush_request, void *mddev, void *bio)
+{
+	__u64 pid = bpf_get_current_pid_tgid() >> 32;
+	struct event event = {};
+	struct gendisk *gendisk;
+
+	event.pid = pid;
+	gendisk = get_gendisk(bio);
+	BPF_CORE_READ_STR_INTO(event.disk, gendisk, disk_name);
+	bpf_get_current_comm(event.comm, sizeof(event.comm));
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+	return 0;
+}
+
+SEC("kprobe/md_flush_request")
+int BPF_KPROBE(kprobe_md_flush_request, void *mddev, void *bio)
+{
+	__u64 pid = bpf_get_current_pid_tgid() >> 32;
+	struct event event = {};
+	struct gendisk *gendisk;
+
+	event.pid = pid;
+	gendisk = get_gendisk(bio);
+	BPF_CORE_READ_STR_INTO(event.disk, gendisk, disk_name);
+	bpf_get_current_comm(event.comm, sizeof(event.comm));
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+	return 0;
+}
+
+char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/mdflush.c b/libbpf-tools/mdflush.c
new file mode 100644
index 0000000..f373bcf
--- /dev/null
+++ b/libbpf-tools/mdflush.c
@@ -0,0 +1,162 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+/*
+ * mdflush	Trace md flush events.
+ *
+ * Copyright (c) 2021~2022 Hengqi Chen
+ *
+ * Based on mdflush(8) from BCC by Brendan Gregg.
+ * 08-Nov-2021   Hengqi Chen   Created this.
+ */
+#include <argp.h>
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <time.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "mdflush.h"
+#include "mdflush.skel.h"
+#include "trace_helpers.h"
+
+#define PERF_BUFFER_PAGES	16
+#define PERF_POLL_TIMEOUT_MS	100
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+
+static volatile sig_atomic_t exiting = 0;
+static bool verbose = false;
+
+const char *argp_program_version = "mdflush 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace md flush events.\n"
+"\n"
+"USAGE: mdflush\n";
+
+static const struct argp_option opts[] = {
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	struct event *e = data;
+	time_t t;
+	struct tm *tm;
+	char ts[32];
+
+	time(&t);
+	tm = localtime(&t);
+	strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+	printf("%-8s %-7d %-16s %-s\n",
+	       ts, e->pid, e->comm, e->disk);
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	warn("lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct perf_buffer *pb = NULL;
+	struct mdflush_bpf *obj;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = mdflush_bpf__open();
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	if (fentry_can_attach("md_flush_request", NULL))
+		bpf_program__set_autoload(obj->progs.kprobe_md_flush_request, false);
+	else
+		bpf_program__set_autoload(obj->progs.md_flush_request, false);
+
+	err = mdflush_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = mdflush_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
+			      handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		warn("failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	printf("Tracing md flush requests... Hit Ctrl-C to end.\n");
+	printf("%-8s %-7s %-16s %-s\n",
+	       "TIME", "PID", "COMM", "DEVICE");
+
+	while (!exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			warn("error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	mdflush_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/mdflush.h b/libbpf-tools/mdflush.h
new file mode 100644
index 0000000..18cd723
--- /dev/null
+++ b/libbpf-tools/mdflush.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/* Copyright (c) 2021~2022 Hengqi Chen */
+#ifndef __MDFLUSH_H
+#define __MDFLUSH_H
+
+#define TASK_COMM_LEN	16
+#define DISK_NAME_LEN	32
+
+struct event {
+	__u32 pid;
+	char comm[TASK_COMM_LEN];
+	char disk[DISK_NAME_LEN];
+};
+
+#endif /* __MDFLUSH_H */
diff --git a/libbpf-tools/memleak.bpf.c b/libbpf-tools/memleak.bpf.c
new file mode 100644
index 0000000..3352f22
--- /dev/null
+++ b/libbpf-tools/memleak.bpf.c
@@ -0,0 +1,459 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2023 Meta Platforms, Inc. and affiliates.
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+
+#include "maps.bpf.h"
+#include "memleak.h"
+#include "core_fixes.bpf.h"
+
+const volatile size_t min_size = 0;
+const volatile size_t max_size = -1;
+const volatile size_t page_size = 4096;
+const volatile __u64 sample_rate = 1;
+const volatile bool trace_all = false;
+const volatile __u64 stack_flags = 0;
+const volatile bool wa_missing_free = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, u32);
+	__type(value, u64);
+	__uint(max_entries, 10240);
+} sizes SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, u64); /* address */
+	__type(value, struct alloc_info);
+	__uint(max_entries, ALLOCS_MAX_ENTRIES);
+} allocs SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, u64); /* stack id */
+	__type(value, union combined_alloc_info);
+	__uint(max_entries, COMBINED_ALLOCS_MAX_ENTRIES);
+} combined_allocs SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, u64);
+	__type(value, u64);
+	__uint(max_entries, 10240);
+} memptrs SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_STACK_TRACE);
+	__type(key, u32);
+} stack_traces SEC(".maps");
+
+static union combined_alloc_info initial_cinfo;
+
+static void update_statistics_add(u64 stack_id, u64 sz)
+{
+	union combined_alloc_info *existing_cinfo;
+
+	existing_cinfo = bpf_map_lookup_or_try_init(&combined_allocs, &stack_id, &initial_cinfo);
+	if (!existing_cinfo)
+		return;
+
+	const union combined_alloc_info incremental_cinfo = {
+		.total_size = sz,
+		.number_of_allocs = 1
+	};
+
+	__sync_fetch_and_add(&existing_cinfo->bits, incremental_cinfo.bits);
+}
+
+static void update_statistics_del(u64 stack_id, u64 sz)
+{
+	union combined_alloc_info *existing_cinfo;
+
+	existing_cinfo = bpf_map_lookup_elem(&combined_allocs, &stack_id);
+	if (!existing_cinfo) {
+		bpf_printk("failed to lookup combined allocs\n");
+
+		return;
+	}
+
+	const union combined_alloc_info decremental_cinfo = {
+		.total_size = sz,
+		.number_of_allocs = 1
+	};
+
+	__sync_fetch_and_sub(&existing_cinfo->bits, decremental_cinfo.bits);
+}
+
+static int gen_alloc_enter(size_t size)
+{
+	if (size < min_size || size > max_size)
+		return 0;
+
+	if (sample_rate > 1) {
+		if (bpf_ktime_get_ns() % sample_rate != 0)
+			return 0;
+	}
+
+	const u32 tid = bpf_get_current_pid_tgid();
+	bpf_map_update_elem(&sizes, &tid, &size, BPF_ANY);
+
+	if (trace_all)
+		bpf_printk("alloc entered, size = %lu\n", size);
+
+	return 0;
+}
+
+static int gen_alloc_exit2(void *ctx, u64 address)
+{
+	const u32 tid = bpf_get_current_pid_tgid();
+	struct alloc_info info;
+
+	const u64* size = bpf_map_lookup_elem(&sizes, &tid);
+	if (!size)
+		return 0; // missed alloc entry
+
+	__builtin_memset(&info, 0, sizeof(info));
+
+	info.size = *size;
+	bpf_map_delete_elem(&sizes, &tid);
+
+	if (address != 0) {
+		info.timestamp_ns = bpf_ktime_get_ns();
+
+		info.stack_id = bpf_get_stackid(ctx, &stack_traces, stack_flags);
+
+		bpf_map_update_elem(&allocs, &address, &info, BPF_ANY);
+
+		update_statistics_add(info.stack_id, info.size);
+	}
+
+	if (trace_all) {
+		bpf_printk("alloc exited, size = %lu, result = %lx\n",
+				info.size, address);
+	}
+
+	return 0;
+}
+
+static int gen_alloc_exit(struct pt_regs *ctx)
+{
+	return gen_alloc_exit2(ctx, PT_REGS_RC(ctx));
+}
+
+static int gen_free_enter(const void *address)
+{
+	const u64 addr = (u64)address;
+
+	const struct alloc_info *info = bpf_map_lookup_elem(&allocs, &addr);
+	if (!info)
+		return 0;
+
+	bpf_map_delete_elem(&allocs, &addr);
+	update_statistics_del(info->stack_id, info->size);
+
+	if (trace_all) {
+		bpf_printk("free entered, address = %lx, size = %lu\n",
+				address, info->size);
+	}
+
+	return 0;
+}
+
+SEC("uprobe")
+int BPF_KPROBE(malloc_enter, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(malloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(free_enter, void *address)
+{
+	return gen_free_enter(address);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(calloc_enter, size_t nmemb, size_t size)
+{
+	return gen_alloc_enter(nmemb * size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(calloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(realloc_enter, void *ptr, size_t size)
+{
+	gen_free_enter(ptr);
+
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(realloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(mmap_enter, void *address, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(mmap_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(munmap_enter, void *address)
+{
+	return gen_free_enter(address);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(posix_memalign_enter, void **memptr, size_t alignment, size_t size)
+{
+	const u64 memptr64 = (u64)(size_t)memptr;
+	const u32 tid = bpf_get_current_pid_tgid();
+	bpf_map_update_elem(&memptrs, &tid, &memptr64, BPF_ANY);
+
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(posix_memalign_exit)
+{
+	u64 *memptr64;
+	void *addr;
+	const u32 tid = bpf_get_current_pid_tgid();
+
+	memptr64 = bpf_map_lookup_elem(&memptrs, &tid);
+	if (!memptr64)
+		return 0;
+
+	bpf_map_delete_elem(&memptrs, &tid);
+
+	if (bpf_probe_read_user(&addr, sizeof(void*), (void*)(size_t)*memptr64))
+		return 0;
+
+	const u64 addr64 = (u64)(size_t)addr;
+
+	return gen_alloc_exit2(ctx, addr64);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(aligned_alloc_enter, size_t alignment, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(aligned_alloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(valloc_enter, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(valloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(memalign_enter, size_t alignment, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(memalign_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("uprobe")
+int BPF_KPROBE(pvalloc_enter, size_t size)
+{
+	return gen_alloc_enter(size);
+}
+
+SEC("uretprobe")
+int BPF_KRETPROBE(pvalloc_exit)
+{
+	return gen_alloc_exit(ctx);
+}
+
+SEC("tracepoint/kmem/kmalloc")
+int memleak__kmalloc(void *ctx)
+{
+	const void *ptr;
+	size_t bytes_alloc;
+
+	if (has_kmem_alloc()) {
+		struct trace_event_raw_kmem_alloc___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+	} else {
+		struct trace_event_raw_kmalloc___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+	}
+
+	if (wa_missing_free)
+		gen_free_enter(ptr);
+
+	gen_alloc_enter(bytes_alloc);
+
+	return gen_alloc_exit2(ctx, (u64)ptr);
+}
+
+SEC("tracepoint/kmem/kmalloc_node")
+int memleak__kmalloc_node(void *ctx)
+{
+	const void *ptr;
+	size_t bytes_alloc;
+
+	if (has_kmem_alloc_node()) {
+		struct trace_event_raw_kmem_alloc_node___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+
+		if (wa_missing_free)
+			gen_free_enter(ptr);
+
+		gen_alloc_enter( bytes_alloc);
+
+		return gen_alloc_exit2(ctx, (u64)ptr);
+	} else {
+		/* tracepoint is disabled if not exist, avoid compile warning */
+		return 0;
+	}
+}
+
+SEC("tracepoint/kmem/kfree")
+int memleak__kfree(void *ctx)
+{
+	const void *ptr;
+
+	if (has_kfree()) {
+		struct trace_event_raw_kfree___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+	} else {
+		struct trace_event_raw_kmem_free___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+	}
+
+	return gen_free_enter(ptr);
+}
+
+SEC("tracepoint/kmem/kmem_cache_alloc")
+int memleak__kmem_cache_alloc(void *ctx)
+{
+	const void *ptr;
+	size_t bytes_alloc;
+
+	if (has_kmem_alloc()) {
+		struct trace_event_raw_kmem_alloc___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+	} else {
+		struct trace_event_raw_kmem_cache_alloc___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+	}
+
+	if (wa_missing_free)
+		gen_free_enter(ptr);
+
+	gen_alloc_enter(bytes_alloc);
+
+	return gen_alloc_exit2(ctx, (u64)ptr);
+}
+
+SEC("tracepoint/kmem/kmem_cache_alloc_node")
+int memleak__kmem_cache_alloc_node(void *ctx)
+{
+	const void *ptr;
+	size_t bytes_alloc;
+
+	if (has_kmem_alloc_node()) {
+		struct trace_event_raw_kmem_alloc_node___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+		bytes_alloc = BPF_CORE_READ(args, bytes_alloc);
+
+		if (wa_missing_free)
+			gen_free_enter(ptr);
+
+		gen_alloc_enter(bytes_alloc);
+
+		return gen_alloc_exit2(ctx, (u64)ptr);
+	} else {
+		/* tracepoint is disabled if not exist, avoid compile warning */
+		return 0;
+	}
+}
+
+SEC("tracepoint/kmem/kmem_cache_free")
+int memleak__kmem_cache_free(void *ctx)
+{
+	const void *ptr;
+
+	if (has_kmem_cache_free()) {
+		struct trace_event_raw_kmem_cache_free___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+	} else {
+		struct trace_event_raw_kmem_free___x *args = ctx;
+		ptr = BPF_CORE_READ(args, ptr);
+	}
+
+	return gen_free_enter(ptr);
+}
+
+SEC("tracepoint/kmem/mm_page_alloc")
+int memleak__mm_page_alloc(struct trace_event_raw_mm_page_alloc *ctx)
+{
+	gen_alloc_enter(page_size << ctx->order);
+
+	return gen_alloc_exit2(ctx, ctx->pfn);
+}
+
+SEC("tracepoint/kmem/mm_page_free")
+int memleak__mm_page_free(struct trace_event_raw_mm_page_free *ctx)
+{
+	return gen_free_enter((void *)ctx->pfn);
+}
+
+SEC("tracepoint/percpu/percpu_alloc_percpu")
+int memleak__percpu_alloc_percpu(struct trace_event_raw_percpu_alloc_percpu *ctx)
+{
+	gen_alloc_enter(ctx->bytes_alloc);
+
+	return gen_alloc_exit2(ctx, (u64)(ctx->ptr));
+}
+
+SEC("tracepoint/percpu/percpu_free_percpu")
+int memleak__percpu_free_percpu(struct trace_event_raw_percpu_free_percpu *ctx)
+{
+	return gen_free_enter(ctx->ptr);
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/memleak.c b/libbpf-tools/memleak.c
new file mode 100644
index 0000000..1f28ebd
--- /dev/null
+++ b/libbpf-tools/memleak.c
@@ -0,0 +1,1068 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+// Copyright (c) 2023 Meta Platforms, Inc. and affiliates.
+//
+// Based on memleak(8) from BCC by Sasha Goldshtein and others.
+// 1-Mar-2023   JP Kobryn   Created this.
+#include <argp.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/eventfd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+
+#include "memleak.h"
+#include "memleak.skel.h"
+#include "trace_helpers.h"
+
+#ifdef USE_BLAZESYM
+#include "blazesym.h"
+#endif
+
+static struct env {
+	int interval;
+	int nr_intervals;
+	pid_t pid;
+	bool trace_all;
+	bool show_allocs;
+	bool combined_only;
+	int min_age_ns;
+	uint64_t sample_rate;
+	int top_stacks;
+	size_t min_size;
+	size_t max_size;
+	char object[32];
+
+	bool wa_missing_free;
+	bool percpu;
+	int perf_max_stack_depth;
+	int stack_map_max_entries;
+	long page_size;
+	bool kernel_trace;
+	bool verbose;
+	char command[32];
+} env = {
+	.interval = 5, // posarg 1
+	.nr_intervals = -1, // posarg 2
+	.pid = -1, // -p --pid
+	.trace_all = false, // -t --trace
+	.show_allocs = false, // -a --show-allocs
+	.combined_only = false, // --combined-only
+	.min_age_ns = 500, // -o --older (arg * 1e6)
+	.wa_missing_free = false, // --wa-missing-free
+	.sample_rate = 1, // -s --sample-rate
+	.top_stacks = 10, // -T --top
+	.min_size = 0, // -z --min-size
+	.max_size = -1, // -Z --max-size
+	.object = {0}, // -O --obj
+	.percpu = false, // --percpu
+	.perf_max_stack_depth = 127,
+	.stack_map_max_entries = 10240,
+	.page_size = 1,
+	.kernel_trace = true,
+	.verbose = false,
+	.command = {0}, // -c --command
+};
+
+struct allocation_node {
+	uint64_t address;
+	size_t size;
+	struct allocation_node* next;
+};
+
+struct allocation {
+	uint64_t stack_id;
+	size_t size;
+	size_t count;
+	struct allocation_node* allocations;
+};
+
+#define __ATTACH_UPROBE(skel, sym_name, prog_name, is_retprobe) \
+	do { \
+		LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts, \
+				.func_name = #sym_name, \
+				.retprobe = is_retprobe); \
+		skel->links.prog_name = bpf_program__attach_uprobe_opts( \
+				skel->progs.prog_name, \
+				env.pid, \
+				env.object, \
+				0, \
+				&uprobe_opts); \
+	} while (false)
+
+#define __CHECK_PROGRAM(skel, prog_name) \
+	do { \
+		if (!skel->links.prog_name) { \
+			perror("no program attached for " #prog_name); \
+			return -errno; \
+		} \
+	} while (false)
+
+#define __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, is_retprobe) \
+	do { \
+		__ATTACH_UPROBE(skel, sym_name, prog_name, is_retprobe); \
+		__CHECK_PROGRAM(skel, prog_name); \
+	} while (false)
+
+#define ATTACH_UPROBE(skel, sym_name, prog_name) __ATTACH_UPROBE(skel, sym_name, prog_name, false)
+#define ATTACH_URETPROBE(skel, sym_name, prog_name) __ATTACH_UPROBE(skel, sym_name, prog_name, true)
+
+#define ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name) __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, false)
+#define ATTACH_URETPROBE_CHECKED(skel, sym_name, prog_name) __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, true)
+
+static void sig_handler(int signo);
+
+static long argp_parse_long(int key, const char *arg, struct argp_state *state);
+static error_t argp_parse_arg(int key, char *arg, struct argp_state *state);
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args);
+
+static int event_init(int *fd);
+static int event_wait(int fd, uint64_t expected_event);
+static int event_notify(int fd, uint64_t event);
+
+static pid_t fork_sync_exec(const char *command, int fd);
+
+#ifdef USE_BLAZESYM
+static void print_stack_frame_by_blazesym(size_t frame, uint64_t addr, const blazesym_csym *sym);
+static void print_stack_frames_by_blazesym();
+#else
+static void print_stack_frames_by_ksyms();
+static void print_stack_frames_by_syms_cache();
+#endif
+static int print_stack_frames(struct allocation *allocs, size_t nr_allocs, int stack_traces_fd);
+
+static int alloc_size_compare(const void *a, const void *b);
+
+static int print_outstanding_allocs(int allocs_fd, int stack_traces_fd);
+static int print_outstanding_combined_allocs(int combined_allocs_fd, int stack_traces_fd);
+
+static bool has_kernel_node_tracepoints();
+static void disable_kernel_node_tracepoints(struct memleak_bpf *skel);
+static void disable_kernel_percpu_tracepoints(struct memleak_bpf *skel);
+static void disable_kernel_tracepoints(struct memleak_bpf *skel);
+
+static int attach_uprobes(struct memleak_bpf *skel);
+
+const char *argp_program_version = "memleak 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+
+const char argp_args_doc[] =
+"Trace outstanding memory allocations\n"
+"\n"
+"USAGE: memleak [-h] [-c COMMAND] [-p PID] [-t] [-n] [-a] [-o AGE_MS] [-C] [-F] [-s SAMPLE_RATE] [-T TOP_STACKS] [-z MIN_SIZE] [-Z MAX_SIZE] [-O OBJECT] [-P] [INTERVAL] [INTERVALS]\n"
+"\n"
+"EXAMPLES:\n"
+"./memleak -p $(pidof allocs)\n"
+"        Trace allocations and display a summary of 'leaked' (outstanding)\n"
+"        allocations every 5 seconds\n"
+"./memleak -p $(pidof allocs) -t\n"
+"        Trace allocations and display each individual allocator function call\n"
+"./memleak -ap $(pidof allocs) 10\n"
+"        Trace allocations and display allocated addresses, sizes, and stacks\n"
+"        every 10 seconds for outstanding allocations\n"
+"./memleak -c './allocs'\n"
+"        Run the specified command and trace its allocations\n"
+"./memleak\n"
+"        Trace allocations in kernel mode and display a summary of outstanding\n"
+"        allocations every 5 seconds\n"
+"./memleak -o 60000\n"
+"        Trace allocations in kernel mode and display a summary of outstanding\n"
+"        allocations that are at least one minute (60 seconds) old\n"
+"./memleak -s 5\n"
+"        Trace roughly every 5th allocation, to reduce overhead\n"
+"";
+
+static const struct argp_option argp_options[] = {
+	// name/longopt:str, key/shortopt:int, arg:str, flags:int, doc:str
+	{"pid", 'p', "PID", 0, "process ID to trace. if not specified, trace kernel allocs"},
+	{"trace", 't', 0, 0, "print trace messages for each alloc/free call" },
+	{"show-allocs", 'a', 0, 0, "show allocation addresses and sizes as well as call stacks"},
+	{"older", 'o', "AGE_MS", 0, "prune allocations younger than this age in milliseconds"},
+	{"command", 'c', "COMMAND", 0, "execute and trace the specified command"},
+	{"combined-only", 'C', 0, 0, "show combined allocation statistics only"},
+	{"wa-missing-free", 'F', 0, 0, "workaround to alleviate misjudgments when free is missing"},
+	{"sample-rate", 's', "SAMPLE_RATE", 0, "sample every N-th allocation to decrease the overhead"},
+	{"top", 'T', "TOP_STACKS", 0, "display only this many top allocating stacks (by size)"},
+	{"min-size", 'z', "MIN_SIZE", 0, "capture only allocations larger than this size"},
+	{"max-size", 'Z', "MAX_SIZE", 0, "capture only allocations smaller than this size"},
+	{"obj", 'O', "OBJECT", 0, "attach to allocator functions in the specified object"},
+	{"percpu", 'P', NULL, 0, "trace percpu allocations"},
+	{},
+};
+
+static volatile sig_atomic_t exiting;
+static volatile sig_atomic_t child_exited;
+
+static struct sigaction sig_action = {
+	.sa_handler = sig_handler
+};
+
+static int child_exec_event_fd = -1;
+
+#ifdef USE_BLAZESYM
+static blazesym *symbolizer;
+static sym_src_cfg src_cfg;
+#else
+struct syms_cache *syms_cache;
+struct ksyms *ksyms;
+#endif
+static void (*print_stack_frames_func)();
+
+static uint64_t *stack;
+
+static struct allocation *allocs;
+
+static const char default_object[] = "libc.so.6";
+
+int main(int argc, char *argv[])
+{
+	int ret = 0;
+	struct memleak_bpf *skel = NULL;
+
+	static const struct argp argp = {
+		.options = argp_options,
+		.parser = argp_parse_arg,
+		.doc = argp_args_doc,
+	};
+
+	// parse command line args to env settings
+	if (argp_parse(&argp, argc, argv, 0, NULL, NULL)) {
+		fprintf(stderr, "failed to parse args\n");
+
+		goto cleanup;
+	}
+
+	// install signal handler
+	if (sigaction(SIGINT, &sig_action, NULL) || sigaction(SIGCHLD, &sig_action, NULL)) {
+		perror("failed to set up signal handling");
+		ret = -errno;
+
+		goto cleanup;
+	}
+
+	// post-processing and validation of env settings
+	if (env.min_size > env.max_size) {
+		fprintf(stderr, "min size (-z) can't be greater than max_size (-Z)\n");
+		return 1;
+	}
+
+	if (!strlen(env.object)) {
+		printf("using default object: %s\n", default_object);
+		strncpy(env.object, default_object, sizeof(env.object) - 1);
+	}
+
+	env.page_size = sysconf(_SC_PAGE_SIZE);
+	printf("using page size: %ld\n", env.page_size);
+
+	env.kernel_trace = env.pid < 0 && !strlen(env.command);
+	printf("tracing kernel: %s\n", env.kernel_trace ? "true" : "false");
+
+	// if specific userspace program was specified,
+	// create the child process and use an eventfd to synchronize the call to exec()
+	if (strlen(env.command)) {
+		if (env.pid >= 0) {
+			fprintf(stderr, "cannot specify both command and pid\n");
+			ret = 1;
+
+			goto cleanup;
+		}
+
+		if (event_init(&child_exec_event_fd)) {
+			fprintf(stderr, "failed to init child event\n");
+
+			goto cleanup;
+		}
+
+		const pid_t child_pid = fork_sync_exec(env.command, child_exec_event_fd);
+		if (child_pid < 0) {
+			perror("failed to spawn child process");
+			ret = -errno;
+
+			goto cleanup;
+		}
+
+		env.pid = child_pid;
+	}
+
+	// allocate space for storing a stack trace
+	stack = calloc(env.perf_max_stack_depth, sizeof(*stack));
+	if (!stack) {
+		fprintf(stderr, "failed to allocate stack array\n");
+		ret = -ENOMEM;
+
+		goto cleanup;
+	}
+
+#ifdef USE_BLAZESYM
+	if (env.pid < 0) {
+		src_cfg.src_type = SRC_T_KERNEL;
+		src_cfg.params.kernel.kallsyms = NULL;
+		src_cfg.params.kernel.kernel_image = NULL;
+	} else {
+		src_cfg.src_type = SRC_T_PROCESS;
+		src_cfg.params.process.pid = env.pid;
+	}
+#endif
+
+	// allocate space for storing "allocation" structs
+	if (env.combined_only)
+		allocs = calloc(COMBINED_ALLOCS_MAX_ENTRIES, sizeof(*allocs));
+	else
+		allocs = calloc(ALLOCS_MAX_ENTRIES, sizeof(*allocs));
+
+	if (!allocs) {
+		fprintf(stderr, "failed to allocate array\n");
+		ret = -ENOMEM;
+
+		goto cleanup;
+	}
+
+	libbpf_set_print(libbpf_print_fn);
+
+	skel = memleak_bpf__open();
+	if (!skel) {
+		fprintf(stderr, "failed to open bpf object\n");
+		ret = 1;
+
+		goto cleanup;
+	}
+
+	skel->rodata->min_size = env.min_size;
+	skel->rodata->max_size = env.max_size;
+	skel->rodata->page_size = env.page_size;
+	skel->rodata->sample_rate = env.sample_rate;
+	skel->rodata->trace_all = env.trace_all;
+	skel->rodata->stack_flags = env.kernel_trace ? 0 : BPF_F_USER_STACK;
+	skel->rodata->wa_missing_free = env.wa_missing_free;
+
+	bpf_map__set_value_size(skel->maps.stack_traces,
+				env.perf_max_stack_depth * sizeof(unsigned long));
+	bpf_map__set_max_entries(skel->maps.stack_traces, env.stack_map_max_entries);
+
+	// disable kernel tracepoints based on settings or availability
+	if (env.kernel_trace) {
+		if (!has_kernel_node_tracepoints())
+			disable_kernel_node_tracepoints(skel);
+
+		if (!env.percpu)
+			disable_kernel_percpu_tracepoints(skel);
+	} else {
+		disable_kernel_tracepoints(skel);
+	}
+
+	ret = memleak_bpf__load(skel);
+	if (ret) {
+		fprintf(stderr, "failed to load bpf object\n");
+
+		goto cleanup;
+	}
+
+	const int allocs_fd = bpf_map__fd(skel->maps.allocs);
+	const int combined_allocs_fd = bpf_map__fd(skel->maps.combined_allocs);
+	const int stack_traces_fd = bpf_map__fd(skel->maps.stack_traces);
+
+	// if userspace oriented, attach upbrobes
+	if (!env.kernel_trace) {
+		ret = attach_uprobes(skel);
+		if (ret) {
+			fprintf(stderr, "failed to attach uprobes\n");
+
+			goto cleanup;
+		}
+	}
+
+	ret = memleak_bpf__attach(skel);
+	if (ret) {
+		fprintf(stderr, "failed to attach bpf program(s)\n");
+
+		goto cleanup;
+	}
+
+	// if running a specific userspace program,
+	// notify the child process that it can exec its program
+	if (strlen(env.command)) {
+		ret = event_notify(child_exec_event_fd, 1);
+		if (ret) {
+			fprintf(stderr, "failed to notify child to perform exec\n");
+
+			goto cleanup;
+		}
+	}
+
+#ifdef USE_BLAZESYM
+	symbolizer = blazesym_new();
+	if (!symbolizer) {
+		fprintf(stderr, "Failed to load blazesym\n");
+		ret = -ENOMEM;
+
+		goto cleanup;
+	}
+	print_stack_frames_func = print_stack_frames_by_blazesym;
+#else
+	if (env.kernel_trace) {
+		ksyms = ksyms__load();
+		if (!ksyms) {
+			fprintf(stderr, "Failed to load ksyms\n");
+			ret = -ENOMEM;
+
+			goto cleanup;
+		}
+		print_stack_frames_func = print_stack_frames_by_ksyms;
+	} else {
+		syms_cache = syms_cache__new(0);
+		if (!syms_cache) {
+			fprintf(stderr, "Failed to create syms_cache\n");
+			ret = -ENOMEM;
+
+			goto cleanup;
+		}
+		print_stack_frames_func = print_stack_frames_by_syms_cache;
+	}
+#endif
+
+	printf("Tracing outstanding memory allocs...  Hit Ctrl-C to end\n");
+
+	// main loop
+	while (!exiting && env.nr_intervals) {
+		env.nr_intervals--;
+
+		sleep(env.interval);
+
+		if (env.combined_only)
+			print_outstanding_combined_allocs(combined_allocs_fd, stack_traces_fd);
+		else
+			print_outstanding_allocs(allocs_fd, stack_traces_fd);
+	}
+
+	// after loop ends, check for child process and cleanup accordingly
+	if (env.pid > 0 && strlen(env.command)) {
+		if (!child_exited) {
+			if (kill(env.pid, SIGTERM)) {
+				perror("failed to signal child process");
+				ret = -errno;
+
+				goto cleanup;
+			}
+			printf("signaled child process\n");
+		}
+
+		if (waitpid(env.pid, NULL, 0) < 0) {
+			perror("failed to reap child process");
+			ret = -errno;
+
+			goto cleanup;
+		}
+		printf("reaped child process\n");
+	}
+
+cleanup:
+#ifdef USE_BLAZESYM
+	blazesym_free(symbolizer);
+#else
+	if (syms_cache)
+		syms_cache__free(syms_cache);
+	if (ksyms)
+		ksyms__free(ksyms);
+#endif
+	memleak_bpf__destroy(skel);
+
+	free(allocs);
+	free(stack);
+
+	printf("done\n");
+
+	return ret;
+}
+
+long argp_parse_long(int key, const char *arg, struct argp_state *state)
+{
+	errno = 0;
+	const long temp = strtol(arg, NULL, 10);
+	if (errno || temp <= 0) {
+		fprintf(stderr, "error arg:%c %s\n", (char)key, arg);
+		argp_usage(state);
+	}
+
+	return temp;
+}
+
+error_t argp_parse_arg(int key, char *arg, struct argp_state *state)
+{
+	static int pos_args = 0;
+
+	switch (key) {
+	case 'p':
+		env.pid = atoi(arg);
+		break;
+	case 't':
+		env.trace_all = true;
+		break;
+	case 'a':
+		env.show_allocs = true;
+		break;
+	case 'o':
+		env.min_age_ns = 1e6 * atoi(arg);
+		break;
+	case 'c':
+		strncpy(env.command, arg, sizeof(env.command) - 1);
+		break;
+	case 'C':
+		env.combined_only = true;
+		break;
+	case 'F':
+		env.wa_missing_free = true;
+		break;
+	case 's':
+		env.sample_rate = argp_parse_long(key, arg, state);
+		break;
+	case 'T':
+		env.top_stacks = atoi(arg);
+		break;
+	case 'z':
+		env.min_size = argp_parse_long(key, arg, state);
+		break;
+	case 'Z':
+		env.max_size = argp_parse_long(key, arg, state);
+		break;
+	case 'O':
+		strncpy(env.object, arg, sizeof(env.object) - 1);
+		break;
+	case 'P':
+		env.percpu = true;
+		break;
+	case ARGP_KEY_ARG:
+		pos_args++;
+
+		if (pos_args == 1) {
+			env.interval = argp_parse_long(key, arg, state);
+		}
+		else if (pos_args == 2) {
+			env.nr_intervals = argp_parse_long(key, arg, state);
+		} else {
+			fprintf(stderr, "Unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+
+	return 0;
+}
+
+int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !env.verbose)
+		return 0;
+
+	return vfprintf(stderr, format, args);
+}
+
+void sig_handler(int signo)
+{
+	if (signo == SIGCHLD)
+		child_exited = 1;
+
+	exiting = 1;
+}
+
+int event_init(int *fd)
+{
+	if (!fd) {
+		fprintf(stderr, "pointer to fd is null\n");
+
+		return 1;
+	}
+
+	const int tmp_fd = eventfd(0, EFD_CLOEXEC);
+	if (tmp_fd < 0) {
+		perror("failed to create event fd");
+
+		return -errno;
+	}
+
+	*fd = tmp_fd;
+
+	return 0;
+}
+
+int event_wait(int fd, uint64_t expected_event)
+{
+	uint64_t event = 0;
+	const ssize_t bytes = read(fd, &event, sizeof(event));
+	if (bytes < 0) {
+		perror("failed to read from fd");
+
+		return -errno;
+	} else if (bytes != sizeof(event)) {
+		fprintf(stderr, "read unexpected size\n");
+
+		return 1;
+	}
+
+	if (event != expected_event) {
+		fprintf(stderr, "read event %lu, expected %lu\n", event, expected_event);
+
+		return 1;
+	}
+
+	return 0;
+}
+
+int event_notify(int fd, uint64_t event)
+{
+	const ssize_t bytes = write(fd, &event, sizeof(event));
+	if (bytes < 0) {
+		perror("failed to write to fd");
+
+		return -errno;
+	} else if (bytes != sizeof(event)) {
+		fprintf(stderr, "attempted to write %zu bytes, wrote %zd bytes\n", sizeof(event), bytes);
+
+		return 1;
+	}
+
+	return 0;
+}
+
+pid_t fork_sync_exec(const char *command, int fd)
+{
+	const pid_t pid = fork();
+
+	switch (pid) {
+	case -1:
+		perror("failed to create child process");
+		break;
+	case 0: {
+		const uint64_t event = 1;
+		if (event_wait(fd, event)) {
+			fprintf(stderr, "failed to wait on event");
+			exit(EXIT_FAILURE);
+		}
+
+		printf("received go event. executing child command\n");
+
+		const int err = execl(command, command, NULL);
+		if (err) {
+			perror("failed to execute child command");
+			return -1;
+		}
+
+		break;
+	}
+	default:
+		printf("child created with pid: %d\n", pid);
+
+		break;
+	}
+
+	return pid;
+}
+
+#if USE_BLAZESYM
+void print_stack_frame_by_blazesym(size_t frame, uint64_t addr, const blazesym_csym *sym)
+{
+	if (!sym)
+		printf("\t%zu [<%016lx>] <%s>\n", frame, addr, "null sym");
+	else if (sym->path && strlen(sym->path))
+		printf("\t%zu [<%016lx>] %s+0x%lx %s:%ld\n", frame, addr, sym->symbol, addr - sym->start_address, sym->path, sym->line_no);
+	else
+		printf("\t%zu [<%016lx>] %s+0x%lx\n", frame, addr, sym->symbol, addr - sym->start_address);
+}
+
+void print_stack_frames_by_blazesym()
+{
+	const blazesym_result *result = blazesym_symbolize(symbolizer, &src_cfg, 1, stack, env.perf_max_stack_depth);
+
+	for (size_t j = 0; j < result->size; ++j) {
+		const uint64_t addr = stack[j];
+
+		if (addr == 0)
+			break;
+
+		// no symbol found
+		if (!result || j >= result->size || result->entries[j].size == 0) {
+			print_stack_frame_by_blazesym(j, addr, NULL);
+
+			continue;
+		}
+
+		// single symbol found
+		if (result->entries[j].size == 1) {
+			const blazesym_csym *sym = &result->entries[j].syms[0];
+			print_stack_frame_by_blazesym(j, addr, sym);
+
+			continue;
+		}
+
+		// multi symbol found
+		printf("\t%zu [<%016lx>] (%lu entries)\n", j, addr, result->entries[j].size);
+
+		for (size_t k = 0; k < result->entries[j].size; ++k) {
+			const blazesym_csym *sym = &result->entries[j].syms[k];
+			if (sym->path && strlen(sym->path))
+				printf("\t\t%s@0x%lx %s:%ld\n", sym->symbol, sym->start_address, sym->path, sym->line_no);
+			else
+				printf("\t\t%s@0x%lx\n", sym->symbol, sym->start_address);
+		}
+	}
+
+	blazesym_result_free(result);
+}
+#else
+void print_stack_frames_by_ksyms()
+{
+	for (size_t i = 0; i < env.perf_max_stack_depth; ++i) {
+		const uint64_t addr = stack[i];
+
+		if (addr == 0)
+			break;
+
+		const struct ksym *ksym = ksyms__map_addr(ksyms, addr);
+		if (ksym)
+			printf("\t%zu [<%016lx>] %s+0x%lx\n", i, addr, ksym->name, addr - ksym->addr);
+		else
+			printf("\t%zu [<%016lx>] <%s>\n", i, addr, "null sym");
+	}
+}
+
+void print_stack_frames_by_syms_cache()
+{
+	const struct syms *syms = syms_cache__get_syms(syms_cache, env.pid);
+	if (!syms) {
+		fprintf(stderr, "Failed to get syms\n");
+		return;
+	}
+
+	for (size_t i = 0; i < env.perf_max_stack_depth; ++i) {
+		const uint64_t addr = stack[i];
+
+		if (addr == 0)
+			break;
+
+		char *dso_name;
+		uint64_t dso_offset;
+		const struct sym *sym = syms__map_addr_dso(syms, addr, &dso_name, &dso_offset);
+		if (sym) {
+			printf("\t%zu [<%016lx>] %s+0x%lx", i, addr, sym->name, sym->offset);
+			if (dso_name)
+				printf(" [%s]", dso_name);
+			printf("\n");
+		} else {
+			printf("\t%zu [<%016lx>] <%s>\n", i, addr, "null sym");
+		}
+	}
+}
+#endif
+
+int print_stack_frames(struct allocation *allocs, size_t nr_allocs, int stack_traces_fd)
+{
+	for (size_t i = 0; i < nr_allocs; ++i) {
+		const struct allocation *alloc = &allocs[i];
+
+		printf("%zu bytes in %zu allocations from stack\n", alloc->size, alloc->count);
+
+		if (env.show_allocs) {
+			struct allocation_node* it = alloc->allocations;
+			while (it != NULL) {
+				printf("\taddr = %#lx size = %zu\n", it->address, it->size);
+				it = it->next;
+			}
+		}
+
+		if (bpf_map_lookup_elem(stack_traces_fd, &alloc->stack_id, stack)) {
+			if (errno == ENOENT)
+				continue;
+
+			perror("failed to lookup stack trace");
+
+			return -errno;
+		}
+
+		(*print_stack_frames_func)();
+	}
+
+	return 0;
+}
+
+int alloc_size_compare(const void *a, const void *b)
+{
+	const struct allocation *x = (struct allocation *)a;
+	const struct allocation *y = (struct allocation *)b;
+
+	// descending order
+
+	if (x->size > y->size)
+		return -1;
+
+	if (x->size < y->size)
+		return 1;
+
+	return 0;
+}
+
+int print_outstanding_allocs(int allocs_fd, int stack_traces_fd)
+{
+	time_t t = time(NULL);
+	struct tm *tm = localtime(&t);
+
+	size_t nr_allocs = 0;
+
+	// for each struct alloc_info "alloc_info" in the bpf map "allocs"
+	for (uint64_t prev_key = 0, curr_key = 0;; prev_key = curr_key) {
+		struct alloc_info alloc_info = {};
+		memset(&alloc_info, 0, sizeof(alloc_info));
+
+		if (bpf_map_get_next_key(allocs_fd, &prev_key, &curr_key)) {
+			if (errno == ENOENT) {
+				break; // no more keys, done
+			}
+
+			perror("map get next key error");
+
+			return -errno;
+		}
+
+		if (bpf_map_lookup_elem(allocs_fd, &curr_key, &alloc_info)) {
+			if (errno == ENOENT)
+				continue;
+
+			perror("map lookup error");
+
+			return -errno;
+		}
+
+		// filter by age
+		if (get_ktime_ns() - env.min_age_ns < alloc_info.timestamp_ns) {
+			continue;
+		}
+
+		// filter invalid stacks
+		if (alloc_info.stack_id < 0) {
+			continue;
+		}
+
+		// when the stack_id exists in the allocs array,
+		//   increment size with alloc_info.size
+		bool stack_exists = false;
+
+		for (size_t i = 0; !stack_exists && i < nr_allocs; ++i) {
+			struct allocation *alloc = &allocs[i];
+
+			if (alloc->stack_id == alloc_info.stack_id) {
+				alloc->size += alloc_info.size;
+				alloc->count++;
+
+				if (env.show_allocs) {
+					struct allocation_node* node = malloc(sizeof(struct allocation_node));
+					if (!node) {
+						perror("malloc failed");
+						return -errno;
+					}
+					node->address = curr_key;
+					node->size = alloc_info.size;
+					node->next = alloc->allocations;
+					alloc->allocations = node;
+				}
+
+				stack_exists = true;
+				break;
+			}
+		}
+
+		if (stack_exists)
+			continue;
+
+		// when the stack_id does not exist in the allocs array,
+		//   create a new entry in the array
+		struct allocation alloc = {
+			.stack_id = alloc_info.stack_id,
+			.size = alloc_info.size,
+			.count = 1,
+			.allocations = NULL
+		};
+
+		if (env.show_allocs) {
+			struct allocation_node* node = malloc(sizeof(struct allocation_node));
+			if (!node) {
+				perror("malloc failed");
+				return -errno;
+			}
+			node->address = curr_key;
+			node->size = alloc_info.size;
+			node->next = NULL;
+			alloc.allocations = node;
+		}
+
+		memcpy(&allocs[nr_allocs], &alloc, sizeof(alloc));
+		nr_allocs++;
+	}
+
+	// sort the allocs array in descending order
+	qsort(allocs, nr_allocs, sizeof(allocs[0]), alloc_size_compare);
+
+	// get min of allocs we stored vs the top N requested stacks
+	size_t nr_allocs_to_show = nr_allocs < env.top_stacks ? nr_allocs : env.top_stacks;
+
+	printf("[%d:%d:%d] Top %zu stacks with outstanding allocations:\n",
+			tm->tm_hour, tm->tm_min, tm->tm_sec, nr_allocs_to_show);
+
+	print_stack_frames(allocs, nr_allocs_to_show, stack_traces_fd);
+
+	// Reset allocs list so that we dont accidentaly reuse data the next time we call this function
+	for (size_t i = 0; i < nr_allocs; i++) {
+		allocs[i].stack_id = 0;
+		if (env.show_allocs) {
+			struct allocation_node *it = allocs[i].allocations;
+			while (it != NULL) {
+				struct allocation_node *this = it;
+				it = it->next;
+				free(this);
+			}
+			allocs[i].allocations = NULL;
+		}
+	}
+
+	return 0;
+}
+
+int print_outstanding_combined_allocs(int combined_allocs_fd, int stack_traces_fd)
+{
+	time_t t = time(NULL);
+	struct tm *tm = localtime(&t);
+
+	size_t nr_allocs = 0;
+
+	// for each stack_id "curr_key" and union combined_alloc_info "alloc"
+	// in bpf_map "combined_allocs"
+	for (uint64_t prev_key = 0, curr_key = 0;; prev_key = curr_key) {
+		union combined_alloc_info combined_alloc_info;
+		memset(&combined_alloc_info, 0, sizeof(combined_alloc_info));
+
+		if (bpf_map_get_next_key(combined_allocs_fd, &prev_key, &curr_key)) {
+			if (errno == ENOENT) {
+				break; // no more keys, done
+			}
+
+			perror("map get next key error");
+
+			return -errno;
+		}
+
+		if (bpf_map_lookup_elem(combined_allocs_fd, &curr_key, &combined_alloc_info)) {
+			if (errno == ENOENT)
+				continue;
+
+			perror("map lookup error");
+
+			return -errno;
+		}
+
+		const struct allocation alloc = {
+			.stack_id = curr_key,
+			.size = combined_alloc_info.total_size,
+			.count = combined_alloc_info.number_of_allocs,
+			.allocations = NULL
+		};
+
+		memcpy(&allocs[nr_allocs], &alloc, sizeof(alloc));
+		nr_allocs++;
+	}
+
+	qsort(allocs, nr_allocs, sizeof(allocs[0]), alloc_size_compare);
+
+	// get min of allocs we stored vs the top N requested stacks
+	nr_allocs = nr_allocs < env.top_stacks ? nr_allocs : env.top_stacks;
+
+	printf("[%d:%d:%d] Top %zu stacks with outstanding allocations:\n",
+			tm->tm_hour, tm->tm_min, tm->tm_sec, nr_allocs);
+
+	print_stack_frames(allocs, nr_allocs, stack_traces_fd);
+
+	return 0;
+}
+
+bool has_kernel_node_tracepoints()
+{
+	return tracepoint_exists("kmem", "kmalloc_node") &&
+		tracepoint_exists("kmem", "kmem_cache_alloc_node");
+}
+
+void disable_kernel_node_tracepoints(struct memleak_bpf *skel)
+{
+	bpf_program__set_autoload(skel->progs.memleak__kmalloc_node, false);
+	bpf_program__set_autoload(skel->progs.memleak__kmem_cache_alloc_node, false);
+}
+
+void disable_kernel_percpu_tracepoints(struct memleak_bpf *skel)
+{
+	bpf_program__set_autoload(skel->progs.memleak__percpu_alloc_percpu, false);
+	bpf_program__set_autoload(skel->progs.memleak__percpu_free_percpu, false);
+}
+
+void disable_kernel_tracepoints(struct memleak_bpf *skel)
+{
+	bpf_program__set_autoload(skel->progs.memleak__kmalloc, false);
+	bpf_program__set_autoload(skel->progs.memleak__kmalloc_node, false);
+	bpf_program__set_autoload(skel->progs.memleak__kfree, false);
+	bpf_program__set_autoload(skel->progs.memleak__kmem_cache_alloc, false);
+	bpf_program__set_autoload(skel->progs.memleak__kmem_cache_alloc_node, false);
+	bpf_program__set_autoload(skel->progs.memleak__kmem_cache_free, false);
+	bpf_program__set_autoload(skel->progs.memleak__mm_page_alloc, false);
+	bpf_program__set_autoload(skel->progs.memleak__mm_page_free, false);
+	bpf_program__set_autoload(skel->progs.memleak__percpu_alloc_percpu, false);
+	bpf_program__set_autoload(skel->progs.memleak__percpu_free_percpu, false);
+}
+
+int attach_uprobes(struct memleak_bpf *skel)
+{
+	ATTACH_UPROBE_CHECKED(skel, malloc, malloc_enter);
+	ATTACH_URETPROBE_CHECKED(skel, malloc, malloc_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, calloc, calloc_enter);
+	ATTACH_URETPROBE_CHECKED(skel, calloc, calloc_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, realloc, realloc_enter);
+	ATTACH_URETPROBE_CHECKED(skel, realloc, realloc_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, mmap, mmap_enter);
+	ATTACH_URETPROBE_CHECKED(skel, mmap, mmap_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, posix_memalign, posix_memalign_enter);
+	ATTACH_URETPROBE_CHECKED(skel, posix_memalign, posix_memalign_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, memalign, memalign_enter);
+	ATTACH_URETPROBE_CHECKED(skel, memalign, memalign_exit);
+
+	ATTACH_UPROBE_CHECKED(skel, free, free_enter);
+	ATTACH_UPROBE_CHECKED(skel, munmap, munmap_enter);
+
+	// the following probes are intentinally allowed to fail attachment
+
+	// deprecated in libc.so bionic
+	ATTACH_UPROBE(skel, valloc, valloc_enter);
+	ATTACH_URETPROBE(skel, valloc, valloc_exit);
+
+	// deprecated in libc.so bionic
+	ATTACH_UPROBE(skel, pvalloc, pvalloc_enter);
+	ATTACH_URETPROBE(skel, pvalloc, pvalloc_exit);
+
+	// added in C11
+	ATTACH_UPROBE(skel, aligned_alloc, aligned_alloc_enter);
+	ATTACH_URETPROBE(skel, aligned_alloc, aligned_alloc_exit);
+
+
+	return 0;
+}
diff --git a/libbpf-tools/memleak.h b/libbpf-tools/memleak.h
new file mode 100644
index 0000000..18ed1e1
--- /dev/null
+++ b/libbpf-tools/memleak.h
@@ -0,0 +1,21 @@
+#ifndef __MEMLEAK_H
+#define __MEMLEAK_H
+
+#define ALLOCS_MAX_ENTRIES 1000000
+#define COMBINED_ALLOCS_MAX_ENTRIES 10240
+
+struct alloc_info {
+	__u64 size;
+	__u64 timestamp_ns;
+	int stack_id;
+};
+
+union combined_alloc_info {
+	struct {
+		__u64 total_size : 40;
+		__u64 number_of_allocs : 24;
+	};
+	__u64 bits;
+};
+
+#endif /* __MEMLEAK_H */
diff --git a/libbpf-tools/mountsnoop.bpf.c b/libbpf-tools/mountsnoop.bpf.c
index 30a5de4..106f421 100644
--- a/libbpf-tools/mountsnoop.bpf.c
+++ b/libbpf-tools/mountsnoop.bpf.c
@@ -4,6 +4,8 @@
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_core_read.h>
 #include <bpf/bpf_tracing.h>
+
+#include "compat.bpf.h"
 #include "mountsnoop.h"
 
 #define MAX_ENTRIES 10240
@@ -17,19 +19,6 @@
 	__type(value, struct arg);
 } args SEC(".maps");
 
-struct {
-	__uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
-	__uint(max_entries, 1);
-	__type(key, int);
-	__type(value, struct event);
-} heap SEC(".maps");
-
-struct {
-	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
-	__uint(key_size, sizeof(__u32));
-	__uint(value_size, sizeof(__u32));
-} events SEC(".maps");
-
 static int probe_entry(const char *src, const char *dest, const char *fs,
 		       __u64 flags, const char *data, enum op op)
 {
@@ -57,18 +46,17 @@
 	__u64 pid_tgid = bpf_get_current_pid_tgid();
 	__u32 pid = pid_tgid >> 32;
 	__u32 tid = (__u32)pid_tgid;
-	struct arg *argp;
-	struct event *eventp;
 	struct task_struct *task;
-	int zero = 0;
+	struct event *eventp;
+	struct arg *argp;
 
 	argp = bpf_map_lookup_elem(&args, &tid);
 	if (!argp)
 		return 0;
 
-	eventp = bpf_map_lookup_elem(&heap, &zero);
+	eventp = reserve_buf(sizeof(*eventp));
 	if (!eventp)
-		return 0;
+		goto cleanup;
 
 	task = (struct task_struct *)bpf_get_current_task();
 	eventp->delta = bpf_ktime_get_ns() - argp->ts;
@@ -95,8 +83,10 @@
 		bpf_probe_read_user_str(eventp->data, sizeof(eventp->data), argp->data);
 	else
 		eventp->data[0] = '\0';
-	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, eventp, sizeof(*eventp));
 
+	submit_buf(ctx, eventp, sizeof(*eventp));
+
+cleanup:
 	bpf_map_delete_elem(&args, &tid);
 	return 0;
 }
diff --git a/libbpf-tools/mountsnoop.c b/libbpf-tools/mountsnoop.c
index ac2acc4..5ff0ce6 100644
--- a/libbpf-tools/mountsnoop.c
+++ b/libbpf-tools/mountsnoop.c
@@ -14,15 +14,16 @@
 #include <signal.h>
 #include <string.h>
 #include <time.h>
+#include <unistd.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "mountsnoop.h"
 #include "mountsnoop.skel.h"
+#include "compat.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
-#define PERF_BUFFER_PAGES	64
-#define PERF_POLL_TIMEOUT_MS	100
 #define warn(...) fprintf(stderr, __VA_ARGS__)
 
 /* https://www.gnu.org/software/gnulib/manual/html_node/strerrorname_005fnp.html */
@@ -194,7 +195,7 @@
 	return call;
 }
 
-static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+static int handle_event(void *ctx, void *data, size_t len)
 {
 	const struct event *e = data;
 	struct tm *tm;
@@ -218,7 +219,7 @@
 	if (!output_vertically) {
 		printf("%-16s %-7d %-7d %-11u %s\n",
 		       e->comm, e->pid, e->tid, e->mnt_ns, gen_call(e));
-		return;
+		return 0;
 	}
 	if (emit_timestamp)
 		printf("\n");
@@ -235,6 +236,8 @@
 	printf("%sDATA:   %s\n", indent, e->data);
 	printf("%sFLAGS:  %s\n", indent, strflags(e->flags));
 	printf("\n");
+
+	return 0;
 }
 
 static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
@@ -244,12 +247,13 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
 		.doc = argp_program_doc,
 	};
-	struct perf_buffer *pb = NULL;
+	struct bpf_buffer *buf = NULL;
 	struct mountsnoop_bpf *obj;
 	int err;
 
@@ -257,10 +261,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = mountsnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = mountsnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -268,6 +277,13 @@
 
 	obj->rodata->target_pid = target_pid;
 
+	buf = bpf_buffer__new(obj->maps.events, obj->maps.heap);
+	if (!buf) {
+		err = -errno;
+		warn("failed to create ring/perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
 	err = mountsnoop_bpf__load(obj);
 	if (err) {
 		warn("failed to load BPF object: %d\n", err);
@@ -280,11 +296,9 @@
 		goto cleanup;
 	}
 
-	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
-			      handle_event, handle_lost_events, NULL, NULL);
-	if (!pb) {
-		err = -errno;
-		warn("failed to open perf buffer: %d\n", err);
+	err = bpf_buffer__open(buf, handle_event, handle_lost_events, NULL);
+	if (err) {
+		warn("failed to open ring/perf buffer: %d\n", err);
 		goto cleanup;
 	}
 
@@ -301,9 +315,9 @@
 	}
 
 	while (!exiting) {
-		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		err = bpf_buffer__poll(buf, POLL_TIMEOUT_MS);
 		if (err < 0 && err != -EINTR) {
-			fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err));
+			fprintf(stderr, "error polling ring/perf buffer: %s\n", strerror(-err));
 			goto cleanup;
 		}
 		/* reset err to return 0 if exiting */
@@ -311,8 +325,9 @@
 	}
 
 cleanup:
-	perf_buffer__free(pb);
+	bpf_buffer__free(buf);
 	mountsnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/numamove.bpf.c b/libbpf-tools/numamove.bpf.c
index 69d8d5f..7658a63 100644
--- a/libbpf-tools/numamove.bpf.c
+++ b/libbpf-tools/numamove.bpf.c
@@ -9,14 +9,12 @@
 	__uint(max_entries, 10240);
 	__type(key, u32);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } start SEC(".maps");
 
 __u64 latency = 0;
 __u64 num = 0;
 
-SEC("fentry/migrate_misplaced_page")
-int BPF_PROG(migrate_misplaced_page)
+static int __migrate_misplaced_page(void)
 {
 	u32 pid = bpf_get_current_pid_tgid();
 	u64 ts = bpf_ktime_get_ns();
@@ -25,8 +23,19 @@
 	return 0;
 }
 
-SEC("fexit/migrate_misplaced_page")
-int BPF_PROG(migrate_misplaced_page_exit)
+SEC("fentry/migrate_misplaced_page")
+int BPF_PROG(fentry_migrate_misplaced_page)
+{
+	return __migrate_misplaced_page();
+}
+
+SEC("kprobe/migrate_misplaced_page")
+int BPF_PROG(kprobe_migrate_misplaced_page)
+{
+	return __migrate_misplaced_page();
+}
+
+static int __migrate_misplaced_page_exit(void)
 {
 	u32 pid = bpf_get_current_pid_tgid();
 	u64 *tsp, ts = bpf_ktime_get_ns();
@@ -46,4 +55,16 @@
 	return 0;
 }
 
+SEC("fexit/migrate_misplaced_page")
+int BPF_PROG(fexit_migrate_misplaced_page_exit)
+{
+	return __migrate_misplaced_page_exit();
+}
+
+SEC("kretprobe/migrate_misplaced_page")
+int BPF_PROG(kretprobe_migrate_misplaced_page_exit)
+{
+	return __migrate_misplaced_page_exit();
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/numamove.c b/libbpf-tools/numamove.c
index 0747f84..23a724e 100644
--- a/libbpf-tools/numamove.c
+++ b/libbpf-tools/numamove.c
@@ -2,7 +2,8 @@
 // Copyright (c) 2020 Wenbo Zhang
 //
 // Based on numamove(8) from BPF-Perf-Tools-Book by Brendan Gregg.
-// 8-Jun-2020   Wenbo Zhang   Created this.
+//  8-Jun-2020   Wenbo Zhang   Created this.
+// 30-Jan-2023   Rong Tao      Use fentry_can_attach() to decide use fentry/kprobe.
 #include <argp.h>
 #include <signal.h>
 #include <stdio.h>
@@ -80,10 +81,9 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = numamove_bpf__open_and_load();
+	obj = numamove_bpf__open();
 	if (!obj) {
 		fprintf(stderr, "failed to open and/or load BPF object\n");
 		return 1;
@@ -94,6 +94,21 @@
 		goto cleanup;
 	}
 
+	/* It fallbacks to kprobes when kernel does not support fentry. */
+	if (fentry_can_attach("migrate_misplaced_page", NULL)) {
+		bpf_program__set_autoload(obj->progs.kprobe_migrate_misplaced_page, false);
+		bpf_program__set_autoload(obj->progs.kretprobe_migrate_misplaced_page_exit, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_migrate_misplaced_page, false);
+		bpf_program__set_autoload(obj->progs.fexit_migrate_misplaced_page_exit, false);
+	}
+
+	err = numamove_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF skelect: %d\n", err);
+		goto cleanup;
+	}
+
 	err = numamove_bpf__attach(obj);
 	if (err) {
 		fprintf(stderr, "failed to attach BPF programs\n");
diff --git a/libbpf-tools/offcputime.bpf.c b/libbpf-tools/offcputime.bpf.c
index 92f505a..cb20d50 100644
--- a/libbpf-tools/offcputime.bpf.c
+++ b/libbpf-tools/offcputime.bpf.c
@@ -58,8 +58,7 @@
 }
 
 SEC("tp_btf/sched_switch")
-int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev,
-	     struct task_struct *next)
+int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
 {
 	struct internal_key *i_keyp, i_key;
 	struct val_t *valp, val;
@@ -83,7 +82,7 @@
 						BPF_F_USER_STACK);
 		i_key.key.kern_stack_id = bpf_get_stackid(ctx, &stackmap, 0);
 		bpf_map_update_elem(&start, &pid, &i_key, 0);
-		bpf_probe_read_str(&val.comm, sizeof(prev->comm), prev->comm);
+		bpf_probe_read_kernel_str(&val.comm, sizeof(prev->comm), prev->comm);
 		val.delta = 0;
 		bpf_map_update_elem(&info, &i_key.key, &val, BPF_NOEXIST);
 	}
diff --git a/libbpf-tools/offcputime.c b/libbpf-tools/offcputime.c
index 37a8ec2..65088af 100644
--- a/libbpf-tools/offcputime.c
+++ b/libbpf-tools/offcputime.c
@@ -38,8 +38,6 @@
 	.duration = 99999999,
 };
 
-static volatile bool exiting;
-
 const char *argp_program_version = "offcputime 0.1";
 const char *argp_program_bug_address =
 	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
@@ -197,6 +195,9 @@
 	int err, i, ifd, sfd;
 	unsigned long *ip;
 	struct val_t val;
+	char *dso_name;
+	unsigned long dso_offset;
+	int idx;
 
 	ip = calloc(env.perf_max_stack_depth, sizeof(*ip));
 	if (!ip) {
@@ -207,6 +208,8 @@
 	ifd = bpf_map__fd(obj->maps.info);
 	sfd = bpf_map__fd(obj->maps.stackmap);
 	while (!bpf_map_get_next_key(ifd, &lookup_key, &next_key)) {
+		idx = 0;
+
 		err = bpf_map_lookup_elem(ifd, &next_key, &val);
 		if (err < 0) {
 			fprintf(stderr, "failed to lookup info: %d\n", err);
@@ -219,9 +222,17 @@
 			fprintf(stderr, "    [Missed Kernel Stack]\n");
 			goto print_ustack;
 		}
+
 		for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++) {
 			ksym = ksyms__map_addr(ksyms, ip[i]);
-			printf("    %s\n", ksym ? ksym->name : "Unknown");
+			if (!env.verbose) {
+				printf("    %s\n", ksym ? ksym->name : "unknown");
+			} else {
+				if (ksym)
+					printf("    #%-2d 0x%lx %s+0x%lx\n", idx++, ip[i], ksym->name, ip[i] - ksym->addr);
+				else
+					printf("    #%-2d 0x%lx [unknown]\n", idx++, ip[i]);
+			}
 		}
 
 print_ustack:
@@ -230,20 +241,35 @@
 
 		if (bpf_map_lookup_elem(sfd, &next_key.user_stack_id, ip) != 0) {
 			fprintf(stderr, "    [Missed User Stack]\n");
-			continue;
+			goto skip_ustack;
 		}
 
 		syms = syms_cache__get_syms(syms_cache, next_key.tgid);
 		if (!syms) {
-			fprintf(stderr, "failed to get syms\n");
+			if (!env.verbose) {
+				fprintf(stderr, "failed to get syms\n");
+			} else {
+				for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++)
+					printf("    #%-2d 0x%016lx [unknown]\n", idx++, ip[i]);
+			}
 			goto skip_ustack;
 		}
 		for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++) {
-			sym = syms__map_addr(syms, ip[i]);
-			if (sym)
-				printf("    %s\n", sym->name);
-			else
-				printf("    [unknown]\n");
+			if (!env.verbose) {
+				sym = syms__map_addr(syms, ip[i]);
+				if (sym)
+					printf("    %s\n", sym->name);
+				else
+					printf("    [unknown]\n");
+			} else {
+				sym = syms__map_addr_dso(syms, ip[i], &dso_name, &dso_offset);
+				printf("    #%-2d 0x%016lx", idx++, ip[i]);
+				if (sym)
+					printf(" %s+0x%lx", sym->name, sym->offset);
+				if (dso_name)
+					printf(" (%s+0x%lx)", dso_name, dso_offset);
+				printf("\n");
+			}
 		}
 
 skip_ustack:
@@ -279,7 +305,6 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = offcputime_bpf__open();
diff --git a/libbpf-tools/oomkill.bpf.c b/libbpf-tools/oomkill.bpf.c
index 2586683..4c722ff 100644
--- a/libbpf-tools/oomkill.bpf.c
+++ b/libbpf-tools/oomkill.bpf.c
@@ -1,29 +1,28 @@
 // SPDX-License-Identifier: GPL-2.0
 // Copyright (c) 2022 Jingxiang Zeng
+// Copyright (c) 2022 Krisztian Fekete
 #include <vmlinux.h>
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_core_read.h>
 #include <bpf/bpf_tracing.h>
-
+#include "compat.bpf.h"
 #include "oomkill.h"
 
-struct {
-	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
-	__uint(key_size, sizeof(u32));
-	__uint(value_size, sizeof(u32));
-} events SEC(".maps");
-
 SEC("kprobe/oom_kill_process")
 int BPF_KPROBE(oom_kill_process, struct oom_control *oc, const char *message)
 {
-	struct data_t data;
+	struct data_t *data;
 
-	data.fpid = bpf_get_current_pid_tgid() >> 32;
-	data.tpid = BPF_CORE_READ(oc, chosen, tgid);
-	data.pages = BPF_CORE_READ(oc, totalpages);
-	bpf_get_current_comm(&data.fcomm, sizeof(data.fcomm));
-	bpf_probe_read_kernel(&data.tcomm, sizeof(data.tcomm), BPF_CORE_READ(oc, chosen, comm));
-	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &data, sizeof(data));
+	data = reserve_buf(sizeof(*data));
+	if (!data)
+		return 0;
+
+	data->fpid = bpf_get_current_pid_tgid() >> 32;
+	data->tpid = BPF_CORE_READ(oc, chosen, tgid);
+	data->pages = BPF_CORE_READ(oc, totalpages);
+	bpf_get_current_comm(&data->fcomm, sizeof(data->fcomm));
+	bpf_probe_read_kernel(&data->tcomm, sizeof(data->tcomm), BPF_CORE_READ(oc, chosen, comm));
+	submit_buf(ctx, data, sizeof(*data));
 	return 0;
 }
 
diff --git a/libbpf-tools/oomkill.c b/libbpf-tools/oomkill.c
index 92976b8..e837e79 100644
--- a/libbpf-tools/oomkill.c
+++ b/libbpf-tools/oomkill.c
@@ -1,8 +1,10 @@
 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
 // Copyright (c) 2022 Jingxiang Zeng
+// Copyright (c) 2022 Krisztian Fekete
 //
 // Based on oomkill(8) from BCC by Brendan Gregg.
 // 13-Jan-2022   Jingxiang Zeng   Created this.
+// 17-Oct-2022   Krisztian Fekete Edited this.
 #include <argp.h>
 #include <errno.h>
 #include <signal.h>
@@ -15,11 +17,11 @@
 #include <bpf/bpf.h>
 #include <bpf/libbpf.h>
 #include "oomkill.skel.h"
+#include "compat.h"
 #include "oomkill.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
-#define PERF_POLL_TIMEOUT_MS	100
-
 static volatile sig_atomic_t exiting = 0;
 
 static bool verbose = false;
@@ -56,7 +58,7 @@
 	return 0;
 }
 
-static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+static int handle_event(void *ctx, void *data, size_t len)
 {
 	FILE *f;
 	char buf[256];
@@ -77,11 +79,13 @@
 	strftime(ts, sizeof(ts), "%H:%M:%S", tm);
 
 	if (n)
-		printf("%s Triggered by PID %d (\"%s\"), OOM kill of PID %d (\"%s\"), %lld pages, loadavg: %s\n",
+		printf("%s Triggered by PID %d (\"%s\"), OOM kill of PID %d (\"%s\"), %lld pages, loadavg: %s",
 			ts, e->fpid, e->fcomm, e->tpid, e->tcomm, e->pages, buf);
 	else
 		printf("%s Triggered by PID %d (\"%s\"), OOM kill of PID %d (\"%s\"), %lld pages\n",
-                        ts, e->fpid, e->fcomm, e->tpid, e->tcomm, e->pages);
+			ts, e->fpid, e->fcomm, e->tpid, e->tcomm, e->pages);
+
+	return 0;
 }
 
 static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
@@ -103,12 +107,13 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
 		.doc = argp_program_doc,
 	};
-	struct perf_buffer *pb = NULL;
+	struct bpf_buffer *buf = NULL;
 	struct oomkill_bpf *obj;
 	int err;
 
@@ -116,26 +121,42 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = oomkill_bpf__open_and_load();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = oomkill_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to load and open BPF object\n");
 		return 1;
 	}
 
+	buf = bpf_buffer__new(obj->maps.events, obj->maps.heap);
+	if (!buf) {
+		err = -errno;
+		fprintf(stderr, "failed to create ring/perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	err = oomkill_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
 	err = oomkill_bpf__attach(obj);
 	if (err) {
 		fprintf(stderr, "failed to attach BPF programs\n");
 		goto cleanup;
 	}
 
-	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), 64,
-			      handle_event, handle_lost_events, NULL, NULL);
-	if (!pb) {
-		err = -errno;
-		fprintf(stderr, "failed to open perf buffer: %d\n", err);
+	err = bpf_buffer__open(buf, handle_event, handle_lost_events, NULL);
+	if (err) {
+		fprintf(stderr, "failed to open ring/perf buffer: %d\n", err);
 		goto cleanup;
 	}
 
@@ -148,9 +169,9 @@
 	printf("Tracing OOM kills... Ctrl-C to stop.\n");
 
 	while (!exiting) {
-		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		err = bpf_buffer__poll(buf, POLL_TIMEOUT_MS);
 		if (err < 0 && err != -EINTR) {
-			fprintf(stderr, "error polling perf buffer: %d\n", err);
+			fprintf(stderr, "error polling ring/perf buffer: %d\n", err);
 			goto cleanup;
 		}
 		/* reset err to return 0 if exiting */
@@ -158,8 +179,9 @@
 	}
 
 cleanup:
-	perf_buffer__free(pb);
+	bpf_buffer__free(buf);
 	oomkill_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/opensnoop.bpf.c b/libbpf-tools/opensnoop.bpf.c
index e28131a..607fc8d 100644
--- a/libbpf-tools/opensnoop.bpf.c
+++ b/libbpf-tools/opensnoop.bpf.c
@@ -87,6 +87,7 @@
 {
 	struct event event = {};
 	struct args_t *ap;
+	uintptr_t stack[3];
 	int ret;
 	u32 pid = bpf_get_current_pid_tgid();
 
@@ -105,6 +106,12 @@
 	event.flags = ap->flags;
 	event.ret = ret;
 
+	bpf_get_stack(ctx, &stack, sizeof(stack),
+		      BPF_F_USER_STACK);
+	/* Skip the first address that is usually the syscall it-self */
+	event.callers[0] = stack[1];
+	event.callers[1] = stack[2];
+
 	/* emit event */
 	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU,
 			      &event, sizeof(event));
diff --git a/libbpf-tools/opensnoop.c b/libbpf-tools/opensnoop.c
index 557a63c..ce7136d 100644
--- a/libbpf-tools/opensnoop.c
+++ b/libbpf-tools/opensnoop.c
@@ -16,7 +16,11 @@
 #include <bpf/bpf.h>
 #include "opensnoop.h"
 #include "opensnoop.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
+#ifdef USE_BLAZESYM
+#include "blazesym.h"
+#endif
 
 /* Tune the buffer size and wakeup rate. These settings cope with roughly
  * 50k opens/sec.
@@ -31,6 +35,10 @@
 
 static volatile sig_atomic_t exiting = 0;
 
+#ifdef USE_BLAZESYM
+static blazesym *symbolizer;
+#endif
+
 static struct env {
 	pid_t pid;
 	pid_t tid;
@@ -42,6 +50,9 @@
 	bool extended;
 	bool failed;
 	char *name;
+#ifdef USE_BLAZESYM
+	bool callers;
+#endif
 } env = {
 	.uid = INVALID_UID
 };
@@ -53,7 +64,11 @@
 "Trace open family syscalls\n"
 "\n"
 "USAGE: opensnoop [-h] [-T] [-U] [-x] [-p PID] [-t TID] [-u UID] [-d DURATION]\n"
+#ifdef USE_BLAZESYM
+"                 [-n NAME] [-e] [-c]\n"
+#else
 "                 [-n NAME] [-e]\n"
+#endif
 "\n"
 "EXAMPLES:\n"
 "    ./opensnoop           # trace all open() syscalls\n"
@@ -65,7 +80,11 @@
 "    ./opensnoop -u 1000   # only trace UID 1000\n"
 "    ./opensnoop -d 10     # trace for 10 seconds only\n"
 "    ./opensnoop -n main   # only print process names containing \"main\"\n"
-"    ./opensnoop -e        # show extended fields\n";
+"    ./opensnoop -e        # show extended fields\n"
+#ifdef USE_BLAZESYM
+"    ./opensnoop -c        # show calling functions\n"
+#endif
+"";
 
 static const struct argp_option opts[] = {
 	{ "duration", 'd', "DURATION", 0, "Duration to trace"},
@@ -79,6 +98,9 @@
 	{ "print-uid", 'U', NULL, 0, "Print UID"},
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
 	{ "failed", 'x', NULL, 0, "Failed opens only"},
+#ifdef USE_BLAZESYM
+	{ "callers", 'c', NULL, 0, "Show calling functions"},
+#endif
 	{},
 };
 
@@ -146,6 +168,11 @@
 		}
 		env.uid = uid;
 		break;
+#ifdef USE_BLAZESYM
+	case 'c':
+		env.callers = true;
+		break;
+#endif
 	case ARGP_KEY_ARG:
 		if (pos_args++) {
 			fprintf(stderr,
@@ -176,6 +203,15 @@
 {
 	const struct event *e = data;
 	struct tm *tm;
+#ifdef USE_BLAZESYM
+	sym_src_cfg cfgs[] = {
+		{ .src_type = SRC_T_PROCESS, .params = { .process = { .pid = e->pid }}},
+	};
+	const blazesym_result *result = NULL;
+	const blazesym_csym *sym;
+	int i, j;
+#endif
+	int sps_cnt;
 	char ts[32];
 	time_t t;
 	int fd, err;
@@ -196,15 +232,45 @@
 		err = - e->ret;
 	}
 
+#ifdef USE_BLAZESYM
+	if (env.callers)
+		result = blazesym_symbolize(symbolizer, cfgs, 1, (const uint64_t *)&e->callers, 2);
+#endif
+
 	/* print output */
-	if (env.timestamp)
+	sps_cnt = 0;
+	if (env.timestamp) {
 		printf("%-8s ", ts);
-	if (env.print_uid)
-		printf("%-6d ", e->uid);
+		sps_cnt += 9;
+	}
+	if (env.print_uid) {
+		printf("%-7d ", e->uid);
+		sps_cnt += 8;
+	}
 	printf("%-6d %-16s %3d %3d ", e->pid, e->comm, fd, err);
-	if (env.extended)
+	sps_cnt += 7 + 17 + 4 + 4;
+	if (env.extended) {
 		printf("%08o ", e->flags);
+		sps_cnt += 9;
+	}
 	printf("%s\n", e->fname);
+
+#ifdef USE_BLAZESYM
+	for (i = 0; result && i < result->size; i++) {
+		if (result->entries[i].size == 0)
+			continue;
+		sym = &result->entries[i].syms[0];
+
+		for (j = 0; j < sps_cnt; j++)
+			printf(" ");
+		if (sym->line_no)
+			printf("%s:%ld\n", sym->symbol, sym->line_no);
+		else
+			printf("%s\n", sym->symbol);
+	}
+
+	blazesym_result_free(result);
+#endif
 }
 
 void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
@@ -214,6 +280,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -228,10 +295,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = opensnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = opensnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -243,15 +315,11 @@
 	obj->rodata->targ_uid = env.uid;
 	obj->rodata->targ_failed = env.failed;
 
-#ifdef __aarch64__
-	/* aarch64 has no open syscall, only openat variants.
-	 * Disable associated tracepoints that do not exist. See #3344.
-	 */
-	bpf_program__set_autoload(
-		obj->progs.tracepoint__syscalls__sys_enter_open, false);
-	bpf_program__set_autoload(
-		obj->progs.tracepoint__syscalls__sys_exit_open, false);
-#endif
+	/* aarch64 and riscv64 don't have open syscall */
+	if (!tracepoint_exists("syscalls", "sys_enter_open")) {
+		bpf_program__set_autoload(obj->progs.tracepoint__syscalls__sys_enter_open, false);
+		bpf_program__set_autoload(obj->progs.tracepoint__syscalls__sys_exit_open, false);
+	}
 
 	err = opensnoop_bpf__load(obj);
 	if (err) {
@@ -265,15 +333,25 @@
 		goto cleanup;
 	}
 
+#ifdef USE_BLAZESYM
+	if (env.callers)
+		symbolizer = blazesym_new();
+#endif
+
 	/* print headers */
 	if (env.timestamp)
 		printf("%-8s ", "TIME");
 	if (env.print_uid)
-		printf("%-6s ", "UID");
+		printf("%-7s ", "UID");
 	printf("%-6s %-16s %3s %3s ", "PID", "COMM", "FD", "ERR");
 	if (env.extended)
 		printf("%-8s ", "FLAGS");
-	printf("%s\n", "PATH");
+	printf("%s", "PATH");
+#ifdef USE_BLAZESYM
+	if (env.callers)
+		printf("/CALLER");
+#endif
+	printf("\n");
 
 	/* setup event callbacks */
 	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
@@ -310,6 +388,10 @@
 cleanup:
 	perf_buffer__free(pb);
 	opensnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+#ifdef USE_BLAZESYM
+	blazesym_free(symbolizer);
+#endif
 
 	return err != 0;
 }
diff --git a/libbpf-tools/opensnoop.h b/libbpf-tools/opensnoop.h
index 70bfdfc..97d76ee 100644
--- a/libbpf-tools/opensnoop.h
+++ b/libbpf-tools/opensnoop.h
@@ -18,6 +18,7 @@
 	uid_t uid;
 	int ret;
 	int flags;
+	__u64 callers[2];
 	char comm[TASK_COMM_LEN];
 	char fname[NAME_MAX];
 };
diff --git a/libbpf-tools/powerpc/vmlinux.h b/libbpf-tools/powerpc/vmlinux.h
index 3312543..eb11c3e 120000
--- a/libbpf-tools/powerpc/vmlinux.h
+++ b/libbpf-tools/powerpc/vmlinux.h
@@ -1 +1 @@
-vmlinux_510.h
\ No newline at end of file
+vmlinux_600.h
\ No newline at end of file
diff --git a/libbpf-tools/powerpc/vmlinux_510.h b/libbpf-tools/powerpc/vmlinux_600.h
similarity index 65%
rename from libbpf-tools/powerpc/vmlinux_510.h
rename to libbpf-tools/powerpc/vmlinux_600.h
index 3b1b012..1169185 100644
--- a/libbpf-tools/powerpc/vmlinux_510.h
+++ b/libbpf-tools/powerpc/vmlinux_600.h
@@ -5,10 +5,6 @@
 #pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
 #endif
 
-typedef char *__gnuc_va_list;
-
-typedef __gnuc_va_list va_list;
-
 typedef unsigned char __u8;
 
 typedef short int __s16;
@@ -19,8 +15,6 @@
 
 typedef unsigned int __u32;
 
-typedef long long int __s64;
-
 typedef long long unsigned int __u64;
 
 typedef __u8 u8;
@@ -33,118 +27,88 @@
 
 typedef __u32 u32;
 
-typedef __s64 s64;
-
 typedef __u64 u64;
 
-typedef struct {
-	__u32 u[4];
-} __vector128;
-
-typedef __vector128 vector128;
-
 enum {
 	false = 0,
 	true = 1,
 };
 
-typedef long int __kernel_long_t;
-
-typedef long unsigned int __kernel_ulong_t;
-
-typedef int __kernel_pid_t;
-
-typedef unsigned int __kernel_uid32_t;
-
-typedef unsigned int __kernel_gid32_t;
-
-typedef __kernel_ulong_t __kernel_size_t;
-
-typedef __kernel_long_t __kernel_ssize_t;
-
-typedef long long int __kernel_loff_t;
-
-typedef long long int __kernel_time64_t;
-
-typedef __kernel_long_t __kernel_clock_t;
-
-typedef int __kernel_timer_t;
-
-typedef int __kernel_clockid_t;
-
 typedef __u16 __be16;
 
 typedef __u32 __be32;
 
 typedef __u64 __be64;
 
-typedef unsigned int __poll_t;
-
-typedef u32 __kernel_dev_t;
-
-typedef __kernel_dev_t dev_t;
-
-typedef short unsigned int umode_t;
-
-typedef __kernel_pid_t pid_t;
-
-typedef __kernel_clockid_t clockid_t;
-
 typedef _Bool bool;
 
-typedef __kernel_uid32_t uid_t;
-
-typedef __kernel_gid32_t gid_t;
-
-typedef __kernel_loff_t loff_t;
-
-typedef __kernel_size_t size_t;
-
-typedef __kernel_ssize_t ssize_t;
-
 typedef long unsigned int ulong;
 
-typedef s32 int32_t;
-
-typedef u32 uint32_t;
-
-typedef u64 sector_t;
-
-typedef u64 blkcnt_t;
-
-typedef u64 dma_addr_t;
-
-typedef unsigned int gfp_t;
-
-typedef unsigned int fmode_t;
-
 typedef struct {
 	int counter;
 } atomic_t;
 
-typedef struct {
-	s64 counter;
-} atomic64_t;
-
-struct list_head {
-	struct list_head *next;
-	struct list_head *prev;
+struct kernel_symbol {
+	long unsigned int value;
+	const char *name;
+	const char *namespace;
 };
 
-struct hlist_node;
-
-struct hlist_head {
-	struct hlist_node *first;
+struct qspinlock {
+	union {
+		atomic_t val;
+		struct {
+			u8 locked;
+			u8 pending;
+		};
+		struct {
+			u16 locked_pending;
+			u16 tail;
+		};
+	};
 };
 
-struct hlist_node {
-	struct hlist_node *next;
-	struct hlist_node **pprev;
+typedef struct qspinlock arch_spinlock_t;
+
+struct raw_spinlock {
+	arch_spinlock_t raw_lock;
 };
 
-struct callback_head {
-	struct callback_head *next;
-	void (*func)(struct callback_head *);
+typedef struct raw_spinlock raw_spinlock_t;
+
+struct cpu_spec;
+
+typedef void (*cpu_setup_t)(long unsigned int, struct cpu_spec *);
+
+enum powerpc_pmc_type {
+	PPC_PMC_DEFAULT = 0,
+	PPC_PMC_IBM = 1,
+	PPC_PMC_PA6T = 2,
+	PPC_PMC_G4 = 3,
+};
+
+typedef void (*cpu_restore_t)();
+
+struct pt_regs;
+
+struct cpu_spec {
+	unsigned int pvr_mask;
+	unsigned int pvr_value;
+	char *cpu_name;
+	long unsigned int cpu_features;
+	unsigned int cpu_user_features;
+	unsigned int cpu_user_features2;
+	unsigned int mmu_features;
+	unsigned int icache_bsize;
+	unsigned int dcache_bsize;
+	void (*cpu_down_flush)();
+	unsigned int num_pmcs;
+	enum powerpc_pmc_type pmc_type;
+	cpu_setup_t cpu_setup;
+	cpu_restore_t cpu_restore;
+	char *platform;
+	int (*machine_check)(struct pt_regs *);
+	long int (*machine_check_early)(struct pt_regs *);
 };
 
 struct user_pt_regs {
@@ -177,309 +141,50 @@
 			long unsigned int ccr;
 			long unsigned int softe;
 			long unsigned int trap;
-			long unsigned int dar;
-			long unsigned int dsisr;
+			union {
+				long unsigned int dar;
+				long unsigned int dear;
+			};
+			union {
+				long unsigned int dsisr;
+				long unsigned int esr;
+			};
 			long unsigned int result;
 		};
 	};
 	union {
 		struct {
 			long unsigned int ppr;
-			long unsigned int kuap;
-		};
-		long unsigned int __pad[2];
-	};
-};
-
-struct lock_class_key {};
-
-struct fs_context;
-
-struct fs_parameter_spec;
-
-struct dentry;
-
-struct super_block;
-
-struct module;
-
-struct file_system_type {
-	const char *name;
-	int fs_flags;
-	int (*init_fs_context)(struct fs_context *);
-	const struct fs_parameter_spec *parameters;
-	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
-	void (*kill_sb)(struct super_block *);
-	struct module *owner;
-	struct file_system_type *next;
-	struct hlist_head fs_supers;
-	struct lock_class_key s_lock_key;
-	struct lock_class_key s_umount_key;
-	struct lock_class_key s_vfs_rename_key;
-	struct lock_class_key s_writers_key[3];
-	struct lock_class_key i_lock_key;
-	struct lock_class_key i_mutex_key;
-	struct lock_class_key i_mutex_dir_key;
-};
-
-typedef struct {
-	volatile unsigned int slock;
-} arch_spinlock_t;
-
-typedef struct {
-	volatile int lock;
-} arch_rwlock_t;
-
-struct raw_spinlock {
-	arch_spinlock_t raw_lock;
-};
-
-typedef struct raw_spinlock raw_spinlock_t;
-
-struct spinlock {
-	union {
-		struct raw_spinlock rlock;
-	};
-};
-
-typedef struct spinlock spinlock_t;
-
-typedef struct {
-	arch_rwlock_t raw_lock;
-} rwlock_t;
-
-struct ratelimit_state {
-	raw_spinlock_t lock;
-	int interval;
-	int burst;
-	int printed;
-	int missed;
-	long unsigned int begin;
-	long unsigned int flags;
-};
-
-typedef void *fl_owner_t;
-
-struct file;
-
-struct kiocb;
-
-struct iov_iter;
-
-struct dir_context;
-
-struct poll_table_struct;
-
-struct vm_area_struct;
-
-struct inode;
-
-struct file_lock;
-
-struct page;
-
-struct pipe_inode_info;
-
-struct seq_file;
-
-struct file_operations {
-	struct module *owner;
-	loff_t (*llseek)(struct file *, loff_t, int);
-	ssize_t (*read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
-	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
-	int (*iopoll)(struct kiocb *, bool);
-	int (*iterate)(struct file *, struct dir_context *);
-	int (*iterate_shared)(struct file *, struct dir_context *);
-	__poll_t (*poll)(struct file *, struct poll_table_struct *);
-	long int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int mmap_supported_flags;
-	int (*open)(struct inode *, struct file *);
-	int (*flush)(struct file *, fl_owner_t);
-	int (*release)(struct inode *, struct file *);
-	int (*fsync)(struct file *, loff_t, loff_t, int);
-	int (*fasync)(int, struct file *, int);
-	int (*lock)(struct file *, int, struct file_lock *);
-	ssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int);
-	long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	int (*check_flags)(int);
-	int (*flock)(struct file *, int, struct file_lock *);
-	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
-	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	int (*setlease)(struct file *, long int, struct file_lock **, void **);
-	long int (*fallocate)(struct file *, int, loff_t, loff_t);
-	void (*show_fdinfo)(struct seq_file *, struct file *);
-	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
-	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
-	int (*fadvise)(struct file *, loff_t, loff_t, int);
-};
-
-typedef __s64 time64_t;
-
-struct __kernel_timespec {
-	__kernel_time64_t tv_sec;
-	long long int tv_nsec;
-};
-
-struct timespec64 {
-	time64_t tv_sec;
-	long int tv_nsec;
-};
-
-enum timespec_type {
-	TT_NONE = 0,
-	TT_NATIVE = 1,
-	TT_COMPAT = 2,
-};
-
-typedef s32 old_time32_t;
-
-struct old_timespec32 {
-	old_time32_t tv_sec;
-	s32 tv_nsec;
-};
-
-struct pollfd;
-
-struct restart_block {
-	long int (*fn)(struct restart_block *);
-	union {
-		struct {
-			u32 *uaddr;
-			u32 val;
-			u32 flags;
-			u32 bitset;
-			u64 time;
-			u32 *uaddr2;
-		} futex;
-		struct {
-			clockid_t clockid;
-			enum timespec_type type;
+			long unsigned int exit_result;
 			union {
-				struct __kernel_timespec *rmtp;
-				struct old_timespec32 *compat_rmtp;
+				long unsigned int kuap;
+				long unsigned int amr;
 			};
-			u64 expires;
-		} nanosleep;
-		struct {
-			struct pollfd *ufds;
-			int nfds;
-			int has_timeout;
-			long unsigned int tv_sec;
-			long unsigned int tv_nsec;
-		} poll;
+			long unsigned int iamr;
+		};
+		long unsigned int __pad[4];
 	};
 };
 
-typedef struct {
-	__be64 pte;
-} pte_t;
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long int key;
+};
 
-typedef struct {
-	__be64 pmd;
-} pmd_t;
+struct static_key_mod;
 
-typedef struct {
-	__be64 pud;
-} pud_t;
-
-typedef struct {
-	__be64 pgd;
-} pgd_t;
-
-typedef struct {
-	long unsigned int pgprot;
-} pgprot_t;
-
-typedef pte_t *pgtable_t;
-
-struct address_space;
-
-struct kmem_cache;
-
-struct mm_struct;
-
-struct dev_pagemap;
-
-struct mem_cgroup;
-
-struct obj_cgroup;
-
-struct page {
-	long unsigned int flags;
+struct static_key {
+	atomic_t enabled;
 	union {
-		struct {
-			struct list_head lru;
-			struct address_space *mapping;
-			long unsigned int index;
-			long unsigned int private;
-		};
-		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
-			union {
-				struct list_head slab_list;
-				struct {
-					struct page *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
-			};
-		};
-		struct {
-			long unsigned int compound_head;
-			unsigned char compound_dtor;
-			unsigned char compound_order;
-			atomic_t compound_mapcount;
-			unsigned int compound_nr;
-		};
-		struct {
-			long unsigned int _compound_pad_1;
-			atomic_t hpage_pinned_refcount;
-			struct list_head deferred_list;
-		};
-		struct {
-			long unsigned int _pt_pad_1;
-			pgtable_t pmd_huge_pte;
-			long unsigned int _pt_pad_2;
-			union {
-				struct mm_struct *pt_mm;
-				atomic_t pt_frag_refcount;
-			};
-			spinlock_t ptl;
-		};
-		struct {
-			struct dev_pagemap *pgmap;
-			void *zone_device_data;
-		};
-		struct callback_head callback_head;
+		long unsigned int type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
 	};
-	union {
-		atomic_t _mapcount;
-		unsigned int page_type;
-		unsigned int active;
-		int units;
-	};
-	atomic_t _refcount;
-	union {
-		struct mem_cgroup *mem_cgroup;
-		struct obj_cgroup **obj_cgroups;
-	};
+};
+
+struct static_key_false {
+	struct static_key key;
 };
 
 struct slb_entry {
@@ -487,41 +192,6 @@
 	u64 vsid;
 };
 
-struct slice_mask {
-	u64 low_slices;
-	long unsigned int high_slices[64];
-};
-
-struct hash_mm_context {
-	u16 user_psize;
-	unsigned char low_slices_psize[8];
-	unsigned char high_slices_psize[2048];
-	long unsigned int slb_addr_limit;
-	struct slice_mask mask_64k;
-	struct slice_mask mask_4k;
-	struct slice_mask mask_16m;
-	struct slice_mask mask_16g;
-};
-
-typedef long unsigned int mm_context_id_t;
-
-typedef struct {
-	union {
-		mm_context_id_t id;
-		mm_context_id_t extended_id[8];
-	};
-	atomic_t active_cpus;
-	atomic_t copros;
-	atomic_t vas_windows;
-	struct hash_mm_context *hash_context;
-	long unsigned int vdso_base;
-	void *pte_frag;
-	void *pmd_frag;
-	struct list_head iommu_group_mem_list;
-	u32 pkey_allocation_map;
-	s16 execute_only_pkey;
-} mm_context_t;
-
 struct lppaca {
 	__be32 desc;
 	__be16 size;
@@ -588,15 +258,6 @@
 	u8 do_nap;
 	u8 napped[8];
 	struct kvmppc_vcore *vc[4];
-	long unsigned int lpcr_req;
-	long unsigned int lpidr_req;
-	long unsigned int host_lpcr;
-	u32 do_set;
-	u32 do_restore;
-	union {
-		u32 allphases;
-		u8 phase[4];
-	} lpcr_sync;
 };
 
 struct kvm_vcpu;
@@ -616,7 +277,6 @@
 	u8 hwthread_state;
 	u8 host_ipi;
 	u8 ptid;
-	u8 tid;
 	u8 fake_suspend;
 	struct kvm_vcpu *kvm_vcpu;
 	struct kvmppc_vcore *kvm_vcore;
@@ -637,26 +297,6 @@
 	u64 host_fscr;
 };
 
-struct kvmppc_book3s_shadow_vcpu {
-	bool in_use;
-	ulong gpr[14];
-	u32 cr;
-	ulong xer;
-	ulong ctr;
-	ulong lr;
-	ulong pc;
-	ulong shadow_srr1;
-	ulong fault_dar;
-	u32 fault_dsisr;
-	u32 last_inst;
-	u8 slb_max;
-	struct {
-		u64 esid;
-		u64 vsid;
-	} slb[64];
-	u64 shadow_fscr;
-};
-
 struct cpu_accounting_data {
 	long unsigned int utime;
 	long unsigned int stime;
@@ -678,6 +318,184 @@
 	u8 in_guest[4];
 };
 
+enum MCE_Version {
+	MCE_V1 = 1,
+};
+
+enum MCE_Severity {
+	MCE_SEV_NO_ERROR = 0,
+	MCE_SEV_WARNING = 1,
+	MCE_SEV_SEVERE = 2,
+	MCE_SEV_FATAL = 3,
+};
+
+enum MCE_Disposition {
+	MCE_DISPOSITION_RECOVERED = 0,
+	MCE_DISPOSITION_NOT_RECOVERED = 1,
+};
+
+enum MCE_Initiator {
+	MCE_INITIATOR_UNKNOWN = 0,
+	MCE_INITIATOR_CPU = 1,
+	MCE_INITIATOR_PCI = 2,
+	MCE_INITIATOR_ISA = 3,
+	MCE_INITIATOR_MEMORY = 4,
+	MCE_INITIATOR_POWERMGM = 5,
+};
+
+enum MCE_ErrorType {
+	MCE_ERROR_TYPE_UNKNOWN = 0,
+	MCE_ERROR_TYPE_UE = 1,
+	MCE_ERROR_TYPE_SLB = 2,
+	MCE_ERROR_TYPE_ERAT = 3,
+	MCE_ERROR_TYPE_TLB = 4,
+	MCE_ERROR_TYPE_USER = 5,
+	MCE_ERROR_TYPE_RA = 6,
+	MCE_ERROR_TYPE_LINK = 7,
+	MCE_ERROR_TYPE_DCACHE = 8,
+	MCE_ERROR_TYPE_ICACHE = 9,
+};
+
+enum MCE_ErrorClass {
+	MCE_ECLASS_UNKNOWN = 0,
+	MCE_ECLASS_HARDWARE = 1,
+	MCE_ECLASS_HARD_INDETERMINATE = 2,
+	MCE_ECLASS_SOFTWARE = 3,
+	MCE_ECLASS_SOFT_INDETERMINATE = 4,
+};
+
+enum MCE_UeErrorType {
+	MCE_UE_ERROR_INDETERMINATE = 0,
+	MCE_UE_ERROR_IFETCH = 1,
+	MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH = 2,
+	MCE_UE_ERROR_LOAD_STORE = 3,
+	MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 4,
+};
+
+enum MCE_SlbErrorType {
+	MCE_SLB_ERROR_INDETERMINATE = 0,
+	MCE_SLB_ERROR_PARITY = 1,
+	MCE_SLB_ERROR_MULTIHIT = 2,
+};
+
+enum MCE_EratErrorType {
+	MCE_ERAT_ERROR_INDETERMINATE = 0,
+	MCE_ERAT_ERROR_PARITY = 1,
+	MCE_ERAT_ERROR_MULTIHIT = 2,
+};
+
+enum MCE_TlbErrorType {
+	MCE_TLB_ERROR_INDETERMINATE = 0,
+	MCE_TLB_ERROR_PARITY = 1,
+	MCE_TLB_ERROR_MULTIHIT = 2,
+};
+
+enum MCE_UserErrorType {
+	MCE_USER_ERROR_INDETERMINATE = 0,
+	MCE_USER_ERROR_TLBIE = 1,
+	MCE_USER_ERROR_SCV = 2,
+};
+
+enum MCE_RaErrorType {
+	MCE_RA_ERROR_INDETERMINATE = 0,
+	MCE_RA_ERROR_IFETCH = 1,
+	MCE_RA_ERROR_IFETCH_FOREIGN = 2,
+	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH = 3,
+	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH_FOREIGN = 4,
+	MCE_RA_ERROR_LOAD = 5,
+	MCE_RA_ERROR_STORE = 6,
+	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 7,
+	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE_FOREIGN = 8,
+	MCE_RA_ERROR_LOAD_STORE_FOREIGN = 9,
+};
+
+enum MCE_LinkErrorType {
+	MCE_LINK_ERROR_INDETERMINATE = 0,
+	MCE_LINK_ERROR_IFETCH_TIMEOUT = 1,
+	MCE_LINK_ERROR_PAGE_TABLE_WALK_IFETCH_TIMEOUT = 2,
+	MCE_LINK_ERROR_LOAD_TIMEOUT = 3,
+	MCE_LINK_ERROR_STORE_TIMEOUT = 4,
+	MCE_LINK_ERROR_PAGE_TABLE_WALK_LOAD_STORE_TIMEOUT = 5,
+};
+
+struct machine_check_event {
+	enum MCE_Version version: 8;
+	u8 in_use;
+	enum MCE_Severity severity: 8;
+	enum MCE_Initiator initiator: 8;
+	enum MCE_ErrorType error_type: 8;
+	enum MCE_ErrorClass error_class: 8;
+	enum MCE_Disposition disposition: 8;
+	bool sync_error;
+	u16 cpu;
+	u64 gpr3;
+	u64 srr0;
+	u64 srr1;
+	union {
+		struct {
+			enum MCE_UeErrorType ue_error_type: 8;
+			u8 effective_address_provided;
+			u8 physical_address_provided;
+			u8 ignore_event;
+			u8 reserved_1[4];
+			u64 effective_address;
+			u64 physical_address;
+			u8 reserved_2[8];
+		} ue_error;
+		struct {
+			enum MCE_SlbErrorType slb_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} slb_error;
+		struct {
+			enum MCE_EratErrorType erat_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} erat_error;
+		struct {
+			enum MCE_TlbErrorType tlb_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} tlb_error;
+		struct {
+			enum MCE_UserErrorType user_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} user_error;
+		struct {
+			enum MCE_RaErrorType ra_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} ra_error;
+		struct {
+			enum MCE_LinkErrorType link_error_type: 8;
+			u8 effective_address_provided;
+			u8 reserved_1[6];
+			u64 effective_address;
+			u8 reserved_2[16];
+		} link_error;
+	} u;
+};
+
+struct mce_info {
+	int mce_nest_count;
+	struct machine_check_event mce_event[10];
+	int mce_queue_count;
+	struct machine_check_event mce_event_queue[10];
+	int mce_ue_count;
+	struct machine_check_event mce_ue_event_queue[10];
+};
+
 struct mmiowb_state {
 	u16 nesting_count;
 	u16 mmiowb_pending;
@@ -710,21 +528,21 @@
 	long: 64;
 	long: 64;
 	u64 exgen[10];
-	u64 exslb[10];
 	u16 vmalloc_sllp;
 	u8 slb_cache_ptr;
 	u8 stab_rr;
 	u32 slb_used_bitmap;
 	u32 slb_kern_bitmap;
 	u32 slb_cache[8];
-	mm_context_id_t mm_ctx_id;
 	unsigned char mm_ctx_low_slices_psize[8];
 	unsigned char mm_ctx_high_slices_psize[2048];
-	long unsigned int mm_ctx_slb_addr_limit;
 	struct task_struct *__current;
 	u64 kstack;
 	u64 saved_r1;
 	u64 saved_msr;
+	u64 exit_save_r1;
+	u8 hsrr_valid;
+	u8 srr_valid;
 	u8 irq_soft_mask;
 	u8 irq_happened;
 	u8 irq_work_pending;
@@ -755,11 +573,15 @@
 	struct cpu_accounting_data accounting;
 	u64 dtl_ridx;
 	struct dtl_entry *dtl_curr;
-	struct kvmppc_book3s_shadow_vcpu shadow_vcpu;
 	struct kvmppc_host_state kvm_hstate;
 	struct sibling_subcore_state *sibling_subcore_state;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	u64 exrfi[10];
 	void *rfi_flush_fallback_area;
 	u64 l1d_flush_size;
@@ -769,9 +591,8 @@
 	u16 slb_save_cache_ptr;
 	long unsigned int canary;
 	struct mmiowb_state mmiowb_state;
-	long: 32;
-	long: 64;
-	long: 64;
+	struct mce_info *mce_info;
+	u8 mce_pending_irq_work;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -786,13 +607,424 @@
 	long: 64;
 };
 
+typedef void (*perf_irq_t)(struct pt_regs *);
+
+typedef signed char __s8;
+
+typedef long long int __s64;
+
+typedef __s8 s8;
+
+typedef __s64 s64;
+
+typedef struct {
+	__u32 u[4];
+} __vector128;
+
+typedef __vector128 vector128;
+
+typedef long int __kernel_long_t;
+
+typedef long unsigned int __kernel_ulong_t;
+
+typedef int __kernel_pid_t;
+
+typedef unsigned int __kernel_uid32_t;
+
+typedef unsigned int __kernel_gid32_t;
+
+typedef __kernel_ulong_t __kernel_size_t;
+
+typedef __kernel_long_t __kernel_ssize_t;
+
+typedef long long int __kernel_loff_t;
+
+typedef long long int __kernel_time64_t;
+
+typedef __kernel_long_t __kernel_clock_t;
+
+typedef int __kernel_timer_t;
+
+typedef int __kernel_clockid_t;
+
+typedef unsigned int __poll_t;
+
+typedef u32 __kernel_dev_t;
+
+typedef __kernel_dev_t dev_t;
+
+typedef short unsigned int umode_t;
+
+typedef __kernel_pid_t pid_t;
+
+typedef __kernel_clockid_t clockid_t;
+
+typedef __kernel_uid32_t uid_t;
+
+typedef __kernel_gid32_t gid_t;
+
+typedef __kernel_loff_t loff_t;
+
+typedef __kernel_size_t size_t;
+
+typedef __kernel_ssize_t ssize_t;
+
+typedef s32 int32_t;
+
+typedef u32 uint32_t;
+
+typedef u64 sector_t;
+
+typedef u64 blkcnt_t;
+
+typedef u64 dma_addr_t;
+
+typedef unsigned int gfp_t;
+
+typedef unsigned int fmode_t;
+
+typedef u64 phys_addr_t;
+
+typedef struct {
+	s64 counter;
+} atomic64_t;
+
+struct list_head {
+	struct list_head *next;
+	struct list_head *prev;
+};
+
+struct hlist_node;
+
+struct hlist_head {
+	struct hlist_node *first;
+};
+
+struct hlist_node {
+	struct hlist_node *next;
+	struct hlist_node **pprev;
+};
+
+struct callback_head {
+	struct callback_head *next;
+	void (*func)(struct callback_head *);
+};
+
+struct ppc_cache_info {
+	u32 size;
+	u32 line_size;
+	u32 block_size;
+	u32 log_block_size;
+	u32 blocks_per_page;
+	u32 sets;
+	u32 assoc;
+};
+
+struct ppc64_caches {
+	struct ppc_cache_info l1d;
+	struct ppc_cache_info l1i;
+	struct ppc_cache_info l2;
+	struct ppc_cache_info l3;
+};
+
+struct exception_table_entry {
+	int insn;
+	int fixup;
+};
+
+typedef int (*initcall_t)();
+
+struct lock_class_key {};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct dentry;
+
+struct super_block;
+
+struct module;
+
+struct file_system_type {
+	const char *name;
+	int fs_flags;
+	int (*init_fs_context)(struct fs_context *);
+	const struct fs_parameter_spec *parameters;
+	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
+	void (*kill_sb)(struct super_block *);
+	struct module *owner;
+	struct file_system_type *next;
+	struct hlist_head fs_supers;
+	struct lock_class_key s_lock_key;
+	struct lock_class_key s_umount_key;
+	struct lock_class_key s_vfs_rename_key;
+	struct lock_class_key s_writers_key[3];
+	struct lock_class_key i_lock_key;
+	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
+	struct lock_class_key i_mutex_dir_key;
+};
+
+struct qrwlock {
+	union {
+		atomic_t cnts;
+		struct {
+			u8 wlocked;
+			u8 __lstate[3];
+		};
+	};
+	arch_spinlock_t wait_lock;
+};
+
+typedef struct qrwlock arch_rwlock_t;
+
+struct lockdep_map {};
+
+struct ratelimit_state {
+	raw_spinlock_t lock;
+	int interval;
+	int burst;
+	int printed;
+	int missed;
+	long unsigned int begin;
+	long unsigned int flags;
+};
+
+typedef void *fl_owner_t;
+
+struct file;
+
+struct kiocb;
+
+struct iov_iter;
+
+struct io_comp_batch;
+
+struct dir_context;
+
+struct poll_table_struct;
+
+struct vm_area_struct;
+
+struct inode;
+
+struct file_lock;
+
+struct page;
+
+struct pipe_inode_info;
+
+struct seq_file;
+
+struct io_uring_cmd;
+
+struct file_operations {
+	struct module *owner;
+	loff_t (*llseek)(struct file *, loff_t, int);
+	ssize_t (*read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
+	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
+	int (*iterate)(struct file *, struct dir_context *);
+	int (*iterate_shared)(struct file *, struct dir_context *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int mmap_supported_flags;
+	int (*open)(struct inode *, struct file *);
+	int (*flush)(struct file *, fl_owner_t);
+	int (*release)(struct inode *, struct file *);
+	int (*fsync)(struct file *, loff_t, loff_t, int);
+	int (*fasync)(int, struct file *, int);
+	int (*lock)(struct file *, int, struct file_lock *);
+	ssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int);
+	long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	int (*check_flags)(int);
+	int (*flock)(struct file *, int, struct file_lock *);
+	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	int (*setlease)(struct file *, long int, struct file_lock **, void **);
+	long int (*fallocate)(struct file *, int, loff_t, loff_t);
+	void (*show_fdinfo)(struct seq_file *, struct file *);
+	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
+	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
+	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	short unsigned int line;
+	short unsigned int flags;
+};
+
+struct static_call_key {
+	void *func;
+};
+
+typedef struct {
+	__be64 pte;
+} pte_t;
+
+typedef struct {
+	__be64 pmd;
+} pmd_t;
+
+typedef struct {
+	__be64 pud;
+} pud_t;
+
+typedef struct {
+	__be64 pgd;
+} pgd_t;
+
+typedef struct {
+	long unsigned int pgprot;
+} pgprot_t;
+
+typedef pte_t *pgtable_t;
+
+typedef atomic64_t atomic_long_t;
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
+struct address_space;
+
+struct page_pool;
+
+struct mm_struct;
+
+struct dev_pagemap;
+
+struct page {
+	long unsigned int flags;
+	union {
+		struct {
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			long unsigned int private;
+		};
+		struct {
+			long unsigned int pp_magic;
+			struct page_pool *pp;
+			long unsigned int _pp_mapping_pad;
+			long unsigned int dma_addr;
+			union {
+				long unsigned int dma_addr_upper;
+				atomic_long_t pp_frag_count;
+			};
+		};
+		struct {
+			long unsigned int compound_head;
+			unsigned char compound_dtor;
+			unsigned char compound_order;
+			atomic_t compound_mapcount;
+			atomic_t compound_pincount;
+			unsigned int compound_nr;
+		};
+		struct {
+			long unsigned int _compound_pad_1;
+			long unsigned int _compound_pad_2;
+			struct list_head deferred_list;
+		};
+		struct {
+			long unsigned int _pt_pad_1;
+			pgtable_t pmd_huge_pte;
+			long unsigned int _pt_pad_2;
+			union {
+				struct mm_struct *pt_mm;
+				atomic_t pt_frag_refcount;
+			};
+			spinlock_t ptl;
+		};
+		struct {
+			struct dev_pagemap *pgmap;
+			void *zone_device_data;
+		};
+		struct callback_head callback_head;
+	};
+	union {
+		atomic_t _mapcount;
+		unsigned int page_type;
+	};
+	atomic_t _refcount;
+	long unsigned int memcg_data;
+};
+
+struct slice_mask {
+	u64 low_slices;
+	long unsigned int high_slices[64];
+};
+
+struct hash_mm_context {
+	u16 user_psize;
+	unsigned char low_slices_psize[8];
+	unsigned char high_slices_psize[2048];
+	long unsigned int slb_addr_limit;
+	struct slice_mask mask_64k;
+	struct slice_mask mask_4k;
+	struct slice_mask mask_16m;
+	struct slice_mask mask_16g;
+};
+
+typedef long unsigned int mm_context_id_t;
+
+typedef struct {
+	union {
+		mm_context_id_t id;
+		mm_context_id_t extended_id[8];
+	};
+	atomic_t active_cpus;
+	atomic_t copros;
+	atomic_t vas_windows;
+	struct hash_mm_context *hash_context;
+	void *vdso;
+	void *pte_frag;
+	void *pmd_frag;
+	struct list_head iommu_group_mem_list;
+	u32 pkey_allocation_map;
+	s16 execute_only_pkey;
+} mm_context_t;
+
+enum {
+	FW_FEATURE_PSERIES_POSSIBLE = 17591370252287ULL,
+	FW_FEATURE_PSERIES_ALWAYS = 0ULL,
+	FW_FEATURE_POWERNV_POSSIBLE = 275146342400ULL,
+	FW_FEATURE_POWERNV_ALWAYS = 0ULL,
+	FW_FEATURE_PS3_POSSIBLE = 12582912ULL,
+	FW_FEATURE_PS3_ALWAYS = 12582912ULL,
+	FW_FEATURE_NATIVE_POSSIBLE = 0ULL,
+	FW_FEATURE_NATIVE_ALWAYS = 0ULL,
+	FW_FEATURE_POSSIBLE = 17591638687743ULL,
+	FW_FEATURE_ALWAYS = 0ULL,
+};
+
 struct thread_info {
 	int preempt_count;
+	unsigned int cpu;
 	long unsigned int local_flags;
 	unsigned char slb_preload_nr;
 	unsigned char slb_preload_tail;
 	u32 slb_preload_esid[16];
-	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -847,36 +1079,6 @@
 	struct rb_node *rb_left;
 };
 
-struct sched_statistics {
-	u64 wait_start;
-	u64 wait_max;
-	u64 wait_count;
-	u64 wait_sum;
-	u64 iowait_count;
-	u64 iowait_sum;
-	u64 sleep_start;
-	u64 sleep_max;
-	s64 sum_sleep_runtime;
-	u64 block_start;
-	u64 block_max;
-	u64 exec_max;
-	u64 slice_max;
-	u64 nr_migrations_cold;
-	u64 nr_failed_migrations_affine;
-	u64 nr_failed_migrations_running;
-	u64 nr_failed_migrations_hot;
-	u64 nr_forced_migrations;
-	u64 nr_wakeups;
-	u64 nr_wakeups_sync;
-	u64 nr_wakeups_migrate;
-	u64 nr_wakeups_local;
-	u64 nr_wakeups_remote;
-	u64 nr_wakeups_affine;
-	u64 nr_wakeups_affine_attempts;
-	u64 nr_wakeups_passive;
-	u64 nr_wakeups_idle;
-};
-
 struct util_est {
 	unsigned int enqueued;
 	unsigned int ewma;
@@ -914,7 +1116,6 @@
 	u64 vruntime;
 	u64 prev_sum_exec_runtime;
 	u64 nr_migrations;
-	struct sched_statistics statistics;
 	int depth;
 	struct sched_entity *parent;
 	struct cfs_rq *cfs_rq;
@@ -923,6 +1124,17 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct sched_avg avg;
 };
 
@@ -980,12 +1192,7 @@
 	struct sched_dl_entity *pi_se;
 };
 
-struct uclamp_se {
-	unsigned int value: 11;
-	unsigned int bucket_id: 3;
-	unsigned int active: 1;
-	unsigned int user_defined: 1;
-};
+struct sched_statistics {};
 
 struct cpumask {
 	long unsigned int bits[32];
@@ -1026,6 +1233,49 @@
 	int count[4];
 };
 
+enum timespec_type {
+	TT_NONE = 0,
+	TT_NATIVE = 1,
+	TT_COMPAT = 2,
+};
+
+struct __kernel_timespec;
+
+struct old_timespec32;
+
+struct pollfd;
+
+struct restart_block {
+	long unsigned int arch_data;
+	long int (*fn)(struct restart_block *);
+	union {
+		struct {
+			u32 *uaddr;
+			u32 val;
+			u32 flags;
+			u32 bitset;
+			u64 time;
+			u32 *uaddr2;
+		} futex;
+		struct {
+			clockid_t clockid;
+			enum timespec_type type;
+			union {
+				struct __kernel_timespec *rmtp;
+				struct old_timespec32 *compat_rmtp;
+			};
+			u64 expires;
+		} nanosleep;
+		struct {
+			struct pollfd *ufds;
+			int nfds;
+			int has_timeout;
+			long unsigned int tv_sec;
+			long unsigned int tv_nsec;
+		} poll;
+	};
+};
+
 struct prev_cputime {};
 
 struct rb_root {
@@ -1071,10 +1321,6 @@
 	sigset_t signal;
 };
 
-typedef struct {
-	uid_t val;
-} kuid_t;
-
 struct seccomp_filter;
 
 struct seccomp {
@@ -1083,19 +1329,13 @@
 	struct seccomp_filter *filter;
 };
 
+struct syscall_user_dispatch {};
+
 struct wake_q_node {
 	struct wake_q_node *next;
 };
 
-struct task_io_accounting {
-	u64 rchar;
-	u64 wchar;
-	u64 syscr;
-	u64 syscw;
-	u64 read_bytes;
-	u64 write_bytes;
-	u64 cancelled_write_bytes;
-};
+struct task_io_accounting {};
 
 typedef struct {
 	long unsigned int bits[4];
@@ -1113,17 +1353,16 @@
 
 typedef struct seqcount_spinlock seqcount_spinlock_t;
 
-typedef atomic64_t atomic_long_t;
-
 struct optimistic_spin_queue {
 	atomic_t tail;
 };
 
 struct mutex {
 	atomic_long_t owner;
-	spinlock_t wait_lock;
+	raw_spinlock_t wait_lock;
 	struct optimistic_spin_queue osq;
 	struct list_head wait_list;
+	void *magic;
 };
 
 struct tlbflush_unmap_batch {};
@@ -1134,11 +1373,17 @@
 	__u32 size;
 };
 
-struct latency_record {
-	long unsigned int backtrace[12];
-	unsigned int count;
-	long unsigned int time;
-	long unsigned int max;
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	long unsigned int expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
+};
+
+struct llist_head {
+	struct llist_node *first;
 };
 
 struct debug_reg {};
@@ -1181,7 +1426,7 @@
 	u8 load_slb;
 	u8 load_fp;
 	u8 load_vec;
-	long: 40;
+	long: 0;
 	struct thread_vr_state vr_state;
 	struct thread_vr_state *vr_save_area;
 	long unsigned int vrsave;
@@ -1200,8 +1445,6 @@
 	struct thread_fp_state ckfp_state;
 	struct thread_vr_state ckvr_state;
 	long unsigned int ckvrsave;
-	long unsigned int amr;
-	long unsigned int iamr;
 	long unsigned int dscr;
 	long unsigned int fscr;
 	int dscr_inherit;
@@ -1248,10 +1491,10 @@
 
 struct sighand_struct;
 
-struct audit_context;
-
 struct rt_mutex_waiter;
 
+struct mutex_waiter;
+
 struct bio_list;
 
 struct blk_plug;
@@ -1272,8 +1515,6 @@
 
 struct robust_list_head;
 
-struct compat_robust_list_head;
-
 struct futex_pi_state;
 
 struct perf_event_context;
@@ -1288,20 +1529,23 @@
 
 struct ftrace_ret_stack;
 
-struct request_queue;
+struct mem_cgroup;
 
 struct uprobe_task;
 
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
 struct task_struct {
 	struct thread_info thread_info;
-	volatile long int state;
+	unsigned int __state;
 	void *stack;
 	refcount_t usage;
 	unsigned int flags;
 	unsigned int ptrace;
 	int on_cpu;
 	struct __call_single_node wake_entry;
-	unsigned int cpu;
 	unsigned int wakee_flips;
 	long unsigned int wakee_flip_decay_ts;
 	struct task_struct *last_wakee;
@@ -1312,31 +1556,43 @@
 	int static_prio;
 	int normal_prio;
 	unsigned int rt_priority;
-	const struct sched_class *sched_class;
+	long: 64;
 	long: 64;
 	long: 64;
 	struct sched_entity se;
 	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
 	struct sched_dl_entity dl;
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
+	const struct sched_class *sched_class;
+	struct task_group *sched_task_group;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_statistics stats;
 	struct hlist_head preempt_notifiers;
 	unsigned int btrace_seq;
 	unsigned int policy;
 	int nr_cpus_allowed;
 	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
 	cpumask_t cpus_mask;
-	long unsigned int rcu_tasks_nvcsw;
-	u8 rcu_tasks_holdout;
-	u8 rcu_tasks_idx;
-	int rcu_tasks_idle_cpu;
-	struct list_head rcu_tasks_holdout_list;
+	void *migration_pending;
+	short unsigned int migration_disabled;
+	short unsigned int migration_flags;
 	int trc_reader_nesting;
 	int trc_ipi_to_cpu;
 	union rcu_special trc_reader_special;
-	bool trc_reader_checked;
 	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
 	struct sched_info sched_info;
 	struct list_head tasks;
 	struct plist_node pushable_tasks;
@@ -1354,8 +1610,7 @@
 	unsigned int sched_reset_on_fork: 1;
 	unsigned int sched_contributes_to_load: 1;
 	unsigned int sched_migrated: 1;
-	unsigned int sched_psi_wake_requeue: 1;
-	int: 28;
+	long: 29;
 	unsigned int sched_remote_wakeup: 1;
 	unsigned int in_execve: 1;
 	unsigned int in_iowait: 1;
@@ -1363,8 +1618,7 @@
 	unsigned int in_user_fault: 1;
 	unsigned int no_cgroup_migration: 1;
 	unsigned int frozen: 1;
-	unsigned int use_memdelay: 1;
-	unsigned int in_memstall: 1;
+	unsigned int in_eventfd_signal: 1;
 	long unsigned int atomic_flags;
 	struct restart_block restart_block;
 	pid_t pid;
@@ -1384,6 +1638,7 @@
 	struct completion *vfork_done;
 	int *set_child_tid;
 	int *clear_child_tid;
+	void *worker_private;
 	u64 utime;
 	u64 stime;
 	u64 utimescaled;
@@ -1421,10 +1676,8 @@
 	size_t sas_ss_size;
 	unsigned int sas_ss_flags;
 	struct callback_head *task_works;
-	struct audit_context *audit_context;
-	kuid_t loginuid;
-	unsigned int sessionid;
 	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
 	u64 parent_exec_id;
 	u64 self_exec_id;
 	spinlock_t alloc_lock;
@@ -1433,6 +1686,7 @@
 	struct rb_root_cached pi_waiters;
 	struct task_struct *pi_top_task;
 	struct rt_mutex_waiter *pi_blocked_on;
+	struct mutex_waiter *blocked_on;
 	void *journal_info;
 	struct bio_list *bio_list;
 	struct blk_plug *plug;
@@ -1443,10 +1697,6 @@
 	long unsigned int ptrace_message;
 	kernel_siginfo_t *last_siginfo;
 	struct task_io_accounting ioac;
-	unsigned int psi_flags;
-	u64 acct_rss_mem1;
-	u64 acct_vm_mem1;
-	u64 acct_timexpd;
 	nodemask_t mems_allowed;
 	seqcount_spinlock_t mems_allowed_seq;
 	int cpuset_mem_spread_rotor;
@@ -1454,7 +1704,6 @@
 	struct css_set *cgroups;
 	struct list_head cg_list;
 	struct robust_list_head *robust_list;
-	struct compat_robust_list_head *compat_robust_list;
 	struct list_head pi_state_list;
 	struct futex_pi_state *pi_state_cache;
 	struct mutex futex_exit_mutex;
@@ -1493,8 +1742,6 @@
 	int nr_dirtied;
 	int nr_dirtied_pause;
 	long unsigned int dirty_paused_when;
-	int latency_record_count;
-	struct latency_record latency_record[32];
 	u64 timer_slack_ns;
 	u64 default_timer_slack_ns;
 	int curr_ret_stack;
@@ -1510,48 +1757,258 @@
 	int memcg_oom_order;
 	unsigned int memcg_nr_pages_over_high;
 	struct mem_cgroup *active_memcg;
-	struct request_queue *throttle_queue;
 	struct uprobe_task *utask;
-	unsigned int sequential_io;
-	unsigned int sequential_io_avg;
+	struct kmap_ctrl kmap_ctrl;
 	int pagefault_disabled;
 	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
 	refcount_t stack_refcount;
-	void *security;
+	struct bpf_local_storage *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	struct llist_head kretprobe_instances;
+	long: 64;
 	struct thread_struct thread;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 };
 
-typedef __be32 rtas_arg_t;
+typedef __s64 time64_t;
 
-struct rtas_args {
-	__be32 token;
-	__be32 nargs;
-	__be32 nret;
-	rtas_arg_t args[16];
-	rtas_arg_t *rets;
+struct __kernel_timespec {
+	__kernel_time64_t tv_sec;
+	long long int tv_nsec;
+};
+
+struct timespec64 {
+	time64_t tv_sec;
+	long int tv_nsec;
+};
+
+typedef s32 old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t tv_sec;
+	s32 tv_nsec;
+};
+
+struct pollfd {
+	int fd;
+	short int events;
+	short int revents;
+};
+
+struct device;
+
+struct attribute_group;
+
+struct perf_cpu_context;
+
+struct kmem_cache;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int *pmu_disable_count;
+	struct perf_cpu_context *pmu_cpu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	int (*filter_match)(struct perf_event *);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = -4,
+	PERF_EVENT_STATE_EXIT = -3,
+	PERF_EVENT_STATE_ERROR = -2,
+	PERF_EVENT_STATE_OFF = -1,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
 };
 
 typedef struct {
-	__u8 b[16];
-} uuid_t;
+	long int v;
+} local_t;
 
-enum pcpu_fc {
-	PCPU_FC_AUTO = 0,
-	PCPU_FC_EMBED = 1,
-	PCPU_FC_PAGE = 2,
-	PCPU_FC_NR = 3,
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			long unsigned int config_base;
+			long unsigned int event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			struct arch_hw_breakpoint info;
+			struct list_head bp_list;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	long unsigned int addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
 };
 
 struct wait_queue_head {
@@ -1561,317 +2018,158 @@
 
 typedef struct wait_queue_head wait_queue_head_t;
 
-struct seqcount_raw_spinlock {
-	seqcount_t seqcount;
+struct rcuwait {
+	struct task_struct *task;
 };
 
-typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct ftrace_ops;
+
+struct ftrace_regs;
+
+typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);
+
+struct ftrace_hash;
+
+struct ftrace_ops_hash {
+	struct ftrace_hash *notrace_hash;
+	struct ftrace_hash *filter_hash;
+	struct mutex regex_lock;
+};
+
+enum ftrace_ops_cmd {
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_SELF = 0,
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER = 1,
+	FTRACE_OPS_CMD_DISABLE_SHARE_IPMODIFY_PEER = 2,
+};
+
+typedef int (*ftrace_ops_func_t)(struct ftrace_ops *, enum ftrace_ops_cmd);
+
+struct ftrace_ops {
+	ftrace_func_t func;
+	struct ftrace_ops *next;
+	long unsigned int flags;
+	void *private;
+	ftrace_func_t saved_func;
+	struct ftrace_ops_hash local_hash;
+	struct ftrace_ops_hash *func_hash;
+	struct ftrace_ops_hash old_hash;
+	long unsigned int trampoline;
+	long unsigned int trampoline_size;
+	struct list_head list;
+	ftrace_ops_func_t ops_func;
+};
+
+struct perf_buffer;
+
+struct fasync_struct;
+
+struct perf_addr_filter_range;
+
+struct pid_namespace;
+
+struct bpf_prog;
+
+struct trace_event_call;
+
+struct event_filter;
+
+struct perf_cgroup;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	long unsigned int rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	int pending_wakeup;
+	int pending_kill;
+	int pending_disable;
+	long unsigned int pending_addr;
+	struct irq_work pending;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	long unsigned int addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	struct ftrace_ops ftrace_ops;
+	struct perf_cgroup *cgrp;
+	struct list_head sb_list;
+};
+
+typedef struct cpumask cpumask_var_t[1];
 
 typedef struct {
-	seqcount_spinlock_t seqcount;
-	spinlock_t lock;
-} seqlock_t;
-
-enum node_states {
-	N_POSSIBLE = 0,
-	N_ONLINE = 1,
-	N_NORMAL_MEMORY = 2,
-	N_HIGH_MEMORY = 2,
-	N_MEMORY = 3,
-	N_CPU = 4,
-	N_GENERIC_INITIATOR = 5,
-	NR_NODE_STATES = 6,
-};
-
-struct userfaultfd_ctx;
-
-struct vm_userfaultfd_ctx {
-	struct userfaultfd_ctx *ctx;
-};
-
-struct anon_vma;
-
-struct vm_operations_struct;
-
-struct vm_area_struct {
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	struct vm_area_struct *vm_next;
-	struct vm_area_struct *vm_prev;
-	struct rb_node vm_rb;
-	long unsigned int rb_subtree_gap;
-	struct mm_struct *vm_mm;
-	pgprot_t vm_page_prot;
-	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
-	struct list_head anon_vma_chain;
-	struct anon_vma *anon_vma;
-	const struct vm_operations_struct *vm_ops;
-	long unsigned int vm_pgoff;
-	struct file *vm_file;
-	void *vm_private_data;
-	atomic_long_t swap_readahead_info;
-	struct mempolicy *vm_policy;
-	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
-};
-
-enum {
-	MM_FILEPAGES = 0,
-	MM_ANONPAGES = 1,
-	MM_SWAPENTS = 2,
-	MM_SHMEMPAGES = 3,
-	NR_MM_COUNTERS = 4,
-};
-
-struct mm_rss_stat {
-	atomic_long_t count[4];
-};
-
-struct rw_semaphore {
-	atomic_long_t count;
-	atomic_long_t owner;
-	struct optimistic_spin_queue osq;
-	raw_spinlock_t wait_lock;
-	struct list_head wait_list;
-};
-
-struct swait_queue_head {
-	raw_spinlock_t lock;
-	struct list_head task_list;
-};
-
-struct completion {
-	unsigned int done;
-	struct swait_queue_head wait;
-};
-
-struct xol_area;
-
-struct uprobes_state {
-	struct xol_area *xol_area;
-};
-
-struct work_struct;
-
-typedef void (*work_func_t)(struct work_struct *);
-
-struct work_struct {
-	atomic_long_t data;
-	struct list_head entry;
-	work_func_t func;
-};
-
-struct linux_binfmt;
-
-struct core_state;
-
-struct kioctx_table;
-
-struct user_namespace;
-
-struct mmu_notifier_subscriptions;
-
-struct mm_struct {
-	struct {
-		struct vm_area_struct *mmap;
-		struct rb_root mm_rb;
-		u64 vmacache_seqnum;
-		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-		long unsigned int mmap_base;
-		long unsigned int mmap_legacy_base;
-		long unsigned int task_size;
-		long unsigned int highest_vm_end;
-		pgd_t *pgd;
-		atomic_t membarrier_state;
-		atomic_t mm_users;
-		atomic_t mm_count;
-		atomic_t has_pinned;
-		seqcount_t write_protect_seq;
-		atomic_long_t pgtables_bytes;
-		int map_count;
-		spinlock_t page_table_lock;
-		struct rw_semaphore mmap_lock;
-		struct list_head mmlist;
-		long unsigned int hiwater_rss;
-		long unsigned int hiwater_vm;
-		long unsigned int total_vm;
-		long unsigned int locked_vm;
-		atomic64_t pinned_vm;
-		long unsigned int data_vm;
-		long unsigned int exec_vm;
-		long unsigned int stack_vm;
-		long unsigned int def_flags;
-		spinlock_t arg_lock;
-		long unsigned int start_code;
-		long unsigned int end_code;
-		long unsigned int start_data;
-		long unsigned int end_data;
-		long unsigned int start_brk;
-		long unsigned int brk;
-		long unsigned int start_stack;
-		long unsigned int arg_start;
-		long unsigned int arg_end;
-		long unsigned int env_start;
-		long unsigned int env_end;
-		long unsigned int saved_auxv[70];
-		struct mm_rss_stat rss_stat;
-		struct linux_binfmt *binfmt;
-		mm_context_t context;
-		long unsigned int flags;
-		struct core_state *core_state;
-		spinlock_t ioctx_lock;
-		struct kioctx_table *ioctx_table;
-		struct task_struct *owner;
-		struct user_namespace *user_ns;
-		struct file *exe_file;
-		struct mmu_notifier_subscriptions *notifier_subscriptions;
-		long unsigned int numa_next_scan;
-		long unsigned int numa_scan_offset;
-		int numa_scan_seq;
-		atomic_t tlb_flush_pending;
-		struct uprobes_state uprobes_state;
-		atomic_long_t hugetlb_usage;
-		struct work_struct async_put_work;
-		u32 pasid;
-	};
-	long unsigned int cpu_bitmap[0];
-};
-
-struct arch_uprobe_task {
-	long unsigned int saved_trap_nr;
-};
-
-enum uprobe_task_state {
-	UTASK_RUNNING = 0,
-	UTASK_SSTEP = 1,
-	UTASK_SSTEP_ACK = 2,
-	UTASK_SSTEP_TRAPPED = 3,
-};
-
-struct uprobe;
-
-struct return_instance;
-
-struct uprobe_task {
-	enum uprobe_task_state state;
-	union {
-		struct {
-			struct arch_uprobe_task autask;
-			long unsigned int vaddr;
-		};
-		struct {
-			struct callback_head dup_xol_work;
-			long unsigned int dup_xol_addr;
-		};
-	};
-	struct uprobe *active_uprobe;
-	long unsigned int xol_vaddr;
-	struct return_instance *return_instances;
-	unsigned int depth;
-};
-
-struct return_instance {
-	struct uprobe *uprobe;
-	long unsigned int func;
-	long unsigned int stack;
-	long unsigned int orig_ret_vaddr;
-	bool chained;
-	struct return_instance *next;
-};
-
-struct xarray {
-	spinlock_t xa_lock;
-	gfp_t xa_flags;
-	void *xa_head;
-};
-
-typedef u32 errseq_t;
-
-struct address_space_operations;
-
-struct address_space {
-	struct inode *host;
-	struct xarray i_pages;
-	gfp_t gfp_mask;
-	atomic_t i_mmap_writable;
-	atomic_t nr_thps;
-	struct rb_root_cached i_mmap;
-	struct rw_semaphore i_mmap_rwsem;
-	long unsigned int nrpages;
-	long unsigned int nrexceptional;
-	long unsigned int writeback_index;
-	const struct address_space_operations *a_ops;
-	long unsigned int flags;
-	errseq_t wb_err;
-	spinlock_t private_lock;
-	struct list_head private_list;
-	void *private_data;
-};
-
-struct vmem_altmap {
-	const long unsigned int base_pfn;
-	const long unsigned int end_pfn;
-	const long unsigned int reserve;
-	long unsigned int free;
-	long unsigned int align;
-	long unsigned int alloc;
-};
-
-struct percpu_ref_data;
-
-struct percpu_ref {
-	long unsigned int percpu_count_ptr;
-	struct percpu_ref_data *data;
-};
-
-enum memory_type {
-	MEMORY_DEVICE_PRIVATE = 1,
-	MEMORY_DEVICE_FS_DAX = 2,
-	MEMORY_DEVICE_GENERIC = 3,
-	MEMORY_DEVICE_PCI_P2PDMA = 4,
-};
-
-struct range {
-	u64 start;
-	u64 end;
-};
-
-struct dev_pagemap_ops;
-
-struct dev_pagemap {
-	struct vmem_altmap altmap;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
-	struct completion done;
-	enum memory_type type;
-	unsigned int flags;
-	const struct dev_pagemap_ops *ops;
-	void *owner;
-	int nr_range;
-	union {
-		struct range range;
-		struct range ranges[0];
-	};
-};
-
-struct vfsmount;
-
-struct path {
-	struct vfsmount *mnt;
-	struct dentry *dentry;
-};
-
-enum rw_hint {
-	WRITE_LIFE_NOT_SET = 0,
-	WRITE_LIFE_NONE = 1,
-	WRITE_LIFE_SHORT = 2,
-	WRITE_LIFE_MEDIUM = 3,
-	WRITE_LIFE_LONG = 4,
-	WRITE_LIFE_EXTREME = 5,
-};
+	arch_rwlock_t raw_lock;
+} rwlock_t;
 
 enum pid_type {
 	PIDTYPE_PID = 0,
@@ -1881,263 +2179,50 @@
 	PIDTYPE_MAX = 4,
 };
 
-struct fown_struct {
-	rwlock_t lock;
-	struct pid *pid;
-	enum pid_type pid_type;
-	kuid_t uid;
-	kuid_t euid;
-	int signum;
-};
-
-struct file_ra_state {
-	long unsigned int start;
-	unsigned int size;
-	unsigned int async_size;
-	unsigned int ra_pages;
-	unsigned int mmap_miss;
-	loff_t prev_pos;
-};
-
-struct file {
-	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
-	struct path f_path;
-	struct inode *f_inode;
-	const struct file_operations *f_op;
-	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
-	atomic_long_t f_count;
-	unsigned int f_flags;
-	fmode_t f_mode;
-	struct mutex f_pos_lock;
-	loff_t f_pos;
-	struct fown_struct f_owner;
-	const struct cred *f_cred;
-	struct file_ra_state f_ra;
-	u64 f_version;
-	void *f_security;
-	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
-	struct address_space *f_mapping;
-	errseq_t f_wb_err;
-	errseq_t f_sb_err;
-};
-
-typedef unsigned int vm_fault_t;
-
-enum page_entry_size {
-	PE_SIZE_PTE = 0,
-	PE_SIZE_PMD = 1,
-	PE_SIZE_PUD = 2,
-};
-
-struct vm_fault;
-
-struct vm_operations_struct {
-	void (*open)(struct vm_area_struct *);
-	void (*close)(struct vm_area_struct *);
-	int (*split)(struct vm_area_struct *, long unsigned int);
-	int (*mremap)(struct vm_area_struct *);
-	vm_fault_t (*fault)(struct vm_fault *);
-	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
-	long unsigned int (*pagesize)(struct vm_area_struct *);
-	vm_fault_t (*page_mkwrite)(struct vm_fault *);
-	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
-	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
-	const char * (*name)(struct vm_area_struct *);
-	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
-	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
-	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
-};
-
-struct core_thread {
-	struct task_struct *task;
-	struct core_thread *next;
-};
-
-struct core_state {
-	atomic_t nr_threads;
-	struct core_thread dumper;
-	struct completion startup;
-};
-
-struct vm_fault {
-	struct vm_area_struct *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
-	pmd_t *pmd;
-	pud_t *pud;
-	pte_t orig_pte;
-	struct page *cow_page;
-	struct page *page;
-	pte_t *pte;
-	spinlock_t *ptl;
-	pgtable_t prealloc_pte;
-};
-
-enum migratetype {
-	MIGRATE_UNMOVABLE = 0,
-	MIGRATE_MOVABLE = 1,
-	MIGRATE_RECLAIMABLE = 2,
-	MIGRATE_PCPTYPES = 3,
-	MIGRATE_HIGHATOMIC = 3,
-	MIGRATE_CMA = 4,
-	MIGRATE_ISOLATE = 5,
-	MIGRATE_TYPES = 6,
-};
-
-enum numa_stat_item {
-	NUMA_HIT = 0,
-	NUMA_MISS = 1,
-	NUMA_FOREIGN = 2,
-	NUMA_INTERLEAVE_HIT = 3,
-	NUMA_LOCAL = 4,
-	NUMA_OTHER = 5,
-	NR_VM_NUMA_STAT_ITEMS = 6,
-};
-
-enum zone_stat_item {
-	NR_FREE_PAGES = 0,
-	NR_ZONE_LRU_BASE = 1,
-	NR_ZONE_INACTIVE_ANON = 1,
-	NR_ZONE_ACTIVE_ANON = 2,
-	NR_ZONE_INACTIVE_FILE = 3,
-	NR_ZONE_ACTIVE_FILE = 4,
-	NR_ZONE_UNEVICTABLE = 5,
-	NR_ZONE_WRITE_PENDING = 6,
-	NR_MLOCK = 7,
-	NR_PAGETABLE = 8,
-	NR_BOUNCE = 9,
-	NR_ZSPAGES = 10,
-	NR_FREE_CMA_PAGES = 11,
-	NR_VM_ZONE_STAT_ITEMS = 12,
-};
-
-enum node_stat_item {
-	NR_LRU_BASE = 0,
-	NR_INACTIVE_ANON = 0,
-	NR_ACTIVE_ANON = 1,
-	NR_INACTIVE_FILE = 2,
-	NR_ACTIVE_FILE = 3,
-	NR_UNEVICTABLE = 4,
-	NR_SLAB_RECLAIMABLE_B = 5,
-	NR_SLAB_UNRECLAIMABLE_B = 6,
-	NR_ISOLATED_ANON = 7,
-	NR_ISOLATED_FILE = 8,
-	WORKINGSET_NODES = 9,
-	WORKINGSET_REFAULT_BASE = 10,
-	WORKINGSET_REFAULT_ANON = 10,
-	WORKINGSET_REFAULT_FILE = 11,
-	WORKINGSET_ACTIVATE_BASE = 12,
-	WORKINGSET_ACTIVATE_ANON = 12,
-	WORKINGSET_ACTIVATE_FILE = 13,
-	WORKINGSET_RESTORE_BASE = 14,
-	WORKINGSET_RESTORE_ANON = 14,
-	WORKINGSET_RESTORE_FILE = 15,
-	WORKINGSET_NODERECLAIM = 16,
-	NR_ANON_MAPPED = 17,
-	NR_FILE_MAPPED = 18,
-	NR_FILE_PAGES = 19,
-	NR_FILE_DIRTY = 20,
-	NR_WRITEBACK = 21,
-	NR_WRITEBACK_TEMP = 22,
-	NR_SHMEM = 23,
-	NR_SHMEM_THPS = 24,
-	NR_SHMEM_PMDMAPPED = 25,
-	NR_FILE_THPS = 26,
-	NR_FILE_PMDMAPPED = 27,
-	NR_ANON_THPS = 28,
-	NR_VMSCAN_WRITE = 29,
-	NR_VMSCAN_IMMEDIATE = 30,
-	NR_DIRTIED = 31,
-	NR_WRITTEN = 32,
-	NR_KERNEL_MISC_RECLAIMABLE = 33,
-	NR_FOLL_PIN_ACQUIRED = 34,
-	NR_FOLL_PIN_RELEASED = 35,
-	NR_KERNEL_STACK_KB = 36,
-	NR_VM_NODE_STAT_ITEMS = 37,
-};
-
-enum lru_list {
-	LRU_INACTIVE_ANON = 0,
-	LRU_ACTIVE_ANON = 1,
-	LRU_INACTIVE_FILE = 2,
-	LRU_ACTIVE_FILE = 3,
-	LRU_UNEVICTABLE = 4,
-	NR_LRU_LISTS = 5,
-};
-
-typedef unsigned int isolate_mode_t;
-
-enum zone_watermarks {
-	WMARK_MIN = 0,
-	WMARK_LOW = 1,
-	WMARK_HIGH = 2,
-	NR_WMARK = 3,
-};
-
-enum {
-	ZONELIST_FALLBACK = 0,
-	ZONELIST_NOFALLBACK = 1,
-	MAX_ZONELISTS = 2,
-};
-
-typedef struct {
-	gid_t val;
-} kgid_t;
-
-struct seq_operations;
-
-struct seq_file {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	struct mutex lock;
-	const struct seq_operations *op;
-	int poll_event;
-	const struct file *file;
-	void *private;
-};
-
-struct kstat {
-	u32 result_mask;
-	umode_t mode;
-	unsigned int nlink;
-	uint32_t blksize;
-	u64 attributes;
-	u64 attributes_mask;
-	u64 ino;
-	dev_t dev;
-	dev_t rdev;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	struct timespec64 btime;
-	u64 blocks;
-	u64 mnt_id;
-};
-
-struct pid_namespace;
-
 struct upid {
 	int nr;
 	struct pid_namespace *ns;
 };
 
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void *xa_head;
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct user_namespace;
+
+struct ucounts;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+};
+
 struct pid {
 	refcount_t count;
 	unsigned int level;
@@ -2149,6 +2234,140 @@
 	struct upid numbers[1];
 };
 
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+typedef struct {
+	uid_t val;
+} kuid_t;
+
+typedef struct {
+	gid_t val;
+} kgid_t;
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	long unsigned int flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long int ucount_max[14];
+};
+
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
+};
+
+struct workqueue_struct;
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct seqcount_raw_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+
+typedef struct {
+	seqcount_spinlock_t seqcount;
+	spinlock_t lock;
+} seqlock_t;
+
 struct hrtimer_cpu_base;
 
 struct hrtimer_clock_base {
@@ -2198,23 +2417,17 @@
 	struct hrtimer_clock_base clock_base[8];
 };
 
-enum hrtimer_base_type {
-	HRTIMER_BASE_MONOTONIC = 0,
-	HRTIMER_BASE_REALTIME = 1,
-	HRTIMER_BASE_BOOTTIME = 2,
-	HRTIMER_BASE_TAI = 3,
-	HRTIMER_BASE_MONOTONIC_SOFT = 4,
-	HRTIMER_BASE_REALTIME_SOFT = 5,
-	HRTIMER_BASE_BOOTTIME_SOFT = 6,
-	HRTIMER_BASE_TAI_SOFT = 7,
-	HRTIMER_MAX_CLOCK_BASES = 8,
-};
-
 struct rlimit {
 	__kernel_ulong_t rlim_cur;
 	__kernel_ulong_t rlim_max;
 };
 
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	long long unsigned int sum_exec_runtime;
+};
+
 typedef void __signalfn_t(int);
 
 typedef __signalfn_t *__sighandler_t;
@@ -2256,6 +2469,7 @@
 	struct {
 		void *_addr;
 		union {
+			int _trapno;
 			short int _addr_lsb;
 			struct {
 				char _dummy_bnd[8];
@@ -2266,6 +2480,11 @@
 				char _dummy_pkey[8];
 				__u32 _pkey;
 			} _addr_pkey;
+			struct {
+				long unsigned int _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
 		};
 	} _sigfault;
 	struct {
@@ -2288,21 +2507,12 @@
 	};
 };
 
-struct user_struct {
-	refcount_t __count;
-	atomic_t processes;
-	atomic_t sigpending;
-	atomic_t fanotify_listeners;
-	atomic_long_t epoll_watches;
-	long unsigned int mq_bytes;
-	long unsigned int locked_shm;
-	long unsigned int unix_inflight;
-	atomic_long_t pipe_bufs;
-	struct hlist_node uidhash_node;
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
 	kuid_t uid;
-	atomic_long_t locked_vm;
-	atomic_t nr_watches;
-	struct ratelimit_state ratelimit;
+	atomic_t count;
+	atomic_long_t ucount[14];
 };
 
 struct sigaction {
@@ -2316,6 +2526,46 @@
 	struct sigaction sa;
 };
 
+struct vm_userfaultfd_ctx {};
+
+struct anon_vma_name;
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct vm_area_struct {
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	struct vm_area_struct *vm_next;
+	struct vm_area_struct *vm_prev;
+	struct rb_node vm_rb;
+	long unsigned int rb_subtree_gap;
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	long unsigned int vm_flags;
+	union {
+		struct {
+			struct rb_node rb;
+			long unsigned int rb_subtree_last;
+		} shared;
+		struct anon_vma_name *anon_name;
+	};
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	long unsigned int vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	atomic_long_t swap_readahead_info;
+	struct mempolicy *vm_policy;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+};
+
+struct mm_rss_stat {
+	atomic_long_t count[4];
+};
+
 struct cpu_itimer {
 	u64 expires;
 	u64 incr;
@@ -2331,24 +2581,12 @@
 	struct task_cputime_atomic cputime_atomic;
 };
 
-struct pacct_struct {
-	int ac_flag;
-	long int ac_exitcode;
-	long unsigned int ac_mem;
-	u64 ac_utime;
-	u64 ac_stime;
-	long unsigned int ac_minflt;
-	long unsigned int ac_majflt;
-};
+struct core_state;
 
 struct tty_struct;
 
-struct autogroup;
-
 struct taskstats;
 
-struct tty_audit_buf;
-
 struct signal_struct {
 	refcount_t sigcnt;
 	atomic_t live;
@@ -2360,9 +2598,10 @@
 	struct hlist_head multiprocess;
 	int group_exit_code;
 	int notify_count;
-	struct task_struct *group_exit_task;
+	struct task_struct *group_exec_task;
 	int group_stop_count;
 	unsigned int flags;
+	struct core_state *core_state;
 	unsigned int is_child_subreaper: 1;
 	unsigned int has_child_subreaper: 1;
 	int posix_timer_id;
@@ -2376,7 +2615,6 @@
 	struct pid *tty_old_pgrp;
 	int leader;
 	struct tty_struct *tty;
-	struct autogroup *autogroup;
 	seqlock_t stats_lock;
 	u64 utime;
 	u64 stime;
@@ -2402,10 +2640,7 @@
 	struct task_io_accounting ioac;
 	long long unsigned int sum_sched_runtime;
 	struct rlimit rlim[16];
-	struct pacct_struct pacct;
 	struct taskstats *stats;
-	unsigned int audit_tty;
-	struct tty_audit_buf *tty_audit_buf;
 	bool oom_flag_origin;
 	short int oom_score_adj;
 	short int oom_score_adj_min;
@@ -2414,43 +2649,19 @@
 	struct rw_semaphore exec_update_lock;
 };
 
-enum rseq_cs_flags_bit {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
-};
-
 struct rseq {
 	__u32 cpu_id_start;
 	__u32 cpu_id;
-	union {
-		__u64 ptr64;
-		__u64 ptr;
-	} rseq_cs;
+	__u64 rseq_cs;
 	__u32 flags;
-	long: 32;
 	long: 64;
 };
 
-enum uclamp_id {
-	UCLAMP_MIN = 0,
-	UCLAMP_MAX = 1,
-	UCLAMP_CNT = 2,
-};
-
-enum perf_event_task_context {
-	perf_invalid_context = 4294967295,
-	perf_hw_context = 0,
-	perf_sw_context = 1,
-	perf_nr_task_contexts = 2,
-};
-
 struct rq;
 
 struct rq_flags;
 
 struct sched_class {
-	int uclamp_enabled;
 	void (*enqueue_task)(struct rq *, struct task_struct *, int);
 	void (*dequeue_task)(struct rq *, struct task_struct *, int);
 	void (*yield_task)(struct rq *);
@@ -2460,12 +2671,14 @@
 	void (*put_prev_task)(struct rq *, struct task_struct *);
 	void (*set_next_task)(struct rq *, struct task_struct *, bool);
 	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
-	int (*select_task_rq)(struct task_struct *, int, int, int);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
 	void (*migrate_task_rq)(struct task_struct *, int);
 	void (*task_woken)(struct rq *, struct task_struct *);
-	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *);
+	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *, u32);
 	void (*rq_online)(struct rq *);
 	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
 	void (*task_tick)(struct rq *, struct task_struct *, int);
 	void (*task_fork)(struct task_struct *);
 	void (*task_dead)(struct task_struct *);
@@ -2475,9 +2688,92 @@
 	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
 	void (*update_curr)(struct rq *);
 	void (*task_change_group)(struct task_struct *, int);
-	long: 64;
-	long: 64;
-	long: 64;
+};
+
+struct xol_area;
+
+struct uprobes_state {
+	struct xol_area *xol_area;
+};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct vm_area_struct *mmap;
+		struct rb_root mm_rb;
+		u64 vmacache_seqnum;
+		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+		long unsigned int mmap_base;
+		long unsigned int mmap_legacy_base;
+		long unsigned int task_size;
+		long unsigned int highest_vm_end;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_t mm_count;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		long unsigned int hiwater_rss;
+		long unsigned int hiwater_vm;
+		long unsigned int total_vm;
+		long unsigned int locked_vm;
+		atomic64_t pinned_vm;
+		long unsigned int data_vm;
+		long unsigned int exec_vm;
+		long unsigned int stack_vm;
+		long unsigned int def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		long unsigned int start_code;
+		long unsigned int end_code;
+		long unsigned int start_data;
+		long unsigned int end_data;
+		long unsigned int start_brk;
+		long unsigned int brk;
+		long unsigned int start_stack;
+		long unsigned int arg_start;
+		long unsigned int arg_end;
+		long unsigned int env_start;
+		long unsigned int env_end;
+		long unsigned int saved_auxv[72];
+		struct mm_rss_stat rss_stat;
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		long unsigned int flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table *ioctx_table;
+		struct task_struct *owner;
+		struct user_namespace *user_ns;
+		struct file *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		long unsigned int numa_next_scan;
+		long unsigned int numa_scan_offset;
+		int numa_scan_seq;
+		atomic_t tlb_flush_pending;
+		struct uprobes_state uprobes_state;
+		atomic_long_t hugetlb_usage;
+		struct work_struct async_put_work;
+		long unsigned int ksm_merging_pages;
+	};
+	long unsigned int cpu_bitmap[0];
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
 };
 
 struct kernel_cap_struct {
@@ -2486,6 +2782,8 @@
 
 typedef struct kernel_cap_struct kernel_cap_t;
 
+struct user_struct;
+
 struct group_info;
 
 struct cred {
@@ -2509,9 +2807,9 @@
 	struct key *process_keyring;
 	struct key *thread_keyring;
 	struct key *request_key_auth;
-	void *security;
 	struct user_struct *user;
 	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
 	struct group_info *group_info;
 	union {
 		int non_rcu;
@@ -2553,8 +2851,6 @@
 	long unsigned int nr_leaves_on_tree;
 };
 
-struct watch_list;
-
 struct key_user;
 
 struct key_restriction;
@@ -2566,7 +2862,6 @@
 		struct list_head graveyard_link;
 		struct rb_node serial_node;
 	};
-	struct watch_list *watchers;
 	struct rw_semaphore sem;
 	struct key_user *user;
 	void *security;
@@ -2602,6 +2897,30 @@
 	struct key_restriction *restrict_link;
 };
 
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct net;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	atomic_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
 struct sighand_struct {
 	spinlock_t siglock;
 	refcount_t count;
@@ -2609,48 +2928,488 @@
 	struct k_sigaction action[64];
 };
 
-struct io_cq;
-
 struct io_context {
 	atomic_long_t refcount;
 	atomic_t active_ref;
-	atomic_t nr_tasks;
-	spinlock_t lock;
 	short unsigned int ioprio;
-	struct xarray icq_tree;
-	struct io_cq *icq_hint;
-	struct hlist_head icq_list;
-	struct work_struct release_work;
 };
 
-enum rseq_event_mask_bits {
-	RSEQ_EVENT_PREEMPT_BIT = 0,
-	RSEQ_EVENT_SIGNAL_BIT = 1,
-	RSEQ_EVENT_MIGRATE_BIT = 2,
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[7];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[7];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
 };
 
-enum cpu_idle_type {
-	CPU_IDLE = 0,
-	CPU_NOT_IDLE = 1,
-	CPU_NEWLY_IDLE = 2,
-	CPU_MAX_IDLE_TYPES = 3,
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
 };
 
-enum {
-	__SD_BALANCE_NEWIDLE = 0,
-	__SD_BALANCE_EXEC = 1,
-	__SD_BALANCE_FORK = 2,
-	__SD_BALANCE_WAKE = 3,
-	__SD_WAKE_AFFINE = 4,
-	__SD_ASYM_CPUCAPACITY = 5,
-	__SD_SHARE_CPUCAPACITY = 6,
-	__SD_SHARE_PKG_RESOURCES = 7,
-	__SD_SERIALIZE = 8,
-	__SD_ASYM_PACKING = 9,
-	__SD_PREFER_SIBLING = 10,
-	__SD_OVERLAP = 11,
-	__SD_NUMA = 12,
-	__SD_FLAG_CNT = 13,
+struct perf_event_context {
+	struct pmu *pmu;
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head active_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	int nr_events;
+	int nr_active;
+	int nr_user;
+	int is_active;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	int rotate_necessary;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	int nr_cgroups;
+	void *task_ctx_data;
+	struct callback_head callback_head;
+};
+
+struct ftrace_ret_stack {
+	long unsigned int ret;
+	long unsigned int func;
+	long long unsigned int calltime;
+	long unsigned int *retp;
+};
+
+enum uprobe_task_state {
+	UTASK_RUNNING = 0,
+	UTASK_SSTEP = 1,
+	UTASK_SSTEP_ACK = 2,
+	UTASK_SSTEP_TRAPPED = 3,
+};
+
+struct arch_uprobe_task {
+	long unsigned int saved_trap_nr;
+};
+
+struct uprobe;
+
+struct return_instance;
+
+struct uprobe_task {
+	enum uprobe_task_state state;
+	union {
+		struct {
+			struct arch_uprobe_task autask;
+			long unsigned int vaddr;
+		};
+		struct {
+			struct callback_head dup_xol_work;
+			long unsigned int dup_xol_addr;
+		};
+	};
+	struct uprobe *active_uprobe;
+	long unsigned int xol_vaddr;
+	struct return_instance *return_instances;
+	unsigned int depth;
+};
+
+struct kref {
+	refcount_t refcount;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	long unsigned int gp_seq[4];
+	long int len;
+	long int seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_struct;
+
+struct srcu_data {
+	long unsigned int srcu_lock_count[2];
+	long unsigned int srcu_unlock_count[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	long unsigned int grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	long unsigned int srcu_have_cbs[4];
+	long unsigned int srcu_data_have_cbs[4];
+	long unsigned int srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_struct {
+	struct srcu_node *node;
+	struct srcu_node *level[4];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned int srcu_idx;
+	long unsigned int srcu_gp_seq;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	long unsigned int srcu_gp_start;
+	long unsigned int srcu_last_gp_end;
+	long unsigned int srcu_size_jiffies;
+	long unsigned int srcu_n_lock_retries;
+	long unsigned int srcu_n_exp_nodelay;
+	struct srcu_data *sda;
+	bool sda_is_static;
+	long unsigned int srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	long unsigned int reschedule_jiffies;
+	long unsigned int reschedule_count;
+	struct delayed_work work;
+	struct lockdep_map dep_map;
+};
+
+struct return_instance {
+	struct uprobe *uprobe;
+	long unsigned int func;
+	long unsigned int stack;
+	long unsigned int orig_ret_vaddr;
+	bool chained;
+	struct return_instance *next;
+};
+
+typedef u32 errseq_t;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	struct rw_semaphore i_mmap_rwsem;
+	long unsigned int nrpages;
+	long unsigned int writeback_index;
+	const struct address_space_operations *a_ops;
+	long unsigned int flags;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
+struct vmem_altmap {
+	long unsigned int base_pfn;
+	const long unsigned int end_pfn;
+	const long unsigned int reserve;
+	long unsigned int free;
+	long unsigned int align;
+	long unsigned int alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	long unsigned int percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	long unsigned int vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct range ranges[0];
+	};
+};
+
+struct folio {
+	union {
+		struct {
+			long unsigned int flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			void *private;
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			long unsigned int memcg_data;
+		};
+		struct page page;
+	};
+};
+
+struct vfsmount;
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	long unsigned int start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct file {
+	union {
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	spinlock_t f_lock;
+	atomic_long_t f_count;
+	unsigned int f_flags;
+	fmode_t f_mode;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	u64 f_version;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+typedef unsigned int vm_fault_t;
+
+enum page_entry_size {
+	PE_SIZE_PTE = 0,
+	PE_SIZE_PMD = 1,
+	PE_SIZE_PUD = 2,
+};
+
+struct vm_fault;
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, long unsigned int);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
+	vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
+	long unsigned int (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
+	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
+	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
+};
+
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_WRITE = 8,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
+	VM_FAULT_HINDEX_MASK = 983040,
+};
+
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+};
+
+struct vm_fault {
+	const struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		long unsigned int pgoff;
+		long unsigned int address;
+		long unsigned int real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func *funcs;
+};
+
+typedef struct tracepoint * const tracepoint_ptr_t;
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
 };
 
 typedef void percpu_ref_func_t(struct percpu_ref *);
@@ -2686,9 +3445,8 @@
 
 struct dev_pagemap_ops {
 	void (*page_free)(struct page *);
-	void (*kill)(struct dev_pagemap *);
-	void (*cleanup)(struct dev_pagemap *);
 	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, long unsigned int, long unsigned int, int);
 };
 
 struct hlist_bl_node;
@@ -2755,20 +3513,12 @@
 
 struct inode_operations;
 
-struct bdi_writeback;
-
 struct file_lock_context;
 
-struct block_device;
-
 struct cdev;
 
 struct fsnotify_mark_connector;
 
-struct fscrypt_info;
-
-struct fsverity_info;
-
 struct inode {
 	umode_t i_mode;
 	short unsigned int i_opflags;
@@ -2780,7 +3530,6 @@
 	const struct inode_operations *i_op;
 	struct super_block *i_sb;
 	struct address_space *i_mapping;
-	void *i_security;
 	long unsigned int i_ino;
 	union {
 		const unsigned int i_nlink;
@@ -2802,10 +3551,6 @@
 	long unsigned int dirtied_time_when;
 	struct hlist_node i_hash;
 	struct list_head i_io_list;
-	struct bdi_writeback *i_wb;
-	int i_wb_frn_winner;
-	u16 i_wb_frn_avg_time;
-	u16 i_wb_frn_history;
 	struct list_head i_lru;
 	struct list_head i_sb_list;
 	struct list_head i_wb_list;
@@ -2828,7 +3573,6 @@
 	struct list_head i_devices;
 	union {
 		struct pipe_inode_info *i_pipe;
-		struct block_device *i_bdev;
 		struct cdev *i_cdev;
 		char *i_link;
 		unsigned int i_dir_seq;
@@ -2836,8 +3580,6 @@
 	__u32 i_generation;
 	__u32 i_fsnotify_mask;
 	struct fsnotify_mark_connector *i_fsnotify_marks;
-	struct fscrypt_info *i_crypt_info;
-	struct fsverity_info *i_verity_info;
 	void *i_private;
 };
 
@@ -2895,10 +3637,6 @@
 	struct callback_head cb_head;
 };
 
-struct rcuwait {
-	struct task_struct *task;
-};
-
 struct percpu_rw_semaphore {
 	struct rcu_sync rss;
 	unsigned int *read_count;
@@ -2913,6 +3651,10 @@
 	struct percpu_rw_semaphore rw_sem[3];
 };
 
+typedef struct {
+	__u8 b[16];
+} uuid_t;
+
 struct list_lru_node;
 
 struct list_lru {
@@ -2920,6 +3662,7 @@
 	struct list_head list;
 	int shrinker_id;
 	bool memcg_aware;
+	struct xarray xa;
 };
 
 struct super_operations;
@@ -2932,13 +3675,7 @@
 
 struct xattr_handler;
 
-struct fscrypt_operations;
-
-struct fsverity_operations;
-
-struct unicode_map;
-
-struct workqueue_struct;
+struct block_device;
 
 struct super_block {
 	struct list_head s_list;
@@ -2958,13 +3695,7 @@
 	struct rw_semaphore s_umount;
 	int s_count;
 	atomic_t s_active;
-	void *s_security;
 	const struct xattr_handler **s_xattr;
-	const struct fscrypt_operations *s_cop;
-	struct key *s_master_keys;
-	const struct fsverity_operations *s_vop;
-	struct unicode_map *s_encoding;
-	__u16 s_encoding_flags;
 	struct hlist_bl_head s_roots;
 	struct list_head s_mounts;
 	struct block_device *s_bdev;
@@ -2987,10 +3718,9 @@
 	struct mutex s_vfs_rename_mutex;
 	const char *s_subtype;
 	const struct dentry_operations *s_d_op;
-	int cleancache_poolid;
 	struct shrinker s_shrink;
 	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
+	atomic_long_t s_fsnotify_connectors;
 	int s_readonly_remount;
 	errseq_t s_wb_err;
 	struct workqueue_struct *s_dio_done_wq;
@@ -3002,7 +3732,7 @@
 	struct work_struct destroy_work;
 	struct mutex s_sync_lock;
 	int s_stack_depth;
-	long: 32;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -3027,20 +3757,42 @@
 	long: 64;
 };
 
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct user_namespace *mnt_userns;
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+};
+
 struct list_lru_one {
 	struct list_head list;
 	long int nr_items;
 };
 
-struct list_lru_memcg {
-	struct callback_head rcu;
-	struct list_lru_one *lru[0];
-};
-
 struct list_lru_node {
 	spinlock_t lock;
 	struct list_lru_one lru;
-	struct list_lru_memcg *memcg_lrus;
 	long int nr_items;
 	long: 64;
 	long: 64;
@@ -3052,6 +3804,7 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
 };
 
 enum migrate_mode {
@@ -3061,6 +3814,135 @@
 	MIGRATE_SYNC_NO_COPY = 3,
 };
 
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct kernfs_node;
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	long unsigned int notified_at;
+	struct timer_list notify_timer;
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+};
+
+struct bpf_prog_array;
+
+struct cgroup_bpf {
+	struct bpf_prog_array *effective[23];
+	struct hlist_head progs[23];
+	u8 flags[23];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct psi_group;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	long unsigned int flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state *subsys[7];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[7];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group *psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	u64 ancestor_ids[0];
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	struct ctl_table *child;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
 struct key_tag {
 	struct callback_head rcu;
 	refcount_t usage;
@@ -3109,29 +3991,118 @@
 	struct key_type *keytype;
 };
 
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 *counters;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	long unsigned int unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	struct ratelimit_state ratelimit;
+};
+
 struct group_info {
 	atomic_t usage;
 	int ngroups;
 	kgid_t gid[0];
 };
 
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
+};
+
+struct taskstats {
+	__u16 version;
+	__u32 ac_exitcode;
+	__u8 ac_flag;
+	__u8 ac_nice;
+	__u64 cpu_count;
+	__u64 cpu_delay_total;
+	__u64 blkio_count;
+	__u64 blkio_delay_total;
+	__u64 swapin_count;
+	__u64 swapin_delay_total;
+	__u64 cpu_run_real_total;
+	__u64 cpu_run_virtual_total;
+	char ac_comm[32];
+	__u8 ac_sched;
+	__u8 ac_pad[3];
+	long: 0;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u64 ac_etime;
+	__u64 ac_utime;
+	__u64 ac_stime;
+	__u64 ac_minflt;
+	__u64 ac_majflt;
+	__u64 coremem;
+	__u64 virtmem;
+	__u64 hiwater_rss;
+	__u64 hiwater_vm;
+	__u64 read_char;
+	__u64 write_char;
+	__u64 read_syscalls;
+	__u64 write_syscalls;
+	__u64 read_bytes;
+	__u64 write_bytes;
+	__u64 cancelled_write_bytes;
+	__u64 nvcsw;
+	__u64 nivcsw;
+	__u64 ac_utimescaled;
+	__u64 ac_stimescaled;
+	__u64 cpu_scaled_run_real_total;
+	__u64 freepages_count;
+	__u64 freepages_delay_total;
+	__u64 thrashing_count;
+	__u64 thrashing_delay_total;
+	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
+};
+
 struct delayed_call {
 	void (*fn)(void *);
 	void *arg;
 };
 
-struct io_cq {
-	struct request_queue *q;
-	struct io_context *ioc;
-	union {
-		struct list_head q_node;
-		struct kmem_cache *__rcu_icq_cache;
-	};
-	union {
-		struct hlist_node ioc_node;
-		struct callback_head __rcu_head;
-	};
-	unsigned int flags;
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_DMA = 0,
+	KMALLOC_CGROUP = 1,
+	KMALLOC_RECLAIM = 2,
+	NR_KMALLOC_TYPES = 3,
 };
 
 struct wait_page_queue;
@@ -3139,22 +4110,24 @@
 struct kiocb {
 	struct file *ki_filp;
 	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb *, long int, long int);
+	void (*ki_complete)(struct kiocb *, long int);
 	void *private;
 	int ki_flags;
-	u16 ki_hint;
 	u16 ki_ioprio;
-	union {
-		unsigned int ki_cookie;
-		struct wait_page_queue *ki_waitq;
-	};
+	struct wait_page_queue *ki_waitq;
 };
 
 struct iattr {
 	unsigned int ia_valid;
 	umode_t ia_mode;
-	kuid_t ia_uid;
-	kgid_t ia_gid;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
 	loff_t ia_size;
 	struct timespec64 ia_atime;
 	struct timespec64 ia_mtime;
@@ -3210,12 +4183,6 @@
 	struct mem_dqblk dq_dqb;
 };
 
-enum {
-	DQF_ROOT_SQUASH_B = 0,
-	DQF_SYS_FILE_B = 16,
-	DQF_PRIVATE = 17,
-};
-
 struct quota_format_type {
 	int qf_fmt_id;
 	const struct quota_format_ops *qf_ops;
@@ -3223,18 +4190,6 @@
 	struct quota_format_type *qf_next;
 };
 
-enum {
-	DQST_LOOKUPS = 0,
-	DQST_DROPS = 1,
-	DQST_READS = 2,
-	DQST_WRITES = 3,
-	DQST_CACHE_HITS = 4,
-	DQST_ALLOC_DQUOTS = 5,
-	DQST_FREE_DQUOTS = 6,
-	DQST_SYNCS = 7,
-	_DQST_DQSTAT_LAST = 8,
-};
-
 struct quota_format_ops {
 	int (*check_quota_file)(struct super_block *, int);
 	int (*read_file_info)(struct super_block *, int);
@@ -3322,6 +4277,178 @@
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
 
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+};
+
+struct module_param_attrs;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_layout {
+	void *base;
+	unsigned int size;
+	unsigned int text_size;
+	unsigned int ro_size;
+	unsigned int ro_after_init_size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_arch_specific {
+	unsigned int stubs_section;
+	unsigned int toc_section;
+	bool toc_fixed;
+	long unsigned int start_opd;
+	long unsigned int end_opd;
+	long unsigned int tramp;
+	long unsigned int tramp_regs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	unsigned int num_bugs;
+};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+struct module_attribute;
+
+struct kernel_param;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct trace_eval_map;
+
+struct error_injection_entry;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct module_layout core_layout;
+	struct module_layout init_layout;
+	struct mod_arch_specific arch;
+	long unsigned int taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	unsigned int num_ftrace_callsites;
+	long unsigned int *ftrace_callsites;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	long unsigned int *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct error_injection_entry *ei_funcs;
+	unsigned int num_ei_funcs;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct writeback_control;
 
 struct readahead_control;
@@ -3330,55 +4457,55 @@
 
 struct address_space_operations {
 	int (*writepage)(struct page *, struct writeback_control *);
-	int (*readpage)(struct file *, struct page *);
+	int (*read_folio)(struct file *, struct folio *);
 	int (*writepages)(struct address_space *, struct writeback_control *);
-	int (*set_page_dirty)(struct page *);
-	int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
 	void (*readahead)(struct readahead_control *);
-	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
 	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
 	sector_t (*bmap)(struct address_space *, sector_t);
-	void (*invalidatepage)(struct page *, unsigned int, unsigned int);
-	int (*releasepage)(struct page *, gfp_t);
-	void (*freepage)(struct page *);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
 	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
-	int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);
-	bool (*isolate_page)(struct page *, isolate_mode_t);
-	void (*putback_page)(struct page *);
-	int (*launder_page)(struct page *);
-	int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page *, bool *, bool *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
 	int (*error_remove_page)(struct address_space *, struct page *);
 	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
 	void (*swap_deactivate)(struct file *);
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
 };
 
 struct fiemap_extent_info;
 
+struct fileattr;
+
 struct inode_operations {
 	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
 	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
-	int (*permission)(struct inode *, int);
-	struct posix_acl * (*get_acl)(struct inode *, int);
+	int (*permission)(struct user_namespace *, struct inode *, int);
+	struct posix_acl * (*get_acl)(struct inode *, int, bool);
 	int (*readlink)(struct dentry *, char *, int);
-	int (*create)(struct inode *, struct dentry *, umode_t, bool);
+	int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool);
 	int (*link)(struct dentry *, struct inode *, struct dentry *);
 	int (*unlink)(struct inode *, struct dentry *);
-	int (*symlink)(struct inode *, struct dentry *, const char *);
-	int (*mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
 	int (*rmdir)(struct inode *, struct dentry *);
-	int (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
-	int (*setattr)(struct dentry *, struct iattr *);
-	int (*getattr)(const struct path *, struct kstat *, u32, unsigned int);
+	int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *);
+	int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
 	ssize_t (*listxattr)(struct dentry *, char *, size_t);
 	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
 	int (*update_time)(struct inode *, struct timespec64 *, int);
 	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode *, struct dentry *, umode_t);
-	int (*set_acl)(struct inode *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
+	int (*tmpfile)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
+	int (*set_acl)(struct user_namespace *, struct inode *, struct posix_acl *, int);
+	int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
 	long: 64;
 	long: 64;
 	long: 64;
@@ -3416,8 +4543,6 @@
 	struct nfs4_lock_state *owner;
 };
 
-struct fasync_struct;
-
 struct lock_manager_operations;
 
 struct file_lock {
@@ -3452,6 +4577,7 @@
 };
 
 struct lock_manager_operations {
+	void *lm_mod_owner;
 	fl_owner_t (*lm_get_owner)(fl_owner_t);
 	void (*lm_put_owner)(fl_owner_t);
 	void (*lm_notify)(struct file_lock *);
@@ -3460,6 +4586,8 @@
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
 	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
 };
 
 struct fasync_struct {
@@ -3471,14 +4599,6 @@
 	struct callback_head fa_rcu;
 };
 
-enum {
-	SB_UNFROZEN = 0,
-	SB_FREEZE_WRITE = 1,
-	SB_FREEZE_PAGEFAULT = 2,
-	SB_FREEZE_FS = 3,
-	SB_FREEZE_COMPLETE = 4,
-};
-
 struct kstatfs;
 
 struct super_operations {
@@ -3502,18 +4622,14 @@
 	int (*show_devname)(struct seq_file *, struct dentry *);
 	int (*show_path)(struct seq_file *, struct dentry *);
 	int (*show_stats)(struct seq_file *, struct dentry *);
-	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
-	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
-	struct dquot ** (*get_dquots)(struct inode *);
-	int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);
 	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
 	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
 };
 
-struct iomap;
-
 struct fid;
 
+struct iomap;
+
 struct export_operations {
 	int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);
 	struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
@@ -3524,6 +4640,8 @@
 	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
 	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
 	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	u64 (*fetch_iversion)(struct inode *);
+	long unsigned int flags;
 };
 
 struct xattr_handler {
@@ -3532,31 +4650,7 @@
 	int flags;
 	bool (*list)(struct dentry *);
 	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
-	int (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
-};
-
-union fscrypt_policy;
-
-struct fscrypt_operations {
-	unsigned int flags;
-	const char *key_prefix;
-	int (*get_context)(struct inode *, void *, size_t);
-	int (*set_context)(struct inode *, const void *, size_t, void *);
-	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
-	bool (*empty_dir)(struct inode *);
-	unsigned int max_namelen;
-	bool (*has_stable_inodes)(struct super_block *);
-	void (*get_ino_and_lblk_bits)(struct super_block *, int *, int *);
-	int (*get_num_devices)(struct super_block *);
-	void (*get_devices)(struct super_block *, struct request_queue **);
-};
-
-struct fsverity_operations {
-	int (*begin_enable_verity)(struct file *);
-	int (*end_enable_verity)(struct file *, const void *, size_t, u64);
-	int (*get_verity_descriptor)(struct inode *, void *, size_t);
-	struct page * (*read_merkle_tree_page)(struct inode *, long unsigned int, long unsigned int);
-	int (*write_merkle_tree_block)(struct inode *, const void *, u64, int);
+	int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
 };
 
 typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
@@ -3566,6 +4660,30 @@
 	loff_t pos;
 };
 
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
 struct p_log;
 
 struct fs_parameter;
@@ -3582,1863 +4700,6 @@
 	const void *data;
 };
 
-enum compound_dtor_id {
-	NULL_COMPOUND_DTOR = 0,
-	COMPOUND_PAGE_DTOR = 1,
-	HUGETLB_PAGE_DTOR = 2,
-	TRANSHUGE_PAGE_DTOR = 3,
-	NR_COMPOUND_DTORS = 4,
-};
-
-enum vm_event_item {
-	PGPGIN = 0,
-	PGPGOUT = 1,
-	PSWPIN = 2,
-	PSWPOUT = 3,
-	PGALLOC_NORMAL = 4,
-	PGALLOC_MOVABLE = 5,
-	ALLOCSTALL_NORMAL = 6,
-	ALLOCSTALL_MOVABLE = 7,
-	PGSCAN_SKIP_NORMAL = 8,
-	PGSCAN_SKIP_MOVABLE = 9,
-	PGFREE = 10,
-	PGACTIVATE = 11,
-	PGDEACTIVATE = 12,
-	PGLAZYFREE = 13,
-	PGFAULT = 14,
-	PGMAJFAULT = 15,
-	PGLAZYFREED = 16,
-	PGREFILL = 17,
-	PGREUSE = 18,
-	PGSTEAL_KSWAPD = 19,
-	PGSTEAL_DIRECT = 20,
-	PGSCAN_KSWAPD = 21,
-	PGSCAN_DIRECT = 22,
-	PGSCAN_DIRECT_THROTTLE = 23,
-	PGSCAN_ANON = 24,
-	PGSCAN_FILE = 25,
-	PGSTEAL_ANON = 26,
-	PGSTEAL_FILE = 27,
-	PGSCAN_ZONE_RECLAIM_FAILED = 28,
-	PGINODESTEAL = 29,
-	SLABS_SCANNED = 30,
-	KSWAPD_INODESTEAL = 31,
-	KSWAPD_LOW_WMARK_HIT_QUICKLY = 32,
-	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 33,
-	PAGEOUTRUN = 34,
-	PGROTATED = 35,
-	DROP_PAGECACHE = 36,
-	DROP_SLAB = 37,
-	OOM_KILL = 38,
-	NUMA_PTE_UPDATES = 39,
-	NUMA_HUGE_PTE_UPDATES = 40,
-	NUMA_HINT_FAULTS = 41,
-	NUMA_HINT_FAULTS_LOCAL = 42,
-	NUMA_PAGE_MIGRATE = 43,
-	PGMIGRATE_SUCCESS = 44,
-	PGMIGRATE_FAIL = 45,
-	THP_MIGRATION_SUCCESS = 46,
-	THP_MIGRATION_FAIL = 47,
-	THP_MIGRATION_SPLIT = 48,
-	COMPACTMIGRATE_SCANNED = 49,
-	COMPACTFREE_SCANNED = 50,
-	COMPACTISOLATED = 51,
-	COMPACTSTALL = 52,
-	COMPACTFAIL = 53,
-	COMPACTSUCCESS = 54,
-	KCOMPACTD_WAKE = 55,
-	KCOMPACTD_MIGRATE_SCANNED = 56,
-	KCOMPACTD_FREE_SCANNED = 57,
-	HTLB_BUDDY_PGALLOC = 58,
-	HTLB_BUDDY_PGALLOC_FAIL = 59,
-	UNEVICTABLE_PGCULLED = 60,
-	UNEVICTABLE_PGSCANNED = 61,
-	UNEVICTABLE_PGRESCUED = 62,
-	UNEVICTABLE_PGMLOCKED = 63,
-	UNEVICTABLE_PGMUNLOCKED = 64,
-	UNEVICTABLE_PGCLEARED = 65,
-	UNEVICTABLE_PGSTRANDED = 66,
-	THP_FAULT_ALLOC = 67,
-	THP_FAULT_FALLBACK = 68,
-	THP_FAULT_FALLBACK_CHARGE = 69,
-	THP_COLLAPSE_ALLOC = 70,
-	THP_COLLAPSE_ALLOC_FAILED = 71,
-	THP_FILE_ALLOC = 72,
-	THP_FILE_FALLBACK = 73,
-	THP_FILE_FALLBACK_CHARGE = 74,
-	THP_FILE_MAPPED = 75,
-	THP_SPLIT_PAGE = 76,
-	THP_SPLIT_PAGE_FAILED = 77,
-	THP_DEFERRED_SPLIT_PAGE = 78,
-	THP_SPLIT_PMD = 79,
-	THP_ZERO_PAGE_ALLOC = 80,
-	THP_ZERO_PAGE_ALLOC_FAILED = 81,
-	THP_SWPOUT = 82,
-	THP_SWPOUT_FALLBACK = 83,
-	BALLOON_INFLATE = 84,
-	BALLOON_DEFLATE = 85,
-	BALLOON_MIGRATE = 86,
-	SWAP_RA = 87,
-	SWAP_RA_HIT = 88,
-	NR_VM_EVENT_ITEMS = 89,
-};
-
-enum kmalloc_cache_type {
-	KMALLOC_NORMAL = 0,
-	KMALLOC_RECLAIM = 1,
-	NR_KMALLOC_TYPES = 2,
-};
-
-typedef u32 phandle;
-
-typedef u32 ihandle;
-
-enum {
-	HI_SOFTIRQ = 0,
-	TIMER_SOFTIRQ = 1,
-	NET_TX_SOFTIRQ = 2,
-	NET_RX_SOFTIRQ = 3,
-	BLOCK_SOFTIRQ = 4,
-	IRQ_POLL_SOFTIRQ = 5,
-	TASKLET_SOFTIRQ = 6,
-	SCHED_SOFTIRQ = 7,
-	HRTIMER_SOFTIRQ = 8,
-	RCU_SOFTIRQ = 9,
-	NR_SOFTIRQS = 10,
-};
-
-enum {
-	PCI_STD_RESOURCES = 0,
-	PCI_STD_RESOURCE_END = 5,
-	PCI_ROM_RESOURCE = 6,
-	PCI_IOV_RESOURCES = 7,
-	PCI_IOV_RESOURCE_END = 12,
-	PCI_BRIDGE_RESOURCES = 13,
-	PCI_BRIDGE_RESOURCE_END = 16,
-	PCI_NUM_RESOURCES = 17,
-	DEVICE_COUNT_RESOURCE = 17,
-};
-
-typedef unsigned int pci_channel_state_t;
-
-typedef unsigned int pcie_reset_state_t;
-
-typedef short unsigned int pci_dev_flags_t;
-
-typedef short unsigned int pci_bus_flags_t;
-
-typedef unsigned int pci_ers_result_t;
-
-struct seq_operations {
-	void * (*start)(struct seq_file *, loff_t *);
-	void (*stop)(struct seq_file *, void *);
-	void * (*next)(struct seq_file *, void *, loff_t *);
-	int (*show)(struct seq_file *, void *);
-};
-
-struct boot_param_header {
-	__be32 magic;
-	__be32 totalsize;
-	__be32 off_dt_struct;
-	__be32 off_dt_strings;
-	__be32 off_mem_rsvmap;
-	__be32 version;
-	__be32 last_comp_version;
-	__be32 boot_cpuid_phys;
-	__be32 dt_strings_size;
-	__be32 dt_struct_size;
-};
-
-struct linux_logo {
-	int type;
-	unsigned int width;
-	unsigned int height;
-	unsigned int clutsize;
-	const unsigned char *clut;
-	const unsigned char *data;
-};
-
-typedef u32 prom_arg_t;
-
-struct prom_args {
-	__be32 service;
-	__be32 nargs;
-	__be32 nret;
-	__be32 args[10];
-};
-
-struct prom_t {
-	ihandle root;
-	phandle chosen;
-	int cpu;
-	ihandle stdout;
-	ihandle mmumap;
-	ihandle memory;
-};
-
-struct mem_map_entry {
-	__be64 base;
-	__be64 size;
-};
-
-typedef __be32 cell_t;
-
-struct platform_support {
-	bool hash_mmu;
-	bool radix_mmu;
-	bool radix_gtse;
-	bool xive;
-};
-
-struct option_vector1 {
-	u8 byte1;
-	u8 arch_versions;
-	u8 arch_versions3;
-};
-
-struct option_vector2 {
-	u8 byte1;
-	__be16 reserved;
-	__be32 real_base;
-	__be32 real_size;
-	__be32 virt_base;
-	__be32 virt_size;
-	__be32 load_base;
-	__be32 min_rma;
-	__be32 min_load;
-	u8 min_rma_percent;
-	u8 max_pft_size;
-} __attribute__((packed));
-
-struct option_vector3 {
-	u8 byte1;
-	u8 byte2;
-};
-
-struct option_vector4 {
-	u8 byte1;
-	u8 min_vp_cap;
-};
-
-struct option_vector5 {
-	u8 byte1;
-	u8 byte2;
-	u8 byte3;
-	u8 cmo;
-	u8 associativity;
-	u8 bin_opts;
-	u8 micro_checkpoint;
-	u8 reserved0;
-	__be32 max_cpus;
-	__be16 papr_level;
-	__be16 reserved1;
-	u8 platform_facilities;
-	u8 reserved2;
-	__be16 reserved3;
-	u8 subprocessors;
-	u8 byte22;
-	u8 intarch;
-	u8 mmu;
-	u8 hash_ext;
-	u8 radix_ext;
-} __attribute__((packed));
-
-struct option_vector6 {
-	u8 reserved;
-	u8 secondary_pteg;
-	u8 os_name;
-};
-
-struct ibm_arch_vec {
-	struct {
-		u32 mask;
-		u32 val;
-	} pvrs[14];
-	u8 num_vectors;
-	u8 vec1_len;
-	struct option_vector1 vec1;
-	u8 vec2_len;
-	struct option_vector2 vec2;
-	u8 vec3_len;
-	struct option_vector3 vec3;
-	u8 vec4_len;
-	struct option_vector4 vec4;
-	u8 vec5_len;
-	struct option_vector5 vec5;
-	u8 vec6_len;
-	struct option_vector6 vec6;
-} __attribute__((packed));
-
-typedef signed char __s8;
-
-typedef __s8 s8;
-
-typedef __u32 __le32;
-
-typedef u64 phys_addr_t;
-
-typedef long unsigned int irq_hw_number_t;
-
-struct kernel_symbol {
-	long unsigned int value;
-	const char *name;
-	const char *namespace;
-};
-
-typedef int (*initcall_t)();
-
-typedef initcall_t initcall_entry_t;
-
-struct obs_kernel_param {
-	const char *str;
-	int (*setup_func)(char *);
-	int early;
-};
-
-struct lockdep_map {};
-
-enum system_states {
-	SYSTEM_BOOTING = 0,
-	SYSTEM_SCHEDULING = 1,
-	SYSTEM_RUNNING = 2,
-	SYSTEM_HALT = 3,
-	SYSTEM_POWER_OFF = 4,
-	SYSTEM_RESTART = 5,
-	SYSTEM_SUSPEND = 6,
-};
-
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map {
-	u32 nr_extents;
-	union {
-		struct uid_gid_extent extent[5];
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
-
-struct proc_ns_operations;
-
-struct ns_common {
-	atomic_long_t stashed;
-	const struct proc_ns_operations *ops;
-	unsigned int inum;
-};
-
-struct ctl_table;
-
-struct ctl_table_root;
-
-struct ctl_table_set;
-
-struct ctl_dir;
-
-struct ctl_node;
-
-struct ctl_table_header {
-	union {
-		struct {
-			struct ctl_table *ctl_table;
-			int used;
-			int count;
-			int nreg;
-		};
-		struct callback_head rcu;
-	};
-	struct completion *unregistering;
-	struct ctl_table *ctl_table_arg;
-	struct ctl_table_root *root;
-	struct ctl_table_set *set;
-	struct ctl_dir *parent;
-	struct ctl_node *node;
-	struct hlist_head inodes;
-};
-
-struct ctl_dir {
-	struct ctl_table_header header;
-	struct rb_root root;
-};
-
-struct ctl_table_set {
-	int (*is_seen)(struct ctl_table_set *);
-	struct ctl_dir dir;
-};
-
-struct ucounts;
-
-struct user_namespace {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct key *persistent_keyring_register;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts *ucounts;
-	int ucount_max[10];
-};
-
-struct bug_entry {
-	long unsigned int bug_addr;
-	const char *file;
-	short unsigned int line;
-	short unsigned int flags;
-};
-
-struct pollfd {
-	int fd;
-	short int events;
-	short int revents;
-};
-
-typedef u64 jump_label_t;
-
-struct jump_entry {
-	jump_label_t code;
-	jump_label_t target;
-	jump_label_t key;
-};
-
-struct static_key_mod;
-
-struct static_key {
-	atomic_t enabled;
-	union {
-		long unsigned int type;
-		struct jump_entry *entries;
-		struct static_key_mod *next;
-	};
-};
-
-struct static_key_false {
-	struct static_key key;
-};
-
-struct device;
-
-struct attribute_group;
-
-struct perf_cpu_context;
-
-struct perf_output_handle;
-
-struct pmu {
-	struct list_head entry;
-	struct module *module;
-	struct device *dev;
-	const struct attribute_group **attr_groups;
-	const struct attribute_group **attr_update;
-	const char *name;
-	int type;
-	int capabilities;
-	int *pmu_disable_count;
-	struct perf_cpu_context *pmu_cpu_context;
-	atomic_t exclusive_cnt;
-	int task_ctx_nr;
-	int hrtimer_interval_ms;
-	unsigned int nr_addr_filters;
-	void (*pmu_enable)(struct pmu *);
-	void (*pmu_disable)(struct pmu *);
-	int (*event_init)(struct perf_event *);
-	void (*event_mapped)(struct perf_event *, struct mm_struct *);
-	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
-	int (*add)(struct perf_event *, int);
-	void (*del)(struct perf_event *, int);
-	void (*start)(struct perf_event *, int);
-	void (*stop)(struct perf_event *, int);
-	void (*read)(struct perf_event *);
-	void (*start_txn)(struct pmu *, unsigned int);
-	int (*commit_txn)(struct pmu *);
-	void (*cancel_txn)(struct pmu *);
-	int (*event_idx)(struct perf_event *);
-	void (*sched_task)(struct perf_event_context *, bool);
-	struct kmem_cache *task_ctx_cache;
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
-	void * (*setup_aux)(struct perf_event *, void **, int, bool);
-	void (*free_aux)(void *);
-	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
-	int (*addr_filters_validate)(struct list_head *);
-	void (*addr_filters_sync)(struct perf_event *);
-	int (*aux_output_match)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int (*check_period)(struct perf_event *, u64);
-};
-
-enum perf_event_state {
-	PERF_EVENT_STATE_DEAD = 4294967292,
-	PERF_EVENT_STATE_EXIT = 4294967293,
-	PERF_EVENT_STATE_ERROR = 4294967294,
-	PERF_EVENT_STATE_OFF = 4294967295,
-	PERF_EVENT_STATE_INACTIVE = 0,
-	PERF_EVENT_STATE_ACTIVE = 1,
-};
-
-typedef struct {
-	long int v;
-} local_t;
-
-typedef struct {
-	local_t a;
-} local64_t;
-
-struct perf_event_attr {
-	__u32 type;
-	__u32 size;
-	__u64 config;
-	union {
-		__u64 sample_period;
-		__u64 sample_freq;
-	};
-	__u64 sample_type;
-	__u64 read_format;
-	__u64 disabled: 1;
-	__u64 inherit: 1;
-	__u64 pinned: 1;
-	__u64 exclusive: 1;
-	__u64 exclude_user: 1;
-	__u64 exclude_kernel: 1;
-	__u64 exclude_hv: 1;
-	__u64 exclude_idle: 1;
-	__u64 mmap: 1;
-	__u64 comm: 1;
-	__u64 freq: 1;
-	__u64 inherit_stat: 1;
-	__u64 enable_on_exec: 1;
-	__u64 task: 1;
-	__u64 watermark: 1;
-	__u64 precise_ip: 2;
-	__u64 mmap_data: 1;
-	__u64 sample_id_all: 1;
-	__u64 exclude_host: 1;
-	__u64 exclude_guest: 1;
-	__u64 exclude_callchain_kernel: 1;
-	__u64 exclude_callchain_user: 1;
-	__u64 mmap2: 1;
-	__u64 comm_exec: 1;
-	__u64 use_clockid: 1;
-	__u64 context_switch: 1;
-	__u64 write_backward: 1;
-	__u64 namespaces: 1;
-	__u64 ksymbol: 1;
-	__u64 bpf_event: 1;
-	__u64 aux_output: 1;
-	__u64 cgroup: 1;
-	__u64 text_poke: 1;
-	__u64 __reserved_1: 30;
-	union {
-		__u32 wakeup_events;
-		__u32 wakeup_watermark;
-	};
-	__u32 bp_type;
-	union {
-		__u64 bp_addr;
-		__u64 kprobe_func;
-		__u64 uprobe_path;
-		__u64 config1;
-	};
-	union {
-		__u64 bp_len;
-		__u64 kprobe_addr;
-		__u64 probe_offset;
-		__u64 config2;
-	};
-	__u64 branch_sample_type;
-	__u64 sample_regs_user;
-	__u32 sample_stack_user;
-	__s32 clockid;
-	__u64 sample_regs_intr;
-	__u32 aux_watermark;
-	__u16 sample_max_stack;
-	__u16 __reserved_2;
-	__u32 aux_sample_size;
-	__u32 __reserved_3;
-};
-
-struct hw_perf_event_extra {
-	u64 config;
-	unsigned int reg;
-	int alloc;
-	int idx;
-};
-
-struct hw_perf_event {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	union {
-		struct {
-			u64 last_period;
-			local64_t period_left;
-		};
-		struct {
-			u64 saved_metric;
-			u64 saved_slots;
-		};
-	};
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
-
-struct irq_work {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llnode;
-			atomic_t flags;
-		};
-	};
-	void (*func)(struct irq_work *);
-};
-
-struct perf_addr_filters_head {
-	struct list_head list;
-	raw_spinlock_t lock;
-	unsigned int nr_file_filters;
-};
-
-struct perf_sample_data;
-
-typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
-
-struct ftrace_ops;
-
-typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct pt_regs *);
-
-struct ftrace_hash;
-
-struct ftrace_ops_hash {
-	struct ftrace_hash *notrace_hash;
-	struct ftrace_hash *filter_hash;
-	struct mutex regex_lock;
-};
-
-struct ftrace_ops {
-	ftrace_func_t func;
-	struct ftrace_ops *next;
-	long unsigned int flags;
-	void *private;
-	ftrace_func_t saved_func;
-	struct ftrace_ops_hash local_hash;
-	struct ftrace_ops_hash *func_hash;
-	struct ftrace_ops_hash old_hash;
-	long unsigned int trampoline;
-	long unsigned int trampoline_size;
-	struct list_head list;
-};
-
-struct perf_buffer;
-
-struct perf_addr_filter_range;
-
-struct bpf_prog;
-
-struct trace_event_call;
-
-struct event_filter;
-
-struct perf_cgroup;
-
-struct perf_event {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event *group_leader;
-	struct pmu *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event hw;
-	struct perf_event_context *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct perf_buffer *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event *aux_event;
-	void (*destroy)(struct perf_event *);
-	struct callback_head callback_head;
-	struct pid_namespace *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t orig_overflow_handler;
-	struct bpf_prog *prog;
-	struct trace_event_call *tp_event;
-	struct event_filter *filter;
-	struct ftrace_ops ftrace_ops;
-	struct perf_cgroup *cgrp;
-	void *security;
-	struct list_head sb_list;
-};
-
-typedef struct cpumask cpumask_var_t[1];
-
-typedef void (*smp_call_func_t)(void *);
-
-struct __call_single_data {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llist;
-			unsigned int flags;
-			u16 src;
-			u16 dst;
-		};
-	};
-	smp_call_func_t func;
-	void *info;
-};
-
-enum irqreturn {
-	IRQ_NONE = 0,
-	IRQ_HANDLED = 1,
-	IRQ_WAKE_THREAD = 2,
-};
-
-typedef enum irqreturn irqreturn_t;
-
-struct wait_queue_entry;
-
-typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
-
-struct wait_queue_entry {
-	unsigned int flags;
-	void *private;
-	wait_queue_func_t func;
-	struct list_head entry;
-};
-
-typedef struct wait_queue_entry wait_queue_entry_t;
-
-struct timer_list {
-	struct hlist_node entry;
-	long unsigned int expires;
-	void (*function)(struct timer_list *);
-	u32 flags;
-};
-
-struct delayed_work {
-	struct work_struct work;
-	struct timer_list timer;
-	struct workqueue_struct *wq;
-	int cpu;
-};
-
-struct rcu_work {
-	struct work_struct work;
-	struct callback_head rcu;
-	struct workqueue_struct *wq;
-};
-
-struct rcu_segcblist {
-	struct callback_head *head;
-	struct callback_head **tails[4];
-	long unsigned int gp_seq[4];
-	long int len;
-	u8 enabled;
-	u8 offloaded;
-};
-
-struct srcu_node;
-
-struct srcu_struct;
-
-struct srcu_data {
-	long unsigned int srcu_lock_count[2];
-	long unsigned int srcu_unlock_count[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	struct rcu_segcblist srcu_cblist;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	bool srcu_cblist_invoking;
-	struct timer_list delay_work;
-	struct work_struct work;
-	struct callback_head srcu_barrier_head;
-	struct srcu_node *mynode;
-	long unsigned int grpmask;
-	int cpu;
-	struct srcu_struct *ssp;
-	long: 64;
-	long: 64;
-};
-
-struct srcu_node {
-	spinlock_t lock;
-	long unsigned int srcu_have_cbs[4];
-	long unsigned int srcu_data_have_cbs[4];
-	long unsigned int srcu_gp_seq_needed_exp;
-	struct srcu_node *srcu_parent;
-	int grplo;
-	int grphi;
-};
-
-struct srcu_struct {
-	struct srcu_node node[131];
-	struct srcu_node *level[4];
-	struct mutex srcu_cb_mutex;
-	spinlock_t lock;
-	struct mutex srcu_gp_mutex;
-	unsigned int srcu_idx;
-	long unsigned int srcu_gp_seq;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	long unsigned int srcu_last_gp_end;
-	struct srcu_data *sda;
-	long unsigned int srcu_barrier_seq;
-	struct mutex srcu_barrier_mutex;
-	struct completion srcu_barrier_completion;
-	atomic_t srcu_barrier_cpu_cnt;
-	struct delayed_work work;
-};
-
-struct cgroup;
-
-struct cgroup_subsys;
-
-struct cgroup_subsys_state {
-	struct cgroup *cgroup;
-	struct cgroup_subsys *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state *parent;
-};
-
-struct mem_cgroup_id {
-	int id;
-	refcount_t ref;
-};
-
-struct page_counter {
-	atomic_long_t usage;
-	long unsigned int min;
-	long unsigned int low;
-	long unsigned int high;
-	long unsigned int max;
-	struct page_counter *parent;
-	long unsigned int emin;
-	atomic_long_t min_usage;
-	atomic_long_t children_min_usage;
-	long unsigned int elow;
-	atomic_long_t low_usage;
-	atomic_long_t children_low_usage;
-	long unsigned int watermark;
-	long unsigned int failcnt;
-};
-
-struct vmpressure {
-	long unsigned int scanned;
-	long unsigned int reclaimed;
-	long unsigned int tree_scanned;
-	long unsigned int tree_reclaimed;
-	spinlock_t sr_lock;
-	struct list_head events;
-	struct mutex events_lock;
-	struct work_struct work;
-};
-
-struct kernfs_node;
-
-struct cgroup_file {
-	struct kernfs_node *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct mem_cgroup_threshold_ary;
-
-struct mem_cgroup_thresholds {
-	struct mem_cgroup_threshold_ary *primary;
-	struct mem_cgroup_threshold_ary *spare;
-};
-
-struct memcg_padding {
-	char x[0];
-};
-
-enum memcg_kmem_state {
-	KMEM_NONE = 0,
-	KMEM_ALLOCATED = 1,
-	KMEM_ONLINE = 2,
-};
-
-struct percpu_counter {
-	raw_spinlock_t lock;
-	s64 count;
-	struct list_head list;
-	s32 *counters;
-};
-
-struct fprop_global {
-	struct percpu_counter events;
-	unsigned int period;
-	seqcount_t sequence;
-};
-
-struct wb_domain {
-	spinlock_t lock;
-	struct fprop_global completions;
-	struct timer_list period_timer;
-	long unsigned int period_time;
-	long unsigned int dirty_limit_tstamp;
-	long unsigned int dirty_limit;
-};
-
-struct wb_completion {
-	atomic_t cnt;
-	wait_queue_head_t *waitq;
-};
-
-struct memcg_cgwb_frn {
-	u64 bdi_id;
-	int memcg_id;
-	u64 at;
-	struct wb_completion done;
-};
-
-struct deferred_split {
-	spinlock_t split_queue_lock;
-	struct list_head split_queue;
-	long unsigned int split_queue_len;
-};
-
-struct memcg_vmstats_percpu;
-
-struct mem_cgroup_per_node;
-
-struct mem_cgroup {
-	struct cgroup_subsys_state css;
-	struct mem_cgroup_id id;
-	struct page_counter memory;
-	union {
-		struct page_counter swap;
-		struct page_counter memsw;
-	};
-	struct page_counter kmem;
-	struct page_counter tcpmem;
-	struct work_struct high_work;
-	long unsigned int soft_limit;
-	struct vmpressure vmpressure;
-	bool use_hierarchy;
-	bool oom_group;
-	bool oom_lock;
-	int under_oom;
-	int swappiness;
-	int oom_kill_disable;
-	struct cgroup_file events_file;
-	struct cgroup_file events_local_file;
-	struct cgroup_file swap_events_file;
-	struct mutex thresholds_lock;
-	struct mem_cgroup_thresholds thresholds;
-	struct mem_cgroup_thresholds memsw_thresholds;
-	struct list_head oom_notify;
-	long unsigned int move_charge_at_immigrate;
-	spinlock_t move_lock;
-	long unsigned int move_lock_flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad1_;
-	atomic_long_t vmstats[40];
-	atomic_long_t vmevents[89];
-	atomic_long_t memory_events[8];
-	atomic_long_t memory_events_local[8];
-	long unsigned int socket_pressure;
-	bool tcpmem_active;
-	int tcpmem_pressure;
-	int kmemcg_id;
-	enum memcg_kmem_state kmem_state;
-	struct obj_cgroup *objcg;
-	struct list_head objcg_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad2_;
-	atomic_t moving_account;
-	struct task_struct *move_lock_task;
-	struct memcg_vmstats_percpu *vmstats_local;
-	struct memcg_vmstats_percpu *vmstats_percpu;
-	struct list_head cgwb_list;
-	struct wb_domain cgwb_domain;
-	struct memcg_cgwb_frn cgwb_frn[4];
-	struct list_head event_list;
-	spinlock_t event_list_lock;
-	struct deferred_split deferred_split_queue;
-	struct mem_cgroup_per_node *nodeinfo[0];
-};
-
-struct obj_cgroup {
-	struct percpu_ref refcnt;
-	struct mem_cgroup *memcg;
-	atomic_t nr_charged_bytes;
-	union {
-		struct list_head list;
-		struct callback_head rcu;
-	};
-};
-
-struct anon_vma {
-	struct anon_vma *root;
-	struct rw_semaphore rwsem;
-	atomic_t refcount;
-	unsigned int degree;
-	struct anon_vma *parent;
-	struct rb_root_cached rb_root;
-};
-
-struct mempolicy {
-	atomic_t refcnt;
-	short unsigned int mode;
-	short unsigned int flags;
-	union {
-		short int preferred_node;
-		nodemask_t nodes;
-	} v;
-	union {
-		nodemask_t cpuset_mems_allowed;
-		nodemask_t user_nodemask;
-	} w;
-};
-
-struct linux_binprm;
-
-struct coredump_params;
-
-struct linux_binfmt {
-	struct list_head lh;
-	struct module *module;
-	int (*load_binary)(struct linux_binprm *);
-	int (*load_shlib)(struct file *);
-	int (*core_dump)(struct coredump_params *);
-	long unsigned int min_coredump;
-};
-
-struct free_area {
-	struct list_head free_list[6];
-	long unsigned int nr_free;
-};
-
-struct zone_padding {
-	char x[0];
-};
-
-struct pglist_data;
-
-struct lruvec {
-	struct list_head lists[5];
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	atomic_long_t nonresident_age;
-	long unsigned int refaults[2];
-	long unsigned int flags;
-	struct pglist_data *pgdat;
-};
-
-struct per_cpu_pageset;
-
-struct zone {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[2];
-	int node;
-	struct pglist_data *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	long unsigned int nr_isolate_pageblock;
-	seqlock_t span_seqlock;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[9];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	long: 16;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct zoneref {
-	struct zone *zone;
-	int zone_idx;
-};
-
-struct zonelist {
-	struct zoneref _zonerefs[513];
-};
-
-enum zone_type {
-	ZONE_NORMAL = 0,
-	ZONE_MOVABLE = 1,
-	__MAX_NR_ZONES = 2,
-};
-
-struct per_cpu_nodestat;
-
-struct pglist_data {
-	struct zone node_zones[2];
-	struct zonelist node_zonelists[2];
-	int nr_zones;
-	spinlock_t node_size_lock;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_highest_zoneidx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_highest_zoneidx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct deferred_split deferred_split_queue;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[37];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct per_cpu_pages {
-	int count;
-	int high;
-	int batch;
-	struct list_head lists[3];
-};
-
-struct per_cpu_pageset {
-	struct per_cpu_pages pcp;
-	s8 expire;
-	u16 vm_numa_stat_diff[6];
-	s8 stat_threshold;
-	s8 vm_stat_diff[12];
-};
-
-struct per_cpu_nodestat {
-	s8 stat_threshold;
-	s8 vm_node_stat_diff[37];
-};
-
-typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
-
-struct ctl_table_poll;
-
-struct ctl_table {
-	const char *procname;
-	void *data;
-	int maxlen;
-	umode_t mode;
-	struct ctl_table *child;
-	proc_handler *proc_handler;
-	struct ctl_table_poll *poll;
-	void *extra1;
-	void *extra2;
-};
-
-struct ctl_table_poll {
-	atomic_t event;
-	wait_queue_head_t wait;
-};
-
-struct ctl_node {
-	struct rb_node node;
-	struct ctl_table_header *header;
-};
-
-struct ctl_table_root {
-	struct ctl_table_set default_set;
-	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
-	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
-	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
-};
-
-enum umh_disable_depth {
-	UMH_ENABLED = 0,
-	UMH_FREEZING = 1,
-	UMH_DISABLED = 2,
-};
-
-struct kref {
-	refcount_t refcount;
-};
-
-struct idr {
-	struct xarray idr_rt;
-	unsigned int idr_base;
-	unsigned int idr_next;
-};
-
-struct fs_pin;
-
-struct pid_namespace {
-	struct kref kref;
-	struct idr idr;
-	struct callback_head rcu;
-	unsigned int pid_allocated;
-	struct task_struct *child_reaper;
-	struct kmem_cache *pid_cachep;
-	unsigned int level;
-	struct pid_namespace *parent;
-	struct fs_pin *bacct;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	int reboot;
-	struct ns_common ns;
-};
-
-struct task_cputime {
-	u64 stime;
-	u64 utime;
-	long long unsigned int sum_exec_runtime;
-};
-
-struct uts_namespace;
-
-struct ipc_namespace;
-
-struct mnt_namespace;
-
-struct net;
-
-struct time_namespace;
-
-struct cgroup_namespace;
-
-struct nsproxy {
-	atomic_t count;
-	struct uts_namespace *uts_ns;
-	struct ipc_namespace *ipc_ns;
-	struct mnt_namespace *mnt_ns;
-	struct pid_namespace *pid_ns_for_children;
-	struct net *net_ns;
-	struct time_namespace *time_ns;
-	struct time_namespace *time_ns_for_children;
-	struct cgroup_namespace *cgroup_ns;
-};
-
-struct bio;
-
-struct bio_list {
-	struct bio *head;
-	struct bio *tail;
-};
-
-struct blk_plug {
-	struct list_head mq_list;
-	struct list_head cb_list;
-	short unsigned int rq_count;
-	bool multiple_queues;
-	bool nowait;
-};
-
-struct reclaim_state {
-	long unsigned int reclaimed_slab;
-};
-
-struct fprop_local_percpu {
-	struct percpu_counter events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-enum wb_reason {
-	WB_REASON_BACKGROUND = 0,
-	WB_REASON_VMSCAN = 1,
-	WB_REASON_SYNC = 2,
-	WB_REASON_PERIODIC = 3,
-	WB_REASON_LAPTOP_TIMER = 4,
-	WB_REASON_FS_FREE_SPACE = 5,
-	WB_REASON_FORKER_THREAD = 6,
-	WB_REASON_FOREIGN_FLUSH = 7,
-	WB_REASON_MAX = 8,
-};
-
-struct bdi_writeback {
-	struct backing_dev_info *bdi;
-	long unsigned int state;
-	long unsigned int last_old_flush;
-	struct list_head b_dirty;
-	struct list_head b_io;
-	struct list_head b_more_io;
-	struct list_head b_dirty_time;
-	spinlock_t list_lock;
-	struct percpu_counter stat[4];
-	long unsigned int congested;
-	long unsigned int bw_time_stamp;
-	long unsigned int dirtied_stamp;
-	long unsigned int written_stamp;
-	long unsigned int write_bandwidth;
-	long unsigned int avg_write_bandwidth;
-	long unsigned int dirty_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	struct fprop_local_percpu completions;
-	int dirty_exceeded;
-	enum wb_reason start_all_reason;
-	spinlock_t work_lock;
-	struct list_head work_list;
-	struct delayed_work dwork;
-	long unsigned int dirty_sleep;
-	struct list_head bdi_node;
-	struct percpu_ref refcnt;
-	struct fprop_local_percpu memcg_completions;
-	struct cgroup_subsys_state *memcg_css;
-	struct cgroup_subsys_state *blkcg_css;
-	struct list_head memcg_node;
-	struct list_head blkcg_node;
-	union {
-		struct work_struct release_work;
-		struct callback_head rcu;
-	};
-};
-
-struct backing_dev_info {
-	u64 id;
-	struct rb_node rb_node;
-	struct list_head bdi_list;
-	long unsigned int ra_pages;
-	long unsigned int io_pages;
-	struct kref refcnt;
-	unsigned int capabilities;
-	unsigned int min_ratio;
-	unsigned int max_ratio;
-	unsigned int max_prop_frac;
-	atomic_long_t tot_write_bandwidth;
-	struct bdi_writeback wb;
-	struct list_head wb_list;
-	struct xarray cgwb_tree;
-	struct mutex cgwb_release_mutex;
-	struct rw_semaphore wb_switch_rwsem;
-	wait_queue_head_t wb_waitq;
-	struct device *dev;
-	char dev_name[64];
-	struct device *owner;
-	struct timer_list laptop_mode_wb_timer;
-	struct dentry *debug_dir;
-};
-
-struct css_set {
-	struct cgroup_subsys_state *subsys[12];
-	refcount_t refcount;
-	struct css_set *dom_cset;
-	struct cgroup *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[12];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup *mg_src_cgrp;
-	struct cgroup *mg_dst_cgrp;
-	struct css_set *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
-};
-
-struct perf_event_groups {
-	struct rb_root tree;
-	u64 index;
-};
-
-struct perf_event_context {
-	struct pmu *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	int nr_cgroups;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct task_delay_info {
-	raw_spinlock_t lock;
-	unsigned int flags;
-	u64 blkio_start;
-	u64 blkio_delay;
-	u64 swapin_delay;
-	u32 blkio_count;
-	u32 swapin_count;
-	u64 freepages_start;
-	u64 freepages_delay;
-	u64 thrashing_start;
-	u64 thrashing_delay;
-	u32 freepages_count;
-	u32 thrashing_count;
-};
-
-struct ftrace_ret_stack {
-	long unsigned int ret;
-	long unsigned int func;
-	long long unsigned int calltime;
-	long unsigned int *retp;
-};
-
-struct kset;
-
-struct kobj_type;
-
-struct kobject {
-	const char *name;
-	struct list_head entry;
-	struct kobject *parent;
-	struct kset *kset;
-	struct kobj_type *ktype;
-	struct kernfs_node *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-struct blk_integrity_profile;
-
-struct blk_integrity {
-	const struct blk_integrity_profile *profile;
-	unsigned char flags;
-	unsigned char tuple_size;
-	unsigned char interval_exp;
-	unsigned char tag_size;
-};
-
-enum rpm_status {
-	RPM_ACTIVE = 0,
-	RPM_RESUMING = 1,
-	RPM_SUSPENDED = 2,
-	RPM_SUSPENDING = 3,
-};
-
-struct blk_rq_stat {
-	u64 mean;
-	u64 min;
-	u64 max;
-	u32 nr_samples;
-	u64 batch;
-};
-
-enum blk_zoned_model {
-	BLK_ZONED_NONE = 0,
-	BLK_ZONED_HA = 1,
-	BLK_ZONED_HM = 2,
-};
-
-struct queue_limits {
-	long unsigned int bounce_pfn;
-	long unsigned int seg_boundary_mask;
-	long unsigned int virt_boundary_mask;
-	unsigned int max_hw_sectors;
-	unsigned int max_dev_sectors;
-	unsigned int chunk_sectors;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	unsigned int physical_block_size;
-	unsigned int logical_block_size;
-	unsigned int alignment_offset;
-	unsigned int io_min;
-	unsigned int io_opt;
-	unsigned int max_discard_sectors;
-	unsigned int max_hw_discard_sectors;
-	unsigned int max_write_same_sectors;
-	unsigned int max_write_zeroes_sectors;
-	unsigned int max_zone_append_sectors;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	short unsigned int max_segments;
-	short unsigned int max_integrity_segments;
-	short unsigned int max_discard_segments;
-	unsigned char misaligned;
-	unsigned char discard_misaligned;
-	unsigned char raid_partial_stripes_expensive;
-	enum blk_zoned_model zoned;
-};
-
-struct bsg_ops;
-
-struct bsg_class_device {
-	struct device *class_dev;
-	int minor;
-	struct request_queue *queue;
-	const struct bsg_ops *ops;
-};
-
-typedef void *mempool_alloc_t(gfp_t, void *);
-
-typedef void mempool_free_t(void *, void *);
-
-struct mempool_s {
-	spinlock_t lock;
-	int min_nr;
-	int curr_nr;
-	void **elements;
-	void *pool_data;
-	mempool_alloc_t *alloc;
-	mempool_free_t *free;
-	wait_queue_head_t wait;
-};
-
-typedef struct mempool_s mempool_t;
-
-struct bio_set {
-	struct kmem_cache *bio_slab;
-	unsigned int front_pad;
-	mempool_t bio_pool;
-	mempool_t bvec_pool;
-	mempool_t bio_integrity_pool;
-	mempool_t bvec_integrity_pool;
-	spinlock_t rescue_lock;
-	struct bio_list rescue_list;
-	struct work_struct rescue_work;
-	struct workqueue_struct *rescue_workqueue;
-};
-
-struct request;
-
-struct elevator_queue;
-
-struct blk_queue_stats;
-
-struct rq_qos;
-
-struct blk_mq_ops;
-
-struct blk_mq_ctx;
-
-struct blk_mq_hw_ctx;
-
-struct blk_keyslot_manager;
-
-struct blk_stat_callback;
-
-struct blkcg_gq;
-
-struct blk_trace;
-
-struct blk_flush_queue;
-
-struct throtl_data;
-
-struct blk_mq_tag_set;
-
-struct request_queue {
-	struct request *last_merge;
-	struct elevator_queue *elevator;
-	struct percpu_ref q_usage_counter;
-	struct blk_queue_stats *stats;
-	struct rq_qos *rq_qos;
-	const struct blk_mq_ops *mq_ops;
-	struct blk_mq_ctx *queue_ctx;
-	unsigned int queue_depth;
-	struct blk_mq_hw_ctx **queue_hw_ctx;
-	unsigned int nr_hw_queues;
-	struct backing_dev_info *backing_dev_info;
-	void *queuedata;
-	long unsigned int queue_flags;
-	atomic_t pm_only;
-	int id;
-	gfp_t bounce_gfp;
-	spinlock_t queue_lock;
-	struct kobject kobj;
-	struct kobject *mq_kobj;
-	struct blk_integrity integrity;
-	struct device *dev;
-	enum rpm_status rpm_status;
-	unsigned int nr_pending;
-	long unsigned int nr_requests;
-	unsigned int dma_pad_mask;
-	unsigned int dma_alignment;
-	struct blk_keyslot_manager *ksm;
-	unsigned int rq_timeout;
-	int poll_nsec;
-	struct blk_stat_callback *poll_cb;
-	struct blk_rq_stat poll_stat[16];
-	struct timer_list timeout;
-	struct work_struct timeout_work;
-	atomic_t nr_active_requests_shared_sbitmap;
-	struct list_head icq_list;
-	long unsigned int blkcg_pols[1];
-	struct blkcg_gq *root_blkg;
-	struct list_head blkg_list;
-	struct queue_limits limits;
-	unsigned int required_elevator_features;
-	unsigned int nr_zones;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int max_open_zones;
-	unsigned int max_active_zones;
-	unsigned int sg_timeout;
-	unsigned int sg_reserved_size;
-	int node;
-	struct mutex debugfs_mutex;
-	struct blk_trace *blk_trace;
-	struct blk_flush_queue *fq;
-	struct list_head requeue_list;
-	spinlock_t requeue_lock;
-	struct delayed_work requeue_work;
-	struct mutex sysfs_lock;
-	struct mutex sysfs_dir_lock;
-	struct list_head unused_hctx_list;
-	spinlock_t unused_hctx_lock;
-	int mq_freeze_depth;
-	struct bsg_class_device bsg_dev;
-	struct throtl_data *td;
-	struct callback_head callback_head;
-	wait_queue_head_t mq_freeze_wq;
-	struct mutex mq_freeze_lock;
-	struct blk_mq_tag_set *tag_set;
-	struct list_head tag_set_list;
-	struct bio_set bio_split;
-	struct dentry *debugfs_dir;
-	bool mq_sysfs_init_done;
-	size_t cmd_size;
-	u64 write_hints[5];
-};
-
 typedef __u64 Elf64_Addr;
 
 typedef __u16 Elf64_Half;
@@ -5456,27 +4717,13 @@
 	Elf64_Xword st_size;
 };
 
-typedef struct elf64_sym Elf64_Sym;
-
 struct kernfs_root;
 
 struct kernfs_elem_dir {
 	long unsigned int subdirs;
 	struct rb_root children;
 	struct kernfs_root *root;
-};
-
-struct kernfs_syscall_ops;
-
-struct kernfs_root {
-	struct kernfs_node *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
+	long unsigned int rev;
 };
 
 struct kernfs_elem_symlink {
@@ -5533,14 +4780,6 @@
 	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
 };
 
-struct kernfs_syscall_ops {
-	int (*show_options)(struct seq_file *, struct kernfs_root *);
-	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node *);
-	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
-	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
-};
-
 struct kernfs_open_file {
 	struct kernfs_node *kn;
 	struct file *file;
@@ -5557,13 +4796,6 @@
 	const struct vm_operations_struct *vm_ops;
 };
 
-typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct poll_table_struct {
-	poll_queue_proc _qproc;
-	__poll_t _key;
-};
-
 enum kobj_ns_type {
 	KOBJ_NS_TYPE_NONE = 0,
 	KOBJ_NS_TYPE_NET = 1,
@@ -5600,6 +4832,7 @@
 	struct attribute attr;
 	size_t size;
 	void *private;
+	struct address_space * (*f_mapping)();
 	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
 	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
 	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
@@ -5622,7 +4855,6 @@
 struct kobj_type {
 	void (*release)(struct kobject *);
 	const struct sysfs_ops *sysfs_ops;
-	struct attribute **default_attrs;
 	const struct attribute_group **default_groups;
 	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
 	const void * (*namespace)(struct kobject *);
@@ -5638,737 +4870,59 @@
 };
 
 struct kset_uevent_ops {
-	int (* const filter)(struct kset *, struct kobject *);
-	const char * (* const name)(struct kset *, struct kobject *);
-	int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);
+	int (* const filter)(struct kobject *);
+	const char * (* const name)(struct kobject *);
+	int (* const uevent)(struct kobject *, struct kobj_uevent_env *);
 };
 
-struct kernel_param;
-
-struct kernel_param_ops {
-	unsigned int flags;
-	int (*set)(const char *, const struct kernel_param *);
-	int (*get)(char *, const struct kernel_param *);
-	void (*free)(void *);
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
 };
 
-struct kparam_string;
-
-struct kparam_array;
-
-struct kernel_param {
-	const char *name;
-	struct module *mod;
-	const struct kernel_param_ops *ops;
-	const u16 perm;
-	s8 level;
-	u8 flags;
-	union {
-		void *arg;
-		const struct kparam_string *str;
-		const struct kparam_array *arr;
-	};
+struct pm_message {
+	int event;
 };
 
-struct kparam_string {
-	unsigned int maxlen;
-	char *string;
-};
+typedef struct pm_message pm_message_t;
 
-struct kparam_array {
-	unsigned int max;
-	unsigned int elemsize;
-	unsigned int *num;
-	const struct kernel_param_ops *ops;
-	void *elem;
-};
-
-enum module_state {
-	MODULE_STATE_LIVE = 0,
-	MODULE_STATE_COMING = 1,
-	MODULE_STATE_GOING = 2,
-	MODULE_STATE_UNFORMED = 3,
-};
-
-struct module_param_attrs;
-
-struct module_kobject {
-	struct kobject kobj;
-	struct module *mod;
-	struct kobject *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct latch_tree_node {
-	struct rb_node node[2];
-};
-
-struct mod_tree_node {
-	struct module *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node mtn;
-};
-
-struct mod_arch_specific {
-	unsigned int stubs_section;
-	unsigned int toc_section;
-	bool toc_fixed;
-	long unsigned int start_opd;
-	long unsigned int end_opd;
-	long unsigned int tramp;
-	long unsigned int tramp_regs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	unsigned int num_bugs;
-};
-
-struct mod_kallsyms {
-	Elf64_Sym *symtab;
-	unsigned int num_symtab;
-	char *strtab;
-	char *typetab;
-};
-
-struct module_attribute;
-
-struct exception_table_entry;
-
-struct module_sect_attrs;
-
-struct module_notes_attrs;
-
-struct tracepoint;
-
-typedef struct tracepoint * const tracepoint_ptr_t;
-
-struct bpf_raw_event_map;
-
-struct trace_eval_map;
-
-struct error_injection_entry;
-
-struct module {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject mkobj;
-	struct module_attribute *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool using_gplonly_symbols;
-	const struct kernel_symbol *unused_syms;
-	const s32 *unused_crcs;
-	unsigned int num_unused_syms;
-	unsigned int num_unused_gpl_syms;
-	const struct kernel_symbol *unused_gpl_syms;
-	const s32 *unused_gpl_crcs;
-	bool sig_ok;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout core_layout;
-	struct module_layout init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	void *noinstr_text_start;
-	unsigned int noinstr_text_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	unsigned int num_ftrace_callsites;
-	long unsigned int *ftrace_callsites;
-	void *kprobes_text_start;
-	unsigned int kprobes_text_size;
-	long unsigned int *kprobe_blacklist;
-	unsigned int num_kprobe_blacklist;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct error_injection_entry {
-	long unsigned int addr;
-	int etype;
-};
-
-struct tracepoint_func {
-	void *func;
-	void *data;
-	int prio;
-};
-
-struct static_call_key;
-
-struct tracepoint {
-	const char *name;
-	struct static_key key;
-	struct static_call_key *static_call_key;
-	void *static_call_tramp;
-	void *iterator;
-	int (*regfunc)();
-	void (*unregfunc)();
-	struct tracepoint_func *funcs;
-};
-
-struct static_call_key {
-	void *func;
-};
-
-struct bpf_raw_event_map {
-	struct tracepoint *tp;
-	void *bpf_func;
-	u32 num_args;
-	u32 writable_size;
-	long: 64;
-};
-
-struct module_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
-	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
-	void (*setup)(struct module *, const char *);
-	int (*test)(struct module *);
-	void (*free)(struct module *);
-};
-
-struct exception_table_entry {
-	int insn;
-	int fixup;
-};
-
-struct trace_event_functions;
-
-struct trace_event {
-	struct hlist_node node;
-	struct list_head list;
-	int type;
-	struct trace_event_functions *funcs;
-};
-
-struct trace_event_class;
-
-struct bpf_prog_array;
-
-struct trace_event_call {
-	struct list_head list;
-	struct trace_event_class *class;
-	union {
-		char *name;
-		struct tracepoint *tp;
-	};
-	struct trace_event event;
-	char *print_fmt;
-	struct event_filter *filter;
-	void *mod;
-	void *data;
-	int flags;
-	int perf_refcount;
-	struct hlist_head *perf_events;
-	struct bpf_prog_array *prog_array;
-	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
-};
-
-struct trace_eval_map {
-	const char *system;
-	const char *eval_string;
-	long unsigned int eval_value;
-};
-
-struct cgroup_base_stat {
-	struct task_cputime cputime;
-};
-
-struct psi_group_cpu;
-
-struct psi_group {
-	struct mutex avgs_lock;
-	struct psi_group_cpu *pcpu;
-	u64 avg_total[5];
-	u64 avg_last_update;
-	u64 avg_next_update;
-	struct delayed_work avgs_work;
-	u64 total[10];
-	long unsigned int avg[15];
-	struct task_struct *poll_task;
-	struct timer_list poll_timer;
-	wait_queue_head_t poll_wait;
-	atomic_t poll_wakeup;
-	struct mutex trigger_lock;
-	struct list_head triggers;
-	u32 nr_triggers[5];
-	u32 poll_states;
-	u64 poll_min_period;
-	u64 polling_total[5];
-	u64 polling_next_update;
-	u64 polling_until;
-};
-
-struct cgroup_bpf {
-	struct bpf_prog_array *effective[38];
-	struct list_head progs[38];
-	u32 flags[38];
-	struct list_head storages;
-	struct bpf_prog_array *inactive;
-	struct percpu_ref refcnt;
-	struct work_struct release_work;
-};
-
-struct cgroup_freezer_state {
-	bool freeze;
-	int e_freeze;
-	int nr_frozen_descendants;
-	int nr_frozen_tasks;
-};
-
-struct cgroup_root;
-
-struct cgroup_rstat_cpu;
-
-struct cgroup {
-	struct cgroup_subsys_state self;
-	long unsigned int flags;
-	int level;
-	int max_depth;
-	int nr_descendants;
-	int nr_dying_descendants;
-	int max_descendants;
-	int nr_populated_csets;
-	int nr_populated_domain_children;
-	int nr_populated_threaded_children;
-	int nr_threaded_children;
-	struct kernfs_node *kn;
-	struct cgroup_file procs_file;
-	struct cgroup_file events_file;
-	u16 subtree_control;
-	u16 subtree_ss_mask;
-	u16 old_subtree_control;
-	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state *subsys[12];
-	struct cgroup_root *root;
-	struct list_head cset_links;
-	struct list_head e_csets[12];
-	struct cgroup *dom_cgrp;
-	struct cgroup *old_dom_cgrp;
-	struct cgroup_rstat_cpu *rstat_cpu;
-	struct list_head rstat_css_list;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup_base_stat bstat;
-	struct prev_cputime prev_cputime;
-	struct list_head pidlists;
-	struct mutex pidlist_mutex;
-	wait_queue_head_t offline_waitq;
-	struct work_struct release_agent_work;
-	struct psi_group psi;
-	struct cgroup_bpf bpf;
-	atomic_t congestion_count;
-	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
-};
-
-struct taskstats {
-	__u16 version;
-	__u32 ac_exitcode;
-	__u8 ac_flag;
-	__u8 ac_nice;
-	__u64 cpu_count;
-	__u64 cpu_delay_total;
-	__u64 blkio_count;
-	__u64 blkio_delay_total;
-	__u64 swapin_count;
-	__u64 swapin_delay_total;
-	__u64 cpu_run_real_total;
-	__u64 cpu_run_virtual_total;
-	char ac_comm[32];
-	__u8 ac_sched;
-	__u8 ac_pad[3];
-	int: 32;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u64 ac_etime;
-	__u64 ac_utime;
-	__u64 ac_stime;
-	__u64 ac_minflt;
-	__u64 ac_majflt;
-	__u64 coremem;
-	__u64 virtmem;
-	__u64 hiwater_rss;
-	__u64 hiwater_vm;
-	__u64 read_char;
-	__u64 write_char;
-	__u64 read_syscalls;
-	__u64 write_syscalls;
-	__u64 read_bytes;
-	__u64 write_bytes;
-	__u64 cancelled_write_bytes;
-	__u64 nvcsw;
-	__u64 nivcsw;
-	__u64 ac_utimescaled;
-	__u64 ac_stimescaled;
-	__u64 cpu_scaled_run_real_total;
-	__u64 freepages_count;
-	__u64 freepages_delay_total;
-	__u64 thrashing_count;
-	__u64 thrashing_delay_total;
-	__u64 ac_btime64;
-};
-
-struct wait_page_queue {
-	struct page *page;
-	int bit_nr;
-	wait_queue_entry_t wait;
-};
-
-enum writeback_sync_modes {
-	WB_SYNC_NONE = 0,
-	WB_SYNC_ALL = 1,
-};
-
-struct writeback_control {
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	enum writeback_sync_modes sync_mode;
-	unsigned int for_kupdate: 1;
-	unsigned int for_background: 1;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_reclaim: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_sync: 1;
-	unsigned int no_cgroup_owner: 1;
-	unsigned int punt_to_cgroup: 1;
-	struct bdi_writeback *wb;
-	struct inode *inode;
-	int wb_id;
-	int wb_lcand_id;
-	int wb_tcand_id;
-	size_t wb_bytes;
-	size_t wb_lcand_bytes;
-	size_t wb_tcand_bytes;
-};
-
-struct readahead_control {
-	struct file *file;
-	struct address_space *mapping;
-	long unsigned int _index;
-	unsigned int _nr_pages;
-	unsigned int _batch_count;
-};
-
-struct swap_cluster_info {
-	spinlock_t lock;
-	unsigned int data: 24;
-	unsigned int flags: 8;
-};
-
-struct swap_cluster_list {
-	struct swap_cluster_info head;
-	struct swap_cluster_info tail;
-};
-
-struct percpu_cluster;
-
-struct swap_info_struct {
-	long unsigned int flags;
-	short int prio;
-	struct plist_node list;
-	signed char type;
-	unsigned int max;
-	unsigned char *swap_map;
-	struct swap_cluster_info *cluster_info;
-	struct swap_cluster_list free_clusters;
-	unsigned int lowest_bit;
-	unsigned int highest_bit;
-	unsigned int pages;
-	unsigned int inuse_pages;
-	unsigned int cluster_next;
-	unsigned int cluster_nr;
-	unsigned int *cluster_next_cpu;
-	struct percpu_cluster *percpu_cluster;
-	struct rb_root swap_extent_root;
-	struct block_device *bdev;
-	struct file *swap_file;
-	unsigned int old_block_size;
-	long unsigned int *frontswap_map;
-	atomic_t frontswap_pages;
-	spinlock_t lock;
-	spinlock_t cont_lock;
-	struct work_struct discard_work;
-	struct swap_cluster_list discard_clusters;
-	struct plist_node avail_lists[0];
-};
-
-struct hd_struct;
-
-struct gendisk;
-
-struct block_device {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode *bd_inode;
-	struct super_block *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device *bd_contains;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	spinlock_t bd_size_lock;
-	struct gendisk *bd_disk;
-	struct backing_dev_info *bd_bdi;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct cdev {
-	struct kobject kobj;
-	struct module *owner;
-	const struct file_operations *ops;
-	struct list_head list;
-	dev_t dev;
-	unsigned int count;
-};
-
-struct fc_log;
-
-struct p_log {
-	const char *prefix;
-	struct fc_log *log;
-};
-
-enum fs_context_purpose {
-	FS_CONTEXT_FOR_MOUNT = 0,
-	FS_CONTEXT_FOR_SUBMOUNT = 1,
-	FS_CONTEXT_FOR_RECONFIGURE = 2,
-};
-
-enum fs_context_phase {
-	FS_CONTEXT_CREATE_PARAMS = 0,
-	FS_CONTEXT_CREATING = 1,
-	FS_CONTEXT_AWAITING_MOUNT = 2,
-	FS_CONTEXT_AWAITING_RECONF = 3,
-	FS_CONTEXT_RECONF_PARAMS = 4,
-	FS_CONTEXT_RECONFIGURING = 5,
-	FS_CONTEXT_FAILED = 6,
-};
-
-struct fs_context_operations;
-
-struct fs_context {
-	const struct fs_context_operations *ops;
-	struct mutex uapi_mutex;
-	struct file_system_type *fs_type;
-	void *fs_private;
-	void *sget_key;
-	struct dentry *root;
-	struct user_namespace *user_ns;
-	struct net *net_ns;
-	const struct cred *cred;
-	struct p_log log;
-	const char *source;
-	void *security;
-	void *s_fs_info;
-	unsigned int sb_flags;
-	unsigned int sb_flags_mask;
-	unsigned int s_iflags;
-	unsigned int lsm_flags;
-	enum fs_context_purpose purpose: 8;
-	enum fs_context_phase phase: 8;
-	bool need_free: 1;
-	bool global: 1;
-	bool oldapi: 1;
-};
-
-struct audit_names;
-
-struct filename {
-	const char *name;
-	const char *uptr;
-	int refcnt;
-	struct audit_names *aname;
-	const char iname[0];
-};
-
-typedef u8 blk_status_t;
-
-struct bvec_iter {
-	sector_t bi_sector;
-	unsigned int bi_size;
-	unsigned int bi_idx;
-	unsigned int bi_bvec_done;
-};
-
-typedef void bio_end_io_t(struct bio *);
-
-struct bio_issue {
-	u64 value;
-};
-
-struct bio_vec {
-	struct page *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct bio_crypt_ctx;
-
-struct bio_integrity_payload;
-
-struct bio {
-	struct bio *bi_next;
-	struct gendisk *bi_disk;
-	unsigned int bi_opf;
-	short unsigned int bi_flags;
-	short unsigned int bi_ioprio;
-	short unsigned int bi_write_hint;
-	blk_status_t bi_status;
-	u8 bi_partno;
-	atomic_t __bi_remaining;
-	struct bvec_iter bi_iter;
-	bio_end_io_t *bi_end_io;
-	void *bi_private;
-	struct blkcg_gq *bi_blkg;
-	struct bio_issue bi_issue;
-	u64 bi_iocost_cost;
-	struct bio_crypt_ctx *bi_crypt_context;
-	union {
-		struct bio_integrity_payload *bi_integrity;
-	};
-	short unsigned int bi_vcnt;
-	short unsigned int bi_max_vecs;
-	atomic_t __bi_cnt;
-	struct bio_vec *bi_io_vec;
-	struct bio_set *bi_pool;
-	struct bio_vec bi_inline_vecs[0];
-};
-
-struct linux_binprm {
-	struct vm_area_struct *vma;
-	long unsigned int vma_pages;
-	struct mm_struct *mm;
-	long unsigned int p;
-	long unsigned int argmin;
-	unsigned int have_execfd: 1;
-	unsigned int execfd_creds: 1;
-	unsigned int secureexec: 1;
-	unsigned int point_of_no_return: 1;
-	struct file *executable;
-	struct file *interpreter;
-	struct file *file;
-	struct cred *cred;
-	int unsafe;
-	unsigned int per_clear;
-	int argc;
-	int envc;
-	const char *filename;
-	const char *interp;
-	const char *fdpath;
-	unsigned int interp_flags;
-	int execfd;
-	long unsigned int loader;
-	long unsigned int exec;
-	struct rlimit rlim_stack;
-	char buf[256];
-};
-
-struct coredump_params {
-	const kernel_siginfo_t *siginfo;
-	struct pt_regs *regs;
-	struct file *file;
-	long unsigned int limit;
-	long unsigned int mm_flags;
-	loff_t written;
-	loff_t pos;
-};
-
-struct em_perf_state {
-	long unsigned int frequency;
-	long unsigned int power;
-	long unsigned int cost;
-};
-
-struct em_perf_domain {
-	struct em_perf_state *table;
-	int nr_perf_states;
-	long unsigned int cpus[0];
+struct dev_pm_ops {
+	int (*prepare)(struct device *);
+	void (*complete)(struct device *);
+	int (*suspend)(struct device *);
+	int (*resume)(struct device *);
+	int (*freeze)(struct device *);
+	int (*thaw)(struct device *);
+	int (*poweroff)(struct device *);
+	int (*restore)(struct device *);
+	int (*suspend_late)(struct device *);
+	int (*resume_early)(struct device *);
+	int (*freeze_late)(struct device *);
+	int (*thaw_early)(struct device *);
+	int (*poweroff_late)(struct device *);
+	int (*restore_early)(struct device *);
+	int (*suspend_noirq)(struct device *);
+	int (*resume_noirq)(struct device *);
+	int (*freeze_noirq)(struct device *);
+	int (*thaw_noirq)(struct device *);
+	int (*poweroff_noirq)(struct device *);
+	int (*restore_noirq)(struct device *);
+	int (*runtime_suspend)(struct device *);
+	int (*runtime_resume)(struct device *);
+	int (*runtime_idle)(struct device *);
 };
 
 enum dl_dev_state {
@@ -6381,18 +4935,10 @@
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
-	struct list_head needs_suppliers;
-	struct list_head defer_hook;
-	bool need_for_probe;
+	struct list_head defer_sync;
 	enum dl_dev_state status;
 };
 
-struct pm_message {
-	int event;
-};
-
-typedef struct pm_message pm_message_t;
-
 enum rpm_request {
 	RPM_REQ_NONE = 0,
 	RPM_REQ_IDLE = 1,
@@ -6401,6 +4947,14 @@
 	RPM_REQ_RESUME = 4,
 };
 
+enum rpm_status {
+	RPM_INVALID = -1,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
 struct wakeup_source;
 
 struct wake_irq;
@@ -6442,6 +4996,7 @@
 	unsigned int idle_notification: 1;
 	unsigned int request_pending: 1;
 	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
 	unsigned int runtime_auto: 1;
 	bool ignore_children: 1;
 	unsigned int no_callbacks: 1;
@@ -6452,6 +5007,7 @@
 	unsigned int links_count;
 	enum rpm_request request;
 	enum rpm_status runtime_status;
+	enum rpm_status last_status;
 	int runtime_error;
 	int autosuspend_delay;
 	u64 last_busy;
@@ -6463,6 +5019,15 @@
 	struct dev_pm_qos *qos;
 };
 
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
 struct iommu_table;
 
 struct pci_dn;
@@ -6477,7 +5042,13 @@
 	struct pci_dn *pci_data;
 	struct eeh_dev *edev;
 	struct cxl_context *cxl_ctx;
-	void *iov_data;
+};
+
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
 };
 
 struct device_private;
@@ -6490,8 +5061,6 @@
 
 struct dev_pm_domain;
 
-struct irq_domain;
-
 struct dma_map_ops;
 
 struct bus_dma_region;
@@ -6500,6 +5069,8 @@
 
 struct dma_coherent_mem;
 
+struct io_tlb_mem;
+
 struct device_node;
 
 struct fwnode_handle;
@@ -6510,6 +5081,8 @@
 
 struct dev_iommu;
 
+struct device_physical_location;
+
 struct device {
 	struct kobject kobj;
 	struct device *parent;
@@ -6524,9 +5097,7 @@
 	struct dev_links_info links;
 	struct dev_pm_info power;
 	struct dev_pm_domain *pm_domain;
-	struct em_perf_domain *em_pd;
-	struct irq_domain *msi_domain;
-	struct list_head msi_list;
+	struct dev_msi_info msi;
 	const struct dma_map_ops *dma_ops;
 	u64 *dma_mask;
 	u64 coherent_dma_mask;
@@ -6535,6 +5106,7 @@
 	struct device_dma_parameters *dma_parms;
 	struct list_head dma_pools;
 	struct dma_coherent_mem *dma_mem;
+	struct io_tlb_mem *dma_io_tlb_mem;
 	struct dev_archdata archdata;
 	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
@@ -6548,46 +5120,19 @@
 	void (*release)(struct device *);
 	struct iommu_group *iommu_group;
 	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
 	bool offline_disabled: 1;
 	bool offline: 1;
 	bool of_node_reused: 1;
 	bool state_synced: 1;
+	bool can_match: 1;
 	bool dma_ops_bypass: 1;
 };
 
-struct dev_pm_ops {
-	int (*prepare)(struct device *);
-	void (*complete)(struct device *);
-	int (*suspend)(struct device *);
-	int (*resume)(struct device *);
-	int (*freeze)(struct device *);
-	int (*thaw)(struct device *);
-	int (*poweroff)(struct device *);
-	int (*restore)(struct device *);
-	int (*suspend_late)(struct device *);
-	int (*resume_early)(struct device *);
-	int (*freeze_late)(struct device *);
-	int (*thaw_early)(struct device *);
-	int (*poweroff_late)(struct device *);
-	int (*restore_early)(struct device *);
-	int (*suspend_noirq)(struct device *);
-	int (*resume_noirq)(struct device *);
-	int (*freeze_noirq)(struct device *);
-	int (*thaw_noirq)(struct device *);
-	int (*poweroff_noirq)(struct device *);
-	int (*restore_noirq)(struct device *);
-	int (*runtime_suspend)(struct device *);
-	int (*runtime_resume)(struct device *);
-	int (*runtime_idle)(struct device *);
-};
-
-struct pm_domain_data;
-
 struct pm_subsys_data {
 	spinlock_t lock;
 	unsigned int refcount;
-	struct list_head clock_list;
-	struct pm_domain_data *domain_data;
 };
 
 struct wakeup_source {
@@ -6637,7 +5182,7 @@
 	int (*uevent)(struct device *, struct kobj_uevent_env *);
 	int (*probe)(struct device *);
 	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
+	void (*remove)(struct device *);
 	void (*shutdown)(struct device *);
 	int (*online)(struct device *);
 	int (*offline)(struct device *);
@@ -6645,6 +5190,7 @@
 	int (*resume)(struct device *);
 	int (*num_vf)(struct device *);
 	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
 	const struct dev_pm_ops *pm;
 	const struct iommu_ops *iommu_ops;
 	struct subsys_private *p;
@@ -6690,33 +5236,18 @@
 	IOMMU_CAP_CACHE_COHERENCY = 0,
 	IOMMU_CAP_INTR_REMAP = 1,
 	IOMMU_CAP_NOEXEC = 2,
-};
-
-enum iommu_attr {
-	DOMAIN_ATTR_GEOMETRY = 0,
-	DOMAIN_ATTR_PAGING = 1,
-	DOMAIN_ATTR_WINDOWS = 2,
-	DOMAIN_ATTR_FSL_PAMU_STASH = 3,
-	DOMAIN_ATTR_FSL_PAMU_ENABLE = 4,
-	DOMAIN_ATTR_FSL_PAMUV1 = 5,
-	DOMAIN_ATTR_NESTING = 6,
-	DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,
-	DOMAIN_ATTR_MAX = 8,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 3,
 };
 
 enum iommu_dev_features {
-	IOMMU_DEV_FEAT_AUX = 0,
-	IOMMU_DEV_FEAT_SVA = 1,
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
 };
 
 struct iommu_domain;
 
-struct iommu_iotlb_gather;
-
 struct iommu_device;
 
-struct iommu_resv_region;
-
 struct of_phandle_args;
 
 struct iommu_sva;
@@ -6725,50 +5256,26 @@
 
 struct iommu_page_response;
 
-struct iommu_cache_invalidate_info;
-
-struct iommu_gpasid_bind_data;
+struct iommu_domain_ops;
 
 struct iommu_ops {
 	bool (*capable)(enum iommu_cap);
 	struct iommu_domain * (*domain_alloc)(unsigned int);
-	void (*domain_free)(struct iommu_domain *);
-	int (*attach_dev)(struct iommu_domain *, struct device *);
-	void (*detach_dev)(struct iommu_domain *, struct device *);
-	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	void (*flush_iotlb_all)(struct iommu_domain *);
-	void (*iotlb_sync_map)(struct iommu_domain *);
-	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
 	struct iommu_device * (*probe_device)(struct device *);
 	void (*release_device)(struct device *);
 	void (*probe_finalize)(struct device *);
 	struct iommu_group * (*device_group)(struct device *);
-	int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
 	void (*get_resv_regions)(struct device *, struct list_head *);
-	void (*put_resv_regions)(struct device *, struct list_head *);
-	void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
-	int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
-	void (*domain_window_disable)(struct iommu_domain *, u32);
 	int (*of_xlate)(struct device *, struct of_phandle_args *);
-	bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
-	bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
-	bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
+	bool (*is_attach_deferred)(struct device *);
 	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
 	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
-	int (*aux_attach_dev)(struct iommu_domain *, struct device *);
-	void (*aux_detach_dev)(struct iommu_domain *, struct device *);
-	int (*aux_get_pasid)(struct iommu_domain *, struct device *);
 	struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
 	void (*sva_unbind)(struct iommu_sva *);
 	u32 (*sva_get_pasid)(struct iommu_sva *);
 	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
-	int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
-	int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
-	int (*sva_unbind_gpasid)(struct device *, u32);
 	int (*def_domain_type)(struct device *);
+	const struct iommu_domain_ops *default_domain_ops;
 	long unsigned int pgsize_bitmap;
 	struct module *owner;
 };
@@ -6800,6 +5307,97 @@
 	struct subsys_private *p;
 };
 
+struct kernel_param_ops {
+	unsigned int flags;
+	int (*set)(const char *, const struct kernel_param *);
+	int (*get)(char *, const struct kernel_param *);
+	void (*free)(void *);
+};
+
+struct kparam_string;
+
+struct kparam_array;
+
+struct kernel_param {
+	const char *name;
+	struct module *mod;
+	const struct kernel_param_ops *ops;
+	const u16 perm;
+	s8 level;
+	u8 flags;
+	union {
+		void *arg;
+		const struct kparam_string *str;
+		const struct kparam_array *arr;
+	};
+};
+
+struct kparam_string {
+	unsigned int maxlen;
+	char *string;
+};
+
+struct kparam_array {
+	unsigned int max;
+	unsigned int elemsize;
+	unsigned int *num;
+	const struct kernel_param_ops *ops;
+	void *elem;
+};
+
+struct error_injection_entry {
+	long unsigned int addr;
+	int etype;
+};
+
+struct module_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
+	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
+	void (*setup)(struct module *, const char *);
+	int (*test)(struct module *);
+	void (*free)(struct module *);
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	struct list_head list;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct trace_event_class;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head *perf_events;
+	struct bpf_prog_array *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	long unsigned int eval_value;
+};
+
 struct of_device_id {
 	char name[32];
 	char type[32];
@@ -6810,7 +5408,7 @@
 typedef long unsigned int kernel_ulong_t;
 
 struct acpi_device_id {
-	__u8 id[9];
+	__u8 id[16];
 	kernel_ulong_t driver_data;
 	__u32 cls;
 	__u32 cls_msk;
@@ -6844,44 +5442,38 @@
 
 struct device_dma_parameters {
 	unsigned int max_segment_size;
+	unsigned int min_align_mask;
 	long unsigned int segment_boundary_mask;
 };
 
-enum irq_domain_bus_token {
-	DOMAIN_BUS_ANY = 0,
-	DOMAIN_BUS_WIRED = 1,
-	DOMAIN_BUS_GENERIC_MSI = 2,
-	DOMAIN_BUS_PCI_MSI = 3,
-	DOMAIN_BUS_PLATFORM_MSI = 4,
-	DOMAIN_BUS_NEXUS = 5,
-	DOMAIN_BUS_IPI = 6,
-	DOMAIN_BUS_FSL_MC_MSI = 7,
-	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
-	DOMAIN_BUS_WAKEUP = 9,
-	DOMAIN_BUS_VMD_MSI = 10,
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
 };
 
-struct irq_domain_ops;
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
+};
 
-struct irq_domain_chip_generic;
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
+};
 
-struct irq_domain {
-	struct list_head link;
-	const char *name;
-	const struct irq_domain_ops *ops;
-	void *host_data;
-	unsigned int flags;
-	unsigned int mapcount;
-	struct fwnode_handle *fwnode;
-	enum irq_domain_bus_token bus_token;
-	struct irq_domain_chip_generic *gc;
-	struct irq_domain *parent;
-	irq_hw_number_t hwirq_max;
-	unsigned int revmap_direct_max_irq;
-	unsigned int revmap_size;
-	struct xarray revmap_tree;
-	struct mutex revmap_tree_mutex;
-	unsigned int linear_revmap[0];
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
 };
 
 enum dma_data_direction {
@@ -6896,12 +5488,13 @@
 struct scatterlist;
 
 struct dma_map_ops {
+	unsigned int flags;
 	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
 	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
 	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
 	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
-	void * (*alloc_noncoherent)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
-	void (*free_noncoherent)(struct device *, size_t, void *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
 	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
 	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
 	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
@@ -6918,6 +5511,7 @@
 	int (*dma_supported)(struct device *, u64);
 	u64 (*get_required_mask)(struct device *);
 	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
 	long unsigned int (*get_merge_boundary)(struct device *);
 };
 
@@ -6934,285 +5528,9 @@
 	struct fwnode_handle *secondary;
 	const struct fwnode_operations *ops;
 	struct device *dev;
-};
-
-struct property;
-
-struct device_node {
-	const char *name;
-	phandle phandle;
-	const char *full_name;
-	struct fwnode_handle fwnode;
-	struct property *properties;
-	struct property *deadprops;
-	struct device_node *parent;
-	struct device_node *child;
-	struct device_node *sibling;
-	struct kobject kobj;
-	long unsigned int _flags;
-	void *data;
-};
-
-enum cpuhp_state {
-	CPUHP_INVALID = 4294967295,
-	CPUHP_OFFLINE = 0,
-	CPUHP_CREATE_THREADS = 1,
-	CPUHP_PERF_PREPARE = 2,
-	CPUHP_PERF_X86_PREPARE = 3,
-	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
-	CPUHP_PERF_POWER = 5,
-	CPUHP_PERF_SUPERH = 6,
-	CPUHP_X86_HPET_DEAD = 7,
-	CPUHP_X86_APB_DEAD = 8,
-	CPUHP_X86_MCE_DEAD = 9,
-	CPUHP_VIRT_NET_DEAD = 10,
-	CPUHP_SLUB_DEAD = 11,
-	CPUHP_DEBUG_OBJ_DEAD = 12,
-	CPUHP_MM_WRITEBACK_DEAD = 13,
-	CPUHP_MM_VMSTAT_DEAD = 14,
-	CPUHP_SOFTIRQ_DEAD = 15,
-	CPUHP_NET_MVNETA_DEAD = 16,
-	CPUHP_CPUIDLE_DEAD = 17,
-	CPUHP_ARM64_FPSIMD_DEAD = 18,
-	CPUHP_ARM_OMAP_WAKE_DEAD = 19,
-	CPUHP_IRQ_POLL_DEAD = 20,
-	CPUHP_BLOCK_SOFTIRQ_DEAD = 21,
-	CPUHP_ACPI_CPUDRV_DEAD = 22,
-	CPUHP_S390_PFAULT_DEAD = 23,
-	CPUHP_BLK_MQ_DEAD = 24,
-	CPUHP_FS_BUFF_DEAD = 25,
-	CPUHP_PRINTK_DEAD = 26,
-	CPUHP_MM_MEMCQ_DEAD = 27,
-	CPUHP_PERCPU_CNT_DEAD = 28,
-	CPUHP_RADIX_DEAD = 29,
-	CPUHP_PAGE_ALLOC_DEAD = 30,
-	CPUHP_NET_DEV_DEAD = 31,
-	CPUHP_PCI_XGENE_DEAD = 32,
-	CPUHP_IOMMU_INTEL_DEAD = 33,
-	CPUHP_LUSTRE_CFS_DEAD = 34,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,
-	CPUHP_PADATA_DEAD = 36,
-	CPUHP_WORKQUEUE_PREP = 37,
-	CPUHP_POWER_NUMA_PREPARE = 38,
-	CPUHP_HRTIMERS_PREPARE = 39,
-	CPUHP_PROFILE_PREPARE = 40,
-	CPUHP_X2APIC_PREPARE = 41,
-	CPUHP_SMPCFD_PREPARE = 42,
-	CPUHP_RELAY_PREPARE = 43,
-	CPUHP_SLAB_PREPARE = 44,
-	CPUHP_MD_RAID5_PREPARE = 45,
-	CPUHP_RCUTREE_PREP = 46,
-	CPUHP_CPUIDLE_COUPLED_PREPARE = 47,
-	CPUHP_POWERPC_PMAC_PREPARE = 48,
-	CPUHP_POWERPC_MMU_CTX_PREPARE = 49,
-	CPUHP_XEN_PREPARE = 50,
-	CPUHP_XEN_EVTCHN_PREPARE = 51,
-	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,
-	CPUHP_SH_SH3X_PREPARE = 53,
-	CPUHP_NET_FLOW_PREPARE = 54,
-	CPUHP_TOPOLOGY_PREPARE = 55,
-	CPUHP_NET_IUCV_PREPARE = 56,
-	CPUHP_ARM_BL_PREPARE = 57,
-	CPUHP_TRACE_RB_PREPARE = 58,
-	CPUHP_MM_ZS_PREPARE = 59,
-	CPUHP_MM_ZSWP_MEM_PREPARE = 60,
-	CPUHP_MM_ZSWP_POOL_PREPARE = 61,
-	CPUHP_KVM_PPC_BOOK3S_PREPARE = 62,
-	CPUHP_ZCOMP_PREPARE = 63,
-	CPUHP_TIMERS_PREPARE = 64,
-	CPUHP_MIPS_SOC_PREPARE = 65,
-	CPUHP_BP_PREPARE_DYN = 66,
-	CPUHP_BP_PREPARE_DYN_END = 86,
-	CPUHP_BRINGUP_CPU = 87,
-	CPUHP_AP_IDLE_DEAD = 88,
-	CPUHP_AP_OFFLINE = 89,
-	CPUHP_AP_SCHED_STARTING = 90,
-	CPUHP_AP_RCUTREE_DYING = 91,
-	CPUHP_AP_CPU_PM_STARTING = 92,
-	CPUHP_AP_IRQ_GIC_STARTING = 93,
-	CPUHP_AP_IRQ_HIP04_STARTING = 94,
-	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 95,
-	CPUHP_AP_IRQ_BCM2836_STARTING = 96,
-	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 97,
-	CPUHP_AP_IRQ_RISCV_STARTING = 98,
-	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 99,
-	CPUHP_AP_ARM_MVEBU_COHERENCY = 100,
-	CPUHP_AP_MICROCODE_LOADER = 101,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 102,
-	CPUHP_AP_PERF_X86_STARTING = 103,
-	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 104,
-	CPUHP_AP_PERF_X86_CQM_STARTING = 105,
-	CPUHP_AP_PERF_X86_CSTATE_STARTING = 106,
-	CPUHP_AP_PERF_XTENSA_STARTING = 107,
-	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 108,
-	CPUHP_AP_ARM_SDEI_STARTING = 109,
-	CPUHP_AP_ARM_VFP_STARTING = 110,
-	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,
-	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,
-	CPUHP_AP_PERF_ARM_ACPI_STARTING = 113,
-	CPUHP_AP_PERF_ARM_STARTING = 114,
-	CPUHP_AP_ARM_L2X0_STARTING = 115,
-	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 116,
-	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 117,
-	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 118,
-	CPUHP_AP_JCORE_TIMER_STARTING = 119,
-	CPUHP_AP_ARM_TWD_STARTING = 120,
-	CPUHP_AP_QCOM_TIMER_STARTING = 121,
-	CPUHP_AP_TEGRA_TIMER_STARTING = 122,
-	CPUHP_AP_ARMADA_TIMER_STARTING = 123,
-	CPUHP_AP_MARCO_TIMER_STARTING = 124,
-	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 125,
-	CPUHP_AP_ARC_TIMER_STARTING = 126,
-	CPUHP_AP_RISCV_TIMER_STARTING = 127,
-	CPUHP_AP_CLINT_TIMER_STARTING = 128,
-	CPUHP_AP_CSKY_TIMER_STARTING = 129,
-	CPUHP_AP_HYPERV_TIMER_STARTING = 130,
-	CPUHP_AP_KVM_STARTING = 131,
-	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 132,
-	CPUHP_AP_KVM_ARM_VGIC_STARTING = 133,
-	CPUHP_AP_KVM_ARM_TIMER_STARTING = 134,
-	CPUHP_AP_DUMMY_TIMER_STARTING = 135,
-	CPUHP_AP_ARM_XEN_STARTING = 136,
-	CPUHP_AP_ARM_CORESIGHT_STARTING = 137,
-	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,
-	CPUHP_AP_ARM64_ISNDEP_STARTING = 139,
-	CPUHP_AP_SMPCFD_DYING = 140,
-	CPUHP_AP_X86_TBOOT_DYING = 141,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 142,
-	CPUHP_AP_ONLINE = 143,
-	CPUHP_TEARDOWN_CPU = 144,
-	CPUHP_AP_ONLINE_IDLE = 145,
-	CPUHP_AP_SMPBOOT_THREADS = 146,
-	CPUHP_AP_X86_VDSO_VMA_ONLINE = 147,
-	CPUHP_AP_IRQ_AFFINITY_ONLINE = 148,
-	CPUHP_AP_BLK_MQ_ONLINE = 149,
-	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 150,
-	CPUHP_AP_X86_INTEL_EPB_ONLINE = 151,
-	CPUHP_AP_PERF_ONLINE = 152,
-	CPUHP_AP_PERF_X86_ONLINE = 153,
-	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 154,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 155,
-	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 156,
-	CPUHP_AP_PERF_X86_RAPL_ONLINE = 157,
-	CPUHP_AP_PERF_X86_CQM_ONLINE = 158,
-	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 159,
-	CPUHP_AP_PERF_S390_CF_ONLINE = 160,
-	CPUHP_AP_PERF_S390_SF_ONLINE = 161,
-	CPUHP_AP_PERF_ARM_CCI_ONLINE = 162,
-	CPUHP_AP_PERF_ARM_CCN_ONLINE = 163,
-	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 164,
-	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 165,
-	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 166,
-	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 167,
-	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 168,
-	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 169,
-	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 170,
-	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 171,
-	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 172,
-	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 173,
-	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 174,
-	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 175,
-	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 176,
-	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 177,
-	CPUHP_AP_WATCHDOG_ONLINE = 178,
-	CPUHP_AP_WORKQUEUE_ONLINE = 179,
-	CPUHP_AP_RCUTREE_ONLINE = 180,
-	CPUHP_AP_BASE_CACHEINFO_ONLINE = 181,
-	CPUHP_AP_ONLINE_DYN = 182,
-	CPUHP_AP_ONLINE_DYN_END = 212,
-	CPUHP_AP_X86_HPET_ONLINE = 213,
-	CPUHP_AP_X86_KVM_CLK_ONLINE = 214,
-	CPUHP_AP_ACTIVE = 215,
-	CPUHP_ONLINE = 216,
-};
-
-struct ring_buffer_event {
-	u32 type_len: 5;
-	u32 time_delta: 27;
-	u32 array[0];
-};
-
-struct seq_buf {
-	char *buffer;
-	size_t size;
-	size_t len;
-	loff_t readpos;
-};
-
-struct trace_seq {
-	char buffer[65536];
-	struct seq_buf seq;
-	int full;
-};
-
-struct irq_desc;
-
-typedef void (*irq_flow_handler_t)(struct irq_desc *);
-
-struct msi_desc;
-
-struct irq_common_data {
-	unsigned int state_use_accessors;
-	unsigned int node;
-	void *handler_data;
-	struct msi_desc *msi_desc;
-	cpumask_var_t affinity;
-};
-
-struct irq_chip;
-
-struct irq_data {
-	u32 mask;
-	unsigned int irq;
-	long unsigned int hwirq;
-	struct irq_common_data *common;
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	struct irq_data *parent_data;
-	void *chip_data;
-};
-
-struct irqaction;
-
-struct irq_affinity_notify;
-
-struct proc_dir_entry;
-
-struct irq_desc {
-	struct irq_common_data irq_common_data;
-	struct irq_data irq_data;
-	unsigned int *kstat_irqs;
-	irq_flow_handler_t handle_irq;
-	struct irqaction *action;
-	unsigned int status_use_accessors;
-	unsigned int core_internal_state__do_not_mess_with_it;
-	unsigned int depth;
-	unsigned int wake_depth;
-	unsigned int tot_count;
-	unsigned int irq_count;
-	long unsigned int last_unhandled;
-	unsigned int irqs_unhandled;
-	atomic_t threads_handled;
-	int threads_handled_last;
-	raw_spinlock_t lock;
-	struct cpumask *percpu_enabled;
-	const struct cpumask *percpu_affinity;
-	const struct cpumask *affinity_hint;
-	struct irq_affinity_notify *affinity_notify;
-	long unsigned int threads_oneshot;
-	atomic_t threads_active;
-	wait_queue_head_t wait_for_threads;
-	unsigned int nr_actions;
-	unsigned int no_suspend_depth;
-	unsigned int cond_suspend_depth;
-	unsigned int force_resume_depth;
-	struct proc_dir_entry *dir;
-	struct callback_head rcu;
-	struct kobject kobj;
-	struct mutex request_mutex;
-	int parent_irq;
-	struct module *owner;
-	const char *name;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
 };
 
 struct pci_bus;
@@ -7237,6 +5555,12 @@
 	int trace_entries;
 };
 
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
 struct fwnode_reference_args;
 
 struct fwnode_endpoint;
@@ -7246,6 +5570,8 @@
 	void (*put)(struct fwnode_handle *);
 	bool (*device_is_available)(const struct fwnode_handle *);
 	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
 	bool (*property_present)(const struct fwnode_handle *, const char *);
 	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
 	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
@@ -7259,7 +5585,9 @@
 	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
 	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
 	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
-	int (*add_links)(const struct fwnode_handle *, struct device *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
 };
 
 struct fwnode_endpoint {
@@ -7274,171 +5602,62 @@
 	u64 args[8];
 };
 
-struct property {
-	char *name;
-	int length;
-	void *value;
-	struct property *next;
-	long unsigned int _flags;
-	struct bin_attribute attr;
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
 };
 
-struct irq_fwspec {
-	struct fwnode_handle *fwnode;
-	int param_count;
-	u32 param[16];
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
 };
 
-struct irq_domain_ops {
-	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
-	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
-	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
-	void (*unmap)(struct irq_domain *, unsigned int);
-	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
-	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
-	void (*free)(struct irq_domain *, unsigned int, unsigned int);
-	int (*activate)(struct irq_domain *, struct irq_data *, bool);
-	void (*deactivate)(struct irq_domain *, struct irq_data *);
-	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+struct seq_buf {
+	char *buffer;
+	size_t size;
+	size_t len;
+	loff_t readpos;
 };
 
-enum irq_gc_flags {
-	IRQ_GC_INIT_MASK_CACHE = 1,
-	IRQ_GC_INIT_NESTED_LOCK = 2,
-	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
-	IRQ_GC_NO_MASK = 8,
-	IRQ_GC_BE_IO = 16,
+struct trace_seq {
+	char buffer[65536];
+	struct seq_buf seq;
+	int full;
 };
 
-struct irq_chip_generic;
-
-struct irq_domain_chip_generic {
-	unsigned int irqs_per_chip;
-	unsigned int num_chips;
-	unsigned int irq_flags_to_clear;
-	unsigned int irq_flags_to_set;
-	enum irq_gc_flags gc_flags;
-	struct irq_chip_generic *gc[0];
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
 };
 
-enum irqchip_irq_state {
-	IRQCHIP_STATE_PENDING = 0,
-	IRQCHIP_STATE_ACTIVE = 1,
-	IRQCHIP_STATE_MASKED = 2,
-	IRQCHIP_STATE_LINE_LEVEL = 3,
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
 };
 
-struct msi_msg;
-
-struct irq_chip {
-	struct device *parent_device;
-	const char *name;
-	unsigned int (*irq_startup)(struct irq_data *);
-	void (*irq_shutdown)(struct irq_data *);
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_ack)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-	void (*irq_mask_ack)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_eoi)(struct irq_data *);
-	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
-	int (*irq_retrigger)(struct irq_data *);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	void (*irq_bus_lock)(struct irq_data *);
-	void (*irq_bus_sync_unlock)(struct irq_data *);
-	void (*irq_cpu_online)(struct irq_data *);
-	void (*irq_cpu_offline)(struct irq_data *);
-	void (*irq_suspend)(struct irq_data *);
-	void (*irq_resume)(struct irq_data *);
-	void (*irq_pm_shutdown)(struct irq_data *);
-	void (*irq_calc_mask)(struct irq_data *);
-	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
-	int (*irq_request_resources)(struct irq_data *);
-	void (*irq_release_resources)(struct irq_data *);
-	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
-	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
-	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
-	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
-	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
-	void (*ipi_send_single)(struct irq_data *, unsigned int);
-	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
-	int (*irq_nmi_setup)(struct irq_data *);
-	void (*irq_nmi_teardown)(struct irq_data *);
-	long unsigned int flags;
-};
-
-typedef irqreturn_t (*irq_handler_t)(int, void *);
-
-struct irqaction {
-	irq_handler_t handler;
-	void *dev_id;
-	void *percpu_dev_id;
-	struct irqaction *next;
-	irq_handler_t thread_fn;
-	struct task_struct *thread;
-	struct irqaction *secondary;
-	unsigned int irq;
-	unsigned int flags;
-	long unsigned int thread_flags;
-	long unsigned int thread_mask;
-	const char *name;
-	struct proc_dir_entry *dir;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct irq_affinity_notify {
-	unsigned int irq;
-	struct kref kref;
-	struct work_struct work;
-	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
-	void (*release)(struct kref *);
-};
-
-struct irq_chip_regs {
-	long unsigned int enable;
-	long unsigned int disable;
-	long unsigned int mask;
-	long unsigned int ack;
-	long unsigned int eoi;
-	long unsigned int type;
-	long unsigned int polarity;
-};
-
-struct irq_chip_type {
-	struct irq_chip chip;
-	struct irq_chip_regs regs;
-	irq_flow_handler_t handler;
-	u32 type;
-	u32 mask_cache_priv;
-	u32 *mask_cache;
-};
-
-struct irq_chip_generic {
-	raw_spinlock_t lock;
-	void *reg_base;
-	u32 (*reg_readl)(void *);
-	void (*reg_writel)(u32, void *);
-	void (*suspend)(struct irq_chip_generic *);
-	void (*resume)(struct irq_chip_generic *);
-	unsigned int irq_base;
-	unsigned int irq_cnt;
-	u32 mask_cache;
-	u32 type_cache;
-	u32 polarity_cache;
-	u32 wake_enabled;
-	u32 wake_active;
-	unsigned int num_ct;
-	void *private;
-	long unsigned int installed;
-	long unsigned int unused;
-	struct irq_domain *domain;
-	struct list_head list;
-	struct irq_chip_type chip_types[0];
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
 };
 
 enum perf_sw_ids {
@@ -7453,7 +5672,30 @@
 	PERF_COUNT_SW_EMULATION_FAULTS = 8,
 	PERF_COUNT_SW_DUMMY = 9,
 	PERF_COUNT_SW_BPF_OUTPUT = 10,
-	PERF_COUNT_SW_MAX = 11,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+enum perf_branch_sample_type_shift {
+	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
+	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
+	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
+	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
+	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
+	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
+	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
+	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
+	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
+	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
+	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
+	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
+	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
+	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
+	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
+	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
+	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
+	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
 };
 
 union perf_mem_data_src {
@@ -7467,7 +5709,9 @@
 		__u64 mem_lvl_num: 4;
 		__u64 mem_remote: 1;
 		__u64 mem_snoopx: 2;
-		__u64 mem_rsvd: 24;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
 	};
 };
 
@@ -7483,37 +5727,37 @@
 	__u64 reserved: 40;
 };
 
-struct new_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-	char domainname[65];
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
 };
 
-struct uts_namespace {
-	struct kref kref;
-	struct new_utsname name;
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
+};
+
+struct time_namespace {
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
 };
 
 struct cgroup_namespace {
-	refcount_t count;
 	struct ns_common ns;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct css_set *root_cset;
 };
 
-struct nsset {
-	unsigned int flags;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	const struct cred *cred;
-};
+struct nsset;
 
 struct proc_ns_operations {
 	const char *name;
@@ -7526,12 +5770,27 @@
 	struct ns_common * (*get_parent)(struct ns_common *);
 };
 
-struct ucounts {
-	struct hlist_node node;
-	struct user_namespace *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[10];
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
+
+struct ftrace_regs {
+	struct pt_regs regs;
+};
+
+enum {
+	TSK_TRACE_FL_TRACE_BIT = 0,
+	TSK_TRACE_FL_GRAPH_BIT = 1,
 };
 
 struct perf_regs {
@@ -7539,73 +5798,88 @@
 	struct pt_regs *regs;
 };
 
+enum {
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
+};
+
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_RLIMIT_NPROC = 10,
+	UCOUNT_RLIMIT_MSGQUEUE = 11,
+	UCOUNT_RLIMIT_SIGPENDING = 12,
+	UCOUNT_RLIMIT_MEMLOCK = 13,
+	UCOUNT_COUNTS = 14,
+};
+
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
+};
+
 struct u64_stats_sync {};
 
-struct bpf_cgroup_storage_key {
-	__u64 cgroup_inode_id;
-	__u32 attach_type;
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = -1,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 22,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 23,
 };
 
-struct bpf_cgroup_storage;
+struct psi_group {};
 
-struct bpf_prog_array_item {
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_storage_buffer;
-
-struct bpf_cgroup_storage_map;
-
-struct bpf_cgroup_storage {
-	union {
-		struct bpf_storage_buffer *buf;
-		void *percpu_buf;
-	};
-	struct bpf_cgroup_storage_map *map;
-	struct bpf_cgroup_storage_key key;
-	struct list_head list_map;
-	struct list_head list_cg;
-	struct rb_node node;
-	struct callback_head rcu;
-};
-
-struct bpf_prog_array {
-	struct callback_head rcu;
-	struct bpf_prog_array_item items[0];
-};
-
-struct bpf_storage_buffer {
-	struct callback_head rcu;
-	char data[0];
-};
-
-struct psi_group_cpu {
-	seqcount_t seq;
-	unsigned int tasks[4];
-	u32 state_mask;
-	u32 times[6];
-	u64 state_start;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 times_prev[12];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	memory_cgrp_id = 3,
+	devices_cgrp_id = 4,
+	freezer_cgrp_id = 5,
+	perf_event_cgrp_id = 6,
+	CGROUP_SUBSYS_COUNT = 7,
 };
 
 struct cgroup_taskset;
@@ -7634,8 +5908,6 @@
 	bool early_init: 1;
 	bool implicit_on_dfl: 1;
 	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
 	int id;
 	const char *name;
 	const char *legacy_name;
@@ -7730,6 +6002,7 @@
 	unsigned int hrtimer_active;
 	struct perf_cgroup *cgrp;
 	struct list_head cgrp_cpuctx_entry;
+	struct list_head sched_cb_entry;
 	int sched_cb_usage;
 	int online;
 	int heap_size;
@@ -7760,7 +6033,7 @@
 	struct perf_raw_record *raw;
 	struct perf_branch_stack *br_stack;
 	u64 period;
-	u64 weight;
+	union perf_sample_weight weight;
 	u64 txn;
 	union perf_mem_data_src data_src;
 	u64 type;
@@ -7783,8 +6056,8 @@
 	u64 stack_user_size;
 	u64 phys_addr;
 	u64 cgroup;
-	long: 64;
-	long: 64;
+	u64 data_page_size;
+	u64 code_page_size;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -7804,6 +6077,8 @@
 struct perf_cgroup_info {
 	u64 time;
 	u64 timestamp;
+	u64 timeoffset;
+	int active;
 };
 
 struct trace_entry {
@@ -7832,6 +6107,8 @@
 	long unsigned int iter_flags;
 	void *temp;
 	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
 	struct trace_seq tmp_seq;
 	cpumask_var_t started;
 	bool snapshot;
@@ -7898,6 +6175,4019 @@
 	int (*raw_init)(struct trace_event_call *);
 };
 
+enum {
+	TRACE_EVENT_FL_FILTERED_BIT = 0,
+	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
+	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
+	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
+	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
+	TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+	TRACE_EVENT_FL_KPROBE_BIT = 6,
+	TRACE_EVENT_FL_UPROBE_BIT = 7,
+	TRACE_EVENT_FL_EPROBE_BIT = 8,
+	TRACE_EVENT_FL_CUSTOM_BIT = 9,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED_BIT = 0,
+	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
+	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
+	EVENT_FILE_FL_FILTERED_BIT = 3,
+	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
+	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
+	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
+	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
+	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
+	EVENT_FILE_FL_PID_FILTER_BIT = 9,
+	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
+};
+
+struct arch_vdso_data {};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
+};
+
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	union {
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
+	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
+};
+
+struct vdso_arch_data {
+	__u8 eye_catcher[16];
+	struct {
+		__u32 major;
+		__u32 minor;
+	} version;
+	__u32 platform;
+	__u32 processor;
+	__u64 processorCount;
+	__u64 physicalMemorySize;
+	__u64 tb_orig_stamp;
+	__u64 tb_ticks_per_sec;
+	__u64 tb_to_xs;
+	__u64 stamp_xsec;
+	__u64 tb_update_count;
+	__u32 tz_minuteswest;
+	__u32 tz_dsttime;
+	__u32 dcache_size;
+	__u32 dcache_line_size;
+	__u32 icache_size;
+	__u32 icache_line_size;
+	__u32 dcache_block_size;
+	__u32 icache_block_size;
+	__u32 dcache_log_block_size;
+	__u32 icache_log_block_size;
+	__u32 syscall_map[15];
+	__u32 compat_syscall_map[15];
+	struct vdso_data data[2];
+};
+
+enum vvar_pages {
+	VVAR_DATA_PAGE_OFFSET = 0,
+	VVAR_TIMENS_PAGE_OFFSET = 1,
+	VVAR_NR_PAGES = 2,
+};
+
+struct linux_binprm;
+
+typedef u8 uint8_t;
+
+typedef phys_addr_t resource_size_t;
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+enum {
+	MMU_FTRS_POSSIBLE = 2113994305,
+};
+
+typedef __be32 rtas_arg_t;
+
+struct rtas_args {
+	__be32 token;
+	__be32 nargs;
+	__be32 nret;
+	rtas_arg_t args[16];
+	rtas_arg_t *rets;
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	long unsigned int flags;
+	long unsigned int desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+};
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
+};
+
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_PCPTYPES = 3,
+	MIGRATE_HIGHATOMIC = 3,
+	MIGRATE_CMA = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
+};
+
+enum numa_stat_item {
+	NUMA_HIT = 0,
+	NUMA_MISS = 1,
+	NUMA_FOREIGN = 2,
+	NUMA_INTERLEAVE_HIT = 3,
+	NUMA_LOCAL = 4,
+	NUMA_OTHER = 5,
+	NR_VM_NUMA_EVENT_ITEMS = 6,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_FREE_CMA_PAGES = 9,
+	NR_VM_ZONE_STAT_ITEMS = 10,
+};
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SWAPCACHE = 39,
+	PGPROMOTE_SUCCESS = 40,
+	NR_VM_NODE_STAT_ITEMS = 41,
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	ZONELIST_NOFALLBACK = 1,
+	MAX_ZONELISTS = 2,
+};
+
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
+enum rseq_cs_flags_bit {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = -1,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
+enum rseq_event_mask_bits {
+	RSEQ_EVENT_PREEMPT_BIT = 0,
+	RSEQ_EVENT_SIGNAL_BIT = 1,
+	RSEQ_EVENT_MIGRATE_BIT = 2,
+};
+
+struct iommu_pool {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int hint;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iommu_table_ops;
+
+struct iommu_table {
+	long unsigned int it_busno;
+	long unsigned int it_size;
+	long unsigned int it_indirect_levels;
+	long unsigned int it_level_size;
+	long unsigned int it_allocated_size;
+	long unsigned int it_offset;
+	long unsigned int it_base;
+	long unsigned int it_index;
+	long unsigned int it_type;
+	long unsigned int it_blocksize;
+	long unsigned int poolsize;
+	long unsigned int nr_pools;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct iommu_pool large_pool;
+	struct iommu_pool pools[4];
+	long unsigned int *it_map;
+	long unsigned int it_page_shift;
+	struct list_head it_group_list;
+	__be64 *it_userspace;
+	struct iommu_table_ops *it_ops;
+	struct kref it_kref;
+	int it_nid;
+	long unsigned int it_reserved_start;
+	long unsigned int it_reserved_end;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iommu_table_group;
+
+struct pci_dn {
+	int flags;
+	int busno;
+	int devfn;
+	int vendor_id;
+	int device_id;
+	int class_code;
+	struct pci_dn *parent;
+	struct pci_controller *phb;
+	struct iommu_table_group *table_group;
+	int pci_ext_config_space;
+	struct eeh_dev *edev;
+	unsigned int pe_number;
+	int mps;
+	struct list_head child_list;
+	struct list_head list;
+	struct resource holes[6];
+};
+
+typedef u32 phandle;
+
+struct property;
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	long unsigned int _flags;
+	void *data;
+};
+
+typedef int pci_power_t;
+
+typedef unsigned int pci_channel_state_t;
+
+typedef short unsigned int pci_dev_flags_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct proc_dir_entry;
+
+struct pci_slot;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int subsystem_vendor;
+	short unsigned int subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	long unsigned int *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	unsigned int imm_ready: 1;
+	u8 pm_cap;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	struct pcie_link_state *link_state;
+	unsigned int ltr_path: 1;
+	u16 l1ss;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[11];
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	int rom_attr_enabled;
+	struct bin_attribute *res_attr[11];
+	struct bin_attribute *res_attr_wc[11];
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	long unsigned int priv_flags;
+	u8 reset_methods[7];
+};
+
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
+struct iovec;
+
+struct kvec;
+
+struct bio_vec;
+
+struct iov_iter {
+	u8 iter_type;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
+	size_t count;
+	union {
+		const struct iovec *iov;
+		const struct kvec *kvec;
+		const struct bio_vec *bvec;
+		struct xarray *xarray;
+		struct pipe_inode_info *pipe;
+		void *ubuf;
+	};
+	union {
+		long unsigned int nr_segs;
+		struct {
+			unsigned int head;
+			unsigned int start_head;
+		};
+		loff_t xarray_start;
+	};
+};
+
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
+enum compound_dtor_id {
+	NULL_COMPOUND_DTOR = 0,
+	COMPOUND_PAGE_DTOR = 1,
+	HUGETLB_PAGE_DTOR = 2,
+	TRANSHUGE_PAGE_DTOR = 3,
+	NR_COMPOUND_DTORS = 4,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_NORMAL = 4,
+	PGALLOC_MOVABLE = 5,
+	ALLOCSTALL_NORMAL = 6,
+	ALLOCSTALL_MOVABLE = 7,
+	PGSCAN_SKIP_NORMAL = 8,
+	PGSCAN_SKIP_MOVABLE = 9,
+	PGFREE = 10,
+	PGACTIVATE = 11,
+	PGDEACTIVATE = 12,
+	PGLAZYFREE = 13,
+	PGFAULT = 14,
+	PGMAJFAULT = 15,
+	PGLAZYFREED = 16,
+	PGREFILL = 17,
+	PGREUSE = 18,
+	PGSTEAL_KSWAPD = 19,
+	PGSTEAL_DIRECT = 20,
+	PGDEMOTE_KSWAPD = 21,
+	PGDEMOTE_DIRECT = 22,
+	PGSCAN_KSWAPD = 23,
+	PGSCAN_DIRECT = 24,
+	PGSCAN_DIRECT_THROTTLE = 25,
+	PGSCAN_ANON = 26,
+	PGSCAN_FILE = 27,
+	PGSTEAL_ANON = 28,
+	PGSTEAL_FILE = 29,
+	PGSCAN_ZONE_RECLAIM_FAILED = 30,
+	PGINODESTEAL = 31,
+	SLABS_SCANNED = 32,
+	KSWAPD_INODESTEAL = 33,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 34,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 35,
+	PAGEOUTRUN = 36,
+	PGROTATED = 37,
+	DROP_PAGECACHE = 38,
+	DROP_SLAB = 39,
+	OOM_KILL = 40,
+	NUMA_PTE_UPDATES = 41,
+	NUMA_HUGE_PTE_UPDATES = 42,
+	NUMA_HINT_FAULTS = 43,
+	NUMA_HINT_FAULTS_LOCAL = 44,
+	NUMA_PAGE_MIGRATE = 45,
+	PGMIGRATE_SUCCESS = 46,
+	PGMIGRATE_FAIL = 47,
+	THP_MIGRATION_SUCCESS = 48,
+	THP_MIGRATION_FAIL = 49,
+	THP_MIGRATION_SPLIT = 50,
+	COMPACTMIGRATE_SCANNED = 51,
+	COMPACTFREE_SCANNED = 52,
+	COMPACTISOLATED = 53,
+	COMPACTSTALL = 54,
+	COMPACTFAIL = 55,
+	COMPACTSUCCESS = 56,
+	KCOMPACTD_WAKE = 57,
+	KCOMPACTD_MIGRATE_SCANNED = 58,
+	KCOMPACTD_FREE_SCANNED = 59,
+	HTLB_BUDDY_PGALLOC = 60,
+	HTLB_BUDDY_PGALLOC_FAIL = 61,
+	CMA_ALLOC_SUCCESS = 62,
+	CMA_ALLOC_FAIL = 63,
+	UNEVICTABLE_PGCULLED = 64,
+	UNEVICTABLE_PGSCANNED = 65,
+	UNEVICTABLE_PGRESCUED = 66,
+	UNEVICTABLE_PGMLOCKED = 67,
+	UNEVICTABLE_PGMUNLOCKED = 68,
+	UNEVICTABLE_PGCLEARED = 69,
+	UNEVICTABLE_PGSTRANDED = 70,
+	THP_FAULT_ALLOC = 71,
+	THP_FAULT_FALLBACK = 72,
+	THP_FAULT_FALLBACK_CHARGE = 73,
+	THP_COLLAPSE_ALLOC = 74,
+	THP_COLLAPSE_ALLOC_FAILED = 75,
+	THP_FILE_ALLOC = 76,
+	THP_FILE_FALLBACK = 77,
+	THP_FILE_FALLBACK_CHARGE = 78,
+	THP_FILE_MAPPED = 79,
+	THP_SPLIT_PAGE = 80,
+	THP_SPLIT_PAGE_FAILED = 81,
+	THP_DEFERRED_SPLIT_PAGE = 82,
+	THP_SPLIT_PMD = 83,
+	THP_SCAN_EXCEED_NONE_PTE = 84,
+	THP_SCAN_EXCEED_SWAP_PTE = 85,
+	THP_SCAN_EXCEED_SHARED_PTE = 86,
+	THP_ZERO_PAGE_ALLOC = 87,
+	THP_ZERO_PAGE_ALLOC_FAILED = 88,
+	THP_SWPOUT = 89,
+	THP_SWPOUT_FALLBACK = 90,
+	BALLOON_INFLATE = 91,
+	BALLOON_DEFLATE = 92,
+	BALLOON_MIGRATE = 93,
+	SWAP_RA = 94,
+	SWAP_RA_HIT = 95,
+	KSM_SWPIN_COPY = 96,
+	COW_KSM = 97,
+	NR_VM_EVENT_ITEMS = 98,
+};
+
+struct pci_controller_ops {
+	void (*dma_dev_setup)(struct pci_dev *);
+	void (*dma_bus_setup)(struct pci_bus *);
+	bool (*iommu_bypass_supported)(struct pci_dev *, u64);
+	int (*probe_mode)(struct pci_bus *);
+	bool (*enable_device_hook)(struct pci_dev *);
+	void (*disable_device)(struct pci_dev *);
+	void (*release_device)(struct pci_dev *);
+	resource_size_t (*window_alignment)(struct pci_bus *, long unsigned int);
+	void (*setup_bridge)(struct pci_bus *, long unsigned int);
+	void (*reset_secondary_bus)(struct pci_dev *);
+	int (*setup_msi_irqs)(struct pci_dev *, int, int);
+	void (*teardown_msi_irqs)(struct pci_dev *);
+	void (*shutdown)(struct pci_controller *);
+};
+
+struct pci_ops;
+
+struct pci_controller {
+	struct pci_bus *bus;
+	char is_dynamic;
+	int node;
+	struct device_node *dn;
+	struct list_head list_node;
+	struct device *parent;
+	int first_busno;
+	int last_busno;
+	int self_busno;
+	struct resource busn;
+	void *io_base_virt;
+	void *io_base_alloc;
+	resource_size_t io_base_phys;
+	resource_size_t pci_io_size;
+	resource_size_t isa_mem_phys;
+	resource_size_t isa_mem_size;
+	struct pci_controller_ops controller_ops;
+	struct pci_ops *ops;
+	unsigned int *cfg_addr;
+	void *cfg_data;
+	u32 indirect_type;
+	struct resource io_resource;
+	struct resource mem_resources[3];
+	resource_size_t mem_offset[3];
+	int global_number;
+	resource_size_t dma_window_base_cur;
+	resource_size_t dma_window_size;
+	long unsigned int buid;
+	struct pci_dn *pci_data;
+	void *private_data;
+	struct irq_domain *dev_domain;
+	struct irq_domain *msi_domain;
+	struct fwnode_handle *fwnode;
+};
+
+typedef short unsigned int pci_bus_flags_t;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	char name[48];
+	short unsigned int bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+};
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_BRIDGE_RESOURCES = 7,
+	PCI_BRIDGE_RESOURCE_END = 10,
+	PCI_NUM_RESOURCES = 11,
+	DEVICE_COUNT_RESOURCE = 11,
+};
+
+typedef unsigned int pcie_reset_state_t;
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+};
+
+typedef unsigned int pci_ers_result_t;
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+};
+
+struct scatterlist {
+	long unsigned int page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+	unsigned int dma_length;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+struct iommu_table_group_ops;
+
+struct iommu_table_group {
+	__u32 tce32_start;
+	__u32 tce32_size;
+	__u64 pgsizes;
+	__u32 max_dynamic_windows_supported;
+	__u32 max_levels;
+	struct iommu_group *group;
+	struct iommu_table *tables[2];
+	struct iommu_table_group_ops *ops;
+};
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+struct iovec {
+	void *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	long unsigned int _flags;
+	struct bin_attribute attr;
+};
+
+typedef __be32 fdt32_t;
+
+struct fdt_header {
+	fdt32_t magic;
+	fdt32_t totalsize;
+	fdt32_t off_dt_struct;
+	fdt32_t off_dt_strings;
+	fdt32_t off_mem_rsvmap;
+	fdt32_t version;
+	fdt32_t last_comp_version;
+	fdt32_t boot_cpuid_phys;
+	fdt32_t size_dt_strings;
+	fdt32_t size_dt_struct;
+};
+
+struct iommu_table_ops {
+	int (*set)(struct iommu_table *, long int, long int, long unsigned int, enum dma_data_direction, long unsigned int);
+	int (*xchg_no_kill)(struct iommu_table *, long int, long unsigned int *, enum dma_data_direction *);
+	void (*tce_kill)(struct iommu_table *, long unsigned int, long unsigned int);
+	__be64 * (*useraddrptr)(struct iommu_table *, long int, bool);
+	void (*clear)(struct iommu_table *, long int, long int);
+	long unsigned int (*get)(struct iommu_table *, long int);
+	void (*flush)(struct iommu_table *);
+	void (*free)(struct iommu_table *);
+};
+
+struct iommu_table_group_ops {
+	long unsigned int (*get_table_size)(__u32, __u64, __u32);
+	long int (*create_table)(struct iommu_table_group *, int, __u32, __u64, __u32, struct iommu_table **);
+	long int (*set_window)(struct iommu_table_group *, int, struct iommu_table *);
+	long int (*unset_window)(struct iommu_table_group *, int);
+	void (*take_ownership)(struct iommu_table_group *);
+	void (*release_ownership)(struct iommu_table_group *);
+};
+
+enum {
+	OPAL_P7IOC_NUM_PEST_REGS = 128,
+	OPAL_PHB3_NUM_PEST_REGS = 256,
+	OPAL_PHB4_NUM_PEST_REGS = 512,
+};
+
+struct drmem_lmb {
+	u64 base_addr;
+	u32 drc_index;
+	u32 aa_index;
+	u32 flags;
+};
+
+struct drmem_lmb_info {
+	struct drmem_lmb *lmbs;
+	int n_lmbs;
+	u64 lmb_size;
+};
+
+struct ibm_pa_feature {
+	long unsigned int cpu_features;
+	long unsigned int mmu_features;
+	unsigned int cpu_user_ftrs;
+	unsigned int cpu_user_ftrs2;
+	unsigned char pabyte;
+	unsigned char pabit;
+	unsigned char invert;
+};
+
+struct feature_property {
+	const char *name;
+	u32 min_value;
+	long unsigned int cpu_feature;
+	long unsigned int cpu_user_ftr;
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+	int nid;
+};
+
+struct memblock_type {
+	long unsigned int cnt;
+	long unsigned int max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+typedef char *va_list;
+
+typedef u16 uint16_t;
+
+enum {
+	EI_ETYPE_NONE = 0,
+	EI_ETYPE_NULL = 1,
+	EI_ETYPE_ERRNO = 2,
+	EI_ETYPE_ERRNO_NULL = 3,
+	EI_ETYPE_TRUE = 4,
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_CUSTOM = 512,
+};
+
+struct syscall_metadata {
+	const char *name;
+	int syscall_nr;
+	int nb_args;
+	const char **types;
+	const char **args;
+	struct list_head enter_fields;
+	struct trace_event_call *enter_event;
+	struct trace_event_call *exit_event;
+};
+
+struct rtas_t {
+	long unsigned int entry;
+	long unsigned int base;
+	long unsigned int size;
+	arch_spinlock_t lock;
+	struct rtas_args args;
+	struct device_node *dev;
+};
+
+struct rtas_error_log {
+	u8 byte0;
+	u8 byte1;
+	u8 byte2;
+	u8 byte3;
+	__be32 extended_log_length;
+	unsigned char buffer[1];
+};
+
+struct rtas_ext_event_log_v6 {
+	u8 byte0;
+	u8 byte1;
+	u8 byte2;
+	u8 byte3;
+	u8 reserved[8];
+	__be32 company_id;
+	u8 vendor_log[1];
+};
+
+struct pseries_errorlog {
+	__be16 id;
+	__be16 length;
+	u8 version;
+	u8 subtype;
+	__be16 creator_component;
+	u8 data[0];
+};
+
+struct pci_host_bridge;
+
+struct rtc_time;
+
+struct kimage;
+
+struct machdep_calls {
+	char *name;
+	void (*iommu_restore)();
+	long unsigned int (*memory_block_size)();
+	void (*dma_set_mask)(struct device *, u64);
+	int (*probe)();
+	void (*setup_arch)();
+	void (*show_cpuinfo)(struct seq_file *);
+	long unsigned int (*get_proc_freq)(unsigned int);
+	void (*init_IRQ)();
+	unsigned int (*get_irq)();
+	void (*pcibios_fixup)();
+	void (*pci_irq_fixup)(struct pci_dev *);
+	int (*pcibios_root_bridge_prepare)(struct pci_host_bridge *);
+	void (*discover_phbs)();
+	int (*pci_setup_phb)(struct pci_controller *);
+	void (*restart)(char *);
+	void (*halt)();
+	void (*panic)(char *);
+	long int (*time_init)();
+	int (*set_rtc_time)(struct rtc_time *);
+	void (*get_rtc_time)(struct rtc_time *);
+	time64_t (*get_boot_time)();
+	void (*calibrate_decr)();
+	void (*progress)(char *, short unsigned int);
+	void (*log_error)(char *, unsigned int, int);
+	unsigned char (*nvram_read_val)(int);
+	void (*nvram_write_val)(int, unsigned char);
+	ssize_t (*nvram_write)(char *, size_t, loff_t *);
+	ssize_t (*nvram_read)(char *, size_t, loff_t *);
+	ssize_t (*nvram_size)();
+	void (*nvram_sync)();
+	int (*system_reset_exception)(struct pt_regs *);
+	int (*machine_check_exception)(struct pt_regs *);
+	int (*handle_hmi_exception)(struct pt_regs *);
+	int (*hmi_exception_early)(struct pt_regs *);
+	long int (*machine_check_early)(struct pt_regs *);
+	bool (*mce_check_early_recovery)(struct pt_regs *);
+	void (*machine_check_log_err)();
+	long int (*feature_call)(unsigned int, ...);
+	int (*pci_get_legacy_ide_irq)(struct pci_dev *, int);
+	pgprot_t (*phys_mem_access_prot)(struct file *, long unsigned int, long unsigned int, pgprot_t);
+	void (*power_save)();
+	void (*enable_pmcs)();
+	int (*set_dabr)(long unsigned int, long unsigned int);
+	int (*set_dawr)(int, long unsigned int, long unsigned int);
+	int (*pci_exclude_device)(struct pci_controller *, unsigned char, unsigned char);
+	void (*pcibios_fixup_resources)(struct pci_dev *);
+	void (*pcibios_fixup_bus)(struct pci_bus *);
+	void (*pcibios_fixup_phb)(struct pci_controller *);
+	void (*pcibios_bus_add_device)(struct pci_dev *);
+	resource_size_t (*pcibios_default_alignment)();
+	void (*machine_shutdown)();
+	void (*kexec_cpu_down)(int, int);
+	void (*machine_kexec)(struct kimage *);
+	void (*suspend_disable_irqs)();
+	void (*suspend_enable_irqs)();
+	ssize_t (*cpu_probe)(const char *, size_t);
+	ssize_t (*cpu_release)(const char *, size_t);
+	int (*get_random_seed)(long unsigned int *);
+};
+
+struct rtas_filter {
+	const char *name;
+	int token;
+	int buf_idx1;
+	int size_idx1;
+	int buf_idx2;
+	int size_idx2;
+	int fixed_size;
+};
+
+struct indicator_elem {
+	__be32 token;
+	__be32 maxindex;
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+struct free_area {
+	struct list_head free_list[6];
+	long unsigned int nr_free;
+};
+
+struct zone_padding {
+	char x[0];
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	atomic_long_t nonresident_age;
+	long unsigned int refaults[2];
+	long unsigned int flags;
+	struct pglist_data *pgdat;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	long unsigned int _watermark[4];
+	long unsigned int watermark_boost;
+	long unsigned int nr_reserved_highatomic;
+	long int lowmem_reserve[2];
+	int node;
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages *per_cpu_pageset;
+	struct per_cpu_zonestat *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	long unsigned int zone_start_pfn;
+	atomic_long_t managed_pages;
+	long unsigned int spanned_pages;
+	long unsigned int present_pages;
+	long unsigned int present_early_pages;
+	long unsigned int cma_pages;
+	const char *name;
+	long unsigned int nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int initialized;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct free_area free_area[9];
+	long unsigned int flags;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad2_;
+	long unsigned int percpu_drift_mark;
+	long unsigned int compact_cached_free_pfn;
+	long unsigned int compact_cached_migrate_pfn[2];
+	long unsigned int compact_init_migrate_pfn;
+	long unsigned int compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad3_;
+	atomic_long_t vm_stat[10];
+	atomic_long_t vm_numa_event[6];
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[513];
+};
+
+enum zone_type {
+	ZONE_NORMAL = 0,
+	ZONE_MOVABLE = 1,
+	__MAX_NR_ZONES = 2,
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	long unsigned int split_queue_len;
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[2];
+	struct zonelist node_zonelists[2];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	long unsigned int node_start_pfn;
+	long unsigned int node_present_pages;
+	long unsigned int node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	long unsigned int nr_reclaim_start;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	long unsigned int totalreserve_pages;
+	long unsigned int min_unmapped_pages;
+	long unsigned int min_slab_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad2_;
+	struct per_cpu_nodestat *per_cpu_nodestats;
+	atomic_long_t vm_stat[41];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short int free_factor;
+	short int expire;
+	struct list_head lists[13];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[10];
+	s8 stat_threshold;
+	long unsigned int vm_numa_event[6];
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[41];
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long unsigned int min;
+	long unsigned int low;
+	long unsigned int high;
+	long unsigned int max;
+	long unsigned int emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	long unsigned int elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	long unsigned int watermark;
+	long unsigned int failcnt;
+	struct page_counter *parent;
+};
+
+struct vmpressure {
+	long unsigned int scanned;
+	long unsigned int reclaimed;
+	long unsigned int tree_scanned;
+	long unsigned int tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct memcg_padding {
+	char x[0];
+};
+
+struct memcg_vmstats {
+	long int state[48];
+	long unsigned int events[98];
+	long int state_pending[48];
+	long unsigned int events_pending[98];
+};
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	long unsigned int soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	long unsigned int move_charge_at_immigrate;
+	spinlock_t move_lock;
+	long unsigned int move_lock_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad1_;
+	struct memcg_vmstats vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	long unsigned int socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu *vmstats_percpu;
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct mem_cgroup_per_node *nodeinfo[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct reclaim_state {
+	long unsigned int reclaimed_slab;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	long unsigned int state;
+	long unsigned int last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	long unsigned int bw_time_stamp;
+	long unsigned int dirtied_stamp;
+	long unsigned int written_stamp;
+	long unsigned int write_bandwidth;
+	long unsigned int avg_write_bandwidth;
+	long unsigned int dirty_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	long unsigned int dirty_sleep;
+	struct list_head bdi_node;
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	long unsigned int ra_pages;
+	long unsigned int io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+};
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	unsigned int punt_to_cgroup: 1;
+	struct swap_iocb **swap_plug;
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	long unsigned int _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int data: 24;
+	unsigned int flags: 8;
+};
+
+struct swap_cluster_list {
+	struct swap_cluster_info head;
+	struct swap_cluster_info tail;
+};
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	long unsigned int flags;
+	short int prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct swap_cluster_list free_clusters;
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int *cluster_next_cpu;
+	struct percpu_cluster *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct swap_cluster_list discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct disk_stats;
+
+struct gendisk;
+
+struct request_queue;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct disk_stats *bd_stats;
+	long unsigned int bd_stamp;
+	bool bd_read_only;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	struct inode *bd_inode;
+	struct super_block *bd_super;
+	void *bd_claiming;
+	struct device bd_device;
+	void *bd_holder;
+	int bd_holders;
+	bool bd_write_holder;
+	struct kobject *bd_holder_dir;
+	u8 bd_partno;
+	spinlock_t bd_size_lock;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	int bd_fsfreeze_count;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_mem {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	long unsigned int nslabs;
+	long unsigned int used;
+	struct dentry *debugfs;
+	bool late_alloc;
+	bool force_bounce;
+	bool for_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+};
+
+enum wb_stat_item {
+	WB_RECLAIMABLE = 0,
+	WB_WRITEBACK = 1,
+	WB_DIRTIED = 2,
+	WB_WRITTEN = 3,
+	NR_WB_STAT_ITEMS = 4,
+};
+
+typedef __u32 blk_opf_t;
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 41,
+	MEMCG_SOCK = 42,
+	MEMCG_PERCPU_B = 43,
+	MEMCG_VMALLOC = 44,
+	MEMCG_KMEM = 45,
+	MEMCG_ZSWAP_B = 46,
+	MEMCG_ZSWAPPED = 47,
+	MEMCG_NR_STAT = 48,
+};
+
+enum memcg_memory_event {
+	MEMCG_LOW = 0,
+	MEMCG_HIGH = 1,
+	MEMCG_MAX = 2,
+	MEMCG_OOM = 3,
+	MEMCG_OOM_KILL = 4,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+struct memcg_vmstats_percpu {
+	long int state[48];
+	long unsigned int events[98];
+	long int state_prev[48];
+	long unsigned int events_prev[98];
+	long unsigned int nr_page_events;
+	long unsigned int targets[2];
+};
+
+struct mem_cgroup_reclaim_iter {
+	struct mem_cgroup *position;
+	unsigned int generation;
+};
+
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	long unsigned int *map;
+};
+
+struct lruvec_stats_percpu {
+	long int state[41];
+	long int state_prev[41];
+};
+
+struct lruvec_stats {
+	long int state[41];
+	long int state_pending[41];
+};
+
+struct mem_cgroup_per_node {
+	struct lruvec lruvec;
+	struct lruvec_stats_percpu *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	long unsigned int lru_zone_size[10];
+	struct mem_cgroup_reclaim_iter iter;
+	struct shrinker_info *shrinker_info;
+	struct rb_node tree_node;
+	long unsigned int usage_in_excess;
+	bool on_tree;
+	struct mem_cgroup *memcg;
+};
+
+struct eventfd_ctx;
+
+struct mem_cgroup_threshold {
+	struct eventfd_ctx *eventfd;
+	long unsigned int threshold;
+};
+
+struct mem_cgroup_threshold_ary {
+	int current_threshold;
+	unsigned int size;
+	struct mem_cgroup_threshold entries[0];
+};
+
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+struct percpu_cluster {
+	struct swap_cluster_info index;
+	unsigned int next;
+};
+
+typedef long unsigned int uintptr_t;
+
+typedef struct {
+	pte_t pte;
+	long unsigned int hidx;
+} real_pte_t;
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct mmu_psize_def {
+	unsigned int shift;
+	int penc[16];
+	unsigned int tlbiel;
+	long unsigned int avpnm;
+	long unsigned int h_rpt_pgsize;
+	union {
+		long unsigned int sllp;
+		long unsigned int ap;
+	};
+};
+
+struct ppc64_tlb_batch {
+	int active;
+	long unsigned int index;
+	struct mm_struct *mm;
+	real_pte_t pte[192];
+	long unsigned int vpn[192];
+	unsigned int psize;
+	int ssize;
+};
+
+struct mmu_table_batch {
+	struct callback_head rcu;
+	unsigned int nr;
+	void *tables[0];
+};
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct page *pages[0];
+};
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	struct mmu_table_batch *batch;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+	unsigned int page_size;
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+typedef u8 blk_status_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	short unsigned int bi_flags;
+	short unsigned int bi_ioprio;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	union {};
+	short unsigned int bi_vcnt;
+	short unsigned int bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	ND_REGION_CXL = 4,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+typedef s64 int64_t;
+
+typedef long unsigned int irq_hw_number_t;
+
+struct kvm;
+
+struct kvmppc_vcore {
+	int n_runnable;
+	int num_threads;
+	int entry_exit_map;
+	int napping_threads;
+	int first_vcpuid;
+	u16 pcpu;
+	u16 last_cpu;
+	u8 vcore_state;
+	u8 in_guest;
+	struct kvm_vcpu *runnable_threads[8];
+	struct list_head preempt_list;
+	spinlock_t lock;
+	struct rcuwait wait;
+	spinlock_t stoltb_lock;
+	u64 stolen_tb;
+	u64 preempt_tb;
+	struct kvm_vcpu *runner;
+	struct kvm *kvm;
+	u64 tb_offset;
+	u64 tb_offset_applied;
+	ulong lpcr;
+	u32 arch_compat;
+	ulong pcr;
+	ulong dpdes;
+	ulong vtb;
+	ulong conferring_threads;
+	unsigned int halt_poll_ns;
+	atomic_t online_count;
+};
+
+struct preempt_ops;
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
+typedef u64 gpa_t;
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
+	void *data;
+	unsigned int len;
+};
+
+struct kvmppc_slb {
+	u64 esid;
+	u64 vsid;
+	u64 orige;
+	u64 origv;
+	bool valid: 1;
+	bool Ks: 1;
+	bool Kp: 1;
+	bool nx: 1;
+	bool large: 1;
+	bool tb: 1;
+	bool class: 1;
+	u8 base_page_size;
+};
+
+typedef long unsigned int gva_t;
+
+struct kvmppc_pte;
+
+struct kvmppc_mmu {
+	void (*slbmte)(struct kvm_vcpu *, u64, u64);
+	u64 (*slbmfee)(struct kvm_vcpu *, u64);
+	u64 (*slbmfev)(struct kvm_vcpu *, u64);
+	int (*slbfee)(struct kvm_vcpu *, gva_t, ulong *);
+	void (*slbie)(struct kvm_vcpu *, u64);
+	void (*slbia)(struct kvm_vcpu *);
+	void (*mtsrin)(struct kvm_vcpu *, u32, ulong);
+	u32 (*mfsrin)(struct kvm_vcpu *, u32);
+	int (*xlate)(struct kvm_vcpu *, gva_t, struct kvmppc_pte *, bool, bool);
+	void (*tlbie)(struct kvm_vcpu *, ulong, bool);
+	int (*esid_to_vsid)(struct kvm_vcpu *, ulong, u64 *);
+	u64 (*ea_to_vp)(struct kvm_vcpu *, gva_t, bool);
+	bool (*is_dcbz32)(struct kvm_vcpu *);
+};
+
+struct openpic;
+
+union xive_tma_w01 {
+	struct {
+		u8 nsr;
+		u8 cppr;
+		u8 ipb;
+		u8 lsmfb;
+		u8 ack;
+		u8 inc;
+		u8 age;
+		u8 pipr;
+	};
+	__be64 w01;
+};
+
+struct kvm_vcpu_arch_shared {
+	__u64 scratch1;
+	__u64 scratch2;
+	__u64 scratch3;
+	__u64 critical;
+	__u64 sprg0;
+	__u64 sprg1;
+	__u64 sprg2;
+	__u64 sprg3;
+	__u64 srr0;
+	__u64 srr1;
+	__u64 dar;
+	__u64 msr;
+	__u32 dsisr;
+	__u32 int_pending;
+	__u32 sr[16];
+	__u32 mas0;
+	__u32 mas1;
+	__u64 mas7_3;
+	__u64 mas2;
+	__u32 mas4;
+	__u32 mas6;
+	__u32 esr;
+	__u32 pir;
+	__u64 sprg4;
+	__u64 sprg5;
+	__u64 sprg6;
+	__u64 sprg7;
+};
+
+struct mmio_hpte_cache_entry {
+	long unsigned int hpte_v;
+	long unsigned int hpte_r;
+	long unsigned int rpte;
+	long unsigned int pte_index;
+	long unsigned int eaddr;
+	long unsigned int slb_v;
+	long int mmio_update;
+	unsigned int slb_base_pshift;
+};
+
+struct mmio_hpte_cache {
+	struct mmio_hpte_cache_entry entry[4];
+	unsigned int index;
+};
+
+struct kvmppc_vpa {
+	long unsigned int gpa;
+	void *pinned_addr;
+	void *pinned_end;
+	long unsigned int next_gpa;
+	long unsigned int len;
+	u8 update_pending;
+	bool dirty;
+};
+
+struct kvmppc_vcpu_book3s;
+
+struct kvmppc_icp;
+
+struct kvmppc_xive_vcpu;
+
+struct kvm_nested_guest;
+
+struct kvm_vcpu_arch {
+	ulong host_stack;
+	u32 host_pid;
+	struct kvmppc_slb slb[64];
+	int slb_max;
+	int slb_nr;
+	struct kvmppc_mmu mmu;
+	struct kvmppc_vcpu_book3s *book3s;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct pt_regs regs;
+	struct thread_fp_state fp;
+	struct thread_vr_state vr;
+	u32 qpr[32];
+	ulong tar;
+	ulong hflags;
+	ulong guest_owned_ext;
+	ulong purr;
+	ulong spurr;
+	ulong ic;
+	ulong dscr;
+	ulong amr;
+	ulong uamor;
+	ulong iamr;
+	u32 ctrl;
+	u32 dabrx;
+	ulong dabr;
+	ulong dawr0;
+	ulong dawrx0;
+	ulong dawr1;
+	ulong dawrx1;
+	ulong ciabr;
+	ulong cfar;
+	ulong ppr;
+	u32 pspb;
+	u8 load_ebb;
+	u8 load_tm;
+	ulong fscr;
+	ulong shadow_fscr;
+	ulong ebbhr;
+	ulong ebbrr;
+	ulong bescr;
+	ulong csigr;
+	ulong tacr;
+	ulong tcscr;
+	ulong acop;
+	ulong wort;
+	ulong tid;
+	ulong psscr;
+	ulong hfscr;
+	ulong shadow_srr1;
+	u32 vrsave;
+	u32 mmucr;
+	ulong shadow_msr;
+	ulong csrr0;
+	ulong csrr1;
+	ulong dsrr0;
+	ulong dsrr1;
+	ulong mcsrr0;
+	ulong mcsrr1;
+	ulong mcsr;
+	ulong dec;
+	u64 entry_tb;
+	u64 entry_vtb;
+	u64 entry_ic;
+	u32 tcr;
+	ulong tsr;
+	u32 ivor[64];
+	ulong ivpr;
+	u32 pvr;
+	u32 shadow_pid;
+	u32 shadow_pid1;
+	u32 pid;
+	u32 swap_pid;
+	u32 ccr0;
+	u32 ccr1;
+	u32 dbsr;
+	u64 mmcr[4];
+	u64 mmcra;
+	u64 mmcrs;
+	u32 pmc[8];
+	u32 spmc[2];
+	u64 siar;
+	u64 sdar;
+	u64 sier[3];
+	u64 tfhar;
+	u64 texasr;
+	u64 tfiar;
+	u64 orig_texasr;
+	u32 cr_tm;
+	u64 xer_tm;
+	u64 lr_tm;
+	u64 ctr_tm;
+	u64 amr_tm;
+	u64 ppr_tm;
+	u64 dscr_tm;
+	u64 tar_tm;
+	ulong gpr_tm[32];
+	struct thread_fp_state fp_tm;
+	struct thread_vr_state vr_tm;
+	u32 vrsave_tm;
+	ulong fault_dar;
+	u32 fault_dsisr;
+	long unsigned int intr_msr;
+	ulong fault_gpa;
+	gpa_t paddr_accessed;
+	gva_t vaddr_accessed;
+	pgd_t *pgdir;
+	u16 io_gpr;
+	u8 mmio_host_swabbed;
+	u8 mmio_sign_extend;
+	u8 mmio_sp64_extend;
+	u8 mmio_vsx_copy_nums;
+	u8 mmio_vsx_offset;
+	u8 mmio_vmx_copy_nums;
+	u8 mmio_vmx_offset;
+	u8 mmio_copy_type;
+	u8 osi_needed;
+	u8 osi_enabled;
+	u8 papr_enabled;
+	u8 watchdog_enabled;
+	u8 sane;
+	u8 cpu_type;
+	u8 hcall_needed;
+	u8 epr_flags;
+	u8 epr_needed;
+	u8 external_oneshot;
+	u32 cpr0_cfgaddr;
+	struct hrtimer dec_timer;
+	u64 dec_jiffies;
+	u64 dec_expires;
+	long unsigned int pending_exceptions;
+	u8 ceded;
+	u8 prodded;
+	u8 doorbell_request;
+	u8 irq_pending;
+	u32 last_inst;
+	struct rcuwait wait;
+	struct rcuwait *waitp;
+	struct kvmppc_vcore *vcore;
+	int ret;
+	int trap;
+	int state;
+	int ptid;
+	int thread_cpu;
+	int prev_cpu;
+	bool timer_running;
+	wait_queue_head_t cpu_run;
+	struct machine_check_event mce_evt;
+	struct kvm_vcpu_arch_shared *shared;
+	long unsigned int magic_page_pa;
+	long unsigned int magic_page_ea;
+	bool disable_kernel_nx;
+	int irq_type;
+	int irq_cpu_id;
+	struct openpic *mpic;
+	struct kvmppc_icp *icp;
+	struct kvmppc_xive_vcpu *xive_vcpu;
+	__be32 xive_cam_word;
+	u8 xive_pushed;
+	u8 xive_esc_on;
+	union xive_tma_w01 xive_saved_state;
+	u64 xive_esc_raddr;
+	u64 xive_esc_vaddr;
+	struct kvm_vcpu_arch_shared shregs;
+	struct mmio_hpte_cache mmio_cache;
+	long unsigned int pgfault_addr;
+	long int pgfault_index;
+	long unsigned int pgfault_hpte[2];
+	struct mmio_hpte_cache_entry *pgfault_cache;
+	struct task_struct *run_task;
+	spinlock_t vpa_update_lock;
+	struct kvmppc_vpa vpa;
+	struct kvmppc_vpa dtl;
+	struct dtl_entry *dtl_ptr;
+	long unsigned int dtl_index;
+	u64 stolen_logged;
+	struct kvmppc_vpa slb_shadow;
+	spinlock_t tbacct_lock;
+	u64 busy_stolen;
+	u64 busy_preempt;
+	u32 emul_inst;
+	u32 online;
+	u64 hfscr_permitted;
+	struct kvm_nested_guest *nested;
+	u64 nested_hfscr;
+	u32 nested_vcpu_id;
+	gpa_t nested_io_gpr;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 sum_exits;
+	u64 mmio_exits;
+	u64 signal_exits;
+	u64 light_exits;
+	u64 itlb_real_miss_exits;
+	u64 itlb_virt_miss_exits;
+	u64 dtlb_real_miss_exits;
+	u64 dtlb_virt_miss_exits;
+	u64 syscall_exits;
+	u64 isi_exits;
+	u64 dsi_exits;
+	u64 emulated_inst_exits;
+	u64 dec_exits;
+	u64 ext_intr_exits;
+	u64 halt_successful_wait;
+	u64 dbell_exits;
+	u64 gdbell_exits;
+	u64 ld;
+	u64 st;
+	u64 pf_storage;
+	u64 pf_instruc;
+	u64 sp_storage;
+	u64 sp_instruc;
+	u64 queue_intr;
+	u64 ld_slow;
+	u64 st_slow;
+	u64 pthru_all;
+	u64 pthru_host;
+	u64 pthru_bad_aff;
+};
+
+struct kvm_dirty_gfn;
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm_run;
+
+struct kvm_memory_slot;
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	long unsigned int guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct pid *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	bool preempted;
+	bool ready;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	unsigned int node;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	long unsigned int hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	long unsigned int last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	long unsigned int threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+};
+
+struct irq_domain_ops;
+
+struct irq_domain_chip_generic;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct irq_domain *parent;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct mutex revmap_mutex;
+	struct irq_data *revmap[0];
+};
+
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	long unsigned int properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct xarray __store;
+	long unsigned int __iter_idx;
+};
+
+struct arch_msi_msg_addr_lo {
+	u32 address_lo;
+};
+
+typedef struct arch_msi_msg_addr_lo arch_msi_msg_addr_lo_t;
+
+struct arch_msi_msg_addr_hi {
+	u32 address_hi;
+};
+
+typedef struct arch_msi_msg_addr_hi arch_msi_msg_addr_hi_t;
+
+struct arch_msi_msg_data {
+	u32 data;
+};
+
+typedef struct arch_msi_msg_data arch_msi_msg_data_t;
+
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
+};
+
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+struct irq_affinity_desc;
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	struct pci_msi_desc pci;
+};
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	long unsigned int flags;
+};
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	long unsigned int thread_flags;
+	long unsigned int thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+struct irq_chip_regs {
+	long unsigned int enable;
+	long unsigned int disable;
+	long unsigned int mask;
+	long unsigned int ack;
+	long unsigned int eoi;
+	long unsigned int type;
+	long unsigned int polarity;
+};
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	long unsigned int installed;
+	long unsigned int unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+};
+
+struct icp_ops {
+	unsigned int (*get_irq)();
+	void (*eoi)(struct irq_data *);
+	void (*set_priority)(unsigned char);
+	void (*teardown_cpu)();
+	void (*flush_ipi)();
+	void (*cause_ipi)(int);
+	irq_handler_t ipi_action;
+};
+
+struct xics_cppr {
+	unsigned char stack[3];
+	int index;
+};
+
+typedef u64 gfn_t;
+
+struct interval_tree_node {
+	struct rb_node rb;
+	long unsigned int start;
+	long unsigned int last;
+	long unsigned int __subtree_last;
+};
+
+struct kvm_arch_memory_slot {
+	long unsigned int *rmap;
+};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	long unsigned int npages;
+	long unsigned int *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	long unsigned int userspace_addr;
+	u32 flags;
+	short int id;
+	u16 as_id;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+};
+
+struct mmu_notifier_range {
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+struct irq_bypass_consumer;
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+struct kvm_sregs {
+	__u32 pvr;
+	union {
+		struct {
+			__u64 sdr1;
+			struct {
+				struct {
+					__u64 slbe;
+					__u64 slbv;
+				} slb[64];
+			} ppc64;
+			struct {
+				__u32 sr[16];
+				__u64 ibat[8];
+				__u64 dbat[8];
+			} ppc32;
+		} s;
+		struct {
+			union {
+				struct {
+					__u32 features;
+					__u32 svr;
+					__u64 mcar;
+					__u32 hid0;
+					__u32 pid1;
+					__u32 pid2;
+				} fsl;
+				__u8 pad[256];
+			} impl;
+			__u32 features;
+			__u32 impl_id;
+			__u32 update_special;
+			__u32 pir;
+			__u64 sprg8;
+			__u64 sprg9;
+			__u64 csrr0;
+			__u64 dsrr0;
+			__u64 mcsrr0;
+			__u32 csrr1;
+			__u32 dsrr1;
+			__u32 mcsrr1;
+			__u32 esr;
+			__u64 dear;
+			__u64 ivpr;
+			__u64 mcivpr;
+			__u64 mcsr;
+			__u32 tsr;
+			__u32 tcr;
+			__u32 decar;
+			__u32 dec;
+			__u64 tb;
+			__u32 dbsr;
+			__u32 dbcr[3];
+			__u32 iac[4];
+			__u32 dac[2];
+			__u32 dvc[2];
+			__u8 num_iac;
+			__u8 num_dac;
+			__u8 num_dvc;
+			__u8 pad;
+			__u32 epr;
+			__u32 vrsave;
+			__u32 epcr;
+			__u32 mas0;
+			__u32 mas1;
+			__u64 mas2;
+			__u64 mas7_3;
+			__u32 mas4;
+			__u32 mas6;
+			__u32 ivor_low[16];
+			__u32 ivor_high[18];
+			__u32 mmucfg;
+			__u32 eptcfg;
+			__u32 tlbcfg[4];
+			__u32 tlbps[4];
+			__u32 eplc;
+			__u32 epsc;
+		} e;
+		__u8 pad[1020];
+	} u;
+};
+
+struct kvm_debug_exit_arch {
+	__u64 address;
+	__u32 status;
+	__u32 reserved;
+};
+
+struct kvm_sync_regs {};
+
+struct kvm_ppc_mmuv3_cfg {
+	__u64 flags;
+	__u64 process_table;
+};
+
+struct kvm_ppc_radix_geom {
+	__u8 page_shift;
+	__u8 level_bits[4];
+	__u8 pad[3];
+};
+
+struct kvm_ppc_rmmu_info {
+	struct kvm_ppc_radix_geom geometries[8];
+	__u32 ap_encodings[8];
+};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
+	union {
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			__u32 longmode;
+			__u32 pad;
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
+			union {
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
+			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			long unsigned int extension_id;
+			long unsigned int function_id;
+			long unsigned int args[6];
+			long unsigned int ret[2];
+		} riscv_sbi;
+		struct {
+			long unsigned int csr_num;
+			long unsigned int new_value;
+			long unsigned int write_mask;
+			long unsigned int ret_value;
+		} riscv_csr;
+		struct {
+			__u32 flags;
+		} notify;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct kvm_dirty_log {
+	__u32 slot;
+	__u32 padding1;
+	union {
+		void *dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_ppc_one_page_size {
+	__u32 page_shift;
+	__u32 pte_enc;
+};
+
+struct kvm_ppc_one_seg_page_size {
+	__u32 page_shift;
+	__u32 slb_enc;
+	struct kvm_ppc_one_page_size enc[8];
+};
+
+struct kvm_ppc_smmu_info {
+	__u64 flags;
+	__u32 slb_size;
+	__u16 data_keys;
+	__u16 instr_keys;
+	struct kvm_ppc_one_seg_page_size sps[8];
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+	u64 num_2M_pages;
+	u64 num_1G_pages;
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct revmap_entry;
+
+struct kvm_hpt_info {
+	long unsigned int virt;
+	struct revmap_entry *rev;
+	u32 order;
+	int cma;
+};
+
+struct kvm_resize_hpt;
+
+struct kvmppc_xics;
+
+struct kvmppc_xive;
+
+struct kvmppc_passthru_irqmap;
+
+struct kvmppc_ops;
+
+struct kvm_arch {
+	unsigned int lpid;
+	unsigned int smt_mode;
+	unsigned int emul_smt_mode;
+	unsigned int tlb_sets;
+	struct kvm_hpt_info hpt;
+	atomic64_t mmio_update;
+	unsigned int host_lpid;
+	long unsigned int host_lpcr;
+	long unsigned int sdr1;
+	long unsigned int host_sdr1;
+	long unsigned int lpcr;
+	long unsigned int vrma_slb_v;
+	int mmu_ready;
+	atomic_t vcpus_running;
+	u32 online_vcores;
+	atomic_t hpte_mod_interest;
+	cpumask_t need_tlb_flush;
+	u8 radix;
+	u8 fwnmi_enabled;
+	u8 secure_guest;
+	u8 svm_enabled;
+	bool nested_enable;
+	bool dawr1_enabled;
+	pgd_t *pgtable;
+	u64 process_table;
+	struct kvm_resize_hpt *resize_hpt;
+	struct list_head spapr_tce_tables;
+	struct list_head rtas_tokens;
+	struct mutex rtas_token_lock;
+	long unsigned int enabled_hcalls[5];
+	struct kvmppc_xics *xics;
+	struct kvmppc_xics *xics_device;
+	struct kvmppc_xive *xive;
+	struct {
+		struct kvmppc_xive *native;
+		struct kvmppc_xive *xics_on_xive;
+	} xive_devices;
+	struct kvmppc_passthru_irqmap *pimap;
+	struct kvmppc_ops *kvm_ops;
+	struct mutex uvmem_lock;
+	struct list_head uvmem_pfns;
+	struct mutex mmu_setup_lock;
+	u64 l1_ptcr;
+	struct idr kvm_nested_guest_idr;
+	struct kvmppc_vcore *vcores[2048];
+};
+
+struct kvm_irq_routing_table;
+
+struct kvm_io_bus;
+
+struct kvm_stat_data;
+
+struct kvm {
+	spinlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	long unsigned int nr_memslot_pages;
+	struct kvm_memslots __memslots[2];
+	struct kvm_memslots *memslots[1];
+	struct xarray vcpu_array;
+	spinlock_t mn_invalidate_lock;
+	long unsigned int mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	long unsigned int mmu_invalidate_seq;
+	long int mmu_invalidate_in_progress;
+	long unsigned int mmu_invalidate_range_start;
+	long unsigned int mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool vm_bugged;
+	bool vm_dead;
+	char stats_id[48];
+};
+
+struct revmap_entry {
+	long unsigned int guest_rpte;
+	unsigned int forw;
+	unsigned int back;
+};
+
+struct kvmppc_irq_map {
+	u32 r_hwirq;
+	u32 v_hwirq;
+	struct irq_desc *desc;
+};
+
+struct kvmppc_passthru_irqmap {
+	int n_mapped;
+	struct kvmppc_irq_map mapped[1024];
+};
+
+enum kvm_mr_change {
+	KVM_MR_CREATE = 0,
+	KVM_MR_DELETE = 1,
+	KVM_MR_MOVE = 2,
+	KVM_MR_FLAGS_ONLY = 3,
+};
+
+union kvmppc_one_reg;
+
+struct kvm_gfn_range;
+
+struct kvmppc_ops {
+	struct module *owner;
+	int (*get_sregs)(struct kvm_vcpu *, struct kvm_sregs *);
+	int (*set_sregs)(struct kvm_vcpu *, struct kvm_sregs *);
+	int (*get_one_reg)(struct kvm_vcpu *, u64, union kvmppc_one_reg *);
+	int (*set_one_reg)(struct kvm_vcpu *, u64, union kvmppc_one_reg *);
+	void (*vcpu_load)(struct kvm_vcpu *, int);
+	void (*vcpu_put)(struct kvm_vcpu *);
+	void (*inject_interrupt)(struct kvm_vcpu *, int, u64);
+	void (*set_msr)(struct kvm_vcpu *, u64);
+	int (*vcpu_run)(struct kvm_vcpu *);
+	int (*vcpu_create)(struct kvm_vcpu *);
+	void (*vcpu_free)(struct kvm_vcpu *);
+	int (*check_requests)(struct kvm_vcpu *);
+	int (*get_dirty_log)(struct kvm *, struct kvm_dirty_log *);
+	void (*flush_memslot)(struct kvm *, struct kvm_memory_slot *);
+	int (*prepare_memory_region)(struct kvm *, const struct kvm_memory_slot *, struct kvm_memory_slot *, enum kvm_mr_change);
+	void (*commit_memory_region)(struct kvm *, struct kvm_memory_slot *, const struct kvm_memory_slot *, enum kvm_mr_change);
+	bool (*unmap_gfn_range)(struct kvm *, struct kvm_gfn_range *);
+	bool (*age_gfn)(struct kvm *, struct kvm_gfn_range *);
+	bool (*test_age_gfn)(struct kvm *, struct kvm_gfn_range *);
+	bool (*set_spte_gfn)(struct kvm *, struct kvm_gfn_range *);
+	void (*free_memslot)(struct kvm_memory_slot *);
+	int (*init_vm)(struct kvm *);
+	void (*destroy_vm)(struct kvm *);
+	int (*get_smmu_info)(struct kvm *, struct kvm_ppc_smmu_info *);
+	int (*emulate_op)(struct kvm_vcpu *, unsigned int, int *);
+	int (*emulate_mtspr)(struct kvm_vcpu *, int, ulong);
+	int (*emulate_mfspr)(struct kvm_vcpu *, int, ulong *);
+	void (*fast_vcpu_kick)(struct kvm_vcpu *);
+	long int (*arch_vm_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*hcall_implemented)(long unsigned int);
+	int (*irq_bypass_add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*irq_bypass_del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	int (*configure_mmu)(struct kvm *, struct kvm_ppc_mmuv3_cfg *);
+	int (*get_rmmu_info)(struct kvm *, struct kvm_ppc_rmmu_info *);
+	int (*set_smt_mode)(struct kvm *, long unsigned int, long unsigned int);
+	void (*giveup_ext)(struct kvm_vcpu *, ulong);
+	int (*enable_nested)(struct kvm *);
+	int (*load_from_eaddr)(struct kvm_vcpu *, ulong *, void *, int);
+	int (*store_to_eaddr)(struct kvm_vcpu *, ulong *, void *, int);
+	int (*enable_svm)(struct kvm *);
+	int (*svm_off)(struct kvm *);
+	int (*enable_dawr1)(struct kvm *);
+	bool (*hash_v3_possible)();
+	int (*create_vm_debugfs)(struct kvm *);
+	int (*create_vcpu_debugfs)(struct kvm_vcpu *, struct dentry *);
+};
+
+struct kvmppc_pte {
+	ulong eaddr;
+	u64 vpage;
+	ulong raddr;
+	bool may_read: 1;
+	bool may_write: 1;
+	bool may_execute: 1;
+	long unsigned int wimg;
+	long unsigned int rc;
+	u8 page_size;
+	u8 page_shift;
+};
+
+struct kvmppc_sid_map {
+	u64 guest_vsid;
+	u64 guest_esid;
+	u64 host_vsid;
+	bool valid: 1;
+};
+
+struct kvmppc_bat {
+	u64 raw;
+	u32 bepi;
+	u32 bepi_mask;
+	u32 brpn;
+	u8 wimg;
+	u8 pp;
+	bool vs: 1;
+	bool vp: 1;
+};
+
+struct kvmppc_vcpu_book3s {
+	struct kvmppc_sid_map sid_map[512];
+	struct {
+		u64 esid;
+		u64 vsid;
+	} slb_shadow[64];
+	u8 slb_shadow_max;
+	struct kvmppc_bat ibat[8];
+	struct kvmppc_bat dbat[8];
+	u64 hid[6];
+	u64 gqr[8];
+	u64 sdr1;
+	u64 hior;
+	u64 msr_mask;
+	u64 vtb;
+	u64 proto_vsid_first;
+	u64 proto_vsid_max;
+	u64 proto_vsid_next;
+	int context_id[1];
+	bool hior_explicit;
+	struct hlist_head hpte_hash_pte[8192];
+	struct hlist_head hpte_hash_pte_long[4096];
+	struct hlist_head hpte_hash_vpte[8192];
+	struct hlist_head hpte_hash_vpte_long[32];
+	struct hlist_head hpte_hash_vpte_64k[2048];
+	int hpte_cache_count;
+	spinlock_t mmu_lock;
+};
+
+struct kvm_nested_guest {
+	struct kvm *l1_host;
+	int l1_lpid;
+	int shadow_lpid;
+	pgd_t *shadow_pgtable;
+	u64 l1_gr_to_hr;
+	u64 process_table;
+	long int refcnt;
+	struct mutex tlb_lock;
+	struct kvm_nested_guest *next;
+	cpumask_t need_tlb_flush;
+	short int prev_cpu[2048];
+	u8 radix;
+};
+
+struct kvm_io_device;
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+enum kvm_bus {
+	KVM_MMIO_BUS = 0,
+	KVM_PIO_BUS = 1,
+	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
+	KVM_FAST_MMIO_BUS = 3,
+	KVM_NR_BUSES = 4,
+};
+
+struct kvm_gfn_range {
+	struct kvm_memory_slot *slot;
+	gfn_t start;
+	gfn_t end;
+	pte_t pte;
+	bool may_block;
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+union kvmppc_one_reg {
+	u32 wval;
+	u64 dval;
+	vector128 vval;
+	u64 vsxval[2];
+	u32 vsx32val[4];
+	u16 vsx16val[8];
+	u8 vsx8val[16];
+	struct {
+		u64 addr;
+		u64 length;
+	} vpaval;
+	u64 xive_timaval[2];
+};
+
+typedef u64 uint64_t;
+
+struct pdev_archdata {
+	u64 dma_mask;
+	void *priv;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct mfd_cell;
+
+struct platform_device {
+	const char *name;
+	int id;
+	bool id_auto;
+	struct device dev;
+	u64 platform_dma_mask;
+	struct device_dma_parameters dma_parms;
+	u32 num_resources;
+	struct resource *resource;
+	const struct platform_device_id *id_entry;
+	const char *driver_override;
+	struct mfd_cell *mfd_cell;
+	struct pdev_archdata archdata;
+};
+
+enum opal_msg_type {
+	OPAL_MSG_ASYNC_COMP = 0,
+	OPAL_MSG_MEM_ERR = 1,
+	OPAL_MSG_EPOW = 2,
+	OPAL_MSG_SHUTDOWN = 3,
+	OPAL_MSG_HMI_EVT = 4,
+	OPAL_MSG_DPO = 5,
+	OPAL_MSG_PRD = 6,
+	OPAL_MSG_OCC = 7,
+	OPAL_MSG_PRD2 = 8,
+	OPAL_MSG_TYPE_MAX = 9,
+};
+
+struct opal_msg {
+	__be32 msg_type;
+	__be32 reserved;
+	__be64 params[8];
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+enum vas_cop_type {
+	VAS_COP_TYPE_FAULT = 0,
+	VAS_COP_TYPE_842 = 1,
+	VAS_COP_TYPE_842_HIPRI = 2,
+	VAS_COP_TYPE_GZIP = 3,
+	VAS_COP_TYPE_GZIP_HIPRI = 4,
+	VAS_COP_TYPE_FTW = 5,
+	VAS_COP_TYPE_MAX = 6,
+};
+
+struct vas_user_win_ref {
+	struct pid *pid;
+	struct pid *tgid;
+	struct mm_struct *mm;
+	struct mutex mmap_mutex;
+	struct vm_area_struct *vma;
+};
+
+struct vas_window {
+	u32 winid;
+	u32 wcreds_max;
+	u32 status;
+	enum vas_cop_type cop;
+	struct vas_user_win_ref task_ref;
+	char *dbgname;
+	struct dentry *dbgdir;
+};
+
+struct vas_user_win_ops {
+	struct vas_window * (*open_win)(int, u64, enum vas_cop_type);
+	u64 (*paste_addr)(struct vas_window *);
+	int (*close_win)(struct vas_window *);
+};
+
+struct vas_rx_win_attr {
+	u64 rx_fifo;
+	int rx_fifo_size;
+	int wcreds_max;
+	bool pin_win;
+	bool rej_no_credit;
+	bool tx_wcred_mode;
+	bool rx_wcred_mode;
+	bool tx_win_ord_mode;
+	bool rx_win_ord_mode;
+	bool data_stamp;
+	bool nx_win;
+	bool fault_win;
+	bool user_win;
+	bool notify_disable;
+	bool intr_disable;
+	bool notify_early;
+	int lnotify_lpid;
+	int lnotify_pid;
+	int lnotify_tid;
+	u32 pswid;
+	int tc_mode;
+};
+
+struct vas_tx_win_attr {
+	enum vas_cop_type cop;
+	int wcreds_max;
+	int lpid;
+	int pidr;
+	int pswid;
+	int rsvd_txbuf_count;
+	int tc_mode;
+	bool user_win;
+	bool pin_win;
+	bool rej_no_credit;
+	bool rsvd_txbuf_enable;
+	bool tx_wcred_mode;
+	bool rx_wcred_mode;
+	bool tx_win_ord_mode;
+	bool rx_win_ord_mode;
+};
+
+enum vas_notify_scope {
+	VAS_SCOPE_LOCAL = 0,
+	VAS_SCOPE_GROUP = 1,
+	VAS_SCOPE_VECTORED_GROUP = 2,
+	VAS_SCOPE_UNUSED = 3,
+};
+
+enum vas_dma_type {
+	VAS_DMA_TYPE_INJECT = 0,
+	VAS_DMA_TYPE_WRITE = 1,
+};
+
+enum vas_notify_after_count {
+	VAS_NOTIFY_AFTER_256 = 0,
+	VAS_NOTIFY_NONE = 1,
+	VAS_NOTIFY_AFTER_2 = 2,
+};
+
+struct pnv_vas_window;
+
+struct vas_instance {
+	int vas_id;
+	struct ida ida;
+	struct list_head node;
+	struct platform_device *pdev;
+	u64 hvwc_bar_start;
+	u64 uwc_bar_start;
+	u64 paste_base_addr;
+	u64 paste_win_id_shift;
+	u64 irq_port;
+	int virq;
+	int fault_crbs;
+	int fault_fifo_size;
+	int fifo_in_progress;
+	spinlock_t fault_lock;
+	void *fault_fifo;
+	struct pnv_vas_window *fault_win;
+	struct mutex mutex;
+	struct pnv_vas_window *rxwin[6];
+	struct pnv_vas_window *windows[65536];
+	char *name;
+	char *dbgname;
+	struct dentry *dbgdir;
+};
+
+struct pnv_vas_window {
+	struct vas_window vas_win;
+	struct vas_instance *vinst;
+	bool tx_win;
+	bool nx_win;
+	bool user_win;
+	void *hvwc_map;
+	void *uwc_map;
+	void *paste_kaddr;
+	char *paste_addr_name;
+	struct pnv_vas_window *rxwin;
+	atomic_t num_txwins;
+};
+
+struct vas_winctx {
+	u64 rx_fifo;
+	int rx_fifo_size;
+	int wcreds_max;
+	int rsvd_txbuf_count;
+	bool user_win;
+	bool nx_win;
+	bool fault_win;
+	bool rsvd_txbuf_enable;
+	bool pin_win;
+	bool rej_no_credit;
+	bool tx_wcred_mode;
+	bool rx_wcred_mode;
+	bool tx_word_mode;
+	bool rx_word_mode;
+	bool data_stamp;
+	bool xtra_write;
+	bool notify_disable;
+	bool intr_disable;
+	bool fifo_disable;
+	bool notify_early;
+	bool notify_os_intr_reg;
+	int lpid;
+	int pidr;
+	int lnotify_lpid;
+	int lnotify_pid;
+	int lnotify_tid;
+	u32 pswid;
+	int rx_win_id;
+	int fault_win_id;
+	int tc_mode;
+	u64 irq_port;
+	enum vas_dma_type dma_type;
+	enum vas_notify_scope min_scope;
+	enum vas_notify_scope max_scope;
+	enum vas_notify_after_count notify_after_count;
+};
+
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
+
 struct trace_buffer;
 
 struct trace_event_file;
@@ -7907,8 +10197,7 @@
 	struct ring_buffer_event *event;
 	struct trace_event_file *trace_file;
 	void *entry;
-	long unsigned int flags;
-	int pc;
+	unsigned int trace_ctx;
 	struct pt_regs *regs;
 };
 
@@ -7928,40 +10217,6 @@
 };
 
 enum {
-	TRACE_EVENT_FL_FILTERED_BIT = 0,
-	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
-	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
-	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
-	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
-	TRACE_EVENT_FL_KPROBE_BIT = 5,
-	TRACE_EVENT_FL_UPROBE_BIT = 6,
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED = 1,
-	TRACE_EVENT_FL_CAP_ANY = 2,
-	TRACE_EVENT_FL_NO_SET_FILTER = 4,
-	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
-	TRACE_EVENT_FL_TRACEPOINT = 16,
-	TRACE_EVENT_FL_KPROBE = 32,
-	TRACE_EVENT_FL_UPROBE = 64,
-};
-
-enum {
-	EVENT_FILE_FL_ENABLED_BIT = 0,
-	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
-	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
-	EVENT_FILE_FL_FILTERED_BIT = 3,
-	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
-	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
-	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
-	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
-	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
-	EVENT_FILE_FL_PID_FILTER_BIT = 9,
-	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
-};
-
-enum {
 	EVENT_FILE_FL_ENABLED = 1,
 	EVENT_FILE_FL_RECORDED_CMD = 2,
 	EVENT_FILE_FL_RECORDED_TGID = 4,
@@ -7979,659 +10234,89 @@
 	FILTER_OTHER = 0,
 	FILTER_STATIC_STRING = 1,
 	FILTER_DYN_STRING = 2,
-	FILTER_PTR_STRING = 3,
-	FILTER_TRACE_FN = 4,
-	FILTER_COMM = 5,
-	FILTER_CPU = 6,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_COMM = 6,
+	FILTER_CPU = 7,
 };
 
-struct xbc_node {
-	u16 next;
-	u16 child;
-	u16 parent;
-	u16 data;
-};
-
-enum wb_stat_item {
-	WB_RECLAIMABLE = 0,
-	WB_WRITEBACK = 1,
-	WB_DIRTIED = 2,
-	WB_WRITTEN = 3,
-	NR_WB_STAT_ITEMS = 4,
-};
-
-struct disk_stats;
-
-struct partition_meta_info;
-
-struct hd_struct {
-	sector_t start_sect;
-	sector_t nr_sects;
-	long unsigned int stamp;
-	struct disk_stats *dkstats;
-	struct percpu_ref ref;
-	struct device __dev;
-	struct kobject *holder_dir;
-	int policy;
-	int partno;
-	struct partition_meta_info *info;
-	struct rcu_work rcu_work;
-};
-
-struct disk_part_tbl;
-
-struct block_device_operations;
-
-struct timer_rand_state;
-
-struct disk_events;
-
-struct cdrom_device_info;
-
-struct badblocks;
-
-struct gendisk {
-	int major;
-	int first_minor;
-	int minors;
-	char disk_name[32];
-	short unsigned int events;
-	short unsigned int event_flags;
-	struct disk_part_tbl *part_tbl;
-	struct hd_struct part0;
-	const struct block_device_operations *fops;
-	struct request_queue *queue;
-	void *private_data;
-	int flags;
-	long unsigned int state;
-	struct rw_semaphore lookup_sem;
-	struct kobject *slave_dir;
-	struct timer_rand_state *random;
-	atomic_t sync_io;
-	struct disk_events *ev;
-	struct kobject integrity_kobj;
-	struct cdrom_device_info *cdi;
-	int node_id;
-	struct badblocks *bb;
-	struct lockdep_map lockdep_map;
-};
-
-struct bio_integrity_payload {
-	struct bio *bip_bio;
-	struct bvec_iter bip_iter;
-	short unsigned int bip_slab;
-	short unsigned int bip_vcnt;
-	short unsigned int bip_max_vcnt;
-	short unsigned int bip_flags;
-	struct bvec_iter bio_iter;
-	struct work_struct bip_work;
-	struct bio_vec *bip_vec;
-	struct bio_vec bip_inline_vecs[0];
-};
-
-struct blkg_iostat {
-	u64 bytes[3];
-	u64 ios[3];
-};
-
-struct blkg_iostat_set {
-	struct u64_stats_sync sync;
-	struct blkg_iostat cur;
-	struct blkg_iostat last;
-};
-
-struct blkcg;
-
-struct blkg_policy_data;
-
-struct blkcg_gq {
-	struct request_queue *q;
-	struct list_head q_node;
-	struct hlist_node blkcg_node;
-	struct blkcg *blkcg;
-	struct blkcg_gq *parent;
-	struct percpu_ref refcnt;
-	bool online;
-	struct blkg_iostat_set *iostat_cpu;
-	struct blkg_iostat_set iostat;
-	struct blkg_policy_data *pd[5];
-	spinlock_t async_bio_lock;
-	struct bio_list async_bios;
-	struct work_struct async_bio_work;
-	atomic_t use_delay;
-	atomic64_t delay_nsec;
-	atomic64_t delay_start;
-	u64 last_delay;
-	int last_use;
-	struct callback_head callback_head;
-};
-
-typedef unsigned int blk_qc_t;
-
-struct partition_meta_info {
-	char uuid[37];
-	u8 volname[64];
-};
-
-struct disk_part_tbl {
-	struct callback_head callback_head;
-	int len;
-	struct hd_struct *last_lookup;
-	struct hd_struct *part[0];
-};
-
-struct blk_integrity_iter;
-
-typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
-
-typedef void integrity_prepare_fn(struct request *);
-
-typedef void integrity_complete_fn(struct request *, unsigned int);
-
-struct blk_integrity_profile {
-	integrity_processing_fn *generate_fn;
-	integrity_processing_fn *verify_fn;
-	integrity_prepare_fn *prepare_fn;
-	integrity_complete_fn *complete_fn;
-	const char *name;
-};
-
-struct blk_zone;
-
-typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
-
-struct hd_geometry;
-
-struct pr_ops;
-
-struct block_device_operations {
-	blk_qc_t (*submit_bio)(struct bio *);
-	int (*open)(struct block_device *, fmode_t);
-	void (*release)(struct gendisk *, fmode_t);
-	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
-	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	unsigned int (*check_events)(struct gendisk *, unsigned int);
-	void (*unlock_native_capacity)(struct gendisk *);
-	int (*revalidate_disk)(struct gendisk *);
-	int (*getgeo)(struct block_device *, struct hd_geometry *);
-	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
-	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
-	char * (*devnode)(struct gendisk *, umode_t *);
-	struct module *owner;
-	const struct pr_ops *pr_ops;
-};
-
-struct sg_io_v4 {
-	__s32 guard;
-	__u32 protocol;
-	__u32 subprotocol;
-	__u32 request_len;
-	__u64 request;
-	__u64 request_tag;
-	__u32 request_attr;
-	__u32 request_priority;
-	__u32 request_extra;
-	__u32 max_response_len;
-	__u64 response;
-	__u32 dout_iovec_count;
-	__u32 dout_xfer_len;
-	__u32 din_iovec_count;
-	__u32 din_xfer_len;
-	__u64 dout_xferp;
-	__u64 din_xferp;
-	__u32 timeout;
-	__u32 flags;
-	__u64 usr_ptr;
-	__u32 spare_in;
-	__u32 driver_status;
-	__u32 transport_status;
-	__u32 device_status;
-	__u32 retry_delay;
-	__u32 info;
-	__u32 duration;
-	__u32 response_len;
-	__s32 din_resid;
-	__s32 dout_resid;
-	__u64 generated_tag;
-	__u32 spare_out;
-	__u32 padding;
-};
-
-struct bsg_ops {
-	int (*check_proto)(struct sg_io_v4 *);
-	int (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);
-	int (*complete_rq)(struct request *, struct sg_io_v4 *);
-	void (*free_rq)(struct request *);
-};
-
-typedef __u32 req_flags_t;
-
-typedef void rq_end_io_fn(struct request *, blk_status_t);
-
-enum mq_rq_state {
-	MQ_RQ_IDLE = 0,
-	MQ_RQ_IN_FLIGHT = 1,
-	MQ_RQ_COMPLETE = 2,
-};
-
-struct blk_ksm_keyslot;
-
-struct request {
-	struct request_queue *q;
-	struct blk_mq_ctx *mq_ctx;
-	struct blk_mq_hw_ctx *mq_hctx;
-	unsigned int cmd_flags;
-	req_flags_t rq_flags;
-	int tag;
-	int internal_tag;
-	unsigned int __data_len;
-	sector_t __sector;
-	struct bio *bio;
-	struct bio *biotail;
-	struct list_head queuelist;
-	union {
-		struct hlist_node hash;
-		struct list_head ipi_list;
-	};
-	union {
-		struct rb_node rb_node;
-		struct bio_vec special_vec;
-		void *completion_data;
-		int error_count;
-	};
-	union {
-		struct {
-			struct io_cq *icq;
-			void *priv[2];
-		} elv;
-		struct {
-			unsigned int seq;
-			struct list_head list;
-			rq_end_io_fn *saved_end_io;
-		} flush;
-	};
-	struct gendisk *rq_disk;
-	struct hd_struct *part;
-	u64 alloc_time_ns;
-	u64 start_time_ns;
-	u64 io_start_time_ns;
-	short unsigned int wbt_flags;
-	short unsigned int stats_sectors;
-	short unsigned int nr_phys_segments;
-	short unsigned int nr_integrity_segments;
-	struct bio_crypt_ctx *crypt_ctx;
-	struct blk_ksm_keyslot *crypt_keyslot;
-	short unsigned int write_hint;
-	short unsigned int ioprio;
-	enum mq_rq_state state;
-	refcount_t ref;
-	unsigned int timeout;
-	long unsigned int deadline;
-	union {
-		struct __call_single_data csd;
-		u64 fifo_time;
-	};
-	rq_end_io_fn *end_io;
-	void *end_io_data;
-};
-
-struct blk_zone {
-	__u64 start;
-	__u64 len;
-	__u64 wp;
-	__u8 type;
-	__u8 cond;
-	__u8 non_seq;
-	__u8 reset;
-	__u8 resv[4];
-	__u64 capacity;
-	__u8 reserved[24];
-};
-
-enum elv_merge {
-	ELEVATOR_NO_MERGE = 0,
-	ELEVATOR_FRONT_MERGE = 1,
-	ELEVATOR_BACK_MERGE = 2,
-	ELEVATOR_DISCARD_MERGE = 3,
-};
-
-struct elevator_type;
-
-struct blk_mq_alloc_data;
-
-struct elevator_mq_ops {
-	int (*init_sched)(struct request_queue *, struct elevator_type *);
-	void (*exit_sched)(struct elevator_queue *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*depth_updated)(struct blk_mq_hw_ctx *);
-	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-	bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);
-	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
-	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-	void (*prepare_request)(struct request *);
-	void (*finish_request)(struct request *);
-	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
-	bool (*has_work)(struct blk_mq_hw_ctx *);
-	void (*completed_request)(struct request *, u64);
-	void (*requeue_request)(struct request *);
-	struct request * (*former_request)(struct request_queue *, struct request *);
-	struct request * (*next_request)(struct request_queue *, struct request *);
-	void (*init_icq)(struct io_cq *);
-	void (*exit_icq)(struct io_cq *);
-};
-
-struct elv_fs_entry;
-
-struct elevator_type {
-	struct kmem_cache *icq_cache;
-	struct elevator_mq_ops ops;
-	size_t icq_size;
-	size_t icq_align;
-	struct elv_fs_entry *elevator_attrs;
-	const char *elevator_name;
-	const char *elevator_alias;
-	const unsigned int elevator_features;
-	struct module *elevator_owner;
-	char icq_cache_name[22];
-	struct list_head list;
-};
-
-struct elevator_queue {
-	struct elevator_type *type;
-	void *elevator_data;
-	struct kobject kobj;
-	struct mutex sysfs_lock;
-	unsigned int registered: 1;
-	struct hlist_head hash[64];
-};
-
-struct elv_fs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct elevator_queue *, char *);
-	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-enum blk_eh_timer_return {
-	BLK_EH_DONE = 0,
-	BLK_EH_RESET_TIMER = 1,
-};
-
-struct blk_mq_queue_data;
-
-struct blk_mq_ops {
-	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
-	void (*commit_rqs)(struct blk_mq_hw_ctx *);
-	bool (*get_budget)(struct request_queue *);
-	void (*put_budget)(struct request_queue *);
-	enum blk_eh_timer_return (*timeout)(struct request *, bool);
-	int (*poll)(struct blk_mq_hw_ctx *);
-	void (*complete)(struct request *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
-	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
-	void (*initialize_rq_fn)(struct request *);
-	void (*cleanup_rq)(struct request *);
-	bool (*busy)(struct request_queue *);
-	int (*map_queues)(struct blk_mq_tag_set *);
-};
-
-struct blk_integrity_iter {
-	void *prot_buf;
-	void *data_buf;
-	sector_t seed;
-	unsigned int data_size;
-	short unsigned int interval;
-	const char *disk_name;
-};
-
-enum pr_type {
-	PR_WRITE_EXCLUSIVE = 1,
-	PR_EXCLUSIVE_ACCESS = 2,
-	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
-	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
-	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
-	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
-};
-
-struct pr_ops {
-	int (*pr_register)(struct block_device *, u64, u64, u32);
-	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
-	int (*pr_release)(struct block_device *, u64, enum pr_type);
-	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
-	int (*pr_clear)(struct block_device *, u64);
-};
-
-enum blkg_iostat_type {
-	BLKG_IOSTAT_READ = 0,
-	BLKG_IOSTAT_WRITE = 1,
-	BLKG_IOSTAT_DISCARD = 2,
-	BLKG_IOSTAT_NR = 3,
-};
-
-struct blkcg_policy_data;
-
-struct blkcg {
-	struct cgroup_subsys_state css;
-	spinlock_t lock;
-	refcount_t online_pin;
-	struct xarray blkg_tree;
-	struct blkcg_gq *blkg_hint;
-	struct hlist_head blkg_list;
-	struct blkcg_policy_data *cpd[5];
-	struct list_head all_blkcgs_node;
-	struct list_head cgwb_list;
-};
-
-struct blkcg_policy_data {
-	struct blkcg *blkcg;
-	int plid;
-};
-
-struct blkg_policy_data {
-	struct blkcg_gq *blkg;
-	int plid;
-};
-
-enum memcg_stat_item {
-	MEMCG_SWAP = 37,
-	MEMCG_SOCK = 38,
-	MEMCG_PERCPU_B = 39,
-	MEMCG_NR_STAT = 40,
-};
-
-enum memcg_memory_event {
-	MEMCG_LOW = 0,
-	MEMCG_HIGH = 1,
-	MEMCG_MAX = 2,
-	MEMCG_OOM = 3,
-	MEMCG_OOM_KILL = 4,
-	MEMCG_SWAP_HIGH = 5,
-	MEMCG_SWAP_MAX = 6,
-	MEMCG_SWAP_FAIL = 7,
-	MEMCG_NR_MEMORY_EVENTS = 8,
-};
-
-enum mem_cgroup_events_target {
-	MEM_CGROUP_TARGET_THRESH = 0,
-	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
-	MEM_CGROUP_NTARGETS = 2,
-};
-
-struct memcg_vmstats_percpu {
-	long int stat[40];
-	long unsigned int events[89];
-	long unsigned int nr_page_events;
-	long unsigned int targets[2];
-};
-
-struct mem_cgroup_reclaim_iter {
-	struct mem_cgroup *position;
-	unsigned int generation;
-};
-
-struct lruvec_stat {
-	long int count[37];
-};
-
-struct memcg_shrinker_map {
-	struct callback_head rcu;
-	long unsigned int map[0];
-};
-
-struct mem_cgroup_per_node {
-	struct lruvec lruvec;
-	struct lruvec_stat *lruvec_stat_local;
-	struct lruvec_stat *lruvec_stat_cpu;
-	atomic_long_t lruvec_stat[37];
-	long unsigned int lru_zone_size[10];
-	struct mem_cgroup_reclaim_iter iter;
-	struct memcg_shrinker_map *shrinker_map;
-	struct rb_node tree_node;
-	long unsigned int usage_in_excess;
-	bool on_tree;
-	struct mem_cgroup *memcg;
-};
-
-struct eventfd_ctx;
-
-struct mem_cgroup_threshold {
-	struct eventfd_ctx *eventfd;
-	long unsigned int threshold;
-};
-
-struct mem_cgroup_threshold_ary {
-	int current_threshold;
-	unsigned int size;
-	struct mem_cgroup_threshold entries[0];
-};
-
-struct percpu_cluster {
-	struct swap_cluster_info index;
-	unsigned int next;
-};
-
-enum fs_value_type {
-	fs_value_is_undefined = 0,
-	fs_value_is_flag = 1,
-	fs_value_is_string = 2,
-	fs_value_is_blob = 3,
-	fs_value_is_filename = 4,
-	fs_value_is_file = 5,
-};
-
-struct fs_parameter {
-	const char *key;
-	enum fs_value_type type: 8;
-	union {
-		char *string;
-		void *blob;
-		struct filename *name;
-		struct file *file;
-	};
-	size_t size;
-	int dirfd;
-};
-
-struct fc_log {
-	refcount_t usage;
-	u8 head;
-	u8 tail;
-	u8 need_free;
-	struct module *owner;
-	char *buffer[8];
-};
-
-struct fs_context_operations {
-	void (*free)(struct fs_context *);
-	int (*dup)(struct fs_context *, struct fs_context *);
-	int (*parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*parse_monolithic)(struct fs_context *, void *);
-	int (*get_tree)(struct fs_context *);
-	int (*reconfigure)(struct fs_context *);
-};
-
-struct fs_parse_result {
-	bool negated;
-	union {
-		bool boolean;
-		int int_32;
-		unsigned int uint_32;
-		u64 uint_64;
-	};
-};
-
-struct trace_event_raw_initcall_level {
+struct trace_event_raw_vas_rx_win_open {
 	struct trace_entry ent;
-	u32 __data_loc_level;
+	struct task_struct *tsk;
+	int pid;
+	int cop;
+	int vasid;
+	struct vas_rx_win_attr *rxattr;
+	int lnotify_lpid;
+	int lnotify_pid;
+	int lnotify_tid;
 	char __data[0];
 };
 
-struct trace_event_raw_initcall_start {
+struct trace_event_raw_vas_tx_win_open {
 	struct trace_entry ent;
-	initcall_t func;
+	struct task_struct *tsk;
+	int pid;
+	int cop;
+	int vasid;
+	struct vas_tx_win_attr *txattr;
+	int lpid;
+	int pidr;
 	char __data[0];
 };
 
-struct trace_event_raw_initcall_finish {
+struct trace_event_raw_vas_paste_crb {
 	struct trace_entry ent;
-	initcall_t func;
-	int ret;
+	struct task_struct *tsk;
+	struct vas_window *win;
+	int pid;
+	int vasid;
+	int winid;
+	long unsigned int paste_kaddr;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_initcall_level {
-	u32 level;
+struct trace_event_data_offsets_vas_rx_win_open {};
+
+struct trace_event_data_offsets_vas_tx_win_open {};
+
+struct trace_event_data_offsets_vas_paste_crb {};
+
+typedef void (*btf_trace_vas_rx_win_open)(void *, struct task_struct *, int, int, struct vas_rx_win_attr *);
+
+typedef void (*btf_trace_vas_tx_win_open)(void *, struct task_struct *, int, int, struct vas_tx_win_attr *);
+
+typedef void (*btf_trace_vas_paste_crb)(void *, struct task_struct *, struct pnv_vas_window *);
+
+struct smp_ops_t {
+	void (*message_pass)(int, int);
+	void (*cause_ipi)(int);
+	int (*cause_nmi_ipi)(int);
+	void (*probe)();
+	int (*kick_cpu)(int);
+	int (*prepare_cpu)(int);
+	void (*setup_cpu)(int);
+	void (*bringup_done)();
+	void (*take_timebase)();
+	void (*give_timebase)();
+	int (*cpu_disable)();
+	void (*cpu_die)(unsigned int);
+	int (*cpu_bootable)(unsigned int);
+	void (*cpu_offline_self)();
 };
 
-struct trace_event_data_offsets_initcall_start {};
-
-struct trace_event_data_offsets_initcall_finish {};
-
-typedef void (*btf_trace_initcall_level)(void *, const char *);
-
-typedef void (*btf_trace_initcall_start)(void *, initcall_t);
-
-typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
-
-struct blacklist_entry {
-	struct list_head next;
-	char *buf;
+enum ppc_dbell {
+	PPC_DBELL = 0,
+	PPC_DBELL_CRIT = 1,
+	PPC_G_DBELL = 2,
+	PPC_G_DBELL_CRIT = 3,
+	PPC_G_DBELL_MC = 4,
+	PPC_DBELL_SERVER = 5,
 };
 
-typedef __u32 Elf32_Word;
-
-struct elf32_note {
-	Elf32_Word n_namesz;
-	Elf32_Word n_descsz;
-	Elf32_Word n_type;
-};
-
-enum {
-	PROC_ROOT_INO = 1,
-	PROC_IPC_INIT_INO = 4026531839,
-	PROC_UTS_INIT_INO = 4026531838,
-	PROC_USER_INIT_INO = 4026531837,
-	PROC_PID_INIT_INO = 4026531836,
-	PROC_CGROUP_INIT_INO = 4026531835,
-	PROC_TIME_INIT_INO = 4026531834,
-};
-
-typedef __u16 __le16;
-
 typedef __u32 __wsum;
 
-typedef unsigned int slab_flags_t;
-
-struct llist_head {
-	struct llist_node *first;
-};
-
 struct notifier_block;
 
 typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
@@ -8651,6 +10336,132 @@
 	struct notifier_block *head;
 };
 
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	long unsigned int defer_start;
+	long unsigned int defer_warn;
+	u32 pages_state_hold_cnt;
+	unsigned int frag_offset;
+	struct page *frag_page;
+	long int frag_users;
+	u32 xdp_mem_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct rhash_head {
 	struct rhash_head *next;
 };
@@ -8695,34 +10506,8 @@
 	atomic_t nelems;
 };
 
-struct fs_struct {
-	int users;
-	spinlock_t lock;
-	seqcount_spinlock_t seq;
-	int umask;
-	int in_exec;
-	struct path root;
-	struct path pwd;
-};
-
-typedef u32 compat_uptr_t;
-
-struct compat_robust_list {
-	compat_uptr_t next;
-};
-
-typedef s32 compat_long_t;
-
-struct compat_robust_list_head {
-	struct compat_robust_list list;
-	compat_long_t futex_offset;
-	compat_uptr_t list_op_pending;
-};
-
 struct pipe_buffer;
 
-struct watch_queue;
-
 struct pipe_inode_info {
 	struct mutex mutex;
 	wait_queue_head_t rd_wait;
@@ -8731,282 +10516,60 @@
 	unsigned int tail;
 	unsigned int max_usage;
 	unsigned int ring_size;
-	bool note_loss;
 	unsigned int nr_accounted;
 	unsigned int readers;
 	unsigned int writers;
 	unsigned int files;
 	unsigned int r_counter;
 	unsigned int w_counter;
+	bool poll_usage;
 	struct page *tmp_page;
 	struct fasync_struct *fasync_readers;
 	struct fasync_struct *fasync_writers;
 	struct pipe_buffer *bufs;
 	struct user_struct *user;
-	struct watch_queue *watch_queue;
 };
 
-typedef __u64 __addrpair;
+struct bpf_run_ctx {};
 
-typedef __u32 __portpair;
-
-typedef struct {
-	struct net *net;
-} possible_net_t;
-
-struct in6_addr {
-	union {
-		__u8 u6_addr8[16];
-		__be16 u6_addr16[8];
-		__be32 u6_addr32[4];
-	} in6_u;
-};
-
-struct hlist_nulls_node {
-	struct hlist_nulls_node *next;
-	struct hlist_nulls_node **pprev;
-};
-
-struct proto;
-
-struct inet_timewait_death_row;
-
-struct sock_common {
-	union {
-		__addrpair skc_addrpair;
-		struct {
-			__be32 skc_daddr;
-			__be32 skc_rcv_saddr;
-		};
-	};
-	union {
-		unsigned int skc_hash;
-		__u16 skc_u16hashes[2];
-	};
-	union {
-		__portpair skc_portpair;
-		struct {
-			__be16 skc_dport;
-			__u16 skc_num;
-		};
-	};
-	short unsigned int skc_family;
-	volatile unsigned char skc_state;
-	unsigned char skc_reuse: 4;
-	unsigned char skc_reuseport: 1;
-	unsigned char skc_ipv6only: 1;
-	unsigned char skc_net_refcnt: 1;
-	int skc_bound_dev_if;
-	union {
-		struct hlist_node skc_bind_node;
-		struct hlist_node skc_portaddr_node;
-	};
-	struct proto *skc_prot;
-	possible_net_t skc_net;
-	struct in6_addr skc_v6_daddr;
-	struct in6_addr skc_v6_rcv_saddr;
-	atomic64_t skc_cookie;
-	union {
-		long unsigned int skc_flags;
-		struct sock *skc_listener;
-		struct inet_timewait_death_row *skc_tw_dr;
-	};
-	int skc_dontcopy_begin[0];
-	union {
-		struct hlist_node skc_node;
-		struct hlist_nulls_node skc_nulls_node;
-	};
-	short unsigned int skc_tx_queue_mapping;
-	short unsigned int skc_rx_queue_mapping;
-	union {
-		int skc_incoming_cpu;
-		u32 skc_rcv_wnd;
-		u32 skc_tw_rcv_nxt;
-	};
-	refcount_t skc_refcnt;
-	int skc_dontcopy_end[0];
-	union {
-		u32 skc_rxhash;
-		u32 skc_window_clamp;
-		u32 skc_tw_snd_nxt;
-	};
-};
-
-typedef struct {
-	spinlock_t slock;
-	int owned;
-	wait_queue_head_t wq;
-} socket_lock_t;
-
-struct sk_buff;
-
-struct sk_buff_head {
-	struct sk_buff *next;
-	struct sk_buff *prev;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-typedef u64 netdev_features_t;
-
-struct sock_cgroup_data {
-	union {
-		struct {
-			u8 is_data: 1;
-			u8 no_refcnt: 1;
-			u8 unused: 6;
-			u8 padding;
-			u16 prioidx;
-			u32 classid;
-		};
-		u64 val;
-	};
-};
-
-struct sk_filter;
-
-struct socket_wq;
-
-struct xfrm_policy;
-
-struct dst_entry;
-
-struct socket;
-
-struct net_device;
-
-struct sock_reuseport;
-
-struct bpf_local_storage;
-
-struct sock {
-	struct sock_common __sk_common;
-	socket_lock_t sk_lock;
-	atomic_t sk_drops;
-	int sk_rcvlowat;
-	struct sk_buff_head sk_error_queue;
-	struct sk_buff *sk_rx_skb_cache;
-	struct sk_buff_head sk_receive_queue;
-	struct {
-		atomic_t rmem_alloc;
-		int len;
-		struct sk_buff *head;
-		struct sk_buff *tail;
-	} sk_backlog;
-	int sk_forward_alloc;
-	unsigned int sk_ll_usec;
-	unsigned int sk_napi_id;
-	int sk_rcvbuf;
-	struct sk_filter *sk_filter;
-	union {
-		struct socket_wq *sk_wq;
-		struct socket_wq *sk_wq_raw;
-	};
-	struct xfrm_policy *sk_policy[2];
-	struct dst_entry *sk_rx_dst;
-	struct dst_entry *sk_dst_cache;
-	atomic_t sk_omem_alloc;
-	int sk_sndbuf;
-	int sk_wmem_queued;
-	refcount_t sk_wmem_alloc;
-	long unsigned int sk_tsq_flags;
-	union {
-		struct sk_buff *sk_send_head;
-		struct rb_root tcp_rtx_queue;
-	};
-	struct sk_buff *sk_tx_skb_cache;
-	struct sk_buff_head sk_write_queue;
-	__s32 sk_peek_off;
-	int sk_write_pending;
-	__u32 sk_dst_pending_confirm;
-	u32 sk_pacing_status;
-	long int sk_sndtimeo;
-	struct timer_list sk_timer;
-	__u32 sk_priority;
-	__u32 sk_mark;
-	long unsigned int sk_pacing_rate;
-	long unsigned int sk_max_pacing_rate;
-	struct page_frag sk_frag;
-	netdev_features_t sk_route_caps;
-	netdev_features_t sk_route_nocaps;
-	netdev_features_t sk_route_forced_caps;
-	int sk_gso_type;
-	unsigned int sk_gso_max_size;
-	gfp_t sk_allocation;
-	__u32 sk_txhash;
-	u8 sk_padding: 1;
-	u8 sk_kern_sock: 1;
-	u8 sk_no_check_tx: 1;
-	u8 sk_no_check_rx: 1;
-	u8 sk_userlocks: 4;
-	u8 sk_pacing_shift;
-	u16 sk_type;
-	u16 sk_protocol;
-	u16 sk_gso_max_segs;
-	long unsigned int sk_lingertime;
-	struct proto *sk_prot_creator;
-	rwlock_t sk_callback_lock;
-	int sk_err;
-	int sk_err_soft;
-	u32 sk_ack_backlog;
-	u32 sk_max_ack_backlog;
-	kuid_t sk_uid;
-	struct pid *sk_peer_pid;
-	const struct cred *sk_peer_cred;
-	long int sk_rcvtimeo;
-	ktime_t sk_stamp;
-	u16 sk_tsflags;
-	u8 sk_shutdown;
-	u32 sk_tskey;
-	atomic_t sk_zckey;
-	u8 sk_clockid;
-	u8 sk_txtime_deadline_mode: 1;
-	u8 sk_txtime_report_errors: 1;
-	u8 sk_txtime_unused: 6;
-	struct socket *sk_socket;
-	void *sk_user_data;
-	void *sk_security;
-	struct sock_cgroup_data sk_cgrp_data;
-	struct mem_cgroup *sk_memcg;
-	void (*sk_state_change)(struct sock *);
-	void (*sk_data_ready)(struct sock *);
-	void (*sk_write_space)(struct sock *);
-	void (*sk_error_report)(struct sock *);
-	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
-	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
-	void (*sk_destruct)(struct sock *);
-	struct sock_reuseport *sk_reuseport_cb;
-	struct bpf_local_storage *sk_bpf_storage;
-	struct callback_head sk_rcu;
-};
-
-struct iovec {
-	void *iov_base;
-	__kernel_size_t iov_len;
-};
-
-struct kvec {
-	void *iov_base;
-	size_t iov_len;
-};
-
-struct iov_iter {
-	unsigned int type;
-	size_t iov_offset;
-	size_t count;
-	union {
-		const struct iovec *iov;
-		const struct kvec *kvec;
-		const struct bio_vec *bvec;
-		struct pipe_inode_info *pipe;
-	};
-	union {
-		long unsigned int nr_segs;
-		struct {
-			unsigned int head;
-			unsigned int start_head;
-		};
-	};
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	long unsigned int slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 typedef short unsigned int __kernel_sa_family_t;
@@ -9018,18 +10581,1728 @@
 	char sa_data[14];
 };
 
-struct msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iov_iter msg_iter;
+typedef unsigned int sk_buff_data_t;
+
+struct net_device;
+
+struct skb_ext;
+
+struct sk_buff {
 	union {
-		void *msg_control;
-		void *msg_control_user;
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				long unsigned int dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
 	};
-	bool msg_control_is_user: 1;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-	struct kiocb *msg_iocb;
+	union {
+		struct sock *sk;
+		int ip_defrag_offset;
+	};
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			long unsigned int _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		long unsigned int _sk_redir;
+	};
+	long unsigned int _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 redirected: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 redirected: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse *prot_inuse;
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+struct ipstats_mib {
+	u64 mibs[37];
+	struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+	long unsigned int mibs[28];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	long unsigned int mibs[6];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+	long unsigned int mibs[16];
+};
+
+struct udp_mib {
+	long unsigned int mibs[10];
+};
+
+struct linux_mib {
+	long unsigned int mibs[126];
+};
+
+struct netns_mib {
+	struct ipstats_mib *ip_statistics;
+	struct ipstats_mib *ipv6_statistics;
+	struct tcp_mib *tcp_statistics;
+	struct linux_mib *net_statistics;
+	struct udp_mib *udp_statistics;
+	struct udp_mib *udp_stats_in6;
+	struct udp_mib *udplite_statistics;
+	struct udp_mib *udplite_stats_in6;
+	struct icmp_mib *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long int high_thresh;
+	long int low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+struct ref_tracker_dir {};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+struct inet_timewait_death_row;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct inet_peer_base;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row *tcp_death_row;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain *ra_chain;
+	struct mutex ra_mutex;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	long unsigned int sysctl_tcp_comp_sack_delay_ns;
+	long unsigned int sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops *tcp_congestion_control;
+	struct tcp_fastopen_context *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	long unsigned int tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	long unsigned int *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+};
+
+struct dst_entry;
+
+struct neighbour;
+
+struct dst_ops {
+	short unsigned int family;
+	unsigned int gc_thresh;
+	int (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *, int);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	long unsigned int icmpv6_ratemask[4];
+	long unsigned int *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	bool skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	long unsigned int ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger *nf_loggers[13];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries *hooks_ipv4[5];
+	struct nf_hook_entries *hooks_ipv6[5];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+};
+
+struct nf_ct_event_notifier;
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+};
+
+struct ip_conntrack_stat;
+
+struct netns_ct {
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat *stat;
+	struct nf_ct_event_notifier *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head *state_bydst;
+	struct hlist_head *state_bysrc;
+	struct hlist_head *state_byspi;
+	struct hlist_head *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	int ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	struct netns_ipv4 ipv4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_ipv6 ipv6;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct net_generic *gen;
+	struct netns_bpf bpf;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct sock *diag_nlsk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	long unsigned int _metrics;
+	long unsigned int expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	short unsigned int flags;
+	short int obsolete;
+	short unsigned int header_len;
+	short unsigned int trailer_len;
+	atomic_t __refcnt;
+	int __use;
+	long unsigned int lastuse;
+	struct lwtunnel_state *lwtstate;
+	struct callback_head callback_head;
+	short int error;
+	short int __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+};
+
+typedef u64 netdev_features_t;
+
+struct net_device_stats {
+	long unsigned int rx_packets;
+	long unsigned int tx_packets;
+	long unsigned int rx_bytes;
+	long unsigned int tx_bytes;
+	long unsigned int rx_errors;
+	long unsigned int tx_errors;
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int multicast;
+	long unsigned int collisions;
+	long unsigned int rx_length_errors;
+	long unsigned int rx_over_errors;
+	long unsigned int rx_crc_errors;
+	long unsigned int rx_frame_errors;
+	long unsigned int rx_fifo_errors;
+	long unsigned int rx_missed_errors;
+	long unsigned int tx_aborted_errors;
+	long unsigned int tx_carrier_errors;
+	long unsigned int tx_fifo_errors;
+	long unsigned int tx_heartbeat_errors;
+	long unsigned int tx_window_errors;
+	long unsigned int rx_compressed;
+	long unsigned int tx_compressed;
+};
+
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+typedef struct {
+	struct net *net;
+} possible_net_t;
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+struct pcpu_dstats;
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct sfp_bus;
+
+struct udp_tunnel_nic;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct net_device_core_stats;
+
+struct ethtool_ops;
+
+struct ndisc_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct netdev_rx_queue;
+
+struct mini_Qdisc;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct netpoll_info;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct rtnl_link_ops;
+
+struct phy_device;
+
+struct udp_tunnel_nic_info;
+
+struct rtnl_hw_stats64;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias *ifalias;
+	long unsigned int mem_end;
+	long unsigned int mem_start;
+	long unsigned int base_addr;
+	long unsigned int state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	long long unsigned int priv_flags;
+	const struct net_device_ops *netdev_ops;
+	int ifindex;
+	short unsigned int gflags;
+	short unsigned int hard_header_len;
+	unsigned int mtu;
+	short unsigned int needed_headroom;
+	short unsigned int needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	short unsigned int type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct ethtool_ops *ethtool_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	short unsigned int neigh_priv_len;
+	short unsigned int dev_id;
+	short unsigned int dev_port;
+	short unsigned int padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device *ip_ptr;
+	struct inet6_dev *ip6_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog *xdp_prog;
+	long unsigned int gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	rx_handler_func_t *rx_handler;
+	void *rx_handler_data;
+	struct mini_Qdisc *miniq_ingress;
+	struct netdev_queue *ingress_queue;
+	struct nf_hook_entries *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue *xdp_bulkq;
+	struct xps_dev_maps *xps_maps[2];
+	struct mini_Qdisc *miniq_egress;
+	struct nf_hook_entries *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	struct netpoll_info *npinfo;
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	union {
+		struct pcpu_lstats *lstats;
+		struct pcpu_sw_netstats *tstats;
+		struct pcpu_dstats *dstats;
+	};
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct hh_cache {
+	unsigned int hh_len;
+	seqlock_t hh_lock;
+	long unsigned int hh_data[12];
+};
+
+struct neigh_table;
+
+struct neigh_parms;
+
+struct neigh_ops;
+
+struct neighbour {
+	struct neighbour *next;
+	struct neigh_table *tbl;
+	struct neigh_parms *parms;
+	long unsigned int confirmed;
+	long unsigned int updated;
+	rwlock_t lock;
+	refcount_t refcnt;
+	unsigned int arp_queue_len_bytes;
+	struct sk_buff_head arp_queue;
+	struct timer_list timer;
+	long unsigned int used;
+	atomic_t probes;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	u8 protocol;
+	u32 flags;
+	seqlock_t ha_lock;
+	long: 0;
+	unsigned char ha[32];
+	struct hh_cache hh;
+	int (*output)(struct neighbour *, struct sk_buff *);
+	const struct neigh_ops *ops;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	struct callback_head rcu;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u8 primary_key[0];
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	__MAX_BPF_ATTACH_TYPE = 44,
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+struct bpf_prog_stats;
+
+struct bpf_prog_aux;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats *stats;
+	int *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	union {
+		struct {
+			struct {} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	long unsigned int private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[1];
+	u8 chunks;
+	long: 0;
+	char data[0];
+};
+
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
+};
+
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize: 8;
+	u32 frame_sz: 24;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 flags;
+};
+
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
+};
+
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	u8 cookie[20];
+	u8 cookie_len;
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+		u16 strict_start_type;
+	};
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long int args[6];
+	};
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
 };
 
 typedef struct {
@@ -9128,406 +12401,267 @@
 	} ifr_ifru;
 };
 
-struct vfsmount {
-	struct dentry *mnt_root;
-	struct super_block *mnt_sb;
-	int mnt_flags;
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
 };
 
-struct ld_semaphore {
-	atomic_long_t count;
-	raw_spinlock_t wait_lock;
-	unsigned int wait_readers;
-	struct list_head read_wait;
-	struct list_head write_wait;
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
 };
 
-typedef unsigned int tcflag_t;
-
-typedef unsigned char cc_t;
-
-typedef unsigned int speed_t;
-
-struct ktermios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_cc[19];
-	cc_t c_line;
-	speed_t c_ispeed;
-	speed_t c_ospeed;
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
 };
 
-struct winsize {
-	short unsigned int ws_row;
-	short unsigned int ws_col;
-	short unsigned int ws_xpixel;
-	short unsigned int ws_ypixel;
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
 };
 
-struct tty_driver;
-
-struct tty_operations;
-
-struct tty_ldisc;
-
-struct termiox;
-
-struct tty_port;
-
-struct tty_struct {
-	int magic;
-	struct kref kref;
-	struct device *dev;
-	struct tty_driver *driver;
-	const struct tty_operations *ops;
-	int index;
-	struct ld_semaphore ldisc_sem;
-	struct tty_ldisc *ldisc;
-	struct mutex atomic_write_lock;
-	struct mutex legacy_mutex;
-	struct mutex throttle_mutex;
-	struct rw_semaphore termios_rwsem;
-	struct mutex winsize_mutex;
-	spinlock_t ctrl_lock;
-	spinlock_t flow_lock;
-	struct ktermios termios;
-	struct ktermios termios_locked;
-	struct termiox *termiox;
-	char name[64];
-	struct pid *pgrp;
-	struct pid *session;
-	long unsigned int flags;
-	int count;
-	struct winsize winsize;
-	long unsigned int stopped: 1;
-	long unsigned int flow_stopped: 1;
-	int: 30;
-	long unsigned int unused: 62;
-	int hw_stopped;
-	long unsigned int ctrl_status: 8;
-	long unsigned int packet: 1;
-	int: 23;
-	long unsigned int unused_ctrl: 55;
-	unsigned int receive_room;
-	int flow_change;
-	struct tty_struct *link;
-	struct fasync_struct *fasync;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t read_wait;
-	struct work_struct hangup_work;
-	void *disc_data;
-	void *driver_data;
-	spinlock_t files_lock;
-	struct list_head tty_files;
-	int closing;
-	unsigned char *write_buf;
-	int write_cnt;
-	struct work_struct SAK_work;
-	struct tty_port *port;
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
 };
 
-typedef struct {
-	size_t written;
-	size_t count;
-	union {
-		char *buf;
-		void *data;
-	} arg;
-	int error;
-} read_descriptor_t;
-
-struct posix_acl_entry {
-	short int e_tag;
-	short unsigned int e_perm;
-	union {
-		kuid_t e_uid;
-		kgid_t e_gid;
-	};
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
 };
 
-struct posix_acl {
-	refcount_t a_refcount;
-	struct callback_head a_rcu;
-	unsigned int a_count;
-	struct posix_acl_entry a_entries[0];
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short int cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
 };
 
-struct termiox {
-	__u16 x_hflag;
-	__u16 x_cflag;
-	__u16 x_rflag[5];
-	__u16 x_sflag;
+enum netdev_tx {
+	__NETDEV_TX_MIN = -2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
 };
 
-struct serial_icounter_struct;
+typedef enum netdev_tx netdev_tx_t;
 
-struct serial_struct;
-
-struct tty_operations {
-	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
-	int (*install)(struct tty_driver *, struct tty_struct *);
-	void (*remove)(struct tty_driver *, struct tty_struct *);
-	int (*open)(struct tty_struct *, struct file *);
-	void (*close)(struct tty_struct *, struct file *);
-	void (*shutdown)(struct tty_struct *);
-	void (*cleanup)(struct tty_struct *);
-	int (*write)(struct tty_struct *, const unsigned char *, int);
-	int (*put_char)(struct tty_struct *, unsigned char);
-	void (*flush_chars)(struct tty_struct *);
-	int (*write_room)(struct tty_struct *);
-	int (*chars_in_buffer)(struct tty_struct *);
-	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	void (*throttle)(struct tty_struct *);
-	void (*unthrottle)(struct tty_struct *);
-	void (*stop)(struct tty_struct *);
-	void (*start)(struct tty_struct *);
-	void (*hangup)(struct tty_struct *);
-	int (*break_ctl)(struct tty_struct *, int);
-	void (*flush_buffer)(struct tty_struct *);
-	void (*set_ldisc)(struct tty_struct *);
-	void (*wait_until_sent)(struct tty_struct *, int);
-	void (*send_xchar)(struct tty_struct *, char);
-	int (*tiocmget)(struct tty_struct *);
-	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
-	int (*resize)(struct tty_struct *, struct winsize *);
-	int (*set_termiox)(struct tty_struct *, struct termiox *);
-	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
-	int (*get_serial)(struct tty_struct *, struct serial_struct *);
-	int (*set_serial)(struct tty_struct *, struct serial_struct *);
-	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
-	int (*poll_init)(struct tty_driver *, int, char *);
-	int (*poll_get_char)(struct tty_driver *, int);
-	void (*poll_put_char)(struct tty_driver *, int, char);
-	int (*proc_show)(struct seq_file *, void *);
+struct net_device_core_stats {
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int rx_nohandler;
+	long unsigned int rx_otherhost_dropped;
 };
 
-struct tty_driver {
-	int magic;
-	struct kref kref;
-	struct cdev **cdevs;
-	struct module *owner;
-	const char *driver_name;
-	const char *name;
-	int name_base;
-	int major;
-	int minor_start;
-	unsigned int num;
-	short int type;
-	short int subtype;
-	struct ktermios init_termios;
-	long unsigned int flags;
-	struct proc_dir_entry *proc_entry;
-	struct tty_driver *other;
-	struct tty_struct **ttys;
-	struct tty_port **ports;
-	struct ktermios **termios;
-	void *driver_state;
-	const struct tty_operations *ops;
-	struct list_head tty_drivers;
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
 };
 
-struct tty_buffer {
-	union {
-		struct tty_buffer *next;
-		struct llist_node free;
-	};
-	int used;
-	int size;
-	int commit;
-	int read;
-	int flags;
-	long unsigned int data[0];
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc *qdisc;
+	struct Qdisc *qdisc_sleeping;
+	struct kobject kobj;
+	int numa_node;
+	long unsigned int tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	long: 64;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	long unsigned int trans_start;
+	long unsigned int state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
 };
 
-struct tty_bufhead {
-	struct tty_buffer *head;
-	struct work_struct work;
-	struct mutex lock;
-	atomic_t priority;
-	struct tty_buffer sentinel;
-	struct llist_head free;
-	atomic_t mem_used;
-	int mem_limit;
-	struct tty_buffer *tail;
-};
+struct net_rate_estimator;
 
-struct tty_port_operations;
-
-struct tty_port_client_operations;
-
-struct tty_port {
-	struct tty_bufhead buf;
-	struct tty_struct *tty;
-	struct tty_struct *itty;
-	const struct tty_port_operations *ops;
-	const struct tty_port_client_operations *client_ops;
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
 	spinlock_t lock;
-	int blocked_open;
-	int count;
-	wait_queue_head_t open_wait;
-	wait_queue_head_t delta_msr_wait;
-	long unsigned int flags;
-	long unsigned int iflags;
-	unsigned char console: 1;
-	unsigned char low_latency: 1;
-	struct mutex mutex;
-	struct mutex buf_mutex;
-	unsigned char *xmit_buf;
-	unsigned int close_delay;
-	unsigned int closing_wait;
-	int drain_delay;
-	struct kref kref;
-	void *client_data;
 };
 
-struct tty_ldisc_ops {
-	int magic;
-	char *name;
-	int num;
-	int flags;
-	int (*open)(struct tty_struct *);
-	void (*close)(struct tty_struct *);
-	void (*flush_buffer)(struct tty_struct *);
-	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t);
-	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
-	int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
-	int (*hangup)(struct tty_struct *);
-	void (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);
-	void (*write_wakeup)(struct tty_struct *);
-	void (*dcd_change)(struct tty_struct *, unsigned int);
-	int (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);
-	struct module *owner;
-	int refcount;
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
 };
 
-struct tty_ldisc {
-	struct tty_ldisc_ops *ops;
-	struct tty_struct *tty;
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
 };
 
-struct tty_port_operations {
-	int (*carrier_raised)(struct tty_port *);
-	void (*dtr_rts)(struct tty_port *, int);
-	void (*shutdown)(struct tty_port *);
-	int (*activate)(struct tty_port *, struct tty_struct *);
-	void (*destruct)(struct tty_port *);
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator *rate_est;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	long unsigned int state;
+	long unsigned int state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long int privdata[0];
 };
 
-struct tty_port_client_operations {
-	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct tty_port *);
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
 };
 
-struct prot_inuse;
-
-struct netns_core {
-	struct ctl_table_header *sysctl_hdr;
-	int sysctl_somaxconn;
-	int *sock_inuse;
-	struct prot_inuse *prot_inuse;
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
 };
 
-struct tcp_mib;
-
-struct ipstats_mib;
-
-struct linux_mib;
-
-struct udp_mib;
-
-struct icmp_mib;
-
-struct icmpmsg_mib;
-
-struct icmpv6_mib;
-
-struct icmpv6msg_mib;
-
-struct linux_tls_mib;
-
-struct mptcp_mib;
-
-struct netns_mib {
-	struct tcp_mib *tcp_statistics;
-	struct ipstats_mib *ip_statistics;
-	struct linux_mib *net_statistics;
-	struct udp_mib *udp_statistics;
-	struct udp_mib *udplite_statistics;
-	struct icmp_mib *icmp_statistics;
-	struct icmpmsg_mib *icmpmsg_statistics;
-	struct proc_dir_entry *proc_net_devsnmp6;
-	struct udp_mib *udp_stats_in6;
-	struct udp_mib *udplite_stats_in6;
-	struct ipstats_mib *ipv6_statistics;
-	struct icmpv6_mib *icmpv6_statistics;
-	struct icmpv6msg_mib *icmpv6msg_statistics;
-	struct linux_tls_mib *tls_statistics;
-	struct mptcp_mib *mptcp_statistics;
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
 };
 
-struct netns_packet {
-	struct mutex sklist_lock;
-	struct hlist_head sklist;
-};
-
-struct netns_unix {
-	int sysctl_max_dgram_qlen;
-	struct ctl_table_header *ctl;
-};
-
-struct netns_nexthop {
-	struct rb_root rb_root;
-	struct hlist_head *devhash;
-	unsigned int seq;
-	u32 last_id_allocated;
-	struct blocking_notifier_head notifier_chain;
-};
-
-struct local_ports {
-	seqlock_t lock;
-	int range[2];
-	bool warned;
-};
-
-struct inet_hashinfo;
-
-struct inet_timewait_death_row {
-	atomic_t tw_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_hashinfo *hashinfo;
-	int sysctl_max_tw_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map *rps_map;
+	struct rps_dev_flow_table *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -9535,722 +12669,105 @@
 	long: 64;
 };
 
-struct ping_group_range {
-	seqlock_t lock;
-	kgid_t range[2];
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
 };
 
-typedef struct {
-	u64 key[2];
-} siphash_key_t;
-
-struct ipv4_devconf;
-
-struct ip_ra_chain;
-
-struct fib_rules_ops;
-
-struct fib_table;
-
-struct inet_peer_base;
-
-struct fqdir;
-
-struct xt_table;
-
-struct tcp_congestion_ops;
-
-struct tcp_fastopen_context;
-
-struct fib_notifier_ops;
-
-struct netns_ipv4 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	int fib_num_tclassid_users;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_autobind_reuse;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_raw_l3mdev_accept;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_nexthop_compat_mode;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_l3mdev_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_no_ssthresh_metrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	long unsigned int sysctl_tcp_comp_sack_slack_ns;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_tcp_reflect_tos;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_udp_l3mdev_accept;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct list_head mr_tables;
-	struct fib_rules_ops *mr_rules_ops;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map *attr_map[0];
 };
 
-struct netns_sysctl_ipv6 {
-	struct ctl_table_header *hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *icmp_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *xfrm6_hdr;
-	int bindv6only;
-	int flush_delay;
-	int ip6_rt_max_size;
-	int ip6_rt_gc_min_interval;
-	int ip6_rt_gc_timeout;
-	int ip6_rt_gc_interval;
-	int ip6_rt_gc_elasticity;
-	int ip6_rt_mtu_expires;
-	int ip6_rt_min_advmss;
-	int multipath_hash_policy;
-	int flowlabel_consistency;
-	int auto_flowlabels;
-	int icmpv6_time;
-	int icmpv6_echo_ignore_all;
-	int icmpv6_echo_ignore_multicast;
-	int icmpv6_echo_ignore_anycast;
-	long unsigned int icmpv6_ratemask[4];
-	long unsigned int *icmpv6_ratemask_ptr;
-	int anycast_src_echo_reply;
-	int ip_nonlocal_bind;
-	int fwmark_reflect;
-	int idgen_retries;
-	int idgen_delay;
-	int flowlabel_state_ranges;
-	int flowlabel_reflect;
-	int max_dst_opts_cnt;
-	int max_hbh_opts_cnt;
-	int max_dst_opts_len;
-	int max_hbh_opts_len;
-	int seg6_flowlabel;
-	bool skip_notify_on_dev_down;
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
 };
 
-struct neighbour;
-
-struct dst_ops {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
-	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
 };
 
-struct ipv6_devconf;
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
 
-struct fib6_info;
-
-struct rt6_info;
-
-struct rt6_statistics;
-
-struct fib6_table;
-
-struct seg6_pernet_data;
-
-struct netns_ipv6 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	unsigned int fib6_routes_require_src;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct list_head mr6_tables;
-	struct fib_rules_ops *mr6_rules_ops;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
 	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+		u16 id;
+		__be16 proto;
+	} vlan[2];
 };
 
-struct netns_sysctl_lowpan {
-	struct ctl_table_header *frags_hdr;
+enum tc_setup_type {
+	TC_SETUP_QDISC_MQPRIO = 0,
+	TC_SETUP_CLSU32 = 1,
+	TC_SETUP_CLSFLOWER = 2,
+	TC_SETUP_CLSMATCHALL = 3,
+	TC_SETUP_CLSBPF = 4,
+	TC_SETUP_BLOCK = 5,
+	TC_SETUP_QDISC_CBS = 6,
+	TC_SETUP_QDISC_RED = 7,
+	TC_SETUP_QDISC_PRIO = 8,
+	TC_SETUP_QDISC_MQ = 9,
+	TC_SETUP_QDISC_ETF = 10,
+	TC_SETUP_ROOT_QDISC = 11,
+	TC_SETUP_QDISC_GRED = 12,
+	TC_SETUP_QDISC_TAPRIO = 13,
+	TC_SETUP_FT = 14,
+	TC_SETUP_QDISC_ETS = 15,
+	TC_SETUP_QDISC_TBF = 16,
+	TC_SETUP_QDISC_FIFO = 17,
+	TC_SETUP_QDISC_HTB = 18,
+	TC_SETUP_ACT = 19,
 };
 
-struct netns_ieee802154_lowpan {
-	struct netns_sysctl_lowpan sysctl;
-	struct fqdir *fqdir;
-};
-
-struct sctp_mib;
-
-struct netns_sctp {
-	struct sctp_mib *sctp_statistics;
-	struct proc_dir_entry *proc_net_sctp;
-	struct ctl_table_header *sysctl_header;
-	struct sock *ctl_sock;
-	struct list_head local_addr_list;
-	struct list_head addr_waitq;
-	struct timer_list addr_wq_timer;
-	struct list_head auto_asconf_splist;
-	spinlock_t addr_wq_lock;
-	spinlock_t local_addr_lock;
-	unsigned int rto_initial;
-	unsigned int rto_min;
-	unsigned int rto_max;
-	int rto_alpha;
-	int rto_beta;
-	int max_burst;
-	int cookie_preserve_enable;
-	char *sctp_hmac_alg;
-	unsigned int valid_cookie_life;
-	unsigned int sack_timeout;
-	unsigned int hb_interval;
-	int max_retrans_association;
-	int max_retrans_path;
-	int max_retrans_init;
-	int pf_retrans;
-	int ps_retrans;
-	int pf_enable;
-	int pf_expose;
-	int sndbuf_policy;
-	int rcvbuf_policy;
-	int default_auto_asconf;
-	int addip_enable;
-	int addip_noauth;
-	int prsctp_enable;
-	int reconf_enable;
-	int auth_enable;
-	int intl_enable;
-	int ecn_enable;
-	int scope_policy;
-	int rwnd_upd_shift;
-	long unsigned int max_autoclose;
-};
-
-struct netns_dccp {
-	struct sock *v4_ctl_sk;
-	struct sock *v6_ctl_sk;
-};
-
-struct nf_queue_handler;
-
-struct nf_logger;
-
-struct nf_hook_entries;
-
-struct netns_nf {
-	struct proc_dir_entry *proc_netfilter;
-	const struct nf_queue_handler *queue_handler;
-	const struct nf_logger *nf_loggers[13];
-	struct ctl_table_header *nf_log_dir_header;
-	struct nf_hook_entries *hooks_ipv4[5];
-	struct nf_hook_entries *hooks_ipv6[5];
-	struct nf_hook_entries *hooks_arp[3];
-	struct nf_hook_entries *hooks_bridge[5];
-	struct nf_hook_entries *hooks_decnet[7];
-	bool defrag_ipv4;
-	bool defrag_ipv6;
-};
-
-struct ebt_table;
-
-struct netns_xt {
-	struct list_head tables[13];
-	bool notrack_deprecated_warning;
-	bool clusterip_deprecated_warning;
-	struct ebt_table *broute_table;
-	struct ebt_table *frame_filter;
-	struct ebt_table *frame_nat;
-};
-
-struct nf_generic_net {
-	unsigned int timeout;
-};
-
-struct nf_tcp_net {
-	unsigned int timeouts[14];
-	int tcp_loose;
-	int tcp_be_liberal;
-	int tcp_max_retrans;
-};
-
-struct nf_udp_net {
-	unsigned int timeouts[2];
-};
-
-struct nf_icmp_net {
-	unsigned int timeout;
-};
-
-struct nf_dccp_net {
-	int dccp_loose;
-	unsigned int dccp_timeout[10];
-};
-
-struct nf_sctp_net {
-	unsigned int timeouts[10];
-};
-
-struct nf_gre_net {
-	struct list_head keymap_list;
-	unsigned int timeouts[2];
-};
-
-struct nf_ip_net {
-	struct nf_generic_net generic;
-	struct nf_tcp_net tcp;
-	struct nf_udp_net udp;
-	struct nf_icmp_net icmp;
-	struct nf_icmp_net icmpv6;
-	struct nf_dccp_net dccp;
-	struct nf_sctp_net sctp;
-	struct nf_gre_net gre;
-};
-
-struct ct_pcpu;
-
-struct ip_conntrack_stat;
-
-struct nf_ct_event_notifier;
-
-struct nf_exp_event_notifier;
-
-struct netns_ct {
-	atomic_t count;
-	unsigned int expect_count;
-	struct delayed_work ecache_dwork;
-	bool ecache_dwork_pending;
-	bool auto_assign_helper_warned;
-	struct ctl_table_header *sysctl_header;
-	unsigned int sysctl_log_invalid;
-	int sysctl_events;
-	int sysctl_acct;
-	int sysctl_auto_assign_helper;
-	int sysctl_tstamp;
-	int sysctl_checksum;
-	struct ct_pcpu *pcpu_lists;
-	struct ip_conntrack_stat *stat;
-	struct nf_ct_event_notifier *nf_conntrack_event_cb;
-	struct nf_exp_event_notifier *nf_expect_event_cb;
-	struct nf_ip_net nf_ct_proto;
-	unsigned int labels_used;
-};
-
-struct netns_nftables {
-	struct list_head tables;
-	struct list_head commit_list;
-	struct list_head module_list;
-	struct list_head notify_list;
-	struct mutex commit_mutex;
-	unsigned int base_seq;
-	u8 gencursor;
-	u8 validate_state;
-};
-
-struct netns_nf_frag {
-	struct fqdir *fqdir;
-};
-
-struct netns_bpf {
-	struct bpf_prog_array *run_array[2];
-	struct bpf_prog *progs[2];
-	struct list_head links[2];
-};
-
-struct xfrm_policy_hash {
-	struct hlist_head *table;
-	unsigned int hmask;
-	u8 dbits4;
-	u8 sbits4;
-	u8 dbits6;
-	u8 sbits6;
-};
-
-struct xfrm_policy_hthresh {
-	struct work_struct work;
-	seqlock_t lock;
-	u8 lbits4;
-	u8 rbits4;
-	u8 lbits6;
-	u8 rbits6;
-};
-
-struct netns_xfrm {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops xfrm4_dst_ops;
-	struct dst_ops xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_ipvs;
-
-struct mpls_route;
-
-struct netns_mpls {
-	int ip_ttl_propagate;
-	int default_ttl;
-	size_t platform_labels;
-	struct mpls_route **platform_label;
-	struct ctl_table_header *ctl;
-};
-
-struct can_dev_rcv_lists;
-
-struct can_pkg_stats;
-
-struct can_rcv_lists_stats;
-
-struct netns_can {
-	struct proc_dir_entry *proc_dir;
-	struct proc_dir_entry *pde_stats;
-	struct proc_dir_entry *pde_reset_stats;
-	struct proc_dir_entry *pde_rcvlist_all;
-	struct proc_dir_entry *pde_rcvlist_fil;
-	struct proc_dir_entry *pde_rcvlist_inv;
-	struct proc_dir_entry *pde_rcvlist_sff;
-	struct proc_dir_entry *pde_rcvlist_eff;
-	struct proc_dir_entry *pde_rcvlist_err;
-	struct proc_dir_entry *bcmproc_dir;
-	struct can_dev_rcv_lists *rx_alldev_list;
-	spinlock_t rcvlists_lock;
-	struct timer_list stattimer;
-	struct can_pkg_stats *pkg_stats;
-	struct can_rcv_lists_stats *rcv_lists_stats;
-	struct hlist_head cgw_list;
-};
-
-struct netns_xdp {
-	struct mutex lock;
-	struct hlist_head list;
-};
-
-struct uevent_sock;
-
-struct net_generic;
-
-struct net {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct idr netns_ids;
-	struct ns_common ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4 ipv4;
-	struct netns_ipv6 ipv6;
-	struct netns_ieee802154_lowpan ieee802154_lowpan;
-	struct netns_sctp sctp;
-	struct netns_dccp dccp;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nftables nft;
-	struct netns_nf_frag nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct list_head nfnl_acct_list;
-	struct list_head nfct_timeout_list;
-	struct sk_buff_head wext_nlevents;
-	struct net_generic *gen;
-	struct netns_bpf bpf;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm xfrm;
-	atomic64_t net_cookie;
-	struct netns_ipvs *ipvs;
-	struct netns_mpls mpls;
-	struct netns_can can;
-	struct netns_xdp xdp;
-	struct sock *crypto_nlsk;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	local64_t v;
-} u64_stats_t;
-
-struct bpf_insn {
-	__u8 code;
-	__u8 dst_reg: 4;
-	__u8 src_reg: 4;
-	__s16 off;
-	__s32 imm;
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
 };
 
 enum bpf_map_type {
@@ -10283,82 +12800,433 @@
 	BPF_MAP_TYPE_STRUCT_OPS = 26,
 	BPF_MAP_TYPE_RINGBUF = 27,
 	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
 };
 
-enum bpf_prog_type {
-	BPF_PROG_TYPE_UNSPEC = 0,
-	BPF_PROG_TYPE_SOCKET_FILTER = 1,
-	BPF_PROG_TYPE_KPROBE = 2,
-	BPF_PROG_TYPE_SCHED_CLS = 3,
-	BPF_PROG_TYPE_SCHED_ACT = 4,
-	BPF_PROG_TYPE_TRACEPOINT = 5,
-	BPF_PROG_TYPE_XDP = 6,
-	BPF_PROG_TYPE_PERF_EVENT = 7,
-	BPF_PROG_TYPE_CGROUP_SKB = 8,
-	BPF_PROG_TYPE_CGROUP_SOCK = 9,
-	BPF_PROG_TYPE_LWT_IN = 10,
-	BPF_PROG_TYPE_LWT_OUT = 11,
-	BPF_PROG_TYPE_LWT_XMIT = 12,
-	BPF_PROG_TYPE_SOCK_OPS = 13,
-	BPF_PROG_TYPE_SK_SKB = 14,
-	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
-	BPF_PROG_TYPE_SK_MSG = 16,
-	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
-	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
-	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
-	BPF_PROG_TYPE_LIRC_MODE2 = 20,
-	BPF_PROG_TYPE_SK_REUSEPORT = 21,
-	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
-	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
-	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
-	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
-	BPF_PROG_TYPE_TRACING = 26,
-	BPF_PROG_TYPE_STRUCT_OPS = 27,
-	BPF_PROG_TYPE_EXT = 28,
-	BPF_PROG_TYPE_LSM = 29,
-	BPF_PROG_TYPE_SK_LOOKUP = 30,
+struct bpf_map_ops;
+
+struct bpf_map_value_off;
+
+struct btf;
+
+struct bpf_map_off_arr;
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	int spin_lock_off;
+	struct bpf_map_value_off *kptr_off_tab;
+	int timer_off;
+	u32 id;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	struct bpf_map_off_arr *off_arr;
+	long: 64;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	struct work_struct work;
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	long: 64;
+	long: 64;
 };
 
-enum bpf_attach_type {
-	BPF_CGROUP_INET_INGRESS = 0,
-	BPF_CGROUP_INET_EGRESS = 1,
-	BPF_CGROUP_INET_SOCK_CREATE = 2,
-	BPF_CGROUP_SOCK_OPS = 3,
-	BPF_SK_SKB_STREAM_PARSER = 4,
-	BPF_SK_SKB_STREAM_VERDICT = 5,
-	BPF_CGROUP_DEVICE = 6,
-	BPF_SK_MSG_VERDICT = 7,
-	BPF_CGROUP_INET4_BIND = 8,
-	BPF_CGROUP_INET6_BIND = 9,
-	BPF_CGROUP_INET4_CONNECT = 10,
-	BPF_CGROUP_INET6_CONNECT = 11,
-	BPF_CGROUP_INET4_POST_BIND = 12,
-	BPF_CGROUP_INET6_POST_BIND = 13,
-	BPF_CGROUP_UDP4_SENDMSG = 14,
-	BPF_CGROUP_UDP6_SENDMSG = 15,
-	BPF_LIRC_MODE2 = 16,
-	BPF_FLOW_DISSECTOR = 17,
-	BPF_CGROUP_SYSCTL = 18,
-	BPF_CGROUP_UDP4_RECVMSG = 19,
-	BPF_CGROUP_UDP6_RECVMSG = 20,
-	BPF_CGROUP_GETSOCKOPT = 21,
-	BPF_CGROUP_SETSOCKOPT = 22,
-	BPF_TRACE_RAW_TP = 23,
-	BPF_TRACE_FENTRY = 24,
-	BPF_TRACE_FEXIT = 25,
-	BPF_MODIFY_RETURN = 26,
-	BPF_LSM_MAC = 27,
-	BPF_TRACE_ITER = 28,
-	BPF_CGROUP_INET4_GETPEERNAME = 29,
-	BPF_CGROUP_INET6_GETPEERNAME = 30,
-	BPF_CGROUP_INET4_GETSOCKNAME = 31,
-	BPF_CGROUP_INET6_GETSOCKNAME = 32,
-	BPF_XDP_DEVMAP = 33,
-	BPF_CGROUP_INET_SOCK_RELEASE = 34,
-	BPF_XDP_CPUMAP = 35,
-	BPF_SK_LOOKUP = 36,
-	BPF_XDP = 37,
-	__MAX_BPF_ATTACH_TYPE = 38,
+struct bpf_map_dev_ops;
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xsk_buff_pool;
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+struct devlink_port;
+
+struct ip_tunnel_parm;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	void (*ndo_poll_controller)(struct net_device *);
+	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
+	void (*ndo_netpoll_cleanup)(struct net_device *);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+struct tcf_proto;
+
+struct tcf_block;
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	long unsigned int rcu_state;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
 };
 
 union bpf_attr {
@@ -10376,6 +13244,7 @@
 		__u32 btf_key_type_id;
 		__u32 btf_value_type_id;
 		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
 	};
 	struct {
 		__u32 map_fd;
@@ -10417,7 +13286,14 @@
 		__u64 line_info;
 		__u32 line_info_cnt;
 		__u32 attach_btf_id;
-		__u32 attach_prog_fd;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
 	};
 	struct {
 		__u64 pathname;
@@ -10446,6 +13322,7 @@
 		__u64 ctx_out;
 		__u32 flags;
 		__u32 cpu;
+		__u32 batch_size;
 	} test;
 	struct {
 		union {
@@ -10470,6 +13347,7 @@
 		__u32 attach_flags;
 		__u64 prog_ids;
 		__u32 prog_cnt;
+		__u64 prog_attach_flags;
 	} query;
 	struct {
 		__u64 name;
@@ -10507,6 +13385,20 @@
 				__u64 iter_info;
 				__u32 iter_info_len;
 			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
 		};
 	} link_create;
 	struct {
@@ -10544,12 +13436,23 @@
 	__u32 line_col;
 };
 
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
 struct bpf_iter_aux_info;
 
 typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
 
-struct bpf_map;
-
 struct bpf_iter_aux_info {
 	struct bpf_map *map;
 };
@@ -10563,14 +13466,12 @@
 	u32 seq_priv_size;
 };
 
-struct btf;
-
-struct btf_type;
-
-struct bpf_prog_aux;
-
 struct bpf_local_storage_map;
 
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
 struct bpf_map_ops {
 	int (*map_alloc_check)(union bpf_attr *);
 	struct bpf_map * (*map_alloc)(union bpf_attr *);
@@ -10580,6 +13481,7 @@
 	void (*map_release_uref)(struct bpf_map *);
 	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
 	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
 	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
 	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
 	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
@@ -10589,6 +13491,7 @@
 	int (*map_push_elem)(struct bpf_map *, void *, u64);
 	int (*map_pop_elem)(struct bpf_map *, void *);
 	int (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
 	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
 	void (*map_fd_put_ptr)(void *);
 	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
@@ -10605,52 +13508,14 @@
 	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
 	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
 	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
+	int (*map_redirect)(struct bpf_map *, u32, u64);
 	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
-	const char * const map_btf_name;
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
 	int *map_btf_id;
 	const struct bpf_iter_seq_info *iter_seq_info;
 };
 
-struct bpf_map_memory {
-	u32 pages;
-	struct user_struct *user;
-};
-
-struct bpf_map {
-	const struct bpf_map_ops *ops;
-	struct bpf_map *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	u32 btf_vmlinux_value_type_id;
-	bool bypass_spec_v1;
-	bool frozen;
-	long: 16;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct btf_header {
 	__u16 magic;
 	__u8 version;
@@ -10662,6 +13527,10 @@
 	__u32 str_len;
 };
 
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
 struct btf {
 	void *data;
 	struct btf_type **types;
@@ -10676,23 +13545,13 @@
 	refcount_t refcnt;
 	u32 id;
 	struct callback_head rcu;
-};
-
-struct btf_type {
-	__u32 name_off;
-	__u32 info;
-	union {
-		__u32 size;
-		__u32 type;
-	};
-};
-
-enum bpf_tramp_prog_type {
-	BPF_TRAMP_FENTRY = 0,
-	BPF_TRAMP_FEXIT = 1,
-	BPF_TRAMP_MODIFY_RETURN = 2,
-	BPF_TRAMP_MAX = 3,
-	BPF_TRAMP_REPLACE = 4,
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
 };
 
 struct bpf_ksym {
@@ -10710,17 +13569,22 @@
 
 struct bpf_jit_poke_descriptor;
 
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
 struct bpf_prog_ops;
 
+struct btf_mod_pair;
+
 struct bpf_prog_offload;
 
 struct bpf_func_info_aux;
 
-struct bpf_prog_stats;
-
 struct bpf_prog_aux {
 	atomic64_t refcnt;
 	u32 used_map_cnt;
+	u32 used_btf_cnt;
 	u32 max_ctx_offset;
 	u32 max_pkt_offset;
 	u32 max_tp_access;
@@ -10732,6 +13596,7 @@
 	u32 ctx_arg_info_size;
 	u32 max_rdonly_access;
 	u32 max_rdwr_access;
+	struct btf *attach_btf;
 	const struct bpf_ctx_arg_aux *ctx_arg_info;
 	struct mutex dst_mutex;
 	struct bpf_prog *dst_prog;
@@ -10744,24 +13609,27 @@
 	bool func_proto_unreliable;
 	bool sleepable;
 	bool tail_call_reachable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct hlist_node tramp_hlist;
+	bool xdp_has_frags;
 	const struct btf_type *attach_func_proto;
 	const char *attach_func_name;
 	struct bpf_prog **func;
 	void *jit_data;
 	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
 	u32 size_poke_tab;
 	struct bpf_ksym ksym;
 	const struct bpf_prog_ops *ops;
 	struct bpf_map **used_maps;
 	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
 	struct bpf_prog *prog;
 	struct user_struct *user;
 	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
 	struct bpf_map *cgroup_storage[2];
 	char name[16];
-	void *security;
 	struct bpf_prog_offload *offload;
 	struct btf *btf;
 	struct bpf_func_info *func_info;
@@ -10773,48 +13641,38 @@
 	u32 linfo_idx;
 	u32 num_exentries;
 	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
 	union {
 		struct work_struct work;
 		struct callback_head rcu;
 	};
 };
 
-struct sock_filter {
-	__u16 code;
-	__u8 jt;
-	__u8 jf;
-	__u32 k;
+enum bpf_kptr_type {
+	BPF_KPTR_UNREF = 0,
+	BPF_KPTR_REF = 1,
 };
 
-struct sock_fprog_kern;
-
-struct bpf_prog {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	u16 call_get_stack: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	struct sock_filter insns[0];
-	struct bpf_insn insnsi[0];
+struct bpf_map_value_off_desc {
+	u32 offset;
+	enum bpf_kptr_type type;
+	struct {
+		struct btf *btf;
+		struct module *module;
+		btf_dtor_kfunc_t dtor;
+		u32 btf_id;
+	} kptr;
 };
 
-struct bpf_offloaded_map;
+struct bpf_map_value_off {
+	u32 nr_off;
+	struct bpf_map_value_off_desc off[0];
+};
+
+struct bpf_map_off_arr {
+	u32 cnt;
+	u32 field_off[10];
+	u8 field_sz[10];
+};
 
 struct bpf_map_dev_ops {
 	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
@@ -10823,381 +13681,34 @@
 	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
 };
 
-struct bpf_offloaded_map {
-	struct bpf_map map;
-	struct net_device *netdev;
-	const struct bpf_map_dev_ops *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net_device_stats {
-	long unsigned int rx_packets;
-	long unsigned int tx_packets;
-	long unsigned int rx_bytes;
-	long unsigned int tx_bytes;
-	long unsigned int rx_errors;
-	long unsigned int tx_errors;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	long unsigned int multicast;
-	long unsigned int collisions;
-	long unsigned int rx_length_errors;
-	long unsigned int rx_over_errors;
-	long unsigned int rx_crc_errors;
-	long unsigned int rx_frame_errors;
-	long unsigned int rx_fifo_errors;
-	long unsigned int rx_missed_errors;
-	long unsigned int tx_aborted_errors;
-	long unsigned int tx_carrier_errors;
-	long unsigned int tx_fifo_errors;
-	long unsigned int tx_heartbeat_errors;
-	long unsigned int tx_window_errors;
-	long unsigned int rx_compressed;
-	long unsigned int tx_compressed;
-};
-
-struct netdev_hw_addr_list {
-	struct list_head list;
-	int count;
-};
-
-struct tipc_bearer;
-
-struct dn_dev;
-
-struct mpls_dev;
-
-enum rx_handler_result {
-	RX_HANDLER_CONSUMED = 0,
-	RX_HANDLER_ANOTHER = 1,
-	RX_HANDLER_EXACT = 2,
-	RX_HANDLER_PASS = 3,
-};
-
-typedef enum rx_handler_result rx_handler_result_t;
-
-typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
-
-struct pcpu_dstats;
-
-struct garp_port;
-
-struct mrp_port;
-
-struct netdev_tc_txq {
-	u16 count;
-	u16 offset;
-};
-
-struct macsec_ops;
-
-struct udp_tunnel_nic;
-
-struct bpf_xdp_link;
-
-struct bpf_xdp_entity {
-	struct bpf_prog *prog;
-	struct bpf_xdp_link *link;
-};
-
-struct netdev_name_node;
-
-struct dev_ifalias;
-
-struct iw_handler_def;
-
-struct iw_public_data;
-
-struct net_device_ops;
-
-struct ethtool_ops;
-
-struct l3mdev_ops;
-
-struct ndisc_ops;
-
-struct xfrmdev_ops;
-
-struct tlsdev_ops;
-
-struct header_ops;
-
-struct vlan_info;
-
-struct dsa_port;
-
-struct in_device;
-
-struct inet6_dev;
-
-struct wireless_dev;
-
-struct wpan_dev;
-
-struct netdev_rx_queue;
-
-struct mini_Qdisc;
-
-struct netdev_queue;
-
-struct cpu_rmap;
-
-struct Qdisc;
-
-struct xdp_dev_bulk_queue;
-
-struct xps_dev_maps;
-
-struct netpoll_info;
-
-struct pcpu_lstats;
-
-struct pcpu_sw_netstats;
-
-struct rtnl_link_ops;
-
-struct dcbnl_rtnl_ops;
-
-struct netprio_map;
-
-struct phy_device;
-
-struct sfp_bus;
-
-struct udp_tunnel_nic_info;
-
-struct net_device {
-	char name[16];
-	struct netdev_name_node *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct iw_handler_def *wireless_handlers;
-	struct iw_public_data *wireless_data;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops *ethtool_ops;
-	const struct l3mdev_ops *l3mdev_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct xfrmdev_ops *xfrmdev_ops;
-	const struct tlsdev_ops *tlsdev_ops;
-	const struct header_ops *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	unsigned char name_assign_type;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	bool uc_promisc;
-	struct vlan_info *vlan_info;
-	struct dsa_port *dsa_ptr;
-	struct tipc_bearer *tipc_ptr;
-	void *atalk_ptr;
-	struct in_device *ip_ptr;
-	struct dn_dev *dn_ptr;
-	struct inet6_dev *ip6_ptr;
-	void *ax25_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	struct mpls_dev *mpls_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	int napi_defer_hard_irqs;
-	rx_handler_func_t *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc *miniq_ingress;
-	struct netdev_queue *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc *qdisc;
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	struct xdp_dev_bulk_queue *xdp_bulkq;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc *miniq_egress;
-	struct hlist_head qdisc_hash[16];
-	struct timer_list watchdog_timer;
-	int watchdog_timeo;
-	u32 proto_down_reason;
-	struct list_head todo_list;
-	int *pcpu_refcnt;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED = 0,
-		NETREG_REGISTERED = 1,
-		NETREG_UNREGISTERING = 2,
-		NETREG_UNREGISTERED = 3,
-		NETREG_RELEASED = 4,
-		NETREG_DUMMY = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED = 0,
-		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device *);
-	struct netpoll_info *npinfo;
-	possible_net_t nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct garp_port *garp_port;
-	struct mrp_port *mrp_port;
-	struct device dev;
-	const struct attribute_group *sysfs_groups[4];
-	const struct attribute_group *sysfs_rx_queue_group;
-	const struct rtnl_link_ops *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	const struct dcbnl_rtnl_ops *dcbnl_ops;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	unsigned int fcoe_ddp_xid;
-	struct netprio_map *priomap;
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key *qdisc_tx_busylock;
-	struct lock_class_key *qdisc_running_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-	struct list_head net_notifier_list;
-	const struct macsec_ops *macsec_ops;
-	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
-	struct udp_tunnel_nic *udp_tunnel_nic;
-	struct bpf_xdp_entity xdp_state[3];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 enum bpf_reg_type {
 	NOT_INIT = 0,
 	SCALAR_VALUE = 1,
 	PTR_TO_CTX = 2,
 	CONST_PTR_TO_MAP = 3,
 	PTR_TO_MAP_VALUE = 4,
-	PTR_TO_MAP_VALUE_OR_NULL = 5,
+	PTR_TO_MAP_KEY = 5,
 	PTR_TO_STACK = 6,
 	PTR_TO_PACKET_META = 7,
 	PTR_TO_PACKET = 8,
 	PTR_TO_PACKET_END = 9,
 	PTR_TO_FLOW_KEYS = 10,
 	PTR_TO_SOCKET = 11,
-	PTR_TO_SOCKET_OR_NULL = 12,
-	PTR_TO_SOCK_COMMON = 13,
-	PTR_TO_SOCK_COMMON_OR_NULL = 14,
-	PTR_TO_TCP_SOCK = 15,
-	PTR_TO_TCP_SOCK_OR_NULL = 16,
-	PTR_TO_TP_BUFFER = 17,
-	PTR_TO_XDP_SOCK = 18,
-	PTR_TO_BTF_ID = 19,
-	PTR_TO_BTF_ID_OR_NULL = 20,
-	PTR_TO_MEM = 21,
-	PTR_TO_MEM_OR_NULL = 22,
-	PTR_TO_RDONLY_BUF = 23,
-	PTR_TO_RDONLY_BUF_OR_NULL = 24,
-	PTR_TO_RDWR_BUF = 25,
-	PTR_TO_RDWR_BUF_OR_NULL = 26,
-	PTR_TO_PERCPU_BTF_ID = 27,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	__BPF_REG_TYPE_MAX = 20,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 524287,
 };
 
 struct bpf_prog_ops {
@@ -11218,22 +13729,30 @@
 	u32 jited_len;
 };
 
-struct bpf_prog_stats {
-	u64 cnt;
-	u64 nsecs;
-	struct u64_stats_sync syncp;
-};
-
 struct btf_func_model {
 	u8 ret_size;
 	u8 nr_args;
 	u8 arg_size[12];
 };
 
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
 struct bpf_trampoline {
 	struct hlist_node hlist;
+	struct ftrace_ops *fops;
 	struct mutex mutex;
 	refcount_t refcnt;
+	u32 flags;
 	u64 key;
 	struct {
 		struct btf_func_model model;
@@ -11243,9 +13762,9 @@
 	struct bpf_prog *extension_prog;
 	struct hlist_head progs_hlist[3];
 	int progs_cnt[3];
-	void *image;
+	struct bpf_tramp_image *cur_image;
 	u64 selector;
-	struct bpf_ksym ksym;
+	struct module *mod;
 };
 
 struct bpf_func_info_aux {
@@ -11257,6 +13776,7 @@
 	void *tailcall_target;
 	void *tailcall_bypass;
 	void *bypass_addr;
+	void *aux;
 	union {
 		struct {
 			struct bpf_map *map;
@@ -11275,446 +13795,3958 @@
 	u32 btf_id;
 };
 
-typedef unsigned int sk_buff_data_t;
-
-struct skb_ext;
-
-struct sk_buff {
-	union {
-		struct {
-			struct sk_buff *next;
-			struct sk_buff *prev;
-			union {
-				struct net_device *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 offload_fwd_mark: 1;
-	__u8 offload_l3_fwd_mark: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 redirected: 1;
-	__u8 from_ingress: 1;
-	__u8 decrypted: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
 };
 
-struct scatterlist {
-	long unsigned int page_link;
-	unsigned int offset;
-	unsigned int length;
-	dma_addr_t dma_address;
-	unsigned int dma_length;
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	short unsigned int tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+};
+
+struct qdisc_walker;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+	void (*qlen_notify)(struct Qdisc *, long unsigned int);
+	long unsigned int (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+	struct tcf_proto *next;
+	void *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			long unsigned int class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+		struct {
+			bool ingress;
+			struct gnet_stats_queue *qstats;
+		};
+	};
+};
+
+struct tcf_walker;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+enum stf_barrier_type {
+	STF_BARRIER_NONE = 1,
+	STF_BARRIER_FALLBACK = 2,
+	STF_BARRIER_EIEIO = 4,
+	STF_BARRIER_SYNC_ORI = 8,
+};
+
+struct codegen_context {
+	unsigned int seen;
+	unsigned int idx;
+	unsigned int stack_size;
+	int b2p[14];
+	unsigned int exentry_idx;
+	unsigned int alt_exit_addr;
+};
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_MAX = 262144,
+};
+
+struct mmcr_regs {
+	long unsigned int mmcr0;
+	long unsigned int mmcr1;
+	long unsigned int mmcr2;
+	long unsigned int mmcra;
+	long unsigned int mmcr3;
+};
+
+struct power_pmu {
+	const char *name;
+	int n_counter;
+	int max_alternatives;
+	long unsigned int add_fields;
+	long unsigned int test_adder;
+	int (*compute_mmcr)(u64 *, int, unsigned int *, struct mmcr_regs *, struct perf_event **, u32);
+	int (*get_constraint)(u64, long unsigned int *, long unsigned int *, u64);
+	int (*get_alternatives)(u64, unsigned int, u64 *);
+	void (*get_mem_data_src)(union perf_mem_data_src *, u32, struct pt_regs *);
+	void (*get_mem_weight)(u64 *, u64);
+	long unsigned int group_constraint_mask;
+	long unsigned int group_constraint_val;
+	u64 (*bhrb_filter_map)(u64);
+	void (*config_bhrb)(u64);
+	void (*disable_pmc)(unsigned int, struct mmcr_regs *);
+	int (*limited_pmc_event)(u64);
+	u32 flags;
+	const struct attribute_group **attr_groups;
+	int n_generic;
+	int *generic_events;
+	u64 (*cache_events)[42];
+	int n_blacklist_ev;
+	int *blacklist_ev;
+	int bhrb_nr;
+	int capabilities;
+	int (*check_attr_config)(struct perf_event *);
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
 };
 
 enum {
-	Root_NFS = 255,
-	Root_CIFS = 254,
-	Root_RAM0 = 1048576,
-	Root_RAM1 = 1048577,
-	Root_FD0 = 2097152,
-	Root_HDA1 = 3145729,
-	Root_HDA2 = 3145730,
-	Root_SDA1 = 8388609,
-	Root_SDA2 = 8388610,
-	Root_HDC1 = 23068673,
-	Root_SR0 = 11534336,
+	PM_CYC = 30,
+	PM_GCT_NOSLOT_CYC = 65784,
+	PM_CMPLU_STALL = 262154,
+	PM_INST_CMPL = 2,
+	PM_BRU_FIN = 65640,
+	PM_BR_MPRED_CMPL = 262390,
+	PM_LD_REF_L1 = 65774,
+	PM_LD_MISS_L1 = 254036,
+	PM_ST_MISS_L1 = 196848,
+	PM_L1_PREF = 55480,
+	PM_INST_FROM_L1 = 16512,
+	PM_L1_ICACHE_MISS = 131325,
+	PM_L1_DEMAND_WRITE = 16524,
+	PM_IC_PREF_WRITE = 16526,
+	PM_DATA_FROM_L3 = 311362,
+	PM_DATA_FROM_L3MISS = 196862,
+	PM_L2_ST = 94336,
+	PM_L2_ST_MISS = 94338,
+	PM_L3_PREF_ALL = 319570,
+	PM_DTLB_MISS = 196860,
+	PM_ITLB_MISS = 262396,
+	PM_RUN_INST_CMPL = 327930,
+	PM_RUN_INST_CMPL_ALT = 262394,
+	PM_RUN_CYC = 393460,
+	PM_RUN_CYC_ALT = 131316,
+	PM_MRK_ST_CMPL = 65844,
+	PM_MRK_ST_CMPL_ALT = 197090,
+	PM_BR_MRK_2PATH = 65848,
+	PM_BR_MRK_2PATH_ALT = 262456,
+	PM_L3_CO_MEPF = 98434,
+	PM_L3_CO_MEPF_ALT = 254046,
+	PM_MRK_DATA_FROM_L2MISS = 119118,
+	PM_MRK_DATA_FROM_L2MISS_ALT = 262632,
+	PM_CMPLU_STALL_ALT = 122964,
+	PM_BR_2PATH = 131126,
+	PM_BR_2PATH_ALT = 262198,
+	PM_INST_DISP = 131314,
+	PM_INST_DISP_ALT = 196850,
+	PM_MRK_FILT_MATCH = 131388,
+	PM_MRK_FILT_MATCH_ALT = 196910,
+	PM_LD_MISS_L1_ALT = 262384,
+	MEM_ACCESS = 17039840,
 };
 
-struct ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_proto;
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
 };
 
-struct flowi_tunnel {
-	__be64 tun_id;
+typedef void (*smp_call_func_t)(void *);
+
+struct plist_head {
+	struct list_head node_list;
 };
 
-struct flowi_common {
-	int flowic_oif;
-	int flowic_iif;
-	__u32 flowic_mark;
-	__u8 flowic_tos;
-	__u8 flowic_scope;
-	__u8 flowic_proto;
-	__u8 flowic_flags;
-	__u32 flowic_secid;
-	kuid_t flowic_uid;
-	struct flowi_tunnel flowic_tun_key;
-	__u32 flowic_multipath_hash;
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
 };
 
-union flowi_uli {
-	struct {
-		__be16 dport;
-		__be16 sport;
-	} ports;
-	struct {
-		__u8 type;
-		__u8 code;
-	} icmpt;
-	struct {
-		__le16 dport;
-		__le16 sport;
-	} dnports;
-	__be32 spi;
-	__be32 gre_key;
-	struct {
-		__u8 type;
-	} mht;
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
 };
 
-struct flowi4 {
-	struct flowi_common __fl_common;
-	__be32 saddr;
-	__be32 daddr;
-	union flowi_uli uli;
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
 };
 
-struct flowi6 {
-	struct flowi_common __fl_common;
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	__be32 flowlabel;
-	union flowi_uli uli;
-	__u32 mp_hash;
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
 };
 
-struct flowidn {
-	struct flowi_common __fl_common;
-	__le16 daddr;
-	__le16 saddr;
-	union flowi_uli uli;
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
 };
 
-struct flowi {
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+enum cpuhp_state {
+	CPUHP_INVALID = -1,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_SLUB_DEAD = 11,
+	CPUHP_DEBUG_OBJ_DEAD = 12,
+	CPUHP_MM_WRITEBACK_DEAD = 13,
+	CPUHP_MM_DEMOTION_DEAD = 14,
+	CPUHP_MM_VMSTAT_DEAD = 15,
+	CPUHP_SOFTIRQ_DEAD = 16,
+	CPUHP_NET_MVNETA_DEAD = 17,
+	CPUHP_CPUIDLE_DEAD = 18,
+	CPUHP_ARM64_FPSIMD_DEAD = 19,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 20,
+	CPUHP_IRQ_POLL_DEAD = 21,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 22,
+	CPUHP_BIO_DEAD = 23,
+	CPUHP_ACPI_CPUDRV_DEAD = 24,
+	CPUHP_S390_PFAULT_DEAD = 25,
+	CPUHP_BLK_MQ_DEAD = 26,
+	CPUHP_FS_BUFF_DEAD = 27,
+	CPUHP_PRINTK_DEAD = 28,
+	CPUHP_MM_MEMCQ_DEAD = 29,
+	CPUHP_XFS_DEAD = 30,
+	CPUHP_PERCPU_CNT_DEAD = 31,
+	CPUHP_RADIX_DEAD = 32,
+	CPUHP_PAGE_ALLOC = 33,
+	CPUHP_NET_DEV_DEAD = 34,
+	CPUHP_PCI_XGENE_DEAD = 35,
+	CPUHP_IOMMU_IOVA_DEAD = 36,
+	CPUHP_LUSTRE_CFS_DEAD = 37,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38,
+	CPUHP_PADATA_DEAD = 39,
+	CPUHP_AP_DTPM_CPU_DEAD = 40,
+	CPUHP_RANDOM_PREPARE = 41,
+	CPUHP_WORKQUEUE_PREP = 42,
+	CPUHP_POWER_NUMA_PREPARE = 43,
+	CPUHP_HRTIMERS_PREPARE = 44,
+	CPUHP_PROFILE_PREPARE = 45,
+	CPUHP_X2APIC_PREPARE = 46,
+	CPUHP_SMPCFD_PREPARE = 47,
+	CPUHP_RELAY_PREPARE = 48,
+	CPUHP_SLAB_PREPARE = 49,
+	CPUHP_MD_RAID5_PREPARE = 50,
+	CPUHP_RCUTREE_PREP = 51,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 52,
+	CPUHP_POWERPC_PMAC_PREPARE = 53,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 54,
+	CPUHP_XEN_PREPARE = 55,
+	CPUHP_XEN_EVTCHN_PREPARE = 56,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 57,
+	CPUHP_SH_SH3X_PREPARE = 58,
+	CPUHP_NET_FLOW_PREPARE = 59,
+	CPUHP_TOPOLOGY_PREPARE = 60,
+	CPUHP_NET_IUCV_PREPARE = 61,
+	CPUHP_ARM_BL_PREPARE = 62,
+	CPUHP_TRACE_RB_PREPARE = 63,
+	CPUHP_MM_ZS_PREPARE = 64,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 65,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 66,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 67,
+	CPUHP_ZCOMP_PREPARE = 68,
+	CPUHP_TIMERS_PREPARE = 69,
+	CPUHP_MIPS_SOC_PREPARE = 70,
+	CPUHP_BP_PREPARE_DYN = 71,
+	CPUHP_BP_PREPARE_DYN_END = 91,
+	CPUHP_BRINGUP_CPU = 92,
+	CPUHP_AP_IDLE_DEAD = 93,
+	CPUHP_AP_OFFLINE = 94,
+	CPUHP_AP_SCHED_STARTING = 95,
+	CPUHP_AP_RCUTREE_DYING = 96,
+	CPUHP_AP_CPU_PM_STARTING = 97,
+	CPUHP_AP_IRQ_GIC_STARTING = 98,
+	CPUHP_AP_IRQ_HIP04_STARTING = 99,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 100,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 101,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 102,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 103,
+	CPUHP_AP_IRQ_RISCV_STARTING = 104,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 105,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 106,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 107,
+	CPUHP_AP_MICROCODE_LOADER = 108,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 109,
+	CPUHP_AP_PERF_X86_STARTING = 110,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 111,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 112,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 113,
+	CPUHP_AP_PERF_XTENSA_STARTING = 114,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 115,
+	CPUHP_AP_ARM_SDEI_STARTING = 116,
+	CPUHP_AP_ARM_VFP_STARTING = 117,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 118,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 119,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 120,
+	CPUHP_AP_PERF_ARM_STARTING = 121,
+	CPUHP_AP_PERF_RISCV_STARTING = 122,
+	CPUHP_AP_ARM_L2X0_STARTING = 123,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 124,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 125,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 126,
+	CPUHP_AP_JCORE_TIMER_STARTING = 127,
+	CPUHP_AP_ARM_TWD_STARTING = 128,
+	CPUHP_AP_QCOM_TIMER_STARTING = 129,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 130,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 131,
+	CPUHP_AP_MARCO_TIMER_STARTING = 132,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 133,
+	CPUHP_AP_ARC_TIMER_STARTING = 134,
+	CPUHP_AP_RISCV_TIMER_STARTING = 135,
+	CPUHP_AP_CLINT_TIMER_STARTING = 136,
+	CPUHP_AP_CSKY_TIMER_STARTING = 137,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 138,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 139,
+	CPUHP_AP_KVM_STARTING = 140,
+	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 141,
+	CPUHP_AP_KVM_ARM_VGIC_STARTING = 142,
+	CPUHP_AP_KVM_ARM_TIMER_STARTING = 143,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 144,
+	CPUHP_AP_ARM_XEN_STARTING = 145,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 146,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 147,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 148,
+	CPUHP_AP_SMPCFD_DYING = 149,
+	CPUHP_AP_X86_TBOOT_DYING = 150,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 151,
+	CPUHP_AP_ONLINE = 152,
+	CPUHP_TEARDOWN_CPU = 153,
+	CPUHP_AP_ONLINE_IDLE = 154,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 155,
+	CPUHP_AP_SMPBOOT_THREADS = 156,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 157,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 158,
+	CPUHP_AP_BLK_MQ_ONLINE = 159,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 160,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 161,
+	CPUHP_AP_PERF_ONLINE = 162,
+	CPUHP_AP_PERF_X86_ONLINE = 163,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 164,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 165,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 166,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 167,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 168,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 169,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 170,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 171,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 172,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 173,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 188,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 189,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 194,
+	CPUHP_AP_PERF_CSKY_ONLINE = 195,
+	CPUHP_AP_WATCHDOG_ONLINE = 196,
+	CPUHP_AP_WORKQUEUE_ONLINE = 197,
+	CPUHP_AP_RANDOM_ONLINE = 198,
+	CPUHP_AP_RCUTREE_ONLINE = 199,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 200,
+	CPUHP_AP_ONLINE_DYN = 201,
+	CPUHP_AP_ONLINE_DYN_END = 231,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 232,
+	CPUHP_AP_X86_HPET_ONLINE = 233,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 234,
+	CPUHP_AP_ACTIVE = 235,
+	CPUHP_ONLINE = 236,
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct smp_hotplug_thread {
+	struct task_struct **store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
 	union {
-		struct flowi_common __fl_common;
-		struct flowi4 ip4;
-		struct flowi6 ip6;
-		struct flowidn dn;
-	} u;
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
 };
 
-struct ipstats_mib {
-	u64 mibs[37];
-	struct u64_stats_sync syncp;
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
 };
 
-struct icmp_mib {
-	long unsigned int mibs[28];
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
 };
 
-struct icmpmsg_mib {
-	atomic_long_t mibs[512];
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
 };
 
-struct icmpv6_mib {
-	long unsigned int mibs[6];
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+typedef __u64 Elf64_Off;
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+typedef int kexec_probe_t(const char *, long unsigned int);
+
+typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
+
+typedef int kexec_cleanup_t(void *);
+
+struct kexec_file_ops {
+	kexec_probe_t *probe;
+	kexec_load_t *load;
+	kexec_cleanup_t *cleanup;
+};
+
+struct crash_mem;
+
+struct kimage_arch {
+	struct crash_mem *exclude_ranges;
+	long unsigned int backup_start;
+	void *backup_buf;
+	void *fdt;
+};
+
+struct crash_mem_range {
+	u64 start;
+	u64 end;
+};
+
+struct crash_mem {
+	unsigned int max_nr_ranges;
+	unsigned int nr_ranges;
+	struct crash_mem_range ranges[0];
+};
+
+typedef long unsigned int kimage_entry_t;
+
+struct kexec_segment {
+	union {
+		void *buf;
+		void *kbuf;
+	};
+	size_t bufsz;
+	long unsigned int mem;
+	size_t memsz;
+};
+
+struct purgatory_info {
+	const Elf64_Ehdr *ehdr;
+	Elf64_Shdr *sechdrs;
+	void *purgatory_buf;
+};
+
+struct kimage {
+	kimage_entry_t head;
+	kimage_entry_t *entry;
+	kimage_entry_t *last_entry;
+	long unsigned int start;
+	struct page *control_code_page;
+	struct page *swap_page;
+	void *vmcoreinfo_data_copy;
+	long unsigned int nr_segments;
+	struct kexec_segment segment[16];
+	struct list_head control_pages;
+	struct list_head dest_pages;
+	struct list_head unusable_pages;
+	long unsigned int control_page;
+	unsigned int type: 1;
+	unsigned int preserve_context: 1;
+	unsigned int file_mode: 1;
+	struct kimage_arch arch;
+	void *kernel_buf;
+	long unsigned int kernel_buf_len;
+	void *initrd_buf;
+	long unsigned int initrd_buf_len;
+	char *cmdline_buf;
+	long unsigned int cmdline_buf_len;
+	const struct kexec_file_ops *fops;
+	void *image_loader_data;
+	struct purgatory_info purgatory_info;
+	void *elf_headers;
+	long unsigned int elf_headers_sz;
+	long unsigned int elf_load_addr;
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	long unsigned int timeout;
+	bool handoff_set;
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+typedef unsigned int tcflag_t;
+
+typedef unsigned char cc_t;
+
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_cc[19];
+	cc_t c_line;
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct tty_port;
+
+struct tty_operations;
+
+struct tty_driver {
+	int magic;
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short int type;
+	short int subtype;
+	struct ktermios init_termios;
+	long unsigned int flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+};
+
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
+};
+
+struct winsize {
+	short unsigned int ws_row;
+	short unsigned int ws_col;
+	short unsigned int ws_xpixel;
+	short unsigned int ws_ypixel;
+};
+
+struct tty_ldisc;
+
+struct tty_struct {
+	int magic;
+	struct kref kref;
+	struct device *dev;
+	struct tty_driver *driver;
+	const struct tty_operations *ops;
+	int index;
+	struct ld_semaphore ldisc_sem;
+	struct tty_ldisc *ldisc;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	long unsigned int flags;
+	int count;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		long unsigned int unused[0];
+	} flow;
+	struct {
+		spinlock_t lock;
+		struct pid *pgrp;
+		struct pid *session;
+		unsigned char pktstatus;
+		bool packet;
+		long unsigned int unused[0];
+	} ctrl;
+	int hw_stopped;
+	unsigned int receive_room;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	struct list_head tty_files;
+	int closing;
+	unsigned char *write_buf;
+	int write_cnt;
+	struct work_struct SAK_work;
+	struct tty_port *port;
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	int used;
+	int size;
+	int commit;
+	int lookahead;
+	int read;
+	int flags;
+	long unsigned int data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	int (*write)(struct tty_struct *, const unsigned char *, int);
+	int (*put_char)(struct tty_struct *, unsigned char);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*proc_show)(struct seq_file *, void *);
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	long unsigned int flags;
+	long unsigned int iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);
+	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, unsigned int);
+	int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*lookahead_buf)(struct tty_struct *, const unsigned char *, const unsigned char *, unsigned int);
+	struct module *owner;
+};
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_port_operations {
+	int (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, int);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+};
+
+struct tty_port_client_operations {
+	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const unsigned char *, const unsigned char *, unsigned int);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct pm_vt_switch {
+	struct list_head head;
+	struct device *dev;
+	bool required;
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
+	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
+	IRQ_DOMAIN_FLAG_NO_MAP = 128,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_MSI_NOMASK_QUIRK = 134217728,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
+	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	long unsigned int size;
+	long unsigned int flags;
+	struct page **pages;
+	unsigned int page_order;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+};
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0LL,
+	WORK_STRUCT_INACTIVE_BIT = 1LL,
+	WORK_STRUCT_PWQ_BIT = 2LL,
+	WORK_STRUCT_LINKED_BIT = 3LL,
+	WORK_STRUCT_COLOR_SHIFT = 4LL,
+	WORK_STRUCT_COLOR_BITS = 4LL,
+	WORK_STRUCT_PENDING = 1LL,
+	WORK_STRUCT_INACTIVE = 2LL,
+	WORK_STRUCT_PWQ = 4LL,
+	WORK_STRUCT_LINKED = 8LL,
+	WORK_STRUCT_STATIC = 0LL,
+	WORK_NR_COLORS = 16LL,
+	WORK_CPU_UNBOUND = 2048LL,
+	WORK_STRUCT_FLAG_BITS = 8LL,
+	WORK_OFFQ_FLAG_BASE = 4LL,
+	__WORK_OFFQ_CANCELING = 4LL,
+	WORK_OFFQ_CANCELING = 16LL,
+	WORK_OFFQ_FLAG_BITS = 1LL,
+	WORK_OFFQ_POOL_SHIFT = 5LL,
+	WORK_OFFQ_LEFT = 59LL,
+	WORK_OFFQ_POOL_BITS = 31LL,
+	WORK_OFFQ_POOL_NONE = 2147483647LL,
+	WORK_STRUCT_FLAG_MASK = 255LL,
+	WORK_STRUCT_WQ_DATA_MASK = -256LL,
+	WORK_STRUCT_NO_POOL = 68719476704LL,
+	WORK_BUSY_PENDING = 1LL,
+	WORK_BUSY_RUNNING = 2LL,
+	WORKER_DESC_LEN = 24LL,
+};
+
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
+};
+
+struct trace_print_flags {
+	long unsigned int mask;
+	const char *name;
+};
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
+};
+
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
+};
+
+struct trace_event_raw_timer_class {
+	struct trace_entry ent;
+	void *timer;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_start {
+	struct trace_entry ent;
+	void *timer;
+	void *function;
+	long unsigned int expires;
+	long unsigned int now;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_expire_entry {
+	struct trace_entry ent;
+	void *timer;
+	long unsigned int now;
+	void *function;
+	long unsigned int baseclk;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_init {
+	struct trace_entry ent;
+	void *hrtimer;
+	clockid_t clockid;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_start {
+	struct trace_entry ent;
+	void *hrtimer;
+	void *function;
+	s64 expires;
+	s64 softexpires;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_expire_entry {
+	struct trace_entry ent;
+	void *hrtimer;
+	s64 now;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_class {
+	struct trace_entry ent;
+	void *hrtimer;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_state {
+	struct trace_entry ent;
+	int which;
+	long long unsigned int expires;
+	long int value_sec;
+	long int value_nsec;
+	long int interval_sec;
+	long int interval_nsec;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_expire {
+	struct trace_entry ent;
+	int which;
+	pid_t pid;
+	long long unsigned int now;
+	char __data[0];
+};
+
+struct trace_event_raw_tick_stop {
+	struct trace_entry ent;
+	int success;
+	int dependency;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_timer_class {};
+
+struct trace_event_data_offsets_timer_start {};
+
+struct trace_event_data_offsets_timer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_init {};
+
+struct trace_event_data_offsets_hrtimer_start {};
+
+struct trace_event_data_offsets_hrtimer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_class {};
+
+struct trace_event_data_offsets_itimer_state {};
+
+struct trace_event_data_offsets_itimer_expire {};
+
+struct trace_event_data_offsets_tick_stop {};
+
+typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
+
+typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
+
+typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
+
+typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
+
+typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
+
+typedef void (*btf_trace_tick_stop)(void *, int, int);
+
+struct timer_base {
+	raw_spinlock_t lock;
+	struct timer_list *running_timer;
+	long unsigned int clk;
+	long unsigned int next_expiry;
+	unsigned int cpu;
+	bool next_expiry_recalc;
+	bool is_idle;
+	bool timers_pending;
+	long unsigned int pending_map[8];
+	struct hlist_head vectors[512];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct process_timer {
+	struct timer_list timer;
+	struct task_struct *task;
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_referenced = 1,
+	PG_uptodate = 2,
+	PG_dirty = 3,
+	PG_lru = 4,
+	PG_active = 5,
+	PG_workingset = 6,
+	PG_waiters = 7,
+	PG_error = 8,
+	PG_slab = 9,
+	PG_owner_priv_1 = 10,
+	PG_arch_1 = 11,
+	PG_reserved = 12,
+	PG_private = 13,
+	PG_private_2 = 14,
+	PG_writeback = 15,
+	PG_head = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_arch_2 = 22,
+	__NR_PAGEFLAGS = 23,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 10,
+	PG_swapcache = 10,
+	PG_fscache = 14,
+	PG_pinned = 10,
+	PG_savepinned = 3,
+	PG_foreign = 10,
+	PG_xen_remapped = 10,
+	PG_slob_free = 13,
+	PG_double_map = 6,
+	PG_isolated = 18,
+	PG_reported = 2,
+	PG_vmemmap_self_hosted = 10,
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+struct rt_mutex_base;
+
+struct ww_acquire_ctx;
+
+struct rt_mutex_waiter {
+	struct rb_node tree_entry;
+	struct rb_node pi_tree_entry;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	int prio;
+	u64 deadline;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct robust_list {
+	struct robust_list *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long int futex_offset;
+	struct robust_list *list_op_pending;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		long unsigned int pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		long unsigned int address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		long unsigned int word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+typedef unsigned int slab_flags_t;
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
+};
+
+struct nsset {
+	unsigned int flags;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
+};
+
+enum {
+	TRACE_FTRACE_BIT = 0,
+	TRACE_FTRACE_NMI_BIT = 1,
+	TRACE_FTRACE_IRQ_BIT = 2,
+	TRACE_FTRACE_SIRQ_BIT = 3,
+	TRACE_FTRACE_TRANSITION_BIT = 4,
+	TRACE_INTERNAL_BIT = 5,
+	TRACE_INTERNAL_NMI_BIT = 6,
+	TRACE_INTERNAL_IRQ_BIT = 7,
+	TRACE_INTERNAL_SIRQ_BIT = 8,
+	TRACE_INTERNAL_TRANSITION_BIT = 9,
+	TRACE_BRANCH_BIT = 10,
+	TRACE_IRQ_BIT = 11,
+	TRACE_GRAPH_BIT = 12,
+	TRACE_GRAPH_DEPTH_START_BIT = 13,
+	TRACE_GRAPH_DEPTH_END_BIT = 14,
+	TRACE_GRAPH_NOTRACE_BIT = 15,
+	TRACE_RECORD_RECURSION_BIT = 16,
+};
+
+struct ftrace_hash {
+	long unsigned int size_bits;
+	struct hlist_head *buckets;
+	long unsigned int count;
+	long unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct ftrace_func_entry {
+	struct hlist_node hlist;
+	long unsigned int ip;
+	long unsigned int direct;
+};
+
+struct ftrace_graph_ent {
+	long unsigned int func;
+	int depth;
+} __attribute__((packed));
+
+struct ftrace_graph_ret {
+	long unsigned int func;
+	int depth;
+	unsigned int overrun;
+	long long unsigned int calltime;
+	long long unsigned int rettime;
+};
+
+typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
+
+typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
+
+struct fgraph_ops {
+	trace_func_graph_ent_t entryfunc;
+	trace_func_graph_ret_t retfunc;
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry *prog;
+	char *filter_string;
+};
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct cond_snapshot;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct array_buffer max_buffer;
+	bool allocated_snapshot;
+	long unsigned int max_latency;
+	struct dentry *d_max_latency;
+	struct work_struct fsnotify_work;
+	struct irq_work fsnotify_irqwork;
+	struct trace_pid_list *filtered_pids;
+	struct trace_pid_list *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int sys_refcount_enter;
+	int sys_refcount_exit;
+	struct trace_event_file *enter_syscall_files[451];
+	struct trace_event_file *exit_syscall_files[451];
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct dentry *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	int ref;
+	int trace_ref;
+	struct ftrace_ops *ops;
+	struct trace_pid_list *function_pids;
+	struct trace_pid_list *function_no_pids;
+	struct list_head func_probes;
+	struct list_head mod_trace;
+	struct list_head mod_notrace;
+	int function_enabled;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct cond_snapshot *cond_snapshot;
+	struct trace_func_repeats *last_func_repeats;
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool use_max_tr;
+	bool noboot;
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct dentry *entry;
+	int ref_count;
+	int nr_events;
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	long unsigned int data[256];
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+struct ftrace_graph_ent_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ent graph_ent;
+};
+
+struct ftrace_graph_ret_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ret ret;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	long unsigned int entries;
+	long unsigned int saved_latency;
+	long unsigned int critical_start;
+	long unsigned int critical_end;
+	long unsigned int critical_sequence;
+	long unsigned int nice;
+	long unsigned int policy;
+	long unsigned int rt_priority;
+	long unsigned int skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	int ftrace_ignore_pid;
+	bool ignore_pid;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct tracer_opt;
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct cond_snapshot {
+	void *cond_data;
+	cond_update_fn_t update;
+};
+
+struct trace_func_repeats {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	long unsigned int count;
+	u64 ts_last_call;
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+enum {
+	FTRACE_HASH_FL_MOD = 1,
+};
+
+enum trace_iterator_bits {
+	TRACE_ITER_PRINT_PARENT_BIT = 0,
+	TRACE_ITER_SYM_OFFSET_BIT = 1,
+	TRACE_ITER_SYM_ADDR_BIT = 2,
+	TRACE_ITER_VERBOSE_BIT = 3,
+	TRACE_ITER_RAW_BIT = 4,
+	TRACE_ITER_HEX_BIT = 5,
+	TRACE_ITER_BIN_BIT = 6,
+	TRACE_ITER_BLOCK_BIT = 7,
+	TRACE_ITER_PRINTK_BIT = 8,
+	TRACE_ITER_ANNOTATE_BIT = 9,
+	TRACE_ITER_USERSTACKTRACE_BIT = 10,
+	TRACE_ITER_SYM_USEROBJ_BIT = 11,
+	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
+	TRACE_ITER_CONTEXT_INFO_BIT = 13,
+	TRACE_ITER_LATENCY_FMT_BIT = 14,
+	TRACE_ITER_RECORD_CMD_BIT = 15,
+	TRACE_ITER_RECORD_TGID_BIT = 16,
+	TRACE_ITER_OVERWRITE_BIT = 17,
+	TRACE_ITER_STOP_ON_FREE_BIT = 18,
+	TRACE_ITER_IRQ_INFO_BIT = 19,
+	TRACE_ITER_MARKERS_BIT = 20,
+	TRACE_ITER_EVENT_FORK_BIT = 21,
+	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
+	TRACE_ITER_HASH_PTR_BIT = 23,
+	TRACE_ITER_FUNCTION_BIT = 24,
+	TRACE_ITER_FUNC_FORK_BIT = 25,
+	TRACE_ITER_DISPLAY_GRAPH_BIT = 26,
+	TRACE_ITER_STACKTRACE_BIT = 27,
+	TRACE_ITER_LAST_BIT = 28,
+};
+
+enum trace_iterator_flags {
+	TRACE_ITER_PRINT_PARENT = 1,
+	TRACE_ITER_SYM_OFFSET = 2,
+	TRACE_ITER_SYM_ADDR = 4,
+	TRACE_ITER_VERBOSE = 8,
+	TRACE_ITER_RAW = 16,
+	TRACE_ITER_HEX = 32,
+	TRACE_ITER_BIN = 64,
+	TRACE_ITER_BLOCK = 128,
+	TRACE_ITER_PRINTK = 256,
+	TRACE_ITER_ANNOTATE = 512,
+	TRACE_ITER_USERSTACKTRACE = 1024,
+	TRACE_ITER_SYM_USEROBJ = 2048,
+	TRACE_ITER_PRINTK_MSGONLY = 4096,
+	TRACE_ITER_CONTEXT_INFO = 8192,
+	TRACE_ITER_LATENCY_FMT = 16384,
+	TRACE_ITER_RECORD_CMD = 32768,
+	TRACE_ITER_RECORD_TGID = 65536,
+	TRACE_ITER_OVERWRITE = 131072,
+	TRACE_ITER_STOP_ON_FREE = 262144,
+	TRACE_ITER_IRQ_INFO = 524288,
+	TRACE_ITER_MARKERS = 1048576,
+	TRACE_ITER_EVENT_FORK = 2097152,
+	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
+	TRACE_ITER_HASH_PTR = 8388608,
+	TRACE_ITER_FUNCTION = 16777216,
+	TRACE_ITER_FUNC_FORK = 33554432,
+	TRACE_ITER_DISPLAY_GRAPH = 67108864,
+	TRACE_ITER_STACKTRACE = 134217728,
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+struct fgraph_cpu_data {
+	pid_t last_pid;
+	int depth;
+	int depth_irq;
+	int ignore;
+	long unsigned int enter_funcs[50];
+};
+
+struct fgraph_data {
+	struct fgraph_cpu_data *cpu_data;
+	struct ftrace_graph_ent_entry ent;
+	struct ftrace_graph_ret_entry ret;
+	int failed;
+	int cpu;
+	long: 0;
+} __attribute__((packed));
+
+enum {
+	FLAGS_FILL_FULL = 268435456,
+	FLAGS_FILL_START = 536870912,
+	FLAGS_FILL_END = 805306368,
+};
+
+struct trace_event_raw_rpm_internal {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flags;
+	int usage_count;
+	int disable_depth;
+	int runtime_auto;
+	int request_pending;
+	int irq_safe;
+	int child_count;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_return_int {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int ip;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpm_internal {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_return_int {
+	u32 name;
+};
+
+typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+struct fdtable {
+	unsigned int max_fds;
+	struct file **fd;
+	long unsigned int *close_on_exec;
+	long unsigned int *open_fds;
+	long unsigned int *full_fds_bits;
+	struct callback_head rcu;
+};
+
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	long unsigned int close_on_exec_init[1];
+	long unsigned int open_fds_init[1];
+	long unsigned int full_fds_bits_init[1];
+	struct file *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+};
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	__BPF_FUNC_MAX_ID = 208,
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+	};
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_ALLOC_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 271,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 524287,
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_ALLOC_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_ALLOC_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	__BPF_RET_TYPE_LIMIT = 524287,
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+enum flow_action_hw_stats_bit {
+	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct vm_area_struct *vma;
+	u32 tid;
+	long unsigned int prev_vm_start;
+	long unsigned int prev_vm_end;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data *cache[16];
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+enum {
+	BPF_ANY = 0,
+	BPF_NOEXIST = 1,
+	BPF_EXIST = 2,
+	BPF_F_LOCK = 4,
+};
+
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map *smap;
+	u8 data[0];
+};
+
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage *local_storage;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+struct perf_event_mmap_page {
+	__u32 version;
+	__u32 compat_version;
+	__u32 lock;
+	__u32 index;
+	__s64 offset;
+	__u64 time_enabled;
+	__u64 time_running;
+	union {
+		__u64 capabilities;
+		struct {
+			__u64 cap_bit0: 1;
+			__u64 cap_bit0_is_deprecated: 1;
+			__u64 cap_user_rdpmc: 1;
+			__u64 cap_user_time: 1;
+			__u64 cap_user_time_zero: 1;
+			__u64 cap_user_time_short: 1;
+			__u64 cap_____res: 58;
+		};
+	};
+	__u16 pmc_width;
+	__u16 time_shift;
+	__u32 time_mult;
+	__u64 time_offset;
+	__u64 time_zero;
+	__u32 size;
+	__u32 __reserved_1;
+	__u64 time_cycles;
+	__u64 time_mask;
+	__u8 __reserved[928];
+	__u64 data_head;
+	__u64 data_tail;
+	__u64 data_offset;
+	__u64 data_size;
+	__u64 aux_head;
+	__u64 aux_tail;
+	__u64 aux_offset;
+	__u64 aux_size;
+};
+
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 18446744073709551584ULL,
+	PERF_CONTEXT_KERNEL = 18446744073709551488ULL,
+	PERF_CONTEXT_USER = 18446744073709551104ULL,
+	PERF_CONTEXT_GUEST = 18446744073709549568ULL,
+	PERF_CONTEXT_GUEST_KERNEL = 18446744073709549440ULL,
+	PERF_CONTEXT_GUEST_USER = 18446744073709549056ULL,
+	PERF_CONTEXT_MAX = 18446744073709547521ULL,
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short int contexts;
+	bool contexts_maxed;
+};
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long int watermark;
+	long int aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	long unsigned int mmap_locked;
+	struct user_struct *mmap_user;
+	long int aux_head;
+	unsigned int aux_nest;
+	long int aux_wakeup;
+	long unsigned int aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	long unsigned int aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+typedef struct {} local_lock_t;
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu *cpu_slab;
+	slab_flags_t flags;
+	long unsigned int min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	unsigned int remote_node_defrag_ratio;
+	unsigned int useroffset;
+	unsigned int usersize;
+	struct kmem_cache_node *node[256];
+};
+
+struct slab {
+	long unsigned int __page_flags;
+	union {
+		struct list_head slab_list;
+		struct callback_head callback_head;
+		struct {
+			struct slab *next;
+			int slabs;
+		};
+	};
+	struct kmem_cache *slab_cache;
+	void *freelist;
+	union {
+		long unsigned int counters;
+		struct {
+			unsigned int inuse: 16;
+			unsigned int objects: 15;
+			unsigned int frozen: 1;
+		};
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	long unsigned int memcg_data;
+};
+
+struct kmem_cache_cpu {
+	void **freelist;
+	long unsigned int tid;
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	long unsigned int nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	long unsigned int num_children;
+	long unsigned int num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	long unsigned int free_pfn;
+	long unsigned int migrate_pfn;
+	long unsigned int fast_start_pfn;
+	struct zone *zone;
+	long unsigned int total_migrate_scanned;
+	long unsigned int total_free_scanned;
+	short unsigned int fast_search_fail;
+	short int search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool rescan;
+	bool alloc_contig;
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+typedef struct {
+	pgd_t pgd;
+} p4d_t;
+
+struct mempolicy {
+	atomic_t refcnt;
+	short unsigned int mode;
+	short unsigned int flags;
+	nodemask_t nodes;
+	int home_node;
+	union {
+		nodemask_t cpuset_mems_allowed;
+		nodemask_t user_nodemask;
+	} w;
+};
+
+typedef struct {
+	long unsigned int val;
+} swp_entry_t;
+
+struct page_vma_mapped_walk {
+	long unsigned int pfn;
+	long unsigned int nr_pages;
+	long unsigned int pgoff;
+	struct vm_area_struct *vma;
+	long unsigned int address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+struct hstate;
+
+struct hugepage_subpool {
+	spinlock_t lock;
+	long int count;
+	long int max_hpages;
+	long int used_hpages;
+	struct hstate *hstate;
+	long int min_hpages;
+	long int rsv_hpages;
+};
+
+struct hstate {
+	struct mutex resize_lock;
+	int next_nid_to_alloc;
+	int next_nid_to_free;
+	unsigned int order;
+	unsigned int demote_order;
+	long unsigned int mask;
+	long unsigned int max_huge_pages;
+	long unsigned int nr_huge_pages;
+	long unsigned int free_huge_pages;
+	long unsigned int resv_huge_pages;
+	long unsigned int surplus_huge_pages;
+	long unsigned int nr_overcommit_huge_pages;
+	struct list_head hugepage_activelist;
+	struct list_head hugepage_freelists[256];
+	unsigned int max_huge_pages_node[256];
+	unsigned int nr_huge_pages_node[256];
+	unsigned int free_huge_pages_node[256];
+	unsigned int surplus_huge_pages_node[256];
+	char name[32];
+};
+
+struct hugetlbfs_sb_info {
+	long int max_inodes;
+	long int free_inodes;
+	spinlock_t stat_lock;
+	struct hstate *hstate;
+	struct hugepage_subpool *spool;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	unsigned int lsm_flags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char *uptr;
+	int refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	short unsigned int skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		long unsigned int skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	short unsigned int skc_tx_queue_mapping;
+	short unsigned int skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct socket_wq;
+
+struct xfrm_policy;
+
+struct socket;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	struct sk_filter *sk_filter;
+	union {
+		struct socket_wq *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy *sk_policy[2];
+	struct dst_entry *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	long unsigned int sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long int sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	long unsigned int sk_pacing_rate;
+	long unsigned int sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	long unsigned int sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long int sk_rcvtimeo;
+	ktime_t sk_stamp;
+	u16 sk_tsflags;
+	u8 sk_shutdown;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport *sk_reuseport_cb;
+	struct bpf_local_storage *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	CFTYPE_PRESSURE = 64,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+};
+
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
+	struct module *owner;
+	char *buffer[8];
+};
+
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+typedef struct poll_table_struct poll_table;
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	long unsigned int totalpages;
+	struct task_struct *chosen;
+	long int chosen_points;
+	enum oom_constraint constraint;
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	union {
+		struct {
+			long unsigned int desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	refcount_t refcnt;
+	u8 flags;
+	struct mmpin mmp;
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_MAX = 30,
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTPKTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	__IPSTATS_MIB_MAX = 37,
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	__ICMP_MIB_MAX = 28,
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	__ICMP6_MIB_MAX = 6,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	__LINUX_MIB_MAX = 126,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+enum {
+	LINUX_MIB_TLSNUM = 0,
+	LINUX_MIB_TLSCURRTXSW = 1,
+	LINUX_MIB_TLSCURRRXSW = 2,
+	LINUX_MIB_TLSCURRTXDEVICE = 3,
+	LINUX_MIB_TLSCURRRXDEVICE = 4,
+	LINUX_MIB_TLSTXSW = 5,
+	LINUX_MIB_TLSRXSW = 6,
+	LINUX_MIB_TLSTXDEVICE = 7,
+	LINUX_MIB_TLSRXDEVICE = 8,
+	LINUX_MIB_TLSDECRYPTERROR = 9,
+	LINUX_MIB_TLSRXDEVICERESYNC = 10,
+	LINUX_MIB_TLSDECRYPTRETRY = 11,
+	LINUX_MIB_TLSRXNOPADVIOL = 12,
+	__LINUX_MIB_TLSMAX = 13,
 };
 
 struct icmpv6_mib_device {
 	atomic_long_t mibs[6];
 };
 
-struct icmpv6msg_mib {
-	atomic_long_t mibs[512];
-};
-
 struct icmpv6msg_mib_device {
 	atomic_long_t mibs[512];
 };
 
-struct tcp_mib {
-	long unsigned int mibs[16];
-};
-
-struct udp_mib {
-	long unsigned int mibs[9];
-};
-
-struct linux_mib {
-	long unsigned int mibs[124];
-};
-
-struct linux_tls_mib {
-	long unsigned int mibs[11];
-};
-
-struct inet_frags;
-
-struct fqdir {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags *f;
-	struct net *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue;
-
-struct inet_frags {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue *, const void *);
-	void (*destructor)(struct inet_frag_queue *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct frag_v4_compare_key {
-	__be32 saddr;
-	__be32 daddr;
-	u32 user;
-	u32 vif;
-	__be16 id;
-	u16 protocol;
-};
-
-struct frag_v6_compare_key {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	u32 user;
-	__be32 id;
-	u32 iif;
-};
-
-struct inet_frag_queue {
-	struct rhash_head node;
+struct ip_ra_chain {
+	struct ip_ra_chain *next;
+	struct sock *sk;
 	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff *fragments_tail;
-	struct sk_buff *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir *fqdir;
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
 	struct callback_head rcu;
 };
 
-struct fib_rule;
-
-struct fib_lookup_arg;
-
-struct fib_rule_hdr;
-
-struct nlattr;
-
-struct netlink_ext_ack;
-
-struct nla_policy;
-
-struct fib_rules_ops {
-	int family;
-	struct list_head list;
-	int rule_size;
-	int addr_size;
-	int unresolved_rules;
-	int nr_goto_rules;
-	unsigned int fib_rules_seq;
-	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
-	bool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);
-	int (*match)(struct fib_rule *, struct flowi *, int);
-	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
-	int (*delete)(struct fib_rule *);
-	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
-	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
-	size_t (*nlmsg_payload)(struct fib_rule *);
-	void (*flush_cache)(struct fib_rules_ops *);
-	int nlgroup;
-	const struct nla_policy *policy;
-	struct list_head rules_list;
-	struct module *owner;
-	struct net *fro_net;
-	struct callback_head rcu;
-};
-
-enum tcp_ca_event {
-	CA_EVENT_TX_START = 0,
-	CA_EVENT_CWND_RESTART = 1,
-	CA_EVENT_COMPLETE_CWR = 2,
-	CA_EVENT_LOSS = 3,
-	CA_EVENT_ECN_NO_CE = 4,
-	CA_EVENT_ECN_IS_CE = 5,
-};
-
-struct ack_sample;
-
-struct rate_sample;
-
-union tcp_cc_info;
-
-struct tcp_congestion_ops {
-	struct list_head list;
-	u32 key;
-	u32 flags;
-	void (*init)(struct sock *);
-	void (*release)(struct sock *);
-	u32 (*ssthresh)(struct sock *);
-	void (*cong_avoid)(struct sock *, u32, u32);
-	void (*set_state)(struct sock *, u8);
-	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
-	void (*in_ack_event)(struct sock *, u32);
-	u32 (*undo_cwnd)(struct sock *);
-	void (*pkts_acked)(struct sock *, const struct ack_sample *);
-	u32 (*min_tso_segs)(struct sock *);
-	u32 (*sndbuf_expand)(struct sock *);
-	void (*cong_control)(struct sock *, const struct rate_sample *);
-	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
-	char name[16];
-	struct module *owner;
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
 };
 
 struct fib_notifier_ops {
@@ -11726,74 +17758,6 @@
 	struct callback_head rcu;
 };
 
-struct xfrm_state;
-
-struct lwtunnel_state;
-
-struct dst_entry {
-	struct net_device *dev;
-	struct dst_ops *ops;
-	long unsigned int _metrics;
-	long unsigned int expires;
-	struct xfrm_state *xfrm;
-	int (*input)(struct sk_buff *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	short unsigned int flags;
-	short int obsolete;
-	short unsigned int header_len;
-	short unsigned int trailer_len;
-	atomic_t __refcnt;
-	int __use;
-	long unsigned int lastuse;
-	struct lwtunnel_state *lwtstate;
-	struct callback_head callback_head;
-	short int error;
-	short int __pad;
-	__u32 tclassid;
-};
-
-struct hh_cache {
-	unsigned int hh_len;
-	seqlock_t hh_lock;
-	long unsigned int hh_data[16];
-};
-
-struct neigh_table;
-
-struct neigh_parms;
-
-struct neigh_ops;
-
-struct neighbour {
-	struct neighbour *next;
-	struct neigh_table *tbl;
-	struct neigh_parms *parms;
-	long unsigned int confirmed;
-	long unsigned int updated;
-	rwlock_t lock;
-	refcount_t refcnt;
-	unsigned int arp_queue_len_bytes;
-	struct sk_buff_head arp_queue;
-	struct timer_list timer;
-	long unsigned int used;
-	atomic_t probes;
-	__u8 flags;
-	__u8 nud_state;
-	__u8 type;
-	__u8 dead;
-	u8 protocol;
-	seqlock_t ha_lock;
-	int: 32;
-	unsigned char ha[32];
-	struct hh_cache hh;
-	int (*output)(struct neighbour *, struct sk_buff *);
-	const struct neigh_ops *ops;
-	struct list_head gc_list;
-	struct callback_head rcu;
-	struct net_device *dev;
-	u8 primary_key[0];
-};
-
 struct ipv6_stable_secret {
 	bool initialized;
 	struct in6_addr secret;
@@ -11821,17 +17785,13 @@
 	__s32 max_desync_factor;
 	__s32 max_addresses;
 	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
 	__s32 accept_ra_min_hop_limit;
 	__s32 accept_ra_pinfo;
 	__s32 ignore_routes_with_linkdown;
-	__s32 accept_ra_rtr_pref;
-	__s32 rtr_probe_interval;
-	__s32 accept_ra_rt_info_min_plen;
-	__s32 accept_ra_rt_info_max_plen;
 	__s32 proxy_ndp;
 	__s32 accept_source_route;
 	__s32 accept_ra_from_local;
-	__s32 mc_forwarding;
 	__s32 disable_ipv6;
 	__s32 drop_unicast_in_l2_multicast;
 	__s32 accept_dad;
@@ -11840,6 +17800,7 @@
 	__s32 suppress_frag_ndisc;
 	__s32 accept_ra_mtu;
 	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
 	struct ipv6_stable_secret stable_secret;
 	__s32 use_oif_addrs_only;
 	__s32 keep_addr_on_down;
@@ -11849,58 +17810,72 @@
 	__s32 disable_policy;
 	__s32 ndisc_tclass;
 	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
 	struct ctl_table_header *sysctl_header;
 };
 
-struct nf_queue_entry;
-
-struct nf_queue_handler {
-	int (*outfn)(struct nf_queue_entry *, unsigned int);
-	void (*nf_hook_drop)(struct net *);
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
 };
 
-enum nf_log_type {
-	NF_LOG_TYPE_LOG = 0,
-	NF_LOG_TYPE_ULOG = 1,
-	NF_LOG_TYPE_MAX = 2,
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_DECNET = 12,
+	NFPROTO_NUMPROTO = 13,
 };
 
-typedef u8 u_int8_t;
-
-struct nf_loginfo;
-
-typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
-
-struct nf_logger {
-	char *name;
-	enum nf_log_type type;
-	nf_logfn *logfn;
-	struct module *me;
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
 };
 
-struct hlist_nulls_head {
-	struct hlist_nulls_node *first;
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
 };
 
-struct ip_conntrack_stat {
-	unsigned int found;
-	unsigned int invalid;
-	unsigned int insert;
-	unsigned int insert_failed;
-	unsigned int clash_resolve;
-	unsigned int drop;
-	unsigned int early_drop;
-	unsigned int error;
-	unsigned int expect_new;
-	unsigned int expect_create;
-	unsigned int expect_delete;
-	unsigned int search_restart;
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
 };
 
-struct ct_pcpu {
-	spinlock_t lock;
-	struct hlist_nulls_head unconfirmed;
-	struct hlist_nulls_head dying;
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = -1,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
 };
 
 typedef struct {
@@ -11958,11 +17933,22 @@
 	struct socket_wq wq;
 };
 
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
 typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
 
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
 struct proto_ops {
 	int family;
-	unsigned int flags;
 	struct module *owner;
 	int (*release)(struct socket *);
 	int (*bind)(struct socket *, struct sockaddr *, int);
@@ -11972,7 +17958,6 @@
 	int (*getname)(struct socket *, struct sockaddr *, int);
 	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
 	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
 	int (*gettstamp)(struct socket *, void *, bool, bool);
 	int (*listen)(struct socket *, int);
 	int (*shutdown)(struct socket *, int);
@@ -11987,42 +17972,857 @@
 	int (*set_peek_off)(struct sock *, int);
 	int (*peek_len)(struct socket *);
 	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
 	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
 	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
 	int (*set_rcvlowat)(struct sock *, int);
 };
 
-struct pipe_buf_operations;
-
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations *ops;
-	unsigned int flags;
-	long unsigned int private;
+enum skb_ext_id {
+	SKB_EXT_SEC_PATH = 0,
+	SKB_EXT_NUM = 1,
 };
 
-struct pipe_buf_operations {
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
 };
 
-struct skb_ext {
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
 	refcount_t refcnt;
-	u8 offset[4];
-	u8 chunks;
-	long: 56;
-	char data[0];
+	struct callback_head callback_head;
+	int reachable_time;
+	int qlen;
+	int data[14];
+	long unsigned int data_state[1];
 };
 
-struct dql {
-	unsigned int num_queued;
-	unsigned int adj_limit;
-	unsigned int last_obj_cnt;
-	long: 32;
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 *mc_list;
+	struct ifmcaddr6 *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	long unsigned int mc_v1_seen;
+	long unsigned int mc_qi;
+	long unsigned int mc_qri;
+	long unsigned int mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	long unsigned int tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	long unsigned int last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	long unsigned int last_rand;
+	struct neigh_statistics *stats;
+	struct neigh_hash_table *nht;
+	struct pneigh_entry **phash_buckets;
+};
+
+struct neigh_statistics {
+	long unsigned int allocs;
+	long unsigned int destroys;
+	long unsigned int hash_grows;
+	long unsigned int res_failed;
+	long unsigned int lookups;
+	long unsigned int hits;
+	long unsigned int rcv_probes_mcast;
+	long unsigned int rcv_probes_ucast;
+	long unsigned int periodic_gc_runs;
+	long unsigned int forced_gc_runs;
+	long unsigned int unres_discards;
+	long unsigned int table_fulls;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u8 key[0];
+};
+
+struct neigh_hash_table {
+	struct neighbour **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct smc_hashinfo;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct udp_table;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long int);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, long unsigned int);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*keepalive)(struct sock *, int);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, short unsigned int);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	long unsigned int *memory_pressure;
+	long int *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list *sf_next;
+	struct in6_addr sf_addr;
+	long unsigned int sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *next;
+	struct ip6_sf_list *mca_sources;
+	struct ip6_sf_list *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	long unsigned int mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	long unsigned int mca_cstamp;
+	long unsigned int mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	long unsigned int aca_cstamp;
+	long unsigned int aca_tstamp;
+	struct callback_head rcu;
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved: 6;
+	__u8 autoconf: 1;
+	__u8 onlink: 1;
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[256];
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	long unsigned int flags;
+	long unsigned int precharge;
+	long unsigned int moved_charge;
+	long unsigned int moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	long unsigned int flags;
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+union mc_target {
+	struct page *page;
+	swp_entry_t ent;
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	long unsigned int nr_memory;
+	long unsigned int pgpgout;
+	long unsigned int nr_kmem;
+	int nid;
+};
+
+struct numa_stat {
+	const char *name;
+	unsigned int lru_mask;
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
+};
+
+typedef u32 nlink_t;
+
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	long unsigned int min_coredump;
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+};
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+enum {
+	PROC_ROOT_INO = 1,
+	PROC_IPC_INIT_INO = 4026531839,
+	PROC_UTS_INIT_INO = 4026531838,
+	PROC_USER_INIT_INO = 4026531837,
+	PROC_PID_INIT_INO = 4026531836,
+	PROC_CGROUP_INIT_INO = 4026531835,
+	PROC_TIME_INIT_INO = 4026531834,
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	long unsigned int vma_pages;
+	struct mm_struct *mm;
+	long unsigned int p;
+	long unsigned int argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	long unsigned int loader;
+	long unsigned int exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+struct proc_fs_context {
+	struct pid_namespace *pid_ns;
+	unsigned int mask;
+	enum proc_hidepid hidepid;
+	int gid;
+	enum proc_pidonly pidonly;
+};
+
+enum proc_param {
+	Opt_gid = 0,
+	Opt_hidepid = 1,
+	Opt_subset = 2,
+};
+
+struct kernel_cpustat {
+	u64 cpustat[10];
+};
+
+struct kernel_stat {
+	long unsigned int irqs_sum;
+	unsigned int softirqs[10];
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+};
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+struct kernfs_syscall_ops;
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+};
+
+struct simple_xattrs {
+	struct list_head head;
+	spinlock_t lock;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+};
+
+typedef __u16 __le16;
+
+typedef __u32 __le32;
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	long unsigned int b_state;
+	struct buffer_head *b_this_page;
+	struct page *b_page;
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+struct bgl_lock {
+	spinlock_t lock;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -12037,17 +18837,3402 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	unsigned int limit;
-	unsigned int num_completed;
-	unsigned int prev_ovlimit;
-	unsigned int prev_num_queued;
-	unsigned int prev_last_obj_cnt;
-	unsigned int lowest_slack;
-	long unsigned int slack_start_time;
-	unsigned int max_limit;
-	unsigned int min_limit;
-	unsigned int slack_hold_time;
-	long: 32;
+	long: 64;
+};
+
+struct blockgroup_lock {
+	struct bgl_lock locks[128];
+};
+
+typedef int ext2_grpblk_t;
+
+typedef long unsigned int ext2_fsblk_t;
+
+struct ext2_reserve_window {
+	ext2_fsblk_t _rsv_start;
+	ext2_fsblk_t _rsv_end;
+};
+
+struct ext2_reserve_window_node {
+	struct rb_node rsv_node;
+	__u32 rsv_goal_size;
+	__u32 rsv_alloc_hit;
+	struct ext2_reserve_window rsv_window;
+};
+
+struct ext2_block_alloc_info {
+	struct ext2_reserve_window_node rsv_window_node;
+	__u32 last_alloc_logical_block;
+	ext2_fsblk_t last_alloc_physical_block;
+};
+
+struct mb_cache;
+
+struct ext2_super_block;
+
+struct dax_device;
+
+struct ext2_sb_info {
+	long unsigned int s_frag_size;
+	long unsigned int s_frags_per_block;
+	long unsigned int s_inodes_per_block;
+	long unsigned int s_frags_per_group;
+	long unsigned int s_blocks_per_group;
+	long unsigned int s_inodes_per_group;
+	long unsigned int s_itb_per_group;
+	long unsigned int s_gdb_count;
+	long unsigned int s_desc_per_block;
+	long unsigned int s_groups_count;
+	long unsigned int s_overhead_last;
+	long unsigned int s_blocks_last;
+	struct buffer_head *s_sbh;
+	struct ext2_super_block *s_es;
+	struct buffer_head **s_group_desc;
+	long unsigned int s_mount_opt;
+	long unsigned int s_sb_block;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	short unsigned int s_mount_state;
+	short unsigned int s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	spinlock_t s_next_gen_lock;
+	u32 s_next_generation;
+	long unsigned int s_dir_count;
+	u8 *s_debts;
+	struct percpu_counter s_freeblocks_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct blockgroup_lock *s_blockgroup_lock;
+	spinlock_t s_rsv_window_lock;
+	struct rb_root s_rsv_window_root;
+	struct ext2_reserve_window_node s_rsv_window_head;
+	spinlock_t s_lock;
+	struct mb_cache *s_ea_block_cache;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+};
+
+struct ext2_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count;
+	__le32 s_r_blocks_count;
+	__le32 s_free_blocks_count;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_frag_size;
+	__le32 s_blocks_per_group;
+	__le32 s_frags_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__u16 s_padding1;
+	__u8 s_journal_uuid[16];
+	__u32 s_journal_inum;
+	__u32 s_journal_dev;
+	__u32 s_last_orphan;
+	__u32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_reserved_char_pad;
+	__u16 s_reserved_word_pad;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__u32 s_reserved[190];
+};
+
+struct ext2_group_desc {
+	__le32 bg_block_bitmap;
+	__le32 bg_inode_bitmap;
+	__le32 bg_inode_table;
+	__le16 bg_free_blocks_count;
+	__le16 bg_free_inodes_count;
+	__le16 bg_used_dirs_count;
+	__le16 bg_pad;
+	__le32 bg_reserved[3];
+};
+
+struct ext2_inode_info {
+	__le32 i_data[15];
+	__u32 i_flags;
+	__u32 i_faddr;
+	__u8 i_frag_no;
+	__u8 i_frag_size;
+	__u16 i_state;
+	__u32 i_file_acl;
+	__u32 i_dir_acl;
+	__u32 i_dtime;
+	__u32 i_block_group;
+	struct ext2_block_alloc_info *i_block_alloc_info;
+	__u32 i_dir_start_lookup;
+	struct rw_semaphore xattr_sem;
+	rwlock_t i_meta_lock;
+	struct mutex truncate_mutex;
+	struct inode vfs_inode;
+	struct list_head i_orphan;
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+struct fat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	short unsigned int fs_fmask;
+	short unsigned int fs_dmask;
+	short unsigned int codepage;
+	int time_offset;
+	char *iocharset;
+	short unsigned int shortname;
+	unsigned char name_check;
+	unsigned char errors;
+	unsigned char nfs;
+	short unsigned int allow_utime;
+	unsigned int quiet: 1;
+	unsigned int showexec: 1;
+	unsigned int sys_immutable: 1;
+	unsigned int dotsOK: 1;
+	unsigned int isvfat: 1;
+	unsigned int utf8: 1;
+	unsigned int unicode_xlate: 1;
+	unsigned int numtail: 1;
+	unsigned int flush: 1;
+	unsigned int nocase: 1;
+	unsigned int usefree: 1;
+	unsigned int tz_set: 1;
+	unsigned int rodir: 1;
+	unsigned int discard: 1;
+	unsigned int dos1xfloppy: 1;
+};
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+	short unsigned int sec_per_clus;
+	short unsigned int cluster_bits;
+	unsigned int cluster_size;
+	unsigned char fats;
+	unsigned char fat_bits;
+	short unsigned int fat_start;
+	long unsigned int fat_length;
+	long unsigned int dir_start;
+	short unsigned int dir_entries;
+	long unsigned int data_start;
+	long unsigned int max_cluster;
+	long unsigned int root_cluster;
+	long unsigned int fsinfo_sector;
+	struct mutex fat_lock;
+	struct mutex nfs_build_inode_lock;
+	struct mutex s_lock;
+	unsigned int prev_free;
+	unsigned int free_clusters;
+	unsigned int free_clus_valid;
+	struct fat_mount_options options;
+	struct nls_table *nls_disk;
+	struct nls_table *nls_io;
+	const void *dir_ops;
+	int dir_per_block;
+	int dir_per_block_bits;
+	unsigned int vol_id;
+	int fatent_shift;
+	const struct fatent_operations *fatent_ops;
+	struct inode *fat_inode;
+	struct inode *fsinfo_inode;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+	spinlock_t dir_hash_lock;
+	struct hlist_head dir_hashtable[256];
+	unsigned int dirty;
+	struct callback_head rcu;
+};
+
+struct fat_entry;
+
+struct fatent_operations {
+	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
+	void (*ent_set_ptr)(struct fat_entry *, int);
+	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
+	int (*ent_get)(struct fat_entry *);
+	void (*ent_put)(struct fat_entry *, int);
+	int (*ent_next)(struct fat_entry *);
+};
+
+struct msdos_inode_info {
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t mmu_private;
+	int i_start;
+	int i_logstart;
+	int i_attrs;
+	loff_t i_pos;
+	struct hlist_node i_fat_hash;
+	struct hlist_node i_dir_hash;
+	struct rw_semaphore truncate_lock;
+	struct timespec64 i_crtime;
+	struct inode vfs_inode;
+};
+
+struct fat_entry {
+	int entry;
+	union {
+		u8 *ent12_p[2];
+		__le16 *ent16_p;
+		__le32 *ent32_p;
+	} u;
+	int nr_bhs;
+	struct buffer_head *bhs[2];
+	struct inode *fat_inode;
+};
+
+struct fat_cache {
+	struct list_head cache_list;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct fat_cache_id {
+	unsigned int id;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+struct posix_acl_entry {
+	short int e_tag;
+	short unsigned int e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+struct rpc_timer {
+	struct list_head list;
+	long unsigned int expires;
+	struct delayed_work dwork;
+};
+
+struct rpc_wait_queue {
+	spinlock_t lock;
+	struct list_head tasks[4];
+	unsigned char maxpriority;
+	unsigned char priority;
+	unsigned char nr;
+	short unsigned int qlen;
+	struct rpc_timer timer_list;
+	const char *name;
+};
+
+struct nfs_seqid_counter {
+	ktime_t create_time;
+	int owner_id;
+	int flags;
+	u32 counter;
+	spinlock_t lock;
+	struct list_head list;
+	struct rpc_wait_queue wait;
+};
+
+struct nfs4_stateid_struct {
+	union {
+		char data[16];
+		struct {
+			__be32 seqid;
+			char other[12];
+		};
+	};
+	enum {
+		NFS4_INVALID_STATEID_TYPE = 0,
+		NFS4_SPECIAL_STATEID_TYPE = 1,
+		NFS4_OPEN_STATEID_TYPE = 2,
+		NFS4_LOCK_STATEID_TYPE = 3,
+		NFS4_DELEGATION_STATEID_TYPE = 4,
+		NFS4_LAYOUT_STATEID_TYPE = 5,
+		NFS4_PNFS_DS_STATEID_TYPE = 6,
+		NFS4_REVOKED_STATEID_TYPE = 7,
+	} type;
+};
+
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+struct nfs4_state;
+
+struct nfs4_lock_state {
+	struct list_head ls_locks;
+	struct nfs4_state *ls_state;
+	long unsigned int ls_flags;
+	struct nfs_seqid_counter ls_seqid;
+	nfs4_stateid ls_stateid;
+	refcount_t ls_count;
+	fl_owner_t ls_owner;
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		void *ptr[0];
+	};
+};
+
+struct xdr_buf {
+	struct kvec head[1];
+	struct kvec tail[1];
+	struct bio_vec *bvec;
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int flags;
+	unsigned int buflen;
+	unsigned int len;
+};
+
+struct rpc_rqst;
+
+struct xdr_stream {
+	__be32 *p;
+	struct xdr_buf *buf;
+	__be32 *end;
+	struct kvec *iov;
+	struct kvec scratch;
+	struct page **page_ptr;
+	unsigned int nwords;
+	struct rpc_rqst *rqst;
+};
+
+struct rpc_xprt;
+
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+	struct rpc_xprt *rq_xprt;
+	struct xdr_buf rq_snd_buf;
+	struct xdr_buf rq_rcv_buf;
+	struct rpc_task *rq_task;
+	struct rpc_cred *rq_cred;
+	__be32 rq_xid;
+	int rq_cong;
+	u32 rq_seqno;
+	int rq_enc_pages_num;
+	struct page **rq_enc_pages;
+	void (*rq_release_snd_buf)(struct rpc_rqst *);
+	union {
+		struct list_head rq_list;
+		struct rb_node rq_recv;
+	};
+	struct list_head rq_xmit;
+	struct list_head rq_xmit2;
+	void *rq_buffer;
+	size_t rq_callsize;
+	void *rq_rbuffer;
+	size_t rq_rcvsize;
+	size_t rq_xmit_bytes_sent;
+	size_t rq_reply_bytes_recvd;
+	struct xdr_buf rq_private_buf;
+	long unsigned int rq_majortimeo;
+	long unsigned int rq_minortimeo;
+	long unsigned int rq_timeout;
+	ktime_t rq_rtt;
+	unsigned int rq_retries;
+	unsigned int rq_connect_cookie;
+	atomic_t rq_pin;
+	u32 rq_bytes_sent;
+	ktime_t rq_xtime;
+	int rq_ntrans;
+};
+
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+	const struct rpc_procinfo *rpc_proc;
+	void *rpc_argp;
+	void *rpc_resp;
+	const struct cred *rpc_cred;
+};
+
+struct rpc_procinfo {
+	u32 p_proc;
+	kxdreproc_t p_encode;
+	kxdrdproc_t p_decode;
+	unsigned int p_arglen;
+	unsigned int p_replen;
+	unsigned int p_timer;
+	u32 p_statidx;
+	const char *p_name;
+};
+
+struct rpc_wait {
+	struct list_head list;
+	struct list_head links;
+	struct list_head timer_list;
+};
+
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+	atomic_t tk_count;
+	int tk_status;
+	struct list_head tk_task;
+	void (*tk_callback)(struct rpc_task *);
+	void (*tk_action)(struct rpc_task *);
+	long unsigned int tk_timeout;
+	long unsigned int tk_runstate;
+	struct rpc_wait_queue *tk_waitqueue;
+	union {
+		struct work_struct tk_work;
+		struct rpc_wait tk_wait;
+	} u;
+	struct rpc_message tk_msg;
+	void *tk_calldata;
+	const struct rpc_call_ops *tk_ops;
+	struct rpc_clnt *tk_client;
+	struct rpc_xprt *tk_xprt;
+	struct rpc_cred *tk_op_cred;
+	struct rpc_rqst *tk_rqstp;
+	struct workqueue_struct *tk_workqueue;
+	ktime_t tk_start;
+	pid_t tk_owner;
+	int tk_rpc_status;
+	short unsigned int tk_flags;
+	short unsigned int tk_timeouts;
+	short unsigned int tk_pid;
+	unsigned char tk_priority: 2;
+	unsigned char tk_garb_retry: 2;
+	unsigned char tk_cred_retry: 2;
+	unsigned char tk_rebind_retry: 2;
+};
+
+struct rpc_call_ops {
+	void (*rpc_call_prepare)(struct rpc_task *, void *);
+	void (*rpc_call_done)(struct rpc_task *, void *);
+	void (*rpc_count_stats)(struct rpc_task *, void *);
+	void (*rpc_release)(void *);
+};
+
+struct rpc_pipe_dir_head {
+	struct list_head pdh_entries;
+	struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+	long unsigned int timeo;
+	long unsigned int srtt[5];
+	long unsigned int sdrtt[5];
+	int ntimeouts[5];
+};
+
+struct rpc_timeout {
+	long unsigned int to_initval;
+	long unsigned int to_maxval;
+	long unsigned int to_increment;
+	unsigned int to_retries;
+	unsigned char to_exponential;
+};
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+	struct rpc_xprt_switch *xpi_xpswitch;
+	struct rpc_xprt *xpi_cursor;
+	const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_iostats;
+
+struct rpc_program;
+
+struct rpc_sysfs_client;
+
+struct rpc_clnt {
+	refcount_t cl_count;
+	unsigned int cl_clid;
+	struct list_head cl_clients;
+	struct list_head cl_tasks;
+	atomic_t cl_pid;
+	spinlock_t cl_lock;
+	struct rpc_xprt *cl_xprt;
+	const struct rpc_procinfo *cl_procinfo;
+	u32 cl_prog;
+	u32 cl_vers;
+	u32 cl_maxproc;
+	struct rpc_auth *cl_auth;
+	struct rpc_stat *cl_stats;
+	struct rpc_iostats *cl_metrics;
+	unsigned int cl_softrtry: 1;
+	unsigned int cl_softerr: 1;
+	unsigned int cl_discrtry: 1;
+	unsigned int cl_noretranstimeo: 1;
+	unsigned int cl_autobind: 1;
+	unsigned int cl_chatty: 1;
+	struct rpc_rtt *cl_rtt;
+	const struct rpc_timeout *cl_timeout;
+	atomic_t cl_swapper;
+	int cl_nodelen;
+	char cl_nodename[65];
+	struct rpc_pipe_dir_head cl_pipedir_objects;
+	struct rpc_clnt *cl_parent;
+	struct rpc_rtt cl_rtt_default;
+	struct rpc_timeout cl_timeout_default;
+	const struct rpc_program *cl_program;
+	const char *cl_principal;
+	struct rpc_sysfs_client *cl_sysfs;
+	union {
+		struct rpc_xprt_iter cl_xpi;
+		struct work_struct cl_work;
+	};
+	const struct cred *cl_cred;
+	unsigned int cl_max_connect;
+};
+
+struct rpc_xprt_ops;
+
+struct svc_xprt;
+
+struct xprt_class;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt {
+	struct kref kref;
+	const struct rpc_xprt_ops *ops;
+	unsigned int id;
+	const struct rpc_timeout *timeout;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	int prot;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	size_t max_payload;
+	struct rpc_wait_queue binding;
+	struct rpc_wait_queue sending;
+	struct rpc_wait_queue pending;
+	struct rpc_wait_queue backlog;
+	struct list_head free;
+	unsigned int max_reqs;
+	unsigned int min_reqs;
+	unsigned int num_reqs;
+	long unsigned int state;
+	unsigned char resvport: 1;
+	unsigned char reuseport: 1;
+	atomic_t swapper;
+	unsigned int bind_index;
+	struct list_head xprt_switch;
+	long unsigned int bind_timeout;
+	long unsigned int reestablish_timeout;
+	unsigned int connect_cookie;
+	struct work_struct task_cleanup;
+	struct timer_list timer;
+	long unsigned int last_used;
+	long unsigned int idle_timeout;
+	long unsigned int connect_timeout;
+	long unsigned int max_reconnect_timeout;
+	atomic_long_t queuelen;
+	spinlock_t transport_lock;
+	spinlock_t reserve_lock;
+	spinlock_t queue_lock;
+	u32 xid;
+	struct rpc_task *snd_task;
+	struct list_head xmit_queue;
+	atomic_long_t xmit_queuelen;
+	struct svc_xprt *bc_xprt;
+	struct rb_root recv_queue;
+	struct {
+		long unsigned int bind_count;
+		long unsigned int connect_count;
+		long unsigned int connect_start;
+		long unsigned int connect_time;
+		long unsigned int sends;
+		long unsigned int recvs;
+		long unsigned int bad_xids;
+		long unsigned int max_slots;
+		long long unsigned int req_u;
+		long long unsigned int bklog_u;
+		long long unsigned int sending_u;
+		long long unsigned int pending_u;
+	} stat;
+	struct net *xprt_net;
+	netns_tracker ns_tracker;
+	const char *servername;
+	const char *address_strings[6];
+	struct callback_head rcu;
+	const struct xprt_class *xprt_class;
+	struct rpc_sysfs_xprt *xprt_sysfs;
+	bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+	struct hlist_node cr_hash;
+	struct list_head cr_lru;
+	struct callback_head cr_rcu;
+	struct rpc_auth *cr_auth;
+	const struct rpc_credops *cr_ops;
+	long unsigned int cr_expire;
+	long unsigned int cr_flags;
+	refcount_t cr_count;
+	const struct cred *cr_cred;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+	const struct cred *cred;
+	const char *principal;
+};
+
+struct rpc_authops;
+
+struct rpc_cred_cache;
+
+struct rpc_auth {
+	unsigned int au_cslack;
+	unsigned int au_rslack;
+	unsigned int au_verfsize;
+	unsigned int au_ralign;
+	long unsigned int au_flags;
+	const struct rpc_authops *au_ops;
+	rpc_authflavor_t au_flavor;
+	refcount_t au_count;
+	struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+	const char *cr_name;
+	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+	void (*crdestroy)(struct rpc_cred *);
+	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+	int (*crrefresh)(struct rpc_task *);
+	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+	int (*crkey_timeout)(struct rpc_cred *);
+	char * (*crstringify_acceptor)(struct rpc_cred *);
+	bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+	struct module *owner;
+	rpc_authflavor_t au_flavor;
+	char *au_name;
+	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+	void (*destroy)(struct rpc_auth *);
+	int (*hash_cred)(struct auth_cred *, unsigned int);
+	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+};
+
+struct rpc_auth_create_args {
+	rpc_authflavor_t pseudoflavor;
+	const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+	unsigned int len;
+	u8 data[32];
+};
+
+struct rpcsec_gss_info {
+	struct rpcsec_gss_oid oid;
+	u32 qop;
+	u32 service;
+};
+
+enum rpc_display_format_t {
+	RPC_DISPLAY_ADDR = 0,
+	RPC_DISPLAY_PORT = 1,
+	RPC_DISPLAY_PROTO = 2,
+	RPC_DISPLAY_HEX_ADDR = 3,
+	RPC_DISPLAY_HEX_PORT = 4,
+	RPC_DISPLAY_NETID = 5,
+	RPC_DISPLAY_MAX = 6,
+};
+
+struct rpc_xprt_ops {
+	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+	void (*rpcbind)(struct rpc_task *);
+	void (*set_port)(struct rpc_xprt *, short unsigned int);
+	void (*connect)(struct rpc_xprt *, struct rpc_task *);
+	int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+	short unsigned int (*get_srcport)(struct rpc_xprt *);
+	int (*buf_alloc)(struct rpc_task *);
+	void (*buf_free)(struct rpc_task *);
+	int (*prepare_request)(struct rpc_rqst *, struct xdr_buf *);
+	int (*send_request)(struct rpc_rqst *);
+	void (*wait_for_reply_request)(struct rpc_task *);
+	void (*timer)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_request)(struct rpc_task *);
+	void (*close)(struct rpc_xprt *);
+	void (*destroy)(struct rpc_xprt *);
+	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+	int (*enable_swap)(struct rpc_xprt *);
+	void (*disable_swap)(struct rpc_xprt *);
+	void (*inject_disconnect)(struct rpc_xprt *);
+	int (*bc_setup)(struct rpc_xprt *, unsigned int);
+	size_t (*bc_maxpayload)(struct rpc_xprt *);
+	unsigned int (*bc_num_slots)(struct rpc_xprt *);
+	void (*bc_free_rqst)(struct rpc_rqst *);
+	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct xprt_create;
+
+struct xprt_class {
+	struct list_head list;
+	int ident;
+	struct rpc_xprt * (*setup)(struct xprt_create *);
+	struct module *owner;
+	char name[32];
+	const char *netid[0];
+};
+
+struct xprt_create {
+	int ident;
+	struct net *net;
+	struct sockaddr *srcaddr;
+	struct sockaddr *dstaddr;
+	size_t addrlen;
+	const char *servername;
+	struct svc_xprt *bc_xprt;
+	struct rpc_xprt_switch *bc_xps;
+	unsigned int flags;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+	spinlock_t xps_lock;
+	struct kref xps_kref;
+	unsigned int xps_id;
+	unsigned int xps_nxprts;
+	unsigned int xps_nactive;
+	unsigned int xps_nunique_destaddr_xprts;
+	atomic_long_t xps_queuelen;
+	struct list_head xps_xprt_list;
+	struct net *xps_net;
+	const struct rpc_xprt_iter_ops *xps_iter_ops;
+	struct rpc_sysfs_xprt_switch *xps_sysfs;
+	struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+	const struct rpc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int netreconn;
+	unsigned int rpccnt;
+	unsigned int rpcretrans;
+	unsigned int rpcauthrefresh;
+	unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+	const char *name;
+	u32 number;
+	unsigned int nrvers;
+	const struct rpc_version **version;
+	struct rpc_stat *stats;
+	const char *pipe_dir_name;
+};
+
+struct rpc_pipe_msg {
+	struct list_head list;
+	void *data;
+	size_t len;
+	size_t copied;
+	int errno;
+};
+
+struct rpc_pipe_ops {
+	ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char *, size_t);
+	ssize_t (*downcall)(struct file *, const char *, size_t);
+	void (*release_pipe)(struct inode *);
+	int (*open_pipe)(struct inode *);
+	void (*destroy_msg)(struct rpc_pipe_msg *);
+};
+
+struct rpc_pipe {
+	struct list_head pipe;
+	struct list_head in_upcall;
+	struct list_head in_downcall;
+	int pipelen;
+	int nreaders;
+	int nwriters;
+	int flags;
+	struct delayed_work queue_timeout;
+	const struct rpc_pipe_ops *ops;
+	spinlock_t lock;
+	struct dentry *dentry;
+};
+
+struct rpc_xprt_iter_ops {
+	void (*xpi_rewind)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_version {
+	u32 number;
+	unsigned int nrprocs;
+	const struct rpc_procinfo *procs;
+	unsigned int *counts;
+};
+
+struct nfs_fh {
+	short unsigned int size;
+	unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+	NFS_UNSTABLE = 0,
+	NFS_DATA_SYNC = 1,
+	NFS_FILE_SYNC = 2,
+	NFS_INVALID_STABLE_HOW = -1,
+};
+
+struct nfs4_label {
+	uint32_t lfs;
+	uint32_t pi;
+	u32 len;
+	char *label;
+};
+
+typedef struct {
+	char data[8];
+} nfs4_verifier;
+
+enum nfs_opnum4 {
+	OP_ACCESS = 3,
+	OP_CLOSE = 4,
+	OP_COMMIT = 5,
+	OP_CREATE = 6,
+	OP_DELEGPURGE = 7,
+	OP_DELEGRETURN = 8,
+	OP_GETATTR = 9,
+	OP_GETFH = 10,
+	OP_LINK = 11,
+	OP_LOCK = 12,
+	OP_LOCKT = 13,
+	OP_LOCKU = 14,
+	OP_LOOKUP = 15,
+	OP_LOOKUPP = 16,
+	OP_NVERIFY = 17,
+	OP_OPEN = 18,
+	OP_OPENATTR = 19,
+	OP_OPEN_CONFIRM = 20,
+	OP_OPEN_DOWNGRADE = 21,
+	OP_PUTFH = 22,
+	OP_PUTPUBFH = 23,
+	OP_PUTROOTFH = 24,
+	OP_READ = 25,
+	OP_READDIR = 26,
+	OP_READLINK = 27,
+	OP_REMOVE = 28,
+	OP_RENAME = 29,
+	OP_RENEW = 30,
+	OP_RESTOREFH = 31,
+	OP_SAVEFH = 32,
+	OP_SECINFO = 33,
+	OP_SETATTR = 34,
+	OP_SETCLIENTID = 35,
+	OP_SETCLIENTID_CONFIRM = 36,
+	OP_VERIFY = 37,
+	OP_WRITE = 38,
+	OP_RELEASE_LOCKOWNER = 39,
+	OP_BACKCHANNEL_CTL = 40,
+	OP_BIND_CONN_TO_SESSION = 41,
+	OP_EXCHANGE_ID = 42,
+	OP_CREATE_SESSION = 43,
+	OP_DESTROY_SESSION = 44,
+	OP_FREE_STATEID = 45,
+	OP_GET_DIR_DELEGATION = 46,
+	OP_GETDEVICEINFO = 47,
+	OP_GETDEVICELIST = 48,
+	OP_LAYOUTCOMMIT = 49,
+	OP_LAYOUTGET = 50,
+	OP_LAYOUTRETURN = 51,
+	OP_SECINFO_NO_NAME = 52,
+	OP_SEQUENCE = 53,
+	OP_SET_SSV = 54,
+	OP_TEST_STATEID = 55,
+	OP_WANT_DELEGATION = 56,
+	OP_DESTROY_CLIENTID = 57,
+	OP_RECLAIM_COMPLETE = 58,
+	OP_ALLOCATE = 59,
+	OP_COPY = 60,
+	OP_COPY_NOTIFY = 61,
+	OP_DEALLOCATE = 62,
+	OP_IO_ADVISE = 63,
+	OP_LAYOUTERROR = 64,
+	OP_LAYOUTSTATS = 65,
+	OP_OFFLOAD_CANCEL = 66,
+	OP_OFFLOAD_STATUS = 67,
+	OP_READ_PLUS = 68,
+	OP_SEEK = 69,
+	OP_WRITE_SAME = 70,
+	OP_CLONE = 71,
+	OP_GETXATTR = 72,
+	OP_SETXATTR = 73,
+	OP_LISTXATTRS = 74,
+	OP_REMOVEXATTR = 75,
+	OP_ILLEGAL = 10044,
+};
+
+enum nfs4_change_attr_type {
+	NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+	NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+	NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct nfs4_string {
+	unsigned int len;
+	char *data;
+};
+
+struct nfs_fsid {
+	uint64_t major;
+	uint64_t minor;
+};
+
+struct nfs4_threshold {
+	__u32 bm;
+	__u32 l_type;
+	__u64 rd_sz;
+	__u64 wr_sz;
+	__u64 rd_io_sz;
+	__u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+	unsigned int valid;
+	umode_t mode;
+	__u32 nlink;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	__u64 size;
+	union {
+		struct {
+			__u32 blocksize;
+			__u32 blocks;
+		} nfs2;
+		struct {
+			__u64 used;
+		} nfs3;
+	} du;
+	struct nfs_fsid fsid;
+	__u64 fileid;
+	__u64 mounted_on_fileid;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	__u64 change_attr;
+	__u64 pre_change_attr;
+	__u64 pre_size;
+	struct timespec64 pre_mtime;
+	struct timespec64 pre_ctime;
+	long unsigned int time_start;
+	long unsigned int gencount;
+	struct nfs4_string *owner_name;
+	struct nfs4_string *group_name;
+	struct nfs4_threshold *mdsthreshold;
+	struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+	struct nfs_fattr *fattr;
+	__u32 rtmax;
+	__u32 rtpref;
+	__u32 rtmult;
+	__u32 wtmax;
+	__u32 wtpref;
+	__u32 wtmult;
+	__u32 dtpref;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	__u32 lease_time;
+	__u32 nlayouttypes;
+	__u32 layouttype[8];
+	__u32 blksize;
+	__u32 clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	__u32 xattr_support;
+};
+
+struct nfs_fsstat {
+	struct nfs_fattr *fattr;
+	__u64 tbytes;
+	__u64 fbytes;
+	__u64 abytes;
+	__u64 tfiles;
+	__u64 ffiles;
+	__u64 afiles;
+};
+
+struct nfs_pathconf {
+	struct nfs_fattr *fattr;
+	__u32 max_link;
+	__u32 max_namelen;
+};
+
+struct nfs4_change_info {
+	u32 atomic;
+	u64 before;
+	u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+	struct nfs4_slot *sa_slot;
+	u8 sa_cache_this: 1;
+	u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+	struct nfs4_slot *sr_slot;
+	long unsigned int sr_timestamp;
+	int sr_status;
+	u32 sr_status_flags;
+	u32 sr_highest_slotid;
+	u32 sr_target_highest_slotid;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+	refcount_t count;
+	struct list_head list;
+	struct nfs_open_context *open_context;
+	fl_owner_t lockowner;
+	atomic_t io_count;
+	struct callback_head callback_head;
+};
+
+struct nfs_open_context {
+	struct nfs_lock_context lock_context;
+	fl_owner_t flock_owner;
+	struct dentry *dentry;
+	const struct cred *cred;
+	struct rpc_cred *ll_cred;
+	struct nfs4_state *state;
+	fmode_t mode;
+	long unsigned int flags;
+	int error;
+	struct list_head list;
+	struct nfs4_threshold *mdsthreshold;
+	struct callback_head callback_head;
+};
+
+struct nlm_host;
+
+struct nfs_auth_info {
+	unsigned int flavor_len;
+	rpc_authflavor_t flavors[12];
+};
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_client;
+
+struct nfs_iostats;
+
+struct nfs_server {
+	struct nfs_client *nfs_client;
+	struct list_head client_link;
+	struct list_head master_link;
+	struct rpc_clnt *client;
+	struct rpc_clnt *client_acl;
+	struct nlm_host *nlm_host;
+	struct nfs_iostats *io_stats;
+	atomic_long_t writeback;
+	unsigned int write_congested;
+	unsigned int flags;
+	unsigned int fattr_valid;
+	unsigned int caps;
+	unsigned int rsize;
+	unsigned int rpages;
+	unsigned int wsize;
+	unsigned int wpages;
+	unsigned int wtmult;
+	unsigned int dtsize;
+	short unsigned int port;
+	unsigned int bsize;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namelen;
+	unsigned int options;
+	unsigned int clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	struct nfs_fsid fsid;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	long unsigned int mount_time;
+	struct super_block *super;
+	dev_t s_dev;
+	struct nfs_auth_info auth_info;
+	u32 pnfs_blksize;
+	u32 attr_bitmask[3];
+	u32 attr_bitmask_nl[3];
+	u32 exclcreat_bitmask[3];
+	u32 cache_consistency_bitmask[3];
+	u32 acl_bitmask;
+	u32 fh_expire_type;
+	struct pnfs_layoutdriver_type *pnfs_curr_ld;
+	struct rpc_wait_queue roc_rpcwaitq;
+	void *pnfs_ld_data;
+	struct rb_root state_owners;
+	struct ida openowner_id;
+	struct ida lockowner_id;
+	struct list_head state_owners_lru;
+	struct list_head layouts;
+	struct list_head delegations;
+	struct list_head ss_copies;
+	long unsigned int mig_gen;
+	long unsigned int mig_status;
+	void (*destroy)(struct nfs_server *);
+	atomic_t active;
+	struct __kernel_sockaddr_storage mountd_address;
+	size_t mountd_addrlen;
+	u32 mountd_version;
+	short unsigned int mountd_port;
+	short unsigned int mountd_protocol;
+	struct rpc_wait_queue uoc_rpcwaitq;
+	unsigned int read_hdrsize;
+	const struct cred *cred;
+	bool has_sec_mnt_opts;
+};
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_rpc_ops;
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_minor_version_ops;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs_client {
+	refcount_t cl_count;
+	atomic_t cl_mds_count;
+	int cl_cons_state;
+	long unsigned int cl_res_state;
+	long unsigned int cl_flags;
+	struct __kernel_sockaddr_storage cl_addr;
+	size_t cl_addrlen;
+	char *cl_hostname;
+	char *cl_acceptor;
+	struct list_head cl_share_link;
+	struct list_head cl_superblocks;
+	struct rpc_clnt *cl_rpcclient;
+	const struct nfs_rpc_ops *rpc_ops;
+	int cl_proto;
+	struct nfs_subversion *cl_nfs_mod;
+	u32 cl_minorversion;
+	unsigned int cl_nconnect;
+	unsigned int cl_max_connect;
+	const char *cl_principal;
+	struct list_head cl_ds_clients;
+	u64 cl_clientid;
+	nfs4_verifier cl_confirm;
+	long unsigned int cl_state;
+	spinlock_t cl_lock;
+	long unsigned int cl_lease_time;
+	long unsigned int cl_last_renewal;
+	struct delayed_work cl_renewd;
+	struct rpc_wait_queue cl_rpcwaitq;
+	struct idmap *cl_idmap;
+	const char *cl_owner_id;
+	u32 cl_cb_ident;
+	const struct nfs4_minor_version_ops *cl_mvops;
+	long unsigned int cl_mig_gen;
+	struct nfs4_slot_table *cl_slot_tbl;
+	u32 cl_seqid;
+	u32 cl_exchange_flags;
+	struct nfs4_session *cl_session;
+	bool cl_preserve_clid;
+	struct nfs41_server_owner *cl_serverowner;
+	struct nfs41_server_scope *cl_serverscope;
+	struct nfs41_impl_id *cl_implid;
+	long unsigned int cl_sp4_flags;
+	char cl_ipaddr[48];
+	struct net *cl_net;
+	struct list_head pending_cb_stateids;
+};
+
+struct nfs_seqid {
+	struct nfs_seqid_counter *sequence;
+	struct list_head list;
+	struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+	char data[8];
+};
+
+struct nfs_writeverf {
+	struct nfs_write_verifier verifier;
+	enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct nfs_open_context *context;
+	struct nfs_lock_context *lock_context;
+	nfs4_stateid stateid;
+	__u64 offset;
+	__u32 count;
+	unsigned int pgbase;
+	struct page **pages;
+	union {
+		unsigned int replen;
+		struct {
+			const u32 *bitmask;
+			u32 bitmask_store[3];
+			enum nfs3_stable_how stable;
+		};
+	};
+};
+
+struct nfs_pgio_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	__u64 count;
+	__u32 op_status;
+	union {
+		struct {
+			unsigned int replen;
+			int eof;
+		};
+		struct {
+			struct nfs_writeverf *verf;
+			const struct nfs_server *server;
+		};
+	};
+};
+
+struct nfs_commitargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	__u64 offset;
+	__u32 count;
+	const u32 *bitmask;
+};
+
+struct nfs_commitres {
+	struct nfs4_sequence_res seq_res;
+	__u32 op_status;
+	struct nfs_fattr *fattr;
+	struct nfs_writeverf *verf;
+	const struct nfs_server *server;
+};
+
+struct nfs_removeargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct qstr name;
+};
+
+struct nfs_removeres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs_fattr *dir_attr;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *old_dir;
+	const struct nfs_fh *new_dir;
+	const struct qstr *old_name;
+	const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs4_change_info old_cinfo;
+	struct nfs_fattr *old_fattr;
+	struct nfs4_change_info new_cinfo;
+	struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+	__u64 ino;
+	__u64 cookie;
+	const char *name;
+	unsigned int len;
+	int eof;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	unsigned char d_type;
+	struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+	struct dentry *dentry;
+	const struct cred *cred;
+	__be32 *verf;
+	u64 cookie;
+	struct page **pages;
+	unsigned int page_len;
+	bool plus;
+};
+
+struct nfs_readdir_res {
+	__be32 *verf;
+};
+
+struct nfs4_pathname {
+	unsigned int ncomponents;
+	struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+	unsigned int nservers;
+	struct nfs4_string servers[10];
+	struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	struct nfs4_pathname fs_path;
+	int nlocations;
+	struct nfs4_fs_location locations[10];
+};
+
+struct pnfs_ds_commit_info {};
+
+struct nfs_page_array {
+	struct page **pagevec;
+	unsigned int npages;
+	struct page *page_array[8];
+};
+
+struct nfs_page;
+
+struct pnfs_layout_segment;
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_header {
+	struct inode *inode;
+	const struct cred *cred;
+	struct list_head pages;
+	struct nfs_page *req;
+	struct nfs_writeverf verf;
+	fmode_t rw_mode;
+	struct pnfs_layout_segment *lseg;
+	loff_t io_start;
+	const struct rpc_call_ops *mds_ops;
+	void (*release)(struct nfs_pgio_header *);
+	const struct nfs_pgio_completion_ops *completion_ops;
+	const struct nfs_rw_ops *rw_ops;
+	struct nfs_io_completion *io_completion;
+	struct nfs_direct_req *dreq;
+	int pnfs_error;
+	int error;
+	unsigned int good_bytes;
+	long unsigned int flags;
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct nfs_pgio_args args;
+	struct nfs_pgio_res res;
+	long unsigned int timestamp;
+	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+	__u64 mds_offset;
+	struct nfs_page_array page_array;
+	struct nfs_client *ds_clp;
+	u32 ds_commit_idx;
+	u32 pgio_mirror_idx;
+};
+
+struct nfs_pgio_completion_ops {
+	void (*error_cleanup)(struct list_head *, int);
+	void (*init_hdr)(struct nfs_pgio_header *);
+	void (*completion)(struct nfs_pgio_header *);
+	void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct rpc_task_setup;
+
+struct nfs_rw_ops {
+	struct nfs_pgio_header * (*rw_alloc_header)();
+	void (*rw_free_header)(struct nfs_pgio_header *);
+	int (*rw_done)(struct rpc_task *, struct nfs_pgio_header *, struct inode *);
+	void (*rw_result)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*rw_initiate)(struct nfs_pgio_header *, struct rpc_message *, const struct nfs_rpc_ops *, struct rpc_task_setup *, int);
+};
+
+struct nfs_mds_commit_info {
+	atomic_t rpcs_out;
+	atomic_long_t ncommit;
+	struct list_head list;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_info;
+
+struct nfs_commit_completion_ops {
+	void (*completion)(struct nfs_commit_data *);
+	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+	struct rpc_task task;
+	struct inode *inode;
+	const struct cred *cred;
+	struct nfs_fattr fattr;
+	struct nfs_writeverf verf;
+	struct list_head pages;
+	struct list_head list;
+	struct nfs_direct_req *dreq;
+	struct nfs_commitargs args;
+	struct nfs_commitres res;
+	struct nfs_open_context *context;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_client *ds_clp;
+	int ds_commit_index;
+	loff_t lwb;
+	const struct rpc_call_ops *mds_ops;
+	const struct nfs_commit_completion_ops *completion_ops;
+	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+	long unsigned int flags;
+};
+
+struct nfs_commit_info {
+	struct inode *inode;
+	struct nfs_mds_commit_info *mds;
+	struct pnfs_ds_commit_info *ds;
+	struct nfs_direct_req *dreq;
+	const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+	struct nfs_removeargs args;
+	struct nfs_removeres res;
+	struct dentry *dentry;
+	wait_queue_head_t wq;
+	const struct cred *cred;
+	struct nfs_fattr dir_attr;
+	long int timeout;
+};
+
+struct nfs_renamedata {
+	struct nfs_renameargs args;
+	struct nfs_renameres res;
+	struct rpc_task task;
+	const struct cred *cred;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct nfs_fattr old_fattr;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct nfs_fattr new_fattr;
+	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+	long int timeout;
+	bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_access_entry;
+
+struct nfs_client_initdata;
+
+struct nfs_rpc_ops {
+	u32 version;
+	const struct dentry_operations *dentry_ops;
+	const struct inode_operations *dir_inode_ops;
+	const struct inode_operations *file_inode_ops;
+	const struct file_operations *file_ops;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*submount)(struct fs_context *, struct nfs_server *);
+	int (*try_get_tree)(struct fs_context *);
+	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+	int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+	int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+	int (*remove)(struct inode *, struct dentry *);
+	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+	int (*unlink_done)(struct rpc_task *, struct inode *);
+	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+	int (*link)(struct inode *, struct inode *, const struct qstr *);
+	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
+	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+	int (*rmdir)(struct inode *, const struct qstr *);
+	int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+	int (*lock)(struct file *, int, struct file_lock *);
+	int (*lock_check_bounds)(const struct file_lock *);
+	void (*clear_acl_cache)(struct inode *);
+	void (*close_context)(struct nfs_open_context *, int);
+	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+	int (*have_delegation)(struct inode *, fmode_t);
+	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+	void (*free_client)(struct nfs_client *);
+	struct nfs_server * (*create_server)(struct fs_context *);
+	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+	int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+	void (*enable_swap)(struct inode *);
+	void (*disable_swap)(struct inode *);
+};
+
+struct nlmclnt_operations {
+	void (*nlmclnt_alloc_call)(void *);
+	bool (*nlmclnt_unlock_prepare)(struct rpc_task *, void *);
+	void (*nlmclnt_release_call)(void *);
+};
+
+struct nfs_access_entry {
+	struct rb_node rb_node;
+	struct list_head lru;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	struct group_info *group_info;
+	__u32 mask;
+	struct callback_head callback_head;
+};
+
+struct nfs_client_initdata {
+	long unsigned int init_flags;
+	const char *hostname;
+	const struct sockaddr *addr;
+	const char *nodename;
+	const char *ip_addr;
+	size_t addrlen;
+	struct nfs_subversion *nfs_mod;
+	int proto;
+	u32 minorversion;
+	unsigned int nconnect;
+	unsigned int max_connect;
+	struct net *net;
+	const struct rpc_timeout *timeparms;
+	const struct cred *cred;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+	u32 minor_version;
+	unsigned int init_caps;
+	int (*init_client)(struct nfs_client *);
+	void (*shutdown_client)(struct nfs_client *);
+	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
+	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	const struct rpc_call_ops *call_sync_ops;
+	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+	const struct nfs4_state_maintenance_ops *state_renewal_ops;
+	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+	struct list_head open_states;
+	struct list_head inode_states;
+	struct list_head lock_states;
+	struct nfs4_state_owner *owner;
+	struct inode *inode;
+	long unsigned int flags;
+	spinlock_t state_lock;
+	seqlock_t seqlock;
+	nfs4_stateid stateid;
+	nfs4_stateid open_stateid;
+	unsigned int n_rdonly;
+	unsigned int n_wronly;
+	unsigned int n_rdwr;
+	fmode_t state;
+	refcount_t count;
+	wait_queue_head_t waitq;
+	struct callback_head callback_head;
+};
+
+struct nfs4_state_recovery_ops {
+	int owner_flag_bit;
+	int state_flag_bit;
+	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+	int (*establish_clid)(struct nfs_client *, const struct cred *);
+	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+	int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+	int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+	int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+	struct nfs_server *so_server;
+	struct list_head so_lru;
+	long unsigned int so_expires;
+	struct rb_node so_server_node;
+	const struct cred *so_cred;
+	spinlock_t so_lock;
+	atomic_t so_count;
+	long unsigned int so_flags;
+	struct list_head so_states;
+	struct nfs_seqid_counter so_seqid;
+	seqcount_spinlock_t so_reclaim_seqcount;
+	struct mutex so_delegreturn_mutex;
+};
+
+struct bl_dev_msg {
+	int32_t status;
+	uint32_t major;
+	uint32_t minor;
+};
+
+struct cache_detail;
+
+struct nfs_netns_client;
+
+struct nfs_net {
+	struct cache_detail *nfs_dns_resolve;
+	struct rpc_pipe *bl_device_pipe;
+	struct bl_dev_msg bl_mount_reply;
+	wait_queue_head_t bl_wq;
+	struct mutex bl_mutex;
+	struct list_head nfs_client_list;
+	struct list_head nfs_volume_list;
+	struct idr cb_ident_idr;
+	short unsigned int nfs_callback_tcpport;
+	short unsigned int nfs_callback_tcpport6;
+	int cb_users[1];
+	struct nfs_netns_client *nfs_client;
+	spinlock_t nfs_client_lock;
+	ktime_t boot_time;
+	struct proc_dir_entry *proc_nfsfs;
+};
+
+struct nfs_netns_client {
+	struct kobject kobject;
+	struct net *net;
+	const char *identifier;
+};
+
+struct nlm_host;
+
+struct nlm_lockowner {
+	struct list_head list;
+	refcount_t count;
+	struct nlm_host *host;
+	fl_owner_t owner;
+	uint32_t pid;
+};
+
+struct xdr_netobj {
+	unsigned int len;
+	u8 *data;
+};
+
+enum {
+	NLM_LCK_GRANTED = 0,
+	NLM_LCK_DENIED = 1,
+	NLM_LCK_DENIED_NOLOCKS = 2,
+	NLM_LCK_BLOCKED = 3,
+	NLM_LCK_DENIED_GRACE_PERIOD = 4,
+	NLM_DEADLCK = 5,
+	NLM_ROFS = 6,
+	NLM_STALE_FH = 7,
+	NLM_FBIG = 8,
+	NLM_FAILED = 9,
+};
+
+struct nsm_private {
+	unsigned char data[16];
+};
+
+struct nlm_lock {
+	char *caller;
+	unsigned int len;
+	struct nfs_fh fh;
+	struct xdr_netobj oh;
+	u32 svid;
+	u64 lock_start;
+	u64 lock_len;
+	struct file_lock fl;
+};
+
+struct nlm_cookie {
+	unsigned char data[32];
+	unsigned int len;
+};
+
+struct nlm_args {
+	struct nlm_cookie cookie;
+	struct nlm_lock lock;
+	u32 block;
+	u32 reclaim;
+	u32 state;
+	u32 monitor;
+	u32 fsm_access;
+	u32 fsm_mode;
+};
+
+struct nlm_res {
+	struct nlm_cookie cookie;
+	__be32 status;
+	struct nlm_lock lock;
+};
+
+struct nsm_handle;
+
+struct nlm_host {
+	struct hlist_node h_hash;
+	struct __kernel_sockaddr_storage h_addr;
+	size_t h_addrlen;
+	struct __kernel_sockaddr_storage h_srcaddr;
+	size_t h_srcaddrlen;
+	struct rpc_clnt *h_rpcclnt;
+	char *h_name;
+	u32 h_version;
+	short unsigned int h_proto;
+	short unsigned int h_reclaiming: 1;
+	short unsigned int h_server: 1;
+	short unsigned int h_noresvport: 1;
+	short unsigned int h_inuse: 1;
+	wait_queue_head_t h_gracewait;
+	struct rw_semaphore h_rwsem;
+	u32 h_state;
+	u32 h_nsmstate;
+	u32 h_pidcount;
+	refcount_t h_count;
+	struct mutex h_mutex;
+	long unsigned int h_nextrebind;
+	long unsigned int h_expires;
+	struct list_head h_lockowners;
+	spinlock_t h_lock;
+	struct list_head h_granted;
+	struct list_head h_reclaim;
+	struct nsm_handle *h_nsmhandle;
+	char *h_addrbuf;
+	struct net *net;
+	const struct cred *h_cred;
+	char nodename[65];
+	const struct nlmclnt_operations *h_nlmclnt_ops;
+};
+
+struct nsm_handle {
+	struct list_head sm_link;
+	refcount_t sm_count;
+	char *sm_mon_name;
+	char *sm_name;
+	struct __kernel_sockaddr_storage sm_addr;
+	size_t sm_addrlen;
+	unsigned int sm_monitored: 1;
+	unsigned int sm_sticky: 1;
+	struct nsm_private sm_priv;
+	char sm_addrbuf[51];
+};
+
+typedef void (*exitcall_t)();
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef unsigned int uint;
+
+typedef long long unsigned int xfs_ino_t;
+
+typedef __s64 xfs_daddr_t;
+
+typedef __u32 xfs_nlink_t;
+
+typedef uint32_t xfs_agblock_t;
+
+typedef uint32_t xfs_agino_t;
+
+typedef uint32_t xfs_extlen_t;
+
+typedef uint32_t xfs_agnumber_t;
+
+typedef int64_t xfs_lsn_t;
+
+typedef uint64_t xfs_fsblock_t;
+
+typedef uint64_t xfs_rfsblock_t;
+
+typedef uint64_t xfs_rtblock_t;
+
+typedef uint64_t xfs_fileoff_t;
+
+typedef uint64_t xfs_filblks_t;
+
+typedef void *xfs_failaddr_t;
+
+typedef enum {
+	XFS_BTNUM_BNOi = 0,
+	XFS_BTNUM_CNTi = 1,
+	XFS_BTNUM_RMAPi = 2,
+	XFS_BTNUM_BMAPi = 3,
+	XFS_BTNUM_INOi = 4,
+	XFS_BTNUM_FINOi = 5,
+	XFS_BTNUM_REFCi = 6,
+	XFS_BTNUM_MAX = 7,
+} xfs_btnum_t;
+
+typedef enum {
+	XFS_EXT_NORM = 0,
+	XFS_EXT_UNWRITTEN = 1,
+} xfs_exntst_t;
+
+struct xfs_bmbt_irec {
+	xfs_fileoff_t br_startoff;
+	xfs_fsblock_t br_startblock;
+	xfs_filblks_t br_blockcount;
+	xfs_exntst_t br_state;
+};
+
+enum xfs_ag_resv_type {
+	XFS_AG_RESV_NONE = 0,
+	XFS_AG_RESV_AGFL = 1,
+	XFS_AG_RESV_METADATA = 2,
+	XFS_AG_RESV_RMAPBT = 3,
+};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rhash_lock_head *buckets[0];
+};
+
+struct request;
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	short unsigned int nr_ios;
+	short unsigned int rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	bool nowait;
+	struct list_head cb_list;
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	long unsigned int seg_boundary_mask;
+	long unsigned int virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	short unsigned int max_segments;
+	short unsigned int max_integrity_segments;
+	short unsigned int max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	enum blk_zoned_model zoned;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct blk_stat_callback;
+
+struct blk_rq_stat;
+
+struct blk_mq_tags;
+
+struct blk_trace;
+
+struct blk_flush_queue;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	long unsigned int queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	struct kobject kobj;
+	struct kobject *mq_kobj;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	long unsigned int nr_requests;
+	unsigned int dma_pad_mask;
+	unsigned int dma_alignment;
+	unsigned int rq_timeout;
+	int poll_nsec;
+	struct blk_stat_callback *poll_cb;
+	struct blk_rq_stat *poll_stat;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_trace *blk_trace;
+	struct blk_flush_queue *fq;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+	struct srcu_struct srcu[0];
+};
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+struct kstatfs {
+	long int f_type;
+	long int f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long int f_namelen;
+	long int f_frsize;
+	long int f_flags;
+	long int f_spare[4];
+};
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct cdrom_device_info;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	short unsigned int events;
+	short unsigned int event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	long unsigned int state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	struct cdrom_device_info *cdi;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	struct blk_independent_access_ranges *ia_ranges;
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct block_device *, fmode_t);
+	void (*release)(struct gendisk *, fmode_t);
+	int (*rw_page)(struct block_device *, sector_t, struct page *, enum req_op);
+	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	int (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+};
+
+struct rhash_lock_head {};
+
+enum {
+	__XBTS_lookup = 0,
+	__XBTS_compare = 1,
+	__XBTS_insrec = 2,
+	__XBTS_delrec = 3,
+	__XBTS_newroot = 4,
+	__XBTS_killroot = 5,
+	__XBTS_increment = 6,
+	__XBTS_decrement = 7,
+	__XBTS_lshift = 8,
+	__XBTS_rshift = 9,
+	__XBTS_split = 10,
+	__XBTS_join = 11,
+	__XBTS_alloc = 12,
+	__XBTS_free = 13,
+	__XBTS_moves = 14,
+	__XBTS_MAX = 15,
+};
+
+struct __xfsstats {
+	uint32_t xs_allocx;
+	uint32_t xs_allocb;
+	uint32_t xs_freex;
+	uint32_t xs_freeb;
+	uint32_t xs_abt_lookup;
+	uint32_t xs_abt_compare;
+	uint32_t xs_abt_insrec;
+	uint32_t xs_abt_delrec;
+	uint32_t xs_blk_mapr;
+	uint32_t xs_blk_mapw;
+	uint32_t xs_blk_unmap;
+	uint32_t xs_add_exlist;
+	uint32_t xs_del_exlist;
+	uint32_t xs_look_exlist;
+	uint32_t xs_cmp_exlist;
+	uint32_t xs_bmbt_lookup;
+	uint32_t xs_bmbt_compare;
+	uint32_t xs_bmbt_insrec;
+	uint32_t xs_bmbt_delrec;
+	uint32_t xs_dir_lookup;
+	uint32_t xs_dir_create;
+	uint32_t xs_dir_remove;
+	uint32_t xs_dir_getdents;
+	uint32_t xs_trans_sync;
+	uint32_t xs_trans_async;
+	uint32_t xs_trans_empty;
+	uint32_t xs_ig_attempts;
+	uint32_t xs_ig_found;
+	uint32_t xs_ig_frecycle;
+	uint32_t xs_ig_missed;
+	uint32_t xs_ig_dup;
+	uint32_t xs_ig_reclaims;
+	uint32_t xs_ig_attrchg;
+	uint32_t xs_log_writes;
+	uint32_t xs_log_blocks;
+	uint32_t xs_log_noiclogs;
+	uint32_t xs_log_force;
+	uint32_t xs_log_force_sleep;
+	uint32_t xs_try_logspace;
+	uint32_t xs_sleep_logspace;
+	uint32_t xs_push_ail;
+	uint32_t xs_push_ail_success;
+	uint32_t xs_push_ail_pushbuf;
+	uint32_t xs_push_ail_pinned;
+	uint32_t xs_push_ail_locked;
+	uint32_t xs_push_ail_flushing;
+	uint32_t xs_push_ail_restarts;
+	uint32_t xs_push_ail_flush;
+	uint32_t xs_xstrat_quick;
+	uint32_t xs_xstrat_split;
+	uint32_t xs_write_calls;
+	uint32_t xs_read_calls;
+	uint32_t xs_attr_get;
+	uint32_t xs_attr_set;
+	uint32_t xs_attr_remove;
+	uint32_t xs_attr_list;
+	uint32_t xs_iflush_count;
+	uint32_t xs_icluster_flushcnt;
+	uint32_t xs_icluster_flushinode;
+	uint32_t vn_active;
+	uint32_t vn_alloc;
+	uint32_t vn_get;
+	uint32_t vn_hold;
+	uint32_t vn_rele;
+	uint32_t vn_reclaim;
+	uint32_t vn_remove;
+	uint32_t vn_free;
+	uint32_t xb_get;
+	uint32_t xb_create;
+	uint32_t xb_get_locked;
+	uint32_t xb_get_locked_waited;
+	uint32_t xb_busy_locked;
+	uint32_t xb_miss_locked;
+	uint32_t xb_page_retries;
+	uint32_t xb_page_found;
+	uint32_t xb_get_read;
+	uint32_t xs_abtb_2[15];
+	uint32_t xs_abtc_2[15];
+	uint32_t xs_bmbt_2[15];
+	uint32_t xs_ibt_2[15];
+	uint32_t xs_fibt_2[15];
+	uint32_t xs_rmap_2[15];
+	uint32_t xs_refcbt_2[15];
+	uint32_t xs_qm_dqreclaims;
+	uint32_t xs_qm_dqreclaim_misses;
+	uint32_t xs_qm_dquot_dups;
+	uint32_t xs_qm_dqcachemisses;
+	uint32_t xs_qm_dqcachehits;
+	uint32_t xs_qm_dqwants;
+	uint32_t xs_qm_dquot;
+	uint32_t xs_qm_dquot_unused;
+	uint64_t xs_xstrat_bytes;
+	uint64_t xs_write_bytes;
+	uint64_t xs_read_bytes;
+	uint64_t defer_relog;
+};
+
+struct xfsstats {
+	union {
+		struct __xfsstats s;
+		uint32_t a[187];
+	};
+};
+
+struct xfs_kobj {
+	struct kobject kobject;
+	struct completion complete;
+};
+
+struct xstats {
+	struct xfsstats *xs_stats;
+	struct xfs_kobj xs_kobj;
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		__u32 raw[0];
+	};
+};
+
+typedef unsigned int xfs_buf_flags_t;
+
+struct xfs_mount;
+
+struct xfs_buftarg {
+	dev_t bt_dev;
+	struct block_device *bt_bdev;
+	struct dax_device *bt_daxdev;
+	u64 bt_dax_part_off;
+	struct xfs_mount *bt_mount;
+	unsigned int bt_meta_sectorsize;
+	size_t bt_meta_sectormask;
+	size_t bt_logical_sectorsize;
+	size_t bt_logical_sectormask;
+	struct shrinker bt_shrinker;
+	struct list_lru bt_lru;
+	struct percpu_counter bt_io_count;
+	struct ratelimit_state bt_ioerror_rl;
+};
+
+struct xfs_sb {
+	uint32_t sb_magicnum;
+	uint32_t sb_blocksize;
+	xfs_rfsblock_t sb_dblocks;
+	xfs_rfsblock_t sb_rblocks;
+	xfs_rtblock_t sb_rextents;
+	uuid_t sb_uuid;
+	xfs_fsblock_t sb_logstart;
+	xfs_ino_t sb_rootino;
+	xfs_ino_t sb_rbmino;
+	xfs_ino_t sb_rsumino;
+	xfs_agblock_t sb_rextsize;
+	xfs_agblock_t sb_agblocks;
+	xfs_agnumber_t sb_agcount;
+	xfs_extlen_t sb_rbmblocks;
+	xfs_extlen_t sb_logblocks;
+	uint16_t sb_versionnum;
+	uint16_t sb_sectsize;
+	uint16_t sb_inodesize;
+	uint16_t sb_inopblock;
+	char sb_fname[12];
+	uint8_t sb_blocklog;
+	uint8_t sb_sectlog;
+	uint8_t sb_inodelog;
+	uint8_t sb_inopblog;
+	uint8_t sb_agblklog;
+	uint8_t sb_rextslog;
+	uint8_t sb_inprogress;
+	uint8_t sb_imax_pct;
+	uint64_t sb_icount;
+	uint64_t sb_ifree;
+	uint64_t sb_fdblocks;
+	uint64_t sb_frextents;
+	xfs_ino_t sb_uquotino;
+	xfs_ino_t sb_gquotino;
+	uint16_t sb_qflags;
+	uint8_t sb_flags;
+	uint8_t sb_shared_vn;
+	xfs_extlen_t sb_inoalignmt;
+	uint32_t sb_unit;
+	uint32_t sb_width;
+	uint8_t sb_dirblklog;
+	uint8_t sb_logsectlog;
+	uint16_t sb_logsectsize;
+	uint32_t sb_logsunit;
+	uint32_t sb_features2;
+	uint32_t sb_bad_features2;
+	uint32_t sb_features_compat;
+	uint32_t sb_features_ro_compat;
+	uint32_t sb_features_incompat;
+	uint32_t sb_features_log_incompat;
+	uint32_t sb_crc;
+	xfs_extlen_t sb_spino_align;
+	xfs_ino_t sb_pquotino;
+	xfs_lsn_t sb_lsn;
+	uuid_t sb_meta_uuid;
+};
+
+typedef struct xfs_buftarg xfs_buftarg_t;
+
+struct xfs_mru_cache;
+
+struct xfs_ino_geometry {
+	uint64_t maxicount;
+	unsigned int inode_cluster_size;
+	unsigned int inode_cluster_size_raw;
+	unsigned int inodes_per_cluster;
+	unsigned int blocks_per_cluster;
+	unsigned int cluster_align;
+	unsigned int cluster_align_inodes;
+	unsigned int inoalign_mask;
+	unsigned int inobt_mxr[2];
+	unsigned int inobt_mnr[2];
+	unsigned int inobt_maxlevels;
+	unsigned int ialloc_inos;
+	unsigned int ialloc_blks;
+	unsigned int ialloc_min_blks;
+	unsigned int ialloc_align;
+	unsigned int agino_log;
+	unsigned int attr_fork_offset;
+	uint64_t new_diflags2;
+};
+
+struct xfs_trans_res {
+	uint tr_logres;
+	int tr_logcount;
+	int tr_logflags;
+};
+
+struct xfs_trans_resv {
+	struct xfs_trans_res tr_write;
+	struct xfs_trans_res tr_itruncate;
+	struct xfs_trans_res tr_rename;
+	struct xfs_trans_res tr_link;
+	struct xfs_trans_res tr_remove;
+	struct xfs_trans_res tr_symlink;
+	struct xfs_trans_res tr_create;
+	struct xfs_trans_res tr_create_tmpfile;
+	struct xfs_trans_res tr_mkdir;
+	struct xfs_trans_res tr_ifree;
+	struct xfs_trans_res tr_ichange;
+	struct xfs_trans_res tr_growdata;
+	struct xfs_trans_res tr_addafork;
+	struct xfs_trans_res tr_writeid;
+	struct xfs_trans_res tr_attrinval;
+	struct xfs_trans_res tr_attrsetm;
+	struct xfs_trans_res tr_attrsetrt;
+	struct xfs_trans_res tr_attrrm;
+	struct xfs_trans_res tr_clearagi;
+	struct xfs_trans_res tr_growrtalloc;
+	struct xfs_trans_res tr_growrtzero;
+	struct xfs_trans_res tr_growrtfree;
+	struct xfs_trans_res tr_qm_setqlim;
+	struct xfs_trans_res tr_qm_dqalloc;
+	struct xfs_trans_res tr_sb;
+	struct xfs_trans_res tr_fsyncts;
+};
+
+struct xfs_error_cfg {
+	struct xfs_kobj kobj;
+	int max_retries;
+	long int retry_timeout;
+};
+
+struct xfs_ail;
+
+struct xfs_buf;
+
+struct xfs_da_geometry;
+
+struct xlog;
+
+struct xfs_inode;
+
+struct xfs_quotainfo;
+
+struct xfs_mount {
+	struct xfs_sb m_sb;
+	struct super_block *m_super;
+	struct xfs_ail *m_ail;
+	struct xfs_buf *m_sb_bp;
+	char *m_rtname;
+	char *m_logname;
+	struct xfs_da_geometry *m_dir_geo;
+	struct xfs_da_geometry *m_attr_geo;
+	struct xlog *m_log;
+	struct xfs_inode *m_rbmip;
+	struct xfs_inode *m_rsumip;
+	struct xfs_inode *m_rootip;
+	struct xfs_quotainfo *m_quotainfo;
+	xfs_buftarg_t *m_ddev_targp;
+	xfs_buftarg_t *m_logdev_targp;
+	xfs_buftarg_t *m_rtdev_targp;
+	struct list_head m_mount_list;
+	void *m_inodegc;
+	uint8_t *m_rsum_cache;
+	struct xfs_mru_cache *m_filestream;
+	struct workqueue_struct *m_buf_workqueue;
+	struct workqueue_struct *m_unwritten_workqueue;
+	struct workqueue_struct *m_reclaim_workqueue;
+	struct workqueue_struct *m_sync_workqueue;
+	struct workqueue_struct *m_blockgc_wq;
+	struct workqueue_struct *m_inodegc_wq;
+	int m_bsize;
+	uint8_t m_blkbit_log;
+	uint8_t m_blkbb_log;
+	uint8_t m_agno_log;
+	uint8_t m_sectbb_log;
+	uint m_blockmask;
+	uint m_blockwsize;
+	uint m_blockwmask;
+	uint m_alloc_mxr[2];
+	uint m_alloc_mnr[2];
+	uint m_bmap_dmxr[2];
+	uint m_bmap_dmnr[2];
+	uint m_rmap_mxr[2];
+	uint m_rmap_mnr[2];
+	uint m_refc_mxr[2];
+	uint m_refc_mnr[2];
+	uint m_alloc_maxlevels;
+	uint m_bm_maxlevels[2];
+	uint m_rmap_maxlevels;
+	uint m_refc_maxlevels;
+	unsigned int m_agbtree_maxlevels;
+	xfs_extlen_t m_ag_prealloc_blocks;
+	uint m_alloc_set_aside;
+	uint m_ag_max_usable;
+	int m_dalign;
+	int m_swidth;
+	xfs_agnumber_t m_maxagi;
+	uint m_allocsize_log;
+	uint m_allocsize_blocks;
+	int m_logbufs;
+	int m_logbsize;
+	uint m_rsumlevels;
+	uint m_rsumsize;
+	int m_fixedfsid[2];
+	uint m_qflags;
+	uint64_t m_features;
+	uint64_t m_low_space[5];
+	uint64_t m_low_rtexts[5];
+	struct xfs_ino_geometry m_ino_geo;
+	struct xfs_trans_resv m_resv;
+	long unsigned int m_opstate;
+	bool m_always_cow;
+	bool m_fail_unmount;
+	bool m_finobt_nores;
+	bool m_update_sb;
+	uint8_t m_fs_checked;
+	uint8_t m_fs_sick;
+	uint8_t m_rt_checked;
+	uint8_t m_rt_sick;
+	long: 64;
+	spinlock_t m_sb_lock;
+	struct percpu_counter m_icount;
+	struct percpu_counter m_ifree;
+	struct percpu_counter m_fdblocks;
+	struct percpu_counter m_frextents;
+	struct percpu_counter m_delalloc_blks;
+	atomic64_t m_allocbt_blks;
+	struct xarray m_perag_tree;
+	spinlock_t m_perag_lock;
+	uint64_t m_resblks;
+	uint64_t m_resblks_avail;
+	uint64_t m_resblks_save;
+	struct delayed_work m_reclaim_work;
+	struct xfs_kobj m_kobj;
+	struct xfs_kobj m_error_kobj;
+	struct xfs_kobj m_error_meta_kobj;
+	struct xfs_error_cfg m_error_cfg[4];
+	struct xstats m_stats;
+	xfs_agnumber_t m_agfrotor;
+	xfs_agnumber_t m_agirotor;
+	spinlock_t m_agirotor_lock;
+	struct shrinker m_inodegc_shrinker;
+	struct work_struct m_flush_inodes_work;
+	uint32_t m_generation;
+	struct mutex m_growlock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_buf_map {
+	xfs_daddr_t bm_bn;
+	int bm_len;
+};
+
+struct xfs_buf_ops {
+	char *name;
+	union {
+		__be32 magic[2];
+		__be16 magic16[2];
+	};
+	void (*verify_read)(struct xfs_buf *);
+	void (*verify_write)(struct xfs_buf *);
+	xfs_failaddr_t (*verify_struct)(struct xfs_buf *);
+};
+
+struct xfs_perag;
+
+struct xfs_buf_log_item;
+
+struct xfs_trans;
+
+struct xfs_buf {
+	struct rhash_head b_rhash_head;
+	xfs_daddr_t b_rhash_key;
+	int b_length;
+	atomic_t b_hold;
+	atomic_t b_lru_ref;
+	xfs_buf_flags_t b_flags;
+	struct semaphore b_sema;
+	struct list_head b_lru;
+	spinlock_t b_lock;
+	unsigned int b_state;
+	int b_io_error;
+	wait_queue_head_t b_waiters;
+	struct list_head b_list;
+	struct xfs_perag *b_pag;
+	struct xfs_mount *b_mount;
+	struct xfs_buftarg *b_target;
+	void *b_addr;
+	struct work_struct b_ioend_work;
+	struct completion b_iowait;
+	struct xfs_buf_log_item *b_log_item;
+	struct list_head b_li_list;
+	struct xfs_trans *b_transp;
+	struct page **b_pages;
+	struct page *b_page_array[2];
+	struct xfs_buf_map *b_maps;
+	struct xfs_buf_map __b_map;
+	int b_map_count;
+	atomic_t b_pin_count;
+	atomic_t b_io_remaining;
+	unsigned int b_page_count;
+	unsigned int b_offset;
+	int b_error;
+	int b_retries;
+	long unsigned int b_first_retry_time;
+	int b_last_error;
+	const struct xfs_buf_ops *b_ops;
+	struct callback_head b_rcu;
+};
+
+struct xfs_ag_resv {
+	xfs_extlen_t ar_orig_reserved;
+	xfs_extlen_t ar_reserved;
+	xfs_extlen_t ar_asked;
+};
+
+struct xfs_perag {
+	struct xfs_mount *pag_mount;
+	xfs_agnumber_t pag_agno;
+	atomic_t pag_ref;
+	char pagf_init;
+	char pagi_init;
+	char pagf_metadata;
+	char pagi_inodeok;
+	uint8_t pagf_levels[3];
+	bool pagf_agflreset;
+	uint32_t pagf_flcount;
+	xfs_extlen_t pagf_freeblks;
+	xfs_extlen_t pagf_longest;
+	uint32_t pagf_btreeblks;
+	xfs_agino_t pagi_freecount;
+	xfs_agino_t pagi_count;
+	xfs_agino_t pagl_pagino;
+	xfs_agino_t pagl_leftrec;
+	xfs_agino_t pagl_rightrec;
+	int pagb_count;
+	uint8_t pagf_refcount_level;
+	struct xfs_ag_resv pag_meta_resv;
+	struct xfs_ag_resv pag_rmapbt_resv;
+	struct callback_head callback_head;
+	xfs_agblock_t block_count;
+	xfs_agblock_t min_block;
+	xfs_agino_t agino_min;
+	xfs_agino_t agino_max;
+	uint16_t pag_checked;
+	uint16_t pag_sick;
+	spinlock_t pag_state_lock;
+	spinlock_t pagb_lock;
+	struct rb_root pagb_tree;
+	unsigned int pagb_gen;
+	wait_queue_head_t pagb_wait;
+	atomic_t pagf_fstrms;
+	spinlock_t pag_ici_lock;
+	struct xarray pag_ici_root;
+	int pag_ici_reclaimable;
+	long unsigned int pag_ici_reclaim_cursor;
+	spinlock_t pag_buf_lock;
+	struct rhashtable pag_buf_hash;
+	struct delayed_work pag_blockgc_work;
+};
+
+struct xlog_ticket;
+
+struct xfs_dquot_acct;
+
+struct xfs_trans {
+	unsigned int t_magic;
+	unsigned int t_log_res;
+	unsigned int t_log_count;
+	unsigned int t_blk_res;
+	unsigned int t_blk_res_used;
+	unsigned int t_rtx_res;
+	unsigned int t_rtx_res_used;
+	unsigned int t_flags;
+	xfs_fsblock_t t_firstblock;
+	struct xlog_ticket *t_ticket;
+	struct xfs_mount *t_mountp;
+	struct xfs_dquot_acct *t_dqinfo;
+	int64_t t_icount_delta;
+	int64_t t_ifree_delta;
+	int64_t t_fdblocks_delta;
+	int64_t t_res_fdblocks_delta;
+	int64_t t_frextents_delta;
+	int64_t t_res_frextents_delta;
+	int64_t t_dblocks_delta;
+	int64_t t_agcount_delta;
+	int64_t t_imaxpct_delta;
+	int64_t t_rextsize_delta;
+	int64_t t_rbmblocks_delta;
+	int64_t t_rblocks_delta;
+	int64_t t_rextents_delta;
+	int64_t t_rextslog_delta;
+	struct list_head t_items;
+	struct list_head t_busy;
+	struct list_head t_dfops;
+	long unsigned int t_pflags;
+};
+
+struct xfs_agf {
+	__be32 agf_magicnum;
+	__be32 agf_versionnum;
+	__be32 agf_seqno;
+	__be32 agf_length;
+	__be32 agf_roots[3];
+	__be32 agf_levels[3];
+	__be32 agf_flfirst;
+	__be32 agf_fllast;
+	__be32 agf_flcount;
+	__be32 agf_freeblks;
+	__be32 agf_longest;
+	__be32 agf_btreeblks;
+	uuid_t agf_uuid;
+	__be32 agf_rmap_blocks;
+	__be32 agf_refcount_blocks;
+	__be32 agf_refcount_root;
+	__be32 agf_refcount_level;
+	__be64 agf_spare64[14];
+	__be64 agf_lsn;
+	__be32 agf_crc;
+	__be32 agf_spare2;
+};
+
+struct xfs_alloc_rec {
+	__be32 ar_startblock;
+	__be32 ar_blockcount;
+};
+
+typedef struct xfs_alloc_rec xfs_alloc_key_t;
+
+struct xfs_alloc_rec_incore {
+	xfs_agblock_t ar_startblock;
+	xfs_extlen_t ar_blockcount;
+};
+
+typedef uint64_t xfs_inofree_t;
+
+struct xfs_inobt_rec {
+	__be32 ir_startino;
+	union {
+		struct {
+			__be32 ir_freecount;
+		} f;
+		struct {
+			__be16 ir_holemask;
+			__u8 ir_count;
+			__u8 ir_freecount;
+		} sp;
+	} ir_u;
+	__be64 ir_free;
+};
+
+struct xfs_inobt_rec_incore {
+	xfs_agino_t ir_startino;
+	uint16_t ir_holemask;
+	uint8_t ir_count;
+	uint8_t ir_freecount;
+	xfs_inofree_t ir_free;
+};
+
+struct xfs_inobt_key {
+	__be32 ir_startino;
+};
+
+struct xfs_owner_info {
+	uint64_t oi_owner;
+	xfs_fileoff_t oi_offset;
+	unsigned int oi_flags;
+};
+
+struct xfs_rmap_rec {
+	__be32 rm_startblock;
+	__be32 rm_blockcount;
+	__be64 rm_owner;
+	__be64 rm_offset;
+};
+
+struct xfs_rmap_irec {
+	xfs_agblock_t rm_startblock;
+	xfs_extlen_t rm_blockcount;
+	uint64_t rm_owner;
+	uint64_t rm_offset;
+	unsigned int rm_flags;
+};
+
+struct xfs_rmap_key {
+	__be32 rm_startblock;
+	__be64 rm_owner;
+	__be64 rm_offset;
+} __attribute__((packed));
+
+struct xfs_refcount_rec {
+	__be32 rc_startblock;
+	__be32 rc_blockcount;
+	__be32 rc_refcount;
+};
+
+struct xfs_refcount_key {
+	__be32 rc_startblock;
+};
+
+struct xfs_refcount_irec {
+	xfs_agblock_t rc_startblock;
+	xfs_extlen_t rc_blockcount;
+	xfs_nlink_t rc_refcount;
+};
+
+struct xfs_bmbt_rec {
+	__be64 l0;
+	__be64 l1;
+};
+
+typedef struct xfs_bmbt_rec xfs_bmbt_rec_t;
+
+typedef xfs_bmbt_rec_t xfs_bmdr_rec_t;
+
+struct xfs_bmbt_key {
+	__be64 br_startoff;
+};
+
+typedef struct xfs_bmbt_key xfs_bmdr_key_t;
+
+struct xfs_btree_block_shdr {
+	__be32 bb_leftsib;
+	__be32 bb_rightsib;
+	__be64 bb_blkno;
+	__be64 bb_lsn;
+	uuid_t bb_uuid;
+	__be32 bb_owner;
+	__le32 bb_crc;
+};
+
+struct xfs_btree_block_lhdr {
+	__be64 bb_leftsib;
+	__be64 bb_rightsib;
+	__be64 bb_blkno;
+	__be64 bb_lsn;
+	uuid_t bb_uuid;
+	__be64 bb_owner;
+	__le32 bb_crc;
+	__be32 bb_pad;
+};
+
+struct xfs_btree_block {
+	__be32 bb_magic;
+	__be16 bb_level;
+	__be16 bb_numrecs;
+	union {
+		struct xfs_btree_block_shdr s;
+		struct xfs_btree_block_lhdr l;
+	} bb_u;
+};
+
+enum {
+	XFS_LOWSP_1_PCNT = 0,
+	XFS_LOWSP_2_PCNT = 1,
+	XFS_LOWSP_3_PCNT = 2,
+	XFS_LOWSP_4_PCNT = 3,
+	XFS_LOWSP_5_PCNT = 4,
+	XFS_LOWSP_MAX = 5,
+};
+
+enum {
+	XFS_ERR_METADATA = 0,
+	XFS_ERR_CLASS_MAX = 1,
+};
+
+enum {
+	XFS_ERR_DEFAULT = 0,
+	XFS_ERR_EIO = 1,
+	XFS_ERR_ENOSPC = 2,
+	XFS_ERR_ENODEV = 3,
+	XFS_ERR_ERRNO_MAX = 4,
+};
+
+union xfs_btree_ptr {
+	__be32 s;
+	__be64 l;
+};
+
+union xfs_btree_key {
+	struct xfs_bmbt_key bmbt;
+	xfs_bmdr_key_t bmbr;
+	xfs_alloc_key_t alloc;
+	struct xfs_inobt_key inobt;
+	struct xfs_rmap_key rmap;
+	struct xfs_rmap_key __rmap_bigkey[2];
+	struct xfs_refcount_key refc;
+};
+
+union xfs_btree_rec {
+	struct xfs_bmbt_rec bmbt;
+	xfs_bmdr_rec_t bmbr;
+	struct xfs_alloc_rec alloc;
+	struct xfs_inobt_rec inobt;
+	struct xfs_rmap_rec rmap;
+	struct xfs_refcount_rec refc;
+};
+
+struct xfs_btree_cur;
+
+struct xfs_btree_ops {
+	size_t key_len;
+	size_t rec_len;
+	struct xfs_btree_cur * (*dup_cursor)(struct xfs_btree_cur *);
+	void (*update_cursor)(struct xfs_btree_cur *, struct xfs_btree_cur *);
+	void (*set_root)(struct xfs_btree_cur *, const union xfs_btree_ptr *, int);
+	int (*alloc_block)(struct xfs_btree_cur *, const union xfs_btree_ptr *, union xfs_btree_ptr *, int *);
+	int (*free_block)(struct xfs_btree_cur *, struct xfs_buf *);
+	void (*update_lastrec)(struct xfs_btree_cur *, const struct xfs_btree_block *, const union xfs_btree_rec *, int, int);
+	int (*get_minrecs)(struct xfs_btree_cur *, int);
+	int (*get_maxrecs)(struct xfs_btree_cur *, int);
+	int (*get_dmaxrecs)(struct xfs_btree_cur *, int);
+	void (*init_key_from_rec)(union xfs_btree_key *, const union xfs_btree_rec *);
+	void (*init_rec_from_cur)(struct xfs_btree_cur *, union xfs_btree_rec *);
+	void (*init_ptr_from_cur)(struct xfs_btree_cur *, union xfs_btree_ptr *);
+	void (*init_high_key_from_rec)(union xfs_btree_key *, const union xfs_btree_rec *);
+	int64_t (*key_diff)(struct xfs_btree_cur *, const union xfs_btree_key *);
+	int64_t (*diff_two_keys)(struct xfs_btree_cur *, const union xfs_btree_key *, const union xfs_btree_key *);
+	const struct xfs_buf_ops *buf_ops;
+	int (*keys_inorder)(struct xfs_btree_cur *, const union xfs_btree_key *, const union xfs_btree_key *);
+	int (*recs_inorder)(struct xfs_btree_cur *, const union xfs_btree_rec *, const union xfs_btree_rec *);
+};
+
+union xfs_btree_irec {
+	struct xfs_alloc_rec_incore a;
+	struct xfs_bmbt_irec b;
+	struct xfs_inobt_rec_incore i;
+	struct xfs_rmap_irec r;
+	struct xfs_refcount_irec rc;
+};
+
+struct xbtree_afakeroot;
+
+struct xfs_btree_cur_ag {
+	struct xfs_perag *pag;
+	union {
+		struct xfs_buf *agbp;
+		struct xbtree_afakeroot *afake;
+	};
+	union {
+		struct {
+			unsigned int nr_ops;
+			unsigned int shape_changes;
+		} refc;
+		struct {
+			bool active;
+		} abt;
+	};
+};
+
+struct xbtree_ifakeroot;
+
+struct xfs_btree_cur_ino {
+	struct xfs_inode *ip;
+	struct xbtree_ifakeroot *ifake;
+	int allocated;
+	short int forksize;
+	char whichfork;
+	char flags;
+};
+
+struct xfs_btree_level {
+	struct xfs_buf *bp;
+	uint16_t ptr;
+	uint16_t ra;
+};
+
+struct xfs_btree_cur {
+	struct xfs_trans *bc_tp;
+	struct xfs_mount *bc_mp;
+	const struct xfs_btree_ops *bc_ops;
+	struct kmem_cache *bc_cache;
+	unsigned int bc_flags;
+	xfs_btnum_t bc_btnum;
+	union xfs_btree_irec bc_rec;
+	uint8_t bc_nlevels;
+	uint8_t bc_maxlevels;
+	int bc_statoff;
+	union {
+		struct xfs_btree_cur_ag bc_ag;
+		struct xfs_btree_cur_ino bc_ino;
+	};
+	struct xfs_btree_level bc_levels[0];
+};
+
+struct xbtree_afakeroot {
+	xfs_agblock_t af_root;
+	unsigned int af_levels;
+	unsigned int af_blocks;
+};
+
+struct xfs_ifork;
+
+struct xbtree_ifakeroot {
+	struct xfs_ifork *if_fork;
+	int64_t if_blocks;
+	unsigned int if_levels;
+	unsigned int if_fork_size;
+	unsigned int if_format;
+	unsigned int if_extents;
+};
+
+typedef unsigned int xfs_alloctype_t;
+
+struct xfs_alloc_arg {
+	struct xfs_trans *tp;
+	struct xfs_mount *mp;
+	struct xfs_buf *agbp;
+	struct xfs_perag *pag;
+	xfs_fsblock_t fsbno;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t minlen;
+	xfs_extlen_t maxlen;
+	xfs_extlen_t mod;
+	xfs_extlen_t prod;
+	xfs_extlen_t minleft;
+	xfs_extlen_t total;
+	xfs_extlen_t alignment;
+	xfs_extlen_t minalignslop;
+	xfs_agblock_t min_agbno;
+	xfs_agblock_t max_agbno;
+	xfs_extlen_t len;
+	xfs_alloctype_t type;
+	xfs_alloctype_t otype;
+	int datatype;
+	char wasdel;
+	char wasfromfl;
+	struct xfs_owner_info oinfo;
+	enum xfs_ag_resv_type resv;
+};
+
+typedef struct xfs_alloc_arg xfs_alloc_arg_t;
+
+typedef struct xfs_trans xfs_trans_t;
+
+typedef unsigned int xfs_km_flags_t;
+
+struct xfs_extent_busy {
+	struct rb_node rb_node;
+	struct list_head list;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	xfs_extlen_t length;
+	unsigned int flags;
+};
+
+typedef int64_t xfs_csn_t;
+
+typedef uint32_t xlog_tid_t;
+
+struct xlog_rec_header {
+	__be32 h_magicno;
+	__be32 h_cycle;
+	__be32 h_version;
+	__be32 h_len;
+	__be64 h_lsn;
+	__be64 h_tail_lsn;
+	__le32 h_crc;
+	__be32 h_prev_block;
+	__be32 h_num_logops;
+	__be32 h_cycle_data[64];
+	__be32 h_fmt;
+	uuid_t h_fs_uuid;
+	__be32 h_size;
+};
+
+typedef struct xlog_rec_header xlog_rec_header_t;
+
+struct xlog_rec_ext_header {
+	__be32 xh_cycle;
+	__be32 xh_cycle_data[64];
+};
+
+typedef struct xlog_rec_ext_header xlog_rec_ext_header_t;
+
+union xlog_in_core2 {
+	xlog_rec_header_t hic_header;
+	xlog_rec_ext_header_t hic_xheader;
+	char hic_sector[512];
+};
+
+typedef union xlog_in_core2 xlog_in_core_2_t;
+
+struct xfs_log_iovec {
+	void *i_addr;
+	int i_len;
+	uint i_type;
+};
+
+struct xfs_ail {
+	struct xlog *ail_log;
+	struct task_struct *ail_task;
+	struct list_head ail_head;
+	xfs_lsn_t ail_target;
+	xfs_lsn_t ail_target_prev;
+	struct list_head ail_cursors;
+	spinlock_t ail_lock;
+	xfs_lsn_t ail_last_pushed_lsn;
+	int ail_log_flush;
+	struct list_head ail_buf_list;
+	wait_queue_head_t ail_empty;
+};
+
+struct xlog_grant_head {
+	spinlock_t lock;
+	struct list_head waiters;
+	atomic64_t grant;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -12058,6 +22243,6854 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_cil;
+
+struct xlog_in_core;
+
+typedef struct xlog_in_core xlog_in_core_t;
+
+struct xlog {
+	struct xfs_mount *l_mp;
+	struct xfs_ail *l_ailp;
+	struct xfs_cil *l_cilp;
+	struct xfs_buftarg *l_targ;
+	struct workqueue_struct *l_ioend_workqueue;
+	struct delayed_work l_work;
+	long int l_opstate;
+	uint l_quotaoffs_flag;
+	struct list_head *l_buf_cancel_table;
+	int l_iclog_hsize;
+	int l_iclog_heads;
+	uint l_sectBBsize;
+	int l_iclog_size;
+	int l_iclog_bufs;
+	xfs_daddr_t l_logBBstart;
+	int l_logsize;
+	int l_logBBsize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	wait_queue_head_t l_flush_wait;
+	int l_covered_state;
+	xlog_in_core_t *l_iclog;
+	spinlock_t l_icloglock;
+	int l_curr_cycle;
+	int l_prev_cycle;
+	int l_curr_block;
+	int l_prev_block;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t l_last_sync_lsn;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t l_tail_lsn;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xlog_grant_head l_reserve_head;
+	struct xlog_grant_head l_write_head;
+	struct xfs_kobj l_kobj;
+	xfs_lsn_t l_recovery_lsn;
+	uint32_t l_iclog_roundoff;
+	struct rw_semaphore l_incompat_users;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct xfs_mount xfs_mount_t;
+
+struct xfs_item_ops;
+
+struct xfs_log_vec;
+
+struct xfs_log_item {
+	struct list_head li_ail;
+	struct list_head li_trans;
+	xfs_lsn_t li_lsn;
+	struct xlog *li_log;
+	struct xfs_ail *li_ailp;
+	uint li_type;
+	long unsigned int li_flags;
+	struct xfs_buf *li_buf;
+	struct list_head li_bio_list;
+	const struct xfs_item_ops *li_ops;
+	struct list_head li_cil;
+	struct xfs_log_vec *li_lv;
+	struct xfs_log_vec *li_lv_shadow;
+	xfs_csn_t li_seq;
+	uint32_t li_order_id;
+};
+
+struct xfs_item_ops {
+	unsigned int flags;
+	void (*iop_size)(struct xfs_log_item *, int *, int *);
+	void (*iop_format)(struct xfs_log_item *, struct xfs_log_vec *);
+	void (*iop_pin)(struct xfs_log_item *);
+	void (*iop_unpin)(struct xfs_log_item *, int);
+	uint64_t (*iop_sort)(struct xfs_log_item *);
+	int (*iop_precommit)(struct xfs_trans *, struct xfs_log_item *);
+	void (*iop_committing)(struct xfs_log_item *, xfs_csn_t);
+	xfs_lsn_t (*iop_committed)(struct xfs_log_item *, xfs_lsn_t);
+	uint (*iop_push)(struct xfs_log_item *, struct list_head *);
+	void (*iop_release)(struct xfs_log_item *);
+	int (*iop_recover)(struct xfs_log_item *, struct list_head *);
+	bool (*iop_match)(struct xfs_log_item *, uint64_t);
+	struct xfs_log_item * (*iop_relog)(struct xfs_log_item *, struct xfs_trans *);
+	struct xfs_log_item * (*iop_intent)(struct xfs_log_item *);
+};
+
+struct xfs_log_vec {
+	struct list_head lv_list;
+	uint32_t lv_order_id;
+	int lv_niovecs;
+	struct xfs_log_iovec *lv_iovecp;
+	struct xfs_log_item *lv_item;
+	char *lv_buf;
+	int lv_bytes;
+	int lv_buf_len;
+	int lv_size;
+};
+
+struct xlog_ticket {
+	struct list_head t_queue;
+	struct task_struct *t_task;
+	xlog_tid_t t_tid;
+	atomic_t t_ref;
+	int t_curr_res;
+	int t_unit_res;
+	char t_ocnt;
+	char t_cnt;
+	uint8_t t_flags;
+	int t_iclog_hdrs;
+};
+
+struct xfs_ail_cursor {
+	struct list_head list;
+	struct xfs_log_item *item;
+};
+
+enum xlog_iclog_state {
+	XLOG_STATE_ACTIVE = 0,
+	XLOG_STATE_WANT_SYNC = 1,
+	XLOG_STATE_SYNCING = 2,
+	XLOG_STATE_DONE_SYNC = 3,
+	XLOG_STATE_CALLBACK = 4,
+	XLOG_STATE_DIRTY = 5,
+};
+
+struct xlog_in_core {
+	wait_queue_head_t ic_force_wait;
+	wait_queue_head_t ic_write_wait;
+	struct xlog_in_core *ic_next;
+	struct xlog_in_core *ic_prev;
+	struct xlog *ic_log;
+	u32 ic_size;
+	u32 ic_offset;
+	enum xlog_iclog_state ic_state;
+	unsigned int ic_flags;
+	void *ic_datap;
+	struct list_head ic_callbacks;
+	long: 64;
+	long: 64;
+	atomic_t ic_refcnt;
+	xlog_in_core_2_t *ic_data;
+	struct semaphore ic_sema;
+	struct work_struct ic_end_io_work;
+	struct bio ic_bio;
+	struct bio_vec ic_bvec[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_cil_ctx {
+	struct xfs_cil *cil;
+	xfs_csn_t sequence;
+	xfs_lsn_t start_lsn;
+	xfs_lsn_t commit_lsn;
+	struct xlog_in_core *commit_iclog;
+	struct xlog_ticket *ticket;
+	atomic_t space_used;
+	struct list_head busy_extents;
+	struct list_head log_items;
+	struct list_head lv_chain;
+	struct list_head iclog_entry;
+	struct list_head committing;
+	struct work_struct discard_endio_work;
+	struct work_struct push_work;
+	atomic_t order_id;
+};
+
+struct xfs_cil {
+	struct xlog *xc_log;
+	long unsigned int xc_flags;
+	atomic_t xc_iclog_hdrs;
+	struct workqueue_struct *xc_push_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rw_semaphore xc_ctx_lock;
+	struct xfs_cil_ctx *xc_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t xc_push_lock;
+	xfs_csn_t xc_push_seq;
+	bool xc_push_commit_stable;
+	struct list_head xc_committing;
+	wait_queue_head_t xc_commit_wait;
+	wait_queue_head_t xc_start_wait;
+	xfs_csn_t xc_current_sequence;
+	wait_queue_head_t xc_push_wait;
+	void *xc_pcp;
+	struct list_head xc_pcp_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
+typedef unsigned int xa_mark_t;
+
+struct io_cq {
+	struct request_queue *q;
+	struct io_context *ioc;
+	union {
+		struct list_head q_node;
+		struct kmem_cache *__rcu_icq_cache;
+	};
+	union {
+		struct hlist_node ioc_node;
+		struct callback_head __rcu_head;
+	};
+	unsigned int flags;
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_CGROUP_PUNT = 22,
+	__REQ_POLLED = 23,
+	__REQ_ALLOC_CACHE = 24,
+	__REQ_SWAP = 25,
+	__REQ_DRV = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+struct sbitmap_word {
+	long unsigned int word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int *alloc_hint;
+};
+
+struct sbq_wait_state {
+	atomic_t wait_cnt;
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+};
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+typedef void rq_end_io_fn(struct request *, blk_status_t);
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	short unsigned int stats_sectors;
+	short unsigned int nr_phys_segments;
+	short unsigned int write_hint;
+	short unsigned int ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	long unsigned int deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+		void *completion_data;
+	};
+	union {
+		struct {
+			struct io_cq *icq;
+			void *priv[2];
+		} elv;
+		struct {
+			unsigned int seq;
+			struct list_head list;
+			rq_end_io_fn *saved_end_io;
+		} flush;
+	};
+	union {
+		struct __call_single_data csd;
+		u64 fifo_time;
+	};
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	unsigned int registered: 1;
+	struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	unsigned int cpu;
+	short unsigned int index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+};
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	atomic_t active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+};
+
+struct blk_flush_queue {
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	long unsigned int flush_pending_since;
+	struct list_head flush_queue[2];
+	struct list_head flush_data_in_flight;
+	struct request *flush_rq;
+	spinlock_t mq_flush_lock;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	const struct blk_mq_ops *ops;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		long unsigned int state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	long unsigned int flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	short unsigned int type;
+	short unsigned int nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	long unsigned int queued;
+	long unsigned int run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+enum {
+	BLK_MQ_F_SHOULD_MERGE = 1,
+	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
+	BLK_MQ_F_STACKING = 4,
+	BLK_MQ_F_TAG_HCTX_SHARED = 8,
+	BLK_MQ_F_BLOCKING = 32,
+	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
+	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
+	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+	BLK_MQ_S_STOPPED = 0,
+	BLK_MQ_S_TAG_ACTIVE = 1,
+	BLK_MQ_S_SCHED_RESTART = 2,
+	BLK_MQ_S_INACTIVE = 3,
+	BLK_MQ_MAX_DEPTH = 10240,
+	BLK_MQ_CPU_WORK_BATCH = 8,
+};
+
+enum {
+	BLK_MQ_REQ_NOWAIT = 1,
+	BLK_MQ_REQ_RESERVED = 2,
+	BLK_MQ_REQ_PM = 4,
+};
+
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx *queue_ctx;
+};
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+};
+
+struct elv_fs_entry;
+
+struct blk_mq_debugfs_attr;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
+	unsigned int flags;
+};
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_idle;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+typedef int __kernel_rwf_t;
+
+typedef struct fsnotify_mark_connector *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	short unsigned int type;
+	short unsigned int flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+struct io_uring_cmd {
+	struct file *file;
+	const void *cmd;
+	void (*task_work_cb)(struct io_uring_cmd *);
+	u32 cmd_op;
+	u32 pad;
+	u8 pdu[32];
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_NONBLOCK = -2147483648,
+	IO_URING_F_SQE128 = 4,
+	IO_URING_F_CQE32 = 8,
+	IO_URING_F_IOPOLL = 16,
+};
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_fixed_file {
+	long unsigned int file_ptr;
+};
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	long unsigned int *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_notif_slot;
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	short unsigned int submit_nr;
+	struct blk_plug plug;
+};
+
+struct io_alloc_cache {
+	struct hlist_head list;
+	unsigned int nr_cached;
+};
+
+struct io_restriction {
+	long unsigned int register_op[1];
+	long unsigned int sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_buffer_list;
+
+struct io_sq_data;
+
+struct io_ev_fd;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		struct percpu_ref refs;
+		struct io_rings *rings;
+		unsigned int flags;
+		enum task_work_notify_mode notify_method;
+		unsigned int compat: 1;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int has_evfd: 1;
+		unsigned int syscall_iopoll: 1;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		int rsrc_cached_refs;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_notif_slot *notif_slots;
+		unsigned int nr_notif_slots;
+		struct io_submit_state submit_state;
+		struct io_buffer_list *io_bl;
+		struct xarray io_bl_xa;
+		struct list_head io_buffers_cache;
+		struct io_hash_table cancel_table_locked;
+		struct list_head cq_overflow_list;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	long unsigned int check_cq;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	long: 64;
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd *io_ev_fd;
+		struct wait_queue_head cq_wait;
+		unsigned int cq_extra;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t completion_lock;
+		struct io_wq_work_list iopoll_list;
+		struct io_hash_table cancel_table;
+		bool poll_multi_queue;
+		struct list_head io_buffers_comp;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		atomic_t cq_timeouts;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct io_restriction restrictions;
+	struct task_struct *submitter_task;
+	struct io_rsrc_node *rsrc_backup_node;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct delayed_work rsrc_put_work;
+	struct llist_head rsrc_put_llist;
+	struct list_head rsrc_ref_list;
+	spinlock_t rsrc_ref_lock;
+	struct list_head io_buffers_pages;
+	struct socket *ring_sock;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_uring {
+	u32 head;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 tail;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, bool *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_buffer;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	union {
+		struct hlist_node hash_node;
+		struct {
+			u64 extra1;
+			u64 extra2;
+		};
+	};
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	long unsigned int map;
+	struct wait_queue_head wait;
+};
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = -529,
+	IOU_STOP_MULTISHOT = -125,
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_LAST = 48,
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct io_uring_buf bufs[0];
+	};
+};
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+};
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 1073741824,
+	REQ_F_ISREG = 2147483648,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 134217728,
+	REQ_F_CQE32_INIT = 67108864,
+	REQ_F_CLEAR_POLLIN = 268435456,
+	REQ_F_HASH_LOCKED = 536870912,
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	struct wait_queue_entry wait;
+};
+
+struct io_cache_entry {
+	struct hlist_node node;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_op_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int manual_alloc: 1;
+	short unsigned int async_size;
+	const char *name;
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u32 flags;
+	int seq;
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+};
+
+struct crypto_async_request;
+
+typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
+
+struct crypto_tfm;
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct crypto_alg;
+
+struct crypto_tfm {
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	void *__crt_ctx[0];
+};
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init)(struct crypto_tfm *, u32, u32);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	void *__ctx[0];
+};
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void *slots[64];
+	union {
+		long unsigned int tags[3];
+		long unsigned int marks[3];
+	};
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	long unsigned int xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_PIPE = 3,
+	ITER_XARRAY = 4,
+	ITER_DISCARD = 5,
+	ITER_UBUF = 6,
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	long unsigned int nr_segs;
+};
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+typedef u32 compat_size_t;
+
+typedef s32 compat_ssize_t;
+
+typedef u32 compat_uptr_t;
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+typedef unsigned char Byte;
+
+typedef unsigned int uInt;
+
+typedef long unsigned int uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+typedef struct z_stream_s z_stream;
+
+typedef z_stream *z_streamp;
+
+typedef struct {
+	unsigned char op;
+	unsigned char bits;
+	short unsigned int val;
+} code;
+
+typedef enum {
+	CODES = 0,
+	LENS = 1,
+	DISTS = 2,
+} codetype;
+
+typedef enum {
+	HEAD = 0,
+	FLAGS = 1,
+	TIME = 2,
+	OS = 3,
+	EXLEN = 4,
+	EXTRA = 5,
+	NAME = 6,
+	COMMENT = 7,
+	HCRC = 8,
+	DICTID = 9,
+	DICT = 10,
+	TYPE = 11,
+	TYPEDO = 12,
+	STORED = 13,
+	COPY = 14,
+	TABLE = 15,
+	LENLENS = 16,
+	CODELENS = 17,
+	LEN = 18,
+	LENEXT = 19,
+	DIST = 20,
+	DISTEXT = 21,
+	MATCH = 22,
+	LIT = 23,
+	CHECK = 24,
+	LENGTH = 25,
+	DONE = 26,
+	BAD = 27,
+	MEM = 28,
+	SYNC = 29,
+} inflate_mode;
+
+struct inflate_state {
+	inflate_mode mode;
+	int last;
+	int wrap;
+	int havedict;
+	int flags;
+	unsigned int dmax;
+	long unsigned int check;
+	long unsigned int total;
+	unsigned int wbits;
+	unsigned int wsize;
+	unsigned int whave;
+	unsigned int write;
+	unsigned char *window;
+	long unsigned int hold;
+	unsigned int bits;
+	unsigned int length;
+	unsigned int offset;
+	unsigned int extra;
+	const code *lencode;
+	const code *distcode;
+	unsigned int lenbits;
+	unsigned int distbits;
+	unsigned int ncode;
+	unsigned int nlen;
+	unsigned int ndist;
+	unsigned int have;
+	code *next;
+	short unsigned int lens[320];
+	short unsigned int work[288];
+	code codes[2048];
+};
+
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __u64 __le64;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+typedef s16 int16_t;
+
+typedef uint8_t BYTE;
+
+typedef uint16_t U16;
+
+typedef int16_t S16;
+
+typedef uint32_t U32;
+
+typedef uint64_t U64;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	long long unsigned int frameContentSize;
+	long long unsigned int windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef enum {
+	ZSTD_use_indefinitely = -1,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	int bmi2;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	void *legacyContext;
+	U32 previousLegacyVersion;
+	U32 legacyVersion;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE litBuffer[131104];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+	const BYTE *match;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+	const BYTE *prefixStart;
+	const BYTE *dictEnd;
+	size_t pos;
+} seqState_t;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef enum {
+	ZSTD_p_noPrefetch = 0,
+	ZSTD_p_prefetch = 1,
+} ZSTD_prefetch_e;
+
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+enum dim_state {
+	DIM_START_MEASURE = 0,
+	DIM_MEASURE_IN_PROGRESS = 1,
+	DIM_APPLY_NEW_PROFILE = 2,
+};
+
+enum dim_tune_state {
+	DIM_PARKING_ON_TOP = 0,
+	DIM_PARKING_TIRED = 1,
+	DIM_GOING_RIGHT = 2,
+	DIM_GOING_LEFT = 3,
+};
+
+enum dim_stats_state {
+	DIM_STATS_WORSE = 0,
+	DIM_STATS_SAME = 1,
+	DIM_STATS_BETTER = 2,
+};
+
+enum dim_step_result {
+	DIM_STEPPED = 0,
+	DIM_TOO_TIRED = 1,
+	DIM_ON_EDGE = 2,
+};
+
+struct platform_driver {
+	int (*probe)(struct platform_device *);
+	int (*remove)(struct platform_device *);
+	void (*shutdown)(struct platform_device *);
+	int (*suspend)(struct platform_device *, pm_message_t);
+	int (*resume)(struct platform_device *);
+	struct device_driver driver;
+	const struct platform_device_id *id_table;
+	bool prevent_deferred_probe;
+	bool driver_managed_dma;
+};
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_PCMCIA_CIS = 10,
+	LOCKDOWN_TIOCSSERIAL = 11,
+	LOCKDOWN_MODULE_PARAMETERS = 12,
+	LOCKDOWN_MMIOTRACE = 13,
+	LOCKDOWN_DEBUGFS = 14,
+	LOCKDOWN_XMON_WR = 15,
+	LOCKDOWN_BPF_WRITE_USER = 16,
+	LOCKDOWN_DBG_WRITE_KERNEL = 17,
+	LOCKDOWN_INTEGRITY_MAX = 18,
+	LOCKDOWN_KCORE = 19,
+	LOCKDOWN_KPROBES = 20,
+	LOCKDOWN_BPF_READ_KERNEL = 21,
+	LOCKDOWN_DBG_READ_KERNEL = 22,
+	LOCKDOWN_PERF = 23,
+	LOCKDOWN_TRACEFS = 24,
+	LOCKDOWN_XMON_RW = 25,
+	LOCKDOWN_XFRM_SECRET = 26,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 27,
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+struct pci_filp_private {
+	enum pci_mmap_state mmap_state;
+	int write_combine;
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	long unsigned int smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	long unsigned int mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+struct backlight_device;
+
+struct fb_info;
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_ops;
+
+struct fb_tile_ops;
+
+struct apertures_struct;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	struct backlight_device *bl_dev;
+	struct mutex bl_curve_mutex;
+	u8 bl_curve[128];
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	struct fb_tile_ops *tileops;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	long unsigned int screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	struct apertures_struct *apertures;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct fb_tilemap {
+	__u32 width;
+	__u32 height;
+	__u32 depth;
+	__u32 length;
+	const __u8 *data;
+};
+
+struct fb_tilerect {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 index;
+	__u32 fg;
+	__u32 bg;
+	__u32 rop;
+};
+
+struct fb_tilearea {
+	__u32 sx;
+	__u32 sy;
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+};
+
+struct fb_tileblit {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 fg;
+	__u32 bg;
+	__u32 length;
+	__u32 *indices;
+};
+
+struct fb_tilecursor {
+	__u32 sx;
+	__u32 sy;
+	__u32 mode;
+	__u32 shape;
+	__u32 fg;
+	__u32 bg;
+};
+
+struct fb_tile_ops {
+	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
+	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
+	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
+	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
+	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
+	int (*fb_get_tilemax)(struct fb_info *);
+};
+
+struct aperture {
+	resource_size_t base;
+	resource_size_t size;
+};
+
+struct apertures_struct {
+	unsigned int count;
+	struct aperture ranges[0];
+};
+
+struct fb_modelist {
+	struct list_head list;
+	struct fb_videomode mode;
+};
+
+typedef u16 u_int16_t;
+
+typedef u32 u_int32_t;
+
+typedef struct {
+	void *vaddr;
+} vaddr_t;
+
+struct my_timming {
+	unsigned int pixclock;
+	int mnp;
+	unsigned int crtc;
+	unsigned int HDisplay;
+	unsigned int HSyncStart;
+	unsigned int HSyncEnd;
+	unsigned int HTotal;
+	unsigned int VDisplay;
+	unsigned int VSyncStart;
+	unsigned int VSyncEnd;
+	unsigned int VTotal;
+	unsigned int sync;
+	int dblscan;
+	int interlaced;
+	unsigned int delay;
+};
+
+struct matrox_pll_cache {
+	unsigned int valid;
+	struct {
+		unsigned int mnp_key;
+		unsigned int mnp_value;
+	} data[4];
+};
+
+struct matrox_pll_limits {
+	unsigned int vcomin;
+	unsigned int vcomax;
+};
+
+struct matrox_pll_features {
+	unsigned int vco_freq_min;
+	unsigned int ref_freq;
+	unsigned int feed_div_min;
+	unsigned int feed_div_max;
+	unsigned int in_div_min;
+	unsigned int in_div_max;
+	unsigned int post_shift_max;
+};
+
+struct matroxfb_par {
+	unsigned int final_bppShift;
+	unsigned int cmap_len;
+	struct {
+		unsigned int bytes;
+		unsigned int pixels;
+		unsigned int chunks;
+	} ydstorg;
+};
+
+struct matrox_DAC1064_features {
+	u_int8_t xvrefctrl;
+	u_int8_t xmiscctrl;
+};
+
+struct mavenregs {
+	u_int8_t regs[256];
+	int mode;
+	int vlines;
+	int xtal;
+	int fv;
+	u_int16_t htotal;
+	u_int16_t hcorr;
+};
+
+struct matrox_crtc2 {
+	u_int32_t ctl;
+};
+
+struct matrox_hw_state {
+	u_int32_t MXoptionReg;
+	unsigned char DACclk[6];
+	unsigned char DACreg[80];
+	unsigned char MiscOutReg;
+	unsigned char DACpal[768];
+	unsigned char CRTC[25];
+	unsigned char CRTCEXT[9];
+	unsigned char SEQ[5];
+	unsigned char GCTL[9];
+	unsigned char ATTR[21];
+	struct mavenregs maven;
+	struct matrox_crtc2 crtc2;
+};
+
+struct matrox_accel_data {
+	unsigned char ramdac_rev;
+	u_int32_t m_dwg_rect;
+	u_int32_t m_opmode;
+	u_int32_t m_access;
+	u_int32_t m_pitch;
+};
+
+struct v4l2_queryctrl;
+
+struct v4l2_control;
+
+struct matrox_altout {
+	const char *name;
+	int (*compute)(void *, struct my_timming *);
+	int (*program)(void *);
+	int (*start)(void *);
+	int (*verifymode)(void *, u_int32_t);
+	int (*getqueryctrl)(void *, struct v4l2_queryctrl *);
+	int (*getctrl)(void *, struct v4l2_control *);
+	int (*setctrl)(void *, struct v4l2_control *);
+};
+
+struct v4l2_queryctrl {
+	__u32 id;
+	__u32 type;
+	__u8 name[32];
+	__s32 minimum;
+	__s32 maximum;
+	__s32 step;
+	__s32 default_value;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_control {
+	__u32 id;
+	__s32 value;
+};
+
+enum mga_chip {
+	MGA_2064 = 0,
+	MGA_2164 = 1,
+	MGA_1064 = 2,
+	MGA_1164 = 3,
+	MGA_G100 = 4,
+	MGA_G200 = 5,
+	MGA_G400 = 6,
+	MGA_G450 = 7,
+	MGA_G550 = 8,
+};
+
+struct matrox_bios {
+	unsigned int bios_valid: 1;
+	unsigned int pins_len;
+	unsigned char pins[128];
+	struct {
+		unsigned char vMaj;
+		unsigned char vMin;
+		unsigned char vRev;
+	} version;
+	struct {
+		unsigned char state;
+		unsigned char tvout;
+	} output;
+};
+
+struct matrox_vsync {
+	wait_queue_head_t wait;
+	unsigned int cnt;
+};
+
+struct matroxfb_dh_fb_info;
+
+struct matroxfb_driver;
+
+struct matrox_switch;
+
+struct matrox_fb_info {
+	struct fb_info fbcon;
+	struct list_head next_fb;
+	int dead;
+	int initialized;
+	unsigned int usecount;
+	unsigned int userusecount;
+	long unsigned int irq_flags;
+	struct matroxfb_par curr;
+	struct matrox_hw_state hw;
+	struct matrox_accel_data accel;
+	struct pci_dev *pcidev;
+	struct {
+		struct matrox_vsync vsync;
+		unsigned int pixclock;
+		int mnp;
+		int panpos;
+	} crtc1;
+	struct {
+		struct matrox_vsync vsync;
+		unsigned int pixclock;
+		int mnp;
+		struct matroxfb_dh_fb_info *info;
+		struct rw_semaphore lock;
+	} crtc2;
+	struct {
+		struct rw_semaphore lock;
+		struct {
+			int brightness;
+			int contrast;
+			int saturation;
+			int hue;
+			int gamma;
+			int testout;
+			int deflicker;
+		} tvo_params;
+	} altout;
+	struct {
+		unsigned int src;
+		struct matrox_altout *output;
+		void *data;
+		unsigned int mode;
+		unsigned int default_src;
+	} outputs[3];
+	struct matroxfb_driver *drivers[5];
+	void *drivers_data[5];
+	unsigned int drivers_count;
+	struct {
+		long unsigned int base;
+		vaddr_t vbase;
+		unsigned int len;
+		unsigned int len_usable;
+		unsigned int len_maximum;
+	} video;
+	struct {
+		long unsigned int base;
+		vaddr_t vbase;
+		unsigned int len;
+	} mmio;
+	unsigned int max_pixel_clock;
+	unsigned int max_pixel_clock_panellink;
+	struct matrox_switch *hw_switch;
+	struct {
+		struct matrox_pll_features pll;
+		struct matrox_DAC1064_features DAC1064;
+	} features;
+	struct {
+		spinlock_t DAC;
+		spinlock_t accel;
+	} lock;
+	enum mga_chip chip;
+	int interleave;
+	int millenium;
+	int milleniumII;
+	struct {
+		int cfb4;
+		const int *vxres;
+		int cross4MB;
+		int text;
+		int plnwt;
+		int srcorg;
+	} capable;
+	int wc_cookie;
+	struct {
+		int precise_width;
+		int mga_24bpp_fix;
+		int novga;
+		int nobios;
+		int nopciretry;
+		int noinit;
+		int sgram;
+		int support32MB;
+		int accelerator;
+		int text_type_aux;
+		int video64bits;
+		int crtc2;
+		int maven_capable;
+		unsigned int vgastep;
+		unsigned int textmode;
+		unsigned int textstep;
+		unsigned int textvram;
+		unsigned int ydstorg;
+		int memtype;
+		int g450dac;
+		int dfp_type;
+		int panellink;
+		int dualhead;
+		unsigned int fbResource;
+	} devflags;
+	struct fb_ops fbops;
+	struct matrox_bios bios;
+	struct {
+		struct matrox_pll_limits pixel;
+		struct matrox_pll_limits system;
+		struct matrox_pll_limits video;
+	} limits;
+	struct {
+		struct matrox_pll_cache pixel;
+		struct matrox_pll_cache system;
+		struct matrox_pll_cache video;
+	} cache;
+	struct {
+		struct {
+			unsigned int video;
+			unsigned int system;
+		} pll;
+		struct {
+			u_int32_t opt;
+			u_int32_t opt2;
+			u_int32_t opt3;
+			u_int32_t mctlwtst;
+			u_int32_t mctlwtst_core;
+			u_int32_t memmisc;
+			u_int32_t memrdbk;
+			u_int32_t maccess;
+		} reg;
+		struct {
+			unsigned int ddr: 1;
+			unsigned int emrswen: 1;
+			unsigned int dll: 1;
+		} memory;
+	} values;
+	u_int32_t cmap[16];
+};
+
+struct matroxfb_driver {
+	struct list_head node;
+	char *name;
+	void * (*probe)(struct matrox_fb_info *);
+	void (*remove)(struct matrox_fb_info *, void *);
+};
+
+struct matrox_switch {
+	int (*preinit)(struct matrox_fb_info *);
+	void (*reset)(struct matrox_fb_info *);
+	int (*init)(struct matrox_fb_info *, struct my_timming *);
+	void (*restore)(struct matrox_fb_info *);
+};
+
+enum v4l2_preemphasis {
+	V4L2_PREEMPHASIS_DISABLED = 0,
+	V4L2_PREEMPHASIS_50_uS = 1,
+	V4L2_PREEMPHASIS_75_uS = 2,
+};
+
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+struct virtqueue;
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct irq_affinity;
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+struct vt_mode {
+	char mode;
+	char waitv;
+	short int relsig;
+	short int acqsig;
+	short int frsig;
+};
+
+struct console_font {
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+enum vc_intensity {
+	VCI_HALF_BRIGHT = 0,
+	VCI_NORMAL = 1,
+	VCI_BOLD = 2,
+	VCI_MASK = 3,
+};
+
+struct vc_state {
+	unsigned int x;
+	unsigned int y;
+	unsigned char color;
+	unsigned char Gx_charset[2];
+	unsigned int charset: 1;
+	enum vc_intensity intensity;
+	bool italic;
+	bool underline;
+	bool blink;
+	bool reverse;
+};
+
+struct consw;
+
+struct uni_pagedict;
+
+struct uni_screen;
+
+struct vc_data {
+	struct tty_port port;
+	struct vc_state state;
+	struct vc_state saved_state;
+	short unsigned int vc_num;
+	unsigned int vc_cols;
+	unsigned int vc_rows;
+	unsigned int vc_size_row;
+	unsigned int vc_scan_lines;
+	unsigned int vc_cell_height;
+	long unsigned int vc_origin;
+	long unsigned int vc_scr_end;
+	long unsigned int vc_visible_origin;
+	unsigned int vc_top;
+	unsigned int vc_bottom;
+	const struct consw *vc_sw;
+	short unsigned int *vc_screenbuf;
+	unsigned int vc_screenbuf_size;
+	unsigned char vc_mode;
+	unsigned char vc_attr;
+	unsigned char vc_def_color;
+	unsigned char vc_ulcolor;
+	unsigned char vc_itcolor;
+	unsigned char vc_halfcolor;
+	unsigned int vc_cursor_type;
+	short unsigned int vc_complement_mask;
+	short unsigned int vc_s_complement_mask;
+	long unsigned int vc_pos;
+	short unsigned int vc_hi_font_mask;
+	struct console_font vc_font;
+	short unsigned int vc_video_erase_char;
+	unsigned int vc_state;
+	unsigned int vc_npar;
+	unsigned int vc_par[16];
+	struct vt_mode vt_mode;
+	struct pid *vt_pid;
+	int vt_newvt;
+	wait_queue_head_t paste_wait;
+	unsigned int vc_disp_ctrl: 1;
+	unsigned int vc_toggle_meta: 1;
+	unsigned int vc_decscnm: 1;
+	unsigned int vc_decom: 1;
+	unsigned int vc_decawm: 1;
+	unsigned int vc_deccm: 1;
+	unsigned int vc_decim: 1;
+	unsigned int vc_priv: 3;
+	unsigned int vc_need_wrap: 1;
+	unsigned int vc_can_do_color: 1;
+	unsigned int vc_report_mouse: 2;
+	unsigned char vc_utf: 1;
+	unsigned char vc_utf_count;
+	int vc_utf_char;
+	long unsigned int vc_tab_stop[4];
+	unsigned char vc_palette[48];
+	short unsigned int *vc_translate;
+	unsigned int vc_resize_user;
+	unsigned int vc_bell_pitch;
+	unsigned int vc_bell_duration;
+	short unsigned int vc_cur_blink_ms;
+	struct vc_data **vc_display_fg;
+	struct uni_pagedict *uni_pagedict;
+	struct uni_pagedict **uni_pagedict_loc;
+	struct uni_screen *vc_uni_screen;
+};
+
+enum con_scroll {
+	SM_UP = 0,
+	SM_DOWN = 1,
+};
+
+struct consw {
+	struct module *owner;
+	const char * (*con_startup)();
+	void (*con_init)(struct vc_data *, int);
+	void (*con_deinit)(struct vc_data *);
+	void (*con_clear)(struct vc_data *, int, int, int, int);
+	void (*con_putc)(struct vc_data *, int, int, int);
+	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
+	void (*con_cursor)(struct vc_data *, int);
+	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+	int (*con_switch)(struct vc_data *);
+	int (*con_blank)(struct vc_data *, int, int);
+	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
+	int (*con_font_get)(struct vc_data *, struct console_font *);
+	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
+	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+	void (*con_set_palette)(struct vc_data *, const unsigned char *);
+	void (*con_scrolldelta)(struct vc_data *, int);
+	int (*con_set_origin)(struct vc_data *);
+	void (*con_save_screen)(struct vc_data *);
+	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+	void (*con_invert_region)(struct vc_data *, u16 *, int);
+	u16 * (*con_screen_pos)(const struct vc_data *, int);
+	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
+	void (*con_flush_scrollback)(struct vc_data *);
+	int (*con_debug_enter)(struct vc_data *);
+	int (*con_debug_leave)(struct vc_data *);
+};
+
+struct vc {
+	struct vc_data *d;
+	struct work_struct SAK_work;
+};
+
+struct vt_notifier_param {
+	struct vc_data *vc;
+	unsigned int c;
+};
+
+struct vcs_poll_data {
+	struct notifier_block notifier;
+	unsigned int cons_num;
+	int event;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+enum hwparam_type {
+	hwparam_ioport = 0,
+	hwparam_iomem = 1,
+	hwparam_ioport_or_iomem = 2,
+	hwparam_irq = 3,
+	hwparam_dma = 4,
+	hwparam_dma_addr = 5,
+	hwparam_other = 6,
+};
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short int flags;
+	short int index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	long unsigned int dropped;
+	void *data;
+	struct console *next;
+};
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	long unsigned int iomap_base;
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	union {
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
+	};
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct uart_port;
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+typedef unsigned int upf_t;
+
+typedef unsigned int upstat_t;
+
+struct gpio_desc;
+
+struct uart_state;
+
+struct uart_port {
+	spinlock_t lock;
+	long unsigned int iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	int hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	long unsigned int sysrq;
+	unsigned int sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+};
+
+struct plat_serial8250_port {
+	long unsigned int iobase;
+	void *membase;
+	resource_size_t mapbase;
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	upf_t flags;
+	unsigned int type;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
+enum {
+	PLAT8250_DEV_LEGACY = -1,
+	PLAT8250_DEV_PLATFORM = 0,
+	PLAT8250_DEV_PLATFORM1 = 1,
+	PLAT8250_DEV_PLATFORM2 = 2,
+	PLAT8250_DEV_FOURPORT = 3,
+	PLAT8250_DEV_ACCENT = 4,
+	PLAT8250_DEV_BOCA = 5,
+	PLAT8250_DEV_EXAR_ST16C554 = 6,
+	PLAT8250_DEV_HUB6 = 7,
+	PLAT8250_DEV_AU1X00 = 8,
+	PLAT8250_DEV_SM501 = 9,
+};
+
+struct uart_8250_port;
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	short unsigned int bugs;
+	bool fifo_bug;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	int (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, int);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct dma_chan;
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+typedef s32 dma_cookie_t;
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan *rxchan;
+	struct dma_chan *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+enum sum_check_bits {
+	SUM_CHECK_P = 0,
+	SUM_CHECK_Q = 1,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
+};
+
+typedef struct {
+	long unsigned int bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
+};
+
+struct dma_chan_percpu {
+	long unsigned int memcpy_count;
+	long unsigned int bytes_transferred;
+};
+
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
+};
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+struct dma_chan {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
+
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_slave_caps;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	short unsigned int max_xor;
+	short unsigned int max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan *);
+	int (*device_router_config)(struct dma_chan *);
+	void (*device_free_chan_resources)(struct dma_chan *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
+	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan *);
+	int (*device_resume)(struct dma_chan *);
+	int (*device_terminate_all)(struct dma_chan *);
+	void (*device_synchronize)(struct dma_chan *);
+	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_chan_dev {
+	struct dma_chan *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data {
+	u8 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+struct old_serial_port {
+	unsigned int uart;
+	unsigned int baud_base;
+	unsigned int port;
+	unsigned int irq;
+	upf_t flags;
+	unsigned char io_type;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+};
+
+struct irq_info {
+	struct hlist_node node;
+	int irq;
+	spinlock_t lock;
+	struct list_head *head;
+};
+
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
+};
+
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+struct component;
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+};
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	long unsigned int size;
+};
+
+struct klist_node;
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
+	struct mutex mutex;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	struct bus_type *bus;
+	struct kset glue_dirs;
+	struct class *class;
+};
+
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
+};
+
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
+};
+
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_COMPRESSED = 2,
+	REGCACHE_FLAT = 3,
+};
+
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
+};
+
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
+};
+
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_downshift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
+};
+
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+struct regmap;
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
+};
+
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
+
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+typedef void (*regmap_hw_free_context)(void *);
+
+struct regmap_bus {
+	bool fast_io;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool free_on_exit;
+};
+
+struct regulator;
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_adapter;
+
+struct i2c_client {
+	short unsigned int flags;
+	short unsigned int addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	long unsigned int locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t reg_downshift;
+	size_t val_bytes;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
+};
+
+struct hwspinlock;
+
+struct regcache_ops;
+
+struct regmap {
+	union {
+		struct mutex mutex;
+		struct {
+			spinlock_t spinlock;
+			long unsigned int spinlock_flags;
+		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			long unsigned int raw_spinlock_flags;
+		};
+	};
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
+	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
+};
+
+struct regcache_ops {
+	const char *name;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
+};
+
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+struct badrange {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct nvdimm_bus_descriptor;
+
+struct nvdimm;
+
+typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *, unsigned int, int *);
+
+struct nvdimm_bus_fw_ops;
+
+struct nvdimm_bus_descriptor {
+	const struct attribute_group **attr_groups;
+	long unsigned int cmd_mask;
+	long unsigned int dimm_family_mask;
+	long unsigned int bus_family_mask;
+	struct module *module;
+	char *provider_name;
+	struct device_node *of_node;
+	ndctl_fn ndctl;
+	int (*flush_probe)(struct nvdimm_bus_descriptor *);
+	int (*clear_to_send)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *);
+	const struct nvdimm_bus_fw_ops *fw_ops;
+};
+
+struct nvdimm_security_ops;
+
+struct nvdimm_fw_ops;
+
+struct nvdimm {
+	long unsigned int flags;
+	void *provider_data;
+	long unsigned int cmd_mask;
+	struct device dev;
+	atomic_t busy;
+	int id;
+	int num_flush;
+	struct resource *flush_wpq;
+	const char *dimm_id;
+	struct {
+		const struct nvdimm_security_ops *ops;
+		long unsigned int flags;
+		long unsigned int ext_flags;
+		unsigned int overwrite_tmo;
+		struct kernfs_node *overwrite_state;
+	} sec;
+	struct delayed_work dwork;
+	const struct nvdimm_fw_ops *fw_ops;
+};
+
+enum nvdimm_fwa_state {
+	NVDIMM_FWA_INVALID = 0,
+	NVDIMM_FWA_IDLE = 1,
+	NVDIMM_FWA_ARMED = 2,
+	NVDIMM_FWA_BUSY = 3,
+	NVDIMM_FWA_ARM_OVERFLOW = 4,
+};
+
+enum nvdimm_fwa_capability {
+	NVDIMM_FWA_CAP_INVALID = 0,
+	NVDIMM_FWA_CAP_NONE = 1,
+	NVDIMM_FWA_CAP_QUIESCE = 2,
+	NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+struct nvdimm_bus_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm_bus_descriptor *);
+	enum nvdimm_fwa_capability (*capability)(struct nvdimm_bus_descriptor *);
+	int (*activate)(struct nvdimm_bus_descriptor *);
+};
+
+struct nd_interleave_set {
+	u64 cookie1;
+	u64 cookie2;
+	u64 altcookie;
+	guid_t type_guid;
+};
+
+struct nvdimm_drvdata;
+
+struct nd_mapping {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+	struct list_head labels;
+	struct mutex lock;
+	struct nvdimm_drvdata *ndd;
+};
+
+struct nd_percpu_lane;
+
+struct nd_region {
+	struct device dev;
+	struct ida ns_ida;
+	struct ida btt_ida;
+	struct ida pfn_ida;
+	struct ida dax_ida;
+	long unsigned int flags;
+	struct device *ns_seed;
+	struct device *btt_seed;
+	struct device *pfn_seed;
+	struct device *dax_seed;
+	long unsigned int align;
+	u16 ndr_mappings;
+	u64 ndr_size;
+	u64 ndr_start;
+	int id;
+	int num_lanes;
+	int ro;
+	int numa_node;
+	int target_node;
+	void *provider_data;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct nd_interleave_set *nd_set;
+	struct nd_percpu_lane *lane;
+	int (*flush)(struct nd_region *, struct bio *);
+	struct nd_mapping mapping[0];
+};
+
+struct nvdimm_key_data {
+	u8 data[32];
+};
+
+enum nvdimm_passphrase_type {
+	NVDIMM_USER = 0,
+	NVDIMM_MASTER = 1,
+};
+
+struct nvdimm_security_ops {
+	long unsigned int (*get_flags)(struct nvdimm *, enum nvdimm_passphrase_type);
+	int (*freeze)(struct nvdimm *);
+	int (*change_key)(struct nvdimm *, const struct nvdimm_key_data *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*unlock)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*disable)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*erase)(struct nvdimm *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*overwrite)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*query_overwrite)(struct nvdimm *);
+};
+
+enum nvdimm_fwa_trigger {
+	NVDIMM_FWA_ARM = 0,
+	NVDIMM_FWA_DISARM = 1,
+};
+
+enum nvdimm_fwa_result {
+	NVDIMM_FWA_RESULT_INVALID = 0,
+	NVDIMM_FWA_RESULT_NONE = 1,
+	NVDIMM_FWA_RESULT_SUCCESS = 2,
+	NVDIMM_FWA_RESULT_NOTSTAGED = 3,
+	NVDIMM_FWA_RESULT_NEEDRESET = 4,
+	NVDIMM_FWA_RESULT_FAIL = 5,
+};
+
+struct nvdimm_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm *);
+	enum nvdimm_fwa_result (*activate_result)(struct nvdimm *);
+	int (*arm)(struct nvdimm *, enum nvdimm_fwa_trigger);
+};
+
+struct nd_cmd_get_config_size {
+	__u32 status;
+	__u32 config_size;
+	__u32 max_xfer;
+};
+
+enum nvdimm_claim_class {
+	NVDIMM_CCLASS_NONE = 0,
+	NVDIMM_CCLASS_BTT = 1,
+	NVDIMM_CCLASS_BTT2 = 2,
+	NVDIMM_CCLASS_PFN = 3,
+	NVDIMM_CCLASS_DAX = 4,
+	NVDIMM_CCLASS_UNKNOWN = 5,
+};
+
+struct nd_namespace_common {
+	int force_raw;
+	struct device dev;
+	struct device *claim;
+	enum nvdimm_claim_class claim_class;
+	int (*rw_bytes)(struct nd_namespace_common *, resource_size_t, void *, size_t, int, long unsigned int);
+};
+
+struct nd_namespace_io {
+	struct nd_namespace_common common;
+	struct resource res;
+	resource_size_t size;
+	void *addr;
+	struct badblocks bb;
+};
+
+enum {
+	NSINDEX_SIG_LEN = 16,
+	NSINDEX_ALIGN = 256,
+	NSINDEX_SEQ_MASK = 3,
+	NSLABEL_UUID_LEN = 16,
+	NSLABEL_NAME_LEN = 64,
+	NSLABEL_FLAG_ROLABEL = 1,
+	NSLABEL_FLAG_LOCAL = 2,
+	NSLABEL_FLAG_BTT = 4,
+	NSLABEL_FLAG_UPDATING = 8,
+	BTT_ALIGN = 4096,
+	BTTINFO_SIG_LEN = 16,
+	BTTINFO_UUID_LEN = 16,
+	BTTINFO_FLAG_ERROR = 1,
+	BTTINFO_MAJOR_VERSION = 1,
+	ND_LABEL_MIN_SIZE = 1024,
+	ND_LABEL_ID_SIZE = 50,
+	ND_NSINDEX_INIT = 1,
+};
+
+enum {
+	ND_MAX_LANES = 256,
+	INT_LBASIZE_ALIGNMENT = 64,
+	NVDIMM_IO_ATOMIC = 1,
+};
+
+struct nvdimm_drvdata {
+	struct device *dev;
+	int nslabel_size;
+	struct nd_cmd_get_config_size nsarea;
+	void *data;
+	bool cxl;
+	int ns_current;
+	int ns_next;
+	struct resource dpa;
+	struct kref kref;
+};
+
+struct nd_percpu_lane {
+	int count;
+	spinlock_t lock;
+};
+
+struct btt;
+
+struct nd_btt {
+	struct device dev;
+	struct nd_namespace_common *ndns;
+	struct btt *btt;
+	long unsigned int lbasize;
+	u64 size;
+	uuid_t *uuid;
+	int id;
+	int initial_offset;
+	u16 version_major;
+	u16 version_minor;
+};
+
+struct btt {
+	struct gendisk *btt_disk;
+	struct list_head arena_list;
+	struct dentry *debugfs_dir;
+	struct nd_btt *nd_btt;
+	u64 nlba;
+	long long unsigned int rawsize;
+	u32 lbasize;
+	u32 sector_size;
+	struct nd_region *nd_region;
+	struct mutex init_lock;
+	int init_state;
+	int num_arenas;
+	struct badblocks *phys_bb;
+};
+
+enum nd_pfn_mode {
+	PFN_MODE_NONE = 0,
+	PFN_MODE_RAM = 1,
+	PFN_MODE_PMEM = 2,
+};
+
+struct nd_pfn_sb;
+
+struct nd_pfn {
+	int id;
+	uuid_t *uuid;
+	struct device dev;
+	long unsigned int align;
+	long unsigned int npfns;
+	enum nd_pfn_mode mode;
+	struct nd_pfn_sb *pfn_sb;
+	struct nd_namespace_common *ndns;
+};
+
+struct nd_pfn_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le64 dataoff;
+	__le64 npfns;
+	__le32 mode;
+	__le32 start_pad;
+	__le32 end_trunc;
+	__le32 align;
+	__le32 page_size;
+	__le16 page_struct_size;
+	u8 padding[3994];
+	__le64 checksum;
+};
+
+struct nd_dax {
+	struct nd_pfn nd_pfn;
+};
+
+enum nd_async_mode {
+	ND_SYNC = 0,
+	ND_ASYNC = 1,
+};
+
+struct nd_gen_sb {
+	char reserved[4088];
+	__le64 checksum;
+};
+
+struct nvdimm_bus {
+	struct nvdimm_bus_descriptor *nd_desc;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct device dev;
+	int id;
+	int probe_active;
+	atomic_t ioctl_active;
+	struct list_head mapping_list;
+	struct mutex reconfig_mutex;
+	struct badrange badrange;
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+struct bsg_device;
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	short unsigned int queue_depth;
+	short unsigned int max_queue_depth;
+	short unsigned int last_queue_full_depth;
+	short unsigned int last_queue_full_count;
+	long unsigned int last_queue_full_time;
+	long unsigned int queue_ramp_up_period;
+	long unsigned int last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd *vpd_pg0;
+	struct scsi_vpd *vpd_pg83;
+	struct scsi_vpd *vpd_pg80;
+	struct scsi_vpd *vpd_pg89;
+	struct scsi_vpd *vpd_pgb0;
+	struct scsi_vpd *vpd_pgb1;
+	struct scsi_vpd *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int manage_start_stop: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	long unsigned int supported_events[1];
+	long unsigned int pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct execute_work ew;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	long unsigned int sdev_data[0];
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	long unsigned int starget_data[0];
+};
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+} __attribute__((mode(byte)));
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	long unsigned int jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	short unsigned int cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	long unsigned int state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+};
+
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+	const struct cdrom_device_ops *ops;
+	struct list_head list;
+	struct gendisk *disk;
+	void *handle;
+	int mask;
+	int speed;
+	int capacity;
+	unsigned int options: 30;
+	unsigned int mc_flags: 2;
+	unsigned int vfs_events;
+	unsigned int ioctl_events;
+	int use_count;
+	char name[20];
+	__u8 sanyo_slot: 2;
+	__u8 keeplocked: 1;
+	__u8 reserved: 5;
+	int cdda_method;
+	__u8 last_sense;
+	__u8 media_written;
+	short unsigned int mmc3_profile;
+	int for_data;
+	int (*exit)(struct cdrom_device_info *);
+	int mrw_mode_page;
+	__s64 last_media_change_ms;
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	int (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	struct proc_dir_entry *proc_dir;
+	int can_queue;
+	int this_id;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	short int cmd_per_lun;
+	unsigned char present;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	int rpm_autosuspend_delay;
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	long unsigned int last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	short unsigned int max_cmd_len;
+	int this_id;
+	int can_queue;
+	short int cmd_per_lun;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	long unsigned int base;
+	long unsigned int io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	long unsigned int hostdata[0];
+};
+
+enum {
+	ATA_MAX_DEVICES = 2,
+	ATA_MAX_PRD = 256,
+	ATA_SECT_SIZE = 512,
+	ATA_MAX_SECTORS_128 = 128,
+	ATA_MAX_SECTORS = 256,
+	ATA_MAX_SECTORS_1024 = 1024,
+	ATA_MAX_SECTORS_LBA48 = 65535,
+	ATA_MAX_SECTORS_TAPE = 65535,
+	ATA_MAX_TRIM_RNUM = 64,
+	ATA_ID_WORDS = 256,
+	ATA_ID_CONFIG = 0,
+	ATA_ID_CYLS = 1,
+	ATA_ID_HEADS = 3,
+	ATA_ID_SECTORS = 6,
+	ATA_ID_SERNO = 10,
+	ATA_ID_BUF_SIZE = 21,
+	ATA_ID_FW_REV = 23,
+	ATA_ID_PROD = 27,
+	ATA_ID_MAX_MULTSECT = 47,
+	ATA_ID_DWORD_IO = 48,
+	ATA_ID_TRUSTED = 48,
+	ATA_ID_CAPABILITY = 49,
+	ATA_ID_OLD_PIO_MODES = 51,
+	ATA_ID_OLD_DMA_MODES = 52,
+	ATA_ID_FIELD_VALID = 53,
+	ATA_ID_CUR_CYLS = 54,
+	ATA_ID_CUR_HEADS = 55,
+	ATA_ID_CUR_SECTORS = 56,
+	ATA_ID_MULTSECT = 59,
+	ATA_ID_LBA_CAPACITY = 60,
+	ATA_ID_SWDMA_MODES = 62,
+	ATA_ID_MWDMA_MODES = 63,
+	ATA_ID_PIO_MODES = 64,
+	ATA_ID_EIDE_DMA_MIN = 65,
+	ATA_ID_EIDE_DMA_TIME = 66,
+	ATA_ID_EIDE_PIO = 67,
+	ATA_ID_EIDE_PIO_IORDY = 68,
+	ATA_ID_ADDITIONAL_SUPP = 69,
+	ATA_ID_QUEUE_DEPTH = 75,
+	ATA_ID_SATA_CAPABILITY = 76,
+	ATA_ID_SATA_CAPABILITY_2 = 77,
+	ATA_ID_FEATURE_SUPP = 78,
+	ATA_ID_MAJOR_VER = 80,
+	ATA_ID_COMMAND_SET_1 = 82,
+	ATA_ID_COMMAND_SET_2 = 83,
+	ATA_ID_CFSSE = 84,
+	ATA_ID_CFS_ENABLE_1 = 85,
+	ATA_ID_CFS_ENABLE_2 = 86,
+	ATA_ID_CSF_DEFAULT = 87,
+	ATA_ID_UDMA_MODES = 88,
+	ATA_ID_HW_CONFIG = 93,
+	ATA_ID_SPG = 98,
+	ATA_ID_LBA_CAPACITY_2 = 100,
+	ATA_ID_SECTOR_SIZE = 106,
+	ATA_ID_WWN = 108,
+	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+	ATA_ID_COMMAND_SET_3 = 119,
+	ATA_ID_COMMAND_SET_4 = 120,
+	ATA_ID_LAST_LUN = 126,
+	ATA_ID_DLF = 128,
+	ATA_ID_CSFO = 129,
+	ATA_ID_CFA_POWER = 160,
+	ATA_ID_CFA_KEY_MGMT = 162,
+	ATA_ID_CFA_MODES = 163,
+	ATA_ID_DATA_SET_MGMT = 169,
+	ATA_ID_SCT_CMD_XPORT = 206,
+	ATA_ID_ROT_SPEED = 217,
+	ATA_ID_PIO4 = 2,
+	ATA_ID_SERNO_LEN = 20,
+	ATA_ID_FW_REV_LEN = 8,
+	ATA_ID_PROD_LEN = 40,
+	ATA_ID_WWN_LEN = 8,
+	ATA_PCI_CTL_OFS = 2,
+	ATA_PIO0 = 1,
+	ATA_PIO1 = 3,
+	ATA_PIO2 = 7,
+	ATA_PIO3 = 15,
+	ATA_PIO4 = 31,
+	ATA_PIO5 = 63,
+	ATA_PIO6 = 127,
+	ATA_PIO4_ONLY = 16,
+	ATA_SWDMA0 = 1,
+	ATA_SWDMA1 = 3,
+	ATA_SWDMA2 = 7,
+	ATA_SWDMA2_ONLY = 4,
+	ATA_MWDMA0 = 1,
+	ATA_MWDMA1 = 3,
+	ATA_MWDMA2 = 7,
+	ATA_MWDMA3 = 15,
+	ATA_MWDMA4 = 31,
+	ATA_MWDMA12_ONLY = 6,
+	ATA_MWDMA2_ONLY = 4,
+	ATA_UDMA0 = 1,
+	ATA_UDMA1 = 3,
+	ATA_UDMA2 = 7,
+	ATA_UDMA3 = 15,
+	ATA_UDMA4 = 31,
+	ATA_UDMA5 = 63,
+	ATA_UDMA6 = 127,
+	ATA_UDMA7 = 255,
+	ATA_UDMA24_ONLY = 20,
+	ATA_UDMA_MASK_40C = 7,
+	ATA_PRD_SZ = 8,
+	ATA_PRD_TBL_SZ = 2048,
+	ATA_PRD_EOT = -2147483648,
+	ATA_DMA_TABLE_OFS = 4,
+	ATA_DMA_STATUS = 2,
+	ATA_DMA_CMD = 0,
+	ATA_DMA_WR = 8,
+	ATA_DMA_START = 1,
+	ATA_DMA_INTR = 4,
+	ATA_DMA_ERR = 2,
+	ATA_DMA_ACTIVE = 1,
+	ATA_HOB = 128,
+	ATA_NIEN = 2,
+	ATA_LBA = 64,
+	ATA_DEV1 = 16,
+	ATA_DEVICE_OBS = 160,
+	ATA_DEVCTL_OBS = 8,
+	ATA_BUSY = 128,
+	ATA_DRDY = 64,
+	ATA_DF = 32,
+	ATA_DSC = 16,
+	ATA_DRQ = 8,
+	ATA_CORR = 4,
+	ATA_SENSE = 2,
+	ATA_ERR = 1,
+	ATA_SRST = 4,
+	ATA_ICRC = 128,
+	ATA_BBK = 128,
+	ATA_UNC = 64,
+	ATA_MC = 32,
+	ATA_IDNF = 16,
+	ATA_MCR = 8,
+	ATA_ABORTED = 4,
+	ATA_TRK0NF = 2,
+	ATA_AMNF = 1,
+	ATAPI_LFS = 240,
+	ATAPI_EOM = 2,
+	ATAPI_ILI = 1,
+	ATAPI_IO = 2,
+	ATAPI_COD = 1,
+	ATA_REG_DATA = 0,
+	ATA_REG_ERR = 1,
+	ATA_REG_NSECT = 2,
+	ATA_REG_LBAL = 3,
+	ATA_REG_LBAM = 4,
+	ATA_REG_LBAH = 5,
+	ATA_REG_DEVICE = 6,
+	ATA_REG_STATUS = 7,
+	ATA_REG_FEATURE = 1,
+	ATA_REG_CMD = 7,
+	ATA_REG_BYTEL = 4,
+	ATA_REG_BYTEH = 5,
+	ATA_REG_DEVSEL = 6,
+	ATA_REG_IRQ = 2,
+	ATA_CMD_DEV_RESET = 8,
+	ATA_CMD_CHK_POWER = 229,
+	ATA_CMD_STANDBY = 226,
+	ATA_CMD_IDLE = 227,
+	ATA_CMD_EDD = 144,
+	ATA_CMD_DOWNLOAD_MICRO = 146,
+	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+	ATA_CMD_NOP = 0,
+	ATA_CMD_FLUSH = 231,
+	ATA_CMD_FLUSH_EXT = 234,
+	ATA_CMD_ID_ATA = 236,
+	ATA_CMD_ID_ATAPI = 161,
+	ATA_CMD_SERVICE = 162,
+	ATA_CMD_READ = 200,
+	ATA_CMD_READ_EXT = 37,
+	ATA_CMD_READ_QUEUED = 38,
+	ATA_CMD_READ_STREAM_EXT = 43,
+	ATA_CMD_READ_STREAM_DMA_EXT = 42,
+	ATA_CMD_WRITE = 202,
+	ATA_CMD_WRITE_EXT = 53,
+	ATA_CMD_WRITE_QUEUED = 54,
+	ATA_CMD_WRITE_STREAM_EXT = 59,
+	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+	ATA_CMD_WRITE_FUA_EXT = 61,
+	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+	ATA_CMD_FPDMA_READ = 96,
+	ATA_CMD_FPDMA_WRITE = 97,
+	ATA_CMD_NCQ_NON_DATA = 99,
+	ATA_CMD_FPDMA_SEND = 100,
+	ATA_CMD_FPDMA_RECV = 101,
+	ATA_CMD_PIO_READ = 32,
+	ATA_CMD_PIO_READ_EXT = 36,
+	ATA_CMD_PIO_WRITE = 48,
+	ATA_CMD_PIO_WRITE_EXT = 52,
+	ATA_CMD_READ_MULTI = 196,
+	ATA_CMD_READ_MULTI_EXT = 41,
+	ATA_CMD_WRITE_MULTI = 197,
+	ATA_CMD_WRITE_MULTI_EXT = 57,
+	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+	ATA_CMD_SET_FEATURES = 239,
+	ATA_CMD_SET_MULTI = 198,
+	ATA_CMD_PACKET = 160,
+	ATA_CMD_VERIFY = 64,
+	ATA_CMD_VERIFY_EXT = 66,
+	ATA_CMD_WRITE_UNCORR_EXT = 69,
+	ATA_CMD_STANDBYNOW1 = 224,
+	ATA_CMD_IDLEIMMEDIATE = 225,
+	ATA_CMD_SLEEP = 230,
+	ATA_CMD_INIT_DEV_PARAMS = 145,
+	ATA_CMD_READ_NATIVE_MAX = 248,
+	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+	ATA_CMD_SET_MAX = 249,
+	ATA_CMD_SET_MAX_EXT = 55,
+	ATA_CMD_READ_LOG_EXT = 47,
+	ATA_CMD_WRITE_LOG_EXT = 63,
+	ATA_CMD_READ_LOG_DMA_EXT = 71,
+	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+	ATA_CMD_TRUSTED_NONDATA = 91,
+	ATA_CMD_TRUSTED_RCV = 92,
+	ATA_CMD_TRUSTED_RCV_DMA = 93,
+	ATA_CMD_TRUSTED_SND = 94,
+	ATA_CMD_TRUSTED_SND_DMA = 95,
+	ATA_CMD_PMP_READ = 228,
+	ATA_CMD_PMP_READ_DMA = 233,
+	ATA_CMD_PMP_WRITE = 232,
+	ATA_CMD_PMP_WRITE_DMA = 235,
+	ATA_CMD_CONF_OVERLAY = 177,
+	ATA_CMD_SEC_SET_PASS = 241,
+	ATA_CMD_SEC_UNLOCK = 242,
+	ATA_CMD_SEC_ERASE_PREP = 243,
+	ATA_CMD_SEC_ERASE_UNIT = 244,
+	ATA_CMD_SEC_FREEZE_LOCK = 245,
+	ATA_CMD_SEC_DISABLE_PASS = 246,
+	ATA_CMD_CONFIG_STREAM = 81,
+	ATA_CMD_SMART = 176,
+	ATA_CMD_MEDIA_LOCK = 222,
+	ATA_CMD_MEDIA_UNLOCK = 223,
+	ATA_CMD_DSM = 6,
+	ATA_CMD_CHK_MED_CRD_TYP = 209,
+	ATA_CMD_CFA_REQ_EXT_ERR = 3,
+	ATA_CMD_CFA_WRITE_NE = 56,
+	ATA_CMD_CFA_TRANS_SECT = 135,
+	ATA_CMD_CFA_ERASE = 192,
+	ATA_CMD_CFA_WRITE_MULT_NE = 205,
+	ATA_CMD_REQ_SENSE_DATA = 11,
+	ATA_CMD_SANITIZE_DEVICE = 180,
+	ATA_CMD_ZAC_MGMT_IN = 74,
+	ATA_CMD_ZAC_MGMT_OUT = 159,
+	ATA_CMD_RESTORE = 16,
+	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+	ATA_LOG_DIRECTORY = 0,
+	ATA_LOG_SATA_NCQ = 16,
+	ATA_LOG_NCQ_NON_DATA = 18,
+	ATA_LOG_NCQ_SEND_RECV = 19,
+	ATA_LOG_IDENTIFY_DEVICE = 48,
+	ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+	ATA_LOG_SECURITY = 6,
+	ATA_LOG_SATA_SETTINGS = 8,
+	ATA_LOG_ZONED_INFORMATION = 9,
+	ATA_LOG_DEVSLP_OFFSET = 48,
+	ATA_LOG_DEVSLP_SIZE = 8,
+	ATA_LOG_DEVSLP_MDAT = 0,
+	ATA_LOG_DEVSLP_MDAT_MASK = 31,
+	ATA_LOG_DEVSLP_DETO = 1,
+	ATA_LOG_DEVSLP_VALID = 7,
+	ATA_LOG_DEVSLP_VALID_MASK = 128,
+	ATA_LOG_NCQ_PRIO_OFFSET = 9,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+	ATA_CMD_READ_LONG = 34,
+	ATA_CMD_READ_LONG_ONCE = 35,
+	ATA_CMD_WRITE_LONG = 50,
+	ATA_CMD_WRITE_LONG_ONCE = 51,
+	SETFEATURES_XFER = 3,
+	XFER_UDMA_7 = 71,
+	XFER_UDMA_6 = 70,
+	XFER_UDMA_5 = 69,
+	XFER_UDMA_4 = 68,
+	XFER_UDMA_3 = 67,
+	XFER_UDMA_2 = 66,
+	XFER_UDMA_1 = 65,
+	XFER_UDMA_0 = 64,
+	XFER_MW_DMA_4 = 36,
+	XFER_MW_DMA_3 = 35,
+	XFER_MW_DMA_2 = 34,
+	XFER_MW_DMA_1 = 33,
+	XFER_MW_DMA_0 = 32,
+	XFER_SW_DMA_2 = 18,
+	XFER_SW_DMA_1 = 17,
+	XFER_SW_DMA_0 = 16,
+	XFER_PIO_6 = 14,
+	XFER_PIO_5 = 13,
+	XFER_PIO_4 = 12,
+	XFER_PIO_3 = 11,
+	XFER_PIO_2 = 10,
+	XFER_PIO_1 = 9,
+	XFER_PIO_0 = 8,
+	XFER_PIO_SLOW = 0,
+	SETFEATURES_WC_ON = 2,
+	SETFEATURES_WC_OFF = 130,
+	SETFEATURES_RA_ON = 170,
+	SETFEATURES_RA_OFF = 85,
+	SETFEATURES_AAM_ON = 66,
+	SETFEATURES_AAM_OFF = 194,
+	SETFEATURES_SPINUP = 7,
+	SETFEATURES_SPINUP_TIMEOUT = 30000,
+	SETFEATURES_SATA_ENABLE = 16,
+	SETFEATURES_SATA_DISABLE = 144,
+	SATA_FPDMA_OFFSET = 1,
+	SATA_FPDMA_AA = 2,
+	SATA_DIPM = 3,
+	SATA_FPDMA_IN_ORDER = 4,
+	SATA_AN = 5,
+	SATA_SSP = 6,
+	SATA_DEVSLP = 9,
+	SETFEATURE_SENSE_DATA = 195,
+	ATA_SET_MAX_ADDR = 0,
+	ATA_SET_MAX_PASSWD = 1,
+	ATA_SET_MAX_LOCK = 2,
+	ATA_SET_MAX_UNLOCK = 3,
+	ATA_SET_MAX_FREEZE_LOCK = 4,
+	ATA_SET_MAX_PASSWD_DMA = 5,
+	ATA_SET_MAX_UNLOCK_DMA = 6,
+	ATA_DCO_RESTORE = 192,
+	ATA_DCO_FREEZE_LOCK = 193,
+	ATA_DCO_IDENTIFY = 194,
+	ATA_DCO_SET = 195,
+	ATA_SMART_ENABLE = 216,
+	ATA_SMART_READ_VALUES = 208,
+	ATA_SMART_READ_THRESHOLDS = 209,
+	ATA_DSM_TRIM = 1,
+	ATA_SMART_LBAM_PASS = 79,
+	ATA_SMART_LBAH_PASS = 194,
+	ATAPI_PKT_DMA = 1,
+	ATAPI_DMADIR = 4,
+	ATAPI_CDB_LEN = 16,
+	SATA_PMP_MAX_PORTS = 15,
+	SATA_PMP_CTRL_PORT = 15,
+	SATA_PMP_GSCR_DWORDS = 128,
+	SATA_PMP_GSCR_PROD_ID = 0,
+	SATA_PMP_GSCR_REV = 1,
+	SATA_PMP_GSCR_PORT_INFO = 2,
+	SATA_PMP_GSCR_ERROR = 32,
+	SATA_PMP_GSCR_ERROR_EN = 33,
+	SATA_PMP_GSCR_FEAT = 64,
+	SATA_PMP_GSCR_FEAT_EN = 96,
+	SATA_PMP_PSCR_STATUS = 0,
+	SATA_PMP_PSCR_ERROR = 1,
+	SATA_PMP_PSCR_CONTROL = 2,
+	SATA_PMP_FEAT_BIST = 1,
+	SATA_PMP_FEAT_PMREQ = 2,
+	SATA_PMP_FEAT_DYNSSC = 4,
+	SATA_PMP_FEAT_NOTIFY = 8,
+	ATA_CBL_NONE = 0,
+	ATA_CBL_PATA40 = 1,
+	ATA_CBL_PATA80 = 2,
+	ATA_CBL_PATA40_SHORT = 3,
+	ATA_CBL_PATA_UNK = 4,
+	ATA_CBL_PATA_IGN = 5,
+	ATA_CBL_SATA = 6,
+	SCR_STATUS = 0,
+	SCR_ERROR = 1,
+	SCR_CONTROL = 2,
+	SCR_ACTIVE = 3,
+	SCR_NOTIFICATION = 4,
+	SERR_DATA_RECOVERED = 1,
+	SERR_COMM_RECOVERED = 2,
+	SERR_DATA = 256,
+	SERR_PERSISTENT = 512,
+	SERR_PROTOCOL = 1024,
+	SERR_INTERNAL = 2048,
+	SERR_PHYRDY_CHG = 65536,
+	SERR_PHY_INT_ERR = 131072,
+	SERR_COMM_WAKE = 262144,
+	SERR_10B_8B_ERR = 524288,
+	SERR_DISPARITY = 1048576,
+	SERR_CRC = 2097152,
+	SERR_HANDSHAKE = 4194304,
+	SERR_LINK_SEQ_ERR = 8388608,
+	SERR_TRANS_ST_ERROR = 16777216,
+	SERR_UNRECOG_FIS = 33554432,
+	SERR_DEV_XCHG = 67108864,
+};
+
+enum ata_prot_flags {
+	ATA_PROT_FLAG_PIO = 1,
+	ATA_PROT_FLAG_DMA = 2,
+	ATA_PROT_FLAG_NCQ = 4,
+	ATA_PROT_FLAG_ATAPI = 8,
+	ATA_PROT_UNKNOWN = 255,
+	ATA_PROT_NODATA = 0,
+	ATA_PROT_PIO = 1,
+	ATA_PROT_DMA = 2,
+	ATA_PROT_NCQ_NODATA = 4,
+	ATA_PROT_NCQ = 6,
+	ATAPI_PROT_NODATA = 8,
+	ATAPI_PROT_PIO = 9,
+	ATAPI_PROT_DMA = 10,
+};
+
+struct ata_bmdma_prd {
+	__le32 addr;
+	__le32 flags_len;
+};
+
+struct cdrom_msf0 {
+	__u8 minute;
+	__u8 second;
+	__u8 frame;
+};
+
+union cdrom_addr {
+	struct cdrom_msf0 msf;
+	int lba;
+};
+
+struct cdrom_multisession {
+	union cdrom_addr addr;
+	__u8 xa_flag;
+	__u8 addr_format;
+};
+
+struct cdrom_mcn {
+	__u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct scsi_sense_hdr *sshdr;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	void *reserved[1];
+};
+
+struct cdrom_device_ops {
+	int (*open)(struct cdrom_device_info *, int);
+	void (*release)(struct cdrom_device_info *);
+	int (*drive_status)(struct cdrom_device_info *, int);
+	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+	int (*tray_move)(struct cdrom_device_info *, int);
+	int (*lock_door)(struct cdrom_device_info *, int);
+	int (*select_speed)(struct cdrom_device_info *, int);
+	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+	int (*reset)(struct cdrom_device_info *);
+	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+	int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+	const int capability;
+};
+
+typedef u64 async_cookie_t;
+
+enum {
+	LIBATA_MAX_PRD = 128,
+	LIBATA_DUMB_MAX_PRD = 64,
+	ATA_DEF_QUEUE = 1,
+	ATA_MAX_QUEUE = 32,
+	ATA_TAG_INTERNAL = 32,
+	ATA_SHORT_PAUSE = 16,
+	ATAPI_MAX_DRAIN = 16384,
+	ATA_ALL_DEVICES = 3,
+	ATA_SHT_EMULATED = 1,
+	ATA_SHT_THIS_ID = -1,
+	ATA_TFLAG_LBA48 = 1,
+	ATA_TFLAG_ISADDR = 2,
+	ATA_TFLAG_DEVICE = 4,
+	ATA_TFLAG_WRITE = 8,
+	ATA_TFLAG_LBA = 16,
+	ATA_TFLAG_FUA = 32,
+	ATA_TFLAG_POLLING = 64,
+	ATA_DFLAG_LBA = 1,
+	ATA_DFLAG_LBA48 = 2,
+	ATA_DFLAG_CDB_INTR = 4,
+	ATA_DFLAG_NCQ = 8,
+	ATA_DFLAG_FLUSH_EXT = 16,
+	ATA_DFLAG_ACPI_PENDING = 32,
+	ATA_DFLAG_ACPI_FAILED = 64,
+	ATA_DFLAG_AN = 128,
+	ATA_DFLAG_TRUSTED = 256,
+	ATA_DFLAG_DMADIR = 1024,
+	ATA_DFLAG_CFG_MASK = 4095,
+	ATA_DFLAG_PIO = 4096,
+	ATA_DFLAG_NCQ_OFF = 8192,
+	ATA_DFLAG_SLEEPING = 32768,
+	ATA_DFLAG_DUBIOUS_XFER = 65536,
+	ATA_DFLAG_NO_UNLOAD = 131072,
+	ATA_DFLAG_UNLOCK_HPA = 262144,
+	ATA_DFLAG_NCQ_SEND_RECV = 524288,
+	ATA_DFLAG_NCQ_PRIO = 1048576,
+	ATA_DFLAG_NCQ_PRIO_ENABLE = 2097152,
+	ATA_DFLAG_INIT_MASK = 16777215,
+	ATA_DFLAG_DETACH = 16777216,
+	ATA_DFLAG_DETACHED = 33554432,
+	ATA_DFLAG_DA = 67108864,
+	ATA_DFLAG_DEVSLP = 134217728,
+	ATA_DFLAG_ACPI_DISABLED = 268435456,
+	ATA_DFLAG_D_SENSE = 536870912,
+	ATA_DFLAG_ZAC = 1073741824,
+	ATA_DFLAG_FEATURES_MASK = 202899712,
+	ATA_DEV_UNKNOWN = 0,
+	ATA_DEV_ATA = 1,
+	ATA_DEV_ATA_UNSUP = 2,
+	ATA_DEV_ATAPI = 3,
+	ATA_DEV_ATAPI_UNSUP = 4,
+	ATA_DEV_PMP = 5,
+	ATA_DEV_PMP_UNSUP = 6,
+	ATA_DEV_SEMB = 7,
+	ATA_DEV_SEMB_UNSUP = 8,
+	ATA_DEV_ZAC = 9,
+	ATA_DEV_ZAC_UNSUP = 10,
+	ATA_DEV_NONE = 11,
+	ATA_LFLAG_NO_HRST = 2,
+	ATA_LFLAG_NO_SRST = 4,
+	ATA_LFLAG_ASSUME_ATA = 8,
+	ATA_LFLAG_ASSUME_SEMB = 16,
+	ATA_LFLAG_ASSUME_CLASS = 24,
+	ATA_LFLAG_NO_RETRY = 32,
+	ATA_LFLAG_DISABLED = 64,
+	ATA_LFLAG_SW_ACTIVITY = 128,
+	ATA_LFLAG_NO_LPM = 256,
+	ATA_LFLAG_RST_ONCE = 512,
+	ATA_LFLAG_CHANGED = 1024,
+	ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+	ATA_FLAG_SLAVE_POSS = 1,
+	ATA_FLAG_SATA = 2,
+	ATA_FLAG_NO_LPM = 4,
+	ATA_FLAG_NO_LOG_PAGE = 32,
+	ATA_FLAG_NO_ATAPI = 64,
+	ATA_FLAG_PIO_DMA = 128,
+	ATA_FLAG_PIO_LBA48 = 256,
+	ATA_FLAG_PIO_POLLING = 512,
+	ATA_FLAG_NCQ = 1024,
+	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+	ATA_FLAG_DEBUGMSG = 8192,
+	ATA_FLAG_FPDMA_AA = 16384,
+	ATA_FLAG_IGN_SIMPLEX = 32768,
+	ATA_FLAG_NO_IORDY = 65536,
+	ATA_FLAG_ACPI_SATA = 131072,
+	ATA_FLAG_AN = 262144,
+	ATA_FLAG_PMP = 524288,
+	ATA_FLAG_FPDMA_AUX = 1048576,
+	ATA_FLAG_EM = 2097152,
+	ATA_FLAG_SW_ACTIVITY = 4194304,
+	ATA_FLAG_NO_DIPM = 8388608,
+	ATA_FLAG_SAS_HOST = 16777216,
+	ATA_PFLAG_EH_PENDING = 1,
+	ATA_PFLAG_EH_IN_PROGRESS = 2,
+	ATA_PFLAG_FROZEN = 4,
+	ATA_PFLAG_RECOVERED = 8,
+	ATA_PFLAG_LOADING = 16,
+	ATA_PFLAG_SCSI_HOTPLUG = 64,
+	ATA_PFLAG_INITIALIZING = 128,
+	ATA_PFLAG_RESETTING = 256,
+	ATA_PFLAG_UNLOADING = 512,
+	ATA_PFLAG_UNLOADED = 1024,
+	ATA_PFLAG_SUSPENDED = 131072,
+	ATA_PFLAG_PM_PENDING = 262144,
+	ATA_PFLAG_INIT_GTM_VALID = 524288,
+	ATA_PFLAG_PIO32 = 1048576,
+	ATA_PFLAG_PIO32CHANGE = 2097152,
+	ATA_PFLAG_EXTERNAL = 4194304,
+	ATA_QCFLAG_ACTIVE = 1,
+	ATA_QCFLAG_DMAMAP = 2,
+	ATA_QCFLAG_IO = 8,
+	ATA_QCFLAG_RESULT_TF = 16,
+	ATA_QCFLAG_CLEAR_EXCL = 32,
+	ATA_QCFLAG_QUIET = 64,
+	ATA_QCFLAG_RETRY = 128,
+	ATA_QCFLAG_FAILED = 65536,
+	ATA_QCFLAG_SENSE_VALID = 131072,
+	ATA_QCFLAG_EH_SCHEDULED = 262144,
+	ATA_HOST_SIMPLEX = 1,
+	ATA_HOST_STARTED = 2,
+	ATA_HOST_PARALLEL_SCAN = 4,
+	ATA_HOST_IGNORE_ATA = 8,
+	ATA_TMOUT_BOOT = 30000,
+	ATA_TMOUT_BOOT_QUICK = 7000,
+	ATA_TMOUT_INTERNAL_QUICK = 5000,
+	ATA_TMOUT_MAX_PARK = 30000,
+	ATA_TMOUT_FF_WAIT_LONG = 2000,
+	ATA_TMOUT_FF_WAIT = 800,
+	ATA_WAIT_AFTER_RESET = 150,
+	ATA_TMOUT_PMP_SRST_WAIT = 5000,
+	ATA_TMOUT_SPURIOUS_PHY = 10000,
+	BUS_UNKNOWN = 0,
+	BUS_DMA = 1,
+	BUS_IDLE = 2,
+	BUS_NOINTR = 3,
+	BUS_NODATA = 4,
+	BUS_TIMER = 5,
+	BUS_PIO = 6,
+	BUS_EDD = 7,
+	BUS_IDENTIFY = 8,
+	BUS_PACKET = 9,
+	PORT_UNKNOWN = 0,
+	PORT_ENABLED = 1,
+	PORT_DISABLED = 2,
+	ATA_NR_PIO_MODES = 7,
+	ATA_NR_MWDMA_MODES = 5,
+	ATA_NR_UDMA_MODES = 8,
+	ATA_SHIFT_PIO = 0,
+	ATA_SHIFT_MWDMA = 7,
+	ATA_SHIFT_UDMA = 12,
+	ATA_SHIFT_PRIO = 6,
+	ATA_PRIO_HIGH = 2,
+	ATA_DMA_PAD_SZ = 4,
+	ATA_ERING_SIZE = 32,
+	ATA_DEFER_LINK = 1,
+	ATA_DEFER_PORT = 2,
+	ATA_EH_DESC_LEN = 80,
+	ATA_EH_REVALIDATE = 1,
+	ATA_EH_SOFTRESET = 2,
+	ATA_EH_HARDRESET = 4,
+	ATA_EH_RESET = 6,
+	ATA_EH_ENABLE_LINK = 8,
+	ATA_EH_PARK = 32,
+	ATA_EH_PERDEV_MASK = 33,
+	ATA_EH_ALL_ACTIONS = 15,
+	ATA_EHI_HOTPLUGGED = 1,
+	ATA_EHI_NO_AUTOPSY = 4,
+	ATA_EHI_QUIET = 8,
+	ATA_EHI_NO_RECOVERY = 16,
+	ATA_EHI_DID_SOFTRESET = 65536,
+	ATA_EHI_DID_HARDRESET = 131072,
+	ATA_EHI_PRINTINFO = 262144,
+	ATA_EHI_SETMODE = 524288,
+	ATA_EHI_POST_SETMODE = 1048576,
+	ATA_EHI_DID_RESET = 196608,
+	ATA_EHI_TO_SLAVE_MASK = 12,
+	ATA_EH_MAX_TRIES = 5,
+	ATA_LINK_RESUME_TRIES = 5,
+	ATA_PROBE_MAX_TRIES = 3,
+	ATA_EH_DEV_TRIES = 3,
+	ATA_EH_PMP_TRIES = 5,
+	ATA_EH_PMP_LINK_TRIES = 3,
+	SATA_PMP_RW_TIMEOUT = 3000,
+	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
+	ATA_HORKAGE_DIAGNOSTIC = 1,
+	ATA_HORKAGE_NODMA = 2,
+	ATA_HORKAGE_NONCQ = 4,
+	ATA_HORKAGE_MAX_SEC_128 = 8,
+	ATA_HORKAGE_BROKEN_HPA = 16,
+	ATA_HORKAGE_DISABLE = 32,
+	ATA_HORKAGE_HPA_SIZE = 64,
+	ATA_HORKAGE_IVB = 256,
+	ATA_HORKAGE_STUCK_ERR = 512,
+	ATA_HORKAGE_BRIDGE_OK = 1024,
+	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
+	ATA_HORKAGE_FIRMWARE_WARN = 4096,
+	ATA_HORKAGE_1_5_GBPS = 8192,
+	ATA_HORKAGE_NOSETXFER = 16384,
+	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
+	ATA_HORKAGE_DUMP_ID = 65536,
+	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
+	ATA_HORKAGE_ATAPI_DMADIR = 262144,
+	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
+	ATA_HORKAGE_NOLPM = 1048576,
+	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
+	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
+	ATA_HORKAGE_NO_DMA_LOG = 8388608,
+	ATA_HORKAGE_NOTRIM = 16777216,
+	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
+	ATA_HORKAGE_MAX_TRIM_128M = 67108864,
+	ATA_HORKAGE_NO_NCQ_ON_ATI = 134217728,
+	ATA_HORKAGE_NO_ID_DEV_LOG = 268435456,
+	ATA_HORKAGE_NO_LOG_DIR = 536870912,
+	ATA_DMA_MASK_ATA = 1,
+	ATA_DMA_MASK_ATAPI = 2,
+	ATA_DMA_MASK_CFA = 4,
+	ATAPI_READ = 0,
+	ATAPI_WRITE = 1,
+	ATAPI_READ_CD = 2,
+	ATAPI_PASS_THRU = 3,
+	ATAPI_MISC = 4,
+	ATA_TIMING_SETUP = 1,
+	ATA_TIMING_ACT8B = 2,
+	ATA_TIMING_REC8B = 4,
+	ATA_TIMING_CYC8B = 8,
+	ATA_TIMING_8BIT = 14,
+	ATA_TIMING_ACTIVE = 16,
+	ATA_TIMING_RECOVER = 32,
+	ATA_TIMING_DMACK_HOLD = 64,
+	ATA_TIMING_CYCLE = 128,
+	ATA_TIMING_UDMA = 256,
+	ATA_TIMING_ALL = 511,
+	ATA_ACPI_FILTER_SETXFER = 1,
+	ATA_ACPI_FILTER_LOCK = 2,
+	ATA_ACPI_FILTER_DIPM = 4,
+	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+	ATA_ACPI_FILTER_FPDMA_AA = 16,
+	ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum ata_completion_errors {
+	AC_ERR_OK = 0,
+	AC_ERR_DEV = 1,
+	AC_ERR_HSM = 2,
+	AC_ERR_TIMEOUT = 4,
+	AC_ERR_MEDIA = 8,
+	AC_ERR_ATA_BUS = 16,
+	AC_ERR_HOST_BUS = 32,
+	AC_ERR_SYSTEM = 64,
+	AC_ERR_INVALID = 128,
+	AC_ERR_OTHER = 256,
+	AC_ERR_NODEV_HINT = 512,
+	AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+	ATA_LPM_UNKNOWN = 0,
+	ATA_LPM_MAX_POWER = 1,
+	ATA_LPM_MED_POWER = 2,
+	ATA_LPM_MED_POWER_WITH_DIPM = 3,
+	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+	ATA_LPM_MIN_POWER = 5,
+};
+
+enum ata_lpm_hints {
+	ATA_LPM_EMPTY = 1,
+	ATA_LPM_HIPM = 2,
+	ATA_LPM_WAKE_ONLY = 4,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
+	long unsigned int flags;
+	u8 protocol;
+	u8 ctl;
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+	union {
+		u8 error;
+		u8 feature;
+	};
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	union {
+		u8 status;
+		u8 command;
+	};
+	u32 auxiliary;
+};
+
+struct ata_port;
+
+struct ata_device;
+
+struct ata_queued_cmd {
+	struct ata_port *ap;
+	struct ata_device *dev;
+	struct scsi_cmnd *scsicmd;
+	void (*scsidone)(struct scsi_cmnd *);
+	struct ata_taskfile tf;
+	u8 cdb[16];
+	long unsigned int flags;
+	unsigned int tag;
+	unsigned int hw_tag;
+	unsigned int n_elem;
+	unsigned int orig_n_elem;
+	int dma_dir;
+	unsigned int sect_size;
+	unsigned int nbytes;
+	unsigned int extrabytes;
+	unsigned int curbytes;
+	struct scatterlist sgent;
+	struct scatterlist *sg;
+	struct scatterlist *cursg;
+	unsigned int cursg_ofs;
+	unsigned int err_mask;
+	struct ata_taskfile result_tf;
+	ata_qc_cb_t complete_fn;
+	void *private_data;
+	void *lldd_task;
+};
+
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+	struct ata_device *dev;
+	u32 serror;
+	unsigned int err_mask;
+	unsigned int action;
+	unsigned int dev_action[2];
+	unsigned int flags;
+	unsigned int probe_mask;
+	char desc[80];
+	int desc_len;
+};
+
+struct ata_eh_context {
+	struct ata_eh_info i;
+	int tries[2];
+	int cmd_timeout_idx[14];
+	unsigned int classes[2];
+	unsigned int did_probe_mask;
+	unsigned int unloaded_mask;
+	unsigned int saved_ncq_enabled;
+	u8 saved_xfer_mode[2];
+	long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+	unsigned int eflags;
+	unsigned int err_mask;
+	u64 timestamp;
+};
+
+struct ata_ering {
+	int cursor;
+	struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_device {
+	struct ata_link *link;
+	unsigned int devno;
+	unsigned int horkage;
+	long unsigned int flags;
+	struct scsi_device *sdev;
+	void *private_data;
+	struct device tdev;
+	u64 n_sectors;
+	u64 n_native_sectors;
+	unsigned int class;
+	long unsigned int unpark_deadline;
+	u8 pio_mode;
+	u8 dma_mode;
+	u8 xfer_mode;
+	unsigned int xfer_shift;
+	unsigned int multi_count;
+	unsigned int max_sectors;
+	unsigned int cdb_len;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	u16 cylinders;
+	u16 heads;
+	u16 sectors;
+	union {
+		u16 id[256];
+		u32 gscr[128];
+	};
+	u8 devslp_timing[8];
+	u8 ncq_send_recv_cmds[20];
+	u8 ncq_non_data_cmds[64];
+	u32 zac_zoned_cap;
+	u32 zac_zones_optimal_open;
+	u32 zac_zones_optimal_nonseq;
+	u32 zac_zones_max_open;
+	struct ata_cpr_log *cpr_log;
+	int spdn_cnt;
+	struct ata_ering ering;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ata_link {
+	struct ata_port *ap;
+	int pmp;
+	struct device tdev;
+	unsigned int active_tag;
+	u32 sactive;
+	unsigned int flags;
+	u32 saved_scontrol;
+	unsigned int hw_sata_spd_limit;
+	unsigned int sata_spd_limit;
+	unsigned int sata_spd;
+	enum ata_lpm_policy lpm_policy;
+	struct ata_eh_info eh_info;
+	struct ata_eh_context eh_context;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_device device[2];
+	long unsigned int last_lpm_change;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+	OFF = 0,
+	BLINK_ON = 1,
+	BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+	void *cmd_addr;
+	void *data_addr;
+	void *error_addr;
+	void *feature_addr;
+	void *nsect_addr;
+	void *lbal_addr;
+	void *lbam_addr;
+	void *lbah_addr;
+	void *device_addr;
+	void *status_addr;
+	void *command_addr;
+	void *altstatus_addr;
+	void *ctl_addr;
+	void *bmdma_addr;
+	void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+	spinlock_t lock;
+	struct device *dev;
+	void * const *iomap;
+	unsigned int n_ports;
+	unsigned int n_tags;
+	void *private_data;
+	struct ata_port_operations *ops;
+	long unsigned int flags;
+	struct kref kref;
+	struct mutex eh_mutex;
+	struct task_struct *eh_owner;
+	struct ata_port *simplex_claimed;
+	struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+	int (*qc_defer)(struct ata_queued_cmd *);
+	int (*check_atapi_dma)(struct ata_queued_cmd *);
+	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+	unsigned int (*qc_issue)(struct ata_queued_cmd *);
+	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
+	int (*cable_detect)(struct ata_port *);
+	unsigned int (*mode_filter)(struct ata_device *, unsigned int);
+	void (*set_piomode)(struct ata_port *, struct ata_device *);
+	void (*set_dmamode)(struct ata_port *, struct ata_device *);
+	int (*set_mode)(struct ata_link *, struct ata_device **);
+	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+	void (*dev_config)(struct ata_device *);
+	void (*freeze)(struct ata_port *);
+	void (*thaw)(struct ata_port *);
+	ata_prereset_fn_t prereset;
+	ata_reset_fn_t softreset;
+	ata_reset_fn_t hardreset;
+	ata_postreset_fn_t postreset;
+	ata_prereset_fn_t pmp_prereset;
+	ata_reset_fn_t pmp_softreset;
+	ata_reset_fn_t pmp_hardreset;
+	ata_postreset_fn_t pmp_postreset;
+	void (*error_handler)(struct ata_port *);
+	void (*lost_interrupt)(struct ata_port *);
+	void (*post_internal_cmd)(struct ata_queued_cmd *);
+	void (*sched_eh)(struct ata_port *);
+	void (*end_eh)(struct ata_port *);
+	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+	int (*scr_write)(struct ata_link *, unsigned int, u32);
+	void (*pmp_attach)(struct ata_port *);
+	void (*pmp_detach)(struct ata_port *);
+	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+	int (*port_suspend)(struct ata_port *, pm_message_t);
+	int (*port_resume)(struct ata_port *);
+	int (*port_start)(struct ata_port *);
+	void (*port_stop)(struct ata_port *);
+	void (*host_stop)(struct ata_host *);
+	void (*sff_dev_select)(struct ata_port *, unsigned int);
+	void (*sff_set_devctl)(struct ata_port *, u8);
+	u8 (*sff_check_status)(struct ata_port *);
+	u8 (*sff_check_altstatus)(struct ata_port *);
+	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+	void (*sff_irq_on)(struct ata_port *);
+	bool (*sff_irq_check)(struct ata_port *);
+	void (*sff_irq_clear)(struct ata_port *);
+	void (*sff_drain_fifo)(struct ata_queued_cmd *);
+	void (*bmdma_setup)(struct ata_queued_cmd *);
+	void (*bmdma_start)(struct ata_queued_cmd *);
+	void (*bmdma_stop)(struct ata_queued_cmd *);
+	u8 (*bmdma_status)(struct ata_port *);
+	ssize_t (*em_show)(struct ata_port *, char *);
+	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+	ssize_t (*sw_activity_show)(struct ata_device *, char *);
+	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+	void (*phy_reset)(struct ata_port *);
+	void (*eng_timeout)(struct ata_port *);
+	const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+	long unsigned int unhandled_irq;
+	long unsigned int idle_irq;
+	long unsigned int rw_reqbuf;
+};
+
+struct ata_port {
+	struct Scsi_Host *scsi_host;
+	struct ata_port_operations *ops;
+	spinlock_t *lock;
+	long unsigned int flags;
+	unsigned int pflags;
+	unsigned int print_id;
+	unsigned int local_port_no;
+	unsigned int port_no;
+	struct ata_ioports ioaddr;
+	u8 ctl;
+	u8 last_ctl;
+	struct ata_link *sff_pio_task_link;
+	struct delayed_work sff_pio_task;
+	struct ata_bmdma_prd *bmdma_prd;
+	dma_addr_t bmdma_prd_dma;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	unsigned int cbl;
+	struct ata_queued_cmd qcmd[33];
+	u64 qc_active;
+	int nr_active_links;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_link link;
+	struct ata_link *slave_link;
+	int nr_pmp_links;
+	struct ata_link *pmp_link;
+	struct ata_link *excl_link;
+	struct ata_port_stats stats;
+	struct ata_host *host;
+	struct device *dev;
+	struct device tdev;
+	struct mutex scsi_scan_mutex;
+	struct delayed_work hotplug_task;
+	struct work_struct scsi_rescan_task;
+	unsigned int hsm_task_state;
+	struct list_head eh_done_q;
+	wait_queue_head_t eh_wait_q;
+	int eh_tries;
+	struct completion park_req_pending;
+	pm_message_t pm_mesg;
+	enum ata_lpm_policy target_lpm_policy;
+	struct timer_list fastdrain_timer;
+	unsigned int fastdrain_cnt;
+	async_cookie_t cookie;
+	int em_message_type;
+	void *private_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 sector_buf[512];
+};
+
+struct ata_cpr {
+	u8 num;
+	u8 num_storage_elements;
+	u64 start_lba;
+	u64 num_lbas;
+};
+
+struct ata_cpr_log {
+	u8 nr_cpr;
+	struct ata_cpr cpr[0];
+};
+
+enum ata_link_iter_mode {
+	ATA_LITER_EDGE = 0,
+	ATA_LITER_HOST_FIRST = 1,
+	ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+	ATA_DITER_ENABLED = 0,
+	ATA_DITER_ENABLED_REVERSE = 1,
+	ATA_DITER_ALL = 2,
+	ATA_DITER_ALL_REVERSE = 3,
+};
+
+enum {
+	ATA_READID_POSTRESET = 1,
+	ATA_DNXFER_PIO = 0,
+	ATA_DNXFER_DMA = 1,
+	ATA_DNXFER_40C = 2,
+	ATA_DNXFER_FORCE_PIO = 3,
+	ATA_DNXFER_FORCE_PIO0 = 4,
+	ATA_DNXFER_QUIET = -2147483648,
+};
+
+enum {
+	ATA_EH_SPDN_NCQ_OFF = 1,
+	ATA_EH_SPDN_SPEED_DOWN = 2,
+	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+	ATA_EH_SPDN_KEEP_ERRORS = 8,
+	ATA_EFLAG_IS_IO = 1,
+	ATA_EFLAG_DUBIOUS_XFER = 2,
+	ATA_EFLAG_OLD_ER = -2147483648,
+	ATA_ECAT_NONE = 0,
+	ATA_ECAT_ATA_BUS = 1,
+	ATA_ECAT_TOUT_HSM = 2,
+	ATA_ECAT_UNK_DEV = 3,
+	ATA_ECAT_DUBIOUS_NONE = 4,
+	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+	ATA_ECAT_NR = 8,
+	ATA_EH_CMD_DFL_TIMEOUT = 5000,
+	ATA_EH_RESET_COOL_DOWN = 5000,
+	ATA_EH_PRERESET_TIMEOUT = 10000,
+	ATA_EH_FASTDRAIN_INTERVAL = 3000,
+	ATA_EH_UA_TRIES = 5,
+	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+	ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+	const u8 *commands;
+	const unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+	u64 since;
+	int xfer_ok;
+	int nr_errors[8];
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+struct netpoll;
+
+struct netpoll_info {
+	refcount_t refcnt;
+	struct semaphore dev_lock;
+	struct sk_buff_head txq;
+	struct delayed_work tx_work;
+	struct netpoll *netpoll;
+	struct callback_head rcu;
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_RELEASE = 18,
+	NETDEV_NOTIFY_PEERS = 19,
+	NETDEV_JOIN = 20,
+	NETDEV_CHANGEUPPER = 21,
+	NETDEV_RESEND_IGMP = 22,
+	NETDEV_PRECHANGEMTU = 23,
+	NETDEV_CHANGEINFODATA = 24,
+	NETDEV_BONDING_INFO = 25,
+	NETDEV_PRECHANGEUPPER = 26,
+	NETDEV_CHANGELOWERSTATE = 27,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 35,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 38,
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+union inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct netpoll {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	char dev_name[16];
+	const char *name;
+	union inet_addr local_ip;
+	union inet_addr remote_ip;
+	bool ipv6;
+	u16 local_port;
+	u16 remote_port;
+	u8 remote_mac[6];
+};
+
+struct netconsole_target {
+	struct list_head list;
+	bool enabled;
+	bool extended;
+	struct netpoll np;
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+typedef struct bio_vec skb_frag_t;
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	short unsigned int gso_size;
+	short unsigned int gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	skb_frag_t frags[16];
+};
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	long unsigned int state;
+	int weight;
+	int defer_hard_irqs_count;
+	long unsigned int gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int poll_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	struct hrtimer timer;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	unsigned int napi_id;
+	struct task_struct *thread;
+};
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1ULL,
+	IFF_EBRIDGE = 2ULL,
+	IFF_BONDING = 4ULL,
+	IFF_ISATAP = 8ULL,
+	IFF_WAN_HDLC = 16ULL,
+	IFF_XMIT_DST_RELEASE = 32ULL,
+	IFF_DONT_BRIDGE = 64ULL,
+	IFF_DISABLE_NETPOLL = 128ULL,
+	IFF_MACVLAN_PORT = 256ULL,
+	IFF_BRIDGE_PORT = 512ULL,
+	IFF_OVS_DATAPATH = 1024ULL,
+	IFF_TX_SKB_SHARING = 2048ULL,
+	IFF_UNICAST_FLT = 4096ULL,
+	IFF_TEAM_PORT = 8192ULL,
+	IFF_SUPP_NOFCS = 16384ULL,
+	IFF_LIVE_ADDR_CHANGE = 32768ULL,
+	IFF_MACVLAN = 65536ULL,
+	IFF_XMIT_DST_RELEASE_PERM = 131072ULL,
+	IFF_L3MDEV_MASTER = 262144ULL,
+	IFF_NO_QUEUE = 524288ULL,
+	IFF_OPENVSWITCH = 1048576ULL,
+	IFF_L3MDEV_SLAVE = 2097152ULL,
+	IFF_TEAM = 4194304ULL,
+	IFF_RXFH_CONFIGURED = 8388608ULL,
+	IFF_PHONY_HEADROOM = 16777216ULL,
+	IFF_MACSEC = 33554432ULL,
+	IFF_NO_RX_HANDLER = 67108864ULL,
+	IFF_FAILOVER = 134217728ULL,
+	IFF_FAILOVER_SLAVE = 268435456ULL,
+	IFF_L3MDEV_RX_HANDLER = 536870912ULL,
+	IFF_LIVE_RENAME_OK = 1073741824ULL,
+	IFF_TX_SKB_NO_LINEAR = 2147483648ULL,
+	IFF_CHANGE_PROTO_DOWN = 4294967296ULL,
+};
+
+enum skb_free_reason {
+	SKB_REASON_CONSUMED = 0,
+	SKB_REASON_DROPPED = 1,
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
 };
 
 struct ethtool_drvinfo {
@@ -12192,6 +29225,7 @@
 	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
 	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
 	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
 };
 
 enum ethtool_link_ext_substate_autoneg {
@@ -12221,6 +29255,8 @@
 enum ethtool_link_ext_substate_bad_signal_integrity {
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
 	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
 };
 
 enum ethtool_link_ext_substate_cable_issue {
@@ -12228,6 +29264,52 @@
 	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
 };
 
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
 struct ethtool_test {
 	__u32 cmd;
 	__u32 flags;
@@ -12367,6 +29449,103 @@
 	__u32 reserved;
 };
 
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 93,
+};
+
 struct ethtool_link_settings {
 	__u32 cmd;
 	__u32 speed;
@@ -12386,11 +29565,11 @@
 	__u32 link_mode_masks[0];
 };
 
-enum ethtool_phys_id_state {
-	ETHTOOL_ID_INACTIVE = 0,
-	ETHTOOL_ID_ACTIVE = 1,
-	ETHTOOL_ID_ON = 2,
-	ETHTOOL_ID_OFF = 3,
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u32 cqe_size;
 };
 
 struct ethtool_link_ext_state_info {
@@ -12401,7 +29580,8 @@
 		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
 		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
 		enum ethtool_link_ext_substate_cable_issue cable_issue;
-		u8 __link_ext_substate;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
 	};
 };
 
@@ -12412,6 +29592,47 @@
 		long unsigned int advertising[2];
 		long unsigned int lp_advertising[2];
 	} link_modes;
+	u32 lanes;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+};
+
+struct ethtool_eth_mac_stats {
+	u64 FramesTransmittedOK;
+	u64 SingleCollisionFrames;
+	u64 MultipleCollisionFrames;
+	u64 FramesReceivedOK;
+	u64 FrameCheckSequenceErrors;
+	u64 AlignmentErrors;
+	u64 OctetsTransmittedOK;
+	u64 FramesWithDeferredXmissions;
+	u64 LateCollisions;
+	u64 FramesAbortedDueToXSColls;
+	u64 FramesLostDueToIntMACXmitError;
+	u64 CarrierSenseErrors;
+	u64 OctetsReceivedOK;
+	u64 FramesLostDueToIntMACRcvError;
+	u64 MulticastFramesXmittedOK;
+	u64 BroadcastFramesXmittedOK;
+	u64 FramesWithExcessiveDeferral;
+	u64 MulticastFramesReceivedOK;
+	u64 BroadcastFramesReceivedOK;
+	u64 InRangeLengthErrors;
+	u64 OutOfRangeLengthField;
+	u64 FrameTooLongErrors;
+};
+
+struct ethtool_eth_phy_stats {
+	u64 SymbolErrorDuringCarrier;
+};
+
+struct ethtool_eth_ctrl_stats {
+	u64 MACControlFramesTransmitted;
+	u64 MACControlFramesReceived;
+	u64 UnsupportedOpcodesReceived;
 };
 
 struct ethtool_pause_stats {
@@ -12419,3331 +29640,431 @@
 	u64 rx_pause_frames;
 };
 
-struct ethtool_ops {
-	u32 supported_coalesce_params;
-	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device *);
-	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device *);
-	void (*set_msglevel)(struct net_device *, u32);
-	int (*nway_reset)(struct net_device *);
-	u32 (*get_link)(struct net_device *);
-	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
-	int (*get_eeprom_len)(struct net_device *);
-	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
-	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device *, u32, u8 *);
-	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device *);
-	void (*complete)(struct net_device *);
-	u32 (*get_priv_flags)(struct net_device *);
-	int (*set_priv_flags)(struct net_device *, u32);
-	int (*get_sset_count)(struct net_device *, int);
-	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device *, struct ethtool_flash *);
-	int (*reset)(struct net_device *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device *);
-	u32 (*get_rxfh_indir_size)(struct net_device *);
-	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
 };
 
-struct netlink_ext_ack {
-	const char *_msg;
-	const struct nlattr *bad_attr;
-	const struct nla_policy *policy;
-	u8 cookie[20];
-	u8 cookie_len;
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
 };
 
-struct ieee_ets {
-	__u8 willing;
-	__u8 ets_cap;
-	__u8 cbs;
-	__u8 tc_tx_bw[8];
-	__u8 tc_rx_bw[8];
-	__u8 tc_tsa[8];
-	__u8 prio_tc[8];
-	__u8 tc_reco_bw[8];
-	__u8 tc_reco_tsa[8];
-	__u8 reco_prio_tc[8];
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
 };
 
-struct ieee_maxrate {
-	__u64 tc_maxrate[8];
+struct ethtool_rmon_stats {
+	u64 undersize_pkts;
+	u64 oversize_pkts;
+	u64 fragments;
+	u64 jabbers;
+	u64 hist[10];
+	u64 hist_tx[10];
 };
 
-struct ieee_qcn {
-	__u8 rpg_enable[8];
-	__u32 rppp_max_rps[8];
-	__u32 rpg_time_reset[8];
-	__u32 rpg_byte_reset[8];
-	__u32 rpg_threshold[8];
-	__u32 rpg_max_rate[8];
-	__u32 rpg_ai_rate[8];
-	__u32 rpg_hai_rate[8];
-	__u32 rpg_gd[8];
-	__u32 rpg_min_dec_fac[8];
-	__u32 rpg_min_rate[8];
-	__u32 cndd_state_machine[8];
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
 };
 
-struct ieee_qcn_stats {
-	__u64 rppp_rp_centiseconds[8];
-	__u32 rppp_created_rps[8];
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
 };
 
-struct ieee_pfc {
-	__u8 pfc_cap;
-	__u8 pfc_en;
-	__u8 mbc;
-	__u16 delay;
-	__u64 requests[8];
-	__u64 indications[8];
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
 };
 
-struct dcbnl_buffer {
-	__u8 prio2buffer[8];
-	__u32 buffer_size[8];
-	__u32 total_size;
-};
-
-struct cee_pg {
-	__u8 willing;
-	__u8 error;
-	__u8 pg_en;
-	__u8 tcs_supported;
-	__u8 pg_bw[8];
-	__u8 prio_pg[8];
-};
-
-struct cee_pfc {
-	__u8 willing;
-	__u8 error;
-	__u8 pfc_en;
-	__u8 tcs_supported;
-};
-
-struct dcb_app {
-	__u8 selector;
-	__u8 priority;
-	__u16 protocol;
-};
-
-struct dcb_peer_app_info {
-	__u8 willing;
-	__u8 error;
-};
-
-struct dcbnl_rtnl_ops {
-	int (*ieee_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_setets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);
-	int (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);
-	int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);
-	int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);
-	int (*ieee_getapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_setapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_delapp)(struct net_device *, struct dcb_app *);
-	int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);
-	int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);
-	u8 (*getstate)(struct net_device *);
-	u8 (*setstate)(struct net_device *, u8);
-	void (*getpermhwaddr)(struct net_device *, u8 *);
-	void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgtx)(struct net_device *, int, u8);
-	void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
-	void (*setpgbwgcfgrx)(struct net_device *, int, u8);
-	void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
-	void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
-	void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
-	void (*setpfccfg)(struct net_device *, int, u8);
-	void (*getpfccfg)(struct net_device *, int, u8 *);
-	u8 (*setall)(struct net_device *);
-	u8 (*getcap)(struct net_device *, int, u8 *);
-	int (*getnumtcs)(struct net_device *, int, u8 *);
-	int (*setnumtcs)(struct net_device *, int, u8);
-	u8 (*getpfcstate)(struct net_device *);
-	void (*setpfcstate)(struct net_device *, u8);
-	void (*getbcncfg)(struct net_device *, int, u32 *);
-	void (*setbcncfg)(struct net_device *, int, u32);
-	void (*getbcnrp)(struct net_device *, int, u8 *);
-	void (*setbcnrp)(struct net_device *, int, u8);
-	int (*setapp)(struct net_device *, u8, u16, u8);
-	int (*getapp)(struct net_device *, u8, u16);
-	u8 (*getfeatcfg)(struct net_device *, int, u8 *);
-	u8 (*setfeatcfg)(struct net_device *, int, u8);
-	u8 (*getdcbx)(struct net_device *);
-	u8 (*setdcbx)(struct net_device *, u8);
-	int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);
-	int (*peer_getapptable)(struct net_device *, struct dcb_app *);
-	int (*cee_peer_getpg)(struct net_device *, struct cee_pg *);
-	int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);
-	int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
-	int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
-};
-
-struct netprio_map {
-	struct callback_head rcu;
-	u32 priomap_len;
-	u32 priomap[0];
-};
-
-struct xdp_mem_info {
-	u32 type;
-	u32 id;
-};
-
-struct xdp_rxq_info {
+struct mii_if_info {
+	int phy_id;
+	int advertising;
+	int phy_id_mask;
+	int reg_num_mask;
+	unsigned int full_duplex: 1;
+	unsigned int force_media: 1;
+	unsigned int supports_gmii: 1;
 	struct net_device *dev;
-	u32 queue_index;
-	u32 reg_state;
-	struct xdp_mem_info mem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	int (*mdio_read)(struct net_device *, int, int);
+	void (*mdio_write)(struct net_device *, int, int, int);
 };
 
-struct xdp_frame {
-	void *data;
-	u16 len;
-	u16 headroom;
-	u32 metasize: 8;
-	u32 frame_sz: 24;
-	struct xdp_mem_info mem;
-	struct net_device *dev_rx;
+enum mac {
+	mac_82557_D100_A = 0,
+	mac_82557_D100_B = 1,
+	mac_82557_D100_C = 2,
+	mac_82558_D101_A4 = 4,
+	mac_82558_D101_B0 = 5,
+	mac_82559_D101M = 8,
+	mac_82559_D101S = 9,
+	mac_82550_D102 = 12,
+	mac_82550_D102_C = 13,
+	mac_82551_E = 14,
+	mac_82551_F = 15,
+	mac_82551_10 = 16,
+	mac_unknown = 255,
 };
 
-struct nlmsghdr {
-	__u32 nlmsg_len;
-	__u16 nlmsg_type;
-	__u16 nlmsg_flags;
-	__u32 nlmsg_seq;
-	__u32 nlmsg_pid;
+enum phy {
+	phy_100a = 992,
+	phy_100c = 55575208,
+	phy_82555_tx = 22020776,
+	phy_nsc_tx = 1543512064,
+	phy_82562_et = 53478056,
+	phy_82562_em = 52429480,
+	phy_82562_ek = 51380904,
+	phy_82562_eh = 24117928,
+	phy_82552_v = 3496017997,
+	phy_unknown = 4294967295,
 };
 
-struct nlattr {
-	__u16 nla_len;
-	__u16 nla_type;
+struct csr {
+	struct {
+		u8 status;
+		u8 stat_ack;
+		u8 cmd_lo;
+		u8 cmd_hi;
+		u32 gen_ptr;
+	} scb;
+	u32 port;
+	u16 flash_ctrl;
+	u8 eeprom_ctrl_lo;
+	u8 eeprom_ctrl_hi;
+	u32 mdi_ctrl;
+	u32 rx_dma_count;
 };
 
-struct netlink_range_validation;
-
-struct netlink_range_validation_signed;
-
-struct nla_policy {
-	u8 type;
-	u8 validation_type;
-	u16 len;
-	union {
-		const u32 bitfield32_valid;
-		const u32 mask;
-		const char *reject_message;
-		const struct nla_policy *nested_policy;
-		struct netlink_range_validation *range;
-		struct netlink_range_validation_signed *range_signed;
-		struct {
-			s16 min;
-			s16 max;
-		};
-		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
-		u16 strict_start_type;
-	};
+enum scb_status {
+	rus_no_res = 8,
+	rus_ready = 16,
+	rus_mask = 60,
 };
 
-struct netlink_callback {
+enum ru_state {
+	RU_SUSPENDED = 0,
+	RU_RUNNING = 1,
+	RU_UNINITIALIZED = -1,
+};
+
+enum scb_stat_ack {
+	stat_ack_not_ours = 0,
+	stat_ack_sw_gen = 4,
+	stat_ack_rnr = 16,
+	stat_ack_cu_idle = 32,
+	stat_ack_frame_rx = 64,
+	stat_ack_cu_cmd_done = 128,
+	stat_ack_not_present = 255,
+	stat_ack_rx = 84,
+	stat_ack_tx = 160,
+};
+
+enum scb_cmd_hi {
+	irq_mask_none = 0,
+	irq_mask_all = 1,
+	irq_sw_gen = 2,
+};
+
+enum scb_cmd_lo {
+	cuc_nop = 0,
+	ruc_start = 1,
+	ruc_load_base = 6,
+	cuc_start = 16,
+	cuc_resume = 32,
+	cuc_dump_addr = 64,
+	cuc_dump_stats = 80,
+	cuc_load_base = 96,
+	cuc_dump_reset = 112,
+};
+
+enum cuc_dump {
+	cuc_dump_complete = 40965,
+	cuc_dump_reset_complete = 40967,
+};
+
+enum port {
+	software_reset = 0,
+	selftest = 1,
+	selective_reset = 2,
+};
+
+enum eeprom_ctrl_lo {
+	eesk = 1,
+	eecs = 2,
+	eedi = 4,
+	eedo = 8,
+};
+
+enum mdi_ctrl {
+	mdi_write = 67108864,
+	mdi_read = 134217728,
+	mdi_ready = 268435456,
+};
+
+enum eeprom_op {
+	op_write = 5,
+	op_read = 6,
+	op_ewds = 16,
+	op_ewen = 19,
+};
+
+enum eeprom_offsets {
+	eeprom_cnfg_mdix = 3,
+	eeprom_phy_iface = 6,
+	eeprom_id = 10,
+	eeprom_config_asf = 13,
+	eeprom_smbus_addr = 144,
+};
+
+enum eeprom_cnfg_mdix {
+	eeprom_mdix_enabled = 128,
+};
+
+enum eeprom_phy_iface {
+	NoSuchPhy = 0,
+	I82553AB = 1,
+	I82553C = 2,
+	I82503 = 3,
+	DP83840 = 4,
+	S80C240 = 5,
+	S80C24 = 6,
+	I82555 = 7,
+	DP83840A = 10,
+};
+
+enum eeprom_id {
+	eeprom_id_wol = 32,
+};
+
+enum eeprom_config_asf {
+	eeprom_asf = 32768,
+	eeprom_gcl = 16384,
+};
+
+enum cb_status {
+	cb_complete = 32768,
+	cb_ok = 8192,
+};
+
+enum cb_command {
+	cb_nop = 0,
+	cb_iaaddr = 1,
+	cb_config = 2,
+	cb_multi = 3,
+	cb_tx = 4,
+	cb_ucode = 5,
+	cb_dump = 6,
+	cb_tx_sf = 8,
+	cb_tx_nc = 16,
+	cb_cid = 7936,
+	cb_i = 8192,
+	cb_s = 16384,
+	cb_el = 32768,
+};
+
+struct rfd {
+	__le16 status;
+	__le16 command;
+	__le32 link;
+	__le32 rbd;
+	__le16 actual_size;
+	__le16 size;
+};
+
+struct rx {
+	struct rx *next;
+	struct rx *prev;
 	struct sk_buff *skb;
-	const struct nlmsghdr *nlh;
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	struct netlink_ext_ack *extack;
-	u16 family;
-	u16 answer_flags;
-	u32 min_dump_alloc;
-	unsigned int prev_seq;
-	unsigned int seq;
-	bool strict_check;
+	dma_addr_t dma_addr;
+};
+
+struct config {
+	u8 byte_count: 6;
+	u8 pad0: 2;
+	u8 rx_fifo_limit: 4;
+	u8 tx_fifo_limit: 3;
+	u8 pad1: 1;
+	u8 adaptive_ifs;
+	u8 mwi_enable: 1;
+	u8 type_enable: 1;
+	u8 read_align_enable: 1;
+	u8 term_write_cache_line: 1;
+	u8 pad3: 4;
+	u8 rx_dma_max_count: 7;
+	u8 pad4: 1;
+	u8 tx_dma_max_count: 7;
+	u8 dma_max_count_enable: 1;
+	u8 late_scb_update: 1;
+	u8 direct_rx_dma: 1;
+	u8 tno_intr: 1;
+	u8 cna_intr: 1;
+	u8 standard_tcb: 1;
+	u8 standard_stat_counter: 1;
+	u8 rx_save_overruns: 1;
+	u8 rx_save_bad_frames: 1;
+	u8 rx_discard_short_frames: 1;
+	u8 tx_underrun_retry: 2;
+	u8 pad7: 2;
+	u8 rx_extended_rfd: 1;
+	u8 tx_two_frames_in_fifo: 1;
+	u8 tx_dynamic_tbd: 1;
+	u8 mii_mode: 1;
+	u8 pad8: 6;
+	u8 csma_disabled: 1;
+	u8 rx_tcpudp_checksum: 1;
+	u8 pad9: 3;
+	u8 vlan_arp_tco: 1;
+	u8 link_status_wake: 1;
+	u8 arp_wake: 1;
+	u8 mcmatch_wake: 1;
+	u8 pad10: 3;
+	u8 no_source_addr_insertion: 1;
+	u8 preamble_length: 2;
+	u8 loopback: 2;
+	u8 linear_priority: 3;
+	u8 pad11: 5;
+	u8 linear_priority_mode: 1;
+	u8 pad12: 3;
+	u8 ifs: 4;
+	u8 ip_addr_lo;
+	u8 ip_addr_hi;
+	u8 promiscuous_mode: 1;
+	u8 broadcast_disabled: 1;
+	u8 wait_after_win: 1;
+	u8 pad15_1: 1;
+	u8 ignore_ul_bit: 1;
+	u8 crc_16_bit: 1;
+	u8 pad15_2: 1;
+	u8 crs_or_cdt: 1;
+	u8 fc_delay_lo;
+	u8 fc_delay_hi;
+	u8 rx_stripping: 1;
+	u8 tx_padding: 1;
+	u8 rx_crc_transfer: 1;
+	u8 rx_long_ok: 1;
+	u8 fc_priority_threshold: 3;
+	u8 pad18: 1;
+	u8 addr_wake: 1;
+	u8 magic_packet_disable: 1;
+	u8 fc_disable: 1;
+	u8 fc_restop: 1;
+	u8 fc_restart: 1;
+	u8 fc_reject: 1;
+	u8 full_duplex_force: 1;
+	u8 full_duplex_pin: 1;
+	u8 pad20_1: 5;
+	u8 fc_priority_location: 1;
+	u8 multi_ia: 1;
+	u8 pad20_2: 1;
+	u8 pad21_1: 3;
+	u8 multicast_all: 1;
+	u8 pad21_2: 4;
+	u8 rx_d102_mode: 1;
+	u8 rx_vlan_drop: 1;
+	u8 pad22: 6;
+	u8 pad_d102[9];
+};
+
+struct multi {
+	__le16 count;
+	u8 addr[386];
+};
+
+struct cb {
+	__le16 status;
+	__le16 command;
+	__le32 link;
 	union {
-		u8 ctx[48];
-		long int args[6];
-	};
-};
-
-struct ndmsg {
-	__u8 ndm_family;
-	__u8 ndm_pad1;
-	__u16 ndm_pad2;
-	__s32 ndm_ifindex;
-	__u16 ndm_state;
-	__u8 ndm_flags;
-	__u8 ndm_type;
-};
-
-struct rtnl_link_stats64 {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 rx_errors;
-	__u64 tx_errors;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-	__u64 multicast;
-	__u64 collisions;
-	__u64 rx_length_errors;
-	__u64 rx_over_errors;
-	__u64 rx_crc_errors;
-	__u64 rx_frame_errors;
-	__u64 rx_fifo_errors;
-	__u64 rx_missed_errors;
-	__u64 tx_aborted_errors;
-	__u64 tx_carrier_errors;
-	__u64 tx_fifo_errors;
-	__u64 tx_heartbeat_errors;
-	__u64 tx_window_errors;
-	__u64 rx_compressed;
-	__u64 tx_compressed;
-	__u64 rx_nohandler;
-};
-
-struct ifla_vf_guid {
-	__u32 vf;
-	__u64 guid;
-};
-
-struct ifla_vf_stats {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 broadcast;
-	__u64 multicast;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-};
-
-struct ifla_vf_info {
-	__u32 vf;
-	__u8 mac[32];
-	__u32 vlan;
-	__u32 qos;
-	__u32 spoofchk;
-	__u32 linkstate;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-	__u32 rss_query_en;
-	__u32 trusted;
-	__be16 vlan_proto;
-};
-
-struct tc_stats {
-	__u64 bytes;
-	__u32 packets;
-	__u32 drops;
-	__u32 overlimits;
-	__u32 bps;
-	__u32 pps;
-	__u32 qlen;
-	__u32 backlog;
-};
-
-struct tc_sizespec {
-	unsigned char cell_log;
-	unsigned char size_log;
-	short int cell_align;
-	int overhead;
-	unsigned int linklayer;
-	unsigned int mpu;
-	unsigned int mtu;
-	unsigned int tsize;
-};
-
-enum netdev_tx {
-	__NETDEV_TX_MIN = 2147483648,
-	NETDEV_TX_OK = 0,
-	NETDEV_TX_BUSY = 16,
-};
-
-typedef enum netdev_tx netdev_tx_t;
-
-struct header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
-	int (*parse)(const struct sk_buff *, unsigned char *);
-	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
-	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
-	bool (*validate)(const char *, unsigned int);
-	__be16 (*parse_protocol)(const struct sk_buff *);
-};
-
-struct xsk_buff_pool;
-
-struct netdev_queue {
-	struct net_device *dev;
-	struct Qdisc *qdisc;
-	struct Qdisc *qdisc_sleeping;
-	struct kobject kobj;
-	int numa_node;
-	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
-	struct net_device *sb_dev;
-	struct xsk_buff_pool *pool;
-	spinlock_t _xmit_lock;
-	int xmit_lock_owner;
-	long unsigned int trans_start;
-	long unsigned int state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dql dql;
-};
-
-struct qdisc_skb_head {
-	struct sk_buff *head;
-	struct sk_buff *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct gnet_stats_basic_packed {
-	__u64 bytes;
-	__u64 packets;
-};
-
-struct gnet_stats_queue {
-	__u32 qlen;
-	__u32 backlog;
-	__u32 drops;
-	__u32 requeues;
-	__u32 overlimits;
-};
-
-struct Qdisc_ops;
-
-struct qdisc_size_table;
-
-struct net_rate_estimator;
-
-struct gnet_stats_basic_cpu;
-
-struct Qdisc {
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int pad;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head gso_skb;
-	struct qdisc_skb_head q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc *next_sched;
-	struct sk_buff_head skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long int privdata[0];
-};
-
-struct rps_map {
-	unsigned int len;
-	struct callback_head rcu;
-	u16 cpus[0];
-};
-
-struct rps_dev_flow {
-	u16 cpu;
-	u16 filter;
-	unsigned int last_qtail;
-};
-
-struct rps_dev_flow_table {
-	unsigned int mask;
-	struct callback_head rcu;
-	struct rps_dev_flow flows[0];
-};
-
-struct netdev_rx_queue {
-	struct rps_map *rps_map;
-	struct rps_dev_flow_table *rps_flow_table;
-	struct kobject kobj;
-	struct net_device *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-	struct xsk_buff_pool *pool;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xps_map {
-	unsigned int len;
-	unsigned int alloc_len;
-	struct callback_head rcu;
-	u16 queues[0];
-};
-
-struct xps_dev_maps {
-	struct callback_head rcu;
-	struct xps_map *attr_map[0];
-};
-
-struct netdev_fcoe_hbainfo {
-	char manufacturer[64];
-	char serial_number[64];
-	char hardware_version[64];
-	char driver_version[64];
-	char optionrom_version[64];
-	char firmware_version[64];
-	char model[256];
-	char model_description[256];
-};
-
-struct netdev_phys_item_id {
-	unsigned char id[32];
-	unsigned char id_len;
-};
-
-enum tc_setup_type {
-	TC_SETUP_QDISC_MQPRIO = 0,
-	TC_SETUP_CLSU32 = 1,
-	TC_SETUP_CLSFLOWER = 2,
-	TC_SETUP_CLSMATCHALL = 3,
-	TC_SETUP_CLSBPF = 4,
-	TC_SETUP_BLOCK = 5,
-	TC_SETUP_QDISC_CBS = 6,
-	TC_SETUP_QDISC_RED = 7,
-	TC_SETUP_QDISC_PRIO = 8,
-	TC_SETUP_QDISC_MQ = 9,
-	TC_SETUP_QDISC_ETF = 10,
-	TC_SETUP_ROOT_QDISC = 11,
-	TC_SETUP_QDISC_GRED = 12,
-	TC_SETUP_QDISC_TAPRIO = 13,
-	TC_SETUP_FT = 14,
-	TC_SETUP_QDISC_ETS = 15,
-	TC_SETUP_QDISC_TBF = 16,
-	TC_SETUP_QDISC_FIFO = 17,
-};
-
-enum bpf_netdev_command {
-	XDP_SETUP_PROG = 0,
-	XDP_SETUP_PROG_HW = 1,
-	BPF_OFFLOAD_MAP_ALLOC = 2,
-	BPF_OFFLOAD_MAP_FREE = 3,
-	XDP_SETUP_XSK_POOL = 4,
-};
-
-struct netdev_bpf {
-	enum bpf_netdev_command command;
-	union {
+		u8 iaaddr[6];
+		__le32 ucode[134];
+		struct config config;
+		struct multi multi;
 		struct {
-			u32 flags;
-			struct bpf_prog *prog;
-			struct netlink_ext_ack *extack;
-		};
-		struct {
-			struct bpf_offloaded_map *offmap;
-		};
-		struct {
-			struct xsk_buff_pool *pool;
-			u16 queue_id;
-		} xsk;
-	};
-};
-
-struct xfrmdev_ops {
-	int (*xdo_dev_state_add)(struct xfrm_state *);
-	void (*xdo_dev_state_delete)(struct xfrm_state *);
-	void (*xdo_dev_state_free)(struct xfrm_state *);
-	bool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);
-	void (*xdo_dev_state_advance_esn)(struct xfrm_state *);
-};
-
-struct dev_ifalias {
-	struct callback_head rcuhead;
-	char ifalias[0];
-};
-
-struct netdev_name_node {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device *dev;
-	const char *name;
-};
-
-struct udp_tunnel_info;
-
-struct devlink_port;
-
-struct ip_tunnel_parm;
-
-struct net_device_ops {
-	int (*ndo_init)(struct net_device *);
-	void (*ndo_uninit)(struct net_device *);
-	int (*ndo_open)(struct net_device *);
-	int (*ndo_stop)(struct net_device *);
-	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
-	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
-	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
-	void (*ndo_change_rx_flags)(struct net_device *, int);
-	void (*ndo_set_rx_mode)(struct net_device *);
-	int (*ndo_set_mac_address)(struct net_device *, void *);
-	int (*ndo_validate_addr)(struct net_device *);
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-	int (*ndo_set_config)(struct net_device *, struct ifmap *);
-	int (*ndo_change_mtu)(struct net_device *, int);
-	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
-	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
-	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
-	bool (*ndo_has_offload_stats)(const struct net_device *, int);
-	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
-	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
-	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
-	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
-	void (*ndo_poll_controller)(struct net_device *);
-	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
-	void (*ndo_netpoll_cleanup)(struct net_device *);
-	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
-	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
-	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
-	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
-	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
-	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
-	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
-	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
-	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
-	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
-	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
-	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
-	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
-	int (*ndo_fcoe_enable)(struct net_device *);
-	int (*ndo_fcoe_disable)(struct net_device *);
-	int (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_ddp_done)(struct net_device *, u16);
-	int (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);
-	int (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);
-	int (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);
-	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
-	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
-	int (*ndo_del_slave)(struct net_device *, struct net_device *);
-	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
-	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
-	int (*ndo_set_features)(struct net_device *, netdev_features_t);
-	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
-	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
-	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);
-	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
-	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
-	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
-	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
-	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
-	int (*ndo_change_carrier)(struct net_device *, bool);
-	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);
-	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
-	void (*ndo_dfwd_del_station)(struct net_device *, void *);
-	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
-	int (*ndo_get_iflink)(const struct net_device *);
-	int (*ndo_change_proto_down)(struct net_device *, bool);
-	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
-	void (*ndo_set_rx_headroom)(struct net_device *, int);
-	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
-	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
-	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
-	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
-	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
-	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
-};
-
-struct neigh_parms {
-	possible_net_t net;
-	struct net_device *dev;
-	struct list_head list;
-	int (*neigh_setup)(struct neighbour *);
-	struct neigh_table *tbl;
-	void *sysctl_table;
-	int dead;
-	refcount_t refcnt;
-	struct callback_head callback_head;
-	int reachable_time;
-	int data[13];
-	long unsigned int data_state[1];
-};
-
-struct pcpu_lstats {
-	u64_stats_t packets;
-	u64_stats_t bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct pcpu_sw_netstats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct iw_request_info;
-
-union iwreq_data;
-
-typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
-
-struct iw_priv_args;
-
-struct iw_statistics;
-
-struct iw_handler_def {
-	const iw_handler *standard;
-	__u16 num_standard;
-	__u16 num_private;
-	__u16 num_private_args;
-	const iw_handler *private;
-	const struct iw_priv_args *private_args;
-	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
-};
-
-struct l3mdev_ops {
-	u32 (*l3mdev_fib_table)(const struct net_device *);
-	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
-	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
-	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
-};
-
-struct nd_opt_hdr;
-
-struct ndisc_options;
-
-struct prefix_info;
-
-struct ndisc_ops {
-	int (*is_useropt)(u8);
-	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
-	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
-	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
-	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
-	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
-};
-
-enum tls_offload_ctx_dir {
-	TLS_OFFLOAD_CTX_DIR_RX = 0,
-	TLS_OFFLOAD_CTX_DIR_TX = 1,
-};
-
-struct tls_crypto_info;
-
-struct tls_context;
-
-struct tlsdev_ops {
-	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
-	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
-	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
-};
-
-struct ipv6_devstat {
-	struct proc_dir_entry *proc_dir_entry;
-	struct ipstats_mib *ipv6;
-	struct icmpv6_mib_device *icmpv6dev;
-	struct icmpv6msg_mib_device *icmpv6msgdev;
-};
-
-struct ifmcaddr6;
-
-struct ifacaddr6;
-
-struct inet6_dev {
-	struct net_device *dev;
-	struct list_head addr_list;
-	struct ifmcaddr6 *mc_list;
-	struct ifmcaddr6 *mc_tomb;
-	spinlock_t mc_lock;
-	unsigned char mc_qrv;
-	unsigned char mc_gq_running;
-	unsigned char mc_ifc_count;
-	unsigned char mc_dad_count;
-	long unsigned int mc_v1_seen;
-	long unsigned int mc_qi;
-	long unsigned int mc_qri;
-	long unsigned int mc_maxdelay;
-	struct timer_list mc_gq_timer;
-	struct timer_list mc_ifc_timer;
-	struct timer_list mc_dad_timer;
-	struct ifacaddr6 *ac_list;
-	rwlock_t lock;
-	refcount_t refcnt;
-	__u32 if_flags;
-	int dead;
-	u32 desync_factor;
-	struct list_head tempaddr_list;
-	struct in6_addr token;
-	struct neigh_parms *nd_parms;
-	struct ipv6_devconf cnf;
-	struct ipv6_devstat stats;
-	struct timer_list rs_timer;
-	__s32 rs_interval;
-	__u8 rs_probes;
-	long unsigned int tstamp;
-	struct callback_head rcu;
-};
-
-struct tcf_proto;
-
-struct tcf_block;
-
-struct mini_Qdisc {
-	struct tcf_proto *filter_list;
-	struct tcf_block *block;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
-};
-
-struct rtnl_link_ops {
-	struct list_head list;
-	const char *kind;
-	size_t priv_size;
-	void (*setup)(struct net_device *);
-	unsigned int maxtype;
-	const struct nla_policy *policy;
-	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	void (*dellink)(struct net_device *, struct list_head *);
-	size_t (*get_size)(const struct net_device *);
-	int (*fill_info)(struct sk_buff *, const struct net_device *);
-	size_t (*get_xstats_size)(const struct net_device *);
-	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
-	unsigned int (*get_num_tx_queues)();
-	unsigned int (*get_num_rx_queues)();
-	unsigned int slave_maxtype;
-	const struct nla_policy *slave_policy;
-	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
-	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
-	struct net * (*get_link_net)(const struct net_device *);
-	size_t (*get_linkxstats_size)(const struct net_device *, int);
-	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
-};
-
-struct udp_tunnel_nic_table_info {
-	unsigned int n_entries;
-	unsigned int tunnel_types;
-};
-
-struct udp_tunnel_nic_shared;
-
-struct udp_tunnel_nic_info {
-	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	int (*sync_table)(struct net_device *, unsigned int);
-	struct udp_tunnel_nic_shared *shared;
-	unsigned int flags;
-	struct udp_tunnel_nic_table_info tables[4];
-};
-
-enum {
-	RTAX_UNSPEC = 0,
-	RTAX_LOCK = 1,
-	RTAX_MTU = 2,
-	RTAX_WINDOW = 3,
-	RTAX_RTT = 4,
-	RTAX_RTTVAR = 5,
-	RTAX_SSTHRESH = 6,
-	RTAX_CWND = 7,
-	RTAX_ADVMSS = 8,
-	RTAX_REORDERING = 9,
-	RTAX_HOPLIMIT = 10,
-	RTAX_INITCWND = 11,
-	RTAX_FEATURES = 12,
-	RTAX_RTO_MIN = 13,
-	RTAX_INITRWND = 14,
-	RTAX_QUICKACK = 15,
-	RTAX_CC_ALGO = 16,
-	RTAX_FASTOPEN_NO_COOKIE = 17,
-	__RTAX_MAX = 18,
-};
-
-struct tcmsg {
-	unsigned char tcm_family;
-	unsigned char tcm__pad1;
-	short unsigned int tcm__pad2;
-	int tcm_ifindex;
-	__u32 tcm_handle;
-	__u32 tcm_parent;
-	__u32 tcm_info;
-};
-
-struct gnet_stats_basic_cpu {
-	struct gnet_stats_basic_packed bstats;
-	struct u64_stats_sync syncp;
-};
-
-struct gnet_dump {
-	spinlock_t *lock;
+			u32 tbd_array;
+			u16 tcb_byte_count;
+			u8 threshold;
+			u8 tbd_count;
+			struct {
+				__le32 buf_addr;
+				__le16 size;
+				u16 eol;
+			} tbd;
+		} tcb;
+		__le32 dump_buffer_addr;
+	} u;
+	struct cb *next;
+	struct cb *prev;
+	dma_addr_t dma_addr;
 	struct sk_buff *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
 };
 
-struct netlink_range_validation {
-	u64 min;
-	u64 max;
+enum loopback {
+	lb_none = 0,
+	lb_mac = 1,
+	lb_phy = 3,
 };
 
-struct netlink_range_validation_signed {
-	s64 min;
-	s64 max;
+struct stats {
+	__le32 tx_good_frames;
+	__le32 tx_max_collisions;
+	__le32 tx_late_collisions;
+	__le32 tx_underruns;
+	__le32 tx_lost_crs;
+	__le32 tx_deferred;
+	__le32 tx_single_collisions;
+	__le32 tx_multiple_collisions;
+	__le32 tx_total_collisions;
+	__le32 rx_good_frames;
+	__le32 rx_crc_errors;
+	__le32 rx_alignment_errors;
+	__le32 rx_resource_errors;
+	__le32 rx_overrun_errors;
+	__le32 rx_cdt_errors;
+	__le32 rx_short_frame_errors;
+	__le32 fc_xmt_pause;
+	__le32 fc_rcv_pause;
+	__le32 fc_rcv_unsupported;
+	__le16 xmt_tco_frames;
+	__le16 rcv_tco_frames;
+	__le32 complete;
 };
 
-enum flow_action_hw_stats_bit {
-	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
-	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
-	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
-	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
-};
-
-struct flow_block {
-	struct list_head cb_list;
-};
-
-typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
-
-struct qdisc_size_table {
-	struct callback_head rcu;
-	struct list_head list;
-	struct tc_sizespec szopts;
-	int refcnt;
-	u16 data[0];
-};
-
-struct Qdisc_class_ops;
-
-struct Qdisc_ops {
-	struct Qdisc_ops *next;
-	const struct Qdisc_class_ops *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	struct sk_buff * (*peek)(struct Qdisc *);
-	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc *);
-	void (*destroy)(struct Qdisc *);
-	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc *);
-	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	int (*dump)(struct Qdisc *, struct sk_buff *);
-	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
-	void (*ingress_block_set)(struct Qdisc *, u32);
-	void (*egress_block_set)(struct Qdisc *, u32);
-	u32 (*ingress_block_get)(struct Qdisc *);
-	u32 (*egress_block_get)(struct Qdisc *);
-	struct module *owner;
-};
-
-struct qdisc_walker;
-
-struct Qdisc_class_ops {
-	unsigned int flags;
-	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
-	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
-	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc *, u32);
-	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc *, long unsigned int);
-	void (*walk)(struct Qdisc *, struct qdisc_walker *);
-	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
-	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
-};
-
-struct tcf_chain;
-
-struct tcf_block {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	u32 classid;
-	refcount_t refcnt;
-	struct net *net;
-	struct Qdisc *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
+struct mem {
 	struct {
-		struct tcf_chain *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
+		u32 signature;
+		u32 result;
+	} selftest;
+	struct stats stats;
+	u8 dump_buf[596];
 };
 
-struct tcf_result;
-
-struct tcf_proto_ops;
-
-struct tcf_proto {
-	struct tcf_proto *next;
-	void *root;
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops *ops;
-	struct tcf_chain *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
+struct param_range {
+	u32 min;
+	u32 max;
+	u32 count;
 };
 
-struct tcf_result {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
+struct params {
+	struct param_range rfds;
+	struct param_range cbs;
 };
 
-struct tcf_walker;
+struct dma_pool;
 
-struct tcf_proto_ops {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	int (*init)(struct tcf_proto *);
-	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto *, u32);
-	void (*put)(struct tcf_proto *, void *);
-	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto *);
-	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto *, void *);
-	void (*hw_del)(struct tcf_proto *, void *);
-	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
-	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
-	struct module *owner;
-	int flags;
-};
-
-struct tcf_chain {
-	struct mutex filter_chain_lock;
-	struct tcf_proto *filter_chain;
-	struct list_head list;
-	struct tcf_block *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct sock_fprog_kern {
-	u16 len;
-	struct sock_filter *filter;
-};
-
-struct sk_filter {
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct bpf_prog *prog;
-};
-
-enum {
-	NEIGH_VAR_MCAST_PROBES = 0,
-	NEIGH_VAR_UCAST_PROBES = 1,
-	NEIGH_VAR_APP_PROBES = 2,
-	NEIGH_VAR_MCAST_REPROBES = 3,
-	NEIGH_VAR_RETRANS_TIME = 4,
-	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
-	NEIGH_VAR_DELAY_PROBE_TIME = 6,
-	NEIGH_VAR_GC_STALETIME = 7,
-	NEIGH_VAR_QUEUE_LEN_BYTES = 8,
-	NEIGH_VAR_PROXY_QLEN = 9,
-	NEIGH_VAR_ANYCAST_DELAY = 10,
-	NEIGH_VAR_PROXY_DELAY = 11,
-	NEIGH_VAR_LOCKTIME = 12,
-	NEIGH_VAR_QUEUE_LEN = 13,
-	NEIGH_VAR_RETRANS_TIME_MS = 14,
-	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 15,
-	NEIGH_VAR_GC_INTERVAL = 16,
-	NEIGH_VAR_GC_THRESH1 = 17,
-	NEIGH_VAR_GC_THRESH2 = 18,
-	NEIGH_VAR_GC_THRESH3 = 19,
-	NEIGH_VAR_MAX = 20,
-};
-
-struct pneigh_entry;
-
-struct neigh_statistics;
-
-struct neigh_hash_table;
-
-struct neigh_table {
-	int family;
-	unsigned int entry_size;
-	unsigned int key_len;
-	__be16 protocol;
-	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
-	bool (*key_eq)(const struct neighbour *, const void *);
-	int (*constructor)(struct neighbour *);
-	int (*pconstructor)(struct pneigh_entry *);
-	void (*pdestructor)(struct pneigh_entry *);
-	void (*proxy_redo)(struct sk_buff *);
-	int (*is_multicast)(const void *);
-	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
-	char *id;
-	struct neigh_parms parms;
-	struct list_head parms_list;
-	int gc_interval;
-	int gc_thresh1;
-	int gc_thresh2;
-	int gc_thresh3;
-	long unsigned int last_flush;
-	struct delayed_work gc_work;
-	struct timer_list proxy_timer;
-	struct sk_buff_head proxy_queue;
-	atomic_t entries;
-	atomic_t gc_entries;
-	struct list_head gc_list;
-	rwlock_t lock;
-	long unsigned int last_rand;
-	struct neigh_statistics *stats;
-	struct neigh_hash_table *nht;
-	struct pneigh_entry **phash_buckets;
-};
-
-struct neigh_statistics {
-	long unsigned int allocs;
-	long unsigned int destroys;
-	long unsigned int hash_grows;
-	long unsigned int res_failed;
-	long unsigned int lookups;
-	long unsigned int hits;
-	long unsigned int rcv_probes_mcast;
-	long unsigned int rcv_probes_ucast;
-	long unsigned int periodic_gc_runs;
-	long unsigned int forced_gc_runs;
-	long unsigned int unres_discards;
-	long unsigned int table_fulls;
-};
-
-struct neigh_ops {
-	int family;
-	void (*solicit)(struct neighbour *, struct sk_buff *);
-	void (*error_report)(struct neighbour *, struct sk_buff *);
-	int (*output)(struct neighbour *, struct sk_buff *);
-	int (*connected_output)(struct neighbour *, struct sk_buff *);
-};
-
-struct pneigh_entry {
-	struct pneigh_entry *next;
-	possible_net_t net;
-	struct net_device *dev;
-	u8 flags;
-	u8 protocol;
-	u8 key[0];
-};
-
-struct neigh_hash_table {
-	struct neighbour **hash_buckets;
-	unsigned int hash_shift;
-	__u32 hash_rnd[4];
-	struct callback_head rcu;
-};
-
-enum {
-	TCP_ESTABLISHED = 1,
-	TCP_SYN_SENT = 2,
-	TCP_SYN_RECV = 3,
-	TCP_FIN_WAIT1 = 4,
-	TCP_FIN_WAIT2 = 5,
-	TCP_TIME_WAIT = 6,
-	TCP_CLOSE = 7,
-	TCP_CLOSE_WAIT = 8,
-	TCP_LAST_ACK = 9,
-	TCP_LISTEN = 10,
-	TCP_CLOSING = 11,
-	TCP_NEW_SYN_RECV = 12,
-	TCP_MAX_STATES = 13,
-};
-
-struct fib_rule_hdr {
-	__u8 family;
-	__u8 dst_len;
-	__u8 src_len;
-	__u8 tos;
-	__u8 table;
-	__u8 res1;
-	__u8 res2;
-	__u8 action;
-	__u32 flags;
-};
-
-struct fib_rule_port_range {
-	__u16 start;
-	__u16 end;
-};
-
-struct fib_kuid_range {
-	kuid_t start;
-	kuid_t end;
-};
-
-struct fib_rule {
-	struct list_head list;
-	int iifindex;
-	int oifindex;
-	u32 mark;
-	u32 mark_mask;
-	u32 flags;
-	u32 table;
-	u8 action;
-	u8 l3mdev;
-	u8 proto;
-	u8 ip_proto;
-	u32 target;
-	__be64 tun_id;
-	struct fib_rule *ctarget;
-	struct net *fr_net;
-	refcount_t refcnt;
-	u32 pref;
-	int suppress_ifgroup;
-	int suppress_prefixlen;
-	char iifname[16];
-	char oifname[16];
-	struct fib_kuid_range uid_range;
-	struct fib_rule_port_range sport_range;
-	struct fib_rule_port_range dport_range;
-	struct callback_head rcu;
-};
-
-struct fib_lookup_arg {
-	void *lookup_ptr;
-	const void *lookup_data;
-	void *result;
-	struct fib_rule *rule;
-	u32 table;
-	int flags;
-};
-
-struct smc_hashinfo;
-
-struct request_sock_ops;
-
-struct timewait_sock_ops;
-
-struct udp_table;
-
-struct raw_hashinfo;
-
-struct proto {
-	void (*close)(struct sock *, long int);
-	int (*pre_connect)(struct sock *, struct sockaddr *, int);
-	int (*connect)(struct sock *, struct sockaddr *, int);
-	int (*disconnect)(struct sock *, int);
-	struct sock * (*accept)(struct sock *, int, int *, bool);
-	int (*ioctl)(struct sock *, int, long unsigned int);
-	int (*init)(struct sock *);
-	void (*destroy)(struct sock *);
-	void (*shutdown)(struct sock *, int);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*keepalive)(struct sock *, int);
-	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
-	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
-	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);
-	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
-	int (*bind)(struct sock *, struct sockaddr *, int);
-	int (*bind_add)(struct sock *, struct sockaddr *, int);
-	int (*backlog_rcv)(struct sock *, struct sk_buff *);
-	void (*release_cb)(struct sock *);
-	int (*hash)(struct sock *);
-	void (*unhash)(struct sock *);
-	void (*rehash)(struct sock *);
-	int (*get_port)(struct sock *, short unsigned int);
-	unsigned int inuse_idx;
-	bool (*stream_memory_free)(const struct sock *, int);
-	bool (*stream_memory_read)(const struct sock *);
-	void (*enter_memory_pressure)(struct sock *);
-	void (*leave_memory_pressure)(struct sock *);
-	atomic_long_t *memory_allocated;
-	struct percpu_counter *sockets_allocated;
-	long unsigned int *memory_pressure;
-	long int *sysctl_mem;
-	int *sysctl_wmem;
-	int *sysctl_rmem;
-	u32 sysctl_wmem_offset;
-	u32 sysctl_rmem_offset;
-	int max_header;
-	bool no_autobind;
-	struct kmem_cache *slab;
-	unsigned int obj_size;
-	slab_flags_t slab_flags;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct percpu_counter *orphan_count;
-	struct request_sock_ops *rsk_prot;
-	struct timewait_sock_ops *twsk_prot;
-	union {
-		struct inet_hashinfo *hashinfo;
-		struct udp_table *udp_table;
-		struct raw_hashinfo *raw_hash;
-		struct smc_hashinfo *smc_hash;
-	} h;
-	struct module *owner;
-	char name[32];
-	struct list_head node;
-	int (*diag_destroy)(struct sock *, int);
-};
-
-struct request_sock;
-
-struct request_sock_ops {
-	int family;
-	unsigned int obj_size;
-	struct kmem_cache *slab;
-	char *slab_name;
-	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
-	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
-	void (*send_reset)(const struct sock *, struct sk_buff *);
-	void (*destructor)(struct request_sock *);
-	void (*syn_ack_timeout)(const struct request_sock *);
-};
-
-struct timewait_sock_ops {
-	struct kmem_cache *twsk_slab;
-	char *twsk_slab_name;
-	unsigned int twsk_obj_size;
-	int (*twsk_unique)(struct sock *, struct sock *, void *);
-	void (*twsk_destructor)(struct sock *);
-};
-
-struct saved_syn;
-
-struct request_sock {
-	struct sock_common __req_common;
-	struct request_sock *dl_next;
-	u16 mss;
-	u8 num_retrans;
-	u8 syncookie: 1;
-	u8 num_timeout: 7;
-	u32 ts_recent;
-	struct timer_list rsk_timer;
-	const struct request_sock_ops *rsk_ops;
-	struct sock *sk;
-	struct saved_syn *saved_syn;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct saved_syn {
-	u32 mac_hdrlen;
-	u32 network_hdrlen;
-	u32 tcp_hdrlen;
-	u8 data[0];
-};
-
-enum tsq_enum {
-	TSQ_THROTTLED = 0,
-	TSQ_QUEUED = 1,
-	TCP_TSQ_DEFERRED = 2,
-	TCP_WRITE_TIMER_DEFERRED = 3,
-	TCP_DELACK_TIMER_DEFERRED = 4,
-	TCP_MTU_REDUCED_DEFERRED = 5,
-};
-
-struct ip6_sf_list {
-	struct ip6_sf_list *sf_next;
-	struct in6_addr sf_addr;
-	long unsigned int sf_count[2];
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ifmcaddr6 {
-	struct in6_addr mca_addr;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *next;
-	struct ip6_sf_list *mca_sources;
-	struct ip6_sf_list *mca_tomb;
-	unsigned int mca_sfmode;
-	unsigned char mca_crcount;
-	long unsigned int mca_sfcount[2];
-	struct timer_list mca_timer;
-	unsigned int mca_flags;
-	int mca_users;
-	refcount_t mca_refcnt;
-	spinlock_t mca_lock;
-	long unsigned int mca_cstamp;
-	long unsigned int mca_tstamp;
-};
-
-struct ifacaddr6 {
-	struct in6_addr aca_addr;
-	struct fib6_info *aca_rt;
-	struct ifacaddr6 *aca_next;
-	struct hlist_node aca_addr_lst;
-	int aca_users;
-	refcount_t aca_refcnt;
-	long unsigned int aca_cstamp;
-	long unsigned int aca_tstamp;
-	struct callback_head rcu;
-};
-
-enum {
-	__ND_OPT_PREFIX_INFO_END = 0,
-	ND_OPT_SOURCE_LL_ADDR = 1,
-	ND_OPT_TARGET_LL_ADDR = 2,
-	ND_OPT_PREFIX_INFO = 3,
-	ND_OPT_REDIRECT_HDR = 4,
-	ND_OPT_MTU = 5,
-	ND_OPT_NONCE = 14,
-	__ND_OPT_ARRAY_MAX = 15,
-	ND_OPT_ROUTE_INFO = 24,
-	ND_OPT_RDNSS = 25,
-	ND_OPT_DNSSL = 31,
-	ND_OPT_6CO = 34,
-	ND_OPT_CAPTIVE_PORTAL = 37,
-	ND_OPT_PREF64 = 38,
-	__ND_OPT_MAX = 39,
-};
-
-struct nd_opt_hdr {
-	__u8 nd_opt_type;
-	__u8 nd_opt_len;
-};
-
-struct ndisc_options {
-	struct nd_opt_hdr *nd_opt_array[15];
-	struct nd_opt_hdr *nd_opts_ri;
-	struct nd_opt_hdr *nd_opts_ri_end;
-	struct nd_opt_hdr *nd_useropts;
-	struct nd_opt_hdr *nd_useropts_end;
-	struct nd_opt_hdr *nd_802154_opt_array[3];
-};
-
-struct prefix_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved: 6;
-	__u8 autoconf: 1;
-	__u8 onlink: 1;
-	__be32 valid;
-	__be32 prefered;
-	__be32 reserved2;
-	struct in6_addr prefix;
-};
-
-enum nfs_opnum4 {
-	OP_ACCESS = 3,
-	OP_CLOSE = 4,
-	OP_COMMIT = 5,
-	OP_CREATE = 6,
-	OP_DELEGPURGE = 7,
-	OP_DELEGRETURN = 8,
-	OP_GETATTR = 9,
-	OP_GETFH = 10,
-	OP_LINK = 11,
-	OP_LOCK = 12,
-	OP_LOCKT = 13,
-	OP_LOCKU = 14,
-	OP_LOOKUP = 15,
-	OP_LOOKUPP = 16,
-	OP_NVERIFY = 17,
-	OP_OPEN = 18,
-	OP_OPENATTR = 19,
-	OP_OPEN_CONFIRM = 20,
-	OP_OPEN_DOWNGRADE = 21,
-	OP_PUTFH = 22,
-	OP_PUTPUBFH = 23,
-	OP_PUTROOTFH = 24,
-	OP_READ = 25,
-	OP_READDIR = 26,
-	OP_READLINK = 27,
-	OP_REMOVE = 28,
-	OP_RENAME = 29,
-	OP_RENEW = 30,
-	OP_RESTOREFH = 31,
-	OP_SAVEFH = 32,
-	OP_SECINFO = 33,
-	OP_SETATTR = 34,
-	OP_SETCLIENTID = 35,
-	OP_SETCLIENTID_CONFIRM = 36,
-	OP_VERIFY = 37,
-	OP_WRITE = 38,
-	OP_RELEASE_LOCKOWNER = 39,
-	OP_BACKCHANNEL_CTL = 40,
-	OP_BIND_CONN_TO_SESSION = 41,
-	OP_EXCHANGE_ID = 42,
-	OP_CREATE_SESSION = 43,
-	OP_DESTROY_SESSION = 44,
-	OP_FREE_STATEID = 45,
-	OP_GET_DIR_DELEGATION = 46,
-	OP_GETDEVICEINFO = 47,
-	OP_GETDEVICELIST = 48,
-	OP_LAYOUTCOMMIT = 49,
-	OP_LAYOUTGET = 50,
-	OP_LAYOUTRETURN = 51,
-	OP_SECINFO_NO_NAME = 52,
-	OP_SEQUENCE = 53,
-	OP_SET_SSV = 54,
-	OP_TEST_STATEID = 55,
-	OP_WANT_DELEGATION = 56,
-	OP_DESTROY_CLIENTID = 57,
-	OP_RECLAIM_COMPLETE = 58,
-	OP_ALLOCATE = 59,
-	OP_COPY = 60,
-	OP_COPY_NOTIFY = 61,
-	OP_DEALLOCATE = 62,
-	OP_IO_ADVISE = 63,
-	OP_LAYOUTERROR = 64,
-	OP_LAYOUTSTATS = 65,
-	OP_OFFLOAD_CANCEL = 66,
-	OP_OFFLOAD_STATUS = 67,
-	OP_READ_PLUS = 68,
-	OP_SEEK = 69,
-	OP_WRITE_SAME = 70,
-	OP_CLONE = 71,
-	OP_GETXATTR = 72,
-	OP_SETXATTR = 73,
-	OP_LISTXATTRS = 74,
-	OP_REMOVEXATTR = 75,
-	OP_ILLEGAL = 10044,
-};
-
-enum {
-	UNAME26 = 131072,
-	ADDR_NO_RANDOMIZE = 262144,
-	FDPIC_FUNCPTRS = 524288,
-	MMAP_PAGE_ZERO = 1048576,
-	ADDR_COMPAT_LAYOUT = 2097152,
-	READ_IMPLIES_EXEC = 4194304,
-	ADDR_LIMIT_32BIT = 8388608,
-	SHORT_INODE = 16777216,
-	WHOLE_SECONDS = 33554432,
-	STICKY_TIMEOUTS = 67108864,
-	ADDR_LIMIT_3GB = 134217728,
-};
-
-enum perf_hw_cache_id {
-	PERF_COUNT_HW_CACHE_L1D = 0,
-	PERF_COUNT_HW_CACHE_L1I = 1,
-	PERF_COUNT_HW_CACHE_LL = 2,
-	PERF_COUNT_HW_CACHE_DTLB = 3,
-	PERF_COUNT_HW_CACHE_ITLB = 4,
-	PERF_COUNT_HW_CACHE_BPU = 5,
-	PERF_COUNT_HW_CACHE_NODE = 6,
-	PERF_COUNT_HW_CACHE_MAX = 7,
-};
-
-enum perf_hw_cache_op_id {
-	PERF_COUNT_HW_CACHE_OP_READ = 0,
-	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
-	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
-	PERF_COUNT_HW_CACHE_OP_MAX = 3,
-};
-
-enum perf_hw_cache_op_result_id {
-	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
-	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
-	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
-};
-
-enum perf_branch_sample_type_shift {
-	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
-	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
-	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
-	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
-	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
-	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
-	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
-	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
-	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
-	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
-	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
-	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
-	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
-	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
-	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
-	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
-	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
-	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
-};
-
-enum {
-	TSK_TRACE_FL_TRACE_BIT = 0,
-	TSK_TRACE_FL_GRAPH_BIT = 1,
-};
-
-struct uuidcmp {
-	const char *uuid;
-	int len;
-};
-
-typedef __u64 __le64;
-
-struct minix_super_block {
-	__u16 s_ninodes;
-	__u16 s_nzones;
-	__u16 s_imap_blocks;
-	__u16 s_zmap_blocks;
-	__u16 s_firstdatazone;
-	__u16 s_log_zone_size;
-	__u32 s_max_size;
-	__u16 s_magic;
-	__u16 s_state;
-	__u32 s_zones;
-};
-
-struct romfs_super_block {
-	__be32 word0;
-	__be32 word1;
-	__be32 size;
-	__be32 checksum;
-	char name[0];
-};
-
-struct cramfs_inode {
-	__u32 mode: 16;
-	__u32 uid: 16;
-	__u32 size: 24;
-	__u32 gid: 8;
-	__u32 namelen: 6;
-	__u32 offset: 26;
-};
-
-struct cramfs_info {
-	__u32 crc;
-	__u32 edition;
-	__u32 blocks;
-	__u32 files;
-};
-
-struct cramfs_super {
-	__u32 magic;
-	__u32 size;
-	__u32 flags;
-	__u32 future;
-	__u8 signature[16];
-	struct cramfs_info fsid;
-	__u8 name[16];
-	struct cramfs_inode root;
-};
-
-struct squashfs_super_block {
-	__le32 s_magic;
-	__le32 inodes;
-	__le32 mkfs_time;
-	__le32 block_size;
-	__le32 fragments;
-	__le16 compression;
-	__le16 block_log;
-	__le16 flags;
-	__le16 no_ids;
-	__le16 s_major;
-	__le16 s_minor;
-	__le64 root_inode;
-	__le64 bytes_used;
-	__le64 id_table_start;
-	__le64 xattr_id_table_start;
-	__le64 inode_table_start;
-	__le64 directory_table_start;
-	__le64 fragment_table_start;
-	__le64 lookup_table_start;
-};
-
-typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
-
-struct subprocess_info {
-	struct work_struct work;
-	struct completion *complete;
-	const char *path;
-	char **argv;
-	char **envp;
-	int wait;
-	int retval;
-	int (*init)(struct subprocess_info *, struct cred *);
-	void (*cleanup)(struct subprocess_info *);
-	void *data;
-};
-
-typedef phys_addr_t resource_size_t;
-
-struct resource {
-	resource_size_t start;
-	resource_size_t end;
-	const char *name;
-	long unsigned int flags;
-	long unsigned int desc;
-	struct resource *parent;
-	struct resource *sibling;
-	struct resource *child;
-};
-
-struct hash {
-	int ino;
-	int minor;
-	int major;
-	umode_t mode;
-	struct hash *next;
-	char name[4098];
-};
-
-struct dir_entry {
-	struct list_head list;
-	char *name;
-	time64_t mtime;
-};
-
-enum state {
-	Start = 0,
-	Collect = 1,
-	GotHeader = 2,
-	SkipIt = 3,
-	GotName = 4,
-	CopyFile = 5,
-	GotSymlink = 6,
-	Reset = 7,
-};
-
-enum ucount_type {
-	UCOUNT_USER_NAMESPACES = 0,
-	UCOUNT_PID_NAMESPACES = 1,
-	UCOUNT_UTS_NAMESPACES = 2,
-	UCOUNT_IPC_NAMESPACES = 3,
-	UCOUNT_NET_NAMESPACES = 4,
-	UCOUNT_MNT_NAMESPACES = 5,
-	UCOUNT_CGROUP_NAMESPACES = 6,
-	UCOUNT_TIME_NAMESPACES = 7,
-	UCOUNT_INOTIFY_INSTANCES = 8,
-	UCOUNT_INOTIFY_WATCHES = 9,
-	UCOUNT_COUNTS = 10,
-};
-
-enum flow_dissector_key_id {
-	FLOW_DISSECTOR_KEY_CONTROL = 0,
-	FLOW_DISSECTOR_KEY_BASIC = 1,
-	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
-	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
-	FLOW_DISSECTOR_KEY_PORTS = 4,
-	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
-	FLOW_DISSECTOR_KEY_ICMP = 6,
-	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
-	FLOW_DISSECTOR_KEY_TIPC = 8,
-	FLOW_DISSECTOR_KEY_ARP = 9,
-	FLOW_DISSECTOR_KEY_VLAN = 10,
-	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
-	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
-	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
-	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
-	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
-	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
-	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
-	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
-	FLOW_DISSECTOR_KEY_MPLS = 19,
-	FLOW_DISSECTOR_KEY_TCP = 20,
-	FLOW_DISSECTOR_KEY_IP = 21,
-	FLOW_DISSECTOR_KEY_CVLAN = 22,
-	FLOW_DISSECTOR_KEY_ENC_IP = 23,
-	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
-	FLOW_DISSECTOR_KEY_META = 25,
-	FLOW_DISSECTOR_KEY_CT = 26,
-	FLOW_DISSECTOR_KEY_HASH = 27,
-	FLOW_DISSECTOR_KEY_MAX = 28,
-};
-
-enum {
-	IPSTATS_MIB_NUM = 0,
-	IPSTATS_MIB_INPKTS = 1,
-	IPSTATS_MIB_INOCTETS = 2,
-	IPSTATS_MIB_INDELIVERS = 3,
-	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
-	IPSTATS_MIB_OUTPKTS = 5,
-	IPSTATS_MIB_OUTOCTETS = 6,
-	IPSTATS_MIB_INHDRERRORS = 7,
-	IPSTATS_MIB_INTOOBIGERRORS = 8,
-	IPSTATS_MIB_INNOROUTES = 9,
-	IPSTATS_MIB_INADDRERRORS = 10,
-	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
-	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
-	IPSTATS_MIB_INDISCARDS = 13,
-	IPSTATS_MIB_OUTDISCARDS = 14,
-	IPSTATS_MIB_OUTNOROUTES = 15,
-	IPSTATS_MIB_REASMTIMEOUT = 16,
-	IPSTATS_MIB_REASMREQDS = 17,
-	IPSTATS_MIB_REASMOKS = 18,
-	IPSTATS_MIB_REASMFAILS = 19,
-	IPSTATS_MIB_FRAGOKS = 20,
-	IPSTATS_MIB_FRAGFAILS = 21,
-	IPSTATS_MIB_FRAGCREATES = 22,
-	IPSTATS_MIB_INMCASTPKTS = 23,
-	IPSTATS_MIB_OUTMCASTPKTS = 24,
-	IPSTATS_MIB_INBCASTPKTS = 25,
-	IPSTATS_MIB_OUTBCASTPKTS = 26,
-	IPSTATS_MIB_INMCASTOCTETS = 27,
-	IPSTATS_MIB_OUTMCASTOCTETS = 28,
-	IPSTATS_MIB_INBCASTOCTETS = 29,
-	IPSTATS_MIB_OUTBCASTOCTETS = 30,
-	IPSTATS_MIB_CSUMERRORS = 31,
-	IPSTATS_MIB_NOECTPKTS = 32,
-	IPSTATS_MIB_ECT1PKTS = 33,
-	IPSTATS_MIB_ECT0PKTS = 34,
-	IPSTATS_MIB_CEPKTS = 35,
-	IPSTATS_MIB_REASM_OVERLAPS = 36,
-	__IPSTATS_MIB_MAX = 37,
-};
-
-enum {
-	ICMP_MIB_NUM = 0,
-	ICMP_MIB_INMSGS = 1,
-	ICMP_MIB_INERRORS = 2,
-	ICMP_MIB_INDESTUNREACHS = 3,
-	ICMP_MIB_INTIMEEXCDS = 4,
-	ICMP_MIB_INPARMPROBS = 5,
-	ICMP_MIB_INSRCQUENCHS = 6,
-	ICMP_MIB_INREDIRECTS = 7,
-	ICMP_MIB_INECHOS = 8,
-	ICMP_MIB_INECHOREPS = 9,
-	ICMP_MIB_INTIMESTAMPS = 10,
-	ICMP_MIB_INTIMESTAMPREPS = 11,
-	ICMP_MIB_INADDRMASKS = 12,
-	ICMP_MIB_INADDRMASKREPS = 13,
-	ICMP_MIB_OUTMSGS = 14,
-	ICMP_MIB_OUTERRORS = 15,
-	ICMP_MIB_OUTDESTUNREACHS = 16,
-	ICMP_MIB_OUTTIMEEXCDS = 17,
-	ICMP_MIB_OUTPARMPROBS = 18,
-	ICMP_MIB_OUTSRCQUENCHS = 19,
-	ICMP_MIB_OUTREDIRECTS = 20,
-	ICMP_MIB_OUTECHOS = 21,
-	ICMP_MIB_OUTECHOREPS = 22,
-	ICMP_MIB_OUTTIMESTAMPS = 23,
-	ICMP_MIB_OUTTIMESTAMPREPS = 24,
-	ICMP_MIB_OUTADDRMASKS = 25,
-	ICMP_MIB_OUTADDRMASKREPS = 26,
-	ICMP_MIB_CSUMERRORS = 27,
-	__ICMP_MIB_MAX = 28,
-};
-
-enum {
-	ICMP6_MIB_NUM = 0,
-	ICMP6_MIB_INMSGS = 1,
-	ICMP6_MIB_INERRORS = 2,
-	ICMP6_MIB_OUTMSGS = 3,
-	ICMP6_MIB_OUTERRORS = 4,
-	ICMP6_MIB_CSUMERRORS = 5,
-	__ICMP6_MIB_MAX = 6,
-};
-
-enum {
-	TCP_MIB_NUM = 0,
-	TCP_MIB_RTOALGORITHM = 1,
-	TCP_MIB_RTOMIN = 2,
-	TCP_MIB_RTOMAX = 3,
-	TCP_MIB_MAXCONN = 4,
-	TCP_MIB_ACTIVEOPENS = 5,
-	TCP_MIB_PASSIVEOPENS = 6,
-	TCP_MIB_ATTEMPTFAILS = 7,
-	TCP_MIB_ESTABRESETS = 8,
-	TCP_MIB_CURRESTAB = 9,
-	TCP_MIB_INSEGS = 10,
-	TCP_MIB_OUTSEGS = 11,
-	TCP_MIB_RETRANSSEGS = 12,
-	TCP_MIB_INERRS = 13,
-	TCP_MIB_OUTRSTS = 14,
-	TCP_MIB_CSUMERRORS = 15,
-	__TCP_MIB_MAX = 16,
-};
-
-enum {
-	UDP_MIB_NUM = 0,
-	UDP_MIB_INDATAGRAMS = 1,
-	UDP_MIB_NOPORTS = 2,
-	UDP_MIB_INERRORS = 3,
-	UDP_MIB_OUTDATAGRAMS = 4,
-	UDP_MIB_RCVBUFERRORS = 5,
-	UDP_MIB_SNDBUFERRORS = 6,
-	UDP_MIB_CSUMERRORS = 7,
-	UDP_MIB_IGNOREDMULTI = 8,
-	__UDP_MIB_MAX = 9,
-};
-
-enum {
-	LINUX_MIB_NUM = 0,
-	LINUX_MIB_SYNCOOKIESSENT = 1,
-	LINUX_MIB_SYNCOOKIESRECV = 2,
-	LINUX_MIB_SYNCOOKIESFAILED = 3,
-	LINUX_MIB_EMBRYONICRSTS = 4,
-	LINUX_MIB_PRUNECALLED = 5,
-	LINUX_MIB_RCVPRUNED = 6,
-	LINUX_MIB_OFOPRUNED = 7,
-	LINUX_MIB_OUTOFWINDOWICMPS = 8,
-	LINUX_MIB_LOCKDROPPEDICMPS = 9,
-	LINUX_MIB_ARPFILTER = 10,
-	LINUX_MIB_TIMEWAITED = 11,
-	LINUX_MIB_TIMEWAITRECYCLED = 12,
-	LINUX_MIB_TIMEWAITKILLED = 13,
-	LINUX_MIB_PAWSACTIVEREJECTED = 14,
-	LINUX_MIB_PAWSESTABREJECTED = 15,
-	LINUX_MIB_DELAYEDACKS = 16,
-	LINUX_MIB_DELAYEDACKLOCKED = 17,
-	LINUX_MIB_DELAYEDACKLOST = 18,
-	LINUX_MIB_LISTENOVERFLOWS = 19,
-	LINUX_MIB_LISTENDROPS = 20,
-	LINUX_MIB_TCPHPHITS = 21,
-	LINUX_MIB_TCPPUREACKS = 22,
-	LINUX_MIB_TCPHPACKS = 23,
-	LINUX_MIB_TCPRENORECOVERY = 24,
-	LINUX_MIB_TCPSACKRECOVERY = 25,
-	LINUX_MIB_TCPSACKRENEGING = 26,
-	LINUX_MIB_TCPSACKREORDER = 27,
-	LINUX_MIB_TCPRENOREORDER = 28,
-	LINUX_MIB_TCPTSREORDER = 29,
-	LINUX_MIB_TCPFULLUNDO = 30,
-	LINUX_MIB_TCPPARTIALUNDO = 31,
-	LINUX_MIB_TCPDSACKUNDO = 32,
-	LINUX_MIB_TCPLOSSUNDO = 33,
-	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
-	LINUX_MIB_TCPRENOFAILURES = 35,
-	LINUX_MIB_TCPSACKFAILURES = 36,
-	LINUX_MIB_TCPLOSSFAILURES = 37,
-	LINUX_MIB_TCPFASTRETRANS = 38,
-	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
-	LINUX_MIB_TCPTIMEOUTS = 40,
-	LINUX_MIB_TCPLOSSPROBES = 41,
-	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
-	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
-	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
-	LINUX_MIB_TCPRCVCOLLAPSED = 45,
-	LINUX_MIB_TCPDSACKOLDSENT = 46,
-	LINUX_MIB_TCPDSACKOFOSENT = 47,
-	LINUX_MIB_TCPDSACKRECV = 48,
-	LINUX_MIB_TCPDSACKOFORECV = 49,
-	LINUX_MIB_TCPABORTONDATA = 50,
-	LINUX_MIB_TCPABORTONCLOSE = 51,
-	LINUX_MIB_TCPABORTONMEMORY = 52,
-	LINUX_MIB_TCPABORTONTIMEOUT = 53,
-	LINUX_MIB_TCPABORTONLINGER = 54,
-	LINUX_MIB_TCPABORTFAILED = 55,
-	LINUX_MIB_TCPMEMORYPRESSURES = 56,
-	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
-	LINUX_MIB_TCPSACKDISCARD = 58,
-	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
-	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
-	LINUX_MIB_TCPSPURIOUSRTOS = 61,
-	LINUX_MIB_TCPMD5NOTFOUND = 62,
-	LINUX_MIB_TCPMD5UNEXPECTED = 63,
-	LINUX_MIB_TCPMD5FAILURE = 64,
-	LINUX_MIB_SACKSHIFTED = 65,
-	LINUX_MIB_SACKMERGED = 66,
-	LINUX_MIB_SACKSHIFTFALLBACK = 67,
-	LINUX_MIB_TCPBACKLOGDROP = 68,
-	LINUX_MIB_PFMEMALLOCDROP = 69,
-	LINUX_MIB_TCPMINTTLDROP = 70,
-	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
-	LINUX_MIB_IPRPFILTER = 72,
-	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
-	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
-	LINUX_MIB_TCPREQQFULLDROP = 75,
-	LINUX_MIB_TCPRETRANSFAIL = 76,
-	LINUX_MIB_TCPRCVCOALESCE = 77,
-	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
-	LINUX_MIB_TCPOFOQUEUE = 79,
-	LINUX_MIB_TCPOFODROP = 80,
-	LINUX_MIB_TCPOFOMERGE = 81,
-	LINUX_MIB_TCPCHALLENGEACK = 82,
-	LINUX_MIB_TCPSYNCHALLENGE = 83,
-	LINUX_MIB_TCPFASTOPENACTIVE = 84,
-	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
-	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
-	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
-	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
-	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
-	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
-	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
-	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
-	LINUX_MIB_TCPAUTOCORKING = 93,
-	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
-	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
-	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
-	LINUX_MIB_TCPSYNRETRANS = 97,
-	LINUX_MIB_TCPORIGDATASENT = 98,
-	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
-	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
-	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
-	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
-	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
-	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
-	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
-	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
-	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
-	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
-	LINUX_MIB_TCPWINPROBE = 109,
-	LINUX_MIB_TCPKEEPALIVE = 110,
-	LINUX_MIB_TCPMTUPFAIL = 111,
-	LINUX_MIB_TCPMTUPSUCCESS = 112,
-	LINUX_MIB_TCPDELIVERED = 113,
-	LINUX_MIB_TCPDELIVEREDCE = 114,
-	LINUX_MIB_TCPACKCOMPRESSED = 115,
-	LINUX_MIB_TCPZEROWINDOWDROP = 116,
-	LINUX_MIB_TCPRCVQDROP = 117,
-	LINUX_MIB_TCPWQUEUETOOBIG = 118,
-	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
-	LINUX_MIB_TCPTIMEOUTREHASH = 120,
-	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
-	LINUX_MIB_TCPDSACKRECVSEGS = 122,
-	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
-	__LINUX_MIB_MAX = 124,
-};
-
-enum {
-	LINUX_MIB_XFRMNUM = 0,
-	LINUX_MIB_XFRMINERROR = 1,
-	LINUX_MIB_XFRMINBUFFERERROR = 2,
-	LINUX_MIB_XFRMINHDRERROR = 3,
-	LINUX_MIB_XFRMINNOSTATES = 4,
-	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
-	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
-	LINUX_MIB_XFRMINSTATESEQERROR = 7,
-	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
-	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
-	LINUX_MIB_XFRMINSTATEINVALID = 10,
-	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
-	LINUX_MIB_XFRMINNOPOLS = 12,
-	LINUX_MIB_XFRMINPOLBLOCK = 13,
-	LINUX_MIB_XFRMINPOLERROR = 14,
-	LINUX_MIB_XFRMOUTERROR = 15,
-	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
-	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
-	LINUX_MIB_XFRMOUTNOSTATES = 18,
-	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
-	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
-	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
-	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
-	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
-	LINUX_MIB_XFRMOUTPOLDEAD = 24,
-	LINUX_MIB_XFRMOUTPOLERROR = 25,
-	LINUX_MIB_XFRMFWDHDRERROR = 26,
-	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
-	LINUX_MIB_XFRMACQUIREERROR = 28,
-	__LINUX_MIB_XFRMMAX = 29,
-};
-
-enum {
-	LINUX_MIB_TLSNUM = 0,
-	LINUX_MIB_TLSCURRTXSW = 1,
-	LINUX_MIB_TLSCURRRXSW = 2,
-	LINUX_MIB_TLSCURRTXDEVICE = 3,
-	LINUX_MIB_TLSCURRRXDEVICE = 4,
-	LINUX_MIB_TLSTXSW = 5,
-	LINUX_MIB_TLSRXSW = 6,
-	LINUX_MIB_TLSTXDEVICE = 7,
-	LINUX_MIB_TLSRXDEVICE = 8,
-	LINUX_MIB_TLSDECRYPTERROR = 9,
-	LINUX_MIB_TLSRXDEVICERESYNC = 10,
-	__LINUX_MIB_TLSMAX = 11,
-};
-
-enum nf_inet_hooks {
-	NF_INET_PRE_ROUTING = 0,
-	NF_INET_LOCAL_IN = 1,
-	NF_INET_FORWARD = 2,
-	NF_INET_LOCAL_OUT = 3,
-	NF_INET_POST_ROUTING = 4,
-	NF_INET_NUMHOOKS = 5,
-	NF_INET_INGRESS = 5,
-};
-
-enum {
-	NFPROTO_UNSPEC = 0,
-	NFPROTO_INET = 1,
-	NFPROTO_IPV4 = 2,
-	NFPROTO_ARP = 3,
-	NFPROTO_NETDEV = 5,
-	NFPROTO_BRIDGE = 7,
-	NFPROTO_IPV6 = 10,
-	NFPROTO_DECNET = 12,
-	NFPROTO_NUMPROTO = 13,
-};
-
-enum tcp_conntrack {
-	TCP_CONNTRACK_NONE = 0,
-	TCP_CONNTRACK_SYN_SENT = 1,
-	TCP_CONNTRACK_SYN_RECV = 2,
-	TCP_CONNTRACK_ESTABLISHED = 3,
-	TCP_CONNTRACK_FIN_WAIT = 4,
-	TCP_CONNTRACK_CLOSE_WAIT = 5,
-	TCP_CONNTRACK_LAST_ACK = 6,
-	TCP_CONNTRACK_TIME_WAIT = 7,
-	TCP_CONNTRACK_CLOSE = 8,
-	TCP_CONNTRACK_LISTEN = 9,
-	TCP_CONNTRACK_MAX = 10,
-	TCP_CONNTRACK_IGNORE = 11,
-	TCP_CONNTRACK_RETRANS = 12,
-	TCP_CONNTRACK_UNACK = 13,
-	TCP_CONNTRACK_TIMEOUT_MAX = 14,
-};
-
-enum ct_dccp_states {
-	CT_DCCP_NONE = 0,
-	CT_DCCP_REQUEST = 1,
-	CT_DCCP_RESPOND = 2,
-	CT_DCCP_PARTOPEN = 3,
-	CT_DCCP_OPEN = 4,
-	CT_DCCP_CLOSEREQ = 5,
-	CT_DCCP_CLOSING = 6,
-	CT_DCCP_TIMEWAIT = 7,
-	CT_DCCP_IGNORE = 8,
-	CT_DCCP_INVALID = 9,
-	__CT_DCCP_MAX = 10,
-};
-
-enum ip_conntrack_dir {
-	IP_CT_DIR_ORIGINAL = 0,
-	IP_CT_DIR_REPLY = 1,
-	IP_CT_DIR_MAX = 2,
-};
-
-enum sctp_conntrack {
-	SCTP_CONNTRACK_NONE = 0,
-	SCTP_CONNTRACK_CLOSED = 1,
-	SCTP_CONNTRACK_COOKIE_WAIT = 2,
-	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
-	SCTP_CONNTRACK_ESTABLISHED = 4,
-	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
-	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
-	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
-	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
-	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
-	SCTP_CONNTRACK_MAX = 10,
-};
-
-enum udp_conntrack {
-	UDP_CT_UNREPLIED = 0,
-	UDP_CT_REPLIED = 1,
-	UDP_CT_MAX = 2,
-};
-
-enum gre_conntrack {
-	GRE_CT_UNREPLIED = 0,
-	GRE_CT_REPLIED = 1,
-	GRE_CT_MAX = 2,
-};
-
-enum {
-	XFRM_POLICY_IN = 0,
-	XFRM_POLICY_OUT = 1,
-	XFRM_POLICY_FWD = 2,
-	XFRM_POLICY_MASK = 3,
-	XFRM_POLICY_MAX = 3,
-};
-
-enum netns_bpf_attach_type {
-	NETNS_BPF_INVALID = 4294967295,
-	NETNS_BPF_FLOW_DISSECTOR = 0,
-	NETNS_BPF_SK_LOOKUP = 1,
-	MAX_NETNS_BPF_ATTACH_TYPE = 2,
-};
-
-enum skb_ext_id {
-	SKB_EXT_BRIDGE_NF = 0,
-	SKB_EXT_SEC_PATH = 1,
-	TC_SKB_EXT = 2,
-	SKB_EXT_MPTCP = 3,
-	SKB_EXT_NUM = 4,
-};
-
-enum audit_ntp_type {
-	AUDIT_NTP_OFFSET = 0,
-	AUDIT_NTP_FREQ = 1,
-	AUDIT_NTP_STATUS = 2,
-	AUDIT_NTP_TAI = 3,
-	AUDIT_NTP_TICK = 4,
-	AUDIT_NTP_ADJUST = 5,
-	AUDIT_NTP_NVALS = 6,
-};
-
-struct cpu_spec;
-
-typedef void (*cpu_setup_t)(long unsigned int, struct cpu_spec *);
-
-enum powerpc_pmc_type {
-	PPC_PMC_DEFAULT = 0,
-	PPC_PMC_IBM = 1,
-	PPC_PMC_PA6T = 2,
-	PPC_PMC_G4 = 3,
-};
-
-typedef void (*cpu_restore_t)();
-
-enum powerpc_oprofile_type {
-	PPC_OPROFILE_INVALID = 0,
-	PPC_OPROFILE_RS64 = 1,
-	PPC_OPROFILE_POWER4 = 2,
-	PPC_OPROFILE_G4 = 3,
-	PPC_OPROFILE_FSL_EMB = 4,
-	PPC_OPROFILE_CELL = 5,
-	PPC_OPROFILE_PA6T = 6,
-};
-
-struct cpu_spec {
-	unsigned int pvr_mask;
-	unsigned int pvr_value;
-	char *cpu_name;
-	long unsigned int cpu_features;
-	unsigned int cpu_user_features;
-	unsigned int cpu_user_features2;
-	unsigned int mmu_features;
-	unsigned int icache_bsize;
-	unsigned int dcache_bsize;
-	void (*cpu_down_flush)();
-	unsigned int num_pmcs;
-	enum powerpc_pmc_type pmc_type;
-	cpu_setup_t cpu_setup;
-	cpu_restore_t cpu_restore;
-	char *oprofile_cpu_type;
-	enum powerpc_oprofile_type oprofile_type;
-	long unsigned int oprofile_mmcra_sihv;
-	long unsigned int oprofile_mmcra_sipr;
-	long unsigned int oprofile_mmcra_clear;
-	char *platform;
-	int (*machine_check)(struct pt_regs *);
-	long int (*machine_check_early)(struct pt_regs *);
-};
-
-struct static_key_true {
-	struct static_key key;
-};
-
-typedef __kernel_long_t __kernel_off_t;
-
-typedef __kernel_off_t off_t;
-
-enum {
-	FW_FEATURE_PSERIES_POSSIBLE = 3479175167,
-	FW_FEATURE_PSERIES_ALWAYS = 0,
-	FW_FEATURE_POWERNV_POSSIBLE = 268435456,
-	FW_FEATURE_POWERNV_ALWAYS = 0,
-	FW_FEATURE_PS3_POSSIBLE = 12582912,
-	FW_FEATURE_PS3_ALWAYS = 12582912,
-	FW_FEATURE_NATIVE_POSSIBLE = 0,
-	FW_FEATURE_NATIVE_ALWAYS = 0,
-	FW_FEATURE_POSSIBLE = 3747610623,
-	FW_FEATURE_ALWAYS = 0,
-};
-
-enum {
-	PER_LINUX = 0,
-	PER_LINUX_32BIT = 8388608,
-	PER_LINUX_FDPIC = 524288,
-	PER_SVR4 = 68157441,
-	PER_SVR3 = 83886082,
-	PER_SCOSVR3 = 117440515,
-	PER_OSR5 = 100663299,
-	PER_WYSEV386 = 83886084,
-	PER_ISCR4 = 67108869,
-	PER_BSD = 6,
-	PER_SUNOS = 67108870,
-	PER_XENIX = 83886087,
-	PER_LINUX32 = 8,
-	PER_LINUX32_3GB = 134217736,
-	PER_IRIX32 = 67108873,
-	PER_IRIXN32 = 67108874,
-	PER_IRIX64 = 67108875,
-	PER_RISCOS = 12,
-	PER_SOLARIS = 67108877,
-	PER_UW7 = 68157454,
-	PER_OSF4 = 15,
-	PER_HPUX = 16,
-	PER_MASK = 255,
-};
-
-enum {
-	EI_ETYPE_NONE = 0,
-	EI_ETYPE_NULL = 1,
-	EI_ETYPE_ERRNO = 2,
-	EI_ETYPE_ERRNO_NULL = 3,
-	EI_ETYPE_TRUE = 4,
-};
-
-struct syscall_metadata {
-	const char *name;
-	int syscall_nr;
-	int nb_args;
-	const char **types;
-	const char **args;
-	struct list_head enter_fields;
-	struct trace_event_call *enter_event;
-	struct trace_event_call *exit_event;
-};
-
-struct kvm;
-
-struct kvmppc_vcore {
-	int n_runnable;
-	int num_threads;
-	int entry_exit_map;
-	int napping_threads;
-	int first_vcpuid;
-	u16 pcpu;
-	u16 last_cpu;
-	u8 vcore_state;
-	u8 in_guest;
-	struct kvm_vcpu *runnable_threads[8];
-	struct list_head preempt_list;
-	spinlock_t lock;
-	struct rcuwait wait;
-	spinlock_t stoltb_lock;
-	u64 stolen_tb;
-	u64 preempt_tb;
-	struct kvm_vcpu *runner;
-	struct kvm *kvm;
-	u64 tb_offset;
-	u64 tb_offset_applied;
-	ulong lpcr;
-	u32 arch_compat;
-	ulong pcr;
-	ulong dpdes;
-	ulong vtb;
-	ulong conferring_threads;
-	unsigned int halt_poll_ns;
-	atomic_t online_count;
-};
-
-struct preempt_ops;
-
-struct preempt_notifier {
-	struct hlist_node link;
-	struct preempt_ops *ops;
-};
-
-struct kvm_vcpu_stat {
-	u64 sum_exits;
-	u64 mmio_exits;
-	u64 signal_exits;
-	u64 light_exits;
-	u64 itlb_real_miss_exits;
-	u64 itlb_virt_miss_exits;
-	u64 dtlb_real_miss_exits;
-	u64 dtlb_virt_miss_exits;
-	u64 syscall_exits;
-	u64 isi_exits;
-	u64 dsi_exits;
-	u64 emulated_inst_exits;
-	u64 dec_exits;
-	u64 ext_intr_exits;
-	u64 halt_poll_success_ns;
-	u64 halt_poll_fail_ns;
-	u64 halt_wait_ns;
-	u64 halt_successful_poll;
-	u64 halt_attempted_poll;
-	u64 halt_successful_wait;
-	u64 halt_poll_invalid;
-	u64 halt_wakeup;
-	u64 dbell_exits;
-	u64 gdbell_exits;
-	u64 ld;
-	u64 st;
-	u64 pf_storage;
-	u64 pf_instruc;
-	u64 sp_storage;
-	u64 sp_instruc;
-	u64 queue_intr;
-	u64 ld_slow;
-	u64 st_slow;
-	u64 pthru_all;
-	u64 pthru_host;
-	u64 pthru_bad_aff;
-};
-
-typedef u64 gpa_t;
-
-struct kvm_mmio_fragment {
-	gpa_t gpa;
-	void *data;
-	unsigned int len;
-};
-
-struct kvmppc_slb {
-	u64 esid;
-	u64 vsid;
-	u64 orige;
-	u64 origv;
-	bool valid: 1;
-	bool Ks: 1;
-	bool Kp: 1;
-	bool nx: 1;
-	bool large: 1;
-	bool tb: 1;
-	bool class: 1;
-	u8 base_page_size;
-};
-
-typedef long unsigned int gva_t;
-
-struct kvmppc_pte;
-
-struct kvmppc_mmu {
-	void (*slbmte)(struct kvm_vcpu *, u64, u64);
-	u64 (*slbmfee)(struct kvm_vcpu *, u64);
-	u64 (*slbmfev)(struct kvm_vcpu *, u64);
-	int (*slbfee)(struct kvm_vcpu *, gva_t, ulong *);
-	void (*slbie)(struct kvm_vcpu *, u64);
-	void (*slbia)(struct kvm_vcpu *);
-	void (*mtsrin)(struct kvm_vcpu *, u32, ulong);
-	u32 (*mfsrin)(struct kvm_vcpu *, u32);
-	int (*xlate)(struct kvm_vcpu *, gva_t, struct kvmppc_pte *, bool, bool);
-	void (*tlbie)(struct kvm_vcpu *, ulong, bool);
-	int (*esid_to_vsid)(struct kvm_vcpu *, ulong, u64 *);
-	u64 (*ea_to_vp)(struct kvm_vcpu *, gva_t, bool);
-	bool (*is_dcbz32)(struct kvm_vcpu *);
-};
-
-enum MCE_Version {
-	MCE_V1 = 1,
-};
-
-enum MCE_Severity {
-	MCE_SEV_NO_ERROR = 0,
-	MCE_SEV_WARNING = 1,
-	MCE_SEV_SEVERE = 2,
-	MCE_SEV_FATAL = 3,
-};
-
-enum MCE_Initiator {
-	MCE_INITIATOR_UNKNOWN = 0,
-	MCE_INITIATOR_CPU = 1,
-	MCE_INITIATOR_PCI = 2,
-	MCE_INITIATOR_ISA = 3,
-	MCE_INITIATOR_MEMORY = 4,
-	MCE_INITIATOR_POWERMGM = 5,
-};
-
-enum MCE_ErrorType {
-	MCE_ERROR_TYPE_UNKNOWN = 0,
-	MCE_ERROR_TYPE_UE = 1,
-	MCE_ERROR_TYPE_SLB = 2,
-	MCE_ERROR_TYPE_ERAT = 3,
-	MCE_ERROR_TYPE_TLB = 4,
-	MCE_ERROR_TYPE_USER = 5,
-	MCE_ERROR_TYPE_RA = 6,
-	MCE_ERROR_TYPE_LINK = 7,
-	MCE_ERROR_TYPE_DCACHE = 8,
-	MCE_ERROR_TYPE_ICACHE = 9,
-};
-
-enum MCE_ErrorClass {
-	MCE_ECLASS_UNKNOWN = 0,
-	MCE_ECLASS_HARDWARE = 1,
-	MCE_ECLASS_HARD_INDETERMINATE = 2,
-	MCE_ECLASS_SOFTWARE = 3,
-	MCE_ECLASS_SOFT_INDETERMINATE = 4,
-};
-
-enum MCE_Disposition {
-	MCE_DISPOSITION_RECOVERED = 0,
-	MCE_DISPOSITION_NOT_RECOVERED = 1,
-};
-
-enum MCE_UeErrorType {
-	MCE_UE_ERROR_INDETERMINATE = 0,
-	MCE_UE_ERROR_IFETCH = 1,
-	MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH = 2,
-	MCE_UE_ERROR_LOAD_STORE = 3,
-	MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 4,
-};
-
-enum MCE_SlbErrorType {
-	MCE_SLB_ERROR_INDETERMINATE = 0,
-	MCE_SLB_ERROR_PARITY = 1,
-	MCE_SLB_ERROR_MULTIHIT = 2,
-};
-
-enum MCE_EratErrorType {
-	MCE_ERAT_ERROR_INDETERMINATE = 0,
-	MCE_ERAT_ERROR_PARITY = 1,
-	MCE_ERAT_ERROR_MULTIHIT = 2,
-};
-
-enum MCE_TlbErrorType {
-	MCE_TLB_ERROR_INDETERMINATE = 0,
-	MCE_TLB_ERROR_PARITY = 1,
-	MCE_TLB_ERROR_MULTIHIT = 2,
-};
-
-enum MCE_UserErrorType {
-	MCE_USER_ERROR_INDETERMINATE = 0,
-	MCE_USER_ERROR_TLBIE = 1,
-	MCE_USER_ERROR_SCV = 2,
-};
-
-enum MCE_RaErrorType {
-	MCE_RA_ERROR_INDETERMINATE = 0,
-	MCE_RA_ERROR_IFETCH = 1,
-	MCE_RA_ERROR_IFETCH_FOREIGN = 2,
-	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH = 3,
-	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH_FOREIGN = 4,
-	MCE_RA_ERROR_LOAD = 5,
-	MCE_RA_ERROR_STORE = 6,
-	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 7,
-	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE_FOREIGN = 8,
-	MCE_RA_ERROR_LOAD_STORE_FOREIGN = 9,
-};
-
-enum MCE_LinkErrorType {
-	MCE_LINK_ERROR_INDETERMINATE = 0,
-	MCE_LINK_ERROR_IFETCH_TIMEOUT = 1,
-	MCE_LINK_ERROR_PAGE_TABLE_WALK_IFETCH_TIMEOUT = 2,
-	MCE_LINK_ERROR_LOAD_TIMEOUT = 3,
-	MCE_LINK_ERROR_STORE_TIMEOUT = 4,
-	MCE_LINK_ERROR_PAGE_TABLE_WALK_LOAD_STORE_TIMEOUT = 5,
-};
-
-struct machine_check_event {
-	enum MCE_Version version: 8;
-	u8 in_use;
-	enum MCE_Severity severity: 8;
-	enum MCE_Initiator initiator: 8;
-	enum MCE_ErrorType error_type: 8;
-	enum MCE_ErrorClass error_class: 8;
-	enum MCE_Disposition disposition: 8;
-	bool sync_error;
-	u16 cpu;
-	u64 gpr3;
-	u64 srr0;
-	u64 srr1;
-	union {
-		struct {
-			enum MCE_UeErrorType ue_error_type: 8;
-			u8 effective_address_provided;
-			u8 physical_address_provided;
-			u8 ignore_event;
-			u8 reserved_1[4];
-			u64 effective_address;
-			u64 physical_address;
-			u8 reserved_2[8];
-		} ue_error;
-		struct {
-			enum MCE_SlbErrorType slb_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} slb_error;
-		struct {
-			enum MCE_EratErrorType erat_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} erat_error;
-		struct {
-			enum MCE_TlbErrorType tlb_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} tlb_error;
-		struct {
-			enum MCE_UserErrorType user_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} user_error;
-		struct {
-			enum MCE_RaErrorType ra_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} ra_error;
-		struct {
-			enum MCE_LinkErrorType link_error_type: 8;
-			u8 effective_address_provided;
-			u8 reserved_1[6];
-			u64 effective_address;
-			u8 reserved_2[16];
-		} link_error;
-	} u;
-};
-
-struct openpic;
-
-union xive_tma_w01 {
-	struct {
-		u8 nsr;
-		u8 cppr;
-		u8 ipb;
-		u8 lsmfb;
-		u8 ack;
-		u8 inc;
-		u8 age;
-		u8 pipr;
-	};
-	__be64 w01;
-};
-
-struct kvm_vcpu_arch_shared {
-	__u64 scratch1;
-	__u64 scratch2;
-	__u64 scratch3;
-	__u64 critical;
-	__u64 sprg0;
-	__u64 sprg1;
-	__u64 sprg2;
-	__u64 sprg3;
-	__u64 srr0;
-	__u64 srr1;
-	__u64 dar;
-	__u64 msr;
-	__u32 dsisr;
-	__u32 int_pending;
-	__u32 sr[16];
-	__u32 mas0;
-	__u32 mas1;
-	__u64 mas7_3;
-	__u64 mas2;
-	__u32 mas4;
-	__u32 mas6;
-	__u32 esr;
-	__u32 pir;
-	__u64 sprg4;
-	__u64 sprg5;
-	__u64 sprg6;
-	__u64 sprg7;
-};
-
-struct mmio_hpte_cache_entry {
-	long unsigned int hpte_v;
-	long unsigned int hpte_r;
-	long unsigned int rpte;
-	long unsigned int pte_index;
-	long unsigned int eaddr;
-	long unsigned int slb_v;
-	long int mmio_update;
-	unsigned int slb_base_pshift;
-};
-
-struct mmio_hpte_cache {
-	struct mmio_hpte_cache_entry entry[4];
-	unsigned int index;
-};
-
-struct kvmppc_vpa {
-	long unsigned int gpa;
-	void *pinned_addr;
-	void *pinned_end;
-	long unsigned int next_gpa;
-	long unsigned int len;
-	u8 update_pending;
-	bool dirty;
-};
-
-struct kvmppc_vcpu_book3s;
-
-struct kvmppc_icp;
-
-struct kvmppc_xive_vcpu;
-
-struct kvm_nested_guest;
-
-struct kvm_vcpu_arch {
-	ulong host_stack;
-	u32 host_pid;
-	struct kvmppc_slb slb[64];
-	int slb_max;
-	int slb_nr;
-	struct kvmppc_mmu mmu;
-	struct kvmppc_vcpu_book3s *book3s;
-	struct pt_regs regs;
-	long: 64;
-	struct thread_fp_state fp;
-	struct thread_vr_state vr;
-	u32 qpr[32];
-	ulong tar;
-	ulong hflags;
-	ulong guest_owned_ext;
-	ulong purr;
-	ulong spurr;
-	ulong ic;
-	ulong dscr;
-	ulong amr;
-	ulong uamor;
-	ulong iamr;
-	u32 ctrl;
-	u32 dabrx;
-	ulong dabr;
-	ulong dawr;
-	ulong dawrx;
-	ulong ciabr;
-	ulong cfar;
-	ulong ppr;
-	u32 pspb;
-	ulong fscr;
-	ulong shadow_fscr;
-	ulong ebbhr;
-	ulong ebbrr;
-	ulong bescr;
-	ulong csigr;
-	ulong tacr;
-	ulong tcscr;
-	ulong acop;
-	ulong wort;
-	ulong tid;
-	ulong psscr;
-	ulong hfscr;
-	ulong shadow_srr1;
-	u32 vrsave;
-	u32 mmucr;
-	ulong shadow_msr;
-	ulong csrr0;
-	ulong csrr1;
-	ulong dsrr0;
-	ulong dsrr1;
-	ulong mcsrr0;
-	ulong mcsrr1;
-	ulong mcsr;
-	ulong dec;
-	u64 entry_tb;
-	u64 entry_vtb;
-	u64 entry_ic;
-	u32 tcr;
-	ulong tsr;
-	u32 ivor[64];
-	ulong ivpr;
-	u32 pvr;
-	u32 shadow_pid;
-	u32 shadow_pid1;
-	u32 pid;
-	u32 swap_pid;
-	u32 ccr0;
-	u32 ccr1;
-	u32 dbsr;
-	u64 mmcr[4];
-	u64 mmcra;
-	u64 mmcrs;
-	u32 pmc[8];
-	u32 spmc[2];
-	u64 siar;
-	u64 sdar;
-	u64 sier[3];
-	u64 tfhar;
-	u64 texasr;
-	u64 tfiar;
-	u64 orig_texasr;
-	u32 cr_tm;
-	u64 xer_tm;
-	u64 lr_tm;
-	u64 ctr_tm;
-	u64 amr_tm;
-	u64 ppr_tm;
-	u64 dscr_tm;
-	u64 tar_tm;
-	ulong gpr_tm[32];
-	struct thread_fp_state fp_tm;
-	struct thread_vr_state vr_tm;
-	u32 vrsave_tm;
-	ulong fault_dar;
-	u32 fault_dsisr;
-	long unsigned int intr_msr;
-	ulong fault_gpa;
-	gpa_t paddr_accessed;
-	gva_t vaddr_accessed;
-	pgd_t *pgdir;
-	u16 io_gpr;
-	u8 mmio_host_swabbed;
-	u8 mmio_sign_extend;
-	u8 mmio_sp64_extend;
-	u8 mmio_vsx_copy_nums;
-	u8 mmio_vsx_offset;
-	u8 mmio_vmx_copy_nums;
-	u8 mmio_vmx_offset;
-	u8 mmio_copy_type;
-	u8 osi_needed;
-	u8 osi_enabled;
-	u8 papr_enabled;
-	u8 watchdog_enabled;
-	u8 sane;
-	u8 cpu_type;
-	u8 hcall_needed;
-	u8 epr_flags;
-	u8 epr_needed;
-	u8 external_oneshot;
-	u32 cpr0_cfgaddr;
-	struct hrtimer dec_timer;
-	u64 dec_jiffies;
-	u64 dec_expires;
-	long unsigned int pending_exceptions;
-	u8 ceded;
-	u8 prodded;
-	u8 doorbell_request;
-	u8 irq_pending;
-	u32 last_inst;
-	struct rcuwait *waitp;
-	struct kvmppc_vcore *vcore;
-	int ret;
-	int trap;
-	int state;
-	int ptid;
-	int thread_cpu;
-	int prev_cpu;
-	bool timer_running;
-	wait_queue_head_t cpu_run;
-	struct machine_check_event mce_evt;
-	struct kvm_vcpu_arch_shared *shared;
-	bool shared_big_endian;
-	long unsigned int magic_page_pa;
-	long unsigned int magic_page_ea;
-	bool disable_kernel_nx;
-	int irq_type;
-	int irq_cpu_id;
-	struct openpic *mpic;
-	struct kvmppc_icp *icp;
-	struct kvmppc_xive_vcpu *xive_vcpu;
-	__be32 xive_cam_word;
-	u8 xive_pushed;
-	u8 xive_esc_on;
-	union xive_tma_w01 xive_saved_state;
-	u64 xive_esc_raddr;
-	u64 xive_esc_vaddr;
-	struct kvm_vcpu_arch_shared shregs;
-	struct mmio_hpte_cache mmio_cache;
-	long unsigned int pgfault_addr;
-	long int pgfault_index;
-	long unsigned int pgfault_hpte[2];
-	struct mmio_hpte_cache_entry *pgfault_cache;
-	struct task_struct *run_task;
-	spinlock_t vpa_update_lock;
-	struct kvmppc_vpa vpa;
-	struct kvmppc_vpa dtl;
-	struct dtl_entry *dtl_ptr;
-	long unsigned int dtl_index;
-	u64 stolen_logged;
-	struct kvmppc_vpa slb_shadow;
-	spinlock_t tbacct_lock;
-	u64 busy_stolen;
-	u64 busy_preempt;
-	u32 emul_inst;
-	u32 online;
-	struct kvm_nested_guest *nested;
-	u32 nested_vcpu_id;
-	gpa_t nested_io_gpr;
-};
-
-struct kvm_run;
-
-struct kvm_vcpu {
-	struct kvm *kvm;
-	struct preempt_notifier preempt_notifier;
-	int cpu;
-	int vcpu_id;
-	int vcpu_idx;
-	int srcu_idx;
-	int mode;
-	u64 requests;
-	long unsigned int guest_debug;
-	int pre_pcpu;
-	struct list_head blocked_vcpu_list;
-	struct mutex mutex;
-	struct kvm_run *run;
-	struct rcuwait wait;
-	struct pid *pid;
-	int sigset_active;
-	sigset_t sigset;
-	struct kvm_vcpu_stat stat;
-	unsigned int halt_poll_ns;
-	bool valid_wakeup;
-	int mmio_needed;
-	int mmio_read_completed;
-	int mmio_is_write;
-	int mmio_cur_fragment;
-	int mmio_nr_fragments;
-	struct kvm_mmio_fragment mmio_fragments[2];
-	bool preempted;
-	bool ready;
-	struct kvm_vcpu_arch arch;
-};
-
-struct preempt_ops {
-	void (*sched_in)(struct preempt_notifier *, int);
-	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
-};
-
-typedef int pci_power_t;
-
-struct pci_slot;
-
-struct aer_stats;
-
-struct pci_driver;
-
-struct pcie_link_state;
-
-struct pci_vpd;
-
-struct pci_sriov;
-
-struct pci_dev {
-	struct list_head bus_list;
-	struct pci_bus *bus;
-	struct pci_bus *subordinate;
-	void *sysdata;
-	struct proc_dir_entry *procent;
-	struct pci_slot *slot;
-	unsigned int devfn;
-	short unsigned int vendor;
-	short unsigned int device;
-	short unsigned int subsystem_vendor;
-	short unsigned int subsystem_device;
-	unsigned int class;
-	u8 revision;
-	u8 hdr_type;
-	u16 aer_cap;
-	struct aer_stats *aer_stats;
-	u8 pcie_cap;
-	u8 msi_cap;
-	u8 msix_cap;
-	u8 pcie_mpss: 3;
-	u8 rom_base_reg;
-	u8 pin;
-	u16 pcie_flags_reg;
-	long unsigned int *dma_alias_mask;
-	struct pci_driver *driver;
-	u64 dma_mask;
-	struct device_dma_parameters dma_parms;
-	pci_power_t current_state;
-	unsigned int imm_ready: 1;
-	u8 pm_cap;
-	unsigned int pme_support: 5;
-	unsigned int pme_poll: 1;
-	unsigned int d1_support: 1;
-	unsigned int d2_support: 1;
-	unsigned int no_d1d2: 1;
-	unsigned int no_d3cold: 1;
-	unsigned int bridge_d3: 1;
-	unsigned int d3cold_allowed: 1;
-	unsigned int mmio_always_on: 1;
-	unsigned int wakeup_prepared: 1;
-	unsigned int runtime_d3cold: 1;
-	unsigned int skip_bus_pm: 1;
-	unsigned int ignore_hotplug: 1;
-	unsigned int hotplug_user_indicators: 1;
-	unsigned int clear_retrain_link: 1;
-	unsigned int d3hot_delay;
-	unsigned int d3cold_delay;
-	struct pcie_link_state *link_state;
-	unsigned int ltr_path: 1;
-	int l1ss;
-	unsigned int eetlp_prefix_path: 1;
-	pci_channel_state_t error_state;
-	struct device dev;
-	int cfg_size;
-	unsigned int irq;
-	struct resource resource[17];
-	bool match_driver;
-	unsigned int transparent: 1;
-	unsigned int io_window: 1;
-	unsigned int pref_window: 1;
-	unsigned int pref_64_window: 1;
-	unsigned int multifunction: 1;
-	unsigned int is_busmaster: 1;
-	unsigned int no_msi: 1;
-	unsigned int no_64bit_msi: 1;
-	unsigned int block_cfg_access: 1;
-	unsigned int broken_parity_status: 1;
-	unsigned int irq_reroute_variant: 2;
-	unsigned int msi_enabled: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int ari_enabled: 1;
-	unsigned int ats_enabled: 1;
-	unsigned int pasid_enabled: 1;
-	unsigned int pri_enabled: 1;
-	unsigned int is_managed: 1;
-	unsigned int needs_freset: 1;
-	unsigned int state_saved: 1;
-	unsigned int is_physfn: 1;
-	unsigned int is_virtfn: 1;
-	unsigned int reset_fn: 1;
-	unsigned int is_hotplug_bridge: 1;
-	unsigned int shpc_managed: 1;
-	unsigned int is_thunderbolt: 1;
-	unsigned int untrusted: 1;
-	unsigned int external_facing: 1;
-	unsigned int broken_intx_masking: 1;
-	unsigned int io_window_1k: 1;
-	unsigned int irq_managed: 1;
-	unsigned int non_compliant_bars: 1;
-	unsigned int is_probed: 1;
-	unsigned int link_active_reporting: 1;
-	unsigned int no_vf_scan: 1;
-	unsigned int no_command_memory: 1;
-	pci_dev_flags_t dev_flags;
-	atomic_t enable_cnt;
-	u32 saved_config_space[16];
-	struct hlist_head saved_cap_space;
-	struct bin_attribute *rom_attr;
-	int rom_attr_enabled;
-	struct bin_attribute *res_attr[17];
-	struct bin_attribute *res_attr_wc[17];
-	unsigned int broken_cmd_compl: 1;
-	unsigned int ptm_root: 1;
-	unsigned int ptm_enabled: 1;
-	u8 ptm_granularity;
-	const struct attribute_group **msi_irq_groups;
-	struct pci_vpd *vpd;
-	u16 dpc_cap;
-	unsigned int dpc_rp_extensions: 1;
-	u8 dpc_rp_log_size;
-	union {
-		struct pci_sriov *sriov;
-		struct pci_dev *physfn;
-	};
-	u16 ats_cap;
-	u8 ats_stu;
-	u16 pri_cap;
-	u32 pri_reqs_alloc;
-	unsigned int pasid_required: 1;
-	u16 pasid_cap;
-	u16 pasid_features;
-	u16 acs_cap;
-	phys_addr_t rom;
-	size_t romlen;
-	char *driver_override;
-	long unsigned int priv_flags;
-};
-
-struct iommu_table_group;
-
-struct pci_dn {
-	int flags;
-	int busno;
-	int devfn;
-	int vendor_id;
-	int device_id;
-	int class_code;
-	struct pci_dn *parent;
-	struct pci_controller *phb;
-	struct iommu_table_group *table_group;
-	int pci_ext_config_space;
-	struct eeh_dev *edev;
-	unsigned int pe_number;
-	u16 vfs_expanded;
-	u16 num_vfs;
-	unsigned int *pe_num_map;
-	bool m64_single_mode;
-	int (*m64_map)[6];
-	int last_allow_rc;
-	int mps;
-	struct list_head child_list;
-	struct list_head list;
-	struct resource holes[6];
-};
-
-struct pci_controller_ops {
-	void (*dma_dev_setup)(struct pci_dev *);
-	void (*dma_bus_setup)(struct pci_bus *);
-	bool (*iommu_bypass_supported)(struct pci_dev *, u64);
-	int (*probe_mode)(struct pci_bus *);
-	bool (*enable_device_hook)(struct pci_dev *);
-	void (*disable_device)(struct pci_dev *);
-	void (*release_device)(struct pci_dev *);
-	resource_size_t (*window_alignment)(struct pci_bus *, long unsigned int);
-	void (*setup_bridge)(struct pci_bus *, long unsigned int);
-	void (*reset_secondary_bus)(struct pci_dev *);
-	int (*setup_msi_irqs)(struct pci_dev *, int, int);
-	void (*teardown_msi_irqs)(struct pci_dev *);
-	void (*shutdown)(struct pci_controller *);
-};
-
-struct pci_ops;
-
-struct npu;
-
-struct pci_controller {
-	struct pci_bus *bus;
-	char is_dynamic;
-	int node;
-	struct device_node *dn;
-	struct list_head list_node;
-	struct device *parent;
-	int first_busno;
-	int last_busno;
-	int self_busno;
-	struct resource busn;
-	void *io_base_virt;
-	void *io_base_alloc;
-	resource_size_t io_base_phys;
-	resource_size_t pci_io_size;
-	resource_size_t isa_mem_phys;
-	resource_size_t isa_mem_size;
-	struct pci_controller_ops controller_ops;
-	struct pci_ops *ops;
-	unsigned int *cfg_addr;
-	void *cfg_data;
-	u32 indirect_type;
-	struct resource io_resource;
-	struct resource mem_resources[3];
-	resource_size_t mem_offset[3];
-	int global_number;
-	resource_size_t dma_window_base_cur;
-	resource_size_t dma_window_size;
-	long unsigned int buid;
-	struct pci_dn *pci_data;
-	void *private_data;
-	struct npu *npu;
-};
-
-struct msi_controller;
-
-struct pci_bus {
-	struct list_head node;
-	struct pci_bus *parent;
-	struct list_head children;
-	struct list_head devices;
-	struct pci_dev *self;
-	struct list_head slots;
-	struct resource *resource[4];
-	struct list_head resources;
-	struct resource busn_res;
-	struct pci_ops *ops;
-	struct msi_controller *msi;
-	void *sysdata;
-	struct proc_dir_entry *procdir;
-	unsigned char number;
-	unsigned char primary;
-	unsigned char max_bus_speed;
-	unsigned char cur_bus_speed;
-	char name[48];
-	short unsigned int bridge_ctl;
-	pci_bus_flags_t bus_flags;
-	struct device *bridge;
-	struct device dev;
-	struct bin_attribute *legacy_io;
-	struct bin_attribute *legacy_mem;
-	unsigned int is_added: 1;
-};
-
-struct pci_device_id {
-	__u32 vendor;
-	__u32 device;
-	__u32 subvendor;
-	__u32 subdevice;
-	__u32 class;
-	__u32 class_mask;
-	kernel_ulong_t driver_data;
-};
-
-struct msi_msg {
-	u32 address_lo;
-	u32 address_hi;
-	u32 data;
-};
-
-struct platform_msi_priv_data;
-
-struct platform_msi_desc {
-	struct platform_msi_priv_data *msi_priv_data;
-	u16 msi_index;
-};
-
-struct fsl_mc_msi_desc {
-	u16 msi_index;
-};
-
-struct ti_sci_inta_msi_desc {
-	u16 dev_index;
-};
-
-struct irq_affinity_desc;
-
-struct msi_desc {
-	struct list_head list;
-	unsigned int irq;
-	unsigned int nvec_used;
-	struct device *dev;
-	struct msi_msg msg;
-	struct irq_affinity_desc *affinity;
-	void (*write_msi_msg)(struct msi_desc *, void *);
-	void *write_msi_msg_data;
-	union {
-		struct {
-			u32 masked;
-			struct {
-				u8 is_msix: 1;
-				u8 multiple: 3;
-				u8 multi_cap: 3;
-				u8 maskbit: 1;
-				u8 is_64: 1;
-				u8 is_virtual: 1;
-				u16 entry_nr;
-				unsigned int default_irq;
-			} msi_attrib;
-			union {
-				u8 mask_pos;
-				void *mask_base;
-			};
-		};
-		struct platform_msi_desc platform;
-		struct fsl_mc_msi_desc fsl_mc;
-		struct ti_sci_inta_msi_desc inta;
-	};
-};
-
-typedef struct {
-	unsigned int __softirq_pending;
-	unsigned int timer_irqs_event;
-	unsigned int broadcast_irqs_event;
-	unsigned int timer_irqs_others;
-	unsigned int pmu_irqs;
-	unsigned int mce_exceptions;
-	unsigned int spurious_irqs;
-	unsigned int sreset_irqs;
-	unsigned int soft_nmi_irqs;
-	unsigned int doorbell_irqs;
+struct nic {
+	u32 msg_enable;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	u16 (*mdio_ctrl)(struct nic *, u32, u32, u32, u16);
 	long: 64;
 	long: 64;
 	long: 64;
@@ -15755,85 +30076,75 @@
 	long: 64;
 	long: 64;
 	long: 64;
-} irq_cpustat_t;
-
-struct irq_affinity_desc {
-	struct cpumask mask;
-	unsigned int is_managed: 1;
-};
-
-enum cpu_usage_stat {
-	CPUTIME_USER = 0,
-	CPUTIME_NICE = 1,
-	CPUTIME_SYSTEM = 2,
-	CPUTIME_SOFTIRQ = 3,
-	CPUTIME_IRQ = 4,
-	CPUTIME_IDLE = 5,
-	CPUTIME_IOWAIT = 6,
-	CPUTIME_STEAL = 7,
-	CPUTIME_GUEST = 8,
-	CPUTIME_GUEST_NICE = 9,
-	NR_STATS = 10,
-};
-
-struct hotplug_slot;
-
-struct pci_slot {
-	struct pci_bus *bus;
-	struct list_head list;
-	struct hotplug_slot *hotplug;
-	unsigned char number;
-	struct kobject kobj;
-};
-
-struct pci_dynids {
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct pci_error_handlers;
-
-struct pci_driver {
-	struct list_head node;
-	const char *name;
-	const struct pci_device_id *id_table;
-	int (*probe)(struct pci_dev *, const struct pci_device_id *);
-	void (*remove)(struct pci_dev *);
-	int (*suspend)(struct pci_dev *, pm_message_t);
-	int (*resume)(struct pci_dev *);
-	void (*shutdown)(struct pci_dev *);
-	int (*sriov_configure)(struct pci_dev *, int);
-	const struct pci_error_handlers *err_handler;
-	const struct attribute_group **groups;
-	struct device_driver driver;
-	struct pci_dynids dynids;
-};
-
-struct pci_host_bridge {
-	struct device dev;
-	struct pci_bus *bus;
-	struct pci_ops *ops;
-	struct pci_ops *child_ops;
-	void *sysdata;
-	int busnr;
-	struct list_head windows;
-	struct list_head dma_ranges;
-	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
-	int (*map_irq)(const struct pci_dev *, u8, u8);
-	void (*release_fn)(struct pci_host_bridge *);
-	void *release_data;
-	struct msi_controller *msi;
-	unsigned int ignore_reset_delay: 1;
-	unsigned int no_ext_tags: 1;
-	unsigned int native_aer: 1;
-	unsigned int native_pcie_hotplug: 1;
-	unsigned int native_shpc_hotplug: 1;
-	unsigned int native_pme: 1;
-	unsigned int native_ltr: 1;
-	unsigned int native_dpc: 1;
-	unsigned int preserve_config: 1;
-	unsigned int size_windows: 1;
-	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	struct rx *rxs;
+	struct rx *rx_to_use;
+	struct rx *rx_to_clean;
+	struct rfd blank_rfd;
+	enum ru_state ru_running;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t cb_lock;
+	spinlock_t cmd_lock;
+	struct csr *csr;
+	enum scb_cmd_lo cuc_cmd;
+	unsigned int cbs_avail;
+	struct napi_struct napi;
+	struct cb *cbs;
+	struct cb *cb_to_use;
+	struct cb *cb_to_send;
+	struct cb *cb_to_clean;
+	__le16 tx_command;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	enum {
+		ich = 1,
+		promiscuous = 2,
+		multicast_all = 4,
+		wol_magic = 8,
+		ich_10h_workaround = 16,
+	} flags;
+	enum mac mac;
+	enum phy phy;
+	struct params params;
+	struct timer_list watchdog;
+	struct mii_if_info mii;
+	struct work_struct tx_timeout_task;
+	enum loopback loopback;
+	struct mem *mem;
+	dma_addr_t dma_addr;
+	struct dma_pool *cbs_pool;
+	dma_addr_t cbs_dma_addr;
+	u8 adaptive_ifs;
+	u8 tx_threshold;
+	u32 tx_frames;
+	u32 tx_collisions;
+	u32 tx_deferred;
+	u32 tx_single_collisions;
+	u32 tx_multiple_collisions;
+	u32 tx_fc_pause;
+	u32 tx_tco_frames;
+	u32 rx_fc_pause;
+	u32 rx_fc_unsupported;
+	u32 rx_tco_frames;
+	u32 rx_short_frame_errors;
+	u32 rx_over_length_errors;
+	u16 eeprom_wc;
+	__le16 eeprom[256];
+	spinlock_t mdio_lock;
+	const struct firmware *fw;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -15847,1546 +30158,2439 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long unsigned int private[0];
+	long: 64;
 };
 
-struct pci_ops {
-	int (*add_bus)(struct pci_bus *);
-	void (*remove_bus)(struct pci_bus *);
-	void * (*map_bus)(struct pci_bus *, unsigned int, int);
-	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
-	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+enum led_state {
+	led_on = 1,
+	led_off = 4,
+	led_on_559 = 5,
+	led_on_557 = 7,
 };
 
-struct msi_controller {
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct list_head list;
-	int (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);
-	int (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);
-	void (*teardown_irq)(struct msi_controller *, unsigned int);
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
 };
 
-struct pci_error_handlers {
-	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
-	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
-	pci_ers_result_t (*slot_reset)(struct pci_dev *);
-	void (*reset_prepare)(struct pci_dev *);
-	void (*reset_done)(struct pci_dev *);
-	void (*resume)(struct pci_dev *);
+struct msix_entry {
+	u32 vector;
+	u16 entry;
 };
 
-struct sg_table {
-	struct scatterlist *sgl;
-	unsigned int nents;
-	unsigned int orig_nents;
-};
-
-struct rtc_time;
-
-struct kimage;
-
-struct machdep_calls {
-	char *name;
-	void (*iommu_save)();
-	void (*iommu_restore)();
-	long unsigned int (*memory_block_size)();
-	void (*dma_set_mask)(struct device *, u64);
-	int (*probe)();
-	void (*setup_arch)();
-	void (*show_cpuinfo)(struct seq_file *);
-	void (*show_percpuinfo)(struct seq_file *, int);
-	long unsigned int (*get_proc_freq)(unsigned int);
-	void (*init_IRQ)();
-	unsigned int (*get_irq)();
-	void (*pcibios_fixup)();
-	void (*pci_irq_fixup)(struct pci_dev *);
-	int (*pcibios_root_bridge_prepare)(struct pci_host_bridge *);
-	int (*pci_setup_phb)(struct pci_controller *);
-	void (*restart)(char *);
-	void (*halt)();
-	void (*panic)(char *);
-	long int (*time_init)();
-	int (*set_rtc_time)(struct rtc_time *);
-	void (*get_rtc_time)(struct rtc_time *);
-	time64_t (*get_boot_time)();
-	unsigned char (*rtc_read_val)(int);
-	void (*rtc_write_val)(int, unsigned char);
-	void (*calibrate_decr)();
-	void (*progress)(char *, short unsigned int);
-	void (*log_error)(char *, unsigned int, int);
-	unsigned char (*nvram_read_val)(int);
-	void (*nvram_write_val)(int, unsigned char);
-	ssize_t (*nvram_write)(char *, size_t, loff_t *);
-	ssize_t (*nvram_read)(char *, size_t, loff_t *);
-	ssize_t (*nvram_size)();
-	void (*nvram_sync)();
-	int (*system_reset_exception)(struct pt_regs *);
-	int (*machine_check_exception)(struct pt_regs *);
-	int (*handle_hmi_exception)(struct pt_regs *);
-	int (*hmi_exception_early)(struct pt_regs *);
-	long int (*machine_check_early)(struct pt_regs *);
-	bool (*mce_check_early_recovery)(struct pt_regs *);
-	long int (*feature_call)(unsigned int, ...);
-	int (*pci_get_legacy_ide_irq)(struct pci_dev *, int);
-	pgprot_t (*phys_mem_access_prot)(struct file *, long unsigned int, long unsigned int, pgprot_t);
-	void (*power_save)();
-	void (*enable_pmcs)();
-	int (*set_dabr)(long unsigned int, long unsigned int);
-	int (*set_dawr)(int, long unsigned int, long unsigned int);
-	int (*pci_exclude_device)(struct pci_controller *, unsigned char, unsigned char);
-	void (*pcibios_fixup_resources)(struct pci_dev *);
-	void (*pcibios_fixup_bus)(struct pci_bus *);
-	void (*pcibios_fixup_phb)(struct pci_controller *);
-	void (*pcibios_bus_add_device)(struct pci_dev *);
-	resource_size_t (*pcibios_default_alignment)();
-	void (*pcibios_fixup_sriov)(struct pci_dev *);
-	resource_size_t (*pcibios_iov_resource_alignment)(struct pci_dev *, int);
-	int (*pcibios_sriov_enable)(struct pci_dev *, u16);
-	int (*pcibios_sriov_disable)(struct pci_dev *);
-	void (*machine_shutdown)();
-	void (*kexec_cpu_down)(int, int);
-	int (*machine_kexec_prepare)(struct kimage *);
-	void (*machine_kexec)(struct kimage *);
-	void (*suspend_disable_irqs)();
-	void (*suspend_enable_irqs)();
-	int (*suspend_disable_cpu)();
-	ssize_t (*cpu_probe)(const char *, size_t);
-	ssize_t (*cpu_release)(const char *, size_t);
-	int (*get_random_seed)(long unsigned int *);
-};
-
-typedef u64 gfn_t;
-
-struct kvm_arch_memory_slot {
-	long unsigned int *rmap;
-};
-
-struct kvm_memory_slot {
-	gfn_t base_gfn;
-	long unsigned int npages;
-	long unsigned int *dirty_bitmap;
-	struct kvm_arch_memory_slot arch;
-	long unsigned int userspace_addr;
-	u32 flags;
-	short int id;
-	u16 as_id;
-};
-
-enum mmu_notifier_event {
-	MMU_NOTIFY_UNMAP = 0,
-	MMU_NOTIFY_CLEAR = 1,
-	MMU_NOTIFY_PROTECTION_VMA = 2,
-	MMU_NOTIFY_PROTECTION_PAGE = 3,
-	MMU_NOTIFY_SOFT_DIRTY = 4,
-	MMU_NOTIFY_RELEASE = 5,
-	MMU_NOTIFY_MIGRATE = 6,
-};
-
-struct mmu_notifier;
-
-struct mmu_notifier_range;
-
-struct mmu_notifier_ops {
-	void (*release)(struct mmu_notifier *, struct mm_struct *);
-	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
-	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
-	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
-	void (*free_notifier)(struct mmu_notifier *);
-};
-
-struct mmu_notifier {
-	struct hlist_node hlist;
-	const struct mmu_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct callback_head rcu;
-	unsigned int users;
-};
-
-struct mmu_notifier_range {
-	struct vm_area_struct *vma;
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int flags;
-	enum mmu_notifier_event event;
-	void *migrate_pgmap_owner;
-};
-
-struct irq_bypass_consumer;
-
-struct irq_bypass_producer {
-	struct list_head node;
-	void *token;
-	int irq;
-	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*stop)(struct irq_bypass_producer *);
-	void (*start)(struct irq_bypass_producer *);
-};
-
-struct irq_bypass_consumer {
-	struct list_head node;
-	void *token;
-	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*stop)(struct irq_bypass_consumer *);
-	void (*start)(struct irq_bypass_consumer *);
-};
-
-struct kvm_sregs {
-	__u32 pvr;
-	union {
-		struct {
-			__u64 sdr1;
-			struct {
-				struct {
-					__u64 slbe;
-					__u64 slbv;
-				} slb[64];
-			} ppc64;
-			struct {
-				__u32 sr[16];
-				__u64 ibat[8];
-				__u64 dbat[8];
-			} ppc32;
-		} s;
-		struct {
-			union {
-				struct {
-					__u32 features;
-					__u32 svr;
-					__u64 mcar;
-					__u32 hid0;
-					__u32 pid1;
-					__u32 pid2;
-				} fsl;
-				__u8 pad[256];
-			} impl;
-			__u32 features;
-			__u32 impl_id;
-			__u32 update_special;
-			__u32 pir;
-			__u64 sprg8;
-			__u64 sprg9;
-			__u64 csrr0;
-			__u64 dsrr0;
-			__u64 mcsrr0;
-			__u32 csrr1;
-			__u32 dsrr1;
-			__u32 mcsrr1;
-			__u32 esr;
-			__u64 dear;
-			__u64 ivpr;
-			__u64 mcivpr;
-			__u64 mcsr;
-			__u32 tsr;
-			__u32 tcr;
-			__u32 decar;
-			__u32 dec;
-			__u64 tb;
-			__u32 dbsr;
-			__u32 dbcr[3];
-			__u32 iac[4];
-			__u32 dac[2];
-			__u32 dvc[2];
-			__u8 num_iac;
-			__u8 num_dac;
-			__u8 num_dvc;
-			__u8 pad;
-			__u32 epr;
-			__u32 vrsave;
-			__u32 epcr;
-			__u32 mas0;
-			__u32 mas1;
-			__u64 mas2;
-			__u64 mas7_3;
-			__u32 mas4;
-			__u32 mas6;
-			__u32 ivor_low[16];
-			__u32 ivor_high[18];
-			__u32 mmucfg;
-			__u32 eptcfg;
-			__u32 tlbcfg[4];
-			__u32 tlbps[4];
-			__u32 eplc;
-			__u32 epsc;
-		} e;
-		__u8 pad[1020];
-	} u;
-};
-
-struct kvm_debug_exit_arch {
-	__u64 address;
-	__u32 status;
-	__u32 reserved;
-};
-
-struct kvm_sync_regs {};
-
-struct kvm_ppc_mmuv3_cfg {
-	__u64 flags;
-	__u64 process_table;
-};
-
-struct kvm_ppc_radix_geom {
-	__u8 page_shift;
-	__u8 level_bits[4];
-	__u8 pad[3];
-};
-
-struct kvm_ppc_rmmu_info {
-	struct kvm_ppc_radix_geom geometries[8];
-	__u32 ap_encodings[8];
-};
-
-struct kvm_userspace_memory_region {
-	__u32 slot;
-	__u32 flags;
-	__u64 guest_phys_addr;
-	__u64 memory_size;
-	__u64 userspace_addr;
-};
-
-struct kvm_hyperv_exit {
-	__u32 type;
-	__u32 pad1;
-	union {
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 evt_page;
-			__u64 msg_page;
-		} synic;
-		struct {
-			__u64 input;
-			__u64 result;
-			__u64 params[2];
-		} hcall;
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 status;
-			__u64 send_page;
-			__u64 recv_page;
-			__u64 pending_page;
-		} syndbg;
-	} u;
-};
-
-struct kvm_run {
-	__u8 request_interrupt_window;
-	__u8 immediate_exit;
-	__u8 padding1[6];
-	__u32 exit_reason;
-	__u8 ready_for_interrupt_injection;
-	__u8 if_flag;
-	__u16 flags;
-	__u64 cr8;
-	__u64 apic_base;
-	union {
-		struct {
-			__u64 hardware_exit_reason;
-		} hw;
-		struct {
-			__u64 hardware_entry_failure_reason;
-			__u32 cpu;
-		} fail_entry;
-		struct {
-			__u32 exception;
-			__u32 error_code;
-		} ex;
-		struct {
-			__u8 direction;
-			__u8 size;
-			__u16 port;
-			__u32 count;
-			__u64 data_offset;
-		} io;
-		struct {
-			struct kvm_debug_exit_arch arch;
-		} debug;
-		struct {
-			__u64 phys_addr;
-			__u8 data[8];
-			__u32 len;
-			__u8 is_write;
-		} mmio;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u64 ret;
-			__u32 longmode;
-			__u32 pad;
-		} hypercall;
-		struct {
-			__u64 rip;
-			__u32 is_write;
-			__u32 pad;
-		} tpr_access;
-		struct {
-			__u8 icptcode;
-			__u16 ipa;
-			__u32 ipb;
-		} s390_sieic;
-		__u64 s390_reset_flags;
-		struct {
-			__u64 trans_exc_code;
-			__u32 pgm_code;
-		} s390_ucontrol;
-		struct {
-			__u32 dcrn;
-			__u32 data;
-			__u8 is_write;
-		} dcr;
-		struct {
-			__u32 suberror;
-			__u32 ndata;
-			__u64 data[16];
-		} internal;
-		struct {
-			__u64 gprs[32];
-		} osi;
-		struct {
-			__u64 nr;
-			__u64 ret;
-			__u64 args[9];
-		} papr_hcall;
-		struct {
-			__u16 subchannel_id;
-			__u16 subchannel_nr;
-			__u32 io_int_parm;
-			__u32 io_int_word;
-			__u32 ipb;
-			__u8 dequeued;
-		} s390_tsch;
-		struct {
-			__u32 epr;
-		} epr;
-		struct {
-			__u32 type;
-			__u64 flags;
-		} system_event;
-		struct {
-			__u64 addr;
-			__u8 ar;
-			__u8 reserved;
-			__u8 fc;
-			__u8 sel1;
-			__u16 sel2;
-		} s390_stsi;
-		struct {
-			__u8 vector;
-		} eoi;
-		struct kvm_hyperv_exit hyperv;
-		struct {
-			__u64 esr_iss;
-			__u64 fault_ipa;
-		} arm_nisv;
-		struct {
-			__u8 error;
-			__u8 pad[7];
-			__u32 reason;
-			__u32 index;
-			__u64 data;
-		} msr;
-		char padding[256];
-	};
-	__u64 kvm_valid_regs;
-	__u64 kvm_dirty_regs;
-	union {
-		struct kvm_sync_regs regs;
-		char padding[2048];
-	} s;
-};
-
-struct kvm_coalesced_mmio {
-	__u64 phys_addr;
-	__u32 len;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-	__u8 data[8];
-};
-
-struct kvm_coalesced_mmio_ring {
-	__u32 first;
-	__u32 last;
-	struct kvm_coalesced_mmio coalesced_mmio[0];
-};
-
-struct kvm_dirty_log {
-	__u32 slot;
-	__u32 padding1;
-	union {
-		void *dirty_bitmap;
-		__u64 padding2;
-	};
-};
-
-struct kvm_ppc_one_page_size {
-	__u32 page_shift;
-	__u32 pte_enc;
-};
-
-struct kvm_ppc_one_seg_page_size {
-	__u32 page_shift;
-	__u32 slb_enc;
-	struct kvm_ppc_one_page_size enc[8];
-};
-
-struct kvm_ppc_smmu_info {
-	__u64 flags;
-	__u32 slb_size;
-	__u16 data_keys;
-	__u16 instr_keys;
-	struct kvm_ppc_one_seg_page_size sps[8];
-};
-
-struct kvm_vm_stat {
-	ulong remote_tlb_flush;
-	ulong num_2M_pages;
-	ulong num_1G_pages;
-};
-
-struct revmap_entry;
-
-struct kvm_hpt_info {
-	long unsigned int virt;
-	struct revmap_entry *rev;
-	u32 order;
-	int cma;
-};
-
-struct kvm_resize_hpt;
-
-struct kvmppc_xics;
-
-struct kvmppc_xive;
-
-struct kvmppc_passthru_irqmap;
-
-struct kvmppc_ops;
-
-struct kvm_arch {
-	unsigned int lpid;
-	unsigned int smt_mode;
-	unsigned int emul_smt_mode;
-	unsigned int tlb_sets;
-	struct kvm_hpt_info hpt;
-	atomic64_t mmio_update;
-	unsigned int host_lpid;
-	long unsigned int host_lpcr;
-	long unsigned int sdr1;
-	long unsigned int host_sdr1;
-	long unsigned int lpcr;
-	long unsigned int vrma_slb_v;
-	int mmu_ready;
-	atomic_t vcpus_running;
-	u32 online_vcores;
-	atomic_t hpte_mod_interest;
-	cpumask_t need_tlb_flush;
-	cpumask_t cpu_in_guest;
-	u8 radix;
-	u8 fwnmi_enabled;
-	u8 secure_guest;
-	u8 svm_enabled;
-	bool threads_indep;
-	bool nested_enable;
-	pgd_t *pgtable;
-	u64 process_table;
-	struct dentry *debugfs_dir;
-	struct kvm_resize_hpt *resize_hpt;
-	struct mutex hpt_mutex;
-	struct list_head spapr_tce_tables;
-	struct list_head rtas_tokens;
-	struct mutex rtas_token_lock;
-	long unsigned int enabled_hcalls[5];
-	struct kvmppc_xics *xics;
-	struct kvmppc_xics *xics_device;
-	struct kvmppc_xive *xive;
-	struct {
-		struct kvmppc_xive *native;
-		struct kvmppc_xive *xics_on_xive;
-	} xive_devices;
-	struct kvmppc_passthru_irqmap *pimap;
-	struct kvmppc_ops *kvm_ops;
-	struct mutex uvmem_lock;
-	struct list_head uvmem_pfns;
-	struct mutex mmu_setup_lock;
-	u64 l1_ptcr;
-	int max_nested_lpid;
-	struct kvm_nested_guest *nested_guests[4096];
-	struct kvmppc_vcore *vcores[2048];
-};
-
-struct kvm_irq_routing_table;
-
-struct kvm_memslots;
-
-struct kvm_io_bus;
-
-struct kvm_stat_data;
-
-struct kvm {
-	spinlock_t mmu_lock;
-	struct mutex slots_lock;
-	struct mm_struct *mm;
-	struct kvm_memslots *memslots[1];
-	struct kvm_vcpu *vcpus[2048];
-	atomic_t online_vcpus;
-	int created_vcpus;
-	int last_boosted_vcpu;
-	struct list_head vm_list;
-	struct mutex lock;
-	struct kvm_io_bus *buses[4];
-	struct {
-		spinlock_t lock;
-		struct list_head items;
-		struct list_head resampler_list;
-		struct mutex resampler_lock;
-	} irqfds;
-	struct list_head ioeventfds;
-	struct kvm_vm_stat stat;
-	struct kvm_arch arch;
-	refcount_t users_count;
-	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
-	spinlock_t ring_lock;
-	struct list_head coalesced_zones;
-	struct mutex irq_lock;
-	struct kvm_irq_routing_table *irq_routing;
-	struct hlist_head irq_ack_notifier_list;
-	struct mmu_notifier mmu_notifier;
-	long unsigned int mmu_notifier_seq;
-	long int mmu_notifier_count;
-	long int tlbs_dirty;
-	struct list_head devices;
-	u64 manual_dirty_log_protect;
-	struct dentry *debugfs_dentry;
-	struct kvm_stat_data **debugfs_stat_data;
-	struct srcu_struct srcu;
-	struct srcu_struct irq_srcu;
-	pid_t userspace_pid;
-	unsigned int max_halt_poll_ns;
-};
-
-struct revmap_entry {
-	long unsigned int guest_rpte;
-	unsigned int forw;
-	unsigned int back;
-};
-
-struct kvmppc_irq_map {
-	u32 r_hwirq;
-	u32 v_hwirq;
-	struct irq_desc *desc;
-};
-
-struct kvmppc_passthru_irqmap {
-	int n_mapped;
-	struct kvmppc_irq_map mapped[1024];
-};
-
-enum kvm_mr_change {
-	KVM_MR_CREATE = 0,
-	KVM_MR_DELETE = 1,
-	KVM_MR_MOVE = 2,
-	KVM_MR_FLAGS_ONLY = 3,
-};
-
-union kvmppc_one_reg;
-
-struct kvmppc_ops {
-	struct module *owner;
-	int (*get_sregs)(struct kvm_vcpu *, struct kvm_sregs *);
-	int (*set_sregs)(struct kvm_vcpu *, struct kvm_sregs *);
-	int (*get_one_reg)(struct kvm_vcpu *, u64, union kvmppc_one_reg *);
-	int (*set_one_reg)(struct kvm_vcpu *, u64, union kvmppc_one_reg *);
-	void (*vcpu_load)(struct kvm_vcpu *, int);
-	void (*vcpu_put)(struct kvm_vcpu *);
-	void (*inject_interrupt)(struct kvm_vcpu *, int, u64);
-	void (*set_msr)(struct kvm_vcpu *, u64);
-	int (*vcpu_run)(struct kvm_vcpu *);
-	int (*vcpu_create)(struct kvm_vcpu *);
-	void (*vcpu_free)(struct kvm_vcpu *);
-	int (*check_requests)(struct kvm_vcpu *);
-	int (*get_dirty_log)(struct kvm *, struct kvm_dirty_log *);
-	void (*flush_memslot)(struct kvm *, struct kvm_memory_slot *);
-	int (*prepare_memory_region)(struct kvm *, struct kvm_memory_slot *, const struct kvm_userspace_memory_region *, enum kvm_mr_change);
-	void (*commit_memory_region)(struct kvm *, const struct kvm_userspace_memory_region *, const struct kvm_memory_slot *, const struct kvm_memory_slot *, enum kvm_mr_change);
-	int (*unmap_hva_range)(struct kvm *, long unsigned int, long unsigned int);
-	int (*age_hva)(struct kvm *, long unsigned int, long unsigned int);
-	int (*test_age_hva)(struct kvm *, long unsigned int);
-	void (*set_spte_hva)(struct kvm *, long unsigned int, pte_t);
-	void (*free_memslot)(struct kvm_memory_slot *);
-	int (*init_vm)(struct kvm *);
-	void (*destroy_vm)(struct kvm *);
-	int (*get_smmu_info)(struct kvm *, struct kvm_ppc_smmu_info *);
-	int (*emulate_op)(struct kvm_vcpu *, unsigned int, int *);
-	int (*emulate_mtspr)(struct kvm_vcpu *, int, ulong);
-	int (*emulate_mfspr)(struct kvm_vcpu *, int, ulong *);
-	void (*fast_vcpu_kick)(struct kvm_vcpu *);
-	long int (*arch_vm_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*hcall_implemented)(long unsigned int);
-	int (*irq_bypass_add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*irq_bypass_del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	int (*configure_mmu)(struct kvm *, struct kvm_ppc_mmuv3_cfg *);
-	int (*get_rmmu_info)(struct kvm *, struct kvm_ppc_rmmu_info *);
-	int (*set_smt_mode)(struct kvm *, long unsigned int, long unsigned int);
-	void (*giveup_ext)(struct kvm_vcpu *, ulong);
-	int (*enable_nested)(struct kvm *);
-	int (*load_from_eaddr)(struct kvm_vcpu *, ulong *, void *, int);
-	int (*store_to_eaddr)(struct kvm_vcpu *, ulong *, void *, int);
-	int (*enable_svm)(struct kvm *);
-	int (*svm_off)(struct kvm *);
-};
-
-struct kvm_nested_guest {
-	struct kvm *l1_host;
-	int l1_lpid;
-	int shadow_lpid;
-	pgd_t *shadow_pgtable;
-	u64 l1_gr_to_hr;
-	u64 process_table;
-	long int refcnt;
-	struct mutex tlb_lock;
-	struct kvm_nested_guest *next;
-	cpumask_t need_tlb_flush;
-	cpumask_t cpu_in_guest;
-	short int prev_cpu[2048];
-	u8 radix;
-};
-
-struct kvmppc_pte {
-	ulong eaddr;
-	u64 vpage;
-	ulong raddr;
-	bool may_read: 1;
-	bool may_write: 1;
-	bool may_execute: 1;
-	long unsigned int wimg;
-	long unsigned int rc;
-	u8 page_size;
-	u8 page_shift;
-};
-
-struct kvmppc_sid_map {
-	u64 guest_vsid;
-	u64 guest_esid;
-	u64 host_vsid;
-	bool valid: 1;
-};
-
-struct kvmppc_bat {
-	u64 raw;
-	u32 bepi;
-	u32 bepi_mask;
-	u32 brpn;
-	u8 wimg;
-	u8 pp;
-	bool vs: 1;
-	bool vp: 1;
-};
-
-struct kvmppc_vcpu_book3s {
-	struct kvmppc_sid_map sid_map[512];
-	struct {
-		u64 esid;
-		u64 vsid;
-	} slb_shadow[64];
-	u8 slb_shadow_max;
-	struct kvmppc_bat ibat[8];
-	struct kvmppc_bat dbat[8];
-	u64 hid[6];
-	u64 gqr[8];
-	u64 sdr1;
-	u64 hior;
-	u64 msr_mask;
-	u64 vtb;
-	u64 proto_vsid_first;
-	u64 proto_vsid_max;
-	u64 proto_vsid_next;
-	int context_id[1];
-	bool hior_explicit;
-	struct hlist_head hpte_hash_pte[8192];
-	struct hlist_head hpte_hash_pte_long[4096];
-	struct hlist_head hpte_hash_vpte[8192];
-	struct hlist_head hpte_hash_vpte_long[32];
-	struct hlist_head hpte_hash_vpte_64k[2048];
-	int hpte_cache_count;
-	spinlock_t mmu_lock;
-};
-
-struct kvm_io_device;
-
-struct kvm_io_range {
-	gpa_t addr;
-	int len;
-	struct kvm_io_device *dev;
-};
-
-struct kvm_io_bus {
-	int dev_count;
-	int ioeventfd_count;
-	struct kvm_io_range range[0];
-};
-
-enum kvm_bus {
-	KVM_MMIO_BUS = 0,
-	KVM_PIO_BUS = 1,
-	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
-	KVM_FAST_MMIO_BUS = 3,
-	KVM_NR_BUSES = 4,
-};
-
-struct kvm_memslots {
-	u64 generation;
-	short int id_to_index[512];
-	atomic_t lru_slot;
-	int used_slots;
-	struct kvm_memory_slot memslots[0];
-};
-
-struct kvm_stats_debugfs_item;
-
-struct kvm_stat_data {
-	struct kvm *kvm;
-	struct kvm_stats_debugfs_item *dbgfs_item;
-};
-
-enum kvm_stat_kind {
-	KVM_STAT_VM = 0,
-	KVM_STAT_VCPU = 1,
-};
-
-struct kvm_stats_debugfs_item {
-	const char *name;
-	int offset;
-	enum kvm_stat_kind kind;
-	int mode;
-};
-
-enum {
-	OPAL_P7IOC_NUM_PEST_REGS = 128,
-	OPAL_PHB3_NUM_PEST_REGS = 256,
-	OPAL_PHB4_NUM_PEST_REGS = 512,
-};
-
-union kvmppc_one_reg {
-	u32 wval;
-	u64 dval;
-	vector128 vval;
-	u64 vsxval[2];
-	u32 vsx32val[4];
-	u16 vsx16val[8];
-	u8 vsx8val[16];
-	struct {
-		u64 addr;
-		u64 length;
-	} vpaval;
-	u64 xive_timaval[2];
-};
-
-enum ppc_dbell {
-	PPC_DBELL = 0,
-	PPC_DBELL_CRIT = 1,
-	PPC_G_DBELL = 2,
-	PPC_G_DBELL_CRIT = 3,
-	PPC_G_DBELL_MC = 4,
-	PPC_DBELL_SERVER = 5,
-};
-
-struct trace_event_raw_ppc64_interrupt_class {
-	struct trace_entry ent;
-	struct pt_regs *regs;
-	char __data[0];
-};
-
-struct trace_event_raw_hcall_entry {
-	struct trace_entry ent;
-	long unsigned int opcode;
-	char __data[0];
-};
-
-struct trace_event_raw_hcall_exit {
-	struct trace_entry ent;
-	long unsigned int opcode;
-	long int retval;
-	char __data[0];
-};
-
-struct trace_event_raw_opal_entry {
-	struct trace_entry ent;
-	long unsigned int opcode;
-	char __data[0];
-};
-
-struct trace_event_raw_opal_exit {
-	struct trace_entry ent;
-	long unsigned int opcode;
-	long unsigned int retval;
-	char __data[0];
-};
-
-struct trace_event_raw_hash_fault {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int access;
-	long unsigned int trap;
-	char __data[0];
-};
-
-struct trace_event_raw_tlbie {
-	struct trace_entry ent;
-	long unsigned int lpid;
-	long unsigned int local;
-	long unsigned int rb;
-	long unsigned int rs;
-	long unsigned int ric;
-	long unsigned int prs;
-	long unsigned int r;
-	char __data[0];
-};
-
-struct trace_event_raw_tlbia {
-	struct trace_entry ent;
-	long unsigned int id;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_ppc64_interrupt_class {};
-
-struct trace_event_data_offsets_hcall_entry {};
-
-struct trace_event_data_offsets_hcall_exit {};
-
-struct trace_event_data_offsets_opal_entry {};
-
-struct trace_event_data_offsets_opal_exit {};
-
-struct trace_event_data_offsets_hash_fault {};
-
-struct trace_event_data_offsets_tlbie {};
-
-struct trace_event_data_offsets_tlbia {};
-
-typedef void (*btf_trace_irq_entry)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_irq_exit)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_timer_interrupt_entry)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_timer_interrupt_exit)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_doorbell_entry)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_doorbell_exit)(void *, struct pt_regs *);
-
-typedef void (*btf_trace_hcall_entry)(void *, long unsigned int, long unsigned int *);
-
-typedef void (*btf_trace_hcall_exit)(void *, long unsigned int, long int, long unsigned int *);
-
-typedef void (*btf_trace_opal_entry)(void *, long unsigned int, long unsigned int *);
-
-typedef void (*btf_trace_opal_exit)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_hash_fault)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_tlbie)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_tlbia)(void *, long unsigned int);
-
-enum {
-	MMU_FTRS_POSSIBLE = 4261477441,
-};
-
-struct ppc_inst {
-	u32 val;
-	u32 suffix;
-};
-
-enum instruction_type {
-	COMPUTE = 0,
-	LOAD = 1,
-	LOAD_MULTI = 2,
-	LOAD_FP = 3,
-	LOAD_VMX = 4,
-	LOAD_VSX = 5,
-	STORE = 6,
-	STORE_MULTI = 7,
-	STORE_FP = 8,
-	STORE_VMX = 9,
-	STORE_VSX = 10,
-	LARX = 11,
-	STCX = 12,
-	BRANCH = 13,
-	MFSPR = 14,
-	MTSPR = 15,
-	CACHEOP = 16,
-	BARRIER = 17,
-	SYSCALL = 18,
-	SYSCALL_VECTORED_0 = 19,
-	MFMSR = 20,
-	MTMSR = 21,
-	RFI = 22,
-	INTERRUPT = 23,
-	UNKNOWN = 24,
-};
-
-struct instruction_op {
-	int type;
-	int reg;
-	long unsigned int val;
-	long unsigned int ea;
-	int update_reg;
-	int spr;
-	u32 ccval;
-	u32 xerval;
-	u8 element_size;
-	u8 vsx_flags;
-};
-
-typedef struct {
-	long unsigned int entry;
-	long unsigned int toc;
-	long unsigned int env;
-} func_descr_t;
-
-struct sigaltstack {
-	void *ss_sp;
-	int ss_flags;
-	size_t ss_size;
-};
-
-typedef struct sigaltstack stack_t;
-
-struct siginfo {
-	union {
-		struct {
-			int si_signo;
-			int si_errno;
-			int si_code;
-			union __sifields _sifields;
-		};
-		int _si_pad[32];
-	};
-};
-
-struct ksignal {
-	struct k_sigaction ka;
-	kernel_siginfo_t info;
-	int sig;
-};
-
-typedef long unsigned int elf_greg_t64;
-
-typedef elf_greg_t64 elf_gregset_t64[48];
-
-typedef elf_gregset_t64 elf_gregset_t;
-
-typedef double elf_fpreg_t;
-
-typedef elf_fpreg_t elf_fpregset_t[33];
-
-typedef __vector128 elf_vrreg_t;
-
-struct sigcontext {
-	long unsigned int _unused[4];
-	int signal;
-	int _pad0;
-	long unsigned int handler;
-	long unsigned int oldmask;
-	struct user_pt_regs *regs;
-	elf_gregset_t gp_regs;
-	elf_fpregset_t fp_regs;
-	elf_vrreg_t *v_regs;
-	long int vmx_reserve[101];
-};
-
-struct ucontext {
-	long unsigned int uc_flags;
-	struct ucontext *uc_link;
-	stack_t uc_stack;
-	sigset_t uc_sigmask;
-	sigset_t __unused[15];
-	struct sigcontext uc_mcontext;
-};
-
-struct rt_sigframe {
-	struct ucontext uc;
-	struct ucontext uc_transact;
-	long unsigned int _unused[2];
-	unsigned int tramp[7];
-	struct siginfo *pinfo;
-	void *puc;
-	struct siginfo info;
-	char abigap[512];
-};
-
-typedef void (*perf_irq_t)(struct pt_regs *);
-
-struct ppc_cache_info {
-	u32 size;
-	u32 line_size;
-	u32 block_size;
-	u32 log_block_size;
-	u32 blocks_per_page;
-	u32 sets;
-	u32 assoc;
-};
-
-struct ppc64_caches {
-	struct ppc_cache_info l1d;
-	struct ppc_cache_info l1i;
-	struct ppc_cache_info l2;
-	struct ppc_cache_info l3;
-};
-
-typedef __u32 Elf32_Addr;
-
-typedef __u16 Elf32_Half;
-
-typedef __u32 Elf32_Off;
-
-typedef __u64 Elf64_Off;
-
-struct elf32_sym {
-	Elf32_Word st_name;
-	Elf32_Addr st_value;
-	Elf32_Word st_size;
-	unsigned char st_info;
-	unsigned char st_other;
-	Elf32_Half st_shndx;
-};
-
-typedef struct elf32_sym Elf32_Sym;
-
-struct elf32_hdr {
-	unsigned char e_ident[16];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-};
-
-typedef struct elf32_hdr Elf32_Ehdr;
-
-struct elf64_hdr {
-	unsigned char e_ident[16];
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;
-	Elf64_Off e_phoff;
-	Elf64_Off e_shoff;
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
-};
-
-typedef struct elf64_hdr Elf64_Ehdr;
-
-struct elf32_shdr {
-	Elf32_Word sh_name;
-	Elf32_Word sh_type;
-	Elf32_Word sh_flags;
-	Elf32_Addr sh_addr;
-	Elf32_Off sh_offset;
-	Elf32_Word sh_size;
-	Elf32_Word sh_link;
-	Elf32_Word sh_info;
-	Elf32_Word sh_addralign;
-	Elf32_Word sh_entsize;
-};
-
-typedef struct elf32_shdr Elf32_Shdr;
-
-struct elf64_shdr {
-	Elf64_Word sh_name;
-	Elf64_Word sh_type;
-	Elf64_Xword sh_flags;
-	Elf64_Addr sh_addr;
-	Elf64_Off sh_offset;
-	Elf64_Xword sh_size;
-	Elf64_Word sh_link;
-	Elf64_Word sh_info;
-	Elf64_Xword sh_addralign;
-	Elf64_Xword sh_entsize;
-};
-
-typedef struct elf64_shdr Elf64_Shdr;
-
-struct vdso_data {
-	__u8 eye_catcher[16];
-	struct {
-		__u32 major;
-		__u32 minor;
-	} version;
-	__u32 platform;
-	__u32 processor;
-	__u64 processorCount;
-	__u64 physicalMemorySize;
-	__u64 tb_orig_stamp;
-	__u64 tb_ticks_per_sec;
-	__u64 tb_to_xs;
-	__u64 stamp_xsec;
-	__u64 tb_update_count;
-	__u32 tz_minuteswest;
-	__u32 tz_dsttime;
-	__u32 dcache_size;
-	__u32 dcache_line_size;
-	__u32 icache_size;
-	__u32 icache_line_size;
-	__u32 dcache_block_size;
-	__u32 icache_block_size;
-	__u32 dcache_log_block_size;
-	__u32 icache_log_block_size;
-	__u32 stamp_sec_fraction;
-	__s32 wtom_clock_nsec;
-	__s64 wtom_clock_sec;
-	__s64 stamp_xtime_sec;
-	__s64 stamp_xtime_nsec;
-	__u32 hrtimer_res;
-	__u32 syscall_map_64[14];
-	__u32 syscall_map_32[14];
-};
-
-struct vdso_patch_def {
-	long unsigned int ftr_mask;
-	long unsigned int ftr_value;
-	const char *gen_name;
-	const char *fix_name;
-};
-
-struct lib32_elfinfo {
-	Elf32_Ehdr *hdr;
-	Elf32_Sym *dynsym;
-	long unsigned int dynsymsize;
-	char *dynstr;
-	long unsigned int text;
-};
-
-struct lib64_elfinfo {
-	Elf64_Ehdr *hdr;
-	Elf64_Sym *dynsym;
-	long unsigned int dynsymsize;
-	char *dynstr;
-	long unsigned int text;
-};
-
-typedef u8 uint8_t;
-
-typedef struct {
-	pte_t pte;
-	long unsigned int hidx;
-} real_pte_t;
-
-struct mmu_psize_def {
-	unsigned int shift;
-	int penc[16];
-	unsigned int tlbiel;
-	long unsigned int avpnm;
-	union {
-		long unsigned int sllp;
-		long unsigned int ap;
-	};
-};
-
-enum die_val {
-	DIE_OOPS = 1,
-	DIE_IABR_MATCH = 2,
-	DIE_DABR_MATCH = 3,
-	DIE_BPT = 4,
-	DIE_SSTEP = 5,
-};
-
-enum refcount_saturation_type {
-	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
-	REFCOUNT_ADD_OVF = 1,
-	REFCOUNT_ADD_UAF = 2,
-	REFCOUNT_SUB_UAF = 3,
-	REFCOUNT_DEC_LEAK = 4,
-};
-
-struct ppc64_tlb_batch {
-	int active;
-	long unsigned int index;
-	struct mm_struct *mm;
-	real_pte_t pte[192];
-	long unsigned int vpn[192];
-	unsigned int psize;
-	int ssize;
-};
-
-struct regbit {
-	long unsigned int bit;
-	const char *name;
-};
-
-enum idle_boot_override {
-	IDLE_NO_OVERRIDE = 0,
-	IDLE_POWERSAVE_OFF = 1,
-};
-
-enum {
-	TASKSTATS_CMD_UNSPEC = 0,
-	TASKSTATS_CMD_GET = 1,
-	TASKSTATS_CMD_NEW = 2,
-	__TASKSTATS_CMD_MAX = 3,
-};
-
-enum bpf_cgroup_storage_type {
-	BPF_CGROUP_STORAGE_SHARED = 0,
-	BPF_CGROUP_STORAGE_PERCPU = 1,
-	__BPF_CGROUP_STORAGE_MAX = 2,
-};
-
-enum psi_task_count {
-	NR_IOWAIT = 0,
-	NR_MEMSTALL = 1,
-	NR_RUNNING = 2,
-	NR_ONCPU = 3,
-	NR_PSI_TASK_COUNTS = 4,
-};
-
-enum psi_states {
-	PSI_IO_SOME = 0,
-	PSI_IO_FULL = 1,
-	PSI_MEM_SOME = 2,
-	PSI_MEM_FULL = 3,
-	PSI_CPU_SOME = 4,
-	PSI_NONIDLE = 5,
-	NR_PSI_STATES = 6,
-};
-
-enum psi_aggregators {
-	PSI_AVGS = 0,
-	PSI_POLL = 1,
-	NR_PSI_AGGREGATORS = 2,
-};
-
-enum cgroup_subsys_id {
-	cpuset_cgrp_id = 0,
-	cpu_cgrp_id = 1,
-	cpuacct_cgrp_id = 2,
-	io_cgrp_id = 3,
-	memory_cgrp_id = 4,
-	devices_cgrp_id = 5,
-	freezer_cgrp_id = 6,
-	net_cls_cgrp_id = 7,
-	perf_event_cgrp_id = 8,
-	net_prio_cgrp_id = 9,
-	hugetlb_cgrp_id = 10,
-	pids_cgrp_id = 11,
-	CGROUP_SUBSYS_COUNT = 12,
-};
-
-struct smp_ops_t {
-	void (*message_pass)(int, int);
-	void (*cause_ipi)(int);
-	int (*cause_nmi_ipi)(int);
-	void (*probe)();
-	int (*kick_cpu)(int);
-	int (*prepare_cpu)(int);
-	void (*setup_cpu)(int);
-	void (*bringup_done)();
-	void (*take_timebase)();
-	void (*give_timebase)();
-	int (*cpu_disable)();
-	void (*cpu_die)(unsigned int);
-	int (*cpu_bootable)(unsigned int);
-	void (*cpu_offline_self)();
-};
-
-typedef struct pglist_data pg_data_t;
-
-enum meminit_context {
-	MEMINIT_EARLY = 0,
-	MEMINIT_HOTPLUG = 1,
-};
-
-struct device_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device *, struct device_attribute *, char *);
-	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
-};
-
-struct node {
-	struct device dev;
-	struct list_head access_list;
-	struct work_struct node_work;
-};
-
-struct cpu {
-	int node_id;
-	int hotpluggable;
-	struct device dev;
-};
-
-struct kobj_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
-};
-
-struct cache_index_dir;
-
-struct cache_dir {
-	struct kobject *kobj;
-	struct cache_index_dir *index;
-};
-
-struct cache;
-
-struct cache_index_dir {
-	struct kobject kobj;
-	struct cache_index_dir *next;
-	struct cache *cache;
-};
-
-struct cache {
-	struct device_node *ofnode;
-	struct cpumask shared_cpu_map;
-	int type;
-	int level;
-	struct list_head list;
-	struct cache *next_local;
-};
-
-struct cache_type_info {
-	const char *name;
-	const char *size_prop;
-	const char *line_size_props[2];
-	const char *nr_sets_prop;
-};
-
-typedef u64 uint64_t;
-
-struct dtl_entry {
-	u8 dispatch_reason;
-	u8 preempt_reason;
-	__be16 processor_id;
-	__be32 enqueue_to_dispatch_time;
-	__be32 ready_to_enqueue_time;
-	__be32 waiting_to_ready_time;
-	__be64 timebase;
-	__be64 fault_addr;
-	__be64 srr0;
-	__be64 srr1;
-};
-
-struct timezone {
-	int tz_minuteswest;
-	int tz_dsttime;
-};
-
-enum vdso_clock_mode {
-	VDSO_CLOCKMODE_NONE = 0,
-	VDSO_CLOCKMODE_MAX = 1,
-	VDSO_CLOCKMODE_TIMENS = 2147483647,
-};
-
-struct clocksource {
-	u64 (*read)(struct clocksource *);
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
 	u64 mask;
 	u32 mult;
 	u32 shift;
-	u64 max_idle_ns;
-	u32 maxadj;
-	u64 max_cycles;
-	const char *name;
-	struct list_head list;
-	int rating;
-	enum vdso_clock_mode vdso_clock_mode;
+};
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+};
+
+struct ptp_clock_time {
+	__s64 sec;
+	__u32 nsec;
+	__u32 reserved;
+};
+
+struct ptp_extts_request {
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+	union {
+		struct ptp_clock_time start;
+		struct ptp_clock_time phase;
+	};
+	struct ptp_clock_time period;
+	unsigned int index;
+	unsigned int flags;
+	union {
+		struct ptp_clock_time on;
+		unsigned int rsv[4];
+	};
+};
+
+enum ptp_pin_function {
+	PTP_PF_NONE = 0,
+	PTP_PF_EXTTS = 1,
+	PTP_PF_PEROUT = 2,
+	PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+	char name[64];
+	unsigned int index;
+	unsigned int func;
+	unsigned int chan;
+	unsigned int rsv[5];
+};
+
+struct ptp_clock_request {
+	enum {
+		PTP_CLK_REQ_EXTTS = 0,
+		PTP_CLK_REQ_PEROUT = 1,
+		PTP_CLK_REQ_PPS = 2,
+	} type;
+	union {
+		struct ptp_extts_request extts;
+		struct ptp_perout_request perout;
+	};
+};
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct ptp_clock_info {
+	struct module *owner;
+	char name[32];
+	s32 max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int n_pins;
+	int pps;
+	struct ptp_pin_desc *pin_config;
+	int (*adjfine)(struct ptp_clock_info *, long int);
+	int (*adjfreq)(struct ptp_clock_info *, s32);
+	int (*adjphase)(struct ptp_clock_info *, s32);
+	int (*adjtime)(struct ptp_clock_info *, s64);
+	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+	int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+	long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum e1000_mac_type {
+	e1000_82571 = 0,
+	e1000_82572 = 1,
+	e1000_82573 = 2,
+	e1000_82574 = 3,
+	e1000_82583 = 4,
+	e1000_80003es2lan = 5,
+	e1000_ich8lan = 6,
+	e1000_ich9lan = 7,
+	e1000_ich10lan = 8,
+	e1000_pchlan = 9,
+	e1000_pch2lan = 10,
+	e1000_pch_lpt = 11,
+	e1000_pch_spt = 12,
+	e1000_pch_cnp = 13,
+	e1000_pch_tgp = 14,
+	e1000_pch_adp = 15,
+	e1000_pch_mtp = 16,
+	e1000_pch_lnp = 17,
+};
+
+enum e1000_media_type {
+	e1000_media_type_unknown = 0,
+	e1000_media_type_copper = 1,
+	e1000_media_type_fiber = 2,
+	e1000_media_type_internal_serdes = 3,
+	e1000_num_media_types = 4,
+};
+
+enum e1000_nvm_type {
+	e1000_nvm_unknown = 0,
+	e1000_nvm_none = 1,
+	e1000_nvm_eeprom_spi = 2,
+	e1000_nvm_flash_hw = 3,
+	e1000_nvm_flash_sw = 4,
+};
+
+enum e1000_nvm_override {
+	e1000_nvm_override_none = 0,
+	e1000_nvm_override_spi_small = 1,
+	e1000_nvm_override_spi_large = 2,
+};
+
+enum e1000_phy_type {
+	e1000_phy_unknown = 0,
+	e1000_phy_none = 1,
+	e1000_phy_m88 = 2,
+	e1000_phy_igp = 3,
+	e1000_phy_igp_2 = 4,
+	e1000_phy_gg82563 = 5,
+	e1000_phy_igp_3 = 6,
+	e1000_phy_ife = 7,
+	e1000_phy_bm = 8,
+	e1000_phy_82578 = 9,
+	e1000_phy_82577 = 10,
+	e1000_phy_82579 = 11,
+	e1000_phy_i217 = 12,
+};
+
+enum e1000_bus_width {
+	e1000_bus_width_unknown = 0,
+	e1000_bus_width_pcie_x1 = 1,
+	e1000_bus_width_pcie_x2 = 2,
+	e1000_bus_width_pcie_x4 = 4,
+	e1000_bus_width_pcie_x8 = 8,
+	e1000_bus_width_32 = 9,
+	e1000_bus_width_64 = 10,
+	e1000_bus_width_reserved = 11,
+};
+
+enum e1000_1000t_rx_status {
+	e1000_1000t_rx_status_not_ok = 0,
+	e1000_1000t_rx_status_ok = 1,
+	e1000_1000t_rx_status_undefined = 255,
+};
+
+enum e1000_rev_polarity {
+	e1000_rev_polarity_normal = 0,
+	e1000_rev_polarity_reversed = 1,
+	e1000_rev_polarity_undefined = 255,
+};
+
+enum e1000_fc_mode {
+	e1000_fc_none = 0,
+	e1000_fc_rx_pause = 1,
+	e1000_fc_tx_pause = 2,
+	e1000_fc_full = 3,
+	e1000_fc_default = 255,
+};
+
+enum e1000_ms_type {
+	e1000_ms_hw_default = 0,
+	e1000_ms_force_master = 1,
+	e1000_ms_force_slave = 2,
+	e1000_ms_auto = 3,
+};
+
+enum e1000_smart_speed {
+	e1000_smart_speed_default = 0,
+	e1000_smart_speed_on = 1,
+	e1000_smart_speed_off = 2,
+};
+
+enum e1000_serdes_link_state {
+	e1000_serdes_link_down = 0,
+	e1000_serdes_link_autoneg_progress = 1,
+	e1000_serdes_link_autoneg_complete = 2,
+	e1000_serdes_link_forced_up = 3,
+};
+
+struct e1000_hw_stats {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorc;
+	u64 gotc;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 tor;
+	u64 tot;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+};
+
+struct e1000_phy_stats {
+	u32 idle_errors;
+	u32 receive_errors;
+};
+
+struct e1000_host_mng_dhcp_cookie {
+	u32 signature;
+	u8 status;
+	u8 reserved0;
+	u16 vlan_id;
+	u32 reserved1;
+	u16 reserved2;
+	u8 reserved3;
+	u8 checksum;
+};
+
+struct e1000_hw;
+
+struct e1000_mac_operations {
+	s32 (*id_led_init)(struct e1000_hw *);
+	s32 (*blink_led)(struct e1000_hw *);
+	bool (*check_mng_mode)(struct e1000_hw *);
+	s32 (*check_for_link)(struct e1000_hw *);
+	s32 (*cleanup_led)(struct e1000_hw *);
+	void (*clear_hw_cntrs)(struct e1000_hw *);
+	void (*clear_vfta)(struct e1000_hw *);
+	s32 (*get_bus_info)(struct e1000_hw *);
+	void (*set_lan_id)(struct e1000_hw *);
+	s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
+	s32 (*led_on)(struct e1000_hw *);
+	s32 (*led_off)(struct e1000_hw *);
+	void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
+	s32 (*reset_hw)(struct e1000_hw *);
+	s32 (*init_hw)(struct e1000_hw *);
+	s32 (*setup_link)(struct e1000_hw *);
+	s32 (*setup_physical_interface)(struct e1000_hw *);
+	s32 (*setup_led)(struct e1000_hw *);
+	void (*write_vfta)(struct e1000_hw *, u32, u32);
+	void (*config_collision_dist)(struct e1000_hw *);
+	int (*rar_set)(struct e1000_hw *, u8 *, u32);
+	s32 (*read_mac_addr)(struct e1000_hw *);
+	u32 (*rar_get_count)(struct e1000_hw *);
+};
+
+struct e1000_mac_info {
+	struct e1000_mac_operations ops;
+	u8 addr[6];
+	u8 perm_addr[6];
+	enum e1000_mac_type type;
+	u32 collision_delta;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	u32 mc_filter_type;
+	u32 tx_packet_delta;
+	u32 txcw;
+	u16 current_ifs_val;
+	u16 ifs_max_val;
+	u16 ifs_min_val;
+	u16 ifs_ratio;
+	u16 ifs_step_size;
+	u16 mta_reg_count;
+	u32 mta_shadow[128];
+	u16 rar_entry_count;
+	u8 forced_speed_duplex;
+	bool adaptive_ifs;
+	bool has_fwsm;
+	bool arc_subsystem_valid;
+	bool autoneg;
+	bool autoneg_failed;
+	bool get_link_status;
+	bool in_ifs_mode;
+	bool serdes_has_link;
+	bool tx_pkt_filtering;
+	enum e1000_serdes_link_state serdes_link_state;
+};
+
+struct e1000_fc_info {
+	u32 high_water;
+	u32 low_water;
+	u16 pause_time;
+	u16 refresh_time;
+	bool send_xon;
+	bool strict_ieee;
+	enum e1000_fc_mode current_mode;
+	enum e1000_fc_mode requested_mode;
+};
+
+struct e1000_phy_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*cfg_on_link_up)(struct e1000_hw *);
+	s32 (*check_polarity)(struct e1000_hw *);
+	s32 (*check_reset_block)(struct e1000_hw *);
+	s32 (*commit)(struct e1000_hw *);
+	s32 (*force_speed_duplex)(struct e1000_hw *);
+	s32 (*get_cfg_done)(struct e1000_hw *);
+	s32 (*get_cable_length)(struct e1000_hw *);
+	s32 (*get_info)(struct e1000_hw *);
+	s32 (*set_page)(struct e1000_hw *, u16);
+	s32 (*read_reg)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *);
+	void (*release)(struct e1000_hw *);
+	s32 (*reset)(struct e1000_hw *);
+	s32 (*set_d0_lplu_state)(struct e1000_hw *, bool);
+	s32 (*set_d3_lplu_state)(struct e1000_hw *, bool);
+	s32 (*write_reg)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_locked)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_page)(struct e1000_hw *, u32, u16);
+	void (*power_up)(struct e1000_hw *);
+	void (*power_down)(struct e1000_hw *);
+};
+
+struct e1000_phy_info {
+	struct e1000_phy_operations ops;
+	enum e1000_phy_type type;
+	enum e1000_1000t_rx_status local_rx;
+	enum e1000_1000t_rx_status remote_rx;
+	enum e1000_ms_type ms_type;
+	enum e1000_ms_type original_ms_type;
+	enum e1000_rev_polarity cable_polarity;
+	enum e1000_smart_speed smart_speed;
+	u32 addr;
+	u32 id;
+	u32 reset_delay_us;
+	u32 revision;
+	enum e1000_media_type media_type;
+	u16 autoneg_advertised;
+	u16 autoneg_mask;
+	u16 cable_length;
+	u16 max_cable_length;
+	u16 min_cable_length;
+	u8 mdix;
+	bool disable_polarity_correction;
+	bool is_mdix;
+	bool polarity_correction;
+	bool speed_downgraded;
+	bool autoneg_wait_to_complete;
+};
+
+struct e1000_nvm_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*read)(struct e1000_hw *, u16, u16, u16 *);
+	void (*release)(struct e1000_hw *);
+	void (*reload)(struct e1000_hw *);
+	s32 (*update)(struct e1000_hw *);
+	s32 (*valid_led_default)(struct e1000_hw *, u16 *);
+	s32 (*validate)(struct e1000_hw *);
+	s32 (*write)(struct e1000_hw *, u16, u16, u16 *);
+};
+
+struct e1000_nvm_info {
+	struct e1000_nvm_operations ops;
+	enum e1000_nvm_type type;
+	enum e1000_nvm_override override;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	u16 word_size;
+	u16 delay_usec;
+	u16 address_bits;
+	u16 opcode_bits;
+	u16 page_size;
+};
+
+struct e1000_bus_info {
+	enum e1000_bus_width width;
+	u16 func;
+};
+
+struct e1000_dev_spec_82571 {
+	bool laa_is_present;
+	u32 smb_counter;
+};
+
+struct e1000_dev_spec_80003es2lan {
+	bool mdic_wa_enable;
+};
+
+struct e1000_shadow_ram {
+	u16 value;
+	bool modified;
+};
+
+enum e1000_ulp_state {
+	e1000_ulp_state_unknown = 0,
+	e1000_ulp_state_off = 1,
+	e1000_ulp_state_on = 2,
+};
+
+struct e1000_dev_spec_ich8lan {
+	bool kmrn_lock_loss_workaround_enabled;
+	struct e1000_shadow_ram shadow_ram[2048];
+	bool nvm_k1_enabled;
+	bool eee_disable;
+	u16 eee_lp_ability;
+	enum e1000_ulp_state ulp_state;
+};
+
+struct e1000_adapter;
+
+struct e1000_hw {
+	struct e1000_adapter *adapter;
+	void *hw_addr;
+	void *flash_address;
+	struct e1000_mac_info mac;
+	struct e1000_fc_info fc;
+	struct e1000_phy_info phy;
+	struct e1000_nvm_info nvm;
+	struct e1000_bus_info bus;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	union {
+		struct e1000_dev_spec_82571 e82571;
+		struct e1000_dev_spec_80003es2lan e80003es2lan;
+		struct e1000_dev_spec_ich8lan ich8lan;
+	} dev_spec;
+};
+
+struct e1000_phy_regs {
+	u16 bmcr;
+	u16 bmsr;
+	u16 advertise;
+	u16 lpa;
+	u16 expansion;
+	u16 ctrl1000;
+	u16 stat1000;
+	u16 estatus;
+};
+
+struct e1000_buffer;
+
+struct e1000_ring {
+	struct e1000_adapter *adapter;
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	u16 next_to_use;
+	u16 next_to_clean;
+	void *head;
+	void *tail;
+	struct e1000_buffer *buffer_info;
+	char name[21];
+	u32 ims_val;
+	u32 itr_val;
+	void *itr_register;
+	int set_itr;
+	struct sk_buff *rx_skb_top;
+};
+
+struct ptp_clock;
+
+struct e1000_info;
+
+struct e1000_adapter {
+	struct timer_list watchdog_timer;
+	struct timer_list phy_info_timer;
+	struct timer_list blink_timer;
+	struct work_struct reset_task;
+	struct work_struct watchdog_task;
+	const struct e1000_info *ei;
+	long unsigned int active_vlans[64];
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u16 mng_vlan_id;
+	u16 link_speed;
+	u16 link_duplex;
+	u16 eeprom_vers;
+	long unsigned int state;
+	u32 itr;
+	u32 itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct e1000_ring *tx_ring;
+	u32 tx_fifo_limit;
+	struct napi_struct napi;
+	unsigned int uncorr_errors;
+	unsigned int corr_errors;
+	unsigned int restart_queue;
+	u32 txd_cmd;
+	bool detect_tx_hung;
+	bool tx_hang_recheck;
+	u8 tx_timeout_factor;
+	u32 tx_int_delay;
+	u32 tx_abs_int_delay;
+	unsigned int total_tx_bytes;
+	unsigned int total_tx_packets;
+	unsigned int total_rx_bytes;
+	unsigned int total_rx_packets;
+	u64 tpt_old;
+	u64 colc_old;
+	u32 gotc;
+	u64 gotc_old;
+	u32 tx_timeout_count;
+	u32 tx_fifo_head;
+	u32 tx_head_addr;
+	u32 tx_fifo_size;
+	u32 tx_dma_failed;
+	u32 tx_hwtstamp_timeouts;
+	u32 tx_hwtstamp_skipped;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	bool (*clean_rx)(struct e1000_ring *, int *, int);
+	void (*alloc_rx_buf)(struct e1000_ring *, int, gfp_t);
+	struct e1000_ring *rx_ring;
+	u32 rx_int_delay;
+	u32 rx_abs_int_delay;
+	u64 hw_csum_err;
+	u64 hw_csum_good;
+	u64 rx_hdr_split;
+	u32 gorc;
+	u64 gorc_old;
+	u32 alloc_rx_buff_failed;
+	u32 rx_dma_failed;
+	u32 rx_hwtstamp_cleared;
+	unsigned int rx_ps_pages;
+	u16 rx_ps_bsize0;
+	u32 max_frame_size;
+	u32 min_frame_size;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct e1000_hw hw;
+	spinlock_t stats64_lock;
+	struct e1000_hw_stats stats;
+	struct e1000_phy_info phy_info;
+	struct e1000_phy_stats phy_stats;
+	struct e1000_phy_regs phy_regs;
+	struct e1000_ring test_tx_ring;
+	struct e1000_ring test_rx_ring;
+	u32 test_icr;
+	u32 msg_enable;
+	unsigned int num_vectors;
+	struct msix_entry *msix_entries;
+	int int_mode;
+	u32 eiac_mask;
+	u32 eeprom_wol;
+	u32 wol;
+	u32 pba;
+	u32 max_hw_frame_size;
+	bool fc_autoneg;
+	unsigned int flags;
+	unsigned int flags2;
+	struct work_struct downshift_task;
+	struct work_struct update_phy_task;
+	struct work_struct print_hang_task;
+	int phy_hang_count;
+	u16 tx_ring_count;
+	u16 rx_ring_count;
+	struct hwtstamp_config hwtstamp_config;
+	struct delayed_work systim_overflow_work;
+	struct sk_buff *tx_hwtstamp_skb;
+	long unsigned int tx_hwtstamp_start;
+	struct work_struct tx_hwtstamp_work;
+	spinlock_t systim_lock;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_clock_info;
+	struct pm_qos_request pm_qos_req;
+	long int ptp_delta;
+	u16 eee_advert;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct e1000_ps_page {
+	struct page *page;
+	u64 dma;
+};
+
+struct e1000_buffer {
+	dma_addr_t dma;
+	struct sk_buff *skb;
+	union {
+		struct {
+			long unsigned int time_stamp;
+			u16 length;
+			u16 next_to_watch;
+			unsigned int segs;
+			unsigned int bytecount;
+			u16 mapped_as_page;
+		};
+		struct {
+			struct e1000_ps_page *ps_pages;
+			struct page *page;
+		};
+	};
+};
+
+struct e1000_info {
+	enum e1000_mac_type mac;
+	unsigned int flags;
+	unsigned int flags2;
+	u32 pba;
+	u32 max_hw_frame_size;
+	s32 (*get_variants)(struct e1000_adapter *);
+	const struct e1000_mac_operations *mac_ops;
+	const struct e1000_phy_operations *phy_ops;
+	const struct e1000_nvm_operations *nvm_ops;
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block *head;
+};
+
+struct tasklet_struct {
+	struct tasklet_struct *next;
+	long unsigned int state;
+	atomic_t count;
+	bool use_callback;
+	union {
+		void (*func)(long unsigned int);
+		void (*callback)(struct tasklet_struct *);
+	};
+	long unsigned int data;
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	__le32 bmSublinkSpeedAttr[1];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	long: 0;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	long: 0;
+} __attribute__((packed));
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+};
+
+struct usb_devmap {
+	long unsigned int devicemap[2];
+};
+
+struct mon_bus;
+
+struct usb_device;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+};
+
+struct wusb_dev;
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	short unsigned int bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int wusb: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	long unsigned int active_duration;
+	long unsigned int connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	struct wusb_dev *wusb_dev;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+};
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct usb_phy_roothub;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct gen_pool;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
 	long unsigned int flags;
-	int (*enable)(struct clocksource *);
-	void (*disable)(struct clocksource *);
-	void (*suspend)(struct clocksource *);
-	void (*resume)(struct clocksource *);
-	void (*mark_unstable)(struct clocksource *);
-	void (*tick_stable)(struct clocksource *);
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int wireless: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	long unsigned int hcd_priv[0];
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+struct extcon_dev;
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy_io_ops;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	long unsigned int differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	long unsigned int hs_clk_rate;
+	long unsigned int lp_clk_rate;
+	unsigned char lanes;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy___2;
+
+struct phy_ops {
+	int (*init)(struct phy___2 *);
+	int (*exit)(struct phy___2 *);
+	int (*power_on)(struct phy___2 *);
+	int (*power_off)(struct phy___2 *);
+	int (*set_mode)(struct phy___2 *, enum phy_mode, int);
+	int (*set_media)(struct phy___2 *, enum phy_media);
+	int (*set_speed)(struct phy___2 *, int);
+	int (*configure)(struct phy___2 *, union phy_configure_opts *);
+	int (*validate)(struct phy___2 *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy___2 *);
+	int (*calibrate)(struct phy___2 *);
+	void (*release)(struct phy___2 *);
 	struct module *owner;
 };
 
-struct pdev_archdata {
-	u64 dma_mask;
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
 };
 
-enum clock_event_state {
-	CLOCK_EVT_STATE_DETACHED = 0,
-	CLOCK_EVT_STATE_SHUTDOWN = 1,
-	CLOCK_EVT_STATE_PERIODIC = 2,
-	CLOCK_EVT_STATE_ONESHOT = 3,
-	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+struct phy___2 {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
 };
 
-struct clock_event_device {
-	void (*event_handler)(struct clock_event_device *);
-	int (*set_next_event)(long unsigned int, struct clock_event_device *);
-	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
-	ktime_t next_event;
-	u64 max_delta_ns;
-	u64 min_delta_ns;
-	u32 mult;
-	u32 shift;
-	enum clock_event_state state_use_accessors;
-	unsigned int features;
-	long unsigned int retries;
-	int (*set_state_periodic)(struct clock_event_device *);
-	int (*set_state_oneshot)(struct clock_event_device *);
-	int (*set_state_oneshot_stopped)(struct clock_event_device *);
-	int (*set_state_shutdown)(struct clock_event_device *);
-	int (*tick_resume)(struct clock_event_device *);
-	void (*broadcast)(const struct cpumask *);
-	void (*suspend)(struct clock_event_device *);
-	void (*resume)(struct clock_event_device *);
-	long unsigned int min_delta_ticks;
-	long unsigned int max_delta_ticks;
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy___2 *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	long unsigned int reset_done[15];
+	long unsigned int bus_suspended;
+	long unsigned int companion_ports;
+	long unsigned int owned_ports;
+	long unsigned int port_c_suspend;
+	long unsigned int suspended_ports;
+	long unsigned int resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	long unsigned int next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	long unsigned int priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_MAX_UNBOUND_PER_CPU = 4,
+	WQ_DFL_ACTIVE = 256,
+};
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 *custom_data;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_handle;
+
+struct input_dev {
 	const char *name;
-	int rating;
-	int irq;
-	int bound_on;
-	const struct cpumask *cpumask;
-	struct list_head list;
-	struct module *owner;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	long unsigned int propbit[1];
+	long unsigned int evbit[1];
+	long unsigned int keybit[12];
+	long unsigned int relbit[1];
+	long unsigned int absbit[1];
+	long unsigned int mscbit[1];
+	long unsigned int ledbit[1];
+	long unsigned int sndbit[1];
+	long unsigned int ffbit[2];
+	long unsigned int swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	long unsigned int key[12];
+	long unsigned int led[1];
+	long unsigned int snd[1];
+	long unsigned int sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
 };
 
-struct div_result {
-	u64 result_high;
-	u64 result_low;
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	long unsigned int ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	struct file *effect_owners[0];
 };
 
-struct platform_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+struct input_handler;
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+};
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+};
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	long unsigned int flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+};
+
+enum psmouse_state {
+	PSMOUSE_IGNORE = 0,
+	PSMOUSE_INITIALIZING = 1,
+	PSMOUSE_RESYNCING = 2,
+	PSMOUSE_CMD_MODE = 3,
+	PSMOUSE_ACTIVATED = 4,
+};
+
+typedef enum {
+	PSMOUSE_BAD_DATA = 0,
+	PSMOUSE_GOOD_DATA = 1,
+	PSMOUSE_FULL_PACKET = 2,
+} psmouse_ret_t;
+
+enum psmouse_scale {
+	PSMOUSE_SCALE11 = 0,
+	PSMOUSE_SCALE21 = 1,
+};
+
+enum psmouse_type {
+	PSMOUSE_NONE = 0,
+	PSMOUSE_PS2 = 1,
+	PSMOUSE_PS2PP = 2,
+	PSMOUSE_THINKPS = 3,
+	PSMOUSE_GENPS = 4,
+	PSMOUSE_IMPS = 5,
+	PSMOUSE_IMEX = 6,
+	PSMOUSE_SYNAPTICS = 7,
+	PSMOUSE_ALPS = 8,
+	PSMOUSE_LIFEBOOK = 9,
+	PSMOUSE_TRACKPOINT = 10,
+	PSMOUSE_TOUCHKIT_PS2 = 11,
+	PSMOUSE_CORTRON = 12,
+	PSMOUSE_HGPK = 13,
+	PSMOUSE_ELANTECH = 14,
+	PSMOUSE_FSP = 15,
+	PSMOUSE_SYNAPTICS_RELATIVE = 16,
+	PSMOUSE_CYPRESS = 17,
+	PSMOUSE_FOCALTECH = 18,
+	PSMOUSE_VMMOUSE = 19,
+	PSMOUSE_BYD = 20,
+	PSMOUSE_SYNAPTICS_SMBUS = 21,
+	PSMOUSE_ELANTECH_SMBUS = 22,
+	PSMOUSE_AUTO = 23,
+};
+
+struct psmouse;
+
+struct psmouse_protocol {
+	enum psmouse_type type;
+	bool maxproto;
+	bool ignore_parity;
+	bool try_passthru;
+	bool smbus_companion;
+	const char *name;
+	const char *alias;
+	int (*detect)(struct psmouse *, bool);
+	int (*init)(struct psmouse *);
+};
+
+struct psmouse {
+	void *private;
+	struct input_dev *dev;
+	struct ps2dev ps2dev;
+	struct delayed_work resync_work;
+	const char *vendor;
+	const char *name;
+	const struct psmouse_protocol *protocol;
+	unsigned char packet[8];
+	unsigned char badbyte;
+	unsigned char pktcnt;
+	unsigned char pktsize;
+	unsigned char oob_data_type;
+	unsigned char extra_buttons;
+	bool acks_disable_command;
+	unsigned int model;
+	long unsigned int last;
+	long unsigned int out_of_sync_cnt;
+	long unsigned int num_resyncs;
+	enum psmouse_state state;
+	char devname[64];
+	char phys[32];
+	unsigned int rate;
+	unsigned int resolution;
+	unsigned int resetafter;
+	unsigned int resync_time;
+	bool smartscroll;
+	psmouse_ret_t (*protocol_handler)(struct psmouse *);
+	void (*set_rate)(struct psmouse *, unsigned int);
+	void (*set_resolution)(struct psmouse *, unsigned int);
+	void (*set_scale)(struct psmouse *, enum psmouse_scale);
+	int (*reconnect)(struct psmouse *);
+	int (*fast_reconnect)(struct psmouse *);
+	void (*disconnect)(struct psmouse *);
+	void (*cleanup)(struct psmouse *);
+	int (*poll)(struct psmouse *);
+	void (*pt_activate)(struct psmouse *);
+	void (*pt_deactivate)(struct psmouse *);
+};
+
+struct psmouse_attribute {
+	struct device_attribute dattr;
+	void *data;
+	ssize_t (*show)(struct psmouse *, void *, char *);
+	ssize_t (*set)(struct psmouse *, void *, const char *, size_t);
+	bool protect;
 };
 
 enum dev_prop_type {
@@ -17398,6 +32602,14 @@
 	DEV_PROP_REF = 5,
 };
 
+struct property_entry;
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
 struct property_entry {
 	const char *name;
 	size_t length;
@@ -17415,472 +32627,6029 @@
 	};
 };
 
-struct kernel_cpustat {
-	u64 cpustat[10];
-};
-
-struct rtc_time {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	int tm_year;
-	int tm_wday;
-	int tm_yday;
-	int tm_isdst;
-};
-
-struct rtc_wkalrm {
-	unsigned char enabled;
-	unsigned char pending;
-	struct rtc_time time;
-};
-
-struct rtc_class_ops {
-	int (*ioctl)(struct device *, unsigned int, long unsigned int);
-	int (*read_time)(struct device *, struct rtc_time *);
-	int (*set_time)(struct device *, struct rtc_time *);
-	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*proc)(struct device *, struct seq_file *);
-	int (*alarm_irq_enable)(struct device *, unsigned int);
-	int (*read_offset)(struct device *, long int *);
-	int (*set_offset)(struct device *, long int);
-};
-
-struct mfd_cell;
-
-struct platform_device {
-	const char *name;
-	int id;
-	bool id_auto;
-	struct device dev;
-	u64 platform_dma_mask;
-	struct device_dma_parameters dma_parms;
-	u32 num_resources;
-	struct resource *resource;
-	const struct platform_device_id *id_entry;
-	char *driver_override;
-	struct mfd_cell *mfd_cell;
-	struct pdev_archdata archdata;
-};
-
-struct platform_device_info {
-	struct device *parent;
+struct i2c_board_info {
+	char type[20];
+	short unsigned int flags;
+	short unsigned int addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
-	bool of_node_reused;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+enum hwmon_sensor_types {
+	hwmon_chip = 0,
+	hwmon_temp = 1,
+	hwmon_in = 2,
+	hwmon_curr = 3,
+	hwmon_power = 4,
+	hwmon_energy = 5,
+	hwmon_humidity = 6,
+	hwmon_fan = 7,
+	hwmon_pwm = 8,
+	hwmon_intrusion = 9,
+	hwmon_max = 10,
+};
+
+enum hwmon_chip_attributes {
+	hwmon_chip_temp_reset_history = 0,
+	hwmon_chip_in_reset_history = 1,
+	hwmon_chip_curr_reset_history = 2,
+	hwmon_chip_power_reset_history = 3,
+	hwmon_chip_register_tz = 4,
+	hwmon_chip_update_interval = 5,
+	hwmon_chip_alarms = 6,
+	hwmon_chip_samples = 7,
+	hwmon_chip_curr_samples = 8,
+	hwmon_chip_in_samples = 9,
+	hwmon_chip_power_samples = 10,
+	hwmon_chip_temp_samples = 11,
+};
+
+enum hwmon_temp_attributes {
+	hwmon_temp_enable = 0,
+	hwmon_temp_input = 1,
+	hwmon_temp_type = 2,
+	hwmon_temp_lcrit = 3,
+	hwmon_temp_lcrit_hyst = 4,
+	hwmon_temp_min = 5,
+	hwmon_temp_min_hyst = 6,
+	hwmon_temp_max = 7,
+	hwmon_temp_max_hyst = 8,
+	hwmon_temp_crit = 9,
+	hwmon_temp_crit_hyst = 10,
+	hwmon_temp_emergency = 11,
+	hwmon_temp_emergency_hyst = 12,
+	hwmon_temp_alarm = 13,
+	hwmon_temp_lcrit_alarm = 14,
+	hwmon_temp_min_alarm = 15,
+	hwmon_temp_max_alarm = 16,
+	hwmon_temp_crit_alarm = 17,
+	hwmon_temp_emergency_alarm = 18,
+	hwmon_temp_fault = 19,
+	hwmon_temp_offset = 20,
+	hwmon_temp_label = 21,
+	hwmon_temp_lowest = 22,
+	hwmon_temp_highest = 23,
+	hwmon_temp_reset_history = 24,
+	hwmon_temp_rated_min = 25,
+	hwmon_temp_rated_max = 26,
+};
+
+enum hwmon_in_attributes {
+	hwmon_in_enable = 0,
+	hwmon_in_input = 1,
+	hwmon_in_min = 2,
+	hwmon_in_max = 3,
+	hwmon_in_lcrit = 4,
+	hwmon_in_crit = 5,
+	hwmon_in_average = 6,
+	hwmon_in_lowest = 7,
+	hwmon_in_highest = 8,
+	hwmon_in_reset_history = 9,
+	hwmon_in_label = 10,
+	hwmon_in_alarm = 11,
+	hwmon_in_min_alarm = 12,
+	hwmon_in_max_alarm = 13,
+	hwmon_in_lcrit_alarm = 14,
+	hwmon_in_crit_alarm = 15,
+	hwmon_in_rated_min = 16,
+	hwmon_in_rated_max = 17,
+};
+
+enum hwmon_curr_attributes {
+	hwmon_curr_enable = 0,
+	hwmon_curr_input = 1,
+	hwmon_curr_min = 2,
+	hwmon_curr_max = 3,
+	hwmon_curr_lcrit = 4,
+	hwmon_curr_crit = 5,
+	hwmon_curr_average = 6,
+	hwmon_curr_lowest = 7,
+	hwmon_curr_highest = 8,
+	hwmon_curr_reset_history = 9,
+	hwmon_curr_label = 10,
+	hwmon_curr_alarm = 11,
+	hwmon_curr_min_alarm = 12,
+	hwmon_curr_max_alarm = 13,
+	hwmon_curr_lcrit_alarm = 14,
+	hwmon_curr_crit_alarm = 15,
+	hwmon_curr_rated_min = 16,
+	hwmon_curr_rated_max = 17,
+};
+
+enum hwmon_power_attributes {
+	hwmon_power_enable = 0,
+	hwmon_power_average = 1,
+	hwmon_power_average_interval = 2,
+	hwmon_power_average_interval_max = 3,
+	hwmon_power_average_interval_min = 4,
+	hwmon_power_average_highest = 5,
+	hwmon_power_average_lowest = 6,
+	hwmon_power_average_max = 7,
+	hwmon_power_average_min = 8,
+	hwmon_power_input = 9,
+	hwmon_power_input_highest = 10,
+	hwmon_power_input_lowest = 11,
+	hwmon_power_reset_history = 12,
+	hwmon_power_accuracy = 13,
+	hwmon_power_cap = 14,
+	hwmon_power_cap_hyst = 15,
+	hwmon_power_cap_max = 16,
+	hwmon_power_cap_min = 17,
+	hwmon_power_min = 18,
+	hwmon_power_max = 19,
+	hwmon_power_crit = 20,
+	hwmon_power_lcrit = 21,
+	hwmon_power_label = 22,
+	hwmon_power_alarm = 23,
+	hwmon_power_cap_alarm = 24,
+	hwmon_power_min_alarm = 25,
+	hwmon_power_max_alarm = 26,
+	hwmon_power_lcrit_alarm = 27,
+	hwmon_power_crit_alarm = 28,
+	hwmon_power_rated_min = 29,
+	hwmon_power_rated_max = 30,
+};
+
+enum hwmon_energy_attributes {
+	hwmon_energy_enable = 0,
+	hwmon_energy_input = 1,
+	hwmon_energy_label = 2,
+};
+
+enum hwmon_humidity_attributes {
+	hwmon_humidity_enable = 0,
+	hwmon_humidity_input = 1,
+	hwmon_humidity_label = 2,
+	hwmon_humidity_min = 3,
+	hwmon_humidity_min_hyst = 4,
+	hwmon_humidity_max = 5,
+	hwmon_humidity_max_hyst = 6,
+	hwmon_humidity_alarm = 7,
+	hwmon_humidity_fault = 8,
+	hwmon_humidity_rated_min = 9,
+	hwmon_humidity_rated_max = 10,
+};
+
+enum hwmon_fan_attributes {
+	hwmon_fan_enable = 0,
+	hwmon_fan_input = 1,
+	hwmon_fan_label = 2,
+	hwmon_fan_min = 3,
+	hwmon_fan_max = 4,
+	hwmon_fan_div = 5,
+	hwmon_fan_pulses = 6,
+	hwmon_fan_target = 7,
+	hwmon_fan_alarm = 8,
+	hwmon_fan_min_alarm = 9,
+	hwmon_fan_max_alarm = 10,
+	hwmon_fan_fault = 11,
+};
+
+enum hwmon_pwm_attributes {
+	hwmon_pwm_input = 0,
+	hwmon_pwm_enable = 1,
+	hwmon_pwm_mode = 2,
+	hwmon_pwm_freq = 3,
+	hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+	hwmon_intrusion_alarm = 0,
+	hwmon_intrusion_beep = 1,
+};
+
+struct hwmon_ops {
+	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+	enum hwmon_sensor_types type;
+	const u32 *config;
+};
+
+struct hwmon_chip_info {
+	const struct hwmon_ops *ops;
+	const struct hwmon_channel_info **info;
+};
+
+struct trace_event_raw_hwmon_attr_class {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	long int val;
+	char __data[0];
+};
+
+struct trace_event_raw_hwmon_attr_show_string {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	u32 __data_loc_label;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hwmon_attr_class {
+	u32 attr_name;
+};
+
+struct trace_event_data_offsets_hwmon_attr_show_string {
+	u32 attr_name;
+	u32 label;
+};
+
+typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
+
+struct hwmon_device {
 	const char *name;
-	int id;
-	const struct resource *res;
-	unsigned int num_res;
-	const void *data;
-	size_t size_data;
-	u64 dma_mask;
-	const struct property_entry *properties;
+	const char *label;
+	struct device dev;
+	const struct hwmon_chip_info *chip;
+	struct list_head tzdata;
+	struct attribute_group group;
+	const struct attribute_group **groups;
 };
 
-struct tk_read_base {
-	struct clocksource *clock;
-	u64 mask;
-	u64 cycle_last;
-	u32 mult;
-	u32 shift;
-	u64 xtime_nsec;
-	ktime_t base;
-	u64 base_real;
+struct hwmon_device_attribute {
+	struct device_attribute dev_attr;
+	const struct hwmon_ops *ops;
+	enum hwmon_sensor_types type;
+	u32 attr;
+	int index;
+	char name[32];
 };
 
-struct timekeeper {
-	struct tk_read_base tkr_mono;
-	struct tk_read_base tkr_raw;
-	u64 xtime_sec;
-	long unsigned int ktime_sec;
-	struct timespec64 wall_to_monotonic;
-	ktime_t offs_real;
-	ktime_t offs_boot;
-	ktime_t offs_tai;
-	s32 tai_offset;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-	ktime_t next_leap_ktime;
-	u64 raw_sec;
-	struct timespec64 monotonic_to_boot;
-	u64 cycle_interval;
-	u64 xtime_interval;
-	s64 xtime_remainder;
-	u64 raw_interval;
-	u64 ntp_tick;
-	s64 ntp_error;
-	u32 ntp_error_shift;
-	u32 ntp_err_mult;
-	u32 skip_second_overflow;
+typedef struct {
+	u64 val;
+} pfn_t;
+
+typedef u16 blk_short_t;
+
+struct rchan;
+
+struct blk_trace {
+	int trace_state;
+	struct rchan *rchan;
+	long unsigned int *sequence;
+	unsigned char *msg_data;
+	u16 act_mask;
+	u64 start_lba;
+	u64 end_lba;
+	u32 pid;
+	u32 dev;
+	struct dentry *dir;
+	struct list_head running_list;
+	atomic_t dropped;
 };
 
-struct iommu_pool {
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
 	long unsigned int start;
-	long unsigned int end;
-	long unsigned int hint;
+};
+
+enum dm_queue_mode {
+	DM_TYPE_NONE = 0,
+	DM_TYPE_BIO_BASED = 1,
+	DM_TYPE_REQUEST_BASED = 2,
+	DM_TYPE_DAX_BIO_BASED = 3,
+};
+
+typedef enum {
+	STATUSTYPE_INFO = 0,
+	STATUSTYPE_TABLE = 1,
+	STATUSTYPE_IMA = 2,
+} status_type_t;
+
+union map_info {
+	void *ptr;
+};
+
+struct dm_target;
+
+typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
+
+struct dm_table;
+
+struct target_type;
+
+struct dm_target {
+	struct dm_table *table;
+	struct target_type *type;
+	sector_t begin;
+	sector_t len;
+	uint32_t max_io_len;
+	unsigned int num_flush_bios;
+	unsigned int num_discard_bios;
+	unsigned int num_secure_erase_bios;
+	unsigned int num_write_zeroes_bios;
+	unsigned int per_io_data_size;
+	void *private;
+	char *error;
+	bool flush_supported: 1;
+	bool discards_supported: 1;
+	bool limit_swap_bios: 1;
+	bool emulate_zone_append: 1;
+	bool accounts_remapped_io: 1;
+	bool needs_bio_set_dev: 1;
+};
+
+typedef void (*dm_dtr_fn)(struct dm_target *);
+
+typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
+
+typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info *, struct request **);
+
+typedef void (*dm_release_clone_request_fn)(struct request *, union map_info *);
+
+typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
+
+typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info *);
+
+typedef void (*dm_presuspend_fn)(struct dm_target *);
+
+typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
+
+typedef void (*dm_postsuspend_fn)(struct dm_target *);
+
+typedef int (*dm_preresume_fn)(struct dm_target *);
+
+typedef void (*dm_resume_fn)(struct dm_target *);
+
+typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
+
+typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
+
+typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
+
+typedef int (*dm_report_zones_fn)(struct dm_target *);
+
+struct dm_dev;
+
+typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
+
+struct dm_dev {
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	fmode_t mode;
+	char name[16];
+};
+
+typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
+
+typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
+
+typedef int (*dm_busy_fn)(struct dm_target *);
+
+enum dax_access_mode {
+	DAX_ACCESS = 0,
+	DAX_RECOVERY_WRITE = 1,
+};
+
+typedef long int (*dm_dax_direct_access_fn)(struct dm_target *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+
+typedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, long unsigned int, size_t);
+
+typedef size_t (*dm_dax_recovery_write_fn)(struct dm_target *, long unsigned int, void *, size_t, struct iov_iter *);
+
+struct target_type {
+	uint64_t features;
+	const char *name;
+	struct module *module;
+	unsigned int version[3];
+	dm_ctr_fn ctr;
+	dm_dtr_fn dtr;
+	dm_map_fn map;
+	dm_clone_and_map_request_fn clone_and_map_rq;
+	dm_release_clone_request_fn release_clone_rq;
+	dm_endio_fn end_io;
+	dm_request_endio_fn rq_end_io;
+	dm_presuspend_fn presuspend;
+	dm_presuspend_undo_fn presuspend_undo;
+	dm_postsuspend_fn postsuspend;
+	dm_preresume_fn preresume;
+	dm_resume_fn resume;
+	dm_status_fn status;
+	dm_message_fn message;
+	dm_prepare_ioctl_fn prepare_ioctl;
+	dm_report_zones_fn report_zones;
+	dm_busy_fn busy;
+	dm_iterate_devices_fn iterate_devices;
+	dm_io_hints_fn io_hints;
+	dm_dax_direct_access_fn direct_access;
+	dm_dax_zero_page_range_fn dax_zero_page_range;
+	dm_dax_recovery_write_fn dax_recovery_write;
+	struct list_head list;
+};
+
+struct mapped_device;
+
+struct dm_md_mempools;
+
+struct dm_table {
+	struct mapped_device *md;
+	enum dm_queue_mode type;
+	unsigned int depth;
+	unsigned int counts[16];
+	sector_t *index[16];
+	unsigned int num_targets;
+	unsigned int num_allocated;
+	sector_t *highs;
+	struct dm_target *targets;
+	struct target_type *immutable_target_type;
+	bool integrity_supported: 1;
+	bool singleton: 1;
+	unsigned int integrity_added: 1;
+	fmode_t mode;
+	struct list_head devices;
+	void (*event_fn)(void *);
+	void *event_context;
+	struct dm_md_mempools *mempools;
+};
+
+struct dm_arg_set {
+	unsigned int argc;
+	char **argv;
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_MAX = 4,
+};
+
+struct rchan_buf {
+	void *start;
+	void *data;
+	size_t offset;
+	size_t subbufs_produced;
+	size_t subbufs_consumed;
+	struct rchan *chan;
+	wait_queue_head_t read_wait;
+	struct irq_work wakeup_work;
+	struct dentry *dentry;
+	struct kref kref;
+	struct page **page_array;
+	unsigned int page_count;
+	unsigned int finalized;
+	size_t *padding;
+	size_t prev_padding;
+	size_t bytes_consumed;
+	size_t early_bytes;
+	unsigned int cpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rchan_callbacks;
+
+struct rchan {
+	u32 version;
+	size_t subbuf_size;
+	size_t n_subbufs;
+	size_t alloc_size;
+	const struct rchan_callbacks *cb;
+	struct kref kref;
+	void *private_data;
+	size_t last_toobig;
+	struct rchan_buf **buf;
+	int is_global;
+	struct list_head list;
+	struct dentry *parent;
+	int has_base_filename;
+	char base_filename[255];
+};
+
+struct rchan_callbacks {
+	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
+	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
+	int (*remove_buf_file)(struct dentry *);
+};
+
+enum blktrace_act {
+	__BLK_TA_QUEUE = 1,
+	__BLK_TA_BACKMERGE = 2,
+	__BLK_TA_FRONTMERGE = 3,
+	__BLK_TA_GETRQ = 4,
+	__BLK_TA_SLEEPRQ = 5,
+	__BLK_TA_REQUEUE = 6,
+	__BLK_TA_ISSUE = 7,
+	__BLK_TA_COMPLETE = 8,
+	__BLK_TA_PLUG = 9,
+	__BLK_TA_UNPLUG_IO = 10,
+	__BLK_TA_UNPLUG_TIMER = 11,
+	__BLK_TA_INSERT = 12,
+	__BLK_TA_SPLIT = 13,
+	__BLK_TA_BOUNCE = 14,
+	__BLK_TA_REMAP = 15,
+	__BLK_TA_ABORT = 16,
+	__BLK_TA_DRV_DATA = 17,
+	__BLK_TA_CGROUP = 256,
+};
+
+struct dm_stats_last_position;
+
+struct dm_stats {
+	struct mutex mutex;
+	struct list_head list;
+	struct dm_stats_last_position *last;
+	bool precise_timestamps;
+};
+
+struct dm_stats_last_position {
+	sector_t last_sector;
+	unsigned int last_rw;
+};
+
+struct dm_stats_aux {
+	bool merged;
+	long long unsigned int duration_ns;
+};
+
+struct dm_kobject_holder {
+	struct kobject kobj;
+	struct completion completion;
+};
+
+struct dm_md_mempools {
+	struct bio_set bs;
+	struct bio_set io_bs;
+};
+
+struct dm_io;
+
+struct mapped_device {
+	struct mutex suspend_lock;
+	struct mutex table_devices_lock;
+	struct list_head table_devices;
+	void *map;
+	long unsigned int flags;
+	struct mutex type_lock;
+	enum dm_queue_mode type;
+	int numa_node_id;
+	struct request_queue *queue;
+	atomic_t holders;
+	atomic_t open_count;
+	struct dm_target *immutable_target;
+	struct target_type *immutable_target_type;
+	char name[16];
+	struct gendisk *disk;
+	struct dax_device *dax_dev;
+	wait_queue_head_t wait;
+	long unsigned int *pending_io;
+	struct hd_geometry geometry;
+	struct workqueue_struct *wq;
+	struct work_struct work;
+	spinlock_t deferred_lock;
+	struct bio_list deferred;
+	struct work_struct requeue_work;
+	struct dm_io *requeue_list;
+	void *interface_ptr;
+	wait_queue_head_t eventq;
+	atomic_t event_nr;
+	atomic_t uevent_seq;
+	struct list_head uevent_list;
+	spinlock_t uevent_lock;
+	bool init_tio_pdu: 1;
+	struct blk_mq_tag_set *tag_set;
+	struct dm_stats stats;
+	unsigned int internal_suspend_count;
+	int swap_bios;
+	struct semaphore swap_bios_semaphore;
+	struct mutex swap_bios_lock;
+	struct dm_md_mempools *mempools;
+	struct dm_kobject_holder kobj_holder;
+	struct srcu_struct io_barrier;
+};
+
+struct dm_target_io {
+	short unsigned int magic;
+	blk_short_t flags;
+	unsigned int target_bio_nr;
+	struct dm_io *io;
+	struct dm_target *ti;
+	unsigned int *len_ptr;
+	sector_t old_sector;
+	struct bio clone;
+};
+
+struct dm_io {
+	short unsigned int magic;
+	blk_short_t flags;
 	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	long unsigned int start_time;
+	void *data;
+	struct dm_io *next;
+	struct dm_stats_aux stats_aux;
+	blk_status_t status;
+	atomic_t io_count;
+	struct mapped_device *md;
+	struct bio *orig_bio;
+	unsigned int sector_offset;
+	unsigned int sectors;
+	struct dm_target_io tio;
 };
 
-struct iommu_table_ops;
-
-struct iommu_table {
-	long unsigned int it_busno;
-	long unsigned int it_size;
-	long unsigned int it_indirect_levels;
-	long unsigned int it_level_size;
-	long unsigned int it_allocated_size;
-	long unsigned int it_offset;
-	long unsigned int it_base;
-	long unsigned int it_index;
-	long unsigned int it_type;
-	long unsigned int it_blocksize;
-	long unsigned int poolsize;
-	long unsigned int nr_pools;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct iommu_pool large_pool;
-	struct iommu_pool pools[4];
-	long unsigned int *it_map;
-	long unsigned int it_page_shift;
-	struct list_head it_group_list;
-	__be64 *it_userspace;
-	struct iommu_table_ops *it_ops;
-	struct kref it_kref;
-	int it_nid;
-	long unsigned int it_reserved_start;
-	long unsigned int it_reserved_end;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct dm_stat_percpu {
+	long long unsigned int sectors[2];
+	long long unsigned int ios[2];
+	long long unsigned int merges[2];
+	long long unsigned int ticks[2];
+	long long unsigned int io_ticks[2];
+	long long unsigned int io_ticks_total;
+	long long unsigned int time_in_queue;
+	long long unsigned int *histogram;
 };
 
-struct iommu_table_group_ops;
-
-struct iommu_table_group {
-	__u32 tce32_start;
-	__u32 tce32_size;
-	__u64 pgsizes;
-	__u32 max_dynamic_windows_supported;
-	__u32 max_levels;
-	struct iommu_group *group;
-	struct iommu_table *tables[2];
-	struct iommu_table_group_ops *ops;
+struct dm_stat_shared {
+	atomic_t in_flight[2];
+	long long unsigned int stamp;
+	struct dm_stat_percpu tmp;
 };
 
-typedef __be32 fdt32_t;
-
-struct fdt_header {
-	fdt32_t magic;
-	fdt32_t totalsize;
-	fdt32_t off_dt_struct;
-	fdt32_t off_dt_strings;
-	fdt32_t off_mem_rsvmap;
-	fdt32_t version;
-	fdt32_t last_comp_version;
-	fdt32_t boot_cpuid_phys;
-	fdt32_t size_dt_strings;
-	fdt32_t size_dt_struct;
+struct dm_stat {
+	struct list_head list_entry;
+	int id;
+	unsigned int stat_flags;
+	size_t n_entries;
+	sector_t start;
+	sector_t end;
+	sector_t step;
+	unsigned int n_histogram_entries;
+	long long unsigned int *histogram_boundaries;
+	const char *program_id;
+	const char *aux_data;
+	struct callback_head callback_head;
+	size_t shared_alloc_size;
+	size_t percpu_alloc_size;
+	size_t histogram_alloc_size;
+	struct dm_stat_percpu *stat_percpu[2048];
+	struct dm_stat_shared stat_shared[0];
 };
 
-struct iommu_table_ops {
-	int (*set)(struct iommu_table *, long int, long int, long unsigned int, enum dma_data_direction, long unsigned int);
-	int (*xchg_no_kill)(struct iommu_table *, long int, long unsigned int *, enum dma_data_direction *, bool);
-	void (*tce_kill)(struct iommu_table *, long unsigned int, long unsigned int, bool);
-	__be64 * (*useraddrptr)(struct iommu_table *, long int, bool);
-	void (*clear)(struct iommu_table *, long int, long int);
-	long unsigned int (*get)(struct iommu_table *, long int);
-	void (*flush)(struct iommu_table *);
-	void (*free)(struct iommu_table *);
+struct clk;
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
 };
 
-struct iommu_table_group_ops {
-	long unsigned int (*get_table_size)(__u32, __u64, __u32);
-	long int (*create_table)(struct iommu_table_group *, int, __u32, __u64, __u32, struct iommu_table **);
-	long int (*set_window)(struct iommu_table_group *, int, struct iommu_table *);
-	long int (*unset_window)(struct iommu_table_group *, int);
-	void (*take_ownership)(struct iommu_table_group *);
-	void (*release_ownership)(struct iommu_table_group *);
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
 };
 
-struct drmem_lmb {
-	u64 base_addr;
-	u32 drc_index;
-	u32 aa_index;
+struct cpufreq_stats;
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+struct gov_attr_set {
+	struct kobject kobj;
+	struct list_head policy_list;
+	struct mutex update_lock;
+	int usage_count;
+};
+
+struct governor_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct gov_attr_set *, char *);
+	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
+};
+
+struct dbs_governor;
+
+struct dbs_data {
+	struct gov_attr_set attr_set;
+	struct dbs_governor *gov;
+	void *tuners;
+	unsigned int ignore_nice_load;
+	unsigned int sampling_rate;
+	unsigned int sampling_down_factor;
+	unsigned int up_threshold;
+	unsigned int io_is_busy;
+};
+
+struct policy_dbs_info;
+
+struct dbs_governor {
+	struct cpufreq_governor gov;
+	struct kobj_type kobj_type;
+	struct dbs_data *gdbs_data;
+	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
+	struct policy_dbs_info * (*alloc)();
+	void (*free)(struct policy_dbs_info *);
+	int (*init)(struct dbs_data *);
+	void (*exit)(struct dbs_data *);
+	void (*start)(struct cpufreq_policy *);
+};
+
+struct policy_dbs_info {
+	struct cpufreq_policy *policy;
+	struct mutex update_mutex;
+	u64 last_sample_time;
+	s64 sample_delay_ns;
+	atomic_t work_count;
+	struct irq_work irq_work;
+	struct work_struct work;
+	struct dbs_data *dbs_data;
+	struct list_head list;
+	unsigned int rate_mult;
+	unsigned int idle_periods;
+	bool is_shared;
+	bool work_in_progress;
+};
+
+struct cs_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int down_skip;
+	unsigned int requested_freq;
+};
+
+struct cs_dbs_tuners {
+	unsigned int down_threshold;
+	unsigned int freq_step;
+};
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_report;
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_field_entry;
+
+struct hid_device;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	unsigned int type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	bool registered;
+	struct list_head reports;
+	unsigned int application;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+struct hid_driver;
+
+struct hid_ll_driver;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	long unsigned int status;
+	unsigned int claimed;
+	unsigned int quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	short unsigned int debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+};
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	int (*suspend)(struct hid_device *, pm_message_t);
+	int (*resume)(struct hid_device *);
+	int (*reset_resume)(struct hid_device *);
+	struct device_driver driver;
+};
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+typedef __u16 __sum16;
+
+typedef u64 u_int64_t;
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
 	u32 flags;
 };
 
-struct drmem_lmb_info {
-	struct drmem_lmb *lmbs;
-	int n_lmbs;
-	u64 lmb_size;
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
 };
 
-struct ibm_pa_feature {
-	long unsigned int cpu_features;
-	long unsigned int mmu_features;
-	unsigned int cpu_user_ftrs;
-	unsigned int cpu_user_ftrs2;
-	unsigned char pabyte;
-	unsigned char pabit;
-	unsigned char invert;
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
 };
 
-struct feature_property {
-	const char *name;
-	u32 min_value;
-	long unsigned int cpu_feature;
-	long unsigned int cpu_user_ftr;
+struct flow_dissector_key_tags {
+	u32 flow_label;
 };
 
-enum lockdep_ok {
-	LOCKDEP_STILL_OK = 0,
-	LOCKDEP_NOW_UNRELIABLE = 1,
-};
-
-enum bug_trap_type {
-	BUG_TRAP_TYPE_NONE = 0,
-	BUG_TRAP_TYPE_WARN = 1,
-	BUG_TRAP_TYPE_BUG = 2,
-};
-
-enum ctx_state {
-	CONTEXT_DISABLED = 4294967295,
-	CONTEXT_KERNEL = 0,
-	CONTEXT_USER = 1,
-	CONTEXT_GUEST = 2,
-};
-
-typedef int kexec_probe_t(const char *, long unsigned int);
-
-typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
-
-typedef int kexec_cleanup_t(void *);
-
-struct kexec_file_ops {
-	kexec_probe_t *probe;
-	kexec_load_t *load;
-	kexec_cleanup_t *cleanup;
-};
-
-struct crash_mem;
-
-struct kimage_arch {
-	struct crash_mem *exclude_ranges;
-	long unsigned int backup_start;
-	void *backup_buf;
-	long unsigned int elfcorehdr_addr;
-	long unsigned int elf_headers_sz;
-	void *elf_headers;
-};
-
-struct crash_mem_range {
-	u64 start;
-	u64 end;
-};
-
-struct crash_mem {
-	unsigned int max_nr_ranges;
-	unsigned int nr_ranges;
-	struct crash_mem_range ranges[0];
-};
-
-typedef long unsigned int kimage_entry_t;
-
-struct kexec_segment {
+struct flow_dissector_key_vlan {
 	union {
-		void *buf;
-		void *kbuf;
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
 	};
-	size_t bufsz;
-	long unsigned int mem;
-	size_t memsz;
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
 };
 
-struct purgatory_info {
-	const Elf64_Ehdr *ehdr;
-	Elf64_Shdr *sechdrs;
-	void *purgatory_buf;
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
 };
 
-struct kimage {
-	kimage_entry_t head;
-	kimage_entry_t *entry;
-	kimage_entry_t *last_entry;
-	long unsigned int start;
-	struct page *control_code_page;
-	struct page *swap_page;
-	void *vmcoreinfo_data_copy;
-	long unsigned int nr_segments;
-	struct kexec_segment segment[16];
-	struct list_head control_pages;
-	struct list_head dest_pages;
-	struct list_head unusable_pages;
-	long unsigned int control_page;
-	unsigned int type: 1;
-	unsigned int preserve_context: 1;
-	unsigned int file_mode: 1;
-	struct kimage_arch arch;
-	void *kernel_buf;
-	long unsigned int kernel_buf_len;
-	void *initrd_buf;
-	long unsigned int initrd_buf_len;
-	char *cmdline_buf;
-	long unsigned int cmdline_buf_len;
-	const struct kexec_file_ops *fops;
-	void *image_loader_data;
-	struct purgatory_info purgatory_info;
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
 };
 
-enum con_flush_mode {
-	CONSOLE_FLUSH_PENDING = 0,
-	CONSOLE_REPLAY_ALL = 1,
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
 };
 
-enum kmsg_dump_reason {
-	KMSG_DUMP_UNDEF = 0,
-	KMSG_DUMP_PANIC = 1,
-	KMSG_DUMP_OOPS = 2,
-	KMSG_DUMP_EMERG = 3,
-	KMSG_DUMP_SHUTDOWN = 4,
-	KMSG_DUMP_MAX = 5,
+struct flow_dissector_key_keyid {
+	__be32 keyid;
 };
 
-struct atomic_notifier_head {
-	spinlock_t lock;
-	struct notifier_block *head;
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
 };
 
-struct screen_info {
-	__u8 orig_x;
-	__u8 orig_y;
-	__u16 ext_mem_k;
-	__u16 orig_video_page;
-	__u8 orig_video_mode;
-	__u8 orig_video_cols;
-	__u8 flags;
-	__u8 unused2;
-	__u16 orig_video_ega_bx;
-	__u16 unused3;
-	__u8 orig_video_lines;
-	__u8 orig_video_isVGA;
-	__u16 orig_video_points;
-	__u16 lfb_width;
-	__u16 lfb_height;
-	__u16 lfb_depth;
-	__u32 lfb_base;
-	__u32 lfb_size;
-	__u16 cl_magic;
-	__u16 cl_offset;
-	__u16 lfb_linelength;
-	__u8 red_size;
-	__u8 red_pos;
-	__u8 green_size;
-	__u8 green_pos;
-	__u8 blue_size;
-	__u8 blue_pos;
-	__u8 rsvd_size;
-	__u8 rsvd_pos;
-	__u16 vesapm_seg;
-	__u16 vesapm_off;
-	__u16 pages;
-	__u16 vesa_attributes;
-	__u32 capabilities;
-	__u32 ext_lfb_base;
-	__u8 _reserved[2];
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct flow_dissector {
+	unsigned int used_keys;
+	short unsigned int offset[30];
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	long: 0;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+struct bpf_flow_keys;
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	struct flowi_tunnel flowic_tun_key;
+	__u32 flowic_multipath_hash;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	struct {
+		__le16 dport;
+		__le16 sport;
+	} dnports;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	__be32 saddr;
+	__be32 daddr;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable **nhc_pcpu_rth_output;
+	struct rtable *nhc_rth_input;
+	struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	struct rt6_info **rt6i_pcpu;
+	struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info *fib6_next;
+	struct fib6_node *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	long unsigned int expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct uncached_list;
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	struct list_head rt6i_uncached;
+	struct uncached_list *rt6i_uncached_list;
+	short unsigned int rt6i_nfheader_len;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct fib6_node {
+	struct fib6_node *parent;
+	struct fib6_node *left;
+	struct fib6_node *right;
+	struct fib6_info *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info *rr_ptr;
+	struct callback_head rcu;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	void *type_dev;
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct reset_control;
+
+struct mii_bus;
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_UP = 3,
+	PHY_RUNNING = 4,
+	PHY_NOLINK = 5,
+	PHY_CABLETEST = 6,
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_QSGMII = 18,
+	PHY_INTERFACE_MODE_TRGMII = 19,
+	PHY_INTERFACE_MODE_100BASEX = 20,
+	PHY_INTERFACE_MODE_1000BASEX = 21,
+	PHY_INTERFACE_MODE_2500BASEX = 22,
+	PHY_INTERFACE_MODE_5GBASER = 23,
+	PHY_INTERFACE_MODE_RXAUI = 24,
+	PHY_INTERFACE_MODE_XAUI = 25,
+	PHY_INTERFACE_MODE_10GBASER = 26,
+	PHY_INTERFACE_MODE_25GBASER = 27,
+	PHY_INTERFACE_MODE_USXGMII = 28,
+	PHY_INTERFACE_MODE_10GKR = 29,
+	PHY_INTERFACE_MODE_MAX = 30,
+} phy_interface_t;
+
+struct phylink;
+
+struct phy_driver;
+
+struct phy_package_shared;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	long unsigned int supported[2];
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	long unsigned int adv_old[2];
+	u32 eee_broken_modes;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+};
+
+enum {
+	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+};
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+enum {
+	BPF_MAP_VALUE_OFF_MAX = 8,
+	BPF_MAP_OFF_ARR_MAX = 10,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_ALLOC = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	__BPF_TYPE_FLAG_MAX = 262145,
+	__BPF_TYPE_LAST_FLAG = 262144,
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu *cache;
+	long unsigned int reset_ts;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22 = 1,
+		MDIOBUS_C45 = 2,
+		MDIOBUS_C22_C45 = 3,
+	} probe_capabilities;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	long unsigned int flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const long unsigned int * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	long unsigned int fnhe_expires;
+	struct rtable *fnhe_rth_input;
+	struct rtable *fnhe_rth_output;
+	long unsigned int fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+};
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception *chain;
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info *nh_info;
+		struct nh_group *nh_grp;
+	};
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	__LWTUNNEL_ENCAP_MAX = 10,
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct nh_grp_entry;
+
+struct nh_res_bucket {
+	struct nh_grp_entry *nh_entry;
+	atomic_long_t used_time;
+	long unsigned int migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	long unsigned int unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
+	union {
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+	} u;
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+struct gre_full_hdr {
+	struct gre_base_hdr fixed_header;
+	__be16 csum;
+	__be16 reserved1;
+	__be32 key;
+	__be32 seq;
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+enum sctp_msg_flags {
+	MSG_NOTIFICATION = 32768,
+};
+
+enum dccp_state {
+	DCCP_OPEN = 1,
+	DCCP_REQUESTING = 2,
+	DCCP_LISTEN = 10,
+	DCCP_RESPOND = 3,
+	DCCP_ACTIVE_CLOSEREQ = 4,
+	DCCP_PASSIVE_CLOSE = 8,
+	DCCP_CLOSING = 11,
+	DCCP_TIME_WAIT = 6,
+	DCCP_CLOSED = 7,
+	DCCP_NEW_SYN_RECV = 12,
+	DCCP_PARTOPEN = 13,
+	DCCP_PASSIVE_CLOSEREQ = 14,
+	DCCP_MAX_STATES = 15,
+};
+
+enum l2tp_debug_flags {
+	L2TP_MSG_DEBUG = 1,
+	L2TP_MSG_CONTROL = 2,
+	L2TP_MSG_SEQ = 4,
+	L2TP_MSG_DATA = 8,
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
 } __attribute__((packed));
 
-struct serial_struct {
-	int type;
-	int line;
-	unsigned int port;
-	int irq;
-	int flags;
-	int xmit_fifo_size;
-	int custom_divisor;
-	int baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	int hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	long unsigned int iomap_base;
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
 };
 
-struct serial_icounter_struct {
-	int cts;
-	int dsr;
-	int rng;
-	int dcd;
-	int rx;
-	int tx;
-	int frame;
-	int overrun;
-	int parity;
-	int brk;
-	int buf_overrun;
-	int reserved[9];
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
 };
 
-struct console {
-	char name[16];
-	void (*write)(struct console *, const char *, unsigned int);
-	int (*read)(struct console *, char *, unsigned int);
-	struct tty_driver * (*device)(struct console *, int *);
-	void (*unblank)();
-	int (*setup)(struct console *, char *);
-	int (*exit)(struct console *);
-	int (*match)(struct console *, char *, int, char *);
-	short int flags;
-	short int index;
-	int cflag;
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct nf_ct_udp {
+	long unsigned int stream_ts;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	long unsigned int status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {} __nfct_init_offset;
+	struct nf_conn *master;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+struct nf_ct_ext {
+	u8 offset[4];
+	u8 len;
+	unsigned int gen_id;
+	long: 0;
+	char data[0];
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_NUM = 4,
+};
+
+struct nf_conn_labels {
+	long unsigned int bits[2];
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_DROP_REASON_NOT_SPECIFIED = 1,
+	SKB_DROP_REASON_NO_SOCKET = 2,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 3,
+	SKB_DROP_REASON_TCP_CSUM = 4,
+	SKB_DROP_REASON_SOCKET_FILTER = 5,
+	SKB_DROP_REASON_UDP_CSUM = 6,
+	SKB_DROP_REASON_NETFILTER_DROP = 7,
+	SKB_DROP_REASON_OTHERHOST = 8,
+	SKB_DROP_REASON_IP_CSUM = 9,
+	SKB_DROP_REASON_IP_INHDR = 10,
+	SKB_DROP_REASON_IP_RPFILTER = 11,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 12,
+	SKB_DROP_REASON_XFRM_POLICY = 13,
+	SKB_DROP_REASON_IP_NOPROTO = 14,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 15,
+	SKB_DROP_REASON_PROTO_MEM = 16,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 17,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 18,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 19,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 20,
+	SKB_DROP_REASON_TCP_FLAGS = 21,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 22,
+	SKB_DROP_REASON_TCP_OLD_DATA = 23,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 24,
+	SKB_DROP_REASON_TCP_OFOMERGE = 25,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 26,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 27,
+	SKB_DROP_REASON_TCP_RESET = 28,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 29,
+	SKB_DROP_REASON_TCP_CLOSE = 30,
+	SKB_DROP_REASON_TCP_FASTOPEN = 31,
+	SKB_DROP_REASON_TCP_OLD_ACK = 32,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 33,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 34,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 35,
+	SKB_DROP_REASON_TCP_OFO_DROP = 36,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 37,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 38,
+	SKB_DROP_REASON_IPV6DISABLED = 39,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 40,
+	SKB_DROP_REASON_NEIGH_FAILED = 41,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 42,
+	SKB_DROP_REASON_NEIGH_DEAD = 43,
+	SKB_DROP_REASON_TC_EGRESS = 44,
+	SKB_DROP_REASON_QDISC_DROP = 45,
+	SKB_DROP_REASON_CPU_BACKLOG = 46,
+	SKB_DROP_REASON_XDP = 47,
+	SKB_DROP_REASON_TC_INGRESS = 48,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 49,
+	SKB_DROP_REASON_SKB_CSUM = 50,
+	SKB_DROP_REASON_SKB_GSO_SEG = 51,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 52,
+	SKB_DROP_REASON_DEV_HDR = 53,
+	SKB_DROP_REASON_DEV_READY = 54,
+	SKB_DROP_REASON_FULL_RING = 55,
+	SKB_DROP_REASON_NOMEM = 56,
+	SKB_DROP_REASON_HDR_TRUNC = 57,
+	SKB_DROP_REASON_TAP_FILTER = 58,
+	SKB_DROP_REASON_TAP_TXFILTER = 59,
+	SKB_DROP_REASON_ICMP_CSUM = 60,
+	SKB_DROP_REASON_INVALID_PROTO = 61,
+	SKB_DROP_REASON_IP_INADDRERRORS = 62,
+	SKB_DROP_REASON_IP_INNOROUTES = 63,
+	SKB_DROP_REASON_PKT_TOO_BIG = 64,
+	SKB_DROP_REASON_MAX = 65,
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+struct napi_gro_cb {
+	void *frag0;
+	unsigned int frag0_len;
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	long unsigned int age;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+	struct sk_buff *last;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowidn {
+	struct flowi_common __fl_common;
+	__le16 daddr;
+	__le16 saddr;
+	union flowi_uli uli;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+		struct flowidn dn;
+	} u;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	short unsigned int overhead;
+	short int cell_align;
+	short unsigned int mpu;
+	__u32 rate;
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	__TCA_MAX = 16,
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc **p_miniq;
+};
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	long unsigned int offload_handle;
+	u8 dir: 2;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long int saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
 	void *data;
-	struct console *next;
 };
 
-struct ppc_debug_info {
-	__u32 version;
-	__u32 num_instruction_bps;
-	__u32 num_data_bps;
-	__u32 num_condition_regs;
-	__u32 data_bp_alignment;
-	__u32 sizeof_condition;
-	__u64 features;
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
 };
 
-struct ppc_hw_breakpoint {
-	__u32 version;
-	__u32 trigger_type;
-	__u32 addr_mode;
-	__u32 condition_mode;
-	__u64 addr;
-	__u64 addr2;
-	__u64 condition_value;
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	short unsigned int encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	__ETHTOOL_A_LINKMODES_CNT = 10,
+	ETHTOOL_A_LINKMODES_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	__ETHTOOL_A_LINKSTATE_CNT = 7,
+	ETHTOOL_A_LINKSTATE_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	__ETHTOOL_A_RINGS_CNT = 14,
+	ETHTOOL_A_RINGS_MAX = 13,
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	__ETHTOOL_A_COALESCE_CNT = 26,
+	ETHTOOL_A_COALESCE_MAX = 25,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	__ETHTOOL_A_PAUSE_CNT = 6,
+	ETHTOOL_A_PAUSE_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	__ETHTOOL_A_STATS_CNT = 5,
+	ETHTOOL_A_STATS_MAX = 4,
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	__NLA_TYPE_MAX = 18,
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+enum {
+	ETH_RSS_HASH_TOP_BIT = 0,
+	ETH_RSS_HASH_XOR_BIT = 1,
+	ETH_RSS_HASH_CRC32_BIT = 2,
+	ETH_RSS_HASH_FUNCS_COUNT = 3,
+};
+
+enum {
+	ETHTOOL_MSG_USER_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET = 1,
+	ETHTOOL_MSG_LINKINFO_GET = 2,
+	ETHTOOL_MSG_LINKINFO_SET = 3,
+	ETHTOOL_MSG_LINKMODES_GET = 4,
+	ETHTOOL_MSG_LINKMODES_SET = 5,
+	ETHTOOL_MSG_LINKSTATE_GET = 6,
+	ETHTOOL_MSG_DEBUG_GET = 7,
+	ETHTOOL_MSG_DEBUG_SET = 8,
+	ETHTOOL_MSG_WOL_GET = 9,
+	ETHTOOL_MSG_WOL_SET = 10,
+	ETHTOOL_MSG_FEATURES_GET = 11,
+	ETHTOOL_MSG_FEATURES_SET = 12,
+	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
+	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
+	ETHTOOL_MSG_RINGS_GET = 15,
+	ETHTOOL_MSG_RINGS_SET = 16,
+	ETHTOOL_MSG_CHANNELS_GET = 17,
+	ETHTOOL_MSG_CHANNELS_SET = 18,
+	ETHTOOL_MSG_COALESCE_GET = 19,
+	ETHTOOL_MSG_COALESCE_SET = 20,
+	ETHTOOL_MSG_PAUSE_GET = 21,
+	ETHTOOL_MSG_PAUSE_SET = 22,
+	ETHTOOL_MSG_EEE_GET = 23,
+	ETHTOOL_MSG_EEE_SET = 24,
+	ETHTOOL_MSG_TSINFO_GET = 25,
+	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
+	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
+	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
+	ETHTOOL_MSG_FEC_GET = 29,
+	ETHTOOL_MSG_FEC_SET = 30,
+	ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+	ETHTOOL_MSG_STATS_GET = 32,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+	ETHTOOL_MSG_MODULE_GET = 34,
+	ETHTOOL_MSG_MODULE_SET = 35,
+	__ETHTOOL_MSG_USER_CNT = 36,
+	ETHTOOL_MSG_USER_MAX = 35,
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	__ETHTOOL_MSG_KERNEL_CNT = 37,
+	ETHTOOL_MSG_KERNEL_MAX = 36,
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	void *userhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+};
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	long unsigned int state[1];
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr *ifa_list;
+	struct ip_mc_list *mc_list;
+	struct ip_mc_list **mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	long unsigned int mr_v1_seen;
+	long unsigned int mr_v2_seen;
+	long unsigned int mr_maxdelay;
+	long unsigned int mr_qi;
+	long unsigned int mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	long unsigned int ifa_cstamp;
+	long unsigned int ifa_tstamp;
+};
+
+struct ip_sf_list;
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	long unsigned int sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list *next_rcu;
+	};
+	struct ip_mc_list *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	long unsigned int sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog *prog;
+	struct sock *socks[0];
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+typedef u8 dscp_t;
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__u16 cmsg_flags;
+	struct ip_options_rcu *inet_opt;
+	__be16 inet_sport;
+	__u16 inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct ip_mc_socklist *mc_list;
+	struct inet_cork_full cork;
+};
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist *ipv6_fl_list;
+	struct ipv6_txoptions *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist *next;
+	struct ip6_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	long unsigned int linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	long unsigned int lastuse;
+	long unsigned int expires;
+	struct net *fl_net;
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	long unsigned int rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+struct fib_table;
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	long unsigned int *tb_data;
+	long unsigned int __data[0];
+};
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct fib6_result;
+
+struct fib6_config;
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	long unsigned int fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long int interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long int rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+};
+
+struct udp_tunnel_info {
+	short unsigned int type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+struct geneve_opt {
+	__be16 opt_class;
+	u8 type;
+	u8 length: 5;
+	u8 r3: 1;
+	u8 r2: 1;
+	u8 r1: 1;
+	u8 opt_data[0];
+};
+
+struct vxlan_metadata {
+	u32 gbp;
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct sk_psock_work_state {
+	struct sk_buff *skb;
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	long unsigned int state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long int);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct work_struct work;
+	struct rcu_work rwork;
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	long unsigned int icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		long unsigned int timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 icsk_ca_priv[13];
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	short unsigned int fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(const struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	long unsigned int copy[1];
+	struct scatterlist data[18];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	spinlock_t encrypt_compl_lock;
+	int async_notify;
+	u8 async_capable: 1;
+	long unsigned int tx_bitmask;
+};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
+	union {
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
+	};
+};
+
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool in_tcp_sendpages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	long unsigned int flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
+	struct list_head list;
+	refcount_t refcount;
+	struct callback_head rcu;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+struct scm_fp_list {
+	short int count;
+	short int max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 consumed;
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	atomic_long_t inflight;
+	spinlock_t lock;
+	long unsigned int gc_flags;
+	long: 64;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+struct sockaddr_in6 {
+	short unsigned int sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_LAST = 32768,
+	SOF_TIMESTAMPING_MASK = 65535,
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	struct hlist_nulls_head ht[256];
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u16 tsflags;
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	short unsigned int type;
+	short unsigned int protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head *next;
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+};
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+struct genl_family {
+	int id;
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	unsigned int mcgrp_offset;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_mcgrps;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+enum rpc_auth_flavors {
+	RPC_AUTH_NULL = 0,
+	RPC_AUTH_UNIX = 1,
+	RPC_AUTH_SHORT = 2,
+	RPC_AUTH_DES = 3,
+	RPC_AUTH_KRB = 4,
+	RPC_AUTH_GSS = 6,
+	RPC_AUTH_TLS = 7,
+	RPC_AUTH_MAXFLAVOR = 8,
+	RPC_AUTH_GSS_KRB5 = 390003,
+	RPC_AUTH_GSS_KRB5I = 390004,
+	RPC_AUTH_GSS_KRB5P = 390005,
+	RPC_AUTH_GSS_LKEY = 390006,
+	RPC_AUTH_GSS_LKEYI = 390007,
+	RPC_AUTH_GSS_LKEYP = 390008,
+	RPC_AUTH_GSS_SPKM = 390009,
+	RPC_AUTH_GSS_SPKMI = 390010,
+	RPC_AUTH_GSS_SPKMP = 390011,
+};
+
+enum rpc_auth_stat {
+	RPC_AUTH_OK = 0,
+	RPC_AUTH_BADCRED = 1,
+	RPC_AUTH_REJECTEDCRED = 2,
+	RPC_AUTH_BADVERF = 3,
+	RPC_AUTH_REJECTEDVERF = 4,
+	RPC_AUTH_TOOWEAK = 5,
+	RPCSEC_GSS_CREDPROBLEM = 13,
+	RPCSEC_GSS_CTXPROBLEM = 14,
+};
+
+struct cache_head {
+	struct hlist_node cache_list;
+	time64_t expiry_time;
+	time64_t last_refresh;
+	struct kref ref;
+	long unsigned int flags;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+	struct cache_deferred_req * (*defer)(struct cache_req *);
+	long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+	struct hlist_node hash;
+	struct list_head recent;
+	struct cache_head *item;
+	void *owner;
+	void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+	struct gss_api_mech *mech_type;
+	void *internal_ctx_id;
+	unsigned int slack;
+	unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+	struct list_head gm_list;
+	struct module *gm_owner;
+	struct rpcsec_gss_oid gm_oid;
+	char *gm_name;
+	const struct gss_api_ops *gm_ops;
+	int gm_pf_num;
+	struct pf_desc *gm_pfs;
+	const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+	u32 pseudoflavor;
+	u32 qop;
+	u32 service;
+	char *name;
+	char *auth_domain_name;
+	struct auth_domain *domain;
+	bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+	struct kref ref;
+	struct hlist_node hash;
+	char *name;
+	struct auth_ops *flavour;
+	struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+	u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+	void (*gss_delete_sec_context)(void *);
+};
+
+struct svc_cred {
+	kuid_t cr_uid;
+	kgid_t cr_gid;
+	struct group_info *cr_group_info;
+	u32 cr_flavor;
+	char *cr_raw_principal;
+	char *cr_principal;
+	char *cr_targ_princ;
+	struct gss_api_mech *cr_gss_mech;
+};
+
+struct svc_rqst;
+
+struct auth_ops {
+	char *name;
+	struct module *owner;
+	int flavour;
+	int (*accept)(struct svc_rqst *);
+	int (*release)(struct svc_rqst *);
+	void (*domain_release)(struct auth_domain *);
+	int (*set_client)(struct svc_rqst *);
+};
+
+struct pagevec {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct page *pages[15];
+};
+
+struct svc_cacherep;
+
+struct svc_serv;
+
+struct svc_pool;
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_rqst {
+	struct list_head rq_all;
+	struct callback_head rq_rcu_head;
+	struct svc_xprt *rq_xprt;
+	struct __kernel_sockaddr_storage rq_addr;
+	size_t rq_addrlen;
+	struct __kernel_sockaddr_storage rq_daddr;
+	size_t rq_daddrlen;
+	struct svc_serv *rq_server;
+	struct svc_pool *rq_pool;
+	const struct svc_procedure *rq_procinfo;
+	struct auth_ops *rq_authop;
+	struct svc_cred rq_cred;
+	void *rq_xprt_ctxt;
+	struct svc_deferred_req *rq_deferred;
+	struct xdr_buf rq_arg;
+	struct xdr_stream rq_arg_stream;
+	struct xdr_stream rq_res_stream;
+	struct page *rq_scratch_page;
+	struct xdr_buf rq_res;
+	struct page *rq_pages[20];
+	struct page **rq_respages;
+	struct page **rq_next_page;
+	struct page **rq_page_end;
+	struct pagevec rq_pvec;
+	struct kvec rq_vec[19];
+	struct bio_vec rq_bvec[19];
+	__be32 rq_xid;
+	u32 rq_prog;
+	u32 rq_vers;
+	u32 rq_proc;
+	u32 rq_prot;
+	int rq_cachetype;
+	long unsigned int rq_flags;
+	ktime_t rq_qtime;
+	void *rq_argp;
+	void *rq_resp;
+	void *rq_auth_data;
+	__be32 rq_auth_stat;
+	int rq_auth_slack;
+	int rq_reserved;
+	ktime_t rq_stime;
+	struct cache_req rq_chandle;
+	struct auth_domain *rq_client;
+	struct auth_domain *rq_gssclient;
+	struct svc_cacherep *rq_cacherep;
+	struct task_struct *rq_task;
+	spinlock_t rq_lock;
+	struct net *rq_bc_net;
+	void **rq_lease_breaker;
+};
+
+struct svc_pool_stats {
+	atomic_long_t packets;
+	long unsigned int sockets_queued;
+	atomic_long_t threads_woken;
+	atomic_long_t threads_timedout;
+};
+
+struct svc_pool {
+	unsigned int sp_id;
+	spinlock_t sp_lock;
+	struct list_head sp_sockets;
+	unsigned int sp_nrthreads;
+	struct list_head sp_all_threads;
+	struct svc_pool_stats sp_stats;
+	long unsigned int sp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_serv {
+	struct svc_program *sv_program;
+	struct svc_stat *sv_stats;
+	spinlock_t sv_lock;
+	struct kref sv_refcnt;
+	unsigned int sv_nrthreads;
+	unsigned int sv_maxconn;
+	unsigned int sv_max_payload;
+	unsigned int sv_max_mesg;
+	unsigned int sv_xdrsize;
+	struct list_head sv_permsocks;
+	struct list_head sv_tempsocks;
+	int sv_tmpcnt;
+	struct timer_list sv_temptimer;
+	char *sv_name;
+	unsigned int sv_nrpools;
+	struct svc_pool *sv_pools;
+	int (*sv_threadfn)(void *);
+};
+
+struct svc_version;
+
+struct svc_process_info;
+
+struct svc_program {
+	struct svc_program *pg_next;
+	u32 pg_prog;
+	unsigned int pg_lovers;
+	unsigned int pg_hivers;
+	unsigned int pg_nvers;
+	const struct svc_version **pg_vers;
+	char *pg_name;
+	char *pg_class;
+	struct svc_stat *pg_stats;
+	int (*pg_authenticate)(struct svc_rqst *);
+	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct svc_stat {
+	struct svc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int rpccnt;
+	unsigned int rpcbadfmt;
+	unsigned int rpcbadauth;
+	unsigned int rpcbadclnt;
+};
+
+struct svc_xprt_class;
+
+struct svc_xprt_ops;
+
+struct svc_xprt {
+	struct svc_xprt_class *xpt_class;
+	const struct svc_xprt_ops *xpt_ops;
+	struct kref xpt_ref;
+	struct list_head xpt_list;
+	struct list_head xpt_ready;
+	long unsigned int xpt_flags;
+	struct svc_serv *xpt_server;
+	atomic_t xpt_reserved;
+	atomic_t xpt_nr_rqsts;
+	struct mutex xpt_mutex;
+	spinlock_t xpt_lock;
+	void *xpt_auth_cache;
+	struct list_head xpt_deferred;
+	struct __kernel_sockaddr_storage xpt_local;
+	size_t xpt_locallen;
+	struct __kernel_sockaddr_storage xpt_remote;
+	size_t xpt_remotelen;
+	char xpt_remotebuf[58];
+	struct list_head xpt_users;
+	struct net *xpt_net;
+	netns_tracker ns_tracker;
+	const struct cred *xpt_cred;
+	struct rpc_xprt *xpt_bc_xprt;
+	struct rpc_xprt_switch *xpt_bc_xps;
+};
+
+struct svc_procedure {
+	__be32 (*pc_func)(struct svc_rqst *);
+	bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+	bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+	void (*pc_release)(struct svc_rqst *);
+	unsigned int pc_argsize;
+	unsigned int pc_ressize;
+	unsigned int pc_cachetype;
+	unsigned int pc_xdrressize;
+	const char *pc_name;
+};
+
+struct svc_deferred_req {
+	u32 prot;
+	struct svc_xprt *xprt;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	struct __kernel_sockaddr_storage daddr;
+	size_t daddrlen;
+	void *xprt_ctxt;
+	struct cache_deferred_req handle;
+	int argslen;
+	__be32 args[0];
+};
+
+struct svc_process_info {
+	union {
+		int (*dispatch)(struct svc_rqst *, __be32 *);
+		struct {
+			unsigned int lovers;
+			unsigned int hivers;
+		} mismatch;
+	};
+};
+
+struct svc_version {
+	u32 vs_vers;
+	u32 vs_nproc;
+	const struct svc_procedure *vs_proc;
+	unsigned int *vs_count;
+	u32 vs_xdrsize;
+	bool vs_hidden;
+	bool vs_rpcb_optnl;
+	bool vs_need_cong_ctrl;
+	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
+};
+
+struct svc_xprt_ops {
+	struct svc_xprt * (*xpo_create)(struct svc_serv *, struct net *, struct sockaddr *, int, int);
+	struct svc_xprt * (*xpo_accept)(struct svc_xprt *);
+	int (*xpo_has_wspace)(struct svc_xprt *);
+	int (*xpo_recvfrom)(struct svc_rqst *);
+	int (*xpo_sendto)(struct svc_rqst *);
+	int (*xpo_result_payload)(struct svc_rqst *, unsigned int, unsigned int);
+	void (*xpo_release_rqst)(struct svc_rqst *);
+	void (*xpo_detach)(struct svc_xprt *);
+	void (*xpo_free)(struct svc_xprt *);
+	void (*xpo_secure_port)(struct svc_rqst *);
+	void (*xpo_kill_temp_xprt)(struct svc_xprt *);
+	void (*xpo_start_tls)(struct svc_xprt *);
+};
+
+struct svc_xprt_class {
+	const char *xcl_name;
+	struct module *xcl_owner;
+	const struct svc_xprt_ops *xcl_ops;
+	struct list_head xcl_list;
+	u32 xcl_max_payload;
+	int xcl_ident;
+};
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+struct node {
+	struct device dev;
+	struct list_head access_list;
+	struct work_struct node_work;
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
 };
 
 struct membuf {
@@ -17910,500 +38679,7 @@
 	unsigned int core_note_type;
 };
 
-struct user_regset_view {
-	const char *name;
-	const struct user_regset *regsets;
-	unsigned int n;
-	u32 e_flags;
-	u16 e_machine;
-	u8 ei_osabi;
-};
-
-struct trace_event_raw_sys_enter {
-	struct trace_entry ent;
-	long int id;
-	long unsigned int args[6];
-	char __data[0];
-};
-
-struct trace_event_raw_sys_exit {
-	struct trace_entry ent;
-	long int id;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sys_enter {};
-
-struct trace_event_data_offsets_sys_exit {};
-
-typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
-
-typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
-
-enum powerpc_regset {
-	REGSET_GPR = 0,
-	REGSET_FPR = 1,
-	REGSET_VMX = 2,
-	REGSET_VSX = 3,
-	REGSET_TM_CGPR = 4,
-	REGSET_TM_CFPR = 5,
-	REGSET_TM_CVMX = 6,
-	REGSET_TM_CVSX = 7,
-	REGSET_TM_SPR = 8,
-	REGSET_TM_CTAR = 9,
-	REGSET_TM_CPPR = 10,
-	REGSET_TM_CDSCR = 11,
-	REGSET_PPR = 12,
-	REGSET_DSCR = 13,
-	REGSET_TAR = 14,
-	REGSET_EBB = 15,
-	REGSET_PMR = 16,
-	REGSET_PKEY = 17,
-};
-
-struct pt_regs_offset {
-	const char *name;
-	int offset;
-};
-
-typedef u32 compat_ulong_t;
-
-enum perf_type_id {
-	PERF_TYPE_HARDWARE = 0,
-	PERF_TYPE_SOFTWARE = 1,
-	PERF_TYPE_TRACEPOINT = 2,
-	PERF_TYPE_HW_CACHE = 3,
-	PERF_TYPE_RAW = 4,
-	PERF_TYPE_BREAKPOINT = 5,
-	PERF_TYPE_MAX = 6,
-};
-
-typedef struct {
-	pgd_t pgd;
-} p4d_t;
-
-struct ppc_pci_io {
-	u8 (*readb)(const volatile void *);
-	u16 (*readw)(const volatile void *);
-	u32 (*readl)(const volatile void *);
-	u16 (*readw_be)(const volatile void *);
-	u32 (*readl_be)(const volatile void *);
-	void (*writeb)(u8, volatile void *);
-	void (*writew)(u16, volatile void *);
-	void (*writel)(u32, volatile void *);
-	void (*writew_be)(u16, volatile void *);
-	void (*writel_be)(u32, volatile void *);
-	u64 (*readq)(const volatile void *);
-	u64 (*readq_be)(const volatile void *);
-	void (*writeq)(u64, volatile void *);
-	void (*writeq_be)(u64, volatile void *);
-	u8 (*inb)(long unsigned int);
-	u16 (*inw)(long unsigned int);
-	u32 (*inl)(long unsigned int);
-	void (*outb)(u8, long unsigned int);
-	void (*outw)(u16, long unsigned int);
-	void (*outl)(u32, long unsigned int);
-	void (*readsb)(const volatile void *, void *, long unsigned int);
-	void (*readsw)(const volatile void *, void *, long unsigned int);
-	void (*readsl)(const volatile void *, void *, long unsigned int);
-	void (*writesb)(volatile void *, const void *, long unsigned int);
-	void (*writesw)(volatile void *, const void *, long unsigned int);
-	void (*writesl)(volatile void *, const void *, long unsigned int);
-	void (*insb)(long unsigned int, void *, long unsigned int);
-	void (*insw)(long unsigned int, void *, long unsigned int);
-	void (*insl)(long unsigned int, void *, long unsigned int);
-	void (*outsb)(long unsigned int, const void *, long unsigned int);
-	void (*outsw)(long unsigned int, const void *, long unsigned int);
-	void (*outsl)(long unsigned int, const void *, long unsigned int);
-	void (*memset_io)(volatile void *, int, long unsigned int);
-	void (*memcpy_fromio)(void *, const volatile void *, long unsigned int);
-	void (*memcpy_toio)(volatile void *, const void *, long unsigned int);
-};
-
-enum l1d_flush_type {
-	L1D_FLUSH_NONE = 1,
-	L1D_FLUSH_FALLBACK = 2,
-	L1D_FLUSH_ORI = 4,
-	L1D_FLUSH_MTTRIG = 8,
-};
-
-enum memblock_flags {
-	MEMBLOCK_NONE = 0,
-	MEMBLOCK_HOTPLUG = 1,
-	MEMBLOCK_MIRROR = 2,
-	MEMBLOCK_NOMAP = 4,
-};
-
-struct memblock_region {
-	phys_addr_t base;
-	phys_addr_t size;
-	enum memblock_flags flags;
-	int nid;
-};
-
-struct memblock_type {
-	long unsigned int cnt;
-	long unsigned int max;
-	phys_addr_t total_size;
-	struct memblock_region *regions;
-	char *name;
-};
-
-struct memblock {
-	bool bottom_up;
-	phys_addr_t current_limit;
-	struct memblock_type memory;
-	struct memblock_type reserved;
-};
-
-struct semaphore {
-	raw_spinlock_t lock;
-	unsigned int count;
-	struct list_head wait_list;
-};
-
-struct kmsg_dumper {
-	struct list_head list;
-	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
-	enum kmsg_dump_reason max_reason;
-	bool active;
-	bool registered;
-	u32 cur_idx;
-	u32 next_idx;
-	u64 cur_seq;
-	u64 next_seq;
-};
-
-enum pstore_type_id {
-	PSTORE_TYPE_DMESG = 0,
-	PSTORE_TYPE_MCE = 1,
-	PSTORE_TYPE_CONSOLE = 2,
-	PSTORE_TYPE_FTRACE = 3,
-	PSTORE_TYPE_PPC_RTAS = 4,
-	PSTORE_TYPE_PPC_OF = 5,
-	PSTORE_TYPE_PPC_COMMON = 6,
-	PSTORE_TYPE_PMSG = 7,
-	PSTORE_TYPE_PPC_OPAL = 8,
-	PSTORE_TYPE_MAX = 9,
-};
-
-struct pstore_info;
-
-struct pstore_record {
-	struct pstore_info *psi;
-	enum pstore_type_id type;
-	u64 id;
-	struct timespec64 time;
-	char *buf;
-	ssize_t size;
-	ssize_t ecc_notice_size;
-	int count;
-	enum kmsg_dump_reason reason;
-	unsigned int part;
-	bool compressed;
-};
-
-struct pstore_info {
-	struct module *owner;
-	const char *name;
-	struct semaphore buf_lock;
-	char *buf;
-	size_t bufsize;
-	struct mutex read_mutex;
-	int flags;
-	int max_reason;
-	void *data;
-	int (*open)(struct pstore_info *);
-	int (*close)(struct pstore_info *);
-	ssize_t (*read)(struct pstore_record *);
-	int (*write)(struct pstore_record *);
-	int (*write_user)(struct pstore_record *, const char *);
-	int (*erase)(struct pstore_record *);
-};
-
-typedef unsigned char Byte;
-
-typedef long unsigned int uLong;
-
-struct internal_state;
-
-struct z_stream_s {
-	const Byte *next_in;
-	uLong avail_in;
-	uLong total_in;
-	Byte *next_out;
-	uLong avail_out;
-	uLong total_out;
-	char *msg;
-	struct internal_state *state;
-	void *workspace;
-	int data_type;
-	uLong adler;
-	uLong reserved;
-};
-
-struct internal_state {
-	int dummy;
-};
-
-struct err_log_info {
-	__be32 error_type;
-	__be32 seq_num;
-};
-
-struct nvram_os_partition {
-	const char *name;
-	int req_size;
-	int min_size;
-	long int size;
-	long int index;
-	bool os_partition;
-};
-
-struct oops_log_info {
-	__be16 version;
-	__be16 report_length;
-	__be64 timestamp;
-} __attribute__((packed));
-
-struct nvram_header {
-	unsigned char signature;
-	unsigned char checksum;
-	short unsigned int length;
-	char name[12];
-};
-
-struct nvram_partition {
-	struct list_head partition;
-	struct nvram_header header;
-	unsigned int index;
-};
-
-typedef long int (*syscall_fn)(long int, long int, long int, long int, long int, long int);
-
-typedef u32 compat_size_t;
-
-typedef s32 compat_ssize_t;
-
-typedef long unsigned int uintptr_t;
-
-typedef unsigned int elf_greg_t32;
-
-typedef elf_greg_t32 elf_gregset_t32[48];
-
-typedef elf_vrreg_t elf_vrregset_t32[33];
-
-typedef elf_fpreg_t elf_vsrreghalf_t32[32];
-
-typedef s32 compat_clock_t;
-
-typedef s32 compat_pid_t;
-
-typedef s32 compat_timer_t;
-
-typedef s32 compat_int_t;
-
-typedef u32 __compat_uid32_t;
-
-typedef u32 compat_sigset_word;
-
-struct compat_sigaltstack {
-	compat_uptr_t ss_sp;
-	int ss_flags;
-	compat_size_t ss_size;
-};
-
-typedef struct compat_sigaltstack compat_stack_t;
-
-typedef struct {
-	compat_sigset_word sig[2];
-} compat_sigset_t;
-
-union compat_sigval {
-	compat_int_t sival_int;
-	compat_uptr_t sival_ptr;
-};
-
-typedef union compat_sigval compat_sigval_t;
-
-struct compat_siginfo {
-	int si_signo;
-	int si_errno;
-	int si_code;
-	union {
-		int _pad[29];
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-		} _kill;
-		struct {
-			compat_timer_t _tid;
-			int _overrun;
-			compat_sigval_t _sigval;
-		} _timer;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			compat_sigval_t _sigval;
-		} _rt;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			int _status;
-			compat_clock_t _utime;
-			compat_clock_t _stime;
-		} _sigchld;
-		struct {
-			compat_uptr_t _addr;
-			union {
-				short int _addr_lsb;
-				struct {
-					char _dummy_bnd[4];
-					compat_uptr_t _lower;
-					compat_uptr_t _upper;
-				} _addr_bnd;
-				struct {
-					char _dummy_pkey[4];
-					u32 _pkey;
-				} _addr_pkey;
-			};
-		} _sigfault;
-		struct {
-			compat_long_t _band;
-			int _fd;
-		} _sigpoll;
-		struct {
-			compat_uptr_t _call_addr;
-			int _syscall;
-			unsigned int _arch;
-		} _sigsys;
-	} _sifields;
-};
-
-typedef struct compat_siginfo compat_siginfo_t;
-
-struct sigcontext32 {
-	unsigned int _unused[4];
-	int signal;
-	compat_uptr_t handler;
-	unsigned int oldmask;
-	compat_uptr_t regs;
-};
-
-struct mcontext32 {
-	elf_gregset_t32 mc_gregs;
-	elf_fpregset_t mc_fregs;
-	unsigned int mc_pad[2];
-	elf_vrregset_t32 mc_vregs;
-	elf_vsrreghalf_t32 mc_vsregs;
-};
-
-struct ucontext32 {
-	unsigned int uc_flags;
-	unsigned int uc_link;
-	compat_stack_t uc_stack;
-	int uc_pad[7];
-	compat_uptr_t uc_regs;
-	compat_sigset_t uc_sigmask;
-	int uc_maskext[30];
-	int uc_pad2[3];
-	struct mcontext32 uc_mcontext;
-};
-
-struct sigframe {
-	struct sigcontext32 sctx;
-	struct mcontext32 mctx;
-	struct sigcontext32 sctx_transact;
-	struct mcontext32 mctx_transact;
-	int abigap[56];
-};
-
-struct rt_sigframe___2 {
-	compat_siginfo_t info;
-	struct ucontext32 uc;
-	struct ucontext32 uc_transact;
-	int abigap[56];
-};
-
-enum hrtimer_mode {
-	HRTIMER_MODE_ABS = 0,
-	HRTIMER_MODE_REL = 1,
-	HRTIMER_MODE_PINNED = 2,
-	HRTIMER_MODE_SOFT = 4,
-	HRTIMER_MODE_HARD = 8,
-	HRTIMER_MODE_ABS_PINNED = 2,
-	HRTIMER_MODE_REL_PINNED = 3,
-	HRTIMER_MODE_ABS_SOFT = 4,
-	HRTIMER_MODE_REL_SOFT = 5,
-	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
-	HRTIMER_MODE_REL_PINNED_SOFT = 7,
-	HRTIMER_MODE_ABS_HARD = 8,
-	HRTIMER_MODE_REL_HARD = 9,
-	HRTIMER_MODE_ABS_PINNED_HARD = 10,
-	HRTIMER_MODE_REL_PINNED_HARD = 11,
-};
-
-struct die_args {
-	struct pt_regs *regs;
-	const char *str;
-	long int err;
-	int trapnr;
-	int signr;
-};
-
-enum {
-	HW_BREAKPOINT_EMPTY = 0,
-	HW_BREAKPOINT_R = 1,
-	HW_BREAKPOINT_W = 2,
-	HW_BREAKPOINT_RW = 3,
-	HW_BREAKPOINT_X = 4,
-	HW_BREAKPOINT_INVALID = 7,
-};
-
-enum bp_type_idx {
-	TYPE_INST = 0,
-	TYPE_DATA = 1,
-	TYPE_MAX = 2,
-};
-
-struct breakpoint {
-	struct list_head list;
-	struct perf_event *bp;
-	bool ptrace_bp;
-};
-
-enum {
-	WORK_STRUCT_PENDING_BIT = 0,
-	WORK_STRUCT_DELAYED_BIT = 1,
-	WORK_STRUCT_PWQ_BIT = 2,
-	WORK_STRUCT_LINKED_BIT = 3,
-	WORK_STRUCT_COLOR_SHIFT = 4,
-	WORK_STRUCT_COLOR_BITS = 4,
-	WORK_STRUCT_PENDING = 1,
-	WORK_STRUCT_DELAYED = 2,
-	WORK_STRUCT_PWQ = 4,
-	WORK_STRUCT_LINKED = 8,
-	WORK_STRUCT_STATIC = 0,
-	WORK_NR_COLORS = 15,
-	WORK_NO_COLOR = 15,
-	WORK_CPU_UNBOUND = 2048,
-	WORK_STRUCT_FLAG_BITS = 8,
-	WORK_OFFQ_FLAG_BASE = 4,
-	__WORK_OFFQ_CANCELING = 4,
-	WORK_OFFQ_CANCELING = 16,
-	WORK_OFFQ_FLAG_BITS = 1,
-	WORK_OFFQ_POOL_SHIFT = 5,
-	WORK_OFFQ_LEFT = 59,
-	WORK_OFFQ_POOL_BITS = 31,
-	WORK_OFFQ_POOL_NONE = 2147483647,
-	WORK_STRUCT_FLAG_MASK = 255,
-	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
-	WORK_STRUCT_NO_POOL = 4294967264,
-	WORK_BUSY_PENDING = 1,
-	WORK_BUSY_RUNNING = 2,
-	WORKER_DESC_LEN = 24,
-};
+typedef __vector128 elf_vrreg_t;
 
 struct mce_error_info {
 	enum MCE_ErrorType error_type: 8;
@@ -18423,17 +38699,29 @@
 	bool ignore_event;
 };
 
-enum {
-	DTRIG_UNKNOWN = 0,
-	DTRIG_VECTOR_CI = 1,
-	DTRIG_SUSPEND_ESCAPE = 2,
-};
+typedef struct {
+	u32 val;
+	u32 suffix;
+} ppc_inst_t;
 
 enum {
 	TLB_INVAL_SCOPE_GLOBAL = 0,
 	TLB_INVAL_SCOPE_LPID = 1,
 };
 
+struct instruction_op {
+	int type;
+	int reg;
+	long unsigned int val;
+	long unsigned int ea;
+	int update_reg;
+	int spr;
+	u32 ccval;
+	u32 xerval;
+	u8 element_size;
+	u8 vsx_flags;
+};
+
 struct mce_ierror_table {
 	long unsigned int srr1_mask;
 	long unsigned int srr1_value;
@@ -18457,127 +38745,153 @@
 	bool sync_error;
 };
 
-enum stf_barrier_type {
-	STF_BARRIER_NONE = 1,
-	STF_BARRIER_FALLBACK = 2,
-	STF_BARRIER_EIEIO = 4,
-	STF_BARRIER_SYNC_ORI = 8,
+typedef long unsigned int elf_greg_t64;
+
+typedef elf_greg_t64 elf_gregset_t64[48];
+
+typedef elf_gregset_t64 elf_gregset_t;
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
 };
 
-enum branch_cache_flush_type {
-	BRANCH_CACHE_FLUSH_NONE = 1,
-	BRANCH_CACHE_FLUSH_SW = 2,
-	BRANCH_CACHE_FLUSH_HW = 4,
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
 };
 
-struct proc_ops {
-	unsigned int proc_flags;
-	int (*proc_open)(struct inode *, struct file *);
-	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
-	loff_t (*proc_lseek)(struct file *, loff_t, int);
-	int (*proc_release)(struct inode *, struct file *);
-	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
-	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*proc_mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short int pr_cursig;
+	long unsigned int pr_sigpend;
+	long unsigned int pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
 };
 
-typedef u16 uint16_t;
-
-struct rtas_t {
-	long unsigned int entry;
-	long unsigned int base;
-	long unsigned int size;
-	arch_spinlock_t lock;
-	struct rtas_args args;
-	struct device_node *dev;
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
 };
 
-struct rtas_suspend_me_data {
-	atomic_t working;
-	atomic_t done;
-	int token;
-	atomic_t error;
-	struct completion *complete;
+struct fadump_crash_info_header {
+	u64 magic_number;
+	u64 elfcorehdr_addr;
+	u32 crashing_cpu;
+	struct pt_regs regs;
+	struct cpumask cpu_mask;
 };
 
-struct rtas_error_log {
-	u8 byte0;
-	u8 byte1;
-	u8 byte2;
-	u8 byte3;
-	__be32 extended_log_length;
-	unsigned char buffer[1];
+struct fadump_memory_range {
+	u64 base;
+	u64 size;
 };
 
-struct rtas_ext_event_log_v6 {
-	u8 byte0;
-	u8 byte1;
-	u8 byte2;
-	u8 byte3;
-	u8 reserved[8];
-	__be32 company_id;
-	u8 vendor_log[1];
+struct fadump_mrange_info {
+	char name[16];
+	struct fadump_memory_range *mem_ranges;
+	u32 mem_ranges_sz;
+	u32 mem_range_cnt;
+	u32 max_mem_ranges;
+	bool is_static;
 };
 
-struct pseries_errorlog {
-	__be16 id;
-	__be16 length;
-	u8 version;
-	u8 subtype;
-	__be16 creator_component;
-	u8 data[0];
+struct fadump_ops;
+
+struct fw_dump {
+	long unsigned int reserve_dump_area_start;
+	long unsigned int reserve_dump_area_size;
+	long unsigned int reserve_bootvar;
+	long unsigned int cpu_state_data_size;
+	u64 cpu_state_dest_vaddr;
+	u32 cpu_state_data_version;
+	u32 cpu_state_entry_size;
+	long unsigned int hpte_region_size;
+	long unsigned int boot_memory_size;
+	u64 boot_mem_dest_addr;
+	u64 boot_mem_addr[128];
+	u64 boot_mem_sz[128];
+	u64 boot_mem_top;
+	u64 boot_mem_regs_cnt;
+	long unsigned int fadumphdr_addr;
+	long unsigned int cpu_notes_buf_vaddr;
+	long unsigned int cpu_notes_buf_size;
+	u64 max_copy_size;
+	u64 kernel_metadata;
+	int ibm_configure_kernel_dump;
+	long unsigned int fadump_enabled: 1;
+	long unsigned int fadump_supported: 1;
+	long unsigned int dump_active: 1;
+	long unsigned int dump_registered: 1;
+	long unsigned int nocma: 1;
+	struct fadump_ops *ops;
 };
 
-struct rtas_filter {
-	const char *name;
-	int token;
-	int buf_idx1;
-	int size_idx1;
-	int buf_idx2;
-	int size_idx2;
-	int fixed_size;
+struct fadump_ops {
+	u64 (*fadump_init_mem_struct)(struct fw_dump *);
+	u64 (*fadump_get_metadata_size)();
+	int (*fadump_setup_metadata)(struct fw_dump *);
+	u64 (*fadump_get_bootmem_min)();
+	int (*fadump_register)(struct fw_dump *);
+	int (*fadump_unregister)(struct fw_dump *);
+	int (*fadump_invalidate)(struct fw_dump *);
+	void (*fadump_cleanup)(struct fw_dump *);
+	int (*fadump_process)(struct fw_dump *);
+	void (*fadump_region_show)(struct fw_dump *, struct seq_file *);
+	void (*fadump_trigger)(struct fadump_crash_info_header *, const char *);
 };
 
-struct indicator_elem {
-	__be32 token;
-	__be32 maxindex;
+struct cma;
+
+struct vm_unmapped_area_info {
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
 };
 
-typedef struct poll_table_struct poll_table;
+typedef s8 int8_t;
 
-struct individual_sensor {
-	unsigned int token;
-	unsigned int quant;
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
 };
 
-struct rtas_sensors {
-	struct individual_sensor sensor[17];
-	unsigned int quant;
+struct ics {
+	struct list_head link;
+	int (*check)(struct ics *, unsigned int);
+	void (*mask_unknown)(struct ics *, long unsigned int);
+	long int (*get_server)(struct ics *, long unsigned int);
+	int (*host_match)(struct ics *, struct device_node *);
+	struct irq_chip *chip;
+	char data[0];
 };
 
-struct dt_cpu_feature {
-	const char *name;
-	uint32_t isa;
-	uint32_t usable_privilege;
-	uint32_t hv_support;
-	uint32_t os_support;
-	uint32_t hfscr_bit_nr;
-	uint32_t fscr_bit_nr;
-	uint32_t hwcap_bit_nr;
-	long unsigned int node;
-	int enabled;
-	int disabled;
+struct pnv_rng {
+	void *regs;
+	void *regs_real;
+	long unsigned int mask;
 };
 
-struct dt_cpu_feature_match {
-	const char *name;
-	int (*enable)(struct dt_cpu_feature *);
-	u64 cpu_ftr_bit_mask;
-};
+struct iopf_device_param;
 
 struct iommu_fault_param;
 
@@ -18586,37 +38900,82 @@
 struct dev_iommu {
 	struct mutex lock;
 	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
 	struct iommu_fwspec *fwspec;
 	struct iommu_device *iommu_dev;
 	void *priv;
 };
 
-struct eeh_ops {
-	char *name;
-	struct eeh_dev * (*probe)(struct pci_dev *);
-	int (*set_option)(struct eeh_pe *, int);
-	int (*get_state)(struct eeh_pe *, int *);
-	int (*reset)(struct eeh_pe *, int);
-	int (*get_log)(struct eeh_pe *, int, char *, long unsigned int);
-	int (*configure_bridge)(struct eeh_pe *);
-	int (*err_inject)(struct eeh_pe *, int, int, long unsigned int, long unsigned int);
-	int (*read_config)(struct eeh_dev *, int, int, u32 *);
-	int (*write_config)(struct eeh_dev *, int, int, u32);
-	int (*next_error)(struct eeh_pe **);
-	int (*restore_config)(struct eeh_dev *);
-	int (*notify_resume)(struct eeh_dev *);
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
 };
 
-struct of_phandle_args {
-	struct device_node *np;
-	int args_count;
-	uint32_t args[16];
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
 };
 
-enum pcie_reset_state {
-	pcie_deassert_reset = 1,
-	pcie_warm_reset = 2,
-	pcie_hot_reset = 3,
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	void (*hook)(struct pci_dev *);
 };
 
 struct iommu_fault_unrecoverable {
@@ -18656,54 +39015,6 @@
 	__u32 code;
 };
 
-struct iommu_inv_addr_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-	__u64 addr;
-	__u64 granule_size;
-	__u64 nb_granules;
-};
-
-struct iommu_inv_pasid_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-};
-
-struct iommu_cache_invalidate_info {
-	__u32 argsz;
-	__u32 version;
-	__u8 cache;
-	__u8 granularity;
-	__u8 padding[6];
-	union {
-		struct iommu_inv_pasid_info pasid_info;
-		struct iommu_inv_addr_info addr_info;
-	} granu;
-};
-
-struct iommu_gpasid_bind_data_vtd {
-	__u64 flags;
-	__u32 pat;
-	__u32 emt;
-};
-
-struct iommu_gpasid_bind_data {
-	__u32 argsz;
-	__u32 version;
-	__u32 format;
-	__u32 addr_width;
-	__u64 flags;
-	__u64 gpgd;
-	__u64 hpasid;
-	__u64 gpasid;
-	__u8 padding[8];
-	union {
-		struct iommu_gpasid_bind_data_vtd vtd;
-	} vendor;
-};
-
 typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
 
 struct iommu_domain_geometry {
@@ -18712,38 +39023,45 @@
 	bool force_aperture;
 };
 
+struct iommu_dma_cookie;
+
 struct iommu_domain {
 	unsigned int type;
-	const struct iommu_ops *ops;
+	const struct iommu_domain_ops *ops;
 	long unsigned int pgsize_bitmap;
 	iommu_fault_handler_t handler;
 	void *handler_token;
 	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
+	struct iommu_dma_cookie *iova_cookie;
 };
 
 typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
 
-enum iommu_resv_type {
-	IOMMU_RESV_DIRECT = 0,
-	IOMMU_RESV_DIRECT_RELAXABLE = 1,
-	IOMMU_RESV_RESERVED = 2,
-	IOMMU_RESV_MSI = 3,
-	IOMMU_RESV_SW_MSI = 4,
-};
+struct iommu_iotlb_gather;
 
-struct iommu_resv_region {
-	struct list_head list;
-	phys_addr_t start;
-	size_t length;
-	int prot;
-	enum iommu_resv_type type;
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	void (*detach_dev)(struct iommu_domain *, struct device *);
+	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
+	void (*free)(struct iommu_domain *);
 };
 
 struct iommu_iotlb_gather {
 	long unsigned int start;
 	long unsigned int end;
 	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
 };
 
 struct iommu_device {
@@ -18773,98 +39091,16 @@
 	const struct iommu_ops *ops;
 	struct fwnode_handle *iommu_fwnode;
 	u32 flags;
-	u32 num_pasid_bits;
 	unsigned int num_ids;
 	u32 ids[0];
 };
 
-struct eeh_stats {
-	u64 no_device;
-	u64 no_dn;
-	u64 no_cfg_addr;
-	u64 ignored_check;
-	u64 total_mmio_ffs;
-	u64 false_positives;
-	u64 slot_resets;
-};
-
-typedef void (*eeh_edev_traverse_func)(struct eeh_dev *, void *);
-
-typedef void * (*eeh_pe_traverse_func)(struct eeh_pe *, void *);
-
-enum {
-	pci_channel_io_normal = 1,
-	pci_channel_io_frozen = 2,
-	pci_channel_io_perm_failure = 3,
-};
-
-struct pci_io_addr_range {
-	struct rb_node rb_node;
-	resource_size_t addr_lo;
-	resource_size_t addr_hi;
-	struct eeh_dev *edev;
-	struct pci_dev *pcidev;
-	long unsigned int flags;
-};
-
-struct pci_io_addr_cache {
-	struct rb_root rb_root;
-	spinlock_t piar_lock;
-};
-
-enum {
-	EEH_NEXT_ERR_NONE = 0,
-	EEH_NEXT_ERR_INF = 1,
-	EEH_NEXT_ERR_FROZEN_PE = 2,
-	EEH_NEXT_ERR_FENCED_PHB = 3,
-	EEH_NEXT_ERR_DEAD_PHB = 4,
-	EEH_NEXT_ERR_DEAD_IOC = 5,
-};
-
-enum {
-	IRQD_TRIGGER_MASK = 15,
-	IRQD_SETAFFINITY_PENDING = 256,
-	IRQD_ACTIVATED = 512,
-	IRQD_NO_BALANCING = 1024,
-	IRQD_PER_CPU = 2048,
-	IRQD_AFFINITY_SET = 4096,
-	IRQD_LEVEL = 8192,
-	IRQD_WAKEUP_STATE = 16384,
-	IRQD_MOVE_PCNTXT = 32768,
-	IRQD_IRQ_DISABLED = 65536,
-	IRQD_IRQ_MASKED = 131072,
-	IRQD_IRQ_INPROGRESS = 262144,
-	IRQD_WAKEUP_ARMED = 524288,
-	IRQD_FORWARDED_TO_VCPU = 1048576,
-	IRQD_AFFINITY_MANAGED = 2097152,
-	IRQD_IRQ_STARTED = 4194304,
-	IRQD_MANAGED_SHUTDOWN = 8388608,
-	IRQD_SINGLE_TARGET = 16777216,
-	IRQD_DEFAULT_TRIGGER_SET = 33554432,
-	IRQD_CAN_RESERVE = 67108864,
-	IRQD_MSI_NOMASK_QUIRK = 134217728,
-	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
-	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
-	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
-};
-
-struct hotplug_slot_ops;
-
-struct hotplug_slot {
-	const struct hotplug_slot_ops *ops;
-	struct list_head slot_list;
-	struct pci_slot *pci_slot;
-	struct module *owner;
-	const char *mod_name;
-};
-
-enum pci_ers_result {
-	PCI_ERS_RESULT_NONE = 1,
-	PCI_ERS_RESULT_CAN_RECOVER = 2,
-	PCI_ERS_RESULT_NEED_RESET = 3,
-	PCI_ERS_RESULT_DISCONNECT = 4,
-	PCI_ERS_RESULT_RECOVERED = 5,
-	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+struct msi_bitmap {
+	struct device_node *of_node;
+	long unsigned int *bitmap;
+	spinlock_t lock;
+	unsigned int irq_count;
+	bool bitmap_from_slab;
 };
 
 struct hotplug_slot_ops {
@@ -18876,1829 +39112,7 @@
 	int (*get_attention_status)(struct hotplug_slot *, u8 *);
 	int (*get_latch_status)(struct hotplug_slot *, u8 *);
 	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
-	int (*reset_slot)(struct hotplug_slot *, int);
-};
-
-struct eeh_rmv_data {
-	struct list_head removed_vf_list;
-	int removed_dev_count;
-};
-
-typedef enum pci_ers_result (*eeh_report_fn)(struct eeh_dev *, struct pci_dev *, struct pci_driver *);
-
-struct eeh_event {
-	struct list_head list;
-	struct eeh_pe *pe;
-};
-
-typedef __s64 Elf64_Sxword;
-
-struct elf64_rela {
-	Elf64_Addr r_offset;
-	Elf64_Xword r_info;
-	Elf64_Sxword r_addend;
-};
-
-typedef struct elf64_rela Elf64_Rela;
-
-struct modversion_info {
-	long unsigned int crc;
-	char name[56];
-};
-
-typedef long unsigned int func_desc_t;
-
-struct ppc64_stub_entry {
-	u32 jump[7];
-	u32 magic;
-	func_desc_t funcdata;
-};
-
-enum jump_label_type {
-	JUMP_LABEL_NOP = 0,
-	JUMP_LABEL_JMP = 1,
-};
-
-enum pageflags {
-	PG_locked = 0,
-	PG_referenced = 1,
-	PG_uptodate = 2,
-	PG_dirty = 3,
-	PG_lru = 4,
-	PG_active = 5,
-	PG_workingset = 6,
-	PG_waiters = 7,
-	PG_error = 8,
-	PG_slab = 9,
-	PG_owner_priv_1 = 10,
-	PG_arch_1 = 11,
-	PG_reserved = 12,
-	PG_private = 13,
-	PG_private_2 = 14,
-	PG_writeback = 15,
-	PG_head = 16,
-	PG_mappedtodisk = 17,
-	PG_reclaim = 18,
-	PG_swapbacked = 19,
-	PG_unevictable = 20,
-	PG_mlocked = 21,
-	PG_hwpoison = 22,
-	PG_young = 23,
-	PG_idle = 24,
-	PG_arch_2 = 25,
-	__NR_PAGEFLAGS = 26,
-	PG_checked = 10,
-	PG_swapcache = 10,
-	PG_fscache = 14,
-	PG_pinned = 10,
-	PG_savepinned = 3,
-	PG_foreign = 10,
-	PG_xen_remapped = 10,
-	PG_slob_free = 13,
-	PG_double_map = 6,
-	PG_isolated = 18,
-	PG_reported = 2,
-};
-
-enum kgdb_bptype {
-	BP_BREAKPOINT = 0,
-	BP_HARDWARE_BREAKPOINT = 1,
-	BP_WRITE_WATCHPOINT = 2,
-	BP_READ_WATCHPOINT = 3,
-	BP_ACCESS_WATCHPOINT = 4,
-	BP_POKE_BREAKPOINT = 5,
-};
-
-enum kgdb_bpstate {
-	BP_UNDEFINED = 0,
-	BP_REMOVED = 1,
-	BP_SET = 2,
-	BP_ACTIVE = 3,
-};
-
-struct kgdb_bkpt {
-	long unsigned int bpt_addr;
-	unsigned char saved_instr[4];
-	enum kgdb_bptype type;
-	enum kgdb_bpstate state;
-};
-
-struct dbg_reg_def_t {
-	char *name;
-	int size;
-	int offset;
-};
-
-struct kgdb_arch {
-	unsigned char gdb_bpt_instr[4];
-	long unsigned int flags;
-	int (*set_breakpoint)(long unsigned int, char *);
-	int (*remove_breakpoint)(long unsigned int, char *);
-	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	void (*disable_hw_break)(struct pt_regs *);
-	void (*remove_all_hw_break)();
-	void (*correct_hw_break)();
-	void (*enable_nmi)(bool);
-};
-
-struct hard_trap_info {
-	unsigned int tt;
-	unsigned char signo;
-};
-
-enum {
-	SD_BALANCE_NEWIDLE = 1,
-	SD_BALANCE_EXEC = 2,
-	SD_BALANCE_FORK = 4,
-	SD_BALANCE_WAKE = 8,
-	SD_WAKE_AFFINE = 16,
-	SD_ASYM_CPUCAPACITY = 32,
-	SD_SHARE_CPUCAPACITY = 64,
-	SD_SHARE_PKG_RESOURCES = 128,
-	SD_SERIALIZE = 256,
-	SD_ASYM_PACKING = 512,
-	SD_PREFER_SIBLING = 1024,
-	SD_OVERLAP = 2048,
-	SD_NUMA = 4096,
-};
-
-struct sched_domain_shared {
-	atomic_t ref;
-	atomic_t nr_busy_cpus;
-	int has_idle_cores;
-};
-
-struct sched_group;
-
-struct sched_domain {
-	struct sched_domain *parent;
-	struct sched_domain *child;
-	struct sched_group *groups;
-	long unsigned int min_interval;
-	long unsigned int max_interval;
-	unsigned int busy_factor;
-	unsigned int imbalance_pct;
-	unsigned int cache_nice_tries;
-	int nohz_idle;
-	int flags;
-	int level;
-	long unsigned int last_balance;
-	unsigned int balance_interval;
-	unsigned int nr_balance_failed;
-	u64 max_newidle_lb_cost;
-	long unsigned int next_decay_max_lb_cost;
-	u64 avg_scan_cost;
-	unsigned int lb_count[3];
-	unsigned int lb_failed[3];
-	unsigned int lb_balanced[3];
-	unsigned int lb_imbalance[3];
-	unsigned int lb_gained[3];
-	unsigned int lb_hot_gained[3];
-	unsigned int lb_nobusyg[3];
-	unsigned int lb_nobusyq[3];
-	unsigned int alb_count;
-	unsigned int alb_failed;
-	unsigned int alb_pushed;
-	unsigned int sbe_count;
-	unsigned int sbe_balanced;
-	unsigned int sbe_pushed;
-	unsigned int sbf_count;
-	unsigned int sbf_balanced;
-	unsigned int sbf_pushed;
-	unsigned int ttwu_wake_remote;
-	unsigned int ttwu_move_affine;
-	unsigned int ttwu_move_balance;
-	char *name;
-	union {
-		void *private;
-		struct callback_head rcu;
-	};
-	struct sched_domain_shared *shared;
-	unsigned int span_weight;
-	long unsigned int span[0];
-};
-
-typedef const struct cpumask * (*sched_domain_mask_f)(int);
-
-typedef int (*sched_domain_flags_f)();
-
-struct sched_group_capacity;
-
-struct sd_data {
-	struct sched_domain **sd;
-	struct sched_domain_shared **sds;
-	struct sched_group **sg;
-	struct sched_group_capacity **sgc;
-};
-
-struct sched_domain_topology_level {
-	sched_domain_mask_f mask;
-	sched_domain_flags_f sd_flags;
-	int flags;
-	int numa_level;
-	struct sd_data data;
-	char *name;
-};
-
-enum {
-	smt_idx = 0,
-	cache_idx = 1,
-	mc_idx = 2,
-	die_idx = 3,
-};
-
-struct thread_groups {
-	unsigned int property;
-	unsigned int nr_groups;
-	unsigned int threads_per_group;
-	unsigned int thread_list[8];
-};
-
-struct cpu_messages {
-	long int messages;
-};
-
-typedef u32 ppc_opcode_t;
-
-typedef ppc_opcode_t kprobe_opcode_t;
-
-struct arch_specific_insn {
-	kprobe_opcode_t *insn;
-	int boostable;
-};
-
-struct kprobe;
-
-struct prev_kprobe {
-	struct kprobe *kp;
-	long unsigned int status;
-	long unsigned int saved_msr;
-};
-
-typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
-
-typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
-
-typedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);
-
-struct kprobe {
-	struct hlist_node hlist;
-	struct list_head list;
-	long unsigned int nmissed;
-	kprobe_opcode_t *addr;
-	const char *symbol_name;
-	unsigned int offset;
-	kprobe_pre_handler_t pre_handler;
-	kprobe_post_handler_t post_handler;
-	kprobe_fault_handler_t fault_handler;
-	kprobe_opcode_t opcode;
-	struct arch_specific_insn ainsn;
-	u32 flags;
-};
-
-struct kprobe_ctlblk {
-	long unsigned int kprobe_status;
-	long unsigned int kprobe_saved_msr;
-	struct prev_kprobe prev_kprobe;
-};
-
-struct kretprobe_instance;
-
-typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
-
-struct kretprobe;
-
-struct kretprobe_instance {
-	union {
-		struct hlist_node hlist;
-		struct callback_head rcu;
-	};
-	struct kretprobe *rp;
-	kprobe_opcode_t *ret_addr;
-	struct task_struct *task;
-	void *fp;
-	char data[0];
-};
-
-struct kretprobe {
-	struct kprobe kp;
-	kretprobe_handler_t handler;
-	kretprobe_handler_t entry_handler;
-	int maxactive;
-	int nmissed;
-	size_t data_size;
-	struct hlist_head free_instances;
-	raw_spinlock_t lock;
-};
-
-struct kretprobe_blackpoint {
-	const char *name;
-	void *addr;
-};
-
-struct kprobe_insn_cache {
-	struct mutex mutex;
-	void * (*alloc)();
-	void (*free)(void *);
-	const char *sym;
-	struct list_head pages;
-	size_t insn_size;
-	int nr_garbage;
-};
-
-struct arch_optimized_insn {
-	kprobe_opcode_t copied_insn[1];
-	kprobe_opcode_t *insn;
-};
-
-struct optimized_kprobe {
-	struct kprobe kp;
-	struct list_head list;
-	struct arch_optimized_insn optinsn;
-};
-
-typedef ppc_opcode_t uprobe_opcode_t;
-
-struct arch_uprobe {
-	union {
-		struct ppc_inst insn;
-		struct ppc_inst ixol;
-	};
-};
-
-enum rp_check {
-	RP_CHECK_CALL = 0,
-	RP_CHECK_CHAIN_CALL = 1,
-	RP_CHECK_RET = 2,
-};
-
-struct serial_rs485 {
-	__u32 flags;
-	__u32 delay_rts_before_send;
-	__u32 delay_rts_after_send;
-	__u32 padding[5];
-};
-
-struct serial_iso7816 {
-	__u32 flags;
-	__u32 tg;
-	__u32 sc_fi;
-	__u32 sc_di;
-	__u32 clk;
-	__u32 reserved[5];
-};
-
-struct circ_buf {
-	char *buf;
-	int head;
-	int tail;
-};
-
-struct uart_port;
-
-struct uart_ops {
-	unsigned int (*tx_empty)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*stop_tx)(struct uart_port *);
-	void (*start_tx)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	void (*send_xchar)(struct uart_port *, char);
-	void (*stop_rx)(struct uart_port *);
-	void (*enable_ms)(struct uart_port *);
-	void (*break_ctl)(struct uart_port *, int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*flush_buffer)(struct uart_port *);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	const char * (*type)(struct uart_port *);
-	void (*release_port)(struct uart_port *);
-	int (*request_port)(struct uart_port *);
-	void (*config_port)(struct uart_port *, int);
-	int (*verify_port)(struct uart_port *, struct serial_struct *);
-	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
-	int (*poll_init)(struct uart_port *);
-	void (*poll_put_char)(struct uart_port *, unsigned char);
-	int (*poll_get_char)(struct uart_port *);
-};
-
-struct uart_icount {
-	__u32 cts;
-	__u32 dsr;
-	__u32 rng;
-	__u32 dcd;
-	__u32 rx;
-	__u32 tx;
-	__u32 frame;
-	__u32 overrun;
-	__u32 parity;
-	__u32 brk;
-	__u32 buf_overrun;
-};
-
-typedef unsigned int upf_t;
-
-typedef unsigned int upstat_t;
-
-struct gpio_desc;
-
-struct uart_state;
-
-struct uart_port {
-	spinlock_t lock;
-	long unsigned int iobase;
-	unsigned char *membase;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
-	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	unsigned int fifosize;
-	unsigned char x_char;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char quirks;
-	unsigned int read_status_mask;
-	unsigned int ignore_status_mask;
-	struct uart_state *state;
-	struct uart_icount icount;
-	struct console *cons;
-	upf_t flags;
-	upstat_t status;
-	int hw_stopped;
-	unsigned int mctrl;
-	unsigned int timeout;
-	unsigned int type;
-	const struct uart_ops *ops;
-	unsigned int custom_divisor;
-	unsigned int line;
-	unsigned int minor;
-	resource_size_t mapbase;
-	resource_size_t mapsize;
-	struct device *dev;
-	long unsigned int sysrq;
-	unsigned int sysrq_ch;
-	unsigned char has_sysrq;
-	unsigned char sysrq_seq;
-	unsigned char hub6;
-	unsigned char suspended;
-	unsigned char console_reinit;
-	const char *name;
-	struct attribute_group *attr_group;
-	const struct attribute_group **tty_groups;
-	struct serial_rs485 rs485;
-	struct gpio_desc *rs485_term_gpio;
-	struct serial_iso7816 iso7816;
-	void *private_data;
-};
-
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3,
-	UART_PM_STATE_UNDEFINED = 4,
-};
-
-struct uart_state {
-	struct tty_port port;
-	enum uart_pm_state pm_state;
-	struct circ_buf xmit;
-	atomic_t refcount;
-	wait_queue_head_t remove_wait;
-	struct uart_port *uart_port;
-};
-
-struct plat_serial8250_port {
-	long unsigned int iobase;
-	void *membase;
-	resource_size_t mapbase;
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	void *private_data;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char hub6;
-	unsigned char has_sysrq;
-	upf_t flags;
-	unsigned int type;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-};
-
-enum {
-	PLAT8250_DEV_LEGACY = 4294967295,
-	PLAT8250_DEV_PLATFORM = 0,
-	PLAT8250_DEV_PLATFORM1 = 1,
-	PLAT8250_DEV_PLATFORM2 = 2,
-	PLAT8250_DEV_FOURPORT = 3,
-	PLAT8250_DEV_ACCENT = 4,
-	PLAT8250_DEV_BOCA = 5,
-	PLAT8250_DEV_EXAR_ST16C554 = 6,
-	PLAT8250_DEV_HUB6 = 7,
-	PLAT8250_DEV_AU1X00 = 8,
-	PLAT8250_DEV_SM501 = 9,
-};
-
-struct legacy_serial_info {
-	struct device_node *np;
-	unsigned int speed;
-	unsigned int clock;
-	int irq_check_parent;
-	phys_addr_t taddr;
-};
-
-struct mem_section_usage {
-	long unsigned int subsection_map[1];
-	long unsigned int pageblock_flags[0];
-};
-
-struct page_ext;
-
-struct mem_section {
-	long unsigned int section_mem_map;
-	struct mem_section_usage *usage;
-	struct page_ext *page_ext;
-	long unsigned int pad;
-};
-
-struct page_ext {
-	long unsigned int flags;
-};
-
-struct stack_trace {
-	unsigned int nr_entries;
-	unsigned int max_entries;
-	long unsigned int *entries;
-	unsigned int skip;
-};
-
-enum {
-	PCI_REASSIGN_ALL_RSRC = 1,
-	PCI_REASSIGN_ALL_BUS = 2,
-	PCI_PROBE_ONLY = 4,
-	PCI_CAN_SKIP_ISA_ALIGN = 8,
-	PCI_ENABLE_PROC_DOMAINS = 16,
-	PCI_COMPAT_DOMAIN_0 = 32,
-	PCI_SCAN_ALL_PCIE_DEVS = 64,
-};
-
-struct vm_struct {
-	struct vm_struct *next;
-	void *addr;
-	long unsigned int size;
-	long unsigned int flags;
-	struct page **pages;
-	unsigned int nr_pages;
-	phys_addr_t phys_addr;
-	const void *caller;
-};
-
-struct pci_fixup {
-	u16 vendor;
-	u16 device;
-	u32 class;
-	unsigned int class_shift;
-	void (*hook)(struct pci_dev *);
-};
-
-struct pci_address {
-	u32 a_hi;
-	u32 a_mid;
-	u32 a_lo;
-};
-
-struct isa_address {
-	u32 a_hi;
-	u32 a_lo;
-};
-
-struct isa_range {
-	struct isa_address isa_addr;
-	struct pci_address pci_addr;
-	unsigned int size;
-};
-
-enum {
-	IRQ_TYPE_NONE = 0,
-	IRQ_TYPE_EDGE_RISING = 1,
-	IRQ_TYPE_EDGE_FALLING = 2,
-	IRQ_TYPE_EDGE_BOTH = 3,
-	IRQ_TYPE_LEVEL_HIGH = 4,
-	IRQ_TYPE_LEVEL_LOW = 8,
-	IRQ_TYPE_LEVEL_MASK = 12,
-	IRQ_TYPE_SENSE_MASK = 15,
-	IRQ_TYPE_DEFAULT = 15,
-	IRQ_TYPE_PROBE = 16,
-	IRQ_LEVEL = 256,
-	IRQ_PER_CPU = 512,
-	IRQ_NOPROBE = 1024,
-	IRQ_NOREQUEST = 2048,
-	IRQ_NOAUTOEN = 4096,
-	IRQ_NO_BALANCING = 8192,
-	IRQ_MOVE_PCNTXT = 16384,
-	IRQ_NESTED_THREAD = 32768,
-	IRQ_NOTHREAD = 65536,
-	IRQ_PER_CPU_DEVID = 131072,
-	IRQ_IS_POLLED = 262144,
-	IRQ_DISABLE_UNLAZY = 524288,
-	IRQ_HIDDEN = 1048576,
-};
-
-enum pci_mmap_state {
-	pci_mmap_io = 0,
-	pci_mmap_mem = 1,
-};
-
-struct pci_sriov {
-	int pos;
-	int nres;
-	u32 cap;
-	u16 ctrl;
-	u16 total_VFs;
-	u16 initial_VFs;
-	u16 num_VFs;
-	u16 offset;
-	u16 stride;
-	u16 vf_device;
-	u32 pgsz;
-	u8 link;
-	u8 max_VF_buses;
-	u16 driver_max_VFs;
-	struct pci_dev *dev;
-	struct pci_dev *self;
-	u32 class;
-	u8 hdr_type;
-	u16 subsystem_vendor;
-	u16 subsystem_device;
-	resource_size_t barsz[6];
-	bool drivers_autoprobe;
-};
-
-typedef u64 pci_bus_addr_t;
-
-struct pci_bus_region {
-	pci_bus_addr_t start;
-	pci_bus_addr_t end;
-};
-
-struct of_bus;
-
-struct of_pci_range_parser {
-	struct device_node *node;
-	struct of_bus *bus;
-	const __be32 *range;
-	const __be32 *end;
-	int na;
-	int ns;
-	int pna;
-	bool dma;
-};
-
-struct of_pci_range {
-	union {
-		u64 pci_addr;
-		u64 bus_addr;
-	};
-	u64 cpu_addr;
-	u64 size;
-	u32 flags;
-};
-
-enum pci_fixup_pass {
-	pci_fixup_early = 0,
-	pci_fixup_header = 1,
-	pci_fixup_final = 2,
-	pci_fixup_enable = 3,
-	pci_fixup_resume = 4,
-	pci_fixup_suspend = 5,
-	pci_fixup_resume_early = 6,
-	pci_fixup_suspend_late = 7,
-};
-
-struct dyn_arch_ftrace {
-	struct module *mod;
-};
-
-enum {
-	FTRACE_FL_ENABLED = 2147483648,
-	FTRACE_FL_REGS = 1073741824,
-	FTRACE_FL_REGS_EN = 536870912,
-	FTRACE_FL_TRAMP = 268435456,
-	FTRACE_FL_TRAMP_EN = 134217728,
-	FTRACE_FL_IPMODIFY = 67108864,
-	FTRACE_FL_DISABLED = 33554432,
-	FTRACE_FL_DIRECT = 16777216,
-	FTRACE_FL_DIRECT_EN = 8388608,
-};
-
-struct dyn_ftrace {
-	long unsigned int ip;
-	long unsigned int flags;
-	struct dyn_arch_ftrace arch;
-};
-
-enum vm_fault_reason {
-	VM_FAULT_OOM = 1,
-	VM_FAULT_SIGBUS = 2,
-	VM_FAULT_MAJOR = 4,
-	VM_FAULT_WRITE = 8,
-	VM_FAULT_HWPOISON = 16,
-	VM_FAULT_HWPOISON_LARGE = 32,
-	VM_FAULT_SIGSEGV = 64,
-	VM_FAULT_NOPAGE = 256,
-	VM_FAULT_LOCKED = 512,
-	VM_FAULT_RETRY = 1024,
-	VM_FAULT_FALLBACK = 2048,
-	VM_FAULT_DONE_COW = 4096,
-	VM_FAULT_NEEDDSYNC = 8192,
-	VM_FAULT_HINDEX_MASK = 983040,
-};
-
-struct hstate {
-	int next_nid_to_alloc;
-	int next_nid_to_free;
-	unsigned int order;
-	long unsigned int mask;
-	long unsigned int max_huge_pages;
-	long unsigned int nr_huge_pages;
-	long unsigned int free_huge_pages;
-	long unsigned int resv_huge_pages;
-	long unsigned int surplus_huge_pages;
-	long unsigned int nr_overcommit_huge_pages;
-	struct list_head hugepage_activelist;
-	struct list_head hugepage_freelists[256];
-	unsigned int nr_huge_pages_node[256];
-	unsigned int free_huge_pages_node[256];
-	unsigned int surplus_huge_pages_node[256];
-	struct cftype cgroup_files_dfl[7];
-	struct cftype cgroup_files_legacy[9];
-	char name[32];
-};
-
-struct mhp_params {
-	struct vmem_altmap *altmap;
-	pgprot_t pgprot;
-};
-
-typedef struct {
-	__be64 pdbe;
-} hugepd_t;
-
-struct hugepage_subpool {
-	spinlock_t lock;
-	long int count;
-	long int max_hpages;
-	long int used_hpages;
-	struct hstate *hstate;
-	long int min_hpages;
-	long int rsv_hpages;
-};
-
-struct hugetlbfs_sb_info {
-	long int max_inodes;
-	long int free_inodes;
-	spinlock_t stat_lock;
-	struct hstate *hstate;
-	struct hugepage_subpool *spool;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-struct vm_unmapped_area_info {
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
-};
-
-struct vmemmap_backing {
-	struct vmemmap_backing *list;
-	long unsigned int phys;
-	long unsigned int virt_addr;
-};
-
-struct prtb_entry {
-	__be64 prtb0;
-	__be64 prtb1;
-};
-
-struct patb_entry {
-	__be64 patb0;
-	__be64 patb1;
-};
-
-enum {
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
-};
-
-struct of_drconf_cell_v1 {
-	__be64 base_addr;
-	__be32 drc_index;
-	__be32 reserved;
-	__be32 aa_index;
-	__be32 flags;
-};
-
-struct of_drconf_cell_v2 {
-	u32 seq_lmbs;
-	u64 base_addr;
-	u32 drc_index;
-	u32 aa_index;
-	u32 flags;
-} __attribute__((packed));
-
-typedef long unsigned int pte_basic_t;
-
-struct trace_event_raw_hugepage_invalidate {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int pte;
-	char __data[0];
-};
-
-struct trace_event_raw_hugepage_set_pmd {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int pmd;
-	char __data[0];
-};
-
-struct trace_event_raw_hugepage_update {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int pte;
-	long unsigned int clr;
-	long unsigned int set;
-	char __data[0];
-};
-
-struct trace_event_raw_hugepage_splitting {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int pte;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_hugepage_invalidate {};
-
-struct trace_event_data_offsets_hugepage_set_pmd {};
-
-struct trace_event_data_offsets_hugepage_update {};
-
-struct trace_event_data_offsets_hugepage_splitting {};
-
-typedef void (*btf_trace_hugepage_invalidate)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_hugepage_splitting)(void *, long unsigned int, long unsigned int);
-
-struct mmu_hash_ops {
-	void (*hpte_invalidate)(long unsigned int, long unsigned int, int, int, int, int);
-	long int (*hpte_updatepp)(long unsigned int, long unsigned int, long unsigned int, int, int, int, long unsigned int);
-	void (*hpte_updateboltedpp)(long unsigned int, long unsigned int, int, int);
-	long int (*hpte_insert)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int, int);
-	long int (*hpte_remove)(long unsigned int);
-	int (*hpte_removebolted)(long unsigned int, int, int);
-	void (*flush_hash_range)(long unsigned int, int);
-	void (*hugepage_invalidate)(long unsigned int, long unsigned int, unsigned char *, int, int, int);
-	int (*resize_hpt)(long unsigned int);
-	void (*hpte_clear_all)();
-};
-
-struct hash_pte {
-	__be64 v;
-	__be64 r;
-};
-
-enum slb_index {
-	LINEAR_INDEX = 0,
-	KSTACK_INDEX = 1,
-};
-
-typedef unsigned int xa_mark_t;
-
-enum xa_lock_type {
-	XA_LOCK_IRQ = 1,
-	XA_LOCK_BH = 2,
-};
-
-struct ida {
-	struct xarray xa;
-};
-
-enum pgtable_index {
-	PTE_INDEX = 0,
-	PMD_INDEX = 1,
-	PUD_INDEX = 2,
-	PGD_INDEX = 3,
-	HTLB_16M_INDEX = 4,
-	HTLB_16G_INDEX = 5,
-};
-
-struct mmu_table_batch {
-	struct callback_head rcu;
-	unsigned int nr;
-	void *tables[0];
-};
-
-struct mmu_gather_batch {
-	struct mmu_gather_batch *next;
-	unsigned int nr;
-	unsigned int max;
-	struct page *pages[0];
-};
-
-struct mmu_gather {
-	struct mm_struct *mm;
-	struct mmu_table_batch *batch;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int fullmm: 1;
-	unsigned int need_flush_all: 1;
-	unsigned int freed_tables: 1;
-	unsigned int cleared_ptes: 1;
-	unsigned int cleared_pmds: 1;
-	unsigned int cleared_puds: 1;
-	unsigned int cleared_p4ds: 1;
-	unsigned int vma_exec: 1;
-	unsigned int vma_huge: 1;
-	unsigned int batch_count;
-	struct mmu_gather_batch *active;
-	struct mmu_gather_batch local;
-	struct page *__pages[8];
-	unsigned int page_size;
-};
-
-enum string_size_units {
-	STRING_UNITS_10 = 0,
-	STRING_UNITS_2 = 1,
-};
-
-struct tlbiel_pid {
-	long unsigned int pid;
-	long unsigned int ric;
-};
-
-struct tlbiel_va {
-	long unsigned int pid;
-	long unsigned int va;
-	long unsigned int psize;
-	long unsigned int ric;
-};
-
-struct tlbiel_va_range {
-	long unsigned int pid;
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int page_size;
-	long unsigned int psize;
-	bool also_pwc;
-};
-
-enum migrate_reason {
-	MR_COMPACTION = 0,
-	MR_MEMORY_FAILURE = 1,
-	MR_MEMORY_HOTPLUG = 2,
-	MR_SYSCALL = 3,
-	MR_MEMPOLICY_MBIND = 4,
-	MR_NUMA_MISPLACED = 5,
-	MR_CONTIG_RANGE = 6,
-	MR_TYPES = 7,
-};
-
-struct mm_iommu_table_group_mem_t {
-	struct list_head next;
-	struct callback_head rcu;
-	long unsigned int used;
-	atomic64_t mapped;
-	unsigned int pageshift;
-	u64 ua;
-	u64 entries;
-	union {
-		struct page **hpages;
-		phys_addr_t *hpas;
-	};
-	u64 dev_hpa;
-};
-
-struct assoc_arrays {
-	u32 n_arrays;
-	u32 array_sz;
-	const __be32 *arrays;
-};
-
-struct huge_bootmem_page {
-	struct list_head list;
-	struct hstate *hstate;
-};
-
-struct copro_slb {
-	u64 esid;
-	u64 vsid;
-};
-
-enum spu_utilization_state {
-	SPU_UTIL_USER = 0,
-	SPU_UTIL_SYSTEM = 1,
-	SPU_UTIL_IOWAIT = 2,
-	SPU_UTIL_IDLE_LOADED = 3,
-	SPU_UTIL_MAX = 4,
-};
-
-struct fixup_entry {
-	long unsigned int mask;
-	long unsigned int value;
-	long int start_off;
-	long int end_off;
-	long int alt_start_off;
-	long int alt_end_off;
-};
-
-union vsx_reg {
-	u8 b[16];
-	u16 h[8];
-	u32 w[4];
-	long unsigned int d[2];
-	float fp[4];
-	double dp[2];
-	__vector128 v;
-};
-
-typedef signed char unative_t[16];
-
-enum {
-	IRQ_SET_MASK_OK = 0,
-	IRQ_SET_MASK_OK_NOCOPY = 1,
-	IRQ_SET_MASK_OK_DONE = 2,
-};
-
-enum {
-	IRQCHIP_SET_TYPE_MASKED = 1,
-	IRQCHIP_EOI_IF_HANDLED = 2,
-	IRQCHIP_MASK_ON_SUSPEND = 4,
-	IRQCHIP_ONOFFLINE_ENABLED = 8,
-	IRQCHIP_SKIP_SET_WAKE = 16,
-	IRQCHIP_ONESHOT_SAFE = 32,
-	IRQCHIP_EOI_THREADED = 64,
-	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
-	IRQCHIP_SUPPORTS_NMI = 256,
-	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
-};
-
-struct syscore_ops {
-	struct list_head node;
-	int (*suspend)();
-	void (*resume)();
-	void (*shutdown)();
-};
-
-struct msi_bitmap {
-	struct device_node *of_node;
-	long unsigned int *bitmap;
-	spinlock_t lock;
-	unsigned int irq_count;
-	bool bitmap_from_slab;
-};
-
-enum mpic_reg_type {
-	mpic_access_mmio_le = 0,
-	mpic_access_mmio_be = 1,
-};
-
-struct mpic_reg_bank {
-	u32 *base;
-};
-
-struct mpic_irq_save {
-	u32 vecprio;
-	u32 dest;
-};
-
-struct mpic {
-	struct device_node *node;
-	struct irq_domain *irqhost;
-	struct irq_chip hc_irq;
-	struct irq_chip hc_ipi;
-	struct irq_chip hc_tm;
-	struct irq_chip hc_err;
-	const char *name;
-	unsigned int flags;
-	unsigned int isu_size;
-	unsigned int isu_shift;
-	unsigned int isu_mask;
-	unsigned int num_sources;
-	unsigned int ipi_vecs[4];
-	unsigned int timer_vecs[8];
-	unsigned int err_int_vecs[32];
-	unsigned int spurious_vec;
-	enum mpic_reg_type reg_type;
-	phys_addr_t paddr;
-	struct mpic_reg_bank thiscpuregs;
-	struct mpic_reg_bank gregs;
-	struct mpic_reg_bank tmregs;
-	struct mpic_reg_bank cpuregs[32];
-	struct mpic_reg_bank isus[32];
-	u32 *err_regs;
-	long unsigned int *protected;
-	struct msi_bitmap msi_bitmap;
-	struct mpic *next;
-	struct mpic_irq_save *save_data;
-};
-
-struct icp_ops {
-	unsigned int (*get_irq)();
-	void (*eoi)(struct irq_data *);
-	void (*set_priority)(unsigned char);
-	void (*teardown_cpu)();
-	void (*flush_ipi)();
-	void (*cause_ipi)(int);
-	irq_handler_t ipi_action;
-};
-
-struct ics {
-	struct list_head link;
-	int (*map)(struct ics *, unsigned int);
-	void (*mask_unknown)(struct ics *, long unsigned int);
-	long int (*get_server)(struct ics *, long unsigned int);
-	int (*host_match)(struct ics *, struct device_node *);
-	char data[0];
-};
-
-struct xics_cppr {
-	unsigned char stack[3];
-	int index;
-};
-
-struct icp_ipl {
-	union {
-		u32 word;
-		u8 bytes[4];
-	} xirr_poll;
-	union {
-		u32 word;
-		u8 bytes[4];
-	} xirr;
-	u32 dummy;
-	union {
-		u32 word;
-		u8 bytes[4];
-	} qirr;
-	u32 link_a;
-	u32 link_b;
-	u32 link_c;
-};
-
-typedef s8 int8_t;
-
-typedef s16 int16_t;
-
-typedef s64 int64_t;
-
-struct xive_irq_data {
-	u64 flags;
-	u64 eoi_page;
-	void *eoi_mmio;
-	u64 trig_page;
-	void *trig_mmio;
-	u32 esb_shift;
-	int src_chip;
-	u32 hw_irq;
-	int target;
-	bool saved_p;
-	bool stale_p;
-};
-
-struct xive_q {
-	__be32 *qpage;
-	u32 msk;
-	u32 idx;
-	u32 toggle;
-	u64 eoi_phys;
-	u32 esc_irq;
-	atomic_t count;
-	atomic_t pending_count;
-	u64 guest_qaddr;
-	u32 guest_qshift;
-};
-
-struct xive_cpu {
-	u32 hw_ipi;
-	struct xive_irq_data ipi_data;
-	int chip_id;
-	struct xive_q queue[8];
-	u8 pending_prio;
-	u8 cppr;
-};
-
-struct xive_ops {
-	int (*populate_irq_data)(u32, struct xive_irq_data *);
-	int (*configure_irq)(u32, u32, u8, u32);
-	int (*get_irq_config)(u32, u32 *, u8 *, u32 *);
-	int (*setup_queue)(unsigned int, struct xive_cpu *, u8);
-	void (*cleanup_queue)(unsigned int, struct xive_cpu *, u8);
-	void (*setup_cpu)(unsigned int, struct xive_cpu *);
-	void (*teardown_cpu)(unsigned int, struct xive_cpu *);
-	bool (*match)(struct device_node *);
-	void (*shutdown)();
-	void (*update_pending)(struct xive_cpu *);
-	void (*eoi)(u32);
-	void (*sync_source)(u32);
-	u64 (*esb_rw)(u32, u32, u64, bool);
-	int (*get_ipi)(unsigned int, struct xive_cpu *);
-	void (*put_ipi)(unsigned int, struct xive_cpu *);
-	int (*debug_show)(struct seq_file *, void *);
-	const char *name;
-};
-
-enum {
-	OPAL_XIVE_MODE_EMU = 0,
-	OPAL_XIVE_MODE_EXPL = 1,
-};
-
-enum {
-	OPAL_XIVE_IRQ_TRIGGER_PAGE = 1,
-	OPAL_XIVE_IRQ_STORE_EOI = 2,
-	OPAL_XIVE_IRQ_LSI = 4,
-	OPAL_XIVE_IRQ_SHIFT_BUG = 8,
-	OPAL_XIVE_IRQ_MASK_VIA_FW = 16,
-	OPAL_XIVE_IRQ_EOI_VIA_FW = 32,
-};
-
-enum {
-	OPAL_XIVE_EQ_ENABLED = 1,
-	OPAL_XIVE_EQ_ALWAYS_NOTIFY = 2,
-	OPAL_XIVE_EQ_ESCALATE = 4,
-};
-
-enum {
-	OPAL_XIVE_VP_ENABLED = 1,
-	OPAL_XIVE_VP_SINGLE_ESCALATION = 2,
-};
-
-enum {
-	XIVE_SYNC_EAS = 1,
-	XIVE_SYNC_QUEUE = 2,
-};
-
-struct xive_irq_bitmap {
-	long unsigned int *bitmap;
-	unsigned int base;
-	unsigned int count;
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct plist_head {
-	struct list_head node_list;
-};
-
-enum pm_qos_type {
-	PM_QOS_UNITIALIZED = 0,
-	PM_QOS_MAX = 1,
-	PM_QOS_MIN = 2,
-};
-
-struct pm_qos_constraints {
-	struct plist_head list;
-	s32 target_value;
-	s32 default_value;
-	s32 no_constraint_value;
-	enum pm_qos_type type;
-	struct blocking_notifier_head *notifiers;
-};
-
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
-};
-
-struct pm_qos_flags {
-	struct list_head list;
-	s32 effective_flags;
-};
-
-struct dev_pm_qos_request;
-
-struct dev_pm_qos {
-	struct pm_qos_constraints resume_latency;
-	struct pm_qos_constraints latency_tolerance;
-	struct freq_constraints freq;
-	struct pm_qos_flags flags;
-	struct dev_pm_qos_request *resume_latency_req;
-	struct dev_pm_qos_request *latency_tolerance_req;
-	struct dev_pm_qos_request *flags_req;
-};
-
-struct pm_qos_flags_request {
-	struct list_head node;
-	s32 flags;
-};
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX = 2,
-};
-
-struct freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
-	DEV_PM_QOS_MIN_FREQUENCY = 3,
-	DEV_PM_QOS_MAX_FREQUENCY = 4,
-	DEV_PM_QOS_FLAGS = 5,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-		struct freq_qos_request freq;
-	} data;
-	struct device *dev;
-};
-
-enum OpalThreadStatus {
-	OPAL_THREAD_INACTIVE = 0,
-	OPAL_THREAD_STARTED = 1,
-	OPAL_THREAD_UNAVAILABLE = 2,
-};
-
-enum {
-	OPAL_REINIT_CPUS_HILE_BE = 1,
-	OPAL_REINIT_CPUS_HILE_LE = 2,
-	OPAL_REINIT_CPUS_MMU_HASH = 4,
-	OPAL_REINIT_CPUS_MMU_RADIX = 8,
-	OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED = 16,
-};
-
-enum {
-	OPAL_REBOOT_NORMAL = 0,
-	OPAL_REBOOT_PLATFORM_ERROR = 1,
-	OPAL_REBOOT_FULL_IPL = 2,
-	OPAL_REBOOT_MPIPL = 3,
-	OPAL_REBOOT_FAST = 4,
-};
-
-enum OpalPendingState {
-	OPAL_EVENT_OPAL_INTERNAL = 1,
-	OPAL_EVENT_NVRAM = 2,
-	OPAL_EVENT_RTC = 4,
-	OPAL_EVENT_CONSOLE_OUTPUT = 8,
-	OPAL_EVENT_CONSOLE_INPUT = 16,
-	OPAL_EVENT_ERROR_LOG_AVAIL = 32,
-	OPAL_EVENT_ERROR_LOG = 64,
-	OPAL_EVENT_EPOW = 128,
-	OPAL_EVENT_LED_STATUS = 256,
-	OPAL_EVENT_PCI_ERROR = 512,
-	OPAL_EVENT_DUMP_AVAIL = 1024,
-	OPAL_EVENT_MSG_PENDING = 2048,
-};
-
-enum opal_msg_type {
-	OPAL_MSG_ASYNC_COMP = 0,
-	OPAL_MSG_MEM_ERR = 1,
-	OPAL_MSG_EPOW = 2,
-	OPAL_MSG_SHUTDOWN = 3,
-	OPAL_MSG_HMI_EVT = 4,
-	OPAL_MSG_DPO = 5,
-	OPAL_MSG_PRD = 6,
-	OPAL_MSG_OCC = 7,
-	OPAL_MSG_PRD2 = 8,
-	OPAL_MSG_TYPE_MAX = 9,
-};
-
-struct opal_msg {
-	__be32 msg_type;
-	__be32 reserved;
-	__be64 params[8];
-};
-
-enum {
-	OPAL_HMI_FLAGS_TB_RESYNC = 1,
-	OPAL_HMI_FLAGS_DEC_LOST = 2,
-	OPAL_HMI_FLAGS_HDEC_LOST = 4,
-	OPAL_HMI_FLAGS_TOD_TB_FAIL = 8,
-	OPAL_HMI_FLAGS_NEW_EVENT = 0,
-};
-
-struct opal_sg_entry {
-	__be64 data;
-	__be64 length;
-};
-
-struct opal_sg_list {
-	__be64 length;
-	__be64 next;
-	struct opal_sg_entry entry[0];
-};
-
-struct opal_msg_node {
-	struct list_head list;
-	struct opal_msg msg;
-};
-
-struct opal {
-	u64 base;
-	u64 entry;
-	u64 size;
-};
-
-struct mcheck_recoverable_range {
-	u64 start_addr;
-	u64 end_addr;
-	u64 recover_addr;
-};
-
-enum opal_async_token_state {
-	ASYNC_TOKEN_UNALLOCATED = 0,
-	ASYNC_TOKEN_ALLOCATED = 1,
-	ASYNC_TOKEN_DISPATCHED = 2,
-	ASYNC_TOKEN_ABANDONED = 3,
-	ASYNC_TOKEN_COMPLETED = 4,
-};
-
-struct opal_async_token {
-	enum opal_async_token_state state;
-	struct opal_msg response;
-};
-
-struct pnv_idle_states_t {
-	char name[16];
-	u32 latency_ns;
-	u32 residency_ns;
-	u64 psscr_val;
-	u64 psscr_mask;
-	u32 flags;
-	bool valid;
-};
-
-struct p7_sprs {
-	u64 tscr;
-	u64 worc;
-	u64 sdr1;
-	u64 rpr;
-	u64 lpcr;
-	u64 hfscr;
-	u64 fscr;
-	u64 purr;
-	u64 spurr;
-	u64 dscr;
-	u64 wort;
-	u64 amr;
-	u64 iamr;
-	u64 amor;
-	u64 uamor;
-};
-
-struct p9_sprs {
-	u64 ptcr;
-	u64 rpr;
-	u64 tscr;
-	u64 ldbar;
-	u64 lpcr;
-	u64 hfscr;
-	u64 fscr;
-	u64 pid;
-	u64 purr;
-	u64 spurr;
-	u64 dscr;
-	u64 wort;
-	u64 mmcra;
-	u32 mmcr0;
-	u32 mmcr1;
-	u64 mmcr2;
-	u64 amr;
-	u64 iamr;
-	u64 amor;
-	u64 uamor;
-};
-
-enum OpalLPCAddressType {
-	OPAL_LPC_MEM = 0,
-	OPAL_LPC_IO = 1,
-	OPAL_LPC_FW = 2,
-};
-
-struct lpc_debugfs_entry {
-	enum OpalLPCAddressType lpc_type;
-};
-
-enum {
-	IMAGE_INVALID = 0,
-	IMAGE_LOADING = 1,
-	IMAGE_READY = 2,
-};
-
-struct image_data_t {
-	int status;
-	void *data;
-	uint32_t size;
-};
-
-struct image_header_t {
-	uint16_t magic;
-	uint16_t version;
-	uint32_t size;
-};
-
-struct validate_flash_t {
-	int status;
-	void *buf;
-	uint32_t buf_size;
-	uint32_t result;
-};
-
-struct manage_flash_t {
-	int status;
-};
-
-struct update_flash_t {
-	int status;
-};
-
-struct powernv_rng {
-	void *regs;
-	void *regs_real;
-	long unsigned int mask;
-};
-
-enum kobject_action {
-	KOBJ_ADD = 0,
-	KOBJ_REMOVE = 1,
-	KOBJ_CHANGE = 2,
-	KOBJ_MOVE = 3,
-	KOBJ_ONLINE = 4,
-	KOBJ_OFFLINE = 5,
-	KOBJ_BIND = 6,
-	KOBJ_UNBIND = 7,
-};
-
-struct elog_obj {
-	struct kobject kobj;
-	struct bin_attribute raw_attr;
-	uint64_t id;
-	uint64_t type;
-	size_t size;
-	char *buffer;
-};
-
-struct elog_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct elog_obj *, struct elog_attribute *, char *);
-	ssize_t (*store)(struct elog_obj *, struct elog_attribute *, const char *, size_t);
-};
-
-struct dump_obj {
-	struct kobject kobj;
-	struct bin_attribute dump_attr;
-	uint32_t id;
-	uint32_t type;
-	uint32_t size;
-	char *buffer;
-};
-
-struct dump_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct dump_obj *, struct dump_attribute *, char *);
-	ssize_t (*store)(struct dump_obj *, struct dump_attribute *, const char *, size_t);
-};
-
-enum OpalSysparamPerm {
-	OPAL_SYSPARAM_READ = 1,
-	OPAL_SYSPARAM_WRITE = 2,
-	OPAL_SYSPARAM_RW = 3,
-};
-
-struct param_attr {
-	struct list_head list;
-	u32 param_id;
-	u32 param_size;
-	struct kobj_attribute kobj_attr;
-};
-
-struct memcons {
-	__be64 magic;
-	__be64 obuf_phys;
-	__be64 ibuf_phys;
-	__be32 obuf_size;
-	__be32 ibuf_size;
-	__be32 out_pos;
-	__be32 in_prod;
-	__be32 in_cons;
-};
-
-enum OpalHMI_Version {
-	OpalHMIEvt_V1 = 1,
-	OpalHMIEvt_V2 = 2,
-};
-
-enum OpalHMI_Severity {
-	OpalHMI_SEV_NO_ERROR = 0,
-	OpalHMI_SEV_WARNING = 1,
-	OpalHMI_SEV_ERROR_SYNC = 2,
-	OpalHMI_SEV_FATAL = 3,
-};
-
-enum OpalHMI_Disposition {
-	OpalHMI_DISPOSITION_RECOVERED = 0,
-	OpalHMI_DISPOSITION_NOT_RECOVERED = 1,
-};
-
-enum OpalHMI_ErrType {
-	OpalHMI_ERROR_MALFUNC_ALERT = 0,
-	OpalHMI_ERROR_PROC_RECOV_DONE = 1,
-	OpalHMI_ERROR_PROC_RECOV_DONE_AGAIN = 2,
-	OpalHMI_ERROR_PROC_RECOV_MASKED = 3,
-	OpalHMI_ERROR_TFAC = 4,
-	OpalHMI_ERROR_TFMR_PARITY = 5,
-	OpalHMI_ERROR_HA_OVERFLOW_WARN = 6,
-	OpalHMI_ERROR_XSCOM_FAIL = 7,
-	OpalHMI_ERROR_XSCOM_DONE = 8,
-	OpalHMI_ERROR_SCOM_FIR = 9,
-	OpalHMI_ERROR_DEBUG_TRIG_FIR = 10,
-	OpalHMI_ERROR_HYP_RESOURCE = 11,
-	OpalHMI_ERROR_CAPP_RECOVERY = 12,
-};
-
-enum OpalHMI_XstopType {
-	CHECKSTOP_TYPE_UNKNOWN = 0,
-	CHECKSTOP_TYPE_CORE = 1,
-	CHECKSTOP_TYPE_NX = 2,
-	CHECKSTOP_TYPE_NPU = 3,
-};
-
-enum OpalHMI_CoreXstopReason {
-	CORE_CHECKSTOP_IFU_REGFILE = 1,
-	CORE_CHECKSTOP_IFU_LOGIC = 2,
-	CORE_CHECKSTOP_PC_DURING_RECOV = 4,
-	CORE_CHECKSTOP_ISU_REGFILE = 8,
-	CORE_CHECKSTOP_ISU_LOGIC = 16,
-	CORE_CHECKSTOP_FXU_LOGIC = 32,
-	CORE_CHECKSTOP_VSU_LOGIC = 64,
-	CORE_CHECKSTOP_PC_RECOV_IN_MAINT_MODE = 128,
-	CORE_CHECKSTOP_LSU_REGFILE = 256,
-	CORE_CHECKSTOP_PC_FWD_PROGRESS = 512,
-	CORE_CHECKSTOP_LSU_LOGIC = 1024,
-	CORE_CHECKSTOP_PC_LOGIC = 2048,
-	CORE_CHECKSTOP_PC_HYP_RESOURCE = 4096,
-	CORE_CHECKSTOP_PC_HANG_RECOV_FAILED = 8192,
-	CORE_CHECKSTOP_PC_AMBI_HANG_DETECTED = 16384,
-	CORE_CHECKSTOP_PC_DEBUG_TRIG_ERR_INJ = 32768,
-	CORE_CHECKSTOP_PC_SPRD_HYP_ERR_INJ = 65536,
-};
-
-enum OpalHMI_NestAccelXstopReason {
-	NX_CHECKSTOP_SHM_INVAL_STATE_ERR = 1,
-	NX_CHECKSTOP_DMA_INVAL_STATE_ERR_1 = 2,
-	NX_CHECKSTOP_DMA_INVAL_STATE_ERR_2 = 4,
-	NX_CHECKSTOP_DMA_CH0_INVAL_STATE_ERR = 8,
-	NX_CHECKSTOP_DMA_CH1_INVAL_STATE_ERR = 16,
-	NX_CHECKSTOP_DMA_CH2_INVAL_STATE_ERR = 32,
-	NX_CHECKSTOP_DMA_CH3_INVAL_STATE_ERR = 64,
-	NX_CHECKSTOP_DMA_CH4_INVAL_STATE_ERR = 128,
-	NX_CHECKSTOP_DMA_CH5_INVAL_STATE_ERR = 256,
-	NX_CHECKSTOP_DMA_CH6_INVAL_STATE_ERR = 512,
-	NX_CHECKSTOP_DMA_CH7_INVAL_STATE_ERR = 1024,
-	NX_CHECKSTOP_DMA_CRB_UE = 2048,
-	NX_CHECKSTOP_DMA_CRB_SUE = 4096,
-	NX_CHECKSTOP_PBI_ISN_UE = 8192,
-};
-
-struct OpalHMIEvent {
-	uint8_t version;
-	uint8_t severity;
-	uint8_t type;
-	uint8_t disposition;
-	uint8_t reserved_1[4];
-	__be64 hmer;
-	__be64 tfmr;
-	union {
-		struct {
-			uint8_t xstop_type;
-			uint8_t reserved_1[3];
-			__be32 xstop_reason;
-			union {
-				__be32 pir;
-				__be32 chip_id;
-			} u;
-		} xstop_error;
-	} u;
-};
-
-struct OpalHmiEvtNode {
-	struct list_head list;
-	struct OpalHMIEvent hmi_evt;
-};
-
-struct xstop_reason {
-	uint32_t xstop_reason;
-	const char *unit_failed;
-	const char *description;
-};
-
-enum OpalSysEpow {
-	OPAL_SYSEPOW_POWER = 0,
-	OPAL_SYSEPOW_TEMP = 1,
-	OPAL_SYSEPOW_COOLING = 2,
-	OPAL_SYSEPOW_MAX = 3,
-};
-
-enum OpalSysPower {
-	OPAL_SYSPOWER_UPS = 1,
-	OPAL_SYSPOWER_CHNG = 2,
-	OPAL_SYSPOWER_FAIL = 4,
-	OPAL_SYSPOWER_INCL = 8,
-};
-
-struct opal_event_irqchip {
-	struct irq_chip irqchip;
-	struct irq_domain *domain;
-	long unsigned int mask;
-};
-
-struct powercap_attr {
-	u32 handle;
-	struct kobj_attribute attr;
-};
-
-struct pcap {
-	struct attribute_group pg;
-	struct powercap_attr *pattrs;
-};
-
-struct psr_attr {
-	u32 handle;
-	struct kobj_attribute attr;
-};
-
-struct sg_attr {
-	u32 handle;
-	struct kobj_attribute attr;
-};
-
-struct sensor_group {
-	char name[20];
-	struct attribute_group sg;
-	struct sg_attr *sgattrs;
-};
-
-struct sg_ops_info {
-	int opal_no;
-	const char *attr_name;
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
-};
-
-struct memcons___2;
-
-struct split_state {
-	u8 step;
-	u8 master;
+	int (*reset_slot)(struct hotplug_slot *, bool);
 };
 
 enum OpalFreezeState {
@@ -20891,33 +39305,26 @@
 enum pnv_phb_type {
 	PNV_PHB_IODA1 = 0,
 	PNV_PHB_IODA2 = 1,
-	PNV_PHB_NPU_NVLINK = 2,
-	PNV_PHB_NPU_OCAPI = 3,
+	PNV_PHB_NPU_OCAPI = 2,
 };
 
 enum pnv_phb_model {
 	PNV_PHB_MODEL_UNKNOWN = 0,
 	PNV_PHB_MODEL_P7IOC = 1,
 	PNV_PHB_MODEL_PHB3 = 2,
-	PNV_PHB_MODEL_NPU = 3,
-	PNV_PHB_MODEL_NPU2 = 4,
 };
 
 struct pnv_phb;
 
-struct npu_comp;
-
 struct pnv_ioda_pe {
 	long unsigned int flags;
 	struct pnv_phb *phb;
 	int device_count;
-	struct pci_dev *parent_dev;
 	struct pci_dev *pdev;
 	struct pci_bus *pbus;
 	unsigned int rid;
 	unsigned int pe_number;
 	struct iommu_table_group table_group;
-	struct npu_comp *npucomp;
 	bool tce_bypass_enabled;
 	uint64_t tce_bypass_base;
 	bool dma_setup_done;
@@ -20936,14 +39343,11 @@
 	int flags;
 	void *regs;
 	u64 regs_phys;
-	int initialized;
 	spinlock_t lock;
 	int has_dbgfs;
 	struct dentry *dbgfs;
 	unsigned int msi_base;
-	unsigned int msi32_support;
 	struct msi_bitmap msi_bmp;
-	int (*msi_setup)(struct pnv_phb *, struct pci_dev *, unsigned int, unsigned int, unsigned int, struct msi_msg *);
 	int (*init_m64)(struct pnv_phb *);
 	int (*get_pe_state)(struct pnv_phb *, int);
 	void (*freeze_pe)(struct pnv_phb *, int);
@@ -20981,502 +39385,9817 @@
 	u8 *diag_data;
 };
 
-struct va_format {
-	const char *fmt;
-	va_list *va;
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct class *, struct class_attribute *, char *);
+	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
 };
 
-enum OpalMmioWindowType {
-	OPAL_M32_WINDOW_TYPE = 1,
-	OPAL_M64_WINDOW_TYPE = 2,
-	OPAL_IO_WINDOW_TYPE = 3,
-};
-
-enum OpalPciBusCompare {
-	OpalPciBusAny = 0,
-	OpalPciBus3Bits = 2,
-	OpalPciBus4Bits = 3,
-	OpalPciBus5Bits = 4,
-	OpalPciBus6Bits = 5,
-	OpalPciBus7Bits = 6,
-	OpalPciBusAll = 7,
-};
-
-enum OpalDeviceCompare {
-	OPAL_IGNORE_RID_DEVICE_NUMBER = 0,
-	OPAL_COMPARE_RID_DEVICE_NUMBER = 1,
-};
-
-enum OpalFuncCompare {
-	OPAL_IGNORE_RID_FUNCTION_NUMBER = 0,
-	OPAL_COMPARE_RID_FUNCTION_NUMBER = 1,
-};
-
-enum OpalPeAction {
-	OPAL_UNMAP_PE = 0,
-	OPAL_MAP_PE = 1,
-};
-
-enum OpalPeltvAction {
-	OPAL_REMOVE_PE_FROM_DOMAIN = 0,
-	OPAL_ADD_PE_TO_DOMAIN = 1,
-};
-
-enum OpalMveEnableAction {
-	OPAL_DISABLE_MVE = 0,
-	OPAL_ENABLE_MVE = 1,
-};
-
-enum OpalM64Action {
-	OPAL_DISABLE_M64 = 0,
-	OPAL_ENABLE_M64_SPLIT = 1,
-	OPAL_ENABLE_M64_NON_SPLIT = 2,
-};
-
-enum OpalPciResetScope {
-	OPAL_RESET_PHB_COMPLETE = 1,
-	OPAL_RESET_PCI_LINK = 2,
-	OPAL_RESET_PHB_ERROR = 3,
-	OPAL_RESET_PCI_HOT = 4,
-	OPAL_RESET_PCI_FUNDAMENTAL = 5,
-	OPAL_RESET_PCI_IODA_TABLE = 6,
-};
-
-enum OpalPciResetState {
-	OPAL_DEASSERT_RESET = 0,
-	OPAL_ASSERT_RESET = 1,
-};
-
-enum {
-	OPAL_PCI_TCE_KILL_PAGES = 0,
-	OPAL_PCI_TCE_KILL_PE = 1,
-	OPAL_PCI_TCE_KILL_ALL = 2,
-};
-
-struct iommu_table_group_link {
-	struct list_head next;
-	struct callback_head rcu;
-	struct iommu_table_group *table_group;
-};
-
-struct npu_comp {
-	struct iommu_table_group table_group;
-	int pe_num;
-	struct pnv_ioda_pe *pe[16];
-};
-
-struct npu {
-	int index;
-	struct npu_comp npucomp;
-};
-
-typedef void (*rcu_callback_t)(struct callback_head *);
-
-struct pnv_iov_data {
-	u16 num_vfs;
-	struct pnv_ioda_pe *vf_pe_arr;
-	bool m64_single_mode[6];
-	bool need_shift;
-	long unsigned int used_m64_bar_mask[1];
-	struct resource holes[6];
-};
-
-struct cxl_irq_ranges {
-	irq_hw_number_t offset[4];
-	irq_hw_number_t range[4];
-};
-
-enum OpalPciStatusToken {
-	OPAL_EEH_NO_ERROR = 0,
-	OPAL_EEH_IOC_ERROR = 1,
-	OPAL_EEH_PHB_ERROR = 2,
-	OPAL_EEH_PE_ERROR = 3,
-	OPAL_EEH_PE_MMIO_ERROR = 4,
-	OPAL_EEH_PE_DMA_ERROR = 5,
-};
-
-enum OpalPciErrorSeverity {
-	OPAL_EEH_SEV_NO_ERROR = 0,
-	OPAL_EEH_SEV_IOC_DEAD = 1,
-	OPAL_EEH_SEV_PHB_DEAD = 2,
-	OPAL_EEH_SEV_PHB_FENCED = 3,
-	OPAL_EEH_SEV_PE_ER = 4,
-	OPAL_EEH_SEV_INF = 5,
-};
-
-enum OpalErrinjectType {
-	OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR = 0,
-	OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64 = 1,
-};
-
-enum OpalErrinjectFunc {
-	OPAL_ERR_INJECT_FUNC_IOA_LD_MEM_ADDR = 0,
-	OPAL_ERR_INJECT_FUNC_IOA_LD_MEM_DATA = 1,
-	OPAL_ERR_INJECT_FUNC_IOA_LD_IO_ADDR = 2,
-	OPAL_ERR_INJECT_FUNC_IOA_LD_IO_DATA = 3,
-	OPAL_ERR_INJECT_FUNC_IOA_LD_CFG_ADDR = 4,
-	OPAL_ERR_INJECT_FUNC_IOA_LD_CFG_DATA = 5,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_MEM_ADDR = 6,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_MEM_DATA = 7,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_IO_ADDR = 8,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_IO_DATA = 9,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_CFG_ADDR = 10,
-	OPAL_ERR_INJECT_FUNC_IOA_ST_CFG_DATA = 11,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_ADDR = 12,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_DATA = 13,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_MASTER = 14,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_TARGET = 15,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_ADDR = 16,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_DATA = 17,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_MASTER = 18,
-	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_TARGET = 19,
-};
-
-enum OpalPciReinitScope {
-	OPAL_REINIT_PCI_DEV = 1000,
-};
-
-enum {
-	OPAL_P7IOC_DIAG_TYPE_NONE = 0,
-	OPAL_P7IOC_DIAG_TYPE_RGC = 1,
-	OPAL_P7IOC_DIAG_TYPE_BI = 2,
-	OPAL_P7IOC_DIAG_TYPE_CI = 3,
-	OPAL_P7IOC_DIAG_TYPE_MISC = 4,
-	OPAL_P7IOC_DIAG_TYPE_I2C = 5,
-	OPAL_P7IOC_DIAG_TYPE_LAST = 6,
-};
-
-struct OpalIoP7IOCRgcErrorData {
-	__be64 rgcStatus;
-	__be64 rgcLdcp;
-};
-
-struct OpalIoP7IOCBiErrorData {
-	__be64 biLdcp0;
-	__be64 biLdcp1;
-	__be64 biLdcp2;
-	__be64 biFenceStatus;
-	uint8_t biDownbound;
-};
-
-struct OpalIoP7IOCCiErrorData {
-	__be64 ciPortStatus;
-	__be64 ciPortLdcp;
-	uint8_t ciPort;
-};
-
-struct OpalIoP7IOCErrorData {
-	__be16 type;
-	__be64 gemXfir;
-	__be64 gemRfir;
-	__be64 gemRirqfir;
-	__be64 gemMask;
-	__be64 gemRwof;
-	__be64 lemFir;
-	__be64 lemErrMask;
-	__be64 lemAction0;
-	__be64 lemAction1;
-	__be64 lemWof;
+struct pseries_hp_errorlog {
+	u8 resource;
+	u8 action;
+	u8 id_type;
+	u8 reserved;
 	union {
-		struct OpalIoP7IOCRgcErrorData rgc;
-		struct OpalIoP7IOCBiErrorData bi;
-		struct OpalIoP7IOCCiErrorData ci;
+		__be32 drc_index;
+		__be32 drc_count;
+		struct {
+			__be32 count;
+			__be32 index;
+		} ic;
+		char drc_name[1];
+	} _drc_u;
+};
+
+struct pseries_hp_work {
+	struct work_struct work;
+	struct pseries_hp_errorlog *errlog;
+};
+
+struct cc_workarea {
+	__be32 drc_index;
+	__be32 zero;
+	__be32 name_offset;
+	__be32 prop_length;
+	__be32 prop_offset;
+};
+
+struct hvcall_mpp_data {
+	long unsigned int entitled_mem;
+	long unsigned int mapped_mem;
+	short unsigned int group_num;
+	short unsigned int pool_num;
+	unsigned char mem_weight;
+	unsigned char unallocated_mem_weight;
+	long unsigned int unallocated_entitlement;
+	long unsigned int pool_size;
+	long int loan_request;
+	long unsigned int backing_mem;
+};
+
+typedef unsigned int isolate_mode_t;
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
+};
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+struct balloon_dev_info {
+	long unsigned int isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+struct hv_get_perf_counter_info_params {
+	__be32 counter_request;
+	__be32 starting_index;
+	__be16 secondary_index;
+	__be16 returned_values;
+	__be32 detail_rc;
+	__be16 cv_element_size;
+	__u8 counter_info_version_in;
+	__u8 counter_info_version_out;
+	__u8 reserved[12];
+	__u8 counter_value[0];
+};
+
+enum {
+	HV_GPCI_CM_GA = 128,
+	HV_GPCI_CM_EXPANDED = 64,
+	HV_GPCI_CM_LAB = 32,
+};
+
+enum hv_gpci_requests {
+	HV_GPCI_dispatch_timebase_by_processor = 16,
+	HV_GPCI_entitled_capped_uncapped_donated_idle_timebase_by_partition = 32,
+	HV_GPCI_run_instructions_run_cycles_by_partition = 48,
+	HV_GPCI_system_performance_capabilities = 64,
+	HV_GPCI_processor_bus_utilization_abc_links = 80,
+	HV_GPCI_processor_bus_utilization_wxyz_links = 96,
+	HV_GPCI_processor_bus_utilization_gx_links = 112,
+	HV_GPCI_processor_bus_utilization_mc_links = 128,
+	HV_GPCI_processor_core_utilization = 148,
+	HV_GPCI_partition_hypervisor_queuing_times = 224,
+	HV_GPCI_system_hypervisor_times = 240,
+	HV_GPCI_system_tlbie_count_and_time = 244,
+	HV_GPCI_partition_instruction_count_and_time = 256,
+};
+
+struct hv_gpci_system_performance_capabilities {
+	__u8 perf_collect_privileged;
+	__u8 capability_mask;
+	__u8 reserved[14];
+};
+
+struct hv_perf_caps {
+	u16 version;
+	u16 collect_privileged: 1;
+	u16 ga: 1;
+	u16 expanded: 1;
+	u16 lab: 1;
+	u16 unused: 12;
+};
+
+struct p {
+	struct hv_get_perf_counter_info_params params;
+	struct hv_gpci_system_performance_capabilities caps;
+};
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+struct kexec_buf {
+	struct kimage *image;
+	void *buffer;
+	long unsigned int bufsz;
+	long unsigned int mem;
+	long unsigned int memsz;
+	long unsigned int buf_align;
+	long unsigned int buf_min;
+	long unsigned int buf_max;
+	bool top_down;
+};
+
+struct umem_info {
+	u64 *buf;
+	u32 size;
+	u32 max_entries;
+	u32 idx;
+	unsigned int nr_ranges;
+	const struct crash_mem_range *ranges;
+};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+struct mutex_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	struct ww_acquire_ctx *ww_ctx;
+	void *magic;
+};
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+typedef int suspend_state_t;
+
+enum suspend_stat_step {
+	SUSPEND_FREEZE = 1,
+	SUSPEND_PREPARE = 2,
+	SUSPEND_SUSPEND = 3,
+	SUSPEND_SUSPEND_LATE = 4,
+	SUSPEND_SUSPEND_NOIRQ = 5,
+	SUSPEND_RESUME_NOIRQ = 6,
+	SUSPEND_RESUME_EARLY = 7,
+	SUSPEND_RESUME = 8,
+};
+
+struct suspend_stats {
+	int success;
+	int fail;
+	int failed_freeze;
+	int failed_prepare;
+	int failed_suspend;
+	int failed_suspend_late;
+	int failed_suspend_noirq;
+	int failed_resume;
+	int failed_resume_early;
+	int failed_resume_noirq;
+	int last_failed_dev;
+	char failed_devs[80];
+	int last_failed_errno;
+	int errno[2];
+	int last_failed_step;
+	enum suspend_stat_step failed_steps[2];
+};
+
+struct platform_suspend_ops {
+	int (*valid)(suspend_state_t);
+	int (*begin)(suspend_state_t);
+	int (*prepare)();
+	int (*prepare_late)();
+	int (*enter)(suspend_state_t);
+	void (*wake)();
+	void (*finish)();
+	bool (*suspend_again)();
+	void (*end)();
+	void (*recover)();
+};
+
+struct platform_s2idle_ops {
+	int (*begin)();
+	int (*prepare)();
+	int (*prepare_late)();
+	bool (*wake)();
+	void (*restore_early)();
+	void (*restore)();
+	void (*end)();
+};
+
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
+};
+
+enum {
+	TEST_NONE = 0,
+	TEST_CORE = 1,
+	TEST_CPUS = 2,
+	TEST_PLATFORM = 3,
+	TEST_DEVICES = 4,
+	TEST_FREEZER = 5,
+	__TEST_AFTER_LAST = 6,
+};
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 2048,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+struct _ddebug;
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	long unsigned int len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	long unsigned int symoffs;
+	long unsigned int stroffs;
+	long unsigned int init_typeoffs;
+	long unsigned int core_typeoffs;
+	struct _ddebug *debug;
+	unsigned int num_debug;
+	bool sig_ok;
+	long unsigned int mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_ARCHTIMER = 1,
+	VDSO_CLOCKMODE_MAX = 2,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	long unsigned int flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct module *owner;
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+struct clock_event_device;
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(long unsigned int, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	long unsigned int retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	long unsigned int min_delta_ticks;
+	long unsigned int max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {
+	unsigned int __softirq_pending;
+	unsigned int timer_irqs_event;
+	unsigned int broadcast_irqs_event;
+	unsigned int timer_irqs_others;
+	unsigned int pmu_irqs;
+	unsigned int mce_exceptions;
+	unsigned int spurious_irqs;
+	unsigned int sreset_irqs;
+	unsigned int soft_nmi_irqs;
+	unsigned int doorbell_irqs;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+} irq_cpustat_t;
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_sched {
+	struct hrtimer sched_timer;
+	long unsigned int check_clocks;
+	enum tick_nohz_mode nohz_mode;
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	long unsigned int idle_jiffies;
+	long unsigned int idle_calls;
+	long unsigned int idle_sleeps;
+	ktime_t idle_entrytime;
+	ktime_t idle_waketime;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	long unsigned int last_jiffies;
+	u64 timer_expires;
+	u64 timer_expires_base;
+	u64 next_timer;
+	ktime_t idle_expires;
+	atomic_t tick_dep_mask;
+	long unsigned int last_tick_jiffies;
+	unsigned int stalled_jiffies;
+};
+
+typedef u32 note_buf_t[134];
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct crypto_shash;
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	struct crypto_tfm base;
+};
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	unsigned int descsize;
+	long: 0;
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct kexec_sha_region {
+	long unsigned int start;
+	long unsigned int len;
+};
+
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	long unsigned int caller[8];
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	long unsigned int caller[8];
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	char buf[0];
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *str;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+struct trace_mark {
+	long long unsigned int val;
+	char sym;
+};
+
+enum {
+	FTRACE_OPS_FL_ENABLED = 1,
+	FTRACE_OPS_FL_DYNAMIC = 2,
+	FTRACE_OPS_FL_SAVE_REGS = 4,
+	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
+	FTRACE_OPS_FL_RECURSION = 16,
+	FTRACE_OPS_FL_STUB = 32,
+	FTRACE_OPS_FL_INITIALIZED = 64,
+	FTRACE_OPS_FL_DELETED = 128,
+	FTRACE_OPS_FL_ADDING = 256,
+	FTRACE_OPS_FL_REMOVING = 512,
+	FTRACE_OPS_FL_MODIFYING = 1024,
+	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
+	FTRACE_OPS_FL_IPMODIFY = 4096,
+	FTRACE_OPS_FL_PID = 8192,
+	FTRACE_OPS_FL_RCU = 16384,
+	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
+	FTRACE_OPS_FL_PERMANENT = 65536,
+	FTRACE_OPS_FL_DIRECT = 131072,
+};
+
+enum {
+	FTRACE_UPDATE_CALLS = 1,
+	FTRACE_DISABLE_CALLS = 2,
+	FTRACE_UPDATE_TRACE_FUNC = 4,
+	FTRACE_START_FUNC_RET = 8,
+	FTRACE_STOP_FUNC_RET = 16,
+	FTRACE_MAY_SLEEP = 32,
+};
+
+enum bpf_task_fd_type {
+	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
+	BPF_FD_TYPE_TRACEPOINT = 1,
+	BPF_FD_TYPE_KPROBE = 2,
+	BPF_FD_TYPE_KRETPROBE = 3,
+	BPF_FD_TYPE_UPROBE = 4,
+	BPF_FD_TYPE_URETPROBE = 5,
+};
+
+enum uprobe_filter_ctx {
+	UPROBE_FILTER_REGISTER = 0,
+	UPROBE_FILTER_UNREGISTER = 1,
+	UPROBE_FILTER_MMAP = 2,
+};
+
+struct uprobe_consumer {
+	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
+	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
+	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+	struct uprobe_consumer *next;
+};
+
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_MOD_BF = 17,
+	FETCH_OP_LP_ARRAY = 18,
+	FETCH_OP_TP_ARG = 19,
+	FETCH_OP_END = 20,
+	FETCH_NOP_SYMBOL = 21,
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		long unsigned int immediate;
+		void *data;
 	};
 };
 
-enum OpalMemErr_Version {
-	OpalMemErr_V1 = 1,
+struct fetch_type {
+	const char *name;
+	size_t size;
+	int is_signed;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
 };
 
-enum OpalMemErrType {
-	OPAL_MEM_ERR_TYPE_RESILIENCE = 0,
-	OPAL_MEM_ERR_TYPE_DYN_DALLOC = 1,
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
 };
 
-enum OpalMemErr_ResilErrType {
-	OPAL_MEM_RESILIENCE_CE = 0,
-	OPAL_MEM_RESILIENCE_UE = 1,
-	OPAL_MEM_RESILIENCE_UE_SCRUB = 2,
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
 };
 
-enum OpalMemErr_DynErrType {
-	OPAL_MEM_DYNAMIC_DEALLOC = 0,
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
 };
 
-struct OpalMemoryErrorData {
-	enum OpalMemErr_Version version: 8;
-	enum OpalMemErrType type: 8;
-	__be16 flags;
-	uint8_t reserved_1[4];
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_MAXACT_NO_KPROBE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_BAD_RETPROBE = 10,
+	TP_ERR_BAD_ADDR_SUFFIX = 11,
+	TP_ERR_NO_GROUP_NAME = 12,
+	TP_ERR_GROUP_TOO_LONG = 13,
+	TP_ERR_BAD_GROUP_NAME = 14,
+	TP_ERR_NO_EVENT_NAME = 15,
+	TP_ERR_EVENT_TOO_LONG = 16,
+	TP_ERR_BAD_EVENT_NAME = 17,
+	TP_ERR_EVENT_EXIST = 18,
+	TP_ERR_RETVAL_ON_PROBE = 19,
+	TP_ERR_BAD_STACK_NUM = 20,
+	TP_ERR_BAD_ARG_NUM = 21,
+	TP_ERR_BAD_VAR = 22,
+	TP_ERR_BAD_REG_NAME = 23,
+	TP_ERR_BAD_MEM_ADDR = 24,
+	TP_ERR_BAD_IMM = 25,
+	TP_ERR_IMMSTR_NO_CLOSE = 26,
+	TP_ERR_FILE_ON_KPROBE = 27,
+	TP_ERR_BAD_FILE_OFFS = 28,
+	TP_ERR_SYM_ON_UPROBE = 29,
+	TP_ERR_TOO_MANY_OPS = 30,
+	TP_ERR_DEREF_NEED_BRACE = 31,
+	TP_ERR_BAD_DEREF_OFFS = 32,
+	TP_ERR_DEREF_OPEN_BRACE = 33,
+	TP_ERR_COMM_CANT_DEREF = 34,
+	TP_ERR_BAD_FETCH_ARG = 35,
+	TP_ERR_ARRAY_NO_CLOSE = 36,
+	TP_ERR_BAD_ARRAY_SUFFIX = 37,
+	TP_ERR_BAD_ARRAY_NUM = 38,
+	TP_ERR_ARRAY_TOO_BIG = 39,
+	TP_ERR_BAD_TYPE = 40,
+	TP_ERR_BAD_STRING = 41,
+	TP_ERR_BAD_BITFIELD = 42,
+	TP_ERR_ARG_NAME_TOO_LONG = 43,
+	TP_ERR_NO_ARG_NAME = 44,
+	TP_ERR_BAD_ARG_NAME = 45,
+	TP_ERR_USED_ARG_NAME = 46,
+	TP_ERR_ARG_TOO_LONG = 47,
+	TP_ERR_NO_ARG_BODY = 48,
+	TP_ERR_BAD_INSN_BNDRY = 49,
+	TP_ERR_FAIL_REG_PROBE = 50,
+	TP_ERR_DIFF_PROBE_TYPE = 51,
+	TP_ERR_DIFF_ARG_TYPE = 52,
+	TP_ERR_SAME_PROBE = 53,
+	TP_ERR_NO_EVENT_INFO = 54,
+	TP_ERR_BAD_ATTACH_EVENT = 55,
+	TP_ERR_BAD_ATTACH_ARG = 56,
+};
+
+struct uprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int vaddr[0];
+};
+
+struct trace_uprobe {
+	struct dyn_event devent;
+	struct uprobe_consumer consumer;
+	struct path path;
+	struct inode *inode;
+	char *filename;
+	long unsigned int offset;
+	long unsigned int ref_ctr_offset;
+	long unsigned int nhit;
+	struct trace_probe tp;
+};
+
+struct uprobe_dispatch_data {
+	struct trace_uprobe *tu;
+	long unsigned int bp_addr;
+};
+
+struct uprobe_cpu_buffer {
+	struct mutex mutex;
+	void *buf;
+};
+
+typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+typedef struct user_pt_regs bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct btf_id_set8;
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+struct bpf_verifier_log {
+	u32 level;
+	char kbuf[1024];
+	char *ubuf;
+	u32 len_used;
+	u32 len_total;
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool allow_ptr_to_map_access;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	struct bpf_id_pair idmap_scratch[75];
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u32 prev_log_len;
+	u32 prev_insn_print_len;
+	char type_str_buf[64];
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		u32 mem_size;
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			long unsigned int raw1;
+			long unsigned int raw2;
+		} raw;
+		u32 subprogno;
+	};
+	u32 id;
+	u32 ref_obj_id;
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	bool in_async_callback_fn;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
+};
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	u32 active_spin_lock;
+	bool speculative;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		long unsigned int map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool prune_point;
+};
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_XDP = 0,
+	BTF_KFUNC_HOOK_TC = 1,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 2,
+	BTF_KFUNC_HOOK_TRACING = 3,
+	BTF_KFUNC_HOOK_SYSCALL = 4,
+	BTF_KFUNC_HOOK_MAX = 5,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 32,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[5];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, va_list);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+enum btf_field_type {
+	BTF_FIELD_SPIN_LOCK = 0,
+	BTF_FIELD_TIMER = 1,
+	BTF_FIELD_KPTR = 2,
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+struct btf_field_info {
+	u32 type_id;
+	u32 off;
+	enum bpf_kptr_type type;
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+};
+
+enum {
+	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
+	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
+	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
+	__ctx_convertBPF_PROG_TYPE_XDP = 3,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
+	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
+	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
+	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
+	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
+	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
+	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
+	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
+	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
+	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
+	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
+	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
+	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
+	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
+	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
+	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
+	__ctx_convertBPF_PROG_TYPE_EXT = 27,
+	__ctx_convertBPF_PROG_TYPE_SYSCALL = 28,
+	__ctx_convert_unused = 29,
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	long unsigned int timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct vm_event_state {
+	long unsigned int event[98];
+};
+
+struct xattr;
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+};
+
+enum {
+	MPOL_DEFAULT = 0,
+	MPOL_PREFERRED = 1,
+	MPOL_BIND = 2,
+	MPOL_INTERLEAVE = 3,
+	MPOL_LOCAL = 4,
+	MPOL_PREFERRED_MANY = 5,
+	MPOL_MAX = 6,
+};
+
+struct shared_policy {
+	struct rb_root root;
+	rwlock_t lock;
+};
+
+struct simple_xattr {
+	struct list_head list;
+	char *name;
+	size_t size;
+	char value[0];
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	long unsigned int flags;
+	long unsigned int alloced;
+	long unsigned int swapped;
+	long unsigned int fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct inode vfs_inode;
+};
+
+struct shmem_sb_info {
+	long unsigned int max_blocks;
+	struct percpu_counter used_blocks;
+	long unsigned int max_inodes;
+	long unsigned int free_inodes;
+	raw_spinlock_t stat_lock;
+	umode_t mode;
+	unsigned char huge;
+	kuid_t uid;
+	kgid_t gid;
+	bool full_inums;
+	ino_t next_ino;
+	ino_t *ino_batch;
+	struct mempolicy *mpol;
+	spinlock_t shrinklist_lock;
+	struct list_head shrinklist;
+	long unsigned int shrinklist_len;
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct shmem_falloc {
+	wait_queue_head_t *waitq;
+	long unsigned int start;
+	long unsigned int next;
+	long unsigned int nr_falloced;
+	long unsigned int nr_unswapped;
+};
+
+struct shmem_options {
+	long long unsigned int blocks;
+	long long unsigned int inodes;
+	struct mempolicy *mpol;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	bool full_inums;
+	int huge;
+	int seen;
+};
+
+enum shmem_param {
+	Opt_gid___2 = 0,
+	Opt_huge = 1,
+	Opt_mode = 2,
+	Opt_mpol = 3,
+	Opt_nr_blocks = 4,
+	Opt_nr_inodes = 5,
+	Opt_size = 6,
+	Opt_uid = 7,
+	Opt_inode32 = 8,
+	Opt_inode64 = 9,
+};
+
+typedef long unsigned int vm_flags_t;
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	long unsigned int rb_subtree_last;
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int total_vm;
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
+
+typedef long unsigned int pte_basic_t;
+
+enum fixed_addresses {
+	FIX_HOLE = 0,
+	__end_of_permanent_fixed_addresses = 1,
+	FIX_BTMAP_END = 1,
+	FIX_BTMAP_BEGIN = 64,
+	__end_of_fixed_addresses = 65,
+};
+
+struct files_stat_struct {
+	long unsigned int nr_files;
+	long unsigned int nr_free_files;
+	long unsigned int max_files;
+};
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	long unsigned int period_time;
+	long unsigned int dirty_limit_tstamp;
+	long unsigned int dirty_limit;
+};
+
+struct wb_writeback_work {
+	long int nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long int pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_to_write;
+	long int pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long int range_start;
+	long int range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int older;
+	long int age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int background_thresh;
+	long unsigned int dirty_thresh;
+	long unsigned int dirty_limit;
+	long unsigned int nr_dirtied;
+	long unsigned int nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int write_bw;
+	long unsigned int avg_write_bw;
+	long unsigned int dirty_rate;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int limit;
+	long unsigned int setpoint;
+	long unsigned int dirty;
+	long unsigned int bdi_setpoint;
+	long unsigned int bdi_dirty;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	long unsigned int paused;
+	long int pause;
+	long unsigned int period;
+	long int think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	long unsigned int writeback_index;
+	long int nr_to_write;
+	long unsigned int wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int state;
+	__u16 mode;
+	long unsigned int dirtied_when;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long int);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+enum alarmtimer_type {
+	ALARM_REALTIME = 0,
+	ALARM_BOOTTIME = 1,
+	ALARM_NUMTYPE = 2,
+	ALARM_REALTIME_FREEZER = 3,
+	ALARM_BOOTTIME_FREEZER = 4,
+};
+
+enum alarmtimer_restart {
+	ALARMTIMER_NORESTART = 0,
+	ALARMTIMER_RESTART = 1,
+};
+
+struct alarm {
+	struct timerqueue_node node;
+	struct hrtimer timer;
+	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
+	enum alarmtimer_type type;
+	int state;
+	void *data;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	short unsigned int expired;
+	short unsigned int settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+struct iomap_page_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_page_ops *page_ops;
+};
+
+struct iomap_page_ops {
+	int (*page_prepare)(struct inode *, loff_t, unsigned int);
+	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *);
+};
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+struct ipc_ids {
+	int in_use;
+	short unsigned int seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	atomic_t msg_bytes;
+	atomic_t msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	long unsigned int shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent *fi_extents_start;
+};
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+	long unsigned int cs_chp_time;
+	__u32 cs_forced_to_close;
+	__u32 cs_written;
+	__u32 cs_dropped;
+};
+
+struct journal_s;
+
+typedef struct journal_s journal_t;
+
+struct journal_head;
+
+struct transaction_s;
+
+typedef struct transaction_s transaction_t;
+
+struct transaction_s {
+	journal_t *t_journal;
+	tid_t t_tid;
+	enum {
+		T_RUNNING = 0,
+		T_LOCKED = 1,
+		T_SWITCH = 2,
+		T_FLUSH = 3,
+		T_COMMIT = 4,
+		T_COMMIT_DFLUSH = 5,
+		T_COMMIT_JFLUSH = 6,
+		T_COMMIT_CALLBACK = 7,
+		T_FINISHED = 8,
+	} t_state;
+	long unsigned int t_log_start;
+	int t_nr_buffers;
+	struct journal_head *t_reserved_list;
+	struct journal_head *t_buffers;
+	struct journal_head *t_forget;
+	struct journal_head *t_checkpoint_list;
+	struct journal_head *t_checkpoint_io_list;
+	struct journal_head *t_shadow_list;
+	struct list_head t_inode_list;
+	spinlock_t t_handle_lock;
+	long unsigned int t_max_wait;
+	long unsigned int t_start;
+	long unsigned int t_requested;
+	struct transaction_chp_stats_s t_chp_stats;
+	atomic_t t_updates;
+	atomic_t t_outstanding_credits;
+	atomic_t t_outstanding_revokes;
+	atomic_t t_handle_count;
+	transaction_t *t_cpnext;
+	transaction_t *t_cpprev;
+	long unsigned int t_expires;
+	ktime_t t_start_time;
+	unsigned int t_synchronous_commit: 1;
+	int t_need_data_flush;
+	struct list_head t_private_list;
+};
+
+struct jbd2_buffer_trigger_type;
+
+struct journal_head {
+	struct buffer_head *b_bh;
+	spinlock_t b_state_lock;
+	int b_jcount;
+	unsigned int b_jlist;
+	unsigned int b_modified;
+	char *b_frozen_data;
+	char *b_committed_data;
+	transaction_t *b_transaction;
+	transaction_t *b_next_transaction;
+	struct journal_head *b_tnext;
+	struct journal_head *b_tprev;
+	transaction_t *b_cp_transaction;
+	struct journal_head *b_cpnext;
+	struct journal_head *b_cpprev;
+	struct jbd2_buffer_trigger_type *b_triggers;
+	struct jbd2_buffer_trigger_type *b_frozen_triggers;
+};
+
+struct jbd2_buffer_trigger_type {
+	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
+	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
+};
+
+struct jbd2_journal_handle;
+
+typedef struct jbd2_journal_handle handle_t;
+
+struct jbd2_journal_handle {
+	union {
+		transaction_t *h_transaction;
+		journal_t *h_journal;
+	};
+	handle_t *h_rsv_handle;
+	int h_total_credits;
+	int h_revoke_credits;
+	int h_revoke_credits_requested;
+	int h_ref;
+	int h_err;
+	unsigned int h_sync: 1;
+	unsigned int h_jdata: 1;
+	unsigned int h_reserved: 1;
+	unsigned int h_aborted: 1;
+	unsigned int h_type: 8;
+	unsigned int h_line_no: 16;
+	long unsigned int h_start_jiffies;
+	unsigned int h_requested_credits;
+	unsigned int saved_alloc_context;
+};
+
+struct transaction_run_stats_s {
+	long unsigned int rs_wait;
+	long unsigned int rs_request_delay;
+	long unsigned int rs_running;
+	long unsigned int rs_locked;
+	long unsigned int rs_flushing;
+	long unsigned int rs_logging;
+	__u32 rs_handle_count;
+	__u32 rs_blocks;
+	__u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+	long unsigned int ts_tid;
+	long unsigned int ts_requested;
+	struct transaction_run_stats_s run;
+};
+
+enum passtype {
+	PASS_SCAN = 0,
+	PASS_REVOKE = 1,
+	PASS_REPLAY = 2,
+};
+
+struct journal_superblock_s;
+
+typedef struct journal_superblock_s journal_superblock_t;
+
+struct jbd2_revoke_table_s;
+
+struct jbd2_inode;
+
+struct journal_s {
+	long unsigned int j_flags;
+	long unsigned int j_atomic_flags;
+	int j_errno;
+	struct mutex j_abort_mutex;
+	struct buffer_head *j_sb_buffer;
+	journal_superblock_t *j_superblock;
+	int j_format_version;
+	rwlock_t j_state_lock;
+	int j_barrier_count;
+	struct mutex j_barrier;
+	transaction_t *j_running_transaction;
+	transaction_t *j_committing_transaction;
+	transaction_t *j_checkpoint_transactions;
+	wait_queue_head_t j_wait_transaction_locked;
+	wait_queue_head_t j_wait_done_commit;
+	wait_queue_head_t j_wait_commit;
+	wait_queue_head_t j_wait_updates;
+	wait_queue_head_t j_wait_reserved;
+	wait_queue_head_t j_fc_wait;
+	struct mutex j_checkpoint_mutex;
+	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
+	long unsigned int j_head;
+	long unsigned int j_tail;
+	long unsigned int j_free;
+	long unsigned int j_first;
+	long unsigned int j_last;
+	long unsigned int j_fc_first;
+	long unsigned int j_fc_off;
+	long unsigned int j_fc_last;
+	struct block_device *j_dev;
+	int j_blocksize;
+	long long unsigned int j_blk_offset;
+	char j_devname[56];
+	struct block_device *j_fs_dev;
+	unsigned int j_total_len;
+	atomic_t j_reserved_credits;
+	spinlock_t j_list_lock;
+	struct inode *j_inode;
+	tid_t j_tail_sequence;
+	tid_t j_transaction_sequence;
+	tid_t j_commit_sequence;
+	tid_t j_commit_request;
+	__u8 j_uuid[16];
+	struct task_struct *j_task;
+	int j_max_transaction_buffers;
+	int j_revoke_records_per_block;
+	long unsigned int j_commit_interval;
+	struct timer_list j_commit_timer;
+	spinlock_t j_revoke_lock;
+	struct jbd2_revoke_table_s *j_revoke;
+	struct jbd2_revoke_table_s *j_revoke_table[2];
+	struct buffer_head **j_wbuf;
+	struct buffer_head **j_fc_wbuf;
+	int j_wbufsize;
+	int j_fc_wbufsize;
+	pid_t j_last_sync_writer;
+	u64 j_average_commit_time;
+	u32 j_min_batch_time;
+	u32 j_max_batch_time;
+	void (*j_commit_callback)(journal_t *, transaction_t *);
+	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
+	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
+	spinlock_t j_history_lock;
+	struct proc_dir_entry *j_proc_entry;
+	struct transaction_stats_s j_stats;
+	unsigned int j_failed_commit;
+	void *j_private;
+	struct crypto_shash *j_chksum_driver;
+	__u32 j_csum_seed;
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
+	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
+};
+
+struct journal_header_s {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+};
+
+typedef struct journal_header_s journal_header_t;
+
+struct journal_superblock_s {
+	journal_header_t s_header;
+	__be32 s_blocksize;
+	__be32 s_maxlen;
+	__be32 s_first;
+	__be32 s_sequence;
+	__be32 s_start;
+	__be32 s_errno;
+	__be32 s_feature_compat;
+	__be32 s_feature_incompat;
+	__be32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	__be32 s_nr_users;
+	__be32 s_dynsuper;
+	__be32 s_max_transaction;
+	__be32 s_max_trans_data;
+	__u8 s_checksum_type;
+	__u8 s_padding2[3];
+	__be32 s_num_fc_blks;
+	__u32 s_padding[41];
+	__be32 s_checksum;
+	__u8 s_users[768];
+};
+
+enum jbd_state_bits {
+	BH_JBD = 16,
+	BH_JWrite = 17,
+	BH_Freed = 18,
+	BH_Revoked = 19,
+	BH_RevokeValid = 20,
+	BH_JBDDirty = 21,
+	BH_JournalHead = 22,
+	BH_Shadow = 23,
+	BH_Verified = 24,
+	BH_JBDPrivateStart = 25,
+};
+
+struct jbd2_inode {
+	transaction_t *i_transaction;
+	transaction_t *i_next_transaction;
+	struct list_head i_list;
+	struct inode *i_vfs_inode;
+	long unsigned int i_flags;
+	loff_t i_dirty_start;
+	loff_t i_dirty_end;
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+struct fscrypt_dummy_policy {};
+
+typedef int ext4_grpblk_t;
+
+typedef long long unsigned int ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+typedef unsigned int ext4_group_t;
+
+struct ext4_allocation_request {
+	struct inode *inode;
+	unsigned int len;
+	ext4_lblk_t logical;
+	ext4_lblk_t lleft;
+	ext4_lblk_t lright;
+	ext4_fsblk_t goal;
+	ext4_fsblk_t pleft;
+	ext4_fsblk_t pright;
+	unsigned int flags;
+};
+
+struct ext4_system_blocks {
+	struct rb_root root;
+	struct callback_head rcu;
+};
+
+struct ext4_group_desc {
+	__le32 bg_block_bitmap_lo;
+	__le32 bg_inode_bitmap_lo;
+	__le32 bg_inode_table_lo;
+	__le16 bg_free_blocks_count_lo;
+	__le16 bg_free_inodes_count_lo;
+	__le16 bg_used_dirs_count_lo;
+	__le16 bg_flags;
+	__le32 bg_exclude_bitmap_lo;
+	__le16 bg_block_bitmap_csum_lo;
+	__le16 bg_inode_bitmap_csum_lo;
+	__le16 bg_itable_unused_lo;
+	__le16 bg_checksum;
+	__le32 bg_block_bitmap_hi;
+	__le32 bg_inode_bitmap_hi;
+	__le32 bg_inode_table_hi;
+	__le16 bg_free_blocks_count_hi;
+	__le16 bg_free_inodes_count_hi;
+	__le16 bg_used_dirs_count_hi;
+	__le16 bg_itable_unused_hi;
+	__le32 bg_exclude_bitmap_hi;
+	__le16 bg_block_bitmap_csum_hi;
+	__le16 bg_inode_bitmap_csum_hi;
+	__u32 bg_reserved;
+};
+
+struct flex_groups {
+	atomic64_t free_clusters;
+	atomic_t free_inodes;
+	atomic_t used_dirs;
+};
+
+struct extent_status {
+	struct rb_node rb_node;
+	ext4_lblk_t es_lblk;
+	ext4_lblk_t es_len;
+	ext4_fsblk_t es_pblk;
+};
+
+struct ext4_es_tree {
+	struct rb_root root;
+	struct extent_status *cache_es;
+};
+
+struct ext4_es_stats {
+	long unsigned int es_stats_shrunk;
+	struct percpu_counter es_stats_cache_hits;
+	struct percpu_counter es_stats_cache_misses;
+	u64 es_stats_scan_time;
+	u64 es_stats_max_scan_time;
+	struct percpu_counter es_stats_all_cnt;
+	struct percpu_counter es_stats_shk_cnt;
+};
+
+struct ext4_pending_tree {
+	struct rb_root root;
+};
+
+struct ext4_fc_stats {
+	unsigned int fc_ineligible_reason_count[9];
+	long unsigned int fc_num_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_failed_commits;
+	long unsigned int fc_skipped_commits;
+	long unsigned int fc_numblks;
+	u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region {
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	int ino;
+	int len;
+};
+
+struct ext4_fc_replay_state {
+	int fc_replay_num_tags;
+	int fc_replay_expected_off;
+	int fc_current_pass;
+	int fc_cur_tag;
+	int fc_crc;
+	struct ext4_fc_alloc_region *fc_regions;
+	int fc_regions_size;
+	int fc_regions_used;
+	int fc_regions_valid;
+	int *fc_modified_inodes;
+	int fc_modified_inodes_used;
+	int fc_modified_inodes_size;
+};
+
+struct ext4_inode_info {
+	__le32 i_data[15];
+	__u32 i_dtime;
+	ext4_fsblk_t i_file_acl;
+	ext4_group_t i_block_group;
+	ext4_lblk_t i_dir_start_lookup;
+	long unsigned int i_flags;
+	struct rw_semaphore xattr_sem;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
+	struct list_head i_fc_list;
+	ext4_lblk_t i_fc_lblk_start;
+	ext4_lblk_t i_fc_lblk_len;
+	atomic_t i_fc_updates;
+	wait_queue_head_t i_fc_wait;
+	struct mutex i_fc_lock;
+	loff_t i_disksize;
+	struct rw_semaphore i_data_sem;
+	struct inode vfs_inode;
+	struct jbd2_inode *jinode;
+	spinlock_t i_raw_lock;
+	struct timespec64 i_crtime;
+	atomic_t i_prealloc_active;
+	struct list_head i_prealloc_list;
+	spinlock_t i_prealloc_lock;
+	struct ext4_es_tree i_es_tree;
+	rwlock_t i_es_lock;
+	struct list_head i_es_list;
+	unsigned int i_es_all_nr;
+	unsigned int i_es_shk_nr;
+	ext4_lblk_t i_es_shrink_lblk;
+	ext4_group_t i_last_alloc_group;
+	unsigned int i_reserved_data_blocks;
+	struct ext4_pending_tree i_pending_tree;
+	__u16 i_extra_isize;
+	u16 i_inline_off;
+	u16 i_inline_size;
+	spinlock_t i_completed_io_lock;
+	struct list_head i_rsv_conversion_list;
+	struct work_struct i_rsv_conversion_work;
+	atomic_t i_unwritten;
+	spinlock_t i_block_reservation_lock;
+	tid_t i_sync_tid;
+	tid_t i_datasync_tid;
+	__u32 i_csum_seed;
+	kprojid_t i_projid;
+};
+
+struct ext4_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count_lo;
+	__le32 s_r_blocks_count_lo;
+	__le32 s_free_blocks_count_lo;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_cluster_size;
+	__le32 s_blocks_per_group;
+	__le32 s_clusters_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__le16 s_reserved_gdt_blocks;
+	__u8 s_journal_uuid[16];
+	__le32 s_journal_inum;
+	__le32 s_journal_dev;
+	__le32 s_last_orphan;
+	__le32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_jnl_backup_type;
+	__le16 s_desc_size;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__le32 s_mkfs_time;
+	__le32 s_jnl_blocks[17];
+	__le32 s_blocks_count_hi;
+	__le32 s_r_blocks_count_hi;
+	__le32 s_free_blocks_count_hi;
+	__le16 s_min_extra_isize;
+	__le16 s_want_extra_isize;
+	__le32 s_flags;
+	__le16 s_raid_stride;
+	__le16 s_mmp_update_interval;
+	__le64 s_mmp_block;
+	__le32 s_raid_stripe_width;
+	__u8 s_log_groups_per_flex;
+	__u8 s_checksum_type;
+	__u8 s_encryption_level;
+	__u8 s_reserved_pad;
+	__le64 s_kbytes_written;
+	__le32 s_snapshot_inum;
+	__le32 s_snapshot_id;
+	__le64 s_snapshot_r_blocks_count;
+	__le32 s_snapshot_list;
+	__le32 s_error_count;
+	__le32 s_first_error_time;
+	__le32 s_first_error_ino;
+	__le64 s_first_error_block;
+	__u8 s_first_error_func[32];
+	__le32 s_first_error_line;
+	__le32 s_last_error_time;
+	__le32 s_last_error_ino;
+	__le32 s_last_error_line;
+	__le64 s_last_error_block;
+	__u8 s_last_error_func[32];
+	__u8 s_mount_opts[64];
+	__le32 s_usr_quota_inum;
+	__le32 s_grp_quota_inum;
+	__le32 s_overhead_clusters;
+	__le32 s_backup_bgs[2];
+	__u8 s_encrypt_algos[4];
+	__u8 s_encrypt_pw_salt[16];
+	__le32 s_lpf_ino;
+	__le32 s_prj_quota_inum;
+	__le32 s_checksum_seed;
+	__u8 s_wtime_hi;
+	__u8 s_mtime_hi;
+	__u8 s_mkfs_time_hi;
+	__u8 s_lastcheck_hi;
+	__u8 s_first_error_time_hi;
+	__u8 s_last_error_time_hi;
+	__u8 s_first_error_errcode;
+	__u8 s_last_error_errcode;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
+	__le32 s_checksum;
+};
+
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
+struct ext4_group_info;
+
+struct ext4_locality_group;
+
+struct ext4_li_request;
+
+struct ext4_sb_info {
+	long unsigned int s_desc_size;
+	long unsigned int s_inodes_per_block;
+	long unsigned int s_blocks_per_group;
+	long unsigned int s_clusters_per_group;
+	long unsigned int s_inodes_per_group;
+	long unsigned int s_itb_per_group;
+	long unsigned int s_gdb_count;
+	long unsigned int s_desc_per_block;
+	ext4_group_t s_groups_count;
+	ext4_group_t s_blockfile_groups;
+	long unsigned int s_overhead;
+	unsigned int s_cluster_ratio;
+	unsigned int s_cluster_bits;
+	loff_t s_bitmap_maxbytes;
+	struct buffer_head *s_sbh;
+	struct ext4_super_block *s_es;
+	struct buffer_head **s_group_desc;
+	unsigned int s_mount_opt;
+	unsigned int s_mount_opt2;
+	long unsigned int s_mount_flags;
+	unsigned int s_def_mount_opt;
+	ext4_fsblk_t s_sb_block;
+	atomic64_t s_resv_clusters;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	short unsigned int s_mount_state;
+	short unsigned int s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_inode_goal;
+	u32 s_hash_seed[4];
+	int s_def_hash_version;
+	int s_hash_unsigned;
+	struct percpu_counter s_freeclusters_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
+	struct blockgroup_lock *s_blockgroup_lock;
+	struct proc_dir_entry *s_proc;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
+	struct journal_s *s_journal;
+	long unsigned int s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
+	long unsigned int s_commit_interval;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	struct block_device *s_journal_bdev;
+	unsigned int s_want_extra_isize;
+	struct ext4_system_blocks *s_system_blks;
+	struct ext4_group_info ***s_group_info;
+	struct inode *s_buddy_cache;
+	spinlock_t s_md_lock;
+	short unsigned int *s_mb_offsets;
+	unsigned int *s_mb_maxs;
+	unsigned int s_group_info_size;
+	unsigned int s_mb_free_pending;
+	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct list_head *s_mb_avg_fragment_size;
+	rwlock_t *s_mb_avg_fragment_size_locks;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
+	long unsigned int s_stripe;
+	unsigned int s_mb_max_linear_groups;
+	unsigned int s_mb_stream_request;
+	unsigned int s_mb_max_to_scan;
+	unsigned int s_mb_min_to_scan;
+	unsigned int s_mb_stats;
+	unsigned int s_mb_order2_reqs;
+	unsigned int s_mb_group_prealloc;
+	unsigned int s_mb_max_inode_prealloc;
+	unsigned int s_max_dir_size_kb;
+	long unsigned int s_mb_last_group;
+	long unsigned int s_mb_last_start;
+	unsigned int s_mb_prefetch;
+	unsigned int s_mb_prefetch_limit;
+	atomic_t s_bal_reqs;
+	atomic_t s_bal_success;
+	atomic_t s_bal_allocated;
+	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_groups_scanned;
+	atomic_t s_bal_goals;
+	atomic_t s_bal_breaks;
+	atomic_t s_bal_2orders;
+	atomic_t s_bal_cr0_bad_suggestions;
+	atomic_t s_bal_cr1_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[4];
+	atomic64_t s_bal_cX_hits[4];
+	atomic64_t s_bal_cX_failed[4];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
+	atomic_t s_mb_lost_chunks;
+	atomic_t s_mb_preallocated;
+	atomic_t s_mb_discarded;
+	atomic_t s_lock_busy;
+	struct ext4_locality_group *s_locality_groups;
+	long unsigned int s_sectors_written_start;
+	u64 s_kbytes_written;
+	unsigned int s_extent_max_zeroout_kb;
+	unsigned int s_log_groups_per_flex;
+	struct flex_groups **s_flex_groups;
+	ext4_group_t s_flex_groups_allocated;
+	struct workqueue_struct *rsv_conversion_wq;
+	struct timer_list s_err_report;
+	struct ext4_li_request *s_li_request;
+	unsigned int s_li_wait_mult;
+	struct task_struct *s_mmp_tsk;
+	long unsigned int s_last_trim_minblks;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_csum_seed;
+	struct shrinker s_es_shrinker;
+	struct list_head s_es_list;
+	long int s_es_nr_inode;
+	struct ext4_es_stats s_es_stats;
+	struct mb_cache *s_ea_block_cache;
+	struct mb_cache *s_ea_inode_cache;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
+	struct ratelimit_state s_err_ratelimit_state;
+	struct ratelimit_state s_warning_ratelimit_state;
+	struct ratelimit_state s_msg_ratelimit_state;
+	atomic_t s_warning_count;
+	atomic_t s_msg_count;
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+	struct percpu_rw_semaphore s_writepages_rwsem;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+	errseq_t s_bdev_wb_err;
+	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_error_work;
+	atomic_t s_fc_subtid;
+	struct list_head s_fc_q[2];
+	struct list_head s_fc_dentry_q[2];
+	unsigned int s_fc_bytes;
+	spinlock_t s_fc_lock;
+	struct buffer_head *s_fc_bh;
+	struct ext4_fc_stats s_fc_stats;
+	tid_t s_fc_ineligible_tid;
+	struct ext4_fc_replay_state s_fc_replay_state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ext4_group_info {
+	long unsigned int bb_state;
+	struct rb_root bb_free_root;
+	ext4_grpblk_t bb_first_free;
+	ext4_grpblk_t bb_free;
+	ext4_grpblk_t bb_fragments;
+	int bb_avg_fragment_size_order;
+	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
+	struct list_head bb_prealloc_list;
+	struct rw_semaphore alloc_sem;
+	struct list_head bb_avg_fragment_size_node;
+	struct list_head bb_largest_free_order_node;
+	ext4_grpblk_t bb_counters[0];
+};
+
+struct ext4_locality_group {
+	struct mutex lg_mutex;
+	struct list_head lg_prealloc_list[10];
+	spinlock_t lg_prealloc_lock;
+};
+
+enum ext4_li_mode {
+	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+	EXT4_LI_MODE_ITABLE = 1,
+};
+
+struct ext4_li_request {
+	struct super_block *lr_super;
+	enum ext4_li_mode lr_mode;
+	ext4_group_t lr_first_not_zeroed;
+	ext4_group_t lr_next_group;
+	struct list_head lr_request;
+	long unsigned int lr_next_sched;
+	long unsigned int lr_timeout;
+};
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+struct ext4_io_end_vec {
+	struct list_head list;
+	loff_t offset;
+	ssize_t size;
+};
+
+struct ext4_io_end {
+	struct list_head list;
+	handle_t *handle;
+	struct inode *inode;
+	struct bio *bio;
+	unsigned int flag;
+	refcount_t count;
+	struct list_head list_vec;
+};
+
+typedef struct ext4_io_end ext4_io_end_t;
+
+struct ext4_io_submit {
+	struct writeback_control *io_wbc;
+	struct bio *io_bio;
+	ext4_io_end_t *io_end;
+	sector_t io_next_block;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+struct ext2_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
+};
+
+typedef struct ext2_dir_entry_2 ext2_dirent;
+
+struct jbd2_journal_revoke_header_s {
+	journal_header_t r_header;
+	__be32 r_count;
+};
+
+typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+
+struct jbd2_revoke_table_s {
+	int hash_size;
+	int hash_shift;
+	struct list_head *hash_table;
+};
+
+struct jbd2_revoke_record_s {
+	struct list_head hash;
+	tid_t sequence;
+	long long unsigned int blocknr;
+};
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
+struct cdrom_tocentry {
+	__u8 cdte_track;
+	__u8 cdte_adr: 4;
+	__u8 cdte_ctrl: 4;
+	__u8 cdte_format;
+	union cdrom_addr cdte_addr;
+	__u8 cdte_datamode;
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+struct iso_volume_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 data[2041];
+};
+
+struct iso_primary_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 unused1[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 unused3[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 opt_type_l_path_table[4];
+	__u8 type_m_path_table[4];
+	__u8 opt_type_m_path_table[4];
+	__u8 root_directory_record[34];
+	char volume_set_id[128];
+	char publisher_id[128];
+	char preparer_id[128];
+	char application_id[128];
+	char copyright_file_id[37];
+	char abstract_file_id[37];
+	char bibliographic_file_id[37];
+	__u8 creation_date[17];
+	__u8 modification_date[17];
+	__u8 expiration_date[17];
+	__u8 effective_date[17];
+	__u8 file_structure_version[1];
+	__u8 unused4[1];
+	__u8 application_data[512];
+	__u8 unused5[653];
+};
+
+struct iso_supplementary_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 flags[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 escape[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 opt_type_l_path_table[4];
+	__u8 type_m_path_table[4];
+	__u8 opt_type_m_path_table[4];
+	__u8 root_directory_record[34];
+	char volume_set_id[128];
+	char publisher_id[128];
+	char preparer_id[128];
+	char application_id[128];
+	char copyright_file_id[37];
+	char abstract_file_id[37];
+	char bibliographic_file_id[37];
+	__u8 creation_date[17];
+	__u8 modification_date[17];
+	__u8 expiration_date[17];
+	__u8 effective_date[17];
+	__u8 file_structure_version[1];
+	__u8 unused4[1];
+	__u8 application_data[512];
+	__u8 unused5[653];
+};
+
+struct hs_volume_descriptor {
+	__u8 foo[8];
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 data[2033];
+};
+
+struct hs_primary_descriptor {
+	__u8 foo[8];
+	__u8 type[1];
+	__u8 id[5];
+	__u8 version[1];
+	__u8 unused1[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 unused3[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 unused4[28];
+	__u8 root_directory_record[34];
+};
+
+struct iso_directory_record {
+	__u8 length[1];
+	__u8 ext_attr_length[1];
+	__u8 extent[8];
+	__u8 size[8];
+	__u8 date[7];
+	__u8 flags[1];
+	__u8 file_unit_size[1];
+	__u8 interleave[1];
+	__u8 volume_sequence_number[4];
+	__u8 name_len[1];
+	char name[0];
+};
+
+enum isofs_file_format {
+	isofs_file_normal = 0,
+	isofs_file_sparse = 1,
+	isofs_file_compressed = 2,
+};
+
+struct iso_inode_info {
+	long unsigned int i_iget5_block;
+	long unsigned int i_iget5_offset;
+	unsigned int i_first_extent;
+	unsigned char i_file_format;
+	unsigned char i_format_parm[3];
+	long unsigned int i_next_section_block;
+	long unsigned int i_next_section_offset;
+	off_t i_section_size;
+	struct inode vfs_inode;
+};
+
+struct isofs_sb_info {
+	long unsigned int s_ninodes;
+	long unsigned int s_nzones;
+	long unsigned int s_firstdatazone;
+	long unsigned int s_log_zone_size;
+	long unsigned int s_max_size;
+	int s_rock_offset;
+	s32 s_sbsector;
+	unsigned char s_joliet_level;
+	unsigned char s_mapping;
+	unsigned char s_check;
+	unsigned char s_session;
+	unsigned int s_high_sierra: 1;
+	unsigned int s_rock: 2;
+	unsigned int s_cruft: 1;
+	unsigned int s_nocompress: 1;
+	unsigned int s_hide: 1;
+	unsigned int s_showassoc: 1;
+	unsigned int s_overriderockperm: 1;
+	unsigned int s_uid_set: 1;
+	unsigned int s_gid_set: 1;
+	umode_t s_fmode;
+	umode_t s_dmode;
+	kgid_t s_gid;
+	kuid_t s_uid;
+	struct nls_table *s_nls_iocharset;
+};
+
+struct iso9660_options {
+	unsigned int rock: 1;
+	unsigned int joliet: 1;
+	unsigned int cruft: 1;
+	unsigned int hide: 1;
+	unsigned int showassoc: 1;
+	unsigned int nocompress: 1;
+	unsigned int overriderockperm: 1;
+	unsigned int uid_set: 1;
+	unsigned int gid_set: 1;
+	unsigned char map;
+	unsigned char check;
+	unsigned int blocksize;
+	umode_t fmode;
+	umode_t dmode;
+	kgid_t gid;
+	kuid_t uid;
+	char *iocharset;
+	s32 session;
+	s32 sbsector;
+};
+
+enum {
+	Opt_block = 0,
+	Opt_check_r = 1,
+	Opt_check_s = 2,
+	Opt_cruft = 3,
+	Opt_gid___3 = 4,
+	Opt_ignore = 5,
+	Opt_iocharset = 6,
+	Opt_map_a = 7,
+	Opt_map_n = 8,
+	Opt_map_o = 9,
+	Opt_mode___2 = 10,
+	Opt_nojoliet = 11,
+	Opt_norock = 12,
+	Opt_sb = 13,
+	Opt_session = 14,
+	Opt_uid___2 = 15,
+	Opt_unhide = 16,
+	Opt_utf8 = 17,
+	Opt_err = 18,
+	Opt_nocompress = 19,
+	Opt_hide = 20,
+	Opt_showassoc = 21,
+	Opt_dmode = 22,
+	Opt_overriderockperm = 23,
+};
+
+struct isofs_iget5_callback_data {
+	long unsigned int block;
+	long unsigned int offset;
+};
+
+typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
+
+struct rpc_task_setup {
+	struct rpc_task *task;
+	struct rpc_clnt *rpc_client;
+	struct rpc_xprt *rpc_xprt;
+	struct rpc_cred *rpc_op_cred;
+	const struct rpc_message *rpc_message;
+	const struct rpc_call_ops *callback_ops;
+	void *callback_data;
+	struct workqueue_struct *workqueue;
+	short unsigned int flags;
+	signed char priority;
+};
+
+struct pnfs_layout_range {
+	u32 iomode;
+	u64 offset;
+	u64 length;
+};
+
+struct pnfs_layout_hdr;
+
+struct pnfs_layout_segment {
+	struct list_head pls_list;
+	struct list_head pls_lc_list;
+	struct list_head pls_commits;
+	struct pnfs_layout_range pls_range;
+	refcount_t pls_refcount;
+	u32 pls_seq;
+	long unsigned int pls_flags;
+	struct pnfs_layout_hdr *pls_layout;
+};
+
+enum {
+	NFS_IOHDR_ERROR = 0,
+	NFS_IOHDR_EOF = 1,
+	NFS_IOHDR_REDO = 2,
+	NFS_IOHDR_STAT = 3,
+	NFS_IOHDR_RESEND_PNFS = 4,
+	NFS_IOHDR_RESEND_MDS = 5,
+	NFS_IOHDR_UNSTABLE_WRITES = 6,
+};
+
+struct nfs_page {
+	struct list_head wb_list;
+	struct page *wb_page;
+	struct nfs_lock_context *wb_lock_context;
+	long unsigned int wb_index;
+	unsigned int wb_offset;
+	unsigned int wb_pgbase;
+	unsigned int wb_bytes;
+	struct kref wb_kref;
+	long unsigned int wb_flags;
+	struct nfs_write_verifier wb_verf;
+	struct nfs_page *wb_this_page;
+	struct nfs_page *wb_head;
+	short unsigned int wb_nio;
+};
+
+struct nfs_io_completion {
+	void (*complete)(void *);
+	void *data;
+	struct kref refcount;
+};
+
+struct nfs_direct_req {
+	struct kref kref;
+	struct nfs_open_context *ctx;
+	struct nfs_lock_context *l_ctx;
+	struct kiocb *iocb;
+	struct inode *inode;
+	atomic_t io_count;
+	spinlock_t lock;
+	loff_t io_start;
+	ssize_t count;
+	ssize_t max_count;
+	ssize_t bytes_left;
+	ssize_t error;
+	struct completion completion;
+	struct nfs_mds_commit_info mds_cinfo;
+	struct pnfs_ds_commit_info ds_cinfo;
+	struct work_struct work;
+	int flags;
+};
+
+struct nfs_iostats {
+	long long unsigned int bytes[8];
+	long unsigned int events[27];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nfs4_cached_acl;
+
+struct nfs_delegation;
+
+struct nfs_inode {
+	__u64 fileid;
+	struct nfs_fh fh;
+	long unsigned int flags;
+	long unsigned int cache_validity;
+	long unsigned int read_cache_jiffies;
+	long unsigned int attrtimeo;
+	long unsigned int attrtimeo_timestamp;
+	long unsigned int attr_gencount;
+	struct rb_root access_cache;
+	struct list_head access_cache_entry_lru;
+	struct list_head access_cache_inode_lru;
 	union {
 		struct {
-			enum OpalMemErr_ResilErrType resil_err_type: 8;
-			uint8_t reserved_1[7];
-			__be64 physical_address_start;
-			__be64 physical_address_end;
-		} resilience;
+			long unsigned int cache_change_attribute;
+			__be32 cookieverf[2];
+			struct rw_semaphore rmdir_sem;
+		};
 		struct {
-			enum OpalMemErr_DynErrType dyn_err_type: 8;
-			uint8_t reserved_1[7];
-			__be64 physical_address_start;
-			__be64 physical_address_end;
-		} dyn_dealloc;
+			atomic_long_t nrequests;
+			atomic_long_t redirtied_pages;
+			struct nfs_mds_commit_info commit_info;
+			struct mutex commit_mutex;
+		};
+	};
+	struct list_head open_files;
+	struct nfs4_cached_acl *nfs4_acl;
+	struct list_head open_states;
+	struct nfs_delegation *delegation;
+	struct rw_semaphore rwsem;
+	struct pnfs_layout_hdr *layout;
+	__u64 write_io;
+	__u64 read_io;
+	struct inode vfs_inode;
+};
+
+struct nfs_delegation {
+	struct list_head super_list;
+	const struct cred *cred;
+	struct inode *inode;
+	nfs4_stateid stateid;
+	fmode_t type;
+	long unsigned int pagemod_limit;
+	__u64 change_attr;
+	long unsigned int flags;
+	refcount_t refcount;
+	spinlock_t lock;
+	struct callback_head rcu;
+};
+
+enum {
+	PG_BUSY = 0,
+	PG_MAPPED = 1,
+	PG_CLEAN = 2,
+	PG_COMMIT_TO_DS = 3,
+	PG_INODE_REF = 4,
+	PG_HEADLOCK = 5,
+	PG_TEARDOWN = 6,
+	PG_UNLOCKPAGE = 7,
+	PG_UPTODATE = 8,
+	PG_WB_END = 9,
+	PG_REMOVE = 10,
+	PG_CONTENDED1 = 11,
+	PG_CONTENDED2 = 12,
+};
+
+struct nfs_pageio_descriptor;
+
+struct nfs_pgio_mirror;
+
+struct nfs_pageio_ops {
+	void (*pg_init)(struct nfs_pageio_descriptor *, struct nfs_page *);
+	size_t (*pg_test)(struct nfs_pageio_descriptor *, struct nfs_page *, struct nfs_page *);
+	int (*pg_doio)(struct nfs_pageio_descriptor *);
+	unsigned int (*pg_get_mirror_count)(struct nfs_pageio_descriptor *, struct nfs_page *);
+	void (*pg_cleanup)(struct nfs_pageio_descriptor *);
+	struct nfs_pgio_mirror * (*pg_get_mirror)(struct nfs_pageio_descriptor *, u32);
+	u32 (*pg_set_mirror)(struct nfs_pageio_descriptor *, u32);
+};
+
+struct nfs_pgio_mirror {
+	struct list_head pg_list;
+	long unsigned int pg_bytes_written;
+	size_t pg_count;
+	size_t pg_bsize;
+	unsigned int pg_base;
+	unsigned char pg_recoalesce: 1;
+};
+
+struct nfs_pageio_descriptor {
+	struct inode *pg_inode;
+	const struct nfs_pageio_ops *pg_ops;
+	const struct nfs_rw_ops *pg_rw_ops;
+	int pg_ioflags;
+	int pg_error;
+	const struct rpc_call_ops *pg_rpc_callops;
+	const struct nfs_pgio_completion_ops *pg_completion_ops;
+	struct pnfs_layout_segment *pg_lseg;
+	struct nfs_io_completion *pg_io_completion;
+	struct nfs_direct_req *pg_dreq;
+	unsigned int pg_bsize;
+	u32 pg_mirror_count;
+	struct nfs_pgio_mirror *pg_mirrors;
+	struct nfs_pgio_mirror pg_mirrors_static[1];
+	struct nfs_pgio_mirror *pg_mirrors_dynamic;
+	u32 pg_mirror_idx;
+	short unsigned int pg_maxretrans;
+	unsigned char pg_moreio: 1;
+};
+
+enum nfs_stat_bytecounters {
+	NFSIOS_NORMALREADBYTES = 0,
+	NFSIOS_NORMALWRITTENBYTES = 1,
+	NFSIOS_DIRECTREADBYTES = 2,
+	NFSIOS_DIRECTWRITTENBYTES = 3,
+	NFSIOS_SERVERREADBYTES = 4,
+	NFSIOS_SERVERWRITTENBYTES = 5,
+	NFSIOS_READPAGES = 6,
+	NFSIOS_WRITEPAGES = 7,
+	__NFSIOS_BYTESMAX = 8,
+};
+
+enum nfs_stat_eventcounters {
+	NFSIOS_INODEREVALIDATE = 0,
+	NFSIOS_DENTRYREVALIDATE = 1,
+	NFSIOS_DATAINVALIDATE = 2,
+	NFSIOS_ATTRINVALIDATE = 3,
+	NFSIOS_VFSOPEN = 4,
+	NFSIOS_VFSLOOKUP = 5,
+	NFSIOS_VFSACCESS = 6,
+	NFSIOS_VFSUPDATEPAGE = 7,
+	NFSIOS_VFSREADPAGE = 8,
+	NFSIOS_VFSREADPAGES = 9,
+	NFSIOS_VFSWRITEPAGE = 10,
+	NFSIOS_VFSWRITEPAGES = 11,
+	NFSIOS_VFSGETDENTS = 12,
+	NFSIOS_VFSSETATTR = 13,
+	NFSIOS_VFSFLUSH = 14,
+	NFSIOS_VFSFSYNC = 15,
+	NFSIOS_VFSLOCK = 16,
+	NFSIOS_VFSRELEASE = 17,
+	NFSIOS_CONGESTIONWAIT = 18,
+	NFSIOS_SETATTRTRUNC = 19,
+	NFSIOS_EXTENDWRITE = 20,
+	NFSIOS_SILLYRENAME = 21,
+	NFSIOS_SHORTREAD = 22,
+	NFSIOS_SHORTWRITE = 23,
+	NFSIOS_DELAY = 24,
+	NFSIOS_PNFS_READ = 25,
+	NFSIOS_PNFS_WRITE = 26,
+	__NFSIOS_COUNTSMAX = 27,
+};
+
+enum pnfs_try_status {
+	PNFS_ATTEMPTED = 0,
+	PNFS_NOT_ATTEMPTED = 1,
+	PNFS_TRY_AGAIN = 2,
+};
+
+enum nfs_stat {
+	NFS_OK = 0,
+	NFSERR_PERM = 1,
+	NFSERR_NOENT = 2,
+	NFSERR_IO = 5,
+	NFSERR_NXIO = 6,
+	NFSERR_EAGAIN = 11,
+	NFSERR_ACCES = 13,
+	NFSERR_EXIST = 17,
+	NFSERR_XDEV = 18,
+	NFSERR_NODEV = 19,
+	NFSERR_NOTDIR = 20,
+	NFSERR_ISDIR = 21,
+	NFSERR_INVAL = 22,
+	NFSERR_FBIG = 27,
+	NFSERR_NOSPC = 28,
+	NFSERR_ROFS = 30,
+	NFSERR_MLINK = 31,
+	NFSERR_OPNOTSUPP = 45,
+	NFSERR_NAMETOOLONG = 63,
+	NFSERR_NOTEMPTY = 66,
+	NFSERR_DQUOT = 69,
+	NFSERR_STALE = 70,
+	NFSERR_REMOTE = 71,
+	NFSERR_WFLUSH = 99,
+	NFSERR_BADHANDLE = 10001,
+	NFSERR_NOT_SYNC = 10002,
+	NFSERR_BAD_COOKIE = 10003,
+	NFSERR_NOTSUPP = 10004,
+	NFSERR_TOOSMALL = 10005,
+	NFSERR_SERVERFAULT = 10006,
+	NFSERR_BADTYPE = 10007,
+	NFSERR_JUKEBOX = 10008,
+	NFSERR_SAME = 10009,
+	NFSERR_DENIED = 10010,
+	NFSERR_EXPIRED = 10011,
+	NFSERR_LOCKED = 10012,
+	NFSERR_GRACE = 10013,
+	NFSERR_FHEXPIRED = 10014,
+	NFSERR_SHARE_DENIED = 10015,
+	NFSERR_WRONGSEC = 10016,
+	NFSERR_CLID_INUSE = 10017,
+	NFSERR_RESOURCE = 10018,
+	NFSERR_MOVED = 10019,
+	NFSERR_NOFILEHANDLE = 10020,
+	NFSERR_MINOR_VERS_MISMATCH = 10021,
+	NFSERR_STALE_CLIENTID = 10022,
+	NFSERR_STALE_STATEID = 10023,
+	NFSERR_OLD_STATEID = 10024,
+	NFSERR_BAD_STATEID = 10025,
+	NFSERR_BAD_SEQID = 10026,
+	NFSERR_NOT_SAME = 10027,
+	NFSERR_LOCK_RANGE = 10028,
+	NFSERR_SYMLINK = 10029,
+	NFSERR_RESTOREFH = 10030,
+	NFSERR_LEASE_MOVED = 10031,
+	NFSERR_ATTRNOTSUPP = 10032,
+	NFSERR_NO_GRACE = 10033,
+	NFSERR_RECLAIM_BAD = 10034,
+	NFSERR_RECLAIM_CONFLICT = 10035,
+	NFSERR_BAD_XDR = 10036,
+	NFSERR_LOCKS_HELD = 10037,
+	NFSERR_OPENMODE = 10038,
+	NFSERR_BADOWNER = 10039,
+	NFSERR_BADCHAR = 10040,
+	NFSERR_BADNAME = 10041,
+	NFSERR_BAD_RANGE = 10042,
+	NFSERR_LOCK_NOTSUPP = 10043,
+	NFSERR_OP_ILLEGAL = 10044,
+	NFSERR_DEADLOCK = 10045,
+	NFSERR_FILE_OPEN = 10046,
+	NFSERR_ADMIN_REVOKED = 10047,
+	NFSERR_CB_PATH_DOWN = 10048,
+};
+
+enum nfsstat4 {
+	NFS4_OK = 0,
+	NFS4ERR_PERM = 1,
+	NFS4ERR_NOENT = 2,
+	NFS4ERR_IO = 5,
+	NFS4ERR_NXIO = 6,
+	NFS4ERR_ACCESS = 13,
+	NFS4ERR_EXIST = 17,
+	NFS4ERR_XDEV = 18,
+	NFS4ERR_NOTDIR = 20,
+	NFS4ERR_ISDIR = 21,
+	NFS4ERR_INVAL = 22,
+	NFS4ERR_FBIG = 27,
+	NFS4ERR_NOSPC = 28,
+	NFS4ERR_ROFS = 30,
+	NFS4ERR_MLINK = 31,
+	NFS4ERR_NAMETOOLONG = 63,
+	NFS4ERR_NOTEMPTY = 66,
+	NFS4ERR_DQUOT = 69,
+	NFS4ERR_STALE = 70,
+	NFS4ERR_BADHANDLE = 10001,
+	NFS4ERR_BAD_COOKIE = 10003,
+	NFS4ERR_NOTSUPP = 10004,
+	NFS4ERR_TOOSMALL = 10005,
+	NFS4ERR_SERVERFAULT = 10006,
+	NFS4ERR_BADTYPE = 10007,
+	NFS4ERR_DELAY = 10008,
+	NFS4ERR_SAME = 10009,
+	NFS4ERR_DENIED = 10010,
+	NFS4ERR_EXPIRED = 10011,
+	NFS4ERR_LOCKED = 10012,
+	NFS4ERR_GRACE = 10013,
+	NFS4ERR_FHEXPIRED = 10014,
+	NFS4ERR_SHARE_DENIED = 10015,
+	NFS4ERR_WRONGSEC = 10016,
+	NFS4ERR_CLID_INUSE = 10017,
+	NFS4ERR_RESOURCE = 10018,
+	NFS4ERR_MOVED = 10019,
+	NFS4ERR_NOFILEHANDLE = 10020,
+	NFS4ERR_MINOR_VERS_MISMATCH = 10021,
+	NFS4ERR_STALE_CLIENTID = 10022,
+	NFS4ERR_STALE_STATEID = 10023,
+	NFS4ERR_OLD_STATEID = 10024,
+	NFS4ERR_BAD_STATEID = 10025,
+	NFS4ERR_BAD_SEQID = 10026,
+	NFS4ERR_NOT_SAME = 10027,
+	NFS4ERR_LOCK_RANGE = 10028,
+	NFS4ERR_SYMLINK = 10029,
+	NFS4ERR_RESTOREFH = 10030,
+	NFS4ERR_LEASE_MOVED = 10031,
+	NFS4ERR_ATTRNOTSUPP = 10032,
+	NFS4ERR_NO_GRACE = 10033,
+	NFS4ERR_RECLAIM_BAD = 10034,
+	NFS4ERR_RECLAIM_CONFLICT = 10035,
+	NFS4ERR_BADXDR = 10036,
+	NFS4ERR_LOCKS_HELD = 10037,
+	NFS4ERR_OPENMODE = 10038,
+	NFS4ERR_BADOWNER = 10039,
+	NFS4ERR_BADCHAR = 10040,
+	NFS4ERR_BADNAME = 10041,
+	NFS4ERR_BAD_RANGE = 10042,
+	NFS4ERR_LOCK_NOTSUPP = 10043,
+	NFS4ERR_OP_ILLEGAL = 10044,
+	NFS4ERR_DEADLOCK = 10045,
+	NFS4ERR_FILE_OPEN = 10046,
+	NFS4ERR_ADMIN_REVOKED = 10047,
+	NFS4ERR_CB_PATH_DOWN = 10048,
+	NFS4ERR_BADIOMODE = 10049,
+	NFS4ERR_BADLAYOUT = 10050,
+	NFS4ERR_BAD_SESSION_DIGEST = 10051,
+	NFS4ERR_BADSESSION = 10052,
+	NFS4ERR_BADSLOT = 10053,
+	NFS4ERR_COMPLETE_ALREADY = 10054,
+	NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
+	NFS4ERR_DELEG_ALREADY_WANTED = 10056,
+	NFS4ERR_BACK_CHAN_BUSY = 10057,
+	NFS4ERR_LAYOUTTRYLATER = 10058,
+	NFS4ERR_LAYOUTUNAVAILABLE = 10059,
+	NFS4ERR_NOMATCHING_LAYOUT = 10060,
+	NFS4ERR_RECALLCONFLICT = 10061,
+	NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
+	NFS4ERR_SEQ_MISORDERED = 10063,
+	NFS4ERR_SEQUENCE_POS = 10064,
+	NFS4ERR_REQ_TOO_BIG = 10065,
+	NFS4ERR_REP_TOO_BIG = 10066,
+	NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
+	NFS4ERR_RETRY_UNCACHED_REP = 10068,
+	NFS4ERR_UNSAFE_COMPOUND = 10069,
+	NFS4ERR_TOO_MANY_OPS = 10070,
+	NFS4ERR_OP_NOT_IN_SESSION = 10071,
+	NFS4ERR_HASH_ALG_UNSUPP = 10072,
+	NFS4ERR_CLIENTID_BUSY = 10074,
+	NFS4ERR_PNFS_IO_HOLE = 10075,
+	NFS4ERR_SEQ_FALSE_RETRY = 10076,
+	NFS4ERR_BAD_HIGH_SLOT = 10077,
+	NFS4ERR_DEADSESSION = 10078,
+	NFS4ERR_ENCR_ALG_UNSUPP = 10079,
+	NFS4ERR_PNFS_NO_LAYOUT = 10080,
+	NFS4ERR_NOT_ONLY_OP = 10081,
+	NFS4ERR_WRONG_CRED = 10082,
+	NFS4ERR_WRONG_TYPE = 10083,
+	NFS4ERR_DIRDELEG_UNAVAIL = 10084,
+	NFS4ERR_REJECT_DELEG = 10085,
+	NFS4ERR_RETURNCONFLICT = 10086,
+	NFS4ERR_DELEG_REVOKED = 10087,
+	NFS4ERR_PARTNER_NOTSUPP = 10088,
+	NFS4ERR_PARTNER_NO_AUTH = 10089,
+	NFS4ERR_UNION_NOTSUPP = 10090,
+	NFS4ERR_OFFLOAD_DENIED = 10091,
+	NFS4ERR_WRONG_LFS = 10092,
+	NFS4ERR_BADLABEL = 10093,
+	NFS4ERR_OFFLOAD_NO_REQS = 10094,
+	NFS4ERR_NOXATTR = 10095,
+	NFS4ERR_XATTR2BIG = 10096,
+};
+
+enum nfs_ftype4 {
+	NF4BAD = 0,
+	NF4REG = 1,
+	NF4DIR = 2,
+	NF4BLK = 3,
+	NF4CHR = 4,
+	NF4LNK = 5,
+	NF4SOCK = 6,
+	NF4FIFO = 7,
+	NF4ATTRDIR = 8,
+	NF4NAMEDATTR = 9,
+};
+
+enum open_claim_type4 {
+	NFS4_OPEN_CLAIM_NULL = 0,
+	NFS4_OPEN_CLAIM_PREVIOUS = 1,
+	NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
+	NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
+	NFS4_OPEN_CLAIM_FH = 4,
+	NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5,
+	NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6,
+};
+
+enum opentype4 {
+	NFS4_OPEN_NOCREATE = 0,
+	NFS4_OPEN_CREATE = 1,
+};
+
+enum createmode4 {
+	NFS4_CREATE_UNCHECKED = 0,
+	NFS4_CREATE_GUARDED = 1,
+	NFS4_CREATE_EXCLUSIVE = 2,
+	NFS4_CREATE_EXCLUSIVE4_1 = 3,
+};
+
+enum limit_by4 {
+	NFS4_LIMIT_SIZE = 1,
+	NFS4_LIMIT_BLOCKS = 2,
+};
+
+enum open_delegation_type4 {
+	NFS4_OPEN_DELEGATE_NONE = 0,
+	NFS4_OPEN_DELEGATE_READ = 1,
+	NFS4_OPEN_DELEGATE_WRITE = 2,
+	NFS4_OPEN_DELEGATE_NONE_EXT = 3,
+};
+
+enum why_no_delegation4 {
+	WND4_NOT_WANTED = 0,
+	WND4_CONTENTION = 1,
+	WND4_RESOURCE = 2,
+	WND4_NOT_SUPP_FTYPE = 3,
+	WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
+	WND4_NOT_SUPP_UPGRADE = 5,
+	WND4_NOT_SUPP_DOWNGRADE = 6,
+	WND4_CANCELLED = 7,
+	WND4_IS_DIR = 8,
+};
+
+enum lock_type4 {
+	NFS4_UNLOCK_LT = 0,
+	NFS4_READ_LT = 1,
+	NFS4_WRITE_LT = 2,
+	NFS4_READW_LT = 3,
+	NFS4_WRITEW_LT = 4,
+};
+
+enum {
+	NFSPROC4_CLNT_NULL = 0,
+	NFSPROC4_CLNT_READ = 1,
+	NFSPROC4_CLNT_WRITE = 2,
+	NFSPROC4_CLNT_COMMIT = 3,
+	NFSPROC4_CLNT_OPEN = 4,
+	NFSPROC4_CLNT_OPEN_CONFIRM = 5,
+	NFSPROC4_CLNT_OPEN_NOATTR = 6,
+	NFSPROC4_CLNT_OPEN_DOWNGRADE = 7,
+	NFSPROC4_CLNT_CLOSE = 8,
+	NFSPROC4_CLNT_SETATTR = 9,
+	NFSPROC4_CLNT_FSINFO = 10,
+	NFSPROC4_CLNT_RENEW = 11,
+	NFSPROC4_CLNT_SETCLIENTID = 12,
+	NFSPROC4_CLNT_SETCLIENTID_CONFIRM = 13,
+	NFSPROC4_CLNT_LOCK = 14,
+	NFSPROC4_CLNT_LOCKT = 15,
+	NFSPROC4_CLNT_LOCKU = 16,
+	NFSPROC4_CLNT_ACCESS = 17,
+	NFSPROC4_CLNT_GETATTR = 18,
+	NFSPROC4_CLNT_LOOKUP = 19,
+	NFSPROC4_CLNT_LOOKUP_ROOT = 20,
+	NFSPROC4_CLNT_REMOVE = 21,
+	NFSPROC4_CLNT_RENAME = 22,
+	NFSPROC4_CLNT_LINK = 23,
+	NFSPROC4_CLNT_SYMLINK = 24,
+	NFSPROC4_CLNT_CREATE = 25,
+	NFSPROC4_CLNT_PATHCONF = 26,
+	NFSPROC4_CLNT_STATFS = 27,
+	NFSPROC4_CLNT_READLINK = 28,
+	NFSPROC4_CLNT_READDIR = 29,
+	NFSPROC4_CLNT_SERVER_CAPS = 30,
+	NFSPROC4_CLNT_DELEGRETURN = 31,
+	NFSPROC4_CLNT_GETACL = 32,
+	NFSPROC4_CLNT_SETACL = 33,
+	NFSPROC4_CLNT_FS_LOCATIONS = 34,
+	NFSPROC4_CLNT_RELEASE_LOCKOWNER = 35,
+	NFSPROC4_CLNT_SECINFO = 36,
+	NFSPROC4_CLNT_FSID_PRESENT = 37,
+	NFSPROC4_CLNT_EXCHANGE_ID = 38,
+	NFSPROC4_CLNT_CREATE_SESSION = 39,
+	NFSPROC4_CLNT_DESTROY_SESSION = 40,
+	NFSPROC4_CLNT_SEQUENCE = 41,
+	NFSPROC4_CLNT_GET_LEASE_TIME = 42,
+	NFSPROC4_CLNT_RECLAIM_COMPLETE = 43,
+	NFSPROC4_CLNT_LAYOUTGET = 44,
+	NFSPROC4_CLNT_GETDEVICEINFO = 45,
+	NFSPROC4_CLNT_LAYOUTCOMMIT = 46,
+	NFSPROC4_CLNT_LAYOUTRETURN = 47,
+	NFSPROC4_CLNT_SECINFO_NO_NAME = 48,
+	NFSPROC4_CLNT_TEST_STATEID = 49,
+	NFSPROC4_CLNT_FREE_STATEID = 50,
+	NFSPROC4_CLNT_GETDEVICELIST = 51,
+	NFSPROC4_CLNT_BIND_CONN_TO_SESSION = 52,
+	NFSPROC4_CLNT_DESTROY_CLIENTID = 53,
+	NFSPROC4_CLNT_SEEK = 54,
+	NFSPROC4_CLNT_ALLOCATE = 55,
+	NFSPROC4_CLNT_DEALLOCATE = 56,
+	NFSPROC4_CLNT_LAYOUTSTATS = 57,
+	NFSPROC4_CLNT_CLONE = 58,
+	NFSPROC4_CLNT_COPY = 59,
+	NFSPROC4_CLNT_OFFLOAD_CANCEL = 60,
+	NFSPROC4_CLNT_LOOKUPP = 61,
+	NFSPROC4_CLNT_LAYOUTERROR = 62,
+	NFSPROC4_CLNT_COPY_NOTIFY = 63,
+	NFSPROC4_CLNT_GETXATTR = 64,
+	NFSPROC4_CLNT_SETXATTR = 65,
+	NFSPROC4_CLNT_LISTXATTRS = 66,
+	NFSPROC4_CLNT_REMOVEXATTR = 67,
+	NFSPROC4_CLNT_READ_PLUS = 68,
+};
+
+struct nfs4_sessionid {
+	unsigned char data[16];
+};
+
+struct nfs4_channel_attrs {
+	u32 max_rqst_sz;
+	u32 max_resp_sz;
+	u32 max_resp_sz_cached;
+	u32 max_ops;
+	u32 max_reqs;
+};
+
+struct nfs4_slot {
+	struct nfs4_slot_table *table;
+	struct nfs4_slot *next;
+	long unsigned int generation;
+	u32 slot_nr;
+	u32 seq_nr;
+	u32 seq_nr_last_acked;
+	u32 seq_nr_highest_sent;
+	unsigned int privileged: 1;
+	unsigned int seq_done: 1;
+};
+
+struct nfs4_get_lease_time_args {
+	struct nfs4_sequence_args la_seq_args;
+};
+
+struct nfs4_get_lease_time_res {
+	struct nfs4_sequence_res lr_seq_res;
+	struct nfs_fsinfo *lr_fsinfo;
+};
+
+struct nfs4_xdr_opaque_data;
+
+struct nfs4_xdr_opaque_ops {
+	void (*encode)(struct xdr_stream *, const void *, const struct nfs4_xdr_opaque_data *);
+	void (*free)(struct nfs4_xdr_opaque_data *);
+};
+
+struct nfs4_xdr_opaque_data {
+	const struct nfs4_xdr_opaque_ops *ops;
+	void *data;
+};
+
+struct nfs4_layoutdriver_data {
+	struct page **pages;
+	__u32 pglen;
+	__u32 len;
+};
+
+struct nfs4_layoutget_args {
+	struct nfs4_sequence_args seq_args;
+	__u32 type;
+	struct pnfs_layout_range range;
+	__u64 minlength;
+	__u32 maxcount;
+	struct inode *inode;
+	struct nfs_open_context *ctx;
+	nfs4_stateid stateid;
+	struct nfs4_layoutdriver_data layout;
+};
+
+struct nfs4_layoutget_res {
+	struct nfs4_sequence_res seq_res;
+	int status;
+	__u32 return_on_close;
+	struct pnfs_layout_range range;
+	__u32 type;
+	nfs4_stateid stateid;
+	struct nfs4_layoutdriver_data *layoutp;
+};
+
+struct nfs4_layoutreturn_args {
+	struct nfs4_sequence_args seq_args;
+	struct pnfs_layout_hdr *layout;
+	struct inode *inode;
+	struct pnfs_layout_range range;
+	nfs4_stateid stateid;
+	__u32 layout_type;
+	struct nfs4_xdr_opaque_data *ld_private;
+};
+
+struct nfs4_layoutreturn_res {
+	struct nfs4_sequence_res seq_res;
+	u32 lrs_present;
+	nfs4_stateid stateid;
+};
+
+struct stateowner_id {
+	__u64 create_time;
+	__u32 uniquifier;
+};
+
+struct nfs_openargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct nfs_seqid *seqid;
+	int open_flags;
+	fmode_t fmode;
+	u32 share_access;
+	u32 access;
+	__u64 clientid;
+	struct stateowner_id id;
+	union {
+		struct {
+			struct iattr *attrs;
+			nfs4_verifier verifier;
+		};
+		nfs4_stateid delegation;
+		fmode_t delegation_type;
+	} u;
+	const struct qstr *name;
+	const struct nfs_server *server;
+	const u32 *bitmask;
+	const u32 *open_bitmap;
+	enum open_claim_type4 claim;
+	enum createmode4 createmode;
+	const struct nfs4_label *label;
+	umode_t umask;
+	struct nfs4_layoutget_args *lg_args;
+};
+
+struct nfs_openres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_fh fh;
+	struct nfs4_change_info cinfo;
+	__u32 rflags;
+	struct nfs_fattr *f_attr;
+	struct nfs_seqid *seqid;
+	const struct nfs_server *server;
+	fmode_t delegation_type;
+	nfs4_stateid delegation;
+	long unsigned int pagemod_limit;
+	__u32 do_recall;
+	__u32 attrset[3];
+	struct nfs4_string *owner;
+	struct nfs4_string *group_owner;
+	__u32 access_request;
+	__u32 access_supported;
+	__u32 access_result;
+	struct nfs4_layoutget_res *lg_res;
+};
+
+struct nfs_open_confirmargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	nfs4_stateid *stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_open_confirmres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_closeargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+	fmode_t fmode;
+	u32 share_access;
+	const u32 *bitmask;
+	u32 bitmask_store[3];
+	struct nfs4_layoutreturn_args *lr_args;
+};
+
+struct nfs_closeres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_fattr *fattr;
+	struct nfs_seqid *seqid;
+	const struct nfs_server *server;
+	struct nfs4_layoutreturn_res *lr_res;
+	int lr_ret;
+};
+
+struct nfs_lowner {
+	__u64 clientid;
+	__u64 id;
+	dev_t s_dev;
+};
+
+struct nfs_lock_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_seqid *lock_seqid;
+	nfs4_stateid lock_stateid;
+	struct nfs_seqid *open_seqid;
+	nfs4_stateid open_stateid;
+	struct nfs_lowner lock_owner;
+	unsigned char block: 1;
+	unsigned char reclaim: 1;
+	unsigned char new_lock: 1;
+	unsigned char new_lock_owner: 1;
+};
+
+struct nfs_lock_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *lock_seqid;
+	struct nfs_seqid *open_seqid;
+};
+
+struct nfs_locku_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_seqid *seqid;
+	nfs4_stateid stateid;
+};
+
+struct nfs_locku_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_lockt_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_lowner lock_owner;
+};
+
+struct nfs_lockt_res {
+	struct nfs4_sequence_res seq_res;
+	struct file_lock *denied;
+};
+
+struct nfs_release_lockowner_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_lowner lock_owner;
+};
+
+struct nfs4_delegreturnargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fhandle;
+	const nfs4_stateid *stateid;
+	const u32 *bitmask;
+	u32 bitmask_store[3];
+	struct nfs4_layoutreturn_args *lr_args;
+};
+
+struct nfs4_delegreturnres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	struct nfs_server *server;
+	struct nfs4_layoutreturn_res *lr_res;
+	int lr_ret;
+};
+
+struct nfs_setattrargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	nfs4_stateid stateid;
+	struct iattr *iap;
+	const struct nfs_server *server;
+	const u32 *bitmask;
+	const struct nfs4_label *label;
+};
+
+enum nfs4_acl_type {
+	NFS4ACL_NONE = 0,
+	NFS4ACL_ACL = 1,
+	NFS4ACL_DACL = 2,
+	NFS4ACL_SACL = 3,
+};
+
+struct nfs_setaclargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	struct page **acl_pages;
+};
+
+struct nfs_setaclres {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs_getaclargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	struct page **acl_pages;
+};
+
+struct nfs_getaclres {
+	struct nfs4_sequence_res seq_res;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	size_t acl_data_offset;
+	int acl_flags;
+	struct page *acl_scratch;
+};
+
+struct nfs_setattrres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+};
+
+typedef u64 clientid4;
+
+struct nfs4_accessargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+	u32 access;
+};
+
+struct nfs4_accessres {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	u32 supported;
+	u32 access;
+};
+
+struct nfs4_create_arg {
+	struct nfs4_sequence_args seq_args;
+	u32 ftype;
+	union {
+		struct {
+			struct page **pages;
+			unsigned int len;
+		} symlink;
+		struct {
+			u32 specdata1;
+			u32 specdata2;
+		} device;
+	} u;
+	const struct qstr *name;
+	const struct nfs_server *server;
+	const struct iattr *attrs;
+	const struct nfs_fh *dir_fh;
+	const u32 *bitmask;
+	const struct nfs4_label *label;
+	umode_t umask;
+};
+
+struct nfs4_create_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	struct nfs4_change_info dir_cinfo;
+};
+
+struct nfs4_fsinfo_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_fsinfo_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fsinfo *fsinfo;
+};
+
+struct nfs4_getattr_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_getattr_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs4_link_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+	const u32 *bitmask;
+};
+
+struct nfs4_link_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs4_change_info cinfo;
+	struct nfs_fattr *dir_attr;
+};
+
+struct nfs4_lookup_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+	const u32 *bitmask;
+};
+
+struct nfs4_lookup_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs_fh *fh;
+};
+
+struct nfs4_lookupp_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_lookupp_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs_fh *fh;
+};
+
+struct nfs4_lookup_root_arg {
+	struct nfs4_sequence_args seq_args;
+	const u32 *bitmask;
+};
+
+struct nfs4_pathconf_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_pathconf_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_pathconf *pathconf;
+};
+
+struct nfs4_readdir_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	u64 cookie;
+	nfs4_verifier verifier;
+	u32 count;
+	struct page **pages;
+	unsigned int pgbase;
+	const u32 *bitmask;
+	bool plus;
+};
+
+struct nfs4_readdir_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_verifier verifier;
+	unsigned int pgbase;
+};
+
+struct nfs4_readlink {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	unsigned int pgbase;
+	unsigned int pglen;
+	struct page **pages;
+};
+
+struct nfs4_readlink_res {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_setclientid {
+	const nfs4_verifier *sc_verifier;
+	u32 sc_prog;
+	unsigned int sc_netid_len;
+	char sc_netid[6];
+	unsigned int sc_uaddr_len;
+	char sc_uaddr[58];
+	struct nfs_client *sc_clnt;
+	struct rpc_cred *sc_cred;
+};
+
+struct nfs4_setclientid_res {
+	u64 clientid;
+	nfs4_verifier confirm;
+};
+
+struct nfs4_statfs_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_statfs_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fsstat *fsstat;
+};
+
+struct nfs4_server_caps_arg {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fhandle;
+	const u32 *bitmask;
+};
+
+struct nfs4_server_caps_res {
+	struct nfs4_sequence_res seq_res;
+	u32 attr_bitmask[3];
+	u32 exclcreat_bitmask[3];
+	u32 acl_bitmask;
+	u32 has_links;
+	u32 has_symlinks;
+	u32 fh_expire_type;
+	u32 case_insensitive;
+	u32 case_preserving;
+};
+
+struct nfs4_fs_locations_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct nfs_fh *fh;
+	const struct qstr *name;
+	struct page *page;
+	const u32 *bitmask;
+	clientid4 clientid;
+	unsigned char migration: 1;
+	unsigned char renew: 1;
+};
+
+struct nfs4_fs_locations_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_fs_locations *fs_locations;
+	unsigned char migration: 1;
+	unsigned char renew: 1;
+};
+
+struct nfs4_secinfo4 {
+	u32 flavor;
+	struct rpcsec_gss_info flavor_info;
+};
+
+struct nfs4_secinfo_flavors {
+	unsigned int num_flavors;
+	struct nfs4_secinfo4 flavors[0];
+};
+
+struct nfs4_secinfo_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+};
+
+struct nfs4_secinfo_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_secinfo_flavors *flavors;
+};
+
+struct nfs4_fsid_present_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	clientid4 clientid;
+	unsigned char renew: 1;
+};
+
+struct nfs4_fsid_present_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fh *fh;
+	unsigned char renew: 1;
+};
+
+struct nfs4_slot_table {
+	struct nfs4_session *session;
+	struct nfs4_slot *slots;
+	long unsigned int used_slots[16];
+	spinlock_t slot_tbl_lock;
+	struct rpc_wait_queue slot_tbl_waitq;
+	wait_queue_head_t slot_waitq;
+	u32 max_slots;
+	u32 max_slotid;
+	u32 highest_used_slotid;
+	u32 target_highest_slotid;
+	u32 server_highest_slotid;
+	s32 d_target_highest_slotid;
+	s32 d2_target_highest_slotid;
+	long unsigned int generation;
+	struct completion complete;
+	long unsigned int slot_tbl_state;
+};
+
+struct nfs4_session {
+	struct nfs4_sessionid sess_id;
+	u32 flags;
+	long unsigned int session_state;
+	u32 hash_alg;
+	u32 ssv_len;
+	struct nfs4_channel_attrs fc_attrs;
+	struct nfs4_slot_table fc_slot_table;
+	struct nfs4_channel_attrs bc_attrs;
+	struct nfs4_slot_table bc_slot_table;
+	struct nfs_client *clp;
+};
+
+struct compound_hdr {
+	int32_t status;
+	uint32_t nops;
+	__be32 *nops_p;
+	uint32_t taglen;
+	char *tag;
+	uint32_t replen;
+	u32 minorversion;
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+enum rpc_accept_stat {
+	RPC_SUCCESS = 0,
+	RPC_PROG_UNAVAIL = 1,
+	RPC_PROG_MISMATCH = 2,
+	RPC_PROC_UNAVAIL = 3,
+	RPC_GARBAGE_ARGS = 4,
+	RPC_SYSTEM_ERR = 5,
+	RPC_DROP_REPLY = 60000,
+};
+
+struct nlm_reboot {
+	char *mon;
+	unsigned int len;
+	u32 state;
+	struct nsm_private priv;
+};
+
+struct nlmsvc_binding {
+	__be32 (*fopen)(struct svc_rqst *, struct nfs_fh *, struct file **, int);
+	void (*fclose)(struct file *);
+};
+
+struct nlm_block;
+
+struct nlm_rqst {
+	refcount_t a_count;
+	unsigned int a_flags;
+	struct nlm_host *a_host;
+	struct nlm_args a_args;
+	struct nlm_res a_res;
+	struct nlm_block *a_block;
+	unsigned int a_retries;
+	u8 a_owner[74];
+	void *a_callback_data;
+};
+
+struct nlm_file;
+
+struct nlm_block {
+	struct kref b_count;
+	struct list_head b_list;
+	struct list_head b_flist;
+	struct nlm_rqst *b_call;
+	struct svc_serv *b_daemon;
+	struct nlm_host *b_host;
+	long unsigned int b_when;
+	unsigned int b_id;
+	unsigned char b_granted;
+	struct nlm_file *b_file;
+	struct cache_req *b_cache_req;
+	struct cache_deferred_req *b_deferred_req;
+	unsigned int b_flags;
+};
+
+struct nlm_share;
+
+struct nlm_file {
+	struct hlist_node f_list;
+	struct nfs_fh f_handle;
+	struct file *f_file[2];
+	struct nlm_share *f_shares;
+	struct list_head f_blocks;
+	unsigned int f_locks;
+	unsigned int f_count;
+	struct mutex f_mutex;
+};
+
+struct nlm_share {
+	struct nlm_share *s_next;
+	struct nlm_host *s_host;
+	struct nlm_file *s_file;
+	struct xdr_netobj s_owner;
+	u32 s_access;
+	u32 s_mode;
+};
+
+typedef uint32_t prid_t;
+
+typedef uint64_t xfs_extnum_t;
+
+typedef int64_t xfs_fsize_t;
+
+typedef struct {
+	struct rw_semaphore mr_lock;
+} mrlock_t;
+
+struct xfs_bmdr_block {
+	__be16 bb_level;
+	__be16 bb_numrecs;
+};
+
+typedef struct xfs_bmdr_block xfs_bmdr_block_t;
+
+typedef uint64_t xfs_bmbt_rec_base_t;
+
+typedef struct xfs_bmbt_key xfs_bmbt_key_t;
+
+typedef __be64 xfs_bmbt_ptr_t;
+
+typedef __be64 xfs_bmdr_ptr_t;
+
+struct xfs_imap {
+	xfs_daddr_t im_blkno;
+	short unsigned int im_len;
+	short unsigned int im_boffset;
+};
+
+struct xfs_ifork {
+	int64_t if_bytes;
+	struct xfs_btree_block *if_broot;
+	unsigned int if_seq;
+	int if_height;
+	union {
+		void *if_root;
+		char *if_data;
+	} if_u1;
+	xfs_extnum_t if_nextents;
+	short int if_broot_bytes;
+	int8_t if_format;
+};
+
+struct xfs_dquot;
+
+struct xfs_inode_log_item;
+
+struct xfs_inode {
+	struct xfs_mount *i_mount;
+	struct xfs_dquot *i_udquot;
+	struct xfs_dquot *i_gdquot;
+	struct xfs_dquot *i_pdquot;
+	xfs_ino_t i_ino;
+	struct xfs_imap i_imap;
+	struct xfs_ifork *i_cowfp;
+	struct xfs_ifork i_df;
+	struct xfs_ifork i_af;
+	struct xfs_inode_log_item *i_itemp;
+	mrlock_t i_lock;
+	atomic_t i_pincount;
+	struct llist_node i_gclist;
+	uint16_t i_checked;
+	uint16_t i_sick;
+	spinlock_t i_flags_lock;
+	long unsigned int i_flags;
+	uint64_t i_delayed_blks;
+	xfs_fsize_t i_disk_size;
+	xfs_rfsblock_t i_nblocks;
+	prid_t i_projid;
+	xfs_extlen_t i_extsize;
+	union {
+		xfs_extlen_t i_cowextsize;
+		uint16_t i_flushiter;
+	};
+	uint8_t i_forkoff;
+	uint16_t i_diflags;
+	uint64_t i_diflags2;
+	struct timespec64 i_crtime;
+	xfs_agino_t i_next_unlinked;
+	xfs_agino_t i_prev_unlinked;
+	struct inode i_vnode;
+	spinlock_t i_ioend_lock;
+	struct work_struct i_ioend_work;
+	struct list_head i_ioend_list;
+};
+
+struct xfs_agi {
+	__be32 agi_magicnum;
+	__be32 agi_versionnum;
+	__be32 agi_seqno;
+	__be32 agi_length;
+	__be32 agi_count;
+	__be32 agi_root;
+	__be32 agi_level;
+	__be32 agi_freecount;
+	__be32 agi_newino;
+	__be32 agi_dirino;
+	__be32 agi_unlinked[64];
+	uuid_t agi_uuid;
+	__be32 agi_crc;
+	__be32 agi_pad32;
+	__be64 agi_lsn;
+	__be32 agi_free_root;
+	__be32 agi_free_level;
+	__be32 agi_iblocks;
+	__be32 agi_fblocks;
+};
+
+typedef uint32_t xfs_dablk_t;
+
+typedef uint xfs_dir2_data_aoff_t;
+
+struct xfs_da_geometry {
+	unsigned int blksize;
+	unsigned int fsbcount;
+	uint8_t fsblog;
+	uint8_t blklog;
+	unsigned int node_hdr_size;
+	unsigned int node_ents;
+	unsigned int magicpct;
+	xfs_dablk_t datablk;
+	unsigned int leaf_hdr_size;
+	unsigned int leaf_max_ents;
+	xfs_dablk_t leafblk;
+	unsigned int free_hdr_size;
+	unsigned int free_max_bests;
+	xfs_dablk_t freeblk;
+	xfs_extnum_t max_extents;
+	xfs_dir2_data_aoff_t data_first_offset;
+	size_t data_entry_offset;
+};
+
+struct xfs_da_blkinfo {
+	__be32 forw;
+	__be32 back;
+	__be16 magic;
+	__be16 pad;
+};
+
+typedef struct xfs_da_blkinfo xfs_da_blkinfo_t;
+
+struct xfs_da3_blkinfo {
+	struct xfs_da_blkinfo hdr;
+	__be32 crc;
+	__be64 blkno;
+	__be64 lsn;
+	uuid_t uuid;
+	__be64 owner;
+};
+
+struct xfs_da_node_hdr {
+	struct xfs_da_blkinfo info;
+	__be16 __count;
+	__be16 __level;
+};
+
+struct xfs_da_node_entry {
+	__be32 hashval;
+	__be32 before;
+};
+
+struct xfs_da_intnode {
+	struct xfs_da_node_hdr hdr;
+	struct xfs_da_node_entry __btree[0];
+};
+
+struct xfs_attr_leaf_map {
+	__be16 base;
+	__be16 size;
+};
+
+typedef struct xfs_attr_leaf_map xfs_attr_leaf_map_t;
+
+struct xfs_attr_leaf_hdr {
+	xfs_da_blkinfo_t info;
+	__be16 count;
+	__be16 usedbytes;
+	__be16 firstused;
+	__u8 holes;
+	__u8 pad1;
+	xfs_attr_leaf_map_t freemap[3];
+};
+
+typedef struct xfs_attr_leaf_hdr xfs_attr_leaf_hdr_t;
+
+struct xfs_attr_leaf_entry {
+	__be32 hashval;
+	__be16 nameidx;
+	__u8 flags;
+	__u8 pad2;
+};
+
+typedef struct xfs_attr_leaf_entry xfs_attr_leaf_entry_t;
+
+struct xfs_attr_leaf_name_remote {
+	__be32 valueblk;
+	__be32 valuelen;
+	__u8 namelen;
+	__u8 name[1];
+};
+
+typedef struct xfs_attr_leaf_name_remote xfs_attr_leaf_name_remote_t;
+
+struct xfs_attr_leafblock {
+	xfs_attr_leaf_hdr_t hdr;
+	xfs_attr_leaf_entry_t entries[1];
+};
+
+typedef struct xfs_attr_leafblock xfs_attr_leafblock_t;
+
+struct xfs_attr3_leaf_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 count;
+	__be16 usedbytes;
+	__be16 firstused;
+	__u8 holes;
+	__u8 pad1;
+	struct xfs_attr_leaf_map freemap[3];
+	__be32 pad2;
+};
+
+struct xfs_attr3_leafblock {
+	struct xfs_attr3_leaf_hdr hdr;
+	struct xfs_attr_leaf_entry entries[1];
+};
+
+struct xfs_da3_icnode_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t level;
+	struct xfs_da_node_entry *btree;
+};
+
+typedef struct xfs_inode xfs_inode_t;
+
+struct xfs_attr3_icleaf_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t usedbytes;
+	uint32_t firstused;
+	__u8 holes;
+	struct {
+		uint16_t base;
+		uint16_t size;
+	} freemap[3];
+};
+
+struct xfs_fsop_geom {
+	__u32 blocksize;
+	__u32 rtextsize;
+	__u32 agblocks;
+	__u32 agcount;
+	__u32 logblocks;
+	__u32 sectsize;
+	__u32 inodesize;
+	__u32 imaxpct;
+	__u64 datablocks;
+	__u64 rtblocks;
+	__u64 rtextents;
+	__u64 logstart;
+	unsigned char uuid[16];
+	__u32 sunit;
+	__u32 swidth;
+	__s32 version;
+	__u32 flags;
+	__u32 logsectsize;
+	__u32 rtsectsize;
+	__u32 dirblocksize;
+	__u32 logsunit;
+	uint32_t sick;
+	uint32_t checked;
+	__u64 reserved[17];
+};
+
+struct xfs_ag_geometry {
+	uint32_t ag_number;
+	uint32_t ag_length;
+	uint32_t ag_freeblks;
+	uint32_t ag_icount;
+	uint32_t ag_ifree;
+	uint32_t ag_sick;
+	uint32_t ag_checked;
+	uint32_t ag_flags;
+	uint64_t ag_reserved[12];
+};
+
+struct xfs_bulkstat {
+	uint64_t bs_ino;
+	uint64_t bs_size;
+	uint64_t bs_blocks;
+	uint64_t bs_xflags;
+	int64_t bs_atime;
+	int64_t bs_mtime;
+	int64_t bs_ctime;
+	int64_t bs_btime;
+	uint32_t bs_gen;
+	uint32_t bs_uid;
+	uint32_t bs_gid;
+	uint32_t bs_projectid;
+	uint32_t bs_atime_nsec;
+	uint32_t bs_mtime_nsec;
+	uint32_t bs_ctime_nsec;
+	uint32_t bs_btime_nsec;
+	uint32_t bs_blksize;
+	uint32_t bs_rdev;
+	uint32_t bs_cowextsize_blks;
+	uint32_t bs_extsize_blks;
+	uint32_t bs_nlink;
+	uint32_t bs_extents;
+	uint32_t bs_aextents;
+	uint16_t bs_version;
+	uint16_t bs_forkoff;
+	uint16_t bs_sick;
+	uint16_t bs_checked;
+	uint16_t bs_mode;
+	uint16_t bs_pad2;
+	uint64_t bs_extents64;
+	uint64_t bs_pad[6];
+};
+
+struct ioctl_sick_map {
+	unsigned int sick_mask;
+	unsigned int ioctl_mask;
+};
+
+struct xfs_name {
+	const unsigned char *name;
+	int len;
+	int type;
+};
+
+typedef struct xfs_bmbt_irec xfs_bmbt_irec_t;
+
+enum xfs_dinode_fmt {
+	XFS_DINODE_FMT_DEV = 0,
+	XFS_DINODE_FMT_LOCAL = 1,
+	XFS_DINODE_FMT_EXTENTS = 2,
+	XFS_DINODE_FMT_BTREE = 3,
+	XFS_DINODE_FMT_UUID = 4,
+};
+
+enum xfs_blft {
+	XFS_BLFT_UNKNOWN_BUF = 0,
+	XFS_BLFT_UDQUOT_BUF = 1,
+	XFS_BLFT_PDQUOT_BUF = 2,
+	XFS_BLFT_GDQUOT_BUF = 3,
+	XFS_BLFT_BTREE_BUF = 4,
+	XFS_BLFT_AGF_BUF = 5,
+	XFS_BLFT_AGFL_BUF = 6,
+	XFS_BLFT_AGI_BUF = 7,
+	XFS_BLFT_DINO_BUF = 8,
+	XFS_BLFT_SYMLINK_BUF = 9,
+	XFS_BLFT_DIR_BLOCK_BUF = 10,
+	XFS_BLFT_DIR_DATA_BUF = 11,
+	XFS_BLFT_DIR_FREE_BUF = 12,
+	XFS_BLFT_DIR_LEAF1_BUF = 13,
+	XFS_BLFT_DIR_LEAFN_BUF = 14,
+	XFS_BLFT_DA_NODE_BUF = 15,
+	XFS_BLFT_ATTR_LEAF_BUF = 16,
+	XFS_BLFT_ATTR_RMT_BUF = 17,
+	XFS_BLFT_SB_BUF = 18,
+	XFS_BLFT_RTBITMAP_BUF = 19,
+	XFS_BLFT_RTSUMMARY_BUF = 20,
+	XFS_BLFT_MAX_BUF = 32,
+};
+
+struct xfs_buf_log_format {
+	short unsigned int blf_type;
+	short unsigned int blf_size;
+	short unsigned int blf_flags;
+	short unsigned int blf_len;
+	int64_t blf_blkno;
+	unsigned int blf_map_size;
+	unsigned int blf_data_map[17];
+};
+
+struct xfs_buf_log_item {
+	struct xfs_log_item bli_item;
+	struct xfs_buf *bli_buf;
+	unsigned int bli_flags;
+	unsigned int bli_recur;
+	atomic_t bli_refcount;
+	int bli_format_count;
+	struct xfs_buf_log_format *bli_formats;
+	struct xfs_buf_log_format __bli_format;
+};
+
+typedef __be64 xfs_timestamp_t;
+
+struct xfs_dinode {
+	__be16 di_magic;
+	__be16 di_mode;
+	__u8 di_version;
+	__u8 di_format;
+	__be16 di_onlink;
+	__be32 di_uid;
+	__be32 di_gid;
+	__be32 di_nlink;
+	__be16 di_projid_lo;
+	__be16 di_projid_hi;
+	union {
+		__be64 di_big_nextents;
+		__be64 di_v3_pad;
+		struct {
+			__u8 di_v2_pad[6];
+			__be16 di_flushiter;
+		};
+	};
+	xfs_timestamp_t di_atime;
+	xfs_timestamp_t di_mtime;
+	xfs_timestamp_t di_ctime;
+	__be64 di_size;
+	__be64 di_nblocks;
+	__be32 di_extsize;
+	union {
+		struct {
+			__be32 di_nextents;
+			__be16 di_anextents;
+		} __attribute__((packed));
+		struct {
+			__be32 di_big_anextents;
+			__be16 di_nrext64_pad;
+		} __attribute__((packed));
+	};
+	__u8 di_forkoff;
+	__s8 di_aformat;
+	__be32 di_dmevmask;
+	__be16 di_dmstate;
+	__be16 di_flags;
+	__be32 di_gen;
+	__be32 di_next_unlinked;
+	__le32 di_crc;
+	__be64 di_changecount;
+	__be64 di_lsn;
+	__be64 di_flags2;
+	__be32 di_cowextsize;
+	__u8 di_pad2[12];
+	xfs_timestamp_t di_crtime;
+	__be64 di_ino;
+	uuid_t di_uuid;
+};
+
+struct xlog_op_header {
+	__be32 oh_tid;
+	__be32 oh_len;
+	__u8 oh_clientid;
+	__u8 oh_flags;
+	__u16 oh_res2;
+};
+
+struct xfs_inode_log_format {
+	uint16_t ilf_type;
+	uint16_t ilf_size;
+	uint32_t ilf_fields;
+	uint16_t ilf_asize;
+	uint16_t ilf_dsize;
+	uint32_t ilf_pad;
+	uint64_t ilf_ino;
+	union {
+		uint32_t ilfu_rdev;
+		uint8_t __pad[16];
+	} ilf_u;
+	int64_t ilf_blkno;
+	int32_t ilf_len;
+	int32_t ilf_boffset;
+};
+
+struct xfs_inode_log_format_32 {
+	uint16_t ilf_type;
+	uint16_t ilf_size;
+	uint32_t ilf_fields;
+	uint16_t ilf_asize;
+	uint16_t ilf_dsize;
+	uint64_t ilf_ino;
+	union {
+		uint32_t ilfu_rdev;
+		uint8_t __pad[16];
+	} ilf_u;
+	int64_t ilf_blkno;
+	int32_t ilf_len;
+	int32_t ilf_boffset;
+} __attribute__((packed));
+
+typedef uint64_t xfs_log_timestamp_t;
+
+struct xfs_log_legacy_timestamp {
+	int32_t t_sec;
+	int32_t t_nsec;
+};
+
+struct xfs_log_dinode {
+	uint16_t di_magic;
+	uint16_t di_mode;
+	int8_t di_version;
+	int8_t di_format;
+	uint8_t di_pad3[2];
+	uint32_t di_uid;
+	uint32_t di_gid;
+	uint32_t di_nlink;
+	uint16_t di_projid_lo;
+	uint16_t di_projid_hi;
+	union {
+		uint64_t di_big_nextents;
+		uint64_t di_v3_pad;
+		struct {
+			uint8_t di_v2_pad[6];
+			uint16_t di_flushiter;
+		};
+	};
+	xfs_log_timestamp_t di_atime;
+	xfs_log_timestamp_t di_mtime;
+	xfs_log_timestamp_t di_ctime;
+	xfs_fsize_t di_size;
+	xfs_rfsblock_t di_nblocks;
+	xfs_extlen_t di_extsize;
+	union {
+		struct {
+			uint32_t di_nextents;
+			uint16_t di_anextents;
+		} __attribute__((packed));
+		struct {
+			uint32_t di_big_anextents;
+			uint16_t di_nrext64_pad;
+		} __attribute__((packed));
+	};
+	uint8_t di_forkoff;
+	int8_t di_aformat;
+	uint32_t di_dmevmask;
+	uint16_t di_dmstate;
+	uint16_t di_flags;
+	uint32_t di_gen;
+	xfs_agino_t di_next_unlinked;
+	uint32_t di_crc;
+	uint64_t di_changecount;
+	xfs_lsn_t di_lsn;
+	uint64_t di_flags2;
+	uint32_t di_cowextsize;
+	uint8_t di_pad2[12];
+	xfs_log_timestamp_t di_crtime;
+	xfs_ino_t di_ino;
+	uuid_t di_uuid;
+};
+
+struct xfs_inode_log_item {
+	struct xfs_log_item ili_item;
+	struct xfs_inode *ili_inode;
+	short unsigned int ili_lock_flags;
+	spinlock_t ili_lock;
+	unsigned int ili_last_fields;
+	unsigned int ili_fields;
+	unsigned int ili_fsync_fields;
+	xfs_lsn_t ili_flush_lsn;
+	xfs_csn_t ili_commit_seq;
+};
+
+typedef int __kernel_key_t;
+
+typedef unsigned int __kernel_mode_t;
+
+typedef int __kernel_ipc_pid_t;
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+typedef __kernel_key_t key_t;
+
+struct ipc_perm {
+	__kernel_key_t key;
+	__kernel_uid_t uid;
+	__kernel_gid_t gid;
+	__kernel_uid_t cuid;
+	__kernel_gid_t cgid;
+	__kernel_mode_t mode;
+	short unsigned int seq;
+};
+
+struct ipc64_perm {
+	__kernel_key_t key;
+	__kernel_uid_t uid;
+	__kernel_gid_t gid;
+	__kernel_uid_t cuid;
+	__kernel_gid_t cgid;
+	__kernel_mode_t mode;
+	unsigned int seq;
+	unsigned int __pad1;
+	long long unsigned int __unused1;
+	long long unsigned int __unused2;
+};
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	long unsigned int seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct shmid_ds {
+	struct ipc_perm shm_perm;
+	int shm_segsz;
+	__kernel_old_time_t shm_atime;
+	__kernel_old_time_t shm_dtime;
+	__kernel_old_time_t shm_ctime;
+	__kernel_ipc_pid_t shm_cpid;
+	__kernel_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	void *shm_unused2;
+	void *shm_unused3;
+};
+
+struct shmid64_ds {
+	struct ipc64_perm shm_perm;
+	long int shm_atime;
+	long int shm_dtime;
+	long int shm_ctime;
+	__kernel_size_t shm_segsz;
+	__kernel_pid_t shm_cpid;
+	__kernel_pid_t shm_lpid;
+	long unsigned int shm_nattch;
+	long unsigned int __unused5;
+	long unsigned int __unused6;
+};
+
+struct shminfo64 {
+	long unsigned int shmmax;
+	long unsigned int shmmin;
+	long unsigned int shmmni;
+	long unsigned int shmseg;
+	long unsigned int shmall;
+	long unsigned int __unused1;
+	long unsigned int __unused2;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct shminfo {
+	int shmmax;
+	int shmmin;
+	int shmmni;
+	int shmseg;
+	int shmall;
+};
+
+struct shm_info {
+	int used_ids;
+	__kernel_ulong_t shm_tot;
+	__kernel_ulong_t shm_rss;
+	__kernel_ulong_t shm_swp;
+	__kernel_ulong_t swap_attempts;
+	__kernel_ulong_t swap_successes;
+};
+
+struct ipc_params {
+	key_t key;
+	int flg;
+	union {
+		size_t size;
+		int nsems;
 	} u;
 };
 
-struct OpalMsgNode {
+struct ipc_ops {
+	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
+	int (*associate)(struct kern_ipc_perm *, int);
+	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+};
+
+struct shmid_kernel {
+	struct kern_ipc_perm shm_perm;
+	struct file *shm_file;
+	long unsigned int shm_nattch;
+	long unsigned int shm_segsz;
+	time64_t shm_atim;
+	time64_t shm_dtim;
+	time64_t shm_ctim;
+	struct pid *shm_cprid;
+	struct pid *shm_lprid;
+	struct ucounts *mlock_ucounts;
+	struct task_struct *shm_creator;
+	struct list_head shm_clist;
+	struct ipc_namespace *ns;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct shm_file_data {
+	int id;
+	struct ipc_namespace *ns;
+	struct file *file;
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	void *__ctx[0];
+};
+
+struct crypto_spawn {
 	struct list_head list;
-	struct opal_msg msg;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
 };
 
-struct platform_driver {
-	int (*probe)(struct platform_device *);
-	int (*remove)(struct platform_device *);
-	void (*shutdown)(struct platform_device *);
-	int (*suspend)(struct platform_device *, pm_message_t);
-	int (*resume)(struct platform_device *);
-	struct device_driver driver;
-	const struct platform_device_id *id_table;
-	bool prevent_deferred_probe;
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	void *__ctx[0];
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	struct crypto_alg base;
+};
+
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
+};
+
+struct disk_stats {
+	u64 nsecs[4];
+	long unsigned int sectors[4];
+	long unsigned int ios[4];
+	long unsigned int merges[4];
+	long unsigned int io_ticks;
+	local_t in_flight[2];
 };
 
 enum {
-	OPAL_IMC_COUNTERS_NEST = 1,
-	OPAL_IMC_COUNTERS_CORE = 2,
-	OPAL_IMC_COUNTERS_TRACE = 3,
+	BIO_NO_PAGE_REF = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_WORKINGSET = 3,
+	BIO_QUIET = 4,
+	BIO_CHAIN = 5,
+	BIO_REFFED = 6,
+	BIO_THROTTLED = 7,
+	BIO_TRACE_COMPLETION = 8,
+	BIO_CGROUP_ACCT = 9,
+	BIO_QOS_THROTTLED = 10,
+	BIO_QOS_MERGED = 11,
+	BIO_REMAPPED = 12,
+	BIO_ZONE_WRITE_LOCKED = 13,
+	BIO_FLAG_LAST = 14,
 };
 
-struct imc_mem_info {
-	u64 *vbase;
-	u32 id;
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
 };
 
-struct imc_events {
-	u32 value;
-	char *name;
-	char *unit;
-	char *scale;
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+	RQ_QOS_IOPRIO = 3,
 };
 
-struct imc_pmu {
-	struct pmu pmu;
-	struct imc_mem_info *mem_info;
-	struct imc_events *events;
-	const struct attribute_group *attr_groups[4];
-	u32 counter_mem_size;
-	int domain;
-	bool imc_counter_mmaped;
+struct rq_qos_ops;
+
+struct rq_qos {
+	struct rq_qos_ops *ops;
+	struct request_queue *q;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+enum xen_domain_type {
+	XEN_NATIVE = 0,
+	XEN_PV_DOMAIN = 1,
+	XEN_HVM_DOMAIN = 2,
+};
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
 };
 
 enum {
-	IMC_TYPE_THREAD = 1,
-	IMC_TYPE_TRACE = 2,
-	IMC_TYPE_CORE = 4,
-	IMC_TYPE_CHIP = 16,
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
 };
 
-enum vas_cop_type {
-	VAS_COP_TYPE_FAULT = 0,
-	VAS_COP_TYPE_842 = 1,
-	VAS_COP_TYPE_842_HIPRI = 2,
-	VAS_COP_TYPE_GZIP = 3,
-	VAS_COP_TYPE_GZIP_HIPRI = 4,
-	VAS_COP_TYPE_FTW = 5,
-	VAS_COP_TYPE_MAX = 6,
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
 };
 
-struct vas_window;
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
 
-struct vas_instance {
-	int vas_id;
-	struct ida ida;
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+struct disk_events {
 	struct list_head node;
-	struct platform_device *pdev;
-	u64 hvwc_bar_start;
-	u64 uwc_bar_start;
-	u64 paste_base_addr;
-	u64 paste_win_id_shift;
-	u64 irq_port;
-	int virq;
-	int fault_crbs;
-	int fault_fifo_size;
-	int fifo_in_progress;
-	spinlock_t fault_lock;
-	void *fault_fifo;
-	struct vas_window *fault_win;
+	struct gendisk *disk;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long int poll_msecs;
+	struct delayed_work dwork;
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	long unsigned int bits[0];
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	long unsigned int offset;
+};
+
+typedef u32 depot_stack_handle_t;
+
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 slabindex: 17;
+		u32 offset: 14;
+		u32 valid: 1;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	long unsigned int entries[0];
+};
+
+typedef __be64 fdt64_t;
+
+struct fdt_reserve_entry {
+	fdt64_t address;
+	fdt64_t size;
+};
+
+struct fdt_node_header {
+	fdt32_t tag;
+	char name[0];
+};
+
+struct fdt_property {
+	fdt32_t tag;
+	fdt32_t len;
+	fdt32_t nameoff;
+	char data[0];
+};
+
+enum {
+	ASSUME_PERFECT = 255,
+	ASSUME_VALID_DTB = 1,
+	ASSUME_VALID_INPUT = 2,
+	ASSUME_LATEST = 4,
+	ASSUME_NO_ROLLBACK = 8,
+	ASSUME_LIBFDT_ORDER = 16,
+	ASSUME_LIBFDT_FLAWLESS = 32,
+};
+
+struct radix_tree_iter {
+	long unsigned int index;
+	long unsigned int next_index;
+	long unsigned int tags;
+	struct xa_node *node;
+};
+
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
+};
+
+struct ida_bitmap {
+	long unsigned int bitmap[16];
+};
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct aperture_range {
+	struct device *dev;
+	resource_size_t base;
+	resource_size_t size;
+	struct list_head lh;
+	void (*detach)(struct device *);
+};
+
+struct i2c_algo_bit_data {
+	void *data;
+	void (*setsda)(void *, int);
+	void (*setscl)(void *, int);
+	int (*getsda)(void *);
+	int (*getscl)(void *);
+	int (*pre_xfer)(struct i2c_adapter *);
+	void (*post_xfer)(struct i2c_adapter *);
+	int udelay;
+	int timeout;
+	bool can_do_atomic;
+};
+
+enum radeon_family {
+	CHIP_FAMILY_UNKNOW = 0,
+	CHIP_FAMILY_LEGACY = 1,
+	CHIP_FAMILY_RADEON = 2,
+	CHIP_FAMILY_RV100 = 3,
+	CHIP_FAMILY_RS100 = 4,
+	CHIP_FAMILY_RV200 = 5,
+	CHIP_FAMILY_RS200 = 6,
+	CHIP_FAMILY_R200 = 7,
+	CHIP_FAMILY_RV250 = 8,
+	CHIP_FAMILY_RS300 = 9,
+	CHIP_FAMILY_RV280 = 10,
+	CHIP_FAMILY_R300 = 11,
+	CHIP_FAMILY_R350 = 12,
+	CHIP_FAMILY_RV350 = 13,
+	CHIP_FAMILY_RV380 = 14,
+	CHIP_FAMILY_R420 = 15,
+	CHIP_FAMILY_RC410 = 16,
+	CHIP_FAMILY_RS400 = 17,
+	CHIP_FAMILY_RS480 = 18,
+	CHIP_FAMILY_LAST = 19,
+};
+
+struct pll_info {
+	int ppll_max;
+	int ppll_min;
+	int sclk;
+	int mclk;
+	int ref_div;
+	int ref_clk;
+};
+
+struct radeon_regs {
+	u32 ovr_clr;
+	u32 ovr_wid_left_right;
+	u32 ovr_wid_top_bottom;
+	u32 ov0_scale_cntl;
+	u32 mpp_tb_config;
+	u32 mpp_gp_config;
+	u32 subpic_cntl;
+	u32 viph_control;
+	u32 i2c_cntl_1;
+	u32 gen_int_cntl;
+	u32 cap0_trig_cntl;
+	u32 cap1_trig_cntl;
+	u32 bus_cntl;
+	u32 surface_cntl;
+	u32 bios_5_scratch;
+	u32 dp_datatype;
+	u32 rbbm_soft_reset;
+	u32 clock_cntl_index;
+	u32 amcgpio_en_reg;
+	u32 amcgpio_mask;
+	u32 surf_lower_bound[8];
+	u32 surf_upper_bound[8];
+	u32 surf_info[8];
+	u32 crtc_gen_cntl;
+	u32 crtc_ext_cntl;
+	u32 dac_cntl;
+	u32 crtc_h_total_disp;
+	u32 crtc_h_sync_strt_wid;
+	u32 crtc_v_total_disp;
+	u32 crtc_v_sync_strt_wid;
+	u32 crtc_offset;
+	u32 crtc_offset_cntl;
+	u32 crtc_pitch;
+	u32 disp_merge_cntl;
+	u32 grph_buffer_cntl;
+	u32 crtc_more_cntl;
+	u32 crtc2_gen_cntl;
+	u32 dac2_cntl;
+	u32 disp_output_cntl;
+	u32 disp_hw_debug;
+	u32 disp2_merge_cntl;
+	u32 grph2_buffer_cntl;
+	u32 crtc2_h_total_disp;
+	u32 crtc2_h_sync_strt_wid;
+	u32 crtc2_v_total_disp;
+	u32 crtc2_v_sync_strt_wid;
+	u32 crtc2_offset;
+	u32 crtc2_offset_cntl;
+	u32 crtc2_pitch;
+	u32 fp_crtc_h_total_disp;
+	u32 fp_crtc_v_total_disp;
+	u32 fp_gen_cntl;
+	u32 fp2_gen_cntl;
+	u32 fp_h_sync_strt_wid;
+	u32 fp2_h_sync_strt_wid;
+	u32 fp_horz_stretch;
+	u32 fp_panel_cntl;
+	u32 fp_v_sync_strt_wid;
+	u32 fp2_v_sync_strt_wid;
+	u32 fp_vert_stretch;
+	u32 lvds_gen_cntl;
+	u32 lvds_pll_cntl;
+	u32 tmds_crc;
+	u32 tmds_transmitter_cntl;
+	u32 dot_clock_freq;
+	int feedback_div;
+	int post_div;
+	u32 ppll_div_3;
+	u32 ppll_ref_div;
+	u32 vclk_ecp_cntl;
+	u32 clk_cntl_index;
+	u32 dot_clock_freq_2;
+	int feedback_div_2;
+	int post_div_2;
+	u32 p2pll_ref_div;
+	u32 p2pll_div_0;
+	u32 htotal_cntl2;
+	int palette_valid;
+};
+
+struct panel_info {
+	int xres;
+	int yres;
+	int valid;
+	int clock;
+	int hOver_plus;
+	int hSync_width;
+	int hblank;
+	int vOver_plus;
+	int vSync_width;
+	int vblank;
+	int hAct_high;
+	int vAct_high;
+	int interlaced;
+	int pwr_delay;
+	int use_bios_dividers;
+	int ref_divider;
+	int post_divider;
+	int fbk_divider;
+};
+
+struct radeonfb_info;
+
+struct radeon_i2c_chan {
+	struct radeonfb_info *rinfo;
+	u32 ddc_reg;
+	struct i2c_adapter adapter;
+	struct i2c_algo_bit_data algo;
+};
+
+enum radeon_pm_mode {
+	radeon_pm_none = 0,
+	radeon_pm_d2 = 1,
+	radeon_pm_off = 2,
+};
+
+typedef void (*reinit_function_ptr)(struct radeonfb_info *);
+
+struct radeonfb_info {
+	struct fb_info *info;
+	struct radeon_regs state;
+	struct radeon_regs init_state;
+	char name[50];
+	long unsigned int mmio_base_phys;
+	long unsigned int fb_base_phys;
+	void *mmio_base;
+	void *fb_base;
+	long unsigned int fb_local_base;
+	struct pci_dev *pdev;
+	struct device_node *of_node;
+	void *bios_seg;
+	int fp_bios_start;
+	u32 pseudo_palette[16];
+	struct {
+		u8 red;
+		u8 green;
+		u8 blue;
+		u8 pad;
+	} palette[256];
+	int chipset;
+	u8 family;
+	u8 rev;
+	unsigned int errata;
+	long unsigned int video_ram;
+	long unsigned int mapped_vram;
+	int vram_width;
+	int vram_ddr;
+	int pitch;
+	int bpp;
+	int depth;
+	int has_CRTC2;
+	int is_mobility;
+	int is_IGP;
+	int reversed_DAC;
+	int reversed_TMDS;
+	struct panel_info panel_info;
+	int mon1_type;
+	u8 *mon1_EDID;
+	struct fb_videomode *mon1_modedb;
+	int mon1_dbsize;
+	int mon2_type;
+	u8 *mon2_EDID;
+	u32 dp_gui_master_cntl;
+	struct pll_info pll;
+	int wc_cookie;
+	u32 save_regs[100];
+	int asleep;
+	int lock_blank;
+	int dynclk;
+	int no_schedule;
+	enum radeon_pm_mode pm_mode;
+	reinit_function_ptr reinit_func;
+	spinlock_t reg_lock;
+	struct timer_list lvds_timer;
+	u32 pending_lvds_gen_cntl;
+	struct radeon_i2c_chan i2c[4];
+};
+
+struct hv_ops;
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	long unsigned int flags;
+};
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, int);
+};
+
+typedef long unsigned int cycles_t;
+
+struct timer_rand_state {
+	long unsigned int last_time;
+	long int last_delta;
+	long int last_delta2;
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 100,
+	CRNG_RESEED_INTERVAL = 6000,
+};
+
+struct crng {
+	u8 key[32];
+	long unsigned int generation;
+	local_lock_t lock;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+struct fast_pool {
+	struct work_struct mix;
+	long unsigned int pool[4];
+	long unsigned int last;
+	unsigned int count;
+};
+
+struct entropy_timer_state {
+	long unsigned int entropy;
+	struct timer_list timer;
+	unsigned int samples;
+	unsigned int samples_per_bit;
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 3,
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+struct software_node_ref_args {
+	const struct software_node *node;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct swnode {
+	struct kobject kobj;
+	struct fwnode_handle fwnode;
+	const struct software_node *node;
+	int id;
+	struct ida child_ids;
+	struct list_head entry;
+	struct list_head children;
+	struct swnode *parent;
+	unsigned int allocated: 1;
+	unsigned int managed: 1;
+};
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+struct mem_section_usage {
+	long unsigned int subsection_map[1];
+	long unsigned int pageblock_flags[0];
+};
+
+struct mem_section {
+	long unsigned int section_mem_map;
+	struct mem_section_usage *usage;
+};
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_MAP_LAST_BIT = 4,
+};
+
+typedef void (*node_registration_func_t)(struct node *);
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	long unsigned int present_kernel_pages;
+	long unsigned int present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			long unsigned int max_pages;
+		} s;
+		struct {
+			long unsigned int unit_pages;
+		} d;
+	};
+};
+
+struct memory_block {
+	long unsigned int start_section_nr;
+	long unsigned int state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	long unsigned int nr_vmemmap_pages;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+struct memory_notify {
+	long unsigned int start_pfn;
+	long unsigned int nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
+
+struct node_access_nodes {
+	struct device dev;
+	struct list_head list_node;
+	unsigned int access;
+};
+
+struct node_attr {
+	struct device_attribute attr;
+	enum node_states state;
+};
+
+struct badrange_entry {
+	u64 start;
+	u64 length;
+	struct list_head list;
+};
+
+struct nd_cmd_desc {
+	int in_num;
+	int out_num;
+	u32 in_sizes[5];
+	int out_sizes[5];
+};
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+struct nd_cmd_set_config_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_vendor_hdr {
+	__u32 opcode;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_ars_cap {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u32 max_ars_out;
+	__u32 clear_err_unit;
+	__u16 flags;
+	__u16 reserved;
+};
+
+struct nd_cmd_clear_error {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u8 reserved[4];
+	__u64 cleared;
+};
+
+enum {
+	ND_CMD_IMPLEMENTED = 0,
+	ND_CMD_ARS_CAP = 1,
+	ND_CMD_ARS_START = 2,
+	ND_CMD_ARS_STATUS = 3,
+	ND_CMD_CLEAR_ERROR = 4,
+	ND_CMD_SMART = 1,
+	ND_CMD_SMART_THRESHOLD = 2,
+	ND_CMD_DIMM_FLAGS = 3,
+	ND_CMD_GET_CONFIG_SIZE = 4,
+	ND_CMD_GET_CONFIG_DATA = 5,
+	ND_CMD_SET_CONFIG_DATA = 6,
+	ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+	ND_CMD_VENDOR_EFFECT_LOG = 8,
+	ND_CMD_VENDOR = 9,
+	ND_CMD_CALL = 10,
+};
+
+struct nd_cmd_pkg {
+	__u64 nd_family;
+	__u64 nd_command;
+	__u32 nd_size_in;
+	__u32 nd_size_out;
+	__u32 nd_reserved2[9];
+	__u32 nd_fw_size;
+	unsigned char nd_payload[0];
+};
+
+enum nvdimm_event {
+	NVDIMM_REVALIDATE_POISON = 0,
+	NVDIMM_REVALIDATE_REGION = 1,
+};
+
+struct nd_device_driver {
+	struct device_driver drv;
+	long unsigned int type;
+	int (*probe)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	void (*notify)(struct device *, enum nvdimm_event);
+};
+
+struct clear_badblocks_context {
+	resource_size_t phys;
+	resource_size_t cleared;
+};
+
+enum nd_ioctl_mode {
+	BUS_IOCTL = 0,
+	DIMM_IOCTL = 1,
+};
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	long unsigned int flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long int (*wait)(struct dma_fence *, bool, long int);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct dma_fence_chain {
+	struct dma_fence base;
+	struct dma_fence *prev;
+	u64 prev_seqno;
+	struct dma_fence *fence;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
+};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TARGET_FAILURE = 16,
+	DID_NEXUS_FAILURE = 17,
+	DID_ALLOC_FAILURE = 18,
+	DID_MEDIUM_ERROR = 19,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+struct value_name_pair;
+
+struct sa_name_list {
+	int opcode;
+	const struct value_name_pair *arr;
+	int arr_sz;
+};
+
+struct value_name_pair {
+	int value;
+	const char *name;
+};
+
+struct error_info {
+	short unsigned int code12;
+	short unsigned int size;
+};
+
+struct error_info2 {
+	unsigned char code1;
+	unsigned char code2_min;
+	unsigned char code2_max;
+	const char *str;
+	const char *fmt;
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+enum {
+	SCSI_DH_OK = 0,
+	SCSI_DH_DEV_FAILED = 1,
+	SCSI_DH_DEV_TEMP_BUSY = 2,
+	SCSI_DH_DEV_UNSUPP = 3,
+	SCSI_DH_DEVICE_MAX = 4,
+	SCSI_DH_NOTCONN = 5,
+	SCSI_DH_CONN_FAILURE = 6,
+	SCSI_DH_TRANSPORT_MAX = 7,
+	SCSI_DH_IO = 8,
+	SCSI_DH_INVALID_IO = 9,
+	SCSI_DH_RETRY = 10,
+	SCSI_DH_IMM_RETRY = 11,
+	SCSI_DH_TIMED_OUT = 12,
+	SCSI_DH_RES_TEMP_UNAVAIL = 13,
+	SCSI_DH_DEV_OFFLINED = 14,
+	SCSI_DH_NOMEM = 15,
+	SCSI_DH_NOSYS = 16,
+	SCSI_DH_DRIVER_MAX = 17,
+};
+
+struct scsi_dh_blist {
+	const char *vendor;
+	const char *model;
+	const char *driver;
+};
+
+struct ata_port_info {
+	long unsigned int flags;
+	long unsigned int link_flags;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	struct ata_port_operations *port_ops;
+	void *private_data;
+};
+
+enum e1000_state_t {
+	__E1000_TESTING = 0,
+	__E1000_RESETTING = 1,
+	__E1000_ACCESS_SHARED_RESOURCE = 2,
+	__E1000_DOWN = 3,
+};
+
+struct ich8_hsfsts {
+	u16 flcdone: 1;
+	u16 flcerr: 1;
+	u16 dael: 1;
+	u16 berasesz: 2;
+	u16 flcinprog: 1;
+	u16 reserved1: 2;
+	u16 reserved2: 6;
+	u16 fldesvalid: 1;
+	u16 flockdn: 1;
+};
+
+union ich8_hws_flash_status {
+	struct ich8_hsfsts hsf_status;
+	u16 regval;
+};
+
+struct ich8_hsflctl {
+	u16 flcgo: 1;
+	u16 flcycle: 2;
+	u16 reserved: 5;
+	u16 fldbcount: 2;
+	u16 flockdn: 6;
+};
+
+union ich8_hws_flash_ctrl {
+	struct ich8_hsflctl hsf_ctrl;
+	u16 regval;
+};
+
+struct ich8_pr {
+	u32 base: 13;
+	u32 reserved1: 2;
+	u32 rpe: 1;
+	u32 limit: 13;
+	u32 reserved2: 2;
+	u32 wpe: 1;
+};
+
+union ich8_flash_protected_range {
+	struct ich8_pr range;
+	u32 regval;
+};
+
+typedef unsigned char u_char;
+
+typedef short unsigned int u_short;
+
+typedef unsigned int u_int;
+
+typedef long unsigned int u_long;
+
+struct socket_state_t {
+	u_int flags;
+	u_int csc_mask;
+	u_char Vcc;
+	u_char Vpp;
+	u_char io_irq;
+};
+
+typedef struct socket_state_t socket_state_t;
+
+struct pccard_io_map {
+	u_char map;
+	u_char flags;
+	u_short speed;
+	phys_addr_t start;
+	phys_addr_t stop;
+};
+
+struct pccard_mem_map {
+	u_char map;
+	u_char flags;
+	u_short speed;
+	phys_addr_t static_start;
+	u_int card_start;
+	struct resource *res;
+};
+
+typedef struct pccard_mem_map pccard_mem_map;
+
+struct io_window_t {
+	u_int InUse;
+	u_int Config;
+	struct resource *res;
+};
+
+typedef struct io_window_t io_window_t;
+
+struct pcmcia_socket;
+
+struct pccard_operations {
+	int (*init)(struct pcmcia_socket *);
+	int (*suspend)(struct pcmcia_socket *);
+	int (*get_status)(struct pcmcia_socket *, u_int *);
+	int (*set_socket)(struct pcmcia_socket *, socket_state_t *);
+	int (*set_io_map)(struct pcmcia_socket *, struct pccard_io_map *);
+	int (*set_mem_map)(struct pcmcia_socket *, struct pccard_mem_map *);
+};
+
+struct pccard_resource_ops;
+
+struct pcmcia_callback;
+
+struct pcmcia_socket {
+	struct module *owner;
+	socket_state_t socket;
+	u_int state;
+	u_int suspended_state;
+	u_short functions;
+	u_short lock_count;
+	pccard_mem_map cis_mem;
+	void *cis_virt;
+	io_window_t io[2];
+	pccard_mem_map win[4];
+	struct list_head cis_cache;
+	size_t fake_cis_len;
+	u8 *fake_cis;
+	struct list_head socket_list;
+	struct completion socket_released;
+	unsigned int sock;
+	u_int features;
+	u_int irq_mask;
+	u_int map_size;
+	u_int io_offset;
+	u_int pci_irq;
+	struct pci_dev *cb_dev;
+	u8 resource_setup_done;
+	struct pccard_operations *ops;
+	struct pccard_resource_ops *resource_ops;
+	void *resource_data;
+	void (*zoom_video)(struct pcmcia_socket *, int);
+	int (*power_hook)(struct pcmcia_socket *, int);
+	void (*tune_bridge)(struct pcmcia_socket *, struct pci_bus *);
+	struct task_struct *thread;
+	struct completion thread_done;
+	unsigned int thread_events;
+	unsigned int sysfs_events;
+	struct mutex skt_mutex;
+	struct mutex ops_mutex;
+	spinlock_t thread_lock;
+	struct pcmcia_callback *callback;
+	struct list_head devices_list;
+	u8 device_count;
+	u8 pcmcia_pfc;
+	atomic_t present;
+	unsigned int pcmcia_irq;
+	struct device dev;
+	void *driver_data;
+	int resume_status;
+};
+
+struct pccard_resource_ops {
+	int (*validate_mem)(struct pcmcia_socket *);
+	int (*find_io)(struct pcmcia_socket *, unsigned int, unsigned int *, unsigned int, unsigned int, struct resource **);
+	struct resource * (*find_mem)(long unsigned int, long unsigned int, long unsigned int, int, struct pcmcia_socket *);
+	int (*init)(struct pcmcia_socket *);
+	void (*exit)(struct pcmcia_socket *);
+};
+
+struct pcmcia_callback {
+	struct module *owner;
+	int (*add)(struct pcmcia_socket *);
+	int (*remove)(struct pcmcia_socket *);
+	void (*requery)(struct pcmcia_socket *);
+	int (*validate)(struct pcmcia_socket *, unsigned int *);
+	int (*suspend)(struct pcmcia_socket *);
+	int (*early_resume)(struct pcmcia_socket *);
+	int (*resume)(struct pcmcia_socket *);
+};
+
+typedef unsigned char cisdata_t;
+
+struct cistpl_longlink_t {
+	u_int addr;
+};
+
+typedef struct cistpl_longlink_t cistpl_longlink_t;
+
+struct cistpl_checksum_t {
+	u_short addr;
+	u_short len;
+	u_char sum;
+};
+
+typedef struct cistpl_checksum_t cistpl_checksum_t;
+
+struct cistpl_longlink_mfc_t {
+	u_char nfn;
+	struct {
+		u_char space;
+		u_int addr;
+	} fn[8];
+};
+
+typedef struct cistpl_longlink_mfc_t cistpl_longlink_mfc_t;
+
+struct cistpl_altstr_t {
+	u_char ns;
+	u_char ofs[4];
+	char str[254];
+};
+
+typedef struct cistpl_altstr_t cistpl_altstr_t;
+
+struct cistpl_device_t {
+	u_char ndev;
+	struct {
+		u_char type;
+		u_char wp;
+		u_int speed;
+		u_int size;
+	} dev[4];
+};
+
+typedef struct cistpl_device_t cistpl_device_t;
+
+struct cistpl_vers_1_t {
+	u_char major;
+	u_char minor;
+	u_char ns;
+	u_char ofs[4];
+	char str[254];
+};
+
+typedef struct cistpl_vers_1_t cistpl_vers_1_t;
+
+struct cistpl_jedec_t {
+	u_char nid;
+	struct {
+		u_char mfr;
+		u_char info;
+	} id[4];
+};
+
+typedef struct cistpl_jedec_t cistpl_jedec_t;
+
+struct cistpl_manfid_t {
+	u_short manf;
+	u_short card;
+};
+
+typedef struct cistpl_manfid_t cistpl_manfid_t;
+
+struct cistpl_funcid_t {
+	u_char func;
+	u_char sysinit;
+};
+
+typedef struct cistpl_funcid_t cistpl_funcid_t;
+
+struct cistpl_funce_t {
+	u_char type;
+	u_char data[0];
+};
+
+typedef struct cistpl_funce_t cistpl_funce_t;
+
+struct cistpl_bar_t {
+	u_char attr;
+	u_int size;
+};
+
+typedef struct cistpl_bar_t cistpl_bar_t;
+
+struct cistpl_config_t {
+	u_char last_idx;
+	u_int base;
+	u_int rmask[4];
+	u_char subtuples;
+};
+
+typedef struct cistpl_config_t cistpl_config_t;
+
+struct cistpl_power_t {
+	u_char present;
+	u_char flags;
+	u_int param[7];
+};
+
+typedef struct cistpl_power_t cistpl_power_t;
+
+struct cistpl_timing_t {
+	u_int wait;
+	u_int waitscale;
+	u_int ready;
+	u_int rdyscale;
+	u_int reserved;
+	u_int rsvscale;
+};
+
+typedef struct cistpl_timing_t cistpl_timing_t;
+
+struct cistpl_io_t {
+	u_char flags;
+	u_char nwin;
+	struct {
+		u_int base;
+		u_int len;
+	} win[16];
+};
+
+typedef struct cistpl_io_t cistpl_io_t;
+
+struct cistpl_irq_t {
+	u_int IRQInfo1;
+	u_int IRQInfo2;
+};
+
+typedef struct cistpl_irq_t cistpl_irq_t;
+
+struct cistpl_mem_t {
+	u_char flags;
+	u_char nwin;
+	struct {
+		u_int len;
+		u_int card_addr;
+		u_int host_addr;
+	} win[8];
+};
+
+typedef struct cistpl_mem_t cistpl_mem_t;
+
+struct cistpl_cftable_entry_t {
+	u_char index;
+	u_short flags;
+	u_char interface;
+	cistpl_power_t vcc;
+	cistpl_power_t vpp1;
+	cistpl_power_t vpp2;
+	cistpl_timing_t timing;
+	cistpl_io_t io;
+	cistpl_irq_t irq;
+	cistpl_mem_t mem;
+	u_char subtuples;
+};
+
+typedef struct cistpl_cftable_entry_t cistpl_cftable_entry_t;
+
+struct cistpl_cftable_entry_cb_t {
+	u_char index;
+	u_int flags;
+	cistpl_power_t vcc;
+	cistpl_power_t vpp1;
+	cistpl_power_t vpp2;
+	u_char io;
+	cistpl_irq_t irq;
+	u_char mem;
+	u_char subtuples;
+};
+
+typedef struct cistpl_cftable_entry_cb_t cistpl_cftable_entry_cb_t;
+
+struct cistpl_device_geo_t {
+	u_char ngeo;
+	struct {
+		u_char buswidth;
+		u_int erase_block;
+		u_int read_block;
+		u_int write_block;
+		u_int partition;
+		u_int interleave;
+	} geo[4];
+};
+
+typedef struct cistpl_device_geo_t cistpl_device_geo_t;
+
+struct cistpl_vers_2_t {
+	u_char vers;
+	u_char comply;
+	u_short dindex;
+	u_char vspec8;
+	u_char vspec9;
+	u_char nhdr;
+	u_char vendor;
+	u_char info;
+	char str[244];
+};
+
+typedef struct cistpl_vers_2_t cistpl_vers_2_t;
+
+struct cistpl_org_t {
+	u_char data_org;
+	char desc[30];
+};
+
+typedef struct cistpl_org_t cistpl_org_t;
+
+struct cistpl_format_t {
+	u_char type;
+	u_char edc;
+	u_int offset;
+	u_int length;
+};
+
+typedef struct cistpl_format_t cistpl_format_t;
+
+union cisparse_t {
+	cistpl_device_t device;
+	cistpl_checksum_t checksum;
+	cistpl_longlink_t longlink;
+	cistpl_longlink_mfc_t longlink_mfc;
+	cistpl_vers_1_t version_1;
+	cistpl_altstr_t altstr;
+	cistpl_jedec_t jedec;
+	cistpl_manfid_t manfid;
+	cistpl_funcid_t funcid;
+	cistpl_funce_t funce;
+	cistpl_bar_t bar;
+	cistpl_config_t config;
+	cistpl_cftable_entry_t cftable_entry;
+	cistpl_cftable_entry_cb_t cftable_entry_cb;
+	cistpl_device_geo_t device_geo;
+	cistpl_vers_2_t vers_2;
+	cistpl_org_t org;
+	cistpl_format_t format;
+};
+
+typedef union cisparse_t cisparse_t;
+
+struct tuple_t {
+	u_int Attributes;
+	cisdata_t DesiredTuple;
+	u_int Flags;
+	u_int LinkOffset;
+	u_int CISOffset;
+	cisdata_t TupleCode;
+	cisdata_t TupleLink;
+	cisdata_t TupleOffset;
+	cisdata_t TupleDataMax;
+	cisdata_t TupleDataLen;
+	cisdata_t *TupleData;
+};
+
+typedef struct tuple_t tuple_t;
+
+enum {
+	PCMCIA_IOPORT_0 = 0,
+	PCMCIA_IOPORT_1 = 1,
+	PCMCIA_IOMEM_0 = 2,
+	PCMCIA_IOMEM_1 = 3,
+	PCMCIA_IOMEM_2 = 4,
+	PCMCIA_IOMEM_3 = 5,
+	PCMCIA_NUM_RESOURCES = 6,
+};
+
+struct cis_cache_entry {
+	struct list_head node;
+	unsigned int addr;
+	unsigned int len;
+	unsigned int attr;
+	unsigned char cache[0];
+};
+
+struct tuple_flags {
+	u_int link_space: 4;
+	u_int has_link: 1;
+	u_int mfc_fn: 3;
+	u_int space: 4;
+};
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct ml_effect_state {
+	struct ff_effect *effect;
+	long unsigned int flags;
+	int count;
+	long unsigned int play_at;
+	long unsigned int stop_at;
+	long unsigned int adj_at;
+};
+
+struct ml_device {
+	void *private;
+	struct ml_effect_state states[16];
+	int gain;
+	struct timer_list timer;
+	struct input_dev *dev;
+	int (*play_effect)(struct input_dev *, void *, struct ff_effect *);
+};
+
+typedef __u64 timeu64_t;
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t);
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	struct gpio_desc *wp_gpio;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, long unsigned int);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long int *);
+	int (*set_offset)(struct device *, long int);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	long unsigned int flags;
+	long unsigned int irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	long unsigned int set_offset_nsec;
+	long unsigned int features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+};
+
+struct nvmem_device;
+
+struct pps_ktime {
+	__s64 sec;
+	__s32 nsec;
+	__u32 flags;
+};
+
+struct pps_kinfo {
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime assert_tu;
+	struct pps_ktime clear_tu;
+	int current_mode;
+};
+
+struct pps_kparams {
+	int api_version;
+	int mode;
+	struct pps_ktime assert_off_tu;
+	struct pps_ktime clear_off_tu;
+};
+
+struct pps_fdata {
+	struct pps_kinfo info;
+	struct pps_ktime timeout;
+};
+
+struct pps_bind_args {
+	int tsformat;
+	int edge;
+	int consumer;
+};
+
+struct pps_device;
+
+struct pps_source_info {
+	char name[32];
+	char path[32];
+	int mode;
+	void (*echo)(struct pps_device *, int, void *);
+	struct module *owner;
+	struct device *dev;
+};
+
+struct pps_device {
+	struct pps_source_info info;
+	struct pps_kparams params;
+	__u32 assert_sequence;
+	__u32 clear_sequence;
+	struct pps_ktime assert_tu;
+	struct pps_ktime clear_tu;
+	int current_mode;
+	unsigned int last_ev;
+	wait_queue_head_t queue;
+	unsigned int id;
+	const void *lookup_cookie;
+	struct cdev cdev;
+	struct device *dev;
+	struct fasync_struct *async_queue;
+	spinlock_t lock;
+};
+
+struct md_cluster_info;
+
+struct md_personality;
+
+struct md_thread;
+
+struct bitmap;
+
+struct md_rdev;
+
+struct mddev {
+	void *private;
+	struct md_personality *pers;
+	dev_t unit;
+	int md_minor;
+	struct list_head disks;
+	long unsigned int flags;
+	long unsigned int sb_flags;
+	int suspended;
+	atomic_t active_io;
+	int ro;
+	int sysfs_active;
+	struct gendisk *gendisk;
+	struct kobject kobj;
+	int hold_active;
+	int major_version;
+	int minor_version;
+	int patch_version;
+	int persistent;
+	int external;
+	char metadata_type[17];
+	int chunk_sectors;
+	time64_t ctime;
+	time64_t utime;
+	int level;
+	int layout;
+	char clevel[16];
+	int raid_disks;
+	int max_disks;
+	sector_t dev_sectors;
+	sector_t array_sectors;
+	int external_size;
+	__u64 events;
+	int can_decrease_events;
+	char uuid[16];
+	sector_t reshape_position;
+	int delta_disks;
+	int new_level;
+	int new_layout;
+	int new_chunk_sectors;
+	int reshape_backwards;
+	struct md_thread *thread;
+	struct md_thread *sync_thread;
+	char *last_sync_action;
+	sector_t curr_resync;
+	sector_t curr_resync_completed;
+	long unsigned int resync_mark;
+	sector_t resync_mark_cnt;
+	sector_t curr_mark_cnt;
+	sector_t resync_max_sectors;
+	atomic64_t resync_mismatches;
+	sector_t suspend_lo;
+	sector_t suspend_hi;
+	int sync_speed_min;
+	int sync_speed_max;
+	int parallel_resync;
+	int ok_start_degraded;
+	long unsigned int recovery;
+	int recovery_disabled;
+	int in_sync;
+	struct mutex open_mutex;
+	struct mutex reconfig_mutex;
+	atomic_t active;
+	atomic_t openers;
+	int changed;
+	int degraded;
+	atomic_t recovery_active;
+	wait_queue_head_t recovery_wait;
+	sector_t recovery_cp;
+	sector_t resync_min;
+	sector_t resync_max;
+	struct kernfs_node *sysfs_state;
+	struct kernfs_node *sysfs_action;
+	struct kernfs_node *sysfs_completed;
+	struct kernfs_node *sysfs_degraded;
+	struct kernfs_node *sysfs_level;
+	struct work_struct del_work;
+	spinlock_t lock;
+	wait_queue_head_t sb_wait;
+	atomic_t pending_writes;
+	unsigned int safemode;
+	unsigned int safemode_delay;
+	struct timer_list safemode_timer;
+	struct percpu_ref writes_pending;
+	int sync_checkers;
+	struct request_queue *queue;
+	struct bitmap *bitmap;
+	struct {
+		struct file *file;
+		loff_t offset;
+		long unsigned int space;
+		loff_t default_offset;
+		long unsigned int default_space;
+		struct mutex mutex;
+		long unsigned int chunksize;
+		long unsigned int daemon_sleep;
+		long unsigned int max_write_behind;
+		int external;
+		int nodes;
+		char cluster_name[64];
+	} bitmap_info;
+	atomic_t max_corr_read_errors;
+	struct list_head all_mddevs;
+	const struct attribute_group *to_remove;
+	struct bio_set bio_set;
+	struct bio_set sync_set;
+	struct bio_set io_acct_set;
+	struct bio *flush_bio;
+	atomic_t flush_pending;
+	ktime_t start_flush;
+	ktime_t prev_flush_start;
+	struct work_struct flush_work;
+	struct work_struct event_work;
+	mempool_t *serial_info_pool;
+	void (*sync_super)(struct mddev *, struct md_rdev *);
+	struct md_cluster_info *cluster_info;
+	unsigned int good_device_nr;
+	unsigned int noio_flag;
+	bool has_superblocks: 1;
+	bool fail_last_dev: 1;
+	bool serialize_policy: 1;
+};
+
+struct serial_in_rdev;
+
+struct md_rdev {
+	struct list_head same_set;
+	sector_t sectors;
+	struct mddev *mddev;
+	int last_events;
+	struct block_device *meta_bdev;
+	struct block_device *bdev;
+	struct page *sb_page;
+	struct page *bb_page;
+	int sb_loaded;
+	__u64 sb_events;
+	sector_t data_offset;
+	sector_t new_data_offset;
+	sector_t sb_start;
+	int sb_size;
+	int preferred_minor;
+	struct kobject kobj;
+	long unsigned int flags;
+	wait_queue_head_t blocked_wait;
+	int desc_nr;
+	int raid_disk;
+	int new_raid_disk;
+	int saved_raid_disk;
+	union {
+		sector_t recovery_offset;
+		sector_t journal_tail;
+	};
+	atomic_t nr_pending;
+	atomic_t read_errors;
+	time64_t last_read_error;
+	atomic_t corrected_errors;
+	struct serial_in_rdev *serial;
+	struct work_struct del_work;
+	struct kernfs_node *sysfs_state;
+	struct kernfs_node *sysfs_unack_badblocks;
+	struct kernfs_node *sysfs_badblocks;
+	struct badblocks badblocks;
+	struct {
+		short int offset;
+		unsigned int size;
+		sector_t sector;
+	} ppl;
+};
+
+struct serial_in_rdev {
+	struct rb_root_cached serial_rb;
+	spinlock_t serial_lock;
+	wait_queue_head_t serial_io_wait;
+};
+
+enum mddev_flags {
+	MD_ARRAY_FIRST_USE = 0,
+	MD_CLOSING = 1,
+	MD_JOURNAL_CLEAN = 2,
+	MD_HAS_JOURNAL = 3,
+	MD_CLUSTER_RESYNC_LOCKED = 4,
+	MD_FAILFAST_SUPPORTED = 5,
+	MD_HAS_PPL = 6,
+	MD_HAS_MULTIPLE_PPLS = 7,
+	MD_ALLOW_SB_UPDATE = 8,
+	MD_UPDATING_SB = 9,
+	MD_NOT_READY = 10,
+	MD_BROKEN = 11,
+	MD_DELETED = 12,
+};
+
+struct md_personality {
+	char *name;
+	int level;
+	struct list_head list;
+	struct module *owner;
+	bool (*make_request)(struct mddev *, struct bio *);
+	int (*run)(struct mddev *);
+	int (*start)(struct mddev *);
+	void (*free)(struct mddev *, void *);
+	void (*status)(struct seq_file *, struct mddev *);
+	void (*error_handler)(struct mddev *, struct md_rdev *);
+	int (*hot_add_disk)(struct mddev *, struct md_rdev *);
+	int (*hot_remove_disk)(struct mddev *, struct md_rdev *);
+	int (*spare_active)(struct mddev *);
+	sector_t (*sync_request)(struct mddev *, sector_t, int *);
+	int (*resize)(struct mddev *, sector_t);
+	sector_t (*size)(struct mddev *, sector_t, int);
+	int (*check_reshape)(struct mddev *);
+	int (*start_reshape)(struct mddev *);
+	void (*finish_reshape)(struct mddev *);
+	void (*update_reshape_pos)(struct mddev *);
+	void (*quiesce)(struct mddev *, int);
+	void * (*takeover)(struct mddev *);
+	int (*change_consistency_policy)(struct mddev *, const char *);
+};
+
+struct md_thread {
+	void (*run)(struct md_thread *);
+	struct mddev *mddev;
+	wait_queue_head_t wqueue;
+	long unsigned int flags;
+	struct task_struct *tsk;
+	long unsigned int timeout;
+	void *private;
+};
+
+struct strip_zone {
+	sector_t zone_end;
+	sector_t dev_start;
+	int nb_dev;
+};
+
+enum r0layout {
+	RAID0_ORIG_LAYOUT = 1,
+	RAID0_ALT_MULTIZONE_LAYOUT = 2,
+};
+
+struct r0conf {
+	struct strip_zone *strip_zone;
+	struct md_rdev **devlist;
+	int nr_strip_zones;
+	enum r0layout layout;
+};
+
+struct dm_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct mapped_device *, char *);
+	ssize_t (*store)(struct mapped_device *, const char *, size_t);
+};
+
+struct cpufreq_policy_data {
+	struct cpufreq_cpuinfo cpuinfo;
+	struct cpufreq_frequency_table *freq_table;
+	unsigned int cpu;
+	unsigned int min;
+	unsigned int max;
+};
+
+struct freq_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpufreq_policy *, char *);
+	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
+};
+
+struct cpuidle_state_usage {
+	long long unsigned int disable;
+	long long unsigned int usage;
+	u64 time_ns;
+	long long unsigned int above;
+	long long unsigned int below;
+	long long unsigned int rejected;
+	long long unsigned int s2idle_usage;
+	long long unsigned int s2idle_time;
+};
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+};
+
+struct cpuidle_governor {
+	char name[16];
+	struct list_head governor_list;
+	unsigned int rating;
+	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
+	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
+	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
+	void (*reflect)(struct cpuidle_device *, int);
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[16];
+	unsigned int baud;
+};
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+struct gnet_estimator {
+	signed char interval;
+	unsigned char ewma_log;
+};
+
+struct net_rate_estimator {
+	struct gnet_stats_basic_sync *bstats;
+	spinlock_t *stats_lock;
+	bool running;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	u8 ewma_log;
+	u8 intvl_log;
+	seqcount_t seq;
+	u64 last_packets;
+	u64 last_bytes;
+	u64 avpps;
+	u64 avbps;
+	long unsigned int next_jiffies;
+	struct timer_list timer;
+	struct callback_head rcu;
+};
+
+typedef struct __call_single_data call_single_data_t;
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr *tun_src;
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	unsigned int received_rps;
+	struct softnet_data *rps_ipi_list;
+	struct sd_flow_limit *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int input_queue_head;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 max_packets_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 mtu_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock *fastopen_rsk;
+	struct saved_syn *saved_syn;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	int pending;
+	unsigned int corkflag;
+	__u8 encap_type;
+	unsigned char no_check6_tx: 1;
+	unsigned char no_check6_rx: 1;
+	unsigned char encap_enabled: 1;
+	unsigned char gro_enabled: 1;
+	unsigned char accept_udp_l4: 1;
+	unsigned char accept_udp_fraglist: 1;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	__u8 pcflag;
+	__u8 unused[3];
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, unsigned int);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+};
+
+enum {
+	BPF_F_RECOMPUTE_CSUM = 1,
+	BPF_F_INVALIDATE_HASH = 2,
+};
+
+enum {
+	BPF_F_HDR_FIELD_MASK = 15,
+};
+
+enum {
+	BPF_F_PSEUDO_HDR = 16,
+	BPF_F_MARK_MANGLED_0 = 32,
+	BPF_F_MARK_ENFORCE = 64,
+};
+
+enum {
+	BPF_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+	BPF_F_ZERO_CSUM_TX = 2,
+	BPF_F_DONT_FRAGMENT = 4,
+	BPF_F_SEQ_NUMBER = 8,
+};
+
+enum {
+	BPF_F_INDEX_MASK = 4294967295ULL,
+	BPF_F_CURRENT_CPU = 4294967295ULL,
+	BPF_F_CTXLEN_MASK = 4503595332403200ULL,
+};
+
+enum {
+	BPF_CSUM_LEVEL_QUERY = 0,
+	BPF_CSUM_LEVEL_INC = 1,
+	BPF_CSUM_LEVEL_DEC = 2,
+	BPF_CSUM_LEVEL_RESET = 3,
+};
+
+enum {
+	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
+	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
+	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
+	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
+};
+
+enum {
+	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
+	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
+};
+
+enum {
+	BPF_SK_LOOKUP_F_REPLACE = 1,
+	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+enum bpf_adj_room_mode {
+	BPF_ADJ_ROOM_NET = 0,
+	BPF_ADJ_ROOM_MAC = 1,
+};
+
+enum bpf_hdr_start_off {
+	BPF_HDR_START_MAC = 0,
+	BPF_HDR_START_NET = 1,
+};
+
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
+struct bpf_tunnel_key {
+	__u32 tunnel_id;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+	__u8 tunnel_tos;
+	__u8 tunnel_ttl;
+	__u16 tunnel_ext;
+	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
+};
+
+struct bpf_xfrm_state {
+	__u32 reqid;
+	__u32 spi;
+	__u16 family;
+	__u16 ext;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+};
+
+struct bpf_tcp_sock {
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	__u32 dsack_dups;
+	__u32 delivered;
+	__u32 delivered_ce;
+	__u32 icsk_retransmits;
+};
+
+struct bpf_sock_tuple {
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+			__be16 sport;
+			__be16 dport;
+		} ipv4;
+		struct {
+			__be32 saddr[4];
+			__be32 daddr[4];
+			__be16 sport;
+			__be16 dport;
+		} ipv6;
+	};
+};
+
+struct bpf_xdp_sock {
+	__u32 queue_id;
+};
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum {
+	TCP_BPF_IW = 1001,
+	TCP_BPF_SNDCWND_CLAMP = 1002,
+	TCP_BPF_DELACK_MAX = 1003,
+	TCP_BPF_RTO_MIN = 1004,
+	TCP_BPF_SYN = 1005,
+	TCP_BPF_SYN_IP = 1006,
+	TCP_BPF_SYN_MAC = 1007,
+};
+
+enum {
+	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+enum {
+	BPF_FIB_LOOKUP_DIRECT = 1,
+	BPF_FIB_LOOKUP_OUTPUT = 2,
+};
+
+enum {
+	BPF_FIB_LKUP_RET_SUCCESS = 0,
+	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
+	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
+	BPF_FIB_LKUP_RET_PROHIBIT = 3,
+	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
+	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
+	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
+	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
+	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
+};
+
+struct bpf_fib_lookup {
+	__u8 family;
+	__u8 l4_protocol;
+	__be16 sport;
+	__be16 dport;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
+	__u32 ifindex;
+	union {
+		__u8 tos;
+		__be32 flowinfo;
+		__u32 rt_metric;
+	};
+	union {
+		__be32 ipv4_src;
+		__u32 ipv6_src[4];
+	};
+	union {
+		__be32 ipv4_dst;
+		__u32 ipv6_dst[4];
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__u8 smac[6];
+	__u8 dmac[6];
+};
+
+struct bpf_redir_neigh {
+	__u32 nh_family;
+	union {
+		__be32 ipv4_nh;
+		__u32 ipv6_nh[4];
+	};
+};
+
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
+};
+
+struct sock_fprog {
+	short unsigned int len;
+	struct sock_filter *filter;
+};
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
 	struct mutex mutex;
-	struct vas_window *rxwin[6];
-	struct vas_window *windows[65536];
-	char *dbgname;
-	struct dentry *dbgdir;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	u32 image_off;
+	struct bpf_ksym ksym;
 };
 
-struct vas_window {
-	struct vas_instance *vinst;
-	int winid;
-	bool tx_win;
-	bool nx_win;
-	bool user_win;
-	void *hvwc_map;
-	void *uwc_map;
-	struct pid *pid;
-	struct pid *tgid;
-	struct mm_struct *mm;
-	int wcreds_max;
-	char *dbgname;
-	struct dentry *dbgdir;
-	void *paste_kaddr;
-	char *paste_addr_name;
-	struct vas_window *rxwin;
-	enum vas_cop_type cop;
-	atomic_t num_txwins;
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
 };
 
-struct vas_rx_win_attr {
-	void *rx_fifo;
-	int rx_fifo_size;
-	int wcreds_max;
-	bool pin_win;
-	bool rej_no_credit;
-	bool tx_wcred_mode;
-	bool rx_wcred_mode;
-	bool tx_win_ord_mode;
-	bool rx_win_ord_mode;
-	bool data_stamp;
-	bool nx_win;
-	bool fault_win;
-	bool user_win;
-	bool notify_disable;
-	bool intr_disable;
-	bool notify_early;
-	int lnotify_lpid;
-	int lnotify_pid;
-	int lnotify_tid;
-	u32 pswid;
-	int tc_mode;
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		char value[0];
+		void *ptrs[0];
+		void *pptrs[0];
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct vas_tx_win_attr {
-	enum vas_cop_type cop;
-	int wcreds_max;
-	int lpid;
-	int pidr;
-	int pswid;
-	int rsvd_txbuf_count;
-	int tc_mode;
-	bool user_win;
-	bool pin_win;
-	bool rej_no_credit;
-	bool rsvd_txbuf_enable;
-	bool tx_wcred_mode;
-	bool rx_wcred_mode;
-	bool tx_win_ord_mode;
-	bool rx_win_ord_mode;
+typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
 };
 
-enum vas_notify_scope {
-	VAS_SCOPE_LOCAL = 0,
-	VAS_SCOPE_GROUP = 1,
-	VAS_SCOPE_VECTORED_GROUP = 2,
-	VAS_SCOPE_UNUSED = 3,
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
 };
 
-enum vas_dma_type {
-	VAS_DMA_TYPE_INJECT = 0,
-	VAS_DMA_TYPE_WRITE = 1,
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
 };
 
-enum vas_notify_after_count {
-	VAS_NOTIFY_AFTER_256 = 0,
-	VAS_NOTIFY_NONE = 1,
-	VAS_NOTIFY_AFTER_2 = 2,
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
 };
 
-struct vas_winctx {
-	void *rx_fifo;
-	int rx_fifo_size;
-	int wcreds_max;
-	int rsvd_txbuf_count;
-	bool user_win;
-	bool nx_win;
-	bool fault_win;
-	bool rsvd_txbuf_enable;
-	bool pin_win;
-	bool rej_no_credit;
-	bool tx_wcred_mode;
-	bool rx_wcred_mode;
-	bool tx_word_mode;
-	bool rx_word_mode;
-	bool data_stamp;
-	bool xtra_write;
-	bool notify_disable;
-	bool intr_disable;
-	bool fifo_disable;
-	bool notify_early;
-	bool notify_os_intr_reg;
-	int lpid;
-	int pidr;
-	int lnotify_lpid;
-	int lnotify_pid;
-	int lnotify_tid;
-	u32 pswid;
-	int rx_win_id;
-	int fault_win_id;
-	int tc_mode;
-	u64 irq_port;
-	enum vas_dma_type dma_type;
-	enum vas_notify_scope min_scope;
-	enum vas_notify_scope max_scope;
-	enum vas_notify_after_count notify_after_count;
+struct bpf_redirect_info {
+	u32 flags;
+	u32 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	u32 kern_flags;
+	struct bpf_nh_params nh;
 };
 
-struct trace_event_raw_vas_rx_win_open {
-	struct trace_entry ent;
-	struct task_struct *tsk;
-	int pid;
-	int cop;
-	int vasid;
-	struct vas_rx_win_attr *rxattr;
-	int lnotify_lpid;
-	int lnotify_pid;
-	int lnotify_tid;
-	char __data[0];
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
 };
 
-struct trace_event_raw_vas_tx_win_open {
-	struct trace_entry ent;
-	struct task_struct *tsk;
-	int pid;
-	int cop;
-	int vasid;
-	struct vas_tx_win_attr *txattr;
-	int lpid;
-	int pidr;
-	char __data[0];
+struct mptcp_sock {};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
 };
 
-struct trace_event_raw_vas_paste_crb {
-	struct trace_entry ent;
-	struct task_struct *tsk;
-	struct vas_window *win;
-	int pid;
-	int vasid;
-	int winid;
-	long unsigned int paste_kaddr;
-	char __data[0];
+struct strp_msg {
+	int full_len;
+	int offset;
 };
 
-struct trace_event_data_offsets_vas_rx_win_open {};
+struct _strp_msg {
+	struct strp_msg strp;
+	int accum_len;
+};
 
-struct trace_event_data_offsets_vas_tx_win_open {};
+struct tls_msg {
+	u8 control;
+};
 
-struct trace_event_data_offsets_vas_paste_crb {};
+struct sk_skb_cb {
+	unsigned char data[20];
+	unsigned char pad[4];
+	struct _strp_msg strp;
+	struct tls_msg tls;
+	u64 temp_reg;
+};
 
-typedef void (*btf_trace_vas_rx_win_open)(void *, struct task_struct *, int, int, struct vas_rx_win_attr *);
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
 
-typedef void (*btf_trace_vas_tx_win_open)(void *, struct task_struct *, int, int, struct vas_tx_win_attr *);
+struct xsk_queue;
 
-typedef void (*btf_trace_vas_paste_crb)(void *, struct task_struct *, struct vas_window *);
+struct xdp_sock {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 msg_ready: 1;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	spinlock_t decrypt_compl_lock;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+};
+
+typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
+
+struct bpf_scratchpad {
+	union {
+		__be32 diff[128];
+		u8 buff[512];
+	};
+};
+
+typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
+
+typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
+
+typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
+
+typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
+
+enum {
+	BPF_F_NEIGH = 2,
+	BPF_F_PEER = 4,
+	BPF_F_NEXTHOP = 8,
+};
+
+typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
+
+typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
+
+typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
+
+typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
+typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
+
+typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
+
+typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
+typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
+
+typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_release)(struct sock *);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *, struct tcphdr *);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *);
+
+typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct bpf_cpu_map_entry;
+
+struct bpf_dtab_netdev;
+
+struct unix_sock;
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 4,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	long unsigned int stat_mask[1];
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	struct udp_seq_afinfo *bpf_seq_afinfo;
+};
+
+struct rpc_sysfs_xprt {
+	struct kobject kobject;
+	struct rpc_xprt *xprt;
+	struct rpc_xprt_switch *xprt_switch;
+};
+
+struct rpc_sysfs_xprt_switch {
+	struct kobject kobject;
+	struct net *net;
+	struct rpc_xprt_switch *xprt_switch;
+	struct rpc_xprt *xprt;
+};
+
+struct rpc_sysfs_client {
+	struct kobject kobject;
+	struct net *net;
+	struct rpc_clnt *clnt;
+	struct rpc_xprt_switch *xprt_switch;
+};
+
+struct cache_detail {
+	struct module *owner;
+	int hash_size;
+	struct hlist_head *hash_table;
+	spinlock_t hash_lock;
+	char *name;
+	void (*cache_put)(struct kref *);
+	int (*cache_upcall)(struct cache_detail *, struct cache_head *);
+	void (*cache_request)(struct cache_detail *, struct cache_head *, char **, int *);
+	int (*cache_parse)(struct cache_detail *, char *, int);
+	int (*cache_show)(struct seq_file *, struct cache_detail *, struct cache_head *);
+	void (*warn_no_listener)(struct cache_detail *, int);
+	struct cache_head * (*alloc)();
+	void (*flush)();
+	int (*match)(struct cache_head *, struct cache_head *);
+	void (*init)(struct cache_head *, struct cache_head *);
+	void (*update)(struct cache_head *, struct cache_head *);
+	time64_t flush_time;
+	struct list_head others;
+	time64_t nextcheck;
+	int entries;
+	struct list_head queue;
+	atomic_t writers;
+	time64_t last_close;
+	time64_t last_warn;
+	union {
+		struct proc_dir_entry *procfs;
+		struct dentry *pipefs;
+	};
+	struct net *net;
+};
+
+struct sunrpc_net {
+	struct proc_dir_entry *proc_net_rpc;
+	struct cache_detail *ip_map_cache;
+	struct cache_detail *unix_gid_cache;
+	struct cache_detail *rsc_cache;
+	struct cache_detail *rsi_cache;
+	struct super_block *pipefs_sb;
+	struct rpc_pipe *gssd_dummy;
+	struct mutex pipefs_sb_lock;
+	struct list_head all_clients;
+	spinlock_t rpc_client_lock;
+	struct rpc_clnt *rpcb_local_clnt;
+	struct rpc_clnt *rpcb_local_clnt4;
+	spinlock_t rpcb_clnt_lock;
+	unsigned int rpcb_users;
+	unsigned int rpcb_is_af_local: 1;
+	struct mutex gssp_lock;
+	struct rpc_clnt *gssp_clnt;
+	int use_gss_proxy;
+	int pipe_version;
+	atomic_t pipe_users;
+	struct proc_dir_entry *use_gssp_proc;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	short unsigned int datalen;
+	long: 0;
+	char data[0];
+};
+
+enum {
+	dns_key_data = 0,
+	dns_key_error = 1,
+};
+
+enum die_val {
+	DIE_OOPS = 1,
+	DIE_IABR_MATCH = 2,
+	DIE_DABR_MATCH = 3,
+	DIE_BPT = 4,
+	DIE_SSTEP = 5,
+};
+
+struct kernel_clone_args {
+	u64 flags;
+	int *pidfd;
+	int *child_tid;
+	int *parent_tid;
+	int exit_signal;
+	long unsigned int stack;
+	long unsigned int stack_size;
+	long unsigned int tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int io_thread;
+	int kthread;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct regbit {
+	long unsigned int bit;
+	const char *name;
+};
+
+struct pci_address {
+	u32 a_hi;
+	u32 a_mid;
+	u32 a_lo;
+};
+
+struct isa_address {
+	u32 a_hi;
+	u32 a_lo;
+};
+
+struct isa_range {
+	struct isa_address isa_addr;
+	struct pci_address pci_addr;
+	unsigned int size;
+};
+
+struct of_drconf_cell_v1 {
+	__be64 base_addr;
+	__be32 drc_index;
+	__be32 reserved;
+	__be32 aa_index;
+	__be32 flags;
+};
+
+struct of_drconf_cell_v2 {
+	u32 seq_lmbs;
+	u64 base_addr;
+	u32 drc_index;
+	u32 aa_index;
+	u32 flags;
+} __attribute__((packed));
+
+struct assoc_arrays {
+	u32 n_arrays;
+	u32 array_sz;
+	const __be32 *arrays;
+};
+
+enum mpic_reg_type {
+	mpic_access_mmio_le = 0,
+	mpic_access_mmio_be = 1,
+};
+
+struct mpic_reg_bank {
+	u32 *base;
+};
+
+struct mpic_irq_save {
+	u32 vecprio;
+	u32 dest;
+};
+
+struct mpic {
+	struct device_node *node;
+	struct irq_domain *irqhost;
+	struct irq_chip hc_irq;
+	struct irq_chip hc_ipi;
+	struct irq_chip hc_tm;
+	struct irq_chip hc_err;
+	const char *name;
+	unsigned int flags;
+	unsigned int isu_size;
+	unsigned int isu_shift;
+	unsigned int isu_mask;
+	unsigned int num_sources;
+	unsigned int ipi_vecs[4];
+	unsigned int timer_vecs[8];
+	unsigned int err_int_vecs[32];
+	unsigned int spurious_vec;
+	enum mpic_reg_type reg_type;
+	phys_addr_t paddr;
+	struct mpic_reg_bank thiscpuregs;
+	struct mpic_reg_bank gregs;
+	struct mpic_reg_bank tmregs;
+	struct mpic_reg_bank cpuregs[32];
+	struct mpic_reg_bank isus[32];
+	u32 *err_regs;
+	long unsigned int *protected;
+	struct msi_bitmap msi_bitmap;
+	struct mpic *next;
+	struct mpic_irq_save *save_data;
+};
+
+enum OpalPendingState {
+	OPAL_EVENT_OPAL_INTERNAL = 1,
+	OPAL_EVENT_NVRAM = 2,
+	OPAL_EVENT_RTC = 4,
+	OPAL_EVENT_CONSOLE_OUTPUT = 8,
+	OPAL_EVENT_CONSOLE_INPUT = 16,
+	OPAL_EVENT_ERROR_LOG_AVAIL = 32,
+	OPAL_EVENT_ERROR_LOG = 64,
+	OPAL_EVENT_EPOW = 128,
+	OPAL_EVENT_LED_STATUS = 256,
+	OPAL_EVENT_PCI_ERROR = 512,
+	OPAL_EVENT_DUMP_AVAIL = 1024,
+	OPAL_EVENT_MSG_PENDING = 2048,
+};
+
+struct elog_obj {
+	struct kobject kobj;
+	struct bin_attribute raw_attr;
+	uint64_t id;
+	uint64_t type;
+	size_t size;
+	char *buffer;
+};
+
+struct elog_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct elog_obj *, struct elog_attribute *, char *);
+	ssize_t (*store)(struct elog_obj *, struct elog_attribute *, const char *, size_t);
+};
+
+enum {
+	OPAL_REBOOT_NORMAL = 0,
+	OPAL_REBOOT_PLATFORM_ERROR = 1,
+	OPAL_REBOOT_FULL_IPL = 2,
+	OPAL_REBOOT_MPIPL = 3,
+	OPAL_REBOOT_FAST = 4,
+};
+
+enum opal_mpipl_ops {
+	OPAL_MPIPL_ADD_RANGE = 0,
+	OPAL_MPIPL_REMOVE_RANGE = 1,
+	OPAL_MPIPL_REMOVE_ALL = 2,
+	OPAL_MPIPL_FREE_PRESERVED_MEMORY = 3,
+};
+
+enum opal_mpipl_tags {
+	OPAL_MPIPL_TAG_CPU = 0,
+	OPAL_MPIPL_TAG_OPAL = 1,
+	OPAL_MPIPL_TAG_KERNEL = 2,
+	OPAL_MPIPL_TAG_BOOT_MEM = 3,
+};
+
+struct opal_mpipl_region {
+	__be64 src;
+	__be64 dest;
+	__be64 size;
+};
+
+struct opal_mpipl_fadump {
+	u8 version;
+	u8 reserved[7];
+	__be32 crashing_pir;
+	__be32 cpu_data_version;
+	__be32 cpu_data_size;
+	__be32 region_cnt;
+	struct opal_mpipl_region region[0];
+};
+
+struct opal_fadump_mem_struct {
+	u8 version;
+	u8 reserved[3];
+	__be16 region_cnt;
+	__be16 registered_regions;
+	__be64 fadumphdr_addr;
+	struct opal_mpipl_region rgn[128];
+};
+
+struct hdat_fadump_thread_hdr {
+	__be32 pir;
+	u8 core_state;
+	u8 reserved[3];
+	__be32 offset;
+	__be32 ecnt;
+	__be32 esize;
+	__be32 eactsz;
+};
+
+struct hdat_fadump_reg_entry {
+	__be32 reg_type;
+	__be32 reg_num;
+	__be64 reg_val;
+};
+
+struct of_drc_info {
+	char *drc_type;
+	char *drc_name_prefix;
+	u32 drc_index_start;
+	u32 drc_name_suffix_start;
+	u32 num_sequential_elems;
+	u32 sequential_inc;
+	u32 drc_power_domain;
+	u32 last_drc_index;
+};
+
+struct hypertas_fw_feature {
+	long unsigned int val;
+	char *name;
+};
+
+struct vec5_fw_feature {
+	long unsigned int val;
+	unsigned int feature;
+};
+
+struct of_reconfig_data {
+	struct device_node *dn;
+	struct property *prop;
+	struct property *old_prop;
+};
 
 struct coprocessor_completion_block {
 	__be64 value;
@@ -21523,795 +49242,1140 @@
 	struct coprocessor_status_block csb;
 };
 
-struct vas_tx_win_open_attr {
-	__u32 version;
-	__s16 vas_id;
-	__u16 reserved1;
-	__u64 flags;
-	__u64 reserved2[6];
+struct hv_vas_all_caps {
+	__be64 descriptor;
+	__be64 feat_type;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct coproc_dev {
-	struct cdev cdev;
-	struct device *device;
-	char *name;
-	dev_t devt;
-	struct class *class;
-	enum vas_cop_type cop_type;
+struct vas_all_caps {
+	u64 descriptor;
+	u64 feat_type;
 };
 
-struct coproc_instance {
-	struct coproc_dev *coproc;
-	struct vas_window *txwin;
+enum vas_migrate_action {
+	VAS_SUSPEND = 0,
+	VAS_RESUME = 1,
 };
 
-struct actag_range {
-	u16 start;
-	u16 count;
+enum vas_cop_feat_type {
+	VAS_GZIP_QOS_FEAT_TYPE = 0,
+	VAS_GZIP_DEF_FEAT_TYPE = 1,
+	VAS_MAX_FEAT_TYPE = 2,
 };
 
-struct npu_link {
-	struct list_head list;
-	int domain;
-	int bus;
-	int dev;
-	u16 fn_desired_actags[8];
-	struct actag_range fn_actags[8];
-	bool assignment_done;
-};
-
-struct spa_data {
-	u64 phb_opal_id;
-	u32 bdfn;
-};
-
-struct hvcall_mpp_data {
-	long unsigned int entitled_mem;
-	long unsigned int mapped_mem;
-	short unsigned int group_num;
-	short unsigned int pool_num;
-	unsigned char mem_weight;
-	unsigned char unallocated_mem_weight;
-	long unsigned int unallocated_entitlement;
-	long unsigned int pool_size;
-	long int loan_request;
-	long unsigned int backing_mem;
-};
-
-struct hvcall_mpp_x_data {
-	long unsigned int coalesced_bytes;
-	long unsigned int pool_coalesced_bytes;
-	long unsigned int pool_purr_cycles;
-	long unsigned int pool_spurr_cycles;
-	long unsigned int reserved[3];
-};
-
-struct dtl_worker {
-	struct delayed_work work;
-	int cpu;
-};
-
-struct vcpu_dispatch_data {
-	int last_disp_cpu;
-	int total_disp;
-	int same_cpu_disp;
-	int same_chip_disp;
-	int diff_chip_disp;
-	int far_chip_disp;
-	int numa_home_disp;
-	int numa_remote_disp;
-	int numa_far_disp;
-};
-
-struct hpt_resize_state {
-	long unsigned int shift;
-	int commit_rc;
-};
-
-struct of_drc_info {
-	char *drc_type;
-	char *drc_name_prefix;
-	u32 drc_index_start;
-	u32 drc_name_suffix_start;
-	u32 num_sequential_elems;
-	u32 sequential_inc;
-	u32 drc_power_domain;
-	u32 last_drc_index;
-};
-
-struct h_cpu_char_result {
-	u64 character;
-	u64 behaviour;
-};
-
-struct of_reconfig_data {
-	struct device_node *dn;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-enum swiotlb_force {
-	SWIOTLB_NORMAL = 0,
-	SWIOTLB_FORCE = 1,
-	SWIOTLB_NO_FORCE = 2,
-};
-
-enum rtas_iov_fw_value_map {
-	NUM_RES_PROPERTY = 0,
-	LOW_INT = 1,
-	START_OF_ENTRIES = 2,
-	APERTURE_PROPERTY = 2,
-	WDW_SIZE_PROPERTY = 4,
-	NEXT_ENTRY = 7,
-};
-
-enum get_iov_fw_value_index {
-	BAR_ADDRS = 1,
-	APERTURE_SIZE = 2,
-	WDW_SIZE = 3,
-};
-
-struct memory_notify {
-	long unsigned int start_pfn;
-	long unsigned int nr_pages;
-	int status_change_nid_normal;
-	int status_change_nid_high;
-	int status_change_nid;
-};
-
-enum {
-	DDW_QUERY_PE_DMA_WIN = 0,
-	DDW_CREATE_PE_DMA_WIN = 1,
-	DDW_REMOVE_PE_DMA_WIN = 2,
-	DDW_APPLICABLE_SIZE = 3,
-};
-
-enum {
-	DDW_EXT_SIZE = 0,
-	DDW_EXT_RESET_DMA_WIN = 1,
-	DDW_EXT_QUERY_OUT_SIZE = 2,
-};
-
-struct dynamic_dma_window_prop {
-	__be32 liobn;
-	__be64 dma_base;
-	__be32 tce_shift;
-	__be32 window_shift;
-};
-
-struct direct_window {
-	struct device_node *device;
-	const struct dynamic_dma_window_prop *prop;
-	struct list_head list;
-};
-
-struct ddw_query_response {
-	u32 windows_available;
-	u64 largest_available_block;
-	u32 page_size;
-	u32 migration_capable;
-};
-
-struct ddw_create_response {
-	u32 liobn;
-	u32 addr_hi;
-	u32 addr_lo;
-};
-
-struct failed_ddw_pdn {
-	struct device_node *pdn;
-	struct list_head list;
-};
-
-struct pseries_hp_errorlog {
-	u8 resource;
-	u8 action;
-	u8 id_type;
-	u8 reserved;
+struct hv_vas_cop_feat_caps {
+	__be64 descriptor;
+	u8 win_type;
+	u8 user_mode;
+	__be16 max_lpar_creds;
+	__be16 max_win_creds;
 	union {
-		__be32 drc_index;
-		__be32 drc_count;
-		struct {
-			__be32 count;
-			__be32 index;
-		} ic;
-		char drc_name[1];
-	} _drc_u;
+		__be16 reserved;
+		__be16 def_lpar_creds;
+	};
+	__be16 target_lpar_creds;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct pseries_mc_errorlog {
-	__be32 fru_id;
-	__be32 proc_id;
-	u8 error_type;
-	u8 sub_err_type;
-	u8 reserved_1[6];
-	__be64 effective_address;
-	__be64 logical_address;
+struct vas_cop_feat_caps {
+	u64 descriptor;
+	u8 win_type;
+	u8 user_mode;
+	u16 max_lpar_creds;
+	u16 max_win_creds;
+	union {
+		u16 reserved;
+		u16 def_lpar_creds;
+	};
+	atomic_t nr_total_credits;
+	atomic_t nr_used_credits;
 };
 
-struct epow_errorlog {
-	unsigned char sensor_value;
-	unsigned char event_modifier;
-	unsigned char extended_modifier;
-	unsigned char reserved;
-	unsigned char platform_reason;
-};
-
-struct hypertas_fw_feature {
-	long unsigned int val;
-	char *name;
-};
-
-struct vec5_fw_feature {
-	long unsigned int val;
-	unsigned int feature;
-};
-
-enum {
-	WQ_UNBOUND = 2,
-	WQ_FREEZABLE = 4,
-	WQ_MEM_RECLAIM = 8,
-	WQ_HIGHPRI = 16,
-	WQ_CPU_INTENSIVE = 32,
-	WQ_SYSFS = 64,
-	WQ_POWER_EFFICIENT = 128,
-	__WQ_DRAINING = 65536,
-	__WQ_ORDERED = 131072,
-	__WQ_LEGACY = 262144,
-	__WQ_ORDERED_EXPLICIT = 524288,
-	WQ_MAX_ACTIVE = 512,
-	WQ_MAX_UNBOUND_PER_CPU = 4,
-	WQ_DFL_ACTIVE = 256,
-};
-
-struct class_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct class *, struct class_attribute *, char *);
-	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
-};
-
-struct pseries_hp_work {
-	struct work_struct work;
-	struct pseries_hp_errorlog *errlog;
-};
-
-struct cc_workarea {
-	__be32 drc_index;
-	__be32 zero;
-	__be32 name_offset;
-	__be32 prop_length;
-	__be32 prop_offset;
-};
-
-struct class_attribute_string {
-	struct class_attribute attr;
-	char *str;
-};
-
-struct update_props_workarea {
-	__be32 phandle;
-	__be32 state;
-	__be64 reserved;
-	__be32 nprops;
-} __attribute__((packed));
-
-enum pci_bus_speed {
-	PCI_SPEED_33MHz = 0,
-	PCI_SPEED_66MHz = 1,
-	PCI_SPEED_66MHz_PCIX = 2,
-	PCI_SPEED_100MHz_PCIX = 3,
-	PCI_SPEED_133MHz_PCIX = 4,
-	PCI_SPEED_66MHz_PCIX_ECC = 5,
-	PCI_SPEED_100MHz_PCIX_ECC = 6,
-	PCI_SPEED_133MHz_PCIX_ECC = 7,
-	PCI_SPEED_66MHz_PCIX_266 = 9,
-	PCI_SPEED_100MHz_PCIX_266 = 10,
-	PCI_SPEED_133MHz_PCIX_266 = 11,
-	AGP_UNKNOWN = 12,
-	AGP_1X = 13,
-	AGP_2X = 14,
-	AGP_4X = 15,
-	AGP_8X = 16,
-	PCI_SPEED_66MHz_PCIX_533 = 17,
-	PCI_SPEED_100MHz_PCIX_533 = 18,
-	PCI_SPEED_133MHz_PCIX_533 = 19,
-	PCIE_SPEED_2_5GT = 20,
-	PCIE_SPEED_5_0GT = 21,
-	PCIE_SPEED_8_0GT = 22,
-	PCIE_SPEED_16_0GT = 23,
-	PCIE_SPEED_32_0GT = 24,
-	PCI_SPEED_UNKNOWN = 255,
-};
-
-struct pe_map_bar_entry {
-	__be64 bar;
-	__be16 rid;
-	__be16 pe_num;
-	__be32 reserved;
-};
-
-struct msi_counts {
-	struct device_node *requestor;
-	int num_devices;
-	int request;
-	int quota;
-	int spare;
-	int over_quota;
-};
-
-typedef void (*exitcall_t)();
-
-typedef int mhp_t;
-
-struct memory_block {
-	long unsigned int start_section_nr;
-	long unsigned int state;
-	int online_type;
-	int phys_device;
-	struct device dev;
-	int nid;
-};
-
-struct pseries_io_event {
-	uint8_t event_type;
-	uint8_t rpc_data_len;
-	uint8_t scope;
-	uint8_t event_subtype;
-	uint32_t drc_index;
-	uint8_t rpc_data[216];
-};
-
-struct vio_device_id {
-	char type[32];
-	char compat[32];
-};
-
-struct vio_pfo_op {
-	u64 flags;
-	s64 in;
-	s64 inlen;
-	s64 out;
-	s64 outlen;
-	u64 csbcpb;
-	void *done;
-	long unsigned int handle;
-	unsigned int timeout;
-	long int hcall_err;
-};
-
-enum vio_dev_family {
-	VDEVICE = 0,
-	PFO = 1,
-};
-
-struct vio_dev {
-	const char *name;
-	const char *type;
-	uint32_t unit_address;
-	uint32_t resource_id;
-	unsigned int irq;
-	struct {
-		size_t desired;
-		size_t entitled;
-		size_t allocated;
-		atomic_t allocs_failed;
-	} cmo;
-	enum vio_dev_family family;
-	struct device dev;
-};
-
-struct vio_driver {
-	const char *name;
-	const struct vio_device_id *id_table;
-	int (*probe)(struct vio_dev *, const struct vio_device_id *);
-	int (*remove)(struct vio_dev *);
-	long unsigned int (*get_desired_dma)(struct vio_dev *);
-	const struct dev_pm_ops *pm;
-	struct device_driver driver;
-};
-
-typedef int suspend_state_t;
-
-struct platform_suspend_ops {
-	int (*valid)(suspend_state_t);
-	int (*begin)(suspend_state_t);
-	int (*prepare)();
-	int (*prepare_late)();
-	int (*enter)(suspend_state_t);
-	void (*wake)();
-	void (*finish)();
-	bool (*suspend_again)();
-	void (*end)();
-	void (*recover)();
-};
-
-enum {
-	DUMP_PREFIX_NONE = 0,
-	DUMP_PREFIX_ADDRESS = 1,
-	DUMP_PREFIX_OFFSET = 2,
-};
-
-enum {
-	BPF_REG_0 = 0,
-	BPF_REG_1 = 1,
-	BPF_REG_2 = 2,
-	BPF_REG_3 = 3,
-	BPF_REG_4 = 4,
-	BPF_REG_5 = 5,
-	BPF_REG_6 = 6,
-	BPF_REG_7 = 7,
-	BPF_REG_8 = 8,
-	BPF_REG_9 = 9,
-	BPF_REG_10 = 10,
-	__MAX_BPF_REG = 11,
-};
-
-struct bpf_binary_header {
-	u32 pages;
-	int: 32;
-	u8 image[0];
-};
-
-struct codegen_context {
-	unsigned int seen;
-	unsigned int idx;
-	unsigned int stack_size;
-};
-
-struct powerpc64_jit_data {
-	struct bpf_binary_header *header;
-	u32 *addrs;
-	u8 *image;
-	u32 proglen;
-	struct codegen_context ctx;
-};
-
-enum ftrace_dump_mode {
-	DUMP_NONE = 0,
-	DUMP_ALL = 1,
-	DUMP_ORIG = 2,
-};
-
-enum tk_offsets {
-	TK_OFFS_REAL = 0,
-	TK_OFFS_BOOT = 1,
-	TK_OFFS_TAI = 2,
-	TK_OFFS_MAX = 3,
-};
-
-struct sysrq_key_op {
-	void (* const handler)(int);
-	const char * const help_msg;
-	const char * const action_msg;
-	const int enable_mask;
-};
-
-enum lockdown_reason {
-	LOCKDOWN_NONE = 0,
-	LOCKDOWN_MODULE_SIGNATURE = 1,
-	LOCKDOWN_DEV_MEM = 2,
-	LOCKDOWN_EFI_TEST = 3,
-	LOCKDOWN_KEXEC = 4,
-	LOCKDOWN_HIBERNATION = 5,
-	LOCKDOWN_PCI_ACCESS = 6,
-	LOCKDOWN_IOPORT = 7,
-	LOCKDOWN_MSR = 8,
-	LOCKDOWN_ACPI_TABLES = 9,
-	LOCKDOWN_PCMCIA_CIS = 10,
-	LOCKDOWN_TIOCSSERIAL = 11,
-	LOCKDOWN_MODULE_PARAMETERS = 12,
-	LOCKDOWN_MMIOTRACE = 13,
-	LOCKDOWN_DEBUGFS = 14,
-	LOCKDOWN_XMON_WR = 15,
-	LOCKDOWN_INTEGRITY_MAX = 16,
-	LOCKDOWN_KCORE = 17,
-	LOCKDOWN_KPROBES = 18,
-	LOCKDOWN_BPF_READ = 19,
-	LOCKDOWN_PERF = 20,
-	LOCKDOWN_TRACEFS = 21,
-	LOCKDOWN_XMON_RW = 22,
-	LOCKDOWN_CONFIDENTIALITY_MAX = 23,
-};
-
-enum {
-	XIVE_DUMP_TM_HYP = 0,
-	XIVE_DUMP_TM_POOL = 1,
-	XIVE_DUMP_TM_OS = 2,
-	XIVE_DUMP_TM_USER = 3,
-	XIVE_DUMP_VP = 4,
-	XIVE_DUMP_EMU_STATE = 5,
-};
-
-struct bpt {
-	long unsigned int address;
-	struct ppc_inst *instr;
-	atomic_t ref_count;
-	int enabled;
-	long unsigned int pad;
-};
-
-typedef int (*instruction_dump_func)(long unsigned int, long unsigned int);
-
-typedef long unsigned int (*callfunc_t)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef uint64_t ppc_cpu_t;
-
-struct powerpc_opcode {
-	const char *name;
-	long unsigned int opcode;
-	long unsigned int mask;
-	ppc_cpu_t flags;
-	ppc_cpu_t deprecated;
-	unsigned char operands[8];
-};
-
-struct powerpc_operand {
-	unsigned int bitm;
-	int shift;
-	long unsigned int (*insert)(long unsigned int, long int, ppc_cpu_t, const char **);
-	long int (*extract)(long unsigned int, ppc_cpu_t, int *);
-	long unsigned int flags;
-};
-
-struct powerpc_macro {
-	const char *name;
-	unsigned int operands;
-	ppc_cpu_t flags;
-	const char *format;
-};
-
-struct kvmppc_spapr_tce_iommu_table {
-	struct callback_head rcu;
-	struct list_head next;
-	struct iommu_table *tbl;
-	struct kref kref;
-};
-
-struct kvmppc_spapr_tce_table {
+struct vas_caps {
+	struct vas_cop_feat_caps caps;
 	struct list_head list;
-	struct kvm *kvm;
-	u64 liobn;
-	struct callback_head rcu;
-	u32 page_shift;
-	u64 offset;
-	u64 size;
-	struct list_head iommu_tables;
-	struct mutex alloc_lock;
-	struct page *pages[0];
+	int nr_close_wins;
+	int nr_open_windows;
+	u8 feat;
 };
 
-struct mm_iommu_table_group_mem_t___2;
-
-struct kvm_device_attr {
-	__u32 flags;
-	__u32 group;
-	__u64 attr;
-	__u64 addr;
+struct pseries_vas_window {
+	struct vas_window vas_win;
+	u64 win_addr;
+	u8 win_type;
+	u32 complete_irq;
+	u32 fault_irq;
+	u64 domain[6];
+	u64 util;
+	u32 pid;
+	struct list_head win_list;
+	u64 flags;
+	char *name;
+	int fault_virq;
 };
 
-struct kvm_device;
-
-struct kvm_device_ops {
-	const char *name;
-	int (*create)(struct kvm_device *, u32);
-	void (*init)(struct kvm_device *);
-	void (*destroy)(struct kvm_device *);
-	void (*release)(struct kvm_device *);
-	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
-	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
-	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+struct sigaltstack {
+	void *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
 };
 
-struct kvmppc_xive_src_block;
+typedef struct sigaltstack stack_t;
 
-struct kvmppc_xive_ops;
-
-struct kvmppc_xive {
-	struct kvm *kvm;
-	struct kvm_device *dev;
-	struct dentry *dentry;
-	u32 vp_base;
-	struct kvmppc_xive_src_block *src_blocks[1024];
-	u32 max_sbid;
-	u32 src_count;
-	u32 saved_src_count;
-	u32 delayed_irqs;
-	u8 qmap;
-	u32 q_order;
-	u32 q_page_order;
-	u8 single_escalation;
-	u32 nr_servers;
-	struct kvmppc_xive_ops *ops;
-	struct address_space *mapping;
-	struct mutex mapping_lock;
-	struct mutex lock;
-};
-
-struct kvmppc_ics;
-
-struct kvmppc_xics {
-	struct kvm *kvm;
-	struct kvm_device *dev;
-	struct dentry *dentry;
-	u32 max_icsid;
-	bool real_mode;
-	bool real_mode_dbg;
-	u32 err_noics;
-	u32 err_noicp;
-	struct kvmppc_ics *ics[1024];
-};
-
-union kvmppc_icp_state {
-	long unsigned int raw;
-	struct {
-		u8 out_ee: 1;
-		u8 need_resend: 1;
-		u8 cppr;
-		u8 mfrr;
-		u8 pending_pri;
-		u32 xisr;
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
 	};
 };
 
-struct kvmppc_icp {
-	struct kvm_vcpu *vcpu;
-	long unsigned int server_num;
-	union kvmppc_icp_state state;
-	long unsigned int resend_map[16];
-	u32 rm_action;
-	struct kvm_vcpu *rm_kick_target;
-	struct kvmppc_icp *rm_resend_icp;
-	u32 rm_reject;
-	u32 rm_eoied_irq;
-	long unsigned int n_rm_kick_vcpu;
-	long unsigned int n_rm_check_resend;
-	long unsigned int n_rm_notify_eoi;
-	long unsigned int n_check_resend;
-	long unsigned int n_reject;
-	union kvmppc_icp_state rm_dbgstate;
-	struct kvm_vcpu *rm_dbgtgt;
+typedef double elf_fpreg_t;
+
+typedef elf_fpreg_t elf_fpregset_t[33];
+
+struct sigcontext {
+	long unsigned int _unused[4];
+	int signal;
+	int _pad0;
+	long unsigned int handler;
+	long unsigned int oldmask;
+	struct user_pt_regs *regs;
+	elf_gregset_t gp_regs;
+	elf_fpregset_t fp_regs;
+	elf_vrreg_t *v_regs;
+	long int vmx_reserve[101];
 };
 
-struct kvmppc_xive_vcpu {
-	struct kvmppc_xive *xive;
-	struct kvm_vcpu *vcpu;
-	bool valid;
-	u32 server_num;
-	u32 vp_id;
-	u32 vp_chip_id;
-	u32 vp_cam;
-	u32 vp_ipi;
-	struct xive_irq_data vp_ipi_data;
-	uint8_t cppr;
-	uint8_t hw_cppr;
-	uint8_t mfrr;
-	uint8_t pending;
-	struct xive_q queues[8];
-	u32 esc_virq[8];
-	char *esc_virq_names[8];
-	u32 delayed_irq;
-	u64 stat_rm_h_xirr;
-	u64 stat_rm_h_ipoll;
-	u64 stat_rm_h_cppr;
-	u64 stat_rm_h_eoi;
-	u64 stat_rm_h_ipi;
-	u64 stat_vm_h_xirr;
-	u64 stat_vm_h_ipoll;
-	u64 stat_vm_h_cppr;
-	u64 stat_vm_h_eoi;
-	u64 stat_vm_h_ipi;
-};
-
-struct kvm_device {
-	const struct kvm_device_ops *ops;
-	struct kvm *kvm;
-	void *private;
-	struct list_head vm_node;
-};
-
-union kvmppc_rm_state {
-	long unsigned int raw;
-	struct {
-		u32 in_host;
-		u32 rm_action;
-	};
-};
-
-struct kvmppc_host_rm_core {
-	union kvmppc_rm_state rm_state;
-	void *rm_data;
-	char pad[112];
-};
-
-struct kvmppc_host_rm_ops {
-	struct kvmppc_host_rm_core *rm_core;
-	void (*vcpu_kick)(struct kvm_vcpu *);
-};
-
-struct ics_irq_state {
-	u32 number;
-	u32 server;
-	u32 pq_state;
-	u8 priority;
-	u8 saved_priority;
-	u8 resend;
-	u8 masked_pending;
-	u8 lsi;
-	u8 exists;
-	int intr_cpu;
-	u32 host_irq;
-};
-
-struct kvmppc_ics {
-	arch_spinlock_t lock;
-	u16 icsid;
-	struct ics_irq_state irq_state[1024];
-};
-
-struct kvmppc_xive_irq_state {
-	bool valid;
-	u32 number;
-	u32 ipi_number;
-	struct xive_irq_data ipi_data;
-	u32 pt_number;
-	struct xive_irq_data *pt_data;
-	u8 guest_priority;
-	u8 saved_priority;
-	u32 act_server;
-	u8 act_priority;
-	bool in_eoi;
-	bool old_p;
-	bool old_q;
-	bool lsi;
-	bool asserted;
-	bool in_queue;
-	bool saved_p;
-	bool saved_q;
-	u8 saved_scan_prio;
-	u32 eisn;
-};
-
-struct kvmppc_xive_src_block {
-	arch_spinlock_t lock;
-	u16 id;
-	struct kvmppc_xive_irq_state irq_state[1024];
-};
-
-struct kvmppc_xive_ops {
-	int (*reset_mapped)(struct kvm *, long unsigned int);
-};
-
-struct cma;
-
-struct kernel_stat {
-	long unsigned int irqs_sum;
-	unsigned int softirqs[10];
-};
-
-enum {
-	scan_fetch = 0,
-	scan_poll = 1,
-	scan_eoi = 2,
-};
-
-enum perf_callchain_context {
-	PERF_CONTEXT_HV = 4294967264,
-	PERF_CONTEXT_KERNEL = 4294967168,
-	PERF_CONTEXT_USER = 4294966784,
-	PERF_CONTEXT_GUEST = 4294965248,
-	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
-	PERF_CONTEXT_GUEST_USER = 4294964736,
-	PERF_CONTEXT_MAX = 4294963201,
-};
-
-struct perf_callchain_entry_ctx {
-	struct perf_callchain_entry *entry;
-	u32 max_stack;
-	u32 nr;
-	short int contexts;
-	bool contexts_maxed;
+struct ucontext {
+	long unsigned int uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	sigset_t uc_sigmask;
+	sigset_t __unused[15];
+	struct sigcontext uc_mcontext;
 };
 
 struct signal_frame_64 {
@@ -22325,1569 +50389,34 @@
 	char abigap[288];
 };
 
-enum perf_sample_regs_abi {
-	PERF_SAMPLE_REGS_ABI_NONE = 0,
-	PERF_SAMPLE_REGS_ABI_32 = 1,
-	PERF_SAMPLE_REGS_ABI_64 = 2,
-};
-
-enum perf_event_powerpc_regs {
-	PERF_REG_POWERPC_R0 = 0,
-	PERF_REG_POWERPC_R1 = 1,
-	PERF_REG_POWERPC_R2 = 2,
-	PERF_REG_POWERPC_R3 = 3,
-	PERF_REG_POWERPC_R4 = 4,
-	PERF_REG_POWERPC_R5 = 5,
-	PERF_REG_POWERPC_R6 = 6,
-	PERF_REG_POWERPC_R7 = 7,
-	PERF_REG_POWERPC_R8 = 8,
-	PERF_REG_POWERPC_R9 = 9,
-	PERF_REG_POWERPC_R10 = 10,
-	PERF_REG_POWERPC_R11 = 11,
-	PERF_REG_POWERPC_R12 = 12,
-	PERF_REG_POWERPC_R13 = 13,
-	PERF_REG_POWERPC_R14 = 14,
-	PERF_REG_POWERPC_R15 = 15,
-	PERF_REG_POWERPC_R16 = 16,
-	PERF_REG_POWERPC_R17 = 17,
-	PERF_REG_POWERPC_R18 = 18,
-	PERF_REG_POWERPC_R19 = 19,
-	PERF_REG_POWERPC_R20 = 20,
-	PERF_REG_POWERPC_R21 = 21,
-	PERF_REG_POWERPC_R22 = 22,
-	PERF_REG_POWERPC_R23 = 23,
-	PERF_REG_POWERPC_R24 = 24,
-	PERF_REG_POWERPC_R25 = 25,
-	PERF_REG_POWERPC_R26 = 26,
-	PERF_REG_POWERPC_R27 = 27,
-	PERF_REG_POWERPC_R28 = 28,
-	PERF_REG_POWERPC_R29 = 29,
-	PERF_REG_POWERPC_R30 = 30,
-	PERF_REG_POWERPC_R31 = 31,
-	PERF_REG_POWERPC_NIP = 32,
-	PERF_REG_POWERPC_MSR = 33,
-	PERF_REG_POWERPC_ORIG_R3 = 34,
-	PERF_REG_POWERPC_CTR = 35,
-	PERF_REG_POWERPC_LINK = 36,
-	PERF_REG_POWERPC_XER = 37,
-	PERF_REG_POWERPC_CCR = 38,
-	PERF_REG_POWERPC_SOFTE = 39,
-	PERF_REG_POWERPC_TRAP = 40,
-	PERF_REG_POWERPC_DAR = 41,
-	PERF_REG_POWERPC_DSISR = 42,
-	PERF_REG_POWERPC_SIER = 43,
-	PERF_REG_POWERPC_MMCRA = 44,
-	PERF_REG_POWERPC_MMCR0 = 45,
-	PERF_REG_POWERPC_MMCR1 = 46,
-	PERF_REG_POWERPC_MMCR2 = 47,
-	PERF_REG_POWERPC_MMCR3 = 48,
-	PERF_REG_POWERPC_SIER2 = 49,
-	PERF_REG_POWERPC_SIER3 = 50,
-	PERF_REG_POWERPC_MAX = 45,
-};
-
-struct signal_frame_32 {
-	char dummy[64];
-	struct sigcontext32 sctx;
-	struct mcontext32 mctx;
-	int abigap[56];
-};
-
-struct rt_signal_frame_32 {
-	char dummy[80];
-	compat_siginfo_t info;
-	struct ucontext32 uc;
-	int abigap[56];
-};
-
-enum perf_event_sample_format {
-	PERF_SAMPLE_IP = 1,
-	PERF_SAMPLE_TID = 2,
-	PERF_SAMPLE_TIME = 4,
-	PERF_SAMPLE_ADDR = 8,
-	PERF_SAMPLE_READ = 16,
-	PERF_SAMPLE_CALLCHAIN = 32,
-	PERF_SAMPLE_ID = 64,
-	PERF_SAMPLE_CPU = 128,
-	PERF_SAMPLE_PERIOD = 256,
-	PERF_SAMPLE_STREAM_ID = 512,
-	PERF_SAMPLE_RAW = 1024,
-	PERF_SAMPLE_BRANCH_STACK = 2048,
-	PERF_SAMPLE_REGS_USER = 4096,
-	PERF_SAMPLE_STACK_USER = 8192,
-	PERF_SAMPLE_WEIGHT = 16384,
-	PERF_SAMPLE_DATA_SRC = 32768,
-	PERF_SAMPLE_IDENTIFIER = 65536,
-	PERF_SAMPLE_TRANSACTION = 131072,
-	PERF_SAMPLE_REGS_INTR = 262144,
-	PERF_SAMPLE_PHYS_ADDR = 524288,
-	PERF_SAMPLE_AUX = 1048576,
-	PERF_SAMPLE_CGROUP = 2097152,
-	PERF_SAMPLE_MAX = 4194304,
-	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
-};
-
-struct mmcr_regs {
-	long unsigned int mmcr0;
-	long unsigned int mmcr1;
-	long unsigned int mmcr2;
-	long unsigned int mmcra;
-	long unsigned int mmcr3;
-};
-
-struct power_pmu {
-	const char *name;
-	int n_counter;
-	int max_alternatives;
-	long unsigned int add_fields;
-	long unsigned int test_adder;
-	int (*compute_mmcr)(u64 *, int, unsigned int *, struct mmcr_regs *, struct perf_event **);
-	int (*get_constraint)(u64, long unsigned int *, long unsigned int *);
-	int (*get_alternatives)(u64, unsigned int, u64 *);
-	void (*get_mem_data_src)(union perf_mem_data_src *, u32, struct pt_regs *);
-	void (*get_mem_weight)(u64 *);
-	long unsigned int group_constraint_mask;
-	long unsigned int group_constraint_val;
-	u64 (*bhrb_filter_map)(u64);
-	void (*config_bhrb)(u64);
-	void (*disable_pmc)(unsigned int, struct mmcr_regs *);
-	int (*limited_pmc_event)(u64);
-	u32 flags;
-	const struct attribute_group **attr_groups;
-	int n_generic;
-	int *generic_events;
-	u64 (*cache_events)[42];
-	int n_blacklist_ev;
-	int *blacklist_ev;
-	int bhrb_nr;
-	int capabilities;
-};
-
-struct perf_pmu_events_attr {
-	struct device_attribute attr;
-	u64 id;
-	const char *event_str;
-};
-
-struct cpu_hw_events {
-	int n_events;
-	int n_percpu;
-	int disabled;
-	int n_added;
-	int n_limited;
-	u8 pmcs_enabled;
-	struct perf_event *event[8];
-	u64 events[8];
-	unsigned int flags[8];
-	struct mmcr_regs mmcr;
-	struct perf_event *limited_counter[2];
-	u8 limited_hwidx[2];
-	u64 alternatives[64];
-	long unsigned int amasks[64];
-	long unsigned int avalues[64];
-	unsigned int txn_flags;
-	int n_txn_start;
-	u64 bhrb_filter;
-	unsigned int bhrb_users;
-	void *bhrb_context;
-	struct perf_branch_stack bhrb_stack;
-	struct perf_branch_entry bhrb_entries[32];
-	u64 ic_init;
-};
-
-struct perf_event_header {
-	__u32 type;
-	__u16 misc;
-	__u16 size;
-};
-
-enum perf_event_type {
-	PERF_RECORD_MMAP = 1,
-	PERF_RECORD_LOST = 2,
-	PERF_RECORD_COMM = 3,
-	PERF_RECORD_EXIT = 4,
-	PERF_RECORD_THROTTLE = 5,
-	PERF_RECORD_UNTHROTTLE = 6,
-	PERF_RECORD_FORK = 7,
-	PERF_RECORD_READ = 8,
-	PERF_RECORD_SAMPLE = 9,
-	PERF_RECORD_MMAP2 = 10,
-	PERF_RECORD_AUX = 11,
-	PERF_RECORD_ITRACE_START = 12,
-	PERF_RECORD_LOST_SAMPLES = 13,
-	PERF_RECORD_SWITCH = 14,
-	PERF_RECORD_SWITCH_CPU_WIDE = 15,
-	PERF_RECORD_NAMESPACES = 16,
-	PERF_RECORD_KSYMBOL = 17,
-	PERF_RECORD_BPF_EVENT = 18,
-	PERF_RECORD_CGROUP = 19,
-	PERF_RECORD_TEXT_POKE = 20,
-	PERF_RECORD_MAX = 21,
-};
-
-struct trace_imc_data {
-	u64 tb1;
-	u64 ip;
-	u64 val;
-	u64 cpmc1;
-	u64 cpmc2;
-	u64 cpmc3;
-	u64 cpmc4;
-	u64 tb2;
-};
-
-struct imc_pmu_ref {
-	struct mutex lock;
-	unsigned int id;
-	int refc;
-};
-
-struct dev_ext_attribute {
-	struct device_attribute attr;
-	void *var;
-};
-
-enum hv_perf_domains {
-	HV_PERF_DOMAIN_PHYS_CHIP = 1,
-	HV_PERF_DOMAIN_PHYS_CORE = 2,
-	HV_PERF_DOMAIN_VCPU_HOME_CORE = 3,
-	HV_PERF_DOMAIN_VCPU_HOME_CHIP = 4,
-	HV_PERF_DOMAIN_VCPU_HOME_NODE = 5,
-	HV_PERF_DOMAIN_VCPU_REMOTE_NODE = 6,
-	HV_PERF_DOMAIN_MAX = 7,
-};
-
-struct hv_24x7_request {
-	__u8 performance_domain;
-	__u8 reserved[1];
-	__be16 data_size;
-	__be32 data_offset;
-	__be16 starting_lpar_ix;
-	__be16 max_num_lpars;
-	__be16 starting_ix;
-	__be16 max_ix;
-	__u8 starting_thread_group_ix;
-	__u8 max_num_thread_groups;
-	__u8 reserved2[14];
-};
-
-struct hv_24x7_request_buffer {
-	__u8 interface_version;
-	__u8 num_requests;
-	__u8 reserved[14];
-	struct hv_24x7_request requests[0];
-};
-
-struct hv_24x7_result {
-	__u8 result_ix;
-	__u8 results_complete;
-	__be16 num_elements_returned;
-	__be16 result_element_data_size;
-	__u8 reserved[2];
-	char elements[0];
-};
-
-struct hv_24x7_data_result_buffer {
-	__u8 interface_version;
-	__u8 num_results;
-	__u8 reserved[1];
-	__u8 failing_request_ix;
-	__be32 detailed_rc;
-	__be64 cec_cfg_instance_id;
-	__be64 catalog_version_num;
-	__u8 reserved2[8];
-	struct hv_24x7_result results[0];
-};
-
-struct hv_24x7_catalog_page_0 {
-	__be32 magic;
-	__be32 length;
-	__be64 version;
-	__u8 build_time_stamp[16];
-	__u8 reserved2[32];
-	__be16 schema_data_offs;
-	__be16 schema_data_len;
-	__be16 schema_entry_count;
-	__u8 reserved3[2];
-	__be16 event_data_offs;
-	__be16 event_data_len;
-	__be16 event_entry_count;
-	__u8 reserved4[2];
-	__be16 group_data_offs;
-	__be16 group_data_len;
-	__be16 group_entry_count;
-	__u8 reserved5[2];
-	__be16 formula_data_offs;
-	__be16 formula_data_len;
-	__be16 formula_entry_count;
-	__u8 reserved6[2];
-};
-
-struct hv_24x7_event_data {
-	__be16 length;
-	__u8 reserved1[2];
-	__u8 domain;
-	__u8 reserved2[1];
-	__be16 event_group_record_offs;
-	__be16 event_group_record_len;
-	__be16 event_counter_offs;
-	__be32 flags;
-	__be16 primary_group_ix;
-	__be16 group_count;
-	__be16 event_name_len;
-	__u8 remainder[0];
-} __attribute__((packed));
-
-struct hv_perf_caps {
-	u16 version;
-	u16 collect_privileged: 1;
-	u16 ga: 1;
-	u16 expanded: 1;
-	u16 lab: 1;
-	u16 unused: 12;
-};
-
-struct hv_24x7_hw {
-	struct perf_event *events[255];
-};
-
-struct event_uniq {
-	struct rb_node node;
-	const char *name;
-	int nl;
-	unsigned int ct;
-	unsigned int domain;
-};
-
-struct hv_get_perf_counter_info_params {
-	__be32 counter_request;
-	__be32 starting_index;
-	__be16 secondary_index;
-	__be16 returned_values;
-	__be32 detail_rc;
-	__be16 cv_element_size;
-	__u8 counter_info_version_in;
-	__u8 counter_info_version_out;
-	__u8 reserved[12];
-	__u8 counter_value[0];
-};
-
-struct hv_gpci_request_buffer {
-	struct hv_get_perf_counter_info_params params;
-	uint8_t bytes[4064];
-};
-
 enum {
-	HV_GPCI_CM_GA = 128,
-	HV_GPCI_CM_EXPANDED = 64,
-	HV_GPCI_CM_LAB = 32,
-};
-
-enum hv_gpci_requests {
-	HV_GPCI_dispatch_timebase_by_processor = 16,
-	HV_GPCI_entitled_capped_uncapped_donated_idle_timebase_by_partition = 32,
-	HV_GPCI_run_instructions_run_cycles_by_partition = 48,
-	HV_GPCI_system_performance_capabilities = 64,
-	HV_GPCI_processor_bus_utilization_abc_links = 80,
-	HV_GPCI_processor_bus_utilization_wxyz_links = 96,
-	HV_GPCI_processor_bus_utilization_gx_links = 112,
-	HV_GPCI_processor_bus_utilization_mc_links = 128,
-	HV_GPCI_processor_core_utilization = 148,
-	HV_GPCI_partition_hypervisor_queuing_times = 224,
-	HV_GPCI_system_hypervisor_times = 240,
-	HV_GPCI_system_tlbie_count_and_time = 244,
-	HV_GPCI_partition_instruction_count_and_time = 256,
-};
-
-struct hv_gpci_system_performance_capabilities {
-	__u8 perf_collect_privileged;
-	__u8 capability_mask;
-	__u8 reserved[14];
-};
-
-struct p {
-	struct hv_get_perf_counter_info_params params;
-	struct hv_gpci_system_performance_capabilities caps;
-};
-
-enum perf_hw_id {
-	PERF_COUNT_HW_CPU_CYCLES = 0,
-	PERF_COUNT_HW_INSTRUCTIONS = 1,
-	PERF_COUNT_HW_CACHE_REFERENCES = 2,
-	PERF_COUNT_HW_CACHE_MISSES = 3,
-	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
-	PERF_COUNT_HW_BRANCH_MISSES = 5,
-	PERF_COUNT_HW_BUS_CYCLES = 6,
-	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
-	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
-	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
-	PERF_COUNT_HW_MAX = 10,
-};
-
-enum {
-	PM_IC_DEMAND_L2_BR_ALL = 18584,
-	PM_GCT_UTIL_7_TO_10_SLOTS = 8352,
-	PM_PMC2_SAVED = 65570,
-	PM_CMPLU_STALL_DFU = 131132,
-	PM_VSU0_16FLOP = 41124,
-	PM_MRK_LSU_DERAT_MISS = 249946,
-	PM_MRK_ST_CMPL = 65588,
-	PM_NEST_PAIR3_ADD = 264321,
-	PM_L2_ST_DISP = 287104,
-	PM_L2_CASTOUT_MOD = 90496,
-	PM_ISEG = 8356,
-	PM_MRK_INST_TIMEO = 262196,
-	PM_L2_RCST_DISP_FAIL_ADDR = 221826,
-	PM_LSU1_DC_PREF_STREAM_CONFIRM = 53430,
-	PM_IERAT_WR_64K = 16574,
-	PM_MRK_DTLB_MISS_16M = 315486,
-	PM_IERAT_MISS = 65782,
-	PM_MRK_PTEG_FROM_LMEM = 315474,
-	PM_FLOP = 65780,
-	PM_THRD_PRIO_4_5_CYC = 16564,
-	PM_BR_PRED_TA = 16554,
-	PM_CMPLU_STALL_FXU = 131092,
-	PM_EXT_INT = 131320,
-	PM_VSU_FSQRT_FDIV = 43144,
-	PM_MRK_LD_MISS_EXPOSED_CYC = 65598,
-	PM_LSU1_LDF = 49286,
-	PM_IC_WRITE_ALL = 18572,
-	PM_LSU0_SRQ_STFWD = 49312,
-	PM_PTEG_FROM_RL2L3_MOD = 114770,
-	PM_MRK_DATA_FROM_L31_SHR = 118862,
-	PM_DATA_FROM_L21_MOD = 245830,
-	PM_VSU1_SCAL_DOUBLE_ISSUED = 45194,
-	PM_VSU0_8FLOP = 41120,
-	PM_POWER_EVENT1 = 65646,
-	PM_DISP_CLB_HELD_BAL = 8338,
-	PM_VSU1_2FLOP = 41114,
-	PM_LWSYNC_HELD = 8346,
-	PM_PTEG_FROM_DL2L3_SHR = 245844,
-	PM_INST_FROM_L21_MOD = 213062,
-	PM_IERAT_XLATE_WR_16MPLUS = 16572,
-	PM_IC_REQ_ALL = 18568,
-	PM_DSLB_MISS = 53392,
-	PM_L3_MISS = 127106,
-	PM_LSU0_L1_PREF = 53432,
-	PM_VSU_SCALAR_SINGLE_ISSUED = 47236,
-	PM_LSU1_DC_PREF_STREAM_CONFIRM_STRIDE = 53438,
-	PM_L2_INST = 221312,
-	PM_VSU0_FRSP = 41140,
-	PM_FLUSH_DISP = 8322,
-	PM_PTEG_FROM_L2MISS = 311384,
-	PM_VSU1_DQ_ISSUED = 45210,
-	PM_CMPLU_STALL_LSU = 131090,
-	PM_MRK_DATA_FROM_DMEM = 118858,
-	PM_LSU_FLUSH_ULD = 51376,
-	PM_PTEG_FROM_LMEM = 311378,
-	PM_MRK_DERAT_MISS_16M = 249948,
-	PM_THRD_ALL_RUN_CYC = 131084,
-	PM_MEM0_PREFETCH_DISP = 131203,
-	PM_MRK_STALL_CMPLU_CYC_COUNT = 196671,
-	PM_DATA_FROM_DL2L3_MOD = 245836,
-	PM_VSU_FRSP = 43188,
-	PM_MRK_DATA_FROM_L21_MOD = 249926,
-	PM_PMC1_OVERFLOW = 131088,
-	PM_VSU0_SINGLE = 41128,
-	PM_MRK_PTEG_FROM_L3MISS = 184408,
-	PM_MRK_PTEG_FROM_L31_SHR = 184406,
-	PM_VSU0_VECTOR_SP_ISSUED = 45200,
-	PM_VSU1_FEST = 41146,
-	PM_MRK_INST_DISP = 131120,
-	PM_VSU0_COMPLEX_ISSUED = 45206,
-	PM_LSU1_FLUSH_UST = 49334,
-	PM_INST_CMPL = 2,
-	PM_FXU_IDLE = 65550,
-	PM_LSU0_FLUSH_ULD = 49328,
-	PM_MRK_DATA_FROM_DL2L3_MOD = 249932,
-	PM_LSU_LMQ_SRQ_EMPTY_ALL_CYC = 196636,
-	PM_LSU1_REJECT_LMQ_FULL = 49318,
-	PM_INST_PTEG_FROM_L21_MOD = 254038,
-	PM_INST_FROM_RL2L3_MOD = 81986,
-	PM_SHL_CREATED = 20610,
-	PM_L2_ST_HIT = 287106,
-	PM_DATA_FROM_DMEM = 114762,
-	PM_L3_LD_MISS = 192642,
-	PM_FXU1_BUSY_FXU0_IDLE = 262158,
-	PM_DISP_CLB_HELD_RES = 8340,
-	PM_L2_SN_SX_I_DONE = 222082,
-	PM_GRP_CMPL = 196612,
-	PM_STCX_CMPL = 49304,
-	PM_VSU0_2FLOP = 41112,
-	PM_L3_PREF_MISS = 258178,
-	PM_LSU_SRQ_SYNC_CYC = 53398,
-	PM_LSU_REJECT_ERAT_MISS = 131172,
-	PM_L1_ICACHE_MISS = 131324,
-	PM_LSU1_FLUSH_SRQ = 49342,
-	PM_LD_REF_L1_LSU0 = 49280,
-	PM_VSU0_FEST = 41144,
-	PM_VSU_VECTOR_SINGLE_ISSUED = 47248,
-	PM_FREQ_UP = 262156,
-	PM_DATA_FROM_LMEM = 245834,
-	PM_LSU1_LDX = 49290,
-	PM_PMC3_OVERFLOW = 262160,
-	PM_MRK_BR_MPRED = 196662,
-	PM_SHL_MATCH = 20614,
-	PM_MRK_BR_TAKEN = 65590,
-	PM_CMPLU_STALL_BRU = 262222,
-	PM_ISLB_MISS = 53394,
-	PM_CYC = 30,
-	PM_DISP_HELD_THERMAL = 196614,
-	PM_INST_PTEG_FROM_RL2L3_SHR = 188500,
-	PM_LSU1_SRQ_STFWD = 49314,
-	PM_GCT_NOSLOT_BR_MPRED = 262170,
-	PM_1PLUS_PPC_CMPL = 65778,
-	PM_PTEG_FROM_DMEM = 180306,
-	PM_VSU_2FLOP = 43160,
-	PM_GCT_FULL_CYC = 16518,
-	PM_MRK_DATA_FROM_L3_CYC = 262176,
-	PM_LSU_SRQ_S0_ALLOC = 53405,
-	PM_MRK_DERAT_MISS_4K = 118876,
-	PM_BR_MPRED_TA = 16558,
-	PM_INST_PTEG_FROM_L2MISS = 319576,
-	PM_DPU_HELD_POWER = 131078,
-	PM_RUN_INST_CMPL = 262394,
-	PM_MRK_VSU_FIN = 196658,
-	PM_LSU_SRQ_S0_VALID = 53404,
-	PM_GCT_EMPTY_CYC = 131080,
-	PM_IOPS_DISP = 196628,
-	PM_RUN_SPURR = 65544,
-	PM_PTEG_FROM_L21_MOD = 245846,
-	PM_VSU0_1FLOP = 41088,
-	PM_SNOOP_TLBIE = 53426,
-	PM_DATA_FROM_L3MISS = 180296,
-	PM_VSU_SINGLE = 43176,
-	PM_DTLB_MISS_16G = 114782,
-	PM_CMPLU_STALL_VECTOR = 131100,
-	PM_FLUSH = 262392,
-	PM_L2_LD_HIT = 221570,
-	PM_NEST_PAIR2_AND = 198787,
-	PM_VSU1_1FLOP = 41090,
-	PM_IC_PREF_REQ = 16522,
-	PM_L3_LD_HIT = 192640,
-	PM_GCT_NOSLOT_IC_MISS = 131098,
-	PM_DISP_HELD = 65542,
-	PM_L2_LD = 90240,
-	PM_LSU_FLUSH_SRQ = 51388,
-	PM_BC_PLUS_8_CONV = 16568,
-	PM_MRK_DATA_FROM_L31_MOD_CYC = 262182,
-	PM_CMPLU_STALL_VECTOR_LONG = 262218,
-	PM_L2_RCST_BUSY_RC_FULL = 156290,
-	PM_TB_BIT_TRANS = 196856,
-	PM_THERMAL_MAX = 262150,
-	PM_LSU1_FLUSH_ULD = 49330,
-	PM_LSU1_REJECT_LHS = 49326,
-	PM_LSU_LRQ_S0_ALLOC = 53407,
-	PM_L3_CO_L31 = 323712,
-	PM_POWER_EVENT4 = 262254,
-	PM_DATA_FROM_L31_SHR = 114766,
-	PM_BR_UNCOND = 16542,
-	PM_LSU1_DC_PREF_STREAM_ALLOC = 53418,
-	PM_PMC4_REWIND = 65568,
-	PM_L2_RCLD_DISP = 90752,
-	PM_THRD_PRIO_2_3_CYC = 16562,
-	PM_MRK_PTEG_FROM_L2MISS = 315480,
-	PM_IC_DEMAND_L2_BHT_REDIRECT = 16536,
-	PM_LSU_DERAT_MISS = 131318,
-	PM_IC_PREF_CANCEL_L2 = 16532,
-	PM_MRK_FIN_STALL_CYC_COUNT = 65597,
-	PM_BR_PRED_CCACHE = 16544,
-	PM_GCT_UTIL_1_TO_2_SLOTS = 8348,
-	PM_MRK_ST_CMPL_INT = 196660,
-	PM_LSU_TWO_TABLEWALK_CYC = 53414,
-	PM_MRK_DATA_FROM_L3MISS = 184392,
-	PM_GCT_NOSLOT_CYC = 65784,
-	PM_LSU_SET_MPRED = 49320,
-	PM_FLUSH_DISP_TLBIE = 8330,
-	PM_VSU1_FCONV = 41138,
-	PM_DERAT_MISS_16G = 311388,
-	PM_INST_FROM_LMEM = 213066,
-	PM_IC_DEMAND_L2_BR_REDIRECT = 16538,
-	PM_CMPLU_STALL_SCALAR_LONG = 131096,
-	PM_INST_PTEG_FROM_L2 = 122960,
-	PM_PTEG_FROM_L2 = 114768,
-	PM_MRK_DATA_FROM_L21_SHR_CYC = 131108,
-	PM_MRK_DTLB_MISS_4K = 184410,
-	PM_VSU0_FPSCR = 45212,
-	PM_VSU1_VECT_DOUBLE_ISSUED = 45186,
-	PM_MRK_PTEG_FROM_RL2L3_MOD = 118866,
-	PM_MEM0_RQ_DISP = 65667,
-	PM_L2_LD_MISS = 155776,
-	PM_VMX_RESULT_SAT_1 = 45216,
-	PM_L1_PREF = 55480,
-	PM_MRK_DATA_FROM_LMEM_CYC = 131116,
-	PM_GRP_IC_MISS_NONSPEC = 65548,
-	PM_PB_NODE_PUMP = 65665,
-	PM_SHL_MERGED = 20612,
-	PM_NEST_PAIR1_ADD = 133249,
-	PM_DATA_FROM_L3 = 114760,
-	PM_LSU_FLUSH = 8334,
-	PM_LSU_SRQ_SYNC_COUNT = 53399,
-	PM_PMC2_OVERFLOW = 196624,
-	PM_LSU_LDF = 51332,
-	PM_POWER_EVENT3 = 196718,
-	PM_DISP_WT = 196616,
-	PM_CMPLU_STALL_REJECT = 262166,
-	PM_IC_BANK_CONFLICT = 16514,
-	PM_BR_MPRED_CR_TA = 18606,
-	PM_L2_INST_MISS = 221314,
-	PM_CMPLU_STALL_ERAT_MISS = 262168,
-	PM_NEST_PAIR2_ADD = 198785,
-	PM_MRK_LSU_FLUSH = 53388,
-	PM_L2_LDST = 92288,
-	PM_INST_FROM_L31_SHR = 81998,
-	PM_VSU0_FIN = 41148,
-	PM_LARX_LSU = 51348,
-	PM_INST_FROM_RMEM = 213058,
-	PM_DISP_CLB_HELD_TLBIE = 8342,
-	PM_MRK_DATA_FROM_DMEM_CYC = 131118,
-	PM_BR_PRED_CR = 16552,
-	PM_LSU_REJECT = 65636,
-	PM_GCT_UTIL_3_TO_6_SLOTS = 8350,
-	PM_CMPLU_STALL_END_GCT_NOSLOT = 65576,
-	PM_LSU0_REJECT_LMQ_FULL = 49316,
-	PM_VSU_FEST = 43192,
-	PM_NEST_PAIR0_AND = 67715,
-	PM_PTEG_FROM_L3 = 180304,
-	PM_POWER_EVENT2 = 131182,
-	PM_IC_PREF_CANCEL_PAGE = 16528,
-	PM_VSU0_FSQRT_FDIV = 41096,
-	PM_MRK_GRP_CMPL = 262192,
-	PM_VSU0_SCAL_DOUBLE_ISSUED = 45192,
-	PM_GRP_DISP = 196618,
-	PM_LSU0_LDX = 49288,
-	PM_DATA_FROM_L2 = 114752,
-	PM_MRK_DATA_FROM_RL2L3_MOD = 118850,
-	PM_LD_REF_L1 = 51328,
-	PM_VSU0_VECT_DOUBLE_ISSUED = 45184,
-	PM_VSU1_2FLOP_DOUBLE = 41102,
-	PM_THRD_PRIO_6_7_CYC = 16566,
-	PM_BC_PLUS_8_RSLV_TAKEN = 16570,
-	PM_BR_MPRED_CR = 16556,
-	PM_L3_CO_MEM = 323714,
-	PM_LD_MISS_L1 = 262384,
-	PM_DATA_FROM_RL2L3_MOD = 114754,
-	PM_LSU_SRQ_FULL_CYC = 65562,
-	PM_TABLEWALK_CYC = 65574,
-	PM_MRK_PTEG_FROM_RMEM = 249938,
-	PM_LSU_SRQ_STFWD = 51360,
-	PM_INST_PTEG_FROM_RMEM = 254034,
-	PM_FXU0_FIN = 65540,
-	PM_LSU1_L1_SW_PREF = 49310,
-	PM_PTEG_FROM_L31_MOD = 114772,
-	PM_PMC5_OVERFLOW = 65572,
-	PM_LD_REF_L1_LSU1 = 49282,
-	PM_INST_PTEG_FROM_L21_SHR = 319574,
-	PM_CMPLU_STALL_THRD = 65564,
-	PM_DATA_FROM_RMEM = 245826,
-	PM_VSU0_SCAL_SINGLE_ISSUED = 45188,
-	PM_BR_MPRED_LSTACK = 16550,
-	PM_MRK_DATA_FROM_RL2L3_MOD_CYC = 262184,
-	PM_LSU0_FLUSH_UST = 49332,
-	PM_LSU_NCST = 49296,
-	PM_BR_TAKEN = 131076,
-	PM_INST_PTEG_FROM_LMEM = 319570,
-	PM_GCT_NOSLOT_BR_MPRED_IC_MISS = 262172,
-	PM_DTLB_MISS_4K = 180314,
-	PM_PMC4_SAVED = 196642,
-	PM_VSU1_PERMUTE_ISSUED = 45202,
-	PM_SLB_MISS = 55440,
-	PM_LSU1_FLUSH_LRQ = 49338,
-	PM_DTLB_MISS = 196860,
-	PM_VSU1_FRSP = 41142,
-	PM_VSU_VECTOR_DOUBLE_ISSUED = 47232,
-	PM_L2_CASTOUT_SHR = 90498,
-	PM_DATA_FROM_DL2L3_SHR = 245828,
-	PM_VSU1_STF = 45198,
-	PM_ST_FIN = 131312,
-	PM_PTEG_FROM_L21_SHR = 311382,
-	PM_L2_LOC_GUESS_WRONG = 156800,
-	PM_MRK_STCX_FAIL = 53390,
-	PM_LSU0_REJECT_LHS = 49324,
-	PM_IC_PREF_CANCEL_HIT = 16530,
-	PM_L3_PREF_BUSY = 323712,
-	PM_MRK_BRU_FIN = 131130,
-	PM_LSU1_NCLD = 49294,
-	PM_INST_PTEG_FROM_L31_MOD = 122964,
-	PM_LSU_NCLD = 51340,
-	PM_LSU_LDX = 51336,
-	PM_L2_LOC_GUESS_CORRECT = 91264,
-	PM_THRESH_TIMEO = 65592,
-	PM_L3_PREF_ST = 53422,
-	PM_DISP_CLB_HELD_SYNC = 8344,
-	PM_VSU_SIMPLE_ISSUED = 47252,
-	PM_VSU1_SINGLE = 41130,
-	PM_DATA_TABLEWALK_CYC = 196634,
-	PM_L2_RC_ST_DONE = 222080,
-	PM_MRK_PTEG_FROM_L21_MOD = 249942,
-	PM_LARX_LSU1 = 49302,
-	PM_MRK_DATA_FROM_RMEM = 249922,
-	PM_DISP_CLB_HELD = 8336,
-	PM_DERAT_MISS_4K = 114780,
-	PM_L2_RCLD_DISP_FAIL_ADDR = 90754,
-	PM_SEG_EXCEPTION = 10404,
-	PM_FLUSH_DISP_SB = 8332,
-	PM_L2_DC_INV = 156034,
-	PM_PTEG_FROM_DL2L3_MOD = 311380,
-	PM_DSEG = 8358,
-	PM_BR_PRED_LSTACK = 16546,
-	PM_VSU0_STF = 45196,
-	PM_LSU_FX_FIN = 65638,
-	PM_DERAT_MISS_16M = 245852,
-	PM_MRK_PTEG_FROM_DL2L3_MOD = 315476,
-	PM_GCT_UTIL_11_PLUS_SLOTS = 8354,
-	PM_INST_FROM_L3 = 81992,
-	PM_MRK_IFU_FIN = 196666,
-	PM_ITLB_MISS = 262396,
-	PM_VSU_STF = 47244,
-	PM_LSU_FLUSH_UST = 51380,
-	PM_L2_LDST_MISS = 157824,
-	PM_FXU1_FIN = 262148,
-	PM_SHL_DEALLOCATED = 20608,
-	PM_L2_SN_M_WR_DONE = 287618,
-	PM_LSU_REJECT_SET_MPRED = 51368,
-	PM_L3_PREF_LD = 53420,
-	PM_L2_SN_M_RD_DONE = 287616,
-	PM_MRK_DERAT_MISS_16G = 315484,
-	PM_VSU_FCONV = 43184,
-	PM_ANY_THRD_RUN_CYC = 65786,
-	PM_LSU_LMQ_FULL_CYC = 53412,
-	PM_MRK_LSU_REJECT_LHS = 53378,
-	PM_MRK_LD_MISS_L1_CYC = 262206,
-	PM_MRK_DATA_FROM_L2_CYC = 131104,
-	PM_INST_IMC_MATCH_DISP = 196630,
-	PM_MRK_DATA_FROM_RMEM_CYC = 262188,
-	PM_VSU0_SIMPLE_ISSUED = 45204,
-	PM_CMPLU_STALL_DIV = 262164,
-	PM_MRK_PTEG_FROM_RL2L3_SHR = 184404,
-	PM_VSU_FMA_DOUBLE = 43152,
-	PM_VSU_4FLOP = 43164,
-	PM_VSU1_FIN = 41150,
-	PM_NEST_PAIR1_AND = 133251,
-	PM_INST_PTEG_FROM_RL2L3_MOD = 122962,
-	PM_RUN_CYC = 131316,
-	PM_PTEG_FROM_RMEM = 245842,
-	PM_LSU_LRQ_S0_VALID = 53406,
-	PM_LSU0_LDF = 49284,
-	PM_FLUSH_COMPLETION = 196626,
-	PM_ST_MISS_L1 = 196848,
-	PM_L2_NODE_PUMP = 222336,
-	PM_INST_FROM_DL2L3_SHR = 213060,
-	PM_MRK_STALL_CMPLU_CYC = 196670,
-	PM_VSU1_DENORM = 41134,
-	PM_MRK_DATA_FROM_L31_SHR_CYC = 131110,
-	PM_NEST_PAIR0_ADD = 67713,
-	PM_INST_FROM_L3MISS = 147528,
-	PM_EE_OFF_EXT_INT = 8320,
-	PM_INST_PTEG_FROM_DMEM = 188498,
-	PM_INST_FROM_DL2L3_MOD = 213068,
-	PM_PMC6_OVERFLOW = 196644,
-	PM_VSU_2FLOP_DOUBLE = 43148,
-	PM_TLB_MISS = 131174,
-	PM_FXU_BUSY = 131086,
-	PM_L2_RCLD_DISP_FAIL_OTHER = 156288,
-	PM_LSU_REJECT_LMQ_FULL = 51364,
-	PM_IC_RELOAD_SHR = 16534,
-	PM_GRP_MRK = 65585,
-	PM_MRK_ST_NEST = 131124,
-	PM_VSU1_FSQRT_FDIV = 41098,
-	PM_LSU0_FLUSH_LRQ = 49336,
-	PM_LARX_LSU0 = 49300,
-	PM_IBUF_FULL_CYC = 16516,
-	PM_MRK_DATA_FROM_DL2L3_SHR_CYC = 131114,
-	PM_LSU_DC_PREF_STREAM_ALLOC = 55464,
-	PM_GRP_MRK_CYC = 65584,
-	PM_MRK_DATA_FROM_RL2L3_SHR_CYC = 131112,
-	PM_L2_GLOB_GUESS_CORRECT = 91266,
-	PM_LSU_REJECT_LHS = 51372,
-	PM_MRK_DATA_FROM_LMEM = 249930,
-	PM_INST_PTEG_FROM_L3 = 188496,
-	PM_FREQ_DOWN = 196620,
-	PM_PB_RETRY_NODE_PUMP = 196737,
-	PM_INST_FROM_RL2L3_SHR = 81996,
-	PM_MRK_INST_ISSUED = 65586,
-	PM_PTEG_FROM_L3MISS = 180312,
-	PM_RUN_PURR = 262388,
-	PM_MRK_GRP_IC_MISS = 262200,
-	PM_MRK_DATA_FROM_L3 = 118856,
-	PM_CMPLU_STALL_DCACHE_MISS = 131094,
-	PM_PTEG_FROM_RL2L3_SHR = 180308,
-	PM_LSU_FLUSH_LRQ = 51384,
-	PM_MRK_DERAT_MISS_64K = 184412,
-	PM_INST_PTEG_FROM_DL2L3_MOD = 319572,
-	PM_L2_ST_MISS = 155778,
-	PM_MRK_PTEG_FROM_L21_SHR = 315478,
-	PM_LWSYNC = 53396,
-	PM_LSU0_DC_PREF_STREAM_CONFIRM_STRIDE = 53436,
-	PM_MRK_LSU_FLUSH_LRQ = 53384,
-	PM_INST_IMC_MATCH_CMPL = 65776,
-	PM_NEST_PAIR3_AND = 264323,
-	PM_PB_RETRY_SYS_PUMP = 262273,
-	PM_MRK_INST_FIN = 196656,
-	PM_MRK_PTEG_FROM_DL2L3_SHR = 249940,
-	PM_INST_FROM_L31_MOD = 81988,
-	PM_MRK_DTLB_MISS_64K = 249950,
-	PM_LSU_FIN = 196710,
-	PM_MRK_LSU_REJECT = 262244,
-	PM_L2_CO_FAIL_BUSY = 91010,
-	PM_MEM0_WQ_DISP = 262275,
-	PM_DATA_FROM_L31_MOD = 114756,
-	PM_THERMAL_WARN = 65558,
-	PM_VSU0_4FLOP = 41116,
-	PM_BR_MPRED_CCACHE = 16548,
-	PM_CMPLU_STALL_IFU = 262220,
-	PM_L1_DEMAND_WRITE = 16524,
-	PM_FLUSH_BR_MPRED = 8324,
-	PM_MRK_DTLB_MISS_16G = 118878,
-	PM_MRK_PTEG_FROM_DMEM = 184402,
-	PM_L2_RCST_DISP = 221824,
-	PM_CMPLU_STALL = 262154,
-	PM_LSU_PARTIAL_CDF = 49322,
-	PM_DISP_CLB_HELD_SB = 8360,
-	PM_VSU0_FMA_DOUBLE = 41104,
-	PM_FXU0_BUSY_FXU1_IDLE = 196622,
-	PM_IC_DEMAND_CYC = 65560,
-	PM_MRK_DATA_FROM_L21_SHR = 249934,
-	PM_MRK_LSU_FLUSH_UST = 53382,
-	PM_INST_PTEG_FROM_L3MISS = 188504,
-	PM_VSU_DENORM = 43180,
-	PM_MRK_LSU_PARTIAL_CDF = 53376,
-	PM_INST_FROM_L21_SHR = 213070,
-	PM_IC_PREF_WRITE = 16526,
-	PM_BR_PRED = 16540,
-	PM_INST_FROM_DMEM = 81994,
-	PM_IC_PREF_CANCEL_ALL = 18576,
-	PM_LSU_DC_PREF_STREAM_CONFIRM = 55476,
-	PM_MRK_LSU_FLUSH_SRQ = 53386,
-	PM_MRK_FIN_STALL_CYC = 65596,
-	PM_L2_RCST_DISP_FAIL_OTHER = 287360,
-	PM_VSU1_DD_ISSUED = 45208,
-	PM_PTEG_FROM_L31_SHR = 180310,
-	PM_DATA_FROM_L21_SHR = 245838,
-	PM_LSU0_NCLD = 49292,
-	PM_VSU1_4FLOP = 41118,
-	PM_VSU1_8FLOP = 41122,
-	PM_VSU_8FLOP = 43168,
-	PM_LSU_LMQ_SRQ_EMPTY_CYC = 131134,
-	PM_DTLB_MISS_64K = 245854,
-	PM_THRD_CONC_RUN_INST = 196852,
-	PM_MRK_PTEG_FROM_L2 = 118864,
-	PM_PB_SYS_PUMP = 131201,
-	PM_VSU_FIN = 43196,
-	PM_MRK_DATA_FROM_L31_MOD = 118852,
-	PM_THRD_PRIO_0_1_CYC = 16560,
-	PM_DERAT_MISS_64K = 180316,
-	PM_PMC2_REWIND = 196640,
-	PM_INST_FROM_L2 = 81984,
-	PM_GRP_BR_MPRED_NONSPEC = 65546,
-	PM_INST_DISP = 131314,
-	PM_MEM0_RD_CANCEL_TOTAL = 196739,
-	PM_LSU0_DC_PREF_STREAM_CONFIRM = 53428,
-	PM_L1_DCACHE_RELOAD_VALID = 196854,
-	PM_VSU_SCALAR_DOUBLE_ISSUED = 47240,
-	PM_L3_PREF_HIT = 258176,
-	PM_MRK_PTEG_FROM_L31_MOD = 118868,
-	PM_CMPLU_STALL_STORE = 131146,
-	PM_MRK_FXU_FIN = 131128,
-	PM_PMC4_OVERFLOW = 65552,
-	PM_MRK_PTEG_FROM_L3 = 184400,
-	PM_LSU0_LMQ_LHR_MERGE = 53400,
-	PM_BTAC_HIT = 20618,
-	PM_L3_RD_BUSY = 323714,
-	PM_LSU0_L1_SW_PREF = 49308,
-	PM_INST_FROM_L2MISS = 278600,
-	PM_LSU0_DC_PREF_STREAM_ALLOC = 53416,
-	PM_L2_ST = 90242,
-	PM_VSU0_DENORM = 41132,
-	PM_MRK_DATA_FROM_DL2L3_SHR = 249924,
-	PM_BR_PRED_CR_TA = 18602,
-	PM_VSU0_FCONV = 41136,
-	PM_MRK_LSU_FLUSH_ULD = 53380,
-	PM_BTAC_MISS = 20616,
-	PM_MRK_LD_MISS_EXPOSED_CYC_COUNT = 65599,
-	PM_MRK_DATA_FROM_L2 = 118848,
-	PM_LSU_DCACHE_RELOAD_VALID = 53410,
-	PM_VSU_FMA = 43140,
-	PM_LSU0_FLUSH_SRQ = 49340,
-	PM_LSU1_L1_PREF = 53434,
-	PM_IOPS_CMPL = 65556,
-	PM_L2_SYS_PUMP = 222338,
-	PM_L2_RCLD_BUSY_RC_FULL = 287362,
-	PM_LSU_LMQ_S0_ALLOC = 53409,
-	PM_FLUSH_DISP_SYNC = 8328,
-	PM_MRK_DATA_FROM_DL2L3_MOD_CYC = 262186,
-	PM_L2_IC_INV = 156032,
-	PM_MRK_DATA_FROM_L21_MOD_CYC = 262180,
-	PM_L3_PREF_LDST = 55468,
-	PM_LSU_SRQ_EMPTY_CYC = 262152,
-	PM_LSU_LMQ_S0_VALID = 53408,
-	PM_FLUSH_PARTIAL = 8326,
-	PM_VSU1_FMA_DOUBLE = 41106,
-	PM_1PLUS_PPC_DISP = 262386,
-	PM_DATA_FROM_L2MISS = 131326,
-	PM_SUSPENDED = 0,
-	PM_VSU0_FMA = 41092,
-	PM_CMPLU_STALL_SCALAR = 262162,
-	PM_STCX_FAIL = 49306,
-	PM_VSU0_FSQRT_FDIV_DOUBLE = 41108,
-	PM_DC_PREF_DST = 53424,
-	PM_VSU1_SCAL_SINGLE_ISSUED = 45190,
-	PM_L3_HIT = 127104,
-	PM_L2_GLOB_GUESS_WRONG = 156802,
-	PM_MRK_DFU_FIN = 131122,
-	PM_INST_FROM_L1 = 16512,
-	PM_BRU_FIN = 65640,
-	PM_IC_DEMAND_REQ = 16520,
-	PM_VSU1_FSQRT_FDIV_DOUBLE = 41110,
-	PM_VSU1_FMA = 41094,
-	PM_MRK_LD_MISS_L1 = 131126,
-	PM_VSU0_2FLOP_DOUBLE = 41100,
-	PM_LSU_DC_PREF_STRIDED_STREAM_CONFIRM = 55484,
-	PM_INST_PTEG_FROM_L31_SHR = 188502,
-	PM_MRK_LSU_REJECT_ERAT_MISS = 196708,
-	PM_MRK_DATA_FROM_L2MISS = 315464,
-	PM_DATA_FROM_RL2L3_SHR = 114764,
-	PM_INST_FROM_PREF = 81990,
-	PM_VSU1_SQ = 45214,
-	PM_L2_LD_DISP = 221568,
-	PM_L2_DISP_ALL = 286848,
-	PM_THRD_GRP_CMPL_BOTH_CYC = 65554,
-	PM_VSU_FSQRT_FDIV_DOUBLE = 43156,
-	PM_BR_MPRED = 262390,
-	PM_INST_PTEG_FROM_DL2L3_SHR = 254036,
-	PM_VSU_1FLOP = 43136,
-	PM_HV_CYC = 131082,
-	PM_MRK_LSU_FIN = 262194,
-	PM_MRK_DATA_FROM_RL2L3_SHR = 118860,
-	PM_DTLB_MISS_16M = 311390,
-	PM_LSU1_LMQ_LHR_MERGE = 53402,
-	PM_IFU_FIN = 262246,
-	PM_1THRD_CON_RUN_INSTR = 196706,
-	PM_CMPLU_STALL_COUNT = 262155,
-	PM_MEM0_PB_RD_CL = 196739,
-	PM_THRD_1_RUN_CYC = 65632,
-	PM_THRD_2_CONC_RUN_INSTR = 262242,
-	PM_THRD_2_RUN_CYC = 131168,
-	PM_THRD_3_CONC_RUN_INST = 65634,
-	PM_THRD_3_RUN_CYC = 196704,
-	PM_THRD_4_CONC_RUN_INST = 131170,
-	PM_THRD_4_RUN_CYC = 262240,
-};
-
-enum perf_branch_sample_type {
-	PERF_SAMPLE_BRANCH_USER = 1,
-	PERF_SAMPLE_BRANCH_KERNEL = 2,
-	PERF_SAMPLE_BRANCH_HV = 4,
-	PERF_SAMPLE_BRANCH_ANY = 8,
-	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
-	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
-	PERF_SAMPLE_BRANCH_IND_CALL = 64,
-	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
-	PERF_SAMPLE_BRANCH_IN_TX = 256,
-	PERF_SAMPLE_BRANCH_NO_TX = 512,
-	PERF_SAMPLE_BRANCH_COND = 1024,
-	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
-	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
-	PERF_SAMPLE_BRANCH_CALL = 8192,
-	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
-	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
-	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
-	PERF_SAMPLE_BRANCH_MAX = 262144,
-};
-
-enum {
-	PM_CYC___2 = 30,
-	PM_GCT_NOSLOT_CYC___2 = 65784,
-	PM_CMPLU_STALL___2 = 262154,
-	PM_INST_CMPL___2 = 2,
-	PM_BRU_FIN___2 = 65640,
-	PM_BR_MPRED_CMPL = 262390,
-	PM_LD_REF_L1___2 = 65774,
-	PM_LD_MISS_L1___2 = 254036,
-	PM_ST_MISS_L1___2 = 196848,
-	PM_L1_PREF___2 = 55480,
-	PM_INST_FROM_L1___2 = 16512,
-	PM_L1_ICACHE_MISS___2 = 131325,
-	PM_L1_DEMAND_WRITE___2 = 16524,
-	PM_IC_PREF_WRITE___2 = 16526,
-	PM_DATA_FROM_L3___2 = 311362,
-	PM_DATA_FROM_L3MISS___2 = 196862,
-	PM_L2_ST___2 = 94336,
-	PM_L2_ST_MISS___2 = 94338,
-	PM_L3_PREF_ALL = 319570,
-	PM_DTLB_MISS___2 = 196860,
-	PM_ITLB_MISS___2 = 262396,
-	PM_RUN_INST_CMPL___2 = 327930,
-	PM_RUN_INST_CMPL_ALT = 262394,
-	PM_RUN_CYC___2 = 393460,
-	PM_RUN_CYC_ALT = 131316,
-	PM_MRK_ST_CMPL___2 = 65844,
-	PM_MRK_ST_CMPL_ALT = 197090,
-	PM_BR_MRK_2PATH = 65848,
-	PM_BR_MRK_2PATH_ALT = 262456,
-	PM_L3_CO_MEPF = 98434,
-	PM_L3_CO_MEPF_ALT = 254046,
-	PM_MRK_DATA_FROM_L2MISS___2 = 119118,
-	PM_MRK_DATA_FROM_L2MISS_ALT = 262632,
-	PM_CMPLU_STALL_ALT = 122964,
-	PM_BR_2PATH = 131126,
-	PM_BR_2PATH_ALT = 262198,
-	PM_INST_DISP___2 = 131314,
-	PM_INST_DISP_ALT = 196850,
-	PM_MRK_FILT_MATCH = 131388,
-	PM_MRK_FILT_MATCH_ALT = 196910,
-	PM_LD_MISS_L1_ALT = 262384,
-	MEM_ACCESS = 17039840,
-};
-
-enum {
-	PM_CYC___3 = 30,
-	PM_ICT_NOSLOT_CYC = 65784,
-	PM_CMPLU_STALL___3 = 122964,
-	PM_INST_CMPL___3 = 2,
-	PM_BR_CMPL = 315486,
-	PM_BR_MPRED_CMPL___2 = 262390,
-	PM_LD_REF_L1___3 = 65788,
-	PM_LD_MISS_L1_FIN = 180302,
-	PM_LD_MISS_L1___3 = 254036,
-	PM_LD_MISS_L1_ALT___2 = 262384,
-	PM_ST_MISS_L1___3 = 196848,
-	PM_L1_PREF___3 = 131156,
-	PM_INST_FROM_L1___3 = 16512,
-	PM_L1_ICACHE_MISS___3 = 131325,
-	PM_L1_DEMAND_WRITE___3 = 16524,
-	PM_IC_PREF_WRITE___3 = 18572,
-	PM_DATA_FROM_L3___3 = 311362,
-	PM_DATA_FROM_L3MISS___3 = 196862,
-	PM_L2_ST___3 = 92288,
-	PM_L2_ST_MISS___3 = 157824,
-	PM_L3_PREF_ALL___2 = 319570,
-	PM_DTLB_MISS___3 = 196860,
-	PM_ITLB_MISS___3 = 262396,
-	PM_RUN_INST_CMPL___3 = 327930,
-	PM_RUN_INST_CMPL_ALT___2 = 262394,
-	PM_RUN_CYC___3 = 393460,
-	PM_RUN_CYC_ALT___2 = 131316,
-	PM_INST_DISP___3 = 131314,
-	PM_INST_DISP_ALT___2 = 196850,
-	PM_BR_2PATH___2 = 131126,
-	PM_BR_2PATH_ALT___2 = 262198,
-	PM_MRK_ST_DONE_L2 = 65844,
-	PM_RADIX_PWC_L1_HIT = 127062,
+	PM_CYC_ALT = 65776,
+	PM_CYC_INST_CMPL = 65778,
 	PM_FLOP_CMPL = 65780,
-	PM_MRK_NTF_FIN = 131346,
-	PM_RADIX_PWC_L2_HIT = 184356,
-	PM_IFETCH_THROTTLE = 213086,
-	PM_MRK_L2_TM_ST_ABORT_SISTER = 254300,
-	PM_RADIX_PWC_L3_HIT = 258134,
-	PM_RUN_CYC_SMT2_MODE = 196716,
-	PM_TM_TX_PASS_RUN_INST = 319508,
-	PM_DISP_HELD_SYNC_HOLD = 262204,
-	PM_DTLB_MISS_16G___2 = 114776,
-	PM_DERAT_MISS_2M = 114778,
-	PM_DTLB_MISS_2M = 114780,
-	PM_MRK_DTLB_MISS_1G = 119132,
-	PM_DTLB_MISS_4K___2 = 180310,
-	PM_DERAT_MISS_1G = 180314,
-	PM_MRK_DERAT_MISS_2M = 184658,
-	PM_MRK_DTLB_MISS_4K___2 = 184662,
-	PM_MRK_DTLB_MISS_16G___2 = 184670,
-	PM_DTLB_MISS_64K___2 = 245846,
-	PM_MRK_DERAT_MISS_1G = 250194,
-	PM_MRK_DTLB_MISS_64K___2 = 250198,
-	PM_DTLB_MISS_16M___2 = 311382,
-	PM_DTLB_MISS_1G = 311386,
-	PM_MRK_DTLB_MISS_16M___2 = 311646,
-	MEM_LOADS = 872677856,
-	MEM_STORES = 1006895584,
-};
-
-enum {
-	PM_CYC___4 = 30,
-	PM_INST_CMPL___4 = 2,
-};
-
-enum {
-	PM_RUN_CYC___4 = 393460,
-};
-
-enum {
-	PM_RUN_INST_CMPL___4 = 327930,
-};
-
-enum {
-	PM_BR_CMPL___2 = 315486,
-};
-
-enum {
-	PM_BR_MPRED_CMPL___3 = 262390,
-};
-
-enum {
-	PM_LD_REF_L1___4 = 65788,
-};
-
-enum {
-	PM_LD_MISS_L1___4 = 254036,
-};
-
-enum {
-	PM_ST_MISS_L1___4 = 196848,
-};
-
-enum {
-	PM_LD_PREFETCH_CACHE_LINE_MISS = 65580,
-};
-
-enum {
-	PM_L1_ICACHE_MISS___4 = 131324,
-};
-
-enum {
-	PM_INST_FROM_L1___4 = 16512,
-};
-
-enum {
-	PM_INST_FROM_L1MISS = 114752,
-};
-
-enum {
-	PM_IC_PREF_REQ___2 = 16544,
-};
-
-enum {
-	PM_DATA_FROM_L3___4 = 114752,
-};
-
-enum {
-	PM_DATA_FROM_L3MISS___4 = 196862,
-};
-
-enum {
-	PM_DTLB_MISS___4 = 196860,
-};
-
-enum {
-	PM_ITLB_MISS___4 = 262396,
-};
-
-enum {
-	PM_RUN_CYC_ALT___3 = 30,
-};
-
-enum {
-	PM_RUN_INST_CMPL_ALT___3 = 2,
-};
-
-enum {
-	MEM_LOADS___2 = 872677856,
-};
-
-enum {
-	MEM_STORES___2 = 1006895584,
-};
-
-typedef void (*crash_shutdown_t)();
-
-union thread_union {
-	struct task_struct task;
-	long unsigned int stack[2048];
-};
-
-typedef __be64 fdt64_t;
-
-struct elf64_phdr {
-	Elf64_Word p_type;
-	Elf64_Word p_flags;
-	Elf64_Off p_offset;
-	Elf64_Addr p_vaddr;
-	Elf64_Addr p_paddr;
-	Elf64_Xword p_filesz;
-	Elf64_Xword p_memsz;
-	Elf64_Xword p_align;
-};
-
-typedef struct elf64_phdr Elf64_Phdr;
-
-struct kexec_buf {
-	struct kimage *image;
-	void *buffer;
-	long unsigned int bufsz;
-	long unsigned int mem;
-	long unsigned int memsz;
-	long unsigned int buf_align;
-	long unsigned int buf_min;
-	long unsigned int buf_max;
-	bool top_down;
-};
-
-struct umem_info {
-	u64 *buf;
-	u32 size;
-	u32 max_entries;
-	u32 idx;
-	unsigned int nr_ranges;
-	const struct crash_mem_range *ranges;
-};
-
-struct kexec_elf_info {
-	const char *buffer;
-	const struct elf64_hdr *ehdr;
-	const struct elf64_phdr *proghdrs;
-};
-
-struct clone_args {
-	__u64 flags;
-	__u64 pidfd;
-	__u64 child_tid;
-	__u64 parent_tid;
-	__u64 exit_signal;
-	__u64 stack;
-	__u64 stack_size;
-	__u64 tls;
-	__u64 set_tid;
-	__u64 set_tid_size;
-	__u64 cgroup;
-};
-
-struct fdtable {
-	unsigned int max_fds;
-	struct file **fd;
-	long unsigned int *close_on_exec;
-	long unsigned int *open_fds;
-	long unsigned int *full_fds_bits;
-	struct callback_head rcu;
-};
-
-struct files_struct {
-	atomic_t count;
-	bool resize_in_progress;
-	wait_queue_head_t resize_wait;
-	struct fdtable *fdt;
-	struct fdtable fdtab;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t file_lock;
-	unsigned int next_fd;
-	long unsigned int close_on_exec_init[1];
-	long unsigned int open_fds_init[1];
-	long unsigned int full_fds_bits_init[1];
-	struct file *fd_array[64];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_identity {
-	struct files_struct *files;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *creds;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	long unsigned int fsize;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	refcount_t count;
-};
-
-struct io_uring_task {
-	struct xarray xa;
-	struct wait_queue_head wait;
-	struct file *last;
-	struct percpu_counter inflight;
-	struct io_identity __identity;
-	struct io_identity *identity;
-	atomic_t in_idle;
-	bool sqpoll;
-};
-
-struct robust_list {
-	struct robust_list *next;
-};
-
-struct robust_list_head {
-	struct robust_list list;
-	long int futex_offset;
-	struct robust_list *list_op_pending;
-};
-
-struct kernel_clone_args {
-	u64 flags;
-	int *pidfd;
-	int *child_tid;
-	int *parent_tid;
-	int exit_signal;
-	long unsigned int stack;
-	long unsigned int stack_size;
-	long unsigned int tls;
-	pid_t *set_tid;
-	size_t set_tid_size;
-	int cgroup;
-	struct cgroup *cgrp;
-	struct css_set *cset;
-};
-
-struct multiprocess_signals {
-	sigset_t signal;
-	struct hlist_node node;
-};
-
-typedef int (*proc_visitor)(struct task_struct *, void *);
-
-enum {
-	IOPRIO_CLASS_NONE = 0,
-	IOPRIO_CLASS_RT = 1,
-	IOPRIO_CLASS_BE = 2,
-	IOPRIO_CLASS_IDLE = 3,
-};
-
-enum {
-	FUTEX_STATE_OK = 0,
-	FUTEX_STATE_EXITING = 1,
-	FUTEX_STATE_DEAD = 2,
-};
-
-enum proc_hidepid {
-	HIDEPID_OFF = 0,
-	HIDEPID_NO_ACCESS = 1,
-	HIDEPID_INVISIBLE = 2,
-	HIDEPID_NOT_PTRACEABLE = 4,
-};
-
-enum proc_pidonly {
-	PROC_PIDONLY_OFF = 0,
-	PROC_PIDONLY_ON = 1,
-};
-
-struct proc_fs_info {
-	struct pid_namespace *pid_ns;
-	struct dentry *proc_self;
-	struct dentry *proc_thread_self;
-	kgid_t pid_gid;
-	enum proc_hidepid hide_pid;
-	enum proc_pidonly pidonly;
-};
-
-struct trace_event_raw_task_newtask {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	long unsigned int clone_flags;
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_task_rename {
-	struct trace_entry ent;
-	pid_t pid;
-	char oldcomm[16];
-	char newcomm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_task_newtask {};
-
-struct trace_event_data_offsets_task_rename {};
-
-typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
-
-typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
-
-struct taint_flag {
-	char c_true;
-	char c_false;
-	bool module;
-};
-
-enum reboot_mode {
-	REBOOT_UNDEFINED = 4294967295,
-	REBOOT_COLD = 0,
-	REBOOT_WARM = 1,
-	REBOOT_HARD = 2,
-	REBOOT_SOFT = 3,
-	REBOOT_GPIO = 4,
-};
-
-struct warn_args {
-	const char *fmt;
-	va_list args;
-};
-
-enum hk_flags {
-	HK_FLAG_TIMER = 1,
-	HK_FLAG_RCU = 2,
-	HK_FLAG_MISC = 4,
-	HK_FLAG_SCHED = 8,
-	HK_FLAG_TICK = 16,
-	HK_FLAG_DOMAIN = 32,
-	HK_FLAG_WQ = 64,
-	HK_FLAG_MANAGED_IRQ = 128,
-	HK_FLAG_KTHREAD = 256,
-};
-
-enum cpuhp_smt_control {
-	CPU_SMT_ENABLED = 0,
-	CPU_SMT_DISABLED = 1,
-	CPU_SMT_FORCE_DISABLED = 2,
-	CPU_SMT_NOT_SUPPORTED = 3,
-	CPU_SMT_NOT_IMPLEMENTED = 4,
-};
-
-struct smp_hotplug_thread {
-	struct task_struct **store;
-	struct list_head list;
-	int (*thread_should_run)(unsigned int);
-	void (*thread_fn)(unsigned int);
-	void (*create)(unsigned int);
-	void (*setup)(unsigned int);
-	void (*cleanup)(unsigned int, bool);
-	void (*park)(unsigned int);
-	void (*unpark)(unsigned int);
-	bool selfparking;
-	const char *thread_comm;
-};
-
-struct trace_event_raw_cpuhp_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_multi_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_exit {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int state;
-	int idx;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpuhp_enter {};
-
-struct trace_event_data_offsets_cpuhp_multi_enter {};
-
-struct trace_event_data_offsets_cpuhp_exit {};
-
-typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
-
-typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
-
-typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
-
-struct cpuhp_cpu_state {
-	enum cpuhp_state state;
-	enum cpuhp_state target;
-	enum cpuhp_state fail;
-	struct task_struct *thread;
-	bool should_run;
-	bool rollback;
-	bool single;
-	bool bringup;
-	struct hlist_node *node;
-	struct hlist_node *last;
-	enum cpuhp_state cb_state;
-	int result;
-	struct completion done_up;
-	struct completion done_down;
-};
-
-struct cpuhp_step {
-	const char *name;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} startup;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} teardown;
-	struct hlist_head list;
-	bool cant_stop;
-	bool multi_instance;
-};
-
-enum cpu_mitigations {
-	CPU_MITIGATIONS_OFF = 0,
-	CPU_MITIGATIONS_AUTO = 1,
-	CPU_MITIGATIONS_AUTO_NOSMT = 2,
-};
-
-struct __kernel_old_timeval {
-	__kernel_long_t tv_sec;
-	__kernel_long_t tv_usec;
-};
-
-struct old_timeval32 {
-	old_time32_t tv_sec;
-	s32 tv_usec;
-};
-
-struct rusage {
-	struct __kernel_old_timeval ru_utime;
-	struct __kernel_old_timeval ru_stime;
-	__kernel_long_t ru_maxrss;
-	__kernel_long_t ru_ixrss;
-	__kernel_long_t ru_idrss;
-	__kernel_long_t ru_isrss;
-	__kernel_long_t ru_minflt;
-	__kernel_long_t ru_majflt;
-	__kernel_long_t ru_nswap;
-	__kernel_long_t ru_inblock;
-	__kernel_long_t ru_oublock;
-	__kernel_long_t ru_msgsnd;
-	__kernel_long_t ru_msgrcv;
-	__kernel_long_t ru_nsignals;
-	__kernel_long_t ru_nvcsw;
-	__kernel_long_t ru_nivcsw;
-};
-
-typedef struct {} mm_segment_t;
-
-typedef u32 compat_uint_t;
-
-struct compat_rusage {
-	struct old_timeval32 ru_utime;
-	struct old_timeval32 ru_stime;
-	compat_long_t ru_maxrss;
-	compat_long_t ru_ixrss;
-	compat_long_t ru_idrss;
-	compat_long_t ru_isrss;
-	compat_long_t ru_minflt;
-	compat_long_t ru_majflt;
-	compat_long_t ru_nswap;
-	compat_long_t ru_inblock;
-	compat_long_t ru_oublock;
-	compat_long_t ru_msgsnd;
-	compat_long_t ru_msgrcv;
-	compat_long_t ru_nsignals;
-	compat_long_t ru_nvcsw;
-	compat_long_t ru_nivcsw;
+	PM_L1_ITLB_MISS = 65782,
+	PM_NO_INST_AVAIL = 65784,
+	PM_LD_CMPL = 65788,
+	PM_INST_CMPL_ALT = 65790,
+	PM_ST_CMPL = 131312,
+	PM_INST_DISP___2 = 131314,
+	PM_RUN_CYC___2 = 131316,
+	PM_L1_DTLB_RELOAD = 131318,
+	PM_BR_TAKEN_CMPL = 131322,
+	PM_L1_ICACHE_MISS___2 = 131324,
+	PM_L1_RELOAD_FROM_MEM = 131326,
+	PM_ST_MISS_L1___2 = 196848,
+	PM_INST_DISP_ALT___2 = 196850,
+	PM_BR_MISPREDICT = 196854,
+	PM_DTLB_MISS___2 = 196860,
+	PM_DATA_FROM_L3MISS___2 = 196862,
+	PM_LD_MISS_L1___2 = 262384,
+	PM_CYC_INST_DISP = 262386,
+	PM_BR_MPRED_CMPL___2 = 262390,
+	PM_RUN_INST_CMPL___2 = 262394,
+	PM_ITLB_MISS___2 = 262396,
+	PM_LD_NOT_CACHED = 262398,
+	PM_INST_CMPL___2 = 327930,
+	PM_CYC___2 = 393460,
 };
 
 struct waitid_info {
@@ -23908,11336 +50437,33 @@
 	int notask_error;
 };
 
-struct trace_print_flags {
-	long unsigned int mask;
-	const char *name;
-};
-
-struct softirq_action {
-	void (*action)(struct softirq_action *);
-};
-
-struct tasklet_struct {
-	struct tasklet_struct *next;
-	long unsigned int state;
-	atomic_t count;
-	bool use_callback;
-	union {
-		void (*func)(long unsigned int);
-		void (*callback)(struct tasklet_struct *);
-	};
-	long unsigned int data;
-};
-
-enum {
-	TASKLET_STATE_SCHED = 0,
-	TASKLET_STATE_RUN = 1,
-};
-
-struct trace_event_raw_irq_handler_entry {
-	struct trace_entry ent;
-	int irq;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_irq_handler_exit {
-	struct trace_entry ent;
-	int irq;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_softirq {
-	struct trace_entry ent;
-	unsigned int vec;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_irq_handler_entry {
-	u32 name;
-};
-
-struct trace_event_data_offsets_irq_handler_exit {};
-
-struct trace_event_data_offsets_softirq {};
-
-typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
-
-typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
-
-typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
-
-struct tasklet_head {
-	struct tasklet_struct *head;
-	struct tasklet_struct **tail;
-};
-
-enum {
-	IORES_DESC_NONE = 0,
-	IORES_DESC_CRASH_KERNEL = 1,
-	IORES_DESC_ACPI_TABLES = 2,
-	IORES_DESC_ACPI_NV_STORAGE = 3,
-	IORES_DESC_PERSISTENT_MEMORY = 4,
-	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
-	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
-	IORES_DESC_RESERVED = 7,
-	IORES_DESC_SOFT_RESERVED = 8,
-};
-
-typedef void (*dr_release_t)(struct device *, void *);
-
-enum {
-	REGION_INTERSECTS = 0,
-	REGION_DISJOINT = 1,
-	REGION_MIXED = 2,
-};
-
-struct resource_entry {
-	struct list_head node;
-	struct resource *res;
-	resource_size_t offset;
-	struct resource __res;
-};
-
-struct resource_constraint {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
-	void *alignf_data;
-};
-
-enum {
-	MAX_IORES_LEVEL = 5,
-};
-
-struct region_devres {
-	struct resource *parent;
-	resource_size_t start;
-	resource_size_t n;
-};
-
-struct dentry_stat_t {
-	long int nr_dentry;
-	long int nr_unused;
-	long int age_limit;
-	long int want_pages;
-	long int nr_negative;
-	long int dummy;
-};
-
-struct files_stat_struct {
-	long unsigned int nr_files;
-	long unsigned int nr_free_files;
-	long unsigned int max_files;
-};
-
-struct inodes_stat_t {
-	long int nr_inodes;
-	long int nr_unused;
-	long int dummy[5];
-};
-
-enum sched_tunable_scaling {
-	SCHED_TUNABLESCALING_NONE = 0,
-	SCHED_TUNABLESCALING_LOG = 1,
-	SCHED_TUNABLESCALING_LINEAR = 2,
-	SCHED_TUNABLESCALING_END = 3,
-};
-
-enum sysctl_writes_mode {
-	SYSCTL_WRITES_LEGACY = 4294967295,
-	SYSCTL_WRITES_WARN = 0,
-	SYSCTL_WRITES_STRICT = 1,
-};
-
-struct do_proc_dointvec_minmax_conv_param {
-	int *min;
-	int *max;
-};
-
-struct do_proc_douintvec_minmax_conv_param {
-	unsigned int *min;
-	unsigned int *max;
-};
-
-struct __user_cap_header_struct {
-	__u32 version;
-	int pid;
-};
-
-typedef struct __user_cap_header_struct *cap_user_header_t;
-
-struct __user_cap_data_struct {
-	__u32 effective;
-	__u32 permitted;
-	__u32 inheritable;
-};
-
-typedef struct __user_cap_data_struct *cap_user_data_t;
-
-typedef struct siginfo siginfo_t;
-
-struct sigqueue {
-	struct list_head list;
-	int flags;
-	kernel_siginfo_t info;
-	struct user_struct *user;
-};
-
-struct ptrace_peeksiginfo_args {
-	__u64 off;
-	__u32 flags;
-	__s32 nr;
-};
-
-struct ptrace_syscall_info {
-	__u8 op;
-	__u8 pad[3];
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 stack_pointer;
-	union {
-		struct {
-			__u64 nr;
-			__u64 args[6];
-		} entry;
-		struct {
-			__s64 rval;
-			__u8 is_error;
-		} exit;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u32 ret_data;
-		} seccomp;
-	};
-};
-
-struct compat_iovec {
-	compat_uptr_t iov_base;
-	compat_size_t iov_len;
-};
-
-typedef long unsigned int old_sigset_t;
-
-enum siginfo_layout {
-	SIL_KILL = 0,
-	SIL_TIMER = 1,
-	SIL_POLL = 2,
-	SIL_FAULT = 3,
-	SIL_FAULT_MCEERR = 4,
-	SIL_FAULT_BNDERR = 5,
-	SIL_FAULT_PKUERR = 6,
-	SIL_CHLD = 7,
-	SIL_RT = 8,
-	SIL_SYS = 9,
-};
-
-struct fd {
-	struct file *file;
-	unsigned int flags;
-};
-
-typedef u32 compat_old_sigset_t;
-
-struct compat_sigaction {
-	compat_uptr_t sa_handler;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-	compat_sigset_t sa_mask;
-};
-
-struct compat_old_sigaction {
-	compat_uptr_t sa_handler;
-	compat_old_sigset_t sa_mask;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-};
-
-enum {
-	TRACE_SIGNAL_DELIVERED = 0,
-	TRACE_SIGNAL_IGNORED = 1,
-	TRACE_SIGNAL_ALREADY_PENDING = 2,
-	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
-	TRACE_SIGNAL_LOSE_INFO = 4,
-};
-
-struct trace_event_raw_signal_generate {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	char comm[16];
-	pid_t pid;
-	int group;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_signal_deliver {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	long unsigned int sa_handler;
-	long unsigned int sa_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_signal_generate {};
-
-struct trace_event_data_offsets_signal_deliver {};
-
-typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
-
-typedef __kernel_clock_t clock_t;
-
-struct sysinfo {
-	__kernel_long_t uptime;
-	__kernel_ulong_t loads[3];
-	__kernel_ulong_t totalram;
-	__kernel_ulong_t freeram;
-	__kernel_ulong_t sharedram;
-	__kernel_ulong_t bufferram;
-	__kernel_ulong_t totalswap;
-	__kernel_ulong_t freeswap;
-	__u16 procs;
-	__u16 pad;
-	__kernel_ulong_t totalhigh;
-	__kernel_ulong_t freehigh;
-	__u32 mem_unit;
-	char _f[0];
-};
-
-struct rlimit64 {
-	__u64 rlim_cur;
-	__u64 rlim_max;
-};
-
-struct timens_offsets {
-	struct timespec64 monotonic;
-	struct timespec64 boottime;
-};
-
-struct time_namespace {
-	struct kref kref;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-	struct timens_offsets offsets;
-	struct page *vvar_page;
-	bool frozen_offsets;
-};
-
-struct oldold_utsname {
-	char sysname[9];
-	char nodename[9];
-	char release[9];
-	char version[9];
-	char machine[9];
-};
-
-struct old_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-};
-
-enum uts_proc {
-	UTS_PROC_OSTYPE = 0,
-	UTS_PROC_OSRELEASE = 1,
-	UTS_PROC_VERSION = 2,
-	UTS_PROC_HOSTNAME = 3,
-	UTS_PROC_DOMAINNAME = 4,
-};
-
-struct prctl_mm_map {
-	__u64 start_code;
-	__u64 end_code;
-	__u64 start_data;
-	__u64 end_data;
-	__u64 start_brk;
-	__u64 brk;
-	__u64 start_stack;
-	__u64 arg_start;
-	__u64 arg_end;
-	__u64 env_start;
-	__u64 env_end;
-	__u64 *auxv;
-	__u32 auxv_size;
-	__u32 exe_fd;
-};
-
-struct tms {
-	__kernel_clock_t tms_utime;
-	__kernel_clock_t tms_stime;
-	__kernel_clock_t tms_cutime;
-	__kernel_clock_t tms_cstime;
-};
-
-struct getcpu_cache {
-	long unsigned int blob[16];
-};
-
-struct compat_tms {
-	compat_clock_t tms_utime;
-	compat_clock_t tms_stime;
-	compat_clock_t tms_cutime;
-	compat_clock_t tms_cstime;
-};
-
-struct compat_rlimit {
-	compat_ulong_t rlim_cur;
-	compat_ulong_t rlim_max;
-};
-
-struct compat_sysinfo {
-	s32 uptime;
-	u32 loads[3];
-	u32 totalram;
-	u32 freeram;
-	u32 sharedram;
-	u32 bufferram;
-	u32 totalswap;
-	u32 freeswap;
-	u16 procs;
-	u16 pad;
-	u32 totalhigh;
-	u32 freehigh;
-	u32 mem_unit;
-	char _f[8];
-};
-
-struct wq_flusher;
-
-struct worker;
-
-struct workqueue_attrs;
-
-struct pool_workqueue;
-
-struct wq_device;
-
-struct workqueue_struct {
-	struct list_head pwqs;
-	struct list_head list;
-	struct mutex mutex;
-	int work_color;
-	int flush_color;
-	atomic_t nr_pwqs_to_flush;
-	struct wq_flusher *first_flusher;
-	struct list_head flusher_queue;
-	struct list_head flusher_overflow;
-	struct list_head maydays;
-	struct worker *rescuer;
-	int nr_drainers;
-	int saved_max_active;
-	struct workqueue_attrs *unbound_attrs;
-	struct pool_workqueue *dfl_pwq;
-	struct wq_device *wq_dev;
-	char name[24];
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int flags;
-	struct pool_workqueue *cpu_pwqs;
-	struct pool_workqueue *numa_pwq_tbl[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct workqueue_attrs {
-	int nice;
-	cpumask_var_t cpumask;
-	bool no_numa;
-};
-
-struct execute_work {
-	struct work_struct work;
-};
-
-struct __una_u32 {
-	u32 x;
-};
-
-struct worker_pool;
-
-struct worker {
-	union {
-		struct list_head entry;
-		struct hlist_node hentry;
-	};
-	struct work_struct *current_work;
-	work_func_t current_func;
-	struct pool_workqueue *current_pwq;
-	struct list_head scheduled;
-	struct task_struct *task;
-	struct worker_pool *pool;
-	struct list_head node;
-	long unsigned int last_active;
-	unsigned int flags;
-	int id;
-	int sleeping;
-	char desc[24];
-	struct workqueue_struct *rescue_wq;
-	work_func_t last_func;
-};
-
-struct pool_workqueue {
-	struct worker_pool *pool;
-	struct workqueue_struct *wq;
-	int work_color;
-	int flush_color;
-	int refcnt;
-	int nr_in_flight[15];
-	int nr_active;
-	int max_active;
-	struct list_head delayed_works;
-	struct list_head pwqs_node;
-	struct list_head mayday_node;
-	struct work_struct unbound_release_work;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct worker_pool {
-	raw_spinlock_t lock;
-	int cpu;
-	int node;
-	int id;
-	unsigned int flags;
-	long unsigned int watchdog_ts;
-	struct list_head worklist;
-	int nr_workers;
-	int nr_idle;
-	struct list_head idle_list;
-	struct timer_list idle_timer;
-	struct timer_list mayday_timer;
-	struct hlist_head busy_hash[64];
-	struct worker *manager;
-	struct list_head workers;
-	struct completion *detach_completion;
-	struct ida worker_ida;
-	struct workqueue_attrs *attrs;
-	struct hlist_node hash_node;
-	int refcnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_t nr_running;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	POOL_MANAGER_ACTIVE = 1,
-	POOL_DISASSOCIATED = 4,
-	WORKER_DIE = 2,
-	WORKER_IDLE = 4,
-	WORKER_PREP = 8,
-	WORKER_CPU_INTENSIVE = 64,
-	WORKER_UNBOUND = 128,
-	WORKER_REBOUND = 256,
-	WORKER_NOT_RUNNING = 456,
-	NR_STD_WORKER_POOLS = 2,
-	UNBOUND_POOL_HASH_ORDER = 6,
-	BUSY_WORKER_HASH_ORDER = 6,
-	MAX_IDLE_WORKERS_RATIO = 4,
-	IDLE_WORKER_TIMEOUT = 300000,
-	MAYDAY_INITIAL_TIMEOUT = 10,
-	MAYDAY_INTERVAL = 100,
-	CREATE_COOLDOWN = 1000,
-	RESCUER_NICE_LEVEL = 4294967276,
-	HIGHPRI_NICE_LEVEL = 4294967276,
-	WQ_NAME_LEN = 24,
-};
-
-struct wq_flusher {
-	struct list_head list;
-	int flush_color;
-	struct completion done;
-};
-
-struct wq_device {
-	struct workqueue_struct *wq;
-	struct device dev;
-};
-
-struct trace_event_raw_workqueue_queue_work {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	void *workqueue;
-	unsigned int req_cpu;
-	unsigned int cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_activate_work {
-	struct trace_entry ent;
-	void *work;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_start {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_end {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_workqueue_queue_work {};
-
-struct trace_event_data_offsets_workqueue_activate_work {};
-
-struct trace_event_data_offsets_workqueue_execute_start {};
-
-struct trace_event_data_offsets_workqueue_execute_end {};
-
-typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
-
-struct wq_barrier {
-	struct work_struct work;
-	struct completion done;
-	struct task_struct *task;
-};
-
-struct cwt_wait {
-	wait_queue_entry_t wait;
-	struct work_struct *work;
-};
-
-struct apply_wqattrs_ctx {
-	struct workqueue_struct *wq;
-	struct workqueue_attrs *attrs;
-	struct list_head list;
-	struct pool_workqueue *dfl_pwq;
-	struct pool_workqueue *pwq_tbl[0];
-};
-
-struct work_for_cpu {
-	struct work_struct work;
-	long int (*fn)(void *);
-	void *arg;
-	long int ret;
-};
-
-typedef void (*task_work_func_t)(struct callback_head *);
-
-enum task_work_notify_mode {
-	TWA_NONE = 0,
-	TWA_RESUME = 1,
-	TWA_SIGNAL = 2,
-};
-
-enum {
-	KERNEL_PARAM_OPS_FL_NOARG = 1,
-};
-
-enum {
-	KERNEL_PARAM_FL_UNSAFE = 1,
-	KERNEL_PARAM_FL_HWPARAM = 2,
-};
-
-struct param_attribute {
-	struct module_attribute mattr;
-	const struct kernel_param *param;
-};
-
-struct module_param_attrs {
-	unsigned int num;
-	struct attribute_group grp;
-	struct param_attribute attrs[0];
-};
-
-struct module_version_attribute {
-	struct module_attribute mattr;
-	const char *module_name;
-	const char *version;
-};
-
-struct kmalloced_param {
-	struct list_head list;
-	char val[0];
-};
-
-struct sched_param {
-	int sched_priority;
-};
-
-enum {
-	__PERCPU_REF_ATOMIC = 1,
-	__PERCPU_REF_DEAD = 2,
-	__PERCPU_REF_ATOMIC_DEAD = 3,
-	__PERCPU_REF_FLAG_BITS = 2,
-};
-
-struct kthread_work;
-
-typedef void (*kthread_work_func_t)(struct kthread_work *);
-
-struct kthread_worker;
-
-struct kthread_work {
-	struct list_head node;
-	kthread_work_func_t func;
-	struct kthread_worker *worker;
-	int canceling;
-};
-
-enum {
-	KTW_FREEZABLE = 1,
-};
-
-struct kthread_worker {
-	unsigned int flags;
-	raw_spinlock_t lock;
-	struct list_head work_list;
-	struct list_head delayed_work_list;
-	struct task_struct *task;
-	struct kthread_work *current_work;
-};
-
-struct kthread_delayed_work {
-	struct kthread_work work;
-	struct timer_list timer;
-};
-
-enum {
-	CSS_NO_REF = 1,
-	CSS_ONLINE = 2,
-	CSS_RELEASED = 4,
-	CSS_VISIBLE = 8,
-	CSS_DYING = 16,
-};
-
-struct kthread_create_info {
-	int (*threadfn)(void *);
-	void *data;
-	int node;
-	struct task_struct *result;
-	struct completion *done;
-	struct list_head list;
-};
-
-struct kthread {
-	long unsigned int flags;
-	unsigned int cpu;
-	int (*threadfn)(void *);
-	void *data;
-	mm_segment_t oldfs;
-	struct completion parked;
-	struct completion exited;
-	struct cgroup_subsys_state *blkcg_css;
-};
-
-enum KTHREAD_BITS {
-	KTHREAD_IS_PER_CPU = 0,
-	KTHREAD_SHOULD_STOP = 1,
-	KTHREAD_SHOULD_PARK = 2,
-};
-
-struct kthread_flush_work {
-	struct kthread_work work;
-	struct completion done;
-};
-
-struct ipc_ids {
-	int in_use;
-	short unsigned int seq;
-	struct rw_semaphore rwsem;
-	struct idr ipcs_idr;
-	int max_idx;
-	int last_idx;
-	int next_id;
-	struct rhashtable key_ht;
-};
-
-struct ipc_namespace {
-	refcount_t count;
-	struct ipc_ids ids[3];
-	int sem_ctls[4];
-	int used_sems;
-	unsigned int msg_ctlmax;
-	unsigned int msg_ctlmnb;
-	unsigned int msg_ctlmni;
-	atomic_t msg_bytes;
-	atomic_t msg_hdrs;
-	size_t shm_ctlmax;
-	size_t shm_ctlall;
-	long unsigned int shm_tot;
-	int shm_ctlmni;
-	int shm_rmid_forced;
-	struct notifier_block ipcns_nb;
-	struct vfsmount *mq_mnt;
-	unsigned int mq_queues_count;
-	unsigned int mq_queues_max;
-	unsigned int mq_msg_max;
-	unsigned int mq_msgsize_max;
-	unsigned int mq_msg_default;
-	unsigned int mq_msgsize_default;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct llist_node mnt_llist;
-	struct ns_common ns;
-};
-
-struct srcu_notifier_head {
-	struct mutex mutex;
-	struct srcu_struct srcu;
-	struct notifier_block *head;
-};
-
-enum what {
-	PROC_EVENT_NONE = 0,
-	PROC_EVENT_FORK = 1,
-	PROC_EVENT_EXEC = 2,
-	PROC_EVENT_UID = 4,
-	PROC_EVENT_GID = 64,
-	PROC_EVENT_SID = 128,
-	PROC_EVENT_PTRACE = 256,
-	PROC_EVENT_COMM = 512,
-	PROC_EVENT_COREDUMP = 1073741824,
-	PROC_EVENT_EXIT = 2147483648,
-};
-
-enum reboot_type {
-	BOOT_TRIPLE = 116,
-	BOOT_KBD = 107,
-	BOOT_BIOS = 98,
-	BOOT_ACPI = 97,
-	BOOT_EFI = 101,
-	BOOT_CF9_FORCE = 112,
-	BOOT_CF9_SAFE = 113,
-};
-
-typedef u64 async_cookie_t;
-
-typedef void (*async_func_t)(void *, async_cookie_t);
-
-struct async_domain {
-	struct list_head pending;
-	unsigned int registered: 1;
-};
-
-struct async_entry {
-	struct list_head domain_list;
-	struct list_head global_list;
-	struct work_struct work;
-	async_cookie_t cookie;
-	async_func_t func;
-	void *data;
-	struct async_domain *domain;
-};
-
-struct smpboot_thread_data {
-	unsigned int cpu;
-	unsigned int status;
-	struct smp_hotplug_thread *ht;
-};
-
-enum {
-	HP_THREAD_NONE = 0,
-	HP_THREAD_ACTIVE = 1,
-	HP_THREAD_PARKED = 2,
-};
-
-struct umd_info {
-	const char *driver_name;
-	struct file *pipe_to_umh;
-	struct file *pipe_from_umh;
-	struct path wd;
-	struct pid *tgid;
-};
-
-struct pin_cookie {};
-
-enum {
-	CSD_FLAG_LOCK = 1,
-	IRQ_WORK_PENDING = 1,
-	IRQ_WORK_BUSY = 2,
-	IRQ_WORK_LAZY = 4,
-	IRQ_WORK_HARD_IRQ = 8,
-	IRQ_WORK_CLAIMED = 3,
-	CSD_TYPE_ASYNC = 0,
-	CSD_TYPE_SYNC = 16,
-	CSD_TYPE_IRQ_WORK = 32,
-	CSD_TYPE_TTWU = 48,
-	CSD_FLAG_TYPE_MASK = 240,
-};
-
-typedef struct __call_single_data call_single_data_t;
-
-struct dl_bw {
-	raw_spinlock_t lock;
-	u64 bw;
-	u64 total_bw;
-};
-
-struct cpudl_item;
-
-struct cpudl {
-	raw_spinlock_t lock;
-	int size;
-	cpumask_var_t free_cpus;
-	struct cpudl_item *elements;
-};
-
-struct cpupri_vec {
-	atomic_t count;
-	cpumask_var_t mask;
-};
-
-struct cpupri {
-	struct cpupri_vec pri_to_cpu[102];
-	int *cpu_to_pri;
-};
-
-struct perf_domain;
-
-struct root_domain {
-	atomic_t refcount;
-	atomic_t rto_count;
-	struct callback_head rcu;
-	cpumask_var_t span;
-	cpumask_var_t online;
-	int overload;
-	int overutilized;
-	cpumask_var_t dlo_mask;
-	atomic_t dlo_count;
-	struct dl_bw dl_bw;
-	struct cpudl cpudl;
-	struct irq_work rto_push_work;
-	raw_spinlock_t rto_lock;
-	int rto_loop;
-	int rto_cpu;
-	atomic_t rto_loop_next;
-	atomic_t rto_loop_start;
-	cpumask_var_t rto_mask;
-	struct cpupri cpupri;
-	long unsigned int max_cpu_capacity;
-	struct perf_domain *pd;
-};
-
-struct cfs_rq {
-	struct load_weight load;
-	unsigned int nr_running;
-	unsigned int h_nr_running;
-	unsigned int idle_h_nr_running;
-	u64 exec_clock;
-	u64 min_vruntime;
-	struct rb_root_cached tasks_timeline;
-	struct sched_entity *curr;
-	struct sched_entity *next;
-	struct sched_entity *last;
-	struct sched_entity *skip;
-	unsigned int nr_spread_over;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg;
-	struct {
-		raw_spinlock_t lock;
-		int nr;
-		long unsigned int load_avg;
-		long unsigned int util_avg;
-		long unsigned int runnable_avg;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	} removed;
-	long unsigned int tg_load_avg_contrib;
-	long int propagate;
-	long int prop_runnable_sum;
-	long unsigned int h_load;
-	u64 last_h_load_update;
-	struct sched_entity *h_load_next;
-	struct rq *rq;
-	int on_list;
-	struct list_head leaf_cfs_rq_list;
-	struct task_group *tg;
-	int runtime_enabled;
-	s64 runtime_remaining;
-	u64 throttled_clock;
-	u64 throttled_clock_task;
-	u64 throttled_clock_task_time;
-	int throttled;
-	int throttle_count;
-	struct list_head throttled_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cfs_bandwidth {
-	raw_spinlock_t lock;
-	ktime_t period;
-	u64 quota;
-	u64 runtime;
-	s64 hierarchical_quota;
-	u8 idle;
-	u8 period_active;
-	u8 slack_started;
-	struct hrtimer period_timer;
-	struct hrtimer slack_timer;
-	struct list_head throttled_cfs_rq;
-	int nr_periods;
-	int nr_throttled;
-	u64 throttled_time;
-};
-
-struct task_group {
-	struct cgroup_subsys_state css;
-	struct sched_entity **se;
-	struct cfs_rq **cfs_rq;
-	long unsigned int shares;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t load_avg;
-	struct callback_head rcu;
-	struct list_head list;
-	struct task_group *parent;
-	struct list_head siblings;
-	struct list_head children;
-	struct autogroup *autogroup;
-	struct cfs_bandwidth cfs_bandwidth;
-	unsigned int uclamp_pct[2];
-	struct uclamp_se uclamp_req[2];
-	struct uclamp_se uclamp[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sched_group {
-	struct sched_group *next;
-	atomic_t ref;
-	unsigned int group_weight;
-	struct sched_group_capacity *sgc;
-	int asym_prefer_cpu;
-	long unsigned int cpumask[0];
-};
-
-struct sched_group_capacity {
-	atomic_t ref;
-	long unsigned int capacity;
-	long unsigned int min_capacity;
-	long unsigned int max_capacity;
-	long unsigned int next_update;
-	int imbalance;
-	int id;
-	long unsigned int cpumask[0];
-};
-
-struct autogroup {
-	struct kref kref;
-	struct task_group *tg;
-	struct rw_semaphore lock;
-	long unsigned int id;
-	int nice;
-};
-
-enum {
-	CFTYPE_ONLY_ON_ROOT = 1,
-	CFTYPE_NOT_ON_ROOT = 2,
-	CFTYPE_NS_DELEGATABLE = 4,
-	CFTYPE_NO_PREFIX = 8,
-	CFTYPE_WORLD_WRITABLE = 16,
-	CFTYPE_DEBUG = 32,
-	__CFTYPE_ONLY_ON_DFL = 65536,
-	__CFTYPE_NOT_ON_DFL = 131072,
-};
-
-struct css_task_iter {
-	struct cgroup_subsys *ss;
-	unsigned int flags;
-	struct list_head *cset_pos;
-	struct list_head *cset_head;
-	struct list_head *tcset_pos;
-	struct list_head *tcset_head;
-	struct list_head *task_pos;
-	struct list_head *cur_tasks_head;
-	struct css_set *cur_cset;
-	struct css_set *cur_dcset;
-	struct task_struct *cur_task;
-	struct list_head iters_node;
-};
-
-struct trace_event_raw_sched_kthread_stop {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_kthread_stop_ret {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wakeup_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int success;
-	int target_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_switch {
-	struct trace_entry ent;
-	char prev_comm[16];
-	pid_t prev_pid;
-	int prev_prio;
-	long int prev_state;
-	char next_comm[16];
-	pid_t next_pid;
-	int next_prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_migrate_task {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int orig_cpu;
-	int dest_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_wait {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_fork {
-	struct trace_entry ent;
-	char parent_comm[16];
-	pid_t parent_pid;
-	char child_comm[16];
-	pid_t child_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_exec {
-	struct trace_entry ent;
-	u32 __data_loc_filename;
-	pid_t pid;
-	pid_t old_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 delay;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_runtime {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 runtime;
-	u64 vruntime;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_pi_setprio {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int oldprio;
-	int newprio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_hang {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_move_numa {
-	struct trace_entry ent;
-	pid_t pid;
-	pid_t tgid;
-	pid_t ngid;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_numa_pair_template {
-	struct trace_entry ent;
-	pid_t src_pid;
-	pid_t src_tgid;
-	pid_t src_ngid;
-	int src_cpu;
-	int src_nid;
-	pid_t dst_pid;
-	pid_t dst_tgid;
-	pid_t dst_ngid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wake_idle_without_ipi {
-	struct trace_entry ent;
-	int cpu;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sched_kthread_stop {};
-
-struct trace_event_data_offsets_sched_kthread_stop_ret {};
-
-struct trace_event_data_offsets_sched_wakeup_template {};
-
-struct trace_event_data_offsets_sched_switch {};
-
-struct trace_event_data_offsets_sched_migrate_task {};
-
-struct trace_event_data_offsets_sched_process_template {};
-
-struct trace_event_data_offsets_sched_process_wait {};
-
-struct trace_event_data_offsets_sched_process_fork {};
-
-struct trace_event_data_offsets_sched_process_exec {
-	u32 filename;
-};
-
-struct trace_event_data_offsets_sched_stat_template {};
-
-struct trace_event_data_offsets_sched_stat_runtime {};
-
-struct trace_event_data_offsets_sched_pi_setprio {};
-
-struct trace_event_data_offsets_sched_process_hang {};
-
-struct trace_event_data_offsets_sched_move_numa {};
-
-struct trace_event_data_offsets_sched_numa_pair_template {};
-
-struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
-
-typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
-
-typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
-
-typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
-
-typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
-
-typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
-
-struct wake_q_head {
-	struct wake_q_node *first;
-	struct wake_q_node **lastp;
-};
-
-struct sched_attr {
-	__u32 size;
-	__u32 sched_policy;
-	__u64 sched_flags;
-	__s32 sched_nice;
-	__u32 sched_priority;
-	__u64 sched_runtime;
-	__u64 sched_deadline;
-	__u64 sched_period;
-	__u32 sched_util_min;
-	__u32 sched_util_max;
-};
-
-struct cpuidle_state_usage {
-	long long unsigned int disable;
-	long long unsigned int usage;
-	u64 time_ns;
-	long long unsigned int above;
-	long long unsigned int below;
-	long long unsigned int rejected;
-	long long unsigned int s2idle_usage;
-	long long unsigned int s2idle_time;
-};
-
-struct cpuidle_device;
-
-struct cpuidle_driver;
-
-struct cpuidle_state {
-	char name[16];
-	char desc[32];
-	u64 exit_latency_ns;
-	u64 target_residency_ns;
-	unsigned int flags;
-	unsigned int exit_latency;
-	int power_usage;
-	unsigned int target_residency;
-	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
-	int (*enter_dead)(struct cpuidle_device *, int);
-	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
-};
-
-struct cpuidle_driver_kobj;
-
-struct cpuidle_state_kobj;
-
-struct cpuidle_device_kobj;
-
-struct cpuidle_device {
-	unsigned int registered: 1;
-	unsigned int enabled: 1;
-	unsigned int poll_time_limit: 1;
-	unsigned int cpu;
-	ktime_t next_hrtimer;
-	int last_state_idx;
-	u64 last_residency_ns;
-	u64 poll_limit_ns;
-	u64 forced_idle_latency_limit_ns;
-	struct cpuidle_state_usage states_usage[10];
-	struct cpuidle_state_kobj *kobjs[10];
-	struct cpuidle_driver_kobj *kobj_driver;
-	struct cpuidle_device_kobj *kobj_dev;
-	struct list_head device_list;
-};
-
-struct cpuidle_driver {
-	const char *name;
-	struct module *owner;
-	unsigned int bctimer: 1;
-	struct cpuidle_state states[10];
-	int state_count;
-	int safe_state_index;
-	struct cpumask *cpumask;
-	const char *governor;
-};
-
-typedef int (*cpu_stop_fn_t)(void *);
-
-struct cpu_stop_done;
-
-struct cpu_stop_work {
-	struct list_head list;
-	cpu_stop_fn_t fn;
-	void *arg;
-	struct cpu_stop_done *done;
-};
-
-struct cpudl_item {
-	u64 dl;
-	int cpu;
-	int idx;
-};
-
-struct rt_prio_array {
-	long unsigned int bitmap[2];
-	struct list_head queue[100];
-};
-
-struct rt_bandwidth {
-	raw_spinlock_t rt_runtime_lock;
-	ktime_t rt_period;
-	u64 rt_runtime;
-	struct hrtimer rt_period_timer;
-	unsigned int rt_period_active;
-};
-
-struct dl_bandwidth {
-	raw_spinlock_t dl_runtime_lock;
-	u64 dl_runtime;
-	u64 dl_period;
-};
-
-typedef int (*tg_visitor)(struct task_group *, void *);
-
-struct uclamp_bucket {
-	long unsigned int value: 11;
-	long unsigned int tasks: 53;
-};
-
-struct uclamp_rq {
-	unsigned int value;
-	struct uclamp_bucket bucket[5];
-};
-
-struct rt_rq {
-	struct rt_prio_array active;
-	unsigned int rt_nr_running;
-	unsigned int rr_nr_running;
-	struct {
-		int curr;
-		int next;
-	} highest_prio;
-	long unsigned int rt_nr_migratory;
-	long unsigned int rt_nr_total;
-	int overloaded;
-	struct plist_head pushable_tasks;
-	int rt_queued;
-	int rt_throttled;
-	u64 rt_time;
-	u64 rt_runtime;
-	raw_spinlock_t rt_runtime_lock;
-};
-
-struct dl_rq {
-	struct rb_root_cached root;
-	long unsigned int dl_nr_running;
-	struct {
-		u64 curr;
-		u64 next;
-	} earliest_dl;
-	long unsigned int dl_nr_migratory;
-	int overloaded;
-	struct rb_root_cached pushable_dl_tasks_root;
-	u64 running_bw;
-	u64 this_bw;
-	u64 extra_bw;
-	u64 bw_ratio;
-};
-
-struct rq {
-	raw_spinlock_t lock;
-	unsigned int nr_running;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-	unsigned int numa_migrate_on;
-	long unsigned int last_blocked_load_update_tick;
-	unsigned int has_blocked_load;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t nohz_csd;
-	unsigned int nohz_tick_stopped;
-	atomic_t nohz_flags;
-	unsigned int ttwu_pending;
-	u64 nr_switches;
-	long: 64;
-	struct uclamp_rq uclamp[2];
-	unsigned int uclamp_flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct cfs_rq cfs;
-	struct rt_rq rt;
-	struct dl_rq dl;
-	struct list_head leaf_cfs_rq_list;
-	struct list_head *tmp_alone_branch;
-	long unsigned int nr_uninterruptible;
-	struct task_struct *curr;
-	struct task_struct *idle;
-	struct task_struct *stop;
-	long unsigned int next_balance;
-	struct mm_struct *prev_mm;
-	unsigned int clock_update_flags;
-	u64 clock;
-	long: 64;
-	long: 64;
-	long: 64;
-	u64 clock_task;
-	u64 clock_pelt;
-	long unsigned int lost_idle_time;
-	atomic_t nr_iowait;
-	int membarrier_state;
-	struct root_domain *rd;
-	struct sched_domain *sd;
-	long unsigned int cpu_capacity;
-	long unsigned int cpu_capacity_orig;
-	struct callback_head *balance_callback;
-	unsigned char nohz_idle_balance;
-	unsigned char idle_balance;
-	long unsigned int misfit_task_load;
-	int active_balance;
-	int push_cpu;
-	struct cpu_stop_work active_balance_work;
-	int cpu;
-	int online;
-	struct list_head cfs_tasks;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg_rt;
-	struct sched_avg avg_dl;
-	u64 idle_stamp;
-	u64 avg_idle;
-	u64 max_idle_balance_cost;
-	long unsigned int calc_load_update;
-	long int calc_load_active;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t hrtick_csd;
-	struct hrtimer hrtick_timer;
-	struct sched_info rq_sched_info;
-	long long unsigned int rq_cpu_time;
-	unsigned int yld_count;
-	unsigned int sched_count;
-	unsigned int sched_goidle;
-	unsigned int ttwu_count;
-	unsigned int ttwu_local;
-	struct cpuidle_state *idle_state;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct perf_domain {
-	struct em_perf_domain *em_pd;
-	struct perf_domain *next;
-	struct callback_head rcu;
-};
-
-struct rq_flags {
-	long unsigned int flags;
-	struct pin_cookie cookie;
-	unsigned int clock_update_flags;
-};
-
-enum {
-	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
-	__SCHED_FEAT_START_DEBIT = 1,
-	__SCHED_FEAT_NEXT_BUDDY = 2,
-	__SCHED_FEAT_LAST_BUDDY = 3,
-	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
-	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
-	__SCHED_FEAT_HRTICK = 6,
-	__SCHED_FEAT_DOUBLE_TICK = 7,
-	__SCHED_FEAT_NONTASK_CAPACITY = 8,
-	__SCHED_FEAT_TTWU_QUEUE = 9,
-	__SCHED_FEAT_SIS_AVG_CPU = 10,
-	__SCHED_FEAT_SIS_PROP = 11,
-	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
-	__SCHED_FEAT_RT_PUSH_IPI = 13,
-	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
-	__SCHED_FEAT_LB_MIN = 15,
-	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
-	__SCHED_FEAT_WA_IDLE = 17,
-	__SCHED_FEAT_WA_WEIGHT = 18,
-	__SCHED_FEAT_WA_BIAS = 19,
-	__SCHED_FEAT_UTIL_EST = 20,
-	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
-	__SCHED_FEAT_NR = 22,
-};
-
-struct migration_arg {
-	struct task_struct *task;
-	int dest_cpu;
-};
-
-struct migration_swap_arg {
-	struct task_struct *src_task;
-	struct task_struct *dst_task;
-	int src_cpu;
-	int dst_cpu;
-};
-
-struct uclamp_request {
-	s64 percent;
-	u64 util;
-	int ret;
-};
-
-struct cfs_schedulable_data {
-	struct task_group *tg;
-	u64 period;
-	u64 quota;
-};
-
-enum {
-	cpuset = 0,
-	possible = 1,
-	fail = 2,
-};
-
-enum s2idle_states {
-	S2IDLE_STATE_NONE = 0,
-	S2IDLE_STATE_ENTER = 1,
-	S2IDLE_STATE_WAKE = 2,
-};
-
-struct idle_timer {
-	struct hrtimer timer;
-	int done;
-};
-
-struct numa_group {
-	refcount_t refcount;
-	spinlock_t lock;
-	int nr_tasks;
-	pid_t gid;
-	int active_nodes;
-	struct callback_head rcu;
-	long unsigned int total_faults;
-	long unsigned int max_faults_cpu;
-	long unsigned int *faults_cpu;
-	long unsigned int faults[0];
-};
-
-struct update_util_data {
-	void (*func)(struct update_util_data *, u64, unsigned int);
-};
-
-enum numa_topology_type {
-	NUMA_DIRECT = 0,
-	NUMA_GLUELESS_MESH = 1,
-	NUMA_BACKPLANE = 2,
-};
-
-enum numa_faults_stats {
-	NUMA_MEM = 0,
-	NUMA_CPU = 1,
-	NUMA_MEMBUF = 2,
-	NUMA_CPUBUF = 3,
-};
-
-enum schedutil_type {
-	FREQUENCY_UTIL = 0,
-	ENERGY_UTIL = 1,
-};
-
-enum numa_type {
-	node_has_spare = 0,
-	node_fully_busy = 1,
-	node_overloaded = 2,
-};
-
-struct numa_stats {
-	long unsigned int load;
-	long unsigned int runnable;
-	long unsigned int util;
-	long unsigned int compute_capacity;
-	unsigned int nr_running;
-	unsigned int weight;
-	enum numa_type node_type;
-	int idle_cpu;
-};
-
-struct task_numa_env {
-	struct task_struct *p;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	struct numa_stats src_stats;
-	struct numa_stats dst_stats;
-	int imbalance_pct;
-	int dist;
-	struct task_struct *best_task;
-	long int best_imp;
-	int best_cpu;
-};
-
-enum fbq_type {
-	regular = 0,
-	remote = 1,
-	all = 2,
-};
-
-enum group_type {
-	group_has_spare = 0,
-	group_fully_busy = 1,
-	group_misfit_task = 2,
-	group_asym_packing = 3,
-	group_imbalanced = 4,
-	group_overloaded = 5,
-};
-
-enum migration_type {
-	migrate_load = 0,
-	migrate_util = 1,
-	migrate_task = 2,
-	migrate_misfit = 3,
-};
-
-struct lb_env {
-	struct sched_domain *sd;
-	struct rq *src_rq;
-	int src_cpu;
-	int dst_cpu;
-	struct rq *dst_rq;
-	struct cpumask *dst_grpmask;
-	int new_dst_cpu;
-	enum cpu_idle_type idle;
-	long int imbalance;
-	struct cpumask *cpus;
-	unsigned int flags;
-	unsigned int loop;
-	unsigned int loop_break;
-	unsigned int loop_max;
-	enum fbq_type fbq_type;
-	enum migration_type migration_type;
-	struct list_head tasks;
-};
-
-struct sg_lb_stats {
-	long unsigned int avg_load;
-	long unsigned int group_load;
-	long unsigned int group_capacity;
-	long unsigned int group_util;
-	long unsigned int group_runnable;
-	unsigned int sum_nr_running;
-	unsigned int sum_h_nr_running;
-	unsigned int idle_cpus;
-	unsigned int group_weight;
-	enum group_type group_type;
-	unsigned int group_asym_packing;
-	long unsigned int group_misfit_task_load;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-};
-
-struct sd_lb_stats {
-	struct sched_group *busiest;
-	struct sched_group *local;
-	long unsigned int total_load;
-	long unsigned int total_capacity;
-	long unsigned int avg_load;
-	unsigned int prefer_sibling;
-	struct sg_lb_stats busiest_stat;
-	struct sg_lb_stats local_stat;
-};
-
-typedef struct rt_rq *rt_rq_iter_t;
-
-struct wait_bit_key {
-	void *flags;
-	int bit_nr;
-	long unsigned int timeout;
-};
-
-struct wait_bit_queue_entry {
-	struct wait_bit_key key;
-	struct wait_queue_entry wq_entry;
-};
-
-typedef int wait_bit_action_f(struct wait_bit_key *, int);
-
-struct swait_queue {
-	struct task_struct *task;
-	struct list_head task_list;
-};
-
-struct sd_flag_debug {
-	unsigned int meta_flags;
-	char *name;
-};
-
-struct sched_domain_attr {
-	int relax_domain_level;
-};
-
-enum cpufreq_table_sorting {
-	CPUFREQ_TABLE_UNSORTED = 0,
-	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
-	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
-};
-
-struct cpufreq_cpuinfo {
-	unsigned int max_freq;
-	unsigned int min_freq;
-	unsigned int transition_latency;
-};
-
-struct clk;
-
-struct cpufreq_governor;
-
-struct cpufreq_frequency_table;
-
-struct cpufreq_stats;
-
-struct thermal_cooling_device;
-
-struct cpufreq_policy {
-	cpumask_var_t cpus;
-	cpumask_var_t related_cpus;
-	cpumask_var_t real_cpus;
-	unsigned int shared_type;
-	unsigned int cpu;
-	struct clk *clk;
-	struct cpufreq_cpuinfo cpuinfo;
-	unsigned int min;
-	unsigned int max;
-	unsigned int cur;
-	unsigned int restore_freq;
-	unsigned int suspend_freq;
-	unsigned int policy;
-	unsigned int last_policy;
-	struct cpufreq_governor *governor;
-	void *governor_data;
-	char last_governor[16];
-	struct work_struct update;
-	struct freq_constraints constraints;
-	struct freq_qos_request *min_freq_req;
-	struct freq_qos_request *max_freq_req;
-	struct cpufreq_frequency_table *freq_table;
-	enum cpufreq_table_sorting freq_table_sorted;
-	struct list_head policy_list;
-	struct kobject kobj;
-	struct completion kobj_unregister;
-	struct rw_semaphore rwsem;
-	bool fast_switch_possible;
-	bool fast_switch_enabled;
-	bool strict_target;
-	unsigned int transition_delay_us;
-	bool dvfs_possible_from_any_cpu;
-	unsigned int cached_target_freq;
-	unsigned int cached_resolved_idx;
-	bool transition_ongoing;
-	spinlock_t transition_lock;
-	wait_queue_head_t transition_wait;
-	struct task_struct *transition_task;
-	struct cpufreq_stats *stats;
-	void *driver_data;
-	struct thermal_cooling_device *cdev;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct cpufreq_governor {
-	char name[16];
-	int (*init)(struct cpufreq_policy *);
-	void (*exit)(struct cpufreq_policy *);
-	int (*start)(struct cpufreq_policy *);
-	void (*stop)(struct cpufreq_policy *);
-	void (*limits)(struct cpufreq_policy *);
-	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
-	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
-	struct list_head governor_list;
-	struct module *owner;
-	u8 flags;
-};
-
-struct cpufreq_frequency_table {
-	unsigned int flags;
-	unsigned int driver_data;
-	unsigned int frequency;
-};
-
-struct s_data {
-	struct sched_domain **sd;
-	struct root_domain *rd;
-};
-
-enum s_alloc {
-	sa_rootdomain = 0,
-	sa_sd = 1,
-	sa_sd_storage = 2,
-	sa_none = 3,
-};
-
-enum cpuacct_stat_index {
-	CPUACCT_STAT_USER = 0,
-	CPUACCT_STAT_SYSTEM = 1,
-	CPUACCT_STAT_NSTATS = 2,
-};
-
-struct cpuacct_usage {
-	u64 usages[2];
-};
-
-struct cpuacct {
-	struct cgroup_subsys_state css;
-	struct cpuacct_usage *cpuusage;
-	struct kernel_cpustat *cpustat;
-};
-
-struct gov_attr_set {
-	struct kobject kobj;
-	struct list_head policy_list;
-	struct mutex update_lock;
-	int usage_count;
-};
-
-struct governor_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct gov_attr_set *, char *);
-	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
-};
-
-struct sugov_tunables {
-	struct gov_attr_set attr_set;
-	unsigned int rate_limit_us;
-};
-
-struct sugov_policy {
-	struct cpufreq_policy *policy;
-	struct sugov_tunables *tunables;
-	struct list_head tunables_hook;
-	raw_spinlock_t update_lock;
-	u64 last_freq_update_time;
-	s64 freq_update_delay_ns;
-	unsigned int next_freq;
-	unsigned int cached_raw_freq;
-	struct irq_work irq_work;
-	struct kthread_work work;
-	struct mutex work_lock;
-	struct kthread_worker worker;
-	struct task_struct *thread;
-	bool work_in_progress;
-	bool limits_changed;
-	bool need_freq_update;
-};
-
-struct sugov_cpu {
-	struct update_util_data update_util;
-	struct sugov_policy *sg_policy;
-	unsigned int cpu;
-	bool iowait_boost_pending;
-	unsigned int iowait_boost;
-	u64 last_update;
-	long unsigned int bw_dl;
-	long unsigned int max;
-	long unsigned int saved_idle_calls;
-};
-
-enum {
-	MEMBARRIER_FLAG_SYNC_CORE = 1,
-	MEMBARRIER_FLAG_RSEQ = 2,
-};
-
-enum membarrier_cmd {
-	MEMBARRIER_CMD_QUERY = 0,
-	MEMBARRIER_CMD_GLOBAL = 1,
-	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
-	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
-	MEMBARRIER_CMD_SHARED = 1,
-};
-
-enum membarrier_cmd_flag {
-	MEMBARRIER_CMD_FLAG_CPU = 1,
-};
-
-enum psi_res {
-	PSI_IO = 0,
-	PSI_MEM = 1,
-	PSI_CPU = 2,
-	NR_PSI_RESOURCES = 3,
-};
-
-struct psi_window {
-	u64 size;
-	u64 start_time;
-	u64 start_value;
-	u64 prev_growth;
-};
-
-struct psi_trigger {
-	enum psi_states state;
-	u64 threshold;
-	struct list_head node;
-	struct psi_group *group;
-	wait_queue_head_t event_wait;
-	int event;
-	struct psi_window win;
-	u64 last_event_time;
-	struct kref refcount;
-};
-
-struct ww_acquire_ctx;
-
-struct ww_mutex {
-	struct mutex base;
-	struct ww_acquire_ctx *ctx;
-};
-
-struct ww_acquire_ctx {
-	struct task_struct *task;
-	long unsigned int stamp;
-	unsigned int acquired;
-	short unsigned int wounded;
-	short unsigned int is_wait_die;
-};
-
-struct mutex_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	struct ww_acquire_ctx *ww_ctx;
-};
-
-enum mutex_trylock_recursive_enum {
-	MUTEX_TRYLOCK_FAILED = 0,
-	MUTEX_TRYLOCK_SUCCESS = 1,
-	MUTEX_TRYLOCK_RECURSIVE = 2,
-};
-
-struct semaphore_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	bool up;
-};
-
-enum rwsem_waiter_type {
-	RWSEM_WAITING_FOR_WRITE = 0,
-	RWSEM_WAITING_FOR_READ = 1,
-};
-
-struct rwsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	enum rwsem_waiter_type type;
-	long unsigned int timeout;
-	long unsigned int last_rowner;
-};
-
-enum rwsem_wake_type {
-	RWSEM_WAKE_ANY = 0,
-	RWSEM_WAKE_READERS = 1,
-	RWSEM_WAKE_READ_OWNED = 2,
-};
-
-enum writer_wait_state {
-	WRITER_NOT_FIRST = 0,
-	WRITER_FIRST = 1,
-	WRITER_HANDOFF = 2,
-};
-
-enum owner_state {
-	OWNER_NULL = 1,
-	OWNER_WRITER = 2,
-	OWNER_READER = 4,
-	OWNER_NONSPINNABLE = 8,
-};
-
-struct optimistic_spin_node {
-	struct optimistic_spin_node *next;
-	struct optimistic_spin_node *prev;
-	int locked;
-	int cpu;
-};
-
-struct hrtimer_sleeper {
-	struct hrtimer timer;
-	struct task_struct *task;
-};
-
-struct rt_mutex;
-
-struct rt_mutex_waiter {
-	struct rb_node tree_entry;
-	struct rb_node pi_tree_entry;
-	struct task_struct *task;
-	struct rt_mutex *lock;
-	int prio;
-	u64 deadline;
-};
-
-struct rt_mutex {
-	raw_spinlock_t wait_lock;
-	struct rb_root_cached waiters;
-	struct task_struct *owner;
-};
-
-enum rtmutex_chainwalk {
-	RT_MUTEX_MIN_CHAINWALK = 0,
-	RT_MUTEX_FULL_CHAINWALK = 1,
-};
-
-struct pm_qos_request {
-	struct plist_node node;
-	struct pm_qos_constraints *qos;
-};
-
-enum pm_qos_req_action {
-	PM_QOS_ADD_REQ = 0,
-	PM_QOS_UPDATE_REQ = 1,
-	PM_QOS_REMOVE_REQ = 2,
-};
-
-struct miscdevice {
-	int minor;
-	const char *name;
-	const struct file_operations *fops;
-	struct list_head list;
-	struct device *parent;
-	struct device *this_device;
-	const struct attribute_group **groups;
-	const char *nodename;
-	umode_t mode;
-};
-
-enum suspend_stat_step {
-	SUSPEND_FREEZE = 1,
-	SUSPEND_PREPARE = 2,
-	SUSPEND_SUSPEND = 3,
-	SUSPEND_SUSPEND_LATE = 4,
-	SUSPEND_SUSPEND_NOIRQ = 5,
-	SUSPEND_RESUME_NOIRQ = 6,
-	SUSPEND_RESUME_EARLY = 7,
-	SUSPEND_RESUME = 8,
-};
-
-struct suspend_stats {
-	int success;
-	int fail;
-	int failed_freeze;
-	int failed_prepare;
-	int failed_suspend;
-	int failed_suspend_late;
-	int failed_suspend_noirq;
-	int failed_resume;
-	int failed_resume_early;
-	int failed_resume_noirq;
-	int last_failed_dev;
-	char failed_devs[80];
-	int last_failed_errno;
-	int errno[2];
-	int last_failed_step;
-	enum suspend_stat_step failed_steps[2];
-};
-
-enum {
-	TEST_NONE = 0,
-	TEST_CORE = 1,
-	TEST_CPUS = 2,
-	TEST_PLATFORM = 3,
-	TEST_DEVICES = 4,
-	TEST_FREEZER = 5,
-	__TEST_AFTER_LAST = 6,
-};
-
-struct pm_vt_switch {
-	struct list_head head;
-	struct device *dev;
-	bool required;
-};
-
-struct platform_s2idle_ops {
-	int (*begin)();
-	int (*prepare)();
-	int (*prepare_late)();
-	bool (*wake)();
-	void (*restore_early)();
-	void (*restore)();
-	void (*end)();
-};
-
-struct platform_hibernation_ops {
-	int (*begin)(pm_message_t);
-	void (*end)();
-	int (*pre_snapshot)();
-	void (*finish)();
-	int (*prepare)();
-	int (*enter)();
-	void (*leave)();
-	int (*pre_restore)();
-	void (*restore_cleanup)();
-	void (*recover)();
-};
-
-enum {
-	HIBERNATION_INVALID = 0,
-	HIBERNATION_PLATFORM = 1,
-	HIBERNATION_SHUTDOWN = 2,
-	HIBERNATION_REBOOT = 3,
-	HIBERNATION_SUSPEND = 4,
-	HIBERNATION_TEST_RESUME = 5,
-	__HIBERNATION_AFTER_LAST = 6,
-};
-
-struct pbe {
-	void *address;
-	void *orig_address;
-	struct pbe *next;
-};
-
-struct swsusp_info {
-	struct new_utsname uts;
-	u32 version_code;
-	long unsigned int num_physpages;
-	int cpus;
-	long unsigned int image_pages;
-	long unsigned int pages;
-	long unsigned int size;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct snapshot_handle {
-	unsigned int cur;
-	void *buffer;
-	int sync_read;
-};
-
-struct linked_page {
-	struct linked_page *next;
-	char data[65528];
-};
-
-struct chain_allocator {
-	struct linked_page *chain;
-	unsigned int used_space;
-	gfp_t gfp_mask;
-	int safe_needed;
-};
-
-struct rtree_node {
-	struct list_head list;
-	long unsigned int *data;
-};
-
-struct mem_zone_bm_rtree {
-	struct list_head list;
-	struct list_head nodes;
-	struct list_head leaves;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	struct rtree_node *rtree;
-	int levels;
-	unsigned int blocks;
-};
-
-struct bm_position {
-	struct mem_zone_bm_rtree *zone;
-	struct rtree_node *node;
-	long unsigned int node_pfn;
-	int node_bit;
-};
-
-struct memory_bitmap {
-	struct list_head zones;
-	struct linked_page *p_list;
-	struct bm_position cur;
-};
-
-struct mem_extent {
-	struct list_head hook;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct nosave_region {
-	struct list_head list;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-};
-
-typedef struct {
-	long unsigned int val;
-} swp_entry_t;
-
-enum {
-	BIO_NO_PAGE_REF = 0,
-	BIO_CLONED = 1,
-	BIO_BOUNCED = 2,
-	BIO_WORKINGSET = 3,
-	BIO_QUIET = 4,
-	BIO_CHAIN = 5,
-	BIO_REFFED = 6,
-	BIO_THROTTLED = 7,
-	BIO_TRACE_COMPLETION = 8,
-	BIO_CGROUP_ACCT = 9,
-	BIO_TRACKED = 10,
-	BIO_FLAG_LAST = 11,
-};
-
-enum req_opf {
-	REQ_OP_READ = 0,
-	REQ_OP_WRITE = 1,
-	REQ_OP_FLUSH = 2,
-	REQ_OP_DISCARD = 3,
-	REQ_OP_SECURE_ERASE = 5,
-	REQ_OP_WRITE_SAME = 7,
-	REQ_OP_WRITE_ZEROES = 9,
-	REQ_OP_ZONE_OPEN = 10,
-	REQ_OP_ZONE_CLOSE = 11,
-	REQ_OP_ZONE_FINISH = 12,
-	REQ_OP_ZONE_APPEND = 13,
-	REQ_OP_ZONE_RESET = 15,
-	REQ_OP_ZONE_RESET_ALL = 17,
-	REQ_OP_SCSI_IN = 32,
-	REQ_OP_SCSI_OUT = 33,
-	REQ_OP_DRV_IN = 34,
-	REQ_OP_DRV_OUT = 35,
-	REQ_OP_LAST = 36,
-};
-
-enum req_flag_bits {
-	__REQ_FAILFAST_DEV = 8,
-	__REQ_FAILFAST_TRANSPORT = 9,
-	__REQ_FAILFAST_DRIVER = 10,
-	__REQ_SYNC = 11,
-	__REQ_META = 12,
-	__REQ_PRIO = 13,
-	__REQ_NOMERGE = 14,
-	__REQ_IDLE = 15,
-	__REQ_INTEGRITY = 16,
-	__REQ_FUA = 17,
-	__REQ_PREFLUSH = 18,
-	__REQ_RAHEAD = 19,
-	__REQ_BACKGROUND = 20,
-	__REQ_NOWAIT = 21,
-	__REQ_CGROUP_PUNT = 22,
-	__REQ_NOUNMAP = 23,
-	__REQ_HIPRI = 24,
-	__REQ_DRV = 25,
-	__REQ_SWAP = 26,
-	__REQ_NR_BITS = 27,
-};
-
-struct swap_map_page {
-	sector_t entries[8191];
-	sector_t next_swap;
-};
-
-struct swap_map_page_list {
-	struct swap_map_page *map;
-	struct swap_map_page_list *next;
-};
-
-struct swap_map_handle {
-	struct swap_map_page *cur;
-	struct swap_map_page_list *maps;
-	sector_t cur_swap;
-	sector_t first_sector;
-	unsigned int k;
-	long unsigned int reqd_free_pages;
-	u32 crc32;
-};
-
-struct swsusp_header {
-	char reserved[65500];
-	u32 crc32;
-	sector_t image;
-	unsigned int flags;
-	char orig_sig[10];
-	char sig[10];
-};
-
-struct swsusp_extent {
-	struct rb_node node;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct hib_bio_batch {
-	atomic_t count;
-	wait_queue_head_t wait;
-	blk_status_t error;
-	struct blk_plug plug;
-};
-
-struct crc_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	unsigned int run_threads;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	u32 *crc32;
-	size_t *unc_len[3];
-	unsigned char *unc[3];
-};
-
-struct cmp_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[2097152];
-	unsigned char cmp[2293760];
-	unsigned char wrk[16384];
-};
-
-struct dec_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[2097152];
-	unsigned char cmp[2293760];
-};
-
-typedef s64 compat_loff_t;
-
-struct resume_swap_area {
-	__kernel_loff_t offset;
-	__u32 dev;
-} __attribute__((packed));
-
-struct snapshot_data {
-	struct snapshot_handle handle;
-	int swap;
-	int mode;
-	bool frozen;
-	bool ready;
-	bool platform_support;
-	bool free_bitmaps;
-	dev_t dev;
-};
-
-struct compat_resume_swap_area {
-	compat_loff_t offset;
-	u32 dev;
-} __attribute__((packed));
-
-struct em_data_callback {
-	int (*active_power)(long unsigned int *, long unsigned int *, struct device *);
-};
-
-struct dev_printk_info {
-	char subsystem[16];
-	char device[48];
-};
-
-struct trace_event_raw_console {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_console {
-	u32 msg;
-};
-
-typedef void (*btf_trace_console)(void *, const char *, size_t);
-
-struct printk_info {
-	u64 seq;
-	u64 ts_nsec;
-	u16 text_len;
-	u8 facility;
-	u8 flags: 5;
-	u8 level: 3;
-	u32 caller_id;
-	struct dev_printk_info dev_info;
-};
-
-struct printk_record {
-	struct printk_info *info;
-	char *text_buf;
-	unsigned int text_buf_size;
-};
-
-struct prb_data_blk_lpos {
-	long unsigned int begin;
-	long unsigned int next;
-};
-
-struct prb_desc {
-	atomic_long_t state_var;
-	struct prb_data_blk_lpos text_blk_lpos;
-};
-
-struct prb_data_ring {
-	unsigned int size_bits;
-	char *data;
-	atomic_long_t head_lpos;
-	atomic_long_t tail_lpos;
-};
-
-struct prb_desc_ring {
-	unsigned int count_bits;
-	struct prb_desc *descs;
-	struct printk_info *infos;
-	atomic_long_t head_id;
-	atomic_long_t tail_id;
-};
-
-struct printk_ringbuffer {
-	struct prb_desc_ring desc_ring;
-	struct prb_data_ring text_data_ring;
-	atomic_long_t fail;
-};
-
-struct prb_reserved_entry {
-	struct printk_ringbuffer *rb;
-	long unsigned int irqflags;
-	long unsigned int id;
-	unsigned int text_space;
-};
-
-enum desc_state {
-	desc_miss = 4294967295,
-	desc_reserved = 0,
-	desc_committed = 1,
-	desc_finalized = 2,
-	desc_reusable = 3,
-};
-
-struct console_cmdline {
-	char name[16];
-	int index;
-	bool user_specified;
-	char *options;
-	char *brl_options;
-};
-
-enum devkmsg_log_bits {
-	__DEVKMSG_LOG_BIT_ON = 0,
-	__DEVKMSG_LOG_BIT_OFF = 1,
-	__DEVKMSG_LOG_BIT_LOCK = 2,
-};
-
-enum devkmsg_log_masks {
-	DEVKMSG_LOG_MASK_ON = 1,
-	DEVKMSG_LOG_MASK_OFF = 2,
-	DEVKMSG_LOG_MASK_LOCK = 4,
-};
-
-enum con_msg_format_flags {
-	MSG_FORMAT_DEFAULT = 0,
-	MSG_FORMAT_SYSLOG = 1,
-};
-
-enum log_flags {
-	LOG_NEWLINE = 2,
-	LOG_CONT = 8,
-};
-
-struct devkmsg_user {
-	u64 seq;
-	struct ratelimit_state rs;
-	struct mutex lock;
-	char buf[8192];
-	struct printk_info info;
-	char text_buf[8192];
-	struct printk_record record;
-};
-
-struct printk_safe_seq_buf {
-	atomic_t len;
-	atomic_t message_lost;
-	struct irq_work work;
-	unsigned char buffer[8160];
-};
-
-struct prb_data_block {
-	long unsigned int id;
-	char data[0];
-};
-
-enum {
-	IRQS_AUTODETECT = 1,
-	IRQS_SPURIOUS_DISABLED = 2,
-	IRQS_POLL_INPROGRESS = 8,
-	IRQS_ONESHOT = 32,
-	IRQS_REPLAY = 64,
-	IRQS_WAITING = 128,
-	IRQS_PENDING = 512,
-	IRQS_SUSPENDED = 2048,
-	IRQS_TIMINGS = 4096,
-	IRQS_NMI = 8192,
-};
-
-enum {
-	_IRQ_DEFAULT_INIT_FLAGS = 2048,
-	_IRQ_PER_CPU = 512,
-	_IRQ_LEVEL = 256,
-	_IRQ_NOPROBE = 1024,
-	_IRQ_NOREQUEST = 2048,
-	_IRQ_NOTHREAD = 65536,
-	_IRQ_NOAUTOEN = 4096,
-	_IRQ_MOVE_PCNTXT = 16384,
-	_IRQ_NO_BALANCING = 8192,
-	_IRQ_NESTED_THREAD = 32768,
-	_IRQ_PER_CPU_DEVID = 131072,
-	_IRQ_IS_POLLED = 262144,
-	_IRQ_DISABLE_UNLAZY = 524288,
-	_IRQ_HIDDEN = 1048576,
-	_IRQF_MODIFY_MASK = 2096911,
-};
-
 enum {
 	IRQTF_RUNTHREAD = 0,
 	IRQTF_WARNED = 1,
 	IRQTF_AFFINITY = 2,
 	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
 };
 
-enum {
-	IRQC_IS_HARDIRQ = 0,
-	IRQC_IS_NESTED = 1,
+struct io_tlb_area {
+	long unsigned int used;
+	unsigned int index;
+	spinlock_t lock;
 };
 
-enum {
-	IRQ_STARTUP_NORMAL = 0,
-	IRQ_STARTUP_MANAGED = 1,
-	IRQ_STARTUP_ABORT = 2,
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
 };
 
-struct irq_devres {
-	unsigned int irq;
-	void *dev_id;
-};
-
-struct irq_desc_devres {
-	unsigned int from;
-	unsigned int cnt;
-};
-
-enum {
-	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
-	IRQ_DOMAIN_NAME_ALLOCATED = 2,
-	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
-	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
-	IRQ_DOMAIN_FLAG_MSI = 16,
-	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
-	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
-	IRQ_DOMAIN_FLAG_NONCORE = 65536,
-};
-
-enum {
-	IRQCHIP_FWNODE_REAL = 0,
-	IRQCHIP_FWNODE_NAMED = 1,
-	IRQCHIP_FWNODE_NAMED_ID = 2,
-};
-
-struct irqchip_fwid {
-	struct fwnode_handle fwnode;
-	unsigned int type;
-	char *name;
-	phys_addr_t *pa;
-};
-
-enum {
-	AFFINITY = 0,
-	AFFINITY_LIST = 1,
-	EFFECTIVE = 2,
-	EFFECTIVE_LIST = 3,
-};
-
-struct msi_alloc_info {
-	struct msi_desc *desc;
-	irq_hw_number_t hwirq;
-	union {
-		long unsigned int ul;
-		void *ptr;
-	} scratchpad[2];
-};
-
-typedef struct msi_alloc_info msi_alloc_info_t;
-
-struct msi_domain_info;
-
-struct msi_domain_ops {
-	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
-	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
-	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
-	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
-	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
-	void (*msi_finish)(msi_alloc_info_t *, int);
-	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
-	int (*handle_error)(struct irq_domain *, struct msi_desc *, int);
-	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
-	void (*domain_free_irqs)(struct irq_domain *, struct device *);
-};
-
-struct msi_domain_info {
-	u32 flags;
-	struct msi_domain_ops *ops;
-	struct irq_chip *chip;
-	void *chip_data;
-	irq_flow_handler_t handler;
-	void *handler_data;
-	const char *handler_name;
-	void *data;
-};
-
-enum {
-	MSI_FLAG_USE_DEF_DOM_OPS = 1,
-	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
-	MSI_FLAG_MULTI_PCI_MSI = 4,
-	MSI_FLAG_PCI_MSIX = 8,
-	MSI_FLAG_ACTIVATE_EARLY = 16,
-	MSI_FLAG_MUST_REACTIVATE = 32,
-	MSI_FLAG_LEVEL_CAPABLE = 64,
-};
-
-struct irq_affinity {
-	unsigned int pre_vectors;
-	unsigned int post_vectors;
-	unsigned int nr_sets;
-	unsigned int set_size[4];
-	void (*calc_sets)(struct irq_affinity *, unsigned int);
-	void *priv;
-};
-
-struct node_vectors {
-	unsigned int id;
-	union {
-		unsigned int nvectors;
-		unsigned int ncpus;
-	};
-};
-
-typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
-
-struct rcu_synchronize {
-	struct callback_head head;
-	struct completion completion;
-};
-
-struct trace_event_raw_rcu_utilization {
-	struct trace_entry ent;
-	const char *s;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rcu_utilization {};
-
-typedef void (*btf_trace_rcu_utilization)(void *, const char *);
-
-struct rcu_tasks;
-
-typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
-
-typedef void (*pregp_func_t)();
-
-typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
-
-typedef void (*postscan_func_t)(struct list_head *);
-
-typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
-
-typedef void (*postgp_func_t)(struct rcu_tasks *);
-
-struct rcu_tasks {
-	struct callback_head *cbs_head;
-	struct callback_head **cbs_tail;
-	struct wait_queue_head cbs_wq;
-	raw_spinlock_t cbs_lock;
-	int gp_state;
-	int gp_sleep;
-	int init_fract;
-	long unsigned int gp_jiffies;
-	long unsigned int gp_start;
-	long unsigned int n_gps;
-	long unsigned int n_ipis;
-	long unsigned int n_ipis_fails;
-	struct task_struct *kthread_ptr;
-	rcu_tasks_gp_func_t gp_func;
-	pregp_func_t pregp_func;
-	pertask_func_t pertask_func;
-	postscan_func_t postscan_func;
-	holdouts_func_t holdouts_func;
-	postgp_func_t postgp_func;
-	call_rcu_func_t call_func;
-	char *name;
-	char *kname;
-};
-
-enum {
-	GP_IDLE = 0,
-	GP_ENTER = 1,
-	GP_PASSED = 2,
-	GP_EXIT = 3,
-	GP_REPLAY = 4,
-};
-
-struct rcu_cblist {
-	struct callback_head *head;
-	struct callback_head **tail;
-	long int len;
-};
-
-enum rcutorture_type {
-	RCU_FLAVOR = 0,
-	RCU_TASKS_FLAVOR = 1,
-	RCU_TASKS_RUDE_FLAVOR = 2,
-	RCU_TASKS_TRACING_FLAVOR = 3,
-	RCU_TRIVIAL_FLAVOR = 4,
-	SRCU_FLAVOR = 5,
-	INVALID_RCU_FLAVOR = 6,
-};
-
-enum tick_dep_bits {
-	TICK_DEP_BIT_POSIX_TIMER = 0,
-	TICK_DEP_BIT_PERF_EVENTS = 1,
-	TICK_DEP_BIT_SCHED = 2,
-	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
-	TICK_DEP_BIT_RCU = 4,
-	TICK_DEP_BIT_RCU_EXP = 5,
-};
-
-struct rcu_exp_work {
-	long unsigned int rew_s;
-	struct work_struct rew_work;
-};
-
-struct rcu_node {
-	raw_spinlock_t lock;
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	long unsigned int completedqs;
-	long unsigned int qsmask;
-	long unsigned int rcu_gp_init_mask;
-	long unsigned int qsmaskinit;
-	long unsigned int qsmaskinitnext;
-	long unsigned int expmask;
-	long unsigned int expmaskinit;
-	long unsigned int expmaskinitnext;
-	long unsigned int cbovldmask;
-	long unsigned int ffmask;
-	long unsigned int grpmask;
-	int grplo;
-	int grphi;
-	u8 grpnum;
-	u8 level;
-	bool wait_blkd_tasks;
-	struct rcu_node *parent;
-	struct list_head blkd_tasks;
-	struct list_head *gp_tasks;
-	struct list_head *exp_tasks;
-	struct list_head *boost_tasks;
-	struct rt_mutex boost_mtx;
-	long unsigned int boost_time;
-	struct task_struct *boost_kthread_task;
-	unsigned int boost_kthread_status;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	raw_spinlock_t fqslock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t exp_lock;
-	long unsigned int exp_seq_rq;
-	wait_queue_head_t exp_wq[4];
-	struct rcu_exp_work rew;
-	bool exp_need_flush;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-union rcu_noqs {
-	struct {
-		u8 norm;
-		u8 exp;
-	} b;
-	u16 s;
-};
-
-struct rcu_data {
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	union rcu_noqs cpu_no_qs;
-	bool core_needs_qs;
-	bool beenonline;
-	bool gpwrap;
-	bool exp_deferred_qs;
-	bool cpu_started;
-	struct rcu_node *mynode;
-	long unsigned int grpmask;
-	long unsigned int ticks_this_gp;
-	struct irq_work defer_qs_iw;
-	bool defer_qs_iw_pending;
-	struct work_struct strict_work;
-	struct rcu_segcblist cblist;
-	long int qlen_last_fqs_check;
-	long unsigned int n_cbs_invoked;
-	long unsigned int n_force_qs_snap;
-	long int blimit;
-	int dynticks_snap;
-	long int dynticks_nesting;
-	long int dynticks_nmi_nesting;
-	atomic_t dynticks;
-	bool rcu_need_heavy_qs;
-	bool rcu_urgent_qs;
-	bool rcu_forced_tick;
-	bool rcu_forced_tick_exp;
-	struct callback_head barrier_head;
-	int exp_dynticks_snap;
-	struct task_struct *rcu_cpu_kthread_task;
-	unsigned int rcu_cpu_kthread_status;
-	char rcu_cpu_has_work;
-	unsigned int softirq_snap;
-	struct irq_work rcu_iw;
-	bool rcu_iw_pending;
-	long unsigned int rcu_iw_gp_seq;
-	long unsigned int rcu_ofl_gp_seq;
-	short int rcu_ofl_gp_flags;
-	long unsigned int rcu_onl_gp_seq;
-	short int rcu_onl_gp_flags;
-	long unsigned int last_fqs_resched;
-	int cpu;
-};
-
-struct rcu_state {
-	struct rcu_node node[131];
-	struct rcu_node *level[4];
-	int ncpus;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u8 boost;
-	long unsigned int gp_seq;
-	long unsigned int gp_max;
-	struct task_struct *gp_kthread;
-	struct swait_queue_head gp_wq;
-	short int gp_flags;
-	short int gp_state;
-	long unsigned int gp_wake_time;
-	long unsigned int gp_wake_seq;
-	struct mutex barrier_mutex;
-	atomic_t barrier_cpu_count;
-	struct completion barrier_completion;
-	long unsigned int barrier_sequence;
-	struct mutex exp_mutex;
-	struct mutex exp_wake_mutex;
-	long unsigned int expedited_sequence;
-	atomic_t expedited_need_qs;
-	struct swait_queue_head expedited_wq;
-	int ncpus_snap;
-	u8 cbovld;
-	u8 cbovldnext;
-	long unsigned int jiffies_force_qs;
-	long unsigned int jiffies_kick_kthreads;
-	long unsigned int n_force_qs;
-	long unsigned int gp_start;
-	long unsigned int gp_end;
-	long unsigned int gp_activity;
-	long unsigned int gp_req_activity;
-	long unsigned int jiffies_stall;
-	long unsigned int jiffies_resched;
-	long unsigned int n_force_qs_gpstart;
-	const char *name;
-	char abbr;
-	long: 56;
-	long: 64;
-	long: 64;
-	raw_spinlock_t ofl_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kvfree_rcu_bulk_data {
-	long unsigned int nr_records;
-	struct kvfree_rcu_bulk_data *next;
-	void *records[0];
-};
-
-struct kfree_rcu_cpu;
-
-struct kfree_rcu_cpu_work {
-	struct rcu_work rcu_work;
-	struct callback_head *head_free;
-	struct kvfree_rcu_bulk_data *bkvhead_free[2];
-	struct kfree_rcu_cpu *krcp;
-};
-
-struct kfree_rcu_cpu {
-	struct callback_head *head;
-	struct kvfree_rcu_bulk_data *bkvhead[2];
-	struct kfree_rcu_cpu_work krw_arr[2];
-	raw_spinlock_t lock;
-	struct delayed_work monitor_work;
-	bool monitor_todo;
-	bool initialized;
-	int count;
-	struct work_struct page_cache_work;
-	atomic_t work_in_progress;
-	struct hrtimer hrtimer;
-	struct llist_head bkvcache;
-	int nr_bkv_objs;
-};
-
-enum dma_sync_target {
-	SYNC_FOR_CPU = 0,
-	SYNC_FOR_DEVICE = 1,
-};
-
-struct dma_devres {
-	size_t size;
-	void *vaddr;
-	dma_addr_t dma_handle;
-	long unsigned int attrs;
-};
-
-struct dma_coherent_mem {
-	void *virt_base;
-	dma_addr_t device_base;
-	long unsigned int pfn_base;
-	int size;
-	long unsigned int *bitmap;
-	spinlock_t spinlock;
-	bool use_dev_dma_pfn_offset;
-};
-
-enum {
-	MEMREMAP_WB = 1,
-	MEMREMAP_WT = 2,
-	MEMREMAP_WC = 4,
-	MEMREMAP_ENC = 8,
-	MEMREMAP_DEC = 16,
-};
-
-struct reserved_mem_ops;
-
-struct reserved_mem {
-	const char *name;
-	long unsigned int fdt_node;
-	long unsigned int phandle;
-	const struct reserved_mem_ops *ops;
-	phys_addr_t base;
-	phys_addr_t size;
-	void *priv;
-};
-
-struct reserved_mem_ops {
-	int (*device_init)(struct reserved_mem *, struct device *);
-	void (*device_release)(struct reserved_mem *, struct device *);
-};
-
-typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
-
 struct trace_event_raw_swiotlb_bounced {
 	struct trace_entry ent;
 	u32 __data_loc_dev_name;
 	u64 dma_mask;
 	dma_addr_t dev_addr;
 	size_t size;
-	enum swiotlb_force swiotlb_force;
+	bool force;
 	char __data[0];
 };
 
@@ -35245,87 +50471,9 @@
 	u32 dev_name;
 };
 
-typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
 
-enum kcmp_type {
-	KCMP_FILE = 0,
-	KCMP_VM = 1,
-	KCMP_FILES = 2,
-	KCMP_FS = 3,
-	KCMP_SIGHAND = 4,
-	KCMP_IO = 5,
-	KCMP_SYSVSEM = 6,
-	KCMP_EPOLL_TFD = 7,
-	KCMP_TYPES = 8,
-};
-
-struct kcmp_epoll_slot {
-	__u32 efd;
-	__u32 tfd;
-	__u32 toff;
-};
-
-enum profile_type {
-	PROFILE_TASK_EXIT = 0,
-	PROFILE_MUNMAP = 1,
-};
-
-struct profile_hit {
-	u32 pc;
-	u32 hits;
-};
-
-typedef __kernel_long_t __kernel_suseconds_t;
-
-typedef __kernel_long_t __kernel_old_time_t;
-
-typedef __kernel_suseconds_t suseconds_t;
-
-typedef __u64 timeu64_t;
-
-struct __kernel_itimerspec {
-	struct __kernel_timespec it_interval;
-	struct __kernel_timespec it_value;
-};
-
-struct itimerspec64 {
-	struct timespec64 it_interval;
-	struct timespec64 it_value;
-};
-
-struct old_itimerspec32 {
-	struct old_timespec32 it_interval;
-	struct old_timespec32 it_value;
-};
-
-struct old_timex32 {
-	u32 modes;
-	s32 offset;
-	s32 freq;
-	s32 maxerror;
-	s32 esterror;
-	s32 status;
-	s32 constant;
-	s32 precision;
-	s32 tolerance;
-	struct old_timeval32 time;
-	s32 tick;
-	s32 ppsfreq;
-	s32 jitter;
-	s32 shift;
-	s32 stabil;
-	s32 jitcnt;
-	s32 calcnt;
-	s32 errcnt;
-	s32 stbcnt;
-	s32 tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
+typedef __kernel_timer_t timer_t;
 
 struct __kernel_timex_timeval {
 	__kernel_time64_t tv_sec;
@@ -35353,7 +50501,6 @@
 	long long int errcnt;
 	long long int stbcnt;
 	int tai;
-	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -35361,299 +50508,11 @@
 	long: 64;
 };
 
-struct trace_event_raw_timer_class {
-	struct trace_entry ent;
-	void *timer;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_start {
-	struct trace_entry ent;
-	void *timer;
-	void *function;
-	long unsigned int expires;
-	long unsigned int now;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_expire_entry {
-	struct trace_entry ent;
-	void *timer;
-	long unsigned int now;
-	void *function;
-	long unsigned int baseclk;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_init {
-	struct trace_entry ent;
-	void *hrtimer;
-	clockid_t clockid;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_start {
-	struct trace_entry ent;
-	void *hrtimer;
-	void *function;
-	s64 expires;
-	s64 softexpires;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_expire_entry {
-	struct trace_entry ent;
-	void *hrtimer;
-	s64 now;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_class {
-	struct trace_entry ent;
-	void *hrtimer;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_state {
-	struct trace_entry ent;
-	int which;
-	long long unsigned int expires;
-	long int value_sec;
-	long int value_nsec;
-	long int interval_sec;
-	long int interval_nsec;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_expire {
-	struct trace_entry ent;
-	int which;
-	pid_t pid;
-	long long unsigned int now;
-	char __data[0];
-};
-
-struct trace_event_raw_tick_stop {
-	struct trace_entry ent;
-	int success;
-	int dependency;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_timer_class {};
-
-struct trace_event_data_offsets_timer_start {};
-
-struct trace_event_data_offsets_timer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_init {};
-
-struct trace_event_data_offsets_hrtimer_start {};
-
-struct trace_event_data_offsets_hrtimer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_class {};
-
-struct trace_event_data_offsets_itimer_state {};
-
-struct trace_event_data_offsets_itimer_expire {};
-
-struct trace_event_data_offsets_tick_stop {};
-
-typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
-
-typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
-
-typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
-
-typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
-
-typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
-
-typedef void (*btf_trace_tick_stop)(void *, int, int);
-
-struct timer_base {
-	raw_spinlock_t lock;
-	struct timer_list *running_timer;
-	long unsigned int clk;
-	long unsigned int next_expiry;
-	unsigned int cpu;
-	bool next_expiry_recalc;
-	bool is_idle;
-	long unsigned int pending_map[9];
-	struct hlist_head vectors[576];
-	long: 64;
-	long: 64;
-};
-
-struct process_timer {
-	struct timer_list timer;
-	struct task_struct *task;
-};
-
-enum tick_device_mode {
-	TICKDEV_MODE_PERIODIC = 0,
-	TICKDEV_MODE_ONESHOT = 1,
-};
-
-struct tick_device {
-	struct clock_event_device *evtdev;
-	enum tick_device_mode mode;
-};
-
-struct ktime_timestamps {
-	u64 mono;
-	u64 boot;
-	u64 real;
-};
-
-struct system_time_snapshot {
-	u64 cycles;
-	ktime_t real;
-	ktime_t raw;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-};
-
-struct system_device_crosststamp {
-	ktime_t device;
-	ktime_t sys_realtime;
-	ktime_t sys_monoraw;
-};
-
-struct system_counterval_t {
-	u64 cycles;
-	struct clocksource *cs;
-};
-
-typedef struct {
-	seqcount_t seqcount;
-} seqcount_latch_t;
-
-struct audit_ntp_val {
-	long long int oldval;
-	long long int newval;
-};
-
-struct audit_ntp_data {
-	struct audit_ntp_val vals[6];
-};
-
-enum timekeeping_adv_mode {
-	TK_ADV_TICK = 0,
-	TK_ADV_FREQ = 1,
-};
-
-struct tk_fast {
-	seqcount_latch_t seq;
-	struct tk_read_base base[2];
-};
-
-enum tick_nohz_mode {
-	NOHZ_MODE_INACTIVE = 0,
-	NOHZ_MODE_LOWRES = 1,
-	NOHZ_MODE_HIGHRES = 2,
-};
-
-struct tick_sched {
-	struct hrtimer sched_timer;
-	long unsigned int check_clocks;
-	enum tick_nohz_mode nohz_mode;
-	unsigned int inidle: 1;
-	unsigned int tick_stopped: 1;
-	unsigned int idle_active: 1;
-	unsigned int do_timer_last: 1;
-	unsigned int got_idle_tick: 1;
-	ktime_t last_tick;
-	ktime_t next_tick;
-	long unsigned int idle_jiffies;
-	long unsigned int idle_calls;
-	long unsigned int idle_sleeps;
-	ktime_t idle_entrytime;
-	ktime_t idle_waketime;
-	ktime_t idle_exittime;
-	ktime_t idle_sleeptime;
-	ktime_t iowait_sleeptime;
-	long unsigned int last_jiffies;
-	u64 timer_expires;
-	u64 timer_expires_base;
-	u64 next_timer;
-	ktime_t idle_expires;
-	atomic_t tick_dep_mask;
-};
-
-struct timer_list_iter {
-	int cpu;
-	bool second_pass;
-	u64 now;
-};
-
-struct tm {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	long int tm_year;
-	int tm_wday;
-	int tm_yday;
-};
-
-struct cyclecounter {
-	u64 (*read)(const struct cyclecounter *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-};
-
-struct timecounter {
-	const struct cyclecounter *cc;
-	u64 cycle_last;
-	u64 nsec;
-	u64 mask;
-	u64 frac;
-};
-
-typedef __kernel_timer_t timer_t;
-
-enum alarmtimer_type {
-	ALARM_REALTIME = 0,
-	ALARM_BOOTTIME = 1,
-	ALARM_NUMTYPE = 2,
-	ALARM_REALTIME_FREEZER = 3,
-	ALARM_BOOTTIME_FREEZER = 4,
-};
-
-enum alarmtimer_restart {
-	ALARMTIMER_NORESTART = 0,
-	ALARMTIMER_RESTART = 1,
-};
-
-struct alarm {
-	struct timerqueue_node node;
-	struct hrtimer timer;
-	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
-	enum alarmtimer_type type;
-	int state;
-	void *data;
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
 };
 
 struct cpu_timer {
@@ -35723,53 +50582,18 @@
 	void (*remove_dev)(struct device *, struct class_interface *);
 };
 
-struct rtc_device;
-
-struct rtc_timer {
-	struct timerqueue_node node;
-	ktime_t period;
-	void (*func)(struct rtc_device *);
-	struct rtc_device *rtc;
-	int enabled;
-};
-
-struct rtc_device {
-	struct device dev;
-	struct module *owner;
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
 	int id;
-	const struct rtc_class_ops *ops;
-	struct mutex ops_lock;
-	struct cdev char_dev;
-	long unsigned int flags;
-	long unsigned int irq_data;
-	spinlock_t irq_lock;
-	wait_queue_head_t irq_queue;
-	struct fasync_struct *async_queue;
-	int irq_freq;
-	int max_user_freq;
-	struct timerqueue_head timerqueue;
-	struct rtc_timer aie_timer;
-	struct rtc_timer uie_rtctimer;
-	struct hrtimer pie_timer;
-	int pie_enabled;
-	struct work_struct irqwork;
-	int uie_unsupported;
-	long int set_offset_nsec;
-	bool registered;
-	bool nvram_old_abi;
-	struct bin_attribute *nvram;
-	time64_t range_min;
-	timeu64_t range_max;
-	time64_t start_secs;
-	time64_t offset_secs;
-	bool set_start_time;
-	struct work_struct uie_task;
-	struct timer_list uie_timer;
-	unsigned int oldsecs;
-	unsigned int uie_irq_active: 1;
-	unsigned int stop_uie_polling: 1;
-	unsigned int uie_task_active: 1;
-	unsigned int uie_timer_active: 1;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
 };
 
 struct trace_event_raw_alarmtimer_suspend {
@@ -35808,888 +50632,11 @@
 	clockid_t base_clockid;
 };
 
-struct sigevent {
-	sigval_t sigev_value;
-	int sigev_signo;
-	int sigev_notify;
-	union {
-		int _pad[12];
-		int _tid;
-		struct {
-			void (*_function)(sigval_t);
-			void *_attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef struct sigevent sigevent_t;
-
-struct compat_sigevent {
-	compat_sigval_t sigev_value;
-	compat_int_t sigev_signo;
-	compat_int_t sigev_notify;
-	union {
-		compat_int_t _pad[13];
-		compat_int_t _tid;
-		struct {
-			compat_uptr_t _function;
-			compat_uptr_t _attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef unsigned int uint;
-
-struct posix_clock;
-
-struct posix_clock_operations {
-	struct module *owner;
-	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
-	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
-	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
-	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
-	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
-	int (*open)(struct posix_clock *, fmode_t);
-	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
-	int (*release)(struct posix_clock *);
-	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
-};
-
-struct posix_clock {
-	struct posix_clock_operations ops;
-	struct cdev cdev;
-	struct device *dev;
-	struct rw_semaphore rwsem;
-	bool zombie;
-};
-
-struct posix_clock_desc {
-	struct file *fp;
-	struct posix_clock *clk;
-};
-
-struct __kernel_old_itimerval {
-	struct __kernel_old_timeval it_interval;
-	struct __kernel_old_timeval it_value;
-};
-
-struct old_itimerval32 {
-	struct old_timeval32 it_interval;
-	struct old_timeval32 it_value;
-};
-
-struct ce_unbind {
-	struct clock_event_device *ce;
-	int res;
-};
-
-enum tick_broadcast_state {
-	TICK_BROADCAST_EXIT = 0,
-	TICK_BROADCAST_ENTER = 1,
-};
-
-enum tick_broadcast_mode {
-	TICK_BROADCAST_OFF = 0,
-	TICK_BROADCAST_ON = 1,
-	TICK_BROADCAST_FORCE = 2,
-};
-
-union futex_key {
-	struct {
-		u64 i_seq;
-		long unsigned int pgoff;
-		unsigned int offset;
-	} shared;
-	struct {
-		union {
-			struct mm_struct *mm;
-			u64 __tmp;
-		};
-		long unsigned int address;
-		unsigned int offset;
-	} private;
-	struct {
-		u64 ptr;
-		long unsigned int word;
-		unsigned int offset;
-	} both;
-};
-
-struct futex_pi_state {
-	struct list_head list;
-	struct rt_mutex pi_mutex;
-	struct task_struct *owner;
-	refcount_t refcount;
-	union futex_key key;
-};
-
-struct futex_q {
-	struct plist_node list;
-	struct task_struct *task;
-	spinlock_t *lock_ptr;
-	union futex_key key;
-	struct futex_pi_state *pi_state;
-	struct rt_mutex_waiter *rt_waiter;
-	union futex_key *requeue_pi_key;
-	u32 bitset;
-};
-
-struct futex_hash_bucket {
-	atomic_t waiters;
-	spinlock_t lock;
-	struct plist_head chain;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum futex_access {
-	FUTEX_READ = 0,
-	FUTEX_WRITE = 1,
-};
-
-struct dma_chan {
+struct dma_chan___2 {
 	int lock;
 	const char *device_id;
 };
 
-typedef bool (*smp_cond_func_t)(int, void *);
-
-struct call_function_data {
-	call_single_data_t *csd;
-	cpumask_var_t cpumask;
-	cpumask_var_t cpumask_ipi;
-};
-
-struct smp_call_on_cpu_struct {
-	struct work_struct work;
-	struct completion done;
-	int (*func)(void *);
-	void *data;
-	int ret;
-	int cpu;
-};
-
-struct latch_tree_root {
-	seqcount_latch_t seq;
-	struct rb_root tree[2];
-};
-
-struct latch_tree_ops {
-	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
-	int (*comp)(void *, struct latch_tree_node *);
-};
-
-struct module_use {
-	struct list_head source_list;
-	struct list_head target_list;
-	struct module *source;
-	struct module *target;
-};
-
-struct module_sect_attr {
-	struct bin_attribute battr;
-	long unsigned int address;
-};
-
-struct module_sect_attrs {
-	struct attribute_group grp;
-	unsigned int nsections;
-	struct module_sect_attr attrs[0];
-};
-
-struct module_notes_attrs {
-	struct kobject *dir;
-	unsigned int notes;
-	struct bin_attribute attrs[0];
-};
-
-enum mod_license {
-	NOT_GPL_ONLY = 0,
-	GPL_ONLY = 1,
-	WILL_BE_GPL_ONLY = 2,
-};
-
-struct symsearch {
-	const struct kernel_symbol *start;
-	const struct kernel_symbol *stop;
-	const s32 *crcs;
-	enum mod_license license;
-	bool unused;
-};
-
-enum kernel_read_file_id {
-	READING_UNKNOWN = 0,
-	READING_FIRMWARE = 1,
-	READING_MODULE = 2,
-	READING_KEXEC_IMAGE = 3,
-	READING_KEXEC_INITRAMFS = 4,
-	READING_POLICY = 5,
-	READING_X509_CERTIFICATE = 6,
-	READING_MAX_ID = 7,
-};
-
-enum kernel_load_data_id {
-	LOADING_UNKNOWN = 0,
-	LOADING_FIRMWARE = 1,
-	LOADING_MODULE = 2,
-	LOADING_KEXEC_IMAGE = 3,
-	LOADING_KEXEC_INITRAMFS = 4,
-	LOADING_POLICY = 5,
-	LOADING_X509_CERTIFICATE = 6,
-	LOADING_MAX_ID = 7,
-};
-
-enum {
-	PROC_ENTRY_PERMANENT = 1,
-};
-
-struct _ddebug {
-	const char *modname;
-	const char *function;
-	const char *filename;
-	const char *format;
-	unsigned int lineno: 18;
-	unsigned int flags: 8;
-	union {
-		struct static_key_true dd_key_true;
-		struct static_key_false dd_key_false;
-	} key;
-};
-
-struct load_info {
-	const char *name;
-	struct module *mod;
-	Elf64_Ehdr *hdr;
-	long unsigned int len;
-	Elf64_Shdr *sechdrs;
-	char *secstrings;
-	char *strtab;
-	long unsigned int symoffs;
-	long unsigned int stroffs;
-	long unsigned int init_typeoffs;
-	long unsigned int core_typeoffs;
-	struct _ddebug *debug;
-	unsigned int num_debug;
-	bool sig_ok;
-	long unsigned int mod_kallsyms_init_off;
-	struct {
-		unsigned int sym;
-		unsigned int str;
-		unsigned int mod;
-		unsigned int vers;
-		unsigned int info;
-		unsigned int pcpu;
-	} index;
-};
-
-struct trace_event_raw_module_load {
-	struct trace_entry ent;
-	unsigned int taints;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_free {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_refcnt {
-	struct trace_entry ent;
-	long unsigned int ip;
-	int refcnt;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_request {
-	struct trace_entry ent;
-	long unsigned int ip;
-	bool wait;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_module_load {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_free {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_refcnt {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_module_load)(void *, struct module *);
-
-typedef void (*btf_trace_module_free)(void *, struct module *);
-
-typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
-
-struct mod_tree_root {
-	struct latch_tree_root root;
-	long unsigned int addr_min;
-	long unsigned int addr_max;
-};
-
-struct find_symbol_arg {
-	const char *name;
-	bool gplok;
-	bool warn;
-	struct module *owner;
-	const s32 *crc;
-	const struct kernel_symbol *sym;
-	enum mod_license license;
-};
-
-struct mod_initfree {
-	struct llist_node node;
-	void *module_init;
-};
-
-struct module_signature {
-	u8 algo;
-	u8 hash;
-	u8 id_type;
-	u8 signer_len;
-	u8 key_id_len;
-	u8 __pad[3];
-	__be32 sig_len;
-};
-
-enum key_being_used_for {
-	VERIFYING_MODULE_SIGNATURE = 0,
-	VERIFYING_FIRMWARE_SIGNATURE = 1,
-	VERIFYING_KEXEC_PE_SIGNATURE = 2,
-	VERIFYING_KEY_SIGNATURE = 3,
-	VERIFYING_KEY_SELF_SIGNATURE = 4,
-	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
-	NR__KEY_BEING_USED_FOR = 6,
-};
-
-enum pkey_id_type {
-	PKEY_ID_PGP = 0,
-	PKEY_ID_X509 = 1,
-	PKEY_ID_PKCS7 = 2,
-};
-
-struct kallsym_iter {
-	loff_t pos;
-	loff_t pos_arch_end;
-	loff_t pos_mod_end;
-	loff_t pos_ftrace_mod_end;
-	loff_t pos_bpf_end;
-	long unsigned int value;
-	unsigned int nameoff;
-	char type;
-	char name[128];
-	char module_name[56];
-	int exported;
-	int show_value;
-};
-
-typedef struct {
-	int val[2];
-} __kernel_fsid_t;
-
-struct kstatfs {
-	long int f_type;
-	long int f_bsize;
-	u64 f_blocks;
-	u64 f_bfree;
-	u64 f_bavail;
-	u64 f_files;
-	u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	long int f_namelen;
-	long int f_frsize;
-	long int f_flags;
-	long int f_spare[4];
-};
-
-typedef __u16 comp_t;
-
-struct acct_v3 {
-	char ac_flag;
-	char ac_version;
-	__u16 ac_tty;
-	__u32 ac_exitcode;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u32 ac_etime;
-	comp_t ac_utime;
-	comp_t ac_stime;
-	comp_t ac_mem;
-	comp_t ac_io;
-	comp_t ac_rw;
-	comp_t ac_minflt;
-	comp_t ac_majflt;
-	comp_t ac_swaps;
-	char ac_comm[16];
-};
-
-typedef struct acct_v3 acct_t;
-
-struct fs_pin {
-	wait_queue_head_t wait;
-	int done;
-	struct hlist_node s_list;
-	struct hlist_node m_list;
-	void (*kill)(struct fs_pin *);
-};
-
-struct bsd_acct_struct {
-	struct fs_pin pin;
-	atomic_long_t count;
-	struct callback_head rcu;
-	struct mutex lock;
-	int active;
-	long unsigned int needcheck;
-	struct file *file;
-	struct pid_namespace *ns;
-	struct work_struct work;
-	struct completion done;
-};
-
-struct elf64_note {
-	Elf64_Word n_namesz;
-	Elf64_Word n_descsz;
-	Elf64_Word n_type;
-};
-
-struct elf_note_section {
-	struct elf64_note n_hdr;
-	u8 n_data[0];
-};
-
-struct elf_siginfo {
-	int si_signo;
-	int si_code;
-	int si_errno;
-};
-
-struct elf_prstatus {
-	struct elf_siginfo pr_info;
-	short int pr_cursig;
-	long unsigned int pr_sigpend;
-	long unsigned int pr_sighold;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	struct __kernel_old_timeval pr_utime;
-	struct __kernel_old_timeval pr_stime;
-	struct __kernel_old_timeval pr_cutime;
-	struct __kernel_old_timeval pr_cstime;
-	elf_gregset_t pr_reg;
-	int pr_fpvalid;
-};
-
-typedef u32 note_buf_t[134];
-
-struct compat_kexec_segment {
-	compat_uptr_t buf;
-	compat_size_t bufsz;
-	compat_ulong_t mem;
-	compat_size_t memsz;
-};
-
-struct crypto_alg;
-
-struct crypto_tfm {
-	u32 crt_flags;
-	int node;
-	void (*exit)(struct crypto_tfm *);
-	struct crypto_alg *__crt_alg;
-	void *__crt_ctx[0];
-};
-
-struct cipher_alg {
-	unsigned int cia_min_keysize;
-	unsigned int cia_max_keysize;
-	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_alg {
-	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_type;
-
-struct crypto_alg {
-	struct list_head cra_list;
-	struct list_head cra_users;
-	u32 cra_flags;
-	unsigned int cra_blocksize;
-	unsigned int cra_ctxsize;
-	unsigned int cra_alignmask;
-	int cra_priority;
-	refcount_t cra_refcnt;
-	char cra_name[128];
-	char cra_driver_name[128];
-	const struct crypto_type *cra_type;
-	union {
-		struct cipher_alg cipher;
-		struct compress_alg compress;
-	} cra_u;
-	int (*cra_init)(struct crypto_tfm *);
-	void (*cra_exit)(struct crypto_tfm *);
-	void (*cra_destroy)(struct crypto_alg *);
-	struct module *cra_module;
-};
-
-struct crypto_instance;
-
-struct crypto_type {
-	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
-	unsigned int (*extsize)(struct crypto_alg *);
-	int (*init)(struct crypto_tfm *, u32, u32);
-	int (*init_tfm)(struct crypto_tfm *);
-	void (*show)(struct seq_file *, struct crypto_alg *);
-	int (*report)(struct sk_buff *, struct crypto_alg *);
-	void (*free)(struct crypto_instance *);
-	unsigned int type;
-	unsigned int maskclear;
-	unsigned int maskset;
-	unsigned int tfmsize;
-};
-
-struct crypto_shash;
-
-struct shash_desc {
-	struct crypto_shash *tfm;
-	void *__ctx[0];
-};
-
-struct crypto_shash {
-	unsigned int descsize;
-	struct crypto_tfm base;
-};
-
-struct shash_alg {
-	int (*init)(struct shash_desc *);
-	int (*update)(struct shash_desc *, const u8 *, unsigned int);
-	int (*final)(struct shash_desc *, u8 *);
-	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*export)(struct shash_desc *, void *);
-	int (*import)(struct shash_desc *, const void *);
-	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_shash *);
-	void (*exit_tfm)(struct crypto_shash *);
-	unsigned int descsize;
-	int: 32;
-	unsigned int digestsize;
-	unsigned int statesize;
-	struct crypto_alg base;
-};
-
-struct kexec_sha_region {
-	long unsigned int start;
-	long unsigned int len;
-};
-
-typedef __kernel_ulong_t __kernel_ino_t;
-
-typedef __kernel_ino_t ino_t;
-
-enum kernfs_node_type {
-	KERNFS_DIR = 1,
-	KERNFS_FILE = 2,
-	KERNFS_LINK = 4,
-};
-
-enum kernfs_root_flag {
-	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
-	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
-	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
-	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
-};
-
-struct kernfs_fs_context {
-	struct kernfs_root *root;
-	void *ns_tag;
-	long unsigned int magic;
-	bool new_sb_created;
-};
-
-enum bpf_link_type {
-	BPF_LINK_TYPE_UNSPEC = 0,
-	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
-	BPF_LINK_TYPE_TRACING = 2,
-	BPF_LINK_TYPE_CGROUP = 3,
-	BPF_LINK_TYPE_ITER = 4,
-	BPF_LINK_TYPE_NETNS = 5,
-	BPF_LINK_TYPE_XDP = 6,
-	MAX_BPF_LINK_TYPE = 7,
-};
-
-struct bpf_link_info {
-	__u32 type;
-	__u32 id;
-	__u32 prog_id;
-	union {
-		struct {
-			__u64 tp_name;
-			__u32 tp_name_len;
-		} raw_tracepoint;
-		struct {
-			__u32 attach_type;
-		} tracing;
-		struct {
-			__u64 cgroup_id;
-			__u32 attach_type;
-		} cgroup;
-		struct {
-			__u64 target_name;
-			__u32 target_name_len;
-			union {
-				struct {
-					__u32 map_id;
-				} map;
-			};
-		} iter;
-		struct {
-			__u32 netns_ino;
-			__u32 attach_type;
-		} netns;
-		struct {
-			__u32 ifindex;
-		} xdp;
-	};
-};
-
-struct bpf_link_ops;
-
-struct bpf_link {
-	atomic64_t refcnt;
-	u32 id;
-	enum bpf_link_type type;
-	const struct bpf_link_ops *ops;
-	struct bpf_prog *prog;
-	struct work_struct work;
-};
-
-struct bpf_link_ops {
-	void (*release)(struct bpf_link *);
-	void (*dealloc)(struct bpf_link *);
-	int (*detach)(struct bpf_link *);
-	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
-	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
-	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
-};
-
-struct bpf_cgroup_link {
-	struct bpf_link link;
-	struct cgroup *cgroup;
-	enum bpf_attach_type type;
-};
-
-enum {
-	CGRP_NOTIFY_ON_RELEASE = 0,
-	CGRP_CPUSET_CLONE_CHILDREN = 1,
-	CGRP_FREEZE = 2,
-	CGRP_FROZEN = 3,
-};
-
-enum {
-	CGRP_ROOT_NOPREFIX = 2,
-	CGRP_ROOT_XATTR = 4,
-	CGRP_ROOT_NS_DELEGATE = 8,
-	CGRP_ROOT_CPUSET_V2_MODE = 16,
-	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 32,
-	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 64,
-};
-
-struct cgroup_taskset {
-	struct list_head src_csets;
-	struct list_head dst_csets;
-	int nr_tasks;
-	int ssid;
-	struct list_head *csets;
-	struct css_set *cur_cset;
-	struct task_struct *cur_task;
-};
-
-struct cgroup_fs_context {
-	struct kernfs_fs_context kfc;
-	struct cgroup_root *root;
-	struct cgroup_namespace *ns;
-	unsigned int flags;
-	bool cpuset_clone_children;
-	bool none;
-	bool all_ss;
-	u16 subsys_mask;
-	char *name;
-	char *release_agent;
-};
-
-struct cgrp_cset_link {
-	struct cgroup *cgrp;
-	struct css_set *cset;
-	struct list_head cset_link;
-	struct list_head cgrp_link;
-};
-
-struct cgroup_mgctx {
-	struct list_head preloaded_src_csets;
-	struct list_head preloaded_dst_csets;
-	struct cgroup_taskset tset;
-	u16 ss_mask;
-};
-
-struct trace_event_raw_cgroup_root {
-	struct trace_entry ent;
-	int root;
-	u16 ss_mask;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_migrate {
-	struct trace_entry ent;
-	int dst_root;
-	int dst_id;
-	int dst_level;
-	int pid;
-	u32 __data_loc_dst_path;
-	u32 __data_loc_comm;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_event {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cgroup_root {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cgroup {
-	u32 path;
-};
-
-struct trace_event_data_offsets_cgroup_migrate {
-	u32 dst_path;
-	u32 comm;
-};
-
-struct trace_event_data_offsets_cgroup_event {
-	u32 path;
-};
-
-typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
-
-typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
-
-enum cgroup2_param {
-	Opt_nsdelegate = 0,
-	Opt_memory_localevents = 1,
-	Opt_memory_recursiveprot = 2,
-	nr__cgroup2_params = 3,
-};
-
-struct cgroupstats {
-	__u64 nr_sleeping;
-	__u64 nr_running;
-	__u64 nr_stopped;
-	__u64 nr_uninterruptible;
-	__u64 nr_io_wait;
-};
-
-enum cgroup_filetype {
-	CGROUP_FILE_PROCS = 0,
-	CGROUP_FILE_TASKS = 1,
-};
-
-struct cgroup_pidlist {
-	struct {
-		enum cgroup_filetype type;
-		struct pid_namespace *ns;
-	} key;
-	pid_t *list;
-	int length;
-	struct list_head links;
-	struct cgroup *owner;
-	struct delayed_work destroy_dwork;
-};
-
-enum cgroup1_param {
-	Opt_all = 0,
-	Opt_clone_children = 1,
-	Opt_cpuset_v2_mode = 2,
-	Opt_name = 3,
-	Opt_none = 4,
-	Opt_noprefix = 5,
-	Opt_release_agent = 6,
-	Opt_xattr = 7,
-};
-
 enum freezer_state_flags {
 	CGROUP_FREEZER_ONLINE = 1,
 	CGROUP_FREEZING_SELF = 2,
@@ -36703,1050 +50650,541 @@
 	unsigned int state;
 };
 
-struct pids_cgroup {
-	struct cgroup_subsys_state css;
-	atomic64_t counter;
-	atomic64_t limit;
-	struct cgroup_file events_file;
-	atomic64_t events_limit;
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
 };
 
-struct root_domain___2;
-
-struct fmeter {
-	int cnt;
-	int val;
-	time64_t time;
-	spinlock_t lock;
+struct trace_probe_log {
+	const char *subsystem;
+	const char **argv;
+	int argc;
+	int index;
 };
 
-struct cpuset {
-	struct cgroup_subsys_state css;
-	long unsigned int flags;
-	cpumask_var_t cpus_allowed;
-	nodemask_t mems_allowed;
-	cpumask_var_t effective_cpus;
-	nodemask_t effective_mems;
-	cpumask_var_t subparts_cpus;
-	nodemask_t old_mems_allowed;
-	struct fmeter fmeter;
-	int attach_in_progress;
-	int pn;
-	int relax_domain_level;
-	int nr_subparts_cpus;
-	int partition_root_state;
-	int use_parent_ecpus;
-	int child_ecpus_count;
-};
+struct pcpu_freelist_node;
 
-struct tmpmasks {
-	cpumask_var_t addmask;
-	cpumask_var_t delmask;
-	cpumask_var_t new_cpus;
-};
-
-typedef enum {
-	CS_ONLINE = 0,
-	CS_CPU_EXCLUSIVE = 1,
-	CS_MEM_EXCLUSIVE = 2,
-	CS_MEM_HARDWALL = 3,
-	CS_MEMORY_MIGRATE = 4,
-	CS_SCHED_LOAD_BALANCE = 5,
-	CS_SPREAD_PAGE = 6,
-	CS_SPREAD_SLAB = 7,
-} cpuset_flagbits_t;
-
-enum subparts_cmd {
-	partcmd_enable = 0,
-	partcmd_disable = 1,
-	partcmd_update = 2,
-};
-
-struct cpuset_migrate_mm_work {
-	struct work_struct work;
-	struct mm_struct *mm;
-	nodemask_t from;
-	nodemask_t to;
-};
-
-typedef enum {
-	FILE_MEMORY_MIGRATE = 0,
-	FILE_CPULIST = 1,
-	FILE_MEMLIST = 2,
-	FILE_EFFECTIVE_CPULIST = 3,
-	FILE_EFFECTIVE_MEMLIST = 4,
-	FILE_SUBPARTS_CPULIST = 5,
-	FILE_CPU_EXCLUSIVE = 6,
-	FILE_MEM_EXCLUSIVE = 7,
-	FILE_MEM_HARDWALL = 8,
-	FILE_SCHED_LOAD_BALANCE = 9,
-	FILE_PARTITION_ROOT = 10,
-	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
-	FILE_MEMORY_PRESSURE_ENABLED = 12,
-	FILE_MEMORY_PRESSURE = 13,
-	FILE_SPREAD_PAGE = 14,
-	FILE_SPREAD_SLAB = 15,
-} cpuset_filetype_t;
-
-struct kernel_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-};
-
-enum kernel_pkey_operation {
-	kernel_pkey_encrypt = 0,
-	kernel_pkey_decrypt = 1,
-	kernel_pkey_sign = 2,
-	kernel_pkey_verify = 3,
-};
-
-struct kernel_pkey_params {
-	struct key *key;
-	const char *encoding;
-	const char *hash_algo;
-	char *info;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	enum kernel_pkey_operation op: 8;
-};
-
-struct key_preparsed_payload {
-	char *description;
-	union key_payload payload;
-	const void *data;
-	size_t datalen;
-	size_t quotalen;
-	time64_t expiry;
-};
-
-struct key_match_data {
-	bool (*cmp)(const struct key *, const struct key_match_data *);
-	const void *raw_data;
-	void *preparsed;
-	unsigned int lookup_type;
-};
-
-struct idmap_key {
-	bool map_up;
-	u32 id;
-	u32 count;
-};
-
-struct ctl_path {
-	const char *procname;
-};
-
-struct cpu_stop_done {
-	atomic_t nr_todo;
-	int ret;
-	struct completion completion;
-};
-
-struct cpu_stopper {
-	struct task_struct *thread;
+struct pcpu_freelist_head {
+	struct pcpu_freelist_node *first;
 	raw_spinlock_t lock;
-	bool enabled;
-	struct list_head works;
-	struct cpu_stop_work stop_work;
 };
 
-enum multi_stop_state {
-	MULTI_STOP_NONE = 0,
-	MULTI_STOP_PREPARE = 1,
-	MULTI_STOP_DISABLE_IRQ = 2,
-	MULTI_STOP_RUN = 3,
-	MULTI_STOP_EXIT = 4,
+struct pcpu_freelist_node {
+	struct pcpu_freelist_node *next;
 };
 
-struct multi_stop_data {
-	cpu_stop_fn_t fn;
-	void *data;
-	unsigned int num_threads;
-	const struct cpumask *active_cpus;
-	enum multi_stop_state state;
-	atomic_t thread_ack;
+struct pcpu_freelist {
+	struct pcpu_freelist_head *freelist;
+	struct pcpu_freelist_head extralist;
 };
 
-typedef int __kernel_mqd_t;
-
-typedef __kernel_mqd_t mqd_t;
-
-enum audit_state {
-	AUDIT_DISABLED = 0,
-	AUDIT_BUILD_CONTEXT = 1,
-	AUDIT_RECORD_CONTEXT = 2,
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
 };
 
-struct audit_cap_data {
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	union {
-		unsigned int fE;
-		kernel_cap_t effective;
-	};
-	kernel_cap_t ambient;
-	kuid_t rootid;
-};
-
-struct audit_names {
+struct bpf_lru_node {
 	struct list_head list;
-	struct filename *name;
-	int name_len;
-	bool hidden;
-	long unsigned int ino;
-	dev_t dev;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	dev_t rdev;
-	u32 osid;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	unsigned char type;
-	bool should_free;
+	u16 cpu;
+	u8 type;
+	u8 ref;
 };
 
-struct mq_attr {
-	__kernel_long_t mq_flags;
-	__kernel_long_t mq_maxmsg;
-	__kernel_long_t mq_msgsize;
-	__kernel_long_t mq_curmsgs;
-	__kernel_long_t __reserved[4];
+struct bpf_lru_list {
+	struct list_head lists[3];
+	unsigned int counts[2];
+	struct list_head *next_inactive_rotation;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct audit_proctitle {
-	int len;
-	char *value;
+struct bpf_lru_locallist {
+	struct list_head lists[2];
+	u16 next_steal;
+	raw_spinlock_t lock;
 };
 
-struct audit_aux_data;
+struct bpf_common_lru {
+	struct bpf_lru_list lru_list;
+	struct bpf_lru_locallist *local_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
 
-struct __kernel_sockaddr_storage;
+typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
 
-struct audit_tree_refs;
-
-struct audit_context {
-	int dummy;
-	int in_syscall;
-	enum audit_state state;
-	enum audit_state current_state;
-	unsigned int serial;
-	int major;
-	struct timespec64 ctime;
-	long unsigned int argv[4];
-	long int return_code;
-	u64 prio;
-	int return_valid;
-	struct audit_names preallocated_names[5];
-	int name_count;
-	struct list_head names_list;
-	char *filterkey;
-	struct path pwd;
-	struct audit_aux_data *aux;
-	struct audit_aux_data *aux_pids;
-	struct __kernel_sockaddr_storage *sockaddr;
-	size_t sockaddr_len;
-	pid_t pid;
-	pid_t ppid;
-	kuid_t uid;
-	kuid_t euid;
-	kuid_t suid;
-	kuid_t fsuid;
-	kgid_t gid;
-	kgid_t egid;
-	kgid_t sgid;
-	kgid_t fsgid;
-	long unsigned int personality;
-	int arch;
-	pid_t target_pid;
-	kuid_t target_auid;
-	kuid_t target_uid;
-	unsigned int target_sessionid;
-	u32 target_sid;
-	char target_comm[16];
-	struct audit_tree_refs *trees;
-	struct audit_tree_refs *first_trees;
-	struct list_head killed_trees;
-	int tree_count;
-	int type;
+struct bpf_lru {
 	union {
-		struct {
-			int nargs;
-			long int args[6];
-		} socketcall;
-		struct {
-			kuid_t uid;
-			kgid_t gid;
-			umode_t mode;
-			u32 osid;
-			int has_perm;
-			uid_t perm_uid;
-			gid_t perm_gid;
-			umode_t perm_mode;
-			long unsigned int qbytes;
-		} ipc;
-		struct {
-			mqd_t mqdes;
-			struct mq_attr mqstat;
-		} mq_getsetattr;
-		struct {
-			mqd_t mqdes;
-			int sigev_signo;
-		} mq_notify;
-		struct {
-			mqd_t mqdes;
-			size_t msg_len;
-			unsigned int msg_prio;
-			struct timespec64 abs_timeout;
-		} mq_sendrecv;
-		struct {
-			int oflag;
-			umode_t mode;
-			struct mq_attr attr;
-		} mq_open;
-		struct {
-			pid_t pid;
-			struct audit_cap_data cap;
-		} capset;
-		struct {
-			int fd;
-			int flags;
-		} mmap;
-		struct {
-			int argc;
-		} execve;
-		struct {
-			char *name;
-		} module;
+		struct bpf_common_lru common_lru;
+		struct bpf_lru_list *percpu_lru;
 	};
-	int fds[2];
-	struct audit_proctitle proctitle;
-};
-
-enum audit_nlgrps {
-	AUDIT_NLGRP_NONE = 0,
-	AUDIT_NLGRP_READLOG = 1,
-	__AUDIT_NLGRP_MAX = 2,
-};
-
-struct audit_status {
-	__u32 mask;
-	__u32 enabled;
-	__u32 failure;
-	__u32 pid;
-	__u32 rate_limit;
-	__u32 backlog_limit;
-	__u32 lost;
-	__u32 backlog;
-	union {
-		__u32 version;
-		__u32 feature_bitmap;
-	};
-	__u32 backlog_wait_time;
-	__u32 backlog_wait_time_actual;
-};
-
-struct audit_features {
-	__u32 vers;
-	__u32 mask;
-	__u32 features;
-	__u32 lock;
-};
-
-struct audit_tty_status {
-	__u32 enabled;
-	__u32 log_passwd;
-};
-
-struct audit_sig_info {
-	uid_t uid;
-	pid_t pid;
-	char ctx[0];
-};
-
-struct __kernel_sockaddr_storage {
-	union {
-		struct {
-			__kernel_sa_family_t ss_family;
-			char __data[126];
-		};
-		void *__align;
-	};
-};
-
-struct net_generic {
-	union {
-		struct {
-			unsigned int len;
-			struct callback_head rcu;
-		} s;
-		void *ptr[0];
-	};
-};
-
-struct pernet_operations {
-	struct list_head list;
-	int (*init)(struct net *);
-	void (*pre_exit)(struct net *);
-	void (*exit)(struct net *);
-	void (*exit_batch)(struct list_head *);
-	unsigned int *id;
-	size_t size;
-};
-
-struct scm_creds {
-	u32 pid;
-	kuid_t uid;
-	kgid_t gid;
-};
-
-struct netlink_skb_parms {
-	struct scm_creds creds;
-	__u32 portid;
-	__u32 dst_group;
-	__u32 flags;
-	struct sock *sk;
-	bool nsid_is_set;
-	int nsid;
-};
-
-struct netlink_kernel_cfg {
-	unsigned int groups;
-	unsigned int flags;
-	void (*input)(struct sk_buff *);
-	struct mutex *cb_mutex;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-};
-
-struct audit_netlink_list {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff_head q;
-};
-
-struct audit_net {
-	struct sock *sk;
-};
-
-struct auditd_connection {
-	struct pid *pid;
-	u32 portid;
-	struct net *net;
-	struct callback_head rcu;
-};
-
-struct audit_ctl_mutex {
-	struct mutex lock;
-	void *owner;
-};
-
-struct audit_buffer {
-	struct sk_buff *skb;
-	struct audit_context *ctx;
-	gfp_t gfp_mask;
-};
-
-struct audit_reply {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff *skb;
+	del_from_htab_func del_from_htab;
+	void *del_arg;
+	unsigned int hash_offset;
+	unsigned int nr_scans;
+	bool percpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 enum {
-	Audit_equal = 0,
-	Audit_not_equal = 1,
-	Audit_bitmask = 2,
-	Audit_bittest = 3,
-	Audit_lt = 4,
-	Audit_gt = 5,
-	Audit_le = 6,
-	Audit_ge = 7,
-	Audit_bad = 8,
+	BPF_F_NO_PREALLOC = 1,
+	BPF_F_NO_COMMON_LRU = 2,
+	BPF_F_NUMA_NODE = 4,
+	BPF_F_RDONLY = 8,
+	BPF_F_WRONLY = 16,
+	BPF_F_STACK_BUILD_ID = 32,
+	BPF_F_ZERO_SEED = 64,
+	BPF_F_RDONLY_PROG = 128,
+	BPF_F_WRONLY_PROG = 256,
+	BPF_F_CLONE = 512,
+	BPF_F_MMAPABLE = 1024,
+	BPF_F_PRESERVE_ELEMS = 2048,
+	BPF_F_INNER_MAP = 4096,
 };
 
-struct audit_rule_data {
-	__u32 flags;
-	__u32 action;
-	__u32 field_count;
-	__u32 mask[64];
-	__u32 fields[64];
-	__u32 values[64];
-	__u32 fieldflags[64];
-	__u32 buflen;
-	char buf[0];
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 aligned_u32_count;
+	u32 nr_hash_funcs;
+	long unsigned int bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct audit_field;
-
-struct audit_watch;
-
-struct audit_tree;
-
-struct audit_fsnotify_mark;
-
-struct audit_krule {
-	u32 pflags;
-	u32 flags;
-	u32 listnr;
-	u32 action;
-	u32 mask[64];
-	u32 buflen;
-	u32 field_count;
-	char *filterkey;
-	struct audit_field *fields;
-	struct audit_field *arch_f;
-	struct audit_field *inode_f;
-	struct audit_watch *watch;
-	struct audit_tree *tree;
-	struct audit_fsnotify_mark *exe;
-	struct list_head rlist;
-	struct list_head list;
-	u64 prio;
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
 };
 
-struct audit_field {
-	u32 type;
-	union {
-		u32 val;
-		kuid_t uid;
-		kgid_t gid;
-		struct {
-			char *lsm_str;
-			void *lsm_rule;
-		};
-	};
-	u32 op;
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
 };
 
-struct audit_entry {
-	struct list_head list;
-	struct callback_head rcu;
-	struct audit_krule rule;
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1ULL,
+	PERF_SAMPLE_TID = 2ULL,
+	PERF_SAMPLE_TIME = 4ULL,
+	PERF_SAMPLE_ADDR = 8ULL,
+	PERF_SAMPLE_READ = 16ULL,
+	PERF_SAMPLE_CALLCHAIN = 32ULL,
+	PERF_SAMPLE_ID = 64ULL,
+	PERF_SAMPLE_CPU = 128ULL,
+	PERF_SAMPLE_PERIOD = 256ULL,
+	PERF_SAMPLE_STREAM_ID = 512ULL,
+	PERF_SAMPLE_RAW = 1024ULL,
+	PERF_SAMPLE_BRANCH_STACK = 2048ULL,
+	PERF_SAMPLE_REGS_USER = 4096ULL,
+	PERF_SAMPLE_STACK_USER = 8192ULL,
+	PERF_SAMPLE_WEIGHT = 16384ULL,
+	PERF_SAMPLE_DATA_SRC = 32768ULL,
+	PERF_SAMPLE_IDENTIFIER = 65536ULL,
+	PERF_SAMPLE_TRANSACTION = 131072ULL,
+	PERF_SAMPLE_REGS_INTR = 262144ULL,
+	PERF_SAMPLE_PHYS_ADDR = 524288ULL,
+	PERF_SAMPLE_AUX = 1048576ULL,
+	PERF_SAMPLE_CGROUP = 2097152ULL,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304ULL,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608ULL,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216ULL,
+	PERF_SAMPLE_MAX = 33554432ULL,
+	__PERF_SAMPLE_CALLCHAIN_EARLY = 9223372036854775808ULL,
 };
 
-struct audit_buffer___2;
-
-typedef int __kernel_key_t;
-
-typedef __kernel_key_t key_t;
-
-struct cpu_vfs_cap_data {
-	__u32 magic_etc;
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	kuid_t rootid;
+enum {
+	HW_BREAKPOINT_EMPTY = 0,
+	HW_BREAKPOINT_R = 1,
+	HW_BREAKPOINT_W = 2,
+	HW_BREAKPOINT_RW = 3,
+	HW_BREAKPOINT_X = 4,
+	HW_BREAKPOINT_INVALID = 7,
 };
 
-struct kern_ipc_perm {
+enum bp_type_idx {
+	TYPE_INST = 0,
+	TYPE_DATA = 1,
+	TYPE_MAX = 2,
+};
+
+struct bp_cpuinfo {
+	unsigned int cpu_pinned;
+	unsigned int *tsk_pinned;
+	unsigned int flexible;
+};
+
+struct bp_busy_slots {
+	unsigned int pinned;
+	unsigned int flexible;
+};
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct kmalloc_info_struct {
+	const char *name[3];
+	unsigned int size;
+};
+
+struct slabinfo {
+	long unsigned int active_objs;
+	long unsigned int num_objs;
+	long unsigned int active_slabs;
+	long unsigned int num_slabs;
+	long unsigned int shared_avail;
+	unsigned int limit;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	long unsigned int kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+struct trace_event_raw_kmem_alloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_alloc_node {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	long unsigned int gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long int size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_alloc {};
+
+struct trace_event_data_offsets_kmem_alloc_node {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t);
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t);
+
+typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, struct kmem_cache *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const char *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);
+
+typedef long unsigned int pte_marker;
+
+typedef struct {
+	__be64 pdbe;
+} hugepd_t;
+
+typedef unsigned int zap_flags_t;
+
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
+};
+
+enum {
+	SUBPAGE_INDEX_SUBPOOL = 1,
+	__NR_USED_SUBPAGE = 2,
+};
+
+struct resv_map {
+	struct kref refs;
 	spinlock_t lock;
-	bool deleted;
-	int id;
-	key_t key;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t cuid;
-	kgid_t cgid;
-	umode_t mode;
-	long unsigned int seq;
-	void *security;
-	struct rhash_head khtnode;
-	struct callback_head rcu;
-	refcount_t refcount;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	struct list_head regions;
+	long int adds_in_progress;
+	struct list_head region_cache;
+	long int region_cache_count;
 };
 
-typedef struct fsnotify_mark_connector *fsnotify_connp_t;
-
-struct fsnotify_mark_connector {
-	spinlock_t lock;
-	short unsigned int type;
-	short unsigned int flags;
-	__kernel_fsid_t fsid;
-	union {
-		fsnotify_connp_t *obj;
-		struct fsnotify_mark_connector *destroy_next;
-	};
-	struct hlist_head list;
+struct file_region {
+	struct list_head link;
+	long int from;
+	long int to;
 };
 
-enum audit_nfcfgop {
-	AUDIT_XT_OP_REGISTER = 0,
-	AUDIT_XT_OP_REPLACE = 1,
-	AUDIT_XT_OP_UNREGISTER = 2,
-	AUDIT_NFT_OP_TABLE_REGISTER = 3,
-	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
-	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
-	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
-	AUDIT_NFT_OP_RULE_REGISTER = 7,
-	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
-	AUDIT_NFT_OP_SET_REGISTER = 9,
-	AUDIT_NFT_OP_SET_UNREGISTER = 10,
-	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
-	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
-	AUDIT_NFT_OP_GEN_REGISTER = 13,
-	AUDIT_NFT_OP_OBJ_REGISTER = 14,
-	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
-	AUDIT_NFT_OP_OBJ_RESET = 16,
-	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
-	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
-	AUDIT_NFT_OP_INVALID = 19,
+enum hugetlb_page_flags {
+	HPG_restore_reserve = 0,
+	HPG_migratable = 1,
+	HPG_temporary = 2,
+	HPG_freed = 3,
+	HPG_vmemmap_optimized = 4,
+	HPG_raw_hwp_unreliable = 5,
+	__NR_HPAGEFLAGS = 6,
 };
 
-enum fsnotify_obj_type {
-	FSNOTIFY_OBJ_TYPE_INODE = 0,
-	FSNOTIFY_OBJ_TYPE_PARENT = 1,
-	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 2,
-	FSNOTIFY_OBJ_TYPE_SB = 3,
-	FSNOTIFY_OBJ_TYPE_COUNT = 4,
-	FSNOTIFY_OBJ_TYPE_DETACHED = 4,
+struct huge_bootmem_page {
+	struct list_head list;
+	struct hstate *hstate;
 };
 
-struct audit_aux_data {
-	struct audit_aux_data *next;
-	int type;
+enum vma_resv_mode {
+	VMA_NEEDS_RESV = 0,
+	VMA_COMMIT_RESV = 1,
+	VMA_END_RESV = 2,
+	VMA_ADD_RESV = 3,
+	VMA_DEL_RESV = 4,
 };
 
-struct audit_chunk;
-
-struct audit_tree_refs {
-	struct audit_tree_refs *next;
-	struct audit_chunk *c[31];
+struct node_hstate {
+	struct kobject *hugepages_kobj;
+	struct kobject *hstate_kobjs[15];
 };
 
-struct audit_aux_data_pids {
-	struct audit_aux_data d;
-	pid_t target_pid[16];
-	kuid_t target_auid[16];
-	kuid_t target_uid[16];
-	unsigned int target_sessionid[16];
-	u32 target_sid[16];
-	char target_comm[256];
-	int pid_count;
+struct hugetlb_cgroup;
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
 };
 
-struct audit_aux_data_bprm_fcaps {
-	struct audit_aux_data d;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	struct audit_cap_data old_pcap;
-	struct audit_cap_data new_pcap;
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	long unsigned int magic;
 };
 
-struct audit_nfcfgop_tab {
-	enum audit_nfcfgop op;
-	const char *s;
-};
+typedef __kernel_rwf_t rwf_t;
 
-struct audit_parent;
-
-struct audit_watch {
-	refcount_t count;
-	dev_t dev;
-	char *path;
-	long unsigned int ino;
-	struct audit_parent *parent;
-	struct list_head wlist;
-	struct list_head rules;
-};
-
-struct fsnotify_group;
-
-struct fsnotify_iter_info;
-
-struct fsnotify_mark;
-
-struct fsnotify_event;
-
-struct fsnotify_ops {
-	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
-	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
-	void (*free_group_priv)(struct fsnotify_group *);
-	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
-	void (*free_event)(struct fsnotify_event *);
-	void (*free_mark)(struct fsnotify_mark *);
-};
-
-struct inotify_group_private_data {
-	spinlock_t idr_lock;
-	struct idr idr;
-	struct ucounts *ucounts;
-};
-
-struct fanotify_group_private_data {
-	struct list_head access_list;
-	wait_queue_head_t access_waitq;
-	int flags;
-	int f_flags;
-	unsigned int max_marks;
-	struct user_struct *user;
-};
-
-struct fsnotify_group {
-	const struct fsnotify_ops *ops;
-	refcount_t refcnt;
-	spinlock_t notification_lock;
-	struct list_head notification_list;
-	wait_queue_head_t notification_waitq;
-	unsigned int q_len;
-	unsigned int max_events;
-	unsigned int priority;
-	bool shutdown;
-	struct mutex mark_mutex;
-	atomic_t num_marks;
-	atomic_t user_waits;
-	struct list_head marks_list;
-	struct fasync_struct *fsn_fa;
-	struct fsnotify_event *overflow_event;
-	struct mem_cgroup *memcg;
-	union {
-		void *private;
-		struct inotify_group_private_data inotify_data;
-		struct fanotify_group_private_data fanotify_data;
-	};
-};
-
-struct fsnotify_iter_info {
-	struct fsnotify_mark *marks[4];
-	unsigned int report_mask;
-	int srcu_idx;
-};
-
-struct fsnotify_mark {
-	__u32 mask;
-	refcount_t refcnt;
-	struct fsnotify_group *group;
-	struct list_head g_list;
-	spinlock_t lock;
-	struct hlist_node obj_list;
-	struct fsnotify_mark_connector *connector;
-	__u32 ignored_mask;
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
 	unsigned int flags;
-};
-
-struct fsnotify_event {
-	struct list_head list;
-	long unsigned int objectid;
-};
-
-struct audit_parent {
-	struct list_head watches;
-	struct fsnotify_mark mark;
-};
-
-struct audit_fsnotify_mark {
-	dev_t dev;
-	long unsigned int ino;
-	char *path;
-	struct fsnotify_mark mark;
-	struct audit_krule *rule;
-};
-
-struct audit_chunk___2;
-
-struct audit_tree {
-	refcount_t count;
-	int goner;
-	struct audit_chunk___2 *root;
-	struct list_head chunks;
-	struct list_head rules;
-	struct list_head list;
-	struct list_head same_root;
-	struct callback_head head;
-	char pathname[0];
-};
-
-struct node___2 {
-	struct list_head list;
-	struct audit_tree *owner;
-	unsigned int index;
-};
-
-struct audit_chunk___2 {
-	struct list_head hash;
-	long unsigned int key;
-	struct fsnotify_mark *mark;
-	struct list_head trees;
-	int count;
-	atomic_long_t refs;
-	struct callback_head head;
-	struct node___2 owners[0];
-};
-
-struct audit_tree_mark {
-	struct fsnotify_mark mark;
-	struct audit_chunk___2 *chunk;
-};
-
-enum {
-	HASH_SIZE = 128,
-};
-
-enum {
-	FTRACE_OPS_FL_ENABLED = 1,
-	FTRACE_OPS_FL_DYNAMIC = 2,
-	FTRACE_OPS_FL_SAVE_REGS = 4,
-	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
-	FTRACE_OPS_FL_RECURSION_SAFE = 16,
-	FTRACE_OPS_FL_STUB = 32,
-	FTRACE_OPS_FL_INITIALIZED = 64,
-	FTRACE_OPS_FL_DELETED = 128,
-	FTRACE_OPS_FL_ADDING = 256,
-	FTRACE_OPS_FL_REMOVING = 512,
-	FTRACE_OPS_FL_MODIFYING = 1024,
-	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
-	FTRACE_OPS_FL_IPMODIFY = 4096,
-	FTRACE_OPS_FL_PID = 8192,
-	FTRACE_OPS_FL_RCU = 16384,
-	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
-	FTRACE_OPS_FL_PERMANENT = 65536,
-	FTRACE_OPS_FL_DIRECT = 131072,
-};
-
-struct kprobe_blacklist_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-};
-
-enum perf_record_ksymbol_type {
-	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
-	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
-	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
-	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
-};
-
-struct kprobe_insn_page {
-	struct list_head list;
-	kprobe_opcode_t *insns;
-	struct kprobe_insn_cache *cache;
-	int nused;
-	int ngarbage;
-	char slot_used[0];
-};
-
-enum kprobe_slot_state {
-	SLOT_CLEAN = 0,
-	SLOT_DIRTY = 1,
-	SLOT_USED = 2,
-};
-
-struct kgdb_io {
-	const char *name;
-	int (*read_char)();
-	void (*write_char)(u8);
-	void (*flush)();
-	int (*init)();
-	void (*deinit)();
-	void (*pre_exception)();
-	void (*post_exception)();
-	struct console *cons;
-};
-
-enum {
-	KDB_NOT_INITIALIZED = 0,
-	KDB_INIT_EARLY = 1,
-	KDB_INIT_FULL = 2,
-};
-
-struct kgdb_state {
-	int ex_vector;
-	int signo;
-	int err_code;
-	int cpu;
-	int pass_exception;
-	long unsigned int thr_query;
-	long unsigned int threadid;
-	long int kgdb_usethreadid;
-	struct pt_regs *linux_regs;
-	atomic_t *send_ready;
-};
-
-struct debuggerinfo_struct {
-	void *debuggerinfo;
-	struct task_struct *task;
-	int exception_state;
-	int ret_state;
-	int irq_depth;
-	int enter_kgdb;
-	bool rounding_up;
-};
-
-struct seccomp_data {
-	int nr;
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 args[6];
-};
-
-struct seccomp_notif_sizes {
-	__u16 seccomp_notif;
-	__u16 seccomp_notif_resp;
-	__u16 seccomp_data;
-};
-
-struct seccomp_notif {
-	__u64 id;
-	__u32 pid;
-	__u32 flags;
-	struct seccomp_data data;
-};
-
-struct seccomp_notif_resp {
-	__u64 id;
-	__s64 val;
-	__s32 error;
-	__u32 flags;
-};
-
-struct seccomp_notif_addfd {
-	__u64 id;
-	__u32 flags;
-	__u32 srcfd;
-	__u32 newfd;
-	__u32 newfd_flags;
-};
-
-struct notification;
-
-struct seccomp_filter {
-	refcount_t refs;
-	refcount_t users;
-	bool log;
-	struct seccomp_filter *prev;
-	struct bpf_prog *prog;
-	struct notification *notif;
-	struct mutex notify_lock;
-	wait_queue_head_t wqh;
-};
-
-struct seccomp_metadata {
-	__u64 filter_off;
-	__u64 flags;
-};
-
-struct sock_fprog {
-	short unsigned int len;
-	struct sock_filter *filter;
-};
-
-struct compat_sock_fprog {
-	u16 len;
-	compat_uptr_t filter;
-};
-
-enum notify_state {
-	SECCOMP_NOTIFY_INIT = 0,
-	SECCOMP_NOTIFY_SENT = 1,
-	SECCOMP_NOTIFY_REPLIED = 2,
-};
-
-struct seccomp_knotif {
-	struct task_struct *task;
-	u64 id;
-	const struct seccomp_data *data;
-	enum notify_state state;
-	int error;
-	long int val;
-	u32 flags;
-	struct completion ready;
-	struct list_head list;
-	struct list_head addfd;
-};
-
-struct seccomp_kaddfd {
-	struct file *file;
-	int fd;
-	unsigned int flags;
-	int ret;
-	struct completion completion;
-	struct list_head list;
-};
-
-struct notification {
-	struct semaphore request;
-	u64 next_id;
-	struct list_head notifications;
-};
-
-struct seccomp_log_name {
-	u32 log;
-	const char *name;
-};
-
-struct rchan;
-
-struct rchan_buf {
-	void *start;
-	void *data;
-	size_t offset;
-	size_t subbufs_produced;
-	size_t subbufs_consumed;
-	struct rchan *chan;
-	wait_queue_head_t read_wait;
-	struct irq_work wakeup_work;
-	struct dentry *dentry;
-	struct kref kref;
-	struct page **page_array;
-	unsigned int page_count;
-	unsigned int finalized;
-	size_t *padding;
-	size_t prev_padding;
-	size_t bytes_consumed;
-	size_t early_bytes;
-	unsigned int cpu;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rchan_callbacks;
-
-struct rchan {
-	u32 version;
-	size_t subbuf_size;
-	size_t n_subbufs;
-	size_t alloc_size;
-	struct rchan_callbacks *cb;
-	struct kref kref;
-	void *private_data;
-	size_t last_toobig;
-	struct rchan_buf **buf;
-	int is_global;
-	struct list_head list;
-	struct dentry *parent;
-	int has_base_filename;
-	char base_filename[255];
-};
-
-struct rchan_callbacks {
-	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
-	void (*buf_mapped)(struct rchan_buf *, struct file *);
-	void (*buf_unmapped)(struct rchan_buf *, struct file *);
-	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
-	int (*remove_buf_file)(struct dentry *);
+	union {
+		void *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
 };
 
 struct partial_page {
@@ -37764,582 +51202,4377 @@
 	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
 };
 
-struct rchan_percpu_buf_dispatcher {
-	struct rchan_buf *buf;
-	struct dentry *dentry;
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+struct dnotify_struct {
+	struct dnotify_struct *dn_next;
+	__u32 dn_mask;
+	int dn_fd;
+	struct file *dn_filp;
+	fl_owner_t dn_owner;
 };
 
-enum {
-	TASKSTATS_TYPE_UNSPEC = 0,
-	TASKSTATS_TYPE_PID = 1,
-	TASKSTATS_TYPE_TGID = 2,
-	TASKSTATS_TYPE_STATS = 3,
-	TASKSTATS_TYPE_AGGR_PID = 4,
-	TASKSTATS_TYPE_AGGR_TGID = 5,
-	TASKSTATS_TYPE_NULL = 6,
-	__TASKSTATS_TYPE_MAX = 7,
+struct fsnotify_group;
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_event;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
 };
 
-enum {
-	TASKSTATS_CMD_ATTR_UNSPEC = 0,
-	TASKSTATS_CMD_ATTR_PID = 1,
-	TASKSTATS_CMD_ATTR_TGID = 2,
-	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
-	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
-	__TASKSTATS_CMD_ATTR_MAX = 5,
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
 };
 
-enum {
-	CGROUPSTATS_CMD_UNSPEC = 3,
-	CGROUPSTATS_CMD_GET = 4,
-	CGROUPSTATS_CMD_NEW = 5,
-	__CGROUPSTATS_CMD_MAX = 6,
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+	};
 };
 
-enum {
-	CGROUPSTATS_TYPE_UNSPEC = 0,
-	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
-	__CGROUPSTATS_TYPE_MAX = 2,
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
 };
 
-enum {
-	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
-	CGROUPSTATS_CMD_ATTR_FD = 1,
-	__CGROUPSTATS_CMD_ATTR_MAX = 2,
-};
-
-struct genlmsghdr {
-	__u8 cmd;
-	__u8 version;
-	__u16 reserved;
-};
-
-enum {
-	NLA_UNSPEC = 0,
-	NLA_U8 = 1,
-	NLA_U16 = 2,
-	NLA_U32 = 3,
-	NLA_U64 = 4,
-	NLA_STRING = 5,
-	NLA_FLAG = 6,
-	NLA_MSECS = 7,
-	NLA_NESTED = 8,
-	NLA_NESTED_ARRAY = 9,
-	NLA_NUL_STRING = 10,
-	NLA_BINARY = 11,
-	NLA_S8 = 12,
-	NLA_S16 = 13,
-	NLA_S32 = 14,
-	NLA_S64 = 15,
-	NLA_BITFIELD32 = 16,
-	NLA_REJECT = 17,
-	__NLA_TYPE_MAX = 18,
-};
-
-struct genl_multicast_group {
-	char name[16];
-};
-
-struct genl_ops;
-
-struct genl_info;
-
-struct genl_small_ops;
-
-struct genl_family {
-	int id;
-	unsigned int hdrsize;
-	char name[16];
-	unsigned int version;
-	unsigned int maxattr;
-	unsigned int mcgrp_offset;
-	u8 netnsok: 1;
-	u8 parallel_ops: 1;
-	u8 n_ops;
-	u8 n_small_ops;
-	u8 n_mcgrps;
-	const struct nla_policy *policy;
-	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	const struct genl_ops *ops;
-	const struct genl_small_ops *small_ops;
-	const struct genl_multicast_group *mcgrps;
-	struct module *module;
-};
-
-struct genl_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*start)(struct netlink_callback *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-struct genl_info {
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr *nlhdr;
-	struct genlmsghdr *genlhdr;
-	void *userhdr;
-	struct nlattr **attrs;
-	possible_net_t _net;
-	void *user_ptr[2];
-	struct netlink_ext_ack *extack;
-};
-
-struct genl_small_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-enum genl_validate_flags {
-	GENL_DONT_VALIDATE_STRICT = 1,
-	GENL_DONT_VALIDATE_DUMP = 2,
-	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
-};
-
-struct listener {
-	struct list_head list;
-	pid_t pid;
-	char valid;
-};
-
-struct listener_list {
-	struct rw_semaphore sem;
-	struct list_head list;
-};
-
-enum actions {
-	REGISTER = 0,
-	DEREGISTER = 1,
-	CPU_DONT_CARE = 2,
-};
-
-struct tp_module {
-	struct list_head list;
-	struct module *mod;
-};
-
-struct tp_probes {
-	struct callback_head rcu;
-	struct tracepoint_func probes[0];
-};
-
-struct ftrace_hash {
-	long unsigned int size_bits;
-	struct hlist_head *buckets;
-	long unsigned int count;
-	long unsigned int flags;
-	struct callback_head rcu;
-};
-
-struct ftrace_func_entry {
-	struct hlist_node hlist;
-	long unsigned int ip;
-	long unsigned int direct;
-};
-
-enum ftrace_bug_type {
-	FTRACE_BUG_UNKNOWN = 0,
-	FTRACE_BUG_INIT = 1,
-	FTRACE_BUG_NOP = 2,
-	FTRACE_BUG_CALL = 3,
-	FTRACE_BUG_UPDATE = 4,
-};
-
-enum {
-	FTRACE_UPDATE_CALLS = 1,
-	FTRACE_DISABLE_CALLS = 2,
-	FTRACE_UPDATE_TRACE_FUNC = 4,
-	FTRACE_START_FUNC_RET = 8,
-	FTRACE_STOP_FUNC_RET = 16,
-	FTRACE_MAY_SLEEP = 32,
-};
-
-enum {
-	FTRACE_UPDATE_IGNORE = 0,
-	FTRACE_UPDATE_MAKE_CALL = 1,
-	FTRACE_UPDATE_MODIFY_CALL = 2,
-	FTRACE_UPDATE_MAKE_NOP = 3,
-};
-
-enum {
-	FTRACE_ITER_FILTER = 1,
-	FTRACE_ITER_NOTRACE = 2,
-	FTRACE_ITER_PRINTALL = 4,
-	FTRACE_ITER_DO_PROBES = 8,
-	FTRACE_ITER_PROBE = 16,
-	FTRACE_ITER_MOD = 32,
-	FTRACE_ITER_ENABLED = 64,
-};
-
-struct prog_entry;
-
-struct event_filter {
-	struct prog_entry *prog;
-	char *filter_string;
-};
-
-struct trace_array_cpu;
-
-struct array_buffer {
-	struct trace_array *tr;
-	struct trace_buffer *buffer;
-	struct trace_array_cpu *data;
-	u64 time_start;
-	int cpu;
-};
-
-struct trace_pid_list;
-
-struct trace_options;
-
-struct trace_array {
-	struct list_head list;
-	char *name;
-	struct array_buffer array_buffer;
-	struct trace_pid_list *filtered_pids;
-	struct trace_pid_list *filtered_no_pids;
-	arch_spinlock_t max_lock;
-	int buffer_disabled;
-	int sys_refcount_enter;
-	int sys_refcount_exit;
-	struct trace_event_file *enter_syscall_files[441];
-	struct trace_event_file *exit_syscall_files[441];
-	int stop_count;
-	int clock_id;
-	int nr_topts;
-	bool clear_trace;
-	int buffer_percent;
-	unsigned int n_err_log_entries;
-	struct tracer *current_trace;
-	unsigned int trace_flags;
-	unsigned char trace_flags_index[32];
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
 	unsigned int flags;
-	raw_spinlock_t start_lock;
-	struct list_head err_log;
-	struct dentry *dir;
-	struct dentry *options;
-	struct dentry *percpu_dir;
-	struct dentry *event_dir;
-	struct trace_options *topts;
-	struct list_head systems;
-	struct list_head events;
-	struct trace_event_file *trace_marker_file;
-	cpumask_var_t tracing_cpumask;
-	int ref;
-	int trace_ref;
-	struct ftrace_ops *ops;
-	struct trace_pid_list *function_pids;
-	struct trace_pid_list *function_no_pids;
-	struct list_head func_probes;
-	struct list_head mod_trace;
-	struct list_head mod_notrace;
-	int function_enabled;
-	int time_stamp_abs_ref;
-	struct list_head hist_vars;
 };
 
-struct tracer_flags;
-
-struct tracer {
-	const char *name;
-	int (*init)(struct trace_array *);
-	void (*reset)(struct trace_array *);
-	void (*start)(struct trace_array *);
-	void (*stop)(struct trace_array *);
-	int (*update_thresh)(struct trace_array *);
-	void (*open)(struct trace_iterator *);
-	void (*pipe_open)(struct trace_iterator *);
-	void (*close)(struct trace_iterator *);
-	void (*pipe_close)(struct trace_iterator *);
-	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
-	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	void (*print_header)(struct seq_file *);
-	enum print_line_t (*print_line)(struct trace_iterator *);
-	int (*set_flag)(struct trace_array *, u32, u32, int);
-	int (*flag_changed)(struct trace_array *, u32, int);
-	struct tracer *next;
-	struct tracer_flags *flags;
-	int enabled;
-	bool print_max;
-	bool allow_instances;
-	bool noboot;
-};
-
-struct event_subsystem;
-
-struct trace_subsystem_dir {
+struct fsnotify_event {
 	struct list_head list;
-	struct event_subsystem *subsystem;
-	struct trace_array *tr;
-	struct dentry *entry;
-	int ref_count;
-	int nr_events;
 };
 
-struct trace_array_cpu {
-	atomic_t disabled;
-	void *buffer_page;
-	long unsigned int entries;
-	long unsigned int saved_latency;
-	long unsigned int critical_start;
-	long unsigned int critical_end;
-	long unsigned int critical_sequence;
-	long unsigned int nice;
-	long unsigned int policy;
-	long unsigned int rt_priority;
-	long unsigned int skipped_entries;
-	u64 preempt_timestamp;
-	pid_t pid;
-	kuid_t uid;
-	char comm[16];
-	int ftrace_ignore_pid;
-	bool ignore_pid;
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = -1,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
 };
 
-struct trace_option_dentry;
-
-struct trace_options {
-	struct tracer *tracer;
-	struct trace_option_dentry *topts;
+struct dnotify_mark {
+	struct fsnotify_mark fsn_mark;
+	struct dnotify_struct *dn;
 };
 
-struct tracer_opt;
+typedef struct siginfo siginfo_t;
 
-struct trace_option_dentry {
-	struct tracer_opt *opt;
-	struct tracer_flags *flags;
-	struct trace_array *tr;
-	struct dentry *entry;
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
 };
 
-struct trace_pid_list {
-	int pid_max;
-	long unsigned int *pids;
-};
+struct core_vma_metadata;
 
-enum {
-	TRACE_PIDS = 1,
-	TRACE_NO_PIDS = 2,
-};
-
-enum {
-	TRACE_ARRAY_FL_GLOBAL = 1,
-};
-
-struct tracer_opt {
-	const char *name;
-	u32 bit;
-};
-
-struct tracer_flags {
-	u32 val;
-	struct tracer_opt *opts;
-	struct tracer *trace;
-};
-
-enum {
-	TRACE_FTRACE_BIT = 0,
-	TRACE_FTRACE_NMI_BIT = 1,
-	TRACE_FTRACE_IRQ_BIT = 2,
-	TRACE_FTRACE_SIRQ_BIT = 3,
-	TRACE_INTERNAL_BIT = 4,
-	TRACE_INTERNAL_NMI_BIT = 5,
-	TRACE_INTERNAL_IRQ_BIT = 6,
-	TRACE_INTERNAL_SIRQ_BIT = 7,
-	TRACE_BRANCH_BIT = 8,
-	TRACE_IRQ_BIT = 9,
-	TRACE_GRAPH_BIT = 10,
-	TRACE_GRAPH_DEPTH_START_BIT = 11,
-	TRACE_GRAPH_DEPTH_END_BIT = 12,
-	TRACE_GRAPH_NOTRACE_BIT = 13,
-	TRACE_TRANSITION_BIT = 14,
-};
-
-struct ftrace_mod_load {
-	struct list_head list;
-	char *func;
-	char *module;
-	int enable;
-};
-
-enum {
-	FTRACE_HASH_FL_MOD = 1,
-};
-
-struct ftrace_func_command {
-	struct list_head list;
-	char *name;
-	int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);
-};
-
-struct ftrace_probe_ops {
-	void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);
-	int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);
-	void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);
-	int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);
-};
-
-typedef int (*ftrace_mapper_func)(void *);
-
-struct trace_parser {
-	bool cont;
-	char *buffer;
-	unsigned int idx;
-	unsigned int size;
-};
-
-enum trace_iterator_bits {
-	TRACE_ITER_PRINT_PARENT_BIT = 0,
-	TRACE_ITER_SYM_OFFSET_BIT = 1,
-	TRACE_ITER_SYM_ADDR_BIT = 2,
-	TRACE_ITER_VERBOSE_BIT = 3,
-	TRACE_ITER_RAW_BIT = 4,
-	TRACE_ITER_HEX_BIT = 5,
-	TRACE_ITER_BIN_BIT = 6,
-	TRACE_ITER_BLOCK_BIT = 7,
-	TRACE_ITER_PRINTK_BIT = 8,
-	TRACE_ITER_ANNOTATE_BIT = 9,
-	TRACE_ITER_USERSTACKTRACE_BIT = 10,
-	TRACE_ITER_SYM_USEROBJ_BIT = 11,
-	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
-	TRACE_ITER_CONTEXT_INFO_BIT = 13,
-	TRACE_ITER_LATENCY_FMT_BIT = 14,
-	TRACE_ITER_RECORD_CMD_BIT = 15,
-	TRACE_ITER_RECORD_TGID_BIT = 16,
-	TRACE_ITER_OVERWRITE_BIT = 17,
-	TRACE_ITER_STOP_ON_FREE_BIT = 18,
-	TRACE_ITER_IRQ_INFO_BIT = 19,
-	TRACE_ITER_MARKERS_BIT = 20,
-	TRACE_ITER_EVENT_FORK_BIT = 21,
-	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
-	TRACE_ITER_FUNCTION_BIT = 23,
-	TRACE_ITER_FUNC_FORK_BIT = 24,
-	TRACE_ITER_DISPLAY_GRAPH_BIT = 25,
-	TRACE_ITER_STACKTRACE_BIT = 26,
-	TRACE_ITER_LAST_BIT = 27,
-};
-
-struct event_subsystem {
-	struct list_head list;
-	const char *name;
-	struct event_filter *filter;
-	int ref_count;
-};
-
-enum regex_type {
-	MATCH_FULL = 0,
-	MATCH_FRONT_ONLY = 1,
-	MATCH_MIDDLE_ONLY = 2,
-	MATCH_END_ONLY = 3,
-	MATCH_GLOB = 4,
-	MATCH_INDEX = 5,
-};
-
-enum {
-	FTRACE_MODIFY_ENABLE_FL = 1,
-	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
-};
-
-struct ftrace_func_probe {
-	struct ftrace_probe_ops *probe_ops;
-	struct ftrace_ops ops;
-	struct trace_array *tr;
-	struct list_head list;
-	void *data;
-	int ref;
-};
-
-struct ftrace_page {
-	struct ftrace_page *next;
-	struct dyn_ftrace *records;
-	int index;
-	int size;
-};
-
-struct ftrace_rec_iter {
-	struct ftrace_page *pg;
-	int index;
-};
-
-struct ftrace_iterator {
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct pt_regs *regs;
+	struct file *file;
+	long unsigned int limit;
+	long unsigned int mm_flags;
+	loff_t written;
 	loff_t pos;
-	loff_t func_pos;
-	loff_t mod_pos;
-	struct ftrace_page *pg;
-	struct dyn_ftrace *func;
-	struct ftrace_func_probe *probe;
-	struct ftrace_func_entry *probe_entry;
-	struct trace_parser parser;
-	struct ftrace_hash *hash;
-	struct ftrace_ops *ops;
-	struct trace_array *tr;
-	struct list_head *mod_list;
-	int pidx;
-	int idx;
-	unsigned int flags;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
 };
 
-struct ftrace_glob {
-	char *search;
-	unsigned int len;
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	long unsigned int pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct core_vma_metadata {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int flags;
+	long unsigned int dump_size;
+	long unsigned int pgoff;
+	struct file *file;
+};
+
+struct arch_elf_state {};
+
+struct memelfnote {
+	const char *name;
 	int type;
-};
-
-struct ftrace_func_map {
-	struct ftrace_func_entry entry;
+	unsigned int datasz;
 	void *data;
 };
 
-struct ftrace_func_mapper {
-	struct ftrace_hash hash;
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
 };
 
-enum graph_filter_type {
-	GRAPH_FILTER_NOTRACE = 0,
-	GRAPH_FILTER_FUNCTION = 1,
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
 };
 
-struct ftrace_graph_data {
-	struct ftrace_hash *hash;
-	struct ftrace_func_entry *entry;
-	int idx;
-	enum graph_filter_type type;
-	struct ftrace_hash *new_hash;
-	const struct seq_operations *seq_ops;
-	struct trace_parser parser;
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
 };
 
-struct ftrace_mod_func {
-	struct list_head list;
-	char *name;
-	long unsigned int ip;
-	unsigned int size;
+struct iomap_dio_ops {
+	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
 };
 
-struct ftrace_mod_map {
+struct iomap_dio {
+	struct kiocb *iocb;
+	const struct iomap_dio_ops *dops;
+	loff_t i_size;
+	loff_t size;
+	atomic_t ref;
+	unsigned int flags;
+	int error;
+	size_t done_before;
+	bool wait_for_completion;
+	union {
+		struct {
+			struct iov_iter *iter;
+			struct task_struct *waiter;
+			struct bio *poll_bio;
+		} submit;
+		struct {
+			struct work_struct work;
+		} aio;
+	};
+};
+
+struct ext4_map_blocks {
+	ext4_fsblk_t m_pblk;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+};
+
+enum {
+	EXT4_INODE_SECRM = 0,
+	EXT4_INODE_UNRM = 1,
+	EXT4_INODE_COMPR = 2,
+	EXT4_INODE_SYNC = 3,
+	EXT4_INODE_IMMUTABLE = 4,
+	EXT4_INODE_APPEND = 5,
+	EXT4_INODE_NODUMP = 6,
+	EXT4_INODE_NOATIME = 7,
+	EXT4_INODE_DIRTY = 8,
+	EXT4_INODE_COMPRBLK = 9,
+	EXT4_INODE_NOCOMPR = 10,
+	EXT4_INODE_ENCRYPT = 11,
+	EXT4_INODE_INDEX = 12,
+	EXT4_INODE_IMAGIC = 13,
+	EXT4_INODE_JOURNAL_DATA = 14,
+	EXT4_INODE_NOTAIL = 15,
+	EXT4_INODE_DIRSYNC = 16,
+	EXT4_INODE_TOPDIR = 17,
+	EXT4_INODE_HUGE_FILE = 18,
+	EXT4_INODE_EXTENTS = 19,
+	EXT4_INODE_VERITY = 20,
+	EXT4_INODE_EA_INODE = 21,
+	EXT4_INODE_DAX = 25,
+	EXT4_INODE_INLINE_DATA = 28,
+	EXT4_INODE_PROJINHERIT = 29,
+	EXT4_INODE_CASEFOLD = 30,
+	EXT4_INODE_RESERVED = 31,
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+typedef struct {
+	__le32 *p;
+	__le32 key;
+	struct buffer_head *bh;
+} Indirect;
+
+enum {
+	attr_noop = 0,
+	attr_delayed_allocation_blocks = 1,
+	attr_session_write_kbytes = 2,
+	attr_lifetime_write_kbytes = 3,
+	attr_reserved_clusters = 4,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
+};
+
+enum {
+	ptr_explicit = 0,
+	ptr_ext4_sb_info_offset = 1,
+	ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_attr {
+	struct attribute attr;
+	short int attr_id;
+	short int attr_ptr;
+	short unsigned int attr_size;
+	union {
+		int offset;
+		void *explicit_ptr;
+	} u;
+};
+
+struct commit_header {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+	unsigned char h_chksum_type;
+	unsigned char h_chksum_size;
+	unsigned char h_padding[2];
+	__be32 h_chksum[8];
+	__be64 h_commit_sec;
+	__be32 h_commit_nsec;
+};
+
+struct journal_block_tag3_s {
+	__be32 t_blocknr;
+	__be32 t_flags;
+	__be32 t_blocknr_high;
+	__be32 t_checksum;
+};
+
+typedef struct journal_block_tag3_s journal_block_tag3_t;
+
+struct journal_block_tag_s {
+	__be32 t_blocknr;
+	__be16 t_checksum;
+	__be16 t_flags;
+	__be32 t_blocknr_high;
+};
+
+typedef struct journal_block_tag_s journal_block_tag_t;
+
+struct nfs_readdesc {
+	struct nfs_pageio_descriptor pgio;
+	struct nfs_open_context *ctx;
+};
+
+enum xprt_transports {
+	XPRT_TRANSPORT_UDP = 17,
+	XPRT_TRANSPORT_TCP = 6,
+	XPRT_TRANSPORT_BC_TCP = -2147483642,
+	XPRT_TRANSPORT_RDMA = 256,
+	XPRT_TRANSPORT_BC_RDMA = -2147483392,
+	XPRT_TRANSPORT_LOCAL = 257,
+};
+
+enum nfs4_callback_procnum {
+	CB_NULL = 0,
+	CB_COMPOUND = 1,
+};
+
+enum nfs4_callback_opnum {
+	OP_CB_GETATTR = 3,
+	OP_CB_RECALL = 4,
+	OP_CB_LAYOUTRECALL = 5,
+	OP_CB_NOTIFY = 6,
+	OP_CB_PUSH_DELEG = 7,
+	OP_CB_RECALL_ANY = 8,
+	OP_CB_RECALLABLE_OBJ_AVAIL = 9,
+	OP_CB_RECALL_SLOT = 10,
+	OP_CB_SEQUENCE = 11,
+	OP_CB_WANTS_CANCELLED = 12,
+	OP_CB_NOTIFY_LOCK = 13,
+	OP_CB_NOTIFY_DEVICEID = 14,
+	OP_CB_OFFLOAD = 15,
+	OP_CB_ILLEGAL = 10044,
+};
+
+struct cb_process_state {
+	__be32 drc_status;
+	struct nfs_client *clp;
+	struct nfs4_slot *slot;
+	u32 minorversion;
+	struct net *net;
+};
+
+struct cb_compound_hdr_arg {
+	unsigned int taglen;
+	const char *tag;
+	unsigned int minorversion;
+	unsigned int cb_ident;
+	unsigned int nops;
+};
+
+struct cb_compound_hdr_res {
+	__be32 *status;
+	unsigned int taglen;
+	const char *tag;
+	__be32 *nops;
+};
+
+struct cb_getattrargs {
+	struct nfs_fh fh;
+	uint32_t bitmap[2];
+};
+
+struct cb_getattrres {
+	__be32 status;
+	uint32_t bitmap[2];
+	uint64_t size;
+	uint64_t change_attr;
+	struct timespec64 ctime;
+	struct timespec64 mtime;
+};
+
+struct cb_recallargs {
+	struct nfs_fh fh;
+	nfs4_stateid stateid;
+	uint32_t truncate;
+};
+
+struct callback_op {
+	__be32 (*process_op)(void *, void *, struct cb_process_state *);
+	__be32 (*decode_args)(struct svc_rqst *, struct xdr_stream *, void *);
+	__be32 (*encode_res)(struct svc_rqst *, struct xdr_stream *, const void *);
+	long int res_maxsize;
+};
+
+typedef int (*nlm_host_match_fn_t)(void *, struct nlm_host *);
+
+struct xfs_dsb {
+	__be32 sb_magicnum;
+	__be32 sb_blocksize;
+	__be64 sb_dblocks;
+	__be64 sb_rblocks;
+	__be64 sb_rextents;
+	uuid_t sb_uuid;
+	__be64 sb_logstart;
+	__be64 sb_rootino;
+	__be64 sb_rbmino;
+	__be64 sb_rsumino;
+	__be32 sb_rextsize;
+	__be32 sb_agblocks;
+	__be32 sb_agcount;
+	__be32 sb_rbmblocks;
+	__be32 sb_logblocks;
+	__be16 sb_versionnum;
+	__be16 sb_sectsize;
+	__be16 sb_inodesize;
+	__be16 sb_inopblock;
+	char sb_fname[12];
+	__u8 sb_blocklog;
+	__u8 sb_sectlog;
+	__u8 sb_inodelog;
+	__u8 sb_inopblog;
+	__u8 sb_agblklog;
+	__u8 sb_rextslog;
+	__u8 sb_inprogress;
+	__u8 sb_imax_pct;
+	__be64 sb_icount;
+	__be64 sb_ifree;
+	__be64 sb_fdblocks;
+	__be64 sb_frextents;
+	__be64 sb_uquotino;
+	__be64 sb_gquotino;
+	__be16 sb_qflags;
+	__u8 sb_flags;
+	__u8 sb_shared_vn;
+	__be32 sb_inoalignmt;
+	__be32 sb_unit;
+	__be32 sb_width;
+	__u8 sb_dirblklog;
+	__u8 sb_logsectlog;
+	__be16 sb_logsectsize;
+	__be32 sb_logsunit;
+	__be32 sb_features2;
+	__be32 sb_bad_features2;
+	__be32 sb_features_compat;
+	__be32 sb_features_ro_compat;
+	__be32 sb_features_incompat;
+	__be32 sb_features_log_incompat;
+	__le32 sb_crc;
+	__be32 sb_spino_align;
+	__be64 sb_pquotino;
+	__be64 sb_lsn;
+	uuid_t sb_meta_uuid;
+};
+
+struct xfs_agfl {
+	__be32 agfl_magicnum;
+	__be32 agfl_seqno;
+	uuid_t agfl_uuid;
+	__be64 agfl_lsn;
+	__be32 agfl_crc;
+} __attribute__((packed));
+
+typedef struct xfs_alloc_rec xfs_alloc_rec_t;
+
+struct aghdr_init_data {
+	xfs_agblock_t agno;
+	xfs_extlen_t agsize;
+	struct list_head buffer_list;
+	xfs_rfsblock_t nfree;
+	xfs_daddr_t daddr;
+	size_t numblks;
+	xfs_btnum_t type;
+};
+
+typedef void (*aghdr_init_work_f)(struct xfs_mount *, struct xfs_buf *, struct aghdr_init_data *);
+
+struct xfs_aghdr_grow_data {
+	xfs_daddr_t daddr;
+	size_t numblks;
+	const struct xfs_buf_ops *ops;
+	aghdr_init_work_f work;
+	xfs_btnum_t type;
+	bool need_init;
+};
+
+typedef __s64 xfs_off_t;
+
+typedef uint32_t xfs_dahash_t;
+
+typedef uint16_t xfs_dir2_data_off_t;
+
+typedef uint32_t xfs_dir2_dataptr_t;
+
+typedef xfs_off_t xfs_dir2_off_t;
+
+typedef uint32_t xfs_dir2_db_t;
+
+struct xfs_dir2_data_free {
+	__be16 offset;
+	__be16 length;
+};
+
+typedef struct xfs_dir2_data_free xfs_dir2_data_free_t;
+
+struct xfs_dir2_data_hdr {
+	__be32 magic;
+	xfs_dir2_data_free_t bestfree[3];
+};
+
+typedef struct xfs_dir2_data_hdr xfs_dir2_data_hdr_t;
+
+struct xfs_dir3_blk_hdr {
+	__be32 magic;
+	__be32 crc;
+	__be64 blkno;
+	__be64 lsn;
+	uuid_t uuid;
+	__be64 owner;
+};
+
+struct xfs_dir2_data_entry {
+	__be64 inumber;
+	__u8 namelen;
+	__u8 name[0];
+};
+
+typedef struct xfs_dir2_data_entry xfs_dir2_data_entry_t;
+
+struct xfs_dir2_data_unused {
+	__be16 freetag;
+	__be16 length;
+	__be16 tag;
+};
+
+typedef struct xfs_dir2_data_unused xfs_dir2_data_unused_t;
+
+struct xfs_dir2_leaf_hdr {
+	xfs_da_blkinfo_t info;
+	__be16 count;
+	__be16 stale;
+};
+
+typedef struct xfs_dir2_leaf_hdr xfs_dir2_leaf_hdr_t;
+
+struct xfs_dir2_leaf_entry {
+	__be32 hashval;
+	__be32 address;
+};
+
+typedef struct xfs_dir2_leaf_entry xfs_dir2_leaf_entry_t;
+
+struct xfs_dir2_leaf_tail {
+	__be32 bestcount;
+};
+
+typedef struct xfs_dir2_leaf_tail xfs_dir2_leaf_tail_t;
+
+struct xfs_dir2_leaf {
+	xfs_dir2_leaf_hdr_t hdr;
+	xfs_dir2_leaf_entry_t __ents[0];
+};
+
+typedef struct xfs_dir2_leaf xfs_dir2_leaf_t;
+
+struct xfs_dir2_free_hdr {
+	__be32 magic;
+	__be32 firstdb;
+	__be32 nvalid;
+	__be32 nused;
+};
+
+typedef struct xfs_dir2_free_hdr xfs_dir2_free_hdr_t;
+
+struct xfs_dir2_free {
+	xfs_dir2_free_hdr_t hdr;
+	__be16 bests[0];
+};
+
+typedef struct xfs_dir2_free xfs_dir2_free_t;
+
+struct xfs_dir3_free_hdr {
+	struct xfs_dir3_blk_hdr hdr;
+	__be32 firstdb;
+	__be32 nvalid;
+	__be32 nused;
+	__be32 pad;
+};
+
+struct xfs_dir3_free {
+	struct xfs_dir3_free_hdr hdr;
+	__be16 bests[0];
+};
+
+enum xfs_dacmp {
+	XFS_CMP_DIFFERENT = 0,
+	XFS_CMP_EXACT = 1,
+	XFS_CMP_CASE = 2,
+};
+
+struct xfs_da_args {
+	struct xfs_da_geometry *geo;
+	const uint8_t *name;
+	int namelen;
+	uint8_t filetype;
+	void *value;
+	int valuelen;
+	unsigned int attr_filter;
+	unsigned int attr_flags;
+	xfs_dahash_t hashval;
+	xfs_ino_t inumber;
+	struct xfs_inode *dp;
+	struct xfs_trans *trans;
+	xfs_extlen_t total;
+	int whichfork;
+	xfs_dablk_t blkno;
+	int index;
+	xfs_dablk_t rmtblkno;
+	int rmtblkcnt;
+	int rmtvaluelen;
+	xfs_dablk_t blkno2;
+	int index2;
+	xfs_dablk_t rmtblkno2;
+	int rmtblkcnt2;
+	int rmtvaluelen2;
+	uint32_t op_flags;
+	enum xfs_dacmp cmpresult;
+};
+
+typedef struct xfs_da_args xfs_da_args_t;
+
+struct xfs_da_state_blk {
+	struct xfs_buf *bp;
+	xfs_dablk_t blkno;
+	xfs_daddr_t disk_blkno;
+	int index;
+	xfs_dahash_t hashval;
+	int magic;
+};
+
+typedef struct xfs_da_state_blk xfs_da_state_blk_t;
+
+struct xfs_da_state_path {
+	int active;
+	xfs_da_state_blk_t blk[5];
+};
+
+typedef struct xfs_da_state_path xfs_da_state_path_t;
+
+struct xfs_da_state {
+	xfs_da_args_t *args;
+	struct xfs_mount *mp;
+	xfs_da_state_path_t path;
+	xfs_da_state_path_t altpath;
+	unsigned char inleaf;
+	unsigned char extravalid;
+	unsigned char extraafter;
+	xfs_da_state_blk_t extrablk;
+};
+
+typedef struct xfs_da_state xfs_da_state_t;
+
+struct xfs_dir3_icleaf_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t stale;
+	struct xfs_dir2_leaf_entry *ents;
+};
+
+struct xfs_dir3_icfree_hdr {
+	uint32_t magic;
+	uint32_t firstdb;
+	uint32_t nvalid;
+	uint32_t nused;
+	__be16 *bests;
+};
+
+typedef uint32_t xfs_dqid_t;
+
+typedef uint64_t xfs_qcnt_t;
+
+struct xfs_quota_limits {
+	xfs_qcnt_t hard;
+	xfs_qcnt_t soft;
+	time64_t time;
+};
+
+struct xfs_def_quota {
+	struct xfs_quota_limits blk;
+	struct xfs_quota_limits ino;
+	struct xfs_quota_limits rtb;
+};
+
+struct xfs_quotainfo {
+	struct xarray qi_uquota_tree;
+	struct xarray qi_gquota_tree;
+	struct xarray qi_pquota_tree;
+	struct mutex qi_tree_lock;
+	struct xfs_inode *qi_uquotaip;
+	struct xfs_inode *qi_gquotaip;
+	struct xfs_inode *qi_pquotaip;
+	struct list_lru qi_lru;
+	int qi_dquots;
+	struct mutex qi_quotaofflock;
+	xfs_filblks_t qi_dqchunklen;
+	uint qi_dqperchunk;
+	struct xfs_def_quota qi_usr_default;
+	struct xfs_def_quota qi_grp_default;
+	struct xfs_def_quota qi_prj_default;
+	struct shrinker qi_shrinker;
+	time64_t qi_expiry_min;
+	time64_t qi_expiry_max;
+};
+
+typedef uint8_t xfs_dqtype_t;
+
+struct xfs_dquot_res {
+	xfs_qcnt_t reserved;
+	xfs_qcnt_t count;
+	xfs_qcnt_t hardlimit;
+	xfs_qcnt_t softlimit;
+	time64_t timer;
+};
+
+struct xfs_dq_logitem {
+	struct xfs_log_item qli_item;
+	struct xfs_dquot *qli_dquot;
+	xfs_lsn_t qli_flush_lsn;
+};
+
+struct xfs_dquot {
+	struct list_head q_lru;
+	struct xfs_mount *q_mount;
+	xfs_dqtype_t q_type;
+	uint16_t q_flags;
+	xfs_dqid_t q_id;
+	uint q_nrefs;
+	int q_bufoffset;
+	xfs_daddr_t q_blkno;
+	xfs_fileoff_t q_fileoffset;
+	struct xfs_dquot_res q_blk;
+	struct xfs_dquot_res q_ino;
+	struct xfs_dquot_res q_rtb;
+	struct xfs_dq_logitem q_logitem;
+	xfs_qcnt_t q_prealloc_lo_wmark;
+	xfs_qcnt_t q_prealloc_hi_wmark;
+	int64_t q_low_space[3];
+	struct mutex q_qlock;
+	struct completion q_flush;
+	atomic_t q_pincount;
+	struct wait_queue_head q_pinwait;
+};
+
+struct xfs_dqtrx {
+	struct xfs_dquot *qt_dquot;
+	uint64_t qt_blk_res;
+	int64_t qt_bcount_delta;
+	int64_t qt_delbcnt_delta;
+	uint64_t qt_rtblk_res;
+	uint64_t qt_rtblk_res_used;
+	int64_t qt_rtbcount_delta;
+	int64_t qt_delrtb_delta;
+	uint64_t qt_ino_res;
+	uint64_t qt_ino_res_used;
+	int64_t qt_icount_delta;
+};
+
+struct xfs_dquot_acct {
+	struct xfs_dqtrx dqs[6];
+};
+
+typedef int (*xfs_rmap_query_range_fn)(struct xfs_btree_cur *, const struct xfs_rmap_irec *, void *);
+
+typedef int (*xfs_alloc_query_range_fn)(struct xfs_btree_cur *, const struct xfs_alloc_rec_incore *, void *);
+
+struct fsmap {
+	__u32 fmr_device;
+	__u32 fmr_flags;
+	__u64 fmr_physical;
+	__u64 fmr_owner;
+	__u64 fmr_offset;
+	__u64 fmr_length;
+	__u64 fmr_reserved[3];
+};
+
+struct xfs_fsmap {
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	xfs_fileoff_t fmr_offset;
+	xfs_filblks_t fmr_length;
+};
+
+struct xfs_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct xfs_fsmap fmh_keys[2];
+};
+
+struct xfs_getfsmap_info {
+	struct xfs_fsmap_head *head;
+	struct fsmap *fsmap_recs;
+	struct xfs_buf *agf_bp;
+	struct xfs_perag *pag;
+	xfs_daddr_t next_daddr;
+	u64 missing_owner;
+	u32 dev;
+	struct xfs_rmap_irec low;
+	struct xfs_rmap_irec high;
+	bool last;
+};
+
+struct xfs_getfsmap_dev {
+	u32 dev;
+	int (*fn)(struct xfs_trans *, const struct xfs_fsmap *, struct xfs_getfsmap_info *);
+};
+
+struct xfs_mount;
+
+struct xstats_entry {
+	char *desc;
+	int endpoint;
+};
+
+struct xfs_icreate_log {
+	uint16_t icl_type;
+	uint16_t icl_size;
+	__be32 icl_ag;
+	__be32 icl_agbno;
+	__be32 icl_count;
+	__be32 icl_isize;
+	__be32 icl_length;
+	__be32 icl_gen;
+};
+
+struct xfs_icreate_item {
+	struct xfs_log_item ic_item;
+	struct xfs_icreate_log ic_format;
+};
+
+enum xlog_recover_reorder {
+	XLOG_REORDER_BUFFER_LIST = 0,
+	XLOG_REORDER_ITEM_LIST = 1,
+	XLOG_REORDER_INODE_BUFFER_LIST = 2,
+	XLOG_REORDER_CANCEL_LIST = 3,
+};
+
+struct xlog_recover_item;
+
+struct xlog_recover_item_ops {
+	uint16_t item_type;
+	enum xlog_recover_reorder (*reorder)(struct xlog_recover_item *);
+	void (*ra_pass2)(struct xlog *, struct xlog_recover_item *);
+	int (*commit_pass1)(struct xlog *, struct xlog_recover_item *);
+	int (*commit_pass2)(struct xlog *, struct list_head *, struct xlog_recover_item *, xfs_lsn_t);
+};
+
+struct xlog_recover_item {
+	struct list_head ri_list;
+	int ri_cnt;
+	int ri_total;
+	struct xfs_log_iovec *ri_buf;
+	const struct xlog_recover_item_ops *ri_ops;
+};
+
+struct ipc_proc_iface {
+	const char *path;
+	const char *header;
+	int ids;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct ipc_proc_iter {
+	struct ipc_namespace *ns;
+	struct pid_namespace *pid_ns;
+	struct ipc_proc_iface *iface;
+};
+
+struct subprocess_info {
+	struct work_struct work;
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
+	void *data;
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct request_key_auth {
 	struct callback_head rcu;
-	struct list_head list;
-	struct module *mod;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	struct list_head funcs;
-	unsigned int num_funcs;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
 };
 
-struct ftrace_init_func {
+struct assoc_array_edit;
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+};
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
+	union {
+		const void *cvalue;
+		void *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
 	struct list_head list;
-	long unsigned int ip;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+struct sw842_param {
+	u8 *in;
+	u8 bit;
+	u64 ilen;
+	u8 *out;
+	u8 *ostart;
+	u64 olen;
+};
+
+struct word_at_a_time {};
+
+struct rc {
+	long int (*fill)(void *, long unsigned int);
+	uint8_t *ptr;
+	uint8_t *buffer;
+	uint8_t *buffer_end;
+	long int buffer_size;
+	uint32_t code;
+	uint32_t range;
+	uint32_t bound;
+	void (*error)(char *);
+};
+
+struct lzma_header {
+	uint8_t pos;
+	uint32_t dict_size;
+	uint64_t dst_size;
+} __attribute__((packed));
+
+struct writer {
+	uint8_t *buffer;
+	uint8_t previous_byte;
+	size_t buffer_pos;
+	int bufsize;
+	size_t global_pos;
+	long int (*flush)(void *, long unsigned int);
+	struct lzma_header *header;
+};
+
+struct cstate {
+	int state;
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+};
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct bus_type *, char *);
+	ssize_t (*store)(struct bus_type *, const char *, size_t);
+};
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
+	struct fwnode_handle *fwnode;
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	long unsigned int flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+	u32 (*in)(void *, long unsigned int, size_t);
+	void (*out)(void *, long unsigned int, u32, size_t);
+	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
+	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+struct linux_logo {
+	int type;
+	unsigned int width;
+	unsigned int height;
+	unsigned int clutsize;
+	const unsigned char *clut;
+	const unsigned char *data;
+};
+
+struct fb_cmap_user {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+enum {
+	M_SYSTEM_PLL = 0,
+	M_PIXEL_PLL_A = 1,
+	M_PIXEL_PLL_B = 2,
+	M_PIXEL_PLL_C = 3,
+	M_VIDEO_PLL = 4,
+};
+
+enum POS1064 {
+	POS1064_XCURADDL = 0,
+	POS1064_XCURADDH = 1,
+	POS1064_XCURCTRL = 2,
+	POS1064_XCURCOL0RED = 3,
+	POS1064_XCURCOL0GREEN = 4,
+	POS1064_XCURCOL0BLUE = 5,
+	POS1064_XCURCOL1RED = 6,
+	POS1064_XCURCOL1GREEN = 7,
+	POS1064_XCURCOL1BLUE = 8,
+	POS1064_XCURCOL2RED = 9,
+	POS1064_XCURCOL2GREEN = 10,
+	POS1064_XCURCOL2BLUE = 11,
+	POS1064_XVREFCTRL = 12,
+	POS1064_XMULCTRL = 13,
+	POS1064_XPIXCLKCTRL = 14,
+	POS1064_XGENCTRL = 15,
+	POS1064_XMISCCTRL = 16,
+	POS1064_XGENIOCTRL = 17,
+	POS1064_XGENIODATA = 18,
+	POS1064_XZOOMCTRL = 19,
+	POS1064_XSENSETEST = 20,
+	POS1064_XCRCBITSEL = 21,
+	POS1064_XCOLKEYMASKL = 22,
+	POS1064_XCOLKEYMASKH = 23,
+	POS1064_XCOLKEYL = 24,
+	POS1064_XCOLKEYH = 25,
+	POS1064_XOUTPUTCONN = 26,
+	POS1064_XPANMODE = 27,
+	POS1064_XPWRCTRL = 28,
+};
+
+struct tty_file_private {
+	struct tty_struct *tty;
+	struct file *file;
+	struct list_head list;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct wake_irq {
+	struct device *dev;
+	unsigned int status;
+	int irq;
+	const char *name;
+};
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+enum nd_driver_flags {
+	ND_DRIVER_DIMM = 2,
+	ND_DRIVER_REGION_PMEM = 4,
+	ND_DRIVER_REGION_BLK = 8,
+	ND_DRIVER_NAMESPACE_IO = 16,
+	ND_DRIVER_NAMESPACE_PMEM = 32,
+	ND_DRIVER_DAX_PMEM = 128,
+};
+
+struct nd_region_data {
+	int ns_count;
+	int ns_active;
+	unsigned int hints_shift;
+	void *flush_wpq[0];
+};
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+struct dax_operations {
+	long int (*direct_access)(struct dax_device *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
+	int (*zero_page_range)(struct dax_device *, long unsigned int, size_t);
+	size_t (*recovery_write)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
+};
+
+struct dax_region {
+	int id;
+	int target_node;
+	struct kref kref;
+	struct device *dev;
+	unsigned int align;
+	struct ida ida;
+	struct resource res;
+	struct device *seed;
+	struct device *youngest;
+};
+
+struct dax_mapping {
+	struct device dev;
+	int range_id;
+	int id;
+};
+
+struct dev_dax_range {
+	long unsigned int pgoff;
+	struct range range;
+	struct dax_mapping *mapping;
+};
+
+struct dev_dax {
+	struct dax_region *region;
+	struct dax_device *dax_dev;
+	unsigned int align;
+	int target_node;
+	int id;
+	struct ida ida;
+	struct device dev;
+	struct dev_pagemap *pgmap;
+	int nr_range;
+	struct dev_dax_range *ranges;
+};
+
+struct dev_dax_data {
+	struct dax_region *dax_region;
+	struct dev_pagemap *pgmap;
+	resource_size_t size;
+	int id;
+};
+
+struct dax_device_driver {
+	struct device_driver drv;
+	struct list_head ids;
+	int match_always;
+	int (*probe)(struct dev_dax *);
+	void (*remove)(struct dev_dax *);
+};
+
+struct dax_id {
+	struct list_head list;
+	char dev_name[30];
+};
+
+enum id_action {
+	ID_REMOVE = 0,
+	ID_ADD = 1,
+};
+
+struct vio_device_id {
+	char type[32];
+	char compat[32];
+};
+
+enum vio_dev_family {
+	VDEVICE = 0,
+	PFO = 1,
+};
+
+struct vio_dev {
+	const char *name;
+	const char *type;
+	uint32_t unit_address;
+	uint32_t resource_id;
+	unsigned int irq;
+	struct {
+		size_t desired;
+		size_t entitled;
+		size_t allocated;
+		atomic_t allocs_failed;
+	} cmo;
+	enum vio_dev_family family;
+	struct device dev;
+};
+
+struct vio_driver {
+	const char *name;
+	const struct vio_device_id *id_table;
+	int (*probe)(struct vio_dev *, const struct vio_device_id *);
+	void (*remove)(struct vio_dev *);
+	void (*shutdown)(struct vio_dev *);
+	long unsigned int (*get_desired_dma)(struct vio_dev *);
+	const struct dev_pm_ops *pm;
+	struct device_driver driver;
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+struct srp_rport_identifiers {
+	u8 port_id[16];
+	u8 roles;
+};
+
+enum srp_rport_state {
+	SRP_RPORT_RUNNING = 0,
+	SRP_RPORT_BLOCKED = 1,
+	SRP_RPORT_FAIL_FAST = 2,
+	SRP_RPORT_LOST = 3,
+};
+
+struct srp_rport {
+	struct device dev;
+	u8 port_id[16];
+	u8 roles;
+	void *lld_data;
+	struct mutex mutex;
+	enum srp_rport_state state;
+	int reconnect_delay;
+	int failed_reconnects;
+	struct delayed_work reconnect_work;
+	int fast_io_fail_tmo;
+	int dev_loss_tmo;
+	struct delayed_work fast_io_fail_work;
+	struct delayed_work dev_loss_work;
+};
+
+struct srp_function_template {
+	bool has_rport_state;
+	bool reset_timer_if_blocked;
+	int *reconnect_delay;
+	int *fast_io_fail_tmo;
+	int *dev_loss_tmo;
+	int (*reconnect)(struct srp_rport *);
+	void (*terminate_rport_io)(struct srp_rport *);
+	void (*rport_delete)(struct srp_rport *);
+};
+
+enum {
+	TASKLET_STATE_SCHED = 0,
+	TASKLET_STATE_RUN = 1,
+};
+
+enum {
+	SRP_LOGIN_REQ = 0,
+	SRP_TSK_MGMT = 1,
+	SRP_CMD = 2,
+	SRP_I_LOGOUT = 3,
+	SRP_LOGIN_RSP = 192,
+	SRP_RSP = 193,
+	SRP_LOGIN_REJ = 194,
+	SRP_T_LOGOUT = 128,
+	SRP_CRED_REQ = 129,
+	SRP_AER_REQ = 130,
+	SRP_CRED_RSP = 65,
+	SRP_AER_RSP = 66,
+};
+
+enum {
+	SRP_BUF_FORMAT_DIRECT = 2,
+	SRP_BUF_FORMAT_INDIRECT = 4,
+};
+
+enum {
+	SRP_NO_DATA_DESC = 0,
+	SRP_DATA_DESC_DIRECT = 1,
+	SRP_DATA_DESC_INDIRECT = 2,
+	SRP_DATA_DESC_IMM = 3,
+};
+
+enum {
+	SRP_TSK_ABORT_TASK = 1,
+	SRP_TSK_ABORT_TASK_SET = 2,
+	SRP_TSK_CLEAR_TASK_SET = 4,
+	SRP_TSK_LUN_RESET = 8,
+	SRP_TSK_CLEAR_ACA = 64,
+};
+
+struct srp_direct_buf {
+	__be64 va;
+	__be32 key;
+	__be32 len;
+};
+
+struct srp_indirect_buf {
+	struct srp_direct_buf table_desc;
+	__be32 len;
+	struct srp_direct_buf desc_list[0];
+} __attribute__((packed));
+
+struct srp_login_req {
+	u8 opcode;
+	u8 reserved1[7];
+	u64 tag;
+	__be32 req_it_iu_len;
+	u8 reserved2[4];
+	__be16 req_buf_fmt;
+	u8 req_flags;
+	u8 reserved3[1];
+	__be16 imm_data_offset;
+	u8 reserved4[2];
+	u8 initiator_port_id[16];
+	u8 target_port_id[16];
+};
+
+struct srp_login_rsp {
+	u8 opcode;
+	u8 reserved1[3];
+	__be32 req_lim_delta;
+	u64 tag;
+	__be32 max_it_iu_len;
+	__be32 max_ti_iu_len;
+	__be16 buf_fmt;
+	u8 rsp_flags;
+	u8 reserved2[25];
+} __attribute__((packed));
+
+struct srp_login_rej {
+	u8 opcode;
+	u8 reserved1[3];
+	__be32 reason;
+	u64 tag;
+	u8 reserved2[8];
+	__be16 buf_fmt;
+	u8 reserved3[6];
+};
+
+struct srp_i_logout {
+	u8 opcode;
+	u8 reserved[7];
+	u64 tag;
+};
+
+struct srp_t_logout {
+	u8 opcode;
+	u8 sol_not;
+	u8 reserved[2];
+	__be32 reason;
+	u64 tag;
+};
+
+struct srp_tsk_mgmt {
+	u8 opcode;
+	u8 sol_not;
+	u8 reserved1[6];
+	u64 tag;
+	u8 reserved2[4];
+	struct scsi_lun lun;
+	u8 reserved3[2];
+	u8 tsk_mgmt_func;
+	u8 reserved4;
+	u64 task_tag;
+	u8 reserved5[8];
+};
+
+struct srp_cmd {
+	u8 opcode;
+	u8 sol_not;
+	u8 reserved1[3];
+	u8 buf_fmt;
+	u8 data_out_desc_cnt;
+	u8 data_in_desc_cnt;
+	u64 tag;
+	u8 reserved2[4];
+	struct scsi_lun lun;
+	u8 reserved3;
+	u8 task_attr;
+	u8 reserved4;
+	u8 add_cdb_len;
+	u8 cdb[16];
+	u8 add_data[0];
+};
+
+enum {
+	SRP_RSP_FLAG_RSPVALID = 1,
+	SRP_RSP_FLAG_SNSVALID = 2,
+	SRP_RSP_FLAG_DOOVER = 4,
+	SRP_RSP_FLAG_DOUNDER = 8,
+	SRP_RSP_FLAG_DIOVER = 16,
+	SRP_RSP_FLAG_DIUNDER = 32,
+};
+
+struct srp_rsp {
+	u8 opcode;
+	u8 sol_not;
+	u8 reserved1[2];
+	__be32 req_lim_delta;
+	u64 tag;
+	u8 reserved2[2];
+	u8 flags;
+	u8 status;
+	__be32 data_out_res_cnt;
+	__be32 data_in_res_cnt;
+	__be32 sense_data_len;
+	__be32 resp_data_len;
+	u8 data[0];
+} __attribute__((packed));
+
+union srp_iu {
+	struct srp_login_req login_req;
+	struct srp_login_rsp login_rsp;
+	struct srp_login_rej login_rej;
+	struct srp_i_logout i_logout;
+	struct srp_t_logout t_logout;
+	struct srp_tsk_mgmt tsk_mgmt;
+	struct srp_cmd cmd;
+	struct srp_rsp rsp;
+	u8 reserved[256];
+};
+
+enum viosrp_crq_headers {
+	VIOSRP_CRQ_FREE = 0,
+	VIOSRP_CRQ_CMD_RSP = 128,
+	VIOSRP_CRQ_INIT_RSP = 192,
+	VIOSRP_CRQ_XPORT_EVENT = 255,
+};
+
+enum viosrp_crq_init_formats {
+	VIOSRP_CRQ_INIT = 1,
+	VIOSRP_CRQ_INIT_COMPLETE = 2,
+};
+
+enum viosrp_crq_formats {
+	VIOSRP_SRP_FORMAT = 1,
+	VIOSRP_MAD_FORMAT = 2,
+	VIOSRP_OS400_FORMAT = 3,
+	VIOSRP_AIX_FORMAT = 4,
+	VIOSRP_LINUX_FORMAT = 5,
+	VIOSRP_INLINE_FORMAT = 6,
+};
+
+enum viosrp_crq_status {
+	VIOSRP_OK = 0,
+	VIOSRP_NONRECOVERABLE_ERR = 1,
+	VIOSRP_VIOLATES_MAX_XFER = 2,
+	VIOSRP_PARTNER_PANIC = 3,
+	VIOSRP_DEVICE_BUSY = 8,
+	VIOSRP_ADAPTER_FAIL = 16,
+	VIOSRP_OK2 = 153,
+};
+
+struct viosrp_crq {
+	union {
+		__be64 high;
+		struct {
+			u8 valid;
+			u8 format;
+			u8 reserved;
+			u8 status;
+			__be16 timeout;
+			__be16 IU_length;
+		};
+	};
+	__be64 IU_data_ptr;
+};
+
+enum viosrp_mad_types {
+	VIOSRP_EMPTY_IU_TYPE = 1,
+	VIOSRP_ERROR_LOG_TYPE = 2,
+	VIOSRP_ADAPTER_INFO_TYPE = 3,
+	VIOSRP_CAPABILITIES_TYPE = 5,
+	VIOSRP_ENABLE_FAST_FAIL = 8,
+};
+
+enum viosrp_mad_status {
+	VIOSRP_MAD_SUCCESS = 0,
+	VIOSRP_MAD_NOT_SUPPORTED = 241,
+	VIOSRP_MAD_FAILED = 247,
+};
+
+enum viosrp_capability_type {
+	MIGRATION_CAPABILITIES = 1,
+	RESERVATION_CAPABILITIES = 2,
+};
+
+enum viosrp_capability_support {
+	SERVER_DOES_NOT_SUPPORTS_CAP = 0,
+	SERVER_SUPPORTS_CAP = 1,
+	SERVER_CAP_DATA = 2,
+};
+
+enum viosrp_reserve_type {
+	CLIENT_RESERVE_SCSI_2 = 1,
+};
+
+enum viosrp_capability_flag {
+	CLIENT_MIGRATED = 1,
+	CLIENT_RECONNECT = 2,
+	CAP_LIST_SUPPORTED = 4,
+	CAP_LIST_DATA = 8,
+};
+
+struct mad_common {
+	__be32 type;
+	__be16 status;
+	__be16 length;
+	__be64 tag;
+};
+
+struct viosrp_empty_iu {
+	struct mad_common common;
+	__be64 buffer;
+	__be32 port;
+};
+
+struct viosrp_error_log {
+	struct mad_common common;
+	__be64 buffer;
+};
+
+struct viosrp_adapter_info {
+	struct mad_common common;
+	__be64 buffer;
+};
+
+struct viosrp_fast_fail {
+	struct mad_common common;
+};
+
+struct viosrp_capabilities {
+	struct mad_common common;
+	__be64 buffer;
+};
+
+struct mad_capability_common {
+	__be32 cap_type;
+	__be16 length;
+	__be16 server_support;
+};
+
+struct mad_reserve_cap {
+	struct mad_capability_common common;
+	__be32 type;
+};
+
+struct mad_migration_cap {
+	struct mad_capability_common common;
+	__be32 ecl;
+};
+
+struct capabilities {
+	__be32 flags;
+	char name[32];
+	char loc[32];
+	struct mad_migration_cap migration;
+	struct mad_reserve_cap reserve;
+};
+
+union mad_iu {
+	struct viosrp_empty_iu empty_iu;
+	struct viosrp_error_log error_log;
+	struct viosrp_adapter_info adapter_info;
+	struct viosrp_fast_fail fast_fail;
+	struct viosrp_capabilities capabilities;
+};
+
+union viosrp_iu {
+	union srp_iu srp;
+	union mad_iu mad;
+};
+
+struct mad_adapter_info_data {
+	char srp_version[8];
+	char partition_name[96];
+	__be32 partition_number;
+	__be32 mad_version;
+	__be32 os_type;
+	__be32 port_max_txu[8];
+};
+
+struct crq_queue {
+	struct viosrp_crq *msgs;
+	int size;
+	int cur;
+	dma_addr_t msg_token;
+	spinlock_t lock;
+};
+
+struct ibmvscsi_host_data;
+
+struct srp_event_struct {
+	union viosrp_iu *xfer_iu;
+	struct scsi_cmnd *cmnd;
+	struct list_head list;
+	void (*done)(struct srp_event_struct *);
+	struct viosrp_crq crq;
+	struct ibmvscsi_host_data *hostdata;
+	atomic_t free;
+	union viosrp_iu iu;
+	void (*cmnd_done)(struct scsi_cmnd *);
+	struct completion comp;
+	struct timer_list timer;
+	union viosrp_iu *sync_srp;
+	struct srp_direct_buf *ext_list;
+	dma_addr_t ext_list_token;
+};
+
+enum ibmvscsi_host_action {
+	IBMVSCSI_HOST_ACTION_NONE = 0,
+	IBMVSCSI_HOST_ACTION_RESET = 1,
+	IBMVSCSI_HOST_ACTION_REENABLE = 2,
+	IBMVSCSI_HOST_ACTION_UNBLOCK = 3,
+};
+
+struct event_pool {
+	struct srp_event_struct *events;
+	u32 size;
+	int next;
+	union viosrp_iu *iu_storage;
+	dma_addr_t iu_token;
+};
+
+struct ibmvscsi_host_data {
+	struct list_head host_list;
+	atomic_t request_limit;
+	int client_migrated;
+	enum ibmvscsi_host_action action;
+	struct device *dev;
+	struct event_pool pool;
+	struct crq_queue queue;
+	struct tasklet_struct srp_task;
+	struct list_head sent;
+	struct Scsi_Host *host;
+	struct task_struct *work_thread;
+	wait_queue_head_t work_wait_q;
+	struct mad_adapter_info_data madapter_info;
+	struct capabilities caps;
+	dma_addr_t caps_addr;
+	dma_addr_t adapter_info_addr;
+};
+
+struct sil24_prb {
+	__le16 ctrl;
+	__le16 prot;
+	__le32 rx_cnt;
+	u8 fis[24];
+};
+
+struct sil24_sge {
+	__le64 addr;
+	__le32 cnt;
+	__le32 flags;
+};
+
+enum {
+	SIL24_HOST_BAR = 0,
+	SIL24_PORT_BAR = 2,
+	SIL24_PRB_SZ = 64,
+	SIL24_MAX_SGT = 1023,
+	SIL24_MAX_SGE = 4093,
+	HOST_SLOT_STAT = 0,
+	HOST_CTRL = 64,
+	HOST_IRQ_STAT = 68,
+	HOST_PHY_CFG = 72,
+	HOST_BIST_CTRL = 80,
+	HOST_BIST_PTRN = 84,
+	HOST_BIST_STAT = 88,
+	HOST_MEM_BIST_STAT = 92,
+	HOST_FLASH_CMD = 112,
+	HOST_FLASH_DATA = 116,
+	HOST_TRANSITION_DETECT = 117,
+	HOST_GPIO_CTRL = 118,
+	HOST_I2C_ADDR = 120,
+	HOST_I2C_DATA = 124,
+	HOST_I2C_XFER_CNT = 126,
+	HOST_I2C_CTRL = 127,
+	HOST_SSTAT_ATTN = -2147483648,
+	HOST_CTRL_M66EN = 65536,
+	HOST_CTRL_TRDY = 131072,
+	HOST_CTRL_STOP = 262144,
+	HOST_CTRL_DEVSEL = 524288,
+	HOST_CTRL_REQ64 = 1048576,
+	HOST_CTRL_GLOBAL_RST = -2147483648,
+	PORT_REGS_SIZE = 8192,
+	PORT_LRAM = 0,
+	PORT_LRAM_SLOT_SZ = 128,
+	PORT_PMP = 3968,
+	PORT_PMP_STATUS = 0,
+	PORT_PMP_QACTIVE = 4,
+	PORT_PMP_SIZE = 8,
+	PORT_CTRL_STAT = 4096,
+	PORT_CTRL_CLR = 4100,
+	PORT_IRQ_STAT = 4104,
+	PORT_IRQ_ENABLE_SET = 4112,
+	PORT_IRQ_ENABLE_CLR = 4116,
+	PORT_ACTIVATE_UPPER_ADDR = 4124,
+	PORT_EXEC_FIFO = 4128,
+	PORT_CMD_ERR = 4132,
+	PORT_FIS_CFG = 4136,
+	PORT_FIFO_THRES = 4140,
+	PORT_DECODE_ERR_CNT = 4160,
+	PORT_DECODE_ERR_THRESH = 4162,
+	PORT_CRC_ERR_CNT = 4164,
+	PORT_CRC_ERR_THRESH = 4166,
+	PORT_HSHK_ERR_CNT = 4168,
+	PORT_HSHK_ERR_THRESH = 4170,
+	PORT_PHY_CFG = 4176,
+	PORT_SLOT_STAT = 6144,
+	PORT_CMD_ACTIVATE = 7168,
+	PORT_CONTEXT = 7684,
+	PORT_EXEC_DIAG = 7680,
+	PORT_PSD_DIAG = 7744,
+	PORT_SCONTROL = 7936,
+	PORT_SSTATUS = 7940,
+	PORT_SERROR = 7944,
+	PORT_SACTIVE = 7948,
+	PORT_CS_PORT_RST = 1,
+	PORT_CS_DEV_RST = 2,
+	PORT_CS_INIT = 4,
+	PORT_CS_IRQ_WOC = 8,
+	PORT_CS_CDB16 = 32,
+	PORT_CS_PMP_RESUME = 64,
+	PORT_CS_32BIT_ACTV = 1024,
+	PORT_CS_PMP_EN = 8192,
+	PORT_CS_RDY = -2147483648,
+	PORT_IRQ_COMPLETE = 1,
+	PORT_IRQ_ERROR = 2,
+	PORT_IRQ_PORTRDY_CHG = 4,
+	PORT_IRQ_PWR_CHG = 8,
+	PORT_IRQ_PHYRDY_CHG = 16,
+	PORT_IRQ_COMWAKE = 32,
+	PORT_IRQ_UNK_FIS = 64,
+	PORT_IRQ_DEV_XCHG = 128,
+	PORT_IRQ_8B10B = 256,
+	PORT_IRQ_CRC = 512,
+	PORT_IRQ_HANDSHAKE = 1024,
+	PORT_IRQ_SDB_NOTIFY = 2048,
+	DEF_PORT_IRQ = 2259,
+	PORT_IRQ_RAW_SHIFT = 16,
+	PORT_IRQ_MASKED_MASK = 2047,
+	PORT_IRQ_RAW_MASK = 134152192,
+	PORT_IRQ_STEER_SHIFT = 30,
+	PORT_IRQ_STEER_MASK = -1073741824,
+	PORT_CERR_DEV = 1,
+	PORT_CERR_SDB = 2,
+	PORT_CERR_DATA = 3,
+	PORT_CERR_SEND = 4,
+	PORT_CERR_INCONSISTENT = 5,
+	PORT_CERR_DIRECTION = 6,
+	PORT_CERR_UNDERRUN = 7,
+	PORT_CERR_OVERRUN = 8,
+	PORT_CERR_PKT_PROT = 11,
+	PORT_CERR_SGT_BOUNDARY = 16,
+	PORT_CERR_SGT_TGTABRT = 17,
+	PORT_CERR_SGT_MSTABRT = 18,
+	PORT_CERR_SGT_PCIPERR = 19,
+	PORT_CERR_CMD_BOUNDARY = 24,
+	PORT_CERR_CMD_TGTABRT = 25,
+	PORT_CERR_CMD_MSTABRT = 26,
+	PORT_CERR_CMD_PCIPERR = 27,
+	PORT_CERR_XFR_UNDEF = 32,
+	PORT_CERR_XFR_TGTABRT = 33,
+	PORT_CERR_XFR_MSTABRT = 34,
+	PORT_CERR_XFR_PCIPERR = 35,
+	PORT_CERR_SENDSERVICE = 36,
+	PRB_CTRL_PROTOCOL = 1,
+	PRB_CTRL_PACKET_READ = 16,
+	PRB_CTRL_PACKET_WRITE = 32,
+	PRB_CTRL_NIEN = 64,
+	PRB_CTRL_SRST = 128,
+	PRB_PROT_PACKET = 1,
+	PRB_PROT_TCQ = 2,
+	PRB_PROT_NCQ = 4,
+	PRB_PROT_READ = 8,
+	PRB_PROT_WRITE = 16,
+	PRB_PROT_TRANSPARENT = 32,
+	SGE_TRM = -2147483648,
+	SGE_LNK = 1073741824,
+	SGE_DRD = 536870912,
+	SIL24_MAX_CMDS = 31,
+	BID_SIL3124 = 0,
+	BID_SIL3132 = 1,
+	BID_SIL3131 = 2,
+	SIL24_COMMON_FLAGS = 918658,
+	SIL24_FLAG_PCIX_IRQ_WOC = 16777216,
+	IRQ_STAT_4PORTS = 15,
+};
+
+struct sil24_ata_block {
+	struct sil24_prb prb;
+	struct sil24_sge sge[4093];
+};
+
+struct sil24_atapi_block {
+	struct sil24_prb prb;
+	u8 cdb[16];
+	struct sil24_sge sge[4093];
+};
+
+union sil24_cmd_block {
+	struct sil24_ata_block ata;
+	struct sil24_atapi_block atapi;
+};
+
+struct sil24_cerr_info {
+	unsigned int err_mask;
+	unsigned int action;
+	const char *desc;
+};
+
+struct sil24_port_priv {
+	union sil24_cmd_block *cmd_block;
+	dma_addr_t cmd_block_dma;
+	int do_port_rst;
+};
+
+typedef enum {
+	e1000_undefined = 0,
+	e1000_82542_rev2_0 = 1,
+	e1000_82542_rev2_1 = 2,
+	e1000_82543 = 3,
+	e1000_82544 = 4,
+	e1000_82540 = 5,
+	e1000_82545 = 6,
+	e1000_82545_rev_3 = 7,
+	e1000_82546 = 8,
+	e1000_ce4100 = 9,
+	e1000_82546_rev_3 = 10,
+	e1000_82541 = 11,
+	e1000_82541_rev_2 = 12,
+	e1000_82547 = 13,
+	e1000_82547_rev_2 = 14,
+	e1000_num_macs = 15,
+} e1000_mac_type;
+
+typedef enum {
+	e1000_eeprom_uninitialized = 0,
+	e1000_eeprom_spi = 1,
+	e1000_eeprom_microwire = 2,
+	e1000_eeprom_flash = 3,
+	e1000_eeprom_none = 4,
+	e1000_num_eeprom_types = 5,
+} e1000_eeprom_type;
+
+typedef enum {
+	e1000_media_type_copper___2 = 0,
+	e1000_media_type_fiber___2 = 1,
+	e1000_media_type_internal_serdes___2 = 2,
+	e1000_num_media_types___2 = 3,
+} e1000_media_type;
+
+typedef enum {
+	E1000_FC_NONE = 0,
+	E1000_FC_RX_PAUSE = 1,
+	E1000_FC_TX_PAUSE = 2,
+	E1000_FC_FULL = 3,
+	E1000_FC_DEFAULT = 255,
+} e1000_fc_type;
+
+struct e1000_shadow_ram___2 {
+	u16 eeprom_word;
+	bool modified;
+};
+
+typedef enum {
+	e1000_bus_type_unknown = 0,
+	e1000_bus_type_pci = 1,
+	e1000_bus_type_pcix = 2,
+	e1000_bus_type_reserved = 3,
+} e1000_bus_type;
+
+typedef enum {
+	e1000_bus_speed_unknown = 0,
+	e1000_bus_speed_33 = 1,
+	e1000_bus_speed_66 = 2,
+	e1000_bus_speed_100 = 3,
+	e1000_bus_speed_120 = 4,
+	e1000_bus_speed_133 = 5,
+	e1000_bus_speed_reserved = 6,
+} e1000_bus_speed;
+
+typedef enum {
+	e1000_bus_width_unknown___2 = 0,
+	e1000_bus_width_32___2 = 1,
+	e1000_bus_width_64___2 = 2,
+	e1000_bus_width_reserved___2 = 3,
+} e1000_bus_width;
+
+typedef enum {
+	e1000_cable_length_50 = 0,
+	e1000_cable_length_50_80 = 1,
+	e1000_cable_length_80_110 = 2,
+	e1000_cable_length_110_140 = 3,
+	e1000_cable_length_140 = 4,
+	e1000_cable_length_undefined = 255,
+} e1000_cable_length;
+
+typedef enum {
+	e1000_10bt_ext_dist_enable_normal = 0,
+	e1000_10bt_ext_dist_enable_lower = 1,
+	e1000_10bt_ext_dist_enable_undefined = 255,
+} e1000_10bt_ext_dist_enable;
+
+typedef enum {
+	e1000_rev_polarity_normal___2 = 0,
+	e1000_rev_polarity_reversed___2 = 1,
+	e1000_rev_polarity_undefined___2 = 255,
+} e1000_rev_polarity;
+
+typedef enum {
+	e1000_downshift_normal = 0,
+	e1000_downshift_activated = 1,
+	e1000_downshift_undefined = 255,
+} e1000_downshift;
+
+typedef enum {
+	e1000_smart_speed_default___2 = 0,
+	e1000_smart_speed_on___2 = 1,
+	e1000_smart_speed_off___2 = 2,
+} e1000_smart_speed;
+
+typedef enum {
+	e1000_polarity_reversal_enabled = 0,
+	e1000_polarity_reversal_disabled = 1,
+	e1000_polarity_reversal_undefined = 255,
+} e1000_polarity_reversal;
+
+typedef enum {
+	e1000_auto_x_mode_manual_mdi = 0,
+	e1000_auto_x_mode_manual_mdix = 1,
+	e1000_auto_x_mode_auto1 = 2,
+	e1000_auto_x_mode_auto2 = 3,
+	e1000_auto_x_mode_undefined = 255,
+} e1000_auto_x_mode;
+
+typedef enum {
+	e1000_1000t_rx_status_not_ok___2 = 0,
+	e1000_1000t_rx_status_ok___2 = 1,
+	e1000_1000t_rx_status_undefined___2 = 255,
+} e1000_1000t_rx_status;
+
+typedef enum {
+	e1000_phy_m88___2 = 0,
+	e1000_phy_igp___2 = 1,
+	e1000_phy_8211 = 2,
+	e1000_phy_8201 = 3,
+	e1000_phy_undefined = 255,
+} e1000_phy_type;
+
+typedef enum {
+	e1000_ms_hw_default___2 = 0,
+	e1000_ms_force_master___2 = 1,
+	e1000_ms_force_slave___2 = 2,
+	e1000_ms_auto___2 = 3,
+} e1000_ms_type;
+
+typedef enum {
+	e1000_ffe_config_enabled = 0,
+	e1000_ffe_config_active = 1,
+	e1000_ffe_config_blocked = 2,
+} e1000_ffe_config;
+
+typedef enum {
+	e1000_dsp_config_disabled = 0,
+	e1000_dsp_config_enabled = 1,
+	e1000_dsp_config_activated = 2,
+	e1000_dsp_config_undefined = 255,
+} e1000_dsp_config;
+
+struct e1000_phy_info___2 {
+	e1000_cable_length cable_length;
+	e1000_10bt_ext_dist_enable extended_10bt_distance;
+	e1000_rev_polarity cable_polarity;
+	e1000_downshift downshift;
+	e1000_polarity_reversal polarity_correction;
+	e1000_auto_x_mode mdix_mode;
+	e1000_1000t_rx_status local_rx;
+	e1000_1000t_rx_status remote_rx;
+};
+
+struct e1000_eeprom_info {
+	e1000_eeprom_type type;
+	u16 word_size;
+	u16 opcode_bits;
+	u16 address_bits;
+	u16 delay_usec;
+	u16 page_size;
+};
+
+struct e1000_rx_desc {
+	__le64 buffer_addr;
+	__le16 length;
+	__le16 csum;
+	u8 status;
+	u8 errors;
+	__le16 special;
+};
+
+struct e1000_tx_desc {
+	__le64 buffer_addr;
+	union {
+		__le32 data;
+		struct {
+			__le16 length;
+			u8 cso;
+			u8 cmd;
+		} flags;
+	} lower;
+	union {
+		__le32 data;
+		struct {
+			u8 status;
+			u8 css;
+			__le16 special;
+		} fields;
+	} upper;
+};
+
+struct e1000_hw_stats___2 {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 txerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorcl;
+	u64 gorch;
+	u64 gotcl;
+	u64 gotch;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rlerrc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 torl;
+	u64 torh;
+	u64 totl;
+	u64 toth;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+};
+
+struct e1000_hw___2 {
+	u8 *hw_addr;
+	u8 *flash_address;
+	void *ce4100_gbe_mdio_base_virt;
+	e1000_mac_type mac_type;
+	e1000_phy_type phy_type;
+	u32 phy_init_script;
+	e1000_media_type media_type;
+	void *back;
+	struct e1000_shadow_ram___2 *eeprom_shadow_ram;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	e1000_fc_type fc;
+	e1000_bus_speed bus_speed;
+	e1000_bus_width bus_width;
+	e1000_bus_type bus_type;
+	struct e1000_eeprom_info eeprom;
+	e1000_ms_type master_slave;
+	e1000_ms_type original_master_slave;
+	e1000_ffe_config ffe_config_state;
+	u32 asf_firmware_present;
+	u32 eeprom_semaphore_present;
+	long unsigned int io_base;
+	u32 phy_id;
+	u32 phy_revision;
+	u32 phy_addr;
+	u32 original_fc;
+	u32 txcw;
+	u32 autoneg_failed;
+	u32 max_frame_size;
+	u32 min_frame_size;
+	u32 mc_filter_type;
+	u32 num_mc_addrs;
+	u32 collision_delta;
+	u32 tx_packet_delta;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	bool tx_pkt_filtering;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	u16 phy_spd_default;
+	u16 autoneg_advertised;
+	u16 pci_cmd_word;
+	u16 fc_high_water;
+	u16 fc_low_water;
+	u16 fc_pause_time;
+	u16 current_ifs_val;
+	u16 ifs_min_val;
+	u16 ifs_max_val;
+	u16 ifs_step_size;
+	u16 ifs_ratio;
+	u16 device_id;
+	u16 vendor_id;
+	u16 subsystem_id;
+	u16 subsystem_vendor_id;
+	u8 revision_id;
+	u8 autoneg;
+	u8 mdix;
+	u8 forced_speed_duplex;
+	u8 wait_autoneg_complete;
+	u8 dma_fairness;
+	u8 mac_addr[6];
+	u8 perm_mac_addr[6];
+	bool disable_polarity_correction;
+	bool speed_downgraded;
+	e1000_smart_speed smart_speed;
+	e1000_dsp_config dsp_config_state;
+	bool get_link_status;
+	bool serdes_has_link;
+	bool tbi_compatibility_en;
+	bool tbi_compatibility_on;
+	bool laa_is_present;
+	bool phy_reset_disable;
+	bool initialize_hw_bits_disable;
+	bool fc_send_xon;
+	bool fc_strict_ieee;
+	bool report_tx_early;
+	bool adaptive_ifs;
+	bool ifs_params_forced;
+	bool in_ifs_mode;
+	bool mng_reg_access_disabled;
+	bool leave_av_bit_off;
+	bool bad_tx_carr_stats_fd;
+	bool has_smbus;
+};
+
+struct e1000_tx_buffer {
+	struct sk_buff *skb;
+	dma_addr_t dma;
+	long unsigned int time_stamp;
+	u16 length;
+	u16 next_to_watch;
+	bool mapped_as_page;
+	short unsigned int segs;
+	unsigned int bytecount;
+};
+
+struct e1000_rx_buffer {
+	union {
+		struct page *page;
+		u8 *data;
+	} rxbuf;
+	dma_addr_t dma;
+};
+
+struct e1000_tx_ring {
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	unsigned int next_to_use;
+	unsigned int next_to_clean;
+	struct e1000_tx_buffer *buffer_info;
+	u16 tdh;
+	u16 tdt;
+	bool last_tx_tso;
+};
+
+struct e1000_rx_ring {
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	unsigned int next_to_use;
+	unsigned int next_to_clean;
+	struct e1000_rx_buffer *buffer_info;
+	struct sk_buff *rx_skb_top;
+	int cpu;
+	u16 rdh;
+	u16 rdt;
+};
+
+struct e1000_adapter___2 {
+	long unsigned int active_vlans[64];
+	u16 mng_vlan_id;
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u32 wol;
+	u32 smartspeed;
+	u32 en_mng_pt;
+	u16 link_speed;
+	u16 link_duplex;
+	spinlock_t stats_lock;
+	unsigned int total_tx_bytes;
+	unsigned int total_tx_packets;
+	unsigned int total_rx_bytes;
+	unsigned int total_rx_packets;
+	u32 itr;
+	u32 itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	u8 fc_autoneg;
+	struct e1000_tx_ring *tx_ring;
+	unsigned int restart_queue;
+	u32 txd_cmd;
+	u32 tx_int_delay;
+	u32 tx_abs_int_delay;
+	u32 gotcl;
+	u64 gotcl_old;
+	u64 tpt_old;
+	u64 colc_old;
+	u32 tx_timeout_count;
+	u32 tx_fifo_head;
+	u32 tx_head_addr;
+	u32 tx_fifo_size;
+	u8 tx_timeout_factor;
+	atomic_t tx_fifo_stall;
+	bool pcix_82544;
+	bool detect_tx_hung;
+	bool dump_buffers;
+	bool (*clean_rx)(struct e1000_adapter___2 *, struct e1000_rx_ring *, int *, int);
+	void (*alloc_rx_buf)(struct e1000_adapter___2 *, struct e1000_rx_ring *, int);
+	struct e1000_rx_ring *rx_ring;
+	struct napi_struct napi;
+	int num_tx_queues;
+	int num_rx_queues;
+	u64 hw_csum_err;
+	u64 hw_csum_good;
+	u32 alloc_rx_buff_failed;
+	u32 rx_int_delay;
+	u32 rx_abs_int_delay;
+	bool rx_csum;
+	u32 gorcl;
+	u64 gorcl_old;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct e1000_hw___2 hw;
+	struct e1000_hw_stats___2 stats;
+	struct e1000_phy_info___2 phy_info;
+	struct e1000_phy_stats phy_stats;
+	u32 test_icr;
+	struct e1000_tx_ring test_tx_ring;
+	struct e1000_rx_ring test_rx_ring;
+	int msg_enable;
+	bool tso_force;
+	bool smart_power_down;
+	bool quad_port_a;
+	long unsigned int flags;
+	u32 eeprom_wol;
+	int bars;
+	int need_ioport;
+	bool discarding;
+	struct work_struct reset_task;
+	struct delayed_work watchdog_task;
+	struct delayed_work fifo_stall_task;
+	struct delayed_work phy_info_task;
+};
+
+enum e1000_state_t___2 {
+	__E1000_TESTING___2 = 0,
+	__E1000_RESETTING___2 = 1,
+	__E1000_DOWN___2 = 2,
+	__E1000_DISABLED = 3,
+};
+
+enum {
+	NETDEV_STATS = 0,
+	E1000_STATS = 1,
+};
+
+struct e1000_stats {
+	char stat_string[32];
+	int type;
+	int sizeof_stat;
+	int stat_offset;
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct i2c_smbus_alert_setup {
+	int irq;
+};
+
+struct trace_event_raw_smbus_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 flags;
+	__u16 addr;
+	__u8 command;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 read_write;
+	__u8 command;
+	__s16 res;
+	__u32 protocol;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_smbus_write {};
+
+struct trace_event_data_offsets_smbus_read {};
+
+struct trace_event_data_offsets_smbus_reply {};
+
+struct trace_event_data_offsets_smbus_result {};
+
+typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *);
+
+typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int);
+
+typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *, int);
+
+typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+enum {
+	DM_TIO_INSIDE_DM_IO = 0,
+	DM_TIO_IS_DUPLICATE_BIO = 1,
+};
+
+enum {
+	DM_IO_ACCOUNTED = 0,
+	DM_IO_WAS_SPLIT = 1,
+};
+
+struct dax_holder_operations {
+	int (*notify_failure)(struct dax_device *, u64, u64, int);
+};
+
+struct clone_info {
+	struct dm_table *map;
+	struct bio *bio;
+	struct dm_io *io;
+	sector_t sector;
+	unsigned int sector_count;
+	bool is_abnormal_io: 1;
+	bool submit_as_polled: 1;
+};
+
+struct table_device {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev dm_dev;
+};
+
+struct dm_pr {
+	u64 old_key;
+	u64 new_key;
+	u32 flags;
+	bool abort;
+	bool fail_early;
+	int ret;
+	enum pr_type type;
+};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_struct srcu;
+	struct notifier_block *head;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+};
+
+struct cpufreq_freqs {
+	struct cpufreq_policy *policy;
+	unsigned int old;
+	unsigned int new;
+	u8 flags;
+};
+
+struct cpufreq_driver {
+	char name[16];
+	u16 flags;
+	void *driver_data;
+	int (*init)(struct cpufreq_policy *);
+	int (*verify)(struct cpufreq_policy_data *);
+	int (*setpolicy)(struct cpufreq_policy *);
+	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
+	int (*target_index)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
+	void (*adjust_perf)(unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*get)(unsigned int);
+	void (*update_limits)(unsigned int);
+	int (*bios_limit)(int, unsigned int *);
+	int (*online)(struct cpufreq_policy *);
+	int (*offline)(struct cpufreq_policy *);
+	int (*exit)(struct cpufreq_policy *);
+	int (*suspend)(struct cpufreq_policy *);
+	int (*resume)(struct cpufreq_policy *);
+	void (*ready)(struct cpufreq_policy *);
+	struct freq_attr **attr;
+	bool boost_enabled;
+	int (*set_boost)(struct cpufreq_policy *, int);
+	void (*register_em)(struct cpufreq_policy *);
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
+};
+
+struct alias_prop {
+	struct list_head link;
+	const char *alias;
+	struct device_node *np;
+	int id;
+	char stem[0];
+};
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long int tv_nsec;
+};
+
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
+};
+
+struct user_msghdr {
+	void *msg_name;
+	int msg_namelen;
+	struct iovec *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+struct mmsghdr {
+	struct user_msghdr msg_hdr;
+	unsigned int msg_len;
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char *ifcu_buf;
+		struct ifreq *ifcu_req;
+	} ifc_ifcu;
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+typedef s32 compat_int_t;
+
+typedef u32 compat_uint_t;
+
+typedef u32 compat_ulong_t;
+
+typedef u32 compat_caddr_t;
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_if_settings {
+	unsigned int type;
+	unsigned int size;
+	compat_uptr_t ifs_ifsu;
+};
+
+struct compat_ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short int ifru_flags;
+		compat_int_t ifru_ivalue;
+		compat_int_t ifru_mtu;
+		struct compat_ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		compat_caddr_t ifru_data;
+		struct compat_if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct compat_mmsghdr {
+	struct compat_msghdr msg_hdr;
+	compat_uint_t msg_len;
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct net_bridge;
+
+struct used_address {
+	struct __kernel_sockaddr_storage name;
+	unsigned int name_len;
+};
+
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
+struct xdp_attachment_info {
+	struct bpf_prog *prog;
+	u32 flags;
+};
+
+struct xdp_buff_xsk;
+
+struct xdp_desc;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+};
+
+struct nvmem_cell;
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	short unsigned int nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	__NLMSGERR_ATTR_MAX = 5,
+	NLMSGERR_ATTR_MAX = 4,
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct netlink_sock {
+	struct sock sk;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 flags;
+	u32 subscriptions;
+	u32 ngroups;
+	long unsigned int *groups;
+	long unsigned int state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	long unsigned int masks[0];
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+struct eee_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_eee eee;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+};
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+enum {
+	SVC_POOL_AUTO = -1,
+	SVC_POOL_GLOBAL = 0,
+	SVC_POOL_PERCPU = 1,
+	SVC_POOL_PERNODE = 2,
+};
+
+struct svc_pool_map {
+	int count;
+	int mode;
+	unsigned int npools;
+	unsigned int *pool_to;
+	unsigned int *to_pool;
+};
+
+struct rpc_iostats {
+	spinlock_t om_lock;
+	long unsigned int om_ops;
+	long unsigned int om_ntrans;
+	long unsigned int om_timeouts;
+	long long unsigned int om_bytes_sent;
+	long long unsigned int om_bytes_recv;
+	ktime_t om_queue;
+	ktime_t om_rtt;
+	ktime_t om_execute;
+	long unsigned int om_error_status;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef __u32 Elf32_Word;
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct cache_index_dir;
+
+struct cache_dir {
+	struct kobject *kobj;
+	struct cache_index_dir *index;
+};
+
+struct cache;
+
+struct cache_index_dir {
+	struct kobject kobj;
+	struct cache_index_dir *next;
+	struct cache *cache;
+};
+
+struct cache {
+	struct device_node *ofnode;
+	struct cpumask shared_cpu_map;
+	int type;
+	int level;
+	int group_id;
+	struct list_head list;
+	struct cache *next_local;
+};
+
+struct cache_type_info___2 {
+	const char *name;
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+enum instruction_type {
+	COMPUTE = 0,
+	LOAD = 1,
+	LOAD_MULTI = 2,
+	LOAD_FP = 3,
+	LOAD_VMX = 4,
+	LOAD_VSX = 5,
+	STORE = 6,
+	STORE_MULTI = 7,
+	STORE_FP = 8,
+	STORE_VMX = 9,
+	STORE_VSX = 10,
+	LARX = 11,
+	STCX = 12,
+	BRANCH = 13,
+	MFSPR = 14,
+	MTSPR = 15,
+	CACHEOP = 16,
+	BARRIER = 17,
+	SYSCALL = 18,
+	SYSCALL_VECTORED_0 = 19,
+	MFMSR = 20,
+	MTMSR = 21,
+	RFI = 22,
+	INTERRUPT = 23,
+	UNKNOWN = 24,
+};
+
+enum powerpc_regset {
+	REGSET_GPR = 0,
+	REGSET_FPR = 1,
+	REGSET_VMX = 2,
+	REGSET_VSX = 3,
+	REGSET_TM_CGPR = 4,
+	REGSET_TM_CFPR = 5,
+	REGSET_TM_CVMX = 6,
+	REGSET_TM_CVSX = 7,
+	REGSET_TM_SPR = 8,
+	REGSET_TM_CTAR = 9,
+	REGSET_TM_CPPR = 10,
+	REGSET_TM_CDSCR = 11,
+	REGSET_PPR = 12,
+	REGSET_DSCR = 13,
+	REGSET_TAR = 14,
+	REGSET_EBB = 15,
+	REGSET_PMR = 16,
+	REGSET_PKEY = 17,
+};
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+struct mmu_hash_ops {
+	void (*hpte_invalidate)(long unsigned int, long unsigned int, int, int, int, int);
+	long int (*hpte_updatepp)(long unsigned int, long unsigned int, long unsigned int, int, int, int, long unsigned int);
+	void (*hpte_updateboltedpp)(long unsigned int, long unsigned int, int, int);
+	long int (*hpte_insert)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int, int);
+	long int (*hpte_remove)(long unsigned int);
+	int (*hpte_removebolted)(long unsigned int, int, int);
+	void (*flush_hash_range)(long unsigned int, int);
+	void (*hugepage_invalidate)(long unsigned int, long unsigned int, unsigned char *, int, int, int);
+	int (*resize_hpt)(long unsigned int);
+	void (*hpte_clear_all)();
+};
+
+struct hash_pte {
+	__be64 v;
+	__be64 r;
+};
+
+struct patb_entry {
+	__be64 patb0;
+	__be64 patb1;
+};
+
+typedef signed char unative_t[16];
+
+struct powercap_attr {
+	u32 handle;
+	struct kobj_attribute attr;
+};
+
+struct pcap {
+	struct attribute_group pg;
+	struct powercap_attr *pattrs;
+};
+
+enum {
+	EEH_NEXT_ERR_NONE = 0,
+	EEH_NEXT_ERR_INF = 1,
+	EEH_NEXT_ERR_FROZEN_PE = 2,
+	EEH_NEXT_ERR_FENCED_PHB = 3,
+	EEH_NEXT_ERR_DEAD_PHB = 4,
+	EEH_NEXT_ERR_DEAD_IOC = 5,
+};
+
+struct eeh_ops {
+	char *name;
+	struct eeh_dev * (*probe)(struct pci_dev *);
+	int (*set_option)(struct eeh_pe *, int);
+	int (*get_state)(struct eeh_pe *, int *);
+	int (*reset)(struct eeh_pe *, int);
+	int (*get_log)(struct eeh_pe *, int, char *, long unsigned int);
+	int (*configure_bridge)(struct eeh_pe *);
+	int (*err_inject)(struct eeh_pe *, int, int, long unsigned int, long unsigned int);
+	int (*read_config)(struct eeh_dev *, int, int, u32 *);
+	int (*write_config)(struct eeh_dev *, int, int, u32);
+	int (*next_error)(struct eeh_pe **);
+	int (*restore_config)(struct eeh_dev *);
+	int (*notify_resume)(struct eeh_dev *);
+};
+
+enum OpalPciStatusToken {
+	OPAL_EEH_NO_ERROR = 0,
+	OPAL_EEH_IOC_ERROR = 1,
+	OPAL_EEH_PHB_ERROR = 2,
+	OPAL_EEH_PE_ERROR = 3,
+	OPAL_EEH_PE_MMIO_ERROR = 4,
+	OPAL_EEH_PE_DMA_ERROR = 5,
+};
+
+enum OpalPciErrorSeverity {
+	OPAL_EEH_SEV_NO_ERROR = 0,
+	OPAL_EEH_SEV_IOC_DEAD = 1,
+	OPAL_EEH_SEV_PHB_DEAD = 2,
+	OPAL_EEH_SEV_PHB_FENCED = 3,
+	OPAL_EEH_SEV_PE_ER = 4,
+	OPAL_EEH_SEV_INF = 5,
+};
+
+enum OpalErrinjectType {
+	OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR = 0,
+	OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64 = 1,
+};
+
+enum OpalErrinjectFunc {
+	OPAL_ERR_INJECT_FUNC_IOA_LD_MEM_ADDR = 0,
+	OPAL_ERR_INJECT_FUNC_IOA_LD_MEM_DATA = 1,
+	OPAL_ERR_INJECT_FUNC_IOA_LD_IO_ADDR = 2,
+	OPAL_ERR_INJECT_FUNC_IOA_LD_IO_DATA = 3,
+	OPAL_ERR_INJECT_FUNC_IOA_LD_CFG_ADDR = 4,
+	OPAL_ERR_INJECT_FUNC_IOA_LD_CFG_DATA = 5,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_MEM_ADDR = 6,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_MEM_DATA = 7,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_IO_ADDR = 8,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_IO_DATA = 9,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_CFG_ADDR = 10,
+	OPAL_ERR_INJECT_FUNC_IOA_ST_CFG_DATA = 11,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_ADDR = 12,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_DATA = 13,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_MASTER = 14,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_RD_TARGET = 15,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_ADDR = 16,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_DATA = 17,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_MASTER = 18,
+	OPAL_ERR_INJECT_FUNC_IOA_DMA_WR_TARGET = 19,
+};
+
+enum OpalPciResetScope {
+	OPAL_RESET_PHB_COMPLETE = 1,
+	OPAL_RESET_PCI_LINK = 2,
+	OPAL_RESET_PHB_ERROR = 3,
+	OPAL_RESET_PCI_HOT = 4,
+	OPAL_RESET_PCI_FUNDAMENTAL = 5,
+	OPAL_RESET_PCI_IODA_TABLE = 6,
+};
+
+enum OpalPciReinitScope {
+	OPAL_REINIT_PCI_DEV = 1000,
+};
+
+enum OpalPciResetState {
+	OPAL_DEASSERT_RESET = 0,
+	OPAL_ASSERT_RESET = 1,
+};
+
+enum {
+	OPAL_P7IOC_DIAG_TYPE_NONE = 0,
+	OPAL_P7IOC_DIAG_TYPE_RGC = 1,
+	OPAL_P7IOC_DIAG_TYPE_BI = 2,
+	OPAL_P7IOC_DIAG_TYPE_CI = 3,
+	OPAL_P7IOC_DIAG_TYPE_MISC = 4,
+	OPAL_P7IOC_DIAG_TYPE_I2C = 5,
+	OPAL_P7IOC_DIAG_TYPE_LAST = 6,
+};
+
+struct OpalIoP7IOCRgcErrorData {
+	__be64 rgcStatus;
+	__be64 rgcLdcp;
+};
+
+struct OpalIoP7IOCBiErrorData {
+	__be64 biLdcp0;
+	__be64 biLdcp1;
+	__be64 biLdcp2;
+	__be64 biFenceStatus;
+	uint8_t biDownbound;
+};
+
+struct OpalIoP7IOCCiErrorData {
+	__be64 ciPortStatus;
+	__be64 ciPortLdcp;
+	uint8_t ciPort;
+};
+
+struct OpalIoP7IOCErrorData {
+	__be16 type;
+	__be64 gemXfir;
+	__be64 gemRfir;
+	__be64 gemRirqfir;
+	__be64 gemMask;
+	__be64 gemRwof;
+	__be64 lemFir;
+	__be64 lemErrMask;
+	__be64 lemAction0;
+	__be64 lemAction1;
+	__be64 lemWof;
+	union {
+		struct OpalIoP7IOCRgcErrorData rgc;
+		struct OpalIoP7IOCBiErrorData bi;
+		struct OpalIoP7IOCCiErrorData ci;
+	};
+};
+
+struct dtl_entry {
+	u8 dispatch_reason;
+	u8 preempt_reason;
+	__be16 processor_id;
+	__be32 enqueue_to_dispatch_time;
+	__be32 ready_to_enqueue_time;
+	__be32 waiting_to_ready_time;
+	__be64 timebase;
+	__be64 fault_addr;
+	__be64 srr0;
+	__be64 srr1;
+};
+
+typedef void (*crash_shutdown_t)();
+
+struct __user_cap_header_struct {
+	__u32 version;
+	int pid;
+};
+
+typedef struct __user_cap_header_struct *cap_user_header_t;
+
+struct __user_cap_data_struct {
+	__u32 effective;
+	__u32 permitted;
+	__u32 inheritable;
+};
+
+typedef struct __user_cap_data_struct *cap_user_data_t;
+
+struct mcs_spinlock {
+	struct mcs_spinlock *next;
+	int locked;
+	int count;
+};
+
+struct qnode {
+	struct mcs_spinlock mcs;
+	long int reserved[2];
+};
+
+enum vcpu_state {
+	vcpu_running = 0,
+	vcpu_halted = 1,
+	vcpu_hashed = 2,
+};
+
+struct pv_node {
+	struct mcs_spinlock mcs;
+	int cpu;
+	u8 state;
+};
+
+struct pv_hash_entry {
+	struct qspinlock *lock;
+	struct pv_node *node;
+};
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long int len;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_future_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	long int gp_seq_req;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period_init {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	u8 level;
+	int grplo;
+	int grphi;
+	long unsigned int qsmask;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gpseq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_funnel_lock {
+	struct trace_entry ent;
+	const char *rcuname;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_preempt_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_unlock_preempted_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_quiescent_state_report {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	long unsigned int mask;
+	long unsigned int qsmask;
+	u8 level;
+	int grplo;
+	int grphi;
+	u8 gp_tasks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_fqs {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int gp_seq;
+	int cpu;
+	const char *qsevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_dyntick {
+	struct trace_entry ent;
+	const char *polarity;
+	long int oldnesting;
+	long int newnesting;
+	int dynticks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	long int qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_segcb_stats {
+	struct trace_entry ent;
+	const char *ctx;
+	long unsigned int gp_seq[4];
+	long int seglen[4];
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	long unsigned int offset;
+	long int qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_start {
+	struct trace_entry ent;
+	const char *rcuname;
+	long int qlen;
+	long int blimit;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	long unsigned int offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kfree_bulk_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	long unsigned int nr_records;
+	void **p;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_end {
+	struct trace_entry ent;
+	const char *rcuname;
+	int callbacks_invoked;
+	char cb;
+	char nr;
+	char iit;
+	char risk;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_torture_read {
+	struct trace_entry ent;
+	char rcutorturename[8];
+	struct callback_head *rhp;
+	long unsigned int secs;
+	long unsigned int c_old;
+	long unsigned int c;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_barrier {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *s;
+	int cpu;
+	int cnt;
+	long unsigned int done;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_grace_period {};
+
+struct trace_event_data_offsets_rcu_future_grace_period {};
+
+struct trace_event_data_offsets_rcu_grace_period_init {};
+
+struct trace_event_data_offsets_rcu_exp_grace_period {};
+
+struct trace_event_data_offsets_rcu_exp_funnel_lock {};
+
+struct trace_event_data_offsets_rcu_preempt_task {};
+
+struct trace_event_data_offsets_rcu_unlock_preempted_task {};
+
+struct trace_event_data_offsets_rcu_quiescent_state_report {};
+
+struct trace_event_data_offsets_rcu_fqs {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+struct trace_event_data_offsets_rcu_dyntick {};
+
+struct trace_event_data_offsets_rcu_callback {};
+
+struct trace_event_data_offsets_rcu_segcb_stats {};
+
+struct trace_event_data_offsets_rcu_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_batch_start {};
+
+struct trace_event_data_offsets_rcu_invoke_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kfree_bulk_callback {};
+
+struct trace_event_data_offsets_rcu_batch_end {};
+
+struct trace_event_data_offsets_rcu_torture_read {};
+
+struct trace_event_data_offsets_rcu_barrier {};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_grace_period)(void *, const char *, long unsigned int, const char *);
+
+typedef void (*btf_trace_rcu_future_grace_period)(void *, const char *, long unsigned int, long unsigned int, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_grace_period_init)(void *, const char *, long unsigned int, u8, int, int, long unsigned int);
+
+typedef void (*btf_trace_rcu_exp_grace_period)(void *, const char *, long unsigned int, const char *);
+
+typedef void (*btf_trace_rcu_exp_funnel_lock)(void *, const char *, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_preempt_task)(void *, const char *, int, long unsigned int);
+
+typedef void (*btf_trace_rcu_unlock_preempted_task)(void *, const char *, long unsigned int, int);
+
+typedef void (*btf_trace_rcu_quiescent_state_report)(void *, const char *, long unsigned int, long unsigned int, long unsigned int, u8, int, int, int);
+
+typedef void (*btf_trace_rcu_fqs)(void *, const char *, long unsigned int, int, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+typedef void (*btf_trace_rcu_dyntick)(void *, const char *, long int, long int, int);
+
+typedef void (*btf_trace_rcu_callback)(void *, const char *, struct callback_head *, long int);
+
+typedef void (*btf_trace_rcu_segcb_stats)(void *, struct rcu_segcblist *, const char *);
+
+typedef void (*btf_trace_rcu_kvfree_callback)(void *, const char *, struct callback_head *, long unsigned int, long int);
+
+typedef void (*btf_trace_rcu_batch_start)(void *, const char *, long int, long int);
+
+typedef void (*btf_trace_rcu_invoke_callback)(void *, const char *, struct callback_head *);
+
+typedef void (*btf_trace_rcu_invoke_kvfree_callback)(void *, const char *, struct callback_head *, long unsigned int);
+
+typedef void (*btf_trace_rcu_invoke_kfree_bulk_callback)(void *, const char *, long unsigned int, void **);
+
+typedef void (*btf_trace_rcu_batch_end)(void *, const char *, int, char, char, char, char);
+
+typedef void (*btf_trace_rcu_torture_read)(void *, const char *, struct callback_head *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_rcu_barrier)(void *, const char *, const char *, int, int, long unsigned int);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	long unsigned int gp_jiffies;
+	long unsigned int gp_start;
+	long unsigned int tasks_gp_seq;
+	long unsigned int n_ipis;
+	long unsigned int n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	long unsigned int percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	long unsigned int barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	long unsigned int rtp_jiffies;
+	long unsigned int rtp_n_lock_retries;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+typedef struct sigevent sigevent_t;
+
+struct kallsym_iter {
+	loff_t pos;
+	loff_t pos_arch_end;
+	loff_t pos_mod_end;
+	loff_t pos_ftrace_mod_end;
+	loff_t pos_bpf_end;
+	long unsigned int value;
+	unsigned int nameoff;
+	char type;
+	char name[128];
+	char module_name[56];
+	int exported;
+	int show_value;
+};
+
+struct bpf_iter__ksym {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct kallsym_iter *ksym;
+	};
 };
 
 enum ring_buffer_type {
@@ -38379,7 +55612,7 @@
 	bool wakeup_full;
 };
 
-struct trace_buffer___2 {
+struct trace_buffer {
 	unsigned int flags;
 	int cpus;
 	atomic_t record_disabled;
@@ -38449,7 +55682,7 @@
 	int cpu;
 	atomic_t record_disabled;
 	atomic_t resize_disabled;
-	struct trace_buffer___2 *buffer;
+	struct trace_buffer *buffer;
 	raw_spinlock_t reader_lock;
 	arch_spinlock_t lock;
 	struct lock_class_key lock_key;
@@ -38479,6 +55712,7 @@
 	long unsigned int read_bytes;
 	rb_time_t write_stamp;
 	rb_time_t before_stamp;
+	u64 event_stamp[5];
 	u64 read_stamp;
 	long int nr_pages_to_update;
 	struct list_head new_pages;
@@ -38487,1379 +55721,6 @@
 	struct rb_irq_work irq_work;
 };
 
-struct trace_export {
-	struct trace_export *next;
-	void (*write)(struct trace_export *, const void *, unsigned int);
-	int flags;
-};
-
-enum trace_iter_flags {
-	TRACE_FILE_LAT_FMT = 1,
-	TRACE_FILE_ANNOTATE = 2,
-	TRACE_FILE_TIME_IN_NS = 4,
-};
-
-enum event_trigger_type {
-	ETT_NONE = 0,
-	ETT_TRACE_ONOFF = 1,
-	ETT_SNAPSHOT = 2,
-	ETT_STACKTRACE = 4,
-	ETT_EVENT_ENABLE = 8,
-	ETT_EVENT_HIST = 16,
-	ETT_HIST_ENABLE = 32,
-};
-
-enum trace_type {
-	__TRACE_FIRST_TYPE = 0,
-	TRACE_FN = 1,
-	TRACE_CTX = 2,
-	TRACE_WAKE = 3,
-	TRACE_STACK = 4,
-	TRACE_PRINT = 5,
-	TRACE_BPRINT = 6,
-	TRACE_MMIO_RW = 7,
-	TRACE_MMIO_MAP = 8,
-	TRACE_BRANCH = 9,
-	TRACE_GRAPH_RET = 10,
-	TRACE_GRAPH_ENT = 11,
-	TRACE_USER_STACK = 12,
-	TRACE_BLK = 13,
-	TRACE_BPUTS = 14,
-	TRACE_HWLAT = 15,
-	TRACE_RAW_DATA = 16,
-	__TRACE_LAST_TYPE = 17,
-};
-
-struct ftrace_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	long unsigned int parent_ip;
-};
-
-struct stack_entry {
-	struct trace_entry ent;
-	int size;
-	long unsigned int caller[8];
-};
-
-struct bprint_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *fmt;
-	u32 buf[0];
-};
-
-struct print_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	char buf[0];
-};
-
-struct raw_data_entry {
-	struct trace_entry ent;
-	unsigned int id;
-	char buf[0];
-};
-
-struct bputs_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *str;
-};
-
-enum trace_flag_type {
-	TRACE_FLAG_IRQS_OFF = 1,
-	TRACE_FLAG_IRQS_NOSUPPORT = 2,
-	TRACE_FLAG_NEED_RESCHED = 4,
-	TRACE_FLAG_HARDIRQ = 8,
-	TRACE_FLAG_SOFTIRQ = 16,
-	TRACE_FLAG_PREEMPT_RESCHED = 32,
-	TRACE_FLAG_NMI = 64,
-};
-
-typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
-
-enum trace_iterator_flags {
-	TRACE_ITER_PRINT_PARENT = 1,
-	TRACE_ITER_SYM_OFFSET = 2,
-	TRACE_ITER_SYM_ADDR = 4,
-	TRACE_ITER_VERBOSE = 8,
-	TRACE_ITER_RAW = 16,
-	TRACE_ITER_HEX = 32,
-	TRACE_ITER_BIN = 64,
-	TRACE_ITER_BLOCK = 128,
-	TRACE_ITER_PRINTK = 256,
-	TRACE_ITER_ANNOTATE = 512,
-	TRACE_ITER_USERSTACKTRACE = 1024,
-	TRACE_ITER_SYM_USEROBJ = 2048,
-	TRACE_ITER_PRINTK_MSGONLY = 4096,
-	TRACE_ITER_CONTEXT_INFO = 8192,
-	TRACE_ITER_LATENCY_FMT = 16384,
-	TRACE_ITER_RECORD_CMD = 32768,
-	TRACE_ITER_RECORD_TGID = 65536,
-	TRACE_ITER_OVERWRITE = 131072,
-	TRACE_ITER_STOP_ON_FREE = 262144,
-	TRACE_ITER_IRQ_INFO = 524288,
-	TRACE_ITER_MARKERS = 1048576,
-	TRACE_ITER_EVENT_FORK = 2097152,
-	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
-	TRACE_ITER_FUNCTION = 8388608,
-	TRACE_ITER_FUNC_FORK = 16777216,
-	TRACE_ITER_DISPLAY_GRAPH = 33554432,
-	TRACE_ITER_STACKTRACE = 67108864,
-};
-
-struct saved_cmdlines_buffer {
-	unsigned int map_pid_to_cmdline[32769];
-	unsigned int *map_cmdline_to_pid;
-	unsigned int cmdline_num;
-	int cmdline_idx;
-	char *saved_cmdlines;
-};
-
-struct ftrace_stack {
-	long unsigned int calls[16384];
-};
-
-struct ftrace_stacks {
-	struct ftrace_stack stacks[4];
-};
-
-struct trace_buffer_struct {
-	int nesting;
-	char buffer[4096];
-};
-
-struct ftrace_buffer_info {
-	struct trace_iterator iter;
-	void *spare;
-	unsigned int spare_cpu;
-	unsigned int read;
-};
-
-struct err_info {
-	const char **errs;
-	u8 type;
-	u8 pos;
-	u64 ts;
-};
-
-struct tracing_log_err {
-	struct list_head list;
-	struct err_info info;
-	char loc[128];
-	char cmd[256];
-};
-
-struct buffer_ref {
-	struct trace_buffer *buffer;
-	void *page;
-	int cpu;
-	refcount_t refcount;
-};
-
-struct ctx_switch_entry {
-	struct trace_entry ent;
-	unsigned int prev_pid;
-	unsigned int next_pid;
-	unsigned int next_cpu;
-	unsigned char prev_prio;
-	unsigned char prev_state;
-	unsigned char next_prio;
-	unsigned char next_state;
-};
-
-struct userstack_entry {
-	struct trace_entry ent;
-	unsigned int tgid;
-	long unsigned int caller[8];
-};
-
-struct hwlat_entry {
-	struct trace_entry ent;
-	u64 duration;
-	u64 outer_duration;
-	u64 nmi_total_ts;
-	struct timespec64 timestamp;
-	unsigned int nmi_count;
-	unsigned int seqnum;
-	unsigned int count;
-};
-
-struct trace_mark {
-	long long unsigned int val;
-	char sym;
-};
-
-typedef int (*cmp_func_t)(const void *, const void *);
-
-struct tracer_stat {
-	const char *name;
-	void * (*stat_start)(struct tracer_stat *);
-	void * (*stat_next)(void *, int);
-	cmp_func_t stat_cmp;
-	int (*stat_show)(struct seq_file *, void *);
-	void (*stat_release)(void *);
-	int (*stat_headers)(struct seq_file *);
-};
-
-struct stat_node {
-	struct rb_node node;
-	void *stat;
-};
-
-struct stat_session {
-	struct list_head session_list;
-	struct tracer_stat *ts;
-	struct rb_root stat_root;
-	struct mutex stat_mutex;
-	struct dentry *file;
-};
-
-struct trace_bprintk_fmt {
-	struct list_head list;
-	const char *fmt;
-};
-
-enum {
-	TRACE_FUNC_OPT_STACK = 1,
-};
-
-struct ftrace_func_mapper___2;
-
-enum {
-	TRACE_NOP_OPT_ACCEPT = 1,
-	TRACE_NOP_OPT_REFUSE = 2,
-};
-
-struct ftrace_graph_ent {
-	long unsigned int func;
-	int depth;
-} __attribute__((packed));
-
-struct ftrace_graph_ret {
-	long unsigned int func;
-	long unsigned int overrun;
-	long long unsigned int calltime;
-	long long unsigned int rettime;
-	int depth;
-} __attribute__((packed));
-
-typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
-
-typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
-
-struct fgraph_ops {
-	trace_func_graph_ent_t entryfunc;
-	trace_func_graph_ret_t retfunc;
-};
-
-struct ftrace_graph_ent_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ent graph_ent;
-} __attribute__((packed));
-
-struct ftrace_graph_ret_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ret ret;
-} __attribute__((packed));
-
-struct fgraph_cpu_data {
-	pid_t last_pid;
-	int depth;
-	int depth_irq;
-	int ignore;
-	long unsigned int enter_funcs[50];
-};
-
-struct fgraph_data {
-	struct fgraph_cpu_data *cpu_data;
-	struct ftrace_graph_ent_entry ent;
-	struct ftrace_graph_ret_entry ret;
-	int failed;
-	int cpu;
-} __attribute__((packed));
-
-enum {
-	FLAGS_FILL_FULL = 268435456,
-	FLAGS_FILL_START = 536870912,
-	FLAGS_FILL_END = 805306368,
-};
-
-struct blk_crypto_key;
-
-struct bio_crypt_ctx {
-	const struct blk_crypto_key *bc_key;
-	u64 bc_dun[4];
-};
-
-typedef __u32 blk_mq_req_flags_t;
-
-struct disk_stats {
-	u64 nsecs[4];
-	long unsigned int sectors[4];
-	long unsigned int ios[4];
-	long unsigned int merges[4];
-	long unsigned int io_ticks;
-	local_t in_flight[2];
-};
-
-struct blk_mq_ctxs;
-
-struct blk_mq_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head rq_lists[3];
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	unsigned int cpu;
-	short unsigned int index_hw[3];
-	struct blk_mq_hw_ctx *hctxs[3];
-	long unsigned int rq_dispatched[2];
-	long unsigned int rq_merged;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int rq_completed[2];
-	struct request_queue *queue;
-	struct blk_mq_ctxs *ctxs;
-	struct kobject kobj;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbitmap_word;
-
-struct sbitmap {
-	unsigned int depth;
-	unsigned int shift;
-	unsigned int map_nr;
-	struct sbitmap_word *map;
-};
-
-struct blk_mq_tags;
-
-struct blk_mq_hw_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head dispatch;
-		long unsigned int state;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct delayed_work run_work;
-	cpumask_var_t cpumask;
-	int next_cpu;
-	int next_cpu_batch;
-	long unsigned int flags;
-	void *sched_data;
-	struct request_queue *queue;
-	struct blk_flush_queue *fq;
-	void *driver_data;
-	struct sbitmap ctx_map;
-	struct blk_mq_ctx *dispatch_from;
-	unsigned int dispatch_busy;
-	short unsigned int type;
-	short unsigned int nr_ctx;
-	struct blk_mq_ctx **ctxs;
-	spinlock_t dispatch_wait_lock;
-	wait_queue_entry_t dispatch_wait;
-	atomic_t wait_index;
-	struct blk_mq_tags *tags;
-	struct blk_mq_tags *sched_tags;
-	long unsigned int queued;
-	long unsigned int run;
-	long unsigned int dispatched[7];
-	unsigned int numa_node;
-	unsigned int queue_num;
-	atomic_t nr_active;
-	atomic_t elevator_queued;
-	struct hlist_node cpuhp_online;
-	struct hlist_node cpuhp_dead;
-	struct kobject kobj;
-	long unsigned int poll_considered;
-	long unsigned int poll_invoked;
-	long unsigned int poll_success;
-	struct list_head hctx_list;
-	struct srcu_struct srcu[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_alloc_data {
-	struct request_queue *q;
-	blk_mq_req_flags_t flags;
-	unsigned int shallow_depth;
-	unsigned int cmd_flags;
-	struct blk_mq_ctx *ctx;
-	struct blk_mq_hw_ctx *hctx;
-};
-
-struct blk_stat_callback {
-	struct list_head list;
-	struct timer_list timer;
-	struct blk_rq_stat *cpu_stat;
-	int (*bucket_fn)(const struct request *);
-	unsigned int buckets;
-	struct blk_rq_stat *stat;
-	void (*timer_fn)(struct blk_stat_callback *);
-	void *data;
-	struct callback_head rcu;
-};
-
-struct blk_trace {
-	int trace_state;
-	struct rchan *rchan;
-	long unsigned int *sequence;
-	unsigned char *msg_data;
-	u16 act_mask;
-	u64 start_lba;
-	u64 end_lba;
-	u32 pid;
-	u32 dev;
-	struct dentry *dir;
-	struct dentry *dropped_file;
-	struct dentry *msg_file;
-	struct list_head running_list;
-	atomic_t dropped;
-};
-
-struct blk_flush_queue {
-	unsigned int flush_pending_idx: 1;
-	unsigned int flush_running_idx: 1;
-	blk_status_t rq_status;
-	long unsigned int flush_pending_since;
-	struct list_head flush_queue[2];
-	struct list_head flush_data_in_flight;
-	struct request *flush_rq;
-	struct lock_class_key key;
-	spinlock_t mq_flush_lock;
-};
-
-struct blk_mq_queue_map {
-	unsigned int *mq_map;
-	unsigned int nr_queues;
-	unsigned int queue_offset;
-};
-
-struct sbq_wait_state;
-
-struct sbitmap_queue {
-	struct sbitmap sb;
-	unsigned int *alloc_hint;
-	unsigned int wake_batch;
-	atomic_t wake_index;
-	struct sbq_wait_state *ws;
-	atomic_t ws_active;
-	bool round_robin;
-	unsigned int min_shallow_depth;
-};
-
-struct blk_mq_tag_set {
-	struct blk_mq_queue_map map[3];
-	unsigned int nr_maps;
-	const struct blk_mq_ops *ops;
-	unsigned int nr_hw_queues;
-	unsigned int queue_depth;
-	unsigned int reserved_tags;
-	unsigned int cmd_size;
-	int numa_node;
-	unsigned int timeout;
-	unsigned int flags;
-	void *driver_data;
-	atomic_t active_queues_shared_sbitmap;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct blk_mq_tags **tags;
-	struct mutex tag_list_lock;
-	struct list_head tag_list;
-};
-
-enum blktrace_cat {
-	BLK_TC_READ = 1,
-	BLK_TC_WRITE = 2,
-	BLK_TC_FLUSH = 4,
-	BLK_TC_SYNC = 8,
-	BLK_TC_SYNCIO = 8,
-	BLK_TC_QUEUE = 16,
-	BLK_TC_REQUEUE = 32,
-	BLK_TC_ISSUE = 64,
-	BLK_TC_COMPLETE = 128,
-	BLK_TC_FS = 256,
-	BLK_TC_PC = 512,
-	BLK_TC_NOTIFY = 1024,
-	BLK_TC_AHEAD = 2048,
-	BLK_TC_META = 4096,
-	BLK_TC_DISCARD = 8192,
-	BLK_TC_DRV_DATA = 16384,
-	BLK_TC_FUA = 32768,
-	BLK_TC_END = 32768,
-};
-
-enum blktrace_act {
-	__BLK_TA_QUEUE = 1,
-	__BLK_TA_BACKMERGE = 2,
-	__BLK_TA_FRONTMERGE = 3,
-	__BLK_TA_GETRQ = 4,
-	__BLK_TA_SLEEPRQ = 5,
-	__BLK_TA_REQUEUE = 6,
-	__BLK_TA_ISSUE = 7,
-	__BLK_TA_COMPLETE = 8,
-	__BLK_TA_PLUG = 9,
-	__BLK_TA_UNPLUG_IO = 10,
-	__BLK_TA_UNPLUG_TIMER = 11,
-	__BLK_TA_INSERT = 12,
-	__BLK_TA_SPLIT = 13,
-	__BLK_TA_BOUNCE = 14,
-	__BLK_TA_REMAP = 15,
-	__BLK_TA_ABORT = 16,
-	__BLK_TA_DRV_DATA = 17,
-	__BLK_TA_CGROUP = 256,
-};
-
-enum blktrace_notify {
-	__BLK_TN_PROCESS = 0,
-	__BLK_TN_TIMESTAMP = 1,
-	__BLK_TN_MESSAGE = 2,
-	__BLK_TN_CGROUP = 256,
-};
-
-struct blk_io_trace {
-	__u32 magic;
-	__u32 sequence;
-	__u64 time;
-	__u64 sector;
-	__u32 bytes;
-	__u32 action;
-	__u32 pid;
-	__u32 device;
-	__u32 cpu;
-	__u16 error;
-	__u16 pdu_len;
-};
-
-struct blk_io_trace_remap {
-	__be32 device_from;
-	__be32 device_to;
-	__be64 sector_from;
-};
-
-enum {
-	Blktrace_setup = 1,
-	Blktrace_running = 2,
-	Blktrace_stopped = 3,
-};
-
-struct blk_user_trace_setup {
-	char name[32];
-	__u16 act_mask;
-	__u32 buf_size;
-	__u32 buf_nr;
-	__u64 start_lba;
-	__u64 end_lba;
-	__u32 pid;
-};
-
-struct sbitmap_word {
-	long unsigned int depth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int word;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int cleared;
-	spinlock_t swap_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbq_wait_state {
-	atomic_t wait_cnt;
-	wait_queue_head_t wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_tags {
-	unsigned int nr_tags;
-	unsigned int nr_reserved_tags;
-	atomic_t active_queues;
-	struct sbitmap_queue *bitmap_tags;
-	struct sbitmap_queue *breserved_tags;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct request **rqs;
-	struct request **static_rqs;
-	struct list_head page_list;
-};
-
-struct blk_mq_queue_data {
-	struct request *rq;
-	bool last;
-};
-
-enum blk_crypto_mode_num {
-	BLK_ENCRYPTION_MODE_INVALID = 0,
-	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
-	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
-	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
-	BLK_ENCRYPTION_MODE_MAX = 4,
-};
-
-struct blk_crypto_config {
-	enum blk_crypto_mode_num crypto_mode;
-	unsigned int data_unit_size;
-	unsigned int dun_bytes;
-};
-
-struct blk_crypto_key {
-	struct blk_crypto_config crypto_cfg;
-	unsigned int data_unit_size_bits;
-	unsigned int size;
-	u8 raw[64];
-};
-
-struct blk_mq_ctxs {
-	struct kobject kobj;
-	struct blk_mq_ctx *queue_ctx;
-};
-
-typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
-
-struct ftrace_event_field {
-	struct list_head link;
-	const char *name;
-	const char *type;
-	int filter_type;
-	int offset;
-	int size;
-	int is_signed;
-};
-
-enum {
-	FORMAT_HEADER = 1,
-	FORMAT_FIELD_SEPERATOR = 2,
-	FORMAT_PRINTFMT = 3,
-};
-
-struct event_probe_data {
-	struct trace_event_file *file;
-	long unsigned int count;
-	int ref;
-	bool enable;
-};
-
-struct syscall_trace_enter {
-	struct trace_entry ent;
-	int nr;
-	long unsigned int args[0];
-};
-
-struct syscall_trace_exit {
-	struct trace_entry ent;
-	int nr;
-	long int ret;
-};
-
-struct syscall_tp_t {
-	long long unsigned int regs;
-	long unsigned int syscall_nr;
-	long unsigned int ret;
-};
-
-struct syscall_tp_t___2 {
-	long long unsigned int regs;
-	long unsigned int syscall_nr;
-	long unsigned int args[6];
-};
-
-typedef long unsigned int perf_trace_t[256];
-
-struct filter_pred;
-
-struct prog_entry {
-	int target;
-	int when_to_branch;
-	struct filter_pred *pred;
-};
-
-typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
-
-struct regex;
-
-typedef int (*regex_match_func)(char *, struct regex *, int);
-
-struct regex {
-	char pattern[256];
-	int len;
-	int field_len;
-	regex_match_func match;
-};
-
-struct filter_pred {
-	filter_pred_fn_t fn;
-	u64 val;
-	struct regex regex;
-	short unsigned int *ops;
-	struct ftrace_event_field *field;
-	int offset;
-	int not;
-	int op;
-};
-
-enum filter_op_ids {
-	OP_GLOB = 0,
-	OP_NE = 1,
-	OP_EQ = 2,
-	OP_LE = 3,
-	OP_LT = 4,
-	OP_GE = 5,
-	OP_GT = 6,
-	OP_BAND = 7,
-	OP_MAX = 8,
-};
-
-enum {
-	FILT_ERR_NONE = 0,
-	FILT_ERR_INVALID_OP = 1,
-	FILT_ERR_TOO_MANY_OPEN = 2,
-	FILT_ERR_TOO_MANY_CLOSE = 3,
-	FILT_ERR_MISSING_QUOTE = 4,
-	FILT_ERR_OPERAND_TOO_LONG = 5,
-	FILT_ERR_EXPECT_STRING = 6,
-	FILT_ERR_EXPECT_DIGIT = 7,
-	FILT_ERR_ILLEGAL_FIELD_OP = 8,
-	FILT_ERR_FIELD_NOT_FOUND = 9,
-	FILT_ERR_ILLEGAL_INTVAL = 10,
-	FILT_ERR_BAD_SUBSYS_FILTER = 11,
-	FILT_ERR_TOO_MANY_PREDS = 12,
-	FILT_ERR_INVALID_FILTER = 13,
-	FILT_ERR_IP_FIELD_ONLY = 14,
-	FILT_ERR_INVALID_VALUE = 15,
-	FILT_ERR_ERRNO = 16,
-	FILT_ERR_NO_FILTER = 17,
-};
-
-struct filter_parse_error {
-	int lasterr;
-	int lasterr_pos;
-};
-
-typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
-
-enum {
-	INVERT = 1,
-	PROCESS_AND = 2,
-	PROCESS_OR = 4,
-};
-
-enum {
-	TOO_MANY_CLOSE = 4294967295,
-	TOO_MANY_OPEN = 4294967294,
-	MISSING_QUOTE = 4294967293,
-};
-
-struct filter_list {
-	struct list_head list;
-	struct event_filter *filter;
-};
-
-struct function_filter_data {
-	struct ftrace_ops *ops;
-	int first_filter;
-	int first_notrace;
-};
-
-struct event_trigger_ops;
-
-struct event_command;
-
-struct event_trigger_data {
-	long unsigned int count;
-	int ref;
-	struct event_trigger_ops *ops;
-	struct event_command *cmd_ops;
-	struct event_filter *filter;
-	char *filter_str;
-	void *private_data;
-	bool paused;
-	bool paused_tmp;
-	struct list_head list;
-	char *name;
-	struct list_head named_list;
-	struct event_trigger_data *named_data;
-};
-
-struct event_trigger_ops {
-	void (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);
-	int (*init)(struct event_trigger_ops *, struct event_trigger_data *);
-	void (*free)(struct event_trigger_ops *, struct event_trigger_data *);
-	int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);
-};
-
-struct event_command {
-	struct list_head list;
-	char *name;
-	enum event_trigger_type trigger_type;
-	int flags;
-	int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);
-	int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg_all)(struct trace_event_file *);
-	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
-	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
-};
-
-struct enable_trigger_data {
-	struct trace_event_file *file;
-	bool enable;
-	bool hist;
-};
-
-enum event_command_flags {
-	EVENT_CMD_FL_POST_TRIGGER = 1,
-	EVENT_CMD_FL_NEEDS_REC = 2,
-};
-
-enum bpf_func_id {
-	BPF_FUNC_unspec = 0,
-	BPF_FUNC_map_lookup_elem = 1,
-	BPF_FUNC_map_update_elem = 2,
-	BPF_FUNC_map_delete_elem = 3,
-	BPF_FUNC_probe_read = 4,
-	BPF_FUNC_ktime_get_ns = 5,
-	BPF_FUNC_trace_printk = 6,
-	BPF_FUNC_get_prandom_u32 = 7,
-	BPF_FUNC_get_smp_processor_id = 8,
-	BPF_FUNC_skb_store_bytes = 9,
-	BPF_FUNC_l3_csum_replace = 10,
-	BPF_FUNC_l4_csum_replace = 11,
-	BPF_FUNC_tail_call = 12,
-	BPF_FUNC_clone_redirect = 13,
-	BPF_FUNC_get_current_pid_tgid = 14,
-	BPF_FUNC_get_current_uid_gid = 15,
-	BPF_FUNC_get_current_comm = 16,
-	BPF_FUNC_get_cgroup_classid = 17,
-	BPF_FUNC_skb_vlan_push = 18,
-	BPF_FUNC_skb_vlan_pop = 19,
-	BPF_FUNC_skb_get_tunnel_key = 20,
-	BPF_FUNC_skb_set_tunnel_key = 21,
-	BPF_FUNC_perf_event_read = 22,
-	BPF_FUNC_redirect = 23,
-	BPF_FUNC_get_route_realm = 24,
-	BPF_FUNC_perf_event_output = 25,
-	BPF_FUNC_skb_load_bytes = 26,
-	BPF_FUNC_get_stackid = 27,
-	BPF_FUNC_csum_diff = 28,
-	BPF_FUNC_skb_get_tunnel_opt = 29,
-	BPF_FUNC_skb_set_tunnel_opt = 30,
-	BPF_FUNC_skb_change_proto = 31,
-	BPF_FUNC_skb_change_type = 32,
-	BPF_FUNC_skb_under_cgroup = 33,
-	BPF_FUNC_get_hash_recalc = 34,
-	BPF_FUNC_get_current_task = 35,
-	BPF_FUNC_probe_write_user = 36,
-	BPF_FUNC_current_task_under_cgroup = 37,
-	BPF_FUNC_skb_change_tail = 38,
-	BPF_FUNC_skb_pull_data = 39,
-	BPF_FUNC_csum_update = 40,
-	BPF_FUNC_set_hash_invalid = 41,
-	BPF_FUNC_get_numa_node_id = 42,
-	BPF_FUNC_skb_change_head = 43,
-	BPF_FUNC_xdp_adjust_head = 44,
-	BPF_FUNC_probe_read_str = 45,
-	BPF_FUNC_get_socket_cookie = 46,
-	BPF_FUNC_get_socket_uid = 47,
-	BPF_FUNC_set_hash = 48,
-	BPF_FUNC_setsockopt = 49,
-	BPF_FUNC_skb_adjust_room = 50,
-	BPF_FUNC_redirect_map = 51,
-	BPF_FUNC_sk_redirect_map = 52,
-	BPF_FUNC_sock_map_update = 53,
-	BPF_FUNC_xdp_adjust_meta = 54,
-	BPF_FUNC_perf_event_read_value = 55,
-	BPF_FUNC_perf_prog_read_value = 56,
-	BPF_FUNC_getsockopt = 57,
-	BPF_FUNC_override_return = 58,
-	BPF_FUNC_sock_ops_cb_flags_set = 59,
-	BPF_FUNC_msg_redirect_map = 60,
-	BPF_FUNC_msg_apply_bytes = 61,
-	BPF_FUNC_msg_cork_bytes = 62,
-	BPF_FUNC_msg_pull_data = 63,
-	BPF_FUNC_bind = 64,
-	BPF_FUNC_xdp_adjust_tail = 65,
-	BPF_FUNC_skb_get_xfrm_state = 66,
-	BPF_FUNC_get_stack = 67,
-	BPF_FUNC_skb_load_bytes_relative = 68,
-	BPF_FUNC_fib_lookup = 69,
-	BPF_FUNC_sock_hash_update = 70,
-	BPF_FUNC_msg_redirect_hash = 71,
-	BPF_FUNC_sk_redirect_hash = 72,
-	BPF_FUNC_lwt_push_encap = 73,
-	BPF_FUNC_lwt_seg6_store_bytes = 74,
-	BPF_FUNC_lwt_seg6_adjust_srh = 75,
-	BPF_FUNC_lwt_seg6_action = 76,
-	BPF_FUNC_rc_repeat = 77,
-	BPF_FUNC_rc_keydown = 78,
-	BPF_FUNC_skb_cgroup_id = 79,
-	BPF_FUNC_get_current_cgroup_id = 80,
-	BPF_FUNC_get_local_storage = 81,
-	BPF_FUNC_sk_select_reuseport = 82,
-	BPF_FUNC_skb_ancestor_cgroup_id = 83,
-	BPF_FUNC_sk_lookup_tcp = 84,
-	BPF_FUNC_sk_lookup_udp = 85,
-	BPF_FUNC_sk_release = 86,
-	BPF_FUNC_map_push_elem = 87,
-	BPF_FUNC_map_pop_elem = 88,
-	BPF_FUNC_map_peek_elem = 89,
-	BPF_FUNC_msg_push_data = 90,
-	BPF_FUNC_msg_pop_data = 91,
-	BPF_FUNC_rc_pointer_rel = 92,
-	BPF_FUNC_spin_lock = 93,
-	BPF_FUNC_spin_unlock = 94,
-	BPF_FUNC_sk_fullsock = 95,
-	BPF_FUNC_tcp_sock = 96,
-	BPF_FUNC_skb_ecn_set_ce = 97,
-	BPF_FUNC_get_listener_sock = 98,
-	BPF_FUNC_skc_lookup_tcp = 99,
-	BPF_FUNC_tcp_check_syncookie = 100,
-	BPF_FUNC_sysctl_get_name = 101,
-	BPF_FUNC_sysctl_get_current_value = 102,
-	BPF_FUNC_sysctl_get_new_value = 103,
-	BPF_FUNC_sysctl_set_new_value = 104,
-	BPF_FUNC_strtol = 105,
-	BPF_FUNC_strtoul = 106,
-	BPF_FUNC_sk_storage_get = 107,
-	BPF_FUNC_sk_storage_delete = 108,
-	BPF_FUNC_send_signal = 109,
-	BPF_FUNC_tcp_gen_syncookie = 110,
-	BPF_FUNC_skb_output = 111,
-	BPF_FUNC_probe_read_user = 112,
-	BPF_FUNC_probe_read_kernel = 113,
-	BPF_FUNC_probe_read_user_str = 114,
-	BPF_FUNC_probe_read_kernel_str = 115,
-	BPF_FUNC_tcp_send_ack = 116,
-	BPF_FUNC_send_signal_thread = 117,
-	BPF_FUNC_jiffies64 = 118,
-	BPF_FUNC_read_branch_records = 119,
-	BPF_FUNC_get_ns_current_pid_tgid = 120,
-	BPF_FUNC_xdp_output = 121,
-	BPF_FUNC_get_netns_cookie = 122,
-	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
-	BPF_FUNC_sk_assign = 124,
-	BPF_FUNC_ktime_get_boot_ns = 125,
-	BPF_FUNC_seq_printf = 126,
-	BPF_FUNC_seq_write = 127,
-	BPF_FUNC_sk_cgroup_id = 128,
-	BPF_FUNC_sk_ancestor_cgroup_id = 129,
-	BPF_FUNC_ringbuf_output = 130,
-	BPF_FUNC_ringbuf_reserve = 131,
-	BPF_FUNC_ringbuf_submit = 132,
-	BPF_FUNC_ringbuf_discard = 133,
-	BPF_FUNC_ringbuf_query = 134,
-	BPF_FUNC_csum_level = 135,
-	BPF_FUNC_skc_to_tcp6_sock = 136,
-	BPF_FUNC_skc_to_tcp_sock = 137,
-	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
-	BPF_FUNC_skc_to_tcp_request_sock = 139,
-	BPF_FUNC_skc_to_udp6_sock = 140,
-	BPF_FUNC_get_task_stack = 141,
-	BPF_FUNC_load_hdr_opt = 142,
-	BPF_FUNC_store_hdr_opt = 143,
-	BPF_FUNC_reserve_hdr_opt = 144,
-	BPF_FUNC_inode_storage_get = 145,
-	BPF_FUNC_inode_storage_delete = 146,
-	BPF_FUNC_d_path = 147,
-	BPF_FUNC_copy_from_user = 148,
-	BPF_FUNC_snprintf_btf = 149,
-	BPF_FUNC_seq_printf_btf = 150,
-	BPF_FUNC_skb_cgroup_classid = 151,
-	BPF_FUNC_redirect_neigh = 152,
-	BPF_FUNC_per_cpu_ptr = 153,
-	BPF_FUNC_this_cpu_ptr = 154,
-	BPF_FUNC_redirect_peer = 155,
-	__BPF_FUNC_MAX_ID = 156,
-};
-
-enum {
-	BPF_F_INDEX_MASK = 4294967295,
-	BPF_F_CURRENT_CPU = 4294967295,
-	BPF_F_CTXLEN_MASK = 0,
-};
-
-struct bpf_perf_event_value {
-	__u64 counter;
-	__u64 enabled;
-	__u64 running;
-};
-
-struct bpf_raw_tracepoint_args {
-	__u64 args[0];
-};
-
-enum bpf_task_fd_type {
-	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
-	BPF_FD_TYPE_TRACEPOINT = 1,
-	BPF_FD_TYPE_KPROBE = 2,
-	BPF_FD_TYPE_KRETPROBE = 3,
-	BPF_FD_TYPE_UPROBE = 4,
-	BPF_FD_TYPE_URETPROBE = 5,
-};
-
-struct btf_ptr {
-	void *ptr;
-	__u32 type_id;
-	__u32 flags;
-};
-
-enum {
-	BTF_F_COMPACT = 1,
-	BTF_F_NONAME = 2,
-	BTF_F_PTR_RAW = 4,
-	BTF_F_ZERO = 8,
-};
-
-enum bpf_arg_type {
-	ARG_DONTCARE = 0,
-	ARG_CONST_MAP_PTR = 1,
-	ARG_PTR_TO_MAP_KEY = 2,
-	ARG_PTR_TO_MAP_VALUE = 3,
-	ARG_PTR_TO_UNINIT_MAP_VALUE = 4,
-	ARG_PTR_TO_MAP_VALUE_OR_NULL = 5,
-	ARG_PTR_TO_MEM = 6,
-	ARG_PTR_TO_MEM_OR_NULL = 7,
-	ARG_PTR_TO_UNINIT_MEM = 8,
-	ARG_CONST_SIZE = 9,
-	ARG_CONST_SIZE_OR_ZERO = 10,
-	ARG_PTR_TO_CTX = 11,
-	ARG_PTR_TO_CTX_OR_NULL = 12,
-	ARG_ANYTHING = 13,
-	ARG_PTR_TO_SPIN_LOCK = 14,
-	ARG_PTR_TO_SOCK_COMMON = 15,
-	ARG_PTR_TO_INT = 16,
-	ARG_PTR_TO_LONG = 17,
-	ARG_PTR_TO_SOCKET = 18,
-	ARG_PTR_TO_SOCKET_OR_NULL = 19,
-	ARG_PTR_TO_BTF_ID = 20,
-	ARG_PTR_TO_ALLOC_MEM = 21,
-	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 22,
-	ARG_CONST_ALLOC_SIZE_OR_ZERO = 23,
-	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 24,
-	ARG_PTR_TO_PERCPU_BTF_ID = 25,
-	__BPF_ARG_TYPE_MAX = 26,
-};
-
-enum bpf_return_type {
-	RET_INTEGER = 0,
-	RET_VOID = 1,
-	RET_PTR_TO_MAP_VALUE = 2,
-	RET_PTR_TO_MAP_VALUE_OR_NULL = 3,
-	RET_PTR_TO_SOCKET_OR_NULL = 4,
-	RET_PTR_TO_TCP_SOCK_OR_NULL = 5,
-	RET_PTR_TO_SOCK_COMMON_OR_NULL = 6,
-	RET_PTR_TO_ALLOC_MEM_OR_NULL = 7,
-	RET_PTR_TO_BTF_ID_OR_NULL = 8,
-	RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9,
-	RET_PTR_TO_MEM_OR_BTF_ID = 10,
-};
-
-struct bpf_func_proto {
-	u64 (*func)(u64, u64, u64, u64, u64);
-	bool gpl_only;
-	bool pkt_access;
-	enum bpf_return_type ret_type;
-	union {
-		struct {
-			enum bpf_arg_type arg1_type;
-			enum bpf_arg_type arg2_type;
-			enum bpf_arg_type arg3_type;
-			enum bpf_arg_type arg4_type;
-			enum bpf_arg_type arg5_type;
-		};
-		enum bpf_arg_type arg_type[5];
-	};
-	union {
-		struct {
-			u32 *arg1_btf_id;
-			u32 *arg2_btf_id;
-			u32 *arg3_btf_id;
-			u32 *arg4_btf_id;
-			u32 *arg5_btf_id;
-		};
-		u32 *arg_btf_id[5];
-	};
-	int *ret_btf_id;
-	bool (*allowed)(const struct bpf_prog *);
-};
-
-enum bpf_access_type {
-	BPF_READ = 1,
-	BPF_WRITE = 2,
-};
-
-struct bpf_verifier_log;
-
-struct bpf_insn_access_aux {
-	enum bpf_reg_type reg_type;
-	union {
-		int ctx_field_size;
-		u32 btf_id;
-	};
-	struct bpf_verifier_log *log;
-};
-
-struct bpf_verifier_ops {
-	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
-	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
-	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
-	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
-	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
-};
-
-struct bpf_array_aux {
-	enum bpf_prog_type type;
-	bool jited;
-	struct list_head poke_progs;
-	struct bpf_map *map;
-	struct mutex poke_mutex;
-	struct work_struct work;
-};
-
-struct bpf_array {
-	struct bpf_map map;
-	u32 elem_size;
-	u32 index_mask;
-	struct bpf_array_aux *aux;
-	union {
-		char value[0];
-		void *ptrs[0];
-		void *pptrs[0];
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_event_entry {
-	struct perf_event *event;
-	struct file *perf_file;
-	struct file *map_file;
-	struct callback_head rcu;
-};
-
-typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
-
-typedef struct user_pt_regs bpf_user_pt_regs_t;
-
-struct bpf_perf_event_data {
-	bpf_user_pt_regs_t regs;
-	__u64 sample_period;
-	__u64 addr;
-};
-
-struct perf_event_query_bpf {
-	__u32 ids_len;
-	__u32 prog_cnt;
-	__u32 ids[0];
-};
-
-struct bpf_perf_event_data_kern {
-	bpf_user_pt_regs_t *regs;
-	struct perf_sample_data *data;
-	struct perf_event *event;
-};
-
-struct btf_id_set {
-	u32 cnt;
-	u32 ids[0];
-};
-
-struct trace_event_raw_bpf_trace_printk {
-	struct trace_entry ent;
-	u32 __data_loc_bpf_string;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_trace_printk {
-	u32 bpf_string;
-};
-
-typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
-
-struct bpf_trace_module {
-	struct module *module;
-	struct list_head list;
-};
-
-typedef u64 (*btf_bpf_override_return)(struct pt_regs *, long unsigned int);
-
-typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
-
-typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
-
-struct bpf_seq_printf_buf {
-	char buf[768];
-};
-
-typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
-
-typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
-
-typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
-
-struct bpf_trace_sample_data {
-	struct perf_sample_data sds[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
-
-struct bpf_nested_pt_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_get_current_task)();
-
-typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
-
-struct send_signal_irq_work {
-	struct irq_work irq_work;
-	struct task_struct *task;
-	u32 sig;
-	enum pid_type type;
-};
-
-typedef u64 (*btf_bpf_send_signal)(u32);
-
-typedef u64 (*btf_bpf_send_signal_thread)(u32);
-
-typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
-
-typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
-
-typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
-
-struct bpf_raw_tp_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
-
 enum dynevent_type {
 	DYNEVENT_TYPE_SYNTH = 1,
 	DYNEVENT_TYPE_KPROBE = 2,
@@ -39890,173 +55751,87 @@
 	long unsigned int ret_ip;
 };
 
-struct dyn_event;
-
-struct dyn_event_operations {
-	struct list_head list;
-	int (*create)(int, const char **);
-	int (*show)(struct seq_file *, struct dyn_event *);
-	bool (*is_busy)(struct dyn_event *);
-	int (*free)(struct dyn_event *);
-	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+enum {
+	TRACE_ARRAY_FL_GLOBAL = 1,
 };
 
-struct dyn_event {
-	struct list_head list;
-	struct dyn_event_operations *ops;
-};
+typedef int (*dynevent_check_arg_fn_t)(void *);
 
 struct dynevent_arg {
 	const char *str;
 	char separator;
 };
 
-typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
-
-enum fetch_op {
-	FETCH_OP_NOP = 0,
-	FETCH_OP_REG = 1,
-	FETCH_OP_STACK = 2,
-	FETCH_OP_STACKP = 3,
-	FETCH_OP_RETVAL = 4,
-	FETCH_OP_IMM = 5,
-	FETCH_OP_COMM = 6,
-	FETCH_OP_ARG = 7,
-	FETCH_OP_FOFFS = 8,
-	FETCH_OP_DATA = 9,
-	FETCH_OP_DEREF = 10,
-	FETCH_OP_UDEREF = 11,
-	FETCH_OP_ST_RAW = 12,
-	FETCH_OP_ST_MEM = 13,
-	FETCH_OP_ST_UMEM = 14,
-	FETCH_OP_ST_STRING = 15,
-	FETCH_OP_ST_USTRING = 16,
-	FETCH_OP_MOD_BF = 17,
-	FETCH_OP_LP_ARRAY = 18,
-	FETCH_OP_END = 19,
-	FETCH_NOP_SYMBOL = 20,
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
 };
 
-struct fetch_insn {
-	enum fetch_op op;
-	union {
-		unsigned int param;
-		struct {
-			unsigned int size;
-			int offset;
-		};
-		struct {
-			unsigned char basesize;
-			unsigned char lshift;
-			unsigned char rshift;
-		};
-		long unsigned int immediate;
-		void *data;
-	};
+struct freelist_head {
+	struct freelist_node *head;
 };
 
-struct fetch_type {
-	const char *name;
-	size_t size;
-	int is_signed;
-	print_type_func_t print;
-	const char *fmt;
-	const char *fmttype;
+typedef u32 kprobe_opcode_t;
+
+struct arch_specific_insn {
+	kprobe_opcode_t *insn;
+	int boostable;
 };
 
-struct probe_arg {
-	struct fetch_insn *code;
-	bool dynamic;
+struct kprobe;
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	long unsigned int nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
 	unsigned int offset;
-	unsigned int count;
-	const char *name;
-	const char *comm;
-	char *fmt;
-	const struct fetch_type *type;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
 };
 
-struct trace_uprobe_filter {
-	rwlock_t rwlock;
-	int nr_systemwide;
-	struct list_head perf_events;
+struct kretprobe_instance;
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct kretprobe_holder;
+
+struct kretprobe_instance {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct kretprobe_holder *rph;
+	kprobe_opcode_t *ret_addr;
+	void *fp;
+	char data[0];
 };
 
-struct trace_probe_event {
-	unsigned int flags;
-	struct trace_event_class class;
-	struct trace_event_call call;
-	struct list_head files;
-	struct list_head probes;
-	struct trace_uprobe_filter filter[0];
+struct kretprobe;
+
+struct kretprobe_holder {
+	struct kretprobe *rp;
+	refcount_t ref;
 };
 
-struct trace_probe {
-	struct list_head list;
-	struct trace_probe_event *event;
-	ssize_t size;
-	unsigned int nr_args;
-	struct probe_arg args[0];
-};
-
-struct event_file_link {
-	struct trace_event_file *file;
-	struct list_head list;
-};
-
-enum {
-	TP_ERR_FILE_NOT_FOUND = 0,
-	TP_ERR_NO_REGULAR_FILE = 1,
-	TP_ERR_BAD_REFCNT = 2,
-	TP_ERR_REFCNT_OPEN_BRACE = 3,
-	TP_ERR_BAD_REFCNT_SUFFIX = 4,
-	TP_ERR_BAD_UPROBE_OFFS = 5,
-	TP_ERR_MAXACT_NO_KPROBE = 6,
-	TP_ERR_BAD_MAXACT = 7,
-	TP_ERR_MAXACT_TOO_BIG = 8,
-	TP_ERR_BAD_PROBE_ADDR = 9,
-	TP_ERR_BAD_RETPROBE = 10,
-	TP_ERR_BAD_ADDR_SUFFIX = 11,
-	TP_ERR_NO_GROUP_NAME = 12,
-	TP_ERR_GROUP_TOO_LONG = 13,
-	TP_ERR_BAD_GROUP_NAME = 14,
-	TP_ERR_NO_EVENT_NAME = 15,
-	TP_ERR_EVENT_TOO_LONG = 16,
-	TP_ERR_BAD_EVENT_NAME = 17,
-	TP_ERR_RETVAL_ON_PROBE = 18,
-	TP_ERR_BAD_STACK_NUM = 19,
-	TP_ERR_BAD_ARG_NUM = 20,
-	TP_ERR_BAD_VAR = 21,
-	TP_ERR_BAD_REG_NAME = 22,
-	TP_ERR_BAD_MEM_ADDR = 23,
-	TP_ERR_BAD_IMM = 24,
-	TP_ERR_IMMSTR_NO_CLOSE = 25,
-	TP_ERR_FILE_ON_KPROBE = 26,
-	TP_ERR_BAD_FILE_OFFS = 27,
-	TP_ERR_SYM_ON_UPROBE = 28,
-	TP_ERR_TOO_MANY_OPS = 29,
-	TP_ERR_DEREF_NEED_BRACE = 30,
-	TP_ERR_BAD_DEREF_OFFS = 31,
-	TP_ERR_DEREF_OPEN_BRACE = 32,
-	TP_ERR_COMM_CANT_DEREF = 33,
-	TP_ERR_BAD_FETCH_ARG = 34,
-	TP_ERR_ARRAY_NO_CLOSE = 35,
-	TP_ERR_BAD_ARRAY_SUFFIX = 36,
-	TP_ERR_BAD_ARRAY_NUM = 37,
-	TP_ERR_ARRAY_TOO_BIG = 38,
-	TP_ERR_BAD_TYPE = 39,
-	TP_ERR_BAD_STRING = 40,
-	TP_ERR_BAD_BITFIELD = 41,
-	TP_ERR_ARG_NAME_TOO_LONG = 42,
-	TP_ERR_NO_ARG_NAME = 43,
-	TP_ERR_BAD_ARG_NAME = 44,
-	TP_ERR_USED_ARG_NAME = 45,
-	TP_ERR_ARG_TOO_LONG = 46,
-	TP_ERR_NO_ARG_BODY = 47,
-	TP_ERR_BAD_INSN_BNDRY = 48,
-	TP_ERR_FAIL_REG_PROBE = 49,
-	TP_ERR_DIFF_PROBE_TYPE = 50,
-	TP_ERR_DIFF_ARG_TYPE = 51,
-	TP_ERR_SAME_PROBE = 52,
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct freelist_head freelist;
+	struct kretprobe_holder *rph;
 };
 
 struct trace_kprobe {
@@ -40067,1440 +55842,6 @@
 	struct trace_probe tp;
 };
 
-struct trace_event_raw_cpu {
-	struct trace_entry ent;
-	u32 state;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_powernv_throttle {
-	struct trace_entry ent;
-	int chip_id;
-	u32 __data_loc_reason;
-	int pmax;
-	char __data[0];
-};
-
-struct trace_event_raw_pstate_sample {
-	struct trace_entry ent;
-	u32 core_busy;
-	u32 scaled_busy;
-	u32 from;
-	u32 to;
-	u64 mperf;
-	u64 aperf;
-	u64 tsc;
-	u32 freq;
-	u32 io_boost;
-	char __data[0];
-};
-
-struct trace_event_raw_cpu_frequency_limits {
-	struct trace_entry ent;
-	u32 min_freq;
-	u32 max_freq;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_start {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u32 __data_loc_parent;
-	u32 __data_loc_pm_ops;
-	int event;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_end {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_suspend_resume {
-	struct trace_entry ent;
-	const char *action;
-	int val;
-	bool start;
-	char __data[0];
-};
-
-struct trace_event_raw_wakeup_source {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	char __data[0];
-};
-
-struct trace_event_raw_clock {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_power_domain {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_cpu_latency_qos_request {
-	struct trace_entry ent;
-	s32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_pm_qos_update {
-	struct trace_entry ent;
-	enum pm_qos_req_action action;
-	int prev_value;
-	int curr_value;
-	char __data[0];
-};
-
-struct trace_event_raw_dev_pm_qos_request {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	enum dev_pm_qos_req_type type;
-	s32 new_value;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpu {};
-
-struct trace_event_data_offsets_powernv_throttle {
-	u32 reason;
-};
-
-struct trace_event_data_offsets_pstate_sample {};
-
-struct trace_event_data_offsets_cpu_frequency_limits {};
-
-struct trace_event_data_offsets_device_pm_callback_start {
-	u32 device;
-	u32 driver;
-	u32 parent;
-	u32 pm_ops;
-};
-
-struct trace_event_data_offsets_device_pm_callback_end {
-	u32 device;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_suspend_resume {};
-
-struct trace_event_data_offsets_wakeup_source {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clock {
-	u32 name;
-};
-
-struct trace_event_data_offsets_power_domain {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cpu_latency_qos_request {};
-
-struct trace_event_data_offsets_pm_qos_update {};
-
-struct trace_event_data_offsets_dev_pm_qos_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
-
-typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
-
-typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
-
-typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
-
-typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
-
-typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
-
-typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
-
-typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-struct trace_event_raw_rpm_internal {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flags;
-	int usage_count;
-	int disable_depth;
-	int runtime_auto;
-	int request_pending;
-	int irq_safe;
-	int child_count;
-	char __data[0];
-};
-
-struct trace_event_raw_rpm_return_int {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int ip;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rpm_internal {
-	u32 name;
-};
-
-struct trace_event_data_offsets_rpm_return_int {
-	u32 name;
-};
-
-typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
-
-typedef int (*dynevent_check_arg_fn_t)(void *);
-
-struct dynevent_arg_pair {
-	const char *lhs;
-	const char *rhs;
-	char operator;
-	char separator;
-};
-
-struct trace_probe_log {
-	const char *subsystem;
-	const char **argv;
-	int argc;
-	int index;
-};
-
-enum uprobe_filter_ctx {
-	UPROBE_FILTER_REGISTER = 0,
-	UPROBE_FILTER_UNREGISTER = 1,
-	UPROBE_FILTER_MMAP = 2,
-};
-
-struct uprobe_consumer {
-	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
-	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
-	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-	struct uprobe_consumer *next;
-};
-
-struct uprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int vaddr[0];
-};
-
-struct trace_uprobe {
-	struct dyn_event devent;
-	struct uprobe_consumer consumer;
-	struct path path;
-	struct inode *inode;
-	char *filename;
-	long unsigned int offset;
-	long unsigned int ref_ctr_offset;
-	long unsigned int nhit;
-	struct trace_probe tp;
-};
-
-struct uprobe_dispatch_data {
-	struct trace_uprobe *tu;
-	long unsigned int bp_addr;
-};
-
-struct uprobe_cpu_buffer {
-	struct mutex mutex;
-	void *buf;
-};
-
-typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-
-struct rhash_lock_head;
-
-struct bucket_table {
-	unsigned int size;
-	unsigned int nest;
-	u32 hash_rnd;
-	struct list_head walkers;
-	struct callback_head rcu;
-	struct bucket_table *future_tbl;
-	struct lockdep_map dep_map;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct rhash_lock_head *buckets[0];
-};
-
-struct rnd_state {
-	__u32 s1;
-	__u32 s2;
-	__u32 s3;
-	__u32 s4;
-};
-
-enum xdp_action {
-	XDP_ABORTED = 0,
-	XDP_DROP = 1,
-	XDP_PASS = 2,
-	XDP_TX = 3,
-	XDP_REDIRECT = 4,
-};
-
-enum bpf_jit_poke_reason {
-	BPF_POKE_REASON_TAIL_CALL = 0,
-};
-
-enum bpf_text_poke_type {
-	BPF_MOD_CALL = 0,
-	BPF_MOD_JUMP = 1,
-};
-
-enum xdp_mem_type {
-	MEM_TYPE_PAGE_SHARED = 0,
-	MEM_TYPE_PAGE_ORDER0 = 1,
-	MEM_TYPE_PAGE_POOL = 2,
-	MEM_TYPE_XSK_BUFF_POOL = 3,
-	MEM_TYPE_MAX = 4,
-};
-
-struct xdp_cpumap_stats {
-	unsigned int redirect;
-	unsigned int pass;
-	unsigned int drop;
-};
-
-typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
-
-struct bpf_prog_dummy {
-	struct bpf_prog prog;
-};
-
-typedef u64 (*btf_bpf_user_rnd_u32)();
-
-typedef u64 (*btf_bpf_get_raw_cpu_id)();
-
-struct _bpf_dtab_netdev {
-	struct net_device *dev;
-};
-
-struct rhash_lock_head {};
-
-struct zero_copy_allocator;
-
-struct page_pool;
-
-struct xdp_mem_allocator {
-	struct xdp_mem_info mem;
-	union {
-		void *allocator;
-		struct page_pool *page_pool;
-		struct zero_copy_allocator *zc_alloc;
-	};
-	struct rhash_head node;
-	struct callback_head rcu;
-};
-
-struct trace_event_raw_xdp_exception {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_bulk_tx {
-	struct trace_entry ent;
-	int ifindex;
-	u32 act;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_redirect_template {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	int err;
-	int to_ifindex;
-	u32 map_id;
-	int map_index;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_kthread {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int sched;
-	unsigned int xdp_pass;
-	unsigned int xdp_drop;
-	unsigned int xdp_redirect;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_enqueue {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int to_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_devmap_xmit {
-	struct trace_entry ent;
-	int from_ifindex;
-	u32 act;
-	int to_ifindex;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_disconnect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_connect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	const struct xdp_rxq_info *rxq;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_return_failed {
-	struct trace_entry ent;
-	const struct page *page;
-	u32 mem_id;
-	u32 mem_type;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_xdp_exception {};
-
-struct trace_event_data_offsets_xdp_bulk_tx {};
-
-struct trace_event_data_offsets_xdp_redirect_template {};
-
-struct trace_event_data_offsets_xdp_cpumap_kthread {};
-
-struct trace_event_data_offsets_xdp_cpumap_enqueue {};
-
-struct trace_event_data_offsets_xdp_devmap_xmit {};
-
-struct trace_event_data_offsets_mem_disconnect {};
-
-struct trace_event_data_offsets_mem_connect {};
-
-struct trace_event_data_offsets_mem_return_failed {};
-
-typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
-
-typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
-
-typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
-
-typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
-
-typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
-
-enum bpf_cmd {
-	BPF_MAP_CREATE = 0,
-	BPF_MAP_LOOKUP_ELEM = 1,
-	BPF_MAP_UPDATE_ELEM = 2,
-	BPF_MAP_DELETE_ELEM = 3,
-	BPF_MAP_GET_NEXT_KEY = 4,
-	BPF_PROG_LOAD = 5,
-	BPF_OBJ_PIN = 6,
-	BPF_OBJ_GET = 7,
-	BPF_PROG_ATTACH = 8,
-	BPF_PROG_DETACH = 9,
-	BPF_PROG_TEST_RUN = 10,
-	BPF_PROG_GET_NEXT_ID = 11,
-	BPF_MAP_GET_NEXT_ID = 12,
-	BPF_PROG_GET_FD_BY_ID = 13,
-	BPF_MAP_GET_FD_BY_ID = 14,
-	BPF_OBJ_GET_INFO_BY_FD = 15,
-	BPF_PROG_QUERY = 16,
-	BPF_RAW_TRACEPOINT_OPEN = 17,
-	BPF_BTF_LOAD = 18,
-	BPF_BTF_GET_FD_BY_ID = 19,
-	BPF_TASK_FD_QUERY = 20,
-	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
-	BPF_MAP_FREEZE = 22,
-	BPF_BTF_GET_NEXT_ID = 23,
-	BPF_MAP_LOOKUP_BATCH = 24,
-	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
-	BPF_MAP_UPDATE_BATCH = 26,
-	BPF_MAP_DELETE_BATCH = 27,
-	BPF_LINK_CREATE = 28,
-	BPF_LINK_UPDATE = 29,
-	BPF_LINK_GET_FD_BY_ID = 30,
-	BPF_LINK_GET_NEXT_ID = 31,
-	BPF_ENABLE_STATS = 32,
-	BPF_ITER_CREATE = 33,
-	BPF_LINK_DETACH = 34,
-	BPF_PROG_BIND_MAP = 35,
-};
-
-enum {
-	BPF_ANY = 0,
-	BPF_NOEXIST = 1,
-	BPF_EXIST = 2,
-	BPF_F_LOCK = 4,
-};
-
-enum {
-	BPF_F_NO_PREALLOC = 1,
-	BPF_F_NO_COMMON_LRU = 2,
-	BPF_F_NUMA_NODE = 4,
-	BPF_F_RDONLY = 8,
-	BPF_F_WRONLY = 16,
-	BPF_F_STACK_BUILD_ID = 32,
-	BPF_F_ZERO_SEED = 64,
-	BPF_F_RDONLY_PROG = 128,
-	BPF_F_WRONLY_PROG = 256,
-	BPF_F_CLONE = 512,
-	BPF_F_MMAPABLE = 1024,
-	BPF_F_PRESERVE_ELEMS = 2048,
-	BPF_F_INNER_MAP = 4096,
-};
-
-enum bpf_stats_type {
-	BPF_STATS_RUN_TIME = 0,
-};
-
-struct bpf_prog_info {
-	__u32 type;
-	__u32 id;
-	__u8 tag[8];
-	__u32 jited_prog_len;
-	__u32 xlated_prog_len;
-	__u64 jited_prog_insns;
-	__u64 xlated_prog_insns;
-	__u64 load_time;
-	__u32 created_by_uid;
-	__u32 nr_map_ids;
-	__u64 map_ids;
-	char name[16];
-	__u32 ifindex;
-	__u32 gpl_compatible: 1;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 nr_jited_ksyms;
-	__u32 nr_jited_func_lens;
-	__u64 jited_ksyms;
-	__u64 jited_func_lens;
-	__u32 btf_id;
-	__u32 func_info_rec_size;
-	__u64 func_info;
-	__u32 nr_func_info;
-	__u32 nr_line_info;
-	__u64 line_info;
-	__u64 jited_line_info;
-	__u32 nr_jited_line_info;
-	__u32 line_info_rec_size;
-	__u32 jited_line_info_rec_size;
-	__u32 nr_prog_tags;
-	__u64 prog_tags;
-	__u64 run_time_ns;
-	__u64 run_cnt;
-};
-
-struct bpf_map_info {
-	__u32 type;
-	__u32 id;
-	__u32 key_size;
-	__u32 value_size;
-	__u32 max_entries;
-	__u32 map_flags;
-	char name[16];
-	__u32 ifindex;
-	__u32 btf_vmlinux_value_type_id;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 btf_id;
-	__u32 btf_key_type_id;
-	__u32 btf_value_type_id;
-};
-
-struct bpf_btf_info {
-	__u64 btf;
-	__u32 btf_size;
-	__u32 id;
-};
-
-struct bpf_spin_lock {
-	__u32 val;
-};
-
-struct bpf_attach_target_info {
-	struct btf_func_model fmodel;
-	long int tgt_addr;
-	const char *tgt_name;
-	const struct btf_type *tgt_type;
-};
-
-struct bpf_link_primer {
-	struct bpf_link *link;
-	struct file *file;
-	int fd;
-	u32 id;
-};
-
-enum perf_bpf_event_type {
-	PERF_BPF_EVENT_UNKNOWN = 0,
-	PERF_BPF_EVENT_PROG_LOAD = 1,
-	PERF_BPF_EVENT_PROG_UNLOAD = 2,
-	PERF_BPF_EVENT_MAX = 3,
-};
-
-enum bpf_audit {
-	BPF_AUDIT_LOAD = 0,
-	BPF_AUDIT_UNLOAD = 1,
-	BPF_AUDIT_MAX = 2,
-};
-
-struct bpf_tracing_link {
-	struct bpf_link link;
-	enum bpf_attach_type attach_type;
-	struct bpf_trampoline *trampoline;
-	struct bpf_prog *tgt_prog;
-};
-
-struct bpf_raw_tp_link {
-	struct bpf_link link;
-	struct bpf_raw_event_map *btp;
-};
-
-struct btf_member {
-	__u32 name_off;
-	__u32 type;
-	__u32 offset;
-};
-
-enum btf_func_linkage {
-	BTF_FUNC_STATIC = 0,
-	BTF_FUNC_GLOBAL = 1,
-	BTF_FUNC_EXTERN = 2,
-};
-
-struct btf_var_secinfo {
-	__u32 type;
-	__u32 offset;
-	__u32 size;
-};
-
-enum sk_action {
-	SK_DROP = 0,
-	SK_PASS = 1,
-};
-
-struct bpf_verifier_log {
-	u32 level;
-	char kbuf[1024];
-	char *ubuf;
-	u32 len_used;
-	u32 len_total;
-};
-
-struct bpf_subprog_info {
-	u32 start;
-	u32 linfo_idx;
-	u16 stack_depth;
-	bool has_tail_call;
-	bool tail_call_reachable;
-	bool has_ld_abs;
-};
-
-struct bpf_verifier_stack_elem;
-
-struct bpf_verifier_state;
-
-struct bpf_verifier_state_list;
-
-struct bpf_insn_aux_data;
-
-struct bpf_verifier_env {
-	u32 insn_idx;
-	u32 prev_insn_idx;
-	struct bpf_prog *prog;
-	const struct bpf_verifier_ops *ops;
-	struct bpf_verifier_stack_elem *head;
-	int stack_size;
-	bool strict_alignment;
-	bool test_state_freq;
-	struct bpf_verifier_state *cur_state;
-	struct bpf_verifier_state_list **explored_states;
-	struct bpf_verifier_state_list *free_list;
-	struct bpf_map *used_maps[64];
-	u32 used_map_cnt;
-	u32 id_gen;
-	bool allow_ptr_leaks;
-	bool allow_ptr_to_map_access;
-	bool bpf_capable;
-	bool bypass_spec_v1;
-	bool bypass_spec_v4;
-	bool seen_direct_write;
-	struct bpf_insn_aux_data *insn_aux_data;
-	const struct bpf_line_info *prev_linfo;
-	struct bpf_verifier_log log;
-	struct bpf_subprog_info subprog_info[257];
-	struct {
-		int *insn_state;
-		int *insn_stack;
-		int cur_stack;
-	} cfg;
-	u32 pass_cnt;
-	u32 subprog_cnt;
-	u32 prev_insn_processed;
-	u32 insn_processed;
-	u32 prev_jmps_processed;
-	u32 jmps_processed;
-	u64 verification_time;
-	u32 max_states_per_insn;
-	u32 total_states;
-	u32 peak_states;
-	u32 longest_mark_read_walk;
-};
-
-struct bpf_struct_ops {
-	const struct bpf_verifier_ops *verifier_ops;
-	int (*init)(struct btf *);
-	int (*check_member)(const struct btf_type *, const struct btf_member *);
-	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
-	int (*reg)(void *);
-	void (*unreg)(void *);
-	const struct btf_type *type;
-	const struct btf_type *value_type;
-	const char *name;
-	struct btf_func_model func_models[64];
-	u32 type_id;
-	u32 value_id;
-};
-
-typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-
-struct tnum {
-	u64 value;
-	u64 mask;
-};
-
-enum bpf_reg_liveness {
-	REG_LIVE_NONE = 0,
-	REG_LIVE_READ32 = 1,
-	REG_LIVE_READ64 = 2,
-	REG_LIVE_READ = 3,
-	REG_LIVE_WRITTEN = 4,
-	REG_LIVE_DONE = 8,
-};
-
-struct bpf_reg_state {
-	enum bpf_reg_type type;
-	union {
-		u16 range;
-		struct bpf_map *map_ptr;
-		u32 btf_id;
-		u32 mem_size;
-		long unsigned int raw;
-	};
-	s32 off;
-	u32 id;
-	u32 ref_obj_id;
-	struct tnum var_off;
-	s64 smin_value;
-	s64 smax_value;
-	u64 umin_value;
-	u64 umax_value;
-	s32 s32_min_value;
-	s32 s32_max_value;
-	u32 u32_min_value;
-	u32 u32_max_value;
-	struct bpf_reg_state *parent;
-	u32 frameno;
-	s32 subreg_def;
-	enum bpf_reg_liveness live;
-	bool precise;
-};
-
-enum bpf_stack_slot_type {
-	STACK_INVALID = 0,
-	STACK_SPILL = 1,
-	STACK_MISC = 2,
-	STACK_ZERO = 3,
-};
-
-struct bpf_stack_state {
-	struct bpf_reg_state spilled_ptr;
-	u8 slot_type[8];
-};
-
-struct bpf_reference_state {
-	int id;
-	int insn_idx;
-};
-
-struct bpf_func_state {
-	struct bpf_reg_state regs[11];
-	int callsite;
-	u32 frameno;
-	u32 subprogno;
-	int acquired_refs;
-	struct bpf_reference_state *refs;
-	int allocated_stack;
-	struct bpf_stack_state *stack;
-};
-
-struct bpf_idx_pair {
-	u32 prev_idx;
-	u32 idx;
-};
-
-struct bpf_verifier_state {
-	struct bpf_func_state *frame[8];
-	struct bpf_verifier_state *parent;
-	u32 branches;
-	u32 insn_idx;
-	u32 curframe;
-	u32 active_spin_lock;
-	bool speculative;
-	u32 first_insn_idx;
-	u32 last_insn_idx;
-	struct bpf_idx_pair *jmp_history;
-	u32 jmp_history_cnt;
-};
-
-struct bpf_verifier_state_list {
-	struct bpf_verifier_state state;
-	struct bpf_verifier_state_list *next;
-	int miss_cnt;
-	int hit_cnt;
-};
-
-struct bpf_insn_aux_data {
-	union {
-		enum bpf_reg_type ptr_type;
-		long unsigned int map_ptr_state;
-		s32 call_imm;
-		u32 alu_limit;
-		struct {
-			u32 map_index;
-			u32 map_off;
-		};
-		struct {
-			enum bpf_reg_type reg_type;
-			union {
-				u32 btf_id;
-				u32 mem_size;
-			};
-		} btf_var;
-	};
-	u64 map_key_state;
-	int ctx_field_size;
-	int sanitize_stack_off;
-	u32 seen;
-	bool zext_dst;
-	u8 alu_state;
-	unsigned int orig_idx;
-	bool prune_point;
-};
-
-struct bpf_verifier_stack_elem {
-	struct bpf_verifier_state st;
-	int insn_idx;
-	int prev_insn_idx;
-	struct bpf_verifier_stack_elem *next;
-	u32 log_pos;
-};
-
-enum {
-	BTF_SOCK_TYPE_INET = 0,
-	BTF_SOCK_TYPE_INET_CONN = 1,
-	BTF_SOCK_TYPE_INET_REQ = 2,
-	BTF_SOCK_TYPE_INET_TW = 3,
-	BTF_SOCK_TYPE_REQ = 4,
-	BTF_SOCK_TYPE_SOCK = 5,
-	BTF_SOCK_TYPE_SOCK_COMMON = 6,
-	BTF_SOCK_TYPE_TCP = 7,
-	BTF_SOCK_TYPE_TCP_REQ = 8,
-	BTF_SOCK_TYPE_TCP_TW = 9,
-	BTF_SOCK_TYPE_TCP6 = 10,
-	BTF_SOCK_TYPE_UDP = 11,
-	BTF_SOCK_TYPE_UDP6 = 12,
-	MAX_BTF_SOCK_TYPE = 13,
-};
-
-typedef void (*bpf_insn_print_t)(void *, const char *, ...);
-
-typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
-
-typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
-
-struct bpf_insn_cbs {
-	bpf_insn_print_t cb_print;
-	bpf_insn_revmap_call_t cb_call;
-	bpf_insn_print_imm_t cb_imm;
-	void *private_data;
-};
-
-struct bpf_call_arg_meta {
-	struct bpf_map *map_ptr;
-	bool raw_mode;
-	bool pkt_access;
-	int regno;
-	int access_size;
-	int mem_size;
-	u64 msize_max_value;
-	int ref_obj_id;
-	int func_id;
-	u32 btf_id;
-	u32 ret_btf_id;
-};
-
-enum reg_arg_type {
-	SRC_OP = 0,
-	DST_OP = 1,
-	DST_OP_NO_MARK = 2,
-};
-
-struct bpf_reg_types {
-	const enum bpf_reg_type types[10];
-	u32 *btf_id;
-};
-
-enum {
-	DISCOVERED = 16,
-	EXPLORED = 32,
-	FALLTHROUGH = 1,
-	BRANCH___2 = 2,
-};
-
-struct idpair {
-	u32 old;
-	u32 cur;
-};
-
-struct tree_descr {
-	const char *name;
-	const struct file_operations *ops;
-	int mode;
-};
-
-struct bpf_preload_info {
-	char link_name[16];
-	int link_id;
-};
-
-struct bpf_preload_ops {
-	struct umd_info info;
-	int (*preload)(struct bpf_preload_info *);
-	int (*finish)();
-	struct module *owner;
-};
-
-enum bpf_type {
-	BPF_TYPE_UNSPEC = 0,
-	BPF_TYPE_PROG = 1,
-	BPF_TYPE_MAP = 2,
-	BPF_TYPE_LINK = 3,
-};
-
-struct map_iter {
-	void *key;
-	bool done;
-};
-
-enum {
-	OPT_MODE = 0,
-};
-
-struct bpf_mount_opts {
-	umode_t mode;
-};
-
-struct bpf_pidns_info {
-	__u32 pid;
-	__u32 tgid;
-};
-
-typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
-
-typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_get_smp_processor_id)();
-
-typedef u64 (*btf_bpf_get_numa_node_id)();
-
-typedef u64 (*btf_bpf_ktime_get_ns)();
-
-typedef u64 (*btf_bpf_ktime_get_boot_ns)();
-
-typedef u64 (*btf_bpf_get_current_pid_tgid)();
-
-typedef u64 (*btf_bpf_get_current_uid_gid)();
-
-typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
-
-typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_jiffies64)();
-
-typedef u64 (*btf_bpf_get_current_cgroup_id)();
-
-typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
-
-typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
-
-typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
-
-typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
-
-typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
-
-typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
-
-union bpf_iter_link_info {
-	struct {
-		__u32 map_fd;
-	} map;
-};
-
-typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
-
-typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
-
-typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
-
-typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
-
-struct bpf_iter_reg {
-	const char *target;
-	bpf_iter_attach_target_t attach_target;
-	bpf_iter_detach_target_t detach_target;
-	bpf_iter_show_fdinfo_t show_fdinfo;
-	bpf_iter_fill_link_info_t fill_link_info;
-	u32 ctx_arg_info_size;
-	struct bpf_ctx_arg_aux ctx_arg_info[2];
-	const struct bpf_iter_seq_info *seq_info;
-};
-
-struct bpf_iter_meta {
-	union {
-		struct seq_file *seq;
-	};
-	u64 session_id;
-	u64 seq_num;
-};
-
-struct bpf_iter_target_info {
-	struct list_head list;
-	const struct bpf_iter_reg *reg_info;
-	u32 btf_id;
-};
-
-struct bpf_iter_link {
-	struct bpf_link link;
-	struct bpf_iter_aux_info aux;
-	struct bpf_iter_target_info *tinfo;
-};
-
-struct bpf_iter_priv_data {
-	struct bpf_iter_target_info *tinfo;
-	const struct bpf_iter_seq_info *seq_info;
-	struct bpf_prog *prog;
-	u64 session_id;
-	u64 seq_num;
-	bool done_stop;
-	long: 56;
-	u8 target_private[0];
-};
-
-struct bpf_iter_seq_map_info {
-	u32 map_id;
-};
-
-struct bpf_iter__bpf_map {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-};
-
-struct bpf_iter_seq_task_common {
-	struct pid_namespace *ns;
-};
-
-struct bpf_iter_seq_task_info {
-	struct bpf_iter_seq_task_common common;
-	u32 tid;
-};
-
-struct bpf_iter__task {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-};
-
-struct bpf_iter_seq_task_file_info {
-	struct bpf_iter_seq_task_common common;
-	struct task_struct *task;
-	struct files_struct *files;
-	u32 tid;
-	u32 fd;
-};
-
-struct bpf_iter__task_file {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct task_struct *task;
-	};
-	u32 fd;
-	union {
-		struct file *file;
-	};
-};
-
-struct bpf_iter_seq_prog_info {
-	u32 prog_id;
-};
-
-struct bpf_iter__bpf_prog {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_prog *prog;
-	};
-};
-
-struct bpf_iter__bpf_map_elem {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		void *value;
-	};
-};
-
-struct pcpu_freelist_node;
-
-struct pcpu_freelist_head {
-	struct pcpu_freelist_node *first;
-	raw_spinlock_t lock;
-};
-
-struct pcpu_freelist_node {
-	struct pcpu_freelist_node *next;
-};
-
-struct pcpu_freelist {
-	struct pcpu_freelist_head *freelist;
-	struct pcpu_freelist_head extralist;
-};
-
-struct bpf_lru_node {
-	struct list_head list;
-	u16 cpu;
-	u8 type;
-	u8 ref;
-};
-
-struct bpf_lru_list {
-	struct list_head lists[3];
-	unsigned int counts[2];
-	struct list_head *next_inactive_rotation;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_lru_locallist {
-	struct list_head lists[2];
-	u16 next_steal;
-	raw_spinlock_t lock;
-};
-
-struct bpf_common_lru {
-	struct bpf_lru_list lru_list;
-	struct bpf_lru_locallist *local_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
-
-struct bpf_lru {
-	union {
-		struct bpf_common_lru common_lru;
-		struct bpf_lru_list *percpu_lru;
-	};
-	del_from_htab_func del_from_htab;
-	void *del_arg;
-	unsigned int hash_offset;
-	unsigned int nr_scans;
-	bool percpu;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bucket {
-	struct hlist_nulls_head head;
-	union {
-		raw_spinlock_t raw_lock;
-		spinlock_t lock;
-	};
-};
-
-struct htab_elem;
-
-struct bpf_htab {
-	struct bpf_map map;
-	struct bucket *buckets;
-	void *elems;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct pcpu_freelist freelist;
-		struct bpf_lru lru;
-	};
-	struct htab_elem **extra_elems;
-	atomic_t count;
-	u32 n_buckets;
-	u32 elem_size;
-	u32 hashrnd;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct htab_elem {
-	union {
-		struct hlist_nulls_node hash_node;
-		struct {
-			void *padding;
-			union {
-				struct bpf_htab *htab;
-				struct pcpu_freelist_node fnode;
-				struct htab_elem *batch_flink;
-			};
-		};
-	};
-	union {
-		struct callback_head rcu;
-		struct bpf_lru_node lru_node;
-	};
-	u32 hash;
-	int: 32;
-	char key[0];
-};
-
-struct bpf_iter_seq_hash_map_info {
-	struct bpf_map *map;
-	struct bpf_htab *htab;
-	void *percpu_value_buf;
-	u32 bucket_id;
-	u32 skip_elems;
-};
-
-struct bpf_iter_seq_array_map_info {
-	struct bpf_map *map;
-	void *percpu_value_buf;
-	u32 index;
-};
-
-struct prog_poke_elem {
-	struct list_head list;
-	struct bpf_prog_aux *aux;
-};
-
-enum bpf_lru_list_type {
-	BPF_LRU_LIST_T_ACTIVE = 0,
-	BPF_LRU_LIST_T_INACTIVE = 1,
-	BPF_LRU_LIST_T_FREE = 2,
-	BPF_LRU_LOCAL_LIST_T_FREE = 3,
-	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
-};
-
 struct bpf_lpm_trie_key {
 	__u32 prefixlen;
 	__u8 data[0];
@@ -41521,7 +55862,6 @@
 	size_t max_prefixlen;
 	size_t data_size;
 	spinlock_t lock;
-	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -41535,46 +55875,4204 @@
 	long: 64;
 };
 
-struct bpf_cgroup_storage_map {
+struct reuseport_array {
 	struct bpf_map map;
-	spinlock_t lock;
-	struct rb_root root;
+	struct sock *ptrs[0];
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+struct wb_lock_cookie {
+	bool locked;
+	long unsigned int flags;
+};
+
+struct dirty_throttle_control {
+	struct bdi_writeback *wb;
+	struct fprop_local_percpu *wb_completions;
+	long unsigned int avail;
+	long unsigned int dirty;
+	long unsigned int thresh;
+	long unsigned int bg_thresh;
+	long unsigned int wb_dirty;
+	long unsigned int wb_thresh;
+	long unsigned int wb_bg_thresh;
+	long unsigned int pos_ratio;
+};
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_IGNORE_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+typedef int rmap_t;
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	long unsigned int pages;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	long unsigned int succeeded;
+	long unsigned int failed;
+	long unsigned int thp_succeeded;
+	long unsigned int thp_failed;
+	long unsigned int thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+struct folio_referenced_arg {
+	int mapcount;
+	int referenced;
+	long unsigned int vm_flags;
+	struct mem_cgroup *memcg;
+};
+
+struct rmap_item;
+
+struct mm_slot {
+	struct hlist_node link;
+	struct list_head mm_list;
+	struct rmap_item *rmap_list;
+	struct mm_struct *mm;
+};
+
+struct stable_node;
+
+struct rmap_item {
+	struct rmap_item *rmap_list;
+	union {
+		struct anon_vma *anon_vma;
+		int nid;
+	};
+	struct mm_struct *mm;
+	long unsigned int address;
+	unsigned int oldchecksum;
+	union {
+		struct rb_node node;
+		struct {
+			struct stable_node *head;
+			struct hlist_node hlist;
+		};
+	};
+};
+
+struct ksm_scan {
+	struct mm_slot *mm_slot;
+	long unsigned int address;
+	struct rmap_item **rmap_list;
+	long unsigned int seqnr;
+};
+
+struct stable_node {
+	union {
+		struct rb_node node;
+		struct {
+			struct list_head *head;
+			struct {
+				struct hlist_node hlist_dup;
+				struct list_head list;
+			};
+		};
+	};
+	struct hlist_head hlist;
+	union {
+		long unsigned int kpfn;
+		long unsigned int chain_prune_time;
+	};
+	int rmap_hlist_len;
+	int nid;
+};
+
+enum get_ksm_page_flags {
+	GET_KSM_PAGE_NOLOCK = 0,
+	GET_KSM_PAGE_LOCK = 1,
+	GET_KSM_PAGE_TRYLOCK = 2,
+};
+
+enum vfs_get_super_keying {
+	vfs_get_single_super = 0,
+	vfs_get_single_reconf_super = 1,
+	vfs_get_keyed_super = 2,
+	vfs_get_independent_super = 3,
+};
+
+struct eventfd_ctx {
+	struct kref kref;
+	wait_queue_head_t wqh;
+	__u64 count;
+	unsigned int flags;
+	int id;
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *tail_vma;
+	struct mempolicy *task_mempolicy;
+};
+
+struct mem_size_stats {
+	long unsigned int resident;
+	long unsigned int shared_clean;
+	long unsigned int shared_dirty;
+	long unsigned int private_clean;
+	long unsigned int private_dirty;
+	long unsigned int referenced;
+	long unsigned int anonymous;
+	long unsigned int lazyfree;
+	long unsigned int anonymous_thp;
+	long unsigned int shmem_thp;
+	long unsigned int file_thp;
+	long unsigned int swap;
+	long unsigned int shared_hugetlb;
+	long unsigned int private_hugetlb;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct numa_maps {
+	long unsigned int pages;
+	long unsigned int anon;
+	long unsigned int active;
+	long unsigned int writeback;
+	long unsigned int mapcount_max;
+	long unsigned int dirty;
+	long unsigned int swapcache;
+	long unsigned int node[256];
+};
+
+struct numa_maps_private {
+	struct proc_maps_private proc_maps;
+	struct numa_maps md;
+};
+
+struct bpf_iter_aux_info;
+
+enum {
+	EXT4_MF_MNTDIR_SAMPLED = 0,
+	EXT4_MF_FS_ABORTED = 1,
+	EXT4_MF_FC_INELIGIBLE = 2,
+};
+
+enum {
+	EXT4_STATE_JDATA = 0,
+	EXT4_STATE_NEW = 1,
+	EXT4_STATE_XATTR = 2,
+	EXT4_STATE_NO_EXPAND = 3,
+	EXT4_STATE_DA_ALLOC_CLOSE = 4,
+	EXT4_STATE_EXT_MIGRATE = 5,
+	EXT4_STATE_NEWENTRY = 6,
+	EXT4_STATE_MAY_INLINE_DATA = 7,
+	EXT4_STATE_EXT_PRECACHED = 8,
+	EXT4_STATE_LUSTRE_EA_INODE = 9,
+	EXT4_STATE_VERITY_IN_PROGRESS = 10,
+	EXT4_STATE_FC_COMMITTING = 11,
+	EXT4_STATE_ORPHAN_FILE = 12,
+};
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+struct fscrypt_name {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	u32 hash;
+	u32 minor_hash;
+	struct fscrypt_str crypto_buf;
+	bool is_nokey_name;
+};
+
+enum {
+	EXT4_FC_REASON_XATTR = 0,
+	EXT4_FC_REASON_CROSS_RENAME = 1,
+	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
+	EXT4_FC_REASON_NOMEM = 3,
+	EXT4_FC_REASON_SWAP_BOOT = 4,
+	EXT4_FC_REASON_RESIZE = 5,
+	EXT4_FC_REASON_RENAME_DIR = 6,
+	EXT4_FC_REASON_FALLOC_RANGE = 7,
+	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
+	EXT4_FC_REASON_MAX = 9,
+};
+
+struct ext4_dir_entry {
+	__le32 inode;
+	__le16 rec_len;
+	__le16 name_len;
+	char name[255];
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
+struct ext4_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[255];
+};
+
+struct ext4_dir_entry_tail {
+	__le32 det_reserved_zero1;
+	__le16 det_rec_len;
+	__u8 det_reserved_zero2;
+	__u8 det_reserved_ft;
+	__le32 det_checksum;
+};
+
+struct dx_hash_info {
+	u32 hash;
+	u32 minor_hash;
+	int hash_version;
+	u32 *seed;
+};
+
+struct ext4_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	struct dx_hash_info hinfo;
+};
+
+typedef enum {
+	EXT4_IGET_NORMAL = 0,
+	EXT4_IGET_SPECIAL = 1,
+	EXT4_IGET_HANDLE = 2,
+} ext4_iget_flags;
+
+typedef enum {
+	EITHER = 0,
+	INDEX = 1,
+	DIRENT = 2,
+	DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+struct fake_dirent {
+	__le32 inode;
+	__le16 rec_len;
+	u8 name_len;
+	u8 file_type;
+};
+
+struct dx_countlimit {
+	__le16 limit;
+	__le16 count;
+};
+
+struct dx_entry {
+	__le32 hash;
+	__le32 block;
+};
+
+struct dx_root_info {
+	__le32 reserved_zero;
+	u8 hash_version;
+	u8 info_length;
+	u8 indirect_levels;
+	u8 unused_flags;
+};
+
+struct dx_root {
+	struct fake_dirent dot;
+	char dot_name[4];
+	struct fake_dirent dotdot;
+	char dotdot_name[4];
+	struct dx_root_info info;
+	struct dx_entry entries[0];
+};
+
+struct dx_node {
+	struct fake_dirent fake;
+	struct dx_entry entries[0];
+};
+
+struct dx_frame {
+	struct buffer_head *bh;
+	struct dx_entry *entries;
+	struct dx_entry *at;
+};
+
+struct dx_map_entry {
+	u32 hash;
+	u16 offs;
+	u16 size;
+};
+
+struct dx_tail {
+	u32 dt_reserved;
+	__le32 dt_checksum;
+};
+
+struct ext4_renament {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool is_dir;
+	int dir_nlink_delta;
+	struct buffer_head *bh;
+	struct ext4_dir_entry_2 *de;
+	int inlined;
+	struct buffer_head *dir_bh;
+	struct ext4_dir_entry_2 *parent_de;
+	int dir_inlined;
+};
+
+struct jbd2_journal_block_tail {
+	__be32 t_checksum;
+};
+
+struct recovery_info {
+	tid_t start_transaction;
+	tid_t end_transaction;
+	int nr_replays;
+	int nr_revokes;
+	int nr_revoke_hits;
+};
+
+enum file_time_flags {
+	S_ATIME = 1,
+	S_MTIME = 2,
+	S_CTIME = 4,
+	S_VERSION = 8,
+};
+
+struct msdos_dir_entry {
+	__u8 name[11];
+	__u8 attr;
+	__u8 lcase;
+	__u8 ctime_cs;
+	__le16 ctime;
+	__le16 cdate;
+	__le16 adate;
+	__le16 starthi;
+	__le16 time;
+	__le16 date;
+	__le16 start;
+	__le32 size;
+};
+
+struct fat_slot_info {
+	loff_t i_pos;
+	loff_t slot_off;
+	int nr_slots;
+	struct msdos_dir_entry *de;
+	struct buffer_head *bh;
+};
+
+typedef void (*rpc_action)(struct rpc_task *);
+
+enum nfs_ftype {
+	NFNON = 0,
+	NFREG = 1,
+	NFDIR = 2,
+	NFBLK = 3,
+	NFCHR = 4,
+	NFLNK = 5,
+	NFSOCK = 6,
+	NFBAD = 7,
+	NFFIFO = 8,
+};
+
+enum nfs2_ftype {
+	NF2NON = 0,
+	NF2REG = 1,
+	NF2DIR = 2,
+	NF2BLK = 3,
+	NF2CHR = 4,
+	NF2LNK = 5,
+	NF2SOCK = 6,
+	NF2BAD = 7,
+	NF2FIFO = 8,
+};
+
+struct nfs2_fsstat {
+	__u32 tsize;
+	__u32 bsize;
+	__u32 blocks;
+	__u32 bfree;
+	__u32 bavail;
+};
+
+struct nfs_sattrargs {
+	struct nfs_fh *fh;
+	struct iattr *sattr;
+};
+
+struct nfs_diropargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+};
+
+struct nfs_createargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	struct iattr *sattr;
+};
+
+struct nfs_linkargs {
+	struct nfs_fh *fromfh;
+	struct nfs_fh *tofh;
+	const char *toname;
+	unsigned int tolen;
+};
+
+struct nfs_symlinkargs {
+	struct nfs_fh *fromfh;
+	const char *fromname;
+	unsigned int fromlen;
+	struct page **pages;
+	unsigned int pathlen;
+	struct iattr *sattr;
+};
+
+struct nfs_readdirargs {
+	struct nfs_fh *fh;
+	__u32 cookie;
+	unsigned int count;
+	struct page **pages;
+};
+
+struct nfs_diropok {
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs_readlinkargs {
+	struct nfs_fh *fh;
+	unsigned int pgbase;
+	unsigned int pglen;
+	struct page **pages;
+};
+
+struct lock_manager {
 	struct list_head list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	bool block_opens;
+};
+
+struct rpc_create_args {
+	struct net *net;
+	int protocol;
+	struct sockaddr *address;
+	size_t addrsize;
+	struct sockaddr *saddress;
+	const struct rpc_timeout *timeout;
+	const char *servername;
+	const char *nodename;
+	const struct rpc_program *program;
+	u32 prognumber;
+	u32 version;
+	rpc_authflavor_t authflavor;
+	u32 nconnect;
+	long unsigned int flags;
+	char *client_name;
+	struct svc_xprt *bc_xprt;
+	const struct cred *cred;
+	unsigned int max_connect;
+};
+
+struct lockd_net {
+	unsigned int nlmsvc_users;
+	long unsigned int next_gc;
+	long unsigned int nrhosts;
+	struct delayed_work grace_period_end;
+	struct lock_manager lockd_manager;
+	struct list_head nsm_handles;
+};
+
+struct nlm_lookup_host_info {
+	const int server;
+	const struct sockaddr *sap;
+	const size_t salen;
+	const short unsigned int protocol;
+	const u32 version;
+	const char *hostname;
+	const size_t hostname_len;
+	const int noresvport;
+	struct net *net;
+	const struct cred *cred;
+};
+
+typedef u32 unicode_t;
+
+enum xfs_defer_ops_type {
+	XFS_DEFER_OPS_TYPE_BMAP = 0,
+	XFS_DEFER_OPS_TYPE_REFCOUNT = 1,
+	XFS_DEFER_OPS_TYPE_RMAP = 2,
+	XFS_DEFER_OPS_TYPE_FREE = 3,
+	XFS_DEFER_OPS_TYPE_AGFL_FREE = 4,
+	XFS_DEFER_OPS_TYPE_ATTR = 5,
+	XFS_DEFER_OPS_TYPE_MAX = 6,
+};
+
+struct xfs_defer_pending {
+	struct list_head dfp_list;
+	struct list_head dfp_work;
+	struct xfs_log_item *dfp_intent;
+	struct xfs_log_item *dfp_done;
+	unsigned int dfp_count;
+	enum xfs_defer_ops_type dfp_type;
+};
+
+struct xfs_defer_op_type {
+	struct xfs_log_item * (*create_intent)(struct xfs_trans *, struct list_head *, unsigned int, bool);
+	void (*abort_intent)(struct xfs_log_item *);
+	struct xfs_log_item * (*create_done)(struct xfs_trans *, struct xfs_log_item *, unsigned int);
+	int (*finish_item)(struct xfs_trans *, struct xfs_log_item *, struct list_head *, struct xfs_btree_cur **);
+	void (*finish_cleanup)(struct xfs_trans *, struct xfs_btree_cur *, int);
+	void (*cancel_item)(struct list_head *);
+	unsigned int max_items;
+};
+
+struct xfs_defer_resources {
+	struct xfs_buf *dr_bp[2];
+	struct xfs_inode *dr_ip[2];
+	short unsigned int dr_bufs;
+	short unsigned int dr_ordered;
+	short unsigned int dr_inos;
+};
+
+struct xfs_defer_capture {
+	struct list_head dfc_list;
+	struct list_head dfc_dfops;
+	unsigned int dfc_tpflags;
+	unsigned int dfc_blkres;
+	unsigned int dfc_rtxres;
+	unsigned int dfc_logres;
+	struct xfs_defer_resources dfc_held;
+};
+
+struct xfs_iext_leaf;
+
+struct xfs_iext_cursor {
+	struct xfs_iext_leaf *leaf;
+	int pos;
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_writepage_ctx;
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+struct xfs_writepage_ctx {
+	struct iomap_writepage_ctx ctx;
+	unsigned int data_seq;
+	unsigned int cow_seq;
+};
+
+struct xfs_sysctl_val {
+	int min;
+	int val;
+	int max;
+};
+
+typedef struct xfs_sysctl_val xfs_sysctl_val_t;
+
+struct xfs_param {
+	xfs_sysctl_val_t sgid_inherit;
+	xfs_sysctl_val_t symlink_mode;
+	xfs_sysctl_val_t panic_mask;
+	xfs_sysctl_val_t error_level;
+	xfs_sysctl_val_t syncd_timer;
+	xfs_sysctl_val_t stats_clear;
+	xfs_sysctl_val_t inherit_sync;
+	xfs_sysctl_val_t inherit_nodump;
+	xfs_sysctl_val_t inherit_noatim;
+	xfs_sysctl_val_t xfs_buf_timer;
+	xfs_sysctl_val_t xfs_buf_age;
+	xfs_sysctl_val_t inherit_nosym;
+	xfs_sysctl_val_t rotorstep;
+	xfs_sysctl_val_t inherit_nodfrg;
+	xfs_sysctl_val_t fstrm_timer;
+	xfs_sysctl_val_t blockgc_timer;
+};
+
+typedef struct xfs_param xfs_param_t;
+
+struct xfs_inodegc {
+	struct llist_head list;
+	struct delayed_work work;
+	unsigned int items;
+	unsigned int shrinker_hits;
+};
+
+struct xfs_icwalk {
+	__u32 icw_flags;
+	kuid_t icw_uid;
+	kgid_t icw_gid;
+	prid_t icw_prid;
+	__u64 icw_min_file_size;
+	long int icw_scan_limit;
+};
+
+enum {
+	XFS_QLOWSP_1_PCNT = 0,
+	XFS_QLOWSP_3_PCNT = 1,
+	XFS_QLOWSP_5_PCNT = 2,
+	XFS_QLOWSP_MAX = 3,
+};
+
+enum xfs_icwalk_goal {
+	XFS_ICWALK_BLOCKGC = 1,
+	XFS_ICWALK_RECLAIM = 0,
+};
+
+struct xfs_unmount_log_format {
+	uint16_t magic;
+	uint16_t pad1;
+	uint32_t pad2;
+};
+
+typedef struct xlog_ticket xlog_ticket_t;
+
+struct msgbuf {
+	__kernel_long_t mtype;
+	char mtext[1];
+};
+
+struct msg;
+
+struct msqid_ds {
+	struct ipc_perm msg_perm;
+	struct msg *msg_first;
+	struct msg *msg_last;
+	__kernel_old_time_t msg_stime;
+	__kernel_old_time_t msg_rtime;
+	__kernel_old_time_t msg_ctime;
+	long unsigned int msg_lcbytes;
+	long unsigned int msg_lqbytes;
+	short unsigned int msg_cbytes;
+	short unsigned int msg_qnum;
+	short unsigned int msg_qbytes;
+	__kernel_ipc_pid_t msg_lspid;
+	__kernel_ipc_pid_t msg_lrpid;
+};
+
+struct msqid64_ds {
+	struct ipc64_perm msg_perm;
+	long int msg_stime;
+	long int msg_rtime;
+	long int msg_ctime;
+	long unsigned int msg_cbytes;
+	long unsigned int msg_qnum;
+	long unsigned int msg_qbytes;
+	__kernel_pid_t msg_lspid;
+	__kernel_pid_t msg_lrpid;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct msginfo {
+	int msgpool;
+	int msgmap;
+	int msgmax;
+	int msgmnb;
+	int msgmni;
+	int msgssz;
+	int msgtql;
+	short unsigned int msgseg;
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long int m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct msg_queue {
+	struct kern_ipc_perm q_perm;
+	time64_t q_stime;
+	time64_t q_rtime;
+	time64_t q_ctime;
+	long unsigned int q_cbytes;
+	long unsigned int q_qnum;
+	long unsigned int q_qbytes;
+	struct pid *q_lspid;
+	struct pid *q_lrpid;
+	struct list_head q_messages;
+	struct list_head q_receivers;
+	struct list_head q_senders;
 	long: 64;
 	long: 64;
 };
 
-struct bpf_queue_stack {
-	struct bpf_map map;
-	raw_spinlock_t lock;
-	u32 head;
-	u32 tail;
+struct msg_receiver {
+	struct list_head r_list;
+	struct task_struct *r_tsk;
+	int r_mode;
+	long int r_msgtype;
+	long int r_maxsize;
+	struct msg_msg *r_msg;
+};
+
+struct msg_sender {
+	struct list_head list;
+	struct task_struct *tsk;
+	size_t msgsz;
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	kuid_t rootid;
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_DEF_MAX_SECTORS = 2560,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	void *priv;
+	bool reset;
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+};
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+struct io_rsrc_node {
+	struct percpu_ref refs;
+	struct list_head node;
+	struct list_head rsrc_list;
+	struct io_rsrc_data *rsrc_data;
+	struct llist_node llist;
+	bool done;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	long unsigned int acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_rsrc_put;
+
+typedef void rsrc_put_fn(struct io_ring_ctx *, struct io_rsrc_put *);
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	rsrc_put_fn *do_put;
+	atomic_t refs;
+	struct completion done;
+	bool quiesce;
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_CQE32_INIT_BIT = 26,
+	REQ_F_APOLL_MULTISHOT_BIT = 27,
+	REQ_F_CLEAR_POLLIN_BIT = 28,
+	REQ_F_HASH_LOCKED_BIT = 29,
+	REQ_F_SUPPORT_NOWAIT_BIT = 30,
+	REQ_F_ISREG_BIT = 31,
+	__REQ_F_LAST_BIT = 32,
+};
+
+struct io_rsrc_put {
+	struct list_head list;
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
+};
+
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
+};
+
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
+};
+
+struct assoc_array_ops {
+	long unsigned int (*get_key_chunk)(const void *, int);
+	long unsigned int (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	long unsigned int nr_leaves_on_branch;
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	long unsigned int index_key[0];
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long int adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+enum assoc_array_walk_status {
+	assoc_array_walk_tree_empty = 0,
+	assoc_array_walk_found_terminal_node = 1,
+	assoc_array_walk_found_wrong_shortcut = 2,
+};
+
+struct assoc_array_walk_result {
+	struct {
+		struct assoc_array_node *node;
+		int level;
+		int slot;
+	} terminal_node;
+	struct {
+		struct assoc_array_shortcut *shortcut;
+		int level;
+		int sc_level;
+		long unsigned int sc_segments;
+		long unsigned int dissimilarity;
+	} wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+	struct assoc_array_node *node;
+	const void *skip_leaf;
+	int slot;
+};
+
+typedef unsigned char uch;
+
+typedef short unsigned int ush;
+
+typedef long unsigned int ulg;
+
+struct ct_data_s {
+	union {
+		ush freq;
+		ush code;
+	} fc;
+	union {
+		ush dad;
+		ush len;
+	} dl;
+};
+
+typedef struct ct_data_s ct_data;
+
+struct static_tree_desc_s {
+	const ct_data *static_tree;
+	const int *extra_bits;
+	int extra_base;
+	int elems;
+	int max_length;
+};
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+struct tree_desc_s {
+	ct_data *dyn_tree;
+	int max_code;
+	static_tree_desc *stat_desc;
+};
+
+typedef ush Pos;
+
+typedef unsigned int IPos;
+
+struct deflate_state {
+	z_streamp strm;
+	int status;
+	Byte *pending_buf;
+	ulg pending_buf_size;
+	Byte *pending_out;
+	int pending;
+	int noheader;
+	Byte data_type;
+	Byte method;
+	int last_flush;
+	uInt w_size;
+	uInt w_bits;
+	uInt w_mask;
+	Byte *window;
+	ulg window_size;
+	Pos *prev;
+	Pos *head;
+	uInt ins_h;
+	uInt hash_size;
+	uInt hash_bits;
+	uInt hash_mask;
+	uInt hash_shift;
+	long int block_start;
+	uInt match_length;
+	IPos prev_match;
+	int match_available;
+	uInt strstart;
+	uInt match_start;
+	uInt lookahead;
+	uInt prev_length;
+	uInt max_chain_length;
+	uInt max_lazy_match;
+	int level;
+	int strategy;
+	uInt good_match;
+	int nice_match;
+	struct ct_data_s dyn_ltree[573];
+	struct ct_data_s dyn_dtree[61];
+	struct ct_data_s bl_tree[39];
+	struct tree_desc_s l_desc;
+	struct tree_desc_s d_desc;
+	struct tree_desc_s bl_desc;
+	ush bl_count[16];
+	int heap[573];
+	int heap_len;
+	int heap_max;
+	uch depth[573];
+	uch *l_buf;
+	uInt lit_bufsize;
+	uInt last_lit;
+	ush *d_buf;
+	ulg opt_len;
+	ulg static_len;
+	ulg compressed_len;
+	uInt matches;
+	int last_eob_len;
+	ush bi_buf;
+	int bi_valid;
+};
+
+typedef struct deflate_state deflate_state;
+
+typedef enum {
+	need_more = 0,
+	block_done = 1,
+	finish_started = 2,
+	finish_done = 3,
+} block_state;
+
+typedef block_state (*compress_func)(deflate_state *, int);
+
+struct deflate_workspace {
+	deflate_state deflate_memory;
+	Byte *window_memory;
+	Pos *prev_memory;
+	Pos *head_memory;
+	char *overlay_memory;
+};
+
+typedef struct deflate_workspace deflate_workspace;
+
+struct config_s {
+	ush good_length;
+	ush max_lazy;
+	ush nice_length;
+	ush max_chain;
+	compress_func func;
+};
+
+typedef struct config_s config;
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+enum lzma_state {
+	STATE_LIT_LIT = 0,
+	STATE_MATCH_LIT_LIT = 1,
+	STATE_REP_LIT_LIT = 2,
+	STATE_SHORTREP_LIT_LIT = 3,
+	STATE_MATCH_LIT = 4,
+	STATE_REP_LIT = 5,
+	STATE_SHORTREP_LIT = 6,
+	STATE_LIT_MATCH = 7,
+	STATE_LIT_LONGREP = 8,
+	STATE_LIT_SHORTREP = 9,
+	STATE_NONLIT_MATCH = 10,
+	STATE_NONLIT_REP = 11,
+};
+
+struct dictionary {
+	uint8_t *buf;
+	size_t start;
+	size_t pos;
+	size_t full;
+	size_t limit;
+	size_t end;
+	uint32_t size;
+	uint32_t size_max;
+	uint32_t allocated;
+	enum xz_mode mode;
+};
+
+struct rc_dec {
+	uint32_t range;
+	uint32_t code;
+	uint32_t init_bytes_left;
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_limit;
+};
+
+struct lzma_len_dec {
+	uint16_t choice;
+	uint16_t choice2;
+	uint16_t low[128];
+	uint16_t mid[128];
+	uint16_t high[256];
+};
+
+struct lzma_dec {
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+	enum lzma_state state;
+	uint32_t len;
+	uint32_t lc;
+	uint32_t literal_pos_mask;
+	uint32_t pos_mask;
+	uint16_t is_match[192];
+	uint16_t is_rep[12];
+	uint16_t is_rep0[12];
+	uint16_t is_rep1[12];
+	uint16_t is_rep2[12];
+	uint16_t is_rep0_long[192];
+	uint16_t dist_slot[256];
+	uint16_t dist_special[114];
+	uint16_t dist_align[16];
+	struct lzma_len_dec match_len_dec;
+	struct lzma_len_dec rep_len_dec;
+	uint16_t literal[12288];
+};
+
+enum lzma2_seq {
+	SEQ_CONTROL = 0,
+	SEQ_UNCOMPRESSED_1 = 1,
+	SEQ_UNCOMPRESSED_2 = 2,
+	SEQ_COMPRESSED_0 = 3,
+	SEQ_COMPRESSED_1 = 4,
+	SEQ_PROPERTIES = 5,
+	SEQ_LZMA_PREPARE = 6,
+	SEQ_LZMA_RUN = 7,
+	SEQ_COPY = 8,
+};
+
+struct lzma2_dec {
+	enum lzma2_seq sequence;
+	enum lzma2_seq next_sequence;
+	uint32_t uncompressed;
+	uint32_t compressed;
+	bool need_dict_reset;
+	bool need_props;
+};
+
+struct xz_dec_lzma2 {
+	struct rc_dec rc;
+	struct dictionary dict;
+	struct lzma2_dec lzma2;
+	struct lzma_dec lzma;
+	struct {
+		uint32_t size;
+		uint8_t buf[63];
+	} temp;
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_spnego = 40,
+	OID_IAKerb = 41,
+	OID_PKU2U = 42,
+	OID_Scram = 43,
+	OID_certAuthInfoAccess = 44,
+	OID_sha1 = 45,
+	OID_id_ansip384r1 = 46,
+	OID_sha256 = 47,
+	OID_sha384 = 48,
+	OID_sha512 = 49,
+	OID_sha224 = 50,
+	OID_commonName = 51,
+	OID_surname = 52,
+	OID_countryName = 53,
+	OID_locality = 54,
+	OID_stateOrProvinceName = 55,
+	OID_organizationName = 56,
+	OID_organizationUnitName = 57,
+	OID_title = 58,
+	OID_description = 59,
+	OID_name = 60,
+	OID_givenName = 61,
+	OID_initials = 62,
+	OID_generationalQualifier = 63,
+	OID_subjectKeyIdentifier = 64,
+	OID_keyUsage = 65,
+	OID_subjectAltName = 66,
+	OID_issuerAltName = 67,
+	OID_basicConstraints = 68,
+	OID_crlDistributionPoints = 69,
+	OID_certPolicies = 70,
+	OID_authorityKeyIdentifier = 71,
+	OID_extKeyUsage = 72,
+	OID_NetlogonMechanism = 73,
+	OID_appleLocalKdcSupported = 74,
+	OID_gostCPSignA = 75,
+	OID_gostCPSignB = 76,
+	OID_gostCPSignC = 77,
+	OID_gost2012PKey256 = 78,
+	OID_gost2012PKey512 = 79,
+	OID_gost2012Digest256 = 80,
+	OID_gost2012Digest512 = 81,
+	OID_gost2012Signature256 = 82,
+	OID_gost2012Signature512 = 83,
+	OID_gostTC26Sign256A = 84,
+	OID_gostTC26Sign256B = 85,
+	OID_gostTC26Sign256C = 86,
+	OID_gostTC26Sign256D = 87,
+	OID_gostTC26Sign512A = 88,
+	OID_gostTC26Sign512B = 89,
+	OID_gostTC26Sign512C = 90,
+	OID_sm2 = 91,
+	OID_sm3 = 92,
+	OID_SM2_with_SM3 = 93,
+	OID_sm3WithRSAEncryption = 94,
+	OID_TPMLoadableKey = 95,
+	OID_TPMImportableKey = 96,
+	OID_TPMSealedData = 97,
+	OID__NR = 98,
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
+};
+
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+struct fb_cvt_data {
+	u32 xres;
+	u32 yres;
+	u32 refresh;
+	u32 f_refresh;
+	u32 pixclock;
+	u32 hperiod;
+	u32 hblank;
+	u32 hfreq;
+	u32 htotal;
+	u32 vtotal;
+	u32 vsync;
+	u32 hsync;
+	u32 h_front_porch;
+	u32 h_back_porch;
+	u32 v_front_porch;
+	u32 v_back_porch;
+	u32 h_margin;
+	u32 v_margin;
+	u32 interlace;
+	u32 aspect_ratio;
+	u32 active_pixels;
+	u32 flags;
+	u32 status;
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_cc[19];
+	cc_t c_line;
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct sgttyb {
+	char sg_ispeed;
+	char sg_ospeed;
+	char sg_erase;
+	char sg_kill;
+	short int sg_flags;
+};
+
+struct tchars {
+	char t_intrc;
+	char t_quitc;
+	char t_startc;
+	char t_stopc;
+	char t_eofc;
+	char t_brkc;
+};
+
+struct ltchars {
+	char t_suspc;
+	char t_dsuspc;
+	char t_rprntc;
+	char t_flushc;
+	char t_werasc;
+	char t_lnextc;
+};
+
+struct termio {
+	short unsigned int c_iflag;
+	short unsigned int c_oflag;
+	short unsigned int c_cflag;
+	short unsigned int c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[10];
+};
+
+struct kbdiacruc {
+	unsigned int diacr;
+	unsigned int base;
+	unsigned int result;
+};
+
+struct hvsi_header {
+	uint8_t type;
+	uint8_t len;
+	__be16 seqno;
+};
+
+struct hvsi_data {
+	struct hvsi_header hdr;
+	uint8_t data[12];
+};
+
+struct hvsi_control {
+	struct hvsi_header hdr;
+	__be16 verb;
+	__be32 word;
+	__be32 mask;
+} __attribute__((packed));
+
+struct hvsi_query {
+	struct hvsi_header hdr;
+	__be16 verb;
+};
+
+struct hvsi_query_response {
+	struct hvsi_header hdr;
+	__be16 verb;
+	__be16 query_seqno;
+	union {
+		uint8_t version;
+		__be32 mctrl_word;
+	} u;
+};
+
+struct hvsi_priv {
+	unsigned int inbuf_len;
+	unsigned char inbuf[255];
+	unsigned int inbuf_cur;
+	unsigned int inbuf_pktlen;
+	atomic_t seqno;
+	unsigned int opened: 1;
+	unsigned int established: 1;
+	unsigned int is_console: 1;
+	unsigned int mctrl_update: 1;
+	short unsigned int mctrl;
+	struct tty_struct *tty;
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	uint32_t termno;
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
+};
+
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
+};
+
+typedef int mhp_t;
+
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
+struct for_each_memory_block_cb_data {
+	walk_memory_blocks_func_t func;
+	void *arg;
+};
+
+struct nvdimm_map {
+	struct nvdimm_bus *nvdimm_bus;
+	struct list_head list;
+	resource_size_t offset;
+	long unsigned int flags;
+	size_t size;
+	union {
+		void *mem;
+		void *iomem;
+	};
+	struct kref kref;
+};
+
+struct trace_event_raw_dma_fence {
+	struct trace_entry ent;
+	u32 __data_loc_driver;
+	u32 __data_loc_timeline;
+	unsigned int context;
+	unsigned int seqno;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dma_fence {
+	u32 driver;
+	u32 timeline;
+};
+
+typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
+
+struct default_wait_cb {
+	struct dma_fence_cb base;
+	struct task_struct *task;
+};
+
+enum ata_xfer_mask {
+	ATA_MASK_PIO = 127,
+	ATA_MASK_MWDMA = 3968,
+	ATA_MASK_UDMA = 1044480,
+};
+
+enum hsm_task_states {
+	HSM_ST_IDLE = 0,
+	HSM_ST_FIRST = 1,
+	HSM_ST = 2,
+	HSM_ST_LAST = 3,
+	HSM_ST_ERR = 4,
+};
+
+struct pci_bits {
+	unsigned int reg;
+	unsigned int width;
+	long unsigned int mask;
+	long unsigned int val;
+};
+
+struct trace_event_raw_ata_qc_issue_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	unsigned char proto;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_qc_complete_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char status;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char error;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_tf_load {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_exec_command_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char feature;
+	unsigned char hob_nsect;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_bmdma_status {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char host_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy_qc {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_action_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	long unsigned int deadline;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_end_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	int rc;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_port_eh_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_hsm_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int protocol;
+	unsigned int hsm_state;
+	unsigned char dev_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_transfer_data_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int flags;
+	unsigned int offset;
+	unsigned int bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char hsm_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ata_qc_issue_template {};
+
+struct trace_event_data_offsets_ata_qc_complete_template {};
+
+struct trace_event_data_offsets_ata_tf_load {};
+
+struct trace_event_data_offsets_ata_exec_command_template {};
+
+struct trace_event_data_offsets_ata_bmdma_status {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
+
+struct trace_event_data_offsets_ata_eh_action_template {};
+
+struct trace_event_data_offsets_ata_link_reset_begin_template {};
+
+struct trace_event_data_offsets_ata_link_reset_end_template {};
+
+struct trace_event_data_offsets_ata_port_eh_begin_template {};
+
+struct trace_event_data_offsets_ata_sff_hsm_template {};
+
+struct trace_event_data_offsets_ata_transfer_data_template {};
+
+struct trace_event_data_offsets_ata_sff_template {};
+
+typedef void (*btf_trace_ata_qc_prep)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_tf_load)(void *, struct ata_port *, const struct ata_taskfile *);
+
+typedef void (*btf_trace_ata_exec_command)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_setup)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_start)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_stop)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_status)(void *, struct ata_port *, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_eh_about_to_do)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_done)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_slave_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_softreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_softreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_std_sched_eh)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_freeze)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_thaw)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_sff_hsm_state)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_hsm_command_complete)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_port_intr)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_send_cdb)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_sff_flush_pio_task)(void *, struct ata_port *);
+
+struct ata_force_param {
+	const char *name;
+	u8 cbl;
+	u8 spd_limit;
+	unsigned int xfer_mask;
+	unsigned int horkage_on;
+	unsigned int horkage_off;
+	u16 lflags_on;
+	u16 lflags_off;
+};
+
+struct ata_force_ent {
+	int port;
+	int device;
+	struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+	int shift;
+	int bits;
+	u8 base;
+};
+
+struct ata_blacklist_entry {
+	const char *model_num;
+	const char *model_rev;
+	long unsigned int horkage;
+};
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void *data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void *context;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	long unsigned int ifclaimed;
+	u32 disabled_bulk_eps;
+	long unsigned int interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
 	u32 size;
-	char elements[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	void *mem;
+	dma_addr_t dma_handle;
+	long unsigned int vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void *userbuffer;
+	void *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE = 1,
+};
+
+struct vivaldi_data {
+	u32 function_row_physmap[24];
+	unsigned int num_function_row_keys;
+};
+
+struct byd_data {
+	struct timer_list timer;
+	struct psmouse *psmouse;
+	s32 abs_x;
+	s32 abs_y;
+	volatile long unsigned int last_touch_time;
+	bool btn_left;
+	bool btn_right;
+	bool touch;
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct ptp_extts_event {
+	struct ptp_clock_time t;
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct timestamp_event_queue {
+	struct ptp_extts_event buf[128];
+	int head;
+	int tail;
+	spinlock_t lock;
+};
+
+struct ptp_clock {
+	struct posix_clock clock;
+	struct device dev;
+	struct ptp_clock_info *info;
+	dev_t devid;
+	int index;
+	struct pps_device *pps_source;
+	long int dialed_frequency;
+	struct timestamp_event_queue tsevq;
+	struct mutex tsevq_mux;
+	struct mutex pincfg_mux;
+	wait_queue_head_t tsev_wq;
+	int defunct;
+	struct device_attribute *pin_dev_attr;
+	struct attribute **pin_attr;
+	struct attribute_group pin_attr_group;
+	const struct attribute_group *pin_attr_groups[2];
+	struct kthread_worker *kworker;
+	struct kthread_delayed_work aux_work;
+	unsigned int max_vclocks;
+	unsigned int n_vclocks;
+	int *vclock_index;
+	struct mutex n_vclocks_mux;
+	bool is_virtual_clock;
+	bool has_cycles;
+};
+
+struct ptp_vclock {
+	struct ptp_clock *pclock;
+	struct ptp_clock_info info;
+	struct ptp_clock *clock;
+	struct hlist_node vclock_hash_node;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	spinlock_t lock;
+};
+
+struct edac_device_counter {
+	u32 ue_count;
+	u32 ce_count;
+};
+
+struct edac_device_ctl_info;
+
+struct edac_dev_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct edac_device_instance;
+
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
+struct edac_device_ctl_info {
+	struct list_head link;
+	struct module *owner;
+	int dev_idx;
+	int log_ue;
+	int log_ce;
+	int panic_on_ue;
+	unsigned int poll_msec;
+	long unsigned int delay;
+	struct edac_dev_sysfs_attribute *sysfs_attributes;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_device_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	struct completion removal_complete;
+	char name[32];
+	u32 nr_instances;
+	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
+	struct edac_device_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_block_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+	struct edac_device_block *block;
+	unsigned int value;
+};
+
+struct edac_device_block {
+	struct edac_device_instance *instance;
+	char name[32];
+	struct edac_device_counter counters;
+	int nr_attribs;
+	struct edac_dev_sysfs_block_attribute *block_attributes;
+	struct kobject kobj;
+};
+
+struct edac_device_instance {
+	struct edac_device_ctl_info *ctl;
+	char name[35];
+	struct edac_device_counter counters;
+	u32 nr_blocks;
+	struct edac_device_block *blocks;
+	struct kobject kobj;
+};
+
+struct update_util_data {
+	void (*func)(struct update_util_data *, u64, unsigned int);
+};
+
+struct cpu_dbs_info {
+	u64 prev_cpu_idle;
+	u64 prev_update_time;
+	u64 prev_cpu_nice;
+	unsigned int prev_load;
+	struct update_util_data update_util;
+	struct policy_dbs_info *policy_dbs;
+};
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct hid_control_fifo {
+	unsigned char dir;
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_output_fifo {
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hiddev_event {
+	unsigned int hid;
+	int value;
+};
+
+struct hiddev_devinfo {
+	__u32 bustype;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 ifnum;
+	__s16 vendor;
+	__s16 product;
+	__s16 version;
+	__u32 num_applications;
+};
+
+struct hiddev_collection_info {
+	__u32 index;
+	__u32 type;
+	__u32 usage;
+	__u32 level;
+};
+
+struct hiddev_report_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 num_fields;
+};
+
+struct hiddev_field_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 maxusage;
+	__u32 flags;
+	__u32 physical;
+	__u32 logical;
+	__u32 application;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__u32 unit_exponent;
+	__u32 unit;
+};
+
+struct hiddev_usage_ref {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 usage_index;
+	__u32 usage_code;
+	__s32 value;
+};
+
+struct hiddev_usage_ref_multi {
+	struct hiddev_usage_ref uref;
+	__u32 num_values;
+	__s32 values[1024];
+};
+
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct list_head list;
+	spinlock_t list_lock;
+	bool initialized;
+};
+
+struct usbhid_device {
+	struct hid_device *hid;
+	struct usb_interface *intf;
+	int ifnum;
+	unsigned int bufsize;
+	struct urb *urbin;
+	char *inbuf;
+	dma_addr_t inbuf_dma;
+	struct urb *urbctrl;
+	struct usb_ctrlrequest *cr;
+	struct hid_control_fifo ctrl[256];
+	unsigned char ctrlhead;
+	unsigned char ctrltail;
+	char *ctrlbuf;
+	dma_addr_t ctrlbuf_dma;
+	long unsigned int last_ctrl;
+	struct urb *urbout;
+	struct hid_output_fifo out[256];
+	unsigned char outhead;
+	unsigned char outtail;
+	char *outbuf;
+	dma_addr_t outbuf_dma;
+	long unsigned int last_out;
+	struct mutex mutex;
+	spinlock_t lock;
+	long unsigned int iofl;
+	struct timer_list io_retry;
+	long unsigned int stop_retry;
+	unsigned int retry_delay;
+	struct work_struct reset_work;
+	wait_queue_head_t wait;
+};
+
+struct hiddev_list {
+	struct hiddev_usage_ref buffer[2048];
+	int head;
+	int tail;
+	unsigned int flags;
+	struct fasync_struct *fasync;
+	struct hiddev *hiddev;
+	struct list_head node;
+	struct mutex thread_lock;
+};
+
+struct page_frag_cache {
+	void *va;
+	__u32 offset;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_config;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t);
+
+typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int);
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	MAX_BPF_LINK_TYPE = 10,
+};
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	struct work_struct work;
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+};
+
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
+};
+
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
+struct rings_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ringparam ringparam;
+	struct kernel_ethtool_ringparam kernel_ringparam;
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct nf_queue_entry;
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_out_options {};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+struct rtnexthop {
+	short unsigned int rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct key_vector *tnode[0];
+	};
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector *parent;
+	struct key_vector kv[1];
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct trie {
+	struct key_vector kv[1];
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	short unsigned int no;
+};
+
+enum {
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
+};
+
+struct inet_diag_hostcond {
+	__u8 family;
+	__u8 prefix_len;
+	int port;
+	__be32 addr[0];
+};
+
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
+};
+
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct bpf_sk_storage_diag;
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
+	u16 sport;
+	u16 dport;
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
+};
+
+struct ifaddrlblmsg {
+	__u8 ifal_family;
+	__u8 __ifal_reserved;
+	__u8 ifal_prefixlen;
+	__u8 ifal_flags;
+	__u32 ifal_index;
+	__u32 ifal_seq;
+};
+
+enum {
+	IFAL_ADDRESS = 1,
+	IFAL_LABEL = 2,
+	__IFAL_MAX = 3,
+};
+
+struct ip6addrlbl_entry {
+	struct in6_addr prefix;
+	int prefixlen;
+	int ifindex;
+	int addrtype;
+	u32 label;
+	struct hlist_node list;
+	struct callback_head rcu;
+};
+
+struct ip6addrlbl_init_table {
+	const struct in6_addr *prefix;
+	int prefixlen;
+	u32 label;
+};
+
+struct rt0_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr[0];
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct in6_addr addr[0];
+		__u8 data[0];
+	} segments;
+};
+
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+enum rpc_msg_type {
+	RPC_CALL = 0,
+	RPC_REPLY = 1,
+};
+
+enum rpc_reply_stat {
+	RPC_MSG_ACCEPTED = 0,
+	RPC_MSG_DENIED = 1,
+};
+
+enum rpc_reject_stat {
+	RPC_MISMATCH = 0,
+	RPC_AUTH_ERROR = 1,
+};
+
+enum {
+	SUNRPC_PIPEFS_NFS_PRIO = 0,
+	SUNRPC_PIPEFS_RPC_PRIO = 1,
+};
+
+enum {
+	RPC_PIPEFS_MOUNT = 0,
+	RPC_PIPEFS_UMOUNT = 1,
+};
+
+struct rpc_add_xprt_test {
+	void (*add_xprt_test)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	void *data;
+};
+
+struct rpc_cb_add_xprt_calldata {
+	struct rpc_xprt_switch *xps;
+	struct rpc_xprt *xprt;
+};
+
+struct connect_timeout_data {
+	long unsigned int connect_timeout;
+	long unsigned int reconnect_timeout;
+};
+
+struct rpc_pipe_dir_object_ops;
+
+struct rpc_pipe_dir_object {
+	struct list_head pdo_head;
+	const struct rpc_pipe_dir_object_ops *pdo_ops;
+	void *pdo_data;
+};
+
+struct rpc_pipe_dir_object_ops {
+	int (*create)(struct dentry *, struct rpc_pipe_dir_object *);
+	void (*destroy)(struct dentry *, struct rpc_pipe_dir_object *);
+};
+
+struct rpc_inode {
+	struct inode vfs_inode;
+	void *private;
+	struct rpc_pipe *pipe;
+	wait_queue_head_t waitq;
+};
+
+struct rpc_filelist {
+	const char *name;
+	const struct file_operations *i_fop;
+	umode_t mode;
+};
+
+enum {
+	RPCAUTH_info = 0,
+	RPCAUTH_EOF = 1,
+};
+
+enum {
+	RPCAUTH_lockd = 0,
+	RPCAUTH_mount = 1,
+	RPCAUTH_nfs = 2,
+	RPCAUTH_portmap = 3,
+	RPCAUTH_statd = 4,
+	RPCAUTH_nfsd4_cb = 5,
+	RPCAUTH_cache = 6,
+	RPCAUTH_nfsd = 7,
+	RPCAUTH_gssd = 8,
+	RPCAUTH_RootEOF = 9,
+};
+
+typedef u32 ihandle;
+
+struct boot_param_header {
+	__be32 magic;
+	__be32 totalsize;
+	__be32 off_dt_struct;
+	__be32 off_dt_strings;
+	__be32 off_mem_rsvmap;
+	__be32 version;
+	__be32 last_comp_version;
+	__be32 boot_cpuid_phys;
+	__be32 dt_strings_size;
+	__be32 dt_struct_size;
+};
+
+typedef u32 prom_arg_t;
+
+struct prom_args {
+	__be32 service;
+	__be32 nargs;
+	__be32 nret;
+	__be32 args[10];
+};
+
+struct prom_t {
+	ihandle root;
+	phandle chosen;
+	int cpu;
+	ihandle stdout;
+	ihandle mmumap;
+	ihandle memory;
+};
+
+struct mem_map_entry {
+	__be64 base;
+	__be64 size;
+};
+
+typedef __be32 cell_t;
+
+struct platform_support {
+	bool hash_mmu;
+	bool radix_mmu;
+	bool radix_gtse;
+	bool xive;
+};
+
+struct option_vector1 {
+	u8 byte1;
+	u8 arch_versions;
+	u8 arch_versions3;
+};
+
+struct option_vector2 {
+	u8 byte1;
+	__be16 reserved;
+	__be32 real_base;
+	__be32 real_size;
+	__be32 virt_base;
+	__be32 virt_size;
+	__be32 load_base;
+	__be32 min_rma;
+	__be32 min_load;
+	u8 min_rma_percent;
+	u8 max_pft_size;
+} __attribute__((packed));
+
+struct option_vector3 {
+	u8 byte1;
+	u8 byte2;
+};
+
+struct option_vector4 {
+	u8 byte1;
+	u8 min_vp_cap;
+};
+
+struct option_vector5 {
+	u8 byte1;
+	u8 byte2;
+	u8 byte3;
+	u8 cmo;
+	u8 associativity;
+	u8 bin_opts;
+	u8 micro_checkpoint;
+	u8 reserved0;
+	__be32 max_cpus;
+	__be16 papr_level;
+	__be16 reserved1;
+	u8 platform_facilities;
+	u8 reserved2;
+	__be16 reserved3;
+	u8 subprocessors;
+	u8 byte22;
+	u8 intarch;
+	u8 mmu;
+	u8 hash_ext;
+	u8 radix_ext;
+} __attribute__((packed));
+
+struct option_vector6 {
+	u8 reserved;
+	u8 secondary_pteg;
+	u8 os_name;
+};
+
+struct option_vector7 {
+	u8 os_id[256];
+};
+
+struct ibm_arch_vec {
+	struct {
+		u32 mask;
+		u32 val;
+	} pvrs[14];
+	u8 num_vectors;
+	u8 vec1_len;
+	struct option_vector1 vec1;
+	u8 vec2_len;
+	struct option_vector2 vec2;
+	u8 vec3_len;
+	struct option_vector3 vec3;
+	u8 vec4_len;
+	struct option_vector4 vec4;
+	u8 vec5_len;
+	struct option_vector5 vec5;
+	u8 vec6_len;
+	struct option_vector6 vec6;
+	u8 vec7_len;
+	struct option_vector7 vec7;
+} __attribute__((packed));
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	long unsigned int status;
+	long unsigned int saved_msr;
+};
+
+struct kprobe_ctlblk {
+	long unsigned int kprobe_status;
+	long unsigned int kprobe_saved_msr;
+	struct prev_kprobe prev_kprobe;
+};
+
+struct arch_optimized_insn {
+	kprobe_opcode_t copied_insn[1];
+	kprobe_opcode_t *insn;
+};
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+struct optimized_kprobe {
+	struct kprobe kp;
+	struct list_head list;
+	struct arch_optimized_insn optinsn;
+};
+
+union vsx_reg {
+	u8 b[16];
+	u16 h[8];
+	u32 w[4];
+	long unsigned int d[2];
+	float fp[4];
+	double dp[2];
+	__vector128 v;
+};
+
+enum opal_async_token_state {
+	ASYNC_TOKEN_UNALLOCATED = 0,
+	ASYNC_TOKEN_ALLOCATED = 1,
+	ASYNC_TOKEN_DISPATCHED = 2,
+	ASYNC_TOKEN_ABANDONED = 3,
+	ASYNC_TOKEN_COMPLETED = 4,
+};
+
+struct opal_async_token {
+	enum opal_async_token_state state;
+	struct opal_msg response;
+};
+
+struct opal_event_irqchip {
+	struct irq_chip irqchip;
+	struct irq_domain *domain;
+	long unsigned int mask;
+};
+
+struct msi_alloc_info {
+	struct msi_desc *desc;
+	irq_hw_number_t hwirq;
+	long unsigned int flags;
+	union {
+		long unsigned int ul;
+		void *ptr;
+	} scratchpad[2];
+};
+
+typedef struct msi_alloc_info msi_alloc_info_t;
+
+struct msi_domain_info;
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+};
+
+struct msi_domain_info {
+	u32 flags;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_MULTI_PCI_MSI = 4,
+	MSI_FLAG_PCI_MSIX = 8,
+	MSI_FLAG_ACTIVATE_EARLY = 16,
+	MSI_FLAG_MUST_REACTIVATE = 32,
+	MSI_FLAG_LEVEL_CAPABLE = 64,
+	MSI_FLAG_DEV_SYSFS = 128,
+	MSI_FLAG_MSIX_CONTIGUOUS = 256,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 512,
+	MSI_FLAG_FREE_MSI_DESCS = 1024,
+};
+
+struct msi_counts {
+	struct device_node *requestor;
+	int num_devices;
+	int request;
+	int quota;
+	int spare;
+	int over_quota;
+};
+
+struct vas_tx_win_open_attr {
+	__u32 version;
+	__s16 vas_id;
+	__u16 reserved1;
+	__u64 flags;
+	__u64 reserved2[6];
+};
+
+struct coproc_dev {
+	struct cdev cdev;
+	struct device *device;
+	char *name;
+	dev_t devt;
+	struct class *class;
+	enum vas_cop_type cop_type;
+	const struct vas_user_win_ops *vops;
+};
+
+struct coproc_instance {
+	struct coproc_dev *coproc;
+	struct vas_window *txwin;
+};
+
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
+};
+
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+enum {
+	OPAL_IMC_COUNTERS_NEST = 1,
+	OPAL_IMC_COUNTERS_CORE = 2,
+	OPAL_IMC_COUNTERS_TRACE = 3,
+};
+
+struct imc_mem_info {
+	u64 *vbase;
+	u32 id;
+};
+
+struct imc_events {
+	u32 value;
+	char *name;
+	char *unit;
+	char *scale;
+};
+
+struct trace_imc_data {
+	u64 tb1;
+	u64 ip;
+	u64 val;
+	u64 cpmc1;
+	u64 cpmc2;
+	u64 cpmc3;
+	u64 cpmc4;
+	u64 tb2;
+};
+
+struct imc_pmu {
+	struct pmu pmu;
+	struct imc_mem_info *mem_info;
+	struct imc_events *events;
+	const struct attribute_group *attr_groups[4];
+	u32 counter_mem_size;
+	int domain;
+	bool imc_counter_mmaped;
+};
+
+struct imc_pmu_ref {
+	struct mutex lock;
+	unsigned int id;
+	int refc;
+};
+
+union thread_union {
+	struct task_struct task;
+	long unsigned int stack[2048];
+};
+
+typedef long unsigned int old_sigset_t;
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
+};
+
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
+};
+
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	long unsigned int sa_handler;
+	long unsigned int sa_flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
+struct dev_printk_info {
+	char subsystem[16];
+	char device[48];
+};
+
+struct printk_info {
+	u64 seq;
+	u64 ts_nsec;
+	u16 text_len;
+	u8 facility;
+	u8 flags: 5;
+	u8 level: 3;
+	u32 caller_id;
+	struct dev_printk_info dev_info;
+};
+
+struct printk_record {
+	struct printk_info *info;
+	char *text_buf;
+	unsigned int text_buf_size;
+};
+
+struct prb_data_blk_lpos {
+	long unsigned int begin;
+	long unsigned int next;
+};
+
+struct prb_desc {
+	atomic_long_t state_var;
+	struct prb_data_blk_lpos text_blk_lpos;
+};
+
+struct prb_data_ring {
+	unsigned int size_bits;
+	char *data;
+	atomic_long_t head_lpos;
+	atomic_long_t tail_lpos;
+};
+
+struct prb_desc_ring {
+	unsigned int count_bits;
+	struct prb_desc *descs;
+	struct printk_info *infos;
+	atomic_long_t head_id;
+	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
+};
+
+struct printk_ringbuffer {
+	struct prb_desc_ring desc_ring;
+	struct prb_data_ring text_data_ring;
+	atomic_long_t fail;
+};
+
+struct prb_reserved_entry {
+	struct printk_ringbuffer *rb;
+	long unsigned int irqflags;
+	long unsigned int id;
+	unsigned int text_space;
+};
+
+enum desc_state {
+	desc_miss = -1,
+	desc_reserved = 0,
+	desc_committed = 1,
+	desc_finalized = 2,
+	desc_reusable = 3,
+};
+
+struct prb_data_block {
+	long unsigned int id;
+	char data[0];
+};
+
+struct node_vectors {
+	unsigned int id;
+	union {
+		unsigned int nvectors;
+		unsigned int ncpus;
+	};
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	long unsigned int addr_min;
+	long unsigned int addr_max;
+};
+
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
+};
+
+struct audit_ntp_data {};
+
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	long unsigned int caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+enum {
+	TRACE_PIDS = 1,
+	TRACE_NO_PIDS = 2,
+};
+
+struct ftrace_func_command {
+	struct list_head list;
+	char *name;
+	int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);
+};
+
+struct ftrace_probe_ops {
+	void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);
+	int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);
+	void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);
+	int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);
+};
+
+typedef int (*ftrace_mapper_func)(void *);
+
+struct trace_parser {
+	bool cont;
+	char *buffer;
+	unsigned int idx;
+	unsigned int size;
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct event_probe_data {
+	struct trace_event_file *file;
+	long unsigned int count;
+	int ref;
+	bool enable;
+};
+
+struct ftrace_func_mapper;
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
 };
 
 enum {
@@ -41595,14 +60093,18 @@
 	BPF_RINGBUF_HDR_SZ = 8,
 };
 
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
 struct bpf_ringbuf {
 	wait_queue_head_t waitq;
 	struct irq_work work;
 	u64 mask;
 	struct page **pages;
 	int nr_pages;
-	long: 32;
-	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -41610,7 +60112,6 @@
 	long: 64;
 	long: 64;
 	spinlock_t spinlock;
-	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -66175,7 +84676,6 @@
 
 struct bpf_ringbuf_map {
 	struct bpf_map map;
-	struct bpf_map_memory memory;
 	struct bpf_ringbuf *rb;
 	long: 64;
 	long: 64;
@@ -66190,6 +84690,8 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct bpf_ringbuf_hdr {
@@ -66207,1424 +84709,16 @@
 
 typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
 
-enum {
-	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
-	BPF_SK_STORAGE_GET_F_CREATE = 1,
-};
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
 
-struct bpf_local_storage_map_bucket;
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_map {
-	struct bpf_map map;
-	struct bpf_local_storage_map_bucket *buckets;
-	u32 bucket_log;
-	u16 elem_size;
-	u16 cache_idx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_data;
-
-struct bpf_local_storage {
-	struct bpf_local_storage_data *cache[16];
-	struct hlist_head list;
-	void *owner;
-	struct callback_head rcu;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_map_bucket {
-	struct hlist_head list;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_data {
-	struct bpf_local_storage_map *smap;
-	u8 data[0];
-};
-
-struct bpf_local_storage_elem {
-	struct hlist_node map_node;
-	struct hlist_node snode;
-	struct bpf_local_storage *local_storage;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct bpf_local_storage_data sdata;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_local_storage_cache {
-	spinlock_t idx_lock;
-	u64 idx_usage_counts[16];
-};
-
-struct lsm_blob_sizes {
-	int lbs_cred;
-	int lbs_file;
-	int lbs_inode;
-	int lbs_ipc;
-	int lbs_msg_msg;
-	int lbs_task;
-};
-
-struct bpf_storage_blob {
-	struct bpf_local_storage *storage;
-};
-
-typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64);
-
-typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
-
-struct bpf_tramp_progs {
-	struct bpf_prog *progs[40];
-	int nr_progs;
-};
-
-struct btf_enum {
-	__u32 name_off;
-	__s32 val;
-};
-
-struct btf_array {
-	__u32 type;
-	__u32 index_type;
-	__u32 nelems;
-};
-
-struct btf_param {
-	__u32 name_off;
-	__u32 type;
-};
-
-enum {
-	BTF_VAR_STATIC = 0,
-	BTF_VAR_GLOBAL_ALLOCATED = 1,
-	BTF_VAR_GLOBAL_EXTERN = 2,
-};
-
-struct btf_var {
-	__u32 linkage;
-};
-
-struct bpf_flow_keys {
-	__u16 nhoff;
-	__u16 thoff;
-	__u16 addr_proto;
-	__u8 is_frag;
-	__u8 is_first_frag;
-	__u8 is_encap;
-	__u8 ip_proto;
-	__be16 n_proto;
-	__be16 sport;
-	__be16 dport;
-	union {
-		struct {
-			__be32 ipv4_src;
-			__be32 ipv4_dst;
-		};
-		struct {
-			__u32 ipv6_src[4];
-			__u32 ipv6_dst[4];
-		};
-	};
-	__u32 flags;
-	__be32 flow_label;
-};
-
-struct bpf_sock {
-	__u32 bound_dev_if;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 mark;
-	__u32 priority;
-	__u32 src_ip4;
-	__u32 src_ip6[4];
-	__u32 src_port;
-	__u32 dst_port;
-	__u32 dst_ip4;
-	__u32 dst_ip6[4];
-	__u32 state;
-	__s32 rx_queue_mapping;
-};
-
-struct __sk_buff {
-	__u32 len;
-	__u32 pkt_type;
-	__u32 mark;
-	__u32 queue_mapping;
-	__u32 protocol;
-	__u32 vlan_present;
-	__u32 vlan_tci;
-	__u32 vlan_proto;
-	__u32 priority;
-	__u32 ingress_ifindex;
-	__u32 ifindex;
-	__u32 tc_index;
-	__u32 cb[5];
-	__u32 hash;
-	__u32 tc_classid;
-	__u32 data;
-	__u32 data_end;
-	__u32 napi_id;
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 data_meta;
-	union {
-		struct bpf_flow_keys *flow_keys;
-	};
-	__u64 tstamp;
-	__u32 wire_len;
-	__u32 gso_segs;
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 gso_size;
-};
-
-struct xdp_md {
-	__u32 data;
-	__u32 data_end;
-	__u32 data_meta;
-	__u32 ingress_ifindex;
-	__u32 rx_queue_index;
-	__u32 egress_ifindex;
-};
-
-struct sk_msg_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 size;
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct sk_reuseport_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 len;
-	__u32 eth_protocol;
-	__u32 ip_protocol;
-	__u32 bind_inany;
-	__u32 hash;
-};
-
-struct bpf_sock_addr {
-	__u32 user_family;
-	__u32 user_ip4;
-	__u32 user_ip6[4];
-	__u32 user_port;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 msg_src_ip4;
-	__u32 msg_src_ip6[4];
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct bpf_sock_ops {
-	__u32 op;
-	union {
-		__u32 args[4];
-		__u32 reply;
-		__u32 replylong[4];
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 is_fullsock;
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 bpf_sock_ops_cb_flags;
-	__u32 state;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u32 sk_txhash;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *skb_data;
-	};
-	union {
-		void *skb_data_end;
-	};
-	__u32 skb_len;
-	__u32 skb_tcp_flags;
-};
-
-struct bpf_cgroup_dev_ctx {
-	__u32 access_type;
-	__u32 major;
-	__u32 minor;
-};
-
-struct bpf_sysctl {
-	__u32 write;
-	__u32 file_pos;
-};
-
-struct bpf_sockopt {
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *optval;
-	};
-	union {
-		void *optval_end;
-	};
-	__s32 level;
-	__s32 optname;
-	__s32 optlen;
-	__s32 retval;
-};
-
-struct bpf_sk_lookup {
-	union {
-		struct bpf_sock *sk;
-	};
-	__u32 family;
-	__u32 protocol;
-	__u32 remote_ip4;
-	__u32 remote_ip6[4];
-	__u32 remote_port;
-	__u32 local_ip4;
-	__u32 local_ip6[4];
-	__u32 local_port;
-};
-
-struct sk_reuseport_kern {
-	struct sk_buff *skb;
-	struct sock *sk;
-	struct sock *selected_sk;
-	void *data_end;
-	u32 hash;
-	u32 reuseport_id;
-	bool bind_inany;
-};
-
-struct bpf_flow_dissector {
-	struct bpf_flow_keys *flow_keys;
-	const struct sk_buff *skb;
-	void *data;
-	void *data_end;
-};
-
-struct inet_listen_hashbucket {
-	spinlock_t lock;
-	unsigned int count;
-	union {
-		struct hlist_head head;
-		struct hlist_nulls_head nulls_head;
-	};
-};
-
-struct inet_ehash_bucket;
-
-struct inet_bind_hashbucket;
-
-struct inet_hashinfo {
-	struct inet_ehash_bucket *ehash;
-	spinlock_t *ehash_locks;
-	unsigned int ehash_mask;
-	unsigned int ehash_locks_mask;
-	struct kmem_cache *bind_bucket_cachep;
-	struct inet_bind_hashbucket *bhash;
-	unsigned int bhash_size;
-	unsigned int lhash2_mask;
-	struct inet_listen_hashbucket *lhash2;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_listen_hashbucket listening_hash[32];
-};
-
-struct ip_ra_chain {
-	struct ip_ra_chain *next;
-	struct sock *sk;
-	union {
-		void (*destructor)(struct sock *);
-		struct sock *saved_sk;
-	};
-	struct callback_head rcu;
-};
-
-struct fib_table {
-	struct hlist_node tb_hlist;
-	u32 tb_id;
-	int tb_num_default;
-	struct callback_head rcu;
-	long unsigned int *tb_data;
-	long unsigned int __data[0];
-};
-
-struct inet_peer_base {
-	struct rb_root rb_root;
-	seqlock_t lock;
-	int total;
-};
-
-struct tcp_fastopen_context {
-	siphash_key_t key[2];
-	int num;
-	struct callback_head rcu;
-};
-
-struct xdp_txq_info {
-	struct net_device *dev;
-};
-
-struct xdp_buff {
-	void *data;
-	void *data_end;
-	void *data_meta;
-	void *data_hard_start;
-	struct xdp_rxq_info *rxq;
-	struct xdp_txq_info *txq;
-	u32 frame_sz;
-};
-
-struct bpf_sock_addr_kern {
-	struct sock *sk;
-	struct sockaddr *uaddr;
-	u64 tmp_reg;
-	void *t_ctx;
-};
-
-struct bpf_sock_ops_kern {
-	struct sock *sk;
-	union {
-		u32 args[4];
-		u32 reply;
-		u32 replylong[4];
-	};
-	struct sk_buff *syn_skb;
-	struct sk_buff *skb;
-	void *skb_data_end;
-	u8 op;
-	u8 is_fullsock;
-	u8 remaining_opt_len;
-	u64 temp;
-};
-
-struct bpf_sysctl_kern {
-	struct ctl_table_header *head;
-	struct ctl_table *table;
-	void *cur_val;
-	size_t cur_len;
-	void *new_val;
-	size_t new_len;
-	int new_updated;
-	int write;
-	loff_t *ppos;
-	u64 tmp_reg;
-};
-
-struct bpf_sockopt_kern {
-	struct sock *sk;
-	u8 *optval;
-	u8 *optval_end;
-	s32 level;
-	s32 optname;
-	s32 optlen;
-	s32 retval;
-};
-
-struct bpf_sk_lookup_kern {
-	u16 family;
-	u16 protocol;
-	__be16 sport;
-	u16 dport;
-	struct {
-		__be32 saddr;
-		__be32 daddr;
-	} v4;
-	struct {
-		const struct in6_addr *saddr;
-		const struct in6_addr *daddr;
-	} v6;
-	struct sock *selected_sk;
-	bool no_reuseport;
-};
-
-struct sock_reuseport {
-	struct callback_head rcu;
-	u16 max_socks;
-	u16 num_socks;
-	unsigned int synq_overflow_ts;
-	unsigned int reuseport_id;
-	unsigned int bind_inany: 1;
-	unsigned int has_conns: 1;
-	struct bpf_prog *prog;
-	struct sock *socks[0];
-};
-
-struct inet_ehash_bucket {
-	struct hlist_nulls_head chain;
-};
-
-struct inet_bind_hashbucket {
-	spinlock_t lock;
-	struct hlist_head chain;
-};
-
-struct ack_sample {
-	u32 pkts_acked;
-	s32 rtt_us;
-	u32 in_flight;
-};
-
-struct rate_sample {
-	u64 prior_mstamp;
-	u32 prior_delivered;
-	s32 delivered;
-	long int interval_us;
-	u32 snd_interval_us;
-	u32 rcv_interval_us;
-	long int rtt_us;
-	int losses;
-	u32 acked_sacked;
-	u32 prior_in_flight;
-	bool is_app_limited;
-	bool is_retrans;
-	bool is_ack_delayed;
-};
-
-struct sk_msg_sg {
-	u32 start;
-	u32 curr;
-	u32 end;
-	u32 size;
-	u32 copybreak;
-	long unsigned int copy;
-	struct scatterlist data[18];
-};
-
-struct sk_msg {
-	struct sk_msg_sg sg;
-	void *data;
-	void *data_end;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 flags;
-	struct sk_buff *skb;
-	struct sock *sk_redir;
-	struct sock *sk;
-	struct list_head list;
-};
-
-enum verifier_phase {
-	CHECK_META = 0,
-	CHECK_TYPE = 1,
-};
-
-struct resolve_vertex {
-	const struct btf_type *t;
-	u32 type_id;
-	u16 next_member;
-};
-
-enum visit_state {
-	NOT_VISITED = 0,
-	VISITED = 1,
-	RESOLVED = 2,
-};
-
-enum resolve_mode {
-	RESOLVE_TBD = 0,
-	RESOLVE_PTR = 1,
-	RESOLVE_STRUCT_OR_ARRAY = 2,
-};
-
-struct btf_sec_info {
-	u32 off;
-	u32 len;
-};
-
-struct btf_verifier_env {
-	struct btf *btf;
-	u8 *visit_states;
-	struct resolve_vertex stack[32];
-	struct bpf_verifier_log log;
-	u32 log_type_id;
-	u32 top_stack;
-	enum verifier_phase phase;
-	enum resolve_mode resolve_mode;
-};
-
-struct btf_show {
-	u64 flags;
-	void *target;
-	void (*showfn)(struct btf_show *, const char *, va_list);
-	const struct btf *btf;
-	struct {
-		u8 depth;
-		u8 depth_to_show;
-		u8 depth_check;
-		u8 array_member: 1;
-		u8 array_terminated: 1;
-		u16 array_encoding;
-		u32 type_id;
-		int status;
-		const struct btf_type *type;
-		const struct btf_member *member;
-		char name[80];
-	} state;
-	struct {
-		u32 size;
-		void *head;
-		void *data;
-		u8 safe[32];
-	} obj;
-};
-
-struct btf_kind_operations {
-	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
-	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
-	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
-	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
-};
-
-struct bpf_ctx_convert {
-	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
-	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
-	struct xdp_md BPF_PROG_TYPE_XDP_prog;
-	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
-	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
-	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
-	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
-	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
-	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
-	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
-	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
-	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
-	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
-	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
-	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
-	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
-	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
-	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
-	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
-	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
-	void *BPF_PROG_TYPE_TRACING_prog;
-	void *BPF_PROG_TYPE_TRACING_kern;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
-	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
-	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
-	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
-	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
-	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
-	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
-	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
-	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
-	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
-	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
-	void *BPF_PROG_TYPE_EXT_prog;
-	void *BPF_PROG_TYPE_EXT_kern;
-	void *BPF_PROG_TYPE_LSM_prog;
-	void *BPF_PROG_TYPE_LSM_kern;
-};
-
-enum {
-	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
-	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
-	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
-	__ctx_convertBPF_PROG_TYPE_XDP = 3,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
-	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
-	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
-	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
-	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
-	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
-	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
-	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
-	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
-	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
-	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
-	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
-	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
-	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
-	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
-	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
-	__ctx_convertBPF_PROG_TYPE_EXT = 27,
-	__ctx_convertBPF_PROG_TYPE_LSM = 28,
-	__ctx_convert_unused = 29,
-};
-
-enum bpf_struct_walk_result {
-	WALK_SCALAR = 0,
-	WALK_PTR = 1,
-	WALK_STRUCT = 2,
-};
-
-struct btf_show_snprintf {
-	struct btf_show show;
-	int len_left;
-	int len;
-};
-
-struct bpf_dispatcher_prog {
-	struct bpf_prog *prog;
-	refcount_t users;
-};
-
-struct bpf_dispatcher {
-	struct mutex mutex;
-	void *func;
-	struct bpf_dispatcher_prog progs[48];
-	int num_progs;
-	void *image;
-	u32 image_off;
-	struct bpf_ksym ksym;
-};
-
-struct bpf_devmap_val {
-	__u32 ifindex;
-	union {
-		int fd;
-		__u32 id;
-	} bpf_prog;
-};
-
-enum net_device_flags {
-	IFF_UP = 1,
-	IFF_BROADCAST = 2,
-	IFF_DEBUG = 4,
-	IFF_LOOPBACK = 8,
-	IFF_POINTOPOINT = 16,
-	IFF_NOTRAILERS = 32,
-	IFF_RUNNING = 64,
-	IFF_NOARP = 128,
-	IFF_PROMISC = 256,
-	IFF_ALLMULTI = 512,
-	IFF_MASTER = 1024,
-	IFF_SLAVE = 2048,
-	IFF_MULTICAST = 4096,
-	IFF_PORTSEL = 8192,
-	IFF_AUTOMEDIA = 16384,
-	IFF_DYNAMIC = 32768,
-	IFF_LOWER_UP = 65536,
-	IFF_DORMANT = 131072,
-	IFF_ECHO = 262144,
-};
-
-struct xdp_dev_bulk_queue {
-	struct xdp_frame *q[16];
-	struct list_head flush_node;
-	struct net_device *dev;
-	struct net_device *dev_rx;
-	unsigned int count;
-};
-
-enum netdev_cmd {
-	NETDEV_UP = 1,
-	NETDEV_DOWN = 2,
-	NETDEV_REBOOT = 3,
-	NETDEV_CHANGE = 4,
-	NETDEV_REGISTER = 5,
-	NETDEV_UNREGISTER = 6,
-	NETDEV_CHANGEMTU = 7,
-	NETDEV_CHANGEADDR = 8,
-	NETDEV_PRE_CHANGEADDR = 9,
-	NETDEV_GOING_DOWN = 10,
-	NETDEV_CHANGENAME = 11,
-	NETDEV_FEAT_CHANGE = 12,
-	NETDEV_BONDING_FAILOVER = 13,
-	NETDEV_PRE_UP = 14,
-	NETDEV_PRE_TYPE_CHANGE = 15,
-	NETDEV_POST_TYPE_CHANGE = 16,
-	NETDEV_POST_INIT = 17,
-	NETDEV_RELEASE = 18,
-	NETDEV_NOTIFY_PEERS = 19,
-	NETDEV_JOIN = 20,
-	NETDEV_CHANGEUPPER = 21,
-	NETDEV_RESEND_IGMP = 22,
-	NETDEV_PRECHANGEMTU = 23,
-	NETDEV_CHANGEINFODATA = 24,
-	NETDEV_BONDING_INFO = 25,
-	NETDEV_PRECHANGEUPPER = 26,
-	NETDEV_CHANGELOWERSTATE = 27,
-	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
-	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
-	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
-	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
-	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
-	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
-	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
-};
-
-struct netdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct bpf_dtab;
-
-struct bpf_dtab_netdev {
-	struct net_device *dev;
-	struct hlist_node index_hlist;
-	struct bpf_dtab *dtab;
-	struct bpf_prog *xdp_prog;
-	struct callback_head rcu;
-	unsigned int idx;
-	struct bpf_devmap_val val;
-};
-
-struct bpf_dtab {
-	struct bpf_map map;
-	struct bpf_dtab_netdev **netdev_map;
-	struct list_head list;
-	struct hlist_head *dev_index_head;
-	spinlock_t index_lock;
-	unsigned int items;
-	u32 n_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_cpumap_val {
-	__u32 qsize;
-	union {
-		int fd;
-		__u32 id;
-	} bpf_prog;
-};
-
-typedef struct bio_vec skb_frag_t;
-
-struct skb_shared_hwtstamps {
-	ktime_t hwtstamp;
-};
-
-struct skb_shared_info {
-	__u8 __unused;
-	__u8 meta_len;
-	__u8 nr_frags;
-	__u8 tx_flags;
-	short unsigned int gso_size;
-	short unsigned int gso_segs;
-	struct sk_buff *frag_list;
-	struct skb_shared_hwtstamps hwtstamps;
-	unsigned int gso_type;
-	u32 tskey;
-	atomic_t dataref;
-	void *destructor_arg;
-	skb_frag_t frags[16];
-};
-
-struct bpf_nh_params {
-	u32 nh_family;
-	union {
-		u32 ipv4_nh;
-		struct in6_addr ipv6_nh;
-	};
-};
-
-struct bpf_redirect_info {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map *map;
-	u32 kern_flags;
-	struct bpf_nh_params nh;
-};
-
-struct ptr_ring {
-	int producer;
-	spinlock_t producer_lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int consumer_head;
-	int consumer_tail;
-	spinlock_t consumer_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int size;
-	int batch;
-	void **queue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_cpu_map_entry;
-
-struct xdp_bulk_queue {
-	void *q[8];
-	struct list_head flush_node;
-	struct bpf_cpu_map_entry *obj;
-	unsigned int count;
-};
-
-struct bpf_cpu_map;
-
-struct bpf_cpu_map_entry {
-	u32 cpu;
-	int map_id;
-	struct xdp_bulk_queue *bulkq;
-	struct bpf_cpu_map *cmap;
-	struct ptr_ring *queue;
-	struct task_struct *kthread;
-	struct bpf_cpumap_val value;
-	struct bpf_prog *prog;
-	atomic_t refcnt;
-	struct callback_head rcu;
-	struct work_struct kthread_stop_wq;
-};
-
-struct bpf_cpu_map {
-	struct bpf_map map;
-	struct bpf_cpu_map_entry **cpu_map;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rhlist_head {
-	struct rhash_head rhead;
-	struct rhlist_head *next;
-};
-
-struct bpf_prog_offload_ops {
-	int (*insn_hook)(struct bpf_verifier_env *, int, int);
-	int (*finalize)(struct bpf_verifier_env *);
-	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
-	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
-	int (*prepare)(struct bpf_prog *);
-	int (*translate)(struct bpf_prog *);
-	void (*destroy)(struct bpf_prog *);
-};
-
-struct bpf_offload_dev {
-	const struct bpf_prog_offload_ops *ops;
-	struct list_head netdevs;
-	void *priv;
-};
-
-struct bpf_offload_netdev {
-	struct rhash_head l;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	struct list_head progs;
-	struct list_head maps;
-	struct list_head offdev_netdevs;
-};
-
-struct ns_get_path_bpf_prog_args {
-	struct bpf_prog *prog;
-	struct bpf_prog_info *info;
-};
-
-struct ns_get_path_bpf_map_args {
-	struct bpf_offloaded_map *offmap;
-	struct bpf_map_info *info;
-};
-
-struct bpf_netns_link {
-	struct bpf_link link;
-	enum bpf_attach_type type;
-	enum netns_bpf_attach_type netns_type;
-	struct net *net;
-	struct list_head node;
-};
-
-enum bpf_stack_build_id_status {
-	BPF_STACK_BUILD_ID_EMPTY = 0,
-	BPF_STACK_BUILD_ID_VALID = 1,
-	BPF_STACK_BUILD_ID_IP = 2,
-};
-
-struct bpf_stack_build_id {
-	__s32 status;
-	unsigned char build_id[20];
-	union {
-		__u64 offset;
-		__u64 ip;
-	};
-};
-
-enum {
-	BPF_F_SKIP_FIELD_MASK = 255,
-	BPF_F_USER_STACK = 256,
-	BPF_F_FAST_STACK_CMP = 512,
-	BPF_F_REUSE_STACKID = 1024,
-	BPF_F_USER_BUILD_ID = 2048,
-};
-
-struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-};
-
-typedef struct elf32_phdr Elf32_Phdr;
-
-typedef struct elf32_note Elf32_Nhdr;
-
-struct stack_map_bucket {
-	struct pcpu_freelist_node fnode;
-	u32 hash;
-	u32 nr;
-	u64 data[0];
-};
-
-struct bpf_stack_map {
-	struct bpf_map map;
-	void *elems;
-	struct pcpu_freelist freelist;
-	u32 n_buckets;
-	struct stack_map_bucket *buckets[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct stack_map_irq_work {
-	struct irq_work irq_work;
-	struct mm_struct *mm;
-};
-
-typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
-
-enum {
-	BPF_F_SYSCTL_BASE_NAME = 1,
-};
-
-struct bpf_prog_list {
-	struct list_head node;
-	struct bpf_prog *prog;
-	struct bpf_cgroup_link *link;
-	struct bpf_cgroup_storage *storage[2];
-};
-
-struct qdisc_skb_cb {
-	struct {
-		unsigned int pkt_len;
-		u16 slave_dev_queue_mapping;
-		u16 tc_classid;
-	};
-	unsigned char data[20];
-	u16 mru;
-};
-
-struct bpf_skb_data_end {
-	struct qdisc_skb_cb qdisc_cb;
-	void *data_meta;
-	void *data_end;
-};
-
-enum {
-	TCPF_ESTABLISHED = 2,
-	TCPF_SYN_SENT = 4,
-	TCPF_SYN_RECV = 8,
-	TCPF_FIN_WAIT1 = 16,
-	TCPF_FIN_WAIT2 = 32,
-	TCPF_TIME_WAIT = 64,
-	TCPF_CLOSE = 128,
-	TCPF_CLOSE_WAIT = 256,
-	TCPF_LAST_ACK = 512,
-	TCPF_LISTEN = 1024,
-	TCPF_CLOSING = 2048,
-	TCPF_NEW_SYN_RECV = 4096,
-};
-
-typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
-
-typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
-
-enum sock_type {
-	SOCK_STREAM = 1,
-	SOCK_DGRAM = 2,
-	SOCK_RAW = 3,
-	SOCK_RDM = 4,
-	SOCK_SEQPACKET = 5,
-	SOCK_DCCP = 6,
-	SOCK_PACKET = 10,
-};
-
-enum {
-	IPPROTO_IP = 0,
-	IPPROTO_ICMP = 1,
-	IPPROTO_IGMP = 2,
-	IPPROTO_IPIP = 4,
-	IPPROTO_TCP = 6,
-	IPPROTO_EGP = 8,
-	IPPROTO_PUP = 12,
-	IPPROTO_UDP = 17,
-	IPPROTO_IDP = 22,
-	IPPROTO_TP = 29,
-	IPPROTO_DCCP = 33,
-	IPPROTO_IPV6 = 41,
-	IPPROTO_RSVP = 46,
-	IPPROTO_GRE = 47,
-	IPPROTO_ESP = 50,
-	IPPROTO_AH = 51,
-	IPPROTO_MTP = 92,
-	IPPROTO_BEETPH = 94,
-	IPPROTO_ENCAP = 98,
-	IPPROTO_PIM = 103,
-	IPPROTO_COMP = 108,
-	IPPROTO_SCTP = 132,
-	IPPROTO_UDPLITE = 136,
-	IPPROTO_MPLS = 137,
-	IPPROTO_ETHERNET = 143,
-	IPPROTO_RAW = 255,
-	IPPROTO_MPTCP = 262,
-	IPPROTO_MAX = 263,
-};
-
-enum sock_flags {
-	SOCK_DEAD = 0,
-	SOCK_DONE = 1,
-	SOCK_URGINLINE = 2,
-	SOCK_KEEPOPEN = 3,
-	SOCK_LINGER = 4,
-	SOCK_DESTROY = 5,
-	SOCK_BROADCAST = 6,
-	SOCK_TIMESTAMP = 7,
-	SOCK_ZAPPED = 8,
-	SOCK_USE_WRITE_QUEUE = 9,
-	SOCK_DBG = 10,
-	SOCK_RCVTSTAMP = 11,
-	SOCK_RCVTSTAMPNS = 12,
-	SOCK_LOCALROUTE = 13,
-	SOCK_MEMALLOC = 14,
-	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
-	SOCK_FASYNC = 16,
-	SOCK_RXQ_OVFL = 17,
-	SOCK_ZEROCOPY = 18,
-	SOCK_WIFI_STATUS = 19,
-	SOCK_NOFCS = 20,
-	SOCK_FILTER_LOCKED = 21,
-	SOCK_SELECT_ERR_QUEUE = 22,
-	SOCK_RCU_FREE = 23,
-	SOCK_TXTIME = 24,
-	SOCK_XDP = 25,
-	SOCK_TSTAMP_NEW = 26,
-};
-
-struct reuseport_array {
-	struct bpf_map map;
-	struct sock *ptrs[0];
-};
-
-enum bpf_struct_ops_state {
-	BPF_STRUCT_OPS_STATE_INIT = 0,
-	BPF_STRUCT_OPS_STATE_INUSE = 1,
-	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
-};
-
-struct bpf_struct_ops_value {
-	refcount_t refcnt;
-	enum bpf_struct_ops_state state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	char data[0];
-};
-
-struct bpf_struct_ops_map {
-	struct bpf_map map;
-	const struct bpf_struct_ops *st_ops;
-	struct mutex lock;
-	struct bpf_prog **progs;
-	void *image;
-	struct bpf_struct_ops_value *uvalue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct bpf_struct_ops_value kvalue;
-};
-
-struct bpf_struct_ops_tcp_congestion_ops {
-	refcount_t refcnt;
-	enum bpf_struct_ops_state state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct tcp_congestion_ops data;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sembuf {
-	short unsigned int sem_num;
-	short int sem_op;
-	short int sem_flg;
-};
-
-enum key_need_perm {
-	KEY_NEED_UNSPECIFIED = 0,
-	KEY_NEED_VIEW = 1,
-	KEY_NEED_READ = 2,
-	KEY_NEED_WRITE = 3,
-	KEY_NEED_SEARCH = 4,
-	KEY_NEED_LINK = 5,
-	KEY_NEED_SETATTR = 6,
-	KEY_NEED_UNLINK = 7,
-	KEY_SYSADMIN_OVERRIDE = 8,
-	KEY_AUTHTOKEN_OVERRIDE = 9,
-	KEY_DEFER_PERM_CHECK = 10,
-};
-
-struct __key_reference_with_attributes;
-
-typedef struct __key_reference_with_attributes *key_ref_t;
-
-struct xfrm_sec_ctx {
-	__u8 ctx_doi;
-	__u8 ctx_alg;
-	__u16 ctx_len;
-	__u32 ctx_sid;
-	char ctx_str[0];
-};
-
-struct xfrm_user_sec_ctx {
-	__u16 len;
-	__u16 exttype;
-	__u8 ctx_alg;
-	__u8 ctx_doi;
-	__u16 ctx_len;
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
 };
 
 enum perf_event_read_format {
@@ -67632,53 +84726,14 @@
 	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
 	PERF_FORMAT_ID = 4,
 	PERF_FORMAT_GROUP = 8,
-	PERF_FORMAT_MAX = 16,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
 };
 
 enum perf_event_ioc_flags {
 	PERF_IOC_FLAG_GROUP = 1,
 };
 
-struct perf_event_mmap_page {
-	__u32 version;
-	__u32 compat_version;
-	__u32 lock;
-	__u32 index;
-	__s64 offset;
-	__u64 time_enabled;
-	__u64 time_running;
-	union {
-		__u64 capabilities;
-		struct {
-			__u64 cap_bit0: 1;
-			__u64 cap_bit0_is_deprecated: 1;
-			__u64 cap_user_rdpmc: 1;
-			__u64 cap_user_time: 1;
-			__u64 cap_user_time_zero: 1;
-			__u64 cap_user_time_short: 1;
-			__u64 cap_____res: 58;
-		};
-	};
-	__u16 pmc_width;
-	__u16 time_shift;
-	__u32 time_mult;
-	__u64 time_offset;
-	__u64 time_zero;
-	__u32 size;
-	__u32 __reserved_1;
-	__u64 time_cycles;
-	__u64 time_mask;
-	__u8 __reserved[928];
-	__u64 data_head;
-	__u64 data_tail;
-	__u64 data_offset;
-	__u64 data_size;
-	__u64 aux_head;
-	__u64 aux_tail;
-	__u64 aux_offset;
-	__u64 aux_size;
-};
-
 struct perf_ns_link_info {
 	__u64 dev;
 	__u64 ino;
@@ -67695,11 +84750,18 @@
 	NR_NAMESPACES = 7,
 };
 
-struct perf_guest_info_callbacks {
-	int (*is_in_guest)();
-	int (*is_user_mode)();
-	long unsigned int (*get_guest_ip)();
-	void (*handle_intel_pt_intr)();
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
 };
 
 enum perf_addr_filter_action_t {
@@ -67726,56 +84788,6 @@
 	struct list_head list;
 };
 
-struct perf_buffer {
-	refcount_t refcount;
-	struct callback_head callback_head;
-	int nr_pages;
-	int overwrite;
-	int paused;
-	atomic_t poll;
-	local_t head;
-	unsigned int nest;
-	local_t events;
-	local_t wakeup;
-	local_t lost;
-	long int watermark;
-	long int aux_watermark;
-	spinlock_t event_lock;
-	struct list_head event_list;
-	atomic_t mmap_count;
-	long unsigned int mmap_locked;
-	struct user_struct *mmap_user;
-	long int aux_head;
-	unsigned int aux_nest;
-	long int aux_wakeup;
-	long unsigned int aux_pgoff;
-	int aux_nr_pages;
-	int aux_overwrite;
-	atomic_t aux_mmap_count;
-	long unsigned int aux_mmap_locked;
-	void (*free_aux)(void *);
-	refcount_t aux_refcount;
-	int aux_in_sampling;
-	void **aux_pages;
-	void *aux_priv;
-	struct perf_event_mmap_page *user_page;
-	void *data_pages[0];
-};
-
-struct match_token {
-	int token;
-	const char *pattern;
-};
-
-enum {
-	MAX_OPT_ARGS = 3,
-};
-
-typedef struct {
-	char *from;
-	char *to;
-} substring_t;
-
 struct min_heap {
 	void *data;
 	int nr;
@@ -67813,6 +84825,11 @@
 	EVENT_ALL = 3,
 };
 
+struct __group_key {
+	int cpu;
+	struct cgroup *cgroup;
+};
+
 struct stop_event_data {
 	struct perf_event *event;
 	unsigned int restart;
@@ -67892,6 +84909,8 @@
 	u64 ino_generation;
 	u32 prot;
 	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
 	struct {
 		struct perf_event_header header;
 		u32 pid;
@@ -67961,7 +84980,7 @@
 };
 
 enum {
-	IF_ACT_NONE = 4294967295,
+	IF_ACT_NONE = -1,
 	IF_ACT_FILTER = 0,
 	IF_ACT_START = 1,
 	IF_ACT_STOP = 2,
@@ -67979,1547 +84998,27 @@
 
 struct perf_aux_event {
 	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
 	u32 pid;
 	u32 tid;
 };
 
-struct perf_aux_event___2 {
+struct perf_aux_event___3 {
 	struct perf_event_header header;
 	u64 offset;
 	u64 size;
 	u64 flags;
 };
 
-struct callchain_cpus_entries {
-	struct callback_head callback_head;
-	struct perf_callchain_entry *cpu_entries[0];
-};
-
-struct bp_cpuinfo {
-	unsigned int cpu_pinned;
-	unsigned int *tsk_pinned;
-	unsigned int flexible;
-};
-
-struct bp_busy_slots {
-	unsigned int pinned;
-	unsigned int flexible;
-};
-
-struct uprobe {
-	struct rb_node rb_node;
-	refcount_t ref;
-	struct rw_semaphore register_rwsem;
-	struct rw_semaphore consumer_rwsem;
-	struct list_head pending_list;
-	struct uprobe_consumer *consumers;
-	struct inode *inode;
-	loff_t offset;
-	loff_t ref_ctr_offset;
-	long unsigned int flags;
-	struct arch_uprobe arch;
-};
-
-struct vm_special_mapping {
-	const char *name;
-	struct page **pages;
-	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
-	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
-};
-
-struct xol_area {
-	wait_queue_head_t wq;
-	atomic_t slot_count;
-	long unsigned int *bitmap;
-	struct vm_special_mapping xol_mapping;
-	struct page *pages[2];
-	long unsigned int vaddr;
-};
-
-typedef long unsigned int vm_flags_t;
-
-struct compact_control;
-
-struct capture_control {
-	struct compact_control *cc;
-	struct page *page;
-};
-
-struct page_vma_mapped_walk {
-	struct page *page;
-	struct vm_area_struct *vma;
-	long unsigned int address;
-	pmd_t *pmd;
-	pte_t *pte;
-	spinlock_t *ptl;
-	unsigned int flags;
-};
-
-struct compact_control {
-	struct list_head freepages;
-	struct list_head migratepages;
-	unsigned int nr_freepages;
-	unsigned int nr_migratepages;
-	long unsigned int free_pfn;
-	long unsigned int migrate_pfn;
-	long unsigned int fast_start_pfn;
-	struct zone *zone;
-	long unsigned int total_migrate_scanned;
-	long unsigned int total_free_scanned;
-	short unsigned int fast_search_fail;
-	short int search_order;
-	const gfp_t gfp_mask;
-	int order;
-	int migratetype;
-	const unsigned int alloc_flags;
-	const int highest_zoneidx;
-	enum migrate_mode mode;
-	bool ignore_skip_hint;
-	bool no_set_skip_hint;
-	bool ignore_block_suitable;
-	bool direct_compaction;
-	bool proactive_compaction;
-	bool whole_zone;
-	bool contended;
-	bool rescan;
-	bool alloc_contig;
-};
-
-struct delayed_uprobe {
-	struct list_head list;
-	struct uprobe *uprobe;
-	struct mm_struct *mm;
-};
-
-struct map_info {
-	struct map_info *next;
-	struct mm_struct *mm;
-	long unsigned int vaddr;
-};
-
-struct parallel_data;
-
-struct padata_priv {
-	struct list_head list;
-	struct parallel_data *pd;
-	int cb_cpu;
-	unsigned int seq_nr;
-	int info;
-	void (*parallel)(struct padata_priv *);
-	void (*serial)(struct padata_priv *);
-};
-
-struct padata_cpumask {
-	cpumask_var_t pcpu;
-	cpumask_var_t cbcpu;
-};
-
-struct padata_shell;
-
-struct padata_list;
-
-struct padata_serial_queue;
-
-struct parallel_data {
-	struct padata_shell *ps;
-	struct padata_list *reorder_list;
-	struct padata_serial_queue *squeue;
-	atomic_t refcnt;
-	unsigned int seq_nr;
-	unsigned int processed;
-	int cpu;
-	struct padata_cpumask cpumask;
-	struct work_struct reorder_work;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct padata_list {
-	struct list_head list;
-	spinlock_t lock;
-};
-
-struct padata_serial_queue {
-	struct padata_list serial;
-	struct work_struct work;
-	struct parallel_data *pd;
-};
-
-struct padata_instance;
-
-struct padata_shell {
-	struct padata_instance *pinst;
-	struct parallel_data *pd;
-	struct parallel_data *opd;
-	struct list_head list;
-};
-
-struct padata_instance {
-	struct hlist_node cpu_online_node;
-	struct hlist_node cpu_dead_node;
-	struct workqueue_struct *parallel_wq;
-	struct workqueue_struct *serial_wq;
-	struct list_head pslist;
-	struct padata_cpumask cpumask;
-	struct kobject kobj;
-	struct mutex lock;
-	u8 flags;
-};
-
-struct padata_mt_job {
-	void (*thread_fn)(long unsigned int, long unsigned int, void *);
-	void *fn_arg;
-	long unsigned int start;
-	long unsigned int size;
-	long unsigned int align;
-	long unsigned int min_chunk;
-	int max_threads;
-};
-
-struct padata_work {
-	struct work_struct pw_work;
-	struct list_head pw_list;
-	void *pw_data;
-};
-
-struct padata_mt_job_state {
-	spinlock_t lock;
-	struct completion completion;
-	struct padata_mt_job *job;
-	int nworks;
-	int nworks_fini;
-	long unsigned int chunk_size;
-};
-
-struct padata_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
-	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
-};
-
-struct static_key_mod {
-	struct static_key_mod *next;
-	struct jump_entry *entries;
-	struct module *mod;
-};
-
-struct static_key_deferred {
-	struct static_key key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-enum rseq_cpu_id_state {
-	RSEQ_CPU_ID_UNINITIALIZED = 4294967295,
-	RSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294,
-};
-
-enum rseq_flags {
-	RSEQ_FLAG_UNREGISTER = 1,
-};
-
-enum rseq_cs_flags {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
-};
-
-struct rseq_cs {
-	__u32 version;
-	__u32 flags;
-	__u64 start_ip;
-	__u64 post_commit_offset;
-	__u64 abort_ip;
-};
-
-struct trace_event_raw_rseq_update {
-	struct trace_entry ent;
-	s32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_rseq_ip_fixup {
-	struct trace_entry ent;
-	long unsigned int regs_ip;
-	long unsigned int start_ip;
-	long unsigned int post_commit_offset;
-	long unsigned int abort_ip;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rseq_update {};
-
-struct trace_event_data_offsets_rseq_ip_fixup {};
-
-typedef void (*btf_trace_rseq_update)(void *, struct task_struct *);
-
-typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-struct watch;
-
-struct watch_list {
-	struct callback_head rcu;
-	struct hlist_head watchers;
-	void (*release_watch)(struct watch *);
-	spinlock_t lock;
-};
-
-enum watch_notification_type {
-	WATCH_TYPE_META = 0,
-	WATCH_TYPE_KEY_NOTIFY = 1,
-	WATCH_TYPE__NR = 2,
-};
-
-enum watch_meta_notification_subtype {
-	WATCH_META_REMOVAL_NOTIFICATION = 0,
-	WATCH_META_LOSS_NOTIFICATION = 1,
-};
-
-struct watch_notification {
-	__u32 type: 24;
-	__u32 subtype: 8;
-	__u32 info;
-};
-
-struct watch_notification_type_filter {
-	__u32 type;
-	__u32 info_filter;
-	__u32 info_mask;
-	__u32 subtype_filter[8];
-};
-
-struct watch_notification_filter {
-	__u32 nr_filters;
-	__u32 __reserved;
-	struct watch_notification_type_filter filters[0];
-};
-
-struct watch_notification_removal {
-	struct watch_notification watch;
-	__u64 id;
-};
-
-struct watch_type_filter {
-	enum watch_notification_type type;
-	__u32 subtype_filter[1];
-	__u32 info_filter;
-	__u32 info_mask;
-};
-
-struct watch_filter {
-	union {
-		struct callback_head rcu;
-		long unsigned int type_filter[2];
-	};
-	u32 nr_filters;
-	struct watch_type_filter filters[0];
-};
-
-struct watch_queue {
-	struct callback_head rcu;
-	struct watch_filter *filter;
-	struct pipe_inode_info *pipe;
-	struct hlist_head watches;
-	struct page **notes;
-	long unsigned int *notes_bitmap;
-	struct kref usage;
-	spinlock_t lock;
-	unsigned int nr_notes;
-	unsigned int nr_pages;
-	bool defunct;
-};
-
-struct watch {
-	union {
-		struct callback_head rcu;
-		u32 info_id;
-	};
-	struct watch_queue *queue;
-	struct hlist_node queue_node;
-	struct watch_list *watch_list;
-	struct hlist_node list_node;
-	const struct cred *cred;
-	void *private;
-	u64 id;
-	struct kref usage;
-};
-
-struct pkcs7_message;
-
-struct xa_node {
-	unsigned char shift;
-	unsigned char offset;
-	unsigned char count;
-	unsigned char nr_values;
-	struct xa_node *parent;
-	struct xarray *array;
-	union {
-		struct list_head private_list;
-		struct callback_head callback_head;
-	};
-	void *slots[64];
-	union {
-		long unsigned int tags[3];
-		long unsigned int marks[3];
-	};
-};
-
-typedef void (*xa_update_node_t)(struct xa_node *);
-
-struct xa_state {
-	struct xarray *xa;
-	long unsigned int xa_index;
-	unsigned char xa_shift;
-	unsigned char xa_sibs;
-	unsigned char xa_offset;
-	unsigned char xa_pad;
-	struct xa_node *xa_node;
-	struct xa_node *xa_alloc;
-	xa_update_node_t xa_update;
-};
-
-typedef int __kernel_rwf_t;
-
-enum positive_aop_returns {
-	AOP_WRITEPAGE_ACTIVATE = 524288,
-	AOP_TRUNCATED_PAGE = 524289,
-};
-
-struct vm_event_state {
-	long unsigned int event[89];
-};
-
-enum mapping_flags {
-	AS_EIO = 0,
-	AS_ENOSPC = 1,
-	AS_MM_ALL_LOCKS = 2,
-	AS_UNEVICTABLE = 3,
-	AS_EXITING = 4,
-	AS_NO_WRITEBACK_TAGS = 5,
-	AS_THP_SUPPORT = 6,
-};
-
-struct wait_page_key {
-	struct page *page;
-	int bit_nr;
-	int page_match;
-};
-
-enum iter_type {
-	ITER_IOVEC = 4,
-	ITER_KVEC = 8,
-	ITER_BVEC = 16,
-	ITER_PIPE = 32,
-	ITER_DISCARD = 64,
-};
-
-struct pagevec {
-	unsigned char nr;
-	bool percpu_pvec_drained;
-	struct page *pages[15];
-};
-
-struct fid {
-	union {
-		struct {
-			u32 ino;
-			u32 gen;
-			u32 parent_ino;
-			u32 parent_gen;
-		} i32;
-		struct {
-			u32 block;
-			u16 partref;
-			u16 parent_partref;
-			u32 generation;
-			u32 parent_block;
-			u32 parent_generation;
-		} udf;
-		__u32 raw[0];
-	};
-};
-
-struct trace_event_raw_mm_filemap_op_page_cache {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	long unsigned int i_ino;
-	long unsigned int index;
-	dev_t s_dev;
-	char __data[0];
-};
-
-struct trace_event_raw_filemap_set_wb_err {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t errseq;
-	char __data[0];
-};
-
-struct trace_event_raw_file_check_and_advance_wb_err {
-	struct trace_entry ent;
-	struct file *file;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t old;
-	errseq_t new;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_filemap_op_page_cache {};
-
-struct trace_event_data_offsets_filemap_set_wb_err {};
-
-struct trace_event_data_offsets_file_check_and_advance_wb_err {};
-
-typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *);
-
-typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
-
-typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
-
-enum behavior {
-	EXCLUSIVE = 0,
-	SHARED = 1,
-	DROP = 2,
-};
-
-struct reciprocal_value {
-	u32 m;
-	u8 sh1;
-	u8 sh2;
-};
-
-struct array_cache;
-
-struct kmem_cache_node;
-
-struct kmem_cache {
-	struct array_cache *cpu_cache;
-	unsigned int batchcount;
-	unsigned int limit;
-	unsigned int shared;
-	unsigned int size;
-	struct reciprocal_value reciprocal_buffer_size;
-	slab_flags_t flags;
-	unsigned int num;
-	unsigned int gfporder;
-	gfp_t allocflags;
-	size_t colour;
-	unsigned int colour_off;
-	struct kmem_cache *freelist_cache;
-	unsigned int freelist_size;
-	void (*ctor)(void *);
-	const char *name;
-	struct list_head list;
-	int refcount;
-	int object_size;
-	int align;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct kmem_cache_node *node[256];
-};
-
-struct alien_cache;
-
-struct kmem_cache_node {
-	spinlock_t list_lock;
-	struct list_head slabs_partial;
-	struct list_head slabs_full;
-	struct list_head slabs_free;
-	long unsigned int total_slabs;
-	long unsigned int free_slabs;
-	long unsigned int free_objects;
-	unsigned int free_limit;
-	unsigned int colour_next;
-	struct array_cache *shared;
-	struct alien_cache **alien;
-	long unsigned int next_reap;
-	int free_touched;
-};
-
-enum oom_constraint {
-	CONSTRAINT_NONE = 0,
-	CONSTRAINT_CPUSET = 1,
-	CONSTRAINT_MEMORY_POLICY = 2,
-	CONSTRAINT_MEMCG = 3,
-};
-
-struct oom_control {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct mem_cgroup *memcg;
-	const gfp_t gfp_mask;
-	const int order;
-	long unsigned int totalpages;
-	struct task_struct *chosen;
-	long int chosen_points;
-	enum oom_constraint constraint;
-};
-
-enum compact_priority {
-	COMPACT_PRIO_SYNC_FULL = 0,
-	MIN_COMPACT_PRIORITY = 0,
-	COMPACT_PRIO_SYNC_LIGHT = 1,
-	MIN_COMPACT_COSTLY_PRIORITY = 1,
-	DEF_COMPACT_PRIORITY = 1,
-	COMPACT_PRIO_ASYNC = 2,
-	INIT_COMPACT_PRIORITY = 2,
-};
-
-enum compact_result {
-	COMPACT_NOT_SUITABLE_ZONE = 0,
-	COMPACT_SKIPPED = 1,
-	COMPACT_DEFERRED = 2,
-	COMPACT_NO_SUITABLE_PAGE = 3,
-	COMPACT_CONTINUE = 4,
-	COMPACT_COMPLETE = 5,
-	COMPACT_PARTIAL_SKIPPED = 6,
-	COMPACT_CONTENDED = 7,
-	COMPACT_SUCCESS = 8,
-};
-
-struct trace_event_raw_oom_score_adj_update {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_reclaim_retry_zone {
-	struct trace_entry ent;
-	int node;
-	int zone_idx;
-	int order;
-	long unsigned int reclaimable;
-	long unsigned int available;
-	long unsigned int min_wmark;
-	int no_progress_loops;
-	bool wmark_check;
-	char __data[0];
-};
-
-struct trace_event_raw_mark_victim {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_wake_reaper {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_start_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_finish_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_skip_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_compact_retry {
-	struct trace_entry ent;
-	int order;
-	int priority;
-	int result;
-	int retries;
-	int max_retries;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_oom_score_adj_update {};
-
-struct trace_event_data_offsets_reclaim_retry_zone {};
-
-struct trace_event_data_offsets_mark_victim {};
-
-struct trace_event_data_offsets_wake_reaper {};
-
-struct trace_event_data_offsets_start_task_reaping {};
-
-struct trace_event_data_offsets_finish_task_reaping {};
-
-struct trace_event_data_offsets_skip_task_reaping {};
-
-struct trace_event_data_offsets_compact_retry {};
-
-typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
-
-typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
-
-typedef void (*btf_trace_mark_victim)(void *, int);
-
-typedef void (*btf_trace_wake_reaper)(void *, int);
-
-typedef void (*btf_trace_start_task_reaping)(void *, int);
-
-typedef void (*btf_trace_finish_task_reaping)(void *, int);
-
-typedef void (*btf_trace_skip_task_reaping)(void *, int);
-
-typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
-
-enum wb_congested_state {
-	WB_async_congested = 0,
-	WB_sync_congested = 1,
-};
-
-enum {
-	XA_CHECK_SCHED = 4096,
-};
-
-enum wb_state {
-	WB_registered = 0,
-	WB_writeback_running = 1,
-	WB_has_dirty_io = 2,
-	WB_start_all = 3,
-};
-
-enum {
-	BLK_RW_ASYNC = 0,
-	BLK_RW_SYNC = 1,
-};
-
-struct wb_lock_cookie {
-	bool locked;
-	long unsigned int flags;
-};
-
-typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
-
-struct dirty_throttle_control {
-	struct wb_domain *dom;
-	struct dirty_throttle_control *gdtc;
-	struct bdi_writeback *wb;
-	struct fprop_local_percpu *wb_completions;
-	long unsigned int avail;
-	long unsigned int dirty;
-	long unsigned int thresh;
-	long unsigned int bg_thresh;
-	long unsigned int wb_dirty;
-	long unsigned int wb_thresh;
-	long unsigned int wb_bg_thresh;
-	long unsigned int pos_ratio;
-};
-
-typedef void compound_page_dtor(struct page *);
-
-typedef struct {} local_lock_t;
-
-struct trace_event_raw_mm_lru_insertion {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	int lru;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_lru_activate {
-	struct trace_entry ent;
-	struct page *page;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_lru_insertion {};
-
-struct trace_event_data_offsets_mm_lru_activate {};
-
-typedef void (*btf_trace_mm_lru_insertion)(void *, struct page *, int);
-
-typedef void (*btf_trace_mm_lru_activate)(void *, struct page *);
-
-struct lru_rotate {
-	local_lock_t lock;
-	struct pagevec pvec;
-};
-
-struct lru_pvecs {
-	local_lock_t lock;
-	struct pagevec lru_add;
-	struct pagevec lru_deactivate_file;
-	struct pagevec lru_deactivate;
-	struct pagevec lru_lazyfree;
-	struct pagevec activate_page;
-};
-
-enum lruvec_flags {
-	LRUVEC_CONGESTED = 0,
-};
-
-enum pgdat_flags {
-	PGDAT_DIRTY = 0,
-	PGDAT_WRITEBACK = 1,
-	PGDAT_RECLAIM_LOCKED = 2,
-};
-
-struct reclaim_stat {
-	unsigned int nr_dirty;
-	unsigned int nr_unqueued_dirty;
-	unsigned int nr_congested;
-	unsigned int nr_writeback;
-	unsigned int nr_immediate;
-	unsigned int nr_pageout;
-	unsigned int nr_activate[2];
-	unsigned int nr_ref_keep;
-	unsigned int nr_unmap_fail;
-	unsigned int nr_lazyfree_fail;
-};
-
-enum ttu_flags {
-	TTU_MIGRATION = 1,
-	TTU_MUNLOCK = 2,
-	TTU_SPLIT_HUGE_PMD = 4,
-	TTU_IGNORE_MLOCK = 8,
-	TTU_IGNORE_HWPOISON = 32,
-	TTU_BATCH_FLUSH = 64,
-	TTU_RMAP_LOCKED = 128,
-	TTU_SPLIT_FREEZE = 256,
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_wake {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_wakeup_kswapd {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
-	struct trace_entry ent;
-	long unsigned int nr_reclaimed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_start {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	void *shrink;
-	int nid;
-	long int nr_objects_to_shrink;
-	gfp_t gfp_flags;
-	long unsigned int cache_items;
-	long long unsigned int delta;
-	long unsigned int total_scan;
-	int priority;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_end {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	int nid;
-	void *shrink;
-	long int unused_scan;
-	long int new_scan;
-	int retval;
-	long int total_scan;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_isolate {
-	struct trace_entry ent;
-	int highest_zoneidx;
-	int order;
-	long unsigned int nr_requested;
-	long unsigned int nr_scanned;
-	long unsigned int nr_skipped;
-	long unsigned int nr_taken;
-	isolate_mode_t isolate_mode;
-	int lru;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_writepage {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int nr_congested;
-	long unsigned int nr_immediate;
-	unsigned int nr_activate0;
-	unsigned int nr_activate1;
-	long unsigned int nr_ref_keep;
-	long unsigned int nr_unmap_fail;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_active {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_taken;
-	long unsigned int nr_active;
-	long unsigned int nr_deactivated;
-	long unsigned int nr_referenced;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_inactive_list_is_low {
-	struct trace_entry ent;
-	int nid;
-	int reclaim_idx;
-	long unsigned int total_inactive;
-	long unsigned int inactive;
-	long unsigned int total_active;
-	long unsigned int active;
-	long unsigned int ratio;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_node_reclaim_begin {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
-
-struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
-
-struct trace_event_data_offsets_mm_shrink_slab_start {};
-
-struct trace_event_data_offsets_mm_shrink_slab_end {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
-
-struct trace_event_data_offsets_mm_vmscan_writepage {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
-
-struct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};
-
-struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
-
-typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
-
-typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
-
-typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
-
-struct scan_control {
-	long unsigned int nr_to_reclaim;
-	nodemask_t *nodemask;
-	struct mem_cgroup *target_mem_cgroup;
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	unsigned int may_deactivate: 2;
-	unsigned int force_deactivate: 1;
-	unsigned int skipped_deactivate: 1;
-	unsigned int may_writepage: 1;
-	unsigned int may_unmap: 1;
-	unsigned int may_swap: 1;
-	unsigned int memcg_low_reclaim: 1;
-	unsigned int memcg_low_skipped: 1;
-	unsigned int hibernation_mode: 1;
-	unsigned int compaction_ready: 1;
-	unsigned int cache_trim_mode: 1;
-	unsigned int file_is_tiny: 1;
-	s8 order;
-	s8 priority;
-	s8 reclaim_idx;
-	gfp_t gfp_mask;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	struct {
-		unsigned int dirty;
-		unsigned int unqueued_dirty;
-		unsigned int congested;
-		unsigned int writeback;
-		unsigned int immediate;
-		unsigned int file_taken;
-		unsigned int taken;
-	} nr;
-	struct reclaim_state reclaim_state;
-};
-
-typedef enum {
-	PAGE_KEEP = 0,
-	PAGE_ACTIVATE = 1,
-	PAGE_SUCCESS = 2,
-	PAGE_CLEAN = 3,
-} pageout_t;
-
-enum page_references {
-	PAGEREF_RECLAIM = 0,
-	PAGEREF_RECLAIM_CLEAN = 1,
-	PAGEREF_KEEP = 2,
-	PAGEREF_ACTIVATE = 3,
-};
-
-enum scan_balance {
-	SCAN_EQUAL = 0,
-	SCAN_FRACT = 1,
-	SCAN_ANON = 2,
-	SCAN_FILE = 3,
-};
-
-enum transparent_hugepage_flag {
-	TRANSPARENT_HUGEPAGE_FLAG = 0,
-	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 1,
-	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 2,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 3,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 4,
-	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 5,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 6,
-	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 7,
-};
-
-struct xattr {
-	const char *name;
-	void *value;
-	size_t value_len;
-};
-
-struct constant_table {
-	const char *name;
-	int value;
-};
-
-enum {
-	MPOL_DEFAULT = 0,
-	MPOL_PREFERRED = 1,
-	MPOL_BIND = 2,
-	MPOL_INTERLEAVE = 3,
-	MPOL_LOCAL = 4,
-	MPOL_MAX = 5,
-};
-
-struct shared_policy {
-	struct rb_root root;
-	rwlock_t lock;
-};
-
-struct simple_xattrs {
-	struct list_head head;
-	spinlock_t lock;
-};
-
-struct simple_xattr {
-	struct list_head list;
-	char *name;
-	size_t size;
-	char value[0];
-};
-
-enum fid_type {
-	FILEID_ROOT = 0,
-	FILEID_INO32_GEN = 1,
-	FILEID_INO32_GEN_PARENT = 2,
-	FILEID_BTRFS_WITHOUT_PARENT = 77,
-	FILEID_BTRFS_WITH_PARENT = 78,
-	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
-	FILEID_UDF_WITHOUT_PARENT = 81,
-	FILEID_UDF_WITH_PARENT = 82,
-	FILEID_NILFS_WITHOUT_PARENT = 97,
-	FILEID_NILFS_WITH_PARENT = 98,
-	FILEID_FAT_WITHOUT_PARENT = 113,
-	FILEID_FAT_WITH_PARENT = 114,
-	FILEID_LUSTRE = 151,
-	FILEID_KERNFS = 254,
-	FILEID_INVALID = 255,
-};
-
-struct shmem_inode_info {
-	spinlock_t lock;
-	unsigned int seals;
-	long unsigned int flags;
-	long unsigned int alloced;
-	long unsigned int swapped;
-	struct list_head shrinklist;
-	struct list_head swaplist;
-	struct shared_policy policy;
-	struct simple_xattrs xattrs;
-	atomic_t stop_eviction;
-	struct inode vfs_inode;
-};
-
-struct shmem_sb_info {
-	long unsigned int max_blocks;
-	struct percpu_counter used_blocks;
-	long unsigned int max_inodes;
-	long unsigned int free_inodes;
-	spinlock_t stat_lock;
-	umode_t mode;
-	unsigned char huge;
-	kuid_t uid;
-	kgid_t gid;
-	bool full_inums;
-	ino_t next_ino;
-	ino_t *ino_batch;
-	struct mempolicy *mpol;
-	spinlock_t shrinklist_lock;
-	struct list_head shrinklist;
-	long unsigned int shrinklist_len;
-};
-
-enum sgp_type {
-	SGP_READ = 0,
-	SGP_CACHE = 1,
-	SGP_NOHUGE = 2,
-	SGP_HUGE = 3,
-	SGP_WRITE = 4,
-	SGP_FALLOC = 5,
-};
-
-struct shmem_falloc {
-	wait_queue_head_t *waitq;
-	long unsigned int start;
-	long unsigned int next;
-	long unsigned int nr_falloced;
-	long unsigned int nr_unswapped;
-};
-
-struct shmem_options {
-	long long unsigned int blocks;
-	long long unsigned int inodes;
-	struct mempolicy *mpol;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-	bool full_inums;
-	int huge;
-	int seen;
-};
-
-enum shmem_param {
-	Opt_gid = 0,
-	Opt_huge = 1,
-	Opt_mode = 2,
-	Opt_mpol = 3,
-	Opt_nr_blocks = 4,
-	Opt_nr_inodes = 5,
-	Opt_size = 6,
-	Opt_uid = 7,
-	Opt_inode32 = 8,
-	Opt_inode64 = 9,
-};
-
-enum writeback_stat_item {
-	NR_DIRTY_THRESHOLD = 0,
-	NR_DIRTY_BG_THRESHOLD = 1,
-	NR_VM_WRITEBACK_STAT_ITEMS = 2,
-};
-
-struct contig_page_info {
-	long unsigned int free_pages;
-	long unsigned int free_blocks_total;
-	long unsigned int free_blocks_suitable;
-};
-
-struct radix_tree_iter {
-	long unsigned int index;
-	long unsigned int next_index;
-	long unsigned int tags;
-	struct xa_node *node;
-};
-
-enum {
-	RADIX_TREE_ITER_TAG_MASK = 15,
-	RADIX_TREE_ITER_TAGGED = 16,
-	RADIX_TREE_ITER_CONTIG = 32,
-};
-
-enum mminit_level {
-	MMINIT_WARNING = 0,
-	MMINIT_VERIFY = 1,
-	MMINIT_TRACE = 2,
-};
-
-struct pcpu_group_info {
-	int nr_units;
-	long unsigned int base_offset;
-	unsigned int *cpu_map;
-};
-
-struct pcpu_alloc_info {
-	size_t static_size;
-	size_t reserved_size;
-	size_t dyn_size;
-	size_t unit_size;
-	size_t atom_size;
-	size_t alloc_size;
-	size_t __ai_size;
-	int nr_groups;
-	struct pcpu_group_info groups[0];
-};
-
-typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);
-
-typedef void (*pcpu_fc_free_fn_t)(void *, size_t);
-
-typedef void (*pcpu_fc_populate_pte_fn_t)(long unsigned int);
-
-typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
-
-struct trace_event_raw_percpu_alloc_percpu {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_free_percpu {
-	struct trace_entry ent;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_alloc_percpu_fail {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_create_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_destroy_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_percpu_alloc_percpu {};
-
-struct trace_event_data_offsets_percpu_free_percpu {};
-
-struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
-
-struct trace_event_data_offsets_percpu_create_chunk {};
-
-struct trace_event_data_offsets_percpu_destroy_chunk {};
-
-typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);
-
-typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
-
-typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
-
-typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
-
-typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
-
-enum pcpu_chunk_type {
-	PCPU_CHUNK_ROOT = 0,
-	PCPU_CHUNK_MEMCG = 1,
-	PCPU_NR_CHUNK_TYPES = 2,
-	PCPU_FAIL_ALLOC = 2,
-};
-
-struct pcpu_block_md {
-	int scan_hint;
-	int scan_hint_start;
-	int contig_hint;
-	int contig_hint_start;
-	int left_free;
-	int right_free;
-	int first_free;
-	int nr_bits;
-};
-
-struct pcpu_chunk {
-	struct list_head list;
-	int free_bytes;
-	struct pcpu_block_md chunk_md;
-	void *base_addr;
-	long unsigned int *alloc_map;
-	long unsigned int *bound_map;
-	struct pcpu_block_md *md_blocks;
-	void *data;
-	bool immutable;
-	int start_offset;
-	int end_offset;
-	struct obj_cgroup **obj_cgroups;
-	int nr_pages;
-	int nr_populated;
-	int nr_empty_pop_pages;
-	long unsigned int populated[0];
-};
-
-struct trace_event_raw_kmem_alloc {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_alloc_node {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	int node;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_free {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free_batched {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	gfp_t gfp_flags;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_pcpu_drain {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc_extfrag {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int alloc_order;
-	int fallback_order;
-	int alloc_migratetype;
-	int fallback_migratetype;
-	int change_ownership;
-	char __data[0];
-};
-
-struct trace_event_raw_rss_stat {
-	struct trace_entry ent;
-	unsigned int mm_id;
-	unsigned int curr;
-	int member;
-	long int size;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kmem_alloc {};
-
-struct trace_event_data_offsets_kmem_alloc_node {};
-
-struct trace_event_data_offsets_kmem_free {};
-
-struct trace_event_data_offsets_mm_page_free {};
-
-struct trace_event_data_offsets_mm_page_free_batched {};
-
-struct trace_event_data_offsets_mm_page_alloc {};
-
-struct trace_event_data_offsets_mm_page {};
-
-struct trace_event_data_offsets_mm_page_pcpu_drain {};
-
-struct trace_event_data_offsets_mm_page_alloc_extfrag {};
-
-struct trace_event_data_offsets_rss_stat {};
-
-typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
-
-typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
-
-typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
-
-typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
-
-typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);
-
-enum slab_state {
-	DOWN = 0,
-	PARTIAL = 1,
-	PARTIAL_NODE = 2,
-	UP = 3,
-	FULL = 4,
-};
-
-struct kmalloc_info_struct {
-	const char *name[2];
-	unsigned int size;
-};
-
-struct slabinfo {
-	long unsigned int active_objs;
-	long unsigned int num_objs;
-	long unsigned int active_slabs;
-	long unsigned int num_slabs;
-	long unsigned int shared_avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int shared;
-	unsigned int objects_per_slab;
-	unsigned int cache_order;
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
 };
 
 enum pageblock_bits {
@@ -69529,1099 +85028,6 @@
 	NR_PAGEBLOCK_BITS = 4,
 };
 
-struct alloc_context {
-	struct zonelist *zonelist;
-	nodemask_t *nodemask;
-	struct zoneref *preferred_zoneref;
-	int migratetype;
-	enum zone_type highest_zoneidx;
-	bool spread_dirty_pages;
-};
-
-struct trace_event_raw_mm_compaction_isolate_template {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int nr_scanned;
-	long unsigned int nr_taken;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_migratepages {
-	struct trace_entry ent;
-	long unsigned int nr_migrated;
-	long unsigned int nr_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_begin {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_end {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_try_to_compact_pages {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_mask;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_suitable_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_defer_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	unsigned int considered;
-	unsigned int defer_shift;
-	int order_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_kcompactd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_kcompactd_wake_template {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	enum zone_type highest_zoneidx;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_compaction_isolate_template {};
-
-struct trace_event_data_offsets_mm_compaction_migratepages {};
-
-struct trace_event_data_offsets_mm_compaction_begin {};
-
-struct trace_event_data_offsets_mm_compaction_end {};
-
-struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
-
-struct trace_event_data_offsets_mm_compaction_suitable_template {};
-
-struct trace_event_data_offsets_mm_compaction_defer_template {};
-
-struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
-
-struct trace_event_data_offsets_kcompactd_wake_template {};
-
-typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);
-
-typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);
-
-typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);
-
-typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
-
-typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
-
-typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
-
-typedef enum {
-	ISOLATE_ABORT = 0,
-	ISOLATE_NONE = 1,
-	ISOLATE_SUCCESS = 2,
-} isolate_migrate_t;
-
-struct anon_vma_chain {
-	struct vm_area_struct *vma;
-	struct anon_vma *anon_vma;
-	struct list_head same_vma;
-	struct rb_node rb;
-	long unsigned int rb_subtree_last;
-};
-
-struct rb_augment_callbacks {
-	void (*propagate)(struct rb_node *, struct rb_node *);
-	void (*copy)(struct rb_node *, struct rb_node *);
-	void (*rotate)(struct rb_node *, struct rb_node *);
-};
-
-enum lru_status {
-	LRU_REMOVED = 0,
-	LRU_REMOVED_RETRY = 1,
-	LRU_ROTATE = 2,
-	LRU_SKIP = 3,
-	LRU_RETRY = 4,
-};
-
-typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
-
-struct migration_target_control {
-	int nid;
-	nodemask_t *nmask;
-	gfp_t gfp_mask;
-};
-
-struct follow_page_context {
-	struct dev_pagemap *pgmap;
-	unsigned int page_mask;
-};
-
-typedef struct {
-	u64 val;
-} pfn_t;
-
-typedef unsigned int pgtbl_mod_mask;
-
-struct zap_details {
-	struct address_space *check_mapping;
-	long unsigned int first_index;
-	long unsigned int last_index;
-};
-
-typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
-
-enum {
-	SWP_USED = 1,
-	SWP_WRITEOK = 2,
-	SWP_DISCARDABLE = 4,
-	SWP_DISCARDING = 8,
-	SWP_SOLIDSTATE = 16,
-	SWP_CONTINUED = 32,
-	SWP_BLKDEV = 64,
-	SWP_ACTIVATED = 128,
-	SWP_FS_OPS = 256,
-	SWP_AREA_DISCARD = 512,
-	SWP_PAGE_DISCARD = 1024,
-	SWP_STABLE_WRITES = 2048,
-	SWP_SYNCHRONOUS_IO = 4096,
-	SWP_VALID = 8192,
-	SWP_SCANNING = 16384,
-};
-
-struct copy_subpage_arg {
-	struct page *dst;
-	struct page *src;
-	struct vm_area_struct *vma;
-};
-
-struct mm_walk;
-
-struct mm_walk_ops {
-	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
-	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
-	void (*post_vma)(struct mm_walk *);
-};
-
-enum page_walk_action {
-	ACTION_SUBTREE = 0,
-	ACTION_CONTINUE = 1,
-	ACTION_AGAIN = 2,
-};
-
-struct mm_walk {
-	const struct mm_walk_ops *ops;
-	struct mm_struct *mm;
-	pgd_t *pgd;
-	struct vm_area_struct *vma;
-	enum page_walk_action action;
-	bool no_vma;
-	void *private;
-};
-
-enum {
-	HUGETLB_SHMFS_INODE = 1,
-	HUGETLB_ANONHUGE_INODE = 2,
-};
-
-struct trace_event_raw_vm_unmapped_area {
-	struct trace_entry ent;
-	long unsigned int addr;
-	long unsigned int total_vm;
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_vm_unmapped_area {};
-
-typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
-
-struct rmap_walk_control {
-	void *arg;
-	bool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *);
-	int (*done)(struct page *);
-	struct anon_vma * (*anon_lock)(struct page *);
-	bool (*invalid_vma)(struct vm_area_struct *, void *);
-};
-
-struct page_referenced_arg {
-	int mapcount;
-	int referenced;
-	long unsigned int vm_flags;
-	struct mem_cgroup *memcg;
-};
-
-struct vmap_area {
-	long unsigned int va_start;
-	long unsigned int va_end;
-	struct rb_node rb_node;
-	struct list_head list;
-	union {
-		long unsigned int subtree_max_size;
-		struct vm_struct *vm;
-		struct llist_node purge_list;
-	};
-};
-
-struct vfree_deferred {
-	struct llist_head list;
-	struct work_struct wq;
-};
-
-enum fit_type {
-	NOTHING_FIT = 0,
-	FL_FIT_TYPE = 1,
-	LE_FIT_TYPE = 2,
-	RE_FIT_TYPE = 3,
-	NE_FIT_TYPE = 4,
-};
-
-struct vmap_block_queue {
-	spinlock_t lock;
-	struct list_head free;
-};
-
-struct vmap_block {
-	spinlock_t lock;
-	struct vmap_area *va;
-	long unsigned int free;
-	long unsigned int dirty;
-	long unsigned int dirty_min;
-	long unsigned int dirty_max;
-	struct list_head free_list;
-	struct callback_head callback_head;
-	struct list_head purge;
-};
-
-struct page_frag_cache {
-	void *va;
-	__u32 offset;
-	unsigned int pagecnt_bias;
-	bool pfmemalloc;
-};
-
-enum zone_flags {
-	ZONE_BOOSTED_WATERMARK = 0,
-};
-
-struct mminit_pfnnid_cache {
-	long unsigned int last_start;
-	long unsigned int last_end;
-	int last_nid;
-};
-
-typedef int fpi_t;
-
-struct pcpu_drain {
-	struct zone *zone;
-	struct work_struct work;
-};
-
-enum mf_flags {
-	MF_COUNT_INCREASED = 1,
-	MF_ACTION_REQUIRED = 2,
-	MF_MUST_KILL = 4,
-	MF_SOFT_OFFLINE = 8,
-};
-
-struct madvise_walk_private {
-	struct mmu_gather *tlb;
-	bool pageout;
-};
-
-struct vma_swap_readahead {
-	short unsigned int win;
-	short unsigned int offset;
-	short unsigned int nr_pte;
-	pte_t *ptes;
-};
-
-union swap_header {
-	struct {
-		char reserved[65526];
-		char magic[10];
-	} magic;
-	struct {
-		char bootbits[1024];
-		__u32 version;
-		__u32 last_page;
-		__u32 nr_badpages;
-		unsigned char sws_uuid[16];
-		unsigned char sws_volume[16];
-		__u32 padding[117];
-		__u32 badpages[1];
-	} info;
-};
-
-struct swap_extent {
-	struct rb_node rb_node;
-	long unsigned int start_page;
-	long unsigned int nr_pages;
-	sector_t start_block;
-};
-
-struct swap_slots_cache {
-	bool lock_initialized;
-	struct mutex alloc_lock;
-	swp_entry_t *slots;
-	int nr;
-	int cur;
-	spinlock_t free_lock;
-	swp_entry_t *slots_ret;
-	int n_ret;
-};
-
-struct frontswap_ops {
-	void (*init)(unsigned int);
-	int (*store)(unsigned int, long unsigned int, struct page *);
-	int (*load)(unsigned int, long unsigned int, struct page *);
-	void (*invalidate_page)(unsigned int, long unsigned int);
-	void (*invalidate_area)(unsigned int);
-	struct frontswap_ops *next;
-};
-
-struct crypto_comp {
-	struct crypto_tfm base;
-};
-
-struct zpool;
-
-struct zpool_ops {
-	int (*evict)(struct zpool *, long unsigned int);
-};
-
-enum zpool_mapmode {
-	ZPOOL_MM_RW = 0,
-	ZPOOL_MM_RO = 1,
-	ZPOOL_MM_WO = 2,
-	ZPOOL_MM_DEFAULT = 0,
-};
-
-struct zswap_pool {
-	struct zpool *zpool;
-	struct crypto_comp **tfm;
-	struct kref kref;
-	struct list_head list;
-	struct work_struct release_work;
-	struct work_struct shrink_work;
-	struct hlist_node node;
-	char tfm_name[128];
-};
-
-struct zswap_entry {
-	struct rb_node rbnode;
-	long unsigned int offset;
-	int refcount;
-	unsigned int length;
-	struct zswap_pool *pool;
-	union {
-		long unsigned int handle;
-		long unsigned int value;
-	};
-};
-
-struct zswap_header {
-	swp_entry_t swpentry;
-};
-
-struct zswap_tree {
-	struct rb_root rbroot;
-	spinlock_t lock;
-};
-
-enum zswap_get_swap_ret {
-	ZSWAP_SWAPCACHE_NEW = 0,
-	ZSWAP_SWAPCACHE_EXIST = 1,
-	ZSWAP_SWAPCACHE_FAIL = 2,
-};
-
-struct dma_pool {
-	struct list_head page_list;
-	spinlock_t lock;
-	size_t size;
-	struct device *dev;
-	size_t allocation;
-	size_t boundary;
-	char name[32];
-	struct list_head pools;
-};
-
-struct dma_page {
-	struct list_head page_list;
-	void *vaddr;
-	dma_addr_t dma;
-	unsigned int in_use;
-	unsigned int offset;
-};
-
-struct resv_map {
-	struct kref refs;
-	spinlock_t lock;
-	struct list_head regions;
-	long int adds_in_progress;
-	struct list_head region_cache;
-	long int region_cache_count;
-	struct page_counter *reservation_counter;
-	long unsigned int pages_per_hpage;
-	struct cgroup_subsys_state *css;
-};
-
-struct file_region {
-	struct list_head link;
-	long int from;
-	long int to;
-	struct page_counter *reservation_counter;
-	struct cgroup_subsys_state *css;
-};
-
-enum hugetlb_memory_event {
-	HUGETLB_MAX = 0,
-	HUGETLB_NR_MEMORY_EVENTS = 1,
-};
-
-struct hugetlb_cgroup {
-	struct cgroup_subsys_state css;
-	struct page_counter hugepage[15];
-	struct page_counter rsvd_hugepage[15];
-	atomic_long_t events[15];
-	atomic_long_t events_local[15];
-	struct cgroup_file events_file[15];
-	struct cgroup_file events_local_file[15];
-};
-
-enum vma_resv_mode {
-	VMA_NEEDS_RESV = 0,
-	VMA_COMMIT_RESV = 1,
-	VMA_END_RESV = 2,
-	VMA_ADD_RESV = 3,
-};
-
-struct node_hstate {
-	struct kobject *hugepages_kobj;
-	struct kobject *hstate_kobjs[15];
-};
-
-struct nodemask_scratch {
-	nodemask_t mask1;
-	nodemask_t mask2;
-};
-
-struct sp_node {
-	struct rb_node nd;
-	long unsigned int start;
-	long unsigned int end;
-	struct mempolicy *policy;
-};
-
-struct mempolicy_operations {
-	int (*create)(struct mempolicy *, const nodemask_t *);
-	void (*rebind)(struct mempolicy *, const nodemask_t *);
-};
-
-struct queue_pages {
-	struct list_head *pagelist;
-	long unsigned int flags;
-	nodemask_t *nmask;
-	long unsigned int start;
-	long unsigned int end;
-	struct vm_area_struct *first;
-};
-
-struct mmu_notifier_subscriptions {
-	struct hlist_head list;
-	bool has_itree;
-	spinlock_t lock;
-	long unsigned int invalidate_seq;
-	long unsigned int active_invalidate_ranges;
-	struct rb_root_cached itree;
-	wait_queue_head_t wq;
-	struct hlist_head deferred_list;
-};
-
-struct interval_tree_node {
-	struct rb_node rb;
-	long unsigned int start;
-	long unsigned int last;
-	long unsigned int __subtree_last;
-};
-
-struct mmu_interval_notifier;
-
-struct mmu_interval_notifier_ops {
-	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
-};
-
-struct mmu_interval_notifier {
-	struct interval_tree_node interval_tree;
-	const struct mmu_interval_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct hlist_node deferred_item;
-	long unsigned int invalidate_seq;
-};
-
-struct rmap_item;
-
-struct mm_slot {
-	struct hlist_node link;
-	struct list_head mm_list;
-	struct rmap_item *rmap_list;
-	struct mm_struct *mm;
-};
-
-struct stable_node;
-
-struct rmap_item {
-	struct rmap_item *rmap_list;
-	union {
-		struct anon_vma *anon_vma;
-		int nid;
-	};
-	struct mm_struct *mm;
-	long unsigned int address;
-	unsigned int oldchecksum;
-	union {
-		struct rb_node node;
-		struct {
-			struct stable_node *head;
-			struct hlist_node hlist;
-		};
-	};
-};
-
-struct ksm_scan {
-	struct mm_slot *mm_slot;
-	long unsigned int address;
-	struct rmap_item **rmap_list;
-	long unsigned int seqnr;
-};
-
-struct stable_node {
-	union {
-		struct rb_node node;
-		struct {
-			struct list_head *head;
-			struct {
-				struct hlist_node hlist_dup;
-				struct list_head list;
-			};
-		};
-	};
-	struct hlist_head hlist;
-	union {
-		long unsigned int kpfn;
-		long unsigned int chain_prune_time;
-	};
-	int rmap_hlist_len;
-	int nid;
-};
-
-enum get_ksm_page_flags {
-	GET_KSM_PAGE_NOLOCK = 0,
-	GET_KSM_PAGE_LOCK = 1,
-	GET_KSM_PAGE_TRYLOCK = 2,
-};
-
-struct array_cache {
-	unsigned int avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int touched;
-	void *entry[0];
-};
-
-struct alien_cache {
-	spinlock_t lock;
-	struct array_cache ac;
-};
-
-typedef short unsigned int freelist_idx_t;
-
-enum {
-	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
-	SECTION_INFO = 12,
-	MIX_SECTION_INFO = 13,
-	NODE_INFO = 14,
-	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
-};
-
-enum {
-	MMOP_OFFLINE = 0,
-	MMOP_ONLINE = 1,
-	MMOP_ONLINE_KERNEL = 2,
-	MMOP_ONLINE_MOVABLE = 3,
-};
-
-typedef void (*online_page_callback_t)(struct page *, unsigned int);
-
-struct buffer_head;
-
-typedef void bh_end_io_t(struct buffer_head *, int);
-
-struct buffer_head {
-	long unsigned int b_state;
-	struct buffer_head *b_this_page;
-	struct page *b_page;
-	sector_t b_blocknr;
-	size_t b_size;
-	char *b_data;
-	struct block_device *b_bdev;
-	bh_end_io_t *b_end_io;
-	void *b_private;
-	struct list_head b_assoc_buffers;
-	struct address_space *b_assoc_map;
-	atomic_t b_count;
-	spinlock_t b_uptodate_lock;
-};
-
-typedef struct page *new_page_t(struct page *, long unsigned int);
-
-typedef void free_page_t(struct page *, long unsigned int);
-
-enum bh_state_bits {
-	BH_Uptodate = 0,
-	BH_Dirty = 1,
-	BH_Lock = 2,
-	BH_Req = 3,
-	BH_Mapped = 4,
-	BH_New = 5,
-	BH_Async_Read = 6,
-	BH_Async_Write = 7,
-	BH_Delay = 8,
-	BH_Boundary = 9,
-	BH_Write_EIO = 10,
-	BH_Unwritten = 11,
-	BH_Quiet = 12,
-	BH_Meta = 13,
-	BH_Prio = 14,
-	BH_Defer_Completion = 15,
-	BH_PrivateStart = 16,
-};
-
-struct trace_event_raw_mm_migrate_pages {
-	struct trace_entry ent;
-	long unsigned int succeeded;
-	long unsigned int failed;
-	long unsigned int thp_succeeded;
-	long unsigned int thp_failed;
-	long unsigned int thp_split;
-	enum migrate_mode mode;
-	int reason;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_migrate_pages {};
-
-typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
-
-enum scan_result {
-	SCAN_FAIL = 0,
-	SCAN_SUCCEED = 1,
-	SCAN_PMD_NULL = 2,
-	SCAN_EXCEED_NONE_PTE = 3,
-	SCAN_EXCEED_SWAP_PTE = 4,
-	SCAN_EXCEED_SHARED_PTE = 5,
-	SCAN_PTE_NON_PRESENT = 6,
-	SCAN_PTE_UFFD_WP = 7,
-	SCAN_PAGE_RO = 8,
-	SCAN_LACK_REFERENCED_PAGE = 9,
-	SCAN_PAGE_NULL = 10,
-	SCAN_SCAN_ABORT = 11,
-	SCAN_PAGE_COUNT = 12,
-	SCAN_PAGE_LRU = 13,
-	SCAN_PAGE_LOCK = 14,
-	SCAN_PAGE_ANON = 15,
-	SCAN_PAGE_COMPOUND = 16,
-	SCAN_ANY_PROCESS = 17,
-	SCAN_VMA_NULL = 18,
-	SCAN_VMA_CHECK = 19,
-	SCAN_ADDRESS_RANGE = 20,
-	SCAN_SWAP_CACHE_PAGE = 21,
-	SCAN_DEL_PAGE_LRU = 22,
-	SCAN_ALLOC_HUGE_PAGE_FAIL = 23,
-	SCAN_CGROUP_CHARGE_FAIL = 24,
-	SCAN_TRUNCATED = 25,
-	SCAN_PAGE_HAS_PRIVATE = 26,
-};
-
-struct trace_event_raw_mm_khugepaged_scan_pmd {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	long unsigned int pfn;
-	bool writable;
-	int referenced;
-	int none_or_zero;
-	int status;
-	int unmapped;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	int isolated;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page_isolate {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int none_or_zero;
-	int referenced;
-	bool writable;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_collapse_huge_page_swapin {
-	struct trace_entry ent;
-	struct mm_struct *mm;
-	int swapped_in;
-	int referenced;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
-
-struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
-
-typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
-
-typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
-
-struct mm_slot___2 {
-	struct hlist_node hash;
-	struct list_head mm_node;
-	struct mm_struct *mm;
-	int nr_pte_mapped_thp;
-	long unsigned int pte_mapped_thp[8];
-};
-
-struct khugepaged_scan {
-	struct list_head mm_head;
-	struct mm_slot___2 *mm_slot;
-	long unsigned int address;
-};
-
-struct mem_cgroup_reclaim_cookie {
-	pg_data_t *pgdat;
-	unsigned int generation;
-};
-
-struct mem_cgroup_tree_per_node {
-	struct rb_root rb_root;
-	struct rb_node *rb_rightmost;
-	spinlock_t lock;
-};
-
-struct mem_cgroup_tree {
-	struct mem_cgroup_tree_per_node *rb_tree_per_node[256];
-};
-
-struct mem_cgroup_eventfd_list {
-	struct list_head list;
-	struct eventfd_ctx *eventfd;
-};
-
-struct mem_cgroup_event {
-	struct mem_cgroup *memcg;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
-	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
-	poll_table pt;
-	wait_queue_head_t *wqh;
-	wait_queue_entry_t wait;
-	struct work_struct remove;
-};
-
-struct move_charge_struct {
-	spinlock_t lock;
-	struct mm_struct *mm;
-	struct mem_cgroup *from;
-	struct mem_cgroup *to;
-	long unsigned int flags;
-	long unsigned int precharge;
-	long unsigned int moved_charge;
-	long unsigned int moved_swap;
-	struct task_struct *moving_task;
-	wait_queue_head_t waitq;
-};
-
-enum res_type {
-	_MEM = 0,
-	_MEMSWAP = 1,
-	_OOM_TYPE = 2,
-	_KMEM = 3,
-	_TCP = 4,
-};
-
-struct memory_stat {
-	const char *name;
-	unsigned int ratio;
-	unsigned int idx;
-};
-
-struct oom_wait_info {
-	struct mem_cgroup *memcg;
-	wait_queue_entry_t wait;
-};
-
-enum oom_status {
-	OOM_SUCCESS = 0,
-	OOM_FAILED = 1,
-	OOM_ASYNC = 2,
-	OOM_SKIPPED = 3,
-};
-
-struct memcg_stock_pcp {
-	struct mem_cgroup *cached;
-	unsigned int nr_pages;
-	struct obj_cgroup *cached_objcg;
-	unsigned int nr_bytes;
-	struct work_struct work;
-	long unsigned int flags;
-};
-
-enum {
-	RES_USAGE = 0,
-	RES_LIMIT = 1,
-	RES_MAX_USAGE = 2,
-	RES_FAILCNT = 3,
-	RES_SOFT_LIMIT = 4,
-};
-
-union mc_target {
-	struct page *page;
-	swp_entry_t ent;
-};
-
-enum mc_target_type {
-	MC_TARGET_NONE = 0,
-	MC_TARGET_PAGE = 1,
-	MC_TARGET_SWAP = 2,
-	MC_TARGET_DEVICE = 3,
-};
-
-struct uncharge_gather {
-	struct mem_cgroup *memcg;
-	long unsigned int nr_pages;
-	long unsigned int pgpgout;
-	long unsigned int nr_kmem;
-	struct page *dummy_page;
-};
-
-struct numa_stat {
-	const char *name;
-	unsigned int lru_mask;
-};
-
-enum vmpressure_levels {
-	VMPRESSURE_LOW = 0,
-	VMPRESSURE_MEDIUM = 1,
-	VMPRESSURE_CRITICAL = 2,
-	VMPRESSURE_NUM_LEVELS = 3,
-};
-
-enum vmpressure_modes {
-	VMPRESSURE_NO_PASSTHROUGH = 0,
-	VMPRESSURE_HIERARCHY = 1,
-	VMPRESSURE_LOCAL = 2,
-	VMPRESSURE_NUM_MODES = 3,
-};
-
-struct vmpressure_event {
-	struct eventfd_ctx *efd;
-	enum vmpressure_levels level;
-	enum vmpressure_modes mode;
-	struct list_head node;
-};
-
-struct swap_cgroup_ctrl {
-	struct page **map;
-	long unsigned int length;
-	spinlock_t lock;
-};
-
-struct swap_cgroup {
-	short unsigned int id;
-};
-
-enum {
-	RES_USAGE___2 = 0,
-	RES_RSVD_USAGE = 1,
-	RES_LIMIT___2 = 2,
-	RES_RSVD_LIMIT = 3,
-	RES_MAX_USAGE___2 = 4,
-	RES_RSVD_MAX_USAGE = 5,
-	RES_FAILCNT___2 = 6,
-	RES_RSVD_FAILCNT = 7,
-};
-
-enum mf_result {
-	MF_IGNORED = 0,
-	MF_FAILED = 1,
-	MF_DELAYED = 2,
-	MF_RECOVERED = 3,
-};
-
-enum mf_action_page_type {
-	MF_MSG_KERNEL = 0,
-	MF_MSG_KERNEL_HIGH_ORDER = 1,
-	MF_MSG_SLAB = 2,
-	MF_MSG_DIFFERENT_COMPOUND = 3,
-	MF_MSG_POISONED_HUGE = 4,
-	MF_MSG_HUGE = 5,
-	MF_MSG_FREE_HUGE = 6,
-	MF_MSG_NON_PMD_HUGE = 7,
-	MF_MSG_UNMAP_FAILED = 8,
-	MF_MSG_DIRTY_SWAPCACHE = 9,
-	MF_MSG_CLEAN_SWAPCACHE = 10,
-	MF_MSG_DIRTY_MLOCKED_LRU = 11,
-	MF_MSG_CLEAN_MLOCKED_LRU = 12,
-	MF_MSG_DIRTY_UNEVICTABLE_LRU = 13,
-	MF_MSG_CLEAN_UNEVICTABLE_LRU = 14,
-	MF_MSG_DIRTY_LRU = 15,
-	MF_MSG_CLEAN_LRU = 16,
-	MF_MSG_TRUNCATED_LRU = 17,
-	MF_MSG_BUDDY = 18,
-	MF_MSG_BUDDY_2ND = 19,
-	MF_MSG_DAX = 20,
-	MF_MSG_UNSPLIT_THP = 21,
-	MF_MSG_UNKNOWN = 22,
-};
-
-typedef long unsigned int dax_entry_t;
-
-struct __kfifo {
-	unsigned int in;
-	unsigned int out;
-	unsigned int mask;
-	unsigned int esize;
-	void *data;
-};
-
-struct to_kill {
-	struct list_head nd;
-	struct task_struct *tsk;
-	long unsigned int addr;
-	short int size_shift;
-};
-
-struct page_state {
-	long unsigned int mask;
-	long unsigned int res;
-	enum mf_action_page_type type;
-	int (*action)(struct page *, long unsigned int);
-};
-
-struct memory_failure_entry {
-	long unsigned int pfn;
-	int flags;
-};
-
-struct memory_failure_cpu {
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct memory_failure_entry *type;
-			const struct memory_failure_entry *const_type;
-			char (*rectype)[0];
-			struct memory_failure_entry *ptr;
-			const struct memory_failure_entry *ptr_const;
-		};
-		struct memory_failure_entry buf[16];
-	} fifo;
-	spinlock_t lock;
-	struct work_struct work;
-};
-
-struct cleancache_filekey {
-	union {
-		ino_t ino;
-		__u32 fh[6];
-		u32 key[6];
-	} u;
-};
-
-struct cleancache_ops {
-	int (*init_fs)(size_t);
-	int (*init_shared_fs)(uuid_t *, size_t);
-	int (*get_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*put_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*invalidate_page)(int, struct cleancache_filekey, long unsigned int);
-	void (*invalidate_inode)(int, struct cleancache_filekey);
-	void (*invalidate_fs)(int);
-};
-
 struct trace_event_raw_test_pages_isolated {
 	struct trace_entry ent;
 	long unsigned int start_pfn;
@@ -70634,329 +85040,7 @@
 
 typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
 
-struct zpool_driver;
-
-struct zpool {
-	struct zpool_driver *driver;
-	void *pool;
-	const struct zpool_ops *ops;
-	bool evictable;
-	struct list_head list;
-};
-
-struct zpool_driver {
-	char *type;
-	struct module *owner;
-	atomic_t refcount;
-	struct list_head list;
-	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
-	void (*destroy)(void *);
-	bool malloc_support_movable;
-	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
-	void (*free)(void *, long unsigned int);
-	int (*shrink)(void *, unsigned int, unsigned int *);
-	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
-	void (*unmap)(void *, long unsigned int);
-	u64 (*total_size)(void *);
-};
-
-struct zbud_pool;
-
-struct zbud_ops {
-	int (*evict)(struct zbud_pool *, long unsigned int);
-};
-
-struct zbud_pool {
-	spinlock_t lock;
-	struct list_head unbuddied[63];
-	struct list_head buddied;
-	struct list_head lru;
-	u64 pages_nr;
-	const struct zbud_ops *ops;
-	struct zpool *zpool;
-	const struct zpool_ops *zpool_ops;
-};
-
-struct zbud_header {
-	struct list_head buddy;
-	struct list_head lru;
-	unsigned int first_chunks;
-	unsigned int last_chunks;
-	bool under_reclaim;
-};
-
-enum buddy {
-	FIRST = 0,
-	LAST = 1,
-};
-
-enum zs_mapmode {
-	ZS_MM_RW = 0,
-	ZS_MM_RO = 1,
-	ZS_MM_WO = 2,
-};
-
-struct zs_pool_stats {
-	long unsigned int pages_compacted;
-};
-
-enum fullness_group {
-	ZS_EMPTY = 0,
-	ZS_ALMOST_EMPTY = 1,
-	ZS_ALMOST_FULL = 2,
-	ZS_FULL = 3,
-	NR_ZS_FULLNESS = 4,
-};
-
-enum zs_stat_type {
-	CLASS_EMPTY = 0,
-	CLASS_ALMOST_EMPTY = 1,
-	CLASS_ALMOST_FULL = 2,
-	CLASS_FULL = 3,
-	OBJ_ALLOCATED = 4,
-	OBJ_USED = 5,
-	NR_ZS_STAT_TYPE = 6,
-};
-
-struct zs_size_stat {
-	long unsigned int objs[6];
-};
-
-struct size_class {
-	spinlock_t lock;
-	struct list_head fullness_list[4];
-	int size;
-	int objs_per_zspage;
-	int pages_per_zspage;
-	unsigned int index;
-	struct zs_size_stat stats;
-};
-
-struct link_free {
-	union {
-		long unsigned int next;
-		long unsigned int handle;
-	};
-};
-
-struct zs_pool {
-	const char *name;
-	struct size_class *size_class[257];
-	struct kmem_cache *handle_cachep;
-	struct kmem_cache *zspage_cachep;
-	atomic_long_t pages_allocated;
-	struct zs_pool_stats stats;
-	struct shrinker shrinker;
-	struct inode *inode;
-	struct work_struct free_work;
-	struct wait_queue_head migration_wait;
-	atomic_long_t isolated_pages;
-	bool destroying;
-};
-
-struct zspage {
-	struct {
-		unsigned int fullness: 2;
-		unsigned int class: 9;
-		unsigned int isolated: 3;
-		unsigned int magic: 8;
-	};
-	unsigned int inuse;
-	unsigned int freeobj;
-	struct page *first_page;
-	struct list_head list;
-	rwlock_t lock;
-};
-
-struct mapping_area {
-	char *vm_buf;
-	char *vm_addr;
-	enum zs_mapmode vm_mm;
-};
-
-struct zs_compact_control {
-	struct page *s_page;
-	struct page *d_page;
-	int obj_idx;
-};
-
-enum fixed_addresses {
-	FIX_HOLE = 0,
-	FIX_EARLY_DEBUG_TOP = 0,
-	FIX_EARLY_DEBUG_BASE = 1,
-	__end_of_permanent_fixed_addresses = 2,
-	FIX_BTMAP_END = 2,
-	FIX_BTMAP_BEGIN = 65,
-	__end_of_fixed_addresses = 66,
-};
-
-struct trace_event_raw_cma_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	const struct page *page;
-	unsigned int count;
-	unsigned int align;
-	char __data[0];
-};
-
-struct trace_event_raw_cma_release {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	const struct page *page;
-	unsigned int count;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cma_alloc {};
-
-struct trace_event_data_offsets_cma_release {};
-
-typedef void (*btf_trace_cma_alloc)(void *, long unsigned int, const struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cma_release)(void *, long unsigned int, const struct page *, unsigned int);
-
-struct cma___2 {
-	long unsigned int base_pfn;
-	long unsigned int count;
-	long unsigned int *bitmap;
-	unsigned int order_per_bit;
-	struct mutex lock;
-	char name[64];
-};
-
-struct balloon_dev_info {
-	long unsigned int isolated_pages;
-	spinlock_t pages_lock;
-	struct list_head pages;
-	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
-	struct inode *inode;
-};
-
-struct page_ext_operations {
-	size_t offset;
-	size_t size;
-	bool (*need)();
-	void (*init)();
-};
-
-struct frame_vector {
-	unsigned int nr_allocated;
-	unsigned int nr_frames;
-	bool got_ref;
-	bool is_pfns;
-	void *ptrs[0];
-};
-
-enum {
-	BAD_STACK = 4294967295,
-	NOT_STACK = 0,
-	GOOD_FRAME = 1,
-	GOOD_STACK = 2,
-};
-
-enum hmm_pfn_flags {
-	HMM_PFN_VALID = 0,
-	HMM_PFN_WRITE = 0,
-	HMM_PFN_ERROR = 0,
-	HMM_PFN_ORDER_SHIFT = 56,
-	HMM_PFN_REQ_FAULT = 0,
-	HMM_PFN_REQ_WRITE = 0,
-	HMM_PFN_FLAGS = 0,
-};
-
-struct hmm_range {
-	struct mmu_interval_notifier *notifier;
-	long unsigned int notifier_seq;
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int *hmm_pfns;
-	long unsigned int default_flags;
-	long unsigned int pfn_flags_mask;
-	void *dev_private_owner;
-};
-
-struct hmm_vma_walk {
-	struct hmm_range *range;
-	long unsigned int last;
-};
-
-enum {
-	HMM_NEED_FAULT = 1,
-	HMM_NEED_WRITE_FAULT = 2,
-	HMM_NEED_ALL_BITS = 3,
-};
-
-struct hugetlbfs_inode_info {
-	struct shared_policy policy;
-	struct inode vfs_inode;
-	unsigned int seals;
-};
-
-struct page_reporting_dev_info {
-	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
-	struct delayed_work work;
-	atomic_t state;
-};
-
-enum {
-	PAGE_REPORTING_IDLE = 0,
-	PAGE_REPORTING_REQUESTED = 1,
-	PAGE_REPORTING_ACTIVE = 2,
-};
-
-struct open_how {
-	__u64 flags;
-	__u64 mode;
-	__u64 resolve;
-};
-
-enum fsnotify_data_type {
-	FSNOTIFY_EVENT_NONE = 0,
-	FSNOTIFY_EVENT_PATH = 1,
-	FSNOTIFY_EVENT_INODE = 2,
-};
-
-typedef s32 compat_off_t;
-
-struct open_flags {
-	int open_flag;
-	umode_t mode;
-	int acc_mode;
-	int intent;
-	int lookup_flags;
-};
-
-typedef __kernel_rwf_t rwf_t;
-
-struct fscrypt_policy_v1 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 master_key_descriptor[8];
-};
-
-struct fscrypt_policy_v2 {
-	__u8 version;
-	__u8 contents_encryption_mode;
-	__u8 filenames_encryption_mode;
-	__u8 flags;
-	__u8 __reserved[4];
-	__u8 master_key_identifier[16];
-};
-
-union fscrypt_policy {
-	u8 version;
-	struct fscrypt_policy_v1 v1;
-	struct fscrypt_policy_v2 v2;
-};
-
-enum vfs_get_super_keying {
-	vfs_get_single_super = 0,
-	vfs_get_single_reconf_super = 1,
-	vfs_get_keyed_super = 2,
-	vfs_get_independent_super = 3,
-};
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
 
 struct kobj_map;
 
@@ -70969,1046 +85053,6 @@
 	struct cdev *cdev;
 };
 
-typedef unsigned int __kernel_mode_t;
-
-typedef __kernel_mode_t mode_t;
-
-struct stat {
-	long unsigned int st_dev;
-	ino_t st_ino;
-	long unsigned int st_nlink;
-	mode_t st_mode;
-	uid_t st_uid;
-	gid_t st_gid;
-	long unsigned int st_rdev;
-	long int st_size;
-	long unsigned int st_blksize;
-	long unsigned int st_blocks;
-	long unsigned int st_atime;
-	long unsigned int st_atime_nsec;
-	long unsigned int st_mtime;
-	long unsigned int st_mtime_nsec;
-	long unsigned int st_ctime;
-	long unsigned int st_ctime_nsec;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-	long unsigned int __unused6;
-};
-
-struct stat64 {
-	long long unsigned int st_dev;
-	long long unsigned int st_ino;
-	unsigned int st_mode;
-	unsigned int st_nlink;
-	unsigned int st_uid;
-	unsigned int st_gid;
-	long long unsigned int st_rdev;
-	short unsigned int __pad2;
-	long long int st_size;
-	int st_blksize;
-	long long int st_blocks;
-	int st_atime;
-	unsigned int st_atime_nsec;
-	int st_mtime;
-	unsigned int st_mtime_nsec;
-	int st_ctime;
-	unsigned int st_ctime_nsec;
-	unsigned int __unused4;
-	unsigned int __unused5;
-};
-
-struct statx_timestamp {
-	__s64 tv_sec;
-	__u32 tv_nsec;
-	__s32 __reserved;
-};
-
-struct statx {
-	__u32 stx_mask;
-	__u32 stx_blksize;
-	__u64 stx_attributes;
-	__u32 stx_nlink;
-	__u32 stx_uid;
-	__u32 stx_gid;
-	__u16 stx_mode;
-	__u16 __spare0[1];
-	__u64 stx_ino;
-	__u64 stx_size;
-	__u64 stx_blocks;
-	__u64 stx_attributes_mask;
-	struct statx_timestamp stx_atime;
-	struct statx_timestamp stx_btime;
-	struct statx_timestamp stx_ctime;
-	struct statx_timestamp stx_mtime;
-	__u32 stx_rdev_major;
-	__u32 stx_rdev_minor;
-	__u32 stx_dev_major;
-	__u32 stx_dev_minor;
-	__u64 stx_mnt_id;
-	__u64 __spare2;
-	__u64 __spare3[12];
-};
-
-struct mount;
-
-struct mnt_namespace {
-	atomic_t count;
-	struct ns_common ns;
-	struct mount *root;
-	struct list_head list;
-	spinlock_t ns_lock;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	u64 seq;
-	wait_queue_head_t poll;
-	u64 event;
-	unsigned int mounts;
-	unsigned int pending_mounts;
-};
-
-typedef u32 compat_ino_t;
-
-typedef u32 __compat_gid32_t;
-
-typedef u32 compat_mode_t;
-
-typedef u32 compat_dev_t;
-
-typedef s16 compat_nlink_t;
-
-struct compat_stat {
-	compat_dev_t st_dev;
-	compat_ino_t st_ino;
-	compat_mode_t st_mode;
-	compat_nlink_t st_nlink;
-	__compat_uid32_t st_uid;
-	__compat_gid32_t st_gid;
-	compat_dev_t st_rdev;
-	compat_off_t st_size;
-	compat_off_t st_blksize;
-	compat_off_t st_blocks;
-	old_time32_t st_atime;
-	u32 st_atime_nsec;
-	old_time32_t st_mtime;
-	u32 st_mtime_nsec;
-	old_time32_t st_ctime;
-	u32 st_ctime_nsec;
-	u32 __unused4[2];
-};
-
-struct mnt_pcp;
-
-struct mountpoint;
-
-struct mount {
-	struct hlist_node mnt_hash;
-	struct mount *mnt_parent;
-	struct dentry *mnt_mountpoint;
-	struct vfsmount mnt;
-	union {
-		struct callback_head mnt_rcu;
-		struct llist_node mnt_llist;
-	};
-	struct mnt_pcp *mnt_pcp;
-	struct list_head mnt_mounts;
-	struct list_head mnt_child;
-	struct list_head mnt_instance;
-	const char *mnt_devname;
-	struct list_head mnt_list;
-	struct list_head mnt_expire;
-	struct list_head mnt_share;
-	struct list_head mnt_slave_list;
-	struct list_head mnt_slave;
-	struct mount *mnt_master;
-	struct mnt_namespace *mnt_ns;
-	struct mountpoint *mnt_mp;
-	union {
-		struct hlist_node mnt_mp_list;
-		struct hlist_node mnt_umount;
-	};
-	struct list_head mnt_umounting;
-	struct fsnotify_mark_connector *mnt_fsnotify_marks;
-	__u32 mnt_fsnotify_mask;
-	int mnt_id;
-	int mnt_group_id;
-	int mnt_expiry_mark;
-	struct hlist_head mnt_pins;
-	struct hlist_head mnt_stuck_children;
-};
-
-struct mnt_pcp {
-	int mnt_count;
-	int mnt_writers;
-};
-
-struct mountpoint {
-	struct hlist_node m_hash;
-	struct dentry *m_dentry;
-	struct hlist_head m_list;
-	int m_count;
-};
-
-typedef short unsigned int ushort;
-
-struct user_arg_ptr {
-	bool is_compat;
-	union {
-		const char * const *native;
-		const compat_uptr_t *compat;
-	} ptr;
-};
-
-enum inode_i_mutex_lock_class {
-	I_MUTEX_NORMAL = 0,
-	I_MUTEX_PARENT = 1,
-	I_MUTEX_CHILD = 2,
-	I_MUTEX_XATTR = 3,
-	I_MUTEX_NONDIR2 = 4,
-	I_MUTEX_PARENT2 = 5,
-};
-
-struct pseudo_fs_context {
-	const struct super_operations *ops;
-	const struct xattr_handler **xattr;
-	const struct dentry_operations *dops;
-	long unsigned int magic;
-};
-
-struct name_snapshot {
-	struct qstr name;
-	unsigned char inline_name[32];
-};
-
-struct saved {
-	struct path link;
-	struct delayed_call done;
-	const char *name;
-	unsigned int seq;
-};
-
-struct nameidata {
-	struct path path;
-	struct qstr last;
-	struct path root;
-	struct inode *inode;
-	unsigned int flags;
-	unsigned int seq;
-	unsigned int m_seq;
-	unsigned int r_seq;
-	int last_type;
-	unsigned int depth;
-	int total_link_count;
-	struct saved *stack;
-	struct saved internal[2];
-	struct filename *name;
-	struct nameidata *saved;
-	unsigned int root_seq;
-	int dfd;
-	kuid_t dir_uid;
-	umode_t dir_mode;
-};
-
-enum {
-	LAST_NORM = 0,
-	LAST_ROOT = 1,
-	LAST_DOT = 2,
-	LAST_DOTDOT = 3,
-};
-
-enum {
-	WALK_TRAILING = 1,
-	WALK_MORE = 2,
-	WALK_NOFOLLOW = 4,
-};
-
-struct word_at_a_time {};
-
-struct f_owner_ex {
-	int type;
-	__kernel_pid_t pid;
-};
-
-struct flock {
-	short int l_type;
-	short int l_whence;
-	__kernel_off_t l_start;
-	__kernel_off_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct compat_flock {
-	short int l_type;
-	short int l_whence;
-	compat_off_t l_start;
-	compat_off_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct compat_flock64 {
-	short int l_type;
-	short int l_whence;
-	compat_loff_t l_start;
-	compat_loff_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct file_clone_range {
-	__s64 src_fd;
-	__u64 src_offset;
-	__u64 src_length;
-	__u64 dest_offset;
-};
-
-struct file_dedupe_range_info {
-	__s64 dest_fd;
-	__u64 dest_offset;
-	__u64 bytes_deduped;
-	__s32 status;
-	__u32 reserved;
-};
-
-struct file_dedupe_range {
-	__u64 src_offset;
-	__u64 src_length;
-	__u16 dest_count;
-	__u16 reserved1;
-	__u32 reserved2;
-	struct file_dedupe_range_info info[0];
-};
-
-typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
-
-struct fiemap_extent;
-
-struct fiemap_extent_info {
-	unsigned int fi_flags;
-	unsigned int fi_extents_mapped;
-	unsigned int fi_extents_max;
-	struct fiemap_extent *fi_extents_start;
-};
-
-struct space_resv {
-	__s16 l_type;
-	__s16 l_whence;
-	__s64 l_start;
-	__s64 l_len;
-	__s32 l_sysid;
-	__u32 l_pid;
-	__s32 l_pad[4];
-};
-
-struct fiemap_extent {
-	__u64 fe_logical;
-	__u64 fe_physical;
-	__u64 fe_length;
-	__u64 fe_reserved64[2];
-	__u32 fe_flags;
-	__u32 fe_reserved[3];
-};
-
-struct fiemap {
-	__u64 fm_start;
-	__u64 fm_length;
-	__u32 fm_flags;
-	__u32 fm_mapped_extents;
-	__u32 fm_extent_count;
-	__u32 fm_reserved;
-	struct fiemap_extent fm_extents[0];
-};
-
-struct linux_dirent64 {
-	u64 d_ino;
-	s64 d_off;
-	short unsigned int d_reclen;
-	unsigned char d_type;
-	char d_name[0];
-};
-
-struct old_linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct readdir_callback {
-	struct dir_context ctx;
-	struct old_linux_dirent *dirent;
-	int result;
-};
-
-struct linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct getdents_callback {
-	struct dir_context ctx;
-	struct linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct getdents_callback64 {
-	struct dir_context ctx;
-	struct linux_dirent64 *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct compat_old_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct compat_readdir_callback {
-	struct dir_context ctx;
-	struct compat_old_linux_dirent *dirent;
-	int result;
-};
-
-struct compat_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct compat_getdents_callback {
-	struct dir_context ctx;
-	struct compat_linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-typedef struct {
-	long unsigned int fds_bits[16];
-} __kernel_fd_set;
-
-typedef __kernel_fd_set fd_set;
-
-struct poll_table_entry {
-	struct file *filp;
-	__poll_t key;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *wait_address;
-};
-
-struct poll_table_page;
-
-struct poll_wqueues {
-	poll_table pt;
-	struct poll_table_page *table;
-	struct task_struct *polling_task;
-	int triggered;
-	int error;
-	int inline_index;
-	struct poll_table_entry inline_entries[9];
-};
-
-struct poll_table_page {
-	struct poll_table_page *next;
-	struct poll_table_entry *entry;
-	struct poll_table_entry entries[0];
-};
-
-enum poll_time_type {
-	PT_TIMEVAL = 0,
-	PT_OLD_TIMEVAL = 1,
-	PT_TIMESPEC = 2,
-	PT_OLD_TIMESPEC = 3,
-};
-
-typedef struct {
-	long unsigned int *in;
-	long unsigned int *out;
-	long unsigned int *ex;
-	long unsigned int *res_in;
-	long unsigned int *res_out;
-	long unsigned int *res_ex;
-} fd_set_bits;
-
-struct sigset_argpack {
-	sigset_t *p;
-	size_t size;
-};
-
-struct poll_list {
-	struct poll_list *next;
-	int len;
-	struct pollfd entries[0];
-};
-
-struct compat_sel_arg_struct {
-	compat_ulong_t n;
-	compat_uptr_t inp;
-	compat_uptr_t outp;
-	compat_uptr_t exp;
-	compat_uptr_t tvp;
-};
-
-struct compat_sigset_argpack {
-	compat_uptr_t p;
-	compat_size_t size;
-};
-
-enum dentry_d_lock_class {
-	DENTRY_D_LOCK_NORMAL = 0,
-	DENTRY_D_LOCK_NESTED = 1,
-};
-
-struct external_name {
-	union {
-		atomic_t count;
-		struct callback_head head;
-	} u;
-	unsigned char name[0];
-};
-
-enum d_walk_ret {
-	D_WALK_CONTINUE = 0,
-	D_WALK_QUIT = 1,
-	D_WALK_NORETRY = 2,
-	D_WALK_SKIP = 3,
-};
-
-struct check_mount {
-	struct vfsmount *mnt;
-	unsigned int mounted;
-};
-
-struct select_data {
-	struct dentry *start;
-	union {
-		long int found;
-		struct dentry *victim;
-	};
-	struct list_head dispose;
-};
-
-struct fsxattr {
-	__u32 fsx_xflags;
-	__u32 fsx_extsize;
-	__u32 fsx_nextents;
-	__u32 fsx_projid;
-	__u32 fsx_cowextsize;
-	unsigned char fsx_pad[8];
-};
-
-enum file_time_flags {
-	S_ATIME = 1,
-	S_MTIME = 2,
-	S_CTIME = 4,
-	S_VERSION = 8,
-};
-
-struct proc_mounts {
-	struct mnt_namespace *ns;
-	struct path root;
-	int (*show)(struct seq_file *, struct vfsmount *);
-	struct mount cursor;
-};
-
-enum umount_tree_flags {
-	UMOUNT_SYNC = 1,
-	UMOUNT_PROPAGATE = 2,
-	UMOUNT_CONNECTED = 4,
-};
-
-struct unicode_map {
-	const char *charset;
-	int version;
-};
-
-struct simple_transaction_argresp {
-	ssize_t size;
-	char data[0];
-};
-
-struct simple_attr {
-	int (*get)(void *, u64 *);
-	int (*set)(void *, u64);
-	char get_buf[24];
-	char set_buf[24];
-	void *data;
-	const char *fmt;
-	struct mutex mutex;
-};
-
-struct wb_writeback_work {
-	long int nr_pages;
-	struct super_block *sb;
-	enum writeback_sync_modes sync_mode;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_kupdate: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_background: 1;
-	unsigned int for_sync: 1;
-	unsigned int auto_free: 1;
-	enum wb_reason reason;
-	struct list_head list;
-	struct wb_completion *done;
-};
-
-struct trace_event_raw_writeback_page_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_dirty_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_foreign_history {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t cgroup_ino;
-	unsigned int history;
-	char __data[0];
-};
-
-struct trace_event_raw_inode_switch_wbs {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	ino_t old_cgroup_ino;
-	ino_t new_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_track_foreign_dirty {
-	struct trace_entry ent;
-	char name[32];
-	u64 bdi_id;
-	ino_t ino;
-	unsigned int memcg_id;
-	ino_t cgroup_ino;
-	ino_t page_cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_flush_foreign {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	unsigned int frn_bdi_id;
-	unsigned int frn_memcg_id;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_write_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	int sync_mode;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_work_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_pages;
-	dev_t sb_dev;
-	int sync_mode;
-	int for_kupdate;
-	int range_cyclic;
-	int for_background;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_pages_written {
-	struct trace_entry ent;
-	long int pages;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_class {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_bdi_register {
-	struct trace_entry ent;
-	char name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wbc_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_to_write;
-	long int pages_skipped;
-	int sync_mode;
-	int for_kupdate;
-	int for_background;
-	int for_reclaim;
-	int range_cyclic;
-	long int range_start;
-	long int range_end;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_queue_io {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int older;
-	long int age;
-	int moved;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_global_dirty_state {
-	struct trace_entry ent;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int background_thresh;
-	long unsigned int dirty_thresh;
-	long unsigned int dirty_limit;
-	long unsigned int nr_dirtied;
-	long unsigned int nr_written;
-	char __data[0];
-};
-
-struct trace_event_raw_bdi_dirty_ratelimit {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int write_bw;
-	long unsigned int avg_write_bw;
-	long unsigned int dirty_rate;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_balance_dirty_pages {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int limit;
-	long unsigned int setpoint;
-	long unsigned int dirty;
-	long unsigned int bdi_setpoint;
-	long unsigned int bdi_dirty;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	unsigned int dirtied;
-	unsigned int dirtied_pause;
-	long unsigned int paused;
-	long int pause;
-	long unsigned int period;
-	long int think;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_sb_inodes_requeue {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_congest_waited_template {
-	struct trace_entry ent;
-	unsigned int usec_timeout;
-	unsigned int usec_delayed;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_single_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	long unsigned int writeback_index;
-	long int nr_to_write;
-	long unsigned int wrote;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_inode_template {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int state;
-	__u16 mode;
-	long unsigned int dirtied_when;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_writeback_page_template {};
-
-struct trace_event_data_offsets_writeback_dirty_inode_template {};
-
-struct trace_event_data_offsets_inode_foreign_history {};
-
-struct trace_event_data_offsets_inode_switch_wbs {};
-
-struct trace_event_data_offsets_track_foreign_dirty {};
-
-struct trace_event_data_offsets_flush_foreign {};
-
-struct trace_event_data_offsets_writeback_write_inode_template {};
-
-struct trace_event_data_offsets_writeback_work_class {};
-
-struct trace_event_data_offsets_writeback_pages_written {};
-
-struct trace_event_data_offsets_writeback_class {};
-
-struct trace_event_data_offsets_writeback_bdi_register {};
-
-struct trace_event_data_offsets_wbc_class {};
-
-struct trace_event_data_offsets_writeback_queue_io {};
-
-struct trace_event_data_offsets_global_dirty_state {};
-
-struct trace_event_data_offsets_bdi_dirty_ratelimit {};
-
-struct trace_event_data_offsets_balance_dirty_pages {};
-
-struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
-
-struct trace_event_data_offsets_writeback_congest_waited_template {};
-
-struct trace_event_data_offsets_writeback_single_inode_template {};
-
-struct trace_event_data_offsets_writeback_inode_template {};
-
-typedef void (*btf_trace_writeback_dirty_page)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_wait_on_page_writeback)(void *, struct page *, struct address_space *);
-
-typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
-
-typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
-
-typedef void (*btf_trace_track_foreign_dirty)(void *, struct page *, struct bdi_writeback *);
-
-typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_pages_written)(void *, long int);
-
-typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
-
-typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
-
-typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
-
-typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
-
-typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
-
-typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
-
-typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
-
-typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
-
-struct inode_switch_wbs_context {
-	struct inode *inode;
-	struct bdi_writeback *new_wb;
-	struct callback_head callback_head;
-	struct work_struct work;
-};
-
-struct splice_desc {
-	size_t total_len;
-	unsigned int len;
-	unsigned int flags;
-	union {
-		void *userptr;
-		struct file *file;
-		void *data;
-	} u;
-	loff_t pos;
-	loff_t *opos;
-	size_t num_spliced;
-	bool need_wakeup;
-};
-
-typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
-
-typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
-
-struct old_utimbuf32 {
-	old_time32_t actime;
-	old_time32_t modtime;
-};
-
-struct utimbuf {
-	__kernel_old_time_t actime;
-	__kernel_old_time_t modtime;
-};
-
-typedef int __kernel_daddr_t;
-
-struct ustat {
-	__kernel_daddr_t f_tfree;
-	__kernel_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-struct statfs {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__kernel_long_t f_blocks;
-	__kernel_long_t f_bfree;
-	__kernel_long_t f_bavail;
-	__kernel_long_t f_files;
-	__kernel_long_t f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct statfs64 {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct compat_statfs64 {
-	__u32 f_type;
-	__u32 f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__u32 f_namelen;
-	__u32 f_frsize;
-	__u32 f_flags;
-	__u32 f_spare[4];
-};
-
-typedef s32 compat_daddr_t;
-
-typedef __kernel_fsid_t compat_fsid_t;
-
-struct compat_statfs {
-	int f_type;
-	int f_bsize;
-	int f_blocks;
-	int f_bfree;
-	int f_bavail;
-	int f_files;
-	int f_ffree;
-	compat_fsid_t f_fsid;
-	int f_namelen;
-	int f_frsize;
-	int f_flags;
-	int f_spare[4];
-};
-
-struct compat_ustat {
-	compat_daddr_t f_tfree;
-	compat_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-typedef struct ns_common *ns_get_path_helper_t(void *);
-
-struct ns_get_path_task_args {
-	const struct proc_ns_operations *ns_ops;
-	struct task_struct *task;
-};
-
-enum legacy_fs_param {
-	LEGACY_FS_UNSET_PARAMS = 0,
-	LEGACY_FS_MONOLITHIC_PARAMS = 1,
-	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
-};
-
-struct legacy_fs_context {
-	char *legacy_data;
-	size_t data_size;
-	enum legacy_fs_param param_type;
-};
-
 enum fsconfig_command {
 	FSCONFIG_SET_FLAG = 0,
 	FSCONFIG_SET_STRING = 1,
@@ -72020,361 +85064,9 @@
 	FSCONFIG_CMD_RECONFIGURE = 7,
 };
 
-struct dax_device;
-
-struct iomap_page_ops;
-
-struct iomap___2 {
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	struct block_device *bdev;
-	struct dax_device *dax_dev;
-	void *inline_data;
-	void *private;
-	const struct iomap_page_ops *page_ops;
-};
-
-struct iomap_page_ops {
-	int (*page_prepare)(struct inode *, loff_t, unsigned int, struct iomap___2 *);
-	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *, struct iomap___2 *);
-};
-
-struct decrypt_bh_ctx {
-	struct work_struct work;
-	struct buffer_head *bh;
-};
-
-struct bh_lru {
-	struct buffer_head *bhs[16];
-};
-
-struct bh_accounting {
-	int nr;
-	int ratelimit;
-};
-
-enum {
-	DISK_EVENT_MEDIA_CHANGE = 1,
-	DISK_EVENT_EJECT_REQUEST = 2,
-};
-
-enum {
-	BIOSET_NEED_BVECS = 1,
-	BIOSET_NEED_RESCUER = 2,
-};
-
-struct bdev_inode {
-	struct block_device bdev;
-	struct inode vfs_inode;
-};
-
-struct blkdev_dio {
-	union {
-		struct kiocb *iocb;
-		struct task_struct *waiter;
-	};
-	size_t size;
-	atomic_t ref;
-	bool multi_bio: 1;
-	bool should_dirty: 1;
-	bool is_sync: 1;
-	struct bio bio;
-};
-
-struct bd_holder_disk {
-	struct list_head list;
-	struct gendisk *disk;
-	int refcnt;
-};
-
-typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
-
-typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
-
-enum {
-	DIO_LOCKING = 1,
-	DIO_SKIP_HOLES = 2,
-};
-
-struct dio_submit {
-	struct bio *bio;
-	unsigned int blkbits;
-	unsigned int blkfactor;
-	unsigned int start_zero_done;
-	int pages_in_io;
-	sector_t block_in_file;
-	unsigned int blocks_available;
-	int reap_counter;
-	sector_t final_block_in_request;
-	int boundary;
-	get_block_t *get_block;
-	dio_submit_t *submit_io;
-	loff_t logical_offset_in_bio;
-	sector_t final_block_in_bio;
-	sector_t next_block_for_io;
-	struct page *cur_page;
-	unsigned int cur_page_offset;
-	unsigned int cur_page_len;
-	sector_t cur_page_block;
-	loff_t cur_page_fs_offset;
-	struct iov_iter *iter;
-	unsigned int head;
-	unsigned int tail;
-	size_t from;
-	size_t to;
-};
-
-struct dio {
-	int flags;
-	int op;
-	int op_flags;
-	blk_qc_t bio_cookie;
-	struct gendisk *bio_disk;
-	struct inode *inode;
-	loff_t i_size;
-	dio_iodone_t *end_io;
-	void *private;
-	spinlock_t bio_lock;
-	int page_errors;
-	int is_async;
-	bool defer_completion;
-	bool should_dirty;
-	int io_error;
-	long unsigned int refcount;
-	struct bio *bio_list;
-	struct task_struct *waiter;
-	struct kiocb *iocb;
-	ssize_t result;
-	union {
-		struct page *pages[64];
-		struct work_struct complete_work;
-	};
-	long: 64;
-};
-
-struct bvec_iter_all {
-	struct bio_vec bv;
-	int idx;
-	unsigned int done;
-};
-
-struct mpage_readpage_args {
-	struct bio *bio;
-	struct page *page;
-	unsigned int nr_pages;
-	bool is_readahead;
-	sector_t last_block_in_bio;
-	struct buffer_head map_bh;
-	long unsigned int first_logical_block;
-	get_block_t *get_block;
-};
-
-struct mpage_data {
-	struct bio *bio;
-	sector_t last_block_in_bio;
-	get_block_t *get_block;
-	unsigned int use_writepage;
-};
-
-typedef u32 nlink_t;
-
-typedef int (*proc_write_t)(struct file *, char *, size_t);
-
-struct proc_dir_entry {
-	atomic_t in_use;
-	refcount_t refcnt;
-	struct list_head pde_openers;
-	spinlock_t pde_unload_lock;
-	struct completion *pde_unload_completion;
-	const struct inode_operations *proc_iops;
-	union {
-		const struct proc_ops *proc_ops;
-		const struct file_operations *proc_dir_ops;
-	};
-	const struct dentry_operations *proc_dops;
-	union {
-		const struct seq_operations *seq_ops;
-		int (*single_show)(struct seq_file *, void *);
-	};
-	proc_write_t write;
-	void *data;
-	unsigned int state_size;
-	unsigned int low_ino;
-	nlink_t nlink;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct proc_dir_entry *parent;
-	struct rb_root subdir;
-	struct rb_node subdir_node;
-	char *name;
-	umode_t mode;
-	u8 flags;
-	u8 namelen;
-	char inline_name[0];
-};
-
-union proc_op {
-	int (*proc_get_link)(struct dentry *, struct path *);
-	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
-	const char *lsm;
-};
-
-struct proc_inode {
-	struct pid *pid;
-	unsigned int fd;
-	union proc_op op;
-	struct proc_dir_entry *pde;
-	struct ctl_table_header *sysctl;
-	struct ctl_table *sysctl_entry;
-	struct hlist_node sibling_inodes;
-	const struct proc_ns_operations *ns_ops;
-	struct inode vfs_inode;
-};
-
-struct proc_fs_opts {
-	int flag;
-	const char *str;
-};
-
-struct file_handle {
-	__u32 handle_bytes;
-	int handle_type;
-	unsigned char f_handle[0];
-};
-
-struct inotify_inode_mark {
-	struct fsnotify_mark fsn_mark;
-	int wd;
-};
-
-struct dnotify_struct {
-	struct dnotify_struct *dn_next;
-	__u32 dn_mask;
-	int dn_fd;
-	struct file *dn_filp;
-	fl_owner_t dn_owner;
-};
-
-struct dnotify_mark {
-	struct fsnotify_mark fsn_mark;
-	struct dnotify_struct *dn;
-};
-
-struct inotify_event_info {
-	struct fsnotify_event fse;
-	u32 mask;
-	int wd;
-	u32 sync_cookie;
-	int name_len;
-	char name[0];
-};
-
-struct inotify_event {
-	__s32 wd;
-	__u32 mask;
-	__u32 cookie;
-	__u32 len;
-	char name[0];
-};
-
-enum {
-	FAN_EVENT_INIT = 0,
-	FAN_EVENT_REPORTED = 1,
-	FAN_EVENT_ANSWERED = 2,
-	FAN_EVENT_CANCELED = 3,
-};
-
-struct fanotify_fh {
-	u8 type;
-	u8 len;
-	u8 flags;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-struct fanotify_info {
-	u8 dir_fh_totlen;
-	u8 file_fh_totlen;
-	u8 name_len;
-	u8 pad;
-	unsigned char buf[0];
-};
-
-enum fanotify_event_type {
-	FANOTIFY_EVENT_TYPE_FID = 0,
-	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
-	FANOTIFY_EVENT_TYPE_PATH = 2,
-	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
-	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
-};
-
-struct fanotify_event {
-	struct fsnotify_event fse;
-	u32 mask;
-	enum fanotify_event_type type;
-	struct pid *pid;
-};
-
-struct fanotify_fid_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_fh object_fh;
-	unsigned char _inline_fh_buf[12];
-};
-
-struct fanotify_name_event {
-	struct fanotify_event fae;
-	__kernel_fsid_t fsid;
-	struct fanotify_info info;
-};
-
-struct fanotify_path_event {
-	struct fanotify_event fae;
-	struct path path;
-};
-
-struct fanotify_perm_event {
-	struct fanotify_event fae;
-	struct path path;
-	short unsigned int response;
-	short unsigned int state;
-	int fd;
-};
-
-struct fanotify_event_metadata {
-	__u32 event_len;
-	__u8 vers;
-	__u8 reserved;
-	__u16 metadata_len;
-	__u64 mask;
-	__s32 fd;
-	__s32 pid;
-};
-
-struct fanotify_event_info_header {
-	__u8 info_type;
-	__u8 pad;
-	__u16 len;
-};
-
-struct fanotify_event_info_fid {
-	struct fanotify_event_info_header hdr;
-	__kernel_fsid_t fsid;
-	unsigned char handle[0];
-};
-
-struct fanotify_response {
-	__s32 fd;
-	__u32 response;
-};
-
-struct epoll_event {
-	__poll_t events;
-	__u64 data;
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
 };
 
 struct epoll_filefd {
@@ -72382,15 +85074,13 @@
 	int fd;
 } __attribute__((packed));
 
-struct nested_call_node {
-	struct list_head llink;
-	void *cookie;
-	void *ctx;
-};
+struct epitem;
 
-struct nested_calls {
-	struct list_head tasks_call_list;
-	spinlock_t lock;
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
 };
 
 struct eventpoll;
@@ -72403,10 +85093,9 @@
 	struct list_head rdllink;
 	struct epitem *next;
 	struct epoll_filefd ffd;
-	int nwait;
-	struct list_head pwqlist;
+	struct eppoll_entry *pwqlist;
 	struct eventpoll *ep;
-	struct list_head fllink;
+	struct hlist_node fllink;
 	struct wakeup_source *ws;
 	struct epoll_event event;
 };
@@ -72423,2918 +85112,18 @@
 	struct user_struct *user;
 	struct file *file;
 	u64 gen;
+	struct hlist_head refs;
 	unsigned int napi_id;
 };
 
-struct eppoll_entry {
-	struct list_head llink;
-	struct epitem *base;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *whead;
-};
-
 struct ep_pqueue {
 	poll_table pt;
 	struct epitem *epi;
 };
 
-struct ep_send_events_data {
-	int maxevents;
-	struct epoll_event *events;
-	int res;
-};
-
-struct signalfd_siginfo {
-	__u32 ssi_signo;
-	__s32 ssi_errno;
-	__s32 ssi_code;
-	__u32 ssi_pid;
-	__u32 ssi_uid;
-	__s32 ssi_fd;
-	__u32 ssi_tid;
-	__u32 ssi_band;
-	__u32 ssi_overrun;
-	__u32 ssi_trapno;
-	__s32 ssi_status;
-	__s32 ssi_int;
-	__u64 ssi_ptr;
-	__u64 ssi_utime;
-	__u64 ssi_stime;
-	__u64 ssi_addr;
-	__u16 ssi_addr_lsb;
-	__u16 __pad2;
-	__s32 ssi_syscall;
-	__u64 ssi_call_addr;
-	__u32 ssi_arch;
-	__u8 __pad[28];
-};
-
-struct signalfd_ctx {
-	sigset_t sigmask;
-};
-
-struct timerfd_ctx {
-	union {
-		struct hrtimer tmr;
-		struct alarm alarm;
-	} t;
-	ktime_t tintv;
-	ktime_t moffs;
-	wait_queue_head_t wqh;
-	u64 ticks;
-	int clockid;
-	short unsigned int expired;
-	short unsigned int settime_flags;
-	struct callback_head rcu;
-	struct list_head clist;
-	spinlock_t cancel_lock;
-	bool might_cancel;
-};
-
-struct eventfd_ctx___2 {
-	struct kref kref;
-	wait_queue_head_t wqh;
-	__u64 count;
-	unsigned int flags;
-	int id;
-};
-
-enum userfaultfd_state {
-	UFFD_STATE_WAIT_API = 0,
-	UFFD_STATE_RUNNING = 1,
-};
-
-struct userfaultfd_ctx {
-	wait_queue_head_t fault_pending_wqh;
-	wait_queue_head_t fault_wqh;
-	wait_queue_head_t fd_wqh;
-	wait_queue_head_t event_wqh;
-	seqcount_spinlock_t refile_seq;
-	refcount_t refcount;
-	unsigned int flags;
-	unsigned int features;
-	enum userfaultfd_state state;
-	bool released;
-	bool mmap_changing;
-	struct mm_struct *mm;
-};
-
-struct uffd_msg {
-	__u8 event;
-	__u8 reserved1;
-	__u16 reserved2;
-	__u32 reserved3;
-	union {
-		struct {
-			__u64 flags;
-			__u64 address;
-			union {
-				__u32 ptid;
-			} feat;
-		} pagefault;
-		struct {
-			__u32 ufd;
-		} fork;
-		struct {
-			__u64 from;
-			__u64 to;
-			__u64 len;
-		} remap;
-		struct {
-			__u64 start;
-			__u64 end;
-		} remove;
-		struct {
-			__u64 reserved1;
-			__u64 reserved2;
-			__u64 reserved3;
-		} reserved;
-	} arg;
-};
-
-struct uffdio_api {
-	__u64 api;
-	__u64 features;
-	__u64 ioctls;
-};
-
-struct uffdio_range {
-	__u64 start;
-	__u64 len;
-};
-
-struct uffdio_register {
-	struct uffdio_range range;
-	__u64 mode;
-	__u64 ioctls;
-};
-
-struct uffdio_copy {
-	__u64 dst;
-	__u64 src;
-	__u64 len;
-	__u64 mode;
-	__s64 copy;
-};
-
-struct uffdio_zeropage {
-	struct uffdio_range range;
-	__u64 mode;
-	__s64 zeropage;
-};
-
-struct uffdio_writeprotect {
-	struct uffdio_range range;
-	__u64 mode;
-};
-
-struct userfaultfd_fork_ctx {
-	struct userfaultfd_ctx *orig;
-	struct userfaultfd_ctx *new;
-	struct list_head list;
-};
-
-struct userfaultfd_unmap_ctx {
-	struct userfaultfd_ctx *ctx;
-	long unsigned int start;
-	long unsigned int end;
-	struct list_head list;
-};
-
-struct userfaultfd_wait_queue {
-	struct uffd_msg msg;
-	wait_queue_entry_t wq;
-	struct userfaultfd_ctx *ctx;
-	bool waken;
-};
-
-struct userfaultfd_wake_range {
-	long unsigned int start;
-	long unsigned int len;
-};
-
-struct kioctx;
-
-struct kioctx_table {
-	struct callback_head rcu;
-	unsigned int nr;
-	struct kioctx *table[0];
-};
-
-typedef __kernel_ulong_t aio_context_t;
-
-enum {
-	IOCB_CMD_PREAD = 0,
-	IOCB_CMD_PWRITE = 1,
-	IOCB_CMD_FSYNC = 2,
-	IOCB_CMD_FDSYNC = 3,
-	IOCB_CMD_POLL = 5,
-	IOCB_CMD_NOOP = 6,
-	IOCB_CMD_PREADV = 7,
-	IOCB_CMD_PWRITEV = 8,
-};
-
-struct io_event {
-	__u64 data;
-	__u64 obj;
-	__s64 res;
-	__s64 res2;
-};
-
-struct iocb {
-	__u64 aio_data;
-	__u32 aio_key;
-	__kernel_rwf_t aio_rw_flags;
-	__u16 aio_lio_opcode;
-	__s16 aio_reqprio;
-	__u32 aio_fildes;
-	__u64 aio_buf;
-	__u64 aio_nbytes;
-	__s64 aio_offset;
-	__u64 aio_reserved2;
-	__u32 aio_flags;
-	__u32 aio_resfd;
-};
-
-typedef int kiocb_cancel_fn(struct kiocb *);
-
-typedef u32 compat_aio_context_t;
-
-struct aio_ring {
-	unsigned int id;
-	unsigned int nr;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int magic;
-	unsigned int compat_features;
-	unsigned int incompat_features;
-	unsigned int header_length;
-	struct io_event io_events[0];
-};
-
-struct kioctx_cpu;
-
-struct ctx_rq_wait;
-
-struct kioctx {
-	struct percpu_ref users;
-	atomic_t dead;
-	struct percpu_ref reqs;
-	long unsigned int user_id;
-	struct kioctx_cpu *cpu;
-	unsigned int req_batch;
-	unsigned int max_reqs;
-	unsigned int nr_events;
-	long unsigned int mmap_base;
-	long unsigned int mmap_size;
-	struct page **ring_pages;
-	long int nr_pages;
-	struct rcu_work free_rwork;
-	struct ctx_rq_wait *rq_wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct {
-		atomic_t reqs_available;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		spinlock_t ctx_lock;
-		struct list_head active_reqs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex ring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		unsigned int tail;
-		unsigned int completed_events;
-		spinlock_t completion_lock;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct page *internal_pages[8];
-	struct file *aio_ring_file;
-	unsigned int id;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kioctx_cpu {
-	unsigned int reqs_available;
-};
-
-struct ctx_rq_wait {
-	struct completion comp;
-	atomic_t count;
-};
-
-struct fsync_iocb {
-	struct file *file;
-	struct work_struct work;
-	bool datasync;
-	struct cred *creds;
-};
-
-struct poll_iocb {
-	struct file *file;
-	struct wait_queue_head *head;
-	__poll_t events;
-	bool done;
-	bool cancelled;
-	struct wait_queue_entry wait;
-	struct work_struct work;
-};
-
-struct aio_kiocb {
-	union {
-		struct file *ki_filp;
-		struct kiocb rw;
-		struct fsync_iocb fsync;
-		struct poll_iocb poll;
-	};
-	struct kioctx *ki_ctx;
-	kiocb_cancel_fn *ki_cancel;
-	struct io_event ki_res;
-	struct list_head ki_list;
-	refcount_t ki_refcnt;
-	struct eventfd_ctx *ki_eventfd;
-};
-
-struct aio_poll_table {
-	struct poll_table_struct pt;
-	struct aio_kiocb *iocb;
-	int error;
-};
-
-struct __aio_sigset {
-	const sigset_t *sigmask;
-	size_t sigsetsize;
-};
-
-struct __compat_aio_sigset {
-	compat_uptr_t sigmask;
-	compat_size_t sigsetsize;
-};
-
-enum {
-	PERCPU_REF_INIT_ATOMIC = 1,
-	PERCPU_REF_INIT_DEAD = 2,
-	PERCPU_REF_ALLOW_REINIT = 4,
-};
-
-struct user_msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iovec *msg_iov;
-	__kernel_size_t msg_iovlen;
-	void *msg_control;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-};
-
-struct compat_msghdr {
-	compat_uptr_t msg_name;
-	compat_int_t msg_namelen;
-	compat_uptr_t msg_iov;
-	compat_size_t msg_iovlen;
-	compat_uptr_t msg_control;
-	compat_size_t msg_controllen;
-	compat_uint_t msg_flags;
-};
-
-struct scm_fp_list {
-	short int count;
-	short int max;
-	struct user_struct *user;
-	struct file *fp[253];
-};
-
-struct unix_skb_parms {
-	struct pid *pid;
-	kuid_t uid;
-	kgid_t gid;
-	struct scm_fp_list *fp;
-	u32 secid;
-	u32 consumed;
-};
-
-struct trace_event_raw_io_uring_create {
-	struct trace_entry ent;
-	int fd;
-	void *ctx;
-	u32 sq_entries;
-	u32 cq_entries;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_register {
-	struct trace_entry ent;
-	void *ctx;
-	unsigned int opcode;
-	unsigned int nr_files;
-	unsigned int nr_bufs;
-	bool eventfd;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_file_get {
-	struct trace_entry ent;
-	void *ctx;
-	int fd;
-	char __data[0];
-};
-
-struct io_wq_work;
-
-struct trace_event_raw_io_uring_queue_async_work {
-	struct trace_entry ent;
-	void *ctx;
-	int rw;
-	void *req;
-	struct io_wq_work *work;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct io_wq_work_node {
-	struct io_wq_work_node *next;
-};
-
-struct io_wq_work {
-	struct io_wq_work_node list;
-	struct io_identity *identity;
-	unsigned int flags;
-};
-
-struct trace_event_raw_io_uring_defer {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	long long unsigned int data;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_link {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	void *target_req;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_cqring_wait {
-	struct trace_entry ent;
-	void *ctx;
-	int min_events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_fail_link {
-	struct trace_entry ent;
-	void *req;
-	void *link;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_complete {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	long int res;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_submit_sqe {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	bool force_nonblock;
-	bool sq_thread;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_arm {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	int events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_wake {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_add {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_run {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_io_uring_create {};
-
-struct trace_event_data_offsets_io_uring_register {};
-
-struct trace_event_data_offsets_io_uring_file_get {};
-
-struct trace_event_data_offsets_io_uring_queue_async_work {};
-
-struct trace_event_data_offsets_io_uring_defer {};
-
-struct trace_event_data_offsets_io_uring_link {};
-
-struct trace_event_data_offsets_io_uring_cqring_wait {};
-
-struct trace_event_data_offsets_io_uring_fail_link {};
-
-struct trace_event_data_offsets_io_uring_complete {};
-
-struct trace_event_data_offsets_io_uring_submit_sqe {};
-
-struct trace_event_data_offsets_io_uring_poll_arm {};
-
-struct trace_event_data_offsets_io_uring_poll_wake {};
-
-struct trace_event_data_offsets_io_uring_task_add {};
-
-struct trace_event_data_offsets_io_uring_task_run {};
-
-typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
-
-typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);
-
-typedef void (*btf_trace_io_uring_file_get)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);
-
-typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);
-
-typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);
-
-typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u8, u64, bool, bool);
-
-typedef void (*btf_trace_io_uring_poll_arm)(void *, void *, u8, u64, int, int);
-
-typedef void (*btf_trace_io_uring_poll_wake)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_add)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_run)(void *, void *, u8, u64);
-
-struct io_uring_sqe {
-	__u8 opcode;
-	__u8 flags;
-	__u16 ioprio;
-	__s32 fd;
-	union {
-		__u64 off;
-		__u64 addr2;
-	};
-	union {
-		__u64 addr;
-		__u64 splice_off_in;
-	};
-	__u32 len;
-	union {
-		__kernel_rwf_t rw_flags;
-		__u32 fsync_flags;
-		__u16 poll_events;
-		__u32 poll32_events;
-		__u32 sync_range_flags;
-		__u32 msg_flags;
-		__u32 timeout_flags;
-		__u32 accept_flags;
-		__u32 cancel_flags;
-		__u32 open_flags;
-		__u32 statx_flags;
-		__u32 fadvise_advice;
-		__u32 splice_flags;
-	};
-	__u64 user_data;
-	union {
-		struct {
-			union {
-				__u16 buf_index;
-				__u16 buf_group;
-			};
-			__u16 personality;
-			__s32 splice_fd_in;
-		};
-		__u64 __pad2[3];
-	};
-};
-
-enum {
-	IOSQE_FIXED_FILE_BIT = 0,
-	IOSQE_IO_DRAIN_BIT = 1,
-	IOSQE_IO_LINK_BIT = 2,
-	IOSQE_IO_HARDLINK_BIT = 3,
-	IOSQE_ASYNC_BIT = 4,
-	IOSQE_BUFFER_SELECT_BIT = 5,
-};
-
-enum {
-	IORING_OP_NOP = 0,
-	IORING_OP_READV = 1,
-	IORING_OP_WRITEV = 2,
-	IORING_OP_FSYNC = 3,
-	IORING_OP_READ_FIXED = 4,
-	IORING_OP_WRITE_FIXED = 5,
-	IORING_OP_POLL_ADD = 6,
-	IORING_OP_POLL_REMOVE = 7,
-	IORING_OP_SYNC_FILE_RANGE = 8,
-	IORING_OP_SENDMSG = 9,
-	IORING_OP_RECVMSG = 10,
-	IORING_OP_TIMEOUT = 11,
-	IORING_OP_TIMEOUT_REMOVE = 12,
-	IORING_OP_ACCEPT = 13,
-	IORING_OP_ASYNC_CANCEL = 14,
-	IORING_OP_LINK_TIMEOUT = 15,
-	IORING_OP_CONNECT = 16,
-	IORING_OP_FALLOCATE = 17,
-	IORING_OP_OPENAT = 18,
-	IORING_OP_CLOSE = 19,
-	IORING_OP_FILES_UPDATE = 20,
-	IORING_OP_STATX = 21,
-	IORING_OP_READ = 22,
-	IORING_OP_WRITE = 23,
-	IORING_OP_FADVISE = 24,
-	IORING_OP_MADVISE = 25,
-	IORING_OP_SEND = 26,
-	IORING_OP_RECV = 27,
-	IORING_OP_OPENAT2 = 28,
-	IORING_OP_EPOLL_CTL = 29,
-	IORING_OP_SPLICE = 30,
-	IORING_OP_PROVIDE_BUFFERS = 31,
-	IORING_OP_REMOVE_BUFFERS = 32,
-	IORING_OP_TEE = 33,
-	IORING_OP_LAST = 34,
-};
-
-struct io_uring_cqe {
-	__u64 user_data;
-	__s32 res;
-	__u32 flags;
-};
-
-enum {
-	IORING_CQE_BUFFER_SHIFT = 16,
-};
-
-struct io_sqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 flags;
-	__u32 dropped;
-	__u32 array;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_cqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 overflow;
-	__u32 cqes;
-	__u32 flags;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_uring_params {
-	__u32 sq_entries;
-	__u32 cq_entries;
-	__u32 flags;
-	__u32 sq_thread_cpu;
-	__u32 sq_thread_idle;
-	__u32 features;
-	__u32 wq_fd;
-	__u32 resv[3];
-	struct io_sqring_offsets sq_off;
-	struct io_cqring_offsets cq_off;
-};
-
-enum {
-	IORING_REGISTER_BUFFERS = 0,
-	IORING_UNREGISTER_BUFFERS = 1,
-	IORING_REGISTER_FILES = 2,
-	IORING_UNREGISTER_FILES = 3,
-	IORING_REGISTER_EVENTFD = 4,
-	IORING_UNREGISTER_EVENTFD = 5,
-	IORING_REGISTER_FILES_UPDATE = 6,
-	IORING_REGISTER_EVENTFD_ASYNC = 7,
-	IORING_REGISTER_PROBE = 8,
-	IORING_REGISTER_PERSONALITY = 9,
-	IORING_UNREGISTER_PERSONALITY = 10,
-	IORING_REGISTER_RESTRICTIONS = 11,
-	IORING_REGISTER_ENABLE_RINGS = 12,
-	IORING_REGISTER_LAST = 13,
-};
-
-struct io_uring_files_update {
-	__u32 offset;
-	__u32 resv;
-	__u64 fds;
-};
-
-struct io_uring_probe_op {
-	__u8 op;
-	__u8 resv;
-	__u16 flags;
-	__u32 resv2;
-};
-
-struct io_uring_probe {
-	__u8 last_op;
-	__u8 ops_len;
-	__u16 resv;
-	__u32 resv2[3];
-	struct io_uring_probe_op ops[0];
-};
-
-struct io_uring_restriction {
-	__u16 opcode;
-	union {
-		__u8 register_op;
-		__u8 sqe_op;
-		__u8 sqe_flags;
-	};
-	__u8 resv;
-	__u32 resv2[3];
-};
-
-enum {
-	IORING_RESTRICTION_REGISTER_OP = 0,
-	IORING_RESTRICTION_SQE_OP = 1,
-	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
-	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
-	IORING_RESTRICTION_LAST = 4,
-};
-
-enum {
-	IO_WQ_WORK_CANCEL = 1,
-	IO_WQ_WORK_HASHED = 2,
-	IO_WQ_WORK_UNBOUND = 4,
-	IO_WQ_WORK_NO_CANCEL = 8,
-	IO_WQ_WORK_CONCURRENT = 16,
-	IO_WQ_WORK_FILES = 32,
-	IO_WQ_WORK_FS = 64,
-	IO_WQ_WORK_MM = 128,
-	IO_WQ_WORK_CREDS = 256,
-	IO_WQ_WORK_BLKCG = 512,
-	IO_WQ_WORK_FSIZE = 1024,
-	IO_WQ_HASH_SHIFT = 24,
-};
-
-enum io_wq_cancel {
-	IO_WQ_CANCEL_OK = 0,
-	IO_WQ_CANCEL_RUNNING = 1,
-	IO_WQ_CANCEL_NOTFOUND = 2,
-};
-
-typedef void free_work_fn(struct io_wq_work *);
-
-typedef struct io_wq_work *io_wq_work_fn(struct io_wq_work *);
-
-struct io_wq_data {
-	struct user_struct *user;
-	io_wq_work_fn *do_work;
-	free_work_fn *free_work;
-};
-
-struct io_uring {
-	u32 head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 tail;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_rings {
-	struct io_uring sq;
-	struct io_uring cq;
-	u32 sq_ring_mask;
-	u32 cq_ring_mask;
-	u32 sq_ring_entries;
-	u32 cq_ring_entries;
-	u32 sq_dropped;
-	u32 sq_flags;
-	u32 cq_flags;
-	u32 cq_overflow;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct io_uring_cqe cqes[0];
-};
-
-struct io_mapped_ubuf {
-	u64 ubuf;
-	size_t len;
-	struct bio_vec *bvec;
-	unsigned int nr_bvecs;
-	long unsigned int acct_pages;
-};
-
-struct fixed_file_table {
-	struct file **files;
-};
-
-struct fixed_file_data;
-
-struct fixed_file_ref_node {
-	struct percpu_ref refs;
-	struct list_head node;
-	struct list_head file_list;
-	struct fixed_file_data *file_data;
-	struct llist_node llist;
-	bool done;
-};
-
-struct io_ring_ctx;
-
-struct fixed_file_data {
-	struct fixed_file_table *table;
-	struct io_ring_ctx *ctx;
-	struct fixed_file_ref_node *node;
-	struct percpu_ref refs;
-	struct completion done;
-	struct list_head ref_list;
-	spinlock_t lock;
-};
-
-struct io_wq;
-
-struct io_restriction {
-	long unsigned int register_op[1];
-	long unsigned int sqe_op[1];
-	u8 sqe_flags_allowed;
-	u8 sqe_flags_required;
-	bool registered;
-};
-
-struct io_sq_data;
-
-struct io_kiocb;
-
-struct io_ring_ctx {
-	struct {
-		struct percpu_ref refs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		unsigned int flags;
-		unsigned int compat: 1;
-		unsigned int limit_mem: 1;
-		unsigned int cq_overflow_flushed: 1;
-		unsigned int drain_next: 1;
-		unsigned int eventfd_async: 1;
-		unsigned int restricted: 1;
-		unsigned int sqo_dead: 1;
-		u32 *sq_array;
-		unsigned int cached_sq_head;
-		unsigned int sq_entries;
-		unsigned int sq_mask;
-		unsigned int sq_thread_idle;
-		unsigned int cached_sq_dropped;
-		unsigned int cached_cq_overflow;
-		long unsigned int sq_check_overflow;
-		struct list_head defer_list;
-		struct list_head timeout_list;
-		struct list_head cq_overflow_list;
-		wait_queue_head_t inflight_wait;
-		struct io_uring_sqe *sq_sqes;
-	};
-	struct io_rings *rings;
-	struct io_wq *io_wq;
-	struct task_struct *sqo_task;
-	struct mm_struct *mm_account;
-	struct cgroup_subsys_state *sqo_blkcg_css;
-	struct io_sq_data *sq_data;
-	struct wait_queue_head sqo_sq_wait;
-	struct wait_queue_entry sqo_wait_entry;
-	struct list_head sqd_list;
-	struct fixed_file_data *file_data;
-	unsigned int nr_user_files;
-	unsigned int nr_user_bufs;
-	struct io_mapped_ubuf *user_bufs;
-	struct user_struct *user;
-	const struct cred *creds;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct completion ref_comp;
-	struct completion sq_thread_comp;
-	struct io_kiocb *fallback_req;
-	struct socket *ring_sock;
-	struct idr io_buffer_idr;
-	struct idr personality_idr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct {
-		unsigned int cached_cq_tail;
-		unsigned int cq_entries;
-		unsigned int cq_mask;
-		atomic_t cq_timeouts;
-		unsigned int cq_last_tm_flush;
-		long unsigned int cq_check_overflow;
-		struct wait_queue_head cq_wait;
-		struct fasync_struct *cq_fasync;
-		struct eventfd_ctx *cq_ev_fd;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex uring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		spinlock_t completion_lock;
-		struct list_head iopoll_list;
-		struct hlist_head *cancel_hash;
-		unsigned int cancel_hash_bits;
-		bool poll_multi_file;
-		spinlock_t inflight_lock;
-		struct list_head inflight_list;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct delayed_work file_put_work;
-	struct llist_head file_put_llist;
-	struct work_struct exit_work;
-	struct io_restriction restrictions;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_buffer {
-	struct list_head list;
-	__u64 addr;
-	__s32 len;
-	__u16 bid;
-};
-
-struct io_sq_data {
-	refcount_t refs;
-	struct mutex lock;
-	struct list_head ctx_list;
-	struct list_head ctx_new_list;
-	struct mutex ctx_lock;
-	struct task_struct *thread;
-	struct wait_queue_head wait;
-};
-
-struct io_rw {
-	struct kiocb kiocb;
-	u64 addr;
-	u64 len;
-};
-
-struct io_poll_iocb {
-	struct file *file;
-	union {
-		struct wait_queue_head *head;
-		u64 addr;
-	};
-	__poll_t events;
-	bool done;
-	bool canceled;
-	struct wait_queue_entry wait;
-};
-
-struct io_accept {
-	struct file *file;
-	struct sockaddr *addr;
-	int *addr_len;
-	int flags;
-	long unsigned int nofile;
-};
-
-struct io_sync {
-	struct file *file;
-	loff_t len;
-	loff_t off;
-	int flags;
-	int mode;
-};
-
-struct io_cancel {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_timeout {
-	struct file *file;
-	u32 off;
-	u32 target_seq;
-	struct list_head list;
-};
-
-struct io_timeout_rem {
-	struct file *file;
-	u64 addr;
-};
-
-struct io_connect {
-	struct file *file;
-	struct sockaddr *addr;
-	int addr_len;
-};
-
-struct io_sr_msg {
-	struct file *file;
-	union {
-		struct user_msghdr *umsg;
-		void *buf;
-	};
-	int msg_flags;
-	int bgid;
-	size_t len;
-	struct io_buffer *kbuf;
-};
-
-struct io_open {
-	struct file *file;
-	int dfd;
-	bool ignore_nonblock;
-	struct filename *filename;
-	struct open_how how;
-	long unsigned int nofile;
-};
-
-struct io_close {
-	struct file *file;
-	struct file *put_file;
-	int fd;
-};
-
-struct io_files_update {
-	struct file *file;
-	u64 arg;
-	u32 nr_args;
-	u32 offset;
-};
-
-struct io_fadvise {
-	struct file *file;
-	u64 offset;
-	u32 len;
-	u32 advice;
-};
-
-struct io_madvise {
-	struct file *file;
-	u64 addr;
-	u32 len;
-	u32 advice;
-};
-
-struct io_epoll {
-	struct file *file;
-	int epfd;
-	int op;
-	int fd;
-	struct epoll_event event;
-};
-
-struct io_splice {
-	struct file *file_out;
-	struct file *file_in;
-	loff_t off_out;
-	loff_t off_in;
-	u64 len;
-	unsigned int flags;
-};
-
-struct io_provide_buf {
-	struct file *file;
-	__u64 addr;
-	__s32 len;
-	__u32 bgid;
-	__u16 nbufs;
-	__u16 bid;
-};
-
-struct io_statx {
-	struct file *file;
-	int dfd;
-	unsigned int mask;
-	unsigned int flags;
-	const char *filename;
-	struct statx *buffer;
-};
-
-struct io_completion {
-	struct file *file;
-	struct list_head list;
-	int cflags;
-};
-
-struct async_poll;
-
-struct io_kiocb {
-	union {
-		struct file *file;
-		struct io_rw rw;
-		struct io_poll_iocb poll;
-		struct io_accept accept;
-		struct io_sync sync;
-		struct io_cancel cancel;
-		struct io_timeout timeout;
-		struct io_timeout_rem timeout_rem;
-		struct io_connect connect;
-		struct io_sr_msg sr_msg;
-		struct io_open open;
-		struct io_close close;
-		struct io_files_update files_update;
-		struct io_fadvise fadvise;
-		struct io_madvise madvise;
-		struct io_epoll epoll;
-		struct io_splice splice;
-		struct io_provide_buf pbuf;
-		struct io_statx statx;
-		struct io_completion compl;
-	};
-	void *async_data;
-	u8 opcode;
-	u8 iopoll_completed;
-	u16 buf_index;
-	u32 result;
-	struct io_ring_ctx *ctx;
-	unsigned int flags;
-	refcount_t refs;
-	struct task_struct *task;
-	u64 user_data;
-	struct list_head link_list;
-	struct list_head inflight_entry;
-	struct percpu_ref *fixed_file_refs;
-	struct callback_head task_work;
-	struct hlist_node hash_node;
-	struct async_poll *apoll;
-	struct io_wq_work work;
-};
-
-struct io_timeout_data {
-	struct io_kiocb *req;
-	struct hrtimer timer;
-	struct timespec64 ts;
-	enum hrtimer_mode mode;
-};
-
-struct io_async_connect {
-	struct __kernel_sockaddr_storage address;
-};
-
-struct io_async_msghdr {
-	struct iovec fast_iov[8];
-	struct iovec *iov;
-	struct sockaddr *uaddr;
-	struct msghdr msg;
-	struct __kernel_sockaddr_storage addr;
-};
-
-struct io_async_rw {
-	struct iovec fast_iov[8];
-	const struct iovec *free_iovec;
-	struct iov_iter iter;
-	size_t bytes_done;
-	struct wait_page_queue wpq;
-};
-
-enum {
-	REQ_F_FIXED_FILE_BIT = 0,
-	REQ_F_IO_DRAIN_BIT = 1,
-	REQ_F_LINK_BIT = 2,
-	REQ_F_HARDLINK_BIT = 3,
-	REQ_F_FORCE_ASYNC_BIT = 4,
-	REQ_F_BUFFER_SELECT_BIT = 5,
-	REQ_F_LINK_HEAD_BIT = 6,
-	REQ_F_FAIL_LINK_BIT = 7,
-	REQ_F_INFLIGHT_BIT = 8,
-	REQ_F_CUR_POS_BIT = 9,
-	REQ_F_NOWAIT_BIT = 10,
-	REQ_F_LINK_TIMEOUT_BIT = 11,
-	REQ_F_ISREG_BIT = 12,
-	REQ_F_NEED_CLEANUP_BIT = 13,
-	REQ_F_POLLED_BIT = 14,
-	REQ_F_BUFFER_SELECTED_BIT = 15,
-	REQ_F_NO_FILE_TABLE_BIT = 16,
-	REQ_F_WORK_INITIALIZED_BIT = 17,
-	REQ_F_LTIMEOUT_ACTIVE_BIT = 18,
-	__REQ_F_LAST_BIT = 19,
-};
-
-enum {
-	REQ_F_FIXED_FILE = 1,
-	REQ_F_IO_DRAIN = 2,
-	REQ_F_LINK = 4,
-	REQ_F_HARDLINK = 8,
-	REQ_F_FORCE_ASYNC = 16,
-	REQ_F_BUFFER_SELECT = 32,
-	REQ_F_LINK_HEAD = 64,
-	REQ_F_FAIL_LINK = 128,
-	REQ_F_INFLIGHT = 256,
-	REQ_F_CUR_POS = 512,
-	REQ_F_NOWAIT = 1024,
-	REQ_F_LINK_TIMEOUT = 2048,
-	REQ_F_ISREG = 4096,
-	REQ_F_NEED_CLEANUP = 8192,
-	REQ_F_POLLED = 16384,
-	REQ_F_BUFFER_SELECTED = 32768,
-	REQ_F_NO_FILE_TABLE = 65536,
-	REQ_F_WORK_INITIALIZED = 131072,
-	REQ_F_LTIMEOUT_ACTIVE = 262144,
-};
-
-struct async_poll {
-	struct io_poll_iocb poll;
-	struct io_poll_iocb *double_poll;
-};
-
-struct io_defer_entry {
-	struct list_head list;
-	struct io_kiocb *req;
-	u32 seq;
-};
-
-struct io_comp_state {
-	unsigned int nr;
-	struct list_head list;
-	struct io_ring_ctx *ctx;
-};
-
-struct io_submit_state {
-	struct blk_plug plug;
-	void *reqs[8];
-	unsigned int free_reqs;
-	struct io_comp_state comp;
-	struct file *file;
-	unsigned int fd;
-	unsigned int has_refs;
-	unsigned int ios_left;
-};
-
-struct io_op_def {
-	unsigned int needs_file: 1;
-	unsigned int needs_file_no_error: 1;
-	unsigned int hash_reg_file: 1;
-	unsigned int unbound_nonreg_file: 1;
-	unsigned int not_supported: 1;
-	unsigned int pollin: 1;
-	unsigned int pollout: 1;
-	unsigned int buffer_select: 1;
-	unsigned int needs_async_data: 1;
-	short unsigned int async_size;
-	unsigned int work_flags;
-};
-
-enum io_mem_account {
-	ACCT_LOCKED = 0,
-	ACCT_PINNED = 1,
-};
-
-struct req_batch {
-	void *reqs[8];
-	int to_free;
-	struct task_struct *task;
-	int task_refs;
-};
-
-struct io_poll_table {
-	struct poll_table_struct pt;
-	struct io_kiocb *req;
-	int error;
-};
-
-enum sq_ret {
-	SQT_IDLE = 1,
-	SQT_SPIN = 2,
-	SQT_DID_WORK = 4,
-};
-
-struct io_wait_queue {
-	struct wait_queue_entry wq;
-	struct io_ring_ctx *ctx;
-	unsigned int to_wait;
-	unsigned int nr_timeouts;
-};
-
-struct io_file_put {
-	struct list_head list;
-	struct file *file;
-};
-
-struct io_wq_work_list {
-	struct io_wq_work_node *first;
-	struct io_wq_work_node *last;
-};
-
-typedef bool work_cancel_fn(struct io_wq_work *, void *);
-
-enum {
-	IO_WORKER_F_UP = 1,
-	IO_WORKER_F_RUNNING = 2,
-	IO_WORKER_F_FREE = 4,
-	IO_WORKER_F_FIXED = 8,
-	IO_WORKER_F_BOUND = 16,
-};
-
-enum {
-	IO_WQ_BIT_EXIT = 0,
-	IO_WQ_BIT_CANCEL = 1,
-	IO_WQ_BIT_ERROR = 2,
-};
-
-enum {
-	IO_WQE_FLAG_STALLED = 1,
-};
-
-struct io_wqe;
-
-struct io_worker {
-	refcount_t ref;
-	unsigned int flags;
-	struct hlist_nulls_node nulls_node;
-	struct list_head all_list;
-	struct task_struct *task;
-	struct io_wqe *wqe;
-	struct io_wq_work *cur_work;
-	spinlock_t lock;
-	struct callback_head rcu;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *cur_creds;
-	const struct cred *saved_creds;
-	struct files_struct *restore_files;
-	struct nsproxy *restore_nsproxy;
-	struct fs_struct *restore_fs;
-};
-
-struct io_wqe_acct {
-	unsigned int nr_workers;
-	unsigned int max_workers;
-	atomic_t nr_running;
-};
-
-struct io_wq___2;
-
-struct io_wqe {
-	struct {
-		raw_spinlock_t lock;
-		struct io_wq_work_list work_list;
-		long unsigned int hash_map;
-		unsigned int flags;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	int node;
-	struct io_wqe_acct acct[2];
-	struct hlist_nulls_head free_list;
-	struct list_head all_list;
-	struct io_wq___2 *wq;
-	struct io_wq_work *hash_tail[64];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	IO_WQ_ACCT_BOUND = 0,
-	IO_WQ_ACCT_UNBOUND = 1,
-};
-
-struct io_wq___2 {
-	struct io_wqe **wqes;
-	long unsigned int state;
-	free_work_fn *free_work;
-	io_wq_work_fn *do_work;
-	struct task_struct *manager;
-	struct user_struct *user;
-	refcount_t refs;
-	struct completion done;
-	struct hlist_node cpuhp_node;
-	refcount_t use_refs;
-};
-
-struct io_cb_cancel_data {
-	work_cancel_fn *fn;
-	void *data;
-	int nr_running;
-	int nr_pending;
-	bool cancel_all;
-};
-
-struct iomap_ops {
-	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap___2 *, struct iomap___2 *);
-	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap___2 *);
-};
-
-struct trace_event_raw_dax_pmd_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	long unsigned int max_pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_load_hole_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	struct page *zero_page;
-	void *radix_entry;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pmd_insert_mapping_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long int length;
-	u64 pfn_val;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_pte_fault_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	long unsigned int pgoff;
-	dev_t dev;
-	unsigned int flags;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_insert_mapping {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int vm_flags;
-	long unsigned int address;
-	void *radix_entry;
-	dev_t dev;
-	int write;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_range_class {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int start_index;
-	long unsigned int end_index;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_raw_dax_writeback_one {
-	struct trace_entry ent;
-	long unsigned int ino;
-	long unsigned int pgoff;
-	long unsigned int pglen;
-	dev_t dev;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dax_pmd_fault_class {};
-
-struct trace_event_data_offsets_dax_pmd_load_hole_class {};
-
-struct trace_event_data_offsets_dax_pmd_insert_mapping_class {};
-
-struct trace_event_data_offsets_dax_pte_fault_class {};
-
-struct trace_event_data_offsets_dax_insert_mapping {};
-
-struct trace_event_data_offsets_dax_writeback_range_class {};
-
-struct trace_event_data_offsets_dax_writeback_one {};
-
-typedef void (*btf_trace_dax_pmd_fault)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_fault_done)(void *, struct inode *, struct vm_fault *, long unsigned int, int);
-
-typedef void (*btf_trace_dax_pmd_load_hole)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_load_hole_fallback)(void *, struct inode *, struct vm_fault *, struct page *, void *);
-
-typedef void (*btf_trace_dax_pmd_insert_mapping)(void *, struct inode *, struct vm_fault *, long int, pfn_t, void *);
-
-typedef void (*btf_trace_dax_pte_fault)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_pte_fault_done)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_load_hole)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite_no_entry)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_pfn_mkwrite)(void *, struct inode *, struct vm_fault *, int);
-
-typedef void (*btf_trace_dax_insert_mapping)(void *, struct inode *, struct vm_fault *, void *);
-
-typedef void (*btf_trace_dax_writeback_range)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_range_done)(void *, struct inode *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_dax_writeback_one)(void *, struct inode *, long unsigned int, long unsigned int);
-
-struct exceptional_entry_key {
-	struct xarray *xa;
-	long unsigned int entry_start;
-};
-
-struct wait_exceptional_entry_queue {
-	wait_queue_entry_t wait;
-	struct exceptional_entry_key key;
-};
-
-struct crypto_skcipher;
-
-struct fscrypt_blk_crypto_key;
-
-struct fscrypt_prepared_key {
-	struct crypto_skcipher *tfm;
-	struct fscrypt_blk_crypto_key *blk_key;
-};
-
-struct fscrypt_mode;
-
-struct fscrypt_direct_key;
-
-struct fscrypt_info {
-	struct fscrypt_prepared_key ci_enc_key;
-	bool ci_owns_key;
-	bool ci_inlinecrypt;
-	struct fscrypt_mode *ci_mode;
-	struct inode *ci_inode;
-	struct key *ci_master_key;
-	struct list_head ci_master_key_link;
-	struct fscrypt_direct_key *ci_direct_key;
-	siphash_key_t ci_dirhash_key;
-	bool ci_dirhash_key_initialized;
-	union fscrypt_policy ci_policy;
-	u8 ci_nonce[16];
-	u32 ci_hashed_ino;
-};
-
-struct crypto_async_request;
-
-typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
-
-struct crypto_async_request {
-	struct list_head list;
-	crypto_completion_t complete;
-	void *data;
-	struct crypto_tfm *tfm;
-	u32 flags;
-};
-
-struct crypto_wait {
-	struct completion completion;
-	int err;
-};
-
-struct skcipher_request {
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	struct crypto_async_request base;
-	void *__ctx[0];
-};
-
-struct crypto_skcipher {
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct fscrypt_mode {
-	const char *friendly_name;
-	const char *cipher_str;
-	int keysize;
-	int ivsize;
-	int logged_impl_name;
-	enum blk_crypto_mode_num blk_crypto_mode;
-};
-
-typedef enum {
-	FS_DECRYPT = 0,
-	FS_ENCRYPT = 1,
-} fscrypt_direction_t;
-
-union fscrypt_iv {
-	struct {
-		__le64 lblk_num;
-		u8 nonce[16];
-	};
-	u8 raw[32];
-	__le64 dun[4];
-};
-
-struct fscrypt_str {
-	unsigned char *name;
-	u32 len;
-};
-
-struct fscrypt_name {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	u32 hash;
-	u32 minor_hash;
-	struct fscrypt_str crypto_buf;
-	bool is_nokey_name;
-};
-
-struct fscrypt_nokey_name {
-	u32 dirhash[2];
-	u8 bytes[149];
-	u8 sha256[32];
-};
-
-struct fscrypt_hkdf {
-	struct crypto_shash *hmac_tfm;
-};
-
-struct fscrypt_key_specifier {
-	__u32 type;
-	__u32 __reserved;
-	union {
-		__u8 __reserved[32];
-		__u8 descriptor[8];
-		__u8 identifier[16];
-	} u;
-};
-
-struct fscrypt_symlink_data {
-	__le16 len;
-	char encrypted_path[1];
-} __attribute__((packed));
-
-struct fscrypt_master_key_secret {
-	struct fscrypt_hkdf hkdf;
-	u32 size;
-	u8 raw[64];
-};
-
-struct fscrypt_master_key {
-	struct fscrypt_master_key_secret mk_secret;
-	struct rw_semaphore mk_secret_sem;
-	struct fscrypt_key_specifier mk_spec;
-	struct key *mk_users;
-	refcount_t mk_refcount;
-	struct list_head mk_decrypted_inodes;
-	spinlock_t mk_decrypted_inodes_lock;
-	struct fscrypt_prepared_key mk_direct_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[10];
-	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[10];
-	siphash_key_t mk_ino_hash_key;
-	bool mk_ino_hash_key_initialized;
-};
-
-enum key_state {
-	KEY_IS_UNINSTANTIATED = 0,
-	KEY_IS_POSITIVE = 1,
-};
-
-struct fscrypt_provisioning_key_payload {
-	__u32 type;
-	__u32 __reserved;
-	__u8 raw[0];
-};
-
-struct fscrypt_add_key_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 raw_size;
-	__u32 key_id;
-	__u32 __reserved[8];
-	__u8 raw[0];
-};
-
-struct fscrypt_remove_key_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 removal_status_flags;
-	__u32 __reserved[5];
-};
-
-struct fscrypt_get_key_status_arg {
-	struct fscrypt_key_specifier key_spec;
-	__u32 __reserved[6];
-	__u32 status;
-	__u32 status_flags;
-	__u32 user_count;
-	__u32 __out_reserved[13];
-};
-
-struct skcipher_alg {
-	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
-	int (*encrypt)(struct skcipher_request *);
-	int (*decrypt)(struct skcipher_request *);
-	int (*init)(struct crypto_skcipher *);
-	void (*exit)(struct crypto_skcipher *);
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-	unsigned int chunksize;
-	unsigned int walksize;
-	struct crypto_alg base;
-};
-
-struct fscrypt_context_v1 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 master_key_descriptor[8];
-	u8 nonce[16];
-};
-
-struct fscrypt_context_v2 {
-	u8 version;
-	u8 contents_encryption_mode;
-	u8 filenames_encryption_mode;
-	u8 flags;
-	u8 __reserved[4];
-	u8 master_key_identifier[16];
-	u8 nonce[16];
-};
-
-union fscrypt_context {
-	u8 version;
-	struct fscrypt_context_v1 v1;
-	struct fscrypt_context_v2 v2;
-};
-
-struct crypto_template;
-
-struct crypto_spawn;
-
-struct crypto_instance {
-	struct crypto_alg alg;
-	struct crypto_template *tmpl;
-	union {
-		struct hlist_node list;
-		struct crypto_spawn *spawns;
-	};
-	void *__ctx[0];
-};
-
-struct crypto_spawn {
-	struct list_head list;
-	struct crypto_alg *alg;
-	union {
-		struct crypto_instance *inst;
-		struct crypto_spawn *next;
-	};
-	const struct crypto_type *frontend;
-	u32 mask;
-	bool dead;
-	bool registered;
-};
-
-struct rtattr;
-
-struct crypto_template {
-	struct list_head list;
-	struct hlist_head instances;
-	struct module *module;
-	int (*create)(struct crypto_template *, struct rtattr **);
-	char name[128];
-};
-
-struct user_key_payload {
-	struct callback_head rcu;
-	short unsigned int datalen;
-	long: 48;
-	char data[0];
-};
-
-struct fscrypt_key {
-	__u32 mode;
-	__u8 raw[64];
-	__u32 size;
-};
-
-struct fscrypt_direct_key {
-	struct hlist_node dk_node;
-	refcount_t dk_refcount;
-	const struct fscrypt_mode *dk_mode;
-	struct fscrypt_prepared_key dk_key;
-	u8 dk_descriptor[8];
-	u8 dk_raw[64];
-};
-
-struct fscrypt_get_policy_ex_arg {
-	__u64 policy_size;
-	union {
-		__u8 version;
-		struct fscrypt_policy_v1 v1;
-		struct fscrypt_policy_v2 v2;
-	} policy;
-};
-
-struct fscrypt_dummy_policy {
-	const union fscrypt_policy *policy;
-};
-
-struct fscrypt_blk_crypto_key {
-	struct blk_crypto_key base;
-	int num_devs;
-	struct request_queue *devs[0];
-};
-
-struct fsverity_hash_alg;
-
-struct merkle_tree_params {
-	struct fsverity_hash_alg *hash_alg;
-	const u8 *hashstate;
-	unsigned int digest_size;
-	unsigned int block_size;
-	unsigned int hashes_per_block;
-	unsigned int log_blocksize;
-	unsigned int log_arity;
-	unsigned int num_levels;
-	u64 tree_size;
-	long unsigned int level0_blocks;
-	u64 level_start[8];
-};
-
-struct fsverity_info {
-	struct merkle_tree_params tree_params;
-	u8 root_hash[64];
-	u8 measurement[64];
-	const struct inode *inode;
-};
-
-struct fsverity_enable_arg {
-	__u32 version;
-	__u32 hash_algorithm;
-	__u32 block_size;
-	__u32 salt_size;
-	__u64 salt_ptr;
-	__u32 sig_size;
-	__u32 __reserved1;
-	__u64 sig_ptr;
-	__u64 __reserved2[11];
-};
-
-struct crypto_ahash;
-
-struct fsverity_hash_alg {
-	struct crypto_ahash *tfm;
-	const char *name;
-	unsigned int digest_size;
-	unsigned int block_size;
-	mempool_t req_pool;
-};
-
-struct ahash_request;
-
-struct crypto_ahash {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct fsverity_descriptor {
-	__u8 version;
-	__u8 hash_algorithm;
-	__u8 log_blocksize;
-	__u8 salt_size;
-	__le32 sig_size;
-	__le64 data_size;
-	__u8 root_hash[64];
-	__u8 salt[32];
-	__u8 __reserved[144];
-	__u8 signature[0];
-};
-
-struct ahash_request {
-	struct crypto_async_request base;
-	unsigned int nbytes;
-	struct scatterlist *src;
-	u8 *result;
-	void *priv;
-	void *__ctx[0];
-};
-
-struct hash_alg_common {
-	unsigned int digestsize;
-	unsigned int statesize;
-	struct crypto_alg base;
-};
-
-struct fsverity_digest {
-	__u16 digest_algorithm;
-	__u16 digest_size;
-	__u8 digest[0];
-};
-
-struct flock64 {
-	short int l_type;
-	short int l_whence;
-	__kernel_loff_t l_start;
-	__kernel_loff_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct trace_event_raw_locks_get_lock_context {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	unsigned char type;
-	struct file_lock_context *ctx;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lock {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_pid;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	loff_t fl_start;
-	loff_t fl_end;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lease {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	char __data[0];
-};
-
-struct trace_event_raw_generic_add_lease {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	int wcount;
-	int rcount;
-	int icount;
-	dev_t s_dev;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	char __data[0];
-};
-
-struct trace_event_raw_leases_conflict {
-	struct trace_entry ent;
-	void *lease;
-	void *breaker;
-	unsigned int l_fl_flags;
-	unsigned int b_fl_flags;
-	unsigned char l_fl_type;
-	unsigned char b_fl_type;
-	bool conflict;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_locks_get_lock_context {};
-
-struct trace_event_data_offsets_filelock_lock {};
-
-struct trace_event_data_offsets_filelock_lease {};
-
-struct trace_event_data_offsets_generic_add_lease {};
-
-struct trace_event_data_offsets_leases_conflict {};
-
-typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
-
-typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
-
-typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
-
-typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
-
-struct file_lock_list_struct {
-	spinlock_t lock;
-	struct hlist_head hlist;
-};
-
-struct locks_iterator {
-	int li_cpu;
-	loff_t li_pos;
-};
-
-typedef unsigned int __kernel_uid_t;
-
-typedef unsigned int __kernel_gid_t;
-
-struct elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	long unsigned int pr_flag;
-	__kernel_uid_t pr_uid;
-	__kernel_gid_t pr_gid;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct core_vma_metadata {
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int flags;
-	long unsigned int dump_size;
-};
-
-struct arch_elf_state {};
-
-struct memelfnote {
-	const char *name;
-	int type;
-	unsigned int datasz;
-	void *data;
-};
-
-struct elf_thread_core_info {
-	struct elf_thread_core_info *next;
-	struct task_struct *task;
-	struct elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info {
-	struct elf_thread_core_info *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-typedef elf_gregset_t32 compat_elf_gregset_t;
-
-typedef u32 __compat_uid_t;
-
-typedef u32 __compat_gid_t;
-
-struct compat_elf_siginfo {
-	compat_int_t si_signo;
-	compat_int_t si_code;
-	compat_int_t si_errno;
-};
-
-struct compat_elf_prstatus {
-	struct compat_elf_siginfo pr_info;
-	short int pr_cursig;
-	compat_ulong_t pr_sigpend;
-	compat_ulong_t pr_sighold;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	struct old_timeval32 pr_utime;
-	struct old_timeval32 pr_stime;
-	struct old_timeval32 pr_cutime;
-	struct old_timeval32 pr_cstime;
-	compat_elf_gregset_t pr_reg;
-	compat_int_t pr_fpvalid;
-};
-
-struct compat_elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	compat_ulong_t pr_flag;
-	__compat_uid_t pr_uid;
-	__compat_gid_t pr_gid;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct elf_thread_core_info___2 {
-	struct elf_thread_core_info___2 *next;
-	struct task_struct *task;
-	struct compat_elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info___2 {
-	struct elf_thread_core_info___2 *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	compat_siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct mb_cache_entry {
-	struct list_head e_list;
-	struct hlist_bl_node e_hash_list;
-	atomic_t e_refcnt;
-	u32 e_key;
-	u32 e_referenced: 1;
-	u32 e_reusable: 1;
-	u64 e_value;
-};
-
-struct mb_cache {
-	struct hlist_bl_head *c_hash;
-	int c_bucket_bits;
-	long unsigned int c_max_entries;
-	spinlock_t c_list_lock;
-	struct list_head c_list;
-	long unsigned int c_entry_count;
-	struct shrinker c_shrink;
-	struct work_struct c_shrink_work;
-};
-
-struct posix_acl_xattr_entry {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-};
-
-struct posix_acl_xattr_header {
-	__le32 a_version;
-};
-
-struct core_name {
-	char *corename;
-	int used;
-	int size;
-};
-
-struct trace_event_raw_iomap_readpage_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	int nr_pages;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_range_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t size;
-	long unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	dev_t bdev;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_apply {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t pos;
-	loff_t length;
-	unsigned int flags;
-	const void *ops;
-	void *actor;
-	long unsigned int caller;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iomap_readpage_class {};
-
-struct trace_event_data_offsets_iomap_range_class {};
-
-struct trace_event_data_offsets_iomap_class {};
-
-struct trace_event_data_offsets_iomap_apply {};
-
-typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
-
-typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_releasepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply)(void *, struct inode *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);
-
-typedef loff_t (*iomap_actor_t)(struct inode *, loff_t, loff_t, void *, struct iomap___2 *, struct iomap___2 *);
-
-struct iomap_ioend {
-	struct list_head io_list;
-	u16 io_type;
-	u16 io_flags;
-	struct inode *io_inode;
-	size_t io_size;
-	loff_t io_offset;
-	void *io_private;
-	struct bio *io_bio;
-	struct bio io_inline_bio;
-};
-
-struct iomap_writepage_ctx;
-
-struct iomap_writeback_ops {
-	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
-	int (*prepare_ioend)(struct iomap_ioend *, int);
-	void (*discard_page)(struct page *, loff_t);
-};
-
-struct iomap_writepage_ctx {
-	struct iomap___2 iomap;
-	struct iomap_ioend *ioend;
-	const struct iomap_writeback_ops *ops;
-};
-
-struct iomap_page {
-	atomic_t read_bytes_pending;
-	atomic_t write_bytes_pending;
-	spinlock_t uptodate_lock;
-	long unsigned int uptodate[0];
-};
-
-struct iomap_readpage_ctx {
-	struct page *cur_page;
-	bool cur_page_in_bio;
-	struct bio *bio;
-	struct readahead_control *rac;
-};
-
-enum {
-	IOMAP_WRITE_F_UNSHARE = 1,
-};
-
-struct iomap_dio_ops {
-	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
-	blk_qc_t (*submit_io)(struct inode *, struct iomap___2 *, struct bio *, loff_t);
-};
-
-struct iomap_dio {
-	struct kiocb *iocb;
-	const struct iomap_dio_ops *dops;
-	loff_t i_size;
-	loff_t size;
-	atomic_t ref;
-	unsigned int flags;
-	int error;
-	bool wait_for_completion;
-	union {
-		struct {
-			struct iov_iter *iter;
-			struct task_struct *waiter;
-			struct request_queue *last_queue;
-			blk_qc_t cookie;
-		} submit;
-		struct {
-			struct work_struct work;
-		} aio;
-	};
-};
-
-struct fiemap_ctx {
-	struct fiemap_extent_info *fi;
-	struct iomap___2 prev;
-};
-
-struct iomap_swapfile_info {
-	struct iomap___2 iomap;
-	struct swap_info_struct *sis;
-	uint64_t lowest_ppage;
-	uint64_t highest_ppage;
-	long unsigned int nr_pages;
-	int nr_extents;
-};
-
-enum {
-	QIF_BLIMITS_B = 0,
-	QIF_SPACE_B = 1,
-	QIF_ILIMITS_B = 2,
-	QIF_INODES_B = 3,
-	QIF_BTIME_B = 4,
-	QIF_ITIME_B = 5,
-};
-
-typedef __kernel_uid32_t qid_t;
-
-enum {
-	DQF_INFO_DIRTY_B = 17,
-};
-
-struct dqstats {
-	long unsigned int stat[8];
-	struct percpu_counter counter[8];
-};
-
-enum {
-	_DQUOT_USAGE_ENABLED = 0,
-	_DQUOT_LIMITS_ENABLED = 1,
-	_DQUOT_SUSPENDED = 2,
-	_DQUOT_STATE_FLAGS = 3,
-};
-
-struct quota_module_name {
-	int qm_fmt_id;
-	char *qm_mod_name;
-};
-
-struct dquot_warn {
-	struct super_block *w_sb;
-	struct kqid w_dq_id;
-	short int w_type;
-};
-
-struct fs_disk_quota {
-	__s8 d_version;
-	__s8 d_flags;
-	__u16 d_fieldmask;
-	__u32 d_id;
-	__u64 d_blk_hardlimit;
-	__u64 d_blk_softlimit;
-	__u64 d_ino_hardlimit;
-	__u64 d_ino_softlimit;
-	__u64 d_bcount;
-	__u64 d_icount;
-	__s32 d_itimer;
-	__s32 d_btimer;
-	__u16 d_iwarns;
-	__u16 d_bwarns;
-	__s8 d_itimer_hi;
-	__s8 d_btimer_hi;
-	__s8 d_rtbtimer_hi;
-	__s8 d_padding2;
-	__u64 d_rtb_hardlimit;
-	__u64 d_rtb_softlimit;
-	__u64 d_rtbcount;
-	__s32 d_rtbtimer;
-	__u16 d_rtbwarns;
-	__s16 d_padding3;
-	char d_padding4[8];
-};
-
-struct fs_qfilestat {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-};
-
-typedef struct fs_qfilestat fs_qfilestat_t;
-
-struct fs_quota_stat {
-	__s8 qs_version;
-	__u16 qs_flags;
-	__s8 qs_pad;
-	fs_qfilestat_t qs_uquota;
-	fs_qfilestat_t qs_gquota;
-	__u32 qs_incoredqs;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-};
-
-struct fs_qfilestatv {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-	__u32 qfs_pad;
-};
-
-struct fs_quota_statv {
-	__s8 qs_version;
-	__u8 qs_pad1;
-	__u16 qs_flags;
-	__u32 qs_incoredqs;
-	struct fs_qfilestatv qs_uquota;
-	struct fs_qfilestatv qs_gquota;
-	struct fs_qfilestatv qs_pquota;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-	__u64 qs_pad2[8];
-};
-
-struct if_dqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-};
-
-struct if_nextdqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-	__u32 dqb_id;
-};
-
-struct if_dqinfo {
-	__u64 dqi_bgrace;
-	__u64 dqi_igrace;
-	__u32 dqi_flags;
-	__u32 dqi_valid;
-};
-
-typedef u64 compat_u64;
-
-struct compat_if_dqblk {
-	compat_u64 dqb_bhardlimit;
-	compat_u64 dqb_bsoftlimit;
-	compat_u64 dqb_curspace;
-	compat_u64 dqb_ihardlimit;
-	compat_u64 dqb_isoftlimit;
-	compat_u64 dqb_curinodes;
-	compat_u64 dqb_btime;
-	compat_u64 dqb_itime;
-	compat_uint_t dqb_valid;
-};
-
-enum {
-	QUOTA_NL_C_UNSPEC = 0,
-	QUOTA_NL_C_WARNING = 1,
-	__QUOTA_NL_C_MAX = 2,
-};
-
-enum {
-	QUOTA_NL_A_UNSPEC = 0,
-	QUOTA_NL_A_QTYPE = 1,
-	QUOTA_NL_A_EXCESS_ID = 2,
-	QUOTA_NL_A_WARNING = 3,
-	QUOTA_NL_A_DEV_MAJOR = 4,
-	QUOTA_NL_A_DEV_MINOR = 5,
-	QUOTA_NL_A_CAUSED_ID = 6,
-	QUOTA_NL_A_PAD = 7,
-	__QUOTA_NL_A_MAX = 8,
-};
-
-struct proc_maps_private {
-	struct inode *inode;
-	struct task_struct *task;
-	struct mm_struct *mm;
-	struct vm_area_struct *tail_vma;
-	struct mempolicy *task_mempolicy;
-};
-
-struct mem_size_stats {
-	long unsigned int resident;
-	long unsigned int shared_clean;
-	long unsigned int shared_dirty;
-	long unsigned int private_clean;
-	long unsigned int private_dirty;
-	long unsigned int referenced;
-	long unsigned int anonymous;
-	long unsigned int lazyfree;
-	long unsigned int anonymous_thp;
-	long unsigned int shmem_thp;
-	long unsigned int file_thp;
-	long unsigned int swap;
-	long unsigned int shared_hugetlb;
-	long unsigned int private_hugetlb;
-	u64 pss;
-	u64 pss_anon;
-	u64 pss_file;
-	u64 pss_shmem;
-	u64 pss_locked;
-	u64 swap_pss;
-	bool check_shmem_swap;
-};
-
-enum clear_refs_types {
-	CLEAR_REFS_ALL = 1,
-	CLEAR_REFS_ANON = 2,
-	CLEAR_REFS_MAPPED = 3,
-	CLEAR_REFS_SOFT_DIRTY = 4,
-	CLEAR_REFS_MM_HIWATER_RSS = 5,
-	CLEAR_REFS_LAST = 6,
-};
-
-struct clear_refs_private {
-	enum clear_refs_types type;
-};
-
-typedef struct {
-	u64 pme;
-} pagemap_entry_t;
-
-struct pagemapread {
-	int pos;
-	int len;
-	pagemap_entry_t *buffer;
-	bool show_pfn;
-};
-
-struct numa_maps {
-	long unsigned int pages;
-	long unsigned int anon;
-	long unsigned int active;
-	long unsigned int writeback;
-	long unsigned int mapcount_max;
-	long unsigned int dirty;
-	long unsigned int swapcache;
-	long unsigned int node[256];
-};
-
-struct numa_maps_private {
-	struct proc_maps_private proc_maps;
-	struct numa_maps md;
-};
-
-struct pde_opener {
-	struct list_head lh;
-	struct file *file;
-	bool closing;
-	struct completion *c;
-};
-
-enum {
-	BIAS = 2147483648,
-};
-
-struct proc_fs_context {
-	struct pid_namespace *pid_ns;
-	unsigned int mask;
-	enum proc_hidepid hidepid;
-	int gid;
-	enum proc_pidonly pidonly;
-};
-
-enum proc_param {
-	Opt_gid___2 = 0,
-	Opt_hidepid = 1,
-	Opt_subset = 2,
-};
-
-struct genradix_root;
-
-struct __genradix {
-	struct genradix_root *root;
-};
-
-struct syscall_info {
-	__u64 sp;
-	struct seccomp_data data;
-};
-
-typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
-
-struct pid_entry {
-	const char *name;
-	unsigned int len;
-	umode_t mode;
-	const struct inode_operations *iop;
-	const struct file_operations *fop;
-	union proc_op op;
-};
-
-struct limit_names {
-	const char *name;
-	const char *unit;
-};
-
-struct map_files_info {
-	long unsigned int start;
-	long unsigned int end;
-	fmode_t mode;
-};
-
-struct timers_private {
-	struct pid *pid;
-	struct task_struct *task;
-	struct sighand_struct *sighand;
-	struct pid_namespace *ns;
-	long unsigned int flags;
-};
-
-struct tgid_iter {
-	unsigned int tgid;
-	struct task_struct *task;
-};
-
-struct fd_data {
-	fmode_t mode;
-	unsigned int fd;
-};
-
-struct sysctl_alias {
-	const char *kernel_param;
-	const char *sysctl_param;
-};
-
-struct seq_net_private {
-	struct net *net;
-};
-
-struct bpf_iter_aux_info___2;
-
-enum kcore_type {
-	KCORE_TEXT = 0,
-	KCORE_VMALLOC = 1,
-	KCORE_RAM = 2,
-	KCORE_VMEMMAP = 3,
-	KCORE_USER = 4,
-	KCORE_OTHER = 5,
-	KCORE_REMAP = 6,
-};
-
-struct kcore_list {
-	struct list_head list;
-	long unsigned int addr;
-	long unsigned int vaddr;
-	size_t size;
-	int type;
-};
-
-struct kernfs_iattrs {
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct simple_xattrs xattrs;
-	atomic_t nr_user_xattrs;
-	atomic_t user_xattr_size;
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
 };
 
 struct kernfs_super_info {
@@ -75344,997 +85133,6 @@
 	struct list_head node;
 };
 
-enum kernfs_node_flag {
-	KERNFS_ACTIVATED = 16,
-	KERNFS_NS = 32,
-	KERNFS_HAS_SEQ_SHOW = 64,
-	KERNFS_HAS_MMAP = 128,
-	KERNFS_LOCKDEP = 256,
-	KERNFS_SUICIDAL = 1024,
-	KERNFS_SUICIDED = 2048,
-	KERNFS_EMPTY_DIR = 4096,
-	KERNFS_HAS_RELEASE = 8192,
-};
-
-struct kernfs_open_node {
-	atomic_t refcnt;
-	atomic_t event;
-	wait_queue_head_t poll;
-	struct list_head files;
-};
-
-struct config_group;
-
-struct config_item_type;
-
-struct config_item {
-	char *ci_name;
-	char ci_namebuf[20];
-	struct kref ci_kref;
-	struct list_head ci_entry;
-	struct config_item *ci_parent;
-	struct config_group *ci_group;
-	const struct config_item_type *ci_type;
-	struct dentry *ci_dentry;
-};
-
-struct configfs_subsystem;
-
-struct config_group {
-	struct config_item cg_item;
-	struct list_head cg_children;
-	struct configfs_subsystem *cg_subsys;
-	struct list_head default_groups;
-	struct list_head group_entry;
-};
-
-struct configfs_item_operations;
-
-struct configfs_group_operations;
-
-struct configfs_attribute;
-
-struct configfs_bin_attribute;
-
-struct config_item_type {
-	struct module *ct_owner;
-	struct configfs_item_operations *ct_item_ops;
-	struct configfs_group_operations *ct_group_ops;
-	struct configfs_attribute **ct_attrs;
-	struct configfs_bin_attribute **ct_bin_attrs;
-};
-
-struct configfs_item_operations {
-	void (*release)(struct config_item *);
-	int (*allow_link)(struct config_item *, struct config_item *);
-	void (*drop_link)(struct config_item *, struct config_item *);
-};
-
-struct configfs_group_operations {
-	struct config_item * (*make_item)(struct config_group *, const char *);
-	struct config_group * (*make_group)(struct config_group *, const char *);
-	int (*commit_item)(struct config_item *);
-	void (*disconnect_notify)(struct config_group *, struct config_item *);
-	void (*drop_item)(struct config_group *, struct config_item *);
-};
-
-struct configfs_attribute {
-	const char *ca_name;
-	struct module *ca_owner;
-	umode_t ca_mode;
-	ssize_t (*show)(struct config_item *, char *);
-	ssize_t (*store)(struct config_item *, const char *, size_t);
-};
-
-struct configfs_bin_attribute {
-	struct configfs_attribute cb_attr;
-	void *cb_private;
-	size_t cb_max_size;
-	ssize_t (*read)(struct config_item *, void *, size_t);
-	ssize_t (*write)(struct config_item *, const void *, size_t);
-};
-
-struct configfs_subsystem {
-	struct config_group su_group;
-	struct mutex su_mutex;
-};
-
-struct configfs_fragment {
-	atomic_t frag_count;
-	struct rw_semaphore frag_sem;
-	bool frag_dead;
-};
-
-struct configfs_dirent {
-	atomic_t s_count;
-	int s_dependent_count;
-	struct list_head s_sibling;
-	struct list_head s_children;
-	int s_links;
-	void *s_element;
-	int s_type;
-	umode_t s_mode;
-	struct dentry *s_dentry;
-	struct iattr *s_iattr;
-	struct configfs_fragment *s_frag;
-};
-
-struct configfs_buffer {
-	size_t count;
-	loff_t pos;
-	char *page;
-	struct configfs_item_operations *ops;
-	struct mutex mutex;
-	int needs_read_fill;
-	bool read_in_progress;
-	bool write_in_progress;
-	char *bin_buffer;
-	int bin_buffer_size;
-	int cb_max_size;
-	struct config_item *item;
-	struct module *owner;
-	union {
-		struct configfs_attribute *attr;
-		struct configfs_bin_attribute *bin_attr;
-	};
-};
-
-struct pts_mount_opts {
-	int setuid;
-	int setgid;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-	umode_t ptmxmode;
-	int reserve;
-	int max;
-};
-
-enum {
-	Opt_uid___2 = 0,
-	Opt_gid___3 = 1,
-	Opt_mode___2 = 2,
-	Opt_ptmxmode = 3,
-	Opt_newinstance = 4,
-	Opt_max = 5,
-	Opt_err = 6,
-};
-
-struct pts_fs_info {
-	struct ida allocated_ptys;
-	struct pts_mount_opts mount_opts;
-	struct super_block *sb;
-	struct dentry *ptmx_dentry;
-};
-
-struct dcookie_struct {
-	struct path path;
-	struct list_head hash_list;
-};
-
-struct dcookie_user {
-	struct list_head next;
-};
-
-typedef unsigned int tid_t;
-
-struct transaction_chp_stats_s {
-	long unsigned int cs_chp_time;
-	__u32 cs_forced_to_close;
-	__u32 cs_written;
-	__u32 cs_dropped;
-};
-
-struct journal_s;
-
-typedef struct journal_s journal_t;
-
-struct journal_head;
-
-struct transaction_s;
-
-typedef struct transaction_s transaction_t;
-
-struct transaction_s {
-	journal_t *t_journal;
-	tid_t t_tid;
-	enum {
-		T_RUNNING = 0,
-		T_LOCKED = 1,
-		T_SWITCH = 2,
-		T_FLUSH = 3,
-		T_COMMIT = 4,
-		T_COMMIT_DFLUSH = 5,
-		T_COMMIT_JFLUSH = 6,
-		T_COMMIT_CALLBACK = 7,
-		T_FINISHED = 8,
-	} t_state;
-	long unsigned int t_log_start;
-	int t_nr_buffers;
-	struct journal_head *t_reserved_list;
-	struct journal_head *t_buffers;
-	struct journal_head *t_forget;
-	struct journal_head *t_checkpoint_list;
-	struct journal_head *t_checkpoint_io_list;
-	struct journal_head *t_shadow_list;
-	struct list_head t_inode_list;
-	spinlock_t t_handle_lock;
-	long unsigned int t_max_wait;
-	long unsigned int t_start;
-	long unsigned int t_requested;
-	struct transaction_chp_stats_s t_chp_stats;
-	atomic_t t_updates;
-	atomic_t t_outstanding_credits;
-	atomic_t t_outstanding_revokes;
-	atomic_t t_handle_count;
-	transaction_t *t_cpnext;
-	transaction_t *t_cpprev;
-	long unsigned int t_expires;
-	ktime_t t_start_time;
-	unsigned int t_synchronous_commit: 1;
-	int t_need_data_flush;
-	struct list_head t_private_list;
-};
-
-struct jbd2_buffer_trigger_type;
-
-struct journal_head {
-	struct buffer_head *b_bh;
-	spinlock_t b_state_lock;
-	int b_jcount;
-	unsigned int b_jlist;
-	unsigned int b_modified;
-	char *b_frozen_data;
-	char *b_committed_data;
-	transaction_t *b_transaction;
-	transaction_t *b_next_transaction;
-	struct journal_head *b_tnext;
-	struct journal_head *b_tprev;
-	transaction_t *b_cp_transaction;
-	struct journal_head *b_cpnext;
-	struct journal_head *b_cpprev;
-	struct jbd2_buffer_trigger_type *b_triggers;
-	struct jbd2_buffer_trigger_type *b_frozen_triggers;
-};
-
-struct jbd2_buffer_trigger_type {
-	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
-	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
-};
-
-struct jbd2_journal_handle;
-
-typedef struct jbd2_journal_handle handle_t;
-
-struct jbd2_journal_handle {
-	union {
-		transaction_t *h_transaction;
-		journal_t *h_journal;
-	};
-	handle_t *h_rsv_handle;
-	int h_total_credits;
-	int h_revoke_credits;
-	int h_revoke_credits_requested;
-	int h_ref;
-	int h_err;
-	unsigned int h_sync: 1;
-	unsigned int h_jdata: 1;
-	unsigned int h_reserved: 1;
-	unsigned int h_aborted: 1;
-	unsigned int h_type: 8;
-	unsigned int h_line_no: 16;
-	long unsigned int h_start_jiffies;
-	unsigned int h_requested_credits;
-	unsigned int saved_alloc_context;
-};
-
-struct transaction_run_stats_s {
-	long unsigned int rs_wait;
-	long unsigned int rs_request_delay;
-	long unsigned int rs_running;
-	long unsigned int rs_locked;
-	long unsigned int rs_flushing;
-	long unsigned int rs_logging;
-	__u32 rs_handle_count;
-	__u32 rs_blocks;
-	__u32 rs_blocks_logged;
-};
-
-struct transaction_stats_s {
-	long unsigned int ts_tid;
-	long unsigned int ts_requested;
-	struct transaction_run_stats_s run;
-};
-
-enum passtype {
-	PASS_SCAN = 0,
-	PASS_REVOKE = 1,
-	PASS_REPLAY = 2,
-};
-
-struct journal_superblock_s;
-
-typedef struct journal_superblock_s journal_superblock_t;
-
-struct jbd2_revoke_table_s;
-
-struct jbd2_inode;
-
-struct journal_s {
-	long unsigned int j_flags;
-	int j_errno;
-	struct mutex j_abort_mutex;
-	struct buffer_head *j_sb_buffer;
-	journal_superblock_t *j_superblock;
-	int j_format_version;
-	rwlock_t j_state_lock;
-	int j_barrier_count;
-	struct mutex j_barrier;
-	transaction_t *j_running_transaction;
-	transaction_t *j_committing_transaction;
-	transaction_t *j_checkpoint_transactions;
-	wait_queue_head_t j_wait_transaction_locked;
-	wait_queue_head_t j_wait_done_commit;
-	wait_queue_head_t j_wait_commit;
-	wait_queue_head_t j_wait_updates;
-	wait_queue_head_t j_wait_reserved;
-	wait_queue_head_t j_fc_wait;
-	struct mutex j_checkpoint_mutex;
-	struct buffer_head *j_chkpt_bhs[64];
-	long unsigned int j_head;
-	long unsigned int j_tail;
-	long unsigned int j_free;
-	long unsigned int j_first;
-	long unsigned int j_last;
-	long unsigned int j_fc_first;
-	long unsigned int j_fc_off;
-	long unsigned int j_fc_last;
-	struct block_device *j_dev;
-	int j_blocksize;
-	long long unsigned int j_blk_offset;
-	char j_devname[56];
-	struct block_device *j_fs_dev;
-	unsigned int j_total_len;
-	atomic_t j_reserved_credits;
-	spinlock_t j_list_lock;
-	struct inode *j_inode;
-	tid_t j_tail_sequence;
-	tid_t j_transaction_sequence;
-	tid_t j_commit_sequence;
-	tid_t j_commit_request;
-	__u8 j_uuid[16];
-	struct task_struct *j_task;
-	int j_max_transaction_buffers;
-	int j_revoke_records_per_block;
-	long unsigned int j_commit_interval;
-	struct timer_list j_commit_timer;
-	spinlock_t j_revoke_lock;
-	struct jbd2_revoke_table_s *j_revoke;
-	struct jbd2_revoke_table_s *j_revoke_table[2];
-	struct buffer_head **j_wbuf;
-	struct buffer_head **j_fc_wbuf;
-	int j_wbufsize;
-	int j_fc_wbufsize;
-	pid_t j_last_sync_writer;
-	u64 j_average_commit_time;
-	u32 j_min_batch_time;
-	u32 j_max_batch_time;
-	void (*j_commit_callback)(journal_t *, transaction_t *);
-	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
-	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
-	spinlock_t j_history_lock;
-	struct proc_dir_entry *j_proc_entry;
-	struct transaction_stats_s j_stats;
-	unsigned int j_failed_commit;
-	void *j_private;
-	struct crypto_shash *j_chksum_driver;
-	__u32 j_csum_seed;
-	void (*j_fc_cleanup_callback)(struct journal_s *, int);
-	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
-};
-
-struct journal_header_s {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-};
-
-typedef struct journal_header_s journal_header_t;
-
-struct journal_superblock_s {
-	journal_header_t s_header;
-	__be32 s_blocksize;
-	__be32 s_maxlen;
-	__be32 s_first;
-	__be32 s_sequence;
-	__be32 s_start;
-	__be32 s_errno;
-	__be32 s_feature_compat;
-	__be32 s_feature_incompat;
-	__be32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	__be32 s_nr_users;
-	__be32 s_dynsuper;
-	__be32 s_max_transaction;
-	__be32 s_max_trans_data;
-	__u8 s_checksum_type;
-	__u8 s_padding2[3];
-	__be32 s_num_fc_blks;
-	__u32 s_padding[41];
-	__be32 s_checksum;
-	__u8 s_users[768];
-};
-
-enum jbd_state_bits {
-	BH_JBD = 16,
-	BH_JWrite = 17,
-	BH_Freed = 18,
-	BH_Revoked = 19,
-	BH_RevokeValid = 20,
-	BH_JBDDirty = 21,
-	BH_JournalHead = 22,
-	BH_Shadow = 23,
-	BH_Verified = 24,
-	BH_JBDPrivateStart = 25,
-};
-
-struct jbd2_inode {
-	transaction_t *i_transaction;
-	transaction_t *i_next_transaction;
-	struct list_head i_list;
-	struct inode *i_vfs_inode;
-	long unsigned int i_flags;
-	loff_t i_dirty_start;
-	loff_t i_dirty_end;
-};
-
-struct bgl_lock {
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blockgroup_lock {
-	struct bgl_lock locks[128];
-};
-
-typedef int ext4_grpblk_t;
-
-typedef long long unsigned int ext4_fsblk_t;
-
-typedef __u32 ext4_lblk_t;
-
-typedef unsigned int ext4_group_t;
-
-struct ext4_allocation_request {
-	struct inode *inode;
-	unsigned int len;
-	ext4_lblk_t logical;
-	ext4_lblk_t lleft;
-	ext4_lblk_t lright;
-	ext4_fsblk_t goal;
-	ext4_fsblk_t pleft;
-	ext4_fsblk_t pright;
-	unsigned int flags;
-};
-
-struct ext4_system_blocks {
-	struct rb_root root;
-	struct callback_head rcu;
-};
-
-struct ext4_group_desc {
-	__le32 bg_block_bitmap_lo;
-	__le32 bg_inode_bitmap_lo;
-	__le32 bg_inode_table_lo;
-	__le16 bg_free_blocks_count_lo;
-	__le16 bg_free_inodes_count_lo;
-	__le16 bg_used_dirs_count_lo;
-	__le16 bg_flags;
-	__le32 bg_exclude_bitmap_lo;
-	__le16 bg_block_bitmap_csum_lo;
-	__le16 bg_inode_bitmap_csum_lo;
-	__le16 bg_itable_unused_lo;
-	__le16 bg_checksum;
-	__le32 bg_block_bitmap_hi;
-	__le32 bg_inode_bitmap_hi;
-	__le32 bg_inode_table_hi;
-	__le16 bg_free_blocks_count_hi;
-	__le16 bg_free_inodes_count_hi;
-	__le16 bg_used_dirs_count_hi;
-	__le16 bg_itable_unused_hi;
-	__le32 bg_exclude_bitmap_hi;
-	__le16 bg_block_bitmap_csum_hi;
-	__le16 bg_inode_bitmap_csum_hi;
-	__u32 bg_reserved;
-};
-
-struct flex_groups {
-	atomic64_t free_clusters;
-	atomic_t free_inodes;
-	atomic_t used_dirs;
-};
-
-struct extent_status {
-	struct rb_node rb_node;
-	ext4_lblk_t es_lblk;
-	ext4_lblk_t es_len;
-	ext4_fsblk_t es_pblk;
-};
-
-struct ext4_es_tree {
-	struct rb_root root;
-	struct extent_status *cache_es;
-};
-
-struct ext4_es_stats {
-	long unsigned int es_stats_shrunk;
-	struct percpu_counter es_stats_cache_hits;
-	struct percpu_counter es_stats_cache_misses;
-	u64 es_stats_scan_time;
-	u64 es_stats_max_scan_time;
-	struct percpu_counter es_stats_all_cnt;
-	struct percpu_counter es_stats_shk_cnt;
-};
-
-struct ext4_pending_tree {
-	struct rb_root root;
-};
-
-struct ext4_fc_stats {
-	unsigned int fc_ineligible_reason_count[10];
-	long unsigned int fc_num_commits;
-	long unsigned int fc_ineligible_commits;
-	long unsigned int fc_numblks;
-};
-
-struct ext4_fc_alloc_region {
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	int ino;
-	int len;
-};
-
-struct ext4_fc_replay_state {
-	int fc_replay_num_tags;
-	int fc_replay_expected_off;
-	int fc_current_pass;
-	int fc_cur_tag;
-	int fc_crc;
-	struct ext4_fc_alloc_region *fc_regions;
-	int fc_regions_size;
-	int fc_regions_used;
-	int fc_regions_valid;
-	int *fc_modified_inodes;
-	int fc_modified_inodes_used;
-	int fc_modified_inodes_size;
-};
-
-struct ext4_inode_info {
-	__le32 i_data[15];
-	__u32 i_dtime;
-	ext4_fsblk_t i_file_acl;
-	ext4_group_t i_block_group;
-	ext4_lblk_t i_dir_start_lookup;
-	long unsigned int i_flags;
-	struct rw_semaphore xattr_sem;
-	struct list_head i_orphan;
-	struct list_head i_fc_list;
-	ext4_lblk_t i_fc_lblk_start;
-	ext4_lblk_t i_fc_lblk_len;
-	atomic_t i_fc_updates;
-	wait_queue_head_t i_fc_wait;
-	struct mutex i_fc_lock;
-	loff_t i_disksize;
-	struct rw_semaphore i_data_sem;
-	struct rw_semaphore i_mmap_sem;
-	struct inode vfs_inode;
-	struct jbd2_inode *jinode;
-	spinlock_t i_raw_lock;
-	struct timespec64 i_crtime;
-	atomic_t i_prealloc_active;
-	struct list_head i_prealloc_list;
-	spinlock_t i_prealloc_lock;
-	struct ext4_es_tree i_es_tree;
-	rwlock_t i_es_lock;
-	struct list_head i_es_list;
-	unsigned int i_es_all_nr;
-	unsigned int i_es_shk_nr;
-	ext4_lblk_t i_es_shrink_lblk;
-	ext4_group_t i_last_alloc_group;
-	unsigned int i_reserved_data_blocks;
-	struct ext4_pending_tree i_pending_tree;
-	__u16 i_extra_isize;
-	u16 i_inline_off;
-	u16 i_inline_size;
-	qsize_t i_reserved_quota;
-	spinlock_t i_completed_io_lock;
-	struct list_head i_rsv_conversion_list;
-	struct work_struct i_rsv_conversion_work;
-	atomic_t i_unwritten;
-	spinlock_t i_block_reservation_lock;
-	tid_t i_sync_tid;
-	tid_t i_datasync_tid;
-	struct dquot *i_dquot[3];
-	__u32 i_csum_seed;
-	kprojid_t i_projid;
-};
-
-struct ext4_super_block {
-	__le32 s_inodes_count;
-	__le32 s_blocks_count_lo;
-	__le32 s_r_blocks_count_lo;
-	__le32 s_free_blocks_count_lo;
-	__le32 s_free_inodes_count;
-	__le32 s_first_data_block;
-	__le32 s_log_block_size;
-	__le32 s_log_cluster_size;
-	__le32 s_blocks_per_group;
-	__le32 s_clusters_per_group;
-	__le32 s_inodes_per_group;
-	__le32 s_mtime;
-	__le32 s_wtime;
-	__le16 s_mnt_count;
-	__le16 s_max_mnt_count;
-	__le16 s_magic;
-	__le16 s_state;
-	__le16 s_errors;
-	__le16 s_minor_rev_level;
-	__le32 s_lastcheck;
-	__le32 s_checkinterval;
-	__le32 s_creator_os;
-	__le32 s_rev_level;
-	__le16 s_def_resuid;
-	__le16 s_def_resgid;
-	__le32 s_first_ino;
-	__le16 s_inode_size;
-	__le16 s_block_group_nr;
-	__le32 s_feature_compat;
-	__le32 s_feature_incompat;
-	__le32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	char s_volume_name[16];
-	char s_last_mounted[64];
-	__le32 s_algorithm_usage_bitmap;
-	__u8 s_prealloc_blocks;
-	__u8 s_prealloc_dir_blocks;
-	__le16 s_reserved_gdt_blocks;
-	__u8 s_journal_uuid[16];
-	__le32 s_journal_inum;
-	__le32 s_journal_dev;
-	__le32 s_last_orphan;
-	__le32 s_hash_seed[4];
-	__u8 s_def_hash_version;
-	__u8 s_jnl_backup_type;
-	__le16 s_desc_size;
-	__le32 s_default_mount_opts;
-	__le32 s_first_meta_bg;
-	__le32 s_mkfs_time;
-	__le32 s_jnl_blocks[17];
-	__le32 s_blocks_count_hi;
-	__le32 s_r_blocks_count_hi;
-	__le32 s_free_blocks_count_hi;
-	__le16 s_min_extra_isize;
-	__le16 s_want_extra_isize;
-	__le32 s_flags;
-	__le16 s_raid_stride;
-	__le16 s_mmp_update_interval;
-	__le64 s_mmp_block;
-	__le32 s_raid_stripe_width;
-	__u8 s_log_groups_per_flex;
-	__u8 s_checksum_type;
-	__u8 s_encryption_level;
-	__u8 s_reserved_pad;
-	__le64 s_kbytes_written;
-	__le32 s_snapshot_inum;
-	__le32 s_snapshot_id;
-	__le64 s_snapshot_r_blocks_count;
-	__le32 s_snapshot_list;
-	__le32 s_error_count;
-	__le32 s_first_error_time;
-	__le32 s_first_error_ino;
-	__le64 s_first_error_block;
-	__u8 s_first_error_func[32];
-	__le32 s_first_error_line;
-	__le32 s_last_error_time;
-	__le32 s_last_error_ino;
-	__le32 s_last_error_line;
-	__le64 s_last_error_block;
-	__u8 s_last_error_func[32];
-	__u8 s_mount_opts[64];
-	__le32 s_usr_quota_inum;
-	__le32 s_grp_quota_inum;
-	__le32 s_overhead_clusters;
-	__le32 s_backup_bgs[2];
-	__u8 s_encrypt_algos[4];
-	__u8 s_encrypt_pw_salt[16];
-	__le32 s_lpf_ino;
-	__le32 s_prj_quota_inum;
-	__le32 s_checksum_seed;
-	__u8 s_wtime_hi;
-	__u8 s_mtime_hi;
-	__u8 s_mkfs_time_hi;
-	__u8 s_lastcheck_hi;
-	__u8 s_first_error_time_hi;
-	__u8 s_last_error_time_hi;
-	__u8 s_first_error_errcode;
-	__u8 s_last_error_errcode;
-	__le16 s_encoding;
-	__le16 s_encoding_flags;
-	__le32 s_reserved[95];
-	__le32 s_checksum;
-};
-
-struct mb_cache___2;
-
-struct ext4_group_info;
-
-struct ext4_locality_group;
-
-struct ext4_li_request;
-
-struct ext4_sb_info {
-	long unsigned int s_desc_size;
-	long unsigned int s_inodes_per_block;
-	long unsigned int s_blocks_per_group;
-	long unsigned int s_clusters_per_group;
-	long unsigned int s_inodes_per_group;
-	long unsigned int s_itb_per_group;
-	long unsigned int s_gdb_count;
-	long unsigned int s_desc_per_block;
-	ext4_group_t s_groups_count;
-	ext4_group_t s_blockfile_groups;
-	long unsigned int s_overhead;
-	unsigned int s_cluster_ratio;
-	unsigned int s_cluster_bits;
-	loff_t s_bitmap_maxbytes;
-	struct buffer_head *s_sbh;
-	struct ext4_super_block *s_es;
-	struct buffer_head **s_group_desc;
-	unsigned int s_mount_opt;
-	unsigned int s_mount_opt2;
-	long unsigned int s_mount_flags;
-	unsigned int s_def_mount_opt;
-	ext4_fsblk_t s_sb_block;
-	atomic64_t s_resv_clusters;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	short unsigned int s_mount_state;
-	short unsigned int s_pad;
-	int s_addr_per_block_bits;
-	int s_desc_per_block_bits;
-	int s_inode_size;
-	int s_first_ino;
-	unsigned int s_inode_readahead_blks;
-	unsigned int s_inode_goal;
-	u32 s_hash_seed[4];
-	int s_def_hash_version;
-	int s_hash_unsigned;
-	struct percpu_counter s_freeclusters_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
-	struct percpu_counter s_dirtyclusters_counter;
-	struct blockgroup_lock *s_blockgroup_lock;
-	struct proc_dir_entry *s_proc;
-	struct kobject s_kobj;
-	struct completion s_kobj_unregister;
-	struct super_block *s_sb;
-	struct journal_s *s_journal;
-	struct list_head s_orphan;
-	struct mutex s_orphan_lock;
-	long unsigned int s_ext4_flags;
-	long unsigned int s_commit_interval;
-	u32 s_max_batch_time;
-	u32 s_min_batch_time;
-	struct block_device *s_journal_bdev;
-	char *s_qf_names[3];
-	int s_jquota_fmt;
-	unsigned int s_want_extra_isize;
-	struct ext4_system_blocks *s_system_blks;
-	struct ext4_group_info ***s_group_info;
-	struct inode *s_buddy_cache;
-	spinlock_t s_md_lock;
-	short unsigned int *s_mb_offsets;
-	unsigned int *s_mb_maxs;
-	unsigned int s_group_info_size;
-	unsigned int s_mb_free_pending;
-	struct list_head s_freed_data_list;
-	long unsigned int s_stripe;
-	unsigned int s_mb_stream_request;
-	unsigned int s_mb_max_to_scan;
-	unsigned int s_mb_min_to_scan;
-	unsigned int s_mb_stats;
-	unsigned int s_mb_order2_reqs;
-	unsigned int s_mb_group_prealloc;
-	unsigned int s_mb_max_inode_prealloc;
-	unsigned int s_max_dir_size_kb;
-	long unsigned int s_mb_last_group;
-	long unsigned int s_mb_last_start;
-	unsigned int s_mb_prefetch;
-	unsigned int s_mb_prefetch_limit;
-	atomic_t s_bal_reqs;
-	atomic_t s_bal_success;
-	atomic_t s_bal_allocated;
-	atomic_t s_bal_ex_scanned;
-	atomic_t s_bal_goals;
-	atomic_t s_bal_breaks;
-	atomic_t s_bal_2orders;
-	spinlock_t s_bal_lock;
-	long unsigned int s_mb_buddies_generated;
-	long long unsigned int s_mb_generation_time;
-	atomic_t s_mb_lost_chunks;
-	atomic_t s_mb_preallocated;
-	atomic_t s_mb_discarded;
-	atomic_t s_lock_busy;
-	struct ext4_locality_group *s_locality_groups;
-	long unsigned int s_sectors_written_start;
-	u64 s_kbytes_written;
-	unsigned int s_extent_max_zeroout_kb;
-	unsigned int s_log_groups_per_flex;
-	struct flex_groups **s_flex_groups;
-	ext4_group_t s_flex_groups_allocated;
-	struct workqueue_struct *rsv_conversion_wq;
-	struct timer_list s_err_report;
-	struct ext4_li_request *s_li_request;
-	unsigned int s_li_wait_mult;
-	struct task_struct *s_mmp_tsk;
-	atomic_t s_last_trim_minblks;
-	struct crypto_shash *s_chksum_driver;
-	__u32 s_csum_seed;
-	struct shrinker s_es_shrinker;
-	struct list_head s_es_list;
-	long int s_es_nr_inode;
-	struct ext4_es_stats s_es_stats;
-	struct mb_cache___2 *s_ea_block_cache;
-	struct mb_cache___2 *s_ea_inode_cache;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_es_lock;
-	struct ratelimit_state s_err_ratelimit_state;
-	struct ratelimit_state s_warning_ratelimit_state;
-	struct ratelimit_state s_msg_ratelimit_state;
-	atomic_t s_warning_count;
-	atomic_t s_msg_count;
-	struct fscrypt_dummy_policy s_dummy_enc_policy;
-	struct percpu_rw_semaphore s_writepages_rwsem;
-	struct dax_device *s_daxdev;
-	errseq_t s_bdev_wb_err;
-	spinlock_t s_bdev_wb_lock;
-	atomic_t s_fc_subtid;
-	atomic_t s_fc_ineligible_updates;
-	struct list_head s_fc_q[2];
-	struct list_head s_fc_dentry_q[2];
-	unsigned int s_fc_bytes;
-	spinlock_t s_fc_lock;
-	struct buffer_head *s_fc_bh;
-	struct ext4_fc_stats s_fc_stats;
-	u64 s_fc_avg_commit_time;
-	struct ext4_fc_replay_state s_fc_replay_state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ext4_group_info {
-	long unsigned int bb_state;
-	struct rb_root bb_free_root;
-	ext4_grpblk_t bb_first_free;
-	ext4_grpblk_t bb_free;
-	ext4_grpblk_t bb_fragments;
-	ext4_grpblk_t bb_largest_free_order;
-	struct list_head bb_prealloc_list;
-	struct rw_semaphore alloc_sem;
-	ext4_grpblk_t bb_counters[0];
-};
-
-struct ext4_locality_group {
-	struct mutex lg_mutex;
-	struct list_head lg_prealloc_list[10];
-	spinlock_t lg_prealloc_lock;
-};
-
-enum ext4_li_mode {
-	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
-	EXT4_LI_MODE_ITABLE = 1,
-};
-
-struct ext4_li_request {
-	struct super_block *lr_super;
-	enum ext4_li_mode lr_mode;
-	ext4_group_t lr_first_not_zeroed;
-	ext4_group_t lr_next_group;
-	struct list_head lr_request;
-	long unsigned int lr_next_sched;
-	long unsigned int lr_timeout;
-};
-
-struct ext4_map_blocks {
-	ext4_fsblk_t m_pblk;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	unsigned int m_flags;
-};
-
-struct ext4_system_zone {
-	struct rb_node node;
-	ext4_fsblk_t start_blk;
-	unsigned int count;
-	u32 ino;
-};
-
-enum {
-	EXT4_INODE_SECRM = 0,
-	EXT4_INODE_UNRM = 1,
-	EXT4_INODE_COMPR = 2,
-	EXT4_INODE_SYNC = 3,
-	EXT4_INODE_IMMUTABLE = 4,
-	EXT4_INODE_APPEND = 5,
-	EXT4_INODE_NODUMP = 6,
-	EXT4_INODE_NOATIME = 7,
-	EXT4_INODE_DIRTY = 8,
-	EXT4_INODE_COMPRBLK = 9,
-	EXT4_INODE_NOCOMPR = 10,
-	EXT4_INODE_ENCRYPT = 11,
-	EXT4_INODE_INDEX = 12,
-	EXT4_INODE_IMAGIC = 13,
-	EXT4_INODE_JOURNAL_DATA = 14,
-	EXT4_INODE_NOTAIL = 15,
-	EXT4_INODE_DIRSYNC = 16,
-	EXT4_INODE_TOPDIR = 17,
-	EXT4_INODE_HUGE_FILE = 18,
-	EXT4_INODE_EXTENTS = 19,
-	EXT4_INODE_VERITY = 20,
-	EXT4_INODE_EA_INODE = 21,
-	EXT4_INODE_DAX = 25,
-	EXT4_INODE_INLINE_DATA = 28,
-	EXT4_INODE_PROJINHERIT = 29,
-	EXT4_INODE_CASEFOLD = 30,
-	EXT4_INODE_RESERVED = 31,
-};
-
-enum {
-	EXT4_FC_REASON_OK = 0,
-	EXT4_FC_REASON_INELIGIBLE = 1,
-	EXT4_FC_REASON_ALREADY_COMMITTED = 2,
-	EXT4_FC_REASON_FC_START_FAILED = 3,
-	EXT4_FC_REASON_FC_FAILED = 4,
-	EXT4_FC_REASON_XATTR = 0,
-	EXT4_FC_REASON_CROSS_RENAME = 1,
-	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
-	EXT4_FC_REASON_NOMEM = 3,
-	EXT4_FC_REASON_SWAP_BOOT = 4,
-	EXT4_FC_REASON_RESIZE = 5,
-	EXT4_FC_REASON_RENAME_DIR = 6,
-	EXT4_FC_REASON_FALLOC_RANGE = 7,
-	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
-	EXT4_FC_COMMIT_FAILED = 9,
-	EXT4_FC_REASON_MAX = 10,
-};
-
-struct ext4_dir_entry_2 {
-	__le32 inode;
-	__le16 rec_len;
-	__u8 name_len;
-	__u8 file_type;
-	char name[255];
-};
-
 struct fname;
 
 struct dir_private_info {
@@ -76347,191 +85145,12 @@
 	__u32 next_hash;
 };
 
-struct fname {
-	__u32 hash;
-	__u32 minor_hash;
-	struct rb_node rb_hash;
-	struct fname *next;
-	__u32 inode;
-	__u8 name_len;
-	__u8 file_type;
-	char name[0];
-};
+struct fsverity_info;
 
-enum SHIFT_DIRECTION {
-	SHIFT_LEFT = 0,
-	SHIFT_RIGHT = 1,
-};
-
-struct ext4_io_end_vec {
-	struct list_head list;
-	loff_t offset;
-	ssize_t size;
-};
-
-struct ext4_io_end {
-	struct list_head list;
-	handle_t *handle;
+struct fs_error_report {
+	int error;
 	struct inode *inode;
-	struct bio *bio;
-	unsigned int flag;
-	atomic_t count;
-	struct list_head list_vec;
-};
-
-typedef struct ext4_io_end ext4_io_end_t;
-
-enum {
-	ES_WRITTEN_B = 0,
-	ES_UNWRITTEN_B = 1,
-	ES_DELAYED_B = 2,
-	ES_HOLE_B = 3,
-	ES_REFERENCED_B = 4,
-	ES_FLAGS = 5,
-};
-
-enum {
-	EXT4_STATE_JDATA = 0,
-	EXT4_STATE_NEW = 1,
-	EXT4_STATE_XATTR = 2,
-	EXT4_STATE_NO_EXPAND = 3,
-	EXT4_STATE_DA_ALLOC_CLOSE = 4,
-	EXT4_STATE_EXT_MIGRATE = 5,
-	EXT4_STATE_NEWENTRY = 6,
-	EXT4_STATE_MAY_INLINE_DATA = 7,
-	EXT4_STATE_EXT_PRECACHED = 8,
-	EXT4_STATE_LUSTRE_EA_INODE = 9,
-	EXT4_STATE_VERITY_IN_PROGRESS = 10,
-	EXT4_STATE_FC_COMMITTING = 11,
-};
-
-struct ext4_iloc {
-	struct buffer_head *bh;
-	long unsigned int offset;
-	ext4_group_t block_group;
-};
-
-struct ext4_extent_tail {
-	__le32 et_checksum;
-};
-
-struct ext4_extent {
-	__le32 ee_block;
-	__le16 ee_len;
-	__le16 ee_start_hi;
-	__le32 ee_start_lo;
-};
-
-struct ext4_extent_idx {
-	__le32 ei_block;
-	__le32 ei_leaf_lo;
-	__le16 ei_leaf_hi;
-	__u16 ei_unused;
-};
-
-struct ext4_extent_header {
-	__le16 eh_magic;
-	__le16 eh_entries;
-	__le16 eh_max;
-	__le16 eh_depth;
-	__le32 eh_generation;
-};
-
-struct ext4_ext_path {
-	ext4_fsblk_t p_block;
-	__u16 p_depth;
-	__u16 p_maxdepth;
-	struct ext4_extent *p_ext;
-	struct ext4_extent_idx *p_idx;
-	struct ext4_extent_header *p_hdr;
-	struct buffer_head *p_bh;
-};
-
-struct partial_cluster {
-	ext4_fsblk_t pclu;
-	ext4_lblk_t lblk;
-	enum {
-		initial = 0,
-		tofree = 1,
-		nofree = 2,
-	} state;
-};
-
-struct pending_reservation {
-	struct rb_node rb_node;
-	ext4_lblk_t lclu;
-};
-
-struct rsvd_count {
-	int ndelonly;
-	bool first_do_lblk_found;
-	ext4_lblk_t first_do_lblk;
-	ext4_lblk_t last_do_lblk;
-	struct extent_status *left_es;
-	bool partial;
-	ext4_lblk_t lclu;
-};
-
-enum {
-	EXT4_MF_MNTDIR_SAMPLED = 0,
-	EXT4_MF_FS_ABORTED = 1,
-	EXT4_MF_FC_INELIGIBLE = 2,
-	EXT4_MF_FC_COMMITTING = 3,
-};
-
-struct fsmap {
-	__u32 fmr_device;
-	__u32 fmr_flags;
-	__u64 fmr_physical;
-	__u64 fmr_owner;
-	__u64 fmr_offset;
-	__u64 fmr_length;
-	__u64 fmr_reserved[3];
-};
-
-struct ext4_fsmap {
-	struct list_head fmr_list;
-	dev_t fmr_device;
-	uint32_t fmr_flags;
-	uint64_t fmr_physical;
-	uint64_t fmr_owner;
-	uint64_t fmr_length;
-};
-
-struct ext4_fsmap_head {
-	uint32_t fmh_iflags;
-	uint32_t fmh_oflags;
-	unsigned int fmh_count;
-	unsigned int fmh_entries;
-	struct ext4_fsmap fmh_keys[2];
-};
-
-typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
-
-struct ext4_getfsmap_info {
-	struct ext4_fsmap_head *gfi_head;
-	ext4_fsmap_format_t gfi_formatter;
-	void *gfi_format_arg;
-	ext4_fsblk_t gfi_next_fsblk;
-	u32 gfi_dev;
-	ext4_group_t gfi_agno;
-	struct ext4_fsmap gfi_low;
-	struct ext4_fsmap gfi_high;
-	struct ext4_fsmap gfi_lastfree;
-	struct list_head gfi_meta_list;
-	bool gfi_last;
-};
-
-struct ext4_getfsmap_dev {
-	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
-	u32 gfd_dev;
-};
-
-struct dx_hash_info {
-	u32 hash;
-	u32 minor_hash;
-	int hash_version;
-	u32 *seed;
+	struct super_block *sb;
 };
 
 struct ext4_inode {
@@ -76595,179 +85214,41 @@
 	__le32 i_projid;
 };
 
-struct orlov_stats {
-	__u64 free_clusters;
-	__u32 free_inodes;
-	__u32 used_dirs;
+enum {
+	ES_WRITTEN_B = 0,
+	ES_UNWRITTEN_B = 1,
+	ES_DELAYED_B = 2,
+	ES_HOLE_B = 3,
+	ES_REFERENCED_B = 4,
+	ES_FLAGS = 5,
 };
 
-typedef struct {
-	__le32 *p;
-	__le32 key;
-	struct buffer_head *bh;
-} Indirect;
-
-struct ext4_filename {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	struct dx_hash_info hinfo;
-	struct fscrypt_str crypto_buf;
-	struct fscrypt_str cf_name;
+struct ext4_lazy_init {
+	long unsigned int li_state;
+	struct list_head li_request_list;
+	struct mutex li_list_mtx;
 };
 
-struct ext4_xattr_ibody_header {
-	__le32 h_magic;
+struct ext4_extent {
+	__le32 ee_block;
+	__le16 ee_len;
+	__le16 ee_start_hi;
+	__le32 ee_start_lo;
 };
 
-struct ext4_xattr_entry {
-	__u8 e_name_len;
-	__u8 e_name_index;
-	__le16 e_value_offs;
-	__le32 e_value_inum;
-	__le32 e_value_size;
-	__le32 e_hash;
-	char e_name[0];
+struct partial_cluster {
+	ext4_fsblk_t pclu;
+	ext4_lblk_t lblk;
+	enum {
+		initial = 0,
+		tofree = 1,
+		nofree = 2,
+	} state;
 };
 
-struct ext4_xattr_info {
-	const char *name;
-	const void *value;
-	size_t value_len;
-	int name_index;
-	int in_inode;
-};
-
-struct ext4_xattr_search {
-	struct ext4_xattr_entry *first;
-	void *base;
-	void *end;
-	struct ext4_xattr_entry *here;
-	int not_found;
-};
-
-struct ext4_xattr_ibody_find {
-	struct ext4_xattr_search s;
-	struct ext4_iloc iloc;
-};
-
-typedef short unsigned int __kernel_uid16_t;
-
-typedef short unsigned int __kernel_gid16_t;
-
-typedef __kernel_uid16_t uid16_t;
-
-typedef __kernel_gid16_t gid16_t;
-
-struct ext4_io_submit {
-	struct writeback_control *io_wbc;
-	struct bio *io_bio;
-	ext4_io_end_t *io_end;
-	sector_t io_next_block;
-};
-
-typedef enum {
-	EXT4_IGET_NORMAL = 0,
-	EXT4_IGET_SPECIAL = 1,
-	EXT4_IGET_HANDLE = 2,
-} ext4_iget_flags;
-
-struct ext4_xattr_inode_array {
-	unsigned int count;
-	struct inode *inodes[0];
-};
-
-struct mpage_da_data {
-	struct inode *inode;
-	struct writeback_control *wbc;
-	long unsigned int first_page;
-	long unsigned int next_page;
-	long unsigned int last_page;
-	struct ext4_map_blocks map;
-	struct ext4_io_submit io_submit;
-	unsigned int do_map: 1;
-	unsigned int scanned_until_end: 1;
-};
-
-struct fstrim_range {
-	__u64 start;
-	__u64 len;
-	__u64 minlen;
-};
-
-struct ext4_new_group_input {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 unused;
-};
-
-struct compat_ext4_new_group_input {
-	u32 group;
-	compat_u64 block_bitmap;
-	compat_u64 inode_bitmap;
-	compat_u64 inode_table;
-	u32 blocks_count;
-	u16 reserved_blocks;
-	u16 unused;
-};
-
-struct ext4_new_group_data {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 mdata_blocks;
-	__u32 free_clusters_count;
-};
-
-struct move_extent {
-	__u32 reserved;
-	__u32 donor_fd;
-	__u64 orig_start;
-	__u64 donor_start;
-	__u64 len;
-	__u64 moved_len;
-};
-
-struct fsmap_head {
-	__u32 fmh_iflags;
-	__u32 fmh_oflags;
-	__u32 fmh_count;
-	__u32 fmh_entries;
-	__u64 fmh_reserved[6];
-	struct fsmap fmh_keys[2];
-	struct fsmap fmh_recs[0];
-};
-
-struct getfsmap_info {
-	struct super_block *gi_sb;
-	struct fsmap_head *gi_data;
-	unsigned int gi_idx;
-	__u32 gi_last_flags;
-};
-
-typedef long unsigned int cycles_t;
-
-enum blk_default_limits {
-	BLK_MAX_SEGMENTS = 128,
-	BLK_SAFE_MAX_SECTORS = 255,
-	BLK_DEF_MAX_SECTORS = 2560,
-	BLK_MAX_SEGMENT_SIZE = 65536,
-	BLK_SEG_BOUNDARY_MASK = 4294967295,
-};
-
-struct ext4_free_data {
-	struct list_head efd_list;
-	struct rb_node efd_node;
-	ext4_group_t efd_group;
-	ext4_grpblk_t efd_start_cluster;
-	ext4_grpblk_t efd_count;
-	tid_t efd_tid;
+struct ext4_journal_cb_entry {
+	struct list_head jce_list;
+	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
 };
 
 struct ext4_prealloc_space {
@@ -76789,11 +85270,6 @@
 	struct inode *pa_inode;
 };
 
-enum {
-	MB_INODE_PA = 0,
-	MB_GROUP_PA = 1,
-};
-
 struct ext4_free_extent {
 	ext4_lblk_t fe_logical;
 	ext4_grpblk_t fe_start;
@@ -76808,11 +85284,13 @@
 	struct ext4_free_extent ac_g_ex;
 	struct ext4_free_extent ac_b_ex;
 	struct ext4_free_extent ac_f_ex;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
 	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
 	__u16 ac_found;
 	__u16 ac_tail;
 	__u16 ac_buddy;
-	__u16 ac_flags;
 	__u8 ac_status;
 	__u8 ac_criteria;
 	__u8 ac_2order;
@@ -76823,196 +85301,13 @@
 	struct ext4_locality_group *ac_lg;
 };
 
-struct ext4_buddy {
-	struct page *bd_buddy_page;
-	void *bd_buddy;
-	struct page *bd_bitmap_page;
-	void *bd_bitmap;
-	struct ext4_group_info *bd_info;
-	struct super_block *bd_sb;
-	__u16 bd_blkbits;
-	ext4_group_t bd_group;
-};
-
-typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
-
-struct sg {
-	struct ext4_group_info info;
-	ext4_grpblk_t counters[18];
-};
-
-struct migrate_struct {
-	ext4_lblk_t first_block;
-	ext4_lblk_t last_block;
-	ext4_lblk_t curr_block;
-	ext4_fsblk_t first_pblock;
-	ext4_fsblk_t last_pblock;
-};
-
-struct mmp_struct {
-	__le32 mmp_magic;
-	__le32 mmp_seq;
-	__le64 mmp_time;
-	char mmp_nodename[64];
-	char mmp_bdevname[32];
-	__le16 mmp_check_interval;
-	__le16 mmp_pad1;
-	__le32 mmp_pad2[226];
-	__le32 mmp_checksum;
-};
-
-struct mmpd_data {
-	struct buffer_head *bh;
-	struct super_block *sb;
-};
-
-struct ext4_dir_entry {
-	__le32 inode;
-	__le16 rec_len;
-	__le16 name_len;
-	char name[255];
-};
-
-struct ext4_dir_entry_tail {
-	__le32 det_reserved_zero1;
-	__le16 det_rec_len;
-	__u8 det_reserved_zero2;
-	__u8 det_reserved_ft;
-	__le32 det_checksum;
-};
-
-typedef enum {
-	EITHER = 0,
-	INDEX = 1,
-	DIRENT = 2,
-	DIRENT_HTREE = 3,
-} dirblock_type_t;
-
-struct fake_dirent {
-	__le32 inode;
-	__le16 rec_len;
-	u8 name_len;
-	u8 file_type;
-};
-
-struct dx_countlimit {
-	__le16 limit;
-	__le16 count;
-};
-
-struct dx_entry {
-	__le32 hash;
-	__le32 block;
-};
-
-struct dx_root_info {
-	__le32 reserved_zero;
-	u8 hash_version;
-	u8 info_length;
-	u8 indirect_levels;
-	u8 unused_flags;
-};
-
-struct dx_root {
-	struct fake_dirent dot;
-	char dot_name[4];
-	struct fake_dirent dotdot;
-	char dotdot_name[4];
-	struct dx_root_info info;
-	struct dx_entry entries[0];
-};
-
-struct dx_node {
-	struct fake_dirent fake;
-	struct dx_entry entries[0];
-};
-
-struct dx_frame {
-	struct buffer_head *bh;
-	struct dx_entry *entries;
-	struct dx_entry *at;
-};
-
-struct dx_map_entry {
-	u32 hash;
-	u16 offs;
-	u16 size;
-};
-
-struct dx_tail {
-	u32 dt_reserved;
-	__le32 dt_checksum;
-};
-
-struct ext4_renament {
-	struct inode *dir;
-	struct dentry *dentry;
-	struct inode *inode;
-	bool is_dir;
-	int dir_nlink_delta;
-	struct buffer_head *bh;
-	struct ext4_dir_entry_2 *de;
-	int inlined;
-	struct buffer_head *dir_bh;
-	struct ext4_dir_entry_2 *parent_de;
-	int dir_inlined;
-};
-
-enum bio_post_read_step {
-	STEP_INITIAL = 0,
-	STEP_DECRYPT = 1,
-	STEP_VERITY = 2,
-	STEP_MAX = 3,
-};
-
-struct bio_post_read_ctx {
-	struct bio *bio;
-	struct work_struct work;
-	unsigned int cur_step;
-	unsigned int enabled_steps;
-};
-
-enum {
-	BLOCK_BITMAP = 0,
-	INODE_BITMAP = 1,
-	INODE_TABLE = 2,
-	GROUP_TABLE_COUNT = 3,
-};
-
-struct ext4_rcu_ptr {
-	struct callback_head rcu;
-	void *ptr;
-};
-
-struct ext4_new_flex_group_data {
-	struct ext4_new_group_data *groups;
-	__u16 *bg_flags;
-	ext4_group_t count;
-};
-
-enum stat_group {
-	STAT_READ = 0,
-	STAT_WRITE = 1,
-	STAT_DISCARD = 2,
-	STAT_FLUSH = 3,
-	NR_STAT_GROUPS = 4,
-};
-
-enum {
-	I_DATA_SEM_NORMAL = 0,
-	I_DATA_SEM_OTHER = 1,
-	I_DATA_SEM_QUOTA = 2,
-};
-
-struct ext4_lazy_init {
-	long unsigned int li_state;
-	struct list_head li_request_list;
-	struct mutex li_list_mtx;
-};
-
-struct ext4_journal_cb_entry {
-	struct list_head jce_list;
-	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
+struct ext4_fsmap {
+	struct list_head fmr_list;
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	uint64_t fmr_length;
 };
 
 struct trace_event_raw_ext4_other_inode_update_time {
@@ -77099,7 +85394,6 @@
 	ino_t ino;
 	loff_t pos;
 	unsigned int len;
-	unsigned int flags;
 	char __data[0];
 };
 
@@ -77168,13 +85462,13 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_invalidatepage_op {
+struct trace_event_raw_ext4_invalidate_folio_op {
 	struct trace_entry ent;
 	dev_t dev;
 	ino_t ino;
 	long unsigned int index;
-	unsigned int offset;
-	unsigned int length;
+	size_t offset;
+	size_t length;
 	char __data[0];
 };
 
@@ -77411,27 +85705,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_direct_IO_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	int ret;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4__fallocate_mode {
 	struct trace_entry ent;
 	dev_t dev;
@@ -77595,46 +85868,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_ext_put_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	ext4_fsblk_t start;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_find_delalloc_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	int reverse;
-	int found;
-	ext4_lblk_t found_blk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_reserved_cluster_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4_ext_show_extent {
 	struct trace_entry ent;
 	dev_t dev;
@@ -77895,6 +86128,7 @@
 struct trace_event_raw_ext4_fc_commit_start {
 	struct trace_entry ent;
 	dev_t dev;
+	tid_t tid;
 	char __data[0];
 };
 
@@ -77906,37 +86140,26 @@
 	int num_fc;
 	int num_fc_ineligible;
 	int nblks_agg;
+	tid_t tid;
 	char __data[0];
 };
 
 struct trace_event_raw_ext4_fc_stats {
 	struct trace_entry ent;
 	dev_t dev;
-	struct ext4_sb_info *sbi;
-	int count;
+	unsigned int fc_ineligible_rc[9];
+	long unsigned int fc_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_numblks;
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_fc_track_create {
+struct trace_event_raw_ext4_fc_track_dentry {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_link {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_unlink {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -77944,7 +86167,9 @@
 struct trace_event_raw_ext4_fc_track_inode {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -77952,13 +86177,32 @@
 struct trace_event_raw_ext4_fc_track_range {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	long int start;
 	long int end;
 	int error;
 	char __data[0];
 };
 
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_ext4_other_inode_update_time {};
 
 struct trace_event_data_offsets_ext4_free_inode {};
@@ -77991,7 +86235,7 @@
 
 struct trace_event_data_offsets_ext4__page_op {};
 
-struct trace_event_data_offsets_ext4_invalidatepage_op {};
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
 
 struct trace_event_data_offsets_ext4_discard_blocks {};
 
@@ -78037,10 +86281,6 @@
 
 struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
 
-struct trace_event_data_offsets_ext4_direct_IO_enter {};
-
-struct trace_event_data_offsets_ext4_direct_IO_exit {};
-
 struct trace_event_data_offsets_ext4__fallocate_mode {};
 
 struct trace_event_data_offsets_ext4_fallocate_exit {};
@@ -78073,14 +86313,6 @@
 
 struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
 
-struct trace_event_data_offsets_ext4_ext_put_in_cache {};
-
-struct trace_event_data_offsets_ext4_ext_in_cache {};
-
-struct trace_event_data_offsets_ext4_find_delalloc_range {};
-
-struct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};
-
 struct trace_event_data_offsets_ext4_ext_show_extent {};
 
 struct trace_event_data_offsets_ext4_remove_blocks {};
@@ -78139,16 +86371,16 @@
 
 struct trace_event_data_offsets_ext4_fc_stats {};
 
-struct trace_event_data_offsets_ext4_fc_track_create {};
-
-struct trace_event_data_offsets_ext4_fc_track_link {};
-
-struct trace_event_data_offsets_ext4_fc_track_unlink {};
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
 
 struct trace_event_data_offsets_ext4_fc_track_inode {};
 
 struct trace_event_data_offsets_ext4_fc_track_range {};
 
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
 typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
 
 typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
@@ -78167,9 +86399,9 @@
 
 typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
 
-typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
-typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
 typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
 
@@ -78191,9 +86423,9 @@
 
 typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
 
-typedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
-typedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
 typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
 
@@ -78247,10 +86479,6 @@
 
 typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);
 
-typedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
-
 typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
 
 typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
@@ -78295,14 +86523,6 @@
 
 typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
 
-typedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);
-
 typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
 
 typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
@@ -78367,21 +86587,30 @@
 
 typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
 
-typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *);
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
 
-typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int);
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
 
 typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
 
-typedef void (*btf_trace_ext4_fc_track_create)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_link)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_unlink)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_inode)(void *, struct inode *, int);
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
 
-typedef void (*btf_trace_ext4_fc_track_range)(void *, struct inode *, long int, long int, int);
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long int, long int, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
 
 enum {
 	Opt_bsd_df = 0,
@@ -78390,79 +86619,75 @@
 	Opt_nogrpid = 3,
 	Opt_resgid = 4,
 	Opt_resuid = 5,
-	Opt_sb = 6,
-	Opt_err_cont = 7,
-	Opt_err_panic = 8,
-	Opt_err_ro = 9,
-	Opt_nouid32 = 10,
-	Opt_debug = 11,
-	Opt_removed = 12,
-	Opt_user_xattr = 13,
-	Opt_nouser_xattr = 14,
-	Opt_acl = 15,
-	Opt_noacl = 16,
-	Opt_auto_da_alloc = 17,
-	Opt_noauto_da_alloc = 18,
-	Opt_noload = 19,
-	Opt_commit = 20,
-	Opt_min_batch_time = 21,
-	Opt_max_batch_time = 22,
-	Opt_journal_dev = 23,
-	Opt_journal_path = 24,
-	Opt_journal_checksum = 25,
-	Opt_journal_async_commit = 26,
-	Opt_abort = 27,
-	Opt_data_journal = 28,
-	Opt_data_ordered = 29,
-	Opt_data_writeback = 30,
-	Opt_data_err_abort = 31,
-	Opt_data_err_ignore = 32,
-	Opt_test_dummy_encryption = 33,
-	Opt_inlinecrypt = 34,
-	Opt_usrjquota = 35,
-	Opt_grpjquota = 36,
-	Opt_offusrjquota = 37,
-	Opt_offgrpjquota = 38,
-	Opt_jqfmt_vfsold = 39,
-	Opt_jqfmt_vfsv0 = 40,
-	Opt_jqfmt_vfsv1 = 41,
-	Opt_quota = 42,
-	Opt_noquota = 43,
-	Opt_barrier = 44,
-	Opt_nobarrier = 45,
-	Opt_err___2 = 46,
-	Opt_usrquota = 47,
-	Opt_grpquota = 48,
-	Opt_prjquota = 49,
-	Opt_i_version = 50,
-	Opt_dax = 51,
-	Opt_dax_always = 52,
-	Opt_dax_inode = 53,
-	Opt_dax_never = 54,
-	Opt_stripe = 55,
-	Opt_delalloc = 56,
-	Opt_nodelalloc = 57,
-	Opt_warn_on_error = 58,
-	Opt_nowarn_on_error = 59,
-	Opt_mblk_io_submit = 60,
-	Opt_lazytime = 61,
-	Opt_nolazytime = 62,
-	Opt_debug_want_extra_isize = 63,
-	Opt_nomblk_io_submit = 64,
-	Opt_block_validity = 65,
-	Opt_noblock_validity = 66,
-	Opt_inode_readahead_blks = 67,
-	Opt_journal_ioprio = 68,
-	Opt_dioread_nolock = 69,
-	Opt_dioread_lock = 70,
-	Opt_discard = 71,
-	Opt_nodiscard = 72,
-	Opt_init_itable = 73,
-	Opt_noinit_itable = 74,
-	Opt_max_dir_size_kb = 75,
-	Opt_nojournal_checksum = 76,
-	Opt_nombcache = 77,
-	Opt_prefetch_block_bitmaps = 78,
+	Opt_sb___2 = 6,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_nouser_xattr = 11,
+	Opt_acl = 12,
+	Opt_noacl = 13,
+	Opt_auto_da_alloc = 14,
+	Opt_noauto_da_alloc = 15,
+	Opt_noload = 16,
+	Opt_commit = 17,
+	Opt_min_batch_time = 18,
+	Opt_max_batch_time = 19,
+	Opt_journal_dev = 20,
+	Opt_journal_path = 21,
+	Opt_journal_checksum = 22,
+	Opt_journal_async_commit = 23,
+	Opt_abort = 24,
+	Opt_data_journal = 25,
+	Opt_data_ordered = 26,
+	Opt_data_writeback = 27,
+	Opt_data_err_abort = 28,
+	Opt_data_err_ignore = 29,
+	Opt_test_dummy_encryption = 30,
+	Opt_inlinecrypt = 31,
+	Opt_usrjquota = 32,
+	Opt_grpjquota = 33,
+	Opt_quota = 34,
+	Opt_noquota = 35,
+	Opt_barrier = 36,
+	Opt_nobarrier = 37,
+	Opt_err___2 = 38,
+	Opt_usrquota = 39,
+	Opt_grpquota = 40,
+	Opt_prjquota = 41,
+	Opt_i_version = 42,
+	Opt_dax = 43,
+	Opt_dax_always = 44,
+	Opt_dax_inode = 45,
+	Opt_dax_never = 46,
+	Opt_stripe = 47,
+	Opt_delalloc = 48,
+	Opt_nodelalloc = 49,
+	Opt_warn_on_error = 50,
+	Opt_nowarn_on_error = 51,
+	Opt_mblk_io_submit = 52,
+	Opt_debug_want_extra_isize = 53,
+	Opt_nomblk_io_submit = 54,
+	Opt_block_validity = 55,
+	Opt_noblock_validity = 56,
+	Opt_inode_readahead_blks = 57,
+	Opt_journal_ioprio = 58,
+	Opt_dioread_nolock = 59,
+	Opt_dioread_lock = 60,
+	Opt_discard = 61,
+	Opt_nodiscard = 62,
+	Opt_init_itable = 63,
+	Opt_noinit_itable = 64,
+	Opt_max_dir_size_kb = 65,
+	Opt_nojournal_checksum = 66,
+	Opt_nombcache = 67,
+	Opt_no_prefetch_block_bitmaps = 68,
+	Opt_mb_optimize_scan = 69,
+	Opt_errors = 70,
+	Opt_data = 71,
+	Opt_data_err = 72,
+	Opt_jqfmt = 73,
+	Opt_dax_type = 74,
 };
 
 struct mount_opts {
@@ -78471,10 +86696,34 @@
 	int flags;
 };
 
-struct ext4_sb_encodings {
-	__u16 magic;
-	char *name;
-	char *version;
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	int s_jquota_fmt;
+	short unsigned int qname_spec;
+	long unsigned int vals_s_flags;
+	long unsigned int mask_s_flags;
+	long unsigned int journal_devnum;
+	long unsigned int s_commit_interval;
+	long unsigned int s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	long unsigned int vals_s_mount_flags;
+	long unsigned int mask_s_mount_flags;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
 };
 
 struct ext4_mount_options {
@@ -78485,387 +86734,4206 @@
 	long unsigned int s_commit_interval;
 	u32 s_min_batch_time;
 	u32 s_max_batch_time;
-	int s_jquota_fmt;
-	char *s_qf_names[3];
 };
 
-enum {
-	attr_noop = 0,
-	attr_delayed_allocation_blocks = 1,
-	attr_session_write_kbytes = 2,
-	attr_lifetime_write_kbytes = 3,
-	attr_reserved_clusters = 4,
-	attr_inode_readahead = 5,
-	attr_trigger_test_error = 6,
-	attr_first_error_time = 7,
-	attr_last_error_time = 8,
-	attr_feature = 9,
-	attr_pointer_ui = 10,
-	attr_pointer_ul = 11,
-	attr_pointer_u64 = 12,
-	attr_pointer_u8 = 13,
-	attr_pointer_string = 14,
-	attr_pointer_atomic = 15,
-	attr_journal_task = 16,
+struct nfs_subversion {
+	struct module *owner;
+	struct file_system_type *nfs_fs;
+	const struct rpc_version *rpc_vers;
+	const struct nfs_rpc_ops *rpc_ops;
+	const struct super_operations *sops;
+	const struct xattr_handler **xattr;
+	struct list_head list;
 };
 
-enum {
-	ptr_explicit = 0,
-	ptr_ext4_sb_info_offset = 1,
-	ptr_ext4_super_block_offset = 2,
-};
-
-struct ext4_attr {
-	struct attribute attr;
-	short int attr_id;
-	short int attr_ptr;
-	short unsigned int attr_size;
-	union {
-		int offset;
-		void *explicit_ptr;
-	} u;
-};
-
-struct ext4_xattr_header {
-	__le32 h_magic;
-	__le32 h_refcount;
-	__le32 h_blocks;
-	__le32 h_hash;
-	__le32 h_checksum;
-	__u32 h_reserved[3];
-};
-
-struct ext4_xattr_block_find {
-	struct ext4_xattr_search s;
-	struct buffer_head *bh;
-};
-
-struct ext4_fc_tl {
-	__le16 fc_tag;
-	__le16 fc_len;
-};
-
-struct ext4_fc_head {
-	__le32 fc_features;
-	__le32 fc_tid;
-};
-
-struct ext4_fc_add_range {
-	__le32 fc_ino;
-	__u8 fc_ex[12];
-};
-
-struct ext4_fc_del_range {
-	__le32 fc_ino;
-	__le32 fc_lblk;
-	__le32 fc_len;
-};
-
-struct ext4_fc_dentry_info {
-	__le32 fc_parent_ino;
-	__le32 fc_ino;
-	u8 fc_dname[0];
-};
-
-struct ext4_fc_inode {
-	__le32 fc_ino;
-	__u8 fc_raw_inode[0];
-};
-
-struct ext4_fc_tail {
-	__le32 fc_tid;
-	__le32 fc_crc;
-};
-
-struct ext4_fc_dentry_update {
-	int fcd_op;
-	int fcd_parent;
-	int fcd_ino;
-	struct qstr fcd_name;
-	unsigned char fcd_iname[32];
-	struct list_head fcd_list;
-};
-
-struct __track_dentry_update_args {
+struct nfs_clone_mount {
+	struct super_block *sb;
 	struct dentry *dentry;
-	int op;
+	struct nfs_fattr *fattr;
+	unsigned int inherited_bsize;
 };
 
-struct __track_range_args {
-	ext4_lblk_t start;
-	ext4_lblk_t end;
+struct nfs_fs_context {
+	bool internal;
+	bool skip_reconfig_option_check;
+	bool need_mount;
+	bool sloppy;
+	unsigned int flags;
+	unsigned int rsize;
+	unsigned int wsize;
+	unsigned int timeo;
+	unsigned int retrans;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namlen;
+	unsigned int options;
+	unsigned int bsize;
+	struct nfs_auth_info auth_info;
+	rpc_authflavor_t selected_flavor;
+	char *client_address;
+	unsigned int version;
+	unsigned int minorversion;
+	char *fscache_uniq;
+	short unsigned int protofamily;
+	short unsigned int mountfamily;
+	bool has_sec_mnt_opts;
+	struct {
+		union {
+			struct sockaddr address;
+			struct __kernel_sockaddr_storage _address;
+		};
+		size_t addrlen;
+		char *hostname;
+		u32 version;
+		int port;
+		short unsigned int protocol;
+	} mount_server;
+	struct {
+		union {
+			struct sockaddr address;
+			struct __kernel_sockaddr_storage _address;
+		};
+		size_t addrlen;
+		char *hostname;
+		char *export_path;
+		int port;
+		short unsigned int protocol;
+		short unsigned int nconnect;
+		short unsigned int max_connect;
+		short unsigned int export_path_len;
+	} nfs_server;
+	struct nfs_fh *mntfh;
+	struct nfs_server *server;
+	struct nfs_subversion *nfs_mod;
+	struct nfs_clone_mount clone_data;
 };
 
-struct dentry_info_args {
-	int parent_ino;
-	int dname_len;
-	int ino;
-	int inode_len;
-	char *dname;
+struct nfs3_getaclargs {
+	struct nfs_fh *fh;
+	int mask;
+	struct page **pages;
 };
 
-typedef struct {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-} ext4_acl_entry;
-
-typedef struct {
-	__le32 a_version;
-} ext4_acl_header;
-
-struct commit_header {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-	unsigned char h_chksum_type;
-	unsigned char h_chksum_size;
-	unsigned char h_padding[2];
-	__be32 h_chksum[8];
-	__be64 h_commit_sec;
-	__be32 h_commit_nsec;
+struct nfs3_setaclargs {
+	struct inode *inode;
+	int mask;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
+	size_t len;
+	unsigned int npages;
+	struct page **pages;
 };
 
-struct journal_block_tag3_s {
-	__be32 t_blocknr;
-	__be32 t_flags;
-	__be32 t_blocknr_high;
-	__be32 t_checksum;
+struct nfs3_getaclres {
+	struct nfs_fattr *fattr;
+	int mask;
+	unsigned int acl_access_count;
+	unsigned int acl_default_count;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
 };
 
-typedef struct journal_block_tag3_s journal_block_tag3_t;
+typedef int (*xfs_btree_bload_get_record_fn)(struct xfs_btree_cur *, void *);
 
-struct journal_block_tag_s {
-	__be32 t_blocknr;
-	__be16 t_checksum;
-	__be16 t_flags;
-	__be32 t_blocknr_high;
+typedef int (*xfs_btree_bload_claim_block_fn)(struct xfs_btree_cur *, union xfs_btree_ptr *, void *);
+
+typedef size_t (*xfs_btree_bload_iroot_size_fn)(struct xfs_btree_cur *, unsigned int, void *);
+
+struct xfs_btree_bload {
+	xfs_btree_bload_get_record_fn get_record;
+	xfs_btree_bload_claim_block_fn claim_block;
+	xfs_btree_bload_iroot_size_fn iroot_size;
+	uint64_t nr_records;
+	int leaf_slack;
+	int node_slack;
+	uint64_t nr_blocks;
+	unsigned int btree_height;
 };
 
-typedef struct journal_block_tag_s journal_block_tag_t;
+typedef enum {
+	XFS_LOOKUP_EQi = 0,
+	XFS_LOOKUP_LEi = 1,
+	XFS_LOOKUP_GEi = 2,
+} xfs_lookup_t;
 
-struct jbd2_journal_block_tail {
-	__be32 t_checksum;
+typedef struct xfs_inobt_rec_incore xfs_inobt_rec_incore_t;
+
+typedef int (*xfs_btree_query_range_fn)(struct xfs_btree_cur *, const union xfs_btree_rec *, void *);
+
+struct xfs_icluster {
+	bool deleted;
+	xfs_ino_t first_ino;
+	uint64_t alloc;
 };
 
-struct jbd2_journal_revoke_header_s {
-	journal_header_t r_header;
-	__be32 r_count;
+struct xfs_ialloc_count_inodes {
+	xfs_agino_t count;
+	xfs_agino_t freecount;
 };
 
-typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+typedef int (*xfs_iwalk_fn)(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, void *);
 
-struct recovery_info {
-	tid_t start_transaction;
-	tid_t end_transaction;
-	int nr_replays;
-	int nr_revokes;
-	int nr_revoke_hits;
+typedef int (*xfs_inobt_walk_fn)(struct xfs_mount *, struct xfs_trans *, xfs_agnumber_t, const struct xfs_inobt_rec_incore *, void *);
+
+struct xfs_pwork;
+
+typedef int (*xfs_pwork_work_fn)(struct xfs_mount *, struct xfs_pwork *);
+
+struct xfs_pwork_ctl;
+
+struct xfs_pwork {
+	struct work_struct work;
+	struct xfs_pwork_ctl *pctl;
 };
 
-struct jbd2_revoke_table_s {
-	int hash_size;
-	int hash_shift;
-	struct list_head *hash_table;
+struct xfs_pwork_ctl {
+	struct workqueue_struct *wq;
+	struct xfs_mount *mp;
+	xfs_pwork_work_fn work_fn;
+	struct wait_queue_head poll_wait;
+	atomic_t nr_work;
+	int error;
 };
 
-struct jbd2_revoke_record_s {
-	struct list_head hash;
-	tid_t sequence;
-	long long unsigned int blocknr;
+struct xfs_iwalk_ag {
+	struct xfs_pwork pwork;
+	struct xfs_mount *mp;
+	struct xfs_trans *tp;
+	struct xfs_perag *pag;
+	xfs_ino_t startino;
+	xfs_ino_t lastino;
+	struct xfs_inobt_rec_incore *recs;
+	unsigned int sz_recs;
+	unsigned int nr_recs;
+	xfs_iwalk_fn iwalk_fn;
+	xfs_inobt_walk_fn inobt_walk_fn;
+	void *data;
+	unsigned int trim_start: 1;
+	unsigned int skip_empty: 1;
+	unsigned int drop_trans: 1;
 };
 
-struct trace_event_raw_jbd2_checkpoint {
+struct xfs_map_extent {
+	uint64_t me_owner;
+	uint64_t me_startblock;
+	uint64_t me_startoff;
+	uint32_t me_len;
+	uint32_t me_flags;
+};
+
+struct xfs_bui_log_format {
+	uint16_t bui_type;
+	uint16_t bui_size;
+	uint32_t bui_nextents;
+	uint64_t bui_id;
+	struct xfs_map_extent bui_extents[0];
+};
+
+struct xfs_bud_log_format {
+	uint16_t bud_type;
+	uint16_t bud_size;
+	uint32_t __pad;
+	uint64_t bud_bui_id;
+};
+
+struct xfs_bui_log_item {
+	struct xfs_log_item bui_item;
+	atomic_t bui_refcount;
+	atomic_t bui_next_extent;
+	struct xfs_bui_log_format bui_format;
+};
+
+struct xfs_bud_log_item {
+	struct xfs_log_item bud_item;
+	struct xfs_bui_log_item *bud_buip;
+	struct xfs_bud_log_format bud_format;
+};
+
+enum xfs_bmap_intent_type {
+	XFS_BMAP_MAP = 1,
+	XFS_BMAP_UNMAP = 2,
+};
+
+struct xfs_bmap_intent {
+	struct list_head bi_list;
+	enum xfs_bmap_intent_type bi_type;
+	int bi_whichfork;
+	struct xfs_inode *bi_owner;
+	struct xfs_bmbt_irec bi_bmap;
+};
+
+struct xfs_acl_entry {
+	__be32 ae_tag;
+	__be32 ae_id;
+	__be16 ae_perm;
+	__be16 ae_pad;
+};
+
+struct xfs_acl {
+	__be32 acl_cnt;
+	struct xfs_acl_entry acl_entry[0];
+};
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+};
+
+enum crypto_attr_type_t {
+	CRYPTOCFGA_UNSPEC = 0,
+	CRYPTOCFGA_PRIORITY_VAL = 1,
+	CRYPTOCFGA_REPORT_LARVAL = 2,
+	CRYPTOCFGA_REPORT_HASH = 3,
+	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
+	CRYPTOCFGA_REPORT_AEAD = 5,
+	CRYPTOCFGA_REPORT_COMPRESS = 6,
+	CRYPTOCFGA_REPORT_RNG = 7,
+	CRYPTOCFGA_REPORT_CIPHER = 8,
+	CRYPTOCFGA_REPORT_AKCIPHER = 9,
+	CRYPTOCFGA_REPORT_KPP = 10,
+	CRYPTOCFGA_REPORT_ACOMP = 11,
+	CRYPTOCFGA_STAT_LARVAL = 12,
+	CRYPTOCFGA_STAT_HASH = 13,
+	CRYPTOCFGA_STAT_BLKCIPHER = 14,
+	CRYPTOCFGA_STAT_AEAD = 15,
+	CRYPTOCFGA_STAT_COMPRESS = 16,
+	CRYPTOCFGA_STAT_RNG = 17,
+	CRYPTOCFGA_STAT_CIPHER = 18,
+	CRYPTOCFGA_STAT_AKCIPHER = 19,
+	CRYPTOCFGA_STAT_KPP = 20,
+	CRYPTOCFGA_STAT_ACOMP = 21,
+	__CRYPTOCFGA_MAX = 22,
+};
+
+struct crypto_report_comp {
+	char type[64];
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	void *__ctx[0];
+};
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	struct crypto_alg base;
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct trace_event_raw_block_buffer {
 	struct trace_entry ent;
 	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	char rwbs[8];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+struct xz_dec;
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
+	struct list_head list;
+	long unsigned int state;
+	int weight;
+	irq_poll_fn *poll;
+};
+
+enum {
+	IRQ_POLL_F_SCHED = 0,
+	IRQ_POLL_F_DISABLE = 1,
+};
+
+struct fprop_local_single {
+	long unsigned int events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct pci_dynid {
+	struct list_head node;
+	struct pci_device_id id;
+};
+
+struct drv_dev_and_id {
+	struct pci_driver *drv;
+	struct pci_dev *dev;
+	const struct pci_device_id *id;
+};
+
+struct acpi_device;
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct fbcon_display {
+	const u_char *fontdata;
+	int userfont;
+	u_short inverse;
+	short int yscroll;
+	int vrows;
+	int cursor_shape;
+	int con_rotate;
+	u32 xres_virtual;
+	u32 yres_virtual;
+	u32 height;
+	u32 width;
+	u32 bits_per_pixel;
+	u32 grayscale;
+	u32 nonstd;
+	u32 accel_flags;
+	u32 rotate;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	const struct fb_videomode *mode;
+};
+
+struct fbcon_ops {
+	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
+	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
+	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
+	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
+	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
+	int (*update_start)(struct fb_info *);
+	int (*rotate_font)(struct fb_info *, struct vc_data *);
+	struct fb_var_screeninfo var;
+	struct delayed_work cursor_work;
+	struct fb_cursor cursor_state;
+	struct fbcon_display *p;
+	struct fb_info *info;
+	int currcon;
+	int cur_blink_jiffies;
+	int cursor_flash;
+	int cursor_reset;
+	int blank_state;
+	int graphics;
+	int save_graphics;
+	bool initialized;
+	int rotate;
+	int cur_rotate;
+	char *cursor_data;
+	u8 *fontbuffer;
+	u8 *fontdata;
+	u8 *cursor_src;
+	u32 cursor_size;
+	u32 fd_size;
+};
+
+enum {
+	FBCON_LOGO_CANSHOW = -1,
+	FBCON_LOGO_DRAW = -2,
+	FBCON_LOGO_DONTSHOW = -3,
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+struct sysrq_key_op {
+	void (* const handler)(int);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	long unsigned int key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	long unsigned int reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+struct nd_cmd_get_config_data_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u32 status;
+	__u8 out_buf[0];
+};
+
+enum nvdimm_security_bits {
+	NVDIMM_SECURITY_DISABLED = 0,
+	NVDIMM_SECURITY_UNLOCKED = 1,
+	NVDIMM_SECURITY_LOCKED = 2,
+	NVDIMM_SECURITY_FROZEN = 3,
+	NVDIMM_SECURITY_OVERWRITE = 4,
+};
+
+struct nd_label_id {
+	char id[50];
+};
+
+struct dma_fence_array;
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct dma_fence_array {
+	struct dma_fence base;
+	spinlock_t lock;
+	unsigned int num_fences;
+	atomic_t num_pending;
+	struct dma_fence **fences;
+	struct irq_work work;
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+struct scsi_eh_save {
 	int result;
-	char __data[0];
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
 };
 
-struct trace_event_raw_jbd2_commit {
+struct attribute_container {
+	struct list_head node;
+	struct klist containers;
+	struct class *class;
+	const struct attribute_group *grp;
+	struct device_attribute **attrs;
+	int (*match)(struct attribute_container *, struct device *);
+	long unsigned int flags;
+};
+
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
+};
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct srp_host_attrs {
+	atomic_t next_port_id;
+};
+
+struct srp_internal {
+	struct scsi_transport_template t;
+	struct srp_function_template *f;
+	struct device_attribute *host_attrs[1];
+	struct device_attribute *rport_attrs[9];
+	struct transport_container rport_attr_cont;
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct e1000_host_mng_command_header {
+	u8 command_id;
+	u8 checksum;
+	u16 reserved1;
+	u16 reserved2;
+	u16 command_length;
+};
+
+enum e1000_mng_mode {
+	e1000_mng_mode_none = 0,
+	e1000_mng_mode_asf = 1,
+	e1000_mng_mode_pt = 2,
+	e1000_mng_mode_ipmi = 3,
+	e1000_mng_mode_host_if_only = 4,
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct focaltech_finger_state {
+	bool active;
+	bool valid;
+	unsigned int x;
+	unsigned int y;
+};
+
+struct focaltech_hw_state {
+	struct focaltech_finger_state fingers[5];
+	unsigned int width;
+	bool pressed;
+};
+
+struct focaltech_data {
+	unsigned int x_max;
+	unsigned int y_max;
+	struct focaltech_hw_state state;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
+	int (*remove)(struct i2c_client *);
+	int (*probe_new)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const short unsigned int *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct ds1307_platform_data {
+	u8 trickle_charger_setup;
+};
+
+struct sensor_device_attribute {
+	struct device_attribute dev_attr;
+	int index;
+};
+
+enum ds_type {
+	unknown_ds_type = 0,
+	ds_1307 = 1,
+	ds_1308 = 2,
+	ds_1337 = 3,
+	ds_1338 = 4,
+	ds_1339 = 5,
+	ds_1340 = 6,
+	ds_1341 = 7,
+	ds_1388 = 8,
+	ds_3231 = 9,
+	m41t0 = 10,
+	m41t00 = 11,
+	m41t11 = 12,
+	mcp794xx = 13,
+	rx_8025 = 14,
+	rx_8130 = 15,
+	last_ds_type = 16,
+};
+
+struct regmap;
+
+struct ds1307 {
+	enum ds_type type;
+	struct device *dev;
+	struct regmap *regmap;
+	const char *name;
+	struct rtc_device *rtc;
+};
+
+struct chip_desc {
+	unsigned int alarm: 1;
+	u16 nvram_offset;
+	u16 nvram_size;
+	u8 offset;
+	u8 century_reg;
+	u8 century_enable_bit;
+	u8 century_bit;
+	u8 bbsqi_bit;
+	irq_handler_t irq_handler;
+	const struct rtc_class_ops *rtc_ops;
+	u16 trickle_charger_reg;
+	u8 (*do_trickle_setup)(struct ds1307 *, u32, bool);
+	bool requires_trickle_resistor;
+	bool charge_default;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+enum sensors {
+	FAN = 0,
+	TEMP = 1,
+	POWER_SUPPLY = 2,
+	POWER_INPUT = 3,
+	CURRENT = 4,
+	ENERGY = 5,
+	MAX_SENSOR_TYPE = 6,
+};
+
+struct sensor_group {
+	const char *name;
+	struct attribute_group group;
+	u32 attr_count;
+	u32 hwmon_index;
+};
+
+struct sensor_group_data;
+
+struct sensor_data {
+	u32 id;
+	u32 hwmon_index;
+	u32 opal_index;
+	enum sensors type;
+	char label[64];
+	char name[32];
+	struct device_attribute dev_attr;
+	struct sensor_group_data *sgrp_data;
+};
+
+struct sensor_group_data {
+	struct mutex mutex;
+	u32 gid;
+	bool enable;
+};
+
+struct platform_data {
+	const struct attribute_group *attr_groups[7];
+	struct sensor_group_data *sgrp_data;
+	u32 sensors_count;
+	u32 nr_sensor_groups;
+};
+
+struct linear_c {
+	struct dm_dev *dev;
+	sector_t start;
+};
+
+enum dev_type {
+	DEV_UNKNOWN = 0,
+	DEV_X1 = 1,
+	DEV_X2 = 2,
+	DEV_X4 = 3,
+	DEV_X8 = 4,
+	DEV_X16 = 5,
+	DEV_X32 = 6,
+	DEV_X64 = 7,
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+enum mem_type {
+	MEM_EMPTY = 0,
+	MEM_RESERVED = 1,
+	MEM_UNKNOWN = 2,
+	MEM_FPM = 3,
+	MEM_EDO = 4,
+	MEM_BEDO = 5,
+	MEM_SDR = 6,
+	MEM_RDR = 7,
+	MEM_DDR = 8,
+	MEM_RDDR = 9,
+	MEM_RMBS = 10,
+	MEM_DDR2 = 11,
+	MEM_FB_DDR2 = 12,
+	MEM_RDDR2 = 13,
+	MEM_XDR = 14,
+	MEM_DDR3 = 15,
+	MEM_RDDR3 = 16,
+	MEM_LRDDR3 = 17,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
+};
+
+enum edac_type {
+	EDAC_UNKNOWN = 0,
+	EDAC_NONE = 1,
+	EDAC_RESERVED = 2,
+	EDAC_PARITY = 3,
+	EDAC_EC = 4,
+	EDAC_SECDED = 5,
+	EDAC_S2ECD2ED = 6,
+	EDAC_S4ECD4ED = 7,
+	EDAC_S8ECD8ED = 8,
+	EDAC_S16ECD16ED = 9,
+};
+
+enum scrub_type {
+	SCRUB_UNKNOWN = 0,
+	SCRUB_NONE = 1,
+	SCRUB_SW_PROG = 2,
+	SCRUB_SW_SRC = 3,
+	SCRUB_SW_PROG_SRC = 4,
+	SCRUB_SW_TUNABLE = 5,
+	SCRUB_HW_PROG = 6,
+	SCRUB_HW_SRC = 7,
+	SCRUB_HW_PROG_SRC = 8,
+	SCRUB_HW_TUNABLE = 9,
+};
+
+enum edac_mc_layer_type {
+	EDAC_MC_LAYER_BRANCH = 0,
+	EDAC_MC_LAYER_CHANNEL = 1,
+	EDAC_MC_LAYER_SLOT = 2,
+	EDAC_MC_LAYER_CHIP_SELECT = 3,
+	EDAC_MC_LAYER_ALL_MEM = 4,
+};
+
+struct edac_mc_layer {
+	enum edac_mc_layer_type type;
+	unsigned int size;
+	bool is_virt_csrow;
+};
+
+struct mem_ctl_info;
+
+struct dimm_info {
+	struct device dev;
+	char label[32];
+	unsigned int location[3];
+	struct mem_ctl_info *mci;
+	unsigned int idx;
+	u32 grain;
+	enum dev_type dtype;
+	enum mem_type mtype;
+	enum edac_type edac_mode;
+	u32 nr_pages;
+	unsigned int csrow;
+	unsigned int cschannel;
+	u16 smbios_handle;
+	u32 ce_count;
+	u32 ue_count;
+};
+
+struct mcidev_sysfs_attribute;
+
+struct edac_raw_error_desc {
+	char location[256];
+	char label[296];
+	long int grain;
+	u16 error_count;
+	enum hw_event_mc_err_type type;
+	int top_layer;
+	int mid_layer;
+	int low_layer;
+	long unsigned int page_frame_number;
+	long unsigned int offset_in_page;
+	long unsigned int syndrome;
+	const char *msg;
+	const char *other_detail;
+};
+
+struct csrow_info;
+
+struct mem_ctl_info {
+	struct device dev;
+	struct bus_type *bus;
+	struct list_head link;
+	struct module *owner;
+	long unsigned int mtype_cap;
+	long unsigned int edac_ctl_cap;
+	long unsigned int edac_cap;
+	long unsigned int scrub_cap;
+	enum scrub_type scrub_mode;
+	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
+	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
+	void (*edac_check)(struct mem_ctl_info *);
+	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
+	int mc_idx;
+	struct csrow_info **csrows;
+	unsigned int nr_csrows;
+	unsigned int num_cschannel;
+	unsigned int n_layers;
+	struct edac_mc_layer *layers;
+	bool csbased;
+	unsigned int tot_dimms;
+	struct dimm_info **dimms;
+	struct device *pdev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	u32 ce_noinfo_count;
+	u32 ue_noinfo_count;
+	u32 ue_mc;
+	u32 ce_mc;
+	struct completion complete;
+	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
+	struct delayed_work work;
+	struct edac_raw_error_desc error_desc;
+	int op_state;
+	struct dentry *debugfs;
+	u8 fake_inject_layer[3];
+	bool fake_inject_ue;
+	u16 fake_inject_count;
+};
+
+struct rank_info {
+	int chan_idx;
+	struct csrow_info *csrow;
+	struct dimm_info *dimm;
+	u32 ce_count;
+};
+
+struct csrow_info {
+	struct device dev;
+	long unsigned int first_page;
+	long unsigned int last_page;
+	long unsigned int page_mask;
+	int csrow_idx;
+	u32 ue_count;
+	u32 ce_count;
+	struct mem_ctl_info *mci;
+	u32 nr_channels;
+	struct rank_info **channels;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct hid_class_descriptor {
+	__u8 bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__((packed));
+
+struct hid_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdHID;
+	__u8 bCountryCode;
+	__u8 bNumDescriptors;
+	struct hid_class_descriptor desc[1];
+} __attribute__((packed));
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+struct ethtool_value {
+	__u32 cmd;
+	__u32 data;
+};
+
+enum tunable_type_id {
+	ETHTOOL_TUNABLE_UNSPEC = 0,
+	ETHTOOL_TUNABLE_U8 = 1,
+	ETHTOOL_TUNABLE_U16 = 2,
+	ETHTOOL_TUNABLE_U32 = 3,
+	ETHTOOL_TUNABLE_U64 = 4,
+	ETHTOOL_TUNABLE_STRING = 5,
+	ETHTOOL_TUNABLE_S8 = 6,
+	ETHTOOL_TUNABLE_S16 = 7,
+	ETHTOOL_TUNABLE_S32 = 8,
+	ETHTOOL_TUNABLE_S64 = 9,
+};
+
+struct ethtool_gstrings {
+	__u32 cmd;
+	__u32 string_set;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_sset_info {
+	__u32 cmd;
+	__u32 reserved;
+	__u64 sset_mask;
+	__u32 data[0];
+};
+
+struct ethtool_perm_addr {
+	__u32 cmd;
+	__u32 size;
+	__u8 data[0];
+};
+
+enum ethtool_flags {
+	ETH_FLAG_TXVLAN = 128,
+	ETH_FLAG_RXVLAN = 256,
+	ETH_FLAG_LRO = 32768,
+	ETH_FLAG_NTUPLE = 134217728,
+	ETH_FLAG_RXHASH = 268435456,
+};
+
+struct ethtool_rxfh {
+	__u32 cmd;
+	__u32 rss_context;
+	__u32 indir_size;
+	__u32 key_size;
+	__u8 hfunc;
+	__u8 rsvd8[3];
+	__u32 rsvd32;
+	__u32 rss_config[0];
+};
+
+struct ethtool_get_features_block {
+	__u32 available;
+	__u32 requested;
+	__u32 active;
+	__u32 never_changed;
+};
+
+struct ethtool_gfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_get_features_block features[0];
+};
+
+struct ethtool_set_features_block {
+	__u32 valid;
+	__u32 requested;
+};
+
+struct ethtool_sfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_set_features_block features[0];
+};
+
+enum ethtool_sfeatures_retval_bits {
+	ETHTOOL_F_UNSUPPORTED__BIT = 0,
+	ETHTOOL_F_WISH__BIT = 1,
+	ETHTOOL_F_COMPAT__BIT = 2,
+};
+
+struct ethtool_per_queue_op {
+	__u32 cmd;
+	__u32 sub_command;
+	__u32 queue_mask[128];
+	char data[0];
+};
+
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+struct flow_rule;
+
+struct ethtool_rx_flow_rule {
+	struct flow_rule *rule;
+	long unsigned int priv[0];
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_WAKE = 19,
+	FLOW_ACTION_QUEUE = 20,
+	FLOW_ACTION_SAMPLE = 21,
+	FLOW_ACTION_POLICE = 22,
+	FLOW_ACTION_CT = 23,
+	FLOW_ACTION_CT_METADATA = 24,
+	FLOW_ACTION_MPLS_PUSH = 25,
+	FLOW_ACTION_MPLS_POP = 26,
+	FLOW_ACTION_MPLS_MANGLE = 27,
+	FLOW_ACTION_GATE = 28,
+	FLOW_ACTION_PPPOE_PUSH = 29,
+	FLOW_ACTION_JUMP = 30,
+	FLOW_ACTION_PIPE = 31,
+	FLOW_ACTION_VLAN_PUSH_ETH = 32,
+	FLOW_ACTION_VLAN_POP_ETH = 33,
+	FLOW_ACTION_CONTINUE = 34,
+	NUM_FLOW_ACTIONS = 35,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+typedef void (*action_destr)(void *);
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+struct nf_flowtable;
+
+struct psample_group;
+
+struct action_gate_entry;
+
+struct flow_action_cookie;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			long unsigned int cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *cookie;
+};
+
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct ethtool_rx_flow_spec_input {
+	const struct ethtool_rx_flow_spec *fs;
+	u32 rss_ctx;
+};
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
+struct ethtool_link_usettings {
+	struct ethtool_link_settings base;
+	struct {
+		__u32 supported[3];
+		__u32 advertising[3];
+		__u32 lp_advertising[3];
+	} link_modes;
+};
+
+struct ethtool_rx_flow_key {
+	struct flow_dissector_key_basic basic;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+};
+
+struct ethtool_rx_flow_match {
+	struct flow_dissector dissector;
+	struct ethtool_rx_flow_key key;
+	struct ethtool_rx_flow_key mask;
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	long unsigned int last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block *tcpm_next;
+	possible_net_t tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	long unsigned int tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block *chain;
+};
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+typedef __kernel_clock_t clock_t;
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+};
+
+struct nf_bridge_frag_data;
+
+struct rpc_buffer {
+	size_t len;
+	char data[0];
+};
+
+struct sock_xprt {
+	struct rpc_xprt xprt;
+	struct socket *sock;
+	struct sock *inet;
+	struct file *file;
+	struct {
+		struct {
+			__be32 fraghdr;
+			__be32 xid;
+			__be32 calldir;
+		};
+		u32 offset;
+		u32 len;
+		long unsigned int copied;
+	} recv;
+	struct {
+		u32 offset;
+	} xmit;
+	long unsigned int sock_state;
+	struct delayed_work connect_worker;
+	struct work_struct error_worker;
+	struct work_struct recv_worker;
+	struct mutex recv_mutex;
+	struct __kernel_sockaddr_storage srcaddr;
+	short unsigned int srcport;
+	int xprt_err;
+	size_t rcvsize;
+	size_t sndsize;
+	struct rpc_timeout tcp_timeout;
+	void (*old_data_ready)(struct sock *);
+	void (*old_state_change)(struct sock *);
+	void (*old_write_space)(struct sock *);
+	void (*old_error_report)(struct sock *);
+};
+
+struct trace_event_raw_rpc_xdr_buf_class {
 	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
+	unsigned int task_id;
+	unsigned int client_id;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int msg_len;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_end_commit {
+struct trace_event_raw_rpc_clnt_class {
 	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	int head;
+	unsigned int client_id;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_submit_inode_data {
+struct trace_event_raw_rpc_clnt_new {
 	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
+	unsigned int client_id;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	u32 __data_loc_program;
+	u32 __data_loc_server;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_handle_start_class {
+struct trace_event_raw_rpc_clnt_new_err {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int requested_blocks;
+	int error;
+	u32 __data_loc_program;
+	u32 __data_loc_server;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_handle_extend {
+struct trace_event_raw_rpc_clnt_clone_err {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int buffer_credits;
-	int requested_blocks;
+	unsigned int client_id;
+	int error;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_handle_stats {
+struct trace_event_raw_rpc_task_status {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int interval;
-	int sync;
-	int requested_blocks;
-	int dirtied_blocks;
+	unsigned int task_id;
+	unsigned int client_id;
+	int status;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_run_stats {
+struct trace_event_raw_rpc_request {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int wait;
-	long unsigned int request_delay;
-	long unsigned int running;
-	long unsigned int locked;
-	long unsigned int flushing;
-	long unsigned int logging;
-	__u32 handle_count;
-	__u32 blocks;
-	__u32 blocks_logged;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	bool async;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_checkpoint_stats {
+struct trace_event_raw_rpc_task_running {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int chp_time;
-	__u32 forced_to_close;
-	__u32 written;
-	__u32 dropped;
+	unsigned int task_id;
+	unsigned int client_id;
+	const void *action;
+	long unsigned int runstate;
+	int status;
+	short unsigned int flags;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_update_log_tail {
+struct trace_event_raw_rpc_task_queued {
 	struct trace_entry ent;
-	dev_t dev;
-	tid_t tail_sequence;
-	tid_t first_tid;
-	long unsigned int block_nr;
-	long unsigned int freed;
+	unsigned int task_id;
+	unsigned int client_id;
+	long unsigned int timeout;
+	long unsigned int runstate;
+	int status;
+	short unsigned int flags;
+	u32 __data_loc_q_name;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_write_superblock {
+struct trace_event_raw_rpc_failure {
 	struct trace_entry ent;
-	dev_t dev;
-	int write_op;
+	unsigned int task_id;
+	unsigned int client_id;
 	char __data[0];
 };
 
-struct trace_event_raw_jbd2_lock_buffer_stall {
+struct trace_event_raw_rpc_reply_event {
 	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int stall_ms;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 __data_loc_progname;
+	u32 version;
+	u32 __data_loc_procname;
+	u32 __data_loc_servername;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_jbd2_checkpoint {};
-
-struct trace_event_data_offsets_jbd2_commit {};
-
-struct trace_event_data_offsets_jbd2_end_commit {};
-
-struct trace_event_data_offsets_jbd2_submit_inode_data {};
-
-struct trace_event_data_offsets_jbd2_handle_start_class {};
-
-struct trace_event_data_offsets_jbd2_handle_extend {};
-
-struct trace_event_data_offsets_jbd2_handle_stats {};
-
-struct trace_event_data_offsets_jbd2_run_stats {};
-
-struct trace_event_data_offsets_jbd2_checkpoint_stats {};
-
-struct trace_event_data_offsets_jbd2_update_log_tail {};
-
-struct trace_event_data_offsets_jbd2_write_superblock {};
-
-struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
-
-typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
-
-typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
-
-typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
-
-typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
-
-typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
-
-typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
-
-struct jbd2_stats_proc_session {
-	journal_t *journal;
-	struct transaction_stats_s *stats;
-	int start;
-	int max;
+struct trace_event_raw_rpc_buf_alloc {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	size_t callsize;
+	size_t recvsize;
+	int status;
+	char __data[0];
 };
 
-struct ramfs_mount_opts {
-	umode_t mode;
+struct trace_event_raw_rpc_call_rpcerror {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int tk_status;
+	int rpc_status;
+	char __data[0];
 };
 
-struct ramfs_fs_info {
-	struct ramfs_mount_opts mount_opts;
+struct trace_event_raw_rpc_stats_latency {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int version;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
+	long unsigned int backlog;
+	long unsigned int rtt;
+	long unsigned int execute;
+	char __data[0];
 };
 
-enum ramfs_param {
-	Opt_mode___3 = 0,
+struct trace_event_raw_rpc_xdr_overflow {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	size_t requested;
+	const void *end;
+	const void *p;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int len;
+	u32 __data_loc_progname;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xdr_alignment {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	size_t offset;
+	unsigned int copied;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int len;
+	u32 __data_loc_progname;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_socket_event {
+	struct trace_entry ent;
+	unsigned int socket_state;
+	unsigned int sock_state;
+	long long unsigned int ino;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_xs_socket_event_done {
+	struct trace_entry ent;
+	int error;
+	unsigned int socket_state;
+	unsigned int sock_state;
+	long long unsigned int ino;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_socket_nospace {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int total;
+	unsigned int remaining;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xprt_lifetime_class {
+	struct trace_entry ent;
+	long unsigned int state;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xprt_event {
+	struct trace_entry ent;
+	u32 xid;
+	int status;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_transmit {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seqno;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_retransmit {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int ntrans;
+	int version;
+	long unsigned int timeout;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_ping {
+	struct trace_entry ent;
+	int status;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_writelock_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int snd_task_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_cong_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int snd_task_id;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	bool wait;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_reserve {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_data_ready {
+	struct trace_entry ent;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_stream_read_data {
+	struct trace_entry ent;
+	ssize_t err;
+	size_t total;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_stream_read_request {
+	struct trace_entry ent;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	u32 xid;
+	long unsigned int copied;
+	unsigned int reclen;
+	unsigned int offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_getport {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int program;
+	unsigned int version;
+	int protocol;
+	unsigned int bind_version;
+	u32 __data_loc_servername;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_setport {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int status;
+	short unsigned int port;
+	char __data[0];
+};
+
+struct trace_event_raw_pmap_register {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	int protocol;
+	unsigned int port;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_register {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	u32 __data_loc_addr;
+	u32 __data_loc_netid;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_unregister {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	u32 __data_loc_netid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xdr_msg_class {
+	struct trace_entry ent;
+	u32 xid;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int msg_len;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xdr_buf_class {
+	struct trace_entry ent;
+	u32 xid;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int msg_len;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_authenticate {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int svc_status;
+	long unsigned int auth_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_process {
+	struct trace_entry ent;
+	u32 xid;
+	u32 vers;
+	u32 proc;
+	u32 __data_loc_service;
+	u32 __data_loc_procedure;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_rqst_event {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_rqst_status {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	int status;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_stats_latency {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int execute;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_create_err {
+	struct trace_entry ent;
+	long int error;
+	u32 __data_loc_program;
+	u32 __data_loc_protocol;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_enqueue {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_dequeue {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	long unsigned int wakeup;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_event {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_accept {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	u32 __data_loc_protocol;
+	u32 __data_loc_service;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_wake_up {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_alloc_arg_err {
+	struct trace_entry ent;
+	unsigned int requested;
+	unsigned int allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_deferred_event {
+	struct trace_entry ent;
+	const void *dr;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_new_socket {
+	struct trace_entry ent;
+	long unsigned int type;
+	long unsigned int family;
+	bool listener;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_marker {
+	struct trace_entry ent;
+	unsigned int length;
+	bool last;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_class {
+	struct trace_entry ent;
+	ssize_t result;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_tcp_recv_short {
+	struct trace_entry ent;
+	u32 expected;
+	u32 received;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_tcp_state {
+	struct trace_entry ent;
+	long unsigned int socket_state;
+	long unsigned int sock_state;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_accept_class {
+	struct trace_entry ent;
+	long int status;
+	u32 __data_loc_service;
+	unsigned int netns_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_cache_event {
+	struct trace_entry ent;
+	const struct cache_head *h;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_register_class {
+	struct trace_entry ent;
+	u32 version;
+	long unsigned int family;
+	short unsigned int protocol;
+	short unsigned int port;
+	int error;
+	u32 __data_loc_program;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_unregister {
+	struct trace_entry ent;
+	u32 version;
+	int error;
+	u32 __data_loc_program;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpc_xdr_buf_class {};
+
+struct trace_event_data_offsets_rpc_clnt_class {};
+
+struct trace_event_data_offsets_rpc_clnt_new {
+	u32 addr;
+	u32 port;
+	u32 program;
+	u32 server;
+};
+
+struct trace_event_data_offsets_rpc_clnt_new_err {
+	u32 program;
+	u32 server;
+};
+
+struct trace_event_data_offsets_rpc_clnt_clone_err {};
+
+struct trace_event_data_offsets_rpc_task_status {};
+
+struct trace_event_data_offsets_rpc_request {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_rpc_task_running {};
+
+struct trace_event_data_offsets_rpc_task_queued {
+	u32 q_name;
+};
+
+struct trace_event_data_offsets_rpc_failure {};
+
+struct trace_event_data_offsets_rpc_reply_event {
+	u32 progname;
+	u32 procname;
+	u32 servername;
+};
+
+struct trace_event_data_offsets_rpc_buf_alloc {};
+
+struct trace_event_data_offsets_rpc_call_rpcerror {};
+
+struct trace_event_data_offsets_rpc_stats_latency {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_rpc_xdr_overflow {
+	u32 progname;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_rpc_xdr_alignment {
+	u32 progname;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_xs_socket_event {};
+
+struct trace_event_data_offsets_xs_socket_event_done {};
+
+struct trace_event_data_offsets_rpc_socket_nospace {};
+
+struct trace_event_data_offsets_rpc_xprt_lifetime_class {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_rpc_xprt_event {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xprt_transmit {};
+
+struct trace_event_data_offsets_xprt_retransmit {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_xprt_ping {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xprt_writelock_event {};
+
+struct trace_event_data_offsets_xprt_cong_event {};
+
+struct trace_event_data_offsets_xprt_reserve {};
+
+struct trace_event_data_offsets_xs_data_ready {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xs_stream_read_data {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xs_stream_read_request {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_rpcb_getport {
+	u32 servername;
+};
+
+struct trace_event_data_offsets_rpcb_setport {};
+
+struct trace_event_data_offsets_pmap_register {};
+
+struct trace_event_data_offsets_rpcb_register {
+	u32 addr;
+	u32 netid;
+};
+
+struct trace_event_data_offsets_rpcb_unregister {
+	u32 netid;
+};
+
+struct trace_event_data_offsets_svc_xdr_msg_class {};
+
+struct trace_event_data_offsets_svc_xdr_buf_class {};
+
+struct trace_event_data_offsets_svc_authenticate {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_process {
+	u32 service;
+	u32 procedure;
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svc_rqst_event {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_rqst_status {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_stats_latency {
+	u32 server;
+	u32 client;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_svc_xprt_create_err {
+	u32 program;
+	u32 protocol;
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svc_xprt_enqueue {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_dequeue {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_event {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_accept {
+	u32 server;
+	u32 client;
+	u32 protocol;
+	u32 service;
+};
+
+struct trace_event_data_offsets_svc_wake_up {};
+
+struct trace_event_data_offsets_svc_alloc_arg_err {};
+
+struct trace_event_data_offsets_svc_deferred_event {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_new_socket {};
+
+struct trace_event_data_offsets_svcsock_marker {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_class {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_tcp_recv_short {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_tcp_state {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_accept_class {
+	u32 service;
+};
+
+struct trace_event_data_offsets_cache_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_register_class {
+	u32 program;
+};
+
+struct trace_event_data_offsets_svc_unregister {
+	u32 program;
+};
+
+typedef void (*btf_trace_rpc_xdr_sendto)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_xdr_recvfrom)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_xdr_reply_pages)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_clnt_free)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_killall)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_shutdown)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_release)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_replace_xprt)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_replace_xprt_err)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_new)(void *, const struct rpc_clnt *, const struct rpc_xprt *, const char *, const char *);
+
+typedef void (*btf_trace_rpc_clnt_new_err)(void *, const char *, const char *, int);
+
+typedef void (*btf_trace_rpc_clnt_clone_err)(void *, const struct rpc_clnt *, int);
+
+typedef void (*btf_trace_rpc_call_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_connect_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_timeout_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_retry_refresh_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_refresh_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_request)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_task_begin)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_run_action)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sync_sleep)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sync_wake)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_complete)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_timeout)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_signalled)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_end)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_call_done)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sleep)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
+
+typedef void (*btf_trace_rpc_task_wakeup)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
+
+typedef void (*btf_trace_rpc_bad_callhdr)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_bad_verifier)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__prog_unavail)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__prog_mismatch)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__proc_unavail)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__garbage_args)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__unparsable)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__mismatch)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__stale_creds)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__bad_creds)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__auth_tooweak)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_prog_unavail_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_timeout_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_bind_version_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_unreachable_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_unrecognized_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_buf_alloc)(void *, const struct rpc_task *, int);
+
+typedef void (*btf_trace_rpc_call_rpcerror)(void *, const struct rpc_task *, int, int);
+
+typedef void (*btf_trace_rpc_stats_latency)(void *, const struct rpc_task *, ktime_t, ktime_t, ktime_t);
+
+typedef void (*btf_trace_rpc_xdr_overflow)(void *, const struct xdr_stream *, size_t);
+
+typedef void (*btf_trace_rpc_xdr_alignment)(void *, const struct xdr_stream *, size_t, unsigned int);
+
+typedef void (*btf_trace_rpc_socket_state_change)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_connect)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_error)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_reset_connection)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_close)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_shutdown)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_nospace)(void *, const struct rpc_rqst *, const struct sock_xprt *);
+
+typedef void (*btf_trace_xprt_create)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_connect)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_auto)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_done)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_force)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_destroy)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_timer)(void *, const struct rpc_xprt *, __be32, int);
+
+typedef void (*btf_trace_xprt_lookup_rqst)(void *, const struct rpc_xprt *, __be32, int);
+
+typedef void (*btf_trace_xprt_transmit)(void *, const struct rpc_rqst *, int);
+
+typedef void (*btf_trace_xprt_retransmit)(void *, const struct rpc_rqst *);
+
+typedef void (*btf_trace_xprt_ping)(void *, const struct rpc_xprt *, int);
+
+typedef void (*btf_trace_xprt_reserve_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_release_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_reserve_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_release_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_get_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_put_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_reserve)(void *, const struct rpc_rqst *);
+
+typedef void (*btf_trace_xs_data_ready)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xs_stream_read_data)(void *, struct rpc_xprt *, ssize_t, size_t);
+
+typedef void (*btf_trace_xs_stream_read_request)(void *, struct sock_xprt *);
+
+typedef void (*btf_trace_rpcb_getport)(void *, const struct rpc_clnt *, const struct rpc_task *, unsigned int);
+
+typedef void (*btf_trace_rpcb_setport)(void *, const struct rpc_task *, int, short unsigned int);
+
+typedef void (*btf_trace_pmap_register)(void *, u32, u32, int, short unsigned int);
+
+typedef void (*btf_trace_rpcb_register)(void *, u32, u32, const char *, const char *);
+
+typedef void (*btf_trace_rpcb_unregister)(void *, u32, u32, const char *);
+
+typedef void (*btf_trace_svc_xdr_recvfrom)(void *, const struct xdr_buf *);
+
+typedef void (*btf_trace_svc_xdr_sendto)(void *, __be32, const struct xdr_buf *);
+
+typedef void (*btf_trace_svc_authenticate)(void *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_svc_process)(void *, const struct svc_rqst *, const char *);
+
+typedef void (*btf_trace_svc_defer)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_drop)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_send)(void *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_svc_stats_latency)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_create_err)(void *, const char *, const char *, struct sockaddr *, size_t, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_enqueue)(void *, const struct svc_xprt *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_dequeue)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_no_write_space)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_close)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_detach)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_free)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_accept)(void *, const struct svc_xprt *, const char *);
+
+typedef void (*btf_trace_svc_wake_up)(void *, int);
+
+typedef void (*btf_trace_svc_alloc_arg_err)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_svc_defer_drop)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svc_defer_queue)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svc_defer_recv)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svcsock_new_socket)(void *, const struct socket *);
+
+typedef void (*btf_trace_svcsock_marker)(void *, const struct svc_xprt *, __be32);
+
+typedef void (*btf_trace_svcsock_udp_send)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_udp_recv)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_udp_recv_err)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_send)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_eagain)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_err)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_data_ready)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_write_space)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_short)(void *, const struct svc_xprt *, u32, u32);
+
+typedef void (*btf_trace_svcsock_tcp_state)(void *, const struct svc_xprt *, const struct socket *);
+
+typedef void (*btf_trace_svcsock_accept_err)(void *, const struct svc_xprt *, const char *, long int);
+
+typedef void (*btf_trace_svcsock_getpeername_err)(void *, const struct svc_xprt *, const char *, long int);
+
+typedef void (*btf_trace_cache_entry_expired)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_upcall)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_update)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_make_negative)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_no_listener)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_svc_register)(void *, const char *, const u32, const int, const short unsigned int, const short unsigned int, int);
+
+typedef void (*btf_trace_svc_noregister)(void *, const char *, const u32, const int, const short unsigned int, const short unsigned int, int);
+
+typedef void (*btf_trace_svc_unregister)(void *, const char *, const u32, int);
+
+struct trace_event_raw_ppc64_interrupt_class {
+	struct trace_entry ent;
+	struct pt_regs *regs;
+	char __data[0];
+};
+
+struct trace_event_raw_hcall_entry {
+	struct trace_entry ent;
+	long unsigned int opcode;
+	char __data[0];
+};
+
+struct trace_event_raw_hcall_exit {
+	struct trace_entry ent;
+	long unsigned int opcode;
+	long int retval;
+	char __data[0];
+};
+
+struct trace_event_raw_opal_entry {
+	struct trace_entry ent;
+	long unsigned int opcode;
+	char __data[0];
+};
+
+struct trace_event_raw_opal_exit {
+	struct trace_entry ent;
+	long unsigned int opcode;
+	long unsigned int retval;
+	char __data[0];
+};
+
+struct trace_event_raw_hash_fault {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int access;
+	long unsigned int trap;
+	char __data[0];
+};
+
+struct trace_event_raw_tlbie {
+	struct trace_entry ent;
+	long unsigned int lpid;
+	long unsigned int local;
+	long unsigned int rb;
+	long unsigned int rs;
+	long unsigned int ric;
+	long unsigned int prs;
+	long unsigned int r;
+	char __data[0];
+};
+
+struct trace_event_raw_tlbia {
+	struct trace_entry ent;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ppc64_interrupt_class {};
+
+struct trace_event_data_offsets_hcall_entry {};
+
+struct trace_event_data_offsets_hcall_exit {};
+
+struct trace_event_data_offsets_opal_entry {};
+
+struct trace_event_data_offsets_opal_exit {};
+
+struct trace_event_data_offsets_hash_fault {};
+
+struct trace_event_data_offsets_tlbie {};
+
+struct trace_event_data_offsets_tlbia {};
+
+typedef void (*btf_trace_irq_entry)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_irq_exit)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_timer_interrupt_entry)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_timer_interrupt_exit)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_doorbell_entry)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_doorbell_exit)(void *, struct pt_regs *);
+
+typedef void (*btf_trace_hcall_entry)(void *, long unsigned int, long unsigned int *);
+
+typedef void (*btf_trace_hcall_exit)(void *, long unsigned int, long int, long unsigned int *);
+
+typedef void (*btf_trace_opal_entry)(void *, long unsigned int, long unsigned int *);
+
+typedef void (*btf_trace_opal_exit)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_hash_fault)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_tlbie)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_tlbia)(void *, long unsigned int);
+
+struct ppc_debug_info {
+	__u32 version;
+	__u32 num_instruction_bps;
+	__u32 num_data_bps;
+	__u32 num_condition_regs;
+	__u32 data_bp_alignment;
+	__u32 sizeof_condition;
+	__u64 features;
+};
+
+struct ppc_hw_breakpoint {
+	__u32 version;
+	__u32 trigger_type;
+	__u32 addr_mode;
+	__u32 condition_mode;
+	__u64 addr;
+	__u64 addr2;
+	__u64 condition_value;
+};
+
+struct dt_cpu_feature {
+	const char *name;
+	uint32_t isa;
+	uint32_t usable_privilege;
+	uint32_t hv_support;
+	uint32_t os_support;
+	uint32_t hfscr_bit_nr;
+	uint32_t fscr_bit_nr;
+	uint32_t hwcap_bit_nr;
+	long unsigned int node;
+	int enabled;
+	int disabled;
+};
+
+struct dt_cpu_feature_match {
+	const char *name;
+	int (*enable)(struct dt_cpu_feature *);
+	u64 cpu_ftr_bit_mask;
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+struct copro_slb {
+	u64 esid;
+	u64 vsid;
+};
+
+enum spu_utilization_state {
+	SPU_UTIL_USER = 0,
+	SPU_UTIL_SYSTEM = 1,
+	SPU_UTIL_IOWAIT = 2,
+	SPU_UTIL_IDLE_LOADED = 3,
+	SPU_UTIL_MAX = 4,
+};
+
+struct ppc_pci_io {
+	u8 (*readb)(const volatile void *);
+	u16 (*readw)(const volatile void *);
+	u32 (*readl)(const volatile void *);
+	u16 (*readw_be)(const volatile void *);
+	u32 (*readl_be)(const volatile void *);
+	void (*writeb)(u8, volatile void *);
+	void (*writew)(u16, volatile void *);
+	void (*writel)(u32, volatile void *);
+	void (*writew_be)(u16, volatile void *);
+	void (*writel_be)(u32, volatile void *);
+	u64 (*readq)(const volatile void *);
+	u64 (*readq_be)(const volatile void *);
+	void (*writeq)(u64, volatile void *);
+	void (*writeq_be)(u64, volatile void *);
+	u8 (*inb)(long unsigned int);
+	u16 (*inw)(long unsigned int);
+	u32 (*inl)(long unsigned int);
+	void (*outb)(u8, long unsigned int);
+	void (*outw)(u16, long unsigned int);
+	void (*outl)(u32, long unsigned int);
+	void (*readsb)(const volatile void *, void *, long unsigned int);
+	void (*readsw)(const volatile void *, void *, long unsigned int);
+	void (*readsl)(const volatile void *, void *, long unsigned int);
+	void (*writesb)(volatile void *, const void *, long unsigned int);
+	void (*writesw)(volatile void *, const void *, long unsigned int);
+	void (*writesl)(volatile void *, const void *, long unsigned int);
+	void (*insb)(long unsigned int, void *, long unsigned int);
+	void (*insw)(long unsigned int, void *, long unsigned int);
+	void (*insl)(long unsigned int, void *, long unsigned int);
+	void (*outsb)(long unsigned int, const void *, long unsigned int);
+	void (*outsw)(long unsigned int, const void *, long unsigned int);
+	void (*outsl)(long unsigned int, const void *, long unsigned int);
+	void (*memset_io)(volatile void *, int, long unsigned int);
+	void (*memcpy_fromio)(void *, const volatile void *, long unsigned int);
+	void (*memcpy_toio)(volatile void *, const void *, long unsigned int);
+};
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct split_state {
+	u8 step;
+	u8 master;
+};
+
+struct hvcall_mpp_x_data {
+	long unsigned int coalesced_bytes;
+	long unsigned int pool_coalesced_bytes;
+	long unsigned int pool_purr_cycles;
+	long unsigned int pool_spurr_cycles;
+	long unsigned int reserved[3];
+};
+
+struct h_cpu_char_result {
+	u64 character;
+	u64 behaviour;
+};
+
+enum l1d_flush_type {
+	L1D_FLUSH_NONE = 1,
+	L1D_FLUSH_FALLBACK = 2,
+	L1D_FLUSH_ORI = 4,
+	L1D_FLUSH_MTTRIG = 8,
+};
+
+struct vio_pfo_op {
+	u64 flags;
+	s64 in;
+	s64 inlen;
+	s64 out;
+	s64 outlen;
+	u64 csbcpb;
+	void *done;
+	long unsigned int handle;
+	unsigned int timeout;
+	long int hcall_err;
+};
+
+struct vio_cmo_pool {
+	size_t size;
+	size_t free;
+};
+
+struct vio_cmo_dev_entry {
+	struct vio_dev *viodev;
+	struct list_head list;
+};
+
+struct vio_cmo {
+	spinlock_t lock;
+	struct delayed_work balance_q;
+	struct list_head device_list;
+	size_t entitled;
+	struct vio_cmo_pool reserve;
+	struct vio_cmo_pool excess;
+	size_t spare;
+	size_t min;
+	size_t desired;
+	size_t curr;
+	size_t high;
+};
+
+enum perf_event_powerpc_regs {
+	PERF_REG_POWERPC_R0 = 0,
+	PERF_REG_POWERPC_R1 = 1,
+	PERF_REG_POWERPC_R2 = 2,
+	PERF_REG_POWERPC_R3 = 3,
+	PERF_REG_POWERPC_R4 = 4,
+	PERF_REG_POWERPC_R5 = 5,
+	PERF_REG_POWERPC_R6 = 6,
+	PERF_REG_POWERPC_R7 = 7,
+	PERF_REG_POWERPC_R8 = 8,
+	PERF_REG_POWERPC_R9 = 9,
+	PERF_REG_POWERPC_R10 = 10,
+	PERF_REG_POWERPC_R11 = 11,
+	PERF_REG_POWERPC_R12 = 12,
+	PERF_REG_POWERPC_R13 = 13,
+	PERF_REG_POWERPC_R14 = 14,
+	PERF_REG_POWERPC_R15 = 15,
+	PERF_REG_POWERPC_R16 = 16,
+	PERF_REG_POWERPC_R17 = 17,
+	PERF_REG_POWERPC_R18 = 18,
+	PERF_REG_POWERPC_R19 = 19,
+	PERF_REG_POWERPC_R20 = 20,
+	PERF_REG_POWERPC_R21 = 21,
+	PERF_REG_POWERPC_R22 = 22,
+	PERF_REG_POWERPC_R23 = 23,
+	PERF_REG_POWERPC_R24 = 24,
+	PERF_REG_POWERPC_R25 = 25,
+	PERF_REG_POWERPC_R26 = 26,
+	PERF_REG_POWERPC_R27 = 27,
+	PERF_REG_POWERPC_R28 = 28,
+	PERF_REG_POWERPC_R29 = 29,
+	PERF_REG_POWERPC_R30 = 30,
+	PERF_REG_POWERPC_R31 = 31,
+	PERF_REG_POWERPC_NIP = 32,
+	PERF_REG_POWERPC_MSR = 33,
+	PERF_REG_POWERPC_ORIG_R3 = 34,
+	PERF_REG_POWERPC_CTR = 35,
+	PERF_REG_POWERPC_LINK = 36,
+	PERF_REG_POWERPC_XER = 37,
+	PERF_REG_POWERPC_CCR = 38,
+	PERF_REG_POWERPC_SOFTE = 39,
+	PERF_REG_POWERPC_TRAP = 40,
+	PERF_REG_POWERPC_DAR = 41,
+	PERF_REG_POWERPC_DSISR = 42,
+	PERF_REG_POWERPC_SIER = 43,
+	PERF_REG_POWERPC_MMCRA = 44,
+	PERF_REG_POWERPC_MMCR0 = 45,
+	PERF_REG_POWERPC_MMCR1 = 46,
+	PERF_REG_POWERPC_MMCR2 = 47,
+	PERF_REG_POWERPC_MMCR3 = 48,
+	PERF_REG_POWERPC_SIER2 = 49,
+	PERF_REG_POWERPC_SIER3 = 50,
+	PERF_REG_POWERPC_PMC1 = 51,
+	PERF_REG_POWERPC_PMC2 = 52,
+	PERF_REG_POWERPC_PMC3 = 53,
+	PERF_REG_POWERPC_PMC4 = 54,
+	PERF_REG_POWERPC_PMC5 = 55,
+	PERF_REG_POWERPC_PMC6 = 56,
+	PERF_REG_POWERPC_SDAR = 57,
+	PERF_REG_POWERPC_SIAR = 58,
+	PERF_REG_POWERPC_MAX = 45,
+	PERF_REG_EXTENDED_MAX = 59,
+};
+
+enum {
+	PM_CYC___3 = 30ULL,
+	PM_ICT_NOSLOT_CYC = 65784ULL,
+	PM_CMPLU_STALL___2 = 122964ULL,
+	PM_INST_CMPL___3 = 2ULL,
+	PM_BR_CMPL = 315486ULL,
+	PM_BR_MPRED_CMPL___3 = 262390ULL,
+	PM_LD_REF_L1___2 = 65788ULL,
+	PM_LD_MISS_L1_FIN = 180302ULL,
+	PM_LD_MISS_L1___3 = 254036ULL,
+	PM_LD_MISS_L1_ALT___2 = 262384ULL,
+	PM_ST_MISS_L1___3 = 196848ULL,
+	PM_L1_PREF___2 = 131156ULL,
+	PM_INST_FROM_L1___2 = 16512ULL,
+	PM_L1_ICACHE_MISS___3 = 131325ULL,
+	PM_L1_DEMAND_WRITE___2 = 16524ULL,
+	PM_IC_PREF_WRITE___2 = 18572ULL,
+	PM_DATA_FROM_L3___2 = 311362ULL,
+	PM_DATA_FROM_L3MISS___3 = 196862ULL,
+	PM_L2_ST___2 = 92288ULL,
+	PM_L2_ST_MISS___2 = 157824ULL,
+	PM_L3_PREF_ALL___2 = 319570ULL,
+	PM_DTLB_MISS___3 = 196860ULL,
+	PM_ITLB_MISS___3 = 262396ULL,
+	PM_RUN_INST_CMPL___3 = 327930ULL,
+	PM_RUN_INST_CMPL_ALT___2 = 262394ULL,
+	PM_RUN_CYC___3 = 393460ULL,
+	PM_RUN_CYC_ALT___2 = 131316ULL,
+	PM_INST_DISP___3 = 131314ULL,
+	PM_INST_DISP_ALT___3 = 196850ULL,
+	PM_BR_2PATH___2 = 131126ULL,
+	PM_BR_2PATH_ALT___2 = 262198ULL,
+	PM_MRK_ST_DONE_L2 = 65844ULL,
+	PM_RADIX_PWC_L1_HIT = 127062ULL,
+	PM_FLOP_CMPL___2 = 65780ULL,
+	PM_MRK_NTF_FIN = 131346ULL,
+	PM_RADIX_PWC_L2_HIT = 184356ULL,
+	PM_IFETCH_THROTTLE = 213086ULL,
+	PM_MRK_L2_TM_ST_ABORT_SISTER = 254300ULL,
+	PM_RADIX_PWC_L3_HIT = 258134ULL,
+	PM_RUN_CYC_SMT2_MODE = 196716ULL,
+	PM_TM_TX_PASS_RUN_INST = 319508ULL,
+	PM_DISP_HELD_SYNC_HOLD = 262204ULL,
+	PM_DTLB_MISS_16G = 114776ULL,
+	PM_DERAT_MISS_2M = 114778ULL,
+	PM_DTLB_MISS_2M = 114780ULL,
+	PM_MRK_DTLB_MISS_1G = 119132ULL,
+	PM_DTLB_MISS_4K = 180310ULL,
+	PM_DERAT_MISS_1G = 180314ULL,
+	PM_MRK_DERAT_MISS_2M = 184658ULL,
+	PM_MRK_DTLB_MISS_4K = 184662ULL,
+	PM_MRK_DTLB_MISS_16G = 184670ULL,
+	PM_DTLB_MISS_64K = 245846ULL,
+	PM_MRK_DERAT_MISS_1G = 250194ULL,
+	PM_MRK_DTLB_MISS_64K = 250198ULL,
+	PM_DTLB_MISS_16M = 311382ULL,
+	PM_DTLB_MISS_1G = 311386ULL,
+	PM_MRK_DTLB_MISS_16M = 311646ULL,
+	MEM_LOADS = 224210977248ULL,
+	MEM_STORES = 224345194976ULL,
+};
+
+struct trace_event_raw_irq_handler_entry {
+	struct trace_entry ent;
+	int irq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_handler_exit {
+	struct trace_entry ent;
+	int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq {
+	struct trace_entry ent;
+	unsigned int vec;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_handler_entry {
+	u32 name;
+};
+
+struct trace_event_data_offsets_irq_handler_exit {};
+
+struct trace_event_data_offsets_softirq {};
+
+typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
+
+typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
+
+typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
+
+struct tasklet_head {
+	struct tasklet_struct *head;
+	struct tasklet_struct **tail;
+};
+
+enum what {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+	struct ww_class *ww_class;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	long unsigned int stamp;
+	unsigned int acquired;
+	short unsigned int wounded;
+	short unsigned int is_wait_die;
+	unsigned int done_acquire;
+	struct ww_class *ww_class;
+	void *contending_lock;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+struct kexec_elf_info {
+	const char *buffer;
+	const struct elf64_hdr *ehdr;
+	const struct elf64_phdr *proghdrs;
+};
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	long unsigned int caller;
+	cpu_stop_fn_t fn;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct trace_export {
+	struct trace_export *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char *saved_cmdlines;
+};
+
+struct ftrace_stack {
+	long unsigned int calls[16384];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	long: 0;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	long unsigned int bitmap[0];
+};
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+struct bpf_cpumap_val {
+	__u32 qsize;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct bpf_cpu_map_entry;
+
+struct xdp_bulk_queue {
+	void *q[8];
+	struct list_head flush_node;
+	struct bpf_cpu_map_entry *obj;
+	unsigned int count;
+};
+
+struct bpf_cpu_map;
+
+struct bpf_cpu_map_entry {
+	u32 cpu;
+	int map_id;
+	struct xdp_bulk_queue *bulkq;
+	struct bpf_cpu_map *cmap;
+	struct ptr_ring *queue;
+	struct task_struct *kthread;
+	struct bpf_cpumap_val value;
+	struct bpf_prog *prog;
+	atomic_t refcnt;
+	struct callback_head rcu;
+	struct work_struct kthread_stop_wq;
+};
+
+struct bpf_cpu_map {
+	struct bpf_map map;
+	struct bpf_cpu_map_entry **cpu_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	enum lru_list lru;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char *buf;
+	local_t buf_idx;
+};
+
+struct nodemask_scratch {
+	nodemask_t mask1;
+	nodemask_t mask2;
+};
+
+struct sp_node {
+	struct rb_node nd;
+	long unsigned int start;
+	long unsigned int end;
+	struct mempolicy *policy;
+};
+
+typedef struct page *new_page_t(struct page *, long unsigned int);
+
+typedef void free_page_t(struct page *, long unsigned int);
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+struct mempolicy_operations {
+	int (*create)(struct mempolicy *, const nodemask_t *);
+	void (*rebind)(struct mempolicy *, const nodemask_t *);
+};
+
+struct queue_pages {
+	struct list_head *pagelist;
+	long unsigned int flags;
+	nodemask_t *nmask;
+	long unsigned int start;
+	long unsigned int end;
+	struct vm_area_struct *first;
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	short unsigned int d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct old_linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_offset;
+	short unsigned int d_namlen;
+	char d_name[1];
+};
+
+struct readdir_callback {
+	struct dir_context ctx;
+	struct old_linux_dirent *dirent;
+	int result;
+};
+
+struct linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	struct linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+struct pending_reservation {
+	struct rb_node rb_node;
+	ext4_lblk_t lclu;
+};
+
+struct rsvd_count {
+	int ndelonly;
+	bool first_do_lblk_found;
+	ext4_lblk_t first_do_lblk;
+	ext4_lblk_t last_do_lblk;
+	struct extent_status *left_es;
+	bool partial;
+	ext4_lblk_t lclu;
+};
+
+struct ext4_new_group_data {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 mdata_blocks;
+	__u32 free_clusters_count;
+};
+
+enum {
+	BLOCK_BITMAP = 0,
+	INODE_BITMAP = 1,
+	INODE_TABLE = 2,
+	GROUP_TABLE_COUNT = 3,
+};
+
+struct ext4_iloc {
+	struct buffer_head *bh;
+	long unsigned int offset;
+	ext4_group_t block_group;
+};
+
+struct ext4_rcu_ptr {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct ext4_new_flex_group_data {
+	struct ext4_new_group_data *groups;
+	__u16 *bg_flags;
+	ext4_group_t count;
+};
+
+typedef short unsigned int __kernel_uid16_t;
+
+typedef short unsigned int __kernel_gid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+struct ext2_inode {
+	__le16 i_mode;
+	__le16 i_uid;
+	__le32 i_size;
+	__le32 i_atime;
+	__le32 i_ctime;
+	__le32 i_mtime;
+	__le32 i_dtime;
+	__le16 i_gid;
+	__le16 i_links_count;
+	__le32 i_blocks;
+	__le32 i_flags;
+	union {
+		struct {
+			__le32 l_i_reserved1;
+		} linux1;
+		struct {
+			__le32 h_i_translator;
+		} hurd1;
+		struct {
+			__le32 m_i_reserved1;
+		} masix1;
+	} osd1;
+	__le32 i_block[15];
+	__le32 i_generation;
+	__le32 i_file_acl;
+	__le32 i_dir_acl;
+	__le32 i_faddr;
+	union {
+		struct {
+			__u8 l_i_frag;
+			__u8 l_i_fsize;
+			__u16 i_pad1;
+			__le16 l_i_uid_high;
+			__le16 l_i_gid_high;
+			__u32 l_i_reserved2;
+		} linux2;
+		struct {
+			__u8 h_i_frag;
+			__u8 h_i_fsize;
+			__le16 h_i_mode_high;
+			__le16 h_i_uid_high;
+			__le16 h_i_gid_high;
+			__le32 h_i_author;
+		} hurd2;
+		struct {
+			__u8 m_i_frag;
+			__u8 m_i_fsize;
+			__u16 m_pad1;
+			__u32 m_i_reserved2[2];
+		} masix2;
+	} osd2;
+};
+
+struct hugetlbfs_inode_info {
+	struct shared_policy policy;
+	struct inode vfs_inode;
+	unsigned int seals;
 };
 
 enum hugetlbfs_size_type {
@@ -78891,794 +90959,8523 @@
 enum hugetlb_param {
 	Opt_gid___4 = 0,
 	Opt_min_size = 1,
-	Opt_mode___4 = 2,
+	Opt_mode___3 = 2,
 	Opt_nr_inodes___2 = 3,
 	Opt_pagesize = 4,
 	Opt_size___2 = 5,
 	Opt_uid___3 = 6,
 };
 
-struct getdents_callback___2 {
-	struct dir_context ctx;
-	char *name;
-	u64 ino;
-	int found;
-	int sequence;
+enum {
+	FILEID_HIGH_OFF = 0,
+	FILEID_LOW_OFF = 1,
+	FILE_I_TYPE_OFF = 2,
+	EMBED_FH_OFF = 3,
 };
 
-typedef u16 wchar_t;
-
-typedef u32 unicode_t;
-
-struct nls_table {
-	const char *charset;
-	const char *alias;
-	int (*uni2char)(wchar_t, unsigned char *, int);
-	int (*char2uni)(const unsigned char *, int, wchar_t *);
-	const unsigned char *charset2lower;
-	const unsigned char *charset2upper;
-	struct module *owner;
-	struct nls_table *next;
-};
-
-enum utf16_endian {
-	UTF16_HOST_ENDIAN = 0,
-	UTF16_LITTLE_ENDIAN = 1,
-	UTF16_BIG_ENDIAN = 2,
-};
-
-struct utf8_table {
-	int cmask;
-	int cval;
-	int shift;
-	long int lmask;
-	long int lval;
-};
-
-struct utf8data;
-
-struct utf8cursor {
-	const struct utf8data *data;
-	const char *s;
-	const char *p;
-	const char *ss;
-	const char *sp;
-	unsigned int len;
-	unsigned int slen;
-	short int ccc;
-	short int nccc;
-	unsigned char hangul[12];
-};
-
-struct utf8data {
-	unsigned int maxage;
-	unsigned int offset;
-};
-
-typedef const unsigned char utf8trie_t;
-
-typedef const unsigned char utf8leaf_t;
-
-typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
-
-struct debugfs_fsdata {
-	const struct file_operations *real_fops;
-	refcount_t active_users;
-	struct completion active_users_drained;
-};
-
-struct debugfs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
+enum nfs4_client_state {
+	NFS4CLNT_MANAGER_RUNNING = 0,
+	NFS4CLNT_CHECK_LEASE = 1,
+	NFS4CLNT_LEASE_EXPIRED = 2,
+	NFS4CLNT_RECLAIM_REBOOT = 3,
+	NFS4CLNT_RECLAIM_NOGRACE = 4,
+	NFS4CLNT_DELEGRETURN = 5,
+	NFS4CLNT_SESSION_RESET = 6,
+	NFS4CLNT_LEASE_CONFIRM = 7,
+	NFS4CLNT_SERVER_SCOPE_MISMATCH = 8,
+	NFS4CLNT_PURGE_STATE = 9,
+	NFS4CLNT_BIND_CONN_TO_SESSION = 10,
+	NFS4CLNT_MOVED = 11,
+	NFS4CLNT_LEASE_MOVED = 12,
+	NFS4CLNT_DELEGATION_EXPIRED = 13,
+	NFS4CLNT_RUN_MANAGER = 14,
+	NFS4CLNT_MANAGER_AVAILABLE = 15,
+	NFS4CLNT_RECALL_RUNNING = 16,
+	NFS4CLNT_RECALL_ANY_LAYOUT_READ = 17,
+	NFS4CLNT_RECALL_ANY_LAYOUT_RW = 18,
+	NFS4CLNT_DELEGRETURN_DELAYED = 19,
 };
 
 enum {
-	Opt_uid___4 = 0,
-	Opt_gid___5 = 1,
-	Opt_mode___5 = 2,
-	Opt_err___3 = 3,
-};
-
-struct debugfs_fs_info {
-	struct debugfs_mount_opts mount_opts;
-};
-
-struct debugfs_blob_wrapper {
-	void *data;
-	long unsigned int size;
-};
-
-struct debugfs_reg32 {
-	char *name;
-	long unsigned int offset;
-};
-
-struct debugfs_regset32 {
-	const struct debugfs_reg32 *regs;
-	int nregs;
-	void *base;
-	struct device *dev;
-};
-
-struct debugfs_u32_array {
-	u32 *array;
-	u32 n_elements;
-};
-
-struct debugfs_devm_entry {
-	int (*read)(struct seq_file *, void *);
-	struct device *dev;
-};
-
-struct tracefs_dir_ops {
-	int (*mkdir)(const char *);
-	int (*rmdir)(const char *);
-};
-
-struct tracefs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-struct tracefs_fs_info {
-	struct tracefs_mount_opts mount_opts;
-};
-
-struct pstore_ftrace_record {
-	long unsigned int ip;
-	long unsigned int parent_ip;
-	u64 ts;
-};
-
-struct pstore_private {
-	struct list_head list;
-	struct dentry *dentry;
-	struct pstore_record *record;
-	size_t total_size;
-};
-
-struct pstore_ftrace_seq_data {
-	const void *ptr;
-	size_t off;
-	size_t size;
+	NFS_OWNER_RECLAIM_REBOOT = 0,
+	NFS_OWNER_RECLAIM_NOGRACE = 1,
 };
 
 enum {
-	Opt_kmsg_bytes = 0,
-	Opt_err___4 = 1,
+	LK_STATE_IN_USE = 0,
+	NFS_DELEGATED_STATE = 1,
+	NFS_OPEN_STATE = 2,
+	NFS_O_RDONLY_STATE = 3,
+	NFS_O_WRONLY_STATE = 4,
+	NFS_O_RDWR_STATE = 5,
+	NFS_STATE_RECLAIM_REBOOT = 6,
+	NFS_STATE_RECLAIM_NOGRACE = 7,
+	NFS_STATE_POSIX_LOCKS = 8,
+	NFS_STATE_RECOVERY_FAILED = 9,
+	NFS_STATE_MAY_NOTIFY_LOCK = 10,
+	NFS_STATE_CHANGE_WAIT = 11,
+	NFS_CLNT_DST_SSC_COPY_STATE = 12,
+	NFS_CLNT_SRC_SSC_COPY_STATE = 13,
+	NFS_SRV_SSC_COPY_STATE = 14,
 };
 
-struct pstore_zbackend {
-	int (*zbufsize)(size_t);
-	const char *name;
+enum nfs4_slot_tbl_state {
+	NFS4_SLOT_TBL_DRAINING = 0,
 };
 
-struct ipc64_perm {
-	__kernel_key_t key;
-	__kernel_uid_t uid;
-	__kernel_gid_t gid;
-	__kernel_uid_t cuid;
-	__kernel_gid_t cgid;
-	__kernel_mode_t mode;
-	unsigned int seq;
-	unsigned int __pad1;
-	long long unsigned int __unused1;
-	long long unsigned int __unused2;
+struct xfs_dir3_leaf_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 count;
+	__be16 stale;
+	__be32 pad;
 };
 
-typedef s32 compat_key_t;
-
-struct compat_ipc64_perm {
-	compat_key_t key;
-	__compat_uid_t uid;
-	__compat_gid_t gid;
-	__compat_uid_t cuid;
-	__compat_gid_t cgid;
-	compat_mode_t mode;
-	unsigned int seq;
-	unsigned int __pad2;
-	long unsigned int __unused1;
-	long unsigned int __unused2;
+struct xfs_dir3_leaf {
+	struct xfs_dir3_leaf_hdr hdr;
+	struct xfs_dir2_leaf_entry __ents[0];
 };
 
-struct compat_ipc_perm {
-	key_t key;
-	__compat_uid_t uid;
-	__compat_gid_t gid;
-	__compat_uid_t cuid;
-	__compat_gid_t cgid;
-	compat_mode_t mode;
-	short unsigned int seq;
+struct xfs_dir2_block_tail {
+	__be32 count;
+	__be32 stale;
 };
 
-struct ipc_perm {
-	__kernel_key_t key;
-	__kernel_uid_t uid;
-	__kernel_gid_t gid;
-	__kernel_uid_t cuid;
-	__kernel_gid_t cgid;
-	__kernel_mode_t mode;
-	short unsigned int seq;
+typedef struct xfs_dir2_block_tail xfs_dir2_block_tail_t;
+
+struct xfs_bmalloca {
+	struct xfs_trans *tp;
+	struct xfs_inode *ip;
+	struct xfs_bmbt_irec prev;
+	struct xfs_bmbt_irec got;
+	xfs_fileoff_t offset;
+	xfs_extlen_t length;
+	xfs_fsblock_t blkno;
+	struct xfs_btree_cur *cur;
+	struct xfs_iext_cursor icur;
+	int nallocs;
+	int logflags;
+	xfs_extlen_t total;
+	xfs_extlen_t minlen;
+	xfs_extlen_t minleft;
+	bool eof;
+	bool wasdel;
+	bool aeof;
+	bool conv;
+	int datatype;
+	uint32_t flags;
 };
 
-struct ipc_params {
-	key_t key;
-	int flg;
-	union {
-		size_t size;
-		int nsems;
-	} u;
+struct xfs_mru_cache_elem {
+	struct list_head list_node;
+	long unsigned int key;
 };
 
-struct ipc_ops {
-	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
-	int (*associate)(struct kern_ipc_perm *, int);
-	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+typedef void (*xfs_mru_cache_free_func_t)(void *, struct xfs_mru_cache_elem *);
+
+struct xfs_fstrm_item {
+	struct xfs_mru_cache_elem mru;
+	xfs_agnumber_t ag;
 };
 
-struct ipc_proc_iface {
-	const char *path;
-	const char *header;
-	int ids;
-	int (*show)(struct seq_file *, void *);
+enum xfs_fstrm_alloc {
+	XFS_PICK_USERDATA = 1,
+	XFS_PICK_LOWSPACE = 2,
 };
 
-struct ipc_proc_iter {
-	struct ipc_namespace *ns;
-	struct pid_namespace *pid_ns;
-	struct ipc_proc_iface *iface;
+typedef struct xfs_log_iovec xfs_log_iovec_t;
+
+struct xfs_extent {
+	xfs_fsblock_t ext_start;
+	xfs_extlen_t ext_len;
 };
 
-struct msg_msgseg;
+typedef struct xfs_extent xfs_extent_t;
 
-struct msg_msg {
-	struct list_head m_list;
-	long int m_type;
-	size_t m_ts;
-	struct msg_msgseg *next;
-	void *security;
+struct xfs_extent_32 {
+	uint64_t ext_start;
+	uint32_t ext_len;
+} __attribute__((packed));
+
+typedef struct xfs_extent_32 xfs_extent_32_t;
+
+struct xfs_extent_64 {
+	uint64_t ext_start;
+	uint32_t ext_len;
+	uint32_t ext_pad;
+};
+
+typedef struct xfs_extent_64 xfs_extent_64_t;
+
+struct xfs_efi_log_format {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_t efi_extents[1];
+};
+
+typedef struct xfs_efi_log_format xfs_efi_log_format_t;
+
+struct xfs_efi_log_format_32 {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_32_t efi_extents[1];
+} __attribute__((packed));
+
+typedef struct xfs_efi_log_format_32 xfs_efi_log_format_32_t;
+
+struct xfs_efi_log_format_64 {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_64_t efi_extents[1];
+};
+
+typedef struct xfs_efi_log_format_64 xfs_efi_log_format_64_t;
+
+struct xfs_efd_log_format {
+	uint16_t efd_type;
+	uint16_t efd_size;
+	uint32_t efd_nextents;
+	uint64_t efd_efi_id;
+	xfs_extent_t efd_extents[1];
+};
+
+typedef struct xfs_efd_log_format xfs_efd_log_format_t;
+
+struct xfs_efi_log_item {
+	struct xfs_log_item efi_item;
+	atomic_t efi_refcount;
+	atomic_t efi_next_extent;
+	xfs_efi_log_format_t efi_format;
+};
+
+struct xfs_efd_log_item {
+	struct xfs_log_item efd_item;
+	struct xfs_efi_log_item *efd_efip;
+	uint efd_next_extent;
+	xfs_efd_log_format_t efd_format;
+};
+
+struct xfs_extent_free_item {
+	struct list_head xefi_list;
+	uint64_t xefi_owner;
+	xfs_fsblock_t xefi_startblock;
+	xfs_extlen_t xefi_blockcount;
+	unsigned int xefi_flags;
 };
 
 struct msg_msgseg {
 	struct msg_msgseg *next;
 };
 
-typedef int __kernel_ipc_pid_t;
-
-struct msgbuf {
-	__kernel_long_t mtype;
-	char mtext[1];
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	void *__ctx[0];
 };
 
-struct msg;
-
-struct msqid_ds {
-	struct ipc_perm msg_perm;
-	struct msg *msg_first;
-	struct msg *msg_last;
-	__kernel_old_time_t msg_stime;
-	__kernel_old_time_t msg_rtime;
-	__kernel_old_time_t msg_ctime;
-	long unsigned int msg_lcbytes;
-	long unsigned int msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	__kernel_ipc_pid_t msg_lspid;
-	__kernel_ipc_pid_t msg_lrpid;
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	struct crypto_alg base;
 };
 
-struct msqid64_ds {
-	struct ipc64_perm msg_perm;
-	long int msg_stime;
-	long int msg_rtime;
-	long int msg_ctime;
-	long unsigned int msg_cbytes;
-	long unsigned int msg_qnum;
-	long unsigned int msg_qbytes;
-	__kernel_pid_t msg_lspid;
-	__kernel_pid_t msg_lrpid;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
+struct aead_instance {
+	void (*free)(struct aead_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
 };
 
-struct msginfo {
-	int msgpool;
-	int msgmap;
-	int msgmax;
-	int msgmnb;
-	int msgmni;
-	int msgssz;
-	int msgtql;
-	short unsigned int msgseg;
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
 };
 
-typedef u16 compat_ipc_pid_t;
-
-struct compat_msqid64_ds {
-	struct compat_ipc64_perm msg_perm;
-	unsigned int msg_stime_high;
-	unsigned int msg_stime;
-	unsigned int msg_rtime_high;
-	unsigned int msg_rtime;
-	unsigned int msg_ctime_high;
-	unsigned int msg_ctime;
-	compat_ulong_t msg_cbytes;
-	compat_ulong_t msg_qnum;
-	compat_ulong_t msg_qbytes;
-	compat_pid_t msg_lspid;
-	compat_pid_t msg_lrpid;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
+struct crypto_report_aead {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int maxauthsize;
+	unsigned int ivsize;
 };
 
-struct msg_queue {
-	struct kern_ipc_perm q_perm;
-	time64_t q_stime;
-	time64_t q_rtime;
-	time64_t q_ctime;
-	long unsigned int q_cbytes;
-	long unsigned int q_qnum;
-	long unsigned int q_qbytes;
-	struct pid *q_lspid;
-	struct pid *q_lrpid;
-	struct list_head q_messages;
-	struct list_head q_receivers;
-	struct list_head q_senders;
-	long: 64;
-	long: 64;
+struct chksum_ctx {
+	u32 key;
 };
 
-struct msg_receiver {
-	struct list_head r_list;
-	struct task_struct *r_tsk;
-	int r_mode;
-	long int r_msgtype;
-	long int r_maxsize;
-	struct msg_msg *r_msg;
+struct chksum_desc_ctx {
+	u32 crc;
 };
 
-struct msg_sender {
+struct rq_map_data {
+	struct page **pages;
+	int page_order;
+	int nr_entries;
+	long unsigned int offset;
+	int null_mapped;
+	int from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
+};
+
+typedef struct {
+	struct folio *v;
+} Sector;
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	long unsigned int state;
+	struct completion exited;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+union uu {
+	short unsigned int us;
+	unsigned char b[2];
+};
+
+typedef struct tree_desc_s tree_desc;
+
+struct xz_dec_bcj {
+	enum {
+		BCJ_X86 = 4,
+		BCJ_POWERPC = 5,
+		BCJ_IA64 = 6,
+		BCJ_ARM = 7,
+		BCJ_ARMTHUMB = 8,
+		BCJ_SPARC = 9,
+	} type;
+	enum xz_ret ret;
+	bool single_call;
+	uint32_t pos;
+	uint32_t x86_prev_mask;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+	struct {
+		size_t filtered;
+		size_t size;
+		uint8_t buf[16];
+	} temp;
+};
+
+struct xz_dec_lzma2;
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+};
+
+struct group_data {
+	int limit[21];
+	int base[20];
+	int permute[258];
+	int minLen;
+	int maxLen;
+};
+
+struct bunzip_data {
+	int writeCopies;
+	int writePos;
+	int writeRunCountdown;
+	int writeCount;
+	int writeCurrent;
+	long int (*fill)(void *, long unsigned int);
+	long int inbufCount;
+	long int inbufPos;
+	unsigned char *inbuf;
+	unsigned int inbufBitCount;
+	unsigned int inbufBits;
+	unsigned int crc32Table[256];
+	unsigned int headerCRC;
+	unsigned int totalCRC;
+	unsigned int writeCRC;
+	unsigned int *dbuf;
+	unsigned int dbufSize;
+	unsigned char selectors[32768];
+	struct group_data groups[6];
+	int io_error;
+	int byteCount[256];
+	unsigned char symToByte[256];
+	unsigned char mtfSymbol[256];
+};
+
+struct uevent_sock {
 	struct list_head list;
-	struct task_struct *tsk;
-	size_t msgsz;
+	struct sock *sk;
 };
 
-struct compat_msqid_ds {
-	struct compat_ipc_perm msg_perm;
-	compat_uptr_t msg_first;
-	compat_uptr_t msg_last;
-	old_time32_t msg_stime;
-	old_time32_t msg_rtime;
-	old_time32_t msg_ctime;
-	compat_ulong_t msg_lcbytes;
-	compat_ulong_t msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	compat_ipc_pid_t msg_lspid;
-	compat_ipc_pid_t msg_lrpid;
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
 };
 
-struct compat_msgbuf {
-	compat_long_t mtype;
-	char mtext[1];
+struct fb_vblank {
+	__u32 flags;
+	__u32 count;
+	__u32 vcount;
+	__u32 hcount;
+	__u32 reserved[4];
 };
 
-struct sem;
-
-struct sem_queue;
-
-struct sem_undo;
-
-struct semid_ds {
-	struct ipc_perm sem_perm;
-	__kernel_old_time_t sem_otime;
-	__kernel_old_time_t sem_ctime;
-	struct sem *sem_base;
-	struct sem_queue *sem_pending;
-	struct sem_queue **sem_pending_last;
-	struct sem_undo *undo;
-	short unsigned int sem_nsems;
+struct matroxfb_dh_fb_info {
+	struct fb_info fbcon;
+	int fbcon_registered;
+	int initialized;
+	struct matrox_fb_info *primary_dev;
+	struct {
+		long unsigned int base;
+		vaddr_t vbase;
+		unsigned int len;
+		unsigned int len_usable;
+		unsigned int len_maximum;
+		unsigned int offbase;
+		unsigned int borrowed;
+	} video;
+	struct {
+		long unsigned int base;
+		vaddr_t vbase;
+		unsigned int len;
+	} mmio;
+	unsigned int interlaced: 1;
+	u_int32_t cmap[16];
 };
 
-struct sem {
-	int semval;
-	struct pid *sempid;
+struct v4l2_capability {
+	__u8 driver[16];
+	__u8 card[32];
+	__u8 bus_info[32];
+	__u32 version;
+	__u32 capabilities;
+	__u32 device_caps;
+	__u32 reserved[3];
+};
+
+struct matroxioc_output_mode {
+	__u32 output;
+	__u32 mode;
+};
+
+struct video_board {
+	int maxvram;
+	int maxdisplayable;
+	int accelID;
+	struct matrox_switch *lowlevel;
+};
+
+struct board {
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int rev;
+	short unsigned int svid;
+	short unsigned int sid;
+	unsigned int flags;
+	unsigned int maxclk;
+	enum mga_chip chip;
+	struct video_board *base;
+	const char *name;
+};
+
+struct RGBT {
+	unsigned char bpp;
+	struct {
+		unsigned char offset;
+		unsigned char length;
+	} red;
+	struct {
+		unsigned char offset;
+		unsigned char length;
+	} green;
+	struct {
+		unsigned char offset;
+		unsigned char length;
+	} blue;
+	struct {
+		unsigned char offset;
+		unsigned char length;
+	} transp;
+	signed char visual;
+};
+
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	long unsigned int char_map[4];
+	long unsigned int overrun_time;
+	int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	char read_buf[4096];
+	long unsigned int read_flags[64];
+	unsigned char echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	size_t lookahead_count;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
+};
+
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
+
+enum hv_protocol {
+	HV_PROTOCOL_RAW = 0,
+	HV_PROTOCOL_HVSI = 1,
+};
+
+typedef enum hv_protocol hv_protocol_t;
+
+struct hvterm_priv {
+	u32 termno;
+	hv_protocol_t proto;
+	struct hvsi_priv hvsi;
+	spinlock_t buf_lock;
+	char buf[16];
+	int left;
+	int offset;
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+enum device_link_state {
+	DL_STATE_NONE = -1,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+};
+
+typedef int (*pm_callback_t)(struct device *);
+
+struct floppy_struct {
+	unsigned int size;
+	unsigned int sect;
+	unsigned int head;
+	unsigned int track;
+	unsigned int stretch;
+	unsigned char gap;
+	unsigned char rate;
+	unsigned char spec1;
+	unsigned char fmt_gap;
+	const char *name;
+};
+
+struct format_descr {
+	unsigned int device;
+	unsigned int head;
+	unsigned int track;
+};
+
+struct floppy_max_errors {
+	unsigned int abort;
+	unsigned int read_track;
+	unsigned int reset;
+	unsigned int recal;
+	unsigned int reporting;
+};
+
+struct floppy_drive_params {
+	signed char cmos;
+	long unsigned int max_dtr;
+	long unsigned int hlt;
+	long unsigned int hut;
+	long unsigned int srt;
+	long unsigned int spinup;
+	long unsigned int spindown;
+	unsigned char spindown_offset;
+	unsigned char select_delay;
+	unsigned char rps;
+	unsigned char tracks;
+	long unsigned int timeout;
+	unsigned char interleave_sect;
+	struct floppy_max_errors max_errors;
+	char flags;
+	char read_track;
+	short int autodetect[8];
+	int checkfreq;
+	int native_format;
+};
+
+enum {
+	FD_NEED_TWADDLE_BIT = 0,
+	FD_VERIFY_BIT = 1,
+	FD_DISK_NEWCHANGE_BIT = 2,
+	FD_UNUSED_BIT = 3,
+	FD_DISK_CHANGED_BIT = 4,
+	FD_DISK_WRITABLE_BIT = 5,
+	FD_OPEN_SHOULD_FAIL_BIT = 6,
+};
+
+struct floppy_drive_struct {
+	long unsigned int flags;
+	long unsigned int spinup_date;
+	long unsigned int select_date;
+	long unsigned int first_read_date;
+	short int probed_format;
+	short int track;
+	short int maxblock;
+	short int maxtrack;
+	int generation;
+	int keep_data;
+	int fd_ref;
+	int fd_device;
+	long unsigned int last_checked;
+	char *dmabuf;
+	int bufblocks;
+};
+
+enum reset_mode {
+	FD_RESET_IF_NEEDED = 0,
+	FD_RESET_IF_RAWCMD = 1,
+	FD_RESET_ALWAYS = 2,
+};
+
+struct floppy_fdc_state {
+	int spec1;
+	int spec2;
+	int dtr;
+	unsigned char version;
+	unsigned char dor;
+	long unsigned int address;
+	unsigned int rawcmd: 2;
+	unsigned int reset: 1;
+	unsigned int need_configure: 1;
+	unsigned int perp_mode: 2;
+	unsigned int has_fifo: 1;
+	unsigned int driver_version;
+	unsigned char track[4];
+};
+
+struct floppy_write_errors {
+	unsigned int write_errors;
+	long unsigned int first_error_sector;
+	int first_error_generation;
+	long unsigned int last_error_sector;
+	int last_error_generation;
+	unsigned int badness;
+};
+
+struct floppy_raw_cmd {
+	unsigned int flags;
+	void *data;
+	char *kernel_data;
+	struct floppy_raw_cmd *next;
+	long int length;
+	long int phys_length;
+	int buffer_length;
+	unsigned char rate;
+	unsigned char cmd_count;
+	union {
+		struct {
+			unsigned char cmd[16];
+			unsigned char reply_count;
+			unsigned char reply[16];
+		};
+		unsigned char fullcmd[33];
+	};
+	int track;
+	int resultcode;
+	int reserved1;
+	int reserved2;
+};
+
+struct fd_dma_ops {
+	void (*_disable_dma)(unsigned int);
+	void (*_free_dma)(unsigned int);
+	int (*_get_dma_residue)(unsigned int);
+	int (*_dma_setup)(char *, long unsigned int, int, int);
+};
+
+typedef void (*done_f)(int);
+
+struct cont_t {
+	void (*interrupt)();
+	void (*redo)();
+	void (*error)();
+	done_f done;
+};
+
+struct output_log {
+	unsigned char data;
+	unsigned char status;
+	long unsigned int jiffies;
+};
+
+struct rb0_cbdata {
+	int drive;
+	struct completion complete;
+};
+
+struct param_table {
+	const char *name;
+	void (*fn)(int *, int, int);
+	int *var;
+	int def_param;
+	int param2;
+};
+
+struct io_region {
+	int offset;
+	int size;
+};
+
+union inparam {
+	struct floppy_struct g;
+	struct format_descr f;
+	struct floppy_max_errors max_errors;
+	struct floppy_drive_params dp;
+};
+
+struct fparm {
+	unsigned char track;
+	unsigned char head;
+	unsigned char sect;
+	unsigned char size;
+};
+
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
+};
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_resv;
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	struct mutex lock;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list *fences;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+};
+
+struct dma_buf_export_info {
+	const char *exp_name;
+	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
+};
+
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
+};
+
+struct dma_buf_sync {
+	__u64 flags;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct scsi_nl_hdr {
+	__u8 version;
+	__u8 transport;
+	__u16 magic;
+	__u16 msgtype;
+	__u16 msglen;
+};
+
+enum {
+	e1000_10_half = 0,
+	e1000_10_full = 1,
+	e1000_100_half = 2,
+	e1000_100_full = 3,
+};
+
+struct e1000_context_desc {
+	union {
+		__le32 ip_config;
+		struct {
+			u8 ipcss;
+			u8 ipcso;
+			__le16 ipcse;
+		} ip_fields;
+	} lower_setup;
+	union {
+		__le32 tcp_config;
+		struct {
+			u8 tucss;
+			u8 tucso;
+			__le16 tucse;
+		} tcp_fields;
+	} upper_setup;
+	__le32 cmd_and_length;
+	union {
+		__le32 data;
+		struct {
+			u8 status;
+			u8 hdr_len;
+			__le16 mss;
+		} fields;
+	} tcp_seg_setup;
+};
+
+enum latency_range {
+	lowest_latency = 0,
+	low_latency = 1,
+	bulk_latency = 2,
+	latency_invalid = 255,
+};
+
+struct my_u {
+	__le64 a;
+	__le64 b;
+};
+
+typedef __u32 __hc32;
+
+typedef __u16 __hc16;
+
+struct td;
+
+struct ed {
+	__hc32 hwINFO;
+	__hc32 hwTailP;
+	__hc32 hwHeadP;
+	__hc32 hwNextED;
+	dma_addr_t dma;
+	struct td *dummy;
+	struct ed *ed_next;
+	struct ed *ed_prev;
+	struct list_head td_list;
+	struct list_head in_use_list;
+	u8 state;
+	u8 type;
+	u8 branch;
+	u16 interval;
+	u16 load;
+	u16 last_iso;
+	u16 tick;
+	unsigned int takeback_wdh_cnt;
+	struct td *pending_td;
+	long: 64;
+};
+
+struct td {
+	__hc32 hwINFO;
+	__hc32 hwCBP;
+	__hc32 hwNextTD;
+	__hc32 hwBE;
+	__hc16 hwPSW[2];
+	__u8 index;
+	struct ed *ed;
+	struct td *td_hash;
+	struct td *next_dl_td;
+	struct urb *urb;
+	dma_addr_t td_dma;
+	dma_addr_t data_dma;
+	struct list_head td_list;
+	long: 64;
+};
+
+struct ohci_hcca {
+	__hc32 int_table[32];
+	__hc32 frame_no;
+	__hc32 done_head;
+	u8 reserved_for_hc[116];
+	u8 what[4];
+};
+
+struct ohci_roothub_regs {
+	__hc32 a;
+	__hc32 b;
+	__hc32 status;
+	__hc32 portstatus[15];
+};
+
+struct ohci_regs {
+	__hc32 revision;
+	__hc32 control;
+	__hc32 cmdstatus;
+	__hc32 intrstatus;
+	__hc32 intrenable;
+	__hc32 intrdisable;
+	__hc32 hcca;
+	__hc32 ed_periodcurrent;
+	__hc32 ed_controlhead;
+	__hc32 ed_controlcurrent;
+	__hc32 ed_bulkhead;
+	__hc32 ed_bulkcurrent;
+	__hc32 donehead;
+	__hc32 fminterval;
+	__hc32 fmremaining;
+	__hc32 fmnumber;
+	__hc32 periodicstart;
+	__hc32 lsthresh;
+	struct ohci_roothub_regs roothub;
+	long: 64;
+	long: 64;
+};
+
+enum ohci_rh_state {
+	OHCI_RH_HALTED = 0,
+	OHCI_RH_SUSPENDED = 1,
+	OHCI_RH_RUNNING = 2,
+};
+
+struct ohci_hcd {
 	spinlock_t lock;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	time64_t sem_otime;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	struct ohci_regs *regs;
+	struct ohci_hcca *hcca;
+	dma_addr_t hcca_dma;
+	struct ed *ed_rm_list;
+	struct ed *ed_bulktail;
+	struct ed *ed_controltail;
+	struct ed *periodic[32];
+	void (*start_hnp)(struct ohci_hcd *);
+	struct dma_pool *td_cache;
+	struct dma_pool *ed_cache;
+	struct td *td_hash[64];
+	struct td *dl_start;
+	struct td *dl_end;
+	struct list_head pending;
+	struct list_head eds_in_use;
+	enum ohci_rh_state rh_state;
+	int num_ports;
+	int load[32];
+	u32 hc_control;
+	long unsigned int next_statechange;
+	u32 fminterval;
+	unsigned int autostop: 1;
+	unsigned int working: 1;
+	unsigned int restart_work: 1;
+	long unsigned int flags;
+	unsigned int prev_frame_no;
+	unsigned int wdh_cnt;
+	unsigned int prev_wdh_cnt;
+	u32 prev_donehead;
+	struct timer_list io_watchdog;
+	struct work_struct nec_work;
+	struct dentry *debug_dir;
+	long unsigned int priv[0];
 };
 
-struct sem_queue {
-	struct list_head list;
-	struct task_struct *sleeper;
-	struct sem_undo *undo;
-	struct pid *pid;
-	int status;
-	struct sembuf *sops;
-	struct sembuf *blocking;
-	int nsops;
-	bool alter;
-	bool dupsop;
+struct ohci_driver_overrides {
+	const char *product_desc;
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
 };
 
-struct sem_undo {
-	struct list_head list_proc;
-	struct callback_head rcu;
-	struct sem_undo_list *ulp;
-	struct list_head list_id;
-	int semid;
-	short int *semadj;
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
 };
 
-struct semid64_ds {
-	struct ipc64_perm sem_perm;
-	long int sem_otime;
-	long int sem_ctime;
-	long unsigned int sem_nsems;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
+struct input_mt_pos {
+	s16 x;
+	s16 y;
 };
 
-struct seminfo {
-	int semmap;
-	int semmni;
-	int semmns;
-	int semmnu;
-	int semmsl;
-	int semopm;
-	int semume;
-	int semusz;
-	int semvmx;
-	int semaem;
+struct rmi_2d_axis_alignment {
+	bool swap_axes;
+	bool flip_x;
+	bool flip_y;
+	u16 clip_x_low;
+	u16 clip_y_low;
+	u16 clip_x_high;
+	u16 clip_y_high;
+	u16 offset_x;
+	u16 offset_y;
+	u8 delta_x_threshold;
+	u8 delta_y_threshold;
 };
 
-struct sem_undo_list {
+enum rmi_sensor_type {
+	rmi_sensor_default = 0,
+	rmi_sensor_touchscreen = 1,
+	rmi_sensor_touchpad = 2,
+};
+
+struct rmi_2d_sensor_platform_data {
+	struct rmi_2d_axis_alignment axis_align;
+	enum rmi_sensor_type sensor_type;
+	int x_mm;
+	int y_mm;
+	int disable_report_mask;
+	u16 rezero_wait;
+	bool topbuttonpad;
+	bool kernel_tracking;
+	int dmax;
+	int dribble;
+	int palm_detect;
+};
+
+struct rmi_gpio_data {
+	bool buttonpad;
+	bool trackstick_buttons;
+	bool disable;
+};
+
+enum rmi_reg_state {
+	RMI_REG_STATE_DEFAULT = 0,
+	RMI_REG_STATE_OFF = 1,
+	RMI_REG_STATE_ON = 2,
+};
+
+struct rmi_f01_power_management {
+	enum rmi_reg_state nosleep;
+	u8 wakeup_threshold;
+	u8 doze_holdoff;
+	u8 doze_interval;
+};
+
+struct rmi_device_platform_data_spi {
+	u32 block_delay_us;
+	u32 split_read_block_delay_us;
+	u32 read_delay_us;
+	u32 write_delay_us;
+	u32 split_read_byte_delay_us;
+	u32 pre_delay_us;
+	u32 post_delay_us;
+	u8 bits_per_word;
+	u16 mode;
+	void *cs_assert_data;
+	int (*cs_assert)(const void *, const bool);
+};
+
+struct rmi_device_platform_data {
+	int reset_delay_ms;
+	int irq;
+	struct rmi_device_platform_data_spi spi_data;
+	struct rmi_2d_sensor_platform_data sensor_pdata;
+	struct rmi_f01_power_management power_management;
+	struct rmi_gpio_data gpio_data;
+};
+
+enum synaptics_pkt_type {
+	SYN_NEWABS = 0,
+	SYN_NEWABS_STRICT = 1,
+	SYN_NEWABS_RELAXED = 2,
+	SYN_OLDABS = 3,
+};
+
+struct synaptics_hw_state {
+	int x;
+	int y;
+	int z;
+	int w;
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int up: 1;
+	unsigned int down: 1;
+	u8 ext_buttons;
+	s8 scroll;
+};
+
+struct synaptics_device_info {
+	u32 model_id;
+	u32 firmware_id;
+	u32 board_id;
+	u32 capabilities;
+	u32 ext_cap;
+	u32 ext_cap_0c;
+	u32 ext_cap_10;
+	u32 identity;
+	u32 x_res;
+	u32 y_res;
+	u32 x_max;
+	u32 y_max;
+	u32 x_min;
+	u32 y_min;
+};
+
+struct synaptics_data {
+	struct synaptics_device_info info;
+	enum synaptics_pkt_type pkt_type;
+	u8 mode;
+	int scroll;
+	bool absolute_mode;
+	bool disable_gesture;
+	struct serio *pt_port;
+	struct synaptics_hw_state agm;
+	unsigned int agm_count;
+	long unsigned int press_start;
+	bool press;
+	bool report_press;
+	bool is_forcepad;
+};
+
+struct min_max_quirk {
+	const char * const *pnp_ids;
+	struct {
+		u32 min;
+		u32 max;
+	} board_id;
+	u32 x_min;
+	u32 x_max;
+	u32 y_min;
+	u32 y_max;
+};
+
+enum {
+	SYNAPTICS_INTERTOUCH_NOT_SET = -1,
+	SYNAPTICS_INTERTOUCH_OFF = 0,
+	SYNAPTICS_INTERTOUCH_ON = 1,
+};
+
+struct md_cluster_operations {
+	int (*join)(struct mddev *, int);
+	int (*leave)(struct mddev *);
+	int (*slot_number)(struct mddev *);
+	int (*resync_info_update)(struct mddev *, sector_t, sector_t);
+	void (*resync_info_get)(struct mddev *, sector_t *, sector_t *);
+	int (*metadata_update_start)(struct mddev *);
+	int (*metadata_update_finish)(struct mddev *);
+	void (*metadata_update_cancel)(struct mddev *);
+	int (*resync_start)(struct mddev *);
+	int (*resync_finish)(struct mddev *);
+	int (*area_resyncing)(struct mddev *, int, sector_t, sector_t);
+	int (*add_new_disk)(struct mddev *, struct md_rdev *);
+	void (*add_new_disk_cancel)(struct mddev *);
+	int (*new_disk_ack)(struct mddev *, bool);
+	int (*remove_disk)(struct mddev *, struct md_rdev *);
+	void (*load_bitmaps)(struct mddev *, int);
+	int (*gather_bitmaps)(struct md_rdev *);
+	int (*resize_bitmaps)(struct mddev *, sector_t, sector_t);
+	int (*lock_all_bitmaps)(struct mddev *);
+	void (*unlock_all_bitmaps)(struct mddev *);
+	void (*update_size)(struct mddev *, sector_t);
+};
+
+enum flag_bits {
+	Faulty = 0,
+	In_sync = 1,
+	Bitmap_sync = 2,
+	WriteMostly = 3,
+	AutoDetected = 4,
+	Blocked = 5,
+	WriteErrorSeen = 6,
+	FaultRecorded = 7,
+	BlockedBadBlocks = 8,
+	WantReplacement = 9,
+	Replacement = 10,
+	Candidate = 11,
+	Journal = 12,
+	ClusterRemove = 13,
+	RemoveSynchronized = 14,
+	ExternalBbl = 15,
+	FailFast = 16,
+	LastDev = 17,
+	CollisionCheck = 18,
+};
+
+enum mddev_sb_flags {
+	MD_SB_CHANGE_DEVS = 0,
+	MD_SB_CHANGE_CLEAN = 1,
+	MD_SB_CHANGE_PENDING = 2,
+	MD_SB_NEED_REWRITE = 3,
+};
+
+struct bitmap_page;
+
+struct bitmap_counts {
+	spinlock_t lock;
+	struct bitmap_page *bp;
+	long unsigned int pages;
+	long unsigned int missing_pages;
+	long unsigned int chunkshift;
+	long unsigned int chunks;
+};
+
+struct bitmap_storage {
+	struct file *file;
+	struct page *sb_page;
+	struct page **filemap;
+	long unsigned int *filemap_attr;
+	long unsigned int file_pages;
+	long unsigned int bytes;
+};
+
+struct bitmap {
+	struct bitmap_counts counts;
+	struct mddev *mddev;
+	__u64 events_cleared;
+	int need_sync;
+	struct bitmap_storage storage;
+	long unsigned int flags;
+	int allclean;
+	atomic_t behind_writes;
+	long unsigned int behind_writes_used;
+	long unsigned int daemon_lastrun;
+	long unsigned int last_end_sync;
+	atomic_t pending_writes;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t overflow_wait;
+	wait_queue_head_t behind_wait;
+	struct kernfs_node *sysfs_can_clear;
+	int cluster_slot;
+};
+
+enum recovery_flags {
+	MD_RECOVERY_RUNNING = 0,
+	MD_RECOVERY_SYNC = 1,
+	MD_RECOVERY_RECOVER = 2,
+	MD_RECOVERY_INTR = 3,
+	MD_RECOVERY_DONE = 4,
+	MD_RECOVERY_NEEDED = 5,
+	MD_RECOVERY_REQUESTED = 6,
+	MD_RECOVERY_CHECK = 7,
+	MD_RECOVERY_RESHAPE = 8,
+	MD_RECOVERY_FROZEN = 9,
+	MD_RECOVERY_ERROR = 10,
+	MD_RECOVERY_WAIT = 11,
+	MD_RESYNCING_REMOTE = 12,
+};
+
+struct md_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct mddev *, char *);
+	ssize_t (*store)(struct mddev *, const char *, size_t);
+};
+
+typedef __u16 bitmap_counter_t;
+
+enum bitmap_state {
+	BITMAP_STALE = 1,
+	BITMAP_WRITE_ERROR = 2,
+	BITMAP_HOSTENDIAN = 15,
+};
+
+struct bitmap_super_s {
+	__le32 magic;
+	__le32 version;
+	__u8 uuid[16];
+	__le64 events;
+	__le64 events_cleared;
+	__le64 sync_size;
+	__le32 state;
+	__le32 chunksize;
+	__le32 daemon_sleep;
+	__le32 write_behind;
+	__le32 sectors_reserved;
+	__le32 nodes;
+	__u8 cluster_name[64];
+	__u8 pad[120];
+};
+
+typedef struct bitmap_super_s bitmap_super_t;
+
+struct bitmap_page {
+	char *map;
+	unsigned int hijacked: 1;
+	unsigned int pending: 1;
+	unsigned int count: 30;
+};
+
+enum bitmap_page_attr {
+	BITMAP_PAGE_DIRTY = 0,
+	BITMAP_PAGE_PENDING = 1,
+	BITMAP_PAGE_NEEDWRITE = 2,
+};
+
+struct cgroup_subsys_state;
+
+struct dev_ch_attribute {
+	struct device_attribute attr;
+	unsigned int channel;
+};
+
+struct pnv_idle_states_t {
+	char name[16];
+	u32 latency_ns;
+	u32 residency_ns;
+	u64 psscr_val;
+	u64 psscr_mask;
+	u32 flags;
+	bool valid;
+};
+
+enum idle_boot_override {
+	IDLE_NO_OVERRIDE = 0,
+	IDLE_POWERSAVE_OFF = 1,
+};
+
+struct stop_psscr_table {
+	u64 val;
+	u64 mask;
+};
+
+struct amba_cs_uci_id {
+	unsigned int devarch;
+	unsigned int devarch_mask;
+	unsigned int devtype;
+	void *data;
+};
+
+struct amba_device {
+	struct device dev;
+	struct resource res;
+	struct clk *pclk;
+	struct device_dma_parameters dma_parms;
+	unsigned int periphid;
+	struct mutex periphid_lock;
+	unsigned int cid;
+	struct amba_cs_uci_id uci;
+	unsigned int irq[9];
+	const char *driver_override;
+};
+
+enum of_reconfig_change {
+	OF_RECONFIG_NO_CHANGE = 0,
+	OF_RECONFIG_CHANGE_ADD = 1,
+	OF_RECONFIG_CHANGE_REMOVE = 2,
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+enum {
+	IF_LINK_MODE_DEFAULT = 0,
+	IF_LINK_MODE_DORMANT = 1,
+	IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+	LW_URGENT = 0,
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
 	refcount_t refcnt;
 	spinlock_t lock;
-	struct list_head list_proc;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	long unsigned int cstamp;
+	long unsigned int tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
 };
 
-struct compat_semid64_ds {
-	struct compat_ipc64_perm sem_perm;
-	unsigned int sem_otime_high;
-	unsigned int sem_otime;
-	unsigned int sem_ctime_high;
-	unsigned int sem_ctime;
-	compat_ulong_t sem_nsems;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
 };
 
-struct sem_array {
-	struct kern_ipc_perm sem_perm;
-	time64_t sem_ctime;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	struct list_head list_id;
-	int sem_nsems;
-	int complex_count;
-	unsigned int use_global_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sem sems[0];
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
 };
 
-struct compat_semid_ds {
-	struct compat_ipc_perm sem_perm;
-	old_time32_t sem_otime;
-	old_time32_t sem_ctime;
-	compat_uptr_t sem_base;
-	compat_uptr_t sem_pending;
-	compat_uptr_t sem_pending_last;
-	compat_uptr_t undo;
-	short unsigned int sem_nsems;
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
 };
 
-struct shmid_ds {
-	struct ipc_perm shm_perm;
-	int shm_segsz;
-	__kernel_old_time_t shm_atime;
-	__kernel_old_time_t shm_dtime;
-	__kernel_old_time_t shm_ctime;
-	__kernel_ipc_pid_t shm_cpid;
-	__kernel_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	void *shm_unused2;
-	void *shm_unused3;
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
 };
 
-struct shmid64_ds {
-	struct ipc64_perm shm_perm;
-	long int shm_atime;
-	long int shm_dtime;
-	long int shm_ctime;
-	size_t shm_segsz;
-	__kernel_pid_t shm_cpid;
-	__kernel_pid_t shm_lpid;
-	long unsigned int shm_nattch;
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct ip_tunnel;
+
+struct ip6_tnl;
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+enum ip_conntrack_status {
+	IPS_EXPECTED_BIT = 0,
+	IPS_EXPECTED = 1,
+	IPS_SEEN_REPLY_BIT = 1,
+	IPS_SEEN_REPLY = 2,
+	IPS_ASSURED_BIT = 2,
+	IPS_ASSURED = 4,
+	IPS_CONFIRMED_BIT = 3,
+	IPS_CONFIRMED = 8,
+	IPS_SRC_NAT_BIT = 4,
+	IPS_SRC_NAT = 16,
+	IPS_DST_NAT_BIT = 5,
+	IPS_DST_NAT = 32,
+	IPS_NAT_MASK = 48,
+	IPS_SEQ_ADJUST_BIT = 6,
+	IPS_SEQ_ADJUST = 64,
+	IPS_SRC_NAT_DONE_BIT = 7,
+	IPS_SRC_NAT_DONE = 128,
+	IPS_DST_NAT_DONE_BIT = 8,
+	IPS_DST_NAT_DONE = 256,
+	IPS_NAT_DONE_MASK = 384,
+	IPS_DYING_BIT = 9,
+	IPS_DYING = 512,
+	IPS_FIXED_TIMEOUT_BIT = 10,
+	IPS_FIXED_TIMEOUT = 1024,
+	IPS_TEMPLATE_BIT = 11,
+	IPS_TEMPLATE = 2048,
+	IPS_UNTRACKED_BIT = 12,
+	IPS_UNTRACKED = 4096,
+	IPS_NAT_CLASH_BIT = 12,
+	IPS_NAT_CLASH = 4096,
+	IPS_HELPER_BIT = 13,
+	IPS_HELPER = 8192,
+	IPS_OFFLOAD_BIT = 14,
+	IPS_OFFLOAD = 16384,
+	IPS_HW_OFFLOAD_BIT = 15,
+	IPS_HW_OFFLOAD = 32768,
+	IPS_UNCHANGEABLE_MASK = 56313,
+	__IPS_MAX_BIT = 16,
+};
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+struct modversion_info {
+	long unsigned int crc;
+	char name[56];
+};
+
+typedef struct {
+	long unsigned int addr;
+} func_desc_t;
+
+struct ppc64_stub_entry {
+	u32 jump[7];
+	u32 magic;
+	func_desc_t funcdata;
+};
+
+struct memcons;
+
+struct nvram_os_partition {
+	const char *name;
+	int req_size;
+	int min_size;
+	long int size;
+	long int index;
+	bool os_partition;
+};
+
+struct vas_caps_entry {
+	struct kobject kobj;
+	struct vas_cop_feat_caps *caps;
+};
+
+struct vas_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct vas_cop_feat_caps *, char *);
+	ssize_t (*store)(struct vas_cop_feat_caps *, const char *, size_t);
+};
+
+struct p9_host_os_sprs {
+	long unsigned int iamr;
+	long unsigned int amr;
+	unsigned int pmc1;
+	unsigned int pmc2;
+	unsigned int pmc3;
+	unsigned int pmc4;
+	unsigned int pmc5;
+	unsigned int pmc6;
+	long unsigned int mmcr0;
+	long unsigned int mmcr1;
+	long unsigned int mmcr2;
+	long unsigned int mmcr3;
+	long unsigned int mmcra;
+	long unsigned int siar;
+	long unsigned int sier1;
+	long unsigned int sier2;
+	long unsigned int sier3;
+	long unsigned int sdar;
+};
+
+enum {
+	PM_IC_DEMAND_L2_BR_ALL = 18584,
+	PM_GCT_UTIL_7_TO_10_SLOTS = 8352,
+	PM_PMC2_SAVED = 65570,
+	PM_CMPLU_STALL_DFU = 131132,
+	PM_VSU0_16FLOP = 41124,
+	PM_MRK_LSU_DERAT_MISS = 249946,
+	PM_MRK_ST_CMPL___2 = 65588,
+	PM_NEST_PAIR3_ADD = 264321,
+	PM_L2_ST_DISP = 287104,
+	PM_L2_CASTOUT_MOD = 90496,
+	PM_ISEG = 8356,
+	PM_MRK_INST_TIMEO = 262196,
+	PM_L2_RCST_DISP_FAIL_ADDR = 221826,
+	PM_LSU1_DC_PREF_STREAM_CONFIRM = 53430,
+	PM_IERAT_WR_64K = 16574,
+	PM_MRK_DTLB_MISS_16M___2 = 315486,
+	PM_IERAT_MISS = 65782,
+	PM_MRK_PTEG_FROM_LMEM = 315474,
+	PM_FLOP = 65780,
+	PM_THRD_PRIO_4_5_CYC = 16564,
+	PM_BR_PRED_TA = 16554,
+	PM_CMPLU_STALL_FXU = 131092,
+	PM_EXT_INT = 131320,
+	PM_VSU_FSQRT_FDIV = 43144,
+	PM_MRK_LD_MISS_EXPOSED_CYC = 65598,
+	PM_LSU1_LDF = 49286,
+	PM_IC_WRITE_ALL = 18572,
+	PM_LSU0_SRQ_STFWD = 49312,
+	PM_PTEG_FROM_RL2L3_MOD = 114770,
+	PM_MRK_DATA_FROM_L31_SHR = 118862,
+	PM_DATA_FROM_L21_MOD = 245830,
+	PM_VSU1_SCAL_DOUBLE_ISSUED = 45194,
+	PM_VSU0_8FLOP = 41120,
+	PM_POWER_EVENT1 = 65646,
+	PM_DISP_CLB_HELD_BAL = 8338,
+	PM_VSU1_2FLOP = 41114,
+	PM_LWSYNC_HELD = 8346,
+	PM_PTEG_FROM_DL2L3_SHR = 245844,
+	PM_INST_FROM_L21_MOD = 213062,
+	PM_IERAT_XLATE_WR_16MPLUS = 16572,
+	PM_IC_REQ_ALL = 18568,
+	PM_DSLB_MISS = 53392,
+	PM_L3_MISS = 127106,
+	PM_LSU0_L1_PREF = 53432,
+	PM_VSU_SCALAR_SINGLE_ISSUED = 47236,
+	PM_LSU1_DC_PREF_STREAM_CONFIRM_STRIDE = 53438,
+	PM_L2_INST = 221312,
+	PM_VSU0_FRSP = 41140,
+	PM_FLUSH_DISP = 8322,
+	PM_PTEG_FROM_L2MISS = 311384,
+	PM_VSU1_DQ_ISSUED = 45210,
+	PM_CMPLU_STALL_LSU = 131090,
+	PM_MRK_DATA_FROM_DMEM = 118858,
+	PM_LSU_FLUSH_ULD = 51376,
+	PM_PTEG_FROM_LMEM = 311378,
+	PM_MRK_DERAT_MISS_16M = 249948,
+	PM_THRD_ALL_RUN_CYC = 131084,
+	PM_MEM0_PREFETCH_DISP = 131203,
+	PM_MRK_STALL_CMPLU_CYC_COUNT = 196671,
+	PM_DATA_FROM_DL2L3_MOD = 245836,
+	PM_VSU_FRSP = 43188,
+	PM_MRK_DATA_FROM_L21_MOD = 249926,
+	PM_PMC1_OVERFLOW = 131088,
+	PM_VSU0_SINGLE = 41128,
+	PM_MRK_PTEG_FROM_L3MISS = 184408,
+	PM_MRK_PTEG_FROM_L31_SHR = 184406,
+	PM_VSU0_VECTOR_SP_ISSUED = 45200,
+	PM_VSU1_FEST = 41146,
+	PM_MRK_INST_DISP = 131120,
+	PM_VSU0_COMPLEX_ISSUED = 45206,
+	PM_LSU1_FLUSH_UST = 49334,
+	PM_INST_CMPL___4 = 2,
+	PM_FXU_IDLE = 65550,
+	PM_LSU0_FLUSH_ULD = 49328,
+	PM_MRK_DATA_FROM_DL2L3_MOD = 249932,
+	PM_LSU_LMQ_SRQ_EMPTY_ALL_CYC = 196636,
+	PM_LSU1_REJECT_LMQ_FULL = 49318,
+	PM_INST_PTEG_FROM_L21_MOD = 254038,
+	PM_INST_FROM_RL2L3_MOD = 81986,
+	PM_SHL_CREATED = 20610,
+	PM_L2_ST_HIT = 287106,
+	PM_DATA_FROM_DMEM = 114762,
+	PM_L3_LD_MISS = 192642,
+	PM_FXU1_BUSY_FXU0_IDLE = 262158,
+	PM_DISP_CLB_HELD_RES = 8340,
+	PM_L2_SN_SX_I_DONE = 222082,
+	PM_GRP_CMPL = 196612,
+	PM_STCX_CMPL = 49304,
+	PM_VSU0_2FLOP = 41112,
+	PM_L3_PREF_MISS = 258178,
+	PM_LSU_SRQ_SYNC_CYC = 53398,
+	PM_LSU_REJECT_ERAT_MISS = 131172,
+	PM_L1_ICACHE_MISS___4 = 131324,
+	PM_LSU1_FLUSH_SRQ = 49342,
+	PM_LD_REF_L1_LSU0 = 49280,
+	PM_VSU0_FEST = 41144,
+	PM_VSU_VECTOR_SINGLE_ISSUED = 47248,
+	PM_FREQ_UP = 262156,
+	PM_DATA_FROM_LMEM = 245834,
+	PM_LSU1_LDX = 49290,
+	PM_PMC3_OVERFLOW = 262160,
+	PM_MRK_BR_MPRED = 196662,
+	PM_SHL_MATCH = 20614,
+	PM_MRK_BR_TAKEN = 65590,
+	PM_CMPLU_STALL_BRU = 262222,
+	PM_ISLB_MISS = 53394,
+	PM_CYC___4 = 30,
+	PM_DISP_HELD_THERMAL = 196614,
+	PM_INST_PTEG_FROM_RL2L3_SHR = 188500,
+	PM_LSU1_SRQ_STFWD = 49314,
+	PM_GCT_NOSLOT_BR_MPRED = 262170,
+	PM_1PLUS_PPC_CMPL = 65778,
+	PM_PTEG_FROM_DMEM = 180306,
+	PM_VSU_2FLOP = 43160,
+	PM_GCT_FULL_CYC = 16518,
+	PM_MRK_DATA_FROM_L3_CYC = 262176,
+	PM_LSU_SRQ_S0_ALLOC = 53405,
+	PM_MRK_DERAT_MISS_4K = 118876,
+	PM_BR_MPRED_TA = 16558,
+	PM_INST_PTEG_FROM_L2MISS = 319576,
+	PM_DPU_HELD_POWER = 131078,
+	PM_RUN_INST_CMPL___4 = 262394,
+	PM_MRK_VSU_FIN = 196658,
+	PM_LSU_SRQ_S0_VALID = 53404,
+	PM_GCT_EMPTY_CYC = 131080,
+	PM_IOPS_DISP = 196628,
+	PM_RUN_SPURR = 65544,
+	PM_PTEG_FROM_L21_MOD = 245846,
+	PM_VSU0_1FLOP = 41088,
+	PM_SNOOP_TLBIE = 53426,
+	PM_DATA_FROM_L3MISS___4 = 180296,
+	PM_VSU_SINGLE = 43176,
+	PM_DTLB_MISS_16G___2 = 114782,
+	PM_CMPLU_STALL_VECTOR = 131100,
+	PM_FLUSH = 262392,
+	PM_L2_LD_HIT = 221570,
+	PM_NEST_PAIR2_AND = 198787,
+	PM_VSU1_1FLOP = 41090,
+	PM_IC_PREF_REQ = 16522,
+	PM_L3_LD_HIT = 192640,
+	PM_GCT_NOSLOT_IC_MISS = 131098,
+	PM_DISP_HELD = 65542,
+	PM_L2_LD = 90240,
+	PM_LSU_FLUSH_SRQ = 51388,
+	PM_BC_PLUS_8_CONV = 16568,
+	PM_MRK_DATA_FROM_L31_MOD_CYC = 262182,
+	PM_CMPLU_STALL_VECTOR_LONG = 262218,
+	PM_L2_RCST_BUSY_RC_FULL = 156290,
+	PM_TB_BIT_TRANS = 196856,
+	PM_THERMAL_MAX = 262150,
+	PM_LSU1_FLUSH_ULD = 49330,
+	PM_LSU1_REJECT_LHS = 49326,
+	PM_LSU_LRQ_S0_ALLOC = 53407,
+	PM_L3_CO_L31 = 323712,
+	PM_POWER_EVENT4 = 262254,
+	PM_DATA_FROM_L31_SHR = 114766,
+	PM_BR_UNCOND = 16542,
+	PM_LSU1_DC_PREF_STREAM_ALLOC = 53418,
+	PM_PMC4_REWIND = 65568,
+	PM_L2_RCLD_DISP = 90752,
+	PM_THRD_PRIO_2_3_CYC = 16562,
+	PM_MRK_PTEG_FROM_L2MISS = 315480,
+	PM_IC_DEMAND_L2_BHT_REDIRECT = 16536,
+	PM_LSU_DERAT_MISS = 131318,
+	PM_IC_PREF_CANCEL_L2 = 16532,
+	PM_MRK_FIN_STALL_CYC_COUNT = 65597,
+	PM_BR_PRED_CCACHE = 16544,
+	PM_GCT_UTIL_1_TO_2_SLOTS = 8348,
+	PM_MRK_ST_CMPL_INT = 196660,
+	PM_LSU_TWO_TABLEWALK_CYC = 53414,
+	PM_MRK_DATA_FROM_L3MISS = 184392,
+	PM_GCT_NOSLOT_CYC___2 = 65784,
+	PM_LSU_SET_MPRED = 49320,
+	PM_FLUSH_DISP_TLBIE = 8330,
+	PM_VSU1_FCONV = 41138,
+	PM_DERAT_MISS_16G = 311388,
+	PM_INST_FROM_LMEM = 213066,
+	PM_IC_DEMAND_L2_BR_REDIRECT = 16538,
+	PM_CMPLU_STALL_SCALAR_LONG = 131096,
+	PM_INST_PTEG_FROM_L2 = 122960,
+	PM_PTEG_FROM_L2 = 114768,
+	PM_MRK_DATA_FROM_L21_SHR_CYC = 131108,
+	PM_MRK_DTLB_MISS_4K___2 = 184410,
+	PM_VSU0_FPSCR = 45212,
+	PM_VSU1_VECT_DOUBLE_ISSUED = 45186,
+	PM_MRK_PTEG_FROM_RL2L3_MOD = 118866,
+	PM_MEM0_RQ_DISP = 65667,
+	PM_L2_LD_MISS = 155776,
+	PM_VMX_RESULT_SAT_1 = 45216,
+	PM_L1_PREF___3 = 55480,
+	PM_MRK_DATA_FROM_LMEM_CYC = 131116,
+	PM_GRP_IC_MISS_NONSPEC = 65548,
+	PM_PB_NODE_PUMP = 65665,
+	PM_SHL_MERGED = 20612,
+	PM_NEST_PAIR1_ADD = 133249,
+	PM_DATA_FROM_L3___3 = 114760,
+	PM_LSU_FLUSH = 8334,
+	PM_LSU_SRQ_SYNC_COUNT = 53399,
+	PM_PMC2_OVERFLOW = 196624,
+	PM_LSU_LDF = 51332,
+	PM_POWER_EVENT3 = 196718,
+	PM_DISP_WT = 196616,
+	PM_CMPLU_STALL_REJECT = 262166,
+	PM_IC_BANK_CONFLICT = 16514,
+	PM_BR_MPRED_CR_TA = 18606,
+	PM_L2_INST_MISS = 221314,
+	PM_CMPLU_STALL_ERAT_MISS = 262168,
+	PM_NEST_PAIR2_ADD = 198785,
+	PM_MRK_LSU_FLUSH = 53388,
+	PM_L2_LDST = 92288,
+	PM_INST_FROM_L31_SHR = 81998,
+	PM_VSU0_FIN = 41148,
+	PM_LARX_LSU = 51348,
+	PM_INST_FROM_RMEM = 213058,
+	PM_DISP_CLB_HELD_TLBIE = 8342,
+	PM_MRK_DATA_FROM_DMEM_CYC = 131118,
+	PM_BR_PRED_CR = 16552,
+	PM_LSU_REJECT = 65636,
+	PM_GCT_UTIL_3_TO_6_SLOTS = 8350,
+	PM_CMPLU_STALL_END_GCT_NOSLOT = 65576,
+	PM_LSU0_REJECT_LMQ_FULL = 49316,
+	PM_VSU_FEST = 43192,
+	PM_NEST_PAIR0_AND = 67715,
+	PM_PTEG_FROM_L3 = 180304,
+	PM_POWER_EVENT2 = 131182,
+	PM_IC_PREF_CANCEL_PAGE = 16528,
+	PM_VSU0_FSQRT_FDIV = 41096,
+	PM_MRK_GRP_CMPL = 262192,
+	PM_VSU0_SCAL_DOUBLE_ISSUED = 45192,
+	PM_GRP_DISP = 196618,
+	PM_LSU0_LDX = 49288,
+	PM_DATA_FROM_L2 = 114752,
+	PM_MRK_DATA_FROM_RL2L3_MOD = 118850,
+	PM_LD_REF_L1___3 = 51328,
+	PM_VSU0_VECT_DOUBLE_ISSUED = 45184,
+	PM_VSU1_2FLOP_DOUBLE = 41102,
+	PM_THRD_PRIO_6_7_CYC = 16566,
+	PM_BC_PLUS_8_RSLV_TAKEN = 16570,
+	PM_BR_MPRED_CR = 16556,
+	PM_L3_CO_MEM = 323714,
+	PM_LD_MISS_L1___4 = 262384,
+	PM_DATA_FROM_RL2L3_MOD = 114754,
+	PM_LSU_SRQ_FULL_CYC = 65562,
+	PM_TABLEWALK_CYC = 65574,
+	PM_MRK_PTEG_FROM_RMEM = 249938,
+	PM_LSU_SRQ_STFWD = 51360,
+	PM_INST_PTEG_FROM_RMEM = 254034,
+	PM_FXU0_FIN = 65540,
+	PM_LSU1_L1_SW_PREF = 49310,
+	PM_PTEG_FROM_L31_MOD = 114772,
+	PM_PMC5_OVERFLOW = 65572,
+	PM_LD_REF_L1_LSU1 = 49282,
+	PM_INST_PTEG_FROM_L21_SHR = 319574,
+	PM_CMPLU_STALL_THRD = 65564,
+	PM_DATA_FROM_RMEM = 245826,
+	PM_VSU0_SCAL_SINGLE_ISSUED = 45188,
+	PM_BR_MPRED_LSTACK = 16550,
+	PM_MRK_DATA_FROM_RL2L3_MOD_CYC = 262184,
+	PM_LSU0_FLUSH_UST = 49332,
+	PM_LSU_NCST = 49296,
+	PM_BR_TAKEN = 131076,
+	PM_INST_PTEG_FROM_LMEM = 319570,
+	PM_GCT_NOSLOT_BR_MPRED_IC_MISS = 262172,
+	PM_DTLB_MISS_4K___2 = 180314,
+	PM_PMC4_SAVED = 196642,
+	PM_VSU1_PERMUTE_ISSUED = 45202,
+	PM_SLB_MISS = 55440,
+	PM_LSU1_FLUSH_LRQ = 49338,
+	PM_DTLB_MISS___4 = 196860,
+	PM_VSU1_FRSP = 41142,
+	PM_VSU_VECTOR_DOUBLE_ISSUED = 47232,
+	PM_L2_CASTOUT_SHR = 90498,
+	PM_DATA_FROM_DL2L3_SHR = 245828,
+	PM_VSU1_STF = 45198,
+	PM_ST_FIN = 131312,
+	PM_PTEG_FROM_L21_SHR = 311382,
+	PM_L2_LOC_GUESS_WRONG = 156800,
+	PM_MRK_STCX_FAIL = 53390,
+	PM_LSU0_REJECT_LHS = 49324,
+	PM_IC_PREF_CANCEL_HIT = 16530,
+	PM_L3_PREF_BUSY = 323712,
+	PM_MRK_BRU_FIN = 131130,
+	PM_LSU1_NCLD = 49294,
+	PM_INST_PTEG_FROM_L31_MOD = 122964,
+	PM_LSU_NCLD = 51340,
+	PM_LSU_LDX = 51336,
+	PM_L2_LOC_GUESS_CORRECT = 91264,
+	PM_THRESH_TIMEO = 65592,
+	PM_L3_PREF_ST = 53422,
+	PM_DISP_CLB_HELD_SYNC = 8344,
+	PM_VSU_SIMPLE_ISSUED = 47252,
+	PM_VSU1_SINGLE = 41130,
+	PM_DATA_TABLEWALK_CYC = 196634,
+	PM_L2_RC_ST_DONE = 222080,
+	PM_MRK_PTEG_FROM_L21_MOD = 249942,
+	PM_LARX_LSU1 = 49302,
+	PM_MRK_DATA_FROM_RMEM = 249922,
+	PM_DISP_CLB_HELD = 8336,
+	PM_DERAT_MISS_4K = 114780,
+	PM_L2_RCLD_DISP_FAIL_ADDR = 90754,
+	PM_SEG_EXCEPTION = 10404,
+	PM_FLUSH_DISP_SB = 8332,
+	PM_L2_DC_INV = 156034,
+	PM_PTEG_FROM_DL2L3_MOD = 311380,
+	PM_DSEG = 8358,
+	PM_BR_PRED_LSTACK = 16546,
+	PM_VSU0_STF = 45196,
+	PM_LSU_FX_FIN = 65638,
+	PM_DERAT_MISS_16M = 245852,
+	PM_MRK_PTEG_FROM_DL2L3_MOD = 315476,
+	PM_GCT_UTIL_11_PLUS_SLOTS = 8354,
+	PM_INST_FROM_L3 = 81992,
+	PM_MRK_IFU_FIN = 196666,
+	PM_ITLB_MISS___4 = 262396,
+	PM_VSU_STF = 47244,
+	PM_LSU_FLUSH_UST = 51380,
+	PM_L2_LDST_MISS = 157824,
+	PM_FXU1_FIN = 262148,
+	PM_SHL_DEALLOCATED = 20608,
+	PM_L2_SN_M_WR_DONE = 287618,
+	PM_LSU_REJECT_SET_MPRED = 51368,
+	PM_L3_PREF_LD = 53420,
+	PM_L2_SN_M_RD_DONE = 287616,
+	PM_MRK_DERAT_MISS_16G = 315484,
+	PM_VSU_FCONV = 43184,
+	PM_ANY_THRD_RUN_CYC = 65786,
+	PM_LSU_LMQ_FULL_CYC = 53412,
+	PM_MRK_LSU_REJECT_LHS = 53378,
+	PM_MRK_LD_MISS_L1_CYC = 262206,
+	PM_MRK_DATA_FROM_L2_CYC = 131104,
+	PM_INST_IMC_MATCH_DISP = 196630,
+	PM_MRK_DATA_FROM_RMEM_CYC = 262188,
+	PM_VSU0_SIMPLE_ISSUED = 45204,
+	PM_CMPLU_STALL_DIV = 262164,
+	PM_MRK_PTEG_FROM_RL2L3_SHR = 184404,
+	PM_VSU_FMA_DOUBLE = 43152,
+	PM_VSU_4FLOP = 43164,
+	PM_VSU1_FIN = 41150,
+	PM_NEST_PAIR1_AND = 133251,
+	PM_INST_PTEG_FROM_RL2L3_MOD = 122962,
+	PM_RUN_CYC___4 = 131316,
+	PM_PTEG_FROM_RMEM = 245842,
+	PM_LSU_LRQ_S0_VALID = 53406,
+	PM_LSU0_LDF = 49284,
+	PM_FLUSH_COMPLETION = 196626,
+	PM_ST_MISS_L1___4 = 196848,
+	PM_L2_NODE_PUMP = 222336,
+	PM_INST_FROM_DL2L3_SHR = 213060,
+	PM_MRK_STALL_CMPLU_CYC = 196670,
+	PM_VSU1_DENORM = 41134,
+	PM_MRK_DATA_FROM_L31_SHR_CYC = 131110,
+	PM_NEST_PAIR0_ADD = 67713,
+	PM_INST_FROM_L3MISS = 147528,
+	PM_EE_OFF_EXT_INT = 8320,
+	PM_INST_PTEG_FROM_DMEM = 188498,
+	PM_INST_FROM_DL2L3_MOD = 213068,
+	PM_PMC6_OVERFLOW = 196644,
+	PM_VSU_2FLOP_DOUBLE = 43148,
+	PM_TLB_MISS = 131174,
+	PM_FXU_BUSY = 131086,
+	PM_L2_RCLD_DISP_FAIL_OTHER = 156288,
+	PM_LSU_REJECT_LMQ_FULL = 51364,
+	PM_IC_RELOAD_SHR = 16534,
+	PM_GRP_MRK = 65585,
+	PM_MRK_ST_NEST = 131124,
+	PM_VSU1_FSQRT_FDIV = 41098,
+	PM_LSU0_FLUSH_LRQ = 49336,
+	PM_LARX_LSU0 = 49300,
+	PM_IBUF_FULL_CYC = 16516,
+	PM_MRK_DATA_FROM_DL2L3_SHR_CYC = 131114,
+	PM_LSU_DC_PREF_STREAM_ALLOC = 55464,
+	PM_GRP_MRK_CYC = 65584,
+	PM_MRK_DATA_FROM_RL2L3_SHR_CYC = 131112,
+	PM_L2_GLOB_GUESS_CORRECT = 91266,
+	PM_LSU_REJECT_LHS = 51372,
+	PM_MRK_DATA_FROM_LMEM = 249930,
+	PM_INST_PTEG_FROM_L3 = 188496,
+	PM_FREQ_DOWN = 196620,
+	PM_PB_RETRY_NODE_PUMP = 196737,
+	PM_INST_FROM_RL2L3_SHR = 81996,
+	PM_MRK_INST_ISSUED = 65586,
+	PM_PTEG_FROM_L3MISS = 180312,
+	PM_RUN_PURR = 262388,
+	PM_MRK_GRP_IC_MISS = 262200,
+	PM_MRK_DATA_FROM_L3 = 118856,
+	PM_CMPLU_STALL_DCACHE_MISS = 131094,
+	PM_PTEG_FROM_RL2L3_SHR = 180308,
+	PM_LSU_FLUSH_LRQ = 51384,
+	PM_MRK_DERAT_MISS_64K = 184412,
+	PM_INST_PTEG_FROM_DL2L3_MOD = 319572,
+	PM_L2_ST_MISS___3 = 155778,
+	PM_MRK_PTEG_FROM_L21_SHR = 315478,
+	PM_LWSYNC = 53396,
+	PM_LSU0_DC_PREF_STREAM_CONFIRM_STRIDE = 53436,
+	PM_MRK_LSU_FLUSH_LRQ = 53384,
+	PM_INST_IMC_MATCH_CMPL = 65776,
+	PM_NEST_PAIR3_AND = 264323,
+	PM_PB_RETRY_SYS_PUMP = 262273,
+	PM_MRK_INST_FIN = 196656,
+	PM_MRK_PTEG_FROM_DL2L3_SHR = 249940,
+	PM_INST_FROM_L31_MOD = 81988,
+	PM_MRK_DTLB_MISS_64K___2 = 249950,
+	PM_LSU_FIN = 196710,
+	PM_MRK_LSU_REJECT = 262244,
+	PM_L2_CO_FAIL_BUSY = 91010,
+	PM_MEM0_WQ_DISP = 262275,
+	PM_DATA_FROM_L31_MOD = 114756,
+	PM_THERMAL_WARN = 65558,
+	PM_VSU0_4FLOP = 41116,
+	PM_BR_MPRED_CCACHE = 16548,
+	PM_CMPLU_STALL_IFU = 262220,
+	PM_L1_DEMAND_WRITE___3 = 16524,
+	PM_FLUSH_BR_MPRED = 8324,
+	PM_MRK_DTLB_MISS_16G___2 = 118878,
+	PM_MRK_PTEG_FROM_DMEM = 184402,
+	PM_L2_RCST_DISP = 221824,
+	PM_CMPLU_STALL___3 = 262154,
+	PM_LSU_PARTIAL_CDF = 49322,
+	PM_DISP_CLB_HELD_SB = 8360,
+	PM_VSU0_FMA_DOUBLE = 41104,
+	PM_FXU0_BUSY_FXU1_IDLE = 196622,
+	PM_IC_DEMAND_CYC = 65560,
+	PM_MRK_DATA_FROM_L21_SHR = 249934,
+	PM_MRK_LSU_FLUSH_UST = 53382,
+	PM_INST_PTEG_FROM_L3MISS = 188504,
+	PM_VSU_DENORM = 43180,
+	PM_MRK_LSU_PARTIAL_CDF = 53376,
+	PM_INST_FROM_L21_SHR = 213070,
+	PM_IC_PREF_WRITE___3 = 16526,
+	PM_BR_PRED = 16540,
+	PM_INST_FROM_DMEM = 81994,
+	PM_IC_PREF_CANCEL_ALL = 18576,
+	PM_LSU_DC_PREF_STREAM_CONFIRM = 55476,
+	PM_MRK_LSU_FLUSH_SRQ = 53386,
+	PM_MRK_FIN_STALL_CYC = 65596,
+	PM_L2_RCST_DISP_FAIL_OTHER = 287360,
+	PM_VSU1_DD_ISSUED = 45208,
+	PM_PTEG_FROM_L31_SHR = 180310,
+	PM_DATA_FROM_L21_SHR = 245838,
+	PM_LSU0_NCLD = 49292,
+	PM_VSU1_4FLOP = 41118,
+	PM_VSU1_8FLOP = 41122,
+	PM_VSU_8FLOP = 43168,
+	PM_LSU_LMQ_SRQ_EMPTY_CYC = 131134,
+	PM_DTLB_MISS_64K___2 = 245854,
+	PM_THRD_CONC_RUN_INST = 196852,
+	PM_MRK_PTEG_FROM_L2 = 118864,
+	PM_PB_SYS_PUMP = 131201,
+	PM_VSU_FIN = 43196,
+	PM_MRK_DATA_FROM_L31_MOD = 118852,
+	PM_THRD_PRIO_0_1_CYC = 16560,
+	PM_DERAT_MISS_64K = 180316,
+	PM_PMC2_REWIND = 196640,
+	PM_INST_FROM_L2 = 81984,
+	PM_GRP_BR_MPRED_NONSPEC = 65546,
+	PM_INST_DISP___4 = 131314,
+	PM_MEM0_RD_CANCEL_TOTAL = 196739,
+	PM_LSU0_DC_PREF_STREAM_CONFIRM = 53428,
+	PM_L1_DCACHE_RELOAD_VALID = 196854,
+	PM_VSU_SCALAR_DOUBLE_ISSUED = 47240,
+	PM_L3_PREF_HIT = 258176,
+	PM_MRK_PTEG_FROM_L31_MOD = 118868,
+	PM_CMPLU_STALL_STORE = 131146,
+	PM_MRK_FXU_FIN = 131128,
+	PM_PMC4_OVERFLOW = 65552,
+	PM_MRK_PTEG_FROM_L3 = 184400,
+	PM_LSU0_LMQ_LHR_MERGE = 53400,
+	PM_BTAC_HIT = 20618,
+	PM_L3_RD_BUSY = 323714,
+	PM_LSU0_L1_SW_PREF = 49308,
+	PM_INST_FROM_L2MISS = 278600,
+	PM_LSU0_DC_PREF_STREAM_ALLOC = 53416,
+	PM_L2_ST___3 = 90242,
+	PM_VSU0_DENORM = 41132,
+	PM_MRK_DATA_FROM_DL2L3_SHR = 249924,
+	PM_BR_PRED_CR_TA = 18602,
+	PM_VSU0_FCONV = 41136,
+	PM_MRK_LSU_FLUSH_ULD = 53380,
+	PM_BTAC_MISS = 20616,
+	PM_MRK_LD_MISS_EXPOSED_CYC_COUNT = 65599,
+	PM_MRK_DATA_FROM_L2 = 118848,
+	PM_LSU_DCACHE_RELOAD_VALID = 53410,
+	PM_VSU_FMA = 43140,
+	PM_LSU0_FLUSH_SRQ = 49340,
+	PM_LSU1_L1_PREF = 53434,
+	PM_IOPS_CMPL = 65556,
+	PM_L2_SYS_PUMP = 222338,
+	PM_L2_RCLD_BUSY_RC_FULL = 287362,
+	PM_LSU_LMQ_S0_ALLOC = 53409,
+	PM_FLUSH_DISP_SYNC = 8328,
+	PM_MRK_DATA_FROM_DL2L3_MOD_CYC = 262186,
+	PM_L2_IC_INV = 156032,
+	PM_MRK_DATA_FROM_L21_MOD_CYC = 262180,
+	PM_L3_PREF_LDST = 55468,
+	PM_LSU_SRQ_EMPTY_CYC = 262152,
+	PM_LSU_LMQ_S0_VALID = 53408,
+	PM_FLUSH_PARTIAL = 8326,
+	PM_VSU1_FMA_DOUBLE = 41106,
+	PM_1PLUS_PPC_DISP = 262386,
+	PM_DATA_FROM_L2MISS = 131326,
+	PM_SUSPENDED = 0,
+	PM_VSU0_FMA = 41092,
+	PM_CMPLU_STALL_SCALAR = 262162,
+	PM_STCX_FAIL = 49306,
+	PM_VSU0_FSQRT_FDIV_DOUBLE = 41108,
+	PM_DC_PREF_DST = 53424,
+	PM_VSU1_SCAL_SINGLE_ISSUED = 45190,
+	PM_L3_HIT = 127104,
+	PM_L2_GLOB_GUESS_WRONG = 156802,
+	PM_MRK_DFU_FIN = 131122,
+	PM_INST_FROM_L1___3 = 16512,
+	PM_BRU_FIN___2 = 65640,
+	PM_IC_DEMAND_REQ = 16520,
+	PM_VSU1_FSQRT_FDIV_DOUBLE = 41110,
+	PM_VSU1_FMA = 41094,
+	PM_MRK_LD_MISS_L1 = 131126,
+	PM_VSU0_2FLOP_DOUBLE = 41100,
+	PM_LSU_DC_PREF_STRIDED_STREAM_CONFIRM = 55484,
+	PM_INST_PTEG_FROM_L31_SHR = 188502,
+	PM_MRK_LSU_REJECT_ERAT_MISS = 196708,
+	PM_MRK_DATA_FROM_L2MISS___2 = 315464,
+	PM_DATA_FROM_RL2L3_SHR = 114764,
+	PM_INST_FROM_PREF = 81990,
+	PM_VSU1_SQ = 45214,
+	PM_L2_LD_DISP = 221568,
+	PM_L2_DISP_ALL = 286848,
+	PM_THRD_GRP_CMPL_BOTH_CYC = 65554,
+	PM_VSU_FSQRT_FDIV_DOUBLE = 43156,
+	PM_BR_MPRED = 262390,
+	PM_INST_PTEG_FROM_DL2L3_SHR = 254036,
+	PM_VSU_1FLOP = 43136,
+	PM_HV_CYC = 131082,
+	PM_MRK_LSU_FIN = 262194,
+	PM_MRK_DATA_FROM_RL2L3_SHR = 118860,
+	PM_DTLB_MISS_16M___2 = 311390,
+	PM_LSU1_LMQ_LHR_MERGE = 53402,
+	PM_IFU_FIN = 262246,
+	PM_1THRD_CON_RUN_INSTR = 196706,
+	PM_CMPLU_STALL_COUNT = 262155,
+	PM_MEM0_PB_RD_CL = 196739,
+	PM_THRD_1_RUN_CYC = 65632,
+	PM_THRD_2_CONC_RUN_INSTR = 262242,
+	PM_THRD_2_RUN_CYC = 131168,
+	PM_THRD_3_CONC_RUN_INST = 65634,
+	PM_THRD_3_RUN_CYC = 196704,
+	PM_THRD_4_CONC_RUN_INST = 131170,
+	PM_THRD_4_RUN_CYC = 262240,
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = -1,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
+
+struct stacktrace_cookie {
+	long unsigned int *store;
+	unsigned int size;
+	unsigned int skip;
+	unsigned int len;
+};
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	long unsigned int magic;
+	bool new_sb_created;
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+enum cgroup_opt_features {
+	OPT_FEATURE_COUNT = 0,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+struct bpf_iter__bpf_map_elem {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct bucket {
+	struct hlist_nulls_head head;
+	union {
+		raw_spinlock_t raw_lock;
+		spinlock_t lock;
+	};
+};
+
+struct htab_elem;
+
+struct bpf_htab {
+	struct bpf_map map;
+	struct bucket *buckets;
+	void *elems;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct pcpu_freelist freelist;
+		struct bpf_lru lru;
+	};
+	struct htab_elem **extra_elems;
+	atomic_t count;
+	u32 n_buckets;
+	u32 elem_size;
+	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int *map_locked[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct htab_elem {
+	union {
+		struct hlist_nulls_node hash_node;
+		struct {
+			void *padding;
+			union {
+				struct bpf_htab *htab;
+				struct pcpu_freelist_node fnode;
+				struct htab_elem *batch_flink;
+			};
+		};
+	};
+	union {
+		struct callback_head rcu;
+		struct bpf_lru_node lru_node;
+	};
+	u32 hash;
+	long: 0;
+	char key[0];
+};
+
+struct bpf_iter_seq_hash_map_info {
+	struct bpf_map *map;
+	struct bpf_htab *htab;
+	void *percpu_value_buf;
+	u32 bucket_id;
+	u32 skip_elems;
+};
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+};
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+enum rseq_cpu_id_state {
+	RSEQ_CPU_ID_UNINITIALIZED = -1,
+	RSEQ_CPU_ID_REGISTRATION_FAILED = -2,
+};
+
+enum rseq_flags {
+	RSEQ_FLAG_UNREGISTER = 1,
+};
+
+enum rseq_cs_flags {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
+};
+
+struct rseq_cs {
+	__u32 version;
+	__u32 flags;
+	__u64 start_ip;
+	__u64 post_commit_offset;
+	__u64 abort_ip;
+};
+
+struct trace_event_raw_rseq_update {
+	struct trace_entry ent;
+	s32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rseq_ip_fixup {
+	struct trace_entry ent;
+	long unsigned int regs_ip;
+	long unsigned int start_ip;
+	long unsigned int post_commit_offset;
+	long unsigned int abort_ip;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rseq_update {};
+
+struct trace_event_data_offsets_rseq_ip_fixup {};
+
+typedef void (*btf_trace_rseq_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	long unsigned int invalidate_seq;
+	long unsigned int active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct mmu_interval_notifier;
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
+};
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	long unsigned int invalidate_seq;
+};
+
+typedef __kernel_ulong_t __kernel_ino_t;
+
+struct stat {
+	long unsigned int st_dev;
+	__kernel_ino_t st_ino;
+	long unsigned int st_nlink;
+	__kernel_mode_t st_mode;
+	__kernel_uid32_t st_uid;
+	__kernel_gid32_t st_gid;
+	long unsigned int st_rdev;
+	long int st_size;
+	long unsigned int st_blksize;
+	long unsigned int st_blocks;
+	long unsigned int st_atime;
+	long unsigned int st_atime_nsec;
+	long unsigned int st_mtime;
+	long unsigned int st_mtime_nsec;
+	long unsigned int st_ctime;
+	long unsigned int st_ctime_nsec;
+	long unsigned int __unused4;
 	long unsigned int __unused5;
 	long unsigned int __unused6;
 };
 
-struct shminfo64 {
-	long unsigned int shmmax;
-	long unsigned int shmmin;
-	long unsigned int shmmni;
-	long unsigned int shmseg;
-	long unsigned int shmall;
-	long unsigned int __unused1;
-	long unsigned int __unused2;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct shminfo {
-	int shmmax;
-	int shmmin;
-	int shmmni;
-	int shmseg;
-	int shmall;
-};
-
-struct shm_info {
-	int used_ids;
-	__kernel_ulong_t shm_tot;
-	__kernel_ulong_t shm_rss;
-	__kernel_ulong_t shm_swp;
-	__kernel_ulong_t swap_attempts;
-	__kernel_ulong_t swap_successes;
-};
-
-struct compat_shmid64_ds {
-	struct compat_ipc64_perm shm_perm;
-	unsigned int shm_atime_high;
-	unsigned int shm_atime;
-	unsigned int shm_dtime_high;
-	unsigned int shm_dtime;
-	unsigned int shm_ctime_high;
-	unsigned int shm_ctime;
+struct stat64 {
+	long long unsigned int st_dev;
+	long long unsigned int st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	long long unsigned int st_rdev;
+	short unsigned int __pad2;
+	long long int st_size;
+	int st_blksize;
+	long long int st_blocks;
+	int st_atime;
+	unsigned int st_atime_nsec;
+	int st_mtime;
+	unsigned int st_mtime_nsec;
+	int st_ctime;
+	unsigned int st_ctime_nsec;
 	unsigned int __unused4;
-	compat_size_t shm_segsz;
-	compat_pid_t shm_cpid;
-	compat_pid_t shm_lpid;
-	compat_ulong_t shm_nattch;
-	compat_ulong_t __unused5;
-	compat_ulong_t __unused6;
+	unsigned int __unused5;
 };
 
-struct shmid_kernel {
-	struct kern_ipc_perm shm_perm;
-	struct file *shm_file;
-	long unsigned int shm_nattch;
-	long unsigned int shm_segsz;
-	time64_t shm_atim;
-	time64_t shm_dtim;
-	time64_t shm_ctim;
-	struct pid *shm_cprid;
-	struct pid *shm_lprid;
-	struct user_struct *mlock_user;
-	struct task_struct *shm_creator;
-	struct list_head shm_clist;
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u64 __spare2;
+	__u64 __spare3[12];
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	dio_submit_t *submit_io;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	long unsigned int refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+	long: 64;
+};
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx *table[0];
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	long unsigned int user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	long unsigned int mmap_base;
+	long unsigned int mmap_size;
+	struct page **ring_pages;
+	long int nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 };
 
-struct shm_file_data {
-	int id;
-	struct ipc_namespace *ns;
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+struct fsync_iocb {
 	struct file *file;
-	const struct vm_operations_struct *vm_ops;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
 };
 
-struct compat_shmid_ds {
-	struct compat_ipc_perm shm_perm;
-	int shm_segsz;
-	old_time32_t shm_atime;
-	old_time32_t shm_dtime;
-	old_time32_t shm_ctime;
-	compat_ipc_pid_t shm_cpid;
-	compat_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	compat_uptr_t shm_unused2;
-	compat_uptr_t shm_unused3;
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
 };
 
-struct compat_shminfo64 {
-	compat_ulong_t shmmax;
-	compat_ulong_t shmmin;
-	compat_ulong_t shmmni;
-	compat_ulong_t shmseg;
-	compat_ulong_t shmall;
-	compat_ulong_t __unused1;
-	compat_ulong_t __unused2;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
 };
 
-struct compat_shm_info {
-	compat_int_t used_ids;
-	compat_ulong_t shm_tot;
-	compat_ulong_t shm_rss;
-	compat_ulong_t shm_swp;
-	compat_ulong_t swap_attempts;
-	compat_ulong_t swap_successes;
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
 };
 
-struct msgbuf___2;
-
-struct ipc_kludge {
-	struct msgbuf___2 *msgp;
-	long int msgtyp;
+struct __aio_sigset {
+	const sigset_t *sigmask;
+	size_t sigsetsize;
 };
 
-struct compat_ipc_kludge {
-	compat_uptr_t msgp;
-	compat_long_t msgtyp;
-};
-
-struct mqueue_fs_context {
-	struct ipc_namespace *ipc_ns;
-};
-
-struct posix_msg_tree_node {
-	struct rb_node rb_node;
-	struct list_head msg_list;
-	int priority;
-};
-
-struct ext_wait_queue {
-	struct task_struct *task;
+struct vmcore {
 	struct list_head list;
-	struct msg_msg *msg;
+	long long unsigned int paddr;
+	long long unsigned int size;
+	loff_t offset;
+};
+
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+typedef struct elf64_note Elf64_Nhdr;
+
+struct vmcore_cb {
+	bool (*pfn_is_ram)(struct vmcore_cb *, long unsigned int);
+	struct list_head next;
+};
+
+struct fstrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 minlen;
+};
+
+struct ext4_free_data {
+	struct list_head efd_list;
+	struct rb_node efd_node;
+	ext4_group_t efd_group;
+	ext4_grpblk_t efd_start_cluster;
+	ext4_grpblk_t efd_count;
+	tid_t efd_tid;
+};
+
+enum {
+	MB_INODE_PA = 0,
+	MB_GROUP_PA = 1,
+};
+
+struct ext4_buddy {
+	struct page *bd_buddy_page;
+	void *bd_buddy;
+	struct page *bd_bitmap_page;
+	void *bd_bitmap;
+	struct ext4_group_info *bd_info;
+	struct super_block *bd_sb;
+	__u16 bd_blkbits;
+	ext4_group_t bd_group;
+};
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+struct sg {
+	struct ext4_group_info info;
+	ext4_grpblk_t counters[18];
+};
+
+struct nfs_callback_data {
+	unsigned int users;
+	struct svc_serv *serv;
+};
+
+struct xfs_trans_header {
+	uint th_magic;
+	uint th_type;
+	int32_t th_tid;
+	uint th_num_items;
+};
+
+typedef struct xfs_trans_header xfs_trans_header_t;
+
+struct xfs_attrlist_cursor_kern {
+	__u32 hashval;
+	__u32 blkno;
+	__u32 offset;
+	__u16 pad1;
+	__u8 pad2;
+	__u8 initted;
+};
+
+struct xfs_attr_list_context;
+
+typedef void (*put_listent_func_t)(struct xfs_attr_list_context *, int, unsigned char *, int, int);
+
+struct xfs_attr_list_context {
+	struct xfs_trans *tp;
+	struct xfs_inode *dp;
+	struct xfs_attrlist_cursor_kern cursor;
+	void *buffer;
+	int seen_enough;
+	bool allow_incomplete;
+	ssize_t count;
+	int dupcnt;
+	int bufsize;
+	int firstu;
+	unsigned int attr_filter;
+	int resynch;
+	put_listent_func_t put_listent;
+	int index;
+};
+
+enum xfs_delattr_state {
+	XFS_DAS_UNINIT = 0,
+	XFS_DAS_SF_ADD = 1,
+	XFS_DAS_SF_REMOVE = 2,
+	XFS_DAS_LEAF_ADD = 3,
+	XFS_DAS_LEAF_REMOVE = 4,
+	XFS_DAS_NODE_ADD = 5,
+	XFS_DAS_NODE_REMOVE = 6,
+	XFS_DAS_LEAF_SET_RMT = 7,
+	XFS_DAS_LEAF_ALLOC_RMT = 8,
+	XFS_DAS_LEAF_REPLACE = 9,
+	XFS_DAS_LEAF_REMOVE_OLD = 10,
+	XFS_DAS_LEAF_REMOVE_RMT = 11,
+	XFS_DAS_LEAF_REMOVE_ATTR = 12,
+	XFS_DAS_NODE_SET_RMT = 13,
+	XFS_DAS_NODE_ALLOC_RMT = 14,
+	XFS_DAS_NODE_REPLACE = 15,
+	XFS_DAS_NODE_REMOVE_OLD = 16,
+	XFS_DAS_NODE_REMOVE_RMT = 17,
+	XFS_DAS_NODE_REMOVE_ATTR = 18,
+	XFS_DAS_DONE = 19,
+};
+
+struct xlog_recover {
+	struct hlist_node r_list;
+	xlog_tid_t r_log_tid;
+	xfs_trans_header_t r_theader;
+	int r_state;
+	xfs_lsn_t r_lsn;
+	struct list_head r_itemq;
+};
+
+struct trace_event_raw_xfs_attr_list_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 hashval;
+	u32 blkno;
+	u32 offset;
+	void *buffer;
+	int bufsize;
+	int count;
+	int firstu;
+	int dupcnt;
+	unsigned int attr_filter;
+	char __data[0];
+};
+
+struct trace_event_raw_xlog_intent_recovery_failed {
+	struct trace_entry ent;
+	dev_t dev;
+	int error;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_perag_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int refcount;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inodegc_worker {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int shrinker_hits;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fs_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long long unsigned int mflags;
+	long unsigned int opstate;
+	long unsigned int sbflags;
+	void *caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inodegc_shrinker_scan {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	void *caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_attr_list_node_descend {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 hashval;
+	u32 blkno;
+	u32 offset;
+	void *buffer;
+	int bufsize;
+	int count;
+	int firstu;
+	int dupcnt;
+	unsigned int attr_filter;
+	u32 bt_hashval;
+	u32 bt_before;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_bmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	void *leaf;
+	int pos;
+	xfs_fileoff_t startoff;
+	xfs_fsblock_t startblock;
+	xfs_filblks_t blockcount;
+	xfs_exntst_t state;
+	int bmap_state;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	int nblks;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	unsigned int flags;
+	long unsigned int caller_ip;
+	const void *buf_ops;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_flags_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	unsigned int length;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	unsigned int flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_ioerror {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	unsigned int length;
+	unsigned int flags;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	int error;
+	xfs_failaddr_t caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t buf_bno;
+	unsigned int buf_len;
+	int buf_hold;
+	int buf_pincount;
+	int buf_lockval;
+	unsigned int buf_flags;
+	unsigned int bli_recur;
+	int bli_refcount;
+	unsigned int bli_flags;
+	long unsigned int li_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filestream_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_agnumber_t agno;
+	int streams;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filestream_pick {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_agnumber_t agno;
+	int streams;
+	xfs_extlen_t free;
+	int nscan;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_lock_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int lock_flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	long unsigned int iflags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filemap_fault {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	enum page_entry_size pe_size;
+	bool write_fault;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iref_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int count;
+	int pincount;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iomap_prealloc_size {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsblock_t blocks;
+	int shift;
+	unsigned int writeio_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_irec_merge_pre {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	uint16_t holemask;
+	xfs_agino_t nagino;
+	uint16_t nholemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_irec_merge_post {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	uint16_t holemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_namespace_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t dp_ino;
+	int namelen;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rename {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_dp_ino;
+	xfs_ino_t target_dp_ino;
+	int src_namelen;
+	int target_namelen;
+	u32 __data_loc_src_name;
+	u32 __data_loc_target_name;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dquot_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 id;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	unsigned int nrefs;
+	long long unsigned int res_bcount;
+	long long unsigned int res_rtbcount;
+	long long unsigned int res_icount;
+	long long unsigned int bcount;
+	long long unsigned int rtbcount;
+	long long unsigned int icount;
+	long long unsigned int blk_hardlimit;
+	long long unsigned int blk_softlimit;
+	long long unsigned int rtb_hardlimit;
+	long long unsigned int rtb_softlimit;
+	long long unsigned int ino_hardlimit;
+	long long unsigned int ino_softlimit;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_mod_dquot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	unsigned int dqid;
+	unsigned int field;
+	int64_t delta;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dqtrx_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	u32 dqid;
+	uint64_t blk_res;
+	int64_t bcount_delta;
+	int64_t delbcnt_delta;
+	uint64_t rtblk_res;
+	uint64_t rtblk_res_used;
+	int64_t rtbcount_delta;
+	int64_t delrtb_delta;
+	uint64_t ino_res;
+	uint64_t ino_res_used;
+	int64_t icount_delta;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_loggrant_class {
+	struct trace_entry ent;
+	dev_t dev;
+	char ocnt;
+	char cnt;
+	int curr_res;
+	int unit_res;
+	unsigned int flags;
+	int reserveq;
+	int writeq;
+	int grant_reserve_cycle;
+	int grant_reserve_bytes;
+	int grant_write_cycle;
+	int grant_write_bytes;
+	int curr_cycle;
+	int curr_block;
+	xfs_lsn_t tail_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	void *lip;
+	uint type;
+	long unsigned int flags;
+	xfs_lsn_t lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_force {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t lsn;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ail_class {
+	struct trace_entry ent;
+	dev_t dev;
+	void *lip;
+	uint type;
+	long unsigned int flags;
+	xfs_lsn_t old_lsn;
+	xfs_lsn_t new_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_assign_tail_lsn {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t new_lsn;
+	xfs_lsn_t old_lsn;
+	xfs_lsn_t last_sync_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_file_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	loff_t offset;
+	size_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_imap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	loff_t size;
+	loff_t offset;
+	size_t count;
+	int whichfork;
+	xfs_fileoff_t startoff;
+	xfs_fsblock_t startblock;
+	xfs_filblks_t blockcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_simple_io_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	loff_t isize;
+	loff_t disize;
+	loff_t offset;
+	size_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_itrunc_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_fsize_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_pagecache_inval {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_off_t start;
+	xfs_off_t finish;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_bunmap {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_fileoff_t fileoff;
+	xfs_filblks_t len;
+	long unsigned int caller_ip;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_extent_busy_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_extent_busy_trim {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	xfs_agblock_t tbno;
+	xfs_extlen_t tlen;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_agf_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int flags;
+	__u32 length;
+	__u32 bno_root;
+	__u32 cnt_root;
+	__u32 bno_level;
+	__u32 cnt_level;
+	__u32 flfirst;
+	__u32 fllast;
+	__u32 flcount;
+	__u32 freeblks;
+	__u32 longest;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_free_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	int resv;
+	int haveleft;
+	int haveright;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_alloc_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t minlen;
+	xfs_extlen_t maxlen;
+	xfs_extlen_t mod;
+	xfs_extlen_t prod;
+	xfs_extlen_t minleft;
+	xfs_extlen_t total;
+	xfs_extlen_t alignment;
+	xfs_extlen_t minalignslop;
+	xfs_extlen_t len;
+	short int type;
+	short int otype;
+	char wasdel;
+	char wasfromfl;
+	int resv;
+	int datatype;
+	xfs_fsblock_t firstblock;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_alloc_cur_check {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agblock_t bno;
+	xfs_extlen_t len;
+	xfs_extlen_t diff;
+	bool new;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_da_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 __data_loc_name;
+	int namelen;
+	xfs_dahash_t hashval;
+	xfs_ino_t inumber;
+	uint32_t op_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_attr_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 __data_loc_name;
+	int namelen;
+	int valuelen;
+	xfs_dahash_t hashval;
+	unsigned int attr_filter;
+	unsigned int attr_flags;
+	uint32_t op_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dir2_space_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	uint32_t op_flags;
+	int idx;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dir2_leafn_moveents {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	uint32_t op_flags;
+	int src_idx;
+	int dst_idx;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_swap_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int which;
+	xfs_ino_t ino;
+	int format;
+	xfs_extnum_t nex;
+	int broot_size;
+	int fork_off;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t headblk;
+	xfs_daddr_t tailblk;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_record {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t lsn;
+	int len;
+	int num_logops;
+	int pass;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int item;
+	xlog_tid_t tid;
+	xfs_lsn_t lsn;
+	int type;
+	int pass;
+	int count;
+	int total;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_buf_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int64_t blkno;
+	short unsigned int len;
+	short unsigned int flags;
+	short unsigned int size;
+	unsigned int map_size;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_ino_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	short unsigned int size;
+	int fields;
+	short unsigned int asize;
+	short unsigned int dsize;
+	int64_t blkno;
+	int len;
+	int boffset;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_icreate_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int count;
+	unsigned int isize;
+	xfs_agblock_t length;
+	unsigned int gen;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_discard_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_cur_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	int level;
+	int nlevels;
+	int ptr;
+	xfs_daddr_t daddr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_class {
+	struct trace_entry ent;
+	dev_t dev;
+	struct xfs_trans *tp;
+	char committed;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	struct xfs_trans *tp;
+	char committed;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_pending_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	void *intent;
+	char committed;
+	int nr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_phys_extent_deferred_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int type;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_map_extent_deferred_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_ino_t ino;
+	xfs_agblock_t agbno;
+	int whichfork;
+	xfs_fileoff_t l_loff;
+	xfs_filblks_t l_len;
+	xfs_exntst_t l_state;
+	int op;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	uint64_t owner;
+	uint64_t offset;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int error;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rmapbt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_resv_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int resv;
+	xfs_extlen_t freeblks;
+	xfs_extlen_t flcount;
+	xfs_extlen_t reserved;
+	xfs_extlen_t asked;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_btree_lookup_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_lookup_t dir;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t startblock;
+	xfs_extlen_t blockcount;
+	xfs_nlink_t refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_extent_at_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t startblock;
+	xfs_extlen_t blockcount;
+	xfs_nlink_t refcount;
+	xfs_agblock_t agbno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_double_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_double_extent_at_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	xfs_agblock_t agbno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_triple_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	xfs_agblock_t i3_startblock;
+	xfs_extlen_t i3_blockcount;
+	xfs_nlink_t i3_refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_finish_one_leftover {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int type;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	xfs_agblock_t new_agbno;
+	xfs_extlen_t new_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int error;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_double_io_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_ino;
+	loff_t src_isize;
+	loff_t src_disize;
+	loff_t src_offset;
+	long long int len;
+	xfs_ino_t dest_ino;
+	loff_t dest_isize;
+	loff_t dest_disize;
+	loff_t dest_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_irec_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fileoff_t lblk;
+	xfs_extlen_t len;
+	xfs_fsblock_t pblk;
+	int state;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_reflink_remap_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_ino;
+	xfs_fileoff_t src_lblk;
+	xfs_filblks_t len;
+	xfs_ino_t dest_ino;
+	xfs_fileoff_t dest_lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ioctl_clone {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int src_ino;
+	loff_t src_isize;
+	long unsigned int dest_ino;
+	loff_t dest_isize;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	xfs_agnumber_t agno;
+	xfs_fsblock_t bno;
+	xfs_filblks_t len;
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_getfsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	xfs_daddr_t block;
+	xfs_daddr_t len;
+	uint64_t owner;
+	uint64_t offset;
+	uint64_t flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_resv_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	uint logres;
+	int logcount;
+	int logflags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_get_max_trans_res {
+	struct trace_entry ent;
+	dev_t dev;
+	uint logres;
+	int logcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_class {
+	struct trace_entry ent;
+	dev_t dev;
+	uint32_t tid;
+	uint32_t flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iunlink_update_bucket {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	unsigned int bucket;
+	xfs_agino_t old_ptr;
+	xfs_agino_t new_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iunlink_update_dinode {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	xfs_agino_t old_ptr;
+	xfs_agino_t new_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_inode_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fs_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iwalk_ag {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t startino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iwalk_ag_rec {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t startino;
+	uint64_t freemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_pwork_init {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int nr_threads;
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_kmem_class {
+	struct trace_entry ent;
+	ssize_t size;
+	int flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_check_new_dalign {
+	struct trace_entry ent;
+	dev_t dev;
+	int new_dalign;
+	xfs_ino_t sb_rootino;
+	xfs_ino_t calc_rootino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_commit_afakeroot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int levels;
+	unsigned int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_commit_ifakeroot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	unsigned int levels;
+	unsigned int blocks;
+	int whichfork;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_bload_level_geometry {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	unsigned int level;
+	unsigned int nlevels;
+	uint64_t nr_this_level;
+	unsigned int nr_per_block;
+	unsigned int desired_npb;
+	long long unsigned int blocks;
+	long long unsigned int blocks_with_extra;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_bload_block {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	unsigned int level;
+	long long unsigned int block_idx;
+	long long unsigned int nr_blocks;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int nr_records;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_timestamp_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long long int min;
+	long long int max;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_icwalk_class {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 flags;
+	uint32_t uid;
+	uint32_t gid;
+	prid_t prid;
+	__u64 min_file_size;
+	long int scan_limit;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xlog_iclog_class {
+	struct trace_entry ent;
+	dev_t dev;
+	uint32_t state;
+	int32_t refcount;
+	uint32_t offset;
+	uint32_t flags;
+	long long unsigned int lsn;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_das_state_class {
+	struct trace_entry ent;
+	int das;
+	xfs_ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_force_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	int ptag;
+	int flags;
+	u32 __data_loc_fname;
+	int line_num;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xfs_attr_list_class {};
+
+struct trace_event_data_offsets_xlog_intent_recovery_failed {};
+
+struct trace_event_data_offsets_xfs_perag_class {};
+
+struct trace_event_data_offsets_xfs_inodegc_worker {};
+
+struct trace_event_data_offsets_xfs_fs_class {};
+
+struct trace_event_data_offsets_xfs_inodegc_shrinker_scan {};
+
+struct trace_event_data_offsets_xfs_ag_class {};
+
+struct trace_event_data_offsets_xfs_attr_list_node_descend {};
+
+struct trace_event_data_offsets_xfs_bmap_class {};
+
+struct trace_event_data_offsets_xfs_buf_class {};
+
+struct trace_event_data_offsets_xfs_buf_flags_class {};
+
+struct trace_event_data_offsets_xfs_buf_ioerror {};
+
+struct trace_event_data_offsets_xfs_buf_item_class {};
+
+struct trace_event_data_offsets_xfs_filestream_class {};
+
+struct trace_event_data_offsets_xfs_filestream_pick {};
+
+struct trace_event_data_offsets_xfs_lock_class {};
+
+struct trace_event_data_offsets_xfs_inode_class {};
+
+struct trace_event_data_offsets_xfs_filemap_fault {};
+
+struct trace_event_data_offsets_xfs_iref_class {};
+
+struct trace_event_data_offsets_xfs_iomap_prealloc_size {};
+
+struct trace_event_data_offsets_xfs_irec_merge_pre {};
+
+struct trace_event_data_offsets_xfs_irec_merge_post {};
+
+struct trace_event_data_offsets_xfs_namespace_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_rename {
+	u32 src_name;
+	u32 target_name;
+};
+
+struct trace_event_data_offsets_xfs_dquot_class {};
+
+struct trace_event_data_offsets_xfs_trans_mod_dquot {};
+
+struct trace_event_data_offsets_xfs_dqtrx_class {};
+
+struct trace_event_data_offsets_xfs_loggrant_class {};
+
+struct trace_event_data_offsets_xfs_log_item_class {};
+
+struct trace_event_data_offsets_xfs_log_force {};
+
+struct trace_event_data_offsets_xfs_ail_class {};
+
+struct trace_event_data_offsets_xfs_log_assign_tail_lsn {};
+
+struct trace_event_data_offsets_xfs_file_class {};
+
+struct trace_event_data_offsets_xfs_imap_class {};
+
+struct trace_event_data_offsets_xfs_simple_io_class {};
+
+struct trace_event_data_offsets_xfs_itrunc_class {};
+
+struct trace_event_data_offsets_xfs_pagecache_inval {};
+
+struct trace_event_data_offsets_xfs_bunmap {};
+
+struct trace_event_data_offsets_xfs_extent_busy_class {};
+
+struct trace_event_data_offsets_xfs_extent_busy_trim {};
+
+struct trace_event_data_offsets_xfs_agf_class {};
+
+struct trace_event_data_offsets_xfs_free_extent {};
+
+struct trace_event_data_offsets_xfs_alloc_class {};
+
+struct trace_event_data_offsets_xfs_alloc_cur_check {};
+
+struct trace_event_data_offsets_xfs_da_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_attr_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_dir2_space_class {};
+
+struct trace_event_data_offsets_xfs_dir2_leafn_moveents {};
+
+struct trace_event_data_offsets_xfs_swap_extent_class {};
+
+struct trace_event_data_offsets_xfs_log_recover {};
+
+struct trace_event_data_offsets_xfs_log_recover_record {};
+
+struct trace_event_data_offsets_xfs_log_recover_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_buf_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_ino_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_icreate_item_class {};
+
+struct trace_event_data_offsets_xfs_discard_class {};
+
+struct trace_event_data_offsets_xfs_btree_cur_class {};
+
+struct trace_event_data_offsets_xfs_defer_class {};
+
+struct trace_event_data_offsets_xfs_defer_error_class {};
+
+struct trace_event_data_offsets_xfs_defer_pending_class {};
+
+struct trace_event_data_offsets_xfs_phys_extent_deferred_class {};
+
+struct trace_event_data_offsets_xfs_map_extent_deferred_class {};
+
+struct trace_event_data_offsets_xfs_rmap_class {};
+
+struct trace_event_data_offsets_xfs_ag_error_class {};
+
+struct trace_event_data_offsets_xfs_rmapbt_class {};
+
+struct trace_event_data_offsets_xfs_ag_resv_class {};
+
+struct trace_event_data_offsets_xfs_ag_btree_lookup_class {};
+
+struct trace_event_data_offsets_xfs_refcount_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_extent_at_class {};
+
+struct trace_event_data_offsets_xfs_refcount_double_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_double_extent_at_class {};
+
+struct trace_event_data_offsets_xfs_refcount_triple_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_finish_one_leftover {};
+
+struct trace_event_data_offsets_xfs_inode_error_class {};
+
+struct trace_event_data_offsets_xfs_double_io_class {};
+
+struct trace_event_data_offsets_xfs_inode_irec_class {};
+
+struct trace_event_data_offsets_xfs_reflink_remap_blocks {};
+
+struct trace_event_data_offsets_xfs_ioctl_clone {};
+
+struct trace_event_data_offsets_xfs_fsmap_class {};
+
+struct trace_event_data_offsets_xfs_getfsmap_class {};
+
+struct trace_event_data_offsets_xfs_trans_resv_class {};
+
+struct trace_event_data_offsets_xfs_log_get_max_trans_res {};
+
+struct trace_event_data_offsets_xfs_trans_class {};
+
+struct trace_event_data_offsets_xfs_iunlink_update_bucket {};
+
+struct trace_event_data_offsets_xfs_iunlink_update_dinode {};
+
+struct trace_event_data_offsets_xfs_ag_inode_class {};
+
+struct trace_event_data_offsets_xfs_fs_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_ag_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_inode_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_iwalk_ag {};
+
+struct trace_event_data_offsets_xfs_iwalk_ag_rec {};
+
+struct trace_event_data_offsets_xfs_pwork_init {};
+
+struct trace_event_data_offsets_xfs_kmem_class {};
+
+struct trace_event_data_offsets_xfs_check_new_dalign {};
+
+struct trace_event_data_offsets_xfs_btree_commit_afakeroot {};
+
+struct trace_event_data_offsets_xfs_btree_commit_ifakeroot {};
+
+struct trace_event_data_offsets_xfs_btree_bload_level_geometry {};
+
+struct trace_event_data_offsets_xfs_btree_bload_block {};
+
+struct trace_event_data_offsets_xfs_timestamp_range_class {};
+
+struct trace_event_data_offsets_xfs_icwalk_class {};
+
+struct trace_event_data_offsets_xlog_iclog_class {};
+
+struct trace_event_data_offsets_xfs_das_state_class {};
+
+struct trace_event_data_offsets_xfs_force_shutdown {
+	u32 fname;
+};
+
+typedef void (*btf_trace_xfs_attr_list_sf)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_sf_all)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_leaf)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_leaf_end)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_full)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_add)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_wrong_blk)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_notfound)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_leaf_list)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_node_list)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xlog_intent_recovery_failed)(void *, struct xfs_mount *, int, void *);
+
+typedef void (*btf_trace_xfs_perag_get)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_get_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_put)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_set_inode_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_clear_inode_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_inodegc_worker)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_inodegc_flush)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_push)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_start)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_stop)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_queue)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_throttle)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_fs_sync_fs)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_start)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_stop)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_worker)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_flush_all)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_shrinker_scan)(void *, struct xfs_mount *, struct shrink_control *, void *);
+
+typedef void (*btf_trace_xfs_read_agf)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_alloc_read_agf)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_read_agi)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_ialloc_read_agi)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_attr_list_node_descend)(void *, struct xfs_attr_list_context *, struct xfs_da_node_entry *);
+
+typedef void (*btf_trace_xfs_iext_insert)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iext_remove)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_pre_update)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_post_update)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_read_extent)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_write_extent)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_init)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_free)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_hold)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_rele)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iodone)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_submit)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_lock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_lock_done)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_trylock_fail)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_trylock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_unlock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iowait)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iowait_done)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_queue)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_queued)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_split)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_pushbuf)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_get_uncached)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_item_relse)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iodone_async)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_error_relse)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_drain_buftarg)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_read_buf_shut)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_btree_corrupt)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_reset_dqcounts)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_find)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_get)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_read)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_ioerror)(void *, struct xfs_buf *, int, xfs_failaddr_t);
+
+typedef void (*btf_trace_xfs_buf_item_size)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_size_ordered)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_size_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_format)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_format_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_ordered)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_pin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_unpin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_unpin_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_release)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_committed)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_push)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_get_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_get_buf_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_getsb)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_getsb_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_read_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_read_buf_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_log_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_brelse)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bjoin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bhold)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bhold_release)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_binval)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_filestream_free)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_lookup)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_scan)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_pick)(void *, struct xfs_inode *, xfs_agnumber_t, xfs_extlen_t, int);
+
+typedef void (*btf_trace_xfs_ilock)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ilock_nowait)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ilock_demote)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iunlock)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iget_skip)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_recycle)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_recycle_fail)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_hit)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_miss)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_getattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_setattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_readlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inactive_symlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_alloc_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_free_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_zero_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_collapse_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_insert_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_readdir)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_get_acl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_vm_bmap)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_ioctl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_compat_ioctl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_ioctl_setattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dir_fsync)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_fsync)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_destroy_inode)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_update_time)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dquot_dqalloc)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dquot_dqdetach)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_eofblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_clear_eofblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_free_eofblocks_invalid)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_cowblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_clear_cowblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_free_cowblocks_invalid)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_reclaimable)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_reclaiming)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_need_inactive)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_inactivating)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_filemap_fault)(void *, struct xfs_inode *, enum page_entry_size, bool);
+
+typedef void (*btf_trace_xfs_iomap_prealloc_size)(void *, struct xfs_inode *, xfs_fsblock_t, int, unsigned int);
+
+typedef void (*btf_trace_xfs_irec_merge_pre)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, uint16_t, xfs_agino_t, uint16_t);
+
+typedef void (*btf_trace_xfs_irec_merge_post)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, uint16_t);
+
+typedef void (*btf_trace_xfs_irele)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_pin)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_unpin)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_unpin_nowait)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_remove)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_link)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_lookup)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_create)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_symlink)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_rename)(void *, struct xfs_inode *, struct xfs_inode *, struct xfs_name *, struct xfs_name *);
+
+typedef void (*btf_trace_xfs_dqadjust)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_want)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_dirty)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_busy)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_done)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqattach_found)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqattach_get)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqalloc)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqtobp_read)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqread)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqread_fail)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_hit)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_miss)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_freeing)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_dup)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqput)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqput_free)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqrele)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush_force)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush_done)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas_before)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas_after)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot)(void *, struct xfs_trans *, struct xfs_dquot *, unsigned int, int64_t);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot_before)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot_after)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_log_umount_write)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_sleep)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_wake)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_wake_up)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_reserve)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_reserve_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_regrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_regrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant_sub)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant_sub)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_cil_wait)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_force)(void *, struct xfs_mount *, xfs_lsn_t, long unsigned int);
+
+typedef void (*btf_trace_xfs_ail_push)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_pinned)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_locked)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_flushing)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_mark)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_skip)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_unpin)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_insert)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_ail_move)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_ail_delete)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_log_assign_tail_lsn)(void *, struct xlog *, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_file_buffered_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_direct_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_dax_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_buffered_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_direct_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_dax_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_reflink_bounce_dio_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_map_blocks_found)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_map_blocks_alloc)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_iomap_alloc)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_iomap_found)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_delalloc_enospc)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_unwritten_convert)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_setfilesize)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_zero_eof)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write_unwritten)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write_append)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_itruncate_extents_start)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_itruncate_extents_end)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_pagecache_inval)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t);
+
+typedef void (*btf_trace_xfs_bunmap)(void *, struct xfs_inode *, xfs_fileoff_t, xfs_filblks_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_extent_busy)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_enomem)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_force)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_reuse)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_clear)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_trim)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agf)(void *, struct xfs_mount *, struct xfs_agf *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_agfl_reset)(void *, struct xfs_mount *, struct xfs_agf *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_free_extent)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, enum xfs_ag_resv_type, int, int);
+
+typedef void (*btf_trace_xfs_alloc_exact_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_exact_notfound)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_exact_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_nominleft)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_first)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_right)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_left)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_lookup)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_lookup_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_noentry)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_busy)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_neither)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_noentry)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_nominleft)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_busy)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_freelist)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_notenough)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_badargs)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_nofix)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_noagbp)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_loopfailed)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_allfailed)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_check)(void *, struct xfs_mount *, xfs_btnum_t, xfs_agblock_t, xfs_extlen_t, xfs_extlen_t, bool);
+
+typedef void (*btf_trace_xfs_dir2_sf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_toino4)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_toino8)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_to_block)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_to_sf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_to_block)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_to_node)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_old)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_new)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_work)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_compact)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split_before)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split_after)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_clearflag)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_setflag)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_flipflags)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_to_sf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_to_node)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_rebalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_unbalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_toosmall)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_fillstate)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_refillstate)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_set)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_join)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_link_before)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_link_after)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_unlink_back)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_unlink_forward)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_root_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_root_join)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_rebalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_unbalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_toosmall)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_swap_lastblock)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_grow_inode)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_shrink_inode)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_fixhashpath)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_path_shift)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leafn_add)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_leafn_remove)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_grow_inode)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_shrink_inode)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_leafn_moveents)(void *, struct xfs_da_args *, int, int, int);
+
+typedef void (*btf_trace_xfs_swap_extent_before)(void *, struct xfs_inode *, int);
+
+typedef void (*btf_trace_xfs_swap_extent_after)(void *, struct xfs_inode *, int);
+
+typedef void (*btf_trace_xfs_log_recover)(void *, struct xlog *, xfs_daddr_t, xfs_daddr_t);
+
+typedef void (*btf_trace_xfs_log_recover_record)(void *, struct xlog *, struct xlog_rec_header *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_add)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_add_cont)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_reorder_head)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_reorder_tail)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_recover)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_buf_not_cancel)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel_add)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel_ref_inc)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_recover)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_skip)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_inode_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_reg_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_dquot_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_recover)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_cancel)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_skip)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_icreate_cancel)(void *, struct xlog *, struct xfs_icreate_log *);
+
+typedef void (*btf_trace_xfs_log_recover_icreate_recover)(void *, struct xlog *, struct xfs_icreate_log *);
+
+typedef void (*btf_trace_xfs_discard_extent)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_toosmall)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_exclude)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_busy)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_btree_updkeys)(void *, struct xfs_btree_cur *, int, struct xfs_buf *);
+
+typedef void (*btf_trace_xfs_btree_overlapped_query_range)(void *, struct xfs_btree_cur *, int, struct xfs_buf *);
+
+typedef void (*btf_trace_xfs_defer_cancel)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_roll)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_abort)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_finish)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_finish_done)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_roll_error)(void *, struct xfs_trans *, int);
+
+typedef void (*btf_trace_xfs_defer_finish_error)(void *, struct xfs_trans *, int);
+
+typedef void (*btf_trace_xfs_defer_create_intent)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_cancel_list)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_pending_finish)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_pending_abort)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_relog_intent)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_bmap_free_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_bmap_free_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agfl_free_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agfl_free_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmap_unmap)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_unmap_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_unmap_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_map)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_map_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_map_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_convert)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_convert_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_convert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_convert_state)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_rmap_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_rmapbt_alloc_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmapbt_free_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmap_update)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_insert)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_delete)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_insert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_delete_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_update_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_candidate)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_query)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range_candidate)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_right_neighbor_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_bmap_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_ag_resv_init)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_alloc_extent)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free_extent)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_critical)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_needed)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ag_resv_init_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcountbt_alloc_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcountbt_free_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_lookup)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_lookup_t);
+
+typedef void (*btf_trace_xfs_refcount_get)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_update)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_insert)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_delete)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_insert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_delete_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_update_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_increase)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_decrease)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_cow_increase)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_cow_decrease)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_merge_center_extents)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_modify_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_recover_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_split_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_merge_left_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_merge_right_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_find_left_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_find_right_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_adjust_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_adjust_cow_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_center_extents_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_modify_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_split_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_left_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_right_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_left_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_right_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_shared)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_find_shared_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_find_shared_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_finish_one_leftover)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_reflink_set_inode_flag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_reflink_unset_inode_flag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_reflink_update_inode_size)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_blocks)(void *, struct xfs_inode *, xfs_fileoff_t, xfs_filblks_t, struct xfs_inode *, xfs_fileoff_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_range)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t, struct xfs_inode *, xfs_off_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_range_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_set_inode_flag_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_update_inode_size_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_blocks_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_src)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_dest)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_compare_extents)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t, struct xfs_inode *, xfs_off_t);
+
+typedef void (*btf_trace_xfs_reflink_compare_extents_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ioctl_clone)(void *, struct inode *, struct inode *);
+
+typedef void (*btf_trace_xfs_reflink_unshare)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_unshare_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_trim_around_shared)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_found)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_enospc)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_convert_cow)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow_range)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_end_cow)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_cow_remap_from)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_remap_to)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow_range_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_end_cow_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_remap)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_remap_piece)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_fsmap_low_key)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_fsmap_high_key)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_fsmap_mapping)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_getfsmap_low_key)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_getfsmap_high_key)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_getfsmap_mapping)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_trans_resv_calc)(void *, struct xfs_mount *, unsigned int, struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_trans_resv_calc_minlogsize)(void *, struct xfs_mount *, unsigned int, struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_log_get_max_trans_res)(void *, struct xfs_mount *, const struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_trans_alloc)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_cancel)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_commit)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_dup)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_free)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_roll)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_add_item)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_commit_items)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_free_items)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_iunlink_update_bucket)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int, xfs_agino_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iunlink_update_dinode)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, xfs_agino_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iunlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iunlink_remove)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_fs_mark_sick)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_fs_mark_healthy)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_fs_unfixed_corruption)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_mark_sick)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_mark_healthy)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_unfixed_corruption)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_mark_sick)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_mark_healthy)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_unfixed_corruption)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_mark_sick)(void *, struct xfs_inode *, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_mark_healthy)(void *, struct xfs_inode *, unsigned int);
+
+typedef void (*btf_trace_xfs_iwalk_ag)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iwalk_ag_rec)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_inobt_rec_incore *);
+
+typedef void (*btf_trace_xfs_pwork_init)(void *, struct xfs_mount *, unsigned int, pid_t);
+
+typedef void (*btf_trace_kmem_alloc)(void *, ssize_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_check_new_dalign)(void *, struct xfs_mount *, int, xfs_ino_t);
+
+typedef void (*btf_trace_xfs_btree_commit_afakeroot)(void *, struct xfs_btree_cur *);
+
+typedef void (*btf_trace_xfs_btree_commit_ifakeroot)(void *, struct xfs_btree_cur *);
+
+typedef void (*btf_trace_xfs_btree_bload_level_geometry)(void *, struct xfs_btree_cur *, unsigned int, uint64_t, unsigned int, unsigned int, uint64_t, uint64_t);
+
+typedef void (*btf_trace_xfs_btree_bload_block)(void *, struct xfs_btree_cur *, unsigned int, uint64_t, uint64_t, union xfs_btree_ptr *, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_timestamp_range)(void *, struct xfs_mount *, long long int, long long int);
+
+typedef void (*btf_trace_xfs_quota_expiry_range)(void *, struct xfs_mount *, long long int, long long int);
+
+typedef void (*btf_trace_xfs_ioc_free_eofblocks)(void *, struct xfs_mount *, struct xfs_icwalk *, long unsigned int);
+
+typedef void (*btf_trace_xfs_blockgc_free_space)(void *, struct xfs_mount *, struct xfs_icwalk *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_activate)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_clean)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callback)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callbacks_start)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callbacks_done)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_force)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_force_lsn)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_get_space)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_release)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_switch)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_sync)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_syncing)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_sync_done)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_want_sync)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_wait_on)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_write)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xfs_attr_sf_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_set_iter_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_leaf_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_node_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_remove_iter_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_alloc)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_remove_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_add)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_replace)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_remove)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_force_shutdown)(void *, struct xfs_mount *, int, int, const char *, int);
+
+struct crypto_report_akcipher {
+	char type[64];
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	struct crypto_tfm base;
+};
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	unsigned int reqsize;
+	struct crypto_alg base;
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	union {
+		struct {
+			char head[80];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct crypto_report_rng {
+	char type[64];
+	unsigned int seedsize;
+};
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, fmode_t, unsigned int);
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+enum {
+	IO_WQ_BOUND = 0,
+	IO_WQ_UNBOUND = 1,
+};
+
+struct io_wqe;
+
+struct io_wq {
+	long unsigned int state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wqe *wqes[0];
+};
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
+};
+
+enum {
+	IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+	IO_ACCT_STALLED_BIT = 0,
+};
+
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wqe *wqe;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	long unsigned int create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct io_wqe_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	long unsigned int flags;
+};
+
+struct io_wqe {
+	raw_spinlock_t lock;
+	struct io_wqe_acct acct[2];
+	int node;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq *wq;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
+};
+
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+struct btree_head {
+	long unsigned int *node;
+	mempool_t *mempool;
+	int height;
+};
+
+struct btree_geo {
+	int keylen;
+	int no_pairs;
+	int no_longs;
+};
+
+typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
+
+typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
+
+typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
+
+typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
+
+typedef unsigned int FSE_DTable;
+
+typedef struct {
+	size_t state;
+	const void *table;
+} FSE_DState_t;
+
+typedef struct {
+	U16 tableLog;
+	U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+	short unsigned int newState;
+	unsigned char symbol;
+	unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+	short int ncount[256];
+	FSE_DTable dtable[1];
+} FSE_DecompressWksp;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx___2;
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+typedef ZSTD_DCtx___2 ZSTD_DStream;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_DCtx___2 zstd_dctx;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef struct {
+	long unsigned int key[2];
+} hsiphash_key_t;
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	long unsigned int flags;
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+enum enable_type {
+	undefined = -1,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+struct mode_map {
+	int vmode;
+	const struct fb_videomode *mode;
+};
+
+struct monitor_map {
+	int sense;
+	int vmode;
+};
+
+enum {
+	cmap_unknown = 0,
+	cmap_simple = 1,
+	cmap_r128 = 2,
+	cmap_M3A = 3,
+	cmap_M3B = 4,
+	cmap_radeon = 5,
+	cmap_gxt2000 = 6,
+	cmap_avivo = 7,
+	cmap_qemu = 8,
+};
+
+struct offb_par {
+	volatile void *cmap_adr;
+	volatile void *cmap_data;
+	int cmap_type;
+	int blanked;
+};
+
+typedef short unsigned int ushort;
+
+struct unipair {
+	short unsigned int unicode;
+	short unsigned int fontpos;
+};
+
+struct unimapdesc {
+	short unsigned int entry_ct;
+	struct unipair *entries;
+};
+
+struct kbentry {
+	unsigned char kb_table;
+	unsigned char kb_index;
+	short unsigned int kb_value;
+};
+
+struct kbsentry {
+	unsigned char kb_func;
+	unsigned char kb_string[512];
+};
+
+struct kbkeycode {
+	unsigned int scancode;
+	unsigned int keycode;
+};
+
+struct kbd_repeat {
+	int delay;
+	int period;
+};
+
+struct console_font_op {
+	unsigned int op;
+	unsigned int flags;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_stat {
+	short unsigned int v_active;
+	short unsigned int v_signal;
+	short unsigned int v_state;
+};
+
+struct vt_sizes {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_scrollsize;
+};
+
+struct vt_consize {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_vlin;
+	short unsigned int v_clin;
+	short unsigned int v_vcol;
+	short unsigned int v_ccol;
+};
+
+struct vt_event {
+	unsigned int event;
+	unsigned int oldev;
+	unsigned int newev;
+	unsigned int pad[4];
+};
+
+struct vt_setactivate {
+	unsigned int console;
+	struct vt_mode mode;
+};
+
+struct vt_spawn_console {
+	spinlock_t lock;
+	struct pid *pid;
+	int sig;
+};
+
+struct vt_event_wait {
+	struct list_head list;
+	struct vt_event event;
+	int done;
+};
+
+struct memdev {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	fmode_t fmode;
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+enum pm_qos_flags_status {
+	PM_QOS_FLAGS_UNDEFINED = -1,
+	PM_QOS_FLAGS_NONE = 0,
+	PM_QOS_FLAGS_SOME = 1,
+	PM_QOS_FLAGS_ALL = 2,
+};
+
+enum pm_qos_req_action {
+	PM_QOS_ADD_REQ = 0,
+	PM_QOS_UPDATE_REQ = 1,
+	PM_QOS_REMOVE_REQ = 2,
+};
+
+struct brd_device {
+	int brd_number;
+	struct gendisk *brd_disk;
+	struct list_head brd_list;
+	spinlock_t brd_lock;
+	struct xarray brd_pages;
+	u64 brd_nr_pages;
+};
+
+struct btt_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le32 external_lbasize;
+	__le32 external_nlba;
+	__le32 internal_lbasize;
+	__le32 internal_nlba;
+	__le32 nfree;
+	__le32 infosize;
+	__le64 nextoff;
+	__le64 dataoff;
+	__le64 mapoff;
+	__le64 logoff;
+	__le64 info2off;
+	u8 padding[3968];
+	__le64 checksum;
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+	struct ata_device *dev;
+	u16 *id;
+	struct scsi_cmnd *cmd;
+};
+
+struct mdio_board_info {
+	const char *bus_id;
+	char modalias[32];
+	int mdio_addr;
+	const void *platform_data;
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_CODE_OK = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 2,
+	ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 3,
+	ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+struct mdio_device_id {
+	__u32 phy_id;
+	__u32 phy_id_mask;
+};
+
+struct marvell_hw_stat {
+	const char *string;
+	u8 page;
+	u8 reg;
+	u8 bits;
+};
+
+struct marvell_priv {
+	u64 stats[3];
+	char *hwmon_name;
+	struct device *hwmon_dev;
+	bool cable_test_tdr;
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct marvell_hwmon_ops {
+	int (*config)(struct phy_device *);
+	int (*get_temp)(struct phy_device *, long int *);
+	int (*get_temp_critical)(struct phy_device *, long int *);
+	int (*set_temp_critical)(struct phy_device *, long int);
+	int (*get_temp_alarm)(struct phy_device *, long int *);
+};
+
+union e1000_rx_desc_extended {
+	struct {
+		__le64 buffer_addr;
+		__le64 reserved;
+	} read;
+	struct {
+		struct {
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length;
+			__le16 vlan;
+		} upper;
+	} wb;
+};
+
+union e1000_rx_desc_packet_split {
+	struct {
+		__le64 buffer_addr[4];
+	} read;
+	struct {
+		struct {
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length0;
+			__le16 vlan;
+		} middle;
+		struct {
+			__le16 header_status;
+			__le16 length[3];
+		} upper;
+		__le64 reserved;
+	} wb;
+};
+
+enum e1000_boards {
+	board_82571 = 0,
+	board_82572 = 1,
+	board_82573 = 2,
+	board_82574 = 3,
+	board_82583 = 4,
+	board_80003es2lan = 5,
+	board_ich8lan = 6,
+	board_ich9lan = 7,
+	board_ich10lan = 8,
+	board_pchlan = 9,
+	board_pch2lan = 10,
+	board_pch_lpt = 11,
+	board_pch_spt = 12,
+	board_pch_cnp = 13,
+	board_pch_tgp = 14,
+	board_pch_adp = 15,
+};
+
+struct e1000_reg_info {
+	u32 ofs;
+	char *name;
+};
+
+struct my_u0 {
+	__le64 a;
+	__le64 b;
+};
+
+struct my_u1 {
+	__le64 a;
+	__le64 b;
+	__le64 c;
+	__le64 d;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct cytp_contact {
+	int x;
+	int y;
+	int z;
+};
+
+struct cytp_report_data {
+	int contact_cnt;
+	struct cytp_contact contacts[2];
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int tap: 1;
+};
+
+struct cytp_data {
+	int fw_version;
+	int pkt_size;
+	int mode;
+	int tp_min_pressure;
+	int tp_max_pressure;
+	int tp_width;
+	int tp_high;
+	int tp_max_abs_x;
+	int tp_max_abs_y;
+	int tp_res_x;
+	int tp_res_y;
+	int tp_metrics_supported;
+};
+
+struct opal_i2c_request {
+	uint8_t type;
+	uint8_t flags;
+	uint8_t subaddr_sz;
+	uint8_t reserved;
+	__be16 addr;
+	__be16 reserved2;
+	__be32 subaddr;
+	__be32 size;
+	__be64 buffer_ra;
+};
+
+struct mdu_array_info_s {
+	int major_version;
+	int minor_version;
+	int patch_version;
+	unsigned int ctime;
+	int level;
+	int size;
+	int nr_disks;
+	int raid_disks;
+	int md_minor;
+	int not_persistent;
+	unsigned int utime;
+	int state;
+	int active_disks;
+	int working_disks;
+	int failed_disks;
+	int spare_disks;
+	int layout;
+	int chunk_size;
+};
+
+struct mdu_disk_info_s {
+	int number;
+	int major;
+	int minor;
+	int raid_disk;
 	int state;
 };
 
-struct mqueue_inode_info {
-	spinlock_t lock;
-	struct inode vfs_inode;
-	wait_queue_head_t wait_q;
-	struct rb_root msg_tree;
-	struct rb_node *msg_tree_rightmost;
-	struct posix_msg_tree_node *node_cache;
-	struct mq_attr attr;
-	struct sigevent notify;
-	struct pid *notify_owner;
-	u32 notify_self_exec_id;
-	struct user_namespace *notify_user_ns;
-	struct user_struct *user;
-	struct sock *notify_sock;
-	struct sk_buff *notify_cookie;
-	struct ext_wait_queue e_wait_q[2];
-	long unsigned int qsize;
+struct md_setup_args {
+	int minor;
+	int partitioned;
+	int level;
+	int chunk;
+	char *device_names;
 };
 
-struct compat_mq_attr {
-	compat_long_t mq_flags;
-	compat_long_t mq_maxmsg;
-	compat_long_t mq_msgsize;
-	compat_long_t mq_curmsgs;
-	compat_long_t __reserved[4];
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
 };
 
-struct key_user {
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	long unsigned int fdt_node;
+	long unsigned int phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct rmem_assigned_device {
+	struct device *dev;
+	struct reserved_mem *rmem;
+	struct list_head list;
+};
+
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	long unsigned int cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	struct hlist_node hnode;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct qdisc_watchdog {
+	u64 last_expires;
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	long unsigned int base;
+	long unsigned int cl;
+	u32 classid;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	long unsigned int new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+struct debug_reply_data {
+	struct ethnl_reply_data base;
+	u32 msg_mask;
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	__IFLA_MAX = 61,
+};
+
+enum tunnel_encap_types {
+	TUNNEL_ENCAP_NONE = 0,
+	TUNNEL_ENCAP_FOU = 1,
+	TUNNEL_ENCAP_GUE = 2,
+	TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct gro_cell;
+
+struct gro_cells {
+	struct gro_cell *cells;
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct ip_tunnel {
+	struct ip_tunnel *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	long unsigned int err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_prl_entry *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct tnl_ptk_info {
+	__be16 flags;
+	__be16 proto;
+	__be32 key;
+	__be32 seq;
+	int hdr_len;
+};
+
+struct ip_tunnel_net {
+	struct net_device *fb_tunnel_dev;
+	struct rtnl_link_ops *rtnl_link_ops;
+	struct hlist_head tunnels[128];
+	struct ip_tunnel *collect_md_tun;
+	int type;
+};
+
+struct nf_conn;
+
+enum nf_nat_manip_type;
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct xfrm_if;
+
+struct xfrm_if_cb {
+	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
+};
+
+struct xfrm_if_parms {
+	int link;
+	u32 if_id;
+};
+
+struct xfrm_if {
+	struct xfrm_if *next;
+	struct net_device *dev;
+	struct net *net;
+	struct xfrm_if_parms p;
+	struct gro_cells gro_cells;
+};
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_node {
 	struct rb_node node;
-	struct mutex cons_lock;
-	spinlock_t lock;
-	refcount_t usage;
-	atomic_t nkeys;
-	atomic_t nikeys;
-	kuid_t uid;
-	int qnkeys;
-	int qnbytes;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
 };
 
-enum key_notification_subtype {
-	NOTIFY_KEY_INSTANTIATED = 0,
-	NOTIFY_KEY_UPDATED = 1,
-	NOTIFY_KEY_LINKED = 2,
-	NOTIFY_KEY_UNLINKED = 3,
-	NOTIFY_KEY_CLEARED = 4,
-	NOTIFY_KEY_REVOKED = 5,
-	NOTIFY_KEY_INVALIDATED = 6,
-	NOTIFY_KEY_SETATTR = 7,
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
 };
 
-struct key_notification {
-	struct watch_notification watch;
-	__u32 key_id;
-	__u32 aux;
-};
-
-struct assoc_array_edit;
-
-struct assoc_array_ops {
-	long unsigned int (*get_key_chunk)(const void *, int);
-	long unsigned int (*get_object_key_chunk)(const void *, int);
-	bool (*compare_object)(const void *, const void *);
-	int (*diff_objects)(const void *, const void *);
-	void (*free_object)(void *);
-};
-
-struct assoc_array_node {
-	struct assoc_array_ptr *back_pointer;
-	u8 parent_slot;
-	struct assoc_array_ptr *slots[16];
-	long unsigned int nr_leaves_on_branch;
-};
-
-struct assoc_array_shortcut {
-	struct assoc_array_ptr *back_pointer;
-	int parent_slot;
-	int skip_to_level;
-	struct assoc_array_ptr *next_node;
-	long unsigned int index_key[0];
-};
-
-struct assoc_array_edit___2 {
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
 	struct callback_head rcu;
-	struct assoc_array *array;
-	const struct assoc_array_ops *ops;
-	const struct assoc_array_ops *ops_for_excised_subtree;
-	struct assoc_array_ptr *leaf;
-	struct assoc_array_ptr **leaf_p;
-	struct assoc_array_ptr *dead_leaf;
-	struct assoc_array_ptr *new_meta[3];
-	struct assoc_array_ptr *excised_meta[1];
-	struct assoc_array_ptr *excised_subtree;
-	struct assoc_array_ptr **set_backpointers[16];
-	struct assoc_array_ptr *set_backpointers_to;
-	struct assoc_array_node *adjust_count_on;
-	long int adjust_count_by;
-	struct {
-		struct assoc_array_ptr **ptr;
-		struct assoc_array_ptr *to;
-	} set[2];
-	struct {
-		u8 *p;
-		u8 to;
-	} set_parent_slot[1];
-	u8 segment_cache[17];
 };
 
-struct keyring_search_context {
-	struct keyring_index_key index_key;
-	const struct cred *cred;
-	struct key_match_data match_data;
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+enum rpc_gss_proc {
+	RPC_GSS_PROC_DATA = 0,
+	RPC_GSS_PROC_INIT = 1,
+	RPC_GSS_PROC_CONTINUE_INIT = 2,
+	RPC_GSS_PROC_DESTROY = 3,
+};
+
+enum rpc_gss_svc {
+	RPC_GSS_SVC_NONE = 1,
+	RPC_GSS_SVC_INTEGRITY = 2,
+	RPC_GSS_SVC_PRIVACY = 3,
+};
+
+struct rpc_gss_wire_cred {
+	u32 gc_v;
+	u32 gc_proc;
+	u32 gc_seq;
+	u32 gc_svc;
+	struct xdr_netobj gc_ctx;
+};
+
+typedef unsigned int OM_uint32;
+
+struct gssp_in_token {
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+};
+
+struct gssp_upcall_data {
+	struct xdr_netobj in_handle;
+	struct gssp_in_token in_token;
+	struct xdr_netobj out_handle;
+	struct xdr_netobj out_token;
+	struct rpcsec_gss_oid mech_oid;
+	struct svc_cred creds;
+	int found_creds;
+	int major_status;
+	int minor_status;
+};
+
+struct rsi {
+	struct cache_head h;
+	struct xdr_netobj in_handle;
+	struct xdr_netobj in_token;
+	struct xdr_netobj out_handle;
+	struct xdr_netobj out_token;
+	int major_status;
+	int minor_status;
+	struct callback_head callback_head;
+};
+
+struct gss_svc_seq_data {
+	u32 sd_max;
+	long unsigned int sd_win[2];
+	spinlock_t sd_lock;
+};
+
+struct rsc {
+	struct cache_head h;
+	struct xdr_netobj handle;
+	struct svc_cred cred;
+	struct gss_svc_seq_data seqdata;
+	struct gss_ctx *mechctx;
+	struct callback_head callback_head;
+};
+
+struct gss_domain {
+	struct auth_domain h;
+	u32 pseudoflavor;
+};
+
+struct gss_svc_data {
+	struct rpc_gss_wire_cred clcred;
+	__be32 *verf_start;
+	struct rsc *rsci;
+};
+
+struct div_result {
+	u64 result_high;
+	u64 result_low;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+struct err_log_info {
+	__be32 error_type;
+	__be32 seq_num;
+};
+
+struct oops_log_info {
+	__be16 version;
+	__be16 report_length;
+	__be64 timestamp;
+} __attribute__((packed));
+
+struct nvram_header {
+	unsigned char signature;
+	unsigned char checksum;
+	short unsigned int length;
+	char name[12];
+};
+
+struct nvram_partition {
+	struct list_head partition;
+	struct nvram_header header;
+	unsigned int index;
+};
+
+typedef void (*eeh_edev_traverse_func)(struct eeh_dev *, void *);
+
+typedef void * (*eeh_pe_traverse_func)(struct eeh_pe *, void *);
+
+struct kretprobe_blackpoint {
+	const char *name;
+	void *addr;
+};
+
+struct prtb_entry {
+	__be64 prtb0;
+	__be64 prtb1;
+};
+
+struct opal_ipmi_msg {
+	uint8_t version;
+	uint8_t netfn;
+	uint8_t cmd;
+	uint8_t data[0];
+};
+
+enum {
+	OPAL_HMI_FLAGS_TB_RESYNC = 1ULL,
+	OPAL_HMI_FLAGS_DEC_LOST = 2ULL,
+	OPAL_HMI_FLAGS_HDEC_LOST = 4ULL,
+	OPAL_HMI_FLAGS_TOD_TB_FAIL = 8ULL,
+	OPAL_HMI_FLAGS_NEW_EVENT = 9223372036854775808ULL,
+};
+
+enum {
+	OPAL_REINIT_CPUS_HILE_BE = 1,
+	OPAL_REINIT_CPUS_HILE_LE = 2,
+	OPAL_REINIT_CPUS_MMU_HASH = 4,
+	OPAL_REINIT_CPUS_MMU_RADIX = 8,
+	OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED = 16,
+};
+
+struct oppanel_line {
+	__be64 line;
+	__be64 line_len;
+};
+
+typedef struct oppanel_line oppanel_line_t;
+
+struct opal_sg_entry {
+	__be64 data;
+	__be64 length;
+};
+
+struct opal_sg_list {
+	__be64 length;
+	__be64 next;
+	struct opal_sg_entry entry[0];
+};
+
+struct opal_msg_node {
+	struct list_head list;
+	struct opal_msg msg;
+};
+
+struct opal {
+	u64 base;
+	u64 entry;
+	u64 size;
+};
+
+struct mcheck_recoverable_range {
+	u64 start_addr;
+	u64 end_addr;
+	u64 recover_addr;
+};
+
+struct opal_prd_msg;
+
+enum OpalMmioWindowType {
+	OPAL_M32_WINDOW_TYPE = 1,
+	OPAL_M64_WINDOW_TYPE = 2,
+	OPAL_IO_WINDOW_TYPE = 3,
+};
+
+enum OpalPciBusCompare {
+	OpalPciBusAny = 0,
+	OpalPciBus3Bits = 2,
+	OpalPciBus4Bits = 3,
+	OpalPciBus5Bits = 4,
+	OpalPciBus6Bits = 5,
+	OpalPciBus7Bits = 6,
+	OpalPciBusAll = 7,
+};
+
+enum OpalDeviceCompare {
+	OPAL_IGNORE_RID_DEVICE_NUMBER = 0,
+	OPAL_COMPARE_RID_DEVICE_NUMBER = 1,
+};
+
+enum OpalFuncCompare {
+	OPAL_IGNORE_RID_FUNCTION_NUMBER = 0,
+	OPAL_COMPARE_RID_FUNCTION_NUMBER = 1,
+};
+
+enum OpalPeAction {
+	OPAL_UNMAP_PE = 0,
+	OPAL_MAP_PE = 1,
+};
+
+enum OpalPeltvAction {
+	OPAL_REMOVE_PE_FROM_DOMAIN = 0,
+	OPAL_ADD_PE_TO_DOMAIN = 1,
+};
+
+enum OpalMveEnableAction {
+	OPAL_DISABLE_MVE = 0,
+	OPAL_ENABLE_MVE = 1,
+};
+
+enum OpalM64Action {
+	OPAL_DISABLE_M64 = 0,
+	OPAL_ENABLE_M64_SPLIT = 1,
+	OPAL_ENABLE_M64_NON_SPLIT = 2,
+};
+
+enum {
+	OPAL_PCI_TCE_KILL_PAGES = 0,
+	OPAL_PCI_TCE_KILL_PE = 1,
+	OPAL_PCI_TCE_KILL_ALL = 2,
+};
+
+struct iommu_table_group_link {
+	struct list_head next;
+	struct callback_head rcu;
+	struct iommu_table_group *table_group;
+};
+
+struct energy_scale_attribute {
+	__be64 id;
+	__be64 val;
+	u8 desc[64];
+	u8 value_desc[64];
+};
+
+struct h_energy_scale_info_hdr {
+	__be64 num_attrs;
+	__be64 array_offset;
+	u8 data_header_version;
+} __attribute__((packed));
+
+struct papr_attr {
+	u64 id;
+	struct kobj_attribute kobj_attr;
+};
+
+struct papr_group {
+	struct attribute_group pg;
+	struct papr_attr pgattrs[3];
+};
+
+struct papr_ops_info {
+	const char *attr_name;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+};
+
+struct wq_flusher;
+
+struct worker;
+
+struct workqueue_attrs;
+
+struct pool_workqueue;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	unsigned int flags;
-	int (*iterator)(const void *, void *);
-	int skipped_ret;
-	bool possessed;
-	key_ref_t result;
-	time64_t now;
+	struct pool_workqueue *cpu_pwqs;
+	struct pool_workqueue *numa_pwq_tbl[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct keyring_read_iterator_context {
-	size_t buflen;
-	size_t count;
-	key_serial_t *buffer;
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	bool no_numa;
+};
+
+struct worker_pool;
+
+struct worker {
+	union {
+		struct list_head entry;
+		struct hlist_node hentry;
+	};
+	struct work_struct *current_work;
+	work_func_t current_func;
+	struct pool_workqueue *current_pwq;
+	unsigned int current_color;
+	struct list_head scheduled;
+	struct task_struct *task;
+	struct worker_pool *pool;
+	struct list_head node;
+	long unsigned int last_active;
+	unsigned int flags;
+	int id;
+	int sleeping;
+	char desc[24];
+	struct workqueue_struct *rescue_wq;
+	work_func_t last_func;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	struct work_struct unbound_release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	long unsigned int watchdog_ts;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 30000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 10,
+	CREATE_COOLDOWN = 100,
+	RESCUER_NICE_LEVEL = -20,
+	HIGHPRI_NICE_LEVEL = -20,
+	WQ_NAME_LEN = 24,
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long int (*fn)(void *);
+	void *arg;
+	long int ret;
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	long unsigned int address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct tm {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	long int tm_year;
+	int tm_wday;
+	int tm_yday;
+};
+
+struct __kernel_old_itimerval {
+	struct __kernel_old_timeval it_interval;
+	struct __kernel_old_timeval it_value;
+};
+
+struct root_domain;
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	long unsigned int flags;
+	cpumask_var_t cpus_allowed;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	struct cgroup_file partition_file;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+enum {
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long int tgt_addr;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+enum hmm_pfn_flags {
+	HMM_PFN_VALID = 9223372036854775808ULL,
+	HMM_PFN_WRITE = 4611686018427387904ULL,
+	HMM_PFN_ERROR = 2305843009213693952ULL,
+	HMM_PFN_ORDER_SHIFT = 56ULL,
+	HMM_PFN_REQ_FAULT = 9223372036854775808ULL,
+	HMM_PFN_REQ_WRITE = 4611686018427387904ULL,
+	HMM_PFN_FLAGS = 18374686479671623680ULL,
+};
+
+struct hmm_range {
+	struct mmu_interval_notifier *notifier;
+	long unsigned int notifier_seq;
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int *hmm_pfns;
+	long unsigned int default_flags;
+	long unsigned int pfn_flags_mask;
+	void *dev_private_owner;
+};
+
+struct hmm_vma_walk {
+	struct hmm_range *range;
+	long unsigned int last;
+};
+
+enum {
+	HMM_NEED_FAULT = 1,
+	HMM_NEED_WRITE_FAULT = 2,
+	HMM_NEED_ALL_BITS = 3,
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short int l_type;
+	short int l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+struct simple_transaction_argresp {
+	ssize_t size;
+	char data[0];
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+struct simple_attr {
+	int (*get)(void *, u64 *);
+	int (*set)(void *, u64);
+	char get_buf[24];
+	char set_buf[24];
+	void *data;
+	const char *fmt;
+	struct mutex mutex;
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct iomap_ops;
+
+struct flock64 {
+	short int l_type;
+	short int l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	long unsigned int fl_break_time;
+	long unsigned int fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+struct ext4_system_zone {
+	struct rb_node node;
+	ext4_fsblk_t start_blk;
+	unsigned int count;
+	u32 ino;
+};
+
+struct mmp_struct {
+	__le32 mmp_magic;
+	__le32 mmp_seq;
+	__le64 mmp_time;
+	char mmp_nodename[64];
+	char mmp_bdevname[32];
+	__le16 mmp_check_interval;
+	__le16 mmp_pad1;
+	__le32 mmp_pad2[226];
+	__le32 mmp_checksum;
+};
+
+typedef long long unsigned int llu;
+
+struct fat_fid {
+	u32 i_gen;
+	u32 i_pos_low;
+	u16 i_pos_hi;
+	u16 parent_i_pos_hi;
+	u32 parent_i_pos_low;
+	u32 parent_i_gen;
+};
+
+struct nfs_mount_request {
+	struct sockaddr *sap;
+	size_t salen;
+	char *hostname;
+	char *dirpath;
+	u32 version;
+	short unsigned int protocol;
+	struct nfs_fh *fh;
+	int noresvport;
+	unsigned int *auth_flav_len;
+	rpc_authflavor_t *auth_flavs;
+	struct net *net;
+};
+
+struct proc_nfs_info {
+	int flag;
+	const char *str;
+	const char *nostr;
+};
+
+struct idmap_legacy_upcalldata;
+
+struct idmap {
+	struct rpc_pipe_dir_object idmap_pdo;
+	struct rpc_pipe *idmap_pipe;
+	struct idmap_legacy_upcalldata *idmap_upcall_data;
+	struct mutex idmap_mutex;
+	struct user_namespace *user_ns;
+};
+
+struct idmap_msg {
+	__u8 im_type;
+	__u8 im_conv;
+	char im_name[128];
+	__u32 im_id;
+	__u8 im_status;
+};
+
+struct idmap_legacy_upcalldata {
+	struct rpc_pipe_msg pipe_msg;
+	struct idmap_msg idmap_msg;
+	struct key *authkey;
+	struct idmap *idmap;
+};
+
+enum {
+	Opt_find_uid = 0,
+	Opt_find_gid = 1,
+	Opt_find_user = 2,
+	Opt_find_group = 3,
+	Opt_find_err = 4,
+};
+
+struct nlm_wait;
+
+struct xfs_dir2_sf_hdr {
+	uint8_t count;
+	uint8_t i8count;
+	uint8_t parent[8];
+};
+
+typedef struct xfs_dir2_sf_hdr xfs_dir2_sf_hdr_t;
+
+typedef __u32 xfs_dev_t;
+
+struct xfs_attr_sf_hdr {
+	__be16 totsize;
+	__u8 count;
+	__u8 padding;
+};
+
+struct xfs_attr_sf_entry {
+	uint8_t namelen;
+	uint8_t valuelen;
+	uint8_t flags;
+	uint8_t nameval[0];
+};
+
+struct xfs_attr_shortform {
+	struct xfs_attr_sf_hdr hdr;
+	struct xfs_attr_sf_entry list[1];
+};
+
+struct xfs_attr_leaf_name_local {
+	__be16 valuelen;
+	__u8 namelen;
+	__u8 nameval[1];
+};
+
+typedef struct xfs_attr_leaf_name_local xfs_attr_leaf_name_local_t;
+
+struct xfs_attr_sf_sort {
+	uint8_t entno;
+	uint8_t namelen;
+	uint8_t valuelen;
+	uint8_t flags;
+	xfs_dahash_t hash;
+	unsigned char *name;
+};
+
+typedef struct xfs_attr_sf_sort xfs_attr_sf_sort_t;
+
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
+
+struct dioattr {
+	__u32 d_mem;
+	__u32 d_miniosz;
+	__u32 d_maxiosz;
+};
+
+struct getbmapx {
+	__s64 bmv_offset;
+	__s64 bmv_block;
+	__s64 bmv_length;
+	__s32 bmv_count;
+	__s32 bmv_entries;
+	__s32 bmv_iflags;
+	__s32 bmv_oflags;
+	__s32 bmv_unused1;
+	__s32 bmv_unused2;
+};
+
+struct xfs_fsop_counts {
+	__u64 freedata;
+	__u64 freertx;
+	__u64 freeino;
+	__u64 allocino;
+};
+
+typedef struct xfs_fsop_counts xfs_fsop_counts_t;
+
+struct xfs_fsop_resblks {
+	__u64 resblks;
+	__u64 resblks_avail;
+};
+
+typedef struct xfs_fsop_resblks xfs_fsop_resblks_t;
+
+struct xfs_growfs_data {
+	__u64 newblocks;
+	__u32 imaxpct;
+};
+
+struct xfs_growfs_log {
+	__u32 newblocks;
+	__u32 isint;
+};
+
+struct xfs_growfs_rt {
+	__u64 newblocks;
+	__u32 extsize;
+};
+
+typedef struct xfs_growfs_rt xfs_growfs_rt_t;
+
+struct xfs_bstime {
+	__kernel_long_t tv_sec;
+	__s32 tv_nsec;
+};
+
+typedef struct xfs_bstime xfs_bstime_t;
+
+struct xfs_bstat {
+	__u64 bs_ino;
+	__u16 bs_mode;
+	__u16 bs_nlink;
+	__u32 bs_uid;
+	__u32 bs_gid;
+	__u32 bs_rdev;
+	__s32 bs_blksize;
+	__s64 bs_size;
+	xfs_bstime_t bs_atime;
+	xfs_bstime_t bs_mtime;
+	xfs_bstime_t bs_ctime;
+	int64_t bs_blocks;
+	__u32 bs_xflags;
+	__s32 bs_extsize;
+	__s32 bs_extents;
+	__u32 bs_gen;
+	__u16 bs_projid_lo;
+	__u16 bs_forkoff;
+	__u16 bs_projid_hi;
+	uint16_t bs_sick;
+	uint16_t bs_checked;
+	unsigned char bs_pad[2];
+	__u32 bs_cowextsize;
+	__u32 bs_dmevmask;
+	__u16 bs_dmstate;
+	__u16 bs_aextents;
+};
+
+struct xfs_fsop_bulkreq {
+	__u64 *lastip;
+	__s32 icount;
+	void *ubuffer;
+	__s32 *ocount;
+};
+
+struct xfs_inogrp {
+	__u64 xi_startino;
+	__s32 xi_alloccount;
+	__u64 xi_allocmask;
+};
+
+struct xfs_inumbers {
+	uint64_t xi_startino;
+	uint64_t xi_allocmask;
+	uint8_t xi_alloccount;
+	uint8_t xi_version;
+	uint8_t xi_padding[6];
+};
+
+struct xfs_bulk_ireq {
+	uint64_t ino;
+	uint32_t flags;
+	uint32_t icount;
+	uint32_t ocount;
+	uint32_t agno;
+	uint64_t reserved[5];
+};
+
+struct xfs_bulkstat_req {
+	struct xfs_bulk_ireq hdr;
+	struct xfs_bulkstat bulkstat[0];
+};
+
+struct xfs_inumbers_req {
+	struct xfs_bulk_ireq hdr;
+	struct xfs_inumbers inumbers[0];
+};
+
+struct xfs_error_injection {
+	__s32 fd;
+	__s32 errtag;
+};
+
+typedef struct xfs_error_injection xfs_error_injection_t;
+
+struct xfs_fs_eofblocks {
+	__u32 eof_version;
+	__u32 eof_flags;
+	uid_t eof_uid;
+	gid_t eof_gid;
+	prid_t eof_prid;
+	__u32 pad32;
+	__u64 eof_min_file_size;
+	__u64 pad64[12];
+};
+
+struct xfs_fsop_handlereq {
+	__u32 fd;
+	void *path;
+	__u32 oflags;
+	void *ihandle;
+	__u32 ihandlen;
+	void *ohandle;
+	__u32 *ohandlen;
+};
+
+typedef struct xfs_fsop_handlereq xfs_fsop_handlereq_t;
+
+struct xfs_attrlist_cursor {
+	__u32 opaque[4];
+};
+
+struct xfs_attrlist {
+	__s32 al_count;
+	__s32 al_more;
+	__s32 al_offset[1];
+};
+
+struct xfs_attrlist_ent {
+	__u32 a_valuelen;
+	char a_name[1];
+};
+
+struct xfs_fsop_attrlist_handlereq {
+	struct xfs_fsop_handlereq hreq;
+	struct xfs_attrlist_cursor pos;
+	__u32 flags;
+	__u32 buflen;
+	void *buffer;
+};
+
+struct xfs_attr_multiop {
+	__u32 am_opcode;
+	__s32 am_error;
+	void *am_attrname;
+	void *am_attrvalue;
+	__u32 am_length;
+	__u32 am_flags;
+};
+
+typedef struct xfs_attr_multiop xfs_attr_multiop_t;
+
+struct xfs_fsop_attrmulti_handlereq {
+	struct xfs_fsop_handlereq hreq;
+	__u32 opcount;
+	struct xfs_attr_multiop *ops;
+};
+
+typedef struct xfs_fsop_attrmulti_handlereq xfs_fsop_attrmulti_handlereq_t;
+
+typedef struct {
+	__u32 val[2];
+} xfs_fsid_t;
+
+struct xfs_fid {
+	__u16 fid_len;
+	__u16 fid_pad;
+	__u32 fid_gen;
+	__u64 fid_ino;
+};
+
+typedef struct xfs_fid xfs_fid_t;
+
+struct xfs_handle {
+	union {
+		__s64 align;
+		xfs_fsid_t _ha_fsid;
+	} ha_u;
+	xfs_fid_t ha_fid;
+};
+
+typedef struct xfs_handle xfs_handle_t;
+
+struct xfs_swapext {
+	int64_t sx_version;
+	int64_t sx_fdtarget;
+	int64_t sx_fdtmp;
+	xfs_off_t sx_offset;
+	xfs_off_t sx_length;
+	char sx_pad[16];
+	struct xfs_bstat sx_stat;
+};
+
+typedef struct xfs_swapext xfs_swapext_t;
+
+struct xfs_scrub_metadata {
+	__u32 sm_type;
+	__u32 sm_flags;
+	__u64 sm_ino;
+	__u32 sm_gen;
+	__u32 sm_agno;
+	__u64 sm_reserved[5];
+};
+
+struct xfs_ibulk {
+	struct xfs_mount *mp;
+	struct user_namespace *mnt_userns;
+	void *ubuffer;
+	xfs_ino_t startino;
+	unsigned int icount;
+	unsigned int ocount;
+	unsigned int flags;
+};
+
+typedef int (*bulkstat_one_fmt_pf)(struct xfs_ibulk *, const struct xfs_bulkstat *);
+
+typedef int (*inumbers_fmt_pf)(struct xfs_ibulk *, const struct xfs_inumbers *);
+
+struct kgetbmap {
+	__s64 bmv_offset;
+	__s64 bmv_block;
+	__s64 bmv_length;
+	__s32 bmv_oflags;
+};
+
+struct xfs_fid64 {
+	u64 ino;
+	u32 gen;
+	u64 parent_ino;
+	u32 parent_gen;
+} __attribute__((packed));
+
+struct fsmap_head {
+	__u32 fmh_iflags;
+	__u32 fmh_oflags;
+	__u32 fmh_count;
+	__u32 fmh_entries;
+	__u64 fmh_reserved[6];
+	struct fsmap fmh_keys[2];
+	struct fsmap fmh_recs[0];
+};
+
+struct xfs_phys_extent {
+	uint64_t pe_startblock;
+	uint32_t pe_len;
+	uint32_t pe_flags;
+};
+
+struct xfs_cui_log_format {
+	uint16_t cui_type;
+	uint16_t cui_size;
+	uint32_t cui_nextents;
+	uint64_t cui_id;
+	struct xfs_phys_extent cui_extents[0];
+};
+
+struct xfs_cud_log_format {
+	uint16_t cud_type;
+	uint16_t cud_size;
+	uint32_t __pad;
+	uint64_t cud_cui_id;
+};
+
+struct xfs_cui_log_item {
+	struct xfs_log_item cui_item;
+	atomic_t cui_refcount;
+	atomic_t cui_next_extent;
+	struct xfs_cui_log_format cui_format;
+};
+
+struct xfs_cud_log_item {
+	struct xfs_log_item cud_item;
+	struct xfs_cui_log_item *cud_cuip;
+	struct xfs_cud_log_format cud_format;
+};
+
+enum xfs_refcount_intent_type {
+	XFS_REFCOUNT_INCREASE = 1,
+	XFS_REFCOUNT_DECREASE = 2,
+	XFS_REFCOUNT_ALLOC_COW = 3,
+	XFS_REFCOUNT_FREE_COW = 4,
+};
+
+struct xfs_refcount_intent {
+	struct list_head ri_list;
+	enum xfs_refcount_intent_type ri_type;
+	xfs_extlen_t ri_blockcount;
+	xfs_fsblock_t ri_startblock;
 };
 
 struct keyctl_dh_params {
@@ -79717,645 +99514,3949 @@
 	__u32 __spare[7];
 };
 
-struct request_key_auth {
-	struct callback_head rcu;
-	struct key *target_key;
-	struct key *dest_keyring;
-	const struct cred *cred;
-	void *callout_info;
-	size_t callout_len;
-	pid_t pid;
-	char op[8];
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct crypto_report_acomp {
+	char type[64];
+};
+
+struct acomp_alg {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	int (*init)(struct crypto_acomp *);
+	void (*exit)(struct crypto_acomp *);
+	unsigned int reqsize;
+	struct crypto_alg base;
 };
 
 enum {
-	Opt_err___5 = 0,
-	Opt_enc = 1,
-	Opt_hash = 2,
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
 };
 
-enum hash_algo {
-	HASH_ALGO_MD4 = 0,
-	HASH_ALGO_MD5 = 1,
-	HASH_ALGO_SHA1 = 2,
-	HASH_ALGO_RIPE_MD_160 = 3,
-	HASH_ALGO_SHA256 = 4,
-	HASH_ALGO_SHA384 = 5,
-	HASH_ALGO_SHA512 = 6,
-	HASH_ALGO_SHA224 = 7,
-	HASH_ALGO_RIPE_MD_128 = 8,
-	HASH_ALGO_RIPE_MD_256 = 9,
-	HASH_ALGO_RIPE_MD_320 = 10,
-	HASH_ALGO_WP_256 = 11,
-	HASH_ALGO_WP_384 = 12,
-	HASH_ALGO_WP_512 = 13,
-	HASH_ALGO_TGR_128 = 14,
-	HASH_ALGO_TGR_160 = 15,
-	HASH_ALGO_TGR_192 = 16,
-	HASH_ALGO_SM3_256 = 17,
-	HASH_ALGO_STREEBOG_256 = 18,
-	HASH_ALGO_STREEBOG_512 = 19,
-	HASH_ALGO__LAST = 20,
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
 };
 
-enum tpm_duration {
-	TPM_SHORT = 0,
-	TPM_MEDIUM = 1,
-	TPM_LONG = 2,
-	TPM_LONG_LONG = 3,
-	TPM_UNDEFINED = 4,
-	TPM_NUM_DURATIONS = 4,
-};
-
-struct encrypted_key_payload {
-	struct callback_head rcu;
-	char *format;
-	char *master_desc;
-	char *datalen;
-	u8 *iv;
-	u8 *encrypted_data;
-	short unsigned int datablob_len;
-	short unsigned int decrypted_datalen;
-	short unsigned int payload_datalen;
-	short unsigned int encrypted_key_format;
-	u8 *decrypted_data;
-	u8 payload_data[0];
-};
-
-struct ecryptfs_session_key {
-	u32 flags;
-	u32 encrypted_key_size;
-	u32 decrypted_key_size;
-	u8 encrypted_key[512];
-	u8 decrypted_key[64];
-};
-
-struct ecryptfs_password {
-	u32 password_bytes;
-	s32 hash_algo;
-	u32 hash_iterations;
-	u32 session_key_encryption_key_bytes;
-	u32 flags;
-	u8 session_key_encryption_key[64];
-	u8 signature[17];
-	u8 salt[8];
-};
-
-struct ecryptfs_private_key {
-	u32 key_size;
-	u32 data_len;
-	u8 signature[17];
-	char pki_type[17];
-	u8 data[0];
-};
-
-struct ecryptfs_auth_tok {
-	u16 version;
-	u16 token_type;
-	u32 flags;
-	struct ecryptfs_session_key session_key;
-	u8 reserved[32];
+struct blkdev_dio {
 	union {
-		struct ecryptfs_password password;
-		struct ecryptfs_private_key private_key;
-	} token;
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
 };
 
 enum {
-	Opt_new = 0,
-	Opt_load = 1,
-	Opt_update = 2,
-	Opt_err___6 = 3,
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
 };
 
-enum {
-	Opt_default = 0,
-	Opt_ecryptfs = 1,
-	Opt_enc32 = 2,
-	Opt_error = 3,
+struct io_msg {
+	struct file *file;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	u32 dst_fd;
+	u32 flags;
 };
 
-enum derived_key_type {
-	ENC_KEY = 0,
-	AUTH_KEY = 1,
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
 };
 
-enum ecryptfs_token_types {
-	ECRYPTFS_PASSWORD = 0,
-	ECRYPTFS_PRIVATE_KEY = 1,
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
 };
 
-struct vfs_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
+struct hvc_opal_priv {
+	hv_protocol_t proto;
+	struct hvsi_priv hvsi;
 };
 
-struct vfs_ns_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-	__le32 rootid;
+struct iommu_group {
+	struct kobject kobj;
+	struct kobject *devices_kobj;
+	struct list_head devices;
+	struct mutex mutex;
+	void *iommu_data;
+	void (*iommu_data_release)(void *);
+	char *name;
+	int id;
+	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
+	struct iommu_domain *domain;
+	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
 };
 
-struct sctp_endpoint;
-
-union security_list_options {
-	int (*binder_set_context_mgr)(struct task_struct *);
-	int (*binder_transaction)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_binder)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);
-	int (*ptrace_access_check)(struct task_struct *, unsigned int);
-	int (*ptrace_traceme)(struct task_struct *);
-	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
-	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
-	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
-	int (*quotactl)(int, int, int, struct super_block *);
-	int (*quota_on)(struct dentry *);
-	int (*syslog)(int);
-	int (*settime)(const struct timespec64 *, const struct timezone *);
-	int (*vm_enough_memory)(struct mm_struct *, long int);
-	int (*bprm_creds_for_exec)(struct linux_binprm *);
-	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
-	int (*bprm_check_security)(struct linux_binprm *);
-	void (*bprm_committing_creds)(struct linux_binprm *);
-	void (*bprm_committed_creds)(struct linux_binprm *);
-	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
-	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*sb_alloc_security)(struct super_block *);
-	void (*sb_free_security)(struct super_block *);
-	void (*sb_free_mnt_opts)(void *);
-	int (*sb_eat_lsm_opts)(char *, void **);
-	int (*sb_remount)(struct super_block *, void *);
-	int (*sb_kern_mount)(struct super_block *);
-	int (*sb_show_options)(struct seq_file *, struct super_block *);
-	int (*sb_statfs)(struct dentry *);
-	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
-	int (*sb_umount)(struct vfsmount *, int);
-	int (*sb_pivotroot)(const struct path *, const struct path *);
-	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
-	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
-	int (*sb_add_mnt_opt)(const char *, const char *, int, void **);
-	int (*move_mount)(const struct path *, const struct path *);
-	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);
-	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
-	int (*path_unlink)(const struct path *, struct dentry *);
-	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
-	int (*path_rmdir)(const struct path *, struct dentry *);
-	int (*path_mknod)(const struct path *, struct dentry *, umode_t, unsigned int);
-	int (*path_truncate)(const struct path *);
-	int (*path_symlink)(const struct path *, struct dentry *, const char *);
-	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
-	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *);
-	int (*path_chmod)(const struct path *, umode_t);
-	int (*path_chown)(const struct path *, kuid_t, kgid_t);
-	int (*path_chroot)(const struct path *);
-	int (*path_notify)(const struct path *, u64, unsigned int);
-	int (*inode_alloc_security)(struct inode *);
-	void (*inode_free_security)(struct inode *);
-	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
-	int (*inode_create)(struct inode *, struct dentry *, umode_t);
-	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
-	int (*inode_unlink)(struct inode *, struct dentry *);
-	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
-	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
-	int (*inode_rmdir)(struct inode *, struct dentry *);
-	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
-	int (*inode_readlink)(struct dentry *);
-	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
-	int (*inode_permission)(struct inode *, int);
-	int (*inode_setattr)(struct dentry *, struct iattr *);
-	int (*inode_getattr)(const struct path *);
-	int (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	int (*inode_getxattr)(struct dentry *, const char *);
-	int (*inode_listxattr)(struct dentry *);
-	int (*inode_removexattr)(struct dentry *, const char *);
-	int (*inode_need_killpriv)(struct dentry *);
-	int (*inode_killpriv)(struct dentry *);
-	int (*inode_getsecurity)(struct inode *, const char *, void **, bool);
-	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
-	int (*inode_listsecurity)(struct inode *, char *, size_t);
-	void (*inode_getsecid)(struct inode *, u32 *);
-	int (*inode_copy_up)(struct dentry *, struct cred **);
-	int (*inode_copy_up_xattr)(const char *);
-	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
-	int (*file_permission)(struct file *, int);
-	int (*file_alloc_security)(struct file *);
-	void (*file_free_security)(struct file *);
-	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap_addr)(long unsigned int);
-	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
-	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
-	int (*file_lock)(struct file *, unsigned int);
-	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
-	void (*file_set_fowner)(struct file *);
-	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
-	int (*file_receive)(struct file *);
-	int (*file_open)(struct file *);
-	int (*task_alloc)(struct task_struct *, long unsigned int);
-	void (*task_free)(struct task_struct *);
-	int (*cred_alloc_blank)(struct cred *, gfp_t);
-	void (*cred_free)(struct cred *);
-	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
-	void (*cred_transfer)(struct cred *, const struct cred *);
-	void (*cred_getsecid)(const struct cred *, u32 *);
-	int (*kernel_act_as)(struct cred *, u32);
-	int (*kernel_create_files_as)(struct cred *, struct inode *);
-	int (*kernel_module_request)(char *);
-	int (*kernel_load_data)(enum kernel_load_data_id, bool);
-	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
-	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
-	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
-	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
-	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
-	int (*task_setpgid)(struct task_struct *, pid_t);
-	int (*task_getpgid)(struct task_struct *);
-	int (*task_getsid)(struct task_struct *);
-	void (*task_getsecid)(struct task_struct *, u32 *);
-	int (*task_setnice)(struct task_struct *, int);
-	int (*task_setioprio)(struct task_struct *, int);
-	int (*task_getioprio)(struct task_struct *);
-	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
-	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
-	int (*task_setscheduler)(struct task_struct *);
-	int (*task_getscheduler)(struct task_struct *);
-	int (*task_movememory)(struct task_struct *);
-	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
-	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	void (*task_to_inode)(struct task_struct *, struct inode *);
-	int (*ipc_permission)(struct kern_ipc_perm *, short int);
-	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
-	int (*msg_msg_alloc_security)(struct msg_msg *);
-	void (*msg_msg_free_security)(struct msg_msg *);
-	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
-	void (*msg_queue_free_security)(struct kern_ipc_perm *);
-	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
-	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
-	int (*shm_alloc_security)(struct kern_ipc_perm *);
-	void (*shm_free_security)(struct kern_ipc_perm *);
-	int (*shm_associate)(struct kern_ipc_perm *, int);
-	int (*shm_shmctl)(struct kern_ipc_perm *, int);
-	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
-	int (*sem_alloc_security)(struct kern_ipc_perm *);
-	void (*sem_free_security)(struct kern_ipc_perm *);
-	int (*sem_associate)(struct kern_ipc_perm *, int);
-	int (*sem_semctl)(struct kern_ipc_perm *, int);
-	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
-	int (*netlink_send)(struct sock *, struct sk_buff *);
-	void (*d_instantiate)(struct dentry *, struct inode *);
-	int (*getprocattr)(struct task_struct *, char *, char **);
-	int (*setprocattr)(const char *, void *, size_t);
-	int (*ismaclabel)(const char *);
-	int (*secid_to_secctx)(u32, char **, u32 *);
-	int (*secctx_to_secid)(const char *, u32, u32 *);
-	void (*release_secctx)(char *, u32);
-	void (*inode_invalidate_secctx)(struct inode *);
-	int (*inode_notifysecctx)(struct inode *, void *, u32);
-	int (*inode_setsecctx)(struct dentry *, void *, u32);
-	int (*inode_getsecctx)(struct inode *, void **, u32 *);
-	int (*post_notification)(const struct cred *, const struct cred *, struct watch_notification *);
-	int (*watch_key)(struct key *);
-	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
-	int (*unix_may_send)(struct socket *, struct socket *);
-	int (*socket_create)(int, int, int, int);
-	int (*socket_post_create)(struct socket *, int, int, int, int);
-	int (*socket_socketpair)(struct socket *, struct socket *);
-	int (*socket_bind)(struct socket *, struct sockaddr *, int);
-	int (*socket_connect)(struct socket *, struct sockaddr *, int);
-	int (*socket_listen)(struct socket *, int);
-	int (*socket_accept)(struct socket *, struct socket *);
-	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
-	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
-	int (*socket_getsockname)(struct socket *);
-	int (*socket_getpeername)(struct socket *);
-	int (*socket_getsockopt)(struct socket *, int, int);
-	int (*socket_setsockopt)(struct socket *, int, int);
-	int (*socket_shutdown)(struct socket *, int);
-	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
-	int (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);
-	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
-	int (*sk_alloc_security)(struct sock *, int, gfp_t);
-	void (*sk_free_security)(struct sock *);
-	void (*sk_clone_security)(const struct sock *, struct sock *);
-	void (*sk_getsecid)(struct sock *, u32 *);
-	void (*sock_graft)(struct sock *, struct socket *);
-	int (*inet_conn_request)(struct sock *, struct sk_buff *, struct request_sock *);
-	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
-	void (*inet_conn_established)(struct sock *, struct sk_buff *);
-	int (*secmark_relabel_packet)(u32);
-	void (*secmark_refcount_inc)();
-	void (*secmark_refcount_dec)();
-	void (*req_classify_flow)(const struct request_sock *, struct flowi *);
-	int (*tun_dev_alloc_security)(void **);
-	void (*tun_dev_free_security)(void *);
-	int (*tun_dev_create)();
-	int (*tun_dev_attach_queue)(void *);
-	int (*tun_dev_attach)(struct sock *, void *);
-	int (*tun_dev_open)(void *);
-	int (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);
-	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
-	void (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);
-	int (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);
-	int (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);
-	void (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_policy_delete_security)(struct xfrm_sec_ctx *);
-	int (*xfrm_state_alloc)(struct xfrm_state *, struct xfrm_user_sec_ctx *);
-	int (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);
-	void (*xfrm_state_free_security)(struct xfrm_state *);
-	int (*xfrm_state_delete_security)(struct xfrm_state *);
-	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32, u8);
-	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi *);
-	int (*xfrm_decode_session)(struct sk_buff *, u32 *, int);
-	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
-	void (*key_free)(struct key *);
-	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
-	int (*key_getsecurity)(struct key *, char **);
-	int (*audit_rule_init)(u32, u32, char *, void **);
-	int (*audit_rule_known)(struct audit_krule *);
-	int (*audit_rule_match)(u32, u32, u32, void *);
-	void (*audit_rule_free)(void *);
-	int (*bpf)(int, union bpf_attr *, unsigned int);
-	int (*bpf_map)(struct bpf_map *, fmode_t);
-	int (*bpf_prog)(struct bpf_prog *);
-	int (*bpf_map_alloc_security)(struct bpf_map *);
-	void (*bpf_map_free_security)(struct bpf_map *);
-	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
-	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
-	int (*locked_down)(enum lockdown_reason);
-	int (*perf_event_open)(struct perf_event_attr *, int);
-	int (*perf_event_alloc)(struct perf_event *);
-	void (*perf_event_free)(struct perf_event *);
-	int (*perf_event_read)(struct perf_event *);
-	int (*perf_event_write)(struct perf_event *);
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
 };
 
-struct security_hook_heads {
-	struct hlist_head binder_set_context_mgr;
-	struct hlist_head binder_transaction;
-	struct hlist_head binder_transfer_binder;
-	struct hlist_head binder_transfer_file;
-	struct hlist_head ptrace_access_check;
-	struct hlist_head ptrace_traceme;
-	struct hlist_head capget;
-	struct hlist_head capset;
-	struct hlist_head capable;
-	struct hlist_head quotactl;
-	struct hlist_head quota_on;
-	struct hlist_head syslog;
-	struct hlist_head settime;
-	struct hlist_head vm_enough_memory;
-	struct hlist_head bprm_creds_for_exec;
-	struct hlist_head bprm_creds_from_file;
-	struct hlist_head bprm_check_security;
-	struct hlist_head bprm_committing_creds;
-	struct hlist_head bprm_committed_creds;
-	struct hlist_head fs_context_dup;
-	struct hlist_head fs_context_parse_param;
-	struct hlist_head sb_alloc_security;
-	struct hlist_head sb_free_security;
-	struct hlist_head sb_free_mnt_opts;
-	struct hlist_head sb_eat_lsm_opts;
-	struct hlist_head sb_remount;
-	struct hlist_head sb_kern_mount;
-	struct hlist_head sb_show_options;
-	struct hlist_head sb_statfs;
-	struct hlist_head sb_mount;
-	struct hlist_head sb_umount;
-	struct hlist_head sb_pivotroot;
-	struct hlist_head sb_set_mnt_opts;
-	struct hlist_head sb_clone_mnt_opts;
-	struct hlist_head sb_add_mnt_opt;
-	struct hlist_head move_mount;
-	struct hlist_head dentry_init_security;
-	struct hlist_head dentry_create_files_as;
-	struct hlist_head path_unlink;
-	struct hlist_head path_mkdir;
-	struct hlist_head path_rmdir;
-	struct hlist_head path_mknod;
-	struct hlist_head path_truncate;
-	struct hlist_head path_symlink;
-	struct hlist_head path_link;
-	struct hlist_head path_rename;
-	struct hlist_head path_chmod;
-	struct hlist_head path_chown;
-	struct hlist_head path_chroot;
-	struct hlist_head path_notify;
-	struct hlist_head inode_alloc_security;
-	struct hlist_head inode_free_security;
-	struct hlist_head inode_init_security;
-	struct hlist_head inode_create;
-	struct hlist_head inode_link;
-	struct hlist_head inode_unlink;
-	struct hlist_head inode_symlink;
-	struct hlist_head inode_mkdir;
-	struct hlist_head inode_rmdir;
-	struct hlist_head inode_mknod;
-	struct hlist_head inode_rename;
-	struct hlist_head inode_readlink;
-	struct hlist_head inode_follow_link;
-	struct hlist_head inode_permission;
-	struct hlist_head inode_setattr;
-	struct hlist_head inode_getattr;
-	struct hlist_head inode_setxattr;
-	struct hlist_head inode_post_setxattr;
-	struct hlist_head inode_getxattr;
-	struct hlist_head inode_listxattr;
-	struct hlist_head inode_removexattr;
-	struct hlist_head inode_need_killpriv;
-	struct hlist_head inode_killpriv;
-	struct hlist_head inode_getsecurity;
-	struct hlist_head inode_setsecurity;
-	struct hlist_head inode_listsecurity;
-	struct hlist_head inode_getsecid;
-	struct hlist_head inode_copy_up;
-	struct hlist_head inode_copy_up_xattr;
-	struct hlist_head kernfs_init_security;
-	struct hlist_head file_permission;
-	struct hlist_head file_alloc_security;
-	struct hlist_head file_free_security;
-	struct hlist_head file_ioctl;
-	struct hlist_head mmap_addr;
-	struct hlist_head mmap_file;
-	struct hlist_head file_mprotect;
-	struct hlist_head file_lock;
-	struct hlist_head file_fcntl;
-	struct hlist_head file_set_fowner;
-	struct hlist_head file_send_sigiotask;
-	struct hlist_head file_receive;
-	struct hlist_head file_open;
-	struct hlist_head task_alloc;
-	struct hlist_head task_free;
-	struct hlist_head cred_alloc_blank;
-	struct hlist_head cred_free;
-	struct hlist_head cred_prepare;
-	struct hlist_head cred_transfer;
-	struct hlist_head cred_getsecid;
-	struct hlist_head kernel_act_as;
-	struct hlist_head kernel_create_files_as;
-	struct hlist_head kernel_module_request;
-	struct hlist_head kernel_load_data;
-	struct hlist_head kernel_post_load_data;
-	struct hlist_head kernel_read_file;
-	struct hlist_head kernel_post_read_file;
-	struct hlist_head task_fix_setuid;
-	struct hlist_head task_fix_setgid;
-	struct hlist_head task_setpgid;
-	struct hlist_head task_getpgid;
-	struct hlist_head task_getsid;
-	struct hlist_head task_getsecid;
-	struct hlist_head task_setnice;
-	struct hlist_head task_setioprio;
-	struct hlist_head task_getioprio;
-	struct hlist_head task_prlimit;
-	struct hlist_head task_setrlimit;
-	struct hlist_head task_setscheduler;
-	struct hlist_head task_getscheduler;
-	struct hlist_head task_movememory;
-	struct hlist_head task_kill;
-	struct hlist_head task_prctl;
-	struct hlist_head task_to_inode;
-	struct hlist_head ipc_permission;
-	struct hlist_head ipc_getsecid;
-	struct hlist_head msg_msg_alloc_security;
-	struct hlist_head msg_msg_free_security;
-	struct hlist_head msg_queue_alloc_security;
-	struct hlist_head msg_queue_free_security;
-	struct hlist_head msg_queue_associate;
-	struct hlist_head msg_queue_msgctl;
-	struct hlist_head msg_queue_msgsnd;
-	struct hlist_head msg_queue_msgrcv;
-	struct hlist_head shm_alloc_security;
-	struct hlist_head shm_free_security;
-	struct hlist_head shm_associate;
-	struct hlist_head shm_shmctl;
-	struct hlist_head shm_shmat;
-	struct hlist_head sem_alloc_security;
-	struct hlist_head sem_free_security;
-	struct hlist_head sem_associate;
-	struct hlist_head sem_semctl;
-	struct hlist_head sem_semop;
-	struct hlist_head netlink_send;
-	struct hlist_head d_instantiate;
-	struct hlist_head getprocattr;
-	struct hlist_head setprocattr;
-	struct hlist_head ismaclabel;
-	struct hlist_head secid_to_secctx;
-	struct hlist_head secctx_to_secid;
-	struct hlist_head release_secctx;
-	struct hlist_head inode_invalidate_secctx;
-	struct hlist_head inode_notifysecctx;
-	struct hlist_head inode_setsecctx;
-	struct hlist_head inode_getsecctx;
-	struct hlist_head post_notification;
-	struct hlist_head watch_key;
-	struct hlist_head unix_stream_connect;
-	struct hlist_head unix_may_send;
-	struct hlist_head socket_create;
-	struct hlist_head socket_post_create;
-	struct hlist_head socket_socketpair;
-	struct hlist_head socket_bind;
-	struct hlist_head socket_connect;
-	struct hlist_head socket_listen;
-	struct hlist_head socket_accept;
-	struct hlist_head socket_sendmsg;
-	struct hlist_head socket_recvmsg;
-	struct hlist_head socket_getsockname;
-	struct hlist_head socket_getpeername;
-	struct hlist_head socket_getsockopt;
-	struct hlist_head socket_setsockopt;
-	struct hlist_head socket_shutdown;
-	struct hlist_head socket_sock_rcv_skb;
-	struct hlist_head socket_getpeersec_stream;
-	struct hlist_head socket_getpeersec_dgram;
-	struct hlist_head sk_alloc_security;
-	struct hlist_head sk_free_security;
-	struct hlist_head sk_clone_security;
-	struct hlist_head sk_getsecid;
-	struct hlist_head sock_graft;
-	struct hlist_head inet_conn_request;
-	struct hlist_head inet_csk_clone;
-	struct hlist_head inet_conn_established;
-	struct hlist_head secmark_relabel_packet;
-	struct hlist_head secmark_refcount_inc;
-	struct hlist_head secmark_refcount_dec;
-	struct hlist_head req_classify_flow;
-	struct hlist_head tun_dev_alloc_security;
-	struct hlist_head tun_dev_free_security;
-	struct hlist_head tun_dev_create;
-	struct hlist_head tun_dev_attach_queue;
-	struct hlist_head tun_dev_attach;
-	struct hlist_head tun_dev_open;
-	struct hlist_head sctp_assoc_request;
-	struct hlist_head sctp_bind_connect;
-	struct hlist_head sctp_sk_clone;
-	struct hlist_head xfrm_policy_alloc_security;
-	struct hlist_head xfrm_policy_clone_security;
-	struct hlist_head xfrm_policy_free_security;
-	struct hlist_head xfrm_policy_delete_security;
-	struct hlist_head xfrm_state_alloc;
-	struct hlist_head xfrm_state_alloc_acquire;
-	struct hlist_head xfrm_state_free_security;
-	struct hlist_head xfrm_state_delete_security;
-	struct hlist_head xfrm_policy_lookup;
-	struct hlist_head xfrm_state_pol_flow_match;
-	struct hlist_head xfrm_decode_session;
-	struct hlist_head key_alloc;
-	struct hlist_head key_free;
-	struct hlist_head key_permission;
-	struct hlist_head key_getsecurity;
-	struct hlist_head audit_rule_init;
-	struct hlist_head audit_rule_known;
-	struct hlist_head audit_rule_match;
-	struct hlist_head audit_rule_free;
-	struct hlist_head bpf;
-	struct hlist_head bpf_map;
-	struct hlist_head bpf_prog;
-	struct hlist_head bpf_map_alloc_security;
-	struct hlist_head bpf_map_free_security;
-	struct hlist_head bpf_prog_alloc_security;
-	struct hlist_head bpf_prog_free_security;
-	struct hlist_head locked_down;
-	struct hlist_head perf_event_open;
-	struct hlist_head perf_event_alloc;
-	struct hlist_head perf_event_free;
-	struct hlist_head perf_event_read;
-	struct hlist_head perf_event_write;
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
 };
 
-struct security_hook_list {
-	struct hlist_node list;
-	struct hlist_head *head;
-	union security_list_options hook;
-	char *lsm;
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
 };
 
-enum lsm_order {
-	LSM_ORDER_FIRST = 4294967295,
-	LSM_ORDER_MUTABLE = 0,
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
 };
 
-struct lsm_info {
-	const char *name;
-	enum lsm_order order;
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+struct group_device {
+	struct list_head list;
+	struct device *dev;
+	char *name;
+};
+
+struct iommu_group_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct iommu_group *, char *);
+	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+};
+
+struct group_for_pci_data {
+	struct pci_dev *pdev;
+	struct iommu_group *group;
+};
+
+struct __group_domain_type {
+	struct device *dev;
+	unsigned int type;
+};
+
+typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
+
+struct regcache_rbtree_node {
+	void *block;
+	long int *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct nd_mapping_desc {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+};
+
+struct nd_region_desc {
+	struct resource *res;
+	struct nd_mapping_desc *mapping;
+	u16 num_mappings;
+	const struct attribute_group **attr_groups;
+	struct nd_interleave_set *nd_set;
+	void *provider_data;
+	int num_lanes;
+	int numa_node;
+	int target_node;
 	long unsigned int flags;
-	int *enabled;
-	int (*init)();
-	struct lsm_blob_sizes *blobs;
+	int memregion;
+	struct device_node *of_node;
+	int (*flush)(struct nd_region *, struct bio *);
 };
 
-enum lsm_event {
-	LSM_POLICY_CHANGE = 0,
+struct nd_namespace_index {
+	u8 sig[16];
+	u8 flags[3];
+	u8 labelsize;
+	__le32 seq;
+	__le64 myoff;
+	__le64 mysize;
+	__le64 otheroff;
+	__le64 labeloff;
+	__le32 nslot;
+	__le16 major;
+	__le16 minor;
+	__le64 checksum;
+	u8 free[0];
 };
 
-typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+struct nvdimm_efi_label {
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nlabel;
+	__le16 position;
+	__le64 isetcookie;
+	__le64 lbasize;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	u8 align;
+	u8 reserved[3];
+	guid_t type_guid;
+	guid_t abstraction_guid;
+	u8 reserved2[88];
+	__le64 checksum;
+};
+
+struct nvdimm_cxl_label {
+	u8 type[16];
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nrange;
+	__le16 position;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	__le32 align;
+	u8 region_uuid[16];
+	u8 abstraction_uuid[16];
+	__le16 lbasize;
+	u8 reserved[86];
+	__le64 checksum;
+};
+
+struct nd_namespace_label {
+	union {
+		struct nvdimm_cxl_label cxl;
+		struct nvdimm_efi_label efi;
+	};
+};
+
+struct nd_label_ent {
+	struct list_head list;
+	long unsigned int flags;
+	struct nd_namespace_label *label;
+};
+
+struct conflict_context {
+	struct nd_region *nd_region;
+	resource_size_t start;
+	resource_size_t size;
+};
+
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence *table[0];
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	unsigned int dxfer_len;
+	void *dxferp;
+	unsigned char *cmdp;
+	void *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+typedef struct sg_io_hdr sg_io_hdr_t;
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+struct sg_scsi_id {
+	int host_no;
+	int channel;
+	int scsi_id;
+	int lun;
+	int scsi_type;
+	short int h_cmd_per_lun;
+	short int d_queue_depth;
+	int unused[2];
+};
+
+typedef struct sg_scsi_id sg_scsi_id_t;
+
+struct sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	void *usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+typedef struct sg_req_info sg_req_info_t;
+
+struct sg_header {
+	int pack_len;
+	int reply_len;
+	int pack_id;
+	int result;
+	unsigned int twelve_byte: 1;
+	unsigned int target_status: 5;
+	unsigned int host_status: 8;
+	unsigned int driver_status: 8;
+	unsigned int other_flags: 10;
+	unsigned char sense_buffer[16];
+};
+
+struct sg_scatter_hold {
+	short unsigned int k_use_sg;
+	unsigned int sglist_len;
+	unsigned int bufflen;
+	struct page **pages;
+	int page_order;
+	char dio_in_use;
+	unsigned char cmd_opcode;
+};
+
+typedef struct sg_scatter_hold Sg_scatter_hold;
+
+struct sg_fd;
+
+struct sg_request {
+	struct list_head entry;
+	struct sg_fd *parentfp;
+	Sg_scatter_hold data;
+	sg_io_hdr_t header;
+	unsigned char sense_b[96];
+	char res_used;
+	char orphan;
+	char sg_io_owned;
+	char done;
+	struct request *rq;
+	struct bio *bio;
+	struct execute_work ew;
+};
+
+typedef struct sg_request Sg_request;
+
+struct sg_device;
+
+struct sg_fd {
+	struct list_head sfd_siblings;
+	struct sg_device *parentdp;
+	wait_queue_head_t read_wait;
+	rwlock_t rq_list_lock;
+	struct mutex f_mutex;
+	int timeout;
+	int timeout_user;
+	Sg_scatter_hold reserve;
+	struct list_head rq_list;
+	struct fasync_struct *async_qp;
+	Sg_request req_arr[16];
+	char force_packid;
+	char cmd_q;
+	unsigned char next_cmd_len;
+	char keep_orphan;
+	char mmap_called;
+	char res_in_use;
+	struct kref f_ref;
+	struct execute_work ew;
+};
+
+struct sg_device {
+	struct scsi_device *device;
+	wait_queue_head_t open_wait;
+	struct mutex open_rel_lock;
+	int sg_tablesize;
+	u32 index;
+	struct list_head sfds;
+	rwlock_t sfd_lock;
+	atomic_t detaching;
+	bool exclude;
+	int open_cnt;
+	char sgdebug;
+	char name[32];
+	struct cdev *cdev;
+	struct kref d_ref;
+};
+
+typedef struct sg_fd Sg_fd;
+
+typedef struct sg_device Sg_device;
+
+struct sg_proc_deviter {
+	loff_t index;
+	size_t max;
+};
+
+enum {
+	ATA_GEN_CLASS_MATCH = 1,
+	ATA_GEN_FORCE_DMA = 2,
+	ATA_GEN_INTEL_IDER = 4,
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+enum SS4_PACKET_ID {
+	SS4_PACKET_ID_IDLE = 0,
+	SS4_PACKET_ID_ONE = 1,
+	SS4_PACKET_ID_TWO = 2,
+	SS4_PACKET_ID_MULTI = 3,
+	SS4_PACKET_ID_STICK = 4,
+};
+
+enum V7_PACKET_ID {
+	V7_PACKET_ID_IDLE = 0,
+	V7_PACKET_ID_TWO = 1,
+	V7_PACKET_ID_MULTI = 2,
+	V7_PACKET_ID_NEW = 3,
+	V7_PACKET_ID_UNKNOWN = 4,
+};
+
+struct alps_protocol_info {
+	u16 version;
+	u8 byte0;
+	u8 mask0;
+	unsigned int flags;
+};
+
+struct alps_model_info {
+	u8 signature[3];
+	struct alps_protocol_info protocol_info;
+};
+
+struct alps_nibble_commands {
+	int command;
+	unsigned char data;
+};
+
+struct alps_bitmap_point {
+	int start_bit;
+	int num_bits;
+};
+
+struct alps_fields {
+	unsigned int x_map;
+	unsigned int y_map;
+	unsigned int fingers;
+	int pressure;
+	struct input_mt_pos st;
+	struct input_mt_pos mt[4];
+	unsigned int first_mp: 1;
+	unsigned int is_mp: 1;
+	unsigned int left: 1;
+	unsigned int right: 1;
+	unsigned int middle: 1;
+	unsigned int ts_left: 1;
+	unsigned int ts_right: 1;
+	unsigned int ts_middle: 1;
+};
+
+struct alps_data {
+	struct psmouse *psmouse;
+	struct input_dev *dev2;
+	struct input_dev *dev3;
+	char phys2[32];
+	char phys3[32];
+	struct delayed_work dev3_register_work;
+	const struct alps_nibble_commands *nibble_commands;
+	int addr_command;
+	u16 proto_version;
+	u8 byte0;
+	u8 mask0;
+	u8 dev_id[3];
+	u8 fw_ver[3];
+	int flags;
+	int x_max;
+	int y_max;
+	int x_bits;
+	int y_bits;
+	unsigned int x_res;
+	unsigned int y_res;
+	int (*hw_init)(struct psmouse *);
+	void (*process_packet)(struct psmouse *);
+	int (*decode_fields)(struct alps_fields *, unsigned char *, struct psmouse *);
+	void (*set_abs_params)(struct alps_data *, struct input_dev *);
+	int prev_fin;
+	int multi_packet;
+	int second_touch;
+	unsigned char multi_data[6];
+	struct alps_fields f;
+	u8 quirks;
+	struct timer_list timer;
+};
+
+struct dm_rq_target_io;
+
+struct dm_rq_clone_bio_info {
+	struct bio *orig;
+	struct dm_rq_target_io *tio;
+	struct bio clone;
+};
+
+struct dm_rq_target_io {
+	struct mapped_device *md;
+	struct dm_target *ti;
+	struct request *orig;
+	struct request *clone;
+	struct kthread_work work;
+	blk_status_t error;
+	union map_info info;
+	struct dm_stats_aux stats_aux;
+	long unsigned int duration_jiffies;
+	unsigned int n_sectors;
+	unsigned int completed;
+};
+
+enum {
+	OD_NORMAL_SAMPLE = 0,
+	OD_SUB_SAMPLE = 1,
+};
+
+struct od_ops {
+	unsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);
+};
+
+struct od_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int freq_lo;
+	unsigned int freq_lo_delay_us;
+	unsigned int freq_hi_delay_us;
+	unsigned int sample_type: 1;
+};
+
+struct od_dbs_tuners {
+	unsigned int powersave_bias;
+};
+
+struct nx842_constraints {
+	int alignment;
+	int multiple;
+	int minimum;
+	int maximum;
+};
+
+struct nx842_driver {
+	char *name;
+	struct module *owner;
+	size_t workmem_size;
+	struct nx842_constraints *constraints;
+	int (*compress)(const unsigned char *, unsigned int, unsigned char *, unsigned int *, void *);
+	int (*decompress)(const unsigned char *, unsigned int, unsigned char *, unsigned int *, void *);
+};
+
+struct nx842_workmem {
+	struct coprocessor_request_block crb;
+	struct data_descriptor_entry ddl_in[17];
+	struct data_descriptor_entry ddl_out[17];
+	ktime_t start;
+	char padding[256];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nx_coproc {
+	unsigned int chip_id;
+	unsigned int ct;
+	unsigned int ci;
+	struct {
+		struct vas_window *rxwin;
+		int id;
+	} vas;
+	struct list_head list;
+};
+
+struct of_bus {
+	const char *name;
+	const char *addresses;
+	int (*match)(struct device_node *);
+	void (*count_cells)(struct device_node *, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+	bool has_flags;
+	unsigned int (*get_flags)(const __be32 *);
+};
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+enum {
+	NETNSA_NONE = 0,
+	NETNSA_NSID = 1,
+	NETNSA_PID = 2,
+	NETNSA_FD = 3,
+	NETNSA_TARGET_NSID = 4,
+	NETNSA_CURRENT_NSID = 5,
+	__NETNSA_MAX = 6,
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+struct gen_cookie {
+	struct pcpu_gen_cookie *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct net_fill_args {
+	u32 portid;
+	u32 seq;
+	int flags;
+	int cmd;
+	int nsid;
+	bool add_ref;
+	int ref_nsid;
+};
+
+struct rtnl_net_dump_cb {
+	struct net *tgt_net;
+	struct net *ref_net;
+	struct sk_buff *skb;
+	struct net_fill_args fillargs;
+	int idx;
+	int s_idx;
+};
+
+struct tso_t {
+	int next_frag_idx;
+	int size;
+	void *data;
+	u16 ip_id;
+	u8 tlen;
+	bool ipv6;
+	u32 tcp_seq;
+};
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+struct linkinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+struct ipq {
+	struct inet_frag_queue q;
+	u8 ecn;
+	u16 max_df_size;
+	int iif;
+	unsigned int rid;
+	struct inet_peer *peer;
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	union {
+		struct {
+			__be32 imsf_multiaddr_aux;
+			__be32 imsf_interface_aux;
+			__u32 imsf_fmode_aux;
+			__u32 imsf_numsrc_aux;
+			__be32 imsf_slist[1];
+		};
+		struct {
+			__be32 imsf_multiaddr;
+			__be32 imsf_interface;
+			__u32 imsf_fmode;
+			__u32 imsf_numsrc;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+enum {
+	IFLA_IPTUN_UNSPEC = 0,
+	IFLA_IPTUN_LINK = 1,
+	IFLA_IPTUN_LOCAL = 2,
+	IFLA_IPTUN_REMOTE = 3,
+	IFLA_IPTUN_TTL = 4,
+	IFLA_IPTUN_TOS = 5,
+	IFLA_IPTUN_ENCAP_LIMIT = 6,
+	IFLA_IPTUN_FLOWINFO = 7,
+	IFLA_IPTUN_FLAGS = 8,
+	IFLA_IPTUN_PROTO = 9,
+	IFLA_IPTUN_PMTUDISC = 10,
+	IFLA_IPTUN_6RD_PREFIX = 11,
+	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
+	IFLA_IPTUN_6RD_PREFIXLEN = 13,
+	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
+	IFLA_IPTUN_ENCAP_TYPE = 15,
+	IFLA_IPTUN_ENCAP_FLAGS = 16,
+	IFLA_IPTUN_ENCAP_SPORT = 17,
+	IFLA_IPTUN_ENCAP_DPORT = 18,
+	IFLA_IPTUN_COLLECT_METADATA = 19,
+	IFLA_IPTUN_FWMARK = 20,
+	__IFLA_IPTUN_MAX = 21,
+};
+
+struct xfrm_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm_tunnel *next;
+	int priority;
+};
+
+typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	short unsigned int ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	short unsigned int prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_MAX = 58,
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_OIF = 4,
+	IPV6_SADDR_RULE_LABEL = 5,
+	IPV6_SADDR_RULE_PRIVACY = 6,
+	IPV6_SADDR_RULE_ORCHID = 7,
+	IPV6_SADDR_RULE_PREFIX = 8,
+	IPV6_SADDR_RULE_MAX = 9,
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	long unsigned int scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+typedef struct rpc_xprt * (*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *, const struct rpc_xprt *);
+
+typedef initcall_t initcall_entry_t;
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+enum branch_cache_flush_type {
+	BRANCH_CACHE_FLUSH_NONE = 1,
+	BRANCH_CACHE_FLUSH_SW = 2,
+	BRANCH_CACHE_FLUSH_HW = 4,
+};
+
+struct legacy_serial_info {
+	struct device_node *np;
+	unsigned int speed;
+	unsigned int clock;
+	int irq_check_parent;
+	phys_addr_t taddr;
+	void *early_addr;
+};
+
+enum slb_index {
+	LINEAR_INDEX = 0,
+	KSTACK_INDEX = 1,
+};
+
+struct icp_ipl {
+	union {
+		u32 word;
+		u8 bytes[4];
+	} xirr_poll;
+	union {
+		u32 word;
+		u8 bytes[4];
+	} xirr;
+	u32 dummy;
+	union {
+		u32 word;
+		u8 bytes[4];
+	} qirr;
+	u32 link_a;
+	u32 link_b;
+	u32 link_c;
+};
+
+enum OpalSysparamPerm {
+	OPAL_SYSPARAM_READ = 1,
+	OPAL_SYSPARAM_WRITE = 2,
+	OPAL_SYSPARAM_RW = 3,
+};
+
+struct param_attr {
+	struct list_head list;
+	u32 param_id;
+	u32 param_size;
+	struct kobj_attribute kobj_attr;
+};
+
+struct sg_attr {
+	u32 handle;
+	struct kobj_attribute attr;
+};
+
+struct sensor_group___2 {
+	char name[20];
+	struct attribute_group sg;
+	struct sg_attr *sgattrs;
+};
+
+struct sg_ops_info {
+	int opal_no;
+	const char *attr_name;
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+enum {
+	IMC_TYPE_THREAD = 1,
+	IMC_TYPE_TRACE = 2,
+	IMC_TYPE_CORE = 4,
+	IMC_TYPE_CHIP = 16,
+};
+
+struct hv_gpci_request_buffer {
+	struct hv_get_perf_counter_info_params params;
+	uint8_t bytes[4064];
+};
+
+struct hvcall_ppp_data {
+	u64 entitlement;
+	u64 unallocated_entitlement;
+	u16 group_num;
+	u16 pool_num;
+	u8 capped;
+	u8 weight;
+	u8 unallocated_weight;
+	u16 active_procs_in_pool;
+	u16 active_system_procs;
+	u16 phys_platform_procs;
+	u32 max_proc_cap_avail;
+	u32 entitled_proc_cap_avail;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	long unsigned int clone_flags;
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
+
+struct audit_context;
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum devkmsg_log_bits {
+	__DEVKMSG_LOG_BIT_ON = 0,
+	__DEVKMSG_LOG_BIT_OFF = 1,
+	__DEVKMSG_LOG_BIT_LOCK = 2,
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	char buf[8192];
+	struct printk_info info;
+	char text_buf[8192];
+	struct printk_record record;
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	long unsigned int attrs;
+};
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+};
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	long unsigned int ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
+};
+
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
+};
+
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods___2 = 8,
+	Opt_nofavordynmods = 9,
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_transition_snapshot {
+	long unsigned int rcu;
+	long unsigned int srcu;
+	bool ongoing;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+enum {
+	TRACE_CTX_NMI = 0,
+	TRACE_CTX_IRQ = 1,
+	TRACE_CTX_SOFTIRQ = 2,
+	TRACE_CTX_NORMAL = 3,
+	TRACE_CTX_TRANSITION = 4,
+};
+
+typedef long unsigned int perf_trace_t[1024];
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct bpf_map_value_off_desc *kptr_off_desc;
+	u8 uninit_dynptr_regno;
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum {
+	AT_PKT_END = -1,
+	BEYOND_PKT_END = -2,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+enum {
+	REASON_BOUNDS = -1,
+	REASON_TYPE = -2,
+	REASON_PATHS = -3,
+	REASON_LIMIT = -4,
+	REASON_STACK = -5,
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH___2 = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
+};
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int);
+};
+
+enum bpf_struct_ops_state {
+	BPF_STRUCT_OPS_STATE_INIT = 0,
+	BPF_STRUCT_OPS_STATE_INUSE = 1,
+	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
+};
+
+struct bpf_struct_ops_value {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_struct_ops_map {
+	struct bpf_map map;
+	struct callback_head rcu;
+	const struct bpf_struct_ops *st_ops;
+	struct mutex lock;
+	struct bpf_link **links;
+	void *image;
+	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_struct_ops_value kvalue;
+};
+
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_struct_ops_tcp_congestion_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tcp_congestion_ops data;
+};
+
+enum {
+	BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0,
+	BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1,
+	__NR_BPF_STRUCT_OPS_TYPE = 2,
+};
+
+enum lruvec_flags {
+	LRUVEC_CONGESTED = 0,
+};
+
+enum pgdat_flags {
+	PGDAT_DIRTY = 0,
+	PGDAT_WRITEBACK = 1,
+	PGDAT_RECLAIM_LOCKED = 2,
+};
+
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+struct reclaim_stat {
+	unsigned int nr_dirty;
+	unsigned int nr_unqueued_dirty;
+	unsigned int nr_congested;
+	unsigned int nr_writeback;
+	unsigned int nr_immediate;
+	unsigned int nr_pageout;
+	unsigned int nr_activate[2];
+	unsigned int nr_ref_keep;
+	unsigned int nr_unmap_fail;
+	unsigned int nr_lazyfree_fail;
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_wake {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_wakeup_kswapd {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
+	struct trace_entry ent;
+	long unsigned int nr_reclaimed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_start {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	void *shrink;
+	int nid;
+	long int nr_objects_to_shrink;
+	long unsigned int gfp_flags;
+	long unsigned int cache_items;
+	long long unsigned int delta;
+	long unsigned int total_scan;
+	int priority;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_end {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	int nid;
+	void *shrink;
+	long int unused_scan;
+	long int new_scan;
+	int retval;
+	long int total_scan;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_isolate {
+	struct trace_entry ent;
+	int highest_zoneidx;
+	int order;
+	long unsigned int nr_requested;
+	long unsigned int nr_scanned;
+	long unsigned int nr_skipped;
+	long unsigned int nr_taken;
+	unsigned int isolate_mode;
+	int lru;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_write_folio {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int nr_congested;
+	long unsigned int nr_immediate;
+	unsigned int nr_activate0;
+	unsigned int nr_activate1;
+	long unsigned int nr_ref_keep;
+	long unsigned int nr_unmap_fail;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_active {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_taken;
+	long unsigned int nr_active;
+	long unsigned int nr_deactivated;
+	long unsigned int nr_referenced;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_node_reclaim_begin {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
+
+struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
+
+struct trace_event_data_offsets_mm_shrink_slab_start {};
+
+struct trace_event_data_offsets_mm_shrink_slab_end {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
+
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
+
+struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
+
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
+typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
+
+typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
+
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
+struct scan_control {
+	long unsigned int nr_to_reclaim;
+	nodemask_t *nodemask;
+	struct mem_cgroup *target_mem_cgroup;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	unsigned int may_deactivate: 2;
+	unsigned int force_deactivate: 1;
+	unsigned int skipped_deactivate: 1;
+	unsigned int may_writepage: 1;
+	unsigned int may_unmap: 1;
+	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
+	unsigned int memcg_low_reclaim: 1;
+	unsigned int memcg_low_skipped: 1;
+	unsigned int hibernation_mode: 1;
+	unsigned int compaction_ready: 1;
+	unsigned int cache_trim_mode: 1;
+	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
+	s8 order;
+	s8 priority;
+	s8 reclaim_idx;
+	gfp_t gfp_mask;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	struct {
+		unsigned int dirty;
+		unsigned int unqueued_dirty;
+		unsigned int congested;
+		unsigned int writeback;
+		unsigned int immediate;
+		unsigned int file_taken;
+		unsigned int taken;
+	} nr;
+	struct reclaim_state reclaim_state;
+};
+
+typedef enum {
+	PAGE_KEEP = 0,
+	PAGE_ACTIVATE = 1,
+	PAGE_SUCCESS = 2,
+	PAGE_CLEAN = 3,
+} pageout_t;
+
+enum page_references {
+	PAGEREF_RECLAIM = 0,
+	PAGEREF_RECLAIM_CLEAN = 1,
+	PAGEREF_KEEP = 2,
+	PAGEREF_ACTIVATE = 3,
+};
+
+enum scan_balance {
+	SCAN_EQUAL = 0,
+	SCAN_FRACT = 1,
+	SCAN_ANON = 2,
+	SCAN_FILE = 3,
+};
+
+struct vmap_area {
+	long unsigned int va_start;
+	long unsigned int va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		long unsigned int subtree_max_size;
+		struct vm_struct *vm;
+	};
+};
+
+typedef unsigned int pgtbl_mod_mask;
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	long unsigned int free;
+	long unsigned int dirty;
+	long unsigned int dirty_min;
+	long unsigned int dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+};
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_NEVER_DAX = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+struct trace_event_raw_hugepage_set_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	long unsigned int clr;
+	long unsigned int set;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hugepage_set_pmd {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+struct inodes_stat_t {
+	long int nr_inodes;
+	long int nr_unused;
+	long int dummy[5];
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+struct inotify_event {
+	__s32 wd;
+	__u32 mask;
+	__u32 cookie;
+	__u32 len;
+	char name[0];
+};
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	long unsigned int caller;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, long unsigned int);
+
+struct ctl_path {
+	const char *procname;
+};
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0];
+};
+
+struct ext4_new_group_input {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 unused;
+};
+
+struct fsuuid {
+	__u32 fsu_len;
+	__u32 fsu_flags;
+	__u8 fsu_uuid[0];
+};
+
+struct move_extent {
+	__u32 reserved;
+	__u32 donor_fd;
+	__u64 orig_start;
+	__u64 donor_start;
+	__u64 len;
+	__u64 moved_len;
+};
+
+struct ext4_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct ext4_fsmap fmh_keys[2];
+};
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
+struct getfsmap_info {
+	struct super_block *gi_sb;
+	struct fsmap_head *gi_data;
+	unsigned int gi_idx;
+	__u32 gi_last_flags;
+};
+
+struct mb_cache_entry {
+	struct list_head e_list;
+	struct hlist_bl_node e_hash_list;
+	atomic_t e_refcnt;
+	u32 e_key;
+	u32 e_referenced: 1;
+	u32 e_reusable: 1;
+	u64 e_value;
+};
+
+struct ext2_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__u32 h_reserved[4];
+};
+
+struct ext2_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_block;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct fat_boot_fsinfo {
+	__le32 signature1;
+	__le32 reserved1[120];
+	__le32 signature2;
+	__le32 free_clusters;
+	__le32 next_cluster;
+	__le32 reserved2[4];
+};
+
+struct fat_bios_param_block {
+	u16 fat_sector_size;
+	u8 fat_sec_per_clus;
+	u16 fat_reserved;
+	u8 fat_fats;
+	u16 fat_dir_entries;
+	u16 fat_sectors;
+	u16 fat_fat_length;
+	u32 fat_total_sect;
+	u8 fat16_state;
+	u32 fat16_vol_id;
+	u32 fat32_length;
+	u32 fat32_root_cluster;
+	u16 fat32_info_sector;
+	u8 fat32_state;
+	u32 fat32_vol_id;
+};
+
+struct fat_floppy_defaults {
+	unsigned int nr_sectors;
+	unsigned int sec_per_clus;
+	unsigned int dir_entries;
+	unsigned int media;
+	unsigned int fat_length;
+};
+
+enum {
+	Opt_check_n = 0,
+	Opt_check_r___2 = 1,
+	Opt_check_s___2 = 2,
+	Opt_uid___4 = 3,
+	Opt_gid___5 = 4,
+	Opt_umask = 5,
+	Opt_dmask = 6,
+	Opt_fmask = 7,
+	Opt_allow_utime = 8,
+	Opt_codepage = 9,
+	Opt_usefree = 10,
+	Opt_nocase = 11,
+	Opt_quiet = 12,
+	Opt_showexec = 13,
+	Opt_debug___2 = 14,
+	Opt_immutable = 15,
+	Opt_dots = 16,
+	Opt_nodots = 17,
+	Opt_charset = 18,
+	Opt_shortname_lower = 19,
+	Opt_shortname_win95 = 20,
+	Opt_shortname_winnt = 21,
+	Opt_shortname_mixed = 22,
+	Opt_utf8_no = 23,
+	Opt_utf8_yes = 24,
+	Opt_uni_xl_no = 25,
+	Opt_uni_xl_yes = 26,
+	Opt_nonumtail_no = 27,
+	Opt_nonumtail_yes = 28,
+	Opt_obsolete = 29,
+	Opt_flush = 30,
+	Opt_tz_utc = 31,
+	Opt_rodir = 32,
+	Opt_err_cont = 33,
+	Opt_err_panic = 34,
+	Opt_err_ro = 35,
+	Opt_discard___2 = 36,
+	Opt_nfs = 37,
+	Opt_time_offset = 38,
+	Opt_nfs_stale_rw = 39,
+	Opt_nfs_nostale_ro = 40,
+	Opt_err___3 = 41,
+	Opt_dos1xfloppy = 42,
+};
+
+struct nfs2_fh {
+	char data[32];
+};
+
+struct nfs3_fh {
+	short unsigned int size;
+	unsigned char data[64];
+};
+
+struct nfs_mount_data {
+	int version;
+	int fd;
+	struct nfs2_fh old_root;
+	int flags;
+	int rsize;
+	int wsize;
+	int timeo;
+	int retrans;
+	int acregmin;
+	int acregmax;
+	int acdirmin;
+	int acdirmax;
+	struct sockaddr_in addr;
+	char hostname[256];
+	int namlen;
+	unsigned int bsize;
+	struct nfs3_fh root;
+	int pseudoflavor;
+	char context[257];
+};
+
+struct nfs_string {
+	unsigned int len;
+	const char *data;
+};
+
+struct nfs4_mount_data {
+	int version;
+	int flags;
+	int rsize;
+	int wsize;
+	int timeo;
+	int retrans;
+	int acregmin;
+	int acregmax;
+	int acdirmin;
+	int acdirmax;
+	struct nfs_string client_addr;
+	struct nfs_string mnt_path;
+	struct nfs_string hostname;
+	unsigned int host_addrlen;
+	struct sockaddr *host_addr;
+	int proto;
+	int auth_flavourlen;
+	int *auth_flavours;
+};
+
+enum nfs_param {
+	Opt_ac = 0,
+	Opt_acdirmax = 1,
+	Opt_acdirmin = 2,
+	Opt_acl___2 = 3,
+	Opt_acregmax = 4,
+	Opt_acregmin = 5,
+	Opt_actimeo = 6,
+	Opt_addr = 7,
+	Opt_bg = 8,
+	Opt_bsize = 9,
+	Opt_clientaddr = 10,
+	Opt_cto = 11,
+	Opt_fg = 12,
+	Opt_fscache = 13,
+	Opt_fscache_flag = 14,
+	Opt_hard = 15,
+	Opt_intr = 16,
+	Opt_local_lock = 17,
+	Opt_lock = 18,
+	Opt_lookupcache = 19,
+	Opt_migration = 20,
+	Opt_minorversion = 21,
+	Opt_mountaddr = 22,
+	Opt_mounthost = 23,
+	Opt_mountport = 24,
+	Opt_mountproto = 25,
+	Opt_mountvers = 26,
+	Opt_namelen = 27,
+	Opt_nconnect = 28,
+	Opt_max_connect = 29,
+	Opt_port = 30,
+	Opt_posix = 31,
+	Opt_proto = 32,
+	Opt_rdirplus = 33,
+	Opt_rdma = 34,
+	Opt_resvport = 35,
+	Opt_retrans = 36,
+	Opt_retry = 37,
+	Opt_rsize = 38,
+	Opt_sec = 39,
+	Opt_sharecache = 40,
+	Opt_sloppy = 41,
+	Opt_soft = 42,
+	Opt_softerr = 43,
+	Opt_softreval = 44,
+	Opt_source = 45,
+	Opt_tcp = 46,
+	Opt_timeo = 47,
+	Opt_trunkdiscovery = 48,
+	Opt_udp = 49,
+	Opt_v = 50,
+	Opt_vers = 51,
+	Opt_wsize = 52,
+	Opt_write = 53,
+};
+
+enum {
+	Opt_local_lock_all = 0,
+	Opt_local_lock_flock = 1,
+	Opt_local_lock_none = 2,
+	Opt_local_lock_posix = 3,
+};
+
+enum {
+	Opt_lookupcache_all = 0,
+	Opt_lookupcache_none = 1,
+	Opt_lookupcache_positive = 2,
+};
+
+enum {
+	Opt_write_lazy = 0,
+	Opt_write_eager = 1,
+	Opt_write_wait = 2,
+};
+
+enum {
+	Opt_vers_2 = 0,
+	Opt_vers_3 = 1,
+	Opt_vers_4 = 2,
+	Opt_vers_4_0 = 3,
+	Opt_vers_4_1 = 4,
+	Opt_vers_4_2 = 5,
+};
+
+enum {
+	Opt_xprt_rdma = 0,
+	Opt_xprt_rdma6 = 1,
+	Opt_xprt_tcp = 2,
+	Opt_xprt_tcp6 = 3,
+	Opt_xprt_udp = 4,
+	Opt_xprt_udp6 = 5,
+	nr__Opt_xprt = 6,
+};
+
+enum {
+	Opt_sec_krb5 = 0,
+	Opt_sec_krb5i = 1,
+	Opt_sec_krb5p = 2,
+	Opt_sec_lkey = 3,
+	Opt_sec_lkeyi = 4,
+	Opt_sec_lkeyp = 5,
+	Opt_sec_none = 6,
+	Opt_sec_spkm = 7,
+	Opt_sec_spkmi = 8,
+	Opt_sec_spkmp = 9,
+	Opt_sec_sys = 10,
+	nr__Opt_sec = 11,
+};
+
+struct compat_nfs_string {
+	compat_uint_t len;
+	compat_uptr_t data;
+};
+
+struct compat_nfs4_mount_data_v1 {
+	compat_int_t version;
+	compat_int_t flags;
+	compat_int_t rsize;
+	compat_int_t wsize;
+	compat_int_t timeo;
+	compat_int_t retrans;
+	compat_int_t acregmin;
+	compat_int_t acregmax;
+	compat_int_t acdirmin;
+	compat_int_t acdirmax;
+	struct compat_nfs_string client_addr;
+	struct compat_nfs_string mnt_path;
+	struct compat_nfs_string hostname;
+	compat_uint_t host_addrlen;
+	compat_uptr_t host_addr;
+	compat_int_t proto;
+	compat_int_t auth_flavourlen;
+	compat_uptr_t auth_flavours;
+};
+
+struct xfs_dir2_sf_entry {
+	__u8 namelen;
+	__u8 offset[2];
+	__u8 name[0];
+};
+
+typedef struct xfs_dir2_sf_entry xfs_dir2_sf_entry_t;
+
+enum layout_break_reason {
+	BREAK_WRITE = 0,
+	BREAK_UNMAP = 1,
+};
+
+struct xfs_globals {
+	int log_recovery_delay;
+	int mount_delay;
+	bool bug_on_assert;
+	bool always_cow;
+};
+
+struct crypto_cipher {
+	struct crypto_tfm base;
+};
+
+struct crypto_hash_walk {
+	char *data;
+	unsigned int offset;
+	unsigned int alignmask;
+	struct page *pg;
+	unsigned int entrylen;
+	unsigned int total;
+	struct scatterlist *sg;
+	unsigned int flags;
+};
+
+struct shash_instance {
+	void (*free)(struct shash_instance *);
+	union {
+		struct {
+			char head[96];
+			struct crypto_instance base;
+		} s;
+		struct shash_alg alg;
+	};
+};
+
+struct crypto_shash_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_report_hash {
+	char type[64];
+	unsigned int blocksize;
+	unsigned int digestsize;
+};
+
+struct bsg_job;
+
+typedef int bsg_job_fn(struct bsg_job *);
+
+struct bsg_buffer {
+	unsigned int payload_len;
+	int sg_cnt;
+	struct scatterlist *sg_list;
+};
+
+struct bsg_job {
+	struct device *dev;
+	struct kref kref;
+	unsigned int timeout;
+	void *request;
+	void *reply;
+	unsigned int request_len;
+	unsigned int reply_len;
+	struct bsg_buffer request_payload;
+	struct bsg_buffer reply_payload;
+	int result;
+	unsigned int reply_payload_rcv_len;
+	struct request *bidi_rq;
+	struct bio *bidi_bio;
+	void *dd_data;
+};
+
+typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
+
+struct bsg_set {
+	struct blk_mq_tag_set tag_set;
+	struct bsg_device *bd;
+	bsg_job_fn *job_fn;
+	bsg_timeout_fn *timeout_fn;
+};
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	long unsigned int nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+typedef uint64_t vli_type;
+
+enum xz_check {
+	XZ_CHECK_NONE = 0,
+	XZ_CHECK_CRC32 = 1,
+	XZ_CHECK_CRC64 = 4,
+	XZ_CHECK_SHA256 = 10,
+};
+
+struct xz_dec_hash {
+	vli_type unpadded;
+	vli_type uncompressed;
+	uint32_t crc32;
+};
+
+struct xz_dec_bcj;
+
+struct xz_dec {
+	enum {
+		SEQ_STREAM_HEADER = 0,
+		SEQ_BLOCK_START = 1,
+		SEQ_BLOCK_HEADER = 2,
+		SEQ_BLOCK_UNCOMPRESS = 3,
+		SEQ_BLOCK_PADDING = 4,
+		SEQ_BLOCK_CHECK = 5,
+		SEQ_INDEX = 6,
+		SEQ_INDEX_PADDING = 7,
+		SEQ_INDEX_CRC32 = 8,
+		SEQ_STREAM_FOOTER = 9,
+	} sequence;
+	uint32_t pos;
+	vli_type vli;
+	size_t in_start;
+	size_t out_start;
+	uint32_t crc32;
+	enum xz_check check_type;
+	enum xz_mode mode;
+	bool allow_buf_error;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		uint32_t size;
+	} block_header;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} block;
+	struct {
+		enum {
+			SEQ_INDEX_COUNT = 0,
+			SEQ_INDEX_UNPADDED = 1,
+			SEQ_INDEX_UNCOMPRESSED = 2,
+		} sequence;
+		vli_type size;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} index;
+	struct {
+		size_t pos;
+		size_t size;
+		uint8_t buf[1024];
+	} temp;
+	struct xz_dec_lzma2 *lzma2;
+	struct xz_dec_bcj *bcj;
+	bool bcj_active;
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+enum radeon_errata {
+	CHIP_ERRATA_R300_CG = 1,
+	CHIP_ERRATA_PLL_DUMMYREADS = 2,
+	CHIP_ERRATA_PLL_DELAY = 4,
+};
+
+enum radeon_montype {
+	MT_NONE = 0,
+	MT_CRT = 1,
+	MT_LCD = 2,
+	MT_DFP = 3,
+	MT_CTV = 4,
+	MT_STV = 5,
+};
+
+enum ddc_type {
+	ddc_none = 0,
+	ddc_monid = 1,
+	ddc_dvi = 2,
+	ddc_vga = 3,
+	ddc_crt2 = 4,
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct probe {
+	struct probe *next;
+	dev_t dev;
+	long unsigned int range;
+	struct module *owner;
+	kobj_probe_t *get;
+	int (*lock)(dev_t, void *);
+	void *data;
+};
+
+struct kobj_map {
+	struct probe *probes[255];
+	struct mutex *lock;
+};
+
+struct auxiliary_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct auxiliary_device {
+	struct device dev;
+	const char *name;
+	u32 id;
+};
+
+struct auxiliary_driver {
+	int (*probe)(struct auxiliary_device *, const struct auxiliary_device_id *);
+	void (*remove)(struct auxiliary_device *);
+	void (*shutdown)(struct auxiliary_device *);
+	int (*suspend)(struct auxiliary_device *, pm_message_t);
+	int (*resume)(struct auxiliary_device *);
+	const char *name;
+	struct device_driver driver;
+	const struct auxiliary_device_id *id_table;
+};
+
+enum fw_opt {
+	FW_OPT_UEVENT = 1,
+	FW_OPT_NOWAIT = 2,
+	FW_OPT_USERHELPER = 4,
+	FW_OPT_NO_WARN = 8,
+	FW_OPT_NOCACHE = 16,
+	FW_OPT_NOFALLBACK_SYSFS = 32,
+	FW_OPT_FALLBACK_PLATFORM = 64,
+	FW_OPT_PARTIAL = 128,
+};
+
+enum fw_status {
+	FW_STATUS_UNKNOWN = 0,
+	FW_STATUS_LOADING = 1,
+	FW_STATUS_DONE = 2,
+	FW_STATUS_ABORTED = 3,
+};
+
+struct fw_state {
+	struct completion completion;
+	enum fw_status status;
+};
+
+struct firmware_cache;
+
+struct fw_priv {
+	struct kref ref;
+	struct list_head list;
+	struct firmware_cache *fwc;
+	struct fw_state fw_st;
+	void *data;
+	size_t size;
+	size_t allocated_size;
+	size_t offset;
+	u32 opt_flags;
+	const char *fw_name;
+};
+
+struct firmware_cache {
+	spinlock_t lock;
+	struct list_head head;
+	int state;
+	spinlock_t name_lock;
+	struct list_head fw_names;
+	struct delayed_work work;
+	struct notifier_block pm_notify;
+};
+
+struct fw_cache_entry {
+	struct list_head list;
+	const char *name;
+};
+
+struct fw_name_devm {
+	long unsigned int magic;
+	const char *name;
+};
+
+struct firmware_work {
+	struct work_struct work;
+	struct module *module;
+	const char *name;
+	struct device *device;
+	void *context;
+	void (*cont)(const struct firmware *, void *);
+	u32 opt_flags;
+};
+
+struct dax_device {
+	struct inode inode;
+	struct cdev cdev;
+	void *private;
+	long unsigned int flags;
+	const struct dax_operations *ops;
+	void *holder_data;
+	const struct dax_holder_operations *holder_ops;
+};
+
+enum dax_device_flags {
+	DAXDEV_ALIVE = 0,
+	DAXDEV_WRITE_CACHE = 1,
+	DAXDEV_SYNC = 2,
+	DAXDEV_NOCACHE = 3,
+	DAXDEV_NOMC = 4,
+};
+
+struct cdrom_ti {
+	__u8 cdti_trk0;
+	__u8 cdti_ind0;
+	__u8 cdti_trk1;
+	__u8 cdti_ind1;
+};
+
+struct cdrom_tochdr {
+	__u8 cdth_trk0;
+	__u8 cdth_trk1;
+};
+
+struct media_event_desc {
+	__u8 media_event_code: 4;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 media_present: 1;
+	__u8 reserved2: 6;
+	__u8 start_slot;
+	__u8 end_slot;
+};
+
+struct scsi_cd {
+	unsigned int capacity;
+	struct scsi_device *device;
+	unsigned int vendor;
+	long unsigned int ms_offset;
+	unsigned int writeable: 1;
+	unsigned int use: 1;
+	unsigned int xa_flag: 1;
+	unsigned int readcd_known: 1;
+	unsigned int readcd_cdda: 1;
+	unsigned int media_present: 1;
+	int tur_mismatch;
+	bool tur_changed: 1;
+	bool get_event_changed: 1;
+	bool ignore_get_event: 1;
+	struct cdrom_device_info cdi;
+	struct mutex lock;
+	struct gendisk *disk;
+};
+
+typedef struct scsi_cd Scsi_CD;
+
+struct ata_timing {
+	short unsigned int mode;
+	short unsigned int setup;
+	short unsigned int act8b;
+	short unsigned int rec8b;
+	short unsigned int cyc8b;
+	short unsigned int active;
+	short unsigned int recover;
+	short unsigned int dmack_hold;
+	short unsigned int cycle;
+	short unsigned int udma;
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+struct pcmcia_device_id {
+	__u16 match_flags;
+	__u16 manf_id;
+	__u16 card_id;
+	__u8 func_id;
+	__u8 function;
+	__u8 device_no;
+	__u32 prod_id_hash[4];
+	const char *prod_id[4];
+	kernel_ulong_t driver_info;
+	char *cisfile;
+};
+
+struct pcmcia_dynids {
+	struct mutex lock;
+	struct list_head list;
+};
+
+struct pcmcia_device;
+
+struct pcmcia_driver {
+	const char *name;
+	int (*probe)(struct pcmcia_device *);
+	void (*remove)(struct pcmcia_device *);
+	int (*suspend)(struct pcmcia_device *);
+	int (*resume)(struct pcmcia_device *);
+	struct module *owner;
+	const struct pcmcia_device_id *id_table;
+	struct device_driver drv;
+	struct pcmcia_dynids dynids;
+};
+
+struct config_t;
+
+struct pcmcia_device {
+	struct pcmcia_socket *socket;
+	char *devname;
+	u8 device_no;
+	u8 func;
+	struct config_t *function_config;
+	struct list_head socket_device_list;
+	unsigned int irq;
+	struct resource *resource[6];
+	resource_size_t card_addr;
+	unsigned int vpp;
+	unsigned int config_flags;
+	unsigned int config_base;
+	unsigned int config_index;
+	unsigned int config_regs;
+	unsigned int io_lines;
+	u16 suspended: 1;
+	u16 _irq: 1;
+	u16 _io: 1;
+	u16 _win: 4;
+	u16 _locked: 1;
+	u16 allow_func_id_match: 1;
+	u16 has_manf_id: 1;
+	u16 has_card_id: 1;
+	u16 has_func_id: 1;
+	u16 reserved: 4;
+	u8 func_id;
+	u16 manf_id;
+	u16 card_id;
+	char *prod_id[4];
+	u64 dma_mask;
+	struct device dev;
+	void *priv;
+	unsigned int open;
+};
+
+struct config_t {
+	struct kref ref;
+	unsigned int state;
+	struct resource io[2];
+	struct resource mem[4];
+};
+
+typedef struct config_t config_t;
+
+struct pcmcia_dynid {
+	struct list_head node;
+	struct pcmcia_device_id id;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+typedef u32 usb_port_location_t;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	long unsigned int event_bits[1];
+	long unsigned int change_bits[1];
+	long unsigned int removed_bits[1];
+	long unsigned int wakeup_bits[1];
+	long unsigned int power_bits[1];
+	long unsigned int child_usage_bits[1];
+	long unsigned int warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct trace_event_raw_rtc_time_alarm_class {
+	struct trace_entry ent;
+	time64_t secs;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_freq {
+	struct trace_entry ent;
+	int freq;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_state {
+	struct trace_entry ent;
+	int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_alarm_irq_enable {
+	struct trace_entry ent;
+	unsigned int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_offset_class {
+	struct trace_entry ent;
+	long int offset;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_timer_class {
+	struct trace_entry ent;
+	struct rtc_timer *timer;
+	ktime_t expires;
+	ktime_t period;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rtc_time_alarm_class {};
+
+struct trace_event_data_offsets_rtc_irq_set_freq {};
+
+struct trace_event_data_offsets_rtc_irq_set_state {};
+
+struct trace_event_data_offsets_rtc_alarm_irq_enable {};
+
+struct trace_event_data_offsets_rtc_offset_class {};
+
+struct trace_event_data_offsets_rtc_timer_class {};
+
+typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
+
+typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
+
+typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
+
+enum {
+	none = 0,
+	day = 1,
+	month = 2,
+	year = 3,
+};
+
+struct dm_ioctl {
+	__u32 version[3];
+	__u32 data_size;
+	__u32 data_start;
+	__u32 target_count;
+	__s32 open_count;
+	__u32 flags;
+	__u32 event_nr;
+	__u32 padding;
+	__u64 dev;
+	char name[128];
+	char uuid[129];
+	char data[7];
+};
+
+struct dm_target_spec {
+	__u64 sector_start;
+	__u64 length;
+	__s32 status;
+	__u32 next;
+	char target_type[16];
+};
+
+struct dm_target_deps {
+	__u32 count;
+	__u32 padding;
+	__u64 dev[0];
+};
+
+struct dm_name_list {
+	__u64 dev;
+	__u32 next;
+	char name[0];
+};
+
+struct dm_target_versions {
+	__u32 next;
+	__u32 version[3];
+	char name[0];
+};
+
+struct dm_target_msg {
+	__u64 sector;
+	char message[0];
+};
+
+enum {
+	DM_VERSION_CMD = 0,
+	DM_REMOVE_ALL_CMD = 1,
+	DM_LIST_DEVICES_CMD = 2,
+	DM_DEV_CREATE_CMD = 3,
+	DM_DEV_REMOVE_CMD = 4,
+	DM_DEV_RENAME_CMD = 5,
+	DM_DEV_SUSPEND_CMD = 6,
+	DM_DEV_STATUS_CMD = 7,
+	DM_DEV_WAIT_CMD = 8,
+	DM_TABLE_LOAD_CMD = 9,
+	DM_TABLE_CLEAR_CMD = 10,
+	DM_TABLE_DEPS_CMD = 11,
+	DM_TABLE_STATUS_CMD = 12,
+	DM_LIST_VERSIONS_CMD = 13,
+	DM_TARGET_MSG_CMD = 14,
+	DM_DEV_SET_GEOMETRY_CMD = 15,
+	DM_DEV_ARM_POLL_CMD = 16,
+	DM_GET_TARGET_VERSION_CMD = 17,
+};
+
+struct dm_dev_internal {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev *dm_dev;
+};
+
+struct dm_file {
+	volatile unsigned int global_event_nr;
+};
+
+struct hash_cell {
+	struct rb_node name_node;
+	struct rb_node uuid_node;
+	bool name_set;
+	bool uuid_set;
+	char *name;
+	char *uuid;
+	struct mapped_device *md;
+	struct dm_table *new_map;
+};
+
+struct vers_iter {
+	size_t param_size;
+	struct dm_target_versions *vers;
+	struct dm_target_versions *old_vers;
+	char *end;
+	uint32_t flags;
+};
+
+typedef int (*ioctl_fn)(struct file *, struct dm_ioctl *, size_t);
+
+struct edac_pci_counter {
+	atomic_t pe_count;
+	atomic_t npe_count;
+};
+
+struct edac_pci_ctl_info {
+	struct list_head link;
+	int pci_idx;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_pci_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	struct completion complete;
+	char name[32];
+	struct edac_pci_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_pci_gen_data {
+	int edac_idx;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+struct led_pattern;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	int flags;
+	long unsigned int work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	long unsigned int blink_delay_on;
+	long unsigned int blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
 
 enum ib_uverbs_write_cmds {
 	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
@@ -80433,8006 +103534,39 @@
 	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
 };
 
-enum ib_uverbs_access_flags {
-	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
-	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
-	IB_UVERBS_ACCESS_REMOTE_READ = 4,
-	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
-	IB_UVERBS_ACCESS_MW_BIND = 16,
-	IB_UVERBS_ACCESS_ZERO_BASED = 32,
-	IB_UVERBS_ACCESS_ON_DEMAND = 64,
-	IB_UVERBS_ACCESS_HUGETLB = 128,
-	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
-	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
+enum ib_uverbs_device_cap_flags {
+	IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1ULL,
+	IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2ULL,
+	IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4ULL,
+	IB_UVERBS_DEVICE_RAW_MULTI = 8ULL,
+	IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16ULL,
+	IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32ULL,
+	IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64ULL,
+	IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128ULL,
+	IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256ULL,
+	IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024ULL,
+	IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048ULL,
+	IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096ULL,
+	IB_UVERBS_DEVICE_SRQ_RESIZE = 8192ULL,
+	IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW = 131072ULL,
+	IB_UVERBS_DEVICE_UD_IP_CSUM = 262144ULL,
+	IB_UVERBS_DEVICE_XRC = 1048576ULL,
+	IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608ULL,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216ULL,
+	IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432ULL,
+	IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864ULL,
+	IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912ULL,
+	IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 17179869184ULL,
+	IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 68719476736ULL,
 };
 
-enum ib_uverbs_srq_type {
-	IB_UVERBS_SRQT_BASIC = 0,
-	IB_UVERBS_SRQT_XRC = 1,
-	IB_UVERBS_SRQT_TM = 2,
-};
-
-enum ib_uverbs_wq_type {
-	IB_UVERBS_WQT_RQ = 0,
-};
-
-enum ib_uverbs_wq_flags {
-	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
-	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
-	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
-	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
-};
-
-enum ib_uverbs_qp_type {
-	IB_UVERBS_QPT_RC = 2,
-	IB_UVERBS_QPT_UC = 3,
-	IB_UVERBS_QPT_UD = 4,
-	IB_UVERBS_QPT_RAW_PACKET = 8,
-	IB_UVERBS_QPT_XRC_INI = 9,
-	IB_UVERBS_QPT_XRC_TGT = 10,
-	IB_UVERBS_QPT_DRIVER = 255,
-};
-
-enum ib_uverbs_qp_create_flags {
-	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
-	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
-	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
-	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
-	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
-};
-
-enum ib_uverbs_gid_type {
-	IB_UVERBS_GID_TYPE_IB = 0,
-	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
-	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
-};
-
-enum ib_poll_context {
-	IB_POLL_SOFTIRQ = 0,
-	IB_POLL_WORKQUEUE = 1,
-	IB_POLL_UNBOUND_WORKQUEUE = 2,
-	IB_POLL_LAST_POOL_TYPE = 2,
-	IB_POLL_DIRECT = 3,
-};
-
-struct lsm_network_audit {
-	int netif;
-	struct sock *sk;
-	u16 family;
-	__be16 dport;
-	__be16 sport;
-	union {
-		struct {
-			__be32 daddr;
-			__be32 saddr;
-		} v4;
-		struct {
-			struct in6_addr daddr;
-			struct in6_addr saddr;
-		} v6;
-	} fam;
-};
-
-struct lsm_ioctlop_audit {
-	struct path path;
-	u16 cmd;
-};
-
-struct lsm_ibpkey_audit {
-	u64 subnet_prefix;
-	u16 pkey;
-};
-
-struct lsm_ibendport_audit {
-	char dev_name[64];
-	u8 port;
-};
-
-struct selinux_state;
-
-struct selinux_audit_data {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	u32 requested;
-	u32 audited;
-	u32 denied;
-	int result;
-	struct selinux_state *state;
-};
-
-struct smack_audit_data;
-
-struct apparmor_audit_data;
-
-struct common_audit_data {
-	char type;
-	union {
-		struct path path;
-		struct dentry *dentry;
-		struct inode *inode;
-		struct lsm_network_audit *net;
-		int cap;
-		int ipc_id;
-		struct task_struct *tsk;
-		struct {
-			key_serial_t key;
-			char *key_desc;
-		} key_struct;
-		char *kmod_name;
-		struct lsm_ioctlop_audit *op;
-		struct file *file;
-		struct lsm_ibpkey_audit *ibpkey;
-		struct lsm_ibendport_audit *ibendport;
-		int reason;
-	} u;
-	union {
-		struct smack_audit_data *smack_audit_data;
-		struct selinux_audit_data *selinux_audit_data;
-		struct apparmor_audit_data *apparmor_audit_data;
-	};
-};
-
-enum {
-	POLICYDB_CAPABILITY_NETPEER = 0,
-	POLICYDB_CAPABILITY_OPENPERM = 1,
-	POLICYDB_CAPABILITY_EXTSOCKCLASS = 2,
-	POLICYDB_CAPABILITY_ALWAYSNETWORK = 3,
-	POLICYDB_CAPABILITY_CGROUPSECLABEL = 4,
-	POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,
-	POLICYDB_CAPABILITY_GENFS_SECLABEL_SYMLINKS = 6,
-	__POLICYDB_CAPABILITY_MAX = 7,
-};
-
-struct selinux_avc;
-
-struct selinux_policy;
-
-struct selinux_state {
-	bool disabled;
-	bool enforcing;
-	bool checkreqprot;
-	bool initialized;
-	bool policycap[7];
-	struct page *status_page;
-	struct mutex status_lock;
-	struct selinux_avc *avc;
-	struct selinux_policy *policy;
-	struct mutex policy_mutex;
-};
-
-struct avc_cache {
-	struct hlist_head slots[512];
-	spinlock_t slots_lock[512];
-	atomic_t lru_hint;
-	atomic_t active_nodes;
-	u32 latest_notif;
-};
-
-struct selinux_avc {
-	unsigned int avc_cache_threshold;
-	struct avc_cache avc_cache;
-};
-
-struct av_decision {
-	u32 allowed;
-	u32 auditallow;
-	u32 auditdeny;
-	u32 seqno;
-	u32 flags;
-};
-
-struct extended_perms_data {
-	u32 p[8];
-};
-
-struct extended_perms_decision {
-	u8 used;
-	u8 driver;
-	struct extended_perms_data *allowed;
-	struct extended_perms_data *auditallow;
-	struct extended_perms_data *dontaudit;
-};
-
-struct extended_perms {
-	u16 len;
-	struct extended_perms_data drivers;
-};
-
-struct avc_cache_stats {
-	unsigned int lookups;
-	unsigned int misses;
-	unsigned int allocations;
-	unsigned int reclaims;
-	unsigned int frees;
-};
-
-struct security_class_mapping {
-	const char *name;
-	const char *perms[33];
-};
-
-struct trace_event_raw_selinux_audited {
-	struct trace_entry ent;
-	u32 requested;
-	u32 denied;
-	u32 audited;
-	int result;
-	u32 __data_loc_scontext;
-	u32 __data_loc_tcontext;
-	u32 __data_loc_tclass;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_selinux_audited {
-	u32 scontext;
-	u32 tcontext;
-	u32 tclass;
-};
-
-typedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);
-
-struct avc_xperms_node;
-
-struct avc_entry {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	struct av_decision avd;
-	struct avc_xperms_node *xp_node;
-};
-
-struct avc_xperms_node {
-	struct extended_perms xp;
-	struct list_head xpd_head;
-};
-
-struct avc_node {
-	struct avc_entry ae;
-	struct hlist_node list;
-	struct callback_head rhead;
-};
-
-struct avc_xperms_decision_node {
-	struct extended_perms_decision xpd;
-	struct list_head xpd_list;
-};
-
-struct avc_callback_node {
-	int (*callback)(u32);
-	u32 events;
-	struct avc_callback_node *next;
-};
-
-typedef __u16 __sum16;
-
-enum sctp_endpoint_type {
-	SCTP_EP_TYPE_SOCKET = 0,
-	SCTP_EP_TYPE_ASSOCIATION = 1,
-};
-
-struct sctp_chunk;
-
-struct sctp_inq {
-	struct list_head in_chunk_list;
-	struct sctp_chunk *in_progress;
-	struct work_struct immediate;
-};
-
-struct sctp_bind_addr {
-	__u16 port;
-	struct list_head address_list;
-};
-
-struct sctp_ep_common {
-	struct hlist_node node;
-	int hashent;
-	enum sctp_endpoint_type type;
-	refcount_t refcnt;
-	bool dead;
-	struct sock *sk;
-	struct net *net;
-	struct sctp_inq inqueue;
-	struct sctp_bind_addr bind_addr;
-};
-
-struct crypto_shash___2;
-
-struct sctp_hmac_algo_param;
-
-struct sctp_chunks_param;
-
-struct sctp_endpoint {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	__u8 secret_key[32];
-	__u8 *digest;
-	__u32 sndbuf_policy;
-	__u32 rcvbuf_policy;
-	struct crypto_shash___2 **auth_hmacs;
-	struct sctp_hmac_algo_param *auth_hmacs_list;
-	struct sctp_chunks_param *auth_chunk_list;
-	struct list_head endpoint_shared_keys;
-	__u16 active_key_id;
-	__u8 ecn_enable: 1;
-	__u8 auth_enable: 1;
-	__u8 intl_enable: 1;
-	__u8 prsctp_enable: 1;
-	__u8 asconf_enable: 1;
-	__u8 reconf_enable: 1;
-	__u8 strreset_enable;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct sockaddr_in6 {
-	short unsigned int sin6_family;
-	__be16 sin6_port;
-	__be32 sin6_flowinfo;
-	struct in6_addr sin6_addr;
-	__u32 sin6_scope_id;
-};
-
-struct in_addr {
-	__be32 s_addr;
-};
-
-struct sockaddr_in {
-	__kernel_sa_family_t sin_family;
-	__be16 sin_port;
-	struct in_addr sin_addr;
-	unsigned char __pad[8];
-};
-
-struct nf_hook_state;
-
-typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
-
-struct nf_hook_entry {
-	nf_hookfn *hook;
-	void *priv;
-};
-
-struct nf_hook_entries {
-	u16 num_hook_entries;
-	struct nf_hook_entry hooks[0];
-};
-
-struct nf_hook_state {
-	unsigned int hook;
-	u_int8_t pf;
-	struct net_device *in;
-	struct net_device *out;
-	struct sock *sk;
-	struct net *net;
-	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
-};
-
-struct nf_hook_ops {
-	nf_hookfn *hook;
-	struct net_device *dev;
-	void *priv;
-	u_int8_t pf;
-	unsigned int hooknum;
-	int priority;
-};
-
-enum nf_ip_hook_priorities {
-	NF_IP_PRI_FIRST = 2147483648,
-	NF_IP_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP_PRI_RAW = 4294966996,
-	NF_IP_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP_PRI_CONNTRACK = 4294967096,
-	NF_IP_PRI_MANGLE = 4294967146,
-	NF_IP_PRI_NAT_DST = 4294967196,
-	NF_IP_PRI_FILTER = 0,
-	NF_IP_PRI_SECURITY = 50,
-	NF_IP_PRI_NAT_SRC = 100,
-	NF_IP_PRI_SELINUX_LAST = 225,
-	NF_IP_PRI_CONNTRACK_HELPER = 300,
-	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
-	NF_IP_PRI_LAST = 2147483647,
-};
-
-enum nf_ip6_hook_priorities {
-	NF_IP6_PRI_FIRST = 2147483648,
-	NF_IP6_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP6_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP6_PRI_RAW = 4294966996,
-	NF_IP6_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP6_PRI_CONNTRACK = 4294967096,
-	NF_IP6_PRI_MANGLE = 4294967146,
-	NF_IP6_PRI_NAT_DST = 4294967196,
-	NF_IP6_PRI_FILTER = 0,
-	NF_IP6_PRI_SECURITY = 50,
-	NF_IP6_PRI_NAT_SRC = 100,
-	NF_IP6_PRI_SELINUX_LAST = 225,
-	NF_IP6_PRI_CONNTRACK_HELPER = 300,
-	NF_IP6_PRI_LAST = 2147483647,
-};
-
-struct socket_alloc {
-	struct socket socket;
-	struct inode vfs_inode;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ip_options {
-	__be32 faddr;
-	__be32 nexthop;
-	unsigned char optlen;
-	unsigned char srr;
-	unsigned char rr;
-	unsigned char ts;
-	unsigned char is_strictroute: 1;
-	unsigned char srr_is_hit: 1;
-	unsigned char is_changed: 1;
-	unsigned char rr_needaddr: 1;
-	unsigned char ts_needtime: 1;
-	unsigned char ts_needaddr: 1;
-	unsigned char router_alert;
-	unsigned char cipso;
-	unsigned char __pad2;
-	unsigned char __data[0];
-};
-
-struct ip_options_rcu {
-	struct callback_head rcu;
-	struct ip_options opt;
-};
-
-struct ipv6_opt_hdr;
-
-struct ipv6_rt_hdr;
-
-struct ipv6_txoptions {
-	refcount_t refcnt;
-	int tot_len;
-	__u16 opt_flen;
-	__u16 opt_nflen;
-	struct ipv6_opt_hdr *hopopt;
-	struct ipv6_opt_hdr *dst0opt;
-	struct ipv6_rt_hdr *srcrt;
-	struct ipv6_opt_hdr *dst1opt;
-	struct callback_head rcu;
-};
-
-struct inet_cork {
-	unsigned int flags;
-	__be32 addr;
-	struct ip_options *opt;
-	unsigned int fragsize;
-	int length;
-	struct dst_entry *dst;
-	u8 tx_flags;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-	u64 transmit_time;
-	u32 mark;
-};
-
-struct inet_cork_full {
-	struct inet_cork base;
-	struct flowi fl;
-};
-
-struct ipv6_pinfo;
-
-struct ip_mc_socklist;
-
-struct inet_sock {
-	struct sock sk;
-	struct ipv6_pinfo *pinet6;
-	__be32 inet_saddr;
-	__s16 uc_ttl;
-	__u16 cmsg_flags;
-	__be16 inet_sport;
-	__u16 inet_id;
-	struct ip_options_rcu *inet_opt;
-	int rx_dst_ifindex;
-	__u8 tos;
-	__u8 min_ttl;
-	__u8 mc_ttl;
-	__u8 pmtudisc;
-	__u8 recverr: 1;
-	__u8 is_icsk: 1;
-	__u8 freebind: 1;
-	__u8 hdrincl: 1;
-	__u8 mc_loop: 1;
-	__u8 transparent: 1;
-	__u8 mc_all: 1;
-	__u8 nodefrag: 1;
-	__u8 bind_address_no_port: 1;
-	__u8 recverr_rfc4884: 1;
-	__u8 defer_connect: 1;
-	__u8 rcv_tos;
-	__u8 convert_csum;
-	int uc_index;
-	int mc_index;
-	__be32 mc_addr;
-	struct ip_mc_socklist *mc_list;
-	struct inet_cork_full cork;
-};
-
-struct in6_pktinfo {
-	struct in6_addr ipi6_addr;
-	int ipi6_ifindex;
-};
-
-struct inet6_cork {
-	struct ipv6_txoptions *opt;
-	u8 hop_limit;
-	u8 tclass;
-};
-
-struct ipv6_mc_socklist;
-
-struct ipv6_ac_socklist;
-
-struct ipv6_fl_socklist;
-
-struct ipv6_pinfo {
-	struct in6_addr saddr;
-	struct in6_pktinfo sticky_pktinfo;
-	const struct in6_addr *daddr_cache;
-	const struct in6_addr *saddr_cache;
-	__be32 flow_label;
-	__u32 frag_size;
-	__u16 __unused_1: 7;
-	__s16 hop_limit: 9;
-	__u16 mc_loop: 1;
-	__u16 __unused_2: 6;
-	__s16 mcast_hops: 9;
-	int ucast_oif;
-	int mcast_oif;
-	union {
-		struct {
-			__u16 srcrt: 1;
-			__u16 osrcrt: 1;
-			__u16 rxinfo: 1;
-			__u16 rxoinfo: 1;
-			__u16 rxhlim: 1;
-			__u16 rxohlim: 1;
-			__u16 hopopts: 1;
-			__u16 ohopopts: 1;
-			__u16 dstopts: 1;
-			__u16 odstopts: 1;
-			__u16 rxflow: 1;
-			__u16 rxtclass: 1;
-			__u16 rxpmtu: 1;
-			__u16 rxorigdstaddr: 1;
-			__u16 recvfragsize: 1;
-		} bits;
-		__u16 all;
-	} rxopt;
-	__u16 recverr: 1;
-	__u16 sndflow: 1;
-	__u16 repflow: 1;
-	__u16 pmtudisc: 3;
-	__u16 padding: 1;
-	__u16 srcprefs: 3;
-	__u16 dontfrag: 1;
-	__u16 autoflowlabel: 1;
-	__u16 autoflowlabel_set: 1;
-	__u16 mc_all: 1;
-	__u16 recverr_rfc4884: 1;
-	__u16 rtalert_isolate: 1;
-	__u8 min_hopcount;
-	__u8 tclass;
-	__be32 rcv_flowinfo;
-	__u32 dst_cookie;
-	__u32 rx_dst_cookie;
-	struct ipv6_mc_socklist *ipv6_mc_list;
-	struct ipv6_ac_socklist *ipv6_ac_list;
-	struct ipv6_fl_socklist *ipv6_fl_list;
-	struct ipv6_txoptions *opt;
-	struct sk_buff *pktoptions;
-	struct sk_buff *rxpmtu;
-	struct inet6_cork cork;
-};
-
-struct tcphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 seq;
-	__be32 ack_seq;
-	__u16 res1: 4;
-	__u16 doff: 4;
-	__u16 fin: 1;
-	__u16 syn: 1;
-	__u16 rst: 1;
-	__u16 psh: 1;
-	__u16 ack: 1;
-	__u16 urg: 1;
-	__u16 ece: 1;
-	__u16 cwr: 1;
-	__be16 window;
-	__sum16 check;
-	__be16 urg_ptr;
-};
-
-struct iphdr {
-	__u8 ihl: 4;
-	__u8 version: 4;
-	__u8 tos;
-	__be16 tot_len;
-	__be16 id;
-	__be16 frag_off;
-	__u8 ttl;
-	__u8 protocol;
-	__sum16 check;
-	__be32 saddr;
-	__be32 daddr;
-};
-
-struct ipv6_rt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-};
-
-struct ipv6_opt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-};
-
-struct ipv6hdr {
-	__u8 priority: 4;
-	__u8 version: 4;
-	__u8 flow_lbl[3];
-	__be16 payload_len;
-	__u8 nexthdr;
-	__u8 hop_limit;
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-};
-
-struct udphdr {
-	__be16 source;
-	__be16 dest;
-	__be16 len;
-	__sum16 check;
-};
-
-struct inet6_skb_parm {
-	int iif;
-	__be16 ra;
-	__u16 dst0;
-	__u16 srcrt;
-	__u16 dst1;
-	__u16 lastopt;
-	__u16 nhoff;
-	__u16 flags;
-	__u16 dsthao;
-	__u16 frag_max_size;
-};
-
-struct ip6_sf_socklist;
-
-struct ipv6_mc_socklist {
-	struct in6_addr addr;
-	int ifindex;
-	unsigned int sfmode;
-	struct ipv6_mc_socklist *next;
-	rwlock_t sflock;
-	struct ip6_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ipv6_ac_socklist {
-	struct in6_addr acl_addr;
-	int acl_ifindex;
-	struct ipv6_ac_socklist *acl_next;
-};
-
-struct ip6_flowlabel;
-
-struct ipv6_fl_socklist {
-	struct ipv6_fl_socklist *next;
-	struct ip6_flowlabel *fl;
-	struct callback_head rcu;
-};
-
-struct ip6_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct in6_addr sl_addr[0];
-};
-
-struct ip6_flowlabel {
-	struct ip6_flowlabel *next;
-	__be32 label;
-	atomic_t users;
-	struct in6_addr dst;
-	struct ipv6_txoptions *opt;
-	long unsigned int linger;
-	struct callback_head rcu;
-	u8 share;
-	union {
-		struct pid *pid;
-		kuid_t uid;
-	} owner;
-	long unsigned int lastuse;
-	long unsigned int expires;
-	struct net *fl_net;
-};
-
-struct inet_skb_parm {
-	int iif;
-	struct ip_options opt;
-	u16 flags;
-	u16 frag_max_size;
-};
-
-struct tty_file_private {
-	struct tty_struct *tty;
-	struct file *file;
-	struct list_head list;
-};
-
-struct netlbl_lsm_cache {
-	refcount_t refcount;
-	void (*free)(const void *);
-	void *data;
-};
-
-struct netlbl_lsm_catmap {
-	u32 startbit;
-	u64 bitmap[4];
-	struct netlbl_lsm_catmap *next;
-};
-
-struct netlbl_lsm_secattr {
-	u32 flags;
-	u32 type;
-	char *domain;
-	struct netlbl_lsm_cache *cache;
-	struct {
-		struct {
-			struct netlbl_lsm_catmap *cat;
-			u32 lvl;
-		} mls;
-		u32 secid;
-	} attr;
-};
-
-struct dccp_hdr {
-	__be16 dccph_sport;
-	__be16 dccph_dport;
-	__u8 dccph_doff;
-	__u8 dccph_cscov: 4;
-	__u8 dccph_ccval: 4;
-	__sum16 dccph_checksum;
-	__u8 dccph_x: 1;
-	__u8 dccph_type: 4;
-	__u8 dccph_reserved: 3;
-	__u8 dccph_seq2;
-	__be16 dccph_seq;
-};
-
-enum dccp_state {
-	DCCP_OPEN = 1,
-	DCCP_REQUESTING = 2,
-	DCCP_LISTEN = 10,
-	DCCP_RESPOND = 3,
-	DCCP_ACTIVE_CLOSEREQ = 4,
-	DCCP_PASSIVE_CLOSE = 8,
-	DCCP_CLOSING = 11,
-	DCCP_TIME_WAIT = 6,
-	DCCP_CLOSED = 7,
-	DCCP_NEW_SYN_RECV = 12,
-	DCCP_PARTOPEN = 13,
-	DCCP_PASSIVE_CLOSEREQ = 14,
-	DCCP_MAX_STATES = 15,
-};
-
-typedef __s32 sctp_assoc_t;
-
-enum sctp_msg_flags {
-	MSG_NOTIFICATION = 32768,
-};
-
-struct sctp_initmsg {
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u16 sinit_max_attempts;
-	__u16 sinit_max_init_timeo;
-};
-
-struct sctp_sndrcvinfo {
-	__u16 sinfo_stream;
-	__u16 sinfo_ssn;
-	__u16 sinfo_flags;
-	__u32 sinfo_ppid;
-	__u32 sinfo_context;
-	__u32 sinfo_timetolive;
-	__u32 sinfo_tsn;
-	__u32 sinfo_cumtsn;
-	sctp_assoc_t sinfo_assoc_id;
-};
-
-struct sctp_rtoinfo {
-	sctp_assoc_t srto_assoc_id;
-	__u32 srto_initial;
-	__u32 srto_max;
-	__u32 srto_min;
-};
-
-struct sctp_assocparams {
-	sctp_assoc_t sasoc_assoc_id;
-	__u16 sasoc_asocmaxrxt;
-	__u16 sasoc_number_peer_destinations;
-	__u32 sasoc_peer_rwnd;
-	__u32 sasoc_local_rwnd;
-	__u32 sasoc_cookie_life;
-};
-
-struct sctp_paddrparams {
-	sctp_assoc_t spp_assoc_id;
-	struct __kernel_sockaddr_storage spp_address;
-	__u32 spp_hbinterval;
-	__u16 spp_pathmaxrxt;
-	__u32 spp_pathmtu;
-	__u32 spp_sackdelay;
-	__u32 spp_flags;
-	__u32 spp_ipv6_flowlabel;
-	__u8 spp_dscp;
-	char: 8;
-} __attribute__((packed));
-
-struct sctphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 vtag;
-	__le32 checksum;
-};
-
-struct sctp_chunkhdr {
-	__u8 type;
-	__u8 flags;
-	__be16 length;
-};
-
-enum sctp_cid {
-	SCTP_CID_DATA = 0,
-	SCTP_CID_INIT = 1,
-	SCTP_CID_INIT_ACK = 2,
-	SCTP_CID_SACK = 3,
-	SCTP_CID_HEARTBEAT = 4,
-	SCTP_CID_HEARTBEAT_ACK = 5,
-	SCTP_CID_ABORT = 6,
-	SCTP_CID_SHUTDOWN = 7,
-	SCTP_CID_SHUTDOWN_ACK = 8,
-	SCTP_CID_ERROR = 9,
-	SCTP_CID_COOKIE_ECHO = 10,
-	SCTP_CID_COOKIE_ACK = 11,
-	SCTP_CID_ECN_ECNE = 12,
-	SCTP_CID_ECN_CWR = 13,
-	SCTP_CID_SHUTDOWN_COMPLETE = 14,
-	SCTP_CID_AUTH = 15,
-	SCTP_CID_I_DATA = 64,
-	SCTP_CID_FWD_TSN = 192,
-	SCTP_CID_ASCONF = 193,
-	SCTP_CID_I_FWD_TSN = 194,
-	SCTP_CID_ASCONF_ACK = 128,
-	SCTP_CID_RECONF = 130,
-};
-
-struct sctp_paramhdr {
-	__be16 type;
-	__be16 length;
-};
-
-enum sctp_param {
-	SCTP_PARAM_HEARTBEAT_INFO = 256,
-	SCTP_PARAM_IPV4_ADDRESS = 1280,
-	SCTP_PARAM_IPV6_ADDRESS = 1536,
-	SCTP_PARAM_STATE_COOKIE = 1792,
-	SCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,
-	SCTP_PARAM_COOKIE_PRESERVATIVE = 2304,
-	SCTP_PARAM_HOST_NAME_ADDRESS = 2816,
-	SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,
-	SCTP_PARAM_ECN_CAPABLE = 128,
-	SCTP_PARAM_RANDOM = 640,
-	SCTP_PARAM_CHUNKS = 896,
-	SCTP_PARAM_HMAC_ALGO = 1152,
-	SCTP_PARAM_SUPPORTED_EXT = 2176,
-	SCTP_PARAM_FWD_TSN_SUPPORT = 192,
-	SCTP_PARAM_ADD_IP = 448,
-	SCTP_PARAM_DEL_IP = 704,
-	SCTP_PARAM_ERR_CAUSE = 960,
-	SCTP_PARAM_SET_PRIMARY = 1216,
-	SCTP_PARAM_SUCCESS_REPORT = 1472,
-	SCTP_PARAM_ADAPTATION_LAYER_IND = 1728,
-	SCTP_PARAM_RESET_OUT_REQUEST = 3328,
-	SCTP_PARAM_RESET_IN_REQUEST = 3584,
-	SCTP_PARAM_RESET_TSN_REQUEST = 3840,
-	SCTP_PARAM_RESET_RESPONSE = 4096,
-	SCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,
-	SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
-};
-
-struct sctp_datahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 ssn;
-	__u32 ppid;
-	__u8 payload[0];
-};
-
-struct sctp_idatahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 reserved;
-	__be32 mid;
-	union {
-		__u32 ppid;
-		__be32 fsn;
-	};
-	__u8 payload[0];
-};
-
-struct sctp_inithdr {
-	__be32 init_tag;
-	__be32 a_rwnd;
-	__be16 num_outbound_streams;
-	__be16 num_inbound_streams;
-	__be32 initial_tsn;
-	__u8 params[0];
-};
-
-struct sctp_init_chunk {
-	struct sctp_chunkhdr chunk_hdr;
-	struct sctp_inithdr init_hdr;
-};
-
-struct sctp_ipv4addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in_addr addr;
-};
-
-struct sctp_ipv6addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in6_addr addr;
-};
-
-struct sctp_cookie_preserve_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 lifespan_increment;
-};
-
-struct sctp_hostname_param {
-	struct sctp_paramhdr param_hdr;
-	uint8_t hostname[0];
-};
-
-struct sctp_supported_addrs_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 types[0];
-};
-
-struct sctp_adaptation_ind_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 adaptation_ind;
-};
-
-struct sctp_supported_ext_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_random_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 random_val[0];
-};
-
-struct sctp_chunks_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_hmac_algo_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 hmac_ids[0];
-};
-
-struct sctp_cookie_param {
-	struct sctp_paramhdr p;
-	__u8 body[0];
-};
-
-struct sctp_gap_ack_block {
-	__be16 start;
-	__be16 end;
-};
-
-union sctp_sack_variable {
-	struct sctp_gap_ack_block gab;
-	__be32 dup;
-};
-
-struct sctp_sackhdr {
-	__be32 cum_tsn_ack;
-	__be32 a_rwnd;
-	__be16 num_gap_ack_blocks;
-	__be16 num_dup_tsns;
-	union sctp_sack_variable variable[0];
-};
-
-struct sctp_heartbeathdr {
-	struct sctp_paramhdr info;
-};
-
-struct sctp_shutdownhdr {
-	__be32 cum_tsn_ack;
-};
-
-struct sctp_errhdr {
-	__be16 cause;
-	__be16 length;
-	__u8 variable[0];
-};
-
-struct sctp_ecnehdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_cwrhdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_fwdtsn_skip {
-	__be16 stream;
-	__be16 ssn;
-};
-
-struct sctp_fwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_fwdtsn_skip skip[0];
-};
-
-struct sctp_ifwdtsn_skip {
-	__be16 stream;
-	__u8 reserved;
-	__u8 flags;
-	__be32 mid;
-};
-
-struct sctp_ifwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_ifwdtsn_skip skip[0];
-};
-
-struct sctp_addip_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 crr_id;
-};
-
-struct sctp_addiphdr {
-	__be32 serial;
-	__u8 params[0];
-};
-
-struct sctp_authhdr {
-	__be16 shkey_id;
-	__be16 hmac_id;
-	__u8 hmac[0];
-};
-
-union sctp_addr {
-	struct sockaddr_in v4;
-	struct sockaddr_in6 v6;
-	struct sockaddr sa;
-};
-
-struct sctp_cookie {
-	__u32 my_vtag;
-	__u32 peer_vtag;
-	__u32 my_ttag;
-	__u32 peer_ttag;
-	ktime_t expiration;
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u32 initial_tsn;
-	union sctp_addr peer_addr;
-	__u16 my_port;
-	__u8 prsctp_capable;
-	__u8 padding;
-	__u32 adaptation_ind;
-	__u8 auth_random[36];
-	__u8 auth_hmacs[10];
-	__u8 auth_chunks[20];
-	__u32 raw_addr_list_len;
-	struct sctp_init_chunk peer_init[0];
-};
-
-struct sctp_tsnmap {
-	long unsigned int *tsn_map;
-	__u32 base_tsn;
-	__u32 cumulative_tsn_ack_point;
-	__u32 max_tsn_seen;
-	__u16 len;
-	__u16 pending_data;
-	__u16 num_dup_tsns;
-	__be32 dup_tsns[16];
-};
-
-struct sctp_inithdr_host {
-	__u32 init_tag;
-	__u32 a_rwnd;
-	__u16 num_outbound_streams;
-	__u16 num_inbound_streams;
-	__u32 initial_tsn;
-};
-
-enum sctp_state {
-	SCTP_STATE_CLOSED = 0,
-	SCTP_STATE_COOKIE_WAIT = 1,
-	SCTP_STATE_COOKIE_ECHOED = 2,
-	SCTP_STATE_ESTABLISHED = 3,
-	SCTP_STATE_SHUTDOWN_PENDING = 4,
-	SCTP_STATE_SHUTDOWN_SENT = 5,
-	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
-	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
-};
-
-struct sctp_stream_out_ext;
-
-struct sctp_stream_out {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	struct sctp_stream_out_ext *ext;
-	__u8 state;
-};
-
-struct sctp_stream_in {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	__u32 fsn;
-	__u32 fsn_uo;
-	char pd_mode;
-	char pd_mode_uo;
-};
-
-struct sctp_stream_interleave;
-
-struct sctp_stream {
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_out type[0];
-	} out;
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_in type[0];
-	} in;
-	__u16 outcnt;
-	__u16 incnt;
-	struct sctp_stream_out *out_curr;
-	union {
-		struct {
-			struct list_head prio_list;
-		};
-		struct {
-			struct list_head rr_list;
-			struct sctp_stream_out_ext *rr_next;
-		};
-	};
-	struct sctp_stream_interleave *si;
-};
-
-struct sctp_sched_ops;
-
-struct sctp_association;
-
-struct sctp_outq {
-	struct sctp_association *asoc;
-	struct list_head out_chunk_list;
-	struct sctp_sched_ops *sched;
-	unsigned int out_qlen;
-	unsigned int error;
-	struct list_head control_chunk_list;
-	struct list_head sacked;
-	struct list_head retransmit;
-	struct list_head abandoned;
-	__u32 outstanding_bytes;
-	char fast_rtx;
-	char cork;
-};
-
-struct sctp_ulpq {
-	char pd_mode;
-	struct sctp_association *asoc;
-	struct sk_buff_head reasm;
-	struct sk_buff_head reasm_uo;
-	struct sk_buff_head lobby;
-};
-
-struct sctp_priv_assoc_stats {
-	struct __kernel_sockaddr_storage obs_rto_ipaddr;
-	__u64 max_obs_rto;
-	__u64 isacks;
-	__u64 osacks;
-	__u64 opackets;
-	__u64 ipackets;
-	__u64 rtxchunks;
-	__u64 outofseqtsns;
-	__u64 idupchunks;
-	__u64 gapcnt;
-	__u64 ouodchunks;
-	__u64 iuodchunks;
-	__u64 oodchunks;
-	__u64 iodchunks;
-	__u64 octrlchunks;
-	__u64 ictrlchunks;
-};
-
-struct sctp_transport;
-
-struct sctp_auth_bytes;
-
-struct sctp_shared_key;
-
-struct sctp_association {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	sctp_assoc_t assoc_id;
-	struct sctp_endpoint *ep;
-	struct sctp_cookie c;
-	struct {
-		struct list_head transport_addr_list;
-		__u32 rwnd;
-		__u16 transport_count;
-		__u16 port;
-		struct sctp_transport *primary_path;
-		union sctp_addr primary_addr;
-		struct sctp_transport *active_path;
-		struct sctp_transport *retran_path;
-		struct sctp_transport *last_sent_to;
-		struct sctp_transport *last_data_from;
-		struct sctp_tsnmap tsn_map;
-		__be16 addip_disabled_mask;
-		__u16 ecn_capable: 1;
-		__u16 ipv4_address: 1;
-		__u16 ipv6_address: 1;
-		__u16 hostname_address: 1;
-		__u16 asconf_capable: 1;
-		__u16 prsctp_capable: 1;
-		__u16 reconf_capable: 1;
-		__u16 intl_capable: 1;
-		__u16 auth_capable: 1;
-		__u16 sack_needed: 1;
-		__u16 sack_generation: 1;
-		__u16 zero_window_announced: 1;
-		__u32 sack_cnt;
-		__u32 adaptation_ind;
-		struct sctp_inithdr_host i;
-		void *cookie;
-		int cookie_len;
-		__u32 addip_serial;
-		struct sctp_random_param *peer_random;
-		struct sctp_chunks_param *peer_chunks;
-		struct sctp_hmac_algo_param *peer_hmacs;
-	} peer;
-	enum sctp_state state;
-	int overall_error_count;
-	ktime_t cookie_life;
-	long unsigned int rto_initial;
-	long unsigned int rto_max;
-	long unsigned int rto_min;
-	int max_burst;
-	int max_retrans;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u16 max_init_attempts;
-	__u16 init_retries;
-	long unsigned int max_init_timeo;
-	long unsigned int hbinterval;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u8 pmtu_pending;
-	__u32 pathmtu;
-	__u32 param_flags;
-	__u32 sackfreq;
-	long unsigned int sackdelay;
-	long unsigned int timeouts[11];
-	struct timer_list timers[11];
-	struct sctp_transport *shutdown_last_sent_to;
-	struct sctp_transport *init_last_sent_to;
-	int shutdown_retries;
-	__u32 next_tsn;
-	__u32 ctsn_ack_point;
-	__u32 adv_peer_ack_point;
-	__u32 highest_sacked;
-	__u32 fast_recovery_exit;
-	__u8 fast_recovery;
-	__u16 unack_data;
-	__u32 rtx_data_chunks;
-	__u32 rwnd;
-	__u32 a_rwnd;
-	__u32 rwnd_over;
-	__u32 rwnd_press;
-	int sndbuf_used;
-	atomic_t rmem_alloc;
-	wait_queue_head_t wait;
-	__u32 frag_point;
-	__u32 user_frag;
-	int init_err_counter;
-	int init_cycle;
-	__u16 default_stream;
-	__u16 default_flags;
-	__u32 default_ppid;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	struct sctp_stream stream;
-	struct sctp_outq outqueue;
-	struct sctp_ulpq ulpq;
-	__u32 last_ecne_tsn;
-	__u32 last_cwr_tsn;
-	int numduptsns;
-	struct sctp_chunk *addip_last_asconf;
-	struct list_head asconf_ack_list;
-	struct list_head addip_chunk_list;
-	__u32 addip_serial;
-	int src_out_of_asoc_ok;
-	union sctp_addr *asconf_addr_del_pending;
-	struct sctp_transport *new_transport;
-	struct list_head endpoint_shared_keys;
-	struct sctp_auth_bytes *asoc_shared_key;
-	struct sctp_shared_key *shkey;
-	__u16 default_hmac_id;
-	__u16 active_key_id;
-	__u8 need_ecne: 1;
-	__u8 temp: 1;
-	__u8 pf_expose: 2;
-	__u8 force_delay: 1;
-	__u8 strreset_enable;
-	__u8 strreset_outstanding;
-	__u32 strreset_outseq;
-	__u32 strreset_inseq;
-	__u32 strreset_result[2];
-	struct sctp_chunk *strreset_chunk;
-	struct sctp_priv_assoc_stats stats;
-	int sent_cnt_removable;
-	__u16 subscribe;
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct callback_head rcu;
-};
-
-struct sctp_auth_bytes {
-	refcount_t refcnt;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct sctp_shared_key {
-	struct list_head key_list;
-	struct sctp_auth_bytes *key;
-	refcount_t refcnt;
-	__u16 key_id;
-	__u8 deactivated;
-};
-
-enum {
-	SCTP_MAX_STREAM = 65535,
-};
-
-enum sctp_event_timeout {
-	SCTP_EVENT_TIMEOUT_NONE = 0,
-	SCTP_EVENT_TIMEOUT_T1_COOKIE = 1,
-	SCTP_EVENT_TIMEOUT_T1_INIT = 2,
-	SCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,
-	SCTP_EVENT_TIMEOUT_T3_RTX = 4,
-	SCTP_EVENT_TIMEOUT_T4_RTO = 5,
-	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
-	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
-	SCTP_EVENT_TIMEOUT_RECONF = 8,
-	SCTP_EVENT_TIMEOUT_SACK = 9,
-	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,
-};
-
-enum {
-	SCTP_MAX_DUP_TSNS = 16,
-};
-
-enum sctp_scope {
-	SCTP_SCOPE_GLOBAL = 0,
-	SCTP_SCOPE_PRIVATE = 1,
-	SCTP_SCOPE_LINK = 2,
-	SCTP_SCOPE_LOOPBACK = 3,
-	SCTP_SCOPE_UNUSABLE = 4,
-};
-
-enum {
-	SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
-	SCTP_AUTH_HMAC_ID_SHA1 = 1,
-	SCTP_AUTH_HMAC_ID_RESERVED_2 = 2,
-	SCTP_AUTH_HMAC_ID_SHA256 = 3,
-	__SCTP_AUTH_HMAC_MAX = 4,
-};
-
-struct sctp_ulpevent {
-	struct sctp_association *asoc;
-	struct sctp_chunk *chunk;
-	unsigned int rmem_len;
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	union {
-		__u32 ppid;
-		__u32 fsn;
-	};
-	__u32 tsn;
-	__u32 cumtsn;
-	__u16 stream;
-	__u16 flags;
-	__u16 msg_flags;
-} __attribute__((packed));
-
-union sctp_addr_param;
-
-union sctp_params {
-	void *v;
-	struct sctp_paramhdr *p;
-	struct sctp_cookie_preserve_param *life;
-	struct sctp_hostname_param *dns;
-	struct sctp_cookie_param *cookie;
-	struct sctp_supported_addrs_param *sat;
-	struct sctp_ipv4addr_param *v4;
-	struct sctp_ipv6addr_param *v6;
-	union sctp_addr_param *addr;
-	struct sctp_adaptation_ind_param *aind;
-	struct sctp_supported_ext_param *ext;
-	struct sctp_random_param *random;
-	struct sctp_chunks_param *chunks;
-	struct sctp_hmac_algo_param *hmac_algo;
-	struct sctp_addip_param *addip;
-};
-
-struct sctp_sender_hb_info;
-
-struct sctp_signed_cookie;
-
-struct sctp_datamsg;
-
-struct sctp_chunk {
-	struct list_head list;
-	refcount_t refcnt;
-	int sent_count;
-	union {
-		struct list_head transmitted_list;
-		struct list_head stream_list;
-	};
-	struct list_head frag_list;
-	struct sk_buff *skb;
-	union {
-		struct sk_buff *head_skb;
-		struct sctp_shared_key *shkey;
-	};
-	union sctp_params param_hdr;
-	union {
-		__u8 *v;
-		struct sctp_datahdr *data_hdr;
-		struct sctp_inithdr *init_hdr;
-		struct sctp_sackhdr *sack_hdr;
-		struct sctp_heartbeathdr *hb_hdr;
-		struct sctp_sender_hb_info *hbs_hdr;
-		struct sctp_shutdownhdr *shutdown_hdr;
-		struct sctp_signed_cookie *cookie_hdr;
-		struct sctp_ecnehdr *ecne_hdr;
-		struct sctp_cwrhdr *ecn_cwr_hdr;
-		struct sctp_errhdr *err_hdr;
-		struct sctp_addiphdr *addip_hdr;
-		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
-		struct sctp_authhdr *auth_hdr;
-		struct sctp_idatahdr *idata_hdr;
-		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
-	} subh;
-	__u8 *chunk_end;
-	struct sctp_chunkhdr *chunk_hdr;
-	struct sctphdr *sctp_hdr;
-	struct sctp_sndrcvinfo sinfo;
-	struct sctp_association *asoc;
-	struct sctp_ep_common *rcvr;
-	long unsigned int sent_at;
-	union sctp_addr source;
-	union sctp_addr dest;
-	struct sctp_datamsg *msg;
-	struct sctp_transport *transport;
-	struct sk_buff *auth_chunk;
-	__u16 rtt_in_progress: 1;
-	__u16 has_tsn: 1;
-	__u16 has_ssn: 1;
-	__u16 singleton: 1;
-	__u16 end_of_packet: 1;
-	__u16 ecn_ce_done: 1;
-	__u16 pdiscard: 1;
-	__u16 tsn_gap_acked: 1;
-	__u16 data_accepted: 1;
-	__u16 auth: 1;
-	__u16 has_asconf: 1;
-	__u16 tsn_missing_report: 2;
-	__u16 fast_retransmit: 2;
-};
-
-struct sctp_stream_interleave {
-	__u16 data_chunk_len;
-	__u16 ftsn_chunk_len;
-	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
-	void (*assign_number)(struct sctp_chunk *);
-	bool (*validate_data)(struct sctp_chunk *);
-	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
-	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	void (*start_pd)(struct sctp_ulpq *, gfp_t);
-	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
-	void (*generate_ftsn)(struct sctp_outq *, __u32);
-	bool (*validate_ftsn)(struct sctp_chunk *);
-	void (*report_ftsn)(struct sctp_ulpq *, __u32);
-	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
-};
-
-struct sctp_bind_bucket {
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct hlist_node node;
-	struct hlist_head owner;
-	struct net *net;
-};
-
-enum sctp_socket_type {
-	SCTP_SOCKET_UDP = 0,
-	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
-	SCTP_SOCKET_TCP = 2,
-};
-
-struct sctp_pf;
-
-struct sctp_sock {
-	struct inet_sock inet;
-	enum sctp_socket_type type;
-	int: 32;
-	struct sctp_pf *pf;
-	struct crypto_shash___2 *hmac;
-	char *sctp_hmac_alg;
-	struct sctp_endpoint *ep;
-	struct sctp_bind_bucket *bind_hash;
-	__u16 default_stream;
-	short: 16;
-	__u32 default_ppid;
-	__u16 default_flags;
-	short: 16;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	int max_burst;
-	__u32 hbinterval;
-	__u16 pathmaxrxt;
-	short: 16;
-	__u32 flowlabel;
-	__u8 dscp;
-	char: 8;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	short: 16;
-	__u32 pathmtu;
-	__u32 sackdelay;
-	__u32 sackfreq;
-	__u32 param_flags;
-	__u32 default_ss;
-	struct sctp_rtoinfo rtoinfo;
-	struct sctp_paddrparams paddrparam;
-	struct sctp_assocparams assocparams;
-	__u16 subscribe;
-	struct sctp_initmsg initmsg;
-	short: 16;
-	int user_frag;
-	__u32 autoclose;
-	__u32 adaptation_ind;
-	__u32 pd_point;
-	__u16 nodelay: 1;
-	__u16 pf_expose: 2;
-	__u16 reuse: 1;
-	__u16 disable_fragments: 1;
-	__u16 v4mapped: 1;
-	__u16 frag_interleave: 1;
-	__u16 recvrcvinfo: 1;
-	__u16 recvnxtinfo: 1;
-	__u16 data_ready_signalled: 1;
-	int: 22;
-	atomic_t pd_mode;
-	struct sk_buff_head pd_lobby;
-	struct list_head auto_asconf_list;
-	int do_auto_asconf;
-	int: 32;
-} __attribute__((packed));
-
-struct sctp_af;
-
-struct sctp_pf {
-	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
-	void (*skb_msgname)(struct sk_buff *, char *, int *);
-	int (*af_supported)(sa_family_t, struct sctp_sock *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
-	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
-	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
-	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
-	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
-	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
-	void (*copy_ip_options)(struct sock *, struct sock *);
-	struct sctp_af *af;
-};
-
-struct sctp_signed_cookie {
-	__u8 signature[32];
-	__u32 __pad;
-	struct sctp_cookie c;
-} __attribute__((packed));
-
-union sctp_addr_param {
-	struct sctp_paramhdr p;
-	struct sctp_ipv4addr_param v4;
-	struct sctp_ipv6addr_param v6;
-};
-
-struct sctp_sender_hb_info {
-	struct sctp_paramhdr param_hdr;
-	union sctp_addr daddr;
-	long unsigned int sent_at;
-	__u64 hb_nonce;
-};
-
-struct sctp_af {
-	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
-	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
-	void (*copy_addrlist)(struct list_head *, struct net_device *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
-	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
-	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
-	void (*from_sk)(union sctp_addr *, struct sock *);
-	void (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
-	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
-	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
-	enum sctp_scope (*scope)(union sctp_addr *);
-	void (*inaddr_any)(union sctp_addr *, __be16);
-	int (*is_any)(const union sctp_addr *);
-	int (*available)(union sctp_addr *, struct sctp_sock *);
-	int (*skb_iif)(const struct sk_buff *);
-	int (*is_ce)(const struct sk_buff *);
-	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
-	void (*ecn_capable)(struct sock *);
-	__u16 net_header_len;
-	int sockaddr_len;
-	int (*ip_options_len)(struct sock *);
-	sa_family_t sa_family;
-	struct list_head list;
-};
-
-struct sctp_packet {
-	__u16 source_port;
-	__u16 destination_port;
-	__u32 vtag;
-	struct list_head chunk_list;
-	size_t overhead;
-	size_t size;
-	size_t max_size;
-	struct sctp_transport *transport;
-	struct sctp_chunk *auth;
-	u8 has_cookie_echo: 1;
-	u8 has_sack: 1;
-	u8 has_auth: 1;
-	u8 has_data: 1;
-	u8 ipfragok: 1;
-};
-
-struct sctp_transport {
-	struct list_head transports;
-	struct rhlist_head node;
-	refcount_t refcnt;
-	__u32 rto_pending: 1;
-	__u32 hb_sent: 1;
-	__u32 pmtu_pending: 1;
-	__u32 dst_pending_confirm: 1;
-	__u32 sack_generation: 1;
-	u32 dst_cookie;
-	struct flowi fl;
-	union sctp_addr ipaddr;
-	struct sctp_af *af_specific;
-	struct sctp_association *asoc;
-	long unsigned int rto;
-	__u32 rtt;
-	__u32 rttvar;
-	__u32 srtt;
-	__u32 cwnd;
-	__u32 ssthresh;
-	__u32 partial_bytes_acked;
-	__u32 flight_size;
-	__u32 burst_limited;
-	struct dst_entry *dst;
-	union sctp_addr saddr;
-	long unsigned int hbinterval;
-	long unsigned int sackdelay;
-	__u32 sackfreq;
-	atomic_t mtu_info;
-	ktime_t last_time_heard;
-	long unsigned int last_time_sent;
-	long unsigned int last_time_ecne_reduced;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u32 pathmtu;
-	__u32 param_flags;
-	int init_sent_count;
-	int state;
-	short unsigned int error_count;
-	struct timer_list T3_rtx_timer;
-	struct timer_list hb_timer;
-	struct timer_list proto_unreach_timer;
-	struct timer_list reconf_timer;
-	struct list_head transmitted;
-	struct sctp_packet packet;
-	struct list_head send_ready;
-	struct {
-		__u32 next_tsn_at_change;
-		char changeover_active;
-		char cycling_changeover;
-		char cacc_saw_newack;
-	} cacc;
-	__u64 hb_nonce;
-	struct callback_head rcu;
-};
-
-struct sctp_datamsg {
-	struct list_head chunks;
-	refcount_t refcnt;
-	long unsigned int expires_at;
-	int send_error;
-	u8 send_failed: 1;
-	u8 can_delay: 1;
-	u8 abandoned: 1;
-};
-
-struct sctp_stream_priorities {
-	struct list_head prio_sched;
-	struct list_head active;
-	struct sctp_stream_out_ext *next;
-	__u16 prio;
-};
-
-struct sctp_stream_out_ext {
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct list_head outq;
-	union {
-		struct {
-			struct list_head prio_list;
-			struct sctp_stream_priorities *prio_head;
-		};
-		struct {
-			struct list_head rr_list;
-		};
-	};
-};
-
-struct task_security_struct {
-	u32 osid;
-	u32 sid;
-	u32 exec_sid;
-	u32 create_sid;
-	u32 keycreate_sid;
-	u32 sockcreate_sid;
-};
-
-enum label_initialized {
-	LABEL_INVALID = 0,
-	LABEL_INITIALIZED = 1,
-	LABEL_PENDING = 2,
-};
-
-struct inode_security_struct {
-	struct inode *inode;
-	struct list_head list;
-	u32 task_sid;
-	u32 sid;
-	u16 sclass;
-	unsigned char initialized;
-	spinlock_t lock;
-};
-
-struct file_security_struct {
-	u32 sid;
-	u32 fown_sid;
-	u32 isid;
-	u32 pseqno;
-};
-
-struct superblock_security_struct {
-	struct super_block *sb;
-	u32 sid;
-	u32 def_sid;
-	u32 mntpoint_sid;
-	short unsigned int behavior;
-	short unsigned int flags;
-	struct mutex lock;
-	struct list_head isec_head;
-	spinlock_t isec_lock;
-};
-
-struct msg_security_struct {
-	u32 sid;
-};
-
-struct ipc_security_struct {
-	u16 sclass;
-	u32 sid;
-};
-
-struct sk_security_struct {
-	enum {
-		NLBL_UNSET = 0,
-		NLBL_REQUIRE = 1,
-		NLBL_LABELED = 2,
-		NLBL_REQSKB = 3,
-		NLBL_CONNLABELED = 4,
-	} nlbl_state;
-	struct netlbl_lsm_secattr *nlbl_secattr;
-	u32 sid;
-	u32 peer_sid;
-	u16 sclass;
-	enum {
-		SCTP_ASSOC_UNSET = 0,
-		SCTP_ASSOC_SET = 1,
-	} sctp_assoc_state;
-};
-
-struct tun_security_struct {
-	u32 sid;
-};
-
-struct key_security_struct {
-	u32 sid;
-};
-
-struct bpf_security_struct {
-	u32 sid;
-};
-
-struct perf_event_security_struct {
-	u32 sid;
-};
-
-struct selinux_mnt_opts {
-	const char *fscontext;
-	const char *context;
-	const char *rootcontext;
-	const char *defcontext;
-};
-
-enum {
-	Opt_error___2 = 4294967295,
-	Opt_context = 0,
-	Opt_defcontext = 1,
-	Opt_fscontext = 2,
-	Opt_rootcontext = 3,
-	Opt_seclabel = 4,
-};
-
-enum sel_inos {
-	SEL_ROOT_INO = 2,
-	SEL_LOAD = 3,
-	SEL_ENFORCE = 4,
-	SEL_CONTEXT = 5,
-	SEL_ACCESS = 6,
-	SEL_CREATE = 7,
-	SEL_RELABEL = 8,
-	SEL_USER = 9,
-	SEL_POLICYVERS = 10,
-	SEL_COMMIT_BOOLS = 11,
-	SEL_MLS = 12,
-	SEL_DISABLE = 13,
-	SEL_MEMBER = 14,
-	SEL_CHECKREQPROT = 15,
-	SEL_COMPAT_NET = 16,
-	SEL_REJECT_UNKNOWN = 17,
-	SEL_DENY_UNKNOWN = 18,
-	SEL_STATUS = 19,
-	SEL_POLICY = 20,
-	SEL_VALIDATE_TRANS = 21,
-	SEL_INO_NEXT = 22,
-};
-
-struct selinux_fs_info {
-	struct dentry *bool_dir;
-	unsigned int bool_num;
-	char **bool_pending_names;
-	unsigned int *bool_pending_values;
-	struct dentry *class_dir;
-	long unsigned int last_class_ino;
-	bool policy_opened;
-	struct dentry *policycap_dir;
-	long unsigned int last_ino;
-	struct selinux_state *state;
-	struct super_block *sb;
-};
-
-struct policy_load_memory {
-	size_t len;
-	void *data;
-};
-
-enum {
-	SELNL_MSG_SETENFORCE = 16,
-	SELNL_MSG_POLICYLOAD = 17,
-	SELNL_MSG_MAX = 18,
-};
-
-enum selinux_nlgroups {
-	SELNLGRP_NONE = 0,
-	SELNLGRP_AVC = 1,
-	__SELNLGRP_MAX = 2,
-};
-
-struct selnl_msg_setenforce {
-	__s32 val;
-};
-
-struct selnl_msg_policyload {
-	__u32 seqno;
-};
-
-enum {
-	XFRM_MSG_BASE = 16,
-	XFRM_MSG_NEWSA = 16,
-	XFRM_MSG_DELSA = 17,
-	XFRM_MSG_GETSA = 18,
-	XFRM_MSG_NEWPOLICY = 19,
-	XFRM_MSG_DELPOLICY = 20,
-	XFRM_MSG_GETPOLICY = 21,
-	XFRM_MSG_ALLOCSPI = 22,
-	XFRM_MSG_ACQUIRE = 23,
-	XFRM_MSG_EXPIRE = 24,
-	XFRM_MSG_UPDPOLICY = 25,
-	XFRM_MSG_UPDSA = 26,
-	XFRM_MSG_POLEXPIRE = 27,
-	XFRM_MSG_FLUSHSA = 28,
-	XFRM_MSG_FLUSHPOLICY = 29,
-	XFRM_MSG_NEWAE = 30,
-	XFRM_MSG_GETAE = 31,
-	XFRM_MSG_REPORT = 32,
-	XFRM_MSG_MIGRATE = 33,
-	XFRM_MSG_NEWSADINFO = 34,
-	XFRM_MSG_GETSADINFO = 35,
-	XFRM_MSG_NEWSPDINFO = 36,
-	XFRM_MSG_GETSPDINFO = 37,
-	XFRM_MSG_MAPPING = 38,
-	__XFRM_MSG_MAX = 39,
-};
-
-enum {
-	RTM_BASE = 16,
-	RTM_NEWLINK = 16,
-	RTM_DELLINK = 17,
-	RTM_GETLINK = 18,
-	RTM_SETLINK = 19,
-	RTM_NEWADDR = 20,
-	RTM_DELADDR = 21,
-	RTM_GETADDR = 22,
-	RTM_NEWROUTE = 24,
-	RTM_DELROUTE = 25,
-	RTM_GETROUTE = 26,
-	RTM_NEWNEIGH = 28,
-	RTM_DELNEIGH = 29,
-	RTM_GETNEIGH = 30,
-	RTM_NEWRULE = 32,
-	RTM_DELRULE = 33,
-	RTM_GETRULE = 34,
-	RTM_NEWQDISC = 36,
-	RTM_DELQDISC = 37,
-	RTM_GETQDISC = 38,
-	RTM_NEWTCLASS = 40,
-	RTM_DELTCLASS = 41,
-	RTM_GETTCLASS = 42,
-	RTM_NEWTFILTER = 44,
-	RTM_DELTFILTER = 45,
-	RTM_GETTFILTER = 46,
-	RTM_NEWACTION = 48,
-	RTM_DELACTION = 49,
-	RTM_GETACTION = 50,
-	RTM_NEWPREFIX = 52,
-	RTM_GETMULTICAST = 58,
-	RTM_GETANYCAST = 62,
-	RTM_NEWNEIGHTBL = 64,
-	RTM_GETNEIGHTBL = 66,
-	RTM_SETNEIGHTBL = 67,
-	RTM_NEWNDUSEROPT = 68,
-	RTM_NEWADDRLABEL = 72,
-	RTM_DELADDRLABEL = 73,
-	RTM_GETADDRLABEL = 74,
-	RTM_GETDCB = 78,
-	RTM_SETDCB = 79,
-	RTM_NEWNETCONF = 80,
-	RTM_DELNETCONF = 81,
-	RTM_GETNETCONF = 82,
-	RTM_NEWMDB = 84,
-	RTM_DELMDB = 85,
-	RTM_GETMDB = 86,
-	RTM_NEWNSID = 88,
-	RTM_DELNSID = 89,
-	RTM_GETNSID = 90,
-	RTM_NEWSTATS = 92,
-	RTM_GETSTATS = 94,
-	RTM_NEWCACHEREPORT = 96,
-	RTM_NEWCHAIN = 100,
-	RTM_DELCHAIN = 101,
-	RTM_GETCHAIN = 102,
-	RTM_NEWNEXTHOP = 104,
-	RTM_DELNEXTHOP = 105,
-	RTM_GETNEXTHOP = 106,
-	RTM_NEWLINKPROP = 108,
-	RTM_DELLINKPROP = 109,
-	RTM_GETLINKPROP = 110,
-	RTM_NEWVLAN = 112,
-	RTM_DELVLAN = 113,
-	RTM_GETVLAN = 114,
-	__RTM_MAX = 115,
-};
-
-struct nlmsg_perm {
-	u16 nlmsg_type;
-	u32 perm;
-};
-
-struct netif_security_struct {
-	struct net *ns;
-	int ifindex;
-	u32 sid;
-};
-
-struct sel_netif {
-	struct list_head list;
-	struct netif_security_struct nsec;
-	struct callback_head callback_head;
-};
-
-struct netnode_security_struct {
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} addr;
-	u32 sid;
-	u16 family;
-};
-
-struct sel_netnode_bkt {
-	unsigned int size;
-	struct list_head list;
-};
-
-struct sel_netnode {
-	struct netnode_security_struct nsec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netport_security_struct {
-	u32 sid;
-	u16 port;
-	u8 protocol;
-};
-
-struct sel_netport_bkt {
-	int size;
-	struct list_head list;
-};
-
-struct sel_netport {
-	struct netport_security_struct psec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct selinux_kernel_status {
-	u32 version;
-	u32 sequence;
-	u32 enforcing;
-	u32 policyload;
-	u32 deny_unknown;
-};
-
-struct ebitmap_node {
-	struct ebitmap_node *next;
-	long unsigned int maps[6];
-	u32 startbit;
-};
-
-struct ebitmap {
-	struct ebitmap_node *node;
-	u32 highbit;
-};
-
-struct policy_file {
-	char *data;
-	size_t len;
-};
-
-struct hashtab_node {
-	void *key;
-	void *datum;
-	struct hashtab_node *next;
-};
-
-struct hashtab {
-	struct hashtab_node **htable;
-	u32 size;
-	u32 nel;
-};
-
-struct hashtab_info {
-	u32 slots_used;
-	u32 max_chain_len;
-};
-
-struct hashtab_key_params {
-	u32 (*hash)(const void *);
-	int (*cmp)(const void *, const void *);
-};
-
-struct symtab {
-	struct hashtab table;
-	u32 nprim;
-};
-
-struct mls_level {
-	u32 sens;
-	struct ebitmap cat;
-};
-
-struct mls_range {
-	struct mls_level level[2];
-};
-
-struct context {
-	u32 user;
-	u32 role;
-	u32 type;
-	u32 len;
-	struct mls_range range;
-	char *str;
-};
-
-struct sidtab_str_cache;
-
-struct sidtab_entry {
-	u32 sid;
-	u32 hash;
-	struct context context;
-	struct sidtab_str_cache *cache;
-	struct hlist_node list;
-};
-
-struct sidtab_str_cache {
-	struct callback_head rcu_member;
-	struct list_head lru_member;
-	struct sidtab_entry *parent;
-	u32 len;
-	char str[0];
-};
-
-struct sidtab_node_inner;
-
-struct sidtab_node_leaf;
-
-union sidtab_entry_inner {
-	struct sidtab_node_inner *ptr_inner;
-	struct sidtab_node_leaf *ptr_leaf;
-};
-
-struct sidtab_node_inner {
-	union sidtab_entry_inner entries[8192];
-};
-
-struct sidtab_node_leaf {
-	struct sidtab_entry entries[630];
-};
-
-struct sidtab_isid_entry {
-	int set;
-	struct sidtab_entry entry;
-};
-
-struct sidtab;
-
-struct sidtab_convert_params {
-	int (*func)(struct context *, struct context *, void *);
-	void *args;
-	struct sidtab *target;
-};
-
-struct sidtab {
-	union sidtab_entry_inner roots[3];
-	u32 count;
-	struct sidtab_convert_params *convert;
-	spinlock_t lock;
-	u32 cache_free_slots;
-	struct list_head cache_lru_list;
-	spinlock_t cache_lock;
-	struct sidtab_isid_entry isids[27];
-	struct hlist_head context_to_sid[512];
-};
-
-struct avtab_key {
-	u16 source_type;
-	u16 target_type;
-	u16 target_class;
-	u16 specified;
-};
-
-struct avtab_extended_perms {
-	u8 specified;
-	u8 driver;
-	struct extended_perms_data perms;
-};
-
-struct avtab_datum {
-	union {
-		u32 data;
-		struct avtab_extended_perms *xperms;
-	} u;
-};
-
-struct avtab_node {
-	struct avtab_key key;
-	struct avtab_datum datum;
-	struct avtab_node *next;
-};
-
-struct avtab {
-	struct avtab_node **htable;
-	u32 nel;
-	u32 nslot;
-	u32 mask;
-};
-
-struct type_set;
-
-struct constraint_expr {
-	u32 expr_type;
-	u32 attr;
-	u32 op;
-	struct ebitmap names;
-	struct type_set *type_names;
-	struct constraint_expr *next;
-};
-
-struct type_set {
-	struct ebitmap types;
-	struct ebitmap negset;
-	u32 flags;
-};
-
-struct constraint_node {
-	u32 permissions;
-	struct constraint_expr *expr;
-	struct constraint_node *next;
-};
-
-struct common_datum {
-	u32 value;
-	struct symtab permissions;
-};
-
-struct class_datum {
-	u32 value;
-	char *comkey;
-	struct common_datum *comdatum;
-	struct symtab permissions;
-	struct constraint_node *constraints;
-	struct constraint_node *validatetrans;
-	char default_user;
-	char default_role;
-	char default_type;
-	char default_range;
-};
-
-struct role_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap dominates;
-	struct ebitmap types;
-};
-
-struct role_allow {
-	u32 role;
-	u32 new_role;
-	struct role_allow *next;
-};
-
-struct type_datum {
-	u32 value;
-	u32 bounds;
-	unsigned char primary;
-	unsigned char attribute;
-};
-
-struct user_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap roles;
-	struct mls_range range;
-	struct mls_level dfltlevel;
-};
-
-struct cond_bool_datum {
-	__u32 value;
-	int state;
-};
-
-struct ocontext {
-	union {
-		char *name;
-		struct {
-			u8 protocol;
-			u16 low_port;
-			u16 high_port;
-		} port;
-		struct {
-			u32 addr;
-			u32 mask;
-		} node;
-		struct {
-			u32 addr[4];
-			u32 mask[4];
-		} node6;
-		struct {
-			u64 subnet_prefix;
-			u16 low_pkey;
-			u16 high_pkey;
-		} ibpkey;
-		struct {
-			char *dev_name;
-			u8 port;
-		} ibendport;
-	} u;
-	union {
-		u32 sclass;
-		u32 behavior;
-	} v;
-	struct context context[2];
-	u32 sid[2];
-	struct ocontext *next;
-};
-
-struct genfs {
-	char *fstype;
-	struct ocontext *head;
-	struct genfs *next;
-};
-
-struct cond_node;
-
-struct policydb {
-	int mls_enabled;
-	struct symtab symtab[8];
-	char **sym_val_to_name[8];
-	struct class_datum **class_val_to_struct;
-	struct role_datum **role_val_to_struct;
-	struct user_datum **user_val_to_struct;
-	struct type_datum **type_val_to_struct;
-	struct avtab te_avtab;
-	struct hashtab role_tr;
-	struct ebitmap filename_trans_ttypes;
-	struct hashtab filename_trans;
-	u32 compat_filename_trans_count;
-	struct cond_bool_datum **bool_val_to_struct;
-	struct avtab te_cond_avtab;
-	struct cond_node *cond_list;
-	u32 cond_list_len;
-	struct role_allow *role_allow;
-	struct ocontext *ocontexts[9];
-	struct genfs *genfs;
-	struct hashtab range_tr;
-	struct ebitmap *type_attr_map_array;
-	struct ebitmap policycaps;
-	struct ebitmap permissive_map;
-	size_t len;
-	unsigned int policyvers;
-	unsigned int reject_unknown: 1;
-	unsigned int allow_unknown: 1;
-	u16 process_class;
-	u32 process_trans_perms;
-};
-
-struct perm_datum {
-	u32 value;
-};
-
-struct role_trans_key {
-	u32 role;
-	u32 type;
-	u32 tclass;
-};
-
-struct role_trans_datum {
-	u32 new_role;
-};
-
-struct filename_trans_key {
-	u32 ttype;
-	u16 tclass;
-	const char *name;
-};
-
-struct filename_trans_datum {
-	struct ebitmap stypes;
-	u32 otype;
-	struct filename_trans_datum *next;
-};
-
-struct level_datum {
-	struct mls_level *level;
-	unsigned char isalias;
-};
-
-struct cat_datum {
-	u32 value;
-	unsigned char isalias;
-};
-
-struct range_trans {
-	u32 source_type;
-	u32 target_type;
-	u32 target_class;
-};
-
-struct cond_expr_node;
-
-struct cond_expr {
-	struct cond_expr_node *nodes;
-	u32 len;
-};
-
-struct cond_av_list {
-	struct avtab_node **nodes;
-	u32 len;
-};
-
-struct cond_node {
-	int cur_state;
-	struct cond_expr expr;
-	struct cond_av_list true_list;
-	struct cond_av_list false_list;
-};
-
-struct policy_data {
-	struct policydb *p;
-	void *fp;
-};
-
-struct cond_expr_node {
-	u32 expr_type;
-	u32 bool;
-};
-
-struct policydb_compat_info {
-	int version;
-	int sym_num;
-	int ocon_num;
-};
-
-struct selinux_mapping;
-
-struct selinux_map {
-	struct selinux_mapping *mapping;
-	u16 size;
-};
-
-struct selinux_policy {
-	struct sidtab *sidtab;
-	struct policydb policydb;
-	struct selinux_map map;
-	u32 latest_granting;
-};
-
-struct selinux_mapping {
-	u16 value;
-	unsigned int num_perms;
-	u32 perms[32];
-};
-
-struct convert_context_args {
-	struct selinux_state *state;
-	struct policydb *oldp;
-	struct policydb *newp;
-};
-
-struct selinux_audit_rule {
-	u32 au_seqno;
-	struct context au_ctxt;
-};
-
-struct cond_insertf_data {
-	struct policydb *p;
-	struct avtab_node **dst;
-	struct cond_av_list *other;
-};
-
-struct rt6key {
-	struct in6_addr addr;
-	int plen;
-};
-
-struct rtable;
-
-struct fnhe_hash_bucket;
-
-struct fib_nh_common {
-	struct net_device *nhc_dev;
-	int nhc_oif;
-	unsigned char nhc_scope;
-	u8 nhc_family;
-	u8 nhc_gw_family;
-	unsigned char nhc_flags;
-	struct lwtunnel_state *nhc_lwtstate;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} nhc_gw;
-	int nhc_weight;
-	atomic_t nhc_upper_bound;
-	struct rtable **nhc_pcpu_rth_output;
-	struct rtable *nhc_rth_input;
-	struct fnhe_hash_bucket *nhc_exceptions;
-};
-
-struct rt6_exception_bucket;
-
-struct fib6_nh {
-	struct fib_nh_common nh_common;
-	long unsigned int last_probe;
-	struct rt6_info **rt6i_pcpu;
-	struct rt6_exception_bucket *rt6i_exception_bucket;
-};
-
-struct fib6_node;
-
-struct dst_metrics;
-
-struct nexthop;
-
-struct fib6_info {
-	struct fib6_table *fib6_table;
-	struct fib6_info *fib6_next;
-	struct fib6_node *fib6_node;
-	union {
-		struct list_head fib6_siblings;
-		struct list_head nh_list;
-	};
-	unsigned int fib6_nsiblings;
-	refcount_t fib6_ref;
-	long unsigned int expires;
-	struct dst_metrics *fib6_metrics;
-	struct rt6key fib6_dst;
-	u32 fib6_flags;
-	struct rt6key fib6_src;
-	struct rt6key fib6_prefsrc;
-	u32 fib6_metric;
-	u8 fib6_protocol;
-	u8 fib6_type;
-	u8 should_flush: 1;
-	u8 dst_nocount: 1;
-	u8 dst_nopolicy: 1;
-	u8 fib6_destroying: 1;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 2;
-	struct callback_head rcu;
-	struct nexthop *nh;
-	struct fib6_nh fib6_nh[0];
-};
-
-struct uncached_list;
-
-struct rt6_info {
-	struct dst_entry dst;
-	struct fib6_info *from;
-	int sernum;
-	struct rt6key rt6i_dst;
-	struct rt6key rt6i_src;
-	struct in6_addr rt6i_gateway;
-	struct inet6_dev *rt6i_idev;
-	u32 rt6i_flags;
-	struct list_head rt6i_uncached;
-	struct uncached_list *rt6i_uncached_list;
-	short unsigned int rt6i_nfheader_len;
-};
-
-struct rt6_statistics {
-	__u32 fib_nodes;
-	__u32 fib_route_nodes;
-	__u32 fib_rt_entries;
-	__u32 fib_rt_cache;
-	__u32 fib_discarded_routes;
-	atomic_t fib_rt_alloc;
-	atomic_t fib_rt_uncache;
-};
-
-struct fib6_node {
-	struct fib6_node *parent;
-	struct fib6_node *left;
-	struct fib6_node *right;
-	struct fib6_node *subtree;
-	struct fib6_info *leaf;
-	__u16 fn_bit;
-	__u16 fn_flags;
-	int fn_sernum;
-	struct fib6_info *rr_ptr;
-	struct callback_head rcu;
-};
-
-struct fib6_table {
-	struct hlist_node tb6_hlist;
-	u32 tb6_id;
-	spinlock_t tb6_lock;
-	struct fib6_node tb6_root;
-	struct inet_peer_base tb6_peers;
-	unsigned int flags;
-	unsigned int fib_seq;
-};
-
-typedef union {
-	__be32 a4;
-	__be32 a6[4];
-	struct in6_addr in6;
-} xfrm_address_t;
-
-struct xfrm_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u8 proto;
-};
-
-struct xfrm_selector {
-	xfrm_address_t daddr;
-	xfrm_address_t saddr;
-	__be16 dport;
-	__be16 dport_mask;
-	__be16 sport;
-	__be16 sport_mask;
-	__u16 family;
-	__u8 prefixlen_d;
-	__u8 prefixlen_s;
-	__u8 proto;
-	int ifindex;
-	__kernel_uid32_t user;
-};
-
-struct xfrm_lifetime_cfg {
-	__u64 soft_byte_limit;
-	__u64 hard_byte_limit;
-	__u64 soft_packet_limit;
-	__u64 hard_packet_limit;
-	__u64 soft_add_expires_seconds;
-	__u64 hard_add_expires_seconds;
-	__u64 soft_use_expires_seconds;
-	__u64 hard_use_expires_seconds;
-};
-
-struct xfrm_lifetime_cur {
-	__u64 bytes;
-	__u64 packets;
-	__u64 add_time;
-	__u64 use_time;
-};
-
-struct xfrm_replay_state {
-	__u32 oseq;
-	__u32 seq;
-	__u32 bitmap;
-};
-
-struct xfrm_replay_state_esn {
-	unsigned int bmp_len;
-	__u32 oseq;
-	__u32 seq;
-	__u32 oseq_hi;
-	__u32 seq_hi;
-	__u32 replay_window;
-	__u32 bmp[0];
-};
-
-struct xfrm_algo {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_auth {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_trunc_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_aead {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_icv_len;
-	char alg_key[0];
-};
-
-struct xfrm_stats {
-	__u32 replay_window;
-	__u32 replay;
-	__u32 integrity_failed;
-};
-
-enum {
-	XFRM_POLICY_TYPE_MAIN = 0,
-	XFRM_POLICY_TYPE_SUB = 1,
-	XFRM_POLICY_TYPE_MAX = 2,
-	XFRM_POLICY_TYPE_ANY = 255,
-};
-
-struct xfrm_encap_tmpl {
-	__u16 encap_type;
-	__be16 encap_sport;
-	__be16 encap_dport;
-	xfrm_address_t encap_oa;
-};
-
-enum xfrm_attr_type_t {
-	XFRMA_UNSPEC = 0,
-	XFRMA_ALG_AUTH = 1,
-	XFRMA_ALG_CRYPT = 2,
-	XFRMA_ALG_COMP = 3,
-	XFRMA_ENCAP = 4,
-	XFRMA_TMPL = 5,
-	XFRMA_SA = 6,
-	XFRMA_POLICY = 7,
-	XFRMA_SEC_CTX = 8,
-	XFRMA_LTIME_VAL = 9,
-	XFRMA_REPLAY_VAL = 10,
-	XFRMA_REPLAY_THRESH = 11,
-	XFRMA_ETIMER_THRESH = 12,
-	XFRMA_SRCADDR = 13,
-	XFRMA_COADDR = 14,
-	XFRMA_LASTUSED = 15,
-	XFRMA_POLICY_TYPE = 16,
-	XFRMA_MIGRATE = 17,
-	XFRMA_ALG_AEAD = 18,
-	XFRMA_KMADDRESS = 19,
-	XFRMA_ALG_AUTH_TRUNC = 20,
-	XFRMA_MARK = 21,
-	XFRMA_TFCPAD = 22,
-	XFRMA_REPLAY_ESN_VAL = 23,
-	XFRMA_SA_EXTRA_FLAGS = 24,
-	XFRMA_PROTO = 25,
-	XFRMA_ADDRESS_FILTER = 26,
-	XFRMA_PAD = 27,
-	XFRMA_OFFLOAD_DEV = 28,
-	XFRMA_SET_MARK = 29,
-	XFRMA_SET_MARK_MASK = 30,
-	XFRMA_IF_ID = 31,
-	__XFRMA_MAX = 32,
-};
-
-struct xfrm_mark {
-	__u32 v;
-	__u32 m;
-};
-
-struct xfrm_address_filter {
-	xfrm_address_t saddr;
-	xfrm_address_t daddr;
-	__u16 family;
-	__u8 splen;
-	__u8 dplen;
-};
-
-struct xfrm_state_walk {
-	struct list_head all;
-	u8 state;
-	u8 dying;
-	u8 proto;
-	u32 seq;
-	struct xfrm_address_filter *filter;
-};
-
-struct xfrm_state_offload {
-	struct net_device *dev;
-	struct net_device *real_dev;
-	long unsigned int offload_handle;
-	unsigned int num_exthdrs;
-	u8 flags;
-};
-
-struct xfrm_mode {
-	u8 encap;
-	u8 family;
-	u8 flags;
-};
-
-struct xfrm_replay;
-
-struct xfrm_type;
-
-struct xfrm_type_offload;
-
-struct xfrm_state {
-	possible_net_t xs_net;
-	union {
-		struct hlist_node gclist;
-		struct hlist_node bydst;
-	};
-	struct hlist_node bysrc;
-	struct hlist_node byspi;
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct xfrm_id id;
-	struct xfrm_selector sel;
-	struct xfrm_mark mark;
-	u32 if_id;
-	u32 tfcpad;
-	u32 genid;
-	struct xfrm_state_walk km;
-	struct {
-		u32 reqid;
-		u8 mode;
-		u8 replay_window;
-		u8 aalgo;
-		u8 ealgo;
-		u8 calgo;
-		u8 flags;
-		u16 family;
-		xfrm_address_t saddr;
-		int header_len;
-		int trailer_len;
-		u32 extra_flags;
-		struct xfrm_mark smark;
-	} props;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_algo_auth *aalg;
-	struct xfrm_algo *ealg;
-	struct xfrm_algo *calg;
-	struct xfrm_algo_aead *aead;
-	const char *geniv;
-	struct xfrm_encap_tmpl *encap;
-	struct sock *encap_sk;
-	xfrm_address_t *coaddr;
-	struct xfrm_state *tunnel;
-	atomic_t tunnel_users;
-	struct xfrm_replay_state replay;
-	struct xfrm_replay_state_esn *replay_esn;
-	struct xfrm_replay_state preplay;
-	struct xfrm_replay_state_esn *preplay_esn;
-	const struct xfrm_replay *repl;
-	u32 xflags;
-	u32 replay_maxage;
-	u32 replay_maxdiff;
-	struct timer_list rtimer;
-	struct xfrm_stats stats;
-	struct xfrm_lifetime_cur curlft;
-	struct hrtimer mtimer;
-	struct xfrm_state_offload xso;
-	long int saved_tmo;
-	time64_t lastused;
-	struct page_frag xfrag;
-	const struct xfrm_type *type;
-	struct xfrm_mode inner_mode;
-	struct xfrm_mode inner_mode_iaf;
-	struct xfrm_mode outer_mode;
-	const struct xfrm_type_offload *type_offload;
-	struct xfrm_sec_ctx *security;
-	void *data;
-};
-
-struct dst_metrics {
-	u32 metrics[17];
-	refcount_t refcnt;
-};
-
-struct xfrm_policy_walk_entry {
-	struct list_head all;
-	u8 dead;
-};
-
-struct xfrm_policy_queue {
-	struct sk_buff_head hold_queue;
-	struct timer_list hold_timer;
-	long unsigned int timeout;
-};
-
-struct xfrm_tmpl {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	short unsigned int encap_family;
-	u32 reqid;
-	u8 mode;
-	u8 share;
-	u8 optional;
-	u8 allalgs;
-	u32 aalgos;
-	u32 ealgos;
-	u32 calgos;
-};
-
-struct xfrm_policy {
-	possible_net_t xp_net;
-	struct hlist_node bydst;
-	struct hlist_node byidx;
-	rwlock_t lock;
-	refcount_t refcnt;
-	u32 pos;
-	struct timer_list timer;
-	atomic_t genid;
-	u32 priority;
-	u32 index;
-	u32 if_id;
-	struct xfrm_mark mark;
-	struct xfrm_selector selector;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_policy_walk_entry walk;
-	struct xfrm_policy_queue polq;
-	bool bydst_reinsert;
-	u8 type;
-	u8 action;
-	u8 flags;
-	u8 xfrm_nr;
-	u16 family;
-	struct xfrm_sec_ctx *security;
-	struct xfrm_tmpl xfrm_vec[6];
-	struct hlist_node bydst_inexact_list;
-	struct callback_head rcu;
-};
-
-struct udp_hslot;
-
-struct udp_table {
-	struct udp_hslot *hash;
-	struct udp_hslot *hash2;
-	unsigned int mask;
-	unsigned int log;
-};
-
-struct fib_nh_exception {
-	struct fib_nh_exception *fnhe_next;
-	int fnhe_genid;
-	__be32 fnhe_daddr;
-	u32 fnhe_pmtu;
-	bool fnhe_mtu_locked;
-	__be32 fnhe_gw;
-	long unsigned int fnhe_expires;
-	struct rtable *fnhe_rth_input;
-	struct rtable *fnhe_rth_output;
-	long unsigned int fnhe_stamp;
-	struct callback_head rcu;
-};
-
-struct rtable {
-	struct dst_entry dst;
-	int rt_genid;
-	unsigned int rt_flags;
-	__u16 rt_type;
-	__u8 rt_is_input;
-	__u8 rt_uses_gateway;
-	int rt_iif;
-	u8 rt_gw_family;
-	union {
-		__be32 rt_gw4;
-		struct in6_addr rt_gw6;
-	};
-	u32 rt_mtu_locked: 1;
-	u32 rt_pmtu: 31;
-	struct list_head rt_uncached;
-	struct uncached_list *rt_uncached_list;
-};
-
-struct fnhe_hash_bucket {
-	struct fib_nh_exception *chain;
-};
-
-struct rt6_exception_bucket {
-	struct hlist_head chain;
-	int depth;
-};
-
-struct xfrm_replay {
-	void (*advance)(struct xfrm_state *, __be32);
-	int (*check)(struct xfrm_state *, struct sk_buff *, __be32);
-	int (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);
-	void (*notify)(struct xfrm_state *, int);
-	int (*overflow)(struct xfrm_state *, struct sk_buff *);
-};
-
-struct xfrm_type {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	u8 flags;
-	int (*init_state)(struct xfrm_state *);
-	void (*destructor)(struct xfrm_state *);
-	int (*input)(struct xfrm_state *, struct sk_buff *);
-	int (*output)(struct xfrm_state *, struct sk_buff *);
-	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
-	int (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);
-};
-
-struct xfrm_type_offload {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	void (*encap)(struct xfrm_state *, struct sk_buff *);
-	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
-	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
-};
-
-struct xfrm_dst {
-	union {
-		struct dst_entry dst;
-		struct rtable rt;
-		struct rt6_info rt6;
-	} u;
-	struct dst_entry *route;
-	struct dst_entry *child;
-	struct dst_entry *path;
-	struct xfrm_policy *pols[2];
-	int num_pols;
-	int num_xfrms;
-	u32 xfrm_genid;
-	u32 policy_genid;
-	u32 route_mtu_cached;
-	u32 child_mtu_cached;
-	u32 route_cookie;
-	u32 path_cookie;
-};
-
-struct xfrm_offload {
-	struct {
-		__u32 low;
-		__u32 hi;
-	} seq;
-	__u32 flags;
-	__u32 status;
-	__u8 proto;
-};
-
-struct sec_path {
-	int len;
-	int olen;
-	struct xfrm_state *xvec[6];
-	struct xfrm_offload ovec[1];
-};
-
-struct udp_hslot {
-	struct hlist_head head;
-	int count;
-	spinlock_t lock;
-};
-
-struct smack_audit_data {
-	const char *function;
-	char *subject;
-	char *object;
-	char *request;
-	int result;
-};
-
-struct smack_known {
-	struct list_head list;
-	struct hlist_node smk_hashed;
-	char *smk_known;
-	u32 smk_secid;
-	struct netlbl_lsm_secattr smk_netlabel;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-};
-
-struct superblock_smack {
-	struct smack_known *smk_root;
-	struct smack_known *smk_floor;
-	struct smack_known *smk_hat;
-	struct smack_known *smk_default;
-	int smk_flags;
-};
-
-struct socket_smack {
-	struct smack_known *smk_out;
-	struct smack_known *smk_in;
-	struct smack_known *smk_packet;
-	int smk_state;
-};
-
-struct inode_smack {
-	struct smack_known *smk_inode;
-	struct smack_known *smk_task;
-	struct smack_known *smk_mmap;
-	int smk_flags;
-};
-
-struct task_smack {
-	struct smack_known *smk_task;
-	struct smack_known *smk_forked;
-	struct list_head smk_rules;
-	struct mutex smk_rules_lock;
-	struct list_head smk_relabel;
-};
-
-struct smack_rule {
-	struct list_head list;
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access;
-};
-
-struct smk_net4addr {
-	struct list_head list;
-	struct in_addr smk_host;
-	struct in_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smk_net6addr {
-	struct list_head list;
-	struct in6_addr smk_host;
-	struct in6_addr smk_mask;
-	int smk_masks;
-	struct smack_known *smk_label;
-};
-
-struct smack_known_list_elem {
-	struct list_head list;
-	struct smack_known *smk_label;
-};
-
-enum {
-	Opt_error___3 = 4294967295,
-	Opt_fsdefault = 0,
-	Opt_fsfloor = 1,
-	Opt_fshat = 2,
-	Opt_fsroot = 3,
-	Opt_fstransmute = 4,
-};
-
-struct smk_audit_info {
-	struct common_audit_data a;
-	struct smack_audit_data sad;
-};
-
-struct smack_mnt_opts {
-	const char *fsdefault;
-	const char *fsfloor;
-	const char *fshat;
-	const char *fsroot;
-	const char *fstransmute;
-};
-
-struct netlbl_audit {
-	u32 secid;
-	kuid_t loginuid;
-	unsigned int sessionid;
-};
-
-struct cipso_v4_std_map_tbl {
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} lvl;
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} cat;
-};
-
-struct cipso_v4_doi {
-	u32 doi;
-	u32 type;
-	union {
-		struct cipso_v4_std_map_tbl *std;
-	} map;
-	u8 tags[5];
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-enum smk_inos {
-	SMK_ROOT_INO = 2,
-	SMK_LOAD = 3,
-	SMK_CIPSO = 4,
-	SMK_DOI = 5,
-	SMK_DIRECT = 6,
-	SMK_AMBIENT = 7,
-	SMK_NET4ADDR = 8,
-	SMK_ONLYCAP = 9,
-	SMK_LOGGING = 10,
-	SMK_LOAD_SELF = 11,
-	SMK_ACCESSES = 12,
-	SMK_MAPPED = 13,
-	SMK_LOAD2 = 14,
-	SMK_LOAD_SELF2 = 15,
-	SMK_ACCESS2 = 16,
-	SMK_CIPSO2 = 17,
-	SMK_REVOKE_SUBJ = 18,
-	SMK_CHANGE_RULE = 19,
-	SMK_SYSLOG = 20,
-	SMK_PTRACE = 21,
-	SMK_NET6ADDR = 23,
-	SMK_RELABEL_SELF = 24,
-};
-
-struct smack_parsed_rule {
-	struct smack_known *smk_subject;
-	struct smack_known *smk_object;
-	int smk_access1;
-	int smk_access2;
-};
-
-struct sockaddr_un {
-	__kernel_sa_family_t sun_family;
-	char sun_path[108];
-};
-
-struct unix_address {
-	refcount_t refcnt;
-	int len;
-	unsigned int hash;
-	struct sockaddr_un name[0];
-};
-
-struct scm_stat {
-	atomic_t nr_fds;
-};
-
-struct unix_sock {
-	struct sock sk;
-	struct unix_address *addr;
-	struct path path;
-	struct mutex iolock;
-	struct mutex bindlock;
-	struct sock *peer;
-	struct list_head link;
-	atomic_long_t inflight;
-	spinlock_t lock;
-	long unsigned int gc_flags;
-	long: 64;
-	struct socket_wq peer_wq;
-	wait_queue_entry_t peer_wake;
-	struct scm_stat scm_stat;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum audit_mode {
-	AUDIT_NORMAL = 0,
-	AUDIT_QUIET_DENIED = 1,
-	AUDIT_QUIET = 2,
-	AUDIT_NOQUIET = 3,
-	AUDIT_ALL = 4,
-};
-
-enum aa_sfs_type {
-	AA_SFS_TYPE_BOOLEAN = 0,
-	AA_SFS_TYPE_STRING = 1,
-	AA_SFS_TYPE_U64 = 2,
-	AA_SFS_TYPE_FOPS = 3,
-	AA_SFS_TYPE_DIR = 4,
-};
-
-struct aa_sfs_entry {
-	const char *name;
-	struct dentry *dentry;
-	umode_t mode;
-	enum aa_sfs_type v_type;
-	union {
-		bool boolean;
-		char *string;
-		long unsigned int u64;
-		struct aa_sfs_entry *files;
-	} v;
-	const struct file_operations *file_ops;
-};
-
-enum aafs_ns_type {
-	AAFS_NS_DIR = 0,
-	AAFS_NS_PROFS = 1,
-	AAFS_NS_NS = 2,
-	AAFS_NS_RAW_DATA = 3,
-	AAFS_NS_LOAD = 4,
-	AAFS_NS_REPLACE = 5,
-	AAFS_NS_REMOVE = 6,
-	AAFS_NS_REVISION = 7,
-	AAFS_NS_COUNT = 8,
-	AAFS_NS_MAX_COUNT = 9,
-	AAFS_NS_SIZE = 10,
-	AAFS_NS_MAX_SIZE = 11,
-	AAFS_NS_OWNER = 12,
-	AAFS_NS_SIZEOF = 13,
-};
-
-enum aafs_prof_type {
-	AAFS_PROF_DIR = 0,
-	AAFS_PROF_PROFS = 1,
-	AAFS_PROF_NAME = 2,
-	AAFS_PROF_MODE = 3,
-	AAFS_PROF_ATTACH = 4,
-	AAFS_PROF_HASH = 5,
-	AAFS_PROF_RAW_DATA = 6,
-	AAFS_PROF_RAW_HASH = 7,
-	AAFS_PROF_RAW_ABI = 8,
-	AAFS_PROF_SIZEOF = 9,
-};
-
-struct table_header {
-	u16 td_id;
-	u16 td_flags;
-	u32 td_hilen;
-	u32 td_lolen;
-	char td_data[0];
-};
-
-struct aa_dfa {
-	struct kref count;
-	u16 flags;
-	u32 max_oob;
-	struct table_header *tables[8];
-};
-
-struct aa_policy {
-	const char *name;
-	char *hname;
-	struct list_head list;
-	struct list_head profiles;
-};
-
-struct aa_labelset {
-	rwlock_t lock;
-	struct rb_root root;
-};
-
-enum label_flags {
-	FLAG_HAT = 1,
-	FLAG_UNCONFINED = 2,
-	FLAG_NULL = 4,
-	FLAG_IX_ON_NAME_ERROR = 8,
-	FLAG_IMMUTIBLE = 16,
-	FLAG_USER_DEFINED = 32,
-	FLAG_NO_LIST_REF = 64,
-	FLAG_NS_COUNT = 128,
-	FLAG_IN_TREE = 256,
-	FLAG_PROFILE = 512,
-	FLAG_EXPLICIT = 1024,
-	FLAG_STALE = 2048,
-	FLAG_RENAMED = 4096,
-	FLAG_REVOKED = 8192,
-};
-
-struct aa_label;
-
-struct aa_proxy {
-	struct kref count;
-	struct aa_label *label;
-};
-
-struct aa_profile;
-
-struct aa_label {
-	struct kref count;
-	struct rb_node node;
-	struct callback_head rcu;
-	struct aa_proxy *proxy;
-	char *hname;
-	long int flags;
-	u32 secid;
-	int size;
-	struct aa_profile *vec[0];
-};
-
-struct label_it {
-	int i;
-	int j;
-};
-
-struct aa_policydb {
-	struct aa_dfa *dfa;
-	unsigned int start[17];
-};
-
-struct aa_domain {
-	int size;
-	char **table;
-};
-
-struct aa_file_rules {
-	unsigned int start;
-	struct aa_dfa *dfa;
-	struct aa_domain trans;
-};
-
-struct aa_caps {
-	kernel_cap_t allow;
-	kernel_cap_t audit;
-	kernel_cap_t denied;
-	kernel_cap_t quiet;
-	kernel_cap_t kill;
-	kernel_cap_t extended;
-};
-
-struct aa_rlimit {
-	unsigned int mask;
-	struct rlimit limits[16];
-};
-
-struct aa_ns;
-
-struct aa_secmark;
-
-struct aa_loaddata;
-
-struct aa_profile {
-	struct aa_policy base;
-	struct aa_profile *parent;
-	struct aa_ns *ns;
-	const char *rename;
-	const char *attach;
-	struct aa_dfa *xmatch;
-	int xmatch_len;
-	enum audit_mode audit;
-	long int mode;
-	u32 path_flags;
-	const char *disconnected;
-	int size;
-	struct aa_policydb policy;
-	struct aa_file_rules file;
-	struct aa_caps caps;
-	int xattr_count;
-	char **xattrs;
-	struct aa_rlimit rlimits;
-	int secmark_count;
-	struct aa_secmark *secmark;
-	struct aa_loaddata *rawdata;
-	unsigned char *hash;
-	char *dirname;
-	struct dentry *dents[9];
-	struct rhashtable *data;
-	struct aa_label label;
-};
-
-struct aa_perms {
-	u32 allow;
-	u32 audit;
-	u32 deny;
-	u32 quiet;
-	u32 kill;
-	u32 stop;
-	u32 complain;
-	u32 cond;
-	u32 hide;
-	u32 prompt;
-	u16 xindex;
-};
-
-struct path_cond {
-	kuid_t uid;
-	umode_t mode;
-};
-
-struct aa_secmark {
-	u8 audit;
-	u8 deny;
-	u32 secid;
-	char *label;
-};
-
-enum profile_mode {
-	APPARMOR_ENFORCE = 0,
-	APPARMOR_COMPLAIN = 1,
-	APPARMOR_KILL = 2,
-	APPARMOR_UNCONFINED = 3,
-};
-
-struct aa_data {
-	char *key;
-	u32 size;
-	char *data;
-	struct rhash_head head;
-};
-
-struct aa_ns_acct {
-	int max_size;
-	int max_count;
-	int size;
-	int count;
-};
-
-struct aa_ns {
-	struct aa_policy base;
-	struct aa_ns *parent;
-	struct mutex lock;
-	struct aa_ns_acct acct;
-	struct aa_profile *unconfined;
-	struct list_head sub_ns;
-	atomic_t uniq_null;
-	long int uniq_id;
-	int level;
-	long int revision;
-	wait_queue_head_t wait;
-	struct aa_labelset labels;
-	struct list_head rawdata_list;
-	struct dentry *dents[13];
-};
-
-struct aa_loaddata {
-	struct kref count;
-	struct list_head list;
-	struct work_struct work;
-	struct dentry *dents[6];
-	struct aa_ns *ns;
-	char *name;
-	size_t size;
-	size_t compressed_size;
-	long int revision;
-	int abi;
-	unsigned char *hash;
-	char *data;
-};
-
-enum {
-	AAFS_LOADDATA_ABI = 0,
-	AAFS_LOADDATA_REVISION = 1,
-	AAFS_LOADDATA_HASH = 2,
-	AAFS_LOADDATA_DATA = 3,
-	AAFS_LOADDATA_COMPRESSED_SIZE = 4,
-	AAFS_LOADDATA_DIR = 5,
-	AAFS_LOADDATA_NDENTS = 6,
-};
-
-struct rawdata_f_data {
-	struct aa_loaddata *loaddata;
-};
-
-struct aa_revision {
-	struct aa_ns *ns;
-	long int last_read;
-};
-
-struct multi_transaction {
-	struct kref count;
-	ssize_t size;
-	char data[0];
-};
-
-struct apparmor_audit_data {
-	int error;
-	int type;
-	const char *op;
-	struct aa_label *label;
-	const char *name;
-	const char *info;
-	u32 request;
-	u32 denied;
-	union {
-		struct {
-			struct aa_label *peer;
-			union {
-				struct {
-					const char *target;
-					kuid_t ouid;
-				} fs;
-				struct {
-					int rlim;
-					long unsigned int max;
-				} rlim;
-				struct {
-					int signal;
-					int unmappedsig;
-				};
-				struct {
-					int type;
-					int protocol;
-					struct sock *peer_sk;
-					void *addr;
-					int addrlen;
-				} net;
-			};
-		};
-		struct {
-			struct aa_profile *profile;
-			const char *ns;
-			long int pos;
-		} iface;
-		struct {
-			const char *src_name;
-			const char *type;
-			const char *trans;
-			const char *data;
-			long unsigned int flags;
-		} mnt;
-	};
-};
-
-enum audit_type {
-	AUDIT_APPARMOR_AUDIT = 0,
-	AUDIT_APPARMOR_ALLOWED = 1,
-	AUDIT_APPARMOR_DENIED = 2,
-	AUDIT_APPARMOR_HINT = 3,
-	AUDIT_APPARMOR_STATUS = 4,
-	AUDIT_APPARMOR_ERROR = 5,
-	AUDIT_APPARMOR_KILL = 6,
-	AUDIT_APPARMOR_AUTO = 7,
-};
-
-struct aa_audit_rule {
-	struct aa_label *label;
-};
-
-struct audit_cache {
-	struct aa_profile *profile;
-	kernel_cap_t caps;
-};
-
-struct aa_task_ctx {
-	struct aa_label *nnp;
-	struct aa_label *onexec;
-	struct aa_label *previous;
-	u64 token;
-};
-
-struct counted_str {
-	struct kref count;
-	char name[0];
-};
-
-struct match_workbuf {
-	unsigned int count;
-	unsigned int pos;
-	unsigned int len;
-	unsigned int size;
-	unsigned int history[24];
-};
-
-enum path_flags {
-	PATH_IS_DIR = 1,
-	PATH_CONNECT_PATH = 4,
-	PATH_CHROOT_REL = 8,
-	PATH_CHROOT_NSCONNECT = 16,
-	PATH_DELEGATE_DELETED = 32768,
-	PATH_MEDIATE_DELETED = 65536,
-};
-
-struct aa_load_ent {
-	struct list_head list;
-	struct aa_profile *new;
-	struct aa_profile *old;
-	struct aa_profile *rename;
-	const char *ns_name;
-};
-
-enum aa_code {
-	AA_U8 = 0,
-	AA_U16 = 1,
-	AA_U32 = 2,
-	AA_U64 = 3,
-	AA_NAME = 4,
-	AA_STRING = 5,
-	AA_BLOB = 6,
-	AA_STRUCT = 7,
-	AA_STRUCTEND = 8,
-	AA_LIST = 9,
-	AA_LISTEND = 10,
-	AA_ARRAY = 11,
-	AA_ARRAYEND = 12,
-};
-
-struct aa_ext {
-	void *start;
-	void *end;
-	void *pos;
-	u32 version;
-};
-
-struct aa_file_ctx {
-	spinlock_t lock;
-	struct aa_label *label;
-	u32 allow;
-};
-
-struct aa_sk_ctx {
-	struct aa_label *label;
-	struct aa_label *peer;
-};
-
-union aa_buffer {
-	struct list_head list;
-	char buffer[1];
-};
-
-struct ptrace_relation {
-	struct task_struct *tracer;
-	struct task_struct *tracee;
-	bool invalid;
-	struct list_head node;
-	struct callback_head rcu;
-};
-
-struct access_report_info {
-	struct callback_head work;
-	const char *access;
-	struct task_struct *target;
-	struct task_struct *agent;
-};
-
-enum sid_policy_type {
-	SIDPOL_DEFAULT = 0,
-	SIDPOL_CONSTRAINED = 1,
-	SIDPOL_ALLOWED = 2,
-};
-
-typedef union {
-	kuid_t uid;
-	kgid_t gid;
-} kid_t;
-
-enum setid_type {
-	UID = 0,
-	GID = 1,
-};
-
-struct setid_rule {
-	struct hlist_node next;
-	kid_t src_id;
-	kid_t dst_id;
-	enum setid_type type;
-};
-
-struct setid_ruleset {
-	struct hlist_head rules[256];
-	char *policy_str;
-	struct callback_head rcu;
-	enum setid_type type;
-};
-
-enum devcg_behavior {
-	DEVCG_DEFAULT_NONE = 0,
-	DEVCG_DEFAULT_ALLOW = 1,
-	DEVCG_DEFAULT_DENY = 2,
-};
-
-struct dev_exception_item {
-	u32 major;
-	u32 minor;
-	short int type;
-	short int access;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct dev_cgroup {
-	struct cgroup_subsys_state css;
-	struct list_head exceptions;
-	enum devcg_behavior behavior;
-};
-
-struct altha_list_struct {
-	struct path path;
-	char *spath;
-	char *spath_p;
-	struct list_head list;
-};
-
-struct kiosk_list_struct {
-	struct path path;
-	struct list_head list;
-};
-
-enum kiosk_cmd {
-	KIOSK_UNSPEC = 0,
-	KIOSK_REQUEST = 1,
-	KIOSK_REPLY = 2,
-	KIOSK_CMD_LAST = 3,
-};
-
-enum kiosk_mode {
-	KIOSK_PERMISSIVE = 0,
-	KIOSK_NONSYSTEM = 1,
-	KIOSK_MODE_LAST = 2,
-};
-
-enum kiosk_action {
-	KIOSK_SET_MODE = 0,
-	KIOSK_USERLIST_ADD = 1,
-	KIOSK_USERLIST_DEL = 2,
-	KIOSK_USER_LIST = 3,
-};
-
-enum kiosk_attrs {
-	KIOSK_NOATTR = 0,
-	KIOSK_ACTION = 1,
-	KIOSK_DATA = 2,
-	KIOSK_MAX_ATTR = 3,
-};
-
-enum integrity_status {
-	INTEGRITY_PASS = 0,
-	INTEGRITY_PASS_IMMUTABLE = 1,
-	INTEGRITY_FAIL = 2,
-	INTEGRITY_NOLABEL = 3,
-	INTEGRITY_NOXATTRS = 4,
-	INTEGRITY_UNKNOWN = 5,
-};
-
-struct ima_digest_data {
-	u8 algo;
-	u8 length;
-	union {
-		struct {
-			u8 unused;
-			u8 type;
-		} sha1;
-		struct {
-			u8 type;
-			u8 algo;
-		} ng;
-		u8 data[2];
-	} xattr;
-	u8 digest[0];
-};
-
-struct integrity_iint_cache {
-	struct rb_node rb_node;
-	struct mutex mutex;
-	struct inode *inode;
-	u64 version;
-	long unsigned int flags;
-	long unsigned int measured_pcrs;
-	long unsigned int atomic_flags;
-	enum integrity_status ima_file_status: 4;
-	enum integrity_status ima_mmap_status: 4;
-	enum integrity_status ima_bprm_status: 4;
-	enum integrity_status ima_read_status: 4;
-	enum integrity_status ima_creds_status: 4;
-	enum integrity_status evm_status: 4;
-	struct ima_digest_data *ima_hash;
-};
-
-struct modsig;
-
-struct asymmetric_key_id;
-
-struct public_key_signature {
-	struct asymmetric_key_id *auth_ids[2];
-	u8 *s;
-	u32 s_size;
-	u8 *digest;
-	u8 digest_size;
-	const char *pkey_algo;
-	const char *hash_algo;
-	const char *encoding;
-	const void *data;
-	unsigned int data_size;
-};
-
-struct asymmetric_key_id {
-	short unsigned int len;
-	unsigned char data[0];
-};
-
-struct signature_v2_hdr {
-	uint8_t type;
-	uint8_t version;
-	uint8_t hash_algo;
-	__be32 keyid;
-	__be16 sig_size;
-	uint8_t sig[0];
-} __attribute__((packed));
-
-struct tpm_digest {
-	u16 alg_id;
-	u8 digest[64];
-};
-
-struct evm_ima_xattr_data {
-	u8 type;
-	u8 data[0];
-};
-
-enum ima_show_type {
-	IMA_SHOW_BINARY = 0,
-	IMA_SHOW_BINARY_NO_FIELD_LEN = 1,
-	IMA_SHOW_BINARY_OLD_STRING_FMT = 2,
-	IMA_SHOW_ASCII = 3,
-};
-
-struct ima_event_data {
-	struct integrity_iint_cache *iint;
-	struct file *file;
-	const unsigned char *filename;
-	struct evm_ima_xattr_data *xattr_value;
-	int xattr_len;
-	const struct modsig *modsig;
-	const char *violation;
-	const void *buf;
-	int buf_len;
-};
-
-struct ima_field_data {
-	u8 *data;
-	u32 len;
-};
-
-struct ima_template_field {
-	const char field_id[16];
-	int (*field_init)(struct ima_event_data *, struct ima_field_data *);
-	void (*field_show)(struct seq_file *, enum ima_show_type, struct ima_field_data *);
-};
-
-struct ima_template_desc {
-	struct list_head list;
-	char *name;
-	char *fmt;
-	int num_fields;
-	const struct ima_template_field **fields;
-};
-
-struct ima_template_entry {
-	int pcr;
-	struct tpm_digest *digests;
-	struct ima_template_desc *template_desc;
-	u32 template_data_len;
-	struct ima_field_data template_data[0];
-};
-
-struct ima_queue_entry {
-	struct hlist_node hnext;
-	struct list_head later;
-	struct ima_template_entry *entry;
-};
-
-struct ima_h_table {
-	atomic_long_t len;
-	atomic_long_t violations;
-	struct hlist_head queue[1024];
-};
-
-enum ima_fs_flags {
-	IMA_FS_BUSY = 0,
-};
-
-struct hwrng {
-	const char *name;
-	int (*init)(struct hwrng *);
-	void (*cleanup)(struct hwrng *);
-	int (*data_present)(struct hwrng *, int);
-	int (*data_read)(struct hwrng *, u32 *);
-	int (*read)(struct hwrng *, void *, size_t, bool);
-	long unsigned int priv;
-	short unsigned int quality;
-	struct list_head list;
-	struct kref ref;
-	struct completion cleanup_done;
-};
-
-struct tpm_bank_info {
-	u16 alg_id;
-	u16 digest_size;
-	u16 crypto_id;
-};
-
-struct tpm_chip;
-
-struct tpm_class_ops {
-	unsigned int flags;
-	const u8 req_complete_mask;
-	const u8 req_complete_val;
-	bool (*req_canceled)(struct tpm_chip *, u8);
-	int (*recv)(struct tpm_chip *, u8 *, size_t);
-	int (*send)(struct tpm_chip *, u8 *, size_t);
-	void (*cancel)(struct tpm_chip *);
-	u8 (*status)(struct tpm_chip *);
-	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
-	void (*update_durations)(struct tpm_chip *, long unsigned int *);
-	int (*go_idle)(struct tpm_chip *);
-	int (*cmd_ready)(struct tpm_chip *);
-	int (*request_locality)(struct tpm_chip *, int);
-	int (*relinquish_locality)(struct tpm_chip *, int);
-	void (*clk_enable)(struct tpm_chip *, bool);
-};
-
-struct tpm_bios_log {
-	void *bios_event_log;
-	void *bios_event_log_end;
-};
-
-struct tpm_chip_seqops {
-	struct tpm_chip *chip;
-	const struct seq_operations *seqops;
-};
-
-struct tpm_space {
-	u32 context_tbl[3];
-	u8 *context_buf;
-	u32 session_tbl[3];
-	u8 *session_buf;
-	u32 buf_size;
-};
-
-struct tpm_chip {
-	struct device dev;
-	struct device devs;
-	struct cdev cdev;
-	struct cdev cdevs;
-	struct rw_semaphore ops_sem;
-	const struct tpm_class_ops *ops;
-	struct tpm_bios_log log;
-	struct tpm_chip_seqops bin_log_seqops;
-	struct tpm_chip_seqops ascii_log_seqops;
-	unsigned int flags;
-	int dev_num;
-	long unsigned int is_open;
-	char hwrng_name[64];
-	struct hwrng hwrng;
-	struct mutex tpm_mutex;
-	long unsigned int timeout_a;
-	long unsigned int timeout_b;
-	long unsigned int timeout_c;
-	long unsigned int timeout_d;
-	bool timeout_adjusted;
-	long unsigned int duration[4];
-	bool duration_adjusted;
-	struct dentry *bios_dir[3];
-	const struct attribute_group *groups[3];
-	unsigned int groups_cnt;
-	u32 nr_allocated_banks;
-	struct tpm_bank_info *allocated_banks;
-	struct tpm_space work_space;
-	u32 last_cc;
-	u32 nr_commands;
-	u32 *cc_attrs_tbl;
-	int locality;
-};
-
-enum evm_ima_xattr_type {
-	IMA_XATTR_DIGEST = 1,
-	EVM_XATTR_HMAC = 2,
-	EVM_IMA_XATTR_DIGSIG = 3,
-	IMA_XATTR_DIGEST_NG = 4,
-	EVM_XATTR_PORTABLE_DIGSIG = 5,
-	IMA_XATTR_LAST = 6,
-};
-
-enum ima_hooks {
-	NONE = 0,
-	FILE_CHECK = 1,
-	MMAP_CHECK = 2,
-	BPRM_CHECK = 3,
-	CREDS_CHECK = 4,
-	POST_SETATTR = 5,
-	MODULE_CHECK = 6,
-	FIRMWARE_CHECK = 7,
-	KEXEC_KERNEL_CHECK = 8,
-	KEXEC_INITRAMFS_CHECK = 9,
-	POLICY_CHECK = 10,
-	KEXEC_CMDLINE = 11,
-	KEY_CHECK = 12,
-	MAX_CHECK = 13,
-};
-
-enum tpm_algorithms {
-	TPM_ALG_ERROR = 0,
-	TPM_ALG_SHA1 = 4,
-	TPM_ALG_KEYEDHASH = 8,
-	TPM_ALG_SHA256 = 11,
-	TPM_ALG_SHA384 = 12,
-	TPM_ALG_SHA512 = 13,
-	TPM_ALG_NULL = 16,
-	TPM_ALG_SM3_256 = 18,
-};
-
-enum tpm_pcrs {
-	TPM_PCR0 = 0,
-	TPM_PCR8 = 8,
-	TPM_PCR10 = 10,
-};
-
-struct ima_algo_desc {
-	struct crypto_shash *tfm;
-	enum hash_algo algo;
-};
-
-enum lsm_rule_types {
-	LSM_OBJ_USER = 0,
-	LSM_OBJ_ROLE = 1,
-	LSM_OBJ_TYPE = 2,
-	LSM_SUBJ_USER = 3,
-	LSM_SUBJ_ROLE = 4,
-	LSM_SUBJ_TYPE = 5,
-};
-
-enum policy_types {
-	ORIGINAL_TCB = 1,
-	DEFAULT_TCB = 2,
-};
-
-enum policy_rule_list {
-	IMA_DEFAULT_POLICY = 1,
-	IMA_CUSTOM_POLICY = 2,
-};
-
-struct ima_rule_opt_list {
-	size_t count;
-	char *items[0];
-};
-
-struct ima_rule_entry {
-	struct list_head list;
-	int action;
-	unsigned int flags;
-	enum ima_hooks func;
-	int mask;
-	long unsigned int fsmagic;
-	uuid_t fsuuid;
-	kuid_t uid;
-	kuid_t fowner;
-	bool (*uid_op)(kuid_t, kuid_t);
-	bool (*fowner_op)(kuid_t, kuid_t);
-	int pcr;
-	struct {
-		void *rule;
-		char *args_p;
-		int type;
-	} lsm[6];
-	char *fsname;
-	struct ima_rule_opt_list *keyrings;
-	struct ima_template_desc *template;
-};
-
-enum {
-	Opt_measure = 0,
-	Opt_dont_measure = 1,
-	Opt_appraise = 2,
-	Opt_dont_appraise = 3,
-	Opt_audit = 4,
-	Opt_hash___2 = 5,
-	Opt_dont_hash = 6,
-	Opt_obj_user = 7,
-	Opt_obj_role = 8,
-	Opt_obj_type = 9,
-	Opt_subj_user = 10,
-	Opt_subj_role = 11,
-	Opt_subj_type = 12,
-	Opt_func = 13,
-	Opt_mask = 14,
-	Opt_fsmagic = 15,
-	Opt_fsname = 16,
-	Opt_fsuuid = 17,
-	Opt_uid_eq = 18,
-	Opt_euid_eq = 19,
-	Opt_fowner_eq = 20,
-	Opt_uid_gt = 21,
-	Opt_euid_gt = 22,
-	Opt_fowner_gt = 23,
-	Opt_uid_lt = 24,
-	Opt_euid_lt = 25,
-	Opt_fowner_lt = 26,
-	Opt_appraise_type = 27,
-	Opt_appraise_flag = 28,
-	Opt_permit_directio = 29,
-	Opt_pcr = 30,
-	Opt_template = 31,
-	Opt_keyrings = 32,
-	Opt_err___7 = 33,
-};
-
-enum {
-	mask_exec = 0,
-	mask_write = 1,
-	mask_read = 2,
-	mask_append = 3,
-};
-
-struct ima_kexec_hdr {
-	u16 version;
-	u16 _reserved0;
-	u32 _reserved1;
-	u64 buffer_size;
-	u64 count;
-};
-
-enum header_fields {
-	HDR_PCR = 0,
-	HDR_DIGEST = 1,
-	HDR_TEMPLATE_NAME = 2,
-	HDR_TEMPLATE_DATA = 3,
-	HDR__LAST = 4,
-};
-
-enum data_formats {
-	DATA_FMT_DIGEST = 0,
-	DATA_FMT_DIGEST_WITH_ALGO = 1,
-	DATA_FMT_STRING = 2,
-	DATA_FMT_HEX = 3,
-};
-
-struct ima_key_entry {
-	struct list_head list;
-	void *payload;
-	size_t payload_len;
-	char *keyring_name;
-};
-
-struct evm_xattr {
-	struct evm_ima_xattr_data data;
-	u8 digest[20];
-};
-
-struct xattr_list {
-	struct list_head list;
-	char *name;
-};
-
-struct evm_digest {
-	struct ima_digest_data hdr;
-	char digest[64];
-};
-
-struct h_misc {
-	long unsigned int ino;
-	__u32 generation;
-	uid_t uid;
-	gid_t gid;
-	umode_t mode;
-};
-
-enum {
-	CRYPTO_MSG_ALG_REQUEST = 0,
-	CRYPTO_MSG_ALG_REGISTER = 1,
-	CRYPTO_MSG_ALG_LOADED = 2,
-};
-
-struct crypto_larval {
-	struct crypto_alg alg;
-	struct crypto_alg *adult;
-	struct completion completion;
-	u32 mask;
-};
-
-struct crypto_cipher {
-	struct crypto_tfm base;
-};
-
-enum {
-	CRYPTOA_UNSPEC = 0,
-	CRYPTOA_ALG = 1,
-	CRYPTOA_TYPE = 2,
-	CRYPTOA_U32 = 3,
-	__CRYPTOA_MAX = 4,
-};
-
-struct crypto_attr_alg {
-	char name[128];
-};
-
-struct crypto_attr_type {
-	u32 type;
-	u32 mask;
-};
-
-struct crypto_attr_u32 {
-	u32 num;
-};
-
-struct rtattr {
-	short unsigned int rta_len;
-	short unsigned int rta_type;
-};
-
-struct crypto_queue {
-	struct list_head list;
-	struct list_head *backlog;
-	unsigned int qlen;
-	unsigned int max_qlen;
-};
-
-enum {
-	NAPI_STATE_SCHED = 0,
-	NAPI_STATE_MISSED = 1,
-	NAPI_STATE_DISABLE = 2,
-	NAPI_STATE_NPSVC = 3,
-	NAPI_STATE_LISTED = 4,
-	NAPI_STATE_NO_BUSY_POLL = 5,
-	NAPI_STATE_IN_BUSY_POLL = 6,
-};
-
-enum bpf_xdp_mode {
-	XDP_MODE_SKB = 0,
-	XDP_MODE_DRV = 1,
-	XDP_MODE_HW = 2,
-	__MAX_XDP_MODE = 3,
-};
-
-enum {
-	NETIF_MSG_DRV_BIT = 0,
-	NETIF_MSG_PROBE_BIT = 1,
-	NETIF_MSG_LINK_BIT = 2,
-	NETIF_MSG_TIMER_BIT = 3,
-	NETIF_MSG_IFDOWN_BIT = 4,
-	NETIF_MSG_IFUP_BIT = 5,
-	NETIF_MSG_RX_ERR_BIT = 6,
-	NETIF_MSG_TX_ERR_BIT = 7,
-	NETIF_MSG_TX_QUEUED_BIT = 8,
-	NETIF_MSG_INTR_BIT = 9,
-	NETIF_MSG_TX_DONE_BIT = 10,
-	NETIF_MSG_RX_STATUS_BIT = 11,
-	NETIF_MSG_PKTDATA_BIT = 12,
-	NETIF_MSG_HW_BIT = 13,
-	NETIF_MSG_WOL_BIT = 14,
-	NETIF_MSG_CLASS_COUNT = 15,
-};
-
-struct scatter_walk {
-	struct scatterlist *sg;
-	unsigned int offset;
-};
-
-struct aead_request {
-	struct crypto_async_request base;
-	unsigned int assoclen;
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	void *__ctx[0];
-};
-
-struct crypto_aead;
-
-struct aead_alg {
-	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
-	int (*setauthsize)(struct crypto_aead *, unsigned int);
-	int (*encrypt)(struct aead_request *);
-	int (*decrypt)(struct aead_request *);
-	int (*init)(struct crypto_aead *);
-	void (*exit)(struct crypto_aead *);
-	unsigned int ivsize;
-	unsigned int maxauthsize;
-	unsigned int chunksize;
-	struct crypto_alg base;
-};
-
-struct crypto_aead {
-	unsigned int authsize;
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct aead_instance {
-	void (*free)(struct aead_instance *);
-	union {
-		struct {
-			char head[64];
-			struct crypto_instance base;
-		} s;
-		struct aead_alg alg;
-	};
-};
-
-struct crypto_aead_spawn {
-	struct crypto_spawn base;
-};
-
-enum crypto_attr_type_t {
-	CRYPTOCFGA_UNSPEC = 0,
-	CRYPTOCFGA_PRIORITY_VAL = 1,
-	CRYPTOCFGA_REPORT_LARVAL = 2,
-	CRYPTOCFGA_REPORT_HASH = 3,
-	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
-	CRYPTOCFGA_REPORT_AEAD = 5,
-	CRYPTOCFGA_REPORT_COMPRESS = 6,
-	CRYPTOCFGA_REPORT_RNG = 7,
-	CRYPTOCFGA_REPORT_CIPHER = 8,
-	CRYPTOCFGA_REPORT_AKCIPHER = 9,
-	CRYPTOCFGA_REPORT_KPP = 10,
-	CRYPTOCFGA_REPORT_ACOMP = 11,
-	CRYPTOCFGA_STAT_LARVAL = 12,
-	CRYPTOCFGA_STAT_HASH = 13,
-	CRYPTOCFGA_STAT_BLKCIPHER = 14,
-	CRYPTOCFGA_STAT_AEAD = 15,
-	CRYPTOCFGA_STAT_COMPRESS = 16,
-	CRYPTOCFGA_STAT_RNG = 17,
-	CRYPTOCFGA_STAT_CIPHER = 18,
-	CRYPTOCFGA_STAT_AKCIPHER = 19,
-	CRYPTOCFGA_STAT_KPP = 20,
-	CRYPTOCFGA_STAT_ACOMP = 21,
-	__CRYPTOCFGA_MAX = 22,
-};
-
-struct crypto_report_aead {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int maxauthsize;
-	unsigned int ivsize;
-};
-
-struct crypto_sync_skcipher;
-
-struct aead_geniv_ctx {
-	spinlock_t lock;
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *sknull;
-	u8 salt[0];
-};
-
-struct crypto_rng;
-
-struct rng_alg {
-	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
-	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
-	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
-	unsigned int seedsize;
-	struct crypto_alg base;
-};
-
-struct crypto_rng {
-	struct crypto_tfm base;
-};
-
-struct crypto_cipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_sync_skcipher {
-	struct crypto_skcipher base;
-};
-
-struct skcipher_instance {
-	void (*free)(struct skcipher_instance *);
-	union {
-		struct {
-			char head[64];
-			struct crypto_instance base;
-		} s;
-		struct skcipher_alg alg;
-	};
-};
-
-struct crypto_skcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct skcipher_walk {
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} src;
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} dst;
-	struct scatter_walk in;
-	unsigned int nbytes;
-	struct scatter_walk out;
-	unsigned int total;
-	struct list_head buffers;
-	u8 *page;
-	u8 *buffer;
-	u8 *oiv;
-	void *iv;
-	unsigned int ivsize;
-	int flags;
-	unsigned int blocksize;
-	unsigned int stride;
-	unsigned int alignmask;
-};
-
-struct skcipher_ctx_simple {
-	struct crypto_cipher *cipher;
-};
-
-struct crypto_report_blkcipher {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-};
-
-enum {
-	SKCIPHER_WALK_PHYS = 1,
-	SKCIPHER_WALK_SLOW = 2,
-	SKCIPHER_WALK_COPY = 4,
-	SKCIPHER_WALK_DIFF = 8,
-	SKCIPHER_WALK_SLEEP = 16,
-};
-
-struct skcipher_walk_buffer {
-	struct list_head entry;
-	struct scatter_walk dst;
-	unsigned int len;
-	u8 *data;
-	u8 buffer[0];
-};
-
-struct ahash_alg {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_ahash *);
-	void (*exit_tfm)(struct crypto_ahash *);
-	struct hash_alg_common halg;
-};
-
-struct crypto_hash_walk {
-	char *data;
-	unsigned int offset;
-	unsigned int alignmask;
-	struct page *pg;
-	unsigned int entrylen;
-	unsigned int total;
-	struct scatterlist *sg;
-	unsigned int flags;
-};
-
-struct ahash_instance {
-	void (*free)(struct ahash_instance *);
-	union {
-		struct {
-			char head[88];
-			struct crypto_instance base;
-		} s;
-		struct ahash_alg alg;
-	};
-};
-
-struct crypto_ahash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_hash {
-	char type[64];
-	unsigned int blocksize;
-	unsigned int digestsize;
-};
-
-struct ahash_request_priv {
-	crypto_completion_t complete;
-	void *data;
-	u8 *result;
-	u32 flags;
-	void *ubuf[0];
-};
-
-struct shash_instance {
-	void (*free)(struct shash_instance *);
-	union {
-		struct {
-			char head[96];
-			struct crypto_instance base;
-		} s;
-		struct shash_alg alg;
-	};
-};
-
-struct crypto_shash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_akcipher {
-	char type[64];
-};
-
-struct akcipher_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	void *__ctx[0];
-};
-
-struct crypto_akcipher {
-	struct crypto_tfm base;
-};
-
-struct akcipher_alg {
-	int (*sign)(struct akcipher_request *);
-	int (*verify)(struct akcipher_request *);
-	int (*encrypt)(struct akcipher_request *);
-	int (*decrypt)(struct akcipher_request *);
-	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
-	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
-	unsigned int (*max_size)(struct crypto_akcipher *);
-	int (*init)(struct crypto_akcipher *);
-	void (*exit)(struct crypto_akcipher *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-struct akcipher_instance {
-	void (*free)(struct akcipher_instance *);
-	union {
-		struct {
-			char head[80];
-			struct crypto_instance base;
-		} s;
-		struct akcipher_alg alg;
-	};
-};
-
-struct crypto_akcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_kpp {
-	char type[64];
-};
-
-struct kpp_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	void *__ctx[0];
-};
-
-struct crypto_kpp {
-	struct crypto_tfm base;
-};
-
-struct kpp_alg {
-	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
-	int (*generate_public_key)(struct kpp_request *);
-	int (*compute_shared_secret)(struct kpp_request *);
-	unsigned int (*max_size)(struct crypto_kpp *);
-	int (*init)(struct crypto_kpp *);
-	void (*exit)(struct crypto_kpp *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-enum asn1_class {
-	ASN1_UNIV = 0,
-	ASN1_APPL = 1,
-	ASN1_CONT = 2,
-	ASN1_PRIV = 3,
-};
-
-enum asn1_method {
-	ASN1_PRIM = 0,
-	ASN1_CONS = 1,
-};
-
-enum asn1_tag {
-	ASN1_EOC = 0,
-	ASN1_BOOL = 1,
-	ASN1_INT = 2,
-	ASN1_BTS = 3,
-	ASN1_OTS = 4,
-	ASN1_NULL = 5,
-	ASN1_OID = 6,
-	ASN1_ODE = 7,
-	ASN1_EXT = 8,
-	ASN1_REAL = 9,
-	ASN1_ENUM = 10,
-	ASN1_EPDV = 11,
-	ASN1_UTF8STR = 12,
-	ASN1_RELOID = 13,
-	ASN1_SEQ = 16,
-	ASN1_SET = 17,
-	ASN1_NUMSTR = 18,
-	ASN1_PRNSTR = 19,
-	ASN1_TEXSTR = 20,
-	ASN1_VIDSTR = 21,
-	ASN1_IA5STR = 22,
-	ASN1_UNITIM = 23,
-	ASN1_GENTIM = 24,
-	ASN1_GRASTR = 25,
-	ASN1_VISSTR = 26,
-	ASN1_GENSTR = 27,
-	ASN1_UNISTR = 28,
-	ASN1_CHRSTR = 29,
-	ASN1_BMPSTR = 30,
-	ASN1_LONG_TAG = 31,
-};
-
-typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
-
-struct asn1_decoder {
-	const unsigned char *machine;
-	size_t machlen;
-	const asn1_action_t *actions;
-};
-
-enum asn1_opcode {
-	ASN1_OP_MATCH = 0,
-	ASN1_OP_MATCH_OR_SKIP = 1,
-	ASN1_OP_MATCH_ACT = 2,
-	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
-	ASN1_OP_MATCH_JUMP = 4,
-	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
-	ASN1_OP_MATCH_ANY = 8,
-	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
-	ASN1_OP_MATCH_ANY_ACT = 10,
-	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
-	ASN1_OP_COND_MATCH_OR_SKIP = 17,
-	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
-	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
-	ASN1_OP_COND_MATCH_ANY = 24,
-	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
-	ASN1_OP_COND_MATCH_ANY_ACT = 26,
-	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
-	ASN1_OP_COND_FAIL = 28,
-	ASN1_OP_COMPLETE = 29,
-	ASN1_OP_ACT = 30,
-	ASN1_OP_MAYBE_ACT = 31,
-	ASN1_OP_END_SEQ = 32,
-	ASN1_OP_END_SET = 33,
-	ASN1_OP_END_SEQ_OF = 34,
-	ASN1_OP_END_SET_OF = 35,
-	ASN1_OP_END_SEQ_ACT = 36,
-	ASN1_OP_END_SET_ACT = 37,
-	ASN1_OP_END_SEQ_OF_ACT = 38,
-	ASN1_OP_END_SET_OF_ACT = 39,
-	ASN1_OP_RETURN = 40,
-	ASN1_OP__NR = 41,
-};
-
-enum rsapubkey_actions {
-	ACT_rsa_get_e = 0,
-	ACT_rsa_get_n = 1,
-	NR__rsapubkey_actions = 2,
-};
-
-enum rsaprivkey_actions {
-	ACT_rsa_get_d = 0,
-	ACT_rsa_get_dp = 1,
-	ACT_rsa_get_dq = 2,
-	ACT_rsa_get_e___2 = 3,
-	ACT_rsa_get_n___2 = 4,
-	ACT_rsa_get_p = 5,
-	ACT_rsa_get_q = 6,
-	ACT_rsa_get_qinv = 7,
-	NR__rsaprivkey_actions = 8,
-};
-
-typedef long unsigned int mpi_limb_t;
-
-struct gcry_mpi {
-	int alloced;
-	int nlimbs;
-	int nbits;
-	int sign;
-	unsigned int flags;
-	mpi_limb_t *d;
-};
-
-typedef struct gcry_mpi *MPI;
-
-struct rsa_key {
-	const u8 *n;
-	const u8 *e;
-	const u8 *d;
-	const u8 *p;
-	const u8 *q;
-	const u8 *dp;
-	const u8 *dq;
-	const u8 *qinv;
-	size_t n_sz;
-	size_t e_sz;
-	size_t d_sz;
-	size_t p_sz;
-	size_t q_sz;
-	size_t dp_sz;
-	size_t dq_sz;
-	size_t qinv_sz;
-};
-
-struct rsa_mpi_key {
-	MPI n;
-	MPI e;
-	MPI d;
-};
-
-struct asn1_decoder___2;
-
-struct rsa_asn1_template {
-	const char *name;
-	const u8 *data;
-	size_t size;
-};
-
-struct pkcs1pad_ctx {
-	struct crypto_akcipher *child;
-	unsigned int key_size;
-};
-
-struct pkcs1pad_inst_ctx {
-	struct crypto_akcipher_spawn spawn;
-	const struct rsa_asn1_template *digest_info;
-};
-
-struct pkcs1pad_request {
-	struct scatterlist in_sg[2];
-	struct scatterlist out_sg[1];
-	uint8_t *in_buf;
-	uint8_t *out_buf;
-	struct akcipher_request child_req;
-};
-
-struct crypto_report_acomp {
-	char type[64];
-};
-
-struct acomp_req {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int slen;
-	unsigned int dlen;
-	u32 flags;
-	void *__ctx[0];
-};
-
-struct crypto_acomp {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct acomp_alg {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	int (*init)(struct crypto_acomp *);
-	void (*exit)(struct crypto_acomp *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-struct crypto_report_comp {
-	char type[64];
-};
-
-struct crypto_scomp {
-	struct crypto_tfm base;
-};
-
-struct scomp_alg {
-	void * (*alloc_ctx)(struct crypto_scomp *);
-	void (*free_ctx)(struct crypto_scomp *, void *);
-	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	struct crypto_alg base;
-};
-
-struct scomp_scratch {
-	spinlock_t lock;
-	void *src;
-	void *dst;
-};
-
-struct cryptomgr_param {
-	struct rtattr *tb[34];
-	struct {
-		struct rtattr attr;
-		struct crypto_attr_type data;
-	} type;
-	union {
-		struct rtattr attr;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_alg data;
-		} alg;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_u32 data;
-		} nu32;
-	} attrs[32];
-	char template[128];
-	struct crypto_larval *larval;
-	u32 otype;
-	u32 omask;
-};
-
-struct crypto_test_param {
-	char driver[128];
-	char alg[128];
-	u32 type;
-};
-
-struct hmac_ctx {
-	struct crypto_shash *hash;
-};
-
-struct md5_state {
-	u32 hash[4];
-	u32 block[16];
-	u64 byte_count;
-};
-
-struct sha1_state {
-	u32 state[5];
-	u64 count;
-	u8 buffer[64];
-};
-
-typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
-
-struct sha256_state {
-	u32 state[8];
-	u64 count;
-	u8 buf[64];
-};
-
-struct sha512_state {
-	u64 state[8];
-	u64 count[2];
-	u8 buf[128];
-};
-
-typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
-
-typedef struct {
-	u64 a;
-	u64 b;
-} u128;
-
-typedef struct {
-	__be64 a;
-	__be64 b;
-} be128;
-
-typedef struct {
-	__le64 b;
-	__le64 a;
-} le128;
-
-struct gf128mul_4k {
-	be128 t[256];
-};
-
-struct gf128mul_64k {
-	struct gf128mul_4k *t[16];
-};
-
-struct crypto_cts_ctx {
-	struct crypto_skcipher *child;
-};
-
-struct crypto_cts_reqctx {
-	struct scatterlist sg[2];
-	unsigned int offset;
-	struct skcipher_request subreq;
-};
-
-struct xts_tfm_ctx {
-	struct crypto_skcipher *child;
-	struct crypto_cipher *tweak;
-};
-
-struct xts_instance_ctx {
-	struct crypto_skcipher_spawn spawn;
-	char name[128];
-};
-
-struct xts_request_ctx {
-	le128 t;
-	struct scatterlist *tail;
-	struct scatterlist sg[2];
-	struct skcipher_request subreq;
-};
-
-struct crypto_rfc3686_ctx {
-	struct crypto_skcipher *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc3686_req_ctx {
-	u8 iv[16];
-	struct skcipher_request subreq;
-};
-
-struct gcm_instance_ctx {
-	struct crypto_skcipher_spawn ctr;
-	struct crypto_ahash_spawn ghash;
-};
-
-struct crypto_gcm_ctx {
-	struct crypto_skcipher *ctr;
-	struct crypto_ahash *ghash;
-};
-
-struct crypto_rfc4106_ctx {
-	struct crypto_aead *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4106_req_ctx {
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct aead_request subreq;
-};
-
-struct crypto_rfc4543_instance_ctx {
-	struct crypto_aead_spawn aead;
-};
-
-struct crypto_rfc4543_ctx {
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *null;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4543_req_ctx {
-	struct aead_request subreq;
-};
-
-struct crypto_gcm_ghash_ctx {
-	unsigned int cryptlen;
-	struct scatterlist *src;
-	int (*complete)(struct aead_request *, u32);
-};
-
-struct crypto_gcm_req_priv_ctx {
-	u8 iv[16];
-	u8 auth_tag[16];
-	u8 iauth_tag[16];
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct scatterlist sg;
-	struct crypto_gcm_ghash_ctx ghash_ctx;
-	union {
-		struct ahash_request ahreq;
-		struct skcipher_request skreq;
-	} u;
-};
-
-struct crypto_aes_ctx {
-	u32 key_enc[60];
-	u32 key_dec[60];
-	u32 key_length;
-};
-
-struct chksum_ctx {
-	u32 key;
-};
-
-struct chksum_desc_ctx {
-	u32 crc;
-};
-
-struct chksum_desc_ctx___2 {
-	__u16 crc;
-};
-
-struct lzo_ctx {
-	void *lzo_comp_mem;
-};
-
-struct lzorle_ctx {
-	void *lzorle_comp_mem;
-};
-
-struct crypto_report_rng {
-	char type[64];
-	unsigned int seedsize;
-};
-
-struct random_ready_callback {
-	struct list_head list;
-	void (*func)(struct random_ready_callback *);
-	struct module *owner;
-};
-
-struct drbg_string {
-	const unsigned char *buf;
-	size_t len;
-	struct list_head list;
-};
-
-typedef uint32_t drbg_flag_t;
-
-struct drbg_core {
-	drbg_flag_t flags;
-	__u8 statelen;
-	__u8 blocklen_bytes;
-	char cra_name[128];
-	char backend_cra_name[128];
-};
-
-struct drbg_state;
-
-struct drbg_state_ops {
-	int (*update)(struct drbg_state *, struct list_head *, int);
-	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
-	int (*crypto_init)(struct drbg_state *);
-	int (*crypto_fini)(struct drbg_state *);
-};
-
-struct drbg_state {
-	struct mutex drbg_mutex;
-	unsigned char *V;
-	unsigned char *Vbuf;
-	unsigned char *C;
-	unsigned char *Cbuf;
-	size_t reseed_ctr;
-	size_t reseed_threshold;
-	unsigned char *scratchpad;
-	unsigned char *scratchpadbuf;
-	void *priv_data;
-	struct crypto_skcipher *ctr_handle;
-	struct skcipher_request *ctr_req;
-	__u8 *outscratchpadbuf;
-	__u8 *outscratchpad;
-	struct crypto_wait ctr_wait;
-	struct scatterlist sg_in;
-	struct scatterlist sg_out;
-	bool seeded;
-	bool pr;
-	bool fips_primed;
-	unsigned char *prev;
-	struct work_struct seed_work;
-	struct crypto_rng *jent;
-	const struct drbg_state_ops *d_ops;
-	const struct drbg_core *core;
-	struct drbg_string test_data;
-	struct random_ready_callback random_ready;
-};
-
-enum drbg_prefixes {
-	DRBG_PREFIX0 = 0,
-	DRBG_PREFIX1 = 1,
-	DRBG_PREFIX2 = 2,
-	DRBG_PREFIX3 = 3,
-};
-
-struct sdesc {
-	struct shash_desc shash;
-	char ctx[0];
-};
-
-struct s {
-	__be32 conv;
-};
-
-struct rand_data {
-	__u64 data;
-	__u64 old_data;
-	__u64 prev_time;
-	__u64 last_delta;
-	__s64 last_delta2;
-	unsigned int osr;
-	unsigned char *mem;
-	unsigned int memlocation;
-	unsigned int memblocks;
-	unsigned int memblocksize;
-	unsigned int memaccessloops;
-	int rct_count;
-	unsigned int apt_observations;
-	unsigned int apt_count;
-	unsigned int apt_base;
-	unsigned int apt_base_set: 1;
-	unsigned int health_failure: 1;
-};
-
-struct rand_data___2;
-
-struct jitterentropy {
-	spinlock_t jent_lock;
-	struct rand_data___2 *entropy_collector;
-	unsigned int reset_cnt;
-};
-
-struct ghash_ctx {
-	struct gf128mul_4k *gf128;
-};
-
-struct ghash_desc_ctx {
-	u8 buffer[16];
-	u32 bytes;
-};
-
-typedef enum {
-	ZSTD_fast = 0,
-	ZSTD_dfast = 1,
-	ZSTD_greedy = 2,
-	ZSTD_lazy = 3,
-	ZSTD_lazy2 = 4,
-	ZSTD_btlazy2 = 5,
-	ZSTD_btopt = 6,
-	ZSTD_btopt2 = 7,
-} ZSTD_strategy;
-
-typedef struct {
-	unsigned int windowLog;
-	unsigned int chainLog;
-	unsigned int hashLog;
-	unsigned int searchLog;
-	unsigned int searchLength;
-	unsigned int targetLength;
-	ZSTD_strategy strategy;
-} ZSTD_compressionParameters;
-
-typedef struct {
-	unsigned int contentSizeFlag;
-	unsigned int checksumFlag;
-	unsigned int noDictIDFlag;
-} ZSTD_frameParameters;
-
-typedef struct {
-	ZSTD_compressionParameters cParams;
-	ZSTD_frameParameters fParams;
-} ZSTD_parameters;
-
-struct ZSTD_CCtx_s;
-
-typedef struct ZSTD_CCtx_s ZSTD_CCtx;
-
-struct ZSTD_DCtx_s;
-
-typedef struct ZSTD_DCtx_s ZSTD_DCtx;
-
-struct zstd_ctx {
-	ZSTD_CCtx *cctx;
-	ZSTD_DCtx *dctx;
-	void *cwksp;
-	void *dwksp;
-};
-
-enum asymmetric_payload_bits {
-	asym_crypto = 0,
-	asym_subtype = 1,
-	asym_key_ids = 2,
-	asym_auth = 3,
-};
-
-struct asymmetric_key_ids {
-	void *id[2];
-};
-
-struct asymmetric_key_subtype {
-	struct module *owner;
-	const char *name;
-	short unsigned int name_len;
-	void (*describe)(const struct key *, struct seq_file *);
-	void (*destroy)(void *, void *);
-	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
-	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
-	int (*verify_signature)(const struct key *, const struct public_key_signature *);
-};
-
-struct asymmetric_key_parser {
-	struct list_head link;
-	struct module *owner;
-	const char *name;
-	int (*parse)(struct key_preparsed_payload *);
-};
-
-enum OID {
-	OID_id_dsa_with_sha1 = 0,
-	OID_id_dsa = 1,
-	OID_id_ecdsa_with_sha1 = 2,
-	OID_id_ecPublicKey = 3,
-	OID_rsaEncryption = 4,
-	OID_md2WithRSAEncryption = 5,
-	OID_md3WithRSAEncryption = 6,
-	OID_md4WithRSAEncryption = 7,
-	OID_sha1WithRSAEncryption = 8,
-	OID_sha256WithRSAEncryption = 9,
-	OID_sha384WithRSAEncryption = 10,
-	OID_sha512WithRSAEncryption = 11,
-	OID_sha224WithRSAEncryption = 12,
-	OID_data = 13,
-	OID_signed_data = 14,
-	OID_email_address = 15,
-	OID_contentType = 16,
-	OID_messageDigest = 17,
-	OID_signingTime = 18,
-	OID_smimeCapabilites = 19,
-	OID_smimeAuthenticatedAttrs = 20,
-	OID_md2 = 21,
-	OID_md4 = 22,
-	OID_md5 = 23,
-	OID_msIndirectData = 24,
-	OID_msStatementType = 25,
-	OID_msSpOpusInfo = 26,
-	OID_msPeImageDataObjId = 27,
-	OID_msIndividualSPKeyPurpose = 28,
-	OID_msOutlookExpress = 29,
-	OID_certAuthInfoAccess = 30,
-	OID_sha1 = 31,
-	OID_sha256 = 32,
-	OID_sha384 = 33,
-	OID_sha512 = 34,
-	OID_sha224 = 35,
-	OID_commonName = 36,
-	OID_surname = 37,
-	OID_countryName = 38,
-	OID_locality = 39,
-	OID_stateOrProvinceName = 40,
-	OID_organizationName = 41,
-	OID_organizationUnitName = 42,
-	OID_title = 43,
-	OID_description = 44,
-	OID_name = 45,
-	OID_givenName = 46,
-	OID_initials = 47,
-	OID_generationalQualifier = 48,
-	OID_subjectKeyIdentifier = 49,
-	OID_keyUsage = 50,
-	OID_subjectAltName = 51,
-	OID_issuerAltName = 52,
-	OID_basicConstraints = 53,
-	OID_crlDistributionPoints = 54,
-	OID_certPolicies = 55,
-	OID_authorityKeyIdentifier = 56,
-	OID_extKeyUsage = 57,
-	OID_gostCPSignA = 58,
-	OID_gostCPSignB = 59,
-	OID_gostCPSignC = 60,
-	OID_gost2012PKey256 = 61,
-	OID_gost2012PKey512 = 62,
-	OID_gost2012Digest256 = 63,
-	OID_gost2012Digest512 = 64,
-	OID_gost2012Signature256 = 65,
-	OID_gost2012Signature512 = 66,
-	OID_gostTC26Sign256A = 67,
-	OID_gostTC26Sign256B = 68,
-	OID_gostTC26Sign256C = 69,
-	OID_gostTC26Sign256D = 70,
-	OID_gostTC26Sign512A = 71,
-	OID_gostTC26Sign512B = 72,
-	OID_gostTC26Sign512C = 73,
-	OID_sm2 = 74,
-	OID_sm3 = 75,
-	OID_SM2_with_SM3 = 76,
-	OID_sm3WithRSAEncryption = 77,
-	OID__NR = 78,
-};
-
-struct public_key {
-	void *key;
-	u32 keylen;
-	enum OID algo;
-	void *params;
-	u32 paramlen;
-	bool key_is_private;
-	const char *id_type;
-	const char *pkey_algo;
-};
-
-enum x509_actions {
-	ACT_x509_extract_key_data = 0,
-	ACT_x509_extract_name_segment = 1,
-	ACT_x509_note_OID = 2,
-	ACT_x509_note_issuer = 3,
-	ACT_x509_note_not_after = 4,
-	ACT_x509_note_not_before = 5,
-	ACT_x509_note_params = 6,
-	ACT_x509_note_pkey_algo = 7,
-	ACT_x509_note_serial = 8,
-	ACT_x509_note_signature = 9,
-	ACT_x509_note_subject = 10,
-	ACT_x509_note_tbs_certificate = 11,
-	ACT_x509_process_extension = 12,
-	NR__x509_actions = 13,
-};
-
-enum x509_akid_actions {
-	ACT_x509_akid_note_kid = 0,
-	ACT_x509_akid_note_name = 1,
-	ACT_x509_akid_note_serial = 2,
-	ACT_x509_extract_name_segment___2 = 3,
-	ACT_x509_note_OID___2 = 4,
-	NR__x509_akid_actions = 5,
-};
-
-struct x509_certificate {
-	struct x509_certificate *next;
-	struct x509_certificate *signer;
-	struct public_key *pub;
-	struct public_key_signature *sig;
-	char *issuer;
-	char *subject;
-	struct asymmetric_key_id *id;
-	struct asymmetric_key_id *skid;
-	time64_t valid_from;
-	time64_t valid_to;
-	const void *tbs;
-	unsigned int tbs_size;
-	unsigned int raw_sig_size;
-	const void *raw_sig;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_subject;
-	unsigned int raw_subject_size;
-	unsigned int raw_skid_size;
-	const void *raw_skid;
-	unsigned int index;
-	bool seen;
-	bool verified;
-	bool self_signed;
-	bool unsupported_key;
-	bool unsupported_sig;
-	bool blacklisted;
-};
-
-struct x509_parse_context {
-	struct x509_certificate *cert;
-	long unsigned int data;
-	const void *cert_start;
-	const void *key;
-	size_t key_size;
-	const void *params;
-	size_t params_size;
-	enum OID key_algo;
-	enum OID last_oid;
-	enum OID algo_oid;
-	unsigned char nr_mpi;
-	u8 o_size;
-	u8 cn_size;
-	u8 email_size;
-	u16 o_offset;
-	u16 cn_offset;
-	u16 email_offset;
-	unsigned int raw_akid_size;
-	const void *raw_akid;
-	const void *akid_raw_issuer;
-	unsigned int akid_raw_issuer_size;
-};
-
-enum pkcs7_actions {
-	ACT_pkcs7_check_content_type = 0,
-	ACT_pkcs7_extract_cert = 1,
-	ACT_pkcs7_note_OID = 2,
-	ACT_pkcs7_note_certificate_list = 3,
-	ACT_pkcs7_note_content = 4,
-	ACT_pkcs7_note_data = 5,
-	ACT_pkcs7_note_signed_info = 6,
-	ACT_pkcs7_note_signeddata_version = 7,
-	ACT_pkcs7_note_signerinfo_version = 8,
-	ACT_pkcs7_sig_note_authenticated_attr = 9,
-	ACT_pkcs7_sig_note_digest_algo = 10,
-	ACT_pkcs7_sig_note_issuer = 11,
-	ACT_pkcs7_sig_note_pkey_algo = 12,
-	ACT_pkcs7_sig_note_serial = 13,
-	ACT_pkcs7_sig_note_set_of_authattrs = 14,
-	ACT_pkcs7_sig_note_signature = 15,
-	ACT_pkcs7_sig_note_skid = 16,
-	NR__pkcs7_actions = 17,
-};
-
-struct pkcs7_signed_info {
-	struct pkcs7_signed_info *next;
-	struct x509_certificate *signer;
-	unsigned int index;
-	bool unsupported_crypto;
-	bool blacklisted;
-	const void *msgdigest;
-	unsigned int msgdigest_len;
-	unsigned int authattrs_len;
-	const void *authattrs;
-	long unsigned int aa_set;
-	time64_t signing_time;
-	struct public_key_signature *sig;
-};
-
-struct pkcs7_message___2 {
-	struct x509_certificate *certs;
-	struct x509_certificate *crl;
-	struct pkcs7_signed_info *signed_infos;
-	u8 version;
-	bool have_authattrs;
-	enum OID data_type;
-	size_t data_len;
-	size_t data_hdrlen;
-	const void *data;
-};
-
-struct pkcs7_parse_context {
-	struct pkcs7_message___2 *msg;
-	struct pkcs7_signed_info *sinfo;
-	struct pkcs7_signed_info **ppsinfo;
-	struct x509_certificate *certs;
-	struct x509_certificate **ppcerts;
-	long unsigned int data;
-	enum OID last_oid;
-	unsigned int x509_index;
-	unsigned int sinfo_index;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_skid;
-	unsigned int raw_skid_size;
-	bool expect_skid;
-};
-
-struct biovec_slab {
-	int nr_vecs;
-	char *name;
-	struct kmem_cache *slab;
-};
-
-enum rq_qos_id {
-	RQ_QOS_WBT = 0,
-	RQ_QOS_LATENCY = 1,
-	RQ_QOS_COST = 2,
-};
-
-struct rq_qos_ops;
-
-struct rq_qos {
-	struct rq_qos_ops *ops;
-	struct request_queue *q;
-	enum rq_qos_id id;
-	struct rq_qos *next;
-};
-
-enum hctx_type {
-	HCTX_TYPE_DEFAULT = 0,
-	HCTX_TYPE_READ = 1,
-	HCTX_TYPE_POLL = 2,
-	HCTX_MAX_TYPES = 3,
-};
-
-enum xen_domain_type {
-	XEN_NATIVE = 0,
-	XEN_PV_DOMAIN = 1,
-	XEN_HVM_DOMAIN = 2,
-};
-
-struct blk_mq_debugfs_attr;
-
-struct rq_qos_ops {
-	void (*throttle)(struct rq_qos *, struct bio *);
-	void (*track)(struct rq_qos *, struct request *, struct bio *);
-	void (*merge)(struct rq_qos *, struct request *, struct bio *);
-	void (*issue)(struct rq_qos *, struct request *);
-	void (*requeue)(struct rq_qos *, struct request *);
-	void (*done)(struct rq_qos *, struct request *);
-	void (*done_bio)(struct rq_qos *, struct bio *);
-	void (*cleanup)(struct rq_qos *, struct bio *);
-	void (*queue_depth_changed)(struct rq_qos *);
-	void (*exit)(struct rq_qos *);
-	const struct blk_mq_debugfs_attr *debugfs_attrs;
-};
-
-struct bio_slab {
-	struct kmem_cache *slab;
-	unsigned int slab_ref;
-	unsigned int slab_size;
-	char name[8];
-};
-
-enum {
-	BLK_MQ_F_SHOULD_MERGE = 1,
-	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
-	BLK_MQ_F_STACKING = 4,
-	BLK_MQ_F_TAG_HCTX_SHARED = 8,
-	BLK_MQ_F_BLOCKING = 32,
-	BLK_MQ_F_NO_SCHED = 64,
-	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
-	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
-	BLK_MQ_S_STOPPED = 0,
-	BLK_MQ_S_TAG_ACTIVE = 1,
-	BLK_MQ_S_SCHED_RESTART = 2,
-	BLK_MQ_S_INACTIVE = 3,
-	BLK_MQ_MAX_DEPTH = 10240,
-	BLK_MQ_CPU_WORK_BATCH = 8,
-};
-
-enum {
-	WBT_RWQ_BG = 0,
-	WBT_RWQ_KSWAPD = 1,
-	WBT_RWQ_DISCARD = 2,
-	WBT_NUM_RWQ = 3,
-};
-
-struct req_iterator {
-	struct bvec_iter iter;
-	struct bio *bio;
-};
-
-struct blk_plug_cb;
-
-typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
-
-struct blk_plug_cb {
-	struct list_head list;
-	blk_plug_cb_fn callback;
-	void *data;
-};
-
-enum {
-	BLK_MQ_REQ_NOWAIT = 1,
-	BLK_MQ_REQ_RESERVED = 2,
-	BLK_MQ_REQ_PM = 4,
-};
-
-struct trace_event_raw_block_buffer {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_requeue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	unsigned int bytes;
-	char rwbs[8];
-	char comm[16];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_bounce {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_merge {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_queue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_get_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_plug {
-	struct trace_entry ent;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_unplug {
-	struct trace_entry ent;
-	int nr_rq;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_split {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	sector_t new_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	unsigned int nr_bios;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_block_buffer {};
-
-struct trace_event_data_offsets_block_rq_requeue {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq_complete {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_bio_bounce {};
-
-struct trace_event_data_offsets_block_bio_complete {};
-
-struct trace_event_data_offsets_block_bio_merge {};
-
-struct trace_event_data_offsets_block_bio_queue {};
-
-struct trace_event_data_offsets_block_get_rq {};
-
-struct trace_event_data_offsets_block_plug {};
-
-struct trace_event_data_offsets_block_unplug {};
-
-struct trace_event_data_offsets_block_split {};
-
-struct trace_event_data_offsets_block_bio_remap {};
-
-struct trace_event_data_offsets_block_rq_remap {};
-
-typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_rq_requeue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);
-
-typedef void (*btf_trace_block_rq_insert)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_issue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_merge)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_bio_bounce)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_backmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_frontmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_queue)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_getrq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_sleeprq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
-
-typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
-
-typedef void (*btf_trace_block_split)(void *, struct request_queue *, struct bio *, unsigned int);
-
-typedef void (*btf_trace_block_bio_remap)(void *, struct request_queue *, struct bio *, dev_t, sector_t);
-
-typedef void (*btf_trace_block_rq_remap)(void *, struct request_queue *, struct request *, dev_t, sector_t);
-
-enum {
-	BLK_MQ_NO_TAG = 4294967295,
-	BLK_MQ_TAG_MIN = 1,
-	BLK_MQ_TAG_MAX = 4294967294,
-};
-
-struct queue_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct request_queue *, char *);
-	ssize_t (*store)(struct request_queue *, const char *, size_t);
-};
-
-enum {
-	REQ_FSEQ_PREFLUSH = 1,
-	REQ_FSEQ_DATA = 2,
-	REQ_FSEQ_POSTFLUSH = 4,
-	REQ_FSEQ_DONE = 8,
-	REQ_FSEQ_ACTIONS = 7,
-	FLUSH_PENDING_TIMEOUT = 5000,
-};
-
-enum {
-	ICQ_EXITED = 4,
-	ICQ_DESTROYED = 8,
-};
-
-struct rq_map_data {
-	struct page **pages;
-	int page_order;
-	int nr_entries;
-	long unsigned int offset;
-	int null_mapped;
-	int from_user;
-};
-
-struct bio_map_data {
-	bool is_our_pages: 1;
-	bool is_null_mapped: 1;
-	struct iov_iter iter;
-	struct iovec iov[0];
-};
-
-enum bio_merge_status {
-	BIO_MERGE_OK = 0,
-	BIO_MERGE_NONE = 1,
-	BIO_MERGE_FAILED = 2,
-};
-
-typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
-
-enum {
-	BLK_MQ_UNIQUE_TAG_BITS = 16,
-	BLK_MQ_UNIQUE_TAG_MASK = 65535,
-};
-
-struct mq_inflight {
-	struct hd_struct *part;
-	unsigned int inflight[2];
-};
-
-struct flush_busy_ctx_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct list_head *list;
-};
-
-struct dispatch_rq_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct request *rq;
-};
-
-enum prep_dispatch {
-	PREP_DISPATCH_OK = 0,
-	PREP_DISPATCH_NO_TAG = 1,
-	PREP_DISPATCH_NO_BUDGET = 2,
-};
-
-struct rq_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	bool has_rq;
-};
-
-struct blk_mq_qe_pair {
-	struct list_head node;
-	struct request_queue *q;
-	struct elevator_type *type;
-};
-
-struct sbq_wait {
-	struct sbitmap_queue *sbq;
-	struct wait_queue_entry wait;
-};
-
-typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);
-
-typedef bool busy_tag_iter_fn(struct request *, void *, bool);
-
-struct bt_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	busy_iter_fn *fn;
-	void *data;
-	bool reserved;
-};
-
-struct bt_tags_iter_data {
-	struct blk_mq_tags *tags;
-	busy_tag_iter_fn *fn;
-	void *data;
-	unsigned int flags;
-};
-
-struct blk_queue_stats {
-	struct list_head callbacks;
-	spinlock_t lock;
-	bool enable_accounting;
-};
-
-struct blk_mq_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);
-};
-
-struct blk_mq_hw_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
-};
-
-typedef u32 compat_caddr_t;
-
-struct hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	long unsigned int start;
-};
-
-struct blkpg_ioctl_arg {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-};
-
-struct blkpg_partition {
-	long long int start;
-	long long int length;
-	int pno;
-	char devname[64];
-	char volname[64];
-};
-
-struct pr_reservation {
-	__u64 key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_registration {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct pr_preempt {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_clear {
-	__u64 key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct compat_blkpg_ioctl_arg {
-	compat_int_t op;
-	compat_int_t flags;
-	compat_int_t datalen;
-	compat_caddr_t data;
-};
-
-struct compat_hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	u32 start;
-};
-
-struct klist_node;
-
-struct klist {
-	spinlock_t k_lock;
-	struct list_head k_list;
-	void (*get)(struct klist_node *);
-	void (*put)(struct klist_node *);
-};
-
-struct klist_node {
-	void *n_klist;
-	struct list_head n_node;
-	struct kref n_ref;
-};
-
-struct klist_iter {
-	struct klist *i_klist;
-	struct klist_node *i_cur;
-};
-
-struct class_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-enum {
-	DISK_EVENT_FLAG_POLL = 1,
-	DISK_EVENT_FLAG_UEVENT = 2,
-};
-
-struct disk_events {
-	struct list_head node;
-	struct gendisk *disk;
-	spinlock_t lock;
-	struct mutex block_mutex;
-	int block;
-	unsigned int pending;
-	unsigned int clearing;
-	long int poll_msecs;
-	struct delayed_work dwork;
-};
-
-struct badblocks {
-	struct device *dev;
-	int count;
-	int unacked_exist;
-	int shift;
-	u64 *page;
-	int changed;
-	seqlock_t lock;
-	sector_t sector;
-	sector_t size;
-};
-
-struct disk_part_iter {
-	struct gendisk *disk;
-	struct hd_struct *part;
-	int idx;
-	unsigned int flags;
-};
-
-struct blk_major_name {
-	struct blk_major_name *next;
-	int major;
-	char name[16];
-};
-
-enum {
-	IOPRIO_WHO_PROCESS = 1,
-	IOPRIO_WHO_PGRP = 2,
-	IOPRIO_WHO_USER = 3,
-};
-
-struct parsed_partitions {
-	struct block_device *bdev;
-	char name[32];
-	struct {
-		sector_t from;
-		sector_t size;
-		int flags;
-		bool has_info;
-		struct partition_meta_info info;
-	} *parts;
-	int next;
-	int limit;
-	bool access_beyond_eod;
-	char *pp_buf;
-};
-
-typedef struct {
-	struct page *v;
-} Sector;
-
-struct RigidDiskBlock {
-	__u32 rdb_ID;
-	__be32 rdb_SummedLongs;
-	__s32 rdb_ChkSum;
-	__u32 rdb_HostID;
-	__be32 rdb_BlockBytes;
-	__u32 rdb_Flags;
-	__u32 rdb_BadBlockList;
-	__be32 rdb_PartitionList;
-	__u32 rdb_FileSysHeaderList;
-	__u32 rdb_DriveInit;
-	__u32 rdb_Reserved1[6];
-	__u32 rdb_Cylinders;
-	__u32 rdb_Sectors;
-	__u32 rdb_Heads;
-	__u32 rdb_Interleave;
-	__u32 rdb_Park;
-	__u32 rdb_Reserved2[3];
-	__u32 rdb_WritePreComp;
-	__u32 rdb_ReducedWrite;
-	__u32 rdb_StepRate;
-	__u32 rdb_Reserved3[5];
-	__u32 rdb_RDBBlocksLo;
-	__u32 rdb_RDBBlocksHi;
-	__u32 rdb_LoCylinder;
-	__u32 rdb_HiCylinder;
-	__u32 rdb_CylBlocks;
-	__u32 rdb_AutoParkSeconds;
-	__u32 rdb_HighRDSKBlock;
-	__u32 rdb_Reserved4;
-	char rdb_DiskVendor[8];
-	char rdb_DiskProduct[16];
-	char rdb_DiskRevision[4];
-	char rdb_ControllerVendor[8];
-	char rdb_ControllerProduct[16];
-	char rdb_ControllerRevision[4];
-	__u32 rdb_Reserved5[10];
-};
-
-struct PartitionBlock {
-	__be32 pb_ID;
-	__be32 pb_SummedLongs;
-	__s32 pb_ChkSum;
-	__u32 pb_HostID;
-	__be32 pb_Next;
-	__u32 pb_Flags;
-	__u32 pb_Reserved1[2];
-	__u32 pb_DevFlags;
-	__u8 pb_DriveName[32];
-	__u32 pb_Reserved2[15];
-	__be32 pb_Environment[17];
-	__u32 pb_EReserved[15];
-};
-
-struct partition_info {
-	u8 flg;
-	char id[3];
-	__be32 st;
-	__be32 siz;
-};
-
-struct rootsector {
-	char unused[342];
-	struct partition_info icdpart[8];
-	char unused2[12];
-	u32 hd_siz;
-	struct partition_info part[4];
-	u32 bsl_st;
-	u32 bsl_cnt;
-	u16 checksum;
-} __attribute__((packed));
-
-struct mac_partition {
-	__be16 signature;
-	__be16 res1;
-	__be32 map_count;
-	__be32 start_block;
-	__be32 block_count;
-	char name[32];
-	char type[32];
-	__be32 data_start;
-	__be32 data_count;
-	__be32 status;
-	__be32 boot_start;
-	__be32 boot_size;
-	__be32 boot_load;
-	__be32 boot_load2;
-	__be32 boot_entry;
-	__be32 boot_entry2;
-	__be32 boot_cksum;
-	char processor[16];
-};
-
-struct mac_driver_desc {
-	__be16 signature;
-	__be16 block_size;
-	__be32 block_count;
-};
-
-struct msdos_partition {
-	u8 boot_ind;
-	u8 head;
-	u8 sector;
-	u8 cyl;
-	u8 sys_ind;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_cyl;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct frag {
-	struct list_head list;
-	u32 group;
-	u8 num;
-	u8 rec;
-	u8 map;
-	u8 data[0];
-};
-
-struct privhead {
-	u16 ver_major;
-	u16 ver_minor;
-	u64 logical_disk_start;
-	u64 logical_disk_size;
-	u64 config_start;
-	u64 config_size;
-	uuid_t disk_id;
-};
-
-struct tocblock {
-	u8 bitmap1_name[16];
-	u64 bitmap1_start;
-	u64 bitmap1_size;
-	u8 bitmap2_name[16];
-	u64 bitmap2_start;
-	u64 bitmap2_size;
-};
-
-struct vmdb {
-	u16 ver_major;
-	u16 ver_minor;
-	u32 vblk_size;
-	u32 vblk_offset;
-	u32 last_vblk_seq;
-};
-
-struct vblk_comp {
-	u8 state[16];
-	u64 parent_id;
-	u8 type;
-	u8 children;
-	u16 chunksize;
-};
-
-struct vblk_dgrp {
-	u8 disk_id[64];
-};
-
-struct vblk_disk {
-	uuid_t disk_id;
-	u8 alt_name[128];
-};
-
-struct vblk_part {
-	u64 start;
-	u64 size;
-	u64 volume_offset;
-	u64 parent_id;
-	u64 disk_id;
-	u8 partnum;
-};
-
-struct vblk_volu {
-	u8 volume_type[16];
-	u8 volume_state[16];
-	u8 guid[16];
-	u8 drive_hint[4];
-	u64 size;
-	u8 partition_type;
-};
-
-struct vblk {
-	u8 name[64];
-	u64 obj_id;
-	u32 sequence;
-	u8 flags;
-	u8 type;
-	union {
-		struct vblk_comp comp;
-		struct vblk_dgrp dgrp;
-		struct vblk_disk disk;
-		struct vblk_part part;
-		struct vblk_volu volu;
-	} vblk;
-	struct list_head list;
-};
-
-struct ldmdb {
-	struct privhead ph;
-	struct tocblock toc;
-	struct vmdb vm;
-	struct list_head v_dgrp;
-	struct list_head v_disk;
-	struct list_head v_volu;
-	struct list_head v_comp;
-	struct list_head v_part;
-};
-
-struct fat_boot_sector {
-	__u8 ignored[3];
-	__u8 system_id[8];
-	__u8 sector_size[2];
-	__u8 sec_per_clus;
-	__le16 reserved;
-	__u8 fats;
-	__u8 dir_entries[2];
-	__u8 sectors[2];
-	__u8 media;
-	__le16 fat_length;
-	__le16 secs_track;
-	__le16 heads;
-	__le32 hidden;
-	__le32 total_sect;
-	union {
-		struct {
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat16;
-		struct {
-			__le32 length;
-			__le16 flags;
-			__u8 version[2];
-			__le32 root_cluster;
-			__le16 info_sector;
-			__le16 backup_boot;
-			__le16 reserved2[6];
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat32;
-	};
-};
-
-enum msdos_sys_ind {
-	DOS_EXTENDED_PARTITION = 5,
-	LINUX_EXTENDED_PARTITION = 133,
-	WIN98_EXTENDED_PARTITION = 15,
-	LINUX_DATA_PARTITION = 131,
-	LINUX_LVM_PARTITION = 142,
-	LINUX_RAID_PARTITION = 253,
-	SOLARIS_X86_PARTITION = 130,
-	NEW_SOLARIS_X86_PARTITION = 191,
-	DM6_AUX1PARTITION = 81,
-	DM6_AUX3PARTITION = 83,
-	DM6_PARTITION = 84,
-	EZD_PARTITION = 85,
-	FREEBSD_PARTITION = 165,
-	OPENBSD_PARTITION = 166,
-	NETBSD_PARTITION = 169,
-	BSDI_PARTITION = 183,
-	MINIX_PARTITION = 129,
-	UNIXWARE_PARTITION = 99,
-};
-
-struct solaris_x86_slice {
-	__le16 s_tag;
-	__le16 s_flag;
-	__le32 s_start;
-	__le32 s_size;
-};
-
-struct solaris_x86_vtoc {
-	unsigned int v_bootinfo[3];
-	__le32 v_sanity;
-	__le32 v_version;
-	char v_volume[8];
-	__le16 v_sectorsz;
-	__le16 v_nparts;
-	unsigned int v_reserved[10];
-	struct solaris_x86_slice v_slice[16];
-	unsigned int timestamp[16];
-	char v_asciilabel[128];
-};
-
-struct bsd_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	__u8 p_fstype;
-	__u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct bsd_disklabel {
-	__le32 d_magic;
-	__s16 d_type;
-	__s16 d_subtype;
-	char d_typename[16];
-	char d_packname[16];
-	__u32 d_secsize;
-	__u32 d_nsectors;
-	__u32 d_ntracks;
-	__u32 d_ncylinders;
-	__u32 d_secpercyl;
-	__u32 d_secperunit;
-	__u16 d_sparespertrack;
-	__u16 d_sparespercyl;
-	__u32 d_acylinders;
-	__u16 d_rpm;
-	__u16 d_interleave;
-	__u16 d_trackskew;
-	__u16 d_cylskew;
-	__u32 d_headswitch;
-	__u32 d_trkseek;
-	__u32 d_flags;
-	__u32 d_drivedata[5];
-	__u32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct bsd_partition d_partitions[16];
-};
-
-struct unixware_slice {
-	__le16 s_label;
-	__le16 s_flags;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct unixware_vtoc {
-	__le32 v_magic;
-	__le32 v_version;
-	char v_name[8];
-	__le16 v_nslices;
-	__le16 v_unknown1;
-	__le32 v_reserved[10];
-	struct unixware_slice v_slice[16];
-};
-
-struct unixware_disklabel {
-	__le32 d_type;
-	__le32 d_magic;
-	__le32 d_version;
-	char d_serial[12];
-	__le32 d_ncylinders;
-	__le32 d_ntracks;
-	__le32 d_nsectors;
-	__le32 d_secsize;
-	__le32 d_part_start;
-	__le32 d_unknown1[12];
-	__le32 d_alt_tbl;
-	__le32 d_alt_len;
-	__le32 d_phys_cyl;
-	__le32 d_phys_trk;
-	__le32 d_phys_sec;
-	__le32 d_phys_bytes;
-	__le32 d_unknown2;
-	__le32 d_unknown3;
-	__le32 d_pad[8];
-	struct unixware_vtoc vtoc;
-};
-
-struct d_partition {
-	__le32 p_size;
-	__le32 p_offset;
-	__le32 p_fsize;
-	u8 p_fstype;
-	u8 p_frag;
-	__le16 p_cpg;
-};
-
-struct disklabel {
-	__le32 d_magic;
-	__le16 d_type;
-	__le16 d_subtype;
-	u8 d_typename[16];
-	u8 d_packname[16];
-	__le32 d_secsize;
-	__le32 d_nsectors;
-	__le32 d_ntracks;
-	__le32 d_ncylinders;
-	__le32 d_secpercyl;
-	__le32 d_secprtunit;
-	__le16 d_sparespertrack;
-	__le16 d_sparespercyl;
-	__le32 d_acylinders;
-	__le16 d_rpm;
-	__le16 d_interleave;
-	__le16 d_trackskew;
-	__le16 d_cylskew;
-	__le32 d_headswitch;
-	__le32 d_trkseek;
-	__le32 d_flags;
-	__le32 d_drivedata[5];
-	__le32 d_spare[5];
-	__le32 d_magic2;
-	__le16 d_checksum;
-	__le16 d_npartitions;
-	__le32 d_bbsize;
-	__le32 d_sbsize;
-	struct d_partition d_partitions[18];
-};
-
-enum {
-	LINUX_RAID_PARTITION___2 = 253,
-};
-
-struct sgi_volume {
-	s8 name[8];
-	__be32 block_num;
-	__be32 num_bytes;
-};
-
-struct sgi_partition {
-	__be32 num_blocks;
-	__be32 first_block;
-	__be32 type;
-};
-
-struct sgi_disklabel {
-	__be32 magic_mushroom;
-	__be16 root_part_num;
-	__be16 swap_part_num;
-	s8 boot_file[16];
-	u8 _unused0[48];
-	struct sgi_volume volume[15];
-	struct sgi_partition partitions[16];
-	__be32 csum;
-	__be32 _unused1;
-};
-
-enum {
-	SUN_WHOLE_DISK = 5,
-	LINUX_RAID_PARTITION___3 = 253,
-};
-
-struct sun_info {
-	__be16 id;
-	__be16 flags;
-};
-
-struct sun_vtoc {
-	__be32 version;
-	char volume[8];
-	__be16 nparts;
-	struct sun_info infos[8];
-	__be16 padding;
-	__be32 bootinfo[3];
-	__be32 sanity;
-	__be32 reserved[10];
-	__be32 timestamp[8];
-};
-
-struct sun_partition {
-	__be32 start_cylinder;
-	__be32 num_sectors;
-};
-
-struct sun_disklabel {
-	unsigned char info[128];
-	struct sun_vtoc vtoc;
-	__be32 write_reinstruct;
-	__be32 read_reinstruct;
-	unsigned char spare[148];
-	__be16 rspeed;
-	__be16 pcylcount;
-	__be16 sparecyl;
-	__be16 obs1;
-	__be16 obs2;
-	__be16 ilfact;
-	__be16 ncyl;
-	__be16 nacyl;
-	__be16 ntrks;
-	__be16 nsect;
-	__be16 obs3;
-	__be16 obs4;
-	struct sun_partition partitions[8];
-	__be16 magic;
-	__be16 csum;
-};
-
-struct pt_info {
-	s32 pi_nblocks;
-	u32 pi_blkoff;
-};
-
-struct ultrix_disklabel {
-	s32 pt_magic;
-	s32 pt_valid;
-	struct pt_info pt_part[8];
-};
-
-typedef struct {
-	__u8 b[16];
-} guid_t;
-
-typedef guid_t efi_guid_t;
-
-struct _gpt_header {
-	__le64 signature;
-	__le32 revision;
-	__le32 header_size;
-	__le32 header_crc32;
-	__le32 reserved1;
-	__le64 my_lba;
-	__le64 alternate_lba;
-	__le64 first_usable_lba;
-	__le64 last_usable_lba;
-	efi_guid_t disk_guid;
-	__le64 partition_entry_lba;
-	__le32 num_partition_entries;
-	__le32 sizeof_partition_entry;
-	__le32 partition_entry_array_crc32;
-} __attribute__((packed));
-
-typedef struct _gpt_header gpt_header;
-
-struct _gpt_entry_attributes {
-	u64 required_to_function: 1;
-	u64 reserved: 47;
-	u64 type_guid_specific: 16;
-};
-
-typedef struct _gpt_entry_attributes gpt_entry_attributes;
-
-struct _gpt_entry {
-	efi_guid_t partition_type_guid;
-	efi_guid_t unique_partition_guid;
-	__le64 starting_lba;
-	__le64 ending_lba;
-	gpt_entry_attributes attributes;
-	__le16 partition_name[36];
-};
-
-typedef struct _gpt_entry gpt_entry;
-
-struct _gpt_mbr_record {
-	u8 boot_indicator;
-	u8 start_head;
-	u8 start_sector;
-	u8 start_track;
-	u8 os_type;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_track;
-	__le32 starting_lba;
-	__le32 size_in_lba;
-};
-
-typedef struct _gpt_mbr_record gpt_mbr_record;
-
-struct _legacy_mbr {
-	u8 boot_code[440];
-	__le32 unique_mbr_signature;
-	__le16 unknown;
-	gpt_mbr_record partition_record[4];
-	__le16 signature;
-} __attribute__((packed));
-
-typedef struct _legacy_mbr legacy_mbr;
-
-struct d_partition___2 {
-	__le32 p_res;
-	u8 p_fstype;
-	u8 p_res2[3];
-	__le32 p_offset;
-	__le32 p_size;
-};
-
-struct disklabel___2 {
-	u8 d_reserved[270];
-	struct d_partition___2 d_partitions[2];
-	u8 d_blank[208];
-	__le16 d_magic;
-} __attribute__((packed));
-
-struct volumeid {
-	u8 vid_unused[248];
-	u8 vid_mac[8];
-};
-
-struct dkconfig {
-	u8 ios_unused0[128];
-	__be32 ios_slcblk;
-	__be16 ios_slccnt;
-	u8 ios_unused1[122];
-};
-
-struct dkblk0 {
-	struct volumeid dk_vid;
-	struct dkconfig dk_ios;
-};
-
-struct slice {
-	__be32 nblocks;
-	__be32 blkoff;
-};
-
-struct rq_wait {
-	wait_queue_head_t wait;
-	atomic_t inflight;
-};
-
-struct rq_depth {
-	unsigned int max_depth;
-	int scale_step;
-	bool scaled_max;
-	unsigned int queue_depth;
-	unsigned int default_depth;
-};
-
-typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
-
-typedef void cleanup_cb_t(struct rq_wait *, void *);
-
-struct rq_qos_wait_data {
-	struct wait_queue_entry wq;
-	struct task_struct *task;
-	struct rq_wait *rqw;
-	acquire_inflight_cb_t *cb;
-	void *private_data;
-	bool got_token;
-};
-
-struct cdrom_device_ops;
-
-struct cdrom_device_info {
-	const struct cdrom_device_ops *ops;
-	struct list_head list;
-	struct gendisk *disk;
-	void *handle;
-	int mask;
-	int speed;
-	int capacity;
-	unsigned int options: 30;
-	unsigned int mc_flags: 2;
-	unsigned int vfs_events;
-	unsigned int ioctl_events;
-	int use_count;
-	char name[20];
-	__u8 sanyo_slot: 2;
-	__u8 keeplocked: 1;
-	__u8 reserved: 5;
-	int cdda_method;
-	__u8 last_sense;
-	__u8 media_written;
-	short unsigned int mmc3_profile;
-	int for_data;
-	int (*exit)(struct cdrom_device_info *);
-	int mrw_mode_page;
-};
-
-struct scsi_sense_hdr {
-	u8 response_code;
-	u8 sense_key;
-	u8 asc;
-	u8 ascq;
-	u8 byte4;
-	u8 byte5;
-	u8 byte6;
-	u8 additional_length;
-};
-
-struct cdrom_msf0 {
-	__u8 minute;
-	__u8 second;
-	__u8 frame;
-};
-
-union cdrom_addr {
-	struct cdrom_msf0 msf;
-	int lba;
-};
-
-struct cdrom_multisession {
-	union cdrom_addr addr;
-	__u8 xa_flag;
-	__u8 addr_format;
-};
-
-struct cdrom_mcn {
-	__u8 medium_catalog_number[14];
-};
-
-struct request_sense;
-
-struct cdrom_generic_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct request_sense *sense;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	union {
-		void *reserved[1];
-		void *unused;
-	};
-};
-
-struct request_sense {
-	__u8 error_code: 7;
-	__u8 valid: 1;
-	__u8 segment_number;
-	__u8 sense_key: 4;
-	__u8 reserved2: 1;
-	__u8 ili: 1;
-	__u8 reserved1: 2;
-	__u8 information[4];
-	__u8 add_sense_len;
-	__u8 command_info[4];
-	__u8 asc;
-	__u8 ascq;
-	__u8 fruc;
-	__u8 sks[3];
-	__u8 asb[46];
-};
-
-struct packet_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct scsi_sense_hdr *sshdr;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct cdrom_device_ops {
-	int (*open)(struct cdrom_device_info *, int);
-	void (*release)(struct cdrom_device_info *);
-	int (*drive_status)(struct cdrom_device_info *, int);
-	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
-	int (*tray_move)(struct cdrom_device_info *, int);
-	int (*lock_door)(struct cdrom_device_info *, int);
-	int (*select_speed)(struct cdrom_device_info *, int);
-	int (*select_disc)(struct cdrom_device_info *, int);
-	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
-	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
-	int (*reset)(struct cdrom_device_info *);
-	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
-	const int capability;
-	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
-};
-
-struct scsi_ioctl_command {
-	unsigned int inlen;
-	unsigned int outlen;
-	unsigned char data[0];
-};
-
-enum scsi_device_event {
-	SDEV_EVT_MEDIA_CHANGE = 1,
-	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
-	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
-	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
-	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
-	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
-	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
-	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
-	SDEV_EVT_FIRST = 1,
-	SDEV_EVT_LAST = 8,
-	SDEV_EVT_MAXBITS = 9,
-};
-
-struct scsi_request {
-	unsigned char __cmd[16];
-	unsigned char *cmd;
-	short unsigned int cmd_len;
-	int result;
-	unsigned int sense_len;
-	unsigned int resid_len;
-	int retries;
-	void *sense;
-};
-
-struct sg_io_hdr {
-	int interface_id;
-	int dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	unsigned int dxfer_len;
-	void *dxferp;
-	unsigned char *cmdp;
-	void *sbp;
-	unsigned int timeout;
-	unsigned int flags;
-	int pack_id;
-	void *usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	int resid;
-	unsigned int duration;
-	unsigned int info;
-};
-
-struct compat_sg_io_hdr {
-	compat_int_t interface_id;
-	compat_int_t dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	compat_uint_t dxfer_len;
-	compat_uint_t dxferp;
-	compat_uptr_t cmdp;
-	compat_uptr_t sbp;
-	compat_uint_t timeout;
-	compat_uint_t flags;
-	compat_int_t pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	compat_int_t resid;
-	compat_uint_t duration;
-	compat_uint_t info;
-};
-
-struct blk_cmd_filter {
-	long unsigned int read_ok[4];
-	long unsigned int write_ok[4];
-};
-
-struct compat_cdrom_generic_command {
-	unsigned char cmd[12];
-	compat_caddr_t buffer;
-	compat_uint_t buflen;
-	compat_int_t stat;
-	compat_caddr_t sense;
-	unsigned char data_direction;
-	unsigned char pad[3];
-	compat_int_t quiet;
-	compat_int_t timeout;
-	compat_caddr_t unused;
-};
-
-enum {
-	OMAX_SB_LEN = 16,
-};
-
-struct bsg_device {
-	struct request_queue *queue;
-	spinlock_t lock;
-	struct hlist_node dev_list;
-	refcount_t ref_count;
-	char name[20];
-	int max_queue;
-};
-
-struct bsg_job;
-
-typedef int bsg_job_fn(struct bsg_job *);
-
-struct bsg_buffer {
-	unsigned int payload_len;
-	int sg_cnt;
-	struct scatterlist *sg_list;
-};
-
-struct bsg_job {
-	struct device *dev;
-	struct kref kref;
-	unsigned int timeout;
-	void *request;
-	void *reply;
-	unsigned int request_len;
-	unsigned int reply_len;
-	struct bsg_buffer request_payload;
-	struct bsg_buffer reply_payload;
-	int result;
-	unsigned int reply_payload_rcv_len;
-	struct request *bidi_rq;
-	struct bio *bidi_bio;
-	void *dd_data;
-};
-
-typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
-
-struct bsg_set {
-	struct blk_mq_tag_set tag_set;
-	bsg_job_fn *job_fn;
-	bsg_timeout_fn *timeout_fn;
-};
-
-typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
-
-typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
-
-typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
-
-typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
-
-typedef size_t blkcg_pol_stat_pd_fn(struct blkg_policy_data *, char *, size_t);
-
-struct blkcg_policy {
-	int plid;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
-	blkcg_pol_init_cpd_fn *cpd_init_fn;
-	blkcg_pol_free_cpd_fn *cpd_free_fn;
-	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
-	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
-	blkcg_pol_init_pd_fn *pd_init_fn;
-	blkcg_pol_online_pd_fn *pd_online_fn;
-	blkcg_pol_offline_pd_fn *pd_offline_fn;
-	blkcg_pol_free_pd_fn *pd_free_fn;
-	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
-	blkcg_pol_stat_pd_fn *pd_stat_fn;
-};
-
-struct blkg_conf_ctx {
-	struct gendisk *disk;
-	struct blkcg_gq *blkg;
-	char *body;
-};
-
-enum blkg_rwstat_type {
-	BLKG_RWSTAT_READ = 0,
-	BLKG_RWSTAT_WRITE = 1,
-	BLKG_RWSTAT_SYNC = 2,
-	BLKG_RWSTAT_ASYNC = 3,
-	BLKG_RWSTAT_DISCARD = 4,
-	BLKG_RWSTAT_NR = 5,
-	BLKG_RWSTAT_TOTAL = 5,
-};
-
-struct blkg_rwstat {
-	struct percpu_counter cpu_cnt[5];
-	atomic64_t aux_cnt[5];
-};
-
-struct blkg_rwstat_sample {
-	u64 cnt[5];
-};
-
-struct throtl_service_queue {
-	struct throtl_service_queue *parent_sq;
-	struct list_head queued[2];
-	unsigned int nr_queued[2];
-	struct rb_root_cached pending_tree;
-	unsigned int nr_pending;
-	long unsigned int first_pending_disptime;
-	struct timer_list pending_timer;
-};
-
-struct latency_bucket {
-	long unsigned int total_latency;
-	int samples;
-};
-
-struct avg_latency_bucket {
-	long unsigned int latency;
-	bool valid;
-};
-
-struct throtl_data {
-	struct throtl_service_queue service_queue;
-	struct request_queue *queue;
-	unsigned int nr_queued[2];
-	unsigned int throtl_slice;
-	struct work_struct dispatch_work;
-	unsigned int limit_index;
-	bool limit_valid[2];
-	long unsigned int low_upgrade_time;
-	long unsigned int low_downgrade_time;
-	unsigned int scale;
-	struct latency_bucket tmp_buckets[18];
-	struct avg_latency_bucket avg_buckets[18];
-	struct latency_bucket *latency_buckets[2];
-	long unsigned int last_calculate_time;
-	long unsigned int filtered_latency;
-	bool track_bio_latency;
-};
-
-struct throtl_grp;
-
-struct throtl_qnode {
-	struct list_head node;
-	struct bio_list bios;
-	struct throtl_grp *tg;
-};
-
-struct throtl_grp {
-	struct blkg_policy_data pd;
-	struct rb_node rb_node;
-	struct throtl_data *td;
-	struct throtl_service_queue service_queue;
-	struct throtl_qnode qnode_on_self[2];
-	struct throtl_qnode qnode_on_parent[2];
-	long unsigned int disptime;
-	unsigned int flags;
-	bool has_rules[2];
-	uint64_t bps[4];
-	uint64_t bps_conf[4];
-	unsigned int iops[4];
-	unsigned int iops_conf[4];
-	uint64_t bytes_disp[2];
-	unsigned int io_disp[2];
-	long unsigned int last_low_overflow_time[2];
-	uint64_t last_bytes_disp[2];
-	unsigned int last_io_disp[2];
-	long unsigned int last_check_time;
-	long unsigned int latency_target;
-	long unsigned int latency_target_conf;
-	long unsigned int slice_start[2];
-	long unsigned int slice_end[2];
-	long unsigned int last_finish_time;
-	long unsigned int checked_last_finish_time;
-	long unsigned int avg_idletime;
-	long unsigned int idletime_threshold;
-	long unsigned int idletime_threshold_conf;
-	unsigned int bio_cnt;
-	unsigned int bad_bio_cnt;
-	long unsigned int bio_cnt_reset_time;
-	struct blkg_rwstat stat_bytes;
-	struct blkg_rwstat stat_ios;
-};
-
-enum tg_state_flags {
-	THROTL_TG_PENDING = 1,
-	THROTL_TG_WAS_EMPTY = 2,
-};
-
-enum {
-	LIMIT_LOW = 0,
-	LIMIT_MAX = 1,
-	LIMIT_CNT = 2,
-};
-
-struct blk_iolatency {
-	struct rq_qos rqos;
-	struct timer_list timer;
-	atomic_t enabled;
-};
-
-struct iolatency_grp;
-
-struct child_latency_info {
-	spinlock_t lock;
-	u64 last_scale_event;
-	u64 scale_lat;
-	u64 nr_samples;
-	struct iolatency_grp *scale_grp;
-	atomic_t scale_cookie;
-};
-
-struct percentile_stats {
-	u64 total;
-	u64 missed;
-};
-
-struct latency_stat {
-	union {
-		struct percentile_stats ps;
-		struct blk_rq_stat rqs;
-	};
-};
-
-struct iolatency_grp {
-	struct blkg_policy_data pd;
-	struct latency_stat *stats;
-	struct latency_stat cur_stat;
-	struct blk_iolatency *blkiolat;
-	struct rq_depth rq_depth;
-	struct rq_wait rq_wait;
-	atomic64_t window_start;
-	atomic_t scale_cookie;
-	u64 min_lat_nsec;
-	u64 cur_win_nsec;
-	u64 lat_avg;
-	u64 nr_samples;
-	bool ssd;
-	struct child_latency_info child_lat;
-};
-
-enum {
-	MILLION = 1000000,
-	MIN_PERIOD = 1000,
-	MAX_PERIOD = 1000000,
-	MARGIN_MIN_PCT = 10,
-	MARGIN_LOW_PCT = 20,
-	MARGIN_TARGET_PCT = 50,
-	INUSE_ADJ_STEP_PCT = 25,
-	TIMER_SLACK_PCT = 1,
-	WEIGHT_ONE = 65536,
-	VTIME_PER_SEC_SHIFT = 37,
-	VTIME_PER_SEC = 0,
-	VTIME_PER_USEC = 137438,
-	VTIME_PER_NSEC = 137,
-	VRATE_MIN_PPM = 10000,
-	VRATE_MAX_PPM = 100000000,
-	VRATE_MIN = 1374,
-	VRATE_CLAMP_ADJ_PCT = 4,
-	RQ_WAIT_BUSY_PCT = 5,
-	UNBUSY_THR_PCT = 75,
-	MIN_DELAY_THR_PCT = 500,
-	MAX_DELAY_THR_PCT = 25000,
-	MIN_DELAY = 250,
-	MAX_DELAY = 250000,
-	DFGV_USAGE_PCT = 50,
-	DFGV_PERIOD = 100000,
-	MAX_LAGGING_PERIODS = 10,
-	AUTOP_CYCLE_NSEC = 1410065408,
-	IOC_PAGE_SHIFT = 12,
-	IOC_PAGE_SIZE = 4096,
-	IOC_SECT_TO_PAGE_SHIFT = 3,
-	LCOEF_RANDIO_PAGES = 4096,
-};
-
-enum ioc_running {
-	IOC_IDLE = 0,
-	IOC_RUNNING = 1,
-	IOC_STOP = 2,
-};
-
-enum {
-	QOS_ENABLE = 0,
-	QOS_CTRL = 1,
-	NR_QOS_CTRL_PARAMS = 2,
-};
-
-enum {
-	QOS_RPPM = 0,
-	QOS_RLAT = 1,
-	QOS_WPPM = 2,
-	QOS_WLAT = 3,
-	QOS_MIN = 4,
-	QOS_MAX = 5,
-	NR_QOS_PARAMS = 6,
-};
-
-enum {
-	COST_CTRL = 0,
-	COST_MODEL = 1,
-	NR_COST_CTRL_PARAMS = 2,
-};
-
-enum {
-	I_LCOEF_RBPS = 0,
-	I_LCOEF_RSEQIOPS = 1,
-	I_LCOEF_RRANDIOPS = 2,
-	I_LCOEF_WBPS = 3,
-	I_LCOEF_WSEQIOPS = 4,
-	I_LCOEF_WRANDIOPS = 5,
-	NR_I_LCOEFS = 6,
-};
-
-enum {
-	LCOEF_RPAGE = 0,
-	LCOEF_RSEQIO = 1,
-	LCOEF_RRANDIO = 2,
-	LCOEF_WPAGE = 3,
-	LCOEF_WSEQIO = 4,
-	LCOEF_WRANDIO = 5,
-	NR_LCOEFS = 6,
-};
-
-enum {
-	AUTOP_INVALID = 0,
-	AUTOP_HDD = 1,
-	AUTOP_SSD_QD1 = 2,
-	AUTOP_SSD_DFL = 3,
-	AUTOP_SSD_FAST = 4,
-};
-
-struct ioc_params {
-	u32 qos[6];
-	u64 i_lcoefs[6];
-	u64 lcoefs[6];
-	u32 too_fast_vrate_pct;
-	u32 too_slow_vrate_pct;
-};
-
-struct ioc_margins {
-	s64 min;
-	s64 low;
-	s64 target;
-};
-
-struct ioc_missed {
-	local_t nr_met;
-	local_t nr_missed;
-	u32 last_met;
-	u32 last_missed;
-};
-
-struct ioc_pcpu_stat {
-	struct ioc_missed missed[2];
-	local64_t rq_wait_ns;
-	u64 last_rq_wait_ns;
-};
-
-struct ioc {
-	struct rq_qos rqos;
-	bool enabled;
-	struct ioc_params params;
-	struct ioc_margins margins;
-	u32 period_us;
-	u32 timer_slack_ns;
-	u64 vrate_min;
-	u64 vrate_max;
-	spinlock_t lock;
-	struct timer_list timer;
-	struct list_head active_iocgs;
-	struct ioc_pcpu_stat *pcpu_stat;
-	enum ioc_running running;
-	atomic64_t vtime_rate;
-	u64 vtime_base_rate;
-	s64 vtime_err;
-	seqcount_spinlock_t period_seqcount;
-	u64 period_at;
-	u64 period_at_vtime;
-	atomic64_t cur_period;
-	int busy_level;
-	bool weights_updated;
-	atomic_t hweight_gen;
-	u64 dfgv_period_at;
-	u64 dfgv_period_rem;
-	u64 dfgv_usage_us_sum;
-	u64 autop_too_fast_at;
-	u64 autop_too_slow_at;
-	int autop_idx;
-	bool user_qos_params: 1;
-	bool user_cost_model: 1;
-};
-
-struct iocg_pcpu_stat {
-	local64_t abs_vusage;
-};
-
-struct iocg_stat {
-	u64 usage_us;
-	u64 wait_us;
-	u64 indebt_us;
-	u64 indelay_us;
-};
-
-struct ioc_gq {
-	struct blkg_policy_data pd;
-	struct ioc *ioc;
-	u32 cfg_weight;
-	u32 weight;
-	u32 active;
-	u32 inuse;
-	u32 last_inuse;
-	s64 saved_margin;
-	sector_t cursor;
-	atomic64_t vtime;
-	atomic64_t done_vtime;
-	u64 abs_vdebt;
-	u64 delay;
-	u64 delay_at;
-	atomic64_t active_period;
-	struct list_head active_list;
-	u64 child_active_sum;
-	u64 child_inuse_sum;
-	u64 child_adjusted_sum;
-	int hweight_gen;
-	u32 hweight_active;
-	u32 hweight_inuse;
-	u32 hweight_donating;
-	u32 hweight_after_donation;
-	struct list_head walk_list;
-	struct list_head surplus_list;
-	struct wait_queue_head waitq;
-	struct hrtimer waitq_timer;
-	u64 activated_at;
-	struct iocg_pcpu_stat *pcpu_stat;
-	struct iocg_stat local_stat;
-	struct iocg_stat desc_stat;
-	struct iocg_stat last_stat;
-	u64 last_stat_abs_vusage;
-	u64 usage_delta_us;
-	u64 wait_since;
-	u64 indebt_since;
-	u64 indelay_since;
-	int level;
-	struct ioc_gq *ancestors[0];
-};
-
-struct ioc_cgrp {
-	struct blkcg_policy_data cpd;
-	unsigned int dfl_weight;
-};
-
-struct ioc_now {
-	u64 now_ns;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-};
-
-struct iocg_wait {
-	struct wait_queue_entry wait;
-	struct bio *bio;
-	u64 abs_cost;
-	bool committed;
-};
-
-struct iocg_wake_ctx {
-	struct ioc_gq *iocg;
-	u32 hw_inuse;
-	s64 vbudget;
-};
-
-struct trace_event_raw_iocost_iocg_activate {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u64 vrate;
-	u64 last_period;
-	u64 cur_period;
-	u64 vtime;
-	u32 weight;
-	u32 inuse;
-	u64 hweight_active;
-	u64 hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocg_inuse_update {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u32 old_inuse;
-	u32 new_inuse;
-	u64 old_hweight_inuse;
-	u64 new_hweight_inuse;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_ioc_vrate_adj {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u64 old_vrate;
-	u64 new_vrate;
-	int busy_level;
-	u32 read_missed_ppm;
-	u32 write_missed_ppm;
-	u32 rq_wait_pct;
-	int nr_lagging;
-	int nr_shortages;
-	char __data[0];
-};
-
-struct trace_event_raw_iocost_iocg_forgive_debt {
-	struct trace_entry ent;
-	u32 __data_loc_devname;
-	u32 __data_loc_cgroup;
-	u64 now;
-	u64 vnow;
-	u32 usage_pct;
-	u64 old_debt;
-	u64 new_debt;
-	u64 old_delay;
-	u64 new_delay;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iocost_iocg_activate {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocg_inuse_update {
-	u32 devname;
-	u32 cgroup;
-};
-
-struct trace_event_data_offsets_iocost_ioc_vrate_adj {
-	u32 devname;
-};
-
-struct trace_event_data_offsets_iocost_iocg_forgive_debt {
-	u32 devname;
-	u32 cgroup;
-};
-
-typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
-
-typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
-
-typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
-
-struct deadline_data {
-	struct rb_root sort_list[2];
-	struct list_head fifo_list[2];
-	struct request *next_rq[2];
-	unsigned int batching;
-	unsigned int starved;
-	int fifo_expire[2];
-	int fifo_batch;
-	int writes_starved;
-	int front_merges;
-	spinlock_t lock;
-	spinlock_t zone_lock;
-	struct list_head dispatch;
-};
-
-struct bfq_entity;
-
-struct bfq_service_tree {
-	struct rb_root active;
-	struct rb_root idle;
-	struct bfq_entity *first_idle;
-	struct bfq_entity *last_idle;
-	u64 vtime;
-	long unsigned int wsum;
-};
-
-struct bfq_sched_data;
-
-struct bfq_entity {
-	struct rb_node rb_node;
-	bool on_st_or_in_serv;
-	u64 start;
-	u64 finish;
-	struct rb_root *tree;
-	u64 min_start;
-	int service;
-	int budget;
-	int dev_weight;
-	int weight;
-	int new_weight;
-	int orig_weight;
-	struct bfq_entity *parent;
-	struct bfq_sched_data *my_sched_data;
-	struct bfq_sched_data *sched_data;
-	int prio_changed;
-	bool in_groups_with_pending_reqs;
-};
-
-struct bfq_sched_data {
-	struct bfq_entity *in_service_entity;
-	struct bfq_entity *next_in_service;
-	struct bfq_service_tree service_tree[3];
-	long unsigned int bfq_class_idle_last_service;
-};
-
-struct bfq_weight_counter {
-	unsigned int weight;
-	unsigned int num_active;
-	struct rb_node weights_node;
-};
-
-struct bfq_ttime {
-	u64 last_end_request;
-	u64 ttime_total;
-	long unsigned int ttime_samples;
-	u64 ttime_mean;
-};
-
-struct bfq_data;
-
-struct bfq_io_cq;
-
-struct bfq_queue {
-	int ref;
-	struct bfq_data *bfqd;
-	short unsigned int ioprio;
-	short unsigned int ioprio_class;
-	short unsigned int new_ioprio;
-	short unsigned int new_ioprio_class;
-	u64 last_serv_time_ns;
-	unsigned int inject_limit;
-	long unsigned int decrease_time_jif;
-	struct bfq_queue *new_bfqq;
-	struct rb_node pos_node;
-	struct rb_root *pos_root;
-	struct rb_root sort_list;
-	struct request *next_rq;
-	int queued[2];
-	int allocated;
-	int meta_pending;
-	struct list_head fifo;
-	struct bfq_entity entity;
-	struct bfq_weight_counter *weight_counter;
-	int max_budget;
-	long unsigned int budget_timeout;
-	int dispatched;
-	long unsigned int flags;
-	struct list_head bfqq_list;
-	struct bfq_ttime ttime;
-	u32 seek_history;
-	struct hlist_node burst_list_node;
-	sector_t last_request_pos;
-	unsigned int requests_within_timer;
-	pid_t pid;
-	struct bfq_io_cq *bic;
-	long unsigned int wr_cur_max_time;
-	long unsigned int soft_rt_next_start;
-	long unsigned int last_wr_start_finish;
-	unsigned int wr_coeff;
-	long unsigned int last_idle_bklogged;
-	long unsigned int service_from_backlogged;
-	long unsigned int service_from_wr;
-	long unsigned int wr_start_at_switch_to_srt;
-	long unsigned int split_time;
-	long unsigned int first_IO_time;
-	u32 max_service_rate;
-	struct bfq_queue *waker_bfqq;
-	struct hlist_node woken_list_node;
-	struct hlist_head woken_list;
-};
-
-struct bfq_group;
-
-struct bfq_data {
-	struct request_queue *queue;
-	struct list_head dispatch;
-	struct bfq_group *root_group;
-	struct rb_root_cached queue_weights_tree;
-	unsigned int num_groups_with_pending_reqs;
-	unsigned int busy_queues[3];
-	int wr_busy_queues;
-	int queued;
-	int rq_in_driver;
-	bool nonrot_with_queueing;
-	int max_rq_in_driver;
-	int hw_tag_samples;
-	int hw_tag;
-	int budgets_assigned;
-	struct hrtimer idle_slice_timer;
-	struct bfq_queue *in_service_queue;
-	sector_t last_position;
-	sector_t in_serv_last_pos;
-	u64 last_completion;
-	struct bfq_queue *last_completed_rq_bfqq;
-	u64 last_empty_occupied_ns;
-	bool wait_dispatch;
-	struct request *waited_rq;
-	bool rqs_injected;
-	u64 first_dispatch;
-	u64 last_dispatch;
-	ktime_t last_budget_start;
-	ktime_t last_idling_start;
-	long unsigned int last_idling_start_jiffies;
-	int peak_rate_samples;
-	u32 sequential_samples;
-	u64 tot_sectors_dispatched;
-	u32 last_rq_max_size;
-	u64 delta_from_first;
-	u32 peak_rate;
-	int bfq_max_budget;
-	struct list_head active_list;
-	struct list_head idle_list;
-	u64 bfq_fifo_expire[2];
-	unsigned int bfq_back_penalty;
-	unsigned int bfq_back_max;
-	u32 bfq_slice_idle;
-	int bfq_user_max_budget;
-	unsigned int bfq_timeout;
-	unsigned int bfq_requests_within_timer;
-	bool strict_guarantees;
-	long unsigned int last_ins_in_burst;
-	long unsigned int bfq_burst_interval;
-	int burst_size;
-	struct bfq_entity *burst_parent_entity;
-	long unsigned int bfq_large_burst_thresh;
-	bool large_burst;
-	struct hlist_head burst_list;
-	bool low_latency;
-	unsigned int bfq_wr_coeff;
-	unsigned int bfq_wr_max_time;
-	unsigned int bfq_wr_rt_max_time;
-	unsigned int bfq_wr_min_idle_time;
-	long unsigned int bfq_wr_min_inter_arr_async;
-	unsigned int bfq_wr_max_softrt_rate;
-	u64 rate_dur_prod;
-	struct bfq_queue oom_bfqq;
-	spinlock_t lock;
-	struct bfq_io_cq *bio_bic;
-	struct bfq_queue *bio_bfqq;
-	unsigned int word_depths[4];
-};
-
-struct bfq_io_cq {
-	struct io_cq icq;
-	struct bfq_queue *bfqq[2];
-	int ioprio;
-	uint64_t blkcg_serial_nr;
-	bool saved_has_short_ttime;
-	bool saved_IO_bound;
-	bool saved_in_large_burst;
-	bool was_in_burst_list;
-	unsigned int saved_weight;
-	long unsigned int saved_wr_coeff;
-	long unsigned int saved_last_wr_start_finish;
-	long unsigned int saved_wr_start_at_switch_to_srt;
-	unsigned int saved_wr_cur_max_time;
-	struct bfq_ttime saved_ttime;
-};
-
-struct bfqg_stats {
-	struct blkg_rwstat bytes;
-	struct blkg_rwstat ios;
-};
-
-struct bfq_group {
-	struct blkg_policy_data pd;
-	char blkg_path[128];
-	int ref;
-	struct bfq_entity entity;
-	struct bfq_sched_data sched_data;
-	void *bfqd;
-	struct bfq_queue *async_bfqq[16];
-	struct bfq_queue *async_idle_bfqq;
-	struct bfq_entity *my_entity;
-	int active_entities;
-	struct rb_root rq_pos_tree;
-	struct bfqg_stats stats;
-};
-
-enum bfqq_state_flags {
-	BFQQF_just_created = 0,
-	BFQQF_busy = 1,
-	BFQQF_wait_request = 2,
-	BFQQF_non_blocking_wait_rq = 3,
-	BFQQF_fifo_expire = 4,
-	BFQQF_has_short_ttime = 5,
-	BFQQF_sync = 6,
-	BFQQF_IO_bound = 7,
-	BFQQF_in_large_burst = 8,
-	BFQQF_softrt_update = 9,
-	BFQQF_coop = 10,
-	BFQQF_split_coop = 11,
-	BFQQF_has_waker = 12,
-};
-
-enum bfqq_expiration {
-	BFQQE_TOO_IDLE = 0,
-	BFQQE_BUDGET_TIMEOUT = 1,
-	BFQQE_BUDGET_EXHAUSTED = 2,
-	BFQQE_NO_MORE_REQUESTS = 3,
-	BFQQE_PREEMPTED = 4,
-};
-
-struct bfq_group_data {
-	struct blkcg_policy_data pd;
-	unsigned int weight;
-};
-
-enum bip_flags {
-	BIP_BLOCK_INTEGRITY = 1,
-	BIP_MAPPED_INTEGRITY = 2,
-	BIP_CTRL_NOCHECK = 4,
-	BIP_DISK_NOCHECK = 8,
-	BIP_IP_CHECKSUM = 16,
-};
-
-enum blk_integrity_flags {
-	BLK_INTEGRITY_VERIFY = 1,
-	BLK_INTEGRITY_GENERATE = 2,
-	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
-	BLK_INTEGRITY_IP_CHECKSUM = 8,
-};
-
-struct integrity_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_integrity *, char *);
-	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
-};
-
-enum t10_dif_type {
-	T10_PI_TYPE0_PROTECTION = 0,
-	T10_PI_TYPE1_PROTECTION = 1,
-	T10_PI_TYPE2_PROTECTION = 2,
-	T10_PI_TYPE3_PROTECTION = 3,
-};
-
-struct t10_pi_tuple {
-	__be16 guard_tag;
-	__be16 app_tag;
-	__be32 ref_tag;
-};
-
-typedef __be16 csum_fn(void *, unsigned int);
-
-struct virtio_device_id {
-	__u32 device;
-	__u32 vendor;
-};
-
-struct virtio_device;
-
-struct virtqueue {
-	struct list_head list;
-	void (*callback)(struct virtqueue *);
-	const char *name;
-	struct virtio_device *vdev;
-	unsigned int index;
-	unsigned int num_free;
-	void *priv;
-};
-
-struct vringh_config_ops;
-
-struct virtio_config_ops;
-
-struct virtio_device {
-	int index;
-	bool failed;
-	bool config_enabled;
-	bool config_change_pending;
-	spinlock_t config_lock;
-	struct device dev;
-	struct virtio_device_id id;
-	const struct virtio_config_ops *config;
-	const struct vringh_config_ops *vringh_config;
-	struct list_head vqs;
-	u64 features;
-	void *priv;
-};
-
-typedef void vq_callback_t(struct virtqueue *);
-
-struct irq_affinity___2;
-
-struct virtio_shm_region;
-
-struct virtio_config_ops {
-	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
-	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
-	u32 (*generation)(struct virtio_device *);
-	u8 (*get_status)(struct virtio_device *);
-	void (*set_status)(struct virtio_device *, u8);
-	void (*reset)(struct virtio_device *);
-	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity___2 *);
-	void (*del_vqs)(struct virtio_device *);
-	u64 (*get_features)(struct virtio_device *);
-	int (*finalize_features)(struct virtio_device *);
-	const char * (*bus_name)(struct virtio_device *);
-	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
-	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
-	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
-};
-
-struct virtio_shm_region {
-	u64 addr;
-	u64 len;
-};
-
-struct irq_poll;
-
-typedef int irq_poll_fn(struct irq_poll *, int);
-
-struct irq_poll {
-	struct list_head list;
-	long unsigned int state;
-	int weight;
-	irq_poll_fn *poll;
-};
-
-struct dim_sample {
-	ktime_t time;
-	u32 pkt_ctr;
-	u32 byte_ctr;
-	u16 event_ctr;
-	u32 comp_ctr;
-};
-
-struct dim_stats {
-	int ppms;
-	int bpms;
-	int epms;
-	int cpms;
-	int cpe_ratio;
-};
-
-struct dim {
-	u8 state;
-	struct dim_stats prev_stats;
-	struct dim_sample start_sample;
-	struct dim_sample measuring_sample;
-	struct work_struct work;
-	void *priv;
-	u8 profile_ix;
-	u8 mode;
-	u8 tune_state;
-	u8 steps_right;
-	u8 steps_left;
-	u8 tired;
+enum ib_uverbs_raw_packet_caps {
+	IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+	IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+	IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+	IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
 };
 
 enum rdma_nl_counter_mode {
@@ -88455,11 +103589,13 @@
 	RDMA_RESTRACK_MR = 4,
 	RDMA_RESTRACK_CTX = 5,
 	RDMA_RESTRACK_COUNTER = 6,
-	RDMA_RESTRACK_MAX = 7,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
 };
 
 struct rdma_restrack_entry {
 	bool valid;
+	u8 no_track: 1;
 	struct kref kref;
 	struct completion comp;
 	struct task_struct *task;
@@ -88494,11 +103630,14 @@
 	struct mutex lock;
 };
 
+struct rdma_stat_desc;
+
 struct rdma_hw_stats {
 	struct mutex lock;
 	long unsigned int timestamp;
 	long unsigned int lifespan;
-	const char * const *names;
+	const struct rdma_stat_desc *descs;
+	long unsigned int *is_disabled;
 	int num_counters;
 	u64 value[0];
 };
@@ -88513,7 +103652,7 @@
 	struct rdma_counter_mode mode;
 	struct mutex lock;
 	struct rdma_hw_stats *stats;
-	u8 port;
+	u32 port;
 };
 
 enum rdma_driver_id {
@@ -88527,6 +103666,7 @@
 	RDMA_DRIVER_OCRDMA = 7,
 	RDMA_DRIVER_NES = 8,
 	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
 	RDMA_DRIVER_VMW_PVRDMA = 10,
 	RDMA_DRIVER_QEDR = 11,
 	RDMA_DRIVER_HNS = 12,
@@ -88536,6 +103676,7 @@
 	RDMA_DRIVER_QIB = 16,
 	RDMA_DRIVER_EFA = 17,
 	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
 };
 
 enum ib_cq_notify_flags {
@@ -88656,8 +103797,6 @@
 
 struct ib_flow_action;
 
-struct ib_flow_action_attrs_esp;
-
 struct ib_wq;
 
 struct ib_wq_init_attr;
@@ -88683,6 +103822,8 @@
 	enum rdma_driver_id driver_id;
 	u32 uverbs_abi_ver;
 	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
 	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
 	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
 	void (*drain_rq)(struct ib_qp *);
@@ -88690,24 +103831,23 @@
 	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
 	int (*peek_cq)(struct ib_cq *, int);
 	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
-	int (*req_ncomp_notif)(struct ib_cq *, int);
 	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	int (*process_mad)(struct ib_device *, int, u8, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
 	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
 	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
 	void (*get_dev_fw_str)(struct ib_device *, char *);
 	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
-	int (*query_port)(struct ib_device *, u8, struct ib_port_attr *);
-	int (*modify_port)(struct ib_device *, u8, int, struct ib_port_modify *);
-	int (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);
-	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u8);
-	struct net_device * (*get_netdev)(struct ib_device *, u8);
-	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u8, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
-	int (*rdma_netdev_get_params)(struct ib_device *, u8, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
-	int (*query_gid)(struct ib_device *, u8, int, union ib_gid *);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
 	int (*add_gid)(const struct ib_gid_attr *, void **);
 	int (*del_gid)(const struct ib_gid_attr *, void **);
-	int (*query_pkey)(struct ib_device *, u8, u16, u16 *);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
 	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
 	void (*dealloc_ucontext)(struct ib_ucontext *);
 	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
@@ -88716,6 +103856,7 @@
 	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
 	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
 	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
 	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
 	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
 	int (*destroy_ah)(struct ib_ah *, u32);
@@ -88723,7 +103864,7 @@
 	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
 	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
 	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
-	struct ib_qp * (*create_qp)(struct ib_pd *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
 	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
 	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
 	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
@@ -88733,7 +103874,8 @@
 	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
 	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
 	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
-	int (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
 	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
 	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
 	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
@@ -88748,14 +103890,12 @@
 	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
 	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
 	int (*destroy_flow)(struct ib_flow *);
-	struct ib_flow_action * (*create_flow_action_esp)(struct ib_device *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
 	int (*destroy_flow_action)(struct ib_flow_action *);
-	int (*modify_flow_action_esp)(struct ib_flow_action *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*set_vf_link_state)(struct ib_device *, int, u8, int);
-	int (*get_vf_config)(struct ib_device *, int, u8, struct ifla_vf_info *);
-	int (*get_vf_stats)(struct ib_device *, int, u8, struct ifla_vf_stats *);
-	int (*get_vf_guid)(struct ib_device *, int, u8, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*set_vf_guid)(struct ib_device *, int, u8, u64, int);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
 	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
 	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
 	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
@@ -88768,9 +103908,10 @@
 	int (*destroy_counters)(struct ib_counters *);
 	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
 	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
-	struct rdma_hw_stats * (*alloc_hw_stats)(struct ib_device *, u8);
-	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u8, int);
-	int (*init_port)(struct ib_device *, u8, struct kobject *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
 	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
 	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
 	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
@@ -88795,11 +103936,13 @@
 	int (*counter_update_stats)(struct rdma_counter *);
 	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
 	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
 	size_t size_ib_ah;
 	size_t size_ib_counters;
 	size_t size_ib_cq;
 	size_t size_ib_mw;
 	size_t size_ib_pd;
+	size_t size_ib_qp;
 	size_t size_ib_rwq_ind_table;
 	size_t size_ib_srq;
 	size_t size_ib_ucontext;
@@ -88860,6 +104003,7 @@
 	int max_qp;
 	int max_qp_wr;
 	u64 device_cap_flags;
+	u64 kernel_cap_flags;
 	int max_send_sge;
 	int max_recv_sge;
 	int max_sge_rd;
@@ -88904,6 +104048,8 @@
 	u32 max_sgl_rd;
 };
 
+struct hw_stats_device_data;
+
 struct rdma_restrack_root;
 
 struct uapi_definition;
@@ -88928,9 +104074,8 @@
 		struct device dev;
 		struct ib_core_device coredev;
 	};
-	const struct attribute_group *groups[3];
+	const struct attribute_group *groups[4];
 	u64 uverbs_cmd_mask;
-	u64 uverbs_ex_cmd_mask;
 	char node_desc[64];
 	__be64 node_guid;
 	u32 local_dma_lkey;
@@ -88938,10 +104083,9 @@
 	u16 kverbs_provider: 1;
 	u16 use_cq_dim: 1;
 	u8 node_type;
-	u8 phys_port_cnt;
+	u32 phys_port_cnt;
 	struct ib_device_attr attrs;
-	struct attribute_group *hw_stats_ag;
-	struct rdma_hw_stats *hw_stats;
+	struct hw_stats_device_data *hw_stats_data;
 	u32 index;
 	spinlock_t cq_pools_lock;
 	struct list_head cq_pools[3];
@@ -89008,26 +104152,58 @@
 	u32 key;
 };
 
-enum ib_uverbs_flow_action_esp_keymat {
-	IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM = 0,
+enum ib_uverbs_access_flags {
+	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
+	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
+	IB_UVERBS_ACCESS_REMOTE_READ = 4,
+	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
+	IB_UVERBS_ACCESS_MW_BIND = 16,
+	IB_UVERBS_ACCESS_ZERO_BASED = 32,
+	IB_UVERBS_ACCESS_ON_DEMAND = 64,
+	IB_UVERBS_ACCESS_HUGETLB = 128,
+	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
+	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
 };
 
-struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
-	__u64 iv;
-	__u32 iv_algo;
-	__u32 salt;
-	__u32 icv_len;
-	__u32 key_len;
-	__u32 aes_key[8];
+enum ib_uverbs_srq_type {
+	IB_UVERBS_SRQT_BASIC = 0,
+	IB_UVERBS_SRQT_XRC = 1,
+	IB_UVERBS_SRQT_TM = 2,
 };
 
-enum ib_uverbs_flow_action_esp_replay {
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE = 0,
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP = 1,
+enum ib_uverbs_wq_type {
+	IB_UVERBS_WQT_RQ = 0,
 };
 
-struct ib_uverbs_flow_action_esp_replay_bmp {
-	__u32 size;
+enum ib_uverbs_wq_flags {
+	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
+	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
+	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
+	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
+};
+
+enum ib_uverbs_qp_type {
+	IB_UVERBS_QPT_RC = 2,
+	IB_UVERBS_QPT_UC = 3,
+	IB_UVERBS_QPT_UD = 4,
+	IB_UVERBS_QPT_RAW_PACKET = 8,
+	IB_UVERBS_QPT_XRC_INI = 9,
+	IB_UVERBS_QPT_XRC_TGT = 10,
+	IB_UVERBS_QPT_DRIVER = 255,
+};
+
+enum ib_uverbs_qp_create_flags {
+	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
+	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
+	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
+	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
+	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
+};
+
+enum ib_uverbs_gid_type {
+	IB_UVERBS_GID_TYPE_IB = 0,
+	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
+	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
 };
 
 union ib_gid {
@@ -89051,7 +104227,7 @@
 	union ib_gid gid;
 	enum ib_gid_type gid_type;
 	u16 index;
-	u8 port_num;
+	u32 port_num;
 };
 
 struct ib_cq_init_attr {
@@ -89089,6 +104265,12 @@
 	IB_PORT_ACTIVE_DEFER = 5,
 };
 
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
 struct ib_port_attr {
 	u64 subnet_prefix;
 	enum ib_port_state state;
@@ -89153,6 +104335,14 @@
 
 typedef void (*ib_comp_handler)(struct ib_cq *, void *);
 
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
+};
+
 struct ib_event;
 
 struct ib_cq {
@@ -89235,7 +104425,7 @@
 	enum ib_qp_type qp_type;
 	struct ib_rwq_ind_table *rwq_ind_tbl;
 	struct ib_qp_security *qp_sec;
-	u8 port;
+	u32 port;
 	bool integrity_en;
 	struct rdma_restrack_entry res;
 	struct rdma_counter *counter;
@@ -89266,6 +104456,7 @@
 			} xrc;
 		};
 	} ext;
+	struct rdma_restrack_entry res;
 };
 
 struct ib_uwq_object;
@@ -89300,7 +104491,7 @@
 		struct ib_qp *qp;
 		struct ib_srq *srq;
 		struct ib_wq *wq;
-		u8 port_num;
+		u32 port_num;
 	} element;
 	enum ib_event_type event;
 };
@@ -89360,7 +104551,7 @@
 	struct ib_global_route grh;
 	u8 sl;
 	u8 static_rate;
-	u8 port_num;
+	u32 port_num;
 	u8 ah_flags;
 	enum rdma_ah_attr_type type;
 	union {
@@ -89435,7 +104626,7 @@
 	u16 pkey_index;
 	u8 sl;
 	u8 dlid_path_bits;
-	u8 port_num;
+	u32 port_num;
 	u8 smac[6];
 	u16 vlan_id;
 	u8 network_hdr_type;
@@ -89498,7 +104689,7 @@
 	enum ib_sig_type sq_sig_type;
 	enum ib_qp_type qp_type;
 	u32 create_flags;
-	u8 port_num;
+	u32 port_num;
 	struct ib_rwq_ind_table *rwq_ind_tbl;
 	u32 source_qpn;
 };
@@ -89555,11 +104746,11 @@
 	u8 max_rd_atomic;
 	u8 max_dest_rd_atomic;
 	u8 min_rnr_timer;
-	u8 port_num;
+	u32 port_num;
 	u8 timeout;
 	u8 retry_cnt;
 	u8 rnr_retry;
-	u8 alt_port_num;
+	u32 alt_port_num;
 	u8 alt_timeout;
 	u32 rate_limit;
 	struct net_device *xmit_slave;
@@ -89660,7 +104851,6 @@
 struct ib_ucontext {
 	struct ib_device *device;
 	struct ib_uverbs_file *ufile;
-	bool cleanup_retryable;
 	struct ib_rdmacg_object cg_obj;
 	struct rdma_restrack_entry res;
 	struct xarray mmap_xa;
@@ -89731,7 +104921,7 @@
 struct ib_port_pkey {
 	enum port_pkey_state state;
 	u16 pkey_index;
-	u8 port_num;
+	u32 port_num;
 	struct list_head qp_list;
 	struct list_head to_error_list;
 	struct ib_qp_security *sec;
@@ -89991,7 +105181,7 @@
 	u16 priority;
 	u32 flags;
 	u8 num_of_specs;
-	u8 port;
+	u32 port;
 	union ib_flow_spec flows[0];
 };
 
@@ -90001,37 +105191,6 @@
 	struct ib_uobject *uobject;
 };
 
-struct ib_flow_action_attrs_esp_keymats {
-	enum ib_uverbs_flow_action_esp_keymat protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;
-	} keymat;
-};
-
-struct ib_flow_action_attrs_esp_replays {
-	enum ib_uverbs_flow_action_esp_replay protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_replay_bmp bmp;
-	} replay;
-};
-
-struct ib_flow_spec_list {
-	struct ib_flow_spec_list *next;
-	union ib_flow_spec spec;
-};
-
-struct ib_flow_action_attrs_esp {
-	struct ib_flow_action_attrs_esp_keymats *keymat;
-	struct ib_flow_action_attrs_esp_replays *replay;
-	struct ib_flow_spec_list *encap;
-	u32 esn;
-	u32 spi;
-	u32 seq;
-	u32 tfc_pad;
-	u64 flags;
-	u64 hard_limit_pkts;
-};
-
 struct ib_pkey_cache;
 
 struct ib_gid_table;
@@ -90051,17 +105210,19 @@
 	u32 max_mad_size;
 };
 
+struct ib_port;
+
 struct ib_port_data {
 	struct ib_device *ib_dev;
 	struct ib_port_immutable immutable;
 	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
 	struct list_head pkey_list;
 	struct ib_port_cache cache;
-	spinlock_t netdev_lock;
 	struct net_device *netdev;
 	struct hlist_node ndev_hash_link;
 	struct rdma_port_counter port_counter;
-	struct rdma_hw_stats *hw_stats;
+	struct ib_port *sysfs;
 };
 
 struct rdma_netdev_alloc_params {
@@ -90069,7 +105230,7 @@
 	unsigned int txqs;
 	unsigned int rxqs;
 	void *param;
-	int (*initialize_rdma_netdev)(struct ib_device *, u8, struct net_device *, void *);
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
 };
 
 struct ib_counters_read_attr {
@@ -90086,1039 +105247,3382 @@
 	bool driver_removed;
 };
 
-enum blk_zone_type {
-	BLK_ZONE_TYPE_CONVENTIONAL = 1,
-	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
-	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
+struct genl_dumpit_info {
+	const struct genl_family *family;
+	struct genl_ops op;
+	struct nlattr **attrs;
 };
 
-enum blk_zone_cond {
-	BLK_ZONE_COND_NOT_WP = 0,
-	BLK_ZONE_COND_EMPTY = 1,
-	BLK_ZONE_COND_IMP_OPEN = 2,
-	BLK_ZONE_COND_EXP_OPEN = 3,
-	BLK_ZONE_COND_CLOSED = 4,
-	BLK_ZONE_COND_READONLY = 13,
-	BLK_ZONE_COND_FULL = 14,
-	BLK_ZONE_COND_OFFLINE = 15,
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
 };
 
-enum blk_zone_report_flags {
-	BLK_ZONE_REP_CAPACITY = 1,
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
 };
 
-struct blk_zone_report {
-	__u64 sector;
-	__u32 nr_zones;
-	__u32 flags;
-	struct blk_zone zones[0];
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
 };
 
-struct blk_zone_range {
-	__u64 sector;
-	__u64 nr_sectors;
+enum devlink_eswitch_mode {
+	DEVLINK_ESWITCH_MODE_LEGACY = 0,
+	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
 };
 
-struct zone_report_args {
-	struct blk_zone *zones;
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
 };
 
-struct blk_revalidate_zone_args {
-	struct gendisk *disk;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int nr_zones;
-	sector_t zone_sectors;
-	sector_t sector;
-};
-
-enum wbt_flags {
-	WBT_TRACKED = 1,
-	WBT_READ = 2,
-	WBT_KSWAPD = 4,
-	WBT_DISCARD = 8,
-	WBT_NR_BITS = 4,
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
 };
 
 enum {
-	WBT_STATE_ON_DEFAULT = 1,
-	WBT_STATE_ON_MANUAL = 2,
-};
-
-struct rq_wb {
-	unsigned int wb_background;
-	unsigned int wb_normal;
-	short int enable_state;
-	unsigned int unknown_cnt;
-	u64 win_nsec;
-	u64 cur_win_nsec;
-	struct blk_stat_callback *cb;
-	u64 sync_issue;
-	void *sync_cookie;
-	unsigned int wc;
-	long unsigned int last_issue;
-	long unsigned int last_comp;
-	long unsigned int min_lat_nsec;
-	struct rq_qos rqos;
-	struct rq_wait rq_wait[3];
-	struct rq_depth rq_depth;
-};
-
-struct trace_event_raw_wbt_stat {
-	struct trace_entry ent;
-	char name[32];
-	s64 rmean;
-	u64 rmin;
-	u64 rmax;
-	s64 rnr_samples;
-	s64 rtime;
-	s64 wmean;
-	u64 wmin;
-	u64 wmax;
-	s64 wnr_samples;
-	s64 wtime;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_lat {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int lat;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_step {
-	struct trace_entry ent;
-	char name[32];
-	const char *msg;
-	int step;
-	long unsigned int window;
-	unsigned int bg;
-	unsigned int normal;
-	unsigned int max;
-	char __data[0];
-};
-
-struct trace_event_raw_wbt_timer {
-	struct trace_entry ent;
-	char name[32];
-	unsigned int status;
-	int step;
-	unsigned int inflight;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_wbt_stat {};
-
-struct trace_event_data_offsets_wbt_lat {};
-
-struct trace_event_data_offsets_wbt_step {};
-
-struct trace_event_data_offsets_wbt_timer {};
-
-typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
-
-typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
-
-typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
-
-enum {
-	RWB_DEF_DEPTH = 16,
-	RWB_WINDOW_NSEC = 100000000,
-	RWB_MIN_WRITE_SAMPLES = 3,
-	RWB_UNKNOWN_BUMP = 5,
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
 };
 
 enum {
-	LAT_OK = 1,
-	LAT_UNKNOWN = 2,
-	LAT_UNKNOWN_WRITES = 3,
-	LAT_EXCEEDED = 4,
+	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
+	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
+	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
+	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
 };
 
-struct wbt_wait_data {
-	struct rq_wb *rwb;
-	enum wbt_flags wb_acct;
-	long unsigned int rw;
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
 };
 
-struct blk_ksm_keyslot {
-	atomic_t slot_refs;
-	struct list_head idle_slot_node;
-	struct hlist_node hash_node;
-	const struct blk_crypto_key *key;
-	struct blk_keyslot_manager *ksm;
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
 };
 
-struct blk_ksm_ll_ops {
-	int (*keyslot_program)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-	int (*keyslot_evict)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
 };
 
-struct blk_keyslot_manager {
-	struct blk_ksm_ll_ops ksm_ll_ops;
-	unsigned int max_dun_bytes_supported;
-	unsigned int crypto_modes_supported[4];
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	__DEVLINK_ATTR_MAX = 177,
+	DEVLINK_ATTR_MAX = 176,
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+enum devlink_dpipe_field_ethernet_id {
+	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
+};
+
+enum devlink_dpipe_field_ipv4_id {
+	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
+};
+
+enum devlink_dpipe_field_ipv6_id {
+	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
+};
+
+enum devlink_dpipe_header_id {
+	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
+	DEVLINK_DPIPE_HEADER_IPV4 = 1,
+	DEVLINK_DPIPE_HEADER_IPV6 = 2,
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 3,
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct list_head port_list;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	struct mutex linecards_lock;
+	const struct devlink_ops *ops;
+	u64 features;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
 	struct device *dev;
-	unsigned int num_slots;
-	struct rw_semaphore lock;
-	wait_queue_head_t idle_slots_wait_queue;
-	struct list_head idle_slots;
-	spinlock_t idle_slots_lock;
-	struct hlist_head *slot_hashtable;
-	unsigned int log_slot_ht_size;
-	struct blk_ksm_keyslot *slots;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct completion comp;
+	struct callback_head rcu;
+	char priv[0];
 };
 
-struct blk_crypto_mode {
-	const char *cipher_str;
-	unsigned int keysize;
-	unsigned int ivsize;
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	refcount_t refcount;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
 };
 
-struct bio_fallback_crypt_ctx {
-	struct bio_crypt_ctx crypt_ctx;
-	struct bvec_iter crypt_iter;
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	long unsigned int done;
+	long unsigned int total;
+	long unsigned int timeout;
+};
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	long unsigned int supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	void *priv;
+};
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	struct mutex dump_lock;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+	refcount_t refcount;
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 92,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 91,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
+};
+
+enum {
+	DEVLINK_F_RELOAD = 1,
+};
+
+struct devlink_info_req;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	long unsigned int reload_actions;
+	long unsigned int reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_function_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_function_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *);
+	int (*port_del)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	long unsigned int type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats *stats;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats *stats;
+	void *priv;
+};
+
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	long unsigned int fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct rtentry {
+	long unsigned int rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	long unsigned int rt_pad3;
+	void *rt_pad4;
+	short int rt_metric;
+	char *rt_dev;
+	long unsigned int rt_mtu;
+	long unsigned int rt_window;
+	short unsigned int rt_irtt;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+enum {
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_RAM0 = 1048576,
+	Root_RAM1 = 1048577,
+	Root_FD0 = 2097152,
+	Root_HDA1 = 3145729,
+	Root_HDA2 = 3145730,
+	Root_SDA1 = 8388609,
+	Root_SDA2 = 8388610,
+	Root_HDC1 = 23068673,
+	Root_SR0 = 11534336,
+};
+
+struct ic_device {
+	struct ic_device *next;
+	struct net_device *dev;
+	short unsigned int flags;
+	short int able;
+	__be32 xid;
+};
+
+struct bootp_pkt {
+	struct iphdr iph;
+	struct udphdr udph;
+	u8 op;
+	u8 htype;
+	u8 hlen;
+	u8 hops;
+	__be32 xid;
+	__be16 secs;
+	__be16 flags;
+	__be32 client_ip;
+	__be32 your_ip;
+	__be32 server_ip;
+	__be32 relay_ip;
+	u8 hw_addr[16];
+	u8 serv_name[64];
+	u8 boot_file[128];
+	u8 exten[312];
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+typedef __be32 rpc_fraghdr;
+
+struct xdr_skb_reader {
+	struct sk_buff *skb;
+	unsigned int offset;
+	size_t count;
+	__wsum csum;
+};
+
+typedef size_t (*xdr_skb_read_actor)(struct xdr_skb_reader *, void *, size_t);
+
+struct xdr_array2_desc;
+
+typedef int (*xdr_xcode_elem_t)(struct xdr_array2_desc *, void *);
+
+struct xdr_array2_desc {
+	unsigned int elem_size;
+	unsigned int array_len;
+	unsigned int array_maxlen;
+	xdr_xcode_elem_t xcode;
+};
+
+struct gss_cl_ctx {
+	refcount_t count;
+	enum rpc_gss_proc gc_proc;
+	u32 gc_seq;
+	u32 gc_seq_xmit;
+	spinlock_t gc_seq_lock;
+	struct gss_ctx *gc_gss_ctx;
+	struct xdr_netobj gc_wire_ctx;
+	struct xdr_netobj gc_acceptor;
+	u32 gc_win;
+	long unsigned int gc_expiry;
+	struct callback_head gc_rcu;
+};
+
+struct gss_upcall_msg;
+
+struct gss_cred {
+	struct rpc_cred gc_base;
+	enum rpc_gss_svc gc_service;
+	struct gss_cl_ctx *gc_ctx;
+	struct gss_upcall_msg *gc_upcall;
+	const char *gc_principal;
+	long unsigned int gc_upcall_timestamp;
+};
+
+struct trace_event_raw_rpcgss_gssapi_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 maj_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_import_ctx {
+	struct trace_entry ent;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_ctx_class {
+	struct trace_entry ent;
+	const void *cred;
+	long unsigned int service;
+	u32 __data_loc_principal;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_gssapi_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 maj_stat;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_unwrap_failed {
+	struct trace_entry ent;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_bad {
+	struct trace_entry ent;
+	u32 expected;
+	u32 received;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_accept_upcall {
+	struct trace_entry ent;
+	u32 minor_status;
+	long unsigned int major_status;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_authenticate {
+	struct trace_entry ent;
+	u32 seqno;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_unwrap_failed {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_bad_seqno {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 expected;
+	u32 received;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_seqno {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seqno;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_need_reencode {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seq_xmit;
+	u32 seqno;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_update_slack {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	const void *auth;
+	unsigned int rslack;
+	unsigned int ralign;
+	unsigned int verfsize;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 seqno;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_low {
+	struct trace_entry ent;
+	u32 xid;
+	u32 seqno;
+	u32 min;
+	u32 max;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_upcall_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_upcall_result {
+	struct trace_entry ent;
+	u32 uid;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_context {
+	struct trace_entry ent;
+	long unsigned int expiry;
+	long unsigned int now;
+	unsigned int timeout;
+	u32 window_size;
+	int len;
+	u32 __data_loc_acceptor;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_createauth {
+	struct trace_entry ent;
+	unsigned int flavor;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_oid_to_mech {
+	struct trace_entry ent;
+	u32 __data_loc_oid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpcgss_gssapi_event {};
+
+struct trace_event_data_offsets_rpcgss_import_ctx {};
+
+struct trace_event_data_offsets_rpcgss_ctx_class {
+	u32 principal;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_gssapi_class {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_unwrap_failed {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_bad {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_accept_upcall {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_authenticate {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_unwrap_failed {};
+
+struct trace_event_data_offsets_rpcgss_bad_seqno {};
+
+struct trace_event_data_offsets_rpcgss_seqno {};
+
+struct trace_event_data_offsets_rpcgss_need_reencode {};
+
+struct trace_event_data_offsets_rpcgss_update_slack {};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_class {};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_low {};
+
+struct trace_event_data_offsets_rpcgss_upcall_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_rpcgss_upcall_result {};
+
+struct trace_event_data_offsets_rpcgss_context {
+	u32 acceptor;
+};
+
+struct trace_event_data_offsets_rpcgss_createauth {};
+
+struct trace_event_data_offsets_rpcgss_oid_to_mech {
+	u32 oid;
+};
+
+typedef void (*btf_trace_rpcgss_import_ctx)(void *, int);
+
+typedef void (*btf_trace_rpcgss_get_mic)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_verify_mic)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_wrap)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_unwrap)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_ctx_init)(void *, const struct gss_cred *);
+
+typedef void (*btf_trace_rpcgss_ctx_destroy)(void *, const struct gss_cred *);
+
+typedef void (*btf_trace_rpcgss_svc_unwrap)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_mic)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_unwrap_failed)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_bad)(void *, const struct svc_rqst *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_svc_accept_upcall)(void *, const struct svc_rqst *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_svc_authenticate)(void *, const struct svc_rqst *, const struct rpc_gss_wire_cred *);
+
+typedef void (*btf_trace_rpcgss_unwrap_failed)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcgss_bad_seqno)(void *, const struct rpc_task *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_seqno)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcgss_need_reencode)(void *, const struct rpc_task *, u32, bool);
+
+typedef void (*btf_trace_rpcgss_update_slack)(void *, const struct rpc_task *, const struct rpc_auth *);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_large)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_seen)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_low)(void *, const struct svc_rqst *, u32, u32, u32);
+
+typedef void (*btf_trace_rpcgss_upcall_msg)(void *, const char *);
+
+typedef void (*btf_trace_rpcgss_upcall_result)(void *, u32, int);
+
+typedef void (*btf_trace_rpcgss_context)(void *, u32, long unsigned int, long unsigned int, unsigned int, unsigned int, const u8 *);
+
+typedef void (*btf_trace_rpcgss_createauth)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rpcgss_oid_to_mech)(void *, const char *);
+
+struct interrupt_nmi_state {
+	u8 irq_soft_mask;
+	u8 irq_happened;
+	u8 ftrace_enabled;
+	u64 softe;
+};
+
+enum {
+	DTRIG_UNKNOWN = 0,
+	DTRIG_VECTOR_CI = 1,
+	DTRIG_SUSPEND_ESCAPE = 2,
+};
+
+struct eeh_event {
+	struct list_head list;
+	struct eeh_pe *pe;
+};
+
+struct psr_attr {
+	u32 handle;
+	struct kobj_attribute attr;
+};
+
+struct cxl_irq_ranges {
+	irq_hw_number_t offset[4];
+	irq_hw_number_t range[4];
+};
+
+struct dtl {
+	struct dtl_entry *buf;
+	int cpu;
+	int buf_entries;
+	u64 last_idx;
+	spinlock_t lock;
+};
+
+struct dtl_ring {
+	u64 write_index;
+	struct dtl_entry *write_ptr;
+	struct dtl_entry *buf;
+	struct dtl_entry *buf_end;
+};
+
+struct rlimit64 {
+	__u64 rlim_cur;
+	__u64 rlim_max;
+};
+
+struct oldold_utsname {
+	char sysname[9];
+	char nodename[9];
+	char release[9];
+	char version[9];
+	char machine[9];
+};
+
+struct old_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+};
+
+enum uts_proc {
+	UTS_PROC_OSTYPE = 0,
+	UTS_PROC_OSRELEASE = 1,
+	UTS_PROC_VERSION = 2,
+	UTS_PROC_HOSTNAME = 3,
+	UTS_PROC_DOMAINNAME = 4,
+};
+
+struct prctl_mm_map {
+	__u64 start_code;
+	__u64 end_code;
+	__u64 start_data;
+	__u64 end_data;
+	__u64 start_brk;
+	__u64 brk;
+	__u64 start_stack;
+	__u64 arg_start;
+	__u64 arg_end;
+	__u64 env_start;
+	__u64 env_end;
+	__u64 *auxv;
+	__u32 auxv_size;
+	__u32 exe_fd;
+};
+
+struct tms {
+	__kernel_clock_t tms_utime;
+	__kernel_clock_t tms_stime;
+	__kernel_clock_t tms_cutime;
+	__kernel_clock_t tms_cstime;
+};
+
+struct getcpu_cache {
+	long unsigned int blob[16];
+};
+
+struct pin_cookie {};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	long unsigned int max_cpu_capacity;
+	struct perf_domain *pd;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	u64 exec_clock;
+	u64 min_vruntime;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	struct sched_entity *last;
+	struct sched_entity *skip;
+	unsigned int nr_spread_over;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		long unsigned int load_avg;
+		long unsigned int util_avg;
+		long unsigned int runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	long unsigned int tg_load_avg_contrib;
+	long int propagate;
+	long int prop_runnable_sum;
+	long unsigned int h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cfs_bandwidth {};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	long unsigned int shares;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct cfs_bandwidth cfs_bandwidth;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct numa_group {
+	refcount_t refcount;
+	spinlock_t lock;
+	int nr_tasks;
+	pid_t gid;
+	int active_nodes;
+	struct callback_head rcu;
+	long unsigned int total_faults;
+	long unsigned int max_faults_cpu;
+	long unsigned int faults[0];
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+struct sched_group;
+
+struct sched_domain {
+	struct sched_domain *parent;
+	struct sched_domain *child;
+	struct sched_group *groups;
+	long unsigned int min_interval;
+	long unsigned int max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	long unsigned int last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	long unsigned int last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	long unsigned int span[0];
+};
+
+struct sched_group_capacity;
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	long unsigned int cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	long unsigned int capacity;
+	long unsigned int min_capacity;
+	long unsigned int max_capacity;
+	long unsigned int next_update;
+	int imbalance;
+	int id;
+	long unsigned int cpumask[0];
+};
+
+struct em_perf_state {
+	long unsigned int frequency;
+	long unsigned int power;
+	long unsigned int cost;
+	long unsigned int flags;
+};
+
+struct em_perf_domain {
+	struct em_perf_state *table;
+	int nr_perf_states;
+	long unsigned int flags;
+	long unsigned int cpus[0];
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+struct rt_prio_array {
+	long unsigned int bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+};
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 bw_ratio;
+};
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+	unsigned int numa_migrate_on;
+	long unsigned int last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	long unsigned int next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_pelt;
+	long unsigned int lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain *sd;
+	long unsigned int cpu_capacity;
+	long unsigned int cpu_capacity_orig;
+	struct callback_head *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	long unsigned int misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	u64 idle_stamp;
+	u64 avg_idle;
+	long unsigned int wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	long unsigned int calc_load_update;
+	long int calc_load_active;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct cpuidle_state *idle_state;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct rq_flags {
+	long unsigned int flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+enum numa_topology_type {
+	NUMA_DIRECT = 0,
+	NUMA_GLUELESS_MESH = 1,
+	NUMA_BACKPLANE = 2,
+};
+
+enum numa_faults_stats {
+	NUMA_MEM = 0,
+	NUMA_CPU = 1,
+	NUMA_MEMBUF = 2,
+	NUMA_CPUBUF = 3,
+};
+
+enum {
+	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
+	__SCHED_FEAT_START_DEBIT = 1,
+	__SCHED_FEAT_NEXT_BUDDY = 2,
+	__SCHED_FEAT_LAST_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_UTIL_EST_FASTUP = 22,
+	__SCHED_FEAT_LATENCY_WARN = 23,
+	__SCHED_FEAT_ALT_PERIOD = 24,
+	__SCHED_FEAT_BASE_SLICE = 25,
+	__SCHED_FEAT_NR = 26,
+};
+
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
+};
+
+enum numa_type {
+	node_has_spare = 0,
+	node_fully_busy = 1,
+	node_overloaded = 2,
+};
+
+struct numa_stats {
+	long unsigned int load;
+	long unsigned int runnable;
+	long unsigned int util;
+	long unsigned int compute_capacity;
+	unsigned int nr_running;
+	unsigned int weight;
+	enum numa_type node_type;
+	int idle_cpu;
+};
+
+struct task_numa_env {
+	struct task_struct *p;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	int imb_numa_nr;
+	struct numa_stats src_stats;
+	struct numa_stats dst_stats;
+	int imbalance_pct;
+	int dist;
+	struct task_struct *best_task;
+	long int best_imp;
+	int best_cpu;
+};
+
+struct energy_env {
+	long unsigned int task_busy_time;
+	long unsigned int pd_busy_time;
+	long unsigned int cpu_cap;
+	long unsigned int pd_cap;
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_asym_packing = 3,
+	group_imbalanced = 4,
+	group_overloaded = 5,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long int imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+};
+
+struct sg_lb_stats {
+	long unsigned int avg_load;
+	long unsigned int group_load;
+	long unsigned int group_capacity;
+	long unsigned int group_util;
+	long unsigned int group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	long unsigned int group_misfit_task_load;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	long unsigned int total_load;
+	long unsigned int total_capacity;
+	long unsigned int avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	long unsigned int ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	long unsigned int ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *module_init;
+};
+
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
+};
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+enum {
+	FTRACE_ITER_FILTER = 1,
+	FTRACE_ITER_NOTRACE = 2,
+	FTRACE_ITER_PRINTALL = 4,
+	FTRACE_ITER_DO_PROBES = 8,
+	FTRACE_ITER_PROBE = 16,
+	FTRACE_ITER_MOD = 32,
+	FTRACE_ITER_ENABLED = 64,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int);
+
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_pidns_info {
+	__u32 pid;
+	__u32 tgid;
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_bpf_get_smp_processor_id)();
+
+typedef u64 (*btf_bpf_get_numa_node_id)();
+
+typedef u64 (*btf_bpf_ktime_get_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_boot_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_get_current_pid_tgid)();
+
+typedef u64 (*btf_bpf_get_current_uid_gid)();
+
+typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
+
+typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_jiffies64)();
+
+typedef u64 (*btf_bpf_get_current_cgroup_id)();
+
+typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
+
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+struct bpf_bprintf_buffers {
+	char tmp_bufs[1536];
+};
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void *callback_fn;
+	void *value;
+};
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(struct bpf_dynptr_kern *, u32, u32);
+
+struct bpf_devmap_val {
+	__u32 ifindex;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct xdp_dev_bulk_queue {
+	struct xdp_frame *q[16];
+	struct list_head flush_node;
+	struct net_device *dev;
+	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
+	unsigned int count;
+};
+
+struct bpf_dtab;
+
+struct bpf_dtab_netdev {
+	struct net_device *dev;
+	struct hlist_node index_hlist;
+	struct bpf_dtab *dtab;
+	struct bpf_prog *xdp_prog;
+	struct callback_head rcu;
+	unsigned int idx;
+	struct bpf_devmap_val val;
+};
+
+struct bpf_dtab {
+	struct bpf_map map;
+	struct bpf_dtab_netdev **netdev_map;
+	struct list_head list;
+	struct hlist_head *dev_index_head;
+	spinlock_t index_lock;
+	unsigned int items;
+	u32 n_buckets;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = -1,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+struct context_tracking {
+	atomic_t state;
+	long int dynticks_nesting;
+	long int dynticks_nmi_nesting;
+};
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int nr_scanned;
+	long unsigned int nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	long unsigned int nr_migrated;
+	long unsigned int nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, long unsigned int, long unsigned int, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, long unsigned int, long unsigned int, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	size_t size;
+	struct device *dev;
+	size_t allocation;
+	size_t boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+	unsigned int in_use;
+	unsigned int offset;
+};
+
+struct demotion_nodes {
+	short unsigned int nr;
+	short int nodes[15];
+};
+
+struct saved {
+	struct path link;
+	struct delayed_call done;
+	const char *name;
+	unsigned int seq;
+};
+
+struct nameidata {
+	struct path path;
+	struct qstr last;
+	struct path root;
+	struct inode *inode;
+	unsigned int flags;
+	unsigned int state;
+	unsigned int seq;
+	unsigned int next_seq;
+	unsigned int m_seq;
+	unsigned int r_seq;
+	int last_type;
+	unsigned int depth;
+	int total_link_count;
+	struct saved *stack;
+	struct saved internal[2];
+	struct filename *name;
+	struct nameidata *saved;
+	unsigned int root_seq;
+	int dfd;
+	kuid_t dir_uid;
+	umode_t dir_mode;
+};
+
+struct renamedata {
+	struct user_namespace *old_mnt_userns;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct user_namespace *new_mnt_userns;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
+enum {
+	LAST_NORM = 0,
+	LAST_ROOT = 1,
+	LAST_DOT = 2,
+	LAST_DOTDOT = 3,
+};
+
+enum {
+	WALK_TRAILING = 1,
+	WALK_MORE = 2,
+	WALK_NOFOLLOW = 4,
+};
+
+struct signalfd_siginfo {
+	__u32 ssi_signo;
+	__s32 ssi_errno;
+	__s32 ssi_code;
+	__u32 ssi_pid;
+	__u32 ssi_uid;
+	__s32 ssi_fd;
+	__u32 ssi_tid;
+	__u32 ssi_band;
+	__u32 ssi_overrun;
+	__u32 ssi_trapno;
+	__s32 ssi_status;
+	__s32 ssi_int;
+	__u64 ssi_ptr;
+	__u64 ssi_utime;
+	__u64 ssi_stime;
+	__u64 ssi_addr;
+	__u16 ssi_addr_lsb;
+	__u16 __pad2;
+	__s32 ssi_syscall;
+	__u64 ssi_call_addr;
+	__u32 ssi_arch;
+	__u8 __pad[28];
+};
+
+struct signalfd_ctx {
+	sigset_t sigmask;
+};
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+enum kcore_type {
+	KCORE_TEXT = 0,
+	KCORE_VMALLOC = 1,
+	KCORE_RAM = 2,
+	KCORE_VMEMMAP = 3,
+	KCORE_USER = 4,
+};
+
+struct kcore_list {
+	struct list_head list;
+	long unsigned int addr;
+	size_t size;
+	int type;
+};
+
+struct pts_mount_opts {
+	int setuid;
+	int setgid;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	umode_t ptmxmode;
+	int reserve;
+	int max;
+};
+
+enum {
+	Opt_uid___5 = 0,
+	Opt_gid___6 = 1,
+	Opt_mode___4 = 2,
+	Opt_ptmxmode = 3,
+	Opt_newinstance = 4,
+	Opt_max = 5,
+	Opt_err___4 = 6,
+};
+
+struct pts_fs_info {
+	struct ida allocated_ptys;
+	struct pts_mount_opts mount_opts;
+	struct super_block *sb;
+	struct dentry *ptmx_dentry;
+};
+
+struct ext4_xattr_ibody_header {
+	__le32 h_magic;
+};
+
+struct ext4_xattr_inode_array {
+	unsigned int count;
+	struct inode *inodes[0];
+};
+
+struct mpage_da_data {
+	struct inode *inode;
+	struct writeback_control *wbc;
+	long unsigned int first_page;
+	long unsigned int next_page;
+	long unsigned int last_page;
+	struct ext4_map_blocks map;
+	struct ext4_io_submit io_submit;
+	unsigned int do_map: 1;
+	unsigned int scanned_until_end: 1;
+};
+
+struct fscrypt_info;
+
+struct ext2_mount_options {
+	long unsigned int s_mount_opt;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+};
+
+enum {
+	Opt_bsd_df___2 = 0,
+	Opt_minix_df___2 = 1,
+	Opt_grpid___2 = 2,
+	Opt_nogrpid___2 = 3,
+	Opt_resgid___2 = 4,
+	Opt_resuid___2 = 5,
+	Opt_sb___3 = 6,
+	Opt_err_cont___2 = 7,
+	Opt_err_panic___2 = 8,
+	Opt_err_ro___2 = 9,
+	Opt_nouid32___2 = 10,
+	Opt_debug___3 = 11,
+	Opt_oldalloc = 12,
+	Opt_orlov = 13,
+	Opt_nobh = 14,
+	Opt_user_xattr___2 = 15,
+	Opt_nouser_xattr___2 = 16,
+	Opt_acl___3 = 17,
+	Opt_noacl___2 = 18,
+	Opt_xip = 19,
+	Opt_dax___2 = 20,
+	Opt_ignore___2 = 21,
+	Opt_err___5 = 22,
+	Opt_quota___2 = 23,
+	Opt_usrquota___2 = 24,
+	Opt_grpquota___2 = 25,
+	Opt_reservation = 26,
+	Opt_noreservation = 27,
+};
+
+enum {
+	NFS_DELEGATION_NEED_RECLAIM = 0,
+	NFS_DELEGATION_RETURN = 1,
+	NFS_DELEGATION_RETURN_IF_CLOSED = 2,
+	NFS_DELEGATION_REFERENCED = 3,
+	NFS_DELEGATION_RETURNING = 4,
+	NFS_DELEGATION_REVOKED = 5,
+	NFS_DELEGATION_TEST_EXPIRED = 6,
+	NFS_DELEGATION_INODE_FREEING = 7,
+	NFS_DELEGATION_RETURN_DELAYED = 8,
+};
+
+struct xfs_iext_rec {
+	uint64_t lo;
+	uint64_t hi;
+};
+
+struct xfs_iext_leaf {
+	struct xfs_iext_rec recs[15];
+	struct xfs_iext_leaf *prev;
+	struct xfs_iext_leaf *next;
+};
+
+enum {
+	NODE_SIZE = 256,
+	KEYS_PER_NODE = 16,
+	RECS_PER_LEAF = 15,
+};
+
+struct xfs_iext_node {
+	uint64_t keys[16];
+	void *ptrs[16];
+};
+
+typedef uint32_t xfs_aextnum_t;
+
+struct xfs_legacy_timestamp {
+	__be32 t_sec;
+	__be32 t_nsec;
+};
+
+struct sem;
+
+struct sem_queue;
+
+struct sem_undo;
+
+struct semid_ds {
+	struct ipc_perm sem_perm;
+	__kernel_old_time_t sem_otime;
+	__kernel_old_time_t sem_ctime;
+	struct sem *sem_base;
+	struct sem_queue *sem_pending;
+	struct sem_queue **sem_pending_last;
+	struct sem_undo *undo;
+	short unsigned int sem_nsems;
+};
+
+struct sem {
+	int semval;
+	struct pid *sempid;
+	spinlock_t lock;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	time64_t sem_otime;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sembuf;
+
+struct sem_queue {
+	struct list_head list;
+	struct task_struct *sleeper;
+	struct sem_undo *undo;
+	struct pid *pid;
+	int status;
+	struct sembuf *sops;
+	struct sembuf *blocking;
+	int nsops;
+	bool alter;
+	bool dupsop;
+};
+
+struct sem_undo {
+	struct list_head list_proc;
+	struct callback_head rcu;
+	struct sem_undo_list *ulp;
+	struct list_head list_id;
+	int semid;
+	short int *semadj;
+};
+
+struct semid64_ds {
+	struct ipc64_perm sem_perm;
+	long int sem_otime;
+	long int sem_ctime;
+	long unsigned int sem_nsems;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct sembuf {
+	short unsigned int sem_num;
+	short int sem_op;
+	short int sem_flg;
+};
+
+struct seminfo {
+	int semmap;
+	int semmni;
+	int semmns;
+	int semmnu;
+	int semmsl;
+	int semopm;
+	int semume;
+	int semusz;
+	int semvmx;
+	int semaem;
+};
+
+struct sem_undo_list {
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct list_head list_proc;
+};
+
+struct sem_array {
+	struct kern_ipc_perm sem_perm;
+	time64_t sem_ctime;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	struct list_head list_id;
+	int sem_nsems;
+	int complex_count;
+	unsigned int use_global_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sem sems[0];
+};
+
+struct rtattr {
+	short unsigned int rta_len;
+	short unsigned int rta_type;
+};
+
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
 	union {
 		struct {
-			struct work_struct work;
-			struct bio *bio;
-		};
-		struct {
-			void *bi_private_orig;
-			bio_end_io_t *bi_end_io_orig;
-		};
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
 	};
 };
 
-struct blk_crypto_keyslot {
-	enum blk_crypto_mode_num crypto_mode;
-	struct crypto_skcipher *tfms[4];
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
 };
 
-union blk_crypto_iv {
-	__le64 dun[4];
-	u8 bytes[32];
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
 };
 
-typedef void (*swap_func_t)(void *, void *, int);
-
-typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
-
-struct siprand_state {
-	long unsigned int v0;
-	long unsigned int v1;
-	long unsigned int v2;
-	long unsigned int v3;
-};
-
-typedef __kernel_long_t __kernel_ptrdiff_t;
-
-typedef __kernel_ptrdiff_t ptrdiff_t;
-
-struct region {
-	unsigned int start;
-	unsigned int off;
-	unsigned int group_len;
-	unsigned int end;
+struct crypto_report_blkcipher {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
 };
 
 enum {
-	REG_OP_ISFREE = 0,
-	REG_OP_ALLOC = 1,
-	REG_OP_RELEASE = 2,
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
 };
 
-typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
-
-typedef void sg_free_fn(struct scatterlist *, unsigned int);
-
-struct sg_page_iter {
-	struct scatterlist *sg;
-	unsigned int sg_pgoffset;
-	unsigned int __nents;
-	int __pg_advance;
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
 };
 
-struct sg_dma_page_iter {
-	struct sg_page_iter base;
+struct mq_inflight {
+	struct block_device *part;
+	unsigned int inflight[2];
 };
 
-struct sg_mapping_iter {
-	struct page *page;
-	void *addr;
-	size_t length;
-	size_t consumed;
-	struct sg_page_iter piter;
-	unsigned int __offset;
-	unsigned int __remaining;
-	unsigned int __flags;
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
 };
 
-typedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);
-
-struct rhltable {
-	struct rhashtable ht;
+struct flush_busy_ctx_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct list_head *list;
 };
 
-struct rhashtable_walker {
+struct dispatch_rq_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request *rq;
+};
+
+enum prep_dispatch {
+	PREP_DISPATCH_OK = 0,
+	PREP_DISPATCH_NO_TAG = 1,
+	PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct rq_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	bool has_rq;
+};
+
+struct blk_mq_qe_pair {
+	struct list_head node;
+	struct request_queue *q;
+	struct elevator_type *type;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_overflow_cqe {
 	struct list_head list;
-	struct bucket_table *tbl;
-};
-
-struct rhashtable_iter {
-	struct rhashtable *ht;
-	struct rhash_head *p;
-	struct rhlist_head *list;
-	struct rhashtable_walker walker;
-	unsigned int slot;
-	unsigned int skip;
-	bool end_of_table;
-};
-
-union nested_table {
-	union nested_table *table;
-	struct rhash_lock_head *bucket;
+	struct io_uring_cqe cqe;
 };
 
 struct once_work {
 	struct work_struct work;
 	struct static_key_true *key;
+	struct module *module;
 };
 
-struct genradix_iter {
-	size_t offset;
-	size_t pos;
+struct strarray {
+	char **array;
+	size_t n;
 };
 
-struct genradix_node {
-	union {
-		struct genradix_node *children[8192];
-		u8 data[65536];
-	};
-};
-
-struct reciprocal_value_adv {
-	u32 m;
-	u8 sh;
-	u8 exp;
-	bool is_wide_m;
-};
-
-enum devm_ioremap_type {
-	DEVM_IOREMAP = 0,
-	DEVM_IOREMAP_UC = 1,
-	DEVM_IOREMAP_WC = 2,
-};
-
-struct pcim_iomap_devres {
-	void *table[6];
-};
-
-struct btree_head {
-	long unsigned int *node;
-	mempool_t *mempool;
-	int height;
-};
-
-struct btree_geo {
-	int keylen;
-	int no_pairs;
-	int no_longs;
-};
-
-typedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);
-
-typedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);
-
-typedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);
-
-typedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);
-
-enum assoc_array_walk_status {
-	assoc_array_walk_tree_empty = 0,
-	assoc_array_walk_found_terminal_node = 1,
-	assoc_array_walk_found_wrong_shortcut = 2,
-};
-
-struct assoc_array_walk_result {
-	struct {
-		struct assoc_array_node *node;
-		int level;
-		int slot;
-	} terminal_node;
-	struct {
-		struct assoc_array_shortcut *shortcut;
-		int level;
-		int sc_level;
-		long unsigned int sc_segments;
-		long unsigned int dissimilarity;
-	} wrong_shortcut;
-};
-
-struct assoc_array_delete_collapse_context {
-	struct assoc_array_node *node;
-	const void *skip_leaf;
-	int slot;
-};
-
-struct linear_range {
-	unsigned int min;
-	unsigned int min_sel;
-	unsigned int max_sel;
-	unsigned int step;
-};
-
-enum packing_op {
-	PACK = 0,
-	UNPACK = 1,
-};
-
-struct crc_test {
-	u32 crc;
-	u32 start;
-	u32 length;
-	u32 crc_le;
-	u32 crc_be;
-	u32 crc32c_le;
-};
-
-struct xxh32_state {
-	uint32_t total_len_32;
-	uint32_t large_len;
-	uint32_t v1;
-	uint32_t v2;
-	uint32_t v3;
-	uint32_t v4;
-	uint32_t mem32[4];
-	uint32_t memsize;
-};
-
-struct xxh64_state {
-	uint64_t total_len;
-	uint64_t v1;
-	uint64_t v2;
-	uint64_t v3;
-	uint64_t v4;
-	uint64_t mem64[4];
-	uint32_t memsize;
-};
-
-struct gen_pool;
-
-typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
-
-struct gen_pool {
-	spinlock_t lock;
-	struct list_head chunks;
-	int min_alloc_order;
-	genpool_algo_t algo;
-	void *data;
-	const char *name;
-};
-
-struct gen_pool_chunk {
-	struct list_head next_chunk;
-	atomic_long_t avail;
-	phys_addr_t phys_addr;
-	void *owner;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	long unsigned int bits[0];
-};
-
-struct genpool_data_align {
-	int align;
-};
-
-struct genpool_data_fixed {
-	long unsigned int offset;
-};
-
-typedef struct z_stream_s z_stream;
-
-typedef z_stream *z_streamp;
-
-typedef struct {
-	unsigned char op;
-	unsigned char bits;
-	short unsigned int val;
-} code;
-
-typedef enum {
-	HEAD = 0,
-	FLAGS = 1,
-	TIME = 2,
-	OS = 3,
-	EXLEN = 4,
-	EXTRA = 5,
-	NAME = 6,
-	COMMENT = 7,
-	HCRC = 8,
-	DICTID = 9,
-	DICT = 10,
-	TYPE = 11,
-	TYPEDO = 12,
-	STORED = 13,
-	COPY = 14,
-	TABLE = 15,
-	LENLENS = 16,
-	CODELENS = 17,
-	LEN = 18,
-	LENEXT = 19,
-	DIST = 20,
-	DISTEXT = 21,
-	MATCH = 22,
-	LIT = 23,
-	CHECK = 24,
-	LENGTH = 25,
-	DONE = 26,
-	BAD = 27,
-	MEM = 28,
-	SYNC = 29,
-} inflate_mode;
-
-struct inflate_state {
-	inflate_mode mode;
-	int last;
-	int wrap;
-	int havedict;
-	int flags;
-	unsigned int dmax;
-	long unsigned int check;
-	long unsigned int total;
-	unsigned int wbits;
-	unsigned int wsize;
-	unsigned int whave;
-	unsigned int write;
-	unsigned char *window;
-	long unsigned int hold;
-	unsigned int bits;
-	unsigned int length;
-	unsigned int offset;
-	unsigned int extra;
-	const code *lencode;
-	const code *distcode;
-	unsigned int lenbits;
-	unsigned int distbits;
-	unsigned int ncode;
-	unsigned int nlen;
-	unsigned int ndist;
-	unsigned int have;
-	code *next;
-	short unsigned int lens[320];
-	short unsigned int work[288];
-	code codes[2048];
-};
-
-union uu {
-	short unsigned int us;
-	unsigned char b[2];
-};
-
-typedef unsigned int uInt;
-
-struct inflate_workspace {
-	struct inflate_state inflate_state;
-	unsigned char working_window[32768];
-};
-
-typedef enum {
-	CODES = 0,
-	LENS = 1,
-	DISTS = 2,
-} codetype;
-
-typedef unsigned char uch;
-
-typedef short unsigned int ush;
-
-typedef long unsigned int ulg;
-
-struct ct_data_s {
-	union {
-		ush freq;
-		ush code;
-	} fc;
-	union {
-		ush dad;
-		ush len;
-	} dl;
-};
-
-typedef struct ct_data_s ct_data;
-
-struct static_tree_desc_s {
-	const ct_data *static_tree;
-	const int *extra_bits;
-	int extra_base;
-	int elems;
-	int max_length;
-};
-
-typedef struct static_tree_desc_s static_tree_desc;
-
-struct tree_desc_s {
-	ct_data *dyn_tree;
-	int max_code;
-	static_tree_desc *stat_desc;
-};
-
-typedef ush Pos;
-
-typedef unsigned int IPos;
-
-struct deflate_state {
-	z_streamp strm;
-	int status;
-	Byte *pending_buf;
-	ulg pending_buf_size;
-	Byte *pending_out;
-	int pending;
-	int noheader;
-	Byte data_type;
-	Byte method;
-	int last_flush;
-	uInt w_size;
-	uInt w_bits;
-	uInt w_mask;
-	Byte *window;
-	ulg window_size;
-	Pos *prev;
-	Pos *head;
-	uInt ins_h;
-	uInt hash_size;
-	uInt hash_bits;
-	uInt hash_mask;
-	uInt hash_shift;
-	long int block_start;
-	uInt match_length;
-	IPos prev_match;
-	int match_available;
-	uInt strstart;
-	uInt match_start;
-	uInt lookahead;
-	uInt prev_length;
-	uInt max_chain_length;
-	uInt max_lazy_match;
-	int level;
-	int strategy;
-	uInt good_match;
-	int nice_match;
-	struct ct_data_s dyn_ltree[573];
-	struct ct_data_s dyn_dtree[61];
-	struct ct_data_s bl_tree[39];
-	struct tree_desc_s l_desc;
-	struct tree_desc_s d_desc;
-	struct tree_desc_s bl_desc;
-	ush bl_count[16];
-	int heap[573];
-	int heap_len;
-	int heap_max;
-	uch depth[573];
-	uch *l_buf;
-	uInt lit_bufsize;
-	uInt last_lit;
-	ush *d_buf;
-	ulg opt_len;
-	ulg static_len;
-	ulg compressed_len;
-	uInt matches;
-	int last_eob_len;
-	ush bi_buf;
-	int bi_valid;
-};
-
-typedef struct deflate_state deflate_state;
-
-typedef enum {
-	need_more = 0,
-	block_done = 1,
-	finish_started = 2,
-	finish_done = 3,
-} block_state;
-
-typedef block_state (*compress_func)(deflate_state *, int);
-
-struct deflate_workspace {
-	deflate_state deflate_memory;
-	Byte *window_memory;
-	Pos *prev_memory;
-	Pos *head_memory;
-	char *overlay_memory;
-};
-
-typedef struct deflate_workspace deflate_workspace;
-
-struct config_s {
-	ush good_length;
-	ush max_lazy;
-	ush nice_length;
-	ush max_chain;
-	compress_func func;
-};
-
-typedef struct config_s config;
-
-typedef struct tree_desc_s tree_desc;
-
-typedef struct {
-	uint32_t hashTable[4096];
-	uint32_t currentOffset;
-	uint32_t initCheck;
-	const uint8_t *dictionary;
-	uint8_t *bufferStart;
-	uint32_t dictSize;
-} LZ4_stream_t_internal;
-
-typedef union {
-	long long unsigned int table[2052];
-	LZ4_stream_t_internal internal_donotuse;
-} LZ4_stream_t;
-
-typedef uint8_t BYTE;
-
-typedef uint16_t U16;
-
-typedef uint32_t U32;
-
-typedef uint64_t U64;
-
-typedef uintptr_t uptrval;
-
-typedef enum {
-	noLimit = 0,
-	limitedOutput = 1,
-} limitedOutput_directive;
-
-typedef enum {
-	byPtr = 0,
-	byU32 = 1,
-	byU16 = 2,
-} tableType_t;
-
-typedef enum {
-	noDict = 0,
-	withPrefix64k = 1,
-	usingExtDict = 2,
-} dict_directive;
-
-typedef enum {
-	noDictIssue = 0,
-	dictSmall = 1,
-} dictIssue_directive;
-
-typedef struct {
-	const uint8_t *externalDict;
-	size_t extDictSize;
-	const uint8_t *prefixEnd;
-	size_t prefixSize;
-} LZ4_streamDecode_t_internal;
-
-typedef union {
-	long long unsigned int table[4];
-	LZ4_streamDecode_t_internal internal_donotuse;
-} LZ4_streamDecode_t;
-
-typedef enum {
-	endOnOutputSize = 0,
-	endOnInputSize = 1,
-} endCondition_directive;
-
-typedef enum {
-	decode_full_block = 0,
-	partial_decode = 1,
-} earlyEnd_directive;
-
-typedef struct {
-	size_t bitContainer;
-	int bitPos;
-	char *startPtr;
-	char *ptr;
-	char *endPtr;
-} BIT_CStream_t;
-
-typedef unsigned int FSE_CTable;
-
-typedef struct {
-	ptrdiff_t value;
-	const void *stateTable;
-	const void *symbolTT;
-	unsigned int stateLog;
-} FSE_CState_t;
-
-typedef struct {
-	int deltaFindState;
-	U32 deltaNbBits;
-} FSE_symbolCompressionTransform;
-
-typedef int16_t S16;
-
-struct HUF_CElt_s {
-	U16 val;
-	BYTE nbBits;
-};
-
-typedef struct HUF_CElt_s HUF_CElt;
-
-typedef enum {
-	HUF_repeat_none = 0,
-	HUF_repeat_check = 1,
-	HUF_repeat_valid = 2,
-} HUF_repeat;
-
-struct nodeElt_s {
-	U32 count;
-	U16 parent;
-	BYTE byte;
-	BYTE nbBits;
-};
-
-typedef struct nodeElt_s nodeElt;
-
-typedef struct {
-	U32 base;
-	U32 curr;
-} rankPos;
-
-typedef enum {
-	ZSTDcs_created = 0,
-	ZSTDcs_init = 1,
-	ZSTDcs_ongoing = 2,
-	ZSTDcs_ending = 3,
-} ZSTD_compressionStage_e;
-
-typedef void * (*ZSTD_allocFunction)(void *, size_t);
-
-typedef void (*ZSTD_freeFunction)(void *, void *);
-
-typedef struct {
-	ZSTD_allocFunction customAlloc;
-	ZSTD_freeFunction customFree;
-	void *opaque;
-} ZSTD_customMem;
-
-typedef struct {
-	U32 price;
-	U32 off;
-	U32 mlen;
-	U32 litlen;
-	U32 rep[3];
-} ZSTD_optimal_t;
-
-typedef struct {
-	U32 off;
-	U32 len;
-} ZSTD_match_t;
-
-struct seqDef_s;
-
-typedef struct seqDef_s seqDef;
-
-typedef struct {
-	seqDef *sequencesStart;
-	seqDef *sequences;
-	BYTE *litStart;
-	BYTE *lit;
-	BYTE *llCode;
-	BYTE *mlCode;
-	BYTE *ofCode;
-	U32 longLengthID;
-	U32 longLengthPos;
-	ZSTD_optimal_t *priceTable;
-	ZSTD_match_t *matchTable;
-	U32 *matchLengthFreq;
-	U32 *litLengthFreq;
-	U32 *litFreq;
-	U32 *offCodeFreq;
-	U32 matchLengthSum;
-	U32 matchSum;
-	U32 litLengthSum;
-	U32 litSum;
-	U32 offCodeSum;
-	U32 log2matchLengthSum;
-	U32 log2matchSum;
-	U32 log2litLengthSum;
-	U32 log2litSum;
-	U32 log2offCodeSum;
-	U32 factor;
-	U32 staticPrices;
-	U32 cachedPrice;
-	U32 cachedLitLength;
-	const BYTE *cachedLiterals;
-} seqStore_t;
-
-struct HUF_CElt_s___2;
-
-typedef struct HUF_CElt_s___2 HUF_CElt___2;
-
-struct ZSTD_CCtx_s___2 {
-	const BYTE *nextSrc;
-	const BYTE *base;
-	const BYTE *dictBase;
-	U32 dictLimit;
-	U32 lowLimit;
-	U32 nextToUpdate;
-	U32 nextToUpdate3;
-	U32 hashLog3;
-	U32 loadedDictEnd;
-	U32 forceWindow;
-	U32 forceRawDict;
-	ZSTD_compressionStage_e stage;
-	U32 rep[3];
-	U32 repToConfirm[3];
-	U32 dictID;
-	ZSTD_parameters params;
-	void *workSpace;
-	size_t workSpaceSize;
-	size_t blockSize;
-	U64 frameContentSize;
-	struct xxh64_state xxhState;
-	ZSTD_customMem customMem;
-	seqStore_t seqStore;
-	U32 *hashTable;
-	U32 *hashTable3;
-	U32 *chainTable;
-	HUF_CElt___2 *hufTable;
-	U32 flagStaticTables;
-	HUF_repeat flagStaticHufTable;
-	FSE_CTable offcodeCTable[187];
-	FSE_CTable matchlengthCTable[363];
-	FSE_CTable litlengthCTable[329];
-	unsigned int tmpCounters[1536];
-};
-
-typedef struct ZSTD_CCtx_s___2 ZSTD_CCtx___2;
-
-struct ZSTD_CDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictContentSize;
-	ZSTD_CCtx___2 *refContext;
-};
-
-typedef struct ZSTD_CDict_s ZSTD_CDict;
-
-struct ZSTD_inBuffer_s {
-	const void *src;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
-
-struct ZSTD_outBuffer_s {
-	void *dst;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
-
-typedef enum {
-	zcss_init = 0,
-	zcss_load = 1,
-	zcss_flush = 2,
-	zcss_final = 3,
-} ZSTD_cStreamStage;
-
-struct ZSTD_CStream_s {
-	ZSTD_CCtx___2 *cctx;
-	ZSTD_CDict *cdictLocal;
-	const ZSTD_CDict *cdict;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inToCompress;
-	size_t inBuffPos;
-	size_t inBuffTarget;
-	size_t blockSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outBuffContentSize;
-	size_t outBuffFlushedSize;
-	ZSTD_cStreamStage stage;
-	U32 checksum;
-	U32 frameEnded;
-	U64 pledgedSrcSize;
-	U64 inputProcessed;
-	ZSTD_parameters params;
-	ZSTD_customMem customMem;
-};
-
-typedef struct ZSTD_CStream_s ZSTD_CStream;
-
-typedef int32_t S32;
-
-typedef enum {
-	set_basic = 0,
-	set_rle = 1,
-	set_compressed = 2,
-	set_repeat = 3,
-} symbolEncodingType_e;
-
-struct seqDef_s {
-	U32 offset;
-	U16 litLength;
-	U16 matchLength;
-};
-
-typedef enum {
-	ZSTDcrp_continue = 0,
-	ZSTDcrp_noMemset = 1,
-	ZSTDcrp_fullReset = 2,
-} ZSTD_compResetPolicy_e;
-
-typedef void (*ZSTD_blockCompressor)(ZSTD_CCtx___2 *, const void *, size_t);
-
-typedef enum {
-	zsf_gather = 0,
-	zsf_flush = 1,
-	zsf_end = 2,
-} ZSTD_flush_e;
-
-typedef size_t (*searchMax_f)(ZSTD_CCtx___2 *, const BYTE *, const BYTE *, size_t *, U32, U32);
-
-typedef struct {
-	size_t bitContainer;
-	unsigned int bitsConsumed;
-	const char *ptr;
-	const char *start;
-} BIT_DStream_t;
-
-typedef enum {
-	BIT_DStream_unfinished = 0,
-	BIT_DStream_endOfBuffer = 1,
-	BIT_DStream_completed = 2,
-	BIT_DStream_overflow = 3,
-} BIT_DStream_status;
-
-typedef unsigned int FSE_DTable;
-
-typedef struct {
-	size_t state;
-	const void *table;
-} FSE_DState_t;
-
-typedef struct {
-	U16 tableLog;
-	U16 fastMode;
-} FSE_DTableHeader;
-
-typedef struct {
-	short unsigned int newState;
-	unsigned char symbol;
-	unsigned char nbBits;
-} FSE_decode_t;
-
-typedef struct {
-	void *ptr;
-	const void *end;
-} ZSTD_stack;
-
-typedef U32 HUF_DTable;
-
 typedef struct {
 	BYTE maxTableLog;
 	BYTE tableType;
@@ -91129,13 +108633,21 @@
 typedef struct {
 	BYTE byte;
 	BYTE nbBits;
-} HUF_DEltX2;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[16];
+	U32 rankStart[16];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
 
 typedef struct {
 	U16 sequence;
 	BYTE nbBits;
 	BYTE length;
-} HUF_DEltX4;
+} HUF_DEltX2;
 
 typedef struct {
 	BYTE symbol;
@@ -91145,1556 +108657,19 @@
 typedef U32 rankValCol_t[13];
 
 typedef struct {
+	U32 rankVal[156];
+	U32 rankStats[13];
+	U32 rankStart0[14];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
 	U32 tableTime;
 	U32 decode256Time;
 } algo_time_t;
 
-typedef struct {
-	FSE_DTable LLTable[513];
-	FSE_DTable OFTable[257];
-	FSE_DTable MLTable[513];
-	HUF_DTable hufTable[4097];
-	U64 workspace[384];
-	U32 rep[3];
-} ZSTD_entropyTables_t;
-
-typedef struct {
-	long long unsigned int frameContentSize;
-	unsigned int windowSize;
-	unsigned int dictID;
-	unsigned int checksumFlag;
-} ZSTD_frameParams;
-
-typedef enum {
-	bt_raw = 0,
-	bt_rle = 1,
-	bt_compressed = 2,
-	bt_reserved = 3,
-} blockType_e;
-
-typedef enum {
-	ZSTDds_getFrameHeaderSize = 0,
-	ZSTDds_decodeFrameHeader = 1,
-	ZSTDds_decodeBlockHeader = 2,
-	ZSTDds_decompressBlock = 3,
-	ZSTDds_decompressLastBlock = 4,
-	ZSTDds_checkChecksum = 5,
-	ZSTDds_decodeSkippableHeader = 6,
-	ZSTDds_skipFrame = 7,
-} ZSTD_dStage;
-
-struct ZSTD_DCtx_s___2 {
-	const FSE_DTable *LLTptr;
-	const FSE_DTable *MLTptr;
-	const FSE_DTable *OFTptr;
-	const HUF_DTable *HUFptr;
-	ZSTD_entropyTables_t entropy;
-	const void *previousDstEnd;
-	const void *base;
-	const void *vBase;
-	const void *dictEnd;
-	size_t expected;
-	ZSTD_frameParams fParams;
-	blockType_e bType;
-	ZSTD_dStage stage;
-	U32 litEntropy;
-	U32 fseEntropy;
-	struct xxh64_state xxhState;
-	size_t headerSize;
-	U32 dictID;
-	const BYTE *litPtr;
-	ZSTD_customMem customMem;
-	size_t litSize;
-	size_t rleSize;
-	BYTE litBuffer[131080];
-	BYTE headerBuffer[18];
-};
-
-typedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;
-
-struct ZSTD_DDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictSize;
-	ZSTD_entropyTables_t entropy;
-	U32 dictID;
-	U32 entropyPresent;
-	ZSTD_customMem cMem;
-};
-
-typedef struct ZSTD_DDict_s ZSTD_DDict;
-
-typedef enum {
-	zdss_init = 0,
-	zdss_loadHeader = 1,
-	zdss_read = 2,
-	zdss_load = 3,
-	zdss_flush = 4,
-} ZSTD_dStreamStage;
-
-struct ZSTD_DStream_s {
-	ZSTD_DCtx___2 *dctx;
-	ZSTD_DDict *ddictLocal;
-	const ZSTD_DDict *ddict;
-	ZSTD_frameParams fParams;
-	ZSTD_dStreamStage stage;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inPos;
-	size_t maxWindowSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outStart;
-	size_t outEnd;
-	size_t blockSize;
-	BYTE headerBuffer[18];
-	size_t lhSize;
-	ZSTD_customMem customMem;
-	void *legacyContext;
-	U32 previousLegacyVersion;
-	U32 legacyVersion;
-	U32 hostageByte;
-};
-
-typedef struct ZSTD_DStream_s ZSTD_DStream;
-
-typedef enum {
-	ZSTDnit_frameHeader = 0,
-	ZSTDnit_blockHeader = 1,
-	ZSTDnit_block = 2,
-	ZSTDnit_lastBlock = 3,
-	ZSTDnit_checksum = 4,
-	ZSTDnit_skippableFrame = 5,
-} ZSTD_nextInputType_e;
-
-typedef uintptr_t uPtrDiff;
-
-typedef struct {
-	blockType_e blockType;
-	U32 lastBlock;
-	U32 origSize;
-} blockProperties_t;
-
-typedef union {
-	FSE_decode_t realData;
-	U32 alignedBy4;
-} FSE_decode_t4;
-
-typedef struct {
-	size_t litLength;
-	size_t matchLength;
-	size_t offset;
-	const BYTE *match;
-} seq_t;
-
-typedef struct {
-	BIT_DStream_t DStream;
-	FSE_DState_t stateLL;
-	FSE_DState_t stateOffb;
-	FSE_DState_t stateML;
-	size_t prevOffset[3];
-	const BYTE *base;
-	size_t pos;
-	uPtrDiff gotoDict;
-} seqState_t;
-
-enum xz_mode {
-	XZ_SINGLE = 0,
-	XZ_PREALLOC = 1,
-	XZ_DYNALLOC = 2,
-};
-
-enum xz_ret {
-	XZ_OK = 0,
-	XZ_STREAM_END = 1,
-	XZ_UNSUPPORTED_CHECK = 2,
-	XZ_MEM_ERROR = 3,
-	XZ_MEMLIMIT_ERROR = 4,
-	XZ_FORMAT_ERROR = 5,
-	XZ_OPTIONS_ERROR = 6,
-	XZ_DATA_ERROR = 7,
-	XZ_BUF_ERROR = 8,
-};
-
-struct xz_buf {
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_size;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-};
-
-typedef uint64_t vli_type;
-
-enum xz_check {
-	XZ_CHECK_NONE = 0,
-	XZ_CHECK_CRC32 = 1,
-	XZ_CHECK_CRC64 = 4,
-	XZ_CHECK_SHA256 = 10,
-};
-
-struct xz_dec_hash {
-	vli_type unpadded;
-	vli_type uncompressed;
-	uint32_t crc32;
-};
-
-struct xz_dec_lzma2;
-
-struct xz_dec_bcj;
-
-struct xz_dec {
-	enum {
-		SEQ_STREAM_HEADER = 0,
-		SEQ_BLOCK_START = 1,
-		SEQ_BLOCK_HEADER = 2,
-		SEQ_BLOCK_UNCOMPRESS = 3,
-		SEQ_BLOCK_PADDING = 4,
-		SEQ_BLOCK_CHECK = 5,
-		SEQ_INDEX = 6,
-		SEQ_INDEX_PADDING = 7,
-		SEQ_INDEX_CRC32 = 8,
-		SEQ_STREAM_FOOTER = 9,
-	} sequence;
-	uint32_t pos;
-	vli_type vli;
-	size_t in_start;
-	size_t out_start;
-	uint32_t crc32;
-	enum xz_check check_type;
-	enum xz_mode mode;
-	bool allow_buf_error;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		uint32_t size;
-	} block_header;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} block;
-	struct {
-		enum {
-			SEQ_INDEX_COUNT = 0,
-			SEQ_INDEX_UNPADDED = 1,
-			SEQ_INDEX_UNCOMPRESSED = 2,
-		} sequence;
-		vli_type size;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} index;
-	struct {
-		size_t pos;
-		size_t size;
-		uint8_t buf[1024];
-	} temp;
-	struct xz_dec_lzma2 *lzma2;
-	struct xz_dec_bcj *bcj;
-	bool bcj_active;
-};
-
-enum lzma_state {
-	STATE_LIT_LIT = 0,
-	STATE_MATCH_LIT_LIT = 1,
-	STATE_REP_LIT_LIT = 2,
-	STATE_SHORTREP_LIT_LIT = 3,
-	STATE_MATCH_LIT = 4,
-	STATE_REP_LIT = 5,
-	STATE_SHORTREP_LIT = 6,
-	STATE_LIT_MATCH = 7,
-	STATE_LIT_LONGREP = 8,
-	STATE_LIT_SHORTREP = 9,
-	STATE_NONLIT_MATCH = 10,
-	STATE_NONLIT_REP = 11,
-};
-
-struct dictionary {
-	uint8_t *buf;
-	size_t start;
-	size_t pos;
-	size_t full;
-	size_t limit;
-	size_t end;
-	uint32_t size;
-	uint32_t size_max;
-	uint32_t allocated;
-	enum xz_mode mode;
-};
-
-struct rc_dec {
-	uint32_t range;
-	uint32_t code;
-	uint32_t init_bytes_left;
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_limit;
-};
-
-struct lzma_len_dec {
-	uint16_t choice;
-	uint16_t choice2;
-	uint16_t low[128];
-	uint16_t mid[128];
-	uint16_t high[256];
-};
-
-struct lzma_dec {
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-	enum lzma_state state;
-	uint32_t len;
-	uint32_t lc;
-	uint32_t literal_pos_mask;
-	uint32_t pos_mask;
-	uint16_t is_match[192];
-	uint16_t is_rep[12];
-	uint16_t is_rep0[12];
-	uint16_t is_rep1[12];
-	uint16_t is_rep2[12];
-	uint16_t is_rep0_long[192];
-	uint16_t dist_slot[256];
-	uint16_t dist_special[114];
-	uint16_t dist_align[16];
-	struct lzma_len_dec match_len_dec;
-	struct lzma_len_dec rep_len_dec;
-	uint16_t literal[12288];
-};
-
-enum lzma2_seq {
-	SEQ_CONTROL = 0,
-	SEQ_UNCOMPRESSED_1 = 1,
-	SEQ_UNCOMPRESSED_2 = 2,
-	SEQ_COMPRESSED_0 = 3,
-	SEQ_COMPRESSED_1 = 4,
-	SEQ_PROPERTIES = 5,
-	SEQ_LZMA_PREPARE = 6,
-	SEQ_LZMA_RUN = 7,
-	SEQ_COPY = 8,
-};
-
-struct lzma2_dec {
-	enum lzma2_seq sequence;
-	enum lzma2_seq next_sequence;
-	uint32_t uncompressed;
-	uint32_t compressed;
-	bool need_dict_reset;
-	bool need_props;
-};
-
-struct xz_dec_lzma2___2 {
-	struct rc_dec rc;
-	struct dictionary dict;
-	struct lzma2_dec lzma2;
-	struct lzma_dec lzma;
-	struct {
-		uint32_t size;
-		uint8_t buf[63];
-	} temp;
-};
-
-struct xz_dec_bcj___2 {
-	enum {
-		BCJ_X86 = 4,
-		BCJ_POWERPC = 5,
-		BCJ_IA64 = 6,
-		BCJ_ARM = 7,
-		BCJ_ARMTHUMB = 8,
-		BCJ_SPARC = 9,
-	} type;
-	enum xz_ret ret;
-	bool single_call;
-	uint32_t pos;
-	uint32_t x86_prev_mask;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-	struct {
-		size_t filtered;
-		size_t size;
-		uint8_t buf[16];
-	} temp;
-};
-
-struct ts_state {
-	unsigned int offset;
-	char cb[40];
-};
-
-struct ts_config;
-
-struct ts_ops {
-	const char *name;
-	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
-	unsigned int (*find)(struct ts_config *, struct ts_state *);
-	void (*destroy)(struct ts_config *);
-	void * (*get_pattern)(struct ts_config *);
-	unsigned int (*get_pattern_len)(struct ts_config *);
-	struct module *owner;
-	struct list_head list;
-};
-
-struct ts_config {
-	struct ts_ops *ops;
-	int flags;
-	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
-	void (*finish)(struct ts_config *, struct ts_state *);
-};
-
-struct ts_linear_state {
-	unsigned int len;
-	const void *data;
-};
-
-struct ei_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	int etype;
-	void *priv;
-};
-
-struct nla_bitfield32 {
-	__u32 value;
-	__u32 selector;
-};
-
-enum nla_policy_validation {
-	NLA_VALIDATE_NONE = 0,
-	NLA_VALIDATE_RANGE = 1,
-	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
-	NLA_VALIDATE_MIN = 3,
-	NLA_VALIDATE_MAX = 4,
-	NLA_VALIDATE_MASK = 5,
-	NLA_VALIDATE_RANGE_PTR = 6,
-	NLA_VALIDATE_FUNCTION = 7,
-};
-
-enum netlink_validation {
-	NL_VALIDATE_LIBERAL = 0,
-	NL_VALIDATE_TRAILING = 1,
-	NL_VALIDATE_MAXTYPE = 2,
-	NL_VALIDATE_UNSPEC = 4,
-	NL_VALIDATE_STRICT_ATTRS = 8,
-	NL_VALIDATE_NESTED = 16,
-};
-
-struct cpu_rmap {
-	struct kref refcount;
-	u16 size;
-	u16 used;
-	void **obj;
-	struct {
-		u16 index;
-		u16 dist;
-	} near[0];
-};
-
-struct irq_glue {
-	struct irq_affinity_notify notify;
-	struct cpu_rmap *rmap;
-	u16 index;
-};
-
-typedef mpi_limb_t *mpi_ptr_t;
-
-typedef int mpi_size_t;
-
-typedef mpi_limb_t UWtype;
-
-typedef unsigned int UHWtype;
-
-enum gcry_mpi_constants {
-	MPI_C_ZERO = 0,
-	MPI_C_ONE = 1,
-	MPI_C_TWO = 2,
-	MPI_C_THREE = 3,
-	MPI_C_FOUR = 4,
-	MPI_C_EIGHT = 5,
-};
-
-struct barrett_ctx_s;
-
-typedef struct barrett_ctx_s *mpi_barrett_t;
-
-struct gcry_mpi_point {
-	MPI x;
-	MPI y;
-	MPI z;
-};
-
-typedef struct gcry_mpi_point *MPI_POINT;
-
-enum gcry_mpi_ec_models {
-	MPI_EC_WEIERSTRASS = 0,
-	MPI_EC_MONTGOMERY = 1,
-	MPI_EC_EDWARDS = 2,
-};
-
-enum ecc_dialects {
-	ECC_DIALECT_STANDARD = 0,
-	ECC_DIALECT_ED25519 = 1,
-	ECC_DIALECT_SAFECURVE = 2,
-};
-
-struct mpi_ec_ctx {
-	enum gcry_mpi_ec_models model;
-	enum ecc_dialects dialect;
-	int flags;
-	unsigned int nbits;
-	MPI p;
-	MPI a;
-	MPI b;
-	MPI_POINT G;
-	MPI n;
-	unsigned int h;
-	MPI_POINT Q;
-	MPI d;
-	const char *name;
-	struct {
-		struct {
-			unsigned int a_is_pminus3: 1;
-			unsigned int two_inv_p: 1;
-		} valid;
-		int a_is_pminus3;
-		MPI two_inv_p;
-		mpi_barrett_t p_barrett;
-		MPI scratch[11];
-	} t;
-	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
-	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
-};
-
-struct field_table {
-	const char *p;
-	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
-	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
-	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
-};
-
-enum gcry_mpi_format {
-	GCRYMPI_FMT_NONE = 0,
-	GCRYMPI_FMT_STD = 1,
-	GCRYMPI_FMT_PGP = 2,
-	GCRYMPI_FMT_SSH = 3,
-	GCRYMPI_FMT_HEX = 4,
-	GCRYMPI_FMT_USG = 5,
-	GCRYMPI_FMT_OPAQUE = 8,
-};
-
-struct barrett_ctx_s___2;
-
-typedef struct barrett_ctx_s___2 *mpi_barrett_t___2;
-
-struct barrett_ctx_s___2 {
-	MPI m;
-	int m_copied;
-	int k;
-	MPI y;
-	MPI r1;
-	MPI r2;
-	MPI r3;
-};
-
-struct karatsuba_ctx {
-	struct karatsuba_ctx *next;
-	mpi_ptr_t tspace;
-	mpi_size_t tspace_size;
-	mpi_ptr_t tp;
-	mpi_size_t tp_size;
-};
-
-typedef long int mpi_limb_signed_t;
-
-enum dim_tune_state {
-	DIM_PARKING_ON_TOP = 0,
-	DIM_PARKING_TIRED = 1,
-	DIM_GOING_RIGHT = 2,
-	DIM_GOING_LEFT = 3,
-};
-
-struct dim_cq_moder {
-	u16 usec;
-	u16 pkts;
-	u16 comps;
-	u8 cq_period_mode;
-};
-
-enum dim_cq_period_mode {
-	DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,
-	DIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,
-	DIM_CQ_PERIOD_NUM_MODES = 2,
-};
-
-enum dim_state {
-	DIM_START_MEASURE = 0,
-	DIM_MEASURE_IN_PROGRESS = 1,
-	DIM_APPLY_NEW_PROFILE = 2,
-};
-
-enum dim_stats_state {
-	DIM_STATS_WORSE = 0,
-	DIM_STATS_SAME = 1,
-	DIM_STATS_BETTER = 2,
-};
-
-enum dim_step_result {
-	DIM_STEPPED = 0,
-	DIM_TOO_TIRED = 1,
-	DIM_ON_EDGE = 2,
-};
-
-enum pubkey_algo {
-	PUBKEY_ALGO_RSA = 0,
-	PUBKEY_ALGO_MAX = 1,
-};
-
-struct pubkey_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct signature_hdr {
-	uint8_t version;
-	uint32_t timestamp;
-	uint8_t algo;
-	uint8_t hash;
-	uint8_t keyid[8];
-	uint8_t nmpi;
-	char mpi[0];
-} __attribute__((packed));
-
-struct sg_pool {
-	size_t size;
-	char *name;
-	struct kmem_cache *slab;
-	mempool_t *pool;
-};
-
-enum {
-	IRQ_POLL_F_SCHED = 0,
-	IRQ_POLL_F_DISABLE = 1,
-};
-
-struct font_desc {
-	int idx;
-	const char *name;
-	int width;
-	int height;
-	const void *data;
-	int pref;
-};
-
-struct font_data {
-	unsigned int extra[4];
-	const unsigned char data[0];
-};
-
-struct firmware {
-	size_t size;
-	const u8 *data;
-	void *priv;
-};
-
-struct pldmfw_record {
-	struct list_head entry;
-	struct list_head descs;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u16 package_data_len;
-	u32 device_update_flags;
-	const u8 *package_data;
-	long unsigned int *component_bitmap;
-	u16 component_bitmap_len;
-};
-
-struct pldmfw_desc_tlv {
-	struct list_head entry;
-	const u8 *data;
-	u16 type;
-	u16 size;
-};
-
-struct pldmfw_component {
-	struct list_head entry;
-	u16 classification;
-	u16 identifier;
-	u16 options;
-	u16 activation_method;
-	u32 comparison_stamp;
-	u32 component_size;
-	const u8 *component_data;
-	const u8 *version_string;
-	u8 version_type;
-	u8 version_len;
-	u8 index;
-};
-
-struct pldmfw_ops;
-
-struct pldmfw {
-	const struct pldmfw_ops *ops;
-	struct device *dev;
-};
-
-struct pldmfw_ops {
-	bool (*match_record)(struct pldmfw *, struct pldmfw_record *);
-	int (*send_package_data)(struct pldmfw *, const u8 *, u16);
-	int (*send_component_table)(struct pldmfw *, struct pldmfw_component *, u8);
-	int (*flash_component)(struct pldmfw *, struct pldmfw_component *);
-	int (*finalize_update)(struct pldmfw *);
-};
-
-struct __pldm_timestamp {
-	u8 b[13];
-};
-
-struct __pldm_header {
-	uuid_t id;
-	u8 revision;
-	__le16 size;
-	struct __pldm_timestamp release_date;
-	__le16 component_bitmap_len;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_record_info {
-	__le16 record_len;
-	u8 descriptor_count;
-	__le32 device_update_flags;
-	u8 version_type;
-	u8 version_len;
-	__le16 package_data_len;
-	u8 variable_record_data[0];
-} __attribute__((packed));
-
-struct __pldmfw_desc_tlv {
-	__le16 type;
-	__le16 size;
-	u8 data[0];
-};
-
-struct __pldmfw_record_area {
-	u8 record_count;
-	u8 records[0];
-};
-
-struct __pldmfw_component_info {
-	__le16 classification;
-	__le16 identifier;
-	__le32 comparison_stamp;
-	__le16 options;
-	__le16 activation_method;
-	__le32 location_offset;
-	__le32 size;
-	u8 version_type;
-	u8 version_len;
-	u8 version_string[0];
-} __attribute__((packed));
-
-struct __pldmfw_component_area {
-	__le16 component_image_count;
-	u8 components[0];
-};
-
-struct pldmfw_priv {
-	struct pldmfw *context;
-	const struct firmware *fw;
-	size_t offset;
-	struct list_head records;
-	struct list_head components;
-	const struct __pldm_header *header;
-	u16 total_header_size;
-	u16 component_bitmap_len;
-	u16 bitmap_size;
-	u16 component_count;
-	const u8 *component_start;
-	const u8 *record_start;
-	u8 record_count;
-	u32 header_crc;
-	struct pldmfw_record *matching_record;
-};
-
-struct pldm_pci_record_id {
-	int vendor;
-	int device;
-	int subsystem_vendor;
-	int subsystem_device;
-};
-
-struct compress_format {
-	unsigned char magic[2];
-	const char *name;
-	decompress_fn decompressor;
-};
-
-struct group_data {
-	int limit[21];
-	int base[20];
-	int permute[258];
-	int minLen;
-	int maxLen;
-};
-
-struct bunzip_data {
-	int writeCopies;
-	int writePos;
-	int writeRunCountdown;
-	int writeCount;
-	int writeCurrent;
-	long int (*fill)(void *, long unsigned int);
-	long int inbufCount;
-	long int inbufPos;
-	unsigned char *inbuf;
-	unsigned int inbufBitCount;
-	unsigned int inbufBits;
-	unsigned int crc32Table[256];
-	unsigned int headerCRC;
-	unsigned int totalCRC;
-	unsigned int writeCRC;
-	unsigned int *dbuf;
-	unsigned int dbufSize;
-	unsigned char selectors[32768];
-	struct group_data groups[6];
-	int io_error;
-	int byteCount[256];
-	unsigned char symToByte[256];
-	unsigned char mtfSymbol[256];
-};
-
-struct rc {
-	long int (*fill)(void *, long unsigned int);
-	uint8_t *ptr;
-	uint8_t *buffer;
-	uint8_t *buffer_end;
-	long int buffer_size;
-	uint32_t code;
-	uint32_t range;
-	uint32_t bound;
-	void (*error)(char *);
-};
-
-struct lzma_header {
-	uint8_t pos;
-	uint32_t dict_size;
-	uint64_t dst_size;
-} __attribute__((packed));
-
-struct writer {
-	uint8_t *buffer;
-	uint8_t previous_byte;
-	size_t buffer_pos;
-	int bufsize;
-	size_t global_pos;
-	long int (*flush)(void *, long unsigned int);
-	struct lzma_header *header;
-};
-
-struct cstate {
-	int state;
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-};
-
-struct xz_dec___2;
-
-typedef enum {
-	ZSTD_error_no_error = 0,
-	ZSTD_error_GENERIC = 1,
-	ZSTD_error_prefix_unknown = 2,
-	ZSTD_error_version_unsupported = 3,
-	ZSTD_error_parameter_unknown = 4,
-	ZSTD_error_frameParameter_unsupported = 5,
-	ZSTD_error_frameParameter_unsupportedBy32bits = 6,
-	ZSTD_error_frameParameter_windowTooLarge = 7,
-	ZSTD_error_compressionParameter_unsupported = 8,
-	ZSTD_error_init_missing = 9,
-	ZSTD_error_memory_allocation = 10,
-	ZSTD_error_stage_wrong = 11,
-	ZSTD_error_dstSize_tooSmall = 12,
-	ZSTD_error_srcSize_wrong = 13,
-	ZSTD_error_corruption_detected = 14,
-	ZSTD_error_checksum_wrong = 15,
-	ZSTD_error_tableLog_tooLarge = 16,
-	ZSTD_error_maxSymbolValue_tooLarge = 17,
-	ZSTD_error_maxSymbolValue_tooSmall = 18,
-	ZSTD_error_dictionary_corrupted = 19,
-	ZSTD_error_dictionary_wrong = 20,
-	ZSTD_error_dictionaryCreation_failed = 21,
-	ZSTD_error_maxCode = 22,
-} ZSTD_ErrorCode;
-
-struct ZSTD_DStream_s___2;
-
-typedef struct ZSTD_DStream_s___2 ZSTD_DStream___2;
-
-struct cpio_data {
-	void *data;
-	size_t size;
-	char name[18];
-};
-
-enum cpio_fields {
-	C_MAGIC = 0,
-	C_INO = 1,
-	C_MODE = 2,
-	C_UID = 3,
-	C_GID = 4,
-	C_NLINK = 5,
-	C_MTIME = 6,
-	C_FILESIZE = 7,
-	C_MAJ = 8,
-	C_MIN = 9,
-	C_RMAJ = 10,
-	C_RMIN = 11,
-	C_NAMESIZE = 12,
-	C_CHKSUM = 13,
-	C_NFIELDS = 14,
-};
-
-enum {
-	ASSUME_PERFECT = 255,
-	ASSUME_VALID_DTB = 1,
-	ASSUME_VALID_INPUT = 2,
-	ASSUME_LATEST = 4,
-	ASSUME_NO_ROLLBACK = 8,
-	ASSUME_LIBFDT_ORDER = 16,
-	ASSUME_LIBFDT_FLAWLESS = 32,
-};
-
-struct fdt_reserve_entry {
-	fdt64_t address;
-	fdt64_t size;
-};
-
-struct fdt_node_header {
-	fdt32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	fdt32_t tag;
-	fdt32_t len;
-	fdt32_t nameoff;
-	char data[0];
-};
-
-struct fdt_errtabent {
-	const char *str;
-};
-
-struct fprop_local_single {
-	long unsigned int events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-struct ida_bitmap {
-	long unsigned int bitmap[16];
-};
-
-struct klist_waiter {
-	struct list_head list;
-	struct klist_node *node;
-	struct task_struct *process;
-	int woken;
-};
-
-struct uevent_sock {
-	struct list_head list;
-	struct sock *sk;
-};
-
-enum {
-	LOGIC_PIO_INDIRECT = 0,
-	LOGIC_PIO_CPU_MMIO = 1,
-};
-
-struct logic_pio_host_ops;
-
-struct logic_pio_hwaddr {
-	struct list_head list;
-	struct fwnode_handle *fwnode;
-	resource_size_t hw_start;
-	resource_size_t io_start;
-	resource_size_t size;
-	long unsigned int flags;
-	void *hostdata;
-	const struct logic_pio_host_ops *ops;
-};
-
-struct logic_pio_host_ops {
-	u32 (*in)(void *, long unsigned int, size_t);
-	void (*out)(void *, long unsigned int, u32, size_t);
-	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
-	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
-};
-
-struct radix_tree_preload {
-	unsigned int nr;
-	struct xa_node *nodes;
-};
-
-typedef struct {
-	long unsigned int key[2];
-} hsiphash_key_t;
-
-enum format_type {
-	FORMAT_TYPE_NONE = 0,
-	FORMAT_TYPE_WIDTH = 1,
-	FORMAT_TYPE_PRECISION = 2,
-	FORMAT_TYPE_CHAR = 3,
-	FORMAT_TYPE_STR = 4,
-	FORMAT_TYPE_PTR = 5,
-	FORMAT_TYPE_PERCENT_CHAR = 6,
-	FORMAT_TYPE_INVALID = 7,
-	FORMAT_TYPE_LONG_LONG = 8,
-	FORMAT_TYPE_ULONG = 9,
-	FORMAT_TYPE_LONG = 10,
-	FORMAT_TYPE_UBYTE = 11,
-	FORMAT_TYPE_BYTE = 12,
-	FORMAT_TYPE_USHORT = 13,
-	FORMAT_TYPE_SHORT = 14,
-	FORMAT_TYPE_UINT = 15,
-	FORMAT_TYPE_INT = 16,
-	FORMAT_TYPE_SIZE_T = 17,
-	FORMAT_TYPE_PTRDIFF = 18,
-};
-
-struct printf_spec {
-	unsigned int type: 8;
-	int field_width: 24;
-	unsigned int flags: 8;
-	unsigned int base: 8;
-	int precision: 16;
-};
-
-struct minmax_sample {
-	u32 t;
-	u32 v;
-};
-
-struct minmax {
-	struct minmax_sample s[3];
-};
-
-struct xa_limit {
-	u32 max;
-	u32 min;
-};
-
-typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
-
-enum device_link_state {
-	DL_STATE_NONE = 4294967295,
-	DL_STATE_DORMANT = 0,
-	DL_STATE_AVAILABLE = 1,
-	DL_STATE_CONSUMER_PROBE = 2,
-	DL_STATE_ACTIVE = 3,
-	DL_STATE_SUPPLIER_UNBIND = 4,
-};
-
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	struct device link_dev;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-	struct callback_head callback_head;
-	bool supplier_preactivated;
-};
-
-struct phy_configure_opts_dp {
-	unsigned int link_rate;
-	unsigned int lanes;
-	unsigned int voltage[4];
-	unsigned int pre[4];
-	u8 ssc: 1;
-	u8 set_rate: 1;
-	u8 set_lanes: 1;
-	u8 set_voltages: 1;
-};
-
-struct phy_configure_opts_mipi_dphy {
-	unsigned int clk_miss;
-	unsigned int clk_post;
-	unsigned int clk_pre;
-	unsigned int clk_prepare;
-	unsigned int clk_settle;
-	unsigned int clk_term_en;
-	unsigned int clk_trail;
-	unsigned int clk_zero;
-	unsigned int d_term_en;
-	unsigned int eot;
-	unsigned int hs_exit;
-	unsigned int hs_prepare;
-	unsigned int hs_settle;
-	unsigned int hs_skip;
-	unsigned int hs_trail;
-	unsigned int hs_zero;
-	unsigned int init;
-	unsigned int lpx;
-	unsigned int ta_get;
-	unsigned int ta_go;
-	unsigned int ta_sure;
-	unsigned int wakeup;
-	long unsigned int hs_clk_rate;
-	long unsigned int lp_clk_rate;
-	unsigned char lanes;
-};
-
-enum phy_mode {
-	PHY_MODE_INVALID = 0,
-	PHY_MODE_USB_HOST = 1,
-	PHY_MODE_USB_HOST_LS = 2,
-	PHY_MODE_USB_HOST_FS = 3,
-	PHY_MODE_USB_HOST_HS = 4,
-	PHY_MODE_USB_HOST_SS = 5,
-	PHY_MODE_USB_DEVICE = 6,
-	PHY_MODE_USB_DEVICE_LS = 7,
-	PHY_MODE_USB_DEVICE_FS = 8,
-	PHY_MODE_USB_DEVICE_HS = 9,
-	PHY_MODE_USB_DEVICE_SS = 10,
-	PHY_MODE_USB_OTG = 11,
-	PHY_MODE_UFS_HS_A = 12,
-	PHY_MODE_UFS_HS_B = 13,
-	PHY_MODE_PCIE = 14,
-	PHY_MODE_ETHERNET = 15,
-	PHY_MODE_MIPI_DPHY = 16,
-	PHY_MODE_SATA = 17,
-	PHY_MODE_LVDS = 18,
-	PHY_MODE_DP = 19,
-};
-
-union phy_configure_opts {
-	struct phy_configure_opts_mipi_dphy mipi_dphy;
-	struct phy_configure_opts_dp dp;
-};
-
-struct phy;
-
-struct phy_ops {
-	int (*init)(struct phy *);
-	int (*exit)(struct phy *);
-	int (*power_on)(struct phy *);
-	int (*power_off)(struct phy *);
-	int (*set_mode)(struct phy *, enum phy_mode, int);
-	int (*configure)(struct phy *, union phy_configure_opts *);
-	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
-	int (*reset)(struct phy *);
-	int (*calibrate)(struct phy *);
-	void (*release)(struct phy *);
-	struct module *owner;
-};
-
-struct phy_attrs {
-	u32 bus_width;
-	u32 max_link_rate;
-	enum phy_mode mode;
-};
-
-struct regulator;
-
-struct phy {
-	struct device dev;
-	int id;
-	const struct phy_ops *ops;
-	struct mutex mutex;
-	int init_count;
-	int power_count;
-	struct phy_attrs attrs;
-	struct regulator *pwr;
-};
-
-struct phy_provider {
-	struct device *dev;
-	struct device_node *children;
-	struct module *owner;
-	struct list_head list;
-	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
-};
-
-struct phy_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct phy *phy;
-};
-
-struct pci_bus_resource {
-	struct list_head list;
-	struct resource *res;
-	unsigned int flags;
-};
-
-enum pci_dev_flags {
-	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
-	PCI_DEV_FLAGS_NO_D3 = 2,
-	PCI_DEV_FLAGS_ASSIGNED = 4,
-	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
-	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
-	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
-	PCI_DEV_FLAGS_NO_PM_RESET = 128,
-	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
-	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
-	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
-	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
-};
-
-enum pci_bus_flags {
-	PCI_BUS_FLAGS_NO_MSI = 1,
-	PCI_BUS_FLAGS_NO_MMRBC = 2,
-	PCI_BUS_FLAGS_NO_AERSID = 4,
-	PCI_BUS_FLAGS_NO_EXTCFG = 8,
-};
-
-enum pcie_bus_config_types {
-	PCIE_BUS_TUNE_OFF = 0,
-	PCIE_BUS_DEFAULT = 1,
-	PCIE_BUS_SAFE = 2,
-	PCIE_BUS_PERFORMANCE = 3,
-	PCIE_BUS_PEER2PEER = 4,
-};
-
-enum pci_bar_type {
-	pci_bar_unknown = 0,
-	pci_bar_io = 1,
-	pci_bar_mem32 = 2,
-	pci_bar_mem64 = 3,
-};
-
-struct pci_domain_busn_res {
-	struct list_head list;
-	struct resource res;
-	int domain_nr;
-};
-
-struct dmi_strmatch {
-	unsigned char slot: 7;
-	unsigned char exact_match: 1;
-	char substr[79];
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-struct bus_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct bus_type *, char *);
-	ssize_t (*store)(struct bus_type *, const char *, size_t);
-};
-
-enum pcie_link_width {
-	PCIE_LNK_WIDTH_RESRV = 0,
-	PCIE_LNK_X1 = 1,
-	PCIE_LNK_X2 = 2,
-	PCIE_LNK_X4 = 4,
-	PCIE_LNK_X8 = 8,
-	PCIE_LNK_X12 = 12,
-	PCIE_LNK_X16 = 16,
-	PCIE_LNK_X32 = 32,
-	PCIE_LNK_WIDTH_UNKNOWN = 255,
-};
-
-struct pci_cap_saved_data {
-	u16 cap_nr;
-	bool cap_extended;
-	unsigned int size;
-	u32 data[0];
-};
-
-struct pci_cap_saved_state {
-	struct hlist_node next;
-	struct pci_cap_saved_data cap;
-};
-
-typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
-
-struct pci_platform_pm_ops {
-	bool (*bridge_d3)(struct pci_dev *);
-	bool (*is_manageable)(struct pci_dev *);
-	int (*set_state)(struct pci_dev *, pci_power_t);
-	pci_power_t (*get_state)(struct pci_dev *);
-	void (*refresh_state)(struct pci_dev *);
-	pci_power_t (*choose_state)(struct pci_dev *);
-	int (*set_wakeup)(struct pci_dev *, bool);
-	bool (*need_resume)(struct pci_dev *);
-};
-
-struct pci_pme_device {
-	struct list_head list;
-	struct pci_dev *dev;
-};
-
-struct pci_saved_state {
-	u32 config_space[16];
-	struct pci_cap_saved_data cap[0];
-};
-
-struct pci_devres {
-	unsigned int enabled: 1;
-	unsigned int pinned: 1;
-	unsigned int orig_intx: 1;
-	unsigned int restore_intx: 1;
-	unsigned int mwi: 1;
-	u32 region_mask;
-};
-
-struct driver_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device_driver *, char *);
-	ssize_t (*store)(struct device_driver *, const char *, size_t);
-};
-
-enum dev_dma_attr {
-	DEV_DMA_NOT_SUPPORTED = 0,
-	DEV_DMA_NON_COHERENT = 1,
-	DEV_DMA_COHERENT = 2,
-};
-
-struct pcie_device {
-	int irq;
-	struct pci_dev *port;
-	u32 service;
-	void *priv_data;
-	struct device device;
-};
-
-struct pcie_port_service_driver {
-	const char *name;
-	int (*probe)(struct pcie_device *);
-	void (*remove)(struct pcie_device *);
-	int (*suspend)(struct pcie_device *);
-	int (*resume_noirq)(struct pcie_device *);
-	int (*resume)(struct pcie_device *);
-	int (*runtime_suspend)(struct pcie_device *);
-	int (*runtime_resume)(struct pcie_device *);
-	void (*error_resume)(struct pci_dev *);
-	int port_type;
-	u32 service;
-	struct device_driver driver;
-};
-
-struct pci_dynid {
-	struct list_head node;
-	struct pci_device_id id;
-};
-
-struct drv_dev_and_id {
-	struct pci_driver *drv;
-	struct pci_dev *dev;
-	const struct pci_device_id *id;
-};
-
-struct acpi_device;
-
-enum pci_mmap_api {
-	PCI_MMAP_SYSFS = 0,
-	PCI_MMAP_PROCFS = 1,
-};
-
-struct pci_vpd_ops;
-
-struct pci_vpd {
-	const struct pci_vpd_ops *ops;
-	struct bin_attribute *attr;
-	struct mutex lock;
-	unsigned int len;
-	u16 flag;
-	u8 cap;
-	unsigned int busy: 1;
-	unsigned int valid: 1;
-};
-
-struct pci_vpd_ops {
-	ssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);
-	ssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);
-	int (*set_size)(struct pci_dev *, size_t);
-};
-
-struct pci_dev_resource {
-	struct list_head list;
-	struct resource *res;
-	struct pci_dev *dev;
-	resource_size_t start;
-	resource_size_t end;
-	resource_size_t add_size;
-	resource_size_t min_align;
-	long unsigned int flags;
-};
-
-enum release_type {
-	leaf_only = 0,
-	whole_subtree = 1,
-};
-
-enum enable_type {
-	undefined = 4294967295,
-	user_disabled = 0,
-	auto_disabled = 1,
-	user_enabled = 2,
-	auto_enabled = 3,
-};
-
-struct portdrv_service_data {
-	struct pcie_port_service_driver *drv;
-	struct device *dev;
-	u32 service;
-};
-
-typedef int (*pcie_pm_callback_t)(struct pcie_device *);
-
-enum dmi_field {
-	DMI_NONE = 0,
-	DMI_BIOS_VENDOR = 1,
-	DMI_BIOS_VERSION = 2,
-	DMI_BIOS_DATE = 3,
-	DMI_BIOS_RELEASE = 4,
-	DMI_EC_FIRMWARE_RELEASE = 5,
-	DMI_SYS_VENDOR = 6,
-	DMI_PRODUCT_NAME = 7,
-	DMI_PRODUCT_VERSION = 8,
-	DMI_PRODUCT_SERIAL = 9,
-	DMI_PRODUCT_UUID = 10,
-	DMI_PRODUCT_SKU = 11,
-	DMI_PRODUCT_FAMILY = 12,
-	DMI_BOARD_VENDOR = 13,
-	DMI_BOARD_NAME = 14,
-	DMI_BOARD_VERSION = 15,
-	DMI_BOARD_SERIAL = 16,
-	DMI_BOARD_ASSET_TAG = 17,
-	DMI_CHASSIS_VENDOR = 18,
-	DMI_CHASSIS_TYPE = 19,
-	DMI_CHASSIS_VERSION = 20,
-	DMI_CHASSIS_SERIAL = 21,
-	DMI_CHASSIS_ASSET_TAG = 22,
-	DMI_STRING_MAX = 23,
-	DMI_OEM_STRING = 24,
-};
-
-struct aspm_latency {
-	u32 l0s;
-	u32 l1;
-};
-
-struct pcie_link_state {
-	struct pci_dev *pdev;
-	struct pci_dev *downstream;
-	struct pcie_link_state *root;
-	struct pcie_link_state *parent;
-	struct list_head sibling;
-	u32 aspm_support: 7;
-	u32 aspm_enabled: 7;
-	u32 aspm_capable: 7;
-	u32 aspm_default: 7;
-	char: 4;
-	u32 aspm_disable: 7;
-	u32 clkpm_capable: 1;
-	u32 clkpm_enabled: 1;
-	u32 clkpm_default: 1;
-	u32 clkpm_disable: 1;
-	struct aspm_latency latency_up;
-	struct aspm_latency latency_dw;
-	struct aspm_latency acceptable[8];
-};
-
-struct aer_stats {
-	u64 dev_cor_errs[16];
-	u64 dev_fatal_errs[27];
-	u64 dev_nonfatal_errs[27];
-	u64 dev_total_cor_errs;
-	u64 dev_total_fatal_errs;
-	u64 dev_total_nonfatal_errs;
-	u64 rootport_total_cor_errs;
-	u64 rootport_total_fatal_errs;
-	u64 rootport_total_nonfatal_errs;
-};
-
-struct aer_header_log_regs {
-	unsigned int dw0;
-	unsigned int dw1;
-	unsigned int dw2;
-	unsigned int dw3;
-};
-
-struct aer_err_info {
-	struct pci_dev *dev[5];
-	int error_dev_num;
-	unsigned int id: 16;
-	unsigned int severity: 2;
-	unsigned int __pad1: 5;
-	unsigned int multi_error_valid: 1;
-	unsigned int first_error: 5;
-	unsigned int __pad2: 2;
-	unsigned int tlp_header_valid: 1;
-	unsigned int status;
-	unsigned int mask;
-	struct aer_header_log_regs tlp;
-};
-
-struct aer_err_source {
-	unsigned int status;
-	unsigned int id;
-};
-
-struct aer_rpc {
-	struct pci_dev *rpd;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct aer_err_source *type;
-			const struct aer_err_source *const_type;
-			char (*rectype)[0];
-			struct aer_err_source *ptr;
-			const struct aer_err_source *ptr_const;
-		};
-		struct aer_err_source buf[128];
-	} aer_fifo;
-};
-
-struct pcie_pme_service_data {
-	spinlock_t lock;
-	struct pcie_device *srv;
-	struct work_struct work;
-	bool noirq;
-};
-
-struct pci_filp_private {
-	enum pci_mmap_state mmap_state;
-	int write_combine;
-};
-
-struct pci_slot_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct pci_slot *, char *);
-	ssize_t (*store)(struct pci_slot *, const char *, size_t);
-};
-
 enum {
 	NVME_REG_CAP = 0,
 	NVME_REG_VS = 8,
@@ -92711,6 +108686,8 @@
 	NVME_REG_BPINFO = 64,
 	NVME_REG_BPRSEL = 68,
 	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
 	NVME_REG_PMRCAP = 3584,
 	NVME_REG_PMRCTL = 3588,
 	NVME_REG_PMRSTS = 3592,
@@ -92740,8 +108717,10 @@
 	NVME_CC_SHN_MASK = 49152,
 	NVME_CC_IOSQES = 393216,
 	NVME_CC_IOCQES = 4194304,
-	NVME_CAP_CSS_NVM = 1,
-	NVME_CAP_CSS_CSI = 64,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
 	NVME_CSTS_RDY = 1,
 	NVME_CSTS_CFS = 2,
 	NVME_CSTS_NSSRO = 16,
@@ -92825,12 +108804,7 @@
 struct pci_dev_reset_methods {
 	u16 vendor;
 	u16 device;
-	int (*reset)(struct pci_dev *, int);
-};
-
-struct acs_on_id {
-	short unsigned int vendor;
-	short unsigned int device;
+	int (*reset)(struct pci_dev *, bool);
 };
 
 struct pci_dev_acs_enabled {
@@ -92846,268 +108820,9 @@
 	int (*disable_acs_redir)(struct pci_dev *);
 };
 
-struct slot {
-	u8 number;
-	unsigned int devfn;
-	struct pci_bus *bus;
-	struct pci_dev *dev;
-	unsigned int latch_status: 1;
-	unsigned int adapter_status: 1;
-	unsigned int extracting;
-	struct hotplug_slot hotplug_slot;
-	struct list_head slot_list;
-};
-
-struct cpci_hp_controller_ops {
-	int (*query_enum)();
-	int (*enable_irq)();
-	int (*disable_irq)();
-	int (*check_irq)(void *);
-	int (*hardware_test)(struct slot *, u32);
-	u8 (*get_power)(struct slot *);
-	int (*set_power)(struct slot *, int);
-};
-
-struct cpci_hp_controller {
-	unsigned int irq;
-	long unsigned int irq_flags;
-	char *devname;
-	void *dev_id;
-	char *name;
-	struct cpci_hp_controller_ops *ops;
-};
-
-struct controller {
-	struct pcie_device *pcie;
-	u32 slot_cap;
-	unsigned int inband_presence_disabled: 1;
-	u16 slot_ctrl;
-	struct mutex ctrl_lock;
-	long unsigned int cmd_started;
-	unsigned int cmd_busy: 1;
-	wait_queue_head_t queue;
-	atomic_t pending_events;
-	unsigned int notification_enabled: 1;
-	unsigned int power_fault_detected;
-	struct task_struct *poll_thread;
-	u8 state;
-	struct mutex state_lock;
-	struct delayed_work button_work;
-	struct hotplug_slot hotplug_slot;
-	struct rw_semaphore reset_lock;
-	unsigned int ist_running;
-	int request_result;
-	wait_queue_head_t requester;
-};
-
-struct msix_entry {
-	u32 vector;
-	u16 entry;
-};
-
-enum pci_interrupt_pin {
-	PCI_INTERRUPT_UNKNOWN = 0,
-	PCI_INTERRUPT_INTA = 1,
-	PCI_INTERRUPT_INTB = 2,
-	PCI_INTERRUPT_INTC = 3,
-	PCI_INTERRUPT_INTD = 4,
-};
-
-enum pci_barno {
-	BAR_0 = 0,
-	BAR_1 = 1,
-	BAR_2 = 2,
-	BAR_3 = 3,
-	BAR_4 = 4,
-	BAR_5 = 5,
-};
-
-struct pci_epf_header {
-	u16 vendorid;
-	u16 deviceid;
-	u8 revid;
-	u8 progif_code;
-	u8 subclass_code;
-	u8 baseclass_code;
-	u8 cache_line_size;
-	u16 subsys_vendor_id;
-	u16 subsys_id;
-	enum pci_interrupt_pin interrupt_pin;
-};
-
-struct pci_epf_bar {
-	dma_addr_t phys_addr;
-	void *addr;
-	size_t size;
-	enum pci_barno barno;
-	int flags;
-};
-
-struct config_group___2;
-
-struct pci_epc_ops;
-
-struct pci_epc_mem;
-
-struct pci_epc {
-	struct device dev;
-	struct list_head pci_epf;
-	const struct pci_epc_ops *ops;
-	struct pci_epc_mem **windows;
-	struct pci_epc_mem *mem;
-	unsigned int num_windows;
-	u8 max_functions;
-	struct config_group___2 *group;
-	struct mutex lock;
-	long unsigned int function_num_map;
-	struct atomic_notifier_head notifier;
-};
-
-enum pci_epc_irq_type {
-	PCI_EPC_IRQ_UNKNOWN = 0,
-	PCI_EPC_IRQ_LEGACY = 1,
-	PCI_EPC_IRQ_MSI = 2,
-	PCI_EPC_IRQ_MSIX = 3,
-};
-
-struct pci_epc_features;
-
-struct pci_epc_ops {
-	int (*write_header)(struct pci_epc *, u8, struct pci_epf_header *);
-	int (*set_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	void (*clear_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	int (*map_addr)(struct pci_epc *, u8, phys_addr_t, u64, size_t);
-	void (*unmap_addr)(struct pci_epc *, u8, phys_addr_t);
-	int (*set_msi)(struct pci_epc *, u8, u8);
-	int (*get_msi)(struct pci_epc *, u8);
-	int (*set_msix)(struct pci_epc *, u8, u16, enum pci_barno, u32);
-	int (*get_msix)(struct pci_epc *, u8);
-	int (*raise_irq)(struct pci_epc *, u8, enum pci_epc_irq_type, u16);
-	int (*start)(struct pci_epc *);
-	void (*stop)(struct pci_epc *);
-	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8);
-	struct module *owner;
-};
-
-struct pci_epc_features {
-	unsigned int linkup_notifier: 1;
-	unsigned int core_init_notifier: 1;
-	unsigned int msi_capable: 1;
-	unsigned int msix_capable: 1;
-	u8 reserved_bar;
-	u8 bar_fixed_64bit;
-	u64 bar_fixed_size[6];
-	size_t align;
-};
-
-struct pci_epc_mem_window {
-	phys_addr_t phys_base;
-	size_t size;
-	size_t page_size;
-};
-
-struct pci_epc_mem {
-	struct pci_epc_mem_window window;
-	long unsigned int *bitmap;
-	int pages;
-	struct mutex lock;
-};
-
-enum dw_pcie_region_type {
-	DW_PCIE_REGION_UNKNOWN = 0,
-	DW_PCIE_REGION_INBOUND = 1,
-	DW_PCIE_REGION_OUTBOUND = 2,
-};
-
-struct pcie_port;
-
-struct dw_pcie_host_ops {
-	int (*host_init)(struct pcie_port *);
-	void (*set_num_vectors)(struct pcie_port *);
-	int (*msi_host_init)(struct pcie_port *);
-};
-
-struct pcie_port {
-	u64 cfg0_base;
-	void *va_cfg0_base;
-	u32 cfg0_size;
-	resource_size_t io_base;
-	phys_addr_t io_bus_addr;
-	u32 io_size;
-	int irq;
-	const struct dw_pcie_host_ops *ops;
-	int msi_irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *msi_domain;
-	u16 msi_msg;
-	dma_addr_t msi_data;
-	struct irq_chip *msi_irq_chip;
-	u32 num_vectors;
-	u32 irq_mask[8];
-	struct pci_host_bridge *bridge;
-	raw_spinlock_t lock;
-	long unsigned int msi_irq_in_use[4];
-};
-
-enum dw_pcie_as_type {
-	DW_PCIE_AS_UNKNOWN = 0,
-	DW_PCIE_AS_MEM = 1,
-	DW_PCIE_AS_IO = 2,
-};
-
-struct dw_pcie_ep;
-
-struct dw_pcie_ep_ops {
-	void (*ep_init)(struct dw_pcie_ep *);
-	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
-	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
-	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
-};
-
-struct dw_pcie_ep {
-	struct pci_epc *epc;
-	struct list_head func_list;
-	const struct dw_pcie_ep_ops *ops;
-	phys_addr_t phys_base;
-	size_t addr_size;
-	size_t page_size;
-	u8 bar_to_atu[6];
-	phys_addr_t *outbound_addr;
-	long unsigned int *ib_window_map;
-	long unsigned int *ob_window_map;
-	u32 num_ib_windows;
-	u32 num_ob_windows;
-	void *msi_mem;
-	phys_addr_t msi_mem_phys;
-	struct pci_epf_bar *epf_bar[6];
-};
-
-struct dw_pcie;
-
-struct dw_pcie_ops {
-	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
-	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
-	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
-	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
-	int (*link_up)(struct dw_pcie *);
-	int (*start_link)(struct dw_pcie *);
-	void (*stop_link)(struct dw_pcie *);
-};
-
-struct dw_pcie {
-	struct device *dev;
-	void *dbi_base;
-	void *dbi_base2;
-	void *atu_base;
-	u32 num_viewport;
-	u8 iatu_unroll_enabled;
-	struct pcie_port pp;
-	struct dw_pcie_ep ep;
-	const struct dw_pcie_ops *ops;
-	unsigned int version;
-	int num_lanes;
-	int link_gen;
-	u8 n_fts[2];
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
 };
 
 enum gpiod_flags {
@@ -93119,1375 +108834,1873 @@
 	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
 };
 
-enum pcie_data_rate {
-	PCIE_GEN1 = 0,
-	PCIE_GEN2 = 1,
-	PCIE_GEN3 = 2,
-	PCIE_GEN4 = 3,
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
 };
 
-struct meson_pcie_clk_res {
-	struct clk *clk;
-	struct clk *port_clk;
-	struct clk *general_clk;
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
 };
 
-struct reset_control;
-
-struct meson_pcie_rc_reset {
-	struct reset_control *port;
-	struct reset_control *apb;
+enum dpm_order {
+	DPM_ORDER_NONE = 0,
+	DPM_ORDER_DEV_AFTER_PARENT = 1,
+	DPM_ORDER_PARENT_BEFORE_DEV = 2,
+	DPM_ORDER_DEV_LAST = 3,
 };
 
-struct meson_pcie {
-	struct dw_pcie pci;
-	void *cfg_base;
-	struct meson_pcie_clk_res clk_res;
-	struct meson_pcie_rc_reset mrst;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
+union device_attr_group_devres {
+	const struct attribute_group *group;
+	const struct attribute_group **groups;
 };
 
-struct rio_device_id {
-	__u16 did;
-	__u16 vid;
-	__u16 asm_did;
-	__u16 asm_vid;
+struct class_dir {
+	struct kobject kobj;
+	struct class *class;
 };
 
-struct rio_switch_ops;
-
-struct rio_dev;
-
-struct rio_switch {
-	struct list_head node;
-	u8 *route_table;
-	u32 port_ok;
-	struct rio_switch_ops *ops;
-	spinlock_t lock;
-	struct rio_dev *nextdev[0];
-};
-
-struct rio_mport;
-
-struct rio_switch_ops {
+struct root_device {
+	struct device dev;
 	struct module *owner;
-	int (*add_entry)(struct rio_mport *, u16, u8, u16, u16, u8);
-	int (*get_entry)(struct rio_mport *, u16, u8, u16, u16, u8 *);
-	int (*clr_table)(struct rio_mport *, u16, u8, u16);
-	int (*set_domain)(struct rio_mport *, u16, u8, u8);
-	int (*get_domain)(struct rio_mport *, u16, u8, u8 *);
-	int (*em_init)(struct rio_dev *);
-	int (*em_handle)(struct rio_dev *, u8);
 };
 
-struct rio_net;
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
 
-struct rio_driver;
-
-union rio_pw_msg;
-
-struct rio_dev {
-	struct list_head global_list;
-	struct list_head net_list;
-	struct rio_net *net;
-	bool do_enum;
-	u16 did;
-	u16 vid;
-	u32 device_rev;
-	u16 asm_did;
-	u16 asm_vid;
-	u16 asm_rev;
-	u16 efptr;
-	u32 pef;
-	u32 swpinfo;
-	u32 src_ops;
-	u32 dst_ops;
-	u32 comp_tag;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	u32 em_efptr;
-	u64 dma_mask;
-	struct rio_driver *driver;
-	struct device dev;
-	struct resource riores[16];
-	int (*pwcback)(struct rio_dev *, union rio_pw_msg *, int);
-	u16 destid;
-	u8 hopcount;
-	struct rio_dev *prev;
-	atomic_t state;
-	struct rio_switch rswitch[0];
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
 };
 
-struct rio_msg {
-	struct resource *res;
-	void (*mcback)(struct rio_mport *, void *, int, int);
+struct nd_namespace_pmem {
+	struct nd_namespace_io nsio;
+	long unsigned int lbasize;
+	char *alt_name;
+	uuid_t *uuid;
+	int id;
 };
 
-struct rio_ops;
+enum nd_label_flags {
+	ND_LABEL_REAP = 0,
+};
 
-struct rio_scan;
-
-struct rio_mport {
-	struct list_head dbells;
-	struct list_head pwrites;
-	struct list_head node;
-	struct list_head nnode;
-	struct rio_net *net;
-	struct mutex lock;
-	struct resource iores;
-	struct resource riores[16];
-	struct rio_msg inb_msg[4];
-	struct rio_msg outb_msg[4];
-	int host_deviceid;
-	struct rio_ops *ops;
-	unsigned char id;
-	unsigned char index;
-	unsigned int sys_size;
-	u32 phys_efptr;
-	u32 phys_rmap;
-	unsigned char name[40];
-	struct device dev;
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
 	void *priv;
-	struct rio_scan *nscan;
-	atomic_t state;
-	unsigned int pwe_refcnt;
 };
 
-enum rio_device_state {
-	RIO_DEVICE_INITIALIZING = 0,
-	RIO_DEVICE_RUNNING = 1,
-	RIO_DEVICE_GONE = 2,
-	RIO_DEVICE_SHUTDOWN = 3,
+struct ata_internal {
+	struct scsi_transport_template t;
+	struct device_attribute private_port_attrs[3];
+	struct device_attribute private_link_attrs[3];
+	struct device_attribute private_dev_attrs[9];
+	struct transport_container link_attr_cont;
+	struct transport_container dev_attr_cont;
+	struct device_attribute *link_attrs[4];
+	struct device_attribute *port_attrs[4];
+	struct device_attribute *dev_attrs[10];
 };
 
-struct rio_net {
-	struct list_head node;
-	struct list_head devices;
-	struct list_head switches;
-	struct list_head mports;
-	struct rio_mport *hport;
-	unsigned char id;
-	struct device dev;
-	void *enum_data;
-	void (*release)(struct rio_net *);
+struct ata_show_ering_arg {
+	char *buf;
+	int written;
 };
 
-struct rio_driver {
-	struct list_head node;
-	char *name;
-	const struct rio_device_id *id_table;
-	int (*probe)(struct rio_dev *, const struct rio_device_id *);
-	void (*remove)(struct rio_dev *);
-	void (*shutdown)(struct rio_dev *);
-	int (*suspend)(struct rio_dev *, u32);
-	int (*resume)(struct rio_dev *);
-	int (*enable_wake)(struct rio_dev *, u32, int);
-	struct device_driver driver;
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
 };
 
-union rio_pw_msg {
-	struct {
-		u32 comptag;
-		u32 errdetect;
-		u32 is_port;
-		u32 ltlerrdet;
-		u32 padding[12];
-	} em;
-	u32 raw[16];
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
 };
 
-struct rio_dbell {
-	struct list_head node;
-	struct resource *res;
-	void (*dinb)(struct rio_mport *, void *, u16, u16, u16);
-	void *dev_id;
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
 };
 
-struct rio_mport_attr;
-
-struct rio_ops {
-	int (*lcread)(struct rio_mport *, int, u32, int, u32 *);
-	int (*lcwrite)(struct rio_mport *, int, u32, int, u32);
-	int (*cread)(struct rio_mport *, int, u16, u8, u32, int, u32 *);
-	int (*cwrite)(struct rio_mport *, int, u16, u8, u32, int, u32);
-	int (*dsend)(struct rio_mport *, int, u16, u16);
-	int (*pwenable)(struct rio_mport *, int);
-	int (*open_outb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_outb_mbox)(struct rio_mport *, int);
-	int (*open_inb_mbox)(struct rio_mport *, void *, int, int);
-	void (*close_inb_mbox)(struct rio_mport *, int);
-	int (*add_outb_message)(struct rio_mport *, struct rio_dev *, int, void *, size_t);
-	int (*add_inb_buffer)(struct rio_mport *, int, void *);
-	void * (*get_inb_message)(struct rio_mport *, int);
-	int (*map_inb)(struct rio_mport *, dma_addr_t, u64, u64, u32);
-	void (*unmap_inb)(struct rio_mport *, dma_addr_t);
-	int (*query_mport)(struct rio_mport *, struct rio_mport_attr *);
-	int (*map_outb)(struct rio_mport *, u16, u64, u32, u32, dma_addr_t *);
-	void (*unmap_outb)(struct rio_mport *, u16, u64);
+struct amd_smbus {
+	struct pci_dev *dev;
+	struct i2c_adapter adapter;
+	int base;
+	int size;
 };
 
-struct rio_scan {
-	struct module *owner;
-	int (*enumerate)(struct rio_mport *, u32);
-	int (*discover)(struct rio_mport *, u32);
+enum dm_uevent_type {
+	DM_UEVENT_PATH_FAILED = 0,
+	DM_UEVENT_PATH_REINSTATED = 1,
 };
 
-struct rio_mport_attr {
-	int flags;
-	int link_speed;
-	int link_width;
-	int dma_max_sge;
-	int dma_max_size;
-	int dma_align;
+struct mapped_device;
+
+struct dm_uevent {
+	struct mapped_device *md;
+	enum kobject_action action;
+	struct kobj_uevent_env ku_env;
+	struct list_head elist;
+	char name[128];
+	char uuid[129];
 };
 
-struct rio_scan_node {
-	int mport_id;
-	struct list_head node;
-	struct rio_scan *ops;
+struct menu_device {
+	int needs_update;
+	int tick_wakeup;
+	u64 next_timer_ns;
+	unsigned int bucket;
+	unsigned int correction_factor[12];
+	unsigned int intervals[8];
+	int interval_ptr;
 };
 
-struct rio_pwrite {
-	struct list_head node;
-	int (*pwcback)(struct rio_mport *, void *, union rio_pw_msg *, int);
-	void *context;
+struct a4tech_sc {
+	long unsigned int quirks;
+	unsigned int hw_wheel;
+	__s32 delayed_value;
 };
 
-struct rio_disc_work {
-	struct work_struct work;
-	struct rio_mport *mport;
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
 };
 
-enum rio_link_speed {
-	RIO_LINK_DOWN = 0,
-	RIO_LINK_125 = 1,
-	RIO_LINK_250 = 2,
-	RIO_LINK_312 = 3,
-	RIO_LINK_500 = 4,
-	RIO_LINK_625 = 5,
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
 };
 
-struct kfifo {
+struct trace_event_raw_mc_event {
+	struct trace_entry ent;
+	unsigned int error_type;
+	u32 __data_loc_msg;
+	u32 __data_loc_label;
+	u16 error_count;
+	u8 mc_index;
+	s8 top_layer;
+	s8 middle_layer;
+	s8 lower_layer;
+	long int address;
+	u8 grain_bits;
+	long int syndrome;
+	u32 __data_loc_driver_detail;
+	char __data[0];
+};
+
+struct trace_event_raw_arm_event {
+	struct trace_entry ent;
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+	u8 affinity;
+	char __data[0];
+};
+
+struct trace_event_raw_non_standard_event {
+	struct trace_entry ent;
+	char sec_type[16];
+	char fru_id[16];
+	u32 __data_loc_fru_text;
+	u8 sev;
+	u32 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_aer_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 status;
+	u8 severity;
+	u8 tlp_header_valid;
+	u32 tlp_header[4];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mc_event {
+	u32 msg;
+	u32 label;
+	u32 driver_detail;
+};
+
+struct trace_event_data_offsets_arm_event {};
+
+struct trace_event_data_offsets_non_standard_event {
+	u32 fru_text;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_aer_event {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
+
+typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
+
+typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
+
+typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	raw_spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
 	union {
-		struct __kfifo kfifo;
-		unsigned char *type;
-		const unsigned char *const_type;
-		char (*rectype)[0];
-		void *ptr;
-		const void *ptr_const;
+		struct bpf_iter_meta *meta;
 	};
-	unsigned char buf[0];
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	raw_spinlock_t lock;
+};
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
 };
 
 enum {
-	DBG_NONE = 0,
-	DBG_INIT = 1,
-	DBG_EXIT = 2,
-	DBG_MPORT = 4,
-	DBG_MAINT = 8,
-	DBG_DMA = 16,
-	DBG_DMAV = 32,
-	DBG_IBW = 64,
-	DBG_EVENT = 128,
-	DBG_OBW = 256,
-	DBG_DBELL = 512,
-	DBG_OMSG = 1024,
-	DBG_IMSG = 2048,
-	DBG_ALL = 4294967295,
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 1,
 };
 
-struct tsi721_dma_desc {
-	__le32 type_id;
-	__le32 bcount;
-	union {
-		__le32 raddr_lo;
-		__le32 next_lo;
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
+struct svc_sock {
+	struct svc_xprt sk_xprt;
+	struct socket *sk_sock;
+	struct sock *sk_sk;
+	void (*sk_ostate)(struct sock *);
+	void (*sk_odata)(struct sock *);
+	void (*sk_owspace)(struct sock *);
+	__be32 sk_marker;
+	u32 sk_tcplen;
+	u32 sk_datalen;
+	atomic_t sk_sendqlen;
+	struct page *sk_pages[19];
+};
+
+struct gss_auth;
+
+struct gss_upcall_msg {
+	refcount_t count;
+	kuid_t uid;
+	const char *service_name;
+	struct rpc_pipe_msg msg;
+	struct list_head list;
+	struct gss_auth *auth;
+	struct rpc_pipe *pipe;
+	struct rpc_wait_queue rpc_waitqueue;
+	wait_queue_head_t waitqueue;
+	struct gss_cl_ctx *ctx;
+	char databuf[256];
+};
+
+struct gss_pipe {
+	struct rpc_pipe_dir_object pdo;
+	struct rpc_pipe *pipe;
+	struct rpc_clnt *clnt;
+	const char *name;
+	struct kref kref;
+};
+
+struct gss_auth {
+	struct kref kref;
+	struct hlist_node hash;
+	struct rpc_auth rpc_auth;
+	struct gss_api_mech *mech;
+	enum rpc_gss_svc service;
+	struct rpc_clnt *client;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct gss_pipe *gss_pipe[2];
+	const char *target_name;
+};
+
+struct gss_alloc_pdo {
+	struct rpc_clnt *clnt;
+	const char *name;
+	const struct rpc_pipe_ops *upcall_ops;
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+struct dir_entry {
+	struct list_head list;
+	time64_t mtime;
+	char name[0];
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+struct pci_io_addr_range {
+	struct rb_node rb_node;
+	resource_size_t addr_lo;
+	resource_size_t addr_hi;
+	struct eeh_dev *edev;
+	struct pci_dev *pcidev;
+	long unsigned int flags;
+};
+
+struct pci_io_addr_cache {
+	struct rb_root rb_root;
+	spinlock_t piar_lock;
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sd_data {
+	struct sched_domain **sd;
+	struct sched_domain_shared **sds;
+	struct sched_group **sg;
+	struct sched_group_capacity **sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+enum {
+	smt_idx = 0,
+	cache_idx = 1,
+	mc_idx = 2,
+	die_idx = 3,
+};
+
+struct thread_groups {
+	unsigned int property;
+	unsigned int nr_groups;
+	unsigned int threads_per_group;
+	unsigned int thread_list[8];
+};
+
+struct thread_groups_list {
+	unsigned int nr_properties;
+	struct thread_groups property_tgs[2];
+};
+
+struct cpu_messages {
+	long int messages;
+};
+
+struct change_memory_parms {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int newpp;
+	unsigned int step;
+	unsigned int nr_cpus;
+	unsigned int master_cpu;
+	atomic_t cpu_counter;
+};
+
+struct fixup_entry {
+	long unsigned int mask;
+	long unsigned int value;
+	long int start_off;
+	long int end_off;
+	long int alt_start_off;
+	long int alt_end_off;
+};
+
+enum OpalLPCAddressType {
+	OPAL_LPC_MEM = 0,
+	OPAL_LPC_IO = 1,
+	OPAL_LPC_FW = 2,
+};
+
+struct lpc_debugfs_entry {
+	enum OpalLPCAddressType lpc_type;
+};
+
+struct kvm_device_attr {
+	__u32 flags;
+	__u32 group;
+	__u64 attr;
+	__u64 addr;
+};
+
+struct kvm_device;
+
+struct kvm_device_ops {
+	const char *name;
+	int (*create)(struct kvm_device *, u32);
+	void (*init)(struct kvm_device *);
+	void (*destroy)(struct kvm_device *);
+	void (*release)(struct kvm_device *);
+	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
+	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
+	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+};
+
+struct kvmppc_ics;
+
+struct kvmppc_xics {
+	struct kvm *kvm;
+	struct kvm_device *dev;
+	struct dentry *dentry;
+	u32 max_icsid;
+	bool real_mode;
+	bool real_mode_dbg;
+	u32 err_noics;
+	u32 err_noicp;
+	struct kvmppc_ics *ics[1024];
+};
+
+union kvmppc_icp_state {
+	long unsigned int raw;
+	struct {
+		u8 out_ee: 1;
+		u8 need_resend: 1;
+		u8 cppr;
+		u8 mfrr;
+		u8 pending_pri;
+		u32 xisr;
 	};
-	union {
-		__le32 raddr_hi;
-		__le32 next_hi;
+};
+
+struct kvmppc_icp {
+	struct kvm_vcpu *vcpu;
+	long unsigned int server_num;
+	union kvmppc_icp_state state;
+	long unsigned int resend_map[16];
+	u32 rm_action;
+	struct kvm_vcpu *rm_kick_target;
+	struct kvmppc_icp *rm_resend_icp;
+	u32 rm_reject;
+	u32 rm_eoied_irq;
+	long unsigned int n_rm_kick_vcpu;
+	long unsigned int n_rm_check_resend;
+	long unsigned int n_rm_notify_eoi;
+	long unsigned int n_check_resend;
+	long unsigned int n_reject;
+	union kvmppc_icp_state rm_dbgstate;
+	struct kvm_vcpu *rm_dbgtgt;
+};
+
+struct kvm_device {
+	const struct kvm_device_ops *ops;
+	struct kvm *kvm;
+	void *private;
+	struct list_head vm_node;
+};
+
+union kvmppc_rm_state {
+	long unsigned int raw;
+	struct {
+		u32 in_host;
+		u32 rm_action;
 	};
+};
+
+struct kvmppc_host_rm_core {
+	union kvmppc_rm_state rm_state;
+	void *rm_data;
+	char pad[112];
+};
+
+struct kvmppc_host_rm_ops {
+	struct kvmppc_host_rm_core *rm_core;
+	void (*vcpu_kick)(struct kvm_vcpu *);
+};
+
+struct ics_irq_state {
+	u32 number;
+	u32 server;
+	u32 pq_state;
+	u8 priority;
+	u8 saved_priority;
+	u8 resend;
+	u8 masked_pending;
+	u8 lsi;
+	u8 exists;
+	int intr_cpu;
+	u32 host_irq;
+};
+
+struct kvmppc_ics {
+	arch_spinlock_t lock;
+	u16 icsid;
+	struct ics_irq_state irq_state[1024];
+};
+
+enum {
+	PM_CYC___5 = 393460,
+};
+
+enum {
+	PM_INST_CMPL___5 = 327930,
+};
+
+enum {
+	PM_BR_CMPL___2 = 315486,
+};
+
+enum {
+	PM_BR_MPRED_CMPL___4 = 262390,
+};
+
+enum {
+	PM_BR_FIN = 192586,
+};
+
+enum {
+	PM_MPRED_BR_FIN = 254104,
+};
+
+enum {
+	PM_LD_DEMAND_MISS_L1_FIN = 262384,
+};
+
+enum {
+	PM_LD_REF_L1___4 = 65788,
+};
+
+enum {
+	PM_LD_MISS_L1___5 = 254036,
+};
+
+enum {
+	PM_ST_MISS_L1___5 = 196848,
+};
+
+enum {
+	PM_LD_PREFETCH_CACHE_LINE_MISS = 65580,
+};
+
+enum {
+	PM_L1_ICACHE_MISS___5 = 131324,
+};
+
+enum {
+	PM_INST_FROM_L1___4 = 16512,
+};
+
+enum {
+	PM_INST_FROM_L1MISS = 17732923532886080ULL,
+};
+
+enum {
+	PM_IC_PREF_REQ___2 = 16544,
+};
+
+enum {
+	PM_DATA_FROM_L3___4 = 5418393301794880ULL,
+};
+
+enum {
+	PM_DATA_FROM_L3MISS___5 = 196862,
+};
+
+enum {
+	PM_L2_ST___4 = 1099511914624ULL,
+};
+
+enum {
+	PM_L2_ST_MISS___4 = 157824,
+};
+
+enum {
+	PM_L3_PF_MISS_L3 = 17592186134656ULL,
+};
+
+enum {
+	PM_DTLB_MISS___5 = 196860,
+};
+
+enum {
+	PM_ITLB_MISS___5 = 262396,
+};
+
+enum {
+	PM_CYC_ALT___2 = 30,
+};
+
+enum {
+	PM_INST_CMPL_ALT___2 = 2,
+};
+
+enum {
+	MEM_LOADS___2 = 228505944544ULL,
+};
+
+enum {
+	MEM_STORES___2 = 228640162272ULL,
+};
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
 	union {
 		struct {
-			__le32 bufptr_lo;
-			__le32 bufptr_hi;
-			__le32 s_dist;
-			__le32 s_size;
-		} t1;
-		__le32 data[4];
-		u32 reserved[4];
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
 	};
 };
 
-struct tsi721_imsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	__le32 bufptr_lo;
-	__le32 bufptr_hi;
-	u32 reserved[12];
-};
-
-struct tsi721_omsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	union {
-		__le32 bufptr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 bufptr_hi;
-		__le32 next_hi;
-	};
-};
-
-enum dma_dtype {
-	DTYPE1 = 1,
-	DTYPE2 = 2,
-	DTYPE3 = 3,
-	DTYPE4 = 4,
-	DTYPE5 = 5,
-	DTYPE6 = 6,
-};
-
-enum dma_rtype {
-	NREAD = 0,
-	LAST_NWRITE_R = 1,
-	ALL_NWRITE = 2,
-	ALL_NWRITE_R = 3,
-	MAINT_RD = 4,
-	MAINT_WR = 5,
-};
-
-struct tsi721_bdma_maint {
-	int ch_id;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-};
-
-struct tsi721_imsg_ring {
-	u32 size;
-	void *buf_base;
-	dma_addr_t buf_phys;
-	void *imfq_base;
-	dma_addr_t imfq_phys;
-	void *imd_base;
-	dma_addr_t imd_phys;
-	void *imq_base[512];
-	u32 rx_slot;
-	void *dev_id;
-	u32 fq_wrptr;
-	u32 desc_rdptr;
-	spinlock_t lock;
-};
-
-struct tsi721_omsg_ring {
-	u32 size;
-	void *omd_base;
-	dma_addr_t omd_phys;
-	void *omq_base[512];
-	dma_addr_t omq_phys[512];
-	void *sts_base;
-	dma_addr_t sts_phys;
-	u32 sts_size;
-	u32 sts_rdptr;
-	u32 tx_slot;
-	void *dev_id;
-	u32 wr_count;
-	spinlock_t lock;
-};
-
-enum tsi721_flags {
-	TSI721_USING_MSI = 1,
-	TSI721_USING_MSIX = 2,
-	TSI721_IMSGID_SET = 4,
-};
-
-enum tsi721_msix_vect {
-	TSI721_VECT_IDB = 0,
-	TSI721_VECT_PWRX = 1,
-	TSI721_VECT_OMB0_DONE = 2,
-	TSI721_VECT_OMB1_DONE = 3,
-	TSI721_VECT_OMB2_DONE = 4,
-	TSI721_VECT_OMB3_DONE = 5,
-	TSI721_VECT_OMB0_INT = 6,
-	TSI721_VECT_OMB1_INT = 7,
-	TSI721_VECT_OMB2_INT = 8,
-	TSI721_VECT_OMB3_INT = 9,
-	TSI721_VECT_IMB0_RCV = 10,
-	TSI721_VECT_IMB1_RCV = 11,
-	TSI721_VECT_IMB2_RCV = 12,
-	TSI721_VECT_IMB3_RCV = 13,
-	TSI721_VECT_IMB0_INT = 14,
-	TSI721_VECT_IMB1_INT = 15,
-	TSI721_VECT_IMB2_INT = 16,
-	TSI721_VECT_IMB3_INT = 17,
-	TSI721_VECT_MAX = 18,
-};
-
-struct msix_irq {
-	u16 vector;
-	char irq_name[64];
-};
-
-struct tsi721_ib_win_mapping {
-	struct list_head node;
-	dma_addr_t lstart;
-};
-
-struct tsi721_ib_win {
-	u64 rstart;
-	u32 size;
-	dma_addr_t lstart;
-	bool active;
-	bool xlat;
-	struct list_head mappings;
-};
-
-struct tsi721_obw_bar {
-	u64 base;
-	u64 size;
-	u64 free;
-};
-
-struct tsi721_ob_win {
-	u64 base;
-	u32 size;
-	u16 destid;
-	u64 rstart;
-	bool active;
-	struct tsi721_obw_bar *pbar;
-};
-
-struct tsi721_device {
-	struct pci_dev *pdev;
-	struct rio_mport mport;
-	u32 flags;
-	void *regs;
-	struct msix_irq msix[18];
-	void *odb_base;
-	void *idb_base;
-	dma_addr_t idb_dma;
-	struct work_struct idb_work;
-	u32 db_discard_count;
-	struct work_struct pw_work;
-	struct kfifo pw_fifo;
-	spinlock_t pw_fifo_lock;
-	u32 pw_discard_count;
-	struct tsi721_bdma_maint mdma;
-	int imsg_init[8];
-	struct tsi721_imsg_ring imsg_ring[8];
-	int omsg_init[4];
-	struct tsi721_omsg_ring omsg_ring[4];
-	struct tsi721_ib_win ib_win[8];
-	int ibwin_cnt;
-	struct tsi721_obw_bar p2r_bar[2];
-	struct tsi721_ob_win ob_win[8];
-	int obwin_cnt;
-};
-
-enum hdmi_infoframe_type {
-	HDMI_INFOFRAME_TYPE_VENDOR = 129,
-	HDMI_INFOFRAME_TYPE_AVI = 130,
-	HDMI_INFOFRAME_TYPE_SPD = 131,
-	HDMI_INFOFRAME_TYPE_AUDIO = 132,
-	HDMI_INFOFRAME_TYPE_DRM = 135,
-};
-
-struct hdmi_any_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-};
-
-enum hdmi_colorspace {
-	HDMI_COLORSPACE_RGB = 0,
-	HDMI_COLORSPACE_YUV422 = 1,
-	HDMI_COLORSPACE_YUV444 = 2,
-	HDMI_COLORSPACE_YUV420 = 3,
-	HDMI_COLORSPACE_RESERVED4 = 4,
-	HDMI_COLORSPACE_RESERVED5 = 5,
-	HDMI_COLORSPACE_RESERVED6 = 6,
-	HDMI_COLORSPACE_IDO_DEFINED = 7,
-};
-
-enum hdmi_scan_mode {
-	HDMI_SCAN_MODE_NONE = 0,
-	HDMI_SCAN_MODE_OVERSCAN = 1,
-	HDMI_SCAN_MODE_UNDERSCAN = 2,
-	HDMI_SCAN_MODE_RESERVED = 3,
-};
-
-enum hdmi_colorimetry {
-	HDMI_COLORIMETRY_NONE = 0,
-	HDMI_COLORIMETRY_ITU_601 = 1,
-	HDMI_COLORIMETRY_ITU_709 = 2,
-	HDMI_COLORIMETRY_EXTENDED = 3,
-};
-
-enum hdmi_picture_aspect {
-	HDMI_PICTURE_ASPECT_NONE = 0,
-	HDMI_PICTURE_ASPECT_4_3 = 1,
-	HDMI_PICTURE_ASPECT_16_9 = 2,
-	HDMI_PICTURE_ASPECT_64_27 = 3,
-	HDMI_PICTURE_ASPECT_256_135 = 4,
-	HDMI_PICTURE_ASPECT_RESERVED = 5,
-};
-
-enum hdmi_active_aspect {
-	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
-	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
-	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
-	HDMI_ACTIVE_ASPECT_PICTURE = 8,
-	HDMI_ACTIVE_ASPECT_4_3 = 9,
-	HDMI_ACTIVE_ASPECT_16_9 = 10,
-	HDMI_ACTIVE_ASPECT_14_9 = 11,
-	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
-	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
-	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
-};
-
-enum hdmi_extended_colorimetry {
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
-	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
-	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
-	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
-	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
-	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
-	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
-};
-
-enum hdmi_quantization_range {
-	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
-	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
-	HDMI_QUANTIZATION_RANGE_FULL = 2,
-	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
-};
-
-enum hdmi_nups {
-	HDMI_NUPS_UNKNOWN = 0,
-	HDMI_NUPS_HORIZONTAL = 1,
-	HDMI_NUPS_VERTICAL = 2,
-	HDMI_NUPS_BOTH = 3,
-};
-
-enum hdmi_ycc_quantization_range {
-	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
-	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
-};
-
-enum hdmi_content_type {
-	HDMI_CONTENT_TYPE_GRAPHICS = 0,
-	HDMI_CONTENT_TYPE_PHOTO = 1,
-	HDMI_CONTENT_TYPE_CINEMA = 2,
-	HDMI_CONTENT_TYPE_GAME = 3,
-};
-
-enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
-};
-
-enum hdmi_eotf {
-	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
-	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
-	HDMI_EOTF_SMPTE_ST2084 = 2,
-	HDMI_EOTF_BT_2100_HLG = 3,
-};
-
-struct hdmi_avi_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_colorspace colorspace;
-	enum hdmi_scan_mode scan_mode;
-	enum hdmi_colorimetry colorimetry;
-	enum hdmi_picture_aspect picture_aspect;
-	enum hdmi_active_aspect active_aspect;
-	bool itc;
-	enum hdmi_extended_colorimetry extended_colorimetry;
-	enum hdmi_quantization_range quantization_range;
-	enum hdmi_nups nups;
-	unsigned char video_code;
-	enum hdmi_ycc_quantization_range ycc_quantization_range;
-	enum hdmi_content_type content_type;
-	unsigned char pixel_repeat;
-	short unsigned int top_bar;
-	short unsigned int bottom_bar;
-	short unsigned int left_bar;
-	short unsigned int right_bar;
-};
-
-struct hdmi_drm_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_eotf eotf;
-	enum hdmi_metadata_type metadata_type;
-	struct {
-		u16 x;
-		u16 y;
-	} display_primaries[3];
-	struct {
-		u16 x;
-		u16 y;
-	} white_point;
-	u16 max_display_mastering_luminance;
-	u16 min_display_mastering_luminance;
-	u16 max_cll;
-	u16 max_fall;
-};
-
-enum hdmi_spd_sdi {
-	HDMI_SPD_SDI_UNKNOWN = 0,
-	HDMI_SPD_SDI_DSTB = 1,
-	HDMI_SPD_SDI_DVDP = 2,
-	HDMI_SPD_SDI_DVHS = 3,
-	HDMI_SPD_SDI_HDDVR = 4,
-	HDMI_SPD_SDI_DVC = 5,
-	HDMI_SPD_SDI_DSC = 6,
-	HDMI_SPD_SDI_VCD = 7,
-	HDMI_SPD_SDI_GAME = 8,
-	HDMI_SPD_SDI_PC = 9,
-	HDMI_SPD_SDI_BD = 10,
-	HDMI_SPD_SDI_SACD = 11,
-	HDMI_SPD_SDI_HDDVD = 12,
-	HDMI_SPD_SDI_PMP = 13,
-};
-
-struct hdmi_spd_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	char vendor[8];
-	char product[16];
-	enum hdmi_spd_sdi sdi;
-};
-
-enum hdmi_audio_coding_type {
-	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
-	HDMI_AUDIO_CODING_TYPE_PCM = 1,
-	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
-	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
-	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
-	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
-	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_DTS = 7,
-	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
-	HDMI_AUDIO_CODING_TYPE_DSD = 9,
-	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
-	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
-	HDMI_AUDIO_CODING_TYPE_MLP = 12,
-	HDMI_AUDIO_CODING_TYPE_DST = 13,
-	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
-	HDMI_AUDIO_CODING_TYPE_CXT = 15,
-};
-
-enum hdmi_audio_sample_size {
-	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
-	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
-	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
-};
-
-enum hdmi_audio_sample_frequency {
-	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
-};
-
-enum hdmi_audio_coding_type_ext {
-	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
-};
-
-struct hdmi_audio_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned char channels;
-	enum hdmi_audio_coding_type coding_type;
-	enum hdmi_audio_sample_size sample_size;
-	enum hdmi_audio_sample_frequency sample_frequency;
-	enum hdmi_audio_coding_type_ext coding_type_ext;
-	unsigned char channel_allocation;
-	unsigned char level_shift_value;
-	bool downmix_inhibit;
-};
-
-enum hdmi_3d_structure {
-	HDMI_3D_STRUCTURE_INVALID = 4294967295,
-	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
-	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
-	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
-	HDMI_3D_STRUCTURE_L_DEPTH = 4,
-	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
-	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
-};
-
-struct hdmi_vendor_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned int oui;
-	u8 vic;
-	enum hdmi_3d_structure s3d_struct;
-	unsigned int s3d_ext_data;
-};
-
-union hdmi_vendor_any_infoframe {
-	struct {
-		enum hdmi_infoframe_type type;
-		unsigned char version;
-		unsigned char length;
-		unsigned int oui;
-	} any;
-	struct hdmi_vendor_infoframe hdmi;
-};
-
-union hdmi_infoframe {
-	struct hdmi_any_infoframe any;
-	struct hdmi_avi_infoframe avi;
-	struct hdmi_spd_infoframe spd;
-	union hdmi_vendor_any_infoframe vendor;
-	struct hdmi_audio_infoframe audio;
-	struct hdmi_drm_infoframe drm;
-};
-
-enum con_scroll {
-	SM_UP = 0,
-	SM_DOWN = 1,
-};
-
-enum vc_intensity {
-	VCI_HALF_BRIGHT = 0,
-	VCI_NORMAL = 1,
-	VCI_BOLD = 2,
-	VCI_MASK = 3,
-};
-
-struct vc_data;
-
-struct console_font;
-
-struct consw {
-	struct module *owner;
-	const char * (*con_startup)();
-	void (*con_init)(struct vc_data *, int);
-	void (*con_deinit)(struct vc_data *);
-	void (*con_clear)(struct vc_data *, int, int, int, int);
-	void (*con_putc)(struct vc_data *, int, int, int);
-	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
-	void (*con_cursor)(struct vc_data *, int);
-	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
-	int (*con_switch)(struct vc_data *);
-	int (*con_blank)(struct vc_data *, int, int);
-	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
-	int (*con_font_get)(struct vc_data *, struct console_font *);
-	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
-	int (*con_font_copy)(struct vc_data *, int);
-	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
-	void (*con_set_palette)(struct vc_data *, const unsigned char *);
-	void (*con_scrolldelta)(struct vc_data *, int);
-	int (*con_set_origin)(struct vc_data *);
-	void (*con_save_screen)(struct vc_data *);
-	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
-	void (*con_invert_region)(struct vc_data *, u16 *, int);
-	u16 * (*con_screen_pos)(const struct vc_data *, int);
-	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
-	void (*con_flush_scrollback)(struct vc_data *);
-	int (*con_debug_enter)(struct vc_data *);
-	int (*con_debug_leave)(struct vc_data *);
-};
-
-struct vc_state {
-	unsigned int x;
-	unsigned int y;
-	unsigned char color;
-	unsigned char Gx_charset[2];
-	unsigned int charset: 1;
-	enum vc_intensity intensity;
-	bool italic;
-	bool underline;
-	bool blink;
-	bool reverse;
-};
-
-struct console_font {
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_mode {
-	char mode;
-	char waitv;
-	short int relsig;
-	short int acqsig;
-	short int frsig;
-};
-
-struct uni_pagedir;
-
-struct uni_screen;
-
-struct vc_data {
-	struct tty_port port;
-	struct vc_state state;
-	struct vc_state saved_state;
-	short unsigned int vc_num;
-	unsigned int vc_cols;
-	unsigned int vc_rows;
-	unsigned int vc_size_row;
-	unsigned int vc_scan_lines;
-	long unsigned int vc_origin;
-	long unsigned int vc_scr_end;
-	long unsigned int vc_visible_origin;
-	unsigned int vc_top;
-	unsigned int vc_bottom;
-	const struct consw *vc_sw;
-	short unsigned int *vc_screenbuf;
-	unsigned int vc_screenbuf_size;
-	unsigned char vc_mode;
-	unsigned char vc_attr;
-	unsigned char vc_def_color;
-	unsigned char vc_ulcolor;
-	unsigned char vc_itcolor;
-	unsigned char vc_halfcolor;
-	unsigned int vc_cursor_type;
-	short unsigned int vc_complement_mask;
-	short unsigned int vc_s_complement_mask;
-	long unsigned int vc_pos;
-	short unsigned int vc_hi_font_mask;
-	struct console_font vc_font;
-	short unsigned int vc_video_erase_char;
-	unsigned int vc_state;
-	unsigned int vc_npar;
-	unsigned int vc_par[16];
-	struct vt_mode vt_mode;
-	struct pid *vt_pid;
-	int vt_newvt;
-	wait_queue_head_t paste_wait;
-	unsigned int vc_disp_ctrl: 1;
-	unsigned int vc_toggle_meta: 1;
-	unsigned int vc_decscnm: 1;
-	unsigned int vc_decom: 1;
-	unsigned int vc_decawm: 1;
-	unsigned int vc_deccm: 1;
-	unsigned int vc_decim: 1;
-	unsigned int vc_priv: 3;
-	unsigned int vc_need_wrap: 1;
-	unsigned int vc_can_do_color: 1;
-	unsigned int vc_report_mouse: 2;
-	unsigned char vc_utf: 1;
-	unsigned char vc_utf_count;
-	int vc_utf_char;
-	long unsigned int vc_tab_stop[4];
-	unsigned char vc_palette[48];
-	short unsigned int *vc_translate;
-	unsigned int vc_resize_user;
-	unsigned int vc_bell_pitch;
-	unsigned int vc_bell_duration;
-	short unsigned int vc_cur_blink_ms;
-	struct vc_data **vc_display_fg;
-	struct uni_pagedir *vc_uni_pagedir;
-	struct uni_pagedir **vc_uni_pagedir_loc;
-	struct uni_screen *vc_uni_screen;
-};
-
-struct vc {
-	struct vc_data *d;
-	struct work_struct SAK_work;
-};
-
-struct vgastate {
-	void *vgabase;
-	long unsigned int membase;
-	__u32 memsize;
+struct ptrace_rseq_configuration {
+	__u64 rseq_abi_pointer;
+	__u32 rseq_abi_size;
+	__u32 signature;
 	__u32 flags;
-	__u32 depth;
-	__u32 num_attr;
-	__u32 num_crtc;
-	__u32 num_gfx;
-	__u32 num_seq;
-	void *vidstate;
+	__u32 pad;
 };
 
-struct fb_fix_screeninfo {
-	char id[16];
-	long unsigned int smem_start;
-	__u32 smem_len;
-	__u32 type;
-	__u32 type_aux;
-	__u32 visual;
-	__u16 xpanstep;
-	__u16 ypanstep;
-	__u16 ywrapstep;
-	__u32 line_length;
-	long unsigned int mmio_start;
-	__u32 mmio_len;
-	__u32 accel;
-	__u16 capabilities;
-	__u16 reserved[2];
-};
-
-struct fb_bitfield {
-	__u32 offset;
-	__u32 length;
-	__u32 msb_right;
-};
-
-struct fb_var_screeninfo {
-	__u32 xres;
-	__u32 yres;
-	__u32 xres_virtual;
-	__u32 yres_virtual;
-	__u32 xoffset;
-	__u32 yoffset;
-	__u32 bits_per_pixel;
-	__u32 grayscale;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	__u32 nonstd;
-	__u32 activate;
-	__u32 height;
-	__u32 width;
-	__u32 accel_flags;
-	__u32 pixclock;
-	__u32 left_margin;
-	__u32 right_margin;
-	__u32 upper_margin;
-	__u32 lower_margin;
-	__u32 hsync_len;
-	__u32 vsync_len;
-	__u32 sync;
-	__u32 vmode;
-	__u32 rotate;
-	__u32 colorspace;
-	__u32 reserved[4];
-};
-
-struct fb_cmap {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long int err;
+	int trapnr;
+	int signr;
 };
 
 enum {
-	FB_BLANK_UNBLANK = 0,
-	FB_BLANK_NORMAL = 1,
-	FB_BLANK_VSYNC_SUSPEND = 2,
-	FB_BLANK_HSYNC_SUSPEND = 3,
-	FB_BLANK_POWERDOWN = 4,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
 };
 
-struct fb_copyarea {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 sx;
-	__u32 sy;
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
 };
 
-struct fb_fillrect {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 color;
-	__u32 rop;
+struct sd_flag_debug {
+	unsigned int meta_flags;
+	char *name;
 };
 
-struct fb_image {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 fg_color;
-	__u32 bg_color;
-	__u8 depth;
-	const char *data;
-	struct fb_cmap cmap;
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_SHARED = 1,
 };
 
-struct fbcurpos {
-	__u16 x;
-	__u16 y;
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
 };
 
-struct fb_cursor {
-	__u16 set;
-	__u16 enable;
-	__u16 rop;
-	const char *mask;
-	struct fbcurpos hot;
-	struct fb_image image;
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
 };
 
-struct fb_chroma {
-	__u32 redx;
-	__u32 greenx;
-	__u32 bluex;
-	__u32 whitex;
-	__u32 redy;
-	__u32 greeny;
-	__u32 bluey;
-	__u32 whitey;
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 *cpuusage;
+	struct kernel_cpustat *cpustat;
 };
 
-struct fb_videomode;
-
-struct fb_monspecs {
-	struct fb_chroma chroma;
-	struct fb_videomode *modedb;
-	__u8 manufacturer[4];
-	__u8 monitor[14];
-	__u8 serial_no[14];
-	__u8 ascii[14];
-	__u32 modedb_len;
-	__u32 model;
-	__u32 serial;
-	__u32 year;
-	__u32 week;
-	__u32 hfmin;
-	__u32 hfmax;
-	__u32 dclkmin;
-	__u32 dclkmax;
-	__u16 input;
-	__u16 dpms;
-	__u16 signal;
-	__u16 vfmin;
-	__u16 vfmax;
-	__u16 gamma;
-	__u16 gtf: 1;
-	__u16 misc;
-	__u8 version;
-	__u8 revision;
-	__u8 max_x;
-	__u8 max_y;
+struct s_data {
+	struct sched_domain **sd;
+	struct root_domain *rd;
 };
 
-struct fb_videomode {
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
+};
+
+struct asym_cap_data {
+	struct list_head link;
+	long unsigned int capacity;
+	long unsigned int cpus[0];
+};
+
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+struct housekeeping {
+	struct cpumask cpumasks[9];
+	long unsigned int flags;
+};
+
+struct sched_param {
+	int sched_priority;
+};
+
+struct rcu_exp_work {
+	long unsigned int rew_s;
+	struct work_struct rew_work;
+};
+
+struct rcu_node {
+	raw_spinlock_t lock;
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	long unsigned int completedqs;
+	long unsigned int qsmask;
+	long unsigned int rcu_gp_init_mask;
+	long unsigned int qsmaskinit;
+	long unsigned int qsmaskinitnext;
+	long unsigned int expmask;
+	long unsigned int expmaskinit;
+	long unsigned int expmaskinitnext;
+	long unsigned int cbovldmask;
+	long unsigned int ffmask;
+	long unsigned int grpmask;
+	int grplo;
+	int grphi;
+	u8 grpnum;
+	u8 level;
+	bool wait_blkd_tasks;
+	struct rcu_node *parent;
+	struct list_head blkd_tasks;
+	struct list_head *gp_tasks;
+	struct list_head *exp_tasks;
+	struct list_head *boost_tasks;
+	struct rt_mutex boost_mtx;
+	long unsigned int boost_time;
+	struct mutex boost_kthread_mutex;
+	struct task_struct *boost_kthread_task;
+	unsigned int boost_kthread_status;
+	long unsigned int n_boosts;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t fqslock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t exp_lock;
+	long unsigned int exp_seq_rq;
+	wait_queue_head_t exp_wq[4];
+	struct rcu_exp_work rew;
+	bool exp_need_flush;
+	raw_spinlock_t exp_poll_lock;
+	long unsigned int exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+union rcu_noqs {
+	struct {
+		u8 norm;
+		u8 exp;
+	} b;
+	u16 s;
+};
+
+struct rcu_data {
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	union rcu_noqs cpu_no_qs;
+	bool core_needs_qs;
+	bool beenonline;
+	bool gpwrap;
+	bool cpu_started;
+	struct rcu_node *mynode;
+	long unsigned int grpmask;
+	long unsigned int ticks_this_gp;
+	struct irq_work defer_qs_iw;
+	bool defer_qs_iw_pending;
+	struct work_struct strict_work;
+	struct rcu_segcblist cblist;
+	long int qlen_last_fqs_check;
+	long unsigned int n_cbs_invoked;
+	long unsigned int n_force_qs_snap;
+	long int blimit;
+	int dynticks_snap;
+	bool rcu_need_heavy_qs;
+	bool rcu_urgent_qs;
+	bool rcu_forced_tick;
+	bool rcu_forced_tick_exp;
+	long unsigned int barrier_seq_snap;
+	struct callback_head barrier_head;
+	int exp_dynticks_snap;
+	struct task_struct *rcu_cpu_kthread_task;
+	unsigned int rcu_cpu_kthread_status;
+	char rcu_cpu_has_work;
+	long unsigned int rcuc_activity;
+	unsigned int softirq_snap;
+	struct irq_work rcu_iw;
+	bool rcu_iw_pending;
+	long unsigned int rcu_iw_gp_seq;
+	long unsigned int rcu_ofl_gp_seq;
+	short int rcu_ofl_gp_flags;
+	long unsigned int rcu_onl_gp_seq;
+	short int rcu_onl_gp_flags;
+	long unsigned int last_fqs_resched;
+	long unsigned int last_sched_clock;
+	int cpu;
+};
+
+struct rcu_state {
+	struct rcu_node node[131];
+	struct rcu_node *level[4];
+	int ncpus;
+	int n_online_cpus;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int gp_seq;
+	long unsigned int gp_max;
+	struct task_struct *gp_kthread;
+	struct swait_queue_head gp_wq;
+	short int gp_flags;
+	short int gp_state;
+	long unsigned int gp_wake_time;
+	long unsigned int gp_wake_seq;
+	long unsigned int gp_seq_polled;
+	long unsigned int gp_seq_polled_snap;
+	long unsigned int gp_seq_polled_exp_snap;
+	struct mutex barrier_mutex;
+	atomic_t barrier_cpu_count;
+	struct completion barrier_completion;
+	long unsigned int barrier_sequence;
+	raw_spinlock_t barrier_lock;
+	struct mutex exp_mutex;
+	struct mutex exp_wake_mutex;
+	long unsigned int expedited_sequence;
+	atomic_t expedited_need_qs;
+	struct swait_queue_head expedited_wq;
+	int ncpus_snap;
+	u8 cbovld;
+	u8 cbovldnext;
+	long unsigned int jiffies_force_qs;
+	long unsigned int jiffies_kick_kthreads;
+	long unsigned int n_force_qs;
+	long unsigned int gp_start;
+	long unsigned int gp_end;
+	long unsigned int gp_activity;
+	long unsigned int gp_req_activity;
+	long unsigned int jiffies_stall;
+	long unsigned int jiffies_resched;
+	long unsigned int n_force_qs_gpstart;
 	const char *name;
-	u32 refresh;
-	u32 xres;
-	u32 yres;
-	u32 pixclock;
-	u32 left_margin;
-	u32 right_margin;
-	u32 upper_margin;
-	u32 lower_margin;
-	u32 hsync_len;
-	u32 vsync_len;
-	u32 sync;
-	u32 vmode;
-	u32 flag;
+	char abbr;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct fb_info;
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
 
-struct fb_event {
-	struct fb_info *info;
+struct kvfree_rcu_bulk_data {
+	long unsigned int nr_records;
+	struct kvfree_rcu_bulk_data *next;
+	void *records[0];
+};
+
+struct kfree_rcu_cpu;
+
+struct kfree_rcu_cpu_work {
+	struct rcu_work rcu_work;
+	struct callback_head *head_free;
+	struct kvfree_rcu_bulk_data *bkvhead_free[2];
+	struct kfree_rcu_cpu *krcp;
+};
+
+struct kfree_rcu_cpu {
+	struct callback_head *head;
+	struct kvfree_rcu_bulk_data *bkvhead[2];
+	struct kfree_rcu_cpu_work krw_arr[2];
+	raw_spinlock_t lock;
+	struct delayed_work monitor_work;
+	bool initialized;
+	int count;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
+	atomic_t work_in_progress;
+	struct hrtimer hrtimer;
+	struct llist_head bkvcache;
+	int nr_bkv_objs;
+};
+
+struct proc_timens_offset {
+	int clockid;
+	struct timespec64 val;
+};
+
+struct rchan_percpu_buf_dispatcher {
+	struct rchan_buf *buf;
+	struct dentry *dentry;
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
+
+struct regex;
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+struct filter_pred {
+	filter_pred_fn_t fn;
+	u64 val;
+	struct regex regex;
+	short unsigned int *ops;
+	struct ftrace_event_field *field;
+	int offset;
+	int not;
+	int op;
+};
+
+enum regex_type {
+	MATCH_FULL = 0,
+	MATCH_FRONT_ONLY = 1,
+	MATCH_MIDDLE_ONLY = 2,
+	MATCH_END_ONLY = 3,
+	MATCH_GLOB = 4,
+	MATCH_INDEX = 5,
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_OPERAND_TOO_LONG = 5,
+	FILT_ERR_EXPECT_STRING = 6,
+	FILT_ERR_EXPECT_DIGIT = 7,
+	FILT_ERR_ILLEGAL_FIELD_OP = 8,
+	FILT_ERR_FIELD_NOT_FOUND = 9,
+	FILT_ERR_ILLEGAL_INTVAL = 10,
+	FILT_ERR_BAD_SUBSYS_FILTER = 11,
+	FILT_ERR_TOO_MANY_PREDS = 12,
+	FILT_ERR_INVALID_FILTER = 13,
+	FILT_ERR_IP_FIELD_ONLY = 14,
+	FILT_ERR_INVALID_VALUE = 15,
+	FILT_ERR_ERRNO = 16,
+	FILT_ERR_NO_FILTER = 17,
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum {
+	TOO_MANY_CLOSE = -1,
+	TOO_MANY_OPEN = -2,
+	MISSING_QUOTE = -3,
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct function_filter_data {
+	struct ftrace_ops *ops;
+	int first_filter;
+	int first_notrace;
+};
+
+struct bpf_preload_info {
+	char link_name[16];
+	struct bpf_link *link;
+};
+
+struct bpf_preload_ops {
+	int (*preload)(struct bpf_preload_info *);
+	struct module *owner;
+};
+
+enum bpf_type {
+	BPF_TYPE_UNSPEC = 0,
+	BPF_TYPE_PROG = 1,
+	BPF_TYPE_MAP = 2,
+	BPF_TYPE_LINK = 3,
+};
+
+struct map_iter {
+	void *key;
+	bool done;
+};
+
+enum {
+	OPT_MODE = 0,
+};
+
+struct bpf_mount_opts {
+	umode_t mode;
+};
+
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pcpu_group_info {
+	int nr_units;
+	long unsigned int base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void *ptr;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, long unsigned int, bool, bool, size_t, size_t, void *, int, void *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	void *base_addr;
+	long unsigned int *alloc_map;
+	long unsigned int *bound_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	long unsigned int populated[0];
+};
+
+union swap_header {
+	struct {
+		char reserved[65526];
+		char magic[10];
+	} magic;
+	struct {
+		char bootbits[1024];
+		__u32 version;
+		__u32 last_page;
+		__u32 nr_badpages;
+		unsigned char sws_uuid[16];
+		unsigned char sws_volume[16];
+		__u32 padding[117];
+		__u32 badpages[1];
+	} info;
+};
+
+struct swap_extent {
+	struct rb_node rb_node;
+	long unsigned int start_page;
+	long unsigned int nr_pages;
+	sector_t start_block;
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+typedef __kernel_mode_t mode_t;
+
+struct orlov_stats {
+	__u64 free_clusters;
+	__u32 free_inodes;
+	__u32 used_dirs;
+};
+
+struct nfs_open_dir_context {
+	struct list_head list;
+	atomic_t cache_hits;
+	atomic_t cache_misses;
+	long unsigned int attr_gencount;
+	__be32 verf[2];
+	__u64 dir_cookie;
+	__u64 last_cookie;
+	long unsigned int page_index;
+	unsigned int dtsize;
+	bool force_clear;
+	bool eof;
+	struct callback_head callback_head;
+};
+
+struct nfs_cache_array_entry {
+	u64 cookie;
+	u64 ino;
+	const char *name;
+	unsigned int name_len;
+	unsigned char d_type;
+};
+
+struct nfs_cache_array {
+	u64 change_attr;
+	u64 last_cookie;
+	unsigned int size;
+	unsigned char page_full: 1;
+	unsigned char page_is_eof: 1;
+	unsigned char cookies_are_ordered: 1;
+	struct nfs_cache_array_entry array[0];
+};
+
+struct nfs_readdir_descriptor {
+	struct file *file;
+	struct page *page;
+	struct dir_context *ctx;
+	long unsigned int page_index;
+	long unsigned int page_index_max;
+	u64 dir_cookie;
+	u64 last_cookie;
+	loff_t current_index;
+	__be32 verf[2];
+	long unsigned int dir_verifier;
+	long unsigned int timestamp;
+	long unsigned int gencount;
+	long unsigned int attr_gencount;
+	unsigned int cache_entry_index;
+	unsigned int buffer_fills;
+	unsigned int dtsize;
+	bool clear_cache;
+	bool plus;
+	bool eob;
+	bool eof;
+};
+
+enum {
+	NSMPROC_NULL = 0,
+	NSMPROC_STAT = 1,
+	NSMPROC_MON = 2,
+	NSMPROC_UNMON = 3,
+	NSMPROC_UNMON_ALL = 4,
+	NSMPROC_SIMU_CRASH = 5,
+	NSMPROC_NOTIFY = 6,
+};
+
+struct nsm_args {
+	struct nsm_private *priv;
+	u32 prog;
+	u32 vers;
+	u32 proc;
+	char *mon_name;
+	const char *nodename;
+};
+
+struct nsm_res {
+	u32 status;
+	u32 state;
+};
+
+typedef int (*xfs_agfl_walk_fn)(struct xfs_mount *, xfs_agblock_t, void *);
+
+struct xfs_alloc_cur {
+	struct xfs_btree_cur *cnt;
+	struct xfs_btree_cur *bnolt;
+	struct xfs_btree_cur *bnogt;
+	xfs_extlen_t cur_len;
+	xfs_agblock_t rec_bno;
+	xfs_extlen_t rec_len;
+	xfs_agblock_t bno;
+	xfs_extlen_t len;
+	xfs_extlen_t diff;
+	unsigned int busy_gen;
+	bool busy;
+};
+
+struct xfs_alloc_query_range_info {
+	xfs_alloc_query_range_fn fn;
+	void *priv;
+};
+
+struct xfs_mru_cache {
+	struct xarray store;
+	struct list_head *lists;
+	struct list_head reap_list;
+	spinlock_t lock;
+	unsigned int grp_count;
+	unsigned int grp_time;
+	unsigned int lru_grp;
+	long unsigned int time_zero;
+	xfs_mru_cache_free_func_t free_func;
+	struct delayed_work work;
+	unsigned int queued;
 	void *data;
 };
 
-struct fb_pixmap {
-	u8 *addr;
-	u32 size;
-	u32 offset;
-	u32 buf_align;
-	u32 scan_align;
-	u32 access_align;
-	u32 flags;
-	u32 blit_x;
-	u32 blit_y;
-	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
-	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+struct xfs_disk_dquot {
+	__be16 d_magic;
+	__u8 d_version;
+	__u8 d_type;
+	__be32 d_id;
+	__be64 d_blk_hardlimit;
+	__be64 d_blk_softlimit;
+	__be64 d_ino_hardlimit;
+	__be64 d_ino_softlimit;
+	__be64 d_bcount;
+	__be64 d_icount;
+	__be32 d_itimer;
+	__be32 d_btimer;
+	__be16 d_iwarns;
+	__be16 d_bwarns;
+	__be32 d_pad0;
+	__be64 d_rtb_hardlimit;
+	__be64 d_rtb_softlimit;
+	__be64 d_rtbcount;
+	__be32 d_rtbtimer;
+	__be16 d_rtbwarns;
+	__be16 d_pad;
 };
 
-struct backlight_device;
+struct xfs_dsymlink_hdr {
+	__be32 sl_magic;
+	__be32 sl_offset;
+	__be32 sl_bytes;
+	__be32 sl_crc;
+	uuid_t sl_uuid;
+	__be64 sl_owner;
+	__be64 sl_blkno;
+	__be64 sl_lsn;
+};
 
-struct fb_deferred_io;
+struct xfs_buf_cancel {
+	xfs_daddr_t bc_blkno;
+	uint bc_len;
+	int bc_refcount;
+	struct list_head bc_list;
+};
 
-struct fb_ops;
+struct debugfs_blob_wrapper {
+	void *data;
+	long unsigned int size;
+};
 
-struct fb_tile_ops;
+struct debugfs_reg32 {
+	char *name;
+	long unsigned int offset;
+};
 
-struct apertures_struct;
-
-struct fb_info {
-	atomic_t count;
-	int node;
-	int flags;
-	int fbcon_rotate_hint;
-	struct mutex lock;
-	struct mutex mm_lock;
-	struct fb_var_screeninfo var;
-	struct fb_fix_screeninfo fix;
-	struct fb_monspecs monspecs;
-	struct work_struct queue;
-	struct fb_pixmap pixmap;
-	struct fb_pixmap sprite;
-	struct fb_cmap cmap;
-	struct list_head modelist;
-	struct fb_videomode *mode;
-	struct backlight_device *bl_dev;
-	struct mutex bl_curve_mutex;
-	u8 bl_curve[128];
-	struct delayed_work deferred_work;
-	struct fb_deferred_io *fbdefio;
-	const struct fb_ops *fbops;
-	struct device *device;
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
 	struct device *dev;
-	int class_flag;
-	struct fb_tile_ops *tileops;
+};
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	refcount_t active_users;
+	struct completion active_users_drained;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+struct crypto_report_kpp {
+	char type[64];
+};
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_kpp {
+	struct crypto_tfm base;
+};
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	unsigned int reqsize;
+	struct crypto_alg base;
+};
+
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
 	union {
-		char *screen_base;
-		char *screen_buffer;
+		struct {
+			char head[56];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
 	};
-	long unsigned int screen_size;
-	void *pseudo_palette;
-	u32 state;
-	void *fbcon_par;
-	void *par;
-	struct apertures_struct *apertures;
-	bool skip_vt_switch;
 };
 
-struct fb_blit_caps {
-	u32 x;
-	u32 y;
-	u32 len;
-	u32 flags;
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
 };
 
-struct fb_deferred_io {
-	long unsigned int delay;
-	struct mutex lock;
-	struct list_head pagelist;
-	void (*first_io)(struct fb_info *);
-	void (*deferred_io)(struct fb_info *, struct list_head *);
+struct blk_integrity_profile;
+
+struct blk_integrity {
+	const struct blk_integrity_profile *profile;
+	unsigned char flags;
+	unsigned char tuple_size;
+	unsigned char interval_exp;
+	unsigned char tag_size;
 };
 
-struct fb_ops {
-	struct module *owner;
-	int (*fb_open)(struct fb_info *, int);
-	int (*fb_release)(struct fb_info *, int);
-	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
-	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
-	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
-	int (*fb_set_par)(struct fb_info *);
-	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
-	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
-	int (*fb_blank)(int, struct fb_info *);
-	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
-	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
-	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
-	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
-	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
-	int (*fb_sync)(struct fb_info *);
-	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
-	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
-	void (*fb_destroy)(struct fb_info *);
-	int (*fb_debug_enter)(struct fb_info *);
-	int (*fb_debug_leave)(struct fb_info *);
+struct blk_integrity_iter;
+
+typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+
+typedef void integrity_prepare_fn(struct request *);
+
+typedef void integrity_complete_fn(struct request *, unsigned int);
+
+struct blk_integrity_profile {
+	integrity_processing_fn *generate_fn;
+	integrity_processing_fn *verify_fn;
+	integrity_prepare_fn *prepare_fn;
+	integrity_complete_fn *complete_fn;
+	const char *name;
 };
 
-struct fb_tilemap {
-	__u32 width;
-	__u32 height;
-	__u32 depth;
-	__u32 length;
-	const __u8 *data;
+struct blk_integrity_iter {
+	void *prot_buf;
+	void *data_buf;
+	sector_t seed;
+	unsigned int data_size;
+	short unsigned int interval;
+	unsigned char tuple_size;
+	const char *disk_name;
 };
 
-struct fb_tilerect {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 index;
-	__u32 fg;
-	__u32 bg;
-	__u32 rop;
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
 };
 
-struct fb_tilearea {
-	__u32 sx;
-	__u32 sy;
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
+struct blkpg_ioctl_arg {
+	int op;
+	int flags;
+	int datalen;
+	void *data;
 };
 
-struct fb_tileblit {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 fg;
-	__u32 bg;
-	__u32 length;
-	__u32 *indices;
+struct blkpg_partition {
+	long long int start;
+	long long int length;
+	int pno;
+	char devname[64];
+	char volname[64];
 };
 
-struct fb_tilecursor {
-	__u32 sx;
-	__u32 sy;
-	__u32 mode;
-	__u32 shape;
-	__u32 fg;
-	__u32 bg;
+struct pr_reservation {
+	__u64 key;
+	__u32 type;
+	__u32 flags;
 };
 
-struct fb_tile_ops {
-	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
-	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
-	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
-	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
-	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
-	int (*fb_get_tilemax)(struct fb_info *);
+struct pr_registration {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 flags;
+	__u32 __pad;
 };
 
-struct aperture {
-	resource_size_t base;
-	resource_size_t size;
+struct pr_preempt {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 type;
+	__u32 flags;
 };
 
-struct apertures_struct {
-	unsigned int count;
-	struct aperture ranges[0];
+struct pr_clear {
+	__u64 key;
+	__u32 flags;
+	__u32 __pad;
 };
 
-enum backlight_type {
-	BACKLIGHT_RAW = 1,
-	BACKLIGHT_PLATFORM = 2,
-	BACKLIGHT_FIRMWARE = 3,
-	BACKLIGHT_TYPE_MAX = 4,
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	long unsigned int account_pages;
 };
 
-enum backlight_scale {
-	BACKLIGHT_SCALE_UNKNOWN = 0,
-	BACKLIGHT_SCALE_LINEAR = 1,
-	BACKLIGHT_SCALE_NON_LINEAR = 2,
+typedef struct {
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef ZSTD_DCtx ZSTD_DStream___2;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef struct {
+	size_t compressedSize;
+	long long unsigned int decompressedBound;
+} ZSTD_frameSizeInfo;
+
+struct dim_cq_moder {
+	u16 usec;
+	u16 pkts;
+	u16 comps;
+	u8 cq_period_mode;
 };
 
-struct backlight_properties {
-	int brightness;
-	int max_brightness;
-	int power;
-	int fb_blank;
-	enum backlight_type type;
-	unsigned int state;
-	enum backlight_scale scale;
-};
-
-struct backlight_ops;
-
-struct backlight_device {
-	struct backlight_properties props;
-	struct mutex update_lock;
-	struct mutex ops_lock;
-	const struct backlight_ops *ops;
-	struct notifier_block fb_notif;
-	struct list_head entry;
-	struct device dev;
-	bool fb_bl_on[32];
-	int use_count;
-};
-
-enum backlight_update_reason {
-	BACKLIGHT_UPDATE_HOTKEY = 0,
-	BACKLIGHT_UPDATE_SYSFS = 1,
-};
-
-enum backlight_notification {
-	BACKLIGHT_REGISTERED = 0,
-	BACKLIGHT_UNREGISTERED = 1,
-};
-
-struct backlight_ops {
-	unsigned int options;
-	int (*update_status)(struct backlight_device *);
-	int (*get_brightness)(struct backlight_device *);
-	int (*check_fb)(struct backlight_device *, struct fb_info *);
-};
-
-struct fb_cmap_user {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-struct fb_modelist {
-	struct list_head list;
-	struct fb_videomode mode;
-};
-
-struct logo_data {
-	int depth;
-	int needs_directpalette;
-	int needs_truepalette;
-	int needs_cmapreset;
-	const struct linux_logo *logo;
-};
-
-struct fb_fix_screeninfo32 {
-	char id[16];
-	compat_caddr_t smem_start;
-	u32 smem_len;
-	u32 type;
-	u32 type_aux;
-	u32 visual;
-	u16 xpanstep;
-	u16 ypanstep;
-	u16 ywrapstep;
-	u32 line_length;
-	compat_caddr_t mmio_start;
-	u32 mmio_len;
-	u32 accel;
-	u16 reserved[3];
-};
-
-struct fb_cmap32 {
-	u32 start;
-	u32 len;
-	compat_caddr_t red;
-	compat_caddr_t green;
-	compat_caddr_t blue;
-	compat_caddr_t transp;
+enum dim_cq_period_mode {
+	DIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,
+	DIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,
+	DIM_CQ_PERIOD_NUM_MODES = 2,
 };
 
 struct dmt_videomode {
@@ -94515,1560 +110728,5278 @@
 	u32 vtotal;
 };
 
-typedef unsigned int u_int;
-
-struct fb_cvt_data {
-	u32 xres;
-	u32 yres;
-	u32 refresh;
-	u32 f_refresh;
-	u32 pixclock;
-	u32 hperiod;
-	u32 hblank;
-	u32 hfreq;
-	u32 htotal;
-	u32 vtotal;
-	u32 vsync;
-	u32 hsync;
-	u32 h_front_porch;
-	u32 h_back_porch;
-	u32 v_front_porch;
-	u32 v_back_porch;
-	u32 h_margin;
-	u32 v_margin;
-	u32 interlace;
-	u32 aspect_ratio;
-	u32 active_pixels;
-	u32 flags;
-	u32 status;
+enum translation_map {
+	LAT1_MAP = 0,
+	GRAF_MAP = 1,
+	IBMPC_MAP = 2,
+	USER_MAP = 3,
+	FIRST_MAP = 0,
+	LAST_MAP = 3,
 };
 
-typedef unsigned char u_char;
-
-typedef short unsigned int u_short;
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
+struct uni_pagedict {
+	u16 **uni_pgdir[32];
+	long unsigned int refcount;
+	long unsigned int sum;
+	unsigned char *inverse_translations[4];
+	u16 *inverse_trans_unicode;
 };
 
-struct fbcon_display {
-	const u_char *fontdata;
-	int userfont;
-	u_short scrollmode;
-	u_short inverse;
-	short int yscroll;
-	int vrows;
-	int cursor_shape;
-	int con_rotate;
-	u32 xres_virtual;
-	u32 yres_virtual;
-	u32 height;
-	u32 width;
-	u32 bits_per_pixel;
-	u32 grayscale;
-	u32 nonstd;
-	u32 accel_flags;
-	u32 rotate;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	const struct fb_videomode *mode;
+struct exar8250_platform {
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	const struct serial_rs485 *rs485_supported;
+	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
+	void (*unregister_gpio)(struct uart_8250_port *);
 };
 
-struct fbcon_ops {
-	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
-	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
-	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
-	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
-	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
-	int (*update_start)(struct fb_info *);
-	int (*rotate_font)(struct fb_info *, struct vc_data *);
-	struct fb_var_screeninfo var;
-	struct timer_list cursor_timer;
-	struct fb_cursor cursor_state;
-	struct fbcon_display *p;
-	struct fb_info *info;
-	int currcon;
-	int cur_blink_jiffies;
-	int cursor_flash;
-	int cursor_reset;
-	int blank_state;
-	int graphics;
-	int save_graphics;
-	int flags;
-	int rotate;
-	int cur_rotate;
-	char *cursor_data;
-	u8 *fontbuffer;
-	u8 *fontdata;
-	u8 *cursor_src;
-	u32 cursor_size;
-	u32 fd_size;
+struct exar8250;
+
+struct exar8250_board {
+	unsigned int num_ports;
+	unsigned int reg_shift;
+	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
 };
 
-enum {
-	FBCON_LOGO_CANSHOW = 4294967295,
-	FBCON_LOGO_DRAW = 4294967294,
-	FBCON_LOGO_DONTSHOW = 4294967293,
+struct exar8250 {
+	unsigned int nr;
+	struct exar8250_board *board;
+	void *virt;
+	int line[0];
 };
 
-struct mode_map {
-	int vmode;
-	const struct fb_videomode *mode;
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
 };
 
-struct monitor_map {
-	int sense;
-	int vmode;
-};
-
-enum {
-	cmap_unknown = 0,
-	cmap_simple = 1,
-	cmap_r128 = 2,
-	cmap_M3A = 3,
-	cmap_M3B = 4,
-	cmap_radeon = 5,
-	cmap_gxt2000 = 6,
-	cmap_avivo = 7,
-	cmap_qemu = 8,
-};
-
-struct offb_par {
-	volatile void *cmap_adr;
-	volatile void *cmap_data;
-	int cmap_type;
-	int blanked;
-};
-
-struct simplefb_format {
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
 	const char *name;
-	u32 bits_per_pixel;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	u32 fourcc;
+	size_t size;
+	char __data[0];
 };
 
-struct simplefb_platform_data {
-	u32 width;
-	u32 height;
-	u32 stride;
-	const char *format;
+struct trace_event_data_offsets_devres {
+	u32 devname;
 };
 
-struct simplefb_params {
-	u32 width;
-	u32 height;
-	u32 stride;
-	struct simplefb_format *format;
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void *reserved[1];
+		void *unused;
+	};
 };
 
-struct simplefb_par {
-	u32 palette[16];
-	bool clks_enabled;
-	unsigned int clk_count;
-	struct clk **clks;
-	bool regulators_enabled;
-	u32 regulator_count;
-	struct regulator **regulators;
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
 };
 
-enum ipmi_addr_src {
-	SI_INVALID = 0,
-	SI_HOTMOD = 1,
-	SI_HARDCODED = 2,
-	SI_SPMI = 3,
-	SI_ACPI = 4,
-	SI_SMBIOS = 5,
-	SI_PCI = 6,
-	SI_DEVICETREE = 7,
-	SI_PLATFORM = 8,
-	SI_LAST = 9,
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
 };
 
-enum ipmi_plat_interface_type {
-	IPMI_PLAT_IF_SI = 0,
-	IPMI_PLAT_IF_SSIF = 1,
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
 };
 
-struct ipmi_plat_data {
-	enum ipmi_plat_interface_type iftype;
-	unsigned int type;
-	unsigned int space;
-	long unsigned int addr;
-	unsigned int regspacing;
-	unsigned int regsize;
-	unsigned int regshift;
+enum {
+	mechtype_caddy = 0,
+	mechtype_tray = 1,
+	mechtype_popup = 2,
+	mechtype_individual_changer = 4,
+	mechtype_cartridge_changer = 5,
+};
+
+struct event_header {
+	__be16 data_len;
+	__u8 notification_class: 3;
+	__u8 reserved1: 4;
+	__u8 nea: 1;
+	__u8 supp_event_class;
+};
+
+enum {
+	AHCI_MAX_PORTS = 32LL,
+	AHCI_MAX_CLKS = 5LL,
+	AHCI_MAX_SG = 168LL,
+	AHCI_DMA_BOUNDARY = 4294967295LL,
+	AHCI_MAX_CMDS = 32LL,
+	AHCI_CMD_SZ = 32LL,
+	AHCI_CMD_SLOT_SZ = 1024LL,
+	AHCI_RX_FIS_SZ = 256LL,
+	AHCI_CMD_TBL_CDB = 64LL,
+	AHCI_CMD_TBL_HDR_SZ = 128LL,
+	AHCI_CMD_TBL_SZ = 2816LL,
+	AHCI_CMD_TBL_AR_SZ = 90112LL,
+	AHCI_PORT_PRIV_DMA_SZ = 91392LL,
+	AHCI_PORT_PRIV_FBS_DMA_SZ = 95232LL,
+	AHCI_IRQ_ON_SG = -2147483648LL,
+	AHCI_CMD_ATAPI = 32LL,
+	AHCI_CMD_WRITE = 64LL,
+	AHCI_CMD_PREFETCH = 128LL,
+	AHCI_CMD_RESET = 256LL,
+	AHCI_CMD_CLR_BUSY = 1024LL,
+	RX_FIS_PIO_SETUP = 32LL,
+	RX_FIS_D2H_REG = 64LL,
+	RX_FIS_SDB = 88LL,
+	RX_FIS_UNK = 96LL,
+	HOST_CAP = 0LL,
+	HOST_CTL = 4LL,
+	HOST_IRQ_STAT___2 = 8LL,
+	HOST_PORTS_IMPL = 12LL,
+	HOST_VERSION = 16LL,
+	HOST_EM_LOC = 28LL,
+	HOST_EM_CTL = 32LL,
+	HOST_CAP2 = 36LL,
+	HOST_RESET = 1LL,
+	HOST_IRQ_EN = 2LL,
+	HOST_MRSM = 4LL,
+	HOST_AHCI_EN = -2147483648LL,
+	HOST_CAP_SXS = 32LL,
+	HOST_CAP_EMS = 64LL,
+	HOST_CAP_CCC = 128LL,
+	HOST_CAP_PART = 8192LL,
+	HOST_CAP_SSC = 16384LL,
+	HOST_CAP_PIO_MULTI = 32768LL,
+	HOST_CAP_FBS = 65536LL,
+	HOST_CAP_PMP = 131072LL,
+	HOST_CAP_ONLY = 262144LL,
+	HOST_CAP_CLO = 16777216LL,
+	HOST_CAP_LED = 33554432LL,
+	HOST_CAP_ALPM = 67108864LL,
+	HOST_CAP_SSS = 134217728LL,
+	HOST_CAP_MPS = 268435456LL,
+	HOST_CAP_SNTF = 536870912LL,
+	HOST_CAP_NCQ = 1073741824LL,
+	HOST_CAP_64 = -2147483648LL,
+	HOST_CAP2_BOH = 1LL,
+	HOST_CAP2_NVMHCI = 2LL,
+	HOST_CAP2_APST = 4LL,
+	HOST_CAP2_SDS = 8LL,
+	HOST_CAP2_SADM = 16LL,
+	HOST_CAP2_DESO = 32LL,
+	PORT_LST_ADDR = 0LL,
+	PORT_LST_ADDR_HI = 4LL,
+	PORT_FIS_ADDR = 8LL,
+	PORT_FIS_ADDR_HI = 12LL,
+	PORT_IRQ_STAT___2 = 16LL,
+	PORT_IRQ_MASK = 20LL,
+	PORT_CMD = 24LL,
+	PORT_TFDATA = 32LL,
+	PORT_SIG = 36LL,
+	PORT_CMD_ISSUE = 56LL,
+	PORT_SCR_STAT = 40LL,
+	PORT_SCR_CTL = 44LL,
+	PORT_SCR_ERR = 48LL,
+	PORT_SCR_ACT = 52LL,
+	PORT_SCR_NTF = 60LL,
+	PORT_FBS = 64LL,
+	PORT_DEVSLP = 68LL,
+	PORT_IRQ_COLD_PRES = -2147483648LL,
+	PORT_IRQ_TF_ERR = 1073741824LL,
+	PORT_IRQ_HBUS_ERR = 536870912LL,
+	PORT_IRQ_HBUS_DATA_ERR = 268435456LL,
+	PORT_IRQ_IF_ERR = 134217728LL,
+	PORT_IRQ_IF_NONFATAL = 67108864LL,
+	PORT_IRQ_OVERFLOW = 16777216LL,
+	PORT_IRQ_BAD_PMP = 8388608LL,
+	PORT_IRQ_PHYRDY = 4194304LL,
+	PORT_IRQ_DEV_ILCK = 128LL,
+	PORT_IRQ_CONNECT = 64LL,
+	PORT_IRQ_SG_DONE = 32LL,
+	PORT_IRQ_UNK_FIS___2 = 16LL,
+	PORT_IRQ_SDB_FIS = 8LL,
+	PORT_IRQ_DMAS_FIS = 4LL,
+	PORT_IRQ_PIOS_FIS = 2LL,
+	PORT_IRQ_D2H_REG_FIS = 1LL,
+	PORT_IRQ_FREEZE = 683671632LL,
+	PORT_IRQ_ERROR___2 = 2025848912LL,
+	DEF_PORT_IRQ___2 = 2025848959LL,
+	PORT_CMD_ASP = 134217728LL,
+	PORT_CMD_ALPE = 67108864LL,
+	PORT_CMD_ATAPI = 16777216LL,
+	PORT_CMD_FBSCP = 4194304LL,
+	PORT_CMD_ESP = 2097152LL,
+	PORT_CMD_HPCP = 262144LL,
+	PORT_CMD_PMP = 131072LL,
+	PORT_CMD_LIST_ON = 32768LL,
+	PORT_CMD_FIS_ON = 16384LL,
+	PORT_CMD_FIS_RX = 16LL,
+	PORT_CMD_CLO = 8LL,
+	PORT_CMD_POWER_ON = 4LL,
+	PORT_CMD_SPIN_UP = 2LL,
+	PORT_CMD_START = 1LL,
+	PORT_CMD_ICC_MASK = -268435456LL,
+	PORT_CMD_ICC_ACTIVE = 268435456LL,
+	PORT_CMD_ICC_PARTIAL = 536870912LL,
+	PORT_CMD_ICC_SLUMBER = 1610612736LL,
+	PORT_FBS_DWE_OFFSET = 16LL,
+	PORT_FBS_ADO_OFFSET = 12LL,
+	PORT_FBS_DEV_OFFSET = 8LL,
+	PORT_FBS_DEV_MASK = 3840LL,
+	PORT_FBS_SDE = 4LL,
+	PORT_FBS_DEC = 2LL,
+	PORT_FBS_EN = 1LL,
+	PORT_DEVSLP_DM_OFFSET = 25LL,
+	PORT_DEVSLP_DM_MASK = 503316480LL,
+	PORT_DEVSLP_DITO_OFFSET = 15LL,
+	PORT_DEVSLP_MDAT_OFFSET = 10LL,
+	PORT_DEVSLP_DETO_OFFSET = 2LL,
+	PORT_DEVSLP_DSP = 2LL,
+	PORT_DEVSLP_ADSE = 1LL,
+	AHCI_HFLAG_NO_NCQ = 1LL,
+	AHCI_HFLAG_IGN_IRQ_IF_ERR = 2LL,
+	AHCI_HFLAG_IGN_SERR_INTERNAL = 4LL,
+	AHCI_HFLAG_32BIT_ONLY = 8LL,
+	AHCI_HFLAG_MV_PATA = 16LL,
+	AHCI_HFLAG_NO_MSI = 32LL,
+	AHCI_HFLAG_NO_PMP = 64LL,
+	AHCI_HFLAG_SECT255 = 256LL,
+	AHCI_HFLAG_YES_NCQ = 512LL,
+	AHCI_HFLAG_NO_SUSPEND = 1024LL,
+	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048LL,
+	AHCI_HFLAG_NO_SNTF = 4096LL,
+	AHCI_HFLAG_NO_FPDMA_AA = 8192LL,
+	AHCI_HFLAG_YES_FBS = 16384LL,
+	AHCI_HFLAG_DELAY_ENGINE = 32768LL,
+	AHCI_HFLAG_NO_DEVSLP = 131072LL,
+	AHCI_HFLAG_NO_FBS = 262144LL,
+	AHCI_HFLAG_MULTI_MSI = 1048576LL,
+	AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304LL,
+	AHCI_HFLAG_YES_ALPM = 8388608LL,
+	AHCI_HFLAG_NO_WRITE_TO_RO = 16777216LL,
+	AHCI_HFLAG_USE_LPM_POLICY = 33554432LL,
+	AHCI_HFLAG_SUSPEND_PHYS = 67108864LL,
+	AHCI_HFLAG_NO_SXS = 268435456LL,
+	AHCI_FLAG_COMMON = 393346LL,
+	ICH_MAP = 144LL,
+	PCS_6 = 146LL,
+	PCS_7 = 148LL,
+	EM_MAX_SLOTS = 8LL,
+	EM_MAX_RETRY = 5LL,
+	EM_CTL_RST = 512LL,
+	EM_CTL_TM = 256LL,
+	EM_CTL_MR = 1LL,
+	EM_CTL_ALHD = 67108864LL,
+	EM_CTL_XMT = 33554432LL,
+	EM_CTL_SMB = 16777216LL,
+	EM_CTL_SGPIO = 524288LL,
+	EM_CTL_SES = 262144LL,
+	EM_CTL_SAFTE = 131072LL,
+	EM_CTL_LED = 65536LL,
+	EM_MSG_TYPE_LED = 1LL,
+	EM_MSG_TYPE_SAFTE = 2LL,
+	EM_MSG_TYPE_SES2 = 4LL,
+	EM_MSG_TYPE_SGPIO = 8LL,
+};
+
+struct ahci_cmd_hdr {
+	__le32 opts;
+	__le32 status;
+	__le32 tbl_addr;
+	__le32 tbl_addr_hi;
+	__le32 reserved[4];
+};
+
+struct ahci_em_priv {
+	enum sw_activity blink_policy;
+	struct timer_list timer;
+	long unsigned int saved_activity;
+	long unsigned int activity;
+	long unsigned int led_state;
+	struct ata_link *link;
+};
+
+struct ahci_port_priv {
+	struct ata_link *active_link;
+	struct ahci_cmd_hdr *cmd_slot;
+	dma_addr_t cmd_slot_dma;
+	void *cmd_tbl;
+	dma_addr_t cmd_tbl_dma;
+	void *rx_fis;
+	dma_addr_t rx_fis_dma;
+	unsigned int ncq_saw_d2h: 1;
+	unsigned int ncq_saw_dmas: 1;
+	unsigned int ncq_saw_sdb: 1;
+	spinlock_t lock;
+	u32 intr_mask;
+	bool fbs_supported;
+	bool fbs_enabled;
+	int fbs_last_dev;
+	struct ahci_em_priv em_priv[8];
+	char *irq_desc;
+};
+
+struct ahci_host_priv {
+	unsigned int flags;
+	u32 force_port_map;
+	u32 mask_port_map;
+	void *mmio;
+	u32 cap;
+	u32 cap2;
+	u32 version;
+	u32 port_map;
+	u32 saved_cap;
+	u32 saved_cap2;
+	u32 saved_port_map;
+	u32 em_loc;
+	u32 em_buf_sz;
+	u32 em_msg_type;
+	u32 remapped_nvme;
+	bool got_runtime_pm;
+	struct clk *clks[5];
+	struct reset_control *rsts;
+	struct regulator **target_pwrs;
+	struct regulator *ahci_regulator;
+	struct regulator *phy_regulator;
+	struct phy___2 **phys;
+	unsigned int nports;
+	void *plat_data;
 	unsigned int irq;
-	unsigned int slave_addr;
-	enum ipmi_addr_src addr_source;
-};
-
-enum si_type {
-	SI_TYPE_INVALID = 0,
-	SI_KCS = 1,
-	SI_SMIC = 2,
-	SI_BT = 3,
-};
-
-enum ipmi_addr_space {
-	IPMI_IO_ADDR_SPACE = 0,
-	IPMI_MEM_ADDR_SPACE = 1,
-};
-
-struct clk_bulk_data {
-	const char *id;
-	struct clk *clk;
-};
-
-struct clk_bulk_devres {
-	struct clk_bulk_data *clks;
-	int num_clks;
-};
-
-struct clk_hw;
-
-struct clk_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct clk *clk;
-	struct clk_hw *clk_hw;
-};
-
-struct clk_core;
-
-struct clk_init_data;
-
-struct clk_hw {
-	struct clk_core *core;
-	struct clk *clk;
-	const struct clk_init_data *init;
-};
-
-struct clk_rate_request {
-	long unsigned int rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int best_parent_rate;
-	struct clk_hw *best_parent_hw;
-};
-
-struct clk_duty {
-	unsigned int num;
-	unsigned int den;
-};
-
-struct clk_ops {
-	int (*prepare)(struct clk_hw *);
-	void (*unprepare)(struct clk_hw *);
-	int (*is_prepared)(struct clk_hw *);
-	void (*unprepare_unused)(struct clk_hw *);
-	int (*enable)(struct clk_hw *);
-	void (*disable)(struct clk_hw *);
-	int (*is_enabled)(struct clk_hw *);
-	void (*disable_unused)(struct clk_hw *);
-	int (*save_context)(struct clk_hw *);
-	void (*restore_context)(struct clk_hw *);
-	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
-	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
-	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
-	int (*set_parent)(struct clk_hw *, u8);
-	u8 (*get_parent)(struct clk_hw *);
-	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
-	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
-	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
-	int (*get_phase)(struct clk_hw *);
-	int (*set_phase)(struct clk_hw *, int);
-	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*init)(struct clk_hw *);
-	void (*terminate)(struct clk_hw *);
-	void (*debug_init)(struct clk_hw *, struct dentry *);
-};
-
-struct clk_parent_data {
-	const struct clk_hw *hw;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct clk_init_data {
-	const char *name;
-	const struct clk_ops *ops;
-	const char * const *parent_names;
-	const struct clk_parent_data *parent_data;
-	const struct clk_hw **parent_hws;
-	u8 num_parents;
-	long unsigned int flags;
-};
-
-struct clk_lookup_alloc {
-	struct clk_lookup cl;
-	char dev_id[20];
-	char con_id[16];
-};
-
-struct clk_notifier {
-	struct clk *clk;
-	struct srcu_notifier_head notifier_head;
-	struct list_head node;
-};
-
-struct clk {
-	struct clk_core *core;
-	struct device *dev;
-	const char *dev_id;
-	const char *con_id;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	unsigned int exclusive_count;
-	struct hlist_node clks_node;
-};
-
-struct clk_notifier_data {
-	struct clk *clk;
-	long unsigned int old_rate;
-	long unsigned int new_rate;
-};
-
-struct clk_parent_map;
-
-struct clk_core {
-	const char *name;
-	const struct clk_ops *ops;
-	struct clk_hw *hw;
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct clk_core *parent;
-	struct clk_parent_map *parents;
-	u8 num_parents;
-	u8 new_parent_index;
-	long unsigned int rate;
-	long unsigned int req_rate;
-	long unsigned int new_rate;
-	struct clk_core *new_parent;
-	struct clk_core *new_child;
-	long unsigned int flags;
-	bool orphan;
-	bool rpm_enabled;
-	unsigned int enable_count;
-	unsigned int prepare_count;
-	unsigned int protect_count;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int accuracy;
-	int phase;
-	struct clk_duty duty;
-	struct hlist_head children;
-	struct hlist_node child_node;
-	struct hlist_head clks;
-	unsigned int notifier_count;
-	struct dentry *dentry;
-	struct hlist_node debug_node;
-	struct kref ref;
-};
-
-struct clk_onecell_data {
-	struct clk **clks;
-	unsigned int clk_num;
-};
-
-struct clk_hw_onecell_data {
-	unsigned int num;
-	struct clk_hw *hws[0];
-};
-
-struct clk_parent_map {
-	const struct clk_hw *hw;
-	struct clk_core *core;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct trace_event_raw_clk {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_rate {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int rate;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_parent {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_pname;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_phase {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int phase;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_duty_cycle {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int num;
-	unsigned int den;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_clk {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_rate {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_parent {
-	u32 name;
-	u32 pname;
-};
-
-struct trace_event_data_offsets_clk_phase {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_duty_cycle {
-	u32 name;
-};
-
-typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
-
-typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
-
-struct of_clk_provider {
-	struct list_head link;
-	struct device_node *node;
-	struct clk * (*get)(struct of_phandle_args *, void *);
-	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
-	void *data;
-};
-
-struct clock_provider {
-	void (*clk_init_cb)(struct device_node *);
-	struct device_node *np;
-	struct list_head node;
-};
-
-struct clk_div_table {
-	unsigned int val;
-	unsigned int div;
-};
-
-struct clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-typedef void (*of_init_fn_1)(struct device_node *);
-
-struct clk_fixed_factor {
-	struct clk_hw hw;
-	unsigned int mult;
-	unsigned int div;
-};
-
-struct clk_fixed_rate {
-	struct clk_hw hw;
-	long unsigned int fixed_rate;
-	long unsigned int fixed_accuracy;
-	long unsigned int flags;
-};
-
-struct clk_gate {
-	struct clk_hw hw;
-	void *reg;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_multiplier {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_mux {
-	struct clk_hw hw;
-	void *reg;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_composite {
-	struct clk_hw hw;
-	struct clk_ops ops;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *rate_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct clk_fractional_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 mshift;
-	u8 mwidth;
-	u32 mmask;
-	u8 nshift;
-	u8 nwidth;
-	u32 nmask;
-	u8 flags;
-	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
-	spinlock_t *lock;
-};
-
-struct clk_gpio {
-	struct clk_hw hw;
-	struct gpio_desc *gpiod;
-};
-
-struct soc_device_attribute {
-	const char *machine;
-	const char *family;
-	const char *revision;
-	const char *serial_number;
-	const char *soc_id;
-	const void *data;
-	const struct attribute_group *custom_attr_group;
-};
-
-struct ccsr_guts {
-	u32 porpllsr;
-	u32 porbmsr;
-	u32 porimpscr;
-	u32 pordevsr;
-	u32 pordbgmsr;
-	u32 pordevsr2;
-	u8 res018[8];
-	u32 porcir;
-	u8 res024[12];
-	u32 gpiocr;
-	u8 res034[12];
-	u32 gpoutdr;
-	u8 res044[12];
-	u32 gpindr;
-	u8 res054[12];
-	u32 pmuxcr;
-	u32 pmuxcr2;
-	u32 dmuxcr;
-	u8 res06c[4];
-	u32 devdisr;
-	u32 devdisr2;
-	u8 res078[4];
-	u32 pmjcr;
-	u32 powmgtcsr;
-	u32 pmrccr;
-	u32 pmpdccr;
-	u32 pmcdr;
-	u32 mcpsumr;
-	u32 rstrscr;
-	u32 ectrstcr;
-	u32 autorstsr;
-	u32 pvr;
-	u32 svr;
-	u8 res0a8[8];
-	u32 rstcr;
-	u8 res0b4[12];
-	u32 iovselsr;
-	u8 res0c4[60];
-	u32 rcwsr[16];
-	u8 res140[228];
-	u32 iodelay1;
-	u32 iodelay2;
-	u8 res22c[984];
-	u32 pamubypenr;
-	u8 res608[504];
-	u32 clkdvdr;
-	u8 res804[252];
-	u32 ircr;
-	u8 res904[4];
-	u32 dmacr;
-	u8 res90c[8];
-	u32 elbccr;
-	u8 res918[520];
-	u32 ddr1clkdr;
-	u32 ddr2clkdr;
-	u32 ddrclkdr;
-	u8 resb2c[724];
-	u32 clkocr;
-	u8 rese04[12];
-	u32 ddrdllcr;
-	u8 rese14[12];
-	u32 lbcdllcr;
-	u32 cpfor;
-	u8 rese28[220];
-	u32 srds1cr0;
-	u32 srds1cr1;
-	u8 resf0c[32];
-	u32 itcr;
-	u8 resf30[16];
-	u32 srds2cr0;
-	u32 srds2cr1;
-};
-
-struct guts {
-	struct ccsr_guts *regs;
-	bool little_endian;
-};
-
-struct fsl_soc_die_attr {
-	char *die;
-	u32 svr;
-	u32 mask;
-};
-
-struct soc_device;
-
-struct ww_class {
-	atomic_long_t stamp;
-	struct lock_class_key acquire_key;
-	struct lock_class_key mutex_key;
-	const char *acquire_name;
-	const char *mutex_name;
-	unsigned int is_wait_die;
-};
-
-struct regulator_state {
-	int uV;
-	int min_uV;
-	int max_uV;
-	unsigned int mode;
-	int enabled;
-	bool changeable;
-};
-
-struct regulation_constraints {
-	const char *name;
-	int min_uV;
-	int max_uV;
-	int uV_offset;
-	int min_uA;
-	int max_uA;
-	int ilim_uA;
-	int system_load;
-	u32 *max_spread;
-	int max_uV_step;
-	unsigned int valid_modes_mask;
-	unsigned int valid_ops_mask;
-	int input_uV;
-	struct regulator_state state_disk;
-	struct regulator_state state_mem;
-	struct regulator_state state_standby;
-	suspend_state_t initial_state;
-	unsigned int initial_mode;
-	unsigned int ramp_delay;
-	unsigned int settling_time;
-	unsigned int settling_time_up;
-	unsigned int settling_time_down;
-	unsigned int enable_time;
-	unsigned int active_discharge;
-	unsigned int always_on: 1;
-	unsigned int boot_on: 1;
-	unsigned int apply_uV: 1;
-	unsigned int ramp_disable: 1;
-	unsigned int soft_start: 1;
-	unsigned int pull_down: 1;
-	unsigned int over_current_protection: 1;
-};
-
-struct regulator_consumer_supply;
-
-struct regulator_init_data {
-	const char *supply_regulator;
-	struct regulation_constraints constraints;
-	int num_consumer_supplies;
-	struct regulator_consumer_supply *consumer_supplies;
-	int (*regulator_init)(void *);
-	void *driver_data;
-};
-
-enum regulator_type {
-	REGULATOR_VOLTAGE = 0,
-	REGULATOR_CURRENT = 1,
-};
-
-struct regulator_config;
-
-struct regulator_ops;
-
-struct regulator_desc {
-	const char *name;
-	const char *supply_name;
-	const char *of_match;
-	const char *regulators_node;
-	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
-	int id;
-	unsigned int continuous_voltage_range: 1;
-	unsigned int n_voltages;
-	unsigned int n_current_limits;
-	const struct regulator_ops *ops;
-	int irq;
-	enum regulator_type type;
-	struct module *owner;
-	unsigned int min_uV;
-	unsigned int uV_step;
-	unsigned int linear_min_sel;
-	int fixed_uV;
-	unsigned int ramp_delay;
-	int min_dropout_uV;
-	const struct linear_range *linear_ranges;
-	const unsigned int *linear_range_selectors;
-	int n_linear_ranges;
-	const unsigned int *volt_table;
-	const unsigned int *curr_table;
-	unsigned int vsel_range_reg;
-	unsigned int vsel_range_mask;
-	unsigned int vsel_reg;
-	unsigned int vsel_mask;
-	unsigned int vsel_step;
-	unsigned int csel_reg;
-	unsigned int csel_mask;
-	unsigned int apply_reg;
-	unsigned int apply_bit;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	unsigned int enable_val;
-	unsigned int disable_val;
-	bool enable_is_inverted;
-	unsigned int bypass_reg;
-	unsigned int bypass_mask;
-	unsigned int bypass_val_on;
-	unsigned int bypass_val_off;
-	unsigned int active_discharge_on;
-	unsigned int active_discharge_off;
-	unsigned int active_discharge_mask;
-	unsigned int active_discharge_reg;
-	unsigned int soft_start_reg;
-	unsigned int soft_start_mask;
-	unsigned int soft_start_val_on;
-	unsigned int pull_down_reg;
-	unsigned int pull_down_mask;
-	unsigned int pull_down_val_on;
-	unsigned int enable_time;
-	unsigned int off_on_delay;
-	unsigned int poll_enabled_time;
-	unsigned int (*of_map_mode)(unsigned int);
-};
-
-struct pre_voltage_change_data {
-	long unsigned int old_uV;
-	long unsigned int min_uV;
-	long unsigned int max_uV;
-};
-
-struct regulator_bulk_data {
-	const char *supply;
-	struct regulator *consumer;
-	int ret;
-};
-
-struct regulator_voltage {
-	int min_uV;
-	int max_uV;
-};
-
-struct regulator_dev;
-
-struct regulator {
-	struct device *dev;
-	struct list_head list;
-	unsigned int always_on: 1;
-	unsigned int bypass: 1;
-	unsigned int device_link: 1;
-	int uA_load;
-	unsigned int enable_count;
-	unsigned int deferred_disables;
-	struct regulator_voltage voltage[5];
-	const char *supply_name;
-	struct device_attribute dev_attr;
-	struct regulator_dev *rdev;
-	struct dentry *debugfs;
-};
-
-struct regulator_coupler {
-	struct list_head list;
-	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
-};
-
-struct coupling_desc {
-	struct regulator_dev **coupled_rdevs;
-	struct regulator_coupler *coupler;
-	int n_resolved;
-	int n_coupled;
-};
-
-struct regmap;
-
-struct regulator_enable_gpio;
-
-struct regulator_dev {
-	const struct regulator_desc *desc;
-	int exclusive;
-	u32 use_count;
-	u32 open_count;
-	u32 bypass_count;
-	struct list_head list;
-	struct list_head consumer_list;
-	struct coupling_desc coupling_desc;
-	struct blocking_notifier_head notifier;
-	struct ww_mutex mutex;
-	struct task_struct *mutex_owner;
-	int ref_cnt;
-	struct module *owner;
-	struct device dev;
-	struct regulation_constraints *constraints;
-	struct regulator *supply;
-	const char *supply_name;
-	struct regmap *regmap;
-	struct delayed_work disable_work;
-	void *reg_data;
-	struct dentry *debugfs;
-	struct regulator_enable_gpio *ena_pin;
-	unsigned int ena_gpio_state: 1;
-	unsigned int is_switch: 1;
-	long unsigned int last_off_jiffy;
-};
-
-enum regulator_status {
-	REGULATOR_STATUS_OFF = 0,
-	REGULATOR_STATUS_ON = 1,
-	REGULATOR_STATUS_ERROR = 2,
-	REGULATOR_STATUS_FAST = 3,
-	REGULATOR_STATUS_NORMAL = 4,
-	REGULATOR_STATUS_IDLE = 5,
-	REGULATOR_STATUS_STANDBY = 6,
-	REGULATOR_STATUS_BYPASS = 7,
-	REGULATOR_STATUS_UNDEFINED = 8,
-};
-
-struct regulator_ops {
-	int (*list_voltage)(struct regulator_dev *, unsigned int);
-	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
-	int (*map_voltage)(struct regulator_dev *, int, int);
-	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
-	int (*get_voltage)(struct regulator_dev *);
-	int (*get_voltage_sel)(struct regulator_dev *);
-	int (*set_current_limit)(struct regulator_dev *, int, int);
-	int (*get_current_limit)(struct regulator_dev *);
-	int (*set_input_current_limit)(struct regulator_dev *, int);
-	int (*set_over_current_protection)(struct regulator_dev *);
-	int (*set_active_discharge)(struct regulator_dev *, bool);
-	int (*enable)(struct regulator_dev *);
-	int (*disable)(struct regulator_dev *);
-	int (*is_enabled)(struct regulator_dev *);
-	int (*set_mode)(struct regulator_dev *, unsigned int);
-	unsigned int (*get_mode)(struct regulator_dev *);
-	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
-	int (*enable_time)(struct regulator_dev *);
-	int (*set_ramp_delay)(struct regulator_dev *, int);
-	int (*set_voltage_time)(struct regulator_dev *, int, int);
-	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
-	int (*set_soft_start)(struct regulator_dev *);
-	int (*get_status)(struct regulator_dev *);
-	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
-	int (*set_load)(struct regulator_dev *, int);
-	int (*set_bypass)(struct regulator_dev *, bool);
-	int (*get_bypass)(struct regulator_dev *, bool *);
-	int (*set_suspend_voltage)(struct regulator_dev *, int);
-	int (*set_suspend_enable)(struct regulator_dev *);
-	int (*set_suspend_disable)(struct regulator_dev *);
-	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
-	int (*resume)(struct regulator_dev *);
-	int (*set_pull_down)(struct regulator_dev *);
-};
-
-struct regulator_config {
-	struct device *dev;
-	const struct regulator_init_data *init_data;
-	void *driver_data;
-	struct device_node *of_node;
-	struct regmap *regmap;
-	struct gpio_desc *ena_gpiod;
-};
-
-struct regulator_enable_gpio {
-	struct list_head list;
-	struct gpio_desc *gpiod;
-	u32 enable_count;
-	u32 request_count;
-};
-
-enum regulator_active_discharge {
-	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
-	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
-	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
-};
-
-struct regulator_consumer_supply {
-	const char *dev_name;
-	const char *supply;
-};
-
-struct trace_event_raw_regulator_basic {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_range {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int min;
-	int max;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_value {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regulator_basic {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_range {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_value {
-	u32 name;
-};
-
-typedef void (*btf_trace_regulator_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
-
-typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
-
-enum regulator_get_type {
-	NORMAL_GET = 0,
-	EXCLUSIVE_GET = 1,
-	OPTIONAL_GET = 2,
-	MAX_GET_TYPE = 3,
-};
-
-struct regulator_map {
-	struct list_head list;
-	const char *dev_name;
-	const char *supply;
-	struct regulator_dev *regulator;
-};
-
-struct regulator_supply_alias {
-	struct list_head list;
-	struct device *src_dev;
-	const char *src_supply;
-	struct device *alias_dev;
-	const char *alias_supply;
-};
-
-struct summary_data {
-	struct seq_file *s;
-	struct regulator_dev *parent;
-	int level;
-};
-
-struct summary_lock_data {
-	struct ww_acquire_ctx *ww_ctx;
-	struct regulator_dev **new_contended_rdev;
-	struct regulator_dev **old_contended_rdev;
-};
-
-struct fixed_voltage_config {
-	const char *supply_name;
-	const char *input_supply;
-	int microvolts;
-	unsigned int startup_delay;
-	unsigned int off_on_delay;
-	unsigned int enabled_at_boot: 1;
-	struct regulator_init_data *init_data;
-};
-
-struct fixed_regulator_data {
-	struct fixed_voltage_config cfg;
-	struct regulator_init_data init_data;
-	struct platform_device pdev;
-};
-
-struct regulator_bulk_devres {
-	struct regulator_bulk_data *consumers;
-	int num_consumers;
-};
-
-struct regulator_supply_alias_match {
-	struct device *dev;
-	const char *id;
-};
-
-struct regulator_notifier_match {
-	struct regulator *regulator;
-	struct notifier_block *nb;
-};
-
-struct of_regulator_match {
-	const char *name;
-	void *driver_data;
-	struct regulator_init_data *init_data;
-	struct device_node *of_node;
-	const struct regulator_desc *desc;
-};
-
-struct devm_of_regulator_matches {
-	struct of_regulator_match *matches;
-	unsigned int num_matches;
-};
-
-struct serial_struct32 {
-	compat_int_t type;
-	compat_int_t line;
-	compat_uint_t port;
-	compat_int_t irq;
-	compat_int_t flags;
-	compat_int_t xmit_fifo_size;
-	compat_int_t custom_divisor;
-	compat_int_t baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char;
-	compat_int_t hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	compat_uint_t iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	compat_int_t reserved;
-};
-
-struct n_tty_data {
-	size_t read_head;
-	size_t commit_head;
-	size_t canon_head;
-	size_t echo_head;
-	size_t echo_commit;
-	size_t echo_mark;
-	long unsigned int char_map[4];
-	long unsigned int overrun_time;
-	int num_overrun;
-	bool no_room;
-	unsigned char lnext: 1;
-	unsigned char erasing: 1;
-	unsigned char raw: 1;
-	unsigned char real_raw: 1;
-	unsigned char icanon: 1;
-	unsigned char push: 1;
-	char read_buf[4096];
-	long unsigned int read_flags[64];
-	unsigned char echo_buf[4096];
-	size_t read_tail;
-	size_t line_start;
-	unsigned int column;
-	unsigned int canon_column;
-	size_t echo_tail;
-	struct mutex atomic_read_lock;
-	struct mutex output_lock;
+	void (*start_engine)(struct ata_port *);
+	int (*stop_engine)(struct ata_port *);
+	irqreturn_t (*irq_handler)(int, void *);
+	int (*get_irq_vector)(struct ata_host *, int);
 };
 
 enum {
-	ERASE = 0,
-	WERASE = 1,
-	KILL = 2,
+	AHCI_PCI_BAR_STA2X11 = 0,
+	AHCI_PCI_BAR_CAVIUM = 0,
+	AHCI_PCI_BAR_LOONGSON = 0,
+	AHCI_PCI_BAR_ENMOTUS = 2,
+	AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
+	AHCI_PCI_BAR_STANDARD = 5,
 };
 
-struct termios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_cc[19];
-	cc_t c_line;
-	speed_t c_ispeed;
-	speed_t c_ospeed;
+enum board_ids {
+	board_ahci = 0,
+	board_ahci_ign_iferr = 1,
+	board_ahci_low_power = 2,
+	board_ahci_no_debounce_delay = 3,
+	board_ahci_nomsi = 4,
+	board_ahci_noncq = 5,
+	board_ahci_nosntf = 6,
+	board_ahci_yes_fbs = 7,
+	board_ahci_al = 8,
+	board_ahci_avn = 9,
+	board_ahci_mcp65 = 10,
+	board_ahci_mcp77 = 11,
+	board_ahci_mcp89 = 12,
+	board_ahci_mv = 13,
+	board_ahci_sb600 = 14,
+	board_ahci_sb700 = 15,
+	board_ahci_vt8251 = 16,
+	board_ahci_pcs7 = 17,
+	board_ahci_mcp_linux = 10,
+	board_ahci_mcp67 = 10,
+	board_ahci_mcp73 = 10,
+	board_ahci_mcp79 = 11,
 };
 
-struct sgttyb {
-	char sg_ispeed;
-	char sg_ospeed;
-	char sg_erase;
-	char sg_kill;
-	short int sg_flags;
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
 };
 
-struct tchars {
-	char t_intrc;
-	char t_quitc;
-	char t_startc;
-	char t_stopc;
-	char t_eofc;
-	char t_brkc;
+struct trace_event_raw_mdio_access {
+	struct trace_entry ent;
+	char busid[61];
+	char read;
+	u8 addr;
+	u16 val;
+	unsigned int regnum;
+	char __data[0];
 };
 
-struct ltchars {
-	char t_suspc;
-	char t_dsuspc;
-	char t_rprntc;
-	char t_flushc;
-	char t_werasc;
-	char t_lnextc;
+struct trace_event_data_offsets_mdio_access {};
+
+typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
+
+struct mdio_bus_stat_attr {
+	int addr;
+	unsigned int field_offset;
 };
 
-struct termio {
-	short unsigned int c_iflag;
-	short unsigned int c_oflag;
-	short unsigned int c_cflag;
-	short unsigned int c_lflag;
-	unsigned char c_line;
-	unsigned char c_cc[10];
+struct e1000_opt_list {
+	int i;
+	char *str;
 };
 
-struct ldsem_waiter {
+struct e1000_option {
+	enum {
+		enable_option = 0,
+		range_option = 1,
+		list_option = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			struct e1000_opt_list *p;
+		} l;
+	} arg;
+};
+
+struct pcmcia_cfg_mem {
+	struct pcmcia_device *p_dev;
+	int (*conf_check)(struct pcmcia_device *, void *);
+	void *priv_data;
+	cisparse_t parse;
+	cistpl_cftable_entry_t dflt;
+};
+
+struct pcmcia_loop_mem {
+	struct pcmcia_device *p_dev;
+	void *priv_data;
+	int (*loop_tuple)(struct pcmcia_device *, tuple_t *, void *);
+};
+
+struct pcmcia_loop_get {
+	size_t len;
+	cisdata_t **buf;
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+union input_seq_state {
+	struct {
+		short unsigned int pos;
+		bool mutex_acquired;
+	};
+	void *p;
+};
+
+struct input_devres {
+	struct input_dev *input;
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_result {};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct class_compat;
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct stripe {
+	struct dm_dev *dev;
+	sector_t physical_start;
+	atomic_t error_count;
+};
+
+struct stripe_c {
+	uint32_t stripes;
+	int stripes_shift;
+	sector_t stripe_width;
+	uint32_t chunk_size;
+	int chunk_size_shift;
+	struct dm_target *ti;
+	struct work_struct trigger_event;
+	struct stripe stripe[0];
+};
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_ops *ops;
+	int hdrlen;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	unsigned int opidx;
+	u32 op;
+	u16 fam_id;
+	u8 policies: 1;
+	u8 single_op: 1;
+};
+
+struct nf_sockopt_ops {
 	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void *, int *);
+	struct module *owner;
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	long unsigned int rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+enum ip6_defrag_users {
+	IP6_DEFRAG_LOCAL_DELIVER = 0,
+	IP6_DEFRAG_CONNTRACK_IN = 1,
+	__IP6_DEFRAG_CONNTRACK_IN = 65536,
+	IP6_DEFRAG_CONNTRACK_OUT = 65537,
+	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
+	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
+	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
+};
+
+struct frag_queue {
+	struct inet_frag_queue q;
+	int iif;
+	__u16 nhoffset;
+	u8 ecn;
+};
+
+struct unix_domain {
+	struct auth_domain h;
+};
+
+struct ip_map {
+	struct cache_head h;
+	char m_class[8];
+	struct in6_addr m_addr;
+	struct unix_domain *m_client;
+	struct callback_head m_rcu;
+};
+
+struct unix_gid {
+	struct cache_head h;
+	kuid_t uid;
+	struct group_info *gi;
+	struct callback_head rcu;
+};
+
+typedef struct xdr_netobj gssx_buffer;
+
+typedef struct xdr_netobj utf8string;
+
+typedef struct xdr_netobj gssx_OID;
+
+struct gssx_option {
+	gssx_buffer option;
+	gssx_buffer value;
+};
+
+struct gssx_option_array {
+	u32 count;
+	struct gssx_option *data;
+};
+
+struct gssx_status {
+	u64 major_status;
+	gssx_OID mech;
+	u64 minor_status;
+	utf8string major_status_string;
+	utf8string minor_status_string;
+	gssx_buffer server_ctx;
+	struct gssx_option_array options;
+};
+
+struct gssx_call_ctx {
+	utf8string locale;
+	gssx_buffer server_ctx;
+	struct gssx_option_array options;
+};
+
+struct gssx_name_attr {
+	gssx_buffer attr;
+	gssx_buffer value;
+	struct gssx_option_array extensions;
+};
+
+struct gssx_name_attr_array {
+	u32 count;
+	struct gssx_name_attr *data;
+};
+
+struct gssx_name {
+	gssx_buffer display_name;
+};
+
+typedef struct gssx_name gssx_name;
+
+struct gssx_cred_element {
+	gssx_name MN;
+	gssx_OID mech;
+	u32 cred_usage;
+	u64 initiator_time_rec;
+	u64 acceptor_time_rec;
+	struct gssx_option_array options;
+};
+
+struct gssx_cred_element_array {
+	u32 count;
+	struct gssx_cred_element *data;
+};
+
+struct gssx_cred {
+	gssx_name desired_name;
+	struct gssx_cred_element_array elements;
+	gssx_buffer cred_handle_reference;
+	u32 needs_release;
+};
+
+struct gssx_ctx {
+	gssx_buffer exported_context_token;
+	gssx_buffer state;
+	u32 need_release;
+	gssx_OID mech;
+	gssx_name src_name;
+	gssx_name targ_name;
+	u64 lifetime;
+	u64 ctx_flags;
+	u32 locally_initiated;
+	u32 open;
+	struct gssx_option_array options;
+};
+
+struct gssx_cb {
+	u64 initiator_addrtype;
+	gssx_buffer initiator_address;
+	u64 acceptor_addrtype;
+	gssx_buffer acceptor_address;
+	gssx_buffer application_data;
+};
+
+struct gssx_arg_accept_sec_context {
+	struct gssx_call_ctx call_ctx;
+	struct gssx_ctx *context_handle;
+	struct gssx_cred *cred_handle;
+	struct gssp_in_token input_token;
+	struct gssx_cb *input_cb;
+	u32 ret_deleg_cred;
+	struct gssx_option_array options;
+	struct page **pages;
+	unsigned int npages;
+};
+
+struct gssx_res_accept_sec_context {
+	struct gssx_status status;
+	struct gssx_ctx *context_handle;
+	gssx_buffer *output_token;
+	struct gssx_option_array options;
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long int id;
+	long unsigned int args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long int id;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
+
+enum pgtable_index {
+	PTE_INDEX = 0,
+	PMD_INDEX = 1,
+	PUD_INDEX = 2,
+	PGD_INDEX = 3,
+	HTLB_16M_INDEX = 4,
+	HTLB_16G_INDEX = 5,
+};
+
+struct xive_irq_data {
+	u64 flags;
+	u64 eoi_page;
+	void *eoi_mmio;
+	u64 trig_page;
+	void *trig_mmio;
+	u32 esb_shift;
+	int src_chip;
+	u32 hw_irq;
+	int target;
+	bool saved_p;
+	bool stale_p;
+};
+
+struct xive_q {
+	__be32 *qpage;
+	u32 msk;
+	u32 idx;
+	u32 toggle;
+	u64 eoi_phys;
+	u32 esc_irq;
+	atomic_t count;
+	atomic_t pending_count;
+	u64 guest_qaddr;
+	u32 guest_qshift;
+};
+
+struct xive_cpu {
+	u32 hw_ipi;
+	struct xive_irq_data ipi_data;
+	int chip_id;
+	struct xive_q queue[8];
+	u8 pending_prio;
+	u8 cppr;
+};
+
+struct xive_ops {
+	int (*populate_irq_data)(u32, struct xive_irq_data *);
+	int (*configure_irq)(u32, u32, u8, u32);
+	int (*get_irq_config)(u32, u32 *, u8 *, u32 *);
+	int (*setup_queue)(unsigned int, struct xive_cpu *, u8);
+	void (*cleanup_queue)(unsigned int, struct xive_cpu *, u8);
+	void (*prepare_cpu)(unsigned int, struct xive_cpu *);
+	void (*setup_cpu)(unsigned int, struct xive_cpu *);
+	void (*teardown_cpu)(unsigned int, struct xive_cpu *);
+	bool (*match)(struct device_node *);
+	void (*shutdown)();
+	void (*update_pending)(struct xive_cpu *);
+	void (*sync_source)(u32);
+	u64 (*esb_rw)(u32, u32, u64, bool);
+	int (*get_ipi)(unsigned int, struct xive_cpu *);
+	void (*put_ipi)(unsigned int, struct xive_cpu *);
+	int (*debug_show)(struct seq_file *, void *);
+	int (*debug_create)(struct dentry *);
+	const char *name;
+};
+
+struct xive_ipi_desc {
+	unsigned int irq;
+	char name[16];
+	atomic_t started;
+};
+
+struct xive_ipi_alloc_info {
+	irq_hw_number_t hwirq;
+};
+
+struct memcons {
+	__be64 magic;
+	__be64 obuf_phys;
+	__be64 ibuf_phys;
+	__be32 obuf_size;
+	__be32 ibuf_size;
+	__be32 out_pos;
+	__be32 in_prod;
+	__be32 in_cons;
+};
+
+struct pseries_mc_errorlog {
+	__be32 fru_id;
+	__be32 proc_id;
+	u8 error_type;
+	u8 sub_err_type;
+	u8 reserved_1[6];
+	__be64 effective_address;
+	__be64 logical_address;
+};
+
+struct epow_errorlog {
+	unsigned char sensor_value;
+	unsigned char event_modifier;
+	unsigned char extended_modifier;
+	unsigned char reserved;
+	unsigned char platform_reason;
+};
+
+struct powerpc64_jit_data {
+	struct bpf_binary_header *header;
+	u32 *addrs;
+	u8 *image;
+	u32 proglen;
+	struct codegen_context ctx;
+};
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = -1,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART = 2,
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+enum {
+	IRQ_STARTUP_NORMAL = 0,
+	IRQ_STARTUP_MANAGED = 1,
+	IRQ_STARTUP_ABORT = 2,
+};
+
+struct profile_hit {
+	u32 pc;
+	u32 hits;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+struct cfd_percpu {
+	call_single_data_t csd;
+};
+
+struct call_function_data {
+	struct cfd_percpu *pcpu;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+enum {
+	TASKSTATS_TYPE_UNSPEC = 0,
+	TASKSTATS_TYPE_PID = 1,
+	TASKSTATS_TYPE_TGID = 2,
+	TASKSTATS_TYPE_STATS = 3,
+	TASKSTATS_TYPE_AGGR_PID = 4,
+	TASKSTATS_TYPE_AGGR_TGID = 5,
+	TASKSTATS_TYPE_NULL = 6,
+	__TASKSTATS_TYPE_MAX = 7,
+};
+
+enum {
+	TASKSTATS_CMD_ATTR_UNSPEC = 0,
+	TASKSTATS_CMD_ATTR_PID = 1,
+	TASKSTATS_CMD_ATTR_TGID = 2,
+	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
+	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
+	__TASKSTATS_CMD_ATTR_MAX = 5,
+};
+
+enum {
+	CGROUPSTATS_CMD_UNSPEC = 3,
+	CGROUPSTATS_CMD_GET = 4,
+	CGROUPSTATS_CMD_NEW = 5,
+	__CGROUPSTATS_CMD_MAX = 6,
+};
+
+enum {
+	CGROUPSTATS_TYPE_UNSPEC = 0,
+	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
+	__CGROUPSTATS_TYPE_MAX = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+	CGROUPSTATS_CMD_ATTR_FD = 1,
+	__CGROUPSTATS_CMD_ATTR_MAX = 2,
+};
+
+struct listener {
+	struct list_head list;
+	pid_t pid;
+	char valid;
+};
+
+struct listener_list {
+	struct rw_semaphore sem;
+	struct list_head list;
+};
+
+enum actions {
+	REGISTER = 0,
+	DEREGISTER = 1,
+	CPU_DONT_CARE = 2,
+};
+
+enum blktrace_cat {
+	BLK_TC_READ = 1,
+	BLK_TC_WRITE = 2,
+	BLK_TC_FLUSH = 4,
+	BLK_TC_SYNC = 8,
+	BLK_TC_SYNCIO = 8,
+	BLK_TC_QUEUE = 16,
+	BLK_TC_REQUEUE = 32,
+	BLK_TC_ISSUE = 64,
+	BLK_TC_COMPLETE = 128,
+	BLK_TC_FS = 256,
+	BLK_TC_PC = 512,
+	BLK_TC_NOTIFY = 1024,
+	BLK_TC_AHEAD = 2048,
+	BLK_TC_META = 4096,
+	BLK_TC_DISCARD = 8192,
+	BLK_TC_DRV_DATA = 16384,
+	BLK_TC_FUA = 32768,
+	BLK_TC_END = 32768,
+};
+
+enum blktrace_notify {
+	__BLK_TN_PROCESS = 0,
+	__BLK_TN_TIMESTAMP = 1,
+	__BLK_TN_MESSAGE = 2,
+	__BLK_TN_CGROUP = 256,
+};
+
+struct blk_io_trace {
+	__u32 magic;
+	__u32 sequence;
+	__u64 time;
+	__u64 sector;
+	__u32 bytes;
+	__u32 action;
+	__u32 pid;
+	__u32 device;
+	__u32 cpu;
+	__u16 error;
+	__u16 pdu_len;
+};
+
+struct blk_io_trace_remap {
+	__be32 device_from;
+	__be32 device_to;
+	__be64 sector_from;
+};
+
+enum {
+	Blktrace_setup = 1,
+	Blktrace_running = 2,
+	Blktrace_stopped = 3,
+};
+
+struct blk_user_trace_setup {
+	char name[32];
+	__u16 act_mask;
+	__u32 buf_size;
+	__u32 buf_nr;
+	__u64 start_lba;
+	__u64 end_lba;
+	__u32 pid;
+};
+
+typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
+
+struct bpf_event_entry {
+	struct perf_event *event;
+	struct file *perf_file;
+	struct file *map_file;
+	struct callback_head rcu;
+};
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+struct static_key_mod {
+	struct static_key_mod *next;
+	struct jump_entry *entries;
+	struct module *mod;
+};
+
+struct static_key_deferred {
+	struct static_key key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	long unsigned int reclaimable;
+	long unsigned int available;
+	long unsigned int min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_mark_victim {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, int);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+struct zap_details;
+
+struct vma_swap_readahead {
+	short unsigned int win;
+	short unsigned int offset;
+	short unsigned int nr_pte;
+	pte_t *ptes;
+};
+
+struct swap_cgroup_ctrl {
+	struct page **map;
+	long unsigned int length;
+	spinlock_t lock;
+};
+
+struct swap_cgroup {
+	short unsigned int id;
+};
+
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+};
+
+enum umount_tree_flags {
+	UMOUNT_SYNC = 1,
+	UMOUNT_PROPAGATE = 2,
+	UMOUNT_CONNECTED = 4,
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+enum resctrl_conf_type {
+	CDP_NONE = 0,
+	CDP_CODE = 1,
+	CDP_DATA = 2,
+};
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	long unsigned int start;
+	long unsigned int end;
+	fmode_t mode;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
 	struct task_struct *task;
 };
 
-struct pts_fs_info___2;
-
-struct tty_audit_buf {
-	struct mutex mutex;
-	dev_t dev;
-	unsigned int icanon: 1;
-	size_t valid;
-	unsigned char *data;
+struct fname {
+	__u32 hash;
+	__u32 minor_hash;
+	struct rb_node rb_hash;
+	struct fname *next;
+	__u32 inode;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
 };
 
-struct input_device_id {
-	kernel_ulong_t flags;
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-	kernel_ulong_t evbit[1];
-	kernel_ulong_t keybit[12];
-	kernel_ulong_t relbit[1];
-	kernel_ulong_t absbit[1];
-	kernel_ulong_t mscbit[1];
-	kernel_ulong_t ledbit[1];
-	kernel_ulong_t sndbit[1];
-	kernel_ulong_t ffbit[2];
-	kernel_ulong_t swbit[1];
-	kernel_ulong_t propbit[1];
-	kernel_ulong_t driver_info;
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT = 1,
+	STEP_VERITY = 2,
+	STEP_MAX = 3,
 };
 
-struct input_id {
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
 };
 
-struct input_absinfo {
-	__s32 value;
-	__s32 minimum;
-	__s32 maximum;
-	__s32 fuzz;
-	__s32 flat;
-	__s32 resolution;
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext4_acl_entry;
+
+typedef struct {
+	__le32 a_version;
+} ext4_acl_header;
+
+struct __fat_dirent {
+	long int d_ino;
+	__kernel_off_t d_off;
+	short unsigned int d_reclen;
+	char d_name[256];
 };
 
-struct input_keymap_entry {
-	__u8 flags;
-	__u8 len;
-	__u16 index;
-	__u32 keycode;
-	__u8 scancode[32];
+struct msdos_dir_slot {
+	__u8 id;
+	__u8 name0_4[10];
+	__u8 attr;
+	__u8 reserved;
+	__u8 alias_checksum;
+	__u8 name5_10[12];
+	__le16 start;
+	__u8 name11_12[4];
 };
 
-struct ff_replay {
-	__u16 length;
-	__u16 delay;
+enum {
+	PARSE_INVALID = 1,
+	PARSE_NOT_LONGNAME = 2,
+	PARSE_EOF = 3,
 };
 
-struct ff_trigger {
-	__u16 button;
-	__u16 interval;
+struct fat_ioctl_filldir_callback {
+	struct dir_context ctx;
+	void *dirent;
+	int result;
+	const char *longname;
+	int long_len;
+	const char *shortname;
+	int short_len;
 };
 
-struct ff_envelope {
-	__u16 attack_length;
-	__u16 attack_level;
-	__u16 fade_length;
-	__u16 fade_level;
+struct nfs_find_desc {
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
 };
 
-struct ff_constant_effect {
-	__s16 level;
-	struct ff_envelope envelope;
+enum nfs3_createmode {
+	NFS3_CREATE_UNCHECKED = 0,
+	NFS3_CREATE_GUARDED = 1,
+	NFS3_CREATE_EXCLUSIVE = 2,
 };
 
-struct ff_ramp_effect {
-	__s16 start_level;
-	__s16 end_level;
-	struct ff_envelope envelope;
+enum nfs3_ftype {
+	NF3NON = 0,
+	NF3REG = 1,
+	NF3DIR = 2,
+	NF3BLK = 3,
+	NF3CHR = 4,
+	NF3LNK = 5,
+	NF3SOCK = 6,
+	NF3FIFO = 7,
+	NF3BAD = 8,
 };
 
-struct ff_condition_effect {
-	__u16 right_saturation;
-	__u16 left_saturation;
-	__s16 right_coeff;
-	__s16 left_coeff;
-	__u16 deadband;
-	__s16 center;
+struct nfs3_sattrargs {
+	struct nfs_fh *fh;
+	struct iattr *sattr;
+	unsigned int guard;
+	struct timespec64 guardtime;
 };
 
-struct ff_periodic_effect {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	__s16 *custom_data;
+struct nfs3_diropargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
 };
 
-struct ff_rumble_effect {
-	__u16 strong_magnitude;
-	__u16 weak_magnitude;
+struct nfs3_accessargs {
+	struct nfs_fh *fh;
+	__u32 access;
 };
 
-struct ff_effect {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
+struct nfs3_createargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	struct iattr *sattr;
+	enum nfs3_createmode createmode;
+	__be32 verifier[2];
+};
+
+struct nfs3_mkdirargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	struct iattr *sattr;
+};
+
+struct nfs3_symlinkargs {
+	struct nfs_fh *fromfh;
+	const char *fromname;
+	unsigned int fromlen;
+	struct page **pages;
+	unsigned int pathlen;
+	struct iattr *sattr;
+};
+
+struct nfs3_mknodargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	enum nfs3_ftype type;
+	struct iattr *sattr;
+	dev_t rdev;
+};
+
+struct nfs3_linkargs {
+	struct nfs_fh *fromfh;
+	struct nfs_fh *tofh;
+	const char *toname;
+	unsigned int tolen;
+};
+
+struct nfs3_readdirargs {
+	struct nfs_fh *fh;
+	__u64 cookie;
+	__be32 verf[2];
+	bool plus;
+	unsigned int count;
+	struct page **pages;
+};
+
+struct nfs3_diropres {
+	struct nfs_fattr *dir_attr;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs3_accessres {
+	struct nfs_fattr *fattr;
+	__u32 access;
+};
+
+struct nfs3_readlinkargs {
+	struct nfs_fh *fh;
+	unsigned int pgbase;
+	unsigned int pglen;
+	struct page **pages;
+};
+
+struct nfs3_linkres {
+	struct nfs_fattr *dir_attr;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs3_readdirres {
+	struct nfs_fattr *dir_attr;
+	__be32 *verf;
+	bool plus;
+};
+
+struct nfs3_createdata {
+	struct rpc_message msg;
 	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
+		struct nfs3_createargs create;
+		struct nfs3_mkdirargs mkdir;
+		struct nfs3_symlinkargs symlink;
+		struct nfs3_mknodargs mknod;
+	} arg;
+	struct nfs3_diropres res;
+	struct nfs_fh fh;
+	struct nfs_fattr fattr;
+	struct nfs_fattr dir_attr;
+};
+
+struct xfs_attr3_rmt_hdr {
+	__be32 rm_magic;
+	__be32 rm_offset;
+	__be32 rm_bytes;
+	__be32 rm_crc;
+	uuid_t rm_uuid;
+	__be64 rm_owner;
+	__be64 rm_blkno;
+	__be64 rm_lsn;
+};
+
+struct xfs_attri_log_nameval;
+
+struct xfs_attr_intent {
+	struct list_head xattri_list;
+	struct xfs_da_state *xattri_da_state;
+	struct xfs_da_args *xattri_da_args;
+	struct xfs_attri_log_nameval *xattri_nameval;
+	enum xfs_delattr_state xattri_dela_state;
+	unsigned int xattri_op_flags;
+	xfs_dablk_t xattri_lblkno;
+	int xattri_blkcnt;
+	struct xfs_bmbt_irec xattri_map;
+};
+
+typedef struct xfs_sb xfs_sb_t;
+
+enum xfs_dax_mode {
+	XFS_DAX_INODE = 0,
+	XFS_DAX_ALWAYS = 1,
+	XFS_DAX_NEVER = 2,
+};
+
+enum {
+	Opt_logbufs = 0,
+	Opt_logbsize = 1,
+	Opt_logdev = 2,
+	Opt_rtdev = 3,
+	Opt_wsync = 4,
+	Opt_noalign = 5,
+	Opt_swalloc = 6,
+	Opt_sunit = 7,
+	Opt_swidth = 8,
+	Opt_nouuid = 9,
+	Opt_grpid___3 = 10,
+	Opt_nogrpid___3 = 11,
+	Opt_bsdgroups = 12,
+	Opt_sysvgroups = 13,
+	Opt_allocsize = 14,
+	Opt_norecovery = 15,
+	Opt_inode64___2 = 16,
+	Opt_inode32___2 = 17,
+	Opt_ikeep = 18,
+	Opt_noikeep = 19,
+	Opt_largeio = 20,
+	Opt_nolargeio = 21,
+	Opt_attr2 = 22,
+	Opt_noattr2 = 23,
+	Opt_filestreams = 24,
+	Opt_quota___3 = 25,
+	Opt_noquota___2 = 26,
+	Opt_usrquota___3 = 27,
+	Opt_grpquota___3 = 28,
+	Opt_prjquota___2 = 29,
+	Opt_uquota = 30,
+	Opt_gquota = 31,
+	Opt_pquota = 32,
+	Opt_uqnoenforce = 33,
+	Opt_gqnoenforce = 34,
+	Opt_pqnoenforce = 35,
+	Opt_qnoenforce = 36,
+	Opt_discard___3 = 37,
+	Opt_nodiscard___2 = 38,
+	Opt_dax___3 = 39,
+	Opt_dax_enum = 40,
+};
+
+struct proc_xfs_info {
+	uint64_t flag;
+	char *str;
+};
+
+struct xfs_rui_log_format {
+	uint16_t rui_type;
+	uint16_t rui_size;
+	uint32_t rui_nextents;
+	uint64_t rui_id;
+	struct xfs_map_extent rui_extents[0];
+};
+
+struct xfs_rud_log_format {
+	uint16_t rud_type;
+	uint16_t rud_size;
+	uint32_t __pad;
+	uint64_t rud_rui_id;
+};
+
+struct xfs_rui_log_item {
+	struct xfs_log_item rui_item;
+	atomic_t rui_refcount;
+	atomic_t rui_next_extent;
+	struct xfs_rui_log_format rui_format;
+};
+
+struct xfs_rud_log_item {
+	struct xfs_log_item rud_item;
+	struct xfs_rui_log_item *rud_ruip;
+	struct xfs_rud_log_format rud_format;
+};
+
+enum xfs_rmap_intent_type {
+	XFS_RMAP_MAP = 0,
+	XFS_RMAP_MAP_SHARED = 1,
+	XFS_RMAP_UNMAP = 2,
+	XFS_RMAP_UNMAP_SHARED = 3,
+	XFS_RMAP_CONVERT = 4,
+	XFS_RMAP_CONVERT_SHARED = 5,
+	XFS_RMAP_ALLOC = 6,
+	XFS_RMAP_FREE = 7,
+};
+
+struct xfs_rmap_intent {
+	struct list_head ri_list;
+	enum xfs_rmap_intent_type ri_type;
+	int ri_whichfork;
+	uint64_t ri_owner;
+	struct xfs_bmbt_irec ri_bmap;
+};
+
+typedef int __kernel_mqd_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct mqueue_fs_context {
+	struct ipc_namespace *ipc_ns;
+	bool newns;
+};
+
+struct posix_msg_tree_node {
+	struct rb_node rb_node;
+	struct list_head msg_list;
+	int priority;
+};
+
+struct ext_wait_queue {
+	struct task_struct *task;
+	struct list_head list;
+	struct msg_msg *msg;
+	int state;
+};
+
+struct mqueue_inode_info {
+	spinlock_t lock;
+	struct inode vfs_inode;
+	wait_queue_head_t wait_q;
+	struct rb_root msg_tree;
+	struct rb_node *msg_tree_rightmost;
+	struct posix_msg_tree_node *node_cache;
+	struct mq_attr attr;
+	struct sigevent notify;
+	struct pid *notify_owner;
+	u32 notify_self_exec_id;
+	struct user_namespace *notify_user_ns;
+	struct ucounts *ucounts;
+	struct sock *notify_sock;
+	struct sk_buff *notify_cookie;
+	struct ext_wait_queue e_wait_q[2];
+	long unsigned int qsize;
+};
+
+struct hmac_ctx {
+	struct crypto_shash *hash;
+};
+
+struct genradix_iter {
+	size_t offset;
+	size_t pos;
+};
+
+struct genradix_node {
+	union {
+		struct genradix_node *children[8192];
+		u8 data[65536];
+	};
+};
+
+struct ei_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	int etype;
+	void *priv;
+};
+
+struct fb_event {
+	struct fb_info *info;
+	void *data;
+};
+
+struct lcd_properties {
+	int max_contrast;
+};
+
+struct lcd_device;
+
+struct lcd_ops {
+	int (*get_power)(struct lcd_device *);
+	int (*set_power)(struct lcd_device *, int);
+	int (*get_contrast)(struct lcd_device *);
+	int (*set_contrast)(struct lcd_device *, int);
+	int (*set_mode)(struct lcd_device *, struct fb_videomode *);
+	int (*check_fb)(struct lcd_device *, struct fb_info *);
+};
+
+struct lcd_device {
+	struct lcd_properties props;
+	struct mutex ops_lock;
+	struct lcd_ops *ops;
+	struct mutex update_lock;
+	struct notifier_block fb_notif;
+	struct device dev;
+};
+
+struct radeon_bl_privdata {
+	struct radeonfb_info *rinfo;
+	uint8_t negative;
+};
+
+struct pts_fs_info;
+
+struct serial8250_config {
+	const char *name;
+	short unsigned int fifo_size;
+	short unsigned int tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+typedef void *acpi_handle;
+
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
+};
+
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct regmap_range_node {
+	struct rb_node node;
+	const char *name;
+	struct regmap *map;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+struct regmap_debugfs_node {
+	struct regmap *map;
+	struct list_head link;
+};
+
+enum {
+	ND_MIN_NAMESPACE_SIZE = 65536,
+};
+
+enum alloc_loc {
+	ALLOC_ERR = 0,
+	ALLOC_BEFORE = 1,
+	ALLOC_MID = 2,
+	ALLOC_AFTER = 3,
+};
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+struct ipr_res_addr {
+	u8 reserved;
+	u8 bus;
+	u8 target;
+	u8 lun;
+};
+
+struct ipr_std_inq_vpids {
+	u8 vendor_id[8];
+	u8 product_id[16];
+};
+
+struct ipr_vpd {
+	struct ipr_std_inq_vpids vpids;
+	u8 sn[8];
+};
+
+struct ipr_ext_vpd {
+	struct ipr_vpd vpd;
+	__be32 wwid[2];
+};
+
+struct ipr_ext_vpd64 {
+	struct ipr_vpd vpd;
+	__be32 wwid[4];
+};
+
+struct ipr_std_inq_data {
+	u8 peri_qual_dev_type;
+	u8 removeable_medium_rsvd;
+	u8 version;
+	u8 aen_naca_fmt;
+	u8 additional_len;
+	u8 sccs_rsvd;
+	u8 bq_enc_multi;
+	u8 sync_cmdq_flags;
+	struct ipr_std_inq_vpids vpids;
+	u8 ros_rsvd_ram_rsvd[4];
+	u8 serial_num[8];
+};
+
+struct ipr_config_table_entry {
+	u8 proto;
+	u8 array_id;
+	u8 flags;
+	u8 rsvd_subtype;
+	struct ipr_res_addr res_addr;
+	__be32 res_handle;
+	__be32 lun_wwn[2];
+	struct ipr_std_inq_data std_inq_data;
+};
+
+struct ipr_config_table_entry64 {
+	u8 res_type;
+	u8 proto;
+	u8 vset_num;
+	u8 array_id;
+	__be16 flags;
+	__be16 res_flags;
+	__be32 res_handle;
+	u8 dev_id_type;
+	u8 reserved[3];
+	__be64 dev_id;
+	__be64 lun;
+	__be64 lun_wwn[2];
+	__be64 res_path;
+	struct ipr_std_inq_data std_inq_data;
+	u8 reserved2[4];
+	__be64 reserved3[2];
+	u8 reserved4[8];
+};
+
+struct ipr_config_table_hdr {
+	u8 num_entries;
+	u8 flags;
+	__be16 reserved;
+};
+
+struct ipr_config_table_hdr64 {
+	__be16 num_entries;
+	__be16 reserved;
+	u8 flags;
+	u8 reserved2[11];
+};
+
+struct ipr_config_table {
+	struct ipr_config_table_hdr hdr;
+	struct ipr_config_table_entry dev[0];
+};
+
+struct ipr_config_table64 {
+	struct ipr_config_table_hdr64 hdr64;
+	struct ipr_config_table_entry64 dev[0];
+};
+
+struct ipr_config_table_entry_wrapper {
+	union {
+		struct ipr_config_table_entry *cfgte;
+		struct ipr_config_table_entry64 *cfgte64;
 	} u;
 };
 
-struct input_value {
-	__u16 type;
-	__u16 code;
-	__s32 value;
+struct ipr_hostrcb_cfg_ch_not {
+	union {
+		struct ipr_config_table_entry cfgte;
+		struct ipr_config_table_entry64 cfgte64;
+	} u;
+	u8 reserved[936];
 };
 
-enum input_clock_type {
-	INPUT_CLK_REAL = 0,
-	INPUT_CLK_MONO = 1,
-	INPUT_CLK_BOOT = 2,
-	INPUT_CLK_MAX = 3,
+struct ipr_supported_device {
+	__be16 data_length;
+	u8 reserved;
+	u8 num_records;
+	struct ipr_std_inq_vpids vpids;
+	u8 reserved2[16];
 };
 
-struct ff_device;
+struct ipr_ioa_cfg;
 
-struct input_dev_poller;
+struct ipr_hrr_queue {
+	struct ipr_ioa_cfg *ioa_cfg;
+	__be32 *host_rrq;
+	dma_addr_t host_rrq_dma;
+	volatile __be32 *hrrq_start;
+	volatile __be32 *hrrq_end;
+	volatile __be32 *hrrq_curr;
+	struct list_head hrrq_free_q;
+	struct list_head hrrq_pending_q;
+	spinlock_t _lock;
+	spinlock_t *lock;
+	volatile u32 toggle_bit;
+	u32 size;
+	u32 min_cmd_id;
+	u32 max_cmd_id;
+	u8 allow_interrupts: 1;
+	u8 ioa_is_dead: 1;
+	u8 allow_cmds: 1;
+	u8 removing_ioa: 1;
+	struct irq_poll iopoll;
+};
 
-struct input_mt;
+struct ipr_bus_attributes {
+	u8 bus;
+	u8 qas_enabled;
+	u8 bus_width;
+	u8 reserved;
+	u32 max_xfer_rate;
+};
 
-struct input_handle;
+struct ipr_interrupts {
+	void *set_interrupt_mask_reg;
+	void *clr_interrupt_mask_reg;
+	void *clr_interrupt_mask_reg32;
+	void *sense_interrupt_mask_reg;
+	void *sense_interrupt_mask_reg32;
+	void *clr_interrupt_reg;
+	void *clr_interrupt_reg32;
+	void *sense_interrupt_reg;
+	void *sense_interrupt_reg32;
+	void *ioarrin_reg;
+	void *sense_uproc_interrupt_reg;
+	void *sense_uproc_interrupt_reg32;
+	void *set_uproc_interrupt_reg;
+	void *set_uproc_interrupt_reg32;
+	void *clr_uproc_interrupt_reg;
+	void *clr_uproc_interrupt_reg32;
+	void *init_feedback_reg;
+	void *dump_addr_reg;
+	void *dump_data_reg;
+	void *endian_swap_reg;
+};
 
-struct input_dev {
-	const char *name;
-	const char *phys;
-	const char *uniq;
-	struct input_id id;
-	long unsigned int propbit[1];
-	long unsigned int evbit[1];
-	long unsigned int keybit[12];
-	long unsigned int relbit[1];
-	long unsigned int absbit[1];
-	long unsigned int mscbit[1];
-	long unsigned int ledbit[1];
-	long unsigned int sndbit[1];
-	long unsigned int ffbit[2];
-	long unsigned int swbit[1];
-	unsigned int hint_events_per_packet;
-	unsigned int keycodemax;
-	unsigned int keycodesize;
-	void *keycode;
-	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
-	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
-	struct ff_device *ff;
-	struct input_dev_poller *poller;
-	unsigned int repeat_key;
+enum ipr_sdt_state {
+	INACTIVE = 0,
+	WAIT_FOR_DUMP = 1,
+	GET_DUMP = 2,
+	READ_DUMP = 3,
+	ABORT_DUMP = 4,
+	DUMP_OBTAINED = 5,
+};
+
+struct ipr_trace_entry;
+
+struct ipr_resource_entry;
+
+struct ipr_hostrcb;
+
+struct ipr_chip_cfg_t;
+
+struct ipr_chip_t;
+
+struct ipr_sglist;
+
+struct ipr_dump;
+
+struct ipr_misc_cbs;
+
+struct ipr_cmnd;
+
+struct ipr_ioa_cfg {
+	char eye_catcher[8];
+	struct list_head queue;
+	u8 in_reset_reload: 1;
+	u8 in_ioa_bringdown: 1;
+	u8 ioa_unit_checked: 1;
+	u8 dump_taken: 1;
+	u8 scan_enabled: 1;
+	u8 scan_done: 1;
+	u8 needs_hard_reset: 1;
+	u8 dual_raid: 1;
+	u8 needs_warm_reset: 1;
+	u8 msi_received: 1;
+	u8 sis64: 1;
+	u8 dump_timeout: 1;
+	u8 cfg_locked: 1;
+	u8 clear_isr: 1;
+	u8 probe_done: 1;
+	u8 scsi_unblock: 1;
+	u8 scsi_blocked: 1;
+	u8 revid;
+	long unsigned int target_ids[64];
+	long unsigned int array_ids[64];
+	long unsigned int vset_ids[64];
+	u16 type;
+	u8 log_level;
+	char trace_start[8];
+	struct ipr_trace_entry *trace;
+	atomic_t trace_index;
+	char cfg_table_start[8];
+	union {
+		struct ipr_config_table *cfg_table;
+		struct ipr_config_table64 *cfg_table64;
+	} u;
+	dma_addr_t cfg_table_dma;
+	u32 cfg_table_size;
+	u32 max_devs_supported;
+	char resource_table_label[8];
+	struct ipr_resource_entry *res_entries;
+	struct list_head free_res_q;
+	struct list_head used_res_q;
+	char ipr_hcam_label[8];
+	struct ipr_hostrcb *hostrcb[16];
+	dma_addr_t hostrcb_dma[16];
+	struct list_head hostrcb_free_q;
+	struct list_head hostrcb_pending_q;
+	struct list_head hostrcb_report_q;
+	struct ipr_hrr_queue hrrq[16];
+	u32 hrrq_num;
+	atomic_t hrrq_index;
+	u16 identify_hrrq_index;
+	struct ipr_bus_attributes bus_attr[16];
+	unsigned int transop_timeout;
+	const struct ipr_chip_cfg_t *chip_cfg;
+	const struct ipr_chip_t *ipr_chip;
+	void *hdw_dma_regs;
+	long unsigned int hdw_dma_regs_pci;
+	void *ioa_mailbox;
+	struct ipr_interrupts regs;
+	u16 saved_pcix_cmd_reg;
+	u16 reset_retries;
+	u32 errors_logged;
+	u32 doorbell;
+	struct Scsi_Host *host;
+	struct pci_dev *pdev;
+	struct ipr_sglist *ucode_sglist;
+	u8 saved_mode_page_len;
+	struct work_struct work_q;
+	struct work_struct scsi_add_work_q;
+	struct workqueue_struct *reset_work_q;
+	wait_queue_head_t reset_wait_q;
+	wait_queue_head_t msi_wait_q;
+	wait_queue_head_t eeh_wait_q;
+	struct ipr_dump *dump;
+	enum ipr_sdt_state sdt_state;
+	struct ipr_misc_cbs *vpd_cbs;
+	dma_addr_t vpd_cbs_dma;
+	struct dma_pool *ipr_cmd_pool;
+	struct ipr_cmnd *reset_cmd;
+	int (*reset)(struct ipr_cmnd *);
+	struct ata_host ata_host;
+	char ipr_cmd_label[8];
+	u32 max_cmds;
+	struct ipr_cmnd **ipr_cmnd_list;
+	dma_addr_t *ipr_cmnd_list_dma;
+	unsigned int nvectors;
+	struct {
+		char desc[22];
+	} vectors_info[16];
+	u32 iopoll_weight;
+};
+
+struct ipr_cmd_pkt {
+	u8 reserved;
+	u8 hrrq_id;
+	u8 request_type;
+	u8 reserved2;
+	u8 flags_hi;
+	u8 flags_lo;
+	u8 cdb[16];
+	__be16 timeout;
+};
+
+struct ipr_ioarcb_ata_regs {
+	u8 flags;
+	u8 reserved[3];
+	__be16 data;
+	u8 feature;
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	u8 command;
+	u8 reserved2[3];
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+	u8 ctl;
+};
+
+struct ipr_ioadl_desc {
+	__be32 flags_and_data_len;
+	__be32 address;
+};
+
+struct ipr_ioadl64_desc {
+	__be32 flags;
+	__be32 data_len;
+	__be64 address;
+};
+
+struct ipr_ata64_ioadl {
+	struct ipr_ioarcb_ata_regs regs;
+	u16 reserved[5];
+	struct ipr_ioadl64_desc ioadl64[64];
+};
+
+struct ipr_ioarcb_add_data {
+	union {
+		struct ipr_ioarcb_ata_regs regs;
+		struct ipr_ioadl_desc ioadl[5];
+		__be32 add_cmd_parms[10];
+	} u;
+};
+
+struct ipr_ioarcb_sis64_add_addr_ecb {
+	__be64 ioasa_host_pci_addr;
+	__be64 data_ioadl_addr;
+	__be64 reserved;
+	__be32 ext_control_buf[4];
+};
+
+struct ipr_ioarcb {
+	union {
+		__be32 ioarcb_host_pci_addr;
+		__be64 ioarcb_host_pci_addr64;
+	} a;
+	__be32 res_handle;
+	__be32 host_response_handle;
+	__be32 reserved1;
+	__be32 reserved2;
+	__be32 reserved3;
+	__be32 data_transfer_length;
+	__be32 read_data_transfer_length;
+	__be32 write_ioadl_addr;
+	__be32 ioadl_len;
+	__be32 read_ioadl_addr;
+	__be32 read_ioadl_len;
+	__be32 ioasa_host_pci_addr;
+	__be16 ioasa_len;
+	__be16 reserved4;
+	struct ipr_cmd_pkt cmd_pkt;
+	__be16 add_cmd_parms_offset;
+	__be16 add_cmd_parms_len;
+	union {
+		struct ipr_ioarcb_add_data add_data;
+		struct ipr_ioarcb_sis64_add_addr_ecb sis64_addr_data;
+	} u;
+};
+
+struct ipr_ioasa_vset {
+	__be32 failing_lba_hi;
+	__be32 failing_lba_lo;
+	__be32 reserved;
+};
+
+struct ipr_ioasa_af_dasd {
+	__be32 failing_lba;
+	__be32 reserved[2];
+};
+
+struct ipr_ioasa_gpdd {
+	u8 end_state;
+	u8 bus_phase;
+	__be16 reserved;
+	__be32 ioa_data[2];
+};
+
+struct ipr_ioasa_gata {
+	u8 error;
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	u8 status;
+	u8 alt_status;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+};
+
+struct ipr_auto_sense {
+	__be16 auto_sense_len;
+	__be16 ioa_data_len;
+	__be32 data[24];
+};
+
+struct ipr_ioasa_hdr {
+	__be32 ioasc;
+	__be16 ret_stat_len;
+	__be16 avail_stat_len;
+	__be32 residual_data_len;
+	__be32 ilid;
+	__be32 fd_ioasc;
+	__be32 fd_phys_locator;
+	__be32 fd_res_handle;
+	__be32 ioasc_specific;
+};
+
+struct ipr_ioasa {
+	struct ipr_ioasa_hdr hdr;
+	union {
+		struct ipr_ioasa_vset vset;
+		struct ipr_ioasa_af_dasd dasd;
+		struct ipr_ioasa_gpdd gpdd;
+		struct ipr_ioasa_gata gata;
+	} u;
+	struct ipr_auto_sense auto_sense;
+};
+
+struct ipr_ioasa64 {
+	struct ipr_ioasa_hdr hdr;
+	u8 fd_res_path[8];
+	union {
+		struct ipr_ioasa_vset vset;
+		struct ipr_ioasa_af_dasd dasd;
+		struct ipr_ioasa_gpdd gpdd;
+		struct ipr_ioasa_gata gata;
+	} u;
+	struct ipr_auto_sense auto_sense;
+};
+
+struct ipr_mode_parm_hdr {
+	u8 length;
+	u8 medium_type;
+	u8 device_spec_parms;
+	u8 block_desc_len;
+};
+
+struct ipr_mode_pages {
+	struct ipr_mode_parm_hdr hdr;
+	u8 data[251];
+};
+
+struct ipr_mode_page_hdr {
+	u8 ps_page_code;
+	u8 page_length;
+};
+
+struct ipr_dev_bus_entry {
+	struct ipr_res_addr res_addr;
+	u8 flags;
+	u8 scsi_id;
+	u8 bus_width;
+	u8 extended_reset_delay;
+	__be32 max_xfer_rate;
+	u8 spinup_delay;
+	u8 reserved3;
+	__be16 reserved4;
+};
+
+struct ipr_mode_page28 {
+	struct ipr_mode_page_hdr hdr;
+	u8 num_entries;
+	u8 entry_length;
+	struct ipr_dev_bus_entry bus[0];
+};
+
+struct ipr_mode_page24 {
+	struct ipr_mode_page_hdr hdr;
+	u8 flags;
+};
+
+struct ipr_ioa_vpd {
+	struct ipr_std_inq_data std_inq_data;
+	u8 ascii_part_num[12];
+	u8 reserved[40];
+	u8 ascii_plant_code[4];
+};
+
+struct ipr_inquiry_page3 {
+	u8 peri_qual_dev_type;
+	u8 page_code;
+	u8 reserved1;
+	u8 page_length;
+	u8 ascii_len;
+	u8 reserved2[3];
+	u8 load_id[4];
+	u8 major_release;
+	u8 card_type;
+	u8 minor_release[2];
+	u8 ptf_number[4];
+	u8 patch_number[4];
+};
+
+struct ipr_inquiry_cap {
+	u8 peri_qual_dev_type;
+	u8 page_code;
+	u8 reserved1;
+	u8 page_length;
+	u8 ascii_len;
+	u8 reserved2;
+	u8 sis_version[2];
+	u8 cap;
+	u8 reserved3[15];
+};
+
+struct ipr_inquiry_page0 {
+	u8 peri_qual_dev_type;
+	u8 page_code;
+	u8 reserved1;
+	u8 len;
+	u8 page[20];
+};
+
+struct ipr_inquiry_pageC4 {
+	u8 peri_qual_dev_type;
+	u8 page_code;
+	u8 reserved1;
+	u8 len;
+	u8 cache_cap[4];
+	u8 reserved2[20];
+};
+
+struct ipr_hostrcb_device_data_entry {
+	struct ipr_vpd vpd;
+	struct ipr_res_addr dev_res_addr;
+	struct ipr_vpd new_vpd;
+	struct ipr_vpd ioa_last_with_dev_vpd;
+	struct ipr_vpd cfc_last_with_dev_vpd;
+	__be32 ioa_data[5];
+};
+
+struct ipr_hostrcb_device_data_entry_enhanced {
+	struct ipr_ext_vpd vpd;
+	u8 ccin[4];
+	struct ipr_res_addr dev_res_addr;
+	struct ipr_ext_vpd new_vpd;
+	u8 new_ccin[4];
+	struct ipr_ext_vpd ioa_last_with_dev_vpd;
+	struct ipr_ext_vpd cfc_last_with_dev_vpd;
+};
+
+struct ipr_hostrcb64_device_data_entry_enhanced {
+	struct ipr_ext_vpd vpd;
+	u8 ccin[4];
+	u8 res_path[8];
+	struct ipr_ext_vpd new_vpd;
+	u8 new_ccin[4];
+	struct ipr_ext_vpd ioa_last_with_dev_vpd;
+	struct ipr_ext_vpd cfc_last_with_dev_vpd;
+};
+
+struct ipr_hostrcb_array_data_entry {
+	struct ipr_vpd vpd;
+	struct ipr_res_addr expected_dev_res_addr;
+	struct ipr_res_addr dev_res_addr;
+};
+
+struct ipr_hostrcb64_array_data_entry {
+	struct ipr_ext_vpd vpd;
+	u8 ccin[4];
+	u8 expected_res_path[8];
+	u8 res_path[8];
+};
+
+struct ipr_hostrcb_array_data_entry_enhanced {
+	struct ipr_ext_vpd vpd;
+	u8 ccin[4];
+	struct ipr_res_addr expected_dev_res_addr;
+	struct ipr_res_addr dev_res_addr;
+};
+
+struct ipr_hostrcb_type_ff_error {
+	__be32 ioa_data[758];
+};
+
+struct ipr_hostrcb_type_01_error {
+	__be32 seek_counter;
+	__be32 read_counter;
+	u8 sense_data[32];
+	__be32 ioa_data[236];
+};
+
+struct ipr_hostrcb_type_21_error {
+	__be32 wwn[4];
+	u8 res_path[8];
+	u8 primary_problem_desc[32];
+	u8 second_problem_desc[32];
+	__be32 sense_data[8];
+	__be32 cdb[4];
+	__be32 residual_trans_length;
+	__be32 length_of_error;
+	__be32 ioa_data[236];
+};
+
+struct ipr_hostrcb_type_02_error {
+	struct ipr_vpd ioa_vpd;
+	struct ipr_vpd cfc_vpd;
+	struct ipr_vpd ioa_last_attached_to_cfc_vpd;
+	struct ipr_vpd cfc_last_attached_to_ioa_vpd;
+	__be32 ioa_data[3];
+};
+
+struct ipr_hostrcb_type_12_error {
+	struct ipr_ext_vpd ioa_vpd;
+	struct ipr_ext_vpd cfc_vpd;
+	struct ipr_ext_vpd ioa_last_attached_to_cfc_vpd;
+	struct ipr_ext_vpd cfc_last_attached_to_ioa_vpd;
+	__be32 ioa_data[3];
+};
+
+struct ipr_hostrcb_type_03_error {
+	struct ipr_vpd ioa_vpd;
+	struct ipr_vpd cfc_vpd;
+	__be32 errors_detected;
+	__be32 errors_logged;
+	u8 ioa_data[12];
+	struct ipr_hostrcb_device_data_entry dev[3];
+};
+
+struct ipr_hostrcb_type_13_error {
+	struct ipr_ext_vpd ioa_vpd;
+	struct ipr_ext_vpd cfc_vpd;
+	__be32 errors_detected;
+	__be32 errors_logged;
+	struct ipr_hostrcb_device_data_entry_enhanced dev[3];
+};
+
+struct ipr_hostrcb_type_23_error {
+	struct ipr_ext_vpd ioa_vpd;
+	struct ipr_ext_vpd cfc_vpd;
+	__be32 errors_detected;
+	__be32 errors_logged;
+	struct ipr_hostrcb64_device_data_entry_enhanced dev[3];
+};
+
+struct ipr_hostrcb_type_04_error {
+	struct ipr_vpd ioa_vpd;
+	struct ipr_vpd cfc_vpd;
+	u8 ioa_data[12];
+	struct ipr_hostrcb_array_data_entry array_member[10];
+	__be32 exposed_mode_adn;
+	__be32 array_id;
+	struct ipr_vpd incomp_dev_vpd;
+	__be32 ioa_data2;
+	struct ipr_hostrcb_array_data_entry array_member2[8];
+	struct ipr_res_addr last_func_vset_res_addr;
+	u8 vset_serial_num[8];
+	u8 protection_level[8];
+};
+
+struct ipr_hostrcb_type_14_error {
+	struct ipr_ext_vpd ioa_vpd;
+	struct ipr_ext_vpd cfc_vpd;
+	__be32 exposed_mode_adn;
+	__be32 array_id;
+	struct ipr_res_addr last_func_vset_res_addr;
+	u8 vset_serial_num[8];
+	u8 protection_level[8];
+	__be32 num_entries;
+	struct ipr_hostrcb_array_data_entry_enhanced array_member[18];
+};
+
+struct ipr_hostrcb_type_24_error {
+	struct ipr_ext_vpd ioa_vpd;
+	struct ipr_ext_vpd cfc_vpd;
+	u8 reserved[2];
+	u8 exposed_mode_adn;
+	u8 array_id;
+	u8 last_res_path[8];
+	u8 protection_level[8];
+	struct ipr_ext_vpd64 array_vpd;
+	u8 description[16];
+	u8 reserved2[3];
+	u8 num_entries;
+	struct ipr_hostrcb64_array_data_entry array_member[32];
+};
+
+struct ipr_hostrcb_type_07_error {
+	u8 failure_reason[64];
+	struct ipr_vpd vpd;
+	__be32 data[222];
+};
+
+struct ipr_hostrcb_type_17_error {
+	u8 failure_reason[64];
+	struct ipr_ext_vpd vpd;
+	__be32 data[476];
+};
+
+struct ipr_hostrcb_config_element {
+	u8 type_status;
+	u8 cascaded_expander;
+	u8 phy;
+	u8 link_rate;
+	__be32 wwid[2];
+};
+
+struct ipr_hostrcb64_config_element {
+	__be16 length;
+	u8 descriptor_id;
+	u8 reserved;
+	u8 type_status;
+	u8 reserved2[2];
+	u8 link_rate;
+	u8 res_path[8];
+	__be32 wwid[2];
+};
+
+struct ipr_hostrcb_fabric_desc {
+	__be16 length;
+	u8 ioa_port;
+	u8 cascaded_expander;
+	u8 phy;
+	u8 path_state;
+	__be16 num_entries;
+	struct ipr_hostrcb_config_element elem[1];
+};
+
+struct ipr_hostrcb64_fabric_desc {
+	__be16 length;
+	u8 descriptor_id;
+	u8 reserved[2];
+	u8 path_state;
+	u8 reserved2[2];
+	u8 res_path[8];
+	u8 reserved3[6];
+	__be16 num_entries;
+	struct ipr_hostrcb64_config_element elem[1];
+};
+
+struct ipr_hostrcb_type_20_error {
+	u8 failure_reason[64];
+	u8 reserved[3];
+	u8 num_entries;
+	struct ipr_hostrcb_fabric_desc desc[1];
+};
+
+struct ipr_hostrcb_type_30_error {
+	u8 failure_reason[64];
+	u8 reserved[3];
+	u8 num_entries;
+	struct ipr_hostrcb64_fabric_desc desc[1];
+};
+
+struct ipr_hostrcb_type_41_error {
+	u8 failure_reason[64];
+	__be32 data[200];
+};
+
+struct ipr_hostrcb_error {
+	__be32 fd_ioasc;
+	struct ipr_res_addr fd_res_addr;
+	__be32 fd_res_handle;
+	__be32 prc;
+	union {
+		struct ipr_hostrcb_type_ff_error type_ff_error;
+		struct ipr_hostrcb_type_01_error type_01_error;
+		struct ipr_hostrcb_type_02_error type_02_error;
+		struct ipr_hostrcb_type_03_error type_03_error;
+		struct ipr_hostrcb_type_04_error type_04_error;
+		struct ipr_hostrcb_type_07_error type_07_error;
+		struct ipr_hostrcb_type_12_error type_12_error;
+		struct ipr_hostrcb_type_13_error type_13_error;
+		struct ipr_hostrcb_type_14_error type_14_error;
+		struct ipr_hostrcb_type_17_error type_17_error;
+		struct ipr_hostrcb_type_20_error type_20_error;
+	} u;
+};
+
+struct ipr_hostrcb64_error {
+	__be32 fd_ioasc;
+	__be32 ioa_fw_level;
+	__be32 fd_res_handle;
+	__be32 prc;
+	__be64 fd_dev_id;
+	__be64 fd_lun;
+	u8 fd_res_path[8];
+	__be64 time_stamp;
+	u8 reserved[16];
+	union {
+		struct ipr_hostrcb_type_ff_error type_ff_error;
+		struct ipr_hostrcb_type_12_error type_12_error;
+		struct ipr_hostrcb_type_17_error type_17_error;
+		struct ipr_hostrcb_type_21_error type_21_error;
+		struct ipr_hostrcb_type_23_error type_23_error;
+		struct ipr_hostrcb_type_24_error type_24_error;
+		struct ipr_hostrcb_type_30_error type_30_error;
+		struct ipr_hostrcb_type_41_error type_41_error;
+	} u;
+};
+
+struct ipr_hostrcb_raw {
+	__be32 data[762];
+};
+
+struct ipr_hcam {
+	u8 op_code;
+	u8 notify_type;
+	u8 notifications_lost;
+	u8 flags;
+	u8 overlay_id;
+	u8 reserved1[3];
+	__be32 ilid;
+	__be32 time_since_last_ioa_reset;
+	__be32 reserved2;
+	__be32 length;
+	union {
+		struct ipr_hostrcb_error error;
+		struct ipr_hostrcb64_error error64;
+		struct ipr_hostrcb_cfg_ch_not ccn;
+		struct ipr_hostrcb_raw raw;
+	} u;
+};
+
+struct ipr_hostrcb {
+	struct ipr_hcam hcam;
+	dma_addr_t hostrcb_dma;
+	struct list_head queue;
+	struct ipr_ioa_cfg *ioa_cfg;
+	char rp_buffer[48];
+};
+
+struct ipr_sdt_entry {
+	__be32 start_token;
+	__be32 end_token;
+	u8 reserved[4];
+	u8 flags;
+	u8 resv;
+	__be16 priority;
+};
+
+struct ipr_sdt_header {
+	__be32 state;
+	__be32 num_entries;
+	__be32 num_entries_used;
+	__be32 dump_size;
+};
+
+struct ipr_sdt {
+	struct ipr_sdt_header hdr;
+	struct ipr_sdt_entry entry[4095];
+};
+
+struct ipr_uc_sdt {
+	struct ipr_sdt_header hdr;
+	struct ipr_sdt_entry entry[1];
+};
+
+struct ipr_sata_port {
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ata_port *ap;
+	struct ipr_resource_entry *res;
+	struct ipr_ioasa_gata ioasa;
+};
+
+struct ipr_resource_entry {
+	u8 needs_sync_complete: 1;
+	u8 in_erp: 1;
+	u8 add_to_ml: 1;
+	u8 del_from_ml: 1;
+	u8 resetting_device: 1;
+	u8 reset_occurred: 1;
+	u8 raw_mode: 1;
+	u32 bus;
+	u32 target;
+	u32 lun;
+	u8 ata_class;
+	u8 type;
+	u16 flags;
+	u16 res_flags;
+	u8 qmodel;
+	struct ipr_std_inq_data std_inq_data;
+	__be32 res_handle;
+	__be64 dev_id;
+	u64 lun_wwn;
+	struct scsi_lun dev_lun;
+	u8 res_path[8];
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct scsi_device *sdev;
+	struct ipr_sata_port *sata_port;
+	struct list_head queue;
+};
+
+struct ipr_misc_cbs {
+	struct ipr_ioa_vpd ioa_vpd;
+	struct ipr_inquiry_page0 page0_data;
+	struct ipr_inquiry_page3 page3_data;
+	struct ipr_inquiry_cap cap;
+	struct ipr_inquiry_pageC4 pageC4_data;
+	struct ipr_mode_pages mode_pages;
+	struct ipr_supported_device supp_dev;
+};
+
+struct ipr_interrupt_offsets {
+	long unsigned int set_interrupt_mask_reg;
+	long unsigned int clr_interrupt_mask_reg;
+	long unsigned int clr_interrupt_mask_reg32;
+	long unsigned int sense_interrupt_mask_reg;
+	long unsigned int sense_interrupt_mask_reg32;
+	long unsigned int clr_interrupt_reg;
+	long unsigned int clr_interrupt_reg32;
+	long unsigned int sense_interrupt_reg;
+	long unsigned int sense_interrupt_reg32;
+	long unsigned int ioarrin_reg;
+	long unsigned int sense_uproc_interrupt_reg;
+	long unsigned int sense_uproc_interrupt_reg32;
+	long unsigned int set_uproc_interrupt_reg;
+	long unsigned int set_uproc_interrupt_reg32;
+	long unsigned int clr_uproc_interrupt_reg;
+	long unsigned int clr_uproc_interrupt_reg32;
+	long unsigned int init_feedback_reg;
+	long unsigned int dump_addr_reg;
+	long unsigned int dump_data_reg;
+	long unsigned int endian_swap_reg;
+};
+
+struct ipr_chip_cfg_t {
+	u32 mailbox;
+	u16 max_cmds;
+	u8 cache_line_size;
+	u8 clear_isr;
+	u32 iopoll_weight;
+	struct ipr_interrupt_offsets regs;
+};
+
+struct ipr_chip_t {
+	u16 vendor;
+	u16 device;
+	bool has_msi;
+	u16 sis_type;
+	u16 bist_method;
+	const struct ipr_chip_cfg_t *cfg;
+};
+
+enum ipr_shutdown_type {
+	IPR_SHUTDOWN_NORMAL = 0,
+	IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 64,
+	IPR_SHUTDOWN_ABBREV = 128,
+	IPR_SHUTDOWN_NONE = 256,
+	IPR_SHUTDOWN_QUIESCE = 257,
+};
+
+struct ipr_trace_entry {
+	u32 time;
+	u8 op_code;
+	u8 ata_op_code;
+	u8 type;
+	u8 cmd_index;
+	__be32 res_handle;
+	union {
+		u32 ioasc;
+		u32 add_data;
+		u32 res_addr;
+	} u;
+};
+
+struct ipr_sglist {
+	u32 order;
+	u32 num_sg;
+	u32 num_dma_sg;
+	u32 buffer_len;
+	struct scatterlist *scatterlist;
+};
+
+struct ipr_dump_header {
+	u32 eye_catcher;
+	u32 len;
+	u32 num_entries;
+	u32 first_entry_offset;
+	u32 status;
+	u32 os;
+	u32 driver_name;
+};
+
+struct ipr_dump_entry_header {
+	u32 eye_catcher;
+	u32 len;
+	u32 num_elems;
+	u32 offset;
+	u32 data_type;
+	u32 id;
+	u32 status;
+};
+
+struct ipr_dump_version_entry {
+	struct ipr_dump_entry_header hdr;
+	u8 version[6];
+};
+
+struct ipr_dump_location_entry {
+	struct ipr_dump_entry_header hdr;
+	u8 location[20];
+};
+
+struct ipr_dump_ioa_type_entry {
+	struct ipr_dump_entry_header hdr;
+	u32 type;
+	u32 fw_version;
+};
+
+struct ipr_dump_trace_entry {
+	struct ipr_dump_entry_header hdr;
+	u32 trace[1024];
+};
+
+struct ipr_driver_dump {
+	struct ipr_dump_header hdr;
+	struct ipr_dump_version_entry version_entry;
+	struct ipr_dump_location_entry location_entry;
+	struct ipr_dump_ioa_type_entry ioa_type_entry;
+	struct ipr_dump_trace_entry trace_entry;
+};
+
+struct ipr_ioa_dump {
+	struct ipr_dump_entry_header hdr;
+	struct ipr_sdt sdt;
+	__be32 **ioa_data;
+	u32 reserved;
+	u32 next_page_index;
+	u32 page_offset;
+	u32 format;
+} __attribute__((packed));
+
+struct ipr_dump {
+	struct kref kref;
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ipr_driver_dump driver_dump;
+	struct ipr_ioa_dump ioa_dump;
+};
+
+struct ipr_cmnd {
+	struct ipr_ioarcb ioarcb;
+	union {
+		struct ipr_ioadl_desc ioadl[64];
+		struct ipr_ioadl64_desc ioadl64[64];
+		struct ipr_ata64_ioadl ata_ioadl;
+	} i;
+	union {
+		struct ipr_ioasa ioasa;
+		struct ipr_ioasa64 ioasa64;
+	} s;
+	struct list_head queue;
+	struct scsi_cmnd *scsi_cmd;
+	struct ata_queued_cmd *qc;
+	struct completion completion;
 	struct timer_list timer;
-	int rep[2];
-	struct input_mt *mt;
-	struct input_absinfo *absinfo;
-	long unsigned int key[12];
-	long unsigned int led[1];
-	long unsigned int snd[1];
-	long unsigned int sw[1];
-	int (*open)(struct input_dev *);
-	void (*close)(struct input_dev *);
-	int (*flush)(struct input_dev *, struct file *);
-	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
-	struct input_handle *grab;
-	spinlock_t event_lock;
-	struct mutex mutex;
-	unsigned int users;
-	bool going_away;
+	struct work_struct work;
+	void (*fast_done)(struct ipr_cmnd *);
+	void (*done)(struct ipr_cmnd *);
+	int (*job_step)(struct ipr_cmnd *);
+	int (*job_step_failed)(struct ipr_cmnd *);
+	u16 cmd_index;
+	u8 sense_buffer[96];
+	dma_addr_t sense_buffer_dma;
+	short unsigned int dma_use_sg;
+	dma_addr_t dma_addr;
+	struct ipr_cmnd *sibling;
+	union {
+		enum ipr_shutdown_type shutdown_type;
+		struct ipr_hostrcb *hostrcb;
+		long unsigned int time_left;
+		long unsigned int scratch;
+		struct ipr_resource_entry *res;
+		struct scsi_device *sdev;
+	} u;
+	struct completion *eh_comp;
+	struct ipr_hrr_queue *hrrq;
+	struct ipr_ioa_cfg *ioa_cfg;
+	long: 64;
+};
+
+struct ipr_ses_table_entry {
+	char product_id[17];
+	char compare_product_id_byte[17];
+	u32 max_bus_speed_limit;
+};
+
+struct ipr_error_table_t {
+	u32 ioasc;
+	int log_ioasa;
+	int log_hcam;
+	char *error;
+};
+
+struct ipr_software_inq_lid_info {
+	__be32 load_id;
+	__be32 timestamp[3];
+};
+
+struct ipr_ucode_image_header {
+	__be32 header_length;
+	__be32 lid_table_offset;
+	u8 major_release;
+	u8 card_type;
+	u8 minor_release[2];
+	u8 reserved[20];
+	char eyecatcher[16];
+	__be32 num_lids;
+	struct ipr_software_inq_lid_info lid[1];
+};
+
+enum {
+	e1000_igp_cable_length_10 = 10,
+	e1000_igp_cable_length_20 = 20,
+	e1000_igp_cable_length_30 = 30,
+	e1000_igp_cable_length_40 = 40,
+	e1000_igp_cable_length_50 = 50,
+	e1000_igp_cable_length_60 = 60,
+	e1000_igp_cable_length_70 = 70,
+	e1000_igp_cable_length_80 = 80,
+	e1000_igp_cable_length_90 = 90,
+	e1000_igp_cable_length_100 = 100,
+	e1000_igp_cable_length_110 = 110,
+	e1000_igp_cable_length_115 = 115,
+	e1000_igp_cable_length_120 = 120,
+	e1000_igp_cable_length_130 = 130,
+	e1000_igp_cable_length_140 = 140,
+	e1000_igp_cable_length_150 = 150,
+	e1000_igp_cable_length_160 = 160,
+	e1000_igp_cable_length_170 = 170,
+	e1000_igp_cable_length_180 = 180,
+};
+
+typedef struct pccard_io_map pccard_io_map;
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
 	struct device dev;
-	struct list_head h_list;
-	struct list_head node;
-	unsigned int num_vals;
-	unsigned int max_vals;
-	struct input_value *vals;
-	bool devres_managed;
-	ktime_t timestamp[3];
 };
 
-struct ff_device {
-	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
-	int (*erase)(struct input_dev *, int);
-	int (*playback)(struct input_dev *, int, int);
-	void (*set_gain)(struct input_dev *, u16);
-	void (*set_autocenter)(struct input_dev *, u16);
-	void (*destroy)(struct ff_device *);
-	void *private;
-	long unsigned int ffbit[2];
+struct urb_priv {
+	struct ed *ed;
+	u16 length;
+	u16 td_cnt;
+	struct list_head pending;
+	struct td *td[0];
+};
+
+typedef struct urb_priv urb_priv_t;
+
+struct debug_buffer {
+	ssize_t (*fill_func)(struct debug_buffer *);
+	struct ohci_hcd *ohci;
 	struct mutex mutex;
-	int max_effects;
-	struct ff_effect *effects;
-	struct file *effect_owners[0];
+	size_t count;
+	char *page;
 };
 
-struct input_handler;
-
-struct input_handle {
-	void *private;
-	int open;
-	const char *name;
-	struct input_dev *dev;
-	struct input_handler *handler;
-	struct list_head d_node;
-	struct list_head h_node;
+struct pps_event_time {
+	struct timespec64 ts_real;
 };
 
-struct input_handler {
-	void *private;
-	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
-	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
-	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
-	bool (*match)(struct input_handler *, struct input_dev *);
-	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
-	void (*disconnect)(struct input_handle *);
-	void (*start)(struct input_handle *);
-	bool legacy_minors;
-	int minor;
-	const char *name;
-	const struct input_device_id *id_table;
-	struct list_head h_list;
+enum ptp_clock_events {
+	PTP_CLOCK_ALARM = 0,
+	PTP_CLOCK_EXTTS = 1,
+	PTP_CLOCK_PPS = 2,
+	PTP_CLOCK_PPSUSR = 3,
+};
+
+struct ptp_clock_event {
+	int type;
+	int index;
+	union {
+		u64 timestamp;
+		struct pps_event_time pps_times;
+	};
+};
+
+struct dm_io_region {
+	struct block_device *bdev;
+	sector_t sector;
+	sector_t count;
+};
+
+struct page_list {
+	struct page_list *next;
+	struct page *page;
+};
+
+typedef void (*io_notify_fn)(long unsigned int, void *);
+
+enum dm_io_mem_type {
+	DM_IO_PAGE_LIST = 0,
+	DM_IO_BIO = 1,
+	DM_IO_VMA = 2,
+	DM_IO_KMEM = 3,
+};
+
+struct dm_io_memory {
+	enum dm_io_mem_type type;
+	unsigned int offset;
+	union {
+		struct page_list *pl;
+		struct bio *bio;
+		void *vma;
+		void *addr;
+	} ptr;
+};
+
+struct dm_io_notify {
+	io_notify_fn fn;
+	void *context;
+};
+
+struct dm_io_client;
+
+struct dm_io_request {
+	blk_opf_t bi_opf;
+	struct dm_io_memory mem;
+	struct dm_io_notify notify;
+	struct dm_io_client *client;
+};
+
+struct dm_io_client {
+	mempool_t pool;
+	struct bio_set bios;
+};
+
+struct io {
+	long unsigned int error_bits;
+	atomic_t count;
+	struct dm_io_client *client;
+	io_notify_fn callback;
+	void *context;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+	long: 64;
+};
+
+struct dpages {
+	void (*get_page)(struct dpages *, struct page **, long unsigned int *, unsigned int *);
+	void (*next_page)(struct dpages *);
+	union {
+		unsigned int context_u;
+		struct bvec_iter context_bi;
+	};
+	void *context_ptr;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+};
+
+struct sync_io {
+	long unsigned int error_bits;
+	struct completion wait;
+};
+
+struct of_changeset_entry {
 	struct list_head node;
+	long unsigned int action;
+	struct device_node *np;
+	struct property *prop;
+	struct property *old_prop;
 };
 
-struct sysrq_state {
-	struct input_handle handle;
-	struct work_struct reinject_work;
-	long unsigned int key_down[12];
-	unsigned int alt;
-	unsigned int alt_use;
-	unsigned int shift;
-	unsigned int shift_use;
-	bool active;
-	bool need_reinject;
-	bool reinjecting;
-	bool reset_canceled;
-	bool reset_requested;
-	long unsigned int reset_keybit[12];
-	int reset_seq_len;
-	int reset_seq_cnt;
-	int reset_seq_version;
-	struct timer_list keyreset_timer;
+struct of_changeset {
+	struct list_head entries;
 };
 
-struct consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	char *chardata;
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
 };
 
-struct unipair {
-	short unsigned int unicode;
-	short unsigned int fontpos;
+struct linger {
+	int l_onoff;
+	int l_linger;
 };
 
-struct unimapdesc {
-	short unsigned int entry_ct;
-	struct unipair *entries;
+struct so_timestamping {
+	int flags;
+	int bind_phc;
 };
 
-struct kbd_repeat {
-	int delay;
-	int period;
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
 };
 
-struct console_font_op {
-	unsigned int op;
-	unsigned int flags;
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
 };
 
-struct vt_stat {
-	short unsigned int v_active;
-	short unsigned int v_signal;
-	short unsigned int v_state;
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
 };
 
-struct vt_sizes {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_scrollsize;
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
 };
 
-struct vt_consize {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_vlin;
-	short unsigned int v_clin;
-	short unsigned int v_vcol;
-	short unsigned int v_ccol;
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
 };
 
-struct vt_event {
-	unsigned int event;
-	unsigned int oldev;
-	unsigned int newev;
-	unsigned int pad[4];
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
 };
 
-struct vt_setactivate {
-	unsigned int console;
-	struct vt_mode mode;
+struct tc_mq_opt_offload_graft_params {
+	long unsigned int queue;
+	u32 child_handle;
 };
 
-struct vt_spawn_console {
-	spinlock_t lock;
-	struct pid *pid;
-	int sig;
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
 };
 
-struct vt_event_wait {
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	int pos_hash;
+	int pos_idx;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__tcp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct sock_common *sk_common;
+	};
+	uid_t uid;
+};
+
+struct nhmsg {
+	unsigned char nh_family;
+	unsigned char nh_scope;
+	unsigned char nh_protocol;
+	unsigned char resvd;
+	unsigned int nh_flags;
+};
+
+struct nexthop_grp {
+	__u32 id;
+	__u8 weight;
+	__u8 resvd1;
+	__u16 resvd2;
+};
+
+enum {
+	NEXTHOP_GRP_TYPE_MPATH = 0,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+enum {
+	NHA_UNSPEC = 0,
+	NHA_ID = 1,
+	NHA_GROUP = 2,
+	NHA_GROUP_TYPE = 3,
+	NHA_BLACKHOLE = 4,
+	NHA_OIF = 5,
+	NHA_GATEWAY = 6,
+	NHA_ENCAP_TYPE = 7,
+	NHA_ENCAP = 8,
+	NHA_GROUPS = 9,
+	NHA_MASTER = 10,
+	NHA_FDB = 11,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
+};
+
+struct nh_config {
+	u32 nh_id;
+	u8 nh_family;
+	u8 nh_protocol;
+	u8 nh_blackhole;
+	u8 nh_fdb;
+	u32 nh_flags;
+	int nh_ifindex;
+	struct net_device *dev;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} gw;
+	struct nlattr *nh_grp;
+	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	long unsigned int nh_grp_res_idle_timer;
+	long unsigned int nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
+	struct nlattr *nh_encap;
+	u16 nh_encap_type;
+	u32 nlflags;
+	struct nl_info nlinfo;
+};
+
+enum nexthop_event_type {
+	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+	u32 done_nh_idx;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+enum fib6_walk_state {
+	FWS_L = 0,
+	FWS_R = 1,
+	FWS_C = 2,
+	FWS_U = 3,
+};
+
+struct fib6_walker {
+	struct list_head lh;
+	struct fib6_node *root;
+	struct fib6_node *node;
+	struct fib6_info *leaf;
+	enum fib6_walk_state state;
+	unsigned int skip;
+	unsigned int count;
+	unsigned int skip_in_node;
+	int (*func)(struct fib6_walker *);
+	void *args;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct fib6_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct fib6_info *rt;
+	unsigned int nsiblings;
+};
+
+struct ipv6_route_iter {
+	struct seq_net_private p;
+	struct fib6_walker w;
+	loff_t skip;
+	struct fib6_table *tbl;
+	int sernum;
+};
+
+struct bpf_iter__ipv6_route {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct fib6_info *rt;
+	};
+};
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct fib6_cleaner {
+	struct fib6_walker w;
+	struct net *net;
+	int (*func)(struct fib6_info *, void *);
+	int sernum;
+	void *arg;
+	bool skip_notify;
+};
+
+enum {
+	FIB6_NO_SERNUM_CHANGE = 0,
+};
+
+struct fib6_dump_arg {
+	struct net *net;
+	struct notifier_block *nb;
+	struct netlink_ext_ack *extack;
+};
+
+struct fib6_nh_pcpu_arg {
+	struct fib6_info *from;
+	const struct fib6_table *table;
+};
+
+struct lookup_args {
+	int offset;
+	const struct in6_addr *addr;
+};
+
+struct ip6fl_iter_state {
+	struct seq_net_private p;
+	struct pid_namespace *pid_ns;
+	int bucket;
+};
+
+struct ip_tunnel_prl {
+	__be32 addr;
+	__u16 flags;
+	__u16 __reserved;
+	__u32 datalen;
+	__u32 __reserved2;
+};
+
+struct sit_net {
+	struct ip_tunnel *tunnels_r_l[16];
+	struct ip_tunnel *tunnels_r[16];
+	struct ip_tunnel *tunnels_l[16];
+	struct ip_tunnel *tunnels_wc[1];
+	struct ip_tunnel **tunnels[4];
+	struct net_device *fb_tunnel_dev;
+};
+
+struct metadata_dst;
+
+enum dns_payload_content_type {
+	DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+
+struct dns_payload_header {
+	__u8 zero;
+	__u8 content;
+	__u8 version;
+};
+
+struct eeh_rmv_data {
+	struct list_head removed_vf_list;
+	int removed_dev_count;
+};
+
+typedef enum pci_ers_result (*eeh_report_fn)(struct eeh_dev *, struct pci_dev *, struct pci_driver *);
+
+enum {
+	IMAGE_INVALID = 0,
+	IMAGE_LOADING = 1,
+	IMAGE_READY = 2,
+};
+
+struct image_data_t {
+	int status;
+	void *data;
+	uint32_t size;
+};
+
+struct image_header_t {
+	uint16_t magic;
+	uint16_t version;
+	uint32_t size;
+};
+
+struct validate_flash_t {
+	int status;
+	void *buf;
+	uint32_t buf_size;
+	uint32_t result;
+};
+
+struct manage_flash_t {
+	int status;
+};
+
+struct update_flash_t {
+	int status;
+};
+
+enum OpalThreadStatus {
+	OPAL_THREAD_INACTIVE = 0,
+	OPAL_THREAD_STARTED = 1,
+	OPAL_THREAD_UNAVAILABLE = 2,
+};
+
+enum {
+	DDW_QUERY_PE_DMA_WIN = 0,
+	DDW_CREATE_PE_DMA_WIN = 1,
+	DDW_REMOVE_PE_DMA_WIN = 2,
+	DDW_APPLICABLE_SIZE = 3,
+};
+
+enum {
+	DDW_EXT_SIZE = 0,
+	DDW_EXT_RESET_DMA_WIN = 1,
+	DDW_EXT_QUERY_OUT_SIZE = 2,
+};
+
+struct dynamic_dma_window_prop {
+	__be32 liobn;
+	__be64 dma_base;
+	__be32 tce_shift;
+	__be32 window_shift;
+};
+
+struct dma_win {
+	struct device_node *device;
+	const struct dynamic_dma_window_prop *prop;
 	struct list_head list;
-	struct vt_event event;
-	int done;
 };
 
-struct compat_consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	compat_caddr_t chardata;
+struct ddw_query_response {
+	u32 windows_available;
+	u64 largest_available_block;
+	u32 page_size;
+	u32 migration_capable;
 };
 
-struct compat_console_font_op {
-	compat_uint_t op;
-	compat_uint_t flags;
-	compat_uint_t width;
-	compat_uint_t height;
-	compat_uint_t charcount;
-	compat_caddr_t data;
+struct ddw_create_response {
+	u32 liobn;
+	u32 addr_hi;
+	u32 addr_lo;
 };
 
-struct compat_unimapdesc {
-	short unsigned int entry_ct;
-	compat_caddr_t entries;
+struct failed_ddw_pdn {
+	struct device_node *pdn;
+	struct list_head list;
 };
 
-struct vt_notifier_param {
-	struct vc_data *vc;
-	unsigned int c;
+struct rtas_fadump_section {
+	__be32 request_flag;
+	__be16 source_data_type;
+	__be16 error_flags;
+	__be64 source_address;
+	__be64 source_len;
+	__be64 bytes_dumped;
+	__be64 destination_address;
 };
 
-struct vcs_poll_data {
-	struct notifier_block notifier;
-	unsigned int cons_num;
-	int event;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
+struct rtas_fadump_section_header {
+	__be32 dump_format_version;
+	__be16 dump_num_sections;
+	__be16 dump_status_flag;
+	__be32 offset_first_dump_section;
+	__be32 dd_block_size;
+	__be64 dd_block_offset;
+	__be64 dd_num_blocks;
+	__be32 dd_offset_disk_path;
+	__be32 max_time_auto;
+};
+
+struct rtas_fadump_mem_struct {
+	struct rtas_fadump_section_header header;
+	struct rtas_fadump_section cpu_state_data;
+	struct rtas_fadump_section hpte_region;
+	struct rtas_fadump_section rmr_region;
+};
+
+struct rtas_fadump_reg_save_area_header {
+	__be64 magic_number;
+	__be32 version;
+	__be32 num_cpu_offset;
+};
+
+struct rtas_fadump_reg_entry {
+	__be64 reg_id;
+	__be64 reg_value;
+};
+
+struct kvmppc_xive_src_block;
+
+struct kvmppc_xive_ops;
+
+struct kvmppc_xive {
+	struct kvm *kvm;
+	struct kvm_device *dev;
+	struct dentry *dentry;
+	u32 vp_base;
+	struct kvmppc_xive_src_block *src_blocks[1024];
+	u32 max_sbid;
+	u32 src_count;
+	u32 saved_src_count;
+	u32 delayed_irqs;
+	u8 qmap;
+	u32 q_order;
+	u32 q_page_order;
+	u8 flags;
+	u32 nr_servers;
+	struct kvmppc_xive_ops *ops;
+	struct address_space *mapping;
+	struct mutex mapping_lock;
+	struct mutex lock;
+};
+
+struct kvmppc_xive_vcpu {
+	struct kvmppc_xive *xive;
+	struct kvm_vcpu *vcpu;
+	bool valid;
+	u32 server_num;
+	u32 vp_id;
+	u32 vp_chip_id;
+	u32 vp_cam;
+	u32 vp_ipi;
+	struct xive_irq_data vp_ipi_data;
+	uint8_t cppr;
+	uint8_t hw_cppr;
+	uint8_t mfrr;
+	uint8_t pending;
+	struct xive_q queues[8];
+	u32 esc_virq[8];
+	char *esc_virq_names[8];
+	u32 delayed_irq;
+	u64 stat_rm_h_xirr;
+	u64 stat_rm_h_ipoll;
+	u64 stat_rm_h_cppr;
+	u64 stat_rm_h_eoi;
+	u64 stat_rm_h_ipi;
+	u64 stat_vm_h_xirr;
+	u64 stat_vm_h_ipoll;
+	u64 stat_vm_h_cppr;
+	u64 stat_vm_h_eoi;
+	u64 stat_vm_h_ipi;
+};
+
+struct kvmppc_xive_irq_state {
+	bool valid;
+	u32 number;
+	u32 ipi_number;
+	struct xive_irq_data ipi_data;
+	u32 pt_number;
+	struct xive_irq_data *pt_data;
+	u8 guest_priority;
+	u8 saved_priority;
+	u32 act_server;
+	u8 act_priority;
+	bool in_eoi;
+	bool old_p;
+	bool old_q;
+	bool lsi;
+	bool asserted;
+	bool in_queue;
+	bool saved_p;
+	bool saved_q;
+	u8 saved_scan_prio;
+	u32 eisn;
+};
+
+struct kvmppc_xive_src_block {
+	arch_spinlock_t lock;
+	u16 id;
+	struct kvmppc_xive_irq_state irq_state[1024];
+};
+
+struct kvmppc_xive_ops {
+	int (*reset_mapped)(struct kvm *, long unsigned int);
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+struct kthread_create_info {
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread {
+	long unsigned int flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	char *full_name;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
+enum {
+	GP_IDLE = 0,
+	GP_ENTER = 1,
+	GP_PASSED = 2,
+	GP_EXIT = 3,
+	GP_REPLAY = 4,
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+struct seccomp_notif_sizes {
+	__u16 seccomp_notif;
+	__u16 seccomp_notif_resp;
+	__u16 seccomp_data;
+};
+
+struct seccomp_notif {
+	__u64 id;
+	__u32 pid;
+	__u32 flags;
+	struct seccomp_data data;
+};
+
+struct seccomp_notif_resp {
+	__u64 id;
+	__s64 val;
+	__s32 error;
+	__u32 flags;
+};
+
+struct seccomp_notif_addfd {
+	__u64 id;
+	__u32 flags;
+	__u32 srcfd;
+	__u32 newfd;
+	__u32 newfd_flags;
+};
+
+struct action_cache {
+	long unsigned int allow_native[8];
+};
+
+struct notification;
+
+struct seccomp_filter {
+	refcount_t refs;
+	refcount_t users;
+	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
+	struct seccomp_filter *prev;
+	struct bpf_prog *prog;
+	struct notification *notif;
+	struct mutex notify_lock;
+	wait_queue_head_t wqh;
+};
+
+enum notify_state {
+	SECCOMP_NOTIFY_INIT = 0,
+	SECCOMP_NOTIFY_SENT = 1,
+	SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_knotif {
+	struct task_struct *task;
+	u64 id;
+	const struct seccomp_data *data;
+	enum notify_state state;
+	int error;
+	long int val;
+	u32 flags;
+	struct completion ready;
+	struct list_head list;
+	struct list_head addfd;
+};
+
+struct seccomp_kaddfd {
+	struct file *file;
+	int fd;
+	unsigned int flags;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
+	struct completion completion;
+	struct list_head list;
+};
+
+struct notification {
+	struct semaphore request;
+	u64 next_id;
+	struct list_head notifications;
+};
+
+struct seccomp_log_name {
+	u32 log;
+	const char *name;
+};
+
+struct syscall_trace_enter {
+	struct trace_entry ent;
+	int nr;
+	long unsigned int args[0];
+};
+
+struct syscall_trace_exit {
+	struct trace_entry ent;
+	int nr;
+	long int ret;
+};
+
+struct syscall_tp_t {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int ret;
+};
+
+struct syscall_tp_t___2 {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int args[6];
+};
+
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
+};
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct audit_buffer;
+
+typedef void compound_page_dtor(struct page *);
+
+typedef int fpi_t;
+
+struct mminit_pfnnid_cache {
+	long unsigned int last_start;
+	long unsigned int last_end;
+	int last_nid;
+};
+
+typedef struct {
+	long unsigned int fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+typedef struct {
+	long unsigned int *in;
+	long unsigned int *out;
+	long unsigned int *ex;
+	long unsigned int *res_in;
+	long unsigned int *res_out;
+	long unsigned int *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t *p;
+	size_t size;
+};
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+struct mpage_readpage_args {
+	struct bio *bio;
+	struct folio *folio;
+	unsigned int nr_pages;
+	bool is_readahead;
+	sector_t last_block_in_bio;
+	struct buffer_head map_bh;
+	long unsigned int first_logical_block;
+	get_block_t *get_block;
+};
+
+struct mpage_data {
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	get_block_t *get_block;
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+};
+
+struct ext4_getfsmap_info {
+	struct ext4_fsmap_head *gfi_head;
+	ext4_fsmap_format_t gfi_formatter;
+	void *gfi_format_arg;
+	ext4_fsblk_t gfi_next_fsblk;
+	u32 gfi_dev;
+	ext4_group_t gfi_agno;
+	struct ext4_fsmap gfi_low;
+	struct ext4_fsmap gfi_high;
+	struct ext4_fsmap gfi_lastfree;
+	struct list_head gfi_meta_list;
+	bool gfi_last;
+};
+
+struct ext4_getfsmap_dev {
+	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+	u32 gfd_dev;
+};
+
+struct fatent_ra {
+	sector_t cur;
+	sector_t limit;
+	unsigned int ra_blocks;
+	sector_t ra_advance;
+	sector_t ra_next;
+	sector_t ra_limit;
+};
+
+struct isofs_fid {
+	u32 block;
+	u16 offset;
+	u16 parent_offset;
+	u32 generation;
+	u32 parent_block;
+	u32 parent_generation;
+};
+
+enum pnfs_iomode {
+	IOMODE_READ = 1,
+	IOMODE_RW = 2,
+	IOMODE_ANY = 3,
+};
+
+struct trace_event_raw_nfs_inode_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_inode_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	unsigned char type;
+	u64 fileid;
+	u64 version;
+	loff_t size;
+	long unsigned int nfsi_flags;
+	long unsigned int cache_validity;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_access_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	unsigned char type;
+	u64 fileid;
+	u64 version;
+	loff_t size;
+	long unsigned int nfsi_flags;
+	long unsigned int cache_validity;
+	unsigned int mask;
+	unsigned int permitted;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_update_size_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t cur_size;
+	loff_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_inode_range_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t range_start;
+	loff_t range_end;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readdir_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	char verifier[8];
+	u64 cookie;
+	long unsigned int index;
+	unsigned int dtsize;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_lookup_event {
+	struct trace_entry ent;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_lookup_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_atomic_open_enter {
+	struct trace_entry ent;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_atomic_open_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_create_enter {
+	struct trace_entry ent;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_create_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_directory_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_directory_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_link_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_link_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_rename_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 old_dir;
+	u64 new_dir;
+	u32 __data_loc_old_name;
+	u32 __data_loc_new_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_rename_event_done {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 old_dir;
+	u32 __data_loc_old_name;
+	u64 new_dir;
+	u32 __data_loc_new_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_sillyrename_unlink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readpage {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readpage_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	int ret;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readahead {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	unsigned int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readahead_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	int ret;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	unsigned int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_read {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readpage_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	bool eof;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readpage_short {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	bool eof;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fscache_page_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fscache_page_event_done {
+	struct trace_entry ent;
+	int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_pgio_error {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	loff_t pos;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_write {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	long unsigned int stable;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_writeback_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	int error;
+	long unsigned int stable;
+	char verifier[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_page_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	unsigned int count;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_commit_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	int error;
+	long unsigned int stable;
+	char verifier[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_direct_req_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u32 fhandle;
+	loff_t offset;
+	ssize_t count;
+	ssize_t bytes_left;
+	ssize_t error;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fh_to_dentry {
+	struct trace_entry ent;
+	int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_assign {
+	struct trace_entry ent;
+	u32 __data_loc_option;
+	u32 __data_loc_value;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_option {
+	struct trace_entry ent;
+	u32 __data_loc_option;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_path {
+	struct trace_entry ent;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_xdr_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int version;
+	long unsigned int error;
+	u32 __data_loc_program;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nfs_inode_event {};
+
+struct trace_event_data_offsets_nfs_inode_event_done {};
+
+struct trace_event_data_offsets_nfs_access_exit {};
+
+struct trace_event_data_offsets_nfs_update_size_class {};
+
+struct trace_event_data_offsets_nfs_inode_range_event {};
+
+struct trace_event_data_offsets_nfs_readdir_event {};
+
+struct trace_event_data_offsets_nfs_lookup_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_lookup_event_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_atomic_open_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_atomic_open_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_create_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_create_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_directory_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_directory_event_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_link_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_link_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_rename_event {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_nfs_rename_event_done {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_nfs_sillyrename_unlink {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_aop_readpage {};
+
+struct trace_event_data_offsets_nfs_aop_readpage_done {};
+
+struct trace_event_data_offsets_nfs_aop_readahead {};
+
+struct trace_event_data_offsets_nfs_aop_readahead_done {};
+
+struct trace_event_data_offsets_nfs_initiate_read {};
+
+struct trace_event_data_offsets_nfs_readpage_done {};
+
+struct trace_event_data_offsets_nfs_readpage_short {};
+
+struct trace_event_data_offsets_nfs_fscache_page_event {};
+
+struct trace_event_data_offsets_nfs_fscache_page_event_done {};
+
+struct trace_event_data_offsets_nfs_pgio_error {};
+
+struct trace_event_data_offsets_nfs_initiate_write {};
+
+struct trace_event_data_offsets_nfs_writeback_done {};
+
+struct trace_event_data_offsets_nfs_page_error_class {};
+
+struct trace_event_data_offsets_nfs_initiate_commit {};
+
+struct trace_event_data_offsets_nfs_commit_done {};
+
+struct trace_event_data_offsets_nfs_direct_req_class {};
+
+struct trace_event_data_offsets_nfs_fh_to_dentry {};
+
+struct trace_event_data_offsets_nfs_mount_assign {
+	u32 option;
+	u32 value;
+};
+
+struct trace_event_data_offsets_nfs_mount_option {
+	u32 option;
+};
+
+struct trace_event_data_offsets_nfs_mount_path {
+	u32 path;
+};
+
+struct trace_event_data_offsets_nfs_xdr_event {
+	u32 program;
+	u32 procedure;
+};
+
+typedef void (*btf_trace_nfs_set_inode_stale)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_refresh_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_refresh_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_revalidate_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_revalidate_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_invalidate_mapping_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_invalidate_mapping_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_getattr_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_getattr_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_setattr_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_setattr_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_writeback_page_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_writeback_page_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_writeback_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_writeback_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_fsync_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_fsync_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_access_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_set_cache_invalid)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_readdir_force_readdirplus)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_readdir_cache_fill_done)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_readdir_uncached_done)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_access_exit)(void *, const struct inode *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_nfs_size_truncate)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_wcc)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_update)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_grow)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_readdir_invalidate_cache_range)(void *, const struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_nfs_readdir_cache_fill)(void *, const struct file *, const __be32 *, u64, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_uncached)(void *, const struct file *, const __be32 *, u64, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_lookup_revalidate_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_revalidate_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_readdir_lookup)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_lookup_revalidate_failed)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_lookup_revalidate)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_atomic_open_enter)(void *, const struct inode *, const struct nfs_open_context *, unsigned int);
+
+typedef void (*btf_trace_nfs_atomic_open_exit)(void *, const struct inode *, const struct nfs_open_context *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_create_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_create_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_mknod_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_mknod_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_mkdir_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_mkdir_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_rmdir_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_rmdir_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_remove_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_remove_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_unlink_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_unlink_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_symlink_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_symlink_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_link_enter)(void *, const struct inode *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_link_exit)(void *, const struct inode *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_rename_enter)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_rename_exit)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_sillyrename_rename)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_sillyrename_unlink)(void *, const struct nfs_unlinkdata *, int);
+
+typedef void (*btf_trace_nfs_aop_readpage)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_aop_readpage_done)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_aop_readahead)(void *, const struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_nfs_aop_readahead_done)(void *, const struct inode *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_initiate_read)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_readpage_done)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_readpage_short)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_fscache_read_page)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_fscache_read_page_exit)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_fscache_write_page)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_fscache_write_page_exit)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_pgio_error)(void *, const struct nfs_pgio_header *, int, loff_t);
+
+typedef void (*btf_trace_nfs_initiate_write)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_writeback_done)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_write_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_comp_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_commit_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_initiate_commit)(void *, const struct nfs_commit_data *);
+
+typedef void (*btf_trace_nfs_commit_done)(void *, const struct rpc_task *, const struct nfs_commit_data *);
+
+typedef void (*btf_trace_nfs_direct_commit_complete)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_resched_write)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_complete)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_completion)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_schedule_iovec)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_reschedule_io)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_fh_to_dentry)(void *, const struct super_block *, const struct nfs_fh *, u64, int);
+
+typedef void (*btf_trace_nfs_mount_assign)(void *, const char *, const char *);
+
+typedef void (*btf_trace_nfs_mount_option)(void *, const struct fs_parameter *);
+
+typedef void (*btf_trace_nfs_mount_path)(void *, const char *);
+
+typedef void (*btf_trace_nfs_xdr_status)(void *, const struct xdr_stream *, int);
+
+typedef void (*btf_trace_nfs_xdr_bad_filehandle)(void *, const struct xdr_stream *, int);
+
+struct nfs_referral_count {
+	struct list_head list;
+	const struct task_struct *task;
+	unsigned int referral_count;
+};
+
+struct xfs_attri_log_nameval {
+	struct xfs_log_iovec name;
+	struct xfs_log_iovec value;
+	refcount_t refcount;
+};
+
+struct xfs_dqblk {
+	struct xfs_disk_dquot dd_diskdq;
+	char dd_fill[4];
+	__be32 dd_crc;
+	__be64 dd_lsn;
+	uuid_t dd_uuid;
+};
+
+enum {
+	XFS_QM_TRANS_USR = 0,
+	XFS_QM_TRANS_GRP = 1,
+	XFS_QM_TRANS_PRJ = 2,
+	XFS_QM_TRANS_DQTYPES = 3,
+};
+
+struct xfs_attri_log_format {
+	uint16_t alfi_type;
+	uint16_t alfi_size;
+	uint32_t __pad;
+	uint64_t alfi_id;
+	uint64_t alfi_ino;
+	uint32_t alfi_op_flags;
+	uint32_t alfi_name_len;
+	uint32_t alfi_value_len;
+	uint32_t alfi_attr_filter;
+};
+
+struct xfs_attrd_log_format {
+	uint16_t alfd_type;
+	uint16_t alfd_size;
+	uint32_t __pad;
+	uint64_t alfd_alf_id;
+};
+
+struct xfs_attri_log_item {
+	struct xfs_log_item attri_item;
+	atomic_t attri_refcount;
+	struct xfs_attri_log_nameval *attri_nameval;
+	struct xfs_attri_log_format attri_format;
+};
+
+struct xfs_attrd_log_item {
+	struct xfs_log_item attrd_item;
+	struct xfs_attri_log_item *attrd_attrip;
+	struct xfs_attrd_log_format attrd_format;
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct crypto_test_param {
+	char driver[128];
+	char alg[128];
+	u32 type;
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 pad;
+	__u64 resv[3];
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u16 nbufs;
+	__u16 bid;
+};
+
+struct logo_data {
+	int depth;
+	int needs_directpalette;
+	int needs_truepalette;
+	int needs_cmapreset;
+	const struct linux_logo *logo;
+};
+
+typedef uint32_t char32_t;
+
+struct uni_screen {
+	char32_t *lines[0];
 };
 
 struct tiocl_selection {
@@ -96079,165 +116010,6 @@
 	short unsigned int sel_mode;
 };
 
-struct vc_selection {
-	struct mutex lock;
-	struct vc_data *cons;
-	char *buffer;
-	unsigned int buf_len;
-	volatile int start;
-	int end;
-};
-
-enum led_brightness {
-	LED_OFF = 0,
-	LED_ON = 1,
-	LED_HALF = 127,
-	LED_FULL = 255,
-};
-
-struct led_hw_trigger_type {
-	int dummy;
-};
-
-struct led_pattern;
-
-struct led_trigger;
-
-struct led_classdev {
-	const char *name;
-	enum led_brightness brightness;
-	enum led_brightness max_brightness;
-	int flags;
-	long unsigned int work_flags;
-	void (*brightness_set)(struct led_classdev *, enum led_brightness);
-	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
-	enum led_brightness (*brightness_get)(struct led_classdev *);
-	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
-	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
-	int (*pattern_clear)(struct led_classdev *);
-	struct device *dev;
-	const struct attribute_group **groups;
-	struct list_head node;
-	const char *default_trigger;
-	long unsigned int blink_delay_on;
-	long unsigned int blink_delay_off;
-	struct timer_list blink_timer;
-	int blink_brightness;
-	int new_blink_brightness;
-	void (*flash_resume)(struct led_classdev *);
-	struct work_struct set_brightness_work;
-	int delayed_set_value;
-	struct rw_semaphore trigger_lock;
-	struct led_trigger *trigger;
-	struct list_head trig_list;
-	void *trigger_data;
-	bool activated;
-	struct led_hw_trigger_type *trigger_type;
-	struct mutex led_access;
-};
-
-struct led_pattern {
-	u32 delta_t;
-	int brightness;
-};
-
-struct led_trigger {
-	const char *name;
-	int (*activate)(struct led_classdev *);
-	void (*deactivate)(struct led_classdev *);
-	struct led_hw_trigger_type *trigger_type;
-	rwlock_t leddev_list_lock;
-	struct list_head led_cdevs;
-	struct list_head next_trig;
-	const struct attribute_group **groups;
-};
-
-struct keyboard_notifier_param {
-	struct vc_data *vc;
-	int down;
-	int shift;
-	int ledstate;
-	unsigned int value;
-};
-
-struct kbd_struct {
-	unsigned char lockstate;
-	unsigned char slockstate;
-	unsigned char ledmode: 1;
-	unsigned char ledflagstate: 4;
-	char: 3;
-	unsigned char default_ledflagstate: 4;
-	unsigned char kbdmode: 3;
-	char: 1;
-	unsigned char modeflags: 5;
-};
-
-struct kbentry {
-	unsigned char kb_table;
-	unsigned char kb_index;
-	short unsigned int kb_value;
-};
-
-struct kbsentry {
-	unsigned char kb_func;
-	unsigned char kb_string[512];
-};
-
-struct kbdiacr {
-	unsigned char diacr;
-	unsigned char base;
-	unsigned char result;
-};
-
-struct kbdiacrs {
-	unsigned int kb_cnt;
-	struct kbdiacr kbdiacr[256];
-};
-
-struct kbdiacruc {
-	unsigned int diacr;
-	unsigned int base;
-	unsigned int result;
-};
-
-struct kbdiacrsuc {
-	unsigned int kb_cnt;
-	struct kbdiacruc kbdiacruc[256];
-};
-
-struct kbkeycode {
-	unsigned int scancode;
-	unsigned int keycode;
-};
-
-typedef void k_handler_fn(struct vc_data *, unsigned char, char);
-
-typedef void fn_handler_fn(struct vc_data *);
-
-struct getset_keycode_data {
-	struct input_keymap_entry ke;
-	int error;
-};
-
-struct kbd_led_trigger {
-	struct led_trigger trigger;
-	unsigned int mask;
-};
-
-struct uni_pagedir {
-	u16 **uni_pgdir[32];
-	long unsigned int refcount;
-	long unsigned int sum;
-	unsigned char *inverse_translations[4];
-	u16 *inverse_trans_unicode;
-};
-
-typedef uint32_t char32_t;
-
-struct uni_screen {
-	char32_t *lines[0];
-};
-
 struct con_driver {
 	const struct consw *con;
 	const char *desc;
@@ -96282,6 +116054,9 @@
 	ESnonstd = 10,
 	ESpalette = 11,
 	ESosc = 12,
+	ESapc = 13,
+	ESpm = 14,
+	ESdcs = 15,
 };
 
 struct interval {
@@ -96295,2097 +116070,3560 @@
 	int x;
 };
 
-struct hvsi_priv {
-	unsigned int inbuf_len;
-	unsigned char inbuf[255];
-	unsigned int inbuf_cur;
-	unsigned int inbuf_pktlen;
-	atomic_t seqno;
-	unsigned int opened: 1;
-	unsigned int established: 1;
-	unsigned int is_console: 1;
-	unsigned int mctrl_update: 1;
-	short unsigned int mctrl;
-	struct tty_struct *tty;
-	int (*get_chars)(uint32_t, char *, int);
-	int (*put_chars)(uint32_t, const char *, int);
-	uint32_t termno;
+struct nvdimm_pmu {
+	struct pmu pmu;
+	struct device *dev;
+	int cpu;
+	struct hlist_node node;
+	enum cpuhp_state cpuhp_state;
+	struct cpumask arch_cpumask;
 };
 
-struct hv_ops;
-
-struct hvc_struct {
-	struct tty_port port;
-	spinlock_t lock;
-	int index;
-	int do_wakeup;
-	char *outbuf;
-	int outbuf_size;
-	int n_outbuf;
-	uint32_t vtermno;
-	const struct hv_ops *ops;
-	int irq_requested;
-	int data;
-	struct winsize ws;
-	struct work_struct tty_resize;
-	struct list_head next;
-	long unsigned int flags;
+enum {
+	CTL_RES_CNT = 1,
 };
 
-struct hv_ops {
-	int (*get_chars)(uint32_t, char *, int);
-	int (*put_chars)(uint32_t, const char *, int);
-	int (*flush)(uint32_t, bool);
-	int (*notifier_add)(struct hvc_struct *, int);
-	void (*notifier_del)(struct hvc_struct *, int);
-	void (*notifier_hangup)(struct hvc_struct *, int);
-	int (*tiocmget)(struct hvc_struct *);
-	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
-	void (*dtr_rts)(struct hvc_struct *, int);
+enum {
+	CTL_RES_TM = 2,
 };
 
-enum hv_protocol {
-	HV_PROTOCOL_RAW = 0,
-	HV_PROTOCOL_HVSI = 1,
+enum {
+	POWERON_SECS = 3,
 };
 
-typedef enum hv_protocol hv_protocol_t;
-
-struct hvterm_priv {
-	u32 termno;
-	hv_protocol_t proto;
-	struct hvsi_priv hvsi;
-	spinlock_t buf_lock;
-	char buf[16];
-	int left;
-	int offset;
+enum {
+	MEM_LIFE = 4,
 };
 
-struct hvsi_header {
-	uint8_t type;
-	uint8_t len;
-	__be16 seqno;
+enum {
+	CRI_RES_UTIL = 5,
 };
 
-struct hvsi_data {
-	struct hvsi_header hdr;
-	uint8_t data[12];
+enum {
+	HOST_L_CNT = 6,
 };
 
-struct hvsi_control {
-	struct hvsi_header hdr;
-	__be16 verb;
-	__be32 word;
-	__be32 mask;
-} __attribute__((packed));
-
-struct hvsi_query {
-	struct hvsi_header hdr;
-	__be16 verb;
+enum {
+	HOST_S_CNT = 7,
 };
 
-struct hvsi_query_response {
-	struct hvsi_header hdr;
-	__be16 verb;
-	__be16 query_seqno;
+enum {
+	HOST_S_DUR = 8,
+};
+
+enum {
+	HOST_L_DUR = 9,
+};
+
+enum {
+	MED_R_CNT = 10,
+};
+
+enum {
+	MED_W_CNT = 11,
+};
+
+enum {
+	MED_R_DUR = 12,
+};
+
+enum {
+	MED_W_DUR = 13,
+};
+
+enum {
+	CACHE_RH_CNT = 14,
+};
+
+enum {
+	CACHE_WH_CNT = 15,
+};
+
+enum {
+	FAST_W_CNT = 16,
+};
+
+struct nvdimm_bus;
+
+struct of_pmem_private {
+	struct nvdimm_bus_descriptor bus_desc;
+	struct nvdimm_bus *bus;
+};
+
+struct ata_acpi_drive {
+	u32 pio;
+	u32 dma;
+};
+
+struct ata_acpi_gtm {
+	struct ata_acpi_drive drive[2];
+	u32 flags;
+};
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct mii_phy;
+
+struct mii_phy_ops {
+	int (*init)(struct mii_phy *);
+	int (*suspend)(struct mii_phy *);
+	int (*setup_aneg)(struct mii_phy *, u32);
+	int (*setup_forced)(struct mii_phy *, int, int);
+	int (*poll_link)(struct mii_phy *);
+	int (*read_link)(struct mii_phy *);
+	int (*enable_fiber)(struct mii_phy *, int);
+};
+
+struct mii_phy_def;
+
+struct mii_phy {
+	struct mii_phy_def *def;
+	u32 advertising;
+	int mii_id;
+	int autoneg;
+	int speed;
+	int duplex;
+	int pause;
+	struct net_device *dev;
+	int (*mdio_read)(struct net_device *, int, int);
+	void (*mdio_write)(struct net_device *, int, int, int);
+	void *platform_data;
+};
+
+struct mii_phy_def {
+	u32 phy_id;
+	u32 phy_id_mask;
+	u32 features;
+	int magic_aneg;
+	const char *name;
+	const struct mii_phy_ops *ops;
+};
+
+enum {
+	BCM54XX_COPPER = 0,
+	BCM54XX_FIBER = 1,
+	BCM54XX_GBIC = 2,
+	BCM54XX_SGMII = 3,
+	BCM54XX_UNKNOWN = 4,
+};
+
+struct usb_class {
+	struct kref kref;
+	struct class *class;
+};
+
+struct usb_phy_roothub {
+	struct phy___2 *phy;
+	struct list_head list;
+};
+
+struct psmouse_smbus_dev {
+	struct i2c_board_info board;
+	struct psmouse *psmouse;
+	struct i2c_client *client;
+	struct list_head node;
+	bool dead;
+	bool need_deactivate;
+};
+
+struct psmouse_smbus_removal_work {
+	struct work_struct work;
+	struct i2c_client *client;
+};
+
+struct serial_info {
+	struct rb_node node;
+	sector_t start;
+	sector_t last;
+	sector_t _subtree_last;
+};
+
+struct raid1_info {
+	struct md_rdev *rdev;
+	sector_t head_position;
+	sector_t next_seq_sect;
+	sector_t seq_start;
+};
+
+struct pool_info {
+	struct mddev *mddev;
+	int raid_disks;
+};
+
+struct r1conf {
+	struct mddev *mddev;
+	struct raid1_info *mirrors;
+	int raid_disks;
+	spinlock_t device_lock;
+	struct list_head retry_list;
+	struct list_head bio_end_io_list;
+	struct bio_list pending_bio_list;
+	wait_queue_head_t wait_barrier;
+	spinlock_t resync_lock;
+	atomic_t nr_sync_pending;
+	atomic_t *nr_pending;
+	atomic_t *nr_waiting;
+	atomic_t *nr_queued;
+	atomic_t *barrier;
+	int array_frozen;
+	int fullsync;
+	int recovery_disabled;
+	struct pool_info *poolinfo;
+	mempool_t r1bio_pool;
+	mempool_t r1buf_pool;
+	struct bio_set bio_split;
+	struct page *tmppage;
+	struct md_thread *thread;
+	sector_t cluster_sync_low;
+	sector_t cluster_sync_high;
+};
+
+struct r1bio {
+	atomic_t remaining;
+	atomic_t behind_remaining;
+	sector_t sector;
+	int sectors;
+	long unsigned int state;
+	long unsigned int start_time;
+	struct mddev *mddev;
+	struct bio *master_bio;
+	int read_disk;
+	struct list_head retry_list;
+	struct bio *behind_master_bio;
+	struct bio *bios[0];
+};
+
+enum r1bio_state {
+	R1BIO_Uptodate = 0,
+	R1BIO_IsSync = 1,
+	R1BIO_Degraded = 2,
+	R1BIO_BehindIO = 3,
+	R1BIO_ReadError = 4,
+	R1BIO_Returned = 5,
+	R1BIO_MadeGood = 6,
+	R1BIO_WriteError = 7,
+	R1BIO_FailFast = 8,
+};
+
+struct resync_pages {
+	void *raid_bio;
+	struct page *pages[1];
+};
+
+struct raid1_plug_cb {
+	struct blk_plug_cb cb;
+	struct bio_list pending;
+};
+
+struct instance_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
+	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
+};
+
+struct edac_pci_dev_attribute {
+	struct attribute attr;
+	void *value;
+	ssize_t (*show)(void *, char *);
+	ssize_t (*store)(void *, const char *, size_t);
+};
+
+typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
+
+struct cop_symcpb_aes_ecb {
+	u8 key[32];
+	u8 __rsvd[80];
+};
+
+struct cop_symcpb_aes_cbc {
+	u8 iv[16];
+	u8 key[32];
+	u8 cv[16];
+	u32 spbc;
+	u8 __rsvd[44];
+};
+
+struct cop_symcpb_aes_gca {
+	u8 in_pat[16];
+	u8 key[32];
+	u8 out_pat[16];
+	u32 spbc;
+	u8 __rsvd[44];
+};
+
+struct cop_symcpb_aes_gcm {
+	u8 in_pat_or_aad[16];
+	u8 iv_or_cnt[16];
+	u64 bit_length_aad;
+	u64 bit_length_data;
+	u8 in_s0[16];
+	u8 key[32];
+	u8 __rsvd1[16];
+	u8 out_pat_or_mac[16];
+	u8 out_s0[16];
+	u8 out_cnt[16];
+	u32 spbc;
+	u8 __rsvd2[12];
+};
+
+struct cop_symcpb_aes_ctr {
+	u8 iv[16];
+	u8 key[32];
+	u8 cv[16];
+	u32 spbc;
+	u8 __rsvd2[44];
+};
+
+struct cop_symcpb_aes_cca {
+	u8 b0[16];
+	u8 b1[16];
+	u8 key[16];
+	u8 out_pat_or_b0[16];
+	u32 spbc;
+	u8 __rsvd[44];
+};
+
+struct cop_symcpb_aes_ccm {
+	u8 in_pat_or_b0[16];
+	u8 iv_or_ctr[16];
+	u8 in_s0[16];
+	u8 key[16];
+	u8 __rsvd1[48];
+	u8 out_pat_or_mac[16];
+	u8 out_s0[16];
+	u8 out_ctr[16];
+	u32 spbc;
+	u8 __rsvd2[12];
+};
+
+struct cop_symcpb_aes_xcbc {
+	u8 cv[16];
+	u8 key[16];
+	u8 __rsvd1[16];
+	u8 out_cv_mac[16];
+	u32 spbc;
+	u8 __rsvd2[44];
+};
+
+struct cop_symcpb_sha256 {
+	u64 message_bit_length;
+	u64 __rsvd1;
+	u8 input_partial_digest[32];
+	u8 message_digest[32];
+	u32 spbc;
+	u8 __rsvd2[44];
+};
+
+struct cop_symcpb_sha512 {
+	u64 message_bit_length_hi;
+	u64 message_bit_length_lo;
+	u8 input_partial_digest[64];
+	u8 __rsvd1[32];
+	u8 message_digest[64];
+	u32 spbc;
+	u8 __rsvd2[76];
+};
+
+struct cop_symcpb_header {
+	u8 mode;
+	u8 fdm;
+	u8 ks_ds;
+	u8 pad_byte;
+	u8 __rsvd[12];
+};
+
+struct cop_parameter_block {
+	struct cop_symcpb_header hdr;
 	union {
-		uint8_t version;
-		__be32 mctrl_word;
+		struct cop_symcpb_aes_ecb aes_ecb;
+		struct cop_symcpb_aes_cbc aes_cbc;
+		struct cop_symcpb_aes_gca aes_gca;
+		struct cop_symcpb_aes_gcm aes_gcm;
+		struct cop_symcpb_aes_cca aes_cca;
+		struct cop_symcpb_aes_ccm aes_ccm;
+		struct cop_symcpb_aes_ctr aes_ctr;
+		struct cop_symcpb_aes_xcbc aes_xcbc;
+		struct cop_symcpb_sha256 sha256;
+		struct cop_symcpb_sha512 sha512;
+	};
+};
+
+struct cop_status_block {
+	u8 valid;
+	u8 crb_seq_number;
+	u8 completion_code;
+	u8 completion_extension;
+	__be32 processed_byte_count;
+	__be64 address;
+};
+
+struct nx_csbcpb {
+	unsigned char __rsvd[112];
+	struct cop_status_block csb;
+	struct cop_parameter_block cpb;
+};
+
+struct hv_nx_cop_caps {
+	__be64 descriptor;
+	__be64 req_max_processed_len;
+	__be64 min_compress_len;
+	__be64 min_decompress_len;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nx_cop_caps {
+	u64 descriptor;
+	u64 req_max_processed_len;
+	u64 min_compress_len;
+	u64 min_decompress_len;
+};
+
+struct nx842_workmem___2 {
+	char slin[4096];
+	char slout[4096];
+	struct nx_csbcpb csbcpb;
+	char padding[256];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ibm_nx842_counters {
+	atomic64_t comp_complete;
+	atomic64_t comp_failed;
+	atomic64_t decomp_complete;
+	atomic64_t decomp_failed;
+	atomic64_t swdecomp;
+	atomic64_t comp_times[32];
+	atomic64_t decomp_times[32];
+};
+
+struct nx842_devdata {
+	struct vio_dev *vdev;
+	struct device *dev;
+	struct ibm_nx842_counters *counters;
+	unsigned int max_sg_len;
+	unsigned int max_sync_size;
+	unsigned int max_sync_sg;
+};
+
+struct nx842_slentry {
+	__be64 ptr;
+	__be64 len;
+};
+
+struct nx842_scatterlist {
+	int entry_nr;
+	struct nx842_slentry *entries;
+};
+
+struct maxsynccop_t {
+	__be32 comp_elements;
+	__be32 comp_data_limit;
+	__be32 comp_sg_limit;
+	__be32 decomp_elements;
+	__be32 decomp_data_limit;
+	__be32 decomp_sg_limit;
+};
+
+struct ms_data {
+	long unsigned int quirks;
+	struct hid_device *hdev;
+	struct work_struct ff_worker;
+	__u8 strong;
+	__u8 weak;
+	void *output_report_dmabuf;
+};
+
+enum {
+	MAGNITUDE_STRONG = 2,
+	MAGNITUDE_WEAK = 3,
+	MAGNITUDE_NUM = 4,
+};
+
+struct xb1s_ff_report {
+	__u8 report_id;
+	__u8 enable;
+	__u8 magnitude[4];
+	__u8 duration_10ms;
+	__u8 start_delay_10ms;
+	__u8 loop_count;
+};
+
+struct of_bus___2 {
+	void (*count_cells)(const void *, int, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+};
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	__IFLA_BRPORT_MAX = 40,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[61];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[41];
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
+	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
+	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
+	SK_DIAG_BPF_STORAGE = 1,
+	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_NONE = 0,
+	SK_DIAG_BPF_STORAGE_PAD = 1,
+	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
+	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
+	__SK_DIAG_BPF_STORAGE_MAX = 4,
+};
+
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
+
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
+struct bpf_sk_storage_diag {
+	u32 nr_maps;
+	struct bpf_map *maps[0];
+};
+
+struct bpf_iter_seq_sk_storage_map_info {
+	struct bpf_map *map;
+	unsigned int bucket_id;
+	unsigned int skip_elems;
+};
+
+struct bpf_iter__bpf_sk_storage_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		struct sock *sk;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	struct xdp_frame frm;
+	u8 data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct prog_test_pass1 {
+	int x0;
+	struct {
+		int x1;
+		struct {
+			int x2;
+			struct {
+				int x3;
+			};
+		};
+	};
+};
+
+struct prog_test_pass2 {
+	int len;
+	short int arr1[4];
+	struct {
+		char arr2[4];
+		long unsigned int arr3[8];
+	} x;
+};
+
+struct prog_test_fail1 {
+	void *p;
+	int x;
+};
+
+struct prog_test_fail2 {
+	int x8;
+	struct prog_test_pass1 x;
+};
+
+struct prog_test_fail3 {
+	int len;
+	char arr1[2];
+	char arr2[0];
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
+	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
+	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum udp_parsable_tunnel_type {
+	UDP_TUNNEL_TYPE_VXLAN = 1,
+	UDP_TUNNEL_TYPE_GENEVE = 2,
+	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+enum udp_tunnel_nic_info_flags {
+	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
+	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
+	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
+	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+	struct ethnl_req_info req_info;
+	int pos_hash;
+	int pos_idx;
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+struct ping_table {
+	struct hlist_nulls_head hash[64];
+	spinlock_t lock;
+};
+
+struct bictcp {
+	u32 cnt;
+	u32 last_max_cwnd;
+	u32 last_cwnd;
+	u32 last_time;
+	u32 bic_origin_point;
+	u32 bic_K;
+	u32 delay_min;
+	u32 epoch_start;
+	u32 ack_cnt;
+	u32 tcp_cwnd;
+	u16 unused;
+	u8 sample_cnt;
+	u8 found;
+	u32 round_start;
+	u32 end_seq;
+	u32 last_ack;
+	u32 curr_rtt;
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+enum xprt_xid_rb_cmp {
+	XID_RB_EQUAL = 0,
+	XID_RB_LEFT = 1,
+	XID_RB_RIGHT = 2,
+};
+
+struct svc_xpt_user {
+	struct list_head list;
+	void (*callback)(struct svc_xpt_user *);
+};
+
+struct breakpoint {
+	struct list_head list;
+	struct perf_event *bp;
+	bool ptrace_bp;
+};
+
+typedef u32 uprobe_opcode_t;
+
+struct arch_uprobe {
+	union {
+		u32 insn[2];
+		u32 ixol[2];
+	};
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+struct dyn_arch_ftrace {
+	struct module *mod;
+};
+
+enum {
+	FTRACE_FL_ENABLED = 2147483648,
+	FTRACE_FL_REGS = 1073741824,
+	FTRACE_FL_REGS_EN = 536870912,
+	FTRACE_FL_TRAMP = 268435456,
+	FTRACE_FL_TRAMP_EN = 134217728,
+	FTRACE_FL_IPMODIFY = 67108864,
+	FTRACE_FL_DISABLED = 33554432,
+	FTRACE_FL_DIRECT = 16777216,
+	FTRACE_FL_DIRECT_EN = 8388608,
+};
+
+struct dyn_ftrace {
+	long unsigned int ip;
+	long unsigned int flags;
+	struct dyn_arch_ftrace arch;
+};
+
+struct mm_iommu_table_group_mem_t {
+	struct list_head next;
+	struct callback_head rcu;
+	long unsigned int used;
+	atomic64_t mapped;
+	unsigned int pageshift;
+	u64 ua;
+	u64 entries;
+	union {
+		struct page **hpages;
+		phys_addr_t *hpas;
+	};
+	u64 dev_hpa;
+};
+
+enum OpalHMI_Version {
+	OpalHMIEvt_V1 = 1,
+	OpalHMIEvt_V2 = 2,
+};
+
+enum OpalHMI_Severity {
+	OpalHMI_SEV_NO_ERROR = 0,
+	OpalHMI_SEV_WARNING = 1,
+	OpalHMI_SEV_ERROR_SYNC = 2,
+	OpalHMI_SEV_FATAL = 3,
+};
+
+enum OpalHMI_Disposition {
+	OpalHMI_DISPOSITION_RECOVERED = 0,
+	OpalHMI_DISPOSITION_NOT_RECOVERED = 1,
+};
+
+enum OpalHMI_ErrType {
+	OpalHMI_ERROR_MALFUNC_ALERT = 0,
+	OpalHMI_ERROR_PROC_RECOV_DONE = 1,
+	OpalHMI_ERROR_PROC_RECOV_DONE_AGAIN = 2,
+	OpalHMI_ERROR_PROC_RECOV_MASKED = 3,
+	OpalHMI_ERROR_TFAC = 4,
+	OpalHMI_ERROR_TFMR_PARITY = 5,
+	OpalHMI_ERROR_HA_OVERFLOW_WARN = 6,
+	OpalHMI_ERROR_XSCOM_FAIL = 7,
+	OpalHMI_ERROR_XSCOM_DONE = 8,
+	OpalHMI_ERROR_SCOM_FIR = 9,
+	OpalHMI_ERROR_DEBUG_TRIG_FIR = 10,
+	OpalHMI_ERROR_HYP_RESOURCE = 11,
+	OpalHMI_ERROR_CAPP_RECOVERY = 12,
+};
+
+enum OpalHMI_XstopType {
+	CHECKSTOP_TYPE_UNKNOWN = 0,
+	CHECKSTOP_TYPE_CORE = 1,
+	CHECKSTOP_TYPE_NX = 2,
+	CHECKSTOP_TYPE_NPU = 3,
+};
+
+enum OpalHMI_CoreXstopReason {
+	CORE_CHECKSTOP_IFU_REGFILE = 1,
+	CORE_CHECKSTOP_IFU_LOGIC = 2,
+	CORE_CHECKSTOP_PC_DURING_RECOV = 4,
+	CORE_CHECKSTOP_ISU_REGFILE = 8,
+	CORE_CHECKSTOP_ISU_LOGIC = 16,
+	CORE_CHECKSTOP_FXU_LOGIC = 32,
+	CORE_CHECKSTOP_VSU_LOGIC = 64,
+	CORE_CHECKSTOP_PC_RECOV_IN_MAINT_MODE = 128,
+	CORE_CHECKSTOP_LSU_REGFILE = 256,
+	CORE_CHECKSTOP_PC_FWD_PROGRESS = 512,
+	CORE_CHECKSTOP_LSU_LOGIC = 1024,
+	CORE_CHECKSTOP_PC_LOGIC = 2048,
+	CORE_CHECKSTOP_PC_HYP_RESOURCE = 4096,
+	CORE_CHECKSTOP_PC_HANG_RECOV_FAILED = 8192,
+	CORE_CHECKSTOP_PC_AMBI_HANG_DETECTED = 16384,
+	CORE_CHECKSTOP_PC_DEBUG_TRIG_ERR_INJ = 32768,
+	CORE_CHECKSTOP_PC_SPRD_HYP_ERR_INJ = 65536,
+};
+
+enum OpalHMI_NestAccelXstopReason {
+	NX_CHECKSTOP_SHM_INVAL_STATE_ERR = 1,
+	NX_CHECKSTOP_DMA_INVAL_STATE_ERR_1 = 2,
+	NX_CHECKSTOP_DMA_INVAL_STATE_ERR_2 = 4,
+	NX_CHECKSTOP_DMA_CH0_INVAL_STATE_ERR = 8,
+	NX_CHECKSTOP_DMA_CH1_INVAL_STATE_ERR = 16,
+	NX_CHECKSTOP_DMA_CH2_INVAL_STATE_ERR = 32,
+	NX_CHECKSTOP_DMA_CH3_INVAL_STATE_ERR = 64,
+	NX_CHECKSTOP_DMA_CH4_INVAL_STATE_ERR = 128,
+	NX_CHECKSTOP_DMA_CH5_INVAL_STATE_ERR = 256,
+	NX_CHECKSTOP_DMA_CH6_INVAL_STATE_ERR = 512,
+	NX_CHECKSTOP_DMA_CH7_INVAL_STATE_ERR = 1024,
+	NX_CHECKSTOP_DMA_CRB_UE = 2048,
+	NX_CHECKSTOP_DMA_CRB_SUE = 4096,
+	NX_CHECKSTOP_PBI_ISN_UE = 8192,
+};
+
+struct OpalHMIEvent {
+	uint8_t version;
+	uint8_t severity;
+	uint8_t type;
+	uint8_t disposition;
+	uint8_t reserved_1[4];
+	__be64 hmer;
+	__be64 tfmr;
+	union {
+		struct {
+			uint8_t xstop_type;
+			uint8_t reserved_1[3];
+			__be32 xstop_reason;
+			union {
+				__be32 pir;
+				__be32 chip_id;
+			} u;
+		} xstop_error;
 	} u;
 };
 
-struct hvc_opal_priv {
-	hv_protocol_t proto;
-	struct hvsi_priv hvsi;
-};
-
-struct uart_driver {
-	struct module *owner;
-	const char *driver_name;
-	const char *dev_name;
-	int major;
-	int minor;
-	int nr;
-	struct console *cons;
-	struct uart_state *state;
-	struct tty_driver *tty_driver;
-};
-
-struct uart_match {
-	struct uart_port *port;
-	struct uart_driver *driver;
-};
-
-struct earlycon_device {
-	struct console *con;
-	struct uart_port port;
-	char options[16];
-	unsigned int baud;
-};
-
-struct earlycon_id {
-	char name[15];
-	char name_term;
-	char compatible[128];
-	int (*setup)(struct earlycon_device *, const char *);
-};
-
-enum hwparam_type {
-	hwparam_ioport = 0,
-	hwparam_iomem = 1,
-	hwparam_ioport_or_iomem = 2,
-	hwparam_irq = 3,
-	hwparam_dma = 4,
-	hwparam_dma_addr = 5,
-	hwparam_other = 6,
-};
-
-struct uart_8250_port;
-
-struct uart_8250_ops {
-	int (*setup_irq)(struct uart_8250_port *);
-	void (*release_irq)(struct uart_8250_port *);
-};
-
-struct mctrl_gpios;
-
-struct uart_8250_dma;
-
-struct uart_8250_em485;
-
-struct uart_8250_port {
-	struct uart_port port;
-	struct timer_list timer;
+struct OpalHmiEvtNode {
 	struct list_head list;
-	u32 capabilities;
-	short unsigned int bugs;
-	bool fifo_bug;
-	unsigned int tx_loadsz;
-	unsigned char acr;
-	unsigned char fcr;
-	unsigned char ier;
-	unsigned char lcr;
-	unsigned char mcr;
-	unsigned char mcr_mask;
-	unsigned char mcr_force;
-	unsigned char cur_iotype;
-	unsigned int rpm_tx_active;
-	unsigned char canary;
-	unsigned char probe;
-	struct mctrl_gpios *gpios;
-	unsigned char lsr_saved_flags;
-	unsigned char msr_saved_flags;
-	struct uart_8250_dma *dma;
-	const struct uart_8250_ops *ops;
-	int (*dl_read)(struct uart_8250_port *);
-	void (*dl_write)(struct uart_8250_port *, int);
-	struct uart_8250_em485 *em485;
-	void (*rs485_start_tx)(struct uart_8250_port *);
-	void (*rs485_stop_tx)(struct uart_8250_port *);
-	struct delayed_work overrun_backoff;
-	u32 overrun_backoff_time_ms;
+	struct OpalHMIEvent hmi_evt;
 };
 
-struct uart_8250_em485 {
-	struct hrtimer start_tx_timer;
-	struct hrtimer stop_tx_timer;
-	struct hrtimer *active_timer;
-	struct uart_8250_port *port;
-	unsigned int tx_stopped: 1;
+struct xstop_reason {
+	uint32_t xstop_reason;
+	const char *unit_failed;
+	const char *description;
 };
 
-struct dma_chan___2;
-
-typedef bool (*dma_filter_fn)(struct dma_chan___2 *, void *);
-
-enum dma_transfer_direction {
-	DMA_MEM_TO_MEM = 0,
-	DMA_MEM_TO_DEV = 1,
-	DMA_DEV_TO_MEM = 2,
-	DMA_DEV_TO_DEV = 3,
-	DMA_TRANS_NONE = 4,
+enum {
+	XIVE_DUMP_TM_HYP = 0,
+	XIVE_DUMP_TM_POOL = 1,
+	XIVE_DUMP_TM_OS = 2,
+	XIVE_DUMP_TM_USER = 3,
+	XIVE_DUMP_VP = 4,
+	XIVE_DUMP_EMU_STATE = 5,
 };
 
-enum dma_slave_buswidth {
-	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
-	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
-	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
-	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
-	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
-	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
-	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
-	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
-	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+struct bpt {
+	long unsigned int address;
+	u32 *instr;
+	atomic_t ref_count;
+	int enabled;
+	long unsigned int pad;
 };
 
-struct dma_slave_config {
-	enum dma_transfer_direction direction;
-	phys_addr_t src_addr;
-	phys_addr_t dst_addr;
-	enum dma_slave_buswidth src_addr_width;
-	enum dma_slave_buswidth dst_addr_width;
-	u32 src_maxburst;
-	u32 dst_maxburst;
-	u32 src_port_window_size;
-	u32 dst_port_window_size;
-	bool device_fc;
-	unsigned int slave_id;
+typedef int (*instruction_dump_func)(long unsigned int, long unsigned int);
+
+typedef long unsigned int (*callfunc_t)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
 };
 
-typedef s32 dma_cookie_t;
-
-struct uart_8250_dma {
-	int (*tx_dma)(struct uart_8250_port *);
-	int (*rx_dma)(struct uart_8250_port *);
-	dma_filter_fn fn;
-	void *rx_param;
-	void *tx_param;
-	struct dma_slave_config rxconf;
-	struct dma_slave_config txconf;
-	struct dma_chan___2 *rxchan;
-	struct dma_chan___2 *txchan;
-	phys_addr_t rx_dma_addr;
-	phys_addr_t tx_dma_addr;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	void *rx_buf;
-	size_t rx_size;
-	size_t tx_size;
-	unsigned char tx_running;
-	unsigned char tx_err;
-	unsigned char rx_running;
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
 };
 
-enum dma_status {
-	DMA_COMPLETE = 0,
-	DMA_IN_PROGRESS = 1,
-	DMA_PAUSED = 2,
-	DMA_ERROR = 3,
-	DMA_OUT_OF_ORDER = 4,
+struct dl_bandwidth {
+	raw_spinlock_t dl_runtime_lock;
+	u64 dl_runtime;
+	u64 dl_period;
 };
 
-enum dma_transaction_type {
-	DMA_MEMCPY = 0,
-	DMA_XOR = 1,
-	DMA_PQ = 2,
-	DMA_XOR_VAL = 3,
-	DMA_PQ_VAL = 4,
-	DMA_MEMSET = 5,
-	DMA_MEMSET_SG = 6,
-	DMA_INTERRUPT = 7,
-	DMA_PRIVATE = 8,
-	DMA_ASYNC_TX = 9,
-	DMA_SLAVE = 10,
-	DMA_CYCLIC = 11,
-	DMA_INTERLEAVE = 12,
-	DMA_COMPLETION_NO_ORDER = 13,
-	DMA_REPEAT = 14,
-	DMA_LOAD_EOT = 15,
-	DMA_TX_TYPE_END = 16,
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
 };
 
-struct data_chunk {
-	size_t size;
-	size_t icg;
-	size_t dst_icg;
-	size_t src_icg;
+typedef struct rt_rq *rt_rq_iter_t;
+
+struct dma_coherent_mem {
+	void *virt_base;
+	dma_addr_t device_base;
+	long unsigned int pfn_base;
+	int size;
+	long unsigned int *bitmap;
+	spinlock_t spinlock;
+	bool use_dev_dma_pfn_offset;
 };
 
-struct dma_interleaved_template {
-	dma_addr_t src_start;
-	dma_addr_t dst_start;
-	enum dma_transfer_direction dir;
-	bool src_inc;
-	bool dst_inc;
-	bool src_sgl;
-	bool dst_sgl;
-	size_t numf;
-	size_t frame_size;
-	struct data_chunk sgl[0];
+enum ftrace_bug_type {
+	FTRACE_BUG_UNKNOWN = 0,
+	FTRACE_BUG_INIT = 1,
+	FTRACE_BUG_NOP = 2,
+	FTRACE_BUG_CALL = 3,
+	FTRACE_BUG_UPDATE = 4,
 };
 
-enum dma_ctrl_flags {
-	DMA_PREP_INTERRUPT = 1,
-	DMA_CTRL_ACK = 2,
-	DMA_PREP_PQ_DISABLE_P = 4,
-	DMA_PREP_PQ_DISABLE_Q = 8,
-	DMA_PREP_CONTINUE = 16,
-	DMA_PREP_FENCE = 32,
-	DMA_CTRL_REUSE = 64,
-	DMA_PREP_CMD = 128,
-	DMA_PREP_REPEAT = 256,
-	DMA_PREP_LOAD_EOT = 512,
+enum {
+	FTRACE_UPDATE_IGNORE = 0,
+	FTRACE_UPDATE_MAKE_CALL = 1,
+	FTRACE_UPDATE_MODIFY_CALL = 2,
+	FTRACE_UPDATE_MAKE_NOP = 3,
 };
 
-enum sum_check_bits {
-	SUM_CHECK_P = 0,
-	SUM_CHECK_Q = 1,
+struct ftrace_mod_load {
+	struct list_head list;
+	char *func;
+	char *module;
+	int enable;
 };
 
-enum sum_check_flags {
-	SUM_CHECK_P_RESULT = 1,
-	SUM_CHECK_Q_RESULT = 2,
+enum {
+	FTRACE_MODIFY_ENABLE_FL = 1,
+	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
+};
+
+struct ftrace_func_probe {
+	struct ftrace_probe_ops *probe_ops;
+	struct ftrace_ops ops;
+	struct trace_array *tr;
+	struct list_head list;
+	void *data;
+	int ref;
+};
+
+struct ftrace_page {
+	struct ftrace_page *next;
+	struct dyn_ftrace *records;
+	int index;
+	int order;
+};
+
+struct ftrace_rec_iter {
+	struct ftrace_page *pg;
+	int index;
+};
+
+struct ftrace_iterator {
+	loff_t pos;
+	loff_t func_pos;
+	loff_t mod_pos;
+	struct ftrace_page *pg;
+	struct dyn_ftrace *func;
+	struct ftrace_func_probe *probe;
+	struct ftrace_func_entry *probe_entry;
+	struct trace_parser parser;
+	struct ftrace_hash *hash;
+	struct ftrace_ops *ops;
+	struct trace_array *tr;
+	struct list_head *mod_list;
+	int pidx;
+	int idx;
+	unsigned int flags;
+};
+
+struct ftrace_glob {
+	char *search;
+	unsigned int len;
+	int type;
+};
+
+struct ftrace_func_map {
+	struct ftrace_func_entry entry;
+	void *data;
+};
+
+struct ftrace_func_mapper {
+	struct ftrace_hash hash;
+};
+
+enum graph_filter_type {
+	GRAPH_FILTER_NOTRACE = 0,
+	GRAPH_FILTER_FUNCTION = 1,
+};
+
+struct ftrace_graph_data {
+	struct ftrace_hash *hash;
+	struct ftrace_func_entry *entry;
+	int idx;
+	enum graph_filter_type type;
+	struct ftrace_hash *new_hash;
+	const struct seq_operations *seq_ops;
+	struct trace_parser parser;
+};
+
+struct ftrace_mod_func {
+	struct list_head list;
+	char *name;
+	long unsigned int ip;
+	unsigned int size;
+};
+
+struct ftrace_mod_map {
+	struct callback_head rcu;
+	struct list_head list;
+	struct module *mod;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	struct list_head funcs;
+	unsigned int num_funcs;
+};
+
+struct ftrace_init_func {
+	struct list_head list;
+	long unsigned int ip;
+};
+
+struct kallsyms_data {
+	long unsigned int *addrs;
+	const char **syms;
+	size_t cnt;
+	size_t found;
+};
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct event_trigger_ops;
+
+struct event_command;
+
+struct event_trigger_data {
+	long unsigned int count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 0;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+struct uprobe {
+	struct rb_node rb_node;
+	refcount_t ref;
+	struct rw_semaphore register_rwsem;
+	struct rw_semaphore consumer_rwsem;
+	struct list_head pending_list;
+	struct uprobe_consumer *consumers;
+	struct inode *inode;
+	loff_t offset;
+	loff_t ref_ctr_offset;
+	long unsigned int flags;
+	struct arch_uprobe arch;
+};
+
+struct xol_area {
+	wait_queue_head_t wq;
+	atomic_t slot_count;
+	long unsigned int *bitmap;
+	struct vm_special_mapping xol_mapping;
+	struct page *pages[2];
+	long unsigned int vaddr;
+};
+
+struct delayed_uprobe {
+	struct list_head list;
+	struct uprobe *uprobe;
+	struct mm_struct *mm;
+};
+
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
+struct map_info___2 {
+	struct map_info___2 *next;
+	struct mm_struct *mm;
+	long unsigned int vaddr;
+};
+
+struct contig_page_info {
+	long unsigned int free_pages;
+	long unsigned int free_blocks_total;
+	long unsigned int free_blocks_suitable;
+};
+
+struct mlock_pvec {
+	local_lock_t lock;
+	struct pagevec vec;
+};
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+struct trace_event_raw_cma_alloc_class {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int pfn;
+	const struct page *page;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_release {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int pfn;
+	const struct page *page;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cma_alloc_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_release {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
+};
+
+typedef void (*btf_trace_cma_release)(void *, const char *, long unsigned int, const struct page *, long unsigned int);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+struct cma {
+	long unsigned int base_pfn;
+	long unsigned int count;
+	long unsigned int *bitmap;
+	unsigned int order_per_bit;
+	spinlock_t lock;
+	char name[64];
+	bool reserve_pages_on_error;
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+	__kernel_daddr_t f_tfree;
+	long unsigned int f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+struct statfs {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__kernel_long_t f_blocks;
+	__kernel_long_t f_bfree;
+	__kernel_long_t f_bavail;
+	__kernel_long_t f_files;
+	__kernel_long_t f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct statfs64 {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+struct nfsacl_encode_desc {
+	struct xdr_array2_desc desc;
+	unsigned int count;
+	struct posix_acl *acl;
+	int typeflag;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct nfsacl_simple_acl {
+	struct posix_acl acl;
+	struct posix_acl_entry ace[4];
+};
+
+struct nfsacl_decode_desc {
+	struct xdr_array2_desc desc;
+	unsigned int count;
+	struct posix_acl *acl;
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct ext4_extent_idx {
+	__le32 ei_block;
+	__le32 ei_leaf_lo;
+	__le16 ei_leaf_hi;
+	__u16 ei_unused;
+};
+
+struct ext4_extent_header {
+	__le16 eh_magic;
+	__le16 eh_entries;
+	__le16 eh_max;
+	__le16 eh_depth;
+	__le32 eh_generation;
+};
+
+struct ext4_ext_path {
+	ext4_fsblk_t p_block;
+	__u16 p_depth;
+	__u16 p_maxdepth;
+	struct ext4_extent *p_ext;
+	struct ext4_extent_idx *p_idx;
+	struct ext4_extent_header *p_hdr;
+	struct buffer_head *p_bh;
+};
+
+struct migrate_struct {
+	ext4_lblk_t first_block;
+	ext4_lblk_t last_block;
+	ext4_lblk_t curr_block;
+	ext4_fsblk_t first_pblock;
+	ext4_fsblk_t last_pblock;
+};
+
+struct ext4_fc_tl {
+	__le16 fc_tag;
+	__le16 fc_len;
+};
+
+struct ext4_fc_head {
+	__le32 fc_features;
+	__le32 fc_tid;
+};
+
+struct ext4_fc_add_range {
+	__le32 fc_ino;
+	__u8 fc_ex[12];
+};
+
+struct ext4_fc_del_range {
+	__le32 fc_ino;
+	__le32 fc_lblk;
+	__le32 fc_len;
+};
+
+struct ext4_fc_dentry_info {
+	__le32 fc_parent_ino;
+	__le32 fc_ino;
+	__u8 fc_dname[0];
+};
+
+struct ext4_fc_inode {
+	__le32 fc_ino;
+	__u8 fc_raw_inode[0];
+};
+
+struct ext4_fc_tail {
+	__le32 fc_tid;
+	__le32 fc_crc;
+};
+
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
+struct ext4_fc_dentry_update {
+	int fcd_op;
+	int fcd_parent;
+	int fcd_ino;
+	struct qstr fcd_name;
+	unsigned char fcd_iname[32];
+	struct list_head fcd_list;
+	struct list_head fcd_dilist;
+};
+
+struct __track_dentry_update_args {
+	struct dentry *dentry;
+	int op;
+};
+
+struct __track_range_args {
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+};
+
+struct dentry_info_args {
+	int parent_ino;
+	int dname_len;
+	int ino;
+	int inode_len;
+	char *dname;
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+enum ramfs_param {
+	Opt_mode___5 = 0,
+};
+
+struct trace_event_raw_nfs4_clientid_event {
+	struct trace_entry ent;
+	u32 __data_loc_dstaddr;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_setup_sequence {
+	struct trace_entry ent;
+	unsigned int session;
+	unsigned int slot_nr;
+	unsigned int seq_nr;
+	unsigned int highest_used_slotid;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_mgr {
+	struct trace_entry ent;
+	long unsigned int state;
+	u32 __data_loc_hostname;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_mgr_failed {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int state;
+	u32 __data_loc_hostname;
+	u32 __data_loc_section;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_xdr_bad_operation {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 op;
+	u32 expected;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_xdr_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 op;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cb_error_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 cbident;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_open_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	int stateid_seq;
+	u32 stateid_hash;
+	int openstateid_seq;
+	u32 openstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cached_open {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_close {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lock_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int cmd;
+	long unsigned int type;
+	loff_t start;
+	loff_t end;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_set_lock {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int cmd;
+	long unsigned int type;
+	loff_t start;
+	loff_t end;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	int lockstateid_seq;
+	u32 lockstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_lock_reclaim {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int state_flags;
+	long unsigned int lock_flags;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_set_delegation_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_delegreturn_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lookup_event {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lookupp {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_rename {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 olddir;
+	u32 __data_loc_oldname;
+	u64 newdir;
+	u32 __data_loc_newname;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_stateid_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_getattr_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int valid;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_callback_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 __data_loc_dstaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_stateid_callback_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 __data_loc_dstaddr;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_idmap_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 id;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_read_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_write_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_commit_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	loff_t offset;
+	u32 count;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nfs4_clientid_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_setup_sequence {};
+
+struct trace_event_data_offsets_nfs4_state_mgr {
+	u32 hostname;
+};
+
+struct trace_event_data_offsets_nfs4_state_mgr_failed {
+	u32 hostname;
+	u32 section;
+};
+
+struct trace_event_data_offsets_nfs4_xdr_bad_operation {};
+
+struct trace_event_data_offsets_nfs4_xdr_event {};
+
+struct trace_event_data_offsets_nfs4_cb_error_class {};
+
+struct trace_event_data_offsets_nfs4_open_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_cached_open {};
+
+struct trace_event_data_offsets_nfs4_close {};
+
+struct trace_event_data_offsets_nfs4_lock_event {};
+
+struct trace_event_data_offsets_nfs4_set_lock {};
+
+struct trace_event_data_offsets_nfs4_state_lock_reclaim {};
+
+struct trace_event_data_offsets_nfs4_set_delegation_event {};
+
+struct trace_event_data_offsets_nfs4_delegreturn_exit {};
+
+struct trace_event_data_offsets_nfs4_lookup_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_lookupp {};
+
+struct trace_event_data_offsets_nfs4_rename {
+	u32 oldname;
+	u32 newname;
+};
+
+struct trace_event_data_offsets_nfs4_inode_event {};
+
+struct trace_event_data_offsets_nfs4_inode_stateid_event {};
+
+struct trace_event_data_offsets_nfs4_getattr_event {};
+
+struct trace_event_data_offsets_nfs4_inode_callback_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_inode_stateid_callback_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_idmap_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_read_event {};
+
+struct trace_event_data_offsets_nfs4_write_event {};
+
+struct trace_event_data_offsets_nfs4_commit_event {};
+
+typedef void (*btf_trace_nfs4_setclientid)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_setclientid_confirm)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_renew)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_renew_async)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_setup_sequence)(void *, const struct nfs4_session *, const struct nfs4_sequence_args *);
+
+typedef void (*btf_trace_nfs4_state_mgr)(void *, const struct nfs_client *);
+
+typedef void (*btf_trace_nfs4_state_mgr_failed)(void *, const struct nfs_client *, const char *, int);
+
+typedef void (*btf_trace_nfs4_xdr_bad_operation)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs4_xdr_status)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs4_xdr_bad_filehandle)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs_cb_no_clp)(void *, __be32, u32);
+
+typedef void (*btf_trace_nfs_cb_badprinc)(void *, __be32, u32);
+
+typedef void (*btf_trace_nfs4_open_reclaim)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_open_expired)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_open_file)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_cached_open)(void *, const struct nfs4_state *);
+
+typedef void (*btf_trace_nfs4_close)(void *, const struct nfs4_state *, const struct nfs_closeargs *, const struct nfs_closeres *, int);
+
+typedef void (*btf_trace_nfs4_get_lock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
+
+typedef void (*btf_trace_nfs4_unlock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
+
+typedef void (*btf_trace_nfs4_set_lock)(void *, const struct file_lock *, const struct nfs4_state *, const nfs4_stateid *, int, int);
+
+typedef void (*btf_trace_nfs4_state_lock_reclaim)(void *, const struct nfs4_state *, const struct nfs4_lock_state *);
+
+typedef void (*btf_trace_nfs4_set_delegation)(void *, const struct inode *, fmode_t);
+
+typedef void (*btf_trace_nfs4_reclaim_delegation)(void *, const struct inode *, fmode_t);
+
+typedef void (*btf_trace_nfs4_delegreturn_exit)(void *, const struct nfs4_delegreturnargs *, const struct nfs4_delegreturnres *, int);
+
+typedef void (*btf_trace_nfs4_lookup)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_symlink)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_mkdir)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_mknod)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_remove)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_get_fs_locations)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_secinfo)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_lookupp)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_rename)(void *, const struct inode *, const struct qstr *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_access)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_readlink)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_readdir)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_get_acl)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_set_acl)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_setattr)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_delegreturn)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_open_stateid_update)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_open_stateid_update_wait)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_close_stateid_update_wait)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_getattr)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_lookup_root)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_fsinfo)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_cb_getattr)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_cb_recall)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_cb_layoutrecall_file)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_map_name_to_uid)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_group_to_gid)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_uid_to_name)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_gid_to_group)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_read)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_write)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_commit)(void *, const struct nfs_commit_data *, int);
+
+typedef int (*xfs_btree_visit_blocks_fn)(struct xfs_btree_cur *, int, void *);
+
+struct xfs_btree_split_args {
+	struct xfs_btree_cur *cur;
+	int level;
+	union xfs_btree_ptr *ptrp;
+	union xfs_btree_key *key;
+	struct xfs_btree_cur **curp;
+	int *stat;
+	int result;
+	bool kswapd;
+	struct completion *done;
+	struct work_struct work;
+};
+
+struct xfs_btree_block_change_owner_info {
+	uint64_t new_owner;
+	struct list_head *buffer_list;
+};
+
+enum xfs_refc_adjust_op {
+	XFS_REFCOUNT_ADJUST_INCREASE = 1,
+	XFS_REFCOUNT_ADJUST_DECREASE = -1,
+	XFS_REFCOUNT_ADJUST_COW_ALLOC = 0,
+	XFS_REFCOUNT_ADJUST_COW_FREE = -1,
+};
+
+struct xfs_refcount_recovery {
+	struct list_head rr_list;
+	struct xfs_refcount_irec rr_rrec;
+};
+
+struct xfs_bstat_chunk {
+	bulkstat_one_fmt_pf formatter;
+	struct xfs_ibulk *breq;
+	struct xfs_bulkstat *buf;
+};
+
+struct xfs_inumbers_chunk {
+	inumbers_fmt_pf formatter;
+	struct xfs_ibulk *breq;
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct ahash_alg {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_ahash *);
+	void (*exit_tfm)(struct crypto_ahash *);
+	struct hash_alg_common halg;
+};
+
+struct ahash_instance {
+	void (*free)(struct ahash_instance *);
+	union {
+		struct {
+			char head[88];
+			struct crypto_instance base;
+		} s;
+		struct ahash_alg alg;
+	};
+};
+
+struct crypto_ahash_spawn {
+	struct crypto_spawn base;
+};
+
+struct ahash_request_priv {
+	crypto_completion_t complete;
+	void *data;
+	u8 *result;
+	u32 flags;
+	void *ubuf[0];
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	unsigned int nr;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_sqe {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u32 flags;
+	bool force_nonblock;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	long long unsigned int user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_submit_sqe {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long int);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_sqe)(void *, struct io_kiocb *, bool);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, long long unsigned int, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct creds;
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
 };
 
 typedef struct {
-	long unsigned int bits[1];
-} dma_cap_mask_t;
-
-enum dma_desc_metadata_mode {
-	DESC_METADATA_NONE = 0,
-	DESC_METADATA_CLIENT = 1,
-	DESC_METADATA_ENGINE = 2,
-};
-
-struct dma_chan_percpu {
-	long unsigned int memcpy_count;
-	long unsigned int bytes_transferred;
-};
-
-struct dma_router {
-	struct device *dev;
-	void (*route_free)(struct device *, void *);
-};
-
-struct dma_device;
-
-struct dma_chan_dev;
-
-struct dma_chan___2 {
-	struct dma_device *device;
-	struct device *slave;
-	dma_cookie_t cookie;
-	dma_cookie_t completed_cookie;
-	int chan_id;
-	struct dma_chan_dev *dev;
-	const char *name;
-	char *dbg_client_name;
-	struct list_head device_node;
-	struct dma_chan_percpu *local;
-	int client_count;
-	int table_count;
-	struct dma_router *router;
-	void *route_data;
-	void *private;
-};
-
-struct dma_slave_map;
-
-struct dma_filter {
-	dma_filter_fn fn;
-	int mapcnt;
-	const struct dma_slave_map *map;
-};
-
-enum dmaengine_alignment {
-	DMAENGINE_ALIGN_1_BYTE = 0,
-	DMAENGINE_ALIGN_2_BYTES = 1,
-	DMAENGINE_ALIGN_4_BYTES = 2,
-	DMAENGINE_ALIGN_8_BYTES = 3,
-	DMAENGINE_ALIGN_16_BYTES = 4,
-	DMAENGINE_ALIGN_32_BYTES = 5,
-	DMAENGINE_ALIGN_64_BYTES = 6,
-};
-
-enum dma_residue_granularity {
-	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
-	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
-	DMA_RESIDUE_GRANULARITY_BURST = 2,
-};
-
-struct dma_async_tx_descriptor;
-
-struct dma_slave_caps;
-
-struct dma_tx_state;
-
-struct dma_device {
-	struct kref ref;
-	unsigned int chancnt;
-	unsigned int privatecnt;
-	struct list_head channels;
-	struct list_head global_node;
-	struct dma_filter filter;
-	dma_cap_mask_t cap_mask;
-	enum dma_desc_metadata_mode desc_metadata_modes;
-	short unsigned int max_xor;
-	short unsigned int max_pq;
-	enum dmaengine_alignment copy_align;
-	enum dmaengine_alignment xor_align;
-	enum dmaengine_alignment pq_align;
-	enum dmaengine_alignment fill_align;
-	int dev_id;
-	struct device *dev;
-	struct module *owner;
-	struct ida chan_ida;
-	struct mutex chan_mutex;
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool descriptor_reuse;
-	enum dma_residue_granularity residue_granularity;
-	int (*device_alloc_chan_resources)(struct dma_chan___2 *);
-	void (*device_free_chan_resources)(struct dma_chan___2 *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan___2 *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan___2 *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan___2 *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan___2 *, dma_addr_t, int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, int, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan___2 *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan___2 *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan___2 *, struct dma_interleaved_template *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan___2 *, dma_addr_t, u64, long unsigned int);
-	void (*device_caps)(struct dma_chan___2 *, struct dma_slave_caps *);
-	int (*device_config)(struct dma_chan___2 *, struct dma_slave_config *);
-	int (*device_pause)(struct dma_chan___2 *);
-	int (*device_resume)(struct dma_chan___2 *);
-	int (*device_terminate_all)(struct dma_chan___2 *);
-	void (*device_synchronize)(struct dma_chan___2 *);
-	enum dma_status (*device_tx_status)(struct dma_chan___2 *, dma_cookie_t, struct dma_tx_state *);
-	void (*device_issue_pending)(struct dma_chan___2 *);
-	void (*device_release)(struct dma_device *);
-	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
-	struct dentry *dbg_dev_root;
-};
-
-struct dma_chan_dev {
-	struct dma_chan___2 *chan;
-	struct device device;
-	int dev_id;
-};
-
-struct dma_slave_caps {
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 min_burst;
-	u32 max_burst;
-	u32 max_sg_burst;
-	bool cmd_pause;
-	bool cmd_resume;
-	bool cmd_terminate;
-	enum dma_residue_granularity residue_granularity;
-	bool descriptor_reuse;
-};
-
-typedef void (*dma_async_tx_callback)(void *);
-
-enum dmaengine_tx_result {
-	DMA_TRANS_NOERROR = 0,
-	DMA_TRANS_READ_FAILED = 1,
-	DMA_TRANS_WRITE_FAILED = 2,
-	DMA_TRANS_ABORTED = 3,
-};
-
-struct dmaengine_result {
-	enum dmaengine_tx_result result;
-	u32 residue;
-};
-
-typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
-
-struct dmaengine_unmap_data {
-	u8 map_cnt;
-	u8 to_cnt;
-	u8 from_cnt;
-	u8 bidi_cnt;
-	struct device *dev;
-	struct kref kref;
-	size_t len;
-	dma_addr_t addr[0];
-};
-
-struct dma_descriptor_metadata_ops {
-	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
-	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
-	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
-};
-
-struct dma_async_tx_descriptor {
-	dma_cookie_t cookie;
-	enum dma_ctrl_flags flags;
-	dma_addr_t phys;
-	struct dma_chan___2 *chan;
-	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
-	int (*desc_free)(struct dma_async_tx_descriptor *);
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-	struct dmaengine_unmap_data *unmap;
-	enum dma_desc_metadata_mode desc_metadata_mode;
-	struct dma_descriptor_metadata_ops *metadata_ops;
-};
-
-struct dma_tx_state {
-	dma_cookie_t last;
-	dma_cookie_t used;
-	u32 residue;
-	u32 in_flight_bytes;
-};
-
-struct dma_slave_map {
-	const char *devname;
-	const char *slave;
-	void *param;
-};
-
-struct old_serial_port {
-	unsigned int uart;
-	unsigned int baud_base;
-	unsigned int port;
-	unsigned int irq;
-	upf_t flags;
-	unsigned char io_type;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-};
-
-struct irq_info {
-	struct hlist_node node;
-	int irq;
-	spinlock_t lock;
-	struct list_head *head;
-};
-
-struct serial8250_config {
-	const char *name;
-	short unsigned int fifo_size;
-	short unsigned int tx_loadsz;
-	unsigned char fcr;
-	unsigned char rxtrig_bytes[4];
-	unsigned int flags;
-};
-
-struct dw8250_port_data {
-	int line;
-	struct uart_8250_dma dma;
-	u8 dlf_size;
-};
-
-struct pciserial_board {
-	unsigned int flags;
-	unsigned int num_ports;
-	unsigned int base_baud;
-	unsigned int uart_offset;
-	unsigned int reg_shift;
-	unsigned int first_offset;
-};
-
-struct serial_private;
-
-struct pci_serial_quirk {
-	u32 vendor;
-	u32 device;
-	u32 subvendor;
-	u32 subdevice;
-	int (*probe)(struct pci_dev *);
-	int (*init)(struct pci_dev *);
-	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct serial_private {
-	struct pci_dev *dev;
-	unsigned int nr;
-	struct pci_serial_quirk *quirk;
-	const struct pciserial_board *board;
-	int line[0];
-};
-
-struct f815xxa_data {
-	spinlock_t lock;
-	int idx;
-};
-
-struct timedia_struct {
-	int num;
-	const short unsigned int *ids;
-};
-
-struct quatech_feature {
-	u16 devid;
-	bool amcc;
-};
-
-enum pci_board_num_t {
-	pbn_default = 0,
-	pbn_b0_1_115200 = 1,
-	pbn_b0_2_115200 = 2,
-	pbn_b0_4_115200 = 3,
-	pbn_b0_5_115200 = 4,
-	pbn_b0_8_115200 = 5,
-	pbn_b0_1_921600 = 6,
-	pbn_b0_2_921600 = 7,
-	pbn_b0_4_921600 = 8,
-	pbn_b0_2_1130000 = 9,
-	pbn_b0_4_1152000 = 10,
-	pbn_b0_4_1250000 = 11,
-	pbn_b0_2_1843200 = 12,
-	pbn_b0_4_1843200 = 13,
-	pbn_b0_1_4000000 = 14,
-	pbn_b0_bt_1_115200 = 15,
-	pbn_b0_bt_2_115200 = 16,
-	pbn_b0_bt_4_115200 = 17,
-	pbn_b0_bt_8_115200 = 18,
-	pbn_b0_bt_1_460800 = 19,
-	pbn_b0_bt_2_460800 = 20,
-	pbn_b0_bt_4_460800 = 21,
-	pbn_b0_bt_1_921600 = 22,
-	pbn_b0_bt_2_921600 = 23,
-	pbn_b0_bt_4_921600 = 24,
-	pbn_b0_bt_8_921600 = 25,
-	pbn_b1_1_115200 = 26,
-	pbn_b1_2_115200 = 27,
-	pbn_b1_4_115200 = 28,
-	pbn_b1_8_115200 = 29,
-	pbn_b1_16_115200 = 30,
-	pbn_b1_1_921600 = 31,
-	pbn_b1_2_921600 = 32,
-	pbn_b1_4_921600 = 33,
-	pbn_b1_8_921600 = 34,
-	pbn_b1_2_1250000 = 35,
-	pbn_b1_bt_1_115200 = 36,
-	pbn_b1_bt_2_115200 = 37,
-	pbn_b1_bt_4_115200 = 38,
-	pbn_b1_bt_2_921600 = 39,
-	pbn_b1_1_1382400 = 40,
-	pbn_b1_2_1382400 = 41,
-	pbn_b1_4_1382400 = 42,
-	pbn_b1_8_1382400 = 43,
-	pbn_b2_1_115200 = 44,
-	pbn_b2_2_115200 = 45,
-	pbn_b2_4_115200 = 46,
-	pbn_b2_8_115200 = 47,
-	pbn_b2_1_460800 = 48,
-	pbn_b2_4_460800 = 49,
-	pbn_b2_8_460800 = 50,
-	pbn_b2_16_460800 = 51,
-	pbn_b2_1_921600 = 52,
-	pbn_b2_4_921600 = 53,
-	pbn_b2_8_921600 = 54,
-	pbn_b2_8_1152000 = 55,
-	pbn_b2_bt_1_115200 = 56,
-	pbn_b2_bt_2_115200 = 57,
-	pbn_b2_bt_4_115200 = 58,
-	pbn_b2_bt_2_921600 = 59,
-	pbn_b2_bt_4_921600 = 60,
-	pbn_b3_2_115200 = 61,
-	pbn_b3_4_115200 = 62,
-	pbn_b3_8_115200 = 63,
-	pbn_b4_bt_2_921600 = 64,
-	pbn_b4_bt_4_921600 = 65,
-	pbn_b4_bt_8_921600 = 66,
-	pbn_panacom = 67,
-	pbn_panacom2 = 68,
-	pbn_panacom4 = 69,
-	pbn_plx_romulus = 70,
-	pbn_endrun_2_4000000 = 71,
-	pbn_oxsemi = 72,
-	pbn_oxsemi_1_4000000 = 73,
-	pbn_oxsemi_2_4000000 = 74,
-	pbn_oxsemi_4_4000000 = 75,
-	pbn_oxsemi_8_4000000 = 76,
-	pbn_intel_i960 = 77,
-	pbn_sgi_ioc3 = 78,
-	pbn_computone_4 = 79,
-	pbn_computone_6 = 80,
-	pbn_computone_8 = 81,
-	pbn_sbsxrsio = 82,
-	pbn_pasemi_1682M = 83,
-	pbn_ni8430_2 = 84,
-	pbn_ni8430_4 = 85,
-	pbn_ni8430_8 = 86,
-	pbn_ni8430_16 = 87,
-	pbn_ADDIDATA_PCIe_1_3906250 = 88,
-	pbn_ADDIDATA_PCIe_2_3906250 = 89,
-	pbn_ADDIDATA_PCIe_4_3906250 = 90,
-	pbn_ADDIDATA_PCIe_8_3906250 = 91,
-	pbn_ce4100_1_115200 = 92,
-	pbn_omegapci = 93,
-	pbn_NETMOS9900_2s_115200 = 94,
-	pbn_brcm_trumanage = 95,
-	pbn_fintek_4 = 96,
-	pbn_fintek_8 = 97,
-	pbn_fintek_12 = 98,
-	pbn_fintek_F81504A = 99,
-	pbn_fintek_F81508A = 100,
-	pbn_fintek_F81512A = 101,
-	pbn_wch382_2 = 102,
-	pbn_wch384_4 = 103,
-	pbn_wch384_8 = 104,
-	pbn_pericom_PI7C9X7951 = 105,
-	pbn_pericom_PI7C9X7952 = 106,
-	pbn_pericom_PI7C9X7954 = 107,
-	pbn_pericom_PI7C9X7958 = 108,
-	pbn_sunix_pci_1s = 109,
-	pbn_sunix_pci_2s = 110,
-	pbn_sunix_pci_4s = 111,
-	pbn_sunix_pci_8s = 112,
-	pbn_sunix_pci_16s = 113,
-	pbn_moxa8250_2p = 114,
-	pbn_moxa8250_4p = 115,
-	pbn_moxa8250_8p = 116,
-};
-
-struct exar8250_platform {
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
-};
-
-struct exar8250;
-
-struct exar8250_board {
-	unsigned int num_ports;
-	unsigned int reg_shift;
-	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct exar8250 {
-	unsigned int nr;
-	struct exar8250_board *board;
-	void *virt;
-	int line[0];
-};
-
-struct pm_domain_data {
-	struct list_head list_node;
-	struct device *dev;
-};
-
-struct serdev_device;
-
-struct serdev_device_ops {
-	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct serdev_device *);
-};
-
-struct serdev_controller;
-
-struct serdev_device {
-	struct device dev;
-	int nr;
-	struct serdev_controller *ctrl;
-	const struct serdev_device_ops *ops;
-	struct completion write_comp;
-	struct mutex write_lock;
-};
-
-struct serdev_controller_ops;
-
-struct serdev_controller {
-	struct device dev;
-	unsigned int nr;
-	struct serdev_device *serdev;
-	const struct serdev_controller_ops *ops;
-};
-
-struct serdev_device_driver {
-	struct device_driver driver;
-	int (*probe)(struct serdev_device *);
-	void (*remove)(struct serdev_device *);
-};
-
-enum serdev_parity {
-	SERDEV_PARITY_NONE = 0,
-	SERDEV_PARITY_EVEN = 1,
-	SERDEV_PARITY_ODD = 2,
-};
-
-struct serdev_controller_ops {
-	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
-	void (*write_flush)(struct serdev_controller *);
-	int (*write_room)(struct serdev_controller *);
-	int (*open)(struct serdev_controller *);
-	void (*close)(struct serdev_controller *);
-	void (*set_flow_control)(struct serdev_controller *, bool);
-	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
-	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
-	void (*wait_until_sent)(struct serdev_controller *, long int);
-	int (*get_tiocm)(struct serdev_controller *);
-	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
-};
-
-struct serport {
-	struct tty_port *port;
-	struct tty_struct *tty;
-	struct tty_driver *tty_drv;
-	int tty_idx;
-	long unsigned int flags;
-};
-
-struct memdev {
-	const char *name;
-	umode_t mode;
-	const struct file_operations *fops;
-	fmode_t fmode;
-};
-
-struct timer_rand_state {
-	cycles_t last_time;
-	long int last_delta;
-	long int last_delta2;
-};
-
-struct trace_event_raw_add_device_randomness {
-	struct trace_entry ent;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__mix_pool_bytes {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_credit_entropy_bits {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bits;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_push_to_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int pool_bits;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_debit_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int debit_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_input_randomness {
-	struct trace_entry ent;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_disk_randomness {
-	struct trace_entry ent;
-	dev_t dev;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_xfer_secondary_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int xfer_bits;
-	int request_bits;
-	int pool_entropy;
-	int input_entropy;
-	char __data[0];
-};
-
-struct trace_event_raw_random__get_random_bytes {
-	struct trace_entry ent;
-	int nbytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__extract_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int nbytes;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random_read {
-	struct trace_entry ent;
-	int got_bits;
-	int need_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_urandom_read {
-	struct trace_entry ent;
-	int got_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_prandom_u32 {
-	struct trace_entry ent;
-	unsigned int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_add_device_randomness {};
-
-struct trace_event_data_offsets_random__mix_pool_bytes {};
-
-struct trace_event_data_offsets_credit_entropy_bits {};
-
-struct trace_event_data_offsets_push_to_pool {};
-
-struct trace_event_data_offsets_debit_entropy {};
-
-struct trace_event_data_offsets_add_input_randomness {};
-
-struct trace_event_data_offsets_add_disk_randomness {};
-
-struct trace_event_data_offsets_xfer_secondary_pool {};
-
-struct trace_event_data_offsets_random__get_random_bytes {};
-
-struct trace_event_data_offsets_random__extract_entropy {};
-
-struct trace_event_data_offsets_random_read {};
-
-struct trace_event_data_offsets_urandom_read {};
-
-struct trace_event_data_offsets_prandom_u32 {};
-
-typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);
-
-typedef void (*btf_trace_debit_entropy)(void *, const char *, int);
-
-typedef void (*btf_trace_add_input_randomness)(void *, int);
-
-typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);
-
-typedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);
-
-typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_random_read)(void *, int, int, int, int);
-
-typedef void (*btf_trace_urandom_read)(void *, int, int, int);
-
-typedef void (*btf_trace_prandom_u32)(void *, unsigned int);
-
-struct poolinfo {
-	int poolbitshift;
-	int poolwords;
-	int poolbytes;
-	int poolfracbits;
-	int tap1;
-	int tap2;
-	int tap3;
-	int tap4;
-	int tap5;
-};
-
-struct crng_state {
-	__u32 state[16];
-	long unsigned int init_time;
-	spinlock_t lock;
-};
-
-struct entropy_store {
-	const struct poolinfo *poolinfo;
-	__u32 *pool;
-	const char *name;
-	spinlock_t lock;
-	short unsigned int add_ptr;
-	short unsigned int input_rotate;
-	int entropy_count;
-	unsigned int initialized: 1;
-	unsigned int last_data_init: 1;
-	__u8 last_data[10];
-};
-
-struct fast_pool {
-	__u32 pool[4];
-	long unsigned int last;
-	short unsigned int reg_idx;
-	unsigned char count;
-};
-
-struct batched_entropy {
-	union {
-		u64 entropy_u64[8];
-		u32 entropy_u32[16];
-	};
-	unsigned int position;
-	spinlock_t batch_lock;
-};
-
-struct ttyprintk_port {
-	struct tty_port port;
-	spinlock_t spinlock;
-};
-
-enum chipset_type {
-	NOT_SUPPORTED = 0,
-	SUPPORTED = 1,
-};
-
-struct agp_version {
-	u16 major;
-	u16 minor;
-};
-
-struct agp_bridge_data;
-
-struct agp_memory {
-	struct agp_memory *next;
-	struct agp_memory *prev;
-	struct agp_bridge_data *bridge;
-	struct page **pages;
-	size_t page_count;
-	int key;
-	int num_scratch_pages;
-	off_t pg_start;
-	u32 type;
-	u32 physical;
-	bool is_bound;
-	bool is_flushed;
-	struct list_head mapped_list;
-	struct scatterlist *sg_list;
-	int num_sg;
-};
-
-struct agp_bridge_driver;
-
-struct agp_bridge_data {
-	const struct agp_version *version;
-	const struct agp_bridge_driver *driver;
-	const struct vm_operations_struct *vm_ops;
-	void *previous_size;
-	void *current_size;
-	void *dev_private_data;
-	struct pci_dev *dev;
-	u32 *gatt_table;
-	u32 *gatt_table_real;
-	long unsigned int scratch_page;
-	struct page *scratch_page_page;
-	dma_addr_t scratch_page_dma;
-	long unsigned int gart_bus_addr;
-	long unsigned int gatt_bus_addr;
-	u32 mode;
-	enum chipset_type type;
-	long unsigned int *key_list;
-	atomic_t current_memory_agp;
-	atomic_t agp_in_use;
-	int max_memory_agp;
-	int aperture_size_idx;
-	int capndx;
-	int flags;
-	char major_version;
-	char minor_version;
-	struct list_head list;
-	u32 apbase_config;
-	struct list_head mapped_list;
-	spinlock_t mapped_lock;
-};
-
-enum aper_size_type {
-	U8_APER_SIZE = 0,
-	U16_APER_SIZE = 1,
-	U32_APER_SIZE = 2,
-	LVL2_APER_SIZE = 3,
-	FIXED_APER_SIZE = 4,
-};
-
-struct gatt_mask {
-	long unsigned int mask;
-	u32 type;
-};
-
-struct agp_bridge_driver {
-	struct module *owner;
-	const void *aperture_sizes;
-	int num_aperture_sizes;
-	enum aper_size_type size_type;
-	bool cant_use_aperture;
-	bool needs_scratch_page;
-	const struct gatt_mask *masks;
-	int (*fetch_size)();
-	int (*configure)();
-	void (*agp_enable)(struct agp_bridge_data *, u32);
-	void (*cleanup)();
-	void (*tlb_flush)(struct agp_memory *);
-	long unsigned int (*mask_memory)(struct agp_bridge_data *, dma_addr_t, int);
-	void (*cache_flush)();
-	int (*create_gatt_table)(struct agp_bridge_data *);
-	int (*free_gatt_table)(struct agp_bridge_data *);
-	int (*insert_memory)(struct agp_memory *, off_t, int);
-	int (*remove_memory)(struct agp_memory *, off_t, int);
-	struct agp_memory * (*alloc_by_type)(size_t, int);
-	void (*free_by_type)(struct agp_memory *);
-	struct page * (*agp_alloc_page)(struct agp_bridge_data *);
-	int (*agp_alloc_pages)(struct agp_bridge_data *, struct agp_memory *, size_t);
-	void (*agp_destroy_page)(struct page *, int);
-	void (*agp_destroy_pages)(struct agp_memory *);
-	int (*agp_type_to_mask_type)(struct agp_bridge_data *, int);
-};
-
-struct agp_kern_info {
-	struct agp_version version;
-	struct pci_dev *device;
-	enum chipset_type chipset;
-	long unsigned int mode;
-	long unsigned int aper_base;
-	size_t aper_size;
-	int max_memory;
-	int current_memory;
-	bool cant_use_aperture;
-	long unsigned int page_mask;
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct agp_info {
-	struct agp_version version;
-	u32 bridge_id;
-	u32 agp_mode;
-	long unsigned int aper_base;
-	size_t aper_size;
-	size_t pg_total;
-	size_t pg_system;
-	size_t pg_used;
-};
-
-struct agp_setup {
-	u32 agp_mode;
-};
-
-struct agp_segment {
-	off_t pg_start;
-	size_t pg_count;
-	int prot;
-};
-
-struct agp_segment_priv {
-	off_t pg_start;
-	size_t pg_count;
-	pgprot_t prot;
-};
-
-struct agp_region {
-	pid_t pid;
-	size_t seg_count;
-	struct agp_segment *seg_list;
-};
-
-struct agp_allocate {
-	int key;
-	size_t pg_count;
-	u32 type;
-	u32 physical;
-};
-
-struct agp_bind {
-	int key;
-	off_t pg_start;
-};
-
-struct agp_unbind {
-	int key;
-	u32 priority;
-};
-
-struct agp_client {
-	struct agp_client *next;
-	struct agp_client *prev;
-	pid_t pid;
-	int num_segments;
-	struct agp_segment_priv **segments;
-};
-
-struct agp_controller {
-	struct agp_controller *next;
-	struct agp_controller *prev;
-	pid_t pid;
-	int num_clients;
-	struct agp_memory *pool;
-	struct agp_client *clients;
-};
-
-struct agp_file_private {
-	struct agp_file_private *next;
-	struct agp_file_private *prev;
-	pid_t my_pid;
-	long unsigned int access_flags;
-};
-
-struct agp_front_data {
-	struct mutex agp_mutex;
-	struct agp_controller *current_controller;
-	struct agp_controller *controllers;
-	struct agp_file_private *file_priv_list;
-	bool used_by_controller;
-	bool backend_acquired;
-};
-
-struct aper_size_info_8 {
-	int size;
-	int num_entries;
-	int page_order;
-	u8 size_value;
-};
-
-struct aper_size_info_16 {
-	int size;
-	int num_entries;
-	int page_order;
-	u16 size_value;
-};
-
-struct aper_size_info_32 {
-	int size;
-	int num_entries;
-	int page_order;
-	u32 size_value;
-};
-
-struct aper_size_info_lvl2 {
-	int size;
-	int num_entries;
-	u32 size_value;
-};
-
-struct aper_size_info_fixed {
-	int size;
-	int num_entries;
-	int page_order;
-};
-
-struct agp_3_5_dev {
-	struct list_head list;
-	u8 capndx;
-	u32 maxbw;
-	struct pci_dev *dev;
-};
-
-struct isoch_data {
-	u32 maxbw;
-	u32 n;
-	u32 y;
-	u32 l;
-	u32 rq;
-	struct agp_3_5_dev *dev;
-};
-
-struct agp_info32 {
-	struct agp_version version;
-	u32 bridge_id;
-	u32 agp_mode;
-	compat_long_t aper_base;
-	compat_size_t aper_size;
-	compat_size_t pg_total;
-	compat_size_t pg_system;
-	compat_size_t pg_used;
-};
-
-struct agp_segment32 {
-	compat_off_t pg_start;
-	compat_size_t pg_count;
-	compat_int_t prot;
-};
-
-struct agp_region32 {
-	compat_pid_t pid;
-	compat_size_t seg_count;
-	struct agp_segment32 *seg_list;
-};
-
-struct agp_allocate32 {
-	compat_int_t key;
-	compat_size_t pg_count;
-	u32 type;
-	u32 physical;
-};
-
-struct agp_bind32 {
-	compat_int_t key;
-	compat_off_t pg_start;
-};
-
-struct agp_unbind32 {
-	compat_int_t key;
-	u32 priority;
-};
-
-enum tpm2_startup_types {
-	TPM2_SU_CLEAR = 0,
-	TPM2_SU_STATE = 1,
-};
-
-enum tpm_chip_flags {
-	TPM_CHIP_FLAG_TPM2 = 2,
-	TPM_CHIP_FLAG_IRQ = 4,
-	TPM_CHIP_FLAG_VIRTUAL = 8,
-	TPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,
-	TPM_CHIP_FLAG_ALWAYS_POWERED = 32,
-	TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,
-};
-
-enum tpm2_structures {
-	TPM2_ST_NO_SESSIONS = 32769,
-	TPM2_ST_SESSIONS = 32770,
-};
-
-enum tpm2_return_codes {
-	TPM2_RC_SUCCESS = 0,
-	TPM2_RC_HASH = 131,
-	TPM2_RC_HANDLE = 139,
-	TPM2_RC_INITIALIZE = 256,
-	TPM2_RC_FAILURE = 257,
-	TPM2_RC_DISABLED = 288,
-	TPM2_RC_COMMAND_CODE = 323,
-	TPM2_RC_TESTING = 2314,
-	TPM2_RC_REFERENCE_H0 = 2320,
-	TPM2_RC_RETRY = 2338,
-};
-
-struct tpm_header {
-	__be16 tag;
-	__be32 length;
-	union {
-		__be32 ordinal;
-		__be32 return_code;
-	};
-} __attribute__((packed));
-
-struct file_priv {
-	struct tpm_chip *chip;
-	struct tpm_space *space;
-	struct mutex buffer_mutex;
-	struct timer_list user_read_timer;
-	struct work_struct timeout_work;
-	struct work_struct async_work;
-	wait_queue_head_t async_wait;
-	ssize_t response_length;
-	bool response_read;
-	bool command_enqueued;
-	u8 data_buffer[4096];
-};
-
-enum TPM_OPS_FLAGS {
-	TPM_OPS_AUTO_STARTUP = 1,
-};
-
-enum tpm2_timeouts {
-	TPM2_TIMEOUT_A = 750,
-	TPM2_TIMEOUT_B = 2000,
-	TPM2_TIMEOUT_C = 200,
-	TPM2_TIMEOUT_D = 30,
-	TPM2_DURATION_SHORT = 20,
-	TPM2_DURATION_MEDIUM = 750,
-	TPM2_DURATION_LONG = 2000,
-	TPM2_DURATION_LONG_LONG = 300000,
-	TPM2_DURATION_DEFAULT = 120000,
-};
-
-enum tpm2_command_codes {
-	TPM2_CC_FIRST = 287,
-	TPM2_CC_HIERARCHY_CONTROL = 289,
-	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
-	TPM2_CC_CREATE_PRIMARY = 305,
-	TPM2_CC_SEQUENCE_COMPLETE = 318,
-	TPM2_CC_SELF_TEST = 323,
-	TPM2_CC_STARTUP = 324,
-	TPM2_CC_SHUTDOWN = 325,
-	TPM2_CC_NV_READ = 334,
-	TPM2_CC_CREATE = 339,
-	TPM2_CC_LOAD = 343,
-	TPM2_CC_SEQUENCE_UPDATE = 348,
-	TPM2_CC_UNSEAL = 350,
-	TPM2_CC_CONTEXT_LOAD = 353,
-	TPM2_CC_CONTEXT_SAVE = 354,
-	TPM2_CC_FLUSH_CONTEXT = 357,
-	TPM2_CC_VERIFY_SIGNATURE = 375,
-	TPM2_CC_GET_CAPABILITY = 378,
-	TPM2_CC_GET_RANDOM = 379,
-	TPM2_CC_PCR_READ = 382,
-	TPM2_CC_PCR_EXTEND = 386,
-	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
-	TPM2_CC_HASH_SEQUENCE_START = 390,
-	TPM2_CC_CREATE_LOADED = 401,
-	TPM2_CC_LAST = 403,
-};
-
-struct tpm_buf {
-	unsigned int flags;
-	u8 *data;
-};
-
-enum tpm_timeout {
-	TPM_TIMEOUT = 5,
-	TPM_TIMEOUT_RETRY = 100,
-	TPM_TIMEOUT_RANGE_US = 300,
-	TPM_TIMEOUT_POLL = 1,
-	TPM_TIMEOUT_USECS_MIN = 100,
-	TPM_TIMEOUT_USECS_MAX = 500,
-};
-
-enum tpm_buf_flags {
-	TPM_BUF_OVERFLOW = 1,
-};
-
-struct stclear_flags_t {
-	__be16 tag;
-	u8 deactivated;
-	u8 disableForceClear;
-	u8 physicalPresence;
-	u8 physicalPresenceLock;
-	u8 bGlobalLock;
-} __attribute__((packed));
-
-struct tpm1_version {
-	u8 major;
-	u8 minor;
-	u8 rev_major;
-	u8 rev_minor;
-};
-
-struct tpm1_version2 {
-	__be16 tag;
-	struct tpm1_version version;
-};
-
-struct timeout_t {
-	__be32 a;
-	__be32 b;
-	__be32 c;
-	__be32 d;
-};
-
-struct duration_t {
-	__be32 tpm_short;
-	__be32 tpm_medium;
-	__be32 tpm_long;
-};
-
-struct permanent_flags_t {
-	__be16 tag;
-	u8 disable;
-	u8 ownership;
-	u8 deactivated;
-	u8 readPubek;
-	u8 disableOwnerClear;
-	u8 allowMaintenance;
-	u8 physicalPresenceLifetimeLock;
-	u8 physicalPresenceHWEnable;
-	u8 physicalPresenceCMDEnable;
-	u8 CEKPUsed;
-	u8 TPMpost;
-	u8 TPMpostLock;
-	u8 FIPS;
-	u8 operator;
-	u8 enableRevokeEK;
-	u8 nvLocked;
-	u8 readSRKPub;
-	u8 tpmEstablished;
-	u8 maintenanceDone;
-	u8 disableFullDALogicInfo;
-};
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
 
 typedef union {
-	struct permanent_flags_t perm_flags;
-	struct stclear_flags_t stclear_flags;
-	__u8 owned;
-	__be32 num_pcrs;
-	struct tpm1_version version1;
-	struct tpm1_version2 version2;
-	__be32 manufacturer_id;
-	struct timeout_t timeout;
-	struct duration_t duration;
-} cap_t;
+	long long unsigned int table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
 
-enum tpm_capabilities {
-	TPM_CAP_FLAG = 4,
-	TPM_CAP_PROP = 5,
-	TPM_CAP_VERSION_1_1 = 6,
-	TPM_CAP_VERSION_1_2 = 26,
-};
+typedef uintptr_t uptrval;
 
-enum tpm_sub_capabilities {
-	TPM_CAP_PROP_PCR = 257,
-	TPM_CAP_PROP_MANUFACTURER = 259,
-	TPM_CAP_FLAG_PERM = 264,
-	TPM_CAP_FLAG_VOL = 265,
-	TPM_CAP_PROP_OWNER = 273,
-	TPM_CAP_PROP_TIS_TIMEOUT = 277,
-	TPM_CAP_PROP_TIS_DURATION = 288,
-};
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
 
-struct tpm1_get_random_out {
-	__be32 rng_data_len;
-	u8 rng_data[128];
-};
+typedef enum {
+	endOnOutputSize = 0,
+	endOnInputSize = 1,
+} endCondition_directive;
 
-enum tpm2_const {
-	TPM2_PLATFORM_PCR = 24,
-	TPM2_PCR_SELECT_MIN = 3,
-};
+typedef enum {
+	decode_full_block = 0,
+	partial_decode = 1,
+} earlyEnd_directive;
 
-enum tpm2_permanent_handles {
-	TPM2_RS_PW = 1073741833,
-};
-
-enum tpm2_capabilities {
-	TPM2_CAP_HANDLES = 1,
-	TPM2_CAP_COMMANDS = 2,
-	TPM2_CAP_PCRS = 5,
-	TPM2_CAP_TPM_PROPERTIES = 6,
-};
-
-enum tpm2_properties {
-	TPM_PT_TOTAL_COMMANDS = 297,
-};
-
-enum tpm2_cc_attrs {
-	TPM2_CC_ATTR_CHANDLES = 25,
-	TPM2_CC_ATTR_RHANDLE = 28,
-};
-
-struct tpm2_hash {
-	unsigned int crypto_id;
-	unsigned int tpm_id;
-};
-
-struct tpm2_pcr_read_out {
-	__be32 update_cnt;
-	__be32 pcr_selects_cnt;
-	__be16 hash_alg;
-	u8 pcr_select_size;
-	u8 pcr_select[3];
-	__be32 digests_cnt;
-	__be16 digest_size;
-	u8 digest[0];
-} __attribute__((packed));
-
-struct tpm2_null_auth_area {
-	__be32 handle;
-	__be16 nonce_size;
-	u8 attributes;
-	__be16 auth_size;
-} __attribute__((packed));
-
-struct tpm2_get_random_out {
-	__be16 size;
-	u8 buffer[128];
-};
-
-struct tpm2_get_cap_out {
-	u8 more_data;
-	__be32 subcap_id;
-	__be32 property_cnt;
-	__be32 property_id;
-	__be32 value;
-} __attribute__((packed));
-
-struct tpm2_pcr_selection {
-	__be16 hash_alg;
-	u8 size_of_select;
-	u8 pcr_select[3];
-};
-
-struct tpmrm_priv {
-	struct file_priv priv;
-	struct tpm_space space;
-};
-
-enum tpm2_handle_types {
-	TPM2_HT_HMAC_SESSION = 33554432,
-	TPM2_HT_POLICY_SESSION = 50331648,
-	TPM2_HT_TRANSIENT = 2147483648,
-};
-
-struct tpm2_context {
-	__be64 sequence;
-	__be32 saved_handle;
-	__be32 hierarchy;
-	__be16 blob_size;
-} __attribute__((packed));
-
-struct tpm2_cap_handles {
-	u8 more_data;
-	__be32 capability;
-	__be32 count;
-	__be32 handles[0];
-} __attribute__((packed));
-
-struct tpm_readpubek_out {
-	u8 algorithm[4];
-	u8 encscheme[2];
-	u8 sigscheme[2];
-	__be32 paramsize;
-	u8 parameters[12];
-	__be32 keysize;
-	u8 modulus[256];
-	u8 checksum[20];
-};
-
-struct tcpa_event {
-	u32 pcr_index;
-	u32 event_type;
-	u8 pcr_value[20];
-	u32 event_size;
-	u8 event_data[0];
-};
-
-enum tcpa_event_types {
-	PREBOOT = 0,
-	POST_CODE = 1,
-	UNUSED = 2,
-	NO_ACTION = 3,
-	SEPARATOR = 4,
-	ACTION = 5,
-	EVENT_TAG = 6,
-	SCRTM_CONTENTS = 7,
-	SCRTM_VERSION = 8,
-	CPU_MICROCODE = 9,
-	PLATFORM_CONFIG_FLAGS = 10,
-	TABLE_OF_DEVICES = 11,
-	COMPACT_HASH = 12,
-	IPL = 13,
-	IPL_PARTITION_DATA = 14,
-	NONHOST_CODE = 15,
-	NONHOST_CONFIG = 16,
-	NONHOST_INFO = 17,
-};
-
-struct tcpa_pc_event {
-	u32 event_id;
-	u32 event_size;
-	u8 event_data[0];
-};
-
-enum tcpa_pc_event_ids {
-	SMBIOS = 1,
-	BIS_CERT = 2,
-	POST_BIOS_ROM = 3,
-	ESCD = 4,
-	CMOS = 5,
-	NVRAM = 6,
-	OPTION_ROM_EXEC = 7,
-	OPTION_ROM_CONFIG = 8,
-	OPTION_ROM_MICROCODE = 10,
-	S_CRTM_VERSION = 11,
-	S_CRTM_CONTENTS = 12,
-	POST_CONTENTS = 13,
-	HOST_TABLE_OF_DEVICES = 14,
-};
-
-struct tcg_efi_specid_event_algs {
-	u16 alg_id;
-	u16 digest_size;
-};
-
-struct tcg_efi_specid_event_head {
-	u8 signature[16];
-	u32 platform_class;
-	u8 spec_version_minor;
-	u8 spec_version_major;
-	u8 spec_errata;
-	u8 uintnsize;
-	u32 num_algs;
-	struct tcg_efi_specid_event_algs digest_sizes[0];
-};
-
-struct tcg_pcr_event {
-	u32 pcr_idx;
-	u32 event_type;
-	u8 digest[20];
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_event_field {
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_pcr_event2_head {
-	u32 pcr_idx;
-	u32 event_type;
-	u32 count;
-	struct tpm_digest digests[0];
-};
-
-typedef void *acpi_handle;
-
-enum tis_access {
-	TPM_ACCESS_VALID = 128,
-	TPM_ACCESS_ACTIVE_LOCALITY = 32,
-	TPM_ACCESS_REQUEST_PENDING = 4,
-	TPM_ACCESS_REQUEST_USE = 2,
-};
-
-enum tis_status {
-	TPM_STS_VALID = 128,
-	TPM_STS_COMMAND_READY = 64,
-	TPM_STS_GO = 32,
-	TPM_STS_DATA_AVAIL = 16,
-	TPM_STS_DATA_EXPECT = 8,
-	TPM_STS_READ_ZERO = 35,
-};
-
-enum tis_int_flags {
-	TPM_GLOBAL_INT_ENABLE = 2147483648,
-	TPM_INTF_BURST_COUNT_STATIC = 256,
-	TPM_INTF_CMD_READY_INT = 128,
-	TPM_INTF_INT_EDGE_FALLING = 64,
-	TPM_INTF_INT_EDGE_RISING = 32,
-	TPM_INTF_INT_LEVEL_LOW = 16,
-	TPM_INTF_INT_LEVEL_HIGH = 8,
-	TPM_INTF_LOCALITY_CHANGE_INT = 4,
-	TPM_INTF_STS_VALID_INT = 2,
-	TPM_INTF_DATA_AVAIL_INT = 1,
-};
-
-enum tis_defaults {
-	TIS_MEM_LEN = 20480,
-	TIS_SHORT_TIMEOUT = 750,
-	TIS_LONG_TIMEOUT = 2000,
-};
-
-enum tpm_tis_flags {
-	TPM_TIS_ITPM_WORKAROUND = 1,
-};
-
-struct tpm_tis_phy_ops;
-
-struct tpm_tis_data {
-	u16 manufacturer_id;
-	int locality;
-	int irq;
-	bool irq_tested;
-	unsigned int flags;
-	void *ilb_base_addr;
-	u16 clkrun_enabled;
-	wait_queue_head_t int_queue;
-	wait_queue_head_t read_queue;
-	const struct tpm_tis_phy_ops *phy_ops;
-	short unsigned int rng_quality;
-};
-
-struct tpm_tis_phy_ops {
-	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *);
-	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *);
-	int (*read16)(struct tpm_tis_data *, u32, u16 *);
-	int (*read32)(struct tpm_tis_data *, u32, u32 *);
-	int (*write32)(struct tpm_tis_data *, u32, u32);
-};
-
-struct tis_vendor_durations_override {
-	u32 did_vid;
-	struct tpm1_version version;
-	long unsigned int durations[3];
-};
-
-struct tis_vendor_timeout_override {
-	u32 did_vid;
-	long unsigned int timeout_us[4];
-};
-
-struct pnp_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-};
-
-struct pnp_card_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-	struct {
-		__u8 id[8];
-	} devs[8];
-};
-
-struct pnp_protocol;
-
-struct pnp_id;
-
-struct pnp_card {
-	struct device dev;
-	unsigned char number;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head devices;
-	struct pnp_protocol *protocol;
-	struct pnp_id *id;
-	char name[50];
-	unsigned char pnpver;
-	unsigned char productver;
-	unsigned int serial;
-	unsigned char checksum;
-	struct proc_dir_entry *procdir;
-};
-
-struct pnp_dev;
-
-struct pnp_protocol {
-	struct list_head protocol_list;
+struct sg_pool {
+	size_t size;
 	char *name;
-	int (*get)(struct pnp_dev *);
-	int (*set)(struct pnp_dev *);
-	int (*disable)(struct pnp_dev *);
-	bool (*can_wakeup)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	unsigned char number;
-	struct device dev;
-	struct list_head cards;
-	struct list_head devices;
+	struct kmem_cache *slab;
+	mempool_t *pool;
 };
 
-struct pnp_id {
-	char id[8];
-	struct pnp_id *next;
-};
-
-struct pnp_card_driver;
-
-struct pnp_card_link {
-	struct pnp_card *card;
-	struct pnp_card_driver *driver;
-	void *driver_data;
-	pm_message_t pm_state;
-};
-
-struct pnp_driver {
-	const char *name;
-	const struct pnp_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
-	void (*remove)(struct pnp_dev *);
-	void (*shutdown)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	struct device_driver driver;
-};
-
-struct pnp_card_driver {
-	struct list_head global_list;
-	char *name;
-	const struct pnp_card_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
-	void (*remove)(struct pnp_card_link *);
-	int (*suspend)(struct pnp_card_link *, pm_message_t);
-	int (*resume)(struct pnp_card_link *);
-	struct pnp_driver link;
-};
-
-struct pnp_dev {
-	struct device dev;
-	u64 dma_mask;
-	unsigned int number;
-	int status;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head card_list;
-	struct list_head rdev_list;
-	struct pnp_protocol *protocol;
-	struct pnp_card *card;
-	struct pnp_driver *driver;
-	struct pnp_card_link *card_link;
-	struct pnp_id *id;
-	int active;
-	int capabilities;
-	unsigned int num_dependent_sets;
-	struct list_head resources;
-	struct list_head options;
-	char name[50];
-	int flags;
-	struct proc_dir_entry *procent;
-	void *data;
-};
-
-struct tpm_info {
-	struct resource res;
-	int irq;
-};
-
-struct tpm_tis_tcg_phy {
-	struct tpm_tis_data priv;
-	void *iobase;
-};
-
-struct ibmvtpm_crq {
-	u8 valid;
-	u8 msg;
-	__be16 len;
-	__be32 data;
-	__be64 reserved;
-};
-
-struct ibmvtpm_crq_queue {
-	struct ibmvtpm_crq *crq_addr;
-	u32 index;
-	u32 num_entry;
-	wait_queue_head_t wq;
-};
-
-struct ibmvtpm_dev {
+struct phy_provider {
 	struct device *dev;
-	struct vio_dev *vdev;
-	struct ibmvtpm_crq_queue crq_queue;
-	dma_addr_t crq_dma_handle;
-	u32 rtce_size;
-	void *rtce_buf;
-	dma_addr_t rtce_dma_handle;
-	spinlock_t rtce_lock;
-	wait_queue_head_t wq;
-	u16 res_len;
-	u32 vtpm_version;
-	bool tpm_processing_cmd;
-};
-
-struct iommu_group {
-	struct kobject kobj;
-	struct kobject *devices_kobj;
-	struct list_head devices;
-	struct mutex mutex;
-	struct blocking_notifier_head notifier;
-	void *iommu_data;
-	void (*iommu_data_release)(void *);
-	char *name;
-	int id;
-	struct iommu_domain *default_domain;
-	struct iommu_domain *domain;
-	struct list_head entry;
-};
-
-typedef unsigned int ioasid_t;
-
-enum iommu_fault_type {
-	IOMMU_FAULT_DMA_UNRECOV = 1,
-	IOMMU_FAULT_PAGE_REQ = 2,
-};
-
-enum iommu_inv_granularity {
-	IOMMU_INV_GRANU_DOMAIN = 0,
-	IOMMU_INV_GRANU_PASID = 1,
-	IOMMU_INV_GRANU_ADDR = 2,
-	IOMMU_INV_GRANU_NR = 3,
-};
-
-struct fsl_mc_obj_desc {
-	char type[16];
-	int id;
-	u16 vendor;
-	u16 ver_major;
-	u16 ver_minor;
-	u8 irq_count;
-	u8 region_count;
-	u32 state;
-	char label[16];
-	u16 flags;
-};
-
-struct fsl_mc_io;
-
-struct fsl_mc_device_irq;
-
-struct fsl_mc_resource;
-
-struct fsl_mc_device {
-	struct device dev;
-	u64 dma_mask;
-	u16 flags;
-	u32 icid;
-	u16 mc_handle;
-	struct fsl_mc_io *mc_io;
-	struct fsl_mc_obj_desc obj_desc;
-	struct resource *regions;
-	struct fsl_mc_device_irq **irqs;
-	struct fsl_mc_resource *resource;
-	struct device_link *consumer_link;
-	char *driver_override;
-};
-
-enum fsl_mc_pool_type {
-	FSL_MC_POOL_DPMCP = 0,
-	FSL_MC_POOL_DPBP = 1,
-	FSL_MC_POOL_DPCON = 2,
-	FSL_MC_POOL_IRQ = 3,
-	FSL_MC_NUM_POOL_TYPES = 4,
-};
-
-struct fsl_mc_resource_pool;
-
-struct fsl_mc_resource {
-	enum fsl_mc_pool_type type;
-	s32 id;
-	void *data;
-	struct fsl_mc_resource_pool *parent_pool;
-	struct list_head node;
-};
-
-struct fsl_mc_device_irq {
-	struct msi_desc *msi_desc;
-	struct fsl_mc_device *mc_dev;
-	u8 dev_irq_index;
-	struct fsl_mc_resource resource;
-};
-
-struct fsl_mc_io {
-	struct device *dev;
-	u16 flags;
-	u32 portal_size;
-	phys_addr_t portal_phys_addr;
-	void *portal_virt_addr;
-	struct fsl_mc_device *dpmcp_dev;
-	union {
-		struct mutex mutex;
-		raw_spinlock_t spinlock;
-	};
-};
-
-struct group_device {
+	struct device_node *children;
+	struct module *owner;
 	struct list_head list;
-	struct device *dev;
-	char *name;
+	struct phy___2 * (*of_xlate)(struct device *, struct of_phandle_args *);
 };
 
-struct iommu_group_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct iommu_group *, char *);
-	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+struct phy_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct phy___2 *phy;
 };
 
-struct group_for_pci_data {
-	struct pci_dev *pdev;
-	struct iommu_group *group;
+enum backlight_update_reason {
+	BACKLIGHT_UPDATE_HOTKEY = 0,
+	BACKLIGHT_UPDATE_SYSFS = 1,
 };
 
-struct __group_domain_type {
-	struct device *dev;
-	unsigned int type;
+enum backlight_notification {
+	BACKLIGHT_REGISTERED = 0,
+	BACKLIGHT_UNREGISTERED = 1,
+};
+
+struct gxt4500_par {
+	void *regs;
+	int wc_cookie;
+	int pixfmt;
+	int refclk_ps;
+	int pll_m;
+	int pll_n;
+	int pll_pd1;
+	int pll_pd2;
+	u32 pseudo_palette[16];
+};
+
+enum gxt_cards {
+	GXT4500P = 0,
+	GXT6500P = 1,
+	GXT4000P = 2,
+	GXT6000P = 3,
+};
+
+struct cardinfo {
+	int refclk_ps;
+	const char *cardname;
 };
 
 struct trace_event_raw_iommu_group_event {
@@ -98457,1220 +119695,12 @@
 
 typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
 
-struct of_pci_iommu_alias_info {
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct vga_device {
-	struct list_head list;
-	struct pci_dev *pdev;
-	unsigned int decodes;
-	unsigned int owns;
-	unsigned int locks;
-	unsigned int io_lock_cnt;
-	unsigned int mem_lock_cnt;
-	unsigned int io_norm_cnt;
-	unsigned int mem_norm_cnt;
-	bool bridge_has_one_vga;
-	void *cookie;
-	void (*irq_set_state)(void *, bool);
-	unsigned int (*set_vga_decode)(void *, bool);
-};
-
-struct vga_arb_user_card {
-	struct pci_dev *pdev;
-	unsigned int mem_cnt;
-	unsigned int io_cnt;
-};
-
-struct vga_arb_private {
-	struct list_head list;
-	struct pci_dev *target;
-	struct vga_arb_user_card cards[16];
-	spinlock_t lock;
-};
-
-struct cb_id {
-	__u32 idx;
-	__u32 val;
-};
-
-struct cn_msg {
-	struct cb_id id;
-	__u32 seq;
-	__u32 ack;
-	__u16 len;
-	__u16 flags;
-	__u8 data[0];
-};
-
-struct cn_queue_dev {
-	atomic_t refcnt;
-	unsigned char name[32];
-	struct list_head queue_list;
-	spinlock_t queue_lock;
-	struct sock *nls;
-};
-
-struct cn_callback_id {
-	unsigned char name[32];
-	struct cb_id id;
-};
-
-struct cn_callback_entry {
-	struct list_head callback_entry;
-	refcount_t refcnt;
-	struct cn_queue_dev *pdev;
-	struct cn_callback_id id;
-	void (*callback)(struct cn_msg *, struct netlink_skb_parms *);
-	u32 seq;
-	u32 group;
-};
-
-struct cn_dev {
-	struct cb_id id;
-	u32 seq;
-	u32 groups;
-	struct sock *nls;
-	struct cn_queue_dev *cbdev;
-};
-
-enum proc_cn_mcast_op {
-	PROC_CN_MCAST_LISTEN = 1,
-	PROC_CN_MCAST_IGNORE = 2,
-};
-
-struct fork_proc_event {
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-	__kernel_pid_t child_pid;
-	__kernel_pid_t child_tgid;
-};
-
-struct exec_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct id_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	union {
-		__u32 ruid;
-		__u32 rgid;
-	} r;
-	union {
-		__u32 euid;
-		__u32 egid;
-	} e;
-};
-
-struct sid_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct ptrace_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t tracer_pid;
-	__kernel_pid_t tracer_tgid;
-};
-
-struct comm_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	char comm[16];
-};
-
-struct coredump_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct exit_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__u32 exit_code;
-	__u32 exit_signal;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct proc_event {
-	enum what what;
-	__u32 cpu;
-	__u64 timestamp_ns;
-	union {
-		struct {
-			__u32 err;
-		} ack;
-		struct fork_proc_event fork;
-		struct exec_proc_event exec;
-		struct id_proc_event id;
-		struct sid_proc_event sid;
-		struct ptrace_proc_event ptrace;
-		struct comm_proc_event comm;
-		struct coredump_proc_event coredump;
-		struct exit_proc_event exit;
-	} event_data;
-};
-
-struct local_event {
-	local_lock_t lock;
-	__u32 count;
-};
-
-struct nvm_ioctl_info_tgt {
-	__u32 version[3];
-	__u32 reserved;
-	char tgtname[48];
-};
-
-struct nvm_ioctl_info {
-	__u32 version[3];
-	__u16 tgtsize;
-	__u16 reserved16;
-	__u32 reserved[12];
-	struct nvm_ioctl_info_tgt tgts[63];
-};
-
-struct nvm_ioctl_device_info {
-	char devname[32];
-	char bmname[48];
-	__u32 bmversion[3];
-	__u32 flags;
-	__u32 reserved[8];
-};
-
-struct nvm_ioctl_get_devices {
-	__u32 nr_devices;
-	__u32 reserved[31];
-	struct nvm_ioctl_device_info info[31];
-};
-
-struct nvm_ioctl_create_simple {
-	__u32 lun_begin;
-	__u32 lun_end;
-};
-
-struct nvm_ioctl_create_extended {
-	__u16 lun_begin;
-	__u16 lun_end;
-	__u16 op;
-	__u16 rsv;
-};
-
-enum {
-	NVM_CONFIG_TYPE_SIMPLE = 0,
-	NVM_CONFIG_TYPE_EXTENDED = 1,
-};
-
-struct nvm_ioctl_create_conf {
-	__u32 type;
-	union {
-		struct nvm_ioctl_create_simple s;
-		struct nvm_ioctl_create_extended e;
-	};
-};
-
-enum {
-	NVM_TARGET_FACTORY = 1,
-};
-
-struct nvm_ioctl_create {
-	char dev[32];
-	char tgttype[48];
-	char tgtname[32];
-	__u32 flags;
-	struct nvm_ioctl_create_conf conf;
-};
-
-struct nvm_ioctl_remove {
-	char tgtname[32];
-	__u32 flags;
-};
-
-struct nvm_ioctl_dev_init {
-	char dev[32];
-	char mmtype[8];
-	__u32 flags;
-};
-
-enum {
-	NVM_FACTORY_ERASE_ONLY_USER = 1,
-	NVM_FACTORY_RESET_HOST_BLKS = 2,
-	NVM_FACTORY_RESET_GRWN_BBLKS = 4,
-	NVM_FACTORY_NR_BITS = 8,
-};
-
-struct nvm_ioctl_dev_factory {
-	char dev[32];
-	__u32 flags;
-};
-
-enum {
-	NVM_INFO_CMD = 32,
-	NVM_GET_DEVICES_CMD = 33,
-	NVM_DEV_CREATE_CMD = 34,
-	NVM_DEV_REMOVE_CMD = 35,
-	NVM_DEV_INIT_CMD = 36,
-	NVM_DEV_FACTORY_CMD = 37,
-	NVM_DEV_VIO_ADMIN_CMD = 65,
-	NVM_DEV_VIO_CMD = 66,
-	NVM_DEV_VIO_USER_CMD = 67,
-};
-
-enum {
-	NVM_OCSSD_SPEC_12 = 12,
-	NVM_OCSSD_SPEC_20 = 20,
-};
-
-struct ppa_addr {
-	union {
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 reserved: 32;
-		} a;
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 pg: 16;
-			u64 pl: 4;
-			u64 sec: 4;
-			u64 reserved: 8;
-		} g;
-		struct {
-			u64 grp: 8;
-			u64 pu: 8;
-			u64 chk: 16;
-			u64 sec: 24;
-			u64 reserved: 8;
-		} m;
-		struct {
-			u64 line: 63;
-			u64 is_cached: 1;
-		} c;
-		u64 ppa;
-	};
-};
-
-struct nvm_dev;
-
-typedef int nvm_id_fn(struct nvm_dev *);
-
-struct nvm_addrf {
-	u8 ch_len;
-	u8 lun_len;
-	u8 chk_len;
-	u8 sec_len;
-	u8 rsv_len[2];
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 chk_offset;
-	u8 sec_offset;
-	u8 rsv_off[2];
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 chk_mask;
-	u64 sec_mask;
-	u64 rsv_mask[2];
-};
-
-struct nvm_geo {
-	u8 major_ver_id;
-	u8 minor_ver_id;
-	u8 version;
-	int num_ch;
-	int num_lun;
-	int all_luns;
-	int all_chunks;
-	int op;
-	sector_t total_secs;
-	u32 num_chk;
-	u32 clba;
-	u16 csecs;
-	u16 sos;
-	bool ext;
-	u32 mdts;
-	u32 ws_min;
-	u32 ws_opt;
-	u32 mw_cunits;
-	u32 maxoc;
-	u32 maxocpu;
-	u32 mccap;
-	u32 trdt;
-	u32 trdm;
-	u32 tprt;
-	u32 tprm;
-	u32 tbet;
-	u32 tbem;
-	struct nvm_addrf addrf;
-	u8 vmnt;
-	u32 cap;
-	u32 dom;
-	u8 mtype;
-	u8 fmtype;
-	u16 cpar;
-	u32 mpos;
-	u8 num_pln;
-	u8 pln_mode;
-	u16 num_pg;
-	u16 fpg_sz;
-};
-
-struct nvm_dev_ops;
-
-struct nvm_dev {
-	struct nvm_dev_ops *ops;
-	struct list_head devices;
-	struct nvm_geo geo;
-	long unsigned int *lun_map;
-	void *dma_pool;
-	struct request_queue *q;
-	char name[32];
-	void *private_data;
-	struct kref ref;
-	void *rmap;
-	struct mutex mlock;
-	spinlock_t lock;
-	struct list_head area_list;
-	struct list_head targets;
-};
-
-typedef int nvm_op_bb_tbl_fn(struct nvm_dev *, struct ppa_addr, u8 *);
-
-typedef int nvm_op_set_bb_fn(struct nvm_dev *, struct ppa_addr *, int, int);
-
-struct nvm_chk_meta;
-
-typedef int nvm_get_chk_meta_fn(struct nvm_dev *, sector_t, int, struct nvm_chk_meta *);
-
-struct nvm_chk_meta {
-	u8 state;
-	u8 type;
-	u8 wi;
-	u8 rsvd[5];
-	u64 slba;
-	u64 cnlb;
-	u64 wp;
-};
-
-struct nvm_rq;
-
-typedef int nvm_submit_io_fn(struct nvm_dev *, struct nvm_rq *, void *);
-
-typedef void nvm_end_io_fn(struct nvm_rq *);
-
-struct nvm_tgt_dev;
-
-struct nvm_rq {
-	struct nvm_tgt_dev *dev;
-	struct bio *bio;
-	union {
-		struct ppa_addr ppa_addr;
-		dma_addr_t dma_ppa_list;
-	};
-	struct ppa_addr *ppa_list;
-	void *meta_list;
-	dma_addr_t dma_meta_list;
-	nvm_end_io_fn *end_io;
-	uint8_t opcode;
-	uint16_t nr_ppas;
-	uint16_t flags;
-	u64 ppa_status;
-	int error;
-	int is_seq;
-	void *private;
-};
-
-typedef void *nvm_create_dma_pool_fn(struct nvm_dev *, char *, int);
-
-typedef void nvm_destroy_dma_pool_fn(void *);
-
-typedef void *nvm_dev_dma_alloc_fn(struct nvm_dev *, void *, gfp_t, dma_addr_t *);
-
-typedef void nvm_dev_dma_free_fn(void *, void *, dma_addr_t);
-
-struct nvm_dev_ops {
-	nvm_id_fn *identity;
-	nvm_op_bb_tbl_fn *get_bb_tbl;
-	nvm_op_set_bb_fn *set_bb_tbl;
-	nvm_get_chk_meta_fn *get_chk_meta;
-	nvm_submit_io_fn *submit_io;
-	nvm_create_dma_pool_fn *create_dma_pool;
-	nvm_destroy_dma_pool_fn *destroy_dma_pool;
-	nvm_dev_dma_alloc_fn *dev_dma_alloc;
-	nvm_dev_dma_free_fn *dev_dma_free;
-};
-
-enum {
-	NVM_RSP_L2P = 1,
-	NVM_RSP_ECC = 2,
-	NVM_ADDRMODE_LINEAR = 0,
-	NVM_ADDRMODE_CHANNEL = 1,
-	NVM_PLANE_SINGLE = 1,
-	NVM_PLANE_DOUBLE = 2,
-	NVM_PLANE_QUAD = 4,
-	NVM_RSP_SUCCESS = 0,
-	NVM_RSP_NOT_CHANGEABLE = 1,
-	NVM_RSP_ERR_FAILWRITE = 16639,
-	NVM_RSP_ERR_EMPTYPAGE = 17151,
-	NVM_RSP_ERR_FAILECC = 17025,
-	NVM_RSP_ERR_FAILCRC = 16388,
-	NVM_RSP_WARN_HIGHECC = 18176,
-	NVM_OP_PWRITE = 145,
-	NVM_OP_PREAD = 146,
-	NVM_OP_ERASE = 144,
-	NVM_IO_SNGL_ACCESS = 0,
-	NVM_IO_DUAL_ACCESS = 1,
-	NVM_IO_QUAD_ACCESS = 2,
-	NVM_IO_SUSPEND = 128,
-	NVM_IO_SLC_MODE = 256,
-	NVM_IO_SCRAMBLE_ENABLE = 512,
-	NVM_BLK_T_FREE = 0,
-	NVM_BLK_T_BAD = 1,
-	NVM_BLK_T_GRWN_BAD = 2,
-	NVM_BLK_T_DEV = 4,
-	NVM_BLK_T_HOST = 8,
-	NVM_ID_CAP_SLC = 1,
-	NVM_ID_CAP_CMD_SUSPEND = 2,
-	NVM_ID_CAP_SCRAMBLE = 4,
-	NVM_ID_CAP_ENCRYPT = 8,
-	NVM_ID_FMTYPE_SLC = 0,
-	NVM_ID_FMTYPE_MLC = 1,
-	NVM_ID_DCAP_BBLKMGMT = 1,
-	NVM_UD_DCAP_ECC = 2,
-};
-
-struct nvm_addrf_12 {
-	u8 ch_len;
-	u8 lun_len;
-	u8 blk_len;
-	u8 pg_len;
-	u8 pln_len;
-	u8 sec_len;
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 blk_offset;
-	u8 pg_offset;
-	u8 pln_offset;
-	u8 sec_offset;
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 blk_mask;
-	u64 pg_mask;
-	u64 pln_mask;
-	u64 sec_mask;
-};
-
-enum {
-	NVM_CHK_ST_FREE = 1,
-	NVM_CHK_ST_CLOSED = 2,
-	NVM_CHK_ST_OPEN = 4,
-	NVM_CHK_ST_OFFLINE = 8,
-	NVM_CHK_TP_W_SEQ = 1,
-	NVM_CHK_TP_W_RAN = 2,
-	NVM_CHK_TP_SZ_SPEC = 16,
-};
-
-struct nvm_tgt_type;
-
-struct nvm_target {
-	struct list_head list;
-	struct nvm_tgt_dev *dev;
-	struct nvm_tgt_type *type;
-	struct gendisk *disk;
-};
-
-struct nvm_tgt_dev {
-	struct nvm_geo geo;
-	struct ppa_addr *luns;
-	struct request_queue *q;
-	struct nvm_dev *parent;
-	void *map;
-};
-
-typedef sector_t nvm_tgt_capacity_fn(void *);
-
-typedef void *nvm_tgt_init_fn(struct nvm_tgt_dev *, struct gendisk *, int);
-
-typedef void nvm_tgt_exit_fn(void *, bool);
-
-typedef int nvm_tgt_sysfs_init_fn(struct gendisk *);
-
-typedef void nvm_tgt_sysfs_exit_fn(struct gendisk *);
-
-struct nvm_tgt_type {
-	const char *name;
-	unsigned int version[3];
-	int flags;
-	const struct block_device_operations *bops;
-	nvm_tgt_capacity_fn *capacity;
-	nvm_tgt_init_fn *init;
-	nvm_tgt_exit_fn *exit;
-	nvm_tgt_sysfs_init_fn *sysfs_init;
-	nvm_tgt_sysfs_exit_fn *sysfs_exit;
-	struct list_head list;
-	struct module *owner;
-};
-
-enum {
-	NVM_TGT_F_DEV_L2P = 0,
-	NVM_TGT_F_HOST_L2P = 1,
-};
-
-struct nvm_ch_map {
-	int ch_off;
-	int num_lun;
-	int *lun_offs;
-};
-
-struct nvm_dev_map {
-	struct nvm_ch_map *chnls;
-	int num_ch;
-};
-
-struct component_ops {
-	int (*bind)(struct device *, struct device *, void *);
-	void (*unbind)(struct device *, struct device *, void *);
-};
-
-struct component_master_ops {
-	int (*bind)(struct device *);
-	void (*unbind)(struct device *);
-};
-
-struct component;
-
-struct component_match_array {
-	void *data;
-	int (*compare)(struct device *, void *);
-	int (*compare_typed)(struct device *, int, void *);
-	void (*release)(struct device *, void *);
-	struct component *component;
-	bool duplicate;
-};
-
-struct master;
-
-struct component {
-	struct list_head node;
-	struct master *master;
-	bool bound;
-	const struct component_ops *ops;
-	int subcomponent;
-	struct device *dev;
-};
-
-struct component_match {
-	size_t alloc;
-	size_t num;
-	struct component_match_array *compare;
-};
-
-struct master {
-	struct list_head node;
-	bool bound;
-	const struct component_master_ops *ops;
-	struct device *dev;
-	struct component_match *match;
-	struct dentry *dentry;
-};
-
-struct wake_irq {
-	struct device *dev;
-	unsigned int status;
-	int irq;
-	const char *name;
-};
-
-enum dpm_order {
-	DPM_ORDER_NONE = 0,
-	DPM_ORDER_DEV_AFTER_PARENT = 1,
-	DPM_ORDER_PARENT_BEFORE_DEV = 2,
-	DPM_ORDER_DEV_LAST = 3,
-};
-
-struct subsys_private {
-	struct kset subsys;
-	struct kset *devices_kset;
-	struct list_head interfaces;
-	struct mutex mutex;
-	struct kset *drivers_kset;
-	struct klist klist_devices;
-	struct klist klist_drivers;
-	struct blocking_notifier_head bus_notifier;
-	unsigned int drivers_autoprobe: 1;
-	struct bus_type *bus;
-	struct kset glue_dirs;
-	struct class *class;
-};
-
-struct driver_private {
-	struct kobject kobj;
-	struct klist klist_devices;
-	struct klist_node knode_bus;
-	struct module_kobject *mkobj;
-	struct device_driver *driver;
-};
-
-struct device_private {
-	struct klist klist_children;
-	struct klist_node knode_parent;
-	struct klist_node knode_driver;
-	struct klist_node knode_bus;
-	struct klist_node knode_class;
-	struct list_head deferred_probe;
-	struct device_driver *async_driver;
-	char *deferred_probe_reason;
-	struct device *device;
-	u8 dead: 1;
-};
-
-union device_attr_group_devres {
-	const struct attribute_group *group;
-	const struct attribute_group **groups;
-};
-
-struct class_dir {
-	struct kobject kobj;
-	struct class *class;
-};
-
-struct root_device {
-	struct device dev;
-	struct module *owner;
-};
-
-struct subsys_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-struct subsys_interface {
-	const char *name;
-	struct bus_type *subsys;
-	struct list_head node;
-	int (*add_dev)(struct device *, struct subsys_interface *);
-	void (*remove_dev)(struct device *, struct subsys_interface *);
-};
-
-struct device_attach_data {
-	struct device *dev;
-	bool check_async;
-	bool want_async;
-	bool have_async;
-};
-
-struct class_compat {
-	struct kobject *kobj;
-};
-
-struct platform_object {
-	struct platform_device pdev;
-	char name[0];
-};
-
-struct cpu_attr {
-	struct device_attribute attr;
-	const struct cpumask * const map;
-};
-
-typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
-
-struct probe {
-	struct probe *next;
-	dev_t dev;
-	long unsigned int range;
-	struct module *owner;
-	kobj_probe_t *get;
-	int (*lock)(dev_t, void *);
-	void *data;
-};
-
-struct kobj_map___2 {
-	struct probe *probes[255];
-	struct mutex *lock;
-};
-
-typedef int (*dr_match_t)(struct device *, void *, void *);
-
-struct devres_node {
-	struct list_head entry;
-	dr_release_t release;
-};
-
-struct devres {
-	struct devres_node node;
-	u8 data[0];
-};
-
-struct devres_group {
-	struct devres_node node[2];
-	void *id;
-	int color;
-};
-
-struct action_devres {
-	void *data;
-	void (*action)(void *);
-};
-
-struct pages_devres {
-	long unsigned int addr;
-	unsigned int order;
-};
-
-struct attribute_container {
-	struct list_head node;
-	struct klist containers;
-	struct class *class;
-	const struct attribute_group *grp;
-	struct device_attribute **attrs;
-	int (*match)(struct attribute_container *, struct device *);
-	long unsigned int flags;
-};
-
 struct internal_container {
 	struct klist_node node;
 	struct attribute_container *cont;
 	struct device classdev;
 };
 
-struct transport_container;
-
-struct transport_class {
-	struct class class;
-	int (*setup)(struct transport_container *, struct device *, struct device *);
-	int (*configure)(struct transport_container *, struct device *, struct device *);
-	int (*remove)(struct transport_container *, struct device *, struct device *);
-};
-
-struct transport_container {
-	struct attribute_container ac;
-	const struct attribute_group *statistics;
-};
-
-struct anon_transport_class {
-	struct transport_class tclass;
-	struct attribute_container container;
-};
-
-struct container_dev {
-	struct device dev;
-	int (*offline)(struct container_dev *);
-};
-
-typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
-
-enum ethtool_link_mode_bit_indices {
-	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
-	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
-	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
-	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
-	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
-	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
-	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
-	ETHTOOL_LINK_MODE_TP_BIT = 7,
-	ETHTOOL_LINK_MODE_AUI_BIT = 8,
-	ETHTOOL_LINK_MODE_MII_BIT = 9,
-	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
-	ETHTOOL_LINK_MODE_BNC_BIT = 11,
-	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
-	ETHTOOL_LINK_MODE_Pause_BIT = 13,
-	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
-	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
-	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
-	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
-	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
-	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
-	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
-	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
-	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
-	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
-	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
-	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
-	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
-	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
-	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
-	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
-	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
-	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
-	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
-	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
-	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
-	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
-	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
-	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
-	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
-	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
-	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
-	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
-	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
-	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
-	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
-	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
-	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
-	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
-	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
-	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
-	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
-	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
-	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
-	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
-	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
-	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
-	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
-	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
-	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
-	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
-	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
-	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
-	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
-	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
-	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
-	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
-	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
-	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
-	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
-	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
-	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
-	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
-	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
-	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
-	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
-	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
-	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
-	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
-	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
-	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
-	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
-	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
-	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
-	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
-	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
-	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
-	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
-	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
-	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
-	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
-	__ETHTOOL_LINK_MODE_MASK_NBITS = 92,
-};
-
-struct mii_bus;
-
-struct mdio_device {
-	struct device dev;
-	struct mii_bus *bus;
-	char modalias[32];
-	int (*bus_match)(struct device *, struct device_driver *);
-	void (*device_free)(struct mdio_device *);
-	void (*device_remove)(struct mdio_device *);
-	int addr;
-	int flags;
-	struct gpio_desc *reset_gpio;
-	struct reset_control *reset_ctrl;
-	unsigned int reset_assert_delay;
-	unsigned int reset_deassert_delay;
-};
-
-struct phy_c45_device_ids {
-	u32 devices_in_package;
-	u32 mmds_present;
-	u32 device_ids[32];
-};
-
-enum phy_state {
-	PHY_DOWN = 0,
-	PHY_READY = 1,
-	PHY_HALTED = 2,
-	PHY_UP = 3,
-	PHY_RUNNING = 4,
-	PHY_NOLINK = 5,
-	PHY_CABLETEST = 6,
-};
-
-typedef enum {
-	PHY_INTERFACE_MODE_NA = 0,
-	PHY_INTERFACE_MODE_INTERNAL = 1,
-	PHY_INTERFACE_MODE_MII = 2,
-	PHY_INTERFACE_MODE_GMII = 3,
-	PHY_INTERFACE_MODE_SGMII = 4,
-	PHY_INTERFACE_MODE_TBI = 5,
-	PHY_INTERFACE_MODE_REVMII = 6,
-	PHY_INTERFACE_MODE_RMII = 7,
-	PHY_INTERFACE_MODE_RGMII = 8,
-	PHY_INTERFACE_MODE_RGMII_ID = 9,
-	PHY_INTERFACE_MODE_RGMII_RXID = 10,
-	PHY_INTERFACE_MODE_RGMII_TXID = 11,
-	PHY_INTERFACE_MODE_RTBI = 12,
-	PHY_INTERFACE_MODE_SMII = 13,
-	PHY_INTERFACE_MODE_XGMII = 14,
-	PHY_INTERFACE_MODE_XLGMII = 15,
-	PHY_INTERFACE_MODE_MOCA = 16,
-	PHY_INTERFACE_MODE_QSGMII = 17,
-	PHY_INTERFACE_MODE_TRGMII = 18,
-	PHY_INTERFACE_MODE_1000BASEX = 19,
-	PHY_INTERFACE_MODE_2500BASEX = 20,
-	PHY_INTERFACE_MODE_RXAUI = 21,
-	PHY_INTERFACE_MODE_XAUI = 22,
-	PHY_INTERFACE_MODE_10GBASER = 23,
-	PHY_INTERFACE_MODE_USXGMII = 24,
-	PHY_INTERFACE_MODE_10GKR = 25,
-	PHY_INTERFACE_MODE_MAX = 26,
-} phy_interface_t;
-
-struct phylink;
-
-struct phy_driver;
-
-struct phy_package_shared;
-
-struct mii_timestamper;
-
-struct phy_device {
-	struct mdio_device mdio;
-	struct phy_driver *drv;
-	u32 phy_id;
-	struct phy_c45_device_ids c45_ids;
-	unsigned int is_c45: 1;
-	unsigned int is_internal: 1;
-	unsigned int is_pseudo_fixed_link: 1;
-	unsigned int is_gigabit_capable: 1;
-	unsigned int has_fixups: 1;
-	unsigned int suspended: 1;
-	unsigned int suspended_by_mdio_bus: 1;
-	unsigned int sysfs_links: 1;
-	unsigned int loopback_enabled: 1;
-	unsigned int downshifted_rate: 1;
-	unsigned int autoneg: 1;
-	unsigned int link: 1;
-	unsigned int autoneg_complete: 1;
-	unsigned int interrupts: 1;
-	enum phy_state state;
-	u32 dev_flags;
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-	u8 master_slave_get;
-	u8 master_slave_set;
-	u8 master_slave_state;
-	long unsigned int supported[2];
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	long unsigned int adv_old[2];
-	u32 eee_broken_modes;
-	int irq;
-	void *priv;
-	struct phy_package_shared *shared;
-	struct sk_buff *skb;
-	void *ehdr;
-	struct nlattr *nest;
-	struct delayed_work state_queue;
-	struct mutex lock;
-	bool sfp_bus_attached;
-	struct sfp_bus *sfp_bus;
-	struct phylink *phylink;
-	struct net_device *attached_dev;
-	struct mii_timestamper *mii_ts;
-	u8 mdix;
-	u8 mdix_ctrl;
-	void (*phy_link_change)(struct phy_device *, bool);
-	void (*adjust_link)(struct net_device *);
-	const struct macsec_ops *macsec_ops;
-};
-
-struct phy_tdr_config {
-	u32 first;
-	u32 last;
-	u32 step;
-	s8 pair;
-};
-
-struct mdio_bus_stats {
-	u64_stats_t transfers;
-	u64_stats_t errors;
-	u64_stats_t writes;
-	u64_stats_t reads;
-	struct u64_stats_sync syncp;
-};
-
-struct mii_bus {
-	struct module *owner;
-	const char *name;
-	char id[61];
-	void *priv;
-	int (*read)(struct mii_bus *, int, int);
-	int (*write)(struct mii_bus *, int, int, u16);
-	int (*reset)(struct mii_bus *);
-	struct mdio_bus_stats stats[32];
-	struct mutex mdio_lock;
-	struct device *parent;
-	enum {
-		MDIOBUS_ALLOCATED = 1,
-		MDIOBUS_REGISTERED = 2,
-		MDIOBUS_UNREGISTERED = 3,
-		MDIOBUS_RELEASED = 4,
-	} state;
-	struct device dev;
-	struct mdio_device *mdio_map[32];
-	u32 phy_mask;
-	u32 phy_ignore_ta_mask;
-	int irq[32];
-	int reset_delay_us;
-	int reset_post_delay_us;
-	struct gpio_desc *reset_gpiod;
-	enum {
-		MDIOBUS_NO_CAP = 0,
-		MDIOBUS_C22 = 1,
-		MDIOBUS_C45 = 2,
-		MDIOBUS_C22_C45 = 3,
-	} probe_capabilities;
-	struct mutex shared_lock;
-	struct phy_package_shared *shared[32];
-};
-
-struct mdio_driver_common {
-	struct device_driver driver;
-	int flags;
-};
-
-struct mii_timestamper {
-	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
-	void (*link_state)(struct mii_timestamper *, struct phy_device *);
-	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
-	struct device *device;
-};
-
-struct phy_package_shared {
-	int addr;
-	refcount_t refcnt;
-	long unsigned int flags;
-	size_t priv_size;
-	void *priv;
-};
-
-struct phy_driver {
-	struct mdio_driver_common mdiodrv;
-	u32 phy_id;
-	char *name;
-	u32 phy_id_mask;
-	const long unsigned int * const features;
-	u32 flags;
-	const void *driver_data;
-	int (*soft_reset)(struct phy_device *);
-	int (*config_init)(struct phy_device *);
-	int (*probe)(struct phy_device *);
-	int (*get_features)(struct phy_device *);
-	int (*suspend)(struct phy_device *);
-	int (*resume)(struct phy_device *);
-	int (*config_aneg)(struct phy_device *);
-	int (*aneg_done)(struct phy_device *);
-	int (*read_status)(struct phy_device *);
-	int (*ack_interrupt)(struct phy_device *);
-	int (*config_intr)(struct phy_device *);
-	int (*did_interrupt)(struct phy_device *);
-	irqreturn_t (*handle_interrupt)(struct phy_device *);
-	void (*remove)(struct phy_device *);
-	int (*match_phy_device)(struct phy_device *);
-	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*link_change_notify)(struct phy_device *);
-	int (*read_mmd)(struct phy_device *, int, u16);
-	int (*write_mmd)(struct phy_device *, int, u16, u16);
-	int (*read_page)(struct phy_device *);
-	int (*write_page)(struct phy_device *, int);
-	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
-	int (*cable_test_start)(struct phy_device *);
-	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
-	int (*cable_test_get_status)(struct phy_device *, bool *);
-	int (*get_sset_count)(struct phy_device *);
-	void (*get_strings)(struct phy_device *, u8 *);
-	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
-	int (*set_loopback)(struct phy_device *, bool);
-	int (*get_sqi)(struct phy_device *);
-	int (*get_sqi_max)(struct phy_device *);
-};
-
-enum cache_type {
-	CACHE_TYPE_NOCACHE = 0,
-	CACHE_TYPE_INST = 1,
-	CACHE_TYPE_DATA = 2,
-	CACHE_TYPE_SEPARATE = 3,
-	CACHE_TYPE_UNIFIED = 4,
-};
-
-struct cacheinfo {
-	unsigned int id;
-	enum cache_type type;
-	unsigned int level;
-	unsigned int coherency_line_size;
-	unsigned int number_of_sets;
-	unsigned int ways_of_associativity;
-	unsigned int physical_line_partition;
-	unsigned int size;
-	cpumask_t shared_cpu_map;
-	unsigned int attributes;
-	void *fw_token;
-	bool disable_sysfs;
-	void *priv;
-};
-
-struct cpu_cacheinfo {
-	struct cacheinfo *info_list;
-	unsigned int num_levels;
-	unsigned int num_leaves;
-	bool cpu_map_populated;
-};
-
-struct cache_type_info___2 {
-	const char *size_prop;
-	const char *line_size_props[2];
-	const char *nr_sets_prop;
-};
-
-struct software_node;
-
-struct software_node_ref_args {
-	const struct software_node *node;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct software_node {
-	const char *name;
-	const struct software_node *parent;
-	const struct property_entry *properties;
-};
-
-struct swnode {
-	int id;
-	struct kobject kobj;
-	struct fwnode_handle fwnode;
-	const struct software_node *node;
-	struct ida child_ids;
-	struct list_head entry;
-	struct list_head children;
-	struct swnode *parent;
-	unsigned int allocated: 1;
-};
-
 struct req {
 	struct req *next;
 	struct completion done;
@@ -99682,1112 +119712,6 @@
 	struct device *dev;
 };
 
-enum pm_qos_flags_status {
-	PM_QOS_FLAGS_UNDEFINED = 4294967295,
-	PM_QOS_FLAGS_NONE = 0,
-	PM_QOS_FLAGS_SOME = 1,
-	PM_QOS_FLAGS_ALL = 2,
-};
-
-typedef int (*pm_callback_t)(struct device *);
-
-struct of_phandle_iterator {
-	const char *cells_name;
-	int cell_count;
-	const struct device_node *parent;
-	const __be32 *list_end;
-	const __be32 *phandle_end;
-	const __be32 *cur;
-	uint32_t cur_count;
-	phandle phandle;
-	struct device_node *node;
-};
-
-enum gpd_status {
-	GENPD_STATE_ON = 0,
-	GENPD_STATE_OFF = 1,
-};
-
-enum genpd_notication {
-	GENPD_NOTIFY_PRE_OFF = 0,
-	GENPD_NOTIFY_OFF = 1,
-	GENPD_NOTIFY_PRE_ON = 2,
-	GENPD_NOTIFY_ON = 3,
-};
-
-struct dev_power_governor {
-	bool (*power_down_ok)(struct dev_pm_domain *);
-	bool (*suspend_ok)(struct device *);
-};
-
-struct gpd_dev_ops {
-	int (*start)(struct device *);
-	int (*stop)(struct device *);
-};
-
-struct genpd_power_state {
-	s64 power_off_latency_ns;
-	s64 power_on_latency_ns;
-	s64 residency_ns;
-	u64 usage;
-	u64 rejected;
-	struct fwnode_handle *fwnode;
-	ktime_t idle_time;
-	void *data;
-};
-
-struct opp_table;
-
-struct dev_pm_opp;
-
-struct genpd_lock_ops;
-
-struct generic_pm_domain {
-	struct device dev;
-	struct dev_pm_domain domain;
-	struct list_head gpd_list_node;
-	struct list_head parent_links;
-	struct list_head child_links;
-	struct list_head dev_list;
-	struct dev_power_governor *gov;
-	struct work_struct power_off_work;
-	struct fwnode_handle *provider;
-	bool has_provider;
-	const char *name;
-	atomic_t sd_count;
-	enum gpd_status status;
-	unsigned int device_count;
-	unsigned int suspended_count;
-	unsigned int prepared_count;
-	unsigned int performance_state;
-	cpumask_var_t cpus;
-	int (*power_off)(struct generic_pm_domain *);
-	int (*power_on)(struct generic_pm_domain *);
-	struct raw_notifier_head power_notifiers;
-	struct opp_table *opp_table;
-	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
-	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
-	struct gpd_dev_ops dev_ops;
-	s64 max_off_time_ns;
-	bool max_off_time_changed;
-	bool cached_power_down_ok;
-	bool cached_power_down_state_idx;
-	int (*attach_dev)(struct generic_pm_domain *, struct device *);
-	void (*detach_dev)(struct generic_pm_domain *, struct device *);
-	unsigned int flags;
-	struct genpd_power_state *states;
-	void (*free_states)(struct genpd_power_state *, unsigned int);
-	unsigned int state_count;
-	unsigned int state_idx;
-	ktime_t on_time;
-	ktime_t accounting_time;
-	const struct genpd_lock_ops *lock_ops;
-	union {
-		struct mutex mlock;
-		struct {
-			spinlock_t slock;
-			long unsigned int lock_flags;
-		};
-	};
-};
-
-struct genpd_lock_ops {
-	void (*lock)(struct generic_pm_domain *);
-	void (*lock_nested)(struct generic_pm_domain *, int);
-	int (*lock_interruptible)(struct generic_pm_domain *);
-	void (*unlock)(struct generic_pm_domain *);
-};
-
-struct gpd_link {
-	struct generic_pm_domain *parent;
-	struct list_head parent_node;
-	struct generic_pm_domain *child;
-	struct list_head child_node;
-	unsigned int performance_state;
-	unsigned int prev_performance_state;
-};
-
-struct gpd_timing_data {
-	s64 suspend_latency_ns;
-	s64 resume_latency_ns;
-	s64 effective_constraint_ns;
-	bool constraint_changed;
-	bool cached_suspend_ok;
-};
-
-struct generic_pm_domain_data {
-	struct pm_domain_data base;
-	struct gpd_timing_data td;
-	struct notifier_block nb;
-	struct notifier_block *power_nb;
-	int cpu;
-	unsigned int performance_state;
-	void *data;
-};
-
-typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
-
-struct genpd_onecell_data {
-	struct generic_pm_domain **domains;
-	unsigned int num_domains;
-	genpd_xlate_t xlate;
-};
-
-struct of_genpd_provider {
-	struct list_head link;
-	struct device_node *node;
-	genpd_xlate_t xlate;
-	void *data;
-};
-
-struct pm_clk_notifier_block {
-	struct notifier_block nb;
-	struct dev_pm_domain *pm_domain;
-	char *con_ids[0];
-};
-
-enum pce_status {
-	PCE_STATUS_NONE = 0,
-	PCE_STATUS_ACQUIRED = 1,
-	PCE_STATUS_ENABLED = 2,
-	PCE_STATUS_ERROR = 3,
-};
-
-struct pm_clock_entry {
-	struct list_head node;
-	char *con_id;
-	struct clk *clk;
-	enum pce_status status;
-};
-
-struct firmware_fallback_config {
-	unsigned int force_sysfs_fallback;
-	unsigned int ignore_sysfs_fallback;
-	int old_timeout;
-	int loading_timeout;
-};
-
-struct builtin_fw {
-	char *name;
-	void *data;
-	long unsigned int size;
-};
-
-enum fw_opt {
-	FW_OPT_UEVENT = 1,
-	FW_OPT_NOWAIT = 2,
-	FW_OPT_USERHELPER = 4,
-	FW_OPT_NO_WARN = 8,
-	FW_OPT_NOCACHE = 16,
-	FW_OPT_NOFALLBACK_SYSFS = 32,
-	FW_OPT_FALLBACK_PLATFORM = 64,
-	FW_OPT_PARTIAL = 128,
-};
-
-enum fw_status {
-	FW_STATUS_UNKNOWN = 0,
-	FW_STATUS_LOADING = 1,
-	FW_STATUS_DONE = 2,
-	FW_STATUS_ABORTED = 3,
-};
-
-struct fw_state {
-	struct completion completion;
-	enum fw_status status;
-};
-
-struct firmware_cache;
-
-struct fw_priv {
-	struct kref ref;
-	struct list_head list;
-	struct firmware_cache *fwc;
-	struct fw_state fw_st;
-	void *data;
-	size_t size;
-	size_t allocated_size;
-	size_t offset;
-	u32 opt_flags;
-	bool is_paged_buf;
-	struct page **pages;
-	int nr_pages;
-	int page_array_size;
-	bool need_uevent;
-	struct list_head pending_list;
-	const char *fw_name;
-};
-
-struct firmware_cache {
-	spinlock_t lock;
-	struct list_head head;
-	int state;
-};
-
-struct firmware_work {
-	struct work_struct work;
-	struct module *module;
-	const char *name;
-	struct device *device;
-	void *context;
-	void (*cont)(const struct firmware *, void *);
-	u32 opt_flags;
-};
-
-struct fw_sysfs {
-	bool nowait;
-	struct device dev;
-	struct fw_priv *fw_priv;
-	struct firmware *fw;
-};
-
-typedef void (*node_registration_func_t)(struct node *);
-
-typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
-
-struct node_access_nodes {
-	struct device dev;
-	struct list_head list_node;
-	unsigned int access;
-};
-
-struct node_attr {
-	struct device_attribute attr;
-	enum node_states state;
-};
-
-struct for_each_memory_block_cb_data {
-	walk_memory_blocks_func_t func;
-	void *arg;
-};
-
-enum regcache_type {
-	REGCACHE_NONE = 0,
-	REGCACHE_RBTREE = 1,
-	REGCACHE_COMPRESSED = 2,
-	REGCACHE_FLAT = 3,
-};
-
-struct reg_default {
-	unsigned int reg;
-	unsigned int def;
-};
-
-struct reg_sequence {
-	unsigned int reg;
-	unsigned int def;
-	unsigned int delay_us;
-};
-
-enum regmap_endian {
-	REGMAP_ENDIAN_DEFAULT = 0,
-	REGMAP_ENDIAN_BIG = 1,
-	REGMAP_ENDIAN_LITTLE = 2,
-	REGMAP_ENDIAN_NATIVE = 3,
-};
-
-struct regmap_range {
-	unsigned int range_min;
-	unsigned int range_max;
-};
-
-struct regmap_access_table {
-	const struct regmap_range *yes_ranges;
-	unsigned int n_yes_ranges;
-	const struct regmap_range *no_ranges;
-	unsigned int n_no_ranges;
-};
-
-typedef void (*regmap_lock)(void *);
-
-typedef void (*regmap_unlock)(void *);
-
-struct regmap_range_cfg;
-
-struct regmap_config {
-	const char *name;
-	int reg_bits;
-	int reg_stride;
-	int pad_bits;
-	int val_bits;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	bool disable_locking;
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	bool fast_io;
-	unsigned int max_register;
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	const struct reg_default *reg_defaults;
-	unsigned int num_reg_defaults;
-	enum regcache_type cache_type;
-	const void *reg_defaults_raw;
-	unsigned int num_reg_defaults_raw;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	bool zero_flag_mask;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	enum regmap_endian reg_format_endian;
-	enum regmap_endian val_format_endian;
-	const struct regmap_range_cfg *ranges;
-	unsigned int num_ranges;
-	bool use_hwlock;
-	unsigned int hwlock_id;
-	unsigned int hwlock_mode;
-	bool can_sleep;
-};
-
-struct regmap_range_cfg {
-	const char *name;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-typedef int (*regmap_hw_write)(void *, const void *, size_t);
-
-typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
-
-struct regmap_async;
-
-typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
-
-struct regmap___2;
-
-struct regmap_async {
-	struct list_head list;
-	struct regmap___2 *map;
-	void *work_buf;
-};
-
-typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
-
-typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
-
-typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
-
-typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-
-typedef struct regmap_async * (*regmap_hw_async_alloc)();
-
-typedef void (*regmap_hw_free_context)(void *);
-
-struct regmap_bus {
-	bool fast_io;
-	regmap_hw_write write;
-	regmap_hw_gather_write gather_write;
-	regmap_hw_async_write async_write;
-	regmap_hw_reg_write reg_write;
-	regmap_hw_reg_update_bits reg_update_bits;
-	regmap_hw_read read;
-	regmap_hw_reg_read reg_read;
-	regmap_hw_free_context free_context;
-	regmap_hw_async_alloc async_alloc;
-	u8 read_flag_mask;
-	enum regmap_endian reg_format_endian_default;
-	enum regmap_endian val_format_endian_default;
-	size_t max_raw_read;
-	size_t max_raw_write;
-};
-
-struct reg_field {
-	unsigned int reg;
-	unsigned int lsb;
-	unsigned int msb;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct regmap_format {
-	size_t buf_size;
-	size_t reg_bytes;
-	size_t pad_bytes;
-	size_t val_bytes;
-	void (*format_write)(struct regmap___2 *, unsigned int, unsigned int);
-	void (*format_reg)(void *, unsigned int, unsigned int);
-	void (*format_val)(void *, unsigned int, unsigned int);
-	unsigned int (*parse_val)(const void *);
-	void (*parse_inplace)(void *);
-};
-
-struct hwspinlock;
-
-struct regcache_ops;
-
-struct regmap___2 {
-	union {
-		struct mutex mutex;
-		struct {
-			spinlock_t spinlock;
-			long unsigned int spinlock_flags;
-		};
-	};
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	gfp_t alloc_flags;
-	struct device *dev;
-	void *work_buf;
-	struct regmap_format format;
-	const struct regmap_bus *bus;
-	void *bus_context;
-	const char *name;
-	bool async;
-	spinlock_t async_lock;
-	wait_queue_head_t async_waitq;
-	struct list_head async_list;
-	struct list_head async_free;
-	int async_ret;
-	bool debugfs_disable;
-	struct dentry *debugfs;
-	const char *debugfs_name;
-	unsigned int debugfs_reg_len;
-	unsigned int debugfs_val_len;
-	unsigned int debugfs_tot_len;
-	struct list_head debugfs_off_cache;
-	struct mutex cache_lock;
-	unsigned int max_register;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-	bool defer_caching;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	int reg_shift;
-	int reg_stride;
-	int reg_stride_order;
-	const struct regcache_ops *cache_ops;
-	enum regcache_type cache_type;
-	unsigned int cache_size_raw;
-	unsigned int cache_word_size;
-	unsigned int num_reg_defaults;
-	unsigned int num_reg_defaults_raw;
-	bool cache_only;
-	bool cache_bypass;
-	bool cache_free;
-	struct reg_default *reg_defaults;
-	const void *reg_defaults_raw;
-	void *cache;
-	bool cache_dirty;
-	bool no_sync_defaults;
-	struct reg_sequence *patch;
-	int patch_regs;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	size_t max_raw_read;
-	size_t max_raw_write;
-	struct rb_root range_tree;
-	void *selector_work_buf;
-	struct hwspinlock *hwlock;
-	bool can_sleep;
-};
-
-struct regcache_ops {
-	const char *name;
-	enum regcache_type type;
-	int (*init)(struct regmap___2 *);
-	int (*exit)(struct regmap___2 *);
-	void (*debugfs_init)(struct regmap___2 *);
-	int (*read)(struct regmap___2 *, unsigned int, unsigned int *);
-	int (*write)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*sync)(struct regmap___2 *, unsigned int, unsigned int);
-	int (*drop)(struct regmap___2 *, unsigned int, unsigned int);
-};
-
-struct regmap_range_node {
-	struct rb_node node;
-	const char *name;
-	struct regmap___2 *map;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct regmap_field {
-	struct regmap___2 *regmap;
-	unsigned int mask;
-	unsigned int shift;
-	unsigned int reg;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct trace_event_raw_regmap_reg {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_block {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	int count;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_sync {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_status;
-	u32 __data_loc_type;
-	int type;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_bool {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flag;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_async {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_drop_region {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int from;
-	unsigned int to;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regmap_reg {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_block {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_sync {
-	u32 name;
-	u32 status;
-	u32 type;
-};
-
-struct trace_event_data_offsets_regmap_bool {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_async {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_drop_region {
-	u32 name;
-};
-
-typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regcache_sync)(void *, struct regmap___2 *, const char *, const char *);
-
-typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap___2 *, bool);
-
-typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap___2 *, bool);
-
-typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap___2 *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap___2 *);
-
-typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap___2 *, unsigned int, unsigned int);
-
-struct regcache_rbtree_node {
-	void *block;
-	long int *cache_present;
-	unsigned int base_reg;
-	unsigned int blklen;
-	struct rb_node node;
-};
-
-struct regcache_rbtree_ctx {
-	struct rb_root root;
-	struct regcache_rbtree_node *cached_rbnode;
-};
-
-struct regmap_debugfs_off_cache {
-	struct list_head list;
-	off_t min;
-	off_t max;
-	unsigned int base_reg;
-	unsigned int max_reg;
-};
-
-struct regmap_debugfs_node {
-	struct regmap___2 *map;
-	struct list_head link;
-};
-
-struct i2c_msg {
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	__u8 *buf;
-};
-
-union i2c_smbus_data {
-	__u8 byte;
-	__u16 word;
-	__u8 block[34];
-};
-
-enum i2c_slave_event {
-	I2C_SLAVE_READ_REQUESTED = 0,
-	I2C_SLAVE_WRITE_REQUESTED = 1,
-	I2C_SLAVE_READ_PROCESSED = 2,
-	I2C_SLAVE_WRITE_RECEIVED = 3,
-	I2C_SLAVE_STOP = 4,
-};
-
-struct i2c_client;
-
-typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
-
-struct i2c_adapter;
-
-struct i2c_client {
-	short unsigned int flags;
-	short unsigned int addr;
-	char name[20];
-	struct i2c_adapter *adapter;
-	struct device dev;
-	int init_irq;
-	int irq;
-	struct list_head detected;
-	i2c_slave_cb_t slave_cb;
-};
-
-struct i2c_algorithm;
-
-struct i2c_lock_operations;
-
-struct i2c_bus_recovery_info;
-
-struct i2c_adapter_quirks;
-
-struct i2c_adapter {
-	struct module *owner;
-	unsigned int class;
-	const struct i2c_algorithm *algo;
-	void *algo_data;
-	const struct i2c_lock_operations *lock_ops;
-	struct rt_mutex bus_lock;
-	struct rt_mutex mux_lock;
-	int timeout;
-	int retries;
-	struct device dev;
-	long unsigned int locked_flags;
-	int nr;
-	char name[48];
-	struct completion dev_released;
-	struct mutex userspace_clients_lock;
-	struct list_head userspace_clients;
-	struct i2c_bus_recovery_info *bus_recovery_info;
-	const struct i2c_adapter_quirks *quirks;
-	struct irq_domain *host_notify_domain;
-};
-
-struct i2c_algorithm {
-	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	u32 (*functionality)(struct i2c_adapter *);
-	int (*reg_slave)(struct i2c_client *);
-	int (*unreg_slave)(struct i2c_client *);
-};
-
-struct i2c_lock_operations {
-	void (*lock_bus)(struct i2c_adapter *, unsigned int);
-	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
-	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
-};
-
-struct pinctrl;
-
-struct pinctrl_state;
-
-struct i2c_bus_recovery_info {
-	int (*recover_bus)(struct i2c_adapter *);
-	int (*get_scl)(struct i2c_adapter *);
-	void (*set_scl)(struct i2c_adapter *, int);
-	int (*get_sda)(struct i2c_adapter *);
-	void (*set_sda)(struct i2c_adapter *, int);
-	int (*get_bus_free)(struct i2c_adapter *);
-	void (*prepare_recovery)(struct i2c_adapter *);
-	void (*unprepare_recovery)(struct i2c_adapter *);
-	struct gpio_desc *scl_gpiod;
-	struct gpio_desc *sda_gpiod;
-	struct pinctrl *pinctrl;
-	struct pinctrl_state *pins_default;
-	struct pinctrl_state *pins_gpio;
-};
-
-struct i2c_adapter_quirks {
-	u64 flags;
-	int max_num_msgs;
-	u16 max_write_len;
-	u16 max_read_len;
-	u16 max_comb_1st_msg_len;
-	u16 max_comb_2nd_msg_len;
-};
-
-struct ptp_system_timestamp {
-	struct timespec64 pre_ts;
-	struct timespec64 post_ts;
-};
-
-struct spi_statistics {
-	spinlock_t lock;
-	long unsigned int messages;
-	long unsigned int transfers;
-	long unsigned int errors;
-	long unsigned int timedout;
-	long unsigned int spi_sync;
-	long unsigned int spi_sync_immediate;
-	long unsigned int spi_async;
-	long long unsigned int bytes;
-	long long unsigned int bytes_rx;
-	long long unsigned int bytes_tx;
-	long unsigned int transfer_bytes_histo[17];
-	long unsigned int transfers_split_maxsize;
-};
-
-struct spi_delay {
-	u16 value;
-	u8 unit;
-};
-
-struct spi_controller;
-
-struct spi_device {
-	struct device dev;
-	struct spi_controller *controller;
-	struct spi_controller *master;
-	u32 max_speed_hz;
-	u8 chip_select;
-	u8 bits_per_word;
-	bool rt;
-	u32 mode;
-	int irq;
-	void *controller_state;
-	void *controller_data;
-	char modalias[32];
-	const char *driver_override;
-	int cs_gpio;
-	struct gpio_desc *cs_gpiod;
-	struct spi_delay word_delay;
-	struct spi_statistics statistics;
-};
-
-struct spi_message;
-
-struct spi_transfer;
-
-struct spi_controller_mem_ops;
-
-struct spi_controller {
-	struct device dev;
-	struct list_head list;
-	s16 bus_num;
-	u16 num_chipselect;
-	u16 dma_alignment;
-	u32 mode_bits;
-	u32 buswidth_override_bits;
-	u32 bits_per_word_mask;
-	u32 min_speed_hz;
-	u32 max_speed_hz;
-	u16 flags;
-	bool slave;
-	size_t (*max_transfer_size)(struct spi_device *);
-	size_t (*max_message_size)(struct spi_device *);
-	struct mutex io_mutex;
-	spinlock_t bus_lock_spinlock;
-	struct mutex bus_lock_mutex;
-	bool bus_lock_flag;
-	int (*setup)(struct spi_device *);
-	int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
-	int (*transfer)(struct spi_device *, struct spi_message *);
-	void (*cleanup)(struct spi_device *);
-	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	bool queued;
-	struct kthread_worker *kworker;
-	struct kthread_work pump_messages;
-	spinlock_t queue_lock;
-	struct list_head queue;
-	struct spi_message *cur_msg;
-	bool idling;
-	bool busy;
-	bool running;
-	bool rt;
-	bool auto_runtime_pm;
-	bool cur_msg_prepared;
-	bool cur_msg_mapped;
-	bool last_cs_enable;
-	bool last_cs_mode_high;
-	bool fallback;
-	struct completion xfer_completion;
-	size_t max_dma_len;
-	int (*prepare_transfer_hardware)(struct spi_controller *);
-	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_transfer_hardware)(struct spi_controller *);
-	int (*prepare_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
-	int (*slave_abort)(struct spi_controller *);
-	void (*set_cs)(struct spi_device *, bool);
-	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	void (*handle_err)(struct spi_controller *, struct spi_message *);
-	const struct spi_controller_mem_ops *mem_ops;
-	struct spi_delay cs_setup;
-	struct spi_delay cs_hold;
-	struct spi_delay cs_inactive;
-	int *cs_gpios;
-	struct gpio_desc **cs_gpiods;
-	bool use_gpio_descriptors;
-	u8 unused_native_cs;
-	u8 max_native_cs;
-	struct spi_statistics statistics;
-	struct dma_chan___2 *dma_tx;
-	struct dma_chan___2 *dma_rx;
-	void *dummy_rx;
-	void *dummy_tx;
-	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
-	bool ptp_sts_supported;
-	long unsigned int irq_flags;
-};
-
-struct spi_message {
-	struct list_head transfers;
-	struct spi_device *spi;
-	unsigned int is_dma_mapped: 1;
-	void (*complete)(void *);
-	void *context;
-	unsigned int frame_length;
-	unsigned int actual_length;
-	int status;
-	struct list_head queue;
-	void *state;
-	struct list_head resources;
-};
-
-struct spi_transfer {
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int len;
-	dma_addr_t tx_dma;
-	dma_addr_t rx_dma;
-	struct sg_table tx_sg;
-	struct sg_table rx_sg;
-	unsigned int cs_change: 1;
-	unsigned int tx_nbits: 3;
-	unsigned int rx_nbits: 3;
-	u8 bits_per_word;
-	u16 delay_usecs;
-	struct spi_delay delay;
-	struct spi_delay cs_change_delay;
-	struct spi_delay word_delay;
-	u32 speed_hz;
-	u32 effective_speed_hz;
-	unsigned int ptp_sts_word_pre;
-	unsigned int ptp_sts_word_post;
-	struct ptp_system_timestamp *ptp_sts;
-	bool timestamped;
-	struct list_head transfer_list;
-	u16 error;
-};
-
-struct spi_mem;
-
-struct spi_mem_op;
-
-struct spi_mem_dirmap_desc;
-
-struct spi_controller_mem_ops {
-	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
-	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
-	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
-	const char * (*get_name)(struct spi_mem *);
-	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
-	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
-	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
-	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
-};
-
-struct regmap_async_spi {
-	struct regmap_async core;
-	struct spi_message m;
-	struct spi_transfer t[2];
-};
-
-struct regmap_irq_type {
-	unsigned int type_reg_offset;
-	unsigned int type_reg_mask;
-	unsigned int type_rising_val;
-	unsigned int type_falling_val;
-	unsigned int type_level_low_val;
-	unsigned int type_level_high_val;
-	unsigned int types_supported;
-};
-
-struct regmap_irq {
-	unsigned int reg_offset;
-	unsigned int mask;
-	struct regmap_irq_type type;
-};
-
-struct regmap_irq_sub_irq_map {
-	unsigned int num_regs;
-	unsigned int *offset;
-};
-
-struct regmap_irq_chip {
-	const char *name;
-	unsigned int main_status;
-	unsigned int num_main_status_bits;
-	struct regmap_irq_sub_irq_map *sub_reg_offsets;
-	int num_main_regs;
-	unsigned int status_base;
-	unsigned int mask_base;
-	unsigned int unmask_base;
-	unsigned int ack_base;
-	unsigned int wake_base;
-	unsigned int type_base;
-	unsigned int irq_reg_stride;
-	bool mask_writeonly: 1;
-	bool init_ack_masked: 1;
-	bool mask_invert: 1;
-	bool use_ack: 1;
-	bool ack_invert: 1;
-	bool clear_ack: 1;
-	bool wake_invert: 1;
-	bool runtime_pm: 1;
-	bool type_invert: 1;
-	bool type_in_mask: 1;
-	bool clear_on_unmask: 1;
-	int num_regs;
-	const struct regmap_irq *irqs;
-	int num_irqs;
-	int num_type_reg;
-	unsigned int type_reg_stride;
-	int (*handle_pre_irq)(void *);
-	int (*handle_post_irq)(void *);
-	void *irq_drv_data;
-};
-
-struct regmap_irq_chip_data {
-	struct mutex lock;
-	struct irq_chip irq_chip;
-	struct regmap___2 *map;
-	const struct regmap_irq_chip *chip;
-	int irq_base;
-	struct irq_domain *domain;
-	int irq;
-	int wake_count;
-	void *status_reg_buf;
-	unsigned int *main_status_buf;
-	unsigned int *status_buf;
-	unsigned int *mask_buf;
-	unsigned int *mask_buf_def;
-	unsigned int *wake_buf;
-	unsigned int *type_buf;
-	unsigned int *type_buf_def;
-	unsigned int irq_reg_stride;
-	unsigned int type_reg_stride;
-	bool clear_status: 1;
-};
-
-struct soc_device___2 {
-	struct device dev;
-	struct soc_device_attribute *attr;
-	int soc_dev_num;
-};
-
-struct devcd_entry {
-	struct device devcd_dev;
-	void *data;
-	size_t datalen;
-	struct module *owner;
-	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
-	void (*free)(void *);
-	struct delayed_work del_wk;
-	struct device *failing_dev;
-};
-
-typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
-
-struct platform_msi_priv_data {
-	struct device *dev;
-	void *host_data;
-	msi_alloc_info_t arg;
-	irq_write_msi_msg_t write_msg;
-	int devid;
-};
-
-struct brd_device {
-	int brd_number;
-	struct request_queue *brd_queue;
-	struct gendisk *brd_disk;
-	struct list_head brd_list;
-	spinlock_t brd_lock;
-	struct xarray brd_pages;
-};
-
 typedef long unsigned int __kernel_old_dev_t;
 
 enum {
@@ -100839,87 +119763,5484 @@
 	Lo_unbound = 0,
 	Lo_bound = 1,
 	Lo_rundown = 2,
+	Lo_deleting = 3,
 };
 
-struct loop_func_table;
-
 struct loop_device {
 	int lo_number;
-	atomic_t lo_refcnt;
 	loff_t lo_offset;
 	loff_t lo_sizelimit;
 	int lo_flags;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
 	char lo_file_name[64];
-	char lo_crypt_name[64];
-	char lo_encrypt_key[32];
-	int lo_encrypt_key_size;
-	struct loop_func_table *lo_encryption;
-	__u32 lo_init[2];
-	kuid_t lo_key_owner;
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
 	struct file *lo_backing_file;
 	struct block_device *lo_device;
-	void *key_data;
 	gfp_t old_gfp_mask;
 	spinlock_t lo_lock;
 	int lo_state;
-	struct kthread_worker worker;
-	struct task_struct *worker_task;
+	spinlock_t lo_work_lock;
+	struct workqueue_struct *workqueue;
+	struct work_struct rootcg_work;
+	struct list_head rootcg_cmd_list;
+	struct list_head idle_worker_list;
+	struct rb_root worker_tree;
+	struct timer_list timer;
 	bool use_dio;
 	bool sysfs_inited;
 	struct request_queue *lo_queue;
 	struct blk_mq_tag_set tag_set;
 	struct gendisk *lo_disk;
-};
-
-struct loop_func_table {
-	int number;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	int (*init)(struct loop_device *, const struct loop_info64 *);
-	int (*release)(struct loop_device *);
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct module *owner;
+	struct mutex lo_mutex;
+	bool idr_visible;
 };
 
 struct loop_cmd {
-	struct kthread_work work;
+	struct list_head list_entry;
 	bool use_aio;
 	atomic_t ref;
 	long int ret;
 	struct kiocb iocb;
 	struct bio_vec *bvec;
-	struct cgroup_subsys_state *css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct cgroup_subsys_state *memcg_css;
 };
 
-struct compat_loop_info {
-	compat_int_t lo_number;
-	compat_dev_t lo_device;
-	compat_ulong_t lo_inode;
-	compat_dev_t lo_rdevice;
-	compat_int_t lo_offset;
-	compat_int_t lo_encrypt_type;
-	compat_int_t lo_encrypt_key_size;
-	compat_int_t lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	compat_ulong_t lo_init[2];
-	char reserved[4];
+struct loop_worker {
+	struct rb_node rb_node;
+	struct work_struct work;
+	struct list_head cmd_list;
+	struct list_head idle_list;
+	struct loop_device *lo;
+	struct cgroup_subsys_state *blkcg_css;
+	long unsigned int last_ran_at;
 };
 
-struct test_struct {
-	char *get;
-	char *put;
-	void (*get_handler)(char *);
-	int (*put_handler)(char *, char *);
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
 };
 
-struct test_state {
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 1000,
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct opal_dev;
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+};
+
+struct mv_sata_platform_data {
+	int n_ports;
+};
+
+struct mbus_dram_window {
+	u8 cs_index;
+	u8 mbus_attr;
+	u64 base;
+	u64 size;
+};
+
+struct mbus_dram_target_info {
+	u8 mbus_dram_target_id;
+	int num_cs;
+	struct mbus_dram_window cs[4];
+};
+
+enum {
+	MV_PRIMARY_BAR = 0,
+	MV_IO_BAR = 2,
+	MV_MISC_BAR = 3,
+	MV_MAJOR_REG_AREA_SZ = 65536,
+	MV_MINOR_REG_AREA_SZ = 8192,
+	COAL_CLOCKS_PER_USEC = 150,
+	MAX_COAL_TIME_THRESHOLD = 16777215,
+	MAX_COAL_IO_COUNT = 255,
+	MV_PCI_REG_BASE = 0,
+	COAL_REG_BASE = 98304,
+	IRQ_COAL_CAUSE = 98312,
+	ALL_PORTS_COAL_IRQ = 16,
+	IRQ_COAL_IO_THRESHOLD = 98508,
+	IRQ_COAL_TIME_THRESHOLD = 98512,
+	TRAN_COAL_CAUSE_LO = 98440,
+	TRAN_COAL_CAUSE_HI = 98444,
+	SATAHC0_REG_BASE = 131072,
+	FLASH_CTL = 66668,
+	GPIO_PORT_CTL = 66800,
+	RESET_CFG = 98520,
+	MV_PCI_REG_SZ = 65536,
+	MV_SATAHC_REG_SZ = 65536,
+	MV_SATAHC_ARBTR_REG_SZ = 8192,
+	MV_PORT_REG_SZ = 8192,
+	MV_MAX_Q_DEPTH = 32,
+	MV_MAX_Q_DEPTH_MASK = 31,
+	MV_CRQB_Q_SZ = 1024,
+	MV_CRPB_Q_SZ = 256,
+	MV_MAX_SG_CT = 256,
+	MV_SG_TBL_SZ = 4096,
+	MV_PORT_HC_SHIFT = 2,
+	MV_PORTS_PER_HC = 4,
+	MV_PORT_MASK = 3,
+	MV_FLAG_DUAL_HC = 1073741824,
+	MV_COMMON_FLAGS = 514,
+	MV_GEN_I_FLAGS = 578,
+	MV_GEN_II_FLAGS = 656898,
+	MV_GEN_IIE_FLAGS = 919042,
+	CRQB_FLAG_READ = 1,
+	CRQB_TAG_SHIFT = 1,
+	CRQB_IOID_SHIFT = 6,
+	CRQB_PMP_SHIFT = 12,
+	CRQB_HOSTQ_SHIFT = 17,
+	CRQB_CMD_ADDR_SHIFT = 8,
+	CRQB_CMD_CS = 4096,
+	CRQB_CMD_LAST = 32768,
+	CRPB_FLAG_STATUS_SHIFT = 8,
+	CRPB_IOID_SHIFT_6 = 5,
+	CRPB_IOID_SHIFT_7 = 7,
+	EPRD_FLAG_END_OF_TBL = -2147483648,
+	MV_PCI_COMMAND = 3072,
+	MV_PCI_COMMAND_MWRCOM = 16,
+	MV_PCI_COMMAND_MRDTRIG = 128,
+	PCI_MAIN_CMD_STS = 3376,
+	STOP_PCI_MASTER = 4,
+	PCI_MASTER_EMPTY = 8,
+	GLOB_SFT_RST = 16,
+	MV_PCI_MODE = 3328,
+	MV_PCI_MODE_MASK = 48,
+	MV_PCI_EXP_ROM_BAR_CTL = 3372,
+	MV_PCI_DISC_TIMER = 3332,
+	MV_PCI_MSI_TRIGGER = 3128,
+	MV_PCI_SERR_MASK = 3112,
+	MV_PCI_XBAR_TMOUT = 7428,
+	MV_PCI_ERR_LOW_ADDRESS = 7488,
+	MV_PCI_ERR_HIGH_ADDRESS = 7492,
+	MV_PCI_ERR_ATTRIBUTE = 7496,
+	MV_PCI_ERR_COMMAND = 7504,
+	PCI_IRQ_CAUSE = 7512,
+	PCI_IRQ_MASK = 7516,
+	PCI_UNMASK_ALL_IRQS = 8388607,
+	PCIE_IRQ_CAUSE = 6400,
+	PCIE_IRQ_MASK = 6416,
+	PCIE_UNMASK_ALL_IRQS = 1034,
+	PCI_HC_MAIN_IRQ_CAUSE = 7520,
+	PCI_HC_MAIN_IRQ_MASK = 7524,
+	SOC_HC_MAIN_IRQ_CAUSE = 131104,
+	SOC_HC_MAIN_IRQ_MASK = 131108,
+	ERR_IRQ = 1,
+	DONE_IRQ = 2,
+	HC0_IRQ_PEND = 511,
+	HC_SHIFT = 9,
+	DONE_IRQ_0_3 = 170,
+	DONE_IRQ_4_7 = 87040,
+	PCI_ERR = 262144,
+	TRAN_COAL_LO_DONE = 524288,
+	TRAN_COAL_HI_DONE = 1048576,
+	PORTS_0_3_COAL_DONE = 256,
+	PORTS_4_7_COAL_DONE = 131072,
+	ALL_PORTS_COAL_DONE = 2097152,
+	GPIO_INT = 4194304,
+	SELF_INT = 8388608,
+	TWSI_INT = 16777216,
+	HC_MAIN_RSVD = -33554432,
+	HC_MAIN_RSVD_5 = -524288,
+	HC_MAIN_RSVD_SOC = -320,
+	HC_CFG = 0,
+	HC_IRQ_CAUSE = 20,
+	DMA_IRQ = 1,
+	HC_COAL_IRQ = 16,
+	DEV_IRQ = 256,
+	HC_IRQ_COAL_IO_THRESHOLD = 12,
+	HC_IRQ_COAL_TIME_THRESHOLD = 16,
+	SOC_LED_CTRL = 44,
+	SOC_LED_CTRL_BLINK = 1,
+	SOC_LED_CTRL_ACT_PRESENCE = 4,
+	SHD_BLK = 256,
+	SHD_CTL_AST = 32,
+	SATA_STATUS = 768,
+	SATA_ACTIVE = 848,
+	FIS_IRQ_CAUSE = 868,
+	FIS_IRQ_CAUSE_AN = 512,
+	LTMODE = 780,
+	LTMODE_BIT8 = 256,
+	PHY_MODE2 = 816,
+	PHY_MODE3 = 784,
+	PHY_MODE4 = 788,
+	PHY_MODE4_CFG_MASK = 3,
+	PHY_MODE4_CFG_VALUE = 1,
+	PHY_MODE4_RSVD_ZEROS = 1575223290,
+	PHY_MODE4_RSVD_ONES = 5,
+	SATA_IFCTL = 836,
+	SATA_TESTCTL = 840,
+	SATA_IFSTAT = 844,
+	VENDOR_UNIQUE_FIS = 860,
+	FISCFG = 864,
+	FISCFG_WAIT_DEV_ERR = 256,
+	FISCFG_SINGLE_SYNC = 65536,
+	PHY_MODE9_GEN2 = 920,
+	PHY_MODE9_GEN1 = 924,
+	PHYCFG_OFS = 928,
+	MV5_PHY_MODE = 116,
+	MV5_LTMODE = 48,
+	MV5_PHY_CTL = 12,
+	SATA_IFCFG = 80,
+	LP_PHY_CTL = 88,
+	LP_PHY_CTL_PIN_PU_PLL = 1,
+	LP_PHY_CTL_PIN_PU_RX = 2,
+	LP_PHY_CTL_PIN_PU_TX = 4,
+	LP_PHY_CTL_GEN_TX_3G = 32,
+	LP_PHY_CTL_GEN_RX_3G = 512,
+	MV_M2_PREAMP_MASK = 2016,
+	EDMA_CFG = 0,
+	EDMA_CFG_Q_DEPTH = 31,
+	EDMA_CFG_NCQ = 32,
+	EDMA_CFG_NCQ_GO_ON_ERR = 16384,
+	EDMA_CFG_RD_BRST_EXT = 2048,
+	EDMA_CFG_WR_BUFF_LEN = 8192,
+	EDMA_CFG_EDMA_FBS = 65536,
+	EDMA_CFG_FBS = 67108864,
+	EDMA_ERR_IRQ_CAUSE = 8,
+	EDMA_ERR_IRQ_MASK = 12,
+	EDMA_ERR_D_PAR = 1,
+	EDMA_ERR_PRD_PAR = 2,
+	EDMA_ERR_DEV = 4,
+	EDMA_ERR_DEV_DCON = 8,
+	EDMA_ERR_DEV_CON = 16,
+	EDMA_ERR_SERR = 32,
+	EDMA_ERR_SELF_DIS = 128,
+	EDMA_ERR_SELF_DIS_5 = 256,
+	EDMA_ERR_BIST_ASYNC = 256,
+	EDMA_ERR_TRANS_IRQ_7 = 256,
+	EDMA_ERR_CRQB_PAR = 512,
+	EDMA_ERR_CRPB_PAR = 1024,
+	EDMA_ERR_INTRL_PAR = 2048,
+	EDMA_ERR_IORDY = 4096,
+	EDMA_ERR_LNK_CTRL_RX = 122880,
+	EDMA_ERR_LNK_CTRL_RX_0 = 8192,
+	EDMA_ERR_LNK_CTRL_RX_1 = 16384,
+	EDMA_ERR_LNK_CTRL_RX_2 = 32768,
+	EDMA_ERR_LNK_CTRL_RX_3 = 65536,
+	EDMA_ERR_LNK_DATA_RX = 1966080,
+	EDMA_ERR_LNK_CTRL_TX = 65011712,
+	EDMA_ERR_LNK_CTRL_TX_0 = 2097152,
+	EDMA_ERR_LNK_CTRL_TX_1 = 4194304,
+	EDMA_ERR_LNK_CTRL_TX_2 = 8388608,
+	EDMA_ERR_LNK_CTRL_TX_3 = 16777216,
+	EDMA_ERR_LNK_CTRL_TX_4 = 33554432,
+	EDMA_ERR_LNK_DATA_TX = 2080374784,
+	EDMA_ERR_TRANS_PROTO = -2147483648,
+	EDMA_ERR_OVERRUN_5 = 32,
+	EDMA_ERR_UNDERRUN_5 = 64,
+	EDMA_ERR_IRQ_TRANSIENT = 65101824,
+	EDMA_EH_FREEZE = -65102149,
+	EDMA_EH_FREEZE_5 = 8059,
+	EDMA_REQ_Q_BASE_HI = 16,
+	EDMA_REQ_Q_IN_PTR = 20,
+	EDMA_REQ_Q_OUT_PTR = 24,
+	EDMA_REQ_Q_PTR_SHIFT = 5,
+	EDMA_RSP_Q_BASE_HI = 28,
+	EDMA_RSP_Q_IN_PTR = 32,
+	EDMA_RSP_Q_OUT_PTR = 36,
+	EDMA_RSP_Q_PTR_SHIFT = 3,
+	EDMA_CMD = 40,
+	EDMA_EN = 1,
+	EDMA_DS = 2,
+	EDMA_RESET = 4,
+	EDMA_STATUS = 48,
+	EDMA_STATUS_CACHE_EMPTY = 64,
+	EDMA_STATUS_IDLE = 128,
+	EDMA_IORDY_TMOUT = 52,
+	EDMA_ARB_CFG = 56,
+	EDMA_HALTCOND = 96,
+	EDMA_UNKNOWN_RSVD = 108,
+	BMDMA_CMD = 548,
+	BMDMA_STATUS = 552,
+	BMDMA_PRD_LOW = 556,
+	BMDMA_PRD_HIGH = 560,
+	MV_HP_FLAG_MSI = 1,
+	MV_HP_ERRATA_50XXB0 = 2,
+	MV_HP_ERRATA_50XXB2 = 4,
+	MV_HP_ERRATA_60X1B2 = 8,
+	MV_HP_ERRATA_60X1C0 = 16,
+	MV_HP_GEN_I = 64,
+	MV_HP_GEN_II = 128,
+	MV_HP_GEN_IIE = 256,
+	MV_HP_PCIE = 512,
+	MV_HP_CUT_THROUGH = 1024,
+	MV_HP_FLAG_SOC = 2048,
+	MV_HP_QUIRK_LED_BLINK_EN = 4096,
+	MV_HP_FIX_LP_PHY_CTL = 8192,
+	MV_PP_FLAG_EDMA_EN = 1,
+	MV_PP_FLAG_NCQ_EN = 2,
+	MV_PP_FLAG_FBS_EN = 4,
+	MV_PP_FLAG_DELAYED_EH = 8,
+	MV_PP_FLAG_FAKE_ATA_BUSY = 16,
+};
+
+enum {
+	MV_DMA_BOUNDARY = 65535,
+	EDMA_REQ_Q_BASE_LO_MASK = 4294966272,
+	EDMA_RSP_Q_BASE_LO_MASK = 4294967040,
+};
+
+enum chip_type {
+	chip_504x = 0,
+	chip_508x = 1,
+	chip_5080 = 2,
+	chip_604x = 3,
+	chip_608x = 4,
+	chip_6042 = 5,
+	chip_7042 = 6,
+	chip_soc = 7,
+};
+
+struct mv_crqb {
+	__le32 sg_addr;
+	__le32 sg_addr_hi;
+	__le16 ctrl_flags;
+	__le16 ata_cmd[11];
+};
+
+struct mv_crqb_iie {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 flags;
+	__le32 len;
+	__le32 ata_cmd[4];
+};
+
+struct mv_crpb {
+	__le16 id;
+	__le16 flags;
+	__le32 tmstmp;
+};
+
+struct mv_sg {
+	__le32 addr;
+	__le32 flags_size;
+	__le32 addr_hi;
+	__le32 reserved;
+};
+
+struct mv_cached_regs {
+	u32 fiscfg;
+	u32 ltmode;
+	u32 haltcond;
+	u32 unknown_rsvd;
+};
+
+struct mv_port_priv {
+	struct mv_crqb *crqb;
+	dma_addr_t crqb_dma;
+	struct mv_crpb *crpb;
+	dma_addr_t crpb_dma;
+	struct mv_sg *sg_tbl[32];
+	dma_addr_t sg_tbl_dma[32];
+	unsigned int req_idx;
+	unsigned int resp_idx;
+	u32 pp_flags;
+	struct mv_cached_regs cached;
+	unsigned int delayed_eh_pmp_map;
+};
+
+struct mv_port_signal {
+	u32 amps;
+	u32 pre;
+};
+
+struct mv_hw_ops;
+
+struct mv_host_priv {
+	u32 hp_flags;
+	unsigned int board_idx;
+	u32 main_irq_mask;
+	struct mv_port_signal signal[8];
+	const struct mv_hw_ops *ops;
+	int n_ports;
+	void *base;
+	void *main_irq_cause_addr;
+	void *main_irq_mask_addr;
+	u32 irq_cause_offset;
+	u32 irq_mask_offset;
+	u32 unmask_all_irqs;
+	struct clk *clk;
+	struct clk **port_clks;
+	struct phy___2 **port_phys;
+	struct dma_pool *crqb_pool;
+	struct dma_pool *crpb_pool;
+	struct dma_pool *sg_tbl_pool;
+};
+
+struct mv_hw_ops {
+	void (*phy_errata)(struct mv_host_priv *, void *, unsigned int);
+	void (*enable_leds)(struct mv_host_priv *, void *);
+	void (*read_preamp)(struct mv_host_priv *, int, void *);
+	int (*reset_hc)(struct ata_host *, void *, unsigned int);
+	void (*reset_flash)(struct mv_host_priv *, void *);
+	void (*reset_bus)(struct ata_host *, void *);
+};
+
+struct e1000_option___2 {
+	enum {
+		enable_option___2 = 0,
+		range_option___2 = 1,
+		list_option___2 = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			const struct e1000_opt_list *p;
+		} l;
+	} arg;
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+} __attribute__((mode(byte)));
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+struct i2c_smbus_ioctl_data {
+	__u8 read_write;
+	__u8 command;
+	__u32 size;
+	union i2c_smbus_data *data;
+};
+
+struct i2c_rdwr_ioctl_data {
+	struct i2c_msg *msgs;
+	__u32 nmsgs;
+};
+
+struct i2c_dev {
+	struct list_head list;
+	struct i2c_adapter *adap;
+	struct device dev;
+	struct cdev cdev;
+};
+
+struct opal_occ_msg {
+	__be64 type;
+	__be64 chip;
+	__be64 throttle_status;
+};
+
+struct global_pstate_info {
+	int highest_lpstate_idx;
+	unsigned int elapsed_time;
+	unsigned int last_sampled_time;
+	int last_lpstate_idx;
+	int last_gpstate_idx;
+	spinlock_t gpstate_lock;
+	struct timer_list timer;
+	struct cpufreq_policy *policy;
+};
+
+struct pstate_idx_revmap_data {
+	u8 pstate_id;
+	unsigned int cpufreq_table_idx;
+	struct hlist_node hentry;
+};
+
+enum throttle_reason_type {
+	NO_THROTTLE = 0,
+	POWERCAP = 1,
+	CPU_OVERTEMP = 2,
+	POWER_SUPPLY_FAILURE = 3,
+	OVERCURRENT = 4,
+	OCC_RESET_THROTTLE = 5,
+	OCC_MAX_REASON = 6,
+};
+
+struct chip {
+	unsigned int id;
+	bool throttled;
+	bool restore;
+	u8 throttle_reason;
+	cpumask_t mask;
+	struct work_struct throttle;
+	int throttle_turbo;
+	int throttle_sub_turbo;
+	int reason[6];
+};
+
+struct powernv_pstate_info {
+	unsigned int min;
+	unsigned int max;
+	unsigned int nominal;
+	unsigned int nr_pstates;
+	bool wof_enabled;
+};
+
+struct powernv_smp_call_data {
+	unsigned int freq;
+	u8 pstate_id;
+	u8 gpstate_id;
+};
+
+struct gro_cell {
+	struct sk_buff_head napi_skbs;
+	struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+struct psample_group {
+	struct list_head list;
+	struct net *net;
+	u32 group_num;
+	u32 refcount;
+	u32 seq;
+	struct callback_head rcu;
+};
+
+struct action_gate_entry {
+	u8 gate_state;
+	u32 interval;
+	s32 ipv;
+	s32 maxoctets;
+};
+
+enum qdisc_class_ops_flags {
+	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_action_ops;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_basic_sync *cpu_bstats_hw;
+	struct gnet_stats_queue *cpu_qstats;
+	struct tc_cookie *act_cookie;
+	struct tcf_chain *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+struct tcf_block_ext_info {
+	enum flow_block_binder_type binder_type;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+	u32 block_index;
+};
+
+struct tcf_qevent {
+	struct tcf_block *block;
+	struct tcf_block_ext_info info;
+	struct tcf_proto *filter_chain;
+};
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	int action;
+	int police;
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	u32 tcfp_off_max_hint;
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	long: 64;
+};
+
+struct tcf_filter_chain_list_item {
+	struct list_head list;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+};
+
+struct tcf_net {
+	spinlock_t idr_lock;
+	struct idr idr;
+};
+
+struct tcf_block_owner_item {
+	struct list_head list;
+	struct Qdisc *q;
+	enum flow_block_binder_type binder_type;
+};
+
+struct tcf_chain_info {
+	struct tcf_proto **pprev;
+	struct tcf_proto *next;
+};
+
+struct tcf_dump_args {
+	struct tcf_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct tcf_block *block;
+	struct Qdisc *q;
+	u32 parent;
+	bool terse_dump;
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+struct nf_loginfo {
+	u_int8_t type;
+	union {
+		struct {
+			u_int32_t copy_len;
+			u_int16_t group;
+			u_int16_t qthreshold;
+			u_int16_t flags;
+		} ulog;
+		struct {
+			u_int8_t level;
+			u_int8_t logflags;
+		} log;
+	} u;
+};
+
+struct nf_log_buf {
+	unsigned int count;
+	char buf[1020];
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	long: 0;
+	int bucket;
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol *next;
+	int priority;
+};
+
+enum {
+	RPCBPROC_NULL = 0,
+	RPCBPROC_SET = 1,
+	RPCBPROC_UNSET = 2,
+	RPCBPROC_GETPORT = 3,
+	RPCBPROC_GETADDR = 3,
+	RPCBPROC_DUMP = 4,
+	RPCBPROC_CALLIT = 5,
+	RPCBPROC_BCAST = 5,
+	RPCBPROC_GETTIME = 6,
+	RPCBPROC_UADDR2TADDR = 7,
+	RPCBPROC_TADDR2UADDR = 8,
+	RPCBPROC_GETVERSADDR = 9,
+	RPCBPROC_INDIRECT = 10,
+	RPCBPROC_GETADDRLIST = 11,
+	RPCBPROC_GETSTAT = 12,
+};
+
+struct rpcbind_args {
+	struct rpc_xprt *r_xprt;
+	u32 r_prog;
+	u32 r_vers;
+	u32 r_prot;
+	short unsigned int r_port;
+	const char *r_netid;
+	const char *r_addr;
+	const char *r_owner;
+	int r_status;
+};
+
+struct rpcb_info {
+	u32 rpc_vers;
+	const struct rpc_procinfo *rpc_proc;
+};
+
+enum {
+	GSSX_NULL = 0,
+	GSSX_INDICATE_MECHS = 1,
+	GSSX_GET_CALL_CONTEXT = 2,
+	GSSX_IMPORT_AND_CANON_NAME = 3,
+	GSSX_EXPORT_CRED = 4,
+	GSSX_IMPORT_CRED = 5,
+	GSSX_ACQUIRE_CRED = 6,
+	GSSX_STORE_CRED = 7,
+	GSSX_INIT_SEC_CONTEXT = 8,
+	GSSX_ACCEPT_SEC_CONTEXT = 9,
+	GSSX_RELEASE_HANDLE = 10,
+	GSSX_GET_MIC = 11,
+	GSSX_VERIFY = 12,
+	GSSX_WRAP = 13,
+	GSSX_UNWRAP = 14,
+	GSSX_WRAP_SIZE_LIMIT = 15,
+};
+
+struct minix_super_block {
+	__u16 s_ninodes;
+	__u16 s_nzones;
+	__u16 s_imap_blocks;
+	__u16 s_zmap_blocks;
+	__u16 s_firstdatazone;
+	__u16 s_log_zone_size;
+	__u32 s_max_size;
+	__u16 s_magic;
+	__u16 s_state;
+	__u32 s_zones;
+};
+
+struct romfs_super_block {
+	__be32 word0;
+	__be32 word1;
+	__be32 size;
+	__be32 checksum;
+	char name[0];
+};
+
+struct cramfs_inode {
+	__u32 mode: 16;
+	__u32 uid: 16;
+	__u32 size: 24;
+	__u32 gid: 8;
+	__u32 namelen: 6;
+	__u32 offset: 26;
+};
+
+struct cramfs_info {
+	__u32 crc;
+	__u32 edition;
+	__u32 blocks;
+	__u32 files;
+};
+
+struct cramfs_super {
+	__u32 magic;
+	__u32 size;
+	__u32 flags;
+	__u32 future;
+	__u8 signature[16];
+	struct cramfs_info fsid;
+	__u8 name[16];
+	struct cramfs_inode root;
+};
+
+struct squashfs_super_block {
+	__le32 s_magic;
+	__le32 inodes;
+	__le32 mkfs_time;
+	__le32 block_size;
+	__le32 fragments;
+	__le16 compression;
+	__le16 block_log;
+	__le16 flags;
+	__le16 no_ids;
+	__le16 s_major;
+	__le16 s_minor;
+	__le64 root_inode;
+	__le64 bytes_used;
+	__le64 id_table_start;
+	__le64 xattr_id_table_start;
+	__le64 inode_table_start;
+	__le64 directory_table_start;
+	__le64 fragment_table_start;
+	__le64 lookup_table_start;
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+struct individual_sensor {
+	unsigned int token;
+	unsigned int quant;
+};
+
+struct rtas_sensors {
+	struct individual_sensor sensor[17];
+	unsigned int quant;
+};
+
+struct pci_intx_virq {
+	int virq;
+	struct kref kref;
+	struct list_head list_node;
+};
+
+struct tlbiel_pid {
+	long unsigned int pid;
+	long unsigned int ric;
+};
+
+struct tlbiel_va {
+	long unsigned int pid;
+	long unsigned int va;
+	long unsigned int psize;
+	long unsigned int ric;
+};
+
+struct tlbiel_va_range {
+	long unsigned int pid;
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int page_size;
+	long unsigned int psize;
+	bool also_pwc;
+};
+
+enum tlb_flush_type {
+	FLUSH_TYPE_NONE = 0,
+	FLUSH_TYPE_LOCAL = 1,
+	FLUSH_TYPE_GLOBAL = 2,
+};
+
+struct xive_irq_bitmap {
+	long unsigned int *bitmap;
+	unsigned int base;
+	unsigned int count;
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct dump_obj {
+	struct kobject kobj;
+	struct bin_attribute dump_attr;
+	uint32_t id;
+	uint32_t type;
+	uint32_t size;
+	char *buffer;
+};
+
+struct dump_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dump_obj *, struct dump_attribute *, char *);
+	ssize_t (*store)(struct dump_obj *, struct dump_attribute *, const char *, size_t);
+};
+
+struct cpu_hw_events {
+	int n_events;
+	int n_percpu;
+	int disabled;
+	int n_added;
+	int n_limited;
+	u8 pmcs_enabled;
+	struct perf_event *event[8];
+	u64 events[8];
+	unsigned int flags[8];
+	struct mmcr_regs mmcr;
+	struct perf_event *limited_counter[2];
+	u8 limited_hwidx[2];
+	u64 alternatives[64];
+	long unsigned int amasks[64];
+	long unsigned int avalues[64];
+	unsigned int txn_flags;
+	int n_txn_start;
+	u64 bhrb_filter;
+	unsigned int bhrb_users;
+	void *bhrb_context;
+	struct perf_branch_stack bhrb_stack;
+	struct perf_branch_entry bhrb_entries[32];
+	u64 ic_init;
+	long unsigned int pmcs[8];
+};
+
+struct vmemmap_backing {
+	struct vmemmap_backing *list;
+	long unsigned int phys;
+	long unsigned int virt_addr;
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long int prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_hang {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_process_hang {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
+struct bpf_perf_event_value {
+	__u64 counter;
+	__u64 enabled;
+	__u64 running;
+};
+
+struct btf_ptr {
+	void *ptr;
+	__u32 type_id;
+	__u32 flags;
+};
+
+struct perf_event_query_bpf {
+	__u32 ids_len;
+	__u32 prog_cnt;
+	__u32 ids[0];
+};
+
+struct trace_event_raw_bpf_trace_printk {
+	struct trace_entry ent;
+	u32 __data_loc_bpf_string;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_trace_printk {
+	u32 bpf_string;
+};
+
+typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
+
+struct bpf_trace_module {
+	struct module *module;
+	struct list_head list;
+};
+
+typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
+
+typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
+
+struct bpf_trace_sample_data {
+	struct perf_sample_data sds[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_nested_pt_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_get_current_task)();
+
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+struct send_signal_irq_work {
+	struct irq_work irq_work;
+	struct task_struct *task;
+	u32 sig;
+	enum pid_type type;
+};
+
+typedef u64 (*btf_bpf_send_signal)(u32);
+
+typedef u64 (*btf_bpf_send_signal_thread)(u32);
+
+typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
+
+typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
+typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
+
+typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bpf_raw_tp_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
+
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
+};
+
+struct auto_movable_stats {
+	long unsigned int kernel_early_pages;
+	long unsigned int movable_pages;
+};
+
+struct auto_movable_group_stats {
+	long unsigned int movable_pages;
+	long unsigned int req_kernel_early_pages;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_EXCEED_NONE_PTE = 3,
+	SCAN_EXCEED_SWAP_PTE = 4,
+	SCAN_EXCEED_SHARED_PTE = 5,
+	SCAN_PTE_NON_PRESENT = 6,
+	SCAN_PTE_UFFD_WP = 7,
+	SCAN_PAGE_RO = 8,
+	SCAN_LACK_REFERENCED_PAGE = 9,
+	SCAN_PAGE_NULL = 10,
+	SCAN_SCAN_ABORT = 11,
+	SCAN_PAGE_COUNT = 12,
+	SCAN_PAGE_LRU = 13,
+	SCAN_PAGE_LOCK = 14,
+	SCAN_PAGE_ANON = 15,
+	SCAN_PAGE_COMPOUND = 16,
+	SCAN_ANY_PROCESS = 17,
+	SCAN_VMA_NULL = 18,
+	SCAN_VMA_CHECK = 19,
+	SCAN_ADDRESS_RANGE = 20,
+	SCAN_DEL_PAGE_LRU = 21,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 22,
+	SCAN_CGROUP_CHARGE_FAIL = 23,
+	SCAN_TRUNCATED = 24,
+	SCAN_PAGE_HAS_PRIVATE = 25,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+struct mm_slot___2 {
+	struct hlist_node hash;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+	int nr_pte_mapped_thp;
+	long unsigned int pte_mapped_thp[8];
+};
+
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct mm_slot___2 *mm_slot;
+	long unsigned int address;
+};
+
+struct file_clone_range {
+	__s64 src_fd;
+	__u64 src_offset;
+	__u64 src_length;
+	__u64 dest_offset;
+};
+
+struct space_resv {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+enum SHIFT_DIRECTION {
+	SHIFT_LEFT = 0,
+	SHIFT_RIGHT = 1,
+};
+
+struct ext4_extent_tail {
+	__le32 et_checksum;
+};
+
+struct ext4_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__le32 h_checksum;
+	__u32 h_reserved[3];
+};
+
+struct ext4_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_inum;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct ext4_xattr_info {
+	const char *name;
+	const void *value;
+	size_t value_len;
+	int name_index;
+	int in_inode;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
+struct ext4_xattr_block_find {
+	struct ext4_xattr_search s;
+	struct buffer_head *bh;
+};
+
+struct SU_SP_s {
+	__u8 magic[2];
+	__u8 skip;
+};
+
+struct SU_CE_s {
+	__u8 extent[8];
+	__u8 offset[8];
+	__u8 size[8];
+};
+
+struct SU_ER_s {
+	__u8 len_id;
+	__u8 len_des;
+	__u8 len_src;
+	__u8 ext_ver;
+	__u8 data[0];
+};
+
+struct RR_RR_s {
+	__u8 flags[1];
+};
+
+struct RR_PX_s {
+	__u8 mode[8];
+	__u8 n_links[8];
+	__u8 uid[8];
+	__u8 gid[8];
+};
+
+struct RR_PN_s {
+	__u8 dev_high[8];
+	__u8 dev_low[8];
+};
+
+struct SL_component {
+	__u8 flags;
+	__u8 len;
+	__u8 text[0];
+};
+
+struct RR_SL_s {
+	__u8 flags;
+	struct SL_component link;
+};
+
+struct RR_NM_s {
+	__u8 flags;
+	char name[0];
+};
+
+struct RR_CL_s {
+	__u8 location[8];
+};
+
+struct RR_PL_s {
+	__u8 location[8];
+};
+
+struct stamp {
+	__u8 time[7];
+};
+
+struct RR_TF_s {
+	__u8 flags;
+	struct stamp times[0];
+};
+
+struct RR_ZF_s {
+	__u8 algorithm[2];
+	__u8 parms[2];
+	__u8 real_size[8];
+};
+
+struct rock_ridge {
+	__u8 signature[2];
+	__u8 len;
+	__u8 version;
+	union {
+		struct SU_SP_s SP;
+		struct SU_CE_s CE;
+		struct SU_ER_s ER;
+		struct RR_RR_s RR;
+		struct RR_PX_s PX;
+		struct RR_PN_s PN;
+		struct RR_SL_s SL;
+		struct RR_NM_s NM;
+		struct RR_CL_s CL;
+		struct RR_PL_s PL;
+		struct RR_TF_s TF;
+		struct RR_ZF_s ZF;
+	} u;
+};
+
+struct rock_state {
+	void *buffer;
+	unsigned char *chr;
+	int len;
+	int cont_size;
+	int cont_extent;
+	int cont_offset;
+	int cont_loops;
+	struct inode *inode;
+};
+
+struct nfs4_layoutget {
+	struct nfs4_layoutget_args args;
+	struct nfs4_layoutget_res res;
+	const struct cred *cred;
+	struct pnfs_layout_hdr *lo;
+	gfp_t gfp_flags;
+};
+
+struct nfs_release_lockowner_res {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_cached_acl {
+	enum nfs4_acl_type type;
+	int cached;
+	size_t len;
+	char data[0];
+};
+
+struct nfs4_exception {
+	struct nfs4_state *state;
+	struct inode *inode;
+	nfs4_stateid *stateid;
+	long int timeout;
+	unsigned char task_is_privileged: 1;
+	unsigned char delay: 1;
+	unsigned char recovering: 1;
+	unsigned char retry: 1;
+	bool interruptible;
+};
+
+struct nfs4_opendata {
+	struct kref kref;
+	struct nfs_openargs o_arg;
+	struct nfs_openres o_res;
+	struct nfs_open_confirmargs c_arg;
+	struct nfs_open_confirmres c_res;
+	struct nfs4_string owner_name;
+	struct nfs4_string group_name;
+	struct nfs4_label *a_label;
+	struct nfs_fattr f_attr;
+	struct dentry *dir;
+	struct dentry *dentry;
+	struct nfs4_state_owner *owner;
+	struct nfs4_state *state;
+	struct iattr attrs;
+	struct nfs4_layoutget *lgp;
+	long unsigned int timestamp;
+	bool rpc_done;
+	bool file_created;
+	bool is_recover;
+	bool cancelled;
+	int rpc_status;
+};
+
+struct nfs4_add_xprt_data {
+	struct nfs_client *clp;
+	const struct cred *cred;
+};
+
+struct nfs4_call_sync_data {
+	const struct nfs_server *seq_server;
+	struct nfs4_sequence_args *seq_args;
+	struct nfs4_sequence_res *seq_res;
+};
+
+struct nfs4_open_createattrs {
+	struct nfs4_label *label;
+	struct iattr *sattr;
+	const __u32 verf[2];
+};
+
+struct nfs4_closedata {
+	struct inode *inode;
+	struct nfs4_state *state;
+	struct nfs_closeargs arg;
+	struct nfs_closeres res;
+	struct {
+		struct nfs4_layoutreturn_args arg;
+		struct nfs4_layoutreturn_res res;
+		struct nfs4_xdr_opaque_data ld_private;
+		u32 roc_barrier;
+		bool roc;
+	} lr;
+	struct nfs_fattr fattr;
+	long unsigned int timestamp;
+};
+
+struct nfs4_createdata {
+	struct rpc_message msg;
+	struct nfs4_create_arg arg;
+	struct nfs4_create_res res;
+	struct nfs_fh fh;
+	struct nfs_fattr fattr;
+};
+
+struct nfs4_renewdata {
+	struct nfs_client *client;
+	long unsigned int timestamp;
+};
+
+struct nfs4_delegreturndata {
+	struct nfs4_delegreturnargs args;
+	struct nfs4_delegreturnres res;
+	struct nfs_fh fh;
+	nfs4_stateid stateid;
+	long unsigned int timestamp;
+	struct {
+		struct nfs4_layoutreturn_args arg;
+		struct nfs4_layoutreturn_res res;
+		struct nfs4_xdr_opaque_data ld_private;
+		u32 roc_barrier;
+		bool roc;
+	} lr;
+	struct nfs_fattr fattr;
+	int rpc_status;
+	struct inode *inode;
+};
+
+struct nfs4_unlockdata {
+	struct nfs_locku_args arg;
+	struct nfs_locku_res res;
+	struct nfs4_lock_state *lsp;
+	struct nfs_open_context *ctx;
+	struct nfs_lock_context *l_ctx;
+	struct file_lock fl;
+	struct nfs_server *server;
+	long unsigned int timestamp;
+};
+
+struct nfs4_lockdata {
+	struct nfs_lock_args arg;
+	struct nfs_lock_res res;
+	struct nfs4_lock_state *lsp;
+	struct nfs_open_context *ctx;
+	struct file_lock fl;
+	long unsigned int timestamp;
+	int rpc_status;
+	int cancelled;
+	struct nfs_server *server;
+};
+
+struct nfs_release_lockowner_data {
+	struct nfs4_lock_state *lsp;
+	struct nfs_server *server;
+	struct nfs_release_lockowner_args args;
+	struct nfs_release_lockowner_res res;
+	long unsigned int timestamp;
+};
+
+struct nfs4_get_lease_time_data {
+	struct nfs4_get_lease_time_args *args;
+	struct nfs4_get_lease_time_res *res;
+	struct nfs_client *clp;
+};
+
+struct nlmclnt_initdata {
+	const char *hostname;
+	const struct sockaddr *address;
+	size_t addrlen;
+	short unsigned int protocol;
+	u32 nfs_version;
+	int noresvport;
+	struct net *net;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	const struct cred *cred;
+};
+
+struct nlm_wait {
+	struct list_head b_list;
+	wait_queue_head_t b_wait;
+	struct nlm_host *b_host;
+	struct file_lock *b_lock;
+	short unsigned int b_reclaim;
+	__be32 b_status;
+};
+
+struct utf8_table {
+	int cmask;
+	int cval;
+	int shift;
+	long int lmask;
+	long int lval;
+};
+
+struct xfs_dir3_data_hdr {
+	struct xfs_dir3_blk_hdr hdr;
+	xfs_dir2_data_free_t best_free[3];
+	__be32 pad;
+};
+
+struct xlog_cil_pcp {
+	int32_t space_used;
+	uint32_t space_reserved;
+	struct list_head busy_extents;
+	struct list_head log_items;
+};
+
+enum _record_type {
+	_START_RECORD = 0,
+	_COMMIT_RECORD = 1,
+};
+
+struct xlog_cil_trans_hdr {
+	struct xlog_op_header oph[2];
+	struct xfs_trans_header thdr;
+	struct xfs_log_iovec lhdr[2];
+};
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum {
+	Opt_uid___6 = 0,
+	Opt_gid___7 = 1,
+	Opt_mode___6 = 2,
+	Opt_err___6 = 3,
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct crypto_sync_skcipher;
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	long unsigned int latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u64 pad[4];
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+};
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+struct warn_args;
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+enum v4l2_ctrl_type {
+	V4L2_CTRL_TYPE_INTEGER = 1,
+	V4L2_CTRL_TYPE_BOOLEAN = 2,
+	V4L2_CTRL_TYPE_MENU = 3,
+	V4L2_CTRL_TYPE_BUTTON = 4,
+	V4L2_CTRL_TYPE_INTEGER64 = 5,
+	V4L2_CTRL_TYPE_CTRL_CLASS = 6,
+	V4L2_CTRL_TYPE_STRING = 7,
+	V4L2_CTRL_TYPE_BITMASK = 8,
+	V4L2_CTRL_TYPE_INTEGER_MENU = 9,
+	V4L2_CTRL_COMPOUND_TYPES = 256,
+	V4L2_CTRL_TYPE_U8 = 256,
+	V4L2_CTRL_TYPE_U16 = 257,
+	V4L2_CTRL_TYPE_U32 = 258,
+	V4L2_CTRL_TYPE_AREA = 262,
+	V4L2_CTRL_TYPE_HDR10_CLL_INFO = 272,
+	V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 273,
+	V4L2_CTRL_TYPE_H264_SPS = 512,
+	V4L2_CTRL_TYPE_H264_PPS = 513,
+	V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 514,
+	V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 515,
+	V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 516,
+	V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 517,
+	V4L2_CTRL_TYPE_FWHT_PARAMS = 544,
+	V4L2_CTRL_TYPE_VP8_FRAME = 576,
+	V4L2_CTRL_TYPE_MPEG2_QUANTISATION = 592,
+	V4L2_CTRL_TYPE_MPEG2_SEQUENCE = 593,
+	V4L2_CTRL_TYPE_MPEG2_PICTURE = 594,
+	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR = 608,
+	V4L2_CTRL_TYPE_VP9_FRAME = 609,
+	V4L2_CTRL_TYPE_HEVC_SPS = 624,
+	V4L2_CTRL_TYPE_HEVC_PPS = 625,
+	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS = 626,
+	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX = 627,
+	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS = 628,
+};
+
+enum matroxfb_ctrl_id {
+	MATROXFB_CID_TESTOUT = 134217728,
+	MATROXFB_CID_DEFLICKER = 134217729,
+	MATROXFB_CID_LAST = 134217730,
+};
+
+struct mctl {
+	struct v4l2_queryctrl desc;
+	size_t control;
+};
+
+struct output_desc {
+	unsigned int h_vis;
+	unsigned int h_f_porch;
+	unsigned int h_sync;
+	unsigned int h_b_porch;
+	long long unsigned int chromasc;
+	unsigned int burst;
+	unsigned int v_total;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	long unsigned int addr;
+	unsigned int order;
+};
+
+struct ccs_modesel_head {
+	__u8 _r1;
+	__u8 medium;
+	__u8 _r2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_blocks_hi;
+	__u8 number_blocks_med;
+	__u8 number_blocks_lo;
+	__u8 _r3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+struct tg3_tx_buffer_desc {
+	u32 addr_hi;
+	u32 addr_lo;
+	u32 len_flags;
+	u32 vlan_tag;
+};
+
+struct tg3_rx_buffer_desc {
+	u32 addr_hi;
+	u32 addr_lo;
+	u32 idx_len;
+	u32 type_flags;
+	u32 ip_tcp_csum;
+	u32 err_vlan;
+	u32 reserved;
+	u32 opaque;
+};
+
+struct tg3_ext_rx_buffer_desc {
+	struct {
+		u32 addr_hi;
+		u32 addr_lo;
+	} addrlist[3];
+	u32 len2_len1;
+	u32 resv_len3;
+	struct tg3_rx_buffer_desc std;
+};
+
+struct tg3_internal_buffer_desc {
+	u32 addr_hi;
+	u32 addr_lo;
+	u32 nic_mbuf;
+	u16 len;
+	u16 cqid_sqid;
+	u32 flags;
+	u32 __cookie1;
+	u32 __cookie2;
+	u32 __cookie3;
+};
+
+struct tg3_hw_status {
+	u32 status;
+	u32 status_tag;
+	u16 rx_jumbo_consumer;
+	u16 rx_consumer;
+	u16 rx_mini_consumer;
+	u16 reserved;
+	struct {
+		u16 rx_producer;
+		u16 tx_consumer;
+	} idx[16];
+};
+
+typedef struct {
+	u32 high;
+	u32 low;
+} tg3_stat64_t;
+
+struct tg3_hw_stats {
+	u8 __reserved0[256];
+	tg3_stat64_t rx_octets;
+	u64 __reserved1;
+	tg3_stat64_t rx_fragments;
+	tg3_stat64_t rx_ucast_packets;
+	tg3_stat64_t rx_mcast_packets;
+	tg3_stat64_t rx_bcast_packets;
+	tg3_stat64_t rx_fcs_errors;
+	tg3_stat64_t rx_align_errors;
+	tg3_stat64_t rx_xon_pause_rcvd;
+	tg3_stat64_t rx_xoff_pause_rcvd;
+	tg3_stat64_t rx_mac_ctrl_rcvd;
+	tg3_stat64_t rx_xoff_entered;
+	tg3_stat64_t rx_frame_too_long_errors;
+	tg3_stat64_t rx_jabbers;
+	tg3_stat64_t rx_undersize_packets;
+	tg3_stat64_t rx_in_length_errors;
+	tg3_stat64_t rx_out_length_errors;
+	tg3_stat64_t rx_64_or_less_octet_packets;
+	tg3_stat64_t rx_65_to_127_octet_packets;
+	tg3_stat64_t rx_128_to_255_octet_packets;
+	tg3_stat64_t rx_256_to_511_octet_packets;
+	tg3_stat64_t rx_512_to_1023_octet_packets;
+	tg3_stat64_t rx_1024_to_1522_octet_packets;
+	tg3_stat64_t rx_1523_to_2047_octet_packets;
+	tg3_stat64_t rx_2048_to_4095_octet_packets;
+	tg3_stat64_t rx_4096_to_8191_octet_packets;
+	tg3_stat64_t rx_8192_to_9022_octet_packets;
+	u64 __unused0[37];
+	tg3_stat64_t tx_octets;
+	u64 __reserved2;
+	tg3_stat64_t tx_collisions;
+	tg3_stat64_t tx_xon_sent;
+	tg3_stat64_t tx_xoff_sent;
+	tg3_stat64_t tx_flow_control;
+	tg3_stat64_t tx_mac_errors;
+	tg3_stat64_t tx_single_collisions;
+	tg3_stat64_t tx_mult_collisions;
+	tg3_stat64_t tx_deferred;
+	u64 __reserved3;
+	tg3_stat64_t tx_excessive_collisions;
+	tg3_stat64_t tx_late_collisions;
+	tg3_stat64_t tx_collide_2times;
+	tg3_stat64_t tx_collide_3times;
+	tg3_stat64_t tx_collide_4times;
+	tg3_stat64_t tx_collide_5times;
+	tg3_stat64_t tx_collide_6times;
+	tg3_stat64_t tx_collide_7times;
+	tg3_stat64_t tx_collide_8times;
+	tg3_stat64_t tx_collide_9times;
+	tg3_stat64_t tx_collide_10times;
+	tg3_stat64_t tx_collide_11times;
+	tg3_stat64_t tx_collide_12times;
+	tg3_stat64_t tx_collide_13times;
+	tg3_stat64_t tx_collide_14times;
+	tg3_stat64_t tx_collide_15times;
+	tg3_stat64_t tx_ucast_packets;
+	tg3_stat64_t tx_mcast_packets;
+	tg3_stat64_t tx_bcast_packets;
+	tg3_stat64_t tx_carrier_sense_errors;
+	tg3_stat64_t tx_discards;
+	tg3_stat64_t tx_errors;
+	u64 __unused1[31];
+	tg3_stat64_t COS_rx_packets[16];
+	tg3_stat64_t COS_rx_filter_dropped;
+	tg3_stat64_t dma_writeq_full;
+	tg3_stat64_t dma_write_prioq_full;
+	tg3_stat64_t rxbds_empty;
+	tg3_stat64_t rx_discards;
+	tg3_stat64_t rx_errors;
+	tg3_stat64_t rx_threshold_hit;
+	u64 __unused2[9];
+	tg3_stat64_t COS_out_packets[16];
+	tg3_stat64_t dma_readq_full;
+	tg3_stat64_t dma_read_prioq_full;
+	tg3_stat64_t tx_comp_queue_full;
+	tg3_stat64_t ring_set_send_prod_index;
+	tg3_stat64_t ring_status_update;
+	tg3_stat64_t nic_irqs;
+	tg3_stat64_t nic_avoided_irqs;
+	tg3_stat64_t nic_tx_threshold_hit;
+	tg3_stat64_t mbuf_lwm_thresh_hit;
+	u8 __reserved4[312];
+};
+
+struct tg3_ocir {
+	u32 signature;
+	u16 version_flags;
+	u16 refresh_int;
+	u32 refresh_tmr;
+	u32 update_tmr;
+	u32 dst_base_addr;
+	u16 src_hdr_offset;
+	u16 src_hdr_length;
+	u16 src_data_offset;
+	u16 src_data_length;
+	u16 dst_hdr_offset;
+	u16 dst_data_offset;
+	u16 dst_reg_upd_offset;
+	u16 dst_sem_offset;
+	u32 reserved1[2];
+	u32 port0_flags;
+	u32 port1_flags;
+	u32 port2_flags;
+	u32 port3_flags;
+	u32 reserved2;
+};
+
+struct ring_info {
+	u8 *data;
+	dma_addr_t mapping;
+};
+
+struct tg3_tx_ring_info {
+	struct sk_buff *skb;
+	dma_addr_t mapping;
+	bool fragmented;
+};
+
+struct tg3_link_config {
+	u32 advertising;
+	u32 speed;
+	u8 duplex;
+	u8 autoneg;
+	u8 flowctrl;
+	u8 active_flowctrl;
+	u8 active_duplex;
+	u32 active_speed;
+	u32 rmt_adv;
+};
+
+struct tg3_bufmgr_config {
+	u32 mbuf_read_dma_low_water;
+	u32 mbuf_mac_rx_low_water;
+	u32 mbuf_high_water;
+	u32 mbuf_read_dma_low_water_jumbo;
+	u32 mbuf_mac_rx_low_water_jumbo;
+	u32 mbuf_high_water_jumbo;
+	u32 dma_low_water;
+	u32 dma_high_water;
+};
+
+struct tg3_ethtool_stats {
+	u64 rx_octets;
+	u64 rx_fragments;
+	u64 rx_ucast_packets;
+	u64 rx_mcast_packets;
+	u64 rx_bcast_packets;
+	u64 rx_fcs_errors;
+	u64 rx_align_errors;
+	u64 rx_xon_pause_rcvd;
+	u64 rx_xoff_pause_rcvd;
+	u64 rx_mac_ctrl_rcvd;
+	u64 rx_xoff_entered;
+	u64 rx_frame_too_long_errors;
+	u64 rx_jabbers;
+	u64 rx_undersize_packets;
+	u64 rx_in_length_errors;
+	u64 rx_out_length_errors;
+	u64 rx_64_or_less_octet_packets;
+	u64 rx_65_to_127_octet_packets;
+	u64 rx_128_to_255_octet_packets;
+	u64 rx_256_to_511_octet_packets;
+	u64 rx_512_to_1023_octet_packets;
+	u64 rx_1024_to_1522_octet_packets;
+	u64 rx_1523_to_2047_octet_packets;
+	u64 rx_2048_to_4095_octet_packets;
+	u64 rx_4096_to_8191_octet_packets;
+	u64 rx_8192_to_9022_octet_packets;
+	u64 tx_octets;
+	u64 tx_collisions;
+	u64 tx_xon_sent;
+	u64 tx_xoff_sent;
+	u64 tx_flow_control;
+	u64 tx_mac_errors;
+	u64 tx_single_collisions;
+	u64 tx_mult_collisions;
+	u64 tx_deferred;
+	u64 tx_excessive_collisions;
+	u64 tx_late_collisions;
+	u64 tx_collide_2times;
+	u64 tx_collide_3times;
+	u64 tx_collide_4times;
+	u64 tx_collide_5times;
+	u64 tx_collide_6times;
+	u64 tx_collide_7times;
+	u64 tx_collide_8times;
+	u64 tx_collide_9times;
+	u64 tx_collide_10times;
+	u64 tx_collide_11times;
+	u64 tx_collide_12times;
+	u64 tx_collide_13times;
+	u64 tx_collide_14times;
+	u64 tx_collide_15times;
+	u64 tx_ucast_packets;
+	u64 tx_mcast_packets;
+	u64 tx_bcast_packets;
+	u64 tx_carrier_sense_errors;
+	u64 tx_discards;
+	u64 tx_errors;
+	u64 dma_writeq_full;
+	u64 dma_write_prioq_full;
+	u64 rxbds_empty;
+	u64 rx_discards;
+	u64 rx_errors;
+	u64 rx_threshold_hit;
+	u64 dma_readq_full;
+	u64 dma_read_prioq_full;
+	u64 tx_comp_queue_full;
+	u64 ring_set_send_prod_index;
+	u64 ring_status_update;
+	u64 nic_irqs;
+	u64 nic_avoided_irqs;
+	u64 nic_tx_threshold_hit;
+	u64 mbuf_lwm_thresh_hit;
+};
+
+struct tg3_rx_prodring_set {
+	u32 rx_std_prod_idx;
+	u32 rx_std_cons_idx;
+	u32 rx_jmb_prod_idx;
+	u32 rx_jmb_cons_idx;
+	struct tg3_rx_buffer_desc *rx_std;
+	struct tg3_ext_rx_buffer_desc *rx_jmb;
+	struct ring_info *rx_std_buffers;
+	struct ring_info *rx_jmb_buffers;
+	dma_addr_t rx_std_mapping;
+	dma_addr_t rx_jmb_mapping;
+};
+
+struct tg3;
+
+struct tg3_napi {
+	struct napi_struct napi;
+	struct tg3 *tp;
+	struct tg3_hw_status *hw_status;
+	u32 chk_msi_cnt;
+	u32 last_tag;
+	u32 last_irq_tag;
+	u32 int_mbox;
+	u32 coal_now;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consmbox;
+	u32 rx_rcb_ptr;
+	u32 last_rx_cons;
+	u16 *rx_rcb_prod_idx;
+	struct tg3_rx_prodring_set prodring;
+	struct tg3_rx_buffer_desc *rx_rcb;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 tx_prod;
+	u32 tx_cons;
+	u32 tx_pending;
+	u32 last_tx_cons;
+	u32 prodmbox;
+	struct tg3_tx_buffer_desc *tx_ring;
+	struct tg3_tx_ring_info *tx_buffers;
+	dma_addr_t status_mapping;
+	dma_addr_t rx_rcb_mapping;
+	dma_addr_t tx_desc_mapping;
+	char irq_lbl[16];
+	unsigned int irq_vec;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tg3 {
+	unsigned int irq_sync;
+	spinlock_t lock;
+	spinlock_t indirect_lock;
+	u32 (*read32)(struct tg3 *, u32);
+	void (*write32)(struct tg3 *, u32, u32);
+	u32 (*read32_mbox)(struct tg3 *, u32);
+	void (*write32_mbox)(struct tg3 *, u32, u32);
+	void *regs;
+	void *aperegs;
+	struct net_device *dev;
+	struct pci_dev *pdev;
+	u32 coal_now;
+	u32 msg_enable;
+	struct ptp_clock_info ptp_info;
+	struct ptp_clock *ptp_clock;
+	s64 ptp_adjust;
+	void (*write32_tx_mbox)(struct tg3 *, u32, u32);
+	u32 dma_limit;
+	u32 txq_req;
+	u32 txq_cnt;
+	u32 txq_max;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tg3_napi napi[5];
+	void (*write32_rx_mbox)(struct tg3 *, u32, u32);
+	u32 rx_copy_thresh;
+	u32 rx_std_ring_mask;
+	u32 rx_jmb_ring_mask;
+	u32 rx_ret_ring_mask;
+	u32 rx_pending;
+	u32 rx_jumbo_pending;
+	u32 rx_std_max_post;
+	u32 rx_offset;
+	u32 rx_pkt_map_sz;
+	u32 rxq_req;
+	u32 rxq_cnt;
+	u32 rxq_max;
+	bool rx_refill;
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	struct rtnl_link_stats64 net_stats_prev;
+	struct tg3_ethtool_stats estats_prev;
+	long unsigned int tg3_flags[2];
+	union {
+		long unsigned int phy_crc_errors;
+		long unsigned int last_event_jiffies;
+	};
+	struct timer_list timer;
+	u16 timer_counter;
+	u16 timer_multiplier;
+	u32 timer_offset;
+	u16 asf_counter;
+	u16 asf_multiplier;
+	u32 serdes_counter;
+	struct tg3_link_config link_config;
+	struct tg3_bufmgr_config bufmgr_config;
+	u32 rx_mode;
+	u32 tx_mode;
+	u32 mac_mode;
+	u32 mi_mode;
+	u32 misc_host_ctrl;
+	u32 grc_mode;
+	u32 grc_local_ctrl;
+	u32 dma_rwctrl;
+	u32 coalesce_mode;
+	u32 pwrmgmt_thresh;
+	u32 rxptpctl;
+	u32 pci_chip_rev_id;
+	u16 pci_cmd;
+	u8 pci_cacheline_sz;
+	u8 pci_lat_timer;
+	int pci_fn;
+	int msi_cap;
+	int pcix_cap;
+	int pcie_readrq;
+	struct mii_bus *mdio_bus;
+	int old_link;
+	u8 phy_addr;
+	u8 phy_ape_lock;
+	u32 phy_id;
+	u32 phy_flags;
+	u32 led_ctrl;
+	u32 phy_otp;
+	u32 setlpicnt;
+	u8 rss_ind_tbl[128];
+	char board_part_number[24];
+	char fw_ver[32];
+	u32 nic_sram_data_cfg;
+	u32 pci_clock_ctrl;
+	struct pci_dev *pdev_peer;
+	struct tg3_hw_stats *hw_stats;
+	dma_addr_t stats_mapping;
+	struct work_struct reset_task;
+	int nvram_lock_cnt;
+	u32 nvram_size;
+	u32 nvram_pagesize;
+	u32 nvram_jedecnum;
+	unsigned int irq_max;
+	unsigned int irq_cnt;
+	struct ethtool_coalesce coal;
+	struct ethtool_eee eee;
+	const char *fw_needed;
+	const struct firmware *fw;
+	u32 fw_len;
+	struct device *hwmon_dev;
+	bool link_up;
+	bool pcierr_recovery;
+	u32 ape_hb;
+	long unsigned int ape_hb_interval;
+	long unsigned int ape_hb_jiffies;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum TG3_FLAGS {
+	TG3_FLAG_TAGGED_STATUS = 0,
+	TG3_FLAG_TXD_MBOX_HWBUG = 1,
+	TG3_FLAG_USE_LINKCHG_REG = 2,
+	TG3_FLAG_ERROR_PROCESSED = 3,
+	TG3_FLAG_ENABLE_ASF = 4,
+	TG3_FLAG_ASPM_WORKAROUND = 5,
+	TG3_FLAG_POLL_SERDES = 6,
+	TG3_FLAG_POLL_CPMU_LINK = 7,
+	TG3_FLAG_MBOX_WRITE_REORDER = 8,
+	TG3_FLAG_PCIX_TARGET_HWBUG = 9,
+	TG3_FLAG_WOL_SPEED_100MB = 10,
+	TG3_FLAG_WOL_ENABLE = 11,
+	TG3_FLAG_EEPROM_WRITE_PROT = 12,
+	TG3_FLAG_NVRAM = 13,
+	TG3_FLAG_NVRAM_BUFFERED = 14,
+	TG3_FLAG_SUPPORT_MSI = 15,
+	TG3_FLAG_SUPPORT_MSIX = 16,
+	TG3_FLAG_USING_MSI = 17,
+	TG3_FLAG_USING_MSIX = 18,
+	TG3_FLAG_PCIX_MODE = 19,
+	TG3_FLAG_PCI_HIGH_SPEED = 20,
+	TG3_FLAG_PCI_32BIT = 21,
+	TG3_FLAG_SRAM_USE_CONFIG = 22,
+	TG3_FLAG_TX_RECOVERY_PENDING = 23,
+	TG3_FLAG_WOL_CAP = 24,
+	TG3_FLAG_JUMBO_RING_ENABLE = 25,
+	TG3_FLAG_PAUSE_AUTONEG = 26,
+	TG3_FLAG_CPMU_PRESENT = 27,
+	TG3_FLAG_40BIT_DMA_BUG = 28,
+	TG3_FLAG_BROKEN_CHECKSUMS = 29,
+	TG3_FLAG_JUMBO_CAPABLE = 30,
+	TG3_FLAG_CHIP_RESETTING = 31,
+	TG3_FLAG_INIT_COMPLETE = 32,
+	TG3_FLAG_MAX_RXPEND_64 = 33,
+	TG3_FLAG_PCI_EXPRESS = 34,
+	TG3_FLAG_ASF_NEW_HANDSHAKE = 35,
+	TG3_FLAG_HW_AUTONEG = 36,
+	TG3_FLAG_IS_NIC = 37,
+	TG3_FLAG_FLASH = 38,
+	TG3_FLAG_FW_TSO = 39,
+	TG3_FLAG_HW_TSO_1 = 40,
+	TG3_FLAG_HW_TSO_2 = 41,
+	TG3_FLAG_HW_TSO_3 = 42,
+	TG3_FLAG_TSO_CAPABLE = 43,
+	TG3_FLAG_TSO_BUG = 44,
+	TG3_FLAG_ICH_WORKAROUND = 45,
+	TG3_FLAG_1SHOT_MSI = 46,
+	TG3_FLAG_NO_FWARE_REPORTED = 47,
+	TG3_FLAG_NO_NVRAM_ADDR_TRANS = 48,
+	TG3_FLAG_ENABLE_APE = 49,
+	TG3_FLAG_PROTECTED_NVRAM = 50,
+	TG3_FLAG_5701_DMA_BUG = 51,
+	TG3_FLAG_USE_PHYLIB = 52,
+	TG3_FLAG_MDIOBUS_INITED = 53,
+	TG3_FLAG_LRG_PROD_RING_CAP = 54,
+	TG3_FLAG_RGMII_INBAND_DISABLE = 55,
+	TG3_FLAG_RGMII_EXT_IBND_RX_EN = 56,
+	TG3_FLAG_RGMII_EXT_IBND_TX_EN = 57,
+	TG3_FLAG_CLKREQ_BUG = 58,
+	TG3_FLAG_NO_NVRAM = 59,
+	TG3_FLAG_ENABLE_RSS = 60,
+	TG3_FLAG_ENABLE_TSS = 61,
+	TG3_FLAG_SHORT_DMA_BUG = 62,
+	TG3_FLAG_USE_JUMBO_BDFLAG = 63,
+	TG3_FLAG_L1PLLPD_EN = 64,
+	TG3_FLAG_APE_HAS_NCSI = 65,
+	TG3_FLAG_TX_TSTAMP_EN = 66,
+	TG3_FLAG_4K_FIFO_LIMIT = 67,
+	TG3_FLAG_5719_5720_RDMA_BUG = 68,
+	TG3_FLAG_RESET_TASK_PENDING = 69,
+	TG3_FLAG_PTP_CAPABLE = 70,
+	TG3_FLAG_5705_PLUS = 71,
+	TG3_FLAG_IS_5788 = 72,
+	TG3_FLAG_5750_PLUS = 73,
+	TG3_FLAG_5780_CLASS = 74,
+	TG3_FLAG_5755_PLUS = 75,
+	TG3_FLAG_57765_PLUS = 76,
+	TG3_FLAG_57765_CLASS = 77,
+	TG3_FLAG_5717_PLUS = 78,
+	TG3_FLAG_IS_SSB_CORE = 79,
+	TG3_FLAG_FLUSH_POSTED_WRITES = 80,
+	TG3_FLAG_ROBOSWITCH = 81,
+	TG3_FLAG_ONE_DMA_AT_ONCE = 82,
+	TG3_FLAG_RGMII_MODE = 83,
+	TG3_FLAG_NUMBER_OF_FLAGS = 84,
+};
+
+struct tg3_firmware_hdr {
+	__be32 version;
+	__be32 base_addr;
+	__be32 len;
+};
+
+struct tg3_fiber_aneginfo {
+	int state;
+	u32 flags;
+	long unsigned int link_time;
+	long unsigned int cur_time;
+	u32 ability_match_cfg;
+	int ability_match_count;
+	char ability_match;
+	char idle_match;
+	char ack_match;
+	u32 txconfig;
+	u32 rxconfig;
+};
+
+struct subsys_tbl_ent {
+	u16 subsys_vendor;
+	u16 subsys_devid;
+	u32 phy_id;
+};
+
+struct tg3_dev_id {
+	u32 vendor;
+	u32 device;
+	u32 rev;
+};
+
+struct tg3_dev_id___2 {
+	u32 vendor;
+	u32 device;
+};
+
+struct mem_entry {
+	u32 offset;
+	u32 len;
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum i8042_controller_reset_mode {
+	I8042_RESET_NEVER = 0,
+	I8042_RESET_ALWAYS = 1,
+	I8042_RESET_ON_S2RAM = 2,
+};
+
+struct i8042_port {
+	struct serio *serio;
+	int irq;
+	bool exists;
+	bool driver_bound;
+	signed char mux;
+};
+
+struct trackpoint_data {
+	u8 variant_id;
+	u8 firmware_id;
+	u8 sensitivity;
+	u8 speed;
+	u8 inertia;
+	u8 reach;
+	u8 draghys;
+	u8 mindrag;
+	u8 thresh;
+	u8 upthresh;
+	u8 ztime;
+	u8 jenks;
+	u8 drift_time;
+	bool press_to_select;
+	bool skipback;
+	bool ext_dev;
+};
+
+struct trackpoint_attr_data {
+	size_t field_offset;
+	u8 command;
+	u8 mask;
+	bool inverted;
+	u8 power_on_default;
+};
+
+struct mdp_device_descriptor_s {
+	__u32 number;
+	__u32 major;
+	__u32 minor;
+	__u32 raid_disk;
+	__u32 state;
+	__u32 reserved[27];
+};
+
+typedef struct mdp_device_descriptor_s mdp_disk_t;
+
+struct mdp_superblock_s {
+	__u32 md_magic;
+	__u32 major_version;
+	__u32 minor_version;
+	__u32 patch_version;
+	__u32 gvalid_words;
+	__u32 set_uuid0;
+	__u32 ctime;
+	__u32 level;
+	__u32 size;
+	__u32 nr_disks;
+	__u32 raid_disks;
+	__u32 md_minor;
+	__u32 not_persistent;
+	__u32 set_uuid1;
+	__u32 set_uuid2;
+	__u32 set_uuid3;
+	__u32 gstate_creserved[16];
+	__u32 utime;
+	__u32 state;
+	__u32 active_disks;
+	__u32 working_disks;
+	__u32 failed_disks;
+	__u32 spare_disks;
+	__u32 sb_csum;
+	__u32 events_lo;
+	__u32 events_hi;
+	__u32 cp_events_lo;
+	__u32 cp_events_hi;
+	__u32 recovery_cp;
+	__u64 reshape_position;
+	__u32 new_level;
+	__u32 delta_disks;
+	__u32 new_layout;
+	__u32 new_chunk;
+	__u32 gstate_sreserved[14];
+	__u32 layout;
+	__u32 chunk_size;
+	__u32 root_pv;
+	__u32 root_block;
+	__u32 pstate_reserved[60];
+	mdp_disk_t disks[27];
+	__u32 reserved[0];
+	mdp_disk_t this_disk;
+};
+
+typedef struct mdp_superblock_s mdp_super_t;
+
+struct mdp_superblock_1 {
+	__le32 magic;
+	__le32 major_version;
+	__le32 feature_map;
+	__le32 pad0;
+	__u8 set_uuid[16];
+	char set_name[32];
+	__le64 ctime;
+	__le32 level;
+	__le32 layout;
+	__le64 size;
+	__le32 chunksize;
+	__le32 raid_disks;
+	union {
+		__le32 bitmap_offset;
+		struct {
+			__le16 offset;
+			__le16 size;
+		} ppl;
+	};
+	__le32 new_level;
+	__le64 reshape_position;
+	__le32 delta_disks;
+	__le32 new_layout;
+	__le32 new_chunk;
+	__le32 new_offset;
+	__le64 data_offset;
+	__le64 data_size;
+	__le64 super_offset;
+	union {
+		__le64 recovery_offset;
+		__le64 journal_tail;
+	};
+	__le32 dev_number;
+	__le32 cnt_corrected_read;
+	__u8 device_uuid[16];
+	__u8 devflags;
+	__u8 bblog_shift;
+	__le16 bblog_size;
+	__le32 bblog_offset;
+	__le64 utime;
+	__le64 events;
+	__le64 resync_offset;
+	__le32 sb_csum;
+	__le32 max_dev;
+	__u8 pad3[32];
+	__le16 dev_roles[0];
+};
+
+struct mdu_version_s {
+	int major;
+	int minor;
+	int patchlevel;
+};
+
+typedef struct mdu_version_s mdu_version_t;
+
+typedef struct mdu_array_info_s mdu_array_info_t;
+
+typedef struct mdu_disk_info_s mdu_disk_info_t;
+
+struct mdu_bitmap_file_s {
+	char pathname[4096];
+};
+
+typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
+
+enum {
+	MD_RESYNC_NONE = 0,
+	MD_RESYNC_YIELDED = 1,
+	MD_RESYNC_DELAYED = 2,
+	MD_RESYNC_ACTIVE = 3,
+};
+
+struct md_io_acct {
+	struct bio *orig_bio;
+	long unsigned int start_time;
+	struct bio bio_clone;
+};
+
+struct super_type {
 	char *name;
-	struct test_struct *tst;
-	int idx;
-	int (*run_test)(int, int);
-	int (*validate_put)(char *);
+	struct module *owner;
+	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
+	int (*validate_super)(struct mddev *, struct md_rdev *);
+	void (*sync_super)(struct mddev *, struct md_rdev *);
+	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
+	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
+};
+
+struct rdev_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct md_rdev *, char *);
+	ssize_t (*store)(struct md_rdev *, const char *, size_t);
+};
+
+enum array_state {
+	clear = 0,
+	inactive = 1,
+	suspended = 2,
+	readonly = 3,
+	read_auto = 4,
+	clean = 5,
+	active = 6,
+	write_pending = 7,
+	active_idle = 8,
+	broken = 9,
+	bad_word = 10,
+};
+
+struct detected_devices_node {
+	struct list_head list;
+	dev_t dev;
+};
+
+struct nx842_crypto_header_group {
+	__be16 padding;
+	__be32 compressed_length;
+	__be32 uncompressed_length;
+} __attribute__((packed));
+
+struct nx842_crypto_header {
+	__be16 magic;
+	__be16 ignore;
+	u8 groups;
+	struct nx842_crypto_header_group group[0];
+} __attribute__((packed));
+
+struct nx842_crypto_ctx {
+	spinlock_t lock;
+	u8 *wmem;
+	u8 *sbounce;
+	u8 *dbounce;
+	struct nx842_crypto_header header;
+	struct nx842_crypto_header_group group[32];
+	struct nx842_driver *driver;
+};
+
+struct nx842_crypto_param {
+	u8 *in;
+	unsigned int iremain;
+	u8 *out;
+	unsigned int oremain;
+	unsigned int ototal;
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+struct supplier_bindings {
+	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
+	bool optional;
+	bool node_not_dev;
+};
+
+struct ahash_request;
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	short unsigned int protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long int sysctl_mem[3];
+	long int allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	long unsigned int txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+typedef __u16 port_id;
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	long unsigned int delay_time;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge_port;
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+};
+
+struct net_bridge;
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	long unsigned int flags;
+	struct net_bridge_port *backup_port;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	long unsigned int designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	struct netpoll *np;
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst *tunnel_dst;
+};
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	long unsigned int multicast_last_member_interval;
+	long unsigned int multicast_membership_interval;
+	long unsigned int multicast_querier_interval;
+	long unsigned int multicast_query_interval;
+	long unsigned int multicast_query_response_interval;
+	long unsigned int multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	long unsigned int options;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	long unsigned int max_age;
+	long unsigned int hello_time;
+	long unsigned int forward_delay;
+	long unsigned int ageing_time;
+	long unsigned int bridge_max_age;
+	long unsigned int bridge_hello_time;
+	long unsigned int bridge_forward_delay;
+	long unsigned int bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	struct hlist_head fdb_list;
+};
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int updated;
+	long unsigned int used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+enum {
+	ETHTOOL_A_STRING_UNSPEC = 0,
+	ETHTOOL_A_STRING_INDEX = 1,
+	ETHTOOL_A_STRING_VALUE = 2,
+	__ETHTOOL_A_STRING_CNT = 3,
+	ETHTOOL_A_STRING_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STRINGS_UNSPEC = 0,
+	ETHTOOL_A_STRINGS_STRING = 1,
+	__ETHTOOL_A_STRINGS_CNT = 2,
+	ETHTOOL_A_STRINGS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRINGSET_UNSPEC = 0,
+	ETHTOOL_A_STRINGSET_ID = 1,
+	ETHTOOL_A_STRINGSET_COUNT = 2,
+	ETHTOOL_A_STRINGSET_STRINGS = 3,
+	__ETHTOOL_A_STRINGSET_CNT = 4,
+	ETHTOOL_A_STRINGSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
+	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+	__ETHTOOL_A_STRINGSETS_CNT = 2,
+	ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+struct strset_info {
+	bool per_dev;
+	bool free_strings;
+	unsigned int count;
+	const char (*strings)[32];
+};
+
+struct strset_req_info {
+	struct ethnl_req_info base;
+	u32 req_ids;
+	bool counts_only;
+};
+
+struct strset_reply_data {
+	struct ethnl_reply_data base;
+	struct strset_info sets[21];
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neighbour_cb {
+	long unsigned int sched_next;
+	unsigned int flags;
+};
+
+enum {
+	AX25_VALUES_IPDEFMODE = 0,
+	AX25_VALUES_AXDEFMODE = 1,
+	AX25_VALUES_BACKOFF = 2,
+	AX25_VALUES_CONMODE = 3,
+	AX25_VALUES_WINDOW = 4,
+	AX25_VALUES_EWINDOW = 5,
+	AX25_VALUES_T1 = 6,
+	AX25_VALUES_T2 = 7,
+	AX25_VALUES_T3 = 8,
+	AX25_VALUES_IDLE = 9,
+	AX25_VALUES_N2 = 10,
+	AX25_VALUES_PACLEN = 11,
+	AX25_VALUES_PROTOCOL = 12,
+	AX25_VALUES_DS_TIMEOUT = 13,
+	AX25_MAX_VALUES = 14,
+};
+
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
+
+struct icmpv6_msg {
+	struct sk_buff *skb;
+	int offset;
+	uint8_t type;
+};
+
+struct icmp6_err {
+	int err;
+	int fatal;
+};
+
+struct thread_deferred_req {
+	struct cache_deferred_req handle;
+	struct completion completion;
+};
+
+struct cache_queue {
+	struct list_head list;
+	int reader;
+};
+
+struct cache_request {
+	struct cache_queue q;
+	struct cache_head *item;
+	char *buf;
+	int len;
+	int readers;
+};
+
+struct cache_reader {
+	struct cache_queue q;
+	int offset;
+};
+
+struct p7_sprs {
+	u64 tscr;
+	u64 worc;
+	u64 sdr1;
+	u64 rpr;
+	u64 lpcr;
+	u64 hfscr;
+	u64 fscr;
+	u64 purr;
+	u64 spurr;
+	u64 dscr;
+	u64 wort;
+	u64 amr;
+	u64 iamr;
+	u64 uamor;
+};
+
+struct p9_sprs {
+	u64 ptcr;
+	u64 rpr;
+	u64 tscr;
+	u64 ldbar;
+	u64 lpcr;
+	u64 hfscr;
+	u64 fscr;
+	u64 pid;
+	u64 purr;
+	u64 spurr;
+	u64 dscr;
+	u64 ciabr;
+	u64 mmcra;
+	u32 mmcr0;
+	u32 mmcr1;
+	u64 mmcr2;
+	u64 amr;
+	u64 iamr;
+	u64 amor;
+	u64 uamor;
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct update_props_workarea {
+	__be32 phandle;
+	__be32 state;
+	__be64 reserved;
+	__be32 nprops;
+} __attribute__((packed));
+
+struct pseries_suspend_info {
+	atomic_t counter;
+	bool done;
+};
+
+enum vasi_aborting_entity {
+	ORCHESTRATOR = 1,
+	VSP_SOURCE = 2,
+	PARTITION_FIRMWARE = 3,
+	PLATFORM_FIRMWARE = 4,
+	VSP_TARGET = 5,
+	MIGRATING_PARTITION = 6,
+};
+
+struct pseries_io_event {
+	uint8_t event_type;
+	uint8_t rpc_data_len;
+	uint8_t scope;
+	uint8_t event_subtype;
+	uint32_t drc_index;
+	uint8_t rpc_data[216];
+};
+
+typedef uint64_t ppc_cpu_t;
+
+struct powerpc_opcode {
+	const char *name;
+	long unsigned int opcode;
+	long unsigned int mask;
+	ppc_cpu_t flags;
+	ppc_cpu_t deprecated;
+	unsigned char operands[8];
+};
+
+struct powerpc_operand {
+	unsigned int bitm;
+	int shift;
+	long unsigned int (*insert)(long unsigned int, long int, ppc_cpu_t, const char **);
+	long int (*extract)(long unsigned int, ppc_cpu_t, int *);
+	long unsigned int flags;
+};
+
+struct powerpc_macro {
+	const char *name;
+	unsigned int operands;
+	ppc_cpu_t flags;
+	const char *format;
+};
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+struct trace_event_raw_cpu {
+	struct trace_entry ent;
+	u32 state;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
+struct trace_event_raw_powernv_throttle {
+	struct trace_entry ent;
+	int chip_id;
+	u32 __data_loc_reason;
+	int pmax;
+	char __data[0];
+};
+
+struct trace_event_raw_pstate_sample {
+	struct trace_entry ent;
+	u32 core_busy;
+	u32 scaled_busy;
+	u32 from;
+	u32 to;
+	u64 mperf;
+	u64 aperf;
+	u64 tsc;
+	u32 freq;
+	u32 io_boost;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_frequency_limits {
+	struct trace_entry ent;
+	u32 min_freq;
+	u32 max_freq;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_start {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u32 __data_loc_parent;
+	u32 __data_loc_pm_ops;
+	int event;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_end {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_suspend_resume {
+	struct trace_entry ent;
+	const char *action;
+	int val;
+	bool start;
+	char __data[0];
+};
+
+struct trace_event_raw_wakeup_source {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	char __data[0];
+};
+
+struct trace_event_raw_clock {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_power_domain {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_latency_qos_request {
+	struct trace_entry ent;
+	s32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_pm_qos_update {
+	struct trace_entry ent;
+	enum pm_qos_req_action action;
+	int prev_value;
+	int curr_value;
+	char __data[0];
+};
+
+struct trace_event_raw_dev_pm_qos_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	enum dev_pm_qos_req_type type;
+	s32 new_value;
+	char __data[0];
+};
+
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpu {};
+
+struct trace_event_data_offsets_cpu_idle_miss {};
+
+struct trace_event_data_offsets_powernv_throttle {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_pstate_sample {};
+
+struct trace_event_data_offsets_cpu_frequency_limits {};
+
+struct trace_event_data_offsets_device_pm_callback_start {
+	u32 device;
+	u32 driver;
+	u32 parent;
+	u32 pm_ops;
+};
+
+struct trace_event_data_offsets_device_pm_callback_end {
+	u32 device;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_suspend_resume {};
+
+struct trace_event_data_offsets_wakeup_source {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clock {
+	u32 name;
+};
+
+struct trace_event_data_offsets_power_domain {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cpu_latency_qos_request {};
+
+struct trace_event_data_offsets_pm_qos_update {};
+
+struct trace_event_data_offsets_dev_pm_qos_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
+typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
+
+typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
+
+typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
+
+typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
+
+typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
+
+typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
+
+typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
+enum {
+	BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct bpf_prog_list {
+	struct hlist_node node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
+typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
+
+typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+enum {
+	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
+	SECTION_INFO = 12,
+	MIX_SECTION_INFO = 13,
+	NODE_INFO = 14,
+	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
+};
+
+struct user_arg_ptr {
+	union {
+		const char * const *native;
+	} ptr;
+};
+
+struct utimbuf {
+	__kernel_old_time_t actime;
+	__kernel_old_time_t modtime;
+};
+
+struct decrypt_bh_ctx {
+	struct work_struct work;
+	struct buffer_head *bh;
+};
+
+struct bh_lru {
+	struct buffer_head *bhs[16];
+};
+
+struct bh_accounting {
+	int nr;
+	int ratelimit;
+};
+
+struct trace_event_raw_jbd2_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	int transaction;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_end_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	int transaction;
+	int head;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_submit_inode_data {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_start_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_extend {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int buffer_credits;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	unsigned int type;
+	unsigned int line_no;
+	int interval;
+	int sync;
+	int requested_blocks;
+	int dirtied_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_run_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	long unsigned int wait;
+	long unsigned int request_delay;
+	long unsigned int running;
+	long unsigned int locked;
+	long unsigned int flushing;
+	long unsigned int logging;
+	__u32 handle_count;
+	__u32 blocks;
+	__u32 blocks_logged;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_checkpoint_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int tid;
+	long unsigned int chp_time;
+	__u32 forced_to_close;
+	__u32 written;
+	__u32 dropped;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_update_log_tail {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tail_sequence;
+	tid_t first_tid;
+	long unsigned int block_nr;
+	long unsigned int freed;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_write_superblock {
+	struct trace_entry ent;
+	dev_t dev;
+	blk_opf_t write_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_lock_buffer_stall {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int stall_ms;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_shrunk;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	long unsigned int nr_freed;
+	long unsigned int nr_scanned;
+	tid_t next_tid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_jbd2_checkpoint {};
+
+struct trace_event_data_offsets_jbd2_commit {};
+
+struct trace_event_data_offsets_jbd2_end_commit {};
+
+struct trace_event_data_offsets_jbd2_submit_inode_data {};
+
+struct trace_event_data_offsets_jbd2_handle_start_class {};
+
+struct trace_event_data_offsets_jbd2_handle_extend {};
+
+struct trace_event_data_offsets_jbd2_handle_stats {};
+
+struct trace_event_data_offsets_jbd2_run_stats {};
+
+struct trace_event_data_offsets_jbd2_checkpoint_stats {};
+
+struct trace_event_data_offsets_jbd2_update_log_tail {};
+
+struct trace_event_data_offsets_jbd2_write_superblock {};
+
+struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
+
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
+typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
+
+typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
+
+typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
+
+typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
+
+typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
+
+typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
+
+typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, blk_opf_t);
+
+typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, long unsigned int, long unsigned int, tid_t);
+
+struct jbd2_stats_proc_session {
+	journal_t *journal;
+	struct transaction_stats_s *stats;
+	int start;
+	int max;
+};
+
+enum {
+	MOUNTPROC_NULL = 0,
+	MOUNTPROC_MNT = 1,
+	MOUNTPROC_DUMP = 2,
+	MOUNTPROC_UMNT = 3,
+	MOUNTPROC_UMNTALL = 4,
+	MOUNTPROC_EXPORT = 5,
+};
+
+enum {
+	MOUNTPROC3_NULL = 0,
+	MOUNTPROC3_MNT = 1,
+	MOUNTPROC3_DUMP = 2,
+	MOUNTPROC3_UMNT = 3,
+	MOUNTPROC3_UMNTALL = 4,
+	MOUNTPROC3_EXPORT = 5,
+};
+
+enum mountstat {
+	MNT_OK = 0,
+	MNT_EPERM = 1,
+	MNT_ENOENT = 2,
+	MNT_EACCES = 13,
+	MNT_EINVAL = 22,
+};
+
+enum mountstat3 {
+	MNT3_OK = 0,
+	MNT3ERR_PERM = 1,
+	MNT3ERR_NOENT = 2,
+	MNT3ERR_IO = 5,
+	MNT3ERR_ACCES = 13,
+	MNT3ERR_NOTDIR = 20,
+	MNT3ERR_INVAL = 22,
+	MNT3ERR_NAMETOOLONG = 63,
+	MNT3ERR_NOTSUPP = 10004,
+	MNT3ERR_SERVERFAULT = 10006,
+};
+
+struct mountres {
+	int errno;
+	struct nfs_fh *fh;
+	unsigned int *auth_count;
+	rpc_authflavor_t *auth_flavors;
+};
+
+struct xfs_da3_node_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 __count;
+	__be16 __level;
+	__be32 __pad32;
+};
+
+typedef struct xfs_da_intnode xfs_da_intnode_t;
+
+struct xfs_da3_intnode {
+	struct xfs_da3_node_hdr hdr;
+	struct xfs_da_node_entry __btree[0];
+};
+
+typedef uint64_t xfs_ufsize_t;
+
+struct xfs_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, char *);
+	ssize_t (*store)(struct kobject *, const char *, size_t);
+};
+
+struct xfs_error_init {
+	char *name;
+	int max_retries;
+	int retry_timeout;
+};
+
+struct xfs_iunlink_item {
+	struct xfs_log_item item;
+	struct xfs_inode *ip;
+	struct xfs_perag *pag;
+	xfs_agino_t next_agino;
+	xfs_agino_t old_agino;
+};
+
+struct msgbuf;
+
+struct ipc_kludge {
+	struct msgbuf *msgp;
+	long int msgtyp;
+};
+
+struct msqid_ds;
+
+enum devcg_behavior {
+	DEVCG_DEFAULT_NONE = 0,
+	DEVCG_DEFAULT_ALLOW = 1,
+	DEVCG_DEFAULT_DENY = 2,
+};
+
+struct dev_exception_item {
+	u32 major;
+	u32 minor;
+	short int type;
+	short int access;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head exceptions;
+	enum devcg_behavior behavior;
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 500,
+};
+
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+enum {
+	DD_DIR_COUNT = 2,
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum {
+	DD_PRIO_COUNT = 3,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
+	struct rb_root sort_list[2];
+	struct list_head fifo_list[2];
+	struct request *next_rq[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
+	unsigned int batching;
+	unsigned int starved;
+	int fifo_expire[2];
+	int fifo_batch;
+	int writes_starved;
+	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
+	spinlock_t lock;
+	spinlock_t zone_lock;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr *addr;
+	int *addr_len;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr *addr;
+	int addr_len;
+};
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr *umsg_compat;
+		struct user_msghdr *umsg;
+		void *buf;
+	};
+	unsigned int msg_flags;
+	unsigned int flags;
+	size_t len;
+	size_t done_io;
+};
+
+struct io_sendzc {
+	struct file *file;
+	void *buf;
+	size_t len;
+	unsigned int msg_flags;
+	unsigned int flags;
+	unsigned int addr_len;
+	void *addr;
+	size_t done_io;
+	struct io_kiocb *notif;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+union nested_table {
+	union nested_table *table;
+	struct rhash_lock_head *bucket;
+};
+
+struct cpu_rmap {
+	struct kref refcount;
+	u16 size;
+	u16 used;
+	void **obj;
+	struct {
+		u16 index;
+		u16 dist;
+	} near[0];
+};
+
+struct irq_glue {
+	struct irq_affinity_notify notify;
+	struct cpu_rmap *rmap;
+	u16 index;
+};
+
+struct pcie_link_state {
+	struct pci_dev *pdev;
+	struct pci_dev *downstream;
+	struct pcie_link_state *root;
+	struct pcie_link_state *parent;
+	struct list_head sibling;
+	u32 aspm_support: 7;
+	u32 aspm_enabled: 7;
+	u32 aspm_capable: 7;
+	u32 aspm_default: 7;
+	int: 4;
+	u32 aspm_disable: 7;
+	u32 clkpm_capable: 1;
+	u32 clkpm_enabled: 1;
+	u32 clkpm_default: 1;
+	u32 clkpm_disable: 1;
+};
+
+struct kbdiacr {
+	unsigned char diacr;
+	unsigned char base;
+	unsigned char result;
+};
+
+struct kbdiacrs {
+	unsigned int kb_cnt;
+	struct kbdiacr kbdiacr[256];
+};
+
+struct kbdiacrsuc {
+	unsigned int kb_cnt;
+	struct kbdiacruc kbdiacruc[256];
+};
+
+struct keyboard_notifier_param {
+	struct vc_data *vc;
+	int down;
+	int shift;
+	int ledstate;
+	unsigned int value;
+};
+
+struct kbd_struct {
+	unsigned char lockstate;
+	unsigned char slockstate;
+	unsigned char ledmode: 1;
+	unsigned char ledflagstate: 4;
+	char: 3;
+	unsigned char default_ledflagstate: 4;
+	unsigned char kbdmode: 3;
+	int: 1;
+	unsigned char modeflags: 5;
+};
+
+typedef void k_handler_fn(struct vc_data *, unsigned char, char);
+
+typedef void fn_handler_fn(struct vc_data *);
+
+struct getset_keycode_data {
+	struct input_keymap_entry ke;
+	int error;
 };
 
 enum cxl_context_status {
@@ -101236,5246 +125557,164 @@
 	struct module *owner;
 };
 
-struct mfd_cell_acpi_match;
-
-struct mfd_cell {
-	const char *name;
-	int id;
-	int level;
-	int (*enable)(struct platform_device *);
-	int (*disable)(struct platform_device *);
-	int (*suspend)(struct platform_device *);
-	int (*resume)(struct platform_device *);
-	void *platform_data;
-	size_t pdata_size;
-	const struct property_entry *properties;
-	const char *of_compatible;
-	const u64 of_reg;
-	bool use_of_reg;
-	const struct mfd_cell_acpi_match *acpi_match;
-	int num_resources;
-	const struct resource *resources;
-	bool ignore_resource_conflicts;
-	bool pm_runtime_no_callbacks;
-	const char * const *parent_supplies;
-	int num_parent_supplies;
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	short unsigned int bip_vcnt;
+	short unsigned int bip_max_vcnt;
+	short unsigned int bip_flags;
+	struct bvec_iter bio_iter;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
 };
 
-struct mfd_cell_acpi_match {
-	const char *pnpid;
-	const long long unsigned int adr;
+enum btt_init_state {
+	INIT_UNCHECKED = 0,
+	INIT_NOTFOUND = 1,
+	INIT_READY = 2,
 };
 
-struct arizona_ldo1_pdata {
-	const struct regulator_init_data *init_data;
+struct log_entry {
+	__le32 lba;
+	__le32 old_map;
+	__le32 new_map;
+	__le32 seq;
 };
 
-struct arizona_micsupp_pdata {
-	const struct regulator_init_data *init_data;
+struct log_group {
+	struct log_entry ent[4];
 };
 
-struct arizona_micbias {
-	int mV;
-	unsigned int ext_cap: 1;
-	unsigned int discharge: 1;
-	unsigned int soft_start: 1;
-	unsigned int bypass: 1;
+struct free_entry {
+	u32 block;
+	u8 sub;
+	u8 seq;
+	u8 has_err;
 };
 
-struct arizona_micd_config {
-	unsigned int src;
-	unsigned int bias;
-	bool gpio;
-};
-
-struct arizona_micd_range {
-	int max;
-	int key;
-};
-
-struct arizona_pdata {
-	struct gpio_desc *reset;
-	struct arizona_micsupp_pdata micvdd;
-	struct arizona_ldo1_pdata ldo1;
-	int clk32k_src;
-	unsigned int irq_flags;
-	int gpio_base;
-	unsigned int gpio_defaults[5];
-	unsigned int max_channels_clocked[3];
-	bool jd_gpio5;
-	bool jd_gpio5_nopull;
-	bool jd_invert;
-	bool hpdet_acc_id;
-	bool hpdet_acc_id_line;
-	int hpdet_id_gpio;
-	unsigned int hpdet_channel;
-	bool micd_software_compare;
-	unsigned int micd_detect_debounce;
-	int micd_pol_gpio;
-	unsigned int micd_bias_start_time;
-	unsigned int micd_rate;
-	unsigned int micd_dbtime;
-	unsigned int micd_timeout;
-	bool micd_force_micbias;
-	const struct arizona_micd_range *micd_ranges;
-	int num_micd_ranges;
-	struct arizona_micd_config *micd_configs;
-	int num_micd_configs;
-	int dmic_ref[4];
-	struct arizona_micbias micbias[3];
-	int inmode[4];
-	int out_mono[6];
-	unsigned int out_vol_limit[12];
-	unsigned int spk_mute[2];
-	unsigned int spk_fmt[2];
-	unsigned int hap_act;
-	int irq_gpio;
-	unsigned int gpsw;
-};
-
-enum {
-	ARIZONA_MCLK1 = 0,
-	ARIZONA_MCLK2 = 1,
-	ARIZONA_NUM_MCLK = 2,
-};
-
-enum arizona_type {
-	WM5102 = 1,
-	WM5110 = 2,
-	WM8997 = 3,
-	WM8280 = 4,
-	WM8998 = 5,
-	WM1814 = 6,
-	WM1831 = 7,
-	CS47L24 = 8,
-};
-
-struct regmap_irq_chip_data___2;
-
-struct snd_soc_dapm_context;
-
-struct arizona {
-	struct regmap *regmap;
-	struct device *dev;
-	enum arizona_type type;
-	unsigned int rev;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool has_fully_powered_off;
-	struct arizona_pdata pdata;
-	unsigned int external_dcvdd: 1;
-	int irq;
-	struct irq_domain *virq;
-	struct regmap_irq_chip_data___2 *aod_irq_chip;
-	struct regmap_irq_chip_data___2 *irq_chip;
-	bool hpdet_clamp;
-	unsigned int hp_ena;
-	struct mutex clk_lock;
-	int clk32k_ref;
-	struct clk *mclk[2];
-	bool ctrlif_error;
-	struct snd_soc_dapm_context *dapm;
-	int tdm_width[3];
-	int tdm_slots[3];
-	uint16_t dac_comp_coeff;
-	uint8_t dac_comp_enabled;
-	struct mutex dac_comp_lock;
-	struct blocking_notifier_head notifier;
-};
-
-struct arizona_sysclk_state {
-	unsigned int fll;
-	unsigned int sysclk;
-};
-
-enum tps65912_irqs {
-	TPS65912_IRQ_PWRHOLD_F = 0,
-	TPS65912_IRQ_VMON = 1,
-	TPS65912_IRQ_PWRON = 2,
-	TPS65912_IRQ_PWRON_LP = 3,
-	TPS65912_IRQ_PWRHOLD_R = 4,
-	TPS65912_IRQ_HOTDIE = 5,
-	TPS65912_IRQ_GPIO1_R = 6,
-	TPS65912_IRQ_GPIO1_F = 7,
-	TPS65912_IRQ_GPIO2_R = 8,
-	TPS65912_IRQ_GPIO2_F = 9,
-	TPS65912_IRQ_GPIO3_R = 10,
-	TPS65912_IRQ_GPIO3_F = 11,
-	TPS65912_IRQ_GPIO4_R = 12,
-	TPS65912_IRQ_GPIO4_F = 13,
-	TPS65912_IRQ_GPIO5_R = 14,
-	TPS65912_IRQ_GPIO5_F = 15,
-	TPS65912_IRQ_PGOOD_DCDC1 = 16,
-	TPS65912_IRQ_PGOOD_DCDC2 = 17,
-	TPS65912_IRQ_PGOOD_DCDC3 = 18,
-	TPS65912_IRQ_PGOOD_DCDC4 = 19,
-	TPS65912_IRQ_PGOOD_LDO1 = 20,
-	TPS65912_IRQ_PGOOD_LDO2 = 21,
-	TPS65912_IRQ_PGOOD_LDO3 = 22,
-	TPS65912_IRQ_PGOOD_LDO4 = 23,
-	TPS65912_IRQ_PGOOD_LDO5 = 24,
-	TPS65912_IRQ_PGOOD_LDO6 = 25,
-	TPS65912_IRQ_PGOOD_LDO7 = 26,
-	TPS65912_IRQ_PGOOD_LDO8 = 27,
-	TPS65912_IRQ_PGOOD_LDO9 = 28,
-	TPS65912_IRQ_PGOOD_LDO10 = 29,
-};
-
-struct tps65912 {
-	struct device *dev;
-	struct regmap *regmap;
-	int irq;
-	struct regmap_irq_chip_data___2 *irq_data;
-};
-
-struct spi_device_id {
-	char name[32];
-	kernel_ulong_t driver_data;
-};
-
-struct spi_driver {
-	const struct spi_device_id *id_table;
-	int (*probe)(struct spi_device *);
-	int (*remove)(struct spi_device *);
-	void (*shutdown)(struct spi_device *);
-	struct device_driver driver;
-};
-
-struct mfd_of_node_entry {
-	struct list_head list;
-	struct device *dev;
-	struct device_node *np;
-};
-
-struct da9052 {
-	struct device *dev;
-	struct regmap *regmap;
-	struct mutex auxadc_lock;
-	struct completion done;
-	int irq_base;
-	struct regmap_irq_chip_data___2 *irq_data;
-	u8 chip_id;
-	int chip_irq;
-	int (*fix_io)(struct da9052 *, unsigned char);
-};
-
-struct led_platform_data;
-
-struct da9052_pdata {
-	struct led_platform_data *pled;
-	int (*init)(struct da9052 *);
-	int irq_base;
-	int gpio_base;
-	int use_for_apm;
-	struct regulator_init_data *regulators[14];
-};
-
-enum da9052_chip_id {
-	DA9052 = 0,
-	DA9053_AA = 1,
-	DA9053_BA = 2,
-	DA9053_BB = 3,
-	DA9053_BC = 4,
-};
-
-enum axp20x_variants {
-	AXP152_ID = 0,
-	AXP202_ID = 1,
-	AXP209_ID = 2,
-	AXP221_ID = 3,
-	AXP223_ID = 4,
-	AXP288_ID = 5,
-	AXP803_ID = 6,
-	AXP806_ID = 7,
-	AXP809_ID = 8,
-	AXP813_ID = 9,
-	NR_AXP20X_VARIANTS = 10,
-};
-
-enum {
-	AXP152_IRQ_LDO0IN_CONNECT = 1,
-	AXP152_IRQ_LDO0IN_REMOVAL = 2,
-	AXP152_IRQ_ALDO0IN_CONNECT = 3,
-	AXP152_IRQ_ALDO0IN_REMOVAL = 4,
-	AXP152_IRQ_DCDC1_V_LOW = 5,
-	AXP152_IRQ_DCDC2_V_LOW = 6,
-	AXP152_IRQ_DCDC3_V_LOW = 7,
-	AXP152_IRQ_DCDC4_V_LOW = 8,
-	AXP152_IRQ_PEK_SHORT = 9,
-	AXP152_IRQ_PEK_LONG = 10,
-	AXP152_IRQ_TIMER = 11,
-	AXP152_IRQ_PEK_RIS_EDGE = 12,
-	AXP152_IRQ_PEK_FAL_EDGE = 13,
-	AXP152_IRQ_GPIO3_INPUT = 14,
-	AXP152_IRQ_GPIO2_INPUT = 15,
-	AXP152_IRQ_GPIO1_INPUT = 16,
-	AXP152_IRQ_GPIO0_INPUT = 17,
-};
-
-enum {
-	AXP20X_IRQ_ACIN_OVER_V = 1,
-	AXP20X_IRQ_ACIN_PLUGIN = 2,
-	AXP20X_IRQ_ACIN_REMOVAL = 3,
-	AXP20X_IRQ_VBUS_OVER_V = 4,
-	AXP20X_IRQ_VBUS_PLUGIN = 5,
-	AXP20X_IRQ_VBUS_REMOVAL = 6,
-	AXP20X_IRQ_VBUS_V_LOW = 7,
-	AXP20X_IRQ_BATT_PLUGIN = 8,
-	AXP20X_IRQ_BATT_REMOVAL = 9,
-	AXP20X_IRQ_BATT_ENT_ACT_MODE = 10,
-	AXP20X_IRQ_BATT_EXIT_ACT_MODE = 11,
-	AXP20X_IRQ_CHARG = 12,
-	AXP20X_IRQ_CHARG_DONE = 13,
-	AXP20X_IRQ_BATT_TEMP_HIGH = 14,
-	AXP20X_IRQ_BATT_TEMP_LOW = 15,
-	AXP20X_IRQ_DIE_TEMP_HIGH = 16,
-	AXP20X_IRQ_CHARG_I_LOW = 17,
-	AXP20X_IRQ_DCDC1_V_LONG = 18,
-	AXP20X_IRQ_DCDC2_V_LONG = 19,
-	AXP20X_IRQ_DCDC3_V_LONG = 20,
-	AXP20X_IRQ_PEK_SHORT = 22,
-	AXP20X_IRQ_PEK_LONG = 23,
-	AXP20X_IRQ_N_OE_PWR_ON = 24,
-	AXP20X_IRQ_N_OE_PWR_OFF = 25,
-	AXP20X_IRQ_VBUS_VALID = 26,
-	AXP20X_IRQ_VBUS_NOT_VALID = 27,
-	AXP20X_IRQ_VBUS_SESS_VALID = 28,
-	AXP20X_IRQ_VBUS_SESS_END = 29,
-	AXP20X_IRQ_LOW_PWR_LVL1 = 30,
-	AXP20X_IRQ_LOW_PWR_LVL2 = 31,
-	AXP20X_IRQ_TIMER = 32,
-	AXP20X_IRQ_PEK_RIS_EDGE = 33,
-	AXP20X_IRQ_PEK_FAL_EDGE = 34,
-	AXP20X_IRQ_GPIO3_INPUT = 35,
-	AXP20X_IRQ_GPIO2_INPUT = 36,
-	AXP20X_IRQ_GPIO1_INPUT = 37,
-	AXP20X_IRQ_GPIO0_INPUT = 38,
-};
-
-enum axp22x_irqs {
-	AXP22X_IRQ_ACIN_OVER_V = 1,
-	AXP22X_IRQ_ACIN_PLUGIN = 2,
-	AXP22X_IRQ_ACIN_REMOVAL = 3,
-	AXP22X_IRQ_VBUS_OVER_V = 4,
-	AXP22X_IRQ_VBUS_PLUGIN = 5,
-	AXP22X_IRQ_VBUS_REMOVAL = 6,
-	AXP22X_IRQ_VBUS_V_LOW = 7,
-	AXP22X_IRQ_BATT_PLUGIN = 8,
-	AXP22X_IRQ_BATT_REMOVAL = 9,
-	AXP22X_IRQ_BATT_ENT_ACT_MODE = 10,
-	AXP22X_IRQ_BATT_EXIT_ACT_MODE = 11,
-	AXP22X_IRQ_CHARG = 12,
-	AXP22X_IRQ_CHARG_DONE = 13,
-	AXP22X_IRQ_BATT_TEMP_HIGH = 14,
-	AXP22X_IRQ_BATT_TEMP_LOW = 15,
-	AXP22X_IRQ_DIE_TEMP_HIGH = 16,
-	AXP22X_IRQ_PEK_SHORT = 17,
-	AXP22X_IRQ_PEK_LONG = 18,
-	AXP22X_IRQ_LOW_PWR_LVL1 = 19,
-	AXP22X_IRQ_LOW_PWR_LVL2 = 20,
-	AXP22X_IRQ_TIMER = 21,
-	AXP22X_IRQ_PEK_RIS_EDGE = 22,
-	AXP22X_IRQ_PEK_FAL_EDGE = 23,
-	AXP22X_IRQ_GPIO1_INPUT = 24,
-	AXP22X_IRQ_GPIO0_INPUT = 25,
-};
-
-enum axp288_irqs {
-	AXP288_IRQ_VBUS_FALL = 2,
-	AXP288_IRQ_VBUS_RISE = 3,
-	AXP288_IRQ_OV = 4,
-	AXP288_IRQ_FALLING_ALT = 5,
-	AXP288_IRQ_RISING_ALT = 6,
-	AXP288_IRQ_OV_ALT = 7,
-	AXP288_IRQ_DONE = 10,
-	AXP288_IRQ_CHARGING = 11,
-	AXP288_IRQ_SAFE_QUIT = 12,
-	AXP288_IRQ_SAFE_ENTER = 13,
-	AXP288_IRQ_ABSENT = 14,
-	AXP288_IRQ_APPEND = 15,
-	AXP288_IRQ_QWBTU = 16,
-	AXP288_IRQ_WBTU = 17,
-	AXP288_IRQ_QWBTO = 18,
-	AXP288_IRQ_WBTO = 19,
-	AXP288_IRQ_QCBTU = 20,
-	AXP288_IRQ_CBTU = 21,
-	AXP288_IRQ_QCBTO = 22,
-	AXP288_IRQ_CBTO = 23,
-	AXP288_IRQ_WL2 = 24,
-	AXP288_IRQ_WL1 = 25,
-	AXP288_IRQ_GPADC = 26,
-	AXP288_IRQ_OT = 31,
-	AXP288_IRQ_GPIO0 = 32,
-	AXP288_IRQ_GPIO1 = 33,
-	AXP288_IRQ_POKO = 34,
-	AXP288_IRQ_POKL = 35,
-	AXP288_IRQ_POKS = 36,
-	AXP288_IRQ_POKN = 37,
-	AXP288_IRQ_POKP = 38,
-	AXP288_IRQ_TIMER = 39,
-	AXP288_IRQ_MV_CHNG = 40,
-	AXP288_IRQ_BC_USB_CHNG = 41,
-};
-
-enum axp803_irqs {
-	AXP803_IRQ_ACIN_OVER_V = 1,
-	AXP803_IRQ_ACIN_PLUGIN = 2,
-	AXP803_IRQ_ACIN_REMOVAL = 3,
-	AXP803_IRQ_VBUS_OVER_V = 4,
-	AXP803_IRQ_VBUS_PLUGIN = 5,
-	AXP803_IRQ_VBUS_REMOVAL = 6,
-	AXP803_IRQ_BATT_PLUGIN = 7,
-	AXP803_IRQ_BATT_REMOVAL = 8,
-	AXP803_IRQ_BATT_ENT_ACT_MODE = 9,
-	AXP803_IRQ_BATT_EXIT_ACT_MODE = 10,
-	AXP803_IRQ_CHARG = 11,
-	AXP803_IRQ_CHARG_DONE = 12,
-	AXP803_IRQ_BATT_CHG_TEMP_HIGH = 13,
-	AXP803_IRQ_BATT_CHG_TEMP_HIGH_END = 14,
-	AXP803_IRQ_BATT_CHG_TEMP_LOW = 15,
-	AXP803_IRQ_BATT_CHG_TEMP_LOW_END = 16,
-	AXP803_IRQ_BATT_ACT_TEMP_HIGH = 17,
-	AXP803_IRQ_BATT_ACT_TEMP_HIGH_END = 18,
-	AXP803_IRQ_BATT_ACT_TEMP_LOW = 19,
-	AXP803_IRQ_BATT_ACT_TEMP_LOW_END = 20,
-	AXP803_IRQ_DIE_TEMP_HIGH = 21,
-	AXP803_IRQ_GPADC = 22,
-	AXP803_IRQ_LOW_PWR_LVL1 = 23,
-	AXP803_IRQ_LOW_PWR_LVL2 = 24,
-	AXP803_IRQ_TIMER = 25,
-	AXP803_IRQ_PEK_RIS_EDGE = 26,
-	AXP803_IRQ_PEK_FAL_EDGE = 27,
-	AXP803_IRQ_PEK_SHORT = 28,
-	AXP803_IRQ_PEK_LONG = 29,
-	AXP803_IRQ_PEK_OVER_OFF = 30,
-	AXP803_IRQ_GPIO1_INPUT = 31,
-	AXP803_IRQ_GPIO0_INPUT = 32,
-	AXP803_IRQ_BC_USB_CHNG = 33,
-	AXP803_IRQ_MV_CHNG = 34,
-};
-
-enum axp806_irqs {
-	AXP806_IRQ_DIE_TEMP_HIGH_LV1 = 0,
-	AXP806_IRQ_DIE_TEMP_HIGH_LV2 = 1,
-	AXP806_IRQ_DCDCA_V_LOW = 2,
-	AXP806_IRQ_DCDCB_V_LOW = 3,
-	AXP806_IRQ_DCDCC_V_LOW = 4,
-	AXP806_IRQ_DCDCD_V_LOW = 5,
-	AXP806_IRQ_DCDCE_V_LOW = 6,
-	AXP806_IRQ_POK_LONG = 7,
-	AXP806_IRQ_POK_SHORT = 8,
-	AXP806_IRQ_WAKEUP = 9,
-	AXP806_IRQ_POK_FALL = 10,
-	AXP806_IRQ_POK_RISE = 11,
-};
-
-enum axp809_irqs {
-	AXP809_IRQ_ACIN_OVER_V = 1,
-	AXP809_IRQ_ACIN_PLUGIN = 2,
-	AXP809_IRQ_ACIN_REMOVAL = 3,
-	AXP809_IRQ_VBUS_OVER_V = 4,
-	AXP809_IRQ_VBUS_PLUGIN = 5,
-	AXP809_IRQ_VBUS_REMOVAL = 6,
-	AXP809_IRQ_VBUS_V_LOW = 7,
-	AXP809_IRQ_BATT_PLUGIN = 8,
-	AXP809_IRQ_BATT_REMOVAL = 9,
-	AXP809_IRQ_BATT_ENT_ACT_MODE = 10,
-	AXP809_IRQ_BATT_EXIT_ACT_MODE = 11,
-	AXP809_IRQ_CHARG = 12,
-	AXP809_IRQ_CHARG_DONE = 13,
-	AXP809_IRQ_BATT_CHG_TEMP_HIGH = 14,
-	AXP809_IRQ_BATT_CHG_TEMP_HIGH_END = 15,
-	AXP809_IRQ_BATT_CHG_TEMP_LOW = 16,
-	AXP809_IRQ_BATT_CHG_TEMP_LOW_END = 17,
-	AXP809_IRQ_BATT_ACT_TEMP_HIGH = 18,
-	AXP809_IRQ_BATT_ACT_TEMP_HIGH_END = 19,
-	AXP809_IRQ_BATT_ACT_TEMP_LOW = 20,
-	AXP809_IRQ_BATT_ACT_TEMP_LOW_END = 21,
-	AXP809_IRQ_DIE_TEMP_HIGH = 22,
-	AXP809_IRQ_LOW_PWR_LVL1 = 23,
-	AXP809_IRQ_LOW_PWR_LVL2 = 24,
-	AXP809_IRQ_TIMER = 25,
-	AXP809_IRQ_PEK_RIS_EDGE = 26,
-	AXP809_IRQ_PEK_FAL_EDGE = 27,
-	AXP809_IRQ_PEK_SHORT = 28,
-	AXP809_IRQ_PEK_LONG = 29,
-	AXP809_IRQ_PEK_OVER_OFF = 30,
-	AXP809_IRQ_GPIO1_INPUT = 31,
-	AXP809_IRQ_GPIO0_INPUT = 32,
-};
-
-struct axp20x_dev {
-	struct device *dev;
-	int irq;
-	long unsigned int irq_flags;
-	struct regmap *regmap;
-	struct regmap_irq_chip_data___2 *regmap_irqc;
-	long int variant;
-	int nr_cells;
-	const struct mfd_cell *cells;
-	const struct regmap_config *regmap_cfg;
-	const struct regmap_irq_chip *regmap_irq_chip;
-};
-
-struct i2c_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-enum i2c_alert_protocol {
-	I2C_PROTOCOL_SMBUS_ALERT = 0,
-	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
-};
-
-struct i2c_board_info;
-
-struct i2c_driver {
-	unsigned int class;
-	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-	int (*remove)(struct i2c_client *);
-	int (*probe_new)(struct i2c_client *);
-	void (*shutdown)(struct i2c_client *);
-	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
-	int (*command)(struct i2c_client *, unsigned int, void *);
-	struct device_driver driver;
-	const struct i2c_device_id *id_table;
-	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-	const short unsigned int *address_list;
-	struct list_head clients;
-};
-
-struct i2c_board_info {
-	char type[20];
-	short unsigned int flags;
-	short unsigned int addr;
-	const char *dev_name;
-	void *platform_data;
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	const struct property_entry *properties;
-	const struct resource *resources;
-	unsigned int num_resources;
-	int irq;
-};
-
-struct dax_device___2;
-
-struct dax_operations {
-	long int (*direct_access)(struct dax_device___2 *, long unsigned int, long int, void **, pfn_t *);
-	bool (*dax_supported)(struct dax_device___2 *, struct block_device *, int, sector_t, sector_t);
-	size_t (*copy_from_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	size_t (*copy_to_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	int (*zero_page_range)(struct dax_device___2 *, long unsigned int, size_t);
-};
-
-struct dax_device___2 {
-	struct hlist_node list;
-	struct inode inode;
-	struct cdev cdev;
-	const char *host;
-	void *private;
-	long unsigned int flags;
-	const struct dax_operations *ops;
-};
-
-enum dax_device_flags {
-	DAXDEV_ALIVE = 0,
-	DAXDEV_WRITE_CACHE = 1,
-	DAXDEV_SYNC = 2,
-};
-
-struct dax_region {
-	int id;
-	int target_node;
-	struct kref kref;
-	struct device *dev;
-	unsigned int align;
-	struct ida ida;
-	struct resource res;
-	struct device *seed;
-	struct device *youngest;
-};
-
-struct dax_mapping {
-	struct device dev;
-	int range_id;
-	int id;
-};
-
-struct dev_dax_range {
-	long unsigned int pgoff;
-	struct range range;
-	struct dax_mapping *mapping;
-};
-
-struct dev_dax {
-	struct dax_region *region;
-	struct dax_device *dax_dev;
-	unsigned int align;
-	int target_node;
-	int id;
-	struct ida ida;
-	struct device dev;
-	struct dev_pagemap *pgmap;
-	int nr_range;
-	struct dev_dax_range *ranges;
-};
-
-enum dev_dax_subsys {
-	DEV_DAX_BUS = 0,
-	DEV_DAX_CLASS = 1,
-};
-
-struct dev_dax_data {
-	struct dax_region *dax_region;
-	struct dev_pagemap *pgmap;
-	enum dev_dax_subsys subsys;
-	resource_size_t size;
-	int id;
-};
-
-struct dax_device_driver {
-	struct device_driver drv;
-	struct list_head ids;
-	int match_always;
-	int (*probe)(struct dev_dax *);
-	int (*remove)(struct dev_dax *);
-};
-
-struct dax_id {
-	struct list_head list;
-	char dev_name[30];
-};
-
-enum id_action {
-	ID_REMOVE = 0,
-	ID_ADD = 1,
-};
-
-struct seqcount_ww_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_ww_mutex seqcount_ww_mutex_t;
-
-struct dma_fence_ops;
-
-struct dma_fence {
-	spinlock_t *lock;
-	const struct dma_fence_ops *ops;
+struct aligned_lock {
 	union {
-		struct list_head cb_list;
-		ktime_t timestamp;
-		struct callback_head rcu;
-	};
-	u64 context;
-	u64 seqno;
-	long unsigned int flags;
-	struct kref refcount;
-	int error;
-};
-
-struct dma_fence_ops {
-	bool use_64bit_seqno;
-	const char * (*get_driver_name)(struct dma_fence *);
-	const char * (*get_timeline_name)(struct dma_fence *);
-	bool (*enable_signaling)(struct dma_fence *);
-	bool (*signaled)(struct dma_fence *);
-	long int (*wait)(struct dma_fence *, bool, long int);
-	void (*release)(struct dma_fence *);
-	void (*fence_value_str)(struct dma_fence *, char *, int);
-	void (*timeline_value_str)(struct dma_fence *, char *, int);
-};
-
-enum dma_fence_flag_bits {
-	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
-	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
-	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
-	DMA_FENCE_FLAG_USER_BITS = 3,
-};
-
-struct dma_fence_cb;
-
-typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
-
-struct dma_fence_cb {
-	struct list_head node;
-	dma_fence_func_t func;
-};
-
-struct dma_buf;
-
-struct dma_buf_attachment;
-
-struct dma_buf_ops {
-	bool cache_sgt_mapping;
-	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
-	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
-	int (*pin)(struct dma_buf_attachment *);
-	void (*unpin)(struct dma_buf_attachment *);
-	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
-	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
-	void (*release)(struct dma_buf *);
-	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
-	void * (*vmap)(struct dma_buf *);
-	void (*vunmap)(struct dma_buf *, void *);
-};
-
-struct dma_buf_poll_cb_t {
-	struct dma_fence_cb cb;
-	wait_queue_head_t *poll;
-	__poll_t active;
-};
-
-struct dma_resv;
-
-struct dma_buf {
-	size_t size;
-	struct file *file;
-	struct list_head attachments;
-	const struct dma_buf_ops *ops;
-	struct mutex lock;
-	unsigned int vmapping_counter;
-	void *vmap_ptr;
-	const char *exp_name;
-	const char *name;
-	spinlock_t name_lock;
-	struct module *owner;
-	struct list_head list_node;
-	void *priv;
-	struct dma_resv *resv;
-	wait_queue_head_t poll;
-	struct dma_buf_poll_cb_t cb_excl;
-	struct dma_buf_poll_cb_t cb_shared;
-};
-
-struct dma_buf_attach_ops;
-
-struct dma_buf_attachment {
-	struct dma_buf *dmabuf;
-	struct device *dev;
-	struct list_head node;
-	struct sg_table *sgt;
-	enum dma_data_direction dir;
-	bool peer2peer;
-	const struct dma_buf_attach_ops *importer_ops;
-	void *importer_priv;
-	void *priv;
-};
-
-struct dma_resv_list;
-
-struct dma_resv {
-	struct ww_mutex lock;
-	seqcount_ww_mutex_t seq;
-	struct dma_fence *fence_excl;
-	struct dma_resv_list *fence;
-};
-
-struct dma_buf_attach_ops {
-	bool allow_peer2peer;
-	void (*move_notify)(struct dma_buf_attachment *);
-};
-
-struct dma_buf_export_info {
-	const char *exp_name;
-	struct module *owner;
-	const struct dma_buf_ops *ops;
-	size_t size;
-	int flags;
-	struct dma_resv *resv;
-	void *priv;
-};
-
-struct dma_resv_list {
-	struct callback_head rcu;
-	u32 shared_count;
-	u32 shared_max;
-	struct dma_fence *shared[0];
-};
-
-struct dma_buf_sync {
-	__u64 flags;
-};
-
-struct dma_buf_list {
-	struct list_head head;
-	struct mutex lock;
-};
-
-struct trace_event_raw_dma_fence {
-	struct trace_entry ent;
-	u32 __data_loc_driver;
-	u32 __data_loc_timeline;
-	unsigned int context;
-	unsigned int seqno;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dma_fence {
-	u32 driver;
-	u32 timeline;
-};
-
-typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
-
-struct default_wait_cb {
-	struct dma_fence_cb base;
-	struct task_struct *task;
-};
-
-struct dma_fence_array;
-
-struct dma_fence_array_cb {
-	struct dma_fence_cb cb;
-	struct dma_fence_array *array;
-};
-
-struct dma_fence_array {
-	struct dma_fence base;
-	spinlock_t lock;
-	unsigned int num_fences;
-	atomic_t num_pending;
-	struct dma_fence **fences;
-	struct irq_work work;
-};
-
-struct dma_fence_chain {
-	struct dma_fence base;
-	spinlock_t lock;
-	struct dma_fence *prev;
-	u64 prev_seqno;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-	struct irq_work work;
-};
-
-enum seqno_fence_condition {
-	SEQNO_FENCE_WAIT_GEQUAL = 0,
-	SEQNO_FENCE_WAIT_NONZERO = 1,
-};
-
-struct seqno_fence {
-	struct dma_fence base;
-	const struct dma_fence_ops *ops;
-	struct dma_buf *sync_buf;
-	uint32_t seqno_ofs;
-	enum seqno_fence_condition condition;
-};
-
-struct sync_file {
-	struct file *file;
-	char user_name[32];
-	struct list_head sync_file_list;
-	wait_queue_head_t wq;
-	long unsigned int flags;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-};
-
-struct sync_merge_data {
-	char name[32];
-	__s32 fd2;
-	__s32 fence;
-	__u32 flags;
-	__u32 pad;
-};
-
-struct sync_fence_info {
-	char obj_name[32];
-	char driver_name[32];
-	__s32 status;
-	__u32 flags;
-	__u64 timestamp_ns;
-};
-
-struct sync_file_info {
-	char name[32];
-	__s32 status;
-	__u32 flags;
-	__u32 num_fences;
-	__u32 pad;
-	__u64 sync_fence_info;
-};
-
-struct scsi_lun {
-	__u8 scsi_lun[8];
-};
-
-struct nvme_user_io {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nblocks;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 slba;
-	__u32 dsmgmt;
-	__u32 reftag;
-	__u16 apptag;
-	__u16 appmask;
-};
-
-struct nvme_passthru_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 result;
-};
-
-struct nvme_passthru_cmd64 {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 rsvd2;
-	__u64 result;
-};
-
-struct nvme_id_power_state {
-	__le16 max_power;
-	__u8 rsvd2;
-	__u8 flags;
-	__le32 entry_lat;
-	__le32 exit_lat;
-	__u8 read_tput;
-	__u8 read_lat;
-	__u8 write_tput;
-	__u8 write_lat;
-	__le16 idle_power;
-	__u8 idle_scale;
-	__u8 rsvd19;
-	__le16 active_power;
-	__u8 active_work_scale;
-	__u8 rsvd23[9];
-};
-
-enum {
-	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
-	NVME_PS_FLAGS_NON_OP_STATE = 2,
-};
-
-enum nvme_ctrl_attr {
-	NVME_CTRL_ATTR_HID_128_BIT = 1,
-	NVME_CTRL_ATTR_TBKAS = 64,
-};
-
-struct nvme_id_ctrl {
-	__le16 vid;
-	__le16 ssvid;
-	char sn[20];
-	char mn[40];
-	char fr[8];
-	__u8 rab;
-	__u8 ieee[3];
-	__u8 cmic;
-	__u8 mdts;
-	__le16 cntlid;
-	__le32 ver;
-	__le32 rtd3r;
-	__le32 rtd3e;
-	__le32 oaes;
-	__le32 ctratt;
-	__u8 rsvd100[28];
-	__le16 crdt1;
-	__le16 crdt2;
-	__le16 crdt3;
-	__u8 rsvd134[122];
-	__le16 oacs;
-	__u8 acl;
-	__u8 aerl;
-	__u8 frmw;
-	__u8 lpa;
-	__u8 elpe;
-	__u8 npss;
-	__u8 avscc;
-	__u8 apsta;
-	__le16 wctemp;
-	__le16 cctemp;
-	__le16 mtfa;
-	__le32 hmpre;
-	__le32 hmmin;
-	__u8 tnvmcap[16];
-	__u8 unvmcap[16];
-	__le32 rpmbs;
-	__le16 edstt;
-	__u8 dsto;
-	__u8 fwug;
-	__le16 kas;
-	__le16 hctma;
-	__le16 mntmt;
-	__le16 mxtmt;
-	__le32 sanicap;
-	__le32 hmminds;
-	__le16 hmmaxd;
-	__u8 rsvd338[4];
-	__u8 anatt;
-	__u8 anacap;
-	__le32 anagrpmax;
-	__le32 nanagrpid;
-	__u8 rsvd352[160];
-	__u8 sqes;
-	__u8 cqes;
-	__le16 maxcmd;
-	__le32 nn;
-	__le16 oncs;
-	__le16 fuses;
-	__u8 fna;
-	__u8 vwc;
-	__le16 awun;
-	__le16 awupf;
-	__u8 nvscc;
-	__u8 nwpc;
-	__le16 acwu;
-	__u8 rsvd534[2];
-	__le32 sgls;
-	__le32 mnan;
-	__u8 rsvd544[224];
-	char subnqn[256];
-	__u8 rsvd1024[768];
-	__le32 ioccsz;
-	__le32 iorcsz;
-	__le16 icdoff;
-	__u8 ctrattr;
-	__u8 msdbd;
-	__u8 rsvd1804[244];
-	struct nvme_id_power_state psd[32];
-	__u8 vs[1024];
-};
-
-enum {
-	NVME_CTRL_CMIC_MULTI_CTRL = 2,
-	NVME_CTRL_CMIC_ANA = 8,
-	NVME_CTRL_ONCS_COMPARE = 1,
-	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
-	NVME_CTRL_ONCS_DSM = 4,
-	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
-	NVME_CTRL_ONCS_RESERVATIONS = 32,
-	NVME_CTRL_ONCS_TIMESTAMP = 64,
-	NVME_CTRL_VWC_PRESENT = 1,
-	NVME_CTRL_OACS_SEC_SUPP = 1,
-	NVME_CTRL_OACS_DIRECTIVES = 32,
-	NVME_CTRL_OACS_DBBUF_SUPP = 256,
-	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
-	NVME_CTRL_CTRATT_128_ID = 1,
-	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
-	NVME_CTRL_CTRATT_NVM_SETS = 4,
-	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
-	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
-	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
-	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
-	NVME_CTRL_CTRATT_UUID_LIST = 512,
-};
-
-struct nvme_lbaf {
-	__le16 ms;
-	__u8 ds;
-	__u8 rp;
-};
-
-struct nvme_id_ns {
-	__le64 nsze;
-	__le64 ncap;
-	__le64 nuse;
-	__u8 nsfeat;
-	__u8 nlbaf;
-	__u8 flbas;
-	__u8 mc;
-	__u8 dpc;
-	__u8 dps;
-	__u8 nmic;
-	__u8 rescap;
-	__u8 fpi;
-	__u8 dlfeat;
-	__le16 nawun;
-	__le16 nawupf;
-	__le16 nacwu;
-	__le16 nabsn;
-	__le16 nabo;
-	__le16 nabspf;
-	__le16 noiob;
-	__u8 nvmcap[16];
-	__le16 npwg;
-	__le16 npwa;
-	__le16 npdg;
-	__le16 npda;
-	__le16 nows;
-	__u8 rsvd74[18];
-	__le32 anagrpid;
-	__u8 rsvd96[3];
-	__u8 nsattr;
-	__le16 nvmsetid;
-	__le16 endgid;
-	__u8 nguid[16];
-	__u8 eui64[8];
-	struct nvme_lbaf lbaf[16];
-	__u8 rsvd192[192];
-	__u8 vs[3712];
-};
-
-enum {
-	NVME_ID_CNS_NS = 0,
-	NVME_ID_CNS_CTRL = 1,
-	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
-	NVME_ID_CNS_NS_DESC_LIST = 3,
-	NVME_ID_CNS_CS_NS = 5,
-	NVME_ID_CNS_CS_CTRL = 6,
-	NVME_ID_CNS_NS_PRESENT_LIST = 16,
-	NVME_ID_CNS_NS_PRESENT = 17,
-	NVME_ID_CNS_CTRL_NS_LIST = 18,
-	NVME_ID_CNS_CTRL_LIST = 19,
-	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
-	NVME_ID_CNS_NS_GRANULARITY = 22,
-	NVME_ID_CNS_UUID_LIST = 23,
-};
-
-enum {
-	NVME_CSI_NVM = 0,
-	NVME_CSI_ZNS = 2,
-};
-
-enum {
-	NVME_DIR_IDENTIFY = 0,
-	NVME_DIR_STREAMS = 1,
-	NVME_DIR_SND_ID_OP_ENABLE = 1,
-	NVME_DIR_SND_ST_OP_REL_ID = 1,
-	NVME_DIR_SND_ST_OP_REL_RSC = 2,
-	NVME_DIR_RCV_ID_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_STATUS = 2,
-	NVME_DIR_RCV_ST_OP_RESOURCE = 3,
-	NVME_DIR_ENDIR = 1,
-};
-
-enum {
-	NVME_NS_FEAT_THIN = 1,
-	NVME_NS_FEAT_ATOMICS = 2,
-	NVME_NS_FEAT_IO_OPT = 16,
-	NVME_NS_ATTR_RO = 1,
-	NVME_NS_FLBAS_LBA_MASK = 15,
-	NVME_NS_FLBAS_META_EXT = 16,
-	NVME_NS_NMIC_SHARED = 1,
-	NVME_LBAF_RP_BEST = 0,
-	NVME_LBAF_RP_BETTER = 1,
-	NVME_LBAF_RP_GOOD = 2,
-	NVME_LBAF_RP_DEGRADED = 3,
-	NVME_NS_DPC_PI_LAST = 16,
-	NVME_NS_DPC_PI_FIRST = 8,
-	NVME_NS_DPC_PI_TYPE3 = 4,
-	NVME_NS_DPC_PI_TYPE2 = 2,
-	NVME_NS_DPC_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_FIRST = 8,
-	NVME_NS_DPS_PI_MASK = 7,
-	NVME_NS_DPS_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_TYPE2 = 2,
-	NVME_NS_DPS_PI_TYPE3 = 3,
-};
-
-struct nvme_ns_id_desc {
-	__u8 nidt;
-	__u8 nidl;
-	__le16 reserved;
-};
-
-enum {
-	NVME_NIDT_EUI64 = 1,
-	NVME_NIDT_NGUID = 2,
-	NVME_NIDT_UUID = 3,
-	NVME_NIDT_CSI = 4,
-};
-
-struct nvme_fw_slot_info_log {
-	__u8 afi;
-	__u8 rsvd1[7];
-	__le64 frs[7];
-	__u8 rsvd64[448];
-};
-
-enum {
-	NVME_CMD_EFFECTS_CSUPP = 1,
-	NVME_CMD_EFFECTS_LBCC = 2,
-	NVME_CMD_EFFECTS_NCC = 4,
-	NVME_CMD_EFFECTS_NIC = 8,
-	NVME_CMD_EFFECTS_CCC = 16,
-	NVME_CMD_EFFECTS_CSE_MASK = 196608,
-	NVME_CMD_EFFECTS_UUID_SEL = 524288,
-};
-
-struct nvme_effects_log {
-	__le32 acs[256];
-	__le32 iocs[256];
-	__u8 resv[2048];
-};
-
-enum {
-	NVME_AER_ERROR = 0,
-	NVME_AER_SMART = 1,
-	NVME_AER_NOTICE = 2,
-	NVME_AER_CSS = 6,
-	NVME_AER_VS = 7,
-};
-
-enum {
-	NVME_AER_NOTICE_NS_CHANGED = 0,
-	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
-	NVME_AER_NOTICE_ANA = 3,
-	NVME_AER_NOTICE_DISC_CHANGED = 240,
-};
-
-enum {
-	NVME_AEN_CFG_NS_ATTR = 256,
-	NVME_AEN_CFG_FW_ACT = 512,
-	NVME_AEN_CFG_ANA_CHANGE = 2048,
-	NVME_AEN_CFG_DISC_CHANGE = 2147483648,
-};
-
-enum nvme_opcode {
-	nvme_cmd_flush = 0,
-	nvme_cmd_write = 1,
-	nvme_cmd_read = 2,
-	nvme_cmd_write_uncor = 4,
-	nvme_cmd_compare = 5,
-	nvme_cmd_write_zeroes = 8,
-	nvme_cmd_dsm = 9,
-	nvme_cmd_verify = 12,
-	nvme_cmd_resv_register = 13,
-	nvme_cmd_resv_report = 14,
-	nvme_cmd_resv_acquire = 17,
-	nvme_cmd_resv_release = 21,
-	nvme_cmd_zone_mgmt_send = 121,
-	nvme_cmd_zone_mgmt_recv = 122,
-	nvme_cmd_zone_append = 125,
-};
-
-struct nvme_sgl_desc {
-	__le64 addr;
-	__le32 length;
-	__u8 rsvd[3];
-	__u8 type;
-};
-
-struct nvme_keyed_sgl_desc {
-	__le64 addr;
-	__u8 length[3];
-	__u8 key[4];
-	__u8 type;
-};
-
-union nvme_data_ptr {
-	struct {
-		__le64 prp1;
-		__le64 prp2;
-	};
-	struct nvme_sgl_desc sgl;
-	struct nvme_keyed_sgl_desc ksgl;
-};
-
-enum {
-	NVME_CMD_FUSE_FIRST = 1,
-	NVME_CMD_FUSE_SECOND = 2,
-	NVME_CMD_SGL_METABUF = 64,
-	NVME_CMD_SGL_METASEG = 128,
-	NVME_CMD_SGL_ALL = 192,
-};
-
-struct nvme_common_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le32 cdw10;
-	__le32 cdw11;
-	__le32 cdw12;
-	__le32 cdw13;
-	__le32 cdw14;
-	__le32 cdw15;
-};
-
-struct nvme_rw_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum {
-	NVME_RW_LR = 32768,
-	NVME_RW_FUA = 16384,
-	NVME_RW_APPEND_PIREMAP = 512,
-	NVME_RW_DSM_FREQ_UNSPEC = 0,
-	NVME_RW_DSM_FREQ_TYPICAL = 1,
-	NVME_RW_DSM_FREQ_RARE = 2,
-	NVME_RW_DSM_FREQ_READS = 3,
-	NVME_RW_DSM_FREQ_WRITES = 4,
-	NVME_RW_DSM_FREQ_RW = 5,
-	NVME_RW_DSM_FREQ_ONCE = 6,
-	NVME_RW_DSM_FREQ_PREFETCH = 7,
-	NVME_RW_DSM_FREQ_TEMP = 8,
-	NVME_RW_DSM_LATENCY_NONE = 0,
-	NVME_RW_DSM_LATENCY_IDLE = 16,
-	NVME_RW_DSM_LATENCY_NORM = 32,
-	NVME_RW_DSM_LATENCY_LOW = 48,
-	NVME_RW_DSM_SEQ_REQ = 64,
-	NVME_RW_DSM_COMPRESSED = 128,
-	NVME_RW_PRINFO_PRCHK_REF = 1024,
-	NVME_RW_PRINFO_PRCHK_APP = 2048,
-	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
-	NVME_RW_PRINFO_PRACT = 8192,
-	NVME_RW_DTYPE_STREAMS = 16,
-};
-
-struct nvme_dsm_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 nr;
-	__le32 attributes;
-	__u32 rsvd12[4];
-};
-
-enum {
-	NVME_DSMGMT_IDR = 1,
-	NVME_DSMGMT_IDW = 2,
-	NVME_DSMGMT_AD = 4,
-};
-
-struct nvme_dsm_range {
-	__le32 cattr;
-	__le32 nlb;
-	__le64 slba;
-};
-
-struct nvme_write_zeroes_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum nvme_zone_mgmt_action {
-	NVME_ZONE_CLOSE = 1,
-	NVME_ZONE_FINISH = 2,
-	NVME_ZONE_OPEN = 3,
-	NVME_ZONE_RESET = 4,
-	NVME_ZONE_OFFLINE = 5,
-	NVME_ZONE_SET_DESC_EXT = 16,
-};
-
-struct nvme_zone_mgmt_send_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 cdw12;
-	__u8 zsa;
-	__u8 select_all;
-	__u8 rsvd13[2];
-	__le32 cdw14[2];
-};
-
-struct nvme_zone_mgmt_recv_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 numd;
-	__u8 zra;
-	__u8 zrasf;
-	__u8 pr;
-	__u8 rsvd13;
-	__le32 cdw14[2];
-};
-
-struct nvme_feat_auto_pst {
-	__le64 entries[32];
-};
-
-struct nvme_feat_host_behavior {
-	__u8 acre;
-	__u8 resv1[511];
-};
-
-enum {
-	NVME_ENABLE_ACRE = 1,
-};
-
-enum nvme_admin_opcode {
-	nvme_admin_delete_sq = 0,
-	nvme_admin_create_sq = 1,
-	nvme_admin_get_log_page = 2,
-	nvme_admin_delete_cq = 4,
-	nvme_admin_create_cq = 5,
-	nvme_admin_identify = 6,
-	nvme_admin_abort_cmd = 8,
-	nvme_admin_set_features = 9,
-	nvme_admin_get_features = 10,
-	nvme_admin_async_event = 12,
-	nvme_admin_ns_mgmt = 13,
-	nvme_admin_activate_fw = 16,
-	nvme_admin_download_fw = 17,
-	nvme_admin_dev_self_test = 20,
-	nvme_admin_ns_attach = 21,
-	nvme_admin_keep_alive = 24,
-	nvme_admin_directive_send = 25,
-	nvme_admin_directive_recv = 26,
-	nvme_admin_virtual_mgmt = 28,
-	nvme_admin_nvme_mi_send = 29,
-	nvme_admin_nvme_mi_recv = 30,
-	nvme_admin_dbbuf = 124,
-	nvme_admin_format_nvm = 128,
-	nvme_admin_security_send = 129,
-	nvme_admin_security_recv = 130,
-	nvme_admin_sanitize_nvm = 132,
-	nvme_admin_get_lba_status = 134,
-	nvme_admin_vendor_start = 192,
-};
-
-enum {
-	NVME_QUEUE_PHYS_CONTIG = 1,
-	NVME_CQ_IRQ_ENABLED = 2,
-	NVME_SQ_PRIO_URGENT = 0,
-	NVME_SQ_PRIO_HIGH = 2,
-	NVME_SQ_PRIO_MEDIUM = 4,
-	NVME_SQ_PRIO_LOW = 6,
-	NVME_FEAT_ARBITRATION = 1,
-	NVME_FEAT_POWER_MGMT = 2,
-	NVME_FEAT_LBA_RANGE = 3,
-	NVME_FEAT_TEMP_THRESH = 4,
-	NVME_FEAT_ERR_RECOVERY = 5,
-	NVME_FEAT_VOLATILE_WC = 6,
-	NVME_FEAT_NUM_QUEUES = 7,
-	NVME_FEAT_IRQ_COALESCE = 8,
-	NVME_FEAT_IRQ_CONFIG = 9,
-	NVME_FEAT_WRITE_ATOMIC = 10,
-	NVME_FEAT_ASYNC_EVENT = 11,
-	NVME_FEAT_AUTO_PST = 12,
-	NVME_FEAT_HOST_MEM_BUF = 13,
-	NVME_FEAT_TIMESTAMP = 14,
-	NVME_FEAT_KATO = 15,
-	NVME_FEAT_HCTM = 16,
-	NVME_FEAT_NOPSC = 17,
-	NVME_FEAT_RRL = 18,
-	NVME_FEAT_PLM_CONFIG = 19,
-	NVME_FEAT_PLM_WINDOW = 20,
-	NVME_FEAT_HOST_BEHAVIOR = 22,
-	NVME_FEAT_SANITIZE = 23,
-	NVME_FEAT_SW_PROGRESS = 128,
-	NVME_FEAT_HOST_ID = 129,
-	NVME_FEAT_RESV_MASK = 130,
-	NVME_FEAT_RESV_PERSIST = 131,
-	NVME_FEAT_WRITE_PROTECT = 132,
-	NVME_FEAT_VENDOR_START = 192,
-	NVME_FEAT_VENDOR_END = 255,
-	NVME_LOG_ERROR = 1,
-	NVME_LOG_SMART = 2,
-	NVME_LOG_FW_SLOT = 3,
-	NVME_LOG_CHANGED_NS = 4,
-	NVME_LOG_CMD_EFFECTS = 5,
-	NVME_LOG_DEVICE_SELF_TEST = 6,
-	NVME_LOG_TELEMETRY_HOST = 7,
-	NVME_LOG_TELEMETRY_CTRL = 8,
-	NVME_LOG_ENDURANCE_GROUP = 9,
-	NVME_LOG_ANA = 12,
-	NVME_LOG_DISC = 112,
-	NVME_LOG_RESERVATION = 128,
-	NVME_FWACT_REPL = 0,
-	NVME_FWACT_REPL_ACTV = 8,
-	NVME_FWACT_ACTV = 16,
-};
-
-struct nvme_identify {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 cns;
-	__u8 rsvd3;
-	__le16 ctrlid;
-	__u8 rsvd11[3];
-	__u8 csi;
-	__u32 rsvd12[4];
-};
-
-struct nvme_features {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 fid;
-	__le32 dword11;
-	__le32 dword12;
-	__le32 dword13;
-	__le32 dword14;
-	__le32 dword15;
-};
-
-struct nvme_create_cq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 cqid;
-	__le16 qsize;
-	__le16 cq_flags;
-	__le16 irq_vector;
-	__u32 rsvd12[4];
-};
-
-struct nvme_create_sq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 sqid;
-	__le16 qsize;
-	__le16 sq_flags;
-	__le16 cqid;
-	__u32 rsvd12[4];
-};
-
-struct nvme_delete_queue {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 qid;
-	__u16 rsvd10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_abort_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 sqid;
-	__u16 cid;
-	__u32 rsvd11[5];
-};
-
-struct nvme_download_firmware {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__le32 offset;
-	__u32 rsvd12[4];
-};
-
-struct nvme_format_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[4];
-	__le32 cdw10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_get_log_page_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 lid;
-	__u8 lsp;
-	__le16 numdl;
-	__le16 numdu;
-	__u16 rsvd11;
-	union {
-		struct {
-			__le32 lpol;
-			__le32 lpou;
-		};
-		__le64 lpo;
-	};
-	__u8 rsvd14[3];
-	__u8 csi;
-	__u32 rsvd15;
-};
-
-struct nvme_directive_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__u8 doper;
-	__u8 dtype;
-	__le16 dspec;
-	__u8 endir;
-	__u8 tdtype;
-	__u16 rsvd15;
-	__u32 rsvd16[3];
-};
-
-enum nvmf_fabrics_opcode {
-	nvme_fabrics_command = 127,
-};
-
-enum nvmf_capsule_command {
-	nvme_fabrics_type_property_set = 0,
-	nvme_fabrics_type_connect = 1,
-	nvme_fabrics_type_property_get = 4,
-};
-
-struct nvmf_common_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 ts[24];
-};
-
-struct nvmf_connect_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[19];
-	union nvme_data_ptr dptr;
-	__le16 recfmt;
-	__le16 qid;
-	__le16 sqsize;
-	__u8 cattr;
-	__u8 resv3;
-	__le32 kato;
-	__u8 resv4[12];
-};
-
-struct nvmf_property_set_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__le64 value;
-	__u8 resv4[8];
-};
-
-struct nvmf_property_get_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__u8 resv4[16];
-};
-
-struct nvme_dbbuf {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd12[6];
-};
-
-struct streams_directive_params {
-	__le16 msl;
-	__le16 nssa;
-	__le16 nsso;
-	__u8 rsvd[10];
-	__le32 sws;
-	__le16 sgs;
-	__le16 nsa;
-	__le16 nso;
-	__u8 rsvd2[6];
-};
-
-struct nvme_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_rw_command rw;
-		struct nvme_identify identify;
-		struct nvme_features features;
-		struct nvme_create_cq create_cq;
-		struct nvme_create_sq create_sq;
-		struct nvme_delete_queue delete_queue;
-		struct nvme_download_firmware dlfw;
-		struct nvme_format_cmd format;
-		struct nvme_dsm_cmd dsm;
-		struct nvme_write_zeroes_cmd write_zeroes;
-		struct nvme_zone_mgmt_send_cmd zms;
-		struct nvme_zone_mgmt_recv_cmd zmr;
-		struct nvme_abort_cmd abort;
-		struct nvme_get_log_page_command get_log_page;
-		struct nvmf_common_command fabrics;
-		struct nvmf_connect_command connect;
-		struct nvmf_property_set_command prop_set;
-		struct nvmf_property_get_command prop_get;
-		struct nvme_dbbuf dbbuf;
-		struct nvme_directive_cmd directive;
+		spinlock_t lock;
+		u8 cacheline_padding[128];
 	};
 };
 
-enum {
-	NVME_SC_SUCCESS = 0,
-	NVME_SC_INVALID_OPCODE = 1,
-	NVME_SC_INVALID_FIELD = 2,
-	NVME_SC_CMDID_CONFLICT = 3,
-	NVME_SC_DATA_XFER_ERROR = 4,
-	NVME_SC_POWER_LOSS = 5,
-	NVME_SC_INTERNAL = 6,
-	NVME_SC_ABORT_REQ = 7,
-	NVME_SC_ABORT_QUEUE = 8,
-	NVME_SC_FUSED_FAIL = 9,
-	NVME_SC_FUSED_MISSING = 10,
-	NVME_SC_INVALID_NS = 11,
-	NVME_SC_CMD_SEQ_ERROR = 12,
-	NVME_SC_SGL_INVALID_LAST = 13,
-	NVME_SC_SGL_INVALID_COUNT = 14,
-	NVME_SC_SGL_INVALID_DATA = 15,
-	NVME_SC_SGL_INVALID_METADATA = 16,
-	NVME_SC_SGL_INVALID_TYPE = 17,
-	NVME_SC_SGL_INVALID_OFFSET = 22,
-	NVME_SC_SGL_INVALID_SUBTYPE = 23,
-	NVME_SC_SANITIZE_FAILED = 28,
-	NVME_SC_SANITIZE_IN_PROGRESS = 29,
-	NVME_SC_NS_WRITE_PROTECTED = 32,
-	NVME_SC_CMD_INTERRUPTED = 33,
-	NVME_SC_LBA_RANGE = 128,
-	NVME_SC_CAP_EXCEEDED = 129,
-	NVME_SC_NS_NOT_READY = 130,
-	NVME_SC_RESERVATION_CONFLICT = 131,
-	NVME_SC_CQ_INVALID = 256,
-	NVME_SC_QID_INVALID = 257,
-	NVME_SC_QUEUE_SIZE = 258,
-	NVME_SC_ABORT_LIMIT = 259,
-	NVME_SC_ABORT_MISSING = 260,
-	NVME_SC_ASYNC_LIMIT = 261,
-	NVME_SC_FIRMWARE_SLOT = 262,
-	NVME_SC_FIRMWARE_IMAGE = 263,
-	NVME_SC_INVALID_VECTOR = 264,
-	NVME_SC_INVALID_LOG_PAGE = 265,
-	NVME_SC_INVALID_FORMAT = 266,
-	NVME_SC_FW_NEEDS_CONV_RESET = 267,
-	NVME_SC_INVALID_QUEUE = 268,
-	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
-	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
-	NVME_SC_FEATURE_NOT_PER_NS = 271,
-	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
-	NVME_SC_FW_NEEDS_RESET = 273,
-	NVME_SC_FW_NEEDS_MAX_TIME = 274,
-	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
-	NVME_SC_OVERLAPPING_RANGE = 276,
-	NVME_SC_NS_INSUFFICIENT_CAP = 277,
-	NVME_SC_NS_ID_UNAVAILABLE = 278,
-	NVME_SC_NS_ALREADY_ATTACHED = 280,
-	NVME_SC_NS_IS_PRIVATE = 281,
-	NVME_SC_NS_NOT_ATTACHED = 282,
-	NVME_SC_THIN_PROV_NOT_SUPP = 283,
-	NVME_SC_CTRL_LIST_INVALID = 284,
-	NVME_SC_BP_WRITE_PROHIBITED = 286,
-	NVME_SC_PMR_SAN_PROHIBITED = 291,
-	NVME_SC_BAD_ATTRIBUTES = 384,
-	NVME_SC_INVALID_PI = 385,
-	NVME_SC_READ_ONLY = 386,
-	NVME_SC_ONCS_NOT_SUPPORTED = 387,
-	NVME_SC_CONNECT_FORMAT = 384,
-	NVME_SC_CONNECT_CTRL_BUSY = 385,
-	NVME_SC_CONNECT_INVALID_PARAM = 386,
-	NVME_SC_CONNECT_RESTART_DISC = 387,
-	NVME_SC_CONNECT_INVALID_HOST = 388,
-	NVME_SC_DISCOVERY_RESTART = 400,
-	NVME_SC_AUTH_REQUIRED = 401,
-	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
-	NVME_SC_ZONE_FULL = 441,
-	NVME_SC_ZONE_READ_ONLY = 442,
-	NVME_SC_ZONE_OFFLINE = 443,
-	NVME_SC_ZONE_INVALID_WRITE = 444,
-	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
-	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
-	NVME_SC_ZONE_INVALID_TRANSITION = 447,
-	NVME_SC_WRITE_FAULT = 640,
-	NVME_SC_READ_ERROR = 641,
-	NVME_SC_GUARD_CHECK = 642,
-	NVME_SC_APPTAG_CHECK = 643,
-	NVME_SC_REFTAG_CHECK = 644,
-	NVME_SC_COMPARE_FAILED = 645,
-	NVME_SC_ACCESS_DENIED = 646,
-	NVME_SC_UNWRITTEN_BLOCK = 647,
-	NVME_SC_ANA_PERSISTENT_LOSS = 769,
-	NVME_SC_ANA_INACCESSIBLE = 770,
-	NVME_SC_ANA_TRANSITION = 771,
-	NVME_SC_HOST_PATH_ERROR = 880,
-	NVME_SC_HOST_ABORTED_CMD = 881,
-	NVME_SC_CRD = 6144,
-	NVME_SC_DNR = 16384,
-};
-
-union nvme_result {
-	__le16 u16;
-	__le32 u32;
-	__le64 u64;
-};
-
-enum nvme_quirks {
-	NVME_QUIRK_STRIPE_SIZE = 1,
-	NVME_QUIRK_IDENTIFY_CNS = 2,
-	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
-	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
-	NVME_QUIRK_NO_APST = 16,
-	NVME_QUIRK_NO_DEEPEST_PS = 32,
-	NVME_QUIRK_LIGHTNVM = 64,
-	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
-	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
-	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
-	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
-	NVME_QUIRK_SINGLE_VECTOR = 2048,
-	NVME_QUIRK_128_BYTES_SQES = 4096,
-	NVME_QUIRK_SHARED_TAGS = 8192,
-	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
-	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
-};
-
-struct nvme_ctrl;
-
-struct nvme_request {
-	struct nvme_command *cmd;
-	union nvme_result result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	struct nvme_ctrl *ctrl;
-};
-
-enum nvme_ctrl_state {
-	NVME_CTRL_NEW = 0,
-	NVME_CTRL_LIVE = 1,
-	NVME_CTRL_RESETTING = 2,
-	NVME_CTRL_CONNECTING = 3,
-	NVME_CTRL_DELETING = 4,
-	NVME_CTRL_DELETING_NOIO = 5,
-	NVME_CTRL_DEAD = 6,
-};
-
-struct opal_dev;
-
-struct nvme_fault_inject {};
-
-struct nvme_ctrl_ops;
-
-struct nvme_subsystem;
-
-struct nvmf_ctrl_options;
-
-struct nvme_ctrl {
-	bool comp_seen;
-	enum nvme_ctrl_state state;
-	bool identified;
-	spinlock_t lock;
-	struct mutex scan_lock;
-	const struct nvme_ctrl_ops *ops;
-	struct request_queue *admin_q;
-	struct request_queue *connect_q;
-	struct request_queue *fabrics_q;
-	struct device *dev;
-	int instance;
-	int numa_node;
-	struct blk_mq_tag_set *tagset;
-	struct blk_mq_tag_set *admin_tagset;
-	struct list_head namespaces;
-	struct rw_semaphore namespaces_rwsem;
-	struct device ctrl_device;
-	struct device *device;
-	struct cdev cdev;
-	struct work_struct reset_work;
-	struct work_struct delete_work;
-	wait_queue_head_t state_wq;
-	struct nvme_subsystem *subsys;
-	struct list_head subsys_entry;
-	struct opal_dev *opal_dev;
-	char name[12];
-	u16 cntlid;
-	u32 ctrl_config;
-	u16 mtfa;
-	u32 queue_count;
-	u64 cap;
-	u32 max_hw_sectors;
-	u32 max_segments;
-	u32 max_integrity_segments;
-	u32 max_zone_append;
-	u16 crdt[3];
-	u16 oncs;
-	u16 oacs;
-	u16 nssa;
-	u16 nr_streams;
-	u16 sqsize;
-	u32 max_namespaces;
-	atomic_t abort_limit;
-	u8 vwc;
-	u32 vs;
-	u32 sgls;
-	u16 kas;
-	u8 npss;
-	u8 apsta;
-	u16 wctemp;
-	u16 cctemp;
-	u32 oaes;
-	u32 aen_result;
-	u32 ctratt;
-	unsigned int shutdown_timeout;
-	unsigned int kato;
-	bool subsystem;
-	long unsigned int quirks;
-	struct nvme_id_power_state psd[32];
-	struct nvme_effects_log *effects;
-	struct xarray cels;
-	struct work_struct scan_work;
-	struct work_struct async_event_work;
-	struct delayed_work ka_work;
-	struct nvme_command ka_cmd;
-	struct work_struct fw_act_work;
-	long unsigned int events;
-	u64 ps_max_latency_us;
-	bool apst_enabled;
-	u32 hmpre;
-	u32 hmmin;
-	u32 hmminds;
-	u16 hmmaxd;
-	u32 ioccsz;
-	u32 iorcsz;
-	u16 icdoff;
-	u16 maxcmd;
-	int nr_reconnects;
-	struct nvmf_ctrl_options *opts;
-	struct page *discard_page;
-	long unsigned int discard_page_busy;
-	struct nvme_fault_inject fault_inject;
-};
-
-enum {
-	NVME_REQ_CANCELLED = 1,
-	NVME_REQ_USERCMD = 2,
-};
-
-struct nvme_ctrl_ops {
-	const char *name;
-	struct module *module;
-	unsigned int flags;
-	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
-	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
-	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
-	void (*free_ctrl)(struct nvme_ctrl *);
-	void (*submit_async_event)(struct nvme_ctrl *);
-	void (*delete_ctrl)(struct nvme_ctrl *);
-	int (*get_address)(struct nvme_ctrl *, char *, int);
-};
-
-struct nvme_subsystem {
-	int instance;
-	struct device dev;
-	struct kref ref;
-	struct list_head entry;
-	struct mutex lock;
-	struct list_head ctrls;
-	struct list_head nsheads;
-	char subnqn[223];
-	char serial[20];
-	char model[40];
-	char firmware_rev[8];
-	u8 cmic;
-	u16 vendor_id;
-	u16 awupf;
-	struct ida ns_ida;
-};
-
-struct nvmf_host;
-
-struct nvmf_ctrl_options {
-	unsigned int mask;
-	char *transport;
-	char *subsysnqn;
-	char *traddr;
-	char *trsvcid;
-	char *host_traddr;
-	size_t queue_size;
-	unsigned int nr_io_queues;
-	unsigned int reconnect_delay;
-	bool discovery_nqn;
-	bool duplicate_connect;
-	unsigned int kato;
-	struct nvmf_host *host;
-	int max_reconnects;
-	bool disable_sqflow;
-	bool hdr_digest;
-	bool data_digest;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-	int tos;
-};
-
-struct nvme_ns_ids {
-	u8 eui64[8];
-	u8 nguid[16];
-	uuid_t uuid;
-	u8 csi;
-};
-
-struct nvme_ns_head {
+struct arena_info {
+	u64 size;
+	u64 external_lba_start;
+	u32 internal_nlba;
+	u32 internal_lbasize;
+	u32 external_nlba;
+	u32 external_lbasize;
+	u32 nfree;
+	u16 version_major;
+	u16 version_minor;
+	u32 sector_size;
+	u64 nextoff;
+	u64 infooff;
+	u64 dataoff;
+	u64 mapoff;
+	u64 logoff;
+	u64 info2off;
+	struct free_entry *freelist;
+	u32 *rtt;
+	struct aligned_lock *map_locks;
+	struct nd_btt *nd_btt;
 	struct list_head list;
-	struct srcu_struct srcu;
-	struct nvme_subsystem *subsys;
-	unsigned int ns_id;
-	struct nvme_ns_ids ids;
-	struct list_head entry;
-	struct kref ref;
-	bool shared;
-	int instance;
-	struct nvme_effects_log *effects;
-};
-
-enum nvme_ns_features {
-	NVME_NS_EXT_LBAS = 1,
-	NVME_NS_METADATA_SUPPORTED = 2,
-};
-
-struct nvme_ns {
-	struct list_head list;
-	struct nvme_ctrl *ctrl;
-	struct request_queue *queue;
-	struct gendisk *disk;
-	struct list_head siblings;
-	struct nvm_dev *ndev;
-	struct kref kref;
-	struct nvme_ns_head *head;
-	int lba_shift;
-	u16 ms;
-	u16 sgs;
-	u32 sws;
-	u8 pi_type;
-	u64 zsze;
-	long unsigned int features;
-	long unsigned int flags;
-	struct nvme_fault_inject fault_inject;
-};
-
-struct nvmf_host {
-	struct kref ref;
-	struct list_head list;
-	char nqn[223];
-	uuid_t id;
-};
-
-struct trace_event_raw_nvme_setup_cmd {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	u8 opcode;
-	u8 flags;
-	u8 fctype;
-	u16 cid;
-	u32 nsid;
-	u64 metadata;
-	u8 cdw10[24];
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_complete_rq {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	int cid;
-	u64 result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_async_event {
-	struct trace_entry ent;
-	int ctrl_id;
-	u32 result;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_sq {
-	struct trace_entry ent;
-	int ctrl_id;
-	char disk[32];
-	int qid;
-	u16 sq_head;
-	u16 sq_tail;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nvme_setup_cmd {};
-
-struct trace_event_data_offsets_nvme_complete_rq {};
-
-struct trace_event_data_offsets_nvme_async_event {};
-
-struct trace_event_data_offsets_nvme_sq {};
-
-typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
-
-typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
-
-typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
-
-typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
-
-enum nvme_disposition {
-	COMPLETE = 0,
-	RETRY = 1,
-	FAILOVER = 2,
-};
-
-struct nvme_core_quirk_entry {
-	u16 vid;
-	const char *mn;
-	const char *fr;
-	long unsigned int quirks;
-};
-
-struct nvm_user_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nppas;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 ppa_list;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 status;
-	__u32 result;
-	__u32 rsvd3[3];
-};
-
-struct nvm_passthru_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u8 rsvd[2];
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 ppa_list;
-	__u16 nppas;
-	__u16 control;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u64 status;
-	__u32 result;
-	__u32 timeout_ms;
-};
-
-enum nvme_nvm_admin_opcode {
-	nvme_nvm_admin_identity = 226,
-	nvme_nvm_admin_get_bb_tbl = 242,
-	nvme_nvm_admin_set_bb_tbl = 241,
-};
-
-enum nvme_nvm_log_page {
-	NVME_NVM_LOG_REPORT_CHUNK = 202,
-};
-
-struct nvme_nvm_ph_rw {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_erase_blk {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_identity {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd11[6];
-};
-
-struct nvme_nvm_getbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__u32 rsvd4[4];
-};
-
-struct nvme_nvm_setbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 nlb;
-	__u8 value;
-	__u8 rsvd3;
-	__u32 rsvd4[3];
-};
-
-struct nvme_nvm_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_nvm_ph_rw ph_rw;
-		struct nvme_nvm_erase_blk erase;
-		struct nvme_nvm_identity identity;
-		struct nvme_nvm_getbbtbl get_bb;
-		struct nvme_nvm_setbbtbl set_bb;
-	};
-};
-
-struct nvme_nvm_id12_grp {
-	__u8 mtype;
-	__u8 fmtype;
-	__le16 res16;
-	__u8 num_ch;
-	__u8 num_lun;
-	__u8 num_pln;
-	__u8 rsvd1;
-	__le16 num_chk;
-	__le16 num_pg;
-	__le16 fpg_sz;
-	__le16 csecs;
-	__le16 sos;
-	__le16 rsvd2;
-	__le32 trdt;
-	__le32 trdm;
-	__le32 tprt;
-	__le32 tprm;
-	__le32 tbet;
-	__le32 tbem;
-	__le32 mpos;
-	__le32 mccap;
-	__le16 cpar;
-	__u8 reserved[906];
-};
-
-struct nvme_nvm_id12_addrf {
-	__u8 ch_offset;
-	__u8 ch_len;
-	__u8 lun_offset;
-	__u8 lun_len;
-	__u8 pln_offset;
-	__u8 pln_len;
-	__u8 blk_offset;
-	__u8 blk_len;
-	__u8 pg_offset;
-	__u8 pg_len;
-	__u8 sec_offset;
-	__u8 sec_len;
-	__u8 res[4];
-};
-
-struct nvme_nvm_id12 {
-	__u8 ver_id;
-	__u8 vmnt;
-	__u8 cgrps;
-	__u8 res;
-	__le32 cap;
-	__le32 dom;
-	struct nvme_nvm_id12_addrf ppaf;
-	__u8 resv[228];
-	struct nvme_nvm_id12_grp grp;
-	__u8 resv2[2880];
-};
-
-struct nvme_nvm_bb_tbl {
-	__u8 tblid[4];
-	__le16 verid;
-	__le16 revid;
-	__le32 rvsd1;
-	__le32 tblks;
-	__le32 tfact;
-	__le32 tgrown;
-	__le32 tdresv;
-	__le32 thresv;
-	__le32 rsvd2[8];
-	__u8 blk[0];
-};
-
-struct nvme_nvm_id20_addrf {
-	__u8 grp_len;
-	__u8 pu_len;
-	__u8 chk_len;
-	__u8 lba_len;
-	__u8 resv[4];
-};
-
-struct nvme_nvm_id20 {
-	__u8 mjr;
-	__u8 mnr;
-	__u8 resv[6];
-	struct nvme_nvm_id20_addrf lbaf;
-	__le32 mccap;
-	__u8 resv2[12];
-	__u8 wit;
-	__u8 resv3[31];
-	__le16 num_grp;
-	__le16 num_pu;
-	__le32 num_chk;
-	__le32 clba;
-	__u8 resv4[52];
-	__le32 ws_min;
-	__le32 ws_opt;
-	__le32 mw_cunits;
-	__le32 maxoc;
-	__le32 maxocpu;
-	__u8 resv5[44];
-	__le32 trdt;
-	__le32 trdm;
-	__le32 twrt;
-	__le32 twrm;
-	__le32 tcrst;
-	__le32 tcrsm;
-	__u8 resv6[40];
-	__u8 resv7[2816];
-	__u8 vs[1024];
-};
-
-struct nvme_nvm_chk_meta {
-	__u8 state;
-	__u8 type;
-	__u8 wi;
-	__u8 rsvd[5];
-	__le64 slba;
-	__le64 cnlb;
-	__le64 wp;
-};
-
-struct dma_pool___2;
-
-struct nvme_zns_lbafe {
-	__le64 zsze;
-	__u8 zdes;
-	__u8 rsvd9[7];
-};
-
-struct nvme_id_ns_zns {
-	__le16 zoc;
-	__le16 ozcs;
-	__le32 mar;
-	__le32 mor;
-	__le32 rrl;
-	__le32 frl;
-	__u8 rsvd20[2796];
-	struct nvme_zns_lbafe lbafe[16];
-	__u8 rsvd3072[768];
-	__u8 vs[256];
-};
-
-struct nvme_id_ctrl_zns {
-	__u8 zasl;
-	__u8 rsvd1[4095];
-};
-
-struct nvme_zone_descriptor {
-	__u8 zt;
-	__u8 zs;
-	__u8 za;
-	__u8 rsvd3[5];
-	__le64 zcap;
-	__le64 zslba;
-	__le64 wp;
-	__u8 rsvd32[32];
-};
-
-enum {
-	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
-};
-
-struct nvme_zone_report {
-	__le64 nr_zones;
-	__u8 resv8[56];
-	struct nvme_zone_descriptor entries[0];
-};
-
-enum {
-	NVME_ZRA_ZONE_REPORT = 0,
-	NVME_ZRASF_ZONE_REPORT_ALL = 0,
-	NVME_REPORT_ZONE_PARTIAL = 1,
-};
-
-enum {
-	NVME_CMBSZ_SQS = 1,
-	NVME_CMBSZ_CQS = 2,
-	NVME_CMBSZ_LISTS = 4,
-	NVME_CMBSZ_RDS = 8,
-	NVME_CMBSZ_WDS = 16,
-	NVME_CMBSZ_SZ_SHIFT = 12,
-	NVME_CMBSZ_SZ_MASK = 1048575,
-	NVME_CMBSZ_SZU_SHIFT = 8,
-	NVME_CMBSZ_SZU_MASK = 15,
-};
-
-enum {
-	NVME_SGL_FMT_DATA_DESC = 0,
-	NVME_SGL_FMT_SEG_DESC = 2,
-	NVME_SGL_FMT_LAST_SEG_DESC = 3,
-	NVME_KEY_SGL_FMT_DATA_DESC = 4,
-	NVME_TRANSPORT_SGL_DATA_DESC = 5,
-};
-
-enum {
-	NVME_HOST_MEM_ENABLE = 1,
-	NVME_HOST_MEM_RETURN = 2,
-};
-
-struct nvme_host_mem_buf_desc {
-	__le64 addr;
-	__le32 size;
-	__u32 rsvd;
-};
-
-struct nvme_completion {
-	union nvme_result result;
-	__le16 sq_head;
-	__le16 sq_id;
-	__u16 command_id;
-	__le16 status;
-};
-
-struct nvme_queue;
-
-struct nvme_dev {
-	struct nvme_queue *queues;
-	struct blk_mq_tag_set tagset;
-	struct blk_mq_tag_set admin_tagset;
-	u32 *dbs;
-	struct device *dev;
-	struct dma_pool___2 *prp_page_pool;
-	struct dma_pool___2 *prp_small_pool;
-	unsigned int online_queues;
-	unsigned int max_qid;
-	unsigned int io_queues[3];
-	unsigned int num_vecs;
-	u32 q_depth;
-	int io_sqes;
-	u32 db_stride;
-	void *bar;
-	long unsigned int bar_mapped_size;
-	struct work_struct remove_work;
-	struct mutex shutdown_lock;
-	bool subsystem;
-	u64 cmb_size;
-	bool cmb_use_sqes;
-	u32 cmbsz;
-	u32 cmbloc;
-	struct nvme_ctrl ctrl;
-	u32 last_ps;
-	mempool_t *iod_mempool;
-	u32 *dbbuf_dbs;
-	dma_addr_t dbbuf_dbs_dma_addr;
-	u32 *dbbuf_eis;
-	dma_addr_t dbbuf_eis_dma_addr;
-	u64 host_mem_size;
-	u32 nr_host_mem_descs;
-	dma_addr_t host_mem_descs_dma;
-	struct nvme_host_mem_buf_desc *host_mem_descs;
-	void **host_mem_desc_bufs;
-	unsigned int nr_allocated_queues;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-};
-
-struct nvme_queue {
-	struct nvme_dev *dev;
-	spinlock_t sq_lock;
-	void *sq_cmds;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t cq_poll_lock;
-	struct nvme_completion *cqes;
-	dma_addr_t sq_dma_addr;
-	dma_addr_t cq_dma_addr;
-	u32 *q_db;
-	u32 q_depth;
-	u16 cq_vector;
-	u16 sq_tail;
-	u16 last_sq_tail;
-	u16 cq_head;
-	u16 qid;
-	u8 cq_phase;
-	u8 sqes;
-	long unsigned int flags;
-	u32 *dbbuf_sq_db;
-	u32 *dbbuf_cq_db;
-	u32 *dbbuf_sq_ei;
-	u32 *dbbuf_cq_ei;
-	struct completion delete_done;
-};
-
-struct nvme_iod {
-	struct nvme_request req;
-	struct nvme_queue *nvmeq;
-	bool use_sgl;
-	int aborted;
-	int npages;
-	int nents;
-	dma_addr_t first_dma;
-	unsigned int dma_len;
-	dma_addr_t meta_dma;
-	struct scatterlist *sg;
-};
-
-enum of_reconfig_change {
-	OF_RECONFIG_NO_CHANGE = 0,
-	OF_RECONFIG_CHANGE_ADD = 1,
-	OF_RECONFIG_CHANGE_REMOVE = 2,
-};
-
-typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
-
-struct spi_res {
-	struct list_head entry;
-	spi_res_release_t release;
-	long long unsigned int data[0];
-};
-
-struct spi_replaced_transfers;
-
-typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
-
-struct spi_replaced_transfers {
-	spi_replaced_release_t release;
-	void *extradata;
-	struct list_head replaced_transfers;
-	struct list_head *replaced_after;
-	size_t inserted;
-	struct spi_transfer inserted_transfers[0];
-};
-
-struct spi_board_info {
-	char modalias[32];
-	const void *platform_data;
-	const struct property_entry *properties;
-	void *controller_data;
-	int irq;
-	u32 max_speed_hz;
-	u16 bus_num;
-	u16 chip_select;
-	u32 mode;
-};
-
-enum spi_mem_data_dir {
-	SPI_MEM_NO_DATA = 0,
-	SPI_MEM_DATA_IN = 1,
-	SPI_MEM_DATA_OUT = 2,
-};
-
-struct spi_mem_op {
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u16 opcode;
-	} cmd;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-		u64 val;
-	} addr;
-	struct {
-		u8 nbytes;
-		u8 buswidth;
-		u8 dtr: 1;
-	} dummy;
-	struct {
-		u8 buswidth;
-		u8 dtr: 1;
-		enum spi_mem_data_dir dir;
-		unsigned int nbytes;
-		union {
-			void *in;
-			const void *out;
-		} buf;
-	} data;
-};
-
-struct spi_mem_dirmap_info {
-	struct spi_mem_op op_tmpl;
-	u64 offset;
-	u64 length;
-};
-
-struct spi_mem_dirmap_desc {
-	struct spi_mem *mem;
-	struct spi_mem_dirmap_info info;
-	unsigned int nodirmap;
-	void *priv;
-};
-
-struct spi_mem {
-	struct spi_device *spi;
-	void *drvpriv;
-	const char *name;
-};
-
-enum of_gpio_flags {
-	OF_GPIO_ACTIVE_LOW = 1,
-	OF_GPIO_SINGLE_ENDED = 2,
-	OF_GPIO_OPEN_DRAIN = 4,
-	OF_GPIO_TRANSITORY = 8,
-	OF_GPIO_PULL_UP = 16,
-	OF_GPIO_PULL_DOWN = 32,
-};
-
-struct trace_event_raw_spi_controller {
-	struct trace_entry ent;
-	int bus_num;
-	char __data[0];
-};
-
-struct trace_event_raw_spi_message {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	char __data[0];
-};
-
-struct trace_event_raw_spi_message_done {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_message *msg;
-	unsigned int frame;
-	unsigned int actual;
-	char __data[0];
-};
-
-struct trace_event_raw_spi_transfer {
-	struct trace_entry ent;
-	int bus_num;
-	int chip_select;
-	struct spi_transfer *xfer;
-	int len;
-	u32 __data_loc_rx_buf;
-	u32 __data_loc_tx_buf;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_spi_controller {};
-
-struct trace_event_data_offsets_spi_message {};
-
-struct trace_event_data_offsets_spi_message_done {};
-
-struct trace_event_data_offsets_spi_transfer {
-	u32 rx_buf;
-	u32 tx_buf;
-};
-
-typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
-
-typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
-
-typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
-
-typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
-
-struct boardinfo {
-	struct list_head list;
-	struct spi_board_info board_info;
-};
-
-struct spi_mem_driver {
-	struct spi_driver spidrv;
-	int (*probe)(struct spi_mem *);
-	int (*remove)(struct spi_mem *);
-	void (*shutdown)(struct spi_mem *);
-};
-
-struct devprobe2 {
-	struct net_device * (*probe)(int);
-	int status;
-};
-
-enum {
-	NETIF_F_SG_BIT = 0,
-	NETIF_F_IP_CSUM_BIT = 1,
-	__UNUSED_NETIF_F_1 = 2,
-	NETIF_F_HW_CSUM_BIT = 3,
-	NETIF_F_IPV6_CSUM_BIT = 4,
-	NETIF_F_HIGHDMA_BIT = 5,
-	NETIF_F_FRAGLIST_BIT = 6,
-	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
-	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
-	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
-	NETIF_F_VLAN_CHALLENGED_BIT = 10,
-	NETIF_F_GSO_BIT = 11,
-	NETIF_F_LLTX_BIT = 12,
-	NETIF_F_NETNS_LOCAL_BIT = 13,
-	NETIF_F_GRO_BIT = 14,
-	NETIF_F_LRO_BIT = 15,
-	NETIF_F_GSO_SHIFT = 16,
-	NETIF_F_TSO_BIT = 16,
-	NETIF_F_GSO_ROBUST_BIT = 17,
-	NETIF_F_TSO_ECN_BIT = 18,
-	NETIF_F_TSO_MANGLEID_BIT = 19,
-	NETIF_F_TSO6_BIT = 20,
-	NETIF_F_FSO_BIT = 21,
-	NETIF_F_GSO_GRE_BIT = 22,
-	NETIF_F_GSO_GRE_CSUM_BIT = 23,
-	NETIF_F_GSO_IPXIP4_BIT = 24,
-	NETIF_F_GSO_IPXIP6_BIT = 25,
-	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
-	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
-	NETIF_F_GSO_PARTIAL_BIT = 28,
-	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
-	NETIF_F_GSO_SCTP_BIT = 30,
-	NETIF_F_GSO_ESP_BIT = 31,
-	NETIF_F_GSO_UDP_BIT = 32,
-	NETIF_F_GSO_UDP_L4_BIT = 33,
-	NETIF_F_GSO_FRAGLIST_BIT = 34,
-	NETIF_F_GSO_LAST = 34,
-	NETIF_F_FCOE_CRC_BIT = 35,
-	NETIF_F_SCTP_CRC_BIT = 36,
-	NETIF_F_FCOE_MTU_BIT = 37,
-	NETIF_F_NTUPLE_BIT = 38,
-	NETIF_F_RXHASH_BIT = 39,
-	NETIF_F_RXCSUM_BIT = 40,
-	NETIF_F_NOCACHE_COPY_BIT = 41,
-	NETIF_F_LOOPBACK_BIT = 42,
-	NETIF_F_RXFCS_BIT = 43,
-	NETIF_F_RXALL_BIT = 44,
-	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
-	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
-	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
-	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
-	NETIF_F_HW_TC_BIT = 49,
-	NETIF_F_HW_ESP_BIT = 50,
-	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
-	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
-	NETIF_F_HW_TLS_TX_BIT = 53,
-	NETIF_F_HW_TLS_RX_BIT = 54,
-	NETIF_F_GRO_HW_BIT = 55,
-	NETIF_F_HW_TLS_RECORD_BIT = 56,
-	NETIF_F_GRO_FRAGLIST_BIT = 57,
-	NETIF_F_HW_MACSEC_BIT = 58,
-	NETDEV_FEATURE_COUNT = 59,
-};
-
-enum {
-	SKBTX_HW_TSTAMP = 1,
-	SKBTX_SW_TSTAMP = 2,
-	SKBTX_IN_PROGRESS = 4,
-	SKBTX_DEV_ZEROCOPY = 8,
-	SKBTX_WIFI_STATUS = 16,
-	SKBTX_SHARED_FRAG = 32,
-	SKBTX_SCHED_TSTAMP = 64,
-};
-
-enum netdev_priv_flags {
-	IFF_802_1Q_VLAN = 1,
-	IFF_EBRIDGE = 2,
-	IFF_BONDING = 4,
-	IFF_ISATAP = 8,
-	IFF_WAN_HDLC = 16,
-	IFF_XMIT_DST_RELEASE = 32,
-	IFF_DONT_BRIDGE = 64,
-	IFF_DISABLE_NETPOLL = 128,
-	IFF_MACVLAN_PORT = 256,
-	IFF_BRIDGE_PORT = 512,
-	IFF_OVS_DATAPATH = 1024,
-	IFF_TX_SKB_SHARING = 2048,
-	IFF_UNICAST_FLT = 4096,
-	IFF_TEAM_PORT = 8192,
-	IFF_SUPP_NOFCS = 16384,
-	IFF_LIVE_ADDR_CHANGE = 32768,
-	IFF_MACVLAN = 65536,
-	IFF_XMIT_DST_RELEASE_PERM = 131072,
-	IFF_L3MDEV_MASTER = 262144,
-	IFF_NO_QUEUE = 524288,
-	IFF_OPENVSWITCH = 1048576,
-	IFF_L3MDEV_SLAVE = 2097152,
-	IFF_TEAM = 4194304,
-	IFF_RXFH_CONFIGURED = 8388608,
-	IFF_PHONY_HEADROOM = 16777216,
-	IFF_MACSEC = 33554432,
-	IFF_NO_RX_HANDLER = 67108864,
-	IFF_FAILOVER = 134217728,
-	IFF_FAILOVER_SLAVE = 268435456,
-	IFF_L3MDEV_RX_HANDLER = 536870912,
-	IFF_LIVE_RENAME_OK = 1073741824,
-};
-
-struct mdio_board_info {
-	const char *bus_id;
-	char modalias[32];
-	int mdio_addr;
-	const void *platform_data;
-};
-
-struct mdio_board_entry {
-	struct list_head list;
-	struct mdio_board_info board_info;
-};
-
-struct mdiobus_devres {
-	struct mii_bus *mii;
-};
-
-enum netdev_state_t {
-	__LINK_STATE_START = 0,
-	__LINK_STATE_PRESENT = 1,
-	__LINK_STATE_NOCARRIER = 2,
-	__LINK_STATE_LINKWATCH_PENDING = 3,
-	__LINK_STATE_DORMANT = 4,
-	__LINK_STATE_TESTING = 5,
-};
-
-struct mii_ioctl_data {
-	__u16 phy_id;
-	__u16 reg_num;
-	__u16 val_in;
-	__u16 val_out;
-};
-
-enum {
-	ETHTOOL_MSG_KERNEL_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
-	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
-	ETHTOOL_MSG_LINKINFO_NTF = 3,
-	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
-	ETHTOOL_MSG_LINKMODES_NTF = 5,
-	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
-	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
-	ETHTOOL_MSG_DEBUG_NTF = 8,
-	ETHTOOL_MSG_WOL_GET_REPLY = 9,
-	ETHTOOL_MSG_WOL_NTF = 10,
-	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
-	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
-	ETHTOOL_MSG_FEATURES_NTF = 13,
-	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
-	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
-	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
-	ETHTOOL_MSG_RINGS_NTF = 17,
-	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
-	ETHTOOL_MSG_CHANNELS_NTF = 19,
-	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
-	ETHTOOL_MSG_COALESCE_NTF = 21,
-	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
-	ETHTOOL_MSG_PAUSE_NTF = 23,
-	ETHTOOL_MSG_EEE_GET_REPLY = 24,
-	ETHTOOL_MSG_EEE_NTF = 25,
-	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
-	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
-	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
-	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
-	__ETHTOOL_MSG_KERNEL_CNT = 30,
-	ETHTOOL_MSG_KERNEL_MAX = 29,
-};
-
-struct phy_setting {
-	u32 speed;
-	u8 duplex;
-	u8 bit;
-};
-
-struct ethtool_phy_ops {
-	int (*get_sset_count)(struct phy_device *);
-	int (*get_strings)(struct phy_device *, u8 *);
-	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
-	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
-};
-
-struct phy_fixup {
-	struct list_head list;
-	char bus_id[64];
-	u32 phy_uid;
-	u32 phy_uid_mask;
-	int (*run)(struct phy_device *);
-};
-
-struct sfp_eeprom_base {
-	u8 phys_id;
-	u8 phys_ext_id;
-	u8 connector;
-	u8 if_1x_copper_passive: 1;
-	u8 if_1x_copper_active: 1;
-	u8 if_1x_lx: 1;
-	u8 if_1x_sx: 1;
-	u8 e10g_base_sr: 1;
-	u8 e10g_base_lr: 1;
-	u8 e10g_base_lrm: 1;
-	u8 e10g_base_er: 1;
-	u8 sonet_oc3_short_reach: 1;
-	u8 sonet_oc3_smf_intermediate_reach: 1;
-	u8 sonet_oc3_smf_long_reach: 1;
-	u8 unallocated_5_3: 1;
-	u8 sonet_oc12_short_reach: 1;
-	u8 sonet_oc12_smf_intermediate_reach: 1;
-	u8 sonet_oc12_smf_long_reach: 1;
-	u8 unallocated_5_7: 1;
-	u8 sonet_oc48_short_reach: 1;
-	u8 sonet_oc48_intermediate_reach: 1;
-	u8 sonet_oc48_long_reach: 1;
-	u8 sonet_reach_bit2: 1;
-	u8 sonet_reach_bit1: 1;
-	u8 sonet_oc192_short_reach: 1;
-	u8 escon_smf_1310_laser: 1;
-	u8 escon_mmf_1310_led: 1;
-	u8 e1000_base_sx: 1;
-	u8 e1000_base_lx: 1;
-	u8 e1000_base_cx: 1;
-	u8 e1000_base_t: 1;
-	u8 e100_base_lx: 1;
-	u8 e100_base_fx: 1;
-	u8 e_base_bx10: 1;
-	u8 e_base_px: 1;
-	u8 fc_tech_electrical_inter_enclosure: 1;
-	u8 fc_tech_lc: 1;
-	u8 fc_tech_sa: 1;
-	u8 fc_ll_m: 1;
-	u8 fc_ll_l: 1;
-	u8 fc_ll_i: 1;
-	u8 fc_ll_s: 1;
-	u8 fc_ll_v: 1;
-	u8 unallocated_8_0: 1;
-	u8 unallocated_8_1: 1;
-	u8 sfp_ct_passive: 1;
-	u8 sfp_ct_active: 1;
-	u8 fc_tech_ll: 1;
-	u8 fc_tech_sl: 1;
-	u8 fc_tech_sn: 1;
-	u8 fc_tech_electrical_intra_enclosure: 1;
-	u8 fc_media_sm: 1;
-	u8 unallocated_9_1: 1;
-	u8 fc_media_m5: 1;
-	u8 fc_media_m6: 1;
-	u8 fc_media_tv: 1;
-	u8 fc_media_mi: 1;
-	u8 fc_media_tp: 1;
-	u8 fc_media_tw: 1;
-	u8 fc_speed_100: 1;
-	u8 unallocated_10_1: 1;
-	u8 fc_speed_200: 1;
-	u8 fc_speed_3200: 1;
-	u8 fc_speed_400: 1;
-	u8 fc_speed_1600: 1;
-	u8 fc_speed_800: 1;
-	u8 fc_speed_1200: 1;
-	u8 encoding;
-	u8 br_nominal;
-	u8 rate_id;
-	u8 link_len[6];
-	char vendor_name[16];
-	u8 extended_cc;
-	char vendor_oui[3];
-	char vendor_pn[16];
-	char vendor_rev[4];
-	union {
-		__be16 optical_wavelength;
-		__be16 cable_compliance;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 reserved60_2: 6;
-			u8 reserved61: 8;
-		} passive;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 sff8431_lim: 1;
-			u8 fc_pi_4_lim: 1;
-			u8 reserved60_4: 4;
-			u8 reserved61: 8;
-		} active;
-	};
-	u8 reserved62;
-	u8 cc_base;
-};
-
-struct sfp_eeprom_ext {
-	__be16 options;
-	u8 br_max;
-	u8 br_min;
-	char vendor_sn[16];
-	char datecode[8];
-	u8 diagmon;
-	u8 enhopts;
-	u8 sff8472_compliance;
-	u8 cc_ext;
-};
-
-struct sfp_eeprom_id {
-	struct sfp_eeprom_base base;
-	struct sfp_eeprom_ext ext;
-};
-
-struct sfp_upstream_ops {
-	void (*attach)(void *, struct sfp_bus *);
-	void (*detach)(void *, struct sfp_bus *);
-	int (*module_insert)(void *, const struct sfp_eeprom_id *);
-	void (*module_remove)(void *);
-	int (*module_start)(void *);
-	void (*module_stop)(void *);
-	void (*link_down)(void *);
-	void (*link_up)(void *);
-	int (*connect_phy)(void *, struct phy_device *);
-	void (*disconnect_phy)(void *);
-};
-
-struct trace_event_raw_mdio_access {
-	struct trace_entry ent;
-	char busid[61];
-	char read;
-	u8 addr;
-	u16 val;
-	unsigned int regnum;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mdio_access {};
-
-typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
-
-struct mdio_bus_stat_attr {
-	int addr;
-	unsigned int field_offset;
-};
-
-struct mdio_driver {
-	struct mdio_driver_common mdiodrv;
-	int (*probe)(struct mdio_device *);
-	void (*remove)(struct mdio_device *);
-};
-
-struct fixed_phy_status {
-	int link;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-};
-
-struct swmii_regs {
-	u16 bmsr;
-	u16 lpa;
-	u16 lpagb;
-	u16 estat;
-};
-
-enum {
-	SWMII_SPEED_10 = 0,
-	SWMII_SPEED_100 = 1,
-	SWMII_SPEED_1000 = 2,
-	SWMII_DUPLEX_HALF = 0,
-	SWMII_DUPLEX_FULL = 1,
-};
-
-struct sfp;
-
-struct sfp_socket_ops;
-
-struct sfp_quirk;
-
-struct sfp_bus {
-	struct kref kref;
-	struct list_head node;
-	struct fwnode_handle *fwnode;
-	const struct sfp_socket_ops *socket_ops;
-	struct device *sfp_dev;
-	struct sfp *sfp;
-	const struct sfp_quirk *sfp_quirk;
-	const struct sfp_upstream_ops *upstream_ops;
-	void *upstream;
-	struct phy_device *phydev;
-	bool registered;
-	bool started;
-};
-
-enum {
-	SFF8024_ID_UNK = 0,
-	SFF8024_ID_SFF_8472 = 2,
-	SFF8024_ID_SFP = 3,
-	SFF8024_ID_DWDM_SFP = 11,
-	SFF8024_ID_QSFP_8438 = 12,
-	SFF8024_ID_QSFP_8436_8636 = 13,
-	SFF8024_ID_QSFP28_8636 = 17,
-	SFF8024_ENCODING_UNSPEC = 0,
-	SFF8024_ENCODING_8B10B = 1,
-	SFF8024_ENCODING_4B5B = 2,
-	SFF8024_ENCODING_NRZ = 3,
-	SFF8024_ENCODING_8472_MANCHESTER = 4,
-	SFF8024_ENCODING_8472_SONET = 5,
-	SFF8024_ENCODING_8472_64B66B = 6,
-	SFF8024_ENCODING_8436_MANCHESTER = 6,
-	SFF8024_ENCODING_8436_SONET = 4,
-	SFF8024_ENCODING_8436_64B66B = 5,
-	SFF8024_ENCODING_256B257B = 7,
-	SFF8024_ENCODING_PAM4 = 8,
-	SFF8024_CONNECTOR_UNSPEC = 0,
-	SFF8024_CONNECTOR_SC = 1,
-	SFF8024_CONNECTOR_FIBERJACK = 6,
-	SFF8024_CONNECTOR_LC = 7,
-	SFF8024_CONNECTOR_MT_RJ = 8,
-	SFF8024_CONNECTOR_MU = 9,
-	SFF8024_CONNECTOR_SG = 10,
-	SFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,
-	SFF8024_CONNECTOR_MPO_1X12 = 12,
-	SFF8024_CONNECTOR_MPO_2X16 = 13,
-	SFF8024_CONNECTOR_HSSDC_II = 32,
-	SFF8024_CONNECTOR_COPPER_PIGTAIL = 33,
-	SFF8024_CONNECTOR_RJ45 = 34,
-	SFF8024_CONNECTOR_NOSEPARATE = 35,
-	SFF8024_CONNECTOR_MXC_2X16 = 36,
-	SFF8024_ECC_UNSPEC = 0,
-	SFF8024_ECC_100G_25GAUI_C2M_AOC = 1,
-	SFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,
-	SFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,
-	SFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,
-	SFF8024_ECC_100GBASE_SR10 = 5,
-	SFF8024_ECC_100GBASE_CR4 = 11,
-	SFF8024_ECC_25GBASE_CR_S = 12,
-	SFF8024_ECC_25GBASE_CR_N = 13,
-	SFF8024_ECC_10GBASE_T_SFI = 22,
-	SFF8024_ECC_10GBASE_T_SR = 28,
-	SFF8024_ECC_5GBASE_T = 29,
-	SFF8024_ECC_2_5GBASE_T = 30,
-};
-
-struct sfp_socket_ops {
-	void (*attach)(struct sfp *);
-	void (*detach)(struct sfp *);
-	void (*start)(struct sfp *);
-	void (*stop)(struct sfp *);
-	int (*module_info)(struct sfp *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);
-};
-
-struct sfp_quirk {
-	const char *vendor;
-	const char *part;
-	void (*modes)(const struct sfp_eeprom_id *, long unsigned int *);
-};
-
-struct mdio_device_id {
-	__u32 phy_id;
-	__u32 phy_id_mask;
-};
-
-enum {
-	MDIO_AN_C22 = 65504,
-};
-
-struct fixed_mdio_bus {
-	struct mii_bus *mii_bus;
-	struct list_head phys;
-};
-
-struct fixed_phy {
-	int addr;
-	struct phy_device *phydev;
-	struct fixed_phy_status status;
-	bool no_carrier;
-	int (*link_update)(struct net_device *, struct fixed_phy_status *);
-	struct list_head node;
-	struct gpio_desc *link_gpiod;
-};
-
-struct flow_dissector {
-	unsigned int used_keys;
-	short unsigned int offset[28];
-};
-
-struct flow_match {
-	struct flow_dissector *dissector;
-	void *mask;
-	void *key;
-};
-
-enum flow_action_id {
-	FLOW_ACTION_ACCEPT = 0,
-	FLOW_ACTION_DROP = 1,
-	FLOW_ACTION_TRAP = 2,
-	FLOW_ACTION_GOTO = 3,
-	FLOW_ACTION_REDIRECT = 4,
-	FLOW_ACTION_MIRRED = 5,
-	FLOW_ACTION_REDIRECT_INGRESS = 6,
-	FLOW_ACTION_MIRRED_INGRESS = 7,
-	FLOW_ACTION_VLAN_PUSH = 8,
-	FLOW_ACTION_VLAN_POP = 9,
-	FLOW_ACTION_VLAN_MANGLE = 10,
-	FLOW_ACTION_TUNNEL_ENCAP = 11,
-	FLOW_ACTION_TUNNEL_DECAP = 12,
-	FLOW_ACTION_MANGLE = 13,
-	FLOW_ACTION_ADD = 14,
-	FLOW_ACTION_CSUM = 15,
-	FLOW_ACTION_MARK = 16,
-	FLOW_ACTION_PTYPE = 17,
-	FLOW_ACTION_PRIORITY = 18,
-	FLOW_ACTION_WAKE = 19,
-	FLOW_ACTION_QUEUE = 20,
-	FLOW_ACTION_SAMPLE = 21,
-	FLOW_ACTION_POLICE = 22,
-	FLOW_ACTION_CT = 23,
-	FLOW_ACTION_CT_METADATA = 24,
-	FLOW_ACTION_MPLS_PUSH = 25,
-	FLOW_ACTION_MPLS_POP = 26,
-	FLOW_ACTION_MPLS_MANGLE = 27,
-	FLOW_ACTION_GATE = 28,
-	NUM_FLOW_ACTIONS = 29,
-};
-
-enum flow_action_hw_stats {
-	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
-	FLOW_ACTION_HW_STATS_DELAYED = 2,
-	FLOW_ACTION_HW_STATS_ANY = 3,
-	FLOW_ACTION_HW_STATS_DISABLED = 4,
-	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
-};
-
-typedef void (*action_destr)(void *);
-
-enum flow_action_mangle_base {
-	FLOW_ACT_MANGLE_UNSPEC = 0,
-	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
-	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
-	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
-};
-
-struct nf_flowtable;
-
-struct ip_tunnel_info;
-
-struct psample_group;
-
-struct action_gate_entry;
-
-struct flow_action_cookie;
-
-struct flow_action_entry {
-	enum flow_action_id id;
-	enum flow_action_hw_stats hw_stats;
-	action_destr destructor;
-	void *destructor_priv;
-	union {
-		u32 chain_index;
-		struct net_device *dev;
-		struct {
-			u16 vid;
-			__be16 proto;
-			u8 prio;
-		} vlan;
-		struct {
-			enum flow_action_mangle_base htype;
-			u32 offset;
-			u32 mask;
-			u32 val;
-		} mangle;
-		struct ip_tunnel_info *tunnel;
-		u32 csum_flags;
-		u32 mark;
-		u16 ptype;
-		u32 priority;
-		struct {
-			u32 ctx;
-			u32 index;
-			u8 vf;
-		} queue;
-		struct {
-			struct psample_group *psample_group;
-			u32 rate;
-			u32 trunc_size;
-			bool truncate;
-		} sample;
-		struct {
-			u32 index;
-			u32 burst;
-			u64 rate_bytes_ps;
-			u32 mtu;
-		} police;
-		struct {
-			int action;
-			u16 zone;
-			struct nf_flowtable *flow_table;
-		} ct;
-		struct {
-			long unsigned int cookie;
-			u32 mark;
-			u32 labels[4];
-		} ct_metadata;
-		struct {
-			u32 label;
-			__be16 proto;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_push;
-		struct {
-			__be16 proto;
-		} mpls_pop;
-		struct {
-			u32 label;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_mangle;
-		struct {
-			u32 index;
-			s32 prio;
-			u64 basetime;
-			u64 cycletime;
-			u64 cycletimeext;
-			u32 num_entries;
-			struct action_gate_entry *entries;
-		} gate;
-	};
-	struct flow_action_cookie *cookie;
-};
-
-struct flow_action {
-	unsigned int num_entries;
-	struct flow_action_entry entries[0];
-};
-
-struct flow_rule {
-	struct flow_match match;
-	struct flow_action action;
-};
-
-struct dsa_chip_data {
-	struct device *host_dev;
-	int sw_addr;
-	struct device *netdev[12];
-	int eeprom_len;
-	struct device_node *of_node;
-	char *port_names[12];
-	struct device_node *port_dn[12];
-	s8 rtable[4];
-};
-
-struct dsa_platform_data {
-	struct device *netdev;
-	struct net_device *of_netdev;
-	int nr_chips;
-	struct dsa_chip_data *chip;
-};
-
-struct phylink_link_state {
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	unsigned int link: 1;
-	unsigned int an_enabled: 1;
-	unsigned int an_complete: 1;
-};
-
-enum phylink_op_type {
-	PHYLINK_NETDEV = 0,
-	PHYLINK_DEV = 1,
-};
-
-struct phylink_config {
-	struct device *dev;
-	enum phylink_op_type type;
-	bool pcs_poll;
-	bool poll_fixed_state;
-	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
-};
-
-enum devlink_port_type {
-	DEVLINK_PORT_TYPE_NOTSET = 0,
-	DEVLINK_PORT_TYPE_AUTO = 1,
-	DEVLINK_PORT_TYPE_ETH = 2,
-	DEVLINK_PORT_TYPE_IB = 3,
-};
-
-enum devlink_port_flavour {
-	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
-	DEVLINK_PORT_FLAVOUR_CPU = 1,
-	DEVLINK_PORT_FLAVOUR_DSA = 2,
-	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
-	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
-	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
-	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
-};
-
-struct devlink_port_phys_attrs {
-	u32 port_number;
-	u32 split_subport_number;
-};
-
-struct devlink_port_pci_pf_attrs {
-	u32 controller;
-	u16 pf;
-	u8 external: 1;
-};
-
-struct devlink_port_pci_vf_attrs {
-	u32 controller;
-	u16 pf;
-	u16 vf;
-	u8 external: 1;
-};
-
-struct devlink_port_attrs {
-	u8 split: 1;
-	u8 splittable: 1;
-	u32 lanes;
-	enum devlink_port_flavour flavour;
-	struct netdev_phys_item_id switch_id;
-	union {
-		struct devlink_port_phys_attrs phys;
-		struct devlink_port_pci_pf_attrs pci_pf;
-		struct devlink_port_pci_vf_attrs pci_vf;
-	};
-};
-
-struct devlink;
-
-struct devlink_port {
-	struct list_head list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct devlink *devlink;
-	unsigned int index;
-	bool registered;
-	spinlock_t type_lock;
-	enum devlink_port_type type;
-	enum devlink_port_type desired_type;
-	void *type_dev;
-	struct devlink_port_attrs attrs;
-	u8 attrs_set: 1;
-	u8 switch_port: 1;
-	struct delayed_work type_warn_dw;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-};
-
-struct dsa_device_ops;
-
-struct dsa_switch_tree;
-
-struct packet_type;
-
-struct dsa_switch;
-
-struct dsa_netdevice_ops;
-
-struct dsa_port {
-	union {
-		struct net_device *master;
-		struct net_device *slave;
-	};
-	const struct dsa_device_ops *tag_ops;
-	struct dsa_switch_tree *dst;
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	enum {
-		DSA_PORT_TYPE_UNUSED = 0,
-		DSA_PORT_TYPE_CPU = 1,
-		DSA_PORT_TYPE_DSA = 2,
-		DSA_PORT_TYPE_USER = 3,
-	} type;
-	struct dsa_switch *ds;
-	unsigned int index;
-	const char *name;
-	struct dsa_port *cpu_dp;
-	const char *mac;
-	struct device_node *dn;
-	unsigned int ageing_time;
-	bool vlan_filtering;
-	u8 stp_state;
-	struct net_device *bridge_dev;
-	struct devlink_port devlink_port;
-	bool devlink_port_setup;
-	struct phylink *pl;
-	struct phylink_config pl_config;
-	struct list_head list;
-	void *priv;
-	const struct ethtool_ops *orig_ethtool_ops;
-	const struct dsa_netdevice_ops *netdev_ops;
-	bool setup;
-};
-
-struct packet_type {
-	__be16 type;
-	bool ignore_outgoing;
-	struct net_device *dev;
-	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
-	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
-	bool (*id_match)(struct packet_type *, struct sock *);
-	void *af_packet_priv;
-	struct list_head list;
-};
-
-struct flow_action_cookie {
-	u32 cookie_len;
-	u8 cookie[0];
-};
-
-struct flow_stats {
-	u64 pkts;
-	u64 bytes;
-	u64 drops;
-	u64 lastused;
-	enum flow_action_hw_stats used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-enum flow_cls_command {
-	FLOW_CLS_REPLACE = 0,
-	FLOW_CLS_DESTROY = 1,
-	FLOW_CLS_STATS = 2,
-	FLOW_CLS_TMPLT_CREATE = 3,
-	FLOW_CLS_TMPLT_DESTROY = 4,
-};
-
-struct flow_cls_common_offload {
-	u32 chain_index;
-	__be16 protocol;
-	u32 prio;
-	struct netlink_ext_ack *extack;
-};
-
-struct flow_cls_offload {
-	struct flow_cls_common_offload common;
-	enum flow_cls_command command;
-	long unsigned int cookie;
-	struct flow_rule *rule;
-	struct flow_stats stats;
-	u32 classid;
-};
-
-enum devlink_sb_pool_type {
-	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
-	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
-};
-
-enum devlink_sb_threshold_type {
-	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
-	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
-};
-
-enum devlink_eswitch_encap_mode {
-	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
-	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
-};
-
-enum devlink_param_cmode {
-	DEVLINK_PARAM_CMODE_RUNTIME = 0,
-	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
-	DEVLINK_PARAM_CMODE_PERMANENT = 2,
-	__DEVLINK_PARAM_CMODE_MAX = 3,
-	DEVLINK_PARAM_CMODE_MAX = 2,
-};
-
-enum devlink_trap_action {
-	DEVLINK_TRAP_ACTION_DROP = 0,
-	DEVLINK_TRAP_ACTION_TRAP = 1,
-	DEVLINK_TRAP_ACTION_MIRROR = 2,
-};
-
-enum devlink_trap_type {
-	DEVLINK_TRAP_TYPE_DROP = 0,
-	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
-	DEVLINK_TRAP_TYPE_CONTROL = 2,
-};
-
-enum devlink_reload_action {
-	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
-	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
-	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
-	__DEVLINK_RELOAD_ACTION_MAX = 3,
-	DEVLINK_RELOAD_ACTION_MAX = 2,
-};
-
-enum devlink_reload_limit {
-	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
-	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
-	__DEVLINK_RELOAD_LIMIT_MAX = 2,
-	DEVLINK_RELOAD_LIMIT_MAX = 1,
-};
-
-enum devlink_dpipe_field_mapping_type {
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
-};
-
-struct devlink_dev_stats {
-	u32 reload_stats[6];
-	u32 remote_reload_stats[6];
-};
-
-struct devlink_dpipe_headers;
-
-struct devlink_ops;
-
-struct devlink {
-	struct list_head list;
-	struct list_head port_list;
-	struct list_head sb_list;
-	struct list_head dpipe_table_list;
-	struct list_head resource_list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-	struct devlink_dpipe_headers *dpipe_headers;
-	struct list_head trap_list;
-	struct list_head trap_group_list;
-	struct list_head trap_policer_list;
-	const struct devlink_ops *ops;
-	struct xarray snapshot_ids;
-	struct devlink_dev_stats stats;
-	struct device *dev;
-	possible_net_t _net;
-	struct mutex lock;
-	u8 reload_failed: 1;
-	u8 reload_enabled: 1;
-	u8 registered: 1;
-	long: 61;
-	long: 64;
-	char priv[0];
-};
-
-struct devlink_dpipe_header;
-
-struct devlink_dpipe_headers {
-	struct devlink_dpipe_header **headers;
-	unsigned int headers_count;
-};
-
-struct devlink_sb_pool_info;
-
-struct devlink_info_req;
-
-struct devlink_flash_update_params;
-
-struct devlink_trap;
-
-struct devlink_trap_group;
-
-struct devlink_trap_policer;
-
-struct devlink_ops {
-	u32 supported_flash_update_params;
-	long unsigned int reload_actions;
-	long unsigned int reload_limits;
-	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
-	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
-	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
-	int (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);
-	int (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);
-	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
-	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
-	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
-	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
-	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
-	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
-	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
-	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
-	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
-	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
-	int (*eswitch_mode_get)(struct devlink *, u16 *);
-	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
-	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
-	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
-	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
-	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
-	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
-	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
-	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
-	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
-	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
-	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
-	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
-	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
-	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
-	int (*port_function_hw_addr_get)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
-	int (*port_function_hw_addr_set)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
-};
-
-struct devlink_sb_pool_info {
-	enum devlink_sb_pool_type pool_type;
-	u32 size;
-	enum devlink_sb_threshold_type threshold_type;
-	u32 cell_size;
-};
-
-struct devlink_dpipe_field {
-	const char *name;
-	unsigned int id;
-	unsigned int bitwidth;
-	enum devlink_dpipe_field_mapping_type mapping_type;
-};
-
-struct devlink_dpipe_header {
-	const char *name;
-	unsigned int id;
-	struct devlink_dpipe_field *fields;
-	unsigned int fields_count;
-	bool global;
-};
-
-union devlink_param_value {
-	u8 vu8;
-	u16 vu16;
-	u32 vu32;
-	char vstr[32];
-	bool vbool;
-};
-
-struct devlink_param_gset_ctx {
-	union devlink_param_value val;
-	enum devlink_param_cmode cmode;
-};
-
-struct devlink_flash_update_params {
-	const char *file_name;
-	const char *component;
-	u32 overwrite_mask;
-};
-
-struct devlink_trap_policer {
-	u32 id;
-	u64 init_rate;
-	u64 init_burst;
-	u64 max_rate;
-	u64 min_rate;
-	u64 max_burst;
-	u64 min_burst;
-};
-
-struct devlink_trap_group {
-	const char *name;
-	u16 id;
-	bool generic;
-	u32 init_policer_id;
-};
-
-struct devlink_trap {
-	enum devlink_trap_type type;
-	enum devlink_trap_action init_action;
-	bool generic;
-	u16 id;
-	const char *name;
-	u16 init_group_id;
-	u32 metadata_cap;
-};
-
-struct switchdev_trans {
-	bool ph_prepare;
-};
-
-enum switchdev_obj_id {
-	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
-	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
-	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
-	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
-	SWITCHDEV_OBJ_ID_MRP = 4,
-	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
-	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
-	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
-	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
-	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
-	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
-};
-
-struct switchdev_obj {
-	struct net_device *orig_dev;
-	enum switchdev_obj_id id;
+	struct dentry *debugfs_dir;
 	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
+	struct mutex err_lock;
+	int log_index[2];
 };
 
-struct switchdev_obj_port_vlan {
-	struct switchdev_obj obj;
-	u16 flags;
-	u16 vid_begin;
-	u16 vid_end;
+enum log_ent_request {
+	LOG_NEW_ENT = 0,
+	LOG_OLD_ENT = 1,
 };
 
-struct switchdev_obj_port_mdb {
-	struct switchdev_obj obj;
-	unsigned char addr[6];
-	u16 vid;
+struct ahci_sg {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 reserved;
+	__le32 flags_size;
 };
 
-enum dsa_tag_protocol {
-	DSA_TAG_PROTO_NONE = 0,
-	DSA_TAG_PROTO_BRCM = 1,
-	DSA_TAG_PROTO_BRCM_PREPEND = 2,
-	DSA_TAG_PROTO_DSA = 3,
-	DSA_TAG_PROTO_EDSA = 4,
-	DSA_TAG_PROTO_GSWIP = 5,
-	DSA_TAG_PROTO_KSZ9477 = 6,
-	DSA_TAG_PROTO_KSZ9893 = 7,
-	DSA_TAG_PROTO_LAN9303 = 8,
-	DSA_TAG_PROTO_MTK = 9,
-	DSA_TAG_PROTO_QCA = 10,
-	DSA_TAG_PROTO_TRAILER = 11,
-	DSA_TAG_PROTO_8021Q = 12,
-	DSA_TAG_PROTO_SJA1105 = 13,
-	DSA_TAG_PROTO_KSZ8795 = 14,
-	DSA_TAG_PROTO_OCELOT = 15,
-	DSA_TAG_PROTO_AR9331 = 16,
-	DSA_TAG_PROTO_RTL4_A = 17,
+struct gem_txd {
+	__le64 control_word;
+	__le64 buffer;
 };
 
-struct dsa_device_ops {
-	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	unsigned int overhead;
-	const char *name;
-	enum dsa_tag_protocol proto;
-	bool promisc_on_master;
-	bool tail_tag;
+struct gem_rxd {
+	__le64 status_word;
+	__le64 buffer;
 };
 
-struct dsa_netdevice_ops {
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+struct gem_init_block {
+	struct gem_txd txd[128];
+	struct gem_rxd rxd[128];
 };
 
-struct dsa_switch_tree {
-	struct list_head list;
-	struct raw_notifier_head nh;
-	unsigned int index;
-	struct kref refcount;
-	bool setup;
-	struct dsa_platform_data *pd;
-	struct list_head ports;
-	struct list_head rtable;
+enum gem_phy_type {
+	phy_mii_mdio0 = 0,
+	phy_mii_mdio1 = 1,
+	phy_serialink = 2,
+	phy_serdes = 3,
 };
 
-struct dsa_mall_mirror_tc_entry {
-	u8 to_local_port;
-	bool ingress;
+enum link_state {
+	link_down = 0,
+	link_aneg = 1,
+	link_force_try = 2,
+	link_force_ret = 3,
+	link_force_ok = 4,
+	link_up = 5,
 };
 
-struct dsa_mall_policer_tc_entry {
-	u32 burst;
-	u64 rate_bytes_per_sec;
-};
-
-struct dsa_switch_ops;
-
-struct dsa_switch {
-	bool setup;
-	struct device *dev;
-	struct dsa_switch_tree *dst;
-	unsigned int index;
-	struct notifier_block nb;
-	void *priv;
-	struct dsa_chip_data *cd;
-	const struct dsa_switch_ops *ops;
-	u32 phys_mii_mask;
-	struct mii_bus *slave_mii_bus;
-	unsigned int ageing_time_min;
-	unsigned int ageing_time_max;
-	struct devlink *devlink;
-	unsigned int num_tx_queues;
-	bool vlan_filtering_is_global;
-	bool configure_vlan_while_not_filtering;
-	bool untag_bridge_pvid;
-	bool vlan_filtering;
-	bool pcs_poll;
-	bool mtu_enforcement_ingress;
-	size_t num_ports;
-};
-
-struct fixed_phy_status___2;
-
-typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
-
-struct dsa_switch_ops {
-	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
-	int (*setup)(struct dsa_switch *);
-	void (*teardown)(struct dsa_switch *);
-	u32 (*get_phy_flags)(struct dsa_switch *, int);
-	int (*phy_read)(struct dsa_switch *, int, int);
-	int (*phy_write)(struct dsa_switch *, int, int, u16);
-	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
-	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);
-	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
-	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
-	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
-	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
-	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
-	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
-	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
-	int (*get_sset_count)(struct dsa_switch *, int, int);
-	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
-	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
-	int (*suspend)(struct dsa_switch *);
-	int (*resume)(struct dsa_switch *);
-	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
-	void (*port_disable)(struct dsa_switch *, int);
-	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_eeprom_len)(struct dsa_switch *);
-	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*get_regs_len)(struct dsa_switch *, int);
-	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
-	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
-	int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
-	void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
-	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
-	void (*port_fast_age)(struct dsa_switch *, int);
-	int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
-	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);
-	int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
-	int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
-	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
-	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
-	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
-	void (*port_policer_del)(struct dsa_switch *, int);
-	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
-	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
-	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
-	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
-	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
-	bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*port_change_mtu)(struct dsa_switch *, int, int);
-	int (*port_max_mtu)(struct dsa_switch *, int);
-};
-
-struct dsa_loop_pdata {
-	struct dsa_chip_data cd;
-	const char *name;
-	unsigned int enabled_ports;
-	const char *netdev;
-};
-
-struct ptp_clock_time {
-	__s64 sec;
-	__u32 nsec;
-	__u32 reserved;
-};
-
-struct ptp_extts_request {
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-struct ptp_perout_request {
-	union {
-		struct ptp_clock_time start;
-		struct ptp_clock_time phase;
-	};
-	struct ptp_clock_time period;
-	unsigned int index;
-	unsigned int flags;
-	union {
-		struct ptp_clock_time on;
-		unsigned int rsv[4];
-	};
-};
-
-enum ptp_pin_function {
-	PTP_PF_NONE = 0,
-	PTP_PF_EXTTS = 1,
-	PTP_PF_PEROUT = 2,
-	PTP_PF_PHYSYNC = 3,
-};
-
-struct ptp_pin_desc {
-	char name[64];
-	unsigned int index;
-	unsigned int func;
-	unsigned int chan;
-	unsigned int rsv[5];
-};
-
-struct ptp_clock_request {
-	enum {
-		PTP_CLK_REQ_EXTTS = 0,
-		PTP_CLK_REQ_PEROUT = 1,
-		PTP_CLK_REQ_PPS = 2,
-	} type;
-	union {
-		struct ptp_extts_request extts;
-		struct ptp_perout_request perout;
-	};
-};
-
-struct ptp_clock_info {
-	struct module *owner;
-	char name[16];
-	s32 max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int n_pins;
-	int pps;
-	struct ptp_pin_desc *pin_config;
-	int (*adjfine)(struct ptp_clock_info *, long int);
-	int (*adjfreq)(struct ptp_clock_info *, s32);
-	int (*adjphase)(struct ptp_clock_info *, s32);
-	int (*adjtime)(struct ptp_clock_info *, s64);
-	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
-	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
-	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
-	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
-	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
-	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
-	long int (*do_aux_work)(struct ptp_clock_info *);
-};
-
-struct ptp_clock;
-
-struct cavium_ptp {
+struct gem {
+	void *regs;
+	int rx_new;
+	int rx_old;
+	int tx_new;
+	int tx_old;
+	unsigned int has_wol: 1;
+	unsigned int asleep_wol: 1;
+	int cell_enabled;
+	u32 msg_enable;
+	u32 status;
+	struct napi_struct napi;
+	int tx_fifo_sz;
+	int rx_fifo_sz;
+	int rx_pause_off;
+	int rx_pause_on;
+	int rx_buf_sz;
+	u64 pause_entered;
+	u16 pause_last_time_recvd;
+	u32 mac_rx_cfg;
+	u32 swrst_base;
+	int want_autoneg;
+	int last_forced_speed;
+	enum link_state lstate;
+	struct timer_list link_timer;
+	int timer_ticks;
+	int wake_on_lan;
+	struct work_struct reset_task;
+	volatile int reset_task_pending;
+	enum gem_phy_type phy_type;
+	struct mii_phy phy_mii;
+	int mii_phy_addr;
+	struct gem_init_block *init_block;
+	struct sk_buff *rx_skbs[128];
+	struct sk_buff *tx_skbs[128];
+	dma_addr_t gblock_dvma;
 	struct pci_dev *pdev;
-	spinlock_t spin_lock;
-	struct cyclecounter cycle_counter;
-	struct timecounter time_counter;
-	void *reg_base;
-	u32 clock_rate;
-	struct ptp_clock_info ptp_info;
-	struct ptp_clock *ptp_clock;
+	struct net_device *dev;
 };
 
-struct mlxfw_dev_ops;
-
-struct mlxfw_dev {
-	const struct mlxfw_dev_ops *ops;
-	const char *psid;
-	u16 psid_size;
-	struct devlink *devlink;
-};
-
-enum mlxfw_fsm_state {
-	MLXFW_FSM_STATE_IDLE = 0,
-	MLXFW_FSM_STATE_LOCKED = 1,
-	MLXFW_FSM_STATE_INITIALIZE = 2,
-	MLXFW_FSM_STATE_DOWNLOAD = 3,
-	MLXFW_FSM_STATE_VERIFY = 4,
-	MLXFW_FSM_STATE_APPLY = 5,
-	MLXFW_FSM_STATE_ACTIVATE = 6,
-};
-
-enum mlxfw_fsm_state_err {
-	MLXFW_FSM_STATE_ERR_OK = 0,
-	MLXFW_FSM_STATE_ERR_ERROR = 1,
-	MLXFW_FSM_STATE_ERR_REJECTED_DIGEST_ERR = 2,
-	MLXFW_FSM_STATE_ERR_REJECTED_NOT_APPLICABLE = 3,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNKNOWN_KEY = 4,
-	MLXFW_FSM_STATE_ERR_REJECTED_AUTH_FAILED = 5,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNSIGNED = 6,
-	MLXFW_FSM_STATE_ERR_REJECTED_KEY_NOT_APPLICABLE = 7,
-	MLXFW_FSM_STATE_ERR_REJECTED_BAD_FORMAT = 8,
-	MLXFW_FSM_STATE_ERR_BLOCKED_PENDING_RESET = 9,
-	MLXFW_FSM_STATE_ERR_MAX = 10,
-};
-
-struct mlxfw_dev_ops {
-	int (*component_query)(struct mlxfw_dev *, u16, u32 *, u8 *, u16 *);
-	int (*fsm_lock)(struct mlxfw_dev *, u32 *);
-	int (*fsm_component_update)(struct mlxfw_dev *, u32, u16, u32);
-	int (*fsm_block_download)(struct mlxfw_dev *, u32, u8 *, u16, u32);
-	int (*fsm_component_verify)(struct mlxfw_dev *, u32, u16);
-	int (*fsm_activate)(struct mlxfw_dev *, u32);
-	int (*fsm_reactivate)(struct mlxfw_dev *, u8 *);
-	int (*fsm_query_state)(struct mlxfw_dev *, u32, enum mlxfw_fsm_state *, enum mlxfw_fsm_state_err *);
-	void (*fsm_cancel)(struct mlxfw_dev *, u32);
-	void (*fsm_release)(struct mlxfw_dev *, u32);
-};
-
-enum mlxfw_fsm_reactivate_status {
-	MLXFW_FSM_REACTIVATE_STATUS_OK = 0,
-	MLXFW_FSM_REACTIVATE_STATUS_BUSY = 1,
-	MLXFW_FSM_REACTIVATE_STATUS_PROHIBITED_FW_VER_ERR = 2,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_COPY_FAILED = 3,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_ERASE_FAILED = 4,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_RESTORE_FAILED = 5,
-	MLXFW_FSM_REACTIVATE_STATUS_CANDIDATE_FW_DEACTIVATION_FAILED = 6,
-	MLXFW_FSM_REACTIVATE_STATUS_FW_ALREADY_ACTIVATED = 7,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_DEVICE_RESET_REQUIRED = 8,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_FW_PROGRAMMING_NEEDED = 9,
-	MLXFW_FSM_REACTIVATE_STATUS_MAX = 10,
-};
-
-struct mlxfw_mfa2_component {
-	u16 index;
-	u32 data_size;
-	u8 *data;
-};
-
-struct mlxfw_mfa2_file;
-
-struct mlxfw_mfa2_tlv;
-
-struct mlxfw_mfa2_file___2 {
-	const struct firmware *fw;
-	const struct mlxfw_mfa2_tlv *first_dev;
-	u16 dev_count;
-	const struct mlxfw_mfa2_tlv *first_component;
-	u16 component_count;
-	const void *cb;
-	u32 cb_archive_size;
-};
-
-struct mlxfw_mfa2_tlv {
-	u8 version;
-	u8 type;
-	__be16 len;
-	u8 data[0];
-};
-
-enum mlxfw_mfa2_tlv_type {
-	MLXFW_MFA2_TLV_MULTI_PART = 1,
-	MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR = 2,
-	MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR = 4,
-	MLXFW_MFA2_TLV_COMPONENT_PTR = 34,
-	MLXFW_MFA2_TLV_PSID = 42,
-};
-
-struct mlxfw_mfa2_tlv_multi {
-	__be16 num_extensions;
-	__be16 total_len;
-};
-
-struct mlxfw_mfa2_tlv_package_descriptor {
-	__be16 num_components;
-	__be16 num_devices;
-	__be32 cb_offset;
-	__be32 cb_archive_size;
-	__be32 cb_size_h;
-	__be32 cb_size_l;
-	u8 padding[3];
-	u8 cv_compression;
-	__be32 user_data_offset;
-};
-
-struct mlxfw_mfa2_tlv_psid {
-	u8 psid[0];
-};
-
-struct mlxfw_mfa2_tlv_component_ptr {
-	__be16 storage_id;
-	__be16 component_index;
-	__be32 storage_address;
-};
-
-struct mlxfw_mfa2_tlv_component_descriptor {
-	__be16 pldm_classification;
-	__be16 identifier;
-	__be32 cb_offset_h;
-	__be32 cb_offset_l;
-	__be32 size;
-};
-
-struct mlxfw_mfa2_comp_data {
-	struct mlxfw_mfa2_component comp;
-	u8 buff[0];
-};
-
-struct wl1251_platform_data {
-	int power_gpio;
-	int irq;
-	bool use_eeprom;
-};
-
-struct extcon_dev;
-
-enum usb_device_speed {
-	USB_SPEED_UNKNOWN = 0,
-	USB_SPEED_LOW = 1,
-	USB_SPEED_FULL = 2,
-	USB_SPEED_HIGH = 3,
-	USB_SPEED_WIRELESS = 4,
-	USB_SPEED_SUPER = 5,
-	USB_SPEED_SUPER_PLUS = 6,
-};
-
-enum usb_charger_type {
-	UNKNOWN_TYPE = 0,
-	SDP_TYPE = 1,
-	DCP_TYPE = 2,
-	CDP_TYPE = 3,
-	ACA_TYPE = 4,
-};
-
-enum usb_charger_state {
-	USB_CHARGER_DEFAULT = 0,
-	USB_CHARGER_PRESENT = 1,
-	USB_CHARGER_ABSENT = 2,
-};
-
-enum usb_phy_events {
-	USB_EVENT_NONE = 0,
-	USB_EVENT_VBUS = 1,
-	USB_EVENT_ID = 2,
-	USB_EVENT_CHARGER = 3,
-	USB_EVENT_ENUMERATED = 4,
-};
-
-enum usb_phy_type {
-	USB_PHY_TYPE_UNDEFINED = 0,
-	USB_PHY_TYPE_USB2 = 1,
-	USB_PHY_TYPE_USB3 = 2,
-};
-
-struct usb_phy;
-
-struct usb_phy_io_ops {
-	int (*read)(struct usb_phy *, u32);
-	int (*write)(struct usb_phy *, u32, u32);
-};
-
-struct usb_otg;
-
-struct usb_charger_current {
-	unsigned int sdp_min;
-	unsigned int sdp_max;
-	unsigned int dcp_min;
-	unsigned int dcp_max;
-	unsigned int cdp_min;
-	unsigned int cdp_max;
-	unsigned int aca_min;
-	unsigned int aca_max;
-};
-
-struct usb_phy {
-	struct device *dev;
-	const char *label;
-	unsigned int flags;
-	enum usb_phy_type type;
-	enum usb_phy_events last_event;
-	struct usb_otg *otg;
-	struct device *io_dev;
-	struct usb_phy_io_ops *io_ops;
-	void *io_priv;
-	struct extcon_dev *edev;
-	struct extcon_dev *id_edev;
-	struct notifier_block vbus_nb;
-	struct notifier_block id_nb;
-	struct notifier_block type_nb;
-	enum usb_charger_type chg_type;
-	enum usb_charger_state chg_state;
-	struct usb_charger_current chg_cur;
-	struct work_struct chg_work;
-	struct atomic_notifier_head notifier;
-	u16 port_status;
-	u16 port_change;
-	struct list_head head;
-	int (*init)(struct usb_phy *);
-	void (*shutdown)(struct usb_phy *);
-	int (*set_vbus)(struct usb_phy *, int);
-	int (*set_power)(struct usb_phy *, unsigned int);
-	int (*set_suspend)(struct usb_phy *, int);
-	int (*set_wakeup)(struct usb_phy *, bool);
-	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
-	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
-	enum usb_charger_type (*charger_detect)(struct usb_phy *);
-};
-
-struct phy_devm {
-	struct usb_phy *phy;
-	struct notifier_block *nb;
-};
-
-enum usb_phy_interface {
-	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
-	USBPHY_INTERFACE_MODE_UTMI = 1,
-	USBPHY_INTERFACE_MODE_UTMIW = 2,
-	USBPHY_INTERFACE_MODE_ULPI = 3,
-	USBPHY_INTERFACE_MODE_SERIAL = 4,
-	USBPHY_INTERFACE_MODE_HSIC = 5,
-};
-
-enum amd_chipset_gen {
-	NOT_AMD_CHIPSET = 0,
-	AMD_CHIPSET_SB600 = 1,
-	AMD_CHIPSET_SB700 = 2,
-	AMD_CHIPSET_SB800 = 3,
-	AMD_CHIPSET_HUDSON2 = 4,
-	AMD_CHIPSET_BOLTON = 5,
-	AMD_CHIPSET_YANGTZE = 6,
-	AMD_CHIPSET_TAISHAN = 7,
-	AMD_CHIPSET_UNKNOWN = 8,
-};
-
-struct amd_chipset_type {
-	enum amd_chipset_gen gen;
-	u8 rev;
-};
-
-struct amd_chipset_info {
-	struct pci_dev *nb_dev;
-	struct pci_dev *smbus_dev;
-	int nb_type;
-	struct amd_chipset_type sb_type;
-	int isoc_reqs;
-	int probe_count;
-	bool need_pll_quirk;
-};
-
-struct serio_device_id {
-	__u8 type;
-	__u8 extra;
-	__u8 id;
-	__u8 proto;
-};
-
-struct serio_driver;
-
-struct serio {
-	void *port_data;
-	char name[32];
-	char phys[32];
-	char firmware_id[128];
-	bool manual_bind;
-	struct serio_device_id id;
-	spinlock_t lock;
-	int (*write)(struct serio *, unsigned char);
-	int (*open)(struct serio *);
-	void (*close)(struct serio *);
-	int (*start)(struct serio *);
-	void (*stop)(struct serio *);
-	struct serio *parent;
-	struct list_head child_node;
-	struct list_head children;
-	unsigned int depth;
-	struct serio_driver *drv;
-	struct mutex drv_mutex;
-	struct device dev;
-	struct list_head node;
-	struct mutex *ps2_cmd_mutex;
-};
-
-struct serio_driver {
-	const char *description;
-	const struct serio_device_id *id_table;
-	bool manual_bind;
-	void (*write_wakeup)(struct serio *);
-	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
-	int (*connect)(struct serio *, struct serio_driver *);
-	int (*reconnect)(struct serio *);
-	int (*fast_reconnect)(struct serio *);
-	void (*disconnect)(struct serio *);
-	void (*cleanup)(struct serio *);
-	struct device_driver driver;
-};
-
-enum serio_event_type {
-	SERIO_RESCAN_PORT = 0,
-	SERIO_RECONNECT_PORT = 1,
-	SERIO_RECONNECT_SUBTREE = 2,
-	SERIO_REGISTER_PORT = 3,
-	SERIO_ATTACH_DRIVER = 4,
-};
-
-struct serio_event {
-	enum serio_event_type type;
-	void *object;
-	struct module *owner;
-	struct list_head node;
-};
-
-enum i8042_controller_reset_mode {
-	I8042_RESET_NEVER = 0,
-	I8042_RESET_ALWAYS = 1,
-	I8042_RESET_ON_S2RAM = 2,
-};
-
-struct i8042_port {
-	struct serio *serio;
-	int irq;
-	bool exists;
-	bool driver_bound;
-	signed char mux;
-};
-
-struct ps2dev {
-	struct serio *serio;
-	struct mutex cmd_mutex;
-	wait_queue_head_t wait;
-	long unsigned int flags;
-	u8 cmdbuf[8];
-	u8 cmdcnt;
-	u8 nak;
-};
-
-struct input_mt_slot {
-	int abs[14];
-	unsigned int frame;
-	unsigned int key;
-};
-
-struct input_mt {
-	int trkid;
-	int num_slots;
-	int slot;
-	unsigned int flags;
-	unsigned int frame;
-	int *red;
-	struct input_mt_slot slots[0];
-};
-
-union input_seq_state {
-	struct {
-		short unsigned int pos;
-		bool mutex_acquired;
-	};
-	void *p;
-};
-
-struct input_devres {
-	struct input_dev *input;
-};
-
-struct input_event {
-	__kernel_ulong_t __sec;
-	__kernel_ulong_t __usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct input_event_compat {
-	compat_ulong_t sec;
-	compat_ulong_t usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct ff_periodic_effect_compat {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	compat_uptr_t custom_data;
-};
-
-struct ff_effect_compat {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect_compat periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_mt_pos {
-	s16 x;
-	s16 y;
-};
-
-struct input_dev_poller {
-	void (*poll)(struct input_dev *);
-	unsigned int poll_interval;
-	unsigned int poll_interval_max;
-	unsigned int poll_interval_min;
-	struct input_dev *input;
-	struct delayed_work work;
-};
-
-struct mousedev_hw_data {
-	int dx;
-	int dy;
-	int dz;
-	int x;
-	int y;
-	int abs_event;
-	long unsigned int buttons;
-};
-
-struct mousedev {
-	int open;
-	struct input_handle handle;
-	wait_queue_head_t wait;
-	struct list_head client_list;
-	spinlock_t client_lock;
-	struct mutex mutex;
-	struct device dev;
-	struct cdev cdev;
-	bool exist;
-	struct list_head mixdev_node;
-	bool opened_by_mixdev;
-	struct mousedev_hw_data packet;
-	unsigned int pkt_count;
-	int old_x[4];
-	int old_y[4];
-	int frac_dx;
-	int frac_dy;
-	long unsigned int touch;
-	int (*open_device)(struct mousedev *);
-	void (*close_device)(struct mousedev *);
-};
-
-enum mousedev_emul {
-	MOUSEDEV_EMUL_PS2 = 0,
-	MOUSEDEV_EMUL_IMPS = 1,
-	MOUSEDEV_EMUL_EXPS = 2,
-};
-
-struct mousedev_motion {
-	int dx;
-	int dy;
-	int dz;
-	long unsigned int buttons;
-};
-
-struct mousedev_client {
-	struct fasync_struct *fasync;
-	struct mousedev *mousedev;
-	struct list_head node;
-	struct mousedev_motion packets[16];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t packet_lock;
-	int pos_x;
-	int pos_y;
-	u8 ps2[6];
-	unsigned char ready;
-	unsigned char buffer;
-	unsigned char bufsiz;
-	unsigned char imexseq;
-	unsigned char impsseq;
-	enum mousedev_emul mode;
-	long unsigned int last_buttons;
-};
-
-enum {
-	FRACTION_DENOM = 128,
-};
-
-struct atkbd {
-	struct ps2dev ps2dev;
-	struct input_dev *dev;
-	char name[64];
-	char phys[32];
-	short unsigned int id;
-	short unsigned int keycode[512];
-	long unsigned int force_release_mask[8];
-	unsigned char set;
-	bool translated;
-	bool extra;
-	bool write;
-	bool softrepeat;
-	bool softraw;
-	bool scroll;
-	bool enabled;
-	unsigned char emul;
-	bool resend;
-	bool release;
-	long unsigned int xl_bit;
-	unsigned int last;
-	long unsigned int time;
-	long unsigned int err_count;
-	struct delayed_work event_work;
-	long unsigned int event_jiffies;
-	long unsigned int event_mask;
-	struct mutex mutex;
-	u32 function_row_physmap[24];
-	int num_function_row_keys;
-};
-
-struct touchscreen_properties {
-	unsigned int max_x;
-	unsigned int max_y;
-	bool invert_x;
-	bool invert_y;
-	bool swap_x_y;
-};
-
-struct trace_event_raw_rtc_time_alarm_class {
-	struct trace_entry ent;
-	time64_t secs;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_freq {
-	struct trace_entry ent;
-	int freq;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_state {
-	struct trace_entry ent;
-	int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_alarm_irq_enable {
-	struct trace_entry ent;
-	unsigned int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_offset_class {
-	struct trace_entry ent;
-	long int offset;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_timer_class {
-	struct trace_entry ent;
-	struct rtc_timer *timer;
-	ktime_t expires;
-	ktime_t period;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rtc_time_alarm_class {};
-
-struct trace_event_data_offsets_rtc_irq_set_freq {};
-
-struct trace_event_data_offsets_rtc_irq_set_state {};
-
-struct trace_event_data_offsets_rtc_alarm_irq_enable {};
-
-struct trace_event_data_offsets_rtc_offset_class {};
-
-struct trace_event_data_offsets_rtc_timer_class {};
-
-typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
-
-typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
-
-typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
-
-typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
-
-enum {
-	none = 0,
-	day = 1,
-	month = 2,
-	year = 3,
-};
-
-struct nvmem_cell_info {
-	const char *name;
-	unsigned int offset;
-	unsigned int bytes;
-	unsigned int bit_offset;
-	unsigned int nbits;
-};
-
-typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
-
-typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
-
-enum nvmem_type {
-	NVMEM_TYPE_UNKNOWN = 0,
-	NVMEM_TYPE_EEPROM = 1,
-	NVMEM_TYPE_OTP = 2,
-	NVMEM_TYPE_BATTERY_BACKED = 3,
-};
-
-struct nvmem_config {
-	struct device *dev;
-	const char *name;
-	int id;
-	struct module *owner;
-	struct gpio_desc *wp_gpio;
-	const struct nvmem_cell_info *cells;
-	int ncells;
-	enum nvmem_type type;
-	bool read_only;
-	bool root_only;
-	bool no_of_node;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	int size;
-	int word_size;
-	int stride;
-	void *priv;
-	bool compat;
-	struct device *base_dev;
-};
-
-struct nvmem_device;
-
-struct cmos_rtc_board_info {
-	void (*wake_on)(struct device *);
-	void (*wake_off)(struct device *);
-	u32 flags;
-	int address_space;
-	u8 rtc_day_alarm;
-	u8 rtc_mon_alarm;
-	u8 rtc_century;
-};
-
-struct cmos_rtc {
-	struct rtc_device *rtc;
-	struct device *dev;
-	int irq;
-	struct resource *iomem;
-	time64_t alarm_expires;
-	void (*wake_on)(struct device *);
-	void (*wake_off)(struct device *);
-	u8 enabled_wake;
-	u8 suspend_ctrl;
-	u8 day_alrm;
-	u8 mon_alrm;
-	u8 century;
-	struct rtc_wkalrm saved_wkalrm;
-};
-
-struct i2c_devinfo {
-	struct list_head list;
-	int busnum;
-	struct i2c_board_info board_info;
-};
-
-struct i2c_device_identity {
-	u16 manufacturer_id;
-	u16 part_id;
-	u8 die_revision;
-};
-
-struct i2c_timings {
-	u32 bus_freq_hz;
-	u32 scl_rise_ns;
-	u32 scl_fall_ns;
-	u32 scl_int_delay_ns;
-	u32 sda_fall_ns;
-	u32 sda_hold_ns;
-	u32 digital_filter_width_ns;
-	u32 analog_filter_cutoff_freq_hz;
-};
-
-struct trace_event_raw_i2c_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 nr_msgs;
-	__s16 ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_i2c_write {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_read {};
-
-struct trace_event_data_offsets_i2c_reply {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_result {};
-
-typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
-
-struct i2c_dummy_devres {
-	struct i2c_client *client;
-};
-
-struct class_compat___2;
-
-struct i2c_cmd_arg {
-	unsigned int cmd;
-	void *arg;
-};
-
-struct i2c_smbus_alert_setup {
-	int irq;
-};
-
-struct trace_event_raw_smbus_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 command;
-	__u8 len;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 flags;
-	__u16 addr;
-	__u8 command;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 command;
-	__u8 len;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 read_write;
-	__u8 command;
-	__s16 res;
-	__u32 protocol;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_smbus_write {};
-
-struct trace_event_data_offsets_smbus_read {};
-
-struct trace_event_data_offsets_smbus_reply {};
-
-struct trace_event_data_offsets_smbus_result {};
-
-typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *);
-
-typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int);
-
-typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *, int);
-
-typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
-
-struct dw_i2c_dev {
-	struct device *dev;
-	struct regmap *map;
-	struct regmap *sysmap;
-	void *base;
-	void *ext;
-	struct completion cmd_complete;
-	struct clk *clk;
-	struct clk *pclk;
-	struct reset_control *rst;
-	struct i2c_client *slave;
-	u32 (*get_clk_rate_khz)(struct dw_i2c_dev *);
-	int cmd_err;
-	struct i2c_msg *msgs;
-	int msgs_num;
-	int msg_write_idx;
-	u32 tx_buf_len;
-	u8 *tx_buf;
-	int msg_read_idx;
-	u32 rx_buf_len;
-	u8 *rx_buf;
-	int msg_err;
-	unsigned int status;
-	u32 abort_source;
-	int irq;
-	u32 flags;
-	struct i2c_adapter adapter;
-	u32 functionality;
-	u32 master_cfg;
-	u32 slave_cfg;
-	unsigned int tx_fifo_depth;
-	unsigned int rx_fifo_depth;
-	int rx_outstanding;
-	struct i2c_timings timings;
-	u32 sda_hold_time;
-	u16 ss_hcnt;
-	u16 ss_lcnt;
-	u16 fs_hcnt;
-	u16 fs_lcnt;
-	u16 fp_hcnt;
-	u16 fp_lcnt;
-	u16 hs_hcnt;
-	u16 hs_lcnt;
-	int (*acquire_lock)();
-	void (*release_lock)();
-	bool shared_with_punit;
-	void (*disable)(struct dw_i2c_dev *);
-	void (*disable_int)(struct dw_i2c_dev *);
-	int (*init)(struct dw_i2c_dev *);
-	int (*set_sda_hold_time)(struct dw_i2c_dev *);
-	int mode;
-	struct i2c_bus_recovery_info rinfo;
-	bool suspended;
-};
-
-struct dw_i2c_platform_data {
-	unsigned int i2c_scl_freq;
-};
-
-struct pps_ktime {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_ktime_compat {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_kinfo {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-};
-
-struct pps_kinfo_compat {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime_compat assert_tu;
-	struct pps_ktime_compat clear_tu;
-	int current_mode;
-} __attribute__((packed));
-
-struct pps_kparams {
-	int api_version;
-	int mode;
-	struct pps_ktime assert_off_tu;
-	struct pps_ktime clear_off_tu;
-};
-
-struct pps_fdata {
-	struct pps_kinfo info;
-	struct pps_ktime timeout;
-};
-
-struct pps_fdata_compat {
-	struct pps_kinfo_compat info;
-	struct pps_ktime_compat timeout;
-} __attribute__((packed));
-
-struct pps_bind_args {
-	int tsformat;
-	int edge;
-	int consumer;
-};
-
-struct pps_device;
-
-struct pps_source_info {
-	char name[32];
-	char path[32];
-	int mode;
-	void (*echo)(struct pps_device *, int, void *);
-	struct module *owner;
-	struct device *dev;
-};
-
-struct pps_device {
-	struct pps_source_info info;
-	struct pps_kparams params;
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-	unsigned int last_ev;
-	wait_queue_head_t queue;
-	unsigned int id;
-	const void *lookup_cookie;
-	struct cdev cdev;
-	struct device *dev;
-	struct fasync_struct *async_queue;
-	spinlock_t lock;
-};
-
-struct pps_event_time {
-	struct timespec64 ts_real;
-};
-
-struct ptp_extts_event {
-	struct ptp_clock_time t;
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-enum ptp_clock_events {
-	PTP_CLOCK_ALARM = 0,
-	PTP_CLOCK_EXTTS = 1,
-	PTP_CLOCK_PPS = 2,
-	PTP_CLOCK_PPSUSR = 3,
-};
-
-struct ptp_clock_event {
-	int type;
-	int index;
-	union {
-		u64 timestamp;
-		struct pps_event_time pps_times;
-	};
-};
-
-struct timestamp_event_queue {
-	struct ptp_extts_event buf[128];
-	int head;
-	int tail;
-	spinlock_t lock;
-};
-
-struct ptp_clock___2 {
-	struct posix_clock clock;
-	struct device dev;
-	struct ptp_clock_info *info;
-	dev_t devid;
-	int index;
-	struct pps_device *pps_source;
-	long int dialed_frequency;
-	struct timestamp_event_queue tsevq;
-	struct mutex tsevq_mux;
-	struct mutex pincfg_mux;
-	wait_queue_head_t tsev_wq;
-	int defunct;
-	struct device_attribute *pin_dev_attr;
-	struct attribute **pin_attr;
-	struct attribute_group pin_attr_group;
-	const struct attribute_group *pin_attr_groups[2];
-	struct kthread_worker *kworker;
-	struct kthread_delayed_work aux_work;
+struct ps2pp_info {
+	u8 model;
+	u8 kind;
+	u16 features;
 };
 
 struct ptp_clock_caps {
@@ -106509,1425 +125748,65 @@
 	unsigned int rsv[4];
 };
 
-enum power_supply_property {
-	POWER_SUPPLY_PROP_STATUS = 0,
-	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
-	POWER_SUPPLY_PROP_HEALTH = 2,
-	POWER_SUPPLY_PROP_PRESENT = 3,
-	POWER_SUPPLY_PROP_ONLINE = 4,
-	POWER_SUPPLY_PROP_AUTHENTIC = 5,
-	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
-	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
-	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
-	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
-	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
-	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
-	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
-	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
-	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
-	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
-	POWER_SUPPLY_PROP_POWER_NOW = 20,
-	POWER_SUPPLY_PROP_POWER_AVG = 21,
-	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
-	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
-	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
-	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
-	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
-	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,
-	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,
-	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,
-	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,
-	POWER_SUPPLY_PROP_ENERGY_FULL = 42,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY = 43,
-	POWER_SUPPLY_PROP_ENERGY_NOW = 44,
-	POWER_SUPPLY_PROP_ENERGY_AVG = 45,
-	POWER_SUPPLY_PROP_CAPACITY = 46,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,
-	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 49,
-	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 50,
-	POWER_SUPPLY_PROP_TEMP = 51,
-	POWER_SUPPLY_PROP_TEMP_MAX = 52,
-	POWER_SUPPLY_PROP_TEMP_MIN = 53,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 54,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 55,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT = 56,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 57,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 58,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 59,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 60,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 61,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 62,
-	POWER_SUPPLY_PROP_TYPE = 63,
-	POWER_SUPPLY_PROP_USB_TYPE = 64,
-	POWER_SUPPLY_PROP_SCOPE = 65,
-	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 66,
-	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 67,
-	POWER_SUPPLY_PROP_CALIBRATE = 68,
-	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 69,
-	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 70,
-	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 71,
-	POWER_SUPPLY_PROP_MODEL_NAME = 72,
-	POWER_SUPPLY_PROP_MANUFACTURER = 73,
-	POWER_SUPPLY_PROP_SERIAL_NUMBER = 74,
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
 };
 
-enum power_supply_type {
-	POWER_SUPPLY_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_TYPE_BATTERY = 1,
-	POWER_SUPPLY_TYPE_UPS = 2,
-	POWER_SUPPLY_TYPE_MAINS = 3,
-	POWER_SUPPLY_TYPE_USB = 4,
-	POWER_SUPPLY_TYPE_USB_DCP = 5,
-	POWER_SUPPLY_TYPE_USB_CDP = 6,
-	POWER_SUPPLY_TYPE_USB_ACA = 7,
-	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
-	POWER_SUPPLY_TYPE_USB_PD = 9,
-	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
-	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
-	POWER_SUPPLY_TYPE_WIRELESS = 12,
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[64];
 };
 
-enum power_supply_usb_type {
-	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_USB_TYPE_SDP = 1,
-	POWER_SUPPLY_USB_TYPE_DCP = 2,
-	POWER_SUPPLY_USB_TYPE_CDP = 3,
-	POWER_SUPPLY_USB_TYPE_ACA = 4,
-	POWER_SUPPLY_USB_TYPE_C = 5,
-	POWER_SUPPLY_USB_TYPE_PD = 6,
-	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
-	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
-	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+struct blk_crypto_profile;
+
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
 };
 
-enum power_supply_notifier_events {
-	PSY_EVENT_PROP_CHANGED = 0,
-};
+struct blk_crypto_keyslot;
 
-union power_supply_propval {
-	int intval;
-	const char *strval;
-};
-
-struct power_supply_config {
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	void *drv_data;
-	const struct attribute_group **attr_grp;
-	char **supplied_to;
-	size_t num_supplicants;
-};
-
-struct power_supply;
-
-struct power_supply_desc {
-	const char *name;
-	enum power_supply_type type;
-	const enum power_supply_usb_type *usb_types;
-	size_t num_usb_types;
-	const enum power_supply_property *properties;
-	size_t num_properties;
-	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
-	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
-	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
-	void (*external_power_changed)(struct power_supply *);
-	void (*set_charged)(struct power_supply *);
-	bool no_thermal;
-	int use_for_apm;
-};
-
-struct power_supply {
-	const struct power_supply_desc *desc;
-	char **supplied_to;
-	size_t num_supplicants;
-	char **supplied_from;
-	size_t num_supplies;
-	struct device_node *of_node;
-	void *drv_data;
-	struct device dev;
-	struct work_struct changed_work;
-	struct delayed_work deferred_register_work;
-	spinlock_t changed_lock;
-	bool changed;
-	bool initialized;
-	bool removing;
-	atomic_t use_cnt;
-	struct led_trigger *charging_full_trig;
-	char *charging_full_trig_name;
-	struct led_trigger *charging_trig;
-	char *charging_trig_name;
-	struct led_trigger *full_trig;
-	char *full_trig_name;
-	struct led_trigger *online_trig;
-	char *online_trig_name;
-	struct led_trigger *charging_blink_full_solid_trig;
-	char *charging_blink_full_solid_trig_name;
-};
-
-struct power_supply_battery_ocv_table {
-	int ocv;
-	int capacity;
-};
-
-struct power_supply_resistance_temp_table {
-	int temp;
-	int resistance;
-};
-
-struct power_supply_battery_info {
-	int energy_full_design_uwh;
-	int charge_full_design_uah;
-	int voltage_min_design_uv;
-	int voltage_max_design_uv;
-	int tricklecharge_current_ua;
-	int precharge_current_ua;
-	int precharge_voltage_max_uv;
-	int charge_term_current_ua;
-	int charge_restart_voltage_uv;
-	int overvoltage_limit_uv;
-	int constant_charge_current_max_ua;
-	int constant_charge_voltage_max_uv;
-	int factory_internal_resistance_uohm;
-	int ocv_temp[20];
-	int temp_ambient_alert_min;
-	int temp_ambient_alert_max;
-	int temp_alert_min;
-	int temp_alert_max;
-	int temp_min;
-	int temp_max;
-	struct power_supply_battery_ocv_table *ocv_table[20];
-	int ocv_table_size[20];
-	struct power_supply_resistance_temp_table *resist_table;
-	int resist_table_size;
-};
-
-struct psy_am_i_supplied_data {
-	struct power_supply *psy;
-	unsigned int count;
-};
-
-enum {
-	POWER_SUPPLY_STATUS_UNKNOWN = 0,
-	POWER_SUPPLY_STATUS_CHARGING = 1,
-	POWER_SUPPLY_STATUS_DISCHARGING = 2,
-	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
-	POWER_SUPPLY_STATUS_FULL = 4,
-};
-
-enum {
-	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
-	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
-	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
-	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
-	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
-	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
-	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
-};
-
-enum {
-	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-	POWER_SUPPLY_HEALTH_GOOD = 1,
-	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
-	POWER_SUPPLY_HEALTH_DEAD = 3,
-	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
-	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
-	POWER_SUPPLY_HEALTH_COLD = 6,
-	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
-	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
-	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
-	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
-	POWER_SUPPLY_HEALTH_WARM = 11,
-	POWER_SUPPLY_HEALTH_COOL = 12,
-	POWER_SUPPLY_HEALTH_HOT = 13,
-};
-
-enum {
-	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
-	POWER_SUPPLY_TECHNOLOGY_LION = 2,
-	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
-	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
-	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
-	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
-};
-
-enum {
-	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
-	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
-	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
-	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
-	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
-};
-
-enum {
-	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
-	POWER_SUPPLY_SCOPE_SYSTEM = 1,
-	POWER_SUPPLY_SCOPE_DEVICE = 2,
-};
-
-struct power_supply_attr {
-	const char *prop_name;
-	char attr_name[31];
-	struct device_attribute dev_attr;
-	const char * const *text_values;
-	int text_values_len;
-};
-
-enum data_source {
-	CM_BATTERY_PRESENT = 0,
-	CM_NO_BATTERY = 1,
-	CM_FUEL_GAUGE = 2,
-	CM_CHARGER_STAT = 3,
-};
-
-enum polling_modes {
-	CM_POLL_DISABLE = 0,
-	CM_POLL_ALWAYS = 1,
-	CM_POLL_EXTERNAL_POWER_ONLY = 2,
-	CM_POLL_CHARGING_ONLY = 3,
-};
-
-enum cm_batt_temp {
-	CM_BATT_OK = 0,
-	CM_BATT_OVERHEAT = 1,
-	CM_BATT_COLD = 2,
-};
-
-struct charger_regulator;
-
-struct charger_manager;
-
-struct charger_cable {
-	const char *extcon_name;
-	const char *name;
-	struct extcon_dev *extcon_dev;
-	u64 extcon_type;
-	struct work_struct wq;
-	struct notifier_block nb;
-	bool attached;
-	struct charger_regulator *charger;
-	int min_uA;
-	int max_uA;
-	struct charger_manager *cm;
-};
-
-struct charger_regulator {
-	const char *regulator_name;
-	struct regulator *consumer;
-	int externally_control;
-	struct charger_cable *cables;
-	int num_cables;
-	struct attribute_group attr_grp;
-	struct device_attribute attr_name;
-	struct device_attribute attr_state;
-	struct device_attribute attr_externally_control;
-	struct attribute *attrs[4];
-	struct charger_manager *cm;
-};
-
-struct charger_desc;
-
-struct charger_manager {
-	struct list_head entry;
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int modes_supported[4];
 	struct device *dev;
-	struct charger_desc *desc;
-	bool charger_enabled;
-	int emergency_stop;
-	char psy_name_buf[31];
-	struct power_supply_desc charger_psy_desc;
-	struct power_supply *charger_psy;
-	u64 charging_start_time;
-	u64 charging_end_time;
-	int battery_status;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
 };
 
-struct charger_desc {
-	const char *psy_name;
-	enum polling_modes polling_mode;
-	unsigned int polling_interval_ms;
-	unsigned int fullbatt_vchkdrop_uV;
-	unsigned int fullbatt_uV;
-	unsigned int fullbatt_soc;
-	unsigned int fullbatt_full_capacity;
-	enum data_source battery_present;
-	const char **psy_charger_stat;
-	int num_charger_regulators;
-	struct charger_regulator *charger_regulators;
-	const struct attribute_group **sysfs_groups;
-	const char *psy_fuel_gauge;
-	const char *thermal_zone;
-	int temp_min;
-	int temp_max;
-	int temp_diff;
-	bool measure_battery_temp;
-	u32 charging_max_duration_ms;
-	u32 discharging_max_duration_ms;
-};
-
-struct watchdog_info {
-	__u32 options;
-	__u32 firmware_version;
-	__u8 identity[32];
-};
-
-struct watchdog_device;
-
-struct watchdog_ops {
-	struct module *owner;
-	int (*start)(struct watchdog_device *);
-	int (*stop)(struct watchdog_device *);
-	int (*ping)(struct watchdog_device *);
-	unsigned int (*status)(struct watchdog_device *);
-	int (*set_timeout)(struct watchdog_device *, unsigned int);
-	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
-	unsigned int (*get_timeleft)(struct watchdog_device *);
-	int (*restart)(struct watchdog_device *, long unsigned int, void *);
-	long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);
-};
-
-struct watchdog_governor;
-
-struct watchdog_core_data;
-
-struct watchdog_device {
-	int id;
-	struct device *parent;
-	const struct attribute_group **groups;
-	const struct watchdog_info *info;
-	const struct watchdog_ops *ops;
-	const struct watchdog_governor *gov;
-	unsigned int bootstatus;
-	unsigned int timeout;
-	unsigned int pretimeout;
-	unsigned int min_timeout;
-	unsigned int max_timeout;
-	unsigned int min_hw_heartbeat_ms;
-	unsigned int max_hw_heartbeat_ms;
-	struct notifier_block reboot_nb;
-	struct notifier_block restart_nb;
-	void *driver_data;
-	struct watchdog_core_data *wd_data;
-	long unsigned int status;
-	struct list_head deferred;
-};
-
-struct watchdog_governor {
-	const char name[20];
-	void (*pretimeout)(struct watchdog_device *);
-};
-
-struct watchdog_core_data {
-	struct device dev;
-	struct cdev cdev;
-	struct watchdog_device *wdd;
-	struct mutex lock;
-	ktime_t last_keepalive;
-	ktime_t last_hw_keepalive;
-	ktime_t open_deadline;
-	struct hrtimer timer;
-	struct kthread_work work;
-	long unsigned int status;
-};
-
-struct mdp_device_descriptor_s {
-	__u32 number;
-	__u32 major;
-	__u32 minor;
-	__u32 raid_disk;
-	__u32 state;
-	__u32 reserved[27];
-};
-
-typedef struct mdp_device_descriptor_s mdp_disk_t;
-
-struct mdp_superblock_s {
-	__u32 md_magic;
-	__u32 major_version;
-	__u32 minor_version;
-	__u32 patch_version;
-	__u32 gvalid_words;
-	__u32 set_uuid0;
-	__u32 ctime;
-	__u32 level;
-	__u32 size;
-	__u32 nr_disks;
-	__u32 raid_disks;
-	__u32 md_minor;
-	__u32 not_persistent;
-	__u32 set_uuid1;
-	__u32 set_uuid2;
-	__u32 set_uuid3;
-	__u32 gstate_creserved[16];
-	__u32 utime;
-	__u32 state;
-	__u32 active_disks;
-	__u32 working_disks;
-	__u32 failed_disks;
-	__u32 spare_disks;
-	__u32 sb_csum;
-	__u32 events_lo;
-	__u32 events_hi;
-	__u32 cp_events_lo;
-	__u32 cp_events_hi;
-	__u32 recovery_cp;
-	__u64 reshape_position;
-	__u32 new_level;
-	__u32 delta_disks;
-	__u32 new_layout;
-	__u32 new_chunk;
-	__u32 gstate_sreserved[14];
-	__u32 layout;
-	__u32 chunk_size;
-	__u32 root_pv;
-	__u32 root_block;
-	__u32 pstate_reserved[60];
-	mdp_disk_t disks[27];
-	__u32 reserved[0];
-	mdp_disk_t this_disk;
-};
-
-typedef struct mdp_superblock_s mdp_super_t;
-
-struct mdp_superblock_1 {
-	__le32 magic;
-	__le32 major_version;
-	__le32 feature_map;
-	__le32 pad0;
-	__u8 set_uuid[16];
-	char set_name[32];
-	__le64 ctime;
-	__le32 level;
-	__le32 layout;
-	__le64 size;
-	__le32 chunksize;
-	__le32 raid_disks;
-	union {
-		__le32 bitmap_offset;
-		struct {
-			__le16 offset;
-			__le16 size;
-		} ppl;
-	};
-	__le32 new_level;
-	__le64 reshape_position;
-	__le32 delta_disks;
-	__le32 new_layout;
-	__le32 new_chunk;
-	__le32 new_offset;
-	__le64 data_offset;
-	__le64 data_size;
-	__le64 super_offset;
-	union {
-		__le64 recovery_offset;
-		__le64 journal_tail;
-	};
-	__le32 dev_number;
-	__le32 cnt_corrected_read;
-	__u8 device_uuid[16];
-	__u8 devflags;
-	__u8 bblog_shift;
-	__le16 bblog_size;
-	__le32 bblog_offset;
-	__le64 utime;
-	__le64 events;
-	__le64 resync_offset;
-	__le32 sb_csum;
-	__le32 max_dev;
-	__u8 pad3[32];
-	__le16 dev_roles[0];
-};
-
-struct mdu_version_s {
-	int major;
-	int minor;
-	int patchlevel;
-};
-
-typedef struct mdu_version_s mdu_version_t;
-
-struct mdu_array_info_s {
-	int major_version;
-	int minor_version;
-	int patch_version;
-	unsigned int ctime;
-	int level;
-	int size;
-	int nr_disks;
-	int raid_disks;
-	int md_minor;
-	int not_persistent;
-	unsigned int utime;
-	int state;
-	int active_disks;
-	int working_disks;
-	int failed_disks;
-	int spare_disks;
-	int layout;
-	int chunk_size;
-};
-
-typedef struct mdu_array_info_s mdu_array_info_t;
-
-struct mdu_disk_info_s {
-	int number;
-	int major;
-	int minor;
-	int raid_disk;
-	int state;
-};
-
-typedef struct mdu_disk_info_s mdu_disk_info_t;
-
-struct mdu_bitmap_file_s {
-	char pathname[4096];
-};
-
-typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
-
-struct mddev;
-
-struct md_rdev;
-
-struct md_cluster_operations {
-	int (*join)(struct mddev *, int);
-	int (*leave)(struct mddev *);
-	int (*slot_number)(struct mddev *);
-	int (*resync_info_update)(struct mddev *, sector_t, sector_t);
-	void (*resync_info_get)(struct mddev *, sector_t *, sector_t *);
-	int (*metadata_update_start)(struct mddev *);
-	int (*metadata_update_finish)(struct mddev *);
-	void (*metadata_update_cancel)(struct mddev *);
-	int (*resync_start)(struct mddev *);
-	int (*resync_finish)(struct mddev *);
-	int (*area_resyncing)(struct mddev *, int, sector_t, sector_t);
-	int (*add_new_disk)(struct mddev *, struct md_rdev *);
-	void (*add_new_disk_cancel)(struct mddev *);
-	int (*new_disk_ack)(struct mddev *, bool);
-	int (*remove_disk)(struct mddev *, struct md_rdev *);
-	void (*load_bitmaps)(struct mddev *, int);
-	int (*gather_bitmaps)(struct md_rdev *);
-	int (*resize_bitmaps)(struct mddev *, sector_t, sector_t);
-	int (*lock_all_bitmaps)(struct mddev *);
-	void (*unlock_all_bitmaps)(struct mddev *);
-	void (*update_size)(struct mddev *, sector_t);
-};
-
-struct md_cluster_info;
-
-struct md_personality;
-
-struct md_thread;
-
-struct bitmap;
-
-struct mddev {
-	void *private;
-	struct md_personality *pers;
-	dev_t unit;
-	int md_minor;
-	struct list_head disks;
-	long unsigned int flags;
-	long unsigned int sb_flags;
-	int suspended;
-	atomic_t active_io;
-	int ro;
-	int sysfs_active;
-	struct gendisk *gendisk;
-	struct kobject kobj;
-	int hold_active;
-	int major_version;
-	int minor_version;
-	int patch_version;
-	int persistent;
-	int external;
-	char metadata_type[17];
-	int chunk_sectors;
-	time64_t ctime;
-	time64_t utime;
-	int level;
-	int layout;
-	char clevel[16];
-	int raid_disks;
-	int max_disks;
-	sector_t dev_sectors;
-	sector_t array_sectors;
-	int external_size;
-	__u64 events;
-	int can_decrease_events;
-	char uuid[16];
-	sector_t reshape_position;
-	int delta_disks;
-	int new_level;
-	int new_layout;
-	int new_chunk_sectors;
-	int reshape_backwards;
-	struct md_thread *thread;
-	struct md_thread *sync_thread;
-	char *last_sync_action;
-	sector_t curr_resync;
-	sector_t curr_resync_completed;
-	long unsigned int resync_mark;
-	sector_t resync_mark_cnt;
-	sector_t curr_mark_cnt;
-	sector_t resync_max_sectors;
-	atomic64_t resync_mismatches;
-	sector_t suspend_lo;
-	sector_t suspend_hi;
-	int sync_speed_min;
-	int sync_speed_max;
-	int parallel_resync;
-	int ok_start_degraded;
-	long unsigned int recovery;
-	int recovery_disabled;
-	int in_sync;
-	struct mutex open_mutex;
-	struct mutex reconfig_mutex;
-	atomic_t active;
-	atomic_t openers;
-	int changed;
-	int degraded;
-	atomic_t recovery_active;
-	wait_queue_head_t recovery_wait;
-	sector_t recovery_cp;
-	sector_t resync_min;
-	sector_t resync_max;
-	struct kernfs_node *sysfs_state;
-	struct kernfs_node *sysfs_action;
-	struct kernfs_node *sysfs_completed;
-	struct kernfs_node *sysfs_degraded;
-	struct kernfs_node *sysfs_level;
-	struct work_struct del_work;
-	spinlock_t lock;
-	wait_queue_head_t sb_wait;
-	atomic_t pending_writes;
-	unsigned int safemode;
-	unsigned int safemode_delay;
-	struct timer_list safemode_timer;
-	struct percpu_ref writes_pending;
-	int sync_checkers;
-	struct request_queue *queue;
-	struct bitmap *bitmap;
-	struct {
-		struct file *file;
-		loff_t offset;
-		long unsigned int space;
-		loff_t default_offset;
-		long unsigned int default_space;
-		struct mutex mutex;
-		long unsigned int chunksize;
-		long unsigned int daemon_sleep;
-		long unsigned int max_write_behind;
-		int external;
-		int nodes;
-		char cluster_name[64];
-	} bitmap_info;
-	atomic_t max_corr_read_errors;
-	struct list_head all_mddevs;
-	struct attribute_group *to_remove;
-	struct bio_set bio_set;
-	struct bio_set sync_set;
-	mempool_t md_io_pool;
-	struct bio *flush_bio;
-	atomic_t flush_pending;
-	ktime_t start_flush;
-	ktime_t last_flush;
-	struct work_struct flush_work;
-	struct work_struct event_work;
-	mempool_t *serial_info_pool;
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	struct md_cluster_info *cluster_info;
-	unsigned int good_device_nr;
-	unsigned int noio_flag;
-	bool has_superblocks: 1;
-	bool fail_last_dev: 1;
-	bool serialize_policy: 1;
-};
-
-struct serial_in_rdev;
-
-struct md_rdev {
-	struct list_head same_set;
-	sector_t sectors;
-	struct mddev *mddev;
-	int last_events;
-	struct block_device *meta_bdev;
-	struct block_device *bdev;
-	struct page *sb_page;
-	struct page *bb_page;
-	int sb_loaded;
-	__u64 sb_events;
-	sector_t data_offset;
-	sector_t new_data_offset;
-	sector_t sb_start;
-	int sb_size;
-	int preferred_minor;
-	struct kobject kobj;
-	long unsigned int flags;
-	wait_queue_head_t blocked_wait;
-	int desc_nr;
-	int raid_disk;
-	int new_raid_disk;
-	int saved_raid_disk;
-	union {
-		sector_t recovery_offset;
-		sector_t journal_tail;
-	};
-	atomic_t nr_pending;
-	atomic_t read_errors;
-	time64_t last_read_error;
-	atomic_t corrected_errors;
-	struct serial_in_rdev *serial;
-	struct work_struct del_work;
-	struct kernfs_node *sysfs_state;
-	struct kernfs_node *sysfs_unack_badblocks;
-	struct kernfs_node *sysfs_badblocks;
-	struct badblocks badblocks;
-	struct {
-		short int offset;
-		unsigned int size;
-		sector_t sector;
-	} ppl;
-};
-
-struct serial_in_rdev {
-	struct rb_root_cached serial_rb;
-	spinlock_t serial_lock;
-	wait_queue_head_t serial_io_wait;
-};
-
-enum flag_bits {
-	Faulty = 0,
-	In_sync = 1,
-	Bitmap_sync = 2,
-	WriteMostly = 3,
-	AutoDetected = 4,
-	Blocked = 5,
-	WriteErrorSeen = 6,
-	FaultRecorded = 7,
-	BlockedBadBlocks = 8,
-	WantReplacement = 9,
-	Replacement = 10,
-	Candidate = 11,
-	Journal = 12,
-	ClusterRemove = 13,
-	RemoveSynchronized = 14,
-	ExternalBbl = 15,
-	FailFast = 16,
-	LastDev = 17,
-	CollisionCheck = 18,
-};
-
-enum mddev_flags {
-	MD_ARRAY_FIRST_USE = 0,
-	MD_CLOSING = 1,
-	MD_JOURNAL_CLEAN = 2,
-	MD_HAS_JOURNAL = 3,
-	MD_CLUSTER_RESYNC_LOCKED = 4,
-	MD_FAILFAST_SUPPORTED = 5,
-	MD_HAS_PPL = 6,
-	MD_HAS_MULTIPLE_PPLS = 7,
-	MD_ALLOW_SB_UPDATE = 8,
-	MD_UPDATING_SB = 9,
-	MD_NOT_READY = 10,
-	MD_BROKEN = 11,
-};
-
-enum mddev_sb_flags {
-	MD_SB_CHANGE_DEVS = 0,
-	MD_SB_CHANGE_CLEAN = 1,
-	MD_SB_CHANGE_PENDING = 2,
-	MD_SB_NEED_REWRITE = 3,
-};
-
-struct md_personality {
-	char *name;
-	int level;
-	struct list_head list;
-	struct module *owner;
-	bool (*make_request)(struct mddev *, struct bio *);
-	int (*run)(struct mddev *);
-	int (*start)(struct mddev *);
-	void (*free)(struct mddev *, void *);
-	void (*status)(struct seq_file *, struct mddev *);
-	void (*error_handler)(struct mddev *, struct md_rdev *);
-	int (*hot_add_disk)(struct mddev *, struct md_rdev *);
-	int (*hot_remove_disk)(struct mddev *, struct md_rdev *);
-	int (*spare_active)(struct mddev *);
-	sector_t (*sync_request)(struct mddev *, sector_t, int *);
-	int (*resize)(struct mddev *, sector_t);
-	sector_t (*size)(struct mddev *, sector_t, int);
-	int (*check_reshape)(struct mddev *);
-	int (*start_reshape)(struct mddev *);
-	void (*finish_reshape)(struct mddev *);
-	void (*update_reshape_pos)(struct mddev *);
-	void (*quiesce)(struct mddev *, int);
-	void * (*takeover)(struct mddev *);
-	int (*change_consistency_policy)(struct mddev *, const char *);
-};
-
-struct md_thread {
-	void (*run)(struct md_thread *);
-	struct mddev *mddev;
-	wait_queue_head_t wqueue;
-	long unsigned int flags;
-	struct task_struct *tsk;
-	long unsigned int timeout;
-	void *private;
-};
-
-struct bitmap_page;
-
-struct bitmap_counts {
-	spinlock_t lock;
-	struct bitmap_page *bp;
-	long unsigned int pages;
-	long unsigned int missing_pages;
-	long unsigned int chunkshift;
-	long unsigned int chunks;
-};
-
-struct bitmap_storage {
-	struct file *file;
-	struct page *sb_page;
-	struct page **filemap;
-	long unsigned int *filemap_attr;
-	long unsigned int file_pages;
-	long unsigned int bytes;
-};
-
-struct bitmap {
-	struct bitmap_counts counts;
-	struct mddev *mddev;
-	__u64 events_cleared;
-	int need_sync;
-	struct bitmap_storage storage;
-	long unsigned int flags;
-	int allclean;
-	atomic_t behind_writes;
-	long unsigned int behind_writes_used;
-	long unsigned int daemon_lastrun;
-	long unsigned int last_end_sync;
-	atomic_t pending_writes;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t overflow_wait;
-	wait_queue_head_t behind_wait;
-	struct kernfs_node *sysfs_can_clear;
-	int cluster_slot;
-};
-
-enum recovery_flags {
-	MD_RECOVERY_RUNNING = 0,
-	MD_RECOVERY_SYNC = 1,
-	MD_RECOVERY_RECOVER = 2,
-	MD_RECOVERY_INTR = 3,
-	MD_RECOVERY_DONE = 4,
-	MD_RECOVERY_NEEDED = 5,
-	MD_RECOVERY_REQUESTED = 6,
-	MD_RECOVERY_CHECK = 7,
-	MD_RECOVERY_RESHAPE = 8,
-	MD_RECOVERY_FROZEN = 9,
-	MD_RECOVERY_ERROR = 10,
-	MD_RECOVERY_WAIT = 11,
-	MD_RESYNCING_REMOTE = 12,
-};
-
-struct md_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct mddev *, char *);
-	ssize_t (*store)(struct mddev *, const char *, size_t);
-};
-
-struct bitmap_page {
-	char *map;
-	unsigned int hijacked: 1;
-	unsigned int pending: 1;
-	unsigned int count: 30;
-};
-
-struct md_io {
-	struct mddev *mddev;
-	bio_end_io_t *orig_bi_end_io;
-	void *orig_bi_private;
-	long unsigned int start_time;
-	struct hd_struct *part;
-};
-
-struct super_type {
-	char *name;
-	struct module *owner;
-	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
-	int (*validate_super)(struct mddev *, struct md_rdev *);
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
-	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
-};
-
-struct rdev_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct md_rdev *, char *);
-	ssize_t (*store)(struct md_rdev *, const char *, size_t);
-};
-
-enum array_state {
-	clear = 0,
-	inactive = 1,
-	suspended = 2,
-	readonly = 3,
-	read_auto = 4,
-	clean = 5,
-	active = 6,
-	write_pending = 7,
-	active_idle = 8,
-	broken = 9,
-	bad_word = 10,
-};
-
-struct detected_devices_node {
-	struct list_head list;
-	dev_t dev;
-};
-
-typedef __u16 bitmap_counter_t;
-
-enum bitmap_state {
-	BITMAP_STALE = 1,
-	BITMAP_WRITE_ERROR = 2,
-	BITMAP_HOSTENDIAN = 15,
-};
-
-struct bitmap_super_s {
-	__le32 magic;
-	__le32 version;
-	__u8 uuid[16];
-	__le64 events;
-	__le64 events_cleared;
-	__le64 sync_size;
-	__le32 state;
-	__le32 chunksize;
-	__le32 daemon_sleep;
-	__le32 write_behind;
-	__le32 sectors_reserved;
-	__le32 nodes;
-	__u8 cluster_name[64];
-	__u8 pad[120];
-};
-
-typedef struct bitmap_super_s bitmap_super_t;
-
-enum bitmap_page_attr {
-	BITMAP_PAGE_DIRTY = 0,
-	BITMAP_PAGE_PENDING = 1,
-	BITMAP_PAGE_NEEDWRITE = 2,
-};
-
-struct md_setup_args {
-	int minor;
-	int partitioned;
-	int level;
-	int chunk;
-	char *device_names;
-};
-
-struct dm_kobject_holder {
-	struct kobject kobj;
-	struct completion completion;
-};
-
-enum opp_table_access {
-	OPP_TABLE_ACCESS_UNKNOWN = 0,
-	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
-	OPP_TABLE_ACCESS_SHARED = 2,
-};
-
-struct icc_path;
-
-struct dev_pm_opp___2;
-
-struct dev_pm_set_opp_data;
-
-struct opp_table___2 {
-	struct list_head node;
-	struct blocking_notifier_head head;
-	struct list_head dev_list;
-	struct list_head opp_list;
-	struct kref kref;
-	struct mutex lock;
-	struct device_node *np;
-	long unsigned int clock_latency_ns_max;
-	unsigned int voltage_tolerance_v1;
-	unsigned int parsed_static_opps;
-	enum opp_table_access shared_opp;
-	struct dev_pm_opp___2 *suspend_opp;
-	struct mutex genpd_virt_dev_lock;
-	struct device **genpd_virt_devs;
-	struct opp_table___2 **required_opp_tables;
-	unsigned int required_opp_count;
-	unsigned int *supported_hw;
-	unsigned int supported_hw_count;
-	const char *prop_name;
-	struct clk *clk;
-	struct regulator **regulators;
-	int regulator_count;
-	struct icc_path **paths;
-	unsigned int path_count;
-	bool enabled;
-	bool genpd_performance_state;
-	bool is_genpd;
-	int (*set_opp)(struct dev_pm_set_opp_data *);
-	struct dev_pm_set_opp_data *set_opp_data;
-	struct dentry *dentry;
-	char dentry_name[255];
-};
-
-struct dev_pm_opp_supply;
-
-struct dev_pm_opp_icc_bw;
-
-struct dev_pm_opp___2 {
-	struct list_head node;
-	struct kref kref;
-	bool available;
-	bool dynamic;
-	bool turbo;
-	bool suspend;
-	unsigned int pstate;
-	long unsigned int rate;
-	unsigned int level;
-	struct dev_pm_opp_supply *supplies;
-	struct dev_pm_opp_icc_bw *bandwidth;
-	long unsigned int clock_latency_ns;
-	struct dev_pm_opp___2 **required_opps;
-	struct opp_table___2 *opp_table;
-	struct device_node *np;
-	struct dentry *dentry;
-};
-
-enum dev_pm_opp_event {
-	OPP_EVENT_ADD = 0,
-	OPP_EVENT_REMOVE = 1,
-	OPP_EVENT_ENABLE = 2,
-	OPP_EVENT_DISABLE = 3,
-	OPP_EVENT_ADJUST_VOLTAGE = 4,
-};
-
-struct dev_pm_opp_supply {
-	long unsigned int u_volt;
-	long unsigned int u_volt_min;
-	long unsigned int u_volt_max;
-	long unsigned int u_amp;
-};
-
-struct dev_pm_opp_icc_bw {
-	u32 avg;
-	u32 peak;
-};
-
-struct dev_pm_opp_info {
-	long unsigned int rate;
-	struct dev_pm_opp_supply *supplies;
-};
-
-struct dev_pm_set_opp_data {
-	struct dev_pm_opp_info old_opp;
-	struct dev_pm_opp_info new_opp;
-	struct regulator **regulators;
-	unsigned int regulator_count;
-	struct clk *clk;
-	struct device *dev;
-};
-
-struct opp_device {
-	struct list_head node;
-	const struct device *dev;
-	struct dentry *dentry;
-};
-
-struct thermal_cooling_device_ops;
-
-struct thermal_cooling_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct device_node *np;
-	void *devdata;
-	void *stats;
-	const struct thermal_cooling_device_ops *ops;
-	bool updated;
-	struct mutex lock;
-	struct list_head thermal_instances;
-	struct list_head node;
-};
-
-struct cpufreq_policy_data {
-	struct cpufreq_cpuinfo cpuinfo;
-	struct cpufreq_frequency_table *freq_table;
-	unsigned int cpu;
+struct dm_arg {
 	unsigned int min;
 	unsigned int max;
+	char *error;
 };
 
-struct cpufreq_freqs {
-	struct cpufreq_policy *policy;
-	unsigned int old;
-	unsigned int new;
-	u8 flags;
+enum suspend_mode {
+	PRESUSPEND = 0,
+	PRESUSPEND_UNDO = 1,
+	POSTSUSPEND = 2,
 };
 
-struct freq_attr {
+struct ctl_info_attribute {
 	struct attribute attr;
-	ssize_t (*show)(struct cpufreq_policy *, char *);
-	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
 };
 
-struct cpufreq_driver {
-	char name[16];
-	u16 flags;
-	void *driver_data;
-	int (*init)(struct cpufreq_policy *);
-	int (*verify)(struct cpufreq_policy_data *);
-	int (*setpolicy)(struct cpufreq_policy *);
-	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
-	int (*target_index)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get)(unsigned int);
-	void (*update_limits)(unsigned int);
-	int (*bios_limit)(int, unsigned int *);
-	int (*online)(struct cpufreq_policy *);
-	int (*offline)(struct cpufreq_policy *);
-	int (*exit)(struct cpufreq_policy *);
-	void (*stop_cpu)(struct cpufreq_policy *);
-	int (*suspend)(struct cpufreq_policy *);
-	int (*resume)(struct cpufreq_policy *);
-	void (*ready)(struct cpufreq_policy *);
-	struct freq_attr **attr;
-	bool boost_enabled;
-	int (*set_boost)(struct cpufreq_policy *, int);
-};
-
-struct thermal_cooling_device_ops {
-	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
-	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
-	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
-	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
-};
-
-struct cpufreq_stats {
-	unsigned int total_trans;
-	long long unsigned int last_time;
-	unsigned int max_state;
-	unsigned int state_num;
-	unsigned int last_index;
-	u64 *time_in_state;
-	unsigned int *freq_table;
-	unsigned int *trans_table;
-	unsigned int reset_pending;
-	long long unsigned int reset_time;
-};
-
-struct dbs_data {
-	struct gov_attr_set attr_set;
-	void *tuners;
-	unsigned int ignore_nice_load;
-	unsigned int sampling_rate;
-	unsigned int sampling_down_factor;
-	unsigned int up_threshold;
-	unsigned int io_is_busy;
-};
-
-struct policy_dbs_info {
-	struct cpufreq_policy *policy;
-	struct mutex update_mutex;
-	u64 last_sample_time;
-	s64 sample_delay_ns;
-	atomic_t work_count;
-	struct irq_work irq_work;
-	struct work_struct work;
-	struct dbs_data *dbs_data;
-	struct list_head list;
-	unsigned int rate_mult;
-	unsigned int idle_periods;
-	bool is_shared;
-	bool work_in_progress;
-};
-
-struct cpu_dbs_info {
-	u64 prev_cpu_idle;
-	u64 prev_update_time;
-	u64 prev_cpu_nice;
-	unsigned int prev_load;
-	struct update_util_data update_util;
-	struct policy_dbs_info *policy_dbs;
-};
-
-struct dbs_governor {
-	struct cpufreq_governor gov;
-	struct kobj_type kobj_type;
-	struct dbs_data *gdbs_data;
-	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
-	struct policy_dbs_info * (*alloc)();
-	void (*free)(struct policy_dbs_info *);
-	int (*init)(struct dbs_data *);
-	void (*exit)(struct dbs_data *);
-	void (*start)(struct cpufreq_policy *);
-};
-
-struct opal_occ_msg {
-	__be64 type;
-	__be64 chip;
-	__be64 throttle_status;
-};
-
-struct global_pstate_info {
-	int highest_lpstate_idx;
-	unsigned int elapsed_time;
-	unsigned int last_sampled_time;
-	int last_lpstate_idx;
-	int last_gpstate_idx;
-	spinlock_t gpstate_lock;
-	struct timer_list timer;
-	struct cpufreq_policy *policy;
-};
-
-struct pstate_idx_revmap_data {
-	u8 pstate_id;
-	unsigned int cpufreq_table_idx;
-	struct hlist_node hentry;
-};
-
-enum throttle_reason_type {
-	NO_THROTTLE = 0,
-	POWERCAP = 1,
-	CPU_OVERTEMP = 2,
-	POWER_SUPPLY_FAILURE = 3,
-	OVERCURRENT = 4,
-	OCC_RESET_THROTTLE = 5,
-	OCC_MAX_REASON = 6,
-};
-
-struct chip {
-	unsigned int id;
-	bool throttled;
-	bool restore;
-	u8 throttle_reason;
-	cpumask_t mask;
-	struct work_struct throttle;
-	int throttle_turbo;
-	int throttle_sub_turbo;
-	int reason[6];
-};
-
-struct powernv_pstate_info {
-	unsigned int min;
-	unsigned int max;
-	unsigned int nominal;
-	unsigned int nr_pstates;
-	bool wof_enabled;
-};
-
-struct powernv_smp_call_data {
-	unsigned int freq;
-	u8 pstate_id;
-	u8 gpstate_id;
-};
-
-struct cpuidle_governor {
-	char name[16];
-	struct list_head governor_list;
-	unsigned int rating;
-	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
-	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
-	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
-	void (*reflect)(struct cpuidle_device *, int);
-};
-
-struct cpuidle_state_kobj {
-	struct cpuidle_state *state;
-	struct cpuidle_state_usage *state_usage;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-	struct cpuidle_device *device;
-};
-
-struct cpuidle_device_kobj {
-	struct cpuidle_device *dev;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_attr {
+struct instance_attribute___2 {
 	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_device *, char *);
-	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
-};
-
-struct cpuidle_state_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
-	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
-};
-
-struct ladder_device_state {
-	struct {
-		u32 promotion_count;
-		u32 demotion_count;
-		u64 promotion_time_ns;
-		u64 demotion_time_ns;
-	} threshold;
-	struct {
-		int promotion_count;
-		int demotion_count;
-	} stats;
-};
-
-struct ladder_device {
-	struct ladder_device_state states[10];
-};
-
-struct menu_device {
-	int needs_update;
-	int tick_wakeup;
-	u64 next_timer_ns;
-	unsigned int bucket;
-	unsigned int correction_factor[12];
-	unsigned int intervals[8];
-	int interval_ptr;
-};
-
-struct teo_idle_state {
-	unsigned int early_hits;
-	unsigned int hits;
-	unsigned int misses;
-};
-
-struct teo_cpu {
-	u64 time_span_ns;
-	u64 sleep_length_ns;
-	struct teo_idle_state states[10];
-	int interval_idx;
-	u64 intervals[8];
+	ssize_t (*show)(struct edac_device_instance *, char *);
+	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
 };
 
 struct xcede_latency_record {
@@ -107939,744 +125818,14 @@
 struct xcede_latency_payload {
 	u8 record_size;
 	struct xcede_latency_record records[16];
-} __attribute__((packed));
+};
 
 struct xcede_latency_parameter {
 	__be16 payload_size;
 	struct xcede_latency_payload payload;
 	u8 null_char;
-} __attribute__((packed));
-
-struct stop_psscr_table {
-	u64 val;
-	u64 mask;
-};
-
-struct sdhci_pci_data {
-	struct pci_dev *pdev;
-	int slotno;
-	int rst_n_gpio;
-	int cd_gpio;
-	int (*setup)(struct sdhci_pci_data *);
-	void (*cleanup)(struct sdhci_pci_data *);
-};
-
-struct led_init_data {
-	struct fwnode_handle *fwnode;
-	const char *default_label;
-	const char *devicename;
-	bool devname_mandatory;
-};
-
-struct led_properties {
-	u32 color;
-	bool color_present;
-	const char *function;
-	u32 func_enum;
-	bool func_enum_present;
-	const char *label;
-};
-
-enum cpu_led_event {
-	CPU_LED_IDLE_START = 0,
-	CPU_LED_IDLE_END = 1,
-	CPU_LED_START = 2,
-	CPU_LED_STOP = 3,
-	CPU_LED_HALTED = 4,
-};
-
-struct led_trigger_cpu {
-	bool is_active;
-	char name[8];
-	struct led_trigger *_trig;
-};
-
-struct alias_prop {
-	struct list_head link;
-	const char *alias;
-	struct device_node *np;
-	int id;
-	char stem[0];
-};
-
-struct amba_cs_uci_id {
-	unsigned int devarch;
-	unsigned int devarch_mask;
-	unsigned int devtype;
-	void *data;
-};
-
-struct amba_device {
-	struct device dev;
-	struct resource res;
-	struct clk *pclk;
-	struct device_dma_parameters dma_parms;
-	unsigned int periphid;
-	unsigned int cid;
-	struct amba_cs_uci_id uci;
-	unsigned int irq[9];
-	char *driver_override;
-};
-
-struct of_dev_auxdata {
-	char *compatible;
-	resource_size_t phys_addr;
-	char *name;
-	void *platform_data;
-};
-
-struct of_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct device_node *local_node;
-};
-
-struct supplier_bindings {
-	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
-};
-
-struct of_changeset_entry {
-	struct list_head node;
-	long unsigned int action;
-	struct device_node *np;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-struct of_changeset {
-	struct list_head entries;
-};
-
-struct of_bus___2 {
-	void (*count_cells)(const void *, int, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-};
-
-struct of_bus {
-	const char *name;
-	const char *addresses;
-	int (*match)(struct device_node *);
-	void (*count_cells)(struct device_node *, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-	bool has_flags;
-	unsigned int (*get_flags)(const __be32 *);
-};
-
-struct of_intc_desc {
-	struct list_head list;
-	of_irq_init_cb_t irq_init_cb;
-	struct device_node *dev;
-	struct device_node *interrupt_parent;
-};
-
-struct rmem_assigned_device {
-	struct device *dev;
-	struct reserved_mem *rmem;
-	struct list_head list;
-};
-
-struct mbox_client {
-	struct device *dev;
-	bool tx_block;
-	long unsigned int tx_tout;
-	bool knows_txdone;
-	void (*rx_callback)(struct mbox_client *, void *);
-	void (*tx_prepare)(struct mbox_client *, void *);
-	void (*tx_done)(struct mbox_client *, void *, int);
-};
-
-struct mbox_chan;
-
-struct mbox_chan_ops {
-	int (*send_data)(struct mbox_chan *, void *);
-	int (*flush)(struct mbox_chan *, long unsigned int);
-	int (*startup)(struct mbox_chan *);
-	void (*shutdown)(struct mbox_chan *);
-	bool (*last_tx_done)(struct mbox_chan *);
-	bool (*peek_data)(struct mbox_chan *);
-};
-
-struct mbox_controller;
-
-struct mbox_chan {
-	struct mbox_controller *mbox;
-	unsigned int txdone_method;
-	struct mbox_client *cl;
-	struct completion tx_complete;
-	void *active_req;
-	unsigned int msg_count;
-	unsigned int msg_free;
-	void *msg_data[20];
-	spinlock_t lock;
-	void *con_priv;
-};
-
-struct mbox_controller {
-	struct device *dev;
-	const struct mbox_chan_ops *ops;
-	struct mbox_chan *chans;
-	int num_chans;
-	bool txdone_irq;
-	bool txdone_poll;
-	unsigned int txpoll_period;
-	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
-	struct hrtimer poll_hrt;
-	struct list_head node;
-};
-
-enum devfreq_timer {
-	DEVFREQ_TIMER_DEFERRABLE = 0,
-	DEVFREQ_TIMER_DELAYED = 1,
-	DEVFREQ_TIMER_NUM = 2,
-};
-
-struct devfreq_dev_status {
-	long unsigned int total_time;
-	long unsigned int busy_time;
-	long unsigned int current_frequency;
-	void *private_data;
-};
-
-struct devfreq_dev_profile {
-	long unsigned int initial_freq;
-	unsigned int polling_ms;
-	enum devfreq_timer timer;
-	int (*target)(struct device *, long unsigned int *, u32);
-	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
-	int (*get_cur_freq)(struct device *, long unsigned int *);
-	void (*exit)(struct device *);
-	long unsigned int *freq_table;
-	unsigned int max_state;
-};
-
-struct devfreq_stats {
-	unsigned int total_trans;
-	unsigned int *trans_table;
-	u64 *time_in_state;
-	u64 last_update;
-};
-
-struct devfreq_governor;
-
-struct devfreq {
-	struct list_head node;
-	struct mutex lock;
-	struct device dev;
-	struct devfreq_dev_profile *profile;
-	const struct devfreq_governor *governor;
-	char governor_name[16];
-	struct notifier_block nb;
-	struct delayed_work work;
-	long unsigned int previous_freq;
-	struct devfreq_dev_status last_status;
-	void *data;
-	struct dev_pm_qos_request user_min_freq_req;
-	struct dev_pm_qos_request user_max_freq_req;
-	long unsigned int scaling_min_freq;
-	long unsigned int scaling_max_freq;
-	bool stop_polling;
-	long unsigned int suspend_freq;
-	long unsigned int resume_freq;
-	atomic_t suspend_count;
-	struct devfreq_stats stats;
-	struct srcu_notifier_head transition_notifier_list;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct devfreq_governor {
-	struct list_head node;
-	const char name[16];
-	const unsigned int immutable;
-	const unsigned int interrupt_driven;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	int (*event_handler)(struct devfreq *, unsigned int, void *);
-};
-
-struct devfreq_freqs {
-	long unsigned int old;
-	long unsigned int new;
-};
-
-struct devfreq_passive_data {
-	struct devfreq *parent;
-	int (*get_target_freq)(struct devfreq *, long unsigned int *);
-	struct devfreq *this;
-	struct notifier_block nb;
-};
-
-struct trace_event_raw_devfreq_monitor {
-	struct trace_entry ent;
-	long unsigned int freq;
-	long unsigned int busy_time;
-	long unsigned int total_time;
-	unsigned int polling_ms;
-	u32 __data_loc_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devfreq_monitor {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
-
-struct devfreq_notifier_devres {
-	struct devfreq *devfreq;
-	struct notifier_block *nb;
-	unsigned int list;
-};
-
-struct devfreq_event_desc;
-
-struct devfreq_event_dev {
-	struct list_head node;
-	struct device dev;
-	struct mutex lock;
-	u32 enable_count;
-	const struct devfreq_event_desc *desc;
-};
-
-struct devfreq_event_ops;
-
-struct devfreq_event_desc {
-	const char *name;
-	u32 event_type;
-	void *driver_data;
-	const struct devfreq_event_ops *ops;
-};
-
-struct devfreq_event_data {
-	long unsigned int load_count;
-	long unsigned int total_count;
-};
-
-struct devfreq_event_ops {
-	int (*enable)(struct devfreq_event_dev *);
-	int (*disable)(struct devfreq_event_dev *);
-	int (*reset)(struct devfreq_event_dev *);
-	int (*set_event)(struct devfreq_event_dev *);
-	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
-};
-
-struct devfreq_simple_ondemand_data {
-	unsigned int upthreshold;
-	unsigned int downdifferential;
-};
-
-struct userspace_data {
-	long unsigned int user_frequency;
-	bool valid;
-};
-
-union extcon_property_value {
-	int intval;
-};
-
-struct extcon_cable;
-
-struct extcon_dev___2 {
-	const char *name;
-	const unsigned int *supported_cable;
-	const u32 *mutually_exclusive;
-	struct device dev;
-	struct raw_notifier_head nh_all;
-	struct raw_notifier_head *nh;
-	struct list_head entry;
-	int max_supported;
-	spinlock_t lock;
-	u32 state;
-	struct device_type extcon_dev_type;
-	struct extcon_cable *cables;
-	struct attribute_group attr_g_muex;
-	struct attribute **attrs_muex;
-	struct device_attribute *d_attrs_muex;
-};
-
-struct extcon_cable {
-	struct extcon_dev___2 *edev;
-	int cable_index;
-	struct attribute_group attr_g;
-	struct device_attribute attr_name;
-	struct device_attribute attr_state;
-	struct attribute *attrs[3];
-	union extcon_property_value usb_propval[3];
-	union extcon_property_value chg_propval[1];
-	union extcon_property_value jack_propval[1];
-	union extcon_property_value disp_propval[2];
-	long unsigned int usb_bits[1];
-	long unsigned int chg_bits[1];
-	long unsigned int jack_bits[1];
-	long unsigned int disp_bits[1];
-};
-
-struct __extcon_info {
-	unsigned int type;
-	unsigned int id;
-	const char *name;
-};
-
-struct extcon_dev_notifier_devres {
-	struct extcon_dev___2 *edev;
-	unsigned int id;
-	struct notifier_block *nb;
-};
-
-enum vme_resource_type {
-	VME_MASTER = 0,
-	VME_SLAVE = 1,
-	VME_DMA = 2,
-	VME_LM = 3,
-};
-
-struct vme_dma_attr {
-	u32 type;
-	void *private;
-};
-
-struct vme_resource {
-	enum vme_resource_type type;
-	struct list_head *entry;
-};
-
-struct vme_bridge;
-
-struct vme_dev {
-	int num;
-	struct vme_bridge *bridge;
-	struct device dev;
-	struct list_head drv_list;
-	struct list_head bridge_list;
-};
-
-struct vme_callback {
-	void (*func)(int, int, void *);
-	void *priv_data;
-};
-
-struct vme_irq {
-	int count;
-	struct vme_callback callback[256];
-};
-
-struct vme_slave_resource;
-
-struct vme_master_resource;
-
-struct vme_dma_list;
-
-struct vme_lm_resource;
-
-struct vme_bridge {
-	char name[16];
-	int num;
-	struct list_head master_resources;
-	struct list_head slave_resources;
-	struct list_head dma_resources;
-	struct list_head lm_resources;
-	struct list_head vme_error_handlers;
-	struct list_head devices;
-	struct device *parent;
-	void *driver_priv;
-	struct list_head bus_list;
-	struct vme_irq irq[7];
-	struct mutex irq_mtx;
-	int (*slave_get)(struct vme_slave_resource *, int *, long long unsigned int *, long long unsigned int *, dma_addr_t *, u32 *, u32 *);
-	int (*slave_set)(struct vme_slave_resource *, int, long long unsigned int, long long unsigned int, dma_addr_t, u32, u32);
-	int (*master_get)(struct vme_master_resource *, int *, long long unsigned int *, long long unsigned int *, u32 *, u32 *, u32 *);
-	int (*master_set)(struct vme_master_resource *, int, long long unsigned int, long long unsigned int, u32, u32, u32);
-	ssize_t (*master_read)(struct vme_master_resource *, void *, size_t, loff_t);
-	ssize_t (*master_write)(struct vme_master_resource *, void *, size_t, loff_t);
-	unsigned int (*master_rmw)(struct vme_master_resource *, unsigned int, unsigned int, unsigned int, loff_t);
-	int (*dma_list_add)(struct vme_dma_list *, struct vme_dma_attr *, struct vme_dma_attr *, size_t);
-	int (*dma_list_exec)(struct vme_dma_list *);
-	int (*dma_list_empty)(struct vme_dma_list *);
-	void (*irq_set)(struct vme_bridge *, int, int, int);
-	int (*irq_generate)(struct vme_bridge *, int, int);
-	int (*lm_set)(struct vme_lm_resource *, long long unsigned int, u32, u32);
-	int (*lm_get)(struct vme_lm_resource *, long long unsigned int *, u32 *, u32 *);
-	int (*lm_attach)(struct vme_lm_resource *, int, void (*)(void *), void *);
-	int (*lm_detach)(struct vme_lm_resource *, int);
-	int (*slot_get)(struct vme_bridge *);
-	void * (*alloc_consistent)(struct device *, size_t, dma_addr_t *);
-	void (*free_consistent)(struct device *, size_t, void *, dma_addr_t);
-};
-
-struct vme_driver {
-	const char *name;
-	int (*match)(struct vme_dev *);
-	int (*probe)(struct vme_dev *);
-	int (*remove)(struct vme_dev *);
-	struct device_driver driver;
-	struct list_head devices;
-};
-
-struct vme_master_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	spinlock_t lock;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
-	u32 width_attr;
-	struct resource bus_resource;
-	void *kern_base;
-};
-
-struct vme_slave_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	u32 address_attr;
-	u32 cycle_attr;
-};
-
-struct vme_dma_pattern {
-	u32 pattern;
-	u32 type;
-};
-
-struct vme_dma_pci {
-	dma_addr_t address;
-};
-
-struct vme_dma_vme {
-	long long unsigned int address;
-	u32 aspace;
-	u32 cycle;
-	u32 dwidth;
-};
-
-struct vme_dma_resource;
-
-struct vme_dma_list {
-	struct list_head list;
-	struct vme_dma_resource *parent;
-	struct list_head entries;
-	struct mutex mtx;
-};
-
-struct vme_dma_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	struct list_head pending;
-	struct list_head running;
-	u32 route_attr;
-};
-
-struct vme_lm_resource {
-	struct list_head list;
-	struct vme_bridge *parent;
-	struct mutex mtx;
-	int locked;
-	int number;
-	int monitors;
-};
-
-struct vme_error_handler {
-	struct list_head list;
-	long long unsigned int start;
-	long long unsigned int end;
-	long long unsigned int first_error;
-	u32 aspace;
-	unsigned int num_errors;
-};
-
-struct powercap_control_type;
-
-struct powercap_control_type_ops {
-	int (*set_enable)(struct powercap_control_type *, bool);
-	int (*get_enable)(struct powercap_control_type *, bool *);
-	int (*release)(struct powercap_control_type *);
-};
-
-struct powercap_control_type {
-	struct device dev;
-	struct idr idr;
-	int nr_zones;
-	const struct powercap_control_type_ops *ops;
-	struct mutex lock;
-	bool allocated;
-	struct list_head node;
-};
-
-struct powercap_zone;
-
-struct powercap_zone_ops {
-	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
-	int (*get_energy_uj)(struct powercap_zone *, u64 *);
-	int (*reset_energy_uj)(struct powercap_zone *);
-	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
-	int (*get_power_uw)(struct powercap_zone *, u64 *);
-	int (*set_enable)(struct powercap_zone *, bool);
-	int (*get_enable)(struct powercap_zone *, bool *);
-	int (*release)(struct powercap_zone *);
-};
-
-struct powercap_zone_constraint;
-
-struct powercap_zone {
-	int id;
-	char *name;
-	void *control_type_inst;
-	const struct powercap_zone_ops *ops;
-	struct device dev;
-	int const_id_cnt;
-	struct idr idr;
-	struct idr *parent_idr;
-	void *private_data;
-	struct attribute **zone_dev_attrs;
-	int zone_attr_count;
-	struct attribute_group dev_zone_attr_group;
-	const struct attribute_group *dev_attr_groups[2];
-	bool allocated;
-	struct powercap_zone_constraint *constraints;
-};
-
-struct powercap_zone_constraint_ops;
-
-struct powercap_zone_constraint {
-	int id;
-	struct powercap_zone *power_zone;
-	const struct powercap_zone_constraint_ops *ops;
-};
-
-struct powercap_zone_constraint_ops {
-	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
-	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
-	int (*set_time_window_us)(struct powercap_zone *, int, u64);
-	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
-	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
-	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
-	const char * (*get_name)(struct powercap_zone *, int);
-};
-
-struct powercap_constraint_attr {
-	struct device_attribute power_limit_attr;
-	struct device_attribute time_window_attr;
-	struct device_attribute max_power_attr;
-	struct device_attribute min_power_attr;
-	struct device_attribute max_time_window_attr;
-	struct device_attribute min_time_window_attr;
-	struct device_attribute name_attr;
-};
-
-struct cper_sec_proc_arm {
-	u32 validation_bits;
-	u16 err_info_num;
-	u16 context_info_num;
-	u32 section_length;
-	u8 affinity_level;
-	u8 reserved[3];
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-};
-
-enum hw_event_mc_err_type {
-	HW_EVENT_ERR_CORRECTED = 0,
-	HW_EVENT_ERR_UNCORRECTED = 1,
-	HW_EVENT_ERR_DEFERRED = 2,
-	HW_EVENT_ERR_FATAL = 3,
-	HW_EVENT_ERR_INFO = 4,
-};
-
-struct trace_event_raw_mc_event {
-	struct trace_entry ent;
-	unsigned int error_type;
-	u32 __data_loc_msg;
-	u32 __data_loc_label;
-	u16 error_count;
-	u8 mc_index;
-	s8 top_layer;
-	s8 middle_layer;
-	s8 lower_layer;
-	long int address;
-	u8 grain_bits;
-	long int syndrome;
-	u32 __data_loc_driver_detail;
-	char __data[0];
-};
-
-struct trace_event_raw_arm_event {
-	struct trace_entry ent;
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-	u8 affinity;
-	char __data[0];
-};
-
-struct trace_event_raw_non_standard_event {
-	struct trace_entry ent;
-	char sec_type[16];
-	char fru_id[16];
-	u32 __data_loc_fru_text;
-	u8 sev;
-	u32 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_aer_event {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u32 status;
-	u8 severity;
-	u8 tlp_header_valid;
-	u32 tlp_header[4];
-	char __data[0];
-};
-
-struct trace_event_raw_memory_failure_event {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int type;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mc_event {
-	u32 msg;
-	u32 label;
-	u32 driver_detail;
-};
-
-struct trace_event_data_offsets_arm_event {};
-
-struct trace_event_data_offsets_non_standard_event {
-	u32 fru_text;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_aer_event {
-	u32 dev_name;
 };
 
-struct trace_event_data_offsets_memory_failure_event {};
-
-typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
-
-typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
-
-typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
-
-typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
-
-typedef void (*btf_trace_memory_failure_event)(void *, long unsigned int, int, int);
-
 struct nvmem_cell_lookup {
 	const char *nvmem_name;
 	const char *cell_name;
@@ -108699,7 +125848,7 @@
 	struct list_head node;
 };
 
-struct nvmem_device___2 {
+struct nvmem_device {
 	struct module *owner;
 	struct device dev;
 	int stride;
@@ -108714,1985 +125863,35 @@
 	struct bin_attribute eeprom;
 	struct device *base_dev;
 	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
 	nvmem_reg_read_t reg_read;
 	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
 	struct gpio_desc *wp_gpio;
 	void *priv;
 };
 
-struct nvmem_cell {
+struct nvmem_cell_entry {
 	const char *name;
 	int offset;
 	int bytes;
 	int bit_offset;
 	int nbits;
 	struct device_node *np;
-	struct nvmem_device___2 *nvmem;
+	struct nvmem_device *nvmem;
 	struct list_head node;
 };
 
-struct net_device_devres {
-	struct net_device *ndev;
-};
-
-struct __kernel_old_timespec {
-	__kernel_old_time_t tv_sec;
-	long int tv_nsec;
-};
-
-struct __kernel_sock_timeval {
-	__s64 tv_sec;
-	__s64 tv_usec;
-};
-
-struct mmsghdr {
-	struct user_msghdr msg_hdr;
-	unsigned int msg_len;
-};
-
-struct scm_timestamping_internal {
-	struct timespec64 ts[3];
-};
-
-enum sock_shutdown_cmd {
-	SHUT_RD = 0,
-	SHUT_WR = 1,
-	SHUT_RDWR = 2,
-};
-
-struct net_proto_family {
-	int family;
-	int (*create)(struct net *, struct socket *, int, int);
-	struct module *owner;
-};
-
-enum {
-	SOCK_WAKE_IO = 0,
-	SOCK_WAKE_WAITD = 1,
-	SOCK_WAKE_SPACE = 2,
-	SOCK_WAKE_URG = 3,
-};
-
-struct ifconf {
-	int ifc_len;
-	union {
-		char *ifcu_buf;
-		struct ifreq *ifcu_req;
-	} ifc_ifcu;
-};
-
-struct compat_ifmap {
-	compat_ulong_t mem_start;
-	compat_ulong_t mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
-};
-
-struct compat_if_settings {
-	unsigned int type;
-	unsigned int size;
-	compat_uptr_t ifs_ifsu;
-};
-
-struct compat_ifreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union {
-		struct sockaddr ifru_addr;
-		struct sockaddr ifru_dstaddr;
-		struct sockaddr ifru_broadaddr;
-		struct sockaddr ifru_netmask;
-		struct sockaddr ifru_hwaddr;
-		short int ifru_flags;
-		compat_int_t ifru_ivalue;
-		compat_int_t ifru_mtu;
-		struct compat_ifmap ifru_map;
-		char ifru_slave[16];
-		char ifru_newname[16];
-		compat_caddr_t ifru_data;
-		struct compat_if_settings ifru_settings;
-	} ifr_ifru;
-};
-
-struct compat_ifconf {
-	compat_int_t ifc_len;
-	compat_caddr_t ifcbuf;
-};
-
-struct compat_ethtool_rx_flow_spec {
-	u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	compat_u64 ring_cookie;
-	u32 location;
-};
-
-struct compat_ethtool_rxnfc {
-	u32 cmd;
-	u32 flow_type;
-	compat_u64 data;
-	struct compat_ethtool_rx_flow_spec fs;
-	u32 rule_cnt;
-	u32 rule_locs[0];
-};
-
-struct libipw_device;
-
-struct iw_spy_data;
-
-struct iw_public_data {
-	struct iw_spy_data *spy_data;
-	struct libipw_device *libipw;
-};
-
-struct iw_param {
-	__s32 value;
-	__u8 fixed;
-	__u8 disabled;
-	__u16 flags;
-};
-
-struct iw_point {
-	void *pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct iw_freq {
-	__s32 m;
-	__s16 e;
-	__u8 i;
-	__u8 flags;
-};
-
-struct iw_quality {
-	__u8 qual;
-	__u8 level;
-	__u8 noise;
-	__u8 updated;
-};
-
-struct iw_discarded {
-	__u32 nwid;
-	__u32 code;
-	__u32 fragment;
-	__u32 retries;
-	__u32 misc;
-};
-
-struct iw_missed {
-	__u32 beacon;
-};
-
-struct iw_statistics {
-	__u16 status;
-	struct iw_quality qual;
-	struct iw_discarded discard;
-	struct iw_missed miss;
-};
-
-union iwreq_data {
-	char name[16];
-	struct iw_point essid;
-	struct iw_param nwid;
-	struct iw_freq freq;
-	struct iw_param sens;
-	struct iw_param bitrate;
-	struct iw_param txpower;
-	struct iw_param rts;
-	struct iw_param frag;
-	__u32 mode;
-	struct iw_param retry;
-	struct iw_point encoding;
-	struct iw_param power;
-	struct iw_quality qual;
-	struct sockaddr ap_addr;
-	struct sockaddr addr;
-	struct iw_param param;
-	struct iw_point data;
-};
-
-struct iw_priv_args {
-	__u32 cmd;
-	__u16 set_args;
-	__u16 get_args;
-	char name[16];
-};
-
-struct compat_mmsghdr {
-	struct compat_msghdr msg_hdr;
-	compat_uint_t msg_len;
-};
-
-struct iw_request_info {
-	__u16 cmd;
-	__u16 flags;
-};
-
-struct iw_spy_data {
-	int spy_number;
-	u_char spy_address[48];
-	struct iw_quality spy_stat[8];
-	struct iw_quality spy_thr_low;
-	struct iw_quality spy_thr_high;
-	u_char spy_thr_under[8];
-};
-
-enum {
-	SOF_TIMESTAMPING_TX_HARDWARE = 1,
-	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
-	SOF_TIMESTAMPING_RX_HARDWARE = 4,
-	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
-	SOF_TIMESTAMPING_SOFTWARE = 16,
-	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
-	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
-	SOF_TIMESTAMPING_OPT_ID = 128,
-	SOF_TIMESTAMPING_TX_SCHED = 256,
-	SOF_TIMESTAMPING_TX_ACK = 512,
-	SOF_TIMESTAMPING_OPT_CMSG = 1024,
-	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
-	SOF_TIMESTAMPING_OPT_STATS = 4096,
-	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
-	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
-	SOF_TIMESTAMPING_LAST = 16384,
-	SOF_TIMESTAMPING_MASK = 32767,
-};
-
-struct scm_ts_pktinfo {
-	__u32 if_index;
-	__u32 pkt_length;
-	__u32 reserved[2];
-};
-
-struct sock_skb_cb {
-	u32 dropcount;
-};
-
-struct sock_ee_data_rfc4884 {
-	__u16 len;
-	__u8 flags;
-	__u8 reserved;
-};
-
-struct sock_extended_err {
-	__u32 ee_errno;
-	__u8 ee_origin;
-	__u8 ee_type;
-	__u8 ee_code;
-	__u8 ee_pad;
-	__u32 ee_info;
-	union {
-		__u32 ee_data;
-		struct sock_ee_data_rfc4884 ee_rfc4884;
-	};
-};
-
-struct sock_exterr_skb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	struct sock_extended_err ee;
-	u16 addr_offset;
-	__be16 port;
-	u8 opt_stats: 1;
-	u8 unused: 7;
-};
-
-struct used_address {
-	struct __kernel_sockaddr_storage name;
-	unsigned int name_len;
-};
-
-struct linger {
-	int l_onoff;
-	int l_linger;
-};
-
-struct cmsghdr {
-	__kernel_size_t cmsg_len;
-	int cmsg_level;
-	int cmsg_type;
-};
-
-struct ucred {
-	__u32 pid;
-	__u32 uid;
-	__u32 gid;
-};
-
-struct mmpin {
-	struct user_struct *user;
-	unsigned int num_pg;
-};
-
-struct ubuf_info {
-	void (*callback)(struct ubuf_info *, bool);
-	union {
-		struct {
-			long unsigned int desc;
-			void *ctx;
-		};
-		struct {
-			u32 id;
-			u16 len;
-			u16 zerocopy: 1;
-			u32 bytelen;
-		};
-	};
-	refcount_t refcnt;
-	struct mmpin mmp;
-};
-
-enum {
-	SKB_GSO_TCPV4 = 1,
-	SKB_GSO_DODGY = 2,
-	SKB_GSO_TCP_ECN = 4,
-	SKB_GSO_TCP_FIXEDID = 8,
-	SKB_GSO_TCPV6 = 16,
-	SKB_GSO_FCOE = 32,
-	SKB_GSO_GRE = 64,
-	SKB_GSO_GRE_CSUM = 128,
-	SKB_GSO_IPXIP4 = 256,
-	SKB_GSO_IPXIP6 = 512,
-	SKB_GSO_UDP_TUNNEL = 1024,
-	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
-	SKB_GSO_PARTIAL = 4096,
-	SKB_GSO_TUNNEL_REMCSUM = 8192,
-	SKB_GSO_SCTP = 16384,
-	SKB_GSO_ESP = 32768,
-	SKB_GSO_UDP = 65536,
-	SKB_GSO_UDP_L4 = 131072,
-	SKB_GSO_FRAGLIST = 262144,
-};
-
-struct prot_inuse {
-	int val[64];
-};
-
-struct gro_list {
-	struct list_head list;
-	int count;
-};
-
-struct napi_struct {
-	struct list_head poll_list;
-	long unsigned int state;
-	int weight;
-	int defer_hard_irqs_count;
-	long unsigned int gro_bitmask;
-	int (*poll)(struct napi_struct *, int);
-	int poll_owner;
-	struct net_device *dev;
-	struct gro_list gro_hash[8];
-	struct sk_buff *skb;
-	struct list_head rx_list;
-	int rx_count;
-	struct hrtimer timer;
-	struct list_head dev_list;
-	struct hlist_node napi_hash_node;
-	unsigned int napi_id;
-};
-
-struct sd_flow_limit {
-	u64 count;
-	unsigned int num_buckets;
-	unsigned int history_head;
-	u16 history[128];
-	u8 buckets[0];
-};
-
-struct softnet_data {
-	struct list_head poll_list;
-	struct sk_buff_head process_queue;
-	unsigned int processed;
-	unsigned int time_squeeze;
-	unsigned int received_rps;
-	struct softnet_data *rps_ipi_list;
-	struct sd_flow_limit *flow_limit;
-	struct Qdisc *output_queue;
-	struct Qdisc **output_queue_tailp;
-	struct sk_buff *completion_queue;
-	struct sk_buff_head xfrm_backlog;
-	struct {
-		u16 recursion;
-		u8 more;
-	} xmit;
-	int: 32;
-	unsigned int input_queue_head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t csd;
-	struct softnet_data *rps_ipi_next;
-	unsigned int cpu;
-	unsigned int input_queue_tail;
-	unsigned int dropped;
-	struct sk_buff_head input_pkt_queue;
-	struct napi_struct backlog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum txtime_flags {
-	SOF_TXTIME_DEADLINE_MODE = 1,
-	SOF_TXTIME_REPORT_ERRORS = 2,
-	SOF_TXTIME_FLAGS_LAST = 2,
-	SOF_TXTIME_FLAGS_MASK = 3,
-};
-
-struct sock_txtime {
-	__kernel_clockid_t clockid;
-	__u32 flags;
-};
-
-enum sk_pacing {
-	SK_PACING_NONE = 0,
-	SK_PACING_NEEDED = 1,
-	SK_PACING_FQ = 2,
-};
-
-struct sockcm_cookie {
-	u64 transmit_time;
-	u32 mark;
-	u16 tsflags;
-};
-
-struct fastopen_queue {
-	struct request_sock *rskq_rst_head;
-	struct request_sock *rskq_rst_tail;
-	spinlock_t lock;
-	int qlen;
-	int max_qlen;
-	struct tcp_fastopen_context *ctx;
-};
-
-struct request_sock_queue {
-	spinlock_t rskq_lock;
-	u8 rskq_defer_accept;
-	u32 synflood_warned;
-	atomic_t qlen;
-	atomic_t young;
-	struct request_sock *rskq_accept_head;
-	struct request_sock *rskq_accept_tail;
-	struct fastopen_queue fastopenq;
-};
-
-struct inet_connection_sock_af_ops {
-	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
-	void (*send_check)(struct sock *, struct sk_buff *);
-	int (*rebuild_header)(struct sock *);
-	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
-	int (*conn_request)(struct sock *, struct sk_buff *);
-	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
-	u16 net_header_len;
-	u16 net_frag_header_len;
-	u16 sockaddr_len;
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
-	void (*mtu_reduced)(struct sock *);
-};
-
-struct inet_bind_bucket;
-
-struct tcp_ulp_ops;
-
-struct inet_connection_sock {
-	struct inet_sock icsk_inet;
-	struct request_sock_queue icsk_accept_queue;
-	struct inet_bind_bucket *icsk_bind_hash;
-	long unsigned int icsk_timeout;
-	struct timer_list icsk_retransmit_timer;
-	struct timer_list icsk_delack_timer;
-	__u32 icsk_rto;
-	__u32 icsk_rto_min;
-	__u32 icsk_delack_max;
-	__u32 icsk_pmtu_cookie;
-	const struct tcp_congestion_ops *icsk_ca_ops;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	const struct tcp_ulp_ops *icsk_ulp_ops;
-	void *icsk_ulp_data;
-	void (*icsk_clean_acked)(struct sock *, u32);
-	struct hlist_node icsk_listen_portaddr_node;
-	unsigned int (*icsk_sync_mss)(struct sock *, u32);
-	__u8 icsk_ca_state: 5;
-	__u8 icsk_ca_initialized: 1;
-	__u8 icsk_ca_setsockopt: 1;
-	__u8 icsk_ca_dst_locked: 1;
-	__u8 icsk_retransmits;
-	__u8 icsk_pending;
-	__u8 icsk_backoff;
-	__u8 icsk_syn_retries;
-	__u8 icsk_probes_out;
-	__u16 icsk_ext_hdr_len;
-	struct {
-		__u8 pending;
-		__u8 quick;
-		__u8 pingpong;
-		__u8 retry;
-		__u32 ato;
-		long unsigned int timeout;
-		__u32 lrcvtime;
-		__u16 last_seg_size;
-		__u16 rcv_mss;
-	} icsk_ack;
-	struct {
-		int enabled;
-		int search_high;
-		int search_low;
-		int probe_size;
-		u32 probe_timestamp;
-	} icsk_mtup;
-	u32 icsk_probes_tstamp;
-	u32 icsk_user_timeout;
-	u64 icsk_ca_priv[13];
-};
-
-struct inet_bind_bucket {
-	possible_net_t ib_net;
-	int l3mdev;
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct in6_addr fast_v6_rcv_saddr;
-	__be32 fast_rcv_saddr;
-	short unsigned int fast_sk_family;
-	bool fast_ipv6_only;
-	struct hlist_node node;
-	struct hlist_head owners;
-};
-
-struct tcp_ulp_ops {
-	struct list_head list;
-	int (*init)(struct sock *);
-	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
-	void (*release)(struct sock *);
-	int (*get_info)(const struct sock *, struct sk_buff *);
-	size_t (*get_info_size)(const struct sock *);
-	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
-	char name[16];
-	struct module *owner;
-};
-
-struct tcp_fastopen_cookie {
-	__le64 val[2];
-	s8 len;
-	bool exp;
-};
-
-struct tcp_sack_block {
-	u32 start_seq;
-	u32 end_seq;
-};
-
-struct tcp_options_received {
-	int ts_recent_stamp;
-	u32 ts_recent;
-	u32 rcv_tsval;
-	u32 rcv_tsecr;
-	u16 saw_tstamp: 1;
-	u16 tstamp_ok: 1;
-	u16 dsack: 1;
-	u16 wscale_ok: 1;
-	u16 sack_ok: 3;
-	u16 smc_ok: 1;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u8 saw_unknown: 1;
-	u8 unused: 7;
-	u8 num_sacks;
-	u16 user_mss;
-	u16 mss_clamp;
-};
-
-struct tcp_rack {
-	u64 mstamp;
-	u32 rtt_us;
-	u32 end_seq;
-	u32 last_delivered;
-	u8 reo_wnd_steps;
-	u8 reo_wnd_persist: 5;
-	u8 dsack_seen: 1;
-	u8 advanced: 1;
-};
-
-struct tcp_sock_af_ops;
-
-struct tcp_md5sig_info;
-
-struct tcp_fastopen_request;
-
-struct tcp_sock {
-	struct inet_connection_sock inet_conn;
-	u16 tcp_header_len;
-	u16 gso_segs;
-	__be32 pred_flags;
-	u64 bytes_received;
-	u32 segs_in;
-	u32 data_segs_in;
-	u32 rcv_nxt;
-	u32 copied_seq;
-	u32 rcv_wup;
-	u32 snd_nxt;
-	u32 segs_out;
-	u32 data_segs_out;
-	u64 bytes_sent;
-	u64 bytes_acked;
-	u32 dsack_dups;
-	u32 snd_una;
-	u32 snd_sml;
-	u32 rcv_tstamp;
-	u32 lsndtime;
-	u32 last_oow_ack_time;
-	u32 compressed_ack_rcv_nxt;
-	u32 tsoffset;
-	struct list_head tsq_node;
-	struct list_head tsorted_sent_queue;
-	u32 snd_wl1;
-	u32 snd_wnd;
-	u32 max_window;
-	u32 mss_cache;
-	u32 window_clamp;
-	u32 rcv_ssthresh;
-	struct tcp_rack rack;
-	u16 advmss;
-	u8 compressed_ack;
-	u8 dup_ack_counter: 2;
-	u8 tlp_retrans: 1;
-	u8 unused: 5;
-	u32 chrono_start;
-	u32 chrono_stat[3];
-	u8 chrono_type: 2;
-	u8 rate_app_limited: 1;
-	u8 fastopen_connect: 1;
-	u8 fastopen_no_cookie: 1;
-	u8 is_sack_reneg: 1;
-	u8 fastopen_client_fail: 2;
-	u8 nonagle: 4;
-	u8 thin_lto: 1;
-	u8 recvmsg_inq: 1;
-	u8 repair: 1;
-	u8 frto: 1;
-	u8 repair_queue;
-	u8 save_syn: 2;
-	u8 syn_data: 1;
-	u8 syn_fastopen: 1;
-	u8 syn_fastopen_exp: 1;
-	u8 syn_fastopen_ch: 1;
-	u8 syn_data_acked: 1;
-	u8 is_cwnd_limited: 1;
-	u32 tlp_high_seq;
-	u32 tcp_tx_delay;
-	u64 tcp_wstamp_ns;
-	u64 tcp_clock_cache;
-	u64 tcp_mstamp;
-	u32 srtt_us;
-	u32 mdev_us;
-	u32 mdev_max_us;
-	u32 rttvar_us;
-	u32 rtt_seq;
-	struct minmax rtt_min;
-	u32 packets_out;
-	u32 retrans_out;
-	u32 max_packets_out;
-	u32 max_packets_seq;
-	u16 urg_data;
-	u8 ecn_flags;
-	u8 keepalive_probes;
-	u32 reordering;
-	u32 reord_seen;
-	u32 snd_up;
-	struct tcp_options_received rx_opt;
-	u32 snd_ssthresh;
-	u32 snd_cwnd;
-	u32 snd_cwnd_cnt;
-	u32 snd_cwnd_clamp;
-	u32 snd_cwnd_used;
-	u32 snd_cwnd_stamp;
-	u32 prior_cwnd;
-	u32 prr_delivered;
-	u32 prr_out;
-	u32 delivered;
-	u32 delivered_ce;
-	u32 lost;
-	u32 app_limited;
-	u64 first_tx_mstamp;
-	u64 delivered_mstamp;
-	u32 rate_delivered;
-	u32 rate_interval_us;
-	u32 rcv_wnd;
-	u32 write_seq;
-	u32 notsent_lowat;
-	u32 pushed_seq;
-	u32 lost_out;
-	u32 sacked_out;
-	struct hrtimer pacing_timer;
-	struct hrtimer compressed_ack_timer;
-	struct sk_buff *lost_skb_hint;
-	struct sk_buff *retransmit_skb_hint;
-	struct rb_root out_of_order_queue;
-	struct sk_buff *ooo_last_skb;
-	struct tcp_sack_block duplicate_sack[1];
-	struct tcp_sack_block selective_acks[4];
-	struct tcp_sack_block recv_sack_cache[4];
-	struct sk_buff *highest_sack;
-	int lost_cnt_hint;
-	u32 prior_ssthresh;
-	u32 high_seq;
-	u32 retrans_stamp;
-	u32 undo_marker;
-	int undo_retrans;
-	u64 bytes_retrans;
-	u32 total_retrans;
-	u32 urg_seq;
-	unsigned int keepalive_time;
-	unsigned int keepalive_intvl;
-	int linger2;
-	u8 bpf_sock_ops_cb_flags;
-	u16 timeout_rehash;
-	u32 rcv_ooopack;
-	u32 rcv_rtt_last_tsecr;
-	struct {
-		u32 rtt_us;
-		u32 seq;
-		u64 time;
-	} rcv_rtt_est;
-	struct {
-		u32 space;
-		u32 seq;
-		u64 time;
-	} rcvq_space;
-	struct {
-		u32 probe_seq_start;
-		u32 probe_seq_end;
-	} mtu_probe;
-	u32 mtu_info;
-	bool is_mptcp;
-	bool syn_smc;
-	const struct tcp_sock_af_ops *af_specific;
-	struct tcp_md5sig_info *md5sig_info;
-	struct tcp_fastopen_request *fastopen_req;
-	struct request_sock *fastopen_rsk;
-	struct saved_syn *saved_syn;
-};
-
-struct tcp_md5sig_key;
-
-struct tcp_sock_af_ops {
-	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	int (*md5_parse)(struct sock *, int, sockptr_t, int);
-};
-
-struct tcp_md5sig_info {
-	struct hlist_head head;
-	struct callback_head rcu;
-};
-
-struct tcp_fastopen_request {
-	struct tcp_fastopen_cookie cookie;
-	struct msghdr *data;
-	size_t size;
-	int copied;
-	struct ubuf_info *uarg;
-};
-
-union tcp_md5_addr {
-	struct in_addr a4;
-	struct in6_addr a6;
-};
-
-struct tcp_md5sig_key {
-	struct hlist_node node;
-	u8 keylen;
-	u8 family;
-	u8 prefixlen;
-	union tcp_md5_addr addr;
-	int l3index;
-	u8 key[80];
-	struct callback_head rcu;
-};
-
-struct net_protocol {
-	int (*early_demux)(struct sk_buff *);
-	int (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, u32);
-	unsigned int no_policy: 1;
-	unsigned int netns_ok: 1;
-	unsigned int icmp_strict_tag_validation: 1;
-};
-
-struct cgroup_cls_state {
-	struct cgroup_subsys_state css;
-	u32 classid;
-};
-
-enum {
-	SK_MEMINFO_RMEM_ALLOC = 0,
-	SK_MEMINFO_RCVBUF = 1,
-	SK_MEMINFO_WMEM_ALLOC = 2,
-	SK_MEMINFO_SNDBUF = 3,
-	SK_MEMINFO_FWD_ALLOC = 4,
-	SK_MEMINFO_WMEM_QUEUED = 5,
-	SK_MEMINFO_OPTMEM = 6,
-	SK_MEMINFO_BACKLOG = 7,
-	SK_MEMINFO_DROPS = 8,
-	SK_MEMINFO_VARS = 9,
-};
-
-enum sknetlink_groups {
-	SKNLGRP_NONE = 0,
-	SKNLGRP_INET_TCP_DESTROY = 1,
-	SKNLGRP_INET_UDP_DESTROY = 2,
-	SKNLGRP_INET6_TCP_DESTROY = 3,
-	SKNLGRP_INET6_UDP_DESTROY = 4,
-	__SKNLGRP_MAX = 5,
-};
-
-struct inet_request_sock {
-	struct request_sock req;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u16 tstamp_ok: 1;
-	u16 sack_ok: 1;
-	u16 wscale_ok: 1;
-	u16 ecn_ok: 1;
-	u16 acked: 1;
-	u16 no_srccheck: 1;
-	u16 smc_ok: 1;
-	u32 ir_mark;
-	union {
-		struct ip_options_rcu *ireq_opt;
-		struct {
-			struct ipv6_txoptions *ipv6_opt;
-			struct sk_buff *pktopts;
-		};
-	};
-};
-
-struct tcp_request_sock_ops;
-
-struct tcp_request_sock {
-	struct inet_request_sock req;
-	const struct tcp_request_sock_ops *af_specific;
-	u64 snt_synack;
-	bool tfo_listener;
-	bool is_mptcp;
-	bool drop_req;
-	u32 txhash;
-	u32 rcv_isn;
-	u32 snt_isn;
-	u32 ts_off;
-	u32 last_oow_ack_time;
-	u32 rcv_nxt;
-	u8 syn_tos;
-};
-
-enum tcp_synack_type {
-	TCP_SYNACK_NORMAL = 0,
-	TCP_SYNACK_FASTOPEN = 1,
-	TCP_SYNACK_COOKIE = 2,
-};
-
-struct tcp_request_sock_ops {
-	u16 mss_clamp;
-	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	void (*init_req)(struct request_sock *, const struct sock *, struct sk_buff *);
-	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
-	struct dst_entry * (*route_req)(const struct sock *, struct flowi *, const struct request_sock *);
-	u32 (*init_seq)(const struct sk_buff *);
-	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
-	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
-};
-
-struct nf_conntrack {
-	atomic_t use;
-};
-
-enum {
-	SKB_FCLONE_UNAVAILABLE = 0,
-	SKB_FCLONE_ORIG = 1,
-	SKB_FCLONE_CLONE = 2,
-};
-
-struct sk_buff_fclones {
-	struct sk_buff skb1;
-	struct sk_buff skb2;
-	refcount_t fclone_ref;
-};
-
-struct skb_seq_state {
-	__u32 lower_offset;
-	__u32 upper_offset;
-	__u32 frag_idx;
-	__u32 stepped_offset;
-	struct sk_buff *root_skb;
-	struct sk_buff *cur_skb;
-	__u8 *frag_data;
-};
-
-struct skb_checksum_ops {
-	__wsum (*update)(const void *, int, __wsum);
-	__wsum (*combine)(__wsum, __wsum, int, int);
-};
-
-struct skb_gso_cb {
-	union {
-		int mac_offset;
-		int data_offset;
-	};
-	int encap_level;
-	__wsum csum;
-	__u16 csum_start;
-};
-
-struct napi_gro_cb {
-	void *frag0;
-	unsigned int frag0_len;
-	int data_offset;
-	u16 flush;
-	u16 flush_id;
-	u16 count;
-	u16 gro_remcsum_start;
-	long unsigned int age;
-	u16 proto;
-	u8 same_flow: 1;
-	u8 encap_mark: 1;
-	u8 csum_valid: 1;
-	u8 csum_cnt: 3;
-	u8 free: 2;
-	u8 is_ipv6: 1;
-	u8 is_fou: 1;
-	u8 is_atomic: 1;
-	u8 recursion_counter: 4;
-	u8 is_flist: 1;
-	__wsum csum;
-	struct sk_buff *last;
-};
-
-enum skb_free_reason {
-	SKB_REASON_CONSUMED = 0,
-	SKB_REASON_DROPPED = 1,
-};
-
-struct vlan_hdr {
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct vlan_ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct qdisc_walker {
-	int stop;
-	int skip;
-	int count;
-	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
-};
-
-struct ip_auth_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__be16 reserved;
-	__be32 spi;
-	__be32 seq_no;
-	__u8 auth_data[0];
-};
-
-struct frag_hdr {
-	__u8 nexthdr;
-	__u8 reserved;
-	__be16 frag_off;
-	__be32 identification;
-};
-
-enum {
-	SCM_TSTAMP_SND = 0,
-	SCM_TSTAMP_SCHED = 1,
-	SCM_TSTAMP_ACK = 2,
-};
-
-struct mpls_shim_hdr {
-	__be32 label_stack_entry;
-};
-
-struct napi_alloc_cache {
-	struct page_frag_cache page;
-	unsigned int skb_count;
-	void *skb_cache[64];
-};
-
-struct ahash_request___2;
-
-struct scm_cookie {
-	struct pid *pid;
-	struct scm_fp_list *fp;
-	struct scm_creds creds;
-	u32 secid;
-};
-
-struct scm_timestamping {
-	struct __kernel_old_timespec ts[3];
-};
-
-struct scm_timestamping64 {
-	struct __kernel_timespec ts[3];
-};
-
-enum {
-	TCA_STATS_UNSPEC = 0,
-	TCA_STATS_BASIC = 1,
-	TCA_STATS_RATE_EST = 2,
-	TCA_STATS_QUEUE = 3,
-	TCA_STATS_APP = 4,
-	TCA_STATS_RATE_EST64 = 5,
-	TCA_STATS_PAD = 6,
-	TCA_STATS_BASIC_HW = 7,
-	TCA_STATS_PKT64 = 8,
-	__TCA_STATS_MAX = 9,
-};
-
-struct gnet_stats_basic {
-	__u64 bytes;
-	__u32 packets;
-};
-
-struct gnet_stats_rate_est {
-	__u32 bps;
-	__u32 pps;
-};
-
-struct gnet_stats_rate_est64 {
-	__u64 bps;
-	__u64 pps;
-};
-
-struct gnet_estimator {
-	signed char interval;
-	unsigned char ewma_log;
-};
-
-struct net_rate_estimator {
-	struct gnet_stats_basic_packed *bstats;
-	spinlock_t *stats_lock;
-	seqcount_t *running;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	u8 ewma_log;
-	u8 intvl_log;
-	seqcount_t seq;
-	u64 last_packets;
-	u64 last_bytes;
-	u64 avpps;
-	u64 avbps;
-	long unsigned int next_jiffies;
-	struct timer_list timer;
-	struct callback_head rcu;
-};
-
-struct rtgenmsg {
-	unsigned char rtgen_family;
-};
-
-enum rtnetlink_groups {
-	RTNLGRP_NONE = 0,
-	RTNLGRP_LINK = 1,
-	RTNLGRP_NOTIFY = 2,
-	RTNLGRP_NEIGH = 3,
-	RTNLGRP_TC = 4,
-	RTNLGRP_IPV4_IFADDR = 5,
-	RTNLGRP_IPV4_MROUTE = 6,
-	RTNLGRP_IPV4_ROUTE = 7,
-	RTNLGRP_IPV4_RULE = 8,
-	RTNLGRP_IPV6_IFADDR = 9,
-	RTNLGRP_IPV6_MROUTE = 10,
-	RTNLGRP_IPV6_ROUTE = 11,
-	RTNLGRP_IPV6_IFINFO = 12,
-	RTNLGRP_DECnet_IFADDR = 13,
-	RTNLGRP_NOP2 = 14,
-	RTNLGRP_DECnet_ROUTE = 15,
-	RTNLGRP_DECnet_RULE = 16,
-	RTNLGRP_NOP4 = 17,
-	RTNLGRP_IPV6_PREFIX = 18,
-	RTNLGRP_IPV6_RULE = 19,
-	RTNLGRP_ND_USEROPT = 20,
-	RTNLGRP_PHONET_IFADDR = 21,
-	RTNLGRP_PHONET_ROUTE = 22,
-	RTNLGRP_DCB = 23,
-	RTNLGRP_IPV4_NETCONF = 24,
-	RTNLGRP_IPV6_NETCONF = 25,
-	RTNLGRP_MDB = 26,
-	RTNLGRP_MPLS_ROUTE = 27,
-	RTNLGRP_NSID = 28,
-	RTNLGRP_MPLS_NETCONF = 29,
-	RTNLGRP_IPV4_MROUTE_R = 30,
-	RTNLGRP_IPV6_MROUTE_R = 31,
-	RTNLGRP_NEXTHOP = 32,
-	RTNLGRP_BRVLAN = 33,
-	__RTNLGRP_MAX = 34,
-};
-
-enum {
-	NETNSA_NONE = 0,
-	NETNSA_NSID = 1,
-	NETNSA_PID = 2,
-	NETNSA_FD = 3,
-	NETNSA_TARGET_NSID = 4,
-	NETNSA_CURRENT_NSID = 5,
-	__NETNSA_MAX = 6,
-};
-
-struct pcpu_gen_cookie {
-	local_t nesting;
-	u64 last;
-};
-
-struct gen_cookie {
-	struct pcpu_gen_cookie *local;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic64_t forward_last;
-	atomic64_t reverse_last;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum rtnl_link_flags {
-	RTNL_FLAG_DOIT_UNLOCKED = 1,
-};
-
-struct net_fill_args {
-	u32 portid;
-	u32 seq;
-	int flags;
-	int cmd;
-	int nsid;
-	bool add_ref;
-	int ref_nsid;
-};
-
-struct rtnl_net_dump_cb {
-	struct net *tgt_net;
-	struct net *ref_net;
-	struct sk_buff *skb;
-	struct net_fill_args fillargs;
-	int idx;
-	int s_idx;
-};
-
-typedef u16 u_int16_t;
-
-typedef u32 u_int32_t;
-
-typedef u64 u_int64_t;
-
-struct flow_dissector_key_control {
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
-};
-
-enum flow_dissect_ret {
-	FLOW_DISSECT_RET_OUT_GOOD = 0,
-	FLOW_DISSECT_RET_OUT_BAD = 1,
-	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
-	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
-	FLOW_DISSECT_RET_CONTINUE = 4,
-};
-
-struct flow_dissector_key_basic {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-};
-
-struct flow_dissector_key_tags {
-	u32 flow_label;
-};
-
-struct flow_dissector_key_vlan {
-	union {
-		struct {
-			u16 vlan_id: 12;
-			u16 vlan_dei: 1;
-			u16 vlan_priority: 3;
-		};
-		__be16 vlan_tci;
-	};
-	__be16 vlan_tpid;
-};
-
-struct flow_dissector_mpls_lse {
-	u32 mpls_ttl: 8;
-	u32 mpls_bos: 1;
-	u32 mpls_tc: 3;
-	u32 mpls_label: 20;
-};
-
-struct flow_dissector_key_mpls {
-	struct flow_dissector_mpls_lse ls[7];
-	u8 used_lses;
-};
-
-struct flow_dissector_key_enc_opts {
-	u8 data[255];
-	u8 len;
-	__be16 dst_opt_type;
-};
-
-struct flow_dissector_key_keyid {
-	__be32 keyid;
-};
-
-struct flow_dissector_key_ipv4_addrs {
-	__be32 src;
-	__be32 dst;
-};
-
-struct flow_dissector_key_ipv6_addrs {
-	struct in6_addr src;
-	struct in6_addr dst;
-};
-
-struct flow_dissector_key_tipc {
-	__be32 key;
-};
-
-struct flow_dissector_key_addrs {
-	union {
-		struct flow_dissector_key_ipv4_addrs v4addrs;
-		struct flow_dissector_key_ipv6_addrs v6addrs;
-		struct flow_dissector_key_tipc tipckey;
-	};
-};
-
-struct flow_dissector_key_arp {
-	__u32 sip;
-	__u32 tip;
-	__u8 op;
-	unsigned char sha[6];
-	unsigned char tha[6];
-};
-
-struct flow_dissector_key_ports {
-	union {
-		__be32 ports;
-		struct {
-			__be16 src;
-			__be16 dst;
-		};
-	};
-};
-
-struct flow_dissector_key_icmp {
-	struct {
-		u8 type;
-		u8 code;
-	};
-	u16 id;
-};
-
-struct flow_dissector_key_eth_addrs {
-	unsigned char dst[6];
-	unsigned char src[6];
-};
-
-struct flow_dissector_key_tcp {
-	__be16 flags;
-};
-
-struct flow_dissector_key_ip {
-	__u8 tos;
-	__u8 ttl;
-};
-
-struct flow_dissector_key_meta {
-	int ingress_ifindex;
-	u16 ingress_iftype;
-};
-
-struct flow_dissector_key_ct {
-	u16 ct_state;
-	u16 ct_zone;
-	u32 ct_mark;
-	u32 ct_labels[4];
-};
-
-struct flow_dissector_key_hash {
-	u32 hash;
-};
-
-struct flow_dissector_key {
-	enum flow_dissector_key_id key_id;
-	size_t offset;
-};
-
-struct flow_keys_basic {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-};
-
-struct flow_keys {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-	struct flow_dissector_key_tags tags;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_vlan cvlan;
-	struct flow_dissector_key_keyid keyid;
-	struct flow_dissector_key_ports ports;
-	struct flow_dissector_key_icmp icmp;
-	struct flow_dissector_key_addrs addrs;
-	int: 32;
-};
-
-struct flow_keys_digest {
-	u8 data[16];
-};
-
-enum ip_conntrack_info {
-	IP_CT_ESTABLISHED = 0,
-	IP_CT_RELATED = 1,
-	IP_CT_NEW = 2,
-	IP_CT_IS_REPLY = 3,
-	IP_CT_ESTABLISHED_REPLY = 3,
-	IP_CT_RELATED_REPLY = 4,
-	IP_CT_NUMBER = 5,
-	IP_CT_UNTRACKED = 7,
-};
-
-struct xt_table_info;
-
-struct xt_table {
-	struct list_head list;
-	unsigned int valid_hooks;
-	struct xt_table_info *private;
-	struct module *me;
-	u_int8_t af;
-	int priority;
-	int (*table_init)(struct net *);
-	const char name[32];
-};
-
-union nf_inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-struct ip_ct_tcp_state {
-	u_int32_t td_end;
-	u_int32_t td_maxend;
-	u_int32_t td_maxwin;
-	u_int32_t td_maxack;
-	u_int8_t td_scale;
-	u_int8_t flags;
-};
-
-struct ip_ct_tcp {
-	struct ip_ct_tcp_state seen[2];
-	u_int8_t state;
-	u_int8_t last_dir;
-	u_int8_t retrans;
-	u_int8_t last_index;
-	u_int32_t last_seq;
-	u_int32_t last_ack;
-	u_int32_t last_end;
-	u_int16_t last_win;
-	u_int8_t last_wscale;
-	u_int8_t last_flags;
-};
-
-union nf_conntrack_man_proto {
-	__be16 all;
-	struct {
-		__be16 port;
-	} tcp;
-	struct {
-		__be16 port;
-	} udp;
-	struct {
-		__be16 id;
-	} icmp;
-	struct {
-		__be16 port;
-	} dccp;
-	struct {
-		__be16 port;
-	} sctp;
-	struct {
-		__be16 key;
-	} gre;
-};
-
-struct nf_ct_dccp {
-	u_int8_t role[2];
-	u_int8_t state;
-	u_int8_t last_pkt;
-	u_int8_t last_dir;
-	u_int64_t handshake_seq;
-};
-
-struct ip_ct_sctp {
-	enum sctp_conntrack state;
-	__be32 vtag[2];
-	u8 last_dir;
-	u8 flags;
-};
-
-struct nf_ct_event;
-
-struct nf_ct_event_notifier {
-	int (*fcn)(unsigned int, struct nf_ct_event *);
-};
-
-struct nf_exp_event;
-
-struct nf_exp_event_notifier {
-	int (*fcn)(unsigned int, struct nf_exp_event *);
-};
-
-enum bpf_ret_code {
-	BPF_OK = 0,
-	BPF_DROP = 2,
-	BPF_REDIRECT = 7,
-	BPF_LWT_REROUTE = 128,
-};
-
-enum {
-	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
-};
-
-struct ip_tunnel_parm {
-	char name[16];
-	int link;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	struct iphdr iph;
-};
-
-struct ip_tunnel_key {
-	__be64 tun_id;
-	union {
-		struct {
-			__be32 src;
-			__be32 dst;
-		} ipv4;
-		struct {
-			struct in6_addr src;
-			struct in6_addr dst;
-		} ipv6;
-	} u;
-	__be16 tun_flags;
-	u8 tos;
-	u8 ttl;
-	__be32 label;
-	__be16 tp_src;
-	__be16 tp_dst;
-};
-
-struct dst_cache_pcpu;
-
-struct dst_cache {
-	struct dst_cache_pcpu *cache;
-	long unsigned int reset_ts;
-};
-
-struct ip_tunnel_info {
-	struct ip_tunnel_key key;
-	struct dst_cache dst_cache;
-	u8 options_len;
-	u8 mode;
-};
-
-struct lwtunnel_state {
-	__u16 type;
-	__u16 flags;
-	__u16 headroom;
-	atomic_t refcnt;
-	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
-	int (*orig_input)(struct sk_buff *);
-	struct callback_head rcu;
-	__u8 data[0];
-};
-
-union tcp_word_hdr {
-	struct tcphdr hdr;
-	__be32 words[5];
-};
-
-struct arphdr {
-	__be16 ar_hrd;
-	__be16 ar_pro;
-	unsigned char ar_hln;
-	unsigned char ar_pln;
-	__be16 ar_op;
-};
-
-struct fib_info;
-
-struct fib_nh {
-	struct fib_nh_common nh_common;
-	struct hlist_node nh_hash;
-	struct fib_info *nh_parent;
-	__u32 nh_tclassid;
-	__be32 nh_saddr;
-	int nh_saddr_genid;
-};
-
-struct fib_info {
-	struct hlist_node fib_hash;
-	struct hlist_node fib_lhash;
-	struct list_head nh_list;
-	struct net *fib_net;
-	int fib_treeref;
-	refcount_t fib_clntref;
-	unsigned int fib_flags;
-	unsigned char fib_dead;
-	unsigned char fib_protocol;
-	unsigned char fib_scope;
-	unsigned char fib_type;
-	__be32 fib_prefsrc;
-	u32 fib_tb_id;
-	u32 fib_priority;
-	struct dst_metrics *fib_metrics;
-	int fib_nhs;
-	bool fib_nh_is_v6;
-	bool nh_updated;
-	struct nexthop *nh;
-	struct callback_head rcu;
-	struct fib_nh fib_nh[0];
-};
-
-struct nh_info;
-
-struct nh_group;
-
-struct nexthop {
-	struct rb_node rb_node;
-	struct list_head fi_list;
-	struct list_head f6i_list;
-	struct list_head fdb_list;
-	struct list_head grp_list;
-	struct net *net;
-	u32 id;
-	u8 protocol;
-	u8 nh_flags;
-	bool is_group;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	union {
-		struct nh_info *nh_info;
-		struct nh_group *nh_grp;
-	};
-};
-
-struct nh_info {
-	struct hlist_node dev_hash;
-	struct nexthop *nh_parent;
-	u8 family;
-	bool reject_nh;
-	bool fdb_nh;
-	union {
-		struct fib_nh_common fib_nhc;
-		struct fib_nh fib_nh;
-		struct fib6_nh fib6_nh;
-	};
-};
-
-struct nh_grp_entry {
-	struct nexthop *nh;
-	u8 weight;
-	atomic_t upper_bound;
-	struct list_head nh_list;
-	struct nexthop *nh_parent;
-};
-
-struct nh_group {
-	struct nh_group *spare;
-	u16 num_nh;
-	bool mpath;
-	bool fdb_nh;
-	bool has_v4;
-	struct nh_grp_entry nh_entries[0];
-};
-
-enum metadata_type {
-	METADATA_IP_TUNNEL = 0,
-	METADATA_HW_PORT_MUX = 1,
-};
-
-struct hw_port_info {
-	struct net_device *lower_dev;
-	u32 port_id;
-};
-
-struct metadata_dst {
-	struct dst_entry dst;
-	enum metadata_type type;
-	union {
-		struct ip_tunnel_info tun_info;
-		struct hw_port_info port_info;
-	} u;
-};
-
-struct gre_base_hdr {
-	__be16 flags;
-	__be16 protocol;
-};
-
-struct gre_full_hdr {
-	struct gre_base_hdr fixed_header;
-	__be16 csum;
-	__be16 reserved1;
-	__be32 key;
-	__be32 seq;
-};
-
-struct pptp_gre_header {
-	struct gre_base_hdr gre_hd;
-	__be16 payload_len;
-	__be16 call_id;
-	__be32 seq;
-	__be32 ack;
-};
-
-struct tipc_basic_hdr {
-	__be32 w[4];
-};
-
-struct icmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 checksum;
-	union {
-		struct {
-			__be16 id;
-			__be16 sequence;
-		} echo;
-		__be32 gateway;
-		struct {
-			__be16 __unused;
-			__be16 mtu;
-		} frag;
-		__u8 reserved[4];
-	} un;
-};
-
-enum l2tp_debug_flags {
-	L2TP_MSG_DEBUG = 1,
-	L2TP_MSG_CONTROL = 2,
-	L2TP_MSG_SEQ = 4,
-	L2TP_MSG_DATA = 8,
-};
-
-struct pppoe_tag {
-	__be16 tag_type;
-	__be16 tag_len;
-	char tag_data[0];
-};
-
-struct pppoe_hdr {
-	__u8 type: 4;
-	__u8 ver: 4;
-	__u8 code;
-	__be16 sid;
-	__be16 length;
-	struct pppoe_tag tag[0];
-};
-
-struct mpls_label {
-	__be32 entry;
-};
-
-enum batadv_packettype {
-	BATADV_IV_OGM = 0,
-	BATADV_BCAST = 1,
-	BATADV_CODED = 2,
-	BATADV_ELP = 3,
-	BATADV_OGM2 = 4,
-	BATADV_UNICAST = 64,
-	BATADV_UNICAST_FRAG = 65,
-	BATADV_UNICAST_4ADDR = 66,
-	BATADV_ICMP = 67,
-	BATADV_UNICAST_TVLV = 68,
-};
-
-struct batadv_unicast_packet {
-	__u8 packet_type;
-	__u8 version;
-	__u8 ttl;
-	__u8 ttvn;
-	__u8 dest[6];
-};
-
-struct nf_conntrack_zone {
-	u16 id;
-	u8 flags;
-	u8 dir;
-};
-
-struct nf_conntrack_man {
-	union nf_inet_addr u3;
-	union nf_conntrack_man_proto u;
-	u_int16_t l3num;
-};
-
-struct nf_conntrack_tuple {
-	struct nf_conntrack_man src;
-	struct {
-		union nf_inet_addr u3;
-		union {
-			__be16 all;
-			struct {
-				__be16 port;
-			} tcp;
-			struct {
-				__be16 port;
-			} udp;
-			struct {
-				u_int8_t type;
-				u_int8_t code;
-			} icmp;
-			struct {
-				__be16 port;
-			} dccp;
-			struct {
-				__be16 port;
-			} sctp;
-			struct {
-				__be16 key;
-			} gre;
-		} u;
-		u_int8_t protonum;
-		u_int8_t dir;
-	} dst;
-};
-
-struct nf_conntrack_tuple_hash {
-	struct hlist_nulls_node hnnode;
-	struct nf_conntrack_tuple tuple;
-};
-
-struct nf_ct_udp {
-	long unsigned int stream_ts;
-};
-
-struct nf_ct_gre {
-	unsigned int stream_timeout;
-	unsigned int timeout;
-};
-
-union nf_conntrack_proto {
-	struct nf_ct_dccp dccp;
-	struct ip_ct_sctp sctp;
-	struct ip_ct_tcp tcp;
-	struct nf_ct_udp udp;
-	struct nf_ct_gre gre;
-	unsigned int tmpl_padto;
-};
-
-struct nf_ct_ext;
-
-struct nf_conn {
-	struct nf_conntrack ct_general;
-	spinlock_t lock;
-	u32 timeout;
-	struct nf_conntrack_zone zone;
-	struct nf_conntrack_tuple_hash tuplehash[2];
-	long unsigned int status;
-	u16 cpu;
-	possible_net_t ct_net;
-	struct hlist_node nat_bysource;
-	struct {	} __nfct_init_offset;
-	struct nf_conn *master;
-	u_int32_t mark;
-	u_int32_t secmark;
-	struct nf_ct_ext *ext;
-	union nf_conntrack_proto proto;
-};
-
-struct xt_table_info {
-	unsigned int size;
-	unsigned int number;
-	unsigned int initial_entries;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int stacksize;
-	void ***jumpstack;
-	unsigned char entries[0];
-};
-
-struct nf_conntrack_tuple_mask {
-	struct {
-		union nf_inet_addr u3;
-		union nf_conntrack_man_proto u;
-	} src;
-};
-
-struct nf_ct_ext {
-	u8 offset[9];
-	u8 len;
-	char data[0];
-};
-
-struct nf_conntrack_helper;
-
-struct nf_conntrack_expect {
-	struct hlist_node lnode;
-	struct hlist_node hnode;
-	struct nf_conntrack_tuple tuple;
-	struct nf_conntrack_tuple_mask mask;
-	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
-	struct nf_conntrack_helper *helper;
-	struct nf_conn *master;
-	struct timer_list timeout;
-	refcount_t use;
-	unsigned int flags;
-	unsigned int class;
-	union nf_inet_addr saved_addr;
-	union nf_conntrack_man_proto saved_proto;
-	enum ip_conntrack_dir dir;
-	struct callback_head rcu;
-};
-
-enum nf_ct_ext_id {
-	NF_CT_EXT_HELPER = 0,
-	NF_CT_EXT_NAT = 1,
-	NF_CT_EXT_SEQADJ = 2,
-	NF_CT_EXT_ACCT = 3,
-	NF_CT_EXT_ECACHE = 4,
-	NF_CT_EXT_TSTAMP = 5,
-	NF_CT_EXT_TIMEOUT = 6,
-	NF_CT_EXT_LABELS = 7,
-	NF_CT_EXT_SYNPROXY = 8,
-	NF_CT_EXT_NUM = 9,
-};
-
-struct nf_ct_event {
-	struct nf_conn *ct;
-	u32 portid;
-	int report;
-};
-
-struct nf_exp_event {
-	struct nf_conntrack_expect *exp;
-	u32 portid;
-	int report;
-};
-
-struct nf_conn_labels {
-	long unsigned int bits[2];
-};
-
-struct _flow_keys_digest_data {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-	__be32 ports;
-	__be32 src;
-	__be32 dst;
-};
-
-struct rps_sock_flow_table {
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 ents[0];
-};
-
-enum {
-	IF_OPER_UNKNOWN = 0,
-	IF_OPER_NOTPRESENT = 1,
-	IF_OPER_DOWN = 2,
-	IF_OPER_LOWERLAYERDOWN = 3,
-	IF_OPER_TESTING = 4,
-	IF_OPER_DORMANT = 5,
-	IF_OPER_UP = 6,
-};
-
-struct ipv4_devconf {
-	void *sysctl;
-	int data[32];
-	long unsigned int state[1];
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
 };
 
 enum nf_dev_hooks {
 	NF_NETDEV_INGRESS = 0,
-	NF_NETDEV_NUMHOOKS = 1,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
 };
 
 struct ifbond {
@@ -110713,11 +125912,6 @@
 
 typedef struct ifslave ifslave;
 
-struct netdev_boot_setup {
-	char name[16];
-	struct ifmap map;
-};
-
 enum {
 	NAPIF_STATE_SCHED = 1,
 	NAPIF_STATE_MISSED = 2,
@@ -110726,23 +125920,14 @@
 	NAPIF_STATE_LISTED = 16,
 	NAPIF_STATE_NO_BUSY_POLL = 32,
 	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
 };
 
-enum gro_result {
-	GRO_MERGED = 0,
-	GRO_MERGED_FREE = 1,
-	GRO_HELD = 2,
-	GRO_NORMAL = 3,
-	GRO_DROP = 4,
-	GRO_CONSUMED = 5,
-};
-
-typedef enum gro_result gro_result_t;
-
-enum netdev_queue_state_t {
-	__QUEUE_STATE_DRV_XOFF = 0,
-	__QUEUE_STATE_STACK_XOFF = 1,
-	__QUEUE_STATE_FROZEN = 2,
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
 };
 
 struct bpf_xdp_link {
@@ -110756,86 +125941,6 @@
 	struct notifier_block *nb;
 };
 
-struct netpoll;
-
-struct netpoll_info {
-	refcount_t refcnt;
-	struct semaphore dev_lock;
-	struct sk_buff_head txq;
-	struct delayed_work tx_work;
-	struct netpoll *netpoll;
-	struct callback_head rcu;
-};
-
-struct udp_tunnel_info {
-	short unsigned int type;
-	sa_family_t sa_family;
-	__be16 port;
-	u8 hw_priv;
-};
-
-struct in_ifaddr;
-
-struct ip_mc_list;
-
-struct in_device {
-	struct net_device *dev;
-	refcount_t refcnt;
-	int dead;
-	struct in_ifaddr *ifa_list;
-	struct ip_mc_list *mc_list;
-	struct ip_mc_list **mc_hash;
-	int mc_count;
-	spinlock_t mc_tomb_lock;
-	struct ip_mc_list *mc_tomb;
-	long unsigned int mr_v1_seen;
-	long unsigned int mr_v2_seen;
-	long unsigned int mr_maxdelay;
-	long unsigned int mr_qi;
-	long unsigned int mr_qri;
-	unsigned char mr_qrv;
-	unsigned char mr_gq_running;
-	unsigned char mr_ifc_count;
-	struct timer_list mr_gq_timer;
-	struct timer_list mr_ifc_timer;
-	struct neigh_parms *arp_parms;
-	struct ipv4_devconf cnf;
-	struct callback_head callback_head;
-};
-
-struct offload_callbacks {
-	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
-	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sk_buff *, int);
-};
-
-struct packet_offload {
-	__be16 type;
-	u16 priority;
-	struct offload_callbacks callbacks;
-	struct list_head list;
-};
-
-struct netdev_notifier_info_ext {
-	struct netdev_notifier_info info;
-	union {
-		u32 mtu;
-	} ext;
-};
-
-struct netdev_notifier_change_info {
-	struct netdev_notifier_info info;
-	unsigned int flags_changed;
-};
-
-struct netdev_notifier_changeupper_info {
-	struct netdev_notifier_info info;
-	struct net_device *upper_dev;
-	bool master;
-	bool linking;
-	void *upper_info;
-};
-
 struct netdev_notifier_changelowerstate_info {
 	struct netdev_notifier_info info;
 	void *lower_state_info;
@@ -110846,7 +125951,23 @@
 	const unsigned char *dev_addr;
 };
 
-typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
 
 enum {
 	NESTED_SYNC_IMM_BIT = 0,
@@ -110868,100 +125989,16 @@
 	struct netdev_bonding_info bonding_info;
 };
 
-union inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
 };
 
-struct netpoll {
-	struct net_device *dev;
-	char dev_name[16];
-	const char *name;
-	union inet_addr local_ip;
-	union inet_addr remote_ip;
-	bool ipv6;
-	u16 local_port;
-	u16 remote_port;
-	u8 remote_mac[6];
-};
-
-enum qdisc_state_t {
-	__QDISC_STATE_SCHED = 0,
-	__QDISC_STATE_DEACTIVATED = 1,
-};
-
-struct tcf_walker {
-	int stop;
-	int skip;
-	int count;
-	bool nonempty;
-	long unsigned int cookie;
-	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
-};
-
-enum {
-	IPV4_DEVCONF_FORWARDING = 1,
-	IPV4_DEVCONF_MC_FORWARDING = 2,
-	IPV4_DEVCONF_PROXY_ARP = 3,
-	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
-	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
-	IPV4_DEVCONF_SEND_REDIRECTS = 6,
-	IPV4_DEVCONF_SHARED_MEDIA = 7,
-	IPV4_DEVCONF_RP_FILTER = 8,
-	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
-	IPV4_DEVCONF_BOOTP_RELAY = 10,
-	IPV4_DEVCONF_LOG_MARTIANS = 11,
-	IPV4_DEVCONF_TAG = 12,
-	IPV4_DEVCONF_ARPFILTER = 13,
-	IPV4_DEVCONF_MEDIUM_ID = 14,
-	IPV4_DEVCONF_NOXFRM = 15,
-	IPV4_DEVCONF_NOPOLICY = 16,
-	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
-	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
-	IPV4_DEVCONF_ARP_IGNORE = 19,
-	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
-	IPV4_DEVCONF_ARP_ACCEPT = 21,
-	IPV4_DEVCONF_ARP_NOTIFY = 22,
-	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
-	IPV4_DEVCONF_SRC_VMARK = 24,
-	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
-	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
-	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
-	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
-	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
-	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
-	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
-	IPV4_DEVCONF_BC_FORWARDING = 32,
-	__IPV4_DEVCONF_MAX = 33,
-};
-
-struct in_ifaddr {
-	struct hlist_node hash;
-	struct in_ifaddr *ifa_next;
-	struct in_device *ifa_dev;
-	struct callback_head callback_head;
-	__be32 ifa_local;
-	__be32 ifa_address;
-	__be32 ifa_mask;
-	__u32 ifa_rt_priority;
-	__be32 ifa_broadcast;
-	unsigned char ifa_scope;
-	unsigned char ifa_prefixlen;
-	__u32 ifa_flags;
-	char ifa_label[16];
-	__u32 ifa_valid_lft;
-	__u32 ifa_preferred_lft;
-	long unsigned int ifa_cstamp;
-	long unsigned int ifa_tstamp;
-};
-
-struct udp_tunnel_nic_shared {
-	struct udp_tunnel_nic *udp_tunnel_nic_info;
-	struct list_head devices;
-};
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
 
 struct dev_kfree_skb_cb {
 	enum skb_free_reason reason;
@@ -110969,6 +126006,7 @@
 
 struct netdev_adjacent {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	bool master;
 	bool ignore;
 	u16 ref_nr;
@@ -110977,5833 +126015,15 @@
 	struct callback_head rcu;
 };
 
-struct netdev_hw_addr {
-	struct list_head list;
-	unsigned char addr[32];
-	unsigned char type;
-	bool global_use;
-	int sync_cnt;
-	int refcount;
-	int synced;
-	struct callback_head callback_head;
-};
-
-enum {
-	NDA_UNSPEC = 0,
-	NDA_DST = 1,
-	NDA_LLADDR = 2,
-	NDA_CACHEINFO = 3,
-	NDA_PROBES = 4,
-	NDA_VLAN = 5,
-	NDA_PORT = 6,
-	NDA_VNI = 7,
-	NDA_IFINDEX = 8,
-	NDA_MASTER = 9,
-	NDA_LINK_NETNSID = 10,
-	NDA_SRC_VNI = 11,
-	NDA_PROTOCOL = 12,
-	NDA_NH_ID = 13,
-	NDA_FDB_EXT_ATTRS = 14,
-	__NDA_MAX = 15,
-};
-
-struct nda_cacheinfo {
-	__u32 ndm_confirmed;
-	__u32 ndm_used;
-	__u32 ndm_updated;
-	__u32 ndm_refcnt;
-};
-
-struct ndt_stats {
-	__u64 ndts_allocs;
-	__u64 ndts_destroys;
-	__u64 ndts_hash_grows;
-	__u64 ndts_res_failed;
-	__u64 ndts_lookups;
-	__u64 ndts_hits;
-	__u64 ndts_rcv_probes_mcast;
-	__u64 ndts_rcv_probes_ucast;
-	__u64 ndts_periodic_gc_runs;
-	__u64 ndts_forced_gc_runs;
-	__u64 ndts_table_fulls;
-};
-
-enum {
-	NDTPA_UNSPEC = 0,
-	NDTPA_IFINDEX = 1,
-	NDTPA_REFCNT = 2,
-	NDTPA_REACHABLE_TIME = 3,
-	NDTPA_BASE_REACHABLE_TIME = 4,
-	NDTPA_RETRANS_TIME = 5,
-	NDTPA_GC_STALETIME = 6,
-	NDTPA_DELAY_PROBE_TIME = 7,
-	NDTPA_QUEUE_LEN = 8,
-	NDTPA_APP_PROBES = 9,
-	NDTPA_UCAST_PROBES = 10,
-	NDTPA_MCAST_PROBES = 11,
-	NDTPA_ANYCAST_DELAY = 12,
-	NDTPA_PROXY_DELAY = 13,
-	NDTPA_PROXY_QLEN = 14,
-	NDTPA_LOCKTIME = 15,
-	NDTPA_QUEUE_LENBYTES = 16,
-	NDTPA_MCAST_REPROBES = 17,
-	NDTPA_PAD = 18,
-	__NDTPA_MAX = 19,
-};
-
-struct ndtmsg {
-	__u8 ndtm_family;
-	__u8 ndtm_pad1;
-	__u16 ndtm_pad2;
-};
-
-struct ndt_config {
-	__u16 ndtc_key_len;
-	__u16 ndtc_entry_size;
-	__u32 ndtc_entries;
-	__u32 ndtc_last_flush;
-	__u32 ndtc_last_rand;
-	__u32 ndtc_hash_rnd;
-	__u32 ndtc_hash_mask;
-	__u32 ndtc_hash_chain_gc;
-	__u32 ndtc_proxy_qlen;
-};
-
-enum {
-	NDTA_UNSPEC = 0,
-	NDTA_NAME = 1,
-	NDTA_THRESH1 = 2,
-	NDTA_THRESH2 = 3,
-	NDTA_THRESH3 = 4,
-	NDTA_CONFIG = 5,
-	NDTA_PARMS = 6,
-	NDTA_STATS = 7,
-	NDTA_GC_INTERVAL = 8,
-	NDTA_PAD = 9,
-	__NDTA_MAX = 10,
-};
-
-enum {
-	RTN_UNSPEC = 0,
-	RTN_UNICAST = 1,
-	RTN_LOCAL = 2,
-	RTN_BROADCAST = 3,
-	RTN_ANYCAST = 4,
-	RTN_MULTICAST = 5,
-	RTN_BLACKHOLE = 6,
-	RTN_UNREACHABLE = 7,
-	RTN_PROHIBIT = 8,
-	RTN_THROW = 9,
-	RTN_NAT = 10,
-	RTN_XRESOLVE = 11,
-	__RTN_MAX = 12,
-};
-
-enum {
-	NEIGH_ARP_TABLE = 0,
-	NEIGH_ND_TABLE = 1,
-	NEIGH_DN_TABLE = 2,
-	NEIGH_NR_TABLES = 3,
-	NEIGH_LINK_TABLE = 3,
-};
-
-struct neigh_seq_state {
-	struct seq_net_private p;
-	struct neigh_table *tbl;
-	struct neigh_hash_table *nht;
-	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
-	unsigned int bucket;
-	unsigned int flags;
-};
-
-struct neighbour_cb {
-	long unsigned int sched_next;
-	unsigned int flags;
-};
-
-enum netevent_notif_type {
-	NETEVENT_NEIGH_UPDATE = 1,
-	NETEVENT_REDIRECT = 2,
-	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
-	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
-	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
-	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
-};
-
-struct neigh_dump_filter {
-	int master_idx;
-	int dev_idx;
-};
-
-struct neigh_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table neigh_vars[21];
-};
-
-struct netlink_dump_control {
-	int (*start)(struct netlink_callback *);
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	u32 min_dump_alloc;
-};
-
-struct rtnl_link_stats {
-	__u32 rx_packets;
-	__u32 tx_packets;
-	__u32 rx_bytes;
-	__u32 tx_bytes;
-	__u32 rx_errors;
-	__u32 tx_errors;
-	__u32 rx_dropped;
-	__u32 tx_dropped;
-	__u32 multicast;
-	__u32 collisions;
-	__u32 rx_length_errors;
-	__u32 rx_over_errors;
-	__u32 rx_crc_errors;
-	__u32 rx_frame_errors;
-	__u32 rx_fifo_errors;
-	__u32 rx_missed_errors;
-	__u32 tx_aborted_errors;
-	__u32 tx_carrier_errors;
-	__u32 tx_fifo_errors;
-	__u32 tx_heartbeat_errors;
-	__u32 tx_window_errors;
-	__u32 rx_compressed;
-	__u32 tx_compressed;
-	__u32 rx_nohandler;
-};
-
-struct rtnl_link_ifmap {
-	__u64 mem_start;
-	__u64 mem_end;
-	__u64 base_addr;
-	__u16 irq;
-	__u8 dma;
-	__u8 port;
-};
-
-enum {
-	IFLA_UNSPEC = 0,
-	IFLA_ADDRESS = 1,
-	IFLA_BROADCAST = 2,
-	IFLA_IFNAME = 3,
-	IFLA_MTU = 4,
-	IFLA_LINK = 5,
-	IFLA_QDISC = 6,
-	IFLA_STATS = 7,
-	IFLA_COST = 8,
-	IFLA_PRIORITY = 9,
-	IFLA_MASTER = 10,
-	IFLA_WIRELESS = 11,
-	IFLA_PROTINFO = 12,
-	IFLA_TXQLEN = 13,
-	IFLA_MAP = 14,
-	IFLA_WEIGHT = 15,
-	IFLA_OPERSTATE = 16,
-	IFLA_LINKMODE = 17,
-	IFLA_LINKINFO = 18,
-	IFLA_NET_NS_PID = 19,
-	IFLA_IFALIAS = 20,
-	IFLA_NUM_VF = 21,
-	IFLA_VFINFO_LIST = 22,
-	IFLA_STATS64 = 23,
-	IFLA_VF_PORTS = 24,
-	IFLA_PORT_SELF = 25,
-	IFLA_AF_SPEC = 26,
-	IFLA_GROUP = 27,
-	IFLA_NET_NS_FD = 28,
-	IFLA_EXT_MASK = 29,
-	IFLA_PROMISCUITY = 30,
-	IFLA_NUM_TX_QUEUES = 31,
-	IFLA_NUM_RX_QUEUES = 32,
-	IFLA_CARRIER = 33,
-	IFLA_PHYS_PORT_ID = 34,
-	IFLA_CARRIER_CHANGES = 35,
-	IFLA_PHYS_SWITCH_ID = 36,
-	IFLA_LINK_NETNSID = 37,
-	IFLA_PHYS_PORT_NAME = 38,
-	IFLA_PROTO_DOWN = 39,
-	IFLA_GSO_MAX_SEGS = 40,
-	IFLA_GSO_MAX_SIZE = 41,
-	IFLA_PAD = 42,
-	IFLA_XDP = 43,
-	IFLA_EVENT = 44,
-	IFLA_NEW_NETNSID = 45,
-	IFLA_IF_NETNSID = 46,
-	IFLA_TARGET_NETNSID = 46,
-	IFLA_CARRIER_UP_COUNT = 47,
-	IFLA_CARRIER_DOWN_COUNT = 48,
-	IFLA_NEW_IFINDEX = 49,
-	IFLA_MIN_MTU = 50,
-	IFLA_MAX_MTU = 51,
-	IFLA_PROP_LIST = 52,
-	IFLA_ALT_IFNAME = 53,
-	IFLA_PERM_ADDRESS = 54,
-	IFLA_PROTO_DOWN_REASON = 55,
-	__IFLA_MAX = 56,
-};
-
-enum {
-	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
-	IFLA_PROTO_DOWN_REASON_MASK = 1,
-	IFLA_PROTO_DOWN_REASON_VALUE = 2,
-	__IFLA_PROTO_DOWN_REASON_CNT = 3,
-	IFLA_PROTO_DOWN_REASON_MAX = 2,
-};
-
-enum {
-	IFLA_BRPORT_UNSPEC = 0,
-	IFLA_BRPORT_STATE = 1,
-	IFLA_BRPORT_PRIORITY = 2,
-	IFLA_BRPORT_COST = 3,
-	IFLA_BRPORT_MODE = 4,
-	IFLA_BRPORT_GUARD = 5,
-	IFLA_BRPORT_PROTECT = 6,
-	IFLA_BRPORT_FAST_LEAVE = 7,
-	IFLA_BRPORT_LEARNING = 8,
-	IFLA_BRPORT_UNICAST_FLOOD = 9,
-	IFLA_BRPORT_PROXYARP = 10,
-	IFLA_BRPORT_LEARNING_SYNC = 11,
-	IFLA_BRPORT_PROXYARP_WIFI = 12,
-	IFLA_BRPORT_ROOT_ID = 13,
-	IFLA_BRPORT_BRIDGE_ID = 14,
-	IFLA_BRPORT_DESIGNATED_PORT = 15,
-	IFLA_BRPORT_DESIGNATED_COST = 16,
-	IFLA_BRPORT_ID = 17,
-	IFLA_BRPORT_NO = 18,
-	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
-	IFLA_BRPORT_CONFIG_PENDING = 20,
-	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
-	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
-	IFLA_BRPORT_HOLD_TIMER = 23,
-	IFLA_BRPORT_FLUSH = 24,
-	IFLA_BRPORT_MULTICAST_ROUTER = 25,
-	IFLA_BRPORT_PAD = 26,
-	IFLA_BRPORT_MCAST_FLOOD = 27,
-	IFLA_BRPORT_MCAST_TO_UCAST = 28,
-	IFLA_BRPORT_VLAN_TUNNEL = 29,
-	IFLA_BRPORT_BCAST_FLOOD = 30,
-	IFLA_BRPORT_GROUP_FWD_MASK = 31,
-	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
-	IFLA_BRPORT_ISOLATED = 33,
-	IFLA_BRPORT_BACKUP_PORT = 34,
-	IFLA_BRPORT_MRP_RING_OPEN = 35,
-	IFLA_BRPORT_MRP_IN_OPEN = 36,
-	__IFLA_BRPORT_MAX = 37,
-};
-
-enum {
-	IFLA_INFO_UNSPEC = 0,
-	IFLA_INFO_KIND = 1,
-	IFLA_INFO_DATA = 2,
-	IFLA_INFO_XSTATS = 3,
-	IFLA_INFO_SLAVE_KIND = 4,
-	IFLA_INFO_SLAVE_DATA = 5,
-	__IFLA_INFO_MAX = 6,
-};
-
-enum {
-	IFLA_VF_INFO_UNSPEC = 0,
-	IFLA_VF_INFO = 1,
-	__IFLA_VF_INFO_MAX = 2,
-};
-
-enum {
-	IFLA_VF_UNSPEC = 0,
-	IFLA_VF_MAC = 1,
-	IFLA_VF_VLAN = 2,
-	IFLA_VF_TX_RATE = 3,
-	IFLA_VF_SPOOFCHK = 4,
-	IFLA_VF_LINK_STATE = 5,
-	IFLA_VF_RATE = 6,
-	IFLA_VF_RSS_QUERY_EN = 7,
-	IFLA_VF_STATS = 8,
-	IFLA_VF_TRUST = 9,
-	IFLA_VF_IB_NODE_GUID = 10,
-	IFLA_VF_IB_PORT_GUID = 11,
-	IFLA_VF_VLAN_LIST = 12,
-	IFLA_VF_BROADCAST = 13,
-	__IFLA_VF_MAX = 14,
-};
-
-struct ifla_vf_mac {
-	__u32 vf;
-	__u8 mac[32];
-};
-
-struct ifla_vf_broadcast {
-	__u8 broadcast[32];
-};
-
-struct ifla_vf_vlan {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-};
-
-enum {
-	IFLA_VF_VLAN_INFO_UNSPEC = 0,
-	IFLA_VF_VLAN_INFO = 1,
-	__IFLA_VF_VLAN_INFO_MAX = 2,
-};
-
-struct ifla_vf_vlan_info {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-	__be16 vlan_proto;
-};
-
-struct ifla_vf_tx_rate {
-	__u32 vf;
-	__u32 rate;
-};
-
-struct ifla_vf_rate {
-	__u32 vf;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-};
-
-struct ifla_vf_spoofchk {
-	__u32 vf;
-	__u32 setting;
-};
-
-struct ifla_vf_link_state {
-	__u32 vf;
-	__u32 link_state;
-};
-
-struct ifla_vf_rss_query_en {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_STATS_RX_PACKETS = 0,
-	IFLA_VF_STATS_TX_PACKETS = 1,
-	IFLA_VF_STATS_RX_BYTES = 2,
-	IFLA_VF_STATS_TX_BYTES = 3,
-	IFLA_VF_STATS_BROADCAST = 4,
-	IFLA_VF_STATS_MULTICAST = 5,
-	IFLA_VF_STATS_PAD = 6,
-	IFLA_VF_STATS_RX_DROPPED = 7,
-	IFLA_VF_STATS_TX_DROPPED = 8,
-	__IFLA_VF_STATS_MAX = 9,
-};
-
-struct ifla_vf_trust {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_PORT_UNSPEC = 0,
-	IFLA_VF_PORT = 1,
-	__IFLA_VF_PORT_MAX = 2,
-};
-
-enum {
-	IFLA_PORT_UNSPEC = 0,
-	IFLA_PORT_VF = 1,
-	IFLA_PORT_PROFILE = 2,
-	IFLA_PORT_VSI_TYPE = 3,
-	IFLA_PORT_INSTANCE_UUID = 4,
-	IFLA_PORT_HOST_UUID = 5,
-	IFLA_PORT_REQUEST = 6,
-	IFLA_PORT_RESPONSE = 7,
-	__IFLA_PORT_MAX = 8,
-};
-
-struct if_stats_msg {
-	__u8 family;
-	__u8 pad1;
-	__u16 pad2;
-	__u32 ifindex;
-	__u32 filter_mask;
-};
-
-enum {
-	IFLA_STATS_UNSPEC = 0,
-	IFLA_STATS_LINK_64 = 1,
-	IFLA_STATS_LINK_XSTATS = 2,
-	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
-	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
-	IFLA_STATS_AF_SPEC = 5,
-	__IFLA_STATS_MAX = 6,
-};
-
-enum {
-	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
-	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
-	__IFLA_OFFLOAD_XSTATS_MAX = 2,
-};
-
-enum {
-	XDP_ATTACHED_NONE = 0,
-	XDP_ATTACHED_DRV = 1,
-	XDP_ATTACHED_SKB = 2,
-	XDP_ATTACHED_HW = 3,
-	XDP_ATTACHED_MULTI = 4,
-};
-
-enum {
-	IFLA_XDP_UNSPEC = 0,
-	IFLA_XDP_FD = 1,
-	IFLA_XDP_ATTACHED = 2,
-	IFLA_XDP_FLAGS = 3,
-	IFLA_XDP_PROG_ID = 4,
-	IFLA_XDP_DRV_PROG_ID = 5,
-	IFLA_XDP_SKB_PROG_ID = 6,
-	IFLA_XDP_HW_PROG_ID = 7,
-	IFLA_XDP_EXPECTED_FD = 8,
-	__IFLA_XDP_MAX = 9,
-};
-
-enum {
-	IFLA_EVENT_NONE = 0,
-	IFLA_EVENT_REBOOT = 1,
-	IFLA_EVENT_FEATURES = 2,
-	IFLA_EVENT_BONDING_FAILOVER = 3,
-	IFLA_EVENT_NOTIFY_PEERS = 4,
-	IFLA_EVENT_IGMP_RESEND = 5,
-	IFLA_EVENT_BONDING_OPTIONS = 6,
-};
-
-enum {
-	IFLA_BRIDGE_FLAGS = 0,
-	IFLA_BRIDGE_MODE = 1,
-	IFLA_BRIDGE_VLAN_INFO = 2,
-	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
-	IFLA_BRIDGE_MRP = 4,
-	__IFLA_BRIDGE_MAX = 5,
-};
-
-enum {
-	BR_MCAST_DIR_RX = 0,
-	BR_MCAST_DIR_TX = 1,
-	BR_MCAST_DIR_SIZE = 2,
-};
-
-enum rtattr_type_t {
-	RTA_UNSPEC = 0,
-	RTA_DST = 1,
-	RTA_SRC = 2,
-	RTA_IIF = 3,
-	RTA_OIF = 4,
-	RTA_GATEWAY = 5,
-	RTA_PRIORITY = 6,
-	RTA_PREFSRC = 7,
-	RTA_METRICS = 8,
-	RTA_MULTIPATH = 9,
-	RTA_PROTOINFO = 10,
-	RTA_FLOW = 11,
-	RTA_CACHEINFO = 12,
-	RTA_SESSION = 13,
-	RTA_MP_ALGO = 14,
-	RTA_TABLE = 15,
-	RTA_MARK = 16,
-	RTA_MFC_STATS = 17,
-	RTA_VIA = 18,
-	RTA_NEWDST = 19,
-	RTA_PREF = 20,
-	RTA_ENCAP_TYPE = 21,
-	RTA_ENCAP = 22,
-	RTA_EXPIRES = 23,
-	RTA_PAD = 24,
-	RTA_UID = 25,
-	RTA_TTL_PROPAGATE = 26,
-	RTA_IP_PROTO = 27,
-	RTA_SPORT = 28,
-	RTA_DPORT = 29,
-	RTA_NH_ID = 30,
-	__RTA_MAX = 31,
-};
-
-struct rta_cacheinfo {
-	__u32 rta_clntref;
-	__u32 rta_lastuse;
-	__s32 rta_expires;
-	__u32 rta_error;
-	__u32 rta_used;
-	__u32 rta_id;
-	__u32 rta_ts;
-	__u32 rta_tsage;
-};
-
-struct ifinfomsg {
-	unsigned char ifi_family;
-	unsigned char __ifi_pad;
-	short unsigned int ifi_type;
-	int ifi_index;
-	unsigned int ifi_flags;
-	unsigned int ifi_change;
-};
-
-typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
-
-typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
-
-struct rtnl_af_ops {
-	struct list_head list;
-	int family;
-	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
-	size_t (*get_link_af_size)(const struct net_device *, u32);
-	int (*validate_link_af)(const struct net_device *, const struct nlattr *);
-	int (*set_link_af)(struct net_device *, const struct nlattr *);
-	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
-	size_t (*get_stats_af_size)(const struct net_device *);
-};
-
-struct rtnl_link {
-	rtnl_doit_func doit;
-	rtnl_dumpit_func dumpit;
-	struct module *owner;
-	unsigned int flags;
-	struct callback_head rcu;
-};
-
-enum {
-	IF_LINK_MODE_DEFAULT = 0,
-	IF_LINK_MODE_DORMANT = 1,
-	IF_LINK_MODE_TESTING = 2,
-};
-
-enum lw_bits {
-	LW_URGENT = 0,
-};
-
-struct seg6_pernet_data {
-	struct mutex lock;
-	struct in6_addr *tun_src;
-};
-
-enum {
-	BPF_F_RECOMPUTE_CSUM = 1,
-	BPF_F_INVALIDATE_HASH = 2,
-};
-
-enum {
-	BPF_F_HDR_FIELD_MASK = 15,
-};
-
-enum {
-	BPF_F_PSEUDO_HDR = 16,
-	BPF_F_MARK_MANGLED_0 = 32,
-	BPF_F_MARK_ENFORCE = 64,
-};
-
-enum {
-	BPF_F_INGRESS = 1,
-};
-
-enum {
-	BPF_F_TUNINFO_IPV6 = 1,
-};
-
-enum {
-	BPF_F_ZERO_CSUM_TX = 2,
-	BPF_F_DONT_FRAGMENT = 4,
-	BPF_F_SEQ_NUMBER = 8,
-};
-
-enum {
-	BPF_CSUM_LEVEL_QUERY = 0,
-	BPF_CSUM_LEVEL_INC = 1,
-	BPF_CSUM_LEVEL_DEC = 2,
-	BPF_CSUM_LEVEL_RESET = 3,
-};
-
-enum {
-	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
-	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
-	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
-	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
-};
-
-enum {
-	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
-	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
-};
-
-enum {
-	BPF_SK_LOOKUP_F_REPLACE = 1,
-	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
-};
-
-enum bpf_adj_room_mode {
-	BPF_ADJ_ROOM_NET = 0,
-	BPF_ADJ_ROOM_MAC = 1,
-};
-
-enum bpf_hdr_start_off {
-	BPF_HDR_START_MAC = 0,
-	BPF_HDR_START_NET = 1,
-};
-
-enum bpf_lwt_encap_mode {
-	BPF_LWT_ENCAP_SEG6 = 0,
-	BPF_LWT_ENCAP_SEG6_INLINE = 1,
-	BPF_LWT_ENCAP_IP = 2,
-};
-
-struct bpf_tunnel_key {
-	__u32 tunnel_id;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-	__u8 tunnel_tos;
-	__u8 tunnel_ttl;
-	__u16 tunnel_ext;
-	__u32 tunnel_label;
-};
-
-struct bpf_xfrm_state {
-	__u32 reqid;
-	__u32 spi;
-	__u16 family;
-	__u16 ext;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-};
-
-struct bpf_tcp_sock {
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	__u32 dsack_dups;
-	__u32 delivered;
-	__u32 delivered_ce;
-	__u32 icsk_retransmits;
-};
-
-struct bpf_sock_tuple {
-	union {
-		struct {
-			__be32 saddr;
-			__be32 daddr;
-			__be16 sport;
-			__be16 dport;
-		} ipv4;
-		struct {
-			__be32 saddr[4];
-			__be32 daddr[4];
-			__be16 sport;
-			__be16 dport;
-		} ipv6;
-	};
-};
-
-struct bpf_xdp_sock {
-	__u32 queue_id;
-};
-
-enum {
-	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
-	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
-	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
-	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
-	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
-	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
-	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
-};
-
-enum {
-	BPF_SOCK_OPS_VOID = 0,
-	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
-	BPF_SOCK_OPS_RWND_INIT = 2,
-	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
-	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
-	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
-	BPF_SOCK_OPS_NEEDS_ECN = 6,
-	BPF_SOCK_OPS_BASE_RTT = 7,
-	BPF_SOCK_OPS_RTO_CB = 8,
-	BPF_SOCK_OPS_RETRANS_CB = 9,
-	BPF_SOCK_OPS_STATE_CB = 10,
-	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
-	BPF_SOCK_OPS_RTT_CB = 12,
-	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
-	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
-	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
-};
-
-enum {
-	TCP_BPF_IW = 1001,
-	TCP_BPF_SNDCWND_CLAMP = 1002,
-	TCP_BPF_DELACK_MAX = 1003,
-	TCP_BPF_RTO_MIN = 1004,
-	TCP_BPF_SYN = 1005,
-	TCP_BPF_SYN_IP = 1006,
-	TCP_BPF_SYN_MAC = 1007,
-};
-
-enum {
-	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
-};
-
-enum {
-	BPF_FIB_LOOKUP_DIRECT = 1,
-	BPF_FIB_LOOKUP_OUTPUT = 2,
-};
-
-enum {
-	BPF_FIB_LKUP_RET_SUCCESS = 0,
-	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
-	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
-	BPF_FIB_LKUP_RET_PROHIBIT = 3,
-	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
-	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
-	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
-	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
-	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
-};
-
-struct bpf_fib_lookup {
-	__u8 family;
-	__u8 l4_protocol;
-	__be16 sport;
-	__be16 dport;
-	__u16 tot_len;
-	__u32 ifindex;
-	union {
-		__u8 tos;
-		__be32 flowinfo;
-		__u32 rt_metric;
-	};
-	union {
-		__be32 ipv4_src;
-		__u32 ipv6_src[4];
-	};
-	union {
-		__be32 ipv4_dst;
-		__u32 ipv6_dst[4];
-	};
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__u8 smac[6];
-	__u8 dmac[6];
-};
-
-struct bpf_redir_neigh {
-	__u32 nh_family;
-	union {
-		__be32 ipv4_nh;
-		__u32 ipv6_nh[4];
-	};
-};
-
-enum rt_scope_t {
-	RT_SCOPE_UNIVERSE = 0,
-	RT_SCOPE_SITE = 200,
-	RT_SCOPE_LINK = 253,
-	RT_SCOPE_HOST = 254,
-	RT_SCOPE_NOWHERE = 255,
-};
-
-enum rt_class_t {
-	RT_TABLE_UNSPEC = 0,
-	RT_TABLE_COMPAT = 252,
-	RT_TABLE_DEFAULT = 253,
-	RT_TABLE_MAIN = 254,
-	RT_TABLE_LOCAL = 255,
-	RT_TABLE_MAX = 4294967295,
-};
-
-struct nl_info {
-	struct nlmsghdr *nlh;
-	struct net *nl_net;
-	u32 portid;
-	u8 skip_notify: 1;
-	u8 skip_notify_kernel: 1;
-};
-
-typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
-
-struct inet_timewait_sock {
-	struct sock_common __tw_common;
-	__u32 tw_mark;
-	volatile unsigned char tw_substate;
-	unsigned char tw_rcv_wscale;
-	__be16 tw_sport;
-	unsigned int tw_kill: 1;
-	unsigned int tw_transparent: 1;
-	unsigned int tw_flowlabel: 20;
-	unsigned int tw_pad: 2;
-	unsigned int tw_tos: 8;
-	u32 tw_txhash;
-	u32 tw_priority;
-	struct timer_list tw_timer;
-	struct inet_bind_bucket *tw_tb;
-};
-
-struct tcp_timewait_sock {
-	struct inet_timewait_sock tw_sk;
-	u32 tw_rcv_wnd;
-	u32 tw_ts_offset;
-	u32 tw_ts_recent;
-	u32 tw_last_oow_ack_time;
-	int tw_ts_recent_stamp;
-	u32 tw_tx_delay;
-	struct tcp_md5sig_key *tw_md5_key;
-};
-
-struct udp_sock {
-	struct inet_sock inet;
-	int pending;
-	unsigned int corkflag;
-	__u8 encap_type;
-	unsigned char no_check6_tx: 1;
-	unsigned char no_check6_rx: 1;
-	unsigned char encap_enabled: 1;
-	unsigned char gro_enabled: 1;
-	__u16 len;
-	__u16 gso_size;
-	__u16 pcslen;
-	__u16 pcrlen;
-	__u8 pcflag;
-	__u8 unused[3];
-	int (*encap_rcv)(struct sock *, struct sk_buff *);
-	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
-	void (*encap_destroy)(struct sock *);
-	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sock *, struct sk_buff *, int);
-	struct sk_buff_head reader_queue;
-	int forward_deficit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct udp6_sock {
-	struct udp_sock udp;
-	struct ipv6_pinfo inet6;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcp6_sock {
-	struct tcp_sock tcp;
-	struct ipv6_pinfo inet6;
-};
-
-struct fib6_result;
-
-struct fib6_config;
-
-struct ipv6_stub {
-	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
-	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
-	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
-	int (*ipv6_route_input)(struct sk_buff *);
-	struct fib6_table * (*fib6_get_table)(struct net *, u32);
-	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
-	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
-	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
-	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
-	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
-	void (*fib6_nh_release)(struct fib6_nh *);
-	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
-	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
-	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
-	void (*udpv6_encap_enable)();
-	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
-	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
-	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
-	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
-	struct neigh_table *nd_tbl;
-	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-};
-
-struct fib6_result {
-	struct fib6_nh *nh;
-	struct fib6_info *f6i;
-	u32 fib6_flags;
-	u8 fib6_type;
-	struct rt6_info *rt6;
-};
-
-struct fib6_config {
-	u32 fc_table;
-	u32 fc_metric;
-	int fc_dst_len;
-	int fc_src_len;
-	int fc_ifindex;
-	u32 fc_flags;
-	u32 fc_protocol;
-	u16 fc_type;
-	u16 fc_delete_all_nh: 1;
-	u16 fc_ignore_dev_down: 1;
-	u16 __unused: 14;
-	u32 fc_nh_id;
-	struct in6_addr fc_dst;
-	struct in6_addr fc_src;
-	struct in6_addr fc_prefsrc;
-	struct in6_addr fc_gateway;
-	long unsigned int fc_expires;
-	struct nlattr *fc_mx;
-	int fc_mx_len;
-	int fc_mp_len;
-	struct nlattr *fc_mp;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-	bool fc_is_fdb;
-};
-
-struct ipv6_bpf_stub {
-	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
-	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
-};
-
-struct fib_result {
-	__be32 prefix;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	u32 tclassid;
-	struct fib_nh_common *nhc;
-	struct fib_info *fi;
-	struct fib_table *table;
-	struct hlist_head *fa_head;
-};
-
-enum {
-	INET_ECN_NOT_ECT = 0,
-	INET_ECN_ECT_1 = 1,
-	INET_ECN_ECT_0 = 2,
-	INET_ECN_CE = 3,
-	INET_ECN_MASK = 3,
-};
-
-struct tcp_skb_cb {
-	__u32 seq;
-	__u32 end_seq;
-	union {
-		__u32 tcp_tw_isn;
-		struct {
-			u16 tcp_gso_segs;
-			u16 tcp_gso_size;
-		};
-	};
-	__u8 tcp_flags;
-	__u8 sacked;
-	__u8 ip_dsfield;
-	__u8 txstamp_ack: 1;
-	__u8 eor: 1;
-	__u8 has_rxtstamp: 1;
-	__u8 unused: 5;
-	__u32 ack_seq;
-	union {
-		struct {
-			__u32 in_flight: 30;
-			__u32 is_app_limited: 1;
-			__u32 unused: 1;
-			__u32 delivered;
-			u64 first_tx_mstamp;
-			u64 delivered_mstamp;
-		} tx;
-		union {
-			struct inet_skb_parm h4;
-			struct inet6_skb_parm h6;
-		} header;
-		struct {
-			__u32 flags;
-			struct sock *sk_redir;
-			void *data_end;
-		} bpf;
-	};
-};
-
-struct strp_stats {
-	long long unsigned int msgs;
-	long long unsigned int bytes;
-	unsigned int mem_fail;
-	unsigned int need_more_hdr;
-	unsigned int msg_too_big;
-	unsigned int msg_timeouts;
-	unsigned int bad_hdr_len;
-};
-
-struct strparser;
-
-struct strp_callbacks {
-	int (*parse_msg)(struct strparser *, struct sk_buff *);
-	void (*rcv_msg)(struct strparser *, struct sk_buff *);
-	int (*read_sock_done)(struct strparser *, int);
-	void (*abort_parser)(struct strparser *, int);
-	void (*lock)(struct strparser *);
-	void (*unlock)(struct strparser *);
-};
-
-struct strparser {
-	struct sock *sk;
-	u32 stopped: 1;
-	u32 paused: 1;
-	u32 aborted: 1;
-	u32 interrupted: 1;
-	u32 unrecov_intr: 1;
-	struct sk_buff **skb_nextp;
-	struct sk_buff *skb_head;
-	unsigned int need_bytes;
-	struct delayed_work msg_timer_work;
-	struct work_struct work;
-	struct strp_stats stats;
-	struct strp_callbacks cb;
-};
-
-struct strp_msg {
-	int full_len;
-	int offset;
-};
-
-struct xdp_umem {
-	void *addrs;
-	u64 size;
-	u32 headroom;
-	u32 chunk_size;
-	u32 chunks;
-	u32 npgs;
-	struct user_struct *user;
-	refcount_t users;
-	u8 flags;
-	bool zc;
-	struct page **pgs;
-	int id;
-	struct list_head xsk_dma_list;
-	struct work_struct work;
-};
-
-struct xdp_sock;
-
-struct xsk_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct xdp_sock *xsk_map[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xsk_queue;
-
-struct xdp_sock {
-	struct sock sk;
-	long: 64;
-	long: 64;
-	struct xsk_queue *rx;
-	struct net_device *dev;
-	struct xdp_umem *umem;
-	struct list_head flush_node;
-	struct xsk_buff_pool *pool;
-	u16 queue_id;
-	bool zc;
-	enum {
-		XSK_READY = 0,
-		XSK_BOUND = 1,
-		XSK_UNBOUND = 2,
-	} state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xsk_queue *tx;
-	struct list_head tx_list;
-	spinlock_t rx_lock;
-	u64 rx_dropped;
-	u64 rx_queue_full;
-	struct list_head map_list;
-	spinlock_t map_list_lock;
-	struct mutex mutex;
-	struct xsk_queue *fq_tmp;
-	struct xsk_queue *cq_tmp;
-	long: 64;
-};
-
-struct ipv6_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u8 first_segment;
-	__u8 flags;
-	__u16 tag;
-	struct in6_addr segments[0];
-};
-
-enum {
-	SEG6_LOCAL_ACTION_UNSPEC = 0,
-	SEG6_LOCAL_ACTION_END = 1,
-	SEG6_LOCAL_ACTION_END_X = 2,
-	SEG6_LOCAL_ACTION_END_T = 3,
-	SEG6_LOCAL_ACTION_END_DX2 = 4,
-	SEG6_LOCAL_ACTION_END_DX6 = 5,
-	SEG6_LOCAL_ACTION_END_DX4 = 6,
-	SEG6_LOCAL_ACTION_END_DT6 = 7,
-	SEG6_LOCAL_ACTION_END_DT4 = 8,
-	SEG6_LOCAL_ACTION_END_B6 = 9,
-	SEG6_LOCAL_ACTION_END_B6_ENCAP = 10,
-	SEG6_LOCAL_ACTION_END_BM = 11,
-	SEG6_LOCAL_ACTION_END_S = 12,
-	SEG6_LOCAL_ACTION_END_AS = 13,
-	SEG6_LOCAL_ACTION_END_AM = 14,
-	SEG6_LOCAL_ACTION_END_BPF = 15,
-	__SEG6_LOCAL_ACTION_MAX = 16,
-};
-
-struct seg6_bpf_srh_state {
-	struct ipv6_sr_hdr *srh;
-	u16 hdrlen;
-	bool valid;
-};
-
-struct tls_crypto_info {
-	__u16 version;
-	__u16 cipher_type;
-};
-
-struct tls12_crypto_info_aes_gcm_128 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[16];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls12_crypto_info_aes_gcm_256 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[32];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls_sw_context_rx {
-	struct crypto_aead *aead_recv;
-	struct crypto_wait async_wait;
-	struct strparser strp;
-	struct sk_buff_head rx_list;
-	void (*saved_data_ready)(struct sock *);
-	struct sk_buff *recv_pkt;
-	u8 control;
-	u8 async_capable: 1;
-	u8 decrypted: 1;
-	atomic_t decrypt_pending;
-	spinlock_t decrypt_compl_lock;
-	bool async_notify;
-};
-
-struct cipher_context {
-	char *iv;
-	char *rec_seq;
-};
-
-union tls_crypto_context {
-	struct tls_crypto_info info;
-	union {
-		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
-		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
-	};
-};
-
-struct tls_prot_info {
-	u16 version;
-	u16 cipher_type;
-	u16 prepend_size;
-	u16 tag_size;
-	u16 overhead_size;
-	u16 iv_size;
-	u16 salt_size;
-	u16 rec_seq_size;
-	u16 aad_size;
-	u16 tail_size;
-};
-
-struct tls_context {
-	struct tls_prot_info prot_info;
-	u8 tx_conf: 3;
-	u8 rx_conf: 3;
-	int (*push_pending_record)(struct sock *, int);
-	void (*sk_write_space)(struct sock *);
-	void *priv_ctx_tx;
-	void *priv_ctx_rx;
-	struct net_device *netdev;
-	struct cipher_context tx;
-	struct cipher_context rx;
-	struct scatterlist *partially_sent_record;
-	u16 partially_sent_offset;
-	bool in_tcp_sendpages;
-	bool pending_open_record_frags;
-	struct mutex tx_lock;
-	long unsigned int flags;
-	struct proto *sk_proto;
-	void (*sk_destruct)(struct sock *);
-	union tls_crypto_context crypto_send;
-	union tls_crypto_context crypto_recv;
-	struct list_head list;
-	refcount_t refcount;
-	struct callback_head rcu;
-};
-
-typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
-
-struct bpf_scratchpad {
-	union {
-		__be32 diff[128];
-		u8 buff[512];
-	};
-};
-
-typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
-
-typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
-
-typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
-
-typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
-
-enum {
-	BPF_F_NEIGH = 2,
-	BPF_F_PEER = 4,
-	BPF_F_NEXTHOP = 8,
-};
-
-typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
-
-typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
-
-typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_get_cgroup_classid_curr)();
-
-typedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
-
-typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
-
-typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
-
-typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
-
-typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
-
-typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
-
-typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
-
-typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
-
-typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
-
-typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
-
-typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
-
-typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_store_bytes)(struct sk_buff *, u32, const void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_action)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_adjust_srh)(struct sk_buff *, u32, s32);
-
-typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_release)(struct sock *);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
-
-typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
-
-typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
-
-typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
-
-typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
-
-typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
-
-struct bpf_dtab_netdev___2;
-
-enum {
-	INET_DIAG_REQ_NONE = 0,
-	INET_DIAG_REQ_BYTECODE = 1,
-	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
-	INET_DIAG_REQ_PROTOCOL = 3,
-	__INET_DIAG_REQ_MAX = 4,
-};
-
-struct sock_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-};
-
-struct sock_diag_handler {
-	__u8 family;
-	int (*dump)(struct sk_buff *, struct nlmsghdr *);
-	int (*get_info)(struct sk_buff *, struct sock *);
-	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
-};
-
-struct broadcast_sk {
-	struct sock *sk;
-	struct work_struct work;
-};
-
-typedef int gifconf_func_t(struct net_device *, char *, int, int);
-
-struct hwtstamp_config {
-	int flags;
-	int tx_type;
-	int rx_filter;
-};
-
-enum hwtstamp_tx_types {
-	HWTSTAMP_TX_OFF = 0,
-	HWTSTAMP_TX_ON = 1,
-	HWTSTAMP_TX_ONESTEP_SYNC = 2,
-	HWTSTAMP_TX_ONESTEP_P2P = 3,
-	__HWTSTAMP_TX_CNT = 4,
-};
-
-enum hwtstamp_rx_filters {
-	HWTSTAMP_FILTER_NONE = 0,
-	HWTSTAMP_FILTER_ALL = 1,
-	HWTSTAMP_FILTER_SOME = 2,
-	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
-	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
-	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
-	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
-	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
-	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
-	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
-	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
-	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
-	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
-	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
-	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
-	HWTSTAMP_FILTER_NTP_ALL = 15,
-	__HWTSTAMP_FILTER_CNT = 16,
-};
-
-struct tso_t {
-	int next_frag_idx;
-	int size;
-	void *data;
-	u16 ip_id;
-	u8 tlen;
-	bool ipv6;
-	u32 tcp_seq;
-};
-
-struct fib_notifier_info {
-	int family;
-	struct netlink_ext_ack *extack;
-};
-
-enum fib_event_type {
-	FIB_EVENT_ENTRY_REPLACE = 0,
-	FIB_EVENT_ENTRY_APPEND = 1,
-	FIB_EVENT_ENTRY_ADD = 2,
-	FIB_EVENT_ENTRY_DEL = 3,
-	FIB_EVENT_RULE_ADD = 4,
-	FIB_EVENT_RULE_DEL = 5,
-	FIB_EVENT_NH_ADD = 6,
-	FIB_EVENT_NH_DEL = 7,
-	FIB_EVENT_VIF_ADD = 8,
-	FIB_EVENT_VIF_DEL = 9,
-};
-
-struct fib_notifier_net {
-	struct list_head fib_notifier_ops;
-	struct atomic_notifier_head fib_chain;
-};
-
-struct xdp_attachment_info {
-	struct bpf_prog *prog;
-	u32 flags;
-};
-
-struct xdp_buff_xsk;
-
-struct xsk_buff_pool {
-	struct device *dev;
-	struct net_device *netdev;
-	struct list_head xsk_tx_list;
-	spinlock_t xsk_tx_list_lock;
-	refcount_t users;
-	struct xdp_umem *umem;
-	struct work_struct work;
-	struct list_head free_list;
-	u32 heads_cnt;
-	u16 queue_id;
-	long: 16;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xsk_queue *fq;
-	struct xsk_queue *cq;
-	dma_addr_t *dma_pages;
-	struct xdp_buff_xsk *heads;
-	u64 chunk_mask;
-	u64 addrs_cnt;
-	u32 free_list_cnt;
-	u32 dma_pages_cnt;
-	u32 free_heads_cnt;
-	u32 headroom;
-	u32 chunk_size;
-	u32 frame_len;
-	u8 cached_need_wakeup;
-	bool uses_need_wakeup;
-	bool dma_need_sync;
-	bool unaligned;
-	void *addrs;
-	spinlock_t cq_lock;
-	struct xdp_buff_xsk *free_heads[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct pp_alloc_cache {
-	u32 count;
-	void *cache[128];
-};
-
-struct page_pool_params {
-	unsigned int flags;
-	unsigned int order;
-	unsigned int pool_size;
-	int nid;
-	struct device *dev;
-	enum dma_data_direction dma_dir;
-	unsigned int max_len;
-	unsigned int offset;
-};
-
-struct page_pool {
-	struct page_pool_params p;
-	struct delayed_work release_dw;
-	void (*disconnect)(void *);
-	long unsigned int defer_start;
-	long unsigned int defer_warn;
-	u32 pages_state_hold_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct pp_alloc_cache alloc;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct ptr_ring ring;
-	atomic_t pages_state_release_cnt;
-	refcount_t user_cnt;
-	u64 destroy_cnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_buff_xsk {
-	struct xdp_buff xdp;
-	dma_addr_t dma;
-	dma_addr_t frame_dma;
-	struct xsk_buff_pool *pool;
-	bool unaligned;
-	u64 orig_addr;
-	struct list_head free_list_node;
-};
-
-struct flow_match_meta {
-	struct flow_dissector_key_meta *key;
-	struct flow_dissector_key_meta *mask;
-};
-
-struct flow_match_basic {
-	struct flow_dissector_key_basic *key;
-	struct flow_dissector_key_basic *mask;
-};
-
-struct flow_match_control {
-	struct flow_dissector_key_control *key;
-	struct flow_dissector_key_control *mask;
-};
-
-struct flow_match_eth_addrs {
-	struct flow_dissector_key_eth_addrs *key;
-	struct flow_dissector_key_eth_addrs *mask;
-};
-
-struct flow_match_vlan {
-	struct flow_dissector_key_vlan *key;
-	struct flow_dissector_key_vlan *mask;
-};
-
-struct flow_match_ipv4_addrs {
-	struct flow_dissector_key_ipv4_addrs *key;
-	struct flow_dissector_key_ipv4_addrs *mask;
-};
-
-struct flow_match_ipv6_addrs {
-	struct flow_dissector_key_ipv6_addrs *key;
-	struct flow_dissector_key_ipv6_addrs *mask;
-};
-
-struct flow_match_ip {
-	struct flow_dissector_key_ip *key;
-	struct flow_dissector_key_ip *mask;
-};
-
-struct flow_match_ports {
-	struct flow_dissector_key_ports *key;
-	struct flow_dissector_key_ports *mask;
-};
-
-struct flow_match_icmp {
-	struct flow_dissector_key_icmp *key;
-	struct flow_dissector_key_icmp *mask;
-};
-
-struct flow_match_tcp {
-	struct flow_dissector_key_tcp *key;
-	struct flow_dissector_key_tcp *mask;
-};
-
-struct flow_match_mpls {
-	struct flow_dissector_key_mpls *key;
-	struct flow_dissector_key_mpls *mask;
-};
-
-struct flow_match_enc_keyid {
-	struct flow_dissector_key_keyid *key;
-	struct flow_dissector_key_keyid *mask;
-};
-
-struct flow_match_enc_opts {
-	struct flow_dissector_key_enc_opts *key;
-	struct flow_dissector_key_enc_opts *mask;
-};
-
-struct flow_match_ct {
-	struct flow_dissector_key_ct *key;
-	struct flow_dissector_key_ct *mask;
-};
-
-enum flow_block_command {
-	FLOW_BLOCK_BIND = 0,
-	FLOW_BLOCK_UNBIND = 1,
-};
-
-enum flow_block_binder_type {
-	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
-	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
-	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
-};
-
-struct flow_block_offload {
-	enum flow_block_command command;
-	enum flow_block_binder_type binder_type;
-	bool block_shared;
-	bool unlocked_driver_cb;
-	struct net *net;
-	struct flow_block *block;
-	struct list_head cb_list;
-	struct list_head *driver_block_list;
-	struct netlink_ext_ack *extack;
-	struct Qdisc *sch;
-};
-
-struct flow_block_cb;
-
-struct flow_block_indr {
-	struct list_head list;
-	struct net_device *dev;
-	struct Qdisc *sch;
-	enum flow_block_binder_type binder_type;
-	void *data;
-	void *cb_priv;
-	void (*cleanup)(struct flow_block_cb *);
-};
-
-struct flow_block_cb {
-	struct list_head driver_list;
-	struct list_head list;
-	flow_setup_cb_t *cb;
-	void *cb_ident;
-	void *cb_priv;
-	void (*release)(void *);
-	struct flow_block_indr indr;
-	unsigned int refcnt;
-};
-
-typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
-
-struct flow_indr_dev {
-	struct list_head list;
-	flow_indr_block_bind_cb_t *cb;
-	void *cb_priv;
-	refcount_t refcnt;
-	struct callback_head rcu;
-};
-
-struct rx_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_rx_queue *, char *);
-	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
-};
-
-struct netdev_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_queue *, char *);
-	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
-};
-
-enum __sk_action {
-	__SK_DROP = 0,
-	__SK_PASS = 1,
-	__SK_REDIRECT = 2,
-	__SK_NONE = 3,
-};
-
-struct sk_psock_progs {
-	struct bpf_prog *msg_parser;
-	struct bpf_prog *skb_parser;
-	struct bpf_prog *skb_verdict;
-};
-
-enum sk_psock_state_bits {
-	SK_PSOCK_TX_ENABLED = 0,
-};
-
-struct sk_psock_link {
-	struct list_head list;
-	struct bpf_map *map;
-	void *link_raw;
-};
-
-struct sk_psock_parser {
-	struct strparser strp;
-	bool enabled;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct sk_psock_work_state {
-	struct sk_buff *skb;
-	u32 len;
-	u32 off;
-};
-
-struct sk_psock {
-	struct sock *sk;
-	struct sock *sk_redir;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 eval;
-	struct sk_msg *cork;
-	struct sk_psock_progs progs;
-	struct sk_psock_parser parser;
-	struct sk_buff_head ingress_skb;
-	struct list_head ingress_msg;
-	long unsigned int state;
-	struct list_head link;
-	spinlock_t link_lock;
-	refcount_t refcnt;
-	void (*saved_unhash)(struct sock *);
-	void (*saved_close)(struct sock *, long int);
-	void (*saved_write_space)(struct sock *);
-	struct proto *sk_proto;
-	struct sk_psock_work_state work_state;
-	struct work_struct work;
-	union {
-		struct callback_head rcu;
-		struct work_struct gc;
-	};
-};
-
-struct inet6_ifaddr {
-	struct in6_addr addr;
-	__u32 prefix_len;
-	__u32 rt_priority;
-	__u32 valid_lft;
-	__u32 prefered_lft;
-	refcount_t refcnt;
-	spinlock_t lock;
-	int state;
-	__u32 flags;
-	__u8 dad_probes;
-	__u8 stable_privacy_retry;
-	__u16 scope;
-	__u64 dad_nonce;
-	long unsigned int cstamp;
-	long unsigned int tstamp;
-	struct delayed_work dad_work;
-	struct inet6_dev *idev;
-	struct fib6_info *rt;
-	struct hlist_node addr_lst;
-	struct list_head if_list;
-	struct list_head tmp_list;
-	struct inet6_ifaddr *ifpub;
-	int regen_count;
-	bool tokenized;
-	struct callback_head rcu;
-	struct in6_addr peer_addr;
-};
-
-struct fib_rule_uid_range {
-	__u32 start;
-	__u32 end;
-};
-
-enum {
-	FRA_UNSPEC = 0,
-	FRA_DST = 1,
-	FRA_SRC = 2,
-	FRA_IIFNAME = 3,
-	FRA_GOTO = 4,
-	FRA_UNUSED2 = 5,
-	FRA_PRIORITY = 6,
-	FRA_UNUSED3 = 7,
-	FRA_UNUSED4 = 8,
-	FRA_UNUSED5 = 9,
-	FRA_FWMARK = 10,
-	FRA_FLOW = 11,
-	FRA_TUN_ID = 12,
-	FRA_SUPPRESS_IFGROUP = 13,
-	FRA_SUPPRESS_PREFIXLEN = 14,
-	FRA_TABLE = 15,
-	FRA_FWMASK = 16,
-	FRA_OIFNAME = 17,
-	FRA_PAD = 18,
-	FRA_L3MDEV = 19,
-	FRA_UID_RANGE = 20,
-	FRA_PROTOCOL = 21,
-	FRA_IP_PROTO = 22,
-	FRA_SPORT_RANGE = 23,
-	FRA_DPORT_RANGE = 24,
-	__FRA_MAX = 25,
-};
-
-enum {
-	FR_ACT_UNSPEC = 0,
-	FR_ACT_TO_TBL = 1,
-	FR_ACT_GOTO = 2,
-	FR_ACT_NOP = 3,
-	FR_ACT_RES3 = 4,
-	FR_ACT_RES4 = 5,
-	FR_ACT_BLACKHOLE = 6,
-	FR_ACT_UNREACHABLE = 7,
-	FR_ACT_PROHIBIT = 8,
-	__FR_ACT_MAX = 9,
-};
-
-struct fib_rule_notifier_info {
-	struct fib_notifier_info info;
-	struct fib_rule *rule;
-};
-
-struct trace_event_raw_kfree_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	void *location;
-	short unsigned int protocol;
-	char __data[0];
-};
-
-struct trace_event_raw_consume_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	char __data[0];
-};
-
-struct trace_event_raw_skb_copy_datagram_iovec {
-	struct trace_entry ent;
-	const void *skbaddr;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kfree_skb {};
-
-struct trace_event_data_offsets_consume_skb {};
-
-struct trace_event_data_offsets_skb_copy_datagram_iovec {};
-
-typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);
-
-typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
-
-struct trace_event_raw_net_dev_start_xmit {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
+struct sch_frag_data {
+	long unsigned int dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
 	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	unsigned int len;
-	unsigned int data_len;
-	int network_offset;
-	bool transport_offset_valid;
-	int transport_offset;
-	u8 tx_flags;
-	u16 gso_size;
-	u16 gso_segs;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	int rc;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit_timeout {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_driver;
-	int queue_index;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_template {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_verbose_template {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int napi_id;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	u32 hash;
-	bool l4_hash;
-	unsigned int len;
-	unsigned int data_len;
-	unsigned int truesize;
-	bool mac_header_valid;
-	int mac_header;
-	unsigned char nr_frags;
-	u16 gso_size;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_exit_template {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_net_dev_start_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit_timeout {
-	u32 name;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_net_dev_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_verbose_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_exit_template {};
-
-typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
-
-typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
-
-typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
-
-typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
-
-typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_ni_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
-
-struct trace_event_raw_napi_poll {
-	struct trace_entry ent;
-	struct napi_struct *napi;
-	u32 __data_loc_dev_name;
-	int work;
-	int budget;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_napi_poll {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
-
-enum tcp_ca_state {
-	TCP_CA_Open = 0,
-	TCP_CA_Disorder = 1,
-	TCP_CA_CWR = 2,
-	TCP_CA_Recovery = 3,
-	TCP_CA_Loss = 4,
-};
-
-struct trace_event_raw_sock_rcvqueue_full {
-	struct trace_entry ent;
-	int rmem_alloc;
-	unsigned int truesize;
-	int sk_rcvbuf;
-	char __data[0];
-};
-
-struct trace_event_raw_sock_exceed_buf_limit {
-	struct trace_entry ent;
-	char name[32];
-	long int *sysctl_mem;
-	long int allocated;
-	int sysctl_rmem;
-	int rmem_alloc;
-	int sysctl_wmem;
-	int wmem_alloc;
-	int wmem_queued;
-	int kind;
-	char __data[0];
-};
-
-struct trace_event_raw_inet_sock_set_state {
-	struct trace_entry ent;
-	const void *skaddr;
-	int oldstate;
-	int newstate;
-	__u16 sport;
-	__u16 dport;
-	__u16 family;
-	__u16 protocol;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sock_rcvqueue_full {};
-
-struct trace_event_data_offsets_sock_exceed_buf_limit {};
-
-struct trace_event_data_offsets_inet_sock_set_state {};
-
-typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
-
-typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
-
-typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
-
-struct trace_event_raw_udp_fail_queue_rcv_skb {
-	struct trace_entry ent;
-	int rc;
-	__u16 lport;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
-
-typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
-
-struct trace_event_raw_tcp_event_sk_skb {
-	struct trace_entry ent;
-	const void *skbaddr;
-	const void *skaddr;
-	int state;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_event_sk {
-	struct trace_entry ent;
-	const void *skaddr;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_retransmit_synack {
-	struct trace_entry ent;
-	const void *skaddr;
-	const void *req;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_probe {
-	struct trace_entry ent;
-	__u8 saddr[28];
-	__u8 daddr[28];
-	__u16 sport;
-	__u16 dport;
-	__u32 mark;
-	__u16 data_len;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 snd_cwnd;
-	__u32 ssthresh;
-	__u32 snd_wnd;
-	__u32 srtt;
-	__u32 rcv_wnd;
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_tcp_event_sk_skb {};
-
-struct trace_event_data_offsets_tcp_event_sk {};
-
-struct trace_event_data_offsets_tcp_retransmit_synack {};
-
-struct trace_event_data_offsets_tcp_probe {};
-
-typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
-
-typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
-
-struct trace_event_raw_fib_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	u8 proto;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[4];
-	__u8 dst[4];
-	__u8 gw4[4];
-	__u8 gw6[16];
-	u16 sport;
-	u16 dport;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
-
-struct trace_event_raw_qdisc_dequeue {
-	struct trace_entry ent;
-	struct Qdisc *qdisc;
-	const struct netdev_queue *txq;
-	int packets;
-	void *skbaddr;
-	int ifindex;
-	u32 handle;
-	u32 parent;
-	long unsigned int txq_state;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_reset {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_destroy {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	u32 handle;
-	char __data[0];
-};
-
-struct trace_event_raw_qdisc_create {
-	struct trace_entry ent;
-	u32 __data_loc_dev;
-	u32 __data_loc_kind;
-	u32 parent;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_qdisc_dequeue {};
-
-struct trace_event_data_offsets_qdisc_reset {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_destroy {
-	u32 dev;
-	u32 kind;
-};
-
-struct trace_event_data_offsets_qdisc_create {
-	u32 dev;
-	u32 kind;
-};
-
-typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
-
-typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
-
-typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
-
-struct bridge_stp_xstats {
-	__u64 transition_blk;
-	__u64 transition_fwd;
-	__u64 rx_bpdu;
-	__u64 tx_bpdu;
-	__u64 rx_tcn;
-	__u64 tx_tcn;
-};
-
-struct br_mcast_stats {
-	__u64 igmp_v1queries[2];
-	__u64 igmp_v2queries[2];
-	__u64 igmp_v3queries[2];
-	__u64 igmp_leaves[2];
-	__u64 igmp_v1reports[2];
-	__u64 igmp_v2reports[2];
-	__u64 igmp_v3reports[2];
-	__u64 igmp_parse_errors;
-	__u64 mld_v1queries[2];
-	__u64 mld_v2queries[2];
-	__u64 mld_leaves[2];
-	__u64 mld_v1reports[2];
-	__u64 mld_v2reports[2];
-	__u64 mld_parse_errors;
-	__u64 mcast_bytes[2];
-	__u64 mcast_packets[2];
-};
-
-struct br_ip {
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} src;
-	union {
-		__be32 ip4;
-		struct in6_addr ip6;
-	} dst;
-	__be16 proto;
-	__u16 vid;
-};
-
-struct bridge_id {
-	unsigned char prio[2];
-	unsigned char addr[6];
-};
-
-typedef struct bridge_id bridge_id;
-
-struct mac_addr {
-	unsigned char addr[6];
-};
-
-typedef struct mac_addr mac_addr;
-
-typedef __u16 port_id;
-
-struct bridge_mcast_own_query {
-	struct timer_list timer;
-	u32 startup_sent;
-};
-
-struct bridge_mcast_other_query {
-	struct timer_list timer;
-	long unsigned int delay_time;
-};
-
-struct net_bridge_port;
-
-struct bridge_mcast_querier {
-	struct br_ip addr;
-	struct net_bridge_port *port;
-};
-
-struct net_bridge;
-
-struct net_bridge_vlan_group;
-
-struct bridge_mcast_stats;
-
-struct net_bridge_port {
-	struct net_bridge *br;
-	struct net_device *dev;
-	struct list_head list;
-	long unsigned int flags;
-	struct net_bridge_vlan_group *vlgrp;
-	struct net_bridge_port *backup_port;
-	u8 priority;
-	u8 state;
-	u16 port_no;
-	unsigned char topology_change_ack;
-	unsigned char config_pending;
-	port_id port_id;
-	port_id designated_port;
-	bridge_id designated_root;
-	bridge_id designated_bridge;
-	u32 path_cost;
-	u32 designated_cost;
-	long unsigned int designated_age;
-	struct timer_list forward_delay_timer;
-	struct timer_list hold_timer;
-	struct timer_list message_age_timer;
-	struct kobject kobj;
-	struct callback_head rcu;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	unsigned char multicast_router;
-	struct bridge_mcast_stats *mcast_stats;
-	struct timer_list multicast_router_timer;
-	struct hlist_head mglist;
-	struct hlist_node rlist;
-	char sysfs_name[16];
-	struct netpoll *np;
-	int offload_fwd_mark;
-	u16 group_fwd_mask;
-	u16 backup_redirected_cnt;
-	struct bridge_stp_xstats stp_xstats;
-};
-
-struct bridge_mcast_stats {
-	struct br_mcast_stats mstats;
-	struct u64_stats_sync syncp;
-};
-
-struct net_bridge {
-	spinlock_t lock;
-	spinlock_t hash_lock;
-	struct list_head port_list;
-	struct net_device *dev;
-	struct pcpu_sw_netstats *stats;
-	long unsigned int options;
 	__be16 vlan_proto;
-	u16 default_pvid;
-	struct net_bridge_vlan_group *vlgrp;
-	struct rhashtable fdb_hash_tbl;
-	union {
-		struct rtable fake_rtable;
-		struct rt6_info fake_rt6_info;
-	};
-	u16 group_fwd_mask;
-	u16 group_fwd_mask_required;
-	bridge_id designated_root;
-	bridge_id bridge_id;
-	unsigned char topology_change;
-	unsigned char topology_change_detected;
-	u16 root_port;
-	long unsigned int max_age;
-	long unsigned int hello_time;
-	long unsigned int forward_delay;
-	long unsigned int ageing_time;
-	long unsigned int bridge_max_age;
-	long unsigned int bridge_hello_time;
-	long unsigned int bridge_forward_delay;
-	long unsigned int bridge_ageing_time;
-	u32 root_path_cost;
-	u8 group_addr[6];
-	enum {
-		BR_NO_STP = 0,
-		BR_KERNEL_STP = 1,
-		BR_USER_STP = 2,
-	} stp_enabled;
-	u32 hash_max;
-	u32 multicast_last_member_count;
-	u32 multicast_startup_query_count;
-	u8 multicast_igmp_version;
-	u8 multicast_router;
-	u8 multicast_mld_version;
-	spinlock_t multicast_lock;
-	long unsigned int multicast_last_member_interval;
-	long unsigned int multicast_membership_interval;
-	long unsigned int multicast_querier_interval;
-	long unsigned int multicast_query_interval;
-	long unsigned int multicast_query_response_interval;
-	long unsigned int multicast_startup_query_interval;
-	struct rhashtable mdb_hash_tbl;
-	struct rhashtable sg_port_tbl;
-	struct hlist_head mcast_gc_list;
-	struct hlist_head mdb_list;
-	struct hlist_head router_list;
-	struct timer_list multicast_router_timer;
-	struct bridge_mcast_other_query ip4_other_query;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_querier ip4_querier;
-	struct bridge_mcast_stats *mcast_stats;
-	struct bridge_mcast_other_query ip6_other_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	struct bridge_mcast_querier ip6_querier;
-	struct work_struct mcast_gc_work;
-	struct timer_list hello_timer;
-	struct timer_list tcn_timer;
-	struct timer_list topology_change_timer;
-	struct delayed_work gc_work;
-	struct kobject *ifobj;
-	u32 auto_cnt;
-	int offload_fwd_mark;
-	struct hlist_head fdb_list;
-	struct list_head mrp_list;
-};
-
-struct net_bridge_vlan_group {
-	struct rhashtable vlan_hash;
-	struct rhashtable tunnel_hash;
-	struct list_head vlan_list;
-	u16 num_vlans;
-	u16 pvid;
-	u8 pvid_state;
-};
-
-struct net_bridge_fdb_key {
-	mac_addr addr;
-	u16 vlan_id;
-};
-
-struct net_bridge_fdb_entry {
-	struct rhash_head rhnode;
-	struct net_bridge_port *dst;
-	struct net_bridge_fdb_key key;
-	struct hlist_node fdb_node;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int updated;
-	long unsigned int used;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct trace_event_raw_br_fdb_add {
-	struct trace_entry ent;
-	u8 ndm_flags;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	u16 nlh_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_external_learn_add {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_fdb_delete {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	char __data[0];
-};
-
-struct trace_event_raw_br_fdb_update {
-	struct trace_entry ent;
-	u32 __data_loc_br_dev;
-	u32 __data_loc_dev;
-	unsigned char addr[6];
-	u16 vid;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_br_fdb_add {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_external_learn_add {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_fdb_delete {
-	u32 br_dev;
-	u32 dev;
-};
-
-struct trace_event_data_offsets_br_fdb_update {
-	u32 br_dev;
-	u32 dev;
-};
-
-typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
-
-typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
-
-typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
-
-typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
-
-struct trace_event_raw_page_pool_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	s32 inflight;
-	u32 hold;
-	u32 release;
-	u64 cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_release {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 release;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_state_hold {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	const struct page *page;
-	u32 hold;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_page_pool_update_nid {
-	struct trace_entry ent;
-	const struct page_pool *pool;
-	int pool_nid;
-	int new_nid;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_page_pool_release {};
-
-struct trace_event_data_offsets_page_pool_state_release {};
-
-struct trace_event_data_offsets_page_pool_state_hold {};
-
-struct trace_event_data_offsets_page_pool_update_nid {};
-
-typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
-
-typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
-
-typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
-
-struct trace_event_raw_neigh_create {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	int entries;
-	u8 created;
-	u8 gc_exempt;
-	u8 primary_key4[4];
-	u8 primary_key6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_neigh_update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u8 new_lladdr[32];
-	u8 new_state;
-	u32 update_flags;
-	u32 pid;
-	char __data[0];
-};
-
-struct trace_event_raw_neigh__update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u32 err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_neigh_create {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh_update {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh__update {
-	u32 dev;
-};
-
-typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
-
-typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
-
-typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
-
-struct clock_identity {
-	u8 id[8];
-};
-
-struct port_identity {
-	struct clock_identity clock_identity;
-	__be16 port_number;
-};
-
-struct ptp_header {
-	u8 tsmt;
-	u8 ver;
-	__be16 message_length;
-	u8 domain_number;
-	u8 reserved1;
-	u8 flag_field[2];
-	__be64 correction;
-	__be32 reserved2;
-	struct port_identity source_port_identity;
-	__be16 sequence_id;
-	u8 control;
-	u8 log_message_interval;
-} __attribute__((packed));
-
-struct update_classid_context {
-	u32 classid;
-	unsigned int batch;
-};
-
-enum lwtunnel_encap_types {
-	LWTUNNEL_ENCAP_NONE = 0,
-	LWTUNNEL_ENCAP_MPLS = 1,
-	LWTUNNEL_ENCAP_IP = 2,
-	LWTUNNEL_ENCAP_ILA = 3,
-	LWTUNNEL_ENCAP_IP6 = 4,
-	LWTUNNEL_ENCAP_SEG6 = 5,
-	LWTUNNEL_ENCAP_BPF = 6,
-	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
-	LWTUNNEL_ENCAP_RPL = 8,
-	__LWTUNNEL_ENCAP_MAX = 9,
-};
-
-struct rtnexthop {
-	short unsigned int rtnh_len;
-	unsigned char rtnh_flags;
-	unsigned char rtnh_hops;
-	int rtnh_ifindex;
-};
-
-struct lwtunnel_encap_ops {
-	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
-	void (*destroy_state)(struct lwtunnel_state *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*input)(struct sk_buff *);
-	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
-	int (*get_encap_size)(struct lwtunnel_state *);
-	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	unsigned int l2_len;
+	u8 l2_data[18];
 	int (*xmit)(struct sk_buff *);
-	struct module *owner;
-};
-
-enum {
-	LWT_BPF_PROG_UNSPEC = 0,
-	LWT_BPF_PROG_FD = 1,
-	LWT_BPF_PROG_NAME = 2,
-	__LWT_BPF_PROG_MAX = 3,
-};
-
-enum {
-	LWT_BPF_UNSPEC = 0,
-	LWT_BPF_IN = 1,
-	LWT_BPF_OUT = 2,
-	LWT_BPF_XMIT = 3,
-	LWT_BPF_XMIT_HEADROOM = 4,
-	__LWT_BPF_MAX = 5,
-};
-
-enum {
-	LWTUNNEL_XMIT_DONE = 0,
-	LWTUNNEL_XMIT_CONTINUE = 1,
-};
-
-struct bpf_lwt_prog {
-	struct bpf_prog *prog;
-	char *name;
-};
-
-struct bpf_lwt {
-	struct bpf_lwt_prog in;
-	struct bpf_lwt_prog out;
-	struct bpf_lwt_prog xmit;
-	int family;
-};
-
-struct bpf_stab {
-	struct bpf_map map;
-	struct sock **sks;
-	struct sk_psock_progs progs;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
-
-struct sock_map_seq_info {
-	struct bpf_map *map;
-	struct sock *sk;
-	u32 index;
-};
-
-struct bpf_iter__sockmap {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		struct sock *sk;
-	};
-};
-
-struct bpf_shtab_elem {
-	struct callback_head rcu;
-	u32 hash;
-	struct sock *sk;
-	struct hlist_node node;
-	u8 key[0];
-};
-
-struct bpf_shtab_bucket {
-	struct hlist_head head;
-	raw_spinlock_t lock;
-};
-
-struct bpf_shtab {
-	struct bpf_map map;
-	struct bpf_shtab_bucket *buckets;
-	u32 buckets_num;
-	u32 elem_size;
-	struct sk_psock_progs progs;
-	atomic_t count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
-
-struct sock_hash_seq_info {
-	struct bpf_map *map;
-	struct bpf_shtab *htab;
-	u32 bucket_id;
-};
-
-struct dst_cache_pcpu {
-	long unsigned int refresh_ts;
-	struct dst_entry *dst;
-	u32 cookie;
-	union {
-		struct in_addr in_saddr;
-		struct in6_addr in6_saddr;
-	};
-};
-
-struct genl_dumpit_info {
-	const struct genl_family *family;
-	struct genl_ops op;
-	struct nlattr **attrs;
-};
-
-enum devlink_command {
-	DEVLINK_CMD_UNSPEC = 0,
-	DEVLINK_CMD_GET = 1,
-	DEVLINK_CMD_SET = 2,
-	DEVLINK_CMD_NEW = 3,
-	DEVLINK_CMD_DEL = 4,
-	DEVLINK_CMD_PORT_GET = 5,
-	DEVLINK_CMD_PORT_SET = 6,
-	DEVLINK_CMD_PORT_NEW = 7,
-	DEVLINK_CMD_PORT_DEL = 8,
-	DEVLINK_CMD_PORT_SPLIT = 9,
-	DEVLINK_CMD_PORT_UNSPLIT = 10,
-	DEVLINK_CMD_SB_GET = 11,
-	DEVLINK_CMD_SB_SET = 12,
-	DEVLINK_CMD_SB_NEW = 13,
-	DEVLINK_CMD_SB_DEL = 14,
-	DEVLINK_CMD_SB_POOL_GET = 15,
-	DEVLINK_CMD_SB_POOL_SET = 16,
-	DEVLINK_CMD_SB_POOL_NEW = 17,
-	DEVLINK_CMD_SB_POOL_DEL = 18,
-	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
-	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
-	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
-	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
-	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
-	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
-	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
-	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
-	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
-	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
-	DEVLINK_CMD_ESWITCH_GET = 29,
-	DEVLINK_CMD_ESWITCH_SET = 30,
-	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
-	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
-	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
-	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
-	DEVLINK_CMD_RESOURCE_SET = 35,
-	DEVLINK_CMD_RESOURCE_DUMP = 36,
-	DEVLINK_CMD_RELOAD = 37,
-	DEVLINK_CMD_PARAM_GET = 38,
-	DEVLINK_CMD_PARAM_SET = 39,
-	DEVLINK_CMD_PARAM_NEW = 40,
-	DEVLINK_CMD_PARAM_DEL = 41,
-	DEVLINK_CMD_REGION_GET = 42,
-	DEVLINK_CMD_REGION_SET = 43,
-	DEVLINK_CMD_REGION_NEW = 44,
-	DEVLINK_CMD_REGION_DEL = 45,
-	DEVLINK_CMD_REGION_READ = 46,
-	DEVLINK_CMD_PORT_PARAM_GET = 47,
-	DEVLINK_CMD_PORT_PARAM_SET = 48,
-	DEVLINK_CMD_PORT_PARAM_NEW = 49,
-	DEVLINK_CMD_PORT_PARAM_DEL = 50,
-	DEVLINK_CMD_INFO_GET = 51,
-	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
-	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
-	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
-	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
-	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
-	DEVLINK_CMD_FLASH_UPDATE = 58,
-	DEVLINK_CMD_FLASH_UPDATE_END = 59,
-	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
-	DEVLINK_CMD_TRAP_GET = 61,
-	DEVLINK_CMD_TRAP_SET = 62,
-	DEVLINK_CMD_TRAP_NEW = 63,
-	DEVLINK_CMD_TRAP_DEL = 64,
-	DEVLINK_CMD_TRAP_GROUP_GET = 65,
-	DEVLINK_CMD_TRAP_GROUP_SET = 66,
-	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
-	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
-	DEVLINK_CMD_TRAP_POLICER_GET = 69,
-	DEVLINK_CMD_TRAP_POLICER_SET = 70,
-	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
-	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
-	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
-	__DEVLINK_CMD_MAX = 74,
-	DEVLINK_CMD_MAX = 73,
-};
-
-enum devlink_eswitch_mode {
-	DEVLINK_ESWITCH_MODE_LEGACY = 0,
-	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
-};
-
-enum {
-	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
-	DEVLINK_ATTR_STATS_RX_BYTES = 1,
-	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
-	__DEVLINK_ATTR_STATS_MAX = 3,
-	DEVLINK_ATTR_STATS_MAX = 2,
-};
-
-enum {
-	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
-	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
-	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
-	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
-};
-
-enum {
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
-	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
-};
-
-enum devlink_attr {
-	DEVLINK_ATTR_UNSPEC = 0,
-	DEVLINK_ATTR_BUS_NAME = 1,
-	DEVLINK_ATTR_DEV_NAME = 2,
-	DEVLINK_ATTR_PORT_INDEX = 3,
-	DEVLINK_ATTR_PORT_TYPE = 4,
-	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
-	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
-	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
-	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
-	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
-	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
-	DEVLINK_ATTR_SB_INDEX = 11,
-	DEVLINK_ATTR_SB_SIZE = 12,
-	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
-	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
-	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
-	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
-	DEVLINK_ATTR_SB_POOL_INDEX = 17,
-	DEVLINK_ATTR_SB_POOL_TYPE = 18,
-	DEVLINK_ATTR_SB_POOL_SIZE = 19,
-	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
-	DEVLINK_ATTR_SB_THRESHOLD = 21,
-	DEVLINK_ATTR_SB_TC_INDEX = 22,
-	DEVLINK_ATTR_SB_OCC_CUR = 23,
-	DEVLINK_ATTR_SB_OCC_MAX = 24,
-	DEVLINK_ATTR_ESWITCH_MODE = 25,
-	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
-	DEVLINK_ATTR_DPIPE_TABLES = 27,
-	DEVLINK_ATTR_DPIPE_TABLE = 28,
-	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
-	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
-	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
-	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
-	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
-	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
-	DEVLINK_ATTR_DPIPE_ENTRY = 35,
-	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
-	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
-	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
-	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
-	DEVLINK_ATTR_DPIPE_MATCH = 40,
-	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
-	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
-	DEVLINK_ATTR_DPIPE_ACTION = 43,
-	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
-	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
-	DEVLINK_ATTR_DPIPE_VALUE = 46,
-	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
-	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
-	DEVLINK_ATTR_DPIPE_HEADERS = 49,
-	DEVLINK_ATTR_DPIPE_HEADER = 50,
-	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
-	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
-	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
-	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
-	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
-	DEVLINK_ATTR_DPIPE_FIELD = 56,
-	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
-	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
-	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
-	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
-	DEVLINK_ATTR_PAD = 61,
-	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
-	DEVLINK_ATTR_RESOURCE_LIST = 63,
-	DEVLINK_ATTR_RESOURCE = 64,
-	DEVLINK_ATTR_RESOURCE_NAME = 65,
-	DEVLINK_ATTR_RESOURCE_ID = 66,
-	DEVLINK_ATTR_RESOURCE_SIZE = 67,
-	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
-	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
-	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
-	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
-	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
-	DEVLINK_ATTR_RESOURCE_UNIT = 73,
-	DEVLINK_ATTR_RESOURCE_OCC = 74,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
-	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
-	DEVLINK_ATTR_PORT_FLAVOUR = 77,
-	DEVLINK_ATTR_PORT_NUMBER = 78,
-	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
-	DEVLINK_ATTR_PARAM = 80,
-	DEVLINK_ATTR_PARAM_NAME = 81,
-	DEVLINK_ATTR_PARAM_GENERIC = 82,
-	DEVLINK_ATTR_PARAM_TYPE = 83,
-	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
-	DEVLINK_ATTR_PARAM_VALUE = 85,
-	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
-	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
-	DEVLINK_ATTR_REGION_NAME = 88,
-	DEVLINK_ATTR_REGION_SIZE = 89,
-	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
-	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
-	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
-	DEVLINK_ATTR_REGION_CHUNKS = 93,
-	DEVLINK_ATTR_REGION_CHUNK = 94,
-	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
-	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
-	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
-	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
-	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
-	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
-	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
-	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
-	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
-	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
-	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
-	DEVLINK_ATTR_FMSG = 106,
-	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
-	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
-	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
-	DEVLINK_ATTR_FMSG_NEST_END = 110,
-	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
-	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
-	DEVLINK_ATTR_HEALTH_REPORTER = 114,
-	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
-	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
-	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
-	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
-	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
-	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
-	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
-	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
-	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
-	DEVLINK_ATTR_STATS = 129,
-	DEVLINK_ATTR_TRAP_NAME = 130,
-	DEVLINK_ATTR_TRAP_ACTION = 131,
-	DEVLINK_ATTR_TRAP_TYPE = 132,
-	DEVLINK_ATTR_TRAP_GENERIC = 133,
-	DEVLINK_ATTR_TRAP_METADATA = 134,
-	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
-	DEVLINK_ATTR_RELOAD_FAILED = 136,
-	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
-	DEVLINK_ATTR_NETNS_FD = 138,
-	DEVLINK_ATTR_NETNS_PID = 139,
-	DEVLINK_ATTR_NETNS_ID = 140,
-	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
-	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
-	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
-	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
-	DEVLINK_ATTR_PORT_FUNCTION = 145,
-	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
-	DEVLINK_ATTR_PORT_LANES = 147,
-	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
-	DEVLINK_ATTR_PORT_EXTERNAL = 149,
-	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
-	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
-	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
-	DEVLINK_ATTR_RELOAD_ACTION = 153,
-	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
-	DEVLINK_ATTR_RELOAD_LIMITS = 155,
-	DEVLINK_ATTR_DEV_STATS = 156,
-	DEVLINK_ATTR_RELOAD_STATS = 157,
-	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
-	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
-	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
-	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
-	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
-	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
-	__DEVLINK_ATTR_MAX = 164,
-	DEVLINK_ATTR_MAX = 163,
-};
-
-enum devlink_dpipe_match_type {
-	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
-};
-
-enum devlink_dpipe_action_type {
-	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
-};
-
-enum devlink_dpipe_field_ethernet_id {
-	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
-};
-
-enum devlink_dpipe_field_ipv4_id {
-	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
-};
-
-enum devlink_dpipe_field_ipv6_id {
-	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
-};
-
-enum devlink_dpipe_header_id {
-	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
-	DEVLINK_DPIPE_HEADER_IPV4 = 1,
-	DEVLINK_DPIPE_HEADER_IPV6 = 2,
-};
-
-enum devlink_resource_unit {
-	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
-};
-
-enum devlink_port_function_attr {
-	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
-	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
-	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 2,
-	DEVLINK_PORT_FUNCTION_ATTR_MAX = 1,
-};
-
-struct devlink_dpipe_match {
-	enum devlink_dpipe_match_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_action {
-	enum devlink_dpipe_action_type type;
-	unsigned int header_index;
-	struct devlink_dpipe_header *header;
-	unsigned int field_id;
-};
-
-struct devlink_dpipe_value {
-	union {
-		struct devlink_dpipe_action *action;
-		struct devlink_dpipe_match *match;
-	};
-	unsigned int mapping_value;
-	bool mapping_valid;
-	unsigned int value_size;
-	void *value;
-	void *mask;
-};
-
-struct devlink_dpipe_entry {
-	u64 index;
-	struct devlink_dpipe_value *match_values;
-	unsigned int match_values_count;
-	struct devlink_dpipe_value *action_values;
-	unsigned int action_values_count;
-	u64 counter;
-	bool counter_valid;
-};
-
-struct devlink_dpipe_dump_ctx {
-	struct genl_info *info;
-	enum devlink_command cmd;
-	struct sk_buff *skb;
-	struct nlattr *nest;
-	void *hdr;
-};
-
-struct devlink_dpipe_table_ops;
-
-struct devlink_dpipe_table {
-	void *priv;
-	struct list_head list;
-	const char *name;
-	bool counters_enabled;
-	bool counter_control_extern;
-	bool resource_valid;
-	u64 resource_id;
-	u64 resource_units;
-	struct devlink_dpipe_table_ops *table_ops;
-	struct callback_head rcu;
-};
-
-struct devlink_dpipe_table_ops {
-	int (*actions_dump)(void *, struct sk_buff *);
-	int (*matches_dump)(void *, struct sk_buff *);
-	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
-	int (*counters_set_update)(void *, bool);
-	u64 (*size_get)(void *);
-};
-
-struct devlink_resource_size_params {
-	u64 size_min;
-	u64 size_max;
-	u64 size_granularity;
-	enum devlink_resource_unit unit;
-};
-
-typedef u64 devlink_resource_occ_get_t(void *);
-
-struct devlink_resource {
-	const char *name;
-	u64 id;
-	u64 size;
-	u64 size_new;
-	bool size_valid;
-	struct devlink_resource *parent;
-	struct devlink_resource_size_params size_params;
-	struct list_head list;
-	struct list_head resource_list;
-	devlink_resource_occ_get_t *occ_get;
-	void *occ_get_priv;
-};
-
-enum devlink_param_type {
-	DEVLINK_PARAM_TYPE_U8 = 0,
-	DEVLINK_PARAM_TYPE_U16 = 1,
-	DEVLINK_PARAM_TYPE_U32 = 2,
-	DEVLINK_PARAM_TYPE_STRING = 3,
-	DEVLINK_PARAM_TYPE_BOOL = 4,
-};
-
-struct devlink_flash_notify {
-	const char *status_msg;
-	const char *component;
-	long unsigned int done;
-	long unsigned int total;
-	long unsigned int timeout;
-};
-
-struct devlink_param {
-	u32 id;
-	const char *name;
-	bool generic;
-	enum devlink_param_type type;
-	long unsigned int supported_cmodes;
-	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
-	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
-};
-
-struct devlink_param_item {
-	struct list_head list;
-	const struct devlink_param *param;
-	union devlink_param_value driverinit_value;
-	bool driverinit_value_valid;
-	bool published;
-};
-
-enum devlink_param_generic_id {
-	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
-	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
-	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
-	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
-	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
-	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
-	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
-	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
-	__DEVLINK_PARAM_GENERIC_ID_MAX = 11,
-	DEVLINK_PARAM_GENERIC_ID_MAX = 10,
-};
-
-struct devlink_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-struct devlink_port_region_ops {
-	const char *name;
-	void (*destructor)(const void *);
-	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
-	void *priv;
-};
-
-enum devlink_health_reporter_state {
-	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
-	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
-};
-
-struct devlink_health_reporter;
-
-struct devlink_fmsg;
-
-struct devlink_health_reporter_ops {
-	char *name;
-	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
-	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
-	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
-	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
-};
-
-struct devlink_health_reporter {
-	struct list_head list;
-	void *priv;
-	const struct devlink_health_reporter_ops *ops;
-	struct devlink *devlink;
-	struct devlink_port *devlink_port;
-	struct devlink_fmsg *dump_fmsg;
-	struct mutex dump_lock;
-	u64 graceful_period;
-	bool auto_recover;
-	bool auto_dump;
-	u8 health_state;
-	u64 dump_ts;
-	u64 dump_real_ts;
-	u64 error_count;
-	u64 recovery_count;
-	u64 last_recovery_ts;
-	refcount_t refcount;
-};
-
-struct devlink_fmsg {
-	struct list_head item_list;
-	bool putting_binary;
-};
-
-struct devlink_trap_metadata {
-	const char *trap_name;
-	const char *trap_group_name;
-	struct net_device *input_dev;
-	const struct flow_action_cookie *fa_cookie;
-	enum devlink_trap_type trap_type;
-};
-
-enum devlink_trap_generic_id {
-	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
-	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
-	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
-	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
-	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
-	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
-	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
-	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
-	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
-	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
-	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
-	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
-	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
-	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
-	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
-	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
-	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
-	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
-	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
-	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
-	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
-	DEVLINK_TRAP_GENERIC_ID_STP = 29,
-	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
-	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
-	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
-	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
-	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
-	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
-	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
-	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
-	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
-	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
-	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
-	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
-	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
-	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
-	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
-	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
-	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
-	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
-	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
-	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
-	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
-	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
-	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
-	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
-	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
-	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
-	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
-	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
-	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
-	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
-	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
-	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
-	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
-	__DEVLINK_TRAP_GENERIC_ID_MAX = 90,
-	DEVLINK_TRAP_GENERIC_ID_MAX = 89,
-};
-
-enum devlink_trap_group_generic_id {
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
-	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
-	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
-};
-
-struct devlink_info_req {
-	struct sk_buff *msg;
-};
-
-struct trace_event_raw_devlink_hwmsg {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	bool incoming;
-	long unsigned int type;
-	u32 __data_loc_buf;
-	size_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_hwerr {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	int err;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_recover_aborted {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	bool health_state;
-	u64 time_since_last_recover;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_health_reporter_state_update {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_reporter_name;
-	u8 new_state;
-	char __data[0];
-};
-
-struct trace_event_raw_devlink_trap_report {
-	struct trace_entry ent;
-	u32 __data_loc_bus_name;
-	u32 __data_loc_dev_name;
-	u32 __data_loc_driver_name;
-	u32 __data_loc_trap_name;
-	u32 __data_loc_trap_group_name;
-	u32 __data_loc_input_dev_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_devlink_hwmsg {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_devlink_hwerr {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-	u32 msg;
-};
-
-struct trace_event_data_offsets_devlink_health_recover_aborted {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_health_reporter_state_update {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 reporter_name;
-};
-
-struct trace_event_data_offsets_devlink_trap_report {
-	u32 bus_name;
-	u32 dev_name;
-	u32 driver_name;
-	u32 trap_name;
-	u32 trap_group_name;
-	u32 input_dev_name;
-};
-
-typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
-
-typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
-
-typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
-
-typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
-
-typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
-
-typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
-
-struct devlink_sb {
-	struct list_head list;
-	unsigned int index;
-	u32 size;
-	u16 ingress_pools_count;
-	u16 egress_pools_count;
-	u16 ingress_tc_count;
-	u16 egress_tc_count;
-};
-
-struct devlink_region {
-	struct devlink *devlink;
-	struct devlink_port *port;
-	struct list_head list;
-	union {
-		const struct devlink_region_ops *ops;
-		const struct devlink_port_region_ops *port_ops;
-	};
-	struct list_head snapshot_list;
-	u32 max_snapshots;
-	u32 cur_snapshots;
-	u64 size;
-};
-
-struct devlink_snapshot {
-	struct list_head list;
-	struct devlink_region *region;
-	u8 *data;
-	u32 id;
-};
-
-enum devlink_multicast_groups {
-	DEVLINK_MCGRP_CONFIG = 0,
-};
-
-struct devlink_reload_combination {
-	enum devlink_reload_action action;
-	enum devlink_reload_limit limit;
-};
-
-struct devlink_fmsg_item {
-	struct list_head list;
-	int attrtype;
-	u8 nla_type;
-	u16 len;
-	int value[0];
-};
-
-struct devlink_stats {
-	u64 rx_bytes;
-	u64 rx_packets;
-	struct u64_stats_sync syncp;
-};
-
-struct devlink_trap_policer_item {
-	const struct devlink_trap_policer *policer;
-	u64 rate;
-	u64 burst;
-	struct list_head list;
-};
-
-struct devlink_trap_group_item {
-	const struct devlink_trap_group *group;
-	struct devlink_trap_policer_item *policer_item;
-	struct list_head list;
-	struct devlink_stats *stats;
-};
-
-struct devlink_trap_item {
-	const struct devlink_trap *trap;
-	struct devlink_trap_group_item *group_item;
-	struct list_head list;
-	enum devlink_trap_action action;
-	struct devlink_stats *stats;
-	void *priv;
-};
-
-struct gro_cell;
-
-struct gro_cells {
-	struct gro_cell *cells;
-};
-
-struct gro_cell {
-	struct sk_buff_head napi_skbs;
-	struct napi_struct napi;
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
-	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
-	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
-	SK_DIAG_BPF_STORAGE = 1,
-	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
-};
-
-enum {
-	SK_DIAG_BPF_STORAGE_NONE = 0,
-	SK_DIAG_BPF_STORAGE_PAD = 1,
-	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
-	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
-	__SK_DIAG_BPF_STORAGE_MAX = 4,
-};
-
-typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
-
-struct bpf_sk_storage_diag {
-	u32 nr_maps;
-	struct bpf_map *maps[0];
-};
-
-struct bpf_iter_seq_sk_storage_map_info {
-	struct bpf_map *map;
-	unsigned int bucket_id;
-	unsigned int skip_elems;
-};
-
-struct bpf_iter__bpf_sk_storage_map {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		struct sock *sk;
-	};
-	union {
-		void *value;
-	};
-};
-
-struct compat_cmsghdr {
-	compat_size_t cmsg_len;
-	compat_int_t cmsg_level;
-	compat_int_t cmsg_type;
-};
-
-typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
-
-struct nvmem_cell___2;
-
-struct fch_hdr {
-	__u8 daddr[6];
-	__u8 saddr[6];
-};
-
-struct fcllc {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 llc;
-	__u8 protid[3];
-	__be16 ethertype;
-};
-
-struct fddi_8022_1_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-};
-
-struct fddi_8022_2_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl_1;
-	__u8 ctrl_2;
-};
-
-struct fddi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct fddihdr {
-	__u8 fc;
-	__u8 daddr[6];
-	__u8 saddr[6];
-	union {
-		struct fddi_8022_1_hdr llc_8022_1;
-		struct fddi_8022_2_hdr llc_8022_2;
-		struct fddi_snap_hdr llc_snap;
-	} hdr;
-} __attribute__((packed));
-
-struct hippi_fp_hdr {
-	__be32 fixed;
-	__be32 d2_size;
-};
-
-struct hippi_le_hdr {
-	__u8 message_type: 4;
-	__u8 double_wide: 1;
-	__u8 fc: 3;
-	__u8 dest_switch_addr[3];
-	__u8 src_addr_type: 4;
-	__u8 dest_addr_type: 4;
-	__u8 src_switch_addr[3];
-	__u16 reserved;
-	__u8 daddr[6];
-	__u16 locally_administered;
-	__u8 saddr[6];
-};
-
-struct hippi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct hippi_hdr {
-	struct hippi_fp_hdr fp;
-	struct hippi_le_hdr le;
-	struct hippi_snap_hdr snap;
-};
-
-struct hippi_cb {
-	__u32 ifield;
-};
-
-enum macvlan_mode {
-	MACVLAN_MODE_PRIVATE = 1,
-	MACVLAN_MODE_VEPA = 2,
-	MACVLAN_MODE_BRIDGE = 4,
-	MACVLAN_MODE_PASSTHRU = 8,
-	MACVLAN_MODE_SOURCE = 16,
-};
-
-struct tc_ratespec {
-	unsigned char cell_log;
-	__u8 linklayer;
-	short unsigned int overhead;
-	short int cell_align;
-	short unsigned int mpu;
-	__u32 rate;
-};
-
-struct tc_prio_qopt {
-	int bands;
-	__u8 priomap[16];
-};
-
-enum {
-	TCA_UNSPEC = 0,
-	TCA_KIND = 1,
-	TCA_OPTIONS = 2,
-	TCA_STATS = 3,
-	TCA_XSTATS = 4,
-	TCA_RATE = 5,
-	TCA_FCNT = 6,
-	TCA_STATS2 = 7,
-	TCA_STAB = 8,
-	TCA_PAD = 9,
-	TCA_DUMP_INVISIBLE = 10,
-	TCA_CHAIN = 11,
-	TCA_HW_OFFLOAD = 12,
-	TCA_INGRESS_BLOCK = 13,
-	TCA_EGRESS_BLOCK = 14,
-	TCA_DUMP_FLAGS = 15,
-	__TCA_MAX = 16,
-};
-
-struct vlan_pcpu_stats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 rx_multicast;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-	u32 rx_errors;
-	u32 tx_dropped;
-};
-
-struct netpoll___2;
-
-struct skb_array {
-	struct ptr_ring ring;
-};
-
-struct macvlan_port;
-
-struct macvlan_dev {
-	struct net_device *dev;
-	struct list_head list;
-	struct hlist_node hlist;
-	struct macvlan_port *port;
-	struct net_device *lowerdev;
-	void *accel_priv;
-	struct vlan_pcpu_stats *pcpu_stats;
-	long unsigned int mc_filter[4];
-	netdev_features_t set_features;
-	enum macvlan_mode mode;
-	u16 flags;
-	unsigned int macaddr_count;
-	struct netpoll___2 *netpoll;
-};
-
-struct psched_ratecfg {
-	u64 rate_bytes_ps;
-	u32 mult;
-	u16 overhead;
-	u8 linklayer;
-	u8 shift;
-};
-
-struct mini_Qdisc_pair {
-	struct mini_Qdisc miniq1;
-	struct mini_Qdisc miniq2;
-	struct mini_Qdisc **p_miniq;
-};
-
-struct pfifo_fast_priv {
-	struct skb_array q[3];
-};
-
-struct tc_qopt_offload_stats {
-	struct gnet_stats_basic_packed *bstats;
-	struct gnet_stats_queue *qstats;
-};
-
-enum tc_mq_command {
-	TC_MQ_CREATE = 0,
-	TC_MQ_DESTROY = 1,
-	TC_MQ_STATS = 2,
-	TC_MQ_GRAFT = 3,
-};
-
-struct tc_mq_opt_offload_graft_params {
-	long unsigned int queue;
-	u32 child_handle;
-};
-
-struct tc_mq_qopt_offload {
-	enum tc_mq_command command;
-	u32 handle;
-	union {
-		struct tc_qopt_offload_stats stats;
-		struct tc_mq_opt_offload_graft_params graft_params;
-	};
-};
-
-struct mq_sched {
-	struct Qdisc **qdiscs;
-};
-
-enum tc_link_layer {
-	TC_LINKLAYER_UNAWARE = 0,
-	TC_LINKLAYER_ETHERNET = 1,
-	TC_LINKLAYER_ATM = 2,
-};
-
-enum {
-	TCA_STAB_UNSPEC = 0,
-	TCA_STAB_BASE = 1,
-	TCA_STAB_DATA = 2,
-	__TCA_STAB_MAX = 3,
-};
-
-struct qdisc_rate_table {
-	struct tc_ratespec rate;
-	u32 data[256];
-	struct qdisc_rate_table *next;
-	int refcnt;
-};
-
-struct Qdisc_class_common {
-	u32 classid;
-	struct hlist_node hnode;
-};
-
-struct Qdisc_class_hash {
-	struct hlist_head *hash;
-	unsigned int hashsize;
-	unsigned int hashmask;
-	unsigned int hashelems;
-};
-
-struct qdisc_watchdog {
-	u64 last_expires;
-	struct hrtimer timer;
-	struct Qdisc *qdisc;
-};
-
-enum tc_root_command {
-	TC_ROOT_GRAFT = 0,
-};
-
-struct tc_root_qopt_offload {
-	enum tc_root_command command;
-	u32 handle;
-	bool ingress;
-};
-
-struct check_loop_arg {
-	struct qdisc_walker w;
-	struct Qdisc *p;
-	int depth;
-};
-
-struct tcf_bind_args {
-	struct tcf_walker w;
-	long unsigned int base;
-	long unsigned int cl;
-	u32 classid;
-};
-
-struct tc_bind_class_args {
-	struct qdisc_walker w;
-	long unsigned int new_cl;
-	u32 portid;
-	u32 clid;
-};
-
-struct qdisc_dump_args {
-	struct qdisc_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-};
-
-enum net_xmit_qdisc_t {
-	__NET_XMIT_STOLEN = 65536,
-	__NET_XMIT_BYPASS = 131072,
-};
-
-struct tc_skb_ext {
-	__u32 chain;
-	__u16 mru;
-};
-
-enum {
-	TCA_ACT_UNSPEC = 0,
-	TCA_ACT_KIND = 1,
-	TCA_ACT_OPTIONS = 2,
-	TCA_ACT_INDEX = 3,
-	TCA_ACT_STATS = 4,
-	TCA_ACT_PAD = 5,
-	TCA_ACT_COOKIE = 6,
-	TCA_ACT_FLAGS = 7,
-	TCA_ACT_HW_STATS = 8,
-	TCA_ACT_USED_HW_STATS = 9,
-	__TCA_ACT_MAX = 10,
-};
-
-enum tca_id {
-	TCA_ID_UNSPEC = 0,
-	TCA_ID_POLICE = 1,
-	TCA_ID_GACT = 5,
-	TCA_ID_IPT = 6,
-	TCA_ID_PEDIT = 7,
-	TCA_ID_MIRRED = 8,
-	TCA_ID_NAT = 9,
-	TCA_ID_XT = 10,
-	TCA_ID_SKBEDIT = 11,
-	TCA_ID_VLAN = 12,
-	TCA_ID_BPF = 13,
-	TCA_ID_CONNMARK = 14,
-	TCA_ID_SKBMOD = 15,
-	TCA_ID_CSUM = 16,
-	TCA_ID_TUNNEL_KEY = 17,
-	TCA_ID_SIMP = 22,
-	TCA_ID_IFE = 25,
-	TCA_ID_SAMPLE = 26,
-	TCA_ID_CTINFO = 27,
-	TCA_ID_MPLS = 28,
-	TCA_ID_CT = 29,
-	TCA_ID_GATE = 30,
-	__TCA_ID_MAX = 255,
-};
-
-struct tcf_t {
-	__u64 install;
-	__u64 lastuse;
-	__u64 expires;
-	__u64 firstuse;
-};
-
-struct psample_group {
-	struct list_head list;
-	struct net *net;
-	u32 group_num;
-	u32 refcount;
-	u32 seq;
-	struct callback_head rcu;
-};
-
-struct action_gate_entry {
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-};
-
-enum qdisc_class_ops_flags {
-	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
-};
-
-enum tcf_proto_ops_flags {
-	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
-};
-
-typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
-
-struct tcf_idrinfo {
-	struct mutex lock;
-	struct idr action_idr;
-	struct net *net;
-};
-
-struct tc_action_ops;
-
-struct tc_cookie;
-
-struct tc_action {
-	const struct tc_action_ops *ops;
-	__u32 type;
-	struct tcf_idrinfo *idrinfo;
-	u32 tcfa_index;
-	refcount_t tcfa_refcnt;
-	atomic_t tcfa_bindcnt;
-	int tcfa_action;
-	struct tcf_t tcfa_tm;
-	struct gnet_stats_basic_packed tcfa_bstats;
-	struct gnet_stats_basic_packed tcfa_bstats_hw;
-	struct gnet_stats_queue tcfa_qstats;
-	struct net_rate_estimator *tcfa_rate_est;
-	spinlock_t tcfa_lock;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_basic_cpu *cpu_bstats_hw;
-	struct gnet_stats_queue *cpu_qstats;
-	struct tc_cookie *act_cookie;
-	struct tcf_chain *goto_chain;
-	u32 tcfa_flags;
-	u8 hw_stats;
-	u8 used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-typedef void (*tc_action_priv_destructor)(void *);
-
-struct tc_action_ops {
-	struct list_head head;
-	char kind[16];
-	enum tca_id id;
-	size_t size;
-	struct module *owner;
-	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
-	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
-	void (*cleanup)(struct tc_action *);
-	int (*lookup)(struct net *, struct tc_action **, u32);
-	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);
-	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
-	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
-	size_t (*get_fill_size)(const struct tc_action *);
-	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
-	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
-};
-
-struct tc_cookie {
-	u8 *data;
-	u32 len;
-	struct callback_head rcu;
-};
-
-struct tcf_block_ext_info {
-	enum flow_block_binder_type binder_type;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-	u32 block_index;
-};
-
-struct tcf_qevent {
-	struct tcf_block *block;
-	struct tcf_block_ext_info info;
-	struct tcf_proto *filter_chain;
-};
-
-struct tcf_exts {
-	__u32 type;
-	int nr_actions;
-	struct tc_action **actions;
-	struct net *net;
-	int action;
-	int police;
-};
-
-enum pedit_header_type {
-	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
-	__PEDIT_HDR_TYPE_MAX = 6,
-};
-
-enum pedit_cmd {
-	TCA_PEDIT_KEY_EX_CMD_SET = 0,
-	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
-	__PEDIT_CMD_MAX = 2,
-};
-
-struct tc_pedit_key {
-	__u32 mask;
-	__u32 val;
-	__u32 off;
-	__u32 at;
-	__u32 offmask;
-	__u32 shift;
-};
-
-struct tcf_pedit_key_ex {
-	enum pedit_header_type htype;
-	enum pedit_cmd cmd;
-};
-
-struct tcf_pedit {
-	struct tc_action common;
-	unsigned char tcfp_nkeys;
-	unsigned char tcfp_flags;
-	struct tc_pedit_key *tcfp_keys;
-	struct tcf_pedit_key_ex *tcfp_keys_ex;
-};
-
-struct tcf_mirred {
-	struct tc_action common;
-	int tcfm_eaction;
-	bool tcfm_mac_header_xmit;
-	struct net_device *tcfm_dev;
-	struct list_head tcfm_list;
-};
-
-struct tcf_vlan_params {
-	int tcfv_action;
-	unsigned char tcfv_push_dst[6];
-	unsigned char tcfv_push_src[6];
-	u16 tcfv_push_vid;
-	__be16 tcfv_push_proto;
-	u8 tcfv_push_prio;
-	struct callback_head rcu;
-};
-
-struct tcf_vlan {
-	struct tc_action common;
-	struct tcf_vlan_params *vlan_p;
-};
-
-struct tcf_tunnel_key_params {
-	struct callback_head rcu;
-	int tcft_action;
-	struct metadata_dst *tcft_enc_metadata;
-};
-
-struct tcf_tunnel_key {
-	struct tc_action common;
-	struct tcf_tunnel_key_params *params;
-};
-
-struct tcf_csum_params {
-	u32 update_flags;
-	struct callback_head rcu;
-};
-
-struct tcf_csum {
-	struct tc_action common;
-	struct tcf_csum_params *params;
-};
-
-struct tcf_gact {
-	struct tc_action common;
-	u16 tcfg_ptype;
-	u16 tcfg_pval;
-	int tcfg_paction;
-	atomic_t packets;
-};
-
-struct tcf_police_params {
-	int tcfp_result;
-	u32 tcfp_ewma_rate;
-	s64 tcfp_burst;
-	u32 tcfp_mtu;
-	s64 tcfp_mtu_ptoks;
-	struct psched_ratecfg rate;
-	bool rate_present;
-	struct psched_ratecfg peak;
-	bool peak_present;
-	struct callback_head rcu;
-};
-
-struct tcf_police {
-	struct tc_action common;
-	struct tcf_police_params *params;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t tcfp_lock;
-	s64 tcfp_toks;
-	s64 tcfp_ptoks;
-	s64 tcfp_t_c;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcf_sample {
-	struct tc_action common;
-	u32 rate;
-	bool truncate;
-	u32 trunc_size;
-	struct psample_group *psample_group;
-	u32 psample_group_num;
-	struct list_head tcfm_list;
-};
-
-struct tcf_skbedit_params {
-	u32 flags;
-	u32 priority;
-	u32 mark;
-	u32 mask;
-	u16 queue_mapping;
-	u16 ptype;
-	struct callback_head rcu;
-};
-
-struct tcf_skbedit {
-	struct tc_action common;
-	struct tcf_skbedit_params *params;
-};
-
-struct nf_nat_range2 {
-	unsigned int flags;
-	union nf_inet_addr min_addr;
-	union nf_inet_addr max_addr;
-	union nf_conntrack_man_proto min_proto;
-	union nf_conntrack_man_proto max_proto;
-	union nf_conntrack_man_proto base_proto;
-};
-
-struct tcf_ct_flow_table;
-
-struct tcf_ct_params {
-	struct nf_conn *tmpl;
-	u16 zone;
-	u32 mark;
-	u32 mark_mask;
-	u32 labels[4];
-	u32 labels_mask[4];
-	struct nf_nat_range2 range;
-	bool ipv4_range;
-	u16 ct_action;
-	struct callback_head rcu;
-	struct tcf_ct_flow_table *ct_ft;
-	struct nf_flowtable *nf_ft;
-};
-
-struct tcf_ct {
-	struct tc_action common;
-	struct tcf_ct_params *params;
-};
-
-struct tcf_mpls_params {
-	int tcfm_action;
-	u32 tcfm_label;
-	u8 tcfm_tc;
-	u8 tcfm_ttl;
-	u8 tcfm_bos;
-	__be16 tcfm_proto;
-	struct callback_head rcu;
-};
-
-struct tcf_mpls {
-	struct tc_action common;
-	struct tcf_mpls_params *mpls_p;
-};
-
-struct tcfg_gate_entry {
-	int index;
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-	struct list_head list;
-};
-
-struct tcf_gate_params {
-	s32 tcfg_priority;
-	u64 tcfg_basetime;
-	u64 tcfg_cycletime;
-	u64 tcfg_cycletime_ext;
-	u32 tcfg_flags;
-	s32 tcfg_clockid;
-	size_t num_entries;
-	struct list_head entries;
-};
-
-struct tcf_gate {
-	struct tc_action common;
-	struct tcf_gate_params param;
-	u8 current_gate_status;
-	ktime_t current_close_time;
-	u32 current_entry_octets;
-	s32 current_max_octets;
-	struct tcfg_gate_entry *next_entry;
-	struct hrtimer hitimer;
-	enum tk_offsets tk_offset;
-};
-
-struct tcf_filter_chain_list_item {
-	struct list_head list;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-};
-
-struct tcf_net {
-	spinlock_t idr_lock;
-	struct idr idr;
-};
-
-struct tcf_block_owner_item {
-	struct list_head list;
-	struct Qdisc *q;
-	enum flow_block_binder_type binder_type;
-};
-
-struct tcf_chain_info {
-	struct tcf_proto **pprev;
-	struct tcf_proto *next;
-};
-
-struct tcf_dump_args {
-	struct tcf_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct tcf_block *block;
-	struct Qdisc *q;
-	u32 parent;
-	bool terse_dump;
-};
-
-struct tcamsg {
-	unsigned char tca_family;
-	unsigned char tca__pad1;
-	short unsigned int tca__pad2;
-};
-
-enum {
-	TCA_ROOT_UNSPEC = 0,
-	TCA_ROOT_TAB = 1,
-	TCA_ROOT_FLAGS = 2,
-	TCA_ROOT_COUNT = 3,
-	TCA_ROOT_TIME_DELTA = 4,
-	__TCA_ROOT_MAX = 5,
-};
-
-struct tc_action_net {
-	struct tcf_idrinfo *idrinfo;
-	const struct tc_action_ops *ops;
-};
-
-struct tc_act_bpf {
-	__u32 index;
-	__u32 capab;
-	int action;
-	int refcnt;
-	int bindcnt;
-};
-
-enum {
-	TCA_ACT_BPF_UNSPEC = 0,
-	TCA_ACT_BPF_TM = 1,
-	TCA_ACT_BPF_PARMS = 2,
-	TCA_ACT_BPF_OPS_LEN = 3,
-	TCA_ACT_BPF_OPS = 4,
-	TCA_ACT_BPF_FD = 5,
-	TCA_ACT_BPF_NAME = 6,
-	TCA_ACT_BPF_PAD = 7,
-	TCA_ACT_BPF_TAG = 8,
-	TCA_ACT_BPF_ID = 9,
-	__TCA_ACT_BPF_MAX = 10,
-};
-
-struct tcf_bpf {
-	struct tc_action common;
-	struct bpf_prog *filter;
-	union {
-		u32 bpf_fd;
-		u16 bpf_num_ops;
-	};
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-};
-
-struct tcf_bpf_cfg {
-	struct bpf_prog *filter;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	u16 bpf_num_ops;
-	bool is_ebpf;
-};
-
-struct tc_fifo_qopt {
-	__u32 limit;
-};
-
-enum tc_fifo_command {
-	TC_FIFO_REPLACE = 0,
-	TC_FIFO_DESTROY = 1,
-	TC_FIFO_STATS = 2,
-};
-
-struct tc_fifo_qopt_offload {
-	enum tc_fifo_command command;
-	u32 handle;
-	u32 parent;
-	union {
-		struct tc_qopt_offload_stats stats;
-	};
-};
-
-enum {
-	TCA_CGROUP_UNSPEC = 0,
-	TCA_CGROUP_ACT = 1,
-	TCA_CGROUP_POLICE = 2,
-	TCA_CGROUP_EMATCHES = 3,
-	__TCA_CGROUP_MAX = 4,
-};
-
-struct tcf_ematch_tree_hdr {
-	__u16 nmatches;
-	__u16 progid;
-};
-
-struct tcf_pkt_info {
-	unsigned char *ptr;
-	int nexthdr;
-};
-
-struct tcf_ematch_ops;
-
-struct tcf_ematch {
-	struct tcf_ematch_ops *ops;
-	long unsigned int data;
-	unsigned int datalen;
-	u16 matchid;
-	u16 flags;
-	struct net *net;
-};
-
-struct tcf_ematch_ops {
-	int kind;
-	int datalen;
-	int (*change)(struct net *, void *, int, struct tcf_ematch *);
-	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
-	void (*destroy)(struct tcf_ematch *);
-	int (*dump)(struct sk_buff *, struct tcf_ematch *);
-	struct module *owner;
-	struct list_head link;
-};
-
-struct tcf_ematch_tree {
-	struct tcf_ematch_tree_hdr hdr;
-	struct tcf_ematch *matches;
-};
-
-struct cls_cgroup_head {
-	u32 handle;
-	struct tcf_exts exts;
-	struct tcf_ematch_tree ematches;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_BPF_UNSPEC = 0,
-	TCA_BPF_ACT = 1,
-	TCA_BPF_POLICE = 2,
-	TCA_BPF_CLASSID = 3,
-	TCA_BPF_OPS_LEN = 4,
-	TCA_BPF_OPS = 5,
-	TCA_BPF_FD = 6,
-	TCA_BPF_NAME = 7,
-	TCA_BPF_FLAGS = 8,
-	TCA_BPF_FLAGS_GEN = 9,
-	TCA_BPF_TAG = 10,
-	TCA_BPF_ID = 11,
-	__TCA_BPF_MAX = 12,
-};
-
-enum tc_clsbpf_command {
-	TC_CLSBPF_OFFLOAD = 0,
-	TC_CLSBPF_STATS = 1,
-};
-
-struct tc_cls_bpf_offload {
-	struct flow_cls_common_offload common;
-	enum tc_clsbpf_command command;
-	struct tcf_exts *exts;
-	struct bpf_prog *prog;
-	struct bpf_prog *oldprog;
-	const char *name;
-	bool exts_integrated;
-};
-
-struct cls_bpf_head {
-	struct list_head plist;
-	struct idr handle_idr;
-	struct callback_head rcu;
-};
-
-struct cls_bpf_prog {
-	struct bpf_prog *filter;
-	struct list_head link;
-	struct tcf_result res;
-	bool exts_integrated;
-	u32 gen_flags;
-	unsigned int in_hw_count;
-	struct tcf_exts exts;
-	u32 handle;
-	u16 bpf_num_ops;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_EMATCH_TREE_UNSPEC = 0,
-	TCA_EMATCH_TREE_HDR = 1,
-	TCA_EMATCH_TREE_LIST = 2,
-	__TCA_EMATCH_TREE_MAX = 3,
-};
-
-struct tcf_ematch_hdr {
-	__u16 matchid;
-	__u16 kind;
-	__u16 flags;
-	__u16 pad;
-};
-
-struct sockaddr_nl {
-	__kernel_sa_family_t nl_family;
-	short unsigned int nl_pad;
-	__u32 nl_pid;
-	__u32 nl_groups;
-};
-
-struct nlmsgerr {
-	int error;
-	struct nlmsghdr msg;
-};
-
-enum nlmsgerr_attrs {
-	NLMSGERR_ATTR_UNUSED = 0,
-	NLMSGERR_ATTR_MSG = 1,
-	NLMSGERR_ATTR_OFFS = 2,
-	NLMSGERR_ATTR_COOKIE = 3,
-	NLMSGERR_ATTR_POLICY = 4,
-	__NLMSGERR_ATTR_MAX = 5,
-	NLMSGERR_ATTR_MAX = 4,
-};
-
-struct nl_pktinfo {
-	__u32 group;
-};
-
-enum {
-	NETLINK_UNCONNECTED = 0,
-	NETLINK_CONNECTED = 1,
-};
-
-enum netlink_skb_flags {
-	NETLINK_SKB_DST = 8,
-};
-
-struct netlink_notify {
-	struct net *net;
-	u32 portid;
-	int protocol;
-};
-
-struct netlink_tap {
-	struct net_device *dev;
-	struct module *module;
-	struct list_head list;
-};
-
-struct netlink_sock {
-	struct sock sk;
-	u32 portid;
-	u32 dst_portid;
-	u32 dst_group;
-	u32 flags;
-	u32 subscriptions;
-	u32 ngroups;
-	long unsigned int *groups;
-	long unsigned int state;
-	size_t max_recvmsg_len;
-	wait_queue_head_t wait;
-	bool bound;
-	bool cb_running;
-	int dump_done_errno;
-	struct netlink_callback cb;
-	struct mutex *cb_mutex;
-	struct mutex cb_def_mutex;
-	void (*netlink_rcv)(struct sk_buff *);
-	int (*netlink_bind)(struct net *, int);
-	void (*netlink_unbind)(struct net *, int);
-	struct module *module;
-	struct rhash_head node;
-	struct callback_head rcu;
-	struct work_struct work;
-};
-
-struct listeners;
-
-struct netlink_table {
-	struct rhashtable hash;
-	struct hlist_head mc_list;
-	struct listeners *listeners;
-	unsigned int flags;
-	unsigned int groups;
-	struct mutex *cb_mutex;
-	struct module *module;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-	int registered;
-};
-
-struct listeners {
-	struct callback_head rcu;
-	long unsigned int masks[0];
-};
-
-struct netlink_tap_net {
-	struct list_head netlink_tap_all;
-	struct mutex netlink_tap_lock;
-};
-
-struct netlink_compare_arg {
-	possible_net_t pnet;
-	u32 portid;
-};
-
-struct netlink_broadcast_data {
-	struct sock *exclude_sk;
-	struct net *net;
-	u32 portid;
-	u32 group;
-	int failure;
-	int delivery_failure;
-	int congested;
-	int delivered;
-	gfp_t allocation;
-	struct sk_buff *skb;
-	struct sk_buff *skb2;
-	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
-	void *tx_data;
-};
-
-struct netlink_set_err_data {
-	struct sock *exclude_sk;
-	u32 portid;
-	u32 group;
-	int code;
-};
-
-struct nl_seq_iter {
-	struct seq_net_private p;
-	struct rhashtable_iter hti;
-	int link;
-};
-
-struct bpf_iter__netlink {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct netlink_sock *sk;
-	};
-};
-
-enum {
-	CTRL_CMD_UNSPEC = 0,
-	CTRL_CMD_NEWFAMILY = 1,
-	CTRL_CMD_DELFAMILY = 2,
-	CTRL_CMD_GETFAMILY = 3,
-	CTRL_CMD_NEWOPS = 4,
-	CTRL_CMD_DELOPS = 5,
-	CTRL_CMD_GETOPS = 6,
-	CTRL_CMD_NEWMCAST_GRP = 7,
-	CTRL_CMD_DELMCAST_GRP = 8,
-	CTRL_CMD_GETMCAST_GRP = 9,
-	CTRL_CMD_GETPOLICY = 10,
-	__CTRL_CMD_MAX = 11,
-};
-
-enum {
-	CTRL_ATTR_UNSPEC = 0,
-	CTRL_ATTR_FAMILY_ID = 1,
-	CTRL_ATTR_FAMILY_NAME = 2,
-	CTRL_ATTR_VERSION = 3,
-	CTRL_ATTR_HDRSIZE = 4,
-	CTRL_ATTR_MAXATTR = 5,
-	CTRL_ATTR_OPS = 6,
-	CTRL_ATTR_MCAST_GROUPS = 7,
-	CTRL_ATTR_POLICY = 8,
-	CTRL_ATTR_OP_POLICY = 9,
-	CTRL_ATTR_OP = 10,
-	__CTRL_ATTR_MAX = 11,
-};
-
-enum {
-	CTRL_ATTR_OP_UNSPEC = 0,
-	CTRL_ATTR_OP_ID = 1,
-	CTRL_ATTR_OP_FLAGS = 2,
-	__CTRL_ATTR_OP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
-	CTRL_ATTR_MCAST_GRP_NAME = 1,
-	CTRL_ATTR_MCAST_GRP_ID = 2,
-	__CTRL_ATTR_MCAST_GRP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_POLICY_UNSPEC = 0,
-	CTRL_ATTR_POLICY_DO = 1,
-	CTRL_ATTR_POLICY_DUMP = 2,
-	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
-	CTRL_ATTR_POLICY_DUMP_MAX = 2,
-};
-
-struct genl_start_context {
-	const struct genl_family *family;
-	struct nlmsghdr *nlh;
-	struct netlink_ext_ack *extack;
-	const struct genl_ops *ops;
-	int hdrlen;
-};
-
-struct netlink_policy_dump_state;
-
-struct ctrl_dump_policy_ctx {
-	struct netlink_policy_dump_state *state;
-	const struct genl_family *rt;
-	unsigned int opidx;
-	u32 op;
-	u16 fam_id;
-	u8 policies: 1;
-	u8 single_op: 1;
-};
-
-enum netlink_attribute_type {
-	NL_ATTR_TYPE_INVALID = 0,
-	NL_ATTR_TYPE_FLAG = 1,
-	NL_ATTR_TYPE_U8 = 2,
-	NL_ATTR_TYPE_U16 = 3,
-	NL_ATTR_TYPE_U32 = 4,
-	NL_ATTR_TYPE_U64 = 5,
-	NL_ATTR_TYPE_S8 = 6,
-	NL_ATTR_TYPE_S16 = 7,
-	NL_ATTR_TYPE_S32 = 8,
-	NL_ATTR_TYPE_S64 = 9,
-	NL_ATTR_TYPE_BINARY = 10,
-	NL_ATTR_TYPE_STRING = 11,
-	NL_ATTR_TYPE_NUL_STRING = 12,
-	NL_ATTR_TYPE_NESTED = 13,
-	NL_ATTR_TYPE_NESTED_ARRAY = 14,
-	NL_ATTR_TYPE_BITFIELD32 = 15,
-};
-
-enum netlink_policy_type_attr {
-	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
-	NL_POLICY_TYPE_ATTR_TYPE = 1,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
-	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
-	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
-	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
-	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
-	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
-	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
-	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
-	NL_POLICY_TYPE_ATTR_PAD = 11,
-	NL_POLICY_TYPE_ATTR_MASK = 12,
-	__NL_POLICY_TYPE_ATTR_MAX = 13,
-	NL_POLICY_TYPE_ATTR_MAX = 12,
-};
-
-struct netlink_policy_dump_state___2 {
-	unsigned int policy_idx;
-	unsigned int attr_idx;
-	unsigned int n_alloc;
-	struct {
-		const struct nla_policy *policy;
-		unsigned int maxtype;
-	} policies[0];
-};
-
-struct trace_event_raw_bpf_test_finish {
-	struct trace_entry ent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_test_finish {};
-
-typedef void (*btf_trace_bpf_test_finish)(void *, int *);
-
-struct bpf_fentry_test_t {
-	struct bpf_fentry_test_t *a;
-};
-
-struct bpf_raw_tp_test_run_info {
-	struct bpf_prog *prog;
-	void *ctx;
-	u32 retval;
-};
-
-struct ethtool_cmd {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertising;
-	__u16 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 transceiver;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u32 maxtxpkt;
-	__u32 maxrxpkt;
-	__u16 speed_hi;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__u32 lp_advertising;
-	__u32 reserved[2];
-};
-
-struct ethtool_value {
-	__u32 cmd;
-	__u32 data;
-};
-
-enum tunable_id {
-	ETHTOOL_ID_UNSPEC = 0,
-	ETHTOOL_RX_COPYBREAK = 1,
-	ETHTOOL_TX_COPYBREAK = 2,
-	ETHTOOL_PFC_PREVENTION_TOUT = 3,
-	__ETHTOOL_TUNABLE_COUNT = 4,
-};
-
-enum tunable_type_id {
-	ETHTOOL_TUNABLE_UNSPEC = 0,
-	ETHTOOL_TUNABLE_U8 = 1,
-	ETHTOOL_TUNABLE_U16 = 2,
-	ETHTOOL_TUNABLE_U32 = 3,
-	ETHTOOL_TUNABLE_U64 = 4,
-	ETHTOOL_TUNABLE_STRING = 5,
-	ETHTOOL_TUNABLE_S8 = 6,
-	ETHTOOL_TUNABLE_S16 = 7,
-	ETHTOOL_TUNABLE_S32 = 8,
-	ETHTOOL_TUNABLE_S64 = 9,
-};
-
-enum phy_tunable_id {
-	ETHTOOL_PHY_ID_UNSPEC = 0,
-	ETHTOOL_PHY_DOWNSHIFT = 1,
-	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
-	ETHTOOL_PHY_EDPD = 3,
-	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
-};
-
-enum ethtool_stringset {
-	ETH_SS_TEST = 0,
-	ETH_SS_STATS = 1,
-	ETH_SS_PRIV_FLAGS = 2,
-	ETH_SS_NTUPLE_FILTERS = 3,
-	ETH_SS_FEATURES = 4,
-	ETH_SS_RSS_HASH_FUNCS = 5,
-	ETH_SS_TUNABLES = 6,
-	ETH_SS_PHY_STATS = 7,
-	ETH_SS_PHY_TUNABLES = 8,
-	ETH_SS_LINK_MODES = 9,
-	ETH_SS_MSG_CLASSES = 10,
-	ETH_SS_WOL_MODES = 11,
-	ETH_SS_SOF_TIMESTAMPING = 12,
-	ETH_SS_TS_TX_TYPES = 13,
-	ETH_SS_TS_RX_FILTERS = 14,
-	ETH_SS_UDP_TUNNEL_TYPES = 15,
-	ETH_SS_COUNT = 16,
-};
-
-struct ethtool_gstrings {
-	__u32 cmd;
-	__u32 string_set;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_sset_info {
-	__u32 cmd;
-	__u32 reserved;
-	__u64 sset_mask;
-	__u32 data[0];
-};
-
-struct ethtool_perm_addr {
-	__u32 cmd;
-	__u32 size;
-	__u8 data[0];
-};
-
-enum ethtool_flags {
-	ETH_FLAG_TXVLAN = 128,
-	ETH_FLAG_RXVLAN = 256,
-	ETH_FLAG_LRO = 32768,
-	ETH_FLAG_NTUPLE = 134217728,
-	ETH_FLAG_RXHASH = 268435456,
-};
-
-struct ethtool_rxfh {
-	__u32 cmd;
-	__u32 rss_context;
-	__u32 indir_size;
-	__u32 key_size;
-	__u8 hfunc;
-	__u8 rsvd8[3];
-	__u32 rsvd32;
-	__u32 rss_config[0];
-};
-
-struct ethtool_get_features_block {
-	__u32 available;
-	__u32 requested;
-	__u32 active;
-	__u32 never_changed;
-};
-
-struct ethtool_gfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_get_features_block features[0];
-};
-
-struct ethtool_set_features_block {
-	__u32 valid;
-	__u32 requested;
-};
-
-struct ethtool_sfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_set_features_block features[0];
-};
-
-enum ethtool_sfeatures_retval_bits {
-	ETHTOOL_F_UNSUPPORTED__BIT = 0,
-	ETHTOOL_F_WISH__BIT = 1,
-	ETHTOOL_F_COMPAT__BIT = 2,
-};
-
-struct ethtool_per_queue_op {
-	__u32 cmd;
-	__u32 sub_command;
-	__u32 queue_mask[128];
-	char data[0];
-};
-
-enum {
-	ETH_RSS_HASH_TOP_BIT = 0,
-	ETH_RSS_HASH_XOR_BIT = 1,
-	ETH_RSS_HASH_CRC32_BIT = 2,
-	ETH_RSS_HASH_FUNCS_COUNT = 3,
-};
-
-struct ethtool_rx_flow_rule {
-	struct flow_rule *rule;
-	long unsigned int priv[0];
-};
-
-struct ethtool_rx_flow_spec_input {
-	const struct ethtool_rx_flow_spec *fs;
-	u32 rss_ctx;
-};
-
-struct ethtool_link_usettings {
-	struct ethtool_link_settings base;
-	struct {
-		__u32 supported[3];
-		__u32 advertising[3];
-		__u32 lp_advertising[3];
-	} link_modes;
-};
-
-struct ethtool_rx_flow_key {
-	struct flow_dissector_key_basic basic;
-	union {
-		struct flow_dissector_key_ipv4_addrs ipv4;
-		struct flow_dissector_key_ipv6_addrs ipv6;
-	};
-	struct flow_dissector_key_ports tp;
-	struct flow_dissector_key_ip ip;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_eth_addrs eth_addrs;
-	long: 48;
-};
-
-struct ethtool_rx_flow_match {
-	struct flow_dissector dissector;
-	int: 32;
-	struct ethtool_rx_flow_key key;
-	struct ethtool_rx_flow_key mask;
-};
-
-enum {
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
-	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
-	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
-	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
-};
-
-enum {
-	ETHTOOL_MSG_USER_NONE = 0,
-	ETHTOOL_MSG_STRSET_GET = 1,
-	ETHTOOL_MSG_LINKINFO_GET = 2,
-	ETHTOOL_MSG_LINKINFO_SET = 3,
-	ETHTOOL_MSG_LINKMODES_GET = 4,
-	ETHTOOL_MSG_LINKMODES_SET = 5,
-	ETHTOOL_MSG_LINKSTATE_GET = 6,
-	ETHTOOL_MSG_DEBUG_GET = 7,
-	ETHTOOL_MSG_DEBUG_SET = 8,
-	ETHTOOL_MSG_WOL_GET = 9,
-	ETHTOOL_MSG_WOL_SET = 10,
-	ETHTOOL_MSG_FEATURES_GET = 11,
-	ETHTOOL_MSG_FEATURES_SET = 12,
-	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
-	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
-	ETHTOOL_MSG_RINGS_GET = 15,
-	ETHTOOL_MSG_RINGS_SET = 16,
-	ETHTOOL_MSG_CHANNELS_GET = 17,
-	ETHTOOL_MSG_CHANNELS_SET = 18,
-	ETHTOOL_MSG_COALESCE_GET = 19,
-	ETHTOOL_MSG_COALESCE_SET = 20,
-	ETHTOOL_MSG_PAUSE_GET = 21,
-	ETHTOOL_MSG_PAUSE_SET = 22,
-	ETHTOOL_MSG_EEE_GET = 23,
-	ETHTOOL_MSG_EEE_SET = 24,
-	ETHTOOL_MSG_TSINFO_GET = 25,
-	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
-	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
-	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
-	__ETHTOOL_MSG_USER_CNT = 29,
-	ETHTOOL_MSG_USER_MAX = 28,
-};
-
-enum {
-	ETHTOOL_A_HEADER_UNSPEC = 0,
-	ETHTOOL_A_HEADER_DEV_INDEX = 1,
-	ETHTOOL_A_HEADER_DEV_NAME = 2,
-	ETHTOOL_A_HEADER_FLAGS = 3,
-	__ETHTOOL_A_HEADER_CNT = 4,
-	ETHTOOL_A_HEADER_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_STRSET_UNSPEC = 0,
-	ETHTOOL_A_STRSET_HEADER = 1,
-	ETHTOOL_A_STRSET_STRINGSETS = 2,
-	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
-	__ETHTOOL_A_STRSET_CNT = 4,
-	ETHTOOL_A_STRSET_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_LINKINFO_UNSPEC = 0,
-	ETHTOOL_A_LINKINFO_HEADER = 1,
-	ETHTOOL_A_LINKINFO_PORT = 2,
-	ETHTOOL_A_LINKINFO_PHYADDR = 3,
-	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
-	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
-	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
-	__ETHTOOL_A_LINKINFO_CNT = 7,
-	ETHTOOL_A_LINKINFO_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_LINKMODES_UNSPEC = 0,
-	ETHTOOL_A_LINKMODES_HEADER = 1,
-	ETHTOOL_A_LINKMODES_AUTONEG = 2,
-	ETHTOOL_A_LINKMODES_OURS = 3,
-	ETHTOOL_A_LINKMODES_PEER = 4,
-	ETHTOOL_A_LINKMODES_SPEED = 5,
-	ETHTOOL_A_LINKMODES_DUPLEX = 6,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
-	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
-	__ETHTOOL_A_LINKMODES_CNT = 9,
-	ETHTOOL_A_LINKMODES_MAX = 8,
-};
-
-enum {
-	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
-	ETHTOOL_A_LINKSTATE_HEADER = 1,
-	ETHTOOL_A_LINKSTATE_LINK = 2,
-	ETHTOOL_A_LINKSTATE_SQI = 3,
-	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
-	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
-	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
-	__ETHTOOL_A_LINKSTATE_CNT = 7,
-	ETHTOOL_A_LINKSTATE_MAX = 6,
-};
-
-enum {
-	ETHTOOL_A_DEBUG_UNSPEC = 0,
-	ETHTOOL_A_DEBUG_HEADER = 1,
-	ETHTOOL_A_DEBUG_MSGMASK = 2,
-	__ETHTOOL_A_DEBUG_CNT = 3,
-	ETHTOOL_A_DEBUG_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_WOL_UNSPEC = 0,
-	ETHTOOL_A_WOL_HEADER = 1,
-	ETHTOOL_A_WOL_MODES = 2,
-	ETHTOOL_A_WOL_SOPASS = 3,
-	__ETHTOOL_A_WOL_CNT = 4,
-	ETHTOOL_A_WOL_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_FEATURES_UNSPEC = 0,
-	ETHTOOL_A_FEATURES_HEADER = 1,
-	ETHTOOL_A_FEATURES_HW = 2,
-	ETHTOOL_A_FEATURES_WANTED = 3,
-	ETHTOOL_A_FEATURES_ACTIVE = 4,
-	ETHTOOL_A_FEATURES_NOCHANGE = 5,
-	__ETHTOOL_A_FEATURES_CNT = 6,
-	ETHTOOL_A_FEATURES_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
-	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
-	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
-	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
-	ETHTOOL_A_PRIVFLAGS_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_RINGS_UNSPEC = 0,
-	ETHTOOL_A_RINGS_HEADER = 1,
-	ETHTOOL_A_RINGS_RX_MAX = 2,
-	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
-	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
-	ETHTOOL_A_RINGS_TX_MAX = 5,
-	ETHTOOL_A_RINGS_RX = 6,
-	ETHTOOL_A_RINGS_RX_MINI = 7,
-	ETHTOOL_A_RINGS_RX_JUMBO = 8,
-	ETHTOOL_A_RINGS_TX = 9,
-	__ETHTOOL_A_RINGS_CNT = 10,
-	ETHTOOL_A_RINGS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_CHANNELS_UNSPEC = 0,
-	ETHTOOL_A_CHANNELS_HEADER = 1,
-	ETHTOOL_A_CHANNELS_RX_MAX = 2,
-	ETHTOOL_A_CHANNELS_TX_MAX = 3,
-	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
-	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
-	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
-	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
-	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
-	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
-	__ETHTOOL_A_CHANNELS_CNT = 10,
-	ETHTOOL_A_CHANNELS_MAX = 9,
-};
-
-enum {
-	ETHTOOL_A_COALESCE_UNSPEC = 0,
-	ETHTOOL_A_COALESCE_HEADER = 1,
-	ETHTOOL_A_COALESCE_RX_USECS = 2,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
-	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
-	ETHTOOL_A_COALESCE_TX_USECS = 6,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
-	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
-	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
-	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
-	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
-	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
-	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
-	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
-	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
-	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
-	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
-	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
-	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
-	__ETHTOOL_A_COALESCE_CNT = 24,
-	ETHTOOL_A_COALESCE_MAX = 23,
-};
-
-enum {
-	ETHTOOL_A_PAUSE_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_HEADER = 1,
-	ETHTOOL_A_PAUSE_AUTONEG = 2,
-	ETHTOOL_A_PAUSE_RX = 3,
-	ETHTOOL_A_PAUSE_TX = 4,
-	ETHTOOL_A_PAUSE_STATS = 5,
-	__ETHTOOL_A_PAUSE_CNT = 6,
-	ETHTOOL_A_PAUSE_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_EEE_UNSPEC = 0,
-	ETHTOOL_A_EEE_HEADER = 1,
-	ETHTOOL_A_EEE_MODES_OURS = 2,
-	ETHTOOL_A_EEE_MODES_PEER = 3,
-	ETHTOOL_A_EEE_ACTIVE = 4,
-	ETHTOOL_A_EEE_ENABLED = 5,
-	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
-	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
-	__ETHTOOL_A_EEE_CNT = 8,
-	ETHTOOL_A_EEE_MAX = 7,
-};
-
-enum {
-	ETHTOOL_A_TSINFO_UNSPEC = 0,
-	ETHTOOL_A_TSINFO_HEADER = 1,
-	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
-	ETHTOOL_A_TSINFO_TX_TYPES = 3,
-	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
-	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
-	__ETHTOOL_A_TSINFO_CNT = 6,
-	ETHTOOL_A_TSINFO_MAX = 5,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_HEADER = 1,
-	__ETHTOOL_A_CABLE_TEST_CNT = 2,
-	ETHTOOL_A_CABLE_TEST_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
-	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
-	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
-	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
-	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
-	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
-	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
-	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
-};
-
-enum ethtool_multicast_groups {
-	ETHNL_MCGRP_MONITOR = 0,
-};
-
-struct ethnl_req_info {
-	struct net_device *dev;
-	u32 flags;
-};
-
-struct ethnl_reply_data {
-	struct net_device *dev;
-};
-
-struct ethnl_request_ops {
-	u8 request_cmd;
-	u8 reply_cmd;
-	u16 hdr_attr;
-	unsigned int req_info_size;
-	unsigned int reply_data_size;
-	bool allow_nodev_do;
-	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
-	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
-	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
-	void (*cleanup_data)(struct ethnl_reply_data *);
-};
-
-struct ethnl_dump_ctx {
-	const struct ethnl_request_ops *ops;
-	struct ethnl_req_info *req_info;
-	struct ethnl_reply_data *reply_data;
-	int pos_hash;
-	int pos_idx;
-};
-
-typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
-
-enum {
-	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BIT_INDEX = 1,
-	ETHTOOL_A_BITSET_BIT_NAME = 2,
-	ETHTOOL_A_BITSET_BIT_VALUE = 3,
-	__ETHTOOL_A_BITSET_BIT_CNT = 4,
-	ETHTOOL_A_BITSET_BIT_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
-	ETHTOOL_A_BITSET_BITS_BIT = 1,
-	__ETHTOOL_A_BITSET_BITS_CNT = 2,
-	ETHTOOL_A_BITSET_BITS_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_BITSET_UNSPEC = 0,
-	ETHTOOL_A_BITSET_NOMASK = 1,
-	ETHTOOL_A_BITSET_SIZE = 2,
-	ETHTOOL_A_BITSET_BITS = 3,
-	ETHTOOL_A_BITSET_VALUE = 4,
-	ETHTOOL_A_BITSET_MASK = 5,
-	__ETHTOOL_A_BITSET_CNT = 6,
-	ETHTOOL_A_BITSET_MAX = 5,
-};
-
-typedef const char (* const ethnl_string_array_t)[32];
-
-enum {
-	ETHTOOL_A_STRING_UNSPEC = 0,
-	ETHTOOL_A_STRING_INDEX = 1,
-	ETHTOOL_A_STRING_VALUE = 2,
-	__ETHTOOL_A_STRING_CNT = 3,
-	ETHTOOL_A_STRING_MAX = 2,
-};
-
-enum {
-	ETHTOOL_A_STRINGS_UNSPEC = 0,
-	ETHTOOL_A_STRINGS_STRING = 1,
-	__ETHTOOL_A_STRINGS_CNT = 2,
-	ETHTOOL_A_STRINGS_MAX = 1,
-};
-
-enum {
-	ETHTOOL_A_STRINGSET_UNSPEC = 0,
-	ETHTOOL_A_STRINGSET_ID = 1,
-	ETHTOOL_A_STRINGSET_COUNT = 2,
-	ETHTOOL_A_STRINGSET_STRINGS = 3,
-	__ETHTOOL_A_STRINGSET_CNT = 4,
-	ETHTOOL_A_STRINGSET_MAX = 3,
-};
-
-enum {
-	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
-	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
-	__ETHTOOL_A_STRINGSETS_CNT = 2,
-	ETHTOOL_A_STRINGSETS_MAX = 1,
-};
-
-struct strset_info {
-	bool per_dev;
-	bool free_strings;
-	unsigned int count;
-	const char (*strings)[32];
-};
-
-struct strset_req_info {
-	struct ethnl_req_info base;
-	u32 req_ids;
-	bool counts_only;
-};
-
-struct strset_reply_data {
-	struct ethnl_reply_data base;
-	struct strset_info sets[16];
-};
-
-struct linkinfo_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_link_ksettings ksettings;
-	struct ethtool_link_settings *lsettings;
 };
 
 struct linkmodes_reply_data {
@@ -116813,95 +126033,6 @@
 	bool peer_empty;
 };
 
-struct link_mode_info {
-	int speed;
-	u8 duplex;
-};
-
-struct linkstate_reply_data {
-	struct ethnl_reply_data base;
-	int link;
-	int sqi;
-	int sqi_max;
-	bool link_ext_state_provided;
-	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
-};
-
-struct debug_reply_data {
-	struct ethnl_reply_data base;
-	u32 msg_mask;
-};
-
-struct wol_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_wolinfo wol;
-	bool show_sopass;
-};
-
-struct features_reply_data {
-	struct ethnl_reply_data base;
-	u32 hw[2];
-	u32 wanted[2];
-	u32 active[2];
-	u32 nochange[2];
-	u32 all[2];
-};
-
-struct privflags_reply_data {
-	struct ethnl_reply_data base;
-	const char (*priv_flag_names)[32];
-	unsigned int n_priv_flags;
-	u32 priv_flags;
-};
-
-struct rings_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_ringparam ringparam;
-};
-
-struct channels_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_channels channels;
-};
-
-struct coalesce_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_coalesce coalesce;
-	u32 supported_params;
-};
-
-enum {
-	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
-	ETHTOOL_A_PAUSE_STAT_PAD = 1,
-	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
-	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
-	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
-	ETHTOOL_A_PAUSE_STAT_MAX = 3,
-};
-
-struct pause_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_pauseparam pauseparam;
-	struct ethtool_pause_stats pausestat;
-};
-
-struct eee_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_eee eee;
-};
-
-struct tsinfo_reply_data {
-	struct ethnl_reply_data base;
-	struct ethtool_ts_info ts_info;
-};
-
-enum {
-	ETHTOOL_A_CABLE_PAIR_A = 0,
-	ETHTOOL_A_CABLE_PAIR_B = 1,
-	ETHTOOL_A_CABLE_PAIR_C = 2,
-	ETHTOOL_A_CABLE_PAIR_D = 3,
-};
-
 enum {
 	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
 	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
@@ -116984,57 +126115,2457 @@
 	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
 };
 
-enum {
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
-	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
-	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+struct fib_nh_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_nh *fib_nh;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	short unsigned int nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	short unsigned int nduseropt_pad2;
+	unsigned int nduseropt_pad3;
 };
 
 enum {
-	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
-	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
-	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
 };
 
 enum {
-	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
-	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
-	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
-	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
 };
 
-enum udp_parsable_tunnel_type {
-	UDP_TUNNEL_TYPE_VXLAN = 1,
-	UDP_TUNNEL_TYPE_GENEVE = 2,
-	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
 };
 
-enum udp_tunnel_nic_info_flags {
-	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
-	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
-	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
-	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+struct rpc_cred_cache {
+	struct hlist_head *hashtable;
+	unsigned int hashbits;
+	spinlock_t lock;
 };
 
-struct udp_tunnel_nic_ops {
-	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
-	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
-	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
-	void (*reset_ntf)(struct net_device *);
-	size_t (*dump_size)(struct net_device *, unsigned int);
-	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+struct xprt_addr {
+	const char *addr;
+	struct callback_head rcu;
 };
 
-struct ethnl_tunnel_info_dump_ctx {
-	struct ethnl_req_info req_info;
-	int pos_hash;
-	int pos_idx;
+struct func_desc {
+	long unsigned int addr;
+	long unsigned int toc;
+	long unsigned int env;
+};
+
+struct rt_sigframe {
+	struct ucontext uc;
+	struct ucontext uc_transact;
+	long unsigned int _unused[2];
+	unsigned int tramp[7];
+	struct siginfo *pinfo;
+	void *puc;
+	struct siginfo info;
+	char abigap[512];
+};
+
+typedef long int (*syscall_fn)(long int, long int, long int, long int, long int, long int);
+
+struct eeh_stats {
+	u64 no_device;
+	u64 no_dn;
+	u64 no_cfg_addr;
+	u64 ignored_check;
+	u64 total_mmio_ffs;
+	u64 false_positives;
+	u64 slot_resets;
+};
+
+typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
+
+struct soft_mask_table_entry {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct restart_table_entry {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int fixup;
+};
+
+enum {
+	OPAL_XIVE_MODE_EMU = 0,
+	OPAL_XIVE_MODE_EXPL = 1,
+};
+
+enum {
+	OPAL_XIVE_IRQ_TRIGGER_PAGE = 1,
+	OPAL_XIVE_IRQ_STORE_EOI = 2,
+	OPAL_XIVE_IRQ_LSI = 4,
+	OPAL_XIVE_IRQ_SHIFT_BUG = 8,
+	OPAL_XIVE_IRQ_MASK_VIA_FW = 16,
+	OPAL_XIVE_IRQ_EOI_VIA_FW = 32,
+	OPAL_XIVE_IRQ_STORE_EOI2 = 64,
+};
+
+enum {
+	OPAL_XIVE_EQ_ENABLED = 1,
+	OPAL_XIVE_EQ_ALWAYS_NOTIFY = 2,
+	OPAL_XIVE_EQ_ESCALATE = 4,
+};
+
+enum {
+	OPAL_XIVE_VP_ENABLED = 1,
+	OPAL_XIVE_VP_SINGLE_ESCALATION = 2,
+};
+
+enum {
+	XIVE_SYNC_EAS = 1,
+	XIVE_SYNC_QUEUE = 2,
+};
+
+enum OpalSysEpow {
+	OPAL_SYSEPOW_POWER = 0,
+	OPAL_SYSEPOW_TEMP = 1,
+	OPAL_SYSEPOW_COOLING = 2,
+	OPAL_SYSEPOW_MAX = 3,
+};
+
+enum OpalSysPower {
+	OPAL_SYSPOWER_UPS = 1,
+	OPAL_SYSPOWER_CHNG = 2,
+	OPAL_SYSPOWER_FAIL = 4,
+	OPAL_SYSPOWER_INCL = 8,
+};
+
+struct dtl_worker {
+	struct delayed_work work;
+	int cpu;
+};
+
+struct vcpu_dispatch_data {
+	int last_disp_cpu;
+	int total_disp;
+	int same_cpu_disp;
+	int same_chip_disp;
+	int diff_chip_disp;
+	int far_chip_disp;
+	int numa_home_disp;
+	int numa_remote_disp;
+	int numa_far_disp;
+};
+
+struct hpt_resize_state {
+	long unsigned int shift;
+	int commit_rc;
+};
+
+enum hv_perf_domains {
+	HV_PERF_DOMAIN_PHYS_CHIP = 1,
+	HV_PERF_DOMAIN_PHYS_CORE = 2,
+	HV_PERF_DOMAIN_VCPU_HOME_CORE = 3,
+	HV_PERF_DOMAIN_VCPU_HOME_CHIP = 4,
+	HV_PERF_DOMAIN_VCPU_HOME_NODE = 5,
+	HV_PERF_DOMAIN_VCPU_REMOTE_NODE = 6,
+	HV_PERF_DOMAIN_MAX = 7,
+};
+
+struct hv_24x7_request {
+	__u8 performance_domain;
+	__u8 reserved[1];
+	__be16 data_size;
+	__be32 data_offset;
+	__be16 starting_lpar_ix;
+	__be16 max_num_lpars;
+	__be16 starting_ix;
+	__be16 max_ix;
+	__u8 starting_thread_group_ix;
+	__u8 max_num_thread_groups;
+	__u8 reserved2[14];
+};
+
+struct hv_24x7_request_buffer {
+	__u8 interface_version;
+	__u8 num_requests;
+	__u8 reserved[14];
+	struct hv_24x7_request requests[0];
+};
+
+struct hv_24x7_result {
+	__u8 result_ix;
+	__u8 results_complete;
+	__be16 num_elements_returned;
+	__be16 result_element_data_size;
+	__u8 reserved[2];
+	char elements[0];
+};
+
+struct hv_24x7_data_result_buffer {
+	__u8 interface_version;
+	__u8 num_results;
+	__u8 reserved[1];
+	__u8 failing_request_ix;
+	__be32 detailed_rc;
+	__be64 cec_cfg_instance_id;
+	__be64 catalog_version_num;
+	__u8 reserved2[8];
+	struct hv_24x7_result results[0];
+};
+
+struct hv_24x7_catalog_page_0 {
+	__be32 magic;
+	__be32 length;
+	__be64 version;
+	__u8 build_time_stamp[16];
+	__u8 reserved2[32];
+	__be16 schema_data_offs;
+	__be16 schema_data_len;
+	__be16 schema_entry_count;
+	__u8 reserved3[2];
+	__be16 event_data_offs;
+	__be16 event_data_len;
+	__be16 event_entry_count;
+	__u8 reserved4[2];
+	__be16 group_data_offs;
+	__be16 group_data_len;
+	__be16 group_entry_count;
+	__u8 reserved5[2];
+	__be16 formula_data_offs;
+	__be16 formula_data_len;
+	__be16 formula_entry_count;
+	__u8 reserved6[2];
+};
+
+struct hv_24x7_event_data {
+	__be16 length;
+	__u8 reserved1[2];
+	__u8 domain;
+	__u8 reserved2[1];
+	__be16 event_group_record_offs;
+	__be16 event_group_record_len;
+	__be16 event_counter_offs;
+	__be32 flags;
+	__be16 primary_group_ix;
+	__be16 group_count;
+	__be16 event_name_len;
+	__u8 remainder[0];
+} __attribute__((packed));
+
+struct hv_24x7_hw {
+	struct perf_event *events[255];
+};
+
+struct event_uniq {
+	struct rb_node node;
+	const char *name;
+	int nl;
+	unsigned int ct;
+	unsigned int domain;
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+struct async_entry {
+	struct list_head domain_list;
+	struct list_head global_list;
+	struct work_struct work;
+	async_cookie_t cookie;
+	async_func_t func;
+	void *data;
+	struct async_domain *domain;
+};
+
+enum {
+	TRACE_FUNC_NO_OPTS = 0,
+	TRACE_FUNC_OPT_STACK = 1,
+	TRACE_FUNC_OPT_NO_REPEATS = 2,
+	TRACE_FUNC_OPT_HIGHEST_BIT = 4,
+};
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+struct bpf_iter_seq_map_info {
+	u32 map_id;
+};
+
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
+};
+
+enum {
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	long unsigned int i_ino;
+	long unsigned int index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+struct copy_subpage_arg {
+	struct page *dst;
+	struct page *src;
+	struct vm_area_struct *vma;
+};
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+struct track {
+	long unsigned int addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	long unsigned int when;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+struct location {
+	depot_stack_handle_t handle;
+	long unsigned int count;
+	long unsigned int addr;
+	long long int sum_time;
+	long int min_time;
+	long int max_time;
+	long int min_pid;
+	long int max_pid;
+	long unsigned int cpus[32];
+	nodemask_t nodes;
+};
+
+struct loc_track {
+	long unsigned int max;
+	long unsigned int count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FULL = 2,
+	M_FREE = 3,
+	M_FULL_NOLIST = 4,
+};
+
+struct dentry_stat_t {
+	long int nr_dentry;
+	long int nr_unused;
+	long int age_limit;
+	long int want_pages;
+	long int nr_negative;
+	long int dummy;
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long int found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+struct ns_get_path_task_args {
+	const struct proc_ns_operations *ns_ops;
+	struct task_struct *task;
+};
+
+struct mb_cache {
+	struct hlist_bl_head *c_hash;
+	int c_bucket_bits;
+	long unsigned int c_max_entries;
+	spinlock_t c_list_lock;
+	struct list_head c_list;
+	long unsigned int c_entry_count;
+	struct shrinker c_shrink;
+	struct work_struct c_shrink_work;
+};
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+struct iomap_page {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t uptodate_lock;
+	long unsigned int uptodate[0];
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext2_acl_entry;
+
+typedef struct {
+	__le32 a_version;
+} ext2_acl_header;
+
+struct nfs_createdata {
+	struct nfs_createargs arg;
+	struct nfs_diropok res;
+	struct nfs_fh fhandle;
+	struct nfs_fattr fattr;
+};
+
+struct xfs_iread_state {
+	struct xfs_iext_cursor icur;
+	xfs_extnum_t loaded;
+};
+
+struct xfs_find_left_neighbor_info {
+	struct xfs_rmap_irec high;
+	struct xfs_rmap_irec *irec;
+};
+
+struct xfs_rmap_query_range_info {
+	xfs_rmap_query_range_fn fn;
+	void *priv;
+};
+
+struct xfs_rmap_key_state {
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+};
+
+struct xfs_dq_logformat {
+	uint16_t qlf_type;
+	uint16_t qlf_size;
+	xfs_dqid_t qlf_id;
+	int64_t qlf_blkno;
+	int32_t qlf_len;
+	uint32_t qlf_boffset;
+};
+
+struct xfs_qoff_logformat {
+	short unsigned int qf_type;
+	short unsigned int qf_size;
+	unsigned int qf_flags;
+	char qf_pad[12];
+};
+
+struct tracefs_dir_ops {
+	int (*mkdir)(const char *);
+	int (*rmdir)(const char *);
+};
+
+struct tracefs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct tracefs_fs_info {
+	struct tracefs_mount_opts mount_opts;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct queue_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct request_queue *, char *);
+	ssize_t (*store)(struct request_queue *, const char *, size_t);
+};
+
+typedef guid_t efi_guid_t;
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct block_device *bdev;
+	int refcnt;
+};
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx *buffer;
+};
+
+struct fdt_errtabent {
+	const char *str;
+};
+
+enum format_type {
+	FORMAT_TYPE_NONE = 0,
+	FORMAT_TYPE_WIDTH = 1,
+	FORMAT_TYPE_PRECISION = 2,
+	FORMAT_TYPE_CHAR = 3,
+	FORMAT_TYPE_STR = 4,
+	FORMAT_TYPE_PTR = 5,
+	FORMAT_TYPE_PERCENT_CHAR = 6,
+	FORMAT_TYPE_INVALID = 7,
+	FORMAT_TYPE_LONG_LONG = 8,
+	FORMAT_TYPE_ULONG = 9,
+	FORMAT_TYPE_LONG = 10,
+	FORMAT_TYPE_UBYTE = 11,
+	FORMAT_TYPE_BYTE = 12,
+	FORMAT_TYPE_USHORT = 13,
+	FORMAT_TYPE_SHORT = 14,
+	FORMAT_TYPE_UINT = 15,
+	FORMAT_TYPE_INT = 16,
+	FORMAT_TYPE_SIZE_T = 17,
+	FORMAT_TYPE_PTRDIFF = 18,
+};
+
+struct printf_spec {
+	unsigned int type: 8;
+	int field_width: 24;
+	unsigned int flags: 8;
+	unsigned int base: 8;
+	int precision: 16;
+};
+
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
+enum radeon_chip_flags {
+	CHIP_FAMILY_MASK = 65535,
+	CHIP_FLAGS_MASK = 4294901760,
+	CHIP_IS_MOBILITY = 65536,
+	CHIP_IS_IGP = 131072,
+	CHIP_HAS_CRTC2 = 262144,
+};
+
+typedef struct {
+	u16 reg;
+	u32 val;
+} reg_val;
+
+struct vc_selection {
+	struct mutex lock;
+	struct vc_data *cons;
+	char *buffer;
+	unsigned int buf_len;
+	volatile int start;
+	int end;
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct serial_private;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct timedia_struct {
+	int num;
+	const short unsigned int *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+struct reg_field {
+	unsigned int reg;
+	unsigned int lsb;
+	unsigned int msb;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct regmap_field {
+	struct regmap *regmap;
+	unsigned int mask;
+	unsigned int shift;
+	unsigned int reg;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct trace_event_raw_regmap_reg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_block {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_sync {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_status;
+	u32 __data_loc_type;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bool {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flag;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_async {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_drop_region {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int from;
+	unsigned int to;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regmap_reg {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_block {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_sync {
+	u32 name;
+	u32 status;
+	u32 type;
+};
+
+struct trace_event_data_offsets_regmap_bool {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_async {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_drop_region {
+	u32 name;
+};
+
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
+
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
+
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct pmem_device {
+	phys_addr_t phys_addr;
+	phys_addr_t data_offset;
+	u64 pfn_flags;
+	void *virt_addr;
+	size_t size;
+	u32 pfn_pad;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct dax_device *dax_dev;
+	struct gendisk *disk;
+	struct dev_pagemap pgmap;
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct double_list {
+	struct list_head *top;
+	struct list_head *bottom;
+};
+
+enum fc_port_type {
+	FC_PORTTYPE_UNKNOWN = 0,
+	FC_PORTTYPE_OTHER = 1,
+	FC_PORTTYPE_NOTPRESENT = 2,
+	FC_PORTTYPE_NPORT = 3,
+	FC_PORTTYPE_NLPORT = 4,
+	FC_PORTTYPE_LPORT = 5,
+	FC_PORTTYPE_PTP = 6,
+	FC_PORTTYPE_NPIV = 7,
+};
+
+enum fc_port_state {
+	FC_PORTSTATE_UNKNOWN = 0,
+	FC_PORTSTATE_NOTPRESENT = 1,
+	FC_PORTSTATE_ONLINE = 2,
+	FC_PORTSTATE_OFFLINE = 3,
+	FC_PORTSTATE_BLOCKED = 4,
+	FC_PORTSTATE_BYPASSED = 5,
+	FC_PORTSTATE_DIAGNOSTICS = 6,
+	FC_PORTSTATE_LINKDOWN = 7,
+	FC_PORTSTATE_ERROR = 8,
+	FC_PORTSTATE_LOOPBACK = 9,
+	FC_PORTSTATE_DELETED = 10,
+	FC_PORTSTATE_MARGINAL = 11,
+};
+
+enum fc_vport_state {
+	FC_VPORT_UNKNOWN = 0,
+	FC_VPORT_ACTIVE = 1,
+	FC_VPORT_DISABLED = 2,
+	FC_VPORT_LINKDOWN = 3,
+	FC_VPORT_INITIALIZING = 4,
+	FC_VPORT_NO_FABRIC_SUPP = 5,
+	FC_VPORT_NO_FABRIC_RSCS = 6,
+	FC_VPORT_FABRIC_LOGOUT = 7,
+	FC_VPORT_FABRIC_REJ_WWN = 8,
+	FC_VPORT_FAILED = 9,
+};
+
+enum fc_tgtid_binding_type {
+	FC_TGTID_BIND_NONE = 0,
+	FC_TGTID_BIND_BY_WWPN = 1,
+	FC_TGTID_BIND_BY_WWNN = 2,
+	FC_TGTID_BIND_BY_ID = 3,
+};
+
+struct fc_vport_identifiers {
+	u64 node_name;
+	u64 port_name;
+	u32 roles;
+	bool disable;
+	enum fc_port_type vport_type;
+	char symbolic_name[64];
+};
+
+struct fc_vport {
+	enum fc_vport_state vport_state;
+	enum fc_vport_state vport_last_state;
+	u64 node_name;
+	u64 port_name;
+	u32 roles;
+	u32 vport_id;
+	enum fc_port_type vport_type;
+	char symbolic_name[64];
+	void *dd_data;
+	struct Scsi_Host *shost;
+	unsigned int channel;
+	u32 number;
+	u8 flags;
+	struct list_head peers;
+	struct device dev;
+	struct work_struct vport_delete_work;
+};
+
+struct fc_rport_identifiers {
+	u64 node_name;
+	u64 port_name;
+	u32 port_id;
+	u32 roles;
+};
+
+struct fc_fpin_stats {
+	u64 dn;
+	u64 dn_unknown;
+	u64 dn_timeout;
+	u64 dn_unable_to_route;
+	u64 dn_device_specific;
+	u64 li;
+	u64 li_failure_unknown;
+	u64 li_link_failure_count;
+	u64 li_loss_of_sync_count;
+	u64 li_loss_of_signals_count;
+	u64 li_prim_seq_err_count;
+	u64 li_invalid_tx_word_count;
+	u64 li_invalid_crc_count;
+	u64 li_device_specific;
+	u64 cn;
+	u64 cn_clear;
+	u64 cn_lost_credit;
+	u64 cn_credit_stall;
+	u64 cn_oversubscription;
+	u64 cn_device_specific;
+};
+
+struct fc_rport {
+	u32 maxframe_size;
+	u32 supported_classes;
+	u32 dev_loss_tmo;
+	struct fc_fpin_stats fpin_stats;
+	u64 node_name;
+	u64 port_name;
+	u32 port_id;
+	u32 roles;
+	enum fc_port_state port_state;
+	u32 scsi_target_id;
+	u32 fast_io_fail_tmo;
+	void *dd_data;
+	unsigned int channel;
+	u32 number;
+	u8 flags;
+	struct list_head peers;
+	struct device dev;
+	struct delayed_work dev_loss_work;
+	struct work_struct scan_work;
+	struct delayed_work fail_io_work;
+	struct work_struct stgt_delete_work;
+	struct work_struct rport_delete_work;
+	struct request_queue *rqst_q;
+};
+
+struct fc_starget_attrs {
+	u64 node_name;
+	u64 port_name;
+	u32 port_id;
+};
+
+struct fc_host_statistics {
+	u64 seconds_since_last_reset;
+	u64 tx_frames;
+	u64 tx_words;
+	u64 rx_frames;
+	u64 rx_words;
+	u64 lip_count;
+	u64 nos_count;
+	u64 error_frames;
+	u64 dumped_frames;
+	u64 link_failure_count;
+	u64 loss_of_sync_count;
+	u64 loss_of_signal_count;
+	u64 prim_seq_protocol_err_count;
+	u64 invalid_tx_word_count;
+	u64 invalid_crc_count;
+	u64 fcp_input_requests;
+	u64 fcp_output_requests;
+	u64 fcp_control_requests;
+	u64 fcp_input_megabytes;
+	u64 fcp_output_megabytes;
+	u64 fcp_packet_alloc_failures;
+	u64 fcp_packet_aborts;
+	u64 fcp_frame_alloc_failures;
+	u64 fc_no_free_exch;
+	u64 fc_no_free_exch_xid;
+	u64 fc_xid_not_found;
+	u64 fc_xid_busy;
+	u64 fc_seq_not_found;
+	u64 fc_non_bls_resp;
+	u64 cn_sig_warn;
+	u64 cn_sig_alarm;
+};
+
+enum fc_host_event_code {
+	FCH_EVT_LIP = 1,
+	FCH_EVT_LINKUP = 2,
+	FCH_EVT_LINKDOWN = 3,
+	FCH_EVT_LIPRESET = 4,
+	FCH_EVT_RSCN = 5,
+	FCH_EVT_ADAPTER_CHANGE = 259,
+	FCH_EVT_PORT_UNKNOWN = 512,
+	FCH_EVT_PORT_OFFLINE = 513,
+	FCH_EVT_PORT_ONLINE = 514,
+	FCH_EVT_PORT_FABRIC = 516,
+	FCH_EVT_LINK_UNKNOWN = 1280,
+	FCH_EVT_LINK_FPIN = 1281,
+	FCH_EVT_VENDOR_UNIQUE = 65535,
+};
+
+struct fc_host_attrs {
+	u64 node_name;
+	u64 port_name;
+	u64 permanent_port_name;
+	u32 supported_classes;
+	u8 supported_fc4s[32];
+	u32 supported_speeds;
+	u32 maxframe_size;
+	u16 max_npiv_vports;
+	u32 max_ct_payload;
+	u32 num_ports;
+	u32 num_discovered_ports;
+	u32 bootbios_state;
+	char serial_number[64];
+	char manufacturer[64];
+	char model[256];
+	char model_description[256];
+	char hardware_version[64];
+	char driver_version[64];
+	char firmware_version[64];
+	char optionrom_version[64];
+	char vendor_identifier[8];
+	char bootbios_version[256];
+	u32 port_id;
+	enum fc_port_type port_type;
+	enum fc_port_state port_state;
+	u8 active_fc4s[32];
+	u32 speed;
+	u64 fabric_name;
+	char symbolic_name[256];
+	char system_hostname[256];
+	u32 dev_loss_tmo;
+	struct fc_fpin_stats fpin_stats;
+	enum fc_tgtid_binding_type tgtid_bind_type;
+	struct list_head rports;
+	struct list_head rport_bindings;
+	struct list_head vports;
+	u32 next_rport_number;
+	u32 next_target_id;
+	u32 next_vport_number;
+	u16 npiv_vports_inuse;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	char devloss_work_q_name[20];
+	struct workqueue_struct *devloss_work_q;
+	struct request_queue *rqst_q;
+	u8 fdmi_version;
+};
+
+struct fc_function_template {
+	void (*get_rport_dev_loss_tmo)(struct fc_rport *);
+	void (*set_rport_dev_loss_tmo)(struct fc_rport *, u32);
+	void (*get_starget_node_name)(struct scsi_target *);
+	void (*get_starget_port_name)(struct scsi_target *);
+	void (*get_starget_port_id)(struct scsi_target *);
+	void (*get_host_port_id)(struct Scsi_Host *);
+	void (*get_host_port_type)(struct Scsi_Host *);
+	void (*get_host_port_state)(struct Scsi_Host *);
+	void (*get_host_active_fc4s)(struct Scsi_Host *);
+	void (*get_host_speed)(struct Scsi_Host *);
+	void (*get_host_fabric_name)(struct Scsi_Host *);
+	void (*get_host_symbolic_name)(struct Scsi_Host *);
+	void (*set_host_system_hostname)(struct Scsi_Host *);
+	struct fc_host_statistics * (*get_fc_host_stats)(struct Scsi_Host *);
+	void (*reset_fc_host_stats)(struct Scsi_Host *);
+	int (*issue_fc_host_lip)(struct Scsi_Host *);
+	void (*dev_loss_tmo_callbk)(struct fc_rport *);
+	void (*terminate_rport_io)(struct fc_rport *);
+	void (*set_vport_symbolic_name)(struct fc_vport *);
+	int (*vport_create)(struct fc_vport *, bool);
+	int (*vport_disable)(struct fc_vport *, bool);
+	int (*vport_delete)(struct fc_vport *);
+	int (*bsg_request)(struct bsg_job *);
+	int (*bsg_timeout)(struct bsg_job *);
+	u32 dd_fcrport_size;
+	u32 dd_fcvport_size;
+	u32 dd_bsg_size;
+	long unsigned int show_rport_maxframe_size: 1;
+	long unsigned int show_rport_supported_classes: 1;
+	long unsigned int show_rport_dev_loss_tmo: 1;
+	long unsigned int show_starget_node_name: 1;
+	long unsigned int show_starget_port_name: 1;
+	long unsigned int show_starget_port_id: 1;
+	long unsigned int show_host_node_name: 1;
+	long unsigned int show_host_port_name: 1;
+	long unsigned int show_host_permanent_port_name: 1;
+	long unsigned int show_host_supported_classes: 1;
+	long unsigned int show_host_supported_fc4s: 1;
+	long unsigned int show_host_supported_speeds: 1;
+	long unsigned int show_host_maxframe_size: 1;
+	long unsigned int show_host_serial_number: 1;
+	long unsigned int show_host_manufacturer: 1;
+	long unsigned int show_host_model: 1;
+	long unsigned int show_host_model_description: 1;
+	long unsigned int show_host_hardware_version: 1;
+	long unsigned int show_host_driver_version: 1;
+	long unsigned int show_host_firmware_version: 1;
+	long unsigned int show_host_optionrom_version: 1;
+	long unsigned int show_host_port_id: 1;
+	long unsigned int show_host_port_type: 1;
+	long unsigned int show_host_port_state: 1;
+	long unsigned int show_host_active_fc4s: 1;
+	long unsigned int show_host_speed: 1;
+	long unsigned int show_host_fabric_name: 1;
+	long unsigned int show_host_symbolic_name: 1;
+	long unsigned int show_host_system_hostname: 1;
+	long unsigned int disable_target_scan: 1;
+};
+
+struct fc_nl_event {
+	struct scsi_nl_hdr snlh;
+	__u64 seconds;
+	__u64 vendor_id;
+	__u16 host_no;
+	__u16 event_datalen;
+	__u32 event_num;
+	__u32 event_code;
+	__u32 event_data;
+};
+
+struct fc_bsg_host_add_rport {
+	__u8 reserved;
+	__u8 port_id[3];
+};
+
+struct fc_bsg_host_del_rport {
+	__u8 reserved;
+	__u8 port_id[3];
+};
+
+struct fc_bsg_host_els {
+	__u8 command_code;
+	__u8 port_id[3];
+};
+
+struct fc_bsg_ctels_reply {
+	__u32 status;
+	struct {
+		__u8 action;
+		__u8 reason_code;
+		__u8 reason_explanation;
+		__u8 vendor_unique;
+	} rjt_data;
+};
+
+struct fc_bsg_host_ct {
+	__u8 reserved;
+	__u8 port_id[3];
+	__u32 preamble_word0;
+	__u32 preamble_word1;
+	__u32 preamble_word2;
+};
+
+struct fc_bsg_host_vendor {
+	__u64 vendor_id;
+	__u32 vendor_cmd[0];
+};
+
+struct fc_bsg_host_vendor_reply {
+	__u32 vendor_rsp[0];
+};
+
+struct fc_bsg_rport_els {
+	__u8 els_code;
+};
+
+struct fc_bsg_rport_ct {
+	__u32 preamble_word0;
+	__u32 preamble_word1;
+	__u32 preamble_word2;
+};
+
+struct fc_bsg_request {
+	__u32 msgcode;
+	union {
+		struct fc_bsg_host_add_rport h_addrport;
+		struct fc_bsg_host_del_rport h_delrport;
+		struct fc_bsg_host_els h_els;
+		struct fc_bsg_host_ct h_ct;
+		struct fc_bsg_host_vendor h_vendor;
+		struct fc_bsg_rport_els r_els;
+		struct fc_bsg_rport_ct r_ct;
+	} rqst_data;
+} __attribute__((packed));
+
+struct fc_bsg_reply {
+	__u32 result;
+	__u32 reply_payload_rcv_len;
+	union {
+		struct fc_bsg_host_vendor_reply vendor_reply;
+		struct fc_bsg_ctels_reply ctels_reply;
+	} reply_data;
+};
+
+enum fc_ls_tlv_dtag {
+	ELS_DTAG_LS_REQ_INFO = 1,
+	ELS_DTAG_LNK_FAULT_CAP = 65549,
+	ELS_DTAG_CG_SIGNAL_CAP = 65551,
+	ELS_DTAG_LNK_INTEGRITY = 131073,
+	ELS_DTAG_DELIVERY = 131074,
+	ELS_DTAG_PEER_CONGEST = 131075,
+	ELS_DTAG_CONGESTION = 131076,
+	ELS_DTAG_FPIN_REGISTER = 196609,
+};
+
+struct fc_tlv_desc {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__u8 desc_value[0];
+};
+
+enum fc_fpin_li_event_types {
+	FPIN_LI_UNKNOWN = 0,
+	FPIN_LI_LINK_FAILURE = 1,
+	FPIN_LI_LOSS_OF_SYNC = 2,
+	FPIN_LI_LOSS_OF_SIG = 3,
+	FPIN_LI_PRIM_SEQ_ERR = 4,
+	FPIN_LI_INVALID_TX_WD = 5,
+	FPIN_LI_INVALID_CRC = 6,
+	FPIN_LI_DEVICE_SPEC = 15,
+};
+
+enum fc_fpin_deli_event_types {
+	FPIN_DELI_UNKNOWN = 0,
+	FPIN_DELI_TIMEOUT = 1,
+	FPIN_DELI_UNABLE_TO_ROUTE = 2,
+	FPIN_DELI_DEVICE_SPEC = 15,
+};
+
+enum fc_fpin_congn_event_types {
+	FPIN_CONGN_CLEAR = 0,
+	FPIN_CONGN_LOST_CREDIT = 1,
+	FPIN_CONGN_CREDIT_STALL = 2,
+	FPIN_CONGN_OVERSUBSCRIPTION = 3,
+	FPIN_CONGN_DEVICE_SPEC = 15,
+};
+
+struct fc_fn_li_desc {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be64 detecting_wwpn;
+	__be64 attached_wwpn;
+	__be16 event_type;
+	__be16 event_modifier;
+	__be32 event_threshold;
+	__be32 event_count;
+	__be32 pname_count;
+	__be64 pname_list[0];
+};
+
+struct fc_fn_deli_desc {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be64 detecting_wwpn;
+	__be64 attached_wwpn;
+	__be32 deli_reason_code;
+};
+
+struct fc_fn_peer_congn_desc {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be64 detecting_wwpn;
+	__be64 attached_wwpn;
+	__be16 event_type;
+	__be16 event_modifier;
+	__be32 event_period;
+	__be32 pname_count;
+	__be64 pname_list[0];
+};
+
+struct fc_fn_congn_desc {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be16 event_type;
+	__be16 event_modifier;
+	__be32 event_period;
+	__u8 severity;
+	__u8 resv[3];
+};
+
+struct fc_els_fpin {
+	__u8 fpin_cmd;
+	__u8 fpin_zero[3];
+	__be32 desc_len;
+	struct fc_tlv_desc fpin_desc[0];
+};
+
+struct fc_internal {
+	struct scsi_transport_template t;
+	struct fc_function_template *f;
+	struct device_attribute private_starget_attrs[3];
+	struct device_attribute *starget_attrs[4];
+	struct device_attribute private_host_attrs[29];
+	struct device_attribute *host_attrs[30];
+	struct transport_container rport_attr_cont;
+	struct device_attribute private_rport_attrs[10];
+	struct device_attribute *rport_attrs[11];
+	struct transport_container vport_attr_cont;
+	struct device_attribute private_vport_attrs[9];
+	struct device_attribute *vport_attrs[10];
+};
+
+enum {
+	K2_FLAG_SATA_8_PORTS = 16777216,
+	K2_FLAG_NO_ATAPI_DMA = 33554432,
+	K2_FLAG_BAR_POS_3 = 67108864,
+	K2_SATA_TF_CMD_OFFSET = 0,
+	K2_SATA_TF_DATA_OFFSET = 0,
+	K2_SATA_TF_ERROR_OFFSET = 4,
+	K2_SATA_TF_NSECT_OFFSET = 8,
+	K2_SATA_TF_LBAL_OFFSET = 12,
+	K2_SATA_TF_LBAM_OFFSET = 16,
+	K2_SATA_TF_LBAH_OFFSET = 20,
+	K2_SATA_TF_DEVICE_OFFSET = 24,
+	K2_SATA_TF_CMDSTAT_OFFSET = 28,
+	K2_SATA_TF_CTL_OFFSET = 32,
+	K2_SATA_DMA_CMD_OFFSET = 48,
+	K2_SATA_SCR_STATUS_OFFSET = 64,
+	K2_SATA_SCR_ERROR_OFFSET = 68,
+	K2_SATA_SCR_CONTROL_OFFSET = 72,
+	K2_SATA_SICR1_OFFSET = 128,
+	K2_SATA_SICR2_OFFSET = 132,
+	K2_SATA_SIM_OFFSET = 136,
+	K2_SATA_PORT_OFFSET = 256,
+	chip_svw4 = 0,
+	chip_svw8 = 1,
+	chip_svw42 = 2,
+	chip_svw43 = 3,
+};
+
+struct cdrom_msf {
+	__u8 cdmsf_min0;
+	__u8 cdmsf_sec0;
+	__u8 cdmsf_frame0;
+	__u8 cdmsf_min1;
+	__u8 cdmsf_sec1;
+	__u8 cdmsf_frame1;
+};
+
+struct cdrom_volctrl {
+	__u8 channel0;
+	__u8 channel1;
+	__u8 channel2;
+	__u8 channel3;
+};
+
+struct cdrom_subchnl {
+	__u8 cdsc_format;
+	__u8 cdsc_audiostatus;
+	__u8 cdsc_adr: 4;
+	__u8 cdsc_ctrl: 4;
+	__u8 cdsc_trk;
+	__u8 cdsc_ind;
+	union cdrom_addr cdsc_absaddr;
+	union cdrom_addr cdsc_reladdr;
+};
+
+struct cdrom_read_audio {
+	union cdrom_addr addr;
+	__u8 addr_format;
+	int nframes;
+	__u8 *buf;
+};
+
+struct cdrom_blk {
+	unsigned int from;
+	short unsigned int len;
+};
+
+struct cdrom_timed_media_change_info {
+	__s64 last_media_change;
+	__u64 media_flags;
+};
+
+struct dvd_layer {
+	__u8 book_version: 4;
+	__u8 book_type: 4;
+	__u8 min_rate: 4;
+	__u8 disc_size: 4;
+	__u8 layer_type: 4;
+	__u8 track_path: 1;
+	__u8 nlayers: 2;
+	char: 1;
+	__u8 track_density: 4;
+	__u8 linear_density: 4;
+	__u8 bca: 1;
+	__u32 start_sector;
+	__u32 end_sector;
+	__u32 end_sector_l0;
+};
+
+struct dvd_physical {
+	__u8 type;
+	__u8 layer_num;
+	struct dvd_layer layer[4];
+};
+
+struct dvd_copyright {
+	__u8 type;
+	__u8 layer_num;
+	__u8 cpst;
+	__u8 rmi;
+};
+
+struct dvd_disckey {
+	__u8 type;
+	unsigned int agid: 2;
+	__u8 value[2048];
+};
+
+struct dvd_bca {
+	__u8 type;
+	int len;
+	__u8 value[188];
+};
+
+struct dvd_manufact {
+	__u8 type;
+	__u8 layer_num;
+	int len;
+	__u8 value[2048];
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_physical physical;
+	struct dvd_copyright copyright;
+	struct dvd_disckey disckey;
+	struct dvd_bca bca;
+	struct dvd_manufact manufact;
+} dvd_struct;
+
+typedef __u8 dvd_key[5];
+
+typedef __u8 dvd_challenge[10];
+
+struct dvd_lu_send_agid {
+	__u8 type;
+	unsigned int agid: 2;
+};
+
+struct dvd_host_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_send_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_lu_send_title_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key title_key;
+	int lba;
+	unsigned int cpm: 1;
+	unsigned int cp_sec: 1;
+	unsigned int cgms: 2;
+};
+
+struct dvd_lu_send_asf {
+	__u8 type;
+	unsigned int agid: 2;
+	unsigned int asf: 1;
+};
+
+struct dvd_host_send_rpcstate {
+	__u8 type;
+	__u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+	__u8 type: 2;
+	__u8 vra: 3;
+	__u8 ucca: 3;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_lu_send_agid lsa;
+	struct dvd_host_send_challenge hsc;
+	struct dvd_send_key lsk;
+	struct dvd_lu_send_challenge lsc;
+	struct dvd_send_key hsk;
+	struct dvd_lu_send_title_key lstk;
+	struct dvd_lu_send_asf lsasf;
+	struct dvd_host_send_rpcstate hrpcs;
+	struct dvd_lu_send_rpcstate lrpcs;
+} dvd_authinfo;
+
+struct mrw_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u8 write: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+	__u8 reserved4;
+	__u8 reserved5;
+};
+
+struct rwrt_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u32 last_lba;
+	__u32 block_size;
+	__u16 blocking;
+	__u8 page_present: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+};
+
+typedef struct {
+	__be16 disc_information_length;
+	__u8 disc_status: 2;
+	__u8 border_status: 2;
+	__u8 erasable: 1;
+	__u8 reserved1: 3;
+	__u8 n_first_track;
+	__u8 n_sessions_lsb;
+	__u8 first_track_lsb;
+	__u8 last_track_lsb;
+	__u8 mrw_status: 2;
+	__u8 dbit: 1;
+	__u8 reserved2: 2;
+	__u8 uru: 1;
+	__u8 dbc_v: 1;
+	__u8 did_v: 1;
+	__u8 disc_type;
+	__u8 n_sessions_msb;
+	__u8 first_track_msb;
+	__u8 last_track_msb;
+	__u32 disc_id;
+	__u32 lead_in;
+	__u32 lead_out;
+	__u8 disc_bar_code[8];
+	__u8 reserved3;
+	__u8 n_opc;
+} disc_information;
+
+typedef struct {
+	__be16 track_information_length;
+	__u8 track_lsb;
+	__u8 session_lsb;
+	__u8 reserved1;
+	__u8 track_mode: 4;
+	__u8 copy: 1;
+	__u8 damage: 1;
+	__u8 reserved2: 2;
+	__u8 data_mode: 4;
+	__u8 fp: 1;
+	__u8 packet: 1;
+	__u8 blank: 1;
+	__u8 rt: 1;
+	__u8 nwa_v: 1;
+	__u8 lra_v: 1;
+	__u8 reserved3: 6;
+	__be32 track_start;
+	__be32 next_writable;
+	__be32 free_blocks;
+	__be32 fixed_packet_size;
+	__be32 track_size;
+	__be32 last_rec_address;
+} track_information;
+
+struct mode_page_header {
+	__be16 mode_data_length;
+	__u8 medium_type;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 reserved3;
+	__be16 desc_length;
+};
+
+typedef struct {
+	int data;
+	int audio;
+	int cdi;
+	int xa;
+	long int error;
+} tracktype;
+
+struct cdrom_mechstat_header {
+	__u8 curslot: 5;
+	__u8 changer_state: 2;
+	__u8 fault: 1;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 mech_state: 3;
+	__u8 curlba[3];
+	__u8 nslots;
+	__u16 slot_tablelen;
+};
+
+struct cdrom_slot {
+	__u8 change: 1;
+	__u8 reserved1: 6;
+	__u8 disc_present: 1;
+	__u8 reserved2[3];
+};
+
+struct cdrom_changer_info {
+	struct cdrom_mechstat_header hdr;
+	struct cdrom_slot slots[256];
+};
+
+struct modesel_head {
+	__u8 reserved1;
+	__u8 medium;
+	__u8 reserved2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_of_blocks_hi;
+	__u8 number_of_blocks_med;
+	__u8 number_of_blocks_lo;
+	__u8 reserved3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+typedef struct {
+	__u16 report_key_length;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 ucca: 3;
+	__u8 vra: 3;
+	__u8 type_code: 2;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+	__u8 reserved3;
+} rpc_state_t;
+
+struct cdrom_sysctl_settings {
+	char info[1000];
+	int autoclose;
+	int autoeject;
+	int debug;
+	int lock;
+	int check;
+};
+
+enum cdrom_print_option {
+	CTL_NAME = 0,
+	CTL_SPEED = 1,
+	CTL_SLOTS = 2,
+	CTL_CAPABILITY = 3,
+};
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+struct atkbd {
+	struct ps2dev ps2dev;
+	struct input_dev *dev;
+	char name[64];
+	char phys[32];
+	short unsigned int id;
+	short unsigned int keycode[512];
+	long unsigned int force_release_mask[8];
+	unsigned char set;
+	bool translated;
+	bool extra;
+	bool write;
+	bool softrepeat;
+	bool softraw;
+	bool scroll;
+	bool enabled;
+	unsigned char emul;
+	bool resend;
+	bool release;
+	long unsigned int xl_bit;
+	unsigned int last;
+	long unsigned int time;
+	long unsigned int err_count;
+	struct delayed_work event_work;
+	long unsigned int event_jiffies;
+	long unsigned int event_mask;
+	struct mutex mutex;
+	struct vivaldi_data vdata;
+};
+
+struct dev_info {
+	struct md_rdev *rdev;
+	sector_t end_sector;
+};
+
+struct linear_conf {
+	struct callback_head rcu;
+	sector_t array_sectors;
+	int raid_disks;
+	struct dev_info disks[0];
+};
+
+struct dm_kcopyd_throttle {
+	unsigned int throttle;
+	unsigned int num_io_jobs;
+	unsigned int io_period;
+	unsigned int total_period;
+	unsigned int last_jiffies;
+};
+
+typedef void (*dm_kcopyd_notify_fn)(int, long unsigned int, void *);
+
+struct dm_kcopyd_client {
+	struct page_list *pages;
+	unsigned int nr_reserved_pages;
+	unsigned int nr_free_pages;
+	unsigned int sub_job_size;
+	struct dm_io_client *io_client;
+	wait_queue_head_t destroyq;
+	mempool_t job_pool;
+	struct workqueue_struct *kcopyd_wq;
+	struct work_struct kcopyd_work;
+	struct dm_kcopyd_throttle *throttle;
+	atomic_t nr_jobs;
+	spinlock_t job_lock;
+	struct list_head callback_jobs;
+	struct list_head complete_jobs;
+	struct list_head io_jobs;
+	struct list_head pages_jobs;
+};
+
+struct kcopyd_job {
+	struct dm_kcopyd_client *kc;
+	struct list_head list;
+	unsigned int flags;
+	int read_err;
+	long unsigned int write_err;
+	enum req_op op;
+	struct dm_io_region source;
+	unsigned int num_dests;
+	struct dm_io_region dests[8];
+	struct page_list *pages;
+	dm_kcopyd_notify_fn fn;
+	void *context;
+	struct mutex lock;
+	atomic_t sub_jobs;
+	sector_t progress;
+	sector_t write_offset;
+	struct kcopyd_job *master_job;
+};
+
+struct cpuidle_state_kobj {
+	struct cpuidle_state *state;
+	struct cpuidle_state_usage *state_usage;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+	struct cpuidle_device *device;
+};
+
+struct cpuidle_device_kobj {
+	struct cpuidle_device *dev;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_device *, char *);
+	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
+};
+
+struct cpuidle_state_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
+	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
+};
+
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
+};
+
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
+};
+
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
+};
+
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
+};
+
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
+};
+
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
+};
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+struct dst_cache_pcpu {
+	long unsigned int refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+struct tcamsg {
+	unsigned char tca_family;
+	unsigned char tca__pad1;
+	short unsigned int tca__pad2;
+};
+
+enum {
+	TCA_ROOT_UNSPEC = 0,
+	TCA_ROOT_TAB = 1,
+	TCA_ROOT_FLAGS = 2,
+	TCA_ROOT_COUNT = 3,
+	TCA_ROOT_TIME_DELTA = 4,
+	__TCA_ROOT_MAX = 5,
+};
+
+struct tc_action_net {
+	struct tcf_idrinfo *idrinfo;
+	const struct tc_action_ops *ops;
+};
+
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
+};
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+};
+
+struct nf_hook_ops {
+	nf_hookfn *hook;
+	struct net_device *dev;
+	void *priv;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
+	unsigned int hooknum;
+	int priority;
 };
 
 struct nf_hook_entries_rcu_head {
@@ -117042,497 +128573,27 @@
 	void *allocation;
 };
 
-struct nf_conn___2;
-
-enum nf_nat_manip_type;
-
-struct nf_nat_hook {
-	int (*parse_nat_setup)(struct nf_conn___2 *, enum nf_nat_manip_type, const struct nlattr *);
-	void (*decode_session)(struct sk_buff *, struct flowi *);
-	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn___2 *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
 };
 
-struct nf_conntrack_tuple___2;
+struct nf_conntrack_tuple;
 
 struct nf_ct_hook {
 	int (*update)(struct net *, struct sk_buff *);
 	void (*destroy)(struct nf_conntrack *);
-	bool (*get_tuple_skb)(struct nf_conntrack_tuple___2 *, const struct sk_buff *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
 };
 
 struct nfnl_ct_hook {
-	struct nf_conn___2 * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);
-	size_t (*build_size)(const struct nf_conn___2 *);
-	int (*build)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, u_int16_t, u_int16_t);
-	int (*parse)(const struct nlattr *, struct nf_conn___2 *);
-	int (*attach_expect)(const struct nlattr *, struct nf_conn___2 *, u32, u32);
-	void (*seq_adjust)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, s32);
-};
-
-struct nf_ipv6_ops {
-	void (*route_input)(struct sk_buff *);
-	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
-};
-
-struct nf_queue_entry {
-	struct list_head list;
-	struct sk_buff *skb;
-	unsigned int id;
-	unsigned int hook_index;
-	struct net_device *physin;
-	struct net_device *physout;
-	struct nf_hook_state state;
-	u16 size;
-};
-
-struct nf_loginfo {
-	u_int8_t type;
-	union {
-		struct {
-			u_int32_t copy_len;
-			u_int16_t group;
-			u_int16_t qthreshold;
-			u_int16_t flags;
-		} ulog;
-		struct {
-			u_int8_t level;
-			u_int8_t logflags;
-		} log;
-	} u;
-};
-
-struct nf_log_buf {
-	unsigned int count;
-	char buf[1020];
-};
-
-struct nf_bridge_info {
-	enum {
-		BRNF_PROTO_UNCHANGED = 0,
-		BRNF_PROTO_8021Q = 1,
-		BRNF_PROTO_PPPOE = 2,
-	} orig_proto: 8;
-	u8 pkt_otherhost: 1;
-	u8 in_prerouting: 1;
-	u8 bridged_dnat: 1;
-	__u16 frag_max_size;
-	struct net_device *physindev;
-	struct net_device *physoutdev;
-	union {
-		__be32 ipv4_daddr;
-		struct in6_addr ipv6_daddr;
-		char neigh_header[8];
-	};
-};
-
-struct ip_rt_info {
-	__be32 daddr;
-	__be32 saddr;
-	u_int8_t tos;
-	u_int32_t mark;
-};
-
-struct ip6_rt_info {
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	u_int32_t mark;
-};
-
-struct nf_sockopt_ops {
-	struct list_head list;
-	u_int8_t pf;
-	int set_optmin;
-	int set_optmax;
-	int (*set)(struct sock *, int, sockptr_t, unsigned int);
-	int get_optmin;
-	int get_optmax;
-	int (*get)(struct sock *, int, void *, int *);
-	struct module *owner;
-};
-
-struct ip_mreqn {
-	struct in_addr imr_multiaddr;
-	struct in_addr imr_address;
-	int imr_ifindex;
-};
-
-struct rtmsg {
-	unsigned char rtm_family;
-	unsigned char rtm_dst_len;
-	unsigned char rtm_src_len;
-	unsigned char rtm_tos;
-	unsigned char rtm_table;
-	unsigned char rtm_protocol;
-	unsigned char rtm_scope;
-	unsigned char rtm_type;
-	unsigned int rtm_flags;
-};
-
-struct rtvia {
-	__kernel_sa_family_t rtvia_family;
-	__u8 rtvia_addr[0];
-};
-
-struct ip_sf_list;
-
-struct ip_mc_list {
-	struct in_device *interface;
-	__be32 multiaddr;
-	unsigned int sfmode;
-	struct ip_sf_list *sources;
-	struct ip_sf_list *tomb;
-	long unsigned int sfcount[2];
-	union {
-		struct ip_mc_list *next;
-		struct ip_mc_list *next_rcu;
-	};
-	struct ip_mc_list *next_hash;
-	struct timer_list timer;
-	int users;
-	refcount_t refcnt;
-	spinlock_t lock;
-	char tm_running;
-	char reporter;
-	char unsolicit_count;
-	char loaded;
-	unsigned char gsquery;
-	unsigned char crcount;
-	struct callback_head rcu;
-};
-
-struct ip_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct callback_head rcu;
-	__be32 sl_addr[0];
-};
-
-struct ip_mc_socklist {
-	struct ip_mc_socklist *next_rcu;
-	struct ip_mreqn multi;
-	unsigned int sfmode;
-	struct ip_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ip_sf_list {
-	struct ip_sf_list *sf_next;
-	long unsigned int sf_count[2];
-	__be32 sf_inaddr;
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ipv4_addr_key {
-	__be32 addr;
-	int vif;
-};
-
-struct inetpeer_addr {
-	union {
-		struct ipv4_addr_key a4;
-		struct in6_addr a6;
-		u32 key[4];
-	};
-	__u16 family;
-};
-
-struct inet_peer {
-	struct rb_node rb_node;
-	struct inetpeer_addr daddr;
-	u32 metrics[17];
-	u32 rate_tokens;
-	u32 n_redirects;
-	long unsigned int rate_last;
-	union {
-		struct {
-			atomic_t rid;
-		};
-		struct callback_head rcu;
-	};
-	__u32 dtime;
-	refcount_t refcnt;
-};
-
-struct fib_rt_info {
-	struct fib_info *fi;
-	u32 tb_id;
-	__be32 dst;
-	int dst_len;
-	u8 tos;
-	u8 type;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
-};
-
-struct uncached_list {
-	spinlock_t lock;
-	struct list_head head;
-};
-
-struct ip_rt_acct {
-	__u32 o_bytes;
-	__u32 o_packets;
-	__u32 i_bytes;
-	__u32 i_packets;
-};
-
-struct rt_cache_stat {
-	unsigned int in_slow_tot;
-	unsigned int in_slow_mc;
-	unsigned int in_no_route;
-	unsigned int in_brd;
-	unsigned int in_martian_dst;
-	unsigned int in_martian_src;
-	unsigned int out_slow_tot;
-	unsigned int out_slow_mc;
-};
-
-struct fib_alias {
-	struct hlist_node fa_list;
-	struct fib_info *fa_info;
-	u8 fa_tos;
-	u8 fa_type;
-	u8 fa_state;
-	u8 fa_slen;
-	u32 tb_id;
-	s16 fa_default;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
-	struct callback_head rcu;
-};
-
-struct fib_prop {
-	int error;
-	u8 scope;
-};
-
-struct net_offload {
-	struct offload_callbacks callbacks;
-	unsigned int flags;
-};
-
-struct raw_hashinfo {
-	rwlock_t lock;
-	struct hlist_head ht[256];
-};
-
-enum ip_defrag_users {
-	IP_DEFRAG_LOCAL_DELIVER = 0,
-	IP_DEFRAG_CALL_RA_CHAIN = 1,
-	IP_DEFRAG_CONNTRACK_IN = 2,
-	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
-	IP_DEFRAG_CONNTRACK_OUT = 65538,
-	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
-	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
-	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
-	IP_DEFRAG_VS_IN = 196610,
-	IP_DEFRAG_VS_OUT = 196611,
-	IP_DEFRAG_VS_FWD = 196612,
-	IP_DEFRAG_AF_PACKET = 196613,
-	IP_DEFRAG_MACVLAN = 196614,
-};
-
-enum {
-	INET_FRAG_FIRST_IN = 1,
-	INET_FRAG_LAST_IN = 2,
-	INET_FRAG_COMPLETE = 4,
-	INET_FRAG_HASH_DEAD = 8,
-};
-
-struct ipq {
-	struct inet_frag_queue q;
-	u8 ecn;
-	u16 max_df_size;
-	int iif;
-	unsigned int rid;
-	struct inet_peer *peer;
-};
-
-struct ip_options_data {
-	struct ip_options_rcu opt;
-	char data[40];
-};
-
-struct ipcm_cookie {
-	struct sockcm_cookie sockc;
-	__be32 addr;
-	int oif;
-	struct ip_options_rcu *opt;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-};
-
-struct ip_fraglist_iter {
-	struct sk_buff *frag;
-	struct iphdr *iph;
-	int offset;
-	unsigned int hlen;
-};
-
-struct ip_frag_state {
-	bool DF;
-	unsigned int hlen;
-	unsigned int ll_rs;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	__be16 not_last_frag;
-};
-
-struct ip_reply_arg {
-	struct kvec iov[1];
-	int flags;
-	__wsum csum;
-	int csumoffset;
-	int bound_dev_if;
-	u8 tos;
-	kuid_t uid;
-};
-
-struct ip_mreq_source {
-	__be32 imr_multiaddr;
-	__be32 imr_interface;
-	__be32 imr_sourceaddr;
-};
-
-struct ip_msfilter {
-	__be32 imsf_multiaddr;
-	__be32 imsf_interface;
-	__u32 imsf_fmode;
-	__u32 imsf_numsrc;
-	__be32 imsf_slist[1];
-};
-
-struct group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-};
-
-struct group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-};
-
-struct group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-};
-
-struct in_pktinfo {
-	int ipi_ifindex;
-	struct in_addr ipi_spec_dst;
-	struct in_addr ipi_addr;
-};
-
-struct compat_group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-} __attribute__((packed));
-
-struct compat_group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-} __attribute__((packed));
-
-struct compat_group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-} __attribute__((packed));
-
-enum {
-	BPFILTER_IPT_SO_SET_REPLACE = 64,
-	BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
-	BPFILTER_IPT_SET_MAX = 66,
-};
-
-enum {
-	BPFILTER_IPT_SO_GET_INFO = 64,
-	BPFILTER_IPT_SO_GET_ENTRIES = 65,
-	BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
-	BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
-	BPFILTER_IPT_GET_MAX = 68,
-};
-
-struct tcpvegas_info {
-	__u32 tcpv_enabled;
-	__u32 tcpv_rttcnt;
-	__u32 tcpv_rtt;
-	__u32 tcpv_minrtt;
-};
-
-struct tcp_dctcp_info {
-	__u16 dctcp_enabled;
-	__u16 dctcp_ce_state;
-	__u32 dctcp_alpha;
-	__u32 dctcp_ab_ecn;
-	__u32 dctcp_ab_tot;
-};
-
-struct tcp_bbr_info {
-	__u32 bbr_bw_lo;
-	__u32 bbr_bw_hi;
-	__u32 bbr_min_rtt;
-	__u32 bbr_pacing_gain;
-	__u32 bbr_cwnd_gain;
-};
-
-union tcp_cc_info {
-	struct tcpvegas_info vegas;
-	struct tcp_dctcp_info dctcp;
-	struct tcp_bbr_info bbr;
-};
-
-enum {
-	BPF_TCP_ESTABLISHED = 1,
-	BPF_TCP_SYN_SENT = 2,
-	BPF_TCP_SYN_RECV = 3,
-	BPF_TCP_FIN_WAIT1 = 4,
-	BPF_TCP_FIN_WAIT2 = 5,
-	BPF_TCP_TIME_WAIT = 6,
-	BPF_TCP_CLOSE = 7,
-	BPF_TCP_CLOSE_WAIT = 8,
-	BPF_TCP_LAST_ACK = 9,
-	BPF_TCP_LISTEN = 10,
-	BPF_TCP_CLOSING = 11,
-	BPF_TCP_NEW_SYN_RECV = 12,
-	BPF_TCP_MAX_STATES = 13,
-};
-
-enum inet_csk_ack_state_t {
-	ICSK_ACK_SCHED = 1,
-	ICSK_ACK_TIMER = 2,
-	ICSK_ACK_PUSHED = 4,
-	ICSK_ACK_PUSHED2 = 8,
-	ICSK_ACK_NOW = 16,
-};
-
-enum {
-	TCP_FLAG_CWR = 32768,
-	TCP_FLAG_ECE = 16384,
-	TCP_FLAG_URG = 8192,
-	TCP_FLAG_ACK = 4096,
-	TCP_FLAG_PSH = 2048,
-	TCP_FLAG_RST = 1024,
-	TCP_FLAG_SYN = 512,
-	TCP_FLAG_FIN = 256,
-	TCP_RESERVED_BITS = 15,
-	TCP_DATA_OFFSET = 240,
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
 };
 
 struct tcp_repair_opt {
@@ -117549,72 +128610,6 @@
 };
 
 enum {
-	TCP_NO_QUEUE = 0,
-	TCP_RECV_QUEUE = 1,
-	TCP_SEND_QUEUE = 2,
-	TCP_QUEUES_NR = 3,
-};
-
-struct tcp_info {
-	__u8 tcpi_state;
-	__u8 tcpi_ca_state;
-	__u8 tcpi_retransmits;
-	__u8 tcpi_probes;
-	__u8 tcpi_backoff;
-	__u8 tcpi_options;
-	__u8 tcpi_snd_wscale: 4;
-	__u8 tcpi_rcv_wscale: 4;
-	__u8 tcpi_delivery_rate_app_limited: 1;
-	__u8 tcpi_fastopen_client_fail: 2;
-	__u32 tcpi_rto;
-	__u32 tcpi_ato;
-	__u32 tcpi_snd_mss;
-	__u32 tcpi_rcv_mss;
-	__u32 tcpi_unacked;
-	__u32 tcpi_sacked;
-	__u32 tcpi_lost;
-	__u32 tcpi_retrans;
-	__u32 tcpi_fackets;
-	__u32 tcpi_last_data_sent;
-	__u32 tcpi_last_ack_sent;
-	__u32 tcpi_last_data_recv;
-	__u32 tcpi_last_ack_recv;
-	__u32 tcpi_pmtu;
-	__u32 tcpi_rcv_ssthresh;
-	__u32 tcpi_rtt;
-	__u32 tcpi_rttvar;
-	__u32 tcpi_snd_ssthresh;
-	__u32 tcpi_snd_cwnd;
-	__u32 tcpi_advmss;
-	__u32 tcpi_reordering;
-	__u32 tcpi_rcv_rtt;
-	__u32 tcpi_rcv_space;
-	__u32 tcpi_total_retrans;
-	__u64 tcpi_pacing_rate;
-	__u64 tcpi_max_pacing_rate;
-	__u64 tcpi_bytes_acked;
-	__u64 tcpi_bytes_received;
-	__u32 tcpi_segs_out;
-	__u32 tcpi_segs_in;
-	__u32 tcpi_notsent_bytes;
-	__u32 tcpi_min_rtt;
-	__u32 tcpi_data_segs_in;
-	__u32 tcpi_data_segs_out;
-	__u64 tcpi_delivery_rate;
-	__u64 tcpi_busy_time;
-	__u64 tcpi_rwnd_limited;
-	__u64 tcpi_sndbuf_limited;
-	__u32 tcpi_delivered;
-	__u32 tcpi_delivered_ce;
-	__u64 tcpi_bytes_sent;
-	__u64 tcpi_bytes_retrans;
-	__u32 tcpi_dsack_dups;
-	__u32 tcpi_reord_seen;
-	__u32 tcpi_rcv_ooopack;
-	__u32 tcpi_snd_wnd;
-};
-
-enum {
 	TCP_NLA_PAD = 0,
 	TCP_NLA_BUSY = 1,
 	TCP_NLA_RWND_LIMITED = 2,
@@ -117641,6 +128636,7 @@
 	TCP_NLA_TIMEOUT_REHASH = 23,
 	TCP_NLA_BYTES_NOTSENT = 24,
 	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
 };
 
 struct tcp_zerocopy_receive {
@@ -117649,19 +128645,34 @@
 	__u32 recv_skip_hint;
 	__u32 inq;
 	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
 };
 
-struct tcp_md5sig_pool {
-	struct ahash_request *md5_req;
-	void *scratch;
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
 };
 
-enum tcp_chrono {
-	TCP_CHRONO_UNSPEC = 0,
-	TCP_CHRONO_BUSY = 1,
-	TCP_CHRONO_RWND_LIMITED = 2,
-	TCP_CHRONO_SNDBUF_LIMITED = 3,
-	__TCP_CHRONO_MAX = 4,
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
 };
 
 struct tcp_splice_state {
@@ -117670,408 +128681,6 @@
 	unsigned int flags;
 };
 
-enum tcp_fastopen_client_fail {
-	TFO_STATUS_UNSPEC = 0,
-	TFO_COOKIE_UNAVAILABLE = 1,
-	TFO_DATA_NOT_ACKED = 2,
-	TFO_SYN_RETRANSMITTED = 3,
-};
-
-struct tcp_sack_block_wire {
-	__be32 start_seq;
-	__be32 end_seq;
-};
-
-struct static_key_false_deferred {
-	struct static_key_false key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-struct mptcp_ext {
-	union {
-		u64 data_ack;
-		u32 data_ack32;
-	};
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-};
-
-enum tcp_queue {
-	TCP_FRAG_IN_WRITE_QUEUE = 0,
-	TCP_FRAG_IN_RTX_QUEUE = 1,
-};
-
-enum tcp_ca_ack_event_flags {
-	CA_ACK_SLOWPATH = 1,
-	CA_ACK_WIN_UPDATE = 2,
-	CA_ACK_ECE = 4,
-};
-
-struct tcp_sacktag_state {
-	u64 first_sackt;
-	u64 last_sackt;
-	u32 reord;
-	u32 sack_delivered;
-	int flag;
-	unsigned int mss_now;
-	struct rate_sample *rate;
-};
-
-enum pkt_hash_types {
-	PKT_HASH_TYPE_NONE = 0,
-	PKT_HASH_TYPE_L2 = 1,
-	PKT_HASH_TYPE_L3 = 2,
-	PKT_HASH_TYPE_L4 = 3,
-};
-
-enum {
-	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
-	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
-};
-
-enum tsq_flags {
-	TSQF_THROTTLED = 1,
-	TSQF_QUEUED = 2,
-	TCPF_TSQ_DEFERRED = 4,
-	TCPF_WRITE_TIMER_DEFERRED = 8,
-	TCPF_DELACK_TIMER_DEFERRED = 16,
-	TCPF_MTU_REDUCED_DEFERRED = 32,
-};
-
-struct mptcp_out_options {
-	u16 suboptions;
-	u64 sndr_key;
-	u64 rcvr_key;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-	u8 addr_id;
-	u64 ahmac;
-	u8 rm_id;
-	u8 join_id;
-	u8 backup;
-	u32 nonce;
-	u64 thmac;
-	u32 token;
-	u8 hmac[20];
-	struct mptcp_ext ext_copy;
-};
-
-struct tcp_out_options {
-	u16 options;
-	u16 mss;
-	u8 ws;
-	u8 num_sack_blocks;
-	u8 hash_size;
-	u8 bpf_opt_len;
-	__u8 *hash_location;
-	__u32 tsval;
-	__u32 tsecr;
-	struct tcp_fastopen_cookie *fastopen_cookie;
-	struct mptcp_out_options mptcp;
-};
-
-struct tsq_tasklet {
-	struct tasklet_struct tasklet;
-	struct list_head head;
-};
-
-struct tcp_md5sig {
-	struct __kernel_sockaddr_storage tcpm_addr;
-	__u8 tcpm_flags;
-	__u8 tcpm_prefixlen;
-	__u16 tcpm_keylen;
-	int tcpm_ifindex;
-	__u8 tcpm_key[80];
-};
-
-struct icmp_err {
-	int errno;
-	unsigned int fatal: 1;
-};
-
-enum tcp_tw_status {
-	TCP_TW_SUCCESS = 0,
-	TCP_TW_RST = 1,
-	TCP_TW_ACK = 2,
-	TCP_TW_SYN = 3,
-};
-
-struct tcp4_pseudohdr {
-	__be32 saddr;
-	__be32 daddr;
-	__u8 pad;
-	__u8 protocol;
-	__be16 len;
-};
-
-enum tcp_seq_states {
-	TCP_SEQ_STATE_LISTENING = 0,
-	TCP_SEQ_STATE_ESTABLISHED = 1,
-};
-
-struct tcp_seq_afinfo {
-	sa_family_t family;
-};
-
-struct tcp_iter_state {
-	struct seq_net_private p;
-	enum tcp_seq_states state;
-	struct sock *syn_wait_sk;
-	struct tcp_seq_afinfo *bpf_seq_afinfo;
-	int bucket;
-	int offset;
-	int sbucket;
-	int num;
-	loff_t last_pos;
-};
-
-struct bpf_iter__tcp {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct sock_common *sk_common;
-	};
-	uid_t uid;
-};
-
-enum tcp_metric_index {
-	TCP_METRIC_RTT = 0,
-	TCP_METRIC_RTTVAR = 1,
-	TCP_METRIC_SSTHRESH = 2,
-	TCP_METRIC_CWND = 3,
-	TCP_METRIC_REORDERING = 4,
-	TCP_METRIC_RTT_US = 5,
-	TCP_METRIC_RTTVAR_US = 6,
-	__TCP_METRIC_MAX = 7,
-};
-
-enum {
-	TCP_METRICS_ATTR_UNSPEC = 0,
-	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
-	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
-	TCP_METRICS_ATTR_AGE = 3,
-	TCP_METRICS_ATTR_TW_TSVAL = 4,
-	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
-	TCP_METRICS_ATTR_VALS = 6,
-	TCP_METRICS_ATTR_FOPEN_MSS = 7,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
-	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
-	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
-	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
-	TCP_METRICS_ATTR_PAD = 13,
-	__TCP_METRICS_ATTR_MAX = 14,
-};
-
-enum {
-	TCP_METRICS_CMD_UNSPEC = 0,
-	TCP_METRICS_CMD_GET = 1,
-	TCP_METRICS_CMD_DEL = 2,
-	__TCP_METRICS_CMD_MAX = 3,
-};
-
-struct tcp_fastopen_metrics {
-	u16 mss;
-	u16 syn_loss: 10;
-	u16 try_exp: 2;
-	long unsigned int last_syn_loss;
-	struct tcp_fastopen_cookie cookie;
-};
-
-struct tcp_metrics_block {
-	struct tcp_metrics_block *tcpm_next;
-	possible_net_t tcpm_net;
-	struct inetpeer_addr tcpm_saddr;
-	struct inetpeer_addr tcpm_daddr;
-	long unsigned int tcpm_stamp;
-	u32 tcpm_lock;
-	u32 tcpm_vals[5];
-	struct tcp_fastopen_metrics tcpm_fastopen;
-	struct callback_head callback_head;
-};
-
-struct tcpm_hash_bucket {
-	struct tcp_metrics_block *chain;
-};
-
-struct icmp_filter {
-	__u32 data;
-};
-
-struct raw_iter_state {
-	struct seq_net_private p;
-	int bucket;
-};
-
-struct raw_sock {
-	struct inet_sock inet;
-	struct icmp_filter filter;
-	u32 ipmr_table;
-};
-
-struct raw_frag_vec {
-	struct msghdr *msg;
-	union {
-		struct icmphdr icmph;
-		char c[1];
-	} hdr;
-	int hlen;
-};
-
-struct ip_tunnel_encap {
-	u16 type;
-	u16 flags;
-	__be16 sport;
-	__be16 dport;
-};
-
-struct ip_tunnel_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
-	int (*err_handler)(struct sk_buff *, u32);
-};
-
-struct udp_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	__u16 cscov;
-	__u8 partial_cov;
-};
-
-struct udp_dev_scratch {
-	u32 _tsize_state;
-	u16 len;
-	bool is_linear;
-	bool csum_unnecessary;
-};
-
-struct udp_seq_afinfo {
-	sa_family_t family;
-	struct udp_table *udp_table;
-};
-
-struct udp_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	struct udp_seq_afinfo *bpf_seq_afinfo;
-};
-
-struct bpf_iter__udp {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct udp_sock *udp_sk;
-	};
-	uid_t uid;
-	int: 32;
-	int bucket;
-};
-
-struct inet_protosw {
-	struct list_head list;
-	short unsigned int type;
-	short unsigned int protocol;
-	struct proto *prot;
-	const struct proto_ops *ops;
-	unsigned char flags;
-};
-
-typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
-
-typedef struct sock * (*udp_lookup_t)(struct sk_buff *, __be16, __be16);
-
-struct arpreq {
-	struct sockaddr arp_pa;
-	struct sockaddr arp_ha;
-	int arp_flags;
-	struct sockaddr arp_netmask;
-	char arp_dev[16];
-};
-
-typedef struct {
-	char ax25_call[7];
-} ax25_address;
-
-enum {
-	AX25_VALUES_IPDEFMODE = 0,
-	AX25_VALUES_AXDEFMODE = 1,
-	AX25_VALUES_BACKOFF = 2,
-	AX25_VALUES_CONMODE = 3,
-	AX25_VALUES_WINDOW = 4,
-	AX25_VALUES_EWINDOW = 5,
-	AX25_VALUES_T1 = 6,
-	AX25_VALUES_T2 = 7,
-	AX25_VALUES_T3 = 8,
-	AX25_VALUES_IDLE = 9,
-	AX25_VALUES_N2 = 10,
-	AX25_VALUES_PACLEN = 11,
-	AX25_VALUES_PROTOCOL = 12,
-	AX25_VALUES_DS_TIMEOUT = 13,
-	AX25_MAX_VALUES = 14,
-};
-
-enum ip_conntrack_status {
-	IPS_EXPECTED_BIT = 0,
-	IPS_EXPECTED = 1,
-	IPS_SEEN_REPLY_BIT = 1,
-	IPS_SEEN_REPLY = 2,
-	IPS_ASSURED_BIT = 2,
-	IPS_ASSURED = 4,
-	IPS_CONFIRMED_BIT = 3,
-	IPS_CONFIRMED = 8,
-	IPS_SRC_NAT_BIT = 4,
-	IPS_SRC_NAT = 16,
-	IPS_DST_NAT_BIT = 5,
-	IPS_DST_NAT = 32,
-	IPS_NAT_MASK = 48,
-	IPS_SEQ_ADJUST_BIT = 6,
-	IPS_SEQ_ADJUST = 64,
-	IPS_SRC_NAT_DONE_BIT = 7,
-	IPS_SRC_NAT_DONE = 128,
-	IPS_DST_NAT_DONE_BIT = 8,
-	IPS_DST_NAT_DONE = 256,
-	IPS_NAT_DONE_MASK = 384,
-	IPS_DYING_BIT = 9,
-	IPS_DYING = 512,
-	IPS_FIXED_TIMEOUT_BIT = 10,
-	IPS_FIXED_TIMEOUT = 1024,
-	IPS_TEMPLATE_BIT = 11,
-	IPS_TEMPLATE = 2048,
-	IPS_UNTRACKED_BIT = 12,
-	IPS_UNTRACKED = 4096,
-	IPS_NAT_CLASH_BIT = 12,
-	IPS_NAT_CLASH = 4096,
-	IPS_HELPER_BIT = 13,
-	IPS_HELPER = 8192,
-	IPS_OFFLOAD_BIT = 14,
-	IPS_OFFLOAD = 16384,
-	IPS_HW_OFFLOAD_BIT = 15,
-	IPS_HW_OFFLOAD = 32768,
-	IPS_UNCHANGEABLE_MASK = 56313,
-	__IPS_MAX_BIT = 16,
-};
-
-enum {
-	XFRM_LOOKUP_ICMP = 1,
-	XFRM_LOOKUP_QUEUE = 2,
-	XFRM_LOOKUP_KEEP_DST_REF = 4,
-};
-
 struct icmp_ext_hdr {
 	__u8 reserved1: 4;
 	__u8 version: 4;
@@ -118085,6 +128694,27 @@
 	__u8 class_type;
 };
 
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
 struct icmp_bxm {
 	struct sk_buff *skb;
 	int offset;
@@ -118098,1255 +128728,10 @@
 };
 
 struct icmp_control {
-	bool (*handler)(struct sk_buff *);
+	enum skb_drop_reason (*handler)(struct sk_buff *);
 	short int error;
 };
 
-struct ifaddrmsg {
-	__u8 ifa_family;
-	__u8 ifa_prefixlen;
-	__u8 ifa_flags;
-	__u8 ifa_scope;
-	__u32 ifa_index;
-};
-
-enum {
-	IFA_UNSPEC = 0,
-	IFA_ADDRESS = 1,
-	IFA_LOCAL = 2,
-	IFA_LABEL = 3,
-	IFA_BROADCAST = 4,
-	IFA_ANYCAST = 5,
-	IFA_CACHEINFO = 6,
-	IFA_MULTICAST = 7,
-	IFA_FLAGS = 8,
-	IFA_RT_PRIORITY = 9,
-	IFA_TARGET_NETNSID = 10,
-	__IFA_MAX = 11,
-};
-
-struct ifa_cacheinfo {
-	__u32 ifa_prefered;
-	__u32 ifa_valid;
-	__u32 cstamp;
-	__u32 tstamp;
-};
-
-enum {
-	IFLA_INET_UNSPEC = 0,
-	IFLA_INET_CONF = 1,
-	__IFLA_INET_MAX = 2,
-};
-
-struct in_validator_info {
-	__be32 ivi_addr;
-	struct in_device *ivi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct netconfmsg {
-	__u8 ncm_family;
-};
-
-enum {
-	NETCONFA_UNSPEC = 0,
-	NETCONFA_IFINDEX = 1,
-	NETCONFA_FORWARDING = 2,
-	NETCONFA_RP_FILTER = 3,
-	NETCONFA_MC_FORWARDING = 4,
-	NETCONFA_PROXY_NEIGH = 5,
-	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
-	NETCONFA_INPUT = 7,
-	NETCONFA_BC_FORWARDING = 8,
-	__NETCONFA_MAX = 9,
-};
-
-struct inet_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-};
-
-struct devinet_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table devinet_vars[33];
-};
-
-struct rtentry {
-	long unsigned int rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	long unsigned int rt_pad3;
-	void *rt_pad4;
-	short int rt_metric;
-	char *rt_dev;
-	long unsigned int rt_mtu;
-	long unsigned int rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct pingv6_ops {
-	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
-	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	int (*icmpv6_err_convert)(u8, u8, int *);
-	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
-	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
-};
-
-struct compat_rtentry {
-	u32 rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	u32 rt_pad3;
-	unsigned char rt_tos;
-	unsigned char rt_class;
-	short int rt_pad4;
-	short int rt_metric;
-	compat_uptr_t rt_dev;
-	u32 rt_mtu;
-	u32 rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct igmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-};
-
-struct igmpv3_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	__be32 grec_mca;
-	__be32 grec_src[0];
-};
-
-struct igmpv3_report {
-	__u8 type;
-	__u8 resv1;
-	__sum16 csum;
-	__be16 resv2;
-	__be16 ngrec;
-	struct igmpv3_grec grec[0];
-};
-
-struct igmpv3_query {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-	__u8 qrv: 3;
-	__u8 suppress: 1;
-	__u8 resv: 4;
-	__u8 qqic;
-	__be16 nsrcs;
-	__be32 srcs[0];
-};
-
-struct igmp_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *in_dev;
-};
-
-struct igmp_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *idev;
-	struct ip_mc_list *im;
-};
-
-struct fib_config {
-	u8 fc_dst_len;
-	u8 fc_tos;
-	u8 fc_protocol;
-	u8 fc_scope;
-	u8 fc_type;
-	u8 fc_gw_family;
-	u32 fc_table;
-	__be32 fc_dst;
-	union {
-		__be32 fc_gw4;
-		struct in6_addr fc_gw6;
-	};
-	int fc_oif;
-	u32 fc_flags;
-	u32 fc_priority;
-	__be32 fc_prefsrc;
-	u32 fc_nh_id;
-	struct nlattr *fc_mx;
-	struct rtnexthop *fc_mp;
-	int fc_mx_len;
-	int fc_mp_len;
-	u32 fc_flow;
-	u32 fc_nlflags;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-};
-
-struct fib_result_nl {
-	__be32 fl_addr;
-	u32 fl_mark;
-	unsigned char fl_tos;
-	unsigned char fl_scope;
-	unsigned char tb_id_in;
-	unsigned char tb_id;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	int err;
-};
-
-struct fib_dump_filter {
-	u32 table_id;
-	bool filter_set;
-	bool dump_routes;
-	bool dump_exceptions;
-	unsigned char protocol;
-	unsigned char rt_type;
-	unsigned int flags;
-	struct net_device *dev;
-};
-
-struct fib_nh_notifier_info {
-	struct fib_notifier_info info;
-	struct fib_nh *fib_nh;
-};
-
-struct fib_entry_notifier_info {
-	struct fib_notifier_info info;
-	u32 dst;
-	int dst_len;
-	struct fib_info *fi;
-	u8 tos;
-	u8 type;
-	u32 tb_id;
-};
-
-typedef unsigned int t_key;
-
-struct key_vector {
-	t_key key;
-	unsigned char pos;
-	unsigned char bits;
-	unsigned char slen;
-	union {
-		struct hlist_head leaf;
-		struct key_vector *tnode[0];
-	};
-};
-
-struct tnode {
-	struct callback_head rcu;
-	t_key empty_children;
-	t_key full_children;
-	struct key_vector *parent;
-	struct key_vector kv[1];
-};
-
-struct trie_use_stats {
-	unsigned int gets;
-	unsigned int backtrack;
-	unsigned int semantic_match_passed;
-	unsigned int semantic_match_miss;
-	unsigned int null_node_hit;
-	unsigned int resize_node_skipped;
-};
-
-struct trie_stat {
-	unsigned int totdepth;
-	unsigned int maxdepth;
-	unsigned int tnodes;
-	unsigned int leaves;
-	unsigned int nullpointers;
-	unsigned int prefixes;
-	unsigned int nodesizes[32];
-};
-
-struct trie {
-	struct key_vector kv[1];
-	struct trie_use_stats *stats;
-};
-
-struct fib_trie_iter {
-	struct seq_net_private p;
-	struct fib_table *tb;
-	struct key_vector *tnode;
-	unsigned int index;
-	unsigned int depth;
-};
-
-struct fib_route_iter {
-	struct seq_net_private p;
-	struct fib_table *main_tb;
-	struct key_vector *tnode;
-	loff_t pos;
-	t_key key;
-};
-
-struct ipfrag_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	};
-	struct sk_buff *next_frag;
-	int frag_run_len;
-};
-
-struct icmpv6_echo {
-	__be16 identifier;
-	__be16 sequence;
-};
-
-struct icmpv6_nd_advt {
-	__u32 reserved: 5;
-	__u32 override: 1;
-	__u32 solicited: 1;
-	__u32 router: 1;
-	__u32 reserved2: 24;
-};
-
-struct icmpv6_nd_ra {
-	__u8 hop_limit;
-	__u8 reserved: 3;
-	__u8 router_pref: 2;
-	__u8 home_agent: 1;
-	__u8 other: 1;
-	__u8 managed: 1;
-	__be16 rt_lifetime;
-};
-
-struct icmp6hdr {
-	__u8 icmp6_type;
-	__u8 icmp6_code;
-	__sum16 icmp6_cksum;
-	union {
-		__be32 un_data32[1];
-		__be16 un_data16[2];
-		__u8 un_data8[4];
-		struct icmpv6_echo u_echo;
-		struct icmpv6_nd_advt u_nd_advt;
-		struct icmpv6_nd_ra u_nd_ra;
-	} icmp6_dataun;
-};
-
-struct ping_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	sa_family_t family;
-};
-
-struct pingfakehdr {
-	struct icmphdr icmph;
-	struct msghdr *msg;
-	sa_family_t family;
-	__wsum wcheck;
-};
-
-struct ping_table {
-	struct hlist_nulls_head hash[64];
-	rwlock_t lock;
-};
-
-enum lwtunnel_ip_t {
-	LWTUNNEL_IP_UNSPEC = 0,
-	LWTUNNEL_IP_ID = 1,
-	LWTUNNEL_IP_DST = 2,
-	LWTUNNEL_IP_SRC = 3,
-	LWTUNNEL_IP_TTL = 4,
-	LWTUNNEL_IP_TOS = 5,
-	LWTUNNEL_IP_FLAGS = 6,
-	LWTUNNEL_IP_PAD = 7,
-	LWTUNNEL_IP_OPTS = 8,
-	__LWTUNNEL_IP_MAX = 9,
-};
-
-enum lwtunnel_ip6_t {
-	LWTUNNEL_IP6_UNSPEC = 0,
-	LWTUNNEL_IP6_ID = 1,
-	LWTUNNEL_IP6_DST = 2,
-	LWTUNNEL_IP6_SRC = 3,
-	LWTUNNEL_IP6_HOPLIMIT = 4,
-	LWTUNNEL_IP6_TC = 5,
-	LWTUNNEL_IP6_FLAGS = 6,
-	LWTUNNEL_IP6_PAD = 7,
-	LWTUNNEL_IP6_OPTS = 8,
-	__LWTUNNEL_IP6_MAX = 9,
-};
-
-enum {
-	LWTUNNEL_IP_OPTS_UNSPEC = 0,
-	LWTUNNEL_IP_OPTS_GENEVE = 1,
-	LWTUNNEL_IP_OPTS_VXLAN = 2,
-	LWTUNNEL_IP_OPTS_ERSPAN = 3,
-	__LWTUNNEL_IP_OPTS_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
-	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
-	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
-	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
-	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
-	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
-	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
-	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
-	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
-};
-
-struct ip6_tnl_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-};
-
-struct geneve_opt {
-	__be16 opt_class;
-	u8 type;
-	u8 length: 5;
-	u8 r3: 1;
-	u8 r2: 1;
-	u8 r1: 1;
-	u8 opt_data[0];
-};
-
-struct vxlan_metadata {
-	u32 gbp;
-};
-
-struct erspan_md2 {
-	__be32 timestamp;
-	__be16 sgt;
-	__u8 hwid_upper: 2;
-	__u8 ft: 5;
-	__u8 p: 1;
-	__u8 o: 1;
-	__u8 gra: 2;
-	__u8 dir: 1;
-	__u8 hwid: 4;
-};
-
-struct erspan_metadata {
-	int version;
-	union {
-		__be32 index;
-		struct erspan_md2 md2;
-	} u;
-};
-
-struct nhmsg {
-	unsigned char nh_family;
-	unsigned char nh_scope;
-	unsigned char nh_protocol;
-	unsigned char resvd;
-	unsigned int nh_flags;
-};
-
-struct nexthop_grp {
-	__u32 id;
-	__u8 weight;
-	__u8 resvd1;
-	__u16 resvd2;
-};
-
-enum {
-	NEXTHOP_GRP_TYPE_MPATH = 0,
-	__NEXTHOP_GRP_TYPE_MAX = 1,
-};
-
-enum {
-	NHA_UNSPEC = 0,
-	NHA_ID = 1,
-	NHA_GROUP = 2,
-	NHA_GROUP_TYPE = 3,
-	NHA_BLACKHOLE = 4,
-	NHA_OIF = 5,
-	NHA_GATEWAY = 6,
-	NHA_ENCAP_TYPE = 7,
-	NHA_ENCAP = 8,
-	NHA_GROUPS = 9,
-	NHA_MASTER = 10,
-	NHA_FDB = 11,
-	__NHA_MAX = 12,
-};
-
-struct nh_config {
-	u32 nh_id;
-	u8 nh_family;
-	u8 nh_protocol;
-	u8 nh_blackhole;
-	u8 nh_fdb;
-	u32 nh_flags;
-	int nh_ifindex;
-	struct net_device *dev;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} gw;
-	struct nlattr *nh_grp;
-	u16 nh_grp_type;
-	struct nlattr *nh_encap;
-	u16 nh_encap_type;
-	u32 nlflags;
-	struct nl_info nlinfo;
-};
-
-enum nexthop_event_type {
-	NEXTHOP_EVENT_DEL = 0,
-};
-
-struct bpfilter_umh_ops {
-	struct umd_info info;
-	struct mutex lock;
-	int (*sockopt)(struct sock *, int, sockptr_t, unsigned int, bool);
-	int (*start)();
-};
-
-struct inet6_protocol {
-	void (*early_demux)(struct sk_buff *);
-	void (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	unsigned int flags;
-};
-
-struct snmp_mib {
-	const char *name;
-	int entry;
-};
-
-struct fib4_rule {
-	struct fib_rule common;
-	u8 dst_len;
-	u8 src_len;
-	u8 tos;
-	__be32 src;
-	__be32 srcmask;
-	__be32 dst;
-	__be32 dstmask;
-	u32 tclassid;
-};
-
-enum {
-	PIM_TYPE_HELLO = 0,
-	PIM_TYPE_REGISTER = 1,
-	PIM_TYPE_REGISTER_STOP = 2,
-	PIM_TYPE_JOIN_PRUNE = 3,
-	PIM_TYPE_BOOTSTRAP = 4,
-	PIM_TYPE_ASSERT = 5,
-	PIM_TYPE_GRAFT = 6,
-	PIM_TYPE_GRAFT_ACK = 7,
-	PIM_TYPE_CANDIDATE_RP_ADV = 8,
-};
-
-struct pimreghdr {
-	__u8 type;
-	__u8 reserved;
-	__be16 csum;
-	__be32 flags;
-};
-
-typedef short unsigned int vifi_t;
-
-struct vifctl {
-	vifi_t vifc_vifi;
-	unsigned char vifc_flags;
-	unsigned char vifc_threshold;
-	unsigned int vifc_rate_limit;
-	union {
-		struct in_addr vifc_lcl_addr;
-		int vifc_lcl_ifindex;
-	};
-	struct in_addr vifc_rmt_addr;
-};
-
-struct mfcctl {
-	struct in_addr mfcc_origin;
-	struct in_addr mfcc_mcastgrp;
-	vifi_t mfcc_parent;
-	unsigned char mfcc_ttls[32];
-	unsigned int mfcc_pkt_cnt;
-	unsigned int mfcc_byte_cnt;
-	unsigned int mfcc_wrong_if;
-	int mfcc_expire;
-};
-
-struct sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_vif_req {
-	vifi_t vifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct igmpmsg {
-	__u32 unused1;
-	__u32 unused2;
-	unsigned char im_msgtype;
-	unsigned char im_mbz;
-	unsigned char im_vif;
-	unsigned char im_vif_hi;
-	struct in_addr im_src;
-	struct in_addr im_dst;
-};
-
-enum {
-	IPMRA_TABLE_UNSPEC = 0,
-	IPMRA_TABLE_ID = 1,
-	IPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,
-	IPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,
-	IPMRA_TABLE_MROUTE_DO_ASSERT = 4,
-	IPMRA_TABLE_MROUTE_DO_PIM = 5,
-	IPMRA_TABLE_VIFS = 6,
-	IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,
-	__IPMRA_TABLE_MAX = 8,
-};
-
-enum {
-	IPMRA_VIF_UNSPEC = 0,
-	IPMRA_VIF = 1,
-	__IPMRA_VIF_MAX = 2,
-};
-
-enum {
-	IPMRA_VIFA_UNSPEC = 0,
-	IPMRA_VIFA_IFINDEX = 1,
-	IPMRA_VIFA_VIF_ID = 2,
-	IPMRA_VIFA_FLAGS = 3,
-	IPMRA_VIFA_BYTES_IN = 4,
-	IPMRA_VIFA_BYTES_OUT = 5,
-	IPMRA_VIFA_PACKETS_IN = 6,
-	IPMRA_VIFA_PACKETS_OUT = 7,
-	IPMRA_VIFA_LOCAL_ADDR = 8,
-	IPMRA_VIFA_REMOTE_ADDR = 9,
-	IPMRA_VIFA_PAD = 10,
-	__IPMRA_VIFA_MAX = 11,
-};
-
-enum {
-	IPMRA_CREPORT_UNSPEC = 0,
-	IPMRA_CREPORT_MSGTYPE = 1,
-	IPMRA_CREPORT_VIF_ID = 2,
-	IPMRA_CREPORT_SRC_ADDR = 3,
-	IPMRA_CREPORT_DST_ADDR = 4,
-	IPMRA_CREPORT_PKT = 5,
-	IPMRA_CREPORT_TABLE = 6,
-	__IPMRA_CREPORT_MAX = 7,
-};
-
-struct vif_device {
-	struct net_device *dev;
-	long unsigned int bytes_in;
-	long unsigned int bytes_out;
-	long unsigned int pkt_in;
-	long unsigned int pkt_out;
-	long unsigned int rate_limit;
-	unsigned char threshold;
-	short unsigned int flags;
-	int link;
-	struct netdev_phys_item_id dev_parent_id;
-	__be32 local;
-	__be32 remote;
-};
-
-struct vif_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct net_device *dev;
-	short unsigned int vif_index;
-	short unsigned int vif_flags;
-	u32 tb_id;
-};
-
-enum {
-	MFC_STATIC = 1,
-	MFC_OFFLOAD = 2,
-};
-
-struct mr_mfc {
-	struct rhlist_head mnode;
-	short unsigned int mfc_parent;
-	int mfc_flags;
-	union {
-		struct {
-			long unsigned int expires;
-			struct sk_buff_head unresolved;
-		} unres;
-		struct {
-			long unsigned int last_assert;
-			int minvif;
-			int maxvif;
-			long unsigned int bytes;
-			long unsigned int pkt;
-			long unsigned int wrong_if;
-			long unsigned int lastuse;
-			unsigned char ttls[32];
-			refcount_t refcount;
-		} res;
-	} mfc_un;
-	struct list_head list;
-	struct callback_head rcu;
-	void (*free)(struct callback_head *);
-};
-
-struct mfc_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct mr_mfc *mfc;
-	u32 tb_id;
-};
-
-struct mr_table_ops {
-	const struct rhashtable_params *rht_params;
-	void *cmparg_any;
-};
-
-struct mr_table {
-	struct list_head list;
-	possible_net_t net;
-	struct mr_table_ops ops;
-	u32 id;
-	struct sock *mroute_sk;
-	struct timer_list ipmr_expire_timer;
-	struct list_head mfc_unres_queue;
-	struct vif_device vif_table[32];
-	struct rhltable mfc_hash;
-	struct list_head mfc_cache_list;
-	int maxvif;
-	atomic_t cache_resolve_queue_len;
-	bool mroute_do_assert;
-	bool mroute_do_pim;
-	bool mroute_do_wrvifwhole;
-	int mroute_reg_vif_num;
-};
-
-struct mr_vif_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	int ct;
-};
-
-struct mr_mfc_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	struct list_head *cache;
-	spinlock_t *lock;
-};
-
-struct mfc_cache_cmp_arg {
-	__be32 mfc_mcastgrp;
-	__be32 mfc_origin;
-};
-
-struct mfc_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			__be32 mfc_mcastgrp;
-			__be32 mfc_origin;
-		};
-		struct mfc_cache_cmp_arg cmparg;
-	};
-};
-
-struct ipmr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_vif_req {
-	vifi_t vifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct rta_mfc_stats {
-	__u64 mfcs_packets;
-	__u64 mfcs_bytes;
-	__u64 mfcs_wrong_if;
-};
-
-enum rpc_display_format_t {
-	RPC_DISPLAY_ADDR = 0,
-	RPC_DISPLAY_PORT = 1,
-	RPC_DISPLAY_PROTO = 2,
-	RPC_DISPLAY_HEX_ADDR = 3,
-	RPC_DISPLAY_HEX_PORT = 4,
-	RPC_DISPLAY_NETID = 5,
-	RPC_DISPLAY_MAX = 6,
-};
-
-struct ic_device {
-	struct ic_device *next;
-	struct net_device *dev;
-	short unsigned int flags;
-	short int able;
-	__be32 xid;
-};
-
-struct bootp_pkt {
-	struct iphdr iph;
-	struct udphdr udph;
-	u8 op;
-	u8 htype;
-	u8 hlen;
-	u8 hops;
-	__be32 xid;
-	__be16 secs;
-	__be16 flags;
-	__be32 client_ip;
-	__be32 your_ip;
-	__be32 server_ip;
-	__be32 relay_ip;
-	u8 hw_addr[16];
-	u8 serv_name[64];
-	u8 boot_file[128];
-	u8 exten[312];
-};
-
-struct bictcp {
-	u32 cnt;
-	u32 last_max_cwnd;
-	u32 last_cwnd;
-	u32 last_time;
-	u32 bic_origin_point;
-	u32 bic_K;
-	u32 delay_min;
-	u32 epoch_start;
-	u32 ack_cnt;
-	u32 tcp_cwnd;
-	u16 unused;
-	u8 sample_cnt;
-	u8 found;
-	u32 round_start;
-	u32 end_seq;
-	u32 last_ack;
-	u32 curr_rtt;
-};
-
-struct tls_rec {
-	struct list_head list;
-	int tx_ready;
-	int tx_flags;
-	struct sk_msg msg_plaintext;
-	struct sk_msg msg_encrypted;
-	struct scatterlist sg_aead_in[2];
-	struct scatterlist sg_aead_out[2];
-	char content_type;
-	struct scatterlist sg_content_type;
-	char aad_space[13];
-	u8 iv_data[16];
-	struct aead_request aead_req;
-	u8 aead_req_ctx[0];
-};
-
-struct tx_work {
-	struct delayed_work work;
-	struct sock *sk;
-};
-
-struct tls_sw_context_tx {
-	struct crypto_aead *aead_send;
-	struct crypto_wait async_wait;
-	struct tx_work tx_work;
-	struct tls_rec *open_rec;
-	struct list_head tx_list;
-	atomic_t encrypt_pending;
-	spinlock_t encrypt_compl_lock;
-	int async_notify;
-	u8 async_capable: 1;
-	long unsigned int tx_bitmask;
-};
-
-enum {
-	TCP_BPF_IPV4 = 0,
-	TCP_BPF_IPV6 = 1,
-	TCP_BPF_NUM_PROTS = 2,
-};
-
-enum {
-	TCP_BPF_BASE = 0,
-	TCP_BPF_TX = 1,
-	TCP_BPF_NUM_CFGS = 2,
-};
-
-enum {
-	UDP_BPF_IPV4 = 0,
-	UDP_BPF_IPV6 = 1,
-	UDP_BPF_NUM_PROTS = 2,
-};
-
-struct cipso_v4_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct cipso_v4_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-struct xfrm_policy_afinfo {
-	struct dst_ops *dst_ops;
-	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
-	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
-	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
-	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
-};
-
-struct xfrm_state_afinfo {
-	u8 family;
-	u8 proto;
-	const struct xfrm_type_offload *type_offload_esp;
-	const struct xfrm_type *type_esp;
-	const struct xfrm_type *type_ipip;
-	const struct xfrm_type *type_ipip6;
-	const struct xfrm_type *type_comp;
-	const struct xfrm_type *type_ah;
-	const struct xfrm_type *type_routing;
-	const struct xfrm_type *type_dstopts;
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*transport_finish)(struct sk_buff *, int);
-	void (*local_error)(struct sk_buff *, u32);
-};
-
-struct ip_tunnel;
-
-struct ip6_tnl;
-
-struct xfrm_tunnel_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	union {
-		struct ip_tunnel *ip4;
-		struct ip6_tnl *ip6;
-	} tunnel;
-};
-
-struct xfrm_mode_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	__be16 id;
-	__be16 frag_off;
-	u8 ihl;
-	u8 tos;
-	u8 ttl;
-	u8 protocol;
-	u8 optlen;
-	u8 flow_lbl[3];
-};
-
-struct xfrm_spi_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	unsigned int daddroff;
-	unsigned int family;
-	__be32 seq;
-};
-
-struct xfrm_input_afinfo {
-	u8 family;
-	bool is_ipip;
-	int (*callback)(struct sk_buff *, u8, int);
-};
-
-struct xfrm4_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, u32);
-	struct xfrm4_protocol *next;
-	int priority;
-};
-
-typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
-
-struct seqcount_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_mutex seqcount_mutex_t;
-
-enum {
-	XFRM_STATE_VOID = 0,
-	XFRM_STATE_ACQ = 1,
-	XFRM_STATE_VALID = 2,
-	XFRM_STATE_ERROR = 3,
-	XFRM_STATE_EXPIRED = 4,
-	XFRM_STATE_DEAD = 5,
-};
-
-struct xfrm_if;
-
-struct xfrm_if_cb {
-	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
-};
-
-struct xfrm_if_parms {
-	int link;
-	u32 if_id;
-};
-
-struct xfrm_if {
-	struct xfrm_if *next;
-	struct net_device *dev;
-	struct net *net;
-	struct xfrm_if_parms p;
-	struct gro_cells gro_cells;
-};
-
-struct xfrm_policy_walk {
-	struct xfrm_policy_walk_entry walk;
-	u8 type;
-	u32 seq;
-};
-
-struct xfrmk_spdinfo {
-	u32 incnt;
-	u32 outcnt;
-	u32 fwdcnt;
-	u32 inscnt;
-	u32 outscnt;
-	u32 fwdscnt;
-	u32 spdhcnt;
-	u32 spdhmcnt;
-};
-
-struct ip6_mh {
-	__u8 ip6mh_proto;
-	__u8 ip6mh_hdrlen;
-	__u8 ip6mh_type;
-	__u8 ip6mh_reserved;
-	__u16 ip6mh_cksum;
-	__u8 data[0];
-};
-
-struct xfrm_flo {
-	struct dst_entry *dst_orig;
-	u8 flags;
-};
-
-struct xfrm_pol_inexact_node {
-	struct rb_node node;
-	union {
-		xfrm_address_t addr;
-		struct callback_head rcu;
-	};
-	u8 prefixlen;
-	struct rb_root root;
-	struct hlist_head hhead;
-};
-
-struct xfrm_pol_inexact_key {
-	possible_net_t net;
-	u32 if_id;
-	u16 family;
-	u8 dir;
-	u8 type;
-};
-
-struct xfrm_pol_inexact_bin {
-	struct xfrm_pol_inexact_key k;
-	struct rhash_head head;
-	struct hlist_head hhead;
-	seqcount_spinlock_t count;
-	struct rb_root root_d;
-	struct rb_root root_s;
-	struct list_head inexact_bins;
-	struct callback_head rcu;
-};
-
-enum xfrm_pol_inexact_candidate_type {
-	XFRM_POL_CAND_BOTH = 0,
-	XFRM_POL_CAND_SADDR = 1,
-	XFRM_POL_CAND_DADDR = 2,
-	XFRM_POL_CAND_ANY = 3,
-	XFRM_POL_CAND_MAX = 4,
-};
-
-struct xfrm_pol_inexact_candidates {
-	struct hlist_head *res[4];
-};
-
-enum xfrm_ae_ftype_t {
-	XFRM_AE_UNSPEC = 0,
-	XFRM_AE_RTHR = 1,
-	XFRM_AE_RVAL = 2,
-	XFRM_AE_LVAL = 4,
-	XFRM_AE_ETHR = 8,
-	XFRM_AE_CR = 16,
-	XFRM_AE_CE = 32,
-	XFRM_AE_CU = 64,
-	__XFRM_AE_MAX = 65,
-};
-
-enum xfrm_nlgroups {
-	XFRMNLGRP_NONE = 0,
-	XFRMNLGRP_ACQUIRE = 1,
-	XFRMNLGRP_EXPIRE = 2,
-	XFRMNLGRP_SA = 3,
-	XFRMNLGRP_POLICY = 4,
-	XFRMNLGRP_AEVENTS = 5,
-	XFRMNLGRP_REPORT = 6,
-	XFRMNLGRP_MIGRATE = 7,
-	XFRMNLGRP_MAPPING = 8,
-	__XFRMNLGRP_MAX = 9,
-};
-
-enum {
-	XFRM_MODE_FLAG_TUNNEL = 1,
-};
-
-struct km_event {
-	union {
-		u32 hard;
-		u32 proto;
-		u32 byid;
-		u32 aevent;
-		u32 type;
-	} data;
-	u32 seq;
-	u32 portid;
-	u32 event;
-	struct net *net;
-};
-
-struct xfrm_kmaddress {
-	xfrm_address_t local;
-	xfrm_address_t remote;
-	u32 reserved;
-	u16 family;
-};
-
-struct xfrm_migrate {
-	xfrm_address_t old_daddr;
-	xfrm_address_t old_saddr;
-	xfrm_address_t new_daddr;
-	xfrm_address_t new_saddr;
-	u8 proto;
-	u8 mode;
-	u16 reserved;
-	u32 reqid;
-	u16 old_family;
-	u16 new_family;
-};
-
-struct xfrm_mgr {
-	struct list_head list;
-	int (*notify)(struct xfrm_state *, const struct km_event *);
-	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
-	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
-	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
-	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
-	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
-	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
-	bool (*is_alive)(const struct km_event *);
-};
-
-struct xfrmk_sadinfo {
-	u32 sadhcnt;
-	u32 sadhmcnt;
-	u32 sadcnt;
-};
-
-struct xfrm_translator {
-	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
-	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
-	int (*xlate_user_policy_sockptr)(u8 **, int);
-	struct module *owner;
-};
-
-struct ip_beet_phdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 padlen;
-	__u8 reserved;
-};
-
-struct ip_tunnel_6rd_parm {
-	struct in6_addr prefix;
-	__be32 relay_prefix;
-	u16 prefixlen;
-	u16 relay_prefixlen;
-};
-
-struct ip_tunnel_prl_entry;
-
-struct ip_tunnel {
-	struct ip_tunnel *next;
-	struct hlist_node hash_node;
-	struct net_device *dev;
-	struct net *net;
-	long unsigned int err_time;
-	int err_count;
-	u32 i_seqno;
-	u32 o_seqno;
-	int tun_hlen;
-	u32 index;
-	u8 erspan_ver;
-	u8 dir;
-	u16 hwid;
-	struct dst_cache dst_cache;
-	struct ip_tunnel_parm parms;
-	int mlink;
-	int encap_hlen;
-	int hlen;
-	struct ip_tunnel_encap encap;
-	struct ip_tunnel_6rd_parm ip6rd;
-	struct ip_tunnel_prl_entry *prl;
-	unsigned int prl_count;
-	unsigned int ip_tnl_net_id;
-	struct gro_cells gro_cells;
-	__u32 fwmark;
-	bool collect_md;
-	bool ignore_df;
-};
-
 struct __ip6_tnl_parm {
 	char name[16];
 	int link;
@@ -119372,6 +128757,7 @@
 struct ip6_tnl {
 	struct ip6_tnl *next;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct net *net;
 	struct __ip6_tnl_parm parms;
 	struct flowi fl;
@@ -119380,7 +128766,7 @@
 	int err_count;
 	long unsigned int err_time;
 	__u32 i_seqno;
-	__u32 o_seqno;
+	atomic_t o_seqno;
 	int hlen;
 	int tun_hlen;
 	int encap_hlen;
@@ -119388,27 +128774,6 @@
 	int mlink;
 };
 
-struct xfrm_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	union {
-		struct {
-			__u32 low;
-			__u32 hi;
-		} output;
-		struct {
-			__be32 low;
-			__be32 hi;
-		} input;
-	} seq;
-};
-
-struct ip_tunnel_prl_entry {
-	struct ip_tunnel_prl_entry *next;
-	__be32 addr;
-	u16 flags;
-	struct callback_head callback_head;
-};
-
 struct xfrm_trans_tasklet {
 	struct tasklet_struct tasklet;
 	struct sk_buff_head queue;
@@ -119423,488 +128788,6 @@
 	struct net *net;
 };
 
-struct xfrm_user_offload {
-	int ifindex;
-	__u8 flags;
-};
-
-struct espintcp_msg {
-	struct sk_buff *skb;
-	struct sk_msg skmsg;
-	int offset;
-	int len;
-};
-
-struct espintcp_ctx {
-	struct strparser strp;
-	struct sk_buff_head ike_queue;
-	struct sk_buff_head out_queue;
-	struct espintcp_msg partial;
-	void (*saved_data_ready)(struct sock *);
-	void (*saved_write_space)(struct sock *);
-	void (*saved_destruct)(struct sock *);
-	struct work_struct work;
-	bool tx_running;
-};
-
-struct unix_stream_read_state {
-	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
-	struct socket *socket;
-	struct msghdr *msg;
-	struct pipe_inode_info *pipe;
-	size_t size;
-	int flags;
-	unsigned int splice_flags;
-};
-
-struct ipv6_params {
-	__s32 disable_ipv6;
-	__s32 autoconf;
-};
-
-enum flowlabel_reflect {
-	FLOWLABEL_REFLECT_ESTABLISHED = 1,
-	FLOWLABEL_REFLECT_TCP_RESET = 2,
-	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
-};
-
-struct in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	__u32 rtmsg_type;
-	__u16 rtmsg_dst_len;
-	__u16 rtmsg_src_len;
-	__u32 rtmsg_metric;
-	long unsigned int rtmsg_info;
-	__u32 rtmsg_flags;
-	int rtmsg_ifindex;
-};
-
-struct compat_in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	u32 rtmsg_type;
-	u16 rtmsg_dst_len;
-	u16 rtmsg_src_len;
-	u32 rtmsg_metric;
-	u32 rtmsg_info;
-	u32 rtmsg_flags;
-	s32 rtmsg_ifindex;
-};
-
-struct ac6_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct ip6_fraglist_iter {
-	struct ipv6hdr *tmp_hdr;
-	struct sk_buff *frag;
-	int offset;
-	unsigned int hlen;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_frag_state {
-	u8 *prevhdr;
-	unsigned int hlen;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	int hroom;
-	int troom;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_ra_chain {
-	struct ip6_ra_chain *next;
-	struct sock *sk;
-	int sel;
-	void (*destructor)(struct sock *);
-};
-
-struct ipcm6_cookie {
-	struct sockcm_cookie sockc;
-	__s16 hlimit;
-	__s16 tclass;
-	__s8 dontfrag;
-	struct ipv6_txoptions *opt;
-	__u16 gso_size;
-};
-
-enum {
-	IFLA_INET6_UNSPEC = 0,
-	IFLA_INET6_FLAGS = 1,
-	IFLA_INET6_CONF = 2,
-	IFLA_INET6_STATS = 3,
-	IFLA_INET6_MCAST = 4,
-	IFLA_INET6_CACHEINFO = 5,
-	IFLA_INET6_ICMP6STATS = 6,
-	IFLA_INET6_TOKEN = 7,
-	IFLA_INET6_ADDR_GEN_MODE = 8,
-	__IFLA_INET6_MAX = 9,
-};
-
-enum in6_addr_gen_mode {
-	IN6_ADDR_GEN_MODE_EUI64 = 0,
-	IN6_ADDR_GEN_MODE_NONE = 1,
-	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
-	IN6_ADDR_GEN_MODE_RANDOM = 3,
-};
-
-struct ifla_cacheinfo {
-	__u32 max_reasm_len;
-	__u32 tstamp;
-	__u32 reachable_time;
-	__u32 retrans_time;
-};
-
-struct wpan_phy;
-
-struct wpan_dev_header_ops;
-
-struct wpan_dev {
-	struct wpan_phy *wpan_phy;
-	int iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	const struct wpan_dev_header_ops *header_ops;
-	struct net_device *lowpan_dev;
-	u32 identifier;
-	__le16 pan_id;
-	__le16 short_addr;
-	__le64 extended_addr;
-	atomic_t bsn;
-	atomic_t dsn;
-	u8 min_be;
-	u8 max_be;
-	u8 csma_retries;
-	s8 frame_retries;
-	bool lbt;
-	bool promiscuous_mode;
-	bool ackreq;
-};
-
-struct prefixmsg {
-	unsigned char prefix_family;
-	unsigned char prefix_pad1;
-	short unsigned int prefix_pad2;
-	int prefix_ifindex;
-	unsigned char prefix_type;
-	unsigned char prefix_len;
-	unsigned char prefix_flags;
-	unsigned char prefix_pad3;
-};
-
-enum {
-	PREFIX_UNSPEC = 0,
-	PREFIX_ADDRESS = 1,
-	PREFIX_CACHEINFO = 2,
-	__PREFIX_MAX = 3,
-};
-
-struct prefix_cacheinfo {
-	__u32 preferred_time;
-	__u32 valid_time;
-};
-
-struct in6_ifreq {
-	struct in6_addr ifr6_addr;
-	__u32 ifr6_prefixlen;
-	int ifr6_ifindex;
-};
-
-enum {
-	DEVCONF_FORWARDING = 0,
-	DEVCONF_HOPLIMIT = 1,
-	DEVCONF_MTU6 = 2,
-	DEVCONF_ACCEPT_RA = 3,
-	DEVCONF_ACCEPT_REDIRECTS = 4,
-	DEVCONF_AUTOCONF = 5,
-	DEVCONF_DAD_TRANSMITS = 6,
-	DEVCONF_RTR_SOLICITS = 7,
-	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
-	DEVCONF_RTR_SOLICIT_DELAY = 9,
-	DEVCONF_USE_TEMPADDR = 10,
-	DEVCONF_TEMP_VALID_LFT = 11,
-	DEVCONF_TEMP_PREFERED_LFT = 12,
-	DEVCONF_REGEN_MAX_RETRY = 13,
-	DEVCONF_MAX_DESYNC_FACTOR = 14,
-	DEVCONF_MAX_ADDRESSES = 15,
-	DEVCONF_FORCE_MLD_VERSION = 16,
-	DEVCONF_ACCEPT_RA_DEFRTR = 17,
-	DEVCONF_ACCEPT_RA_PINFO = 18,
-	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
-	DEVCONF_RTR_PROBE_INTERVAL = 20,
-	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
-	DEVCONF_PROXY_NDP = 22,
-	DEVCONF_OPTIMISTIC_DAD = 23,
-	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
-	DEVCONF_MC_FORWARDING = 25,
-	DEVCONF_DISABLE_IPV6 = 26,
-	DEVCONF_ACCEPT_DAD = 27,
-	DEVCONF_FORCE_TLLAO = 28,
-	DEVCONF_NDISC_NOTIFY = 29,
-	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
-	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
-	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
-	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
-	DEVCONF_USE_OPTIMISTIC = 34,
-	DEVCONF_ACCEPT_RA_MTU = 35,
-	DEVCONF_STABLE_SECRET = 36,
-	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
-	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
-	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
-	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
-	DEVCONF_DROP_UNSOLICITED_NA = 41,
-	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
-	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
-	DEVCONF_SEG6_ENABLED = 44,
-	DEVCONF_SEG6_REQUIRE_HMAC = 45,
-	DEVCONF_ENHANCED_DAD = 46,
-	DEVCONF_ADDR_GEN_MODE = 47,
-	DEVCONF_DISABLE_POLICY = 48,
-	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
-	DEVCONF_NDISC_TCLASS = 50,
-	DEVCONF_RPL_SEG_ENABLED = 51,
-	DEVCONF_MAX = 52,
-};
-
-enum {
-	INET6_IFADDR_STATE_PREDAD = 0,
-	INET6_IFADDR_STATE_DAD = 1,
-	INET6_IFADDR_STATE_POSTDAD = 2,
-	INET6_IFADDR_STATE_ERRDAD = 3,
-	INET6_IFADDR_STATE_DEAD = 4,
-};
-
-enum nl802154_cca_modes {
-	__NL802154_CCA_INVALID = 0,
-	NL802154_CCA_ENERGY = 1,
-	NL802154_CCA_CARRIER = 2,
-	NL802154_CCA_ENERGY_CARRIER = 3,
-	NL802154_CCA_ALOHA = 4,
-	NL802154_CCA_UWB_SHR = 5,
-	NL802154_CCA_UWB_MULTIPLEXED = 6,
-	__NL802154_CCA_ATTR_AFTER_LAST = 7,
-	NL802154_CCA_ATTR_MAX = 6,
-};
-
-enum nl802154_cca_opts {
-	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
-	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
-	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
-	NL802154_CCA_OPT_ATTR_MAX = 1,
-};
-
-enum nl802154_supported_bool_states {
-	NL802154_SUPPORTED_BOOL_FALSE = 0,
-	NL802154_SUPPORTED_BOOL_TRUE = 1,
-	__NL802154_SUPPORTED_BOOL_INVALD = 2,
-	NL802154_SUPPORTED_BOOL_BOTH = 3,
-	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
-	NL802154_SUPPORTED_BOOL_MAX = 3,
-};
-
-struct wpan_phy_supported {
-	u32 channels[32];
-	u32 cca_modes;
-	u32 cca_opts;
-	u32 iftypes;
-	enum nl802154_supported_bool_states lbt;
-	u8 min_minbe;
-	u8 max_minbe;
-	u8 min_maxbe;
-	u8 max_maxbe;
-	u8 min_csma_backoffs;
-	u8 max_csma_backoffs;
-	s8 min_frame_retries;
-	s8 max_frame_retries;
-	size_t tx_powers_size;
-	size_t cca_ed_levels_size;
-	const s32 *tx_powers;
-	const s32 *cca_ed_levels;
-};
-
-struct wpan_phy_cca {
-	enum nl802154_cca_modes mode;
-	enum nl802154_cca_opts opt;
-};
-
-struct wpan_phy {
-	const void *privid;
-	u32 flags;
-	u8 current_channel;
-	u8 current_page;
-	struct wpan_phy_supported supported;
-	s32 transmit_power;
-	struct wpan_phy_cca cca;
-	__le64 perm_extended_addr;
-	s32 cca_ed_level;
-	u8 symbol_duration;
-	u16 lifs_period;
-	u16 sifs_period;
-	struct device dev;
-	possible_net_t _net;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct ieee802154_addr {
-	u8 mode;
-	__le16 pan_id;
-	union {
-		__le16 short_addr;
-		__le64 extended_addr;
-	};
-};
-
-struct wpan_dev_header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
-};
-
-union fwnet_hwaddr {
-	u8 u[16];
-	struct {
-		__be64 uniq_id;
-		u8 max_rec;
-		u8 sspd;
-		__be16 fifo_hi;
-		__be32 fifo_lo;
-	} uc;
-};
-
-struct in6_validator_info {
-	struct in6_addr i6vi_addr;
-	struct inet6_dev *i6vi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct ifa6_config {
-	const struct in6_addr *pfx;
-	unsigned int plen;
-	const struct in6_addr *peer_pfx;
-	u32 rt_priority;
-	u32 ifa_flags;
-	u32 preferred_lft;
-	u32 valid_lft;
-	u16 scope;
-};
-
-enum cleanup_prefix_rt_t {
-	CLEANUP_PREFIX_RT_NOP = 0,
-	CLEANUP_PREFIX_RT_DEL = 1,
-	CLEANUP_PREFIX_RT_EXPIRE = 2,
-};
-
-enum {
-	IPV6_SADDR_RULE_INIT = 0,
-	IPV6_SADDR_RULE_LOCAL = 1,
-	IPV6_SADDR_RULE_SCOPE = 2,
-	IPV6_SADDR_RULE_PREFERRED = 3,
-	IPV6_SADDR_RULE_OIF = 4,
-	IPV6_SADDR_RULE_LABEL = 5,
-	IPV6_SADDR_RULE_PRIVACY = 6,
-	IPV6_SADDR_RULE_ORCHID = 7,
-	IPV6_SADDR_RULE_PREFIX = 8,
-	IPV6_SADDR_RULE_MAX = 9,
-};
-
-struct ipv6_saddr_score {
-	int rule;
-	int addr_type;
-	struct inet6_ifaddr *ifa;
-	long unsigned int scorebits[1];
-	int scopedist;
-	int matchlen;
-};
-
-struct ipv6_saddr_dst {
-	const struct in6_addr *addr;
-	int ifindex;
-	int scope;
-	int label;
-	unsigned int prefs;
-};
-
-struct if6_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	int offset;
-};
-
-enum addr_type_t {
-	UNICAST_ADDR = 0,
-	MULTICAST_ADDR = 1,
-	ANYCAST_ADDR = 2,
-};
-
-struct inet6_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-	enum addr_type_t type;
-};
-
-enum {
-	DAD_PROCESS = 0,
-	DAD_BEGIN = 1,
-	DAD_ABORT = 2,
-};
-
-struct ifaddrlblmsg {
-	__u8 ifal_family;
-	__u8 __ifal_reserved;
-	__u8 ifal_prefixlen;
-	__u8 ifal_flags;
-	__u32 ifal_index;
-	__u32 ifal_seq;
-};
-
-enum {
-	IFAL_ADDRESS = 1,
-	IFAL_LABEL = 2,
-	__IFAL_MAX = 3,
-};
-
-struct ip6addrlbl_entry {
-	struct in6_addr prefix;
-	int prefixlen;
-	int ifindex;
-	int addrtype;
-	u32 label;
-	struct hlist_node list;
-	struct callback_head rcu;
-};
-
-struct ip6addrlbl_init_table {
-	const struct in6_addr *prefix;
-	int prefixlen;
-	u32 label;
-};
-
-struct rd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	struct in6_addr dest;
-	__u8 opt[0];
-};
-
-struct fib6_gc_args {
-	int timeout;
-	int more;
-};
-
 struct rt6_exception {
 	struct hlist_node hlist;
 	struct rt6_info *rt6i;
@@ -119912,24 +128795,6 @@
 	struct callback_head rcu;
 };
 
-struct route_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved_l: 3;
-	__u8 route_pref: 2;
-	__u8 reserved_h: 3;
-	__be32 lifetime;
-	__u8 prefix[0];
-};
-
-struct rt6_rtnl_dump_arg {
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct net *net;
-	struct fib_dump_filter filter;
-};
-
 struct netevent_redirect {
 	struct dst_entry *old;
 	struct dst_entry *new;
@@ -119952,21 +128817,19 @@
 	u16 dport;
 	u8 proto;
 	u8 rt_type;
-	u32 __data_loc_name;
+	char name[16];
 	__u8 gw[16];
 	char __data[0];
 };
 
-struct trace_event_data_offsets_fib6_table_lookup {
-	u32 name;
-};
+struct trace_event_data_offsets_fib6_table_lookup {};
 
 typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
 
 enum rt6_nud_state {
-	RT6_NUD_FAIL_HARD = 4294967293,
-	RT6_NUD_FAIL_PROBE = 4294967294,
-	RT6_NUD_FAIL_DO_RR = 4294967295,
+	RT6_NUD_FAIL_HARD = -3,
+	RT6_NUD_FAIL_PROBE = -2,
+	RT6_NUD_FAIL_DO_RR = -1,
 	RT6_NUD_SUCCEED = 1,
 };
 
@@ -119978,12 +128841,6 @@
 	struct fib6_nh *nh;
 };
 
-struct __rt6_probe_work {
-	struct work_struct work;
-	struct in6_addr target;
-	struct net_device *dev;
-};
-
 struct fib6_nh_frl_arg {
 	u32 flags;
 	int oif;
@@ -120060,394 +128917,6 @@
 	unsigned int count;
 };
 
-enum fib6_walk_state {
-	FWS_S = 0,
-	FWS_L = 1,
-	FWS_R = 2,
-	FWS_C = 3,
-	FWS_U = 4,
-};
-
-struct fib6_walker {
-	struct list_head lh;
-	struct fib6_node *root;
-	struct fib6_node *node;
-	struct fib6_info *leaf;
-	enum fib6_walk_state state;
-	unsigned int skip;
-	unsigned int count;
-	unsigned int skip_in_node;
-	int (*func)(struct fib6_walker *);
-	void *args;
-};
-
-struct fib6_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct fib6_info *rt;
-	unsigned int nsiblings;
-};
-
-struct ipv6_route_iter {
-	struct seq_net_private p;
-	struct fib6_walker w;
-	loff_t skip;
-	struct fib6_table *tbl;
-	int sernum;
-};
-
-struct bpf_iter__ipv6_route {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct fib6_info *rt;
-	};
-};
-
-struct fib6_cleaner {
-	struct fib6_walker w;
-	struct net *net;
-	int (*func)(struct fib6_info *, void *);
-	int sernum;
-	void *arg;
-	bool skip_notify;
-};
-
-enum {
-	FIB6_NO_SERNUM_CHANGE = 0,
-};
-
-struct fib6_dump_arg {
-	struct net *net;
-	struct notifier_block *nb;
-	struct netlink_ext_ack *extack;
-};
-
-struct fib6_nh_pcpu_arg {
-	struct fib6_info *from;
-	const struct fib6_table *table;
-};
-
-struct lookup_args {
-	int offset;
-	const struct in6_addr *addr;
-};
-
-struct ipv6_mreq {
-	struct in6_addr ipv6mr_multiaddr;
-	int ipv6mr_ifindex;
-};
-
-struct in6_flowlabel_req {
-	struct in6_addr flr_dst;
-	__be32 flr_label;
-	__u8 flr_action;
-	__u8 flr_share;
-	__u16 flr_flags;
-	__u16 flr_expires;
-	__u16 flr_linger;
-	__u32 __flr_pad;
-};
-
-struct ip6_mtuinfo {
-	struct sockaddr_in6 ip6m_addr;
-	__u32 ip6m_mtu;
-};
-
-struct nduseroptmsg {
-	unsigned char nduseropt_family;
-	unsigned char nduseropt_pad1;
-	short unsigned int nduseropt_opts_len;
-	int nduseropt_ifindex;
-	__u8 nduseropt_icmp_type;
-	__u8 nduseropt_icmp_code;
-	short unsigned int nduseropt_pad2;
-	unsigned int nduseropt_pad3;
-};
-
-enum {
-	NDUSEROPT_UNSPEC = 0,
-	NDUSEROPT_SRCADDR = 1,
-	__NDUSEROPT_MAX = 2,
-};
-
-struct nd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	__u8 opt[0];
-};
-
-struct rs_msg {
-	struct icmp6hdr icmph;
-	__u8 opt[0];
-};
-
-struct ra_msg {
-	struct icmp6hdr icmph;
-	__be32 reachable_time;
-	__be32 retrans_timer;
-};
-
-struct icmp6_filter {
-	__u32 data[8];
-};
-
-struct raw6_sock {
-	struct inet_sock inet;
-	__u32 checksum;
-	__u32 offset;
-	struct icmp6_filter filter;
-	__u32 ip6mr_table;
-	struct ipv6_pinfo inet6;
-};
-
-typedef int mh_filter_t(struct sock *, struct sk_buff *);
-
-struct raw6_frag_vec {
-	struct msghdr *msg;
-	int hlen;
-	char c[4];
-};
-
-typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *);
-
-struct ipv6_destopt_hao {
-	__u8 type;
-	__u8 length;
-	struct in6_addr addr;
-} __attribute__((packed));
-
-struct icmpv6_msg {
-	struct sk_buff *skb;
-	int offset;
-	uint8_t type;
-};
-
-struct icmp6_err {
-	int err;
-	int fatal;
-};
-
-struct mld_msg {
-	struct icmp6hdr mld_hdr;
-	struct in6_addr mld_mca;
-};
-
-struct mld2_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	struct in6_addr grec_mca;
-	struct in6_addr grec_src[0];
-};
-
-struct mld2_report {
-	struct icmp6hdr mld2r_hdr;
-	struct mld2_grec mld2r_grec[0];
-};
-
-struct mld2_query {
-	struct icmp6hdr mld2q_hdr;
-	struct in6_addr mld2q_mca;
-	__u8 mld2q_qrv: 3;
-	__u8 mld2q_suppress: 1;
-	__u8 mld2q_resv2: 4;
-	__u8 mld2q_qqic;
-	__be16 mld2q_nsrcs;
-	struct in6_addr mld2q_srcs[0];
-};
-
-struct igmp6_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct igmp6_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *im;
-};
-
-enum ip6_defrag_users {
-	IP6_DEFRAG_LOCAL_DELIVER = 0,
-	IP6_DEFRAG_CONNTRACK_IN = 1,
-	__IP6_DEFRAG_CONNTRACK_IN = 65536,
-	IP6_DEFRAG_CONNTRACK_OUT = 65537,
-	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
-	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
-	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
-};
-
-struct frag_queue {
-	struct inet_frag_queue q;
-	int iif;
-	__u16 nhoffset;
-	u8 ecn;
-};
-
-struct tcp6_pseudohdr {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	__be32 len;
-	__be32 protocol;
-};
-
-struct rt0_hdr {
-	struct ipv6_rt_hdr rt_hdr;
-	__u32 reserved;
-	struct in6_addr addr[0];
-};
-
-struct ipv6_rpl_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u32 cmpre: 4;
-	__u32 cmpri: 4;
-	__u32 reserved: 4;
-	__u32 pad: 4;
-	__u32 reserved1: 16;
-	union {
-		struct in6_addr addr[0];
-		__u8 data[0];
-	} segments;
-};
-
-struct tlvtype_proc {
-	int type;
-	bool (*func)(struct sk_buff *, int);
-};
-
-struct ip6fl_iter_state {
-	struct seq_net_private p;
-	struct pid_namespace *pid_ns;
-	int bucket;
-};
-
-struct sr6_tlv {
-	__u8 type;
-	__u8 len;
-	__u8 data[0];
-};
-
-enum {
-	SEG6_ATTR_UNSPEC = 0,
-	SEG6_ATTR_DST = 1,
-	SEG6_ATTR_DSTLEN = 2,
-	SEG6_ATTR_HMACKEYID = 3,
-	SEG6_ATTR_SECRET = 4,
-	SEG6_ATTR_SECRETLEN = 5,
-	SEG6_ATTR_ALGID = 6,
-	SEG6_ATTR_HMACINFO = 7,
-	__SEG6_ATTR_MAX = 8,
-};
-
-enum {
-	SEG6_CMD_UNSPEC = 0,
-	SEG6_CMD_SETHMAC = 1,
-	SEG6_CMD_DUMPHMAC = 2,
-	SEG6_CMD_SET_TUNSRC = 3,
-	SEG6_CMD_GET_TUNSRC = 4,
-	__SEG6_CMD_MAX = 5,
-};
-
-typedef short unsigned int mifi_t;
-
-typedef __u32 if_mask;
-
-struct if_set {
-	if_mask ifs_bits[8];
-};
-
-struct mif6ctl {
-	mifi_t mif6c_mifi;
-	unsigned char mif6c_flags;
-	unsigned char vifc_threshold;
-	__u16 mif6c_pifi;
-	unsigned int vifc_rate_limit;
-};
-
-struct mf6cctl {
-	struct sockaddr_in6 mf6cc_origin;
-	struct sockaddr_in6 mf6cc_mcastgrp;
-	mifi_t mf6cc_parent;
-	struct if_set mf6cc_ifset;
-};
-
-struct sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_mif_req6 {
-	mifi_t mifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct mrt6msg {
-	__u8 im6_mbz;
-	__u8 im6_msgtype;
-	__u16 im6_mif;
-	__u32 im6_pad;
-	struct in6_addr im6_src;
-	struct in6_addr im6_dst;
-};
-
-enum {
-	IP6MRA_CREPORT_UNSPEC = 0,
-	IP6MRA_CREPORT_MSGTYPE = 1,
-	IP6MRA_CREPORT_MIF_ID = 2,
-	IP6MRA_CREPORT_SRC_ADDR = 3,
-	IP6MRA_CREPORT_DST_ADDR = 4,
-	IP6MRA_CREPORT_PKT = 5,
-	__IP6MRA_CREPORT_MAX = 6,
-};
-
-struct mfc6_cache_cmp_arg {
-	struct in6_addr mf6c_mcastgrp;
-	struct in6_addr mf6c_origin;
-};
-
-struct mfc6_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			struct in6_addr mf6c_mcastgrp;
-			struct in6_addr mf6c_origin;
-		};
-		struct mfc6_cache_cmp_arg cmparg;
-	};
-};
-
-struct ip6mr_result {
-	struct mr_table *mrt;
-};
-
-struct compat_sioc_sg_req6 {
-	struct sockaddr_in6 src;
-	struct sockaddr_in6 grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_mif_req6 {
-	mifi_t mifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
 struct xfrm6_protocol {
 	int (*handler)(struct sk_buff *);
 	int (*input_handler)(struct sk_buff *, int, __be32, int);
@@ -120457,2987 +128926,369 @@
 	int priority;
 };
 
-struct br_input_skb_cb {
-	struct net_device *brdev;
-	u16 frag_max_size;
-	u8 igmp;
-	u8 mrouters_only: 1;
-	u8 proxyarp_replied: 1;
-	u8 src_port_isolated: 1;
-	u8 vlan_filtered: 1;
-	u8 br_netfilter_broute: 1;
-	int offload_fwd_mark;
+struct sockaddr_pkt {
+	short unsigned int spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
 };
 
-struct nf_bridge_frag_data;
-
-typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
-
-struct fib6_rule {
-	struct fib_rule common;
-	struct rt6key src;
-	struct rt6key dst;
-	u8 tclass;
+struct sockaddr_ll {
+	short unsigned int sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	short unsigned int sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
 };
 
-struct calipso_doi;
-
-struct netlbl_calipso_ops {
-	int (*doi_add)(struct calipso_doi *, struct netlbl_audit *);
-	void (*doi_free)(struct calipso_doi *);
-	int (*doi_remove)(u32, struct netlbl_audit *);
-	struct calipso_doi * (*doi_getdef)(u32);
-	void (*doi_putdef)(struct calipso_doi *);
-	int (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);
-	int (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);
-	int (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*sock_delattr)(struct sock *);
-	int (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*req_delattr)(struct request_sock *);
-	int (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);
-	unsigned char * (*skbuff_optptr)(const struct sk_buff *);
-	int (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	int (*skbuff_delattr)(struct sk_buff *);
-	void (*cache_invalidate)();
-	int (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
 };
 
-struct calipso_doi {
-	u32 doi;
-	u32 type;
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
 };
 
-struct calipso_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
 };
 
-struct calipso_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
 };
 
-enum {
-	SEG6_IPTUNNEL_UNSPEC = 0,
-	SEG6_IPTUNNEL_SRH = 1,
-	__SEG6_IPTUNNEL_MAX = 2,
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
 };
 
-struct seg6_iptunnel_encap {
-	int mode;
-	struct ipv6_sr_hdr srh[0];
+struct tpacket_hdr {
+	long unsigned int tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	short unsigned int tp_mac;
+	short unsigned int tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
 };
 
-enum {
-	SEG6_IPTUN_MODE_INLINE = 0,
-	SEG6_IPTUN_MODE_ENCAP = 1,
-	SEG6_IPTUN_MODE_L2ENCAP = 2,
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
 };
 
-struct seg6_lwt {
-	struct dst_cache cache;
-	struct seg6_iptunnel_encap tuninfo[0];
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
 };
 
-enum {
-	SEG6_LOCAL_UNSPEC = 0,
-	SEG6_LOCAL_ACTION = 1,
-	SEG6_LOCAL_SRH = 2,
-	SEG6_LOCAL_TABLE = 3,
-	SEG6_LOCAL_NH4 = 4,
-	SEG6_LOCAL_NH6 = 5,
-	SEG6_LOCAL_IIF = 6,
-	SEG6_LOCAL_OIF = 7,
-	SEG6_LOCAL_BPF = 8,
-	__SEG6_LOCAL_MAX = 9,
-};
-
-enum {
-	SEG6_LOCAL_BPF_PROG_UNSPEC = 0,
-	SEG6_LOCAL_BPF_PROG = 1,
-	SEG6_LOCAL_BPF_PROG_NAME = 2,
-	__SEG6_LOCAL_BPF_PROG_MAX = 3,
-};
-
-struct seg6_local_lwt;
-
-struct seg6_action_desc {
-	int action;
-	long unsigned int attrs;
-	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
-	int static_headroom;
-};
-
-struct seg6_local_lwt {
-	int action;
-	struct ipv6_sr_hdr *srh;
-	int table;
-	struct in_addr nh4;
-	struct in6_addr nh6;
-	int iif;
-	int oif;
-	struct bpf_lwt_prog bpf;
-	int headroom;
-	struct seg6_action_desc *desc;
-};
-
-struct seg6_action_param {
-	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
-	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
-	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
-};
-
-enum {
-	RPL_IPTUNNEL_UNSPEC = 0,
-	RPL_IPTUNNEL_SRH = 1,
-	__RPL_IPTUNNEL_MAX = 2,
-};
-
-struct rpl_iptunnel_encap {
-	struct ipv6_rpl_sr_hdr srh[0];
-};
-
-struct rpl_lwt {
-	struct dst_cache cache;
-	struct rpl_iptunnel_encap tuninfo;
-};
-
-enum {
-	IP6_FH_F_FRAG = 1,
-	IP6_FH_F_AUTH = 2,
-	IP6_FH_F_SKIP_RH = 4,
-};
-
-struct _strp_msg {
-	struct strp_msg strp;
-	int accum_len;
-};
-
-struct vlan_group {
-	unsigned int nr_vlan_devs;
-	struct hlist_node hlist;
-	struct net_device **vlan_devices_arrays[16];
-};
-
-struct vlan_info {
-	struct net_device *real_dev;
-	struct vlan_group grp;
-	struct list_head vid_list;
-	unsigned int nr_vids;
-	struct callback_head rcu;
-};
-
-enum vlan_flags {
-	VLAN_FLAG_REORDER_HDR = 1,
-	VLAN_FLAG_GVRP = 2,
-	VLAN_FLAG_LOOSE_BINDING = 4,
-	VLAN_FLAG_MVRP = 8,
-	VLAN_FLAG_BRIDGE_BINDING = 16,
-};
-
-struct vlan_priority_tci_mapping {
-	u32 priority;
-	u16 vlan_qos;
-	struct vlan_priority_tci_mapping *next;
-};
-
-struct vlan_dev_priv {
-	unsigned int nr_ingress_mappings;
-	u32 ingress_priority_map[8];
-	unsigned int nr_egress_mappings;
-	struct vlan_priority_tci_mapping *egress_priority_map[16];
-	__be16 vlan_proto;
-	u16 vlan_id;
-	u16 flags;
-	struct net_device *real_dev;
-	unsigned char real_dev_addr[6];
-	struct proc_dir_entry *dent;
-	struct vlan_pcpu_stats *vlan_pcpu_stats;
-	struct netpoll *netpoll;
-};
-
-enum vlan_protos {
-	VLAN_PROTO_8021Q = 0,
-	VLAN_PROTO_8021AD = 1,
-	VLAN_PROTO_NUM = 2,
-};
-
-struct vlan_vid_info {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-	int refcount;
-};
-
-enum nl80211_iftype {
-	NL80211_IFTYPE_UNSPECIFIED = 0,
-	NL80211_IFTYPE_ADHOC = 1,
-	NL80211_IFTYPE_STATION = 2,
-	NL80211_IFTYPE_AP = 3,
-	NL80211_IFTYPE_AP_VLAN = 4,
-	NL80211_IFTYPE_WDS = 5,
-	NL80211_IFTYPE_MONITOR = 6,
-	NL80211_IFTYPE_MESH_POINT = 7,
-	NL80211_IFTYPE_P2P_CLIENT = 8,
-	NL80211_IFTYPE_P2P_GO = 9,
-	NL80211_IFTYPE_P2P_DEVICE = 10,
-	NL80211_IFTYPE_OCB = 11,
-	NL80211_IFTYPE_NAN = 12,
-	NUM_NL80211_IFTYPES = 13,
-	NL80211_IFTYPE_MAX = 12,
-};
-
-struct cfg80211_conn;
-
-struct cfg80211_cached_keys;
-
-enum ieee80211_bss_type {
-	IEEE80211_BSS_TYPE_ESS = 0,
-	IEEE80211_BSS_TYPE_PBSS = 1,
-	IEEE80211_BSS_TYPE_IBSS = 2,
-	IEEE80211_BSS_TYPE_MBSS = 3,
-	IEEE80211_BSS_TYPE_ANY = 4,
-};
-
-struct cfg80211_internal_bss;
-
-enum nl80211_chan_width {
-	NL80211_CHAN_WIDTH_20_NOHT = 0,
-	NL80211_CHAN_WIDTH_20 = 1,
-	NL80211_CHAN_WIDTH_40 = 2,
-	NL80211_CHAN_WIDTH_80 = 3,
-	NL80211_CHAN_WIDTH_80P80 = 4,
-	NL80211_CHAN_WIDTH_160 = 5,
-	NL80211_CHAN_WIDTH_5 = 6,
-	NL80211_CHAN_WIDTH_10 = 7,
-	NL80211_CHAN_WIDTH_1 = 8,
-	NL80211_CHAN_WIDTH_2 = 9,
-	NL80211_CHAN_WIDTH_4 = 10,
-	NL80211_CHAN_WIDTH_8 = 11,
-	NL80211_CHAN_WIDTH_16 = 12,
-};
-
-enum ieee80211_edmg_bw_config {
-	IEEE80211_EDMG_BW_CONFIG_4 = 4,
-	IEEE80211_EDMG_BW_CONFIG_5 = 5,
-	IEEE80211_EDMG_BW_CONFIG_6 = 6,
-	IEEE80211_EDMG_BW_CONFIG_7 = 7,
-	IEEE80211_EDMG_BW_CONFIG_8 = 8,
-	IEEE80211_EDMG_BW_CONFIG_9 = 9,
-	IEEE80211_EDMG_BW_CONFIG_10 = 10,
-	IEEE80211_EDMG_BW_CONFIG_11 = 11,
-	IEEE80211_EDMG_BW_CONFIG_12 = 12,
-	IEEE80211_EDMG_BW_CONFIG_13 = 13,
-	IEEE80211_EDMG_BW_CONFIG_14 = 14,
-	IEEE80211_EDMG_BW_CONFIG_15 = 15,
-};
-
-struct ieee80211_edmg {
-	u8 channels;
-	enum ieee80211_edmg_bw_config bw_config;
-};
-
-struct ieee80211_channel;
-
-struct cfg80211_chan_def {
-	struct ieee80211_channel *chan;
-	enum nl80211_chan_width width;
-	u32 center_freq1;
-	u32 center_freq2;
-	struct ieee80211_edmg edmg;
-	u16 freq1_offset;
-};
-
-struct ieee80211_mcs_info {
-	u8 rx_mask[10];
-	__le16 rx_highest;
-	u8 tx_params;
-	u8 reserved[3];
-};
-
-struct ieee80211_ht_cap {
-	__le16 cap_info;
-	u8 ampdu_params_info;
-	struct ieee80211_mcs_info mcs;
-	__le16 extended_ht_cap_info;
-	__le32 tx_BF_cap_info;
-	u8 antenna_selection_info;
-} __attribute__((packed));
-
-struct key_params;
-
-struct cfg80211_ibss_params {
-	const u8 *ssid;
-	const u8 *bssid;
-	struct cfg80211_chan_def chandef;
-	const u8 *ie;
-	u8 ssid_len;
-	u8 ie_len;
-	u16 beacon_interval;
-	u32 basic_rates;
-	bool channel_fixed;
-	bool privacy;
-	bool control_port;
-	bool control_port_over_nl80211;
-	bool userspace_handles_dfs;
-	int: 24;
-	int mcast_rate[5];
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	int: 32;
-} __attribute__((packed));
-
-enum nl80211_auth_type {
-	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
-	NL80211_AUTHTYPE_SHARED_KEY = 1,
-	NL80211_AUTHTYPE_FT = 2,
-	NL80211_AUTHTYPE_NETWORK_EAP = 3,
-	NL80211_AUTHTYPE_SAE = 4,
-	NL80211_AUTHTYPE_FILS_SK = 5,
-	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
-	NL80211_AUTHTYPE_FILS_PK = 7,
-	__NL80211_AUTHTYPE_NUM = 8,
-	NL80211_AUTHTYPE_MAX = 7,
-	NL80211_AUTHTYPE_AUTOMATIC = 8,
-};
-
-enum nl80211_mfp {
-	NL80211_MFP_NO = 0,
-	NL80211_MFP_REQUIRED = 1,
-	NL80211_MFP_OPTIONAL = 2,
-};
-
-struct cfg80211_crypto_settings {
-	u32 wpa_versions;
-	u32 cipher_group;
-	int n_ciphers_pairwise;
-	u32 ciphers_pairwise[5];
-	int n_akm_suites;
-	u32 akm_suites[2];
-	bool control_port;
-	__be16 control_port_ethertype;
-	bool control_port_no_encrypt;
-	bool control_port_over_nl80211;
-	bool control_port_no_preauth;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	const u8 *psk;
-	const u8 *sae_pwd;
-	u8 sae_pwd_len;
-};
-
-struct ieee80211_vht_mcs_info {
-	__le16 rx_mcs_map;
-	__le16 rx_highest;
-	__le16 tx_mcs_map;
-	__le16 tx_highest;
-};
-
-struct ieee80211_vht_cap {
-	__le32 vht_cap_info;
-	struct ieee80211_vht_mcs_info supp_mcs;
-};
-
-enum nl80211_bss_select_attr {
-	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
-	NL80211_BSS_SELECT_ATTR_RSSI = 1,
-	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
-	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
-	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
-	NL80211_BSS_SELECT_ATTR_MAX = 3,
-};
-
-enum nl80211_band {
-	NL80211_BAND_2GHZ = 0,
-	NL80211_BAND_5GHZ = 1,
-	NL80211_BAND_60GHZ = 2,
-	NL80211_BAND_6GHZ = 3,
-	NL80211_BAND_S1GHZ = 4,
-	NUM_NL80211_BANDS = 5,
-};
-
-struct cfg80211_bss_select_adjust {
-	enum nl80211_band band;
-	s8 delta;
-};
-
-struct cfg80211_bss_selection {
-	enum nl80211_bss_select_attr behaviour;
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
 	union {
-		enum nl80211_band band_pref;
-		struct cfg80211_bss_select_adjust adjust;
-	} param;
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
 };
 
-struct cfg80211_connect_params {
-	struct ieee80211_channel *channel;
-	struct ieee80211_channel *channel_hint;
-	const u8 *bssid;
-	const u8 *bssid_hint;
-	const u8 *ssid;
-	size_t ssid_len;
-	enum nl80211_auth_type auth_type;
-	int: 32;
-	const u8 *ie;
-	size_t ie_len;
-	bool privacy;
-	int: 24;
-	enum nl80211_mfp mfp;
-	struct cfg80211_crypto_settings crypto;
-	const u8 *key;
-	u8 key_len;
-	u8 key_idx;
-	short: 16;
-	u32 flags;
-	int bg_scan_period;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	bool pbss;
-	int: 24;
-	struct cfg80211_bss_selection bss_select;
-	const u8 *prev_bssid;
-	const u8 *fils_erp_username;
-	size_t fils_erp_username_len;
-	const u8 *fils_erp_realm;
-	size_t fils_erp_realm_len;
-	u16 fils_erp_next_seq_num;
-	long: 48;
-	const u8 *fils_erp_rrk;
-	size_t fils_erp_rrk_len;
-	bool want_1x;
-	int: 24;
-	struct ieee80211_edmg edmg;
-	int: 32;
-} __attribute__((packed));
-
-struct cfg80211_cqm_config;
-
-struct wiphy;
-
-struct wireless_dev {
-	struct wiphy *wiphy;
-	enum nl80211_iftype iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	u32 identifier;
-	struct list_head mgmt_registrations;
-	spinlock_t mgmt_registrations_lock;
-	u8 mgmt_registrations_need_update: 1;
-	struct mutex mtx;
-	bool use_4addr;
-	bool is_running;
-	u8 address[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 mesh_id_len;
-	u8 mesh_id_up_len;
-	struct cfg80211_conn *conn;
-	struct cfg80211_cached_keys *connect_keys;
-	enum ieee80211_bss_type conn_bss_type;
-	u32 conn_owner_nlportid;
-	struct work_struct disconnect_wk;
-	u8 disconnect_bssid[6];
-	struct list_head event_list;
-	spinlock_t event_lock;
-	struct cfg80211_internal_bss *current_bss;
-	struct cfg80211_chan_def preset_chandef;
-	struct cfg80211_chan_def chandef;
-	bool ibss_fixed;
-	bool ibss_dfs_possible;
-	bool ps;
-	int ps_timeout;
-	int beacon_interval;
-	u32 ap_unexpected_nlportid;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	bool cac_started;
-	long unsigned int cac_start_time;
-	unsigned int cac_time_ms;
-	struct {
-		struct cfg80211_ibss_params ibss;
-		struct cfg80211_connect_params connect;
-		struct cfg80211_cached_keys *keys;
-		const u8 *ie;
-		size_t ie_len;
-		u8 bssid[6];
-		u8 prev_bssid[6];
-		u8 ssid[32];
-		s8 default_key;
-		s8 default_mgmt_key;
-		bool prev_bssid_valid;
-	} wext;
-	struct cfg80211_cqm_config *cqm_config;
-	struct list_head pmsr_list;
-	spinlock_t pmsr_lock;
-	struct work_struct pmsr_free_wk;
-	long unsigned int unprot_beacon_reported;
-};
-
-struct iw_encode_ext {
-	__u32 ext_flags;
-	__u8 tx_seq[8];
-	__u8 rx_seq[8];
-	struct sockaddr addr;
-	__u16 alg;
-	__u16 key_len;
-	__u8 key[0];
-};
-
-struct iwreq {
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
 	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union iwreq_data u;
-};
-
-struct iw_event {
-	__u16 len;
-	__u16 cmd;
-	union iwreq_data u;
-};
-
-struct compat_iw_point {
-	compat_caddr_t pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct __compat_iw_event {
-	__u16 len;
-	__u16 cmd;
-	compat_caddr_t pointer;
-};
-
-enum nl80211_reg_initiator {
-	NL80211_REGDOM_SET_BY_CORE = 0,
-	NL80211_REGDOM_SET_BY_USER = 1,
-	NL80211_REGDOM_SET_BY_DRIVER = 2,
-	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
-};
-
-enum nl80211_dfs_regions {
-	NL80211_DFS_UNSET = 0,
-	NL80211_DFS_FCC = 1,
-	NL80211_DFS_ETSI = 2,
-	NL80211_DFS_JP = 3,
-};
-
-enum nl80211_user_reg_hint_type {
-	NL80211_USER_REG_HINT_USER = 0,
-	NL80211_USER_REG_HINT_CELL_BASE = 1,
-	NL80211_USER_REG_HINT_INDOOR = 2,
-};
-
-enum nl80211_mntr_flags {
-	__NL80211_MNTR_FLAG_INVALID = 0,
-	NL80211_MNTR_FLAG_FCSFAIL = 1,
-	NL80211_MNTR_FLAG_PLCPFAIL = 2,
-	NL80211_MNTR_FLAG_CONTROL = 3,
-	NL80211_MNTR_FLAG_OTHER_BSS = 4,
-	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
-	NL80211_MNTR_FLAG_ACTIVE = 6,
-	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
-	NL80211_MNTR_FLAG_MAX = 6,
-};
-
-enum nl80211_key_mode {
-	NL80211_KEY_RX_TX = 0,
-	NL80211_KEY_NO_TX = 1,
-	NL80211_KEY_SET_TX = 2,
-};
-
-enum nl80211_bss_scan_width {
-	NL80211_BSS_CHAN_WIDTH_20 = 0,
-	NL80211_BSS_CHAN_WIDTH_10 = 1,
-	NL80211_BSS_CHAN_WIDTH_5 = 2,
-	NL80211_BSS_CHAN_WIDTH_1 = 3,
-	NL80211_BSS_CHAN_WIDTH_2 = 4,
-};
-
-struct nl80211_wowlan_tcp_data_seq {
-	__u32 start;
-	__u32 offset;
-	__u32 len;
-};
-
-struct nl80211_wowlan_tcp_data_token {
-	__u32 offset;
-	__u32 len;
-	__u8 token_stream[0];
-};
-
-struct nl80211_wowlan_tcp_data_token_feature {
-	__u32 min_len;
-	__u32 max_len;
-	__u32 bufsize;
-};
-
-enum nl80211_ext_feature_index {
-	NL80211_EXT_FEATURE_VHT_IBSS = 0,
-	NL80211_EXT_FEATURE_RRM = 1,
-	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
-	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
-	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
-	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
-	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
-	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
-	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
-	NL80211_EXT_FEATURE_FILS_STA = 9,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
-	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
-	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
-	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
-	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
-	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
-	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
-	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
-	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
-	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
-	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
-	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_TXQS = 28,
-	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
-	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
-	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
-	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
-	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
-	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
-	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
-	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
-	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
-	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
-	NL80211_EXT_FEATURE_AQL = 40,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
-	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
-	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
-	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
-	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
-	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
-	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
-	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
-	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
-	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
-	NUM_NL80211_EXT_FEATURES = 54,
-	MAX_NL80211_EXT_FEATURES = 53,
-};
-
-enum nl80211_dfs_state {
-	NL80211_DFS_USABLE = 0,
-	NL80211_DFS_UNAVAILABLE = 1,
-	NL80211_DFS_AVAILABLE = 2,
-};
-
-struct nl80211_vendor_cmd_info {
-	__u32 vendor_id;
-	__u32 subcmd;
-};
-
-struct ieee80211_he_cap_elem {
-	u8 mac_cap_info[6];
-	u8 phy_cap_info[11];
-};
-
-struct ieee80211_he_mcs_nss_supp {
-	__le16 rx_mcs_80;
-	__le16 tx_mcs_80;
-	__le16 rx_mcs_160;
-	__le16 tx_mcs_160;
-	__le16 rx_mcs_80p80;
-	__le16 tx_mcs_80p80;
-};
-
-struct ieee80211_he_6ghz_capa {
-	__le16 capa;
-};
-
-enum environment_cap {
-	ENVIRON_ANY = 0,
-	ENVIRON_INDOOR = 1,
-	ENVIRON_OUTDOOR = 2,
-};
-
-struct regulatory_request {
-	struct callback_head callback_head;
-	int wiphy_idx;
-	enum nl80211_reg_initiator initiator;
-	enum nl80211_user_reg_hint_type user_reg_hint_type;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	bool intersect;
-	bool processed;
-	enum environment_cap country_ie_env;
-	struct list_head list;
-};
-
-struct ieee80211_freq_range {
-	u32 start_freq_khz;
-	u32 end_freq_khz;
-	u32 max_bandwidth_khz;
-};
-
-struct ieee80211_power_rule {
-	u32 max_antenna_gain;
-	u32 max_eirp;
-};
-
-struct ieee80211_wmm_ac {
-	u16 cw_min;
-	u16 cw_max;
-	u16 cot;
-	u8 aifsn;
-};
-
-struct ieee80211_wmm_rule {
-	struct ieee80211_wmm_ac client[4];
-	struct ieee80211_wmm_ac ap[4];
-};
-
-struct ieee80211_reg_rule {
-	struct ieee80211_freq_range freq_range;
-	struct ieee80211_power_rule power_rule;
-	struct ieee80211_wmm_rule wmm_rule;
-	u32 flags;
-	u32 dfs_cac_ms;
-	bool has_wmm;
-};
-
-struct ieee80211_regdomain {
-	struct callback_head callback_head;
-	u32 n_reg_rules;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	struct ieee80211_reg_rule reg_rules[0];
-};
-
-struct ieee80211_channel {
-	enum nl80211_band band;
-	u32 center_freq;
-	u16 freq_offset;
-	u16 hw_value;
-	u32 flags;
-	int max_antenna_gain;
-	int max_power;
-	int max_reg_power;
-	bool beacon_found;
-	u32 orig_flags;
-	int orig_mag;
-	int orig_mpwr;
-	enum nl80211_dfs_state dfs_state;
-	long unsigned int dfs_state_entered;
-	unsigned int dfs_cac_ms;
-};
-
-struct ieee80211_rate {
-	u32 flags;
-	u16 bitrate;
-	u16 hw_value;
-	u16 hw_value_short;
-};
-
-struct ieee80211_sta_ht_cap {
-	u16 cap;
-	bool ht_supported;
-	u8 ampdu_factor;
-	u8 ampdu_density;
-	struct ieee80211_mcs_info mcs;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_vht_cap {
-	bool vht_supported;
-	u32 cap;
-	struct ieee80211_vht_mcs_info vht_mcs;
-};
-
-struct ieee80211_sta_he_cap {
-	bool has_he;
-	struct ieee80211_he_cap_elem he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
-	u8 ppe_thres[25];
-} __attribute__((packed));
-
-struct ieee80211_sband_iftype_data {
-	u16 types_mask;
-	struct ieee80211_sta_he_cap he_cap;
-	struct ieee80211_he_6ghz_capa he_6ghz_capa;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_s1g_cap {
-	bool s1g;
-	u8 cap[10];
-	u8 nss_mcs[5];
-};
-
-struct ieee80211_supported_band {
-	struct ieee80211_channel *channels;
-	struct ieee80211_rate *bitrates;
-	enum nl80211_band band;
-	int n_channels;
-	int n_bitrates;
-	struct ieee80211_sta_ht_cap ht_cap;
-	struct ieee80211_sta_vht_cap vht_cap;
-	struct ieee80211_sta_s1g_cap s1g_cap;
-	struct ieee80211_edmg edmg_cap;
-	u16 n_iftype_data;
-	const struct ieee80211_sband_iftype_data *iftype_data;
-};
-
-struct key_params {
-	const u8 *key;
-	const u8 *seq;
-	int key_len;
-	int seq_len;
-	u16 vlan_id;
-	u32 cipher;
-	enum nl80211_key_mode mode;
-};
-
-struct mac_address {
-	u8 addr[6];
-};
-
-struct cfg80211_ssid {
-	u8 ssid[32];
-	u8 ssid_len;
-};
-
-enum cfg80211_signal_type {
-	CFG80211_SIGNAL_TYPE_NONE = 0,
-	CFG80211_SIGNAL_TYPE_MBM = 1,
-	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
-};
-
-struct ieee80211_txrx_stypes;
-
-struct ieee80211_iface_combination;
-
-struct wiphy_iftype_akm_suites;
-
-struct wiphy_wowlan_support;
-
-struct cfg80211_wowlan;
-
-struct wiphy_iftype_ext_capab;
-
-struct wiphy_coalesce_support;
-
-struct wiphy_vendor_command;
-
-struct cfg80211_pmsr_capabilities;
-
-struct wiphy {
-	u8 perm_addr[6];
-	u8 addr_mask[6];
-	struct mac_address *addresses;
-	const struct ieee80211_txrx_stypes *mgmt_stypes;
-	const struct ieee80211_iface_combination *iface_combinations;
-	int n_iface_combinations;
-	u16 software_iftypes;
-	u16 n_addresses;
-	u16 interface_modes;
-	u16 max_acl_mac_addrs;
-	u32 flags;
-	u32 regulatory_flags;
-	u32 features;
-	u8 ext_features[7];
-	u32 ap_sme_capa;
-	enum cfg80211_signal_type signal_type;
-	int bss_priv_size;
-	u8 max_scan_ssids;
-	u8 max_sched_scan_reqs;
-	u8 max_sched_scan_ssids;
-	u8 max_match_sets;
-	u16 max_scan_ie_len;
-	u16 max_sched_scan_ie_len;
-	u32 max_sched_scan_plans;
-	u32 max_sched_scan_plan_interval;
-	u32 max_sched_scan_plan_iterations;
-	int n_cipher_suites;
-	const u32 *cipher_suites;
-	int n_akm_suites;
-	const u32 *akm_suites;
-	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
-	unsigned int num_iftype_akm_suites;
-	u8 retry_short;
-	u8 retry_long;
-	u32 frag_threshold;
-	u32 rts_threshold;
-	u8 coverage_class;
-	char fw_version[32];
-	u32 hw_version;
-	const struct wiphy_wowlan_support *wowlan;
-	struct cfg80211_wowlan *wowlan_config;
-	u16 max_remain_on_channel_duration;
-	u8 max_num_pmkids;
-	u32 available_antennas_tx;
-	u32 available_antennas_rx;
-	u32 probe_resp_offload;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
-	unsigned int num_iftype_ext_capab;
-	const void *privid;
-	struct ieee80211_supported_band *bands[5];
-	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
-	const struct ieee80211_regdomain *regd;
-	struct device dev;
-	bool registered;
-	struct dentry *debugfsdir;
-	const struct ieee80211_ht_cap *ht_capa_mod_mask;
-	const struct ieee80211_vht_cap *vht_capa_mod_mask;
-	struct list_head wdev_list;
-	possible_net_t _net;
-	const struct iw_handler_def *wext;
-	const struct wiphy_coalesce_support *coalesce;
-	const struct wiphy_vendor_command *vendor_commands;
-	const struct nl80211_vendor_cmd_info *vendor_events;
-	int n_vendor_commands;
-	int n_vendor_events;
-	u16 max_ap_assoc_sta;
-	u8 max_num_csa_counters;
-	u32 bss_select_support;
-	u8 nan_supported_bands;
-	u32 txq_limit;
-	u32 txq_memory_limit;
-	u32 txq_quantum;
-	long unsigned int tx_queue_len;
-	u8 support_mbssid: 1;
-	u8 support_only_he_mbssid: 1;
-	const struct cfg80211_pmsr_capabilities *pmsr_capa;
-	struct {
-		u64 peer;
-		u64 vif;
-		u8 max_retry;
-	} tid_config_support;
-	u8 max_data_retry_count;
-	long: 56;
-	long: 64;
-	char priv[0];
-};
-
-struct cfg80211_match_set {
-	struct cfg80211_ssid ssid;
-	u8 bssid[6];
-	s32 rssi_thold;
-	s32 per_band_rssi_thold[5];
-};
-
-struct cfg80211_sched_scan_plan {
-	u32 interval;
-	u32 iterations;
-};
-
-struct cfg80211_sched_scan_request {
-	u64 reqid;
-	struct cfg80211_ssid *ssids;
-	int n_ssids;
-	u32 n_channels;
-	enum nl80211_bss_scan_width scan_width;
-	const u8 *ie;
-	size_t ie_len;
-	u32 flags;
-	struct cfg80211_match_set *match_sets;
-	int n_match_sets;
-	s32 min_rssi_thold;
-	u32 delay;
-	struct cfg80211_sched_scan_plan *scan_plans;
-	int n_scan_plans;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	bool relative_rssi_set;
-	s8 relative_rssi;
-	struct cfg80211_bss_select_adjust rssi_adjust;
-	struct wiphy *wiphy;
-	struct net_device *dev;
-	long unsigned int scan_start;
-	bool report_results;
-	struct callback_head callback_head;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	struct list_head list;
-	struct ieee80211_channel *channels[0];
-};
-
-struct cfg80211_pkt_pattern {
-	const u8 *mask;
-	const u8 *pattern;
-	int pattern_len;
-	int pkt_offset;
-};
-
-struct cfg80211_wowlan_tcp {
-	struct socket *sock;
-	__be32 src;
-	__be32 dst;
-	u16 src_port;
-	u16 dst_port;
-	u8 dst_mac[6];
-	int payload_len;
-	const u8 *payload;
-	struct nl80211_wowlan_tcp_data_seq payload_seq;
-	u32 data_interval;
-	u32 wake_len;
-	const u8 *wake_data;
-	const u8 *wake_mask;
-	u32 tokens_size;
-	struct nl80211_wowlan_tcp_data_token payload_tok;
-};
-
-struct cfg80211_wowlan {
-	bool any;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	struct cfg80211_pkt_pattern *patterns;
-	struct cfg80211_wowlan_tcp *tcp;
-	int n_patterns;
-	struct cfg80211_sched_scan_request *nd_config;
-};
-
-struct ieee80211_iface_limit {
-	u16 max;
-	u16 types;
-};
-
-struct ieee80211_iface_combination {
-	const struct ieee80211_iface_limit *limits;
-	u32 num_different_channels;
-	u16 max_interfaces;
-	u8 n_limits;
-	bool beacon_int_infra_match;
-	u8 radar_detect_widths;
-	u8 radar_detect_regions;
-	u32 beacon_int_min_gcd;
-};
-
-struct ieee80211_txrx_stypes {
-	u16 tx;
-	u16 rx;
-};
-
-struct wiphy_wowlan_tcp_support {
-	const struct nl80211_wowlan_tcp_data_token_feature *tok;
-	u32 data_payload_max;
-	u32 data_interval_max;
-	u32 wake_payload_max;
-	bool seq;
-};
-
-struct wiphy_wowlan_support {
-	u32 flags;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-	int max_nd_match_sets;
-	const struct wiphy_wowlan_tcp_support *tcp;
-};
-
-struct wiphy_coalesce_support {
-	int n_rules;
-	int max_delay;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-};
-
-struct wiphy_vendor_command {
-	struct nl80211_vendor_cmd_info info;
-	u32 flags;
-	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
-	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-};
-
-struct wiphy_iftype_ext_capab {
-	enum nl80211_iftype iftype;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-};
-
-struct cfg80211_pmsr_capabilities {
-	unsigned int max_peers;
-	u8 report_ap_tsf: 1;
-	u8 randomize_mac_addr: 1;
-	struct {
-		u32 preambles;
-		u32 bandwidths;
-		s8 max_bursts_exponent;
-		u8 max_ftms_per_burst;
-		u8 supported: 1;
-		u8 asap: 1;
-		u8 non_asap: 1;
-		u8 request_lci: 1;
-		u8 request_civicloc: 1;
-		u8 trigger_based: 1;
-		u8 non_trigger_based: 1;
-	} ftm;
-};
-
-struct wiphy_iftype_akm_suites {
-	u16 iftypes_mask;
-	const u32 *akm_suites;
-	int n_akm_suites;
-};
-
-struct iw_ioctl_description {
-	__u8 header_type;
-	__u8 token_type;
-	__u16 token_size;
-	__u16 min_tokens;
-	__u16 max_tokens;
-	__u32 flags;
-};
-
-typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
-
-struct iw_thrspy {
-	struct sockaddr addr;
-	struct iw_quality qual;
-	struct iw_quality low;
-	struct iw_quality high;
-};
-
-struct netlbl_af4list {
-	__be32 addr;
-	__be32 mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_af6list {
-	struct in6_addr addr;
-	struct in6_addr mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_domaddr_map {
-	struct list_head list4;
-	struct list_head list6;
-};
-
-struct netlbl_dommap_def {
-	u32 type;
-	union {
-		struct netlbl_domaddr_map *addrsel;
-		struct cipso_v4_doi *cipso;
-		struct calipso_doi *calipso;
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
 	};
 };
 
-struct netlbl_domaddr4_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af4list list;
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
 };
 
-struct netlbl_domaddr6_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af6list list;
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
 };
 
-struct netlbl_dom_map {
-	char *domain;
-	u16 family;
-	struct netlbl_dommap_def def;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
 };
 
-struct netlbl_domhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
 };
 
-enum {
-	NLBL_MGMT_C_UNSPEC = 0,
-	NLBL_MGMT_C_ADD = 1,
-	NLBL_MGMT_C_REMOVE = 2,
-	NLBL_MGMT_C_LISTALL = 3,
-	NLBL_MGMT_C_ADDDEF = 4,
-	NLBL_MGMT_C_REMOVEDEF = 5,
-	NLBL_MGMT_C_LISTDEF = 6,
-	NLBL_MGMT_C_PROTOCOLS = 7,
-	NLBL_MGMT_C_VERSION = 8,
-	NLBL_MGMT_C_S0_SET = 9,
-	NLBL_MGMT_C_S0_GET = 10,
-	__NLBL_MGMT_C_MAX = 11,
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
 };
 
-enum {
-	NLBL_MGMT_A_UNSPEC = 0,
-	NLBL_MGMT_A_DOMAIN = 1,
-	NLBL_MGMT_A_PROTOCOL = 2,
-	NLBL_MGMT_A_VERSION = 3,
-	NLBL_MGMT_A_CV4DOI = 4,
-	NLBL_MGMT_A_IPV6ADDR = 5,
-	NLBL_MGMT_A_IPV6MASK = 6,
-	NLBL_MGMT_A_IPV4ADDR = 7,
-	NLBL_MGMT_A_IPV4MASK = 8,
-	NLBL_MGMT_A_ADDRSELECTOR = 9,
-	NLBL_MGMT_A_SELECTORLIST = 10,
-	NLBL_MGMT_A_FAMILY = 11,
-	NLBL_MGMT_A_CLPDOI = 12,
-	NLBL_MGMT_A_S0 = 13,
-	__NLBL_MGMT_A_MAX = 14,
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
 };
 
-struct netlbl_domhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
 };
 
-enum {
-	NLBL_UNLABEL_C_UNSPEC = 0,
-	NLBL_UNLABEL_C_ACCEPT = 1,
-	NLBL_UNLABEL_C_LIST = 2,
-	NLBL_UNLABEL_C_STATICADD = 3,
-	NLBL_UNLABEL_C_STATICREMOVE = 4,
-	NLBL_UNLABEL_C_STATICLIST = 5,
-	NLBL_UNLABEL_C_STATICADDDEF = 6,
-	NLBL_UNLABEL_C_STATICREMOVEDEF = 7,
-	NLBL_UNLABEL_C_STATICLISTDEF = 8,
-	__NLBL_UNLABEL_C_MAX = 9,
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
 };
 
-enum {
-	NLBL_UNLABEL_A_UNSPEC = 0,
-	NLBL_UNLABEL_A_ACPTFLG = 1,
-	NLBL_UNLABEL_A_IPV6ADDR = 2,
-	NLBL_UNLABEL_A_IPV6MASK = 3,
-	NLBL_UNLABEL_A_IPV4ADDR = 4,
-	NLBL_UNLABEL_A_IPV4MASK = 5,
-	NLBL_UNLABEL_A_IFACE = 6,
-	NLBL_UNLABEL_A_SECCTX = 7,
-	__NLBL_UNLABEL_A_MAX = 8,
+typedef __u16 __virtio16;
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
 };
 
-struct netlbl_unlhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-struct netlbl_unlhsh_addr4 {
-	u32 secid;
-	struct netlbl_af4list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_addr6 {
-	u32 secid;
-	struct netlbl_af6list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_iface {
+struct packet_mclist {
+	struct packet_mclist *next;
 	int ifindex;
-	struct list_head addr4_list;
-	struct list_head addr6_list;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
+	int count;
+	short unsigned int type;
+	short unsigned int alen;
+	unsigned char addr[32];
 };
 
-struct netlbl_unlhsh_walk_arg {
-	struct netlink_callback *nl_cb;
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	short unsigned int kactive_blk_num;
+	short unsigned int blk_sizeof_priv;
+	short unsigned int last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
 	struct sk_buff *skb;
-	u32 seq;
+	rwlock_t blk_fill_in_prog_lock;
+	short unsigned int retire_blk_tov;
+	short unsigned int version;
+	long unsigned int tov_in_jiffies;
+	struct timer_list retire_blk_timer;
 };
 
-enum {
-	NLBL_CIPSOV4_C_UNSPEC = 0,
-	NLBL_CIPSOV4_C_ADD = 1,
-	NLBL_CIPSOV4_C_REMOVE = 2,
-	NLBL_CIPSOV4_C_LIST = 3,
-	NLBL_CIPSOV4_C_LISTALL = 4,
-	__NLBL_CIPSOV4_C_MAX = 5,
+struct pgv {
+	char *buffer;
 };
 
-enum {
-	NLBL_CIPSOV4_A_UNSPEC = 0,
-	NLBL_CIPSOV4_A_DOI = 1,
-	NLBL_CIPSOV4_A_MTYPE = 2,
-	NLBL_CIPSOV4_A_TAG = 3,
-	NLBL_CIPSOV4_A_TAGLST = 4,
-	NLBL_CIPSOV4_A_MLSLVLLOC = 5,
-	NLBL_CIPSOV4_A_MLSLVLREM = 6,
-	NLBL_CIPSOV4_A_MLSLVL = 7,
-	NLBL_CIPSOV4_A_MLSLVLLST = 8,
-	NLBL_CIPSOV4_A_MLSCATLOC = 9,
-	NLBL_CIPSOV4_A_MLSCATREM = 10,
-	NLBL_CIPSOV4_A_MLSCAT = 11,
-	NLBL_CIPSOV4_A_MLSCATLST = 12,
-	__NLBL_CIPSOV4_A_MAX = 13,
-};
-
-struct netlbl_cipsov4_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct netlbl_domhsh_walk_arg___2 {
-	struct netlbl_audit *audit_info;
-	u32 doi;
-};
-
-enum {
-	NLBL_CALIPSO_C_UNSPEC = 0,
-	NLBL_CALIPSO_C_ADD = 1,
-	NLBL_CALIPSO_C_REMOVE = 2,
-	NLBL_CALIPSO_C_LIST = 3,
-	NLBL_CALIPSO_C_LISTALL = 4,
-	__NLBL_CALIPSO_C_MAX = 5,
-};
-
-enum {
-	NLBL_CALIPSO_A_UNSPEC = 0,
-	NLBL_CALIPSO_A_DOI = 1,
-	NLBL_CALIPSO_A_MTYPE = 2,
-	__NLBL_CALIPSO_A_MAX = 3,
-};
-
-struct netlbl_calipso_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct dcbmsg {
-	__u8 dcb_family;
-	__u8 cmd;
-	__u16 dcb_pad;
-};
-
-enum dcbnl_commands {
-	DCB_CMD_UNDEFINED = 0,
-	DCB_CMD_GSTATE = 1,
-	DCB_CMD_SSTATE = 2,
-	DCB_CMD_PGTX_GCFG = 3,
-	DCB_CMD_PGTX_SCFG = 4,
-	DCB_CMD_PGRX_GCFG = 5,
-	DCB_CMD_PGRX_SCFG = 6,
-	DCB_CMD_PFC_GCFG = 7,
-	DCB_CMD_PFC_SCFG = 8,
-	DCB_CMD_SET_ALL = 9,
-	DCB_CMD_GPERM_HWADDR = 10,
-	DCB_CMD_GCAP = 11,
-	DCB_CMD_GNUMTCS = 12,
-	DCB_CMD_SNUMTCS = 13,
-	DCB_CMD_PFC_GSTATE = 14,
-	DCB_CMD_PFC_SSTATE = 15,
-	DCB_CMD_BCN_GCFG = 16,
-	DCB_CMD_BCN_SCFG = 17,
-	DCB_CMD_GAPP = 18,
-	DCB_CMD_SAPP = 19,
-	DCB_CMD_IEEE_SET = 20,
-	DCB_CMD_IEEE_GET = 21,
-	DCB_CMD_GDCBX = 22,
-	DCB_CMD_SDCBX = 23,
-	DCB_CMD_GFEATCFG = 24,
-	DCB_CMD_SFEATCFG = 25,
-	DCB_CMD_CEE_GET = 26,
-	DCB_CMD_IEEE_DEL = 27,
-	__DCB_CMD_ENUM_MAX = 28,
-	DCB_CMD_MAX = 27,
-};
-
-enum dcbnl_attrs {
-	DCB_ATTR_UNDEFINED = 0,
-	DCB_ATTR_IFNAME = 1,
-	DCB_ATTR_STATE = 2,
-	DCB_ATTR_PFC_STATE = 3,
-	DCB_ATTR_PFC_CFG = 4,
-	DCB_ATTR_NUM_TC = 5,
-	DCB_ATTR_PG_CFG = 6,
-	DCB_ATTR_SET_ALL = 7,
-	DCB_ATTR_PERM_HWADDR = 8,
-	DCB_ATTR_CAP = 9,
-	DCB_ATTR_NUMTCS = 10,
-	DCB_ATTR_BCN = 11,
-	DCB_ATTR_APP = 12,
-	DCB_ATTR_IEEE = 13,
-	DCB_ATTR_DCBX = 14,
-	DCB_ATTR_FEATCFG = 15,
-	DCB_ATTR_CEE = 16,
-	__DCB_ATTR_ENUM_MAX = 17,
-	DCB_ATTR_MAX = 16,
-};
-
-enum ieee_attrs {
-	DCB_ATTR_IEEE_UNSPEC = 0,
-	DCB_ATTR_IEEE_ETS = 1,
-	DCB_ATTR_IEEE_PFC = 2,
-	DCB_ATTR_IEEE_APP_TABLE = 3,
-	DCB_ATTR_IEEE_PEER_ETS = 4,
-	DCB_ATTR_IEEE_PEER_PFC = 5,
-	DCB_ATTR_IEEE_PEER_APP = 6,
-	DCB_ATTR_IEEE_MAXRATE = 7,
-	DCB_ATTR_IEEE_QCN = 8,
-	DCB_ATTR_IEEE_QCN_STATS = 9,
-	DCB_ATTR_DCB_BUFFER = 10,
-	__DCB_ATTR_IEEE_MAX = 11,
-};
-
-enum ieee_attrs_app {
-	DCB_ATTR_IEEE_APP_UNSPEC = 0,
-	DCB_ATTR_IEEE_APP = 1,
-	__DCB_ATTR_IEEE_APP_MAX = 2,
-};
-
-enum cee_attrs {
-	DCB_ATTR_CEE_UNSPEC = 0,
-	DCB_ATTR_CEE_PEER_PG = 1,
-	DCB_ATTR_CEE_PEER_PFC = 2,
-	DCB_ATTR_CEE_PEER_APP_TABLE = 3,
-	DCB_ATTR_CEE_TX_PG = 4,
-	DCB_ATTR_CEE_RX_PG = 5,
-	DCB_ATTR_CEE_PFC = 6,
-	DCB_ATTR_CEE_APP_TABLE = 7,
-	DCB_ATTR_CEE_FEAT = 8,
-	__DCB_ATTR_CEE_MAX = 9,
-};
-
-enum peer_app_attr {
-	DCB_ATTR_CEE_PEER_APP_UNSPEC = 0,
-	DCB_ATTR_CEE_PEER_APP_INFO = 1,
-	DCB_ATTR_CEE_PEER_APP = 2,
-	__DCB_ATTR_CEE_PEER_APP_MAX = 3,
-};
-
-enum dcbnl_pfc_up_attrs {
-	DCB_PFC_UP_ATTR_UNDEFINED = 0,
-	DCB_PFC_UP_ATTR_0 = 1,
-	DCB_PFC_UP_ATTR_1 = 2,
-	DCB_PFC_UP_ATTR_2 = 3,
-	DCB_PFC_UP_ATTR_3 = 4,
-	DCB_PFC_UP_ATTR_4 = 5,
-	DCB_PFC_UP_ATTR_5 = 6,
-	DCB_PFC_UP_ATTR_6 = 7,
-	DCB_PFC_UP_ATTR_7 = 8,
-	DCB_PFC_UP_ATTR_ALL = 9,
-	__DCB_PFC_UP_ATTR_ENUM_MAX = 10,
-	DCB_PFC_UP_ATTR_MAX = 9,
-};
-
-enum dcbnl_pg_attrs {
-	DCB_PG_ATTR_UNDEFINED = 0,
-	DCB_PG_ATTR_TC_0 = 1,
-	DCB_PG_ATTR_TC_1 = 2,
-	DCB_PG_ATTR_TC_2 = 3,
-	DCB_PG_ATTR_TC_3 = 4,
-	DCB_PG_ATTR_TC_4 = 5,
-	DCB_PG_ATTR_TC_5 = 6,
-	DCB_PG_ATTR_TC_6 = 7,
-	DCB_PG_ATTR_TC_7 = 8,
-	DCB_PG_ATTR_TC_MAX = 9,
-	DCB_PG_ATTR_TC_ALL = 10,
-	DCB_PG_ATTR_BW_ID_0 = 11,
-	DCB_PG_ATTR_BW_ID_1 = 12,
-	DCB_PG_ATTR_BW_ID_2 = 13,
-	DCB_PG_ATTR_BW_ID_3 = 14,
-	DCB_PG_ATTR_BW_ID_4 = 15,
-	DCB_PG_ATTR_BW_ID_5 = 16,
-	DCB_PG_ATTR_BW_ID_6 = 17,
-	DCB_PG_ATTR_BW_ID_7 = 18,
-	DCB_PG_ATTR_BW_ID_MAX = 19,
-	DCB_PG_ATTR_BW_ID_ALL = 20,
-	__DCB_PG_ATTR_ENUM_MAX = 21,
-	DCB_PG_ATTR_MAX = 20,
-};
-
-enum dcbnl_tc_attrs {
-	DCB_TC_ATTR_PARAM_UNDEFINED = 0,
-	DCB_TC_ATTR_PARAM_PGID = 1,
-	DCB_TC_ATTR_PARAM_UP_MAPPING = 2,
-	DCB_TC_ATTR_PARAM_STRICT_PRIO = 3,
-	DCB_TC_ATTR_PARAM_BW_PCT = 4,
-	DCB_TC_ATTR_PARAM_ALL = 5,
-	__DCB_TC_ATTR_PARAM_ENUM_MAX = 6,
-	DCB_TC_ATTR_PARAM_MAX = 5,
-};
-
-enum dcbnl_cap_attrs {
-	DCB_CAP_ATTR_UNDEFINED = 0,
-	DCB_CAP_ATTR_ALL = 1,
-	DCB_CAP_ATTR_PG = 2,
-	DCB_CAP_ATTR_PFC = 3,
-	DCB_CAP_ATTR_UP2TC = 4,
-	DCB_CAP_ATTR_PG_TCS = 5,
-	DCB_CAP_ATTR_PFC_TCS = 6,
-	DCB_CAP_ATTR_GSP = 7,
-	DCB_CAP_ATTR_BCN = 8,
-	DCB_CAP_ATTR_DCBX = 9,
-	__DCB_CAP_ATTR_ENUM_MAX = 10,
-	DCB_CAP_ATTR_MAX = 9,
-};
-
-enum dcbnl_numtcs_attrs {
-	DCB_NUMTCS_ATTR_UNDEFINED = 0,
-	DCB_NUMTCS_ATTR_ALL = 1,
-	DCB_NUMTCS_ATTR_PG = 2,
-	DCB_NUMTCS_ATTR_PFC = 3,
-	__DCB_NUMTCS_ATTR_ENUM_MAX = 4,
-	DCB_NUMTCS_ATTR_MAX = 3,
-};
-
-enum dcbnl_bcn_attrs {
-	DCB_BCN_ATTR_UNDEFINED = 0,
-	DCB_BCN_ATTR_RP_0 = 1,
-	DCB_BCN_ATTR_RP_1 = 2,
-	DCB_BCN_ATTR_RP_2 = 3,
-	DCB_BCN_ATTR_RP_3 = 4,
-	DCB_BCN_ATTR_RP_4 = 5,
-	DCB_BCN_ATTR_RP_5 = 6,
-	DCB_BCN_ATTR_RP_6 = 7,
-	DCB_BCN_ATTR_RP_7 = 8,
-	DCB_BCN_ATTR_RP_ALL = 9,
-	DCB_BCN_ATTR_BCNA_0 = 10,
-	DCB_BCN_ATTR_BCNA_1 = 11,
-	DCB_BCN_ATTR_ALPHA = 12,
-	DCB_BCN_ATTR_BETA = 13,
-	DCB_BCN_ATTR_GD = 14,
-	DCB_BCN_ATTR_GI = 15,
-	DCB_BCN_ATTR_TMAX = 16,
-	DCB_BCN_ATTR_TD = 17,
-	DCB_BCN_ATTR_RMIN = 18,
-	DCB_BCN_ATTR_W = 19,
-	DCB_BCN_ATTR_RD = 20,
-	DCB_BCN_ATTR_RU = 21,
-	DCB_BCN_ATTR_WRTT = 22,
-	DCB_BCN_ATTR_RI = 23,
-	DCB_BCN_ATTR_C = 24,
-	DCB_BCN_ATTR_ALL = 25,
-	__DCB_BCN_ATTR_ENUM_MAX = 26,
-	DCB_BCN_ATTR_MAX = 25,
-};
-
-enum dcb_general_attr_values {
-	DCB_ATTR_VALUE_UNDEFINED = 255,
-};
-
-enum dcbnl_app_attrs {
-	DCB_APP_ATTR_UNDEFINED = 0,
-	DCB_APP_ATTR_IDTYPE = 1,
-	DCB_APP_ATTR_ID = 2,
-	DCB_APP_ATTR_PRIORITY = 3,
-	__DCB_APP_ATTR_ENUM_MAX = 4,
-	DCB_APP_ATTR_MAX = 3,
-};
-
-enum dcbnl_featcfg_attrs {
-	DCB_FEATCFG_ATTR_UNDEFINED = 0,
-	DCB_FEATCFG_ATTR_ALL = 1,
-	DCB_FEATCFG_ATTR_PG = 2,
-	DCB_FEATCFG_ATTR_PFC = 3,
-	DCB_FEATCFG_ATTR_APP = 4,
-	__DCB_FEATCFG_ATTR_ENUM_MAX = 5,
-	DCB_FEATCFG_ATTR_MAX = 4,
-};
-
-struct dcb_app_type {
-	int ifindex;
-	struct dcb_app app;
-	struct list_head list;
-	u8 dcbx;
-};
-
-struct dcb_ieee_app_prio_map {
-	u64 map[8];
-};
-
-struct dcb_ieee_app_dscp_map {
-	u8 map[64];
-};
-
-enum dcbevent_notif_type {
-	DCB_APP_EVENT = 1,
-};
-
-struct reply_func {
-	int type;
-	int (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);
-};
-
-enum switchdev_attr_id {
-	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
-	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
-	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 2,
-	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 3,
-	SWITCHDEV_ATTR_ID_PORT_MROUTER = 4,
-	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 5,
-	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 6,
-	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 7,
-	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 8,
-	SWITCHDEV_ATTR_ID_MRP_PORT_STATE = 9,
-	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 10,
-};
-
-struct switchdev_attr {
-	struct net_device *orig_dev;
-	enum switchdev_attr_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int *pending_refcnt;
 	union {
-		u8 stp_state;
-		long unsigned int brport_flags;
-		bool mrouter;
-		clock_t ageing_time;
-		bool vlan_filtering;
-		bool mc_disabled;
-		u8 mrp_port_state;
-		u8 mrp_port_role;
-	} u;
-};
-
-enum switchdev_notifier_type {
-	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
-	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
-	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
-	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
-	SWITCHDEV_FDB_OFFLOADED = 5,
-	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
-	SWITCHDEV_PORT_OBJ_ADD = 7,
-	SWITCHDEV_PORT_OBJ_DEL = 8,
-	SWITCHDEV_PORT_ATTR_SET = 9,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
-	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
-	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
-	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
-};
-
-struct switchdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct switchdev_notifier_port_obj_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_obj *obj;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-struct switchdev_notifier_port_attr_info {
-	struct switchdev_notifier_info info;
-	const struct switchdev_attr *attr;
-	struct switchdev_trans *trans;
-	bool handled;
-};
-
-typedef void switchdev_deferred_func_t(struct net_device *, const void *);
-
-struct switchdev_deferred_item {
-	struct list_head list;
-	struct net_device *dev;
-	switchdev_deferred_func_t *func;
-	long unsigned int data[0];
-};
-
-enum l3mdev_type {
-	L3MDEV_TYPE_UNSPEC = 0,
-	L3MDEV_TYPE_VRF = 1,
-	__L3MDEV_TYPE_MAX = 2,
-};
-
-typedef int (*lookup_by_table_id_t)(struct net *, u32);
-
-struct l3mdev_handler {
-	lookup_by_table_id_t dev_lookup;
-};
-
-struct ncsi_dev {
-	int state;
-	int link_up;
-	struct net_device *dev;
-	void (*handler)(struct ncsi_dev *);
-};
-
-enum {
-	NCSI_CAP_BASE = 0,
-	NCSI_CAP_GENERIC = 0,
-	NCSI_CAP_BC = 1,
-	NCSI_CAP_MC = 2,
-	NCSI_CAP_BUFFER = 3,
-	NCSI_CAP_AEN = 4,
-	NCSI_CAP_VLAN = 5,
-	NCSI_CAP_MAX = 6,
-};
-
-enum {
-	NCSI_MODE_BASE = 0,
-	NCSI_MODE_ENABLE = 0,
-	NCSI_MODE_TX_ENABLE = 1,
-	NCSI_MODE_LINK = 2,
-	NCSI_MODE_VLAN = 3,
-	NCSI_MODE_BC = 4,
-	NCSI_MODE_MC = 5,
-	NCSI_MODE_AEN = 6,
-	NCSI_MODE_FC = 7,
-	NCSI_MODE_MAX = 8,
-};
-
-struct ncsi_channel_version {
-	u32 version;
-	u32 alpha2;
-	u8 fw_name[12];
-	u32 fw_version;
-	u16 pci_ids[4];
-	u32 mf_id;
-};
-
-struct ncsi_channel_cap {
-	u32 index;
-	u32 cap;
-};
-
-struct ncsi_channel_mode {
-	u32 index;
-	u32 enable;
-	u32 size;
-	u32 data[8];
-};
-
-struct ncsi_channel_mac_filter {
-	u8 n_uc;
-	u8 n_mc;
-	u8 n_mixed;
-	u64 bitmap;
-	unsigned char *addrs;
-};
-
-struct ncsi_channel_vlan_filter {
-	u8 n_vids;
-	u64 bitmap;
-	u16 *vids;
-};
-
-struct ncsi_channel_stats {
-	u32 hnc_cnt_hi;
-	u32 hnc_cnt_lo;
-	u32 hnc_rx_bytes;
-	u32 hnc_tx_bytes;
-	u32 hnc_rx_uc_pkts;
-	u32 hnc_rx_mc_pkts;
-	u32 hnc_rx_bc_pkts;
-	u32 hnc_tx_uc_pkts;
-	u32 hnc_tx_mc_pkts;
-	u32 hnc_tx_bc_pkts;
-	u32 hnc_fcs_err;
-	u32 hnc_align_err;
-	u32 hnc_false_carrier;
-	u32 hnc_runt_pkts;
-	u32 hnc_jabber_pkts;
-	u32 hnc_rx_pause_xon;
-	u32 hnc_rx_pause_xoff;
-	u32 hnc_tx_pause_xon;
-	u32 hnc_tx_pause_xoff;
-	u32 hnc_tx_s_collision;
-	u32 hnc_tx_m_collision;
-	u32 hnc_l_collision;
-	u32 hnc_e_collision;
-	u32 hnc_rx_ctl_frames;
-	u32 hnc_rx_64_frames;
-	u32 hnc_rx_127_frames;
-	u32 hnc_rx_255_frames;
-	u32 hnc_rx_511_frames;
-	u32 hnc_rx_1023_frames;
-	u32 hnc_rx_1522_frames;
-	u32 hnc_rx_9022_frames;
-	u32 hnc_tx_64_frames;
-	u32 hnc_tx_127_frames;
-	u32 hnc_tx_255_frames;
-	u32 hnc_tx_511_frames;
-	u32 hnc_tx_1023_frames;
-	u32 hnc_tx_1522_frames;
-	u32 hnc_tx_9022_frames;
-	u32 hnc_rx_valid_bytes;
-	u32 hnc_rx_runt_pkts;
-	u32 hnc_rx_jabber_pkts;
-	u32 ncsi_rx_cmds;
-	u32 ncsi_dropped_cmds;
-	u32 ncsi_cmd_type_errs;
-	u32 ncsi_cmd_csum_errs;
-	u32 ncsi_rx_pkts;
-	u32 ncsi_tx_pkts;
-	u32 ncsi_tx_aen_pkts;
-	u32 pt_tx_pkts;
-	u32 pt_tx_dropped;
-	u32 pt_tx_channel_err;
-	u32 pt_tx_us_err;
-	u32 pt_rx_pkts;
-	u32 pt_rx_dropped;
-	u32 pt_rx_channel_err;
-	u32 pt_rx_us_err;
-	u32 pt_rx_os_err;
-};
-
-struct ncsi_package;
-
-struct ncsi_channel {
-	unsigned char id;
-	int state;
-	bool reconfigure_needed;
-	spinlock_t lock;
-	struct ncsi_package *package;
-	struct ncsi_channel_version version;
-	struct ncsi_channel_cap caps[6];
-	struct ncsi_channel_mode modes[8];
-	struct ncsi_channel_mac_filter mac_filter;
-	struct ncsi_channel_vlan_filter vlan_filter;
-	struct ncsi_channel_stats stats;
-	struct {
-		struct timer_list timer;
-		bool enabled;
-		unsigned int state;
-	} monitor;
-	struct list_head node;
-	struct list_head link;
-};
-
-struct ncsi_dev_priv;
-
-struct ncsi_package {
-	unsigned char id;
-	unsigned char uuid[16];
-	struct ncsi_dev_priv *ndp;
-	spinlock_t lock;
-	unsigned int channel_num;
-	struct list_head channels;
-	struct list_head node;
-	bool multi_channel;
-	u32 channel_whitelist;
-	struct ncsi_channel *preferred_channel;
-};
-
-struct ncsi_request {
-	unsigned char id;
-	bool used;
-	unsigned int flags;
-	struct ncsi_dev_priv *ndp;
-	struct sk_buff *cmd;
-	struct sk_buff *rsp;
-	struct timer_list timer;
-	bool enabled;
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr nlhdr;
-};
-
-struct ncsi_dev_priv {
-	struct ncsi_dev ndev;
-	unsigned int flags;
-	unsigned int gma_flag;
-	spinlock_t lock;
-	unsigned int package_probe_id;
-	unsigned int package_num;
-	struct list_head packages;
-	struct ncsi_channel *hot_channel;
-	struct ncsi_request requests[256];
-	unsigned int request_id;
-	unsigned int pending_req_num;
-	struct ncsi_package *active_package;
-	struct ncsi_channel *active_channel;
-	struct list_head channel_queue;
-	struct work_struct work;
-	struct packet_type ptype;
-	struct list_head node;
-	struct list_head vlan_vids;
-	bool multi_package;
-	bool mlx_multi_host;
-	u32 package_whitelist;
-};
-
-struct ncsi_cmd_arg {
-	struct ncsi_dev_priv *ndp;
-	unsigned char type;
-	unsigned char id;
-	unsigned char package;
-	unsigned char channel;
-	short unsigned int payload;
-	unsigned int req_flags;
-	union {
-		unsigned char bytes[16];
-		short unsigned int words[8];
-		unsigned int dwords[4];
+		long unsigned int *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
 	};
-	unsigned char *data;
-	struct genl_info *info;
 };
 
-struct ncsi_pkt_hdr {
-	unsigned char mc_id;
-	unsigned char revision;
-	unsigned char reserved;
-	unsigned char id;
-	unsigned char type;
-	unsigned char channel;
-	__be16 length;
-	__be32 reserved1[2];
-};
-
-struct ncsi_cmd_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-};
-
-struct ncsi_cmd_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 checksum;
-	unsigned char pad[26];
-};
-
-struct ncsi_cmd_sp_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char hw_arbitration;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_dc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char ald;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_rc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 reserved;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_ae_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mc_id;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_sl_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 oem_mode;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_svf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be16 reserved;
-	__be16 vlan;
-	__be16 reserved1;
-	unsigned char index;
-	unsigned char enable;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ev_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_sma_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char mac[6];
-	unsigned char index;
-	unsigned char at_e;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_cmd_ebf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_egmf_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_snfc_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	unsigned char reserved[3];
-	unsigned char mode;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_cmd_oem_pkt {
-	struct ncsi_cmd_pkt_hdr cmd;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_cmd_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct sk_buff *, struct ncsi_cmd_arg *);
-};
-
-enum {
-	NCSI_CAP_GENERIC_HWA = 1,
-	NCSI_CAP_GENERIC_HDS = 2,
-	NCSI_CAP_GENERIC_FC = 4,
-	NCSI_CAP_GENERIC_FC1 = 8,
-	NCSI_CAP_GENERIC_MC = 16,
-	NCSI_CAP_GENERIC_HWA_UNKNOWN = 0,
-	NCSI_CAP_GENERIC_HWA_SUPPORT = 32,
-	NCSI_CAP_GENERIC_HWA_NOT_SUPPORT = 64,
-	NCSI_CAP_GENERIC_HWA_RESERVED = 96,
-	NCSI_CAP_GENERIC_HWA_MASK = 96,
-	NCSI_CAP_GENERIC_MASK = 127,
-	NCSI_CAP_BC_ARP = 1,
-	NCSI_CAP_BC_DHCPC = 2,
-	NCSI_CAP_BC_DHCPS = 4,
-	NCSI_CAP_BC_NETBIOS = 8,
-	NCSI_CAP_BC_MASK = 15,
-	NCSI_CAP_MC_IPV6_NEIGHBOR = 1,
-	NCSI_CAP_MC_IPV6_ROUTER = 2,
-	NCSI_CAP_MC_DHCPV6_RELAY = 4,
-	NCSI_CAP_MC_DHCPV6_WELL_KNOWN = 8,
-	NCSI_CAP_MC_IPV6_MLD = 16,
-	NCSI_CAP_MC_IPV6_NEIGHBOR_S = 32,
-	NCSI_CAP_MC_MASK = 63,
-	NCSI_CAP_AEN_LSC = 1,
-	NCSI_CAP_AEN_CR = 2,
-	NCSI_CAP_AEN_HDS = 4,
-	NCSI_CAP_AEN_MASK = 7,
-	NCSI_CAP_VLAN_ONLY = 1,
-	NCSI_CAP_VLAN_NO = 2,
-	NCSI_CAP_VLAN_ANY = 4,
-	NCSI_CAP_VLAN_MASK = 7,
-};
-
-struct ncsi_rsp_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	__be16 code;
-	__be16 reason;
-};
-
-struct ncsi_rsp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 checksum;
-	unsigned char pad[22];
-};
-
-struct ncsi_rsp_oem_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 mfr_id;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_mlx_pkt {
-	unsigned char cmd_rev;
-	unsigned char cmd;
-	unsigned char param;
-	unsigned char optional;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_oem_bcm_pkt {
-	unsigned char ver;
-	unsigned char type;
-	__be16 len;
-	unsigned char data[0];
-};
-
-struct ncsi_rsp_gls_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 other;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[10];
-};
-
-struct ncsi_rsp_gvi_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 ncsi_version;
-	unsigned char reserved[3];
-	unsigned char alpha2;
-	unsigned char fw_name[12];
-	__be32 fw_version;
-	__be16 pci_ids[4];
-	__be32 mf_id;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gc_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cap;
-	__be32 bc_cap;
-	__be32 mc_cap;
-	__be32 buf_cap;
-	__be32 aen_cap;
-	unsigned char vlan_cnt;
-	unsigned char mixed_cnt;
-	unsigned char mc_cnt;
-	unsigned char uc_cnt;
-	unsigned char reserved[2];
-	unsigned char vlan_mode;
-	unsigned char channel_cnt;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gp_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char mac_cnt;
-	unsigned char reserved[2];
-	unsigned char mac_enable;
-	unsigned char vlan_cnt;
-	unsigned char reserved1;
-	__be16 vlan_enable;
-	__be32 link_mode;
-	__be32 bc_mode;
-	__be32 valid_modes;
-	unsigned char vlan_mode;
-	unsigned char fc_mode;
-	unsigned char reserved2[2];
-	__be32 aen_mode;
-	unsigned char mac[6];
-	__be16 vlan;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gcps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 cnt_hi;
-	__be32 cnt_lo;
-	__be32 rx_bytes;
-	__be32 tx_bytes;
-	__be32 rx_uc_pkts;
-	__be32 rx_mc_pkts;
-	__be32 rx_bc_pkts;
-	__be32 tx_uc_pkts;
-	__be32 tx_mc_pkts;
-	__be32 tx_bc_pkts;
-	__be32 fcs_err;
-	__be32 align_err;
-	__be32 false_carrier;
-	__be32 runt_pkts;
-	__be32 jabber_pkts;
-	__be32 rx_pause_xon;
-	__be32 rx_pause_xoff;
-	__be32 tx_pause_xon;
-	__be32 tx_pause_xoff;
-	__be32 tx_s_collision;
-	__be32 tx_m_collision;
-	__be32 l_collision;
-	__be32 e_collision;
-	__be32 rx_ctl_frames;
-	__be32 rx_64_frames;
-	__be32 rx_127_frames;
-	__be32 rx_255_frames;
-	__be32 rx_511_frames;
-	__be32 rx_1023_frames;
-	__be32 rx_1522_frames;
-	__be32 rx_9022_frames;
-	__be32 tx_64_frames;
-	__be32 tx_127_frames;
-	__be32 tx_255_frames;
-	__be32 tx_511_frames;
-	__be32 tx_1023_frames;
-	__be32 tx_1522_frames;
-	__be32 tx_9022_frames;
-	__be32 rx_valid_bytes;
-	__be32 rx_runt_pkts;
-	__be32 rx_jabber_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gns_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 rx_cmds;
-	__be32 dropped_cmds;
-	__be32 cmd_type_errs;
-	__be32 cmd_csum_errs;
-	__be32 rx_pkts;
-	__be32 tx_pkts;
-	__be32 tx_aen_pkts;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gnpts_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 tx_pkts;
-	__be32 tx_dropped;
-	__be32 tx_channel_err;
-	__be32 tx_us_err;
-	__be32 rx_pkts;
-	__be32 rx_dropped;
-	__be32 rx_channel_err;
-	__be32 rx_us_err;
-	__be32 rx_os_err;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gps_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	__be32 status;
-	__be32 checksum;
-};
-
-struct ncsi_rsp_gpuuid_pkt {
-	struct ncsi_rsp_pkt_hdr rsp;
-	unsigned char uuid[16];
-	__be32 checksum;
-};
-
-struct ncsi_rsp_oem_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_rsp_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_request *);
-};
-
-struct ncsi_aen_pkt_hdr {
-	struct ncsi_pkt_hdr common;
-	unsigned char reserved2[3];
-	unsigned char type;
-};
-
-struct ncsi_aen_lsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 oem_status;
-	__be32 checksum;
-	unsigned char pad[14];
-};
-
-struct ncsi_aen_hncdsc_pkt {
-	struct ncsi_aen_pkt_hdr aen;
-	__be32 status;
-	__be32 checksum;
-	unsigned char pad[18];
-};
-
-struct ncsi_aen_handler {
-	unsigned char type;
-	int payload;
-	int (*handler)(struct ncsi_dev_priv *, struct ncsi_aen_pkt_hdr *);
-};
-
-enum {
-	ncsi_dev_state_registered = 0,
-	ncsi_dev_state_functional = 256,
-	ncsi_dev_state_probe = 512,
-	ncsi_dev_state_config = 768,
-	ncsi_dev_state_suspend = 1024,
-};
-
-enum {
-	MLX_MC_RBT_SUPPORT = 1,
-	MLX_MC_RBT_AVL = 8,
-};
-
-enum {
-	ncsi_dev_state_major = 65280,
-	ncsi_dev_state_minor = 255,
-	ncsi_dev_state_probe_deselect = 513,
-	ncsi_dev_state_probe_package = 514,
-	ncsi_dev_state_probe_channel = 515,
-	ncsi_dev_state_probe_mlx_gma = 516,
-	ncsi_dev_state_probe_mlx_smaf = 517,
-	ncsi_dev_state_probe_cis = 518,
-	ncsi_dev_state_probe_gvi = 519,
-	ncsi_dev_state_probe_gc = 520,
-	ncsi_dev_state_probe_gls = 521,
-	ncsi_dev_state_probe_dp = 522,
-	ncsi_dev_state_config_sp = 769,
-	ncsi_dev_state_config_cis = 770,
-	ncsi_dev_state_config_oem_gma = 771,
-	ncsi_dev_state_config_clear_vids = 772,
-	ncsi_dev_state_config_svf = 773,
-	ncsi_dev_state_config_ev = 774,
-	ncsi_dev_state_config_sma = 775,
-	ncsi_dev_state_config_ebf = 776,
-	ncsi_dev_state_config_dgmf = 777,
-	ncsi_dev_state_config_ecnt = 778,
-	ncsi_dev_state_config_ec = 779,
-	ncsi_dev_state_config_ae = 780,
-	ncsi_dev_state_config_gls = 781,
-	ncsi_dev_state_config_done = 782,
-	ncsi_dev_state_suspend_select = 1025,
-	ncsi_dev_state_suspend_gls = 1026,
-	ncsi_dev_state_suspend_dcnt = 1027,
-	ncsi_dev_state_suspend_dc = 1028,
-	ncsi_dev_state_suspend_deselect = 1029,
-	ncsi_dev_state_suspend_done = 1030,
-};
-
-struct vlan_vid {
-	struct list_head list;
-	__be16 proto;
-	u16 vid;
-};
-
-struct ncsi_oem_gma_handler {
-	unsigned int mfr_id;
-	int (*handler)(struct ncsi_cmd_arg *);
-};
-
-enum ncsi_nl_commands {
-	NCSI_CMD_UNSPEC = 0,
-	NCSI_CMD_PKG_INFO = 1,
-	NCSI_CMD_SET_INTERFACE = 2,
-	NCSI_CMD_CLEAR_INTERFACE = 3,
-	NCSI_CMD_SEND_CMD = 4,
-	NCSI_CMD_SET_PACKAGE_MASK = 5,
-	NCSI_CMD_SET_CHANNEL_MASK = 6,
-	__NCSI_CMD_AFTER_LAST = 7,
-	NCSI_CMD_MAX = 6,
-};
-
-enum ncsi_nl_attrs {
-	NCSI_ATTR_UNSPEC = 0,
-	NCSI_ATTR_IFINDEX = 1,
-	NCSI_ATTR_PACKAGE_LIST = 2,
-	NCSI_ATTR_PACKAGE_ID = 3,
-	NCSI_ATTR_CHANNEL_ID = 4,
-	NCSI_ATTR_DATA = 5,
-	NCSI_ATTR_MULTI_FLAG = 6,
-	NCSI_ATTR_PACKAGE_MASK = 7,
-	NCSI_ATTR_CHANNEL_MASK = 8,
-	__NCSI_ATTR_AFTER_LAST = 9,
-	NCSI_ATTR_MAX = 8,
-};
-
-enum ncsi_nl_pkg_attrs {
-	NCSI_PKG_ATTR_UNSPEC = 0,
-	NCSI_PKG_ATTR = 1,
-	NCSI_PKG_ATTR_ID = 2,
-	NCSI_PKG_ATTR_FORCED = 3,
-	NCSI_PKG_ATTR_CHANNEL_LIST = 4,
-	__NCSI_PKG_ATTR_AFTER_LAST = 5,
-	NCSI_PKG_ATTR_MAX = 4,
-};
-
-enum ncsi_nl_channel_attrs {
-	NCSI_CHANNEL_ATTR_UNSPEC = 0,
-	NCSI_CHANNEL_ATTR = 1,
-	NCSI_CHANNEL_ATTR_ID = 2,
-	NCSI_CHANNEL_ATTR_VERSION_MAJOR = 3,
-	NCSI_CHANNEL_ATTR_VERSION_MINOR = 4,
-	NCSI_CHANNEL_ATTR_VERSION_STR = 5,
-	NCSI_CHANNEL_ATTR_LINK_STATE = 6,
-	NCSI_CHANNEL_ATTR_ACTIVE = 7,
-	NCSI_CHANNEL_ATTR_FORCED = 8,
-	NCSI_CHANNEL_ATTR_VLAN_LIST = 9,
-	NCSI_CHANNEL_ATTR_VLAN_ID = 10,
-	__NCSI_CHANNEL_ATTR_AFTER_LAST = 11,
-	NCSI_CHANNEL_ATTR_MAX = 10,
-};
-
-struct sockaddr_xdp {
-	__u16 sxdp_family;
-	__u16 sxdp_flags;
-	__u32 sxdp_ifindex;
-	__u32 sxdp_queue_id;
-	__u32 sxdp_shared_umem_fd;
-};
-
-struct xdp_ring_offset {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
-	__u64 flags;
-};
-
-struct xdp_mmap_offsets {
-	struct xdp_ring_offset rx;
-	struct xdp_ring_offset tx;
-	struct xdp_ring_offset fr;
-	struct xdp_ring_offset cr;
-};
-
-struct xdp_umem_reg {
-	__u64 addr;
-	__u64 len;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 flags;
-};
-
-struct xdp_statistics {
-	__u64 rx_dropped;
-	__u64 rx_invalid_descs;
-	__u64 tx_invalid_descs;
-	__u64 rx_ring_full;
-	__u64 rx_fill_ring_empty_descs;
-	__u64 tx_ring_empty_descs;
-};
-
-struct xdp_options {
-	__u32 flags;
-};
-
-struct xdp_desc {
-	__u64 addr;
-	__u32 len;
-	__u32 options;
-};
-
-struct xdp_ring;
-
-struct xsk_queue {
-	u32 ring_mask;
-	u32 nentries;
-	u32 cached_prod;
-	u32 cached_cons;
-	struct xdp_ring *ring;
-	u64 invalid_descs;
-	u64 queue_empty_descs;
-};
-
-struct xdp_ring_offset_v1 {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
-};
-
-struct xdp_mmap_offsets_v1 {
-	struct xdp_ring_offset_v1 rx;
-	struct xdp_ring_offset_v1 tx;
-	struct xdp_ring_offset_v1 fr;
-	struct xdp_ring_offset_v1 cr;
-};
-
-struct xsk_map_node {
-	struct list_head node;
-	struct xsk_map *map;
-	struct xdp_sock **map_entry;
-};
-
-struct xdp_ring {
-	u32 producer;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 pad;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 consumer;
-	u32 flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_rxtx_ring {
-	struct xdp_ring ptrs;
-	struct xdp_desc desc[0];
-};
-
-struct xdp_umem_ring {
-	struct xdp_ring ptrs;
-	u64 desc[0];
-};
-
-struct xsk_dma_map {
-	dma_addr_t *dma_pages;
-	struct device *dev;
-	struct net_device *netdev;
-	refcount_t users;
-	struct list_head list;
-	u32 dma_pages_cnt;
-	bool dma_need_sync;
-};
-
-struct xdp_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_show;
-	__u32 xdiag_cookie[2];
-};
-
-struct xdp_diag_msg {
-	__u8 xdiag_family;
-	__u8 xdiag_type;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_cookie[2];
-};
-
-enum {
-	XDP_DIAG_NONE = 0,
-	XDP_DIAG_INFO = 1,
-	XDP_DIAG_UID = 2,
-	XDP_DIAG_RX_RING = 3,
-	XDP_DIAG_TX_RING = 4,
-	XDP_DIAG_UMEM = 5,
-	XDP_DIAG_UMEM_FILL_RING = 6,
-	XDP_DIAG_UMEM_COMPLETION_RING = 7,
-	XDP_DIAG_MEMINFO = 8,
-	XDP_DIAG_STATS = 9,
-	__XDP_DIAG_MAX = 10,
-};
-
-struct xdp_diag_info {
-	__u32 ifindex;
-	__u32 queue_id;
-};
-
-struct xdp_diag_ring {
-	__u32 entries;
-};
-
-struct xdp_diag_umem {
-	__u64 size;
-	__u32 id;
-	__u32 num_pages;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 ifindex;
-	__u32 queue_id;
-	__u32 flags;
-	__u32 refs;
-};
-
-struct xdp_diag_stats {
-	__u64 n_rx_dropped;
-	__u64 n_rx_invalid;
-	__u64 n_rx_full;
-	__u64 n_fill_ring_empty;
-	__u64 n_tx_invalid;
-	__u64 n_tx_ring_empty;
-};
-
-struct mptcp_mib {
-	long unsigned int mibs[23];
-};
-
-struct mptcp_options_received {
-	u64 sndr_key;
-	u64 rcvr_key;
-	u64 data_ack;
-	u64 data_seq;
-	u32 subflow_seq;
-	u16 data_len;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 dss: 1;
-	u16 add_addr: 1;
-	u16 rm_addr: 1;
-	u16 family: 4;
-	u16 echo: 1;
-	u16 backup: 1;
-	u32 token;
-	u32 nonce;
-	u64 thmac;
-	u8 hmac[20];
-	u8 join_id;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-	u8 addr_id;
-	u8 rm_id;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-	u64 ahmac;
-	u16 port;
-};
-
-struct mptcp_addr_info {
-	sa_family_t family;
-	__be16 port;
-	u8 id;
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
 	u8 flags;
-	int ifindex;
 	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
+		atomic_t rr_cur;
+		struct bpf_prog *bpf_prog;
 	};
-};
-
-enum mptcp_pm_status {
-	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
-	MPTCP_PM_RM_ADDR_RECEIVED = 1,
-	MPTCP_PM_ESTABLISHED = 2,
-	MPTCP_PM_SUBFLOW_ESTABLISHED = 3,
-};
-
-struct mptcp_pm_data {
-	struct mptcp_addr_info local;
-	struct mptcp_addr_info remote;
-	struct list_head anno_list;
-	spinlock_t lock;
-	bool add_addr_signal;
-	bool rm_addr_signal;
-	bool server_side;
-	bool work_pending;
-	bool accept_addr;
-	bool accept_subflow;
-	bool add_addr_echo;
-	u8 add_addr_signaled;
-	u8 add_addr_accepted;
-	u8 local_addr_used;
-	u8 subflows;
-	u8 add_addr_signal_max;
-	u8 add_addr_accept_max;
-	u8 local_addr_max;
-	u8 subflows_max;
-	u8 status;
-	u8 rm_id;
-};
-
-struct mptcp_data_frag {
 	struct list_head list;
-	u64 data_seq;
-	int data_len;
-	int offset;
-	int overhead;
-	struct page *page;
-};
-
-struct mptcp_sock {
-	struct inet_connection_sock sk;
-	u64 local_key;
-	u64 remote_key;
-	u64 write_seq;
-	u64 ack_seq;
-	u64 rcv_data_fin_seq;
-	struct sock *last_snd;
-	int snd_burst;
-	atomic64_t snd_una;
-	long unsigned int timer_ival;
-	u32 token;
-	long unsigned int flags;
-	bool can_ack;
-	bool fully_established;
-	bool rcv_data_fin;
-	bool snd_data_fin_enable;
-	bool use_64bit_ack;
-	spinlock_t join_list_lock;
-	struct work_struct work;
-	struct sk_buff *ooo_last_skb;
-	struct rb_root out_of_order_queue;
-	struct list_head conn_list;
-	struct list_head rtx_queue;
-	struct list_head join_list;
-	struct skb_ext *cached_ext;
-	struct socket *subflow;
-	struct sock *first;
-	struct mptcp_pm_data pm;
-	struct {
-		u32 space;
-		u32 copied;
-		u64 time;
-		u64 rtt_us;
-	} rcvq_space;
-};
-
-struct mptcp_subflow_request_sock {
-	struct tcp_request_sock sk;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 backup: 1;
-	u8 local_id;
-	u8 remote_id;
-	u64 local_key;
-	u64 idsn;
-	u32 token;
-	u32 ssn_offset;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_nonce;
-	struct mptcp_sock *msk;
-	struct hlist_nulls_node token_node;
-};
-
-enum mptcp_data_avail {
-	MPTCP_SUBFLOW_NODATA = 0,
-	MPTCP_SUBFLOW_DATA_AVAIL = 1,
-	MPTCP_SUBFLOW_OOO_DATA = 2,
-};
-
-struct mptcp_subflow_context {
-	struct list_head node;
-	u64 local_key;
-	u64 remote_key;
-	u64 idsn;
-	u64 map_seq;
-	u32 snd_isn;
-	u32 token;
-	u32 rel_write_seq;
-	u32 map_subflow_seq;
-	u32 ssn_offset;
-	u32 map_data_len;
-	u32 request_mptcp: 1;
-	u32 request_join: 1;
-	u32 request_bkup: 1;
-	u32 mp_capable: 1;
-	u32 mp_join: 1;
-	u32 fully_established: 1;
-	u32 pm_notified: 1;
-	u32 conn_finished: 1;
-	u32 map_valid: 1;
-	u32 mpc_map: 1;
-	u32 backup: 1;
-	u32 rx_eof: 1;
-	u32 can_ack: 1;
-	enum mptcp_data_avail data_avail;
-	u32 remote_nonce;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_token;
-	u8 hmac[20];
-	u8 local_id;
-	u8 remote_id;
-	struct sock *tcp_sock;
-	struct sock *conn;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	void (*tcp_data_ready)(struct sock *);
-	void (*tcp_state_change)(struct sock *);
-	void (*tcp_write_space)(struct sock *);
-	struct callback_head rcu;
-};
-
-enum linux_mptcp_mib_field {
-	MPTCP_MIB_NUM = 0,
-	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
-	MPTCP_MIB_MPCAPABLEPASSIVEACK = 2,
-	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 3,
-	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 4,
-	MPTCP_MIB_RETRANSSEGS = 5,
-	MPTCP_MIB_JOINNOTOKEN = 6,
-	MPTCP_MIB_JOINSYNRX = 7,
-	MPTCP_MIB_JOINSYNACKRX = 8,
-	MPTCP_MIB_JOINSYNACKMAC = 9,
-	MPTCP_MIB_JOINACKRX = 10,
-	MPTCP_MIB_JOINACKMAC = 11,
-	MPTCP_MIB_DSSNOMATCH = 12,
-	MPTCP_MIB_INFINITEMAPRX = 13,
-	MPTCP_MIB_OFOQUEUETAIL = 14,
-	MPTCP_MIB_OFOQUEUE = 15,
-	MPTCP_MIB_OFOMERGE = 16,
-	MPTCP_MIB_NODSSWINDOW = 17,
-	MPTCP_MIB_DUPDATA = 18,
-	MPTCP_MIB_ADDADDR = 19,
-	MPTCP_MIB_ECHOADD = 20,
-	MPTCP_MIB_RMADDR = 21,
-	MPTCP_MIB_RMSUBFLOW = 22,
-	__MPTCP_MIB_MAX = 23,
-};
-
-struct mptcp_skb_cb {
-	u64 map_seq;
-	u64 end_seq;
-	u32 offset;
-};
-
-struct subflow_send_info {
-	struct sock *ssk;
-	u64 ratio;
-};
-
-enum mapping_status {
-	MAPPING_OK = 0,
-	MAPPING_INVALID = 1,
-	MAPPING_EMPTY = 2,
-	MAPPING_DATA_FIN = 3,
-	MAPPING_DUMMY = 4,
-};
-
-struct token_bucket {
 	spinlock_t lock;
-	int chain_len;
-	struct hlist_nulls_head req_chain;
-	struct hlist_nulls_head msk_chain;
+	refcount_t sk_ref;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-struct mptcp_pernet {
-	struct ctl_table_header *ctl_table_hdr;
-	int mptcp_enabled;
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[32];
 };
 
-enum {
-	INET_ULP_INFO_UNSPEC = 0,
-	INET_ULP_INFO_NAME = 1,
-	INET_ULP_INFO_TLS = 2,
-	INET_ULP_INFO_MPTCP = 3,
-	__INET_ULP_INFO_MAX = 4,
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned int running;
+	unsigned int auxdata: 1;
+	unsigned int origdev: 1;
+	unsigned int has_vnet_hdr: 1;
+	unsigned int tp_loss: 1;
+	unsigned int tp_tx_has_off: 1;
+	int pressure;
+	int ifindex;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device *cached_dev;
+	int (*xmit)(struct sk_buff *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-enum {
-	MPTCP_SUBFLOW_ATTR_UNSPEC = 0,
-	MPTCP_SUBFLOW_ATTR_TOKEN_REM = 1,
-	MPTCP_SUBFLOW_ATTR_TOKEN_LOC = 2,
-	MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ = 3,
-	MPTCP_SUBFLOW_ATTR_MAP_SEQ = 4,
-	MPTCP_SUBFLOW_ATTR_MAP_SFSEQ = 5,
-	MPTCP_SUBFLOW_ATTR_SSN_OFFSET = 6,
-	MPTCP_SUBFLOW_ATTR_MAP_DATALEN = 7,
-	MPTCP_SUBFLOW_ATTR_FLAGS = 8,
-	MPTCP_SUBFLOW_ATTR_ID_REM = 9,
-	MPTCP_SUBFLOW_ATTR_ID_LOC = 10,
-	MPTCP_SUBFLOW_ATTR_PAD = 11,
-	__MPTCP_SUBFLOW_ATTR_MAX = 12,
+struct packet_mreq_max {
+	int mr_ifindex;
+	short unsigned int mr_type;
+	short unsigned int mr_alen;
+	unsigned char mr_address[32];
 };
 
-enum {
-	MPTCP_PM_ATTR_UNSPEC = 0,
-	MPTCP_PM_ATTR_ADDR = 1,
-	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
-	MPTCP_PM_ATTR_SUBFLOWS = 3,
-	__MPTCP_PM_ATTR_MAX = 4,
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
 };
 
-enum {
-	MPTCP_PM_ADDR_ATTR_UNSPEC = 0,
-	MPTCP_PM_ADDR_ATTR_FAMILY = 1,
-	MPTCP_PM_ADDR_ATTR_ID = 2,
-	MPTCP_PM_ADDR_ATTR_ADDR4 = 3,
-	MPTCP_PM_ADDR_ATTR_ADDR6 = 4,
-	MPTCP_PM_ADDR_ATTR_PORT = 5,
-	MPTCP_PM_ADDR_ATTR_FLAGS = 6,
-	MPTCP_PM_ADDR_ATTR_IF_IDX = 7,
-	__MPTCP_PM_ADDR_ATTR_MAX = 8,
-};
-
-enum {
-	MPTCP_PM_CMD_UNSPEC = 0,
-	MPTCP_PM_CMD_ADD_ADDR = 1,
-	MPTCP_PM_CMD_DEL_ADDR = 2,
-	MPTCP_PM_CMD_GET_ADDR = 3,
-	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
-	MPTCP_PM_CMD_SET_LIMITS = 5,
-	MPTCP_PM_CMD_GET_LIMITS = 6,
-	__MPTCP_PM_CMD_AFTER_LAST = 7,
-};
-
-struct mptcp_pm_addr_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct callback_head rcu;
-};
-
-struct mptcp_pm_add_entry {
-	struct list_head list;
-	struct mptcp_addr_info addr;
-	struct timer_list add_timer;
-	struct mptcp_sock *sock;
-	u8 retrans_times;
-};
-
-struct pm_nl_pernet {
-	spinlock_t lock;
-	struct list_head local_addr_list;
-	unsigned int addrs;
-	unsigned int add_addr_signal_max;
-	unsigned int add_addr_accept_max;
-	unsigned int local_addr_max;
-	unsigned int subflows_max;
-	unsigned int next_id;
-};
-
-struct join_entry {
-	u32 token;
-	u32 remote_nonce;
-	u32 local_nonce;
-	u8 join_id;
-	u8 local_id;
-	u8 backup;
-	u8 valid;
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
 };
 
 #ifndef BPF_NO_PRESERVE_ACCESS_INDEX
diff --git a/libbpf-tools/readahead.bpf.c b/libbpf-tools/readahead.bpf.c
index b9423c3..89863e6 100644
--- a/libbpf-tools/readahead.bpf.c
+++ b/libbpf-tools/readahead.bpf.c
@@ -13,7 +13,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, u32);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } in_readahead SEC(".maps");
 
 struct {
@@ -21,7 +20,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct page *);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } birth SEC(".maps");
 
 struct hist hist = {};
diff --git a/libbpf-tools/readahead.c b/libbpf-tools/readahead.c
index 1707938..13ea4e6 100644
--- a/libbpf-tools/readahead.c
+++ b/libbpf-tools/readahead.c
@@ -31,7 +31,7 @@
 "USAGE: readahead [--help] [-d DURATION]\n"
 "\n"
 "EXAMPLES:\n"
-"    readahead              # summarize on-CPU time as a histogram"
+"    readahead              # summarize on-CPU time as a histogram\n"
 "    readahead -d 10        # trace for 10 seconds only\n";
 
 static const struct argp_option opts[] = {
@@ -109,7 +109,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = readahead_bpf__open();
diff --git a/libbpf-tools/riscv/vmlinux.h b/libbpf-tools/riscv/vmlinux.h
new file mode 120000
index 0000000..4999e54
--- /dev/null
+++ b/libbpf-tools/riscv/vmlinux.h
@@ -0,0 +1 @@
+vmlinux_602.h
\ No newline at end of file
diff --git a/libbpf-tools/riscv/vmlinux_602.h b/libbpf-tools/riscv/vmlinux_602.h
new file mode 100644
index 0000000..39bcff9
--- /dev/null
+++ b/libbpf-tools/riscv/vmlinux_602.h
@@ -0,0 +1,146849 @@
+#ifndef __VMLINUX_H__
+#define __VMLINUX_H__
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
+#endif
+
+typedef unsigned char __u8;
+
+typedef short unsigned int __u16;
+
+typedef int __s32;
+
+typedef unsigned int __u32;
+
+typedef long long int __s64;
+
+typedef long long unsigned int __u64;
+
+typedef __u8 u8;
+
+typedef __u16 u16;
+
+typedef __s32 s32;
+
+typedef __u32 u32;
+
+typedef __s64 s64;
+
+typedef __u64 u64;
+
+typedef long int __kernel_long_t;
+
+typedef long unsigned int __kernel_ulong_t;
+
+typedef int __kernel_pid_t;
+
+typedef unsigned int __kernel_uid32_t;
+
+typedef __kernel_ulong_t __kernel_size_t;
+
+typedef long long int __kernel_time64_t;
+
+typedef __kernel_long_t __kernel_clock_t;
+
+typedef int __kernel_timer_t;
+
+typedef int __kernel_clockid_t;
+
+typedef __kernel_pid_t pid_t;
+
+typedef __kernel_clockid_t clockid_t;
+
+typedef __kernel_size_t size_t;
+
+typedef unsigned int gfp_t;
+
+typedef struct {
+	int counter;
+} atomic_t;
+
+typedef struct {
+	s64 counter;
+} atomic64_t;
+
+struct list_head {
+	struct list_head *next;
+	struct list_head *prev;
+};
+
+struct hlist_node;
+
+struct hlist_head {
+	struct hlist_node *first;
+};
+
+struct hlist_node {
+	struct hlist_node *next;
+	struct hlist_node **pprev;
+};
+
+struct callback_head {
+	struct callback_head *next;
+	void (*func)(struct callback_head *);
+};
+
+typedef __u32 Elf32_Word;
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct kernel_symbol {
+	long unsigned int value;
+	const char *name;
+	const char *namespace;
+};
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+typedef atomic_t arch_spinlock_t;
+
+struct raw_spinlock {
+	arch_spinlock_t raw_lock;
+};
+
+typedef struct raw_spinlock raw_spinlock_t;
+
+struct pi_entry {
+	const char *fmt;
+	const char *func;
+	const char *file;
+	unsigned int line;
+	const char *level;
+	const char *subsys_fmt_prefix;
+} __attribute__((packed));
+
+struct thread_info {
+	long unsigned int flags;
+	int preempt_count;
+	long int kernel_sp;
+	long int user_sp;
+	int cpu;
+};
+
+struct refcount_struct {
+	atomic_t refs;
+};
+
+typedef struct refcount_struct refcount_t;
+
+struct llist_node {
+	struct llist_node *next;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
+	union {
+		unsigned int u_flags;
+		atomic_t a_flags;
+	};
+	u16 src;
+	u16 dst;
+};
+
+struct load_weight {
+	long unsigned int weight;
+	u32 inv_weight;
+};
+
+struct rb_node {
+	long unsigned int __rb_parent_color;
+	struct rb_node *rb_right;
+	struct rb_node *rb_left;
+};
+
+struct util_est {
+	unsigned int enqueued;
+	unsigned int ewma;
+};
+
+struct sched_avg {
+	u64 last_update_time;
+	u64 load_sum;
+	u64 runnable_sum;
+	u32 util_sum;
+	u32 period_contrib;
+	long unsigned int load_avg;
+	long unsigned int runnable_avg;
+	long unsigned int util_avg;
+	struct util_est util_est;
+};
+
+struct cfs_rq;
+
+struct sched_entity {
+	struct load_weight load;
+	struct rb_node run_node;
+	struct list_head group_node;
+	unsigned int on_rq;
+	u64 exec_start;
+	u64 sum_exec_runtime;
+	u64 vruntime;
+	u64 prev_sum_exec_runtime;
+	u64 nr_migrations;
+	int depth;
+	struct sched_entity *parent;
+	struct cfs_rq *cfs_rq;
+	struct cfs_rq *my_q;
+	long unsigned int runnable_weight;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+};
+
+struct rt_rq;
+
+struct sched_rt_entity {
+	struct list_head run_list;
+	long unsigned int timeout;
+	long unsigned int watchdog_stamp;
+	unsigned int time_slice;
+	short unsigned int on_rq;
+	short unsigned int on_list;
+	struct sched_rt_entity *back;
+	struct sched_rt_entity *parent;
+	struct rt_rq *rt_rq;
+	struct rt_rq *my_q;
+};
+
+typedef s64 ktime_t;
+
+struct timerqueue_node {
+	struct rb_node node;
+	ktime_t expires;
+};
+
+enum hrtimer_restart {
+	HRTIMER_NORESTART = 0,
+	HRTIMER_RESTART = 1,
+};
+
+struct hrtimer_clock_base;
+
+struct hrtimer {
+	struct timerqueue_node node;
+	ktime_t _softexpires;
+	enum hrtimer_restart (*function)(struct hrtimer *);
+	struct hrtimer_clock_base *base;
+	u8 state;
+	u8 is_rel;
+	u8 is_soft;
+	u8 is_hard;
+};
+
+struct sched_dl_entity {
+	struct rb_node rb_node;
+	u64 dl_runtime;
+	u64 dl_deadline;
+	u64 dl_period;
+	u64 dl_bw;
+	u64 dl_density;
+	s64 runtime;
+	u64 deadline;
+	unsigned int flags;
+	unsigned int dl_throttled: 1;
+	unsigned int dl_yielded: 1;
+	unsigned int dl_non_contending: 1;
+	unsigned int dl_overrun: 1;
+	struct hrtimer dl_timer;
+	struct hrtimer inactive_timer;
+	struct sched_dl_entity *pi_se;
+};
+
+struct sched_statistics {};
+
+struct cpumask {
+	long unsigned int bits[1];
+};
+
+typedef struct cpumask cpumask_t;
+
+union rcu_special {
+	struct {
+		u8 blocked;
+		u8 need_qs;
+		u8 exp_hint;
+		u8 need_mb;
+	} b;
+	u32 s;
+};
+
+struct sched_info {};
+
+struct plist_node {
+	int prio;
+	struct list_head prio_list;
+	struct list_head node_list;
+};
+
+enum timespec_type {
+	TT_NONE = 0,
+	TT_NATIVE = 1,
+	TT_COMPAT = 2,
+};
+
+struct __kernel_timespec;
+
+struct old_timespec32;
+
+struct pollfd;
+
+struct restart_block {
+	long unsigned int arch_data;
+	long int (*fn)(struct restart_block *);
+	union {
+		struct {
+			u32 *uaddr;
+			u32 val;
+			u32 flags;
+			u32 bitset;
+			u64 time;
+			u32 *uaddr2;
+		} futex;
+		struct {
+			clockid_t clockid;
+			enum timespec_type type;
+			union {
+				struct __kernel_timespec *rmtp;
+				struct old_timespec32 *compat_rmtp;
+			};
+			u64 expires;
+		} nanosleep;
+		struct {
+			struct pollfd *ufds;
+			int nfds;
+			int has_timeout;
+			long unsigned int tv_sec;
+			long unsigned int tv_nsec;
+		} poll;
+	};
+};
+
+struct prev_cputime {
+	u64 utime;
+	u64 stime;
+	raw_spinlock_t lock;
+};
+
+struct rb_root {
+	struct rb_node *rb_node;
+};
+
+struct rb_root_cached {
+	struct rb_root rb_root;
+	struct rb_node *rb_leftmost;
+};
+
+struct timerqueue_head {
+	struct rb_root_cached rb_root;
+};
+
+struct posix_cputimer_base {
+	u64 nextevt;
+	struct timerqueue_head tqhead;
+};
+
+struct posix_cputimers {
+	struct posix_cputimer_base bases[3];
+	unsigned int timers_active;
+	unsigned int expiry_active;
+};
+
+struct posix_cputimers_work {
+	struct callback_head work;
+	unsigned int scheduled;
+};
+
+struct sem_undo_list;
+
+struct sysv_sem {
+	struct sem_undo_list *undo_list;
+};
+
+struct sysv_shm {
+	struct list_head shm_clist;
+};
+
+typedef struct {
+	long unsigned int sig[1];
+} sigset_t;
+
+struct sigpending {
+	struct list_head list;
+	sigset_t signal;
+};
+
+struct seccomp_filter;
+
+struct seccomp {
+	int mode;
+	atomic_t filter_count;
+	struct seccomp_filter *filter;
+};
+
+struct syscall_user_dispatch {};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
+struct wake_q_node {
+	struct wake_q_node *next;
+};
+
+struct task_io_accounting {};
+
+typedef struct {
+	long unsigned int bits[1];
+} nodemask_t;
+
+struct seqcount {
+	unsigned int sequence;
+};
+
+typedef struct seqcount seqcount_t;
+
+struct seqcount_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_spinlock seqcount_spinlock_t;
+
+typedef atomic64_t atomic_long_t;
+
+struct optimistic_spin_queue {
+	atomic_t tail;
+};
+
+struct mutex {
+	atomic_long_t owner;
+	raw_spinlock_t wait_lock;
+	struct optimistic_spin_queue osq;
+	struct list_head wait_list;
+};
+
+struct tlbflush_unmap_batch {};
+
+struct page;
+
+struct page_frag {
+	struct page *page;
+	__u32 offset;
+	__u32 size;
+};
+
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	long unsigned int expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
+};
+
+struct llist_head {
+	struct llist_node *first;
+};
+
+struct __riscv_d_ext_state {
+	__u64 f[32];
+	__u32 fcsr;
+};
+
+struct thread_struct {
+	long unsigned int ra;
+	long unsigned int sp;
+	long unsigned int s[12];
+	struct __riscv_d_ext_state fstate;
+	long unsigned int bad_cause;
+};
+
+struct sched_class;
+
+struct task_group;
+
+struct mm_struct;
+
+struct pid;
+
+struct completion;
+
+struct cred;
+
+struct key;
+
+struct nameidata;
+
+struct fs_struct;
+
+struct files_struct;
+
+struct io_uring_task;
+
+struct nsproxy;
+
+struct signal_struct;
+
+struct sighand_struct;
+
+struct rt_mutex_waiter;
+
+struct bio_list;
+
+struct blk_plug;
+
+struct reclaim_state;
+
+struct backing_dev_info;
+
+struct io_context;
+
+struct capture_control;
+
+struct kernel_siginfo;
+
+typedef struct kernel_siginfo kernel_siginfo_t;
+
+struct css_set;
+
+struct robust_list_head;
+
+struct compat_robust_list_head;
+
+struct futex_pi_state;
+
+struct perf_event_context;
+
+struct rseq;
+
+struct pipe_inode_info;
+
+struct ftrace_ret_stack;
+
+struct mem_cgroup;
+
+struct request_queue;
+
+struct uprobe_task;
+
+struct vm_struct;
+
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
+struct task_struct {
+	struct thread_info thread_info;
+	unsigned int __state;
+	void *stack;
+	refcount_t usage;
+	unsigned int flags;
+	unsigned int ptrace;
+	int on_cpu;
+	struct __call_single_node wake_entry;
+	unsigned int wakee_flips;
+	long unsigned int wakee_flip_decay_ts;
+	struct task_struct *last_wakee;
+	int recent_used_cpu;
+	int wake_cpu;
+	int on_rq;
+	int prio;
+	int static_prio;
+	int normal_prio;
+	unsigned int rt_priority;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_entity se;
+	struct sched_rt_entity rt;
+	struct sched_dl_entity dl;
+	const struct sched_class *sched_class;
+	struct task_group *sched_task_group;
+	long: 64;
+	struct sched_statistics stats;
+	struct hlist_head preempt_notifiers;
+	unsigned int policy;
+	int nr_cpus_allowed;
+	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
+	cpumask_t cpus_mask;
+	void *migration_pending;
+	short unsigned int migration_disabled;
+	short unsigned int migration_flags;
+	int trc_reader_nesting;
+	int trc_ipi_to_cpu;
+	union rcu_special trc_reader_special;
+	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
+	struct sched_info sched_info;
+	struct list_head tasks;
+	struct plist_node pushable_tasks;
+	struct rb_node pushable_dl_tasks;
+	struct mm_struct *mm;
+	struct mm_struct *active_mm;
+	int exit_state;
+	int exit_code;
+	int exit_signal;
+	int pdeath_signal;
+	long unsigned int jobctl;
+	unsigned int personality;
+	unsigned int sched_reset_on_fork: 1;
+	unsigned int sched_contributes_to_load: 1;
+	unsigned int sched_migrated: 1;
+	int: 29;
+	unsigned int sched_remote_wakeup: 1;
+	unsigned int in_execve: 1;
+	unsigned int in_iowait: 1;
+	unsigned int in_user_fault: 1;
+	unsigned int brk_randomized: 1;
+	unsigned int no_cgroup_migration: 1;
+	unsigned int frozen: 1;
+	unsigned int use_memdelay: 1;
+	unsigned int in_eventfd: 1;
+	long unsigned int atomic_flags;
+	struct restart_block restart_block;
+	pid_t pid;
+	pid_t tgid;
+	long unsigned int stack_canary;
+	struct task_struct *real_parent;
+	struct task_struct *parent;
+	struct list_head children;
+	struct list_head sibling;
+	struct task_struct *group_leader;
+	struct list_head ptraced;
+	struct list_head ptrace_entry;
+	struct pid *thread_pid;
+	struct hlist_node pid_links[4];
+	struct list_head thread_group;
+	struct list_head thread_node;
+	struct completion *vfork_done;
+	int *set_child_tid;
+	int *clear_child_tid;
+	void *worker_private;
+	u64 utime;
+	u64 stime;
+	u64 gtime;
+	struct prev_cputime prev_cputime;
+	long unsigned int nvcsw;
+	long unsigned int nivcsw;
+	u64 start_time;
+	u64 start_boottime;
+	long unsigned int min_flt;
+	long unsigned int maj_flt;
+	struct posix_cputimers posix_cputimers;
+	struct posix_cputimers_work posix_cputimers_work;
+	const struct cred *ptracer_cred;
+	const struct cred *real_cred;
+	const struct cred *cred;
+	struct key *cached_requested_key;
+	char comm[16];
+	struct nameidata *nameidata;
+	struct sysv_sem sysvsem;
+	struct sysv_shm sysvshm;
+	struct fs_struct *fs;
+	struct files_struct *files;
+	struct io_uring_task *io_uring;
+	struct nsproxy *nsproxy;
+	struct signal_struct *signal;
+	struct sighand_struct *sighand;
+	sigset_t blocked;
+	sigset_t real_blocked;
+	sigset_t saved_sigmask;
+	struct sigpending pending;
+	long unsigned int sas_ss_sp;
+	size_t sas_ss_size;
+	unsigned int sas_ss_flags;
+	struct callback_head *task_works;
+	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
+	u64 parent_exec_id;
+	u64 self_exec_id;
+	spinlock_t alloc_lock;
+	raw_spinlock_t pi_lock;
+	struct wake_q_node wake_q;
+	struct rb_root_cached pi_waiters;
+	struct task_struct *pi_top_task;
+	struct rt_mutex_waiter *pi_blocked_on;
+	void *journal_info;
+	struct bio_list *bio_list;
+	struct blk_plug *plug;
+	struct reclaim_state *reclaim_state;
+	struct backing_dev_info *backing_dev_info;
+	struct io_context *io_context;
+	struct capture_control *capture_control;
+	long unsigned int ptrace_message;
+	kernel_siginfo_t *last_siginfo;
+	struct task_io_accounting ioac;
+	nodemask_t mems_allowed;
+	seqcount_spinlock_t mems_allowed_seq;
+	int cpuset_mem_spread_rotor;
+	int cpuset_slab_spread_rotor;
+	struct css_set *cgroups;
+	struct list_head cg_list;
+	struct robust_list_head *robust_list;
+	struct compat_robust_list_head *compat_robust_list;
+	struct list_head pi_state_list;
+	struct futex_pi_state *pi_state_cache;
+	struct mutex futex_exit_mutex;
+	unsigned int futex_state;
+	struct perf_event_context *perf_event_ctxp;
+	struct mutex perf_event_mutex;
+	struct list_head perf_event_list;
+	struct rseq *rseq;
+	u32 rseq_sig;
+	long unsigned int rseq_event_mask;
+	struct tlbflush_unmap_batch tlb_ubc;
+	union {
+		refcount_t rcu_users;
+		struct callback_head rcu;
+	};
+	struct pipe_inode_info *splice_pipe;
+	struct page_frag task_frag;
+	int nr_dirtied;
+	int nr_dirtied_pause;
+	long unsigned int dirty_paused_when;
+	u64 timer_slack_ns;
+	u64 default_timer_slack_ns;
+	int curr_ret_stack;
+	int curr_ret_depth;
+	struct ftrace_ret_stack *ret_stack;
+	long long unsigned int ftrace_timestamp;
+	atomic_t trace_overrun;
+	atomic_t tracing_graph_pause;
+	long unsigned int trace_recursion;
+	struct mem_cgroup *memcg_in_oom;
+	gfp_t memcg_oom_gfp_mask;
+	int memcg_oom_order;
+	unsigned int memcg_nr_pages_over_high;
+	struct mem_cgroup *active_memcg;
+	struct request_queue *throttle_queue;
+	struct uprobe_task *utask;
+	struct kmap_ctrl kmap_ctrl;
+	int pagefault_disabled;
+	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
+	struct vm_struct *stack_vm_area;
+	refcount_t stack_refcount;
+	struct bpf_local_storage *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	struct llist_head kretprobe_instances;
+	struct llist_head rethooks;
+	struct thread_struct thread;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct __kernel_timespec {
+	__kernel_time64_t tv_sec;
+	long long int tv_nsec;
+};
+
+typedef s32 old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t tv_sec;
+	s32 tv_nsec;
+};
+
+struct wait_queue_head {
+	spinlock_t lock;
+	struct list_head head;
+};
+
+typedef struct wait_queue_head wait_queue_head_t;
+
+enum pid_type {
+	PIDTYPE_PID = 0,
+	PIDTYPE_TGID = 1,
+	PIDTYPE_PGID = 2,
+	PIDTYPE_SID = 3,
+	PIDTYPE_MAX = 4,
+};
+
+struct pid_namespace;
+
+struct upid {
+	int nr;
+	struct pid_namespace *ns;
+};
+
+struct pid {
+	refcount_t count;
+	unsigned int level;
+	spinlock_t lock;
+	struct hlist_head tasks[4];
+	struct hlist_head inodes;
+	wait_queue_head_t wait_pidfd;
+	struct callback_head rcu;
+	struct upid numbers[1];
+};
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+struct seqcount_raw_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+
+struct hrtimer_cpu_base;
+
+struct hrtimer_clock_base {
+	struct hrtimer_cpu_base *cpu_base;
+	unsigned int index;
+	clockid_t clockid;
+	seqcount_raw_spinlock_t seq;
+	struct hrtimer *running;
+	struct timerqueue_head active;
+	ktime_t (*get_time)();
+	ktime_t offset;
+};
+
+struct hrtimer_cpu_base {
+	raw_spinlock_t lock;
+	unsigned int cpu;
+	unsigned int active_bases;
+	unsigned int clock_was_set_seq;
+	unsigned int hres_active: 1;
+	unsigned int in_hrtirq: 1;
+	unsigned int hang_detected: 1;
+	unsigned int softirq_activated: 1;
+	unsigned int nr_events;
+	short unsigned int nr_retries;
+	short unsigned int nr_hangs;
+	unsigned int max_hang_time;
+	ktime_t expires_next;
+	struct hrtimer *next_timer;
+	ktime_t softirq_expires_next;
+	struct hrtimer *softirq_next_timer;
+	struct hrtimer_clock_base clock_base[8];
+};
+
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
+};
+
+union sigval {
+	int sival_int;
+	void *sival_ptr;
+};
+
+typedef union sigval sigval_t;
+
+union __sifields {
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+	} _kill;
+	struct {
+		__kernel_timer_t _tid;
+		int _overrun;
+		sigval_t _sigval;
+		int _sys_private;
+	} _timer;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		sigval_t _sigval;
+	} _rt;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		int _status;
+		__kernel_clock_t _utime;
+		__kernel_clock_t _stime;
+	} _sigchld;
+	struct {
+		void *_addr;
+		union {
+			int _trapno;
+			short int _addr_lsb;
+			struct {
+				char _dummy_bnd[8];
+				void *_lower;
+				void *_upper;
+			} _addr_bnd;
+			struct {
+				char _dummy_pkey[8];
+				__u32 _pkey;
+			} _addr_pkey;
+			struct {
+				long unsigned int _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
+		};
+	} _sigfault;
+	struct {
+		long int _band;
+		int _fd;
+	} _sigpoll;
+	struct {
+		void *_call_addr;
+		int _syscall;
+		unsigned int _arch;
+	} _sigsys;
+};
+
+struct kernel_siginfo {
+	struct {
+		int si_signo;
+		int si_errno;
+		int si_code;
+		union __sifields _sifields;
+	};
+};
+
+enum rseq_cs_flags_bit {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+
+struct rseq {
+	__u32 cpu_id_start;
+	__u32 cpu_id;
+	__u64 rseq_cs;
+	__u32 flags;
+	long: 32;
+	long: 64;
+};
+
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+typedef _Bool bool;
+
+struct rq;
+
+struct rq_flags;
+
+struct affinity_context;
+
+struct sched_class {
+	void (*enqueue_task)(struct rq *, struct task_struct *, int);
+	void (*dequeue_task)(struct rq *, struct task_struct *, int);
+	void (*yield_task)(struct rq *);
+	bool (*yield_to_task)(struct rq *, struct task_struct *);
+	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
+	struct task_struct * (*pick_next_task)(struct rq *);
+	void (*put_prev_task)(struct rq *, struct task_struct *);
+	void (*set_next_task)(struct rq *, struct task_struct *, bool);
+	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
+	void (*migrate_task_rq)(struct task_struct *, int);
+	void (*task_woken)(struct rq *, struct task_struct *);
+	void (*set_cpus_allowed)(struct task_struct *, struct affinity_context *);
+	void (*rq_online)(struct rq *);
+	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
+	void (*task_tick)(struct rq *, struct task_struct *, int);
+	void (*task_fork)(struct task_struct *);
+	void (*task_dead)(struct task_struct *);
+	void (*switched_from)(struct rq *, struct task_struct *);
+	void (*switched_to)(struct rq *, struct task_struct *);
+	void (*prio_changed)(struct rq *, struct task_struct *, int);
+	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
+	void (*update_curr)(struct rq *);
+	void (*task_change_group)(struct task_struct *);
+};
+
+typedef __kernel_uid32_t uid_t;
+
+typedef struct {
+	uid_t val;
+} kuid_t;
+
+typedef unsigned int __kernel_gid32_t;
+
+typedef __kernel_gid32_t gid_t;
+
+typedef struct {
+	gid_t val;
+} kgid_t;
+
+struct kernel_cap_struct {
+	__u32 cap[2];
+};
+
+typedef struct kernel_cap_struct kernel_cap_t;
+
+struct user_struct;
+
+struct user_namespace;
+
+struct ucounts;
+
+struct group_info;
+
+struct cred {
+	atomic_t usage;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t suid;
+	kgid_t sgid;
+	kuid_t euid;
+	kgid_t egid;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	unsigned int securebits;
+	kernel_cap_t cap_inheritable;
+	kernel_cap_t cap_permitted;
+	kernel_cap_t cap_effective;
+	kernel_cap_t cap_bset;
+	kernel_cap_t cap_ambient;
+	unsigned char jit_keyring;
+	struct key *session_keyring;
+	struct key *process_keyring;
+	struct key *thread_keyring;
+	struct key *request_key_auth;
+	struct user_struct *user;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct group_info *group_info;
+	union {
+		int non_rcu;
+		struct callback_head rcu;
+	};
+};
+
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct net;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	atomic_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
+enum rseq_event_mask_bits {
+	RSEQ_EVENT_PREEMPT_BIT = 0,
+	RSEQ_EVENT_SIGNAL_BIT = 1,
+	RSEQ_EVENT_MIGRATE_BIT = 2,
+};
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct nsset {
+	unsigned int flags;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
+};
+
+struct proc_ns_operations {
+	const char *name;
+	const char *real_ns_name;
+	int type;
+	struct ns_common * (*get)(struct task_struct *);
+	void (*put)(struct ns_common *);
+	int (*install)(struct nsset *, struct ns_common *);
+	struct user_namespace * (*owner)(struct ns_common *);
+	struct ns_common * (*get_parent)(struct ns_common *);
+};
+
+enum {
+	PROC_ROOT_INO = 1,
+	PROC_IPC_INIT_INO = 4026531839,
+	PROC_UTS_INIT_INO = 4026531838,
+	PROC_USER_INIT_INO = 4026531837,
+	PROC_PID_INIT_INO = 4026531836,
+	PROC_CGROUP_INIT_INO = 4026531835,
+	PROC_TIME_INIT_INO = 4026531834,
+};
+
+typedef signed char __s8;
+
+typedef __s8 s8;
+
+enum {
+	false = 0,
+	true = 1,
+};
+
+typedef __kernel_long_t __kernel_ssize_t;
+
+typedef long long int __kernel_loff_t;
+
+typedef __u16 __le16;
+
+typedef __u32 __le32;
+
+typedef __u32 __be32;
+
+typedef __u64 __le64;
+
+typedef unsigned int __poll_t;
+
+typedef u32 __kernel_dev_t;
+
+typedef __kernel_dev_t dev_t;
+
+typedef short unsigned int umode_t;
+
+typedef __kernel_loff_t loff_t;
+
+typedef __kernel_ssize_t ssize_t;
+
+typedef s32 int32_t;
+
+typedef u32 uint32_t;
+
+typedef u64 sector_t;
+
+typedef u64 blkcnt_t;
+
+typedef unsigned int fmode_t;
+
+typedef u64 phys_addr_t;
+
+struct pt_regs {
+	long unsigned int epc;
+	long unsigned int ra;
+	long unsigned int sp;
+	long unsigned int gp;
+	long unsigned int tp;
+	long unsigned int t0;
+	long unsigned int t1;
+	long unsigned int t2;
+	long unsigned int s0;
+	long unsigned int s1;
+	long unsigned int a0;
+	long unsigned int a1;
+	long unsigned int a2;
+	long unsigned int a3;
+	long unsigned int a4;
+	long unsigned int a5;
+	long unsigned int a6;
+	long unsigned int a7;
+	long unsigned int s2;
+	long unsigned int s3;
+	long unsigned int s4;
+	long unsigned int s5;
+	long unsigned int s6;
+	long unsigned int s7;
+	long unsigned int s8;
+	long unsigned int s9;
+	long unsigned int s10;
+	long unsigned int s11;
+	long unsigned int t3;
+	long unsigned int t4;
+	long unsigned int t5;
+	long unsigned int t6;
+	long unsigned int status;
+	long unsigned int badaddr;
+	long unsigned int cause;
+	long unsigned int orig_a0;
+};
+
+struct lock_class_key {};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct dentry;
+
+struct super_block;
+
+struct module;
+
+struct file_system_type {
+	const char *name;
+	int fs_flags;
+	int (*init_fs_context)(struct fs_context *);
+	const struct fs_parameter_spec *parameters;
+	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
+	void (*kill_sb)(struct super_block *);
+	struct module *owner;
+	struct file_system_type *next;
+	struct hlist_head fs_supers;
+	struct lock_class_key s_lock_key;
+	struct lock_class_key s_umount_key;
+	struct lock_class_key s_vfs_rename_key;
+	struct lock_class_key s_writers_key[3];
+	struct lock_class_key i_lock_key;
+	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
+	struct lock_class_key i_mutex_dir_key;
+};
+
+struct qrwlock {
+	union {
+		atomic_t cnts;
+		struct {
+			u8 wlocked;
+			u8 __lstate[3];
+		};
+	};
+	arch_spinlock_t wait_lock;
+};
+
+typedef struct qrwlock arch_rwlock_t;
+
+struct lockdep_map {};
+
+struct ratelimit_state {
+	raw_spinlock_t lock;
+	int interval;
+	int burst;
+	int printed;
+	int missed;
+	long unsigned int begin;
+	long unsigned int flags;
+};
+
+typedef void *fl_owner_t;
+
+struct file;
+
+struct kiocb;
+
+struct iov_iter;
+
+struct io_comp_batch;
+
+struct dir_context;
+
+struct poll_table_struct;
+
+struct vm_area_struct;
+
+struct inode;
+
+struct file_lock;
+
+struct seq_file;
+
+struct io_uring_cmd;
+
+struct file_operations {
+	struct module *owner;
+	loff_t (*llseek)(struct file *, loff_t, int);
+	ssize_t (*read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
+	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
+	int (*iterate)(struct file *, struct dir_context *);
+	int (*iterate_shared)(struct file *, struct dir_context *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int mmap_supported_flags;
+	int (*open)(struct inode *, struct file *);
+	int (*flush)(struct file *, fl_owner_t);
+	int (*release)(struct inode *, struct file *);
+	int (*fsync)(struct file *, loff_t, loff_t, int);
+	int (*fasync)(int, struct file *, int);
+	int (*lock)(struct file *, int, struct file_lock *);
+	ssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int);
+	long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+	int (*check_flags)(int);
+	int (*flock)(struct file *, int, struct file_lock *);
+	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	int (*setlease)(struct file *, long int, struct file_lock **, void **);
+	long int (*fallocate)(struct file *, int, loff_t, loff_t);
+	void (*show_fdinfo)(struct seq_file *, struct file *);
+	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
+	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
+	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
+	int (*uring_cmd_iopoll)(struct io_uring_cmd *, struct io_comp_batch *, unsigned int);
+};
+
+struct static_call_key {
+	void *func;
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	short unsigned int line;
+	short unsigned int flags;
+};
+
+typedef __s64 time64_t;
+
+struct timespec64 {
+	time64_t tv_sec;
+	long int tv_nsec;
+};
+
+struct pollfd {
+	int fd;
+	short int events;
+	short int revents;
+};
+
+typedef struct {
+	long unsigned int pgd;
+} pgd_t;
+
+typedef struct {
+	long unsigned int pte;
+} pte_t;
+
+typedef struct {
+	long unsigned int pgprot;
+} pgprot_t;
+
+typedef struct page *pgtable_t;
+
+struct address_space;
+
+struct page_pool;
+
+struct dev_pagemap;
+
+struct page {
+	long unsigned int flags;
+	union {
+		struct {
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
+			struct address_space *mapping;
+			union {
+				long unsigned int index;
+				long unsigned int share;
+			};
+			long unsigned int private;
+		};
+		struct {
+			long unsigned int pp_magic;
+			struct page_pool *pp;
+			long unsigned int _pp_mapping_pad;
+			long unsigned int dma_addr;
+			union {
+				long unsigned int dma_addr_upper;
+				atomic_long_t pp_frag_count;
+			};
+		};
+		struct {
+			long unsigned int compound_head;
+			unsigned char compound_dtor;
+			unsigned char compound_order;
+			atomic_t compound_mapcount;
+			atomic_t subpages_mapcount;
+			atomic_t compound_pincount;
+			unsigned int compound_nr;
+		};
+		struct {
+			long unsigned int _compound_pad_1;
+			long unsigned int _compound_pad_2;
+			struct list_head deferred_list;
+		};
+		struct {
+			long unsigned int _hugetlb_pad_1;
+			void *hugetlb_subpool;
+			void *hugetlb_cgroup;
+			void *hugetlb_cgroup_rsvd;
+			void *hugetlb_hwpoison;
+		};
+		struct {
+			long unsigned int _pt_pad_1;
+			pgtable_t pmd_huge_pte;
+			long unsigned int _pt_pad_2;
+			union {
+				struct mm_struct *pt_mm;
+				atomic_t pt_frag_refcount;
+			};
+			spinlock_t ptl;
+		};
+		struct {
+			struct dev_pagemap *pgmap;
+			void *zone_device_data;
+		};
+		struct callback_head callback_head;
+	};
+	union {
+		atomic_t _mapcount;
+		unsigned int page_type;
+	};
+	atomic_t _refcount;
+	long unsigned int memcg_data;
+};
+
+typedef struct cpumask cpumask_var_t[1];
+
+typedef struct {
+	arch_rwlock_t raw_lock;
+} rwlock_t;
+
+struct hlist_bl_node;
+
+struct hlist_bl_head {
+	struct hlist_bl_node *first;
+};
+
+struct hlist_bl_node {
+	struct hlist_bl_node *next;
+	struct hlist_bl_node **pprev;
+};
+
+typedef struct {
+	seqcount_spinlock_t seqcount;
+	spinlock_t lock;
+} seqlock_t;
+
+struct lockref {
+	union {
+		struct {
+			spinlock_t lock;
+			int count;
+		};
+	};
+};
+
+struct qstr {
+	union {
+		struct {
+			u32 hash;
+			u32 len;
+		};
+		u64 hash_len;
+	};
+	const unsigned char *name;
+};
+
+struct dentry_operations;
+
+struct dentry {
+	unsigned int d_flags;
+	seqcount_spinlock_t d_seq;
+	struct hlist_bl_node d_hash;
+	struct dentry *d_parent;
+	struct qstr d_name;
+	struct inode *d_inode;
+	unsigned char d_iname[32];
+	struct lockref d_lockref;
+	const struct dentry_operations *d_op;
+	struct super_block *d_sb;
+	long unsigned int d_time;
+	void *d_fsdata;
+	union {
+		struct list_head d_lru;
+		wait_queue_head_t *d_wait;
+	};
+	struct list_head d_child;
+	struct list_head d_subdirs;
+	union {
+		struct hlist_node d_alias;
+		struct hlist_bl_node d_in_lookup_hash;
+		struct callback_head d_rcu;
+	} d_u;
+};
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+};
+
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void *xa_head;
+};
+
+typedef u32 errseq_t;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	struct rw_semaphore i_mmap_rwsem;
+	long unsigned int nrpages;
+	long unsigned int writeback_index;
+	const struct address_space_operations *a_ops;
+	long unsigned int flags;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
+struct posix_acl;
+
+struct inode_operations;
+
+struct bdi_writeback;
+
+struct file_lock_context;
+
+struct cdev;
+
+struct fsnotify_mark_connector;
+
+struct inode {
+	umode_t i_mode;
+	short unsigned int i_opflags;
+	kuid_t i_uid;
+	kgid_t i_gid;
+	unsigned int i_flags;
+	struct posix_acl *i_acl;
+	struct posix_acl *i_default_acl;
+	const struct inode_operations *i_op;
+	struct super_block *i_sb;
+	struct address_space *i_mapping;
+	long unsigned int i_ino;
+	union {
+		const unsigned int i_nlink;
+		unsigned int __i_nlink;
+	};
+	dev_t i_rdev;
+	loff_t i_size;
+	struct timespec64 i_atime;
+	struct timespec64 i_mtime;
+	struct timespec64 i_ctime;
+	spinlock_t i_lock;
+	short unsigned int i_bytes;
+	u8 i_blkbits;
+	u8 i_write_hint;
+	blkcnt_t i_blocks;
+	long unsigned int i_state;
+	struct rw_semaphore i_rwsem;
+	long unsigned int dirtied_when;
+	long unsigned int dirtied_time_when;
+	struct hlist_node i_hash;
+	struct list_head i_io_list;
+	struct bdi_writeback *i_wb;
+	int i_wb_frn_winner;
+	u16 i_wb_frn_avg_time;
+	u16 i_wb_frn_history;
+	struct list_head i_lru;
+	struct list_head i_sb_list;
+	struct list_head i_wb_list;
+	union {
+		struct hlist_head i_dentry;
+		struct callback_head i_rcu;
+	};
+	atomic64_t i_version;
+	atomic64_t i_sequence;
+	atomic_t i_count;
+	atomic_t i_dio_count;
+	atomic_t i_writecount;
+	atomic_t i_readcount;
+	union {
+		const struct file_operations *i_fop;
+		void (*free_inode)(struct inode *);
+	};
+	struct file_lock_context *i_flctx;
+	struct address_space i_data;
+	struct list_head i_devices;
+	union {
+		struct pipe_inode_info *i_pipe;
+		struct cdev *i_cdev;
+		char *i_link;
+		unsigned int i_dir_seq;
+	};
+	__u32 i_generation;
+	__u32 i_fsnotify_mask;
+	struct fsnotify_mark_connector *i_fsnotify_marks;
+	void *i_private;
+};
+
+struct vfsmount;
+
+struct path;
+
+struct dentry_operations {
+	int (*d_revalidate)(struct dentry *, unsigned int);
+	int (*d_weak_revalidate)(struct dentry *, unsigned int);
+	int (*d_hash)(const struct dentry *, struct qstr *);
+	int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *);
+	int (*d_delete)(const struct dentry *);
+	int (*d_init)(struct dentry *);
+	void (*d_release)(struct dentry *);
+	void (*d_prune)(struct dentry *);
+	void (*d_iput)(struct dentry *, struct inode *);
+	char * (*d_dname)(struct dentry *, char *, int);
+	struct vfsmount * (*d_automount)(struct path *);
+	int (*d_manage)(const struct path *, bool);
+	struct dentry * (*d_real)(struct dentry *, const struct inode *);
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef long long int qsize_t;
+
+struct quota_format_type;
+
+struct mem_dqinfo {
+	struct quota_format_type *dqi_format;
+	int dqi_fmt_id;
+	struct list_head dqi_dirty_list;
+	long unsigned int dqi_flags;
+	unsigned int dqi_bgrace;
+	unsigned int dqi_igrace;
+	qsize_t dqi_max_spc_limit;
+	qsize_t dqi_max_ino_limit;
+	void *dqi_priv;
+};
+
+struct quota_format_ops;
+
+struct quota_info {
+	unsigned int flags;
+	struct rw_semaphore dqio_sem;
+	struct inode *files[3];
+	struct mem_dqinfo info[3];
+	const struct quota_format_ops *ops[3];
+};
+
+struct rcu_sync {
+	int gp_state;
+	int gp_count;
+	wait_queue_head_t gp_wait;
+	struct callback_head cb_head;
+};
+
+struct rcuwait {
+	struct task_struct *task;
+};
+
+struct percpu_rw_semaphore {
+	struct rcu_sync rss;
+	unsigned int *read_count;
+	struct rcuwait writer;
+	wait_queue_head_t waiters;
+	atomic_t block;
+};
+
+struct sb_writers {
+	int frozen;
+	wait_queue_head_t wait_unfrozen;
+	struct percpu_rw_semaphore rw_sem[3];
+};
+
+typedef struct {
+	__u8 b[16];
+} uuid_t;
+
+struct shrink_control;
+
+struct shrinker {
+	long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);
+	long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);
+	long int batch;
+	int seeks;
+	unsigned int flags;
+	struct list_head list;
+	int id;
+	atomic_long_t *nr_deferred;
+};
+
+struct list_lru_node;
+
+struct list_lru {
+	struct list_lru_node *node;
+	struct list_head list;
+	int shrinker_id;
+	bool memcg_aware;
+	struct xarray xa;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
+};
+
+struct super_operations;
+
+struct dquot_operations;
+
+struct quotactl_ops;
+
+struct export_operations;
+
+struct xattr_handler;
+
+struct block_device;
+
+struct mtd_info;
+
+struct workqueue_struct;
+
+struct super_block {
+	struct list_head s_list;
+	dev_t s_dev;
+	unsigned char s_blocksize_bits;
+	long unsigned int s_blocksize;
+	loff_t s_maxbytes;
+	struct file_system_type *s_type;
+	const struct super_operations *s_op;
+	const struct dquot_operations *dq_op;
+	const struct quotactl_ops *s_qcop;
+	const struct export_operations *s_export_op;
+	long unsigned int s_flags;
+	long unsigned int s_iflags;
+	long unsigned int s_magic;
+	struct dentry *s_root;
+	struct rw_semaphore s_umount;
+	int s_count;
+	atomic_t s_active;
+	const struct xattr_handler **s_xattr;
+	struct hlist_bl_head s_roots;
+	struct list_head s_mounts;
+	struct block_device *s_bdev;
+	struct backing_dev_info *s_bdi;
+	struct mtd_info *s_mtd;
+	struct hlist_node s_instances;
+	unsigned int s_quota_types;
+	struct quota_info s_dquot;
+	struct sb_writers s_writers;
+	void *s_fs_info;
+	u32 s_time_gran;
+	time64_t s_time_min;
+	time64_t s_time_max;
+	__u32 s_fsnotify_mask;
+	struct fsnotify_mark_connector *s_fsnotify_marks;
+	char s_id[32];
+	uuid_t s_uuid;
+	unsigned int s_max_links;
+	fmode_t s_mode;
+	struct mutex s_vfs_rename_mutex;
+	const char *s_subtype;
+	const struct dentry_operations *s_d_op;
+	struct shrinker s_shrink;
+	atomic_long_t s_remove_count;
+	atomic_long_t s_fsnotify_connectors;
+	int s_readonly_remount;
+	errseq_t s_wb_err;
+	struct workqueue_struct *s_dio_done_wq;
+	struct hlist_head s_pins;
+	struct user_namespace *s_user_ns;
+	struct list_lru s_dentry_lru;
+	struct list_lru s_inode_lru;
+	struct callback_head rcu;
+	struct work_struct destroy_work;
+	struct mutex s_sync_lock;
+	int s_stack_depth;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t s_inode_list_lock;
+	struct list_head s_inodes;
+	spinlock_t s_inode_wblist_lock;
+	struct list_head s_inodes_wb;
+	long: 64;
+	long: 64;
+};
+
+struct mnt_idmap;
+
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct mnt_idmap *mnt_idmap;
+};
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	long unsigned int flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long int ucount_max[12];
+	long int rlimit_max[4];
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+	u32 dio_mem_align;
+	u32 dio_offset_align;
+};
+
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long int key;
+};
+
+struct static_key_mod;
+
+struct static_key {
+	atomic_t enabled;
+	union {
+		long unsigned int type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
+	};
+};
+
+struct shrink_control {
+	gfp_t gfp_mask;
+	int nid;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_scanned;
+	struct mem_cgroup *memcg;
+};
+
+struct kref {
+	refcount_t refcount;
+};
+
+typedef struct {} lockdep_map_p;
+
+struct maple_tree {
+	union {
+		spinlock_t ma_lock;
+		lockdep_map_p ma_external_lock;
+	};
+	void *ma_root;
+	unsigned int ma_flags;
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
+};
+
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 *counters;
+};
+
+typedef struct {
+	atomic_long_t id;
+	void *vdso;
+	cpumask_t icache_stale_mask;
+	cpumask_t tlb_stale_mask;
+} mm_context_t;
+
+struct xol_area;
+
+struct uprobes_state {
+	struct xol_area *xol_area;
+};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct maple_tree mm_mt;
+		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+		long unsigned int mmap_base;
+		long unsigned int mmap_legacy_base;
+		long unsigned int task_size;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_t mm_count;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		long unsigned int hiwater_rss;
+		long unsigned int hiwater_vm;
+		long unsigned int total_vm;
+		long unsigned int locked_vm;
+		atomic64_t pinned_vm;
+		long unsigned int data_vm;
+		long unsigned int exec_vm;
+		long unsigned int stack_vm;
+		long unsigned int def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		long unsigned int start_code;
+		long unsigned int end_code;
+		long unsigned int start_data;
+		long unsigned int end_data;
+		long unsigned int start_brk;
+		long unsigned int brk;
+		long unsigned int start_stack;
+		long unsigned int arg_start;
+		long unsigned int arg_end;
+		long unsigned int env_start;
+		long unsigned int env_end;
+		long unsigned int saved_auxv[60];
+		struct percpu_counter rss_stat[4];
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		long unsigned int flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table *ioctx_table;
+		struct task_struct *owner;
+		struct user_namespace *user_ns;
+		struct file *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		atomic_t tlb_flush_pending;
+		struct uprobes_state uprobes_state;
+		atomic_long_t hugetlb_usage;
+		struct work_struct async_put_work;
+	};
+	long unsigned int cpu_bitmap[0];
+};
+
+struct arch_uprobe_task {
+	long unsigned int saved_cause;
+};
+
+enum uprobe_task_state {
+	UTASK_RUNNING = 0,
+	UTASK_SSTEP = 1,
+	UTASK_SSTEP_ACK = 2,
+	UTASK_SSTEP_TRAPPED = 3,
+};
+
+struct uprobe;
+
+struct return_instance;
+
+struct uprobe_task {
+	enum uprobe_task_state state;
+	union {
+		struct {
+			struct arch_uprobe_task autask;
+			long unsigned int vaddr;
+		};
+		struct {
+			struct callback_head dup_xol_work;
+			long unsigned int dup_xol_addr;
+		};
+	};
+	struct uprobe *active_uprobe;
+	long unsigned int xol_vaddr;
+	struct return_instance *return_instances;
+	unsigned int depth;
+};
+
+struct return_instance {
+	struct uprobe *uprobe;
+	long unsigned int func;
+	long unsigned int stack;
+	long unsigned int orig_ret_vaddr;
+	bool chained;
+	struct return_instance *next;
+};
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct vmem_altmap {
+	long unsigned int base_pfn;
+	const long unsigned int end_pfn;
+	const long unsigned int reserve;
+	long unsigned int free;
+	long unsigned int align;
+	long unsigned int alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	long unsigned int percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	long unsigned int vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct range ranges[0];
+	};
+};
+
+struct folio {
+	union {
+		struct {
+			long unsigned int flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			void *private;
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			long unsigned int memcg_data;
+		};
+		struct page page;
+	};
+	union {
+		struct {
+			long unsigned int _flags_1;
+			long unsigned int _head_1;
+			unsigned char _folio_dtor;
+			unsigned char _folio_order;
+			atomic_t _compound_mapcount;
+			atomic_t _subpages_mapcount;
+			atomic_t _pincount;
+			unsigned int _folio_nr_pages;
+		};
+		struct page __page_1;
+	};
+	union {
+		struct {
+			long unsigned int _flags_2;
+			long unsigned int _head_2;
+			void *_hugetlb_subpool;
+			void *_hugetlb_cgroup;
+			void *_hugetlb_cgroup_rsvd;
+			void *_hugetlb_hwpoison;
+		};
+		struct page __page_2;
+	};
+};
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	long unsigned int start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct file {
+	union {
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	spinlock_t f_lock;
+	atomic_long_t f_count;
+	unsigned int f_flags;
+	fmode_t f_mode;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	u64 f_version;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+};
+
+struct userfaultfd_ctx;
+
+struct vm_userfaultfd_ctx {
+	struct userfaultfd_ctx *ctx;
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct vm_area_struct {
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	long unsigned int vm_flags;
+	struct {
+		struct rb_node rb;
+		long unsigned int rb_subtree_last;
+	} shared;
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	long unsigned int vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	struct anon_vma_name *anon_name;
+	atomic_long_t swap_readahead_info;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+};
+
+typedef unsigned int vm_fault_t;
+
+enum page_entry_size {
+	PE_SIZE_PTE = 0,
+	PE_SIZE_PMD = 1,
+	PE_SIZE_PUD = 2,
+};
+
+struct vm_fault;
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, long unsigned int);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
+	vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
+	long unsigned int (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
+};
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+};
+
+typedef struct {
+	long unsigned int pmd;
+} pmd_t;
+
+typedef struct {
+	long unsigned int pud;
+} pud_t;
+
+struct vm_fault {
+	const struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		long unsigned int pgoff;
+		long unsigned int address;
+		long unsigned int real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	long unsigned int gp_seq[4];
+	long int len;
+	long int seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_struct;
+
+struct srcu_data {
+	atomic_long_t srcu_lock_count[2];
+	atomic_long_t srcu_unlock_count[2];
+	int srcu_nmi_safety;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	long unsigned int grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	long unsigned int srcu_have_cbs[4];
+	long unsigned int srcu_data_have_cbs[4];
+	long unsigned int srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_struct {
+	struct srcu_node *node;
+	struct srcu_node *level[3];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned int srcu_idx;
+	long unsigned int srcu_gp_seq;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	long unsigned int srcu_gp_start;
+	long unsigned int srcu_last_gp_end;
+	long unsigned int srcu_size_jiffies;
+	long unsigned int srcu_n_lock_retries;
+	long unsigned int srcu_n_exp_nodelay;
+	struct srcu_data *sda;
+	bool sda_is_static;
+	long unsigned int srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	long unsigned int reschedule_jiffies;
+	long unsigned int reschedule_count;
+	struct delayed_work work;
+	struct lockdep_map dep_map;
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct kmem_cache;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+};
+
+struct rlimit {
+	__kernel_ulong_t rlim_cur;
+	__kernel_ulong_t rlim_max;
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	long long unsigned int sum_exec_runtime;
+};
+
+typedef void __signalfn_t(int);
+
+typedef __signalfn_t *__sighandler_t;
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[12];
+	atomic_long_t rlimit[4];
+};
+
+struct sigaction {
+	__sighandler_t sa_handler;
+	long unsigned int sa_flags;
+	sigset_t sa_mask;
+};
+
+struct k_sigaction {
+	struct sigaction sa;
+};
+
+struct cpu_itimer {
+	u64 expires;
+	u64 incr;
+};
+
+struct task_cputime_atomic {
+	atomic64_t utime;
+	atomic64_t stime;
+	atomic64_t sum_exec_runtime;
+};
+
+struct thread_group_cputimer {
+	struct task_cputime_atomic cputime_atomic;
+};
+
+struct core_state;
+
+struct tty_struct;
+
+struct signal_struct {
+	refcount_t sigcnt;
+	atomic_t live;
+	int nr_threads;
+	int quick_threads;
+	struct list_head thread_head;
+	wait_queue_head_t wait_chldexit;
+	struct task_struct *curr_target;
+	struct sigpending shared_pending;
+	struct hlist_head multiprocess;
+	int group_exit_code;
+	int notify_count;
+	struct task_struct *group_exec_task;
+	int group_stop_count;
+	unsigned int flags;
+	struct core_state *core_state;
+	unsigned int is_child_subreaper: 1;
+	unsigned int has_child_subreaper: 1;
+	int posix_timer_id;
+	struct list_head posix_timers;
+	struct hrtimer real_timer;
+	ktime_t it_real_incr;
+	struct cpu_itimer it[2];
+	struct thread_group_cputimer cputimer;
+	struct posix_cputimers posix_cputimers;
+	struct pid *pids[4];
+	struct pid *tty_old_pgrp;
+	int leader;
+	struct tty_struct *tty;
+	seqlock_t stats_lock;
+	u64 utime;
+	u64 stime;
+	u64 cutime;
+	u64 cstime;
+	u64 gtime;
+	u64 cgtime;
+	struct prev_cputime prev_cputime;
+	long unsigned int nvcsw;
+	long unsigned int nivcsw;
+	long unsigned int cnvcsw;
+	long unsigned int cnivcsw;
+	long unsigned int min_flt;
+	long unsigned int maj_flt;
+	long unsigned int cmin_flt;
+	long unsigned int cmaj_flt;
+	long unsigned int inblock;
+	long unsigned int oublock;
+	long unsigned int cinblock;
+	long unsigned int coublock;
+	long unsigned int maxrss;
+	long unsigned int cmaxrss;
+	struct task_io_accounting ioac;
+	long long unsigned int sum_sched_runtime;
+	struct rlimit rlim[16];
+	bool oom_flag_origin;
+	short int oom_score_adj;
+	short int oom_score_adj_min;
+	struct mm_struct *oom_mm;
+	struct mutex cred_guard_mutex;
+	struct rw_semaphore exec_update_lock;
+};
+
+typedef int32_t key_serial_t;
+
+typedef uint32_t key_perm_t;
+
+struct key_type;
+
+struct key_tag;
+
+struct keyring_index_key {
+	long unsigned int hash;
+	union {
+		struct {
+			u16 desc_len;
+			char desc[6];
+		};
+		long unsigned int x;
+	};
+	struct key_type *type;
+	struct key_tag *domain_tag;
+	const char *description;
+};
+
+union key_payload {
+	void *rcu_data0;
+	void *data[4];
+};
+
+struct assoc_array_ptr;
+
+struct assoc_array {
+	struct assoc_array_ptr *root;
+	long unsigned int nr_leaves_on_tree;
+};
+
+struct key_user;
+
+struct key_restriction;
+
+struct key {
+	refcount_t usage;
+	key_serial_t serial;
+	union {
+		struct list_head graveyard_link;
+		struct rb_node serial_node;
+	};
+	struct rw_semaphore sem;
+	struct key_user *user;
+	void *security;
+	union {
+		time64_t expiry;
+		time64_t revoked_at;
+	};
+	time64_t last_used_at;
+	kuid_t uid;
+	kgid_t gid;
+	key_perm_t perm;
+	short unsigned int quotalen;
+	short unsigned int datalen;
+	short int state;
+	long unsigned int flags;
+	union {
+		struct keyring_index_key index_key;
+		struct {
+			long unsigned int hash;
+			long unsigned int len_desc;
+			struct key_type *type;
+			struct key_tag *domain_tag;
+			char *description;
+		};
+	};
+	union {
+		union key_payload payload;
+		struct {
+			struct list_head name_link;
+			struct assoc_array keys;
+		};
+	};
+	struct key_restriction *restrict_link;
+};
+
+struct sighand_struct {
+	spinlock_t siglock;
+	refcount_t count;
+	wait_queue_head_t signalfd_wqh;
+	struct k_sigaction action[64];
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+struct request;
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	short unsigned int nr_ios;
+	short unsigned int rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	bool nowait;
+	struct list_head cb_list;
+};
+
+struct io_context {
+	atomic_long_t refcount;
+	atomic_t active_ref;
+	short unsigned int ioprio;
+};
+
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[13];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[13];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+typedef u32 compat_uptr_t;
+
+struct compat_robust_list {
+	compat_uptr_t next;
+};
+
+typedef s32 compat_long_t;
+
+struct compat_robust_list_head {
+	struct compat_robust_list list;
+	compat_long_t futex_offset;
+	compat_uptr_t list_op_pending;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+struct perf_event_context {
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head pmu_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	int nr_events;
+	int nr_user;
+	int is_active;
+	int nr_task_data;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	int nr_cgroups;
+	struct callback_head callback_head;
+	local_t nr_pending;
+};
+
+struct ftrace_ret_stack {
+	long unsigned int ret;
+	long unsigned int func;
+	long long unsigned int calltime;
+	long unsigned int fp;
+	long unsigned int *retp;
+};
+
+struct blk_integrity_profile;
+
+struct blk_integrity {
+	const struct blk_integrity_profile *profile;
+	unsigned char flags;
+	unsigned char tuple_size;
+	unsigned char interval_exp;
+	unsigned char tag_size;
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	long unsigned int seg_boundary_mask;
+	long unsigned int virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	short unsigned int max_segments;
+	short unsigned int max_integrity_segments;
+	short unsigned int max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	enum blk_zoned_model zoned;
+	unsigned int dma_alignment;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct gendisk;
+
+struct kobject;
+
+struct blk_stat_callback;
+
+struct blk_rq_stat;
+
+struct blk_mq_tags;
+
+struct blkcg_gq;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	long unsigned int queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	refcount_t refs;
+	struct kobject *mq_kobj;
+	struct blk_integrity integrity;
+	long unsigned int nr_requests;
+	unsigned int dma_pad_mask;
+	unsigned int rq_timeout;
+	int poll_nsec;
+	struct blk_stat_callback *poll_cb;
+	struct blk_rq_stat *poll_stat;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	long unsigned int blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_flush_queue *fq;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+};
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	long unsigned int size;
+	long unsigned int flags;
+	struct page **pages;
+	unsigned int page_order;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+};
+
+struct list_lru_one {
+	struct list_head list;
+	long int nr_items;
+};
+
+struct list_lru_node {
+	spinlock_t lock;
+	struct list_lru_one lru;
+	long int nr_items;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum migrate_mode {
+	MIGRATE_ASYNC = 0,
+	MIGRATE_SYNC_LIGHT = 1,
+	MIGRATE_SYNC = 2,
+	MIGRATE_SYNC_NO_COPY = 3,
+};
+
+struct exception_table_entry {
+	int insn;
+	int fixup;
+	short int type;
+	short int data;
+};
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct kernfs_node;
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	long unsigned int notified_at;
+	struct timer_list notify_timer;
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+};
+
+struct bpf_prog_array;
+
+struct cgroup_bpf {
+	struct bpf_prog_array *effective[23];
+	struct hlist_head progs[23];
+	u8 flags[23];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct psi_group;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	long unsigned int flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	struct cgroup_file psi_files[0];
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state *subsys[13];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[13];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group *psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	struct bpf_local_storage *bpf_cgrp_storage;
+	struct cgroup *ancestors[0];
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	struct ctl_table *child;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
+struct key_tag {
+	struct callback_head rcu;
+	refcount_t usage;
+	bool removed;
+};
+
+typedef int (*request_key_actor_t)(struct key *, void *);
+
+struct key_preparsed_payload;
+
+struct key_match_data;
+
+struct kernel_pkey_params;
+
+struct kernel_pkey_query;
+
+struct key_type {
+	const char *name;
+	size_t def_datalen;
+	unsigned int flags;
+	int (*vet_description)(const char *);
+	int (*preparse)(struct key_preparsed_payload *);
+	void (*free_preparse)(struct key_preparsed_payload *);
+	int (*instantiate)(struct key *, struct key_preparsed_payload *);
+	int (*update)(struct key *, struct key_preparsed_payload *);
+	int (*match_preparse)(struct key_match_data *);
+	void (*match_free)(struct key_match_data *);
+	void (*revoke)(struct key *);
+	void (*destroy)(struct key *);
+	void (*describe)(const struct key *, struct seq_file *);
+	long int (*read)(const struct key *, char *, size_t);
+	request_key_actor_t request_key;
+	struct key_restriction * (*lookup_restriction)(const char *);
+	int (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *);
+	struct list_head link;
+	struct lock_class_key lock_class;
+};
+
+typedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *);
+
+struct key_restriction {
+	key_restrict_link_func_t check;
+	struct key *key;
+	struct key_type *keytype;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	long unsigned int unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	struct ratelimit_state ratelimit;
+};
+
+struct group_info {
+	atomic_t usage;
+	int ngroups;
+	kgid_t gid[0];
+};
+
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
+};
+
+struct delayed_call {
+	void (*fn)(void *);
+	void *arg;
+};
+
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_DMA = 0,
+	KMALLOC_RECLAIM = 1,
+	KMALLOC_CGROUP = 2,
+	NR_KMALLOC_TYPES = 3,
+};
+
+struct wait_page_queue;
+
+struct kiocb {
+	struct file *ki_filp;
+	loff_t ki_pos;
+	void (*ki_complete)(struct kiocb *, long int);
+	void *private;
+	int ki_flags;
+	u16 ki_ioprio;
+	struct wait_page_queue *ki_waitq;
+};
+
+struct iattr {
+	unsigned int ia_valid;
+	umode_t ia_mode;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
+	loff_t ia_size;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct file *ia_file;
+};
+
+typedef __kernel_uid32_t projid_t;
+
+typedef struct {
+	projid_t val;
+} kprojid_t;
+
+enum quota_type {
+	USRQUOTA = 0,
+	GRPQUOTA = 1,
+	PRJQUOTA = 2,
+};
+
+struct kqid {
+	union {
+		kuid_t uid;
+		kgid_t gid;
+		kprojid_t projid;
+	};
+	enum quota_type type;
+};
+
+struct mem_dqblk {
+	qsize_t dqb_bhardlimit;
+	qsize_t dqb_bsoftlimit;
+	qsize_t dqb_curspace;
+	qsize_t dqb_rsvspace;
+	qsize_t dqb_ihardlimit;
+	qsize_t dqb_isoftlimit;
+	qsize_t dqb_curinodes;
+	time64_t dqb_btime;
+	time64_t dqb_itime;
+};
+
+struct dquot {
+	struct hlist_node dq_hash;
+	struct list_head dq_inuse;
+	struct list_head dq_free;
+	struct list_head dq_dirty;
+	struct mutex dq_lock;
+	spinlock_t dq_dqb_lock;
+	atomic_t dq_count;
+	struct super_block *dq_sb;
+	struct kqid dq_id;
+	loff_t dq_off;
+	long unsigned int dq_flags;
+	struct mem_dqblk dq_dqb;
+};
+
+struct quota_format_type {
+	int qf_fmt_id;
+	const struct quota_format_ops *qf_ops;
+	struct module *qf_owner;
+	struct quota_format_type *qf_next;
+};
+
+struct quota_format_ops {
+	int (*check_quota_file)(struct super_block *, int);
+	int (*read_file_info)(struct super_block *, int);
+	int (*write_file_info)(struct super_block *, int);
+	int (*free_file_info)(struct super_block *, int);
+	int (*read_dqblk)(struct dquot *);
+	int (*commit_dqblk)(struct dquot *);
+	int (*release_dqblk)(struct dquot *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+};
+
+struct dquot_operations {
+	int (*write_dquot)(struct dquot *);
+	struct dquot * (*alloc_dquot)(struct super_block *, int);
+	void (*destroy_dquot)(struct dquot *);
+	int (*acquire_dquot)(struct dquot *);
+	int (*release_dquot)(struct dquot *);
+	int (*mark_dirty)(struct dquot *);
+	int (*write_info)(struct super_block *, int);
+	qsize_t * (*get_reserved_space)(struct inode *);
+	int (*get_projid)(struct inode *, kprojid_t *);
+	int (*get_inode_usage)(struct inode *, qsize_t *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+};
+
+struct qc_dqblk {
+	int d_fieldmask;
+	u64 d_spc_hardlimit;
+	u64 d_spc_softlimit;
+	u64 d_ino_hardlimit;
+	u64 d_ino_softlimit;
+	u64 d_space;
+	u64 d_ino_count;
+	s64 d_ino_timer;
+	s64 d_spc_timer;
+	int d_ino_warns;
+	int d_spc_warns;
+	u64 d_rt_spc_hardlimit;
+	u64 d_rt_spc_softlimit;
+	u64 d_rt_space;
+	s64 d_rt_spc_timer;
+	int d_rt_spc_warns;
+};
+
+struct qc_type_state {
+	unsigned int flags;
+	unsigned int spc_timelimit;
+	unsigned int ino_timelimit;
+	unsigned int rt_spc_timelimit;
+	unsigned int spc_warnlimit;
+	unsigned int ino_warnlimit;
+	unsigned int rt_spc_warnlimit;
+	long long unsigned int ino;
+	blkcnt_t blocks;
+	blkcnt_t nextents;
+};
+
+struct qc_state {
+	unsigned int s_incoredqs;
+	struct qc_type_state s_state[3];
+};
+
+struct qc_info {
+	int i_fieldmask;
+	unsigned int i_flags;
+	unsigned int i_spc_timelimit;
+	unsigned int i_ino_timelimit;
+	unsigned int i_rt_spc_timelimit;
+	unsigned int i_spc_warnlimit;
+	unsigned int i_ino_warnlimit;
+	unsigned int i_rt_spc_warnlimit;
+};
+
+struct quotactl_ops {
+	int (*quota_on)(struct super_block *, int, int, const struct path *);
+	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
+	int (*quota_sync)(struct super_block *, int);
+	int (*set_info)(struct super_block *, int, struct qc_info *);
+	int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *);
+	int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_state)(struct super_block *, struct qc_state *);
+	int (*rm_xquota)(struct super_block *, unsigned int);
+};
+
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+};
+
+struct module_param_attrs;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_layout {
+	void *base;
+	unsigned int size;
+	unsigned int text_size;
+	unsigned int ro_size;
+	unsigned int ro_after_init_size;
+	struct mod_tree_node mtn;
+};
+
+struct elf64_shdr;
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+struct mod_section {
+	Elf64_Shdr *shdr;
+	int num_entries;
+	int max_entries;
+};
+
+struct mod_arch_specific {
+	struct mod_section got;
+	struct mod_section plt;
+	struct mod_section got_plt;
+};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+struct module_attribute;
+
+struct kernel_param;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct tracepoint;
+
+typedef struct tracepoint * const tracepoint_ptr_t;
+
+struct bpf_raw_event_map;
+
+struct trace_event_call;
+
+struct trace_eval_map;
+
+struct error_injection_entry;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	unsigned char build_id[20];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct module_layout core_layout;
+	struct module_layout init_layout;
+	struct mod_arch_specific arch;
+	long unsigned int taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	unsigned int num_ftrace_callsites;
+	long unsigned int *ftrace_callsites;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	long unsigned int *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	unsigned int printk_index_size;
+	struct pi_entry **printk_index_start;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct error_injection_entry *ei_funcs;
+	unsigned int num_ei_funcs;
+	long: 32;
+	long: 64;
+};
+
+struct writeback_control;
+
+struct readahead_control;
+
+struct swap_info_struct;
+
+struct address_space_operations {
+	int (*writepage)(struct page *, struct writeback_control *);
+	int (*read_folio)(struct file *, struct folio *);
+	int (*writepages)(struct address_space *, struct writeback_control *);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
+	void (*readahead)(struct readahead_control *);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
+	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
+	sector_t (*bmap)(struct address_space *, sector_t);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
+	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
+	int (*error_remove_page)(struct address_space *, struct page *);
+	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
+	void (*swap_deactivate)(struct file *);
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
+};
+
+struct iovec;
+
+struct kvec;
+
+struct bio_vec;
+
+struct iov_iter {
+	u8 iter_type;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
+	size_t count;
+	union {
+		const struct iovec *iov;
+		const struct kvec *kvec;
+		const struct bio_vec *bvec;
+		struct xarray *xarray;
+		struct pipe_inode_info *pipe;
+		void *ubuf;
+	};
+	union {
+		long unsigned int nr_segs;
+		struct {
+			unsigned int head;
+			unsigned int start_head;
+		};
+		loff_t xarray_start;
+	};
+};
+
+struct fiemap_extent_info;
+
+struct fileattr;
+
+struct inode_operations {
+	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
+	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
+	int (*permission)(struct user_namespace *, struct inode *, int);
+	struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
+	int (*readlink)(struct dentry *, char *, int);
+	int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool);
+	int (*link)(struct dentry *, struct inode *, struct dentry *);
+	int (*unlink)(struct inode *, struct dentry *);
+	int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
+	int (*rmdir)(struct inode *, struct dentry *);
+	int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *);
+	int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
+	ssize_t (*listxattr)(struct dentry *, char *, size_t);
+	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
+	int (*update_time)(struct inode *, struct timespec64 *, int);
+	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
+	int (*tmpfile)(struct user_namespace *, struct inode *, struct file *, umode_t);
+	struct posix_acl * (*get_acl)(struct user_namespace *, struct dentry *, int);
+	int (*set_acl)(struct user_namespace *, struct dentry *, struct posix_acl *, int);
+	int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
+};
+
+struct file_lock_context {
+	spinlock_t flc_lock;
+	struct list_head flc_flock;
+	struct list_head flc_posix;
+	struct list_head flc_lease;
+};
+
+struct file_lock_operations {
+	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
+	void (*fl_release_private)(struct file_lock *);
+};
+
+struct nlm_lockowner;
+
+struct nfs_lock_info {
+	u32 state;
+	struct nlm_lockowner *owner;
+	struct list_head list;
+};
+
+struct nfs4_lock_state;
+
+struct nfs4_lock_info {
+	struct nfs4_lock_state *owner;
+};
+
+struct fasync_struct;
+
+struct lock_manager_operations;
+
+struct file_lock {
+	struct file_lock *fl_blocker;
+	struct list_head fl_list;
+	struct hlist_node fl_link;
+	struct list_head fl_blocked_requests;
+	struct list_head fl_blocked_member;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	unsigned int fl_pid;
+	int fl_link_cpu;
+	wait_queue_head_t fl_wait;
+	struct file *fl_file;
+	loff_t fl_start;
+	loff_t fl_end;
+	struct fasync_struct *fl_fasync;
+	long unsigned int fl_break_time;
+	long unsigned int fl_downgrade_time;
+	const struct file_lock_operations *fl_ops;
+	const struct lock_manager_operations *fl_lmops;
+	union {
+		struct nfs_lock_info nfs_fl;
+		struct nfs4_lock_info nfs4_fl;
+		struct {
+			struct list_head link;
+			int state;
+			unsigned int debug_id;
+		} afs;
+		struct {
+			struct inode *inode;
+		} ceph;
+	} fl_u;
+};
+
+struct lock_manager_operations {
+	void *lm_mod_owner;
+	fl_owner_t (*lm_get_owner)(fl_owner_t);
+	void (*lm_put_owner)(fl_owner_t);
+	void (*lm_notify)(struct file_lock *);
+	int (*lm_grant)(struct file_lock *, int);
+	bool (*lm_break)(struct file_lock *);
+	int (*lm_change)(struct file_lock *, int, struct list_head *);
+	void (*lm_setup)(struct file_lock *, void **);
+	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
+};
+
+struct fasync_struct {
+	rwlock_t fa_lock;
+	int magic;
+	int fa_fd;
+	struct fasync_struct *fa_next;
+	struct file *fa_file;
+	struct callback_head fa_rcu;
+};
+
+struct kstatfs;
+
+struct super_operations {
+	struct inode * (*alloc_inode)(struct super_block *);
+	void (*destroy_inode)(struct inode *);
+	void (*free_inode)(struct inode *);
+	void (*dirty_inode)(struct inode *, int);
+	int (*write_inode)(struct inode *, struct writeback_control *);
+	int (*drop_inode)(struct inode *);
+	void (*evict_inode)(struct inode *);
+	void (*put_super)(struct super_block *);
+	int (*sync_fs)(struct super_block *, int);
+	int (*freeze_super)(struct super_block *);
+	int (*freeze_fs)(struct super_block *);
+	int (*thaw_super)(struct super_block *);
+	int (*unfreeze_fs)(struct super_block *);
+	int (*statfs)(struct dentry *, struct kstatfs *);
+	int (*remount_fs)(struct super_block *, int *, char *);
+	void (*umount_begin)(struct super_block *);
+	int (*show_options)(struct seq_file *, struct dentry *);
+	int (*show_devname)(struct seq_file *, struct dentry *);
+	int (*show_path)(struct seq_file *, struct dentry *);
+	int (*show_stats)(struct seq_file *, struct dentry *);
+	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
+	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
+	struct dquot ** (*get_dquots)(struct inode *);
+	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
+	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
+};
+
+struct fid;
+
+struct iomap;
+
+struct export_operations {
+	int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);
+	struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
+	struct dentry * (*fh_to_parent)(struct super_block *, struct fid *, int, int);
+	int (*get_name)(struct dentry *, char *, struct dentry *);
+	struct dentry * (*get_parent)(struct dentry *);
+	int (*commit_metadata)(struct inode *);
+	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
+	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
+	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	u64 (*fetch_iversion)(struct inode *);
+	long unsigned int flags;
+};
+
+struct xattr_handler {
+	const char *name;
+	const char *prefix;
+	int flags;
+	bool (*list)(struct dentry *);
+	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
+	int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+};
+
+enum dl_dev_state {
+	DL_DEV_NO_DRIVER = 0,
+	DL_DEV_PROBING = 1,
+	DL_DEV_DRIVER_BOUND = 2,
+	DL_DEV_UNBINDING = 3,
+};
+
+struct dev_links_info {
+	struct list_head suppliers;
+	struct list_head consumers;
+	struct list_head defer_sync;
+	enum dl_dev_state status;
+};
+
+struct pm_message {
+	int event;
+};
+
+typedef struct pm_message pm_message_t;
+
+struct pm_subsys_data;
+
+struct device;
+
+struct dev_pm_qos;
+
+struct dev_pm_info {
+	pm_message_t power_state;
+	unsigned int can_wakeup: 1;
+	unsigned int async_suspend: 1;
+	bool in_dpm_list: 1;
+	bool is_prepared: 1;
+	bool is_suspended: 1;
+	bool is_noirq_suspended: 1;
+	bool is_late_suspended: 1;
+	bool no_pm: 1;
+	bool early_init: 1;
+	bool direct_complete: 1;
+	u32 driver_flags;
+	spinlock_t lock;
+	unsigned int should_wakeup: 1;
+	struct pm_subsys_data *subsys_data;
+	void (*set_latency_tolerance)(struct device *, s32);
+	struct dev_pm_qos *qos;
+};
+
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
+struct dev_archdata {};
+
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
+struct device_private;
+
+struct device_type;
+
+struct bus_type;
+
+struct device_driver;
+
+struct dev_pm_domain;
+
+struct bus_dma_region;
+
+struct device_dma_parameters;
+
+struct dma_coherent_mem;
+
+struct cma;
+
+struct io_tlb_mem;
+
+struct device_node;
+
+struct fwnode_handle;
+
+struct class;
+
+struct attribute_group;
+
+struct iommu_group;
+
+struct dev_iommu;
+
+struct device_physical_location;
+
+struct device {
+	struct kobject kobj;
+	struct device *parent;
+	struct device_private *p;
+	const char *init_name;
+	const struct device_type *type;
+	struct bus_type *bus;
+	struct device_driver *driver;
+	void *platform_data;
+	void *driver_data;
+	struct mutex mutex;
+	struct dev_links_info links;
+	struct dev_pm_info power;
+	struct dev_pm_domain *pm_domain;
+	struct dev_msi_info msi;
+	u64 *dma_mask;
+	u64 coherent_dma_mask;
+	u64 bus_dma_limit;
+	const struct bus_dma_region *dma_range_map;
+	struct device_dma_parameters *dma_parms;
+	struct list_head dma_pools;
+	struct dma_coherent_mem *dma_mem;
+	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
+	struct dev_archdata archdata;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	dev_t devt;
+	u32 id;
+	spinlock_t devres_lock;
+	struct list_head devres_head;
+	struct class *class;
+	const struct attribute_group **groups;
+	void (*release)(struct device *);
+	struct iommu_group *iommu_group;
+	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
+	bool offline_disabled: 1;
+	bool offline: 1;
+	bool of_node_reused: 1;
+	bool state_synced: 1;
+	bool can_match: 1;
+	bool dma_coherent: 1;
+};
+
+struct disk_stats;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct disk_stats *bd_stats;
+	long unsigned int bd_stamp;
+	bool bd_read_only;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	struct inode *bd_inode;
+	struct super_block *bd_super;
+	void *bd_claiming;
+	struct device bd_device;
+	void *bd_holder;
+	int bd_holders;
+	bool bd_write_holder;
+	struct kobject *bd_holder_dir;
+	u8 bd_partno;
+	spinlock_t bd_size_lock;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	int bd_fsfreeze_count;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+};
+
+typedef bool (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
+
+struct dir_context {
+	filldir_t actor;
+	loff_t pos;
+};
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
+struct p_log;
+
+struct fs_parameter;
+
+struct fs_parse_result;
+
+typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);
+
+struct fs_parameter_spec {
+	const char *name;
+	fs_param_type *type;
+	u8 opt;
+	short unsigned int flags;
+	const void *data;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct bio_integrity_payload;
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	short unsigned int bi_flags;
+	short unsigned int bi_ioprio;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	union {
+		struct bio_integrity_payload *bi_integrity;
+	};
+	short unsigned int bi_vcnt;
+	short unsigned int bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+struct minix_super_block {
+	__u16 s_ninodes;
+	__u16 s_nzones;
+	__u16 s_imap_blocks;
+	__u16 s_zmap_blocks;
+	__u16 s_firstdatazone;
+	__u16 s_log_zone_size;
+	__u32 s_max_size;
+	__u16 s_magic;
+	__u16 s_state;
+	__u32 s_zones;
+};
+
+struct romfs_super_block {
+	__be32 word0;
+	__be32 word1;
+	__be32 size;
+	__be32 checksum;
+	char name[0];
+};
+
+struct cramfs_inode {
+	__u32 mode: 16;
+	__u32 uid: 16;
+	__u32 size: 24;
+	__u32 gid: 8;
+	__u32 namelen: 6;
+	__u32 offset: 26;
+};
+
+struct cramfs_info {
+	__u32 crc;
+	__u32 edition;
+	__u32 blocks;
+	__u32 files;
+};
+
+struct cramfs_super {
+	__u32 magic;
+	__u32 size;
+	__u32 flags;
+	__u32 future;
+	__u8 signature[16];
+	struct cramfs_info fsid;
+	__u8 name[16];
+	struct cramfs_inode root;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func *funcs;
+};
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, long unsigned int, long unsigned int, int);
+};
+
+struct fwnode_operations;
+
+struct fwnode_handle {
+	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
+	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
+struct fwnode_reference_args;
+
+struct fwnode_endpoint;
+
+struct fwnode_operations {
+	struct fwnode_handle * (*get)(struct fwnode_handle *);
+	void (*put)(struct fwnode_handle *);
+	bool (*device_is_available)(const struct fwnode_handle *);
+	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
+	bool (*property_present)(const struct fwnode_handle *, const char *);
+	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
+	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
+	const char * (*get_name)(const struct fwnode_handle *);
+	const char * (*get_name_prefix)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
+	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
+	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
+	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
+};
+
+struct fwnode_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct fwnode_handle *local_fwnode;
+};
+
+struct fwnode_reference_args {
+	struct fwnode_handle *fwnode;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct kernfs_root;
+
+struct kernfs_elem_dir {
+	long unsigned int subdirs;
+	struct rb_root children;
+	struct kernfs_root *root;
+	long unsigned int rev;
+};
+
+struct kernfs_elem_symlink {
+	struct kernfs_node *target_kn;
+};
+
+struct kernfs_ops;
+
+struct kernfs_open_node;
+
+struct kernfs_elem_attr {
+	const struct kernfs_ops *ops;
+	struct kernfs_open_node *open;
+	loff_t size;
+	struct kernfs_node *notify_next;
+};
+
+struct kernfs_iattrs;
+
+struct kernfs_node {
+	atomic_t count;
+	atomic_t active;
+	struct kernfs_node *parent;
+	const char *name;
+	struct rb_node rb;
+	const void *ns;
+	unsigned int hash;
+	union {
+		struct kernfs_elem_dir dir;
+		struct kernfs_elem_symlink symlink;
+		struct kernfs_elem_attr attr;
+	};
+	void *priv;
+	u64 id;
+	short unsigned int flags;
+	umode_t mode;
+	struct kernfs_iattrs *iattr;
+};
+
+struct kernfs_open_file;
+
+struct kernfs_ops {
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
+	size_t atomic_write_len;
+	bool prealloc;
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
+};
+
+struct kernfs_open_file {
+	struct kernfs_node *kn;
+	struct file *file;
+	struct seq_file *seq_file;
+	void *priv;
+	struct mutex mutex;
+	struct mutex prealloc_mutex;
+	int event;
+	struct list_head list;
+	char *prealloc_buf;
+	size_t atomic_write_len;
+	bool mmapped: 1;
+	bool released: 1;
+	const struct vm_operations_struct *vm_ops;
+};
+
+enum kobj_ns_type {
+	KOBJ_NS_TYPE_NONE = 0,
+	KOBJ_NS_TYPE_NET = 1,
+	KOBJ_NS_TYPES = 2,
+};
+
+struct sock;
+
+struct kobj_ns_type_operations {
+	enum kobj_ns_type type;
+	bool (*current_may_mount)();
+	void * (*grab_current_ns)();
+	const void * (*netlink_ns)(struct sock *);
+	const void * (*initial_ns)();
+	void (*drop_ns)(void *);
+};
+
+struct attribute {
+	const char *name;
+	umode_t mode;
+};
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
+};
+
+struct bin_attribute {
+	struct attribute attr;
+	size_t size;
+	void *private;
+	struct address_space * (*f_mapping)();
+	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+struct sysfs_ops {
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+};
+
+struct kset_uevent_ops;
+
+struct kset {
+	struct list_head list;
+	spinlock_t list_lock;
+	struct kobject kobj;
+	const struct kset_uevent_ops *uevent_ops;
+};
+
+struct kobj_type {
+	void (*release)(struct kobject *);
+	const struct sysfs_ops *sysfs_ops;
+	const struct attribute_group **default_groups;
+	const struct kobj_ns_type_operations * (*child_ns_type)(const struct kobject *);
+	const void * (*namespace)(const struct kobject *);
+	void (*get_ownership)(const struct kobject *, kuid_t *, kgid_t *);
+};
+
+struct kobj_uevent_env {
+	char *argv[3];
+	char *envp[64];
+	int envp_idx;
+	char buf[2048];
+	int buflen;
+};
+
+struct kset_uevent_ops {
+	int (* const filter)(const struct kobject *);
+	const char * (* const name)(const struct kobject *);
+	int (* const uevent)(struct kobject *, struct kobj_uevent_env *);
+};
+
+struct dev_pm_ops {
+	int (*prepare)(struct device *);
+	void (*complete)(struct device *);
+	int (*suspend)(struct device *);
+	int (*resume)(struct device *);
+	int (*freeze)(struct device *);
+	int (*thaw)(struct device *);
+	int (*poweroff)(struct device *);
+	int (*restore)(struct device *);
+	int (*suspend_late)(struct device *);
+	int (*resume_early)(struct device *);
+	int (*freeze_late)(struct device *);
+	int (*thaw_early)(struct device *);
+	int (*poweroff_late)(struct device *);
+	int (*restore_early)(struct device *);
+	int (*suspend_noirq)(struct device *);
+	int (*resume_noirq)(struct device *);
+	int (*freeze_noirq)(struct device *);
+	int (*thaw_noirq)(struct device *);
+	int (*poweroff_noirq)(struct device *);
+	int (*restore_noirq)(struct device *);
+	int (*runtime_suspend)(struct device *);
+	int (*runtime_resume)(struct device *);
+	int (*runtime_idle)(struct device *);
+};
+
+struct pm_subsys_data {
+	spinlock_t lock;
+	unsigned int refcount;
+};
+
+struct dev_pm_domain {
+	struct dev_pm_ops ops;
+	int (*start)(struct device *);
+	void (*detach)(struct device *, bool);
+	int (*activate)(struct device *);
+	void (*sync)(struct device *);
+	void (*dismiss)(struct device *);
+};
+
+struct iommu_ops;
+
+struct subsys_private;
+
+struct bus_type {
+	const char *name;
+	const char *dev_name;
+	struct device *dev_root;
+	const struct attribute_group **bus_groups;
+	const struct attribute_group **dev_groups;
+	const struct attribute_group **drv_groups;
+	int (*match)(struct device *, struct device_driver *);
+	int (*uevent)(struct device *, struct kobj_uevent_env *);
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*online)(struct device *);
+	int (*offline)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	int (*num_vf)(struct device *);
+	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
+	const struct dev_pm_ops *pm;
+	const struct iommu_ops *iommu_ops;
+	struct subsys_private *p;
+	struct lock_class_key lock_key;
+	bool need_parent_lock;
+};
+
+enum probe_type {
+	PROBE_DEFAULT_STRATEGY = 0,
+	PROBE_PREFER_ASYNCHRONOUS = 1,
+	PROBE_FORCE_SYNCHRONOUS = 2,
+};
+
+struct of_device_id;
+
+struct acpi_device_id;
+
+struct driver_private;
+
+struct device_driver {
+	const char *name;
+	struct bus_type *bus;
+	struct module *owner;
+	const char *mod_name;
+	bool suppress_bind_attrs;
+	enum probe_type probe_type;
+	const struct of_device_id *of_match_table;
+	const struct acpi_device_id *acpi_match_table;
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	int (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	const struct dev_pm_ops *pm;
+	void (*coredump)(struct device *);
+	struct driver_private *p;
+};
+
+enum iommu_cap {
+	IOMMU_CAP_CACHE_COHERENCY = 0,
+	IOMMU_CAP_INTR_REMAP = 1,
+	IOMMU_CAP_NOEXEC = 2,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 3,
+	IOMMU_CAP_ENFORCE_CACHE_COHERENCY = 4,
+};
+
+enum iommu_dev_features {
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
+};
+
+typedef unsigned int ioasid_t;
+
+struct iommu_domain;
+
+struct iommu_device;
+
+struct of_phandle_args;
+
+struct iommu_fault_event;
+
+struct iommu_page_response;
+
+struct iommu_domain_ops;
+
+struct iommu_ops {
+	bool (*capable)(struct device *, enum iommu_cap);
+	struct iommu_domain * (*domain_alloc)(unsigned int);
+	struct iommu_device * (*probe_device)(struct device *);
+	void (*release_device)(struct device *);
+	void (*probe_finalize)(struct device *);
+	struct iommu_group * (*device_group)(struct device *);
+	void (*get_resv_regions)(struct device *, struct list_head *);
+	int (*of_xlate)(struct device *, struct of_phandle_args *);
+	bool (*is_attach_deferred)(struct device *);
+	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
+	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
+	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
+	int (*def_domain_type)(struct device *);
+	void (*remove_dev_pasid)(struct device *, ioasid_t);
+	const struct iommu_domain_ops *default_domain_ops;
+	long unsigned int pgsize_bitmap;
+	struct module *owner;
+};
+
+struct device_type {
+	const char *name;
+	const struct attribute_group **groups;
+	int (*uevent)(struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *);
+	void (*release)(struct device *);
+	const struct dev_pm_ops *pm;
+};
+
+struct class {
+	const char *name;
+	struct module *owner;
+	const struct attribute_group **class_groups;
+	const struct attribute_group **dev_groups;
+	struct kobject *dev_kobj;
+	int (*dev_uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *);
+	void (*class_release)(struct class *);
+	void (*dev_release)(struct device *);
+	int (*shutdown_pre)(struct device *);
+	const struct kobj_ns_type_operations *ns_type;
+	const void * (*namespace)(const struct device *);
+	void (*get_ownership)(const struct device *, kuid_t *, kgid_t *);
+	const struct dev_pm_ops *pm;
+	struct subsys_private *p;
+};
+
+typedef __u64 Elf64_Addr;
+
+typedef __u16 Elf64_Half;
+
+typedef __u64 Elf64_Off;
+
+typedef __u32 Elf64_Word;
+
+typedef __u64 Elf64_Xword;
+
+struct elf64_sym {
+	Elf64_Word st_name;
+	unsigned char st_info;
+	unsigned char st_other;
+	Elf64_Half st_shndx;
+	Elf64_Addr st_value;
+	Elf64_Xword st_size;
+};
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+struct iovec {
+	void *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+struct kernel_param_ops {
+	unsigned int flags;
+	int (*set)(const char *, const struct kernel_param *);
+	int (*get)(char *, const struct kernel_param *);
+	void (*free)(void *);
+};
+
+struct kparam_string;
+
+struct kparam_array;
+
+struct kernel_param {
+	const char *name;
+	struct module *mod;
+	const struct kernel_param_ops *ops;
+	const u16 perm;
+	s8 level;
+	u8 flags;
+	union {
+		void *arg;
+		const struct kparam_string *str;
+		const struct kparam_array *arr;
+	};
+};
+
+struct kparam_string {
+	unsigned int maxlen;
+	char *string;
+};
+
+struct kparam_array {
+	unsigned int max;
+	unsigned int elemsize;
+	unsigned int *num;
+	const struct kernel_param_ops *ops;
+	void *elem;
+};
+
+struct error_injection_entry {
+	long unsigned int addr;
+	int etype;
+};
+
+struct module_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
+	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
+	void (*setup)(struct module *, const char *);
+	int (*test)(struct module *);
+	void (*free)(struct module *);
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct trace_event_class;
+
+struct event_filter;
+
+struct perf_event;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head *perf_events;
+	struct bpf_prog_array *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	long unsigned int eval_value;
+};
+
+struct of_device_id {
+	char name[32];
+	char type[32];
+	char compatible[128];
+	const void *data;
+};
+
+typedef long unsigned int kernel_ulong_t;
+
+struct acpi_device_id {
+	__u8 id[16];
+	kernel_ulong_t driver_data;
+	__u32 cls;
+	__u32 cls_msk;
+};
+
+struct device_dma_parameters {
+	unsigned int max_segment_size;
+	unsigned int min_align_mask;
+	long unsigned int segment_boundary_mask;
+};
+
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
+};
+
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
+};
+
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
+};
+
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
+};
+
+typedef u64 dma_addr_t;
+
+struct bus_dma_region {
+	phys_addr_t cpu_start;
+	dma_addr_t dma_start;
+	u64 size;
+	u64 offset;
+};
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	mempool_t bio_integrity_pool;
+	mempool_t bvec_integrity_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct cdrom_device_info;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	short unsigned int events;
+	short unsigned int event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	long unsigned int state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject queue_kobj;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	struct kobject integrity_kobj;
+	unsigned int nr_zones;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	struct cdrom_device_info *cdi;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	struct blk_independent_access_ranges *ia_ranges;
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	short unsigned int bip_vcnt;
+	short unsigned int bip_max_vcnt;
+	short unsigned int bip_flags;
+	struct bvec_iter bio_iter;
+	short: 16;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+} __attribute__((packed));
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+struct blk_integrity_iter;
+
+typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+
+typedef void integrity_prepare_fn(struct request *);
+
+typedef void integrity_complete_fn(struct request *, unsigned int);
+
+struct blk_integrity_profile {
+	integrity_processing_fn *generate_fn;
+	integrity_processing_fn *verify_fn;
+	integrity_prepare_fn *prepare_fn;
+	integrity_complete_fn *complete_fn;
+	const char *name;
+};
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct block_device *, fmode_t);
+	void (*release)(struct gendisk *, fmode_t);
+	int (*rw_page)(struct block_device *, sector_t, struct page *, enum req_op);
+	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	void (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+};
+
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
+};
+
+struct seq_buf {
+	char *buffer;
+	size_t size;
+	size_t len;
+	loff_t readpos;
+};
+
+struct trace_seq {
+	char buffer[4096];
+	struct seq_buf seq;
+	int full;
+};
+
+enum perf_sw_ids {
+	PERF_COUNT_SW_CPU_CLOCK = 0,
+	PERF_COUNT_SW_TASK_CLOCK = 1,
+	PERF_COUNT_SW_PAGE_FAULTS = 2,
+	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
+	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
+	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
+	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
+	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
+	PERF_COUNT_SW_EMULATION_FAULTS = 8,
+	PERF_COUNT_SW_DUMMY = 9,
+	PERF_COUNT_SW_BPF_OUTPUT = 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+};
+
+union perf_mem_data_src {
+	__u64 val;
+	struct {
+		__u64 mem_op: 5;
+		__u64 mem_lvl: 14;
+		__u64 mem_snoop: 5;
+		__u64 mem_lock: 2;
+		__u64 mem_dtlb: 7;
+		__u64 mem_lvl_num: 4;
+		__u64 mem_remote: 1;
+		__u64 mem_snoopx: 2;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
+	};
+};
+
+struct perf_branch_entry {
+	__u64 from;
+	__u64 to;
+	__u64 mispred: 1;
+	__u64 predicted: 1;
+	__u64 in_tx: 1;
+	__u64 abort: 1;
+	__u64 cycles: 16;
+	__u64 type: 4;
+	__u64 spec: 2;
+	__u64 new_type: 4;
+	__u64 priv: 3;
+	__u64 reserved: 31;
+};
+
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
+};
+
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct cgroup_namespace {
+	struct ns_common ns;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct css_set *root_cset;
+};
+
+struct ftrace_regs {
+	struct pt_regs regs;
+};
+
+struct ftrace_ops;
+
+typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);
+
+struct ftrace_hash;
+
+struct ftrace_ops_hash {
+	struct ftrace_hash *notrace_hash;
+	struct ftrace_hash *filter_hash;
+	struct mutex regex_lock;
+};
+
+enum ftrace_ops_cmd {
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_SELF = 0,
+	FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER = 1,
+	FTRACE_OPS_CMD_DISABLE_SHARE_IPMODIFY_PEER = 2,
+};
+
+typedef int (*ftrace_ops_func_t)(struct ftrace_ops *, enum ftrace_ops_cmd);
+
+struct ftrace_ops {
+	ftrace_func_t func;
+	struct ftrace_ops *next;
+	long unsigned int flags;
+	void *private;
+	ftrace_func_t saved_func;
+	struct ftrace_ops_hash local_hash;
+	struct ftrace_ops_hash *func_hash;
+	struct ftrace_ops_hash old_hash;
+	long unsigned int trampoline;
+	long unsigned int trampoline_size;
+	struct list_head list;
+	ftrace_ops_func_t ops_func;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_regs {
+	__u64 abi;
+	struct pt_regs *regs;
+};
+
+struct u64_stats_sync {};
+
+struct psi_group {};
+
+struct cgroup_taskset;
+
+struct cftype;
+
+struct cgroup_subsys {
+	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
+	int (*css_online)(struct cgroup_subsys_state *);
+	void (*css_offline)(struct cgroup_subsys_state *);
+	void (*css_released)(struct cgroup_subsys_state *);
+	void (*css_free)(struct cgroup_subsys_state *);
+	void (*css_reset)(struct cgroup_subsys_state *);
+	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
+	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*can_attach)(struct cgroup_taskset *);
+	void (*cancel_attach)(struct cgroup_taskset *);
+	void (*attach)(struct cgroup_taskset *);
+	void (*post_attach)();
+	int (*can_fork)(struct task_struct *, struct css_set *);
+	void (*cancel_fork)(struct task_struct *, struct css_set *);
+	void (*fork)(struct task_struct *);
+	void (*exit)(struct task_struct *);
+	void (*release)(struct task_struct *);
+	void (*bind)(struct cgroup_subsys_state *);
+	bool early_init: 1;
+	bool implicit_on_dfl: 1;
+	bool threaded: 1;
+	int id;
+	const char *name;
+	const char *legacy_name;
+	struct cgroup_root *root;
+	struct idr css_idr;
+	struct list_head cfts;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	unsigned int depends_on;
+};
+
+struct cgroup_rstat_cpu {
+	struct u64_stats_sync bsync;
+	struct cgroup_base_stat bstat;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup *updated_children;
+	struct cgroup *updated_next;
+};
+
+struct cgroup_root {
+	struct kernfs_root *kf_root;
+	unsigned int subsys_mask;
+	int hierarchy_id;
+	struct cgroup cgrp;
+	struct cgroup *cgrp_ancestor_storage;
+	atomic_t nr_cgrps;
+	struct list_head root_list;
+	unsigned int flags;
+	char release_agent_path[4096];
+	char name[64];
+};
+
+struct cftype {
+	char name[64];
+	long unsigned int private;
+	size_t max_write_len;
+	unsigned int flags;
+	unsigned int file_offset;
+	struct cgroup_subsys *ss;
+	struct list_head node;
+	struct kernfs_ops *kf_ops;
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
+	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
+	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+};
+
+struct perf_callchain_entry {
+	__u64 nr;
+	__u64 ip[0];
+};
+
+typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);
+
+struct perf_raw_frag {
+	union {
+		struct perf_raw_frag *next;
+		long unsigned int pad;
+	};
+	perf_copy_f copy;
+	void *data;
+	u32 size;
+} __attribute__((packed));
+
+struct perf_raw_record {
+	struct perf_raw_frag frag;
+	u32 size;
+};
+
+struct perf_branch_stack {
+	__u64 nr;
+	__u64 hw_idx;
+	struct perf_branch_entry entries[0];
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			long unsigned int config_base;
+			long unsigned int event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	long unsigned int addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct perf_cpu_pmu_context;
+
+struct perf_event_pmu_context;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int *pmu_disable_count;
+	struct perf_cpu_pmu_context *cpu_pmu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_pmu_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_pmu_context *, struct perf_event_pmu_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	bool (*filter)(struct pmu *, int);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+struct perf_event_pmu_context {
+	struct pmu *pmu;
+	struct perf_event_context *ctx;
+	struct list_head pmu_ctx_entry;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	unsigned int embedded: 1;
+	unsigned int nr_events;
+	atomic_t refcount;
+	struct callback_head callback_head;
+	void *task_ctx_data;
+	int rotate_necessary;
+};
+
+struct perf_cpu_pmu_context {
+	struct perf_event_pmu_context epc;
+	struct perf_event_pmu_context *task_epc;
+	struct list_head sched_cb_entry;
+	int sched_cb_usage;
+	int active_oncpu;
+	int exclusive;
+	raw_spinlock_t hrtimer_lock;
+	struct hrtimer hrtimer;
+	ktime_t hrtimer_interval;
+	unsigned int hrtimer_active;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = 4294967292,
+	PERF_EVENT_STATE_EXIT = 4294967293,
+	PERF_EVENT_STATE_ERROR = 4294967294,
+	PERF_EVENT_STATE_OFF = 4294967295,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct perf_buffer;
+
+struct perf_addr_filter_range;
+
+struct bpf_prog;
+
+struct perf_cgroup;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	struct perf_event_pmu_context *pmu_ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	long unsigned int rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	unsigned int pending_wakeup;
+	unsigned int pending_kill;
+	unsigned int pending_disable;
+	unsigned int pending_sigtrap;
+	long unsigned int pending_addr;
+	struct irq_work pending_irq;
+	struct callback_head pending_task;
+	unsigned int pending_work;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	long unsigned int addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	struct ftrace_ops ftrace_ops;
+	struct perf_cgroup *cgrp;
+	struct list_head sb_list;
+};
+
+struct perf_output_handle {
+	struct perf_event *event;
+	struct perf_buffer *rb;
+	long unsigned int wakeup;
+	long unsigned int size;
+	u64 aux_flags;
+	union {
+		void *addr;
+		long unsigned int head;
+	};
+	int page;
+};
+
+struct perf_addr_filter_range {
+	long unsigned int start;
+	long unsigned int size;
+};
+
+struct perf_sample_data {
+	u64 sample_flags;
+	u64 period;
+	struct perf_branch_stack *br_stack;
+	union perf_sample_weight weight;
+	union perf_mem_data_src data_src;
+	u64 txn;
+	u64 addr;
+	struct perf_raw_record *raw;
+	u64 type;
+	u64 ip;
+	struct {
+		u32 pid;
+		u32 tid;
+	} tid_entry;
+	u64 time;
+	u64 id;
+	u64 stream_id;
+	struct {
+		u32 cpu;
+		u32 reserved;
+	} cpu_entry;
+	struct perf_callchain_entry *callchain;
+	u64 aux_size;
+	struct perf_regs regs_user;
+	struct perf_regs regs_intr;
+	u64 stack_user_size;
+	u64 phys_addr;
+	u64 cgroup;
+	u64 data_page_size;
+	u64 code_page_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_cgroup_info;
+
+struct perf_cgroup {
+	struct cgroup_subsys_state css;
+	struct perf_cgroup_info *info;
+};
+
+struct perf_cgroup_info {
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	int active;
+};
+
+struct trace_entry {
+	short unsigned int type;
+	unsigned char flags;
+	unsigned char preempt_count;
+	int pid;
+};
+
+struct trace_array;
+
+struct tracer;
+
+struct array_buffer;
+
+struct ring_buffer_iter;
+
+struct trace_iterator {
+	struct trace_array *tr;
+	struct tracer *trace;
+	struct array_buffer *array_buffer;
+	void *private;
+	int cpu_file;
+	struct mutex mutex;
+	struct ring_buffer_iter **buffer_iter;
+	long unsigned int iter_flags;
+	void *temp;
+	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
+	long int wait_index;
+	struct trace_seq tmp_seq;
+	cpumask_var_t started;
+	bool snapshot;
+	struct trace_seq seq;
+	struct trace_entry *ent;
+	long unsigned int lost_events;
+	int leftover;
+	int ent_size;
+	int cpu;
+	u64 ts;
+	loff_t pos;
+	long int idx;
+};
+
+enum print_line_t {
+	TRACE_TYPE_PARTIAL_LINE = 0,
+	TRACE_TYPE_HANDLED = 1,
+	TRACE_TYPE_UNHANDLED = 2,
+	TRACE_TYPE_NO_CONSUME = 3,
+};
+
+typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
+
+struct trace_event_functions {
+	trace_print_func trace;
+	trace_print_func raw;
+	trace_print_func hex;
+	trace_print_func binary;
+};
+
+enum trace_reg {
+	TRACE_REG_REGISTER = 0,
+	TRACE_REG_UNREGISTER = 1,
+	TRACE_REG_PERF_REGISTER = 2,
+	TRACE_REG_PERF_UNREGISTER = 3,
+	TRACE_REG_PERF_OPEN = 4,
+	TRACE_REG_PERF_CLOSE = 5,
+	TRACE_REG_PERF_ADD = 6,
+	TRACE_REG_PERF_DEL = 7,
+};
+
+struct trace_event_fields {
+	const char *type;
+	union {
+		struct {
+			const char *name;
+			const int size;
+			const int align;
+			const int is_signed;
+			const int filter_type;
+			const int len;
+		};
+		int (*define_fields)(struct trace_event_call *);
+	};
+};
+
+struct trace_event_class {
+	const char *system;
+	void *probe;
+	void *perf_probe;
+	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
+	struct trace_event_fields *fields_array;
+	struct list_head * (*get_fields)(struct trace_event_call *);
+	struct list_head fields;
+	int (*raw_init)(struct trace_event_call *);
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED_BIT = 0,
+	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
+	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
+	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
+	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
+	TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+	TRACE_EVENT_FL_KPROBE_BIT = 6,
+	TRACE_EVENT_FL_UPROBE_BIT = 7,
+	TRACE_EVENT_FL_EPROBE_BIT = 8,
+	TRACE_EVENT_FL_CUSTOM_BIT = 9,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED_BIT = 0,
+	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
+	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
+	EVENT_FILE_FL_FILTERED_BIT = 3,
+	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
+	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
+	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
+	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
+	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
+	EVENT_FILE_FL_PID_FILTER_BIT = 9,
+	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
+};
+
+struct squashfs_super_block {
+	__le32 s_magic;
+	__le32 inodes;
+	__le32 mkfs_time;
+	__le32 block_size;
+	__le32 fragments;
+	__le16 compression;
+	__le16 block_log;
+	__le16 flags;
+	__le16 no_ids;
+	__le16 s_major;
+	__le16 s_minor;
+	__le64 root_inode;
+	__le64 bytes_used;
+	__le64 id_table_start;
+	__le64 xattr_id_table_start;
+	__le64 inode_table_start;
+	__le64 directory_table_start;
+	__le64 fragment_table_start;
+	__le64 lookup_table_start;
+};
+
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
+
+typedef short int __s16;
+
+typedef __s16 s16;
+
+typedef __u16 __be16;
+
+typedef __u32 __wsum;
+
+typedef long unsigned int uintptr_t;
+
+typedef u16 uint16_t;
+
+typedef long unsigned int irq_hw_number_t;
+
+struct cacheline_padding {
+	char x[0];
+};
+
+typedef int (*initcall_t)();
+
+typedef initcall_t initcall_entry_t;
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+struct kernel_mapping {
+	long unsigned int page_offset;
+	long unsigned int virt_addr;
+	uintptr_t phys_addr;
+	uintptr_t size;
+	long unsigned int va_pa_offset;
+	long unsigned int va_kernel_pa_offset;
+	long unsigned int va_kernel_xip_pa_offset;
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+struct mmiowb_state {
+	u16 nesting_count;
+	u16 mmiowb_pending;
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
+
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	long unsigned int defer_start;
+	long unsigned int defer_warn;
+	u32 pages_state_hold_cnt;
+	unsigned int frag_offset;
+	struct page *frag_page;
+	long int frag_users;
+	u32 xdp_mem_id;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	long unsigned int num_children;
+	long unsigned int num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	long unsigned int min_coredump;
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+struct free_area {
+	struct list_head free_list[6];
+	long unsigned int nr_free;
+};
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SECONDARY_PAGETABLE = 39,
+	NR_SWAPCACHE = 40,
+	NR_VM_NODE_STAT_ITEMS = 41,
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	atomic_long_t nonresident_age;
+	long unsigned int refaults[2];
+	long unsigned int flags;
+	struct pglist_data *pgdat;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	long unsigned int _watermark[4];
+	long unsigned int watermark_boost;
+	long unsigned int nr_reserved_highatomic;
+	long int lowmem_reserve[3];
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages *per_cpu_pageset;
+	struct per_cpu_zonestat *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	long unsigned int zone_start_pfn;
+	atomic_long_t managed_pages;
+	long unsigned int spanned_pages;
+	long unsigned int present_pages;
+	long unsigned int cma_pages;
+	const char *name;
+	long unsigned int nr_isolate_pageblock;
+	int initialized;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct free_area free_area[11];
+	long unsigned int flags;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	long unsigned int percpu_drift_mark;
+	long unsigned int compact_cached_free_pfn;
+	long unsigned int compact_cached_migrate_pfn[2];
+	long unsigned int compact_init_migrate_pfn;
+	long unsigned int compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	short: 16;
+	struct cacheline_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[4];
+};
+
+enum zone_type {
+	ZONE_DMA32 = 0,
+	ZONE_NORMAL = 1,
+	ZONE_MOVABLE = 2,
+	__MAX_NR_ZONES = 3,
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	long unsigned int split_queue_len;
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[3];
+	struct zonelist node_zonelists[1];
+	int nr_zones;
+	long unsigned int node_start_pfn;
+	long unsigned int node_present_pages;
+	long unsigned int node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	long unsigned int nr_reclaim_start;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	long unsigned int totalreserve_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	long unsigned int flags;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	struct per_cpu_nodestat *per_cpu_nodestats;
+	atomic_long_t vm_stat[41];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short int free_factor;
+	struct list_head lists[13];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[41];
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct notifier_block;
+
+typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block *next;
+	int priority;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block *head;
+};
+
+struct raw_notifier_head {
+	struct notifier_block *head;
+};
+
+struct rhash_head {
+	struct rhash_head *next;
+};
+
+struct rhashtable;
+
+struct rhashtable_compare_arg {
+	struct rhashtable *ht;
+	const void *key;
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
+
+struct rhashtable_params {
+	u16 nelem_hint;
+	u16 key_len;
+	u16 key_offset;
+	u16 head_offset;
+	unsigned int max_size;
+	u16 min_size;
+	bool automatic_shrinking;
+	rht_hashfn_t hashfn;
+	rht_obj_hashfn_t obj_hashfn;
+	rht_obj_cmpfn_t obj_cmpfn;
+};
+
+struct bucket_table;
+
+struct rhashtable {
+	struct bucket_table *tbl;
+	unsigned int key_len;
+	unsigned int max_elems;
+	struct rhashtable_params p;
+	bool rhlist;
+	struct work_struct run_work;
+	struct mutex mutex;
+	spinlock_t lock;
+	atomic_t nelems;
+};
+
+struct pipe_buffer;
+
+struct pipe_inode_info {
+	struct mutex mutex;
+	wait_queue_head_t rd_wait;
+	wait_queue_head_t wr_wait;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int max_usage;
+	unsigned int ring_size;
+	unsigned int nr_accounted;
+	unsigned int readers;
+	unsigned int writers;
+	unsigned int files;
+	unsigned int r_counter;
+	unsigned int w_counter;
+	bool poll_usage;
+	struct page *tmp_page;
+	struct fasync_struct *fasync_readers;
+	struct fasync_struct *fasync_writers;
+	struct pipe_buffer *bufs;
+	struct user_struct *user;
+};
+
+typedef unsigned int sk_buff_data_t;
+
+struct net_device;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				long unsigned int dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	union {
+		struct sock *sk;
+		int ip_defrag_offset;
+	};
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			long unsigned int _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		long unsigned int _sk_redir;
+	};
+	long unsigned int _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u8 scm_io_uring: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	long unsigned int emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	long unsigned int elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	long unsigned int watermark;
+	long unsigned int failcnt;
+	struct cacheline_padding _pad2_;
+	long unsigned int min;
+	long unsigned int low;
+	long unsigned int high;
+	long unsigned int max;
+	struct page_counter *parent;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vmpressure {
+	long unsigned int scanned;
+	long unsigned int reclaimed;
+	long unsigned int tree_scanned;
+	long unsigned int tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	long unsigned int period_time;
+	long unsigned int dirty_limit_tstamp;
+	long unsigned int dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct memcg_vmstats;
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	long unsigned int zswap_max;
+	long unsigned int soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	long unsigned int move_charge_at_immigrate;
+	spinlock_t move_lock;
+	long unsigned int move_lock_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct memcg_vmstats *vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	long unsigned int socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct mem_cgroup_per_node *nodeinfo[0];
+	long: 64;
+};
+
+struct reclaim_state {
+	long unsigned int reclaimed_slab;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	long unsigned int state;
+	long unsigned int last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	long unsigned int bw_time_stamp;
+	long unsigned int dirtied_stamp;
+	long unsigned int written_stamp;
+	long unsigned int write_bandwidth;
+	long unsigned int avg_write_bandwidth;
+	long unsigned int dirty_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	long unsigned int dirty_sleep;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	long unsigned int ra_pages;
+	long unsigned int io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+};
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	unsigned int punt_to_cgroup: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	long unsigned int _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+	bool _workingset;
+	long unsigned int _pflags;
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int data: 24;
+	unsigned int flags: 8;
+};
+
+struct swap_cluster_list {
+	struct swap_cluster_info head;
+	struct swap_cluster_info tail;
+};
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	long unsigned int flags;
+	short int prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct swap_cluster_list free_clusters;
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int *cluster_next_cpu;
+	struct percpu_cluster *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	long unsigned int *frontswap_map;
+	atomic_t frontswap_pages;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct swap_cluster_list discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	unsigned int lsm_flags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char *uptr;
+	int refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	long unsigned int vma_pages;
+	struct mm_struct *mm;
+	long unsigned int p;
+	long unsigned int argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	long unsigned int loader;
+	long unsigned int exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+	DOMAIN_BUS_PCI_DEVICE_MSI = 11,
+	DOMAIN_BUS_PCI_DEVICE_MSIX = 12,
+	DOMAIN_BUS_DMAR = 13,
+	DOMAIN_BUS_AMDVI = 14,
+	DOMAIN_BUS_PCI_DEVICE_IMS = 15,
+};
+
+struct irq_domain_ops;
+
+struct irq_domain_chip_generic;
+
+struct msi_parent_ops;
+
+struct irq_data;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct device *pm_dev;
+	struct irq_domain *parent;
+	const struct msi_parent_ops *msi_parent_ops;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct mutex revmap_mutex;
+	struct irq_data *revmap[0];
+};
+
+typedef u32 phandle;
+
+struct property;
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	long unsigned int _flags;
+	void *data;
+};
+
+enum cpuhp_state {
+	CPUHP_INVALID = 4294967295,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_IBMVNIC_DEAD = 11,
+	CPUHP_SLUB_DEAD = 12,
+	CPUHP_DEBUG_OBJ_DEAD = 13,
+	CPUHP_MM_WRITEBACK_DEAD = 14,
+	CPUHP_MM_DEMOTION_DEAD = 15,
+	CPUHP_MM_VMSTAT_DEAD = 16,
+	CPUHP_SOFTIRQ_DEAD = 17,
+	CPUHP_NET_MVNETA_DEAD = 18,
+	CPUHP_CPUIDLE_DEAD = 19,
+	CPUHP_ARM64_FPSIMD_DEAD = 20,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 21,
+	CPUHP_IRQ_POLL_DEAD = 22,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 23,
+	CPUHP_BIO_DEAD = 24,
+	CPUHP_ACPI_CPUDRV_DEAD = 25,
+	CPUHP_S390_PFAULT_DEAD = 26,
+	CPUHP_BLK_MQ_DEAD = 27,
+	CPUHP_FS_BUFF_DEAD = 28,
+	CPUHP_PRINTK_DEAD = 29,
+	CPUHP_MM_MEMCQ_DEAD = 30,
+	CPUHP_XFS_DEAD = 31,
+	CPUHP_PERCPU_CNT_DEAD = 32,
+	CPUHP_RADIX_DEAD = 33,
+	CPUHP_PAGE_ALLOC = 34,
+	CPUHP_NET_DEV_DEAD = 35,
+	CPUHP_PCI_XGENE_DEAD = 36,
+	CPUHP_IOMMU_IOVA_DEAD = 37,
+	CPUHP_LUSTRE_CFS_DEAD = 38,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 39,
+	CPUHP_PADATA_DEAD = 40,
+	CPUHP_AP_DTPM_CPU_DEAD = 41,
+	CPUHP_RANDOM_PREPARE = 42,
+	CPUHP_WORKQUEUE_PREP = 43,
+	CPUHP_POWER_NUMA_PREPARE = 44,
+	CPUHP_HRTIMERS_PREPARE = 45,
+	CPUHP_PROFILE_PREPARE = 46,
+	CPUHP_X2APIC_PREPARE = 47,
+	CPUHP_SMPCFD_PREPARE = 48,
+	CPUHP_RELAY_PREPARE = 49,
+	CPUHP_SLAB_PREPARE = 50,
+	CPUHP_MD_RAID5_PREPARE = 51,
+	CPUHP_RCUTREE_PREP = 52,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 53,
+	CPUHP_POWERPC_PMAC_PREPARE = 54,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 55,
+	CPUHP_XEN_PREPARE = 56,
+	CPUHP_XEN_EVTCHN_PREPARE = 57,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 58,
+	CPUHP_SH_SH3X_PREPARE = 59,
+	CPUHP_NET_FLOW_PREPARE = 60,
+	CPUHP_TOPOLOGY_PREPARE = 61,
+	CPUHP_NET_IUCV_PREPARE = 62,
+	CPUHP_ARM_BL_PREPARE = 63,
+	CPUHP_TRACE_RB_PREPARE = 64,
+	CPUHP_MM_ZS_PREPARE = 65,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 66,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 67,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 68,
+	CPUHP_ZCOMP_PREPARE = 69,
+	CPUHP_TIMERS_PREPARE = 70,
+	CPUHP_MIPS_SOC_PREPARE = 71,
+	CPUHP_BP_PREPARE_DYN = 72,
+	CPUHP_BP_PREPARE_DYN_END = 92,
+	CPUHP_BRINGUP_CPU = 93,
+	CPUHP_AP_IDLE_DEAD = 94,
+	CPUHP_AP_OFFLINE = 95,
+	CPUHP_AP_CACHECTRL_STARTING = 96,
+	CPUHP_AP_SCHED_STARTING = 97,
+	CPUHP_AP_RCUTREE_DYING = 98,
+	CPUHP_AP_CPU_PM_STARTING = 99,
+	CPUHP_AP_IRQ_GIC_STARTING = 100,
+	CPUHP_AP_IRQ_HIP04_STARTING = 101,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 102,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 103,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 104,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 105,
+	CPUHP_AP_IRQ_RISCV_STARTING = 106,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 107,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 108,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 109,
+	CPUHP_AP_MICROCODE_LOADER = 110,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 111,
+	CPUHP_AP_PERF_X86_STARTING = 112,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 113,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 114,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 115,
+	CPUHP_AP_PERF_XTENSA_STARTING = 116,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 117,
+	CPUHP_AP_ARM_SDEI_STARTING = 118,
+	CPUHP_AP_ARM_VFP_STARTING = 119,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 120,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 121,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 122,
+	CPUHP_AP_PERF_ARM_STARTING = 123,
+	CPUHP_AP_PERF_RISCV_STARTING = 124,
+	CPUHP_AP_ARM_L2X0_STARTING = 125,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 126,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 127,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 128,
+	CPUHP_AP_JCORE_TIMER_STARTING = 129,
+	CPUHP_AP_ARM_TWD_STARTING = 130,
+	CPUHP_AP_QCOM_TIMER_STARTING = 131,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 132,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 133,
+	CPUHP_AP_MARCO_TIMER_STARTING = 134,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 135,
+	CPUHP_AP_ARC_TIMER_STARTING = 136,
+	CPUHP_AP_RISCV_TIMER_STARTING = 137,
+	CPUHP_AP_CLINT_TIMER_STARTING = 138,
+	CPUHP_AP_CSKY_TIMER_STARTING = 139,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 140,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 141,
+	CPUHP_AP_KVM_STARTING = 142,
+	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 143,
+	CPUHP_AP_KVM_ARM_VGIC_STARTING = 144,
+	CPUHP_AP_KVM_ARM_TIMER_STARTING = 145,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 146,
+	CPUHP_AP_ARM_XEN_STARTING = 147,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 148,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 149,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 150,
+	CPUHP_AP_SMPCFD_DYING = 151,
+	CPUHP_AP_X86_TBOOT_DYING = 152,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 153,
+	CPUHP_AP_ONLINE = 154,
+	CPUHP_TEARDOWN_CPU = 155,
+	CPUHP_AP_ONLINE_IDLE = 156,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 157,
+	CPUHP_AP_SMPBOOT_THREADS = 158,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 159,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 160,
+	CPUHP_AP_BLK_MQ_ONLINE = 161,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 162,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 163,
+	CPUHP_AP_PERF_ONLINE = 164,
+	CPUHP_AP_PERF_X86_ONLINE = 165,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 166,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 167,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 168,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 169,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 170,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 171,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 172,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 173,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 188,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 189,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 194,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 195,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 196,
+	CPUHP_AP_PERF_CSKY_ONLINE = 197,
+	CPUHP_AP_WATCHDOG_ONLINE = 198,
+	CPUHP_AP_WORKQUEUE_ONLINE = 199,
+	CPUHP_AP_RANDOM_ONLINE = 200,
+	CPUHP_AP_RCUTREE_ONLINE = 201,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 202,
+	CPUHP_AP_ONLINE_DYN = 203,
+	CPUHP_AP_ONLINE_DYN_END = 233,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 234,
+	CPUHP_AP_X86_HPET_ONLINE = 235,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 236,
+	CPUHP_AP_ACTIVE = 237,
+	CPUHP_ONLINE = 238,
+};
+
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	long unsigned int hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct proc_dir_entry;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	long unsigned int last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	long unsigned int threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+};
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	long unsigned int thread_flags;
+	long unsigned int thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct msi_msg;
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	long unsigned int flags;
+};
+
+struct irq_chip_regs {
+	long unsigned int enable;
+	long unsigned int disable;
+	long unsigned int mask;
+	long unsigned int ack;
+	long unsigned int eoi;
+	long unsigned int type;
+	long unsigned int polarity;
+};
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	long unsigned int installed;
+	long unsigned int unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct ref_tracker_dir {
+	spinlock_t lock;
+	unsigned int quarantine_avail;
+	refcount_t untracked;
+	refcount_t no_tracker;
+	bool dead;
+	struct list_head list;
+	struct list_head quarantine;
+};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse *prot_inuse;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_xfrm_mib;
+
+struct linux_tls_mib;
+
+struct mptcp_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct netns_mib {
+	struct ipstats_mib *ip_statistics;
+	struct ipstats_mib *ipv6_statistics;
+	struct tcp_mib *tcp_statistics;
+	struct linux_mib *net_statistics;
+	struct udp_mib *udp_statistics;
+	struct udp_mib *udp_stats_in6;
+	struct linux_xfrm_mib *xfrm_statistics;
+	struct linux_tls_mib *tls_statistics;
+	struct mptcp_mib *mptcp_statistics;
+	struct udp_mib *udplite_statistics;
+	struct udp_mib *udplite_stats_in6;
+	struct icmp_mib *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct udp_table;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row tcp_death_row;
+	struct udp_table *udp_table;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table *fib_main;
+	struct fib_table *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_raw_l3mdev_accept;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_l3mdev_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	unsigned int sysctl_tcp_child_ehash_entries;
+	long unsigned int sysctl_tcp_comp_sack_delay_ns;
+	long unsigned int sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops *tcp_congestion_control;
+	struct tcp_fastopen_context *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	long unsigned int tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	u8 sysctl_tcp_plb_enabled;
+	u8 sysctl_tcp_plb_idle_rehash_rounds;
+	u8 sysctl_tcp_plb_rehash_rounds;
+	u8 sysctl_tcp_plb_suspend_rto_sec;
+	int sysctl_tcp_plb_cong_thresh;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_udp_l3mdev_accept;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	unsigned int sysctl_udp_child_hash_entries;
+	long unsigned int *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct list_head mr_tables;
+	struct fib_rules_ops *mr_rules_ops;
+	u32 sysctl_fib_multipath_hash_fields;
+	u8 sysctl_fib_multipath_use_neigh;
+	u8 sysctl_fib_multipath_hash_policy;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dst_entry;
+
+struct neighbour;
+
+struct dst_ops {
+	short unsigned int family;
+	unsigned int gc_thresh;
+	int (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *, int);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	long unsigned int icmpv6_ratemask[4];
+	long unsigned int *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	bool skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	long unsigned int ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sctp_mib;
+
+struct netns_sctp {
+	struct sctp_mib *sctp_statistics;
+	struct proc_dir_entry *proc_net_sctp;
+	struct ctl_table_header *sysctl_header;
+	struct sock *ctl_sock;
+	struct sock *udp4_sock;
+	struct sock *udp6_sock;
+	int udp_port;
+	int encap_port;
+	struct list_head local_addr_list;
+	struct list_head addr_waitq;
+	struct timer_list addr_wq_timer;
+	struct list_head auto_asconf_splist;
+	spinlock_t addr_wq_lock;
+	spinlock_t local_addr_lock;
+	unsigned int rto_initial;
+	unsigned int rto_min;
+	unsigned int rto_max;
+	int rto_alpha;
+	int rto_beta;
+	int max_burst;
+	int cookie_preserve_enable;
+	char *sctp_hmac_alg;
+	unsigned int valid_cookie_life;
+	unsigned int sack_timeout;
+	unsigned int hb_interval;
+	unsigned int probe_interval;
+	int max_retrans_association;
+	int max_retrans_path;
+	int max_retrans_init;
+	int pf_retrans;
+	int ps_retrans;
+	int pf_enable;
+	int pf_expose;
+	int sndbuf_policy;
+	int rcvbuf_policy;
+	int default_auto_asconf;
+	int addip_enable;
+	int addip_noauth;
+	int prsctp_enable;
+	int reconf_enable;
+	int auth_enable;
+	int intl_enable;
+	int ecn_enable;
+	int scope_policy;
+	int rwnd_upd_shift;
+	long unsigned int max_autoclose;
+	int l3mdev_accept;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger *nf_loggers[11];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries *hooks_ipv4[5];
+	struct nf_hook_entries *hooks_ipv6[5];
+	struct nf_hook_entries *hooks_arp[3];
+	struct nf_hook_entries *hooks_bridge[5];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+};
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+	unsigned int offload_timeout;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+	unsigned int offload_timeout;
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct nf_ct_event_notifier;
+
+struct netns_ct {
+	u8 ctnetlink_has_listener;
+	bool ecache_dwork_pending;
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat *stat;
+	struct nf_ct_event_notifier *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+	unsigned int labels_used;
+};
+
+struct netns_nftables {
+	u8 gencursor;
+};
+
+struct nf_flow_table_stat;
+
+struct netns_ft {
+	struct nf_flow_table_stat *stat;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head *state_bydst;
+	struct hlist_head *state_bysrc;
+	struct hlist_head *state_byspi;
+	struct hlist_head *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	long: 64;
+	long: 64;
+};
+
+struct mpls_route;
+
+struct netns_mpls {
+	int ip_ttl_propagate;
+	int default_ttl;
+	size_t platform_labels;
+	struct mpls_route **platform_label;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct netns_ipvs;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	int ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct ref_tracker_dir notrefcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	long: 64;
+	struct netns_ipv4 ipv4;
+	struct netns_ipv6 ipv6;
+	struct netns_sctp sctp;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct netns_nftables nft;
+	struct netns_ft ft;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_ipvs *ipvs;
+	struct netns_mpls mpls;
+	struct netns_xdp xdp;
+	struct sock *crypto_nlsk;
+	struct sock *diag_nlsk;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct trace_buffer;
+
+struct trace_event_file;
+
+struct trace_event_buffer {
+	struct trace_buffer *buffer;
+	struct ring_buffer_event *event;
+	struct trace_event_file *trace_file;
+	void *entry;
+	unsigned int trace_ctx;
+	struct pt_regs *regs;
+};
+
+struct trace_subsystem_dir;
+
+struct trace_event_file {
+	struct list_head list;
+	struct trace_event_call *event_call;
+	struct event_filter *filter;
+	struct dentry *dir;
+	struct trace_array *tr;
+	struct trace_subsystem_dir *system;
+	struct list_head triggers;
+	long unsigned int flags;
+	atomic_t sm_ref;
+	atomic_t tm_ref;
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_CUSTOM = 512,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED = 1,
+	EVENT_FILE_FL_RECORDED_CMD = 2,
+	EVENT_FILE_FL_RECORDED_TGID = 4,
+	EVENT_FILE_FL_FILTERED = 8,
+	EVENT_FILE_FL_NO_SET_FILTER = 16,
+	EVENT_FILE_FL_SOFT_MODE = 32,
+	EVENT_FILE_FL_SOFT_DISABLED = 64,
+	EVENT_FILE_FL_TRIGGER_MODE = 128,
+	EVENT_FILE_FL_TRIGGER_COND = 256,
+	EVENT_FILE_FL_PID_FILTER = 512,
+	EVENT_FILE_FL_WAS_ENABLED = 1024,
+};
+
+enum {
+	FILTER_OTHER = 0,
+	FILTER_STATIC_STRING = 1,
+	FILTER_DYN_STRING = 2,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_COMM = 6,
+	FILTER_CPU = 7,
+};
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	long unsigned int _flags;
+	struct bin_attribute attr;
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
+};
+
+struct msi_domain_info;
+
+struct msi_parent_ops {
+	u32 supported_flags;
+	const char *prefix;
+	bool (*init_dev_msi_info)(struct device *, struct irq_domain *, struct irq_domain *, struct msi_domain_info *);
+};
+
+struct xbc_node {
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
+};
+
+enum wb_stat_item {
+	WB_RECLAIMABLE = 0,
+	WB_WRITEBACK = 1,
+	WB_DIRTIED = 2,
+	WB_WRITTEN = 3,
+	NR_WB_STAT_ITEMS = 4,
+};
+
+enum memcg_memory_event {
+	MEMCG_LOW = 0,
+	MEMCG_HIGH = 1,
+	MEMCG_MAX = 2,
+	MEMCG_OOM = 3,
+	MEMCG_OOM_KILL = 4,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
+};
+
+struct mem_cgroup_reclaim_iter {
+	struct mem_cgroup *position;
+	unsigned int generation;
+};
+
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	long unsigned int *map;
+};
+
+struct lruvec_stats_percpu {
+	long int state[41];
+	long int state_prev[41];
+};
+
+struct lruvec_stats {
+	long int state[41];
+	long int state_pending[41];
+};
+
+struct mem_cgroup_per_node {
+	struct lruvec lruvec;
+	struct lruvec_stats_percpu *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	long unsigned int lru_zone_size[15];
+	struct mem_cgroup_reclaim_iter iter;
+	struct shrinker_info *shrinker_info;
+	struct rb_node tree_node;
+	long unsigned int usage_in_excess;
+	bool on_tree;
+	struct mem_cgroup *memcg;
+};
+
+struct eventfd_ctx;
+
+struct mem_cgroup_threshold {
+	struct eventfd_ctx *eventfd;
+	long unsigned int threshold;
+};
+
+struct mem_cgroup_threshold_ary {
+	int current_threshold;
+	unsigned int size;
+	struct mem_cgroup_threshold entries[0];
+};
+
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+struct percpu_cluster {
+	struct swap_cluster_info index;
+	unsigned int next;
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
+	struct module *owner;
+	char *buffer[8];
+};
+
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_L2TPV3 = 30,
+	FLOW_DISSECTOR_KEY_MAX = 31,
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTPKTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	__IPSTATS_MIB_MAX = 37,
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	__ICMP_MIB_MAX = 28,
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	__ICMP6_MIB_MAX = 6,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	LINUX_MIB_TCPPLBREHASH = 126,
+	__LINUX_MIB_MAX = 127,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+enum {
+	LINUX_MIB_TLSNUM = 0,
+	LINUX_MIB_TLSCURRTXSW = 1,
+	LINUX_MIB_TLSCURRRXSW = 2,
+	LINUX_MIB_TLSCURRTXDEVICE = 3,
+	LINUX_MIB_TLSCURRRXDEVICE = 4,
+	LINUX_MIB_TLSTXSW = 5,
+	LINUX_MIB_TLSRXSW = 6,
+	LINUX_MIB_TLSTXDEVICE = 7,
+	LINUX_MIB_TLSRXDEVICE = 8,
+	LINUX_MIB_TLSDECRYPTERROR = 9,
+	LINUX_MIB_TLSRXDEVICERESYNC = 10,
+	LINUX_MIB_TLSDECRYPTRETRY = 11,
+	LINUX_MIB_TLSRXNOPADVIOL = 12,
+	__LINUX_MIB_TLSMAX = 13,
+};
+
+struct ipstats_mib {
+	u64 mibs[37];
+	struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+	long unsigned int mibs[28];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	long unsigned int mibs[6];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+	long unsigned int mibs[16];
+};
+
+struct udp_mib {
+	long unsigned int mibs[10];
+};
+
+struct linux_mib {
+	long unsigned int mibs[127];
+};
+
+struct linux_xfrm_mib {
+	long unsigned int mibs[29];
+};
+
+struct linux_tls_mib {
+	long unsigned int mibs[13];
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long int high_thresh;
+	long int low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 56;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+	long: 64;
+	long: 64;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	long unsigned int _metrics;
+	long unsigned int expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	short unsigned int flags;
+	short int obsolete;
+	short unsigned int header_len;
+	short unsigned int trailer_len;
+	atomic_t __refcnt;
+	int __use;
+	long unsigned int lastuse;
+	struct lwtunnel_state *lwtstate;
+	struct callback_head callback_head;
+	short int error;
+	short int __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_NUMPROTO = 11,
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+struct nf_flow_table_stat {
+	unsigned int count_wq_add;
+	unsigned int count_wq_del;
+	unsigned int count_wq_stats;
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = 4294967295,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	long unsigned int private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[3];
+	u8 chunks;
+	char data[0];
+};
+
+enum skb_ext_id {
+	SKB_EXT_BRIDGE_NF = 0,
+	SKB_EXT_SEC_PATH = 1,
+	SKB_EXT_MPTCP = 2,
+	SKB_EXT_NUM = 3,
+};
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+typedef __u64 __be64;
+
+typedef unsigned int slab_flags_t;
+
+typedef short unsigned int __kernel_sa_family_t;
+
+typedef __kernel_sa_family_t sa_family_t;
+
+struct sockaddr {
+	sa_family_t sa_family;
+	union {
+		char sa_data_min[14];
+		struct {
+			struct {			} __empty_sa_data;
+			char sa_data[0];
+		};
+	};
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	refcount_t refcnt;
+	u8 flags;
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+typedef struct {
+	struct net *net;
+} possible_net_t;
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	short unsigned int skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		long unsigned int skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	short unsigned int skc_tx_queue_mapping;
+	short unsigned int skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+typedef u64 netdev_features_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+	u32 classid;
+	u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct socket_wq;
+
+struct xfrm_policy;
+
+struct socket;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	struct sk_filter *sk_filter;
+	union {
+		struct socket_wq *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy *sk_policy[2];
+	struct dst_entry *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	long unsigned int sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long int sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	long unsigned int sk_pacing_rate;
+	long unsigned int sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	long unsigned int sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long int sk_rcvtimeo;
+	ktime_t sk_stamp;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u32 sk_tsflags;
+	u8 sk_shutdown;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	bool sk_use_task_frag;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	struct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport *sk_reuseport_cb;
+	struct bpf_local_storage *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+	struct hlist_node sk_bind2_node;
+};
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	short unsigned int loopback;
+} sync_serial_settings;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	short unsigned int loopback;
+	unsigned int slot_map;
+} te1_settings;
+
+typedef struct {
+	short unsigned int encoding;
+	short unsigned int parity;
+} raw_hdlc_proto;
+
+typedef struct {
+	unsigned int t391;
+	unsigned int t392;
+	unsigned int n391;
+	unsigned int n392;
+	unsigned int n393;
+	short unsigned int lmi;
+	short unsigned int dce;
+} fr_proto;
+
+typedef struct {
+	unsigned int dlci;
+} fr_proto_pvc;
+
+typedef struct {
+	unsigned int dlci;
+	char master[16];
+} fr_proto_pvc_info;
+
+typedef struct {
+	unsigned int interval;
+	unsigned int timeout;
+} cisco_proto;
+
+typedef struct {
+	short unsigned int dce;
+	unsigned int modulo;
+	unsigned int window;
+	unsigned int t1;
+	unsigned int t2;
+	unsigned int n2;
+} x25_hdlc_proto;
+
+struct ifmap {
+	long unsigned int mem_start;
+	long unsigned int mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct if_settings {
+	unsigned int type;
+	unsigned int size;
+	union {
+		raw_hdlc_proto *raw_hdlc;
+		cisco_proto *cisco;
+		fr_proto *fr;
+		fr_proto_pvc *fr_pvc;
+		fr_proto_pvc_info *fr_pvc_info;
+		x25_hdlc_proto *x25;
+		sync_serial_settings *sync;
+		te1_settings *te1;
+	} ifs_ifsu;
+};
+
+struct ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short int ifru_flags;
+		int ifru_ivalue;
+		int ifru_mtu;
+		struct ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		void *ifru_data;
+		struct if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
+};
+
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
+};
+
+typedef unsigned int tcflag_t;
+
+typedef unsigned char cc_t;
+
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct winsize {
+	short unsigned int ws_row;
+	short unsigned int ws_col;
+	short unsigned int ws_xpixel;
+	short unsigned int ws_ypixel;
+};
+
+struct tty_driver;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct tty_port;
+
+struct tty_struct {
+	struct kref kref;
+	struct device *dev;
+	struct tty_driver *driver;
+	const struct tty_operations *ops;
+	int index;
+	struct ld_semaphore ldisc_sem;
+	struct tty_ldisc *ldisc;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	long unsigned int flags;
+	int count;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		long unsigned int unused[0];
+	} flow;
+	struct {
+		spinlock_t lock;
+		struct pid *pgrp;
+		struct pid *session;
+		unsigned char pktstatus;
+		bool packet;
+		long unsigned int unused[0];
+	} ctrl;
+	int hw_stopped;
+	unsigned int receive_room;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	struct list_head tty_files;
+	int closing;
+	unsigned char *write_buf;
+	int write_cnt;
+	struct work_struct SAK_work;
+	struct tty_port *port;
+};
+
+struct posix_acl_entry {
+	short int e_tag;
+	short unsigned int e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	int used;
+	int size;
+	int commit;
+	int lookahead;
+	int read;
+	bool flags;
+	long unsigned int data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	int (*write)(struct tty_struct *, const unsigned char *, int);
+	int (*put_char)(struct tty_struct *, unsigned char);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*proc_show)(struct seq_file *, void *);
+};
+
+struct tty_driver {
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short int type;
+	short int subtype;
+	struct ktermios init_termios;
+	long unsigned int flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	long unsigned int flags;
+	long unsigned int iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);
+	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, unsigned int);
+	int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int);
+	void (*lookahead_buf)(struct tty_struct *, const unsigned char *, const unsigned char *, unsigned int);
+	struct module *owner;
+};
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_port_operations {
+	int (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, int);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+};
+
+struct tty_port_client_operations {
+	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const unsigned char *, const unsigned char *, unsigned int);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+enum {
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_RAM0 = 1048576,
+	Root_RAM1 = 1048577,
+	Root_FD0 = 2097152,
+	Root_HDA1 = 3145729,
+	Root_HDA2 = 3145730,
+	Root_SDA1 = 8388609,
+	Root_SDA2 = 8388610,
+	Root_HDC1 = 23068673,
+	Root_SR0 = 11534336,
+};
+
+typedef struct {
+	union {
+		void *kernel;
+		void *user;
+	};
+	bool is_kernel: 1;
+} sockptr_t;
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_L2TP = 115,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	struct flowi_tunnel flowic_tun_key;
+	__u32 flowic_multipath_hash;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+	} u;
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+struct icmpv6_mib_device {
+	atomic_long_t mibs[6];
+};
+
+struct icmpv6msg_mib_device {
+	atomic_long_t mibs[512];
+};
+
+struct fib_rule;
+
+struct fib_lookup_arg;
+
+struct fib_rule_hdr;
+
+struct nlattr;
+
+struct netlink_ext_ack;
+
+struct fib_rules_ops {
+	int family;
+	struct list_head list;
+	int rule_size;
+	int addr_size;
+	int unresolved_rules;
+	int nr_goto_rules;
+	unsigned int fib_rules_seq;
+	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
+	int (*match)(struct fib_rule *, struct flowi *, int);
+	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*delete)(struct fib_rule *);
+	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
+	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
+	size_t (*nlmsg_payload)(struct fib_rule *);
+	void (*flush_cache)(struct fib_rules_ops *);
+	int nlgroup;
+	struct list_head rules_list;
+	struct module *owner;
+	struct net *fro_net;
+	struct callback_head rcu;
+};
+
+struct fib_notifier_ops {
+	int family;
+	struct list_head list;
+	unsigned int (*fib_seq_read)(struct net *);
+	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
+	struct module *owner;
+	struct callback_head rcu;
+};
+
+struct net_device_stats {
+	union {
+		long unsigned int rx_packets;
+		atomic_long_t __rx_packets;
+	};
+	union {
+		long unsigned int tx_packets;
+		atomic_long_t __tx_packets;
+	};
+	union {
+		long unsigned int rx_bytes;
+		atomic_long_t __rx_bytes;
+	};
+	union {
+		long unsigned int tx_bytes;
+		atomic_long_t __tx_bytes;
+	};
+	union {
+		long unsigned int rx_errors;
+		atomic_long_t __rx_errors;
+	};
+	union {
+		long unsigned int tx_errors;
+		atomic_long_t __tx_errors;
+	};
+	union {
+		long unsigned int rx_dropped;
+		atomic_long_t __rx_dropped;
+	};
+	union {
+		long unsigned int tx_dropped;
+		atomic_long_t __tx_dropped;
+	};
+	union {
+		long unsigned int multicast;
+		atomic_long_t __multicast;
+	};
+	union {
+		long unsigned int collisions;
+		atomic_long_t __collisions;
+	};
+	union {
+		long unsigned int rx_length_errors;
+		atomic_long_t __rx_length_errors;
+	};
+	union {
+		long unsigned int rx_over_errors;
+		atomic_long_t __rx_over_errors;
+	};
+	union {
+		long unsigned int rx_crc_errors;
+		atomic_long_t __rx_crc_errors;
+	};
+	union {
+		long unsigned int rx_frame_errors;
+		atomic_long_t __rx_frame_errors;
+	};
+	union {
+		long unsigned int rx_fifo_errors;
+		atomic_long_t __rx_fifo_errors;
+	};
+	union {
+		long unsigned int rx_missed_errors;
+		atomic_long_t __rx_missed_errors;
+	};
+	union {
+		long unsigned int tx_aborted_errors;
+		atomic_long_t __tx_aborted_errors;
+	};
+	union {
+		long unsigned int tx_carrier_errors;
+		atomic_long_t __tx_carrier_errors;
+	};
+	union {
+		long unsigned int tx_fifo_errors;
+		atomic_long_t __tx_fifo_errors;
+	};
+	union {
+		long unsigned int tx_heartbeat_errors;
+		atomic_long_t __tx_heartbeat_errors;
+	};
+	union {
+		long unsigned int tx_window_errors;
+		atomic_long_t __tx_window_errors;
+	};
+	union {
+		long unsigned int rx_compressed;
+		atomic_long_t __rx_compressed;
+	};
+	union {
+		long unsigned int tx_compressed;
+		atomic_long_t __tx_compressed;
+	};
+};
+
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
+
+struct tipc_bearer;
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+struct pcpu_dstats;
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct sfp_bus;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct l3mdev_ops;
+
+struct ndisc_ops;
+
+struct xfrmdev_ops;
+
+struct tlsdev_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct dsa_port;
+
+struct wireless_dev;
+
+struct netdev_rx_queue;
+
+struct mini_Qdisc;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct netpoll_info;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct garp_port;
+
+struct mrp_port;
+
+struct rtnl_link_ops;
+
+struct dcbnl_rtnl_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct udp_tunnel_nic_info;
+
+struct udp_tunnel_nic;
+
+struct rtnl_hw_stats64;
+
+struct devlink_port;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias *ifalias;
+	long unsigned int mem_end;
+	long unsigned int mem_start;
+	long unsigned int base_addr;
+	long unsigned int state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	long long unsigned int priv_flags;
+	const struct net_device_ops *netdev_ops;
+	int ifindex;
+	short unsigned int gflags;
+	short unsigned int hard_header_len;
+	unsigned int mtu;
+	short unsigned int needed_headroom;
+	short unsigned int needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	short unsigned int type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct l3mdev_ops *l3mdev_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct xfrmdev_ops *xfrmdev_ops;
+	const struct tlsdev_ops *tlsdev_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	short unsigned int neigh_priv_len;
+	short unsigned int dev_id;
+	short unsigned int dev_port;
+	short unsigned int padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device *ip_ptr;
+	struct inet6_dev *ip6_ptr;
+	struct vlan_info *vlan_info;
+	struct dsa_port *dsa_ptr;
+	struct tipc_bearer *tipc_ptr;
+	struct wireless_dev *ieee80211_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog *xdp_prog;
+	long unsigned int gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	rx_handler_func_t *rx_handler;
+	void *rx_handler_data;
+	struct mini_Qdisc *miniq_ingress;
+	struct netdev_queue *ingress_queue;
+	struct nf_hook_entries *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue *xdp_bulkq;
+	struct xps_dev_maps *xps_maps[2];
+	struct mini_Qdisc *miniq_egress;
+	struct nf_hook_entries *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	struct netpoll_info *npinfo;
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	union {
+		struct pcpu_lstats *lstats;
+		struct pcpu_sw_netstats *tstats;
+		struct pcpu_dstats *dstats;
+	};
+	struct garp_port *garp_port;
+	struct mrp_port *mrp_port;
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	const struct dcbnl_rtnl_ops *dcbnl_ops;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	struct netprio_map *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	struct devlink_port *devlink_port;
+};
+
+struct hh_cache {
+	unsigned int hh_len;
+	seqlock_t hh_lock;
+	long unsigned int hh_data[12];
+};
+
+struct neigh_table;
+
+struct neigh_parms;
+
+struct neigh_ops;
+
+struct neighbour {
+	struct neighbour *next;
+	struct neigh_table *tbl;
+	struct neigh_parms *parms;
+	long unsigned int confirmed;
+	long unsigned int updated;
+	rwlock_t lock;
+	refcount_t refcnt;
+	unsigned int arp_queue_len_bytes;
+	struct sk_buff_head arp_queue;
+	struct timer_list timer;
+	long unsigned int used;
+	atomic_t probes;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	u8 protocol;
+	u32 flags;
+	seqlock_t ha_lock;
+	int: 32;
+	unsigned char ha[32];
+	struct hh_cache hh;
+	int (*output)(struct neighbour *, struct sk_buff *);
+	const struct neigh_ops *ops;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	struct callback_head rcu;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u8 primary_key[0];
+};
+
+struct ipv6_stable_secret {
+	bool initialized;
+	struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+	__s32 forwarding;
+	__s32 hop_limit;
+	__s32 mtu6;
+	__s32 accept_ra;
+	__s32 accept_redirects;
+	__s32 autoconf;
+	__s32 dad_transmits;
+	__s32 rtr_solicits;
+	__s32 rtr_solicit_interval;
+	__s32 rtr_solicit_max_interval;
+	__s32 rtr_solicit_delay;
+	__s32 force_mld_version;
+	__s32 mldv1_unsolicited_report_interval;
+	__s32 mldv2_unsolicited_report_interval;
+	__s32 use_tempaddr;
+	__s32 temp_valid_lft;
+	__s32 temp_prefered_lft;
+	__s32 regen_max_retry;
+	__s32 max_desync_factor;
+	__s32 max_addresses;
+	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
+	__s32 accept_ra_min_hop_limit;
+	__s32 accept_ra_pinfo;
+	__s32 ignore_routes_with_linkdown;
+	__s32 proxy_ndp;
+	__s32 accept_source_route;
+	__s32 accept_ra_from_local;
+	__s32 disable_ipv6;
+	__s32 drop_unicast_in_l2_multicast;
+	__s32 accept_dad;
+	__s32 force_tllao;
+	__s32 ndisc_notify;
+	__s32 suppress_frag_ndisc;
+	__s32 accept_ra_mtu;
+	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
+	struct ipv6_stable_secret stable_secret;
+	__s32 use_oif_addrs_only;
+	__s32 keep_addr_on_down;
+	__s32 seg6_enabled;
+	__u32 enhanced_dad;
+	__u32 addr_gen_mode;
+	__s32 disable_policy;
+	__s32 ndisc_tclass;
+	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
+	struct ctl_table_header *sysctl_header;
+};
+
+typedef enum {
+	SS_FREE = 0,
+	SS_UNCONNECTED = 1,
+	SS_CONNECTING = 2,
+	SS_CONNECTED = 3,
+	SS_DISCONNECTING = 4,
+} socket_state;
+
+struct socket_wq {
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync_list;
+	long unsigned int flags;
+	struct callback_head rcu;
+	long: 64;
+};
+
+struct proto_ops;
+
+struct socket {
+	socket_state state;
+	short int type;
+	long unsigned int flags;
+	struct file *file;
+	struct sock *sk;
+	const struct proto_ops *ops;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq wq;
+};
+
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
+typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
+
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
+struct proto_ops {
+	int family;
+	struct module *owner;
+	int (*release)(struct socket *);
+	int (*bind)(struct socket *, struct sockaddr *, int);
+	int (*connect)(struct socket *, struct sockaddr *, int, int);
+	int (*socketpair)(struct socket *, struct socket *);
+	int (*accept)(struct socket *, struct socket *, int, bool);
+	int (*getname)(struct socket *, struct sockaddr *, int);
+	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
+	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
+	int (*gettstamp)(struct socket *, void *, bool, bool);
+	int (*listen)(struct socket *, int);
+	int (*shutdown)(struct socket *, int);
+	int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct socket *, int, int, char *, int *);
+	void (*show_fdinfo)(struct seq_file *, struct socket *);
+	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
+	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
+	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
+	ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
+	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	int (*set_peek_off)(struct sock *, int);
+	int (*peek_len)(struct socket *);
+	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
+	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
+	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
+	int (*set_rcvlowat)(struct sock *, int);
+};
+
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
+};
+
+enum rpc_display_format_t {
+	RPC_DISPLAY_ADDR = 0,
+	RPC_DISPLAY_PORT = 1,
+	RPC_DISPLAY_PROTO = 2,
+	RPC_DISPLAY_HEX_ADDR = 3,
+	RPC_DISPLAY_HEX_PORT = 4,
+	RPC_DISPLAY_NETID = 5,
+	RPC_DISPLAY_MAX = 6,
+};
+
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	long unsigned int slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+struct ieee_ets {
+	__u8 willing;
+	__u8 ets_cap;
+	__u8 cbs;
+	__u8 tc_tx_bw[8];
+	__u8 tc_rx_bw[8];
+	__u8 tc_tsa[8];
+	__u8 prio_tc[8];
+	__u8 tc_reco_bw[8];
+	__u8 tc_reco_tsa[8];
+	__u8 reco_prio_tc[8];
+};
+
+struct ieee_maxrate {
+	__u64 tc_maxrate[8];
+};
+
+struct ieee_qcn {
+	__u8 rpg_enable[8];
+	__u32 rppp_max_rps[8];
+	__u32 rpg_time_reset[8];
+	__u32 rpg_byte_reset[8];
+	__u32 rpg_threshold[8];
+	__u32 rpg_max_rate[8];
+	__u32 rpg_ai_rate[8];
+	__u32 rpg_hai_rate[8];
+	__u32 rpg_gd[8];
+	__u32 rpg_min_dec_fac[8];
+	__u32 rpg_min_rate[8];
+	__u32 cndd_state_machine[8];
+};
+
+struct ieee_qcn_stats {
+	__u64 rppp_rp_centiseconds[8];
+	__u32 rppp_created_rps[8];
+};
+
+struct ieee_pfc {
+	__u8 pfc_cap;
+	__u8 pfc_en;
+	__u8 mbc;
+	__u16 delay;
+	__u64 requests[8];
+	__u64 indications[8];
+};
+
+struct dcbnl_buffer {
+	__u8 prio2buffer[8];
+	__u32 buffer_size[8];
+	__u32 total_size;
+};
+
+struct cee_pg {
+	__u8 willing;
+	__u8 error;
+	__u8 pg_en;
+	__u8 tcs_supported;
+	__u8 pg_bw[8];
+	__u8 prio_pg[8];
+};
+
+struct cee_pfc {
+	__u8 willing;
+	__u8 error;
+	__u8 pfc_en;
+	__u8 tcs_supported;
+};
+
+struct dcb_app {
+	__u8 selector;
+	__u8 priority;
+	__u16 protocol;
+};
+
+struct dcb_peer_app_info {
+	__u8 willing;
+	__u8 error;
+};
+
+struct dcbnl_rtnl_ops {
+	int (*ieee_getets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_setets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);
+	int (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);
+	int (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);
+	int (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);
+	int (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);
+	int (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);
+	int (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);
+	int (*ieee_getapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_setapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_delapp)(struct net_device *, struct dcb_app *);
+	int (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);
+	int (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);
+	u8 (*getstate)(struct net_device *);
+	u8 (*setstate)(struct net_device *, u8);
+	void (*getpermhwaddr)(struct net_device *, u8 *);
+	void (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);
+	void (*setpgbwgcfgtx)(struct net_device *, int, u8);
+	void (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);
+	void (*setpgbwgcfgrx)(struct net_device *, int, u8);
+	void (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
+	void (*getpgbwgcfgtx)(struct net_device *, int, u8 *);
+	void (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);
+	void (*getpgbwgcfgrx)(struct net_device *, int, u8 *);
+	void (*setpfccfg)(struct net_device *, int, u8);
+	void (*getpfccfg)(struct net_device *, int, u8 *);
+	u8 (*setall)(struct net_device *);
+	u8 (*getcap)(struct net_device *, int, u8 *);
+	int (*getnumtcs)(struct net_device *, int, u8 *);
+	int (*setnumtcs)(struct net_device *, int, u8);
+	u8 (*getpfcstate)(struct net_device *);
+	void (*setpfcstate)(struct net_device *, u8);
+	void (*getbcncfg)(struct net_device *, int, u32 *);
+	void (*setbcncfg)(struct net_device *, int, u32);
+	void (*getbcnrp)(struct net_device *, int, u8 *);
+	void (*setbcnrp)(struct net_device *, int, u8);
+	int (*setapp)(struct net_device *, u8, u16, u8);
+	int (*getapp)(struct net_device *, u8, u16);
+	u8 (*getfeatcfg)(struct net_device *, int, u8 *);
+	u8 (*setfeatcfg)(struct net_device *, int, u8);
+	u8 (*getdcbx)(struct net_device *);
+	u8 (*setdcbx)(struct net_device *, u8);
+	int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);
+	int (*peer_getapptable)(struct net_device *, struct dcb_app *);
+	int (*cee_peer_getpg)(struct net_device *, struct cee_pg *);
+	int (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);
+	int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
+	int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
+	int (*dcbnl_setapptrust)(struct net_device *, u8 *, int);
+	int (*dcbnl_getapptrust)(struct net_device *, u8 *, int *);
+};
+
+struct netprio_map {
+	struct callback_head rcu;
+	u32 priomap_len;
+	u32 priomap[0];
+};
+
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
+};
+
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
+};
+
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	const struct nlattr *miss_nest;
+	u16 miss_type;
+	u8 cookie[20];
+	u8 cookie_len;
+	char _msg_buf[80];
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		u16 strict_start_type;
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+	};
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long int args[6];
+	};
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
+};
+
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+};
+
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
+};
+
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
+};
+
+enum netdev_tx {
+	__NETDEV_TX_MIN = 2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+struct net_device_core_stats {
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int rx_nohandler;
+	long unsigned int rx_otherhost_dropped;
+};
+
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
+};
+
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
+struct xsk_buff_pool;
+
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc *qdisc;
+	struct Qdisc *qdisc_sleeping;
+	struct kobject kobj;
+	long unsigned int tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	long unsigned int trans_start;
+	long unsigned int state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
+};
+
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
+};
+
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
+};
+
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
+};
+
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map *rps_map;
+	struct rps_dev_flow_table *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
+};
+
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map *attr_map[0];
+};
+
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
+};
+
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
+enum tc_setup_type {
+	TC_QUERY_CAPS = 0,
+	TC_SETUP_QDISC_MQPRIO = 1,
+	TC_SETUP_CLSU32 = 2,
+	TC_SETUP_CLSFLOWER = 3,
+	TC_SETUP_CLSMATCHALL = 4,
+	TC_SETUP_CLSBPF = 5,
+	TC_SETUP_BLOCK = 6,
+	TC_SETUP_QDISC_CBS = 7,
+	TC_SETUP_QDISC_RED = 8,
+	TC_SETUP_QDISC_PRIO = 9,
+	TC_SETUP_QDISC_MQ = 10,
+	TC_SETUP_QDISC_ETF = 11,
+	TC_SETUP_ROOT_QDISC = 12,
+	TC_SETUP_QDISC_GRED = 13,
+	TC_SETUP_QDISC_TAPRIO = 14,
+	TC_SETUP_FT = 15,
+	TC_SETUP_QDISC_ETS = 16,
+	TC_SETUP_QDISC_TBF = 17,
+	TC_SETUP_QDISC_FIFO = 18,
+	TC_SETUP_QDISC_HTB = 19,
+	TC_SETUP_ACT = 20,
+};
+
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+struct bpf_offloaded_map;
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct xfrmdev_ops {
+	int (*xdo_dev_state_add)(struct xfrm_state *);
+	void (*xdo_dev_state_delete)(struct xfrm_state *);
+	void (*xdo_dev_state_free)(struct xfrm_state *);
+	bool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);
+	void (*xdo_dev_state_advance_esn)(struct xfrm_state *);
+	void (*xdo_dev_state_update_curlft)(struct xfrm_state *);
+	int (*xdo_dev_policy_add)(struct xfrm_policy *);
+	void (*xdo_dev_policy_delete)(struct xfrm_policy *);
+	void (*xdo_dev_policy_free)(struct xfrm_policy *);
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+struct ip_tunnel_parm;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	void (*ndo_poll_controller)(struct net_device *);
+	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
+	void (*ndo_netpoll_cleanup)(struct net_device *);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+};
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+	int reachable_time;
+	u32 qlen;
+	int data[14];
+	long unsigned int data_state[1];
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct iw_request_info;
+
+union iwreq_data;
+
+typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
+
+struct iw_priv_args;
+
+struct iw_statistics;
+
+struct iw_handler_def {
+	const iw_handler *standard;
+	__u16 num_standard;
+	__u16 num_private;
+	__u16 num_private_args;
+	const iw_handler *private;
+	const struct iw_priv_args *private_args;
+	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_link_ext_stats;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	void (*get_link_ext_stats)(struct net_device *, struct ethtool_link_ext_stats *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+};
+
+struct l3mdev_ops {
+	u32 (*l3mdev_fib_table)(const struct net_device *);
+	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
+	struct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);
+	struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+enum tls_offload_ctx_dir {
+	TLS_OFFLOAD_CTX_DIR_RX = 0,
+	TLS_OFFLOAD_CTX_DIR_TX = 1,
+};
+
+struct tls_crypto_info;
+
+struct tls_context;
+
+struct tlsdev_ops {
+	int (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);
+	void (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);
+	int (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);
+};
+
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 *mc_list;
+	struct ifmcaddr6 *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	long unsigned int mc_v1_seen;
+	long unsigned int mc_qi;
+	long unsigned int mc_qri;
+	long unsigned int mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	long unsigned int tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	long unsigned int last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	long unsigned int last_rand;
+	struct neigh_statistics *stats;
+	struct neigh_hash_table *nht;
+	struct pneigh_entry **phash_buckets;
+};
+
+struct neigh_statistics {
+	long unsigned int allocs;
+	long unsigned int destroys;
+	long unsigned int hash_grows;
+	long unsigned int res_failed;
+	long unsigned int lookups;
+	long unsigned int hits;
+	long unsigned int rcv_probes_mcast;
+	long unsigned int rcv_probes_ucast;
+	long unsigned int periodic_gc_runs;
+	long unsigned int forced_gc_runs;
+	long unsigned int unres_discards;
+	long unsigned int table_fulls;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u8 key[0];
+};
+
+struct neigh_hash_table {
+	struct neighbour **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct fib_rule_hdr {
+	__u8 family;
+	__u8 dst_len;
+	__u8 src_len;
+	__u8 tos;
+	__u8 table;
+	__u8 res1;
+	__u8 res2;
+	__u8 action;
+	__u32 flags;
+};
+
+struct fib_rule_port_range {
+	__u16 start;
+	__u16 end;
+};
+
+struct fib_kuid_range {
+	kuid_t start;
+	kuid_t end;
+};
+
+struct fib_rule {
+	struct list_head list;
+	int iifindex;
+	int oifindex;
+	u32 mark;
+	u32 mark_mask;
+	u32 flags;
+	u32 table;
+	u8 action;
+	u8 l3mdev;
+	u8 proto;
+	u8 ip_proto;
+	u32 target;
+	__be64 tun_id;
+	struct fib_rule *ctarget;
+	struct net *fr_net;
+	refcount_t refcnt;
+	u32 pref;
+	int suppress_ifgroup;
+	int suppress_prefixlen;
+	char iifname[16];
+	char oifname[16];
+	struct fib_kuid_range uid_range;
+	struct fib_rule_port_range sport_range;
+	struct fib_rule_port_range dport_range;
+	struct callback_head rcu;
+};
+
+struct fib_lookup_arg {
+	void *lookup_ptr;
+	const void *lookup_data;
+	void *result;
+	struct fib_rule *rule;
+	u32 table;
+	int flags;
+};
+
+struct smc_hashinfo;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long int);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, long unsigned int);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*keepalive)(struct sock *, int);
+	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, short unsigned int);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	int (*forward_alloc_get)(const struct sock *);
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	long unsigned int *memory_pressure;
+	long int *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list *sf_next;
+	struct in6_addr sf_addr;
+	long unsigned int sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *next;
+	struct ip6_sf_list *mca_sources;
+	struct ip6_sf_list *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	long unsigned int mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	long unsigned int mca_cstamp;
+	long unsigned int mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	long unsigned int aca_cstamp;
+	long unsigned int aca_tstamp;
+	struct callback_head rcu;
+};
+
+enum nfs_opnum4 {
+	OP_ACCESS = 3,
+	OP_CLOSE = 4,
+	OP_COMMIT = 5,
+	OP_CREATE = 6,
+	OP_DELEGPURGE = 7,
+	OP_DELEGRETURN = 8,
+	OP_GETATTR = 9,
+	OP_GETFH = 10,
+	OP_LINK = 11,
+	OP_LOCK = 12,
+	OP_LOCKT = 13,
+	OP_LOCKU = 14,
+	OP_LOOKUP = 15,
+	OP_LOOKUPP = 16,
+	OP_NVERIFY = 17,
+	OP_OPEN = 18,
+	OP_OPENATTR = 19,
+	OP_OPEN_CONFIRM = 20,
+	OP_OPEN_DOWNGRADE = 21,
+	OP_PUTFH = 22,
+	OP_PUTPUBFH = 23,
+	OP_PUTROOTFH = 24,
+	OP_READ = 25,
+	OP_READDIR = 26,
+	OP_READLINK = 27,
+	OP_REMOVE = 28,
+	OP_RENAME = 29,
+	OP_RENEW = 30,
+	OP_RESTOREFH = 31,
+	OP_SAVEFH = 32,
+	OP_SECINFO = 33,
+	OP_SETATTR = 34,
+	OP_SETCLIENTID = 35,
+	OP_SETCLIENTID_CONFIRM = 36,
+	OP_VERIFY = 37,
+	OP_WRITE = 38,
+	OP_RELEASE_LOCKOWNER = 39,
+	OP_BACKCHANNEL_CTL = 40,
+	OP_BIND_CONN_TO_SESSION = 41,
+	OP_EXCHANGE_ID = 42,
+	OP_CREATE_SESSION = 43,
+	OP_DESTROY_SESSION = 44,
+	OP_FREE_STATEID = 45,
+	OP_GET_DIR_DELEGATION = 46,
+	OP_GETDEVICEINFO = 47,
+	OP_GETDEVICELIST = 48,
+	OP_LAYOUTCOMMIT = 49,
+	OP_LAYOUTGET = 50,
+	OP_LAYOUTRETURN = 51,
+	OP_SECINFO_NO_NAME = 52,
+	OP_SEQUENCE = 53,
+	OP_SET_SSV = 54,
+	OP_TEST_STATEID = 55,
+	OP_WANT_DELEGATION = 56,
+	OP_DESTROY_CLIENTID = 57,
+	OP_RECLAIM_COMPLETE = 58,
+	OP_ALLOCATE = 59,
+	OP_COPY = 60,
+	OP_COPY_NOTIFY = 61,
+	OP_DEALLOCATE = 62,
+	OP_IO_ADVISE = 63,
+	OP_LAYOUTERROR = 64,
+	OP_LAYOUTSTATS = 65,
+	OP_OFFLOAD_CANCEL = 66,
+	OP_OFFLOAD_STATUS = 67,
+	OP_READ_PLUS = 68,
+	OP_SEEK = 69,
+	OP_WRITE_SAME = 70,
+	OP_CLONE = 71,
+	OP_GETXATTR = 72,
+	OP_SETXATTR = 73,
+	OP_LISTXATTRS = 74,
+	OP_REMOVEXATTR = 75,
+	OP_ILLEGAL = 10044,
+};
+
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
+};
+
+enum perf_branch_sample_type_shift {
+	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
+	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
+	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
+	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
+	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
+	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
+	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
+	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
+	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
+	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
+	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
+	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
+	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
+	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
+	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
+	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
+	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 18,
+	PERF_SAMPLE_BRANCH_MAX_SHIFT = 19,
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+struct subprocess_info {
+	struct work_struct work;
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
+	void *data;
+};
+
+typedef long unsigned int cycles_t;
+
+typedef phys_addr_t resource_size_t;
+
+typedef void *va_list;
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	long unsigned int flags;
+	long unsigned int desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+};
+
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+typedef u64 async_cookie_t;
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+struct dir_entry {
+	struct list_head list;
+	time64_t mtime;
+	char name[0];
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_PCPTYPES = 3,
+	MIGRATE_HIGHATOMIC = 3,
+	MIGRATE_CMA = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	MAX_ZONELISTS = 1,
+};
+
+enum riscv_isa_ext_id {
+	RISCV_ISA_EXT_SSCOFPMF = 26,
+	RISCV_ISA_EXT_SVPBMT = 27,
+	RISCV_ISA_EXT_ZICBOM = 28,
+	RISCV_ISA_EXT_ZIHINTPAUSE = 29,
+	RISCV_ISA_EXT_SSTC = 30,
+	RISCV_ISA_EXT_SVINVAL = 31,
+	RISCV_ISA_EXT_ID_MAX = 32,
+};
+
+enum riscv_isa_ext_key {
+	RISCV_ISA_EXT_KEY_FPU = 0,
+	RISCV_ISA_EXT_KEY_SVINVAL = 1,
+	RISCV_ISA_EXT_KEY_MAX = 2,
+};
+
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
+enum compound_dtor_id {
+	NULL_COMPOUND_DTOR = 0,
+	COMPOUND_PAGE_DTOR = 1,
+	HUGETLB_PAGE_DTOR = 2,
+	TRANSHUGE_PAGE_DTOR = 3,
+	NR_COMPOUND_DTORS = 4,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA32 = 4,
+	PGALLOC_NORMAL = 5,
+	PGALLOC_MOVABLE = 6,
+	ALLOCSTALL_DMA32 = 7,
+	ALLOCSTALL_NORMAL = 8,
+	ALLOCSTALL_MOVABLE = 9,
+	PGSCAN_SKIP_DMA32 = 10,
+	PGSCAN_SKIP_NORMAL = 11,
+	PGSCAN_SKIP_MOVABLE = 12,
+	PGFREE = 13,
+	PGACTIVATE = 14,
+	PGDEACTIVATE = 15,
+	PGLAZYFREE = 16,
+	PGFAULT = 17,
+	PGMAJFAULT = 18,
+	PGLAZYFREED = 19,
+	PGREFILL = 20,
+	PGREUSE = 21,
+	PGSTEAL_KSWAPD = 22,
+	PGSTEAL_DIRECT = 23,
+	PGSTEAL_KHUGEPAGED = 24,
+	PGDEMOTE_KSWAPD = 25,
+	PGDEMOTE_DIRECT = 26,
+	PGDEMOTE_KHUGEPAGED = 27,
+	PGSCAN_KSWAPD = 28,
+	PGSCAN_DIRECT = 29,
+	PGSCAN_KHUGEPAGED = 30,
+	PGSCAN_DIRECT_THROTTLE = 31,
+	PGSCAN_ANON = 32,
+	PGSCAN_FILE = 33,
+	PGSTEAL_ANON = 34,
+	PGSTEAL_FILE = 35,
+	PGINODESTEAL = 36,
+	SLABS_SCANNED = 37,
+	KSWAPD_INODESTEAL = 38,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 39,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 40,
+	PAGEOUTRUN = 41,
+	PGROTATED = 42,
+	DROP_PAGECACHE = 43,
+	DROP_SLAB = 44,
+	OOM_KILL = 45,
+	PGMIGRATE_SUCCESS = 46,
+	PGMIGRATE_FAIL = 47,
+	THP_MIGRATION_SUCCESS = 48,
+	THP_MIGRATION_FAIL = 49,
+	THP_MIGRATION_SPLIT = 50,
+	COMPACTMIGRATE_SCANNED = 51,
+	COMPACTFREE_SCANNED = 52,
+	COMPACTISOLATED = 53,
+	COMPACTSTALL = 54,
+	COMPACTFAIL = 55,
+	COMPACTSUCCESS = 56,
+	KCOMPACTD_WAKE = 57,
+	KCOMPACTD_MIGRATE_SCANNED = 58,
+	KCOMPACTD_FREE_SCANNED = 59,
+	HTLB_BUDDY_PGALLOC = 60,
+	HTLB_BUDDY_PGALLOC_FAIL = 61,
+	CMA_ALLOC_SUCCESS = 62,
+	CMA_ALLOC_FAIL = 63,
+	UNEVICTABLE_PGCULLED = 64,
+	UNEVICTABLE_PGSCANNED = 65,
+	UNEVICTABLE_PGRESCUED = 66,
+	UNEVICTABLE_PGMLOCKED = 67,
+	UNEVICTABLE_PGMUNLOCKED = 68,
+	UNEVICTABLE_PGCLEARED = 69,
+	UNEVICTABLE_PGSTRANDED = 70,
+	THP_FAULT_ALLOC = 71,
+	THP_FAULT_FALLBACK = 72,
+	THP_FAULT_FALLBACK_CHARGE = 73,
+	THP_COLLAPSE_ALLOC = 74,
+	THP_COLLAPSE_ALLOC_FAILED = 75,
+	THP_FILE_ALLOC = 76,
+	THP_FILE_FALLBACK = 77,
+	THP_FILE_FALLBACK_CHARGE = 78,
+	THP_FILE_MAPPED = 79,
+	THP_SPLIT_PAGE = 80,
+	THP_SPLIT_PAGE_FAILED = 81,
+	THP_DEFERRED_SPLIT_PAGE = 82,
+	THP_SPLIT_PMD = 83,
+	THP_SCAN_EXCEED_NONE_PTE = 84,
+	THP_SCAN_EXCEED_SWAP_PTE = 85,
+	THP_SCAN_EXCEED_SHARED_PTE = 86,
+	THP_ZERO_PAGE_ALLOC = 87,
+	THP_ZERO_PAGE_ALLOC_FAILED = 88,
+	THP_SWPOUT = 89,
+	THP_SWPOUT_FALLBACK = 90,
+	BALLOON_INFLATE = 91,
+	BALLOON_DEFLATE = 92,
+	BALLOON_MIGRATE = 93,
+	SWAP_RA = 94,
+	SWAP_RA_HIT = 95,
+	ZSWPIN = 96,
+	ZSWPOUT = 97,
+	NR_VM_EVENT_ITEMS = 98,
+};
+
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
+
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_FANOTIFY_GROUPS = 10,
+	UCOUNT_FANOTIFY_MARKS = 11,
+	UCOUNT_COUNTS = 12,
+};
+
+enum rlimit_type {
+	UCOUNT_RLIMIT_NPROC = 0,
+	UCOUNT_RLIMIT_MSGQUEUE = 1,
+	UCOUNT_RLIMIT_SIGPENDING = 2,
+	UCOUNT_RLIMIT_MEMLOCK = 3,
+	UCOUNT_RLIMIT_COUNTS = 4,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+struct riscv_isa_ext_data {
+	char uprop[32];
+	unsigned int isa_ext_id;
+};
+
+struct riscv_cpuinfo {
+	long unsigned int mvendorid;
+	long unsigned int marchid;
+	long unsigned int mimpid;
+};
+
+struct alt_entry {
+	void *old_ptr;
+	void *alt_ptr;
+	long unsigned int vendor_id;
+	long unsigned int alt_len;
+	unsigned int errata_id;
+} __attribute__((packed));
+
+struct cpu_manufacturer_info_t {
+	long unsigned int vendor_id;
+	long unsigned int arch_id;
+	long unsigned int imp_id;
+	void (*patch_func)(struct alt_entry *, struct alt_entry *, long unsigned int, long unsigned int, unsigned int);
+};
+
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+struct kernel_clone_args {
+	u64 flags;
+	int *pidfd;
+	int *child_tid;
+	int *parent_tid;
+	int exit_signal;
+	long unsigned int stack;
+	long unsigned int stack_size;
+	long unsigned int tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int io_thread;
+	int kthread;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct task_struct;
+
+typedef struct {
+	long unsigned int fds_bits[16];
+} __kernel_fd_set;
+
+typedef int __kernel_key_t;
+
+typedef int __kernel_mqd_t;
+
+typedef unsigned int __kernel_mode_t;
+
+typedef int __kernel_ipc_pid_t;
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+typedef __kernel_fd_set fd_set;
+
+typedef __kernel_off_t off_t;
+
+typedef __kernel_key_t key_t;
+
+typedef __kernel_timer_t timer_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct __kernel_old_itimerval {
+	struct __kernel_old_timeval it_interval;
+	struct __kernel_old_timeval it_value;
+};
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+struct stat {
+	long unsigned int st_dev;
+	long unsigned int st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	long unsigned int st_rdev;
+	long unsigned int __pad1;
+	long int st_size;
+	int st_blksize;
+	int __pad2;
+	long int st_blocks;
+	long int st_atime;
+	long unsigned int st_atime_nsec;
+	long int st_mtime;
+	long unsigned int st_mtime_nsec;
+	long int st_ctime;
+	long unsigned int st_ctime_nsec;
+	unsigned int __unused4;
+	unsigned int __unused5;
+};
+
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u32 stx_dio_mem_align;
+	__u32 stx_dio_offset_align;
+	__u64 __spare3[12];
+};
+
+struct __kernel_timex_timeval {
+	__kernel_time64_t tv_sec;
+	long long int tv_usec;
+};
+
+struct __kernel_timex {
+	unsigned int modes;
+	long long int offset;
+	long long int freq;
+	long long int maxerror;
+	long long int esterror;
+	int status;
+	long long int constant;
+	long long int precision;
+	long long int tolerance;
+	struct __kernel_timex_timeval time;
+	long long int tick;
+	long long int ppsfreq;
+	long long int jitter;
+	int shift;
+	long long int stabil;
+	long long int jitcnt;
+	long long int calcnt;
+	long long int errcnt;
+	long long int stbcnt;
+	int tai;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
+};
+
+struct ipc_perm {
+	__kernel_key_t key;
+	__kernel_uid_t uid;
+	__kernel_gid_t gid;
+	__kernel_uid_t cuid;
+	__kernel_gid_t cgid;
+	__kernel_mode_t mode;
+	short unsigned int seq;
+};
+
+struct msgbuf;
+
+struct sembuf {
+	short unsigned int sem_num;
+	short int sem_op;
+	short int sem_flg;
+};
+
+struct shmid_ds {
+	struct ipc_perm shm_perm;
+	int shm_segsz;
+	__kernel_old_time_t shm_atime;
+	__kernel_old_time_t shm_dtime;
+	__kernel_old_time_t shm_ctime;
+	__kernel_ipc_pid_t shm_cpid;
+	__kernel_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	void *shm_unused2;
+	void *shm_unused3;
+};
+
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
+};
+
+struct rlimit64 {
+	__u64 rlim_cur;
+	__u64 rlim_max;
+};
+
+struct sigaltstack {
+	void *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
+};
+
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
+	};
+};
+
+typedef struct siginfo siginfo_t;
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct __user_cap_header_struct {
+	__u32 version;
+	int pid;
+};
+
+typedef struct __user_cap_header_struct *cap_user_header_t;
+
+struct __user_cap_data_struct {
+	__u32 effective;
+	__u32 permitted;
+	__u32 inheritable;
+};
+
+typedef struct __user_cap_data_struct *cap_user_data_t;
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+typedef int __kernel_rwf_t;
+
+typedef __kernel_rwf_t rwf_t;
+
+typedef __kernel_uid32_t qid_t;
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+struct user_msghdr {
+	void *msg_name;
+	int msg_namelen;
+	struct iovec *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+struct mmsghdr {
+	struct user_msghdr msg_hdr;
+	unsigned int msg_len;
+};
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+};
+
+struct futex_waitv;
+
+enum landlock_rule_type;
+
+struct landlock_ruleset_attr;
+
+struct mount_attr;
+
+struct io_uring_params;
+
+struct __aio_sigset;
+
+union bpf_attr;
+
+struct sched_attr;
+
+struct msqid_ds;
+
+struct mq_attr;
+
+struct getcpu_cache;
+
+struct new_utsname;
+
+struct tms;
+
+struct sched_param;
+
+struct kexec_segment;
+
+struct linux_dirent64;
+
+struct statfs;
+
+struct user_regs_struct {
+	long unsigned int pc;
+	long unsigned int ra;
+	long unsigned int sp;
+	long unsigned int gp;
+	long unsigned int tp;
+	long unsigned int t0;
+	long unsigned int t1;
+	long unsigned int t2;
+	long unsigned int s0;
+	long unsigned int s1;
+	long unsigned int a0;
+	long unsigned int a1;
+	long unsigned int a2;
+	long unsigned int a3;
+	long unsigned int a4;
+	long unsigned int a5;
+	long unsigned int a6;
+	long unsigned int a7;
+	long unsigned int s2;
+	long unsigned int s3;
+	long unsigned int s4;
+	long unsigned int s5;
+	long unsigned int s6;
+	long unsigned int s7;
+	long unsigned int s8;
+	long unsigned int s9;
+	long unsigned int s10;
+	long unsigned int s11;
+	long unsigned int t3;
+	long unsigned int t4;
+	long unsigned int t5;
+	long unsigned int t6;
+};
+
+struct __riscv_f_ext_state {
+	__u32 f[32];
+	__u32 fcsr;
+};
+
+struct __riscv_q_ext_state {
+	__u64 f[64];
+	__u32 fcsr;
+	__u32 reserved[3];
+};
+
+union __riscv_fp_state {
+	struct __riscv_f_ext_state f;
+	struct __riscv_d_ext_state d;
+	struct __riscv_q_ext_state q;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct sigcontext {
+	struct user_regs_struct sc_regs;
+	union __riscv_fp_state sc_fpregs;
+};
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+enum {
+	EI_ETYPE_NONE = 0,
+	EI_ETYPE_NULL = 1,
+	EI_ETYPE_ERRNO = 2,
+	EI_ETYPE_ERRNO_NULL = 3,
+	EI_ETYPE_TRUE = 4,
+};
+
+struct syscall_metadata {
+	const char *name;
+	int syscall_nr;
+	int nb_args;
+	const char **types;
+	const char **args;
+	struct list_head enter_fields;
+	struct trace_event_call *enter_event;
+	struct trace_event_call *exit_event;
+};
+
+struct ucontext {
+	long unsigned int uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	sigset_t uc_sigmask;
+	__u8 __unused[120];
+	long: 64;
+	struct sigcontext uc_mcontext;
+};
+
+struct rt_sigframe {
+	struct siginfo info;
+	struct ucontext uc;
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+typedef u32 compat_ulong_t;
+
+struct compat_user_regs_struct {
+	compat_ulong_t pc;
+	compat_ulong_t ra;
+	compat_ulong_t sp;
+	compat_ulong_t gp;
+	compat_ulong_t tp;
+	compat_ulong_t t0;
+	compat_ulong_t t1;
+	compat_ulong_t t2;
+	compat_ulong_t s0;
+	compat_ulong_t s1;
+	compat_ulong_t a0;
+	compat_ulong_t a1;
+	compat_ulong_t a2;
+	compat_ulong_t a3;
+	compat_ulong_t a4;
+	compat_ulong_t a5;
+	compat_ulong_t a6;
+	compat_ulong_t a7;
+	compat_ulong_t s2;
+	compat_ulong_t s3;
+	compat_ulong_t s4;
+	compat_ulong_t s5;
+	compat_ulong_t s6;
+	compat_ulong_t s7;
+	compat_ulong_t s8;
+	compat_ulong_t s9;
+	compat_ulong_t s10;
+	compat_ulong_t s11;
+	compat_ulong_t t3;
+	compat_ulong_t t4;
+	compat_ulong_t t5;
+	compat_ulong_t t6;
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+struct user_regset;
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long int id;
+	long unsigned int args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long int id;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
+
+enum riscv_regset {
+	REGSET_X = 0,
+	REGSET_F = 1,
+};
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_ARCHTIMER = 1,
+	VDSO_CLOCKMODE_MAX = 2,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	long unsigned int flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct module *owner;
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+};
+
+struct memblock_type {
+	long unsigned int cnt;
+	long unsigned int max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+enum {
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
+};
+
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
+};
+
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = 4294967295,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 22,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 23,
+};
+
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	devices_cgrp_id = 5,
+	freezer_cgrp_id = 6,
+	net_cls_cgrp_id = 7,
+	perf_event_cgrp_id = 8,
+	net_prio_cgrp_id = 9,
+	pids_cgrp_id = 10,
+	rdma_cgrp_id = 11,
+	debug_cgrp_id = 12,
+	CGROUP_SUBSYS_COUNT = 13,
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+};
+
+struct riscv_cacheinfo_ops {
+	const struct attribute_group * (*get_priv_group)(struct cacheinfo *);
+};
+
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
+
+struct stackframe {
+	long unsigned int fp;
+	long unsigned int ra;
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+enum fixed_addresses {
+	FIX_HOLE = 0,
+	FIX_PTE = 1,
+	FIX_PMD = 2,
+	FIX_PUD = 3,
+	FIX_P4D = 4,
+	FIX_TEXT_POKE1 = 5,
+	FIX_TEXT_POKE0 = 6,
+	FIX_EARLYCON_MEM_BASE = 7,
+	__end_of_permanent_fixed_addresses = 8,
+	FIX_BTMAP_END = 8,
+	FIX_BTMAP_BEGIN = 455,
+	__end_of_fixed_addresses = 456,
+};
+
+struct patch_insn {
+	void *addr;
+	u32 insn;
+	atomic_t cpu_count;
+};
+
+typedef u32 bug_insn_t;
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+enum die_val {
+	DIE_UNUSED = 0,
+	DIE_TRAP = 1,
+	DIE_OOPS = 2,
+};
+
+typedef u32 probe_opcode_t;
+
+typedef bool probes_handler_t(u32, long unsigned int, struct pt_regs *);
+
+struct arch_probe_insn {
+	probe_opcode_t *insn;
+	probes_handler_t *handler;
+	long unsigned int restore;
+};
+
+typedef u32 kprobe_opcode_t;
+
+struct arch_specific_insn {
+	struct arch_probe_insn api;
+};
+
+struct kprobe;
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	unsigned int status;
+};
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	long unsigned int nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+struct kprobe_ctlblk {
+	unsigned int kprobe_status;
+	long unsigned int saved_status;
+	struct prev_kprobe prev_kprobe;
+};
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+enum probe_insn {
+	INSN_REJECTED = 0,
+	INSN_GOOD_NO_SLOT = 1,
+	INSN_GOOD = 2,
+};
+
+typedef u32 uprobe_opcode_t;
+
+struct arch_uprobe {
+	union {
+		u8 insn[8];
+		u8 ixol[8];
+	};
+	struct arch_probe_insn api;
+	long unsigned int insn_size;
+	bool simulate;
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_referenced = 1,
+	PG_uptodate = 2,
+	PG_dirty = 3,
+	PG_lru = 4,
+	PG_active = 5,
+	PG_workingset = 6,
+	PG_waiters = 7,
+	PG_error = 8,
+	PG_slab = 9,
+	PG_owner_priv_1 = 10,
+	PG_arch_1 = 11,
+	PG_reserved = 12,
+	PG_private = 13,
+	PG_private_2 = 14,
+	PG_writeback = 15,
+	PG_head = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_young = 22,
+	PG_idle = 23,
+	__NR_PAGEFLAGS = 24,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 10,
+	PG_swapcache = 10,
+	PG_fscache = 14,
+	PG_pinned = 10,
+	PG_savepinned = 3,
+	PG_foreign = 10,
+	PG_xen_remapped = 10,
+	PG_slob_free = 13,
+	PG_isolated = 18,
+	PG_reported = 2,
+};
+
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
+};
+
+struct maple_alloc {
+	long unsigned int total;
+	unsigned char node_count;
+	unsigned int request_count;
+	struct maple_alloc *slot[30];
+};
+
+struct maple_enode;
+
+struct ma_state {
+	struct maple_tree *tree;
+	long unsigned int index;
+	long unsigned int last;
+	struct maple_enode *node;
+	long unsigned int min;
+	long unsigned int max;
+	struct maple_alloc *alloc;
+	unsigned char depth;
+	unsigned char offset;
+	unsigned char mas_flags;
+};
+
+struct vma_iterator {
+	struct ma_state mas;
+};
+
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
+	VM_FAULT_HINDEX_MASK = 983040,
+};
+
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
+};
+
+struct time_namespace {
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
+};
+
+struct arch_vdso_data {};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
+};
+
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	union {
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
+	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
+};
+
+enum vvar_pages {
+	VVAR_DATA_PAGE_OFFSET = 0,
+	VVAR_TIMENS_PAGE_OFFSET = 1,
+	VVAR_NR_PAGES = 2,
+};
+
+enum rv_vdso_map {
+	RV_VDSO_MAP_VVAR = 0,
+	RV_VDSO_MAP_VDSO = 1,
+};
+
+struct __vdso_info {
+	const char *name;
+	const char *vdso_code_start;
+	const char *vdso_code_end;
+	long unsigned int vdso_pages;
+	struct vm_special_mapping *dm;
+	struct vm_special_mapping *cm;
+};
+
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
+};
+
+struct freelist_head {
+	struct freelist_node *head;
+};
+
+struct rethook_node;
+
+typedef void (*rethook_handler_t)(struct rethook_node *, void *, struct pt_regs *);
+
+struct rethook;
+
+struct rethook_node {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct rethook *rethook;
+	long unsigned int ret_addr;
+	long unsigned int frame;
+};
+
+struct rethook {
+	void *data;
+	rethook_handler_t handler;
+	struct freelist_head pool;
+	refcount_t ref;
+	struct callback_head rcu;
+};
+
+enum {
+	TRACE_FTRACE_BIT = 0,
+	TRACE_FTRACE_NMI_BIT = 1,
+	TRACE_FTRACE_IRQ_BIT = 2,
+	TRACE_FTRACE_SIRQ_BIT = 3,
+	TRACE_FTRACE_TRANSITION_BIT = 4,
+	TRACE_INTERNAL_BIT = 5,
+	TRACE_INTERNAL_NMI_BIT = 6,
+	TRACE_INTERNAL_IRQ_BIT = 7,
+	TRACE_INTERNAL_SIRQ_BIT = 8,
+	TRACE_INTERNAL_TRANSITION_BIT = 9,
+	TRACE_BRANCH_BIT = 10,
+	TRACE_IRQ_BIT = 11,
+	TRACE_GRAPH_BIT = 12,
+	TRACE_GRAPH_DEPTH_START_BIT = 13,
+	TRACE_GRAPH_DEPTH_END_BIT = 14,
+	TRACE_GRAPH_NOTRACE_BIT = 15,
+	TRACE_RECORD_RECURSION_BIT = 16,
+};
+
+enum {
+	TRACE_CTX_NMI = 0,
+	TRACE_CTX_IRQ = 1,
+	TRACE_CTX_SOFTIRQ = 2,
+	TRACE_CTX_NORMAL = 3,
+	TRACE_CTX_TRANSITION = 4,
+};
+
+struct cpu_operations {
+	const char *name;
+	int (*cpu_prepare)(unsigned int);
+	int (*cpu_start)(unsigned int, struct task_struct *);
+	int (*cpu_disable)(unsigned int);
+	void (*cpu_stop)();
+	int (*cpu_is_stopped)(unsigned int);
+};
+
+struct riscv_ipi_ops {
+	void (*ipi_inject)(const struct cpumask *);
+	void (*ipi_clear)();
+};
+
+enum ipi_message_type {
+	IPI_RESCHEDULE = 0,
+	IPI_CALL_FUNC = 1,
+	IPI_CPU_STOP = 2,
+	IPI_CPU_CRASH_STOP = 3,
+	IPI_IRQ_WORK = 4,
+	IPI_TIMER = 5,
+	IPI_MAX = 6,
+};
+
+enum sbi_ext_id {
+	SBI_EXT_0_1_SET_TIMER = 0,
+	SBI_EXT_0_1_CONSOLE_PUTCHAR = 1,
+	SBI_EXT_0_1_CONSOLE_GETCHAR = 2,
+	SBI_EXT_0_1_CLEAR_IPI = 3,
+	SBI_EXT_0_1_SEND_IPI = 4,
+	SBI_EXT_0_1_REMOTE_FENCE_I = 5,
+	SBI_EXT_0_1_REMOTE_SFENCE_VMA = 6,
+	SBI_EXT_0_1_REMOTE_SFENCE_VMA_ASID = 7,
+	SBI_EXT_0_1_SHUTDOWN = 8,
+	SBI_EXT_BASE = 16,
+	SBI_EXT_TIME = 1414090053,
+	SBI_EXT_IPI = 7557193,
+	SBI_EXT_RFENCE = 1380339267,
+	SBI_EXT_HSM = 4739917,
+	SBI_EXT_SRST = 1397904212,
+	SBI_EXT_PMU = 5262677,
+	SBI_EXT_EXPERIMENTAL_START = 134217728,
+	SBI_EXT_EXPERIMENTAL_END = 150994943,
+	SBI_EXT_VENDOR_START = 150994944,
+	SBI_EXT_VENDOR_END = 167772159,
+};
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct got_entry {
+	long unsigned int symbol_addr;
+};
+
+struct plt_entry {
+	u32 insn_auipc;
+	u32 insn_ld;
+	u32 insn_jr;
+};
+
+typedef u64 uint64_t;
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = 4294967295,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+enum sbi_ext_base_fid {
+	SBI_EXT_BASE_GET_SPEC_VERSION = 0,
+	SBI_EXT_BASE_GET_IMP_ID = 1,
+	SBI_EXT_BASE_GET_IMP_VERSION = 2,
+	SBI_EXT_BASE_PROBE_EXT = 3,
+	SBI_EXT_BASE_GET_MVENDORID = 4,
+	SBI_EXT_BASE_GET_MARCHID = 5,
+	SBI_EXT_BASE_GET_MIMPID = 6,
+};
+
+enum sbi_ext_time_fid {
+	SBI_EXT_TIME_SET_TIMER = 0,
+};
+
+enum sbi_ext_ipi_fid {
+	SBI_EXT_IPI_SEND_IPI = 0,
+};
+
+enum sbi_ext_rfence_fid {
+	SBI_EXT_RFENCE_REMOTE_FENCE_I = 0,
+	SBI_EXT_RFENCE_REMOTE_SFENCE_VMA = 1,
+	SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID = 2,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID = 3,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA = 4,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID = 5,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA = 6,
+};
+
+enum sbi_ext_srst_fid {
+	SBI_EXT_SRST_RESET = 0,
+};
+
+enum sbi_srst_reset_type {
+	SBI_SRST_RESET_TYPE_SHUTDOWN = 0,
+	SBI_SRST_RESET_TYPE_COLD_REBOOT = 1,
+	SBI_SRST_RESET_TYPE_WARM_REBOOT = 2,
+};
+
+enum sbi_srst_reset_reason {
+	SBI_SRST_RESET_REASON_NONE = 0,
+	SBI_SRST_RESET_REASON_SYS_FAILURE = 1,
+};
+
+struct sbiret {
+	long int error;
+	long int value;
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short int contexts;
+	bool contexts_maxed;
+};
+
+struct dyn_arch_ftrace {};
+
+struct dyn_ftrace {
+	long unsigned int ip;
+	long unsigned int flags;
+	struct dyn_arch_ftrace arch;
+};
+
+struct sbi_hart_boot_data {
+	void *task_ptr;
+	void *stack_ptr;
+};
+
+enum sbi_ext_hsm_fid {
+	SBI_EXT_HSM_HART_START = 0,
+	SBI_EXT_HSM_HART_STOP = 1,
+	SBI_EXT_HSM_HART_STATUS = 2,
+	SBI_EXT_HSM_HART_SUSPEND = 3,
+};
+
+enum sbi_hsm_hart_state {
+	SBI_HSM_STATE_STARTED = 0,
+	SBI_HSM_STATE_STOPPED = 1,
+	SBI_HSM_STATE_START_PENDING = 2,
+	SBI_HSM_STATE_STOP_PENDING = 3,
+	SBI_HSM_STATE_SUSPENDED = 4,
+	SBI_HSM_STATE_SUSPEND_PENDING = 5,
+	SBI_HSM_STATE_RESUME_PENDING = 6,
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+enum perf_event_riscv_regs {
+	PERF_REG_RISCV_PC = 0,
+	PERF_REG_RISCV_RA = 1,
+	PERF_REG_RISCV_SP = 2,
+	PERF_REG_RISCV_GP = 3,
+	PERF_REG_RISCV_TP = 4,
+	PERF_REG_RISCV_T0 = 5,
+	PERF_REG_RISCV_T1 = 6,
+	PERF_REG_RISCV_T2 = 7,
+	PERF_REG_RISCV_S0 = 8,
+	PERF_REG_RISCV_S1 = 9,
+	PERF_REG_RISCV_A0 = 10,
+	PERF_REG_RISCV_A1 = 11,
+	PERF_REG_RISCV_A2 = 12,
+	PERF_REG_RISCV_A3 = 13,
+	PERF_REG_RISCV_A4 = 14,
+	PERF_REG_RISCV_A5 = 15,
+	PERF_REG_RISCV_A6 = 16,
+	PERF_REG_RISCV_A7 = 17,
+	PERF_REG_RISCV_S2 = 18,
+	PERF_REG_RISCV_S3 = 19,
+	PERF_REG_RISCV_S4 = 20,
+	PERF_REG_RISCV_S5 = 21,
+	PERF_REG_RISCV_S6 = 22,
+	PERF_REG_RISCV_S7 = 23,
+	PERF_REG_RISCV_S8 = 24,
+	PERF_REG_RISCV_S9 = 25,
+	PERF_REG_RISCV_S10 = 26,
+	PERF_REG_RISCV_S11 = 27,
+	PERF_REG_RISCV_T3 = 28,
+	PERF_REG_RISCV_T4 = 29,
+	PERF_REG_RISCV_T5 = 30,
+	PERF_REG_RISCV_T6 = 31,
+	PERF_REG_RISCV_MAX = 32,
+};
+
+struct kimage_arch {
+	void *fdt;
+	long unsigned int fdt_addr;
+};
+
+typedef void (*riscv_kexec_method)(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef int kexec_probe_t(const char *, long unsigned int);
+
+struct kimage;
+
+typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
+
+typedef int kexec_cleanup_t(void *);
+
+struct kexec_file_ops {
+	kexec_probe_t *probe;
+	kexec_load_t *load;
+	kexec_cleanup_t *cleanup;
+};
+
+typedef long unsigned int kimage_entry_t;
+
+struct kexec_segment {
+	union {
+		void *buf;
+		void *kbuf;
+	};
+	size_t bufsz;
+	long unsigned int mem;
+	size_t memsz;
+};
+
+struct purgatory_info {
+	const Elf64_Ehdr *ehdr;
+	Elf64_Shdr *sechdrs;
+	void *purgatory_buf;
+};
+
+struct kimage {
+	kimage_entry_t head;
+	kimage_entry_t *entry;
+	kimage_entry_t *last_entry;
+	long unsigned int start;
+	struct page *control_code_page;
+	struct page *swap_page;
+	void *vmcoreinfo_data_copy;
+	long unsigned int nr_segments;
+	struct kexec_segment segment[16];
+	struct list_head control_pages;
+	struct list_head dest_pages;
+	struct list_head unusable_pages;
+	long unsigned int control_page;
+	unsigned int type: 1;
+	unsigned int preserve_context: 1;
+	unsigned int file_mode: 1;
+	struct kimage_arch arch;
+	void *kernel_buf;
+	long unsigned int kernel_buf_len;
+	void *initrd_buf;
+	long unsigned int initrd_buf_len;
+	char *cmdline_buf;
+	long unsigned int cmdline_buf_len;
+	const struct kexec_file_ops *fops;
+	void *image_loader_data;
+	struct purgatory_info purgatory_info;
+	void *elf_headers;
+	long unsigned int elf_headers_sz;
+	long unsigned int elf_load_addr;
+};
+
+typedef __be32 fdt32_t;
+
+struct fdt_header {
+	fdt32_t magic;
+	fdt32_t totalsize;
+	fdt32_t off_dt_struct;
+	fdt32_t off_dt_strings;
+	fdt32_t off_mem_rsvmap;
+	fdt32_t version;
+	fdt32_t last_comp_version;
+	fdt32_t boot_cpuid_phys;
+	fdt32_t size_dt_strings;
+	fdt32_t size_dt_struct;
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_MSI_NOMASK_QUIRK = 134217728,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
+	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+};
+
+typedef u8 uint8_t;
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
+};
+
+struct kexec_buf {
+	struct kimage *image;
+	void *buffer;
+	long unsigned int bufsz;
+	long unsigned int mem;
+	long unsigned int memsz;
+	long unsigned int buf_align;
+	long unsigned int buf_min;
+	long unsigned int buf_max;
+	bool top_down;
+};
+
+struct crash_mem {
+	unsigned int max_nr_ranges;
+	unsigned int nr_ranges;
+	struct range ranges[0];
+};
+
+struct kexec_elf_info {
+	const char *buffer;
+	const struct elf64_hdr *ehdr;
+	const struct elf64_phdr *proghdrs;
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+typedef u32 compat_size_t;
+
+typedef s32 compat_clock_t;
+
+typedef s32 compat_pid_t;
+
+typedef s32 compat_timer_t;
+
+typedef s32 compat_int_t;
+
+typedef u32 __compat_uid32_t;
+
+struct compat_sigaltstack {
+	compat_uptr_t ss_sp;
+	int ss_flags;
+	compat_size_t ss_size;
+};
+
+typedef struct compat_sigaltstack compat_stack_t;
+
+union compat_sigval {
+	compat_int_t sival_int;
+	compat_uptr_t sival_ptr;
+};
+
+typedef union compat_sigval compat_sigval_t;
+
+struct compat_siginfo {
+	int si_signo;
+	int si_errno;
+	int si_code;
+	union {
+		int _pad[29];
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+		} _kill;
+		struct {
+			compat_timer_t _tid;
+			int _overrun;
+			compat_sigval_t _sigval;
+		} _timer;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			compat_sigval_t _sigval;
+		} _rt;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			int _status;
+			compat_clock_t _utime;
+			compat_clock_t _stime;
+		} _sigchld;
+		struct {
+			compat_uptr_t _addr;
+			union {
+				int _trapno;
+				short int _addr_lsb;
+				struct {
+					char _dummy_bnd[4];
+					compat_uptr_t _lower;
+					compat_uptr_t _upper;
+				} _addr_bnd;
+				struct {
+					char _dummy_pkey[4];
+					u32 _pkey;
+				} _addr_pkey;
+				struct {
+					compat_ulong_t _data;
+					u32 _type;
+					u32 _flags;
+				} _perf;
+			};
+		} _sigfault;
+		struct {
+			compat_long_t _band;
+			int _fd;
+		} _sigpoll;
+		struct {
+			compat_uptr_t _call_addr;
+			int _syscall;
+			unsigned int _arch;
+		} _sigsys;
+	} _sifields;
+};
+
+struct compat_sigcontext {
+	struct compat_user_regs_struct sc_regs;
+	union __riscv_fp_state sc_fpregs;
+};
+
+struct compat_ucontext {
+	compat_ulong_t uc_flags;
+	struct compat_ucontext *uc_link;
+	compat_stack_t uc_stack;
+	sigset_t uc_sigmask;
+	__u8 __unused[120];
+	struct compat_sigcontext uc_mcontext;
+};
+
+struct compat_rt_sigframe {
+	struct compat_siginfo info;
+	struct compat_ucontext uc;
+};
+
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
+};
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+struct old_timex32 {
+	u32 modes;
+	s32 offset;
+	s32 freq;
+	s32 maxerror;
+	s32 esterror;
+	s32 status;
+	s32 constant;
+	s32 precision;
+	s32 tolerance;
+	struct old_timeval32 time;
+	s32 tick;
+	s32 ppsfreq;
+	s32 jitter;
+	s32 shift;
+	s32 stabil;
+	s32 jitcnt;
+	s32 calcnt;
+	s32 errcnt;
+	s32 stbcnt;
+	s32 tai;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef s32 compat_ssize_t;
+
+typedef u32 compat_uint_t;
+
+typedef u32 compat_aio_context_t;
+
+typedef u32 compat_mode_t;
+
+typedef u32 compat_sigset_word;
+
+struct compat_tms {
+	compat_clock_t tms_utime;
+	compat_clock_t tms_stime;
+	compat_clock_t tms_cutime;
+	compat_clock_t tms_cstime;
+};
+
+typedef struct {
+	compat_sigset_word sig[2];
+} compat_sigset_t;
+
+struct compat_sigaction {
+	compat_uptr_t sa_handler;
+	compat_ulong_t sa_flags;
+	compat_sigset_t sa_mask;
+};
+
+struct compat_rusage {
+	struct old_timeval32 ru_utime;
+	struct old_timeval32 ru_stime;
+	compat_long_t ru_maxrss;
+	compat_long_t ru_ixrss;
+	compat_long_t ru_idrss;
+	compat_long_t ru_isrss;
+	compat_long_t ru_minflt;
+	compat_long_t ru_majflt;
+	compat_long_t ru_nswap;
+	compat_long_t ru_inblock;
+	compat_long_t ru_oublock;
+	compat_long_t ru_msgsnd;
+	compat_long_t ru_msgrcv;
+	compat_long_t ru_nsignals;
+	compat_long_t ru_nvcsw;
+	compat_long_t ru_nivcsw;
+};
+
+struct compat_sigevent {
+	compat_sigval_t sigev_value;
+	compat_int_t sigev_signo;
+	compat_int_t sigev_notify;
+	union {
+		compat_int_t _pad[13];
+		compat_int_t _tid;
+		struct {
+			compat_uptr_t _function;
+			compat_uptr_t _attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct compat_mmsghdr;
+
+struct __compat_aio_sigset;
+
+struct compat_msghdr;
+
+struct compat_mq_attr;
+
+struct compat_sysinfo;
+
+struct compat_kexec_segment;
+
+struct old_itimerval32;
+
+struct compat_statfs64;
+
+typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
+
+typedef struct {
+	u32 type;
+	u32 pad;
+	u64 phys_addr;
+	u64 virt_addr;
+	u64 num_pages;
+	u64 attribute;
+} efi_memory_desc_t;
+
+typedef struct {
+	long unsigned int p4d;
+} p4d_t;
+
+typedef long unsigned int ulong;
+
+struct pt_alloc_ops {
+	pte_t * (*get_pte_virt)(phys_addr_t);
+	phys_addr_t (*alloc_pte)(uintptr_t);
+	pmd_t * (*get_pmd_virt)(phys_addr_t);
+	phys_addr_t (*alloc_pmd)(uintptr_t);
+	pud_t * (*get_pud_virt)(phys_addr_t);
+	phys_addr_t (*alloc_pud)(uintptr_t);
+	p4d_t * (*get_p4d_virt)(phys_addr_t);
+	phys_addr_t (*alloc_p4d)(uintptr_t);
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_mem {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	long unsigned int nslabs;
+	long unsigned int used;
+	struct dentry *debugfs;
+	bool late_alloc;
+	bool force_bounce;
+	bool for_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+};
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
+	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
+	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+struct pageattr_masks {
+	pgprot_t set_mask;
+	pgprot_t clear_mask;
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	NDD_INCOHERENT = 7,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	ND_REGION_CXL = 4,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+typedef long unsigned int efi_status_t;
+
+typedef u8 efi_bool_t;
+
+typedef u16 efi_char16_t;
+
+typedef guid_t efi_guid_t;
+
+typedef struct {
+	u64 signature;
+	u32 revision;
+	u32 headersize;
+	u32 crc32;
+	u32 reserved;
+} efi_table_hdr_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 headersize;
+	u32 flags;
+	u32 imagesize;
+} efi_capsule_header_t;
+
+typedef struct {
+	u16 year;
+	u8 month;
+	u8 day;
+	u8 hour;
+	u8 minute;
+	u8 second;
+	u8 pad1;
+	u32 nanosecond;
+	s16 timezone;
+	u8 daylight;
+	u8 pad2;
+} efi_time_t;
+
+typedef struct {
+	u32 resolution;
+	u32 accuracy;
+	u8 sets_to_zero;
+} efi_time_cap_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 get_time;
+	u32 set_time;
+	u32 get_wakeup_time;
+	u32 set_wakeup_time;
+	u32 set_virtual_address_map;
+	u32 convert_pointer;
+	u32 get_variable;
+	u32 get_next_variable;
+	u32 set_variable;
+	u32 get_next_high_mono_count;
+	u32 reset_system;
+	u32 update_capsule;
+	u32 query_capsule_caps;
+	u32 query_variable_info;
+} efi_runtime_services_32_t;
+
+typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
+
+typedef efi_status_t efi_set_time_t(efi_time_t *);
+
+typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
+
+typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
+
+typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);
+
+typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);
+
+typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
+
+typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
+
+typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);
+
+typedef efi_status_t efi_set_virtual_address_map_t(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);
+
+typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
+
+typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int);
+
+typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		efi_get_time_t *get_time;
+		efi_set_time_t *set_time;
+		efi_get_wakeup_time_t *get_wakeup_time;
+		efi_set_wakeup_time_t *set_wakeup_time;
+		efi_set_virtual_address_map_t *set_virtual_address_map;
+		void *convert_pointer;
+		efi_get_variable_t *get_variable;
+		efi_get_next_variable_t *get_next_variable;
+		efi_set_variable_t *set_variable;
+		efi_get_next_high_mono_count_t *get_next_high_mono_count;
+		efi_reset_system_t *reset_system;
+		efi_update_capsule_t *update_capsule;
+		efi_query_capsule_caps_t *query_capsule_caps;
+		efi_query_variable_info_t *query_variable_info;
+	};
+	efi_runtime_services_32_t mixed_mode;
+} efi_runtime_services_t;
+
+struct efi_memory_map {
+	phys_addr_t phys_map;
+	void *map;
+	void *map_end;
+	int nr_map;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
+};
+
+struct efi {
+	const efi_runtime_services_t *runtime;
+	unsigned int runtime_version;
+	unsigned int runtime_supported_mask;
+	long unsigned int acpi;
+	long unsigned int acpi20;
+	long unsigned int smbios;
+	long unsigned int smbios3;
+	long unsigned int esrt;
+	long unsigned int tpm_log;
+	long unsigned int tpm_final_log;
+	long unsigned int mokvar_table;
+	long unsigned int coco_secret;
+	efi_get_time_t *get_time;
+	efi_set_time_t *set_time;
+	efi_get_wakeup_time_t *get_wakeup_time;
+	efi_set_wakeup_time_t *set_wakeup_time;
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_info_t *query_variable_info;
+	efi_query_variable_info_t *query_variable_info_nonblocking;
+	efi_update_capsule_t *update_capsule;
+	efi_query_capsule_caps_t *query_capsule_caps;
+	efi_get_next_high_mono_count_t *get_next_high_mono_count;
+	efi_reset_system_t *reset_system;
+	struct efi_memory_map memmap;
+	long unsigned int flags;
+};
+
+struct ptdump_range {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct ptdump_state {
+	void (*note_page)(struct ptdump_state *, long unsigned int, int, u64);
+	void (*effective_prot)(struct ptdump_state *, int, u64);
+	const struct ptdump_range *range;
+};
+
+struct addr_marker;
+
+struct pg_state {
+	struct ptdump_state ptdump;
+	struct seq_file *seq;
+	const struct addr_marker *marker;
+	long unsigned int start_address;
+	long unsigned int start_pa;
+	long unsigned int last_pa;
+	int level;
+	u64 current_prot;
+	bool check_wx;
+	long unsigned int wx_pages;
+};
+
+struct addr_marker {
+	long unsigned int start_address;
+	const char *name;
+};
+
+struct ptd_mm_info {
+	struct mm_struct *mm;
+	const struct addr_marker *markers;
+	long unsigned int base_addr;
+	long unsigned int end;
+};
+
+enum address_markers_idx {
+	FIXMAP_START_NR = 0,
+	FIXMAP_END_NR = 1,
+	PCI_IO_START_NR = 2,
+	PCI_IO_END_NR = 3,
+	VMEMMAP_START_NR = 4,
+	VMEMMAP_END_NR = 5,
+	VMALLOC_START_NR = 6,
+	VMALLOC_END_NR = 7,
+	PAGE_OFFSET_NR = 8,
+	MODULES_MAPPING_NR = 9,
+	KERNEL_MAPPING_NR = 10,
+	END_OF_SPACE_NR = 11,
+};
+
+struct prot_bits {
+	u64 mask;
+	u64 val;
+	const char *set;
+	const char *clear;
+};
+
+struct pg_level {
+	const char *name;
+	u64 mask;
+};
+
+struct errata_info_t {
+	char name[32];
+	bool (*check_func)(long unsigned int, long unsigned int);
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY = 1,
+	BPF_CGROUP_ITER_DESCENDANTS_PRE = 2,
+	BPF_CGROUP_ITER_DESCENDANTS_POST = 3,
+	BPF_CGROUP_ITER_ANCESTORS_UP = 4,
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 19,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+	BPF_MAP_TYPE_USER_RINGBUF = 31,
+	BPF_MAP_TYPE_CGRP_STORAGE = 32,
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	__MAX_BPF_ATTACH_TYPE = 44,
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+	};
+	struct {
+		__u32 target_fd;
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		__u32 target_fd;
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		__u32 prog_cnt;
+		__u64 prog_attach_flags;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		__u32 prog_fd;
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		__u32 new_prog_fd;
+		__u32 flags;
+		__u32 old_prog_fd;
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+struct bpf_run_ctx {};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+enum btf_field_type {
+	BPF_SPIN_LOCK = 1,
+	BPF_TIMER = 2,
+	BPF_KPTR_UNREF = 4,
+	BPF_KPTR_REF = 8,
+	BPF_KPTR = 12,
+	BPF_LIST_HEAD = 16,
+	BPF_LIST_NODE = 32,
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+struct btf;
+
+struct btf_field_kptr {
+	struct btf *btf;
+	struct module *module;
+	btf_dtor_kfunc_t dtor;
+	u32 btf_id;
+};
+
+struct btf_record;
+
+struct btf_field_list_head {
+	struct btf *btf;
+	u32 value_btf_id;
+	u32 node_offset;
+	struct btf_record *value_rec;
+};
+
+struct btf_field {
+	u32 offset;
+	enum btf_field_type type;
+	union {
+		struct btf_field_kptr kptr;
+		struct btf_field_list_head list_head;
+	};
+};
+
+struct btf_record {
+	u32 cnt;
+	u32 field_mask;
+	int spin_lock_off;
+	int timer_off;
+	struct btf_field fields[0];
+};
+
+struct btf_field_offs {
+	u32 cnt;
+	u32 field_off[10];
+	u8 field_sz[10];
+};
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+enum bpf_iter_task_type {
+	BPF_TASK_ITER_ALL = 0,
+	BPF_TASK_ITER_TID = 1,
+	BPF_TASK_ITER_TGID = 2,
+};
+
+struct bpf_map;
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+	struct {
+		struct cgroup *start;
+		enum bpf_cgroup_iter_order order;
+	} cgroup;
+	struct {
+		enum bpf_iter_task_type type;
+		u32 pid;
+	} task;
+};
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct bpf_prog_aux;
+
+struct bpf_local_storage_map;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_update_batch)(struct bpf_map *, struct file *, const union bpf_attr *, union bpf_attr *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_map *, void *);
+	int (*map_push_elem)(struct bpf_map *, void *, u64);
+	int (*map_pop_elem)(struct bpf_map *, void *);
+	int (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(void *);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
+	int (*map_redirect)(struct bpf_map *, u64, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+};
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	u32 id;
+	struct btf_record *record;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	struct btf_field_offs *field_offs;
+	long: 64;
+	long: 64;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	struct work_struct work;
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
+};
+
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf_struct_metas;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf_struct_metas *struct_meta_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
+};
+
+struct bpf_ksym {
+	long unsigned int start;
+	long unsigned int end;
+	char name[512];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
+};
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info_aux;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+};
+
+struct bpf_prog_stats;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats *stats;
+	int *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	union {
+		struct {
+			struct {			} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {			} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+};
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	CONST_PTR_TO_DYNPTR = 20,
+	__BPF_REG_TYPE_MAX = 21,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 4194303,
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 nr_args;
+	u8 arg_size[12];
+	u8 arg_flags[12];
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct ftrace_ops *fops;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u32 flags;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	u64 selector;
+	struct module *mod;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short int cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+struct net_rate_estimator;
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator *rate_est;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	long unsigned int state;
+	long unsigned int state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long int privdata[0];
+};
+
+struct tcf_proto;
+
+struct tcf_block;
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	long unsigned int rcu_state;
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	short unsigned int tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+};
+
+struct qdisc_walker;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+	void (*qlen_notify)(struct Qdisc *, long unsigned int);
+	long unsigned int (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+	struct tcf_proto *next;
+	void *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			long unsigned int class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+	};
+};
+
+struct tcf_walker;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	int: 32;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+struct rv_jit_context {
+	struct bpf_prog *prog;
+	u16 *insns;
+	int ninsns;
+	int body_len;
+	int epilogue_offset;
+	int *offset;
+	int nexentries;
+	long unsigned int flags;
+	int stack_size;
+};
+
+struct rv_jit_data {
+	struct bpf_binary_header *header;
+	u8 *image;
+	struct rv_jit_context ctx;
+};
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block *head;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+enum flow_action_hw_stats_bit {
+	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+enum {
+	RV_REG_ZERO = 0,
+	RV_REG_RA = 1,
+	RV_REG_SP = 2,
+	RV_REG_GP = 3,
+	RV_REG_TP = 4,
+	RV_REG_T0 = 5,
+	RV_REG_T1 = 6,
+	RV_REG_T2 = 7,
+	RV_REG_FP = 8,
+	RV_REG_S1 = 9,
+	RV_REG_A0 = 10,
+	RV_REG_A1 = 11,
+	RV_REG_A2 = 12,
+	RV_REG_A3 = 13,
+	RV_REG_A4 = 14,
+	RV_REG_A5 = 15,
+	RV_REG_A6 = 16,
+	RV_REG_A7 = 17,
+	RV_REG_S2 = 18,
+	RV_REG_S3 = 19,
+	RV_REG_S4 = 20,
+	RV_REG_S5 = 21,
+	RV_REG_S6 = 22,
+	RV_REG_S7 = 23,
+	RV_REG_S8 = 24,
+	RV_REG_S9 = 25,
+	RV_REG_S10 = 26,
+	RV_REG_S11 = 27,
+	RV_REG_T3 = 28,
+	RV_REG_T4 = 29,
+	RV_REG_T5 = 30,
+	RV_REG_T6 = 31,
+};
+
+enum {
+	RV_CTX_F_SEEN_TAIL_CALL = 0,
+	RV_CTX_F_SEEN_CALL = 1,
+	RV_CTX_F_SEEN_S1 = 9,
+	RV_CTX_F_SEEN_S2 = 18,
+	RV_CTX_F_SEEN_S3 = 19,
+	RV_CTX_F_SEEN_S4 = 20,
+	RV_CTX_F_SEEN_S5 = 21,
+	RV_CTX_F_SEEN_S6 = 22,
+};
+
+typedef struct {
+	unsigned int __softirq_pending;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+} irq_cpustat_t;
+
+struct trace_print_flags {
+	long unsigned int mask;
+	const char *name;
+};
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	long unsigned int timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
+};
+
+struct tasklet_struct {
+	struct tasklet_struct *next;
+	long unsigned int state;
+	atomic_t count;
+	bool use_callback;
+	union {
+		void (*func)(long unsigned int);
+		void (*callback)(struct tasklet_struct *);
+	};
+	long unsigned int data;
+};
+
+enum {
+	TASKLET_STATE_SCHED = 0,
+	TASKLET_STATE_RUN = 1,
+};
+
+struct kernel_stat {
+	long unsigned int irqs_sum;
+	unsigned int softirqs[10];
+};
+
+struct smp_hotplug_thread {
+	struct task_struct **store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+struct trace_event_raw_irq_handler_entry {
+	struct trace_entry ent;
+	int irq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_handler_exit {
+	struct trace_entry ent;
+	int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq {
+	struct trace_entry ent;
+	unsigned int vec;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_handler_entry {
+	u32 name;
+};
+
+struct trace_event_data_offsets_irq_handler_exit {};
+
+struct trace_event_data_offsets_softirq {};
+
+typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
+
+typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
+
+typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
+
+struct tasklet_head {
+	struct tasklet_struct *head;
+	struct tasklet_struct **tail;
+};
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+struct fdtable {
+	unsigned int max_fds;
+	struct file **fd;
+	long unsigned int *close_on_exec;
+	long unsigned int *open_fds;
+	long unsigned int *full_fds_bits;
+	struct callback_head rcu;
+};
+
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	long unsigned int close_on_exec_init[1];
+	long unsigned int open_fds_init[1];
+	long unsigned int full_fds_bits_init[1];
+	struct file *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct robust_list {
+	struct robust_list *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long int futex_offset;
+	struct robust_list *list_op_pending;
+};
+
+struct io_uring_cmd {
+	struct file *file;
+	const void *cmd;
+	union {
+		void (*task_work_cb)(struct io_uring_cmd *);
+		void *cookie;
+	};
+	u32 cmd_op;
+	u32 flags;
+	u8 pdu[32];
+};
+
+struct waitid_info {
+	pid_t pid;
+	uid_t uid;
+	int status;
+	int cause;
+};
+
+struct wait_opts {
+	enum pid_type wo_type;
+	int wo_flags;
+	struct pid *wo_pid;
+	struct waitid_info *wo_info;
+	int wo_stat;
+	struct rusage *wo_rusage;
+	wait_queue_entry_t child_wait;
+	int notask_error;
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0,
+	WORK_STRUCT_INACTIVE_BIT = 1,
+	WORK_STRUCT_PWQ_BIT = 2,
+	WORK_STRUCT_LINKED_BIT = 3,
+	WORK_STRUCT_COLOR_SHIFT = 4,
+	WORK_STRUCT_COLOR_BITS = 4,
+	WORK_STRUCT_PENDING = 1,
+	WORK_STRUCT_INACTIVE = 2,
+	WORK_STRUCT_PWQ = 4,
+	WORK_STRUCT_LINKED = 8,
+	WORK_STRUCT_STATIC = 0,
+	WORK_NR_COLORS = 16,
+	WORK_CPU_UNBOUND = 32,
+	WORK_STRUCT_FLAG_BITS = 8,
+	WORK_OFFQ_FLAG_BASE = 4,
+	__WORK_OFFQ_CANCELING = 4,
+	WORK_OFFQ_CANCELING = 16,
+	WORK_OFFQ_FLAG_BITS = 1,
+	WORK_OFFQ_POOL_SHIFT = 5,
+	WORK_OFFQ_LEFT = 59,
+	WORK_OFFQ_POOL_BITS = 31,
+	WORK_OFFQ_POOL_NONE = 2147483647,
+	WORK_STRUCT_FLAG_MASK = 255,
+	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
+	WORK_STRUCT_NO_POOL = 4294967264,
+	WORK_BUSY_PENDING = 1,
+	WORK_BUSY_RUNNING = 2,
+	WORKER_DESC_LEN = 24,
+};
+
+typedef long unsigned int vm_flags_t;
+
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
+};
+
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+struct mempolicy {};
+
+typedef struct poll_table_struct poll_table;
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+};
+
+enum {
+	BTF_FIELDS_MAX = 10,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_RINGBUF = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	MEM_ALLOC = 524288,
+	PTR_TRUSTED = 1048576,
+	MEM_RCU = 2097152,
+	__BPF_TYPE_FLAG_MAX = 2097153,
+	__BPF_TYPE_LAST_FLAG = 2097152,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_RINGBUF_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 4194303,
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_RINGBUF_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	RET_PTR_TO_BTF_ID_TRUSTED = 1048584,
+	__BPF_RET_TYPE_LIMIT = 4194303,
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	long unsigned int clone_flags;
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
+
+struct vm_stack {
+	struct callback_head rcu;
+	struct vm_struct *stack_vm_area;
+};
+
+struct audit_context;
+
+typedef void (*smp_call_func_t)(void *);
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	long unsigned int magic;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+typedef __kernel_clock_t clock_t;
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = 4294967295,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
+	union {
+		struct {
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
+	};
+};
+
+struct ptrace_rseq_configuration {
+	__u64 rseq_abi_pointer;
+	__u32 rseq_abi_size;
+	__u32 signature;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+typedef struct compat_siginfo compat_siginfo_t;
+
+struct compat_rlimit {
+	compat_ulong_t rlim_cur;
+	compat_ulong_t rlim_max;
+};
+
+enum uts_proc {
+	UTS_PROC_ARCH = 0,
+	UTS_PROC_OSTYPE = 1,
+	UTS_PROC_OSRELEASE = 2,
+	UTS_PROC_VERSION = 3,
+	UTS_PROC_HOSTNAME = 4,
+	UTS_PROC_DOMAINNAME = 5,
+};
+
+struct prctl_mm_map {
+	__u64 start_code;
+	__u64 end_code;
+	__u64 start_data;
+	__u64 end_data;
+	__u64 start_brk;
+	__u64 brk;
+	__u64 start_stack;
+	__u64 arg_start;
+	__u64 arg_end;
+	__u64 env_start;
+	__u64 env_end;
+	__u64 *auxv;
+	__u32 auxv_size;
+	__u32 exe_fd;
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+struct tms {
+	__kernel_clock_t tms_utime;
+	__kernel_clock_t tms_stime;
+	__kernel_clock_t tms_cutime;
+	__kernel_clock_t tms_cstime;
+};
+
+struct getcpu_cache {
+	long unsigned int blob[16];
+};
+
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+struct compat_sysinfo {
+	s32 uptime;
+	u32 loads[3];
+	u32 totalram;
+	u32 freeram;
+	u32 sharedram;
+	u32 bufferram;
+	u32 totalswap;
+	u32 freeswap;
+	u16 procs;
+	u16 pad;
+	u32 totalhigh;
+	u32 freehigh;
+	u32 mem_unit;
+	char _f[8];
+};
+
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+struct core_vma_metadata;
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct file *file;
+	long unsigned int limit;
+	long unsigned int mm_flags;
+	int cpu;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct core_vma_metadata {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int flags;
+	long unsigned int dump_size;
+	long unsigned int pgoff;
+	struct file *file;
+};
+
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
+};
+
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	long unsigned int sa_handler;
+	long unsigned int sa_flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
+struct wq_flusher;
+
+struct worker;
+
+struct workqueue_attrs;
+
+struct pool_workqueue;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int flags;
+	struct pool_workqueue *cpu_pwqs;
+	struct pool_workqueue *numa_pwq_tbl[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	bool no_numa;
+};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_MAX_UNBOUND_PER_CPU = 4,
+	WQ_DFL_ACTIVE = 256,
+};
+
+typedef unsigned int xa_mark_t;
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+struct worker_pool;
+
+struct worker {
+	union {
+		struct list_head entry;
+		struct hlist_node hentry;
+	};
+	struct work_struct *current_work;
+	work_func_t current_func;
+	struct pool_workqueue *current_pwq;
+	unsigned int current_color;
+	struct list_head scheduled;
+	struct task_struct *task;
+	struct worker_pool *pool;
+	struct list_head node;
+	long unsigned int last_active;
+	unsigned int flags;
+	int id;
+	int sleeping;
+	char desc[24];
+	struct workqueue_struct *rescue_wq;
+	work_func_t last_func;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	struct work_struct unbound_release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	long unsigned int watchdog_ts;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 75000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 25,
+	CREATE_COOLDOWN = 250,
+	RESCUER_NICE_LEVEL = 4294967276,
+	HIGHPRI_NICE_LEVEL = 4294967276,
+	WQ_NAME_LEN = 24,
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long int (*fn)(void *);
+	void *arg;
+	long int ret;
+};
+
+typedef struct {} local_lock_t;
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void *slots[64];
+	union {
+		long unsigned int tags[3];
+		long unsigned int marks[3];
+	};
+};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_DEVICE_TREE = 10,
+	LOCKDOWN_PCMCIA_CIS = 11,
+	LOCKDOWN_TIOCSSERIAL = 12,
+	LOCKDOWN_MODULE_PARAMETERS = 13,
+	LOCKDOWN_MMIOTRACE = 14,
+	LOCKDOWN_DEBUGFS = 15,
+	LOCKDOWN_XMON_WR = 16,
+	LOCKDOWN_BPF_WRITE_USER = 17,
+	LOCKDOWN_DBG_WRITE_KERNEL = 18,
+	LOCKDOWN_RTAS_ERROR_INJECTION = 19,
+	LOCKDOWN_INTEGRITY_MAX = 20,
+	LOCKDOWN_KCORE = 21,
+	LOCKDOWN_KPROBES = 22,
+	LOCKDOWN_BPF_READ_KERNEL = 23,
+	LOCKDOWN_DBG_READ_KERNEL = 24,
+	LOCKDOWN_PERF = 25,
+	LOCKDOWN_TRACEFS = 26,
+	LOCKDOWN_XMON_RW = 27,
+	LOCKDOWN_XFRM_SECRET = 28,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 29,
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct sched_param {
+	int sched_priority;
+};
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+struct kthread_create_info {
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread {
+	long unsigned int flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+struct ipc_ids {
+	int in_use;
+	short unsigned int seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	int next_id;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	struct percpu_counter percpu_msg_bytes;
+	struct percpu_counter percpu_msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	long unsigned int shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long int err;
+	int trapnr;
+	int signr;
+};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_struct srcu;
+	struct notifier_block *head;
+};
+
+enum what {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART_PREPARE = 2,
+	SYS_OFF_MODE_RESTART = 3,
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+struct async_entry {
+	struct list_head domain_list;
+	struct list_head global_list;
+	struct work_struct work;
+	async_cookie_t cookie;
+	async_func_t func;
+	void *data;
+	struct async_domain *domain;
+};
+
+struct umd_info {
+	const char *driver_name;
+	struct file *pipe_to_umh;
+	struct file *pipe_from_umh;
+	struct path wd;
+	struct pid *tgid;
+};
+
+struct pin_cookie {};
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
+typedef struct __call_single_data call_single_data_t;
+
+enum uclamp_id {
+	UCLAMP_MIN = 0,
+	UCLAMP_MAX = 1,
+	UCLAMP_CNT = 2,
+};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	long unsigned int max_cpu_capacity;
+	struct perf_domain *pd;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	u64 exec_clock;
+	u64 min_vruntime;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	struct sched_entity *last;
+	struct sched_entity *skip;
+	unsigned int nr_spread_over;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		long unsigned int load_avg;
+		long unsigned int util_avg;
+		long unsigned int runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	long unsigned int tg_load_avg_contrib;
+	long int propagate;
+	long int prop_runnable_sum;
+	long unsigned int h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	int runtime_enabled;
+	s64 runtime_remaining;
+	u64 throttled_pelt_idle;
+	u64 throttled_clock;
+	u64 throttled_clock_pelt;
+	u64 throttled_clock_pelt_time;
+	int throttled;
+	int throttle_count;
+	struct list_head throttled_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rt_prio_array {
+	long unsigned int bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+	unsigned int rt_nr_boosted;
+	struct rq *rq;
+	struct task_group *tg;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+struct cfs_bandwidth {
+	raw_spinlock_t lock;
+	ktime_t period;
+	u64 quota;
+	u64 runtime;
+	u64 burst;
+	u64 runtime_snap;
+	s64 hierarchical_quota;
+	u8 idle;
+	u8 period_active;
+	u8 slack_started;
+	struct hrtimer period_timer;
+	struct hrtimer slack_timer;
+	struct list_head throttled_cfs_rq;
+	int nr_periods;
+	int nr_throttled;
+	int nr_burst;
+	u64 throttled_time;
+	u64 burst_time;
+};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	long unsigned int shares;
+	int idle;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct sched_rt_entity **rt_se;
+	struct rt_rq **rt_rq;
+	struct rt_bandwidth rt_bandwidth;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct cfs_bandwidth cfs_bandwidth;
+	long: 64;
+	long: 64;
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+struct sched_group;
+
+struct sched_domain {
+	struct sched_domain *parent;
+	struct sched_domain *child;
+	struct sched_group *groups;
+	long unsigned int min_interval;
+	long unsigned int max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	long unsigned int last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	long unsigned int last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	long unsigned int span[0];
+};
+
+struct sched_group_capacity;
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	long unsigned int cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	long unsigned int capacity;
+	long unsigned int min_capacity;
+	long unsigned int max_capacity;
+	long unsigned int next_update;
+	int imbalance;
+	int id;
+	long unsigned int cpumask[0];
+};
+
+struct em_perf_state {
+	long unsigned int frequency;
+	long unsigned int power;
+	long unsigned int cost;
+	long unsigned int flags;
+};
+
+struct em_perf_domain {
+	struct em_perf_state *table;
+	int nr_perf_states;
+	long unsigned int flags;
+	long unsigned int cpus[0];
+};
+
+struct cpuidle_state_usage {
+	long long unsigned int disable;
+	long long unsigned int usage;
+	u64 time_ns;
+	long long unsigned int above;
+	long long unsigned int below;
+	long long unsigned int rejected;
+};
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	long unsigned int caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 bw_ratio;
+};
+
+struct balance_callback;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	long unsigned int last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 32;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	long unsigned int next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_pelt;
+	long unsigned int lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain *sd;
+	long unsigned int cpu_capacity;
+	long unsigned int cpu_capacity_orig;
+	long unsigned int cpu_capacity_inverted;
+	struct balance_callback *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	long unsigned int misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	u64 idle_stamp;
+	u64 avg_idle;
+	long unsigned int wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	long unsigned int calc_load_update;
+	long int calc_load_active;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	cpumask_var_t scratch_mask;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct balance_callback {
+	struct balance_callback *next;
+	void (*func)(struct rq *);
+};
+
+struct rq_flags {
+	long unsigned int flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+enum {
+	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
+	__SCHED_FEAT_START_DEBIT = 1,
+	__SCHED_FEAT_NEXT_BUDDY = 2,
+	__SCHED_FEAT_LAST_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_UTIL_EST_FASTUP = 22,
+	__SCHED_FEAT_LATENCY_WARN = 23,
+	__SCHED_FEAT_ALT_PERIOD = 24,
+	__SCHED_FEAT_BASE_SLICE = 25,
+	__SCHED_FEAT_NR = 26,
+};
+
+struct affinity_context {
+	const struct cpumask *new_mask;
+	struct cpumask *user_mask;
+	unsigned int flags;
+};
+
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
+};
+
+struct energy_env {
+	long unsigned int task_busy_time;
+	long unsigned int pd_busy_time;
+	long unsigned int cpu_cap;
+	long unsigned int pd_cap;
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_asym_packing = 3,
+	group_imbalanced = 4,
+	group_overloaded = 5,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long int imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+};
+
+struct sg_lb_stats {
+	long unsigned int avg_load;
+	long unsigned int group_load;
+	long unsigned int group_capacity;
+	long unsigned int group_util;
+	long unsigned int group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	long unsigned int group_misfit_task_load;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	long unsigned int total_load;
+	long unsigned int total_capacity;
+	long unsigned int avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+struct kernel_cpustat {
+	u64 cpustat[10];
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
+struct dl_bandwidth {
+	raw_spinlock_t dl_runtime_lock;
+	u64 dl_runtime;
+	u64 dl_period;
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
+typedef struct task_group *rt_rq_iter_t;
+
+struct rt_schedulable_data {
+	struct task_group *tg;
+	u64 rt_period;
+	u64 rt_runtime;
+};
+
+struct ww_acquire_ctx;
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	long unsigned int stamp;
+	unsigned int acquired;
+	short unsigned int wounded;
+	short unsigned int is_wait_die;
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+};
+
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
+struct mutex_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
+};
+
+struct sd_flag_debug {
+	unsigned int meta_flags;
+	char *name;
+};
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sd_data {
+	struct sched_domain **sd;
+	struct sched_domain_shared **sds;
+	struct sched_group **sg;
+	struct sched_group_capacity **sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_SHARED = 1,
+};
+
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
+};
+
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
+};
+
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 *cpuusage;
+	struct kernel_cpustat *cpustat;
+};
+
+struct s_data {
+	struct sched_domain **sd;
+	struct root_domain *rd;
+};
+
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
+};
+
+struct asym_cap_data {
+	struct list_head link;
+	long unsigned int capacity;
+	long unsigned int cpus[0];
+};
+
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+struct housekeeping {
+	struct cpumask cpumasks[9];
+	long unsigned int flags;
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	long unsigned int timeout;
+	bool handoff_set;
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+struct rt_mutex_base;
+
+struct rt_mutex_waiter {
+	struct rb_node tree_entry;
+	struct rb_node pi_tree_entry;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	int prio;
+	u64 deadline;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+struct preempt_notifier;
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_idle;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = 4294967295,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+	__CFTYPE_ADDED = 262144,
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long int prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+		__u32 uring_cmd_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_SENDMSG_ZC = 48,
+	IORING_OP_LAST = 49,
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_fixed_file {
+	long unsigned int file_ptr;
+};
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	long unsigned int *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	short unsigned int submit_nr;
+	unsigned int cqes_count;
+	struct blk_plug plug;
+	struct io_uring_cqe cqes[16];
+};
+
+struct io_alloc_cache {
+	struct hlist_head list;
+	unsigned int nr_cached;
+};
+
+struct io_restriction {
+	long unsigned int register_op[1];
+	long unsigned int sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_buffer_list;
+
+struct io_sq_data;
+
+struct io_ev_fd;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		struct percpu_ref refs;
+		struct io_rings *rings;
+		unsigned int flags;
+		enum task_work_notify_mode notify_method;
+		unsigned int compat: 1;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int has_evfd: 1;
+		unsigned int syscall_iopoll: 1;
+		unsigned int task_complete: 1;
+		long: 55;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		int rsrc_cached_refs;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_submit_state submit_state;
+		struct io_buffer_list *io_bl;
+		struct xarray io_bl_xa;
+		struct list_head io_buffers_cache;
+		struct io_hash_table cancel_table_locked;
+		struct list_head cq_overflow_list;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+		long: 64;
+		long: 64;
+	};
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	long unsigned int check_cq;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	long: 32;
+	long: 64;
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd *io_ev_fd;
+		struct wait_queue_head cq_wait;
+		unsigned int cq_extra;
+	};
+	struct {
+		spinlock_t completion_lock;
+		bool poll_multi_queue;
+		struct io_wq_work_list iopoll_list;
+		struct io_hash_table cancel_table;
+		struct llist_head work_llist;
+		struct list_head io_buffers_comp;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		atomic_t cq_timeouts;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 32;
+		long: 64;
+		long: 64;
+	};
+	struct io_restriction restrictions;
+	struct task_struct *submitter_task;
+	struct io_rsrc_node *rsrc_backup_node;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct delayed_work rsrc_put_work;
+	struct callback_head rsrc_put_tw;
+	struct llist_head rsrc_put_llist;
+	struct list_head rsrc_ref_list;
+	spinlock_t rsrc_ref_lock;
+	struct list_head io_buffers_pages;
+	struct socket *ring_sock;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_uring {
+	u32 head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 tail;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, bool *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_buffer;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	union {
+		struct hlist_node hash_node;
+		struct {
+			u64 extra1;
+			u64 extra2;
+		};
+	};
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+	atomic_t refs;
+	atomic_t ops;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	long unsigned int map;
+	struct wait_queue_head wait;
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_CQE32_INIT_BIT = 26,
+	REQ_F_APOLL_MULTISHOT_BIT = 27,
+	REQ_F_CLEAR_POLLIN_BIT = 28,
+	REQ_F_HASH_LOCKED_BIT = 29,
+	REQ_F_SUPPORT_NOWAIT_BIT = 30,
+	REQ_F_ISREG_BIT = 31,
+	__REQ_F_LAST_BIT = 32,
+};
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct cfs_schedulable_data {
+	struct task_group *tg;
+	u64 period;
+	u64 quota;
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+union cpumask_rcuhead {
+	cpumask_t cpumask;
+	struct callback_head rcu;
+};
+
+struct sysrq_key_op {
+	void (* const handler)(int);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
+enum pm_qos_req_action {
+	PM_QOS_ADD_REQ = 0,
+	PM_QOS_UPDATE_REQ = 1,
+	PM_QOS_REMOVE_REQ = 2,
+};
+
+struct dev_printk_info;
+
+typedef unsigned int uint;
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct dev_printk_info {
+	char subsystem[16];
+	char device[48];
+};
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short int flags;
+	short int index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	long unsigned int dropped;
+	void *data;
+	struct hlist_node node;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+struct printk_info {
+	u64 seq;
+	u64 ts_nsec;
+	u16 text_len;
+	u8 facility;
+	u8 flags: 5;
+	u8 level: 3;
+	u32 caller_id;
+	struct dev_printk_info dev_info;
+};
+
+struct printk_record {
+	struct printk_info *info;
+	char *text_buf;
+	unsigned int text_buf_size;
+};
+
+struct prb_data_blk_lpos {
+	long unsigned int begin;
+	long unsigned int next;
+};
+
+struct prb_desc {
+	atomic_long_t state_var;
+	struct prb_data_blk_lpos text_blk_lpos;
+};
+
+struct prb_data_ring {
+	unsigned int size_bits;
+	char *data;
+	atomic_long_t head_lpos;
+	atomic_long_t tail_lpos;
+};
+
+struct prb_desc_ring {
+	unsigned int count_bits;
+	struct prb_desc *descs;
+	struct printk_info *infos;
+	atomic_long_t head_id;
+	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
+};
+
+struct printk_ringbuffer {
+	struct prb_desc_ring desc_ring;
+	struct prb_data_ring text_data_ring;
+	atomic_long_t fail;
+};
+
+struct prb_reserved_entry {
+	struct printk_ringbuffer *rb;
+	long unsigned int irqflags;
+	long unsigned int id;
+	unsigned int text_space;
+};
+
+enum desc_state {
+	desc_miss = 4294967295,
+	desc_reserved = 0,
+	desc_committed = 1,
+	desc_finalized = 2,
+	desc_reusable = 3,
+};
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum devkmsg_log_bits {
+	__DEVKMSG_LOG_BIT_ON = 0,
+	__DEVKMSG_LOG_BIT_OFF = 1,
+	__DEVKMSG_LOG_BIT_LOCK = 2,
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	char buf[8192];
+	struct printk_info info;
+	char text_buf[8192];
+	struct printk_record record;
+};
+
+struct prb_data_block {
+	long unsigned int id;
+	char data[0];
+};
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+enum {
+	IRQTF_RUNTHREAD = 0,
+	IRQTF_WARNED = 1,
+	IRQTF_AFFINITY = 2,
+	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+	IRQS_SYSFS = 16384,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 0,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+struct arch_msi_msg_addr_lo {
+	u32 address_lo;
+};
+
+typedef struct arch_msi_msg_addr_lo arch_msi_msg_addr_lo_t;
+
+struct arch_msi_msg_addr_hi {
+	u32 address_hi;
+};
+
+typedef struct arch_msi_msg_addr_hi arch_msi_msg_addr_hi_t;
+
+struct arch_msi_msg_data {
+	u32 data;
+};
+
+typedef struct arch_msi_msg_data arch_msi_msg_data_t;
+
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
+};
+
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+union msi_domain_cookie {
+	u64 value;
+	void *ptr;
+	void *iobase;
+};
+
+union msi_instance_cookie {
+	u64 value;
+	void *ptr;
+};
+
+struct msi_desc_data {
+	union msi_domain_cookie dcookie;
+	union msi_instance_cookie icookie;
+};
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	union {
+		struct pci_msi_desc pci;
+		struct msi_desc_data data;
+	};
+};
+
+enum msi_domain_ids {
+	MSI_DEFAULT_DOMAIN = 0,
+	MSI_SECONDARY_DOMAIN = 1,
+	MSI_MAX_DEVICE_IRQDOMAINS = 2,
+};
+
+struct msi_alloc_info {
+	struct msi_desc *desc;
+	irq_hw_number_t hwirq;
+	long unsigned int flags;
+	union {
+		long unsigned int ul;
+		void *ptr;
+	} scratchpad[2];
+};
+
+typedef struct msi_alloc_info msi_alloc_info_t;
+
+struct msi_dev_domain {
+	struct xarray store;
+	struct irq_domain *domain;
+};
+
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	long unsigned int properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct msi_dev_domain __domains[2];
+	long unsigned int __iter_idx;
+};
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*prepare_desc)(struct irq_domain *, msi_alloc_info_t *, struct msi_desc *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+	void (*msi_post_free)(struct irq_domain *, struct device *);
+};
+
+struct msi_domain_info {
+	u32 flags;
+	enum irq_domain_bus_token bus_token;
+	unsigned int hwsize;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+enum {
+	IRQ_STARTUP_NORMAL = 0,
+	IRQ_STARTUP_MANAGED = 1,
+	IRQ_STARTUP_ABORT = 2,
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
+	IRQ_DOMAIN_FLAG_NO_MAP = 64,
+	IRQ_DOMAIN_FLAG_MSI_PARENT = 256,
+	IRQ_DOMAIN_FLAG_MSI_DEVICE = 512,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+struct cpu_topology {
+	int thread_id;
+	int core_id;
+	int cluster_id;
+	int package_id;
+	cpumask_t thread_sibling;
+	cpumask_t core_sibling;
+	cpumask_t cluster_sibling;
+	cpumask_t llc_sibling;
+};
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+struct node_vectors {
+	unsigned int id;
+	union {
+		unsigned int nvectors;
+		unsigned int ncpus;
+	};
+};
+
+enum {
+	GP_IDLE = 0,
+	GP_ENTER = 1,
+	GP_PASSED = 2,
+	GP_EXIT = 3,
+	GP_REPLAY = 4,
+};
+
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+struct msi_map {
+	int index;
+	int virq;
+};
+
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
+};
+
+struct msi_domain_template {
+	char name[48];
+	struct irq_chip chip;
+	struct msi_domain_ops ops;
+	struct msi_domain_info info;
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_ACTIVATE_EARLY = 4,
+	MSI_FLAG_MUST_REACTIVATE = 8,
+	MSI_FLAG_DEV_SYSFS = 16,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 32,
+	MSI_FLAG_FREE_MSI_DESCS = 64,
+	MSI_FLAG_NOMASK_QUIRK = 128,
+	MSI_GENERIC_FLAGS_MASK = 65535,
+	MSI_DOMAIN_FLAGS_MASK = 4294901760,
+	MSI_FLAG_MULTI_PCI_MSI = 65536,
+	MSI_FLAG_PCI_MSIX = 131072,
+	MSI_FLAG_LEVEL_CAPABLE = 262144,
+	MSI_FLAG_MSIX_CONTIGUOUS = 524288,
+	MSI_FLAG_PCI_MSIX_ALLOC_DYN = 1048576,
+	MSI_FLAG_PCI_IMS = 2097152,
+};
+
+struct pci_bus;
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+typedef short unsigned int pci_bus_flags_t;
+
+struct pci_dev;
+
+struct pci_ops;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	int domain_nr;
+	char name[48];
+	short unsigned int bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+};
+
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_IOV_RESOURCES = 7,
+	PCI_IOV_RESOURCE_END = 12,
+	PCI_BRIDGE_RESOURCES = 13,
+	PCI_BRIDGE_RESOURCE_END = 16,
+	PCI_NUM_RESOURCES = 17,
+	DEVICE_COUNT_RESOURCE = 17,
+};
+
+typedef int pci_power_t;
+
+typedef unsigned int pci_channel_state_t;
+
+typedef unsigned int pcie_reset_state_t;
+
+typedef short unsigned int pci_dev_flags_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct aer_stats;
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+struct pci_sriov;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int subsystem_vendor;
+	short unsigned int subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u16 aer_cap;
+	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	long unsigned int *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	unsigned int imm_ready: 1;
+	u8 pm_cap;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	struct pcie_link_state *link_state;
+	unsigned int ltr_path: 1;
+	u16 l1ss;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[17];
+	struct resource driver_exclusive_resource;
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	int rom_attr_enabled;
+	struct bin_attribute *res_attr[17];
+	struct bin_attribute *res_attr_wc[17];
+	unsigned int broken_cmd_compl: 1;
+	u16 ptm_cap;
+	unsigned int ptm_root: 1;
+	unsigned int ptm_enabled: 1;
+	u8 ptm_granularity;
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	u16 dpc_cap;
+	unsigned int dpc_rp_extensions: 1;
+	u8 dpc_rp_log_size;
+	union {
+		struct pci_sriov *sriov;
+		struct pci_dev *physfn;
+	};
+	u16 ats_cap;
+	u8 ats_stu;
+	u16 pri_cap;
+	u32 pri_reqs_alloc;
+	unsigned int pasid_required: 1;
+	u16 pasid_cap;
+	u16 pasid_features;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	long unsigned int priv_flags;
+	u8 reset_methods[7];
+};
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+};
+
+typedef unsigned int pci_ers_result_t;
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+	void (*cor_error_detected)(struct pci_dev *);
+};
+
+struct msi_ctrl {
+	unsigned int domid;
+	unsigned int first;
+	unsigned int last;
+	unsigned int nirqs;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long int len;
+};
+
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	long unsigned int gp_jiffies;
+	long unsigned int gp_start;
+	long unsigned int tasks_gp_seq;
+	long unsigned int n_ipis;
+	long unsigned int n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	long unsigned int percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	long unsigned int barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	long unsigned int rtp_jiffies;
+	long unsigned int rtp_n_lock_retries;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct rcu_gp_oldstate {
+	long unsigned int rgos_norm;
+	long unsigned int rgos_exp;
+};
+
+struct context_tracking {
+	atomic_t state;
+	long int dynticks_nesting;
+	long int dynticks_nmi_nesting;
+};
+
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
+};
+
+struct rcu_exp_work {
+	long unsigned int rew_s;
+	struct work_struct rew_work;
+};
+
+struct rcu_node {
+	raw_spinlock_t lock;
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	long unsigned int completedqs;
+	long unsigned int qsmask;
+	long unsigned int rcu_gp_init_mask;
+	long unsigned int qsmaskinit;
+	long unsigned int qsmaskinitnext;
+	long unsigned int expmask;
+	long unsigned int expmaskinit;
+	long unsigned int expmaskinitnext;
+	long unsigned int cbovldmask;
+	long unsigned int ffmask;
+	long unsigned int grpmask;
+	int grplo;
+	int grphi;
+	u8 grpnum;
+	u8 level;
+	bool wait_blkd_tasks;
+	struct rcu_node *parent;
+	struct list_head blkd_tasks;
+	struct list_head *gp_tasks;
+	struct list_head *exp_tasks;
+	struct list_head *boost_tasks;
+	struct rt_mutex boost_mtx;
+	long unsigned int boost_time;
+	struct mutex boost_kthread_mutex;
+	struct task_struct *boost_kthread_task;
+	unsigned int boost_kthread_status;
+	long unsigned int n_boosts;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t fqslock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t exp_lock;
+	long unsigned int exp_seq_rq;
+	wait_queue_head_t exp_wq[4];
+	struct rcu_exp_work rew;
+	bool exp_need_flush;
+	raw_spinlock_t exp_poll_lock;
+	long unsigned int exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+union rcu_noqs {
+	struct {
+		u8 norm;
+		u8 exp;
+	} b;
+	u16 s;
+};
+
+struct rcu_data {
+	long unsigned int gp_seq;
+	long unsigned int gp_seq_needed;
+	union rcu_noqs cpu_no_qs;
+	bool core_needs_qs;
+	bool beenonline;
+	bool gpwrap;
+	bool cpu_started;
+	struct rcu_node *mynode;
+	long unsigned int grpmask;
+	long unsigned int ticks_this_gp;
+	struct irq_work defer_qs_iw;
+	bool defer_qs_iw_pending;
+	struct work_struct strict_work;
+	struct rcu_segcblist cblist;
+	long int qlen_last_fqs_check;
+	long unsigned int n_cbs_invoked;
+	long unsigned int n_force_qs_snap;
+	long int blimit;
+	int dynticks_snap;
+	bool rcu_need_heavy_qs;
+	bool rcu_urgent_qs;
+	bool rcu_forced_tick;
+	bool rcu_forced_tick_exp;
+	long unsigned int barrier_seq_snap;
+	struct callback_head barrier_head;
+	int exp_dynticks_snap;
+	struct task_struct *rcu_cpu_kthread_task;
+	unsigned int rcu_cpu_kthread_status;
+	char rcu_cpu_has_work;
+	long unsigned int rcuc_activity;
+	unsigned int softirq_snap;
+	struct irq_work rcu_iw;
+	bool rcu_iw_pending;
+	long unsigned int rcu_iw_gp_seq;
+	long unsigned int rcu_ofl_gp_seq;
+	short int rcu_ofl_gp_flags;
+	long unsigned int rcu_onl_gp_seq;
+	short int rcu_onl_gp_flags;
+	long unsigned int last_fqs_resched;
+	long unsigned int last_sched_clock;
+	long int lazy_len;
+	int cpu;
+};
+
+struct rcu_state {
+	struct rcu_node node[3];
+	struct rcu_node *level[3];
+	int ncpus;
+	int n_online_cpus;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int gp_seq;
+	long unsigned int gp_max;
+	struct task_struct *gp_kthread;
+	struct swait_queue_head gp_wq;
+	short int gp_flags;
+	short int gp_state;
+	long unsigned int gp_wake_time;
+	long unsigned int gp_wake_seq;
+	long unsigned int gp_seq_polled;
+	long unsigned int gp_seq_polled_snap;
+	long unsigned int gp_seq_polled_exp_snap;
+	struct mutex barrier_mutex;
+	atomic_t barrier_cpu_count;
+	struct completion barrier_completion;
+	long unsigned int barrier_sequence;
+	raw_spinlock_t barrier_lock;
+	struct mutex exp_mutex;
+	struct mutex exp_wake_mutex;
+	long unsigned int expedited_sequence;
+	atomic_t expedited_need_qs;
+	struct swait_queue_head expedited_wq;
+	int ncpus_snap;
+	u8 cbovld;
+	u8 cbovldnext;
+	long unsigned int jiffies_force_qs;
+	long unsigned int jiffies_kick_kthreads;
+	long unsigned int n_force_qs;
+	long unsigned int gp_start;
+	long unsigned int gp_end;
+	long unsigned int gp_activity;
+	long unsigned int gp_req_activity;
+	long unsigned int jiffies_stall;
+	long unsigned int jiffies_resched;
+	long unsigned int n_force_qs_gpstart;
+	const char *name;
+	char abbr;
+	long: 56;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kvfree_rcu_bulk_data {
+	long unsigned int nr_records;
+	struct kvfree_rcu_bulk_data *next;
+	void *records[0];
+};
+
+struct kfree_rcu_cpu;
+
+struct kfree_rcu_cpu_work {
+	struct rcu_work rcu_work;
+	struct callback_head *head_free;
+	struct kvfree_rcu_bulk_data *bkvhead_free[2];
+	struct kfree_rcu_cpu *krcp;
+};
+
+struct kfree_rcu_cpu {
+	struct callback_head *head;
+	struct kvfree_rcu_bulk_data *bkvhead[2];
+	struct kfree_rcu_cpu_work krw_arr[2];
+	raw_spinlock_t lock;
+	struct delayed_work monitor_work;
+	bool initialized;
+	int count;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
+	atomic_t work_in_progress;
+	struct hrtimer hrtimer;
+	struct llist_head bkvcache;
+	int nr_bkv_objs;
+};
+
+struct scatterlist {
+	long unsigned int page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+struct dma_map_ops {
+	unsigned int flags;
+	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
+	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
+	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
+	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
+	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
+	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
+	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
+	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
+	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
+	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
+	int (*dma_supported)(struct device *, u64);
+	u64 (*get_required_mask)(struct device *);
+	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
+	long unsigned int (*get_merge_boundary)(struct device *);
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	long unsigned int attrs;
+};
+
+struct dma_coherent_mem {
+	void *virt_base;
+	dma_addr_t device_base;
+	long unsigned int pfn_base;
+	int size;
+	long unsigned int *bitmap;
+	spinlock_t spinlock;
+	bool use_dev_dma_pfn_offset;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	long unsigned int fdt_node;
+	long unsigned int phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct cma_kobject;
+
+struct cma {
+	long unsigned int base_pfn;
+	long unsigned int count;
+	long unsigned int *bitmap;
+	unsigned int order_per_bit;
+	spinlock_t lock;
+	struct hlist_head mem_head;
+	spinlock_t mem_head_lock;
+	struct debugfs_u32_array dfs_bitmap;
+	char name[64];
+	atomic64_t nr_pages_succeeded;
+	atomic64_t nr_pages_failed;
+	struct cma_kobject *cma_kobj;
+	bool reserve_pages_on_error;
+};
+
+struct io_tlb_area {
+	long unsigned int used;
+	unsigned int index;
+	spinlock_t lock;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+struct trace_event_raw_swiotlb_bounced {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u64 dma_mask;
+	dma_addr_t dev_addr;
+	size_t size;
+	bool force;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_swiotlb_bounced {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
+
+struct gen_pool;
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+struct interval_tree_node {
+	struct rb_node rb;
+	long unsigned int start;
+	long unsigned int last;
+	long unsigned int __subtree_last;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+};
+
+struct mmu_notifier_range {
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+struct kvm_debug_exit_arch {};
+
+struct kvm_sync_regs {};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
+	union {
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			__u32 longmode;
+			__u32 pad;
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
+			union {
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
+			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			long unsigned int extension_id;
+			long unsigned int function_id;
+			long unsigned int args[6];
+			long unsigned int ret[2];
+		} riscv_sbi;
+		struct {
+			long unsigned int csr_num;
+			long unsigned int new_value;
+			long unsigned int write_mask;
+			long unsigned int ret_value;
+		} riscv_csr;
+		struct {
+			__u32 flags;
+		} notify;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct kvm_coalesced_mmio {
+	__u64 phys_addr;
+	__u32 len;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+	__u8 data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+	__u32 first;
+	__u32 last;
+	struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+typedef u64 gpa_t;
+
+typedef u64 gfn_t;
+
+struct kvm_arch_memory_slot {};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	long unsigned int npages;
+	long unsigned int *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	long unsigned int userspace_addr;
+	u32 flags;
+	short int id;
+	u16 as_id;
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+};
+
+struct kvm_vmid {
+	long unsigned int vmid_version;
+	long unsigned int vmid;
+};
+
+struct kvm_guest_timer {
+	u32 nsec_mult;
+	u32 nsec_shift;
+	u64 time_delta;
+};
+
+struct kvm_arch {
+	struct kvm_vmid vmid;
+	pgd_t *pgd;
+	phys_addr_t pgd_phys;
+	struct kvm_guest_timer timer;
+};
+
+struct kvm_io_bus;
+
+struct kvm_stat_data;
+
+struct kvm {
+	spinlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	long unsigned int nr_memslot_pages;
+	struct kvm_memslots __memslots[2];
+	struct kvm_memslots *memslots[1];
+	struct xarray vcpu_array;
+	atomic_t nr_memslots_dirty_logging;
+	spinlock_t mn_invalidate_lock;
+	long unsigned int mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct mmu_notifier mmu_notifier;
+	long unsigned int mmu_invalidate_seq;
+	long int mmu_invalidate_in_progress;
+	long unsigned int mmu_invalidate_range_start;
+	long unsigned int mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	bool override_halt_poll_ns;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool dirty_ring_with_bitmap;
+	bool vm_bugged;
+	bool vm_dead;
+	char stats_id[48];
+};
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
+	void *data;
+	unsigned int len;
+};
+
+struct kvm_cpu_context {
+	long unsigned int zero;
+	long unsigned int ra;
+	long unsigned int sp;
+	long unsigned int gp;
+	long unsigned int tp;
+	long unsigned int t0;
+	long unsigned int t1;
+	long unsigned int t2;
+	long unsigned int s0;
+	long unsigned int s1;
+	long unsigned int a0;
+	long unsigned int a1;
+	long unsigned int a2;
+	long unsigned int a3;
+	long unsigned int a4;
+	long unsigned int a5;
+	long unsigned int a6;
+	long unsigned int a7;
+	long unsigned int s2;
+	long unsigned int s3;
+	long unsigned int s4;
+	long unsigned int s5;
+	long unsigned int s6;
+	long unsigned int s7;
+	long unsigned int s8;
+	long unsigned int s9;
+	long unsigned int s10;
+	long unsigned int s11;
+	long unsigned int t3;
+	long unsigned int t4;
+	long unsigned int t5;
+	long unsigned int t6;
+	long unsigned int sepc;
+	long unsigned int sstatus;
+	long unsigned int hstatus;
+	long: 64;
+	union __riscv_fp_state fp;
+};
+
+struct kvm_vcpu_csr {
+	long unsigned int vsstatus;
+	long unsigned int vsie;
+	long unsigned int vstvec;
+	long unsigned int vsscratch;
+	long unsigned int vsepc;
+	long unsigned int vscause;
+	long unsigned int vstval;
+	long unsigned int hvip;
+	long unsigned int vsatp;
+	long unsigned int scounteren;
+};
+
+struct kvm_vcpu;
+
+struct kvm_vcpu_timer {
+	bool init_done;
+	bool next_set;
+	u64 next_cycles;
+	struct hrtimer hrt;
+	bool sstc_enabled;
+	int (*timer_next_event)(struct kvm_vcpu *, u64);
+};
+
+enum kvm_riscv_hfence_type {
+	KVM_RISCV_HFENCE_UNKNOWN = 0,
+	KVM_RISCV_HFENCE_GVMA_VMID_GPA = 1,
+	KVM_RISCV_HFENCE_VVMA_ASID_GVA = 2,
+	KVM_RISCV_HFENCE_VVMA_ASID_ALL = 3,
+	KVM_RISCV_HFENCE_VVMA_GVA = 4,
+};
+
+struct kvm_riscv_hfence {
+	enum kvm_riscv_hfence_type type;
+	long unsigned int asid;
+	long unsigned int order;
+	gpa_t addr;
+	gpa_t size;
+};
+
+struct kvm_mmio_decode {
+	long unsigned int insn;
+	int insn_len;
+	int len;
+	int shift;
+	int return_handled;
+};
+
+struct kvm_csr_decode {
+	long unsigned int insn;
+	int return_handled;
+};
+
+struct kvm_vcpu_sbi_context {
+	int return_handled;
+};
+
+struct kvm_mmu_memory_cache {
+	int nobjs;
+	gfp_t gfp_zero;
+	gfp_t gfp_custom;
+	struct kmem_cache *kmem_cache;
+	int capacity;
+	void **objects;
+};
+
+struct kvm_vcpu_arch {
+	bool ran_atleast_once;
+	int last_exit_cpu;
+	long unsigned int isa[1];
+	long unsigned int mvendorid;
+	long unsigned int marchid;
+	long unsigned int mimpid;
+	long unsigned int host_sscratch;
+	long unsigned int host_stvec;
+	long unsigned int host_scounteren;
+	struct kvm_cpu_context host_context;
+	struct kvm_cpu_context guest_context;
+	struct kvm_vcpu_csr guest_csr;
+	struct kvm_cpu_context guest_reset_context;
+	struct kvm_vcpu_csr guest_reset_csr;
+	long unsigned int irqs_pending;
+	long unsigned int irqs_pending_mask;
+	struct kvm_vcpu_timer timer;
+	spinlock_t hfence_lock;
+	long unsigned int hfence_head;
+	long unsigned int hfence_tail;
+	struct kvm_riscv_hfence hfence_queue[64];
+	struct kvm_mmio_decode mmio_decode;
+	struct kvm_csr_decode csr_decode;
+	struct kvm_vcpu_sbi_context sbi_context;
+	struct kvm_mmu_memory_cache mmu_page_cache;
+	bool power_off;
+	bool pause;
+	long: 48;
+	long: 64;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 ecall_exit_stat;
+	u64 wfi_exit_stat;
+	u64 mmio_exit_user;
+	u64 mmio_exit_kernel;
+	u64 csr_exit_user;
+	u64 csr_exit_kernel;
+	u64 signal_exits;
+	u64 exits;
+};
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	long unsigned int guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	bool preempted;
+	bool ready;
+	long: 48;
+	long: 64;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+};
+
+struct kvm_io_device;
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+enum kvm_bus {
+	KVM_MMIO_BUS = 0,
+	KVM_PIO_BUS = 1,
+	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
+	KVM_FAST_MMIO_BUS = 3,
+	KVM_NR_BUSES = 4,
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	long unsigned int addr_min;
+	long unsigned int addr_max;
+};
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int class_id: 6;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+enum class_map_type {
+	DD_CLASS_TYPE_DISJOINT_BITS = 0,
+	DD_CLASS_TYPE_LEVEL_NUM = 1,
+	DD_CLASS_TYPE_DISJOINT_NAMES = 2,
+	DD_CLASS_TYPE_LEVEL_NAMES = 3,
+};
+
+struct ddebug_class_map {
+	struct list_head link;
+	struct module *mod;
+	const char *mod_name;
+	const char **class_names;
+	const int length;
+	const int base;
+	enum class_map_type map_type;
+};
+
+struct _ddebug_info {
+	struct _ddebug *descs;
+	struct ddebug_class_map *classes;
+	unsigned int num_descs;
+	unsigned int num_classes;
+};
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	long unsigned int len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	long unsigned int symoffs;
+	long unsigned int stroffs;
+	long unsigned int init_typeoffs;
+	long unsigned int core_typeoffs;
+	struct _ddebug_info dyndbg;
+	bool sig_ok;
+	long unsigned int mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	long unsigned int ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	long unsigned int ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *module_init;
+};
+
+enum kcmp_type {
+	KCMP_FILE = 0,
+	KCMP_VM = 1,
+	KCMP_FILES = 2,
+	KCMP_FS = 3,
+	KCMP_SIGHAND = 4,
+	KCMP_IO = 5,
+	KCMP_SYSVSEM = 6,
+	KCMP_EPOLL_TFD = 7,
+	KCMP_TYPES = 8,
+};
+
+struct kcmp_epoll_slot {
+	__u32 efd;
+	__u32 tfd;
+	__u32 toff;
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	long unsigned int address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct stacktrace_cookie {
+	long unsigned int *store;
+	unsigned int size;
+	unsigned int skip;
+	unsigned int len;
+};
+
+struct profile_hit {
+	u32 pc;
+	u32 hits;
+};
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+};
+
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
+};
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	long unsigned int ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+struct audit_ntp_data {};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+typedef __u64 timeu64_t;
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+struct clock_event_device;
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(long unsigned int, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	long unsigned int retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	long unsigned int min_delta_ticks;
+	long unsigned int max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, long unsigned int);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long int *);
+	int (*set_offset)(struct device *, long int);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	long unsigned int flags;
+	long unsigned int irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	long unsigned int set_offset_nsec;
+	long unsigned int features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+};
+
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
+};
+
+struct trace_event_raw_timer_class {
+	struct trace_entry ent;
+	void *timer;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_start {
+	struct trace_entry ent;
+	void *timer;
+	void *function;
+	long unsigned int expires;
+	long unsigned int now;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_expire_entry {
+	struct trace_entry ent;
+	void *timer;
+	long unsigned int now;
+	void *function;
+	long unsigned int baseclk;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_init {
+	struct trace_entry ent;
+	void *hrtimer;
+	clockid_t clockid;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_start {
+	struct trace_entry ent;
+	void *hrtimer;
+	void *function;
+	s64 expires;
+	s64 softexpires;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_expire_entry {
+	struct trace_entry ent;
+	void *hrtimer;
+	s64 now;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_class {
+	struct trace_entry ent;
+	void *hrtimer;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_state {
+	struct trace_entry ent;
+	int which;
+	long long unsigned int expires;
+	long int value_sec;
+	long int value_nsec;
+	long int interval_sec;
+	long int interval_nsec;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_expire {
+	struct trace_entry ent;
+	int which;
+	pid_t pid;
+	long long unsigned int now;
+	char __data[0];
+};
+
+struct trace_event_raw_tick_stop {
+	struct trace_entry ent;
+	int success;
+	int dependency;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_timer_class {};
+
+struct trace_event_data_offsets_timer_start {};
+
+struct trace_event_data_offsets_timer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_init {};
+
+struct trace_event_data_offsets_hrtimer_start {};
+
+struct trace_event_data_offsets_hrtimer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_class {};
+
+struct trace_event_data_offsets_itimer_state {};
+
+struct trace_event_data_offsets_itimer_expire {};
+
+struct trace_event_data_offsets_tick_stop {};
+
+typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
+
+typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
+
+typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
+
+typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
+
+typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
+
+typedef void (*btf_trace_tick_stop)(void *, int, int);
+
+struct timer_base {
+	raw_spinlock_t lock;
+	struct timer_list *running_timer;
+	long unsigned int clk;
+	long unsigned int next_expiry;
+	unsigned int cpu;
+	bool next_expiry_recalc;
+	bool is_idle;
+	bool timers_pending;
+	long unsigned int pending_map[9];
+	struct hlist_head vectors[576];
+	long: 64;
+	long: 64;
+};
+
+struct process_timer {
+	struct timer_list timer;
+	struct task_struct *task;
+};
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_sched {
+	struct hrtimer sched_timer;
+	long unsigned int check_clocks;
+	enum tick_nohz_mode nohz_mode;
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	long unsigned int idle_jiffies;
+	long unsigned int idle_calls;
+	long unsigned int idle_sleeps;
+	ktime_t idle_entrytime;
+	ktime_t idle_waketime;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	long unsigned int last_jiffies;
+	u64 timer_expires;
+	u64 timer_expires_base;
+	u64 next_timer;
+	ktime_t idle_expires;
+	atomic_t tick_dep_mask;
+	long unsigned int last_tick_jiffies;
+	unsigned int stalled_jiffies;
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+};
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
+struct tm {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	long int tm_year;
+	int tm_wday;
+	int tm_yday;
+};
+
+enum alarmtimer_type {
+	ALARM_REALTIME = 0,
+	ALARM_BOOTTIME = 1,
+	ALARM_NUMTYPE = 2,
+	ALARM_REALTIME_FREEZER = 3,
+	ALARM_BOOTTIME_FREEZER = 4,
+};
+
+enum alarmtimer_restart {
+	ALARMTIMER_NORESTART = 0,
+	ALARMTIMER_RESTART = 1,
+};
+
+struct alarm {
+	struct timerqueue_node node;
+	struct hrtimer timer;
+	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
+	enum alarmtimer_type type;
+	int state;
+	void *data;
+};
+
+struct cpu_timer {
+	struct timerqueue_node node;
+	struct timerqueue_head *head;
+	struct pid *pid;
+	struct list_head elist;
+	int firing;
+};
+
+struct k_clock;
+
+struct k_itimer {
+	struct list_head list;
+	struct hlist_node t_hash;
+	spinlock_t it_lock;
+	const struct k_clock *kclock;
+	clockid_t it_clock;
+	timer_t it_id;
+	int it_active;
+	s64 it_overrun;
+	s64 it_overrun_last;
+	int it_requeue_pending;
+	int it_sigev_notify;
+	ktime_t it_interval;
+	struct signal_struct *it_signal;
+	union {
+		struct pid *it_pid;
+		struct task_struct *it_process;
+	};
+	struct sigqueue *sigq;
+	union {
+		struct {
+			struct hrtimer timer;
+		} real;
+		struct cpu_timer cpu;
+		struct {
+			struct alarm alarmtimer;
+		} alarm;
+	} it;
+	struct callback_head rcu;
+};
+
+struct k_clock {
+	int (*clock_getres)(const clockid_t, struct timespec64 *);
+	int (*clock_set)(const clockid_t, const struct timespec64 *);
+	int (*clock_get_timespec)(const clockid_t, struct timespec64 *);
+	ktime_t (*clock_get_ktime)(const clockid_t);
+	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
+	int (*timer_create)(struct k_itimer *);
+	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
+	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
+	int (*timer_del)(struct k_itimer *);
+	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
+	void (*timer_rearm)(struct k_itimer *);
+	s64 (*timer_forward)(struct k_itimer *, ktime_t);
+	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
+	int (*timer_try_to_cancel)(struct k_itimer *);
+	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
+	void (*timer_wait_running)(struct k_itimer *);
+};
+
+struct class_interface {
+	struct list_head node;
+	struct class *class;
+	int (*add_dev)(struct device *, struct class_interface *);
+	void (*remove_dev)(struct device *, struct class_interface *);
+};
+
+struct pdev_archdata {};
+
+struct platform_device_id;
+
+struct mfd_cell;
+
+struct platform_device {
+	const char *name;
+	int id;
+	bool id_auto;
+	struct device dev;
+	u64 platform_dma_mask;
+	struct device_dma_parameters dma_parms;
+	u32 num_resources;
+	struct resource *resource;
+	const struct platform_device_id *id_entry;
+	const char *driver_override;
+	struct mfd_cell *mfd_cell;
+	struct pdev_archdata archdata;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct property_entry;
+
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
+};
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+struct platform_driver {
+	int (*probe)(struct platform_device *);
+	int (*remove)(struct platform_device *);
+	void (*shutdown)(struct platform_device *);
+	int (*suspend)(struct platform_device *, pm_message_t);
+	int (*resume)(struct platform_device *);
+	struct device_driver driver;
+	const struct platform_device_id *id_table;
+	bool prevent_deferred_probe;
+	bool driver_managed_dma;
+};
+
+struct trace_event_raw_alarmtimer_suspend {
+	struct trace_entry ent;
+	s64 expires;
+	unsigned char alarm_type;
+	char __data[0];
+};
+
+struct trace_event_raw_alarm_class {
+	struct trace_entry ent;
+	void *alarm;
+	unsigned char alarm_type;
+	s64 expires;
+	s64 now;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alarmtimer_suspend {};
+
+struct trace_event_data_offsets_alarm_class {};
+
+typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
+
+typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
+
+struct alarm_base {
+	spinlock_t lock;
+	struct timerqueue_head timerqueue;
+	ktime_t (*get_ktime)();
+	void (*get_timespec)(struct timespec64 *);
+	clockid_t base_clockid;
+};
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+typedef s64 int64_t;
+
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
+};
+
+typedef struct sigevent sigevent_t;
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+struct old_itimerval32 {
+	struct old_timeval32 it_interval;
+	struct old_timeval32 it_value;
+};
+
+struct clock_read_data {
+	u64 epoch_ns;
+	u64 epoch_cyc;
+	u64 sched_clock_mask;
+	u64 (*read_sched_clock)();
+	u32 mult;
+	u32 shift;
+};
+
+struct clock_data {
+	seqcount_latch_t seq;
+	struct clock_read_data read_data[2];
+	ktime_t wrap_kt;
+	long unsigned int rate;
+	u64 (*actual_read_sched_clock)();
+};
+
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
+};
+
+struct proc_timens_offset {
+	int clockid;
+	struct timespec64 val;
+};
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		long unsigned int pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		long unsigned int address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		long unsigned int word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+struct mem_section_usage {
+	long unsigned int subsection_map[1];
+	long unsigned int pageblock_flags[0];
+};
+
+struct mem_section {
+	long unsigned int section_mem_map;
+	struct mem_section_usage *usage;
+};
+
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
+};
+
+struct cfd_percpu {
+	call_single_data_t csd;
+};
+
+struct call_function_data {
+	struct cfd_percpu *pcpu;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+		__u32 cgroup_fd;
+		__u64 cgroup_id;
+	} cgroup;
+	struct {
+		__u32 tid;
+		__u32 pid;
+		__u32 pid_fd;
+	} task;
+};
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	BPF_FUNC_ktime_get_tai_ns = 208,
+	BPF_FUNC_user_ringbuf_drain = 209,
+	BPF_FUNC_cgrp_storage_get = 210,
+	BPF_FUNC_cgrp_storage_delete = 211,
+	__BPF_FUNC_MAX_ID = 212,
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+	};
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	bool might_sleep;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+struct kallsym_iter {
+	loff_t pos;
+	loff_t pos_arch_end;
+	loff_t pos_mod_end;
+	loff_t pos_ftrace_mod_end;
+	loff_t pos_bpf_end;
+	long unsigned int value;
+	unsigned int nameoff;
+	char type;
+	char name[512];
+	char module_name[56];
+	int exported;
+	int show_value;
+};
+
+struct bpf_iter__ksym {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct kallsym_iter *ksym;
+	};
+};
+
+struct compat_kexec_segment {
+	compat_uptr_t buf;
+	compat_size_t bufsz;
+	compat_ulong_t mem;
+	compat_size_t memsz;
+};
+
+typedef struct user_regs_struct elf_gregset_t;
+
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
+};
+
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short int pr_cursig;
+	long unsigned int pr_sigpend;
+	long unsigned int pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
+};
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
+};
+
+typedef u32 note_buf_t[102];
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct crypto_alg;
+
+struct crypto_tfm {
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__crt_ctx[0];
+};
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_istat_aead {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_akcipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t verify_cnt;
+	atomic64_t sign_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_cipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_compress {
+	atomic64_t compress_cnt;
+	atomic64_t compress_tlen;
+	atomic64_t decompress_cnt;
+	atomic64_t decompress_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_hash {
+	atomic64_t hash_cnt;
+	atomic64_t hash_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_kpp {
+	atomic64_t setsecret_cnt;
+	atomic64_t generate_public_key_cnt;
+	atomic64_t compute_shared_secret_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_rng {
+	atomic64_t generate_cnt;
+	atomic64_t generate_tlen;
+	atomic64_t seed_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+	union {
+		struct crypto_istat_aead aead;
+		struct crypto_istat_akcipher akcipher;
+		struct crypto_istat_cipher cipher;
+		struct crypto_istat_compress compress;
+		struct crypto_istat_hash hash;
+		struct crypto_istat_rng rng;
+		struct crypto_istat_kpp kpp;
+	} stats;
+	long: 64;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init)(struct crypto_tfm *, u32, u32);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_shash;
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	unsigned int descsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int digestsize;
+	unsigned int statesize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct kexec_sha_region {
+	long unsigned int start;
+	long unsigned int len;
+};
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+};
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	long unsigned int magic;
+	bool new_sb_created;
+};
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
+};
+
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
+};
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods = 8,
+	Opt_nofavordynmods = 9,
+};
+
+enum freezer_state_flags {
+	CGROUP_FREEZER_ONLINE = 1,
+	CGROUP_FREEZING_SELF = 2,
+	CGROUP_FREEZING_PARENT = 4,
+	CGROUP_FROZEN = 8,
+	CGROUP_FREEZING = 6,
+};
+
+struct freezer {
+	struct cgroup_subsys_state css;
+	unsigned int state;
+};
+
+struct pids_cgroup {
+	struct cgroup_subsys_state css;
+	atomic64_t counter;
+	atomic64_t limit;
+	int64_t watermark;
+	struct cgroup_file events_file;
+	atomic64_t events_limit;
+};
+
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+enum rdmacg_resource_type {
+	RDMACG_RESOURCE_HCA_HANDLE = 0,
+	RDMACG_RESOURCE_HCA_OBJECT = 1,
+	RDMACG_RESOURCE_MAX = 2,
+};
+
+struct rdma_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head rpools;
+};
+
+struct rdmacg_device {
+	struct list_head dev_node;
+	struct list_head rpools;
+	char *name;
+};
+
+enum rdmacg_file_type {
+	RDMACG_RESOURCE_TYPE_MAX = 0,
+	RDMACG_RESOURCE_TYPE_STAT = 1,
+};
+
+struct rdmacg_resource {
+	int max;
+	int usage;
+};
+
+struct rdmacg_resource_pool {
+	struct rdmacg_device *device;
+	struct rdmacg_resource resources[2];
+	struct list_head cg_node;
+	struct list_head dev_node;
+	u64 usage_sum;
+	int num_max_cnt;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+enum cgroup_opt_features {
+	OPT_FEATURE_COUNT = 0,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods___2 = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+struct idmap_key {
+	bool map_up;
+	u32 id;
+	u32 count;
+};
+
+struct root_domain;
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+enum prs_errcode {
+	PERR_NONE = 0,
+	PERR_INVCPUS = 1,
+	PERR_INVPARENT = 2,
+	PERR_NOTPART = 3,
+	PERR_NOTEXCL = 4,
+	PERR_NOCPUS = 5,
+	PERR_HOTPLUG = 6,
+	PERR_CPUSEMPTY = 7,
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	long unsigned int flags;
+	cpumask_var_t cpus_allowed;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	enum prs_errcode prs_err;
+	struct cgroup_file partition_file;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+	partcmd_invalidate = 3,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	long unsigned int caller;
+	cpu_stop_fn_t fn;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+struct ctl_path {
+	const char *procname;
+};
+
+typedef void (*exitcall_t)();
+
+enum {
+	FTRACE_OPS_FL_ENABLED = 1,
+	FTRACE_OPS_FL_DYNAMIC = 2,
+	FTRACE_OPS_FL_SAVE_REGS = 4,
+	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
+	FTRACE_OPS_FL_RECURSION = 16,
+	FTRACE_OPS_FL_STUB = 32,
+	FTRACE_OPS_FL_INITIALIZED = 64,
+	FTRACE_OPS_FL_DELETED = 128,
+	FTRACE_OPS_FL_ADDING = 256,
+	FTRACE_OPS_FL_REMOVING = 512,
+	FTRACE_OPS_FL_MODIFYING = 1024,
+	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
+	FTRACE_OPS_FL_IPMODIFY = 4096,
+	FTRACE_OPS_FL_PID = 8192,
+	FTRACE_OPS_FL_RCU = 16384,
+	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
+	FTRACE_OPS_FL_PERMANENT = 65536,
+	FTRACE_OPS_FL_DIRECT = 131072,
+};
+
+struct kretprobe_instance;
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct kretprobe_instance {
+	struct rethook_node node;
+	char data[0];
+};
+
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct rethook *rh;
+};
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+};
+
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_transition_snapshot {
+	long unsigned int rcu;
+	long unsigned int srcu;
+	bool ongoing;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+struct seccomp_notif_sizes {
+	__u16 seccomp_notif;
+	__u16 seccomp_notif_resp;
+	__u16 seccomp_data;
+};
+
+struct seccomp_notif {
+	__u64 id;
+	__u32 pid;
+	__u32 flags;
+	struct seccomp_data data;
+};
+
+struct seccomp_notif_resp {
+	__u64 id;
+	__s64 val;
+	__s32 error;
+	__u32 flags;
+};
+
+struct seccomp_notif_addfd {
+	__u64 id;
+	__u32 flags;
+	__u32 srcfd;
+	__u32 newfd;
+	__u32 newfd_flags;
+};
+
+struct action_cache {
+	long unsigned int allow_native[8];
+};
+
+struct notification;
+
+struct seccomp_filter {
+	refcount_t refs;
+	refcount_t users;
+	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
+	struct seccomp_filter *prev;
+	struct bpf_prog *prog;
+	struct notification *notif;
+	struct mutex notify_lock;
+	wait_queue_head_t wqh;
+};
+
+struct seccomp_metadata {
+	__u64 filter_off;
+	__u64 flags;
+};
+
+struct sock_fprog {
+	short unsigned int len;
+	struct sock_filter *filter;
+};
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+enum notify_state {
+	SECCOMP_NOTIFY_INIT = 0,
+	SECCOMP_NOTIFY_SENT = 1,
+	SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_knotif {
+	struct task_struct *task;
+	u64 id;
+	const struct seccomp_data *data;
+	enum notify_state state;
+	int error;
+	long int val;
+	u32 flags;
+	struct completion ready;
+	struct list_head list;
+	struct list_head addfd;
+};
+
+struct seccomp_kaddfd {
+	struct file *file;
+	int fd;
+	unsigned int flags;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
+	struct completion completion;
+	struct list_head list;
+};
+
+struct notification {
+	struct semaphore request;
+	u64 next_id;
+	struct list_head notifications;
+};
+
+struct seccomp_log_name {
+	u32 log;
+	const char *name;
+};
+
+struct ftrace_hash {
+	long unsigned int size_bits;
+	struct hlist_head *buckets;
+	long unsigned int count;
+	long unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct ftrace_func_entry {
+	struct hlist_node hlist;
+	long unsigned int ip;
+	long unsigned int direct;
+};
+
+enum ftrace_bug_type {
+	FTRACE_BUG_UNKNOWN = 0,
+	FTRACE_BUG_INIT = 1,
+	FTRACE_BUG_NOP = 2,
+	FTRACE_BUG_CALL = 3,
+	FTRACE_BUG_UPDATE = 4,
+};
+
+enum {
+	FTRACE_FL_ENABLED = 2147483648,
+	FTRACE_FL_REGS = 1073741824,
+	FTRACE_FL_REGS_EN = 536870912,
+	FTRACE_FL_TRAMP = 268435456,
+	FTRACE_FL_TRAMP_EN = 134217728,
+	FTRACE_FL_IPMODIFY = 67108864,
+	FTRACE_FL_DISABLED = 33554432,
+	FTRACE_FL_DIRECT = 16777216,
+	FTRACE_FL_DIRECT_EN = 8388608,
+};
+
+enum {
+	FTRACE_UPDATE_CALLS = 1,
+	FTRACE_DISABLE_CALLS = 2,
+	FTRACE_UPDATE_TRACE_FUNC = 4,
+	FTRACE_START_FUNC_RET = 8,
+	FTRACE_STOP_FUNC_RET = 16,
+	FTRACE_MAY_SLEEP = 32,
+};
+
+enum {
+	FTRACE_UPDATE_IGNORE = 0,
+	FTRACE_UPDATE_MAKE_CALL = 1,
+	FTRACE_UPDATE_MODIFY_CALL = 2,
+	FTRACE_UPDATE_MAKE_NOP = 3,
+};
+
+enum {
+	FTRACE_ITER_FILTER = 1,
+	FTRACE_ITER_NOTRACE = 2,
+	FTRACE_ITER_PRINTALL = 4,
+	FTRACE_ITER_DO_PROBES = 8,
+	FTRACE_ITER_PROBE = 16,
+	FTRACE_ITER_MOD = 32,
+	FTRACE_ITER_ENABLED = 64,
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry *prog;
+	char *filter_string;
+};
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct cond_snapshot;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct array_buffer max_buffer;
+	bool allocated_snapshot;
+	long unsigned int max_latency;
+	struct dentry *d_max_latency;
+	struct work_struct fsnotify_work;
+	struct irq_work fsnotify_irqwork;
+	struct trace_pid_list *filtered_pids;
+	struct trace_pid_list *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int sys_refcount_enter;
+	int sys_refcount_exit;
+	struct trace_event_file *enter_syscall_files[451];
+	struct trace_event_file *exit_syscall_files[451];
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct dentry *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	int ref;
+	int trace_ref;
+	struct ftrace_ops *ops;
+	struct trace_pid_list *function_pids;
+	struct trace_pid_list *function_no_pids;
+	struct list_head func_probes;
+	struct list_head mod_trace;
+	struct list_head mod_notrace;
+	int function_enabled;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct cond_snapshot *cond_snapshot;
+	struct trace_func_repeats *last_func_repeats;
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool use_max_tr;
+	bool noboot;
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct dentry *entry;
+	int ref_count;
+	int nr_events;
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	long unsigned int data[256];
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	long unsigned int entries;
+	long unsigned int saved_latency;
+	long unsigned int critical_start;
+	long unsigned int critical_end;
+	long unsigned int critical_sequence;
+	long unsigned int nice;
+	long unsigned int policy;
+	long unsigned int rt_priority;
+	long unsigned int skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	int ftrace_ignore_pid;
+	bool ignore_pid;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct tracer_opt;
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+enum {
+	TRACE_PIDS = 1,
+	TRACE_NO_PIDS = 2,
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct cond_snapshot {
+	void *cond_data;
+	cond_update_fn_t update;
+};
+
+struct trace_func_repeats {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	long unsigned int count;
+	u64 ts_last_call;
+};
+
+enum {
+	TRACE_ARRAY_FL_GLOBAL = 1,
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+struct ftrace_mod_load {
+	struct list_head list;
+	char *func;
+	char *module;
+	int enable;
+};
+
+enum {
+	FTRACE_HASH_FL_MOD = 1,
+};
+
+struct ftrace_func_command {
+	struct list_head list;
+	char *name;
+	int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);
+};
+
+struct ftrace_probe_ops {
+	void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);
+	int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);
+	void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);
+	int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);
+};
+
+typedef int (*ftrace_mapper_func)(void *);
+
+struct trace_parser {
+	bool cont;
+	char *buffer;
+	unsigned int idx;
+	unsigned int size;
+};
+
+enum trace_iterator_bits {
+	TRACE_ITER_PRINT_PARENT_BIT = 0,
+	TRACE_ITER_SYM_OFFSET_BIT = 1,
+	TRACE_ITER_SYM_ADDR_BIT = 2,
+	TRACE_ITER_VERBOSE_BIT = 3,
+	TRACE_ITER_RAW_BIT = 4,
+	TRACE_ITER_HEX_BIT = 5,
+	TRACE_ITER_BIN_BIT = 6,
+	TRACE_ITER_BLOCK_BIT = 7,
+	TRACE_ITER_PRINTK_BIT = 8,
+	TRACE_ITER_ANNOTATE_BIT = 9,
+	TRACE_ITER_USERSTACKTRACE_BIT = 10,
+	TRACE_ITER_SYM_USEROBJ_BIT = 11,
+	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
+	TRACE_ITER_CONTEXT_INFO_BIT = 13,
+	TRACE_ITER_LATENCY_FMT_BIT = 14,
+	TRACE_ITER_RECORD_CMD_BIT = 15,
+	TRACE_ITER_RECORD_TGID_BIT = 16,
+	TRACE_ITER_OVERWRITE_BIT = 17,
+	TRACE_ITER_STOP_ON_FREE_BIT = 18,
+	TRACE_ITER_IRQ_INFO_BIT = 19,
+	TRACE_ITER_MARKERS_BIT = 20,
+	TRACE_ITER_EVENT_FORK_BIT = 21,
+	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
+	TRACE_ITER_HASH_PTR_BIT = 23,
+	TRACE_ITER_FUNCTION_BIT = 24,
+	TRACE_ITER_FUNC_FORK_BIT = 25,
+	TRACE_ITER_DISPLAY_GRAPH_BIT = 26,
+	TRACE_ITER_STACKTRACE_BIT = 27,
+	TRACE_ITER_LAST_BIT = 28,
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+enum regex_type {
+	MATCH_FULL = 0,
+	MATCH_FRONT_ONLY = 1,
+	MATCH_MIDDLE_ONLY = 2,
+	MATCH_END_ONLY = 3,
+	MATCH_GLOB = 4,
+	MATCH_INDEX = 5,
+};
+
+enum {
+	FTRACE_MODIFY_ENABLE_FL = 1,
+	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
+};
+
+struct ftrace_func_probe {
+	struct ftrace_probe_ops *probe_ops;
+	struct ftrace_ops ops;
+	struct trace_array *tr;
+	struct list_head list;
+	void *data;
+	int ref;
+};
+
+struct ftrace_page {
+	struct ftrace_page *next;
+	struct dyn_ftrace *records;
+	int index;
+	int order;
+};
+
+struct ftrace_rec_iter {
+	struct ftrace_page *pg;
+	int index;
+};
+
+struct ftrace_iterator {
+	loff_t pos;
+	loff_t func_pos;
+	loff_t mod_pos;
+	struct ftrace_page *pg;
+	struct dyn_ftrace *func;
+	struct ftrace_func_probe *probe;
+	struct ftrace_func_entry *probe_entry;
+	struct trace_parser parser;
+	struct ftrace_hash *hash;
+	struct ftrace_ops *ops;
+	struct trace_array *tr;
+	struct list_head *mod_list;
+	int pidx;
+	int idx;
+	unsigned int flags;
+};
+
+struct ftrace_glob {
+	char *search;
+	unsigned int len;
+	int type;
+};
+
+struct ftrace_func_map {
+	struct ftrace_func_entry entry;
+	void *data;
+};
+
+struct ftrace_func_mapper {
+	struct ftrace_hash hash;
+};
+
+enum graph_filter_type {
+	GRAPH_FILTER_NOTRACE = 0,
+	GRAPH_FILTER_FUNCTION = 1,
+};
+
+struct ftrace_graph_data {
+	struct ftrace_hash *hash;
+	struct ftrace_func_entry *entry;
+	int idx;
+	enum graph_filter_type type;
+	struct ftrace_hash *new_hash;
+	const struct seq_operations *seq_ops;
+	struct trace_parser parser;
+};
+
+struct ftrace_mod_func {
+	struct list_head list;
+	char *name;
+	long unsigned int ip;
+	unsigned int size;
+};
+
+struct ftrace_mod_map {
+	struct callback_head rcu;
+	struct list_head list;
+	struct module *mod;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	struct list_head funcs;
+	unsigned int num_funcs;
+};
+
+struct ftrace_init_func {
+	struct list_head list;
+	long unsigned int ip;
+};
+
+struct kallsyms_data {
+	long unsigned int *addrs;
+	const char **syms;
+	size_t cnt;
+	size_t found;
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	long unsigned int caller[8];
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	long unsigned int caller[8];
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	char buf[0];
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	const char *str;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+enum trace_iterator_flags {
+	TRACE_ITER_PRINT_PARENT = 1,
+	TRACE_ITER_SYM_OFFSET = 2,
+	TRACE_ITER_SYM_ADDR = 4,
+	TRACE_ITER_VERBOSE = 8,
+	TRACE_ITER_RAW = 16,
+	TRACE_ITER_HEX = 32,
+	TRACE_ITER_BIN = 64,
+	TRACE_ITER_BLOCK = 128,
+	TRACE_ITER_PRINTK = 256,
+	TRACE_ITER_ANNOTATE = 512,
+	TRACE_ITER_USERSTACKTRACE = 1024,
+	TRACE_ITER_SYM_USEROBJ = 2048,
+	TRACE_ITER_PRINTK_MSGONLY = 4096,
+	TRACE_ITER_CONTEXT_INFO = 8192,
+	TRACE_ITER_LATENCY_FMT = 16384,
+	TRACE_ITER_RECORD_CMD = 32768,
+	TRACE_ITER_RECORD_TGID = 65536,
+	TRACE_ITER_OVERWRITE = 131072,
+	TRACE_ITER_STOP_ON_FREE = 262144,
+	TRACE_ITER_IRQ_INFO = 524288,
+	TRACE_ITER_MARKERS = 1048576,
+	TRACE_ITER_EVENT_FORK = 2097152,
+	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
+	TRACE_ITER_HASH_PTR = 8388608,
+	TRACE_ITER_FUNCTION = 16777216,
+	TRACE_ITER_FUNC_FORK = 33554432,
+	TRACE_ITER_DISPLAY_GRAPH = 67108864,
+	TRACE_ITER_STACKTRACE = 134217728,
+};
+
+struct trace_mark {
+	long long unsigned int val;
+	char sym;
+};
+
+enum ring_buffer_type {
+	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
+	RINGBUF_TYPE_PADDING = 29,
+	RINGBUF_TYPE_TIME_EXTEND = 30,
+	RINGBUF_TYPE_TIME_STAMP = 31,
+};
+
+enum ring_buffer_flags {
+	RB_FL_OVERWRITE = 1,
+};
+
+struct ring_buffer_per_cpu;
+
+struct buffer_page;
+
+struct ring_buffer_iter {
+	struct ring_buffer_per_cpu *cpu_buffer;
+	long unsigned int head;
+	long unsigned int next_event;
+	struct buffer_page *head_page;
+	struct buffer_page *cache_reader_page;
+	long unsigned int cache_read;
+	u64 read_stamp;
+	u64 page_stamp;
+	struct ring_buffer_event *event;
+	int missed_events;
+};
+
+struct rb_irq_work {
+	struct irq_work work;
+	wait_queue_head_t waiters;
+	wait_queue_head_t full_waiters;
+	long int wait_index;
+	bool waiters_pending;
+	bool full_waiters_pending;
+	bool wakeup_full;
+};
+
+struct trace_buffer {
+	unsigned int flags;
+	int cpus;
+	atomic_t record_disabled;
+	cpumask_var_t cpumask;
+	struct lock_class_key *reader_lock_key;
+	struct mutex mutex;
+	struct ring_buffer_per_cpu **buffers;
+	struct hlist_node node;
+	u64 (*clock)();
+	struct rb_irq_work irq_work;
+	bool time_stamp_abs;
+};
+
+enum {
+	RB_LEN_TIME_EXTEND = 8,
+	RB_LEN_TIME_STAMP = 8,
+};
+
+struct buffer_data_page {
+	u64 time_stamp;
+	local_t commit;
+	unsigned char data[0];
+};
+
+struct buffer_page {
+	struct list_head list;
+	local_t write;
+	unsigned int read;
+	local_t entries;
+	long unsigned int real_end;
+	struct buffer_data_page *page;
+};
+
+struct rb_event_info {
+	u64 ts;
+	u64 delta;
+	u64 before;
+	u64 after;
+	long unsigned int length;
+	struct buffer_page *tail_page;
+	int add_timestamp;
+};
+
+enum {
+	RB_ADD_STAMP_NONE = 0,
+	RB_ADD_STAMP_EXTEND = 2,
+	RB_ADD_STAMP_ABSOLUTE = 4,
+	RB_ADD_STAMP_FORCE = 8,
+};
+
+enum {
+	RB_CTX_TRANSITION = 0,
+	RB_CTX_NMI = 1,
+	RB_CTX_IRQ = 2,
+	RB_CTX_SOFTIRQ = 3,
+	RB_CTX_NORMAL = 4,
+	RB_CTX_MAX = 5,
+};
+
+struct rb_time_struct {
+	local64_t time;
+};
+
+typedef struct rb_time_struct rb_time_t;
+
+struct ring_buffer_per_cpu {
+	int cpu;
+	atomic_t record_disabled;
+	atomic_t resize_disabled;
+	struct trace_buffer *buffer;
+	raw_spinlock_t reader_lock;
+	arch_spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct buffer_data_page *free_page;
+	long unsigned int nr_pages;
+	unsigned int current_context;
+	struct list_head *pages;
+	struct buffer_page *head_page;
+	struct buffer_page *tail_page;
+	struct buffer_page *commit_page;
+	struct buffer_page *reader_page;
+	long unsigned int lost_events;
+	long unsigned int last_overrun;
+	long unsigned int nest;
+	local_t entries_bytes;
+	local_t entries;
+	local_t overrun;
+	local_t commit_overrun;
+	local_t dropped_events;
+	local_t committing;
+	local_t commits;
+	local_t pages_touched;
+	local_t pages_lost;
+	local_t pages_read;
+	long int last_pages_touch;
+	size_t shortest_full;
+	long unsigned int read;
+	long unsigned int read_bytes;
+	rb_time_t write_stamp;
+	rb_time_t before_stamp;
+	u64 event_stamp[5];
+	u64 read_stamp;
+	long int nr_pages_to_update;
+	struct list_head new_pages;
+	struct work_struct update_pages_work;
+	struct completion update_done;
+	struct rb_irq_work irq_work;
+};
+
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
+};
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef struct fsnotify_mark_connector *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	short unsigned int type;
+	short unsigned int flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct partial_page {
+	unsigned int offset;
+	unsigned int len;
+	long unsigned int private;
+};
+
+struct splice_pipe_desc {
+	struct page **pages;
+	struct partial_page *partial;
+	int nr_pages;
+	unsigned int nr_pages_max;
+	const struct pipe_buf_operations *ops;
+	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+};
+
+struct trace_export {
+	struct trace_export *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char *saved_cmdlines;
+};
+
+struct ftrace_stack {
+	long unsigned int calls[1024];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+struct ftrace_func_mapper;
+
+struct ftrace_graph_ent {
+	long unsigned int func;
+	int depth;
+} __attribute__((packed));
+
+struct ftrace_graph_ret {
+	long unsigned int func;
+	int depth;
+	unsigned int overrun;
+	long long unsigned int calltime;
+	long long unsigned int rettime;
+};
+
+typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
+
+typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
+
+struct fgraph_ops {
+	trace_func_graph_ent_t entryfunc;
+	trace_func_graph_ret_t retfunc;
+};
+
+enum {
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
+};
+
+enum {
+	MODE_NONE = 0,
+	MODE_ROUND_ROBIN = 1,
+	MODE_PER_CPU = 2,
+	MODE_MAX = 3,
+};
+
+struct hwlat_kthread_data {
+	struct task_struct *kthread;
+	u64 nmi_ts_start;
+	u64 nmi_total_ts;
+	int nmi_count;
+	int nmi_cpu;
+};
+
+struct hwlat_sample {
+	u64 seqnum;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	int nmi_count;
+	int count;
+};
+
+struct hwlat_data {
+	struct mutex lock;
+	u64 count;
+	u64 sample_window;
+	u64 sample_width;
+	int thread_mode;
+};
+
+enum {
+	TRACE_FUNC_NO_OPTS = 0,
+	TRACE_FUNC_OPT_STACK = 1,
+	TRACE_FUNC_OPT_NO_REPEATS = 2,
+	TRACE_FUNC_OPT_HIGHEST_BIT = 4,
+};
+
+struct ftrace_graph_ent_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ent graph_ent;
+} __attribute__((packed));
+
+struct ftrace_graph_ret_entry {
+	struct trace_entry ent;
+	struct ftrace_graph_ret ret;
+};
+
+struct fgraph_cpu_data {
+	pid_t last_pid;
+	int depth;
+	int depth_irq;
+	int ignore;
+	long unsigned int enter_funcs[50];
+};
+
+struct fgraph_data {
+	struct fgraph_cpu_data *cpu_data;
+	struct ftrace_graph_ent_entry ent;
+	struct ftrace_graph_ret_entry ret;
+	int failed;
+	int cpu;
+	int: 32;
+} __attribute__((packed));
+
+enum {
+	FLAGS_FILL_FULL = 268435456,
+	FLAGS_FILL_START = 536870912,
+	FLAGS_FILL_END = 805306368,
+};
+
+struct io_cq {
+	struct request_queue *q;
+	struct io_context *ioc;
+	union {
+		struct list_head q_node;
+		struct kmem_cache *__rcu_icq_cache;
+	};
+	union {
+		struct hlist_node ioc_node;
+		struct callback_head __rcu_head;
+	};
+	unsigned int flags;
+};
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_CGROUP_PUNT = 22,
+	__REQ_POLLED = 23,
+	__REQ_ALLOC_CACHE = 24,
+	__REQ_SWAP = 25,
+	__REQ_DRV = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+struct sbitmap_word {
+	long unsigned int word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int *alloc_hint;
+};
+
+struct sbq_wait_state {
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+	atomic_t completion_cnt;
+	atomic_t wakeup_cnt;
+};
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+enum rq_end_io_ret {
+	RQ_END_IO_NONE = 0,
+	RQ_END_IO_FREE = 1,
+};
+
+typedef enum rq_end_io_ret rq_end_io_fn(struct request *, blk_status_t);
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	short unsigned int wbt_flags;
+	short unsigned int stats_sectors;
+	short unsigned int nr_phys_segments;
+	short unsigned int nr_integrity_segments;
+	short unsigned int ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	long unsigned int deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+		void *completion_data;
+	};
+	union {
+		struct {
+			struct io_cq *icq;
+			void *priv[2];
+		} elv;
+		struct {
+			unsigned int seq;
+			struct list_head list;
+			rq_end_io_fn *saved_end_io;
+		} flush;
+	};
+	union {
+		struct __call_single_data csd;
+		u64 fifo_time;
+	};
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	atomic_t active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+};
+
+struct blk_flush_queue {
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	long unsigned int flush_pending_since;
+	struct list_head flush_queue[2];
+	struct list_head flush_data_in_flight;
+	struct request *flush_rq;
+	spinlock_t mq_flush_lock;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	const struct blk_mq_ops *ops;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+	struct srcu_struct *srcu;
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		long unsigned int state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	long unsigned int flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	short unsigned int type;
+	short unsigned int nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	long unsigned int queued;
+	long unsigned int run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	long: 64;
+	long: 64;
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+	int len;
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct boot_triggers {
+	const char *event;
+	char *trigger;
+};
+
+struct event_probe_data {
+	struct trace_event_file *file;
+	long unsigned int count;
+	int ref;
+	bool enable;
+};
+
+struct syscall_trace_enter {
+	struct trace_entry ent;
+	int nr;
+	long unsigned int args[0];
+};
+
+struct syscall_trace_exit {
+	struct trace_entry ent;
+	int nr;
+	long int ret;
+};
+
+struct syscall_tp_t {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int ret;
+};
+
+struct syscall_tp_t___2 {
+	long long unsigned int regs;
+	long unsigned int syscall_nr;
+	long unsigned int args[6];
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+struct regex;
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum filter_pred_fn {
+	FILTER_PRED_FN_NOP = 0,
+	FILTER_PRED_FN_64 = 1,
+	FILTER_PRED_FN_S64 = 2,
+	FILTER_PRED_FN_U64 = 3,
+	FILTER_PRED_FN_32 = 4,
+	FILTER_PRED_FN_S32 = 5,
+	FILTER_PRED_FN_U32 = 6,
+	FILTER_PRED_FN_16 = 7,
+	FILTER_PRED_FN_S16 = 8,
+	FILTER_PRED_FN_U16 = 9,
+	FILTER_PRED_FN_8 = 10,
+	FILTER_PRED_FN_S8 = 11,
+	FILTER_PRED_FN_U8 = 12,
+	FILTER_PRED_FN_COMM = 13,
+	FILTER_PRED_FN_STRING = 14,
+	FILTER_PRED_FN_STRLOC = 15,
+	FILTER_PRED_FN_STRRELLOC = 16,
+	FILTER_PRED_FN_PCHAR_USER = 17,
+	FILTER_PRED_FN_PCHAR = 18,
+	FILTER_PRED_FN_CPU = 19,
+	FILTER_PRED_FN_ = 20,
+	FILTER_PRED_TEST_VISITED = 21,
+};
+
+struct filter_pred {
+	enum filter_pred_fn fn_num;
+	u64 val;
+	struct regex regex;
+	short unsigned int *ops;
+	struct ftrace_event_field *field;
+	int offset;
+	int not;
+	int op;
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_OPERAND_TOO_LONG = 5,
+	FILT_ERR_EXPECT_STRING = 6,
+	FILT_ERR_EXPECT_DIGIT = 7,
+	FILT_ERR_ILLEGAL_FIELD_OP = 8,
+	FILT_ERR_FIELD_NOT_FOUND = 9,
+	FILT_ERR_ILLEGAL_INTVAL = 10,
+	FILT_ERR_BAD_SUBSYS_FILTER = 11,
+	FILT_ERR_TOO_MANY_PREDS = 12,
+	FILT_ERR_INVALID_FILTER = 13,
+	FILT_ERR_IP_FIELD_ONLY = 14,
+	FILT_ERR_INVALID_VALUE = 15,
+	FILT_ERR_ERRNO = 16,
+	FILT_ERR_NO_FILTER = 17,
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum {
+	TOO_MANY_CLOSE = 4294967295,
+	TOO_MANY_OPEN = 4294967294,
+	MISSING_QUOTE = 4294967293,
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct function_filter_data {
+	struct ftrace_ops *ops;
+	int first_filter;
+	int first_notrace;
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct event_trigger_ops;
+
+struct event_command;
+
+struct event_trigger_data {
+	long unsigned int count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+};
+
+typedef long unsigned int perf_trace_t[1024];
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_ST_SYMSTR = 17,
+	FETCH_OP_MOD_BF = 18,
+	FETCH_OP_LP_ARRAY = 19,
+	FETCH_OP_TP_ARG = 20,
+	FETCH_OP_END = 21,
+	FETCH_NOP_SYMBOL = 22,
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		long unsigned int immediate;
+		void *data;
+	};
+};
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	bool is_signed;
+	bool is_string;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_MAXACT_NO_KPROBE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_BAD_RETPROBE = 10,
+	TP_ERR_BAD_ADDR_SUFFIX = 11,
+	TP_ERR_NO_GROUP_NAME = 12,
+	TP_ERR_GROUP_TOO_LONG = 13,
+	TP_ERR_BAD_GROUP_NAME = 14,
+	TP_ERR_NO_EVENT_NAME = 15,
+	TP_ERR_EVENT_TOO_LONG = 16,
+	TP_ERR_BAD_EVENT_NAME = 17,
+	TP_ERR_EVENT_EXIST = 18,
+	TP_ERR_RETVAL_ON_PROBE = 19,
+	TP_ERR_BAD_STACK_NUM = 20,
+	TP_ERR_BAD_ARG_NUM = 21,
+	TP_ERR_BAD_VAR = 22,
+	TP_ERR_BAD_REG_NAME = 23,
+	TP_ERR_BAD_MEM_ADDR = 24,
+	TP_ERR_BAD_IMM = 25,
+	TP_ERR_IMMSTR_NO_CLOSE = 26,
+	TP_ERR_FILE_ON_KPROBE = 27,
+	TP_ERR_BAD_FILE_OFFS = 28,
+	TP_ERR_SYM_ON_UPROBE = 29,
+	TP_ERR_TOO_MANY_OPS = 30,
+	TP_ERR_DEREF_NEED_BRACE = 31,
+	TP_ERR_BAD_DEREF_OFFS = 32,
+	TP_ERR_DEREF_OPEN_BRACE = 33,
+	TP_ERR_COMM_CANT_DEREF = 34,
+	TP_ERR_BAD_FETCH_ARG = 35,
+	TP_ERR_ARRAY_NO_CLOSE = 36,
+	TP_ERR_BAD_ARRAY_SUFFIX = 37,
+	TP_ERR_BAD_ARRAY_NUM = 38,
+	TP_ERR_ARRAY_TOO_BIG = 39,
+	TP_ERR_BAD_TYPE = 40,
+	TP_ERR_BAD_STRING = 41,
+	TP_ERR_BAD_SYMSTRING = 42,
+	TP_ERR_BAD_BITFIELD = 43,
+	TP_ERR_ARG_NAME_TOO_LONG = 44,
+	TP_ERR_NO_ARG_NAME = 45,
+	TP_ERR_BAD_ARG_NAME = 46,
+	TP_ERR_USED_ARG_NAME = 47,
+	TP_ERR_ARG_TOO_LONG = 48,
+	TP_ERR_NO_ARG_BODY = 49,
+	TP_ERR_BAD_INSN_BNDRY = 50,
+	TP_ERR_FAIL_REG_PROBE = 51,
+	TP_ERR_DIFF_PROBE_TYPE = 52,
+	TP_ERR_DIFF_ARG_TYPE = 53,
+	TP_ERR_SAME_PROBE = 54,
+	TP_ERR_NO_EVENT_INFO = 55,
+	TP_ERR_BAD_ATTACH_EVENT = 56,
+	TP_ERR_BAD_ATTACH_ARG = 57,
+	TP_ERR_NO_EP_FILTER = 58,
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	char *filter_str;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+};
+
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
+};
+
+struct cpufreq_stats;
+
+struct clk;
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+struct trace_event_raw_cpu {
+	struct trace_entry ent;
+	u32 state;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
+struct trace_event_raw_powernv_throttle {
+	struct trace_entry ent;
+	int chip_id;
+	u32 __data_loc_reason;
+	int pmax;
+	char __data[0];
+};
+
+struct trace_event_raw_pstate_sample {
+	struct trace_entry ent;
+	u32 core_busy;
+	u32 scaled_busy;
+	u32 from;
+	u32 to;
+	u64 mperf;
+	u64 aperf;
+	u64 tsc;
+	u32 freq;
+	u32 io_boost;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_frequency_limits {
+	struct trace_entry ent;
+	u32 min_freq;
+	u32 max_freq;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_start {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u32 __data_loc_parent;
+	u32 __data_loc_pm_ops;
+	int event;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_end {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_suspend_resume {
+	struct trace_entry ent;
+	const char *action;
+	int val;
+	bool start;
+	char __data[0];
+};
+
+struct trace_event_raw_wakeup_source {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	char __data[0];
+};
+
+struct trace_event_raw_clock {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_power_domain {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_latency_qos_request {
+	struct trace_entry ent;
+	s32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_pm_qos_update {
+	struct trace_entry ent;
+	enum pm_qos_req_action action;
+	int prev_value;
+	int curr_value;
+	char __data[0];
+};
+
+struct trace_event_raw_dev_pm_qos_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	enum dev_pm_qos_req_type type;
+	s32 new_value;
+	char __data[0];
+};
+
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cpu {};
+
+struct trace_event_data_offsets_cpu_idle_miss {};
+
+struct trace_event_data_offsets_powernv_throttle {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_pstate_sample {};
+
+struct trace_event_data_offsets_cpu_frequency_limits {};
+
+struct trace_event_data_offsets_device_pm_callback_start {
+	u32 device;
+	u32 driver;
+	u32 parent;
+	u32 pm_ops;
+};
+
+struct trace_event_data_offsets_device_pm_callback_end {
+	u32 device;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_suspend_resume {};
+
+struct trace_event_data_offsets_wakeup_source {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clock {
+	u32 name;
+};
+
+struct trace_event_data_offsets_power_domain {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cpu_latency_qos_request {};
+
+struct trace_event_data_offsets_pm_qos_update {};
+
+struct trace_event_data_offsets_dev_pm_qos_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
+typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
+
+typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
+
+typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
+
+typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
+
+typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
+
+typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
+
+typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int);
+
+enum bpf_task_fd_type {
+	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
+	BPF_FD_TYPE_TRACEPOINT = 1,
+	BPF_FD_TYPE_KPROBE = 2,
+	BPF_FD_TYPE_KRETPROBE = 3,
+	BPF_FD_TYPE_UPROBE = 4,
+	BPF_FD_TYPE_URETPROBE = 5,
+};
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+struct kprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int ip;
+};
+
+struct kretprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int func;
+	long unsigned int ret_ip;
+};
+
+typedef int (*dynevent_check_arg_fn_t)(void *);
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct trace_kprobe {
+	struct dyn_event devent;
+	struct kretprobe rp;
+	long unsigned int *nhit;
+	const char *symbol;
+	struct trace_probe tp;
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+enum {
+	BPF_F_INDEX_MASK = 4294967295,
+	BPF_F_CURRENT_CPU = 4294967295,
+	BPF_F_CTXLEN_MASK = 0,
+};
+
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
+struct bpf_perf_event_value {
+	__u64 counter;
+	__u64 enabled;
+	__u64 running;
+};
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+struct btf_ptr {
+	void *ptr;
+	__u32 type_id;
+	__u32 flags;
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data *cache[16];
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+enum key_lookup_flag {
+	KEY_LOOKUP_CREATE = 1,
+	KEY_LOOKUP_PARTIAL = 2,
+	KEY_LOOKUP_ALL = 3,
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+typedef sockptr_t bpfptr_t;
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+struct btf_struct_meta {
+	u32 btf_id;
+	struct btf_record *record;
+	struct btf_field_offs *field_offs;
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_verifier_log {
+	u32 level;
+	char kbuf[1024];
+	char *ubuf;
+	u32 len_used;
+	u32 len_total;
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	bool rcu_tag_supported;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	struct bpf_id_pair idmap_scratch[600];
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u32 prev_log_len;
+	u32 prev_insn_print_len;
+	char type_str_buf[128];
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		u32 mem_size;
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			long unsigned int raw1;
+			long unsigned int raw2;
+		} raw;
+		u32 subprogno;
+	};
+	u32 id;
+	u32 ref_obj_id;
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	struct tnum callback_ret_range;
+	bool in_async_callback_fn;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		char value[0];
+		void *ptrs[0];
+		void *pptrs[0];
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_event_entry {
+	struct perf_event *event;
+	struct file *perf_file;
+	struct file *map_file;
+	struct callback_head rcu;
+};
+
+typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
+
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
+struct bpf_key {
+	struct key *key;
+	bool has_ref;
+};
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+	int callback_ref;
+	bool release_on_unlock;
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	struct {
+		void *ptr;
+		u32 id;
+	} active_lock;
+	bool speculative;
+	bool active_rcu_lock;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		long unsigned int map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	u64 obj_new_size;
+	struct btf_struct_meta *kptr_struct_meta;
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	bool storage_get_func_atomic;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool prune_point;
+	bool jmp_point;
+};
+
+typedef struct user_regs_struct bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
+
+struct perf_event_query_bpf {
+	__u32 ids_len;
+	__u32 prog_cnt;
+	__u32 ids[0];
+};
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map *smap;
+	u8 data[0];
+};
+
+struct trace_event_raw_bpf_trace_printk {
+	struct trace_entry ent;
+	u32 __data_loc_bpf_string;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_trace_printk {
+	u32 bpf_string;
+};
+
+typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
+
+struct bpf_trace_module {
+	struct module *module;
+	struct list_head list;
+};
+
+typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
+
+typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
+
+struct bpf_trace_sample_data {
+	struct perf_sample_data sds[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_nested_pt_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_get_current_task)();
+
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+struct send_signal_irq_work {
+	struct irq_work irq_work;
+	struct task_struct *task;
+	u32 sig;
+	enum pid_type type;
+};
+
+typedef u64 (*btf_bpf_send_signal)(u32);
+
+typedef u64 (*btf_bpf_send_signal_thread)(u32);
+
+typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
+
+typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
+typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
+
+typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bpf_raw_tp_regs {
+	struct pt_regs regs[3];
+};
+
+typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
+
+struct trace_probe_log {
+	const char *subsystem;
+	const char **argv;
+	int argc;
+	int index;
+};
+
+enum uprobe_filter_ctx {
+	UPROBE_FILTER_REGISTER = 0,
+	UPROBE_FILTER_UNREGISTER = 1,
+	UPROBE_FILTER_MMAP = 2,
+};
+
+struct uprobe_consumer {
+	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
+	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
+	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+	struct uprobe_consumer *next;
+};
+
+struct uprobe_trace_entry_head {
+	struct trace_entry ent;
+	long unsigned int vaddr[0];
+};
+
+struct trace_uprobe {
+	struct dyn_event devent;
+	struct uprobe_consumer consumer;
+	struct path path;
+	struct inode *inode;
+	char *filename;
+	long unsigned int offset;
+	long unsigned int ref_ctr_offset;
+	long unsigned int nhit;
+	struct trace_probe tp;
+};
+
+struct uprobe_dispatch_data {
+	struct trace_uprobe *tu;
+	long unsigned int bp_addr;
+};
+
+struct uprobe_cpu_buffer {
+	struct mutex mutex;
+	void *buf;
+};
+
+typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	struct rhash_lock_head *buckets[0];
+};
+
+struct bpf_mem_caches;
+
+struct bpf_mem_cache;
+
+struct bpf_mem_alloc {
+	struct bpf_mem_caches *caches;
+	struct bpf_mem_cache *cache;
+	struct work_struct work;
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	long unsigned int bitmap[0];
+};
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct rhash_lock_head {};
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	MAX_BPF_LINK_TYPE = 10,
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	struct work_struct work;
+};
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+};
+
+struct bpf_preload_info {
+	char link_name[16];
+	struct bpf_link *link;
+};
+
+struct bpf_preload_ops {
+	int (*preload)(struct bpf_preload_info *);
+	struct module *owner;
+};
+
+enum bpf_type {
+	BPF_TYPE_UNSPEC = 0,
+	BPF_TYPE_PROG = 1,
+	BPF_TYPE_MAP = 2,
+	BPF_TYPE_LINK = 3,
+};
+
+struct map_iter {
+	void *key;
+	bool done;
+};
+
+enum {
+	OPT_MODE = 0,
+};
+
+struct bpf_mount_opts {
+	umode_t mode;
+};
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+enum {
+	BPF_F_NO_PREALLOC = 1,
+	BPF_F_NO_COMMON_LRU = 2,
+	BPF_F_NUMA_NODE = 4,
+	BPF_F_RDONLY = 8,
+	BPF_F_WRONLY = 16,
+	BPF_F_STACK_BUILD_ID = 32,
+	BPF_F_ZERO_SEED = 64,
+	BPF_F_RDONLY_PROG = 128,
+	BPF_F_WRONLY_PROG = 256,
+	BPF_F_CLONE = 512,
+	BPF_F_MMAPABLE = 1024,
+	BPF_F_PRESERVE_ELEMS = 2048,
+	BPF_F_INNER_MAP = 4096,
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long int tgt_addr;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct btf_field *kptr_field;
+	u8 uninit_dynptr_regno;
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum {
+	AT_PKT_END = 4294967295,
+	BEYOND_PKT_END = 4294967294,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+struct bpf_kfunc_call_arg_meta {
+	struct btf *btf;
+	u32 func_id;
+	u32 kfunc_flags;
+	const struct btf_type *func_proto;
+	const char *func_name;
+	u32 ref_obj_id;
+	u8 release_regno;
+	bool r0_rdonly;
+	u32 ret_btf_id;
+	u64 r0_size;
+	struct {
+		u64 value;
+		bool found;
+	} arg_constant;
+	struct {
+		struct btf *btf;
+		u32 btf_id;
+	} arg_obj_drop;
+	struct {
+		struct btf_field *field;
+	} arg_list_head;
+};
+
+enum {
+	KF_ARG_DYNPTR_ID = 0,
+	KF_ARG_LIST_HEAD_ID = 1,
+	KF_ARG_LIST_NODE_ID = 2,
+};
+
+enum kfunc_ptr_arg_type {
+	KF_ARG_PTR_TO_CTX = 0,
+	KF_ARG_PTR_TO_ALLOC_BTF_ID = 1,
+	KF_ARG_PTR_TO_KPTR = 2,
+	KF_ARG_PTR_TO_DYNPTR = 3,
+	KF_ARG_PTR_TO_LIST_HEAD = 4,
+	KF_ARG_PTR_TO_LIST_NODE = 5,
+	KF_ARG_PTR_TO_BTF_ID = 6,
+	KF_ARG_PTR_TO_MEM = 7,
+	KF_ARG_PTR_TO_MEM_SIZE = 8,
+};
+
+enum special_kfunc_type {
+	KF_bpf_obj_new_impl = 0,
+	KF_bpf_obj_drop_impl = 1,
+	KF_bpf_list_push_front = 2,
+	KF_bpf_list_push_back = 3,
+	KF_bpf_list_pop_front = 4,
+	KF_bpf_list_pop_back = 5,
+	KF_bpf_cast_to_kern_ctx = 6,
+	KF_bpf_rdonly_cast = 7,
+	KF_bpf_rcu_read_lock = 8,
+	KF_bpf_rcu_read_unlock = 9,
+};
+
+enum {
+	REASON_BOUNDS = 4294967295,
+	REASON_TYPE = 4294967294,
+	REASON_PATHS = 4294967293,
+	REASON_LIMIT = 4294967292,
+	REASON_STACK = 4294967291,
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 56;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
+};
+
+enum {
+	BPF_ANY = 0,
+	BPF_NOEXIST = 1,
+	BPF_EXIST = 2,
+	BPF_F_LOCK = 4,
+};
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct audit_buffer;
+
+struct bpf_timer {
+	long: 64;
+	long: 64;};
+
+struct bpf_dynptr {
+	long: 64;
+	long: 64;};
+
+struct bpf_list_head {
+	long: 64;
+	long: 64;};
+
+struct bpf_list_node {
+	long: 64;
+	long: 64;};
+
+struct bpf_pidns_info {
+	__u32 pid;
+	__u32 tgid;
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_bpf_get_smp_processor_id)();
+
+typedef u64 (*btf_bpf_get_numa_node_id)();
+
+typedef u64 (*btf_bpf_ktime_get_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_boot_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_tai_ns)();
+
+typedef u64 (*btf_bpf_get_current_pid_tgid)();
+
+typedef u64 (*btf_bpf_get_current_uid_gid)();
+
+typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
+
+typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_jiffies64)();
+
+typedef u64 (*btf_bpf_get_current_cgroup_id)();
+
+typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
+
+typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+struct bpf_bprintf_buffers {
+	char tmp_bufs[1536];
+};
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void *callback_fn;
+	void *value;
+};
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, const struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(const struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(const struct bpf_dynptr_kern *, u32, u32);
+
+struct bpf_iter_seq_map_info {
+	u32 map_id;
+};
+
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+};
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
+};
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+	enum bpf_iter_task_type type;
+	u32 pid;
+	u32 pid_visiting;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *vma;
+	u32 tid;
+	long unsigned int prev_vm_start;
+	long unsigned int prev_vm_end;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
+struct pcpu_freelist_node;
+
+struct pcpu_freelist_head {
+	struct pcpu_freelist_node *first;
+	raw_spinlock_t lock;
+};
+
+struct pcpu_freelist_node {
+	struct pcpu_freelist_node *next;
+};
+
+struct pcpu_freelist {
+	struct pcpu_freelist_head *freelist;
+	struct pcpu_freelist_head extralist;
+};
+
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
+};
+
+struct bpf_lru_node {
+	struct list_head list;
+	u16 cpu;
+	u8 type;
+	u8 ref;
+};
+
+struct bpf_lru_list {
+	struct list_head lists[3];
+	unsigned int counts[2];
+	struct list_head *next_inactive_rotation;
+	raw_spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_lru_locallist {
+	struct list_head lists[2];
+	u16 next_steal;
+	raw_spinlock_t lock;
+};
+
+struct bpf_common_lru {
+	struct bpf_lru_list lru_list;
+	struct bpf_lru_locallist *local_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
+
+struct bpf_lru {
+	union {
+		struct bpf_common_lru common_lru;
+		struct bpf_lru_list *percpu_lru;
+	};
+	del_from_htab_func del_from_htab;
+	void *del_arg;
+	unsigned int hash_offset;
+	unsigned int nr_scans;
+	bool percpu;
+	long: 56;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_iter__bpf_map_elem {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+struct bucket {
+	struct hlist_nulls_head head;
+	raw_spinlock_t raw_lock;
+};
+
+struct htab_elem;
+
+struct bpf_htab {
+	struct bpf_map map;
+	struct bpf_mem_alloc ma;
+	struct bpf_mem_alloc pcpu_ma;
+	struct bucket *buckets;
+	void *elems;
+	long: 64;
+	long: 64;
+	union {
+		struct pcpu_freelist freelist;
+		struct bpf_lru lru;
+	};
+	struct htab_elem **extra_elems;
+	struct percpu_counter pcount;
+	atomic_t count;
+	bool use_percpu_counter;
+	u32 n_buckets;
+	u32 elem_size;
+	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int *map_locked[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct htab_elem {
+	union {
+		struct hlist_nulls_node hash_node;
+		struct {
+			void *padding;
+			union {
+				struct pcpu_freelist_node fnode;
+				struct htab_elem *batch_flink;
+			};
+		};
+	};
+	union {
+		void *ptr_to_pptr;
+		struct bpf_lru_node lru_node;
+	};
+	u32 hash;
+	int: 32;
+	char key[0];
+};
+
+struct bpf_iter_seq_hash_map_info {
+	struct bpf_map *map;
+	struct bpf_htab *htab;
+	void *percpu_value_buf;
+	u32 bucket_id;
+	u32 skip_elems;
+};
+
+struct bpf_lpm_trie_key {
+	__u32 prefixlen;
+	__u8 data[0];
+};
+
+struct lpm_trie_node {
+	struct callback_head rcu;
+	struct lpm_trie_node *child[2];
+	u32 prefixlen;
+	u32 flags;
+	u8 data[0];
+};
+
+struct lpm_trie {
+	struct bpf_map map;
+	struct lpm_trie_node *root;
+	size_t n_entries;
+	size_t max_prefixlen;
+	size_t data_size;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 aligned_u32_count;
+	u32 nr_hash_funcs;
+	long unsigned int bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage *local_storage;
+	struct callback_head rcu;
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+enum {
+	BPF_RB_NO_WAKEUP = 1,
+	BPF_RB_FORCE_WAKEUP = 2,
+};
+
+enum {
+	BPF_RB_AVAIL_DATA = 0,
+	BPF_RB_RING_SIZE = 1,
+	BPF_RB_CONS_POS = 2,
+	BPF_RB_PROD_POS = 3,
+};
+
+enum {
+	BPF_RINGBUF_BUSY_BIT = 2147483648,
+	BPF_RINGBUF_DISCARD_BIT = 1073741824,
+	BPF_RINGBUF_HDR_SZ = 8,
+};
+
+struct bpf_ringbuf {
+	wait_queue_head_t waitq;
+	struct irq_work work;
+	u64 mask;
+	struct page **pages;
+	int nr_pages;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t spinlock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t busy;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int consumer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int producer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_ringbuf_map {
+	struct bpf_map map;
+	struct bpf_ringbuf *rb;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_ringbuf_hdr {
+	u32 len;
+	u32 pg_off;
+};
+
+typedef u64 (*btf_bpf_ringbuf_reserve)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_submit)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_output)(struct bpf_map *, void *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_user_ringbuf_drain)(struct bpf_map *, void *, void *, u64);
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+typedef u64 (*bpf_trampoline_enter_t)(struct bpf_prog *, struct bpf_tramp_run_ctx *);
+
+typedef void (*bpf_trampoline_exit_t)(struct bpf_prog *, u64, struct bpf_tramp_run_ctx *);
+
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+typedef u64 (*btf_bpf_task_storage_get_recur)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete_recur)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+	__u64 skb_hwtstamp;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+struct btf_struct_metas {
+	u32 cnt;
+	struct btf_struct_meta types[0];
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	struct kmem_cache *bind2_bucket_cachep;
+	struct inet_bind_hashbucket *bhash2;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+	bool pernet;
+};
+
+struct ip_ra_chain {
+	struct ip_ra_chain *next;
+	struct sock *sk;
+	union {
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
+	struct callback_head rcu;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	long unsigned int *tb_data;
+	long unsigned int __data[0];
+};
+
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	u16 incoming_cpu;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog *prog;
+	struct sock *socks[0];
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct strp_stats {
+	long long unsigned int msgs;
+	long long unsigned int bytes;
+	unsigned int mem_fail;
+	unsigned int need_more_hdr;
+	unsigned int msg_too_big;
+	unsigned int msg_timeouts;
+	unsigned int bad_hdr_len;
+};
+
+struct strparser;
+
+struct strp_callbacks {
+	int (*parse_msg)(struct strparser *, struct sk_buff *);
+	void (*rcv_msg)(struct strparser *, struct sk_buff *);
+	int (*read_sock_done)(struct strparser *, int);
+	void (*abort_parser)(struct strparser *, int);
+	void (*lock)(struct strparser *);
+	void (*unlock)(struct strparser *);
+};
+
+struct strparser {
+	struct sock *sk;
+	u32 stopped: 1;
+	u32 paused: 1;
+	u32 aborted: 1;
+	u32 interrupted: 1;
+	u32 unrecov_intr: 1;
+	struct sk_buff **skb_nextp;
+	struct sk_buff *skb_head;
+	unsigned int need_bytes;
+	struct delayed_work msg_timer_work;
+	struct work_struct work;
+	struct strp_stats stats;
+	struct strp_callbacks cb;
+};
+
+struct sk_psock_work_state {
+	struct sk_buff *skb;
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	bool redir_ingress;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct strparser strp;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	long unsigned int state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long int);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct work_struct work;
+	struct rcu_work rwork;
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved: 6;
+	__u8 autoconf: 1;
+	__u8 onlink: 1;
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long int interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long int rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	long unsigned int copy[1];
+	struct scatterlist data[19];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_COMMON = 0,
+	BTF_KFUNC_HOOK_XDP = 1,
+	BTF_KFUNC_HOOK_TC = 2,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 3,
+	BTF_KFUNC_HOOK_TRACING = 4,
+	BTF_KFUNC_HOOK_SYSCALL = 5,
+	BTF_KFUNC_HOOK_FMODRET = 6,
+	BTF_KFUNC_HOOK_MAX = 7,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 256,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[7];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, va_list);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+struct btf_field_info {
+	enum btf_field_type type;
+	u32 off;
+	union {
+		struct {
+			u32 type_id;
+		} kptr;
+		struct {
+			const char *node_name;
+			u32 value_btf_id;
+		} list_head;
+	};
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+};
+
+enum {
+	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
+	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
+	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
+	__ctx_convertBPF_PROG_TYPE_XDP = 3,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
+	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
+	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
+	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
+	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
+	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
+	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
+	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
+	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
+	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
+	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
+	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
+	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
+	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
+	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
+	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
+	__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25,
+	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
+	__ctx_convertBPF_PROG_TYPE_EXT = 27,
+	__ctx_convertBPF_PROG_TYPE_SYSCALL = 28,
+	__ctx_convert_unused = 29,
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
+struct bpf_mem_cache {
+	struct llist_head free_llist;
+	local_t active;
+	struct llist_head free_llist_extra;
+	struct irq_work refill_work;
+	struct obj_cgroup *objcg;
+	int unit_size;
+	int free_cnt;
+	int low_watermark;
+	int high_watermark;
+	int batch;
+	int percpu_size;
+	struct callback_head rcu;
+	struct llist_head free_by_rcu;
+	struct llist_head waiting_for_gp;
+	atomic_t call_rcu_in_progress;
+};
+
+struct bpf_mem_caches {
+	struct bpf_mem_cache cache[11];
+};
+
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+struct bpf_devmap_val {
+	__u32 ifindex;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_CONSUMED = 1,
+	SKB_DROP_REASON_NOT_SPECIFIED = 2,
+	SKB_DROP_REASON_NO_SOCKET = 3,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 4,
+	SKB_DROP_REASON_TCP_CSUM = 5,
+	SKB_DROP_REASON_SOCKET_FILTER = 6,
+	SKB_DROP_REASON_UDP_CSUM = 7,
+	SKB_DROP_REASON_NETFILTER_DROP = 8,
+	SKB_DROP_REASON_OTHERHOST = 9,
+	SKB_DROP_REASON_IP_CSUM = 10,
+	SKB_DROP_REASON_IP_INHDR = 11,
+	SKB_DROP_REASON_IP_RPFILTER = 12,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 13,
+	SKB_DROP_REASON_XFRM_POLICY = 14,
+	SKB_DROP_REASON_IP_NOPROTO = 15,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 16,
+	SKB_DROP_REASON_PROTO_MEM = 17,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 18,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 19,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 20,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 21,
+	SKB_DROP_REASON_TCP_FLAGS = 22,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 23,
+	SKB_DROP_REASON_TCP_OLD_DATA = 24,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 25,
+	SKB_DROP_REASON_TCP_OFOMERGE = 26,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 27,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 28,
+	SKB_DROP_REASON_TCP_RESET = 29,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 30,
+	SKB_DROP_REASON_TCP_CLOSE = 31,
+	SKB_DROP_REASON_TCP_FASTOPEN = 32,
+	SKB_DROP_REASON_TCP_OLD_ACK = 33,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 34,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 35,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 36,
+	SKB_DROP_REASON_TCP_OFO_DROP = 37,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 38,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 39,
+	SKB_DROP_REASON_IPV6DISABLED = 40,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 41,
+	SKB_DROP_REASON_NEIGH_FAILED = 42,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 43,
+	SKB_DROP_REASON_NEIGH_DEAD = 44,
+	SKB_DROP_REASON_TC_EGRESS = 45,
+	SKB_DROP_REASON_QDISC_DROP = 46,
+	SKB_DROP_REASON_CPU_BACKLOG = 47,
+	SKB_DROP_REASON_XDP = 48,
+	SKB_DROP_REASON_TC_INGRESS = 49,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 50,
+	SKB_DROP_REASON_SKB_CSUM = 51,
+	SKB_DROP_REASON_SKB_GSO_SEG = 52,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 53,
+	SKB_DROP_REASON_DEV_HDR = 54,
+	SKB_DROP_REASON_DEV_READY = 55,
+	SKB_DROP_REASON_FULL_RING = 56,
+	SKB_DROP_REASON_NOMEM = 57,
+	SKB_DROP_REASON_HDR_TRUNC = 58,
+	SKB_DROP_REASON_TAP_FILTER = 59,
+	SKB_DROP_REASON_TAP_TXFILTER = 60,
+	SKB_DROP_REASON_ICMP_CSUM = 61,
+	SKB_DROP_REASON_INVALID_PROTO = 62,
+	SKB_DROP_REASON_IP_INADDRERRORS = 63,
+	SKB_DROP_REASON_IP_INNOROUTES = 64,
+	SKB_DROP_REASON_PKT_TOO_BIG = 65,
+	SKB_DROP_REASON_DUP_FRAG = 66,
+	SKB_DROP_REASON_FRAG_REASM_TIMEOUT = 67,
+	SKB_DROP_REASON_FRAG_TOO_FAR = 68,
+	SKB_DROP_REASON_MAX = 69,
+};
+
+typedef struct bio_vec skb_frag_t;
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	short unsigned int gso_size;
+	short unsigned int gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	skb_frag_t frags[17];
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1,
+	IFF_EBRIDGE = 2,
+	IFF_BONDING = 4,
+	IFF_ISATAP = 8,
+	IFF_WAN_HDLC = 16,
+	IFF_XMIT_DST_RELEASE = 32,
+	IFF_DONT_BRIDGE = 64,
+	IFF_DISABLE_NETPOLL = 128,
+	IFF_MACVLAN_PORT = 256,
+	IFF_BRIDGE_PORT = 512,
+	IFF_OVS_DATAPATH = 1024,
+	IFF_TX_SKB_SHARING = 2048,
+	IFF_UNICAST_FLT = 4096,
+	IFF_TEAM_PORT = 8192,
+	IFF_SUPP_NOFCS = 16384,
+	IFF_LIVE_ADDR_CHANGE = 32768,
+	IFF_MACVLAN = 65536,
+	IFF_XMIT_DST_RELEASE_PERM = 131072,
+	IFF_L3MDEV_MASTER = 262144,
+	IFF_NO_QUEUE = 524288,
+	IFF_OPENVSWITCH = 1048576,
+	IFF_L3MDEV_SLAVE = 2097152,
+	IFF_TEAM = 4194304,
+	IFF_RXFH_CONFIGURED = 8388608,
+	IFF_PHONY_HEADROOM = 16777216,
+	IFF_MACSEC = 33554432,
+	IFF_NO_RX_HANDLER = 67108864,
+	IFF_FAILOVER = 134217728,
+	IFF_FAILOVER_SLAVE = 268435456,
+	IFF_L3MDEV_RX_HANDLER = 536870912,
+	IFF_NO_ADDRCONF = 1073741824,
+	IFF_TX_SKB_NO_LINEAR = 2147483648,
+	IFF_CHANGE_PROTO_DOWN = 0,
+};
+
+struct xdp_dev_bulk_queue {
+	struct xdp_frame *q[16];
+	struct list_head flush_node;
+	struct net_device *dev;
+	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
+	unsigned int count;
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_PRE_UNINIT = 18,
+	NETDEV_RELEASE = 19,
+	NETDEV_NOTIFY_PEERS = 20,
+	NETDEV_JOIN = 21,
+	NETDEV_CHANGEUPPER = 22,
+	NETDEV_RESEND_IGMP = 23,
+	NETDEV_PRECHANGEMTU = 24,
+	NETDEV_CHANGEINFODATA = 25,
+	NETDEV_BONDING_INFO = 26,
+	NETDEV_PRECHANGEUPPER = 27,
+	NETDEV_CHANGELOWERSTATE = 28,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 29,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 30,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 31,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 32,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 33,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 34,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 35,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 38,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 39,
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u64 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 flags;
+	u32 kern_flags;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	struct bpf_nh_params nh;
+};
+
+struct bpf_dtab;
+
+struct bpf_dtab_netdev {
+	struct net_device *dev;
+	struct hlist_node index_hlist;
+	struct bpf_dtab *dtab;
+	struct bpf_prog *xdp_prog;
+	struct callback_head rcu;
+	unsigned int idx;
+	struct bpf_devmap_val val;
+};
+
+struct bpf_dtab {
+	struct bpf_map map;
+	struct bpf_dtab_netdev **netdev_map;
+	struct list_head list;
+	struct hlist_head *dev_index_head;
+	spinlock_t index_lock;
+	unsigned int items;
+	u32 n_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
+	struct mutex mutex;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	void *rw_image;
+	u32 image_off;
+	struct bpf_ksym ksym;
+};
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head *next;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+};
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+struct bpf_cpumap_val {
+	__u32 qsize;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct bpf_cpu_map_entry;
+
+struct xdp_bulk_queue {
+	void *q[8];
+	struct list_head flush_node;
+	struct bpf_cpu_map_entry *obj;
+	unsigned int count;
+};
+
+struct bpf_cpu_map;
+
+struct bpf_cpu_map_entry {
+	u32 cpu;
+	int map_id;
+	struct xdp_bulk_queue *bulkq;
+	struct bpf_cpu_map *cmap;
+	struct ptr_ring *queue;
+	struct task_struct *kthread;
+	struct bpf_cpumap_val value;
+	struct bpf_prog *prog;
+	atomic_t refcnt;
+	struct callback_head rcu;
+	struct work_struct kthread_stop_wq;
+};
+
+struct bpf_cpu_map {
+	struct bpf_map map;
+	struct bpf_cpu_map_entry **cpu_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_iter__cgroup {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct cgroup *cgroup;
+	};
+};
+
+struct cgroup_iter_priv {
+	struct cgroup_subsys_state *start_css;
+	bool visited_all;
+	bool terminate;
+	int order;
+};
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
+};
+
+enum {
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
+};
+
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 4294967264,
+	PERF_CONTEXT_KERNEL = 4294967168,
+	PERF_CONTEXT_USER = 4294966784,
+	PERF_CONTEXT_GUEST = 4294965248,
+	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
+	PERF_CONTEXT_GUEST_USER = 4294964736,
+	PERF_CONTEXT_MAX = 4294963201,
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_cgrp_storage_get)(struct bpf_map *, struct cgroup *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_cgrp_storage_delete)(struct bpf_map *, struct cgroup *);
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+struct reuseport_array {
+	struct bpf_map map;
+	struct sock *ptrs[0];
+};
+
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int);
+};
+
+enum bpf_struct_ops_state {
+	BPF_STRUCT_OPS_STATE_INIT = 0,
+	BPF_STRUCT_OPS_STATE_INUSE = 1,
+	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
+};
+
+struct bpf_struct_ops_value {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_struct_ops_map {
+	struct bpf_map map;
+	struct callback_head rcu;
+	const struct bpf_struct_ops *st_ops;
+	struct mutex lock;
+	struct bpf_link **links;
+	void *image;
+	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_struct_ops_value kvalue;
+};
+
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_struct_ops_tcp_congestion_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tcp_congestion_ops data;
+};
+
+enum {
+	BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0,
+	BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1,
+	__NR_BPF_STRUCT_OPS_TYPE = 2,
+};
+
+enum {
+	BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
+};
+
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct bpf_prog_list {
+	struct hlist_node node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
+typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
+
+typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
+struct perf_event_mmap_page {
+	__u32 version;
+	__u32 compat_version;
+	__u32 lock;
+	__u32 index;
+	__s64 offset;
+	__u64 time_enabled;
+	__u64 time_running;
+	union {
+		__u64 capabilities;
+		struct {
+			__u64 cap_bit0: 1;
+			__u64 cap_bit0_is_deprecated: 1;
+			__u64 cap_user_rdpmc: 1;
+			__u64 cap_user_time: 1;
+			__u64 cap_user_time_zero: 1;
+			__u64 cap_user_time_short: 1;
+			__u64 cap_____res: 58;
+		};
+	};
+	__u16 pmc_width;
+	__u16 time_shift;
+	__u32 time_mult;
+	__u64 time_offset;
+	__u64 time_zero;
+	__u32 size;
+	__u32 __reserved_1;
+	__u64 time_cycles;
+	__u64 time_mask;
+	__u8 __reserved[928];
+	__u64 data_head;
+	__u64 data_tail;
+	__u64 data_offset;
+	__u64 data_size;
+	__u64 aux_head;
+	__u64 aux_tail;
+	__u64 aux_offset;
+	__u64 aux_size;
+};
+
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
+};
+
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long int watermark;
+	long int aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	long unsigned int mmap_locked;
+	struct user_struct *mmap_user;
+	long int aux_head;
+	unsigned int aux_nest;
+	long int aux_wakeup;
+	long unsigned int aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	long unsigned int aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+struct parallel_data;
+
+struct padata_priv {
+	struct list_head list;
+	struct parallel_data *pd;
+	int cb_cpu;
+	unsigned int seq_nr;
+	int info;
+	void (*parallel)(struct padata_priv *);
+	void (*serial)(struct padata_priv *);
+};
+
+struct padata_cpumask {
+	cpumask_var_t pcpu;
+	cpumask_var_t cbcpu;
+};
+
+struct padata_shell;
+
+struct padata_list;
+
+struct padata_serial_queue;
+
+struct parallel_data {
+	struct padata_shell *ps;
+	struct padata_list *reorder_list;
+	struct padata_serial_queue *squeue;
+	refcount_t refcnt;
+	unsigned int seq_nr;
+	unsigned int processed;
+	int cpu;
+	struct padata_cpumask cpumask;
+	struct work_struct reorder_work;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct padata_list {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct padata_serial_queue {
+	struct padata_list serial;
+	struct work_struct work;
+	struct parallel_data *pd;
+};
+
+struct padata_instance;
+
+struct padata_shell {
+	struct padata_instance *pinst;
+	struct parallel_data *pd;
+	struct parallel_data *opd;
+	struct list_head list;
+};
+
+struct padata_instance {
+	struct hlist_node cpu_online_node;
+	struct hlist_node cpu_dead_node;
+	struct workqueue_struct *parallel_wq;
+	struct workqueue_struct *serial_wq;
+	struct list_head pslist;
+	struct padata_cpumask cpumask;
+	struct kobject kobj;
+	struct mutex lock;
+	u8 flags;
+};
+
+struct padata_mt_job {
+	void (*thread_fn)(long unsigned int, long unsigned int, void *);
+	void *fn_arg;
+	long unsigned int start;
+	long unsigned int size;
+	long unsigned int align;
+	long unsigned int min_chunk;
+	int max_threads;
+};
+
+struct padata_work {
+	struct work_struct pw_work;
+	struct list_head pw_list;
+	void *pw_data;
+};
+
+struct padata_mt_job_state {
+	spinlock_t lock;
+	struct completion completion;
+	struct padata_mt_job *job;
+	int nworks;
+	int nworks_fini;
+	long unsigned int chunk_size;
+};
+
+struct padata_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct padata_instance *, struct attribute *, char *);
+	ssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);
+};
+
+struct static_key_mod {
+	struct static_key_mod *next;
+	struct jump_entry *entries;
+	struct module *mod;
+};
+
+struct static_key_deferred {
+	struct static_key key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+struct uprobe {
+	struct rb_node rb_node;
+	refcount_t ref;
+	struct rw_semaphore register_rwsem;
+	struct rw_semaphore consumer_rwsem;
+	struct list_head pending_list;
+	struct uprobe_consumer *consumers;
+	struct inode *inode;
+	loff_t offset;
+	loff_t ref_ctr_offset;
+	long unsigned int flags;
+	struct arch_uprobe arch;
+};
+
+struct xol_area {
+	wait_queue_head_t wq;
+	atomic_t slot_count;
+	long unsigned int *bitmap;
+	struct vm_special_mapping xol_mapping;
+	struct page *pages[2];
+	long unsigned int vaddr;
+};
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+struct page_vma_mapped_walk {
+	long unsigned int pfn;
+	long unsigned int nr_pages;
+	long unsigned int pgoff;
+	struct vm_area_struct *vma;
+	long unsigned int address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	long unsigned int free_pfn;
+	long unsigned int migrate_pfn;
+	long unsigned int fast_start_pfn;
+	struct zone *zone;
+	long unsigned int total_migrate_scanned;
+	long unsigned int total_free_scanned;
+	short unsigned int fast_search_fail;
+	short int search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool rescan;
+	bool alloc_contig;
+};
+
+struct delayed_uprobe {
+	struct list_head list;
+	struct uprobe *uprobe;
+	struct mm_struct *mm;
+};
+
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
+struct map_info {
+	struct map_info *next;
+	struct mm_struct *mm;
+	long unsigned int vaddr;
+};
+
+enum rseq_cpu_id_state {
+	RSEQ_CPU_ID_UNINITIALIZED = 4294967295,
+	RSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294,
+};
+
+enum rseq_flags {
+	RSEQ_FLAG_UNREGISTER = 1,
+};
+
+enum rseq_cs_flags {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
+};
+
+struct rseq_cs {
+	__u32 version;
+	__u32 flags;
+	__u64 start_ip;
+	__u64 post_commit_offset;
+	__u64 abort_ip;
+};
+
+struct trace_event_raw_rseq_update {
+	struct trace_entry ent;
+	s32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rseq_ip_fixup {
+	struct trace_entry ent;
+	long unsigned int regs_ip;
+	long unsigned int start_ip;
+	long unsigned int post_commit_offset;
+	long unsigned int abort_ip;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rseq_update {};
+
+struct trace_event_data_offsets_rseq_ip_fixup {};
+
+typedef void (*btf_trace_rseq_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_MAP_LAST_BIT = 4,
+};
+
+struct pkcs7_message;
+
+enum perf_event_task_context {
+	perf_invalid_context = 4294967295,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE = 262144,
+	PERF_SAMPLE_BRANCH_MAX = 524288,
+};
+
+enum perf_event_read_format {
+	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
+	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
+	PERF_FORMAT_ID = 4,
+	PERF_FORMAT_GROUP = 8,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
+};
+
+enum perf_event_ioc_flags {
+	PERF_IOC_FLAG_GROUP = 1,
+};
+
+struct perf_ns_link_info {
+	__u64 dev;
+	__u64 ino;
+};
+
+enum {
+	NET_NS_INDEX = 0,
+	UTS_NS_INDEX = 1,
+	IPC_NS_INDEX = 2,
+	PID_NS_INDEX = 3,
+	USER_NS_INDEX = 4,
+	MNT_NS_INDEX = 5,
+	CGROUP_NS_INDEX = 6,
+	NR_NAMESPACES = 7,
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	long unsigned int offset;
+	long unsigned int size;
+	enum perf_addr_filter_action_t action;
+};
+
+struct swevent_hlist {
+	struct hlist_head heads[256];
+	struct callback_head callback_head;
+};
+
+struct pmu_event_list {
+	raw_spinlock_t lock;
+	struct list_head list;
+};
+
+struct perf_cpu_context {
+	struct perf_event_context ctx;
+	struct perf_event_context *task_ctx;
+	int online;
+	struct perf_cgroup *cgrp;
+	int heap_size;
+	struct perf_event **heap;
+	struct perf_event *heap_default[2];
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+struct min_heap {
+	void *data;
+	int nr;
+	int size;
+};
+
+struct min_heap_callbacks {
+	int elem_size;
+	bool (*less)(const void *, const void *);
+	void (*swp)(void *, void *);
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+	struct task_struct *p;
+	remote_function_f func;
+	void *info;
+	int ret;
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct event_function_struct {
+	struct perf_event *event;
+	event_f func;
+	void *data;
+};
+
+enum event_type_t {
+	EVENT_FLEXIBLE = 1,
+	EVENT_PINNED = 2,
+	EVENT_TIME = 4,
+	EVENT_CPU = 8,
+	EVENT_ALL = 3,
+};
+
+struct __group_key {
+	int cpu;
+	struct pmu *pmu;
+	struct cgroup *cgroup;
+};
+
+struct stop_event_data {
+	struct perf_event *event;
+	unsigned int restart;
+};
+
+struct perf_read_data {
+	struct perf_event *event;
+	bool group;
+	int ret;
+};
+
+struct perf_read_event {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct remote_output {
+	struct perf_buffer *rb;
+	int err;
+};
+
+struct perf_task_event {
+	struct task_struct *task;
+	struct perf_event_context *task_ctx;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 ppid;
+		u32 tid;
+		u32 ptid;
+		u64 time;
+	} event_id;
+};
+
+struct perf_comm_event {
+	struct task_struct *task;
+	char *comm;
+	int comm_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+	} event_id;
+};
+
+struct perf_namespaces_event {
+	struct task_struct *task;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 nr_namespaces;
+		struct perf_ns_link_info link_info[7];
+	} event_id;
+};
+
+struct perf_cgroup_event {
+	char *path;
+	int path_size;
+	struct {
+		struct perf_event_header header;
+		u64 id;
+		char path[0];
+	} event_id;
+};
+
+struct perf_mmap_event {
+	struct vm_area_struct *vma;
+	const char *file_name;
+	int file_size;
+	int maj;
+	int min;
+	u64 ino;
+	u64 ino_generation;
+	u32 prot;
+	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 start;
+		u64 len;
+		u64 pgoff;
+	} event_id;
+};
+
+struct perf_switch_event {
+	struct task_struct *task;
+	struct task_struct *next_prev;
+	struct {
+		struct perf_event_header header;
+		u32 next_prev_pid;
+		u32 next_prev_tid;
+	} event_id;
+};
+
+struct perf_ksymbol_event {
+	const char *name;
+	int name_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+		u32 len;
+		u16 ksym_type;
+		u16 flags;
+	} event_id;
+};
+
+struct perf_bpf_event {
+	struct bpf_prog *prog;
+	struct {
+		struct perf_event_header header;
+		u16 type;
+		u16 flags;
+		u32 id;
+		u8 tag[8];
+	} event_id;
+};
+
+struct perf_text_poke_event {
+	const void *old_bytes;
+	const void *new_bytes;
+	size_t pad;
+	u16 old_len;
+	u16 new_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+	} event_id;
+};
+
+struct swevent_htable {
+	struct swevent_hlist *swevent_hlist;
+	struct mutex hlist_mutex;
+	int hlist_refcount;
+	int recursion[4];
+};
+
+enum perf_probe_config {
+	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
+	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
+	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
+};
+
+enum {
+	IF_ACT_NONE = 4294967295,
+	IF_ACT_FILTER = 0,
+	IF_ACT_START = 1,
+	IF_ACT_STOP = 2,
+	IF_SRC_FILE = 3,
+	IF_SRC_KERNEL = 4,
+	IF_SRC_FILEADDR = 5,
+	IF_SRC_KERNELADDR = 6,
+};
+
+enum {
+	IF_STATE_ACTION = 0,
+	IF_STATE_SOURCE = 1,
+	IF_STATE_END = 2,
+};
+
+struct perf_aux_event {
+	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+struct perf_aux_event___3 {
+	struct perf_event_header header;
+	u64 offset;
+	u64 size;
+	u64 flags;
+};
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu *cpu_slab;
+	slab_flags_t flags;
+	long unsigned int min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	struct kmem_cache_node *node[1];
+};
+
+struct slab {
+	long unsigned int __page_flags;
+	struct kmem_cache *slab_cache;
+	union {
+		struct {
+			union {
+				struct list_head slab_list;
+				struct {
+					struct slab *next;
+					int slabs;
+				};
+			};
+			void *freelist;
+			union {
+				long unsigned int counters;
+				struct {
+					unsigned int inuse: 16;
+					unsigned int objects: 15;
+					unsigned int frozen: 1;
+				};
+			};
+		};
+		struct callback_head callback_head;
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	long unsigned int memcg_data;
+};
+
+struct kmem_cache_cpu {
+	void **freelist;
+	long unsigned int tid;
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	long unsigned int nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+typedef struct {
+	long unsigned int val;
+} swp_entry_t;
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	long unsigned int xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
+struct vm_event_state {
+	long unsigned int event[98];
+};
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_PIPE = 3,
+	ITER_XARRAY = 4,
+	ITER_DISCARD = 5,
+	ITER_UBUF = 6,
+};
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+};
+
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
+};
+
+struct pagevec {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct page *pages[15];
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	long unsigned int i_ino;
+	long unsigned int index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+typedef unsigned int zap_flags_t;
+
+struct encoded_page;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	long unsigned int totalpages;
+	struct task_struct *chosen;
+	long int chosen_points;
+	enum oom_constraint constraint;
+};
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct encoded_page *encoded_pages[0];
+};
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int delayed_rmap: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short int oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	long unsigned int reclaimable;
+	long unsigned int available;
+	long unsigned int min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_mark_victim {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, int);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+struct wb_lock_cookie {
+	bool locked;
+	long unsigned int flags;
+};
+
+typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct dirty_throttle_control {
+	struct wb_domain *dom;
+	struct dirty_throttle_control *gdtc;
+	struct bdi_writeback *wb;
+	struct fprop_local_percpu *wb_completions;
+	long unsigned int avail;
+	long unsigned int dirty;
+	long unsigned int thresh;
+	long unsigned int bg_thresh;
+	long unsigned int wb_dirty;
+	long unsigned int wb_thresh;
+	long unsigned int wb_bg_thresh;
+	long unsigned int pos_ratio;
+};
+
+typedef union {} release_pages_arg;
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	enum lru_list lru;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+enum lruvec_flags {
+	LRUVEC_CONGESTED = 0,
+};
+
+typedef unsigned int isolate_mode_t;
+
+enum pgdat_flags {
+	PGDAT_DIRTY = 0,
+	PGDAT_WRITEBACK = 1,
+	PGDAT_RECLAIM_LOCKED = 2,
+};
+
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+struct reclaim_stat {
+	unsigned int nr_dirty;
+	unsigned int nr_unqueued_dirty;
+	unsigned int nr_congested;
+	unsigned int nr_writeback;
+	unsigned int nr_immediate;
+	unsigned int nr_pageout;
+	unsigned int nr_activate[2];
+	unsigned int nr_ref_keep;
+	unsigned int nr_unmap_fail;
+	unsigned int nr_lazyfree_fail;
+};
+
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_IGNORE_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+typedef struct page *new_page_t(struct page *, long unsigned int);
+
+typedef void free_page_t(struct page *, long unsigned int);
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_wake {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_wakeup_kswapd {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
+	struct trace_entry ent;
+	long unsigned int nr_reclaimed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_start {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	void *shrink;
+	int nid;
+	long int nr_objects_to_shrink;
+	long unsigned int gfp_flags;
+	long unsigned int cache_items;
+	long long unsigned int delta;
+	long unsigned int total_scan;
+	int priority;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_end {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	int nid;
+	void *shrink;
+	long int unused_scan;
+	long int new_scan;
+	int retval;
+	long int total_scan;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_isolate {
+	struct trace_entry ent;
+	int highest_zoneidx;
+	int order;
+	long unsigned int nr_requested;
+	long unsigned int nr_scanned;
+	long unsigned int nr_skipped;
+	long unsigned int nr_taken;
+	unsigned int isolate_mode;
+	int lru;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_write_folio {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int nr_congested;
+	long unsigned int nr_immediate;
+	unsigned int nr_activate0;
+	unsigned int nr_activate1;
+	long unsigned int nr_ref_keep;
+	long unsigned int nr_unmap_fail;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_active {
+	struct trace_entry ent;
+	int nid;
+	long unsigned int nr_taken;
+	long unsigned int nr_active;
+	long unsigned int nr_deactivated;
+	long unsigned int nr_referenced;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_node_reclaim_begin {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
+
+struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
+
+struct trace_event_data_offsets_mm_shrink_slab_start {};
+
+struct trace_event_data_offsets_mm_shrink_slab_end {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
+
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
+
+struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
+
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
+typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
+
+typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
+
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
+
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
+struct scan_control {
+	long unsigned int nr_to_reclaim;
+	nodemask_t *nodemask;
+	struct mem_cgroup *target_mem_cgroup;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	unsigned int may_deactivate: 2;
+	unsigned int force_deactivate: 1;
+	unsigned int skipped_deactivate: 1;
+	unsigned int may_writepage: 1;
+	unsigned int may_unmap: 1;
+	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
+	unsigned int memcg_low_reclaim: 1;
+	unsigned int memcg_low_skipped: 1;
+	unsigned int hibernation_mode: 1;
+	unsigned int compaction_ready: 1;
+	unsigned int cache_trim_mode: 1;
+	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
+	s8 order;
+	s8 priority;
+	s8 reclaim_idx;
+	gfp_t gfp_mask;
+	long unsigned int nr_scanned;
+	long unsigned int nr_reclaimed;
+	struct {
+		unsigned int dirty;
+		unsigned int unqueued_dirty;
+		unsigned int congested;
+		unsigned int writeback;
+		unsigned int immediate;
+		unsigned int file_taken;
+		unsigned int taken;
+	} nr;
+	struct reclaim_state reclaim_state;
+};
+
+typedef enum {
+	PAGE_KEEP = 0,
+	PAGE_ACTIVATE = 1,
+	PAGE_SUCCESS = 2,
+	PAGE_CLEAN = 3,
+} pageout_t;
+
+enum folio_references {
+	FOLIOREF_RECLAIM = 0,
+	FOLIOREF_RECLAIM_CLEAN = 1,
+	FOLIOREF_KEEP = 2,
+	FOLIOREF_ACTIVATE = 3,
+};
+
+enum scan_balance {
+	SCAN_EQUAL = 0,
+	SCAN_FRACT = 1,
+	SCAN_ANON = 2,
+	SCAN_FILE = 3,
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+struct contig_page_info {
+	long unsigned int free_pages;
+	long unsigned int free_blocks_total;
+	long unsigned int free_blocks_suitable;
+};
+
+struct radix_tree_iter {
+	long unsigned int index;
+	long unsigned int next_index;
+	long unsigned int tags;
+	struct xa_node *node;
+};
+
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
+};
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct kstatfs {
+	long int f_type;
+	long int f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long int f_namelen;
+	long int f_frsize;
+	long int f_flags;
+	long int f_spare[4];
+};
+
+struct xattr;
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+typedef long unsigned int pte_marker;
+
+struct shared_policy {};
+
+struct simple_xattrs {
+	struct rb_root rb_root;
+	rwlock_t lock;
+};
+
+struct simple_xattr {
+	struct rb_node rb_node;
+	char *name;
+	size_t size;
+	char value[0];
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		__u32 raw[0];
+	};
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	long unsigned int flags;
+	long unsigned int alloced;
+	long unsigned int swapped;
+	long unsigned int fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct inode vfs_inode;
+};
+
+struct shmem_sb_info {
+	long unsigned int max_blocks;
+	struct percpu_counter used_blocks;
+	long unsigned int max_inodes;
+	long unsigned int free_inodes;
+	raw_spinlock_t stat_lock;
+	umode_t mode;
+	unsigned char huge;
+	kuid_t uid;
+	kgid_t gid;
+	bool full_inums;
+	ino_t next_ino;
+	ino_t *ino_batch;
+	struct mempolicy *mpol;
+	spinlock_t shrinklist_lock;
+	struct list_head shrinklist;
+	long unsigned int shrinklist_len;
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+struct shmem_falloc {
+	wait_queue_head_t *waitq;
+	long unsigned int start;
+	long unsigned int next;
+	long unsigned int nr_falloced;
+	long unsigned int nr_unswapped;
+};
+
+struct shmem_options {
+	long long unsigned int blocks;
+	long long unsigned int inodes;
+	struct mempolicy *mpol;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	bool full_inums;
+	int huge;
+	int seen;
+};
+
+enum shmem_param {
+	Opt_gid = 0,
+	Opt_huge = 1,
+	Opt_mode = 2,
+	Opt_mpol = 3,
+	Opt_nr_blocks = 4,
+	Opt_nr_inodes = 5,
+	Opt_size = 6,
+	Opt_uid = 7,
+	Opt_inode32 = 8,
+	Opt_inode64 = 9,
+};
+
+struct pcpu_group_info {
+	int nr_units;
+	long unsigned int base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 41,
+	MEMCG_SOCK = 42,
+	MEMCG_PERCPU_B = 43,
+	MEMCG_VMALLOC = 44,
+	MEMCG_KMEM = 45,
+	MEMCG_ZSWAP_B = 46,
+	MEMCG_ZSWAPPED = 47,
+	MEMCG_NR_STAT = 48,
+};
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void *ptr;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, long unsigned int, bool, bool, size_t, size_t, void *, int, void *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	int nr_alloc;
+	size_t max_alloc_size;
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	void *base_addr;
+	long unsigned int *alloc_map;
+	long unsigned int *bound_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	long unsigned int populated[0];
+};
+
+struct percpu_stats {
+	u64 nr_alloc;
+	u64 nr_dealloc;
+	u64 nr_cur_alloc;
+	u64 nr_max_alloc;
+	u32 nr_chunks;
+	u32 nr_max_chunks;
+	size_t min_alloc_size;
+	size_t max_alloc_size;
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	long unsigned int rb_subtree_last;
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+enum pageblock_bits {
+	PB_migrate = 0,
+	PB_migrate_end = 2,
+	PB_migrate_skip = 3,
+	NR_PAGEBLOCK_BITS = 4,
+};
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int nr_scanned;
+	long unsigned int nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	long unsigned int nr_migrated;
+	long unsigned int nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	long unsigned int zone_start;
+	long unsigned int migrate_pfn;
+	long unsigned int free_pfn;
+	long unsigned int zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	long unsigned int gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, long unsigned int, long unsigned int, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, long unsigned int, long unsigned int, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct kmalloc_info_struct {
+	const char *name[3];
+	unsigned int size;
+};
+
+struct slabinfo {
+	long unsigned int active_objs;
+	long unsigned int num_objs;
+	long unsigned int active_slabs;
+	long unsigned int num_slabs;
+	long unsigned int shared_avail;
+	unsigned int limit;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	long unsigned int kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+struct trace_event_raw_kmem_cache_alloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmalloc {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
+	int node;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	long unsigned int gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long int size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_cache_alloc {};
+
+struct trace_event_data_offsets_kmalloc {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, struct kmem_cache *, gfp_t, int);
+
+typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const struct kmem_cache *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int);
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char *buf;
+	local_t buf_idx;
+};
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+struct mlock_pvec {
+	local_lock_t lock;
+	struct pagevec vec;
+};
+
+struct vm_unmapped_area_info {
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+};
+
+struct hstate;
+
+struct hugepage_subpool {
+	spinlock_t lock;
+	long int count;
+	long int max_hpages;
+	long int used_hpages;
+	struct hstate *hstate;
+	long int min_hpages;
+	long int rsv_hpages;
+};
+
+struct hstate {
+	struct mutex resize_lock;
+	int next_nid_to_alloc;
+	int next_nid_to_free;
+	unsigned int order;
+	unsigned int demote_order;
+	long unsigned int mask;
+	long unsigned int max_huge_pages;
+	long unsigned int nr_huge_pages;
+	long unsigned int free_huge_pages;
+	long unsigned int resv_huge_pages;
+	long unsigned int surplus_huge_pages;
+	long unsigned int nr_overcommit_huge_pages;
+	struct list_head hugepage_activelist;
+	struct list_head hugepage_freelists[1];
+	unsigned int max_huge_pages_node[1];
+	unsigned int nr_huge_pages_node[1];
+	unsigned int free_huge_pages_node[1];
+	unsigned int surplus_huge_pages_node[1];
+	char name[32];
+};
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct hugetlbfs_sb_info {
+	long int max_inodes;
+	long int free_inodes;
+	spinlock_t stat_lock;
+	struct hstate *hstate;
+	struct hugepage_subpool *spool;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int total_vm;
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_mas_szero {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	long unsigned int start;
+	long unsigned int end;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_store {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	struct vm_area_struct *vma;
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	char __data[0];
+};
+
+struct trace_event_raw_exit_mmap {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	struct maple_tree *mt;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+struct trace_event_data_offsets_vma_mas_szero {};
+
+struct trace_event_data_offsets_vma_store {};
+
+struct trace_event_data_offsets_exit_mmap {};
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
+
+typedef void (*btf_trace_vma_mas_szero)(void *, struct maple_tree *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_vma_store)(void *, struct maple_tree *, struct vm_area_struct *);
+
+typedef void (*btf_trace_exit_mmap)(void *, struct mm_struct *);
+
+typedef struct {
+	u64 val;
+} pfn_t;
+
+typedef unsigned int pgtbl_mod_mask;
+
+typedef int rmap_t;
+
+struct copy_subpage_arg {
+	struct page *dst;
+	struct page *src;
+	struct vm_area_struct *vma;
+};
+
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
+};
+
+typedef struct {
+	long unsigned int pd;
+} hugepd_t;
+
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
+};
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+enum hugetlb_page_flags {
+	HPG_restore_reserve = 0,
+	HPG_migratable = 1,
+	HPG_temporary = 2,
+	HPG_freed = 3,
+	HPG_vmemmap_optimized = 4,
+	HPG_raw_hwp_unreliable = 5,
+	__NR_HPAGEFLAGS = 6,
+};
+
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	long unsigned int pages;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	long unsigned int succeeded;
+	long unsigned int failed;
+	long unsigned int thp_succeeded;
+	long unsigned int thp_failed;
+	long unsigned int thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+struct folio_referenced_arg {
+	int mapcount;
+	int referenced;
+	long unsigned int vm_flags;
+	struct mem_cgroup *memcg;
+};
+
+struct vmap_area {
+	long unsigned int va_start;
+	long unsigned int va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		long unsigned int subtree_max_size;
+		struct vm_struct *vm;
+	};
+};
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+struct trace_event_raw_alloc_vmap_area {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int size;
+	long unsigned int align;
+	long unsigned int vstart;
+	long unsigned int vend;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_raw_purge_vmap_area_lazy {
+	struct trace_entry ent;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int npurged;
+	char __data[0];
+};
+
+struct trace_event_raw_free_vmap_area_noflush {
+	struct trace_entry ent;
+	long unsigned int va_start;
+	long unsigned int nr_lazy;
+	long unsigned int nr_lazy_max;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alloc_vmap_area {};
+
+struct trace_event_data_offsets_purge_vmap_area_lazy {};
+
+struct trace_event_data_offsets_free_vmap_area_noflush {};
+
+typedef void (*btf_trace_alloc_vmap_area)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_purge_vmap_area_lazy)(void *, long unsigned int, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_free_vmap_area_noflush)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	long unsigned int free;
+	long unsigned int dirty;
+	long unsigned int dirty_min;
+	long unsigned int dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+};
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct page_frag_cache {
+	void *va;
+	__u16 offset;
+	__u16 size;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+typedef void compound_page_dtor(struct page *);
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+typedef int fpi_t;
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+struct vma_swap_readahead {
+	short unsigned int win;
+	short unsigned int offset;
+	short unsigned int nr_pte;
+	pte_t *ptes;
+};
+
+enum {
+	BIO_NO_PAGE_REF = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_QUIET = 3,
+	BIO_CHAIN = 4,
+	BIO_REFFED = 5,
+	BIO_BPS_THROTTLED = 6,
+	BIO_TRACE_COMPLETION = 7,
+	BIO_CGROUP_ACCT = 8,
+	BIO_QOS_THROTTLED = 9,
+	BIO_QOS_MERGED = 10,
+	BIO_REMAPPED = 11,
+	BIO_ZONE_WRITE_LOCKED = 12,
+	BIO_FLAG_LAST = 13,
+};
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+struct frontswap_ops {
+	void (*init)(unsigned int);
+	int (*store)(unsigned int, long unsigned int, struct page *);
+	int (*load)(unsigned int, long unsigned int, struct page *);
+	void (*invalidate_page)(unsigned int, long unsigned int);
+	void (*invalidate_area)(unsigned int);
+};
+
+struct crypto_async_request;
+
+typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+struct zpool;
+
+struct zpool_ops {
+	int (*evict)(struct zpool *, long unsigned int);
+};
+
+enum zpool_mapmode {
+	ZPOOL_MM_RW = 0,
+	ZPOOL_MM_RO = 1,
+	ZPOOL_MM_WO = 2,
+	ZPOOL_MM_DEFAULT = 0,
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct crypto_acomp_ctx {
+	struct crypto_acomp *acomp;
+	struct acomp_req *req;
+	struct crypto_wait wait;
+	u8 *dstmem;
+	struct mutex *mutex;
+};
+
+struct zswap_pool {
+	struct zpool *zpool;
+	struct crypto_acomp_ctx *acomp_ctx;
+	struct kref kref;
+	struct list_head list;
+	struct work_struct release_work;
+	struct work_struct shrink_work;
+	struct hlist_node node;
+	char tfm_name[128];
+};
+
+struct zswap_entry {
+	struct rb_node rbnode;
+	long unsigned int offset;
+	int refcount;
+	unsigned int length;
+	struct zswap_pool *pool;
+	union {
+		long unsigned int handle;
+		long unsigned int value;
+	};
+	struct obj_cgroup *objcg;
+};
+
+struct zswap_header {
+	swp_entry_t swpentry;
+};
+
+struct zswap_tree {
+	struct rb_root rbroot;
+	spinlock_t lock;
+};
+
+enum zswap_get_swap_ret {
+	ZSWAP_SWAPCACHE_NEW = 0,
+	ZSWAP_SWAPCACHE_EXIST = 1,
+	ZSWAP_SWAPCACHE_FAIL = 2,
+};
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	size_t size;
+	struct device *dev;
+	size_t allocation;
+	size_t boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+	unsigned int in_use;
+	unsigned int offset;
+};
+
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+union swap_header {
+	struct {
+		char reserved[4086];
+		char magic[10];
+	} magic;
+	struct {
+		char bootbits[1024];
+		__u32 version;
+		__u32 last_page;
+		__u32 nr_badpages;
+		unsigned char sws_uuid[16];
+		unsigned char sws_volume[16];
+		__u32 padding[117];
+		__u32 badpages[1];
+	} info;
+};
+
+struct swap_extent {
+	struct rb_node rb_node;
+	long unsigned int start_page;
+	long unsigned int nr_pages;
+	sector_t start_block;
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	long unsigned int invalidate_seq;
+	long unsigned int active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct mmu_interval_notifier;
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
+};
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	long unsigned int invalidate_seq;
+};
+
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
+};
+
+enum mcopy_atomic_mode {
+	MCOPY_ATOMIC_NORMAL = 0,
+	MCOPY_ATOMIC_ZEROPAGE = 1,
+	MCOPY_ATOMIC_CONTINUE = 2,
+};
+
+struct resv_map {
+	struct kref refs;
+	spinlock_t lock;
+	struct list_head regions;
+	long int adds_in_progress;
+	struct list_head region_cache;
+	long int region_cache_count;
+};
+
+struct file_region {
+	struct list_head link;
+	long int from;
+	long int to;
+};
+
+struct hugetlb_vma_lock {
+	struct kref refs;
+	struct rw_semaphore rw_sema;
+	struct vm_area_struct *vma;
+};
+
+struct huge_bootmem_page {
+	struct list_head list;
+	struct hstate *hstate;
+};
+
+enum vma_resv_mode {
+	VMA_NEEDS_RESV = 0,
+	VMA_COMMIT_RESV = 1,
+	VMA_END_RESV = 2,
+	VMA_ADD_RESV = 3,
+	VMA_DEL_RESV = 4,
+};
+
+struct hugetlb_cgroup;
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	long unsigned int b_state;
+	struct buffer_head *b_this_page;
+	struct page *b_page;
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+typedef u32 depot_stack_handle_t;
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+struct memory_notify {
+	long unsigned int start_pfn;
+	long unsigned int nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+struct partial_context {
+	struct slab **slab;
+	gfp_t flags;
+	unsigned int orig_size;
+};
+
+struct track {
+	long unsigned int addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	long unsigned int when;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+struct location {
+	depot_stack_handle_t handle;
+	long unsigned int count;
+	long unsigned int addr;
+	long unsigned int waste;
+	long long int sum_time;
+	long int min_time;
+	long int max_time;
+	long int min_pid;
+	long int max_pid;
+	long unsigned int cpus[1];
+	nodemask_t nodes;
+};
+
+struct loc_track {
+	long unsigned int max;
+	long unsigned int count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FREE = 2,
+	M_FULL_NOLIST = 3,
+};
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_NEVER_DAX = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+struct trace_event_raw_hugepage_set_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	long unsigned int clr;
+	long unsigned int set;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hugepage_set_pmd {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+struct swap_cgroup_ctrl {
+	struct page **map;
+	long unsigned int length;
+	spinlock_t lock;
+};
+
+struct swap_cgroup {
+	short unsigned int id;
+};
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+struct mm_slot {
+	struct hlist_node hash;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_PMD_NONE = 3,
+	SCAN_PMD_MAPPED = 4,
+	SCAN_EXCEED_NONE_PTE = 5,
+	SCAN_EXCEED_SWAP_PTE = 6,
+	SCAN_EXCEED_SHARED_PTE = 7,
+	SCAN_PTE_NON_PRESENT = 8,
+	SCAN_PTE_UFFD_WP = 9,
+	SCAN_PTE_MAPPED_HUGEPAGE = 10,
+	SCAN_PAGE_RO = 11,
+	SCAN_LACK_REFERENCED_PAGE = 12,
+	SCAN_PAGE_NULL = 13,
+	SCAN_SCAN_ABORT = 14,
+	SCAN_PAGE_COUNT = 15,
+	SCAN_PAGE_LRU = 16,
+	SCAN_PAGE_LOCK = 17,
+	SCAN_PAGE_ANON = 18,
+	SCAN_PAGE_COMPOUND = 19,
+	SCAN_ANY_PROCESS = 20,
+	SCAN_VMA_NULL = 21,
+	SCAN_VMA_CHECK = 22,
+	SCAN_ADDRESS_RANGE = 23,
+	SCAN_DEL_PAGE_LRU = 24,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 25,
+	SCAN_CGROUP_CHARGE_FAIL = 26,
+	SCAN_TRUNCATED = 27,
+	SCAN_PAGE_HAS_PRIVATE = 28,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_scan_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	u32 __data_loc_filename;
+	int present;
+	int swap;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_collapse_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int hpfn;
+	long unsigned int index;
+	long unsigned int addr;
+	bool is_shmem;
+	u32 __data_loc_filename;
+	int nr;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_collapse_file {
+	u32 filename;
+};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_scan_file)(void *, struct mm_struct *, struct page *, struct file *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_collapse_file)(void *, struct mm_struct *, struct page *, long unsigned int, bool, long unsigned int, struct file *, int, int);
+
+struct collapse_control {
+	bool is_khugepaged;
+	u32 node_load[1];
+	nodemask_t alloc_nmask;
+};
+
+struct khugepaged_mm_slot {
+	struct mm_slot slot;
+	int nr_pte_mapped_thp;
+	long unsigned int pte_mapped_thp[8];
+};
+
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct khugepaged_mm_slot *mm_slot;
+	long unsigned int address;
+};
+
+struct kmemleak_scan_area {
+	struct hlist_node node;
+	long unsigned int start;
+	size_t size;
+};
+
+struct kmemleak_object {
+	raw_spinlock_t lock;
+	unsigned int flags;
+	struct list_head object_list;
+	struct list_head gray_list;
+	struct rb_node rb_node;
+	struct callback_head rcu;
+	atomic_t use_count;
+	long unsigned int pointer;
+	size_t size;
+	long unsigned int excess_ref;
+	int min_count;
+	int count;
+	u32 checksum;
+	struct hlist_head area_list;
+	depot_stack_handle_t trace_handle;
+	long unsigned int jiffies;
+	pid_t pid;
+	char comm[16];
+};
+
+struct zpool_driver;
+
+struct zpool {
+	struct zpool_driver *driver;
+	void *pool;
+};
+
+struct zpool_driver {
+	char *type;
+	struct module *owner;
+	atomic_t refcount;
+	struct list_head list;
+	void * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);
+	void (*destroy)(void *);
+	bool malloc_support_movable;
+	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
+	void (*free)(void *, long unsigned int);
+	int (*shrink)(void *, unsigned int, unsigned int *);
+	bool sleep_mapped;
+	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
+	void (*unmap)(void *, long unsigned int);
+	u64 (*total_size)(void *);
+};
+
+enum zs_mapmode {
+	ZS_MM_RW = 0,
+	ZS_MM_RO = 1,
+	ZS_MM_WO = 2,
+};
+
+struct zs_pool_stats {
+	atomic_long_t pages_compacted;
+};
+
+enum fullness_group {
+	ZS_EMPTY = 0,
+	ZS_ALMOST_EMPTY = 1,
+	ZS_ALMOST_FULL = 2,
+	ZS_FULL = 3,
+	NR_ZS_FULLNESS = 4,
+};
+
+enum class_stat_type {
+	CLASS_EMPTY = 0,
+	CLASS_ALMOST_EMPTY = 1,
+	CLASS_ALMOST_FULL = 2,
+	CLASS_FULL = 3,
+	OBJ_ALLOCATED = 4,
+	OBJ_USED = 5,
+	NR_ZS_STAT_TYPE = 6,
+};
+
+struct zs_size_stat {
+	long unsigned int objs[6];
+};
+
+struct size_class {
+	struct list_head fullness_list[4];
+	int size;
+	int objs_per_zspage;
+	int pages_per_zspage;
+	unsigned int index;
+	struct zs_size_stat stats;
+};
+
+struct link_free {
+	union {
+		long unsigned int next;
+		long unsigned int handle;
+		long unsigned int deferred_handle;
+	};
+};
+
+struct zs_pool {
+	const char *name;
+	struct size_class *size_class[255];
+	struct kmem_cache *handle_cachep;
+	struct kmem_cache *zspage_cachep;
+	atomic_long_t pages_allocated;
+	struct zs_pool_stats stats;
+	struct shrinker shrinker;
+	struct list_head lru;
+	struct zpool *zpool;
+	const struct zpool_ops *zpool_ops;
+	struct dentry *stat_dentry;
+	struct work_struct free_work;
+	spinlock_t lock;
+};
+
+struct zspage {
+	struct {
+		unsigned int huge: 1;
+		unsigned int fullness: 2;
+		unsigned int class: 9;
+		unsigned int isolated: 3;
+		unsigned int magic: 8;
+	};
+	unsigned int inuse;
+	unsigned int freeobj;
+	struct page *first_page;
+	struct list_head list;
+	struct list_head lru;
+	bool under_reclaim;
+	struct zs_pool *pool;
+	rwlock_t lock;
+};
+
+struct mapping_area {
+	local_lock_t lock;
+	char *vm_buf;
+	char *vm_addr;
+	enum zs_mapmode vm_mm;
+};
+
+struct zs_compact_control {
+	struct page *s_page;
+	struct page *d_page;
+	int obj_idx;
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+struct memcg_vmstats {
+	long int state[48];
+	long unsigned int events[19];
+	long int state_pending[48];
+	long unsigned int events_pending[19];
+};
+
+struct memcg_vmstats_percpu {
+	long int state[48];
+	long unsigned int events[19];
+	long int state_prev[48];
+	long unsigned int events_prev[19];
+	long unsigned int nr_page_events;
+	long unsigned int targets[2];
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[1];
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	long unsigned int flags;
+	long unsigned int precharge;
+	long unsigned int moved_charge;
+	long unsigned int moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	long unsigned int flags;
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+union mc_target {
+	struct page *page;
+	swp_entry_t ent;
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	long unsigned int nr_memory;
+	long unsigned int pgpgout;
+	long unsigned int nr_kmem;
+	int nid;
+};
+
+struct trace_event_raw_test_pages_isolated {
+	struct trace_entry ent;
+	long unsigned int start_pfn;
+	long unsigned int end_pfn;
+	long unsigned int fin_pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_test_pages_isolated {};
+
+typedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);
+
+struct trace_event_raw_cma_alloc_class {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int pfn;
+	const struct page *page;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_release {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int pfn;
+	const struct page *page;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cma_alloc_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_release {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
+};
+
+typedef void (*btf_trace_cma_release)(void *, const char *, long unsigned int, const struct page *, long unsigned int);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, long unsigned int, const struct page *, long unsigned int, unsigned int);
+
+struct cma_kobject {
+	struct kobject kobj;
+	struct cma *cma;
+};
+
+struct cma_mem {
+	struct hlist_node node;
+	struct page *p;
+	long unsigned int n;
+};
+
+struct balloon_dev_info {
+	long unsigned int isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+enum hmm_pfn_flags {
+	HMM_PFN_VALID = 0,
+	HMM_PFN_WRITE = 0,
+	HMM_PFN_ERROR = 0,
+	HMM_PFN_ORDER_SHIFT = 56,
+	HMM_PFN_REQ_FAULT = 0,
+	HMM_PFN_REQ_WRITE = 0,
+	HMM_PFN_FLAGS = 0,
+};
+
+struct hmm_range {
+	struct mmu_interval_notifier *notifier;
+	long unsigned int notifier_seq;
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int *hmm_pfns;
+	long unsigned int default_flags;
+	long unsigned int pfn_flags_mask;
+	void *dev_private_owner;
+};
+
+struct hmm_vma_walk {
+	struct hmm_range *range;
+	long unsigned int last;
+};
+
+enum {
+	HMM_NEED_FAULT = 1,
+	HMM_NEED_WRITE_FAULT = 2,
+	HMM_NEED_ALL_BITS = 3,
+};
+
+struct hugetlbfs_inode_info {
+	struct shared_policy policy;
+	struct inode vfs_inode;
+	unsigned int seals;
+};
+
+typedef s32 compat_off_t;
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+typedef s64 compat_loff_t;
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct kobj_map;
+
+struct char_device_struct {
+	struct char_device_struct *next;
+	unsigned int major;
+	unsigned int baseminor;
+	int minorct;
+	char name[64];
+	struct cdev *cdev;
+};
+
+struct files_stat_struct {
+	long unsigned int nr_files;
+	long unsigned int nr_free_files;
+	long unsigned int max_files;
+};
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
+};
+
+typedef short unsigned int ushort;
+
+struct user_arg_ptr {
+	bool is_compat;
+	union {
+		const char * const *native;
+		const compat_uptr_t *compat;
+	} ptr;
+};
+
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
+};
+
+struct saved {
+	struct path link;
+	struct delayed_call done;
+	const char *name;
+	unsigned int seq;
+};
+
+struct nameidata {
+	struct path path;
+	struct qstr last;
+	struct path root;
+	struct inode *inode;
+	unsigned int flags;
+	unsigned int state;
+	unsigned int seq;
+	unsigned int next_seq;
+	unsigned int m_seq;
+	unsigned int r_seq;
+	int last_type;
+	unsigned int depth;
+	int total_link_count;
+	struct saved *stack;
+	struct saved internal[2];
+	struct filename *name;
+	struct nameidata *saved;
+	unsigned int root_seq;
+	int dfd;
+	vfsuid_t dir_vfsuid;
+	umode_t dir_mode;
+};
+
+struct renamedata {
+	struct user_namespace *old_mnt_userns;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct user_namespace *new_mnt_userns;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
+enum {
+	LAST_NORM = 0,
+	LAST_ROOT = 1,
+	LAST_DOT = 2,
+	LAST_DOTDOT = 3,
+};
+
+enum {
+	WALK_TRAILING = 1,
+	WALK_MORE = 2,
+	WALK_NOFOLLOW = 4,
+};
+
+struct file_clone_range {
+	__s64 src_fd;
+	__u64 src_offset;
+	__u64 src_length;
+	__u64 dest_offset;
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent *fi_extents_start;
+};
+
+struct space_resv {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0];
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short int l_type;
+	short int l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+};
+
+struct compat_flock {
+	short int l_type;
+	short int l_whence;
+	compat_off_t l_start;
+	compat_off_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct compat_flock64 {
+	short int l_type;
+	short int l_whence;
+	compat_loff_t l_start;
+	compat_loff_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	short unsigned int d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	struct linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct compat_old_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_offset;
+	short unsigned int d_namlen;
+	char d_name[1];
+};
+
+struct compat_readdir_callback {
+	struct dir_context ctx;
+	struct compat_old_linux_dirent *dirent;
+	int result;
+};
+
+struct compat_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_off;
+	short unsigned int d_reclen;
+	char d_name[1];
+};
+
+struct compat_getdents_callback {
+	struct dir_context ctx;
+	struct compat_linux_dirent *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+struct dentry_stat_t {
+	long int nr_dentry;
+	long int nr_unused;
+	long int age_limit;
+	long int want_pages;
+	long int nr_negative;
+	long int dummy;
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long int found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+typedef struct {
+	long unsigned int *in;
+	long unsigned int *out;
+	long unsigned int *ex;
+	long unsigned int *res_in;
+	long unsigned int *res_out;
+	long unsigned int *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t *p;
+	size_t size;
+};
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+struct compat_sel_arg_struct {
+	compat_ulong_t n;
+	compat_uptr_t inp;
+	compat_uptr_t outp;
+	compat_uptr_t exp;
+	compat_uptr_t tvp;
+};
+
+struct compat_sigset_argpack {
+	compat_uptr_t p;
+	compat_size_t size;
+};
+
+struct inodes_stat_t {
+	long int nr_inodes;
+	long int nr_unused;
+	long int dummy[5];
+};
+
+enum file_time_flags {
+	S_ATIME = 1,
+	S_MTIME = 2,
+	S_CTIME = 4,
+	S_VERSION = 8,
+};
+
+struct mnt_idmap {
+	struct user_namespace *owner;
+	refcount_t count;
+};
+
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
+	union {
+		const void *cvalue;
+		void *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+	struct mnt_idmap *mnt_idmap;
+};
+
+enum umount_tree_flags {
+	UMOUNT_SYNC = 1,
+	UMOUNT_PROPAGATE = 2,
+	UMOUNT_CONNECTED = 4,
+};
+
+struct simple_transaction_argresp {
+	ssize_t size;
+	char data[0];
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+struct simple_attr {
+	int (*get)(void *, u64 *);
+	int (*set)(void *, u64);
+	char get_buf[24];
+	char set_buf[24];
+	void *data;
+	const char *fmt;
+	struct mutex mutex;
+};
+
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
+	unsigned int flags;
+	union {
+		void *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
+};
+
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+struct wb_writeback_work {
+	long int nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_foreign_history {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t cgroup_ino;
+	unsigned int history;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_switch_wbs {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t old_cgroup_ino;
+	ino_t new_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_track_foreign_dirty {
+	struct trace_entry ent;
+	char name[32];
+	u64 bdi_id;
+	ino_t ino;
+	unsigned int memcg_id;
+	ino_t cgroup_ino;
+	ino_t page_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_flush_foreign {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	unsigned int frn_bdi_id;
+	unsigned int frn_memcg_id;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long int pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long int nr_to_write;
+	long int pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long int range_start;
+	long int range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int older;
+	long int age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	long unsigned int nr_dirty;
+	long unsigned int nr_writeback;
+	long unsigned int background_thresh;
+	long unsigned int dirty_thresh;
+	long unsigned int dirty_limit;
+	long unsigned int nr_dirtied;
+	long unsigned int nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int write_bw;
+	long unsigned int avg_write_bw;
+	long unsigned int dirty_rate;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	long unsigned int limit;
+	long unsigned int setpoint;
+	long unsigned int dirty;
+	long unsigned int bdi_setpoint;
+	long unsigned int bdi_dirty;
+	long unsigned int dirty_ratelimit;
+	long unsigned int task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	long unsigned int paused;
+	long int pause;
+	long unsigned int period;
+	long int think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	long unsigned int state;
+	long unsigned int dirtied_when;
+	long unsigned int writeback_index;
+	long int nr_to_write;
+	long unsigned int wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int state;
+	__u16 mode;
+	long unsigned int dirtied_when;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_inode_foreign_history {};
+
+struct trace_event_data_offsets_inode_switch_wbs {};
+
+struct trace_event_data_offsets_track_foreign_dirty {};
+
+struct trace_event_data_offsets_flush_foreign {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
+
+typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
+
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
+
+typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long int);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct inode_switch_wbs_context {
+	struct rcu_work work;
+	struct bdi_writeback *new_wb;
+	struct inode *inodes[0];
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+	__kernel_daddr_t f_tfree;
+	long unsigned int f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+typedef u32 compat_ino_t;
+
+typedef s32 compat_daddr_t;
+
+typedef __kernel_fsid_t compat_fsid_t;
+
+struct compat_statfs {
+	compat_int_t f_type;
+	compat_int_t f_bsize;
+	compat_int_t f_blocks;
+	compat_int_t f_bfree;
+	compat_int_t f_bavail;
+	compat_int_t f_files;
+	compat_int_t f_ffree;
+	compat_fsid_t f_fsid;
+	compat_int_t f_namelen;
+	compat_int_t f_frsize;
+	compat_int_t f_flags;
+	compat_int_t f_spare[4];
+};
+
+struct compat_ustat {
+	compat_daddr_t f_tfree;
+	compat_ino_t f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+struct statfs {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__kernel_long_t f_blocks;
+	__kernel_long_t f_bfree;
+	__kernel_long_t f_bavail;
+	__kernel_long_t f_files;
+	__kernel_long_t f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct statfs64 {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct compat_statfs64 {
+	__u32 f_type;
+	__u32 f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__u32 f_namelen;
+	__u32 f_frsize;
+	__u32 f_flags;
+	__u32 f_spare[4];
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct ns_get_path_task_args {
+	const struct proc_ns_operations *ns_ops;
+	struct task_struct *task;
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+enum fsconfig_command {
+	FSCONFIG_SET_FLAG = 0,
+	FSCONFIG_SET_STRING = 1,
+	FSCONFIG_SET_BINARY = 2,
+	FSCONFIG_SET_PATH = 3,
+	FSCONFIG_SET_PATH_EMPTY = 4,
+	FSCONFIG_SET_FD = 5,
+	FSCONFIG_CMD_CREATE = 6,
+	FSCONFIG_CMD_RECONFIGURE = 7,
+};
+
+struct iomap_ops;
+
+typedef u32 nlink_t;
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+struct mpage_readpage_args {
+	struct bio *bio;
+	struct folio *folio;
+	unsigned int nr_pages;
+	bool is_readahead;
+	sector_t last_block_in_bio;
+	struct buffer_head map_bh;
+	long unsigned int first_logical_block;
+	get_block_t *get_block;
+};
+
+struct mpage_data {
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	get_block_t *get_block;
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	dio_submit_t *submit_io;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	long unsigned int refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+	long: 64;
+};
+
+struct fsnotify_group;
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_event;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
+};
+
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
+};
+
+struct fanotify_group_private_data {
+	struct hlist_head *merge_hash;
+	struct list_head access_list;
+	wait_queue_head_t access_waitq;
+	int flags;
+	int f_flags;
+	struct ucounts *ucounts;
+	mempool_t error_events_pool;
+};
+
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+		struct fanotify_group_private_data fanotify_data;
+	};
+};
+
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
+};
+
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
+	unsigned int flags;
+};
+
+struct fsnotify_event {
+	struct list_head list;
+};
+
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = 4294967295,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+struct dax_device;
+
+struct iomap_page_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_page_ops *page_ops;
+	u64 validity_cookie;
+};
+
+struct iomap_page_ops {
+	int (*page_prepare)(struct inode *, loff_t, unsigned int);
+	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *);
+	bool (*iomap_valid)(struct inode *, const struct iomap *);
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+enum blktrace_act {
+	__BLK_TA_QUEUE = 1,
+	__BLK_TA_BACKMERGE = 2,
+	__BLK_TA_FRONTMERGE = 3,
+	__BLK_TA_GETRQ = 4,
+	__BLK_TA_SLEEPRQ = 5,
+	__BLK_TA_REQUEUE = 6,
+	__BLK_TA_ISSUE = 7,
+	__BLK_TA_COMPLETE = 8,
+	__BLK_TA_PLUG = 9,
+	__BLK_TA_UNPLUG_IO = 10,
+	__BLK_TA_UNPLUG_TIMER = 11,
+	__BLK_TA_INSERT = 12,
+	__BLK_TA_SPLIT = 13,
+	__BLK_TA_BOUNCE = 14,
+	__BLK_TA_REMAP = 15,
+	__BLK_TA_ABORT = 16,
+	__BLK_TA_DRV_DATA = 17,
+	__BLK_TA_CGROUP = 256,
+};
+
+struct decrypt_bh_ctx {
+	struct work_struct work;
+	struct buffer_head *bh;
+};
+
+struct bh_lru {
+	struct buffer_head *bhs[16];
+};
+
+struct bh_accounting {
+	int nr;
+	int ratelimit;
+};
+
+struct dnotify_struct {
+	struct dnotify_struct *dn_next;
+	__u32 dn_mask;
+	int dn_fd;
+	struct file *dn_filp;
+	fl_owner_t dn_owner;
+};
+
+struct dnotify_mark {
+	struct fsnotify_mark fsn_mark;
+	struct dnotify_struct *dn;
+};
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+enum {
+	FAN_EVENT_INIT = 0,
+	FAN_EVENT_REPORTED = 1,
+	FAN_EVENT_ANSWERED = 2,
+	FAN_EVENT_CANCELED = 3,
+};
+
+struct fanotify_fh {
+	u8 type;
+	u8 len;
+	u8 flags;
+	u8 pad;
+	unsigned char buf[0];
+};
+
+struct fanotify_info {
+	u8 dir_fh_totlen;
+	u8 dir2_fh_totlen;
+	u8 file_fh_totlen;
+	u8 name_len;
+	u8 name2_len;
+	u8 pad[3];
+	unsigned char buf[0];
+};
+
+enum fanotify_event_type {
+	FANOTIFY_EVENT_TYPE_FID = 0,
+	FANOTIFY_EVENT_TYPE_FID_NAME = 1,
+	FANOTIFY_EVENT_TYPE_PATH = 2,
+	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
+	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
+	FANOTIFY_EVENT_TYPE_FS_ERROR = 5,
+	__FANOTIFY_EVENT_TYPE_NUM = 6,
+};
+
+struct fanotify_event {
+	struct fsnotify_event fse;
+	struct hlist_node merge_list;
+	u32 mask;
+	struct {
+		unsigned int type: 3;
+		unsigned int hash: 29;
+	};
+	struct pid *pid;
+};
+
+struct fanotify_fid_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[12];
+	};
+};
+
+struct fanotify_name_event {
+	struct fanotify_event fae;
+	__kernel_fsid_t fsid;
+	struct fanotify_info info;
+};
+
+struct fanotify_error_event {
+	struct fanotify_event fae;
+	s32 error;
+	u32 err_count;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[128];
+	};
+};
+
+struct fanotify_path_event {
+	struct fanotify_event fae;
+	struct path path;
+};
+
+struct fanotify_perm_event {
+	struct fanotify_event fae;
+	struct path path;
+	short unsigned int response;
+	short unsigned int state;
+	int fd;
+};
+
+struct inotify_event {
+	__s32 wd;
+	__u32 mask;
+	__u32 cookie;
+	__u32 len;
+	char name[0];
+};
+
+struct fanotify_event_metadata {
+	__u32 event_len;
+	__u8 vers;
+	__u8 reserved;
+	__u16 metadata_len;
+	__u64 mask;
+	__s32 fd;
+	__s32 pid;
+};
+
+struct fanotify_event_info_header {
+	__u8 info_type;
+	__u8 pad;
+	__u16 len;
+};
+
+struct fanotify_event_info_fid {
+	struct fanotify_event_info_header hdr;
+	__kernel_fsid_t fsid;
+	unsigned char handle[0];
+};
+
+struct fanotify_event_info_pidfd {
+	struct fanotify_event_info_header hdr;
+	__s32 pidfd;
+};
+
+struct fanotify_event_info_error {
+	struct fanotify_event_info_header hdr;
+	__s32 error;
+	__u32 error_count;
+};
+
+struct fanotify_response {
+	__s32 fd;
+	__u32 response;
+};
+
+struct signalfd_siginfo {
+	__u32 ssi_signo;
+	__s32 ssi_errno;
+	__s32 ssi_code;
+	__u32 ssi_pid;
+	__u32 ssi_uid;
+	__s32 ssi_fd;
+	__u32 ssi_tid;
+	__u32 ssi_band;
+	__u32 ssi_overrun;
+	__u32 ssi_trapno;
+	__s32 ssi_status;
+	__s32 ssi_int;
+	__u64 ssi_ptr;
+	__u64 ssi_utime;
+	__u64 ssi_stime;
+	__u64 ssi_addr;
+	__u16 ssi_addr_lsb;
+	__u16 __pad2;
+	__s32 ssi_syscall;
+	__u64 ssi_call_addr;
+	__u32 ssi_arch;
+	__u8 __pad[28];
+};
+
+struct signalfd_ctx {
+	sigset_t sigmask;
+};
+
+struct wake_irq;
+
+struct wakeup_source {
+	const char *name;
+	int id;
+	struct list_head entry;
+	spinlock_t lock;
+	struct wake_irq *wakeirq;
+	struct timer_list timer;
+	long unsigned int timer_expires;
+	ktime_t total_time;
+	ktime_t max_time;
+	ktime_t last_time;
+	ktime_t start_prevent_time;
+	ktime_t prevent_sleep_time;
+	long unsigned int event_count;
+	long unsigned int active_count;
+	long unsigned int relax_count;
+	long unsigned int expire_count;
+	long unsigned int wakeup_count;
+	struct device *dev;
+	bool active: 1;
+	bool autosleep_enabled: 1;
+};
+
+struct epoll_filefd {
+	struct file *file;
+	int fd;
+} __attribute__((packed));
+
+struct epitem;
+
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
+};
+
+struct eventpoll;
+
+struct epitem {
+	union {
+		struct rb_node rbn;
+		struct callback_head rcu;
+	};
+	struct list_head rdllink;
+	struct epitem *next;
+	struct epoll_filefd ffd;
+	struct eppoll_entry *pwqlist;
+	struct eventpoll *ep;
+	struct hlist_node fllink;
+	struct wakeup_source *ws;
+	struct epoll_event event;
+};
+
+struct eventpoll {
+	struct mutex mtx;
+	wait_queue_head_t wq;
+	wait_queue_head_t poll_wait;
+	struct list_head rdllist;
+	rwlock_t lock;
+	struct rb_root_cached rbr;
+	struct epitem *ovflist;
+	struct wakeup_source *ws;
+	struct user_struct *user;
+	struct file *file;
+	u64 gen;
+	struct hlist_head refs;
+	unsigned int napi_id;
+};
+
+struct ep_pqueue {
+	poll_table pt;
+	struct epitem *epi;
+};
+
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	short unsigned int expired;
+	short unsigned int settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+struct userfaultfd_ctx {
+	wait_queue_head_t fault_pending_wqh;
+	wait_queue_head_t fault_wqh;
+	wait_queue_head_t fd_wqh;
+	wait_queue_head_t event_wqh;
+	seqcount_spinlock_t refile_seq;
+	refcount_t refcount;
+	unsigned int flags;
+	unsigned int features;
+	bool released;
+	atomic_t mmap_changing;
+	struct mm_struct *mm;
+};
+
+struct uffd_msg {
+	__u8 event;
+	__u8 reserved1;
+	__u16 reserved2;
+	__u32 reserved3;
+	union {
+		struct {
+			__u64 flags;
+			__u64 address;
+			union {
+				__u32 ptid;
+			} feat;
+		} pagefault;
+		struct {
+			__u32 ufd;
+		} fork;
+		struct {
+			__u64 from;
+			__u64 to;
+			__u64 len;
+		} remap;
+		struct {
+			__u64 start;
+			__u64 end;
+		} remove;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+			__u64 reserved3;
+		} reserved;
+	} arg;
+};
+
+struct uffdio_api {
+	__u64 api;
+	__u64 features;
+	__u64 ioctls;
+};
+
+struct uffdio_range {
+	__u64 start;
+	__u64 len;
+};
+
+struct uffdio_register {
+	struct uffdio_range range;
+	__u64 mode;
+	__u64 ioctls;
+};
+
+struct uffdio_copy {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 copy;
+};
+
+struct uffdio_zeropage {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 zeropage;
+};
+
+struct uffdio_writeprotect {
+	struct uffdio_range range;
+	__u64 mode;
+};
+
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+struct userfaultfd_fork_ctx {
+	struct userfaultfd_ctx *orig;
+	struct userfaultfd_ctx *new;
+	struct list_head list;
+};
+
+struct userfaultfd_unmap_ctx {
+	struct userfaultfd_ctx *ctx;
+	long unsigned int start;
+	long unsigned int end;
+	struct list_head list;
+};
+
+struct userfaultfd_wait_queue {
+	struct uffd_msg msg;
+	wait_queue_entry_t wq;
+	struct userfaultfd_ctx *ctx;
+	bool waken;
+};
+
+struct userfaultfd_wake_range {
+	long unsigned int start;
+	long unsigned int len;
+};
+
+struct eventfd_ctx {
+	struct kref kref;
+	wait_queue_head_t wqh;
+	__u64 count;
+	unsigned int flags;
+	int id;
+};
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx *table[0];
+};
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	long unsigned int user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	long unsigned int mmap_base;
+	long unsigned int mmap_size;
+	struct page **ring_pages;
+	long int nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+struct fsync_iocb {
+	struct file *file;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
+};
+
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
+};
+
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
+};
+
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
+};
+
+struct __aio_sigset {
+	const sigset_t *sigmask;
+	size_t sigsetsize;
+};
+
+struct __compat_aio_sigset {
+	compat_uptr_t sigmask;
+	compat_size_t sigsetsize;
+};
+
+struct flock64 {
+	short int l_type;
+	short int l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	long unsigned int i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	long unsigned int fl_break_time;
+	long unsigned int fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	long unsigned int i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	long unsigned int pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct arch_elf_state {};
+
+struct memelfnote {
+	const char *name;
+	int type;
+	unsigned int datasz;
+	void *data;
+};
+
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+enum {
+	VERBOSE_STATUS = 1,
+};
+
+enum {
+	Enabled = 0,
+	Magic = 1,
+};
+
+typedef struct {
+	struct list_head list;
+	long unsigned int flags;
+	int offset;
+	int size;
+	char *magic;
+	char *mask;
+	const char *interpreter;
+	char *name;
+	struct dentry *dentry;
+	struct file *interp_file;
+} Node;
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
+struct elf32_shdr {
+	Elf32_Word sh_name;
+	Elf32_Word sh_type;
+	Elf32_Word sh_flags;
+	Elf32_Addr sh_addr;
+	Elf32_Off sh_offset;
+	Elf32_Word sh_size;
+	Elf32_Word sh_link;
+	Elf32_Word sh_info;
+	Elf32_Word sh_addralign;
+	Elf32_Word sh_entsize;
+};
+
+typedef u32 __compat_uid_t;
+
+typedef u32 __compat_gid_t;
+
+typedef compat_ulong_t compat_elf_greg_t;
+
+typedef compat_elf_greg_t compat_elf_gregset_t[32];
+
+struct compat_elf_siginfo {
+	compat_int_t si_signo;
+	compat_int_t si_code;
+	compat_int_t si_errno;
+};
+
+struct compat_elf_prstatus_common {
+	struct compat_elf_siginfo pr_info;
+	short int pr_cursig;
+	compat_ulong_t pr_sigpend;
+	compat_ulong_t pr_sighold;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	struct old_timeval32 pr_utime;
+	struct old_timeval32 pr_stime;
+	struct old_timeval32 pr_cutime;
+	struct old_timeval32 pr_cstime;
+};
+
+struct compat_elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	compat_ulong_t pr_flag;
+	__compat_uid_t pr_uid;
+	__compat_gid_t pr_gid;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct compat_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	compat_elf_gregset_t pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct elf_thread_core_info___2 {
+	struct elf_thread_core_info___2 *next;
+	struct task_struct *task;
+	struct compat_elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct elf_note_info___2 {
+	struct elf_thread_core_info___2 *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	compat_siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+enum {
+	MBE_REFERENCED_B = 0,
+	MBE_REUSABLE_B = 1,
+};
+
+struct mb_cache_entry {
+	struct list_head e_list;
+	struct hlist_bl_node e_hash_list;
+	atomic_t e_refcnt;
+	u32 e_key;
+	long unsigned int e_flags;
+	u64 e_value;
+};
+
+struct mb_cache {
+	struct hlist_bl_head *c_hash;
+	int c_bucket_bits;
+	long unsigned int c_max_entries;
+	spinlock_t c_list_lock;
+	struct list_head c_list;
+	long unsigned int c_entry_count;
+	struct shrinker c_shrink;
+	struct work_struct c_shrink_work;
+};
+
+struct flat_hdr {
+	char magic[4];
+	__be32 rev;
+	__be32 entry;
+	__be32 data_start;
+	__be32 data_end;
+	__be32 bss_end;
+	__be32 stack_size;
+	__be32 reloc_start;
+	__be32 reloc_count;
+	__be32 flags;
+	__be32 build_date;
+	__u32 filler[5];
+};
+
+struct lib_info {
+	struct {
+		long unsigned int start_code;
+		long unsigned int start_data;
+		long unsigned int start_brk;
+		long unsigned int text_len;
+		long unsigned int entry;
+		long unsigned int build_date;
+		bool loaded;
+	} lib_list[1];
+};
+
+typedef unsigned char Byte;
+
+typedef long unsigned int uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef struct z_stream_s z_stream;
+
+typedef z_stream *z_streamp;
+
+struct xdr_buf {
+	struct kvec head[1];
+	struct kvec tail[1];
+	struct bio_vec *bvec;
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int flags;
+	unsigned int buflen;
+	unsigned int len;
+};
+
+struct xdr_array2_desc;
+
+typedef int (*xdr_xcode_elem_t)(struct xdr_array2_desc *, void *);
+
+struct xdr_array2_desc {
+	unsigned int elem_size;
+	unsigned int array_len;
+	unsigned int array_maxlen;
+	xdr_xcode_elem_t xcode;
+};
+
+struct rpc_rqst;
+
+struct xdr_stream {
+	__be32 *p;
+	struct xdr_buf *buf;
+	__be32 *end;
+	struct kvec *iov;
+	struct kvec scratch;
+	struct page **page_ptr;
+	unsigned int nwords;
+	struct rpc_rqst *rqst;
+};
+
+struct nfsacl_encode_desc {
+	struct xdr_array2_desc desc;
+	unsigned int count;
+	struct posix_acl *acl;
+	int typeflag;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct nfsacl_simple_acl {
+	struct posix_acl acl;
+	struct posix_acl_entry ace[4];
+};
+
+struct nfsacl_decode_desc {
+	struct xdr_array2_desc desc;
+	unsigned int count;
+	struct posix_acl *acl;
+};
+
+struct lock_manager {
+	struct list_head list;
+	bool block_opens;
+};
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		struct {
+			struct {			} __empty_ptr;
+			void *ptr[0];
+		};
+	};
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+struct rpc_timer {
+	struct list_head list;
+	long unsigned int expires;
+	struct delayed_work dwork;
+};
+
+struct rpc_wait_queue {
+	spinlock_t lock;
+	struct list_head tasks[4];
+	unsigned char maxpriority;
+	unsigned char priority;
+	unsigned char nr;
+	short unsigned int qlen;
+	struct rpc_timer timer_list;
+	const char *name;
+};
+
+struct nfs_seqid_counter {
+	ktime_t create_time;
+	int owner_id;
+	int flags;
+	u32 counter;
+	spinlock_t lock;
+	struct list_head list;
+	struct rpc_wait_queue wait;
+};
+
+struct nfs4_stateid_struct {
+	union {
+		char data[16];
+		struct {
+			__be32 seqid;
+			char other[12];
+		};
+	};
+	enum {
+		NFS4_INVALID_STATEID_TYPE = 0,
+		NFS4_SPECIAL_STATEID_TYPE = 1,
+		NFS4_OPEN_STATEID_TYPE = 2,
+		NFS4_LOCK_STATEID_TYPE = 3,
+		NFS4_DELEGATION_STATEID_TYPE = 4,
+		NFS4_LAYOUT_STATEID_TYPE = 5,
+		NFS4_PNFS_DS_STATEID_TYPE = 6,
+		NFS4_REVOKED_STATEID_TYPE = 7,
+	} type;
+};
+
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+struct nfs4_state;
+
+struct nfs4_lock_state {
+	struct list_head ls_locks;
+	struct nfs4_state *ls_state;
+	long unsigned int ls_flags;
+	struct nfs_seqid_counter ls_seqid;
+	nfs4_stateid ls_stateid;
+	refcount_t ls_count;
+	fl_owner_t ls_owner;
+};
+
+struct xdr_netobj {
+	unsigned int len;
+	u8 *data;
+};
+
+struct rpc_xprt;
+
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+	struct rpc_xprt *rq_xprt;
+	struct xdr_buf rq_snd_buf;
+	struct xdr_buf rq_rcv_buf;
+	struct rpc_task *rq_task;
+	struct rpc_cred *rq_cred;
+	__be32 rq_xid;
+	int rq_cong;
+	u32 rq_seqno;
+	int rq_enc_pages_num;
+	struct page **rq_enc_pages;
+	void (*rq_release_snd_buf)(struct rpc_rqst *);
+	union {
+		struct list_head rq_list;
+		struct rb_node rq_recv;
+	};
+	struct list_head rq_xmit;
+	struct list_head rq_xmit2;
+	void *rq_buffer;
+	size_t rq_callsize;
+	void *rq_rbuffer;
+	size_t rq_rcvsize;
+	size_t rq_xmit_bytes_sent;
+	size_t rq_reply_bytes_recvd;
+	struct xdr_buf rq_private_buf;
+	long unsigned int rq_majortimeo;
+	long unsigned int rq_minortimeo;
+	long unsigned int rq_timeout;
+	ktime_t rq_rtt;
+	unsigned int rq_retries;
+	unsigned int rq_connect_cookie;
+	atomic_t rq_pin;
+	u32 rq_bytes_sent;
+	ktime_t rq_xtime;
+	int rq_ntrans;
+	struct list_head rq_bc_list;
+	long unsigned int rq_bc_pa_state;
+	struct list_head rq_bc_pa_list;
+};
+
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+	const struct rpc_procinfo *rpc_proc;
+	void *rpc_argp;
+	void *rpc_resp;
+	const struct cred *rpc_cred;
+};
+
+struct rpc_procinfo {
+	u32 p_proc;
+	kxdreproc_t p_encode;
+	kxdrdproc_t p_decode;
+	unsigned int p_arglen;
+	unsigned int p_replen;
+	unsigned int p_timer;
+	u32 p_statidx;
+	const char *p_name;
+};
+
+struct rpc_wait {
+	struct list_head list;
+	struct list_head links;
+	struct list_head timer_list;
+};
+
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+	atomic_t tk_count;
+	int tk_status;
+	struct list_head tk_task;
+	void (*tk_callback)(struct rpc_task *);
+	void (*tk_action)(struct rpc_task *);
+	long unsigned int tk_timeout;
+	long unsigned int tk_runstate;
+	struct rpc_wait_queue *tk_waitqueue;
+	union {
+		struct work_struct tk_work;
+		struct rpc_wait tk_wait;
+	} u;
+	struct rpc_message tk_msg;
+	void *tk_calldata;
+	const struct rpc_call_ops *tk_ops;
+	struct rpc_clnt *tk_client;
+	struct rpc_xprt *tk_xprt;
+	struct rpc_cred *tk_op_cred;
+	struct rpc_rqst *tk_rqstp;
+	struct workqueue_struct *tk_workqueue;
+	ktime_t tk_start;
+	pid_t tk_owner;
+	int tk_rpc_status;
+	short unsigned int tk_flags;
+	short unsigned int tk_timeouts;
+	short unsigned int tk_pid;
+	unsigned char tk_priority: 2;
+	unsigned char tk_garb_retry: 2;
+	unsigned char tk_cred_retry: 2;
+	unsigned char tk_rebind_retry: 2;
+};
+
+struct rpc_call_ops {
+	void (*rpc_call_prepare)(struct rpc_task *, void *);
+	void (*rpc_call_done)(struct rpc_task *, void *);
+	void (*rpc_count_stats)(struct rpc_task *, void *);
+	void (*rpc_release)(void *);
+};
+
+struct rpc_pipe_dir_head {
+	struct list_head pdh_entries;
+	struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+	long unsigned int timeo;
+	long unsigned int srtt[5];
+	long unsigned int sdrtt[5];
+	int ntimeouts[5];
+};
+
+struct rpc_timeout {
+	long unsigned int to_initval;
+	long unsigned int to_maxval;
+	long unsigned int to_increment;
+	unsigned int to_retries;
+	unsigned char to_exponential;
+};
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+	struct rpc_xprt_switch *xpi_xpswitch;
+	struct rpc_xprt *xpi_cursor;
+	const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_iostats;
+
+struct rpc_program;
+
+struct rpc_sysfs_client;
+
+struct rpc_clnt {
+	refcount_t cl_count;
+	unsigned int cl_clid;
+	struct list_head cl_clients;
+	struct list_head cl_tasks;
+	atomic_t cl_pid;
+	spinlock_t cl_lock;
+	struct rpc_xprt *cl_xprt;
+	const struct rpc_procinfo *cl_procinfo;
+	u32 cl_prog;
+	u32 cl_vers;
+	u32 cl_maxproc;
+	struct rpc_auth *cl_auth;
+	struct rpc_stat *cl_stats;
+	struct rpc_iostats *cl_metrics;
+	unsigned int cl_softrtry: 1;
+	unsigned int cl_softerr: 1;
+	unsigned int cl_discrtry: 1;
+	unsigned int cl_noretranstimeo: 1;
+	unsigned int cl_autobind: 1;
+	unsigned int cl_chatty: 1;
+	struct rpc_rtt *cl_rtt;
+	const struct rpc_timeout *cl_timeout;
+	atomic_t cl_swapper;
+	int cl_nodelen;
+	char cl_nodename[65];
+	struct rpc_pipe_dir_head cl_pipedir_objects;
+	struct rpc_clnt *cl_parent;
+	struct rpc_rtt cl_rtt_default;
+	struct rpc_timeout cl_timeout_default;
+	const struct rpc_program *cl_program;
+	const char *cl_principal;
+	struct rpc_sysfs_client *cl_sysfs;
+	union {
+		struct rpc_xprt_iter cl_xpi;
+		struct work_struct cl_work;
+	};
+	const struct cred *cl_cred;
+	unsigned int cl_max_connect;
+};
+
+struct rpc_xprt_ops;
+
+struct svc_xprt;
+
+struct svc_serv;
+
+struct xprt_class;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt {
+	struct kref kref;
+	const struct rpc_xprt_ops *ops;
+	unsigned int id;
+	const struct rpc_timeout *timeout;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	int prot;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	size_t max_payload;
+	struct rpc_wait_queue binding;
+	struct rpc_wait_queue sending;
+	struct rpc_wait_queue pending;
+	struct rpc_wait_queue backlog;
+	struct list_head free;
+	unsigned int max_reqs;
+	unsigned int min_reqs;
+	unsigned int num_reqs;
+	long unsigned int state;
+	unsigned char resvport: 1;
+	unsigned char reuseport: 1;
+	atomic_t swapper;
+	unsigned int bind_index;
+	struct list_head xprt_switch;
+	long unsigned int bind_timeout;
+	long unsigned int reestablish_timeout;
+	unsigned int connect_cookie;
+	struct work_struct task_cleanup;
+	struct timer_list timer;
+	long unsigned int last_used;
+	long unsigned int idle_timeout;
+	long unsigned int connect_timeout;
+	long unsigned int max_reconnect_timeout;
+	atomic_long_t queuelen;
+	spinlock_t transport_lock;
+	spinlock_t reserve_lock;
+	spinlock_t queue_lock;
+	u32 xid;
+	struct rpc_task *snd_task;
+	struct list_head xmit_queue;
+	atomic_long_t xmit_queuelen;
+	struct svc_xprt *bc_xprt;
+	struct svc_serv *bc_serv;
+	unsigned int bc_alloc_max;
+	unsigned int bc_alloc_count;
+	atomic_t bc_slot_count;
+	spinlock_t bc_pa_lock;
+	struct list_head bc_pa_list;
+	struct rb_root recv_queue;
+	struct {
+		long unsigned int bind_count;
+		long unsigned int connect_count;
+		long unsigned int connect_start;
+		long unsigned int connect_time;
+		long unsigned int sends;
+		long unsigned int recvs;
+		long unsigned int bad_xids;
+		long unsigned int max_slots;
+		long long unsigned int req_u;
+		long long unsigned int bklog_u;
+		long long unsigned int sending_u;
+		long long unsigned int pending_u;
+	} stat;
+	struct net *xprt_net;
+	netns_tracker ns_tracker;
+	const char *servername;
+	const char *address_strings[6];
+	struct callback_head rcu;
+	const struct xprt_class *xprt_class;
+	struct rpc_sysfs_xprt *xprt_sysfs;
+	bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+	struct hlist_node cr_hash;
+	struct list_head cr_lru;
+	struct callback_head cr_rcu;
+	struct rpc_auth *cr_auth;
+	const struct rpc_credops *cr_ops;
+	long unsigned int cr_expire;
+	long unsigned int cr_flags;
+	refcount_t cr_count;
+	const struct cred *cr_cred;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+	const struct cred *cred;
+	const char *principal;
+};
+
+struct rpc_authops;
+
+struct rpc_cred_cache;
+
+struct rpc_auth {
+	unsigned int au_cslack;
+	unsigned int au_rslack;
+	unsigned int au_verfsize;
+	unsigned int au_ralign;
+	long unsigned int au_flags;
+	const struct rpc_authops *au_ops;
+	rpc_authflavor_t au_flavor;
+	refcount_t au_count;
+	struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+	const char *cr_name;
+	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+	void (*crdestroy)(struct rpc_cred *);
+	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+	int (*crrefresh)(struct rpc_task *);
+	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+	int (*crkey_timeout)(struct rpc_cred *);
+	char * (*crstringify_acceptor)(struct rpc_cred *);
+	bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+	struct module *owner;
+	rpc_authflavor_t au_flavor;
+	char *au_name;
+	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+	void (*destroy)(struct rpc_auth *);
+	int (*hash_cred)(struct auth_cred *, unsigned int);
+	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+};
+
+struct rpc_auth_create_args {
+	rpc_authflavor_t pseudoflavor;
+	const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+	unsigned int len;
+	u8 data[32];
+};
+
+struct rpcsec_gss_info {
+	struct rpcsec_gss_oid oid;
+	u32 qop;
+	u32 service;
+};
+
+struct rpc_xprt_ops {
+	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+	void (*rpcbind)(struct rpc_task *);
+	void (*set_port)(struct rpc_xprt *, short unsigned int);
+	void (*connect)(struct rpc_xprt *, struct rpc_task *);
+	int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+	short unsigned int (*get_srcport)(struct rpc_xprt *);
+	int (*buf_alloc)(struct rpc_task *);
+	void (*buf_free)(struct rpc_task *);
+	int (*prepare_request)(struct rpc_rqst *, struct xdr_buf *);
+	int (*send_request)(struct rpc_rqst *);
+	void (*wait_for_reply_request)(struct rpc_task *);
+	void (*timer)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_request)(struct rpc_task *);
+	void (*close)(struct rpc_xprt *);
+	void (*destroy)(struct rpc_xprt *);
+	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+	int (*enable_swap)(struct rpc_xprt *);
+	void (*disable_swap)(struct rpc_xprt *);
+	void (*inject_disconnect)(struct rpc_xprt *);
+	int (*bc_setup)(struct rpc_xprt *, unsigned int);
+	size_t (*bc_maxpayload)(struct rpc_xprt *);
+	unsigned int (*bc_num_slots)(struct rpc_xprt *);
+	void (*bc_free_rqst)(struct rpc_rqst *);
+	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_pool;
+
+struct svc_serv {
+	struct svc_program *sv_program;
+	struct svc_stat *sv_stats;
+	spinlock_t sv_lock;
+	struct kref sv_refcnt;
+	unsigned int sv_nrthreads;
+	unsigned int sv_maxconn;
+	unsigned int sv_max_payload;
+	unsigned int sv_max_mesg;
+	unsigned int sv_xdrsize;
+	struct list_head sv_permsocks;
+	struct list_head sv_tempsocks;
+	int sv_tmpcnt;
+	struct timer_list sv_temptimer;
+	char *sv_name;
+	unsigned int sv_nrpools;
+	struct svc_pool *sv_pools;
+	int (*sv_threadfn)(void *);
+	struct list_head sv_cb_list;
+	spinlock_t sv_cb_lock;
+	wait_queue_head_t sv_cb_waitq;
+	bool sv_bc_enabled;
+};
+
+struct xprt_create;
+
+struct xprt_class {
+	struct list_head list;
+	int ident;
+	struct rpc_xprt * (*setup)(struct xprt_create *);
+	struct module *owner;
+	char name[32];
+	const char *netid[0];
+};
+
+struct xprt_create {
+	int ident;
+	struct net *net;
+	struct sockaddr *srcaddr;
+	struct sockaddr *dstaddr;
+	size_t addrlen;
+	const char *servername;
+	struct svc_xprt *bc_xprt;
+	struct rpc_xprt_switch *bc_xps;
+	unsigned int flags;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+	spinlock_t xps_lock;
+	struct kref xps_kref;
+	unsigned int xps_id;
+	unsigned int xps_nxprts;
+	unsigned int xps_nactive;
+	unsigned int xps_nunique_destaddr_xprts;
+	atomic_long_t xps_queuelen;
+	struct list_head xps_xprt_list;
+	struct net *xps_net;
+	const struct rpc_xprt_iter_ops *xps_iter_ops;
+	struct rpc_sysfs_xprt_switch *xps_sysfs;
+	struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+	const struct rpc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int netreconn;
+	unsigned int rpccnt;
+	unsigned int rpcretrans;
+	unsigned int rpcauthrefresh;
+	unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+	const char *name;
+	u32 number;
+	unsigned int nrvers;
+	const struct rpc_version **version;
+	struct rpc_stat *stats;
+	const char *pipe_dir_name;
+};
+
+struct svc_stat {
+	struct svc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int rpccnt;
+	unsigned int rpcbadfmt;
+	unsigned int rpcbadauth;
+	unsigned int rpcbadclnt;
+};
+
+struct svc_version;
+
+struct svc_rqst;
+
+struct svc_process_info;
+
+struct svc_program {
+	struct svc_program *pg_next;
+	u32 pg_prog;
+	unsigned int pg_lovers;
+	unsigned int pg_hivers;
+	unsigned int pg_nvers;
+	const struct svc_version **pg_vers;
+	char *pg_name;
+	char *pg_class;
+	struct svc_stat *pg_stats;
+	int (*pg_authenticate)(struct svc_rqst *);
+	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct rpc_xprt_iter_ops {
+	void (*xpi_rewind)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_version {
+	u32 number;
+	unsigned int nrprocs;
+	const struct rpc_procinfo *procs;
+	unsigned int *counts;
+};
+
+struct nfs_fh {
+	short unsigned int size;
+	unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+	NFS_UNSTABLE = 0,
+	NFS_DATA_SYNC = 1,
+	NFS_FILE_SYNC = 2,
+	NFS_INVALID_STABLE_HOW = 4294967295,
+};
+
+struct nfs4_label {
+	uint32_t lfs;
+	uint32_t pi;
+	u32 len;
+	char *label;
+};
+
+typedef struct {
+	char data[8];
+} nfs4_verifier;
+
+enum nfs4_change_attr_type {
+	NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+	NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+	NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+	struct gss_api_mech *mech_type;
+	void *internal_ctx_id;
+	unsigned int slack;
+	unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+	struct list_head gm_list;
+	struct module *gm_owner;
+	struct rpcsec_gss_oid gm_oid;
+	char *gm_name;
+	const struct gss_api_ops *gm_ops;
+	int gm_pf_num;
+	struct pf_desc *gm_pfs;
+	const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+	u32 pseudoflavor;
+	u32 qop;
+	u32 service;
+	char *name;
+	char *auth_domain_name;
+	struct auth_domain *domain;
+	bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+	struct kref ref;
+	struct hlist_node hash;
+	char *name;
+	struct auth_ops *flavour;
+	struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+	u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+	void (*gss_delete_sec_context)(void *);
+};
+
+struct nfs4_string {
+	unsigned int len;
+	char *data;
+};
+
+struct nfs_fsid {
+	uint64_t major;
+	uint64_t minor;
+};
+
+struct nfs4_threshold {
+	__u32 bm;
+	__u32 l_type;
+	__u64 rd_sz;
+	__u64 wr_sz;
+	__u64 rd_io_sz;
+	__u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+	unsigned int valid;
+	umode_t mode;
+	__u32 nlink;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	__u64 size;
+	union {
+		struct {
+			__u32 blocksize;
+			__u32 blocks;
+		} nfs2;
+		struct {
+			__u64 used;
+		} nfs3;
+	} du;
+	struct nfs_fsid fsid;
+	__u64 fileid;
+	__u64 mounted_on_fileid;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	__u64 change_attr;
+	__u64 pre_change_attr;
+	__u64 pre_size;
+	struct timespec64 pre_mtime;
+	struct timespec64 pre_ctime;
+	long unsigned int time_start;
+	long unsigned int gencount;
+	struct nfs4_string *owner_name;
+	struct nfs4_string *group_name;
+	struct nfs4_threshold *mdsthreshold;
+	struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+	struct nfs_fattr *fattr;
+	__u32 rtmax;
+	__u32 rtpref;
+	__u32 rtmult;
+	__u32 wtmax;
+	__u32 wtpref;
+	__u32 wtmult;
+	__u32 dtpref;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	__u32 lease_time;
+	__u32 nlayouttypes;
+	__u32 layouttype[8];
+	__u32 blksize;
+	__u32 clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	__u32 xattr_support;
+};
+
+struct nfs_fsstat {
+	struct nfs_fattr *fattr;
+	__u64 tbytes;
+	__u64 fbytes;
+	__u64 abytes;
+	__u64 tfiles;
+	__u64 ffiles;
+	__u64 afiles;
+};
+
+struct nfs_pathconf {
+	struct nfs_fattr *fattr;
+	__u32 max_link;
+	__u32 max_namelen;
+};
+
+struct nfs4_change_info {
+	u32 atomic;
+	u64 before;
+	u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+	struct nfs4_slot *sa_slot;
+	u8 sa_cache_this: 1;
+	u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+	struct nfs4_slot *sr_slot;
+	long unsigned int sr_timestamp;
+	int sr_status;
+	u32 sr_status_flags;
+	u32 sr_highest_slotid;
+	u32 sr_target_highest_slotid;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+	refcount_t count;
+	struct list_head list;
+	struct nfs_open_context *open_context;
+	fl_owner_t lockowner;
+	atomic_t io_count;
+	struct callback_head callback_head;
+};
+
+struct nfs_open_context {
+	struct nfs_lock_context lock_context;
+	fl_owner_t flock_owner;
+	struct dentry *dentry;
+	const struct cred *cred;
+	struct rpc_cred *ll_cred;
+	struct nfs4_state *state;
+	fmode_t mode;
+	long unsigned int flags;
+	int error;
+	struct list_head list;
+	struct nfs4_threshold *mdsthreshold;
+	struct callback_head callback_head;
+};
+
+struct nlm_host;
+
+struct nfs_auth_info {
+	unsigned int flavor_len;
+	rpc_authflavor_t flavors[12];
+};
+
+struct nfs_client;
+
+struct nfs_iostats;
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_server {
+	struct nfs_client *nfs_client;
+	struct list_head client_link;
+	struct list_head master_link;
+	struct rpc_clnt *client;
+	struct rpc_clnt *client_acl;
+	struct nlm_host *nlm_host;
+	struct nfs_iostats *io_stats;
+	atomic_long_t writeback;
+	unsigned int write_congested;
+	unsigned int flags;
+	unsigned int fattr_valid;
+	unsigned int caps;
+	unsigned int rsize;
+	unsigned int rpages;
+	unsigned int wsize;
+	unsigned int wpages;
+	unsigned int wtmult;
+	unsigned int dtsize;
+	short unsigned int port;
+	unsigned int bsize;
+	unsigned int gxasize;
+	unsigned int sxasize;
+	unsigned int lxasize;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namelen;
+	unsigned int options;
+	unsigned int clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	struct nfs_fsid fsid;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	long unsigned int mount_time;
+	struct super_block *super;
+	dev_t s_dev;
+	struct nfs_auth_info auth_info;
+	u32 pnfs_blksize;
+	u32 attr_bitmask[3];
+	u32 attr_bitmask_nl[3];
+	u32 exclcreat_bitmask[3];
+	u32 cache_consistency_bitmask[3];
+	u32 acl_bitmask;
+	u32 fh_expire_type;
+	struct pnfs_layoutdriver_type *pnfs_curr_ld;
+	struct rpc_wait_queue roc_rpcwaitq;
+	void *pnfs_ld_data;
+	struct rb_root state_owners;
+	struct ida openowner_id;
+	struct ida lockowner_id;
+	struct list_head state_owners_lru;
+	struct list_head layouts;
+	struct list_head delegations;
+	struct list_head ss_copies;
+	long unsigned int mig_gen;
+	long unsigned int mig_status;
+	void (*destroy)(struct nfs_server *);
+	atomic_t active;
+	struct __kernel_sockaddr_storage mountd_address;
+	size_t mountd_addrlen;
+	u32 mountd_version;
+	short unsigned int mountd_port;
+	short unsigned int mountd_protocol;
+	struct rpc_wait_queue uoc_rpcwaitq;
+	unsigned int read_hdrsize;
+	const struct cred *cred;
+	bool has_sec_mnt_opts;
+};
+
+struct nfs_rpc_ops;
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_minor_version_ops;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_client {
+	refcount_t cl_count;
+	atomic_t cl_mds_count;
+	int cl_cons_state;
+	long unsigned int cl_res_state;
+	long unsigned int cl_flags;
+	struct __kernel_sockaddr_storage cl_addr;
+	size_t cl_addrlen;
+	char *cl_hostname;
+	char *cl_acceptor;
+	struct list_head cl_share_link;
+	struct list_head cl_superblocks;
+	struct rpc_clnt *cl_rpcclient;
+	const struct nfs_rpc_ops *rpc_ops;
+	int cl_proto;
+	struct nfs_subversion *cl_nfs_mod;
+	u32 cl_minorversion;
+	unsigned int cl_nconnect;
+	unsigned int cl_max_connect;
+	const char *cl_principal;
+	struct list_head cl_ds_clients;
+	u64 cl_clientid;
+	nfs4_verifier cl_confirm;
+	long unsigned int cl_state;
+	spinlock_t cl_lock;
+	long unsigned int cl_lease_time;
+	long unsigned int cl_last_renewal;
+	struct delayed_work cl_renewd;
+	struct rpc_wait_queue cl_rpcwaitq;
+	struct idmap *cl_idmap;
+	const char *cl_owner_id;
+	u32 cl_cb_ident;
+	const struct nfs4_minor_version_ops *cl_mvops;
+	long unsigned int cl_mig_gen;
+	struct nfs4_slot_table *cl_slot_tbl;
+	u32 cl_seqid;
+	u32 cl_exchange_flags;
+	struct nfs4_session *cl_session;
+	bool cl_preserve_clid;
+	struct nfs41_server_owner *cl_serverowner;
+	struct nfs41_server_scope *cl_serverscope;
+	struct nfs41_impl_id *cl_implid;
+	long unsigned int cl_sp4_flags;
+	wait_queue_head_t cl_lock_waitq;
+	char cl_ipaddr[48];
+	struct net *cl_net;
+	struct list_head pending_cb_stateids;
+};
+
+struct nfs_seqid {
+	struct nfs_seqid_counter *sequence;
+	struct list_head list;
+	struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+	char data[8];
+};
+
+struct nfs_writeverf {
+	struct nfs_write_verifier verifier;
+	enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct nfs_open_context *context;
+	struct nfs_lock_context *lock_context;
+	nfs4_stateid stateid;
+	__u64 offset;
+	__u32 count;
+	unsigned int pgbase;
+	struct page **pages;
+	union {
+		unsigned int replen;
+		struct {
+			const u32 *bitmask;
+			u32 bitmask_store[3];
+			enum nfs3_stable_how stable;
+		};
+	};
+};
+
+struct nfs_pgio_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	__u64 count;
+	__u32 op_status;
+	union {
+		struct {
+			unsigned int replen;
+			int eof;
+		};
+		struct {
+			struct nfs_writeverf *verf;
+			const struct nfs_server *server;
+		};
+	};
+};
+
+struct nfs_commitargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	__u64 offset;
+	__u32 count;
+	const u32 *bitmask;
+};
+
+struct nfs_commitres {
+	struct nfs4_sequence_res seq_res;
+	__u32 op_status;
+	struct nfs_fattr *fattr;
+	struct nfs_writeverf *verf;
+	const struct nfs_server *server;
+};
+
+struct nfs_removeargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct qstr name;
+};
+
+struct nfs_removeres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs_fattr *dir_attr;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *old_dir;
+	const struct nfs_fh *new_dir;
+	const struct qstr *old_name;
+	const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs4_change_info old_cinfo;
+	struct nfs_fattr *old_fattr;
+	struct nfs4_change_info new_cinfo;
+	struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+	__u64 ino;
+	__u64 cookie;
+	const char *name;
+	unsigned int len;
+	int eof;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	unsigned char d_type;
+	struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+	struct dentry *dentry;
+	const struct cred *cred;
+	__be32 *verf;
+	u64 cookie;
+	struct page **pages;
+	unsigned int page_len;
+	bool plus;
+};
+
+struct nfs_readdir_res {
+	__be32 *verf;
+};
+
+struct nfs4_pathname {
+	unsigned int ncomponents;
+	struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+	unsigned int nservers;
+	struct nfs4_string servers[10];
+	struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	struct nfs4_pathname fs_path;
+	int nlocations;
+	struct nfs4_fs_location locations[10];
+};
+
+struct nfstime4 {
+	u64 seconds;
+	u32 nseconds;
+};
+
+struct pnfs_commit_ops;
+
+struct pnfs_ds_commit_info {
+	struct list_head commits;
+	unsigned int nwritten;
+	unsigned int ncommitting;
+	const struct pnfs_commit_ops *ops;
+};
+
+struct pnfs_layout_segment;
+
+struct nfs_commit_info;
+
+struct nfs_page;
+
+struct pnfs_commit_ops {
+	void (*setup_ds_info)(struct pnfs_ds_commit_info *, struct pnfs_layout_segment *);
+	void (*release_ds_info)(struct pnfs_ds_commit_info *, struct inode *);
+	int (*commit_pagelist)(struct inode *, struct list_head *, int, struct nfs_commit_info *);
+	void (*mark_request_commit)(struct nfs_page *, struct pnfs_layout_segment *, struct nfs_commit_info *, u32);
+	void (*clear_request_commit)(struct nfs_page *, struct nfs_commit_info *);
+	int (*scan_commit_lists)(struct nfs_commit_info *, int);
+	void (*recover_commit_reqs)(struct list_head *, struct nfs_commit_info *);
+	struct nfs_page * (*search_commit_reqs)(struct nfs_commit_info *, struct page *);
+};
+
+struct nfs41_server_owner {
+	uint64_t minor_id;
+	uint32_t major_id_sz;
+	char major_id[1024];
+};
+
+struct nfs41_server_scope {
+	uint32_t server_scope_sz;
+	char server_scope[1024];
+};
+
+struct nfs41_impl_id {
+	char domain[1025];
+	char name[1025];
+	struct nfstime4 date;
+};
+
+struct nfs_page_array {
+	struct page **pagevec;
+	unsigned int npages;
+	struct page *page_array[8];
+};
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_header {
+	struct inode *inode;
+	const struct cred *cred;
+	struct list_head pages;
+	struct nfs_page *req;
+	struct nfs_writeverf verf;
+	fmode_t rw_mode;
+	struct pnfs_layout_segment *lseg;
+	loff_t io_start;
+	const struct rpc_call_ops *mds_ops;
+	void (*release)(struct nfs_pgio_header *);
+	const struct nfs_pgio_completion_ops *completion_ops;
+	const struct nfs_rw_ops *rw_ops;
+	struct nfs_io_completion *io_completion;
+	struct nfs_direct_req *dreq;
+	int pnfs_error;
+	int error;
+	unsigned int good_bytes;
+	long unsigned int flags;
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct nfs_pgio_args args;
+	struct nfs_pgio_res res;
+	long unsigned int timestamp;
+	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+	__u64 mds_offset;
+	struct nfs_page_array page_array;
+	struct nfs_client *ds_clp;
+	u32 ds_commit_idx;
+	u32 pgio_mirror_idx;
+};
+
+struct nfs_pgio_completion_ops {
+	void (*error_cleanup)(struct list_head *, int);
+	void (*init_hdr)(struct nfs_pgio_header *);
+	void (*completion)(struct nfs_pgio_header *);
+	void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct rpc_task_setup;
+
+struct nfs_rw_ops {
+	struct nfs_pgio_header * (*rw_alloc_header)();
+	void (*rw_free_header)(struct nfs_pgio_header *);
+	int (*rw_done)(struct rpc_task *, struct nfs_pgio_header *, struct inode *);
+	void (*rw_result)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*rw_initiate)(struct nfs_pgio_header *, struct rpc_message *, const struct nfs_rpc_ops *, struct rpc_task_setup *, int);
+};
+
+struct nfs_mds_commit_info {
+	atomic_t rpcs_out;
+	atomic_long_t ncommit;
+	struct list_head list;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_completion_ops {
+	void (*completion)(struct nfs_commit_data *);
+	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+	struct rpc_task task;
+	struct inode *inode;
+	const struct cred *cred;
+	struct nfs_fattr fattr;
+	struct nfs_writeverf verf;
+	struct list_head pages;
+	struct list_head list;
+	struct nfs_direct_req *dreq;
+	struct nfs_commitargs args;
+	struct nfs_commitres res;
+	struct nfs_open_context *context;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_client *ds_clp;
+	int ds_commit_index;
+	loff_t lwb;
+	const struct rpc_call_ops *mds_ops;
+	const struct nfs_commit_completion_ops *completion_ops;
+	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+	long unsigned int flags;
+};
+
+struct nfs_commit_info {
+	struct inode *inode;
+	struct nfs_mds_commit_info *mds;
+	struct pnfs_ds_commit_info *ds;
+	struct nfs_direct_req *dreq;
+	const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+	struct nfs_removeargs args;
+	struct nfs_removeres res;
+	struct dentry *dentry;
+	wait_queue_head_t wq;
+	const struct cred *cred;
+	struct nfs_fattr dir_attr;
+	long int timeout;
+};
+
+struct nfs_renamedata {
+	struct nfs_renameargs args;
+	struct nfs_renameres res;
+	struct rpc_task task;
+	const struct cred *cred;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct nfs_fattr old_fattr;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct nfs_fattr new_fattr;
+	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+	long int timeout;
+	bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_access_entry;
+
+struct nfs_client_initdata;
+
+struct nfs_rpc_ops {
+	u32 version;
+	const struct dentry_operations *dentry_ops;
+	const struct inode_operations *dir_inode_ops;
+	const struct inode_operations *file_inode_ops;
+	const struct file_operations *file_ops;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*submount)(struct fs_context *, struct nfs_server *);
+	int (*try_get_tree)(struct fs_context *);
+	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+	int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+	int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+	int (*remove)(struct inode *, struct dentry *);
+	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+	int (*unlink_done)(struct rpc_task *, struct inode *);
+	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+	int (*link)(struct inode *, struct inode *, const struct qstr *);
+	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
+	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+	int (*rmdir)(struct inode *, const struct qstr *);
+	int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+	int (*lock)(struct file *, int, struct file_lock *);
+	int (*lock_check_bounds)(const struct file_lock *);
+	void (*clear_acl_cache)(struct inode *);
+	void (*close_context)(struct nfs_open_context *, int);
+	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+	int (*have_delegation)(struct inode *, fmode_t);
+	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+	void (*free_client)(struct nfs_client *);
+	struct nfs_server * (*create_server)(struct fs_context *);
+	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+	int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+	void (*enable_swap)(struct inode *);
+	void (*disable_swap)(struct inode *);
+};
+
+struct nlmclnt_operations {
+	void (*nlmclnt_alloc_call)(void *);
+	bool (*nlmclnt_unlock_prepare)(struct rpc_task *, void *);
+	void (*nlmclnt_release_call)(void *);
+};
+
+struct nfs_access_entry {
+	struct rb_node rb_node;
+	struct list_head lru;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	struct group_info *group_info;
+	u64 timestamp;
+	__u32 mask;
+	struct callback_head callback_head;
+};
+
+struct nfs_client_initdata {
+	long unsigned int init_flags;
+	const char *hostname;
+	const struct __kernel_sockaddr_storage *addr;
+	const char *nodename;
+	const char *ip_addr;
+	size_t addrlen;
+	struct nfs_subversion *nfs_mod;
+	int proto;
+	u32 minorversion;
+	unsigned int nconnect;
+	unsigned int max_connect;
+	struct net *net;
+	const struct rpc_timeout *timeparms;
+	const struct cred *cred;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+	u32 minor_version;
+	unsigned int init_caps;
+	int (*init_client)(struct nfs_client *);
+	void (*shutdown_client)(struct nfs_client *);
+	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
+	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	const struct rpc_call_ops *call_sync_ops;
+	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+	const struct nfs4_state_maintenance_ops *state_renewal_ops;
+	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+	struct list_head open_states;
+	struct list_head inode_states;
+	struct list_head lock_states;
+	struct nfs4_state_owner *owner;
+	struct inode *inode;
+	long unsigned int flags;
+	spinlock_t state_lock;
+	seqlock_t seqlock;
+	nfs4_stateid stateid;
+	nfs4_stateid open_stateid;
+	unsigned int n_rdonly;
+	unsigned int n_wronly;
+	unsigned int n_rdwr;
+	fmode_t state;
+	refcount_t count;
+	wait_queue_head_t waitq;
+	struct callback_head callback_head;
+};
+
+struct cache_head {
+	struct hlist_node cache_list;
+	time64_t expiry_time;
+	time64_t last_refresh;
+	struct kref ref;
+	long unsigned int flags;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+	struct cache_deferred_req * (*defer)(struct cache_req *);
+	long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+	struct hlist_node hash;
+	struct list_head recent;
+	struct cache_head *item;
+	void *owner;
+	void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct svc_cred {
+	kuid_t cr_uid;
+	kgid_t cr_gid;
+	struct group_info *cr_group_info;
+	u32 cr_flavor;
+	char *cr_raw_principal;
+	char *cr_principal;
+	char *cr_targ_princ;
+	struct gss_api_mech *cr_gss_mech;
+};
+
+struct auth_ops {
+	char *name;
+	struct module *owner;
+	int flavour;
+	int (*accept)(struct svc_rqst *);
+	int (*release)(struct svc_rqst *);
+	void (*domain_release)(struct auth_domain *);
+	int (*set_client)(struct svc_rqst *);
+};
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_cacherep;
+
+struct svc_rqst {
+	struct list_head rq_all;
+	struct callback_head rq_rcu_head;
+	struct svc_xprt *rq_xprt;
+	struct __kernel_sockaddr_storage rq_addr;
+	size_t rq_addrlen;
+	struct __kernel_sockaddr_storage rq_daddr;
+	size_t rq_daddrlen;
+	struct svc_serv *rq_server;
+	struct svc_pool *rq_pool;
+	const struct svc_procedure *rq_procinfo;
+	struct auth_ops *rq_authop;
+	struct svc_cred rq_cred;
+	void *rq_xprt_ctxt;
+	struct svc_deferred_req *rq_deferred;
+	struct xdr_buf rq_arg;
+	struct xdr_stream rq_arg_stream;
+	struct xdr_stream rq_res_stream;
+	struct page *rq_scratch_page;
+	struct xdr_buf rq_res;
+	struct page *rq_pages[260];
+	struct page **rq_respages;
+	struct page **rq_next_page;
+	struct page **rq_page_end;
+	struct pagevec rq_pvec;
+	struct kvec rq_vec[259];
+	struct bio_vec rq_bvec[259];
+	__be32 rq_xid;
+	u32 rq_prog;
+	u32 rq_vers;
+	u32 rq_proc;
+	u32 rq_prot;
+	int rq_cachetype;
+	long unsigned int rq_flags;
+	ktime_t rq_qtime;
+	void *rq_argp;
+	void *rq_resp;
+	void *rq_auth_data;
+	__be32 rq_auth_stat;
+	int rq_auth_slack;
+	int rq_reserved;
+	ktime_t rq_stime;
+	struct cache_req rq_chandle;
+	struct auth_domain *rq_client;
+	struct auth_domain *rq_gssclient;
+	struct svc_cacherep *rq_cacherep;
+	struct task_struct *rq_task;
+	struct net *rq_bc_net;
+	void **rq_lease_breaker;
+};
+
+struct svc_pool_stats {
+	atomic_long_t packets;
+	long unsigned int sockets_queued;
+	atomic_long_t threads_woken;
+	atomic_long_t threads_timedout;
+};
+
+struct svc_pool {
+	unsigned int sp_id;
+	spinlock_t sp_lock;
+	struct list_head sp_sockets;
+	unsigned int sp_nrthreads;
+	struct list_head sp_all_threads;
+	struct svc_pool_stats sp_stats;
+	long unsigned int sp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct svc_procedure {
+	__be32 (*pc_func)(struct svc_rqst *);
+	bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+	bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+	void (*pc_release)(struct svc_rqst *);
+	unsigned int pc_argsize;
+	unsigned int pc_argzero;
+	unsigned int pc_ressize;
+	unsigned int pc_cachetype;
+	unsigned int pc_xdrressize;
+	const char *pc_name;
+};
+
+struct svc_deferred_req {
+	u32 prot;
+	struct svc_xprt *xprt;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	struct __kernel_sockaddr_storage daddr;
+	size_t daddrlen;
+	void *xprt_ctxt;
+	struct cache_deferred_req handle;
+	int argslen;
+	__be32 args[0];
+};
+
+struct svc_process_info {
+	union {
+		int (*dispatch)(struct svc_rqst *, __be32 *);
+		struct {
+			unsigned int lovers;
+			unsigned int hivers;
+		} mismatch;
+	};
+};
+
+struct svc_version {
+	u32 vs_vers;
+	u32 vs_nproc;
+	const struct svc_procedure *vs_proc;
+	unsigned int *vs_count;
+	u32 vs_xdrsize;
+	bool vs_hidden;
+	bool vs_rpcb_optnl;
+	bool vs_need_cong_ctrl;
+	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
+};
+
+struct nfs4_ssc_client_ops;
+
+struct nfs_ssc_client_ops;
+
+struct nfs_ssc_client_ops_tbl {
+	const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
+	const struct nfs_ssc_client_ops *ssc_nfs_ops;
+};
+
+struct nfs4_ssc_client_ops {
+	struct file * (*sco_open)(struct vfsmount *, struct nfs_fh *, nfs4_stateid *);
+	void (*sco_close)(struct file *);
+};
+
+struct nfs_ssc_client_ops {
+	void (*sco_sb_deactive)(struct super_block *);
+};
+
+struct nfs4_state_recovery_ops {
+	int owner_flag_bit;
+	int state_flag_bit;
+	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+	int (*establish_clid)(struct nfs_client *, const struct cred *);
+	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+	int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+	int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+	int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+	struct nfs_server *so_server;
+	struct list_head so_lru;
+	long unsigned int so_expires;
+	struct rb_node so_server_node;
+	const struct cred *so_cred;
+	spinlock_t so_lock;
+	atomic_t so_count;
+	long unsigned int so_flags;
+	struct list_head so_states;
+	struct nfs_seqid_counter so_seqid;
+	seqcount_spinlock_t so_reclaim_seqcount;
+	struct mutex so_delegreturn_mutex;
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	long unsigned int caller;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_writepage_map)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, long unsigned int);
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct iomap_dio_ops {
+	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
+};
+
+struct iomap_dio {
+	struct kiocb *iocb;
+	const struct iomap_dio_ops *dops;
+	loff_t i_size;
+	loff_t size;
+	atomic_t ref;
+	unsigned int flags;
+	int error;
+	size_t done_before;
+	bool wait_for_completion;
+	union {
+		struct {
+			struct iov_iter *iter;
+			struct task_struct *waiter;
+			struct bio *poll_bio;
+		} submit;
+		struct {
+			struct work_struct work;
+		} aio;
+	};
+};
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_writepage_ctx;
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct iomap_page {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t uptodate_lock;
+	long unsigned int uptodate[0];
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+enum {
+	QIF_BLIMITS_B = 0,
+	QIF_SPACE_B = 1,
+	QIF_ILIMITS_B = 2,
+	QIF_INODES_B = 3,
+	QIF_BTIME_B = 4,
+	QIF_ITIME_B = 5,
+};
+
+enum {
+	DQF_INFO_DIRTY_B = 17,
+};
+
+struct dqstats {
+	long unsigned int stat[8];
+	struct percpu_counter counter[8];
+};
+
+enum {
+	_DQUOT_USAGE_ENABLED = 0,
+	_DQUOT_LIMITS_ENABLED = 1,
+	_DQUOT_SUSPENDED = 2,
+	_DQUOT_STATE_FLAGS = 3,
+};
+
+struct quota_module_name {
+	int qm_fmt_id;
+	char *qm_mod_name;
+};
+
+struct dquot_warn {
+	struct super_block *w_sb;
+	struct kqid w_dq_id;
+	short int w_type;
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vma_iterator iter;
+};
+
+struct mem_size_stats {
+	long unsigned int resident;
+	long unsigned int shared_clean;
+	long unsigned int shared_dirty;
+	long unsigned int private_clean;
+	long unsigned int private_dirty;
+	long unsigned int referenced;
+	long unsigned int anonymous;
+	long unsigned int lazyfree;
+	long unsigned int anonymous_thp;
+	long unsigned int shmem_thp;
+	long unsigned int file_thp;
+	long unsigned int swap;
+	long unsigned int shared_hugetlb;
+	long unsigned int private_hugetlb;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct fs_disk_quota {
+	__s8 d_version;
+	__s8 d_flags;
+	__u16 d_fieldmask;
+	__u32 d_id;
+	__u64 d_blk_hardlimit;
+	__u64 d_blk_softlimit;
+	__u64 d_ino_hardlimit;
+	__u64 d_ino_softlimit;
+	__u64 d_bcount;
+	__u64 d_icount;
+	__s32 d_itimer;
+	__s32 d_btimer;
+	__u16 d_iwarns;
+	__u16 d_bwarns;
+	__s8 d_itimer_hi;
+	__s8 d_btimer_hi;
+	__s8 d_rtbtimer_hi;
+	__s8 d_padding2;
+	__u64 d_rtb_hardlimit;
+	__u64 d_rtb_softlimit;
+	__u64 d_rtbcount;
+	__s32 d_rtbtimer;
+	__u16 d_rtbwarns;
+	__s16 d_padding3;
+	char d_padding4[8];
+};
+
+struct fs_qfilestat {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+};
+
+typedef struct fs_qfilestat fs_qfilestat_t;
+
+struct fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	fs_qfilestat_t qs_uquota;
+	fs_qfilestat_t qs_gquota;
+	__u32 qs_incoredqs;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+struct fs_qfilestatv {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+	__u32 qfs_pad;
+};
+
+struct fs_quota_statv {
+	__s8 qs_version;
+	__u8 qs_pad1;
+	__u16 qs_flags;
+	__u32 qs_incoredqs;
+	struct fs_qfilestatv qs_uquota;
+	struct fs_qfilestatv qs_gquota;
+	struct fs_qfilestatv qs_pquota;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
+};
+
+struct if_dqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+};
+
+struct if_nextdqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+	__u32 dqb_id;
+};
+
+struct if_dqinfo {
+	__u64 dqi_bgrace;
+	__u64 dqi_igrace;
+	__u32 dqi_flags;
+	__u32 dqi_valid;
+};
+
+typedef u64 compat_u64;
+
+struct compat_if_dqblk {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 dqb_bsoftlimit;
+	compat_u64 dqb_curspace;
+	compat_u64 dqb_ihardlimit;
+	compat_u64 dqb_isoftlimit;
+	compat_u64 dqb_curinodes;
+	compat_u64 dqb_btime;
+	compat_u64 dqb_itime;
+	compat_uint_t dqb_valid;
+};
+
+struct proc_fs_context {
+	struct pid_namespace *pid_ns;
+	unsigned int mask;
+	enum proc_hidepid hidepid;
+	int gid;
+	enum proc_pidonly pidonly;
+};
+
+enum proc_param {
+	Opt_gid___2 = 0,
+	Opt_hidepid = 1,
+	Opt_subset = 2,
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+enum resctrl_conf_type {
+	CDP_NONE = 0,
+	CDP_CODE = 1,
+	CDP_DATA = 2,
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	long unsigned int start;
+	long unsigned int end;
+	fmode_t mode;
+};
+
+struct timers_private {
+	struct pid *pid;
+	struct task_struct *task;
+	struct sighand_struct *sighand;
+	struct pid_namespace *ns;
+	long unsigned int flags;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
+	struct task_struct *task;
+};
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+struct vmcore {
+	struct list_head list;
+	long long unsigned int paddr;
+	long long unsigned int size;
+	loff_t offset;
+};
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+typedef struct elf64_note Elf64_Nhdr;
+
+struct vmcore_cb {
+	bool (*pfn_is_ram)(struct vmcore_cb *, long unsigned int);
+	struct list_head next;
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+struct bpf_iter_aux_info;
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+struct kernfs_super_info {
+	struct super_block *sb;
+	struct kernfs_root *root;
+	const void *ns;
+	struct list_head node;
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_HIDDEN = 512,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+	KERNFS_REMOVING = 16384,
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+	unsigned int nr_mmapped;
+	unsigned int nr_to_release;
+};
+
+struct config_group;
+
+struct config_item_type;
+
+struct config_item {
+	char *ci_name;
+	char ci_namebuf[20];
+	struct kref ci_kref;
+	struct list_head ci_entry;
+	struct config_item *ci_parent;
+	struct config_group *ci_group;
+	const struct config_item_type *ci_type;
+	struct dentry *ci_dentry;
+};
+
+struct configfs_subsystem;
+
+struct config_group {
+	struct config_item cg_item;
+	struct list_head cg_children;
+	struct configfs_subsystem *cg_subsys;
+	struct list_head default_groups;
+	struct list_head group_entry;
+};
+
+struct configfs_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_attribute;
+
+struct configfs_bin_attribute;
+
+struct config_item_type {
+	struct module *ct_owner;
+	struct configfs_item_operations *ct_item_ops;
+	struct configfs_group_operations *ct_group_ops;
+	struct configfs_attribute **ct_attrs;
+	struct configfs_bin_attribute **ct_bin_attrs;
+};
+
+struct configfs_item_operations {
+	void (*release)(struct config_item *);
+	int (*allow_link)(struct config_item *, struct config_item *);
+	void (*drop_link)(struct config_item *, struct config_item *);
+};
+
+struct configfs_group_operations {
+	struct config_item * (*make_item)(struct config_group *, const char *);
+	struct config_group * (*make_group)(struct config_group *, const char *);
+	void (*disconnect_notify)(struct config_group *, struct config_item *);
+	void (*drop_item)(struct config_group *, struct config_item *);
+};
+
+struct configfs_attribute {
+	const char *ca_name;
+	struct module *ca_owner;
+	umode_t ca_mode;
+	ssize_t (*show)(struct config_item *, char *);
+	ssize_t (*store)(struct config_item *, const char *, size_t);
+};
+
+struct configfs_bin_attribute {
+	struct configfs_attribute cb_attr;
+	void *cb_private;
+	size_t cb_max_size;
+	ssize_t (*read)(struct config_item *, void *, size_t);
+	ssize_t (*write)(struct config_item *, const void *, size_t);
+};
+
+struct configfs_subsystem {
+	struct config_group su_group;
+	struct mutex su_mutex;
+};
+
+struct configfs_fragment {
+	atomic_t frag_count;
+	struct rw_semaphore frag_sem;
+	bool frag_dead;
+};
+
+struct configfs_dirent {
+	atomic_t s_count;
+	int s_dependent_count;
+	struct list_head s_sibling;
+	struct list_head s_children;
+	int s_links;
+	void *s_element;
+	int s_type;
+	umode_t s_mode;
+	struct dentry *s_dentry;
+	struct iattr *s_iattr;
+	struct configfs_fragment *s_frag;
+};
+
+struct configfs_buffer {
+	size_t count;
+	loff_t pos;
+	char *page;
+	struct configfs_item_operations *ops;
+	struct mutex mutex;
+	int needs_read_fill;
+	bool read_in_progress;
+	bool write_in_progress;
+	char *bin_buffer;
+	int bin_buffer_size;
+	int cb_max_size;
+	struct config_item *item;
+	struct module *owner;
+	union {
+		struct configfs_attribute *attr;
+		struct configfs_bin_attribute *bin_attr;
+	};
+};
+
+enum netfs_io_source {
+	NETFS_FILL_WITH_ZEROES = 0,
+	NETFS_DOWNLOAD_FROM_SERVER = 1,
+	NETFS_READ_FROM_CACHE = 2,
+	NETFS_INVALID_READ = 3,
+};
+
+typedef void (*netfs_io_terminated_t)(void *, ssize_t, bool);
+
+struct netfs_request_ops;
+
+struct netfs_inode {
+	struct inode inode;
+	const struct netfs_request_ops *ops;
+	loff_t remote_i_size;
+};
+
+struct netfs_io_request;
+
+struct netfs_io_subrequest;
+
+struct netfs_request_ops {
+	int (*init_request)(struct netfs_io_request *, struct file *);
+	void (*free_request)(struct netfs_io_request *);
+	int (*begin_cache_operation)(struct netfs_io_request *);
+	void (*expand_readahead)(struct netfs_io_request *);
+	bool (*clamp_length)(struct netfs_io_subrequest *);
+	void (*issue_read)(struct netfs_io_subrequest *);
+	bool (*is_still_valid)(struct netfs_io_request *);
+	int (*check_write_begin)(struct file *, loff_t, unsigned int, struct folio **, void **);
+	void (*done)(struct netfs_io_request *);
+};
+
+struct netfs_cache_ops;
+
+struct netfs_cache_resources {
+	const struct netfs_cache_ops *ops;
+	void *cache_priv;
+	void *cache_priv2;
+	unsigned int debug_id;
+	unsigned int inval_counter;
+};
+
+enum netfs_read_from_hole {
+	NETFS_READ_HOLE_IGNORE = 0,
+	NETFS_READ_HOLE_CLEAR = 1,
+	NETFS_READ_HOLE_FAIL = 2,
+};
+
+struct netfs_cache_ops {
+	void (*end_operation)(struct netfs_cache_resources *);
+	int (*read)(struct netfs_cache_resources *, loff_t, struct iov_iter *, enum netfs_read_from_hole, netfs_io_terminated_t, void *);
+	int (*write)(struct netfs_cache_resources *, loff_t, struct iov_iter *, netfs_io_terminated_t, void *);
+	void (*expand_readahead)(struct netfs_cache_resources *, loff_t *, size_t *, loff_t);
+	enum netfs_io_source (*prepare_read)(struct netfs_io_subrequest *, loff_t);
+	int (*prepare_write)(struct netfs_cache_resources *, loff_t *, size_t *, loff_t, bool);
+	enum netfs_io_source (*prepare_ondemand_read)(struct netfs_cache_resources *, loff_t, size_t *, loff_t, long unsigned int *, ino_t);
+	int (*query_occupancy)(struct netfs_cache_resources *, loff_t, size_t, size_t, loff_t *, size_t *);
+};
+
+struct netfs_io_subrequest {
+	struct netfs_io_request *rreq;
+	struct list_head rreq_link;
+	loff_t start;
+	size_t len;
+	size_t transferred;
+	refcount_t ref;
+	short int error;
+	short unsigned int debug_index;
+	enum netfs_io_source source;
+	long unsigned int flags;
+};
+
+enum netfs_io_origin {
+	NETFS_READAHEAD = 0,
+	NETFS_READPAGE = 1,
+	NETFS_READ_FOR_WRITE = 2,
+};
+
+struct netfs_io_request {
+	struct work_struct work;
+	struct inode *inode;
+	struct address_space *mapping;
+	struct netfs_cache_resources cache_resources;
+	struct list_head subrequests;
+	void *netfs_priv;
+	unsigned int debug_id;
+	atomic_t nr_outstanding;
+	atomic_t nr_copy_ops;
+	size_t submitted;
+	size_t len;
+	short int error;
+	enum netfs_io_origin origin;
+	loff_t i_size;
+	loff_t start;
+	long unsigned int no_unlock_folio;
+	refcount_t ref;
+	long unsigned int flags;
+	const struct netfs_request_ops *netfs_ops;
+};
+
+enum netfs_read_trace {
+	netfs_read_trace_expanded = 0,
+	netfs_read_trace_readahead = 1,
+	netfs_read_trace_readpage = 2,
+	netfs_read_trace_write_begin = 3,
+};
+
+enum netfs_rreq_trace {
+	netfs_rreq_trace_assess = 0,
+	netfs_rreq_trace_copy = 1,
+	netfs_rreq_trace_done = 2,
+	netfs_rreq_trace_free = 3,
+	netfs_rreq_trace_resubmit = 4,
+	netfs_rreq_trace_unlock = 5,
+	netfs_rreq_trace_unmark = 6,
+};
+
+enum netfs_failure {
+	netfs_fail_check_write_begin = 0,
+	netfs_fail_copy_to_cache = 1,
+	netfs_fail_read = 2,
+	netfs_fail_short_read = 3,
+	netfs_fail_prepare_write = 4,
+};
+
+enum netfs_rreq_ref_trace {
+	netfs_rreq_trace_get_hold = 0,
+	netfs_rreq_trace_get_subreq = 1,
+	netfs_rreq_trace_put_complete = 2,
+	netfs_rreq_trace_put_discard = 3,
+	netfs_rreq_trace_put_failed = 4,
+	netfs_rreq_trace_put_hold = 5,
+	netfs_rreq_trace_put_subreq = 6,
+	netfs_rreq_trace_put_zero_len = 7,
+	netfs_rreq_trace_new = 8,
+};
+
+enum netfs_sreq_trace {
+	netfs_sreq_trace_download_instead = 0,
+	netfs_sreq_trace_free = 1,
+	netfs_sreq_trace_prepare = 2,
+	netfs_sreq_trace_resubmit_short = 3,
+	netfs_sreq_trace_submit = 4,
+	netfs_sreq_trace_terminated = 5,
+	netfs_sreq_trace_write = 6,
+	netfs_sreq_trace_write_skip = 7,
+	netfs_sreq_trace_write_term = 8,
+};
+
+enum netfs_sreq_ref_trace {
+	netfs_sreq_trace_get_copy_to_cache = 0,
+	netfs_sreq_trace_get_resubmit = 1,
+	netfs_sreq_trace_get_short_read = 2,
+	netfs_sreq_trace_new = 3,
+	netfs_sreq_trace_put_clear = 4,
+	netfs_sreq_trace_put_failed = 5,
+	netfs_sreq_trace_put_merged = 6,
+	netfs_sreq_trace_put_no_copy = 7,
+	netfs_sreq_trace_put_terminated = 8,
+};
+
+struct pts_mount_opts {
+	int setuid;
+	int setgid;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	umode_t ptmxmode;
+	int reserve;
+	int max;
+};
+
+enum {
+	Opt_uid___2 = 0,
+	Opt_gid___3 = 1,
+	Opt_mode___2 = 2,
+	Opt_ptmxmode = 3,
+	Opt_newinstance = 4,
+	Opt_max = 5,
+	Opt_err = 6,
+};
+
+struct pts_fs_info {
+	struct ida allocated_ptys;
+	struct pts_mount_opts mount_opts;
+	struct super_block *sb;
+	struct dentry *ptmx_dentry;
+};
+
+struct trace_event_raw_netfs_read {
+	struct trace_entry ent;
+	unsigned int rreq;
+	unsigned int cookie;
+	loff_t start;
+	size_t len;
+	enum netfs_read_trace what;
+	unsigned int netfs_inode;
+	char __data[0];
+};
+
+struct trace_event_raw_netfs_rreq {
+	struct trace_entry ent;
+	unsigned int rreq;
+	unsigned int flags;
+	enum netfs_io_origin origin;
+	enum netfs_rreq_trace what;
+	char __data[0];
+};
+
+struct trace_event_raw_netfs_sreq {
+	struct trace_entry ent;
+	unsigned int rreq;
+	short unsigned int index;
+	short int error;
+	short unsigned int flags;
+	enum netfs_io_source source;
+	enum netfs_sreq_trace what;
+	size_t len;
+	size_t transferred;
+	loff_t start;
+	char __data[0];
+};
+
+struct trace_event_raw_netfs_failure {
+	struct trace_entry ent;
+	unsigned int rreq;
+	short int index;
+	short int error;
+	short unsigned int flags;
+	enum netfs_io_source source;
+	enum netfs_failure what;
+	size_t len;
+	size_t transferred;
+	loff_t start;
+	char __data[0];
+};
+
+struct trace_event_raw_netfs_rreq_ref {
+	struct trace_entry ent;
+	unsigned int rreq;
+	int ref;
+	enum netfs_rreq_ref_trace what;
+	char __data[0];
+};
+
+struct trace_event_raw_netfs_sreq_ref {
+	struct trace_entry ent;
+	unsigned int rreq;
+	unsigned int subreq;
+	int ref;
+	enum netfs_sreq_ref_trace what;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netfs_read {};
+
+struct trace_event_data_offsets_netfs_rreq {};
+
+struct trace_event_data_offsets_netfs_sreq {};
+
+struct trace_event_data_offsets_netfs_failure {};
+
+struct trace_event_data_offsets_netfs_rreq_ref {};
+
+struct trace_event_data_offsets_netfs_sreq_ref {};
+
+typedef void (*btf_trace_netfs_read)(void *, struct netfs_io_request *, loff_t, size_t, enum netfs_read_trace);
+
+typedef void (*btf_trace_netfs_rreq)(void *, struct netfs_io_request *, enum netfs_rreq_trace);
+
+typedef void (*btf_trace_netfs_sreq)(void *, struct netfs_io_subrequest *, enum netfs_sreq_trace);
+
+typedef void (*btf_trace_netfs_failure)(void *, struct netfs_io_request *, struct netfs_io_subrequest *, int, enum netfs_failure);
+
+typedef void (*btf_trace_netfs_rreq_ref)(void *, unsigned int, int, enum netfs_rreq_ref_trace);
+
+typedef void (*btf_trace_netfs_sreq_ref)(void *, unsigned int, unsigned int, int, enum netfs_sreq_ref_trace);
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+	long unsigned int cs_chp_time;
+	__u32 cs_forced_to_close;
+	__u32 cs_written;
+	__u32 cs_dropped;
+};
+
+struct journal_s;
+
+typedef struct journal_s journal_t;
+
+struct journal_head;
+
+struct transaction_s;
+
+typedef struct transaction_s transaction_t;
+
+struct transaction_s {
+	journal_t *t_journal;
+	tid_t t_tid;
+	enum {
+		T_RUNNING = 0,
+		T_LOCKED = 1,
+		T_SWITCH = 2,
+		T_FLUSH = 3,
+		T_COMMIT = 4,
+		T_COMMIT_DFLUSH = 5,
+		T_COMMIT_JFLUSH = 6,
+		T_COMMIT_CALLBACK = 7,
+		T_FINISHED = 8,
+	} t_state;
+	long unsigned int t_log_start;
+	int t_nr_buffers;
+	struct journal_head *t_reserved_list;
+	struct journal_head *t_buffers;
+	struct journal_head *t_forget;
+	struct journal_head *t_checkpoint_list;
+	struct journal_head *t_checkpoint_io_list;
+	struct journal_head *t_shadow_list;
+	struct list_head t_inode_list;
+	spinlock_t t_handle_lock;
+	long unsigned int t_max_wait;
+	long unsigned int t_start;
+	long unsigned int t_requested;
+	struct transaction_chp_stats_s t_chp_stats;
+	atomic_t t_updates;
+	atomic_t t_outstanding_credits;
+	atomic_t t_outstanding_revokes;
+	atomic_t t_handle_count;
+	transaction_t *t_cpnext;
+	transaction_t *t_cpprev;
+	long unsigned int t_expires;
+	ktime_t t_start_time;
+	unsigned int t_synchronous_commit: 1;
+	int t_need_data_flush;
+	struct list_head t_private_list;
+};
+
+struct jbd2_buffer_trigger_type;
+
+struct journal_head {
+	struct buffer_head *b_bh;
+	spinlock_t b_state_lock;
+	int b_jcount;
+	unsigned int b_jlist;
+	unsigned int b_modified;
+	char *b_frozen_data;
+	char *b_committed_data;
+	transaction_t *b_transaction;
+	transaction_t *b_next_transaction;
+	struct journal_head *b_tnext;
+	struct journal_head *b_tprev;
+	transaction_t *b_cp_transaction;
+	struct journal_head *b_cpnext;
+	struct journal_head *b_cpprev;
+	struct jbd2_buffer_trigger_type *b_triggers;
+	struct jbd2_buffer_trigger_type *b_frozen_triggers;
+};
+
+struct jbd2_buffer_trigger_type {
+	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
+	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
+};
+
+struct transaction_run_stats_s {
+	long unsigned int rs_wait;
+	long unsigned int rs_request_delay;
+	long unsigned int rs_running;
+	long unsigned int rs_locked;
+	long unsigned int rs_flushing;
+	long unsigned int rs_logging;
+	__u32 rs_handle_count;
+	__u32 rs_blocks;
+	__u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+	long unsigned int ts_tid;
+	long unsigned int ts_requested;
+	struct transaction_run_stats_s run;
+};
+
+enum passtype {
+	PASS_SCAN = 0,
+	PASS_REVOKE = 1,
+	PASS_REPLAY = 2,
+};
+
+struct journal_superblock_s;
+
+typedef struct journal_superblock_s journal_superblock_t;
+
+struct jbd2_revoke_table_s;
+
+struct jbd2_inode;
+
+struct journal_s {
+	long unsigned int j_flags;
+	long unsigned int j_atomic_flags;
+	int j_errno;
+	struct mutex j_abort_mutex;
+	struct buffer_head *j_sb_buffer;
+	journal_superblock_t *j_superblock;
+	int j_format_version;
+	rwlock_t j_state_lock;
+	int j_barrier_count;
+	struct mutex j_barrier;
+	transaction_t *j_running_transaction;
+	transaction_t *j_committing_transaction;
+	transaction_t *j_checkpoint_transactions;
+	wait_queue_head_t j_wait_transaction_locked;
+	wait_queue_head_t j_wait_done_commit;
+	wait_queue_head_t j_wait_commit;
+	wait_queue_head_t j_wait_updates;
+	wait_queue_head_t j_wait_reserved;
+	wait_queue_head_t j_fc_wait;
+	struct mutex j_checkpoint_mutex;
+	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
+	long unsigned int j_head;
+	long unsigned int j_tail;
+	long unsigned int j_free;
+	long unsigned int j_first;
+	long unsigned int j_last;
+	long unsigned int j_fc_first;
+	long unsigned int j_fc_off;
+	long unsigned int j_fc_last;
+	struct block_device *j_dev;
+	int j_blocksize;
+	long long unsigned int j_blk_offset;
+	char j_devname[56];
+	struct block_device *j_fs_dev;
+	unsigned int j_total_len;
+	atomic_t j_reserved_credits;
+	spinlock_t j_list_lock;
+	struct inode *j_inode;
+	tid_t j_tail_sequence;
+	tid_t j_transaction_sequence;
+	tid_t j_commit_sequence;
+	tid_t j_commit_request;
+	__u8 j_uuid[16];
+	struct task_struct *j_task;
+	int j_max_transaction_buffers;
+	int j_revoke_records_per_block;
+	long unsigned int j_commit_interval;
+	struct timer_list j_commit_timer;
+	spinlock_t j_revoke_lock;
+	struct jbd2_revoke_table_s *j_revoke;
+	struct jbd2_revoke_table_s *j_revoke_table[2];
+	struct buffer_head **j_wbuf;
+	struct buffer_head **j_fc_wbuf;
+	int j_wbufsize;
+	int j_fc_wbufsize;
+	pid_t j_last_sync_writer;
+	u64 j_average_commit_time;
+	u32 j_min_batch_time;
+	u32 j_max_batch_time;
+	void (*j_commit_callback)(journal_t *, transaction_t *);
+	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
+	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
+	spinlock_t j_history_lock;
+	struct proc_dir_entry *j_proc_entry;
+	struct transaction_stats_s j_stats;
+	unsigned int j_failed_commit;
+	void *j_private;
+	struct crypto_shash *j_chksum_driver;
+	__u32 j_csum_seed;
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
+	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
+};
+
+struct journal_header_s {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+};
+
+typedef struct journal_header_s journal_header_t;
+
+struct journal_superblock_s {
+	journal_header_t s_header;
+	__be32 s_blocksize;
+	__be32 s_maxlen;
+	__be32 s_first;
+	__be32 s_sequence;
+	__be32 s_start;
+	__be32 s_errno;
+	__be32 s_feature_compat;
+	__be32 s_feature_incompat;
+	__be32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	__be32 s_nr_users;
+	__be32 s_dynsuper;
+	__be32 s_max_transaction;
+	__be32 s_max_trans_data;
+	__u8 s_checksum_type;
+	__u8 s_padding2[3];
+	__be32 s_num_fc_blks;
+	__u32 s_padding[41];
+	__be32 s_checksum;
+	__u8 s_users[768];
+};
+
+struct jbd2_inode {
+	transaction_t *i_transaction;
+	transaction_t *i_next_transaction;
+	struct list_head i_list;
+	struct inode *i_vfs_inode;
+	long unsigned int i_flags;
+	loff_t i_dirty_start;
+	loff_t i_dirty_end;
+};
+
+struct bgl_lock {
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blockgroup_lock {
+	struct bgl_lock locks[128];
+};
+
+struct fscrypt_dummy_policy {};
+
+typedef int ext4_grpblk_t;
+
+typedef long long unsigned int ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+typedef unsigned int ext4_group_t;
+
+struct ext4_system_blocks {
+	struct rb_root root;
+	struct callback_head rcu;
+};
+
+struct ext4_group_desc {
+	__le32 bg_block_bitmap_lo;
+	__le32 bg_inode_bitmap_lo;
+	__le32 bg_inode_table_lo;
+	__le16 bg_free_blocks_count_lo;
+	__le16 bg_free_inodes_count_lo;
+	__le16 bg_used_dirs_count_lo;
+	__le16 bg_flags;
+	__le32 bg_exclude_bitmap_lo;
+	__le16 bg_block_bitmap_csum_lo;
+	__le16 bg_inode_bitmap_csum_lo;
+	__le16 bg_itable_unused_lo;
+	__le16 bg_checksum;
+	__le32 bg_block_bitmap_hi;
+	__le32 bg_inode_bitmap_hi;
+	__le32 bg_inode_table_hi;
+	__le16 bg_free_blocks_count_hi;
+	__le16 bg_free_inodes_count_hi;
+	__le16 bg_used_dirs_count_hi;
+	__le16 bg_itable_unused_hi;
+	__le32 bg_exclude_bitmap_hi;
+	__le16 bg_block_bitmap_csum_hi;
+	__le16 bg_inode_bitmap_csum_hi;
+	__u32 bg_reserved;
+};
+
+struct flex_groups {
+	atomic64_t free_clusters;
+	atomic_t free_inodes;
+	atomic_t used_dirs;
+};
+
+struct ext4_es_stats {
+	long unsigned int es_stats_shrunk;
+	struct percpu_counter es_stats_cache_hits;
+	struct percpu_counter es_stats_cache_misses;
+	u64 es_stats_scan_time;
+	u64 es_stats_max_scan_time;
+	struct percpu_counter es_stats_all_cnt;
+	struct percpu_counter es_stats_shk_cnt;
+};
+
+struct ext4_fc_stats {
+	unsigned int fc_ineligible_reason_count[10];
+	long unsigned int fc_num_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_failed_commits;
+	long unsigned int fc_skipped_commits;
+	long unsigned int fc_numblks;
+	u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region {
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	int ino;
+	int len;
+};
+
+struct ext4_fc_replay_state {
+	int fc_replay_num_tags;
+	int fc_replay_expected_off;
+	int fc_current_pass;
+	int fc_cur_tag;
+	int fc_crc;
+	struct ext4_fc_alloc_region *fc_regions;
+	int fc_regions_size;
+	int fc_regions_used;
+	int fc_regions_valid;
+	int *fc_modified_inodes;
+	int fc_modified_inodes_used;
+	int fc_modified_inodes_size;
+};
+
+struct ext4_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count_lo;
+	__le32 s_r_blocks_count_lo;
+	__le32 s_free_blocks_count_lo;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_cluster_size;
+	__le32 s_blocks_per_group;
+	__le32 s_clusters_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__le16 s_reserved_gdt_blocks;
+	__u8 s_journal_uuid[16];
+	__le32 s_journal_inum;
+	__le32 s_journal_dev;
+	__le32 s_last_orphan;
+	__le32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_jnl_backup_type;
+	__le16 s_desc_size;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__le32 s_mkfs_time;
+	__le32 s_jnl_blocks[17];
+	__le32 s_blocks_count_hi;
+	__le32 s_r_blocks_count_hi;
+	__le32 s_free_blocks_count_hi;
+	__le16 s_min_extra_isize;
+	__le16 s_want_extra_isize;
+	__le32 s_flags;
+	__le16 s_raid_stride;
+	__le16 s_mmp_update_interval;
+	__le64 s_mmp_block;
+	__le32 s_raid_stripe_width;
+	__u8 s_log_groups_per_flex;
+	__u8 s_checksum_type;
+	__u8 s_encryption_level;
+	__u8 s_reserved_pad;
+	__le64 s_kbytes_written;
+	__le32 s_snapshot_inum;
+	__le32 s_snapshot_id;
+	__le64 s_snapshot_r_blocks_count;
+	__le32 s_snapshot_list;
+	__le32 s_error_count;
+	__le32 s_first_error_time;
+	__le32 s_first_error_ino;
+	__le64 s_first_error_block;
+	__u8 s_first_error_func[32];
+	__le32 s_first_error_line;
+	__le32 s_last_error_time;
+	__le32 s_last_error_ino;
+	__le32 s_last_error_line;
+	__le64 s_last_error_block;
+	__u8 s_last_error_func[32];
+	__u8 s_mount_opts[64];
+	__le32 s_usr_quota_inum;
+	__le32 s_grp_quota_inum;
+	__le32 s_overhead_clusters;
+	__le32 s_backup_bgs[2];
+	__u8 s_encrypt_algos[4];
+	__u8 s_encrypt_pw_salt[16];
+	__le32 s_lpf_ino;
+	__le32 s_prj_quota_inum;
+	__le32 s_checksum_seed;
+	__u8 s_wtime_hi;
+	__u8 s_mtime_hi;
+	__u8 s_mkfs_time_hi;
+	__u8 s_lastcheck_hi;
+	__u8 s_first_error_time_hi;
+	__u8 s_last_error_time_hi;
+	__u8 s_first_error_errcode;
+	__u8 s_last_error_errcode;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
+	__le32 s_checksum;
+};
+
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
+struct mb_cache;
+
+struct ext4_group_info;
+
+struct ext4_locality_group;
+
+struct ext4_li_request;
+
+struct ext4_sb_info {
+	long unsigned int s_desc_size;
+	long unsigned int s_inodes_per_block;
+	long unsigned int s_blocks_per_group;
+	long unsigned int s_clusters_per_group;
+	long unsigned int s_inodes_per_group;
+	long unsigned int s_itb_per_group;
+	long unsigned int s_gdb_count;
+	long unsigned int s_desc_per_block;
+	ext4_group_t s_groups_count;
+	ext4_group_t s_blockfile_groups;
+	long unsigned int s_overhead;
+	unsigned int s_cluster_ratio;
+	unsigned int s_cluster_bits;
+	loff_t s_bitmap_maxbytes;
+	struct buffer_head *s_sbh;
+	struct ext4_super_block *s_es;
+	struct buffer_head **s_group_desc;
+	unsigned int s_mount_opt;
+	unsigned int s_mount_opt2;
+	long unsigned int s_mount_flags;
+	unsigned int s_def_mount_opt;
+	ext4_fsblk_t s_sb_block;
+	atomic64_t s_resv_clusters;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	short unsigned int s_mount_state;
+	short unsigned int s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_inode_goal;
+	u32 s_hash_seed[4];
+	int s_def_hash_version;
+	int s_hash_unsigned;
+	struct percpu_counter s_freeclusters_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
+	struct blockgroup_lock *s_blockgroup_lock;
+	struct proc_dir_entry *s_proc;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
+	struct journal_s *s_journal;
+	long unsigned int s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
+	long unsigned int s_commit_interval;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	struct block_device *s_journal_bdev;
+	char *s_qf_names[3];
+	int s_jquota_fmt;
+	unsigned int s_want_extra_isize;
+	struct ext4_system_blocks *s_system_blks;
+	struct ext4_group_info ***s_group_info;
+	struct inode *s_buddy_cache;
+	spinlock_t s_md_lock;
+	short unsigned int *s_mb_offsets;
+	unsigned int *s_mb_maxs;
+	unsigned int s_group_info_size;
+	unsigned int s_mb_free_pending;
+	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct list_head *s_mb_avg_fragment_size;
+	rwlock_t *s_mb_avg_fragment_size_locks;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
+	long unsigned int s_stripe;
+	unsigned int s_mb_max_linear_groups;
+	unsigned int s_mb_stream_request;
+	unsigned int s_mb_max_to_scan;
+	unsigned int s_mb_min_to_scan;
+	unsigned int s_mb_stats;
+	unsigned int s_mb_order2_reqs;
+	unsigned int s_mb_group_prealloc;
+	unsigned int s_mb_max_inode_prealloc;
+	unsigned int s_max_dir_size_kb;
+	long unsigned int s_mb_last_group;
+	long unsigned int s_mb_last_start;
+	unsigned int s_mb_prefetch;
+	unsigned int s_mb_prefetch_limit;
+	atomic_t s_bal_reqs;
+	atomic_t s_bal_success;
+	atomic_t s_bal_allocated;
+	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_groups_scanned;
+	atomic_t s_bal_goals;
+	atomic_t s_bal_breaks;
+	atomic_t s_bal_2orders;
+	atomic_t s_bal_cr0_bad_suggestions;
+	atomic_t s_bal_cr1_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[4];
+	atomic64_t s_bal_cX_hits[4];
+	atomic64_t s_bal_cX_failed[4];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
+	atomic_t s_mb_lost_chunks;
+	atomic_t s_mb_preallocated;
+	atomic_t s_mb_discarded;
+	atomic_t s_lock_busy;
+	struct ext4_locality_group *s_locality_groups;
+	long unsigned int s_sectors_written_start;
+	u64 s_kbytes_written;
+	unsigned int s_extent_max_zeroout_kb;
+	unsigned int s_log_groups_per_flex;
+	struct flex_groups **s_flex_groups;
+	ext4_group_t s_flex_groups_allocated;
+	struct workqueue_struct *rsv_conversion_wq;
+	struct timer_list s_err_report;
+	struct ext4_li_request *s_li_request;
+	unsigned int s_li_wait_mult;
+	struct task_struct *s_mmp_tsk;
+	long unsigned int s_last_trim_minblks;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_csum_seed;
+	struct shrinker s_es_shrinker;
+	struct list_head s_es_list;
+	long int s_es_nr_inode;
+	struct ext4_es_stats s_es_stats;
+	struct mb_cache *s_ea_block_cache;
+	struct mb_cache *s_ea_inode_cache;
+	long: 64;
+	long: 64;
+	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
+	struct ratelimit_state s_err_ratelimit_state;
+	struct ratelimit_state s_warning_ratelimit_state;
+	struct ratelimit_state s_msg_ratelimit_state;
+	atomic_t s_warning_count;
+	atomic_t s_msg_count;
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+	struct percpu_rw_semaphore s_writepages_rwsem;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+	errseq_t s_bdev_wb_err;
+	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_error_work;
+	atomic_t s_fc_subtid;
+	struct list_head s_fc_q[2];
+	struct list_head s_fc_dentry_q[2];
+	unsigned int s_fc_bytes;
+	spinlock_t s_fc_lock;
+	struct buffer_head *s_fc_bh;
+	struct ext4_fc_stats s_fc_stats;
+	tid_t s_fc_ineligible_tid;
+	struct ext4_fc_replay_state s_fc_replay_state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ext4_group_info {
+	long unsigned int bb_state;
+	struct rb_root bb_free_root;
+	ext4_grpblk_t bb_first_free;
+	ext4_grpblk_t bb_free;
+	ext4_grpblk_t bb_fragments;
+	int bb_avg_fragment_size_order;
+	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
+	struct list_head bb_prealloc_list;
+	struct rw_semaphore alloc_sem;
+	struct list_head bb_avg_fragment_size_node;
+	struct list_head bb_largest_free_order_node;
+	ext4_grpblk_t bb_counters[0];
+};
+
+enum ext4_li_mode {
+	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+	EXT4_LI_MODE_ITABLE = 1,
+};
+
+struct ext4_li_request {
+	struct super_block *lr_super;
+	enum ext4_li_mode lr_mode;
+	ext4_group_t lr_first_not_zeroed;
+	ext4_group_t lr_next_group;
+	struct list_head lr_request;
+	long unsigned int lr_next_sched;
+	long unsigned int lr_timeout;
+};
+
+struct jbd2_journal_handle;
+
+typedef struct jbd2_journal_handle handle_t;
+
+struct jbd2_journal_handle {
+	union {
+		transaction_t *h_transaction;
+		journal_t *h_journal;
+	};
+	handle_t *h_rsv_handle;
+	int h_total_credits;
+	int h_revoke_credits;
+	int h_revoke_credits_requested;
+	int h_ref;
+	int h_err;
+	unsigned int h_sync: 1;
+	unsigned int h_jdata: 1;
+	unsigned int h_reserved: 1;
+	unsigned int h_aborted: 1;
+	unsigned int h_type: 8;
+	unsigned int h_line_no: 16;
+	long unsigned int h_start_jiffies;
+	unsigned int h_requested_credits;
+	unsigned int saved_alloc_context;
+};
+
+enum jbd_state_bits {
+	BH_JBD = 16,
+	BH_JWrite = 17,
+	BH_Freed = 18,
+	BH_Revoked = 19,
+	BH_RevokeValid = 20,
+	BH_JBDDirty = 21,
+	BH_JournalHead = 22,
+	BH_Shadow = 23,
+	BH_Verified = 24,
+	BH_JBDPrivateStart = 25,
+};
+
+struct ext4_allocation_request {
+	struct inode *inode;
+	unsigned int len;
+	ext4_lblk_t logical;
+	ext4_lblk_t lleft;
+	ext4_lblk_t lright;
+	ext4_fsblk_t goal;
+	ext4_fsblk_t pleft;
+	ext4_fsblk_t pright;
+	unsigned int flags;
+};
+
+struct extent_status {
+	struct rb_node rb_node;
+	ext4_lblk_t es_lblk;
+	ext4_lblk_t es_len;
+	ext4_fsblk_t es_pblk;
+};
+
+struct ext4_es_tree {
+	struct rb_root root;
+	struct extent_status *cache_es;
+};
+
+struct ext4_pending_tree {
+	struct rb_root root;
+};
+
+struct ext4_inode_info {
+	__le32 i_data[15];
+	__u32 i_dtime;
+	ext4_fsblk_t i_file_acl;
+	ext4_group_t i_block_group;
+	ext4_lblk_t i_dir_start_lookup;
+	long unsigned int i_flags;
+	struct rw_semaphore xattr_sem;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
+	struct list_head i_fc_list;
+	ext4_lblk_t i_fc_lblk_start;
+	ext4_lblk_t i_fc_lblk_len;
+	atomic_t i_fc_updates;
+	wait_queue_head_t i_fc_wait;
+	struct mutex i_fc_lock;
+	loff_t i_disksize;
+	struct rw_semaphore i_data_sem;
+	struct inode vfs_inode;
+	struct jbd2_inode *jinode;
+	spinlock_t i_raw_lock;
+	struct timespec64 i_crtime;
+	atomic_t i_prealloc_active;
+	struct list_head i_prealloc_list;
+	spinlock_t i_prealloc_lock;
+	struct ext4_es_tree i_es_tree;
+	rwlock_t i_es_lock;
+	struct list_head i_es_list;
+	unsigned int i_es_all_nr;
+	unsigned int i_es_shk_nr;
+	ext4_lblk_t i_es_shrink_lblk;
+	ext4_group_t i_last_alloc_group;
+	unsigned int i_reserved_data_blocks;
+	struct ext4_pending_tree i_pending_tree;
+	__u16 i_extra_isize;
+	u16 i_inline_off;
+	u16 i_inline_size;
+	qsize_t i_reserved_quota;
+	spinlock_t i_completed_io_lock;
+	struct list_head i_rsv_conversion_list;
+	struct work_struct i_rsv_conversion_work;
+	atomic_t i_unwritten;
+	spinlock_t i_block_reservation_lock;
+	tid_t i_sync_tid;
+	tid_t i_datasync_tid;
+	struct dquot *i_dquot[3];
+	__u32 i_csum_seed;
+	kprojid_t i_projid;
+};
+
+struct ext4_locality_group {
+	struct mutex lg_mutex;
+	struct list_head lg_prealloc_list[10];
+	spinlock_t lg_prealloc_lock;
+};
+
+struct ext4_map_blocks {
+	ext4_fsblk_t m_pblk;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+};
+
+typedef enum {
+	EXT4_IGET_NORMAL = 0,
+	EXT4_IGET_SPECIAL = 1,
+	EXT4_IGET_HANDLE = 2,
+	EXT4_IGET_BAD = 4,
+} ext4_iget_flags;
+
+struct ext4_system_zone {
+	struct rb_node node;
+	ext4_fsblk_t start_blk;
+	unsigned int count;
+	u32 ino;
+};
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+enum {
+	EXT4_INODE_SECRM = 0,
+	EXT4_INODE_UNRM = 1,
+	EXT4_INODE_COMPR = 2,
+	EXT4_INODE_SYNC = 3,
+	EXT4_INODE_IMMUTABLE = 4,
+	EXT4_INODE_APPEND = 5,
+	EXT4_INODE_NODUMP = 6,
+	EXT4_INODE_NOATIME = 7,
+	EXT4_INODE_DIRTY = 8,
+	EXT4_INODE_COMPRBLK = 9,
+	EXT4_INODE_NOCOMPR = 10,
+	EXT4_INODE_ENCRYPT = 11,
+	EXT4_INODE_INDEX = 12,
+	EXT4_INODE_IMAGIC = 13,
+	EXT4_INODE_JOURNAL_DATA = 14,
+	EXT4_INODE_NOTAIL = 15,
+	EXT4_INODE_DIRSYNC = 16,
+	EXT4_INODE_TOPDIR = 17,
+	EXT4_INODE_HUGE_FILE = 18,
+	EXT4_INODE_EXTENTS = 19,
+	EXT4_INODE_VERITY = 20,
+	EXT4_INODE_EA_INODE = 21,
+	EXT4_INODE_DAX = 25,
+	EXT4_INODE_INLINE_DATA = 28,
+	EXT4_INODE_PROJINHERIT = 29,
+	EXT4_INODE_CASEFOLD = 30,
+	EXT4_INODE_RESERVED = 31,
+};
+
+enum {
+	EXT4_FC_REASON_XATTR = 0,
+	EXT4_FC_REASON_CROSS_RENAME = 1,
+	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
+	EXT4_FC_REASON_NOMEM = 3,
+	EXT4_FC_REASON_SWAP_BOOT = 4,
+	EXT4_FC_REASON_RESIZE = 5,
+	EXT4_FC_REASON_RENAME_DIR = 6,
+	EXT4_FC_REASON_FALLOC_RANGE = 7,
+	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
+	EXT4_FC_REASON_ENCRYPTED_FILENAME = 9,
+	EXT4_FC_REASON_MAX = 10,
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
+struct ext4_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[255];
+};
+
+struct fname;
+
+struct dir_private_info {
+	struct rb_root root;
+	struct rb_node *curr_node;
+	struct fname *extra_fname;
+	loff_t last_pos;
+	__u32 curr_hash;
+	__u32 curr_minor_hash;
+	__u32 next_hash;
+};
+
+struct fname {
+	__u32 hash;
+	__u32 minor_hash;
+	struct rb_node rb_hash;
+	struct fname *next;
+	__u32 inode;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
+};
+
+enum {
+	ES_WRITTEN_B = 0,
+	ES_UNWRITTEN_B = 1,
+	ES_DELAYED_B = 2,
+	ES_HOLE_B = 3,
+	ES_REFERENCED_B = 4,
+	ES_FLAGS = 5,
+};
+
+struct pending_reservation {
+	struct rb_node rb_node;
+	ext4_lblk_t lclu;
+};
+
+enum {
+	EXT4_STATE_JDATA = 0,
+	EXT4_STATE_NEW = 1,
+	EXT4_STATE_XATTR = 2,
+	EXT4_STATE_NO_EXPAND = 3,
+	EXT4_STATE_DA_ALLOC_CLOSE = 4,
+	EXT4_STATE_EXT_MIGRATE = 5,
+	EXT4_STATE_NEWENTRY = 6,
+	EXT4_STATE_MAY_INLINE_DATA = 7,
+	EXT4_STATE_EXT_PRECACHED = 8,
+	EXT4_STATE_LUSTRE_EA_INODE = 9,
+	EXT4_STATE_VERITY_IN_PROGRESS = 10,
+	EXT4_STATE_FC_COMMITTING = 11,
+	EXT4_STATE_ORPHAN_FILE = 12,
+};
+
+struct rsvd_count {
+	int ndelonly;
+	bool first_do_lblk_found;
+	ext4_lblk_t first_do_lblk;
+	ext4_lblk_t last_do_lblk;
+	struct extent_status *left_es;
+	bool partial;
+	ext4_lblk_t lclu;
+};
+
+struct fsmap {
+	__u32 fmr_device;
+	__u32 fmr_flags;
+	__u64 fmr_physical;
+	__u64 fmr_owner;
+	__u64 fmr_offset;
+	__u64 fmr_length;
+	__u64 fmr_reserved[3];
+};
+
+struct ext4_fsmap {
+	struct list_head fmr_list;
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	uint64_t fmr_length;
+};
+
+struct ext4_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct ext4_fsmap fmh_keys[2];
+};
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+struct ext4_getfsmap_info {
+	struct ext4_fsmap_head *gfi_head;
+	ext4_fsmap_format_t gfi_formatter;
+	void *gfi_format_arg;
+	ext4_fsblk_t gfi_next_fsblk;
+	u32 gfi_dev;
+	ext4_group_t gfi_agno;
+	struct ext4_fsmap gfi_low;
+	struct ext4_fsmap gfi_high;
+	struct ext4_fsmap gfi_lastfree;
+	struct list_head gfi_meta_list;
+	bool gfi_last;
+};
+
+struct ext4_getfsmap_dev {
+	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+	u32 gfd_dev;
+};
+
+struct dx_hash_info {
+	u32 hash;
+	u32 minor_hash;
+	int hash_version;
+	u32 *seed;
+};
+
+struct fscrypt_info;
+
+enum SHIFT_DIRECTION {
+	SHIFT_LEFT = 0,
+	SHIFT_RIGHT = 1,
+};
+
+struct ext4_io_end_vec {
+	struct list_head list;
+	loff_t offset;
+	ssize_t size;
+};
+
+struct ext4_io_end {
+	struct list_head list;
+	handle_t *handle;
+	struct inode *inode;
+	struct bio *bio;
+	unsigned int flag;
+	refcount_t count;
+	struct list_head list_vec;
+};
+
+typedef struct ext4_io_end ext4_io_end_t;
+
+struct ext4_iloc {
+	struct buffer_head *bh;
+	long unsigned int offset;
+	ext4_group_t block_group;
+};
+
+struct ext4_extent_tail {
+	__le32 et_checksum;
+};
+
+struct ext4_extent {
+	__le32 ee_block;
+	__le16 ee_len;
+	__le16 ee_start_hi;
+	__le32 ee_start_lo;
+};
+
+struct ext4_extent_idx {
+	__le32 ei_block;
+	__le32 ei_leaf_lo;
+	__le16 ei_leaf_hi;
+	__u16 ei_unused;
+};
+
+struct ext4_extent_header {
+	__le16 eh_magic;
+	__le16 eh_entries;
+	__le16 eh_max;
+	__le16 eh_depth;
+	__le32 eh_generation;
+};
+
+struct ext4_ext_path {
+	ext4_fsblk_t p_block;
+	__u16 p_depth;
+	__u16 p_maxdepth;
+	struct ext4_extent *p_ext;
+	struct ext4_extent_idx *p_idx;
+	struct ext4_extent_header *p_hdr;
+	struct buffer_head *p_bh;
+};
+
+struct partial_cluster {
+	ext4_fsblk_t pclu;
+	ext4_lblk_t lblk;
+	enum {
+		initial = 0,
+		tofree = 1,
+		nofree = 2,
+	} state;
+};
+
+enum {
+	EXT4_MF_MNTDIR_SAMPLED = 0,
+	EXT4_MF_FS_ABORTED = 1,
+	EXT4_MF_FC_INELIGIBLE = 2,
+};
+
+typedef __kernel_mode_t mode_t;
+
+struct ext4_inode {
+	__le16 i_mode;
+	__le16 i_uid;
+	__le32 i_size_lo;
+	__le32 i_atime;
+	__le32 i_ctime;
+	__le32 i_mtime;
+	__le32 i_dtime;
+	__le16 i_gid;
+	__le16 i_links_count;
+	__le32 i_blocks_lo;
+	__le32 i_flags;
+	union {
+		struct {
+			__le32 l_i_version;
+		} linux1;
+		struct {
+			__u32 h_i_translator;
+		} hurd1;
+		struct {
+			__u32 m_i_reserved1;
+		} masix1;
+	} osd1;
+	__le32 i_block[15];
+	__le32 i_generation;
+	__le32 i_file_acl_lo;
+	__le32 i_size_high;
+	__le32 i_obso_faddr;
+	union {
+		struct {
+			__le16 l_i_blocks_high;
+			__le16 l_i_file_acl_high;
+			__le16 l_i_uid_high;
+			__le16 l_i_gid_high;
+			__le16 l_i_checksum_lo;
+			__le16 l_i_reserved;
+		} linux2;
+		struct {
+			__le16 h_i_reserved1;
+			__u16 h_i_mode_high;
+			__u16 h_i_uid_high;
+			__u16 h_i_gid_high;
+			__u32 h_i_author;
+		} hurd2;
+		struct {
+			__le16 h_i_reserved1;
+			__le16 m_i_file_acl_high;
+			__u32 m_i_reserved2[2];
+		} masix2;
+	} osd2;
+	__le16 i_extra_isize;
+	__le16 i_checksum_hi;
+	__le32 i_ctime_extra;
+	__le32 i_mtime_extra;
+	__le32 i_atime_extra;
+	__le32 i_crtime;
+	__le32 i_crtime_extra;
+	__le32 i_version_hi;
+	__le32 i_projid;
+};
+
+struct orlov_stats {
+	__u64 free_clusters;
+	__u32 free_inodes;
+	__u32 used_dirs;
+};
+
+typedef struct {
+	__le32 *p;
+	__le32 key;
+	struct buffer_head *bh;
+} Indirect;
+
+struct ext4_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	struct dx_hash_info hinfo;
+};
+
+struct ext4_xattr_ibody_header {
+	__le32 h_magic;
+};
+
+struct ext4_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_inum;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct ext4_xattr_info {
+	const char *name;
+	const void *value;
+	size_t value_len;
+	int name_index;
+	int in_inode;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
+struct fstrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 minlen;
+};
+
+struct ext4_new_group_input {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 unused;
+};
+
+struct compat_ext4_new_group_input {
+	u32 group;
+	compat_u64 block_bitmap;
+	compat_u64 inode_bitmap;
+	compat_u64 inode_table;
+	u32 blocks_count;
+	u16 reserved_blocks;
+	u16 unused;
+};
+
+struct ext4_new_group_data {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 mdata_blocks;
+	__u32 free_clusters_count;
+};
+
+struct fsuuid {
+	__u32 fsu_len;
+	__u32 fsu_flags;
+	__u8 fsu_uuid[0];
+};
+
+struct move_extent {
+	__u32 reserved;
+	__u32 donor_fd;
+	__u64 orig_start;
+	__u64 donor_start;
+	__u64 len;
+	__u64 moved_len;
+};
+
+struct fsmap_head {
+	__u32 fmh_iflags;
+	__u32 fmh_oflags;
+	__u32 fmh_count;
+	__u32 fmh_entries;
+	__u64 fmh_reserved[6];
+	struct fsmap fmh_keys[2];
+	struct fsmap fmh_recs[0];
+};
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
+struct getfsmap_info {
+	struct super_block *gi_sb;
+	struct fsmap_head *gi_data;
+	unsigned int gi_idx;
+	__u32 gi_last_flags;
+};
+
+typedef short unsigned int __kernel_uid16_t;
+
+typedef short unsigned int __kernel_gid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+struct ext4_io_submit {
+	struct writeback_control *io_wbc;
+	struct bio *io_bio;
+	ext4_io_end_t *io_end;
+	sector_t io_next_block;
+};
+
+struct ext4_xattr_inode_array {
+	unsigned int count;
+	struct inode *inodes[0];
+};
+
+struct mpage_da_data {
+	struct inode *inode;
+	struct writeback_control *wbc;
+	unsigned int can_map: 1;
+	long unsigned int first_page;
+	long unsigned int next_page;
+	long unsigned int last_page;
+	struct ext4_map_blocks map;
+	struct ext4_io_submit io_submit;
+	unsigned int do_map: 1;
+	unsigned int scanned_until_end: 1;
+};
+
+struct fsverity_info;
+
+struct migrate_struct {
+	ext4_lblk_t first_block;
+	ext4_lblk_t last_block;
+	ext4_lblk_t curr_block;
+	ext4_fsblk_t first_pblock;
+	ext4_fsblk_t last_pblock;
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_DEF_MAX_SECTORS = 2560,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+struct ext4_free_data {
+	struct list_head efd_list;
+	struct rb_node efd_node;
+	ext4_group_t efd_group;
+	ext4_grpblk_t efd_start_cluster;
+	ext4_grpblk_t efd_count;
+	tid_t efd_tid;
+};
+
+struct ext4_prealloc_space {
+	struct list_head pa_inode_list;
+	struct list_head pa_group_list;
+	union {
+		struct list_head pa_tmp_list;
+		struct callback_head pa_rcu;
+	} u;
+	spinlock_t pa_lock;
+	atomic_t pa_count;
+	unsigned int pa_deleted;
+	ext4_fsblk_t pa_pstart;
+	ext4_lblk_t pa_lstart;
+	ext4_grpblk_t pa_len;
+	ext4_grpblk_t pa_free;
+	short unsigned int pa_type;
+	spinlock_t *pa_obj_lock;
+	struct inode *pa_inode;
+};
+
+enum {
+	MB_INODE_PA = 0,
+	MB_GROUP_PA = 1,
+};
+
+struct ext4_free_extent {
+	ext4_lblk_t fe_logical;
+	ext4_grpblk_t fe_start;
+	ext4_group_t fe_group;
+	ext4_grpblk_t fe_len;
+};
+
+struct ext4_allocation_context {
+	struct inode *ac_inode;
+	struct super_block *ac_sb;
+	struct ext4_free_extent ac_o_ex;
+	struct ext4_free_extent ac_g_ex;
+	struct ext4_free_extent ac_b_ex;
+	struct ext4_free_extent ac_f_ex;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
+	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
+	__u16 ac_found;
+	__u16 ac_tail;
+	__u16 ac_buddy;
+	__u8 ac_status;
+	__u8 ac_criteria;
+	__u8 ac_2order;
+	__u8 ac_op;
+	struct page *ac_bitmap_page;
+	struct page *ac_buddy_page;
+	struct ext4_prealloc_space *ac_pa;
+	struct ext4_locality_group *ac_lg;
+};
+
+struct ext4_buddy {
+	struct page *bd_buddy_page;
+	void *bd_buddy;
+	struct page *bd_bitmap_page;
+	void *bd_bitmap;
+	struct ext4_group_info *bd_info;
+	struct super_block *bd_sb;
+	__u16 bd_blkbits;
+	ext4_group_t bd_group;
+};
+
+struct sg {
+	struct ext4_group_info info;
+	ext4_grpblk_t counters[18];
+};
+
+struct mmp_struct {
+	__le32 mmp_magic;
+	__le32 mmp_seq;
+	__le64 mmp_time;
+	char mmp_nodename[64];
+	char mmp_bdevname[32];
+	__le16 mmp_check_interval;
+	__le16 mmp_pad1;
+	__le32 mmp_pad2[226];
+	__le32 mmp_checksum;
+};
+
+struct fscrypt_name {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	u32 hash;
+	u32 minor_hash;
+	struct fscrypt_str crypto_buf;
+	bool is_nokey_name;
+};
+
+struct ext4_dir_entry {
+	__le32 inode;
+	__le16 rec_len;
+	__le16 name_len;
+	char name[255];
+};
+
+struct ext4_dir_entry_tail {
+	__le32 det_reserved_zero1;
+	__le16 det_rec_len;
+	__u8 det_reserved_zero2;
+	__u8 det_reserved_ft;
+	__le32 det_checksum;
+};
+
+typedef enum {
+	EITHER = 0,
+	INDEX = 1,
+	DIRENT = 2,
+	DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+struct fake_dirent {
+	__le32 inode;
+	__le16 rec_len;
+	u8 name_len;
+	u8 file_type;
+};
+
+struct dx_countlimit {
+	__le16 limit;
+	__le16 count;
+};
+
+struct dx_entry {
+	__le32 hash;
+	__le32 block;
+};
+
+struct dx_root_info {
+	__le32 reserved_zero;
+	u8 hash_version;
+	u8 info_length;
+	u8 indirect_levels;
+	u8 unused_flags;
+};
+
+struct dx_root {
+	struct fake_dirent dot;
+	char dot_name[4];
+	struct fake_dirent dotdot;
+	char dotdot_name[4];
+	struct dx_root_info info;
+	struct dx_entry entries[0];
+};
+
+struct dx_node {
+	struct fake_dirent fake;
+	struct dx_entry entries[0];
+};
+
+struct dx_frame {
+	struct buffer_head *bh;
+	struct dx_entry *entries;
+	struct dx_entry *at;
+};
+
+struct dx_map_entry {
+	u32 hash;
+	u16 offs;
+	u16 size;
+};
+
+struct dx_tail {
+	u32 dt_reserved;
+	__le32 dt_checksum;
+};
+
+struct ext4_renament {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool is_dir;
+	int dir_nlink_delta;
+	struct buffer_head *bh;
+	struct ext4_dir_entry_2 *de;
+	int inlined;
+	struct buffer_head *dir_bh;
+	struct ext4_dir_entry_2 *parent_de;
+	int dir_inlined;
+};
+
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT = 1,
+	STEP_VERITY = 2,
+	STEP_MAX = 3,
+};
+
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
+};
+
+enum {
+	BLOCK_BITMAP = 0,
+	INODE_BITMAP = 1,
+	INODE_TABLE = 2,
+	GROUP_TABLE_COUNT = 3,
+};
+
+struct ext4_rcu_ptr {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct ext4_new_flex_group_data {
+	struct ext4_new_group_data *groups;
+	__u16 *bg_flags;
+	ext4_group_t count;
+};
+
+struct disk_stats {
+	u64 nsecs[4];
+	long unsigned int sectors[4];
+	long unsigned int ios[4];
+	long unsigned int merges[4];
+	long unsigned int io_ticks;
+	local_t in_flight[2];
+};
+
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
+};
+
+enum {
+	attr_noop = 0,
+	attr_delayed_allocation_blocks = 1,
+	attr_session_write_kbytes = 2,
+	attr_lifetime_write_kbytes = 3,
+	attr_reserved_clusters = 4,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
+};
+
+enum {
+	ptr_explicit = 0,
+	ptr_ext4_sb_info_offset = 1,
+	ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_attr {
+	struct attribute attr;
+	short int attr_id;
+	short int attr_ptr;
+	short unsigned int attr_size;
+	union {
+		int offset;
+		void *explicit_ptr;
+	} u;
+};
+
+struct ext4_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__le32 h_checksum;
+	__u32 h_reserved[3];
+};
+
+struct ext4_xattr_block_find {
+	struct ext4_xattr_search s;
+	struct buffer_head *bh;
+};
+
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext4_acl_entry;
+
+typedef struct {
+	__le32 a_version;
+} ext4_acl_header;
+
+struct ext4_fc_tl {
+	__le16 fc_tag;
+	__le16 fc_len;
+};
+
+struct ext4_fc_head {
+	__le32 fc_features;
+	__le32 fc_tid;
+};
+
+struct ext4_fc_add_range {
+	__le32 fc_ino;
+	__u8 fc_ex[12];
+};
+
+struct ext4_fc_del_range {
+	__le32 fc_ino;
+	__le32 fc_lblk;
+	__le32 fc_len;
+};
+
+struct ext4_fc_dentry_info {
+	__le32 fc_parent_ino;
+	__le32 fc_ino;
+	__u8 fc_dname[0];
+};
+
+struct ext4_fc_inode {
+	__le32 fc_ino;
+	__u8 fc_raw_inode[0];
+};
+
+struct ext4_fc_tail {
+	__le32 fc_tid;
+	__le32 fc_crc;
+};
+
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
+struct ext4_fc_dentry_update {
+	int fcd_op;
+	int fcd_parent;
+	int fcd_ino;
+	struct qstr fcd_name;
+	unsigned char fcd_iname[32];
+	struct list_head fcd_list;
+	struct list_head fcd_dilist;
+};
+
+struct __track_dentry_update_args {
+	struct dentry *dentry;
+	int op;
+};
+
+struct __track_range_args {
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+};
+
+struct dentry_info_args {
+	int parent_ino;
+	int dname_len;
+	int ino;
+	int inode_len;
+	char *dname;
+};
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+};
+
+struct dax_holder_operations {
+	int (*notify_failure)(struct dax_device *, u64, u64, int);
+};
+
+enum {
+	I_DATA_SEM_NORMAL = 0,
+	I_DATA_SEM_OTHER = 1,
+	I_DATA_SEM_QUOTA = 2,
+};
+
+struct ext4_lazy_init {
+	long unsigned int li_state;
+	struct list_head li_request_list;
+	struct mutex li_list_mtx;
+};
+
+struct ext4_journal_cb_entry {
+	struct list_head jce_list;
+	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
+};
+
+struct trace_event_raw_ext4_other_inode_update_time {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t orig_ino;
+	uid_t uid;
+	gid_t gid;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	uid_t uid;
+	gid_t gid;
+	__u64 blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_evict_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int nlink;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_drop_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int drop;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_nfs_commit_metadata {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mark_inode_dirty {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int ip;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_begin_ordered_truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	long unsigned int writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char range_cyclic;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int first_page;
+	long int nr_to_write;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 lblk;
+	__u32 len;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages_result {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	int pages_written;
+	long int pages_skipped;
+	long unsigned int writeback_index;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__page_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int index;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_invalidate_folio_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int index;
+	size_t offset;
+	size_t length;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 blk;
+	__u64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mb_new_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 pa_pstart;
+	__u64 pa_lstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_inode_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	__u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_group_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 pa_pstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	unsigned int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	long unsigned int count;
+	int flags;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	int datasync;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_alloc_da_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int data_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_alloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 goal_logical;
+	int goal_start;
+	__u32 goal_group;
+	int goal_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	__u16 found;
+	__u16 groups;
+	__u16 buddy;
+	__u16 flags;
+	__u16 tail;
+	__u8 cr;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_prealloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mballoc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_forget {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	int is_metadata;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_update_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int used_blocks;
+	int reserved_data_blocks;
+	int quota_claim;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_release_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int freed_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_read_block_bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	bool prefetch;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__fallocate_mode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	int mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fallocate_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	loff_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	ext4_lblk_t i_lblk;
+	unsigned int i_len;
+	ext4_fsblk_t i_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int flags;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int mflags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_load_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_load_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_inode {
+	struct trace_entry ent;
+	long unsigned int ino;
+	dev_t dev;
+	long unsigned int ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_reserved {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int ip;
+	int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__trim {
+	struct trace_entry ent;
+	int dev_major;
+	int dev_minor;
+	__u32 group;
+	int start;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_handle_unwritten_extents {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	unsigned int allocated;
+	ext4_fsblk_t newblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_get_implied_cluster_alloc_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_show_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	short unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_remove_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t from;
+	ext4_lblk_t to;
+	ext4_fsblk_t ee_pblk;
+	ext4_lblk_t ee_lblk;
+	short unsigned int ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_leaf {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t ee_lblk;
+	ext4_fsblk_t ee_pblk;
+	short int ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_idx {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space_done {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	short unsigned int eh_entries;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_remove_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t lblk;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	int found;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_shrink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_to_scan;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_collapse_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_insert_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	long long unsigned int scan_time;
+	int nr_skipped;
+	int retried;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_insert_delayed_block {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	bool allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u32 agno;
+	u64 bno;
+	u64 len;
+	u64 owner;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_getfsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u64 block;
+	u64 len;
+	u64 owner;
+	u64 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_error {
+	struct trace_entry ent;
+	dev_t dev;
+	const char *function;
+	unsigned int line;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_prefetch_bitmaps {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	__u32 next;
+	__u32 ios;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_lazy_itable_init {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay_scan {
+	struct trace_entry ent;
+	dev_t dev;
+	int error;
+	int off;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay {
+	struct trace_entry ent;
+	dev_t dev;
+	int tag;
+	int ino;
+	int priv1;
+	int priv2;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_start {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_stop {
+	struct trace_entry ent;
+	dev_t dev;
+	int nblks;
+	int reason;
+	int num_fc;
+	int num_fc_ineligible;
+	int nblks_agg;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int fc_ineligible_rc[10];
+	long unsigned int fc_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_numblks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_dentry {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_range {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	long int start;
+	long int end;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ext4_other_inode_update_time {};
+
+struct trace_event_data_offsets_ext4_free_inode {};
+
+struct trace_event_data_offsets_ext4_request_inode {};
+
+struct trace_event_data_offsets_ext4_allocate_inode {};
+
+struct trace_event_data_offsets_ext4_evict_inode {};
+
+struct trace_event_data_offsets_ext4_drop_inode {};
+
+struct trace_event_data_offsets_ext4_nfs_commit_metadata {};
+
+struct trace_event_data_offsets_ext4_mark_inode_dirty {};
+
+struct trace_event_data_offsets_ext4_begin_ordered_truncate {};
+
+struct trace_event_data_offsets_ext4__write_begin {};
+
+struct trace_event_data_offsets_ext4__write_end {};
+
+struct trace_event_data_offsets_ext4_writepages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages_extent {};
+
+struct trace_event_data_offsets_ext4_writepages_result {};
+
+struct trace_event_data_offsets_ext4__page_op {};
+
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
+
+struct trace_event_data_offsets_ext4_discard_blocks {};
+
+struct trace_event_data_offsets_ext4__mb_new_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_inode_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_group_pa {};
+
+struct trace_event_data_offsets_ext4_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_mb_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_request_blocks {};
+
+struct trace_event_data_offsets_ext4_allocate_blocks {};
+
+struct trace_event_data_offsets_ext4_free_blocks {};
+
+struct trace_event_data_offsets_ext4_sync_file_enter {};
+
+struct trace_event_data_offsets_ext4_sync_file_exit {};
+
+struct trace_event_data_offsets_ext4_sync_fs {};
+
+struct trace_event_data_offsets_ext4_alloc_da_blocks {};
+
+struct trace_event_data_offsets_ext4_mballoc_alloc {};
+
+struct trace_event_data_offsets_ext4_mballoc_prealloc {};
+
+struct trace_event_data_offsets_ext4__mballoc {};
+
+struct trace_event_data_offsets_ext4_forget {};
+
+struct trace_event_data_offsets_ext4_da_update_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_release_space {};
+
+struct trace_event_data_offsets_ext4__bitmap_load {};
+
+struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
+
+struct trace_event_data_offsets_ext4__fallocate_mode {};
+
+struct trace_event_data_offsets_ext4_fallocate_exit {};
+
+struct trace_event_data_offsets_ext4_unlink_enter {};
+
+struct trace_event_data_offsets_ext4_unlink_exit {};
+
+struct trace_event_data_offsets_ext4__truncate {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};
+
+struct trace_event_data_offsets_ext4__map_blocks_enter {};
+
+struct trace_event_data_offsets_ext4__map_blocks_exit {};
+
+struct trace_event_data_offsets_ext4_ext_load_extent {};
+
+struct trace_event_data_offsets_ext4_load_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_sb {};
+
+struct trace_event_data_offsets_ext4_journal_start_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_reserved {};
+
+struct trace_event_data_offsets_ext4__trim {};
+
+struct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};
+
+struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
+
+struct trace_event_data_offsets_ext4_ext_show_extent {};
+
+struct trace_event_data_offsets_ext4_remove_blocks {};
+
+struct trace_event_data_offsets_ext4_ext_rm_leaf {};
+
+struct trace_event_data_offsets_ext4_ext_rm_idx {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space_done {};
+
+struct trace_event_data_offsets_ext4__es_extent {};
+
+struct trace_event_data_offsets_ext4_es_remove_extent {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_enter {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_exit {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_enter {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_exit {};
+
+struct trace_event_data_offsets_ext4__es_shrink_enter {};
+
+struct trace_event_data_offsets_ext4_es_shrink_scan_exit {};
+
+struct trace_event_data_offsets_ext4_collapse_range {};
+
+struct trace_event_data_offsets_ext4_insert_range {};
+
+struct trace_event_data_offsets_ext4_es_shrink {};
+
+struct trace_event_data_offsets_ext4_es_insert_delayed_block {};
+
+struct trace_event_data_offsets_ext4_fsmap_class {};
+
+struct trace_event_data_offsets_ext4_getfsmap_class {};
+
+struct trace_event_data_offsets_ext4_shutdown {};
+
+struct trace_event_data_offsets_ext4_error {};
+
+struct trace_event_data_offsets_ext4_prefetch_bitmaps {};
+
+struct trace_event_data_offsets_ext4_lazy_itable_init {};
+
+struct trace_event_data_offsets_ext4_fc_replay_scan {};
+
+struct trace_event_data_offsets_ext4_fc_replay {};
+
+struct trace_event_data_offsets_ext4_fc_commit_start {};
+
+struct trace_event_data_offsets_ext4_fc_commit_stop {};
+
+struct trace_event_data_offsets_ext4_fc_stats {};
+
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
+
+struct trace_event_data_offsets_ext4_fc_track_inode {};
+
+struct trace_event_data_offsets_ext4_fc_track_range {};
+
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
+typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
+
+typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, long unsigned int);
+
+typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
+
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, long unsigned int, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);
+
+typedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);
+
+typedef void (*btf_trace_ext4_writepage)(void *, struct page *);
+
+typedef void (*btf_trace_ext4_readpage)(void *, struct page *);
+
+typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
+
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
+
+typedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, long long unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);
+
+typedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, long long unsigned int);
+
+typedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, long unsigned int, int);
+
+typedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);
+
+typedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);
+
+typedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);
+
+typedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, long unsigned int);
+
+typedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, long unsigned int);
+
+typedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, long unsigned int);
+
+typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);
+
+typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);
+
+typedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_load_inode)(void *, struct super_block *, long unsigned int);
+
+typedef void (*btf_trace_ext4_journal_start_sb)(void *, struct super_block *, int, int, int, int, long unsigned int);
+
+typedef void (*btf_trace_ext4_journal_start_inode)(void *, struct inode *, int, int, int, int, long unsigned int);
+
+typedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, long unsigned int);
+
+typedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
+
+typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);
+
+typedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);
+
+typedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);
+
+typedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);
+
+typedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);
+
+typedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, long unsigned int);
+
+typedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);
+
+typedef void (*btf_trace_ext4_prefetch_bitmaps)(void *, struct super_block *, ext4_group_t, ext4_group_t, unsigned int);
+
+typedef void (*btf_trace_ext4_lazy_itable_init)(void *, struct super_block *, ext4_group_t);
+
+typedef void (*btf_trace_ext4_fc_replay_scan)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
+
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
+
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
+
+typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
+
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long int, long int, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
+
+enum {
+	Opt_bsd_df = 0,
+	Opt_minix_df = 1,
+	Opt_grpid = 2,
+	Opt_nogrpid = 3,
+	Opt_resgid = 4,
+	Opt_resuid = 5,
+	Opt_sb = 6,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_acl = 11,
+	Opt_auto_da_alloc = 12,
+	Opt_noauto_da_alloc = 13,
+	Opt_noload = 14,
+	Opt_commit = 15,
+	Opt_min_batch_time = 16,
+	Opt_max_batch_time = 17,
+	Opt_journal_dev = 18,
+	Opt_journal_path = 19,
+	Opt_journal_checksum = 20,
+	Opt_journal_async_commit = 21,
+	Opt_abort = 22,
+	Opt_data_journal = 23,
+	Opt_data_ordered = 24,
+	Opt_data_writeback = 25,
+	Opt_data_err_abort = 26,
+	Opt_data_err_ignore = 27,
+	Opt_test_dummy_encryption = 28,
+	Opt_inlinecrypt = 29,
+	Opt_usrjquota = 30,
+	Opt_grpjquota = 31,
+	Opt_quota = 32,
+	Opt_noquota = 33,
+	Opt_barrier = 34,
+	Opt_nobarrier = 35,
+	Opt_err___2 = 36,
+	Opt_usrquota = 37,
+	Opt_grpquota = 38,
+	Opt_prjquota = 39,
+	Opt_dax = 40,
+	Opt_dax_always = 41,
+	Opt_dax_inode = 42,
+	Opt_dax_never = 43,
+	Opt_stripe = 44,
+	Opt_delalloc = 45,
+	Opt_nodelalloc = 46,
+	Opt_warn_on_error = 47,
+	Opt_nowarn_on_error = 48,
+	Opt_mblk_io_submit = 49,
+	Opt_debug_want_extra_isize = 50,
+	Opt_nomblk_io_submit = 51,
+	Opt_block_validity = 52,
+	Opt_noblock_validity = 53,
+	Opt_inode_readahead_blks = 54,
+	Opt_journal_ioprio = 55,
+	Opt_dioread_nolock = 56,
+	Opt_dioread_lock = 57,
+	Opt_discard = 58,
+	Opt_nodiscard = 59,
+	Opt_init_itable = 60,
+	Opt_noinit_itable = 61,
+	Opt_max_dir_size_kb = 62,
+	Opt_nojournal_checksum = 63,
+	Opt_nombcache = 64,
+	Opt_no_prefetch_block_bitmaps = 65,
+	Opt_mb_optimize_scan = 66,
+	Opt_errors = 67,
+	Opt_data = 68,
+	Opt_data_err = 69,
+	Opt_jqfmt = 70,
+	Opt_dax_type = 71,
+};
+
+struct mount_opts {
+	int token;
+	int mount_opt;
+	int flags;
+};
+
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	int s_jquota_fmt;
+	short unsigned int qname_spec;
+	long unsigned int vals_s_flags;
+	long unsigned int mask_s_flags;
+	long unsigned int journal_devnum;
+	long unsigned int s_commit_interval;
+	long unsigned int s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	long unsigned int vals_s_mount_flags;
+	long unsigned int mask_s_mount_flags;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
+};
+
+struct ext4_mount_options {
+	long unsigned int s_mount_opt;
+	long unsigned int s_mount_opt2;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	long unsigned int s_commit_interval;
+	u32 s_min_batch_time;
+	u32 s_max_batch_time;
+	int s_jquota_fmt;
+	char *s_qf_names[3];
+};
+
+struct commit_header {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+	unsigned char h_chksum_type;
+	unsigned char h_chksum_size;
+	unsigned char h_padding[2];
+	__be32 h_chksum[8];
+	__be64 h_commit_sec;
+	__be32 h_commit_nsec;
+};
+
+struct journal_block_tag3_s {
+	__be32 t_blocknr;
+	__be32 t_flags;
+	__be32 t_blocknr_high;
+	__be32 t_checksum;
+};
+
+typedef struct journal_block_tag3_s journal_block_tag3_t;
+
+struct journal_block_tag_s {
+	__be32 t_blocknr;
+	__be16 t_checksum;
+	__be16 t_flags;
+	__be32 t_blocknr_high;
+};
+
+typedef struct journal_block_tag_s journal_block_tag_t;
+
+struct jbd2_journal_block_tail {
+	__be32 t_checksum;
+};
+
+struct jbd2_journal_revoke_header_s {
+	journal_header_t r_header;
+	__be32 r_count;
+};
+
+typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+
+struct recovery_info {
+	tid_t start_transaction;
+	tid_t end_transaction;
+	int nr_replays;
+	int nr_revokes;
+	int nr_revoke_hits;
+};
+
+struct jbd2_revoke_table_s {
+	int hash_size;
+	int hash_shift;
+	struct list_head *hash_table;
+};
+
+struct jbd2_revoke_record_s {
+	struct list_head hash;
+	tid_t sequence;
+	long long unsigned int blocknr;
+};
+
+struct meta_entry {
+	u64 data_block;
+	unsigned int index_block;
+	short unsigned int offset;
+	short unsigned int pad;
+};
+
+struct meta_index {
+	unsigned int inode_number;
+	unsigned int offset;
+	short unsigned int entries;
+	short unsigned int skip;
+	short unsigned int locked;
+	short unsigned int pad;
+	struct meta_entry meta_entry[127];
+};
+
+struct squashfs_cache_entry;
+
+struct squashfs_cache {
+	char *name;
+	int entries;
+	int curr_blk;
+	int next_blk;
+	int num_waiters;
+	int unused;
+	int block_size;
+	int pages;
+	spinlock_t lock;
+	wait_queue_head_t wait_queue;
+	struct squashfs_cache_entry *entry;
+};
+
+struct squashfs_page_actor;
+
+struct squashfs_cache_entry {
+	u64 block;
+	int length;
+	int refcount;
+	u64 next_index;
+	int pending;
+	int error;
+	int num_waiters;
+	wait_queue_head_t wait_queue;
+	struct squashfs_cache *cache;
+	void **data;
+	struct squashfs_page_actor *actor;
+};
+
+struct squashfs_page_actor {
+	union {
+		void **buffer;
+		struct page **page;
+	};
+	void *pageaddr;
+	void *tmp_buffer;
+	void * (*squashfs_first_page)(struct squashfs_page_actor *);
+	void * (*squashfs_next_page)(struct squashfs_page_actor *);
+	void (*squashfs_finish_page)(struct squashfs_page_actor *);
+	struct page *last_page;
+	int pages;
+	int length;
+	int next_page;
+	int alloc_buffer;
+	int returned_pages;
+	long unsigned int next_index;
+};
+
+struct squashfs_decompressor;
+
+struct squashfs_decompressor_thread_ops;
+
+struct squashfs_sb_info {
+	const struct squashfs_decompressor *decompressor;
+	int devblksize;
+	int devblksize_log2;
+	struct squashfs_cache *block_cache;
+	struct squashfs_cache *fragment_cache;
+	struct squashfs_cache *read_page;
+	int next_meta_index;
+	__le64 *id_table;
+	__le64 *fragment_index;
+	__le64 *xattr_id_table;
+	struct mutex meta_index_mutex;
+	struct meta_index *meta_index;
+	void *stream;
+	__le64 *inode_lookup_table;
+	u64 inode_table;
+	u64 directory_table;
+	u64 xattr_table;
+	unsigned int block_size;
+	short unsigned int block_log;
+	long long int bytes_used;
+	unsigned int inodes;
+	unsigned int fragments;
+	unsigned int xattr_ids;
+	unsigned int ids;
+	bool panic_on_errors;
+	const struct squashfs_decompressor_thread_ops *thread_ops;
+	int max_thread_num;
+};
+
+struct squashfs_decompressor {
+	void * (*init)(struct squashfs_sb_info *, void *);
+	void * (*comp_opts)(struct squashfs_sb_info *, void *, int);
+	void (*free)(void *);
+	int (*decompress)(struct squashfs_sb_info *, void *, struct bio *, int, int, struct squashfs_page_actor *);
+	int id;
+	char *name;
+	int alloc_buffer;
+	int supported;
+};
+
+struct squashfs_decompressor_thread_ops {
+	void * (*create)(struct squashfs_sb_info *, void *);
+	void (*destroy)(struct squashfs_sb_info *);
+	int (*decompress)(struct squashfs_sb_info *, struct bio *, int, int, struct squashfs_page_actor *);
+	int (*max_decompressors)();
+};
+
+struct squashfs_dir_index {
+	__le32 index;
+	__le32 start_block;
+	__le32 size;
+	unsigned char name[0];
+};
+
+struct squashfs_dir_entry {
+	__le16 offset;
+	__le16 inode_number;
+	__le16 type;
+	__le16 size;
+	char name[0];
+};
+
+struct squashfs_dir_header {
+	__le32 count;
+	__le32 start_block;
+	__le32 inode_number;
+};
+
+struct squashfs_inode_info {
+	u64 start;
+	int offset;
+	u64 xattr;
+	unsigned int xattr_size;
+	int xattr_count;
+	union {
+		struct {
+			u64 fragment_block;
+			int fragment_size;
+			int fragment_offset;
+			u64 block_list_start;
+		};
+		struct {
+			u64 dir_idx_start;
+			int dir_idx_offset;
+			int dir_idx_cnt;
+			int parent;
+		};
+	};
+	struct inode vfs_inode;
+};
+
+struct trace_event_raw_jbd2_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_end_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	tid_t head;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_submit_inode_data {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_start_class {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_extend {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int buffer_credits;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int interval;
+	int sync;
+	int requested_blocks;
+	int dirtied_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_run_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	long unsigned int wait;
+	long unsigned int request_delay;
+	long unsigned int running;
+	long unsigned int locked;
+	long unsigned int flushing;
+	long unsigned int logging;
+	__u32 handle_count;
+	__u32 blocks;
+	__u32 blocks_logged;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_checkpoint_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	long unsigned int chp_time;
+	__u32 forced_to_close;
+	__u32 written;
+	__u32 dropped;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_update_log_tail {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tail_sequence;
+	tid_t first_tid;
+	long unsigned int block_nr;
+	long unsigned int freed;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_write_superblock {
+	struct trace_entry ent;
+	dev_t dev;
+	blk_opf_t write_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_lock_buffer_stall {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int stall_ms;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_shrunk;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	long unsigned int nr_freed;
+	long unsigned int nr_scanned;
+	tid_t next_tid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_jbd2_checkpoint {};
+
+struct trace_event_data_offsets_jbd2_commit {};
+
+struct trace_event_data_offsets_jbd2_end_commit {};
+
+struct trace_event_data_offsets_jbd2_submit_inode_data {};
+
+struct trace_event_data_offsets_jbd2_handle_start_class {};
+
+struct trace_event_data_offsets_jbd2_handle_extend {};
+
+struct trace_event_data_offsets_jbd2_handle_stats {};
+
+struct trace_event_data_offsets_jbd2_run_stats {};
+
+struct trace_event_data_offsets_jbd2_checkpoint_stats {};
+
+struct trace_event_data_offsets_jbd2_update_log_tail {};
+
+struct trace_event_data_offsets_jbd2_write_superblock {};
+
+struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
+
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
+typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
+
+typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
+
+typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int);
+
+typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int, int, int);
+
+typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, tid_t, struct transaction_run_stats_s *);
+
+typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, tid_t, struct transaction_chp_stats_s *);
+
+typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, blk_opf_t);
+
+typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, long unsigned int, long unsigned int, tid_t);
+
+struct jbd2_stats_proc_session {
+	journal_t *journal;
+	struct transaction_stats_s *stats;
+	int start;
+	int max;
+};
+
+struct squashfs_fragment_entry {
+	__le64 start_block;
+	__le32 size;
+	unsigned int unused;
+};
+
+struct squashfs_base_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+};
+
+struct squashfs_ipc_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+};
+
+struct squashfs_lipc_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 xattr;
+};
+
+struct squashfs_dev_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 rdev;
+};
+
+struct squashfs_ldev_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 rdev;
+	__le32 xattr;
+};
+
+struct squashfs_symlink_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 symlink_size;
+	char symlink[0];
+};
+
+struct squashfs_reg_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 start_block;
+	__le32 fragment;
+	__le32 offset;
+	__le32 file_size;
+	__le16 block_list[0];
+};
+
+struct squashfs_lreg_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le64 start_block;
+	__le64 file_size;
+	__le64 sparse;
+	__le32 nlink;
+	__le32 fragment;
+	__le32 offset;
+	__le32 xattr;
+	__le16 block_list[0];
+};
+
+struct squashfs_dir_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 start_block;
+	__le32 nlink;
+	__le16 file_size;
+	__le16 offset;
+	__le32 parent_inode;
+};
+
+struct squashfs_ldir_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 file_size;
+	__le32 start_block;
+	__le32 parent_inode;
+	__le16 i_count;
+	__le16 offset;
+	__le32 xattr;
+	struct squashfs_dir_index index[0];
+};
+
+union squashfs_inode {
+	struct squashfs_base_inode base;
+	struct squashfs_dev_inode dev;
+	struct squashfs_ldev_inode ldev;
+	struct squashfs_symlink_inode symlink;
+	struct squashfs_reg_inode reg;
+	struct squashfs_lreg_inode lreg;
+	struct squashfs_dir_inode dir;
+	struct squashfs_ldir_inode ldir;
+	struct squashfs_ipc_inode ipc;
+	struct squashfs_lipc_inode lipc;
+};
+
+enum Opt_errors {
+	Opt_errors_continue = 0,
+	Opt_errors_panic = 1,
+};
+
+enum squashfs_param {
+	Opt_errors___2 = 0,
+	Opt_threads = 1,
+};
+
+struct squashfs_mount_opts {
+	enum Opt_errors errors;
+	const struct squashfs_decompressor_thread_ops *thread_ops;
+	int thread_num;
+};
+
+struct squashfs_stream {
+	void *stream;
+	struct mutex mutex;
+};
+
+struct squashfs_xattr_id {
+	__le64 xattr;
+	__le32 count;
+	__le32 size;
+};
+
+struct squashfs_xattr_id_table {
+	__le64 xattr_table_start;
+	__le32 xattr_ids;
+	__le32 unused;
+};
+
+struct squashfs_xattr_entry {
+	__le16 type;
+	__le16 size;
+	char data[0];
+};
+
+struct squashfs_xattr_val {
+	__le32 vsize;
+	char value[0];
+};
+
+struct squashfs_lzo {
+	void *input;
+	void *output;
+};
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+struct xz_dec;
+
+struct squashfs_xz {
+	struct xz_dec *state;
+	struct xz_buf buf;
+};
+
+struct disk_comp_opts {
+	__le32 dictionary_size;
+	__le32 flags;
+};
+
+struct comp_opts {
+	int dict_size;
+};
+
+struct lz4_comp_opts {
+	__le32 version;
+	__le32 flags;
+};
+
+struct squashfs_lz4 {
+	void *input;
+	void *output;
+};
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+struct workspace {
+	void *mem;
+	size_t mem_size;
+	size_t window_size;
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+enum ramfs_param {
+	Opt_mode___3 = 0,
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+struct fat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	short unsigned int fs_fmask;
+	short unsigned int fs_dmask;
+	short unsigned int codepage;
+	int time_offset;
+	char *iocharset;
+	short unsigned int shortname;
+	unsigned char name_check;
+	unsigned char errors;
+	unsigned char nfs;
+	short unsigned int allow_utime;
+	unsigned int quiet: 1;
+	unsigned int showexec: 1;
+	unsigned int sys_immutable: 1;
+	unsigned int dotsOK: 1;
+	unsigned int isvfat: 1;
+	unsigned int utf8: 1;
+	unsigned int unicode_xlate: 1;
+	unsigned int numtail: 1;
+	unsigned int flush: 1;
+	unsigned int nocase: 1;
+	unsigned int usefree: 1;
+	unsigned int tz_set: 1;
+	unsigned int rodir: 1;
+	unsigned int discard: 1;
+	unsigned int dos1xfloppy: 1;
+};
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+	short unsigned int sec_per_clus;
+	short unsigned int cluster_bits;
+	unsigned int cluster_size;
+	unsigned char fats;
+	unsigned char fat_bits;
+	short unsigned int fat_start;
+	long unsigned int fat_length;
+	long unsigned int dir_start;
+	short unsigned int dir_entries;
+	long unsigned int data_start;
+	long unsigned int max_cluster;
+	long unsigned int root_cluster;
+	long unsigned int fsinfo_sector;
+	struct mutex fat_lock;
+	struct mutex nfs_build_inode_lock;
+	struct mutex s_lock;
+	unsigned int prev_free;
+	unsigned int free_clusters;
+	unsigned int free_clus_valid;
+	struct fat_mount_options options;
+	struct nls_table *nls_disk;
+	struct nls_table *nls_io;
+	const void *dir_ops;
+	int dir_per_block;
+	int dir_per_block_bits;
+	unsigned int vol_id;
+	int fatent_shift;
+	const struct fatent_operations *fatent_ops;
+	struct inode *fat_inode;
+	struct inode *fsinfo_inode;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+	spinlock_t dir_hash_lock;
+	struct hlist_head dir_hashtable[256];
+	unsigned int dirty;
+	struct callback_head rcu;
+};
+
+struct fat_entry;
+
+struct fatent_operations {
+	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
+	void (*ent_set_ptr)(struct fat_entry *, int);
+	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
+	int (*ent_get)(struct fat_entry *);
+	void (*ent_put)(struct fat_entry *, int);
+	int (*ent_next)(struct fat_entry *);
+};
+
+struct msdos_inode_info {
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t mmu_private;
+	int i_start;
+	int i_logstart;
+	int i_attrs;
+	loff_t i_pos;
+	struct hlist_node i_fat_hash;
+	struct hlist_node i_dir_hash;
+	struct rw_semaphore truncate_lock;
+	struct timespec64 i_crtime;
+	struct inode vfs_inode;
+};
+
+struct fat_entry {
+	int entry;
+	union {
+		u8 *ent12_p[2];
+		__le16 *ent16_p;
+		__le32 *ent32_p;
+	} u;
+	int nr_bhs;
+	struct buffer_head *bhs[2];
+	struct inode *fat_inode;
+};
+
+struct fat_cache {
+	struct list_head cache_list;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct fat_cache_id {
+	unsigned int id;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct compat_dirent {
+	u32 d_ino;
+	compat_off_t d_off;
+	u16 d_reclen;
+	char d_name[256];
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+struct __fat_dirent {
+	long int d_ino;
+	__kernel_off_t d_off;
+	short unsigned int d_reclen;
+	char d_name[256];
+};
+
+struct msdos_dir_entry {
+	__u8 name[11];
+	__u8 attr;
+	__u8 lcase;
+	__u8 ctime_cs;
+	__le16 ctime;
+	__le16 cdate;
+	__le16 adate;
+	__le16 starthi;
+	__le16 time;
+	__le16 date;
+	__le16 start;
+	__le32 size;
+};
+
+struct msdos_dir_slot {
+	__u8 id;
+	__u8 name0_4[10];
+	__u8 attr;
+	__u8 reserved;
+	__u8 alias_checksum;
+	__u8 name5_10[12];
+	__le16 start;
+	__u8 name11_12[4];
+};
+
+struct fat_slot_info {
+	loff_t i_pos;
+	loff_t slot_off;
+	int nr_slots;
+	struct msdos_dir_entry *de;
+	struct buffer_head *bh;
+};
+
+typedef long long unsigned int llu;
+
+enum {
+	PARSE_INVALID = 1,
+	PARSE_NOT_LONGNAME = 2,
+	PARSE_EOF = 3,
+};
+
+struct fat_ioctl_filldir_callback {
+	struct dir_context ctx;
+	void *dirent;
+	int result;
+	const char *longname;
+	int long_len;
+	const char *shortname;
+	int short_len;
+};
+
+struct fatent_ra {
+	sector_t cur;
+	sector_t limit;
+	unsigned int ra_blocks;
+	sector_t ra_advance;
+	sector_t ra_next;
+	sector_t ra_limit;
+};
+
+enum hugetlbfs_size_type {
+	NO_SIZE = 0,
+	SIZE_STD = 1,
+	SIZE_PERCENT = 2,
+};
+
+struct hugetlbfs_fs_context {
+	struct hstate *hstate;
+	long long unsigned int max_size_opt;
+	long long unsigned int min_size_opt;
+	long int max_hpages;
+	long int nr_inodes;
+	long int min_hpages;
+	enum hugetlbfs_size_type max_val_type;
+	enum hugetlbfs_size_type min_val_type;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum hugetlb_param {
+	Opt_gid___4 = 0,
+	Opt_min_size = 1,
+	Opt_mode___4 = 2,
+	Opt_nr_inodes___2 = 3,
+	Opt_pagesize = 4,
+	Opt_size___2 = 5,
+	Opt_uid___3 = 6,
+};
+
+struct fat_boot_fsinfo {
+	__le32 signature1;
+	__le32 reserved1[120];
+	__le32 signature2;
+	__le32 free_clusters;
+	__le32 next_cluster;
+	__le32 reserved2[4];
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct fat_bios_param_block {
+	u16 fat_sector_size;
+	u8 fat_sec_per_clus;
+	u16 fat_reserved;
+	u8 fat_fats;
+	u16 fat_dir_entries;
+	u16 fat_sectors;
+	u16 fat_fat_length;
+	u32 fat_total_sect;
+	u8 fat16_state;
+	u32 fat16_vol_id;
+	u32 fat32_length;
+	u32 fat32_root_cluster;
+	u16 fat32_info_sector;
+	u8 fat32_state;
+	u32 fat32_vol_id;
+};
+
+struct fat_floppy_defaults {
+	unsigned int nr_sectors;
+	unsigned int sec_per_clus;
+	unsigned int dir_entries;
+	unsigned int media;
+	unsigned int fat_length;
+};
+
+enum {
+	Opt_check_n = 0,
+	Opt_check_r = 1,
+	Opt_check_s = 2,
+	Opt_uid___4 = 3,
+	Opt_gid___5 = 4,
+	Opt_umask = 5,
+	Opt_dmask = 6,
+	Opt_fmask = 7,
+	Opt_allow_utime = 8,
+	Opt_codepage = 9,
+	Opt_usefree = 10,
+	Opt_nocase = 11,
+	Opt_quiet = 12,
+	Opt_showexec = 13,
+	Opt_debug___2 = 14,
+	Opt_immutable = 15,
+	Opt_dots = 16,
+	Opt_nodots = 17,
+	Opt_charset = 18,
+	Opt_shortname_lower = 19,
+	Opt_shortname_win95 = 20,
+	Opt_shortname_winnt = 21,
+	Opt_shortname_mixed = 22,
+	Opt_utf8_no = 23,
+	Opt_utf8_yes = 24,
+	Opt_uni_xl_no = 25,
+	Opt_uni_xl_yes = 26,
+	Opt_nonumtail_no = 27,
+	Opt_nonumtail_yes = 28,
+	Opt_obsolete = 29,
+	Opt_flush = 30,
+	Opt_tz_utc = 31,
+	Opt_rodir = 32,
+	Opt_err_cont = 33,
+	Opt_err_panic = 34,
+	Opt_err_ro = 35,
+	Opt_discard___2 = 36,
+	Opt_nfs = 37,
+	Opt_time_offset = 38,
+	Opt_nfs_stale_rw = 39,
+	Opt_nfs_nostale_ro = 40,
+	Opt_err___3 = 41,
+	Opt_dos1xfloppy = 42,
+};
+
+struct shortname_info {
+	unsigned char lower: 1;
+	unsigned char upper: 1;
+	unsigned char valid: 1;
+};
+
+struct fat_fid {
+	u32 i_gen;
+	u32 i_pos_low;
+	u16 i_pos_hi;
+	u16 parent_i_pos_hi;
+	u32 parent_i_pos_low;
+	u32 parent_i_gen;
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+struct cdrom_msf0 {
+	__u8 minute;
+	__u8 second;
+	__u8 frame;
+};
+
+union cdrom_addr {
+	struct cdrom_msf0 msf;
+	int lba;
+};
+
+struct cdrom_tocentry {
+	__u8 cdte_track;
+	__u8 cdte_adr: 4;
+	__u8 cdte_ctrl: 4;
+	__u8 cdte_format;
+	union cdrom_addr cdte_addr;
+	__u8 cdte_datamode;
+};
+
+struct cdrom_multisession {
+	union cdrom_addr addr;
+	__u8 xa_flag;
+	__u8 addr_format;
+};
+
+struct cdrom_mcn {
+	__u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct scsi_sense_hdr *sshdr;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	void *reserved[1];
+};
+
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+	const struct cdrom_device_ops *ops;
+	struct list_head list;
+	struct gendisk *disk;
+	void *handle;
+	int mask;
+	int speed;
+	int capacity;
+	unsigned int options: 30;
+	unsigned int mc_flags: 2;
+	unsigned int vfs_events;
+	unsigned int ioctl_events;
+	int use_count;
+	char name[20];
+	__u8 sanyo_slot: 2;
+	__u8 keeplocked: 1;
+	__u8 reserved: 5;
+	int cdda_method;
+	__u8 last_sense;
+	__u8 media_written;
+	short unsigned int mmc3_profile;
+	int for_data;
+	int (*exit)(struct cdrom_device_info *);
+	int mrw_mode_page;
+	__s64 last_media_change_ms;
+};
+
+struct cdrom_device_ops {
+	int (*open)(struct cdrom_device_info *, int);
+	void (*release)(struct cdrom_device_info *);
+	int (*drive_status)(struct cdrom_device_info *, int);
+	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+	int (*tray_move)(struct cdrom_device_info *, int);
+	int (*lock_door)(struct cdrom_device_info *, int);
+	int (*select_speed)(struct cdrom_device_info *, int);
+	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+	int (*reset)(struct cdrom_device_info *);
+	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+	int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+	const int capability;
+};
+
+struct iso_volume_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 data[2041];
+};
+
+struct iso_primary_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 unused1[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 unused3[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 opt_type_l_path_table[4];
+	__u8 type_m_path_table[4];
+	__u8 opt_type_m_path_table[4];
+	__u8 root_directory_record[34];
+	char volume_set_id[128];
+	char publisher_id[128];
+	char preparer_id[128];
+	char application_id[128];
+	char copyright_file_id[37];
+	char abstract_file_id[37];
+	char bibliographic_file_id[37];
+	__u8 creation_date[17];
+	__u8 modification_date[17];
+	__u8 expiration_date[17];
+	__u8 effective_date[17];
+	__u8 file_structure_version[1];
+	__u8 unused4[1];
+	__u8 application_data[512];
+	__u8 unused5[653];
+};
+
+struct iso_supplementary_descriptor {
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 flags[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 escape[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 opt_type_l_path_table[4];
+	__u8 type_m_path_table[4];
+	__u8 opt_type_m_path_table[4];
+	__u8 root_directory_record[34];
+	char volume_set_id[128];
+	char publisher_id[128];
+	char preparer_id[128];
+	char application_id[128];
+	char copyright_file_id[37];
+	char abstract_file_id[37];
+	char bibliographic_file_id[37];
+	__u8 creation_date[17];
+	__u8 modification_date[17];
+	__u8 expiration_date[17];
+	__u8 effective_date[17];
+	__u8 file_structure_version[1];
+	__u8 unused4[1];
+	__u8 application_data[512];
+	__u8 unused5[653];
+};
+
+struct hs_volume_descriptor {
+	__u8 foo[8];
+	__u8 type[1];
+	char id[5];
+	__u8 version[1];
+	__u8 data[2033];
+};
+
+struct hs_primary_descriptor {
+	__u8 foo[8];
+	__u8 type[1];
+	__u8 id[5];
+	__u8 version[1];
+	__u8 unused1[1];
+	char system_id[32];
+	char volume_id[32];
+	__u8 unused2[8];
+	__u8 volume_space_size[8];
+	__u8 unused3[32];
+	__u8 volume_set_size[4];
+	__u8 volume_sequence_number[4];
+	__u8 logical_block_size[4];
+	__u8 path_table_size[8];
+	__u8 type_l_path_table[4];
+	__u8 unused4[28];
+	__u8 root_directory_record[34];
+};
+
+struct iso_directory_record {
+	__u8 length[1];
+	__u8 ext_attr_length[1];
+	__u8 extent[8];
+	__u8 size[8];
+	__u8 date[7];
+	__u8 flags[1];
+	__u8 file_unit_size[1];
+	__u8 interleave[1];
+	__u8 volume_sequence_number[4];
+	__u8 name_len[1];
+	char name[0];
+};
+
+enum isofs_file_format {
+	isofs_file_normal = 0,
+	isofs_file_sparse = 1,
+	isofs_file_compressed = 2,
+};
+
+struct iso_inode_info {
+	long unsigned int i_iget5_block;
+	long unsigned int i_iget5_offset;
+	unsigned int i_first_extent;
+	unsigned char i_file_format;
+	unsigned char i_format_parm[3];
+	long unsigned int i_next_section_block;
+	long unsigned int i_next_section_offset;
+	off_t i_section_size;
+	struct inode vfs_inode;
+};
+
+struct isofs_sb_info {
+	long unsigned int s_ninodes;
+	long unsigned int s_nzones;
+	long unsigned int s_firstdatazone;
+	long unsigned int s_log_zone_size;
+	long unsigned int s_max_size;
+	int s_rock_offset;
+	s32 s_sbsector;
+	unsigned char s_joliet_level;
+	unsigned char s_mapping;
+	unsigned char s_check;
+	unsigned char s_session;
+	unsigned int s_high_sierra: 1;
+	unsigned int s_rock: 2;
+	unsigned int s_cruft: 1;
+	unsigned int s_nocompress: 1;
+	unsigned int s_hide: 1;
+	unsigned int s_showassoc: 1;
+	unsigned int s_overriderockperm: 1;
+	unsigned int s_uid_set: 1;
+	unsigned int s_gid_set: 1;
+	umode_t s_fmode;
+	umode_t s_dmode;
+	kgid_t s_gid;
+	kuid_t s_uid;
+	struct nls_table *s_nls_iocharset;
+};
+
+struct iso9660_options {
+	unsigned int rock: 1;
+	unsigned int joliet: 1;
+	unsigned int cruft: 1;
+	unsigned int hide: 1;
+	unsigned int showassoc: 1;
+	unsigned int nocompress: 1;
+	unsigned int overriderockperm: 1;
+	unsigned int uid_set: 1;
+	unsigned int gid_set: 1;
+	unsigned char map;
+	unsigned char check;
+	unsigned int blocksize;
+	umode_t fmode;
+	umode_t dmode;
+	kgid_t gid;
+	kuid_t uid;
+	char *iocharset;
+	s32 session;
+	s32 sbsector;
+};
+
+enum {
+	Opt_block = 0,
+	Opt_check_r___2 = 1,
+	Opt_check_s___2 = 2,
+	Opt_cruft = 3,
+	Opt_gid___6 = 4,
+	Opt_ignore = 5,
+	Opt_iocharset = 6,
+	Opt_map_a = 7,
+	Opt_map_n = 8,
+	Opt_map_o = 9,
+	Opt_mode___5 = 10,
+	Opt_nojoliet = 11,
+	Opt_norock = 12,
+	Opt_sb___2 = 13,
+	Opt_session = 14,
+	Opt_uid___5 = 15,
+	Opt_unhide = 16,
+	Opt_utf8 = 17,
+	Opt_err___4 = 18,
+	Opt_nocompress = 19,
+	Opt_hide = 20,
+	Opt_showassoc = 21,
+	Opt_dmode = 22,
+	Opt_overriderockperm = 23,
+};
+
+struct isofs_iget5_callback_data {
+	long unsigned int block;
+	long unsigned int offset;
+};
+
+struct SU_SP_s {
+	__u8 magic[2];
+	__u8 skip;
+};
+
+struct SU_CE_s {
+	__u8 extent[8];
+	__u8 offset[8];
+	__u8 size[8];
+};
+
+struct SU_ER_s {
+	__u8 len_id;
+	__u8 len_des;
+	__u8 len_src;
+	__u8 ext_ver;
+	__u8 data[0];
+};
+
+struct RR_RR_s {
+	__u8 flags[1];
+};
+
+struct RR_PX_s {
+	__u8 mode[8];
+	__u8 n_links[8];
+	__u8 uid[8];
+	__u8 gid[8];
+};
+
+struct RR_PN_s {
+	__u8 dev_high[8];
+	__u8 dev_low[8];
+};
+
+struct SL_component {
+	__u8 flags;
+	__u8 len;
+	__u8 text[0];
+};
+
+struct RR_SL_s {
+	__u8 flags;
+	struct SL_component link;
+};
+
+struct RR_NM_s {
+	__u8 flags;
+	char name[0];
+};
+
+struct RR_CL_s {
+	__u8 location[8];
+};
+
+struct RR_PL_s {
+	__u8 location[8];
+};
+
+struct stamp {
+	__u8 time[7];
+};
+
+struct RR_TF_s {
+	__u8 flags;
+	struct stamp times[0];
+};
+
+struct RR_ZF_s {
+	__u8 algorithm[2];
+	__u8 parms[2];
+	__u8 real_size[8];
+};
+
+struct rock_ridge {
+	__u8 signature[2];
+	__u8 len;
+	__u8 version;
+	union {
+		struct SU_SP_s SP;
+		struct SU_CE_s CE;
+		struct SU_ER_s ER;
+		struct RR_RR_s RR;
+		struct RR_PX_s PX;
+		struct RR_PN_s PN;
+		struct RR_SL_s SL;
+		struct RR_NM_s NM;
+		struct RR_CL_s CL;
+		struct RR_PL_s PL;
+		struct RR_TF_s TF;
+		struct RR_ZF_s ZF;
+	} u;
+};
+
+struct rock_state {
+	void *buffer;
+	unsigned char *chr;
+	int len;
+	int cont_size;
+	int cont_extent;
+	int cont_offset;
+	int cont_loops;
+	struct inode *inode;
+};
+
+struct isofs_fid {
+	u32 block;
+	u16 offset;
+	u16 parent_offset;
+	u32 generation;
+	u32 parent_block;
+	u32 parent_generation;
+};
+
+struct rpc_task_setup {
+	struct rpc_task *task;
+	struct rpc_clnt *rpc_client;
+	struct rpc_xprt *rpc_xprt;
+	struct rpc_cred *rpc_op_cred;
+	const struct rpc_message *rpc_message;
+	const struct rpc_call_ops *callback_ops;
+	void *callback_data;
+	struct workqueue_struct *workqueue;
+	short unsigned int flags;
+	signed char priority;
+};
+
+struct nfs_page {
+	struct list_head wb_list;
+	struct page *wb_page;
+	struct nfs_lock_context *wb_lock_context;
+	long unsigned int wb_index;
+	unsigned int wb_offset;
+	unsigned int wb_pgbase;
+	unsigned int wb_bytes;
+	struct kref wb_kref;
+	long unsigned int wb_flags;
+	struct nfs_write_verifier wb_verf;
+	struct nfs_page *wb_this_page;
+	struct nfs_page *wb_head;
+	short unsigned int wb_nio;
+};
+
+struct nfs_direct_req {
+	struct kref kref;
+	struct nfs_open_context *ctx;
+	struct nfs_lock_context *l_ctx;
+	struct kiocb *iocb;
+	struct inode *inode;
+	atomic_t io_count;
+	spinlock_t lock;
+	loff_t io_start;
+	ssize_t count;
+	ssize_t max_count;
+	ssize_t bytes_left;
+	ssize_t error;
+	struct completion completion;
+	struct nfs_mds_commit_info mds_cinfo;
+	struct pnfs_ds_commit_info ds_cinfo;
+	struct work_struct work;
+	int flags;
+};
+
+struct nfs_clone_mount {
+	struct super_block *sb;
+	struct dentry *dentry;
+	struct nfs_fattr *fattr;
+	unsigned int inherited_bsize;
+};
+
+struct nfs_fs_context {
+	bool internal;
+	bool skip_reconfig_option_check;
+	bool need_mount;
+	bool sloppy;
+	unsigned int flags;
+	unsigned int rsize;
+	unsigned int wsize;
+	unsigned int timeo;
+	unsigned int retrans;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namlen;
+	unsigned int options;
+	unsigned int bsize;
+	struct nfs_auth_info auth_info;
+	rpc_authflavor_t selected_flavor;
+	char *client_address;
+	unsigned int version;
+	unsigned int minorversion;
+	char *fscache_uniq;
+	short unsigned int protofamily;
+	short unsigned int mountfamily;
+	bool has_sec_mnt_opts;
+	struct {
+		union {
+			struct sockaddr address;
+			struct __kernel_sockaddr_storage _address;
+		};
+		size_t addrlen;
+		char *hostname;
+		u32 version;
+		int port;
+		short unsigned int protocol;
+	} mount_server;
+	struct {
+		union {
+			struct sockaddr address;
+			struct __kernel_sockaddr_storage _address;
+		};
+		size_t addrlen;
+		char *hostname;
+		char *export_path;
+		int port;
+		short unsigned int protocol;
+		short unsigned int nconnect;
+		short unsigned int max_connect;
+		short unsigned int export_path_len;
+	} nfs_server;
+	struct nfs_fh *mntfh;
+	struct nfs_server *server;
+	struct nfs_subversion *nfs_mod;
+	struct nfs_clone_mount clone_data;
+};
+
+enum pnfs_iomode {
+	IOMODE_READ = 1,
+	IOMODE_RW = 2,
+	IOMODE_ANY = 3,
+};
+
+struct nfs4_deviceid {
+	char data[16];
+};
+
+struct nfs4_xdr_opaque_data;
+
+struct nfs4_xdr_opaque_ops {
+	void (*encode)(struct xdr_stream *, const void *, const struct nfs4_xdr_opaque_data *);
+	void (*free)(struct nfs4_xdr_opaque_data *);
+};
+
+struct nfs4_xdr_opaque_data {
+	const struct nfs4_xdr_opaque_ops *ops;
+	void *data;
+};
+
+struct nfs4_layoutdriver_data {
+	struct page **pages;
+	__u32 pglen;
+	__u32 len;
+};
+
+struct pnfs_layout_range {
+	u32 iomode;
+	u64 offset;
+	u64 length;
+};
+
+struct nfs4_layoutget_res {
+	struct nfs4_sequence_res seq_res;
+	int status;
+	__u32 return_on_close;
+	struct pnfs_layout_range range;
+	__u32 type;
+	nfs4_stateid stateid;
+	struct nfs4_layoutdriver_data *layoutp;
+};
+
+struct pnfs_layout_hdr {
+	refcount_t plh_refcount;
+	atomic_t plh_outstanding;
+	struct list_head plh_layouts;
+	struct list_head plh_bulk_destroy;
+	struct list_head plh_segs;
+	struct list_head plh_return_segs;
+	long unsigned int plh_block_lgets;
+	long unsigned int plh_retry_timestamp;
+	long unsigned int plh_flags;
+	nfs4_stateid plh_stateid;
+	u32 plh_barrier;
+	u32 plh_return_seq;
+	enum pnfs_iomode plh_return_iomode;
+	loff_t plh_lwb;
+	const struct cred *plh_lc_cred;
+	struct inode *plh_inode;
+	struct callback_head plh_rcu;
+};
+
+struct pnfs_device {
+	struct nfs4_deviceid dev_id;
+	unsigned int layout_type;
+	unsigned int mincount;
+	unsigned int maxcount;
+	struct page **pages;
+	unsigned int pgbase;
+	unsigned int pglen;
+	unsigned char nocache: 1;
+};
+
+struct nfs4_layoutcommit_args {
+	struct nfs4_sequence_args seq_args;
+	nfs4_stateid stateid;
+	__u64 lastbytewritten;
+	struct inode *inode;
+	const u32 *bitmask;
+	size_t layoutupdate_len;
+	struct page *layoutupdate_page;
+	struct page **layoutupdate_pages;
+	__be32 *start_p;
+};
+
+struct nfs4_layoutcommit_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	int status;
+};
+
+struct nfs4_layoutcommit_data {
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct list_head lseg_list;
+	const struct cred *cred;
+	struct inode *inode;
+	struct nfs4_layoutcommit_args args;
+	struct nfs4_layoutcommit_res res;
+};
+
+struct nfs4_layoutreturn_args {
+	struct nfs4_sequence_args seq_args;
+	struct pnfs_layout_hdr *layout;
+	struct inode *inode;
+	struct pnfs_layout_range range;
+	nfs4_stateid stateid;
+	__u32 layout_type;
+	struct nfs4_xdr_opaque_data *ld_private;
+};
+
+struct nfs42_layoutstat_devinfo;
+
+struct nfs42_layoutstat_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct inode *inode;
+	nfs4_stateid stateid;
+	int num_dev;
+	struct nfs42_layoutstat_devinfo *devinfo;
+};
+
+struct nfs42_layoutstat_devinfo {
+	struct nfs4_deviceid dev_id;
+	__u64 offset;
+	__u64 length;
+	__u64 read_count;
+	__u64 read_bytes;
+	__u64 write_count;
+	__u64 write_bytes;
+	__u32 layout_type;
+	struct nfs4_xdr_opaque_data ld_private;
+};
+
+struct pnfs_layout_segment {
+	struct list_head pls_list;
+	struct list_head pls_lc_list;
+	struct list_head pls_commits;
+	struct pnfs_layout_range pls_range;
+	refcount_t pls_refcount;
+	u32 pls_seq;
+	long unsigned int pls_flags;
+	struct pnfs_layout_hdr *pls_layout;
+};
+
+struct nfs_iostats {
+	long long unsigned int bytes[8];
+	long unsigned int events[27];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum pnfs_try_status {
+	PNFS_ATTEMPTED = 0,
+	PNFS_NOT_ATTEMPTED = 1,
+	PNFS_TRY_AGAIN = 2,
+};
+
+struct nfs_pageio_ops;
+
+struct nfs4_deviceid_node;
+
+struct pnfs_layoutdriver_type {
+	struct list_head pnfs_tblid;
+	const u32 id;
+	const char *name;
+	struct module *owner;
+	unsigned int flags;
+	unsigned int max_deviceinfo_size;
+	unsigned int max_layoutget_response;
+	int (*set_layoutdriver)(struct nfs_server *, const struct nfs_fh *);
+	int (*clear_layoutdriver)(struct nfs_server *);
+	struct pnfs_layout_hdr * (*alloc_layout_hdr)(struct inode *, gfp_t);
+	void (*free_layout_hdr)(struct pnfs_layout_hdr *);
+	struct pnfs_layout_segment * (*alloc_lseg)(struct pnfs_layout_hdr *, struct nfs4_layoutget_res *, gfp_t);
+	void (*free_lseg)(struct pnfs_layout_segment *);
+	void (*add_lseg)(struct pnfs_layout_hdr *, struct pnfs_layout_segment *, struct list_head *);
+	void (*return_range)(struct pnfs_layout_hdr *, struct pnfs_layout_range *);
+	const struct nfs_pageio_ops *pg_read_ops;
+	const struct nfs_pageio_ops *pg_write_ops;
+	struct pnfs_ds_commit_info * (*get_ds_info)(struct inode *);
+	int (*sync)(struct inode *, bool);
+	enum pnfs_try_status (*read_pagelist)(struct nfs_pgio_header *);
+	enum pnfs_try_status (*write_pagelist)(struct nfs_pgio_header *, int);
+	void (*free_deviceid_node)(struct nfs4_deviceid_node *);
+	struct nfs4_deviceid_node * (*alloc_deviceid_node)(struct nfs_server *, struct pnfs_device *, gfp_t);
+	int (*prepare_layoutreturn)(struct nfs4_layoutreturn_args *);
+	void (*cleanup_layoutcommit)(struct nfs4_layoutcommit_data *);
+	int (*prepare_layoutcommit)(struct nfs4_layoutcommit_args *);
+	int (*prepare_layoutstats)(struct nfs42_layoutstat_args *);
+	void (*cancel_io)(struct pnfs_layout_segment *);
+};
+
+struct nfs4_cached_acl;
+
+struct nfs_delegation;
+
+struct nfs4_xattr_cache;
+
+struct nfs_inode {
+	__u64 fileid;
+	struct nfs_fh fh;
+	long unsigned int flags;
+	long unsigned int cache_validity;
+	long unsigned int read_cache_jiffies;
+	long unsigned int attrtimeo;
+	long unsigned int attrtimeo_timestamp;
+	long unsigned int attr_gencount;
+	struct rb_root access_cache;
+	struct list_head access_cache_entry_lru;
+	struct list_head access_cache_inode_lru;
+	union {
+		struct {
+			long unsigned int cache_change_attribute;
+			__be32 cookieverf[2];
+			struct rw_semaphore rmdir_sem;
+		};
+		struct {
+			atomic_long_t nrequests;
+			atomic_long_t redirtied_pages;
+			struct nfs_mds_commit_info commit_info;
+			struct mutex commit_mutex;
+		};
+	};
+	struct list_head open_files;
+	struct nfs4_cached_acl *nfs4_acl;
+	struct list_head open_states;
+	struct nfs_delegation *delegation;
+	struct rw_semaphore rwsem;
+	struct pnfs_layout_hdr *layout;
+	__u64 write_io;
+	__u64 read_io;
+	struct inode vfs_inode;
+	struct nfs4_xattr_cache *xattr_cache;
+};
+
+struct nfs_delegation {
+	struct list_head super_list;
+	const struct cred *cred;
+	struct inode *inode;
+	nfs4_stateid stateid;
+	fmode_t type;
+	long unsigned int pagemod_limit;
+	__u64 change_attr;
+	long unsigned int flags;
+	refcount_t refcount;
+	spinlock_t lock;
+	struct callback_head rcu;
+};
+
+struct nfs_pageio_descriptor;
+
+struct nfs_pgio_mirror;
+
+struct nfs_pageio_ops {
+	void (*pg_init)(struct nfs_pageio_descriptor *, struct nfs_page *);
+	size_t (*pg_test)(struct nfs_pageio_descriptor *, struct nfs_page *, struct nfs_page *);
+	int (*pg_doio)(struct nfs_pageio_descriptor *);
+	unsigned int (*pg_get_mirror_count)(struct nfs_pageio_descriptor *, struct nfs_page *);
+	void (*pg_cleanup)(struct nfs_pageio_descriptor *);
+	struct nfs_pgio_mirror * (*pg_get_mirror)(struct nfs_pageio_descriptor *, u32);
+	u32 (*pg_set_mirror)(struct nfs_pageio_descriptor *, u32);
+};
+
+struct nfs_pgio_mirror {
+	struct list_head pg_list;
+	long unsigned int pg_bytes_written;
+	size_t pg_count;
+	size_t pg_bsize;
+	unsigned int pg_base;
+	unsigned char pg_recoalesce: 1;
+};
+
+struct nfs_pageio_descriptor {
+	struct inode *pg_inode;
+	const struct nfs_pageio_ops *pg_ops;
+	const struct nfs_rw_ops *pg_rw_ops;
+	int pg_ioflags;
+	int pg_error;
+	const struct rpc_call_ops *pg_rpc_callops;
+	const struct nfs_pgio_completion_ops *pg_completion_ops;
+	struct pnfs_layout_segment *pg_lseg;
+	struct nfs_io_completion *pg_io_completion;
+	struct nfs_direct_req *pg_dreq;
+	unsigned int pg_bsize;
+	u32 pg_mirror_count;
+	struct nfs_pgio_mirror *pg_mirrors;
+	struct nfs_pgio_mirror pg_mirrors_static[1];
+	struct nfs_pgio_mirror *pg_mirrors_dynamic;
+	u32 pg_mirror_idx;
+	short unsigned int pg_maxretrans;
+	unsigned char pg_moreio: 1;
+};
+
+enum nfs_stat_bytecounters {
+	NFSIOS_NORMALREADBYTES = 0,
+	NFSIOS_NORMALWRITTENBYTES = 1,
+	NFSIOS_DIRECTREADBYTES = 2,
+	NFSIOS_DIRECTWRITTENBYTES = 3,
+	NFSIOS_SERVERREADBYTES = 4,
+	NFSIOS_SERVERWRITTENBYTES = 5,
+	NFSIOS_READPAGES = 6,
+	NFSIOS_WRITEPAGES = 7,
+	__NFSIOS_BYTESMAX = 8,
+};
+
+enum nfs_stat_eventcounters {
+	NFSIOS_INODEREVALIDATE = 0,
+	NFSIOS_DENTRYREVALIDATE = 1,
+	NFSIOS_DATAINVALIDATE = 2,
+	NFSIOS_ATTRINVALIDATE = 3,
+	NFSIOS_VFSOPEN = 4,
+	NFSIOS_VFSLOOKUP = 5,
+	NFSIOS_VFSACCESS = 6,
+	NFSIOS_VFSUPDATEPAGE = 7,
+	NFSIOS_VFSREADPAGE = 8,
+	NFSIOS_VFSREADPAGES = 9,
+	NFSIOS_VFSWRITEPAGE = 10,
+	NFSIOS_VFSWRITEPAGES = 11,
+	NFSIOS_VFSGETDENTS = 12,
+	NFSIOS_VFSSETATTR = 13,
+	NFSIOS_VFSFLUSH = 14,
+	NFSIOS_VFSFSYNC = 15,
+	NFSIOS_VFSLOCK = 16,
+	NFSIOS_VFSRELEASE = 17,
+	NFSIOS_CONGESTIONWAIT = 18,
+	NFSIOS_SETATTRTRUNC = 19,
+	NFSIOS_EXTENDWRITE = 20,
+	NFSIOS_SILLYRENAME = 21,
+	NFSIOS_SHORTREAD = 22,
+	NFSIOS_SHORTWRITE = 23,
+	NFSIOS_DELAY = 24,
+	NFSIOS_PNFS_READ = 25,
+	NFSIOS_PNFS_WRITE = 26,
+	__NFSIOS_COUNTSMAX = 27,
+};
+
+enum layoutdriver_policy_flags {
+	PNFS_LAYOUTRET_ON_SETATTR = 1,
+	PNFS_LAYOUTRET_ON_ERROR = 2,
+	PNFS_READ_WHOLE_PAGE = 4,
+	PNFS_LAYOUTGET_ON_OPEN = 8,
+};
+
+struct nfs4_deviceid_node {
+	struct hlist_node node;
+	struct hlist_node tmpnode;
+	const struct pnfs_layoutdriver_type *ld;
+	const struct nfs_client *nfs_client;
+	long unsigned int flags;
+	long unsigned int timestamp_unavailable;
+	struct nfs4_deviceid deviceid;
+	struct callback_head rcu;
+	atomic_t ref;
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+struct sockaddr_in6 {
+	short unsigned int sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+enum rpc_auth_flavors {
+	RPC_AUTH_NULL = 0,
+	RPC_AUTH_UNIX = 1,
+	RPC_AUTH_SHORT = 2,
+	RPC_AUTH_DES = 3,
+	RPC_AUTH_KRB = 4,
+	RPC_AUTH_GSS = 6,
+	RPC_AUTH_TLS = 7,
+	RPC_AUTH_MAXFLAVOR = 8,
+	RPC_AUTH_GSS_KRB5 = 390003,
+	RPC_AUTH_GSS_KRB5I = 390004,
+	RPC_AUTH_GSS_KRB5P = 390005,
+	RPC_AUTH_GSS_LKEY = 390006,
+	RPC_AUTH_GSS_LKEYI = 390007,
+	RPC_AUTH_GSS_LKEYP = 390008,
+	RPC_AUTH_GSS_SPKM = 390009,
+	RPC_AUTH_GSS_SPKMI = 390010,
+	RPC_AUTH_GSS_SPKMP = 390011,
+};
+
+enum xprt_transports {
+	XPRT_TRANSPORT_UDP = 17,
+	XPRT_TRANSPORT_TCP = 6,
+	XPRT_TRANSPORT_BC_TCP = 2147483654,
+	XPRT_TRANSPORT_RDMA = 256,
+	XPRT_TRANSPORT_BC_RDMA = 2147483904,
+	XPRT_TRANSPORT_LOCAL = 257,
+};
+
+struct svc_xprt_class;
+
+struct svc_xprt_ops;
+
+struct svc_xprt {
+	struct svc_xprt_class *xpt_class;
+	const struct svc_xprt_ops *xpt_ops;
+	struct kref xpt_ref;
+	struct list_head xpt_list;
+	struct list_head xpt_ready;
+	long unsigned int xpt_flags;
+	struct svc_serv *xpt_server;
+	atomic_t xpt_reserved;
+	atomic_t xpt_nr_rqsts;
+	struct mutex xpt_mutex;
+	spinlock_t xpt_lock;
+	void *xpt_auth_cache;
+	struct list_head xpt_deferred;
+	struct __kernel_sockaddr_storage xpt_local;
+	size_t xpt_locallen;
+	struct __kernel_sockaddr_storage xpt_remote;
+	size_t xpt_remotelen;
+	char xpt_remotebuf[58];
+	struct list_head xpt_users;
+	struct net *xpt_net;
+	netns_tracker ns_tracker;
+	const struct cred *xpt_cred;
+	struct rpc_xprt *xpt_bc_xprt;
+	struct rpc_xprt_switch *xpt_bc_xps;
+};
+
+struct rpc_pipe_msg {
+	struct list_head list;
+	void *data;
+	size_t len;
+	size_t copied;
+	int errno;
+};
+
+struct rpc_pipe_ops {
+	ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char *, size_t);
+	ssize_t (*downcall)(struct file *, const char *, size_t);
+	void (*release_pipe)(struct inode *);
+	int (*open_pipe)(struct inode *);
+	void (*destroy_msg)(struct rpc_pipe_msg *);
+};
+
+struct rpc_pipe {
+	struct list_head pipe;
+	struct list_head in_upcall;
+	struct list_head in_downcall;
+	int pipelen;
+	int nreaders;
+	int nwriters;
+	int flags;
+	struct delayed_work queue_timeout;
+	const struct rpc_pipe_ops *ops;
+	spinlock_t lock;
+	struct dentry *dentry;
+};
+
+struct rpc_iostats {
+	spinlock_t om_lock;
+	long unsigned int om_ops;
+	long unsigned int om_ntrans;
+	long unsigned int om_timeouts;
+	long long unsigned int om_bytes_sent;
+	long long unsigned int om_bytes_recv;
+	ktime_t om_queue;
+	ktime_t om_rtt;
+	ktime_t om_execute;
+	long unsigned int om_error_status;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rpc_create_args {
+	struct net *net;
+	int protocol;
+	struct sockaddr *address;
+	size_t addrsize;
+	struct sockaddr *saddress;
+	const struct rpc_timeout *timeout;
+	const char *servername;
+	const char *nodename;
+	const struct rpc_program *program;
+	u32 prognumber;
+	u32 version;
+	rpc_authflavor_t authflavor;
+	u32 nconnect;
+	long unsigned int flags;
+	char *client_name;
+	struct svc_xprt *bc_xprt;
+	const struct cred *cred;
+	unsigned int max_connect;
+};
+
+struct nfs_subversion {
+	struct module *owner;
+	struct file_system_type *nfs_fs;
+	const struct rpc_version *rpc_vers;
+	const struct nfs_rpc_ops *rpc_ops;
+	const struct super_operations *sops;
+	const struct xattr_handler **xattr;
+	struct list_head list;
+};
+
+struct nlmclnt_initdata {
+	const char *hostname;
+	const struct sockaddr *address;
+	size_t addrlen;
+	short unsigned int protocol;
+	u32 nfs_version;
+	int noresvport;
+	struct net *net;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	const struct cred *cred;
+};
+
+struct cache_detail {
+	struct module *owner;
+	int hash_size;
+	struct hlist_head *hash_table;
+	spinlock_t hash_lock;
+	char *name;
+	void (*cache_put)(struct kref *);
+	int (*cache_upcall)(struct cache_detail *, struct cache_head *);
+	void (*cache_request)(struct cache_detail *, struct cache_head *, char **, int *);
+	int (*cache_parse)(struct cache_detail *, char *, int);
+	int (*cache_show)(struct seq_file *, struct cache_detail *, struct cache_head *);
+	void (*warn_no_listener)(struct cache_detail *, int);
+	struct cache_head * (*alloc)();
+	void (*flush)();
+	int (*match)(struct cache_head *, struct cache_head *);
+	void (*init)(struct cache_head *, struct cache_head *);
+	void (*update)(struct cache_head *, struct cache_head *);
+	time64_t flush_time;
+	struct list_head others;
+	time64_t nextcheck;
+	int entries;
+	struct list_head queue;
+	atomic_t writers;
+	time64_t last_close;
+	time64_t last_warn;
+	union {
+		struct proc_dir_entry *procfs;
+		struct dentry *pipefs;
+	};
+	struct net *net;
+};
+
+struct svc_xprt_ops {
+	struct svc_xprt * (*xpo_create)(struct svc_serv *, struct net *, struct sockaddr *, int, int);
+	struct svc_xprt * (*xpo_accept)(struct svc_xprt *);
+	int (*xpo_has_wspace)(struct svc_xprt *);
+	int (*xpo_recvfrom)(struct svc_rqst *);
+	int (*xpo_sendto)(struct svc_rqst *);
+	int (*xpo_result_payload)(struct svc_rqst *, unsigned int, unsigned int);
+	void (*xpo_release_rqst)(struct svc_rqst *);
+	void (*xpo_detach)(struct svc_xprt *);
+	void (*xpo_free)(struct svc_xprt *);
+	void (*xpo_secure_port)(struct svc_rqst *);
+	void (*xpo_kill_temp_xprt)(struct svc_xprt *);
+	void (*xpo_start_tls)(struct svc_xprt *);
+};
+
+struct svc_xprt_class {
+	const char *xcl_name;
+	struct module *xcl_owner;
+	const struct svc_xprt_ops *xcl_ops;
+	struct list_head xcl_list;
+	u32 xcl_max_payload;
+	int xcl_ident;
+};
+
+struct bl_dev_msg {
+	int32_t status;
+	uint32_t major;
+	uint32_t minor;
+};
+
+struct nfs_netns_client;
+
+struct nfs_net {
+	struct cache_detail *nfs_dns_resolve;
+	struct rpc_pipe *bl_device_pipe;
+	struct bl_dev_msg bl_mount_reply;
+	wait_queue_head_t bl_wq;
+	struct mutex bl_mutex;
+	struct list_head nfs_client_list;
+	struct list_head nfs_volume_list;
+	struct idr cb_ident_idr;
+	short unsigned int nfs_callback_tcpport;
+	short unsigned int nfs_callback_tcpport6;
+	int cb_users[3];
+	struct nfs_netns_client *nfs_client;
+	spinlock_t nfs_client_lock;
+	ktime_t boot_time;
+	struct proc_dir_entry *proc_nfsfs;
+};
+
+struct nfs_netns_client {
+	struct kobject kobject;
+	struct net *net;
+	const char *identifier;
+};
+
+struct nfs_open_dir_context {
+	struct list_head list;
+	atomic_t cache_hits;
+	atomic_t cache_misses;
+	long unsigned int attr_gencount;
+	__be32 verf[2];
+	__u64 dir_cookie;
+	__u64 last_cookie;
+	long unsigned int page_index;
+	unsigned int dtsize;
+	bool force_clear;
+	bool eof;
+	struct callback_head callback_head;
+};
+
+struct nfs_cache_array_entry {
+	u64 cookie;
+	u64 ino;
+	const char *name;
+	unsigned int name_len;
+	unsigned char d_type;
+};
+
+struct nfs_cache_array {
+	u64 change_attr;
+	u64 last_cookie;
+	unsigned int size;
+	unsigned char page_full: 1;
+	unsigned char page_is_eof: 1;
+	unsigned char cookies_are_ordered: 1;
+	struct nfs_cache_array_entry array[0];
+};
+
+struct nfs_readdir_descriptor {
+	struct file *file;
+	struct page *page;
+	struct dir_context *ctx;
+	long unsigned int page_index;
+	long unsigned int page_index_max;
+	u64 dir_cookie;
+	u64 last_cookie;
+	loff_t current_index;
+	__be32 verf[2];
+	long unsigned int dir_verifier;
+	long unsigned int timestamp;
+	long unsigned int gencount;
+	long unsigned int attr_gencount;
+	unsigned int cache_entry_index;
+	unsigned int buffer_fills;
+	unsigned int dtsize;
+	bool clear_cache;
+	bool plus;
+	bool eob;
+	bool eof;
+};
+
+struct nfs4_sessionid {
+	unsigned char data[16];
+};
+
+struct nfs4_channel_attrs {
+	u32 max_rqst_sz;
+	u32 max_resp_sz;
+	u32 max_resp_sz_cached;
+	u32 max_ops;
+	u32 max_reqs;
+};
+
+struct nfs4_slot {
+	struct nfs4_slot_table *table;
+	struct nfs4_slot *next;
+	long unsigned int generation;
+	u32 slot_nr;
+	u32 seq_nr;
+	u32 seq_nr_last_acked;
+	u32 seq_nr_highest_sent;
+	unsigned int privileged: 1;
+	unsigned int seq_done: 1;
+};
+
+struct nfs4_slot_table {
+	struct nfs4_session *session;
+	struct nfs4_slot *slots;
+	long unsigned int used_slots[16];
+	spinlock_t slot_tbl_lock;
+	struct rpc_wait_queue slot_tbl_waitq;
+	wait_queue_head_t slot_waitq;
+	u32 max_slots;
+	u32 max_slotid;
+	u32 highest_used_slotid;
+	u32 target_highest_slotid;
+	u32 server_highest_slotid;
+	s32 d_target_highest_slotid;
+	s32 d2_target_highest_slotid;
+	long unsigned int generation;
+	struct completion complete;
+	long unsigned int slot_tbl_state;
+};
+
+struct nfs4_session {
+	struct nfs4_sessionid sess_id;
+	u32 flags;
+	long unsigned int session_state;
+	u32 hash_alg;
+	u32 ssv_len;
+	struct nfs4_channel_attrs fc_attrs;
+	struct nfs4_slot_table fc_slot_table;
+	struct nfs4_channel_attrs bc_attrs;
+	struct nfs4_slot_table bc_slot_table;
+	struct nfs_client *clp;
+};
+
+struct nfs_mount_request {
+	struct __kernel_sockaddr_storage *sap;
+	size_t salen;
+	char *hostname;
+	char *dirpath;
+	u32 version;
+	short unsigned int protocol;
+	struct nfs_fh *fh;
+	int noresvport;
+	unsigned int *auth_flav_len;
+	rpc_authflavor_t *auth_flavs;
+	struct net *net;
+};
+
+struct proc_nfs_info {
+	int flag;
+	const char *str;
+	const char *nostr;
+};
+
+struct nfs_find_desc {
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+};
+
+struct pnfs_commit_bucket {
+	struct list_head written;
+	struct list_head committing;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_writeverf direct_verf;
+};
+
+struct pnfs_commit_array {
+	struct list_head cinfo_list;
+	struct list_head lseg_list;
+	struct pnfs_layout_segment *lseg;
+	struct callback_head rcu;
+	refcount_t refcount;
+	unsigned int nbuckets;
+	struct pnfs_commit_bucket buckets[0];
+};
+
+enum {
+	NFS_IOHDR_ERROR = 0,
+	NFS_IOHDR_EOF = 1,
+	NFS_IOHDR_REDO = 2,
+	NFS_IOHDR_STAT = 3,
+	NFS_IOHDR_RESEND_PNFS = 4,
+	NFS_IOHDR_RESEND_MDS = 5,
+	NFS_IOHDR_UNSTABLE_WRITES = 6,
+};
+
+enum {
+	PG_BUSY = 0,
+	PG_MAPPED = 1,
+	PG_CLEAN = 2,
+	PG_COMMIT_TO_DS = 3,
+	PG_INODE_REF = 4,
+	PG_HEADLOCK = 5,
+	PG_TEARDOWN = 6,
+	PG_UNLOCKPAGE = 7,
+	PG_UPTODATE = 8,
+	PG_WB_END = 9,
+	PG_REMOVE = 10,
+	PG_CONTENDED1 = 11,
+	PG_CONTENDED2 = 12,
+};
+
+typedef void (*rpc_action)(struct rpc_task *);
+
+struct nfs_readdesc {
+	struct nfs_pageio_descriptor pgio;
+	struct nfs_open_context *ctx;
+};
+
+struct nfs_io_completion {
+	void (*complete)(void *);
+	void *data;
+	struct kref refcount;
+};
+
+enum {
+	MOUNTPROC_NULL = 0,
+	MOUNTPROC_MNT = 1,
+	MOUNTPROC_DUMP = 2,
+	MOUNTPROC_UMNT = 3,
+	MOUNTPROC_UMNTALL = 4,
+	MOUNTPROC_EXPORT = 5,
+};
+
+enum {
+	MOUNTPROC3_NULL = 0,
+	MOUNTPROC3_MNT = 1,
+	MOUNTPROC3_DUMP = 2,
+	MOUNTPROC3_UMNT = 3,
+	MOUNTPROC3_UMNTALL = 4,
+	MOUNTPROC3_EXPORT = 5,
+};
+
+enum mountstat {
+	MNT_OK = 0,
+	MNT_EPERM = 1,
+	MNT_ENOENT = 2,
+	MNT_EACCES = 13,
+	MNT_EINVAL = 22,
+};
+
+enum mountstat3 {
+	MNT3_OK = 0,
+	MNT3ERR_PERM = 1,
+	MNT3ERR_NOENT = 2,
+	MNT3ERR_IO = 5,
+	MNT3ERR_ACCES = 13,
+	MNT3ERR_NOTDIR = 20,
+	MNT3ERR_INVAL = 22,
+	MNT3ERR_NAMETOOLONG = 63,
+	MNT3ERR_NOTSUPP = 10004,
+	MNT3ERR_SERVERFAULT = 10006,
+};
+
+struct mountres {
+	int errno;
+	struct nfs_fh *fh;
+	unsigned int *auth_count;
+	rpc_authflavor_t *auth_flavors;
+};
+
+enum {
+	FILEID_HIGH_OFF = 0,
+	FILEID_LOW_OFF = 1,
+	FILE_I_TYPE_OFF = 2,
+	EMBED_FH_OFF = 3,
+};
+
+enum nfs_stat {
+	NFS_OK = 0,
+	NFSERR_PERM = 1,
+	NFSERR_NOENT = 2,
+	NFSERR_IO = 5,
+	NFSERR_NXIO = 6,
+	NFSERR_EAGAIN = 11,
+	NFSERR_ACCES = 13,
+	NFSERR_EXIST = 17,
+	NFSERR_XDEV = 18,
+	NFSERR_NODEV = 19,
+	NFSERR_NOTDIR = 20,
+	NFSERR_ISDIR = 21,
+	NFSERR_INVAL = 22,
+	NFSERR_FBIG = 27,
+	NFSERR_NOSPC = 28,
+	NFSERR_ROFS = 30,
+	NFSERR_MLINK = 31,
+	NFSERR_OPNOTSUPP = 45,
+	NFSERR_NAMETOOLONG = 63,
+	NFSERR_NOTEMPTY = 66,
+	NFSERR_DQUOT = 69,
+	NFSERR_STALE = 70,
+	NFSERR_REMOTE = 71,
+	NFSERR_WFLUSH = 99,
+	NFSERR_BADHANDLE = 10001,
+	NFSERR_NOT_SYNC = 10002,
+	NFSERR_BAD_COOKIE = 10003,
+	NFSERR_NOTSUPP = 10004,
+	NFSERR_TOOSMALL = 10005,
+	NFSERR_SERVERFAULT = 10006,
+	NFSERR_BADTYPE = 10007,
+	NFSERR_JUKEBOX = 10008,
+	NFSERR_SAME = 10009,
+	NFSERR_DENIED = 10010,
+	NFSERR_EXPIRED = 10011,
+	NFSERR_LOCKED = 10012,
+	NFSERR_GRACE = 10013,
+	NFSERR_FHEXPIRED = 10014,
+	NFSERR_SHARE_DENIED = 10015,
+	NFSERR_WRONGSEC = 10016,
+	NFSERR_CLID_INUSE = 10017,
+	NFSERR_RESOURCE = 10018,
+	NFSERR_MOVED = 10019,
+	NFSERR_NOFILEHANDLE = 10020,
+	NFSERR_MINOR_VERS_MISMATCH = 10021,
+	NFSERR_STALE_CLIENTID = 10022,
+	NFSERR_STALE_STATEID = 10023,
+	NFSERR_OLD_STATEID = 10024,
+	NFSERR_BAD_STATEID = 10025,
+	NFSERR_BAD_SEQID = 10026,
+	NFSERR_NOT_SAME = 10027,
+	NFSERR_LOCK_RANGE = 10028,
+	NFSERR_SYMLINK = 10029,
+	NFSERR_RESTOREFH = 10030,
+	NFSERR_LEASE_MOVED = 10031,
+	NFSERR_ATTRNOTSUPP = 10032,
+	NFSERR_NO_GRACE = 10033,
+	NFSERR_RECLAIM_BAD = 10034,
+	NFSERR_RECLAIM_CONFLICT = 10035,
+	NFSERR_BAD_XDR = 10036,
+	NFSERR_LOCKS_HELD = 10037,
+	NFSERR_OPENMODE = 10038,
+	NFSERR_BADOWNER = 10039,
+	NFSERR_BADCHAR = 10040,
+	NFSERR_BADNAME = 10041,
+	NFSERR_BAD_RANGE = 10042,
+	NFSERR_LOCK_NOTSUPP = 10043,
+	NFSERR_OP_ILLEGAL = 10044,
+	NFSERR_DEADLOCK = 10045,
+	NFSERR_FILE_OPEN = 10046,
+	NFSERR_ADMIN_REVOKED = 10047,
+	NFSERR_CB_PATH_DOWN = 10048,
+};
+
+enum nfsstat4 {
+	NFS4_OK = 0,
+	NFS4ERR_PERM = 1,
+	NFS4ERR_NOENT = 2,
+	NFS4ERR_IO = 5,
+	NFS4ERR_NXIO = 6,
+	NFS4ERR_ACCESS = 13,
+	NFS4ERR_EXIST = 17,
+	NFS4ERR_XDEV = 18,
+	NFS4ERR_NOTDIR = 20,
+	NFS4ERR_ISDIR = 21,
+	NFS4ERR_INVAL = 22,
+	NFS4ERR_FBIG = 27,
+	NFS4ERR_NOSPC = 28,
+	NFS4ERR_ROFS = 30,
+	NFS4ERR_MLINK = 31,
+	NFS4ERR_NAMETOOLONG = 63,
+	NFS4ERR_NOTEMPTY = 66,
+	NFS4ERR_DQUOT = 69,
+	NFS4ERR_STALE = 70,
+	NFS4ERR_BADHANDLE = 10001,
+	NFS4ERR_BAD_COOKIE = 10003,
+	NFS4ERR_NOTSUPP = 10004,
+	NFS4ERR_TOOSMALL = 10005,
+	NFS4ERR_SERVERFAULT = 10006,
+	NFS4ERR_BADTYPE = 10007,
+	NFS4ERR_DELAY = 10008,
+	NFS4ERR_SAME = 10009,
+	NFS4ERR_DENIED = 10010,
+	NFS4ERR_EXPIRED = 10011,
+	NFS4ERR_LOCKED = 10012,
+	NFS4ERR_GRACE = 10013,
+	NFS4ERR_FHEXPIRED = 10014,
+	NFS4ERR_SHARE_DENIED = 10015,
+	NFS4ERR_WRONGSEC = 10016,
+	NFS4ERR_CLID_INUSE = 10017,
+	NFS4ERR_RESOURCE = 10018,
+	NFS4ERR_MOVED = 10019,
+	NFS4ERR_NOFILEHANDLE = 10020,
+	NFS4ERR_MINOR_VERS_MISMATCH = 10021,
+	NFS4ERR_STALE_CLIENTID = 10022,
+	NFS4ERR_STALE_STATEID = 10023,
+	NFS4ERR_OLD_STATEID = 10024,
+	NFS4ERR_BAD_STATEID = 10025,
+	NFS4ERR_BAD_SEQID = 10026,
+	NFS4ERR_NOT_SAME = 10027,
+	NFS4ERR_LOCK_RANGE = 10028,
+	NFS4ERR_SYMLINK = 10029,
+	NFS4ERR_RESTOREFH = 10030,
+	NFS4ERR_LEASE_MOVED = 10031,
+	NFS4ERR_ATTRNOTSUPP = 10032,
+	NFS4ERR_NO_GRACE = 10033,
+	NFS4ERR_RECLAIM_BAD = 10034,
+	NFS4ERR_RECLAIM_CONFLICT = 10035,
+	NFS4ERR_BADXDR = 10036,
+	NFS4ERR_LOCKS_HELD = 10037,
+	NFS4ERR_OPENMODE = 10038,
+	NFS4ERR_BADOWNER = 10039,
+	NFS4ERR_BADCHAR = 10040,
+	NFS4ERR_BADNAME = 10041,
+	NFS4ERR_BAD_RANGE = 10042,
+	NFS4ERR_LOCK_NOTSUPP = 10043,
+	NFS4ERR_OP_ILLEGAL = 10044,
+	NFS4ERR_DEADLOCK = 10045,
+	NFS4ERR_FILE_OPEN = 10046,
+	NFS4ERR_ADMIN_REVOKED = 10047,
+	NFS4ERR_CB_PATH_DOWN = 10048,
+	NFS4ERR_BADIOMODE = 10049,
+	NFS4ERR_BADLAYOUT = 10050,
+	NFS4ERR_BAD_SESSION_DIGEST = 10051,
+	NFS4ERR_BADSESSION = 10052,
+	NFS4ERR_BADSLOT = 10053,
+	NFS4ERR_COMPLETE_ALREADY = 10054,
+	NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
+	NFS4ERR_DELEG_ALREADY_WANTED = 10056,
+	NFS4ERR_BACK_CHAN_BUSY = 10057,
+	NFS4ERR_LAYOUTTRYLATER = 10058,
+	NFS4ERR_LAYOUTUNAVAILABLE = 10059,
+	NFS4ERR_NOMATCHING_LAYOUT = 10060,
+	NFS4ERR_RECALLCONFLICT = 10061,
+	NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
+	NFS4ERR_SEQ_MISORDERED = 10063,
+	NFS4ERR_SEQUENCE_POS = 10064,
+	NFS4ERR_REQ_TOO_BIG = 10065,
+	NFS4ERR_REP_TOO_BIG = 10066,
+	NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
+	NFS4ERR_RETRY_UNCACHED_REP = 10068,
+	NFS4ERR_UNSAFE_COMPOUND = 10069,
+	NFS4ERR_TOO_MANY_OPS = 10070,
+	NFS4ERR_OP_NOT_IN_SESSION = 10071,
+	NFS4ERR_HASH_ALG_UNSUPP = 10072,
+	NFS4ERR_CLIENTID_BUSY = 10074,
+	NFS4ERR_PNFS_IO_HOLE = 10075,
+	NFS4ERR_SEQ_FALSE_RETRY = 10076,
+	NFS4ERR_BAD_HIGH_SLOT = 10077,
+	NFS4ERR_DEADSESSION = 10078,
+	NFS4ERR_ENCR_ALG_UNSUPP = 10079,
+	NFS4ERR_PNFS_NO_LAYOUT = 10080,
+	NFS4ERR_NOT_ONLY_OP = 10081,
+	NFS4ERR_WRONG_CRED = 10082,
+	NFS4ERR_WRONG_TYPE = 10083,
+	NFS4ERR_DIRDELEG_UNAVAIL = 10084,
+	NFS4ERR_REJECT_DELEG = 10085,
+	NFS4ERR_RETURNCONFLICT = 10086,
+	NFS4ERR_DELEG_REVOKED = 10087,
+	NFS4ERR_PARTNER_NOTSUPP = 10088,
+	NFS4ERR_PARTNER_NO_AUTH = 10089,
+	NFS4ERR_UNION_NOTSUPP = 10090,
+	NFS4ERR_OFFLOAD_DENIED = 10091,
+	NFS4ERR_WRONG_LFS = 10092,
+	NFS4ERR_BADLABEL = 10093,
+	NFS4ERR_OFFLOAD_NO_REQS = 10094,
+	NFS4ERR_NOXATTR = 10095,
+	NFS4ERR_XATTR2BIG = 10096,
+};
+
+struct trace_event_raw_nfs_inode_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_inode_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	unsigned char type;
+	u64 fileid;
+	u64 version;
+	loff_t size;
+	long unsigned int nfsi_flags;
+	long unsigned int cache_validity;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_access_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	unsigned char type;
+	u64 fileid;
+	u64 version;
+	loff_t size;
+	long unsigned int nfsi_flags;
+	long unsigned int cache_validity;
+	unsigned int mask;
+	unsigned int permitted;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_update_size_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t cur_size;
+	loff_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_inode_range_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t range_start;
+	loff_t range_end;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readdir_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	char verifier[8];
+	u64 cookie;
+	long unsigned int index;
+	unsigned int dtsize;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_lookup_event {
+	struct trace_entry ent;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_lookup_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_atomic_open_enter {
+	struct trace_entry ent;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_atomic_open_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_create_enter {
+	struct trace_entry ent;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_create_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_directory_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_directory_event_done {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_link_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_link_exit {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_rename_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 old_dir;
+	u64 new_dir;
+	u32 __data_loc_old_name;
+	u32 __data_loc_new_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_rename_event_done {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 old_dir;
+	u32 __data_loc_old_name;
+	u64 new_dir;
+	u32 __data_loc_new_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_sillyrename_unlink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readpage {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readpage_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	int ret;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readahead {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	unsigned int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_aop_readahead_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	int ret;
+	u64 fileid;
+	u64 version;
+	loff_t offset;
+	unsigned int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_read {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readpage_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	bool eof;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_readpage_short {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	bool eof;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fscache_page_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fscache_page_event_done {
+	struct trace_entry ent;
+	int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_pgio_error {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	loff_t pos;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_write {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	long unsigned int stable;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_writeback_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	int error;
+	long unsigned int stable;
+	char verifier[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_page_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	unsigned int count;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_initiate_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_commit_done {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	int error;
+	long unsigned int stable;
+	char verifier[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_direct_req_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u32 fhandle;
+	loff_t offset;
+	ssize_t count;
+	ssize_t bytes_left;
+	ssize_t error;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_fh_to_dentry {
+	struct trace_entry ent;
+	int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_assign {
+	struct trace_entry ent;
+	u32 __data_loc_option;
+	u32 __data_loc_value;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_option {
+	struct trace_entry ent;
+	u32 __data_loc_option;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_mount_path {
+	struct trace_entry ent;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs_xdr_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int version;
+	long unsigned int error;
+	u32 __data_loc_program;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nfs_inode_event {};
+
+struct trace_event_data_offsets_nfs_inode_event_done {};
+
+struct trace_event_data_offsets_nfs_access_exit {};
+
+struct trace_event_data_offsets_nfs_update_size_class {};
+
+struct trace_event_data_offsets_nfs_inode_range_event {};
+
+struct trace_event_data_offsets_nfs_readdir_event {};
+
+struct trace_event_data_offsets_nfs_lookup_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_lookup_event_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_atomic_open_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_atomic_open_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_create_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_create_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_directory_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_directory_event_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_link_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_link_exit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_rename_event {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_nfs_rename_event_done {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_nfs_sillyrename_unlink {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs_aop_readpage {};
+
+struct trace_event_data_offsets_nfs_aop_readpage_done {};
+
+struct trace_event_data_offsets_nfs_aop_readahead {};
+
+struct trace_event_data_offsets_nfs_aop_readahead_done {};
+
+struct trace_event_data_offsets_nfs_initiate_read {};
+
+struct trace_event_data_offsets_nfs_readpage_done {};
+
+struct trace_event_data_offsets_nfs_readpage_short {};
+
+struct trace_event_data_offsets_nfs_fscache_page_event {};
+
+struct trace_event_data_offsets_nfs_fscache_page_event_done {};
+
+struct trace_event_data_offsets_nfs_pgio_error {};
+
+struct trace_event_data_offsets_nfs_initiate_write {};
+
+struct trace_event_data_offsets_nfs_writeback_done {};
+
+struct trace_event_data_offsets_nfs_page_error_class {};
+
+struct trace_event_data_offsets_nfs_initiate_commit {};
+
+struct trace_event_data_offsets_nfs_commit_done {};
+
+struct trace_event_data_offsets_nfs_direct_req_class {};
+
+struct trace_event_data_offsets_nfs_fh_to_dentry {};
+
+struct trace_event_data_offsets_nfs_mount_assign {
+	u32 option;
+	u32 value;
+};
+
+struct trace_event_data_offsets_nfs_mount_option {
+	u32 option;
+};
+
+struct trace_event_data_offsets_nfs_mount_path {
+	u32 path;
+};
+
+struct trace_event_data_offsets_nfs_xdr_event {
+	u32 program;
+	u32 procedure;
+};
+
+typedef void (*btf_trace_nfs_set_inode_stale)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_refresh_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_refresh_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_revalidate_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_revalidate_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_invalidate_mapping_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_invalidate_mapping_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_getattr_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_getattr_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_setattr_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_setattr_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_writeback_page_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_writeback_page_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_writeback_inode_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_writeback_inode_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_fsync_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_fsync_exit)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_access_enter)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_set_cache_invalid)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_readdir_force_readdirplus)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfs_readdir_cache_fill_done)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_readdir_uncached_done)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs_access_exit)(void *, const struct inode *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_nfs_size_truncate)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_wcc)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_update)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_size_grow)(void *, const struct inode *, loff_t);
+
+typedef void (*btf_trace_nfs_readdir_invalidate_cache_range)(void *, const struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_nfs_readdir_cache_fill)(void *, const struct file *, const __be32 *, u64, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_uncached)(void *, const struct file *, const __be32 *, u64, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_lookup_revalidate_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_lookup_revalidate_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_readdir_lookup)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_lookup_revalidate_failed)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_readdir_lookup_revalidate)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_atomic_open_enter)(void *, const struct inode *, const struct nfs_open_context *, unsigned int);
+
+typedef void (*btf_trace_nfs_atomic_open_exit)(void *, const struct inode *, const struct nfs_open_context *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_create_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
+
+typedef void (*btf_trace_nfs_create_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_mknod_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_mknod_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_mkdir_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_mkdir_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_rmdir_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_rmdir_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_remove_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_remove_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_unlink_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_unlink_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_symlink_enter)(void *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_symlink_exit)(void *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_link_enter)(void *, const struct inode *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_link_exit)(void *, const struct inode *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_rename_enter)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *);
+
+typedef void (*btf_trace_nfs_rename_exit)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_sillyrename_rename)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
+
+typedef void (*btf_trace_nfs_sillyrename_unlink)(void *, const struct nfs_unlinkdata *, int);
+
+typedef void (*btf_trace_nfs_aop_readpage)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_aop_readpage_done)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_aop_readahead)(void *, const struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_nfs_aop_readahead_done)(void *, const struct inode *, unsigned int, int);
+
+typedef void (*btf_trace_nfs_initiate_read)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_readpage_done)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_readpage_short)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_fscache_read_page)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_fscache_read_page_exit)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_fscache_write_page)(void *, const struct inode *, struct page *);
+
+typedef void (*btf_trace_nfs_fscache_write_page_exit)(void *, const struct inode *, struct page *, int);
+
+typedef void (*btf_trace_nfs_pgio_error)(void *, const struct nfs_pgio_header *, int, loff_t);
+
+typedef void (*btf_trace_nfs_initiate_write)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_writeback_done)(void *, const struct rpc_task *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_nfs_write_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_comp_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_commit_error)(void *, const struct inode *, const struct nfs_page *, int);
+
+typedef void (*btf_trace_nfs_initiate_commit)(void *, const struct nfs_commit_data *);
+
+typedef void (*btf_trace_nfs_commit_done)(void *, const struct rpc_task *, const struct nfs_commit_data *);
+
+typedef void (*btf_trace_nfs_direct_commit_complete)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_resched_write)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_complete)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_completion)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_schedule_iovec)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_direct_write_reschedule_io)(void *, const struct nfs_direct_req *);
+
+typedef void (*btf_trace_nfs_fh_to_dentry)(void *, const struct super_block *, const struct nfs_fh *, u64, int);
+
+typedef void (*btf_trace_nfs_mount_assign)(void *, const char *, const char *);
+
+typedef void (*btf_trace_nfs_mount_option)(void *, const struct fs_parameter *);
+
+typedef void (*btf_trace_nfs_mount_path)(void *, const char *);
+
+typedef void (*btf_trace_nfs_xdr_status)(void *, const struct xdr_stream *, int);
+
+typedef void (*btf_trace_nfs_xdr_bad_filehandle)(void *, const struct xdr_stream *, int);
+
+struct nfs2_fh {
+	char data[32];
+};
+
+struct nfs3_fh {
+	short unsigned int size;
+	unsigned char data[64];
+};
+
+struct nfs_mount_data {
+	int version;
+	int fd;
+	struct nfs2_fh old_root;
+	int flags;
+	int rsize;
+	int wsize;
+	int timeo;
+	int retrans;
+	int acregmin;
+	int acregmax;
+	int acdirmin;
+	int acdirmax;
+	struct sockaddr_in addr;
+	char hostname[256];
+	int namlen;
+	unsigned int bsize;
+	struct nfs3_fh root;
+	int pseudoflavor;
+	char context[257];
+};
+
+struct nfs_string {
+	unsigned int len;
+	const char *data;
+};
+
+struct nfs4_mount_data {
+	int version;
+	int flags;
+	int rsize;
+	int wsize;
+	int timeo;
+	int retrans;
+	int acregmin;
+	int acregmax;
+	int acdirmin;
+	int acdirmax;
+	struct nfs_string client_addr;
+	struct nfs_string mnt_path;
+	struct nfs_string hostname;
+	unsigned int host_addrlen;
+	struct sockaddr *host_addr;
+	int proto;
+	int auth_flavourlen;
+	int *auth_flavours;
+};
+
+enum nfs_param {
+	Opt_ac = 0,
+	Opt_acdirmax = 1,
+	Opt_acdirmin = 2,
+	Opt_acl___2 = 3,
+	Opt_acregmax = 4,
+	Opt_acregmin = 5,
+	Opt_actimeo = 6,
+	Opt_addr = 7,
+	Opt_bg = 8,
+	Opt_bsize = 9,
+	Opt_clientaddr = 10,
+	Opt_cto = 11,
+	Opt_fg = 12,
+	Opt_fscache = 13,
+	Opt_fscache_flag = 14,
+	Opt_hard = 15,
+	Opt_intr = 16,
+	Opt_local_lock = 17,
+	Opt_lock = 18,
+	Opt_lookupcache = 19,
+	Opt_migration = 20,
+	Opt_minorversion = 21,
+	Opt_mountaddr = 22,
+	Opt_mounthost = 23,
+	Opt_mountport = 24,
+	Opt_mountproto = 25,
+	Opt_mountvers = 26,
+	Opt_namelen = 27,
+	Opt_nconnect = 28,
+	Opt_max_connect = 29,
+	Opt_port = 30,
+	Opt_posix = 31,
+	Opt_proto = 32,
+	Opt_rdirplus = 33,
+	Opt_rdma = 34,
+	Opt_resvport = 35,
+	Opt_retrans = 36,
+	Opt_retry = 37,
+	Opt_rsize = 38,
+	Opt_sec = 39,
+	Opt_sharecache = 40,
+	Opt_sloppy = 41,
+	Opt_soft = 42,
+	Opt_softerr = 43,
+	Opt_softreval = 44,
+	Opt_source = 45,
+	Opt_tcp = 46,
+	Opt_timeo = 47,
+	Opt_trunkdiscovery = 48,
+	Opt_udp = 49,
+	Opt_v = 50,
+	Opt_vers = 51,
+	Opt_wsize = 52,
+	Opt_write = 53,
+};
+
+enum {
+	Opt_local_lock_all = 0,
+	Opt_local_lock_flock = 1,
+	Opt_local_lock_none = 2,
+	Opt_local_lock_posix = 3,
+};
+
+enum {
+	Opt_lookupcache_all = 0,
+	Opt_lookupcache_none = 1,
+	Opt_lookupcache_positive = 2,
+};
+
+enum {
+	Opt_write_lazy = 0,
+	Opt_write_eager = 1,
+	Opt_write_wait = 2,
+};
+
+enum {
+	Opt_vers_2 = 0,
+	Opt_vers_3 = 1,
+	Opt_vers_4 = 2,
+	Opt_vers_4_0 = 3,
+	Opt_vers_4_1 = 4,
+	Opt_vers_4_2 = 5,
+};
+
+enum {
+	Opt_xprt_rdma = 0,
+	Opt_xprt_rdma6 = 1,
+	Opt_xprt_tcp = 2,
+	Opt_xprt_tcp6 = 3,
+	Opt_xprt_udp = 4,
+	Opt_xprt_udp6 = 5,
+	nr__Opt_xprt = 6,
+};
+
+enum {
+	Opt_sec_krb5 = 0,
+	Opt_sec_krb5i = 1,
+	Opt_sec_krb5p = 2,
+	Opt_sec_lkey = 3,
+	Opt_sec_lkeyi = 4,
+	Opt_sec_lkeyp = 5,
+	Opt_sec_none = 6,
+	Opt_sec_spkm = 7,
+	Opt_sec_spkmi = 8,
+	Opt_sec_spkmp = 9,
+	Opt_sec_sys = 10,
+	nr__Opt_sec = 11,
+};
+
+struct compat_nfs_string {
+	compat_uint_t len;
+	compat_uptr_t data;
+};
+
+struct compat_nfs4_mount_data_v1 {
+	compat_int_t version;
+	compat_int_t flags;
+	compat_int_t rsize;
+	compat_int_t wsize;
+	compat_int_t timeo;
+	compat_int_t retrans;
+	compat_int_t acregmin;
+	compat_int_t acregmax;
+	compat_int_t acdirmin;
+	compat_int_t acdirmax;
+	struct compat_nfs_string client_addr;
+	struct compat_nfs_string mnt_path;
+	struct compat_nfs_string hostname;
+	compat_uint_t host_addrlen;
+	compat_uptr_t host_addr;
+	compat_int_t proto;
+	compat_int_t auth_flavourlen;
+	compat_uptr_t auth_flavours;
+};
+
+enum nfs3_createmode {
+	NFS3_CREATE_UNCHECKED = 0,
+	NFS3_CREATE_GUARDED = 1,
+	NFS3_CREATE_EXCLUSIVE = 2,
+};
+
+enum nfs3_ftype {
+	NF3NON = 0,
+	NF3REG = 1,
+	NF3DIR = 2,
+	NF3BLK = 3,
+	NF3CHR = 4,
+	NF3LNK = 5,
+	NF3SOCK = 6,
+	NF3FIFO = 7,
+	NF3BAD = 8,
+};
+
+struct nfs3_getaclargs {
+	struct nfs_fh *fh;
+	int mask;
+	struct page **pages;
+};
+
+struct nfs3_setaclargs {
+	struct inode *inode;
+	int mask;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
+	size_t len;
+	unsigned int npages;
+	struct page **pages;
+};
+
+struct nfs3_sattrargs {
+	struct nfs_fh *fh;
+	struct iattr *sattr;
+	unsigned int guard;
+	struct timespec64 guardtime;
+};
+
+struct nfs3_diropargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+};
+
+struct nfs3_accessargs {
+	struct nfs_fh *fh;
+	__u32 access;
+};
+
+struct nfs3_createargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	struct iattr *sattr;
+	enum nfs3_createmode createmode;
+	__be32 verifier[2];
+};
+
+struct nfs3_mkdirargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	struct iattr *sattr;
+};
+
+struct nfs3_symlinkargs {
+	struct nfs_fh *fromfh;
+	const char *fromname;
+	unsigned int fromlen;
+	struct page **pages;
+	unsigned int pathlen;
+	struct iattr *sattr;
+};
+
+struct nfs3_mknodargs {
+	struct nfs_fh *fh;
+	const char *name;
+	unsigned int len;
+	enum nfs3_ftype type;
+	struct iattr *sattr;
+	dev_t rdev;
+};
+
+struct nfs3_linkargs {
+	struct nfs_fh *fromfh;
+	struct nfs_fh *tofh;
+	const char *toname;
+	unsigned int tolen;
+};
+
+struct nfs3_readdirargs {
+	struct nfs_fh *fh;
+	__u64 cookie;
+	__be32 verf[2];
+	bool plus;
+	unsigned int count;
+	struct page **pages;
+};
+
+struct nfs3_diropres {
+	struct nfs_fattr *dir_attr;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs3_accessres {
+	struct nfs_fattr *fattr;
+	__u32 access;
+};
+
+struct nfs3_readlinkargs {
+	struct nfs_fh *fh;
+	unsigned int pgbase;
+	unsigned int pglen;
+	struct page **pages;
+};
+
+struct nfs3_linkres {
+	struct nfs_fattr *dir_attr;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs3_readdirres {
+	struct nfs_fattr *dir_attr;
+	__be32 *verf;
+	bool plus;
+};
+
+struct nfs3_getaclres {
+	struct nfs_fattr *fattr;
+	int mask;
+	unsigned int acl_access_count;
+	unsigned int acl_default_count;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
+};
+
+struct nfs3_createdata {
+	struct rpc_message msg;
+	union {
+		struct nfs3_createargs create;
+		struct nfs3_mkdirargs mkdir;
+		struct nfs3_symlinkargs symlink;
+		struct nfs3_mknodargs mknod;
+	} arg;
+	struct nfs3_diropres res;
+	struct nfs_fh fh;
+	struct nfs_fattr fattr;
+	struct nfs_fattr dir_attr;
+};
+
+enum nfs4_client_state {
+	NFS4CLNT_MANAGER_RUNNING = 0,
+	NFS4CLNT_CHECK_LEASE = 1,
+	NFS4CLNT_LEASE_EXPIRED = 2,
+	NFS4CLNT_RECLAIM_REBOOT = 3,
+	NFS4CLNT_RECLAIM_NOGRACE = 4,
+	NFS4CLNT_DELEGRETURN = 5,
+	NFS4CLNT_SESSION_RESET = 6,
+	NFS4CLNT_LEASE_CONFIRM = 7,
+	NFS4CLNT_SERVER_SCOPE_MISMATCH = 8,
+	NFS4CLNT_PURGE_STATE = 9,
+	NFS4CLNT_BIND_CONN_TO_SESSION = 10,
+	NFS4CLNT_MOVED = 11,
+	NFS4CLNT_LEASE_MOVED = 12,
+	NFS4CLNT_DELEGATION_EXPIRED = 13,
+	NFS4CLNT_RUN_MANAGER = 14,
+	NFS4CLNT_MANAGER_AVAILABLE = 15,
+	NFS4CLNT_RECALL_RUNNING = 16,
+	NFS4CLNT_RECALL_ANY_LAYOUT_READ = 17,
+	NFS4CLNT_RECALL_ANY_LAYOUT_RW = 18,
+	NFS4CLNT_DELEGRETURN_DELAYED = 19,
+};
+
+struct nfs4_setclientid_res {
+	u64 clientid;
+	nfs4_verifier confirm;
+};
+
+struct nfs4_copy_state {
+	struct list_head copies;
+	struct list_head src_copies;
+	nfs4_stateid stateid;
+	struct completion completion;
+	uint64_t count;
+	struct nfs_writeverf verf;
+	int error;
+	int flags;
+	struct nfs4_state *parent_src_state;
+	struct nfs4_state *parent_dst_state;
+};
+
+enum {
+	NFS_OWNER_RECLAIM_REBOOT = 0,
+	NFS_OWNER_RECLAIM_NOGRACE = 1,
+};
+
+enum {
+	LK_STATE_IN_USE = 0,
+	NFS_DELEGATED_STATE = 1,
+	NFS_OPEN_STATE = 2,
+	NFS_O_RDONLY_STATE = 3,
+	NFS_O_WRONLY_STATE = 4,
+	NFS_O_RDWR_STATE = 5,
+	NFS_STATE_RECLAIM_REBOOT = 6,
+	NFS_STATE_RECLAIM_NOGRACE = 7,
+	NFS_STATE_POSIX_LOCKS = 8,
+	NFS_STATE_RECOVERY_FAILED = 9,
+	NFS_STATE_MAY_NOTIFY_LOCK = 10,
+	NFS_STATE_CHANGE_WAIT = 11,
+	NFS_CLNT_DST_SSC_COPY_STATE = 12,
+	NFS_CLNT_SRC_SSC_COPY_STATE = 13,
+	NFS_SRV_SSC_COPY_STATE = 14,
+};
+
+enum nfs4_slot_tbl_state {
+	NFS4_SLOT_TBL_DRAINING = 0,
+};
+
+enum {
+	NFS_LAYOUT_RO_FAILED = 0,
+	NFS_LAYOUT_RW_FAILED = 1,
+	NFS_LAYOUT_BULK_RECALL = 2,
+	NFS_LAYOUT_RETURN = 3,
+	NFS_LAYOUT_RETURN_LOCK = 4,
+	NFS_LAYOUT_RETURN_REQUESTED = 5,
+	NFS_LAYOUT_INVALID_STID = 6,
+	NFS_LAYOUT_FIRST_LAYOUTGET = 7,
+	NFS_LAYOUT_INODE_FREEING = 8,
+	NFS_LAYOUT_HASHED = 9,
+	NFS_LAYOUT_DRAIN = 10,
+};
+
+struct nfs_referral_count {
+	struct list_head list;
+	const struct task_struct *task;
+	unsigned int referral_count;
+};
+
+struct rpc_add_xprt_test {
+	void (*add_xprt_test)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	void *data;
+};
+
+enum nfs_ftype4 {
+	NF4BAD = 0,
+	NF4REG = 1,
+	NF4DIR = 2,
+	NF4BLK = 3,
+	NF4CHR = 4,
+	NF4LNK = 5,
+	NF4SOCK = 6,
+	NF4FIFO = 7,
+	NF4ATTRDIR = 8,
+	NF4NAMEDATTR = 9,
+};
+
+enum open_claim_type4 {
+	NFS4_OPEN_CLAIM_NULL = 0,
+	NFS4_OPEN_CLAIM_PREVIOUS = 1,
+	NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
+	NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
+	NFS4_OPEN_CLAIM_FH = 4,
+	NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5,
+	NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6,
+};
+
+enum createmode4 {
+	NFS4_CREATE_UNCHECKED = 0,
+	NFS4_CREATE_GUARDED = 1,
+	NFS4_CREATE_EXCLUSIVE = 2,
+	NFS4_CREATE_EXCLUSIVE4_1 = 3,
+};
+
+enum {
+	NFSPROC4_CLNT_NULL = 0,
+	NFSPROC4_CLNT_READ = 1,
+	NFSPROC4_CLNT_WRITE = 2,
+	NFSPROC4_CLNT_COMMIT = 3,
+	NFSPROC4_CLNT_OPEN = 4,
+	NFSPROC4_CLNT_OPEN_CONFIRM = 5,
+	NFSPROC4_CLNT_OPEN_NOATTR = 6,
+	NFSPROC4_CLNT_OPEN_DOWNGRADE = 7,
+	NFSPROC4_CLNT_CLOSE = 8,
+	NFSPROC4_CLNT_SETATTR = 9,
+	NFSPROC4_CLNT_FSINFO = 10,
+	NFSPROC4_CLNT_RENEW = 11,
+	NFSPROC4_CLNT_SETCLIENTID = 12,
+	NFSPROC4_CLNT_SETCLIENTID_CONFIRM = 13,
+	NFSPROC4_CLNT_LOCK = 14,
+	NFSPROC4_CLNT_LOCKT = 15,
+	NFSPROC4_CLNT_LOCKU = 16,
+	NFSPROC4_CLNT_ACCESS = 17,
+	NFSPROC4_CLNT_GETATTR = 18,
+	NFSPROC4_CLNT_LOOKUP = 19,
+	NFSPROC4_CLNT_LOOKUP_ROOT = 20,
+	NFSPROC4_CLNT_REMOVE = 21,
+	NFSPROC4_CLNT_RENAME = 22,
+	NFSPROC4_CLNT_LINK = 23,
+	NFSPROC4_CLNT_SYMLINK = 24,
+	NFSPROC4_CLNT_CREATE = 25,
+	NFSPROC4_CLNT_PATHCONF = 26,
+	NFSPROC4_CLNT_STATFS = 27,
+	NFSPROC4_CLNT_READLINK = 28,
+	NFSPROC4_CLNT_READDIR = 29,
+	NFSPROC4_CLNT_SERVER_CAPS = 30,
+	NFSPROC4_CLNT_DELEGRETURN = 31,
+	NFSPROC4_CLNT_GETACL = 32,
+	NFSPROC4_CLNT_SETACL = 33,
+	NFSPROC4_CLNT_FS_LOCATIONS = 34,
+	NFSPROC4_CLNT_RELEASE_LOCKOWNER = 35,
+	NFSPROC4_CLNT_SECINFO = 36,
+	NFSPROC4_CLNT_FSID_PRESENT = 37,
+	NFSPROC4_CLNT_EXCHANGE_ID = 38,
+	NFSPROC4_CLNT_CREATE_SESSION = 39,
+	NFSPROC4_CLNT_DESTROY_SESSION = 40,
+	NFSPROC4_CLNT_SEQUENCE = 41,
+	NFSPROC4_CLNT_GET_LEASE_TIME = 42,
+	NFSPROC4_CLNT_RECLAIM_COMPLETE = 43,
+	NFSPROC4_CLNT_LAYOUTGET = 44,
+	NFSPROC4_CLNT_GETDEVICEINFO = 45,
+	NFSPROC4_CLNT_LAYOUTCOMMIT = 46,
+	NFSPROC4_CLNT_LAYOUTRETURN = 47,
+	NFSPROC4_CLNT_SECINFO_NO_NAME = 48,
+	NFSPROC4_CLNT_TEST_STATEID = 49,
+	NFSPROC4_CLNT_FREE_STATEID = 50,
+	NFSPROC4_CLNT_GETDEVICELIST = 51,
+	NFSPROC4_CLNT_BIND_CONN_TO_SESSION = 52,
+	NFSPROC4_CLNT_DESTROY_CLIENTID = 53,
+	NFSPROC4_CLNT_SEEK = 54,
+	NFSPROC4_CLNT_ALLOCATE = 55,
+	NFSPROC4_CLNT_DEALLOCATE = 56,
+	NFSPROC4_CLNT_LAYOUTSTATS = 57,
+	NFSPROC4_CLNT_CLONE = 58,
+	NFSPROC4_CLNT_COPY = 59,
+	NFSPROC4_CLNT_OFFLOAD_CANCEL = 60,
+	NFSPROC4_CLNT_LOOKUPP = 61,
+	NFSPROC4_CLNT_LAYOUTERROR = 62,
+	NFSPROC4_CLNT_COPY_NOTIFY = 63,
+	NFSPROC4_CLNT_GETXATTR = 64,
+	NFSPROC4_CLNT_SETXATTR = 65,
+	NFSPROC4_CLNT_LISTXATTRS = 66,
+	NFSPROC4_CLNT_REMOVEXATTR = 67,
+	NFSPROC4_CLNT_READ_PLUS = 68,
+};
+
+enum state_protect_how4 {
+	SP4_NONE = 0,
+	SP4_MACH_CRED = 1,
+	SP4_SSV = 2,
+};
+
+enum pnfs_notify_deviceid_type4 {
+	NOTIFY_DEVICEID4_CHANGE = 2,
+	NOTIFY_DEVICEID4_DELETE = 4,
+};
+
+struct nfs4_op_map {
+	union {
+		long unsigned int longs[2];
+		u32 words[4];
+	} u;
+};
+
+struct nfs4_get_lease_time_args {
+	struct nfs4_sequence_args la_seq_args;
+};
+
+struct nfs4_get_lease_time_res {
+	struct nfs4_sequence_res lr_seq_res;
+	struct nfs_fsinfo *lr_fsinfo;
+};
+
+struct nfs4_layoutget_args {
+	struct nfs4_sequence_args seq_args;
+	__u32 type;
+	struct pnfs_layout_range range;
+	__u64 minlength;
+	__u32 maxcount;
+	struct inode *inode;
+	struct nfs_open_context *ctx;
+	nfs4_stateid stateid;
+	struct nfs4_layoutdriver_data layout;
+};
+
+struct nfs4_layoutget {
+	struct nfs4_layoutget_args args;
+	struct nfs4_layoutget_res res;
+	const struct cred *cred;
+	struct pnfs_layout_hdr *lo;
+	gfp_t gfp_flags;
+};
+
+struct nfs4_getdeviceinfo_args {
+	struct nfs4_sequence_args seq_args;
+	struct pnfs_device *pdev;
+	__u32 notify_types;
+};
+
+struct nfs4_getdeviceinfo_res {
+	struct nfs4_sequence_res seq_res;
+	struct pnfs_device *pdev;
+	__u32 notification;
+};
+
+struct nfs4_layoutreturn_res {
+	struct nfs4_sequence_res seq_res;
+	u32 lrs_present;
+	nfs4_stateid stateid;
+};
+
+struct nfs4_layoutreturn {
+	struct nfs4_layoutreturn_args args;
+	struct nfs4_layoutreturn_res res;
+	const struct cred *cred;
+	struct nfs_client *clp;
+	struct inode *inode;
+	int rpc_status;
+	struct nfs4_xdr_opaque_data ld_private;
+};
+
+struct stateowner_id {
+	__u64 create_time;
+	__u32 uniquifier;
+};
+
+struct nfs_openargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct nfs_seqid *seqid;
+	int open_flags;
+	fmode_t fmode;
+	u32 share_access;
+	u32 access;
+	__u64 clientid;
+	struct stateowner_id id;
+	union {
+		struct {
+			struct iattr *attrs;
+			nfs4_verifier verifier;
+		};
+		nfs4_stateid delegation;
+		fmode_t delegation_type;
+	} u;
+	const struct qstr *name;
+	const struct nfs_server *server;
+	const u32 *bitmask;
+	const u32 *open_bitmap;
+	enum open_claim_type4 claim;
+	enum createmode4 createmode;
+	const struct nfs4_label *label;
+	umode_t umask;
+	struct nfs4_layoutget_args *lg_args;
+};
+
+struct nfs_openres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_fh fh;
+	struct nfs4_change_info cinfo;
+	__u32 rflags;
+	struct nfs_fattr *f_attr;
+	struct nfs_seqid *seqid;
+	const struct nfs_server *server;
+	fmode_t delegation_type;
+	nfs4_stateid delegation;
+	long unsigned int pagemod_limit;
+	__u32 do_recall;
+	__u32 attrset[3];
+	struct nfs4_string *owner;
+	struct nfs4_string *group_owner;
+	__u32 access_request;
+	__u32 access_supported;
+	__u32 access_result;
+	struct nfs4_layoutget_res *lg_res;
+};
+
+struct nfs_open_confirmargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	nfs4_stateid *stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_open_confirmres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_closeargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+	fmode_t fmode;
+	u32 share_access;
+	const u32 *bitmask;
+	u32 bitmask_store[3];
+	struct nfs4_layoutreturn_args *lr_args;
+};
+
+struct nfs_closeres {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_fattr *fattr;
+	struct nfs_seqid *seqid;
+	const struct nfs_server *server;
+	struct nfs4_layoutreturn_res *lr_res;
+	int lr_ret;
+};
+
+struct nfs_lowner {
+	__u64 clientid;
+	__u64 id;
+	dev_t s_dev;
+};
+
+struct nfs_lock_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_seqid *lock_seqid;
+	nfs4_stateid lock_stateid;
+	struct nfs_seqid *open_seqid;
+	nfs4_stateid open_stateid;
+	struct nfs_lowner lock_owner;
+	unsigned char block: 1;
+	unsigned char reclaim: 1;
+	unsigned char new_lock: 1;
+	unsigned char new_lock_owner: 1;
+};
+
+struct nfs_lock_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *lock_seqid;
+	struct nfs_seqid *open_seqid;
+};
+
+struct nfs_locku_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_seqid *seqid;
+	nfs4_stateid stateid;
+};
+
+struct nfs_locku_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_stateid stateid;
+	struct nfs_seqid *seqid;
+};
+
+struct nfs_lockt_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct file_lock *fl;
+	struct nfs_lowner lock_owner;
+};
+
+struct nfs_lockt_res {
+	struct nfs4_sequence_res seq_res;
+	struct file_lock *denied;
+};
+
+struct nfs_release_lockowner_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_lowner lock_owner;
+};
+
+struct nfs_release_lockowner_res {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_delegreturnargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fhandle;
+	const nfs4_stateid *stateid;
+	const u32 *bitmask;
+	u32 bitmask_store[3];
+	struct nfs4_layoutreturn_args *lr_args;
+};
+
+struct nfs4_delegreturnres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	struct nfs_server *server;
+	struct nfs4_layoutreturn_res *lr_res;
+	int lr_ret;
+};
+
+struct nfs_setattrargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	nfs4_stateid stateid;
+	struct iattr *iap;
+	const struct nfs_server *server;
+	const u32 *bitmask;
+	const struct nfs4_label *label;
+};
+
+enum nfs4_acl_type {
+	NFS4ACL_NONE = 0,
+	NFS4ACL_ACL = 1,
+	NFS4ACL_DACL = 2,
+	NFS4ACL_SACL = 3,
+};
+
+struct nfs_setaclargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	struct page **acl_pages;
+};
+
+struct nfs_setaclres {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs_getaclargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	struct page **acl_pages;
+};
+
+struct nfs_getaclres {
+	struct nfs4_sequence_res seq_res;
+	enum nfs4_acl_type acl_type;
+	size_t acl_len;
+	size_t acl_data_offset;
+	int acl_flags;
+	struct page *acl_scratch;
+};
+
+struct nfs_setattrres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+};
+
+typedef u64 clientid4;
+
+struct nfs4_accessargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+	u32 access;
+};
+
+struct nfs4_accessres {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	u32 supported;
+	u32 access;
+};
+
+struct nfs4_create_arg {
+	struct nfs4_sequence_args seq_args;
+	u32 ftype;
+	union {
+		struct {
+			struct page **pages;
+			unsigned int len;
+		} symlink;
+		struct {
+			u32 specdata1;
+			u32 specdata2;
+		} device;
+	} u;
+	const struct qstr *name;
+	const struct nfs_server *server;
+	const struct iattr *attrs;
+	const struct nfs_fh *dir_fh;
+	const u32 *bitmask;
+	const struct nfs4_label *label;
+	umode_t umask;
+};
+
+struct nfs4_create_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	struct nfs4_change_info dir_cinfo;
+};
+
+struct nfs4_fsinfo_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_fsinfo_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fsinfo *fsinfo;
+};
+
+struct nfs4_getattr_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_getattr_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+};
+
+struct nfs4_link_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+	const u32 *bitmask;
+};
+
+struct nfs4_link_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs4_change_info cinfo;
+	struct nfs_fattr *dir_attr;
+};
+
+struct nfs4_lookup_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+	const u32 *bitmask;
+};
+
+struct nfs4_lookup_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs_fh *fh;
+};
+
+struct nfs4_lookupp_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_lookupp_res {
+	struct nfs4_sequence_res seq_res;
+	const struct nfs_server *server;
+	struct nfs_fattr *fattr;
+	struct nfs_fh *fh;
+};
+
+struct nfs4_lookup_root_arg {
+	struct nfs4_sequence_args seq_args;
+	const u32 *bitmask;
+};
+
+struct nfs4_pathconf_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_pathconf_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_pathconf *pathconf;
+};
+
+struct nfs4_readdir_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	u64 cookie;
+	nfs4_verifier verifier;
+	u32 count;
+	struct page **pages;
+	unsigned int pgbase;
+	const u32 *bitmask;
+	bool plus;
+};
+
+struct nfs4_readdir_res {
+	struct nfs4_sequence_res seq_res;
+	nfs4_verifier verifier;
+	unsigned int pgbase;
+};
+
+struct nfs4_readlink {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	unsigned int pgbase;
+	unsigned int pglen;
+	struct page **pages;
+};
+
+struct nfs4_readlink_res {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs4_setclientid {
+	const nfs4_verifier *sc_verifier;
+	u32 sc_prog;
+	unsigned int sc_netid_len;
+	char sc_netid[6];
+	unsigned int sc_uaddr_len;
+	char sc_uaddr[58];
+	struct nfs_client *sc_clnt;
+	struct rpc_cred *sc_cred;
+};
+
+struct nfs4_statfs_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	const u32 *bitmask;
+};
+
+struct nfs4_statfs_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fsstat *fsstat;
+};
+
+struct nfs4_server_caps_arg {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fhandle;
+	const u32 *bitmask;
+};
+
+struct nfs4_server_caps_res {
+	struct nfs4_sequence_res seq_res;
+	u32 attr_bitmask[3];
+	u32 exclcreat_bitmask[3];
+	u32 acl_bitmask;
+	u32 has_links;
+	u32 has_symlinks;
+	u32 fh_expire_type;
+	u32 case_insensitive;
+	u32 case_preserving;
+};
+
+struct nfs4_fs_locations_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct nfs_fh *fh;
+	const struct qstr *name;
+	struct page *page;
+	const u32 *bitmask;
+	clientid4 clientid;
+	unsigned char migration: 1;
+	unsigned char renew: 1;
+};
+
+struct nfs4_fs_locations_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_fs_locations *fs_locations;
+	unsigned char migration: 1;
+	unsigned char renew: 1;
+};
+
+struct nfs4_secinfo4 {
+	u32 flavor;
+	struct rpcsec_gss_info flavor_info;
+};
+
+struct nfs4_secinfo_flavors {
+	unsigned int num_flavors;
+	struct nfs4_secinfo4 flavors[0];
+};
+
+struct nfs4_secinfo_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *dir_fh;
+	const struct qstr *name;
+};
+
+struct nfs4_secinfo_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_secinfo_flavors *flavors;
+};
+
+struct nfs4_fsid_present_arg {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	clientid4 clientid;
+	unsigned char renew: 1;
+};
+
+struct nfs4_fsid_present_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fh *fh;
+	unsigned char renew: 1;
+};
+
+struct nfs41_state_protection {
+	u32 how;
+	struct nfs4_op_map enforce;
+	struct nfs4_op_map allow;
+};
+
+struct nfs41_exchange_id_args {
+	struct nfs_client *client;
+	nfs4_verifier verifier;
+	u32 flags;
+	struct nfs41_state_protection state_protect;
+};
+
+struct nfs41_bind_conn_to_session_args {
+	struct nfs_client *client;
+	struct nfs4_sessionid sessionid;
+	u32 dir;
+	bool use_conn_in_rdma_mode;
+	int retries;
+};
+
+struct nfs41_bind_conn_to_session_res {
+	struct nfs4_sessionid sessionid;
+	u32 dir;
+	bool use_conn_in_rdma_mode;
+};
+
+struct nfs41_exchange_id_res {
+	u64 clientid;
+	u32 seqid;
+	u32 flags;
+	struct nfs41_server_owner *server_owner;
+	struct nfs41_server_scope *server_scope;
+	struct nfs41_impl_id *impl_id;
+	struct nfs41_state_protection state_protect;
+};
+
+struct nfs41_create_session_args {
+	struct nfs_client *client;
+	u64 clientid;
+	uint32_t seqid;
+	uint32_t flags;
+	uint32_t cb_program;
+	struct nfs4_channel_attrs fc_attrs;
+	struct nfs4_channel_attrs bc_attrs;
+};
+
+struct nfs41_create_session_res {
+	struct nfs4_sessionid sessionid;
+	uint32_t seqid;
+	uint32_t flags;
+	struct nfs4_channel_attrs fc_attrs;
+	struct nfs4_channel_attrs bc_attrs;
+};
+
+struct nfs41_reclaim_complete_args {
+	struct nfs4_sequence_args seq_args;
+	unsigned char one_fs: 1;
+};
+
+struct nfs41_reclaim_complete_res {
+	struct nfs4_sequence_res seq_res;
+};
+
+struct nfs41_secinfo_no_name_args {
+	struct nfs4_sequence_args seq_args;
+	int style;
+};
+
+struct nfs41_test_stateid_args {
+	struct nfs4_sequence_args seq_args;
+	nfs4_stateid *stateid;
+};
+
+struct nfs41_test_stateid_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int status;
+};
+
+struct nfs41_free_stateid_args {
+	struct nfs4_sequence_args seq_args;
+	nfs4_stateid stateid;
+};
+
+struct nfs41_free_stateid_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int status;
+};
+
+struct nfs4_cached_acl {
+	enum nfs4_acl_type type;
+	int cached;
+	size_t len;
+	char data[0];
+};
+
+struct nfs4_exception {
+	struct nfs4_state *state;
+	struct inode *inode;
+	nfs4_stateid *stateid;
+	long int timeout;
+	unsigned char task_is_privileged: 1;
+	unsigned char delay: 1;
+	unsigned char recovering: 1;
+	unsigned char retry: 1;
+	bool interruptible;
+};
+
+struct nfs4_opendata {
+	struct kref kref;
+	struct nfs_openargs o_arg;
+	struct nfs_openres o_res;
+	struct nfs_open_confirmargs c_arg;
+	struct nfs_open_confirmres c_res;
+	struct nfs4_string owner_name;
+	struct nfs4_string group_name;
+	struct nfs4_label *a_label;
+	struct nfs_fattr f_attr;
+	struct dentry *dir;
+	struct dentry *dentry;
+	struct nfs4_state_owner *owner;
+	struct nfs4_state *state;
+	struct iattr attrs;
+	struct nfs4_layoutget *lgp;
+	long unsigned int timestamp;
+	bool rpc_done;
+	bool file_created;
+	bool is_recover;
+	bool cancelled;
+	int rpc_status;
+};
+
+struct nfs4_add_xprt_data {
+	struct nfs_client *clp;
+	const struct cred *cred;
+};
+
+enum {
+	NFS_DELEGATION_NEED_RECLAIM = 0,
+	NFS_DELEGATION_RETURN = 1,
+	NFS_DELEGATION_RETURN_IF_CLOSED = 2,
+	NFS_DELEGATION_REFERENCED = 3,
+	NFS_DELEGATION_RETURNING = 4,
+	NFS_DELEGATION_REVOKED = 5,
+	NFS_DELEGATION_TEST_EXPIRED = 6,
+	NFS_DELEGATION_INODE_FREEING = 7,
+	NFS_DELEGATION_RETURN_DELAYED = 8,
+};
+
+struct cb_notify_lock_args {
+	struct nfs_fh cbnl_fh;
+	struct nfs_lowner cbnl_owner;
+	bool cbnl_valid;
+};
+
+enum nfs4_session_state {
+	NFS4_SESSION_INITING = 0,
+	NFS4_SESSION_ESTABLISHED = 1,
+};
+
+struct nfs4_call_sync_data {
+	const struct nfs_server *seq_server;
+	struct nfs4_sequence_args *seq_args;
+	struct nfs4_sequence_res *seq_res;
+};
+
+struct nfs4_open_createattrs {
+	struct nfs4_label *label;
+	struct iattr *sattr;
+	const __u32 verf[2];
+};
+
+struct nfs4_closedata {
+	struct inode *inode;
+	struct nfs4_state *state;
+	struct nfs_closeargs arg;
+	struct nfs_closeres res;
+	struct {
+		struct nfs4_layoutreturn_args arg;
+		struct nfs4_layoutreturn_res res;
+		struct nfs4_xdr_opaque_data ld_private;
+		u32 roc_barrier;
+		bool roc;
+	} lr;
+	struct nfs_fattr fattr;
+	long unsigned int timestamp;
+};
+
+struct nfs4_createdata {
+	struct rpc_message msg;
+	struct nfs4_create_arg arg;
+	struct nfs4_create_res res;
+	struct nfs_fh fh;
+	struct nfs_fattr fattr;
+};
+
+struct nfs4_renewdata {
+	struct nfs_client *client;
+	long unsigned int timestamp;
+};
+
+struct nfs4_delegreturndata {
+	struct nfs4_delegreturnargs args;
+	struct nfs4_delegreturnres res;
+	struct nfs_fh fh;
+	nfs4_stateid stateid;
+	long unsigned int timestamp;
+	struct {
+		struct nfs4_layoutreturn_args arg;
+		struct nfs4_layoutreturn_res res;
+		struct nfs4_xdr_opaque_data ld_private;
+		u32 roc_barrier;
+		bool roc;
+	} lr;
+	struct nfs_fattr fattr;
+	int rpc_status;
+	struct inode *inode;
+};
+
+struct nfs4_unlockdata {
+	struct nfs_locku_args arg;
+	struct nfs_locku_res res;
+	struct nfs4_lock_state *lsp;
+	struct nfs_open_context *ctx;
+	struct nfs_lock_context *l_ctx;
+	struct file_lock fl;
+	struct nfs_server *server;
+	long unsigned int timestamp;
+};
+
+struct nfs4_lockdata {
+	struct nfs_lock_args arg;
+	struct nfs_lock_res res;
+	struct nfs4_lock_state *lsp;
+	struct nfs_open_context *ctx;
+	struct file_lock fl;
+	long unsigned int timestamp;
+	int rpc_status;
+	int cancelled;
+	struct nfs_server *server;
+};
+
+struct nfs4_lock_waiter {
+	struct inode *inode;
+	struct nfs_lowner owner;
+	wait_queue_entry_t wait;
+};
+
+struct nfs_release_lockowner_data {
+	struct nfs4_lock_state *lsp;
+	struct nfs_server *server;
+	struct nfs_release_lockowner_args args;
+	struct nfs_release_lockowner_res res;
+	long unsigned int timestamp;
+};
+
+struct rpc_bind_conn_calldata {
+	struct nfs_client *clp;
+	const struct cred *cred;
+};
+
+struct nfs41_exchange_id_data {
+	struct nfs41_exchange_id_res res;
+	struct nfs41_exchange_id_args args;
+};
+
+struct nfs4_get_lease_time_data {
+	struct nfs4_get_lease_time_args *args;
+	struct nfs4_get_lease_time_res *res;
+	struct nfs_client *clp;
+};
+
+struct nfs4_sequence_data {
+	struct nfs_client *clp;
+	struct nfs4_sequence_args args;
+	struct nfs4_sequence_res res;
+};
+
+struct nfs4_reclaim_complete_data {
+	struct nfs_client *clp;
+	struct nfs41_reclaim_complete_args arg;
+	struct nfs41_reclaim_complete_res res;
+};
+
+struct nfs_free_stateid_data {
+	struct nfs_server *server;
+	struct nfs41_free_stateid_args args;
+	struct nfs41_free_stateid_res res;
+};
+
+struct nfs42_netaddr {
+	char netid[5];
+	char addr[58];
+	u32 netid_len;
+	u32 addr_len;
+};
+
+enum netloc_type4 {
+	NL4_NAME = 1,
+	NL4_URL = 2,
+	NL4_NETADDR = 3,
+};
+
+struct nl4_server {
+	enum netloc_type4 nl4_type;
+	union {
+		struct {
+			int nl4_str_sz;
+			char nl4_str[1025];
+		};
+		struct nfs42_netaddr nl4_addr;
+	} u;
+};
+
+struct nfs42_copy_notify_res {
+	struct nfs4_sequence_res cnr_seq_res;
+	struct nfstime4 cnr_lease_time;
+	nfs4_stateid cnr_stateid;
+	struct nl4_server cnr_src;
+};
+
+enum opentype4 {
+	NFS4_OPEN_NOCREATE = 0,
+	NFS4_OPEN_CREATE = 1,
+};
+
+enum limit_by4 {
+	NFS4_LIMIT_SIZE = 1,
+	NFS4_LIMIT_BLOCKS = 2,
+};
+
+enum open_delegation_type4 {
+	NFS4_OPEN_DELEGATE_NONE = 0,
+	NFS4_OPEN_DELEGATE_READ = 1,
+	NFS4_OPEN_DELEGATE_WRITE = 2,
+	NFS4_OPEN_DELEGATE_NONE_EXT = 3,
+};
+
+enum why_no_delegation4 {
+	WND4_NOT_WANTED = 0,
+	WND4_CONTENTION = 1,
+	WND4_RESOURCE = 2,
+	WND4_NOT_SUPP_FTYPE = 3,
+	WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
+	WND4_NOT_SUPP_UPGRADE = 5,
+	WND4_NOT_SUPP_DOWNGRADE = 6,
+	WND4_CANCELLED = 7,
+	WND4_IS_DIR = 8,
+};
+
+enum lock_type4 {
+	NFS4_UNLOCK_LT = 0,
+	NFS4_READ_LT = 1,
+	NFS4_WRITE_LT = 2,
+	NFS4_READW_LT = 3,
+	NFS4_WRITEW_LT = 4,
+};
+
+enum pnfs_layoutreturn_type {
+	RETURN_FILE = 1,
+	RETURN_FSID = 2,
+	RETURN_ALL = 3,
+};
+
+enum data_content4 {
+	NFS4_CONTENT_DATA = 0,
+	NFS4_CONTENT_HOLE = 1,
+};
+
+enum nfs4_setxattr_options {
+	SETXATTR4_EITHER = 0,
+	SETXATTR4_CREATE = 1,
+	SETXATTR4_REPLACE = 2,
+};
+
+struct nfs42_layoutstat_res {
+	struct nfs4_sequence_res seq_res;
+	int num_dev;
+	int rpc_status;
+};
+
+struct nfs42_device_error {
+	struct nfs4_deviceid dev_id;
+	int status;
+	enum nfs_opnum4 opnum;
+};
+
+struct nfs42_layout_error {
+	__u64 offset;
+	__u64 length;
+	nfs4_stateid stateid;
+	struct nfs42_device_error errors[1];
+};
+
+struct nfs42_layouterror_args {
+	struct nfs4_sequence_args seq_args;
+	struct inode *inode;
+	unsigned int num_errors;
+	struct nfs42_layout_error errors[5];
+};
+
+struct nfs42_layouterror_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int num_errors;
+	int rpc_status;
+};
+
+struct nfs42_clone_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *src_fh;
+	struct nfs_fh *dst_fh;
+	nfs4_stateid src_stateid;
+	nfs4_stateid dst_stateid;
+	__u64 src_offset;
+	__u64 dst_offset;
+	__u64 count;
+	const u32 *dst_bitmask;
+};
+
+struct nfs42_clone_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int rpc_status;
+	struct nfs_fattr *dst_fattr;
+	const struct nfs_server *server;
+};
+
+struct nfs42_falloc_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *falloc_fh;
+	nfs4_stateid falloc_stateid;
+	u64 falloc_offset;
+	u64 falloc_length;
+	const u32 *falloc_bitmask;
+};
+
+struct nfs42_falloc_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int status;
+	struct nfs_fattr *falloc_fattr;
+	const struct nfs_server *falloc_server;
+};
+
+struct nfs42_copy_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *src_fh;
+	nfs4_stateid src_stateid;
+	u64 src_pos;
+	struct nfs_fh *dst_fh;
+	nfs4_stateid dst_stateid;
+	u64 dst_pos;
+	u64 count;
+	bool sync;
+	struct nl4_server *cp_src;
+};
+
+struct nfs42_write_res {
+	nfs4_stateid stateid;
+	u64 count;
+	struct nfs_writeverf verifier;
+};
+
+struct nfs42_copy_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs42_write_res write_res;
+	bool consecutive;
+	bool synchronous;
+	struct nfs_commitres commit_res;
+};
+
+struct nfs42_offload_status_args {
+	struct nfs4_sequence_args osa_seq_args;
+	struct nfs_fh *osa_src_fh;
+	nfs4_stateid osa_stateid;
+};
+
+struct nfs42_offload_status_res {
+	struct nfs4_sequence_res osr_seq_res;
+	uint64_t osr_count;
+	int osr_status;
+};
+
+struct nfs42_copy_notify_args {
+	struct nfs4_sequence_args cna_seq_args;
+	struct nfs_fh *cna_src_fh;
+	nfs4_stateid cna_src_stateid;
+	struct nl4_server cna_dst;
+};
+
+struct nfs42_seek_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *sa_fh;
+	nfs4_stateid sa_stateid;
+	u64 sa_offset;
+	u32 sa_what;
+};
+
+struct nfs42_seek_res {
+	struct nfs4_sequence_res seq_res;
+	unsigned int status;
+	u32 sr_eof;
+	u64 sr_offset;
+};
+
+struct nfs42_setxattrargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	const char *xattr_name;
+	u32 xattr_flags;
+	size_t xattr_len;
+	struct page **xattr_pages;
+};
+
+struct nfs42_setxattrres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs42_getxattrargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	const char *xattr_name;
+	size_t xattr_len;
+	struct page **xattr_pages;
+};
+
+struct nfs42_getxattrres {
+	struct nfs4_sequence_res seq_res;
+	size_t xattr_len;
+};
+
+struct nfs42_listxattrsargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	u32 count;
+	u64 cookie;
+	struct page **xattr_pages;
+};
+
+struct nfs42_listxattrsres {
+	struct nfs4_sequence_res seq_res;
+	struct page *scratch;
+	void *xattr_buf;
+	size_t xattr_len;
+	u64 cookie;
+	bool eof;
+	size_t copied;
+};
+
+struct nfs42_removexattrargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	const char *xattr_name;
+};
+
+struct nfs42_removexattrres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs4_change_info cinfo;
+};
+
+struct compound_hdr {
+	int32_t status;
+	uint32_t nops;
+	__be32 *nops_p;
+	uint32_t taglen;
+	char *tag;
+	uint32_t replen;
+	u32 minorversion;
+};
+
+struct read_plus_segment {
+	enum data_content4 type;
+	uint64_t offset;
+	union {
+		struct {
+			uint64_t length;
+		} hole;
+		struct {
+			uint32_t length;
+			unsigned int from;
+		} data;
+	};
+};
+
+struct rpc_pipe_dir_object_ops;
+
+struct rpc_pipe_dir_object {
+	struct list_head pdo_head;
+	const struct rpc_pipe_dir_object_ops *pdo_ops;
+	void *pdo_data;
+};
+
+struct rpc_pipe_dir_object_ops {
+	int (*create)(struct dentry *, struct rpc_pipe_dir_object *);
+	void (*destroy)(struct dentry *, struct rpc_pipe_dir_object *);
+};
+
+struct rpc_inode {
+	struct inode vfs_inode;
+	void *private;
+	struct rpc_pipe *pipe;
+	wait_queue_head_t waitq;
+};
+
+struct idmap_legacy_upcalldata;
+
+struct idmap {
+	struct rpc_pipe_dir_object idmap_pdo;
+	struct rpc_pipe *idmap_pipe;
+	struct idmap_legacy_upcalldata *idmap_upcall_data;
+	struct mutex idmap_mutex;
+	struct user_namespace *user_ns;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	short unsigned int datalen;
+	long: 48;
+	char data[0];
+};
+
+struct request_key_auth {
+	struct callback_head rcu;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
+};
+
+struct idmap_msg {
+	__u8 im_type;
+	__u8 im_conv;
+	char im_name[128];
+	__u32 im_id;
+	__u8 im_status;
+};
+
+struct idmap_legacy_upcalldata {
+	struct rpc_pipe_msg pipe_msg;
+	struct idmap_msg idmap_msg;
+	struct key *authkey;
+	struct idmap *idmap;
+};
+
+enum {
+	Opt_find_uid = 0,
+	Opt_find_gid = 1,
+	Opt_find_user = 2,
+	Opt_find_group = 3,
+	Opt_find_err = 4,
+};
+
+enum rpc_auth_stat {
+	RPC_AUTH_OK = 0,
+	RPC_AUTH_BADCRED = 1,
+	RPC_AUTH_REJECTEDCRED = 2,
+	RPC_AUTH_BADVERF = 3,
+	RPC_AUTH_REJECTEDVERF = 4,
+	RPC_AUTH_TOOWEAK = 5,
+	RPCSEC_GSS_CREDPROBLEM = 13,
+	RPCSEC_GSS_CTXPROBLEM = 14,
+};
+
+enum nfs4_callback_procnum {
+	CB_NULL = 0,
+	CB_COMPOUND = 1,
+};
+
+struct nfs_callback_data {
+	unsigned int users;
+	struct svc_serv *serv;
+};
+
+enum rpc_accept_stat {
+	RPC_SUCCESS = 0,
+	RPC_PROG_UNAVAIL = 1,
+	RPC_PROG_MISMATCH = 2,
+	RPC_PROC_UNAVAIL = 3,
+	RPC_GARBAGE_ARGS = 4,
+	RPC_SYSTEM_ERR = 5,
+	RPC_DROP_REPLY = 60000,
+};
+
+enum nfs4_callback_opnum {
+	OP_CB_GETATTR = 3,
+	OP_CB_RECALL = 4,
+	OP_CB_LAYOUTRECALL = 5,
+	OP_CB_NOTIFY = 6,
+	OP_CB_PUSH_DELEG = 7,
+	OP_CB_RECALL_ANY = 8,
+	OP_CB_RECALLABLE_OBJ_AVAIL = 9,
+	OP_CB_RECALL_SLOT = 10,
+	OP_CB_SEQUENCE = 11,
+	OP_CB_WANTS_CANCELLED = 12,
+	OP_CB_NOTIFY_LOCK = 13,
+	OP_CB_NOTIFY_DEVICEID = 14,
+	OP_CB_OFFLOAD = 15,
+	OP_CB_ILLEGAL = 10044,
+};
+
+struct cb_process_state {
+	__be32 drc_status;
+	struct nfs_client *clp;
+	struct nfs4_slot *slot;
+	u32 minorversion;
+	struct net *net;
+};
+
+struct cb_compound_hdr_arg {
+	unsigned int taglen;
+	const char *tag;
+	unsigned int minorversion;
+	unsigned int cb_ident;
+	unsigned int nops;
+};
+
+struct cb_compound_hdr_res {
+	__be32 *status;
+	unsigned int taglen;
+	const char *tag;
+	__be32 *nops;
+};
+
+struct cb_getattrargs {
+	struct nfs_fh fh;
+	uint32_t bitmap[2];
+};
+
+struct cb_getattrres {
+	__be32 status;
+	uint32_t bitmap[2];
+	uint64_t size;
+	uint64_t change_attr;
+	struct timespec64 ctime;
+	struct timespec64 mtime;
+};
+
+struct cb_recallargs {
+	struct nfs_fh fh;
+	nfs4_stateid stateid;
+	uint32_t truncate;
+};
+
+struct referring_call {
+	uint32_t rc_sequenceid;
+	uint32_t rc_slotid;
+};
+
+struct referring_call_list {
+	struct nfs4_sessionid rcl_sessionid;
+	uint32_t rcl_nrefcalls;
+	struct referring_call *rcl_refcalls;
+};
+
+struct cb_sequenceargs {
+	struct sockaddr *csa_addr;
+	struct nfs4_sessionid csa_sessionid;
+	uint32_t csa_sequenceid;
+	uint32_t csa_slotid;
+	uint32_t csa_highestslotid;
+	uint32_t csa_cachethis;
+	uint32_t csa_nrclists;
+	struct referring_call_list *csa_rclists;
+};
+
+struct cb_sequenceres {
+	__be32 csr_status;
+	struct nfs4_sessionid csr_sessionid;
+	uint32_t csr_sequenceid;
+	uint32_t csr_slotid;
+	uint32_t csr_highestslotid;
+	uint32_t csr_target_highestslotid;
+};
+
+struct cb_recallanyargs {
+	uint32_t craa_objs_to_keep;
+	uint32_t craa_type_mask;
+};
+
+struct cb_recallslotargs {
+	uint32_t crsa_target_highest_slotid;
+};
+
+struct cb_layoutrecallargs {
+	uint32_t cbl_recall_type;
+	uint32_t cbl_layout_type;
+	uint32_t cbl_layoutchanged;
+	union {
+		struct {
+			struct nfs_fh cbl_fh;
+			struct pnfs_layout_range cbl_range;
+			nfs4_stateid cbl_stateid;
+		};
+		struct nfs_fsid cbl_fsid;
+	};
+};
+
+struct cb_devicenotifyitem {
+	uint32_t cbd_notify_type;
+	uint32_t cbd_layout_type;
+	struct nfs4_deviceid cbd_dev_id;
+	uint32_t cbd_immediate;
+};
+
+struct cb_devicenotifyargs {
+	uint32_t ndevs;
+	struct cb_devicenotifyitem *devs;
+};
+
+struct cb_offloadargs {
+	struct nfs_fh coa_fh;
+	nfs4_stateid coa_stateid;
+	uint32_t error;
+	uint64_t wr_count;
+	struct nfs_writeverf wr_writeverf;
+};
+
+struct callback_op {
+	__be32 (*process_op)(void *, void *, struct cb_process_state *);
+	__be32 (*decode_args)(struct svc_rqst *, struct xdr_stream *, void *);
+	__be32 (*encode_res)(struct svc_rqst *, struct xdr_stream *, const void *);
+	long int res_maxsize;
+};
+
+struct nfs4_ds_server {
+	struct list_head list;
+	struct rpc_clnt *rpc_clnt;
+};
+
+enum pnfs_layouttype {
+	LAYOUT_NFSV4_1_FILES = 1,
+	LAYOUT_OSD2_OBJECTS = 2,
+	LAYOUT_BLOCK_VOLUME = 3,
+	LAYOUT_FLEX_FILES = 4,
+	LAYOUT_SCSI = 5,
+	LAYOUT_TYPE_MAX = 6,
+};
+
+enum pnfs_update_layout_reason {
+	PNFS_UPDATE_LAYOUT_UNKNOWN = 0,
+	PNFS_UPDATE_LAYOUT_NO_PNFS = 1,
+	PNFS_UPDATE_LAYOUT_RD_ZEROLEN = 2,
+	PNFS_UPDATE_LAYOUT_MDSTHRESH = 3,
+	PNFS_UPDATE_LAYOUT_NOMEM = 4,
+	PNFS_UPDATE_LAYOUT_BULK_RECALL = 5,
+	PNFS_UPDATE_LAYOUT_IO_TEST_FAIL = 6,
+	PNFS_UPDATE_LAYOUT_FOUND_CACHED = 7,
+	PNFS_UPDATE_LAYOUT_RETURN = 8,
+	PNFS_UPDATE_LAYOUT_RETRY = 9,
+	PNFS_UPDATE_LAYOUT_BLOCKED = 10,
+	PNFS_UPDATE_LAYOUT_INVALID_OPEN = 11,
+	PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET = 12,
+	PNFS_UPDATE_LAYOUT_EXIT = 13,
+};
+
+struct nfs42_layoutstat_data {
+	struct inode *inode;
+	struct nfs42_layoutstat_args args;
+	struct nfs42_layoutstat_res res;
+};
+
+enum {
+	NFS_LSEG_VALID = 0,
+	NFS_LSEG_ROC = 1,
+	NFS_LSEG_LAYOUTCOMMIT = 2,
+	NFS_LSEG_LAYOUTRETURN = 3,
+	NFS_LSEG_UNAVAILABLE = 4,
+};
+
+struct trace_event_raw_nfs4_clientid_event {
+	struct trace_entry ent;
+	u32 __data_loc_dstaddr;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_sequence_done {
+	struct trace_entry ent;
+	unsigned int session;
+	unsigned int slot_nr;
+	unsigned int seq_nr;
+	unsigned int highest_slotid;
+	unsigned int target_highest_slotid;
+	long unsigned int status_flags;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cb_sequence {
+	struct trace_entry ent;
+	unsigned int session;
+	unsigned int slot_nr;
+	unsigned int seq_nr;
+	unsigned int highest_slotid;
+	unsigned int cachethis;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cb_seqid_err {
+	struct trace_entry ent;
+	unsigned int session;
+	unsigned int slot_nr;
+	unsigned int seq_nr;
+	unsigned int highest_slotid;
+	unsigned int cachethis;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cb_offload {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 fhandle;
+	loff_t cb_count;
+	int cb_how;
+	int cb_stateid_seq;
+	u32 cb_stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_setup_sequence {
+	struct trace_entry ent;
+	unsigned int session;
+	unsigned int slot_nr;
+	unsigned int seq_nr;
+	unsigned int highest_used_slotid;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_mgr {
+	struct trace_entry ent;
+	long unsigned int state;
+	u32 __data_loc_hostname;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_mgr_failed {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int state;
+	u32 __data_loc_hostname;
+	u32 __data_loc_section;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_xdr_bad_operation {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 op;
+	u32 expected;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_xdr_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 op;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cb_error_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 cbident;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_open_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int flags;
+	long unsigned int fmode;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u64 dir;
+	u32 __data_loc_name;
+	int stateid_seq;
+	u32 stateid_hash;
+	int openstateid_seq;
+	u32 openstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_cached_open {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_close {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lock_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int cmd;
+	long unsigned int type;
+	loff_t start;
+	loff_t end;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_set_lock {
+	struct trace_entry ent;
+	long unsigned int error;
+	long unsigned int cmd;
+	long unsigned int type;
+	loff_t start;
+	loff_t end;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	int lockstateid_seq;
+	u32 lockstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_state_lock_reclaim {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int state_flags;
+	long unsigned int lock_flags;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_set_delegation_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int fmode;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_delegreturn_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_test_stateid_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lookup_event {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 dir;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_lookupp {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_rename {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int error;
+	u64 olddir;
+	u32 __data_loc_oldname;
+	u64 newdir;
+	u32 __data_loc_newname;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_stateid_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_getattr_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	unsigned int valid;
+	long unsigned int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_callback_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 __data_loc_dstaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_inode_stateid_callback_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 __data_loc_dstaddr;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_idmap_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 id;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_read_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_write_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 arg_count;
+	u32 res_count;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_commit_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	long unsigned int error;
+	loff_t offset;
+	u32 count;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_layoutget {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 iomode;
+	u64 offset;
+	u64 count;
+	long unsigned int error;
+	int stateid_seq;
+	u32 stateid_hash;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_pnfs_update_layout {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u32 fhandle;
+	loff_t pos;
+	u64 count;
+	enum pnfs_iomode iomode;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	long int lseg;
+	enum pnfs_update_layout_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_pnfs_layout_event {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 fileid;
+	u32 fhandle;
+	loff_t pos;
+	u64 count;
+	enum pnfs_iomode iomode;
+	int layoutstateid_seq;
+	u32 layoutstateid_hash;
+	long int lseg;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_deviceid_event {
+	struct trace_entry ent;
+	u32 __data_loc_dstaddr;
+	unsigned char deviceid[16];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_deviceid_status {
+	struct trace_entry ent;
+	dev_t dev;
+	int status;
+	u32 __data_loc_dstaddr;
+	unsigned char deviceid[16];
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_flexfiles_io_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	int stateid_seq;
+	u32 stateid_hash;
+	u32 __data_loc_dstaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_ff_layout_commit_error {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	loff_t offset;
+	u32 count;
+	u32 __data_loc_dstaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_llseek {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 fhandle;
+	u32 fileid;
+	dev_t dev;
+	int stateid_seq;
+	u32 stateid_hash;
+	loff_t offset_s;
+	u32 what;
+	loff_t offset_r;
+	u32 eof;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_sparse_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	loff_t offset;
+	loff_t len;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_copy {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 src_fhandle;
+	u32 src_fileid;
+	u32 dst_fhandle;
+	u32 dst_fileid;
+	dev_t src_dev;
+	dev_t dst_dev;
+	int src_stateid_seq;
+	u32 src_stateid_hash;
+	int dst_stateid_seq;
+	u32 dst_stateid_hash;
+	loff_t src_offset;
+	loff_t dst_offset;
+	bool sync;
+	loff_t len;
+	int res_stateid_seq;
+	u32 res_stateid_hash;
+	loff_t res_count;
+	bool res_sync;
+	bool res_cons;
+	bool intra;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_clone {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 src_fhandle;
+	u32 src_fileid;
+	u32 dst_fhandle;
+	u32 dst_fileid;
+	dev_t src_dev;
+	dev_t dst_dev;
+	loff_t src_offset;
+	loff_t dst_offset;
+	int src_stateid_seq;
+	u32 src_stateid_hash;
+	int dst_stateid_seq;
+	u32 dst_stateid_hash;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_copy_notify {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 fhandle;
+	u32 fileid;
+	dev_t dev;
+	int stateid_seq;
+	u32 stateid_hash;
+	int res_stateid_seq;
+	u32 res_stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_offload_cancel {
+	struct trace_entry ent;
+	long unsigned int error;
+	u32 fhandle;
+	int stateid_seq;
+	u32 stateid_hash;
+	char __data[0];
+};
+
+struct trace_event_raw_nfs4_xattr_event {
+	struct trace_entry ent;
+	long unsigned int error;
+	dev_t dev;
+	u32 fhandle;
+	u64 fileid;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nfs4_clientid_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_sequence_done {};
+
+struct trace_event_data_offsets_nfs4_cb_sequence {};
+
+struct trace_event_data_offsets_nfs4_cb_seqid_err {};
+
+struct trace_event_data_offsets_nfs4_cb_offload {};
+
+struct trace_event_data_offsets_nfs4_setup_sequence {};
+
+struct trace_event_data_offsets_nfs4_state_mgr {
+	u32 hostname;
+};
+
+struct trace_event_data_offsets_nfs4_state_mgr_failed {
+	u32 hostname;
+	u32 section;
+};
+
+struct trace_event_data_offsets_nfs4_xdr_bad_operation {};
+
+struct trace_event_data_offsets_nfs4_xdr_event {};
+
+struct trace_event_data_offsets_nfs4_cb_error_class {};
+
+struct trace_event_data_offsets_nfs4_open_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_cached_open {};
+
+struct trace_event_data_offsets_nfs4_close {};
+
+struct trace_event_data_offsets_nfs4_lock_event {};
+
+struct trace_event_data_offsets_nfs4_set_lock {};
+
+struct trace_event_data_offsets_nfs4_state_lock_reclaim {};
+
+struct trace_event_data_offsets_nfs4_set_delegation_event {};
+
+struct trace_event_data_offsets_nfs4_delegreturn_exit {};
+
+struct trace_event_data_offsets_nfs4_test_stateid_event {};
+
+struct trace_event_data_offsets_nfs4_lookup_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_lookupp {};
+
+struct trace_event_data_offsets_nfs4_rename {
+	u32 oldname;
+	u32 newname;
+};
+
+struct trace_event_data_offsets_nfs4_inode_event {};
+
+struct trace_event_data_offsets_nfs4_inode_stateid_event {};
+
+struct trace_event_data_offsets_nfs4_getattr_event {};
+
+struct trace_event_data_offsets_nfs4_inode_callback_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_inode_stateid_callback_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_idmap_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfs4_read_event {};
+
+struct trace_event_data_offsets_nfs4_write_event {};
+
+struct trace_event_data_offsets_nfs4_commit_event {};
+
+struct trace_event_data_offsets_nfs4_layoutget {};
+
+struct trace_event_data_offsets_pnfs_update_layout {};
+
+struct trace_event_data_offsets_pnfs_layout_event {};
+
+struct trace_event_data_offsets_nfs4_deviceid_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_deviceid_status {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_flexfiles_io_event {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_ff_layout_commit_error {
+	u32 dstaddr;
+};
+
+struct trace_event_data_offsets_nfs4_llseek {};
+
+struct trace_event_data_offsets_nfs4_sparse_event {};
+
+struct trace_event_data_offsets_nfs4_copy {};
+
+struct trace_event_data_offsets_nfs4_clone {};
+
+struct trace_event_data_offsets_nfs4_copy_notify {};
+
+struct trace_event_data_offsets_nfs4_offload_cancel {};
+
+struct trace_event_data_offsets_nfs4_xattr_event {
+	u32 name;
+};
+
+typedef void (*btf_trace_nfs4_setclientid)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_setclientid_confirm)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_renew)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_renew_async)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_exchange_id)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_create_session)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_destroy_session)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_destroy_clientid)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_bind_conn_to_session)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_sequence)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_reclaim_complete)(void *, const struct nfs_client *, int);
+
+typedef void (*btf_trace_nfs4_sequence_done)(void *, const struct nfs4_session *, const struct nfs4_sequence_res *);
+
+typedef void (*btf_trace_nfs4_cb_sequence)(void *, const struct cb_sequenceargs *, const struct cb_sequenceres *, __be32);
+
+typedef void (*btf_trace_nfs4_cb_seqid_err)(void *, const struct cb_sequenceargs *, __be32);
+
+typedef void (*btf_trace_nfs4_cb_offload)(void *, const struct nfs_fh *, const nfs4_stateid *, uint64_t, int, int);
+
+typedef void (*btf_trace_nfs4_setup_sequence)(void *, const struct nfs4_session *, const struct nfs4_sequence_args *);
+
+typedef void (*btf_trace_nfs4_state_mgr)(void *, const struct nfs_client *);
+
+typedef void (*btf_trace_nfs4_state_mgr_failed)(void *, const struct nfs_client *, const char *, int);
+
+typedef void (*btf_trace_nfs4_xdr_bad_operation)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs4_xdr_status)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs4_xdr_bad_filehandle)(void *, const struct xdr_stream *, u32, u32);
+
+typedef void (*btf_trace_nfs_cb_no_clp)(void *, __be32, u32);
+
+typedef void (*btf_trace_nfs_cb_badprinc)(void *, __be32, u32);
+
+typedef void (*btf_trace_nfs4_open_reclaim)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_open_expired)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_open_file)(void *, const struct nfs_open_context *, int, int);
+
+typedef void (*btf_trace_nfs4_cached_open)(void *, const struct nfs4_state *);
+
+typedef void (*btf_trace_nfs4_close)(void *, const struct nfs4_state *, const struct nfs_closeargs *, const struct nfs_closeres *, int);
+
+typedef void (*btf_trace_nfs4_get_lock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
+
+typedef void (*btf_trace_nfs4_unlock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
+
+typedef void (*btf_trace_nfs4_set_lock)(void *, const struct file_lock *, const struct nfs4_state *, const nfs4_stateid *, int, int);
+
+typedef void (*btf_trace_nfs4_state_lock_reclaim)(void *, const struct nfs4_state *, const struct nfs4_lock_state *);
+
+typedef void (*btf_trace_nfs4_set_delegation)(void *, const struct inode *, fmode_t);
+
+typedef void (*btf_trace_nfs4_reclaim_delegation)(void *, const struct inode *, fmode_t);
+
+typedef void (*btf_trace_nfs4_delegreturn_exit)(void *, const struct nfs4_delegreturnargs *, const struct nfs4_delegreturnres *, int);
+
+typedef void (*btf_trace_nfs4_test_delegation_stateid)(void *, const struct nfs4_state *, const struct nfs4_lock_state *, int);
+
+typedef void (*btf_trace_nfs4_test_open_stateid)(void *, const struct nfs4_state *, const struct nfs4_lock_state *, int);
+
+typedef void (*btf_trace_nfs4_test_lock_stateid)(void *, const struct nfs4_state *, const struct nfs4_lock_state *, int);
+
+typedef void (*btf_trace_nfs4_lookup)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_symlink)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_mkdir)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_mknod)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_remove)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_get_fs_locations)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_secinfo)(void *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_lookupp)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_rename)(void *, const struct inode *, const struct qstr *, const struct inode *, const struct qstr *, int);
+
+typedef void (*btf_trace_nfs4_access)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_readlink)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_readdir)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_get_acl)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_set_acl)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_setattr)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_delegreturn)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_open_stateid_update)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_open_stateid_update_wait)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_close_stateid_update_wait)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_getattr)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_lookup_root)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_fsinfo)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
+
+typedef void (*btf_trace_nfs4_cb_getattr)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, int);
+
+typedef void (*btf_trace_nfs4_cb_recall)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_cb_layoutrecall_file)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_map_name_to_uid)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_group_to_gid)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_uid_to_name)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_map_gid_to_group)(void *, const char *, int, u32, int);
+
+typedef void (*btf_trace_nfs4_read)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_pnfs_read)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_write)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_pnfs_write)(void *, const struct nfs_pgio_header *, int);
+
+typedef void (*btf_trace_nfs4_commit)(void *, const struct nfs_commit_data *, int);
+
+typedef void (*btf_trace_nfs4_pnfs_commit_ds)(void *, const struct nfs_commit_data *, int);
+
+typedef void (*btf_trace_nfs4_layoutget)(void *, const struct nfs_open_context *, const struct pnfs_layout_range *, const struct pnfs_layout_range *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_layoutcommit)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_layoutreturn)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_layoutreturn_on_close)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_layouterror)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_nfs4_layoutstats)(void *, const struct inode *, const nfs4_stateid *, int);
+
+typedef void (*btf_trace_pnfs_update_layout)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *, enum pnfs_update_layout_reason);
+
+typedef void (*btf_trace_pnfs_mds_fallback_pg_init_read)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_pg_init_write)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_pg_get_mirror_count)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_read_done)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_write_done)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_read_pagelist)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_pnfs_mds_fallback_write_pagelist)(void *, struct inode *, loff_t, u64, enum pnfs_iomode, struct pnfs_layout_hdr *, struct pnfs_layout_segment *);
+
+typedef void (*btf_trace_nfs4_deviceid_free)(void *, const struct nfs_client *, const struct nfs4_deviceid *);
+
+typedef void (*btf_trace_nfs4_getdeviceinfo)(void *, const struct nfs_server *, const struct nfs4_deviceid *, int);
+
+typedef void (*btf_trace_nfs4_find_deviceid)(void *, const struct nfs_server *, const struct nfs4_deviceid *, int);
+
+typedef void (*btf_trace_ff_layout_read_error)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_ff_layout_write_error)(void *, const struct nfs_pgio_header *);
+
+typedef void (*btf_trace_ff_layout_commit_error)(void *, const struct nfs_commit_data *);
+
+typedef void (*btf_trace_nfs4_llseek)(void *, const struct inode *, const struct nfs42_seek_args *, const struct nfs42_seek_res *, int);
+
+typedef void (*btf_trace_nfs4_fallocate)(void *, const struct inode *, const struct nfs42_falloc_args *, int);
+
+typedef void (*btf_trace_nfs4_deallocate)(void *, const struct inode *, const struct nfs42_falloc_args *, int);
+
+typedef void (*btf_trace_nfs4_copy)(void *, const struct inode *, const struct inode *, const struct nfs42_copy_args *, const struct nfs42_copy_res *, const struct nl4_server *, int);
+
+typedef void (*btf_trace_nfs4_clone)(void *, const struct inode *, const struct inode *, const struct nfs42_clone_args *, int);
+
+typedef void (*btf_trace_nfs4_copy_notify)(void *, const struct inode *, const struct nfs42_copy_notify_args *, const struct nfs42_copy_notify_res *, int);
+
+typedef void (*btf_trace_nfs4_offload_cancel)(void *, const struct nfs42_offload_status_args *, int);
+
+typedef void (*btf_trace_nfs4_getxattr)(void *, const struct inode *, const char *, int);
+
+typedef void (*btf_trace_nfs4_setxattr)(void *, const struct inode *, const char *, int);
+
+typedef void (*btf_trace_nfs4_removexattr)(void *, const struct inode *, const char *, int);
+
+typedef void (*btf_trace_nfs4_listxattr)(void *, const struct inode *, int);
+
+struct nfs4_pnfs_ds_addr {
+	struct __kernel_sockaddr_storage da_addr;
+	size_t da_addrlen;
+	struct list_head da_node;
+	char *da_remotestr;
+	const char *da_netid;
+	int da_transport;
+};
+
+struct nfs4_pnfs_ds {
+	struct list_head ds_node;
+	char *ds_remotestr;
+	struct list_head ds_addrs;
+	struct nfs_client *ds_clp;
+	refcount_t ds_count;
+	long unsigned int ds_state;
+};
+
+enum {
+	NFS_DEVICEID_INVALID = 0,
+	NFS_DEVICEID_UNAVAILABLE = 1,
+	NFS_DEVICEID_NOCACHE = 2,
+};
+
+struct nfs42_layouterror_data {
+	struct nfs42_layouterror_args args;
+	struct nfs42_layouterror_res res;
+	struct inode *inode;
+	struct pnfs_layout_segment *lseg;
+};
+
+struct nfs42_offloadcancel_data {
+	struct nfs_server *seq_server;
+	struct nfs42_offload_status_args args;
+	struct nfs42_offload_status_res res;
+};
+
+enum stripetype4 {
+	STRIPE_SPARSE = 1,
+	STRIPE_DENSE = 2,
+};
+
+struct nfs4_file_layout_dsaddr {
+	struct nfs4_deviceid_node id_node;
+	u32 stripe_count;
+	u8 *stripe_indices;
+	u32 ds_num;
+	struct nfs4_pnfs_ds *ds_list[0];
+};
+
+struct nfs4_filelayout_segment {
+	struct pnfs_layout_segment generic_hdr;
+	u32 stripe_type;
+	u32 commit_through_mds;
+	u32 stripe_unit;
+	u32 first_stripe_index;
+	u64 pattern_offset;
+	struct nfs4_deviceid deviceid;
+	struct nfs4_file_layout_dsaddr *dsaddr;
+	unsigned int num_fh;
+	struct nfs_fh **fh_array;
+};
+
+struct nfs4_filelayout {
+	struct pnfs_layout_hdr generic_hdr;
+	struct pnfs_ds_commit_info commit_info;
+};
+
+struct nfs4_xattr_bucket {
+	spinlock_t lock;
+	struct hlist_head hlist;
+	struct nfs4_xattr_cache *cache;
+	bool draining;
+};
+
+struct nfs4_xattr_entry;
+
+struct nfs4_xattr_cache {
+	struct kref ref;
+	struct nfs4_xattr_bucket buckets[64];
+	struct list_head lru;
+	struct list_head dispose;
+	atomic_long_t nent;
+	spinlock_t listxattr_lock;
+	struct inode *inode;
+	struct nfs4_xattr_entry *listxattr;
+};
+
+struct nfs4_xattr_entry {
+	struct kref ref;
+	struct hlist_node hnode;
+	struct list_head lru;
+	struct list_head dispose;
+	char *xattr_name;
+	void *xattr_value;
+	size_t xattr_size;
+	struct nfs4_xattr_bucket *bucket;
+	uint32_t flags;
+};
+
+struct nfs4_ff_ds_version {
+	u32 version;
+	u32 minor_version;
+	u32 rsize;
+	u32 wsize;
+	bool tightly_coupled;
+};
+
+struct nfs4_ff_layout_ds {
+	struct nfs4_deviceid_node id_node;
+	u32 ds_versions_cnt;
+	struct nfs4_ff_ds_version *ds_versions;
+	struct nfs4_pnfs_ds *ds;
+};
+
+struct nfs4_ff_layout_ds_err {
+	struct list_head list;
+	u64 offset;
+	u64 length;
+	int status;
+	enum nfs_opnum4 opnum;
+	nfs4_stateid stateid;
+	struct nfs4_deviceid deviceid;
+};
+
+struct nfs4_ff_io_stat {
+	__u64 ops_requested;
+	__u64 bytes_requested;
+	__u64 ops_completed;
+	__u64 bytes_completed;
+	__u64 bytes_not_delivered;
+	ktime_t total_busy_time;
+	ktime_t aggregate_completion_time;
+};
+
+struct nfs4_ff_busy_timer {
+	ktime_t start_time;
+	atomic_t n_ops;
+};
+
+struct nfs4_ff_layoutstat {
+	struct nfs4_ff_io_stat io_stat;
+	struct nfs4_ff_busy_timer busy_timer;
+};
+
+struct nfs4_ff_layout_mirror {
+	struct pnfs_layout_hdr *layout;
+	struct list_head mirrors;
+	u32 ds_count;
+	u32 efficiency;
+	struct nfs4_deviceid devid;
+	struct nfs4_ff_layout_ds *mirror_ds;
+	u32 fh_versions_cnt;
+	struct nfs_fh *fh_versions;
+	nfs4_stateid stateid;
+	const struct cred *ro_cred;
+	const struct cred *rw_cred;
+	refcount_t ref;
+	spinlock_t lock;
+	long unsigned int flags;
+	struct nfs4_ff_layoutstat read_stat;
+	struct nfs4_ff_layoutstat write_stat;
+	ktime_t start_time;
+	u32 report_interval;
+};
+
+struct nfs4_ff_layout_segment {
+	struct pnfs_layout_segment generic_hdr;
+	u64 stripe_unit;
+	u32 flags;
+	u32 mirror_array_cnt;
+	struct nfs4_ff_layout_mirror *mirror_array[0];
+};
+
+struct nfs4_flexfile_layout {
+	struct pnfs_layout_hdr generic_hdr;
+	struct pnfs_ds_commit_info commit_info;
+	struct list_head mirrors;
+	struct list_head error_list;
+	ktime_t last_report_time;
+};
+
+struct nfs4_flexfile_layoutreturn_args {
+	struct list_head errors;
+	struct nfs42_layoutstat_devinfo devinfo[4];
+	unsigned int num_errors;
+	unsigned int num_dev;
+	struct page *pages[1];
+};
+
+enum nfs4_ff_op_type {
+	NFS4_FF_OP_LAYOUTSTATS = 0,
+	NFS4_FF_OP_LAYOUTRETURN = 1,
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+struct nlm_host;
+
+struct nlm_lockowner {
+	struct list_head list;
+	refcount_t count;
+	struct nlm_host *host;
+	fl_owner_t owner;
+	uint32_t pid;
+};
+
+struct svc_cacherep {
+	struct {
+		__be32 k_xid;
+		__wsum k_csum;
+		u32 k_proc;
+		u32 k_prot;
+		u32 k_vers;
+		unsigned int k_len;
+		struct sockaddr_in6 k_addr;
+	} c_key;
+	struct rb_node c_node;
+	struct list_head c_lru;
+	unsigned char c_state;
+	unsigned char c_type;
+	unsigned char c_secure: 1;
+	long unsigned int c_timestamp;
+	union {
+		struct kvec u_vec;
+		__be32 u_status;
+	} c_u;
+};
+
+struct nsm_private {
+	unsigned char data[16];
+};
+
+struct nsm_handle;
+
+struct nlm_host {
+	struct hlist_node h_hash;
+	struct __kernel_sockaddr_storage h_addr;
+	size_t h_addrlen;
+	struct __kernel_sockaddr_storage h_srcaddr;
+	size_t h_srcaddrlen;
+	struct rpc_clnt *h_rpcclnt;
+	char *h_name;
+	u32 h_version;
+	short unsigned int h_proto;
+	short unsigned int h_reclaiming: 1;
+	short unsigned int h_server: 1;
+	short unsigned int h_noresvport: 1;
+	short unsigned int h_inuse: 1;
+	wait_queue_head_t h_gracewait;
+	struct rw_semaphore h_rwsem;
+	u32 h_state;
+	u32 h_nsmstate;
+	u32 h_pidcount;
+	refcount_t h_count;
+	struct mutex h_mutex;
+	long unsigned int h_nextrebind;
+	long unsigned int h_expires;
+	struct list_head h_lockowners;
+	spinlock_t h_lock;
+	struct list_head h_granted;
+	struct list_head h_reclaim;
+	struct nsm_handle *h_nsmhandle;
+	char *h_addrbuf;
+	struct net *net;
+	const struct cred *h_cred;
+	char nodename[65];
+	const struct nlmclnt_operations *h_nlmclnt_ops;
+};
+
+struct nsm_handle {
+	struct list_head sm_link;
+	refcount_t sm_count;
+	char *sm_mon_name;
+	char *sm_name;
+	struct __kernel_sockaddr_storage sm_addr;
+	size_t sm_addrlen;
+	unsigned int sm_monitored: 1;
+	unsigned int sm_sticky: 1;
+	struct nsm_private sm_priv;
+	char sm_addrbuf[51];
+};
+
+enum {
+	NFSD_NET_PAYLOAD_MISSES = 0,
+	NFSD_NET_DRC_MEM_USAGE = 1,
+	NFSD_NET_COUNTERS_NUM = 2,
+};
+
+struct cld_net;
+
+struct nfsd4_client_tracking_ops;
+
+struct nfsd_drc_bucket;
+
+struct nfsd_fcache_disposal;
+
+struct nfsd_net {
+	struct cld_net *cld_net;
+	struct cache_detail *svc_expkey_cache;
+	struct cache_detail *svc_export_cache;
+	struct cache_detail *idtoname_cache;
+	struct cache_detail *nametoid_cache;
+	struct lock_manager nfsd4_manager;
+	bool grace_ended;
+	time64_t boot_time;
+	struct dentry *nfsd_client_dir;
+	struct list_head *reclaim_str_hashtbl;
+	int reclaim_str_hashtbl_size;
+	struct list_head *conf_id_hashtbl;
+	struct rb_root conf_name_tree;
+	struct list_head *unconf_id_hashtbl;
+	struct rb_root unconf_name_tree;
+	struct list_head *sessionid_hashtbl;
+	struct list_head client_lru;
+	struct list_head close_lru;
+	struct list_head del_recall_lru;
+	struct list_head blocked_locks_lru;
+	struct delayed_work laundromat_work;
+	spinlock_t client_lock;
+	spinlock_t blocked_locks_lock;
+	struct file *rec_file;
+	bool in_grace;
+	const struct nfsd4_client_tracking_ops *client_tracking_ops;
+	time64_t nfsd4_lease;
+	time64_t nfsd4_grace;
+	bool somebody_reclaimed;
+	bool track_reclaim_completes;
+	atomic_t nr_reclaim_complete;
+	bool nfsd_net_up;
+	bool lockd_up;
+	seqlock_t writeverf_lock;
+	unsigned char writeverf[8];
+	unsigned int max_connections;
+	u32 clientid_base;
+	u32 clientid_counter;
+	u32 clverifier_counter;
+	struct svc_serv *nfsd_serv;
+	int keep_active;
+	u32 s2s_cp_cl_id;
+	struct idr s2s_cp_stateids;
+	spinlock_t s2s_cp_lock;
+	bool *nfsd_versions;
+	bool *nfsd4_minorversions;
+	struct nfsd_drc_bucket *drc_hashtbl;
+	unsigned int max_drc_entries;
+	unsigned int maskbits;
+	unsigned int drc_hashsize;
+	atomic_t num_drc_entries;
+	struct percpu_counter counter[2];
+	unsigned int longest_chain;
+	unsigned int longest_chain_cachesize;
+	struct shrinker nfsd_reply_cache_shrinker;
+	spinlock_t nfsd_ssc_lock;
+	struct list_head nfsd_ssc_mount_list;
+	wait_queue_head_t nfsd_ssc_waitq;
+	char nfsd_name[65];
+	struct nfsd_fcache_disposal *fcache_disposal;
+	siphash_key_t siphash_key;
+	atomic_t nfs4_client_count;
+	int nfs4_max_clients;
+	atomic_t nfsd_courtesy_clients;
+	struct shrinker nfsd_client_shrinker;
+	struct work_struct nfsd_shrinker_work;
+};
+
+struct nfs4_client;
+
+struct nfsd4_client_tracking_ops {
+	int (*init)(struct net *);
+	void (*exit)(struct net *);
+	void (*create)(struct nfs4_client *);
+	void (*remove)(struct nfs4_client *);
+	int (*check)(struct nfs4_client *);
+	void (*grace_done)(struct nfsd_net *);
+	uint8_t version;
+	size_t msglen;
+};
+
+enum {
+	EXP_STATS_FH_STALE = 0,
+	EXP_STATS_IO_READ = 1,
+	EXP_STATS_IO_WRITE = 2,
+	EXP_STATS_COUNTERS_NUM = 3,
+};
+
+enum {
+	NFSD_STATS_RC_HITS = 0,
+	NFSD_STATS_RC_MISSES = 1,
+	NFSD_STATS_RC_NOCACHE = 2,
+	NFSD_STATS_FH_STALE = 3,
+	NFSD_STATS_IO_READ = 4,
+	NFSD_STATS_IO_WRITE = 5,
+	NFSD_STATS_FIRST_NFS4_OP = 6,
+	NFSD_STATS_LAST_NFS4_OP = 81,
+	NFSD_STATS_COUNTERS_NUM = 82,
+};
+
+struct nfsdfs_client {
+	struct kref cl_ref;
+	void (*cl_release)(struct kref *);
+};
+
+enum vers_op {
+	NFSD_SET = 0,
+	NFSD_CLEAR = 1,
+	NFSD_TEST = 2,
+	NFSD_AVAIL = 3,
+};
+
+struct knfsd_fh {
+	unsigned int fh_size;
+	union {
+		char fh_raw[128];
+		struct {
+			u8 fh_version;
+			u8 fh_auth_type;
+			u8 fh_fsid_type;
+			u8 fh_fileid_type;
+			u32 fh_fsid[0];
+		};
+	};
+};
+
+enum {
+	NFSD_Root = 1,
+	NFSD_List = 2,
+	NFSD_Export_Stats = 3,
+	NFSD_Export_features = 4,
+	NFSD_Fh = 5,
+	NFSD_FO_UnlockIP = 6,
+	NFSD_FO_UnlockFS = 7,
+	NFSD_Threads = 8,
+	NFSD_Pool_Threads = 9,
+	NFSD_Pool_Stats = 10,
+	NFSD_Reply_Cache_Stats = 11,
+	NFSD_Versions = 12,
+	NFSD_Ports = 13,
+	NFSD_MaxBlkSize = 14,
+	NFSD_MaxConnections = 15,
+	NFSD_Filecache = 16,
+	NFSD_SupportedEnctypes = 17,
+	NFSD_Leasetime = 18,
+	NFSD_Gracetime = 19,
+	NFSD_RecoveryDir = 20,
+	NFSD_V4EndGrace = 21,
+	NFSD_MaxReserved = 22,
+};
+
+enum {
+	RCA4_TYPE_MASK_RDATA_DLG = 0,
+	RCA4_TYPE_MASK_WDATA_DLG = 1,
+	RCA4_TYPE_MASK_DIR_DLG = 2,
+	RCA4_TYPE_MASK_FILE_LAYOUT = 3,
+	RCA4_TYPE_MASK_BLK_LAYOUT = 4,
+	RCA4_TYPE_MASK_OBJ_LAYOUT_MIN = 8,
+	RCA4_TYPE_MASK_OBJ_LAYOUT_MAX = 9,
+	RCA4_TYPE_MASK_OTHER_LAYOUT_MIN = 12,
+	RCA4_TYPE_MASK_OTHER_LAYOUT_MAX = 15,
+};
+
+struct nfsd4_fs_location {
+	char *hosts;
+	char *path;
+};
+
+struct nfsd4_fs_locations {
+	uint32_t locations_count;
+	struct nfsd4_fs_location *locations;
+	int migrated;
+};
+
+struct exp_flavor_info {
+	u32 pseudoflavor;
+	u32 flags;
+};
+
+struct export_stats {
+	time64_t start_time;
+	struct percpu_counter counter[3];
+};
+
+struct nfsd4_deviceid_map;
+
+struct svc_export {
+	struct cache_head h;
+	struct auth_domain *ex_client;
+	int ex_flags;
+	struct path ex_path;
+	kuid_t ex_anon_uid;
+	kgid_t ex_anon_gid;
+	int ex_fsid;
+	unsigned char *ex_uuid;
+	struct nfsd4_fs_locations ex_fslocs;
+	uint32_t ex_nflavors;
+	struct exp_flavor_info ex_flavors[8];
+	u32 ex_layout_types;
+	struct nfsd4_deviceid_map *ex_devid_map;
+	struct cache_detail *cd;
+	struct callback_head ex_rcu;
+	struct export_stats ex_stats;
+};
+
+struct svc_expkey {
+	struct cache_head h;
+	struct auth_domain *ek_client;
+	int ek_fsidtype;
+	u32 ek_fsid[6];
+	struct path ek_path;
+	struct callback_head ek_rcu;
+};
+
+struct svc_fh {
+	struct knfsd_fh fh_handle;
+	int fh_maxsize;
+	struct dentry *fh_dentry;
+	struct svc_export *fh_export;
+	bool fh_want_write;
+	bool fh_no_wcc;
+	bool fh_no_atomic_attr;
+	int fh_flags;
+	bool fh_post_saved;
+	bool fh_pre_saved;
+	__u64 fh_pre_size;
+	struct timespec64 fh_pre_mtime;
+	struct timespec64 fh_pre_ctime;
+	u64 fh_pre_change;
+	struct kstat fh_post_attr;
+	u64 fh_post_change;
+};
+
+typedef struct {
+	u32 cl_boot;
+	u32 cl_id;
+} clientid_t;
+
+typedef struct {
+	clientid_t so_clid;
+	u32 so_id;
+} stateid_opaque_t;
+
+typedef struct {
+	u32 si_generation;
+	stateid_opaque_t si_opaque;
+} stateid_t;
+
+struct nfsd4_callback_ops;
+
+struct nfsd4_callback {
+	struct nfs4_client *cb_clp;
+	struct rpc_message cb_msg;
+	const struct nfsd4_callback_ops *cb_ops;
+	struct work_struct cb_work;
+	int cb_seq_status;
+	int cb_status;
+	bool cb_need_restart;
+	bool cb_holds_slot;
+};
+
+struct nfs4_cb_conn {
+	struct __kernel_sockaddr_storage cb_addr;
+	struct __kernel_sockaddr_storage cb_saddr;
+	size_t cb_addrlen;
+	u32 cb_prog;
+	u32 cb_ident;
+	struct svc_xprt *cb_xprt;
+};
+
+struct nfsd4_channel_attrs {
+	u32 headerpadsz;
+	u32 maxreq_sz;
+	u32 maxresp_sz;
+	u32 maxresp_cached;
+	u32 maxops;
+	u32 maxreqs;
+	u32 nr_rdma_attrs;
+	u32 rdma_attrs;
+};
+
+struct nfsd4_cb_sec {
+	u32 flavor;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct nfsd4_create_session {
+	clientid_t clientid;
+	struct nfs4_sessionid sessionid;
+	u32 seqid;
+	u32 flags;
+	struct nfsd4_channel_attrs fore_channel;
+	struct nfsd4_channel_attrs back_channel;
+	u32 callback_prog;
+	struct nfsd4_cb_sec cb_sec;
+};
+
+struct nfsd4_clid_slot {
+	u32 sl_seqid;
+	__be32 sl_status;
+	struct nfsd4_create_session sl_cr_ses;
+};
+
+struct nfsd4_session;
+
+struct nfsd4_cb_recall_any;
+
+struct nfs4_client {
+	struct list_head cl_idhash;
+	struct rb_node cl_namenode;
+	struct list_head *cl_ownerstr_hashtbl;
+	struct list_head cl_openowners;
+	struct idr cl_stateids;
+	struct list_head cl_delegations;
+	struct list_head cl_revoked;
+	struct list_head cl_lru;
+	struct list_head cl_lo_states;
+	struct xdr_netobj cl_name;
+	nfs4_verifier cl_verifier;
+	time64_t cl_time;
+	struct __kernel_sockaddr_storage cl_addr;
+	bool cl_mach_cred;
+	struct svc_cred cl_cred;
+	clientid_t cl_clientid;
+	nfs4_verifier cl_confirm;
+	u32 cl_minorversion;
+	struct xdr_netobj cl_nii_domain;
+	struct xdr_netobj cl_nii_name;
+	struct timespec64 cl_nii_time;
+	struct nfs4_cb_conn cl_cb_conn;
+	long unsigned int cl_flags;
+	const struct cred *cl_cb_cred;
+	struct rpc_clnt *cl_cb_client;
+	u32 cl_cb_ident;
+	int cl_cb_state;
+	struct nfsd4_callback cl_cb_null;
+	struct nfsd4_session *cl_cb_session;
+	spinlock_t cl_lock;
+	struct list_head cl_sessions;
+	struct nfsd4_clid_slot cl_cs_slot;
+	u32 cl_exchange_flags;
+	atomic_t cl_rpc_users;
+	struct nfsdfs_client cl_nfsdfs;
+	struct nfs4_op_map cl_spo_must_allow;
+	struct dentry *cl_nfsd_dentry;
+	struct dentry *cl_nfsd_info_dentry;
+	long unsigned int cl_cb_slot_busy;
+	struct rpc_wait_queue cl_cb_waitq;
+	struct net *net;
+	struct list_head async_copies;
+	spinlock_t async_lock;
+	atomic_t cl_cb_inflight;
+	unsigned int cl_state;
+	atomic_t cl_delegs_in_recall;
+	struct nfsd4_cb_recall_any *cl_ra;
+	time64_t cl_ra_time;
+	struct list_head cl_ra_cblist;
+};
+
+struct nfsd4_callback_ops {
+	void (*prepare)(struct nfsd4_callback *);
+	int (*done)(struct nfsd4_callback *, struct rpc_task *);
+	void (*release)(struct nfsd4_callback *);
+};
+
+struct nfs4_file;
+
+struct nfs4_stid {
+	refcount_t sc_count;
+	struct list_head sc_cp_list;
+	unsigned char sc_type;
+	stateid_t sc_stateid;
+	spinlock_t sc_lock;
+	struct nfs4_client *sc_client;
+	struct nfs4_file *sc_file;
+	void (*sc_free)(struct nfs4_stid *);
+};
+
+struct nfsd_file;
+
+struct nfs4_file {
+	refcount_t fi_ref;
+	struct inode *fi_inode;
+	bool fi_aliased;
+	spinlock_t fi_lock;
+	struct rhlist_head fi_rlist;
+	struct list_head fi_stateids;
+	union {
+		struct list_head fi_delegations;
+		struct callback_head fi_rcu;
+	};
+	struct list_head fi_clnt_odstate;
+	struct nfsd_file *fi_fds[3];
+	atomic_t fi_access[2];
+	u32 fi_share_deny;
+	struct nfsd_file *fi_deleg_file;
+	int fi_delegees;
+	struct knfsd_fh fi_fhandle;
+	bool fi_had_conflict;
+	struct list_head fi_lo_states;
+	atomic_t fi_lo_recalls;
+};
+
+struct nfsd4_slot {
+	u32 sl_seqid;
+	__be32 sl_status;
+	struct svc_cred sl_cred;
+	u32 sl_datalen;
+	u16 sl_opcnt;
+	u8 sl_flags;
+	char sl_data[0];
+};
+
+struct nfsd4_session {
+	atomic_t se_ref;
+	struct list_head se_hash;
+	struct list_head se_perclnt;
+	u32 se_flags;
+	struct nfs4_client *se_client;
+	struct nfs4_sessionid se_sessionid;
+	struct nfsd4_channel_attrs se_fchannel;
+	struct nfsd4_channel_attrs se_bchannel;
+	struct nfsd4_cb_sec se_cb_sec;
+	struct list_head se_conns;
+	u32 se_cb_prog;
+	u32 se_cb_seq_nr;
+	struct nfsd4_slot *se_slots[0];
+};
+
+struct nfsd4_cb_recall_any {
+	struct nfsd4_callback ra_cb;
+	u32 ra_keep;
+	u32 ra_bmval[1];
+};
+
+struct nfs4_replay {
+	__be32 rp_status;
+	unsigned int rp_buflen;
+	char *rp_buf;
+	struct knfsd_fh rp_openfh;
+	struct mutex rp_mutex;
+	char rp_ibuf[112];
+};
+
+struct nfs4_stateowner;
+
+struct nfs4_stateowner_operations {
+	void (*so_unhash)(struct nfs4_stateowner *);
+	void (*so_free)(struct nfs4_stateowner *);
+};
+
+struct nfs4_stateowner {
+	struct list_head so_strhash;
+	struct list_head so_stateids;
+	struct nfs4_client *so_client;
+	const struct nfs4_stateowner_operations *so_ops;
+	atomic_t so_count;
+	u32 so_seqid;
+	struct xdr_netobj so_owner;
+	struct nfs4_replay so_replay;
+	bool so_is_open_owner;
+};
+
+struct nfs4_lockowner {
+	struct nfs4_stateowner lo_owner;
+	struct list_head lo_blocked;
+};
+
+struct nfsd_file_mark;
+
+struct nfsd_file {
+	struct rhash_head nf_rhash;
+	struct list_head nf_lru;
+	struct callback_head nf_rcu;
+	struct file *nf_file;
+	const struct cred *nf_cred;
+	struct net *nf_net;
+	long unsigned int nf_flags;
+	struct inode *nf_inode;
+	refcount_t nf_ref;
+	unsigned char nf_may;
+	struct nfsd_file_mark *nf_mark;
+	ktime_t nf_birthtime;
+};
+
+struct nfsd4_blocked_lock {
+	struct list_head nbl_list;
+	struct list_head nbl_lru;
+	time64_t nbl_time;
+	struct file_lock nbl_lock;
+	struct knfsd_fh nbl_fh;
+	struct nfsd4_callback nbl_cb;
+	struct kref nbl_kref;
+};
+
+struct nfsd_file_mark {
+	struct fsnotify_mark nfm_mark;
+	refcount_t nfm_ref;
+};
+
+enum {
+	RC_DROPIT = 0,
+	RC_REPLY = 1,
+	RC_DOIT = 2,
+};
+
+struct trace_event_raw_nfsd_xdr_err_class {
+	struct trace_entry ent;
+	unsigned int netns_ino;
+	u32 xid;
+	u32 vers;
+	u32 proc;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_compound {
+	struct trace_entry ent;
+	u32 xid;
+	u32 opcnt;
+	u32 __data_loc_tag;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_compound_status {
+	struct trace_entry ent;
+	u32 args_opcnt;
+	u32 resp_opcnt;
+	int status;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_compound_decode_err {
+	struct trace_entry ent;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int status;
+	unsigned char server[28];
+	unsigned char client[28];
+	u32 args_opcnt;
+	u32 resp_opcnt;
+	u32 opnum;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_compound_encode_err {
+	struct trace_entry ent;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int status;
+	unsigned char server[28];
+	unsigned char client[28];
+	u32 opnum;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_fh_verify {
+	struct trace_entry ent;
+	unsigned int netns_ino;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	u32 xid;
+	u32 fh_hash;
+	const void *inode;
+	long unsigned int type;
+	long unsigned int access;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_fh_verify_err {
+	struct trace_entry ent;
+	unsigned int netns_ino;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	u32 xid;
+	u32 fh_hash;
+	const void *inode;
+	long unsigned int type;
+	long unsigned int access;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_fh_err_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 fh_hash;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_exp_find_key {
+	struct trace_entry ent;
+	int fsidtype;
+	u32 fsid[6];
+	u32 __data_loc_auth_domain;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_expkey_update {
+	struct trace_entry ent;
+	int fsidtype;
+	u32 fsid[6];
+	u32 __data_loc_auth_domain;
+	u32 __data_loc_path;
+	bool cache;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_exp_get_by_name {
+	struct trace_entry ent;
+	u32 __data_loc_path;
+	u32 __data_loc_auth_domain;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_export_update {
+	struct trace_entry ent;
+	u32 __data_loc_path;
+	u32 __data_loc_auth_domain;
+	bool cache;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_io_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 fh_hash;
+	u64 offset;
+	u32 len;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_err_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 fh_hash;
+	loff_t offset;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_dirent {
+	struct trace_entry ent;
+	u32 fh_hash;
+	u64 ino;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_copy_err_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 src_fh_hash;
+	loff_t src_offset;
+	u32 dst_fh_hash;
+	loff_t dst_offset;
+	u64 count;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_delegret_wakeup {
+	struct trace_entry ent;
+	u32 xid;
+	const void *inode;
+	long int timeo;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_stateid_class {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_stateseqid_class {
+	struct trace_entry ent;
+	u32 seqid;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_stid_class {
+	struct trace_entry ent;
+	long unsigned int sc_type;
+	int sc_count;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_clientid_class {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_net_class {
+	struct trace_entry ent;
+	long long unsigned int boot_time;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_writeverf_reset {
+	struct trace_entry ent;
+	long long unsigned int boot_time;
+	u32 xid;
+	int error;
+	unsigned char verifier[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_clid_cred_mismatch {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	long unsigned int cl_flavor;
+	long unsigned int new_flavor;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_clid_verf_mismatch {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	unsigned char cl_verifier[8];
+	unsigned char new_verifier[8];
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_clid_class {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	unsigned char addr[28];
+	long unsigned int flavor;
+	unsigned char verifier[8];
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_class {
+	struct trace_entry ent;
+	void *nf_inode;
+	int nf_ref;
+	long unsigned int nf_flags;
+	unsigned char nf_may;
+	struct file *nf_file;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_alloc {
+	struct trace_entry ent;
+	const void *nf_inode;
+	long unsigned int nf_flags;
+	long unsigned int nf_may;
+	unsigned int nf_ref;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_acquire {
+	struct trace_entry ent;
+	u32 xid;
+	const void *inode;
+	long unsigned int may_flags;
+	unsigned int nf_ref;
+	long unsigned int nf_flags;
+	long unsigned int nf_may;
+	const void *nf_file;
+	u32 status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_insert_err {
+	struct trace_entry ent;
+	u32 xid;
+	const void *inode;
+	long unsigned int may_flags;
+	long int error;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_cons_err {
+	struct trace_entry ent;
+	u32 xid;
+	const void *inode;
+	long unsigned int may_flags;
+	unsigned int nf_ref;
+	long unsigned int nf_flags;
+	long unsigned int nf_may;
+	const void *nf_file;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_open_class {
+	struct trace_entry ent;
+	void *nf_inode;
+	int nf_ref;
+	long unsigned int nf_flags;
+	long unsigned int nf_may;
+	void *nf_file;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_is_cached {
+	struct trace_entry ent;
+	const struct inode *inode;
+	int found;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_fsnotify_handle_event {
+	struct trace_entry ent;
+	struct inode *inode;
+	unsigned int nlink;
+	umode_t mode;
+	u32 mask;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_gc_class {
+	struct trace_entry ent;
+	void *nf_inode;
+	void *nf_file;
+	int nf_ref;
+	long unsigned int nf_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_lruwalk_class {
+	struct trace_entry ent;
+	long unsigned int removed;
+	long unsigned int remaining;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_close {
+	struct trace_entry ent;
+	const void *inode;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_file_fsync {
+	struct trace_entry ent;
+	void *nf_inode;
+	int nf_ref;
+	int ret;
+	long unsigned int nf_flags;
+	unsigned char nf_may;
+	struct file *nf_file;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_drc_found {
+	struct trace_entry ent;
+	long long unsigned int boot_time;
+	long unsigned int result;
+	u32 xid;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_drc_mismatch {
+	struct trace_entry ent;
+	long long unsigned int boot_time;
+	u32 xid;
+	u32 cached;
+	u32 ingress;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_args {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 prog;
+	u32 ident;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_nodelegs {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_class {
+	struct trace_entry ent;
+	long unsigned int state;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_setup {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	long unsigned int authflavor;
+	u32 __data_loc_addr;
+	unsigned char netid[8];
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_setup_err {
+	struct trace_entry ent;
+	long int error;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_recall {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_notify_lock {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 fh_hash;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_offload {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	u32 fh_hash;
+	int status;
+	u64 count;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_recall_any {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 keep;
+	long unsigned int bmval0;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_done_class {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	u32 si_id;
+	u32 si_generation;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_nfsd_cb_recall_any_done {
+	struct trace_entry ent;
+	u32 cl_boot;
+	u32 cl_id;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nfsd_xdr_err_class {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_nfsd_compound {
+	u32 tag;
+};
+
+struct trace_event_data_offsets_nfsd_compound_status {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfsd_compound_decode_err {};
+
+struct trace_event_data_offsets_nfsd_compound_encode_err {};
+
+struct trace_event_data_offsets_nfsd_fh_verify {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_nfsd_fh_verify_err {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_nfsd_fh_err_class {};
+
+struct trace_event_data_offsets_nfsd_exp_find_key {
+	u32 auth_domain;
+};
+
+struct trace_event_data_offsets_nfsd_expkey_update {
+	u32 auth_domain;
+	u32 path;
+};
+
+struct trace_event_data_offsets_nfsd_exp_get_by_name {
+	u32 path;
+	u32 auth_domain;
+};
+
+struct trace_event_data_offsets_nfsd_export_update {
+	u32 path;
+	u32 auth_domain;
+};
+
+struct trace_event_data_offsets_nfsd_io_class {};
+
+struct trace_event_data_offsets_nfsd_err_class {};
+
+struct trace_event_data_offsets_nfsd_dirent {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfsd_copy_err_class {};
+
+struct trace_event_data_offsets_nfsd_delegret_wakeup {};
+
+struct trace_event_data_offsets_nfsd_stateid_class {};
+
+struct trace_event_data_offsets_nfsd_stateseqid_class {};
+
+struct trace_event_data_offsets_nfsd_stid_class {};
+
+struct trace_event_data_offsets_nfsd_clientid_class {};
+
+struct trace_event_data_offsets_nfsd_net_class {};
+
+struct trace_event_data_offsets_nfsd_writeverf_reset {};
+
+struct trace_event_data_offsets_nfsd_clid_cred_mismatch {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_clid_verf_mismatch {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_clid_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_nfsd_file_class {};
+
+struct trace_event_data_offsets_nfsd_file_alloc {};
+
+struct trace_event_data_offsets_nfsd_file_acquire {};
+
+struct trace_event_data_offsets_nfsd_file_insert_err {};
+
+struct trace_event_data_offsets_nfsd_file_cons_err {};
+
+struct trace_event_data_offsets_nfsd_file_open_class {};
+
+struct trace_event_data_offsets_nfsd_file_is_cached {};
+
+struct trace_event_data_offsets_nfsd_file_fsnotify_handle_event {};
+
+struct trace_event_data_offsets_nfsd_file_gc_class {};
+
+struct trace_event_data_offsets_nfsd_file_lruwalk_class {};
+
+struct trace_event_data_offsets_nfsd_file_close {};
+
+struct trace_event_data_offsets_nfsd_file_fsync {};
+
+struct trace_event_data_offsets_nfsd_drc_found {};
+
+struct trace_event_data_offsets_nfsd_drc_mismatch {};
+
+struct trace_event_data_offsets_nfsd_cb_args {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_nodelegs {};
+
+struct trace_event_data_offsets_nfsd_cb_class {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_setup {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_setup_err {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_recall {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_notify_lock {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_offload {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_recall_any {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_nfsd_cb_done_class {};
+
+struct trace_event_data_offsets_nfsd_cb_recall_any_done {};
+
+typedef void (*btf_trace_nfsd_garbage_args_err)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_nfsd_cant_encode_err)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_nfsd_compound)(void *, const struct svc_rqst *, const char *, u32, u32);
+
+typedef void (*btf_trace_nfsd_compound_status)(void *, u32, u32, __be32, const char *);
+
+typedef void (*btf_trace_nfsd_compound_decode_err)(void *, const struct svc_rqst *, u32, u32, u32, __be32);
+
+typedef void (*btf_trace_nfsd_compound_encode_err)(void *, const struct svc_rqst *, u32, __be32);
+
+typedef void (*btf_trace_nfsd_fh_verify)(void *, const struct svc_rqst *, const struct svc_fh *, umode_t, int);
+
+typedef void (*btf_trace_nfsd_fh_verify_err)(void *, const struct svc_rqst *, const struct svc_fh *, umode_t, int, __be32);
+
+typedef void (*btf_trace_nfsd_set_fh_dentry_badexport)(void *, struct svc_rqst *, struct svc_fh *, int);
+
+typedef void (*btf_trace_nfsd_set_fh_dentry_badhandle)(void *, struct svc_rqst *, struct svc_fh *, int);
+
+typedef void (*btf_trace_nfsd_exp_find_key)(void *, const struct svc_expkey *, int);
+
+typedef void (*btf_trace_nfsd_expkey_update)(void *, const struct svc_expkey *, const char *);
+
+typedef void (*btf_trace_nfsd_exp_get_by_name)(void *, const struct svc_export *, int);
+
+typedef void (*btf_trace_nfsd_export_update)(void *, const struct svc_export *);
+
+typedef void (*btf_trace_nfsd_read_start)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_read_splice)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_read_vector)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_read_io_done)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_read_done)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_write_start)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_write_opened)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_write_io_done)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_write_done)(void *, struct svc_rqst *, struct svc_fh *, u64, u32);
+
+typedef void (*btf_trace_nfsd_read_err)(void *, struct svc_rqst *, struct svc_fh *, loff_t, int);
+
+typedef void (*btf_trace_nfsd_write_err)(void *, struct svc_rqst *, struct svc_fh *, loff_t, int);
+
+typedef void (*btf_trace_nfsd_dirent)(void *, struct svc_fh *, u64, const char *, int);
+
+typedef void (*btf_trace_nfsd_clone_file_range_err)(void *, struct svc_rqst *, struct svc_fh *, loff_t, struct svc_fh *, loff_t, u64, int);
+
+typedef void (*btf_trace_nfsd_delegret_wakeup)(void *, const struct svc_rqst *, const struct inode *, long int);
+
+typedef void (*btf_trace_nfsd_layoutstate_alloc)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layoutstate_unhash)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layoutstate_free)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_get_lookup_fail)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_commit_lookup_fail)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_return_lookup_fail)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_recall)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_recall_done)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_recall_fail)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_layout_recall_release)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_open)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_deleg_read)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_deleg_return)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_deleg_recall)(void *, stateid_t *);
+
+typedef void (*btf_trace_nfsd_preprocess)(void *, u32, const stateid_t *);
+
+typedef void (*btf_trace_nfsd_open_confirm)(void *, u32, const stateid_t *);
+
+typedef void (*btf_trace_nfsd_stid_revoke)(void *, const struct nfs4_stid *);
+
+typedef void (*btf_trace_nfsd_clid_expire_unconf)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_reclaim_complete)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_confirmed)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_destroyed)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_admin_expired)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_replaced)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_purged)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_renew)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_clid_stale)(void *, const clientid_t *);
+
+typedef void (*btf_trace_nfsd_grace_start)(void *, const struct nfsd_net *);
+
+typedef void (*btf_trace_nfsd_grace_complete)(void *, const struct nfsd_net *);
+
+typedef void (*btf_trace_nfsd_writeverf_reset)(void *, const struct nfsd_net *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_nfsd_clid_cred_mismatch)(void *, const struct nfs4_client *, const struct svc_rqst *);
+
+typedef void (*btf_trace_nfsd_clid_verf_mismatch)(void *, const struct nfs4_client *, const struct svc_rqst *, const nfs4_verifier *);
+
+typedef void (*btf_trace_nfsd_clid_fresh)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_clid_confirmed_r)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_file_free)(void *, struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_unhash)(void *, struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_put)(void *, struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_closing)(void *, struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_unhash_and_queue)(void *, struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_alloc)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_acquire)(void *, const struct svc_rqst *, const struct inode *, unsigned int, const struct nfsd_file *, __be32);
+
+typedef void (*btf_trace_nfsd_file_insert_err)(void *, const struct svc_rqst *, const struct inode *, unsigned int, long int);
+
+typedef void (*btf_trace_nfsd_file_cons_err)(void *, const struct svc_rqst *, const struct inode *, unsigned int, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_open)(void *, const struct nfsd_file *, __be32);
+
+typedef void (*btf_trace_nfsd_file_opened)(void *, const struct nfsd_file *, __be32);
+
+typedef void (*btf_trace_nfsd_file_is_cached)(void *, const struct inode *, int);
+
+typedef void (*btf_trace_nfsd_file_fsnotify_handle_event)(void *, struct inode *, u32);
+
+typedef void (*btf_trace_nfsd_file_lru_add)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_lru_add_disposed)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_lru_del)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_lru_del_disposed)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_gc_in_use)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_gc_writeback)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_gc_referenced)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_gc_disposed)(void *, const struct nfsd_file *);
+
+typedef void (*btf_trace_nfsd_file_gc_removed)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_nfsd_file_shrinker_removed)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_nfsd_file_close)(void *, const struct inode *);
+
+typedef void (*btf_trace_nfsd_file_fsync)(void *, const struct nfsd_file *, int);
+
+typedef void (*btf_trace_nfsd_drc_found)(void *, const struct nfsd_net *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_nfsd_drc_mismatch)(void *, const struct nfsd_net *, const struct svc_cacherep *, const struct svc_cacherep *);
+
+typedef void (*btf_trace_nfsd_cb_args)(void *, const struct nfs4_client *, const struct nfs4_cb_conn *);
+
+typedef void (*btf_trace_nfsd_cb_nodelegs)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_cb_state)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_cb_probe)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_cb_lost)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_cb_shutdown)(void *, const struct nfs4_client *);
+
+typedef void (*btf_trace_nfsd_cb_setup)(void *, const struct nfs4_client *, const char *, rpc_authflavor_t);
+
+typedef void (*btf_trace_nfsd_cb_setup_err)(void *, const struct nfs4_client *, long int);
+
+typedef void (*btf_trace_nfsd_cb_recall)(void *, const struct nfs4_stid *);
+
+typedef void (*btf_trace_nfsd_cb_notify_lock)(void *, const struct nfs4_lockowner *, const struct nfsd4_blocked_lock *);
+
+typedef void (*btf_trace_nfsd_cb_offload)(void *, const struct nfs4_client *, const stateid_t *, const struct knfsd_fh *, u64, __be32);
+
+typedef void (*btf_trace_nfsd_cb_recall_any)(void *, const struct nfsd4_cb_recall_any *);
+
+typedef void (*btf_trace_nfsd_cb_recall_done)(void *, const stateid_t *, const struct rpc_task *);
+
+typedef void (*btf_trace_nfsd_cb_notify_lock_done)(void *, const stateid_t *, const struct rpc_task *);
+
+typedef void (*btf_trace_nfsd_cb_layout_done)(void *, const stateid_t *, const struct rpc_task *);
+
+typedef void (*btf_trace_nfsd_cb_offload_done)(void *, const stateid_t *, const struct rpc_task *);
+
+typedef void (*btf_trace_nfsd_cb_recall_any_done)(void *, const struct nfsd4_callback *, const struct rpc_task *);
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	long unsigned int state[1];
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr *ifa_list;
+	struct ip_mc_list *mc_list;
+	struct ip_mc_list **mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	long unsigned int mr_v1_seen;
+	long unsigned int mr_v2_seen;
+	long unsigned int mr_maxdelay;
+	long unsigned int mr_qi;
+	long unsigned int mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	long unsigned int ifa_cstamp;
+	long unsigned int ifa_tstamp;
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
+	refcount_t refcnt;
+	spinlock_t lock;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	long unsigned int cstamp;
+	long unsigned int tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
+};
+
+struct nfsd_stats {
+	struct percpu_counter counter[82];
+	atomic_t th_cnt;
+};
+
+enum {
+	RC_NOCACHE = 0,
+	RC_REPLSTAT = 1,
+	RC_REPLBUFF = 2,
+};
+
+enum nfsd_fsid {
+	FSID_DEV = 0,
+	FSID_NUM = 1,
+	FSID_MAJOR_MINOR = 2,
+	FSID_ENCODE_DEV = 3,
+	FSID_UUID4_INUM = 4,
+	FSID_UUID8 = 5,
+	FSID_UUID16 = 6,
+	FSID_UUID16_INUM = 7,
+};
+
+enum fsid_source {
+	FSIDSOURCE_DEV = 0,
+	FSIDSOURCE_FSID = 1,
+	FSIDSOURCE_UUID = 2,
+};
+
+struct readdir_cd {
+	__be32 err;
+};
+
+struct nfsd4_compound_state {
+	struct svc_fh current_fh;
+	struct svc_fh save_fh;
+	struct nfs4_stateowner *replay_owner;
+	struct nfs4_client *clp;
+	struct nfsd4_session *session;
+	struct nfsd4_slot *slot;
+	int data_offset;
+	bool spo_must_allowed;
+	size_t iovlen;
+	u32 minorversion;
+	__be32 status;
+	stateid_t current_stateid;
+	stateid_t save_stateid;
+	u32 sid_flags;
+};
+
+struct nfsd4_compoundres {
+	struct xdr_stream *xdr;
+	struct svc_rqst *rqstp;
+	__be32 *statusp;
+	char *tag;
+	u32 taglen;
+	u32 opcnt;
+	struct nfsd4_compound_state cstate;
+};
+
+typedef int (*nfsd_filldir_t)(void *, const char *, int, loff_t, u64, unsigned int);
+
+struct nfsd_attrs {
+	struct iattr *na_iattr;
+	struct xdr_netobj *na_seclabel;
+	struct posix_acl *na_pacl;
+	struct posix_acl *na_dpacl;
+	int na_labelerr;
+	int na_aclerr;
+};
+
+struct accessmap {
+	u32 access;
+	int how;
+};
+
+struct buffered_dirent {
+	u64 ino;
+	loff_t offset;
+	int namlen;
+	unsigned int d_type;
+	char name[0];
+};
+
+struct readdir_data {
+	struct dir_context ctx;
+	char *dirent;
+	size_t used;
+	int full;
+};
+
+struct nfsd4_deviceid_map {
+	struct list_head hash;
+	u64 idx;
+	int fsid_type;
+	u32 fsid[0];
+};
+
+struct flags {
+	int flag;
+	char *name[2];
+};
+
+enum {
+	NLM_LCK_GRANTED = 0,
+	NLM_LCK_DENIED = 1,
+	NLM_LCK_DENIED_NOLOCKS = 2,
+	NLM_LCK_BLOCKED = 3,
+	NLM_LCK_DENIED_GRACE_PERIOD = 4,
+	NLM_DEADLCK = 5,
+	NLM_ROFS = 6,
+	NLM_STALE_FH = 7,
+	NLM_FBIG = 8,
+	NLM_FAILED = 9,
+};
+
+struct nlmsvc_binding {
+	__be32 (*fopen)(struct svc_rqst *, struct nfs_fh *, struct file **, int);
+	void (*fclose)(struct file *);
+};
+
+struct nfsd_drc_bucket {
+	struct rb_root rb_head;
+	struct list_head lru_head;
+	spinlock_t cache_lock;
+};
+
+enum {
+	RC_UNUSED = 0,
+	RC_INPROG = 1,
+	RC_DONE = 2,
+};
+
+typedef struct svc_fh svc_fh;
+
+struct nfsd_fhandle {
+	struct svc_fh fh;
+};
+
+struct nfsd3_sattrargs {
+	struct svc_fh fh;
+	struct iattr attrs;
+	int check_guard;
+	time64_t guardtime;
+};
+
+struct nfsd3_diropargs {
+	struct svc_fh fh;
+	char *name;
+	unsigned int len;
+};
+
+struct nfsd3_accessargs {
+	struct svc_fh fh;
+	__u32 access;
+};
+
+struct nfsd3_readargs {
+	struct svc_fh fh;
+	__u64 offset;
+	__u32 count;
+};
+
+struct nfsd3_writeargs {
+	svc_fh fh;
+	__u64 offset;
+	__u32 count;
+	int stable;
+	__u32 len;
+	struct xdr_buf payload;
+};
+
+struct nfsd3_createargs {
+	struct svc_fh fh;
+	char *name;
+	unsigned int len;
+	int createmode;
+	struct iattr attrs;
+	__be32 *verf;
+};
+
+struct nfsd3_mknodargs {
+	struct svc_fh fh;
+	char *name;
+	unsigned int len;
+	__u32 ftype;
+	__u32 major;
+	__u32 minor;
+	struct iattr attrs;
+};
+
+struct nfsd3_renameargs {
+	struct svc_fh ffh;
+	char *fname;
+	unsigned int flen;
+	struct svc_fh tfh;
+	char *tname;
+	unsigned int tlen;
+};
+
+struct nfsd3_linkargs {
+	struct svc_fh ffh;
+	struct svc_fh tfh;
+	char *tname;
+	unsigned int tlen;
+};
+
+struct nfsd3_symlinkargs {
+	struct svc_fh ffh;
+	char *fname;
+	unsigned int flen;
+	char *tname;
+	unsigned int tlen;
+	struct iattr attrs;
+	struct kvec first;
+};
+
+struct nfsd3_readdirargs {
+	struct svc_fh fh;
+	__u64 cookie;
+	__u32 count;
+	__be32 *verf;
+};
+
+struct nfsd3_commitargs {
+	struct svc_fh fh;
+	__u64 offset;
+	__u32 count;
+};
+
+struct nfsd3_attrstat {
+	__be32 status;
+	struct svc_fh fh;
+	struct kstat stat;
+};
+
+struct nfsd3_diropres {
+	__be32 status;
+	struct svc_fh dirfh;
+	struct svc_fh fh;
+};
+
+struct nfsd3_accessres {
+	__be32 status;
+	struct svc_fh fh;
+	__u32 access;
+	struct kstat stat;
+};
+
+struct nfsd3_readlinkres {
+	__be32 status;
+	struct svc_fh fh;
+	__u32 len;
+	struct page **pages;
+};
+
+struct nfsd3_readres {
+	__be32 status;
+	struct svc_fh fh;
+	long unsigned int count;
+	__u32 eof;
+	struct page **pages;
+};
+
+struct nfsd3_writeres {
+	__be32 status;
+	struct svc_fh fh;
+	long unsigned int count;
+	int committed;
+	__be32 verf[2];
+};
+
+struct nfsd3_renameres {
+	__be32 status;
+	struct svc_fh ffh;
+	struct svc_fh tfh;
+};
+
+struct nfsd3_linkres {
+	__be32 status;
+	struct svc_fh tfh;
+	struct svc_fh fh;
+};
+
+struct nfsd3_readdirres {
+	__be32 status;
+	struct svc_fh fh;
+	__be32 verf[2];
+	struct xdr_stream xdr;
+	struct xdr_buf dirlist;
+	struct svc_fh scratch;
+	struct readdir_cd common;
+	unsigned int cookie_offset;
+	struct svc_rqst *rqstp;
+};
+
+struct nfsd3_fsstatres {
+	__be32 status;
+	struct kstatfs stats;
+	__u32 invarsec;
+};
+
+struct nfsd3_fsinfores {
+	__be32 status;
+	__u32 f_rtmax;
+	__u32 f_rtpref;
+	__u32 f_rtmult;
+	__u32 f_wtmax;
+	__u32 f_wtpref;
+	__u32 f_wtmult;
+	__u32 f_dtpref;
+	__u64 f_maxfilesize;
+	__u32 f_properties;
+};
+
+struct nfsd3_pathconfres {
+	__be32 status;
+	__u32 p_link_max;
+	__u32 p_name_max;
+	__u32 p_no_trunc;
+	__u32 p_chown_restricted;
+	__u32 p_case_insensitive;
+	__u32 p_case_preserving;
+};
+
+struct nfsd3_commitres {
+	__be32 status;
+	struct svc_fh fh;
+	__be32 verf[2];
+};
+
+enum nfs3_time_how {
+	DONT_CHANGE = 0,
+	SET_TO_SERVER_TIME = 1,
+	SET_TO_CLIENT_TIME = 2,
+};
+
+struct nfsd3_fhandle_pair {
+	__u32 dummy;
+	struct svc_fh fh1;
+	struct svc_fh fh2;
+};
+
+struct nfsd3_getaclargs {
+	struct svc_fh fh;
+	__u32 mask;
+};
+
+struct nfsd3_setaclargs {
+	struct svc_fh fh;
+	__u32 mask;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
+};
+
+struct nfsd3_getaclres {
+	__be32 status;
+	struct svc_fh fh;
+	int mask;
+	struct posix_acl *acl_access;
+	struct posix_acl *acl_default;
+	struct kstat stat;
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+struct nfsd_fcache_disposal {
+	struct work_struct work;
+	spinlock_t lock;
+	struct list_head freeme;
+};
+
+enum nfsd_file_lookup_type {
+	NFSD_FILE_KEY_INODE = 0,
+	NFSD_FILE_KEY_FULL = 1,
+};
+
+struct nfsd_file_lookup_key {
+	struct inode *inode;
+	struct net *net;
+	const struct cred *cred;
+	unsigned char need;
+	bool gc;
+	enum nfsd_file_lookup_type type;
+};
+
+struct nfs4_ace {
+	uint32_t type;
+	uint32_t flag;
+	uint32_t access_mask;
+	int whotype;
+	union {
+		kuid_t who_uid;
+		kgid_t who_gid;
+	};
+};
+
+struct nfs4_acl {
+	uint32_t naces;
+	struct nfs4_ace aces[0];
+};
+
+struct nfsd4_ssc_umount_item {
+	struct list_head nsui_list;
+	bool nsui_busy;
+	refcount_t nsui_refcnt;
+	long unsigned int nsui_expire;
+	struct vfsmount *nsui_vfsmount;
+	char nsui_ipaddr[64];
+};
+
+typedef struct {
+	stateid_t cs_stid;
+	unsigned char cs_type;
+	refcount_t cs_count;
+} copy_stateid_t;
+
+struct nfs4_cpntf_state {
+	copy_stateid_t cp_stateid;
+	struct list_head cp_list;
+	stateid_t cp_p_stateid;
+	clientid_t cp_p_clid;
+	time64_t cpntf_time;
+};
+
+struct nfs4_clnt_odstate {
+	struct nfs4_client *co_client;
+	struct nfs4_file *co_file;
+	struct list_head co_perfile;
+	refcount_t co_odcount;
+};
+
+struct nfsd4_backchannel_ctl {
+	u32 bc_cb_program;
+	struct nfsd4_cb_sec bc_cb_sec;
+};
+
+struct nfsd4_bind_conn_to_session {
+	struct nfs4_sessionid sessionid;
+	u32 dir;
+};
+
+struct nfsd4_sessionid {
+	clientid_t clientid;
+	u32 sequence;
+	u32 reserved;
+};
+
+struct nfs4_ol_stateid;
+
+struct nfs4_openowner {
+	struct nfs4_stateowner oo_owner;
+	struct list_head oo_perclient;
+	struct list_head oo_close_lru;
+	struct nfs4_ol_stateid *oo_last_closed_stid;
+	time64_t oo_time;
+	unsigned char oo_flags;
+};
+
+struct nfs4_ol_stateid {
+	struct nfs4_stid st_stid;
+	struct list_head st_perfile;
+	struct list_head st_perstateowner;
+	struct list_head st_locks;
+	struct nfs4_stateowner *st_stateowner;
+	struct nfs4_clnt_odstate *st_clnt_odstate;
+	unsigned char st_access_bmap;
+	unsigned char st_deny_bmap;
+	struct nfs4_ol_stateid *st_openstp;
+	struct mutex st_mutex;
+};
+
+struct nfs4_layout_stateid {
+	struct nfs4_stid ls_stid;
+	struct list_head ls_perclnt;
+	struct list_head ls_perfile;
+	spinlock_t ls_lock;
+	struct list_head ls_layouts;
+	u32 ls_layout_type;
+	struct nfsd_file *ls_file;
+	struct nfsd4_callback ls_recall;
+	stateid_t ls_recall_sid;
+	bool ls_recalled;
+	struct mutex ls_mutex;
+};
+
+enum nfsd4_cb_op {
+	NFSPROC4_CLNT_CB_NULL = 0,
+	NFSPROC4_CLNT_CB_RECALL = 1,
+	NFSPROC4_CLNT_CB_LAYOUT = 2,
+	NFSPROC4_CLNT_CB_OFFLOAD = 3,
+	NFSPROC4_CLNT_CB_SEQUENCE = 4,
+	NFSPROC4_CLNT_CB_NOTIFY_LOCK = 5,
+	NFSPROC4_CLNT_CB_RECALL_ANY = 6,
+};
+
+struct nfsd4_change_info {
+	u32 atomic;
+	u64 before_change;
+	u64 after_change;
+};
+
+struct nfsd4_access {
+	u32 ac_req_access;
+	u32 ac_supported;
+	u32 ac_resp_access;
+};
+
+struct nfsd4_close {
+	u32 cl_seqid;
+	stateid_t cl_stateid;
+};
+
+struct nfsd4_commit {
+	u64 co_offset;
+	u32 co_count;
+	nfs4_verifier co_verf;
+};
+
+struct nfsd4_create {
+	u32 cr_namelen;
+	char *cr_name;
+	u32 cr_type;
+	union {
+		struct {
+			u32 datalen;
+			char *data;
+			struct kvec first;
+		} link;
+		struct {
+			u32 specdata1;
+			u32 specdata2;
+		} dev;
+	} u;
+	u32 cr_bmval[3];
+	struct iattr cr_iattr;
+	int cr_umask;
+	struct nfsd4_change_info cr_cinfo;
+	struct nfs4_acl *cr_acl;
+	struct xdr_netobj cr_label;
+};
+
+struct nfsd4_delegreturn {
+	stateid_t dr_stateid;
+};
+
+struct nfsd4_getattr {
+	u32 ga_bmval[3];
+	struct svc_fh *ga_fhp;
+};
+
+struct nfsd4_link {
+	u32 li_namelen;
+	char *li_name;
+	struct nfsd4_change_info li_cinfo;
+};
+
+struct nfsd4_lock_denied {
+	clientid_t ld_clientid;
+	struct xdr_netobj ld_owner;
+	u64 ld_start;
+	u64 ld_length;
+	u32 ld_type;
+};
+
+struct nfsd4_lock {
+	u32 lk_type;
+	u32 lk_reclaim;
+	u64 lk_offset;
+	u64 lk_length;
+	u32 lk_is_new;
+	union {
+		struct {
+			u32 open_seqid;
+			stateid_t open_stateid;
+			u32 lock_seqid;
+			clientid_t clientid;
+			struct xdr_netobj owner;
+		} new;
+		struct {
+			stateid_t lock_stateid;
+			u32 lock_seqid;
+		} old;
+	} v;
+	union {
+		struct {
+			stateid_t stateid;
+		} ok;
+		struct nfsd4_lock_denied denied;
+	} u;
+};
+
+struct nfsd4_lockt {
+	u32 lt_type;
+	clientid_t lt_clientid;
+	struct xdr_netobj lt_owner;
+	u64 lt_offset;
+	u64 lt_length;
+	struct nfsd4_lock_denied lt_denied;
+};
+
+struct nfsd4_locku {
+	u32 lu_type;
+	u32 lu_seqid;
+	stateid_t lu_stateid;
+	u64 lu_offset;
+	u64 lu_length;
+};
+
+struct nfsd4_lookup {
+	u32 lo_len;
+	char *lo_name;
+};
+
+struct nfsd4_putfh {
+	u32 pf_fhlen;
+	char *pf_fhval;
+	bool no_verify;
+};
+
+struct nfsd4_getxattr {
+	char *getxa_name;
+	u32 getxa_len;
+	void *getxa_buf;
+};
+
+struct nfsd4_setxattr {
+	u32 setxa_flags;
+	char *setxa_name;
+	char *setxa_buf;
+	u32 setxa_len;
+	struct nfsd4_change_info setxa_cinfo;
+};
+
+struct nfsd4_removexattr {
+	char *rmxa_name;
+	struct nfsd4_change_info rmxa_cinfo;
+};
+
+struct nfsd4_listxattrs {
+	u64 lsxa_cookie;
+	u32 lsxa_maxcount;
+	char *lsxa_buf;
+	u32 lsxa_len;
+};
+
+struct nfsd4_open {
+	u32 op_claim_type;
+	u32 op_fnamelen;
+	char *op_fname;
+	u32 op_delegate_type;
+	stateid_t op_delegate_stateid;
+	u32 op_why_no_deleg;
+	u32 op_create;
+	u32 op_createmode;
+	int op_umask;
+	u32 op_bmval[3];
+	struct iattr op_iattr;
+	long: 64;
+	long: 64;
+	nfs4_verifier op_verf;
+	clientid_t op_clientid;
+	struct xdr_netobj op_owner;
+	u32 op_seqid;
+	u32 op_share_access;
+	u32 op_share_deny;
+	u32 op_deleg_want;
+	stateid_t op_stateid;
+	__be32 op_xdr_error;
+	u32 op_recall;
+	struct nfsd4_change_info op_cinfo;
+	u32 op_rflags;
+	bool op_truncate;
+	bool op_created;
+	struct nfs4_openowner *op_openowner;
+	struct file *op_filp;
+	struct nfs4_file *op_file;
+	struct nfs4_ol_stateid *op_stp;
+	struct nfs4_clnt_odstate *op_odstate;
+	struct nfs4_acl *op_acl;
+	struct xdr_netobj op_label;
+	struct svc_rqst *op_rqstp;
+	long: 64;
+	long: 64;
+};
+
+struct nfsd4_open_confirm {
+	stateid_t oc_req_stateid;
+	u32 oc_seqid;
+	stateid_t oc_resp_stateid;
+};
+
+struct nfsd4_open_downgrade {
+	stateid_t od_stateid;
+	u32 od_seqid;
+	u32 od_share_access;
+	u32 od_deleg_want;
+	u32 od_share_deny;
+};
+
+struct nfsd4_read {
+	stateid_t rd_stateid;
+	u64 rd_offset;
+	u32 rd_length;
+	int rd_vlen;
+	struct nfsd_file *rd_nf;
+	struct svc_rqst *rd_rqstp;
+	struct svc_fh *rd_fhp;
+	u32 rd_eof;
+};
+
+struct nfsd4_readdir {
+	u64 rd_cookie;
+	nfs4_verifier rd_verf;
+	u32 rd_dircount;
+	u32 rd_maxcount;
+	u32 rd_bmval[3];
+	struct svc_rqst *rd_rqstp;
+	struct svc_fh *rd_fhp;
+	struct readdir_cd common;
+	struct xdr_stream *xdr;
+	int cookie_offset;
+};
+
+struct nfsd4_release_lockowner {
+	clientid_t rl_clientid;
+	struct xdr_netobj rl_owner;
+};
+
+struct nfsd4_readlink {
+	struct svc_rqst *rl_rqstp;
+	struct svc_fh *rl_fhp;
+};
+
+struct nfsd4_remove {
+	u32 rm_namelen;
+	char *rm_name;
+	struct nfsd4_change_info rm_cinfo;
+};
+
+struct nfsd4_rename {
+	u32 rn_snamelen;
+	char *rn_sname;
+	u32 rn_tnamelen;
+	char *rn_tname;
+	struct nfsd4_change_info rn_sinfo;
+	struct nfsd4_change_info rn_tinfo;
+};
+
+struct nfsd4_secinfo {
+	u32 si_namelen;
+	char *si_name;
+	struct svc_export *si_exp;
+};
+
+struct nfsd4_secinfo_no_name {
+	u32 sin_style;
+	struct svc_export *sin_exp;
+};
+
+struct nfsd4_setattr {
+	stateid_t sa_stateid;
+	u32 sa_bmval[3];
+	struct iattr sa_iattr;
+	struct nfs4_acl *sa_acl;
+	struct xdr_netobj sa_label;
+};
+
+struct nfsd4_setclientid {
+	nfs4_verifier se_verf;
+	struct xdr_netobj se_name;
+	u32 se_callback_prog;
+	u32 se_callback_netid_len;
+	char *se_callback_netid_val;
+	u32 se_callback_addr_len;
+	char *se_callback_addr_val;
+	u32 se_callback_ident;
+	clientid_t se_clientid;
+	nfs4_verifier se_confirm;
+};
+
+struct nfsd4_setclientid_confirm {
+	clientid_t sc_clientid;
+	nfs4_verifier sc_confirm;
+};
+
+struct nfsd4_test_stateid {
+	u32 ts_num_ids;
+	struct list_head ts_stateid_list;
+};
+
+struct nfsd4_free_stateid {
+	stateid_t fr_stateid;
+};
+
+struct nfsd4_verify {
+	u32 ve_bmval[3];
+	u32 ve_attrlen;
+	char *ve_attrval;
+};
+
+struct nfsd4_write {
+	stateid_t wr_stateid;
+	u64 wr_offset;
+	u32 wr_stable_how;
+	u32 wr_buflen;
+	struct xdr_buf wr_payload;
+	u32 wr_bytes_written;
+	u32 wr_how_written;
+	nfs4_verifier wr_verifier;
+};
+
+struct nfsd4_exchange_id {
+	nfs4_verifier verifier;
+	struct xdr_netobj clname;
+	u32 flags;
+	clientid_t clientid;
+	u32 seqid;
+	u32 spa_how;
+	u32 spo_must_enforce[3];
+	u32 spo_must_allow[3];
+	struct xdr_netobj nii_domain;
+	struct xdr_netobj nii_name;
+	struct timespec64 nii_time;
+};
+
+struct nfsd4_sequence {
+	struct nfs4_sessionid sessionid;
+	u32 seqid;
+	u32 slotid;
+	u32 maxslots;
+	u32 cachethis;
+	u32 status_flags;
+};
+
+struct nfsd4_destroy_session {
+	struct nfs4_sessionid sessionid;
+};
+
+struct nfsd4_destroy_clientid {
+	clientid_t clientid;
+};
+
+struct nfsd4_reclaim_complete {
+	u32 rca_one_fs;
+};
+
+struct nfsd4_deviceid {
+	u64 fsid_idx;
+	u32 generation;
+	u32 pad;
+};
+
+struct nfsd4_layout_seg {
+	u32 iomode;
+	u64 offset;
+	u64 length;
+};
+
+struct nfsd4_getdeviceinfo {
+	struct nfsd4_deviceid gd_devid;
+	u32 gd_layout_type;
+	u32 gd_maxcount;
+	u32 gd_notify_types;
+	void *gd_device;
+};
+
+struct nfsd4_layoutget {
+	u64 lg_minlength;
+	u32 lg_signal;
+	u32 lg_layout_type;
+	u32 lg_maxcount;
+	stateid_t lg_sid;
+	struct nfsd4_layout_seg lg_seg;
+	void *lg_content;
+};
+
+struct nfsd4_layoutcommit {
+	stateid_t lc_sid;
+	struct nfsd4_layout_seg lc_seg;
+	u32 lc_reclaim;
+	u32 lc_newoffset;
+	u64 lc_last_wr;
+	struct timespec64 lc_mtime;
+	u32 lc_layout_type;
+	u32 lc_up_len;
+	void *lc_up_layout;
+	u32 lc_size_chg;
+	u64 lc_newsize;
+};
+
+struct nfsd4_layoutreturn {
+	u32 lr_return_type;
+	u32 lr_layout_type;
+	struct nfsd4_layout_seg lr_seg;
+	u32 lr_reclaim;
+	u32 lrf_body_len;
+	void *lrf_body;
+	stateid_t lr_sid;
+	u32 lrs_present;
+};
+
+struct nfsd4_fallocate {
+	stateid_t falloc_stateid;
+	loff_t falloc_offset;
+	u64 falloc_length;
+};
+
+struct nfsd4_clone {
+	stateid_t cl_src_stateid;
+	stateid_t cl_dst_stateid;
+	u64 cl_src_pos;
+	u64 cl_dst_pos;
+	u64 cl_count;
+};
+
+struct nfsd42_write_res {
+	u64 wr_bytes_written;
+	u32 wr_stable_how;
+	nfs4_verifier wr_verifier;
+	stateid_t cb_stateid;
+};
+
+struct nfsd4_cb_offload {
+	struct nfsd4_callback co_cb;
+	struct nfsd42_write_res co_res;
+	__be32 co_nfserr;
+	struct knfsd_fh co_fh;
+};
+
+struct nfsd4_copy {
+	stateid_t cp_src_stateid;
+	stateid_t cp_dst_stateid;
+	u64 cp_src_pos;
+	u64 cp_dst_pos;
+	u64 cp_count;
+	struct nl4_server *cp_src;
+	long unsigned int cp_flags;
+	struct nfsd42_write_res cp_res;
+	struct knfsd_fh fh;
+	struct nfs4_client *cp_clp;
+	struct nfsd_file *nf_src;
+	struct nfsd_file *nf_dst;
+	copy_stateid_t cp_stateid;
+	struct list_head copies;
+	struct task_struct *copy_task;
+	refcount_t refcount;
+	struct vfsmount *ss_mnt;
+	struct nfs_fh c_fh;
+	nfs4_stateid stateid;
+};
+
+struct nfsd4_seek {
+	stateid_t seek_stateid;
+	loff_t seek_offset;
+	u32 seek_whence;
+	u32 seek_eof;
+	loff_t seek_pos;
+};
+
+struct nfsd4_offload_status {
+	stateid_t stateid;
+	u64 count;
+	u32 status;
+};
+
+struct nfsd4_copy_notify {
+	stateid_t cpn_src_stateid;
+	struct nl4_server *cpn_dst;
+	stateid_t cpn_cnr_stateid;
+	u64 cpn_sec;
+	u32 cpn_nsec;
+	struct nl4_server *cpn_src;
+};
+
+union nfsd4_op_u {
+	struct nfsd4_access access;
+	struct nfsd4_close close;
+	struct nfsd4_commit commit;
+	struct nfsd4_create create;
+	struct nfsd4_delegreturn delegreturn;
+	struct nfsd4_getattr getattr;
+	struct svc_fh *getfh;
+	struct nfsd4_link link;
+	struct nfsd4_lock lock;
+	struct nfsd4_lockt lockt;
+	struct nfsd4_locku locku;
+	struct nfsd4_lookup lookup;
+	struct nfsd4_verify nverify;
+	struct nfsd4_open open;
+	struct nfsd4_open_confirm open_confirm;
+	struct nfsd4_open_downgrade open_downgrade;
+	struct nfsd4_putfh putfh;
+	struct nfsd4_read read;
+	struct nfsd4_readdir readdir;
+	struct nfsd4_readlink readlink;
+	struct nfsd4_remove remove;
+	struct nfsd4_rename rename;
+	clientid_t renew;
+	struct nfsd4_secinfo secinfo;
+	struct nfsd4_setattr setattr;
+	struct nfsd4_setclientid setclientid;
+	struct nfsd4_setclientid_confirm setclientid_confirm;
+	struct nfsd4_verify verify;
+	struct nfsd4_write write;
+	struct nfsd4_release_lockowner release_lockowner;
+	struct nfsd4_exchange_id exchange_id;
+	struct nfsd4_backchannel_ctl backchannel_ctl;
+	struct nfsd4_bind_conn_to_session bind_conn_to_session;
+	struct nfsd4_create_session create_session;
+	struct nfsd4_destroy_session destroy_session;
+	struct nfsd4_destroy_clientid destroy_clientid;
+	struct nfsd4_sequence sequence;
+	struct nfsd4_reclaim_complete reclaim_complete;
+	struct nfsd4_test_stateid test_stateid;
+	struct nfsd4_free_stateid free_stateid;
+	struct nfsd4_getdeviceinfo getdeviceinfo;
+	struct nfsd4_layoutget layoutget;
+	struct nfsd4_layoutcommit layoutcommit;
+	struct nfsd4_layoutreturn layoutreturn;
+	struct nfsd4_secinfo_no_name secinfo_no_name;
+	struct nfsd4_fallocate allocate;
+	struct nfsd4_fallocate deallocate;
+	struct nfsd4_clone clone;
+	struct nfsd4_copy copy;
+	struct nfsd4_offload_status offload_status;
+	struct nfsd4_copy_notify copy_notify;
+	struct nfsd4_seek seek;
+	struct nfsd4_getxattr getxattr;
+	struct nfsd4_setxattr setxattr;
+	struct nfsd4_listxattrs listxattrs;
+	struct nfsd4_removexattr removexattr;
+};
+
+struct nfsd4_operation;
+
+struct nfsd4_op {
+	u32 opnum;
+	__be32 status;
+	const struct nfsd4_operation *opdesc;
+	struct nfs4_replay *replay;
+	long: 64;
+	union nfsd4_op_u u;
+};
+
+struct nfsd4_operation {
+	__be32 (*op_func)(struct svc_rqst *, struct nfsd4_compound_state *, union nfsd4_op_u *);
+	void (*op_release)(union nfsd4_op_u *);
+	u32 op_flags;
+	char *op_name;
+	u32 (*op_rsize_bop)(const struct svc_rqst *, const struct nfsd4_op *);
+	void (*op_get_currentstateid)(struct nfsd4_compound_state *, union nfsd4_op_u *);
+	void (*op_set_currentstateid)(struct nfsd4_compound_state *, union nfsd4_op_u *);
+};
+
+struct svcxdr_tmpbuf {
+	struct svcxdr_tmpbuf *next;
+	char buf[0];
+};
+
+struct nfsd4_compoundargs {
+	struct xdr_stream *xdr;
+	struct svcxdr_tmpbuf *to_free;
+	struct svc_rqst *rqstp;
+	char *tag;
+	u32 taglen;
+	u32 minorversion;
+	u32 client_opcnt;
+	u32 opcnt;
+	struct nfsd4_op *ops;
+	long: 64;
+	struct nfsd4_op iops[8];
+};
+
+enum nfsd4_op_flags {
+	ALLOWED_WITHOUT_FH = 1,
+	ALLOWED_ON_ABSENT_FS = 2,
+	ALLOWED_AS_FIRST_OP = 4,
+	OP_HANDLES_WRONGSEC = 8,
+	OP_IS_PUTFH_LIKE = 16,
+	OP_MODIFIES_SOMETHING = 32,
+	OP_CACHEME = 64,
+	OP_CLEAR_STATEID = 128,
+	OP_NONTRIVIAL_ERROR_ENCODE = 256,
+};
+
+struct nfsd4_layout_ops {
+	u32 notify_types;
+	bool disable_recalls;
+	__be32 (*proc_getdeviceinfo)(struct super_block *, struct svc_rqst *, struct nfs4_client *, struct nfsd4_getdeviceinfo *);
+	__be32 (*encode_getdeviceinfo)(struct xdr_stream *, struct nfsd4_getdeviceinfo *);
+	__be32 (*proc_layoutget)(struct inode *, const struct svc_fh *, struct nfsd4_layoutget *);
+	__be32 (*encode_layoutget)(struct xdr_stream *, struct nfsd4_layoutget *);
+	__be32 (*proc_layoutcommit)(struct inode *, struct nfsd4_layoutcommit *);
+	void (*fence_client)(struct nfs4_layout_stateid *);
+};
+
+enum rpc_gss_svc {
+	RPC_GSS_SVC_NONE = 1,
+	RPC_GSS_SVC_INTEGRITY = 2,
+	RPC_GSS_SVC_PRIVACY = 3,
+};
+
+enum nfs4_acl_whotype {
+	NFS4_ACL_WHO_NAMED = 0,
+	NFS4_ACL_WHO_OWNER = 1,
+	NFS4_ACL_WHO_GROUP = 2,
+	NFS4_ACL_WHO_EVERYONE = 3,
+};
+
+struct nfsd4_test_stateid_id {
+	__be32 ts_id_status;
+	stateid_t ts_id_stateid;
+	struct list_head ts_id_list;
+};
+
+typedef __be32 (*nfsd4_dec)(struct nfsd4_compoundargs *, union nfsd4_op_u *);
+
+typedef __be32 (*nfsd4_enc)(struct nfsd4_compoundres *, __be32, union nfsd4_op_u *);
+
+struct ent {
+	struct cache_head h;
+	int type;
+	u32 id;
+	char name[128];
+	char authname[128];
+	struct callback_head callback_head;
+};
+
+struct svc_xpt_user {
+	struct list_head list;
+	void (*callback)(struct svc_xpt_user *);
+};
+
+struct nfs4_delegation {
+	struct nfs4_stid dl_stid;
+	struct list_head dl_perfile;
+	struct list_head dl_perclnt;
+	struct list_head dl_recall_lru;
+	struct nfs4_clnt_odstate *dl_clnt_odstate;
+	u32 dl_type;
+	time64_t dl_time;
+	int dl_retries;
+	struct nfsd4_callback dl_recall;
+	bool dl_recalled;
+};
+
+struct nfsd4_conn {
+	struct list_head cn_persession;
+	struct svc_xprt *cn_xprt;
+	struct svc_xpt_user cn_xpt_user;
+	struct nfsd4_session *cn_session;
+	unsigned char cn_flags;
+};
+
+struct nfs4_cb_compound_hdr {
+	u32 ident;
+	u32 nops;
+	__be32 *nops_p;
+	u32 minorversion;
+	int status;
+};
+
+enum nfs_cb_opnum4 {
+	OP_CB_GETATTR___2 = 3,
+	OP_CB_RECALL___2 = 4,
+	OP_CB_LAYOUTRECALL___2 = 5,
+	OP_CB_NOTIFY___2 = 6,
+	OP_CB_PUSH_DELEG___2 = 7,
+	OP_CB_RECALL_ANY___2 = 8,
+	OP_CB_RECALLABLE_OBJ_AVAIL___2 = 9,
+	OP_CB_RECALL_SLOT___2 = 10,
+	OP_CB_SEQUENCE___2 = 11,
+	OP_CB_WANTS_CANCELLED___2 = 12,
+	OP_CB_NOTIFY_LOCK___2 = 13,
+	OP_CB_NOTIFY_DEVICEID___2 = 14,
+	OP_CB_OFFLOAD___2 = 15,
+	OP_CB_ILLEGAL___2 = 10044,
+};
+
+struct posix_acl_summary {
+	short unsigned int owner;
+	short unsigned int users;
+	short unsigned int group;
+	short unsigned int groups;
+	short unsigned int other;
+	short unsigned int mask;
+};
+
+struct posix_ace_state {
+	u32 allow;
+	u32 deny;
+};
+
+struct posix_user_ace_state {
+	union {
+		kuid_t uid;
+		kgid_t gid;
+	};
+	struct posix_ace_state perms;
+};
+
+struct posix_ace_state_array {
+	int n;
+	struct posix_user_ace_state aces[0];
+};
+
+struct posix_acl_state {
+	int empty;
+	struct posix_ace_state owner;
+	struct posix_ace_state group;
+	struct posix_ace_state other;
+	struct posix_ace_state everyone;
+	struct posix_ace_state mask;
+	struct posix_ace_state_array *users;
+	struct posix_ace_state_array *groups;
+};
+
+typedef s16 int16_t;
+
+enum {
+	RPC_PIPEFS_MOUNT = 0,
+	RPC_PIPEFS_UMOUNT = 1,
+};
+
+enum cld_command {
+	Cld_Create = 0,
+	Cld_Remove = 1,
+	Cld_Check = 2,
+	Cld_GraceDone = 3,
+	Cld_GraceStart = 4,
+	Cld_GetVersion = 5,
+};
+
+struct cld_name {
+	__u16 cn_len;
+	unsigned char cn_id[1024];
+};
+
+struct cld_princhash {
+	__u8 cp_len;
+	unsigned char cp_data[32];
+};
+
+struct cld_clntinfo {
+	struct cld_name cc_name;
+	struct cld_princhash cc_princhash;
+} __attribute__((packed));
+
+struct cld_msg {
+	__u8 cm_vers;
+	__u8 cm_cmd;
+	__s16 cm_status;
+	__u32 cm_xid;
+	union {
+		__s64 cm_gracetime;
+		struct cld_name cm_name;
+		__u8 cm_version;
+	} cm_u;
+} __attribute__((packed));
+
+struct cld_msg_v2 {
+	__u8 cm_vers;
+	__u8 cm_cmd;
+	__s16 cm_status;
+	__u32 cm_xid;
+	union {
+		struct cld_name cm_name;
+		__u8 cm_version;
+		struct cld_clntinfo cm_clntinfo;
+	} cm_u;
+} __attribute__((packed));
+
+struct cld_msg_hdr {
+	__u8 cm_vers;
+	__u8 cm_cmd;
+	__s16 cm_status;
+	__u32 cm_xid;
+};
+
+struct cld_net {
+	struct rpc_pipe *cn_pipe;
+	spinlock_t cn_lock;
+	struct list_head cn_list;
+	unsigned int cn_xid;
+	bool cn_has_legacy;
+	struct crypto_shash *cn_tfm;
+};
+
+struct nfs4_client_reclaim {
+	struct list_head cr_strhash;
+	struct nfs4_client *cr_clp;
+	struct xdr_netobj cr_name;
+	struct xdr_netobj cr_princhash;
+};
+
+typedef int recdir_func(struct dentry *, struct dentry *, struct nfsd_net *);
+
+struct name_list {
+	char name[33];
+	struct list_head list;
+};
+
+struct nfs4_dir_ctx {
+	struct dir_context ctx;
+	struct list_head names;
+};
+
+struct cld_upcall {
+	struct list_head cu_list;
+	struct cld_net *cu_net;
+	struct completion cu_done;
+	union {
+		struct cld_msg_hdr cu_hdr;
+		struct cld_msg cu_msg;
+		struct cld_msg_v2 cu_msg_v2;
+	} cu_u;
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+enum {
+	NFSD4_ACTIVE = 0,
+	NFSD4_COURTESY = 1,
+	NFSD4_EXPIRABLE = 2,
+};
+
+struct bloom_pair {
+	int entries;
+	int old_entries;
+	time64_t swap_time;
+	int new;
+	long unsigned int set[8];
+};
+
+struct laundry_time {
+	time64_t cutoff;
+	time64_t new_timeo;
+};
+
+enum pnfs_block_volume_type {
+	PNFS_BLOCK_VOLUME_SIMPLE = 0,
+	PNFS_BLOCK_VOLUME_SLICE = 1,
+	PNFS_BLOCK_VOLUME_CONCAT = 2,
+	PNFS_BLOCK_VOLUME_STRIPE = 3,
+	PNFS_BLOCK_VOLUME_SCSI = 4,
+};
+
+enum pnfs_block_extent_state {
+	PNFS_BLOCK_READWRITE_DATA = 0,
+	PNFS_BLOCK_READ_DATA = 1,
+	PNFS_BLOCK_INVALID_DATA = 2,
+	PNFS_BLOCK_NONE_DATA = 3,
+};
+
+enum scsi_code_set {
+	PS_CODE_SET_BINARY = 1,
+	PS_CODE_SET_ASCII = 2,
+	PS_CODE_SET_UTF8 = 3,
+};
+
+enum scsi_designator_type {
+	PS_DESIGNATOR_T10 = 1,
+	PS_DESIGNATOR_EUI64 = 2,
+	PS_DESIGNATOR_NAA = 3,
+	PS_DESIGNATOR_NAME = 8,
+};
+
+struct pnfs_block_extent {
+	struct nfsd4_deviceid vol_id;
+	u64 foff;
+	u64 len;
+	u64 soff;
+	enum pnfs_block_extent_state es;
+};
+
+struct pnfs_block_volume {
+	enum pnfs_block_volume_type type;
+	union {
+		struct {
+			u64 offset;
+			u32 sig_len;
+			u8 sig[128];
+		} simple;
+		struct {
+			enum scsi_code_set code_set;
+			enum scsi_designator_type designator_type;
+			int designator_len;
+			u8 designator[256];
+			u64 pr_key;
+		} scsi;
+	};
+};
+
+struct pnfs_block_deviceaddr {
+	u32 nr_volumes;
+	struct pnfs_block_volume volumes[0];
+};
+
+struct nfs4_layout {
+	struct list_head lo_perstate;
+	struct nfs4_layout_stateid *lo_state;
+	struct nfsd4_layout_seg lo_seg;
+};
+
+struct pnfs_ff_netaddr {
+	char netid[5];
+	char addr[57];
+	u32 netid_len;
+	u32 addr_len;
+};
+
+struct pnfs_ff_device_addr {
+	struct pnfs_ff_netaddr netaddr;
+	u32 version;
+	u32 minor_version;
+	u32 rsize;
+	u32 wsize;
+	bool tightly_coupled;
+};
+
+struct pnfs_ff_layout {
+	u32 flags;
+	u32 stats_collect_hint;
+	kuid_t uid;
+	kgid_t gid;
+	struct nfsd4_deviceid deviceid;
+	stateid_t stateid;
+	struct nfs_fh fh;
+};
+
+struct ff_idmap {
+	char buf[11];
+	int len;
+};
+
+struct nlm_lock {
+	char *caller;
+	unsigned int len;
+	struct nfs_fh fh;
+	struct xdr_netobj oh;
+	u32 svid;
+	u64 lock_start;
+	u64 lock_len;
+	struct file_lock fl;
+};
+
+struct nlm_cookie {
+	unsigned char data[32];
+	unsigned int len;
+};
+
+struct nlm_args {
+	struct nlm_cookie cookie;
+	struct nlm_lock lock;
+	u32 block;
+	u32 reclaim;
+	u32 state;
+	u32 monitor;
+	u32 fsm_access;
+	u32 fsm_mode;
+};
+
+struct nlm_res {
+	struct nlm_cookie cookie;
+	__be32 status;
+	struct nlm_lock lock;
+};
+
+struct nlm_block;
+
+struct nlm_rqst {
+	refcount_t a_count;
+	unsigned int a_flags;
+	struct nlm_host *a_host;
+	struct nlm_args a_args;
+	struct nlm_res a_res;
+	struct nlm_block *a_block;
+	unsigned int a_retries;
+	u8 a_owner[74];
+	void *a_callback_data;
+};
+
+struct nlm_file;
+
+struct nlm_block {
+	struct kref b_count;
+	struct list_head b_list;
+	struct list_head b_flist;
+	struct nlm_rqst *b_call;
+	struct svc_serv *b_daemon;
+	struct nlm_host *b_host;
+	long unsigned int b_when;
+	unsigned int b_id;
+	unsigned char b_granted;
+	struct nlm_file *b_file;
+	struct cache_req *b_cache_req;
+	struct cache_deferred_req *b_deferred_req;
+	unsigned int b_flags;
+};
+
+struct nlm_share;
+
+struct nlm_file {
+	struct hlist_node f_list;
+	struct nfs_fh f_handle;
+	struct file *f_file[2];
+	struct nlm_share *f_shares;
+	struct list_head f_blocks;
+	unsigned int f_locks;
+	unsigned int f_count;
+	struct mutex f_mutex;
+};
+
+struct nlm_wait;
+
+struct nlm_wait {
+	struct list_head b_list;
+	wait_queue_head_t b_wait;
+	struct nlm_host *b_host;
+	struct file_lock *b_lock;
+	short unsigned int b_reclaim;
+	__be32 b_status;
+};
+
+struct nlm_reboot {
+	char *mon;
+	unsigned int len;
+	u32 state;
+	struct nsm_private priv;
+};
+
+struct lockd_net {
+	unsigned int nlmsvc_users;
+	long unsigned int next_gc;
+	long unsigned int nrhosts;
+	struct delayed_work grace_period_end;
+	struct lock_manager lockd_manager;
+	struct list_head nsm_handles;
+};
+
+struct nlm_lookup_host_info {
+	const int server;
+	const struct sockaddr *sap;
+	const size_t salen;
+	const short unsigned int protocol;
+	const u32 version;
+	const char *hostname;
+	const size_t hostname_len;
+	const int noresvport;
+	struct net *net;
+	const struct cred *cred;
+};
+
+struct nlm_share {
+	struct nlm_share *s_next;
+	struct nlm_host *s_host;
+	struct nlm_file *s_file;
+	struct xdr_netobj s_owner;
+	u32 s_access;
+	u32 s_mode;
+};
+
+typedef int (*nlm_host_match_fn_t)(void *, struct nlm_host *);
+
+enum {
+	NSMPROC_NULL = 0,
+	NSMPROC_STAT = 1,
+	NSMPROC_MON = 2,
+	NSMPROC_UNMON = 3,
+	NSMPROC_UNMON_ALL = 4,
+	NSMPROC_SIMU_CRASH = 5,
+	NSMPROC_NOTIFY = 6,
+};
+
+struct nsm_args {
+	struct nsm_private *priv;
+	u32 prog;
+	u32 vers;
+	u32 proc;
+	char *mon_name;
+	const char *nodename;
+};
+
+struct nsm_res {
+	u32 status;
+	u32 state;
+};
+
+typedef u32 unicode_t;
+
+struct utf8_table {
+	int cmask;
+	int cval;
+	int shift;
+	long int lmask;
+	long int lval;
+};
+
+typedef unsigned int autofs_wqt_t;
+
+struct autofs_packet_hdr {
+	int proto_version;
+	int type;
+};
+
+struct autofs_packet_expire {
+	struct autofs_packet_hdr hdr;
+	int len;
+	char name[256];
+};
+
+enum {
+	AUTOFS_IOC_READY_CMD = 96,
+	AUTOFS_IOC_FAIL_CMD = 97,
+	AUTOFS_IOC_CATATONIC_CMD = 98,
+	AUTOFS_IOC_PROTOVER_CMD = 99,
+	AUTOFS_IOC_SETTIMEOUT_CMD = 100,
+	AUTOFS_IOC_EXPIRE_CMD = 101,
+};
+
+enum autofs_notify {
+	NFY_NONE = 0,
+	NFY_MOUNT = 1,
+	NFY_EXPIRE = 2,
+};
+
+enum {
+	AUTOFS_IOC_EXPIRE_MULTI_CMD = 102,
+	AUTOFS_IOC_PROTOSUBVER_CMD = 103,
+	AUTOFS_IOC_ASKUMOUNT_CMD = 112,
+};
+
+struct autofs_sb_info;
+
+struct autofs_info {
+	struct dentry *dentry;
+	int flags;
+	struct completion expire_complete;
+	struct list_head active;
+	struct list_head expiring;
+	struct autofs_sb_info *sbi;
+	long unsigned int last_used;
+	int count;
+	kuid_t uid;
+	kgid_t gid;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue;
+
+struct autofs_sb_info {
+	u32 magic;
+	int pipefd;
+	struct file *pipe;
+	struct pid *oz_pgrp;
+	int version;
+	int sub_version;
+	int min_proto;
+	int max_proto;
+	unsigned int flags;
+	long unsigned int exp_timeout;
+	unsigned int type;
+	struct super_block *sb;
+	struct mutex wq_mutex;
+	struct mutex pipe_mutex;
+	spinlock_t fs_lock;
+	struct autofs_wait_queue *queues;
+	spinlock_t lookup_lock;
+	struct list_head active_list;
+	struct list_head expiring_list;
+	struct callback_head rcu;
+};
+
+struct autofs_wait_queue {
+	wait_queue_head_t queue;
+	struct autofs_wait_queue *next;
+	autofs_wqt_t wait_queue_token;
+	struct qstr name;
+	u32 offset;
+	u32 dev;
+	u64 ino;
+	kuid_t uid;
+	kgid_t gid;
+	pid_t pid;
+	pid_t tgid;
+	int status;
+	unsigned int wait_ctr;
+};
+
+enum {
+	Opt_err___5 = 0,
+	Opt_fd = 1,
+	Opt_uid___6 = 2,
+	Opt_gid___7 = 3,
+	Opt_pgrp = 4,
+	Opt_minproto = 5,
+	Opt_maxproto = 6,
+	Opt_indirect = 7,
+	Opt_direct = 8,
+	Opt_offset = 9,
+	Opt_strictexpire = 10,
+	Opt_ignore___2 = 11,
+};
+
+struct args_protover {
+	__u32 version;
+};
+
+struct args_protosubver {
+	__u32 sub_version;
+};
+
+struct args_openmount {
+	__u32 devid;
+};
+
+struct args_ready {
+	__u32 token;
+};
+
+struct args_fail {
+	__u32 token;
+	__s32 status;
+};
+
+struct args_setpipefd {
+	__s32 pipefd;
+};
+
+struct args_timeout {
+	__u64 timeout;
+};
+
+struct args_requester {
+	__u32 uid;
+	__u32 gid;
+};
+
+struct args_expire {
+	__u32 how;
+};
+
+struct args_askumount {
+	__u32 may_umount;
+};
+
+struct args_in {
+	__u32 type;
+};
+
+struct args_out {
+	__u32 devid;
+	__u32 magic;
+};
+
+struct args_ismountpoint {
+	union {
+		struct args_in in;
+		struct args_out out;
+	};
+};
+
+struct autofs_dev_ioctl {
+	__u32 ver_major;
+	__u32 ver_minor;
+	__u32 size;
+	__s32 ioctlfd;
+	union {
+		struct args_protover protover;
+		struct args_protosubver protosubver;
+		struct args_openmount openmount;
+		struct args_ready ready;
+		struct args_fail fail;
+		struct args_setpipefd setpipefd;
+		struct args_timeout timeout;
+		struct args_requester requester;
+		struct args_expire expire;
+		struct args_askumount askumount;
+		struct args_ismountpoint ismountpoint;
+	};
+	char path[0];
+};
+
+enum {
+	AUTOFS_DEV_IOCTL_VERSION_CMD = 113,
+	AUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,
+	AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,
+	AUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,
+	AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,
+	AUTOFS_DEV_IOCTL_READY_CMD = 118,
+	AUTOFS_DEV_IOCTL_FAIL_CMD = 119,
+	AUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,
+	AUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,
+	AUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,
+	AUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,
+	AUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,
+	AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,
+	AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,
+};
+
+typedef int (*ioctl_fn)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);
+
+struct autofs_packet_missing {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+struct autofs_packet_expire_multi {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	int len;
+	char name[256];
+};
+
+union autofs_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_packet_missing missing;
+	struct autofs_packet_expire expire;
+	struct autofs_packet_expire_multi expire_multi;
+};
+
+struct autofs_v5_packet {
+	struct autofs_packet_hdr hdr;
+	autofs_wqt_t wait_queue_token;
+	__u32 dev;
+	__u64 ino;
+	__u32 uid;
+	__u32 gid;
+	__u32 pid;
+	__u32 tgid;
+	__u32 len;
+	char name[256];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+	struct autofs_packet_hdr hdr;
+	struct autofs_v5_packet v5_packet;
+	autofs_packet_missing_indirect_t missing_indirect;
+	autofs_packet_expire_indirect_t expire_indirect;
+	autofs_packet_missing_direct_t missing_direct;
+	autofs_packet_expire_direct_t expire_direct;
+};
+
+struct ovl_config {
+	char *lowerdir;
+	char *upperdir;
+	char *workdir;
+	bool default_permissions;
+	bool redirect_dir;
+	bool redirect_follow;
+	const char *redirect_mode;
+	bool index;
+	bool uuid;
+	bool nfs_export;
+	int xino;
+	bool metacopy;
+	bool userxattr;
+	bool ovl_volatile;
+};
+
+struct ovl_sb {
+	struct super_block *sb;
+	dev_t pseudo_dev;
+	bool bad_uuid;
+	bool is_lower;
+};
+
+struct ovl_layer {
+	struct vfsmount *mnt;
+	struct inode *trap;
+	struct ovl_sb *fs;
+	int idx;
+	int fsid;
+};
+
+struct ovl_path {
+	const struct ovl_layer *layer;
+	struct dentry *dentry;
+};
+
+struct ovl_fs {
+	unsigned int numlayer;
+	unsigned int numfs;
+	const struct ovl_layer *layers;
+	struct ovl_sb *fs;
+	struct dentry *workbasedir;
+	struct dentry *workdir;
+	struct dentry *indexdir;
+	long int namelen;
+	struct ovl_config config;
+	const struct cred *creator_cred;
+	bool tmpfile;
+	bool noxattr;
+	bool upperdir_locked;
+	bool workdir_locked;
+	bool share_whiteout;
+	struct inode *workbasedir_trap;
+	struct inode *workdir_trap;
+	struct inode *indexdir_trap;
+	int xino_mode;
+	atomic_long_t last_ino;
+	struct dentry *whiteout;
+	errseq_t errseq;
+};
+
+struct ovl_entry {
+	union {
+		struct {
+			long unsigned int flags;
+		};
+		struct callback_head rcu;
+	};
+	unsigned int numlower;
+	struct ovl_path lowerstack[0];
+};
+
+struct ovl_dir_cache;
+
+struct ovl_inode {
+	union {
+		struct ovl_dir_cache *cache;
+		struct inode *lowerdata;
+	};
+	const char *redirect;
+	u64 version;
+	long unsigned int flags;
+	struct inode vfs_inode;
+	struct dentry *__upperdentry;
+	struct ovl_path lowerpath;
+	struct mutex lock;
+};
+
+enum ovl_xattr {
+	OVL_XATTR_OPAQUE = 0,
+	OVL_XATTR_REDIRECT = 1,
+	OVL_XATTR_ORIGIN = 2,
+	OVL_XATTR_IMPURE = 3,
+	OVL_XATTR_NLINK = 4,
+	OVL_XATTR_UPPER = 5,
+	OVL_XATTR_METACOPY = 6,
+	OVL_XATTR_PROTATTR = 7,
+};
+
+enum ovl_inode_flag {
+	OVL_IMPURE = 0,
+	OVL_WHITEOUTS = 1,
+	OVL_INDEX = 2,
+	OVL_UPPERDATA = 3,
+	OVL_CONST_INO = 4,
+};
+
+struct ovl_fb {
+	u8 version;
+	u8 magic;
+	u8 len;
+	u8 flags;
+	u8 type;
+	uuid_t uuid;
+	u32 fid[0];
+} __attribute__((packed));
+
+struct ovl_fh {
+	u8 padding[3];
+	union {
+		struct ovl_fb fb;
+		struct {
+			struct {			} __empty_buf;
+			u8 buf[0];
+		};
+	};
+} __attribute__((packed));
+
+struct ovl_inode_params {
+	struct inode *newinode;
+	struct dentry *upperdentry;
+	struct ovl_path *lowerpath;
+	bool index;
+	unsigned int numlower;
+	char *redirect;
+	struct dentry *lowerdata;
+};
+
+struct ovl_lookup_data {
+	struct super_block *sb;
+	struct vfsmount *mnt;
+	struct qstr name;
+	bool is_dir;
+	bool opaque;
+	bool stop;
+	bool last;
+	char *redirect;
+	bool metacopy;
+};
+
+enum ovl_path_type {
+	__OVL_PATH_UPPER = 1,
+	__OVL_PATH_MERGE = 2,
+	__OVL_PATH_ORIGIN = 4,
+};
+
+enum ovl_entry_flag {
+	OVL_E_UPPER_ALIAS = 0,
+	OVL_E_OPAQUE = 1,
+	OVL_E_CONNECTED = 2,
+};
+
+enum {
+	OVL_XINO_OFF = 0,
+	OVL_XINO_AUTO = 1,
+	OVL_XINO_ON = 2,
+};
+
+struct ovl_cattr {
+	dev_t rdev;
+	umode_t mode;
+	const char *link;
+	struct dentry *hardlink;
+};
+
+enum {
+	OPT_LOWERDIR = 0,
+	OPT_UPPERDIR = 1,
+	OPT_WORKDIR = 2,
+	OPT_DEFAULT_PERMISSIONS = 3,
+	OPT_REDIRECT_DIR = 4,
+	OPT_INDEX_ON = 5,
+	OPT_INDEX_OFF = 6,
+	OPT_UUID_ON = 7,
+	OPT_UUID_OFF = 8,
+	OPT_NFS_EXPORT_ON = 9,
+	OPT_USERXATTR = 10,
+	OPT_NFS_EXPORT_OFF = 11,
+	OPT_XINO_ON = 12,
+	OPT_XINO_OFF = 13,
+	OPT_XINO_AUTO = 14,
+	OPT_METACOPY_ON = 15,
+	OPT_METACOPY_OFF = 16,
+	OPT_VOLATILE = 17,
+	OPT_ERR = 18,
+};
+
+struct ovl_aio_req {
+	struct kiocb iocb;
+	refcount_t ref;
+	struct kiocb *orig_iocb;
+	struct fd fd;
+};
+
+enum ovl_copyop {
+	OVL_COPY = 0,
+	OVL_CLONE = 1,
+	OVL_DEDUPE = 2,
+};
+
+struct ovl_dir_cache {
+	long int refcount;
+	u64 version;
+	struct list_head entries;
+	struct rb_root root;
+};
+
+struct ovl_cache_entry {
+	unsigned int len;
+	unsigned int type;
+	u64 real_ino;
+	u64 ino;
+	struct list_head l_node;
+	struct rb_node node;
+	struct ovl_cache_entry *next_maybe_whiteout;
+	bool is_upper;
+	bool is_whiteout;
+	char name[0];
+};
+
+struct ovl_readdir_data {
+	struct dir_context ctx;
+	struct dentry *dentry;
+	bool is_lowest;
+	struct rb_root *root;
+	struct list_head *list;
+	struct list_head middle;
+	struct ovl_cache_entry *first_maybe_whiteout;
+	int count;
+	int err;
+	bool is_upper;
+	bool d_type_supported;
+};
+
+struct ovl_dir_file {
+	bool is_real;
+	bool is_upper;
+	struct ovl_dir_cache *cache;
+	struct list_head *cursor;
+	struct file *realfile;
+	struct file *upperfile;
+};
+
+struct ovl_readdir_translate {
+	struct dir_context *orig_ctx;
+	struct ovl_dir_cache *cache;
+	struct dir_context ctx;
+	u64 parent_ino;
+	int fsid;
+	int xinobits;
+	bool xinowarn;
+};
+
+struct ovl_copy_up_ctx {
+	struct dentry *parent;
+	struct dentry *dentry;
+	struct path lowerpath;
+	struct kstat stat;
+	struct kstat pstat;
+	const char *link;
+	struct dentry *destdir;
+	struct qstr destname;
+	struct dentry *workdir;
+	bool origin;
+	bool indexed;
+	bool metacopy;
+};
+
+struct ovl_cu_creds {
+	const struct cred *old;
+	struct cred *new;
+};
+
+typedef s8 int8_t;
+
+typedef long long unsigned int xfs_ino_t;
+
+typedef __s64 xfs_daddr_t;
+
+typedef uint32_t prid_t;
+
+typedef uint32_t xfs_agblock_t;
+
+typedef uint32_t xfs_agino_t;
+
+typedef uint32_t xfs_extlen_t;
+
+typedef uint32_t xfs_agnumber_t;
+
+typedef uint64_t xfs_extnum_t;
+
+typedef int64_t xfs_fsize_t;
+
+typedef int64_t xfs_lsn_t;
+
+typedef uint64_t xfs_fsblock_t;
+
+typedef uint64_t xfs_rfsblock_t;
+
+typedef uint64_t xfs_rtblock_t;
+
+typedef uint64_t xfs_fileoff_t;
+
+typedef uint64_t xfs_filblks_t;
+
+typedef void *xfs_failaddr_t;
+
+typedef enum {
+	XFS_BTNUM_BNOi = 0,
+	XFS_BTNUM_CNTi = 1,
+	XFS_BTNUM_RMAPi = 2,
+	XFS_BTNUM_BMAPi = 3,
+	XFS_BTNUM_INOi = 4,
+	XFS_BTNUM_FINOi = 5,
+	XFS_BTNUM_REFCi = 6,
+	XFS_BTNUM_MAX = 7,
+} xfs_btnum_t;
+
+enum xfs_ag_resv_type {
+	XFS_AG_RESV_NONE = 0,
+	XFS_AG_RESV_AGFL = 1,
+	XFS_AG_RESV_METADATA = 2,
+	XFS_AG_RESV_RMAPBT = 3,
+};
+
+typedef unsigned int xfs_km_flags_t;
+
+typedef struct {
+	struct rw_semaphore mr_lock;
+} mrlock_t;
+
+struct xfs_ag_geometry {
+	uint32_t ag_number;
+	uint32_t ag_length;
+	uint32_t ag_freeblks;
+	uint32_t ag_icount;
+	uint32_t ag_ifree;
+	uint32_t ag_sick;
+	uint32_t ag_checked;
+	uint32_t ag_flags;
+	uint64_t ag_reserved[12];
+};
+
+struct __xfsstats {
+	uint32_t xs_allocx;
+	uint32_t xs_allocb;
+	uint32_t xs_freex;
+	uint32_t xs_freeb;
+	uint32_t xs_abt_lookup;
+	uint32_t xs_abt_compare;
+	uint32_t xs_abt_insrec;
+	uint32_t xs_abt_delrec;
+	uint32_t xs_blk_mapr;
+	uint32_t xs_blk_mapw;
+	uint32_t xs_blk_unmap;
+	uint32_t xs_add_exlist;
+	uint32_t xs_del_exlist;
+	uint32_t xs_look_exlist;
+	uint32_t xs_cmp_exlist;
+	uint32_t xs_bmbt_lookup;
+	uint32_t xs_bmbt_compare;
+	uint32_t xs_bmbt_insrec;
+	uint32_t xs_bmbt_delrec;
+	uint32_t xs_dir_lookup;
+	uint32_t xs_dir_create;
+	uint32_t xs_dir_remove;
+	uint32_t xs_dir_getdents;
+	uint32_t xs_trans_sync;
+	uint32_t xs_trans_async;
+	uint32_t xs_trans_empty;
+	uint32_t xs_ig_attempts;
+	uint32_t xs_ig_found;
+	uint32_t xs_ig_frecycle;
+	uint32_t xs_ig_missed;
+	uint32_t xs_ig_dup;
+	uint32_t xs_ig_reclaims;
+	uint32_t xs_ig_attrchg;
+	uint32_t xs_log_writes;
+	uint32_t xs_log_blocks;
+	uint32_t xs_log_noiclogs;
+	uint32_t xs_log_force;
+	uint32_t xs_log_force_sleep;
+	uint32_t xs_try_logspace;
+	uint32_t xs_sleep_logspace;
+	uint32_t xs_push_ail;
+	uint32_t xs_push_ail_success;
+	uint32_t xs_push_ail_pushbuf;
+	uint32_t xs_push_ail_pinned;
+	uint32_t xs_push_ail_locked;
+	uint32_t xs_push_ail_flushing;
+	uint32_t xs_push_ail_restarts;
+	uint32_t xs_push_ail_flush;
+	uint32_t xs_xstrat_quick;
+	uint32_t xs_xstrat_split;
+	uint32_t xs_write_calls;
+	uint32_t xs_read_calls;
+	uint32_t xs_attr_get;
+	uint32_t xs_attr_set;
+	uint32_t xs_attr_remove;
+	uint32_t xs_attr_list;
+	uint32_t xs_iflush_count;
+	uint32_t xs_icluster_flushcnt;
+	uint32_t xs_icluster_flushinode;
+	uint32_t vn_active;
+	uint32_t vn_alloc;
+	uint32_t vn_get;
+	uint32_t vn_hold;
+	uint32_t vn_rele;
+	uint32_t vn_reclaim;
+	uint32_t vn_remove;
+	uint32_t vn_free;
+	uint32_t xb_get;
+	uint32_t xb_create;
+	uint32_t xb_get_locked;
+	uint32_t xb_get_locked_waited;
+	uint32_t xb_busy_locked;
+	uint32_t xb_miss_locked;
+	uint32_t xb_page_retries;
+	uint32_t xb_page_found;
+	uint32_t xb_get_read;
+	uint32_t xs_abtb_2[15];
+	uint32_t xs_abtc_2[15];
+	uint32_t xs_bmbt_2[15];
+	uint32_t xs_ibt_2[15];
+	uint32_t xs_fibt_2[15];
+	uint32_t xs_rmap_2[15];
+	uint32_t xs_refcbt_2[15];
+	uint32_t xs_qm_dqreclaims;
+	uint32_t xs_qm_dqreclaim_misses;
+	uint32_t xs_qm_dquot_dups;
+	uint32_t xs_qm_dqcachemisses;
+	uint32_t xs_qm_dqcachehits;
+	uint32_t xs_qm_dqwants;
+	uint32_t xs_qm_dquot;
+	uint32_t xs_qm_dquot_unused;
+	uint64_t xs_xstrat_bytes;
+	uint64_t xs_write_bytes;
+	uint64_t xs_read_bytes;
+	uint64_t defer_relog;
+};
+
+struct xfsstats {
+	union {
+		struct __xfsstats s;
+		uint32_t a[187];
+	};
+};
+
+struct xfs_kobj {
+	struct kobject kobject;
+	struct completion complete;
+};
+
+struct xstats {
+	struct xfsstats *xs_stats;
+	struct xfs_kobj xs_kobj;
+};
+
+typedef unsigned int xfs_buf_flags_t;
+
+struct xfs_mount;
+
+struct xfs_buftarg {
+	dev_t bt_dev;
+	struct block_device *bt_bdev;
+	struct dax_device *bt_daxdev;
+	u64 bt_dax_part_off;
+	struct xfs_mount *bt_mount;
+	unsigned int bt_meta_sectorsize;
+	size_t bt_meta_sectormask;
+	size_t bt_logical_sectorsize;
+	size_t bt_logical_sectormask;
+	struct shrinker bt_shrinker;
+	struct list_lru bt_lru;
+	struct percpu_counter bt_io_count;
+	struct ratelimit_state bt_ioerror_rl;
+};
+
+struct xfs_sb {
+	uint32_t sb_magicnum;
+	uint32_t sb_blocksize;
+	xfs_rfsblock_t sb_dblocks;
+	xfs_rfsblock_t sb_rblocks;
+	xfs_rtblock_t sb_rextents;
+	uuid_t sb_uuid;
+	xfs_fsblock_t sb_logstart;
+	xfs_ino_t sb_rootino;
+	xfs_ino_t sb_rbmino;
+	xfs_ino_t sb_rsumino;
+	xfs_agblock_t sb_rextsize;
+	xfs_agblock_t sb_agblocks;
+	xfs_agnumber_t sb_agcount;
+	xfs_extlen_t sb_rbmblocks;
+	xfs_extlen_t sb_logblocks;
+	uint16_t sb_versionnum;
+	uint16_t sb_sectsize;
+	uint16_t sb_inodesize;
+	uint16_t sb_inopblock;
+	char sb_fname[12];
+	uint8_t sb_blocklog;
+	uint8_t sb_sectlog;
+	uint8_t sb_inodelog;
+	uint8_t sb_inopblog;
+	uint8_t sb_agblklog;
+	uint8_t sb_rextslog;
+	uint8_t sb_inprogress;
+	uint8_t sb_imax_pct;
+	uint64_t sb_icount;
+	uint64_t sb_ifree;
+	uint64_t sb_fdblocks;
+	uint64_t sb_frextents;
+	xfs_ino_t sb_uquotino;
+	xfs_ino_t sb_gquotino;
+	uint16_t sb_qflags;
+	uint8_t sb_flags;
+	uint8_t sb_shared_vn;
+	xfs_extlen_t sb_inoalignmt;
+	uint32_t sb_unit;
+	uint32_t sb_width;
+	uint8_t sb_dirblklog;
+	uint8_t sb_logsectlog;
+	uint16_t sb_logsectsize;
+	uint32_t sb_logsunit;
+	uint32_t sb_features2;
+	uint32_t sb_bad_features2;
+	uint32_t sb_features_compat;
+	uint32_t sb_features_ro_compat;
+	uint32_t sb_features_incompat;
+	uint32_t sb_features_log_incompat;
+	uint32_t sb_crc;
+	xfs_extlen_t sb_spino_align;
+	xfs_ino_t sb_pquotino;
+	xfs_lsn_t sb_lsn;
+	uuid_t sb_meta_uuid;
+};
+
+typedef struct xfs_buftarg xfs_buftarg_t;
+
+struct xfs_mru_cache;
+
+struct xfs_ino_geometry {
+	uint64_t maxicount;
+	unsigned int inode_cluster_size;
+	unsigned int inode_cluster_size_raw;
+	unsigned int inodes_per_cluster;
+	unsigned int blocks_per_cluster;
+	unsigned int cluster_align;
+	unsigned int cluster_align_inodes;
+	unsigned int inoalign_mask;
+	unsigned int inobt_mxr[2];
+	unsigned int inobt_mnr[2];
+	unsigned int inobt_maxlevels;
+	unsigned int ialloc_inos;
+	unsigned int ialloc_blks;
+	unsigned int ialloc_min_blks;
+	unsigned int ialloc_align;
+	unsigned int agino_log;
+	unsigned int attr_fork_offset;
+	uint64_t new_diflags2;
+};
+
+struct xfs_trans_res {
+	uint tr_logres;
+	int tr_logcount;
+	int tr_logflags;
+};
+
+struct xfs_trans_resv {
+	struct xfs_trans_res tr_write;
+	struct xfs_trans_res tr_itruncate;
+	struct xfs_trans_res tr_rename;
+	struct xfs_trans_res tr_link;
+	struct xfs_trans_res tr_remove;
+	struct xfs_trans_res tr_symlink;
+	struct xfs_trans_res tr_create;
+	struct xfs_trans_res tr_create_tmpfile;
+	struct xfs_trans_res tr_mkdir;
+	struct xfs_trans_res tr_ifree;
+	struct xfs_trans_res tr_ichange;
+	struct xfs_trans_res tr_growdata;
+	struct xfs_trans_res tr_addafork;
+	struct xfs_trans_res tr_writeid;
+	struct xfs_trans_res tr_attrinval;
+	struct xfs_trans_res tr_attrsetm;
+	struct xfs_trans_res tr_attrsetrt;
+	struct xfs_trans_res tr_attrrm;
+	struct xfs_trans_res tr_clearagi;
+	struct xfs_trans_res tr_growrtalloc;
+	struct xfs_trans_res tr_growrtzero;
+	struct xfs_trans_res tr_growrtfree;
+	struct xfs_trans_res tr_qm_setqlim;
+	struct xfs_trans_res tr_qm_dqalloc;
+	struct xfs_trans_res tr_sb;
+	struct xfs_trans_res tr_fsyncts;
+};
+
+struct xfs_error_cfg {
+	struct xfs_kobj kobj;
+	int max_retries;
+	long int retry_timeout;
+};
+
+struct xfs_ail;
+
+struct xfs_buf;
+
+struct xfs_da_geometry;
+
+struct xlog;
+
+struct xfs_inode;
+
+struct xfs_quotainfo;
+
+struct xfs_mount {
+	struct xfs_sb m_sb;
+	struct super_block *m_super;
+	struct xfs_ail *m_ail;
+	struct xfs_buf *m_sb_bp;
+	char *m_rtname;
+	char *m_logname;
+	struct xfs_da_geometry *m_dir_geo;
+	struct xfs_da_geometry *m_attr_geo;
+	struct xlog *m_log;
+	struct xfs_inode *m_rbmip;
+	struct xfs_inode *m_rsumip;
+	struct xfs_inode *m_rootip;
+	struct xfs_quotainfo *m_quotainfo;
+	xfs_buftarg_t *m_ddev_targp;
+	xfs_buftarg_t *m_logdev_targp;
+	xfs_buftarg_t *m_rtdev_targp;
+	struct list_head m_mount_list;
+	void *m_inodegc;
+	uint8_t *m_rsum_cache;
+	struct xfs_mru_cache *m_filestream;
+	struct workqueue_struct *m_buf_workqueue;
+	struct workqueue_struct *m_unwritten_workqueue;
+	struct workqueue_struct *m_reclaim_workqueue;
+	struct workqueue_struct *m_sync_workqueue;
+	struct workqueue_struct *m_blockgc_wq;
+	struct workqueue_struct *m_inodegc_wq;
+	int m_bsize;
+	uint8_t m_blkbit_log;
+	uint8_t m_blkbb_log;
+	uint8_t m_agno_log;
+	uint8_t m_sectbb_log;
+	uint m_blockmask;
+	uint m_blockwsize;
+	uint m_blockwmask;
+	uint m_alloc_mxr[2];
+	uint m_alloc_mnr[2];
+	uint m_bmap_dmxr[2];
+	uint m_bmap_dmnr[2];
+	uint m_rmap_mxr[2];
+	uint m_rmap_mnr[2];
+	uint m_refc_mxr[2];
+	uint m_refc_mnr[2];
+	uint m_alloc_maxlevels;
+	uint m_bm_maxlevels[2];
+	uint m_rmap_maxlevels;
+	uint m_refc_maxlevels;
+	unsigned int m_agbtree_maxlevels;
+	xfs_extlen_t m_ag_prealloc_blocks;
+	uint m_alloc_set_aside;
+	uint m_ag_max_usable;
+	int m_dalign;
+	int m_swidth;
+	xfs_agnumber_t m_maxagi;
+	uint m_allocsize_log;
+	uint m_allocsize_blocks;
+	int m_logbufs;
+	int m_logbsize;
+	uint m_rsumlevels;
+	uint m_rsumsize;
+	int m_fixedfsid[2];
+	uint m_qflags;
+	uint64_t m_features;
+	uint64_t m_low_space[5];
+	uint64_t m_low_rtexts[5];
+	struct xfs_ino_geometry m_ino_geo;
+	struct xfs_trans_resv m_resv;
+	long unsigned int m_opstate;
+	bool m_always_cow;
+	bool m_fail_unmount;
+	bool m_finobt_nores;
+	bool m_update_sb;
+	uint8_t m_fs_checked;
+	uint8_t m_fs_sick;
+	uint8_t m_rt_checked;
+	uint8_t m_rt_sick;
+	long: 64;
+	spinlock_t m_sb_lock;
+	struct percpu_counter m_icount;
+	struct percpu_counter m_ifree;
+	struct percpu_counter m_fdblocks;
+	struct percpu_counter m_frextents;
+	struct percpu_counter m_delalloc_blks;
+	atomic64_t m_allocbt_blks;
+	struct xarray m_perag_tree;
+	spinlock_t m_perag_lock;
+	uint64_t m_resblks;
+	uint64_t m_resblks_avail;
+	uint64_t m_resblks_save;
+	struct delayed_work m_reclaim_work;
+	struct xfs_kobj m_kobj;
+	struct xfs_kobj m_error_kobj;
+	struct xfs_kobj m_error_meta_kobj;
+	struct xfs_error_cfg m_error_cfg[4];
+	struct xstats m_stats;
+	xfs_agnumber_t m_agfrotor;
+	xfs_agnumber_t m_agirotor;
+	spinlock_t m_agirotor_lock;
+	struct shrinker m_inodegc_shrinker;
+	struct work_struct m_flush_inodes_work;
+	uint32_t m_generation;
+	struct mutex m_growlock;
+};
+
+struct xfs_buf_map {
+	xfs_daddr_t bm_bn;
+	int bm_len;
+};
+
+struct xfs_buf_ops {
+	char *name;
+	union {
+		__be32 magic[2];
+		__be16 magic16[2];
+	};
+	void (*verify_read)(struct xfs_buf *);
+	void (*verify_write)(struct xfs_buf *);
+	xfs_failaddr_t (*verify_struct)(struct xfs_buf *);
+};
+
+struct xfs_perag;
+
+struct xfs_buf_log_item;
+
+struct xfs_trans;
+
+struct xfs_buf {
+	struct rhash_head b_rhash_head;
+	xfs_daddr_t b_rhash_key;
+	int b_length;
+	atomic_t b_hold;
+	atomic_t b_lru_ref;
+	xfs_buf_flags_t b_flags;
+	struct semaphore b_sema;
+	struct list_head b_lru;
+	spinlock_t b_lock;
+	unsigned int b_state;
+	int b_io_error;
+	wait_queue_head_t b_waiters;
+	struct list_head b_list;
+	struct xfs_perag *b_pag;
+	struct xfs_mount *b_mount;
+	struct xfs_buftarg *b_target;
+	void *b_addr;
+	struct work_struct b_ioend_work;
+	struct completion b_iowait;
+	struct xfs_buf_log_item *b_log_item;
+	struct list_head b_li_list;
+	struct xfs_trans *b_transp;
+	struct page **b_pages;
+	struct page *b_page_array[2];
+	struct xfs_buf_map *b_maps;
+	struct xfs_buf_map __b_map;
+	int b_map_count;
+	atomic_t b_pin_count;
+	atomic_t b_io_remaining;
+	unsigned int b_page_count;
+	unsigned int b_offset;
+	int b_error;
+	int b_retries;
+	long unsigned int b_first_retry_time;
+	int b_last_error;
+	const struct xfs_buf_ops *b_ops;
+	struct callback_head b_rcu;
+};
+
+struct xfs_ag_resv {
+	xfs_extlen_t ar_orig_reserved;
+	xfs_extlen_t ar_reserved;
+	xfs_extlen_t ar_asked;
+};
+
+struct xfs_perag {
+	struct xfs_mount *pag_mount;
+	xfs_agnumber_t pag_agno;
+	atomic_t pag_ref;
+	char pagf_init;
+	char pagi_init;
+	char pagf_metadata;
+	char pagi_inodeok;
+	uint8_t pagf_levels[3];
+	bool pagf_agflreset;
+	uint32_t pagf_flcount;
+	xfs_extlen_t pagf_freeblks;
+	xfs_extlen_t pagf_longest;
+	uint32_t pagf_btreeblks;
+	xfs_agino_t pagi_freecount;
+	xfs_agino_t pagi_count;
+	xfs_agino_t pagl_pagino;
+	xfs_agino_t pagl_leftrec;
+	xfs_agino_t pagl_rightrec;
+	int pagb_count;
+	uint8_t pagf_refcount_level;
+	struct xfs_ag_resv pag_meta_resv;
+	struct xfs_ag_resv pag_rmapbt_resv;
+	struct callback_head callback_head;
+	xfs_agblock_t block_count;
+	xfs_agblock_t min_block;
+	xfs_agino_t agino_min;
+	xfs_agino_t agino_max;
+	uint16_t pag_checked;
+	uint16_t pag_sick;
+	spinlock_t pag_state_lock;
+	spinlock_t pagb_lock;
+	struct rb_root pagb_tree;
+	unsigned int pagb_gen;
+	wait_queue_head_t pagb_wait;
+	atomic_t pagf_fstrms;
+	spinlock_t pag_ici_lock;
+	struct xarray pag_ici_root;
+	int pag_ici_reclaimable;
+	long unsigned int pag_ici_reclaim_cursor;
+	spinlock_t pag_buf_lock;
+	struct rhashtable pag_buf_hash;
+	struct delayed_work pag_blockgc_work;
+};
+
+struct xlog_ticket;
+
+struct xfs_dquot_acct;
+
+struct xfs_trans {
+	unsigned int t_magic;
+	unsigned int t_log_res;
+	unsigned int t_log_count;
+	unsigned int t_blk_res;
+	unsigned int t_blk_res_used;
+	unsigned int t_rtx_res;
+	unsigned int t_rtx_res_used;
+	unsigned int t_flags;
+	xfs_fsblock_t t_firstblock;
+	struct xlog_ticket *t_ticket;
+	struct xfs_mount *t_mountp;
+	struct xfs_dquot_acct *t_dqinfo;
+	int64_t t_icount_delta;
+	int64_t t_ifree_delta;
+	int64_t t_fdblocks_delta;
+	int64_t t_res_fdblocks_delta;
+	int64_t t_frextents_delta;
+	int64_t t_res_frextents_delta;
+	int64_t t_dblocks_delta;
+	int64_t t_agcount_delta;
+	int64_t t_imaxpct_delta;
+	int64_t t_rextsize_delta;
+	int64_t t_rbmblocks_delta;
+	int64_t t_rblocks_delta;
+	int64_t t_rextents_delta;
+	int64_t t_rextslog_delta;
+	struct list_head t_items;
+	struct list_head t_busy;
+	struct list_head t_dfops;
+	long unsigned int t_pflags;
+};
+
+struct xfs_dsb {
+	__be32 sb_magicnum;
+	__be32 sb_blocksize;
+	__be64 sb_dblocks;
+	__be64 sb_rblocks;
+	__be64 sb_rextents;
+	uuid_t sb_uuid;
+	__be64 sb_logstart;
+	__be64 sb_rootino;
+	__be64 sb_rbmino;
+	__be64 sb_rsumino;
+	__be32 sb_rextsize;
+	__be32 sb_agblocks;
+	__be32 sb_agcount;
+	__be32 sb_rbmblocks;
+	__be32 sb_logblocks;
+	__be16 sb_versionnum;
+	__be16 sb_sectsize;
+	__be16 sb_inodesize;
+	__be16 sb_inopblock;
+	char sb_fname[12];
+	__u8 sb_blocklog;
+	__u8 sb_sectlog;
+	__u8 sb_inodelog;
+	__u8 sb_inopblog;
+	__u8 sb_agblklog;
+	__u8 sb_rextslog;
+	__u8 sb_inprogress;
+	__u8 sb_imax_pct;
+	__be64 sb_icount;
+	__be64 sb_ifree;
+	__be64 sb_fdblocks;
+	__be64 sb_frextents;
+	__be64 sb_uquotino;
+	__be64 sb_gquotino;
+	__be16 sb_qflags;
+	__u8 sb_flags;
+	__u8 sb_shared_vn;
+	__be32 sb_inoalignmt;
+	__be32 sb_unit;
+	__be32 sb_width;
+	__u8 sb_dirblklog;
+	__u8 sb_logsectlog;
+	__be16 sb_logsectsize;
+	__be32 sb_logsunit;
+	__be32 sb_features2;
+	__be32 sb_bad_features2;
+	__be32 sb_features_compat;
+	__be32 sb_features_ro_compat;
+	__be32 sb_features_incompat;
+	__be32 sb_features_log_incompat;
+	__le32 sb_crc;
+	__be32 sb_spino_align;
+	__be64 sb_pquotino;
+	__be64 sb_lsn;
+	uuid_t sb_meta_uuid;
+};
+
+struct xfs_agf {
+	__be32 agf_magicnum;
+	__be32 agf_versionnum;
+	__be32 agf_seqno;
+	__be32 agf_length;
+	__be32 agf_roots[3];
+	__be32 agf_levels[3];
+	__be32 agf_flfirst;
+	__be32 agf_fllast;
+	__be32 agf_flcount;
+	__be32 agf_freeblks;
+	__be32 agf_longest;
+	__be32 agf_btreeblks;
+	uuid_t agf_uuid;
+	__be32 agf_rmap_blocks;
+	__be32 agf_refcount_blocks;
+	__be32 agf_refcount_root;
+	__be32 agf_refcount_level;
+	__be64 agf_spare64[14];
+	__be64 agf_lsn;
+	__be32 agf_crc;
+	__be32 agf_spare2;
+};
+
+struct xfs_agi {
+	__be32 agi_magicnum;
+	__be32 agi_versionnum;
+	__be32 agi_seqno;
+	__be32 agi_length;
+	__be32 agi_count;
+	__be32 agi_root;
+	__be32 agi_level;
+	__be32 agi_freecount;
+	__be32 agi_newino;
+	__be32 agi_dirino;
+	__be32 agi_unlinked[64];
+	uuid_t agi_uuid;
+	__be32 agi_crc;
+	__be32 agi_pad32;
+	__be64 agi_lsn;
+	__be32 agi_free_root;
+	__be32 agi_free_level;
+	__be32 agi_iblocks;
+	__be32 agi_fblocks;
+};
+
+struct xfs_agfl {
+	__be32 agfl_magicnum;
+	__be32 agfl_seqno;
+	uuid_t agfl_uuid;
+	__be64 agfl_lsn;
+	__be32 agfl_crc;
+} __attribute__((packed));
+
+struct xfs_alloc_rec {
+	__be32 ar_startblock;
+	__be32 ar_blockcount;
+};
+
+typedef struct xfs_alloc_rec xfs_alloc_rec_t;
+
+struct xfs_owner_info {
+	uint64_t oi_owner;
+	xfs_fileoff_t oi_offset;
+	unsigned int oi_flags;
+};
+
+struct xfs_rmap_rec {
+	__be32 rm_startblock;
+	__be32 rm_blockcount;
+	__be64 rm_owner;
+	__be64 rm_offset;
+};
+
+struct xfs_btree_block_shdr {
+	__be32 bb_leftsib;
+	__be32 bb_rightsib;
+	__be64 bb_blkno;
+	__be64 bb_lsn;
+	uuid_t bb_uuid;
+	__be32 bb_owner;
+	__le32 bb_crc;
+};
+
+struct xfs_btree_block_lhdr {
+	__be64 bb_leftsib;
+	__be64 bb_rightsib;
+	__be64 bb_blkno;
+	__be64 bb_lsn;
+	uuid_t bb_uuid;
+	__be64 bb_owner;
+	__le32 bb_crc;
+	__be32 bb_pad;
+};
+
+struct xfs_btree_block {
+	__be32 bb_magic;
+	__be16 bb_level;
+	__be16 bb_numrecs;
+	union {
+		struct xfs_btree_block_shdr s;
+		struct xfs_btree_block_lhdr l;
+	} bb_u;
+};
+
+struct xfs_imap {
+	xfs_daddr_t im_blkno;
+	short unsigned int im_len;
+	short unsigned int im_boffset;
+};
+
+struct xfs_ifork {
+	int64_t if_bytes;
+	struct xfs_btree_block *if_broot;
+	unsigned int if_seq;
+	int if_height;
+	union {
+		void *if_root;
+		char *if_data;
+	} if_u1;
+	xfs_extnum_t if_nextents;
+	short int if_broot_bytes;
+	int8_t if_format;
+};
+
+struct xfs_dquot;
+
+struct xfs_inode_log_item;
+
+struct xfs_inode {
+	struct xfs_mount *i_mount;
+	struct xfs_dquot *i_udquot;
+	struct xfs_dquot *i_gdquot;
+	struct xfs_dquot *i_pdquot;
+	xfs_ino_t i_ino;
+	struct xfs_imap i_imap;
+	struct xfs_ifork *i_cowfp;
+	struct xfs_ifork i_df;
+	struct xfs_ifork i_af;
+	struct xfs_inode_log_item *i_itemp;
+	mrlock_t i_lock;
+	atomic_t i_pincount;
+	struct llist_node i_gclist;
+	uint16_t i_checked;
+	uint16_t i_sick;
+	spinlock_t i_flags_lock;
+	long unsigned int i_flags;
+	uint64_t i_delayed_blks;
+	xfs_fsize_t i_disk_size;
+	xfs_rfsblock_t i_nblocks;
+	prid_t i_projid;
+	xfs_extlen_t i_extsize;
+	union {
+		xfs_extlen_t i_cowextsize;
+		uint16_t i_flushiter;
+	};
+	uint8_t i_forkoff;
+	uint16_t i_diflags;
+	uint64_t i_diflags2;
+	struct timespec64 i_crtime;
+	xfs_agino_t i_next_unlinked;
+	xfs_agino_t i_prev_unlinked;
+	struct inode i_vnode;
+	spinlock_t i_ioend_lock;
+	struct work_struct i_ioend_work;
+	struct list_head i_ioend_list;
+};
+
+typedef unsigned int xfs_alloctype_t;
+
+struct xfs_alloc_arg {
+	struct xfs_trans *tp;
+	struct xfs_mount *mp;
+	struct xfs_buf *agbp;
+	struct xfs_perag *pag;
+	xfs_fsblock_t fsbno;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t minlen;
+	xfs_extlen_t maxlen;
+	xfs_extlen_t mod;
+	xfs_extlen_t prod;
+	xfs_extlen_t minleft;
+	xfs_extlen_t total;
+	xfs_extlen_t alignment;
+	xfs_extlen_t minalignslop;
+	xfs_agblock_t min_agbno;
+	xfs_agblock_t max_agbno;
+	xfs_extlen_t len;
+	xfs_alloctype_t type;
+	xfs_alloctype_t otype;
+	int datatype;
+	char wasdel;
+	char wasfromfl;
+	struct xfs_owner_info oinfo;
+	enum xfs_ag_resv_type resv;
+};
+
+typedef struct xfs_alloc_arg xfs_alloc_arg_t;
+
+struct aghdr_init_data {
+	xfs_agblock_t agno;
+	xfs_extlen_t agsize;
+	struct list_head buffer_list;
+	xfs_rfsblock_t nfree;
+	xfs_daddr_t daddr;
+	size_t numblks;
+	xfs_btnum_t type;
+};
+
+typedef struct xfs_trans xfs_trans_t;
+
+typedef void (*aghdr_init_work_f)(struct xfs_mount *, struct xfs_buf *, struct aghdr_init_data *);
+
+struct xfs_aghdr_grow_data {
+	xfs_daddr_t daddr;
+	size_t numblks;
+	const struct xfs_buf_ops *ops;
+	aghdr_init_work_f work;
+	xfs_btnum_t type;
+	bool need_init;
+};
+
+typedef __u32 xfs_nlink_t;
+
+typedef int64_t xfs_csn_t;
+
+typedef enum {
+	XFS_LOOKUP_EQi = 0,
+	XFS_LOOKUP_LEi = 1,
+	XFS_LOOKUP_GEi = 2,
+} xfs_lookup_t;
+
+typedef enum {
+	XFS_EXT_NORM = 0,
+	XFS_EXT_UNWRITTEN = 1,
+} xfs_exntst_t;
+
+struct xfs_bmbt_irec {
+	xfs_fileoff_t br_startoff;
+	xfs_fsblock_t br_startblock;
+	xfs_filblks_t br_blockcount;
+	xfs_exntst_t br_state;
+};
+
+enum xfs_refc_domain {
+	XFS_REFC_DOMAIN_SHARED = 0,
+	XFS_REFC_DOMAIN_COW = 1,
+};
+
+struct xfs_refcount_irec {
+	xfs_agblock_t rc_startblock;
+	xfs_extlen_t rc_blockcount;
+	xfs_nlink_t rc_refcount;
+	enum xfs_refc_domain rc_domain;
+};
+
+struct xfs_rmap_irec {
+	xfs_agblock_t rm_startblock;
+	xfs_extlen_t rm_blockcount;
+	uint64_t rm_owner;
+	uint64_t rm_offset;
+	unsigned int rm_flags;
+};
+
+enum {
+	__XBTS_lookup = 0,
+	__XBTS_compare = 1,
+	__XBTS_insrec = 2,
+	__XBTS_delrec = 3,
+	__XBTS_newroot = 4,
+	__XBTS_killroot = 5,
+	__XBTS_increment = 6,
+	__XBTS_decrement = 7,
+	__XBTS_lshift = 8,
+	__XBTS_rshift = 9,
+	__XBTS_split = 10,
+	__XBTS_join = 11,
+	__XBTS_alloc = 12,
+	__XBTS_free = 13,
+	__XBTS_moves = 14,
+	__XBTS_MAX = 15,
+};
+
+struct xfs_sysctl_val {
+	int min;
+	int val;
+	int max;
+};
+
+typedef struct xfs_sysctl_val xfs_sysctl_val_t;
+
+struct xfs_param {
+	xfs_sysctl_val_t sgid_inherit;
+	xfs_sysctl_val_t symlink_mode;
+	xfs_sysctl_val_t panic_mask;
+	xfs_sysctl_val_t error_level;
+	xfs_sysctl_val_t syncd_timer;
+	xfs_sysctl_val_t stats_clear;
+	xfs_sysctl_val_t inherit_sync;
+	xfs_sysctl_val_t inherit_nodump;
+	xfs_sysctl_val_t inherit_noatim;
+	xfs_sysctl_val_t xfs_buf_timer;
+	xfs_sysctl_val_t xfs_buf_age;
+	xfs_sysctl_val_t inherit_nosym;
+	xfs_sysctl_val_t rotorstep;
+	xfs_sysctl_val_t inherit_nodfrg;
+	xfs_sysctl_val_t fstrm_timer;
+	xfs_sysctl_val_t blockgc_timer;
+};
+
+typedef struct xfs_param xfs_param_t;
+
+struct xfs_item_ops;
+
+struct xfs_log_vec;
+
+struct xfs_log_item {
+	struct list_head li_ail;
+	struct list_head li_trans;
+	xfs_lsn_t li_lsn;
+	struct xlog *li_log;
+	struct xfs_ail *li_ailp;
+	uint li_type;
+	long unsigned int li_flags;
+	struct xfs_buf *li_buf;
+	struct list_head li_bio_list;
+	const struct xfs_item_ops *li_ops;
+	struct list_head li_cil;
+	struct xfs_log_vec *li_lv;
+	struct xfs_log_vec *li_lv_shadow;
+	xfs_csn_t li_seq;
+	uint32_t li_order_id;
+};
+
+struct xfs_buf_log_format {
+	short unsigned int blf_type;
+	short unsigned int blf_size;
+	short unsigned int blf_flags;
+	short unsigned int blf_len;
+	int64_t blf_blkno;
+	unsigned int blf_map_size;
+	unsigned int blf_data_map[17];
+};
+
+struct xfs_buf_log_item {
+	struct xfs_log_item bli_item;
+	struct xfs_buf *bli_buf;
+	unsigned int bli_flags;
+	unsigned int bli_recur;
+	atomic_t bli_refcount;
+	int bli_format_count;
+	struct xfs_buf_log_format *bli_formats;
+	struct xfs_buf_log_format __bli_format;
+};
+
+typedef struct xfs_alloc_rec xfs_alloc_key_t;
+
+struct xfs_alloc_rec_incore {
+	xfs_agblock_t ar_startblock;
+	xfs_extlen_t ar_blockcount;
+};
+
+typedef uint64_t xfs_inofree_t;
+
+struct xfs_inobt_rec {
+	__be32 ir_startino;
+	union {
+		struct {
+			__be32 ir_freecount;
+		} f;
+		struct {
+			__be16 ir_holemask;
+			__u8 ir_count;
+			__u8 ir_freecount;
+		} sp;
+	} ir_u;
+	__be64 ir_free;
+};
+
+struct xfs_inobt_rec_incore {
+	xfs_agino_t ir_startino;
+	uint16_t ir_holemask;
+	uint8_t ir_count;
+	uint8_t ir_freecount;
+	xfs_inofree_t ir_free;
+};
+
+struct xfs_inobt_key {
+	__be32 ir_startino;
+};
+
+struct xfs_rmap_key {
+	__be32 rm_startblock;
+	__be64 rm_owner;
+	__be64 rm_offset;
+} __attribute__((packed));
+
+struct xfs_refcount_rec {
+	__be32 rc_startblock;
+	__be32 rc_blockcount;
+	__be32 rc_refcount;
+};
+
+struct xfs_refcount_key {
+	__be32 rc_startblock;
+};
+
+struct xfs_bmbt_rec {
+	__be64 l0;
+	__be64 l1;
+};
+
+typedef struct xfs_bmbt_rec xfs_bmbt_rec_t;
+
+typedef xfs_bmbt_rec_t xfs_bmdr_rec_t;
+
+struct xfs_bmbt_key {
+	__be64 br_startoff;
+};
+
+typedef struct xfs_bmbt_key xfs_bmdr_key_t;
+
+struct xfs_log_iovec {
+	void *i_addr;
+	int i_len;
+	uint i_type;
+};
+
+enum xfs_blft {
+	XFS_BLFT_UNKNOWN_BUF = 0,
+	XFS_BLFT_UDQUOT_BUF = 1,
+	XFS_BLFT_PDQUOT_BUF = 2,
+	XFS_BLFT_GDQUOT_BUF = 3,
+	XFS_BLFT_BTREE_BUF = 4,
+	XFS_BLFT_AGF_BUF = 5,
+	XFS_BLFT_AGFL_BUF = 6,
+	XFS_BLFT_AGI_BUF = 7,
+	XFS_BLFT_DINO_BUF = 8,
+	XFS_BLFT_SYMLINK_BUF = 9,
+	XFS_BLFT_DIR_BLOCK_BUF = 10,
+	XFS_BLFT_DIR_DATA_BUF = 11,
+	XFS_BLFT_DIR_FREE_BUF = 12,
+	XFS_BLFT_DIR_LEAF1_BUF = 13,
+	XFS_BLFT_DIR_LEAFN_BUF = 14,
+	XFS_BLFT_DA_NODE_BUF = 15,
+	XFS_BLFT_ATTR_LEAF_BUF = 16,
+	XFS_BLFT_ATTR_RMT_BUF = 17,
+	XFS_BLFT_SB_BUF = 18,
+	XFS_BLFT_RTBITMAP_BUF = 19,
+	XFS_BLFT_RTSUMMARY_BUF = 20,
+	XFS_BLFT_MAX_BUF = 32,
+};
+
+enum {
+	XFS_LOWSP_1_PCNT = 0,
+	XFS_LOWSP_2_PCNT = 1,
+	XFS_LOWSP_3_PCNT = 2,
+	XFS_LOWSP_4_PCNT = 3,
+	XFS_LOWSP_5_PCNT = 4,
+	XFS_LOWSP_MAX = 5,
+};
+
+enum {
+	XFS_ERR_METADATA = 0,
+	XFS_ERR_CLASS_MAX = 1,
+};
+
+enum {
+	XFS_ERR_DEFAULT = 0,
+	XFS_ERR_EIO = 1,
+	XFS_ERR_ENOSPC = 2,
+	XFS_ERR_ENODEV = 3,
+	XFS_ERR_ERRNO_MAX = 4,
+};
+
+typedef struct xfs_mount xfs_mount_t;
+
+enum xfs_defer_ops_type {
+	XFS_DEFER_OPS_TYPE_BMAP = 0,
+	XFS_DEFER_OPS_TYPE_REFCOUNT = 1,
+	XFS_DEFER_OPS_TYPE_RMAP = 2,
+	XFS_DEFER_OPS_TYPE_FREE = 3,
+	XFS_DEFER_OPS_TYPE_AGFL_FREE = 4,
+	XFS_DEFER_OPS_TYPE_ATTR = 5,
+	XFS_DEFER_OPS_TYPE_MAX = 6,
+};
+
+union xfs_btree_irec {
+	struct xfs_alloc_rec_incore a;
+	struct xfs_bmbt_irec b;
+	struct xfs_inobt_rec_incore i;
+	struct xfs_rmap_irec r;
+	struct xfs_refcount_irec rc;
+};
+
+struct xbtree_afakeroot;
+
+struct xfs_btree_cur_ag {
+	struct xfs_perag *pag;
+	union {
+		struct xfs_buf *agbp;
+		struct xbtree_afakeroot *afake;
+	};
+	union {
+		struct {
+			unsigned int nr_ops;
+			unsigned int shape_changes;
+		} refc;
+		struct {
+			bool active;
+		} abt;
+	};
+};
+
+struct xbtree_ifakeroot;
+
+struct xfs_btree_cur_ino {
+	struct xfs_inode *ip;
+	struct xbtree_ifakeroot *ifake;
+	int allocated;
+	short int forksize;
+	char whichfork;
+	char flags;
+};
+
+struct xfs_btree_level {
+	struct xfs_buf *bp;
+	uint16_t ptr;
+	uint16_t ra;
+};
+
+struct xfs_btree_ops;
+
+struct xfs_btree_cur {
+	struct xfs_trans *bc_tp;
+	struct xfs_mount *bc_mp;
+	const struct xfs_btree_ops *bc_ops;
+	struct kmem_cache *bc_cache;
+	unsigned int bc_flags;
+	xfs_btnum_t bc_btnum;
+	union xfs_btree_irec bc_rec;
+	uint8_t bc_nlevels;
+	uint8_t bc_maxlevels;
+	int bc_statoff;
+	union {
+		struct xfs_btree_cur_ag bc_ag;
+		struct xfs_btree_cur_ino bc_ino;
+	};
+	struct xfs_btree_level bc_levels[0];
+};
+
+union xfs_btree_ptr {
+	__be32 s;
+	__be64 l;
+};
+
+union xfs_btree_key {
+	struct xfs_bmbt_key bmbt;
+	xfs_bmdr_key_t bmbr;
+	xfs_alloc_key_t alloc;
+	struct xfs_inobt_key inobt;
+	struct xfs_rmap_key rmap;
+	struct xfs_rmap_key __rmap_bigkey[2];
+	struct xfs_refcount_key refc;
+};
+
+union xfs_btree_rec {
+	struct xfs_bmbt_rec bmbt;
+	xfs_bmdr_rec_t bmbr;
+	struct xfs_alloc_rec alloc;
+	struct xfs_inobt_rec inobt;
+	struct xfs_rmap_rec rmap;
+	struct xfs_refcount_rec refc;
+};
+
+struct xfs_btree_ops {
+	size_t key_len;
+	size_t rec_len;
+	struct xfs_btree_cur * (*dup_cursor)(struct xfs_btree_cur *);
+	void (*update_cursor)(struct xfs_btree_cur *, struct xfs_btree_cur *);
+	void (*set_root)(struct xfs_btree_cur *, const union xfs_btree_ptr *, int);
+	int (*alloc_block)(struct xfs_btree_cur *, const union xfs_btree_ptr *, union xfs_btree_ptr *, int *);
+	int (*free_block)(struct xfs_btree_cur *, struct xfs_buf *);
+	void (*update_lastrec)(struct xfs_btree_cur *, const struct xfs_btree_block *, const union xfs_btree_rec *, int, int);
+	int (*get_minrecs)(struct xfs_btree_cur *, int);
+	int (*get_maxrecs)(struct xfs_btree_cur *, int);
+	int (*get_dmaxrecs)(struct xfs_btree_cur *, int);
+	void (*init_key_from_rec)(union xfs_btree_key *, const union xfs_btree_rec *);
+	void (*init_rec_from_cur)(struct xfs_btree_cur *, union xfs_btree_rec *);
+	void (*init_ptr_from_cur)(struct xfs_btree_cur *, union xfs_btree_ptr *);
+	void (*init_high_key_from_rec)(union xfs_btree_key *, const union xfs_btree_rec *);
+	int64_t (*key_diff)(struct xfs_btree_cur *, const union xfs_btree_key *);
+	int64_t (*diff_two_keys)(struct xfs_btree_cur *, const union xfs_btree_key *, const union xfs_btree_key *);
+	const struct xfs_buf_ops *buf_ops;
+	int (*keys_inorder)(struct xfs_btree_cur *, const union xfs_btree_key *, const union xfs_btree_key *);
+	int (*recs_inorder)(struct xfs_btree_cur *, const union xfs_btree_rec *, const union xfs_btree_rec *);
+};
+
+typedef int (*xfs_btree_query_range_fn)(struct xfs_btree_cur *, const union xfs_btree_rec *, void *);
+
+typedef int (*xfs_alloc_query_range_fn)(struct xfs_btree_cur *, const struct xfs_alloc_rec_incore *, void *);
+
+typedef int (*xfs_agfl_walk_fn)(struct xfs_mount *, xfs_agblock_t, void *);
+
+struct xfs_extent_free_item {
+	struct list_head xefi_list;
+	uint64_t xefi_owner;
+	xfs_fsblock_t xefi_startblock;
+	xfs_extlen_t xefi_blockcount;
+	unsigned int xefi_flags;
+};
+
+struct xfs_item_ops {
+	unsigned int flags;
+	void (*iop_size)(struct xfs_log_item *, int *, int *);
+	void (*iop_format)(struct xfs_log_item *, struct xfs_log_vec *);
+	void (*iop_pin)(struct xfs_log_item *);
+	void (*iop_unpin)(struct xfs_log_item *, int);
+	uint64_t (*iop_sort)(struct xfs_log_item *);
+	int (*iop_precommit)(struct xfs_trans *, struct xfs_log_item *);
+	void (*iop_committing)(struct xfs_log_item *, xfs_csn_t);
+	xfs_lsn_t (*iop_committed)(struct xfs_log_item *, xfs_lsn_t);
+	uint (*iop_push)(struct xfs_log_item *, struct list_head *);
+	void (*iop_release)(struct xfs_log_item *);
+	int (*iop_recover)(struct xfs_log_item *, struct list_head *);
+	bool (*iop_match)(struct xfs_log_item *, uint64_t);
+	struct xfs_log_item * (*iop_relog)(struct xfs_log_item *, struct xfs_trans *);
+	struct xfs_log_item * (*iop_intent)(struct xfs_log_item *);
+};
+
+struct xfs_log_vec {
+	struct list_head lv_list;
+	uint32_t lv_order_id;
+	int lv_niovecs;
+	struct xfs_log_iovec *lv_iovecp;
+	struct xfs_log_item *lv_item;
+	char *lv_buf;
+	int lv_bytes;
+	int lv_buf_len;
+	int lv_size;
+};
+
+struct xfs_alloc_cur {
+	struct xfs_btree_cur *cnt;
+	struct xfs_btree_cur *bnolt;
+	struct xfs_btree_cur *bnogt;
+	xfs_extlen_t cur_len;
+	xfs_agblock_t rec_bno;
+	xfs_extlen_t rec_len;
+	xfs_agblock_t bno;
+	xfs_extlen_t len;
+	xfs_extlen_t diff;
+	unsigned int busy_gen;
+	bool busy;
+};
+
+struct xfs_alloc_query_range_info {
+	xfs_alloc_query_range_fn fn;
+	void *priv;
+};
+
+struct xbtree_afakeroot {
+	xfs_agblock_t af_root;
+	unsigned int af_levels;
+	unsigned int af_blocks;
+};
+
+struct xbtree_ifakeroot {
+	struct xfs_ifork *if_fork;
+	int64_t if_blocks;
+	unsigned int if_levels;
+	unsigned int if_fork_size;
+	unsigned int if_format;
+	unsigned int if_extents;
+};
+
+typedef uint32_t xfs_dablk_t;
+
+typedef uint32_t xfs_dahash_t;
+
+enum xfs_dinode_fmt {
+	XFS_DINODE_FMT_DEV = 0,
+	XFS_DINODE_FMT_LOCAL = 1,
+	XFS_DINODE_FMT_EXTENTS = 2,
+	XFS_DINODE_FMT_BTREE = 3,
+	XFS_DINODE_FMT_UUID = 4,
+};
+
+typedef uint xfs_dir2_data_aoff_t;
+
+struct xfs_da_geometry {
+	unsigned int blksize;
+	unsigned int fsbcount;
+	uint8_t fsblog;
+	uint8_t blklog;
+	unsigned int node_hdr_size;
+	unsigned int node_ents;
+	unsigned int magicpct;
+	xfs_dablk_t datablk;
+	unsigned int leaf_hdr_size;
+	unsigned int leaf_max_ents;
+	xfs_dablk_t leafblk;
+	unsigned int free_hdr_size;
+	unsigned int free_max_bests;
+	xfs_dablk_t freeblk;
+	xfs_extnum_t max_extents;
+	xfs_dir2_data_aoff_t data_first_offset;
+	size_t data_entry_offset;
+};
+
+struct xfs_da_blkinfo {
+	__be32 forw;
+	__be32 back;
+	__be16 magic;
+	__be16 pad;
+};
+
+typedef struct xfs_da_blkinfo xfs_da_blkinfo_t;
+
+struct xfs_da3_blkinfo {
+	struct xfs_da_blkinfo hdr;
+	__be32 crc;
+	__be64 blkno;
+	__be64 lsn;
+	uuid_t uuid;
+	__be64 owner;
+};
+
+struct xfs_da_node_hdr {
+	struct xfs_da_blkinfo info;
+	__be16 __count;
+	__be16 __level;
+};
+
+struct xfs_da_node_entry {
+	__be32 hashval;
+	__be32 before;
+};
+
+struct xfs_da_intnode {
+	struct xfs_da_node_hdr hdr;
+	struct xfs_da_node_entry __btree[0];
+};
+
+struct xfs_attr_sf_hdr {
+	__be16 totsize;
+	__u8 count;
+	__u8 padding;
+};
+
+struct xfs_attr_sf_entry {
+	uint8_t namelen;
+	uint8_t valuelen;
+	uint8_t flags;
+	uint8_t nameval[0];
+};
+
+struct xfs_attr_shortform {
+	struct xfs_attr_sf_hdr hdr;
+	struct xfs_attr_sf_entry list[1];
+};
+
+struct xfs_attr_leaf_map {
+	__be16 base;
+	__be16 size;
+};
+
+typedef struct xfs_attr_leaf_map xfs_attr_leaf_map_t;
+
+struct xfs_attr_leaf_hdr {
+	xfs_da_blkinfo_t info;
+	__be16 count;
+	__be16 usedbytes;
+	__be16 firstused;
+	__u8 holes;
+	__u8 pad1;
+	xfs_attr_leaf_map_t freemap[3];
+};
+
+typedef struct xfs_attr_leaf_hdr xfs_attr_leaf_hdr_t;
+
+struct xfs_attr_leaf_entry {
+	__be32 hashval;
+	__be16 nameidx;
+	__u8 flags;
+	__u8 pad2;
+};
+
+typedef struct xfs_attr_leaf_entry xfs_attr_leaf_entry_t;
+
+struct xfs_attr_leaf_name_local {
+	__be16 valuelen;
+	__u8 namelen;
+	__u8 nameval[1];
+};
+
+typedef struct xfs_attr_leaf_name_local xfs_attr_leaf_name_local_t;
+
+struct xfs_attr_leaf_name_remote {
+	__be32 valueblk;
+	__be32 valuelen;
+	__u8 namelen;
+	__u8 name[1];
+};
+
+typedef struct xfs_attr_leaf_name_remote xfs_attr_leaf_name_remote_t;
+
+struct xfs_attr_leafblock {
+	xfs_attr_leaf_hdr_t hdr;
+	xfs_attr_leaf_entry_t entries[1];
+};
+
+typedef struct xfs_attr_leafblock xfs_attr_leafblock_t;
+
+struct xfs_attr3_leaf_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 count;
+	__be16 usedbytes;
+	__be16 firstused;
+	__u8 holes;
+	__u8 pad1;
+	struct xfs_attr_leaf_map freemap[3];
+	__be32 pad2;
+};
+
+struct xfs_attr3_leafblock {
+	struct xfs_attr3_leaf_hdr hdr;
+	struct xfs_attr_leaf_entry entries[1];
+};
+
+enum xfs_dacmp {
+	XFS_CMP_DIFFERENT = 0,
+	XFS_CMP_EXACT = 1,
+	XFS_CMP_CASE = 2,
+};
+
+struct xfs_da_args {
+	struct xfs_da_geometry *geo;
+	const uint8_t *name;
+	int namelen;
+	uint8_t filetype;
+	void *value;
+	int valuelen;
+	unsigned int attr_filter;
+	unsigned int attr_flags;
+	xfs_dahash_t hashval;
+	xfs_ino_t inumber;
+	struct xfs_inode *dp;
+	struct xfs_trans *trans;
+	xfs_extlen_t total;
+	int whichfork;
+	xfs_dablk_t blkno;
+	int index;
+	xfs_dablk_t rmtblkno;
+	int rmtblkcnt;
+	int rmtvaluelen;
+	xfs_dablk_t blkno2;
+	int index2;
+	xfs_dablk_t rmtblkno2;
+	int rmtblkcnt2;
+	int rmtvaluelen2;
+	uint32_t op_flags;
+	enum xfs_dacmp cmpresult;
+};
+
+typedef struct xfs_da_args xfs_da_args_t;
+
+struct xfs_da_state_blk {
+	struct xfs_buf *bp;
+	xfs_dablk_t blkno;
+	xfs_daddr_t disk_blkno;
+	int index;
+	xfs_dahash_t hashval;
+	int magic;
+};
+
+typedef struct xfs_da_state_blk xfs_da_state_blk_t;
+
+struct xfs_da_state_path {
+	int active;
+	xfs_da_state_blk_t blk[5];
+};
+
+typedef struct xfs_da_state_path xfs_da_state_path_t;
+
+struct xfs_da_state {
+	xfs_da_args_t *args;
+	struct xfs_mount *mp;
+	xfs_da_state_path_t path;
+	xfs_da_state_path_t altpath;
+	unsigned char inleaf;
+	unsigned char extravalid;
+	unsigned char extraafter;
+	xfs_da_state_blk_t extrablk;
+};
+
+typedef struct xfs_da_state xfs_da_state_t;
+
+struct xfs_da3_icnode_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t level;
+	struct xfs_da_node_entry *btree;
+};
+
+struct xfs_attr3_icleaf_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t usedbytes;
+	uint32_t firstused;
+	__u8 holes;
+	struct {
+		uint16_t base;
+		uint16_t size;
+	} freemap[3];
+};
+
+struct xfs_attr3_rmt_hdr {
+	__be32 rm_magic;
+	__be32 rm_offset;
+	__be32 rm_bytes;
+	__be32 rm_crc;
+	uuid_t rm_uuid;
+	__be64 rm_owner;
+	__be64 rm_blkno;
+	__be64 rm_lsn;
+};
+
+enum xfs_delattr_state {
+	XFS_DAS_UNINIT = 0,
+	XFS_DAS_SF_ADD = 1,
+	XFS_DAS_SF_REMOVE = 2,
+	XFS_DAS_LEAF_ADD = 3,
+	XFS_DAS_LEAF_REMOVE = 4,
+	XFS_DAS_NODE_ADD = 5,
+	XFS_DAS_NODE_REMOVE = 6,
+	XFS_DAS_LEAF_SET_RMT = 7,
+	XFS_DAS_LEAF_ALLOC_RMT = 8,
+	XFS_DAS_LEAF_REPLACE = 9,
+	XFS_DAS_LEAF_REMOVE_OLD = 10,
+	XFS_DAS_LEAF_REMOVE_RMT = 11,
+	XFS_DAS_LEAF_REMOVE_ATTR = 12,
+	XFS_DAS_NODE_SET_RMT = 13,
+	XFS_DAS_NODE_ALLOC_RMT = 14,
+	XFS_DAS_NODE_REPLACE = 15,
+	XFS_DAS_NODE_REMOVE_OLD = 16,
+	XFS_DAS_NODE_REMOVE_RMT = 17,
+	XFS_DAS_NODE_REMOVE_ATTR = 18,
+	XFS_DAS_DONE = 19,
+};
+
+struct xfs_attri_log_nameval;
+
+struct xfs_attr_intent {
+	struct list_head xattri_list;
+	struct xfs_da_state *xattri_da_state;
+	struct xfs_da_args *xattri_da_args;
+	struct xfs_attri_log_nameval *xattri_nameval;
+	enum xfs_delattr_state xattri_dela_state;
+	unsigned int xattri_op_flags;
+	xfs_dablk_t xattri_lblkno;
+	int xattri_blkcnt;
+	struct xfs_bmbt_irec xattri_map;
+};
+
+struct xfs_iext_leaf;
+
+struct xfs_iext_cursor {
+	struct xfs_iext_leaf *leaf;
+	int pos;
+};
+
+typedef struct xfs_inode xfs_inode_t;
+
+struct xfs_attri_log_nameval {
+	struct xfs_log_iovec name;
+	struct xfs_log_iovec value;
+	refcount_t refcount;
+};
+
+typedef __s64 xfs_off_t;
+
+typedef struct xfs_bmbt_irec xfs_bmbt_irec_t;
+
+typedef struct xfs_bmbt_key xfs_bmbt_key_t;
+
+typedef __be64 xfs_bmbt_ptr_t;
+
+typedef int (*xfs_btree_visit_blocks_fn)(struct xfs_btree_cur *, int, void *);
+
+struct xfs_bmalloca {
+	struct xfs_trans *tp;
+	struct xfs_inode *ip;
+	struct xfs_bmbt_irec prev;
+	struct xfs_bmbt_irec got;
+	xfs_fileoff_t offset;
+	xfs_extlen_t length;
+	xfs_fsblock_t blkno;
+	struct xfs_btree_cur *cur;
+	struct xfs_iext_cursor icur;
+	int nallocs;
+	int logflags;
+	xfs_extlen_t total;
+	xfs_extlen_t minlen;
+	xfs_extlen_t minleft;
+	bool eof;
+	bool wasdel;
+	bool aeof;
+	bool conv;
+	int datatype;
+	uint32_t flags;
+};
+
+enum xfs_bmap_intent_type {
+	XFS_BMAP_MAP = 1,
+	XFS_BMAP_UNMAP = 2,
+};
+
+struct xfs_bmap_intent {
+	struct list_head bi_list;
+	enum xfs_bmap_intent_type bi_type;
+	int bi_whichfork;
+	struct xfs_inode *bi_owner;
+	struct xfs_bmbt_irec bi_bmap;
+};
+
+struct xfs_iread_state {
+	struct xfs_iext_cursor icur;
+	xfs_extnum_t loaded;
+};
+
+struct xfs_bmdr_block {
+	__be16 bb_level;
+	__be16 bb_numrecs;
+};
+
+typedef struct xfs_bmdr_block xfs_bmdr_block_t;
+
+typedef uint64_t xfs_bmbt_rec_base_t;
+
+typedef __be64 xfs_bmdr_ptr_t;
+
+struct xfs_name {
+	const unsigned char *name;
+	int len;
+	int type;
+};
+
+typedef uint32_t xfs_dqid_t;
+
+typedef uint32_t xlog_tid_t;
+
+struct xlog_rec_header {
+	__be32 h_magicno;
+	__be32 h_cycle;
+	__be32 h_version;
+	__be32 h_len;
+	__be64 h_lsn;
+	__be64 h_tail_lsn;
+	__le32 h_crc;
+	__be32 h_prev_block;
+	__be32 h_num_logops;
+	__be32 h_cycle_data[64];
+	__be32 h_fmt;
+	uuid_t h_fs_uuid;
+	__be32 h_size;
+};
+
+typedef struct xlog_rec_header xlog_rec_header_t;
+
+struct xlog_rec_ext_header {
+	__be32 xh_cycle;
+	__be32 xh_cycle_data[64];
+};
+
+typedef struct xlog_rec_ext_header xlog_rec_ext_header_t;
+
+union xlog_in_core2 {
+	xlog_rec_header_t hic_header;
+	xlog_rec_ext_header_t hic_xheader;
+	char hic_sector[512];
+};
+
+typedef union xlog_in_core2 xlog_in_core_2_t;
+
+struct xfs_trans_header {
+	uint th_magic;
+	uint th_type;
+	int32_t th_tid;
+	uint th_num_items;
+};
+
+typedef struct xfs_trans_header xfs_trans_header_t;
+
+struct xfs_inode_log_format {
+	uint16_t ilf_type;
+	uint16_t ilf_size;
+	uint32_t ilf_fields;
+	uint16_t ilf_asize;
+	uint16_t ilf_dsize;
+	uint32_t ilf_pad;
+	uint64_t ilf_ino;
+	union {
+		uint32_t ilfu_rdev;
+		uint8_t __pad[16];
+	} ilf_u;
+	int64_t ilf_blkno;
+	int32_t ilf_len;
+	int32_t ilf_boffset;
+};
+
+struct xfs_icreate_log {
+	uint16_t icl_type;
+	uint16_t icl_size;
+	__be32 icl_ag;
+	__be32 icl_agbno;
+	__be32 icl_count;
+	__be32 icl_isize;
+	__be32 icl_length;
+	__be32 icl_gen;
+};
+
+struct xlog_grant_head {
+	spinlock_t lock;
+	struct list_head waiters;
+	atomic64_t grant;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_cil;
+
+struct xlog_in_core;
+
+typedef struct xlog_in_core xlog_in_core_t;
+
+struct xlog {
+	struct xfs_mount *l_mp;
+	struct xfs_ail *l_ailp;
+	struct xfs_cil *l_cilp;
+	struct xfs_buftarg *l_targ;
+	struct workqueue_struct *l_ioend_workqueue;
+	struct delayed_work l_work;
+	long int l_opstate;
+	uint l_quotaoffs_flag;
+	struct list_head *l_buf_cancel_table;
+	int l_iclog_hsize;
+	int l_iclog_heads;
+	uint l_sectBBsize;
+	int l_iclog_size;
+	int l_iclog_bufs;
+	xfs_daddr_t l_logBBstart;
+	int l_logsize;
+	int l_logBBsize;
+	wait_queue_head_t l_flush_wait;
+	int l_covered_state;
+	xlog_in_core_t *l_iclog;
+	spinlock_t l_icloglock;
+	int l_curr_cycle;
+	int l_prev_cycle;
+	int l_curr_block;
+	int l_prev_block;
+	atomic64_t l_last_sync_lsn;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t l_tail_lsn;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xlog_grant_head l_reserve_head;
+	struct xlog_grant_head l_write_head;
+	struct xfs_kobj l_kobj;
+	xfs_lsn_t l_recovery_lsn;
+	uint32_t l_iclog_roundoff;
+	struct rw_semaphore l_incompat_users;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_defer_pending {
+	struct list_head dfp_list;
+	struct list_head dfp_work;
+	struct xfs_log_item *dfp_intent;
+	struct xfs_log_item *dfp_done;
+	unsigned int dfp_count;
+	enum xfs_defer_ops_type dfp_type;
+};
+
+typedef uint8_t xfs_dqtype_t;
+
+typedef uint64_t xfs_qcnt_t;
+
+struct xfs_dquot_res {
+	xfs_qcnt_t reserved;
+	xfs_qcnt_t count;
+	xfs_qcnt_t hardlimit;
+	xfs_qcnt_t softlimit;
+	time64_t timer;
+};
+
+struct xfs_dq_logitem {
+	struct xfs_log_item qli_item;
+	struct xfs_dquot *qli_dquot;
+	xfs_lsn_t qli_flush_lsn;
+};
+
+struct xfs_dquot {
+	struct list_head q_lru;
+	struct xfs_mount *q_mount;
+	xfs_dqtype_t q_type;
+	uint16_t q_flags;
+	xfs_dqid_t q_id;
+	uint q_nrefs;
+	int q_bufoffset;
+	xfs_daddr_t q_blkno;
+	xfs_fileoff_t q_fileoffset;
+	struct xfs_dquot_res q_blk;
+	struct xfs_dquot_res q_ino;
+	struct xfs_dquot_res q_rtb;
+	struct xfs_dq_logitem q_logitem;
+	xfs_qcnt_t q_prealloc_lo_wmark;
+	xfs_qcnt_t q_prealloc_hi_wmark;
+	int64_t q_low_space[3];
+	struct mutex q_qlock;
+	struct completion q_flush;
+	atomic_t q_pincount;
+	struct wait_queue_head q_pinwait;
+};
+
+struct xfs_attrlist_cursor_kern {
+	__u32 hashval;
+	__u32 blkno;
+	__u32 offset;
+	__u16 pad1;
+	__u8 pad2;
+	__u8 initted;
+};
+
+struct xfs_attr_list_context;
+
+typedef void (*put_listent_func_t)(struct xfs_attr_list_context *, int, unsigned char *, int, int);
+
+struct xfs_attr_list_context {
+	struct xfs_trans *tp;
+	struct xfs_inode *dp;
+	struct xfs_attrlist_cursor_kern cursor;
+	void *buffer;
+	int seen_enough;
+	bool allow_incomplete;
+	ssize_t count;
+	int dupcnt;
+	int bufsize;
+	int firstu;
+	unsigned int attr_filter;
+	int resynch;
+	put_listent_func_t put_listent;
+	int index;
+};
+
+struct xlog_ticket {
+	struct list_head t_queue;
+	struct task_struct *t_task;
+	xlog_tid_t t_tid;
+	atomic_t t_ref;
+	int t_curr_res;
+	int t_unit_res;
+	char t_ocnt;
+	char t_cnt;
+	uint8_t t_flags;
+	int t_iclog_hdrs;
+};
+
+enum xlog_iclog_state {
+	XLOG_STATE_ACTIVE = 0,
+	XLOG_STATE_WANT_SYNC = 1,
+	XLOG_STATE_SYNCING = 2,
+	XLOG_STATE_DONE_SYNC = 3,
+	XLOG_STATE_CALLBACK = 4,
+	XLOG_STATE_DIRTY = 5,
+};
+
+struct xlog_in_core {
+	wait_queue_head_t ic_force_wait;
+	wait_queue_head_t ic_write_wait;
+	struct xlog_in_core *ic_next;
+	struct xlog_in_core *ic_prev;
+	struct xlog *ic_log;
+	u32 ic_size;
+	u32 ic_offset;
+	enum xlog_iclog_state ic_state;
+	unsigned int ic_flags;
+	void *ic_datap;
+	struct list_head ic_callbacks;
+	long: 64;
+	long: 64;
+	atomic_t ic_refcnt;
+	xlog_in_core_2_t *ic_data;
+	struct semaphore ic_sema;
+	struct work_struct ic_end_io_work;
+	struct bio ic_bio;
+	struct bio_vec ic_bvec[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_cil_ctx {
+	struct xfs_cil *cil;
+	xfs_csn_t sequence;
+	xfs_lsn_t start_lsn;
+	xfs_lsn_t commit_lsn;
+	struct xlog_in_core *commit_iclog;
+	struct xlog_ticket *ticket;
+	atomic_t space_used;
+	struct list_head busy_extents;
+	struct list_head log_items;
+	struct list_head lv_chain;
+	struct list_head iclog_entry;
+	struct list_head committing;
+	struct work_struct discard_endio_work;
+	struct work_struct push_work;
+	atomic_t order_id;
+};
+
+struct xfs_cil {
+	struct xlog *xc_log;
+	long unsigned int xc_flags;
+	atomic_t xc_iclog_hdrs;
+	struct workqueue_struct *xc_push_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rw_semaphore xc_ctx_lock;
+	struct xfs_cil_ctx *xc_ctx;
+	long: 64;
+	long: 64;
+	spinlock_t xc_push_lock;
+	xfs_csn_t xc_push_seq;
+	bool xc_push_commit_stable;
+	struct list_head xc_committing;
+	wait_queue_head_t xc_commit_wait;
+	wait_queue_head_t xc_start_wait;
+	xfs_csn_t xc_current_sequence;
+	wait_queue_head_t xc_push_wait;
+	void *xc_pcp;
+	struct list_head xc_pcp_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xfs_dqtrx {
+	struct xfs_dquot *qt_dquot;
+	uint64_t qt_blk_res;
+	int64_t qt_bcount_delta;
+	int64_t qt_delbcnt_delta;
+	uint64_t qt_rtblk_res;
+	uint64_t qt_rtblk_res_used;
+	int64_t qt_rtbcount_delta;
+	int64_t qt_delrtb_delta;
+	uint64_t qt_ino_res;
+	uint64_t qt_ino_res_used;
+	int64_t qt_icount_delta;
+};
+
+enum {
+	XFS_QLOWSP_1_PCNT = 0,
+	XFS_QLOWSP_3_PCNT = 1,
+	XFS_QLOWSP_5_PCNT = 2,
+	XFS_QLOWSP_MAX = 3,
+};
+
+enum xlog_recover_reorder {
+	XLOG_REORDER_BUFFER_LIST = 0,
+	XLOG_REORDER_ITEM_LIST = 1,
+	XLOG_REORDER_INODE_BUFFER_LIST = 2,
+	XLOG_REORDER_CANCEL_LIST = 3,
+};
+
+struct xlog_recover_item;
+
+struct xlog_recover_item_ops {
+	uint16_t item_type;
+	enum xlog_recover_reorder (*reorder)(struct xlog_recover_item *);
+	void (*ra_pass2)(struct xlog *, struct xlog_recover_item *);
+	int (*commit_pass1)(struct xlog *, struct xlog_recover_item *);
+	int (*commit_pass2)(struct xlog *, struct list_head *, struct xlog_recover_item *, xfs_lsn_t);
+};
+
+struct xlog_recover_item {
+	struct list_head ri_list;
+	int ri_cnt;
+	int ri_total;
+	struct xfs_log_iovec *ri_buf;
+	const struct xlog_recover_item_ops *ri_ops;
+};
+
+struct xlog_recover {
+	struct hlist_node r_list;
+	xlog_tid_t r_log_tid;
+	xfs_trans_header_t r_theader;
+	int r_state;
+	xfs_lsn_t r_lsn;
+	struct list_head r_itemq;
+};
+
+struct xfs_fsmap {
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	xfs_fileoff_t fmr_offset;
+	xfs_filblks_t fmr_length;
+};
+
+struct xfs_icwalk {
+	__u32 icw_flags;
+	kuid_t icw_uid;
+	kgid_t icw_gid;
+	prid_t icw_prid;
+	__u64 icw_min_file_size;
+	long int icw_scan_limit;
+};
+
+struct trace_event_raw_xfs_attr_list_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 hashval;
+	u32 blkno;
+	u32 offset;
+	void *buffer;
+	int bufsize;
+	int count;
+	int firstu;
+	int dupcnt;
+	unsigned int attr_filter;
+	char __data[0];
+};
+
+struct trace_event_raw_xlog_intent_recovery_failed {
+	struct trace_entry ent;
+	dev_t dev;
+	int error;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_perag_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int refcount;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inodegc_worker {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int shrinker_hits;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fs_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long long unsigned int mflags;
+	long unsigned int opstate;
+	long unsigned int sbflags;
+	void *caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inodegc_shrinker_scan {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	void *caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_attr_list_node_descend {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 hashval;
+	u32 blkno;
+	u32 offset;
+	void *buffer;
+	int bufsize;
+	int count;
+	int firstu;
+	int dupcnt;
+	unsigned int attr_filter;
+	u32 bt_hashval;
+	u32 bt_before;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_bmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	void *leaf;
+	int pos;
+	xfs_fileoff_t startoff;
+	xfs_fsblock_t startblock;
+	xfs_filblks_t blockcount;
+	xfs_exntst_t state;
+	int bmap_state;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	int nblks;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	unsigned int flags;
+	long unsigned int caller_ip;
+	const void *buf_ops;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_flags_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	unsigned int length;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	unsigned int flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_ioerror {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t bno;
+	unsigned int length;
+	unsigned int flags;
+	int hold;
+	int pincount;
+	unsigned int lockval;
+	int error;
+	xfs_failaddr_t caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_buf_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t buf_bno;
+	unsigned int buf_len;
+	int buf_hold;
+	int buf_pincount;
+	int buf_lockval;
+	unsigned int buf_flags;
+	unsigned int bli_recur;
+	int bli_refcount;
+	unsigned int bli_flags;
+	long unsigned int li_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filestream_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_agnumber_t agno;
+	int streams;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filestream_pick {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_agnumber_t agno;
+	int streams;
+	xfs_extlen_t free;
+	int nscan;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_lock_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int lock_flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	long unsigned int iflags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_filemap_fault {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	enum page_entry_size pe_size;
+	bool write_fault;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iref_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int count;
+	int pincount;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iomap_prealloc_size {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsblock_t blocks;
+	int shift;
+	unsigned int writeio_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_irec_merge_pre {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	uint16_t holemask;
+	xfs_agino_t nagino;
+	uint16_t nholemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_irec_merge_post {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	uint16_t holemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_namespace_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t dp_ino;
+	int namelen;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rename {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_dp_ino;
+	xfs_ino_t target_dp_ino;
+	int src_namelen;
+	int target_namelen;
+	u32 __data_loc_src_name;
+	u32 __data_loc_target_name;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dquot_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u32 id;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	unsigned int nrefs;
+	long long unsigned int res_bcount;
+	long long unsigned int res_rtbcount;
+	long long unsigned int res_icount;
+	long long unsigned int bcount;
+	long long unsigned int rtbcount;
+	long long unsigned int icount;
+	long long unsigned int blk_hardlimit;
+	long long unsigned int blk_softlimit;
+	long long unsigned int rtb_hardlimit;
+	long long unsigned int rtb_softlimit;
+	long long unsigned int ino_hardlimit;
+	long long unsigned int ino_softlimit;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_mod_dquot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	unsigned int dqid;
+	unsigned int field;
+	int64_t delta;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dqtrx_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_dqtype_t type;
+	unsigned int flags;
+	u32 dqid;
+	uint64_t blk_res;
+	int64_t bcount_delta;
+	int64_t delbcnt_delta;
+	uint64_t rtblk_res;
+	uint64_t rtblk_res_used;
+	int64_t rtbcount_delta;
+	int64_t delrtb_delta;
+	uint64_t ino_res;
+	uint64_t ino_res_used;
+	int64_t icount_delta;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_loggrant_class {
+	struct trace_entry ent;
+	dev_t dev;
+	char ocnt;
+	char cnt;
+	int curr_res;
+	int unit_res;
+	unsigned int flags;
+	int reserveq;
+	int writeq;
+	int grant_reserve_cycle;
+	int grant_reserve_bytes;
+	int grant_write_cycle;
+	int grant_write_bytes;
+	int curr_cycle;
+	int curr_block;
+	xfs_lsn_t tail_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	void *lip;
+	uint type;
+	long unsigned int flags;
+	xfs_lsn_t lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_force {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t lsn;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ail_class {
+	struct trace_entry ent;
+	dev_t dev;
+	void *lip;
+	uint type;
+	long unsigned int flags;
+	xfs_lsn_t old_lsn;
+	xfs_lsn_t new_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_assign_tail_lsn {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t new_lsn;
+	xfs_lsn_t old_lsn;
+	xfs_lsn_t last_sync_lsn;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_file_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	loff_t offset;
+	size_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_imap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	loff_t size;
+	loff_t offset;
+	size_t count;
+	int whichfork;
+	xfs_fileoff_t startoff;
+	xfs_fsblock_t startblock;
+	xfs_filblks_t blockcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_simple_io_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	loff_t isize;
+	loff_t disize;
+	loff_t offset;
+	size_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_itrunc_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_fsize_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_pagecache_inval {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_off_t start;
+	xfs_off_t finish;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_bunmap {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fsize_t size;
+	xfs_fileoff_t fileoff;
+	xfs_filblks_t len;
+	long unsigned int caller_ip;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_extent_busy_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_extent_busy_trim {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	xfs_agblock_t tbno;
+	xfs_extlen_t tlen;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_agf_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int flags;
+	__u32 length;
+	__u32 bno_root;
+	__u32 cnt_root;
+	__u32 bno_level;
+	__u32 cnt_level;
+	__u32 flfirst;
+	__u32 fllast;
+	__u32 flcount;
+	__u32 freeblks;
+	__u32 longest;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_free_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	int resv;
+	int haveleft;
+	int haveright;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_alloc_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t minlen;
+	xfs_extlen_t maxlen;
+	xfs_extlen_t mod;
+	xfs_extlen_t prod;
+	xfs_extlen_t minleft;
+	xfs_extlen_t total;
+	xfs_extlen_t alignment;
+	xfs_extlen_t minalignslop;
+	xfs_extlen_t len;
+	short int type;
+	short int otype;
+	char wasdel;
+	char wasfromfl;
+	int resv;
+	int datatype;
+	xfs_fsblock_t firstblock;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_alloc_cur_check {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agblock_t bno;
+	xfs_extlen_t len;
+	xfs_extlen_t diff;
+	bool new;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_da_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 __data_loc_name;
+	int namelen;
+	xfs_dahash_t hashval;
+	xfs_ino_t inumber;
+	uint32_t op_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_attr_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u32 __data_loc_name;
+	int namelen;
+	int valuelen;
+	xfs_dahash_t hashval;
+	unsigned int attr_filter;
+	unsigned int attr_flags;
+	uint32_t op_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dir2_space_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	uint32_t op_flags;
+	int idx;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_dir2_leafn_moveents {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	uint32_t op_flags;
+	int src_idx;
+	int dst_idx;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_swap_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int which;
+	xfs_ino_t ino;
+	int format;
+	xfs_extnum_t nex;
+	int broot_size;
+	int fork_off;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_daddr_t headblk;
+	xfs_daddr_t tailblk;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_record {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_lsn_t lsn;
+	int len;
+	int num_logops;
+	int pass;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int item;
+	xlog_tid_t tid;
+	xfs_lsn_t lsn;
+	int type;
+	int pass;
+	int count;
+	int total;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_buf_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int64_t blkno;
+	short unsigned int len;
+	short unsigned int flags;
+	short unsigned int size;
+	unsigned int map_size;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_ino_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	short unsigned int size;
+	int fields;
+	short unsigned int asize;
+	short unsigned int dsize;
+	int64_t blkno;
+	int len;
+	int boffset;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_recover_icreate_item_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int count;
+	unsigned int isize;
+	xfs_agblock_t length;
+	unsigned int gen;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_discard_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_cur_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	int level;
+	int nlevels;
+	int ptr;
+	xfs_daddr_t daddr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_class {
+	struct trace_entry ent;
+	dev_t dev;
+	struct xfs_trans *tp;
+	char committed;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	struct xfs_trans *tp;
+	char committed;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_defer_pending_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	void *intent;
+	char committed;
+	int nr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_phys_extent_deferred_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int type;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_map_extent_deferred_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_ino_t ino;
+	xfs_agblock_t agbno;
+	int whichfork;
+	xfs_fileoff_t l_loff;
+	xfs_filblks_t l_len;
+	xfs_exntst_t l_state;
+	int op;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	uint64_t owner;
+	uint64_t offset;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int error;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_rmapbt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_resv_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int resv;
+	xfs_extlen_t freeblks;
+	xfs_extlen_t flcount;
+	xfs_extlen_t reserved;
+	xfs_extlen_t asked;
+	xfs_extlen_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_btree_lookup_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	xfs_lookup_t dir;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	enum xfs_refc_domain domain;
+	xfs_agblock_t startblock;
+	xfs_extlen_t blockcount;
+	xfs_nlink_t refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_extent_at_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	enum xfs_refc_domain domain;
+	xfs_agblock_t startblock;
+	xfs_extlen_t blockcount;
+	xfs_nlink_t refcount;
+	xfs_agblock_t agbno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_double_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	enum xfs_refc_domain i1_domain;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	enum xfs_refc_domain i2_domain;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_double_extent_at_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	enum xfs_refc_domain i1_domain;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	enum xfs_refc_domain i2_domain;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	xfs_agblock_t agbno;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_triple_extent_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	enum xfs_refc_domain i1_domain;
+	xfs_agblock_t i1_startblock;
+	xfs_extlen_t i1_blockcount;
+	xfs_nlink_t i1_refcount;
+	enum xfs_refc_domain i2_domain;
+	xfs_agblock_t i2_startblock;
+	xfs_extlen_t i2_blockcount;
+	xfs_nlink_t i2_refcount;
+	enum xfs_refc_domain i3_domain;
+	xfs_agblock_t i3_startblock;
+	xfs_extlen_t i3_blockcount;
+	xfs_nlink_t i3_refcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_refcount_finish_one_leftover {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	int type;
+	xfs_agblock_t agbno;
+	xfs_extlen_t len;
+	xfs_agblock_t new_agbno;
+	xfs_extlen_t new_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int error;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_double_io_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_ino;
+	loff_t src_isize;
+	loff_t src_disize;
+	loff_t src_offset;
+	long long int len;
+	xfs_ino_t dest_ino;
+	loff_t dest_isize;
+	loff_t dest_disize;
+	loff_t dest_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_irec_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	xfs_fileoff_t lblk;
+	xfs_extlen_t len;
+	xfs_fsblock_t pblk;
+	int state;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_wb_invalid_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u64 addr;
+	loff_t pos;
+	u64 len;
+	u16 type;
+	u16 flags;
+	u32 wpcseq;
+	u32 forkseq;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iomap_invalid_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	u64 addr;
+	loff_t pos;
+	u64 len;
+	u64 validity_cookie;
+	u64 inodeseq;
+	u16 type;
+	u16 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_reflink_remap_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t src_ino;
+	xfs_fileoff_t src_lblk;
+	xfs_filblks_t len;
+	xfs_ino_t dest_ino;
+	xfs_fileoff_t dest_lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ioctl_clone {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int src_ino;
+	loff_t src_isize;
+	long unsigned int dest_ino;
+	loff_t dest_isize;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	xfs_agnumber_t agno;
+	xfs_fsblock_t bno;
+	xfs_filblks_t len;
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_getfsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	xfs_daddr_t block;
+	xfs_daddr_t len;
+	uint64_t owner;
+	uint64_t offset;
+	uint64_t flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_resv_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	uint logres;
+	int logcount;
+	int logflags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_log_get_max_trans_res {
+	struct trace_entry ent;
+	dev_t dev;
+	uint logres;
+	int logcount;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_trans_class {
+	struct trace_entry ent;
+	dev_t dev;
+	uint32_t tid;
+	uint32_t flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iunlink_update_bucket {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	unsigned int bucket;
+	xfs_agino_t old_ptr;
+	xfs_agino_t new_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iunlink_update_dinode {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	xfs_agino_t old_ptr;
+	xfs_agino_t new_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_inode_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_fs_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_ag_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_inode_corrupt_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iwalk_ag {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t startino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_iwalk_ag_rec {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t startino;
+	uint64_t freemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_pwork_init {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int nr_threads;
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_kmem_class {
+	struct trace_entry ent;
+	ssize_t size;
+	int flags;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_check_new_dalign {
+	struct trace_entry ent;
+	dev_t dev;
+	int new_dalign;
+	xfs_ino_t sb_rootino;
+	xfs_ino_t calc_rootino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_commit_afakeroot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int levels;
+	unsigned int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_commit_ifakeroot {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	xfs_agnumber_t agno;
+	xfs_agino_t agino;
+	unsigned int levels;
+	unsigned int blocks;
+	int whichfork;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_bload_level_geometry {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	unsigned int level;
+	unsigned int nlevels;
+	uint64_t nr_this_level;
+	unsigned int nr_per_block;
+	unsigned int desired_npb;
+	long long unsigned int blocks;
+	long long unsigned int blocks_with_extra;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_btree_bload_block {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_btnum_t btnum;
+	unsigned int level;
+	long long unsigned int block_idx;
+	long long unsigned int nr_blocks;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	unsigned int nr_records;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_timestamp_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	long long int min;
+	long long int max;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_icwalk_class {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 flags;
+	uint32_t uid;
+	uint32_t gid;
+	prid_t prid;
+	__u64 min_file_size;
+	long int scan_limit;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xlog_iclog_class {
+	struct trace_entry ent;
+	dev_t dev;
+	uint32_t state;
+	int32_t refcount;
+	uint32_t offset;
+	uint32_t flags;
+	long long unsigned int lsn;
+	long unsigned int caller_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_das_state_class {
+	struct trace_entry ent;
+	int das;
+	xfs_ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_xfs_force_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	int ptag;
+	int flags;
+	u32 __data_loc_fname;
+	int line_num;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xfs_attr_list_class {};
+
+struct trace_event_data_offsets_xlog_intent_recovery_failed {};
+
+struct trace_event_data_offsets_xfs_perag_class {};
+
+struct trace_event_data_offsets_xfs_inodegc_worker {};
+
+struct trace_event_data_offsets_xfs_fs_class {};
+
+struct trace_event_data_offsets_xfs_inodegc_shrinker_scan {};
+
+struct trace_event_data_offsets_xfs_ag_class {};
+
+struct trace_event_data_offsets_xfs_attr_list_node_descend {};
+
+struct trace_event_data_offsets_xfs_bmap_class {};
+
+struct trace_event_data_offsets_xfs_buf_class {};
+
+struct trace_event_data_offsets_xfs_buf_flags_class {};
+
+struct trace_event_data_offsets_xfs_buf_ioerror {};
+
+struct trace_event_data_offsets_xfs_buf_item_class {};
+
+struct trace_event_data_offsets_xfs_filestream_class {};
+
+struct trace_event_data_offsets_xfs_filestream_pick {};
+
+struct trace_event_data_offsets_xfs_lock_class {};
+
+struct trace_event_data_offsets_xfs_inode_class {};
+
+struct trace_event_data_offsets_xfs_filemap_fault {};
+
+struct trace_event_data_offsets_xfs_iref_class {};
+
+struct trace_event_data_offsets_xfs_iomap_prealloc_size {};
+
+struct trace_event_data_offsets_xfs_irec_merge_pre {};
+
+struct trace_event_data_offsets_xfs_irec_merge_post {};
+
+struct trace_event_data_offsets_xfs_namespace_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_rename {
+	u32 src_name;
+	u32 target_name;
+};
+
+struct trace_event_data_offsets_xfs_dquot_class {};
+
+struct trace_event_data_offsets_xfs_trans_mod_dquot {};
+
+struct trace_event_data_offsets_xfs_dqtrx_class {};
+
+struct trace_event_data_offsets_xfs_loggrant_class {};
+
+struct trace_event_data_offsets_xfs_log_item_class {};
+
+struct trace_event_data_offsets_xfs_log_force {};
+
+struct trace_event_data_offsets_xfs_ail_class {};
+
+struct trace_event_data_offsets_xfs_log_assign_tail_lsn {};
+
+struct trace_event_data_offsets_xfs_file_class {};
+
+struct trace_event_data_offsets_xfs_imap_class {};
+
+struct trace_event_data_offsets_xfs_simple_io_class {};
+
+struct trace_event_data_offsets_xfs_itrunc_class {};
+
+struct trace_event_data_offsets_xfs_pagecache_inval {};
+
+struct trace_event_data_offsets_xfs_bunmap {};
+
+struct trace_event_data_offsets_xfs_extent_busy_class {};
+
+struct trace_event_data_offsets_xfs_extent_busy_trim {};
+
+struct trace_event_data_offsets_xfs_agf_class {};
+
+struct trace_event_data_offsets_xfs_free_extent {};
+
+struct trace_event_data_offsets_xfs_alloc_class {};
+
+struct trace_event_data_offsets_xfs_alloc_cur_check {};
+
+struct trace_event_data_offsets_xfs_da_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_attr_class {
+	u32 name;
+};
+
+struct trace_event_data_offsets_xfs_dir2_space_class {};
+
+struct trace_event_data_offsets_xfs_dir2_leafn_moveents {};
+
+struct trace_event_data_offsets_xfs_swap_extent_class {};
+
+struct trace_event_data_offsets_xfs_log_recover {};
+
+struct trace_event_data_offsets_xfs_log_recover_record {};
+
+struct trace_event_data_offsets_xfs_log_recover_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_buf_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_ino_item_class {};
+
+struct trace_event_data_offsets_xfs_log_recover_icreate_item_class {};
+
+struct trace_event_data_offsets_xfs_discard_class {};
+
+struct trace_event_data_offsets_xfs_btree_cur_class {};
+
+struct trace_event_data_offsets_xfs_defer_class {};
+
+struct trace_event_data_offsets_xfs_defer_error_class {};
+
+struct trace_event_data_offsets_xfs_defer_pending_class {};
+
+struct trace_event_data_offsets_xfs_phys_extent_deferred_class {};
+
+struct trace_event_data_offsets_xfs_map_extent_deferred_class {};
+
+struct trace_event_data_offsets_xfs_rmap_class {};
+
+struct trace_event_data_offsets_xfs_ag_error_class {};
+
+struct trace_event_data_offsets_xfs_rmapbt_class {};
+
+struct trace_event_data_offsets_xfs_ag_resv_class {};
+
+struct trace_event_data_offsets_xfs_ag_btree_lookup_class {};
+
+struct trace_event_data_offsets_xfs_refcount_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_extent_at_class {};
+
+struct trace_event_data_offsets_xfs_refcount_double_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_double_extent_at_class {};
+
+struct trace_event_data_offsets_xfs_refcount_triple_extent_class {};
+
+struct trace_event_data_offsets_xfs_refcount_finish_one_leftover {};
+
+struct trace_event_data_offsets_xfs_inode_error_class {};
+
+struct trace_event_data_offsets_xfs_double_io_class {};
+
+struct trace_event_data_offsets_xfs_inode_irec_class {};
+
+struct trace_event_data_offsets_xfs_wb_invalid_class {};
+
+struct trace_event_data_offsets_xfs_iomap_invalid_class {};
+
+struct trace_event_data_offsets_xfs_reflink_remap_blocks {};
+
+struct trace_event_data_offsets_xfs_ioctl_clone {};
+
+struct trace_event_data_offsets_xfs_fsmap_class {};
+
+struct trace_event_data_offsets_xfs_getfsmap_class {};
+
+struct trace_event_data_offsets_xfs_trans_resv_class {};
+
+struct trace_event_data_offsets_xfs_log_get_max_trans_res {};
+
+struct trace_event_data_offsets_xfs_trans_class {};
+
+struct trace_event_data_offsets_xfs_iunlink_update_bucket {};
+
+struct trace_event_data_offsets_xfs_iunlink_update_dinode {};
+
+struct trace_event_data_offsets_xfs_ag_inode_class {};
+
+struct trace_event_data_offsets_xfs_fs_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_ag_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_inode_corrupt_class {};
+
+struct trace_event_data_offsets_xfs_iwalk_ag {};
+
+struct trace_event_data_offsets_xfs_iwalk_ag_rec {};
+
+struct trace_event_data_offsets_xfs_pwork_init {};
+
+struct trace_event_data_offsets_xfs_kmem_class {};
+
+struct trace_event_data_offsets_xfs_check_new_dalign {};
+
+struct trace_event_data_offsets_xfs_btree_commit_afakeroot {};
+
+struct trace_event_data_offsets_xfs_btree_commit_ifakeroot {};
+
+struct trace_event_data_offsets_xfs_btree_bload_level_geometry {};
+
+struct trace_event_data_offsets_xfs_btree_bload_block {};
+
+struct trace_event_data_offsets_xfs_timestamp_range_class {};
+
+struct trace_event_data_offsets_xfs_icwalk_class {};
+
+struct trace_event_data_offsets_xlog_iclog_class {};
+
+struct trace_event_data_offsets_xfs_das_state_class {};
+
+struct trace_event_data_offsets_xfs_force_shutdown {
+	u32 fname;
+};
+
+typedef void (*btf_trace_xfs_attr_list_sf)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_sf_all)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_leaf)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_leaf_end)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_full)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_add)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_wrong_blk)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_list_notfound)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_leaf_list)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xfs_attr_node_list)(void *, struct xfs_attr_list_context *);
+
+typedef void (*btf_trace_xlog_intent_recovery_failed)(void *, struct xfs_mount *, int, void *);
+
+typedef void (*btf_trace_xfs_perag_get)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_get_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_put)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_set_inode_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_perag_clear_inode_tag)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_inodegc_worker)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_inodegc_flush)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_push)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_start)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_stop)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_queue)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_throttle)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_fs_sync_fs)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_start)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_stop)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_worker)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_blockgc_flush_all)(void *, struct xfs_mount *, void *);
+
+typedef void (*btf_trace_xfs_inodegc_shrinker_scan)(void *, struct xfs_mount *, struct shrink_control *, void *);
+
+typedef void (*btf_trace_xfs_read_agf)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_alloc_read_agf)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_read_agi)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_ialloc_read_agi)(void *, struct xfs_mount *, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_attr_list_node_descend)(void *, struct xfs_attr_list_context *, struct xfs_da_node_entry *);
+
+typedef void (*btf_trace_xfs_iext_insert)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iext_remove)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_pre_update)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_post_update)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_read_extent)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_write_extent)(void *, struct xfs_inode *, struct xfs_iext_cursor *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_init)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_free)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_hold)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_rele)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iodone)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_submit)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_lock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_lock_done)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_trylock_fail)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_trylock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_unlock)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iowait)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iowait_done)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_queue)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_queued)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_split)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_delwri_pushbuf)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_get_uncached)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_item_relse)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_iodone_async)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_error_relse)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_drain_buftarg)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_read_buf_shut)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_btree_corrupt)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_reset_dqcounts)(void *, struct xfs_buf *, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_find)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_get)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_read)(void *, struct xfs_buf *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_buf_ioerror)(void *, struct xfs_buf *, int, xfs_failaddr_t);
+
+typedef void (*btf_trace_xfs_buf_item_size)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_size_ordered)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_size_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_format)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_format_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_ordered)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_pin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_unpin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_unpin_stale)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_release)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_committed)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_buf_item_push)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_get_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_get_buf_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_getsb)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_getsb_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_read_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_read_buf_recur)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_log_buf)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_brelse)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bjoin)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bhold)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_bhold_release)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_trans_binval)(void *, struct xfs_buf_log_item *);
+
+typedef void (*btf_trace_xfs_filestream_free)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_lookup)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_scan)(void *, struct xfs_mount *, xfs_ino_t, xfs_agnumber_t);
+
+typedef void (*btf_trace_xfs_filestream_pick)(void *, struct xfs_inode *, xfs_agnumber_t, xfs_extlen_t, int);
+
+typedef void (*btf_trace_xfs_ilock)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ilock_nowait)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ilock_demote)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iunlock)(void *, struct xfs_inode *, unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xfs_iget_skip)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_recycle)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_recycle_fail)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_hit)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iget_miss)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_getattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_setattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_readlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inactive_symlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_alloc_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_free_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_zero_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_collapse_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_insert_file_space)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_readdir)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_get_acl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_vm_bmap)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_ioctl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_compat_ioctl)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_ioctl_setattr)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dir_fsync)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_file_fsync)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_destroy_inode)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_update_time)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dquot_dqalloc)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_dquot_dqdetach)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_eofblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_clear_eofblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_free_eofblocks_invalid)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_cowblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_clear_cowblocks_tag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_free_cowblocks_invalid)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_reclaimable)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_reclaiming)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_set_need_inactive)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_inode_inactivating)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_filemap_fault)(void *, struct xfs_inode *, enum page_entry_size, bool);
+
+typedef void (*btf_trace_xfs_iomap_prealloc_size)(void *, struct xfs_inode *, xfs_fsblock_t, int, unsigned int);
+
+typedef void (*btf_trace_xfs_irec_merge_pre)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, uint16_t, xfs_agino_t, uint16_t);
+
+typedef void (*btf_trace_xfs_irec_merge_post)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, uint16_t);
+
+typedef void (*btf_trace_xfs_irele)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_pin)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_unpin)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_inode_unpin_nowait)(void *, struct xfs_inode *, long unsigned int);
+
+typedef void (*btf_trace_xfs_remove)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_link)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_lookup)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_create)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_symlink)(void *, struct xfs_inode *, const struct xfs_name *);
+
+typedef void (*btf_trace_xfs_rename)(void *, struct xfs_inode *, struct xfs_inode *, struct xfs_name *, struct xfs_name *);
+
+typedef void (*btf_trace_xfs_dqadjust)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_want)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_dirty)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_busy)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqreclaim_done)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqattach_found)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqattach_get)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqalloc)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqtobp_read)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqread)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqread_fail)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_hit)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_miss)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_freeing)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqget_dup)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqput)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqput_free)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqrele)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush_force)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_dqflush_done)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas_before)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas_after)(void *, struct xfs_dquot *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot)(void *, struct xfs_trans *, struct xfs_dquot *, unsigned int, int64_t);
+
+typedef void (*btf_trace_xfs_trans_apply_dquot_deltas)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot_before)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_trans_mod_dquot_after)(void *, struct xfs_dqtrx *);
+
+typedef void (*btf_trace_xfs_log_umount_write)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_sleep)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_wake)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_grant_wake_up)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_reserve)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_reserve_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_regrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_regrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_regrant_sub)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant_sub)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_ticket_ungrant_exit)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_cil_wait)(void *, struct xlog *, struct xlog_ticket *);
+
+typedef void (*btf_trace_xfs_log_force)(void *, struct xfs_mount *, xfs_lsn_t, long unsigned int);
+
+typedef void (*btf_trace_xfs_ail_push)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_pinned)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_locked)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_flushing)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_mark)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_skip)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_cil_whiteout_unpin)(void *, struct xfs_log_item *);
+
+typedef void (*btf_trace_xfs_ail_insert)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_ail_move)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_ail_delete)(void *, struct xfs_log_item *, xfs_lsn_t, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_log_assign_tail_lsn)(void *, struct xlog *, xfs_lsn_t);
+
+typedef void (*btf_trace_xfs_file_buffered_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_direct_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_dax_read)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_buffered_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_direct_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_file_dax_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_reflink_bounce_dio_write)(void *, struct kiocb *, struct iov_iter *);
+
+typedef void (*btf_trace_xfs_map_blocks_found)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_map_blocks_alloc)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_iomap_alloc)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_iomap_found)(void *, struct xfs_inode *, xfs_off_t, ssize_t, int, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_delalloc_enospc)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_unwritten_convert)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_setfilesize)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_zero_eof)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write_unwritten)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_end_io_direct_write_append)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_itruncate_extents_start)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_itruncate_extents_end)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_pagecache_inval)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t);
+
+typedef void (*btf_trace_xfs_bunmap)(void *, struct xfs_inode *, xfs_fileoff_t, xfs_filblks_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_extent_busy)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_enomem)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_force)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_reuse)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_clear)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_extent_busy_trim)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agf)(void *, struct xfs_mount *, struct xfs_agf *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_agfl_reset)(void *, struct xfs_mount *, struct xfs_agf *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_free_extent)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, enum xfs_ag_resv_type, int, int);
+
+typedef void (*btf_trace_xfs_alloc_exact_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_exact_notfound)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_exact_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_nominleft)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_first)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_right)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_left)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_lookup)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_lookup_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_noentry)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_near_busy)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_neither)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_noentry)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_nominleft)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_size_busy)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_freelist)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_notenough)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_done)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_small_error)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_badargs)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_nofix)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_noagbp)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_loopfailed)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_vextent_allfailed)(void *, struct xfs_alloc_arg *);
+
+typedef void (*btf_trace_xfs_alloc_cur_check)(void *, struct xfs_mount *, xfs_btnum_t, xfs_agblock_t, xfs_extlen_t, xfs_extlen_t, bool);
+
+typedef void (*btf_trace_xfs_dir2_sf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_toino4)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_toino8)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_sf_to_block)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_to_sf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_block_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_to_block)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leaf_to_node)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_node_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_sf_to_leaf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_old)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_new)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_add_work)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_compact)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_lookup)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split_before)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_split_after)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_clearflag)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_setflag)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_flipflags)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_to_sf)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_to_node)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_rebalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_unbalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_leaf_toosmall)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_addname)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_replace)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_node_removename)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_fillstate)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_refillstate)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_get)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_set)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_join)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_link_before)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_link_after)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_unlink_back)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_unlink_forward)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_root_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_root_join)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_add)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_create)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_split)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_remove)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_rebalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_unbalance)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_node_toosmall)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_swap_lastblock)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_grow_inode)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_shrink_inode)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_fixhashpath)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_da_path_shift)(void *, struct xfs_da_args *);
+
+typedef void (*btf_trace_xfs_dir2_leafn_add)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_leafn_remove)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_grow_inode)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_shrink_inode)(void *, struct xfs_da_args *, int);
+
+typedef void (*btf_trace_xfs_dir2_leafn_moveents)(void *, struct xfs_da_args *, int, int, int);
+
+typedef void (*btf_trace_xfs_swap_extent_before)(void *, struct xfs_inode *, int);
+
+typedef void (*btf_trace_xfs_swap_extent_after)(void *, struct xfs_inode *, int);
+
+typedef void (*btf_trace_xfs_log_recover)(void *, struct xlog *, xfs_daddr_t, xfs_daddr_t);
+
+typedef void (*btf_trace_xfs_log_recover_record)(void *, struct xlog *, struct xlog_rec_header *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_add)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_add_cont)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_reorder_head)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_reorder_tail)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_item_recover)(void *, struct xlog *, struct xlog_recover *, struct xlog_recover_item *, int);
+
+typedef void (*btf_trace_xfs_log_recover_buf_not_cancel)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel_add)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_cancel_ref_inc)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_recover)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_skip)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_inode_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_reg_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_buf_dquot_buf)(void *, struct xlog *, struct xfs_buf_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_recover)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_cancel)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_inode_skip)(void *, struct xlog *, struct xfs_inode_log_format *);
+
+typedef void (*btf_trace_xfs_log_recover_icreate_cancel)(void *, struct xlog *, struct xfs_icreate_log *);
+
+typedef void (*btf_trace_xfs_log_recover_icreate_recover)(void *, struct xlog *, struct xfs_icreate_log *);
+
+typedef void (*btf_trace_xfs_discard_extent)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_toosmall)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_exclude)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_discard_busy)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_btree_updkeys)(void *, struct xfs_btree_cur *, int, struct xfs_buf *);
+
+typedef void (*btf_trace_xfs_btree_overlapped_query_range)(void *, struct xfs_btree_cur *, int, struct xfs_buf *);
+
+typedef void (*btf_trace_xfs_defer_cancel)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_roll)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_abort)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_finish)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_finish_done)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_defer_trans_roll_error)(void *, struct xfs_trans *, int);
+
+typedef void (*btf_trace_xfs_defer_finish_error)(void *, struct xfs_trans *, int);
+
+typedef void (*btf_trace_xfs_defer_create_intent)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_cancel_list)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_pending_finish)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_pending_abort)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_defer_relog_intent)(void *, struct xfs_mount *, struct xfs_defer_pending *);
+
+typedef void (*btf_trace_xfs_bmap_free_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_bmap_free_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agfl_free_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_agfl_free_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmap_unmap)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_unmap_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_unmap_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_map)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_map_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_map_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_convert)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_convert_done)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, bool, const struct xfs_owner_info *);
+
+typedef void (*btf_trace_xfs_rmap_convert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_convert_state)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_rmap_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_rmapbt_alloc_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmapbt_free_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_rmap_update)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_insert)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_delete)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_insert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_delete_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_update_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_candidate)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_query)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range_candidate)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_lookup_le_range_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_right_neighbor_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_rmap_find_left_neighbor_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t, uint64_t, uint64_t, unsigned int);
+
+typedef void (*btf_trace_xfs_bmap_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_bmap_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_ino_t, int, xfs_fileoff_t, xfs_filblks_t, xfs_exntst_t);
+
+typedef void (*btf_trace_xfs_ag_resv_init)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_alloc_extent)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free_extent)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_critical)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_needed)(void *, struct xfs_perag *, enum xfs_ag_resv_type, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_ag_resv_free_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ag_resv_init_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcountbt_alloc_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcountbt_free_block)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_lookup)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_lookup_t);
+
+typedef void (*btf_trace_xfs_refcount_get)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_update)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_insert)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_delete)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_insert_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_delete_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_update_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_increase)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_decrease)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_cow_increase)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_cow_decrease)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_merge_center_extents)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_modify_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_recover_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_split_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_merge_left_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_merge_right_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *);
+
+typedef void (*btf_trace_xfs_refcount_find_left_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_find_right_extent)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_refcount_irec *, struct xfs_refcount_irec *, xfs_agblock_t);
+
+typedef void (*btf_trace_xfs_refcount_adjust_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_adjust_cow_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_center_extents_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_modify_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_split_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_left_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_merge_right_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_left_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_right_extent_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_find_shared)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_find_shared_result)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_find_shared_error)(void *, struct xfs_mount *, xfs_agnumber_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_refcount_defer)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_deferred)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_refcount_finish_one_leftover)(void *, struct xfs_mount *, xfs_agnumber_t, int, xfs_agblock_t, xfs_extlen_t, xfs_agblock_t, xfs_extlen_t);
+
+typedef void (*btf_trace_xfs_wb_cow_iomap_invalid)(void *, struct xfs_inode *, const struct iomap *, unsigned int, int);
+
+typedef void (*btf_trace_xfs_wb_data_iomap_invalid)(void *, struct xfs_inode *, const struct iomap *, unsigned int, int);
+
+typedef void (*btf_trace_xfs_iomap_invalid)(void *, struct xfs_inode *, const struct iomap *);
+
+typedef void (*btf_trace_xfs_reflink_set_inode_flag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_reflink_unset_inode_flag)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_reflink_update_inode_size)(void *, struct xfs_inode *, xfs_fsize_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_blocks)(void *, struct xfs_inode *, xfs_fileoff_t, xfs_filblks_t, struct xfs_inode *, xfs_fileoff_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_range)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t, struct xfs_inode *, xfs_off_t);
+
+typedef void (*btf_trace_xfs_reflink_remap_range_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_set_inode_flag_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_update_inode_size_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_blocks_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_src)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_remap_extent_dest)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_compare_extents)(void *, struct xfs_inode *, xfs_off_t, xfs_off_t, struct xfs_inode *, xfs_off_t);
+
+typedef void (*btf_trace_xfs_reflink_compare_extents_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_ioctl_clone)(void *, struct inode *, struct inode *);
+
+typedef void (*btf_trace_xfs_reflink_unshare)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_unshare_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_trim_around_shared)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_found)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_enospc)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_convert_cow)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow_range)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_end_cow)(void *, struct xfs_inode *, xfs_off_t, ssize_t);
+
+typedef void (*btf_trace_xfs_reflink_cow_remap_from)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cow_remap_to)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow_range_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_end_cow_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_reflink_cancel_cow)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_remap)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_remap_piece)(void *, struct xfs_inode *, struct xfs_bmbt_irec *);
+
+typedef void (*btf_trace_xfs_swap_extent_rmap_error)(void *, struct xfs_inode *, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_fsmap_low_key)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_fsmap_high_key)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_fsmap_mapping)(void *, struct xfs_mount *, u32, xfs_agnumber_t, const struct xfs_rmap_irec *);
+
+typedef void (*btf_trace_xfs_getfsmap_low_key)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_getfsmap_high_key)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_getfsmap_mapping)(void *, struct xfs_mount *, struct xfs_fsmap *);
+
+typedef void (*btf_trace_xfs_trans_resv_calc)(void *, struct xfs_mount *, unsigned int, struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_trans_resv_calc_minlogsize)(void *, struct xfs_mount *, unsigned int, struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_log_get_max_trans_res)(void *, struct xfs_mount *, const struct xfs_trans_res *);
+
+typedef void (*btf_trace_xfs_trans_alloc)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_cancel)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_commit)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_dup)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_free)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_roll)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_add_item)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_commit_items)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_trans_free_items)(void *, struct xfs_trans *, long unsigned int);
+
+typedef void (*btf_trace_xfs_iunlink_update_bucket)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int, xfs_agino_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iunlink_update_dinode)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, xfs_agino_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iunlink)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_iunlink_remove)(void *, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_fs_mark_sick)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_fs_mark_healthy)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_fs_unfixed_corruption)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_mark_sick)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_mark_healthy)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_rt_unfixed_corruption)(void *, struct xfs_mount *, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_mark_sick)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_mark_healthy)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_ag_unfixed_corruption)(void *, struct xfs_mount *, xfs_agnumber_t, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_mark_sick)(void *, struct xfs_inode *, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_mark_healthy)(void *, struct xfs_inode *, unsigned int);
+
+typedef void (*btf_trace_xfs_iwalk_ag)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t);
+
+typedef void (*btf_trace_xfs_iwalk_ag_rec)(void *, struct xfs_mount *, xfs_agnumber_t, struct xfs_inobt_rec_incore *);
+
+typedef void (*btf_trace_xfs_pwork_init)(void *, struct xfs_mount *, unsigned int, pid_t);
+
+typedef void (*btf_trace_kmem_alloc)(void *, ssize_t, int, long unsigned int);
+
+typedef void (*btf_trace_xfs_check_new_dalign)(void *, struct xfs_mount *, int, xfs_ino_t);
+
+typedef void (*btf_trace_xfs_btree_commit_afakeroot)(void *, struct xfs_btree_cur *);
+
+typedef void (*btf_trace_xfs_btree_commit_ifakeroot)(void *, struct xfs_btree_cur *);
+
+typedef void (*btf_trace_xfs_btree_bload_level_geometry)(void *, struct xfs_btree_cur *, unsigned int, uint64_t, unsigned int, unsigned int, uint64_t, uint64_t);
+
+typedef void (*btf_trace_xfs_btree_bload_block)(void *, struct xfs_btree_cur *, unsigned int, uint64_t, uint64_t, union xfs_btree_ptr *, unsigned int);
+
+typedef void (*btf_trace_xfs_inode_timestamp_range)(void *, struct xfs_mount *, long long int, long long int);
+
+typedef void (*btf_trace_xfs_quota_expiry_range)(void *, struct xfs_mount *, long long int, long long int);
+
+typedef void (*btf_trace_xfs_ioc_free_eofblocks)(void *, struct xfs_mount *, struct xfs_icwalk *, long unsigned int);
+
+typedef void (*btf_trace_xfs_blockgc_free_space)(void *, struct xfs_mount *, struct xfs_icwalk *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_activate)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_clean)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callback)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callbacks_start)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_callbacks_done)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_force)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_force_lsn)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_get_space)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_release)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_switch)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_sync)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_syncing)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_sync_done)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_want_sync)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_wait_on)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xlog_iclog_write)(void *, struct xlog_in_core *, long unsigned int);
+
+typedef void (*btf_trace_xfs_attr_sf_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_set_iter_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_leaf_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_node_addname_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_remove_iter_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_alloc)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_rmtval_remove_return)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_add)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_replace)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_attr_defer_remove)(void *, int, struct xfs_inode *);
+
+typedef void (*btf_trace_xfs_force_shutdown)(void *, struct xfs_mount *, int, int, const char *, int);
+
+struct xfs_btree_split_args {
+	struct xfs_btree_cur *cur;
+	int level;
+	union xfs_btree_ptr *ptrp;
+	union xfs_btree_key *key;
+	struct xfs_btree_cur **curp;
+	int *stat;
+	int result;
+	bool kswapd;
+	struct completion *done;
+	struct work_struct work;
+};
+
+struct xfs_btree_block_change_owner_info {
+	uint64_t new_owner;
+	struct list_head *buffer_list;
+};
+
+struct xfs_da3_node_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 __count;
+	__be16 __level;
+	__be32 __pad32;
+};
+
+typedef struct xfs_da_intnode xfs_da_intnode_t;
+
+struct xfs_da3_intnode {
+	struct xfs_da3_node_hdr hdr;
+	struct xfs_da_node_entry __btree[0];
+};
+
+struct xfs_dir2_leaf_hdr {
+	xfs_da_blkinfo_t info;
+	__be16 count;
+	__be16 stale;
+};
+
+typedef struct xfs_dir2_leaf_hdr xfs_dir2_leaf_hdr_t;
+
+struct xfs_dir2_leaf_entry {
+	__be32 hashval;
+	__be32 address;
+};
+
+typedef struct xfs_dir2_leaf_entry xfs_dir2_leaf_entry_t;
+
+struct xfs_dir2_leaf {
+	xfs_dir2_leaf_hdr_t hdr;
+	xfs_dir2_leaf_entry_t __ents[0];
+};
+
+typedef struct xfs_dir2_leaf xfs_dir2_leaf_t;
+
+struct xfs_dir3_icleaf_hdr {
+	uint32_t forw;
+	uint32_t back;
+	uint16_t magic;
+	uint16_t count;
+	uint16_t stale;
+	struct xfs_dir2_leaf_entry *ents;
+};
+
+typedef int (*xfs_btree_bload_get_record_fn)(struct xfs_btree_cur *, void *);
+
+typedef int (*xfs_btree_bload_claim_block_fn)(struct xfs_btree_cur *, union xfs_btree_ptr *, void *);
+
+typedef size_t (*xfs_btree_bload_iroot_size_fn)(struct xfs_btree_cur *, unsigned int, void *);
+
+struct xfs_btree_bload {
+	xfs_btree_bload_get_record_fn get_record;
+	xfs_btree_bload_claim_block_fn claim_block;
+	xfs_btree_bload_iroot_size_fn iroot_size;
+	uint64_t nr_records;
+	int leaf_slack;
+	int node_slack;
+	uint64_t nr_blocks;
+	unsigned int btree_height;
+};
+
+typedef xfs_off_t xfs_dir2_off_t;
+
+typedef uint32_t xfs_dir2_db_t;
+
+struct xfs_dir2_sf_hdr {
+	uint8_t count;
+	uint8_t i8count;
+	uint8_t parent[8];
+};
+
+typedef struct xfs_dir2_sf_hdr xfs_dir2_sf_hdr_t;
+
+typedef uint32_t xfs_dir2_dataptr_t;
+
+struct xfs_dir2_sf_entry {
+	__u8 namelen;
+	__u8 offset[2];
+	__u8 name[0];
+};
+
+typedef struct xfs_dir2_sf_entry xfs_dir2_sf_entry_t;
+
+struct xfs_dir2_data_free {
+	__be16 offset;
+	__be16 length;
+};
+
+typedef struct xfs_dir2_data_free xfs_dir2_data_free_t;
+
+struct xfs_dir2_data_hdr {
+	__be32 magic;
+	xfs_dir2_data_free_t bestfree[3];
+};
+
+typedef struct xfs_dir2_data_hdr xfs_dir2_data_hdr_t;
+
+struct xfs_dir3_blk_hdr {
+	__be32 magic;
+	__be32 crc;
+	__be64 blkno;
+	__be64 lsn;
+	uuid_t uuid;
+	__be64 owner;
+};
+
+struct xfs_dir2_data_entry {
+	__be64 inumber;
+	__u8 namelen;
+	__u8 name[0];
+};
+
+typedef struct xfs_dir2_data_entry xfs_dir2_data_entry_t;
+
+struct xfs_dir2_data_unused {
+	__be16 freetag;
+	__be16 length;
+	__be16 tag;
+};
+
+typedef struct xfs_dir2_data_unused xfs_dir2_data_unused_t;
+
+struct xfs_dir2_leaf_tail {
+	__be32 bestcount;
+};
+
+typedef struct xfs_dir2_leaf_tail xfs_dir2_leaf_tail_t;
+
+struct xfs_dir2_block_tail {
+	__be32 count;
+	__be32 stale;
+};
+
+typedef struct xfs_dir2_block_tail xfs_dir2_block_tail_t;
+
+struct xfs_defer_op_type {
+	struct xfs_log_item * (*create_intent)(struct xfs_trans *, struct list_head *, unsigned int, bool);
+	void (*abort_intent)(struct xfs_log_item *);
+	struct xfs_log_item * (*create_done)(struct xfs_trans *, struct xfs_log_item *, unsigned int);
+	int (*finish_item)(struct xfs_trans *, struct xfs_log_item *, struct list_head *, struct xfs_btree_cur **);
+	void (*finish_cleanup)(struct xfs_trans *, struct xfs_btree_cur *, int);
+	void (*cancel_item)(struct list_head *);
+	unsigned int max_items;
+};
+
+struct xfs_defer_resources {
+	struct xfs_buf *dr_bp[2];
+	struct xfs_inode *dr_ip[2];
+	short unsigned int dr_bufs;
+	short unsigned int dr_ordered;
+	short unsigned int dr_inos;
+};
+
+struct xfs_defer_capture {
+	struct list_head dfc_list;
+	struct list_head dfc_dfops;
+	unsigned int dfc_tpflags;
+	unsigned int dfc_blkres;
+	unsigned int dfc_rtxres;
+	unsigned int dfc_logres;
+	struct xfs_defer_resources dfc_held;
+};
+
+struct xfs_inode_log_item {
+	struct xfs_log_item ili_item;
+	struct xfs_inode *ili_inode;
+	short unsigned int ili_lock_flags;
+	spinlock_t ili_lock;
+	unsigned int ili_last_fields;
+	unsigned int ili_fields;
+	unsigned int ili_fsync_fields;
+	xfs_lsn_t ili_flush_lsn;
+	xfs_csn_t ili_commit_seq;
+};
+
+typedef uint16_t xfs_dir2_data_off_t;
+
+struct xfs_dir3_leaf_hdr {
+	struct xfs_da3_blkinfo info;
+	__be16 count;
+	__be16 stale;
+	__be32 pad;
+};
+
+struct xfs_dir3_leaf {
+	struct xfs_dir3_leaf_hdr hdr;
+	struct xfs_dir2_leaf_entry __ents[0];
+};
+
+struct xfs_dir2_free_hdr {
+	__be32 magic;
+	__be32 firstdb;
+	__be32 nvalid;
+	__be32 nused;
+};
+
+typedef struct xfs_dir2_free_hdr xfs_dir2_free_hdr_t;
+
+struct xfs_dir2_free {
+	xfs_dir2_free_hdr_t hdr;
+	__be16 bests[0];
+};
+
+struct xfs_dir3_icfree_hdr {
+	uint32_t magic;
+	uint32_t firstdb;
+	uint32_t nvalid;
+	uint32_t nused;
+	__be16 *bests;
+};
+
+struct xfs_dir3_data_hdr {
+	struct xfs_dir3_blk_hdr hdr;
+	xfs_dir2_data_free_t best_free[3];
+	__be32 pad;
+};
+
+typedef struct xfs_dir2_free xfs_dir2_free_t;
+
+struct xfs_dir3_free_hdr {
+	struct xfs_dir3_blk_hdr hdr;
+	__be32 firstdb;
+	__be32 nvalid;
+	__be32 nused;
+	__be32 pad;
+};
+
+struct xfs_dir3_free {
+	struct xfs_dir3_free_hdr hdr;
+	__be16 bests[0];
+};
+
+struct xfs_disk_dquot {
+	__be16 d_magic;
+	__u8 d_version;
+	__u8 d_type;
+	__be32 d_id;
+	__be64 d_blk_hardlimit;
+	__be64 d_blk_softlimit;
+	__be64 d_ino_hardlimit;
+	__be64 d_ino_softlimit;
+	__be64 d_bcount;
+	__be64 d_icount;
+	__be32 d_itimer;
+	__be32 d_btimer;
+	__be16 d_iwarns;
+	__be16 d_bwarns;
+	__be32 d_pad0;
+	__be64 d_rtb_hardlimit;
+	__be64 d_rtb_softlimit;
+	__be64 d_rtbcount;
+	__be32 d_rtbtimer;
+	__be16 d_rtbwarns;
+	__be16 d_pad;
+};
+
+struct xfs_dqblk {
+	struct xfs_disk_dquot dd_diskdq;
+	char dd_fill[4];
+	__be32 dd_crc;
+	__be64 dd_lsn;
+	uuid_t dd_uuid;
+};
+
+struct xfs_quota_limits {
+	xfs_qcnt_t hard;
+	xfs_qcnt_t soft;
+	time64_t time;
+};
+
+struct xfs_def_quota {
+	struct xfs_quota_limits blk;
+	struct xfs_quota_limits ino;
+	struct xfs_quota_limits rtb;
+};
+
+struct xfs_quotainfo {
+	struct xarray qi_uquota_tree;
+	struct xarray qi_gquota_tree;
+	struct xarray qi_pquota_tree;
+	struct mutex qi_tree_lock;
+	struct xfs_inode *qi_uquotaip;
+	struct xfs_inode *qi_gquotaip;
+	struct xfs_inode *qi_pquotaip;
+	struct list_lru qi_lru;
+	int qi_dquots;
+	struct mutex qi_quotaofflock;
+	xfs_filblks_t qi_dqchunklen;
+	uint qi_dqperchunk;
+	struct xfs_def_quota qi_usr_default;
+	struct xfs_def_quota qi_grp_default;
+	struct xfs_def_quota qi_prj_default;
+	struct shrinker qi_shrinker;
+	time64_t qi_expiry_min;
+	time64_t qi_expiry_max;
+};
+
+struct xfs_dquot_acct {
+	struct xfs_dqtrx dqs[6];
+};
+
+enum {
+	XFS_QM_TRANS_USR = 0,
+	XFS_QM_TRANS_GRP = 1,
+	XFS_QM_TRANS_PRJ = 2,
+	XFS_QM_TRANS_DQTYPES = 3,
+};
+
+typedef __be64 xfs_timestamp_t;
+
+struct xfs_dinode {
+	__be16 di_magic;
+	__be16 di_mode;
+	__u8 di_version;
+	__u8 di_format;
+	__be16 di_onlink;
+	__be32 di_uid;
+	__be32 di_gid;
+	__be32 di_nlink;
+	__be16 di_projid_lo;
+	__be16 di_projid_hi;
+	union {
+		__be64 di_big_nextents;
+		__be64 di_v3_pad;
+		struct {
+			__u8 di_v2_pad[6];
+			__be16 di_flushiter;
+		};
+	};
+	xfs_timestamp_t di_atime;
+	xfs_timestamp_t di_mtime;
+	xfs_timestamp_t di_ctime;
+	__be64 di_size;
+	__be64 di_nblocks;
+	__be32 di_extsize;
+	union {
+		struct {
+			__be32 di_nextents;
+			__be16 di_anextents;
+		} __attribute__((packed));
+		struct {
+			__be32 di_big_anextents;
+			__be16 di_nrext64_pad;
+		} __attribute__((packed));
+	};
+	__u8 di_forkoff;
+	__s8 di_aformat;
+	__be32 di_dmevmask;
+	__be16 di_dmstate;
+	__be16 di_flags;
+	__be32 di_gen;
+	__be32 di_next_unlinked;
+	__le32 di_crc;
+	__be64 di_changecount;
+	__be64 di_lsn;
+	__be64 di_flags2;
+	__be32 di_cowextsize;
+	__u8 di_pad2[12];
+	xfs_timestamp_t di_crtime;
+	__be64 di_ino;
+	uuid_t di_uuid;
+};
+
+typedef struct xfs_inobt_rec_incore xfs_inobt_rec_incore_t;
+
+struct xfs_icluster {
+	bool deleted;
+	xfs_ino_t first_ino;
+	uint64_t alloc;
+};
+
+struct xfs_ialloc_count_inodes {
+	xfs_agino_t count;
+	xfs_agino_t freecount;
+};
+
+typedef __u32 xfs_dev_t;
+
+struct xfs_iext_rec {
+	uint64_t lo;
+	uint64_t hi;
+};
+
+struct xfs_iext_leaf {
+	struct xfs_iext_rec recs[15];
+	struct xfs_iext_leaf *prev;
+	struct xfs_iext_leaf *next;
+};
+
+enum {
+	NODE_SIZE = 256,
+	KEYS_PER_NODE = 16,
+	RECS_PER_LEAF = 15,
+};
+
+struct xfs_iext_node {
+	uint64_t keys[16];
+	void *ptrs[16];
+};
+
+struct xfs_legacy_timestamp {
+	__be32 t_sec;
+	__be32 t_nsec;
+};
+
+enum xfs_refcount_intent_type {
+	XFS_REFCOUNT_INCREASE = 1,
+	XFS_REFCOUNT_DECREASE = 2,
+	XFS_REFCOUNT_ALLOC_COW = 3,
+	XFS_REFCOUNT_FREE_COW = 4,
+};
+
+struct xfs_refcount_intent {
+	struct list_head ri_list;
+	enum xfs_refcount_intent_type ri_type;
+	xfs_extlen_t ri_blockcount;
+	xfs_fsblock_t ri_startblock;
+};
+
+enum xfs_refc_adjust_op {
+	XFS_REFCOUNT_ADJUST_INCREASE = 1,
+	XFS_REFCOUNT_ADJUST_DECREASE = 4294967295,
+	XFS_REFCOUNT_ADJUST_COW_ALLOC = 0,
+	XFS_REFCOUNT_ADJUST_COW_FREE = 4294967295,
+};
+
+struct xfs_refcount_recovery {
+	struct list_head rr_list;
+	struct xfs_refcount_irec rr_rrec;
+};
+
+typedef int (*xfs_rmap_query_range_fn)(struct xfs_btree_cur *, const struct xfs_rmap_irec *, void *);
+
+enum xfs_rmap_intent_type {
+	XFS_RMAP_MAP = 0,
+	XFS_RMAP_MAP_SHARED = 1,
+	XFS_RMAP_UNMAP = 2,
+	XFS_RMAP_UNMAP_SHARED = 3,
+	XFS_RMAP_CONVERT = 4,
+	XFS_RMAP_CONVERT_SHARED = 5,
+	XFS_RMAP_ALLOC = 6,
+	XFS_RMAP_FREE = 7,
+};
+
+struct xfs_rmap_intent {
+	struct list_head ri_list;
+	enum xfs_rmap_intent_type ri_type;
+	int ri_whichfork;
+	uint64_t ri_owner;
+	struct xfs_bmbt_irec ri_bmap;
+};
+
+struct xfs_find_left_neighbor_info {
+	struct xfs_rmap_irec high;
+	struct xfs_rmap_irec *irec;
+};
+
+struct xfs_rmap_query_range_info {
+	xfs_rmap_query_range_fn fn;
+	void *priv;
+};
+
+struct xfs_rmap_key_state {
+	uint64_t owner;
+	uint64_t offset;
+	unsigned int flags;
+};
+
+struct xfs_dsymlink_hdr {
+	__be32 sl_magic;
+	__be32 sl_offset;
+	__be32 sl_bytes;
+	__be32 sl_crc;
+	uuid_t sl_uuid;
+	__be64 sl_owner;
+	__be64 sl_blkno;
+	__be64 sl_lsn;
+};
+
+struct xfs_ail {
+	struct xlog *ail_log;
+	struct task_struct *ail_task;
+	struct list_head ail_head;
+	xfs_lsn_t ail_target;
+	xfs_lsn_t ail_target_prev;
+	struct list_head ail_cursors;
+	spinlock_t ail_lock;
+	xfs_lsn_t ail_last_pushed_lsn;
+	int ail_log_flush;
+	struct list_head ail_buf_list;
+	wait_queue_head_t ail_empty;
+};
+
+struct xfs_fsop_geom {
+	__u32 blocksize;
+	__u32 rtextsize;
+	__u32 agblocks;
+	__u32 agcount;
+	__u32 logblocks;
+	__u32 sectsize;
+	__u32 inodesize;
+	__u32 imaxpct;
+	__u64 datablocks;
+	__u64 rtblocks;
+	__u64 rtextents;
+	__u64 logstart;
+	unsigned char uuid[16];
+	__u32 sunit;
+	__u32 swidth;
+	__s32 version;
+	__u32 flags;
+	__u32 logsectsize;
+	__u32 rtsectsize;
+	__u32 dirblocksize;
+	__u32 logsunit;
+	uint32_t sick;
+	uint32_t checked;
+	__u64 reserved[17];
+};
+
+struct xfs_writepage_ctx {
+	struct iomap_writepage_ctx ctx;
+	unsigned int data_seq;
+	unsigned int cow_seq;
+};
+
+struct xfs_attr_sf_sort {
+	uint8_t entno;
+	uint8_t namelen;
+	uint8_t valuelen;
+	uint8_t flags;
+	xfs_dahash_t hash;
+	unsigned char *name;
+};
+
+typedef struct xfs_attr_sf_sort xfs_attr_sf_sort_t;
+
+typedef uint64_t xfs_ufsize_t;
+
+struct getbmapx {
+	__s64 bmv_offset;
+	__s64 bmv_block;
+	__s64 bmv_length;
+	__s32 bmv_count;
+	__s32 bmv_entries;
+	__s32 bmv_iflags;
+	__s32 bmv_oflags;
+	__s32 bmv_unused1;
+	__s32 bmv_unused2;
+};
+
+struct xfs_bstime {
+	__kernel_long_t tv_sec;
+	__s32 tv_nsec;
+};
+
+typedef struct xfs_bstime xfs_bstime_t;
+
+struct xfs_bstat {
+	__u64 bs_ino;
+	__u16 bs_mode;
+	__u16 bs_nlink;
+	__u32 bs_uid;
+	__u32 bs_gid;
+	__u32 bs_rdev;
+	__s32 bs_blksize;
+	__s64 bs_size;
+	xfs_bstime_t bs_atime;
+	xfs_bstime_t bs_mtime;
+	xfs_bstime_t bs_ctime;
+	int64_t bs_blocks;
+	__u32 bs_xflags;
+	__s32 bs_extsize;
+	__s32 bs_extents;
+	__u32 bs_gen;
+	__u16 bs_projid_lo;
+	__u16 bs_forkoff;
+	__u16 bs_projid_hi;
+	uint16_t bs_sick;
+	uint16_t bs_checked;
+	unsigned char bs_pad[2];
+	__u32 bs_cowextsize;
+	__u32 bs_dmevmask;
+	__u16 bs_dmstate;
+	__u16 bs_aextents;
+};
+
+struct xfs_swapext {
+	int64_t sx_version;
+	int64_t sx_fdtarget;
+	int64_t sx_fdtmp;
+	xfs_off_t sx_offset;
+	xfs_off_t sx_length;
+	char sx_pad[16];
+	struct xfs_bstat sx_stat;
+};
+
+struct kgetbmap {
+	__s64 bmv_offset;
+	__s64 bmv_block;
+	__s64 bmv_length;
+	__s32 bmv_oflags;
+};
+
+struct xfs_extent_busy {
+	struct rb_node rb_node;
+	struct list_head list;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	xfs_extlen_t length;
+	unsigned int flags;
+};
+
+struct xfs_fid64 {
+	u64 ino;
+	u32 gen;
+	u64 parent_ino;
+	u32 parent_gen;
+} __attribute__((packed));
+
+enum layout_break_reason {
+	BREAK_WRITE = 0,
+	BREAK_UNMAP = 1,
+};
+
+struct xfs_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct xfs_fsmap fmh_keys[2];
+};
+
+struct xfs_getfsmap_info {
+	struct xfs_fsmap_head *head;
+	struct fsmap *fsmap_recs;
+	struct xfs_buf *agf_bp;
+	struct xfs_perag *pag;
+	xfs_daddr_t next_daddr;
+	u64 missing_owner;
+	u32 dev;
+	struct xfs_rmap_irec low;
+	struct xfs_rmap_irec high;
+	bool last;
+};
+
+struct xfs_getfsmap_dev {
+	u32 dev;
+	int (*fn)(struct xfs_trans *, const struct xfs_fsmap *, struct xfs_getfsmap_info *);
+};
+
+struct xfs_mru_cache_elem {
+	struct list_head list_node;
+	long unsigned int key;
+};
+
+typedef void (*xfs_mru_cache_free_func_t)(void *, struct xfs_mru_cache_elem *);
+
+struct xfs_fstrm_item {
+	struct xfs_mru_cache_elem mru;
+	xfs_agnumber_t ag;
+};
+
+enum xfs_fstrm_alloc {
+	XFS_PICK_USERDATA = 1,
+	XFS_PICK_LOWSPACE = 2,
+};
+
+struct xfs_globals {
+	int log_recovery_delay;
+	int mount_delay;
+	bool bug_on_assert;
+	bool always_cow;
+};
+
+struct xfs_fsop_counts {
+	__u64 freedata;
+	__u64 freertx;
+	__u64 freeino;
+	__u64 allocino;
+};
+
+typedef struct xfs_fsop_counts xfs_fsop_counts_t;
+
+struct xfs_fsop_resblks {
+	__u64 resblks;
+	__u64 resblks_avail;
+};
+
+typedef struct xfs_fsop_resblks xfs_fsop_resblks_t;
+
+struct xfs_growfs_data {
+	__u64 newblocks;
+	__u32 imaxpct;
+};
+
+struct xfs_growfs_log {
+	__u32 newblocks;
+	__u32 isint;
+};
+
+struct xfs_bulkstat {
+	uint64_t bs_ino;
+	uint64_t bs_size;
+	uint64_t bs_blocks;
+	uint64_t bs_xflags;
+	int64_t bs_atime;
+	int64_t bs_mtime;
+	int64_t bs_ctime;
+	int64_t bs_btime;
+	uint32_t bs_gen;
+	uint32_t bs_uid;
+	uint32_t bs_gid;
+	uint32_t bs_projectid;
+	uint32_t bs_atime_nsec;
+	uint32_t bs_mtime_nsec;
+	uint32_t bs_ctime_nsec;
+	uint32_t bs_btime_nsec;
+	uint32_t bs_blksize;
+	uint32_t bs_rdev;
+	uint32_t bs_cowextsize_blks;
+	uint32_t bs_extsize_blks;
+	uint32_t bs_nlink;
+	uint32_t bs_extents;
+	uint32_t bs_aextents;
+	uint16_t bs_version;
+	uint16_t bs_forkoff;
+	uint16_t bs_sick;
+	uint16_t bs_checked;
+	uint16_t bs_mode;
+	uint16_t bs_pad2;
+	uint64_t bs_extents64;
+	uint64_t bs_pad[6];
+};
+
+struct ioctl_sick_map {
+	unsigned int sick_mask;
+	unsigned int ioctl_mask;
+};
+
+struct xfs_inodegc {
+	struct llist_head list;
+	struct delayed_work work;
+	unsigned int items;
+	unsigned int shrinker_hits;
+};
+
+enum xfs_icwalk_goal {
+	XFS_ICWALK_BLOCKGC = 1,
+	XFS_ICWALK_RECLAIM = 0,
+};
+
+struct dioattr {
+	__u32 d_mem;
+	__u32 d_miniosz;
+	__u32 d_maxiosz;
+};
+
+struct xfs_growfs_rt {
+	__u64 newblocks;
+	__u32 extsize;
+};
+
+typedef struct xfs_growfs_rt xfs_growfs_rt_t;
+
+struct xfs_fsop_bulkreq {
+	__u64 *lastip;
+	__s32 icount;
+	void *ubuffer;
+	__s32 *ocount;
+};
+
+struct xfs_inogrp {
+	__u64 xi_startino;
+	__s32 xi_alloccount;
+	__u64 xi_allocmask;
+};
+
+struct xfs_inumbers {
+	uint64_t xi_startino;
+	uint64_t xi_allocmask;
+	uint8_t xi_alloccount;
+	uint8_t xi_version;
+	uint8_t xi_padding[6];
+};
+
+struct xfs_bulk_ireq {
+	uint64_t ino;
+	uint32_t flags;
+	uint32_t icount;
+	uint32_t ocount;
+	uint32_t agno;
+	uint64_t reserved[5];
+};
+
+struct xfs_bulkstat_req {
+	struct xfs_bulk_ireq hdr;
+	struct xfs_bulkstat bulkstat[0];
+};
+
+struct xfs_inumbers_req {
+	struct xfs_bulk_ireq hdr;
+	struct xfs_inumbers inumbers[0];
+};
+
+struct xfs_error_injection {
+	__s32 fd;
+	__s32 errtag;
+};
+
+typedef struct xfs_error_injection xfs_error_injection_t;
+
+struct xfs_fs_eofblocks {
+	__u32 eof_version;
+	__u32 eof_flags;
+	uid_t eof_uid;
+	gid_t eof_gid;
+	prid_t eof_prid;
+	__u32 pad32;
+	__u64 eof_min_file_size;
+	__u64 pad64[12];
+};
+
+struct xfs_fsop_handlereq {
+	__u32 fd;
+	void *path;
+	__u32 oflags;
+	void *ihandle;
+	__u32 ihandlen;
+	void *ohandle;
+	__u32 *ohandlen;
+};
+
+typedef struct xfs_fsop_handlereq xfs_fsop_handlereq_t;
+
+struct xfs_attrlist_cursor {
+	__u32 opaque[4];
+};
+
+struct xfs_attrlist {
+	__s32 al_count;
+	__s32 al_more;
+	__s32 al_offset[1];
+};
+
+struct xfs_attrlist_ent {
+	__u32 a_valuelen;
+	char a_name[1];
+};
+
+struct xfs_fsop_attrlist_handlereq {
+	struct xfs_fsop_handlereq hreq;
+	struct xfs_attrlist_cursor pos;
+	__u32 flags;
+	__u32 buflen;
+	void *buffer;
+};
+
+struct xfs_attr_multiop {
+	__u32 am_opcode;
+	__s32 am_error;
+	void *am_attrname;
+	void *am_attrvalue;
+	__u32 am_length;
+	__u32 am_flags;
+};
+
+typedef struct xfs_attr_multiop xfs_attr_multiop_t;
+
+struct xfs_fsop_attrmulti_handlereq {
+	struct xfs_fsop_handlereq hreq;
+	__u32 opcount;
+	struct xfs_attr_multiop *ops;
+};
+
+typedef struct xfs_fsop_attrmulti_handlereq xfs_fsop_attrmulti_handlereq_t;
+
+typedef struct {
+	__u32 val[2];
+} xfs_fsid_t;
+
+struct xfs_fid {
+	__u16 fid_len;
+	__u16 fid_pad;
+	__u32 fid_gen;
+	__u64 fid_ino;
+};
+
+typedef struct xfs_fid xfs_fid_t;
+
+struct xfs_handle {
+	union {
+		__s64 align;
+		xfs_fsid_t _ha_fsid;
+	} ha_u;
+	xfs_fid_t ha_fid;
+};
+
+typedef struct xfs_handle xfs_handle_t;
+
+typedef struct xfs_swapext xfs_swapext_t;
+
+struct xfs_scrub_metadata {
+	__u32 sm_type;
+	__u32 sm_flags;
+	__u64 sm_ino;
+	__u32 sm_gen;
+	__u32 sm_agno;
+	__u64 sm_reserved[5];
+};
+
+struct xfs_ibulk {
+	struct xfs_mount *mp;
+	struct user_namespace *mnt_userns;
+	void *ubuffer;
+	xfs_ino_t startino;
+	unsigned int icount;
+	unsigned int ocount;
+	unsigned int flags;
+};
+
+typedef int (*bulkstat_one_fmt_pf)(struct xfs_ibulk *, const struct xfs_bulkstat *);
+
+typedef int (*inumbers_fmt_pf)(struct xfs_ibulk *, const struct xfs_inumbers *);
+
+typedef int (*xfs_iwalk_fn)(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, void *);
+
+typedef int (*xfs_inobt_walk_fn)(struct xfs_mount *, struct xfs_trans *, xfs_agnumber_t, const struct xfs_inobt_rec_incore *, void *);
+
+struct xfs_pwork;
+
+typedef int (*xfs_pwork_work_fn)(struct xfs_mount *, struct xfs_pwork *);
+
+struct xfs_pwork_ctl;
+
+struct xfs_pwork {
+	struct work_struct work;
+	struct xfs_pwork_ctl *pctl;
+};
+
+struct xfs_pwork_ctl {
+	struct workqueue_struct *wq;
+	struct xfs_mount *mp;
+	xfs_pwork_work_fn work_fn;
+	struct wait_queue_head poll_wait;
+	atomic_t nr_work;
+	int error;
+};
+
+struct xfs_iwalk_ag {
+	struct xfs_pwork pwork;
+	struct xfs_mount *mp;
+	struct xfs_trans *tp;
+	struct xfs_perag *pag;
+	xfs_ino_t startino;
+	xfs_ino_t lastino;
+	struct xfs_inobt_rec_incore *recs;
+	unsigned int sz_recs;
+	unsigned int nr_recs;
+	xfs_iwalk_fn iwalk_fn;
+	xfs_inobt_walk_fn inobt_walk_fn;
+	void *data;
+	unsigned int trim_start: 1;
+	unsigned int skip_empty: 1;
+	unsigned int drop_trans: 1;
+};
+
+struct xfs_bstat_chunk {
+	bulkstat_one_fmt_pf formatter;
+	struct xfs_ibulk *breq;
+	struct xfs_bulkstat *buf;
+};
+
+struct xfs_inumbers_chunk {
+	inumbers_fmt_pf formatter;
+	struct xfs_ibulk *breq;
+};
+
+struct xfs_mru_cache {
+	struct xarray store;
+	struct list_head *lists;
+	struct list_head reap_list;
+	spinlock_t lock;
+	unsigned int grp_count;
+	unsigned int grp_time;
+	unsigned int lru_grp;
+	long unsigned int time_zero;
+	xfs_mru_cache_free_func_t free_func;
+	struct delayed_work work;
+	unsigned int queued;
+	void *data;
+};
+
+typedef struct xfs_sb xfs_sb_t;
+
+enum xfs_dax_mode {
+	XFS_DAX_INODE = 0,
+	XFS_DAX_ALWAYS = 1,
+	XFS_DAX_NEVER = 2,
+};
+
+enum {
+	Opt_logbufs = 0,
+	Opt_logbsize = 1,
+	Opt_logdev = 2,
+	Opt_rtdev = 3,
+	Opt_wsync = 4,
+	Opt_noalign = 5,
+	Opt_swalloc = 6,
+	Opt_sunit = 7,
+	Opt_swidth = 8,
+	Opt_nouuid = 9,
+	Opt_grpid___2 = 10,
+	Opt_nogrpid___2 = 11,
+	Opt_bsdgroups = 12,
+	Opt_sysvgroups = 13,
+	Opt_allocsize = 14,
+	Opt_norecovery = 15,
+	Opt_inode64___2 = 16,
+	Opt_inode32___2 = 17,
+	Opt_ikeep = 18,
+	Opt_noikeep = 19,
+	Opt_largeio = 20,
+	Opt_nolargeio = 21,
+	Opt_attr2 = 22,
+	Opt_noattr2 = 23,
+	Opt_filestreams = 24,
+	Opt_quota___2 = 25,
+	Opt_noquota___2 = 26,
+	Opt_usrquota___2 = 27,
+	Opt_grpquota___2 = 28,
+	Opt_prjquota___2 = 29,
+	Opt_uquota = 30,
+	Opt_gquota = 31,
+	Opt_pquota = 32,
+	Opt_uqnoenforce = 33,
+	Opt_gqnoenforce = 34,
+	Opt_pqnoenforce = 35,
+	Opt_qnoenforce = 36,
+	Opt_discard___3 = 37,
+	Opt_nodiscard___2 = 38,
+	Opt_dax___2 = 39,
+	Opt_dax_enum = 40,
+};
+
+struct proc_xfs_info {
+	uint64_t flag;
+	char *str;
+};
+
+struct xfs_mount;
+
+struct xstats_entry {
+	char *desc;
+	int endpoint;
+};
+
+struct xfs_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, char *);
+	ssize_t (*store)(struct kobject *, const char *, size_t);
+};
+
+struct xfs_error_init {
+	char *name;
+	int max_retries;
+	int retry_timeout;
+};
+
+struct xfs_ail_cursor {
+	struct list_head list;
+	struct xfs_log_item *item;
+};
+
+struct xfs_unmount_log_format {
+	uint16_t magic;
+	uint16_t pad1;
+	uint32_t pad2;
+};
+
+struct xlog_op_header {
+	__be32 oh_tid;
+	__be32 oh_len;
+	__u8 oh_clientid;
+	__u8 oh_flags;
+	__u16 oh_res2;
+};
+
+typedef struct xlog_ticket xlog_ticket_t;
+
+struct xlog_cil_pcp {
+	int32_t space_used;
+	uint32_t space_reserved;
+	struct list_head busy_extents;
+	struct list_head log_items;
+};
+
+enum _record_type {
+	_START_RECORD = 0,
+	_COMMIT_RECORD = 1,
+};
+
+struct xlog_cil_trans_hdr {
+	struct xlog_op_header oph[2];
+	struct xfs_trans_header thdr;
+	struct xfs_log_iovec lhdr[2];
+};
+
+struct xfs_map_extent {
+	uint64_t me_owner;
+	uint64_t me_startblock;
+	uint64_t me_startoff;
+	uint32_t me_len;
+	uint32_t me_flags;
+};
+
+struct xfs_bui_log_format {
+	uint16_t bui_type;
+	uint16_t bui_size;
+	uint32_t bui_nextents;
+	uint64_t bui_id;
+	struct xfs_map_extent bui_extents[0];
+};
+
+struct xfs_bud_log_format {
+	uint16_t bud_type;
+	uint16_t bud_size;
+	uint32_t __pad;
+	uint64_t bud_bui_id;
+};
+
+struct xfs_bui_log_item {
+	struct xfs_log_item bui_item;
+	atomic_t bui_refcount;
+	atomic_t bui_next_extent;
+	struct xfs_bui_log_format bui_format;
+};
+
+struct xfs_bud_log_item {
+	struct xfs_log_item bud_item;
+	struct xfs_bui_log_item *bud_buip;
+	struct xfs_bud_log_format bud_format;
+};
+
+struct xfs_dq_logformat {
+	uint16_t qlf_type;
+	uint16_t qlf_size;
+	xfs_dqid_t qlf_id;
+	int64_t qlf_blkno;
+	int32_t qlf_len;
+	uint32_t qlf_boffset;
+};
+
+struct xfs_qoff_logformat {
+	short unsigned int qf_type;
+	short unsigned int qf_size;
+	unsigned int qf_flags;
+	char qf_pad[12];
+};
+
+typedef struct xfs_log_iovec xfs_log_iovec_t;
+
+struct xfs_extent {
+	xfs_fsblock_t ext_start;
+	xfs_extlen_t ext_len;
+};
+
+typedef struct xfs_extent xfs_extent_t;
+
+struct xfs_extent_32 {
+	uint64_t ext_start;
+	uint32_t ext_len;
+} __attribute__((packed));
+
+typedef struct xfs_extent_32 xfs_extent_32_t;
+
+struct xfs_extent_64 {
+	uint64_t ext_start;
+	uint32_t ext_len;
+	uint32_t ext_pad;
+};
+
+typedef struct xfs_extent_64 xfs_extent_64_t;
+
+struct xfs_efi_log_format {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_t efi_extents[0];
+};
+
+typedef struct xfs_efi_log_format xfs_efi_log_format_t;
+
+struct xfs_efi_log_format_32 {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_32_t efi_extents[0];
+};
+
+typedef struct xfs_efi_log_format_32 xfs_efi_log_format_32_t;
+
+struct xfs_efi_log_format_64 {
+	uint16_t efi_type;
+	uint16_t efi_size;
+	uint32_t efi_nextents;
+	uint64_t efi_id;
+	xfs_extent_64_t efi_extents[0];
+};
+
+typedef struct xfs_efi_log_format_64 xfs_efi_log_format_64_t;
+
+struct xfs_efd_log_format {
+	uint16_t efd_type;
+	uint16_t efd_size;
+	uint32_t efd_nextents;
+	uint64_t efd_efi_id;
+	xfs_extent_t efd_extents[0];
+};
+
+typedef struct xfs_efd_log_format xfs_efd_log_format_t;
+
+struct xfs_efi_log_item {
+	struct xfs_log_item efi_item;
+	atomic_t efi_refcount;
+	atomic_t efi_next_extent;
+	xfs_efi_log_format_t efi_format;
+};
+
+struct xfs_efd_log_item {
+	struct xfs_log_item efd_item;
+	struct xfs_efi_log_item *efd_efip;
+	uint efd_next_extent;
+	xfs_efd_log_format_t efd_format;
+};
+
+struct xfs_buf_cancel {
+	xfs_daddr_t bc_blkno;
+	uint bc_len;
+	int bc_refcount;
+	struct list_head bc_list;
+};
+
+struct xfs_icreate_item {
+	struct xfs_log_item ic_item;
+	struct xfs_icreate_log ic_format;
+};
+
+struct xfs_inode_log_format_32 {
+	uint16_t ilf_type;
+	uint16_t ilf_size;
+	uint32_t ilf_fields;
+	uint16_t ilf_asize;
+	uint16_t ilf_dsize;
+	uint64_t ilf_ino;
+	union {
+		uint32_t ilfu_rdev;
+		uint8_t __pad[16];
+	} ilf_u;
+	int64_t ilf_blkno;
+	int32_t ilf_len;
+	int32_t ilf_boffset;
+} __attribute__((packed));
+
+typedef uint64_t xfs_log_timestamp_t;
+
+struct xfs_log_legacy_timestamp {
+	int32_t t_sec;
+	int32_t t_nsec;
+};
+
+struct xfs_log_dinode {
+	uint16_t di_magic;
+	uint16_t di_mode;
+	int8_t di_version;
+	int8_t di_format;
+	uint8_t di_pad3[2];
+	uint32_t di_uid;
+	uint32_t di_gid;
+	uint32_t di_nlink;
+	uint16_t di_projid_lo;
+	uint16_t di_projid_hi;
+	union {
+		uint64_t di_big_nextents;
+		uint64_t di_v3_pad;
+		struct {
+			uint8_t di_v2_pad[6];
+			uint16_t di_flushiter;
+		};
+	};
+	xfs_log_timestamp_t di_atime;
+	xfs_log_timestamp_t di_mtime;
+	xfs_log_timestamp_t di_ctime;
+	xfs_fsize_t di_size;
+	xfs_rfsblock_t di_nblocks;
+	xfs_extlen_t di_extsize;
+	union {
+		struct {
+			uint32_t di_nextents;
+			uint16_t di_anextents;
+		} __attribute__((packed));
+		struct {
+			uint32_t di_big_anextents;
+			uint16_t di_nrext64_pad;
+		} __attribute__((packed));
+	};
+	uint8_t di_forkoff;
+	int8_t di_aformat;
+	uint32_t di_dmevmask;
+	uint16_t di_dmstate;
+	uint16_t di_flags;
+	uint32_t di_gen;
+	xfs_agino_t di_next_unlinked;
+	uint32_t di_crc;
+	uint64_t di_changecount;
+	xfs_lsn_t di_lsn;
+	uint64_t di_flags2;
+	uint32_t di_cowextsize;
+	uint8_t di_pad2[12];
+	xfs_log_timestamp_t di_crtime;
+	xfs_ino_t di_ino;
+	uuid_t di_uuid;
+};
+
+struct xfs_attri_log_format {
+	uint16_t alfi_type;
+	uint16_t alfi_size;
+	uint32_t __pad;
+	uint64_t alfi_id;
+	uint64_t alfi_ino;
+	uint32_t alfi_op_flags;
+	uint32_t alfi_name_len;
+	uint32_t alfi_value_len;
+	uint32_t alfi_attr_filter;
+};
+
+struct xfs_attrd_log_format {
+	uint16_t alfd_type;
+	uint16_t alfd_size;
+	uint32_t __pad;
+	uint64_t alfd_alf_id;
+};
+
+struct xfs_attri_log_item {
+	struct xfs_log_item attri_item;
+	atomic_t attri_refcount;
+	struct xfs_attri_log_nameval *attri_nameval;
+	struct xfs_attri_log_format attri_format;
+};
+
+struct xfs_attrd_log_item {
+	struct xfs_log_item attrd_item;
+	struct xfs_attri_log_item *attrd_attrip;
+	struct xfs_attrd_log_format attrd_format;
+};
+
+struct xfs_iunlink_item {
+	struct xfs_log_item item;
+	struct xfs_inode *ip;
+	struct xfs_perag *pag;
+	xfs_agino_t next_agino;
+	xfs_agino_t old_agino;
+};
+
+typedef uint32_t xfs_aextnum_t;
+
+struct xfs_phys_extent {
+	uint64_t pe_startblock;
+	uint32_t pe_len;
+	uint32_t pe_flags;
+};
+
+struct xfs_cui_log_format {
+	uint16_t cui_type;
+	uint16_t cui_size;
+	uint32_t cui_nextents;
+	uint64_t cui_id;
+	struct xfs_phys_extent cui_extents[0];
+};
+
+struct xfs_cud_log_format {
+	uint16_t cud_type;
+	uint16_t cud_size;
+	uint32_t __pad;
+	uint64_t cud_cui_id;
+};
+
+struct xfs_cui_log_item {
+	struct xfs_log_item cui_item;
+	atomic_t cui_refcount;
+	atomic_t cui_next_extent;
+	struct xfs_cui_log_format cui_format;
+};
+
+struct xfs_cud_log_item {
+	struct xfs_log_item cud_item;
+	struct xfs_cui_log_item *cud_cuip;
+	struct xfs_cud_log_format cud_format;
+};
+
+struct xfs_rui_log_format {
+	uint16_t rui_type;
+	uint16_t rui_size;
+	uint32_t rui_nextents;
+	uint64_t rui_id;
+	struct xfs_map_extent rui_extents[0];
+};
+
+struct xfs_rud_log_format {
+	uint16_t rud_type;
+	uint16_t rud_size;
+	uint32_t __pad;
+	uint64_t rud_rui_id;
+};
+
+struct xfs_rui_log_item {
+	struct xfs_log_item rui_item;
+	atomic_t rui_refcount;
+	atomic_t rui_next_extent;
+	struct xfs_rui_log_format rui_format;
+};
+
+struct xfs_rud_log_item {
+	struct xfs_log_item rud_item;
+	struct xfs_rui_log_item *rud_ruip;
+	struct xfs_rud_log_format rud_format;
+};
+
+typedef int (*xfs_qm_dqiterate_fn)(struct xfs_dquot *, xfs_dqtype_t, void *);
+
+struct xfs_acl_entry {
+	__be32 ae_tag;
+	__be32 ae_id;
+	__be16 ae_perm;
+	__be16 ae_pad;
+};
+
+struct xfs_acl {
+	__be32 acl_cnt;
+	struct xfs_acl_entry acl_entry[0];
+};
+
+struct xfs_qm_isolate {
+	struct list_head buffers;
+	struct list_head dispose;
+};
+
+struct compat_xfs_bstime {
+	old_time32_t tv_sec;
+	__s32 tv_nsec;
+};
+
+typedef struct compat_xfs_bstime compat_xfs_bstime_t;
+
+struct compat_xfs_bstat {
+	__u64 bs_ino;
+	__u16 bs_mode;
+	__u16 bs_nlink;
+	__u32 bs_uid;
+	__u32 bs_gid;
+	__u32 bs_rdev;
+	__s32 bs_blksize;
+	__s64 bs_size;
+	compat_xfs_bstime_t bs_atime;
+	compat_xfs_bstime_t bs_mtime;
+	compat_xfs_bstime_t bs_ctime;
+	int64_t bs_blocks;
+	__u32 bs_xflags;
+	__s32 bs_extsize;
+	__s32 bs_extents;
+	__u32 bs_gen;
+	__u16 bs_projid_lo;
+	__u16 bs_forkoff;
+	__u16 bs_projid_hi;
+	unsigned char bs_pad[10];
+	__u32 bs_dmevmask;
+	__u16 bs_dmstate;
+	__u16 bs_aextents;
+};
+
+struct compat_xfs_fsop_bulkreq {
+	compat_uptr_t lastip;
+	__s32 icount;
+	compat_uptr_t ubuffer;
+	compat_uptr_t ocount;
+};
+
+struct compat_xfs_fsop_handlereq {
+	__u32 fd;
+	compat_uptr_t path;
+	__u32 oflags;
+	compat_uptr_t ihandle;
+	__u32 ihandlen;
+	compat_uptr_t ohandle;
+	compat_uptr_t ohandlen;
+};
+
+typedef struct compat_xfs_fsop_handlereq compat_xfs_fsop_handlereq_t;
+
+struct compat_xfs_swapext {
+	int64_t sx_version;
+	int64_t sx_fdtarget;
+	int64_t sx_fdtmp;
+	xfs_off_t sx_offset;
+	xfs_off_t sx_length;
+	char sx_pad[16];
+	struct compat_xfs_bstat sx_stat;
+};
+
+struct compat_xfs_fsop_attrlist_handlereq {
+	struct compat_xfs_fsop_handlereq hreq;
+	struct xfs_attrlist_cursor pos;
+	__u32 flags;
+	__u32 buflen;
+	compat_uptr_t buffer;
+};
+
+typedef struct compat_xfs_fsop_attrlist_handlereq compat_xfs_fsop_attrlist_handlereq_t;
+
+struct compat_xfs_attr_multiop {
+	__u32 am_opcode;
+	__s32 am_error;
+	compat_uptr_t am_attrname;
+	compat_uptr_t am_attrvalue;
+	__u32 am_length;
+	__u32 am_flags;
+};
+
+typedef struct compat_xfs_attr_multiop compat_xfs_attr_multiop_t;
+
+struct compat_xfs_fsop_attrmulti_handlereq {
+	struct compat_xfs_fsop_handlereq hreq;
+	__u32 opcount;
+	compat_uptr_t ops;
+};
+
+typedef struct compat_xfs_fsop_attrmulti_handlereq compat_xfs_fsop_attrmulti_handlereq_t;
+
+enum xchk_type {
+	ST_NONE = 1,
+	ST_PERAG = 2,
+	ST_FS = 3,
+	ST_INODE = 4,
+};
+
+struct xfs_scrub;
+
+struct xchk_meta_ops {
+	int (*setup)(struct xfs_scrub *);
+	int (*scrub)(struct xfs_scrub *);
+	int (*repair)(struct xfs_scrub *);
+	bool (*has)(struct xfs_mount *);
+	enum xchk_type type;
+};
+
+struct xchk_ag {
+	struct xfs_perag *pag;
+	struct xfs_buf *agf_bp;
+	struct xfs_buf *agi_bp;
+	struct xfs_btree_cur *bno_cur;
+	struct xfs_btree_cur *cnt_cur;
+	struct xfs_btree_cur *ino_cur;
+	struct xfs_btree_cur *fino_cur;
+	struct xfs_btree_cur *rmap_cur;
+	struct xfs_btree_cur *refc_cur;
+};
+
+struct xfs_scrub {
+	struct xfs_mount *mp;
+	struct xfs_scrub_metadata *sm;
+	const struct xchk_meta_ops *ops;
+	struct xfs_trans *tp;
+	struct file *file;
+	struct xfs_inode *ip;
+	void *buf;
+	uint ilock_flags;
+	unsigned int flags;
+	unsigned int sick_mask;
+	struct xchk_ag sa;
+};
+
+struct xchk_agfl_info {
+	unsigned int agflcount;
+	unsigned int nr_entries;
+	xfs_agblock_t *entries;
+	struct xfs_buf *agfl_bp;
+	struct xfs_scrub *sc;
+};
+
+struct xchk_btree;
+
+typedef int (*xchk_btree_rec_fn)(struct xchk_btree *, const union xfs_btree_rec *);
+
+struct xchk_btree {
+	struct xfs_scrub *sc;
+	struct xfs_btree_cur *cur;
+	xchk_btree_rec_fn scrub_rec;
+	const struct xfs_owner_info *oinfo;
+	void *private;
+	union xfs_btree_rec lastrec;
+	struct list_head to_check;
+	union xfs_btree_key lastkey[0];
+};
+
+struct trace_event_raw_xchk_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	unsigned int type;
+	xfs_agnumber_t agno;
+	xfs_ino_t inum;
+	unsigned int gen;
+	unsigned int flags;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_op_error {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int type;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int error;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_file_op_error {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int whichfork;
+	unsigned int type;
+	xfs_fileoff_t offset;
+	int error;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_block_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int type;
+	xfs_agnumber_t agno;
+	xfs_agblock_t agbno;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_ino_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	unsigned int type;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_fblock_error_class {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int whichfork;
+	unsigned int type;
+	xfs_fileoff_t offset;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_incomplete {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int type;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_btree_op_error {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int type;
+	xfs_btnum_t btnum;
+	int level;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int ptr;
+	int error;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_ifork_btree_op_error {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int whichfork;
+	unsigned int type;
+	xfs_btnum_t btnum;
+	int level;
+	int ptr;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int error;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_btree_error {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int type;
+	xfs_btnum_t btnum;
+	int level;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int ptr;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_ifork_btree_error {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_ino_t ino;
+	int whichfork;
+	unsigned int type;
+	xfs_btnum_t btnum;
+	int level;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int ptr;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_sbtree_class {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	xfs_btnum_t btnum;
+	xfs_agnumber_t agno;
+	xfs_agblock_t bno;
+	int level;
+	int nlevels;
+	int ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_xref_error {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	int error;
+	void *ret_ip;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_iallocbt_check_cluster {
+	struct trace_entry ent;
+	dev_t dev;
+	xfs_agnumber_t agno;
+	xfs_agino_t startino;
+	xfs_daddr_t map_daddr;
+	short unsigned int map_len;
+	unsigned int chunk_ino;
+	unsigned int nr_inodes;
+	unsigned int cluster_ino;
+	uint16_t cluster_mask;
+	uint16_t holemask;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_fscounters_calc {
+	struct trace_entry ent;
+	dev_t dev;
+	int64_t icount_sb;
+	uint64_t icount_calculated;
+	int64_t ifree_sb;
+	uint64_t ifree_calculated;
+	int64_t fdblocks_sb;
+	uint64_t fdblocks_calculated;
+	uint64_t delalloc;
+	char __data[0];
+};
+
+struct trace_event_raw_xchk_fscounters_within_range {
+	struct trace_entry ent;
+	dev_t dev;
+	uint64_t expected;
+	int64_t curr_value;
+	int64_t old_value;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xchk_class {};
+
+struct trace_event_data_offsets_xchk_op_error {};
+
+struct trace_event_data_offsets_xchk_file_op_error {};
+
+struct trace_event_data_offsets_xchk_block_error_class {};
+
+struct trace_event_data_offsets_xchk_ino_error_class {};
+
+struct trace_event_data_offsets_xchk_fblock_error_class {};
+
+struct trace_event_data_offsets_xchk_incomplete {};
+
+struct trace_event_data_offsets_xchk_btree_op_error {};
+
+struct trace_event_data_offsets_xchk_ifork_btree_op_error {};
+
+struct trace_event_data_offsets_xchk_btree_error {};
+
+struct trace_event_data_offsets_xchk_ifork_btree_error {};
+
+struct trace_event_data_offsets_xchk_sbtree_class {};
+
+struct trace_event_data_offsets_xchk_xref_error {};
+
+struct trace_event_data_offsets_xchk_iallocbt_check_cluster {};
+
+struct trace_event_data_offsets_xchk_fscounters_calc {};
+
+struct trace_event_data_offsets_xchk_fscounters_within_range {};
+
+typedef void (*btf_trace_xchk_start)(void *, struct xfs_inode *, struct xfs_scrub_metadata *, int);
+
+typedef void (*btf_trace_xchk_done)(void *, struct xfs_inode *, struct xfs_scrub_metadata *, int);
+
+typedef void (*btf_trace_xchk_deadlock_retry)(void *, struct xfs_inode *, struct xfs_scrub_metadata *, int);
+
+typedef void (*btf_trace_xrep_attempt)(void *, struct xfs_inode *, struct xfs_scrub_metadata *, int);
+
+typedef void (*btf_trace_xrep_done)(void *, struct xfs_inode *, struct xfs_scrub_metadata *, int);
+
+typedef void (*btf_trace_xchk_op_error)(void *, struct xfs_scrub *, xfs_agnumber_t, xfs_agblock_t, int, void *);
+
+typedef void (*btf_trace_xchk_file_op_error)(void *, struct xfs_scrub *, int, xfs_fileoff_t, int, void *);
+
+typedef void (*btf_trace_xchk_fs_error)(void *, struct xfs_scrub *, xfs_daddr_t, void *);
+
+typedef void (*btf_trace_xchk_block_error)(void *, struct xfs_scrub *, xfs_daddr_t, void *);
+
+typedef void (*btf_trace_xchk_block_preen)(void *, struct xfs_scrub *, xfs_daddr_t, void *);
+
+typedef void (*btf_trace_xchk_ino_error)(void *, struct xfs_scrub *, xfs_ino_t, void *);
+
+typedef void (*btf_trace_xchk_ino_preen)(void *, struct xfs_scrub *, xfs_ino_t, void *);
+
+typedef void (*btf_trace_xchk_ino_warning)(void *, struct xfs_scrub *, xfs_ino_t, void *);
+
+typedef void (*btf_trace_xchk_fblock_error)(void *, struct xfs_scrub *, int, xfs_fileoff_t, void *);
+
+typedef void (*btf_trace_xchk_fblock_warning)(void *, struct xfs_scrub *, int, xfs_fileoff_t, void *);
+
+typedef void (*btf_trace_xchk_incomplete)(void *, struct xfs_scrub *, void *);
+
+typedef void (*btf_trace_xchk_btree_op_error)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int, int, void *);
+
+typedef void (*btf_trace_xchk_ifork_btree_op_error)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int, int, void *);
+
+typedef void (*btf_trace_xchk_btree_error)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int, void *);
+
+typedef void (*btf_trace_xchk_ifork_btree_error)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int, void *);
+
+typedef void (*btf_trace_xchk_btree_rec)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int);
+
+typedef void (*btf_trace_xchk_btree_key)(void *, struct xfs_scrub *, struct xfs_btree_cur *, int);
+
+typedef void (*btf_trace_xchk_xref_error)(void *, struct xfs_scrub *, int, void *);
+
+typedef void (*btf_trace_xchk_iallocbt_check_cluster)(void *, struct xfs_mount *, xfs_agnumber_t, xfs_agino_t, xfs_daddr_t, short unsigned int, unsigned int, unsigned int, uint16_t, uint16_t, unsigned int);
+
+typedef void (*btf_trace_xchk_fscounters_calc)(void *, struct xfs_mount *, uint64_t, uint64_t, uint64_t, uint64_t);
+
+typedef void (*btf_trace_xchk_fscounters_within_range)(void *, struct xfs_mount *, uint64_t, int64_t, int64_t);
+
+struct xchk_bmap_info {
+	struct xfs_scrub *sc;
+	struct xfs_iext_cursor icur;
+	xfs_fileoff_t lastoff;
+	bool is_rt;
+	bool is_shared;
+	bool was_loaded;
+	int whichfork;
+};
+
+struct xchk_bmap_check_rmap_info {
+	struct xfs_scrub *sc;
+	int whichfork;
+	struct xfs_iext_cursor icur;
+};
+
+struct check_owner {
+	struct list_head list;
+	xfs_daddr_t daddr;
+	int level;
+};
+
+struct xchk_da_btree {
+	struct xfs_da_args dargs;
+	xfs_dahash_t hashes[5];
+	int maxrecs[5];
+	struct xfs_da_state *state;
+	struct xfs_scrub *sc;
+	void *private;
+	xfs_dablk_t lowest;
+	xfs_dablk_t highest;
+	int tree_level;
+};
+
+typedef int (*xchk_da_btree_rec_fn)(struct xchk_da_btree *, int);
+
+struct xchk_xattr_buf {
+	size_t sz;
+	uint8_t buf[0];
+};
+
+struct xchk_xattr {
+	struct xfs_attr_list_context context;
+	struct xfs_scrub *sc;
+};
+
+struct xchk_dir_ctx {
+	struct dir_context dir_iter;
+	struct xfs_scrub *sc;
+};
+
+struct xchk_rmap_ownedby_info {
+	const struct xfs_owner_info *oinfo;
+	xfs_filblks_t *blocks;
+};
+
+struct xchk_iallocbt {
+	long long unsigned int inodes;
+	xfs_agino_t next_startino;
+	xfs_agino_t next_cluster_ino;
+};
+
+struct xchk_fscounters {
+	struct xfs_scrub *sc;
+	uint64_t icount;
+	uint64_t ifree;
+	uint64_t fdblocks;
+	uint64_t frextents;
+	long long unsigned int icount_min;
+	long long unsigned int icount_max;
+};
+
+enum xchk_health_group {
+	XHG_FS = 1,
+	XHG_RT = 2,
+	XHG_AG = 3,
+	XHG_INO = 4,
+};
+
+struct xchk_health_map {
+	enum xchk_health_group group;
+	unsigned int sick_mask;
+};
+
+struct xchk_parent_ctx {
+	struct dir_context dc;
+	struct xfs_scrub *sc;
+	xfs_ino_t ino;
+	xfs_nlink_t nlink;
+	bool cancelled;
+};
+
+struct xchk_refcnt_frag {
+	struct list_head list;
+	struct xfs_rmap_irec rm;
+};
+
+struct xchk_refcnt_check {
+	struct xfs_scrub *sc;
+	struct list_head fragments;
+	xfs_agblock_t bno;
+	xfs_extlen_t len;
+	xfs_nlink_t refcount;
+	xfs_nlink_t seen;
+};
+
+struct xchk_quota_info {
+	struct xfs_scrub *sc;
+	xfs_dqid_t last_id;
+};
+
+enum p9_open_mode_t {
+	P9_OREAD = 0,
+	P9_OWRITE = 1,
+	P9_ORDWR = 2,
+	P9_OEXEC = 3,
+	P9_OTRUNC = 16,
+	P9_OREXEC = 32,
+	P9_ORCLOSE = 64,
+	P9_OAPPEND = 128,
+	P9_OEXCL = 4096,
+};
+
+enum p9_perm_t {
+	P9_DMDIR = 2147483648,
+	P9_DMAPPEND = 1073741824,
+	P9_DMEXCL = 536870912,
+	P9_DMMOUNT = 268435456,
+	P9_DMAUTH = 134217728,
+	P9_DMTMP = 67108864,
+	P9_DMSYMLINK = 33554432,
+	P9_DMLINK = 16777216,
+	P9_DMDEVICE = 8388608,
+	P9_DMNAMEDPIPE = 2097152,
+	P9_DMSOCKET = 1048576,
+	P9_DMSETUID = 524288,
+	P9_DMSETGID = 262144,
+	P9_DMSETVTX = 65536,
+};
+
+struct p9_qid {
+	u8 type;
+	u32 version;
+	u64 path;
+};
+
+struct p9_wstat {
+	u16 size;
+	u16 type;
+	u32 dev;
+	struct p9_qid qid;
+	u32 mode;
+	u32 atime;
+	u32 mtime;
+	u64 length;
+	const char *name;
+	const char *uid;
+	const char *gid;
+	const char *muid;
+	char *extension;
+	kuid_t n_uid;
+	kgid_t n_gid;
+	kuid_t n_muid;
+};
+
+enum p9_trans_status {
+	Connected = 0,
+	BeginDisconnect = 1,
+	Disconnected = 2,
+	Hung = 3,
+};
+
+struct p9_trans_module;
+
+struct p9_client {
+	spinlock_t lock;
+	unsigned int msize;
+	unsigned char proto_version;
+	struct p9_trans_module *trans_mod;
+	enum p9_trans_status status;
+	void *trans;
+	struct kmem_cache *fcall_cache;
+	union {
+		struct {
+			int rfd;
+			int wfd;
+		} fd;
+		struct {
+			u16 port;
+			bool privport;
+		} tcp;
+	} trans_opts;
+	struct idr fids;
+	struct idr reqs;
+	char name[65];
+};
+
+struct p9_fid {
+	struct p9_client *clnt;
+	u32 fid;
+	refcount_t count;
+	int mode;
+	struct p9_qid qid;
+	u32 iounit;
+	kuid_t uid;
+	void *rdir;
+	struct hlist_node dlist;
+	struct hlist_node ilist;
+};
+
+enum p9_session_flags {
+	V9FS_PROTO_2000U = 1,
+	V9FS_PROTO_2000L = 2,
+	V9FS_ACCESS_SINGLE = 4,
+	V9FS_ACCESS_USER = 8,
+	V9FS_ACCESS_CLIENT = 16,
+	V9FS_POSIX_ACL = 32,
+};
+
+enum p9_cache_modes {
+	CACHE_NONE = 0,
+	CACHE_MMAP = 1,
+	CACHE_LOOSE = 2,
+	CACHE_FSCACHE = 3,
+	nr__p9_cache_modes = 4,
+};
+
+struct v9fs_session_info {
+	unsigned char flags;
+	unsigned char nodev;
+	short unsigned int debug;
+	unsigned int afid;
+	unsigned int cache;
+	char *uname;
+	char *aname;
+	unsigned int maxdata;
+	kuid_t dfltuid;
+	kgid_t dfltgid;
+	kuid_t uid;
+	struct p9_client *clnt;
+	struct list_head slist;
+	struct rw_semaphore rename_sem;
+	long int session_lock_timeout;
+};
+
+struct v9fs_inode {
+	struct netfs_inode netfs;
+	struct p9_qid qid;
+	unsigned int cache_validity;
+	struct p9_fid *writeback_fid;
+	struct mutex v_mutex;
+};
+
+enum fscache_cookie_state {
+	FSCACHE_COOKIE_STATE_QUIESCENT = 0,
+	FSCACHE_COOKIE_STATE_LOOKING_UP = 1,
+	FSCACHE_COOKIE_STATE_CREATING = 2,
+	FSCACHE_COOKIE_STATE_ACTIVE = 3,
+	FSCACHE_COOKIE_STATE_INVALIDATING = 4,
+	FSCACHE_COOKIE_STATE_FAILED = 5,
+	FSCACHE_COOKIE_STATE_LRU_DISCARDING = 6,
+	FSCACHE_COOKIE_STATE_WITHDRAWING = 7,
+	FSCACHE_COOKIE_STATE_RELINQUISHING = 8,
+	FSCACHE_COOKIE_STATE_DROPPED = 9,
+};
+
+struct fscache_cache;
+
+struct fscache_volume {
+	refcount_t ref;
+	atomic_t n_cookies;
+	atomic_t n_accesses;
+	unsigned int debug_id;
+	unsigned int key_hash;
+	u8 *key;
+	struct list_head proc_link;
+	struct hlist_bl_node hash_link;
+	struct work_struct work;
+	struct fscache_cache *cache;
+	void *cache_priv;
+	spinlock_t lock;
+	long unsigned int flags;
+	u8 coherency_len;
+	u8 coherency[0];
+};
+
+struct fscache_cookie {
+	refcount_t ref;
+	atomic_t n_active;
+	atomic_t n_accesses;
+	unsigned int debug_id;
+	unsigned int inval_counter;
+	spinlock_t lock;
+	struct fscache_volume *volume;
+	void *cache_priv;
+	struct hlist_bl_node hash_link;
+	struct list_head proc_link;
+	struct list_head commit_link;
+	struct work_struct work;
+	loff_t object_size;
+	long unsigned int unused_at;
+	long unsigned int flags;
+	enum fscache_cookie_state state;
+	u8 advice;
+	u8 key_len;
+	u8 aux_len;
+	u32 key_hash;
+	union {
+		void *key;
+		u8 inline_key[16];
+	};
+	union {
+		void *aux;
+		u8 inline_aux[8];
+	};
+};
+
+struct p9_stat_dotl {
+	u64 st_result_mask;
+	struct p9_qid qid;
+	u32 st_mode;
+	kuid_t st_uid;
+	kgid_t st_gid;
+	u64 st_nlink;
+	u64 st_rdev;
+	u64 st_size;
+	u64 st_blksize;
+	u64 st_blocks;
+	u64 st_atime_sec;
+	u64 st_atime_nsec;
+	u64 st_mtime_sec;
+	u64 st_mtime_nsec;
+	u64 st_ctime_sec;
+	u64 st_ctime_nsec;
+	u64 st_btime_sec;
+	u64 st_btime_nsec;
+	u64 st_gen;
+	u64 st_data_version;
+};
+
+struct p9_iattr_dotl {
+	u32 valid;
+	u32 mode;
+	kuid_t uid;
+	kgid_t gid;
+	u64 size;
+	u64 atime_sec;
+	u64 atime_nsec;
+	u64 mtime_sec;
+	u64 mtime_nsec;
+};
+
+struct dotl_openflag_map {
+	int open_flag;
+	int dotl_flag;
+};
+
+struct dotl_iattr_map {
+	int iattr_valid;
+	int p9_iattr_valid;
+};
+
+struct p9_rstatfs {
+	u32 type;
+	u32 bsize;
+	u64 blocks;
+	u64 bfree;
+	u64 bavail;
+	u64 files;
+	u64 ffree;
+	u64 fsid;
+	u32 namelen;
+};
+
+struct p9_flock {
+	u8 type;
+	u32 flags;
+	u64 start;
+	u64 length;
+	u32 proc_id;
+	char *client_id;
+};
+
+struct p9_getlock {
+	u8 type;
+	u64 start;
+	u64 length;
+	u32 proc_id;
+	char *client_id;
+};
+
+struct p9_dirent {
+	struct p9_qid qid;
+	u64 d_off;
+	unsigned char d_type;
+	char d_name[256];
+};
+
+struct p9_rdir {
+	int head;
+	int tail;
+	uint8_t buf[0];
+};
+
+struct p9_fcall {
+	u32 size;
+	u8 id;
+	u16 tag;
+	size_t offset;
+	size_t capacity;
+	struct kmem_cache *cache;
+	u8 *sdata;
+	bool zc;
+};
+
+struct p9_req_t {
+	int status;
+	int t_err;
+	refcount_t refcount;
+	wait_queue_head_t wq;
+	struct p9_fcall tc;
+	struct p9_fcall rc;
+	struct list_head req_list;
+};
+
+struct p9_trans_module {
+	struct list_head list;
+	char *name;
+	int maxsize;
+	bool pooled_rbuffers;
+	int def;
+	struct module *owner;
+	int (*create)(struct p9_client *, const char *, char *);
+	void (*close)(struct p9_client *);
+	int (*request)(struct p9_client *, struct p9_req_t *);
+	int (*cancel)(struct p9_client *, struct p9_req_t *);
+	int (*cancelled)(struct p9_client *, struct p9_req_t *);
+	int (*zc_request)(struct p9_client *, struct p9_req_t *, struct iov_iter *, struct iov_iter *, int, int, int);
+	int (*show_options)(struct seq_file *, struct p9_client *);
+};
+
+enum {
+	Opt_debug___3 = 0,
+	Opt_dfltuid = 1,
+	Opt_dfltgid = 2,
+	Opt_afid = 3,
+	Opt_uname = 4,
+	Opt_remotename = 5,
+	Opt_cache = 6,
+	Opt_cachetag = 7,
+	Opt_nodevmap = 8,
+	Opt_cache_loose = 9,
+	Opt_fscache___2 = 10,
+	Opt_mmap = 11,
+	Opt_access = 12,
+	Opt_posixacl = 13,
+	Opt_locktimeout = 14,
+	Opt_err___6 = 15,
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	refcount_t active_users;
+	struct completion active_users_drained;
+};
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+enum {
+	Opt_uid___7 = 0,
+	Opt_gid___8 = 1,
+	Opt_mode___6 = 2,
+	Opt_err___7 = 3,
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct tracefs_dir_ops {
+	int (*mkdir)(const char *);
+	int (*rmdir)(const char *);
+};
+
+struct tracefs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct tracefs_fs_info {
+	struct tracefs_mount_opts mount_opts;
+};
+
+struct debugfs_blob_wrapper {
+	void *data;
+	long unsigned int size;
+};
+
+struct debugfs_reg32 {
+	char *name;
+	long unsigned int offset;
+};
+
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
+	struct device *dev;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+struct btrfs_scrub_progress {
+	__u64 data_extents_scrubbed;
+	__u64 tree_extents_scrubbed;
+	__u64 data_bytes_scrubbed;
+	__u64 tree_bytes_scrubbed;
+	__u64 read_errors;
+	__u64 csum_errors;
+	__u64 verify_errors;
+	__u64 no_csum;
+	__u64 csum_discards;
+	__u64 super_errors;
+	__u64 malloc_errors;
+	__u64 uncorrectable_errors;
+	__u64 corrected_errors;
+	__u64 last_physical;
+	__u64 unverified_errors;
+};
+
+struct btrfs_disk_key {
+	__le64 objectid;
+	__u8 type;
+	__le64 offset;
+} __attribute__((packed));
+
+struct btrfs_key {
+	__u64 objectid;
+	__u8 type;
+	__u64 offset;
+} __attribute__((packed));
+
+struct btrfs_header {
+	__u8 csum[32];
+	__u8 fsid[16];
+	__le64 bytenr;
+	__le64 flags;
+	__u8 chunk_tree_uuid[16];
+	__le64 generation;
+	__le64 owner;
+	__le32 nritems;
+	__u8 level;
+} __attribute__((packed));
+
+struct btrfs_root_backup {
+	__le64 tree_root;
+	__le64 tree_root_gen;
+	__le64 chunk_root;
+	__le64 chunk_root_gen;
+	__le64 extent_root;
+	__le64 extent_root_gen;
+	__le64 fs_root;
+	__le64 fs_root_gen;
+	__le64 dev_root;
+	__le64 dev_root_gen;
+	__le64 csum_root;
+	__le64 csum_root_gen;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 num_devices;
+	__le64 unused_64[4];
+	__u8 tree_root_level;
+	__u8 chunk_root_level;
+	__u8 extent_root_level;
+	__u8 fs_root_level;
+	__u8 dev_root_level;
+	__u8 csum_root_level;
+	__u8 unused_8[10];
+};
+
+struct btrfs_item {
+	struct btrfs_disk_key key;
+	__le32 offset;
+	__le32 size;
+} __attribute__((packed));
+
+struct btrfs_key_ptr {
+	struct btrfs_disk_key key;
+	__le64 blockptr;
+	__le64 generation;
+} __attribute__((packed));
+
+struct btrfs_dev_item {
+	__le64 devid;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le32 io_align;
+	__le32 io_width;
+	__le32 sector_size;
+	__le64 type;
+	__le64 generation;
+	__le64 start_offset;
+	__le32 dev_group;
+	__u8 seek_speed;
+	__u8 bandwidth;
+	__u8 uuid[16];
+	__u8 fsid[16];
+} __attribute__((packed));
+
+struct btrfs_stripe {
+	__le64 devid;
+	__le64 offset;
+	__u8 dev_uuid[16];
+};
+
+struct btrfs_chunk {
+	__le64 length;
+	__le64 owner;
+	__le64 stripe_len;
+	__le64 type;
+	__le32 io_align;
+	__le32 io_width;
+	__le32 sector_size;
+	__le16 num_stripes;
+	__le16 sub_stripes;
+	struct btrfs_stripe stripe;
+};
+
+struct btrfs_super_block {
+	__u8 csum[32];
+	__u8 fsid[16];
+	__le64 bytenr;
+	__le64 flags;
+	__le64 magic;
+	__le64 generation;
+	__le64 root;
+	__le64 chunk_root;
+	__le64 log_root;
+	__le64 __unused_log_root_transid;
+	__le64 total_bytes;
+	__le64 bytes_used;
+	__le64 root_dir_objectid;
+	__le64 num_devices;
+	__le32 sectorsize;
+	__le32 nodesize;
+	__le32 __unused_leafsize;
+	__le32 stripesize;
+	__le32 sys_chunk_array_size;
+	__le64 chunk_root_generation;
+	__le64 compat_flags;
+	__le64 compat_ro_flags;
+	__le64 incompat_flags;
+	__le16 csum_type;
+	__u8 root_level;
+	__u8 chunk_root_level;
+	__u8 log_root_level;
+	struct btrfs_dev_item dev_item;
+	char label[256];
+	__le64 cache_generation;
+	__le64 uuid_tree_generation;
+	__u8 metadata_uuid[16];
+	__u64 nr_global_roots;
+	__le64 reserved[27];
+	__u8 sys_chunk_array[2048];
+	struct btrfs_root_backup super_roots[4];
+	__u8 padding[565];
+} __attribute__((packed));
+
+struct btrfs_extent_item {
+	__le64 refs;
+	__le64 generation;
+	__le64 flags;
+};
+
+struct btrfs_tree_block_info {
+	struct btrfs_disk_key key;
+	__u8 level;
+} __attribute__((packed));
+
+struct btrfs_extent_data_ref {
+	__le64 root;
+	__le64 objectid;
+	__le64 offset;
+	__le32 count;
+} __attribute__((packed));
+
+struct btrfs_shared_data_ref {
+	__le32 count;
+};
+
+struct btrfs_extent_inline_ref {
+	__u8 type;
+	__le64 offset;
+} __attribute__((packed));
+
+struct btrfs_dev_extent {
+	__le64 chunk_tree;
+	__le64 chunk_objectid;
+	__le64 chunk_offset;
+	__le64 length;
+	__u8 chunk_tree_uuid[16];
+};
+
+struct btrfs_timespec {
+	__le64 sec;
+	__le32 nsec;
+} __attribute__((packed));
+
+struct btrfs_inode_item {
+	__le64 generation;
+	__le64 transid;
+	__le64 size;
+	__le64 nbytes;
+	__le64 block_group;
+	__le32 nlink;
+	__le32 uid;
+	__le32 gid;
+	__le32 mode;
+	__le64 rdev;
+	__le64 flags;
+	__le64 sequence;
+	__le64 reserved[4];
+	struct btrfs_timespec atime;
+	struct btrfs_timespec ctime;
+	struct btrfs_timespec mtime;
+	struct btrfs_timespec otime;
+} __attribute__((packed));
+
+struct btrfs_dir_item {
+	struct btrfs_disk_key location;
+	__le64 transid;
+	__le16 data_len;
+	__le16 name_len;
+	__u8 type;
+} __attribute__((packed));
+
+struct btrfs_root_item {
+	struct btrfs_inode_item inode;
+	__le64 generation;
+	__le64 root_dirid;
+	__le64 bytenr;
+	__le64 byte_limit;
+	__le64 bytes_used;
+	__le64 last_snapshot;
+	__le64 flags;
+	__le32 refs;
+	struct btrfs_disk_key drop_progress;
+	__u8 drop_level;
+	__u8 level;
+	__le64 generation_v2;
+	__u8 uuid[16];
+	__u8 parent_uuid[16];
+	__u8 received_uuid[16];
+	__le64 ctransid;
+	__le64 otransid;
+	__le64 stransid;
+	__le64 rtransid;
+	struct btrfs_timespec ctime;
+	struct btrfs_timespec otime;
+	struct btrfs_timespec stime;
+	struct btrfs_timespec rtime;
+	__le64 reserved[8];
+} __attribute__((packed));
+
+enum {
+	BTRFS_FILE_EXTENT_INLINE = 0,
+	BTRFS_FILE_EXTENT_REG = 1,
+	BTRFS_FILE_EXTENT_PREALLOC = 2,
+	BTRFS_NR_FILE_EXTENT_TYPES = 3,
+};
+
+struct btrfs_file_extent_item {
+	__le64 generation;
+	__le64 ram_bytes;
+	__u8 compression;
+	__u8 encryption;
+	__le16 other_encoding;
+	__u8 type;
+	__le64 disk_bytenr;
+	__le64 disk_num_bytes;
+	__le64 offset;
+	__le64 num_bytes;
+} __attribute__((packed));
+
+struct btrfs_block_group_item {
+	__le64 used;
+	__le64 chunk_objectid;
+	__le64 flags;
+};
+
+struct btrfs_fs_info;
+
+struct btrfs_inode;
+
+struct extent_io_tree {
+	struct rb_root state;
+	struct btrfs_fs_info *fs_info;
+	struct btrfs_inode *inode;
+	u8 owner;
+	spinlock_t lock;
+};
+
+struct extent_map_tree {
+	struct rb_root_cached map;
+	struct list_head modified_extents;
+	rwlock_t lock;
+};
+
+enum btrfs_rsv_type {
+	BTRFS_BLOCK_RSV_GLOBAL = 0,
+	BTRFS_BLOCK_RSV_DELALLOC = 1,
+	BTRFS_BLOCK_RSV_TRANS = 2,
+	BTRFS_BLOCK_RSV_CHUNK = 3,
+	BTRFS_BLOCK_RSV_DELOPS = 4,
+	BTRFS_BLOCK_RSV_DELREFS = 5,
+	BTRFS_BLOCK_RSV_EMPTY = 6,
+	BTRFS_BLOCK_RSV_TEMP = 7,
+};
+
+struct btrfs_space_info;
+
+struct btrfs_block_rsv {
+	u64 size;
+	u64 reserved;
+	struct btrfs_space_info *space_info;
+	spinlock_t lock;
+	bool full;
+	bool failfast;
+	enum btrfs_rsv_type type: 8;
+	u64 qgroup_rsv_size;
+	u64 qgroup_rsv_reserved;
+};
+
+struct btrfs_block_group;
+
+struct btrfs_free_cluster {
+	spinlock_t lock;
+	spinlock_t refill_lock;
+	struct rb_root root;
+	u64 max_size;
+	u64 window_start;
+	bool fragmented;
+	struct btrfs_block_group *block_group;
+	struct list_head block_group_list;
+};
+
+struct btrfs_discard_ctl {
+	struct workqueue_struct *discard_workers;
+	struct delayed_work work;
+	spinlock_t lock;
+	struct btrfs_block_group *block_group;
+	struct list_head discard_list[3];
+	u64 prev_discard;
+	u64 prev_discard_time;
+	atomic_t discardable_extents;
+	atomic64_t discardable_bytes;
+	u64 max_discard_size;
+	u64 delay_ms;
+	u32 iops_limit;
+	u32 kbps_limit;
+	u64 discard_extent_bytes;
+	u64 discard_bitmap_bytes;
+	atomic64_t discard_bytes_saved;
+};
+
+struct btrfs_work;
+
+typedef void (*btrfs_func_t)(struct btrfs_work *);
+
+struct btrfs_workqueue;
+
+struct btrfs_work {
+	btrfs_func_t func;
+	btrfs_func_t ordered_func;
+	btrfs_func_t ordered_free;
+	struct work_struct normal_work;
+	struct list_head ordered_list;
+	struct btrfs_workqueue *wq;
+	long unsigned int flags;
+};
+
+struct btrfs_device;
+
+struct btrfs_dev_replace {
+	u64 replace_state;
+	time64_t time_started;
+	time64_t time_stopped;
+	atomic64_t num_write_errors;
+	atomic64_t num_uncorrectable_read_errors;
+	u64 cursor_left;
+	u64 committed_cursor_left;
+	u64 cursor_left_last_write_of_item;
+	u64 cursor_right;
+	u64 cont_reading_from_srcdev_mode;
+	int is_valid;
+	int item_needs_writeback;
+	struct btrfs_device *srcdev;
+	struct btrfs_device *tgtdev;
+	struct mutex lock_finishing_cancel_unmount;
+	struct rw_semaphore rwsem;
+	struct btrfs_scrub_progress scrub_progress;
+	struct percpu_counter bio_counter;
+	wait_queue_head_t replace_wait;
+};
+
+enum btrfs_exclusive_operation {
+	BTRFS_EXCLOP_NONE = 0,
+	BTRFS_EXCLOP_BALANCE_PAUSED = 1,
+	BTRFS_EXCLOP_BALANCE = 2,
+	BTRFS_EXCLOP_DEV_ADD = 3,
+	BTRFS_EXCLOP_DEV_REMOVE = 4,
+	BTRFS_EXCLOP_DEV_REPLACE = 5,
+	BTRFS_EXCLOP_RESIZE = 6,
+	BTRFS_EXCLOP_SWAP_ACTIVATE = 7,
+};
+
+struct btrfs_commit_stats {
+	u64 commit_count;
+	u64 max_commit_dur;
+	u64 last_commit_dur;
+	u64 total_commit_dur;
+};
+
+struct btrfs_root;
+
+struct btrfs_transaction;
+
+struct btrfs_stripe_hash_table;
+
+struct btrfs_fs_devices;
+
+struct reloc_control;
+
+struct btrfs_balance_control;
+
+struct btrfs_subpage_info;
+
+struct ulist;
+
+struct btrfs_delayed_root;
+
+struct btrfs_fs_info {
+	u8 chunk_tree_uuid[16];
+	long unsigned int flags;
+	struct btrfs_root *tree_root;
+	struct btrfs_root *chunk_root;
+	struct btrfs_root *dev_root;
+	struct btrfs_root *fs_root;
+	struct btrfs_root *quota_root;
+	struct btrfs_root *uuid_root;
+	struct btrfs_root *data_reloc_root;
+	struct btrfs_root *block_group_root;
+	struct btrfs_root *log_root_tree;
+	rwlock_t global_root_lock;
+	struct rb_root global_root_tree;
+	spinlock_t fs_roots_radix_lock;
+	struct xarray fs_roots_radix;
+	rwlock_t block_group_cache_lock;
+	struct rb_root_cached block_group_cache_tree;
+	atomic64_t free_chunk_space;
+	struct extent_io_tree excluded_extents;
+	struct extent_map_tree mapping_tree;
+	struct btrfs_block_rsv global_block_rsv;
+	struct btrfs_block_rsv trans_block_rsv;
+	struct btrfs_block_rsv chunk_block_rsv;
+	struct btrfs_block_rsv delayed_block_rsv;
+	struct btrfs_block_rsv delayed_refs_rsv;
+	struct btrfs_block_rsv empty_block_rsv;
+	u64 generation;
+	u64 last_trans_committed;
+	u64 last_reloc_trans;
+	u64 avg_delayed_ref_runtime;
+	u64 last_trans_log_full_commit;
+	long unsigned int mount_opt;
+	long unsigned int compress_type: 4;
+	unsigned int compress_level;
+	u32 commit_interval;
+	u64 max_inline;
+	struct btrfs_transaction *running_transaction;
+	wait_queue_head_t transaction_throttle;
+	wait_queue_head_t transaction_wait;
+	wait_queue_head_t transaction_blocked_wait;
+	wait_queue_head_t async_submit_wait;
+	spinlock_t super_lock;
+	struct btrfs_super_block *super_copy;
+	struct btrfs_super_block *super_for_commit;
+	struct super_block *sb;
+	struct inode *btree_inode;
+	struct mutex tree_log_mutex;
+	struct mutex transaction_kthread_mutex;
+	struct mutex cleaner_mutex;
+	struct mutex chunk_mutex;
+	struct mutex ro_block_group_mutex;
+	struct btrfs_stripe_hash_table *stripe_hash_table;
+	struct mutex ordered_operations_mutex;
+	struct rw_semaphore commit_root_sem;
+	struct rw_semaphore cleanup_work_sem;
+	struct rw_semaphore subvol_sem;
+	spinlock_t trans_lock;
+	struct mutex reloc_mutex;
+	struct list_head trans_list;
+	struct list_head dead_roots;
+	struct list_head caching_block_groups;
+	spinlock_t delayed_iput_lock;
+	struct list_head delayed_iputs;
+	atomic_t nr_delayed_iputs;
+	wait_queue_head_t delayed_iputs_wait;
+	atomic64_t tree_mod_seq;
+	rwlock_t tree_mod_log_lock;
+	struct rb_root tree_mod_log;
+	struct list_head tree_mod_seq_list;
+	atomic_t async_delalloc_pages;
+	spinlock_t ordered_root_lock;
+	struct list_head ordered_roots;
+	struct mutex delalloc_root_mutex;
+	spinlock_t delalloc_root_lock;
+	struct list_head delalloc_roots;
+	struct btrfs_workqueue *workers;
+	struct btrfs_workqueue *hipri_workers;
+	struct btrfs_workqueue *delalloc_workers;
+	struct btrfs_workqueue *flush_workers;
+	struct workqueue_struct *endio_workers;
+	struct workqueue_struct *endio_meta_workers;
+	struct workqueue_struct *rmw_workers;
+	struct workqueue_struct *compressed_write_workers;
+	struct btrfs_workqueue *endio_write_workers;
+	struct btrfs_workqueue *endio_freespace_worker;
+	struct btrfs_workqueue *caching_workers;
+	struct btrfs_workqueue *fixup_workers;
+	struct btrfs_workqueue *delayed_workers;
+	struct task_struct *transaction_kthread;
+	struct task_struct *cleaner_kthread;
+	u32 thread_pool_size;
+	struct kobject *space_info_kobj;
+	struct kobject *qgroups_kobj;
+	struct kobject *discard_kobj;
+	struct percpu_counter dirty_metadata_bytes;
+	struct percpu_counter delalloc_bytes;
+	struct percpu_counter ordered_bytes;
+	s32 dirty_metadata_batch;
+	s32 delalloc_batch;
+	struct list_head dirty_cowonly_roots;
+	struct btrfs_fs_devices *fs_devices;
+	struct list_head space_info;
+	struct btrfs_space_info *data_sinfo;
+	struct reloc_control *reloc_ctl;
+	struct btrfs_free_cluster data_alloc_cluster;
+	struct btrfs_free_cluster meta_alloc_cluster;
+	spinlock_t defrag_inodes_lock;
+	struct rb_root defrag_inodes;
+	atomic_t defrag_running;
+	seqlock_t profiles_lock;
+	u64 avail_data_alloc_bits;
+	u64 avail_metadata_alloc_bits;
+	u64 avail_system_alloc_bits;
+	spinlock_t balance_lock;
+	struct mutex balance_mutex;
+	atomic_t balance_pause_req;
+	atomic_t balance_cancel_req;
+	struct btrfs_balance_control *balance_ctl;
+	wait_queue_head_t balance_wait_q;
+	atomic_t reloc_cancel_req;
+	u32 data_chunk_allocations;
+	u32 metadata_ratio;
+	void *bdev_holder;
+	struct mutex scrub_lock;
+	atomic_t scrubs_running;
+	atomic_t scrub_pause_req;
+	atomic_t scrubs_paused;
+	atomic_t scrub_cancel_req;
+	wait_queue_head_t scrub_pause_wait;
+	refcount_t scrub_workers_refcnt;
+	struct workqueue_struct *scrub_workers;
+	struct workqueue_struct *scrub_wr_completion_workers;
+	struct workqueue_struct *scrub_parity_workers;
+	struct btrfs_subpage_info *subpage_info;
+	struct btrfs_discard_ctl discard_ctl;
+	u64 qgroup_flags;
+	struct rb_root qgroup_tree;
+	spinlock_t qgroup_lock;
+	struct ulist *qgroup_ulist;
+	struct mutex qgroup_ioctl_lock;
+	struct list_head dirty_qgroups;
+	u64 qgroup_seq;
+	struct mutex qgroup_rescan_lock;
+	struct btrfs_key qgroup_rescan_progress;
+	struct btrfs_workqueue *qgroup_rescan_workers;
+	struct completion qgroup_rescan_completion;
+	struct btrfs_work qgroup_rescan_work;
+	bool qgroup_rescan_running;
+	u8 qgroup_drop_subtree_thres;
+	long unsigned int fs_state;
+	struct btrfs_delayed_root *delayed_root;
+	spinlock_t buffer_lock;
+	struct xarray buffer_radix;
+	int backup_root_index;
+	struct btrfs_dev_replace dev_replace;
+	struct semaphore uuid_tree_rescan_sem;
+	struct work_struct async_reclaim_work;
+	struct work_struct async_data_reclaim_work;
+	struct work_struct preempt_reclaim_work;
+	struct work_struct reclaim_bgs_work;
+	struct list_head reclaim_bgs;
+	int bg_reclaim_threshold;
+	spinlock_t unused_bgs_lock;
+	struct list_head unused_bgs;
+	struct mutex unused_bg_unpin_mutex;
+	struct mutex reclaim_bgs_lock;
+	u32 nodesize;
+	u32 sectorsize;
+	u32 sectorsize_bits;
+	u32 csum_size;
+	u32 csums_per_leaf;
+	u32 stripesize;
+	u64 max_extent_size;
+	spinlock_t swapfile_pins_lock;
+	struct rb_root swapfile_pins;
+	struct crypto_shash *csum_shash;
+	enum btrfs_exclusive_operation exclusive_operation;
+	u64 zone_size;
+	u64 max_zone_append_size;
+	struct mutex zoned_meta_io_lock;
+	spinlock_t treelog_bg_lock;
+	u64 treelog_bg;
+	spinlock_t relocation_bg_lock;
+	u64 data_reloc_bg;
+	struct mutex zoned_data_reloc_io_lock;
+	u64 nr_global_roots;
+	spinlock_t zone_active_bgs_lock;
+	struct list_head zone_active_bgs;
+	struct btrfs_commit_stats commit_stats;
+	u64 last_root_drop_gen;
+	struct lockdep_map btrfs_trans_num_writers_map;
+	struct lockdep_map btrfs_trans_num_extwriters_map;
+	struct lockdep_map btrfs_state_change_map[4];
+	struct lockdep_map btrfs_trans_pending_ordered_map;
+	struct lockdep_map btrfs_ordered_extent_map;
+};
+
+struct ulist {
+	long unsigned int nnodes;
+	struct list_head nodes;
+	struct rb_root root;
+};
+
+enum {
+	EXTENT_BUFFER_UPTODATE = 0,
+	EXTENT_BUFFER_DIRTY = 1,
+	EXTENT_BUFFER_CORRUPT = 2,
+	EXTENT_BUFFER_READAHEAD = 3,
+	EXTENT_BUFFER_TREE_REF = 4,
+	EXTENT_BUFFER_STALE = 5,
+	EXTENT_BUFFER_WRITEBACK = 6,
+	EXTENT_BUFFER_READ_ERR = 7,
+	EXTENT_BUFFER_UNMAPPED = 8,
+	EXTENT_BUFFER_IN_TREE = 9,
+	EXTENT_BUFFER_WRITE_ERR = 10,
+	EXTENT_BUFFER_NO_CHECK = 11,
+};
+
+struct extent_buffer {
+	u64 start;
+	long unsigned int len;
+	long unsigned int bflags;
+	struct btrfs_fs_info *fs_info;
+	spinlock_t refs_lock;
+	atomic_t refs;
+	atomic_t io_pages;
+	int read_mirror;
+	struct callback_head callback_head;
+	pid_t lock_owner;
+	s8 log_index;
+	struct rw_semaphore lock;
+	struct page *pages[16];
+	struct list_head release_list;
+};
+
+enum btrfs_lock_nesting {
+	BTRFS_NESTING_NORMAL = 0,
+	BTRFS_NESTING_COW = 1,
+	BTRFS_NESTING_LEFT = 2,
+	BTRFS_NESTING_RIGHT = 3,
+	BTRFS_NESTING_LEFT_COW = 4,
+	BTRFS_NESTING_RIGHT_COW = 5,
+	BTRFS_NESTING_SPLIT = 6,
+	BTRFS_NESTING_NEW_ROOT = 7,
+	BTRFS_NESTING_MAX = 8,
+};
+
+struct btrfs_drew_lock {
+	atomic_t readers;
+	struct percpu_counter writers;
+	wait_queue_head_t pending_writers;
+	wait_queue_head_t pending_readers;
+};
+
+struct btrfs_qgroup_swapped_blocks {
+	spinlock_t lock;
+	bool swapped;
+	struct rb_root blocks[8];
+};
+
+struct btrfs_root {
+	struct rb_node rb_node;
+	struct extent_buffer *node;
+	struct extent_buffer *commit_root;
+	struct btrfs_root *log_root;
+	struct btrfs_root *reloc_root;
+	long unsigned int state;
+	struct btrfs_root_item root_item;
+	struct btrfs_key root_key;
+	struct btrfs_fs_info *fs_info;
+	struct extent_io_tree dirty_log_pages;
+	struct mutex objectid_mutex;
+	spinlock_t accounting_lock;
+	int: 32;
+	struct btrfs_block_rsv *block_rsv;
+	struct mutex log_mutex;
+	wait_queue_head_t log_writer_wait;
+	wait_queue_head_t log_commit_wait[2];
+	struct list_head log_ctxs[2];
+	atomic_t log_writers;
+	atomic_t log_commit[2];
+	atomic_t log_batch;
+	int log_transid;
+	int log_transid_committed;
+	int last_log_commit;
+	pid_t log_start_pid;
+	u64 last_trans;
+	u32 type;
+	int: 32;
+	u64 free_objectid;
+	struct btrfs_key defrag_progress;
+	struct btrfs_key defrag_max;
+	long: 48;
+	struct list_head dirty_list;
+	struct list_head root_list;
+	spinlock_t log_extents_lock[2];
+	struct list_head logged_list[2];
+	spinlock_t inode_lock;
+	int: 32;
+	struct rb_root inode_tree;
+	struct xarray delayed_nodes_tree;
+	dev_t anon_dev;
+	spinlock_t root_item_lock;
+	refcount_t refs;
+	int: 32;
+	struct mutex delalloc_mutex;
+	spinlock_t delalloc_lock;
+	int: 32;
+	struct list_head delalloc_inodes;
+	struct list_head delalloc_root;
+	u64 nr_delalloc_inodes;
+	struct mutex ordered_extent_mutex;
+	spinlock_t ordered_extent_lock;
+	int: 32;
+	struct list_head ordered_extents;
+	struct list_head ordered_root;
+	u64 nr_ordered_extents;
+	struct list_head reloc_dirty_list;
+	int send_in_progress;
+	int dedupe_in_progress;
+	struct btrfs_drew_lock snapshot_lock;
+	atomic_t snapshot_force_cow;
+	spinlock_t qgroup_meta_rsv_lock;
+	u64 qgroup_meta_rsv_pertrans;
+	u64 qgroup_meta_rsv_prealloc;
+	wait_queue_head_t qgroup_flush_wait;
+	atomic_t nr_swapfiles;
+	int: 32;
+	struct btrfs_qgroup_swapped_blocks swapped_blocks;
+	struct extent_io_tree log_csum_range;
+} __attribute__((packed));
+
+struct btrfs_tree_parent_check {
+	u64 owner_root;
+	u64 transid;
+	struct btrfs_key first_key;
+	bool has_first_key;
+	u8 level;
+};
+
+struct root_name_map {
+	u64 id;
+	char name[16];
+};
+
+struct btrfs_qgroup_limit {
+	__u64 flags;
+	__u64 max_rfer;
+	__u64 max_excl;
+	__u64 rsv_rfer;
+	__u64 rsv_excl;
+};
+
+struct btrfs_qgroup_inherit {
+	__u64 flags;
+	__u64 num_qgroups;
+	__u64 num_ref_copies;
+	__u64 num_excl_copies;
+	struct btrfs_qgroup_limit lim;
+	__u64 qgroups[0];
+};
+
+struct btrfs_balance_args {
+	__u64 profiles;
+	union {
+		__u64 usage;
+		struct {
+			__u32 usage_min;
+			__u32 usage_max;
+		};
+	};
+	__u64 devid;
+	__u64 pstart;
+	__u64 pend;
+	__u64 vstart;
+	__u64 vend;
+	__u64 target;
+	__u64 flags;
+	union {
+		__u64 limit;
+		struct {
+			__u32 limit_min;
+			__u32 limit_max;
+		};
+	};
+	__u32 stripes_min;
+	__u32 stripes_max;
+	__u64 unused[6];
+};
+
+struct btrfs_balance_progress {
+	__u64 expected;
+	__u64 considered;
+	__u64 completed;
+};
+
+enum {
+	__EXTENT_DIRTY_BIT = 0,
+	EXTENT_DIRTY = 1,
+	__EXTENT_DIRTY_SEQ = 0,
+	__EXTENT_UPTODATE_BIT = 1,
+	EXTENT_UPTODATE = 2,
+	__EXTENT_UPTODATE_SEQ = 1,
+	__EXTENT_LOCKED_BIT = 2,
+	EXTENT_LOCKED = 4,
+	__EXTENT_LOCKED_SEQ = 2,
+	__EXTENT_NEW_BIT = 3,
+	EXTENT_NEW = 8,
+	__EXTENT_NEW_SEQ = 3,
+	__EXTENT_DELALLOC_BIT = 4,
+	EXTENT_DELALLOC = 16,
+	__EXTENT_DELALLOC_SEQ = 4,
+	__EXTENT_DEFRAG_BIT = 5,
+	EXTENT_DEFRAG = 32,
+	__EXTENT_DEFRAG_SEQ = 5,
+	__EXTENT_BOUNDARY_BIT = 6,
+	EXTENT_BOUNDARY = 64,
+	__EXTENT_BOUNDARY_SEQ = 6,
+	__EXTENT_NODATASUM_BIT = 7,
+	EXTENT_NODATASUM = 128,
+	__EXTENT_NODATASUM_SEQ = 7,
+	__EXTENT_CLEAR_META_RESV_BIT = 8,
+	EXTENT_CLEAR_META_RESV = 256,
+	__EXTENT_CLEAR_META_RESV_SEQ = 8,
+	__EXTENT_NEED_WAIT_BIT = 9,
+	EXTENT_NEED_WAIT = 512,
+	__EXTENT_NEED_WAIT_SEQ = 9,
+	__EXTENT_NORESERVE_BIT = 10,
+	EXTENT_NORESERVE = 1024,
+	__EXTENT_NORESERVE_SEQ = 10,
+	__EXTENT_QGROUP_RESERVED_BIT = 11,
+	EXTENT_QGROUP_RESERVED = 2048,
+	__EXTENT_QGROUP_RESERVED_SEQ = 11,
+	__EXTENT_CLEAR_DATA_RESV_BIT = 12,
+	EXTENT_CLEAR_DATA_RESV = 4096,
+	__EXTENT_CLEAR_DATA_RESV_SEQ = 12,
+	__EXTENT_DELALLOC_NEW_BIT = 13,
+	EXTENT_DELALLOC_NEW = 8192,
+	__EXTENT_DELALLOC_NEW_SEQ = 13,
+	__EXTENT_ADD_INODE_BYTES_BIT = 14,
+	EXTENT_ADD_INODE_BYTES = 16384,
+	__EXTENT_ADD_INODE_BYTES_SEQ = 14,
+	__EXTENT_CLEAR_ALL_BITS_BIT = 15,
+	EXTENT_CLEAR_ALL_BITS = 32768,
+	__EXTENT_CLEAR_ALL_BITS_SEQ = 15,
+};
+
+struct btrfs_ordered_inode_tree {
+	spinlock_t lock;
+	struct rb_root tree;
+	struct rb_node *last;
+};
+
+struct btrfs_delayed_node;
+
+struct btrfs_inode {
+	struct btrfs_root *root;
+	struct btrfs_key location;
+	spinlock_t lock;
+	struct extent_map_tree extent_tree;
+	struct extent_io_tree io_tree;
+	struct rb_root io_failure_tree;
+	spinlock_t io_failure_lock;
+	struct extent_io_tree file_extent_tree;
+	struct mutex log_mutex;
+	struct btrfs_ordered_inode_tree ordered_tree;
+	struct list_head delalloc_inodes;
+	struct rb_node rb_node;
+	long unsigned int runtime_flags;
+	atomic_t sync_writers;
+	u64 generation;
+	u64 last_trans;
+	u64 logged_trans;
+	int last_sub_trans;
+	int last_log_commit;
+	u64 delalloc_bytes;
+	union {
+		u64 new_delalloc_bytes;
+		u64 last_dir_index_offset;
+	};
+	u64 defrag_bytes;
+	u64 disk_i_size;
+	u64 index_cnt;
+	u64 dir_index;
+	u64 last_unlink_trans;
+	u64 last_reflink_trans;
+	u64 csum_bytes;
+	u32 flags;
+	u32 ro_flags;
+	unsigned int outstanding_extents;
+	struct btrfs_block_rsv block_rsv;
+	unsigned int prop_compress;
+	unsigned int defrag_compress;
+	struct btrfs_delayed_node *delayed_node;
+	struct timespec64 i_otime;
+	struct list_head delayed_iput;
+	struct rw_semaphore i_mmap_lock;
+	struct inode vfs_inode;
+};
+
+struct extent_state {
+	u64 start;
+	u64 end;
+	struct rb_node rb_node;
+	wait_queue_head_t wq;
+	refcount_t refs;
+	u32 state;
+};
+
+struct extent_changeset {
+	u64 bytes_changed;
+	struct ulist range_changed;
+};
+
+struct btrfs_io_context;
+
+struct btrfs_io_stripe {
+	struct btrfs_device *dev;
+	union {
+		u64 physical;
+		struct btrfs_io_context *bioc;
+	};
+};
+
+struct map_lookup {
+	u64 type;
+	int io_align;
+	int io_width;
+	u32 stripe_len;
+	int num_stripes;
+	int sub_stripes;
+	int verified_stripes;
+	struct btrfs_io_stripe stripes[0];
+};
+
+struct btrfs_space_info {
+	spinlock_t lock;
+	u64 total_bytes;
+	u64 bytes_used;
+	u64 bytes_pinned;
+	u64 bytes_reserved;
+	u64 bytes_may_use;
+	u64 bytes_readonly;
+	u64 active_total_bytes;
+	u64 bytes_zone_unusable;
+	u64 max_extent_size;
+	u64 chunk_size;
+	int bg_reclaim_threshold;
+	int clamp;
+	unsigned int full: 1;
+	unsigned int chunk_alloc: 1;
+	unsigned int flush: 1;
+	unsigned int force_alloc;
+	u64 disk_used;
+	u64 disk_total;
+	u64 flags;
+	struct list_head list;
+	struct list_head ro_bgs;
+	struct list_head priority_tickets;
+	struct list_head tickets;
+	u64 reclaim_size;
+	u64 tickets_id;
+	struct rw_semaphore groups_sem;
+	struct list_head block_groups[9];
+	struct kobject kobj;
+	struct kobject *block_group_kobjs[9];
+};
+
+enum {
+	BTRFS_FS_STATE_ERROR = 0,
+	BTRFS_FS_STATE_REMOUNTING = 1,
+	BTRFS_FS_STATE_RO = 2,
+	BTRFS_FS_STATE_TRANS_ABORTED = 3,
+	BTRFS_FS_STATE_DEV_REPLACING = 4,
+	BTRFS_FS_STATE_DUMMY_FS_INFO = 5,
+	BTRFS_FS_STATE_NO_CSUMS = 6,
+	BTRFS_FS_STATE_LOG_CLEANUP_ERROR = 7,
+	BTRFS_FS_STATE_COUNT = 8,
+};
+
+enum {
+	BTRFS_FS_CLOSING_START = 0,
+	BTRFS_FS_CLOSING_DONE = 1,
+	BTRFS_FS_LOG_RECOVERING = 2,
+	BTRFS_FS_OPEN = 3,
+	BTRFS_FS_QUOTA_ENABLED = 4,
+	BTRFS_FS_UPDATE_UUID_TREE_GEN = 5,
+	BTRFS_FS_CREATING_FREE_SPACE_TREE = 6,
+	BTRFS_FS_BTREE_ERR = 7,
+	BTRFS_FS_LOG1_ERR = 8,
+	BTRFS_FS_LOG2_ERR = 9,
+	BTRFS_FS_QUOTA_OVERRIDE = 10,
+	BTRFS_FS_FROZEN = 11,
+	BTRFS_FS_BALANCE_RUNNING = 12,
+	BTRFS_FS_RELOC_RUNNING = 13,
+	BTRFS_FS_CLEANER_RUNNING = 14,
+	BTRFS_FS_CSUM_IMPL_FAST = 15,
+	BTRFS_FS_DISCARD_RUNNING = 16,
+	BTRFS_FS_CLEANUP_SPACE_CACHE_V1 = 17,
+	BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED = 18,
+	BTRFS_FS_TREE_MOD_LOG_USERS = 19,
+	BTRFS_FS_COMMIT_TRANS = 20,
+	BTRFS_FS_UNFINISHED_DROPS = 21,
+	BTRFS_FS_NEED_ZONE_FINISH = 22,
+	BTRFS_FS_NEED_TRANS_COMMIT = 23,
+	BTRFS_FS_NO_OVERCOMMIT = 24,
+};
+
+enum {
+	BTRFS_MOUNT_NODATASUM = 1,
+	BTRFS_MOUNT_NODATACOW = 2,
+	BTRFS_MOUNT_NOBARRIER = 4,
+	BTRFS_MOUNT_SSD = 8,
+	BTRFS_MOUNT_DEGRADED = 16,
+	BTRFS_MOUNT_COMPRESS = 32,
+	BTRFS_MOUNT_NOTREELOG = 64,
+	BTRFS_MOUNT_FLUSHONCOMMIT = 128,
+	BTRFS_MOUNT_SSD_SPREAD = 256,
+	BTRFS_MOUNT_NOSSD = 512,
+	BTRFS_MOUNT_DISCARD_SYNC = 1024,
+	BTRFS_MOUNT_FORCE_COMPRESS = 2048,
+	BTRFS_MOUNT_SPACE_CACHE = 4096,
+	BTRFS_MOUNT_CLEAR_CACHE = 8192,
+	BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED = 16384,
+	BTRFS_MOUNT_ENOSPC_DEBUG = 32768,
+	BTRFS_MOUNT_AUTO_DEFRAG = 65536,
+	BTRFS_MOUNT_USEBACKUPROOT = 131072,
+	BTRFS_MOUNT_SKIP_BALANCE = 262144,
+	BTRFS_MOUNT_CHECK_INTEGRITY = 524288,
+	BTRFS_MOUNT_CHECK_INTEGRITY_DATA = 1048576,
+	BTRFS_MOUNT_PANIC_ON_FATAL_ERROR = 2097152,
+	BTRFS_MOUNT_RESCAN_UUID_TREE = 4194304,
+	BTRFS_MOUNT_FRAGMENT_DATA = 8388608,
+	BTRFS_MOUNT_FRAGMENT_METADATA = 16777216,
+	BTRFS_MOUNT_FREE_SPACE_TREE = 33554432,
+	BTRFS_MOUNT_NOLOGREPLAY = 67108864,
+	BTRFS_MOUNT_REF_VERIFY = 134217728,
+	BTRFS_MOUNT_DISCARD_ASYNC = 268435456,
+	BTRFS_MOUNT_IGNOREBADROOTS = 536870912,
+	BTRFS_MOUNT_IGNOREDATACSUMS = 1073741824,
+	BTRFS_MOUNT_NODISCARD = 2147483648,
+};
+
+struct rcu_string;
+
+struct btrfs_zoned_device_info;
+
+struct scrub_ctx;
+
+struct btrfs_device {
+	struct list_head dev_list;
+	struct list_head dev_alloc_list;
+	struct list_head post_commit_list;
+	struct btrfs_fs_devices *fs_devices;
+	struct btrfs_fs_info *fs_info;
+	struct rcu_string *name;
+	u64 generation;
+	struct block_device *bdev;
+	struct btrfs_zoned_device_info *zone_info;
+	fmode_t mode;
+	dev_t devt;
+	long unsigned int dev_state;
+	blk_status_t last_flush_error;
+	u64 devid;
+	u64 total_bytes;
+	u64 disk_total_bytes;
+	u64 bytes_used;
+	u32 io_align;
+	u32 io_width;
+	u64 type;
+	u32 sector_size;
+	u8 uuid[16];
+	u64 commit_total_bytes;
+	u64 commit_bytes_used;
+	struct bio flush_bio;
+	struct completion flush_wait;
+	struct scrub_ctx *scrub_ctx;
+	int dev_stats_valid;
+	atomic_t dev_stats_ccnt;
+	atomic_t dev_stat_values[5];
+	struct extent_io_tree alloc_state;
+	struct completion kobj_unregister;
+	struct kobject devid_kobj;
+	u64 scrub_speed_max;
+};
+
+enum btrfs_discard_state {
+	BTRFS_DISCARD_EXTENTS = 0,
+	BTRFS_DISCARD_BITMAPS = 1,
+	BTRFS_DISCARD_RESET_CURSOR = 2,
+};
+
+struct btrfs_io_ctl {
+	void *cur;
+	void *orig;
+	struct page *page;
+	struct page **pages;
+	struct btrfs_fs_info *fs_info;
+	struct inode *inode;
+	long unsigned int size;
+	int index;
+	int num_pages;
+	int entries;
+	int bitmaps;
+};
+
+struct btrfs_full_stripe_locks_tree {
+	struct rb_root root;
+	struct mutex lock;
+};
+
+struct btrfs_caching_control;
+
+struct btrfs_free_space_ctl;
+
+struct btrfs_block_group {
+	struct btrfs_fs_info *fs_info;
+	struct inode *inode;
+	spinlock_t lock;
+	u64 start;
+	u64 length;
+	u64 pinned;
+	u64 reserved;
+	u64 used;
+	u64 delalloc_bytes;
+	u64 bytes_super;
+	u64 flags;
+	u64 cache_generation;
+	u64 global_root_id;
+	u64 commit_used;
+	u32 bitmap_high_thresh;
+	u32 bitmap_low_thresh;
+	struct rw_semaphore data_rwsem;
+	long unsigned int full_stripe_len;
+	long unsigned int runtime_flags;
+	unsigned int ro;
+	int disk_cache_state;
+	int cached;
+	struct btrfs_caching_control *caching_ctl;
+	struct btrfs_space_info *space_info;
+	struct btrfs_free_space_ctl *free_space_ctl;
+	struct rb_node cache_node;
+	struct list_head list;
+	refcount_t refs;
+	struct list_head cluster_list;
+	struct list_head bg_list;
+	struct list_head ro_list;
+	atomic_t frozen;
+	struct list_head discard_list;
+	int discard_index;
+	u64 discard_eligible_time;
+	u64 discard_cursor;
+	enum btrfs_discard_state discard_state;
+	struct list_head dirty_list;
+	struct list_head io_list;
+	struct btrfs_io_ctl io_ctl;
+	atomic_t reservations;
+	atomic_t nocow_writers;
+	struct mutex free_space_lock;
+	int swap_extents;
+	struct btrfs_full_stripe_locks_tree full_stripe_locks_root;
+	u64 alloc_offset;
+	u64 zone_unusable;
+	u64 zone_capacity;
+	u64 meta_write_pointer;
+	struct map_lookup *physical_map;
+	struct list_head active_bg_list;
+	struct work_struct zone_finish_work;
+	struct extent_buffer *last_eb;
+};
+
+enum btrfs_trans_state {
+	TRANS_STATE_RUNNING = 0,
+	TRANS_STATE_COMMIT_START = 1,
+	TRANS_STATE_COMMIT_DOING = 2,
+	TRANS_STATE_UNBLOCKED = 3,
+	TRANS_STATE_SUPER_COMMITTED = 4,
+	TRANS_STATE_COMPLETED = 5,
+	TRANS_STATE_MAX = 6,
+};
+
+struct btrfs_delayed_ref_root {
+	struct rb_root_cached href_root;
+	struct rb_root dirty_extent_root;
+	spinlock_t lock;
+	atomic_t num_entries;
+	long unsigned int num_heads;
+	long unsigned int num_heads_ready;
+	u64 pending_csums;
+	long unsigned int flags;
+	u64 run_delayed_start;
+	u64 qgroup_to_skip;
+};
+
+struct btrfs_transaction {
+	u64 transid;
+	atomic_t num_extwriters;
+	atomic_t num_writers;
+	refcount_t use_count;
+	long unsigned int flags;
+	enum btrfs_trans_state state;
+	int aborted;
+	struct list_head list;
+	struct extent_io_tree dirty_pages;
+	time64_t start_time;
+	wait_queue_head_t writer_wait;
+	wait_queue_head_t commit_wait;
+	struct list_head pending_snapshots;
+	struct list_head dev_update_list;
+	struct list_head switch_commits;
+	struct list_head dirty_bgs;
+	struct list_head io_bgs;
+	struct list_head dropped_roots;
+	struct extent_io_tree pinned_extents;
+	struct mutex cache_write_mutex;
+	spinlock_t dirty_bgs_lock;
+	struct list_head deleted_bgs;
+	spinlock_t dropped_roots_lock;
+	struct btrfs_delayed_ref_root delayed_refs;
+	struct btrfs_fs_info *fs_info;
+	atomic_t pending_ordered;
+	wait_queue_head_t pending_wait;
+	spinlock_t releasing_ebs_lock;
+	struct list_head releasing_ebs;
+};
+
+enum btrfs_chunk_allocation_policy {
+	BTRFS_CHUNK_ALLOC_REGULAR = 0,
+	BTRFS_CHUNK_ALLOC_ZONED = 1,
+};
+
+enum btrfs_read_policy {
+	BTRFS_READ_POLICY_PID = 0,
+	BTRFS_NR_READ_POLICY = 1,
+};
+
+struct btrfs_fs_devices {
+	u8 fsid[16];
+	u8 metadata_uuid[16];
+	bool fsid_change;
+	struct list_head fs_list;
+	u64 num_devices;
+	u64 open_devices;
+	u64 rw_devices;
+	u64 missing_devices;
+	u64 total_rw_bytes;
+	u64 total_devices;
+	u64 latest_generation;
+	struct btrfs_device *latest_dev;
+	struct mutex device_list_mutex;
+	struct list_head devices;
+	struct list_head alloc_list;
+	struct list_head seed_list;
+	bool seeding;
+	int opened;
+	bool rotating;
+	bool discardable;
+	struct btrfs_fs_info *fs_info;
+	struct kobject fsid_kobj;
+	struct kobject *devices_kobj;
+	struct kobject *devinfo_kobj;
+	struct completion kobj_unregister;
+	enum btrfs_chunk_allocation_policy chunk_alloc_policy;
+	enum btrfs_read_policy read_policy;
+};
+
+struct btrfs_balance_control {
+	struct btrfs_balance_args data;
+	struct btrfs_balance_args meta;
+	struct btrfs_balance_args sys;
+	u64 flags;
+	struct btrfs_balance_progress stat;
+};
+
+struct btrfs_delayed_root {
+	spinlock_t lock;
+	struct list_head node_list;
+	struct list_head prepare_list;
+	atomic_t items;
+	atomic_t items_seq;
+	int nodes;
+	wait_queue_head_t wait;
+};
+
+struct btrfs_path {
+	struct extent_buffer *nodes[8];
+	int slots[8];
+	u8 locks[8];
+	u8 reada;
+	u8 lowest_level;
+	unsigned int search_for_split: 1;
+	unsigned int keep_locks: 1;
+	unsigned int skip_locking: 1;
+	unsigned int search_commit_root: 1;
+	unsigned int need_commit_sem: 1;
+	unsigned int skip_release_on_error: 1;
+	unsigned int search_for_extension: 1;
+	unsigned int nowait: 1;
+};
+
+enum {
+	BTRFS_ROOT_IN_TRANS_SETUP = 0,
+	BTRFS_ROOT_SHAREABLE = 1,
+	BTRFS_ROOT_TRACK_DIRTY = 2,
+	BTRFS_ROOT_IN_RADIX = 3,
+	BTRFS_ROOT_ORPHAN_ITEM_INSERTED = 4,
+	BTRFS_ROOT_DEFRAG_RUNNING = 5,
+	BTRFS_ROOT_FORCE_COW = 6,
+	BTRFS_ROOT_MULTI_LOG_TASKS = 7,
+	BTRFS_ROOT_DIRTY = 8,
+	BTRFS_ROOT_DELETING = 9,
+	BTRFS_ROOT_DEAD_RELOC_TREE = 10,
+	BTRFS_ROOT_DEAD_TREE = 11,
+	BTRFS_ROOT_HAS_LOG_TREE = 12,
+	BTRFS_ROOT_QGROUP_FLUSHING = 13,
+	BTRFS_ROOT_ORPHAN_CLEANUP = 14,
+	BTRFS_ROOT_UNFINISHED_DROP = 15,
+	BTRFS_ROOT_RESET_LOCKDEP_CLASS = 16,
+};
+
+struct btrfs_item_batch {
+	const struct btrfs_key *keys;
+	const u32 *data_sizes;
+	u32 total_data_size;
+	int nr;
+};
+
+struct btrfs_delayed_node {
+	u64 inode_id;
+	u64 bytes_reserved;
+	struct btrfs_root *root;
+	struct list_head n_list;
+	struct list_head p_list;
+	struct rb_root_cached ins_root;
+	struct rb_root_cached del_root;
+	struct mutex mutex;
+	struct btrfs_inode_item inode_item;
+	refcount_t refs;
+	u64 index_cnt;
+	long unsigned int flags;
+	int count;
+	u32 curr_index_batch_size;
+	u32 index_item_leaves;
+};
+
+struct btrfs_delayed_ref_node {
+	struct rb_node ref_node;
+	struct list_head add_list;
+	u64 bytenr;
+	u64 num_bytes;
+	u64 seq;
+	refcount_t refs;
+	int ref_mod;
+	unsigned int action: 8;
+	unsigned int type: 8;
+	unsigned int is_head: 1;
+	unsigned int in_tree: 1;
+};
+
+struct btrfs_delayed_extent_op {
+	struct btrfs_disk_key key;
+	u8 level;
+	bool update_key;
+	bool update_flags;
+	u64 flags_to_set;
+};
+
+struct btrfs_delayed_ref_head {
+	u64 bytenr;
+	u64 num_bytes;
+	refcount_t refs;
+	struct mutex mutex;
+	spinlock_t lock;
+	struct rb_root_cached ref_tree;
+	struct list_head ref_add_list;
+	struct rb_node href_node;
+	struct btrfs_delayed_extent_op *extent_op;
+	int total_ref_mod;
+	int ref_mod;
+	unsigned int must_insert_reserved: 1;
+	unsigned int is_data: 1;
+	unsigned int is_system: 1;
+	unsigned int processing: 1;
+};
+
+struct btrfs_delayed_tree_ref {
+	struct btrfs_delayed_ref_node node;
+	u64 root;
+	u64 parent;
+	int level;
+};
+
+struct btrfs_delayed_data_ref {
+	struct btrfs_delayed_ref_node node;
+	u64 root;
+	u64 parent;
+	u64 objectid;
+	u64 offset;
+};
+
+enum btrfs_ref_type {
+	BTRFS_REF_NOT_SET = 0,
+	BTRFS_REF_DATA = 1,
+	BTRFS_REF_METADATA = 2,
+	BTRFS_REF_LAST = 3,
+};
+
+struct btrfs_data_ref {
+	u64 owning_root;
+	u64 ino;
+	u64 offset;
+};
+
+struct btrfs_tree_ref {
+	int level;
+	u64 owning_root;
+};
+
+struct btrfs_ref {
+	enum btrfs_ref_type type;
+	int action;
+	bool skip_qgroup;
+	u64 bytenr;
+	u64 len;
+	u64 parent;
+	union {
+		struct btrfs_data_ref data_ref;
+		struct btrfs_tree_ref tree_ref;
+	};
+};
+
+struct btrfs_pending_snapshot;
+
+struct btrfs_trans_handle {
+	u64 transid;
+	u64 bytes_reserved;
+	u64 chunk_bytes_reserved;
+	long unsigned int delayed_ref_updates;
+	struct btrfs_transaction *transaction;
+	struct btrfs_block_rsv *block_rsv;
+	struct btrfs_block_rsv *orig_rsv;
+	struct btrfs_pending_snapshot *pending_snapshot;
+	refcount_t use_count;
+	unsigned int type;
+	short int aborted;
+	bool adding_csums;
+	bool allocating_chunk;
+	bool removing_chunk;
+	bool reloc_reserved;
+	bool in_fsync;
+	struct btrfs_fs_info *fs_info;
+	struct list_head new_bgs;
+};
+
+struct btrfs_pending_snapshot {
+	struct dentry *dentry;
+	struct inode *dir;
+	struct btrfs_root *root;
+	struct btrfs_root_item *root_item;
+	struct btrfs_root *snap;
+	struct btrfs_qgroup_inherit *inherit;
+	struct btrfs_path *path;
+	struct btrfs_block_rsv block_rsv;
+	int error;
+	dev_t anon_dev;
+	bool readonly;
+	struct list_head list;
+};
+
+struct rcu_string {
+	struct callback_head rcu;
+	char str[0];
+};
+
+enum btrfs_raid_types {
+	BTRFS_RAID_SINGLE = 0,
+	BTRFS_RAID_RAID0 = 1,
+	BTRFS_RAID_RAID1 = 2,
+	BTRFS_RAID_DUP = 3,
+	BTRFS_RAID_RAID10 = 4,
+	BTRFS_RAID_RAID5 = 5,
+	BTRFS_RAID_RAID6 = 6,
+	BTRFS_RAID_RAID1C3 = 7,
+	BTRFS_RAID_RAID1C4 = 8,
+	BTRFS_NR_RAID_TYPES = 9,
+};
+
+struct btrfs_zoned_device_info {
+	u64 zone_size;
+	u8 zone_size_shift;
+	u64 max_zone_append_size;
+	u32 nr_zones;
+	unsigned int max_active_zones;
+	atomic_t active_zones_left;
+	long unsigned int *seq_zones;
+	long unsigned int *empty_zones;
+	long unsigned int *active_zones;
+	struct blk_zone *zone_cache;
+	struct blk_zone sb_zones[6];
+};
+
+struct btrfs_io_context {
+	refcount_t refs;
+	struct btrfs_fs_info *fs_info;
+	u64 map_type;
+	struct bio *orig_bio;
+	atomic_t error;
+	int max_errors;
+	int num_stripes;
+	int mirror_num;
+	int num_tgtdevs;
+	int *tgtdev_map;
+	u64 *raid_map;
+	struct btrfs_io_stripe stripes[0];
+};
+
+struct btrfs_discard_stripe {
+	struct btrfs_device *dev;
+	u64 physical;
+	u64 length;
+};
+
+enum btrfs_trim_state {
+	BTRFS_TRIM_STATE_UNTRIMMED = 0,
+	BTRFS_TRIM_STATE_TRIMMED = 1,
+	BTRFS_TRIM_STATE_TRIMMING = 2,
+};
+
+struct btrfs_free_space {
+	struct rb_node offset_index;
+	struct rb_node bytes_index;
+	u64 offset;
+	u64 bytes;
+	u64 max_extent_size;
+	long unsigned int *bitmap;
+	struct list_head list;
+	enum btrfs_trim_state trim_state;
+	s32 bitmap_extents;
+};
+
+struct btrfs_free_space_op;
+
+struct btrfs_free_space_ctl {
+	spinlock_t tree_lock;
+	struct rb_root free_space_offset;
+	struct rb_root_cached free_space_bytes;
+	u64 free_space;
+	int extents_thresh;
+	int free_extents;
+	int total_bitmaps;
+	int unit;
+	u64 start;
+	s32 discardable_extents[2];
+	s64 discardable_bytes[2];
+	const struct btrfs_free_space_op *op;
+	struct btrfs_block_group *block_group;
+	struct mutex cache_writeout_mutex;
+	struct list_head trimming_ranges;
+};
+
+struct btrfs_free_space_op {
+	bool (*use_bitmap)(struct btrfs_free_space_ctl *, struct btrfs_free_space *);
+};
+
+enum btrfs_chunk_alloc_enum {
+	CHUNK_ALLOC_NO_FORCE = 0,
+	CHUNK_ALLOC_LIMITED = 1,
+	CHUNK_ALLOC_FORCE = 2,
+	CHUNK_ALLOC_FORCE_FOR_EXTENT = 3,
+};
+
+enum btrfs_block_group_flags {
+	BLOCK_GROUP_FLAG_IREF = 0,
+	BLOCK_GROUP_FLAG_REMOVED = 1,
+	BLOCK_GROUP_FLAG_TO_COPY = 2,
+	BLOCK_GROUP_FLAG_RELOCATING_REPAIR = 3,
+	BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED = 4,
+	BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE = 5,
+	BLOCK_GROUP_FLAG_ZONED_DATA_RELOC = 6,
+	BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE = 7,
+	BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE = 8,
+};
+
+enum btrfs_caching_type {
+	BTRFS_CACHE_NO = 0,
+	BTRFS_CACHE_STARTED = 1,
+	BTRFS_CACHE_FINISHED = 2,
+	BTRFS_CACHE_ERROR = 3,
+};
+
+struct btrfs_caching_control {
+	struct list_head list;
+	struct mutex mutex;
+	wait_queue_head_t wait;
+	struct btrfs_work work;
+	struct btrfs_block_group *block_group;
+	refcount_t count;
+};
+
+enum btrfs_inline_ref_type {
+	BTRFS_REF_TYPE_INVALID = 0,
+	BTRFS_REF_TYPE_BLOCK = 1,
+	BTRFS_REF_TYPE_DATA = 2,
+	BTRFS_REF_TYPE_ANY = 3,
+};
+
+enum btrfs_loop_type {
+	LOOP_CACHING_NOWAIT = 0,
+	LOOP_CACHING_WAIT = 1,
+	LOOP_ALLOC_CHUNK = 2,
+	LOOP_NO_EMPTY_SIZE = 3,
+};
+
+enum btrfs_extent_allocation_policy {
+	BTRFS_EXTENT_ALLOC_CLUSTERED = 0,
+	BTRFS_EXTENT_ALLOC_ZONED = 1,
+};
+
+struct find_free_extent_ctl {
+	u64 ram_bytes;
+	u64 num_bytes;
+	u64 min_alloc_size;
+	u64 empty_size;
+	u64 flags;
+	int delalloc;
+	u64 search_start;
+	u64 empty_cluster;
+	struct btrfs_free_cluster *last_ptr;
+	bool use_cluster;
+	bool have_caching_bg;
+	bool orig_have_caching_bg;
+	bool for_treelog;
+	bool for_data_reloc;
+	int index;
+	int loop;
+	bool retry_clustered;
+	bool retry_unclustered;
+	int cached;
+	u64 max_extent_size;
+	u64 total_free_space;
+	u64 found_offset;
+	u64 hint_byte;
+	enum btrfs_extent_allocation_policy policy;
+};
+
+struct walk_control {
+	u64 refs[8];
+	u64 flags[8];
+	struct btrfs_key update_progress;
+	struct btrfs_key drop_progress;
+	short: 16;
+	int drop_level;
+	int stage;
+	int level;
+	int shared_level;
+	int update_ref;
+	int keep_locks;
+	int reada_slot;
+	int reada_count;
+	int restarted;
+} __attribute__((packed));
+
+struct btrfs_root_ref {
+	__le64 dirid;
+	__le64 sequence;
+	__le16 name_len;
+} __attribute__((packed));
+
+enum btrfs_qgroup_rsv_type {
+	BTRFS_QGROUP_RSV_DATA = 0,
+	BTRFS_QGROUP_RSV_META_PERTRANS = 1,
+	BTRFS_QGROUP_RSV_META_PREALLOC = 2,
+	BTRFS_QGROUP_RSV_LAST = 3,
+};
+
+enum btrfs_reserve_flush_enum {
+	BTRFS_RESERVE_NO_FLUSH = 0,
+	BTRFS_RESERVE_FLUSH_LIMIT = 1,
+	BTRFS_RESERVE_FLUSH_EVICT = 2,
+	BTRFS_RESERVE_FLUSH_DATA = 3,
+	BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE = 4,
+	BTRFS_RESERVE_FLUSH_ALL = 5,
+	BTRFS_RESERVE_FLUSH_ALL_STEAL = 6,
+	BTRFS_RESERVE_FLUSH_EMERGENCY = 7,
+};
+
+enum btrfs_dev_stat_values {
+	BTRFS_DEV_STAT_WRITE_ERRS = 0,
+	BTRFS_DEV_STAT_READ_ERRS = 1,
+	BTRFS_DEV_STAT_FLUSH_ERRS = 2,
+	BTRFS_DEV_STAT_CORRUPTION_ERRS = 3,
+	BTRFS_DEV_STAT_GENERATION_ERRS = 4,
+	BTRFS_DEV_STAT_VALUES_MAX = 5,
+};
+
+enum btrfs_csum_type {
+	BTRFS_CSUM_TYPE_CRC32 = 0,
+	BTRFS_CSUM_TYPE_XXHASH = 1,
+	BTRFS_CSUM_TYPE_SHA256 = 2,
+	BTRFS_CSUM_TYPE_BLAKE2 = 3,
+};
+
+enum {
+	READA_NONE = 0,
+	READA_BACK = 1,
+	READA_FORWARD = 2,
+	READA_FORWARD_ALWAYS = 3,
+};
+
+enum btrfs_mod_log_op {
+	BTRFS_MOD_LOG_KEY_REPLACE = 0,
+	BTRFS_MOD_LOG_KEY_ADD = 1,
+	BTRFS_MOD_LOG_KEY_REMOVE = 2,
+	BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING = 3,
+	BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING = 4,
+	BTRFS_MOD_LOG_MOVE_KEYS = 5,
+	BTRFS_MOD_LOG_ROOT_REPLACE = 6,
+};
+
+struct btrfs_map_token {
+	struct extent_buffer *eb;
+	char *kaddr;
+	long unsigned int offset;
+};
+
+struct btrfs_csums {
+	u16 size;
+	const char name[10];
+	const char driver[12];
+};
+
+struct btrfs_ioctl_vol_args {
+	__s64 fd;
+	char name[4088];
+};
+
+struct btrfs_inode_ref {
+	__le64 index;
+	__le16 name_len;
+} __attribute__((packed));
+
+enum {
+	IO_TREE_FS_PINNED_EXTENTS = 0,
+	IO_TREE_FS_EXCLUDED_EXTENTS = 1,
+	IO_TREE_BTREE_INODE_IO = 2,
+	IO_TREE_INODE_IO = 3,
+	IO_TREE_RELOC_BLOCKS = 4,
+	IO_TREE_TRANS_DIRTY_PAGES = 5,
+	IO_TREE_ROOT_DIRTY_LOG_PAGES = 6,
+	IO_TREE_INODE_FILE_EXTENT = 7,
+	IO_TREE_LOG_CSUM_RANGE = 8,
+	IO_TREE_SELFTEST = 9,
+	IO_TREE_DEVICE_ALLOC_STATE = 10,
+};
+
+enum btrfs_compression_type {
+	BTRFS_COMPRESS_NONE = 0,
+	BTRFS_COMPRESS_ZLIB = 1,
+	BTRFS_COMPRESS_LZO = 2,
+	BTRFS_COMPRESS_ZSTD = 3,
+	BTRFS_NR_COMPRESS_TYPES = 4,
+};
+
+enum {
+	EXTENT_FLAG_PINNED = 0,
+	EXTENT_FLAG_COMPRESSED = 1,
+	EXTENT_FLAG_PREALLOC = 2,
+	EXTENT_FLAG_LOGGING = 3,
+	EXTENT_FLAG_FILLING = 4,
+	EXTENT_FLAG_FS_MAPPING = 5,
+	EXTENT_FLAG_MERGED = 6,
+};
+
+struct extent_map {
+	struct rb_node rb_node;
+	u64 start;
+	u64 len;
+	u64 mod_start;
+	u64 mod_len;
+	u64 orig_start;
+	u64 orig_block_len;
+	u64 ram_bytes;
+	u64 block_start;
+	u64 block_len;
+	u64 generation;
+	long unsigned int flags;
+	struct map_lookup *map_lookup;
+	refcount_t refs;
+	unsigned int compress_type;
+	struct list_head list;
+};
+
+struct btrfs_workqueue {
+	struct workqueue_struct *normal_wq;
+	struct btrfs_fs_info *fs_info;
+	struct list_head ordered_list;
+	spinlock_t list_lock;
+	atomic_t pending;
+	int limit_active;
+	int current_active;
+	int thresh;
+	unsigned int count;
+	spinlock_t thres_lock;
+};
+
+enum {
+	BTRFS_ORDERED_REGULAR = 0,
+	BTRFS_ORDERED_NOCOW = 1,
+	BTRFS_ORDERED_PREALLOC = 2,
+	BTRFS_ORDERED_COMPRESSED = 3,
+	BTRFS_ORDERED_DIRECT = 4,
+	BTRFS_ORDERED_IO_DONE = 5,
+	BTRFS_ORDERED_COMPLETE = 6,
+	BTRFS_ORDERED_IOERR = 7,
+	BTRFS_ORDERED_TRUNCATED = 8,
+	BTRFS_ORDERED_LOGGED = 9,
+	BTRFS_ORDERED_LOGGED_CSUM = 10,
+	BTRFS_ORDERED_PENDING = 11,
+	BTRFS_ORDERED_ENCODED = 12,
+};
+
+struct btrfs_ordered_extent {
+	u64 file_offset;
+	u64 num_bytes;
+	u64 ram_bytes;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 offset;
+	u64 bytes_left;
+	u64 outstanding_isize;
+	u64 truncated_len;
+	long unsigned int flags;
+	int compress_type;
+	int qgroup_rsv;
+	refcount_t refs;
+	struct inode *inode;
+	struct list_head list;
+	struct list_head log_list;
+	wait_queue_head_t wait;
+	struct rb_node rb_node;
+	struct list_head root_extent_list;
+	struct btrfs_work work;
+	struct completion completion;
+	struct btrfs_work flush_work;
+	struct list_head work_list;
+	u64 physical;
+	struct block_device *bdev;
+};
+
+enum {
+	BTRFS_STAT_CURR = 0,
+	BTRFS_STAT_PREV = 1,
+	BTRFS_STAT_NR_ENTRIES = 2,
+};
+
+struct extent_inode_elem;
+
+struct prelim_ref {
+	struct rb_node rbnode;
+	u64 root_id;
+	struct btrfs_key key_for_search;
+	int level;
+	int count;
+	struct extent_inode_elem *inode_list;
+	u64 parent;
+	u64 wanted_disk_byte;
+};
+
+struct btrfs_device_info {
+	struct btrfs_device *dev;
+	u64 dev_offset;
+	u64 max_avail;
+	u64 total_avail;
+};
+
+struct btrfs_raid_attr {
+	u8 sub_stripes;
+	u8 dev_stripes;
+	u8 devs_max;
+	u8 devs_min;
+	u8 tolerated_failures;
+	u8 devs_increment;
+	u8 ncopies;
+	u8 nparity;
+	u8 mindev_error;
+	const char raid_name[8];
+	u64 bg_flag;
+};
+
+enum btrfs_flush_state {
+	FLUSH_DELAYED_ITEMS_NR = 1,
+	FLUSH_DELAYED_ITEMS = 2,
+	FLUSH_DELAYED_REFS_NR = 3,
+	FLUSH_DELAYED_REFS = 4,
+	FLUSH_DELALLOC = 5,
+	FLUSH_DELALLOC_WAIT = 6,
+	FLUSH_DELALLOC_FULL = 7,
+	ALLOC_CHUNK = 8,
+	ALLOC_CHUNK_FORCE = 9,
+	RUN_DELAYED_IPUTS = 10,
+	COMMIT_TRANS = 11,
+};
+
+struct btrfs_qgroup_extent_record {
+	struct rb_node node;
+	u64 bytenr;
+	u64 num_bytes;
+	u32 data_rsv;
+	u64 data_rsv_refroot;
+	struct ulist *old_roots;
+};
+
+struct btrfs_qgroup_rsv {
+	u64 values[3];
+};
+
+struct btrfs_qgroup {
+	u64 qgroupid;
+	u64 rfer;
+	u64 rfer_cmpr;
+	u64 excl;
+	u64 excl_cmpr;
+	u64 lim_flags;
+	u64 max_rfer;
+	u64 max_excl;
+	u64 rsv_rfer;
+	u64 rsv_excl;
+	struct btrfs_qgroup_rsv rsv;
+	struct list_head groups;
+	struct list_head members;
+	struct list_head dirty;
+	struct rb_node node;
+	u64 old_refcnt;
+	u64 new_refcnt;
+	struct kobject kobj;
+};
+
+enum {
+	__QGROUP_RESERVE_BIT = 0,
+	QGROUP_RESERVE = 1,
+	__QGROUP_RESERVE_SEQ = 0,
+	__QGROUP_RELEASE_BIT = 1,
+	QGROUP_RELEASE = 2,
+	__QGROUP_RELEASE_SEQ = 1,
+	__QGROUP_FREE_BIT = 2,
+	QGROUP_FREE = 4,
+	__QGROUP_FREE_SEQ = 2,
+};
+
+enum btrfs_rbio_ops {
+	BTRFS_RBIO_WRITE = 0,
+	BTRFS_RBIO_READ_REBUILD = 1,
+	BTRFS_RBIO_PARITY_SCRUB = 2,
+	BTRFS_RBIO_REBUILD_MISSING = 3,
+};
+
+struct sector_ptr;
+
+struct btrfs_raid_bio {
+	struct btrfs_io_context *bioc;
+	struct list_head hash_list;
+	struct list_head stripe_cache;
+	struct work_struct work;
+	struct bio_list bio_list;
+	spinlock_t bio_list_lock;
+	struct list_head plug_list;
+	long unsigned int flags;
+	enum btrfs_rbio_ops operation;
+	u16 nr_pages;
+	u16 nr_sectors;
+	u8 nr_data;
+	u8 real_stripes;
+	u8 stripe_npages;
+	u8 stripe_nsectors;
+	u8 scrubp;
+	int bio_list_bytes;
+	refcount_t refs;
+	atomic_t stripes_pending;
+	wait_queue_head_t io_wait;
+	long unsigned int dbitmap;
+	long unsigned int finish_pbitmap;
+	struct page **stripe_pages;
+	struct sector_ptr *bio_sectors;
+	struct sector_ptr *stripe_sectors;
+	void **finish_pointers;
+	long unsigned int *error_bitmap;
+	u8 *csum_buf;
+	long unsigned int *csum_bitmap;
+};
+
+struct raid56_bio_trace_info {
+	u64 devid;
+	u32 offset;
+	u8 stripe_nr;
+};
+
+struct trace_event_raw_btrfs_transaction_commit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 generation;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__inode {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 blocks;
+	u64 disk_i_size;
+	u64 generation;
+	u64 last_trans;
+	u64 logged_trans;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_get_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 ino;
+	u64 start;
+	u64 len;
+	u64 orig_start;
+	u64 block_start;
+	u64 block_len;
+	long unsigned int flags;
+	int refs;
+	unsigned int compress_type;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_handle_em_exist {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 e_start;
+	u64 e_len;
+	u64 map_start;
+	u64 map_len;
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__file_extent_item_regular {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_obj;
+	u64 ino;
+	loff_t isize;
+	u64 disk_isize;
+	u64 num_bytes;
+	u64 ram_bytes;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 extent_offset;
+	u8 extent_type;
+	u8 compression;
+	u64 extent_start;
+	u64 extent_end;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__file_extent_item_inline {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_obj;
+	u64 ino;
+	loff_t isize;
+	u64 disk_isize;
+	u8 extent_type;
+	u8 compression;
+	u64 extent_start;
+	u64 extent_end;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__ordered_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 file_offset;
+	u64 start;
+	u64 len;
+	u64 disk_len;
+	u64 bytes_left;
+	long unsigned int flags;
+	int compress_type;
+	int refs;
+	u64 root_objectid;
+	u64 truncated_len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__writepage {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	long unsigned int index;
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	char for_kupdate;
+	char for_reclaim;
+	char range_cyclic;
+	long unsigned int writeback_index;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_writepage_end_io_hook {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 start;
+	u64 end;
+	int uptodate;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sync_file {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 ino;
+	u64 parent;
+	int datasync;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sync_fs {
+	struct trace_entry ent;
+	u8 fsid[16];
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_add_block_group {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 offset;
+	u64 size;
+	u64 flags;
+	u64 bytes_used;
+	u64 bytes_super;
+	int create;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_tree_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	u64 parent;
+	u64 ref_root;
+	int level;
+	int type;
+	u64 seq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_data_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	u64 parent;
+	u64 ref_root;
+	u64 owner;
+	u64 offset;
+	int type;
+	u64 seq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_delayed_ref_head {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	int action;
+	int is_data;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__chunk {
+	struct trace_entry ent;
+	u8 fsid[16];
+	int num_stripes;
+	u64 type;
+	int sub_stripes;
+	u64 offset;
+	u64 size;
+	u64 root_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_cow_block {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 buf_start;
+	int refs;
+	u64 cow_start;
+	int buf_level;
+	int cow_level;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_space_reservation {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u32 __data_loc_type;
+	u64 val;
+	u64 bytes;
+	int reserve;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_trigger_flush {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 bytes;
+	int flush;
+	u32 __data_loc_reason;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_flush_space {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 num_bytes;
+	int state;
+	int ret;
+	bool for_preempt;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__reserved_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_find_free_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 num_bytes;
+	u64 empty_size;
+	u64 data;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__reserve_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 len;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_find_cluster {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 bytes;
+	u64 empty_size;
+	u64 min_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_failed_cluster_setup {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_setup_cluster {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bg_objectid;
+	u64 flags;
+	u64 start;
+	u64 max_size;
+	u64 size;
+	int bitmap;
+	char __data[0];
+};
+
+struct trace_event_raw_alloc_extent_state {
+	struct trace_entry ent;
+	const struct extent_state *state;
+	long unsigned int mask;
+	const void *ip;
+	char __data[0];
+};
+
+struct trace_event_raw_free_extent_state {
+	struct trace_entry ent;
+	const struct extent_state *state;
+	const void *ip;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__work {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *work;
+	const void *wq;
+	const void *func;
+	const void *ordered_func;
+	const void *ordered_free;
+	const void *normal_work;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__work__done {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wtag;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_workqueue {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_workqueue_done {
+	struct trace_entry ent;
+	u8 fsid[16];
+	const void *wq;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__qgroup_rsv_data {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 rootid;
+	u64 ino;
+	u64 start;
+	u64 len;
+	u64 reserved;
+	int op;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_qgroup_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 num_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_num_dirty_extents {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 transid;
+	u64 num_dirty_extents;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_qgroup_account_extent {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 transid;
+	u64 bytenr;
+	u64 num_bytes;
+	u64 nr_old_roots;
+	u64 nr_new_roots;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_update_counters {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 qgid;
+	u64 old_rfer;
+	u64 old_excl;
+	u64 cur_old_count;
+	u64 cur_new_count;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_update_reserve {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 qgid;
+	u64 cur_reserved;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_reserve {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_convert {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	char __data[0];
+};
+
+struct trace_event_raw_qgroup_meta_free_all_pertrans {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 refroot;
+	s64 diff;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__prelim_ref {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_id;
+	u64 objectid;
+	u8 type;
+	u64 offset;
+	int level;
+	int old_count;
+	u64 parent;
+	u64 bytenr;
+	int mod_count;
+	u64 tree_size;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_inode_mod_outstanding_extents {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 root_objectid;
+	u64 ino;
+	int mod;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__block_group {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 bytenr;
+	u64 len;
+	u64 used;
+	u64 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_set_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int set_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_clear_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int clear_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_convert_extent_bit {
+	struct trace_entry ent;
+	u8 fsid[16];
+	unsigned int owner;
+	u64 ino;
+	u64 rootid;
+	u64 start;
+	u64 len;
+	unsigned int set_bits;
+	unsigned int clear_bits;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_dump_space_info {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 total_bytes;
+	u64 bytes_used;
+	u64 bytes_pinned;
+	u64 bytes_reserved;
+	u64 bytes_may_use;
+	u64 bytes_readonly;
+	u64 reclaim_size;
+	int clamp;
+	u64 global_reserved;
+	u64 trans_reserved;
+	u64 delayed_refs_reserved;
+	u64 delayed_reserved;
+	u64 free_chunk_space;
+	u64 delalloc_bytes;
+	u64 ordered_bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_reserve_ticket {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 flags;
+	u64 bytes;
+	u64 start_ns;
+	int flush;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_sleep_tree_lock {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 block;
+	u64 generation;
+	u64 start_ns;
+	u64 end_ns;
+	u64 diff_ns;
+	u64 owner;
+	int is_log_tree;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_locking_events {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 block;
+	u64 generation;
+	u64 owner;
+	int is_log_tree;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs__space_info_update {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 type;
+	u64 old;
+	s64 diff;
+	char __data[0];
+};
+
+struct trace_event_raw_btrfs_raid56_bio {
+	struct trace_entry ent;
+	u8 fsid[16];
+	u64 full_stripe;
+	u64 physical;
+	u64 devid;
+	u32 offset;
+	u32 len;
+	u8 opf;
+	u8 total_stripes;
+	u8 real_stripes;
+	u8 nr_data;
+	u8 stripe_nr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_btrfs_transaction_commit {};
+
+struct trace_event_data_offsets_btrfs__inode {};
+
+struct trace_event_data_offsets_btrfs_get_extent {};
+
+struct trace_event_data_offsets_btrfs_handle_em_exist {};
+
+struct trace_event_data_offsets_btrfs__file_extent_item_regular {};
+
+struct trace_event_data_offsets_btrfs__file_extent_item_inline {};
+
+struct trace_event_data_offsets_btrfs__ordered_extent {};
+
+struct trace_event_data_offsets_btrfs__writepage {};
+
+struct trace_event_data_offsets_btrfs_writepage_end_io_hook {};
+
+struct trace_event_data_offsets_btrfs_sync_file {};
+
+struct trace_event_data_offsets_btrfs_sync_fs {};
+
+struct trace_event_data_offsets_btrfs_add_block_group {};
+
+struct trace_event_data_offsets_btrfs_delayed_tree_ref {};
+
+struct trace_event_data_offsets_btrfs_delayed_data_ref {};
+
+struct trace_event_data_offsets_btrfs_delayed_ref_head {};
+
+struct trace_event_data_offsets_btrfs__chunk {};
+
+struct trace_event_data_offsets_btrfs_cow_block {};
+
+struct trace_event_data_offsets_btrfs_space_reservation {
+	u32 type;
+};
+
+struct trace_event_data_offsets_btrfs_trigger_flush {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_btrfs_flush_space {};
+
+struct trace_event_data_offsets_btrfs__reserved_extent {};
+
+struct trace_event_data_offsets_find_free_extent {};
+
+struct trace_event_data_offsets_btrfs__reserve_extent {};
+
+struct trace_event_data_offsets_btrfs_find_cluster {};
+
+struct trace_event_data_offsets_btrfs_failed_cluster_setup {};
+
+struct trace_event_data_offsets_btrfs_setup_cluster {};
+
+struct trace_event_data_offsets_alloc_extent_state {};
+
+struct trace_event_data_offsets_free_extent_state {};
+
+struct trace_event_data_offsets_btrfs__work {};
+
+struct trace_event_data_offsets_btrfs__work__done {};
+
+struct trace_event_data_offsets_btrfs_workqueue {
+	u32 name;
+};
+
+struct trace_event_data_offsets_btrfs_workqueue_done {};
+
+struct trace_event_data_offsets_btrfs__qgroup_rsv_data {};
+
+struct trace_event_data_offsets_btrfs_qgroup_extent {};
+
+struct trace_event_data_offsets_qgroup_num_dirty_extents {};
+
+struct trace_event_data_offsets_btrfs_qgroup_account_extent {};
+
+struct trace_event_data_offsets_qgroup_update_counters {};
+
+struct trace_event_data_offsets_qgroup_update_reserve {};
+
+struct trace_event_data_offsets_qgroup_meta_reserve {};
+
+struct trace_event_data_offsets_qgroup_meta_convert {};
+
+struct trace_event_data_offsets_qgroup_meta_free_all_pertrans {};
+
+struct trace_event_data_offsets_btrfs__prelim_ref {};
+
+struct trace_event_data_offsets_btrfs_inode_mod_outstanding_extents {};
+
+struct trace_event_data_offsets_btrfs__block_group {};
+
+struct trace_event_data_offsets_btrfs_set_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_clear_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_convert_extent_bit {};
+
+struct trace_event_data_offsets_btrfs_dump_space_info {};
+
+struct trace_event_data_offsets_btrfs_reserve_ticket {};
+
+struct trace_event_data_offsets_btrfs_sleep_tree_lock {};
+
+struct trace_event_data_offsets_btrfs_locking_events {};
+
+struct trace_event_data_offsets_btrfs__space_info_update {};
+
+struct trace_event_data_offsets_btrfs_raid56_bio {};
+
+typedef void (*btf_trace_btrfs_transaction_commit)(void *, const struct btrfs_fs_info *);
+
+typedef void (*btf_trace_btrfs_inode_new)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_inode_request)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_inode_evict)(void *, const struct inode *);
+
+typedef void (*btf_trace_btrfs_get_extent)(void *, const struct btrfs_root *, const struct btrfs_inode *, const struct extent_map *);
+
+typedef void (*btf_trace_btrfs_handle_em_exist)(void *, const struct btrfs_fs_info *, const struct extent_map *, const struct extent_map *, u64, u64);
+
+typedef void (*btf_trace_btrfs_get_extent_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);
+
+typedef void (*btf_trace_btrfs_truncate_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);
+
+typedef void (*btf_trace_btrfs_get_extent_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);
+
+typedef void (*btf_trace_btrfs_truncate_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);
+
+typedef void (*btf_trace_btrfs_ordered_extent_add)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_remove)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_start)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_put)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_range)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_first_range)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_for_logging)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_lookup_first)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_split)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_dec_test_pending)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace_btrfs_ordered_extent_mark_finished)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);
+
+typedef void (*btf_trace___extent_writepage)(void *, const struct page *, const struct inode *, const struct writeback_control *);
+
+typedef void (*btf_trace_btrfs_writepage_end_io_hook)(void *, const struct btrfs_inode *, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_sync_file)(void *, const struct file *, int);
+
+typedef void (*btf_trace_btrfs_sync_fs)(void *, const struct btrfs_fs_info *, int);
+
+typedef void (*btf_trace_btrfs_add_block_group)(void *, const struct btrfs_fs_info *, const struct btrfs_block_group *, int);
+
+typedef void (*btf_trace_add_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);
+
+typedef void (*btf_trace_run_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);
+
+typedef void (*btf_trace_add_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);
+
+typedef void (*btf_trace_run_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);
+
+typedef void (*btf_trace_add_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);
+
+typedef void (*btf_trace_run_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);
+
+typedef void (*btf_trace_btrfs_chunk_alloc)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);
+
+typedef void (*btf_trace_btrfs_chunk_free)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);
+
+typedef void (*btf_trace_btrfs_cow_block)(void *, const struct btrfs_root *, const struct extent_buffer *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_space_reservation)(void *, const struct btrfs_fs_info *, const char *, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_trigger_flush)(void *, const struct btrfs_fs_info *, u64, u64, int, const char *);
+
+typedef void (*btf_trace_btrfs_flush_space)(void *, const struct btrfs_fs_info *, u64, u64, int, int, bool);
+
+typedef void (*btf_trace_btrfs_reserved_extent_alloc)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserved_extent_free)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_find_free_extent)(void *, const struct btrfs_root *, u64, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserve_extent)(void *, const struct btrfs_block_group *, u64, u64);
+
+typedef void (*btf_trace_btrfs_reserve_extent_cluster)(void *, const struct btrfs_block_group *, u64, u64);
+
+typedef void (*btf_trace_btrfs_find_cluster)(void *, const struct btrfs_block_group *, u64, u64, u64, u64);
+
+typedef void (*btf_trace_btrfs_failed_cluster_setup)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_setup_cluster)(void *, const struct btrfs_block_group *, const struct btrfs_free_cluster *, u64, int);
+
+typedef void (*btf_trace_alloc_extent_state)(void *, const struct extent_state *, gfp_t, long unsigned int);
+
+typedef void (*btf_trace_free_extent_state)(void *, const struct extent_state *, long unsigned int);
+
+typedef void (*btf_trace_btrfs_work_queued)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_work_sched)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_all_work_done)(void *, const struct btrfs_fs_info *, const void *);
+
+typedef void (*btf_trace_btrfs_ordered_sched)(void *, const struct btrfs_work *);
+
+typedef void (*btf_trace_btrfs_workqueue_alloc)(void *, const struct btrfs_workqueue *, const char *);
+
+typedef void (*btf_trace_btrfs_workqueue_destroy)(void *, const struct btrfs_workqueue *);
+
+typedef void (*btf_trace_btrfs_qgroup_reserve_data)(void *, const struct inode *, u64, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_qgroup_release_data)(void *, const struct inode *, u64, u64, u64, int);
+
+typedef void (*btf_trace_btrfs_qgroup_account_extents)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);
+
+typedef void (*btf_trace_btrfs_qgroup_trace_extent)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);
+
+typedef void (*btf_trace_qgroup_num_dirty_extents)(void *, const struct btrfs_fs_info *, u64, u64);
+
+typedef void (*btf_trace_btrfs_qgroup_account_extent)(void *, const struct btrfs_fs_info *, u64, u64, u64, u64, u64);
+
+typedef void (*btf_trace_qgroup_update_counters)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup *, u64, u64);
+
+typedef void (*btf_trace_qgroup_update_reserve)(void *, struct btrfs_fs_info *, struct btrfs_qgroup *, s64, int);
+
+typedef void (*btf_trace_qgroup_meta_reserve)(void *, struct btrfs_root *, s64, int);
+
+typedef void (*btf_trace_qgroup_meta_convert)(void *, struct btrfs_root *, s64);
+
+typedef void (*btf_trace_qgroup_meta_free_all_pertrans)(void *, struct btrfs_root *);
+
+typedef void (*btf_trace_btrfs_prelim_ref_merge)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);
+
+typedef void (*btf_trace_btrfs_prelim_ref_insert)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);
+
+typedef void (*btf_trace_btrfs_inode_mod_outstanding_extents)(void *, const struct btrfs_root *, u64, int);
+
+typedef void (*btf_trace_btrfs_remove_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_add_unused_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_add_reclaim_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_reclaim_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_skip_unused_block_group)(void *, const struct btrfs_block_group *);
+
+typedef void (*btf_trace_btrfs_set_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);
+
+typedef void (*btf_trace_btrfs_clear_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);
+
+typedef void (*btf_trace_btrfs_convert_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int, unsigned int);
+
+typedef void (*btf_trace_btrfs_done_preemptive_reclaim)(void *, struct btrfs_fs_info *, const struct btrfs_space_info *);
+
+typedef void (*btf_trace_btrfs_fail_all_tickets)(void *, struct btrfs_fs_info *, const struct btrfs_space_info *);
+
+typedef void (*btf_trace_btrfs_reserve_ticket)(void *, const struct btrfs_fs_info *, u64, u64, u64, int, int);
+
+typedef void (*btf_trace_btrfs_tree_read_lock)(void *, const struct extent_buffer *, u64);
+
+typedef void (*btf_trace_btrfs_tree_lock)(void *, const struct extent_buffer *, u64);
+
+typedef void (*btf_trace_btrfs_tree_unlock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_unlock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_unlock_blocking)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_set_lock_blocking_read)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_set_lock_blocking_write)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_try_tree_read_lock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_try_tree_write_lock)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_btrfs_tree_read_lock_atomic)(void *, const struct extent_buffer *);
+
+typedef void (*btf_trace_update_bytes_may_use)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);
+
+typedef void (*btf_trace_update_bytes_pinned)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);
+
+typedef void (*btf_trace_raid56_read_partial)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_write_stripe)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_write_stripe)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_read)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+typedef void (*btf_trace_raid56_scrub_read_recover)(void *, const struct btrfs_raid_bio *, const struct bio *, const struct raid56_bio_trace_info *);
+
+enum {
+	Opt_acl___3 = 0,
+	Opt_noacl = 1,
+	Opt_clear_cache = 2,
+	Opt_commit_interval = 3,
+	Opt_compress = 4,
+	Opt_compress_force = 5,
+	Opt_compress_force_type = 6,
+	Opt_compress_type = 7,
+	Opt_degraded = 8,
+	Opt_device = 9,
+	Opt_fatal_errors = 10,
+	Opt_flushoncommit = 11,
+	Opt_noflushoncommit = 12,
+	Opt_max_inline = 13,
+	Opt_barrier___2 = 14,
+	Opt_nobarrier___2 = 15,
+	Opt_datacow = 16,
+	Opt_nodatacow = 17,
+	Opt_datasum = 18,
+	Opt_nodatasum = 19,
+	Opt_defrag = 20,
+	Opt_nodefrag = 21,
+	Opt_discard___4 = 22,
+	Opt_nodiscard___3 = 23,
+	Opt_discard_mode = 24,
+	Opt_norecovery___2 = 25,
+	Opt_ratio = 26,
+	Opt_rescan_uuid_tree = 27,
+	Opt_skip_balance = 28,
+	Opt_space_cache = 29,
+	Opt_no_space_cache = 30,
+	Opt_space_cache_version = 31,
+	Opt_ssd = 32,
+	Opt_nossd = 33,
+	Opt_ssd_spread = 34,
+	Opt_nossd_spread = 35,
+	Opt_subvol = 36,
+	Opt_subvol_empty = 37,
+	Opt_subvolid = 38,
+	Opt_thread_pool = 39,
+	Opt_treelog = 40,
+	Opt_notreelog = 41,
+	Opt_user_subvol_rm_allowed = 42,
+	Opt_rescue = 43,
+	Opt_usebackuproot = 44,
+	Opt_nologreplay = 45,
+	Opt_ignorebadroots = 46,
+	Opt_ignoredatacsums = 47,
+	Opt_rescue_all = 48,
+	Opt_recovery = 49,
+	Opt_inode_cache = 50,
+	Opt_noinode_cache = 51,
+	Opt_check_integrity = 52,
+	Opt_check_integrity_including_extent_data = 53,
+	Opt_check_integrity_print_mask = 54,
+	Opt_enospc_debug = 55,
+	Opt_noenospc_debug = 56,
+	Opt_err___8 = 57,
+};
+
+struct init_sequence {
+	int (*init_func)();
+	void (*exit_func)();
+};
+
+struct btrfs_csum_item {
+	__u8 csum;
+};
+
+struct btrfs_ordered_sum {
+	u64 bytenr;
+	int len;
+	struct list_head list;
+	u8 sums[0];
+};
+
+enum {
+	BTRFS_INODE_FLUSH_ON_CLOSE = 0,
+	BTRFS_INODE_DUMMY = 1,
+	BTRFS_INODE_IN_DEFRAG = 2,
+	BTRFS_INODE_HAS_ASYNC_EXTENT = 3,
+	BTRFS_INODE_NEEDS_FULL_SYNC = 4,
+	BTRFS_INODE_COPY_EVERYTHING = 5,
+	BTRFS_INODE_IN_DELALLOC_LIST = 6,
+	BTRFS_INODE_HAS_PROPS = 7,
+	BTRFS_INODE_SNAPSHOT_FLUSH = 8,
+	BTRFS_INODE_NO_XATTRS = 9,
+	BTRFS_INODE_NO_DELALLOC_FLUSH = 10,
+	BTRFS_INODE_VERITY_IN_PROGRESS = 11,
+	BTRFS_INODE_FREE_SPACE_INODE = 12,
+};
+
+struct btrfs_bio;
+
+typedef void (*btrfs_bio_end_io_t)(struct btrfs_bio *);
+
+struct btrfs_bio {
+	unsigned int mirror_num: 7;
+	unsigned int is_metadata: 1;
+	struct bvec_iter iter;
+	int: 24;
+	u64 file_offset;
+	struct btrfs_device *device;
+	union {
+		struct {
+			u8 *csum;
+			u8 csum_inline[64];
+		};
+		struct btrfs_tree_parent_check parent_check;
+	};
+	btrfs_bio_end_io_t end_io;
+	void *private;
+	struct work_struct end_io_work;
+	struct bio bio;
+} __attribute__((packed));
+
+struct btrfs_inode_extref {
+	__le64 parent_objectid;
+	__le64 index;
+	__le16 name_len;
+	__u8 name[0];
+} __attribute__((packed));
+
+struct btrfs_truncate_control {
+	struct btrfs_inode *inode;
+	u64 new_size;
+	u64 extents_found;
+	u64 last_size;
+	u64 sub_bytes;
+	u64 ino;
+	u32 min_type;
+	bool skip_ref_updates;
+	bool clear_extent_range;
+};
+
+struct btrfs_ioctl_encoded_io_args {
+	const struct iovec *iov;
+	long unsigned int iovcnt;
+	__s64 offset;
+	__u64 flags;
+	__u64 len;
+	__u64 unencoded_len;
+	__u64 unencoded_offset;
+	__u32 compression;
+	__u32 encryption;
+	__u8 reserved[64];
+};
+
+struct btrfs_subpage_info {
+	unsigned int bitmap_nr_bits;
+	unsigned int total_nr_bits;
+	unsigned int uptodate_offset;
+	unsigned int error_offset;
+	unsigned int dirty_offset;
+	unsigned int writeback_offset;
+	unsigned int ordered_offset;
+	unsigned int checked_offset;
+};
+
+struct btrfs_replace_extent_info {
+	u64 disk_offset;
+	u64 disk_len;
+	u64 data_offset;
+	u64 data_len;
+	u64 file_offset;
+	char *extent_buf;
+	bool is_new_extent;
+	bool update_times;
+	int qgroup_reserved;
+	int insertions;
+};
+
+struct btrfs_drop_extents_args {
+	struct btrfs_path *path;
+	u64 start;
+	u64 end;
+	bool drop_cache;
+	bool replace_extent;
+	u32 extent_item_size;
+	u64 drop_end;
+	u64 bytes_found;
+	bool extent_inserted;
+};
+
+struct btrfs_file_private {
+	void *filldir_buf;
+	struct extent_state *llseek_cached_state;
+};
+
+enum btrfs_ilock_type {
+	__BTRFS_ILOCK_SHARED_BIT = 0,
+	BTRFS_ILOCK_SHARED = 1,
+	__BTRFS_ILOCK_SHARED_SEQ = 0,
+	__BTRFS_ILOCK_TRY_BIT = 1,
+	BTRFS_ILOCK_TRY = 2,
+	__BTRFS_ILOCK_TRY_SEQ = 1,
+	__BTRFS_ILOCK_MMAP_BIT = 2,
+	BTRFS_ILOCK_MMAP = 4,
+	__BTRFS_ILOCK_MMAP_SEQ = 2,
+};
+
+struct btrfs_log_ctx {
+	int log_ret;
+	int log_transid;
+	bool log_new_dentries;
+	bool logging_new_name;
+	bool logging_new_delayed_dentries;
+	bool logged_before;
+	struct inode *inode;
+	struct list_head list;
+	struct list_head ordered_extents;
+	struct list_head conflict_inodes;
+	int num_conflict_inodes;
+	bool logging_conflict_inodes;
+};
+
+struct falloc_range {
+	struct list_head list;
+	u64 start;
+	u64 len;
+};
+
+enum {
+	RANGE_BOUNDARY_WRITTEN_EXTENT = 0,
+	RANGE_BOUNDARY_PREALLOC_EXTENT = 1,
+	RANGE_BOUNDARY_HOLE = 2,
+};
+
+struct iomap_dio;
+
+enum btrfs_delayed_ref_flags {
+	BTRFS_DELAYED_REFS_FLUSHING = 0,
+};
+
+enum {
+	____TRANS_FREEZABLE_BIT = 0,
+	__TRANS_FREEZABLE = 1,
+	____TRANS_FREEZABLE_SEQ = 0,
+	____TRANS_START_BIT = 1,
+	__TRANS_START = 2,
+	____TRANS_START_SEQ = 1,
+	____TRANS_ATTACH_BIT = 2,
+	__TRANS_ATTACH = 4,
+	____TRANS_ATTACH_SEQ = 2,
+	____TRANS_JOIN_BIT = 3,
+	__TRANS_JOIN = 8,
+	____TRANS_JOIN_SEQ = 3,
+	____TRANS_JOIN_NOLOCK_BIT = 4,
+	__TRANS_JOIN_NOLOCK = 16,
+	____TRANS_JOIN_NOLOCK_SEQ = 4,
+	____TRANS_DUMMY_BIT = 5,
+	__TRANS_DUMMY = 32,
+	____TRANS_DUMMY_SEQ = 5,
+	____TRANS_JOIN_NOSTART_BIT = 6,
+	__TRANS_JOIN_NOSTART = 64,
+	____TRANS_JOIN_NOSTART_SEQ = 6,
+};
+
+enum btrfs_wq_submit_cmd {
+	WQ_SUBMIT_METADATA = 0,
+	WQ_SUBMIT_DATA = 1,
+	WQ_SUBMIT_DATA_DIO = 2,
+};
+
+enum btrfs_map_op {
+	BTRFS_MAP_READ = 0,
+	BTRFS_MAP_WRITE = 1,
+	BTRFS_MAP_DISCARD = 2,
+	BTRFS_MAP_GET_READ_MIRRORS = 3,
+};
+
+enum btrfs_disk_cache_state {
+	BTRFS_DC_WRITTEN = 0,
+	BTRFS_DC_ERROR = 1,
+	BTRFS_DC_CLEAR = 2,
+	BTRFS_DC_SETUP = 3,
+};
+
+struct async_submit_bio {
+	struct btrfs_inode *inode;
+	struct bio *bio;
+	enum btrfs_wq_submit_cmd submit_cmd;
+	int mirror_num;
+	u64 dio_file_offset;
+	struct btrfs_work work;
+	blk_status_t status;
+};
+
+enum {
+	__PAGE_UNLOCK_BIT = 0,
+	PAGE_UNLOCK = 1,
+	__PAGE_UNLOCK_SEQ = 0,
+	__PAGE_START_WRITEBACK_BIT = 1,
+	PAGE_START_WRITEBACK = 2,
+	__PAGE_START_WRITEBACK_SEQ = 1,
+	__PAGE_END_WRITEBACK_BIT = 2,
+	PAGE_END_WRITEBACK = 4,
+	__PAGE_END_WRITEBACK_SEQ = 2,
+	__PAGE_SET_ORDERED_BIT = 3,
+	PAGE_SET_ORDERED = 8,
+	__PAGE_SET_ORDERED_SEQ = 3,
+	__PAGE_SET_ERROR_BIT = 4,
+	PAGE_SET_ERROR = 16,
+	__PAGE_SET_ERROR_SEQ = 4,
+	__PAGE_LOCK_BIT = 5,
+	PAGE_LOCK = 32,
+	__PAGE_LOCK_SEQ = 5,
+};
+
+struct btrfs_new_inode_args {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool orphan;
+	bool subvol;
+	struct posix_acl *default_acl;
+	struct posix_acl *acl;
+	struct fscrypt_name fname;
+};
+
+struct btrfs_io_geometry {
+	u64 len;
+	u64 offset;
+	u32 stripe_len;
+	u32 stripe_offset;
+	u64 stripe_nr;
+	u64 raid56_stripe_offset;
+};
+
+struct btrfs_swapfile_pin {
+	struct rb_node node;
+	void *ptr;
+	struct inode *inode;
+	bool is_block_group;
+	int bg_extent_count;
+};
+
+struct btrfs_subpage {
+	spinlock_t lock;
+	atomic_t readers;
+	union {
+		atomic_t eb_refs;
+		atomic_t writers;
+	};
+	long unsigned int bitmaps[0];
+};
+
+struct btrfs_iget_args {
+	u64 ino;
+	struct btrfs_root *root;
+};
+
+struct btrfs_dio_data {
+	ssize_t submitted;
+	struct extent_changeset *data_reserved;
+	bool data_space_reserved;
+	bool nocow_done;
+};
+
+struct btrfs_dio_private {
+	struct btrfs_inode *inode;
+	u64 file_offset;
+	u32 bytes;
+	refcount_t refs;
+	u8 *csums;
+	struct bio bio;
+};
+
+struct btrfs_rename_ctx {
+	u64 index;
+};
+
+struct async_extent {
+	u64 start;
+	u64 ram_size;
+	u64 compressed_size;
+	struct page **pages;
+	long unsigned int nr_pages;
+	int compress_type;
+	struct list_head list;
+};
+
+struct async_cow;
+
+struct async_chunk {
+	struct btrfs_inode *inode;
+	struct page *locked_page;
+	u64 start;
+	u64 end;
+	blk_opf_t write_flags;
+	struct list_head extents;
+	struct cgroup_subsys_state *blkcg_css;
+	struct btrfs_work work;
+	struct async_cow *async_cow;
+};
+
+struct async_cow {
+	atomic_t num_chunks;
+	struct async_chunk chunks[0];
+};
+
+struct can_nocow_file_extent_args {
+	u64 start;
+	u64 end;
+	bool writeback_path;
+	bool strict;
+	bool free_path;
+	u64 disk_bytenr;
+	u64 disk_num_bytes;
+	u64 extent_offset;
+	u64 num_bytes;
+};
+
+struct btrfs_writepage_fixup {
+	struct page *page;
+	struct btrfs_inode *inode;
+	struct btrfs_work work;
+};
+
+struct dir_entry___2 {
+	u64 ino;
+	u64 offset;
+	unsigned int type;
+	int name_len;
+};
+
+struct btrfs_delalloc_work {
+	struct inode *inode;
+	struct completion completion;
+	struct list_head list;
+	struct btrfs_work work;
+};
+
+struct btrfs_encoded_read_private {
+	struct btrfs_inode *inode;
+	u64 file_offset;
+	wait_queue_head_t wait;
+	atomic_t pending;
+	blk_status_t status;
+	bool skip_csum;
+};
+
+struct btrfs_swap_info {
+	u64 start;
+	u64 block_start;
+	u64 block_len;
+	u64 lowest_ppage;
+	u64 highest_ppage;
+	long unsigned int nr_pages;
+	int nr_extents;
+};
+
+struct btrfs_ioctl_defrag_range_args {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+	__u32 extent_thresh;
+	__u32 compress_type;
+	__u32 unused[4];
+};
+
+struct inode_defrag {
+	struct rb_node rb_node;
+	u64 ino;
+	u64 transid;
+	u64 root;
+	u32 extent_thresh;
+};
+
+struct defrag_target_range {
+	struct list_head list;
+	u64 start;
+	u64 len;
+};
+
+enum btrfs_feature_set {
+	FEAT_COMPAT = 0,
+	FEAT_COMPAT_RO = 1,
+	FEAT_INCOMPAT = 2,
+	FEAT_MAX = 3,
+};
+
+struct btrfs_feature_attr {
+	struct kobj_attribute kobj_attr;
+	enum btrfs_feature_set feature_set;
+	u64 feature_bit;
+};
+
+struct raid_kobject {
+	u64 flags;
+	struct kobject kobj;
+};
+
+enum {
+	WORK_DONE_BIT = 0,
+	WORK_ORDER_DONE_BIT = 1,
+};
+
+struct btrfs_ioctl_qgroup_limit_args {
+	__u64 qgroupid;
+	struct btrfs_qgroup_limit lim;
+};
+
+struct btrfs_ioctl_vol_args_v2 {
+	__s64 fd;
+	__u64 transid;
+	__u64 flags;
+	union {
+		struct {
+			__u64 size;
+			struct btrfs_qgroup_inherit *qgroup_inherit;
+		};
+		__u64 unused[4];
+	};
+	union {
+		char name[4040];
+		__u64 devid;
+		__u64 subvolid;
+	};
+};
+
+struct btrfs_ioctl_scrub_args {
+	__u64 devid;
+	__u64 start;
+	__u64 end;
+	__u64 flags;
+	struct btrfs_scrub_progress progress;
+	__u64 unused[109];
+};
+
+struct btrfs_ioctl_dev_replace_start_params {
+	__u64 srcdevid;
+	__u64 cont_reading_from_srcdev_mode;
+	__u8 srcdev_name[1025];
+	__u8 tgtdev_name[1025];
+};
+
+struct btrfs_ioctl_dev_replace_status_params {
+	__u64 replace_state;
+	__u64 progress_1000;
+	__u64 time_started;
+	__u64 time_stopped;
+	__u64 num_write_errors;
+	__u64 num_uncorrectable_read_errors;
+};
+
+struct btrfs_ioctl_dev_replace_args {
+	__u64 cmd;
+	__u64 result;
+	union {
+		struct btrfs_ioctl_dev_replace_start_params start;
+		struct btrfs_ioctl_dev_replace_status_params status;
+	};
+	__u64 spare[64];
+};
+
+struct btrfs_ioctl_dev_info_args {
+	__u64 devid;
+	__u8 uuid[16];
+	__u64 bytes_used;
+	__u64 total_bytes;
+	__u64 unused[379];
+	__u8 path[1024];
+};
+
+struct btrfs_ioctl_fs_info_args {
+	__u64 max_id;
+	__u64 num_devices;
+	__u8 fsid[16];
+	__u32 nodesize;
+	__u32 sectorsize;
+	__u32 clone_alignment;
+	__u16 csum_type;
+	__u16 csum_size;
+	__u64 flags;
+	__u64 generation;
+	__u8 metadata_uuid[16];
+	__u8 reserved[944];
+};
+
+struct btrfs_ioctl_feature_flags {
+	__u64 compat_flags;
+	__u64 compat_ro_flags;
+	__u64 incompat_flags;
+};
+
+struct btrfs_ioctl_balance_args {
+	__u64 flags;
+	__u64 state;
+	struct btrfs_balance_args data;
+	struct btrfs_balance_args meta;
+	struct btrfs_balance_args sys;
+	struct btrfs_balance_progress stat;
+	__u64 unused[72];
+};
+
+struct btrfs_ioctl_ino_lookup_args {
+	__u64 treeid;
+	__u64 objectid;
+	char name[4080];
+};
+
+struct btrfs_ioctl_ino_lookup_user_args {
+	__u64 dirid;
+	__u64 treeid;
+	char name[256];
+	char path[3824];
+};
+
+struct btrfs_ioctl_search_key {
+	__u64 tree_id;
+	__u64 min_objectid;
+	__u64 max_objectid;
+	__u64 min_offset;
+	__u64 max_offset;
+	__u64 min_transid;
+	__u64 max_transid;
+	__u32 min_type;
+	__u32 max_type;
+	__u32 nr_items;
+	__u32 unused;
+	__u64 unused1;
+	__u64 unused2;
+	__u64 unused3;
+	__u64 unused4;
+};
+
+struct btrfs_ioctl_search_header {
+	__u64 transid;
+	__u64 objectid;
+	__u64 offset;
+	__u32 type;
+	__u32 len;
+};
+
+struct btrfs_ioctl_search_args {
+	struct btrfs_ioctl_search_key key;
+	char buf[3992];
+};
+
+struct btrfs_ioctl_search_args_v2 {
+	struct btrfs_ioctl_search_key key;
+	__u64 buf_size;
+	__u64 buf[0];
+};
+
+struct btrfs_ioctl_space_info {
+	__u64 flags;
+	__u64 total_bytes;
+	__u64 used_bytes;
+};
+
+struct btrfs_ioctl_space_args {
+	__u64 space_slots;
+	__u64 total_spaces;
+	struct btrfs_ioctl_space_info spaces[0];
+};
+
+struct btrfs_data_container {
+	__u32 bytes_left;
+	__u32 bytes_missing;
+	__u32 elem_cnt;
+	__u32 elem_missed;
+	__u64 val[0];
+};
+
+struct btrfs_ioctl_ino_path_args {
+	__u64 inum;
+	__u64 size;
+	__u64 reserved[4];
+	__u64 fspath;
+};
+
+struct btrfs_ioctl_logical_ino_args {
+	__u64 logical;
+	__u64 size;
+	__u64 reserved[3];
+	__u64 flags;
+	__u64 inodes;
+};
+
+struct btrfs_ioctl_get_dev_stats {
+	__u64 devid;
+	__u64 nr_items;
+	__u64 flags;
+	__u64 values[5];
+	__u64 unused[121];
+};
+
+struct btrfs_ioctl_quota_ctl_args {
+	__u64 cmd;
+	__u64 status;
+};
+
+struct btrfs_ioctl_quota_rescan_args {
+	__u64 flags;
+	__u64 progress;
+	__u64 reserved[6];
+};
+
+struct btrfs_ioctl_qgroup_assign_args {
+	__u64 assign;
+	__u64 src;
+	__u64 dst;
+};
+
+struct btrfs_ioctl_qgroup_create_args {
+	__u64 create;
+	__u64 qgroupid;
+};
+
+struct btrfs_ioctl_timespec {
+	__u64 sec;
+	__u32 nsec;
+};
+
+struct btrfs_ioctl_received_subvol_args {
+	char uuid[16];
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec stime;
+	struct btrfs_ioctl_timespec rtime;
+	__u64 flags;
+	__u64 reserved[16];
+};
+
+struct btrfs_ioctl_send_args {
+	__s64 send_fd;
+	__u64 clone_sources_count;
+	__u64 *clone_sources;
+	__u64 parent_root;
+	__u64 flags;
+	__u32 version;
+	__u8 reserved[28];
+};
+
+struct btrfs_ioctl_get_subvol_info_args {
+	__u64 treeid;
+	char name[256];
+	__u64 parent_id;
+	__u64 dirid;
+	__u64 generation;
+	__u64 flags;
+	__u8 uuid[16];
+	__u8 parent_uuid[16];
+	__u8 received_uuid[16];
+	__u64 ctransid;
+	__u64 otransid;
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec ctime;
+	struct btrfs_ioctl_timespec otime;
+	struct btrfs_ioctl_timespec stime;
+	struct btrfs_ioctl_timespec rtime;
+	__u64 reserved[8];
+};
+
+struct btrfs_ioctl_get_subvol_rootref_args {
+	__u64 min_treeid;
+	struct {
+		__u64 treeid;
+		__u64 dirid;
+	} rootref[255];
+	__u8 num_items;
+	__u8 align[7];
+};
+
+enum btrfs_err_code {
+	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
+	BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET = 2,
+	BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET = 3,
+	BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET = 4,
+	BTRFS_ERROR_DEV_TGT_REPLACE = 5,
+	BTRFS_ERROR_DEV_MISSING_NOT_FOUND = 6,
+	BTRFS_ERROR_DEV_ONLY_WRITABLE = 7,
+	BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS = 8,
+	BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET = 9,
+	BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET = 10,
+};
+
+struct btrfs_dev_lookup_args {
+	u64 devid;
+	u8 *uuid;
+	u8 *fsid;
+	bool missing;
+};
+
+struct inode_fs_paths {
+	struct btrfs_path *btrfs_path;
+	struct btrfs_root *fs_root;
+	struct btrfs_data_container *fspath;
+};
+
+struct btrfs_ioctl_timespec_32 {
+	__u64 sec;
+	__u32 nsec;
+} __attribute__((packed));
+
+struct btrfs_ioctl_received_subvol_args_32 {
+	char uuid[16];
+	__u64 stransid;
+	__u64 rtransid;
+	struct btrfs_ioctl_timespec_32 stime;
+	struct btrfs_ioctl_timespec_32 rtime;
+	__u64 flags;
+	__u64 reserved[16];
+} __attribute__((packed));
+
+struct btrfs_ioctl_send_args_32 {
+	__s64 send_fd;
+	__u64 clone_sources_count;
+	compat_uptr_t clone_sources;
+	__u64 parent_root;
+	__u64 flags;
+	__u32 version;
+	__u8 reserved[28];
+} __attribute__((packed));
+
+struct btrfs_ioctl_encoded_io_args_32 {
+	compat_uptr_t iov;
+	compat_ulong_t iovcnt;
+	__s64 offset;
+	__u64 flags;
+	__u64 len;
+	__u64 unencoded_len;
+	__u64 unencoded_offset;
+	__u32 compression;
+	__u32 encryption;
+	__u8 reserved[64];
+};
+
+struct btrfs_disk_balance_args {
+	__le64 profiles;
+	union {
+		__le64 usage;
+		struct {
+			__le32 usage_min;
+			__le32 usage_max;
+		};
+	};
+	__le64 devid;
+	__le64 pstart;
+	__le64 pend;
+	__le64 vstart;
+	__le64 vend;
+	__le64 target;
+	__le64 flags;
+	union {
+		__le64 limit;
+		struct {
+			__le32 limit_min;
+			__le32 limit_max;
+		};
+	};
+	__le32 stripes_min;
+	__le32 stripes_max;
+	__le64 unused[6];
+};
+
+struct btrfs_balance_item {
+	__le64 flags;
+	struct btrfs_disk_balance_args data;
+	struct btrfs_disk_balance_args meta;
+	struct btrfs_disk_balance_args sys;
+	__le64 unused[4];
+};
+
+struct btrfs_dev_stats_item {
+	__le64 values[5];
+};
+
+struct alloc_chunk_ctl {
+	u64 start;
+	u64 type;
+	int num_stripes;
+	int sub_stripes;
+	int dev_stripes;
+	int devs_max;
+	int devs_min;
+	int devs_increment;
+	int ncopies;
+	int nparity;
+	u64 max_stripe_size;
+	u64 max_chunk_size;
+	u64 dev_extent_min;
+	u64 stripe_size;
+	u64 chunk_size;
+	int ndevs;
+};
+
+struct rb_simple_node {
+	struct rb_node rb_node;
+	u64 bytenr;
+};
+
+struct io_failure_record {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	struct page *page;
+	u64 len;
+	u64 logical;
+	int this_mirror;
+	int failed_mirror;
+	int num_copies;
+};
+
+struct btrfs_trans_handle;
+
+struct btrfs_backref_shared_cache_entry {
+	u64 bytenr;
+	u64 gen;
+	bool is_shared;
+};
+
+struct btrfs_backref_share_check_ctx {
+	struct ulist refs;
+	u64 curr_leaf_bytenr;
+	u64 prev_leaf_bytenr;
+	struct btrfs_backref_shared_cache_entry path_cache_entries[8];
+	bool use_path_cache;
+	struct {
+		u64 bytenr;
+		bool is_shared;
+	} prev_extents_cache[8];
+	int prev_extents_cache_slot;
+};
+
+enum btrfs_subpage_type {
+	BTRFS_SUBPAGE_METADATA = 0,
+	BTRFS_SUBPAGE_DATA = 1,
+};
+
+struct btrfs_bio_ctrl {
+	struct bio *bio;
+	int mirror_num;
+	enum btrfs_compression_type compress_type;
+	u32 len_to_stripe_boundary;
+	u32 len_to_oe_boundary;
+	btrfs_bio_end_io_t end_io_func;
+	struct btrfs_tree_parent_check *parent_check;
+	bool extent_locked;
+	bool sync_io;
+};
+
+struct processed_extent {
+	struct btrfs_inode *inode;
+	u64 start;
+	u64 end;
+	bool uptodate;
+};
+
+struct fiemap_cache {
+	u64 offset;
+	u64 phys;
+	u64 len;
+	u32 flags;
+	bool cached;
+};
+
+struct btrfs_fid {
+	u64 objectid;
+	u64 root_objectid;
+	u32 gen;
+	u64 parent_objectid;
+	u32 parent_gen;
+	u64 parent_root_objectid;
+} __attribute__((packed));
+
+struct btrfs_free_space_entry {
+	__le64 offset;
+	__le64 bytes;
+	__u8 type;
+} __attribute__((packed));
+
+struct btrfs_free_space_header {
+	struct btrfs_disk_key location;
+	__le64 generation;
+	__le64 num_entries;
+	__le64 num_bitmaps;
+} __attribute__((packed));
+
+struct btrfs_trim_range {
+	u64 start;
+	u64 bytes;
+	struct list_head list;
+};
+
+struct compressed_bio {
+	refcount_t pending_ios;
+	unsigned int nr_pages;
+	struct page **compressed_pages;
+	struct inode *inode;
+	u64 start;
+	unsigned int len;
+	unsigned int compressed_len;
+	u8 compress_type;
+	bool writeback;
+	blk_status_t status;
+	union {
+		struct bio *orig_bio;
+		struct work_struct write_end_work;
+	};
+};
+
+struct workspace_manager {
+	struct list_head idle_ws;
+	spinlock_t ws_lock;
+	int free_ws;
+	atomic_t total_ws;
+	wait_queue_head_t ws_wait;
+};
+
+struct btrfs_compress_op {
+	struct workspace_manager *workspace_manager;
+	unsigned int max_level;
+	unsigned int default_level;
+};
+
+struct workspace___2 {
+	void *mem;
+	void *buf;
+	void *cbuf;
+	struct list_head list;
+};
+
+struct workspace___3 {
+	z_stream strm;
+	char *buf;
+	unsigned int buf_size;
+	struct list_head list;
+	int level;
+};
+
+struct btrfs_dir_log_item {
+	__le64 end;
+};
+
+enum btrfs_delayed_item_type {
+	BTRFS_DELAYED_INSERTION_ITEM = 0,
+	BTRFS_DELAYED_DELETION_ITEM = 1,
+};
+
+struct btrfs_delayed_item {
+	struct rb_node rb_node;
+	u64 index;
+	struct list_head tree_list;
+	struct list_head readdir_list;
+	struct list_head log_list;
+	u64 bytes_reserved;
+	struct btrfs_delayed_node *delayed_node;
+	refcount_t refs;
+	enum btrfs_delayed_item_type type: 8;
+	bool logged;
+	u16 data_len;
+	char data[0];
+};
+
+enum {
+	LOG_INODE_ALL = 0,
+	LOG_INODE_EXISTS = 1,
+};
+
+enum {
+	LOG_WALK_PIN_ONLY = 0,
+	LOG_WALK_REPLAY_INODES = 1,
+	LOG_WALK_REPLAY_DIR_INDEX = 2,
+	LOG_WALK_REPLAY_ALL = 3,
+};
+
+struct walk_control___2 {
+	int free;
+	int pin;
+	int stage;
+	bool ignore_cur_inode;
+	struct btrfs_root *replay_dest;
+	struct btrfs_trans_handle *trans;
+	int (*process_func)(struct btrfs_root *, struct extent_buffer *, struct walk_control___2 *, u64, int);
+};
+
+struct btrfs_dir_list {
+	u64 ino;
+	struct list_head list;
+};
+
+struct btrfs_ino_list {
+	u64 ino;
+	u64 parent;
+	struct list_head list;
+};
+
+struct ZSTD_CCtx_s;
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+
+typedef enum {
+	ZSTD_fast = 1,
+	ZSTD_dfast = 2,
+	ZSTD_greedy = 3,
+	ZSTD_lazy = 4,
+	ZSTD_lazy2 = 5,
+	ZSTD_btlazy2 = 6,
+	ZSTD_btopt = 7,
+	ZSTD_btultra = 8,
+	ZSTD_btultra2 = 9,
+} ZSTD_strategy;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef struct {
+	unsigned int windowLog;
+	unsigned int chainLog;
+	unsigned int hashLog;
+	unsigned int searchLog;
+	unsigned int minMatch;
+	unsigned int targetLength;
+	ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+typedef struct {
+	int contentSizeFlag;
+	int checksumFlag;
+	int noDictIDFlag;
+} ZSTD_frameParameters;
+
+typedef struct {
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_CStream zstd_cstream;
+
+struct workspace___4 {
+	void *mem;
+	size_t size;
+	char *buf;
+	unsigned int level;
+	unsigned int req_level;
+	long unsigned int last_used;
+	struct list_head list;
+	struct list_head lru_list;
+	zstd_in_buffer in_buf;
+	zstd_out_buffer out_buf;
+};
+
+struct zstd_workspace_manager {
+	const struct btrfs_compress_op *ops;
+	spinlock_t lock;
+	struct list_head lru_list;
+	struct list_head idle_ws[15];
+	long unsigned int active_map;
+	wait_queue_head_t wait;
+	struct timer_list timer;
+};
+
+struct bucket_item {
+	u32 count;
+};
+
+struct heuristic_ws {
+	u8 *sample;
+	u32 sample_size;
+	struct bucket_item *bucket;
+	struct bucket_item *bucket_b;
+	struct list_head list;
+};
+
+struct ulist_iterator {
+	struct list_head *cur_list;
+};
+
+struct ulist_node {
+	u64 val;
+	u64 aux;
+	struct list_head list;
+	struct rb_node rb_node;
+};
+
+typedef int iterate_extent_inodes_t(u64, u64, u64, u64, void *);
+
+struct btrfs_backref_walk_ctx {
+	u64 bytenr;
+	u64 extent_item_pos;
+	bool ignore_extent_item_pos;
+	struct btrfs_trans_handle *trans;
+	struct btrfs_fs_info *fs_info;
+	u64 time_seq;
+	struct ulist *refs;
+	struct ulist *roots;
+	bool (*cache_lookup)(u64, void *, const u64 **, int *);
+	void (*cache_store)(u64, const struct ulist *, void *);
+	iterate_extent_inodes_t *indirect_ref_iterator;
+	int (*check_extent_item)(u64, const struct btrfs_extent_item *, const struct extent_buffer *, void *);
+	bool (*skip_data_ref)(u64, u64, u64, void *);
+	void *user_ctx;
+};
+
+struct extent_inode_elem {
+	u64 inum;
+	u64 offset;
+	u64 num_bytes;
+	struct extent_inode_elem *next;
+};
+
+struct btrfs_backref_iter {
+	u64 bytenr;
+	struct btrfs_path *path;
+	struct btrfs_fs_info *fs_info;
+	struct btrfs_key cur_key;
+	u32 item_ptr;
+	u32 cur_ptr;
+	u32 end_ptr;
+};
+
+struct btrfs_backref_node {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	u64 new_bytenr;
+	u64 owner;
+	struct list_head list;
+	struct list_head upper;
+	struct list_head lower;
+	struct btrfs_root *root;
+	struct extent_buffer *eb;
+	unsigned int level: 8;
+	unsigned int cowonly: 1;
+	unsigned int lowest: 1;
+	unsigned int locked: 1;
+	unsigned int processed: 1;
+	unsigned int checked: 1;
+	unsigned int pending: 1;
+	unsigned int detached: 1;
+	unsigned int is_reloc_root: 1;
+};
+
+struct btrfs_backref_edge {
+	struct list_head list[2];
+	struct btrfs_backref_node *node[2];
+};
+
+struct btrfs_backref_cache {
+	struct rb_root rb_root;
+	struct btrfs_backref_node *path[8];
+	struct list_head pending[8];
+	struct list_head leaves;
+	struct list_head changed;
+	struct list_head detached;
+	u64 last_trans;
+	int nr_nodes;
+	int nr_edges;
+	struct list_head pending_edge;
+	struct list_head useless_node;
+	struct btrfs_fs_info *fs_info;
+	unsigned int is_reloc;
+};
+
+struct btrfs_seq_list {
+	struct list_head list;
+	u64 seq;
+};
+
+struct preftree {
+	struct rb_root_cached root;
+	unsigned int count;
+};
+
+struct preftrees {
+	struct preftree direct;
+	struct preftree indirect;
+	struct preftree indirect_missing_keys;
+};
+
+struct share_check {
+	struct btrfs_backref_share_check_ctx *ctx;
+	struct btrfs_root *root;
+	u64 inum;
+	u64 data_bytenr;
+	u64 data_extent_gen;
+	int share_count;
+	int self_ref_count;
+	bool have_delayed_delete_refs;
+};
+
+struct file_extent_cluster {
+	u64 start;
+	u64 end;
+	u64 boundary[128];
+	unsigned int nr;
+};
+
+struct mapping_tree {
+	struct rb_root rb_root;
+	spinlock_t lock;
+};
+
+struct reloc_control {
+	struct btrfs_block_group *block_group;
+	struct btrfs_root *extent_root;
+	struct inode *data_inode;
+	struct btrfs_block_rsv *block_rsv;
+	struct btrfs_backref_cache backref_cache;
+	struct file_extent_cluster cluster;
+	struct extent_io_tree processed_blocks;
+	struct mapping_tree reloc_root_tree;
+	struct list_head reloc_roots;
+	struct list_head dirty_subvol_roots;
+	u64 merging_rsv_size;
+	u64 nodes_relocated;
+	u64 reserved_bytes;
+	u64 search_start;
+	u64 extents_found;
+	unsigned int stage: 8;
+	unsigned int create_reloc_tree: 1;
+	unsigned int merge_reloc_tree: 1;
+	unsigned int found_file_extent: 1;
+};
+
+struct mapping_node {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	void *data;
+};
+
+struct tree_block {
+	struct {
+		struct rb_node rb_node;
+		u64 bytenr;
+	};
+	u64 owner;
+	struct btrfs_key key;
+	unsigned int level: 8;
+	unsigned int key_ready: 1;
+};
+
+struct btrfs_async_delayed_work {
+	struct btrfs_delayed_root *delayed_root;
+	int nr;
+	struct btrfs_work work;
+};
+
+struct scrub_bio;
+
+struct scrub_ctx {
+	struct scrub_bio *bios[64];
+	struct btrfs_fs_info *fs_info;
+	int first_free;
+	int curr;
+	atomic_t bios_in_flight;
+	atomic_t workers_pending;
+	spinlock_t list_lock;
+	wait_queue_head_t list_wait;
+	struct list_head csum_list;
+	atomic_t cancel_req;
+	int readonly;
+	int sectors_per_bio;
+	ktime_t throttle_deadline;
+	u64 throttle_sent;
+	int is_dev_replace;
+	u64 write_pointer;
+	struct scrub_bio *wr_curr_bio;
+	struct mutex wr_lock;
+	struct btrfs_device *wr_tgtdev;
+	bool flush_all_writes;
+	struct btrfs_scrub_progress stat;
+	spinlock_t stat_lock;
+	refcount_t refs;
+};
+
+struct scrub_recover {
+	refcount_t refs;
+	struct btrfs_io_context *bioc;
+	u64 map_length;
+};
+
+struct scrub_block;
+
+struct scrub_sector {
+	struct scrub_block *sblock;
+	struct list_head list;
+	u64 flags;
+	u64 generation;
+	u32 offset;
+	atomic_t refs;
+	unsigned int have_csum: 1;
+	unsigned int io_error: 1;
+	u8 csum[32];
+	struct scrub_recover *recover;
+};
+
+struct scrub_parity;
+
+struct scrub_block {
+	struct page *pages[16];
+	struct scrub_sector *sectors[16];
+	struct btrfs_device *dev;
+	u64 logical;
+	u64 physical;
+	u64 physical_for_dev_replace;
+	u32 len;
+	int sector_count;
+	int mirror_num;
+	atomic_t outstanding_sectors;
+	refcount_t refs;
+	struct scrub_ctx *sctx;
+	struct scrub_parity *sparity;
+	struct {
+		unsigned int header_error: 1;
+		unsigned int checksum_error: 1;
+		unsigned int no_io_error_seen: 1;
+		unsigned int generation_error: 1;
+		unsigned int data_corrected: 1;
+	};
+	struct work_struct work;
+};
+
+struct scrub_bio {
+	int index;
+	struct scrub_ctx *sctx;
+	struct btrfs_device *dev;
+	struct bio *bio;
+	blk_status_t status;
+	u64 logical;
+	u64 physical;
+	struct scrub_sector *sectors[32];
+	int sector_count;
+	int next_free;
+	struct work_struct work;
+};
+
+struct scrub_parity {
+	struct scrub_ctx *sctx;
+	struct btrfs_device *scrub_dev;
+	u64 logic_start;
+	u64 logic_end;
+	int nsectors;
+	u32 stripe_len;
+	refcount_t refs;
+	struct list_head sectors_list;
+	struct work_struct work;
+	long unsigned int dbitmap;
+	long unsigned int ebitmap;
+};
+
+struct scrub_warning {
+	struct btrfs_path *path;
+	u64 extent_item_size;
+	const char *errstr;
+	u64 physical;
+	u64 logical;
+	struct btrfs_device *dev;
+};
+
+struct full_stripe_lock {
+	struct rb_node node;
+	u64 logical;
+	u64 refs;
+	struct mutex mutex;
+};
+
+struct btrfs_qgroup_status_item {
+	__le64 version;
+	__le64 generation;
+	__le64 flags;
+	__le64 rescan;
+};
+
+struct btrfs_qgroup_info_item {
+	__le64 generation;
+	__le64 rfer;
+	__le64 rfer_cmpr;
+	__le64 excl;
+	__le64 excl_cmpr;
+};
+
+struct btrfs_qgroup_limit_item {
+	__le64 flags;
+	__le64 max_rfer;
+	__le64 max_excl;
+	__le64 rsv_rfer;
+	__le64 rsv_excl;
+};
+
+struct btrfs_qgroup_swapped_block {
+	struct rb_node node;
+	int level;
+	bool trace_leaf;
+	u64 subvol_bytenr;
+	u64 subvol_generation;
+	u64 reloc_bytenr;
+	u64 reloc_generation;
+	u64 last_snapshot;
+	struct btrfs_key first_key;
+};
+
+struct btrfs_qgroup_list {
+	struct list_head next_group;
+	struct list_head next_member;
+	struct btrfs_qgroup *group;
+	struct btrfs_qgroup *member;
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct raid6_calls {
+	void (*gen_syndrome)(int, size_t, void **);
+	void (*xor_syndrome)(int, int, int, size_t, void **);
+	int (*valid)();
+	const char *name;
+	int priority;
+};
+
+struct btrfs_stripe_hash {
+	struct list_head hash_list;
+	spinlock_t lock;
+};
+
+struct btrfs_stripe_hash_table {
+	struct list_head stripe_cache;
+	spinlock_t cache_lock;
+	int cache_size;
+	struct btrfs_stripe_hash table[0];
+};
+
+struct sector_ptr {
+	struct page *page;
+	unsigned int pgoff: 24;
+	unsigned int uptodate: 8;
+};
+
+struct btrfs_plug_cb {
+	struct blk_plug_cb cb;
+	struct btrfs_fs_info *info;
+	struct list_head rbio_list;
+	struct work_struct work;
+};
+
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
+struct btrfs_stream_header {
+	char magic[13];
+	__le32 version;
+} __attribute__((packed));
+
+struct btrfs_cmd_header {
+	__le32 len;
+	__le16 cmd;
+	__le32 crc;
+} __attribute__((packed));
+
+struct btrfs_tlv_header {
+	__le16 tlv_type;
+	__le16 tlv_len;
+};
+
+enum btrfs_send_cmd {
+	BTRFS_SEND_C_UNSPEC = 0,
+	BTRFS_SEND_C_SUBVOL = 1,
+	BTRFS_SEND_C_SNAPSHOT = 2,
+	BTRFS_SEND_C_MKFILE = 3,
+	BTRFS_SEND_C_MKDIR = 4,
+	BTRFS_SEND_C_MKNOD = 5,
+	BTRFS_SEND_C_MKFIFO = 6,
+	BTRFS_SEND_C_MKSOCK = 7,
+	BTRFS_SEND_C_SYMLINK = 8,
+	BTRFS_SEND_C_RENAME = 9,
+	BTRFS_SEND_C_LINK = 10,
+	BTRFS_SEND_C_UNLINK = 11,
+	BTRFS_SEND_C_RMDIR = 12,
+	BTRFS_SEND_C_SET_XATTR = 13,
+	BTRFS_SEND_C_REMOVE_XATTR = 14,
+	BTRFS_SEND_C_WRITE = 15,
+	BTRFS_SEND_C_CLONE = 16,
+	BTRFS_SEND_C_TRUNCATE = 17,
+	BTRFS_SEND_C_CHMOD = 18,
+	BTRFS_SEND_C_CHOWN = 19,
+	BTRFS_SEND_C_UTIMES = 20,
+	BTRFS_SEND_C_END = 21,
+	BTRFS_SEND_C_UPDATE_EXTENT = 22,
+	BTRFS_SEND_C_MAX_V1 = 22,
+	BTRFS_SEND_C_FALLOCATE = 23,
+	BTRFS_SEND_C_FILEATTR = 24,
+	BTRFS_SEND_C_ENCODED_WRITE = 25,
+	BTRFS_SEND_C_MAX_V2 = 25,
+	BTRFS_SEND_C_ENABLE_VERITY = 26,
+	BTRFS_SEND_C_MAX_V3 = 26,
+	BTRFS_SEND_C_MAX = 26,
+};
+
+enum {
+	BTRFS_SEND_A_UNSPEC = 0,
+	BTRFS_SEND_A_UUID = 1,
+	BTRFS_SEND_A_CTRANSID = 2,
+	BTRFS_SEND_A_INO = 3,
+	BTRFS_SEND_A_SIZE = 4,
+	BTRFS_SEND_A_MODE = 5,
+	BTRFS_SEND_A_UID = 6,
+	BTRFS_SEND_A_GID = 7,
+	BTRFS_SEND_A_RDEV = 8,
+	BTRFS_SEND_A_CTIME = 9,
+	BTRFS_SEND_A_MTIME = 10,
+	BTRFS_SEND_A_ATIME = 11,
+	BTRFS_SEND_A_OTIME = 12,
+	BTRFS_SEND_A_XATTR_NAME = 13,
+	BTRFS_SEND_A_XATTR_DATA = 14,
+	BTRFS_SEND_A_PATH = 15,
+	BTRFS_SEND_A_PATH_TO = 16,
+	BTRFS_SEND_A_PATH_LINK = 17,
+	BTRFS_SEND_A_FILE_OFFSET = 18,
+	BTRFS_SEND_A_DATA = 19,
+	BTRFS_SEND_A_CLONE_UUID = 20,
+	BTRFS_SEND_A_CLONE_CTRANSID = 21,
+	BTRFS_SEND_A_CLONE_PATH = 22,
+	BTRFS_SEND_A_CLONE_OFFSET = 23,
+	BTRFS_SEND_A_CLONE_LEN = 24,
+	BTRFS_SEND_A_MAX_V1 = 24,
+	BTRFS_SEND_A_FALLOCATE_MODE = 25,
+	BTRFS_SEND_A_FILEATTR = 26,
+	BTRFS_SEND_A_UNENCODED_FILE_LEN = 27,
+	BTRFS_SEND_A_UNENCODED_LEN = 28,
+	BTRFS_SEND_A_UNENCODED_OFFSET = 29,
+	BTRFS_SEND_A_COMPRESSION = 30,
+	BTRFS_SEND_A_ENCRYPTION = 31,
+	BTRFS_SEND_A_MAX_V2 = 31,
+	BTRFS_SEND_A_VERITY_ALGORITHM = 32,
+	BTRFS_SEND_A_VERITY_BLOCK_SIZE = 33,
+	BTRFS_SEND_A_VERITY_SALT_DATA = 34,
+	BTRFS_SEND_A_VERITY_SIG_DATA = 35,
+	BTRFS_SEND_A_MAX_V3 = 35,
+	__BTRFS_SEND_A_MAX = 35,
+};
+
+struct fs_path {
+	union {
+		struct {
+			char *start;
+			char *end;
+			char *buf;
+			short unsigned int buf_len: 15;
+			short unsigned int reversed: 1;
+			char inline_buf[0];
+		};
+		char pad[256];
+	};
+};
+
+struct clone_root {
+	struct btrfs_root *root;
+	u64 ino;
+	u64 offset;
+	u64 num_bytes;
+	bool found_ref;
+};
+
+struct backref_cache_entry {
+	struct list_head list;
+	u64 key;
+	u64 root_ids[12];
+	int num_roots;
+};
+
+struct send_ctx {
+	struct file *send_filp;
+	loff_t send_off;
+	char *send_buf;
+	u32 send_size;
+	u32 send_max_size;
+	bool put_data;
+	struct page **send_buf_pages;
+	u64 flags;
+	u32 proto;
+	struct btrfs_root *send_root;
+	struct btrfs_root *parent_root;
+	struct clone_root *clone_roots;
+	int clone_roots_cnt;
+	struct btrfs_path *left_path;
+	struct btrfs_path *right_path;
+	struct btrfs_key *cmp_key;
+	u64 last_reloc_trans;
+	u64 cur_ino;
+	u64 cur_inode_gen;
+	u64 cur_inode_size;
+	u64 cur_inode_mode;
+	u64 cur_inode_rdev;
+	u64 cur_inode_last_extent;
+	u64 cur_inode_next_write_offset;
+	bool cur_inode_new;
+	bool cur_inode_new_gen;
+	bool cur_inode_deleted;
+	bool ignore_cur_inode;
+	bool cur_inode_needs_verity;
+	void *verity_descriptor;
+	u64 send_progress;
+	struct list_head new_refs;
+	struct list_head deleted_refs;
+	struct xarray name_cache;
+	struct list_head name_cache_list;
+	int name_cache_size;
+	struct inode *cur_inode;
+	struct file_ra_state ra;
+	u64 page_cache_clear_start;
+	bool clean_page_cache;
+	struct rb_root pending_dir_moves;
+	struct rb_root waiting_dir_moves;
+	struct rb_root orphan_dirs;
+	struct rb_root rbtree_new_refs;
+	struct rb_root rbtree_deleted_refs;
+	struct {
+		u64 last_reloc_trans;
+		struct list_head lru_list;
+		struct maple_tree entries;
+		int size;
+	} backref_cache;
+};
+
+struct pending_dir_move {
+	struct rb_node node;
+	struct list_head list;
+	u64 parent_ino;
+	u64 ino;
+	u64 gen;
+	struct list_head update_refs;
+};
+
+struct waiting_dir_move {
+	struct rb_node node;
+	u64 ino;
+	u64 rmdir_ino;
+	u64 rmdir_gen;
+	bool orphanized;
+};
+
+struct orphan_dir_info {
+	struct rb_node node;
+	u64 ino;
+	u64 gen;
+	u64 last_dir_index_offset;
+};
+
+struct name_cache_entry {
+	struct list_head list;
+	struct list_head radix_list;
+	u64 ino;
+	u64 gen;
+	u64 parent_ino;
+	u64 parent_gen;
+	int ret;
+	int need_later_update;
+	int name_len;
+	char name[0];
+};
+
+enum btrfs_compare_tree_result {
+	BTRFS_COMPARE_TREE_NEW = 0,
+	BTRFS_COMPARE_TREE_DELETED = 1,
+	BTRFS_COMPARE_TREE_CHANGED = 2,
+	BTRFS_COMPARE_TREE_SAME = 3,
+};
+
+struct btrfs_inode_info {
+	u64 size;
+	u64 gen;
+	u64 mode;
+	u64 uid;
+	u64 gid;
+	u64 rdev;
+	u64 fileattr;
+	u64 nlink;
+};
+
+typedef int (*iterate_inode_ref_t)(int, u64, int, struct fs_path *, void *);
+
+typedef int (*iterate_dir_item_t)(int, struct btrfs_key *, const char *, int, const char *, int, void *);
+
+struct backref_ctx {
+	struct send_ctx *sctx;
+	u64 found;
+	u64 cur_objectid;
+	u64 cur_offset;
+	u64 extent_len;
+	u64 bytenr;
+	u64 backref_owner;
+	u64 backref_offset;
+};
+
+enum inode_state {
+	inode_state_no_change = 0,
+	inode_state_will_create = 1,
+	inode_state_did_create = 2,
+	inode_state_will_delete = 3,
+	inode_state_did_delete = 4,
+};
+
+struct recorded_ref {
+	struct list_head list;
+	char *name;
+	struct fs_path *full_path;
+	u64 dir;
+	u64 dir_gen;
+	int name_len;
+	struct rb_node node;
+	struct rb_root *root;
+};
+
+struct find_xattr_ctx {
+	const char *name;
+	int name_len;
+	int found_idx;
+	char *found_data;
+	int found_data_len;
+};
+
+struct btrfs_dev_replace_item {
+	__le64 src_devid;
+	__le64 cursor_left;
+	__le64 cursor_right;
+	__le64 cont_reading_from_srcdev_mode;
+	__le64 replace_state;
+	__le64 time_started;
+	__le64 time_stopped;
+	__le64 num_write_errors;
+	__le64 num_uncorrectable_read_errors;
+};
+
+struct prop_handler {
+	struct hlist_node node;
+	const char *xattr_name;
+	int (*validate)(const struct btrfs_inode *, const char *, size_t);
+	int (*apply)(struct inode *, const char *, size_t);
+	const char * (*extract)(struct inode *);
+	bool (*ignore)(const struct btrfs_inode *);
+	int inheritable;
+};
+
+struct reserve_ticket {
+	u64 bytes;
+	int error;
+	bool steal;
+	struct list_head list;
+	wait_queue_head_t wait;
+};
+
+struct btrfs_free_space_info {
+	__le32 extent_count;
+	__le32 flags;
+};
+
+struct tree_mod_root {
+	u64 logical;
+	u8 level;
+};
+
+struct tree_mod_elem {
+	struct rb_node node;
+	u64 logical;
+	u64 seq;
+	enum btrfs_mod_log_op op;
+	int slot;
+	u64 generation;
+	struct btrfs_disk_key key;
+	u64 blockptr;
+	struct {
+		int dst_slot;
+		int nr_items;
+	} move;
+	struct tree_mod_root old_root;
+};
+
+enum blk_zone_type {
+	BLK_ZONE_TYPE_CONVENTIONAL = 1,
+	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
+	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
+};
+
+enum blk_zone_cond {
+	BLK_ZONE_COND_NOT_WP = 0,
+	BLK_ZONE_COND_EMPTY = 1,
+	BLK_ZONE_COND_IMP_OPEN = 2,
+	BLK_ZONE_COND_EXP_OPEN = 3,
+	BLK_ZONE_COND_CLOSED = 4,
+	BLK_ZONE_COND_READONLY = 13,
+	BLK_ZONE_COND_FULL = 14,
+	BLK_ZONE_COND_OFFLINE = 15,
+};
+
+struct f2fs_device {
+	__u8 path[64];
+	__le32 total_segments;
+};
+
+enum stop_cp_reason {
+	STOP_CP_REASON_SHUTDOWN = 0,
+	STOP_CP_REASON_FAULT_INJECT = 1,
+	STOP_CP_REASON_META_PAGE = 2,
+	STOP_CP_REASON_WRITE_FAIL = 3,
+	STOP_CP_REASON_CORRUPTED_SUMMARY = 4,
+	STOP_CP_REASON_UPDATE_INODE = 5,
+	STOP_CP_REASON_FLUSH_FAIL = 6,
+	STOP_CP_REASON_MAX = 7,
+};
+
+enum f2fs_error {
+	ERROR_CORRUPTED_CLUSTER = 0,
+	ERROR_FAIL_DECOMPRESSION = 1,
+	ERROR_INVALID_BLKADDR = 2,
+	ERROR_CORRUPTED_DIRENT = 3,
+	ERROR_CORRUPTED_INODE = 4,
+	ERROR_INCONSISTENT_SUMMARY = 5,
+	ERROR_INCONSISTENT_FOOTER = 6,
+	ERROR_INCONSISTENT_SUM_TYPE = 7,
+	ERROR_CORRUPTED_JOURNAL = 8,
+	ERROR_INCONSISTENT_NODE_COUNT = 9,
+	ERROR_INCONSISTENT_BLOCK_COUNT = 10,
+	ERROR_INVALID_CURSEG = 11,
+	ERROR_INCONSISTENT_SIT = 12,
+	ERROR_CORRUPTED_VERITY_XATTR = 13,
+	ERROR_CORRUPTED_XATTR = 14,
+	ERROR_MAX = 15,
+};
+
+struct f2fs_super_block {
+	__le32 magic;
+	__le16 major_ver;
+	__le16 minor_ver;
+	__le32 log_sectorsize;
+	__le32 log_sectors_per_block;
+	__le32 log_blocksize;
+	__le32 log_blocks_per_seg;
+	__le32 segs_per_sec;
+	__le32 secs_per_zone;
+	__le32 checksum_offset;
+	__le64 block_count;
+	__le32 section_count;
+	__le32 segment_count;
+	__le32 segment_count_ckpt;
+	__le32 segment_count_sit;
+	__le32 segment_count_nat;
+	__le32 segment_count_ssa;
+	__le32 segment_count_main;
+	__le32 segment0_blkaddr;
+	__le32 cp_blkaddr;
+	__le32 sit_blkaddr;
+	__le32 nat_blkaddr;
+	__le32 ssa_blkaddr;
+	__le32 main_blkaddr;
+	__le32 root_ino;
+	__le32 node_ino;
+	__le32 meta_ino;
+	__u8 uuid[16];
+	__le16 volume_name[512];
+	__le32 extension_count;
+	__u8 extension_list[512];
+	__le32 cp_payload;
+	__u8 version[256];
+	__u8 init_version[256];
+	__le32 feature;
+	__u8 encryption_level;
+	__u8 encrypt_pw_salt[16];
+	struct f2fs_device devs[8];
+	__le32 qf_ino[3];
+	__u8 hot_ext_count;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__u8 s_stop_reason[32];
+	__u8 s_errors[16];
+	__u8 reserved[258];
+	__le32 crc;
+} __attribute__((packed));
+
+struct f2fs_checkpoint {
+	__le64 checkpoint_ver;
+	__le64 user_block_count;
+	__le64 valid_block_count;
+	__le32 rsvd_segment_count;
+	__le32 overprov_segment_count;
+	__le32 free_segment_count;
+	__le32 cur_node_segno[8];
+	__le16 cur_node_blkoff[8];
+	__le32 cur_data_segno[8];
+	__le16 cur_data_blkoff[8];
+	__le32 ckpt_flags;
+	__le32 cp_pack_total_block_count;
+	__le32 cp_pack_start_sum;
+	__le32 valid_node_count;
+	__le32 valid_inode_count;
+	__le32 next_free_nid;
+	__le32 sit_ver_bitmap_bytesize;
+	__le32 nat_ver_bitmap_bytesize;
+	__le32 checksum_offset;
+	__le64 elapsed_time;
+	unsigned char alloc_type[16];
+	unsigned char sit_nat_version_bitmap[0];
+};
+
+struct f2fs_extent {
+	__le32 fofs;
+	__le32 blk;
+	__le32 len;
+};
+
+struct f2fs_inode {
+	__le16 i_mode;
+	__u8 i_advise;
+	__u8 i_inline;
+	__le32 i_uid;
+	__le32 i_gid;
+	__le32 i_links;
+	__le64 i_size;
+	__le64 i_blocks;
+	__le64 i_atime;
+	__le64 i_ctime;
+	__le64 i_mtime;
+	__le32 i_atime_nsec;
+	__le32 i_ctime_nsec;
+	__le32 i_mtime_nsec;
+	__le32 i_generation;
+	union {
+		__le32 i_current_depth;
+		__le16 i_gc_failures;
+	};
+	__le32 i_xattr_nid;
+	__le32 i_flags;
+	__le32 i_pino;
+	__le32 i_namelen;
+	__u8 i_name[255];
+	__u8 i_dir_level;
+	struct f2fs_extent i_ext;
+	union {
+		struct {
+			__le16 i_extra_isize;
+			__le16 i_inline_xattr_size;
+			__le32 i_projid;
+			__le32 i_inode_checksum;
+			__le64 i_crtime;
+			__le32 i_crtime_nsec;
+			__le64 i_compr_blocks;
+			__u8 i_compress_algorithm;
+			__u8 i_log_cluster_size;
+			__le16 i_compress_flag;
+			__le32 i_extra_end[0];
+		} __attribute__((packed));
+		__le32 i_addr[923];
+	};
+	__le32 i_nid[5];
+};
+
+struct direct_node {
+	__le32 addr[1018];
+};
+
+struct indirect_node {
+	__le32 nid[1018];
+};
+
+enum {
+	COLD_BIT_SHIFT = 0,
+	FSYNC_BIT_SHIFT = 1,
+	DENT_BIT_SHIFT = 2,
+	OFFSET_BIT_SHIFT = 3,
+};
+
+struct node_footer {
+	__le32 nid;
+	__le32 ino;
+	__le32 flag;
+	__le64 cp_ver;
+	__le32 next_blkaddr;
+} __attribute__((packed));
+
+struct f2fs_node {
+	union {
+		struct f2fs_inode i;
+		struct direct_node dn;
+		struct indirect_node in;
+	};
+	struct node_footer footer;
+};
+
+struct f2fs_nat_entry {
+	__u8 version;
+	__le32 ino;
+	__le32 block_addr;
+} __attribute__((packed));
+
+struct f2fs_sit_entry {
+	__le16 vblocks;
+	__u8 valid_map[64];
+	__le64 mtime;
+} __attribute__((packed));
+
+struct f2fs_summary {
+	__le32 nid;
+	union {
+		__u8 reserved[3];
+		struct {
+			__u8 version;
+			__le16 ofs_in_node;
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+struct summary_footer {
+	unsigned char entry_type;
+	__le32 check_sum;
+} __attribute__((packed));
+
+struct nat_journal_entry {
+	__le32 nid;
+	struct f2fs_nat_entry ne;
+} __attribute__((packed));
+
+struct nat_journal {
+	struct nat_journal_entry entries[38];
+	__u8 reserved[11];
+} __attribute__((packed));
+
+struct sit_journal_entry {
+	__le32 segno;
+	struct f2fs_sit_entry se;
+} __attribute__((packed));
+
+struct sit_journal {
+	struct sit_journal_entry entries[6];
+	__u8 reserved[37];
+} __attribute__((packed));
+
+struct f2fs_extra_info {
+	__le64 kbytes_written;
+	__u8 reserved[497];
+} __attribute__((packed));
+
+struct f2fs_journal {
+	union {
+		__le16 n_nats;
+		__le16 n_sits;
+	};
+	union {
+		struct nat_journal nat_j;
+		struct sit_journal sit_j;
+		struct f2fs_extra_info info;
+	};
+} __attribute__((packed));
+
+struct f2fs_summary_block {
+	struct f2fs_summary entries[512];
+	struct f2fs_journal journal;
+	struct summary_footer footer;
+} __attribute__((packed));
+
+typedef __le32 f2fs_hash_t;
+
+enum {
+	FAULT_KMALLOC = 0,
+	FAULT_KVMALLOC = 1,
+	FAULT_PAGE_ALLOC = 2,
+	FAULT_PAGE_GET = 3,
+	FAULT_ALLOC_BIO = 4,
+	FAULT_ALLOC_NID = 5,
+	FAULT_ORPHAN = 6,
+	FAULT_BLOCK = 7,
+	FAULT_DIR_DEPTH = 8,
+	FAULT_EVICT_INODE = 9,
+	FAULT_TRUNCATE = 10,
+	FAULT_READ_IO = 11,
+	FAULT_CHECKPOINT = 12,
+	FAULT_DISCARD = 13,
+	FAULT_WRITE_IO = 14,
+	FAULT_SLAB_ALLOC = 15,
+	FAULT_DQUOT_INIT = 16,
+	FAULT_LOCK_OP = 17,
+	FAULT_BLKADDR = 18,
+	FAULT_MAX = 19,
+};
+
+typedef u32 block_t;
+
+typedef u32 nid_t;
+
+struct f2fs_rwsem {
+	struct rw_semaphore internal_rwsem;
+};
+
+struct f2fs_mount_info {
+	unsigned int opt;
+	int write_io_size_bits;
+	block_t root_reserved_blocks;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	int active_logs;
+	int inline_xattr_size;
+	char *s_qf_names[3];
+	int s_jquota_fmt;
+	int alloc_mode;
+	int fsync_mode;
+	int fs_mode;
+	int bggc_mode;
+	int memory_mode;
+	int discard_unit;
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	block_t unusable_cap_perc;
+	block_t unusable_cap;
+	unsigned char compress_algorithm;
+	unsigned char compress_log_size;
+	unsigned char compress_level;
+	bool compress_chksum;
+	unsigned char compress_ext_cnt;
+	unsigned char nocompress_ext_cnt;
+	int compress_mode;
+	unsigned char extensions[128];
+	unsigned char noextensions[128];
+};
+
+enum {
+	META_CP = 0,
+	META_NAT = 1,
+	META_SIT = 2,
+	META_SSA = 3,
+	META_MAX = 4,
+	META_POR = 5,
+	DATA_GENERIC = 6,
+	DATA_GENERIC_ENHANCE = 7,
+	DATA_GENERIC_ENHANCE_READ = 8,
+	DATA_GENERIC_ENHANCE_UPDATE = 9,
+	META_GENERIC = 10,
+};
+
+enum {
+	ORPHAN_INO = 0,
+	APPEND_INO = 1,
+	UPDATE_INO = 2,
+	TRANS_DIR_INO = 3,
+	FLUSH_INO = 4,
+	MAX_INO_ENTRY = 5,
+};
+
+struct ckpt_req_control {
+	struct task_struct *f2fs_issue_ckpt;
+	int ckpt_thread_ioprio;
+	wait_queue_head_t ckpt_wait_queue;
+	atomic_t issued_ckpt;
+	atomic_t total_ckpt;
+	atomic_t queued_ckpt;
+	struct llist_head issue_list;
+	spinlock_t stat_lock;
+	unsigned int cur_time;
+	unsigned int peak_time;
+};
+
+struct discard_cmd_control {
+	struct task_struct *f2fs_issue_discard;
+	struct list_head entry_list;
+	struct list_head pend_list[512];
+	struct list_head wait_list;
+	struct list_head fstrim_list;
+	wait_queue_head_t discard_wait_queue;
+	unsigned int discard_wake;
+	struct mutex cmd_lock;
+	unsigned int nr_discards;
+	unsigned int max_discards;
+	unsigned int max_discard_request;
+	unsigned int min_discard_issue_time;
+	unsigned int mid_discard_issue_time;
+	unsigned int max_discard_issue_time;
+	unsigned int discard_urgent_util;
+	unsigned int discard_granularity;
+	unsigned int max_ordered_discard;
+	unsigned int undiscard_blks;
+	unsigned int next_pos;
+	atomic_t issued_discard;
+	atomic_t queued_discard;
+	atomic_t discard_cmd_cnt;
+	struct rb_root_cached root;
+	bool rbtree_check;
+};
+
+enum extent_type {
+	EX_READ = 0,
+	EX_BLOCK_AGE = 1,
+	NR_EXTENT_CACHES = 2,
+};
+
+struct extent_info {
+	unsigned int fofs;
+	unsigned int len;
+	union {
+		struct {
+			block_t blk;
+		};
+		struct {
+			long long unsigned int age;
+			long long unsigned int last_blocks;
+		};
+	};
+};
+
+struct extent_tree;
+
+struct extent_node {
+	struct rb_node rb_node;
+	struct extent_info ei;
+	struct list_head list;
+	struct extent_tree *et;
+};
+
+struct extent_tree {
+	nid_t ino;
+	enum extent_type type;
+	struct rb_root_cached root;
+	struct extent_node *cached_en;
+	struct list_head list;
+	rwlock_t lock;
+	atomic_t node_cnt;
+	bool largest_updated;
+	struct extent_info largest;
+};
+
+struct extent_tree_info {
+	struct xarray extent_tree_root;
+	struct mutex extent_tree_lock;
+	struct list_head extent_list;
+	spinlock_t extent_lock;
+	atomic_t total_ext_tree;
+	struct list_head zombie_list;
+	atomic_t total_zombie_tree;
+	atomic_t total_ext_node;
+};
+
+enum {
+	GC_FAILURE_PIN = 0,
+	MAX_GC_FAILURE = 1,
+};
+
+enum {
+	FI_NEW_INODE = 0,
+	FI_DIRTY_INODE = 1,
+	FI_AUTO_RECOVER = 2,
+	FI_DIRTY_DIR = 3,
+	FI_INC_LINK = 4,
+	FI_ACL_MODE = 5,
+	FI_NO_ALLOC = 6,
+	FI_FREE_NID = 7,
+	FI_NO_EXTENT = 8,
+	FI_INLINE_XATTR = 9,
+	FI_INLINE_DATA = 10,
+	FI_INLINE_DENTRY = 11,
+	FI_APPEND_WRITE = 12,
+	FI_UPDATE_WRITE = 13,
+	FI_NEED_IPU = 14,
+	FI_ATOMIC_FILE = 15,
+	FI_FIRST_BLOCK_WRITTEN = 16,
+	FI_DROP_CACHE = 17,
+	FI_DATA_EXIST = 18,
+	FI_INLINE_DOTS = 19,
+	FI_SKIP_WRITES = 20,
+	FI_OPU_WRITE = 21,
+	FI_DIRTY_FILE = 22,
+	FI_PREALLOCATED_ALL = 23,
+	FI_HOT_DATA = 24,
+	FI_EXTRA_ATTR = 25,
+	FI_PROJ_INHERIT = 26,
+	FI_PIN_FILE = 27,
+	FI_VERITY_IN_PROGRESS = 28,
+	FI_COMPRESSED_FILE = 29,
+	FI_COMPRESS_CORRUPT = 30,
+	FI_MMAP_FILE = 31,
+	FI_ENABLE_COMPRESS = 32,
+	FI_COMPRESS_RELEASED = 33,
+	FI_ALIGNED_WRITE = 34,
+	FI_COW_FILE = 35,
+	FI_ATOMIC_COMMITTED = 36,
+	FI_ATOMIC_REPLACE = 37,
+	FI_MAX = 38,
+};
+
+struct f2fs_inode_info {
+	struct inode vfs_inode;
+	long unsigned int i_flags;
+	unsigned char i_advise;
+	unsigned char i_dir_level;
+	unsigned int i_current_depth;
+	unsigned int i_gc_failures[1];
+	unsigned int i_pino;
+	umode_t i_acl_mode;
+	long unsigned int flags[1];
+	struct f2fs_rwsem i_sem;
+	atomic_t dirty_pages;
+	f2fs_hash_t chash;
+	unsigned int clevel;
+	struct task_struct *task;
+	struct task_struct *cp_task;
+	struct task_struct *wb_task;
+	nid_t i_xattr_nid;
+	loff_t last_disk_size;
+	spinlock_t i_size_lock;
+	struct dquot *i_dquot[3];
+	qsize_t i_reserved_quota;
+	struct list_head dirty_list;
+	struct list_head gdirty_list;
+	struct task_struct *atomic_write_task;
+	struct extent_tree *extent_tree[2];
+	struct inode *cow_inode;
+	struct f2fs_rwsem i_gc_rwsem[2];
+	struct f2fs_rwsem i_xattr_sem;
+	int i_extra_isize;
+	kprojid_t i_projid;
+	int i_inline_xattr_size;
+	struct timespec64 i_crtime;
+	struct timespec64 i_disk_time[4];
+	atomic_t i_compr_blocks;
+	unsigned char i_compress_algorithm;
+	unsigned char i_log_cluster_size;
+	unsigned char i_compress_level;
+	short unsigned int i_compress_flag;
+	unsigned int i_cluster_size;
+	unsigned int atomic_write_cnt;
+	loff_t original_i_size;
+};
+
+struct f2fs_nm_info {
+	block_t nat_blkaddr;
+	nid_t max_nid;
+	nid_t available_nids;
+	nid_t next_scan_nid;
+	nid_t max_rf_node_blocks;
+	unsigned int ram_thresh;
+	unsigned int ra_nid_pages;
+	unsigned int dirty_nats_ratio;
+	struct xarray nat_root;
+	struct xarray nat_set_root;
+	struct f2fs_rwsem nat_tree_lock;
+	struct list_head nat_entries;
+	spinlock_t nat_list_lock;
+	unsigned int nat_cnt[3];
+	unsigned int nat_blocks;
+	struct xarray free_nid_root;
+	struct list_head free_nid_list;
+	unsigned int nid_cnt[2];
+	spinlock_t nid_list_lock;
+	struct mutex build_lock;
+	unsigned char **free_nid_bitmap;
+	unsigned char *nat_block_bitmap;
+	short unsigned int *free_nid_count;
+	char *nat_bitmap;
+	unsigned int nat_bits_blocks;
+	unsigned char *nat_bits;
+	unsigned char *full_nat_bits;
+	unsigned char *empty_nat_bits;
+	int bitmap_size;
+};
+
+enum {
+	CURSEG_HOT_DATA = 0,
+	CURSEG_WARM_DATA = 1,
+	CURSEG_COLD_DATA = 2,
+	CURSEG_HOT_NODE = 3,
+	CURSEG_WARM_NODE = 4,
+	CURSEG_COLD_NODE = 5,
+	NR_PERSISTENT_LOG = 6,
+	CURSEG_COLD_DATA_PINNED = 6,
+	CURSEG_ALL_DATA_ATGC = 7,
+	NO_CHECK_TYPE = 8,
+};
+
+struct flush_cmd_control {
+	struct task_struct *f2fs_issue_flush;
+	wait_queue_head_t flush_wait_queue;
+	atomic_t issued_flush;
+	atomic_t queued_flush;
+	struct llist_head issue_list;
+	struct llist_node *dispatch_list;
+};
+
+struct sit_info;
+
+struct free_segmap_info;
+
+struct dirty_seglist_info;
+
+struct curseg_info;
+
+struct f2fs_sm_info {
+	struct sit_info *sit_info;
+	struct free_segmap_info *free_info;
+	struct dirty_seglist_info *dirty_info;
+	struct curseg_info *curseg_array;
+	struct f2fs_rwsem curseg_lock;
+	block_t seg0_blkaddr;
+	block_t main_blkaddr;
+	block_t ssa_blkaddr;
+	unsigned int segment_count;
+	unsigned int main_segments;
+	unsigned int reserved_segments;
+	unsigned int additional_reserved_segments;
+	unsigned int ovp_segments;
+	unsigned int rec_prefree_segments;
+	struct list_head sit_entry_set;
+	unsigned int ipu_policy;
+	unsigned int min_ipu_util;
+	unsigned int min_fsync_blocks;
+	unsigned int min_seq_blocks;
+	unsigned int min_hot_blocks;
+	unsigned int min_ssr_sections;
+	struct flush_cmd_control *fcc_info;
+	struct discard_cmd_control *dcc_info;
+};
+
+struct seg_entry;
+
+struct sec_entry;
+
+struct sit_info {
+	block_t sit_base_addr;
+	block_t sit_blocks;
+	block_t written_valid_blocks;
+	char *bitmap;
+	char *sit_bitmap;
+	unsigned int bitmap_size;
+	long unsigned int *tmp_map;
+	long unsigned int *dirty_sentries_bitmap;
+	unsigned int dirty_sentries;
+	unsigned int sents_per_block;
+	struct rw_semaphore sentry_lock;
+	struct seg_entry *sentries;
+	struct sec_entry *sec_entries;
+	long long unsigned int elapsed_time;
+	long long unsigned int mounted_time;
+	long long unsigned int min_mtime;
+	long long unsigned int max_mtime;
+	long long unsigned int dirty_min_mtime;
+	long long unsigned int dirty_max_mtime;
+	unsigned int last_victim[5];
+};
+
+struct free_segmap_info {
+	unsigned int start_segno;
+	unsigned int free_segments;
+	unsigned int free_sections;
+	spinlock_t segmap_lock;
+	long unsigned int *free_segmap;
+	long unsigned int *free_secmap;
+};
+
+struct victim_selection;
+
+struct dirty_seglist_info {
+	const struct victim_selection *v_ops;
+	long unsigned int *dirty_segmap[8];
+	long unsigned int *dirty_secmap;
+	struct mutex seglist_lock;
+	int nr_dirty[8];
+	long unsigned int *victim_secmap;
+	long unsigned int *pinned_secmap;
+	unsigned int pinned_secmap_cnt;
+	bool enable_pin_section;
+};
+
+struct curseg_info {
+	struct mutex curseg_mutex;
+	struct f2fs_summary_block *sum_blk;
+	struct rw_semaphore journal_rwsem;
+	struct f2fs_journal *journal;
+	unsigned char alloc_type;
+	short unsigned int seg_type;
+	unsigned int segno;
+	short unsigned int next_blkoff;
+	unsigned int zone;
+	unsigned int next_segno;
+	int fragment_remained_chunk;
+	bool inited;
+};
+
+enum count_type {
+	F2FS_DIRTY_DENTS = 0,
+	F2FS_DIRTY_DATA = 1,
+	F2FS_DIRTY_QDATA = 2,
+	F2FS_DIRTY_NODES = 3,
+	F2FS_DIRTY_META = 4,
+	F2FS_DIRTY_IMETA = 5,
+	F2FS_WB_CP_DATA = 6,
+	F2FS_WB_DATA = 7,
+	F2FS_RD_DATA = 8,
+	F2FS_RD_NODE = 9,
+	F2FS_RD_META = 10,
+	F2FS_DIO_WRITE = 11,
+	F2FS_DIO_READ = 12,
+	NR_COUNT_TYPE = 13,
+};
+
+enum page_type {
+	DATA = 0,
+	NODE = 1,
+	META = 2,
+	NR_PAGE_TYPE = 3,
+	META_FLUSH = 4,
+	IPU = 5,
+	OPU = 6,
+};
+
+enum temp_type {
+	HOT = 0,
+	WARM = 1,
+	COLD = 2,
+	NR_TEMP_TYPE = 3,
+};
+
+enum iostat_type {
+	APP_DIRECT_IO = 0,
+	APP_BUFFERED_IO = 1,
+	APP_WRITE_IO = 2,
+	APP_MAPPED_IO = 3,
+	APP_BUFFERED_CDATA_IO = 4,
+	APP_MAPPED_CDATA_IO = 5,
+	FS_DATA_IO = 6,
+	FS_CDATA_IO = 7,
+	FS_NODE_IO = 8,
+	FS_META_IO = 9,
+	FS_GC_DATA_IO = 10,
+	FS_GC_NODE_IO = 11,
+	FS_CP_DATA_IO = 12,
+	FS_CP_NODE_IO = 13,
+	FS_CP_META_IO = 14,
+	APP_DIRECT_READ_IO = 15,
+	APP_BUFFERED_READ_IO = 16,
+	APP_READ_IO = 17,
+	APP_MAPPED_READ_IO = 18,
+	APP_BUFFERED_CDATA_READ_IO = 19,
+	APP_MAPPED_CDATA_READ_IO = 20,
+	FS_DATA_READ_IO = 21,
+	FS_GDATA_READ_IO = 22,
+	FS_CDATA_READ_IO = 23,
+	FS_NODE_READ_IO = 24,
+	FS_META_READ_IO = 25,
+	FS_DISCARD = 26,
+	NR_IO_TYPE = 27,
+};
+
+struct f2fs_sb_info;
+
+struct f2fs_io_info {
+	struct f2fs_sb_info *sbi;
+	nid_t ino;
+	enum page_type type;
+	enum temp_type temp;
+	enum req_op op;
+	blk_opf_t op_flags;
+	block_t new_blkaddr;
+	block_t old_blkaddr;
+	struct page *page;
+	struct page *encrypted_page;
+	struct page *compressed_page;
+	struct list_head list;
+	bool submitted;
+	int need_lock;
+	bool in_list;
+	bool is_por;
+	bool retry;
+	int compr_blocks;
+	bool encrypted;
+	bool post_read;
+	enum iostat_type io_type;
+	struct writeback_control *io_wbc;
+	struct bio **bio;
+	sector_t *last_block;
+	unsigned char version;
+};
+
+struct inode_management {
+	struct xarray ino_root;
+	spinlock_t ino_lock;
+	struct list_head ino_list;
+	long unsigned int ino_num;
+};
+
+struct atgc_management {
+	bool atgc_enabled;
+	struct rb_root_cached root;
+	struct list_head victim_list;
+	unsigned int victim_count;
+	unsigned int candidate_ratio;
+	unsigned int max_candidate_count;
+	unsigned int age_weight;
+	long long unsigned int age_threshold;
+};
+
+struct f2fs_bio_info;
+
+struct f2fs_gc_kthread;
+
+struct f2fs_stat_info;
+
+struct f2fs_dev_info;
+
+struct iostat_lat_info;
+
+struct f2fs_sb_info {
+	struct super_block *sb;
+	struct proc_dir_entry *s_proc;
+	struct f2fs_super_block *raw_super;
+	struct f2fs_rwsem sb_lock;
+	int valid_super_block;
+	long unsigned int s_flag;
+	struct mutex writepages;
+	unsigned int blocks_per_blkz;
+	unsigned int log_blocks_per_blkz;
+	struct f2fs_nm_info *nm_info;
+	struct inode *node_inode;
+	struct f2fs_sm_info *sm_info;
+	struct f2fs_bio_info *write_io[3];
+	struct f2fs_rwsem io_order_lock;
+	mempool_t *write_io_dummy;
+	long unsigned int page_eio_ofs[3];
+	int page_eio_cnt[3];
+	struct f2fs_checkpoint *ckpt;
+	int cur_cp_pack;
+	spinlock_t cp_lock;
+	struct inode *meta_inode;
+	struct f2fs_rwsem cp_global_sem;
+	struct f2fs_rwsem cp_rwsem;
+	struct f2fs_rwsem node_write;
+	struct f2fs_rwsem node_change;
+	wait_queue_head_t cp_wait;
+	long unsigned int last_time[6];
+	long int interval_time[6];
+	struct ckpt_req_control cprc_info;
+	struct inode_management im[5];
+	spinlock_t fsync_node_lock;
+	struct list_head fsync_node_list;
+	unsigned int fsync_seg_id;
+	unsigned int fsync_node_num;
+	unsigned int max_orphans;
+	struct list_head inode_list[3];
+	spinlock_t inode_lock[3];
+	struct mutex flush_lock;
+	struct extent_tree_info extent_tree[2];
+	atomic64_t allocated_data_blocks;
+	unsigned int hot_data_age_threshold;
+	unsigned int warm_data_age_threshold;
+	unsigned int log_sectors_per_block;
+	unsigned int log_blocksize;
+	unsigned int blocksize;
+	unsigned int root_ino_num;
+	unsigned int node_ino_num;
+	unsigned int meta_ino_num;
+	unsigned int log_blocks_per_seg;
+	unsigned int blocks_per_seg;
+	unsigned int unusable_blocks_per_sec;
+	unsigned int segs_per_sec;
+	unsigned int secs_per_zone;
+	unsigned int total_sections;
+	unsigned int total_node_count;
+	unsigned int total_valid_node_count;
+	int dir_level;
+	bool readdir_ra;
+	u64 max_io_bytes;
+	block_t user_block_count;
+	block_t total_valid_block_count;
+	block_t discard_blks;
+	block_t last_valid_block_count;
+	block_t reserved_blocks;
+	block_t current_reserved_blocks;
+	block_t unusable_block_count;
+	unsigned int nquota_files;
+	struct f2fs_rwsem quota_sem;
+	atomic_t nr_pages[13];
+	struct percpu_counter alloc_valid_block_count;
+	struct percpu_counter rf_node_block_count;
+	atomic_t wb_sync_req[2];
+	struct percpu_counter total_valid_inode_count;
+	struct f2fs_mount_info mount_opt;
+	struct f2fs_rwsem gc_lock;
+	struct f2fs_gc_kthread *gc_thread;
+	struct atgc_management am;
+	unsigned int cur_victim_sec;
+	unsigned int gc_mode;
+	unsigned int next_victim_seg[2];
+	spinlock_t gc_remaining_trials_lock;
+	unsigned int gc_remaining_trials;
+	long long unsigned int skipped_gc_rwsem;
+	u64 gc_pin_file_threshold;
+	struct f2fs_rwsem pin_sem;
+	unsigned int max_victim_search;
+	unsigned int migration_granularity;
+	struct f2fs_stat_info *stat_info;
+	atomic_t meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	atomic_t inplace_count;
+	atomic64_t total_hit_ext[2];
+	atomic64_t read_hit_rbtree[2];
+	atomic64_t read_hit_cached[2];
+	atomic64_t read_hit_largest;
+	atomic_t inline_xattr;
+	atomic_t inline_inode;
+	atomic_t inline_dir;
+	atomic_t compr_inode;
+	atomic64_t compr_blocks;
+	atomic_t swapfile_inode;
+	atomic_t atomic_files;
+	atomic_t max_aw_cnt;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	unsigned int ndirty_inode[3];
+	spinlock_t stat_lock;
+	unsigned int data_io_flag;
+	unsigned int node_io_flag;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct kobject s_stat_kobj;
+	struct completion s_stat_kobj_unregister;
+	struct kobject s_feature_list_kobj;
+	struct completion s_feature_list_kobj_unregister;
+	struct list_head s_list;
+	struct mutex umount_mutex;
+	unsigned int shrinker_run_no;
+	int s_ndevs;
+	struct f2fs_dev_info *devs;
+	unsigned int dirty_device;
+	spinlock_t dev_lock;
+	bool aligned_blksize;
+	u64 sectors_written_start;
+	u64 kbytes_written;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_chksum_seed;
+	struct workqueue_struct *post_read_wq;
+	unsigned char errors[16];
+	spinlock_t error_lock;
+	bool error_dirty;
+	struct kmem_cache *inline_xattr_slab;
+	unsigned int inline_xattr_slab_size;
+	unsigned int gc_segment_mode;
+	unsigned int gc_reclaimed_segs[7];
+	long unsigned int seq_file_ra_mul;
+	int max_fragment_chunk;
+	int max_fragment_hole;
+	atomic64_t current_atomic_write;
+	s64 peak_atomic_write;
+	u64 committed_atomic_block;
+	u64 revoked_atomic_block;
+	spinlock_t iostat_lock;
+	long long unsigned int rw_iostat[27];
+	long long unsigned int prev_rw_iostat[27];
+	bool iostat_enable;
+	long unsigned int iostat_next_period;
+	unsigned int iostat_period_ms;
+	spinlock_t iostat_lat_lock;
+	struct iostat_lat_info *iostat_io_lat;
+};
+
+struct f2fs_bio_info {
+	struct f2fs_sb_info *sbi;
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	struct f2fs_io_info fio;
+	struct f2fs_rwsem io_rwsem;
+	spinlock_t io_lock;
+	struct list_head io_list;
+	struct list_head bio_list;
+	struct f2fs_rwsem bio_list_lock;
+};
+
+struct f2fs_dev_info {
+	struct block_device *bdev;
+	char path[64];
+	unsigned int total_segments;
+	block_t start_blk;
+	block_t end_blk;
+	unsigned int nr_blkz;
+	long unsigned int *blkz_seq;
+};
+
+enum {
+	SBI_IS_DIRTY = 0,
+	SBI_IS_CLOSE = 1,
+	SBI_NEED_FSCK = 2,
+	SBI_POR_DOING = 3,
+	SBI_NEED_SB_WRITE = 4,
+	SBI_NEED_CP = 5,
+	SBI_IS_SHUTDOWN = 6,
+	SBI_IS_RECOVERED = 7,
+	SBI_CP_DISABLED = 8,
+	SBI_CP_DISABLED_QUICK = 9,
+	SBI_QUOTA_NEED_FLUSH = 10,
+	SBI_QUOTA_SKIP_FLUSH = 11,
+	SBI_QUOTA_NEED_REPAIR = 12,
+	SBI_IS_RESIZEFS = 13,
+	SBI_IS_FREEZING = 14,
+};
+
+enum {
+	PAGE_PRIVATE_NOT_POINTER = 0,
+	PAGE_PRIVATE_ATOMIC_WRITE = 1,
+	PAGE_PRIVATE_DUMMY_WRITE = 2,
+	PAGE_PRIVATE_ONGOING_MIGRATION = 3,
+	PAGE_PRIVATE_INLINE_INODE = 4,
+	PAGE_PRIVATE_REF_RESOURCE = 5,
+	PAGE_PRIVATE_MAX = 6,
+};
+
+enum compress_algorithm_type {
+	COMPRESS_LZO = 0,
+	COMPRESS_LZ4 = 1,
+	COMPRESS_ZSTD = 2,
+	COMPRESS_LZORLE = 3,
+	COMPRESS_MAX = 4,
+};
+
+struct f2fs_stat_info {
+	struct list_head stat_list;
+	struct f2fs_sb_info *sbi;
+	int all_area_segs;
+	int sit_area_segs;
+	int nat_area_segs;
+	int ssa_area_segs;
+	int main_area_segs;
+	int main_area_sections;
+	int main_area_zones;
+	long long unsigned int hit_cached[2];
+	long long unsigned int hit_rbtree[2];
+	long long unsigned int total_ext[2];
+	long long unsigned int hit_total[2];
+	int ext_tree[2];
+	int zombie_tree[2];
+	int ext_node[2];
+	long long unsigned int ext_mem[2];
+	long long unsigned int hit_largest;
+	long long unsigned int allocated_data_blocks;
+	int ndirty_node;
+	int ndirty_dent;
+	int ndirty_meta;
+	int ndirty_imeta;
+	int ndirty_data;
+	int ndirty_qdata;
+	unsigned int ndirty_dirs;
+	unsigned int ndirty_files;
+	unsigned int nquota_files;
+	unsigned int ndirty_all;
+	int nats;
+	int dirty_nats;
+	int sits;
+	int dirty_sits;
+	int free_nids;
+	int avail_nids;
+	int alloc_nids;
+	int total_count;
+	int utilization;
+	int bg_gc;
+	int nr_wb_cp_data;
+	int nr_wb_data;
+	int nr_rd_data;
+	int nr_rd_node;
+	int nr_rd_meta;
+	int nr_dio_read;
+	int nr_dio_write;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	int nr_flushing;
+	int nr_flushed;
+	int flush_list_empty;
+	int nr_discarding;
+	int nr_discarded;
+	int nr_discard_cmd;
+	unsigned int undiscard_blks;
+	int nr_issued_ckpt;
+	int nr_total_ckpt;
+	int nr_queued_ckpt;
+	unsigned int cur_ckpt_time;
+	unsigned int peak_ckpt_time;
+	int inline_xattr;
+	int inline_inode;
+	int inline_dir;
+	int append;
+	int update;
+	int orphans;
+	int compr_inode;
+	int swapfile_inode;
+	long long unsigned int compr_blocks;
+	int aw_cnt;
+	int max_aw_cnt;
+	unsigned int valid_count;
+	unsigned int valid_node_count;
+	unsigned int valid_inode_count;
+	unsigned int discard_blks;
+	unsigned int bimodal;
+	unsigned int avg_vblocks;
+	int util_free;
+	int util_valid;
+	int util_invalid;
+	int rsvd_segs;
+	int overp_segs;
+	int dirty_count;
+	int node_pages;
+	int meta_pages;
+	int compress_pages;
+	int compress_page_hit;
+	int prefree_count;
+	int call_count;
+	int cp_count;
+	int bg_cp_count;
+	int tot_segs;
+	int node_segs;
+	int data_segs;
+	int free_segs;
+	int free_secs;
+	int bg_node_segs;
+	int bg_data_segs;
+	int tot_blks;
+	int data_blks;
+	int node_blks;
+	int bg_data_blks;
+	int bg_node_blks;
+	int curseg[8];
+	int cursec[8];
+	int curzone[8];
+	unsigned int dirty_seg[8];
+	unsigned int full_seg[8];
+	unsigned int valid_blks[8];
+	unsigned int meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	unsigned int inplace_count;
+	long long unsigned int base_mem;
+	long long unsigned int cache_mem;
+	long long unsigned int page_mem;
+};
+
+struct node_info {
+	nid_t nid;
+	nid_t ino;
+	block_t blk_addr;
+	unsigned char version;
+	unsigned char flag;
+};
+
+struct seg_entry {
+	unsigned int type: 6;
+	unsigned int valid_blocks: 10;
+	unsigned int ckpt_valid_blocks: 10;
+	unsigned int padding: 6;
+	unsigned char *cur_valid_map;
+	unsigned char *ckpt_valid_map;
+	unsigned char *discard_map;
+	long long unsigned int mtime;
+};
+
+struct sec_entry {
+	unsigned int valid_blocks;
+};
+
+struct victim_selection {
+	int (*get_victim)(struct f2fs_sb_info *, unsigned int *, int, int, char, long long unsigned int);
+};
+
+struct f2fs_dir_entry {
+	__le32 hash_code;
+	__le32 ino;
+	__le16 name_len;
+	__u8 file_type;
+} __attribute__((packed));
+
+struct f2fs_dentry_block {
+	__u8 dentry_bitmap[27];
+	__u8 reserved[3];
+	struct f2fs_dir_entry dentry[214];
+	__u8 filename[1712];
+} __attribute__((packed));
+
+enum {
+	F2FS_FT_UNKNOWN = 0,
+	F2FS_FT_REG_FILE = 1,
+	F2FS_FT_DIR = 2,
+	F2FS_FT_CHRDEV = 3,
+	F2FS_FT_BLKDEV = 4,
+	F2FS_FT_FIFO = 5,
+	F2FS_FT_SOCK = 6,
+	F2FS_FT_SYMLINK = 7,
+	F2FS_FT_MAX = 8,
+};
+
+struct f2fs_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	f2fs_hash_t hash;
+};
+
+struct f2fs_dentry_ptr {
+	struct inode *inode;
+	void *bitmap;
+	struct f2fs_dir_entry *dentry;
+	__u8 (*filename)[8];
+	int max;
+	int nr_bitmap;
+};
+
+enum nid_state {
+	FREE_NID = 0,
+	PREALLOC_NID = 1,
+	MAX_NID_STATE = 2,
+};
+
+enum nat_state {
+	TOTAL_NAT = 0,
+	DIRTY_NAT = 1,
+	RECLAIMABLE_NAT = 2,
+	MAX_NAT_STATE = 3,
+};
+
+enum inode_type {
+	DIR_INODE = 0,
+	FILE_INODE = 1,
+	DIRTY_META = 2,
+	NR_INODE_TYPE = 3,
+};
+
+enum {
+	CP_TIME = 0,
+	REQ_TIME = 1,
+	DISCARD_TIME = 2,
+	GC_TIME = 3,
+	DISABLE_TIME = 4,
+	UMOUNT_DISCARD_TIMEOUT = 5,
+	MAX_TIME = 6,
+};
+
+enum {
+	GC_NORMAL = 0,
+	GC_IDLE_CB = 1,
+	GC_IDLE_GREEDY = 2,
+	GC_IDLE_AT = 3,
+	GC_URGENT_HIGH = 4,
+	GC_URGENT_LOW = 5,
+	GC_URGENT_MID = 6,
+	MAX_GC_MODE = 7,
+};
+
+enum fsync_mode {
+	FSYNC_MODE_POSIX = 0,
+	FSYNC_MODE_STRICT = 1,
+	FSYNC_MODE_NOBARRIER = 2,
+};
+
+enum {
+	ALLOC_NODE = 0,
+	LOOKUP_NODE = 1,
+	LOOKUP_NODE_RA = 2,
+};
+
+struct f2fs_map_blocks {
+	struct block_device *m_bdev;
+	block_t m_pblk;
+	block_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	long unsigned int *m_next_pgofs;
+	long unsigned int *m_next_extent;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+};
+
+enum {
+	F2FS_GET_BLOCK_DEFAULT = 0,
+	F2FS_GET_BLOCK_FIEMAP = 1,
+	F2FS_GET_BLOCK_BMAP = 2,
+	F2FS_GET_BLOCK_DIO = 3,
+	F2FS_GET_BLOCK_PRE_DIO = 4,
+	F2FS_GET_BLOCK_PRE_AIO = 5,
+	F2FS_GET_BLOCK_PRECACHE = 6,
+};
+
+struct dnode_of_data {
+	struct inode *inode;
+	struct page *inode_page;
+	struct page *node_page;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	bool inode_page_locked;
+	bool node_changed;
+	char cur_level;
+	char max_level;
+	block_t data_blkaddr;
+};
+
+enum cp_reason_type {
+	CP_NO_NEEDED = 0,
+	CP_NON_REGULAR = 1,
+	CP_COMPRESSED = 2,
+	CP_HARDLINK = 3,
+	CP_SB_NEED_CP = 4,
+	CP_WRONG_PINO = 5,
+	CP_NO_SPC_ROLL = 6,
+	CP_NODE_NEED_CP = 7,
+	CP_FASTBOOT_MODE = 8,
+	CP_SPEC_LOG_NUM = 9,
+	CP_RECOVER_DIR = 10,
+};
+
+struct f2fs_gc_control {
+	unsigned int victim_segno;
+	int init_gc_type;
+	bool no_bg_gc;
+	bool should_migrate_blocks;
+	bool err_gc_skipped;
+	unsigned int nr_free_secs;
+};
+
+enum {
+	FS_MODE_ADAPTIVE = 0,
+	FS_MODE_LFS = 1,
+	FS_MODE_FRAGMENT_SEG = 2,
+	FS_MODE_FRAGMENT_BLK = 3,
+};
+
+enum {
+	COMPR_MODE_FS = 0,
+	COMPR_MODE_USER = 1,
+};
+
+struct f2fs_gc_kthread {
+	struct task_struct *f2fs_gc_task;
+	wait_queue_head_t gc_wait_queue_head;
+	unsigned int urgent_sleep_time;
+	unsigned int min_sleep_time;
+	unsigned int max_sleep_time;
+	unsigned int no_gc_sleep_time;
+	unsigned int gc_wake;
+	wait_queue_head_t fggc_wq;
+};
+
+struct iostat_lat_info {
+	long unsigned int sum_lat[9];
+	long unsigned int peak_lat[9];
+	unsigned int bio_cnt[9];
+};
+
+enum {
+	GC_CB = 0,
+	GC_GREEDY = 1,
+	GC_AT = 2,
+	ALLOC_NEXT = 3,
+	FLUSH_DEVICE = 4,
+	MAX_GC_POLICY = 5,
+};
+
+enum {
+	BG_GC = 0,
+	FG_GC = 1,
+};
+
+enum dirty_type {
+	DIRTY_HOT_DATA = 0,
+	DIRTY_WARM_DATA = 1,
+	DIRTY_COLD_DATA = 2,
+	DIRTY_HOT_NODE = 3,
+	DIRTY_WARM_NODE = 4,
+	DIRTY_COLD_NODE = 5,
+	DIRTY = 6,
+	PRE = 7,
+	NR_DIRTY_TYPE = 8,
+};
+
+enum {
+	READ_IO = 0,
+	WRITE_SYNC_IO = 1,
+	WRITE_ASYNC_IO = 2,
+	MAX_IO_TYPE = 3,
+};
+
+struct f2fs_gc_range {
+	__u32 sync;
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_defragment {
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_move_range {
+	__u32 dst_fd;
+	__u64 pos_in;
+	__u64 pos_out;
+	__u64 len;
+};
+
+struct f2fs_flush_device {
+	__u32 dev_num;
+	__u32 segments;
+};
+
+struct f2fs_sectrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+};
+
+struct f2fs_comp_option {
+	__u8 algorithm;
+	__u8 log_cluster_size;
+};
+
+struct compat_f2fs_gc_range {
+	u32 sync;
+	compat_u64 start;
+	compat_u64 len;
+};
+
+struct compat_f2fs_move_range {
+	u32 dst_fd;
+	compat_u64 pos_in;
+	compat_u64 pos_out;
+	compat_u64 len;
+};
+
+struct cp_control {
+	int reason;
+	__u64 trim_start;
+	__u64 trim_end;
+	__u64 trim_minlen;
+};
+
+enum {
+	BGGC_MODE_ON = 0,
+	BGGC_MODE_OFF = 1,
+	BGGC_MODE_SYNC = 2,
+};
+
+enum {
+	ALLOC_MODE_DEFAULT = 0,
+	ALLOC_MODE_REUSE = 1,
+};
+
+enum {
+	DISCARD_UNIT_BLOCK = 0,
+	DISCARD_UNIT_SEGMENT = 1,
+	DISCARD_UNIT_SECTION = 2,
+};
+
+enum {
+	MEMORY_MODE_NORMAL = 0,
+	MEMORY_MODE_LOW = 1,
+};
+
+enum {
+	LFS = 0,
+	SSR = 1,
+	AT_SSR = 2,
+};
+
+struct victim_sel_policy {
+	int alloc_mode;
+	int gc_mode;
+	long unsigned int *dirty_bitmap;
+	unsigned int max_search;
+	unsigned int offset;
+	unsigned int ofs_unit;
+	unsigned int min_cost;
+	long long unsigned int oldest_age;
+	unsigned int min_segno;
+	long long unsigned int age;
+	long long unsigned int age_threshold;
+};
+
+enum {
+	F2FS_IPU_FORCE = 0,
+	F2FS_IPU_SSR = 1,
+	F2FS_IPU_UTIL = 2,
+	F2FS_IPU_SSR_UTIL = 3,
+	F2FS_IPU_FSYNC = 4,
+	F2FS_IPU_ASYNC = 5,
+	F2FS_IPU_NOCACHE = 6,
+	F2FS_IPU_HONOR_OPU_WRITE = 7,
+};
+
+struct f2fs_iostat_latency {
+	unsigned int peak_lat;
+	unsigned int avg_lat;
+	unsigned int cnt;
+};
+
+struct trace_event_raw_f2fs__inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t pino;
+	umode_t mode;
+	loff_t size;
+	unsigned int nlink;
+	blkcnt_t blocks;
+	__u8 advise;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__inode_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int cp_reason;
+	int datasync;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int dirty;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_data_blocks_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	unsigned int ofs;
+	int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u64 from;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_node {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	block_t blk_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_partial_nodes {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid[3];
+	int depth;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_file_write_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	size_t length;
+	ssize_t ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_map_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	block_t m_lblk;
+	block_t m_pblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+	int create;
+	int flag;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_background_gc {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int wait_ms;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	int gc_type;
+	bool no_bg_gc;
+	unsigned int nr_free_secs;
+	long long int dirty_nodes;
+	long long int dirty_dents;
+	long long int dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_end {
+	struct trace_entry ent;
+	dev_t dev;
+	int ret;
+	int seg_freed;
+	int sec_freed;
+	long long int dirty_nodes;
+	long long int dirty_dents;
+	long long int dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_get_victim {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	int gc_type;
+	int alloc_mode;
+	int gc_mode;
+	unsigned int victim;
+	unsigned int cost;
+	unsigned int ofs_unit;
+	unsigned int pre_victim;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	nid_t cino;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readdir {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t start;
+	loff_t end;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fallocate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int mode;
+	loff_t offset;
+	loff_t len;
+	loff_t size;
+	blkcnt_t blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t ki_pos;
+	int ki_flags;
+	u16 ki_ioprio;
+	long unsigned int len;
+	int rw;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	long unsigned int len;
+	int rw;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_reserve_new_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	blkcnt_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__submit_page_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int index;
+	block_t old_blkaddr;
+	block_t new_blkaddr;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int temp;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__bio {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t target;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int type;
+	sector_t sector;
+	unsigned int size;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__page {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	long unsigned int index;
+	int dirty;
+	int uptodate;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_filemap_fault {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int index;
+	long unsigned int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	long unsigned int writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char for_background;
+	char tagged_writepages;
+	char for_reclaim;
+	char range_cyclic;
+	char for_sync;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readpages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int start;
+	unsigned int nrpage;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int reason;
+	u32 __data_loc_dest_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_discard {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	block_t blklen;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_issue_reset_zone {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_issue_flush {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int nobarrier;
+	unsigned int flush_merge;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_extent_tree_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_read_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	u32 blk;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_age_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	long long unsigned int age;
+	long long unsigned int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_read_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	u32 blk;
+	unsigned int len;
+	unsigned int c_len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_age_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int len;
+	long long unsigned int age;
+	long long unsigned int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shrink_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int node_cnt;
+	unsigned int tree_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_destroy_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int node_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_dirty_inodes {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	s64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int mode;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int idx;
+	unsigned int size;
+	unsigned int algtype;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long unsigned int idx;
+	unsigned int size;
+	unsigned int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat {
+	struct trace_entry ent;
+	dev_t dev;
+	long long unsigned int app_dio;
+	long long unsigned int app_bio;
+	long long unsigned int app_wio;
+	long long unsigned int app_mio;
+	long long unsigned int app_bcdio;
+	long long unsigned int app_mcdio;
+	long long unsigned int fs_dio;
+	long long unsigned int fs_cdio;
+	long long unsigned int fs_nio;
+	long long unsigned int fs_mio;
+	long long unsigned int fs_gc_dio;
+	long long unsigned int fs_gc_nio;
+	long long unsigned int fs_cp_dio;
+	long long unsigned int fs_cp_nio;
+	long long unsigned int fs_cp_mio;
+	long long unsigned int app_drio;
+	long long unsigned int app_brio;
+	long long unsigned int app_rio;
+	long long unsigned int app_mrio;
+	long long unsigned int app_bcrio;
+	long long unsigned int app_mcrio;
+	long long unsigned int fs_drio;
+	long long unsigned int fs_gdrio;
+	long long unsigned int fs_cdrio;
+	long long unsigned int fs_nrio;
+	long long unsigned int fs_mrio;
+	long long unsigned int fs_discard;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int d_rd_peak;
+	unsigned int d_rd_avg;
+	unsigned int d_rd_cnt;
+	unsigned int n_rd_peak;
+	unsigned int n_rd_avg;
+	unsigned int n_rd_cnt;
+	unsigned int m_rd_peak;
+	unsigned int m_rd_avg;
+	unsigned int m_rd_cnt;
+	unsigned int d_wr_s_peak;
+	unsigned int d_wr_s_avg;
+	unsigned int d_wr_s_cnt;
+	unsigned int n_wr_s_peak;
+	unsigned int n_wr_s_avg;
+	unsigned int n_wr_s_cnt;
+	unsigned int m_wr_s_peak;
+	unsigned int m_wr_s_avg;
+	unsigned int m_wr_s_cnt;
+	unsigned int d_wr_as_peak;
+	unsigned int d_wr_as_avg;
+	unsigned int d_wr_as_cnt;
+	unsigned int n_wr_as_peak;
+	unsigned int n_wr_as_avg;
+	unsigned int n_wr_as_cnt;
+	unsigned int m_wr_as_peak;
+	unsigned int m_wr_as_avg;
+	unsigned int m_wr_as_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_bmap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fiemap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	long long unsigned int len;
+	unsigned int flags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_start {
+	struct trace_entry ent;
+	u32 __data_loc_pathbuf;
+	loff_t offset;
+	int bytes;
+	loff_t i_size;
+	u32 __data_loc_cmdline;
+	pid_t pid;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_end {
+	struct trace_entry ent;
+	ino_t ino;
+	loff_t offset;
+	int bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_f2fs__inode {};
+
+struct trace_event_data_offsets_f2fs__inode_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_file_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_fs {};
+
+struct trace_event_data_offsets_f2fs_unlink_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_truncate_data_blocks_range {};
+
+struct trace_event_data_offsets_f2fs__truncate_op {};
+
+struct trace_event_data_offsets_f2fs__truncate_node {};
+
+struct trace_event_data_offsets_f2fs_truncate_partial_nodes {};
+
+struct trace_event_data_offsets_f2fs_file_write_iter {};
+
+struct trace_event_data_offsets_f2fs_map_blocks {};
+
+struct trace_event_data_offsets_f2fs_background_gc {};
+
+struct trace_event_data_offsets_f2fs_gc_begin {};
+
+struct trace_event_data_offsets_f2fs_gc_end {};
+
+struct trace_event_data_offsets_f2fs_get_victim {};
+
+struct trace_event_data_offsets_f2fs_lookup_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_lookup_end {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_readdir {};
+
+struct trace_event_data_offsets_f2fs_fallocate {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_enter {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_exit {};
+
+struct trace_event_data_offsets_f2fs_reserve_new_blocks {};
+
+struct trace_event_data_offsets_f2fs__submit_page_bio {};
+
+struct trace_event_data_offsets_f2fs__bio {};
+
+struct trace_event_data_offsets_f2fs_write_begin {};
+
+struct trace_event_data_offsets_f2fs_write_end {};
+
+struct trace_event_data_offsets_f2fs__page {};
+
+struct trace_event_data_offsets_f2fs_filemap_fault {};
+
+struct trace_event_data_offsets_f2fs_writepages {};
+
+struct trace_event_data_offsets_f2fs_readpages {};
+
+struct trace_event_data_offsets_f2fs_write_checkpoint {
+	u32 dest_msg;
+};
+
+struct trace_event_data_offsets_f2fs_discard {};
+
+struct trace_event_data_offsets_f2fs_issue_reset_zone {};
+
+struct trace_event_data_offsets_f2fs_issue_flush {};
+
+struct trace_event_data_offsets_f2fs_lookup_extent_tree_start {};
+
+struct trace_event_data_offsets_f2fs_lookup_read_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_lookup_age_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_update_read_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_update_age_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_shrink_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_destroy_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_sync_dirty_inodes {};
+
+struct trace_event_data_offsets_f2fs_shutdown {};
+
+struct trace_event_data_offsets_f2fs_zip_start {};
+
+struct trace_event_data_offsets_f2fs_zip_end {};
+
+struct trace_event_data_offsets_f2fs_iostat {};
+
+struct trace_event_data_offsets_f2fs_iostat_latency {};
+
+struct trace_event_data_offsets_f2fs_bmap {};
+
+struct trace_event_data_offsets_f2fs_fiemap {};
+
+struct trace_event_data_offsets_f2fs__rw_start {
+	u32 pathbuf;
+	u32 cmdline;
+};
+
+struct trace_event_data_offsets_f2fs__rw_end {};
+
+typedef void (*btf_trace_f2fs_sync_file_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_sync_file_exit)(void *, struct inode *, int, int, int);
+
+typedef void (*btf_trace_f2fs_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_f2fs_iget)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_iget_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_new_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_f2fs_unlink_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_truncate_data_blocks_range)(void *, struct inode *, nid_t, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_enter)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_node)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_partial_nodes)(void *, struct inode *, nid_t *, int, int);
+
+typedef void (*btf_trace_f2fs_file_write_iter)(void *, struct inode *, loff_t, size_t, ssize_t);
+
+typedef void (*btf_trace_f2fs_map_blocks)(void *, struct inode *, struct f2fs_map_blocks *, int, int, int);
+
+typedef void (*btf_trace_f2fs_background_gc)(void *, struct super_block *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_begin)(void *, struct super_block *, int, bool, unsigned int, long long int, long long int, long long int, unsigned int, unsigned int, int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_end)(void *, struct super_block *, int, int, int, long long int, long long int, long long int, unsigned int, unsigned int, int, unsigned int);
+
+typedef void (*btf_trace_f2fs_get_victim)(void *, struct super_block *, int, int, struct victim_sel_policy *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_lookup_start)(void *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_f2fs_lookup_end)(void *, struct inode *, struct dentry *, nid_t, int);
+
+typedef void (*btf_trace_f2fs_readdir)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_fallocate)(void *, struct inode *, int, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_enter)(void *, struct inode *, struct kiocb *, long int, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
+
+typedef void (*btf_trace_f2fs_reserve_new_blocks)(void *, struct inode *, nid_t, unsigned int, blkcnt_t);
+
+typedef void (*btf_trace_f2fs_submit_page_bio)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_submit_page_write)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_prepare_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_prepare_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_writepage)(void *, struct page *, int);
+
+typedef void (*btf_trace_f2fs_do_write_data_page)(void *, struct page *, int);
+
+typedef void (*btf_trace_f2fs_readpage)(void *, struct page *, int);
+
+typedef void (*btf_trace_f2fs_set_page_dirty)(void *, struct page *, int);
+
+typedef void (*btf_trace_f2fs_vm_page_mkwrite)(void *, struct page *, int);
+
+typedef void (*btf_trace_f2fs_filemap_fault)(void *, struct inode *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_f2fs_writepages)(void *, struct inode *, struct writeback_control *, int);
+
+typedef void (*btf_trace_f2fs_readpages)(void *, struct inode *, long unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_checkpoint)(void *, struct super_block *, int, const char *);
+
+typedef void (*btf_trace_f2fs_queue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_issue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_remove_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_issue_reset_zone)(void *, struct block_device *, block_t);
+
+typedef void (*btf_trace_f2fs_issue_flush)(void *, struct block_device *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_lookup_extent_tree_start)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_lookup_read_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_lookup_age_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_update_read_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, block_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_update_age_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, long long unsigned int, long long unsigned int);
+
+typedef void (*btf_trace_f2fs_shrink_extent_tree)(void *, struct f2fs_sb_info *, unsigned int, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_destroy_extent_tree)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_enter)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_exit)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_shutdown)(void *, struct f2fs_sb_info *, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_compress_pages_start)(void *, struct inode *, long unsigned int, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_decompress_pages_start)(void *, struct inode *, long unsigned int, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_compress_pages_end)(void *, struct inode *, long unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_decompress_pages_end)(void *, struct inode *, long unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_iostat)(void *, struct f2fs_sb_info *, long long unsigned int *);
+
+typedef void (*btf_trace_f2fs_iostat_latency)(void *, struct f2fs_sb_info *, struct f2fs_iostat_latency(*)[3]);
+
+typedef void (*btf_trace_f2fs_bmap)(void *, struct inode *, sector_t, sector_t);
+
+typedef void (*btf_trace_f2fs_fiemap)(void *, struct inode *, sector_t, sector_t, long long unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_dataread_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_dataread_end)(void *, struct inode *, loff_t, int);
+
+typedef void (*btf_trace_f2fs_datawrite_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_datawrite_end)(void *, struct inode *, loff_t, int);
+
+enum {
+	Opt_gc_background = 0,
+	Opt_disable_roll_forward = 1,
+	Opt_norecovery___3 = 2,
+	Opt_discard___5 = 3,
+	Opt_nodiscard___4 = 4,
+	Opt_noheap = 5,
+	Opt_heap = 6,
+	Opt_user_xattr___2 = 7,
+	Opt_nouser_xattr = 8,
+	Opt_acl___4 = 9,
+	Opt_noacl___2 = 10,
+	Opt_active_logs = 11,
+	Opt_disable_ext_identify = 12,
+	Opt_inline_xattr = 13,
+	Opt_noinline_xattr = 14,
+	Opt_inline_xattr_size = 15,
+	Opt_inline_data = 16,
+	Opt_inline_dentry = 17,
+	Opt_noinline_dentry = 18,
+	Opt_flush_merge = 19,
+	Opt_noflush_merge = 20,
+	Opt_barrier___3 = 21,
+	Opt_nobarrier___3 = 22,
+	Opt_fastboot = 23,
+	Opt_extent_cache = 24,
+	Opt_noextent_cache = 25,
+	Opt_noinline_data = 26,
+	Opt_data_flush = 27,
+	Opt_reserve_root = 28,
+	Opt_resgid___2 = 29,
+	Opt_resuid___2 = 30,
+	Opt_mode___7 = 31,
+	Opt_io_size_bits = 32,
+	Opt_fault_injection = 33,
+	Opt_fault_type = 34,
+	Opt_lazytime = 35,
+	Opt_nolazytime = 36,
+	Opt_quota___3 = 37,
+	Opt_noquota___3 = 38,
+	Opt_usrquota___3 = 39,
+	Opt_grpquota___3 = 40,
+	Opt_prjquota___3 = 41,
+	Opt_usrjquota___2 = 42,
+	Opt_grpjquota___2 = 43,
+	Opt_prjjquota = 44,
+	Opt_offusrjquota = 45,
+	Opt_offgrpjquota = 46,
+	Opt_offprjjquota = 47,
+	Opt_jqfmt_vfsold = 48,
+	Opt_jqfmt_vfsv0 = 49,
+	Opt_jqfmt_vfsv1 = 50,
+	Opt_alloc = 51,
+	Opt_fsync = 52,
+	Opt_test_dummy_encryption___2 = 53,
+	Opt_inlinecrypt___2 = 54,
+	Opt_checkpoint_disable = 55,
+	Opt_checkpoint_disable_cap = 56,
+	Opt_checkpoint_disable_cap_perc = 57,
+	Opt_checkpoint_enable = 58,
+	Opt_checkpoint_merge = 59,
+	Opt_nocheckpoint_merge = 60,
+	Opt_compress_algorithm = 61,
+	Opt_compress_log_size = 62,
+	Opt_compress_extension = 63,
+	Opt_nocompress_extension = 64,
+	Opt_compress_chksum = 65,
+	Opt_compress_mode = 66,
+	Opt_compress_cache = 67,
+	Opt_atgc = 68,
+	Opt_gc_merge = 69,
+	Opt_nogc_merge = 70,
+	Opt_discard_unit = 71,
+	Opt_memory_mode = 72,
+	Opt_age_extent_cache = 73,
+	Opt_err___9 = 74,
+};
+
+struct f2fs_report_zones_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *dev;
+};
+
+struct f2fs_orphan_block {
+	__le32 ino[1020];
+	__le32 reserved;
+	__le16 blk_addr;
+	__le16 blk_count;
+	__le32 entry_count;
+	__le32 check_sum;
+};
+
+enum {
+	NAT_BITMAP = 0,
+	SIT_BITMAP = 1,
+};
+
+struct ino_entry {
+	struct list_head list;
+	nid_t ino;
+	unsigned int dirty_device;
+};
+
+struct ckpt_req {
+	struct completion wait;
+	struct llist_node llnode;
+	int ret;
+	ktime_t queue_time;
+};
+
+struct free_nid {
+	struct list_head list;
+	nid_t nid;
+	int state;
+};
+
+struct inode_entry {
+	struct list_head list;
+	struct inode *inode;
+};
+
+struct rb_entry {
+	struct rb_node rb_node;
+	union {
+		struct {
+			unsigned int ofs;
+			unsigned int len;
+		};
+		long long unsigned int key;
+	};
+};
+
+enum need_lock_type {
+	LOCK_REQ = 0,
+	LOCK_DONE = 1,
+	LOCK_RETRY = 2,
+};
+
+struct gc_inode_list {
+	struct list_head ilist;
+	struct xarray iroot;
+};
+
+struct victim_info {
+	long long unsigned int mtime;
+	unsigned int segno;
+};
+
+struct victim_entry {
+	struct rb_node rb_node;
+	union {
+		struct {
+			long long unsigned int mtime;
+			unsigned int segno;
+		};
+		struct victim_info vi;
+	};
+	struct list_head list;
+};
+
+struct bio_entry {
+	struct bio *bio;
+	struct list_head list;
+};
+
+enum mem_type {
+	FREE_NIDS = 0,
+	NAT_ENTRIES = 1,
+	DIRTY_DENTS = 2,
+	INO_ENTRIES = 3,
+	READ_EXTENT_CACHE = 4,
+	AGE_EXTENT_CACHE = 5,
+	DISCARD_CACHE = 6,
+	COMPRESS_PAGE = 7,
+	BASE_CHECK = 8,
+};
+
+struct bio_post_read_ctx___2;
+
+struct bio_iostat_ctx {
+	struct f2fs_sb_info *sbi;
+	long unsigned int submit_ts;
+	enum page_type type;
+	struct bio_post_read_ctx___2 *post_read_ctx;
+};
+
+struct bio_post_read_ctx___2 {
+	struct bio *bio;
+	struct f2fs_sb_info *sbi;
+	struct work_struct work;
+	unsigned int enabled_steps;
+	bool decompression_attempted;
+	block_t fs_blkaddr;
+};
+
+enum bio_post_read_step___2 {
+	STEP_DECRYPT___2 = 0,
+	STEP_DECOMPRESS = 0,
+	STEP_VERITY___2 = 0,
+};
+
+struct fsync_inode_entry {
+	struct list_head list;
+	struct inode *inode;
+	block_t blkaddr;
+	block_t last_dentry;
+};
+
+struct f2fs_nat_block {
+	struct f2fs_nat_entry entries[455];
+} __attribute__((packed));
+
+enum {
+	NAT_JOURNAL = 0,
+	SIT_JOURNAL = 1,
+};
+
+struct fsync_node_entry {
+	struct list_head list;
+	struct page *page;
+	unsigned int seq_id;
+};
+
+enum {
+	IS_CHECKPOINTED = 0,
+	HAS_FSYNCED_INODE = 1,
+	HAS_LAST_FSYNC = 2,
+	IS_DIRTY = 3,
+	IS_PREALLOC = 4,
+};
+
+struct nat_entry {
+	struct list_head list;
+	struct node_info ni;
+};
+
+struct nat_entry_set {
+	struct list_head set_list;
+	struct list_head entry_list;
+	nid_t set;
+	unsigned int entry_cnt;
+};
+
+struct f2fs_sit_block {
+	struct f2fs_sit_entry entries[55];
+} __attribute__((packed));
+
+struct discard_entry {
+	struct list_head list;
+	block_t start_blkaddr;
+	unsigned char discard_map[64];
+};
+
+enum {
+	D_PREP = 0,
+	D_PARTIAL = 1,
+	D_SUBMIT = 2,
+	D_DONE = 3,
+};
+
+struct discard_info {
+	block_t lstart;
+	block_t len;
+	block_t start;
+};
+
+struct discard_cmd {
+	struct rb_node rb_node;
+	union {
+		struct {
+			block_t lstart;
+			block_t len;
+			block_t start;
+		};
+		struct discard_info di;
+	};
+	struct list_head list;
+	struct completion wait;
+	struct block_device *bdev;
+	short unsigned int ref;
+	unsigned char state;
+	unsigned char queued;
+	int error;
+	spinlock_t lock;
+	short unsigned int bio_ref;
+};
+
+enum {
+	DPOLICY_BG = 0,
+	DPOLICY_FORCE = 1,
+	DPOLICY_FSTRIM = 2,
+	DPOLICY_UMOUNT = 3,
+	MAX_DPOLICY = 4,
+};
+
+struct discard_policy {
+	int type;
+	unsigned int min_interval;
+	unsigned int mid_interval;
+	unsigned int max_interval;
+	unsigned int max_requests;
+	unsigned int io_aware_gran;
+	bool io_aware;
+	bool sync;
+	bool ordered;
+	bool timeout;
+	unsigned int granularity;
+};
+
+struct flush_cmd {
+	struct completion wait;
+	struct llist_node llnode;
+	nid_t ino;
+	int ret;
+};
+
+enum {
+	ALLOC_RIGHT = 0,
+	ALLOC_LEFT = 1,
+};
+
+struct revoke_entry {
+	struct list_head list;
+	block_t old_addr;
+	long unsigned int index;
+};
+
+struct sit_entry_set {
+	struct list_head set_list;
+	unsigned int start_segno;
+	unsigned int entry_cnt;
+};
+
+struct check_zone_write_pointer_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *fdev;
+};
+
+struct f2fs_acl_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct f2fs_acl_header {
+	__le32 a_version;
+};
+
+struct f2fs_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__u32 h_reserved[4];
+};
+
+struct f2fs_xattr_entry {
+	__u8 e_name_index;
+	__u8 e_name_len;
+	__le16 e_value_size;
+	char e_name[0];
+};
+
+enum {
+	GC_THREAD = 0,
+	SM_INFO = 1,
+	DCC_INFO = 2,
+	NM_INFO = 3,
+	F2FS_SBI = 4,
+	STAT_INFO = 5,
+	RESERVED_BLOCKS = 6,
+	CPRC_INFO = 7,
+	ATGC_INFO = 8,
+};
+
+struct f2fs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
+	ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *, const char *, size_t);
+	int struct_type;
+	int offset;
+	int id;
+};
+
+struct ipc64_perm {
+	__kernel_key_t key;
+	__kernel_uid32_t uid;
+	__kernel_gid32_t gid;
+	__kernel_uid32_t cuid;
+	__kernel_gid32_t cgid;
+	__kernel_mode_t mode;
+	unsigned char __pad1[0];
+	short unsigned int seq;
+	short unsigned int __pad2;
+	__kernel_ulong_t __unused1;
+	__kernel_ulong_t __unused2;
+};
+
+typedef s32 compat_key_t;
+
+typedef u16 compat_ushort_t;
+
+typedef u32 __compat_gid32_t;
+
+struct compat_ipc64_perm {
+	compat_key_t key;
+	__compat_uid32_t uid;
+	__compat_gid32_t gid;
+	__compat_uid32_t cuid;
+	__compat_gid32_t cgid;
+	compat_mode_t mode;
+	unsigned char __pad1[0];
+	compat_ushort_t seq;
+	compat_ushort_t __pad2;
+	compat_ulong_t unused1;
+	compat_ulong_t unused2;
+};
+
+struct compat_ipc_perm {
+	key_t key;
+	__compat_uid_t uid;
+	__compat_gid_t gid;
+	__compat_uid_t cuid;
+	__compat_gid_t cgid;
+	compat_mode_t mode;
+	short unsigned int seq;
+};
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	long unsigned int seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ipc_params {
+	key_t key;
+	int flg;
+	union {
+		size_t size;
+		int nsems;
+	} u;
+};
+
+struct ipc_ops {
+	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
+	int (*associate)(struct kern_ipc_perm *, int);
+	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
+};
+
+struct ipc_proc_iface {
+	const char *path;
+	const char *header;
+	int ids;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct ipc_proc_iter {
+	struct ipc_namespace *ns;
+	struct pid_namespace *pid_ns;
+	struct ipc_proc_iface *iface;
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long int m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct msg_msgseg {
+	struct msg_msgseg *next;
+};
+
+struct msgbuf {
+	__kernel_long_t mtype;
+	char mtext[1];
+};
+
+struct msg;
+
+struct msqid_ds {
+	struct ipc_perm msg_perm;
+	struct msg *msg_first;
+	struct msg *msg_last;
+	__kernel_old_time_t msg_stime;
+	__kernel_old_time_t msg_rtime;
+	__kernel_old_time_t msg_ctime;
+	long unsigned int msg_lcbytes;
+	long unsigned int msg_lqbytes;
+	short unsigned int msg_cbytes;
+	short unsigned int msg_qnum;
+	short unsigned int msg_qbytes;
+	__kernel_ipc_pid_t msg_lspid;
+	__kernel_ipc_pid_t msg_lrpid;
+};
+
+struct msqid64_ds {
+	struct ipc64_perm msg_perm;
+	long int msg_stime;
+	long int msg_rtime;
+	long int msg_ctime;
+	long unsigned int msg_cbytes;
+	long unsigned int msg_qnum;
+	long unsigned int msg_qbytes;
+	__kernel_pid_t msg_lspid;
+	__kernel_pid_t msg_lrpid;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct msginfo {
+	int msgpool;
+	int msgmap;
+	int msgmax;
+	int msgmnb;
+	int msgmni;
+	int msgssz;
+	int msgtql;
+	short unsigned int msgseg;
+};
+
+typedef s32 compat_ipc_pid_t;
+
+struct compat_msqid64_ds {
+	struct compat_ipc64_perm msg_perm;
+	compat_ulong_t msg_stime;
+	compat_ulong_t msg_stime_high;
+	compat_ulong_t msg_rtime;
+	compat_ulong_t msg_rtime_high;
+	compat_ulong_t msg_ctime;
+	compat_ulong_t msg_ctime_high;
+	compat_ulong_t msg_cbytes;
+	compat_ulong_t msg_qnum;
+	compat_ulong_t msg_qbytes;
+	compat_pid_t msg_lspid;
+	compat_pid_t msg_lrpid;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct msg_queue {
+	struct kern_ipc_perm q_perm;
+	time64_t q_stime;
+	time64_t q_rtime;
+	time64_t q_ctime;
+	long unsigned int q_cbytes;
+	long unsigned int q_qnum;
+	long unsigned int q_qbytes;
+	struct pid *q_lspid;
+	struct pid *q_lrpid;
+	struct list_head q_messages;
+	struct list_head q_receivers;
+	struct list_head q_senders;
+	long: 64;
+	long: 64;
+};
+
+struct msg_receiver {
+	struct list_head r_list;
+	struct task_struct *r_tsk;
+	int r_mode;
+	long int r_msgtype;
+	long int r_maxsize;
+	struct msg_msg *r_msg;
+};
+
+struct msg_sender {
+	struct list_head list;
+	struct task_struct *tsk;
+	size_t msgsz;
+};
+
+struct compat_msqid_ds {
+	struct compat_ipc_perm msg_perm;
+	compat_uptr_t msg_first;
+	compat_uptr_t msg_last;
+	old_time32_t msg_stime;
+	old_time32_t msg_rtime;
+	old_time32_t msg_ctime;
+	compat_ulong_t msg_lcbytes;
+	compat_ulong_t msg_lqbytes;
+	short unsigned int msg_cbytes;
+	short unsigned int msg_qnum;
+	short unsigned int msg_qbytes;
+	compat_ipc_pid_t msg_lspid;
+	compat_ipc_pid_t msg_lrpid;
+};
+
+struct compat_msgbuf {
+	compat_long_t mtype;
+	char mtext[1];
+};
+
+struct sem;
+
+struct sem_queue;
+
+struct sem_undo;
+
+struct semid_ds {
+	struct ipc_perm sem_perm;
+	__kernel_old_time_t sem_otime;
+	__kernel_old_time_t sem_ctime;
+	struct sem *sem_base;
+	struct sem_queue *sem_pending;
+	struct sem_queue **sem_pending_last;
+	struct sem_undo *undo;
+	short unsigned int sem_nsems;
+};
+
+struct sem {
+	int semval;
+	struct pid *sempid;
+	spinlock_t lock;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	time64_t sem_otime;
+};
+
+struct sem_queue {
+	struct list_head list;
+	struct task_struct *sleeper;
+	struct sem_undo *undo;
+	struct pid *pid;
+	int status;
+	struct sembuf *sops;
+	struct sembuf *blocking;
+	int nsops;
+	bool alter;
+	bool dupsop;
+};
+
+struct sem_undo {
+	struct list_head list_proc;
+	struct callback_head rcu;
+	struct sem_undo_list *ulp;
+	struct list_head list_id;
+	int semid;
+	short int *semadj;
+};
+
+struct semid64_ds {
+	struct ipc64_perm sem_perm;
+	long int sem_otime;
+	long int sem_ctime;
+	long unsigned int sem_nsems;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct seminfo {
+	int semmap;
+	int semmni;
+	int semmns;
+	int semmnu;
+	int semmsl;
+	int semopm;
+	int semume;
+	int semusz;
+	int semvmx;
+	int semaem;
+};
+
+struct sem_undo_list {
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct list_head list_proc;
+};
+
+struct compat_semid64_ds {
+	struct compat_ipc64_perm sem_perm;
+	compat_ulong_t sem_otime;
+	compat_ulong_t sem_otime_high;
+	compat_ulong_t sem_ctime;
+	compat_ulong_t sem_ctime_high;
+	compat_ulong_t sem_nsems;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct sem_array {
+	struct kern_ipc_perm sem_perm;
+	time64_t sem_ctime;
+	struct list_head pending_alter;
+	struct list_head pending_const;
+	struct list_head list_id;
+	int sem_nsems;
+	int complex_count;
+	unsigned int use_global_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sem sems[0];
+};
+
+struct compat_semid_ds {
+	struct compat_ipc_perm sem_perm;
+	old_time32_t sem_otime;
+	old_time32_t sem_ctime;
+	compat_uptr_t sem_base;
+	compat_uptr_t sem_pending;
+	compat_uptr_t sem_pending_last;
+	compat_uptr_t undo;
+	short unsigned int sem_nsems;
+};
+
+struct shmid64_ds {
+	struct ipc64_perm shm_perm;
+	__kernel_size_t shm_segsz;
+	long int shm_atime;
+	long int shm_dtime;
+	long int shm_ctime;
+	__kernel_pid_t shm_cpid;
+	__kernel_pid_t shm_lpid;
+	long unsigned int shm_nattch;
+	long unsigned int __unused4;
+	long unsigned int __unused5;
+};
+
+struct shminfo64 {
+	long unsigned int shmmax;
+	long unsigned int shmmin;
+	long unsigned int shmmni;
+	long unsigned int shmseg;
+	long unsigned int shmall;
+	long unsigned int __unused1;
+	long unsigned int __unused2;
+	long unsigned int __unused3;
+	long unsigned int __unused4;
+};
+
+struct shminfo {
+	int shmmax;
+	int shmmin;
+	int shmmni;
+	int shmseg;
+	int shmall;
+};
+
+struct shm_info {
+	int used_ids;
+	__kernel_ulong_t shm_tot;
+	__kernel_ulong_t shm_rss;
+	__kernel_ulong_t shm_swp;
+	__kernel_ulong_t swap_attempts;
+	__kernel_ulong_t swap_successes;
+};
+
+struct compat_shmid64_ds {
+	struct compat_ipc64_perm shm_perm;
+	compat_size_t shm_segsz;
+	compat_ulong_t shm_atime;
+	compat_ulong_t shm_atime_high;
+	compat_ulong_t shm_dtime;
+	compat_ulong_t shm_dtime_high;
+	compat_ulong_t shm_ctime;
+	compat_ulong_t shm_ctime_high;
+	compat_pid_t shm_cpid;
+	compat_pid_t shm_lpid;
+	compat_ulong_t shm_nattch;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct shmid_kernel {
+	struct kern_ipc_perm shm_perm;
+	struct file *shm_file;
+	long unsigned int shm_nattch;
+	long unsigned int shm_segsz;
+	time64_t shm_atim;
+	time64_t shm_dtim;
+	time64_t shm_ctim;
+	struct pid *shm_cprid;
+	struct pid *shm_lprid;
+	struct ucounts *mlock_ucounts;
+	struct task_struct *shm_creator;
+	struct list_head shm_clist;
+	struct ipc_namespace *ns;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct shm_file_data {
+	int id;
+	struct ipc_namespace *ns;
+	struct file *file;
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct compat_shmid_ds {
+	struct compat_ipc_perm shm_perm;
+	int shm_segsz;
+	old_time32_t shm_atime;
+	old_time32_t shm_dtime;
+	old_time32_t shm_ctime;
+	compat_ipc_pid_t shm_cpid;
+	compat_ipc_pid_t shm_lpid;
+	short unsigned int shm_nattch;
+	short unsigned int shm_unused;
+	compat_uptr_t shm_unused2;
+	compat_uptr_t shm_unused3;
+};
+
+struct compat_shminfo64 {
+	compat_ulong_t shmmax;
+	compat_ulong_t shmmin;
+	compat_ulong_t shmmni;
+	compat_ulong_t shmseg;
+	compat_ulong_t shmall;
+	compat_ulong_t __unused1;
+	compat_ulong_t __unused2;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct compat_shm_info {
+	compat_int_t used_ids;
+	compat_ulong_t shm_tot;
+	compat_ulong_t shm_rss;
+	compat_ulong_t shm_swp;
+	compat_ulong_t swap_attempts;
+	compat_ulong_t swap_successes;
+};
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct assoc_array_edit;
+
+struct assoc_array_ops {
+	long unsigned int (*get_key_chunk)(const void *, int);
+	long unsigned int (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	long unsigned int nr_leaves_on_branch;
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	long unsigned int index_key[0];
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long int adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+struct keyctl_dh_params {
+	union {
+		__s32 private;
+		__s32 priv;
+	};
+	__s32 prime;
+	__s32 base;
+};
+
+struct keyctl_kdf_params {
+	char *hashname;
+	char *otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
+};
+
+struct keyctl_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+	__u32 __spare[10];
+};
+
+struct keyctl_pkey_params {
+	__s32 key_id;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	__u32 __spare[7];
+};
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct mqueue_fs_context {
+	struct ipc_namespace *ipc_ns;
+	bool newns;
+};
+
+struct posix_msg_tree_node {
+	struct rb_node rb_node;
+	struct list_head msg_list;
+	int priority;
+};
+
+struct ext_wait_queue {
+	struct task_struct *task;
+	struct list_head list;
+	struct msg_msg *msg;
+	int state;
+};
+
+struct mqueue_inode_info {
+	spinlock_t lock;
+	struct inode vfs_inode;
+	wait_queue_head_t wait_q;
+	struct rb_root msg_tree;
+	struct rb_node *msg_tree_rightmost;
+	struct posix_msg_tree_node *node_cache;
+	struct mq_attr attr;
+	struct sigevent notify;
+	struct pid *notify_owner;
+	u32 notify_self_exec_id;
+	struct user_namespace *notify_user_ns;
+	struct ucounts *ucounts;
+	struct sock *notify_sock;
+	struct sk_buff *notify_cookie;
+	struct ext_wait_queue e_wait_q[2];
+	long unsigned int qsize;
+};
+
+struct compat_mq_attr {
+	compat_long_t mq_flags;
+	compat_long_t mq_maxmsg;
+	compat_long_t mq_msgsize;
+	compat_long_t mq_curmsgs;
+	compat_long_t __reserved[4];
+};
+
+struct compat_keyctl_kdf_params {
+	compat_uptr_t hashname;
+	compat_uptr_t otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
+};
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_kpp {
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct dh {
+	const void *key;
+	const void *p;
+	const void *g;
+	unsigned int key_size;
+	unsigned int p_size;
+	unsigned int g_size;
+};
+
+struct dh_completion {
+	struct completion completion;
+	int err;
+};
+
+enum {
+	Opt_err___10 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
+};
+
+struct ecryptfs_session_key {
+	u32 flags;
+	u32 encrypted_key_size;
+	u32 decrypted_key_size;
+	u8 encrypted_key[512];
+	u8 decrypted_key[64];
+};
+
+struct ecryptfs_password {
+	u32 password_bytes;
+	s32 hash_algo;
+	u32 hash_iterations;
+	u32 session_key_encryption_key_bytes;
+	u32 flags;
+	u8 session_key_encryption_key[64];
+	u8 signature[17];
+	u8 salt[8];
+};
+
+enum ecryptfs_token_types {
+	ECRYPTFS_PASSWORD = 0,
+	ECRYPTFS_PRIVATE_KEY = 1,
+};
+
+struct ecryptfs_private_key {
+	u32 key_size;
+	u32 data_len;
+	u8 signature[17];
+	char pki_type[17];
+	u8 data[0];
+};
+
+struct ecryptfs_auth_tok {
+	u16 version;
+	u16 token_type;
+	u32 flags;
+	struct ecryptfs_session_key session_key;
+	u8 reserved[32];
+	union {
+		struct ecryptfs_password password;
+		struct ecryptfs_private_key private_key;
+	} token;
+};
+
+enum tpm_duration {
+	TPM_SHORT = 0,
+	TPM_MEDIUM = 1,
+	TPM_LONG = 2,
+	TPM_LONG_LONG = 3,
+	TPM_UNDEFINED = 4,
+	TPM_NUM_DURATIONS = 4,
+};
+
+struct encrypted_key_payload {
+	struct callback_head rcu;
+	char *format;
+	char *master_desc;
+	char *datalen;
+	u8 *iv;
+	u8 *encrypted_data;
+	short unsigned int datablob_len;
+	short unsigned int decrypted_datalen;
+	short unsigned int payload_datalen;
+	short unsigned int encrypted_key_format;
+	u8 *decrypted_data;
+	u8 payload_data[0];
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
+};
+
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	struct crypto_alg base;
+};
+
+enum {
+	Opt_new = 0,
+	Opt_load = 1,
+	Opt_update = 2,
+	Opt_err___11 = 3,
+};
+
+enum {
+	Opt_default = 0,
+	Opt_ecryptfs = 1,
+	Opt_enc32 = 2,
+	Opt_error = 3,
+};
+
+enum derived_key_type {
+	ENC_KEY = 0,
+	AUTH_KEY = 1,
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	kuid_t rootid;
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+	long: 24;
+	long: 64;
+	long: 64;
+};
+
+struct crypto_cipher {
+	struct crypto_tfm base;
+};
+
+enum devcg_behavior {
+	DEVCG_DEFAULT_NONE = 0,
+	DEVCG_DEFAULT_ALLOW = 1,
+	DEVCG_DEFAULT_DENY = 2,
+};
+
+struct dev_exception_item {
+	u32 major;
+	u32 minor;
+	short int type;
+	short int access;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head exceptions;
+	enum devcg_behavior behavior;
+};
+
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
+};
+
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_aead;
+
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	struct crypto_alg base;
+};
+
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct aead_instance {
+	void (*free)(struct aead_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
+};
+
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
+};
+
+enum crypto_attr_type_t {
+	CRYPTOCFGA_UNSPEC = 0,
+	CRYPTOCFGA_PRIORITY_VAL = 1,
+	CRYPTOCFGA_REPORT_LARVAL = 2,
+	CRYPTOCFGA_REPORT_HASH = 3,
+	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
+	CRYPTOCFGA_REPORT_AEAD = 5,
+	CRYPTOCFGA_REPORT_COMPRESS = 6,
+	CRYPTOCFGA_REPORT_RNG = 7,
+	CRYPTOCFGA_REPORT_CIPHER = 8,
+	CRYPTOCFGA_REPORT_AKCIPHER = 9,
+	CRYPTOCFGA_REPORT_KPP = 10,
+	CRYPTOCFGA_REPORT_ACOMP = 11,
+	CRYPTOCFGA_STAT_LARVAL = 12,
+	CRYPTOCFGA_STAT_HASH = 13,
+	CRYPTOCFGA_STAT_BLKCIPHER = 14,
+	CRYPTOCFGA_STAT_AEAD = 15,
+	CRYPTOCFGA_STAT_COMPRESS = 16,
+	CRYPTOCFGA_STAT_RNG = 17,
+	CRYPTOCFGA_STAT_CIPHER = 18,
+	CRYPTOCFGA_STAT_AKCIPHER = 19,
+	CRYPTOCFGA_STAT_KPP = 20,
+	CRYPTOCFGA_STAT_ACOMP = 21,
+	__CRYPTOCFGA_MAX = 22,
+};
+
+struct crypto_report_aead {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int maxauthsize;
+	unsigned int ivsize;
+};
+
+struct rtattr {
+	short unsigned int rta_len;
+	short unsigned int rta_type;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
+	};
+};
+
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			long unsigned int offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
+};
+
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
+};
+
+struct crypto_report_blkcipher {
+	char type[64];
+	char geniv[64];
+	unsigned int blocksize;
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+};
+
+enum {
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
+};
+
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
+};
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_ahash;
+
+struct ahash_alg {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_ahash *);
+	void (*exit_tfm)(struct crypto_ahash *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct hash_alg_common halg;
+};
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct crypto_hash_walk {
+	char *data;
+	unsigned int offset;
+	unsigned int alignmask;
+	struct page *pg;
+	unsigned int entrylen;
+	unsigned int total;
+	struct scatterlist *sg;
+	unsigned int flags;
+};
+
+struct ahash_instance {
+	void (*free)(struct ahash_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[192];
+			struct crypto_instance base;
+		} s;
+		struct ahash_alg alg;
+	};
+};
+
+struct crypto_ahash_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_report_hash {
+	char type[64];
+	unsigned int blocksize;
+	unsigned int digestsize;
+};
+
+struct ahash_request_priv {
+	crypto_completion_t complete;
+	void *data;
+	u8 *result;
+	u32 flags;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *ubuf[0];
+};
+
+struct shash_instance {
+	void (*free)(struct shash_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[192];
+			struct crypto_instance base;
+		} s;
+		struct shash_alg alg;
+	};
+};
+
+struct crypto_shash_spawn {
+	struct crypto_spawn base;
+};
+
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
+};
+
+struct kpp_secret {
+	short unsigned int type;
+	short unsigned int len;
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum rsapubkey_actions {
+	ACT_rsa_get_e = 0,
+	ACT_rsa_get_n = 1,
+	NR__rsapubkey_actions = 2,
+};
+
+enum rsaprivkey_actions {
+	ACT_rsa_get_d = 0,
+	ACT_rsa_get_dp = 1,
+	ACT_rsa_get_dq = 2,
+	ACT_rsa_get_e___2 = 3,
+	ACT_rsa_get_n___2 = 4,
+	ACT_rsa_get_p = 5,
+	ACT_rsa_get_q = 6,
+	ACT_rsa_get_qinv = 7,
+	NR__rsaprivkey_actions = 8,
+};
+
+struct crypto_report_akcipher {
+	char type[64];
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_tfm base;
+};
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[128];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct rsa_key {
+	const u8 *n;
+	const u8 *e;
+	const u8 *d;
+	const u8 *p;
+	const u8 *q;
+	const u8 *dp;
+	const u8 *dq;
+	const u8 *qinv;
+	size_t n_sz;
+	size_t e_sz;
+	size_t d_sz;
+	size_t p_sz;
+	size_t q_sz;
+	size_t dp_sz;
+	size_t dq_sz;
+	size_t qinv_sz;
+};
+
+struct asn1_decoder;
+
+typedef long unsigned int mpi_limb_t;
+
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
+};
+
+typedef struct gcry_mpi *MPI;
+
+struct dh_ctx {
+	MPI p;
+	MPI g;
+	MPI xa;
+};
+
+struct crypto_report_kpp {
+	char type[64];
+};
+
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
+};
+
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
+};
+
+struct rsa_mpi_key {
+	MPI n;
+	MPI e;
+	MPI d;
+	MPI p;
+	MPI q;
+	MPI dp;
+	MPI dq;
+	MPI qinv;
+};
+
+struct rsa_asn1_template {
+	const char *name;
+	const u8 *data;
+	size_t size;
+};
+
+struct pkcs1pad_ctx {
+	struct crypto_akcipher *child;
+	unsigned int key_size;
+};
+
+struct pkcs1pad_inst_ctx {
+	struct crypto_akcipher_spawn spawn;
+	const struct rsa_asn1_template *digest_info;
+};
+
+struct pkcs1pad_request {
+	struct scatterlist in_sg[2];
+	struct scatterlist out_sg[1];
+	uint8_t *in_buf;
+	uint8_t *out_buf;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct akcipher_request child_req;
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct crypto_test_param {
+	char driver[128];
+	char alg[128];
+	u32 type;
+};
+
+struct crypto_report_acomp {
+	char type[64];
+};
+
+struct acomp_alg {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	int (*init)(struct crypto_acomp *);
+	void (*exit)(struct crypto_acomp *);
+	unsigned int reqsize;
+	long: 32;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct crypto_report_comp {
+	char type[64];
+};
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypto_alg base;
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+enum {
+	CRYPTO_MSG_BASE = 16,
+	CRYPTO_MSG_NEWALG = 16,
+	CRYPTO_MSG_DELALG = 17,
+	CRYPTO_MSG_UPDATEALG = 18,
+	CRYPTO_MSG_GETALG = 19,
+	CRYPTO_MSG_DELRNG = 20,
+	CRYPTO_MSG_GETSTAT = 21,
+	__CRYPTO_MSG_MAX = 22,
+};
+
+struct crypto_user_alg {
+	char cru_name[64];
+	char cru_driver_name[64];
+	char cru_module_name[64];
+	__u32 cru_type;
+	__u32 cru_mask;
+	__u32 cru_refcnt;
+	__u32 cru_flags;
+};
+
+struct crypto_report_larval {
+	char type[64];
+};
+
+struct crypto_report_cipher {
+	char type[64];
+	unsigned int blocksize;
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	NLA_BE16 = 18,
+	NLA_BE32 = 19,
+	__NLA_TYPE_MAX = 20,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+struct crypto_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct crypto_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+};
+
+struct hmac_ctx {
+	struct crypto_shash *hash;
+};
+
+struct crypto_stat_aead {
+	char type[64];
+	__u64 stat_encrypt_cnt;
+	__u64 stat_encrypt_tlen;
+	__u64 stat_decrypt_cnt;
+	__u64 stat_decrypt_tlen;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_akcipher {
+	char type[64];
+	__u64 stat_encrypt_cnt;
+	__u64 stat_encrypt_tlen;
+	__u64 stat_decrypt_cnt;
+	__u64 stat_decrypt_tlen;
+	__u64 stat_verify_cnt;
+	__u64 stat_sign_cnt;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_cipher {
+	char type[64];
+	__u64 stat_encrypt_cnt;
+	__u64 stat_encrypt_tlen;
+	__u64 stat_decrypt_cnt;
+	__u64 stat_decrypt_tlen;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_compress {
+	char type[64];
+	__u64 stat_compress_cnt;
+	__u64 stat_compress_tlen;
+	__u64 stat_decompress_cnt;
+	__u64 stat_decompress_tlen;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_hash {
+	char type[64];
+	__u64 stat_hash_cnt;
+	__u64 stat_hash_tlen;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_kpp {
+	char type[64];
+	__u64 stat_setsecret_cnt;
+	__u64 stat_generate_public_key_cnt;
+	__u64 stat_compute_shared_secret_cnt;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_rng {
+	char type[64];
+	__u64 stat_generate_cnt;
+	__u64 stat_generate_tlen;
+	__u64 stat_seed_cnt;
+	__u64 stat_err_cnt;
+};
+
+struct crypto_stat_larval {
+	char type[64];
+};
+
+struct md5_state {
+	u32 hash[4];
+	u32 block[16];
+	u64 byte_count;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+struct sha1_state {
+	u32 state[5];
+	u64 count;
+	u8 buffer[64];
+};
+
+typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+struct blake2b_state {
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[128];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 4089235720,
+	BLAKE2B_IV1 = 2227873595,
+	BLAKE2B_IV2 = 4271175723,
+	BLAKE2B_IV3 = 1595750129,
+	BLAKE2B_IV4 = 2917565137,
+	BLAKE2B_IV5 = 725511199,
+	BLAKE2B_IV6 = 4215389547,
+	BLAKE2B_IV7 = 327033209,
+};
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *, const u8 *, size_t, u32);
+
+struct blake2b_tfm_ctx {
+	u8 key[64];
+	unsigned int keylen;
+};
+
+struct sha512_state {
+	u64 state[8];
+	u64 count[2];
+	u8 buf[128];
+};
+
+typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
+
+struct crypto_cts_ctx {
+	struct crypto_skcipher *child;
+};
+
+struct crypto_cts_reqctx {
+	struct scatterlist sg[2];
+	unsigned int offset;
+	long: 32;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+struct des_ctx {
+	u32 expkey[32];
+};
+
+struct des3_ede_ctx {
+	u32 expkey[96];
+};
+
+typedef struct {
+	__be64 a;
+	__be64 b;
+} be128;
+
+struct gcm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn ghash;
+};
+
+struct crypto_gcm_ctx {
+	struct crypto_skcipher *ctr;
+	struct crypto_ahash *ghash;
+};
+
+struct crypto_rfc4106_ctx {
+	struct crypto_aead *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct aead_request subreq;
+};
+
+struct crypto_rfc4543_instance_ctx {
+	struct crypto_aead_spawn aead;
+};
+
+struct crypto_rfc4543_ctx {
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *null;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4543_req_ctx {
+	struct aead_request subreq;
+};
+
+struct crypto_gcm_ghash_ctx {
+	unsigned int cryptlen;
+	struct scatterlist *src;
+	int (*complete)(struct aead_request *, u32);
+};
+
+struct crypto_gcm_req_priv_ctx {
+	u8 iv[16];
+	u8 auth_tag[16];
+	u8 iauth_tag[16];
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct scatterlist sg;
+	struct crypto_gcm_ghash_ctx ghash_ctx;
+	long: 64;
+	long: 64;
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	} u;
+};
+
+struct crypto_rfc3686_ctx {
+	struct crypto_skcipher *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc3686_req_ctx {
+	u8 iv[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+typedef struct {
+	u64 a;
+	u64 b;
+} u128;
+
+typedef struct {
+	__le64 b;
+	__le64 a;
+} le128;
+
+struct xts_tfm_ctx {
+	struct crypto_skcipher *child;
+	struct crypto_cipher *tweak;
+};
+
+struct xts_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	char name[128];
+};
+
+struct xts_request_ctx {
+	le128 t;
+	struct scatterlist *tail;
+	struct scatterlist sg[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct skcipher_request subreq;
+};
+
+struct crypto_aes_ctx {
+	u32 key_enc[60];
+	u32 key_dec[60];
+	u32 key_length;
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+struct chksum_ctx {
+	u32 key;
+};
+
+struct chksum_desc_ctx {
+	u32 crc;
+};
+
+struct chksum_desc_ctx___2 {
+	__u16 crc;
+};
+
+struct lzo_ctx {
+	void *lzo_comp_mem;
+};
+
+enum {
+	CRYPTO_AUTHENC_KEYA_UNSPEC = 0,
+	CRYPTO_AUTHENC_KEYA_PARAM = 1,
+};
+
+struct crypto_authenc_key_param {
+	__be32 enckeylen;
+};
+
+struct crypto_authenc_keys {
+	const u8 *authkey;
+	const u8 *enckey;
+	unsigned int authkeylen;
+	unsigned int enckeylen;
+};
+
+struct authenc_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+	unsigned int reqoff;
+};
+
+struct crypto_authenc_ctx {
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct authenc_esn_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+};
+
+struct crypto_authenc_esn_ctx {
+	unsigned int reqoff;
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_esn_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct lz4_ctx {
+	void *lz4_comp_mem;
+};
+
+struct lzorle_ctx {
+	void *lzorle_comp_mem;
+};
+
+struct lz4hc_ctx {
+	void *lz4hc_comp_mem;
+};
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+struct xxhash64_tfm_ctx {
+	u64 seed;
+};
+
+struct xxhash64_desc_ctx {
+	struct xxh64_state xxhstate;
+};
+
+struct crypto_report_rng {
+	char type[64];
+	unsigned int seedsize;
+};
+
+struct rand_data {
+	__u64 data;
+	__u64 old_data;
+	__u64 prev_time;
+	__u64 last_delta;
+	__s64 last_delta2;
+	unsigned int osr;
+	unsigned char *mem;
+	unsigned int memlocation;
+	unsigned int memblocks;
+	unsigned int memblocksize;
+	unsigned int memaccessloops;
+	int rct_count;
+	unsigned int apt_observations;
+	unsigned int apt_count;
+	unsigned int apt_base;
+	unsigned int apt_base_set: 1;
+	unsigned int health_failure: 1;
+};
+
+struct rand_data;
+
+struct jitterentropy {
+	spinlock_t jent_lock;
+	struct rand_data *entropy_collector;
+	unsigned int reset_cnt;
+};
+
+struct drbg_string {
+	const unsigned char *buf;
+	size_t len;
+	struct list_head list;
+};
+
+typedef uint32_t drbg_flag_t;
+
+struct drbg_core {
+	drbg_flag_t flags;
+	__u8 statelen;
+	__u8 blocklen_bytes;
+	char cra_name[128];
+	char backend_cra_name[128];
+};
+
+struct drbg_state;
+
+struct drbg_state_ops {
+	int (*update)(struct drbg_state *, struct list_head *, int);
+	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
+	int (*crypto_init)(struct drbg_state *);
+	int (*crypto_fini)(struct drbg_state *);
+};
+
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
+struct drbg_state {
+	struct mutex drbg_mutex;
+	unsigned char *V;
+	unsigned char *Vbuf;
+	unsigned char *C;
+	unsigned char *Cbuf;
+	size_t reseed_ctr;
+	size_t reseed_threshold;
+	unsigned char *scratchpad;
+	unsigned char *scratchpadbuf;
+	void *priv_data;
+	struct crypto_skcipher *ctr_handle;
+	struct skcipher_request *ctr_req;
+	__u8 *outscratchpadbuf;
+	__u8 *outscratchpad;
+	struct crypto_wait ctr_wait;
+	struct scatterlist sg_in;
+	struct scatterlist sg_out;
+	enum drbg_seed_state seeded;
+	long unsigned int last_seed_time;
+	bool pr;
+	bool fips_primed;
+	unsigned char *prev;
+	struct crypto_rng *jent;
+	const struct drbg_state_ops *d_ops;
+	const struct drbg_core *core;
+	struct drbg_string test_data;
+};
+
+enum drbg_prefixes {
+	DRBG_PREFIX0 = 0,
+	DRBG_PREFIX1 = 1,
+	DRBG_PREFIX2 = 2,
+	DRBG_PREFIX3 = 3,
+};
+
+struct sdesc {
+	struct shash_desc shash;
+	char ctx[0];
+};
+
+struct gf128mul_4k {
+	be128 t[256];
+};
+
+struct ghash_ctx {
+	struct gf128mul_4k *gf128;
+};
+
+struct ghash_desc_ctx {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+struct af_alg_type;
+
+struct alg_sock {
+	struct sock sk;
+	struct sock *parent;
+	atomic_t refcnt;
+	atomic_t nokey_refcnt;
+	const struct af_alg_type *type;
+	void *private;
+};
+
+struct af_alg_type {
+	void * (*bind)(const char *, u32, u32);
+	void (*release)(void *);
+	int (*setkey)(void *, const u8 *, unsigned int);
+	int (*setentropy)(void *, sockptr_t, unsigned int);
+	int (*accept)(void *, struct sock *);
+	int (*accept_nokey)(void *, struct sock *);
+	int (*setauthsize)(void *, unsigned int);
+	struct proto_ops *ops;
+	struct proto_ops *ops_nokey;
+	struct module *owner;
+	char name[14];
+};
+
+struct af_alg_sgl {
+	struct scatterlist sg[17];
+	struct page *pages[16];
+	unsigned int npages;
+};
+
+struct hash_ctx {
+	struct af_alg_sgl sgl;
+	u8 *result;
+	struct crypto_wait wait;
+	unsigned int len;
+	bool more;
+	long: 24;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ahash_request req;
+};
+
+struct af_alg_rsgl {
+	struct af_alg_sgl sgl;
+	struct list_head list;
+	size_t sg_num_bytes;
+};
+
+struct af_alg_async_req {
+	struct kiocb *iocb;
+	struct sock *sk;
+	struct af_alg_rsgl first_rsgl;
+	struct af_alg_rsgl *last_rsgl;
+	struct list_head rsgl_list;
+	struct scatterlist *tsgl;
+	unsigned int tsgl_entries;
+	unsigned int outlen;
+	unsigned int areqlen;
+	long: 32;
+	long: 64;
+	union {
+		struct aead_request aead_req;
+		struct skcipher_request skcipher_req;
+	} cra_u;
+};
+
+struct af_alg_ctx {
+	struct list_head tsgl_list;
+	void *iv;
+	size_t aead_assoclen;
+	struct crypto_wait wait;
+	size_t used;
+	atomic_t rcvused;
+	bool more;
+	bool merge;
+	bool enc;
+	bool init;
+	unsigned int len;
+};
+
+struct rng_ctx {
+	unsigned int len;
+	struct crypto_rng *drng;
+	u8 *addtl;
+	size_t addtl_len;
+};
+
+struct rng_parent_ctx {
+	struct crypto_rng *drng;
+	u8 *entropy;
+};
+
+struct sockaddr_alg_new {
+	__u16 salg_family;
+	__u8 salg_type[14];
+	__u32 salg_feat;
+	__u32 salg_mask;
+	__u8 salg_name[0];
+};
+
+struct af_alg_iv {
+	__u32 ivlen;
+	__u8 iv[0];
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+struct af_alg_control {
+	struct af_alg_iv *iv;
+	int op;
+	unsigned int aead_assoclen;
+};
+
+struct af_alg_tsgl {
+	struct list_head list;
+	unsigned int cur;
+	struct scatterlist sg[0];
+};
+
+struct alg_type_list {
+	const struct af_alg_type *type;
+	struct list_head list;
+};
+
+typedef ZSTD_CCtx zstd_cctx;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+struct zstd_ctx {
+	zstd_cctx *cctx;
+	zstd_dctx *dctx;
+	void *cwksp;
+	void *dwksp;
+};
+
+struct aead_tfm {
+	struct crypto_aead *aead;
+	struct crypto_sync_skcipher *null_tfm;
+};
+
+struct xor_block_template {
+	struct xor_block_template *next;
+	const char *name;
+	int speed;
+	void (*do_2)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_3)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_4)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+	void (*do_5)(long unsigned int, long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict, const long unsigned int * restrict);
+};
+
+struct asymmetric_key_id;
+
+struct public_key_signature {
+	struct asymmetric_key_id *auth_ids[3];
+	u8 *s;
+	u8 *digest;
+	u32 s_size;
+	u32 digest_size;
+	const char *pkey_algo;
+	const char *hash_algo;
+	const char *encoding;
+	const void *data;
+	unsigned int data_size;
+};
+
+struct asymmetric_key_id {
+	short unsigned int len;
+	unsigned char data[0];
+};
+
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
+struct asymmetric_key_ids {
+	void *id[3];
+};
+
+enum x509_actions {
+	ACT_x509_extract_key_data = 0,
+	ACT_x509_extract_name_segment = 1,
+	ACT_x509_note_OID = 2,
+	ACT_x509_note_issuer = 3,
+	ACT_x509_note_not_after = 4,
+	ACT_x509_note_not_before = 5,
+	ACT_x509_note_params = 6,
+	ACT_x509_note_serial = 7,
+	ACT_x509_note_sig_algo = 8,
+	ACT_x509_note_signature = 9,
+	ACT_x509_note_subject = 10,
+	ACT_x509_note_tbs_certificate = 11,
+	ACT_x509_process_extension = 12,
+	NR__x509_actions = 13,
+};
+
+enum x509_akid_actions {
+	ACT_x509_akid_note_kid = 0,
+	ACT_x509_akid_note_name = 1,
+	ACT_x509_akid_note_serial = 2,
+	ACT_x509_extract_name_segment___2 = 3,
+	ACT_x509_note_OID___2 = 4,
+	NR__x509_akid_actions = 5,
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_spnego = 40,
+	OID_IAKerb = 41,
+	OID_PKU2U = 42,
+	OID_Scram = 43,
+	OID_certAuthInfoAccess = 44,
+	OID_sha1 = 45,
+	OID_id_ansip384r1 = 46,
+	OID_sha256 = 47,
+	OID_sha384 = 48,
+	OID_sha512 = 49,
+	OID_sha224 = 50,
+	OID_commonName = 51,
+	OID_surname = 52,
+	OID_countryName = 53,
+	OID_locality = 54,
+	OID_stateOrProvinceName = 55,
+	OID_organizationName = 56,
+	OID_organizationUnitName = 57,
+	OID_title = 58,
+	OID_description = 59,
+	OID_name = 60,
+	OID_givenName = 61,
+	OID_initials = 62,
+	OID_generationalQualifier = 63,
+	OID_subjectKeyIdentifier = 64,
+	OID_keyUsage = 65,
+	OID_subjectAltName = 66,
+	OID_issuerAltName = 67,
+	OID_basicConstraints = 68,
+	OID_crlDistributionPoints = 69,
+	OID_certPolicies = 70,
+	OID_authorityKeyIdentifier = 71,
+	OID_extKeyUsage = 72,
+	OID_NetlogonMechanism = 73,
+	OID_appleLocalKdcSupported = 74,
+	OID_gostCPSignA = 75,
+	OID_gostCPSignB = 76,
+	OID_gostCPSignC = 77,
+	OID_gost2012PKey256 = 78,
+	OID_gost2012PKey512 = 79,
+	OID_gost2012Digest256 = 80,
+	OID_gost2012Digest512 = 81,
+	OID_gost2012Signature256 = 82,
+	OID_gost2012Signature512 = 83,
+	OID_gostTC26Sign256A = 84,
+	OID_gostTC26Sign256B = 85,
+	OID_gostTC26Sign256C = 86,
+	OID_gostTC26Sign256D = 87,
+	OID_gostTC26Sign512A = 88,
+	OID_gostTC26Sign512B = 89,
+	OID_gostTC26Sign512C = 90,
+	OID_sm2 = 91,
+	OID_sm3 = 92,
+	OID_SM2_with_SM3 = 93,
+	OID_sm3WithRSAEncryption = 94,
+	OID_TPMLoadableKey = 95,
+	OID_TPMImportableKey = 96,
+	OID_TPMSealedData = 97,
+	OID__NR = 98,
+};
+
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+};
+
+struct x509_certificate {
+	struct x509_certificate *next;
+	struct x509_certificate *signer;
+	struct public_key *pub;
+	struct public_key_signature *sig;
+	char *issuer;
+	char *subject;
+	struct asymmetric_key_id *id;
+	struct asymmetric_key_id *skid;
+	time64_t valid_from;
+	time64_t valid_to;
+	const void *tbs;
+	unsigned int tbs_size;
+	unsigned int raw_sig_size;
+	const void *raw_sig;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_subject;
+	unsigned int raw_subject_size;
+	unsigned int raw_skid_size;
+	const void *raw_skid;
+	unsigned int index;
+	bool seen;
+	bool verified;
+	bool self_signed;
+	bool unsupported_sig;
+	bool blacklisted;
+};
+
+struct x509_parse_context {
+	struct x509_certificate *cert;
+	long unsigned int data;
+	const void *key;
+	size_t key_size;
+	const void *params;
+	size_t params_size;
+	enum OID key_algo;
+	enum OID last_oid;
+	enum OID sig_algo;
+	u8 o_size;
+	u8 cn_size;
+	u8 email_size;
+	u16 o_offset;
+	u16 cn_offset;
+	u16 email_offset;
+	unsigned int raw_akid_size;
+	const void *raw_akid;
+	const void *akid_raw_issuer;
+	unsigned int akid_raw_issuer_size;
+};
+
+struct asymmetric_key_subtype {
+	struct module *owner;
+	const char *name;
+	short unsigned int name_len;
+	void (*describe)(const struct key *, struct seq_file *);
+	void (*destroy)(void *, void *);
+	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+};
+
+struct asymmetric_key_parser {
+	struct list_head link;
+	struct module *owner;
+	const char *name;
+	int (*parse)(struct key_preparsed_payload *);
+};
+
+enum pkcs7_actions {
+	ACT_pkcs7_check_content_type = 0,
+	ACT_pkcs7_extract_cert = 1,
+	ACT_pkcs7_note_OID = 2,
+	ACT_pkcs7_note_certificate_list = 3,
+	ACT_pkcs7_note_content = 4,
+	ACT_pkcs7_note_data = 5,
+	ACT_pkcs7_note_signed_info = 6,
+	ACT_pkcs7_note_signeddata_version = 7,
+	ACT_pkcs7_note_signerinfo_version = 8,
+	ACT_pkcs7_sig_note_authenticated_attr = 9,
+	ACT_pkcs7_sig_note_digest_algo = 10,
+	ACT_pkcs7_sig_note_issuer = 11,
+	ACT_pkcs7_sig_note_pkey_algo = 12,
+	ACT_pkcs7_sig_note_serial = 13,
+	ACT_pkcs7_sig_note_set_of_authattrs = 14,
+	ACT_pkcs7_sig_note_signature = 15,
+	ACT_pkcs7_sig_note_skid = 16,
+	NR__pkcs7_actions = 17,
+};
+
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
+};
+
+struct pkcs7_signed_info {
+	struct pkcs7_signed_info *next;
+	struct x509_certificate *signer;
+	unsigned int index;
+	bool unsupported_crypto;
+	bool blacklisted;
+	const void *msgdigest;
+	unsigned int msgdigest_len;
+	unsigned int authattrs_len;
+	const void *authattrs;
+	long unsigned int aa_set;
+	time64_t signing_time;
+	struct public_key_signature *sig;
+};
+
+struct pkcs7_message {
+	struct x509_certificate *certs;
+	struct x509_certificate *crl;
+	struct pkcs7_signed_info *signed_infos;
+	u8 version;
+	bool have_authattrs;
+	enum OID data_type;
+	size_t data_len;
+	size_t data_hdrlen;
+	const void *data;
+};
+
+struct section_header;
+
+struct pefile_context {
+	unsigned int header_size;
+	unsigned int image_checksum_offset;
+	unsigned int cert_dirent_offset;
+	unsigned int n_data_dirents;
+	unsigned int n_sections;
+	unsigned int certs_size;
+	unsigned int sig_offset;
+	unsigned int sig_len;
+	const struct section_header *secs;
+	const void *digest;
+	unsigned int digest_len;
+	const char *digest_algo;
+};
+
+struct section_header {
+	char name[8];
+	uint32_t virtual_size;
+	uint32_t virtual_address;
+	uint32_t raw_data_size;
+	uint32_t data_addr;
+	uint32_t relocs;
+	uint32_t line_numbers;
+	uint16_t num_relocs;
+	uint16_t num_lin_numbers;
+	uint32_t flags;
+};
+
+enum mscode_actions {
+	ACT_mscode_note_content_type = 0,
+	ACT_mscode_note_digest = 1,
+	ACT_mscode_note_digest_algo = 2,
+	NR__mscode_actions = 3,
+};
+
+struct pkcs7_parse_context {
+	struct pkcs7_message *msg;
+	struct pkcs7_signed_info *sinfo;
+	struct pkcs7_signed_info **ppsinfo;
+	struct x509_certificate *certs;
+	struct x509_certificate **ppcerts;
+	long unsigned int data;
+	enum OID last_oid;
+	unsigned int x509_index;
+	unsigned int sinfo_index;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_skid;
+	unsigned int raw_skid_size;
+	bool expect_skid;
+};
+
+struct mz_hdr {
+	uint16_t magic;
+	uint16_t lbsize;
+	uint16_t blocks;
+	uint16_t relocs;
+	uint16_t hdrsize;
+	uint16_t min_extra_pps;
+	uint16_t max_extra_pps;
+	uint16_t ss;
+	uint16_t sp;
+	uint16_t checksum;
+	uint16_t ip;
+	uint16_t cs;
+	uint16_t reloc_table_offset;
+	uint16_t overlay_num;
+	uint16_t reserved0[4];
+	uint16_t oem_id;
+	uint16_t oem_info;
+	uint16_t reserved1[10];
+	uint32_t peaddr;
+	char message[0];
+};
+
+struct pe_hdr {
+	uint32_t magic;
+	uint16_t machine;
+	uint16_t sections;
+	uint32_t timestamp;
+	uint32_t symbol_table;
+	uint32_t symbols;
+	uint16_t opt_hdr_size;
+	uint16_t flags;
+};
+
+struct pe32_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint32_t data_base;
+	uint32_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint32_t stack_size_req;
+	uint32_t stack_size;
+	uint32_t heap_size_req;
+	uint32_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct pe32plus_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint64_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint64_t stack_size_req;
+	uint64_t stack_size;
+	uint64_t heap_size_req;
+	uint64_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct data_dirent {
+	uint32_t virtual_address;
+	uint32_t size;
+};
+
+struct data_directory {
+	struct data_dirent exports;
+	struct data_dirent imports;
+	struct data_dirent resources;
+	struct data_dirent exceptions;
+	struct data_dirent certs;
+	struct data_dirent base_relocations;
+	struct data_dirent debug;
+	struct data_dirent arch;
+	struct data_dirent global_ptr;
+	struct data_dirent tls;
+	struct data_dirent load_config;
+	struct data_dirent bound_imports;
+	struct data_dirent import_addrs;
+	struct data_dirent delay_imports;
+	struct data_dirent clr_runtime_hdr;
+	struct data_dirent reserved;
+};
+
+struct win_certificate {
+	uint32_t length;
+	uint16_t revision;
+	uint16_t cert_type;
+};
+
+struct kdf_testvec {
+	unsigned char *key;
+	size_t keylen;
+	unsigned char *ikm;
+	size_t ikmlen;
+	struct kvec info;
+	unsigned char *expected;
+	size_t expectedlen;
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+struct blk_integrity_iter {
+	void *prot_buf;
+	void *data_buf;
+	sector_t seed;
+	unsigned int data_size;
+	short unsigned int interval;
+	unsigned char tuple_size;
+	const char *disk_name;
+};
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkcg_gq *blkg;
+	struct llist_node lnode;
+	int lqueued;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	spinlock_t async_bio_lock;
+	struct bio_list async_bios;
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	struct bio *free_list_irq;
+	unsigned int nr;
+	unsigned int nr_irq;
+};
+
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+};
+
+struct rq_qos_ops;
+
+struct rq_qos {
+	struct rq_qos_ops *ops;
+	struct request_queue *q;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+enum {
+	sysctl_hung_task_timeout_secs = 0,
+};
+
+enum xen_domain_type {
+	XEN_NATIVE = 0,
+	XEN_PV_DOMAIN = 1,
+	XEN_HVM_DOMAIN = 2,
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	struct llist_head *lhead;
+	struct list_head cgwb_list;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
+};
+
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	long unsigned int flags;
+	struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	short unsigned int index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+};
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx *queue_ctx;
+};
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+};
+
+struct elv_fs_entry;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+enum {
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
+};
+
+struct queue_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct request_queue *, char *);
+	ssize_t (*store)(struct request_queue *, const char *, size_t);
+};
+
+enum {
+	BLK_MQ_F_SHOULD_MERGE = 1,
+	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
+	BLK_MQ_F_STACKING = 4,
+	BLK_MQ_F_TAG_HCTX_SHARED = 8,
+	BLK_MQ_F_BLOCKING = 32,
+	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
+	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
+	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+	BLK_MQ_S_STOPPED = 0,
+	BLK_MQ_S_TAG_ACTIVE = 1,
+	BLK_MQ_S_SCHED_RESTART = 2,
+	BLK_MQ_S_INACTIVE = 3,
+	BLK_MQ_MAX_DEPTH = 10240,
+	BLK_MQ_CPU_WORK_BATCH = 8,
+};
+
+enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 1250,
+};
+
+enum rpm_status {
+	RPM_INVALID = 4294967295,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
+enum {
+	BLK_MQ_REQ_NOWAIT = 1,
+	BLK_MQ_REQ_RESERVED = 2,
+	BLK_MQ_REQ_PM = 4,
+};
+
+struct trace_event_raw_block_buffer {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	char rwbs[8];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[8];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[8];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_init_cpd_fn *cpd_init_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	long unsigned int first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	long unsigned int disptime;
+	unsigned int flags;
+	bool has_rules_bps[2];
+	bool has_rules_iops[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	long unsigned int last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	uint64_t carryover_bytes[2];
+	unsigned int carryover_ios[2];
+	long unsigned int last_check_time;
+	long unsigned int latency_target;
+	long unsigned int latency_target_conf;
+	long unsigned int slice_start[2];
+	long unsigned int slice_end[2];
+	long unsigned int last_finish_time;
+	long unsigned int checked_last_finish_time;
+	long unsigned int avg_idletime;
+	long unsigned int idletime_threshold;
+	long unsigned int idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	long unsigned int bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+struct rq_map_data {
+	struct page **pages;
+	long unsigned int offset;
+	short unsigned int page_order;
+	short unsigned int nr_entries;
+	bool null_mapped;
+	bool from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
+};
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
+	unsigned int flags;
+};
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
+};
+
+typedef u32 compat_caddr_t;
+
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
+	long unsigned int start;
+};
+
+struct blkpg_ioctl_arg {
+	int op;
+	int flags;
+	int datalen;
+	void *data;
+};
+
+struct blkpg_partition {
+	long long int start;
+	long long int length;
+	int pno;
+	char devname[64];
+	char volname[64];
+};
+
+struct pr_reservation {
+	__u64 key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_registration {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct pr_preempt {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_clear {
+	__u64 key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct compat_blkpg_ioctl_arg {
+	compat_int_t op;
+	compat_int_t flags;
+	compat_int_t datalen;
+	compat_caddr_t data;
+};
+
+struct compat_hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	short unsigned int cylinders;
+	u32 start;
+};
+
+struct klist_node;
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
+};
+
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
+};
+
+struct mq_inflight {
+	struct block_device *part;
+	unsigned int inflight[2];
+};
+
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
+struct blk_expired_data {
+	bool has_timedout_rq;
+	long unsigned int next;
+	long unsigned int timeout_start;
+};
+
+struct flush_busy_ctx_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct list_head *list;
+};
+
+struct dispatch_rq_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request *rq;
+};
+
+enum prep_dispatch {
+	PREP_DISPATCH_OK = 0,
+	PREP_DISPATCH_NO_TAG = 1,
+	PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct rq_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	bool has_rq;
+};
+
+struct blk_mq_qe_pair {
+	struct list_head node;
+	struct request_queue *q;
+	struct elevator_type *type;
+};
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
+};
+
+typedef struct {
+	struct folio *v;
+} Sector;
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct disk_events {
+	struct list_head node;
+	struct gendisk *disk;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long int poll_msecs;
+	struct delayed_work dwork;
+};
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, fmode_t, unsigned int);
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+struct blkg_rwstat_sample {
+	u64 cnt[5];
+};
+
+struct latency_bucket {
+	long unsigned int total_latency;
+	int samples;
+};
+
+struct avg_latency_bucket {
+	long unsigned int latency;
+	bool valid;
+};
+
+struct throtl_data {
+	struct throtl_service_queue service_queue;
+	struct request_queue *queue;
+	unsigned int nr_queued[2];
+	unsigned int throtl_slice;
+	struct work_struct dispatch_work;
+	unsigned int limit_index;
+	bool limit_valid[2];
+	long unsigned int low_upgrade_time;
+	long unsigned int low_downgrade_time;
+	unsigned int scale;
+	struct latency_bucket tmp_buckets[18];
+	struct avg_latency_bucket avg_buckets[18];
+	struct latency_bucket *latency_buckets[2];
+	long unsigned int last_calculate_time;
+	long unsigned int filtered_latency;
+	bool track_bio_latency;
+};
+
+struct blkg_conf_ctx {
+	struct block_device *bdev;
+	struct blkcg_gq *blkg;
+	char *body;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_CANCELING = 4,
+};
+
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+enum {
+	DD_DIR_COUNT = 2,
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum {
+	DD_PRIO_COUNT = 3,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
+	struct rb_root sort_list[2];
+	struct list_head fifo_list[2];
+	struct request *next_rq[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
+	unsigned int batching;
+	unsigned int starved;
+	int fifo_expire[2];
+	int fifo_batch;
+	int writes_starved;
+	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
+	spinlock_t lock;
+	spinlock_t zone_lock;
+};
+
+enum {
+	MILLION = 1000000,
+	MIN_PERIOD = 1000,
+	MAX_PERIOD = 1000000,
+	MARGIN_MIN_PCT = 10,
+	MARGIN_LOW_PCT = 20,
+	MARGIN_TARGET_PCT = 50,
+	INUSE_ADJ_STEP_PCT = 25,
+	TIMER_SLACK_PCT = 1,
+	WEIGHT_ONE = 65536,
+};
+
+enum {
+	VTIME_PER_SEC_SHIFT = 37,
+	VTIME_PER_SEC = 0,
+	VTIME_PER_USEC = 137438,
+	VTIME_PER_NSEC = 137,
+	VRATE_MIN_PPM = 10000,
+	VRATE_MAX_PPM = 100000000,
+	VRATE_MIN = 1374,
+	VRATE_CLAMP_ADJ_PCT = 4,
+	RQ_WAIT_BUSY_PCT = 5,
+	UNBUSY_THR_PCT = 75,
+	MIN_DELAY_THR_PCT = 500,
+	MAX_DELAY_THR_PCT = 25000,
+	MIN_DELAY = 250,
+	MAX_DELAY = 250000,
+	DFGV_USAGE_PCT = 50,
+	DFGV_PERIOD = 100000,
+	MAX_LAGGING_PERIODS = 10,
+	AUTOP_CYCLE_NSEC = 1410065408,
+	IOC_PAGE_SHIFT = 12,
+	IOC_PAGE_SIZE = 4096,
+	IOC_SECT_TO_PAGE_SHIFT = 3,
+	LCOEF_RANDIO_PAGES = 4096,
+};
+
+enum ioc_running {
+	IOC_IDLE = 0,
+	IOC_RUNNING = 1,
+	IOC_STOP = 2,
+};
+
+enum {
+	QOS_ENABLE = 0,
+	QOS_CTRL = 1,
+	NR_QOS_CTRL_PARAMS = 2,
+};
+
+enum {
+	QOS_RPPM = 0,
+	QOS_RLAT = 1,
+	QOS_WPPM = 2,
+	QOS_WLAT = 3,
+	QOS_MIN = 4,
+	QOS_MAX = 5,
+	NR_QOS_PARAMS = 6,
+};
+
+enum {
+	COST_CTRL = 0,
+	COST_MODEL = 1,
+	NR_COST_CTRL_PARAMS = 2,
+};
+
+enum {
+	I_LCOEF_RBPS = 0,
+	I_LCOEF_RSEQIOPS = 1,
+	I_LCOEF_RRANDIOPS = 2,
+	I_LCOEF_WBPS = 3,
+	I_LCOEF_WSEQIOPS = 4,
+	I_LCOEF_WRANDIOPS = 5,
+	NR_I_LCOEFS = 6,
+};
+
+enum {
+	LCOEF_RPAGE = 0,
+	LCOEF_RSEQIO = 1,
+	LCOEF_RRANDIO = 2,
+	LCOEF_WPAGE = 3,
+	LCOEF_WSEQIO = 4,
+	LCOEF_WRANDIO = 5,
+	NR_LCOEFS = 6,
+};
+
+enum {
+	AUTOP_INVALID = 0,
+	AUTOP_HDD = 1,
+	AUTOP_SSD_QD1 = 2,
+	AUTOP_SSD_DFL = 3,
+	AUTOP_SSD_FAST = 4,
+};
+
+struct ioc_params {
+	u32 qos[6];
+	u64 i_lcoefs[6];
+	u64 lcoefs[6];
+	u32 too_fast_vrate_pct;
+	u32 too_slow_vrate_pct;
+};
+
+struct ioc_margins {
+	s64 min;
+	s64 low;
+	s64 target;
+};
+
+struct ioc_missed {
+	local_t nr_met;
+	local_t nr_missed;
+	u32 last_met;
+	u32 last_missed;
+};
+
+struct ioc_pcpu_stat {
+	struct ioc_missed missed[2];
+	local64_t rq_wait_ns;
+	u64 last_rq_wait_ns;
+};
+
+struct ioc {
+	struct rq_qos rqos;
+	bool enabled;
+	struct ioc_params params;
+	struct ioc_margins margins;
+	u32 period_us;
+	u32 timer_slack_ns;
+	u64 vrate_min;
+	u64 vrate_max;
+	spinlock_t lock;
+	struct timer_list timer;
+	struct list_head active_iocgs;
+	struct ioc_pcpu_stat *pcpu_stat;
+	enum ioc_running running;
+	atomic64_t vtime_rate;
+	u64 vtime_base_rate;
+	s64 vtime_err;
+	seqcount_spinlock_t period_seqcount;
+	u64 period_at;
+	u64 period_at_vtime;
+	atomic64_t cur_period;
+	int busy_level;
+	bool weights_updated;
+	atomic_t hweight_gen;
+	u64 dfgv_period_at;
+	u64 dfgv_period_rem;
+	u64 dfgv_usage_us_sum;
+	u64 autop_too_fast_at;
+	u64 autop_too_slow_at;
+	int autop_idx;
+	bool user_qos_params: 1;
+	bool user_cost_model: 1;
+};
+
+struct iocg_pcpu_stat {
+	local64_t abs_vusage;
+};
+
+struct iocg_stat {
+	u64 usage_us;
+	u64 wait_us;
+	u64 indebt_us;
+	u64 indelay_us;
+};
+
+struct ioc_gq {
+	struct blkg_policy_data pd;
+	struct ioc *ioc;
+	u32 cfg_weight;
+	u32 weight;
+	u32 active;
+	u32 inuse;
+	u32 last_inuse;
+	s64 saved_margin;
+	sector_t cursor;
+	atomic64_t vtime;
+	atomic64_t done_vtime;
+	u64 abs_vdebt;
+	u64 delay;
+	u64 delay_at;
+	atomic64_t active_period;
+	struct list_head active_list;
+	u64 child_active_sum;
+	u64 child_inuse_sum;
+	u64 child_adjusted_sum;
+	int hweight_gen;
+	u32 hweight_active;
+	u32 hweight_inuse;
+	u32 hweight_donating;
+	u32 hweight_after_donation;
+	struct list_head walk_list;
+	struct list_head surplus_list;
+	struct wait_queue_head waitq;
+	struct hrtimer waitq_timer;
+	u64 activated_at;
+	struct iocg_pcpu_stat *pcpu_stat;
+	struct iocg_stat stat;
+	struct iocg_stat last_stat;
+	u64 last_stat_abs_vusage;
+	u64 usage_delta_us;
+	u64 wait_since;
+	u64 indebt_since;
+	u64 indelay_since;
+	int level;
+	struct ioc_gq *ancestors[0];
+};
+
+struct ioc_cgrp {
+	struct blkcg_policy_data cpd;
+	unsigned int dfl_weight;
+};
+
+struct ioc_now {
+	u64 now_ns;
+	u64 now;
+	u64 vnow;
+};
+
+struct iocg_wait {
+	struct wait_queue_entry wait;
+	struct bio *bio;
+	u64 abs_cost;
+	bool committed;
+};
+
+struct iocg_wake_ctx {
+	struct ioc_gq *iocg;
+	u32 hw_inuse;
+	s64 vbudget;
+};
+
+struct trace_event_raw_iocost_iocg_state {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+	u64 last_period;
+	u64 cur_period;
+	u64 vtime;
+	u32 weight;
+	u32 inuse;
+	u64 hweight_active;
+	u64 hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocg_inuse_update {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u32 old_inuse;
+	u32 new_inuse;
+	u64 old_hweight_inuse;
+	u64 new_hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_ioc_vrate_adj {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u64 old_vrate;
+	u64 new_vrate;
+	int busy_level;
+	u32 read_missed_ppm;
+	u32 write_missed_ppm;
+	u32 rq_wait_pct;
+	int nr_lagging;
+	int nr_shortages;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_iocg_forgive_debt {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u32 usage_pct;
+	u64 old_debt;
+	u64 new_debt;
+	u64 old_delay;
+	u64 new_delay;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iocost_iocg_state {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocg_inuse_update {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocost_ioc_vrate_adj {
+	u32 devname;
+};
+
+struct trace_event_data_offsets_iocost_iocg_forgive_debt {
+	u32 devname;
+	u32 cgroup;
+};
+
+typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
+
+typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+enum blk_integrity_flags {
+	BLK_INTEGRITY_VERIFY = 1,
+	BLK_INTEGRITY_GENERATE = 2,
+	BLK_INTEGRITY_DEVICE_CAPABLE = 4,
+	BLK_INTEGRITY_IP_CHECKSUM = 8,
+};
+
+struct blk_iolatency {
+	struct rq_qos rqos;
+	struct timer_list timer;
+	bool enabled;
+	atomic_t enable_cnt;
+	struct work_struct enable_work;
+};
+
+struct iolatency_grp;
+
+struct child_latency_info {
+	spinlock_t lock;
+	u64 last_scale_event;
+	u64 scale_lat;
+	u64 nr_samples;
+	struct iolatency_grp *scale_grp;
+	atomic_t scale_cookie;
+};
+
+struct percentile_stats {
+	u64 total;
+	u64 missed;
+};
+
+struct latency_stat {
+	union {
+		struct percentile_stats ps;
+		struct blk_rq_stat rqs;
+	};
+};
+
+struct iolatency_grp {
+	struct blkg_policy_data pd;
+	struct latency_stat *stats;
+	struct latency_stat cur_stat;
+	struct blk_iolatency *blkiolat;
+	unsigned int max_depth;
+	struct rq_wait rq_wait;
+	atomic64_t window_start;
+	atomic_t scale_cookie;
+	u64 min_lat_nsec;
+	u64 cur_win_nsec;
+	u64 lat_avg;
+	u64 nr_samples;
+	bool ssd;
+	struct child_latency_info child_lat;
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	long unsigned int latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+struct integrity_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_integrity *, char *);
+	ssize_t (*store)(struct blk_integrity *, const char *, size_t);
+};
+
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct virtio_device;
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	void *priv;
+	bool reset;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+typedef __u16 __sum16;
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+struct t10_pi_tuple {
+	__be16 guard_tag;
+	__be16 app_tag;
+	__be32 ref_tag;
+};
+
+struct crc64_pi_tuple {
+	__be64 guard_tag;
+	__be16 app_tag;
+	__u8 ref_tag[6];
+};
+
+typedef __be16 csum_fn(void *, unsigned int);
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY = 1,
+};
+
+struct blk_zone_report {
+	__u64 sector;
+	__u32 nr_zones;
+	__u32 flags;
+	struct blk_zone zones[0];
+};
+
+struct blk_zone_range {
+	__u64 sector;
+	__u64 nr_sectors;
+};
+
+struct zone_report_args {
+	struct blk_zone *zones;
+};
+
+struct blk_revalidate_zone_args {
+	struct gendisk *disk;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	unsigned int nr_zones;
+	sector_t zone_sectors;
+	sector_t sector;
+};
+
+enum wbt_flags {
+	WBT_TRACKED = 1,
+	WBT_READ = 2,
+	WBT_KSWAPD = 4,
+	WBT_DISCARD = 8,
+	WBT_NR_BITS = 4,
+};
+
+enum {
+	WBT_STATE_ON_DEFAULT = 1,
+	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
+	WBT_STATE_OFF_MANUAL = 4,
+};
+
+struct rq_wb {
+	unsigned int wb_background;
+	unsigned int wb_normal;
+	short int enable_state;
+	unsigned int unknown_cnt;
+	u64 win_nsec;
+	u64 cur_win_nsec;
+	struct blk_stat_callback *cb;
+	u64 sync_issue;
+	void *sync_cookie;
+	unsigned int wc;
+	long unsigned int last_issue;
+	long unsigned int last_comp;
+	long unsigned int min_lat_nsec;
+	struct rq_qos rqos;
+	struct rq_wait rq_wait[3];
+	struct rq_depth rq_depth;
+};
+
+struct trace_event_raw_wbt_stat {
+	struct trace_entry ent;
+	char name[32];
+	s64 rmean;
+	u64 rmin;
+	u64 rmax;
+	s64 rnr_samples;
+	s64 rtime;
+	s64 wmean;
+	u64 wmin;
+	u64 wmax;
+	s64 wnr_samples;
+	s64 wtime;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_lat {
+	struct trace_entry ent;
+	char name[32];
+	long unsigned int lat;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_step {
+	struct trace_entry ent;
+	char name[32];
+	const char *msg;
+	int step;
+	long unsigned int window;
+	unsigned int bg;
+	unsigned int normal;
+	unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_timer {
+	struct trace_entry ent;
+	char name[32];
+	unsigned int status;
+	int step;
+	unsigned int inflight;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_wbt_stat {};
+
+struct trace_event_data_offsets_wbt_lat {};
+
+struct trace_event_data_offsets_wbt_step {};
+
+struct trace_event_data_offsets_wbt_timer {};
+
+typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
+
+typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);
+
+typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
+
+enum {
+	RWB_DEF_DEPTH = 16,
+	RWB_WINDOW_NSEC = 100000000,
+	RWB_MIN_WRITE_SAMPLES = 3,
+	RWB_UNKNOWN_BUMP = 5,
+};
+
+enum {
+	LAT_OK = 1,
+	LAT_UNKNOWN = 2,
+	LAT_UNKNOWN_WRITES = 3,
+	LAT_EXCEEDED = 4,
+};
+
+struct wbt_wait_data {
+	struct rq_wb *rwb;
+	enum wbt_flags wb_acct;
+	blk_opf_t opf;
+};
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct kobject *holder_dir;
+	int refcnt;
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_MULTISHOT = 4,
+	IO_URING_F_IOWQ = 8,
+	IO_URING_F_NONBLOCK = 2147483648,
+	IO_URING_F_SQE128 = 256,
+	IO_URING_F_CQE32 = 512,
+	IO_URING_F_IOPOLL = 1024,
+};
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 1073741824,
+	REQ_F_ISREG = 2147483648,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 134217728,
+	REQ_F_CQE32_INIT = 67108864,
+	REQ_F_CLEAR_POLLIN = 268435456,
+	REQ_F_HASH_LOCKED = 536870912,
+};
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = 4294966767,
+	IOU_STOP_MULTISHOT = 4294967171,
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+struct io_rsrc_node {
+	struct percpu_ref refs;
+	struct list_head node;
+	struct list_head rsrc_list;
+	struct io_rsrc_data *rsrc_data;
+	struct llist_node llist;
+	bool done;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	long unsigned int acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_rsrc_put;
+
+typedef void rsrc_put_fn(struct io_ring_ctx *, struct io_rsrc_put *);
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	rsrc_put_fn *do_put;
+	atomic_t refs;
+	struct completion done;
+	bool quiesce;
+};
+
+struct io_rsrc_put {
+	struct list_head list;
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	long unsigned int nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 resv2;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct io_uring_buf bufs[0];
+	};
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	long unsigned int state;
+	struct completion exited;
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	struct wait_queue_entry wait;
+};
+
+struct io_cache_entry {
+	struct hlist_node node;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_sqe {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u32 flags;
+	bool force_nonblock;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	long long unsigned int user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_local_work_run {
+	struct trace_entry ent;
+	void *ctx;
+	int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_submit_sqe {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+struct trace_event_data_offsets_io_uring_local_work_run {};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long int);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_sqe)(void *, struct io_kiocb *, bool);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, long long unsigned int, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+typedef void (*btf_trace_io_uring_local_work_run)(void *, void *, int, unsigned int);
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+struct io_op_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int iopoll_queue: 1;
+	unsigned int manual_alloc: 1;
+	short unsigned int async_size;
+	const char *name;
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+	void (*fail)(struct io_kiocb *);
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+enum {
+	IO_EVENTFD_OP_SIGNAL_BIT = 0,
+	IO_EVENTFD_OP_FREE_BIT = 1,
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct creds;
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx *buffer;
+};
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u32 flags;
+	int seq;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
+	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
+};
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	long unsigned int account_pages;
+	bool zc_report;
+	bool zc_used;
+	bool zc_copied;
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr *addr;
+	int *addr_len;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr *addr;
+	int addr_len;
+	bool in_progress;
+};
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr *umsg_compat;
+		struct user_msghdr *umsg;
+		void *buf;
+	};
+	unsigned int len;
+	unsigned int done_io;
+	unsigned int msg_flags;
+	u16 flags;
+	u16 addr_len;
+	u16 buf_group;
+	void *addr;
+	struct io_kiocb *notif;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+enum {
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
+};
+
+struct io_msg {
+	struct file *file;
+	struct file *src_file;
+	struct callback_head tw;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	u32 dst_fd;
+	u32 flags;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 pad;
+	__u64 resv[3];
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u16 nbufs;
+	__u16 bid;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u64 pad[4];
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+	IOU_POLL_REISSUE = 3,
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+struct scm_fp_list {
+	short int count;
+	short int max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 consumed;
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	long unsigned int nr_segs;
+};
+
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
+};
+
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
+};
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+enum {
+	IO_WQ_BOUND = 0,
+	IO_WQ_UNBOUND = 1,
+};
+
+struct io_wqe;
+
+struct io_wq {
+	long unsigned int state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wqe *wqes[0];
+};
+
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
+};
+
+enum {
+	IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+	IO_ACCT_STALLED_BIT = 0,
+};
+
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wqe *wqe;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	long unsigned int create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct io_wqe_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	long unsigned int flags;
+};
+
+struct io_wqe {
+	raw_spinlock_t lock;
+	struct io_wqe_acct acct[2];
+	int node;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq *wq;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
+};
+
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+union nested_table {
+	union nested_table *table;
+	struct rhash_lock_head *bucket;
+};
+
+struct once_work {
+	struct work_struct work;
+	struct static_key_true *key;
+	struct module *module;
+};
+
+struct genradix_iter {
+	size_t offset;
+	size_t pos;
+};
+
+struct genradix_node {
+	union {
+		struct genradix_node *children[512];
+		u8 data[4096];
+	};
+};
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
+};
+
+struct strarray {
+	char **array;
+	size_t n;
+};
+
+struct gf128mul_64k {
+	struct gf128mul_4k *t[16];
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+enum chacha20poly1305_lengths {
+	XCHACHA20POLY1305_NONCE_SIZE = 24,
+	CHACHA20POLY1305_KEY_SIZE = 32,
+	CHACHA20POLY1305_AUTHTAG_SIZE = 16,
+};
+
+struct poly1305_key {
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
+};
+
+struct poly1305_state {
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
+};
+
+struct poly1305_desc_ctx {
+	u8 buf[16];
+	unsigned int buflen;
+	short unsigned int rset;
+	bool sset;
+	u32 s[4];
+	struct poly1305_state h;
+	union {
+		struct poly1305_key opaque_r[1];
+		struct poly1305_core_key core_r;
+	};
+};
+
+enum curve25519_lengths {
+	CURVE25519_KEY_SIZE = 32,
+};
+
+typedef __int128 unsigned u128___2;
+
+enum assoc_array_walk_status {
+	assoc_array_walk_tree_empty = 0,
+	assoc_array_walk_found_terminal_node = 1,
+	assoc_array_walk_found_wrong_shortcut = 2,
+};
+
+struct assoc_array_walk_result {
+	struct {
+		struct assoc_array_node *node;
+		int level;
+		int slot;
+	} terminal_node;
+	struct {
+		struct assoc_array_shortcut *shortcut;
+		int level;
+		int sc_level;
+		long unsigned int sc_segments;
+		long unsigned int dissimilarity;
+	} wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+	struct assoc_array_node *node;
+	const void *skip_leaf;
+	int slot;
+};
+
+struct linear_range {
+	unsigned int min;
+	unsigned int min_sel;
+	unsigned int max_sel;
+	unsigned int step;
+};
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+typedef struct {
+	unsigned char op;
+	unsigned char bits;
+	short unsigned int val;
+} code;
+
+typedef enum {
+	HEAD = 0,
+	FLAGS = 1,
+	TIME = 2,
+	OS = 3,
+	EXLEN = 4,
+	EXTRA = 5,
+	NAME = 6,
+	COMMENT = 7,
+	HCRC = 8,
+	DICTID = 9,
+	DICT = 10,
+	TYPE = 11,
+	TYPEDO = 12,
+	STORED = 13,
+	COPY = 14,
+	TABLE = 15,
+	LENLENS = 16,
+	CODELENS = 17,
+	LEN = 18,
+	LENEXT = 19,
+	DIST = 20,
+	DISTEXT = 21,
+	MATCH = 22,
+	LIT = 23,
+	CHECK = 24,
+	LENGTH = 25,
+	DONE = 26,
+	BAD = 27,
+	MEM = 28,
+	SYNC = 29,
+} inflate_mode;
+
+struct inflate_state {
+	inflate_mode mode;
+	int last;
+	int wrap;
+	int havedict;
+	int flags;
+	unsigned int dmax;
+	long unsigned int check;
+	long unsigned int total;
+	unsigned int wbits;
+	unsigned int wsize;
+	unsigned int whave;
+	unsigned int write;
+	unsigned char *window;
+	long unsigned int hold;
+	unsigned int bits;
+	unsigned int length;
+	unsigned int offset;
+	unsigned int extra;
+	const code *lencode;
+	const code *distcode;
+	unsigned int lenbits;
+	unsigned int distbits;
+	unsigned int ncode;
+	unsigned int nlen;
+	unsigned int ndist;
+	unsigned int have;
+	code *next;
+	short unsigned int lens[320];
+	short unsigned int work[288];
+	code codes[2048];
+};
+
+union uu {
+	short unsigned int us;
+	unsigned char b[2];
+};
+
+typedef unsigned int uInt;
+
+typedef enum {
+	CODES = 0,
+	LENS = 1,
+	DISTS = 2,
+} codetype;
+
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
+};
+
+typedef unsigned char uch;
+
+typedef short unsigned int ush;
+
+typedef long unsigned int ulg;
+
+struct ct_data_s {
+	union {
+		ush freq;
+		ush code;
+	} fc;
+	union {
+		ush dad;
+		ush len;
+	} dl;
+};
+
+typedef struct ct_data_s ct_data;
+
+struct static_tree_desc_s {
+	const ct_data *static_tree;
+	const int *extra_bits;
+	int extra_base;
+	int elems;
+	int max_length;
+};
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+struct tree_desc_s {
+	ct_data *dyn_tree;
+	int max_code;
+	static_tree_desc *stat_desc;
+};
+
+typedef ush Pos;
+
+typedef unsigned int IPos;
+
+struct deflate_state {
+	z_streamp strm;
+	int status;
+	Byte *pending_buf;
+	ulg pending_buf_size;
+	Byte *pending_out;
+	int pending;
+	int noheader;
+	Byte data_type;
+	Byte method;
+	int last_flush;
+	uInt w_size;
+	uInt w_bits;
+	uInt w_mask;
+	Byte *window;
+	ulg window_size;
+	Pos *prev;
+	Pos *head;
+	uInt ins_h;
+	uInt hash_size;
+	uInt hash_bits;
+	uInt hash_mask;
+	uInt hash_shift;
+	long int block_start;
+	uInt match_length;
+	IPos prev_match;
+	int match_available;
+	uInt strstart;
+	uInt match_start;
+	uInt lookahead;
+	uInt prev_length;
+	uInt max_chain_length;
+	uInt max_lazy_match;
+	int level;
+	int strategy;
+	uInt good_match;
+	int nice_match;
+	struct ct_data_s dyn_ltree[573];
+	struct ct_data_s dyn_dtree[61];
+	struct ct_data_s bl_tree[39];
+	struct tree_desc_s l_desc;
+	struct tree_desc_s d_desc;
+	struct tree_desc_s bl_desc;
+	ush bl_count[16];
+	int heap[573];
+	int heap_len;
+	int heap_max;
+	uch depth[573];
+	uch *l_buf;
+	uInt lit_bufsize;
+	uInt last_lit;
+	ush *d_buf;
+	ulg opt_len;
+	ulg static_len;
+	ulg compressed_len;
+	uInt matches;
+	int last_eob_len;
+	ush bi_buf;
+	int bi_valid;
+};
+
+typedef struct deflate_state deflate_state;
+
+typedef enum {
+	need_more = 0,
+	block_done = 1,
+	finish_started = 2,
+	finish_done = 3,
+} block_state;
+
+typedef block_state (*compress_func)(deflate_state *, int);
+
+struct deflate_workspace {
+	deflate_state deflate_memory;
+	Byte *window_memory;
+	Pos *prev_memory;
+	Pos *head_memory;
+	char *overlay_memory;
+};
+
+typedef struct deflate_workspace deflate_workspace;
+
+struct config_s {
+	ush good_length;
+	ush max_lazy;
+	ush nice_length;
+	ush max_chain;
+	compress_func func;
+};
+
+typedef struct config_s config;
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+typedef struct tree_desc_s tree_desc;
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	long unsigned int bits[0];
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	long unsigned int offset;
+};
+
+typedef struct {
+	unsigned int hashTable[32768];
+	short unsigned int chainTable[65536];
+	const unsigned char *end;
+	const unsigned char *base;
+	const unsigned char *dictBase;
+	unsigned int dictLimit;
+	unsigned int lowLimit;
+	unsigned int nextToUpdate;
+	unsigned int compressionLevel;
+} LZ4HC_CCtx_internal;
+
+typedef union {
+	size_t table[32774];
+	LZ4HC_CCtx_internal internal_donotuse;
+} LZ4_streamHC_t;
+
+typedef uint8_t BYTE;
+
+typedef uint16_t U16;
+
+typedef uint32_t U32;
+
+typedef uint64_t U64;
+
+typedef enum {
+	noLimit = 0,
+	limitedOutput = 1,
+} limitedOutput_directive;
+
+typedef struct {
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+typedef union {
+	long long unsigned int table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
+
+typedef uintptr_t uptrval;
+
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
+
+typedef enum {
+	endOnOutputSize = 0,
+	endOnInputSize = 1,
+} endCondition_directive;
+
+typedef enum {
+	decode_full_block = 0,
+	partial_decode = 1,
+} earlyEnd_directive;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitPos;
+	char *startPtr;
+	char *ptr;
+	char *endPtr;
+} BIT_CStream_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef struct {
+	ptrdiff_t value;
+	const void *stateTable;
+	const void *symbolTT;
+	unsigned int stateLog;
+} FSE_CState_t;
+
+typedef struct {
+	int deltaFindState;
+	U32 deltaNbBits;
+} FSE_symbolCompressionTransform;
+
+typedef enum {
+	trustInput = 0,
+	checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+typedef int16_t S16;
+
+typedef size_t HUF_CElt;
+
+typedef enum {
+	HUF_repeat_none = 0,
+	HUF_repeat_check = 1,
+	HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef struct {
+	FSE_CTable CTable[59];
+	U32 scratchBuffer[41];
+	unsigned int count[13];
+	S16 norm[13];
+} HUF_CompressWeightsWksp;
+
+typedef struct {
+	HUF_CompressWeightsWksp wksp;
+	BYTE bitsToWeight[13];
+	BYTE huffWeight[255];
+} HUF_WriteCTableWksp;
+
+struct nodeElt_s {
+	U32 count;
+	U16 parent;
+	BYTE byte;
+	BYTE nbBits;
+};
+
+typedef struct nodeElt_s nodeElt;
+
+typedef struct {
+	U16 base;
+	U16 curr;
+} rankPos;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+	huffNodeTable huffNodeTbl;
+	rankPos rankPosition[192];
+} HUF_buildCTable_wksp_tables;
+
+typedef struct {
+	size_t bitContainer[2];
+	size_t bitPos[2];
+	BYTE *startPtr;
+	BYTE *ptr;
+	BYTE *endPtr;
+} HUF_CStream_t;
+
+typedef enum {
+	HUF_singleStream = 0,
+	HUF_fourStreams = 1,
+} HUF_nbStreams_e;
+
+typedef struct {
+	unsigned int count[256];
+	HUF_CElt CTable[257];
+	union {
+		HUF_buildCTable_wksp_tables buildCTable_wksp;
+		HUF_WriteCTableWksp writeCTable_wksp;
+		U32 hist_wksp[1024];
+	} wksps;
+} HUF_compress_tables_t;
+
+typedef uint8_t U8;
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef struct {
+	HUF_CElt CTable[257];
+	HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+typedef struct {
+	U32 offset;
+	U32 litLength;
+	U32 matchLength;
+} rawSeq;
+
+typedef struct {
+	rawSeq *seq;
+	size_t pos;
+	size_t posInSequence;
+	size_t size;
+	size_t capacity;
+} rawSeqStore_t;
+
+typedef enum {
+	FSE_repeat_none = 0,
+	FSE_repeat_check = 1,
+	FSE_repeat_valid = 2,
+} FSE_repeat;
+
+struct seqDef_s {
+	U32 offBase;
+	U16 litLength;
+	U16 mlBase;
+};
+
+typedef struct seqDef_s seqDef;
+
+typedef enum {
+	ZSTD_defaultDisallowed = 0,
+	ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+typedef struct {
+	S16 norm[53];
+	U32 wksp[285];
+} ZSTD_BuildCTableWksp;
+
+typedef struct {
+	uint32_t hashTable[4096];
+	uint32_t currentOffset;
+	uint32_t initCheck;
+	const uint8_t *dictionary;
+	uint8_t *bufferStart;
+	uint32_t dictSize;
+} LZ4_stream_t_internal;
+
+typedef union {
+	long long unsigned int table[2052];
+	LZ4_stream_t_internal internal_donotuse;
+} LZ4_stream_t;
+
+typedef enum {
+	byPtr = 0,
+	byU32 = 1,
+	byU16 = 2,
+} tableType_t;
+
+typedef enum {
+	noDictIssue = 0,
+	dictSmall = 1,
+} dictIssue_directive;
+
+typedef enum {
+	ZSTDcs_created = 0,
+	ZSTDcs_init = 1,
+	ZSTDcs_ongoing = 2,
+	ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_dictDefaultAttach = 0,
+	ZSTD_dictForceAttach = 1,
+	ZSTD_dictForceCopy = 2,
+	ZSTD_dictForceLoad = 3,
+} ZSTD_dictAttachPref_e;
+
+typedef enum {
+	ZSTD_ps_auto = 0,
+	ZSTD_ps_enable = 1,
+	ZSTD_ps_disable = 2,
+} ZSTD_paramSwitch_e;
+
+typedef struct {
+	ZSTD_paramSwitch_e enableLdm;
+	U32 hashLog;
+	U32 bucketSizeLog;
+	U32 minMatchLength;
+	U32 hashRateLog;
+	U32 windowLog;
+} ldmParams_t;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+typedef enum {
+	ZSTD_sf_noBlockDelimiters = 0,
+	ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_e;
+
+struct ZSTD_CCtx_params_s {
+	ZSTD_format_e format;
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+	int compressionLevel;
+	int forceWindow;
+	size_t targetCBlockSize;
+	int srcSizeHint;
+	ZSTD_dictAttachPref_e attachDictPref;
+	ZSTD_paramSwitch_e literalCompressionMode;
+	int nbWorkers;
+	size_t jobSize;
+	int overlapLog;
+	int rsyncable;
+	ldmParams_t ldmParams;
+	int enableDedicatedDictSearch;
+	ZSTD_bufferMode_e inBufferMode;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_sequenceFormat_e blockDelimiters;
+	int validateSequences;
+	ZSTD_paramSwitch_e useBlockSplitter;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+	int deterministicRefPrefix;
+	ZSTD_customMem customMem;
+};
+
+typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
+
+typedef enum {
+	ZSTD_cwksp_alloc_objects = 0,
+	ZSTD_cwksp_alloc_buffers = 1,
+	ZSTD_cwksp_alloc_aligned = 2,
+} ZSTD_cwksp_alloc_phase_e;
+
+typedef enum {
+	ZSTD_cwksp_dynamic_alloc = 0,
+	ZSTD_cwksp_static_alloc = 1,
+} ZSTD_cwksp_static_alloc_e;
+
+typedef struct {
+	void *workspace;
+	void *workspaceEnd;
+	void *objectEnd;
+	void *tableEnd;
+	void *tableValidEnd;
+	void *allocStart;
+	BYTE allocFailed;
+	int workspaceOversizedDuration;
+	ZSTD_cwksp_alloc_phase_e phase;
+	ZSTD_cwksp_static_alloc_e isStatic;
+} ZSTD_cwksp;
+
+struct POOL_ctx_s;
+
+typedef struct POOL_ctx_s ZSTD_threadPool;
+
+typedef struct {
+	unsigned int offset;
+	unsigned int litLength;
+	unsigned int matchLength;
+	unsigned int rep;
+} ZSTD_Sequence;
+
+typedef struct {
+	int collectSequences;
+	ZSTD_Sequence *seqStart;
+	size_t seqIndex;
+	size_t maxSequences;
+} SeqCollector;
+
+typedef enum {
+	ZSTD_llt_none = 0,
+	ZSTD_llt_literalLength = 1,
+	ZSTD_llt_matchLength = 2,
+} ZSTD_longLengthType_e;
+
+typedef struct {
+	seqDef *sequencesStart;
+	seqDef *sequences;
+	BYTE *litStart;
+	BYTE *lit;
+	BYTE *llCode;
+	BYTE *mlCode;
+	BYTE *ofCode;
+	size_t maxNbSeq;
+	size_t maxNbLit;
+	ZSTD_longLengthType_e longLengthType;
+	U32 longLengthPos;
+} seqStore_t;
+
+typedef struct {
+	const BYTE *nextSrc;
+	const BYTE *base;
+	const BYTE *dictBase;
+	U32 dictLimit;
+	U32 lowLimit;
+	U32 nbOverflowCorrections;
+} ZSTD_window_t;
+
+typedef struct {
+	U32 offset;
+	U32 checksum;
+} ldmEntry_t;
+
+typedef struct {
+	const BYTE *split;
+	U32 hash;
+	U32 checksum;
+	ldmEntry_t *bucket;
+} ldmMatchCandidate_t;
+
+typedef struct {
+	ZSTD_window_t window;
+	ldmEntry_t *hashTable;
+	U32 loadedDictEnd;
+	BYTE *bucketOffsets;
+	size_t splitIndices[64];
+	ldmMatchCandidate_t matchCandidates[64];
+} ldmState_t;
+
+typedef struct {
+	FSE_CTable offcodeCTable[193];
+	FSE_CTable matchlengthCTable[363];
+	FSE_CTable litlengthCTable[329];
+	FSE_repeat offcode_repeatMode;
+	FSE_repeat matchlength_repeatMode;
+	FSE_repeat litlength_repeatMode;
+} ZSTD_fseCTables_t;
+
+typedef struct {
+	ZSTD_hufCTables_t huf;
+	ZSTD_fseCTables_t fse;
+} ZSTD_entropyCTables_t;
+
+typedef struct {
+	ZSTD_entropyCTables_t entropy;
+	U32 rep[3];
+} ZSTD_compressedBlockState_t;
+
+typedef struct {
+	U32 off;
+	U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+	int price;
+	U32 off;
+	U32 mlen;
+	U32 litlen;
+	U32 rep[3];
+} ZSTD_optimal_t;
+
+typedef enum {
+	zop_dynamic = 0,
+	zop_predef = 1,
+} ZSTD_OptPrice_e;
+
+typedef struct {
+	unsigned int *litFreq;
+	unsigned int *litLengthFreq;
+	unsigned int *matchLengthFreq;
+	unsigned int *offCodeFreq;
+	ZSTD_match_t *matchTable;
+	ZSTD_optimal_t *priceTable;
+	U32 litSum;
+	U32 litLengthSum;
+	U32 matchLengthSum;
+	U32 offCodeSum;
+	U32 litSumBasePrice;
+	U32 litLengthSumBasePrice;
+	U32 matchLengthSumBasePrice;
+	U32 offCodeSumBasePrice;
+	ZSTD_OptPrice_e priceType;
+	const ZSTD_entropyCTables_t *symbolCosts;
+	ZSTD_paramSwitch_e literalCompressionMode;
+} optState_t;
+
+struct ZSTD_matchState_t;
+
+typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+struct ZSTD_matchState_t {
+	ZSTD_window_t window;
+	U32 loadedDictEnd;
+	U32 nextToUpdate;
+	U32 hashLog3;
+	U32 rowHashLog;
+	U16 *tagTable;
+	U32 hashCache[8];
+	U32 *hashTable;
+	U32 *hashTable3;
+	U32 *chainTable;
+	U32 forceNonContiguous;
+	int dedicatedDictSearch;
+	optState_t opt;
+	const ZSTD_matchState_t *dictMatchState;
+	ZSTD_compressionParameters cParams;
+	const rawSeqStore_t *ldmSeqStore;
+};
+
+typedef struct {
+	ZSTD_compressedBlockState_t *prevCBlock;
+	ZSTD_compressedBlockState_t *nextCBlock;
+	ZSTD_matchState_t matchState;
+} ZSTD_blockState_t;
+
+typedef enum {
+	ZSTDb_not_buffered = 0,
+	ZSTDb_buffered = 1,
+} ZSTD_buffered_policy_e;
+
+typedef enum {
+	zcss_init = 0,
+	zcss_load = 1,
+	zcss_flush = 2,
+} ZSTD_cStreamStage;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+struct ZSTD_CDict_s;
+
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+typedef struct {
+	void *dictBuffer;
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+	ZSTD_CDict *cdict;
+} ZSTD_localDict;
+
+struct ZSTD_prefixDict_s {
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+};
+
+typedef struct ZSTD_prefixDict_s ZSTD_prefixDict;
+
+typedef struct {
+	symbolEncodingType_e hType;
+	BYTE hufDesBuffer[128];
+	size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+typedef struct {
+	symbolEncodingType_e llType;
+	symbolEncodingType_e ofType;
+	symbolEncodingType_e mlType;
+	BYTE fseTablesBuffer[133];
+	size_t fseTablesSize;
+	size_t lastCountSize;
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+	ZSTD_hufCTablesMetadata_t hufMetadata;
+	ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+typedef struct {
+	seqStore_t fullSeqStoreChunk;
+	seqStore_t firstHalfSeqStore;
+	seqStore_t secondHalfSeqStore;
+	seqStore_t currSeqStore;
+	seqStore_t nextSeqStore;
+	U32 partitions[196];
+	ZSTD_entropyCTablesMetadata_t entropyMetadata;
+} ZSTD_blockSplitCtx;
+
+struct ZSTD_CCtx_s {
+	ZSTD_compressionStage_e stage;
+	int cParamsChanged;
+	int bmi2;
+	ZSTD_CCtx_params requestedParams;
+	ZSTD_CCtx_params appliedParams;
+	ZSTD_CCtx_params simpleApiParams;
+	U32 dictID;
+	size_t dictContentSize;
+	ZSTD_cwksp workspace;
+	size_t blockSize;
+	long long unsigned int pledgedSrcSizePlusOne;
+	long long unsigned int consumedSrcSize;
+	long long unsigned int producedCSize;
+	struct xxh64_state xxhState;
+	ZSTD_customMem customMem;
+	ZSTD_threadPool *pool;
+	size_t staticSize;
+	SeqCollector seqCollector;
+	int isFirstBlock;
+	int initialized;
+	seqStore_t seqStore;
+	ldmState_t ldmState;
+	rawSeq *ldmSequences;
+	size_t maxNbLdmSequences;
+	rawSeqStore_t externSeqStore;
+	ZSTD_blockState_t blockState;
+	U32 *entropyWorkspace;
+	ZSTD_buffered_policy_e bufferedPolicy;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inToCompress;
+	size_t inBuffPos;
+	size_t inBuffTarget;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outBuffContentSize;
+	size_t outBuffFlushedSize;
+	ZSTD_cStreamStage streamStage;
+	U32 frameEnded;
+	ZSTD_inBuffer expectedInBuffer;
+	size_t expectedOutBufferSize;
+	ZSTD_localDict localDict;
+	const ZSTD_CDict *cdict;
+	ZSTD_prefixDict prefixDict;
+	ZSTD_blockSplitCtx blockSplitCtx;
+};
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx___2;
+
+struct ZSTD_CDict_s {
+	const void *dictContent;
+	size_t dictContentSize;
+	ZSTD_dictContentType_e dictContentType;
+	U32 *entropyWorkspace;
+	ZSTD_cwksp workspace;
+	ZSTD_matchState_t matchState;
+	ZSTD_compressedBlockState_t cBlockState;
+	ZSTD_customMem customMem;
+	U32 dictID;
+	int compressionLevel;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+};
+
+typedef struct {
+	U32 litLength;
+	U32 matchLength;
+} ZSTD_sequenceLength;
+
+struct repcodes_s {
+	U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef struct {
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef enum {
+	ZSTD_c_compressionLevel = 100,
+	ZSTD_c_windowLog = 101,
+	ZSTD_c_hashLog = 102,
+	ZSTD_c_chainLog = 103,
+	ZSTD_c_searchLog = 104,
+	ZSTD_c_minMatch = 105,
+	ZSTD_c_targetLength = 106,
+	ZSTD_c_strategy = 107,
+	ZSTD_c_enableLongDistanceMatching = 160,
+	ZSTD_c_ldmHashLog = 161,
+	ZSTD_c_ldmMinMatch = 162,
+	ZSTD_c_ldmBucketSizeLog = 163,
+	ZSTD_c_ldmHashRateLog = 164,
+	ZSTD_c_contentSizeFlag = 200,
+	ZSTD_c_checksumFlag = 201,
+	ZSTD_c_dictIDFlag = 202,
+	ZSTD_c_nbWorkers = 400,
+	ZSTD_c_jobSize = 401,
+	ZSTD_c_overlapLog = 402,
+	ZSTD_c_experimentalParam1 = 500,
+	ZSTD_c_experimentalParam2 = 10,
+	ZSTD_c_experimentalParam3 = 1000,
+	ZSTD_c_experimentalParam4 = 1001,
+	ZSTD_c_experimentalParam5 = 1002,
+	ZSTD_c_experimentalParam6 = 1003,
+	ZSTD_c_experimentalParam7 = 1004,
+	ZSTD_c_experimentalParam8 = 1005,
+	ZSTD_c_experimentalParam9 = 1006,
+	ZSTD_c_experimentalParam10 = 1007,
+	ZSTD_c_experimentalParam11 = 1008,
+	ZSTD_c_experimentalParam12 = 1009,
+	ZSTD_c_experimentalParam13 = 1010,
+	ZSTD_c_experimentalParam14 = 1011,
+	ZSTD_c_experimentalParam15 = 1012,
+} ZSTD_cParameter;
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef ZSTD_CCtx___2 ZSTD_CStream___2;
+
+typedef enum {
+	ZSTD_e_continue = 0,
+	ZSTD_e_flush = 1,
+	ZSTD_e_end = 2,
+} ZSTD_EndDirective;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef struct {
+	long long unsigned int ingested;
+	long long unsigned int consumed;
+	long long unsigned int produced;
+	long long unsigned int flushed;
+	unsigned int currentJobID;
+	unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef enum {
+	ZSTD_dtlm_fast = 0,
+	ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef enum {
+	ZSTD_noDict = 0,
+	ZSTD_extDict = 1,
+	ZSTD_dictMatchState = 2,
+	ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+typedef enum {
+	ZSTD_cpm_noAttachDict = 0,
+	ZSTD_cpm_attachDict = 1,
+	ZSTD_cpm_createCDict = 2,
+	ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
+
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
+
+typedef enum {
+	ZSTDcrp_makeClean = 0,
+	ZSTDcrp_leaveDirty = 1,
+} ZSTD_compResetPolicy_e;
+
+typedef enum {
+	ZSTDirp_continue = 0,
+	ZSTDirp_reset = 1,
+} ZSTD_indexResetPolicy_e;
+
+typedef enum {
+	ZSTD_resetTarget_CDict = 0,
+	ZSTD_resetTarget_CCtx = 1,
+} ZSTD_resetTarget_e;
+
+typedef struct {
+	U32 LLtype;
+	U32 Offtype;
+	U32 MLtype;
+	size_t size;
+	size_t lastCountSize;
+} ZSTD_symbolEncodingTypeStats_t;
+
+enum {
+	ZSTDbss_compress = 0,
+	ZSTDbss_noCompress = 1,
+};
+
+typedef struct {
+	U32 *splitLocations;
+	size_t idx;
+} seqStoreSplits;
+
+typedef struct {
+	U32 idx;
+	U32 posInSequence;
+	size_t posInSrc;
+} ZSTD_sequencePosition;
+
+typedef size_t (*ZSTD_sequenceCopier)(ZSTD_CCtx___2 *, ZSTD_sequencePosition *, const ZSTD_Sequence * const, size_t, const void *, size_t);
+
+typedef struct {
+	U64 rolling;
+	U64 stopMask;
+} ldmRollingHashState_t;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	long long unsigned int frameContentSize;
+	long long unsigned int windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef enum {
+	ZSTD_use_indefinitely = 4294967295,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+typedef enum {
+	ZSTD_not_in_dst = 0,
+	ZSTD_in_dst = 1,
+	ZSTD_split = 2,
+} ZSTD_litLocation_e;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE *litBuffer;
+	const BYTE *litBufferEnd;
+	ZSTD_litLocation_e litBufferLocation;
+	BYTE litExtraBuffer[65568];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx___2;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+typedef struct {
+	BYTE maxTableLog;
+	BYTE tableType;
+	BYTE tableLog;
+	BYTE reserved;
+} DTableDesc;
+
+typedef struct {
+	BYTE nbBits;
+	BYTE byte;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[13];
+	U32 rankStart[13];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
+
+typedef struct {
+	U16 sequence;
+	BYTE nbBits;
+	BYTE length;
+} HUF_DEltX2;
+
+typedef struct {
+	BYTE symbol;
+} sortedSymbol_t;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+	U32 rankVal[156];
+	U32 rankStats[13];
+	U32 rankStart0[15];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+	U32 tableTime;
+	U32 decode256Time;
+} algo_time_t;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef ZSTD_DCtx___2 ZSTD_DStream___2;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef struct {
+	size_t compressedSize;
+	long long unsigned int decompressedBound;
+} ZSTD_frameSizeInfo;
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef enum {
+	not_streaming = 0,
+	is_streaming = 1,
+} streaming_operation;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+} seqState_t;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+typedef U32 (*ZSTD_getAllMatchesFn)(ZSTD_match_t *, ZSTD_matchState_t *, U32 *, const BYTE *, const BYTE *, const U32 *, const U32, const U32);
+
+typedef struct {
+	rawSeqStore_t seqStore;
+	U32 startPosInBlock;
+	U32 endPosInBlock;
+	U32 offset;
+} ZSTD_optLdm_t;
+
+typedef unsigned int FSE_DTable;
+
+typedef struct {
+	size_t state;
+	const void *table;
+} FSE_DState_t;
+
+typedef struct {
+	U16 tableLog;
+	U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+	short unsigned int newState;
+	unsigned char symbol;
+	unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+	short int ncount[256];
+	FSE_DTable dtable[1];
+} FSE_DecompressWksp;
+
+typedef uint64_t vli_type;
+
+enum xz_check {
+	XZ_CHECK_NONE = 0,
+	XZ_CHECK_CRC32 = 1,
+	XZ_CHECK_CRC64 = 4,
+	XZ_CHECK_SHA256 = 10,
+};
+
+struct xz_dec_hash {
+	vli_type unpadded;
+	vli_type uncompressed;
+	uint32_t crc32;
+};
+
+struct xz_dec_lzma2;
+
+struct xz_dec_bcj;
+
+struct xz_dec {
+	enum {
+		SEQ_STREAM_HEADER = 0,
+		SEQ_BLOCK_START = 1,
+		SEQ_BLOCK_HEADER = 2,
+		SEQ_BLOCK_UNCOMPRESS = 3,
+		SEQ_BLOCK_PADDING = 4,
+		SEQ_BLOCK_CHECK = 5,
+		SEQ_INDEX = 6,
+		SEQ_INDEX_PADDING = 7,
+		SEQ_INDEX_CRC32 = 8,
+		SEQ_STREAM_FOOTER = 9,
+	} sequence;
+	uint32_t pos;
+	vli_type vli;
+	size_t in_start;
+	size_t out_start;
+	uint32_t crc32;
+	enum xz_check check_type;
+	enum xz_mode mode;
+	bool allow_buf_error;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		uint32_t size;
+	} block_header;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} block;
+	struct {
+		enum {
+			SEQ_INDEX_COUNT = 0,
+			SEQ_INDEX_UNPADDED = 1,
+			SEQ_INDEX_UNCOMPRESSED = 2,
+		} sequence;
+		vli_type size;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} index;
+	struct {
+		size_t pos;
+		size_t size;
+		uint8_t buf[1024];
+	} temp;
+	struct xz_dec_lzma2 *lzma2;
+	struct xz_dec_bcj *bcj;
+	bool bcj_active;
+};
+
+struct xz_dec_bcj {
+	enum {
+		BCJ_X86 = 4,
+		BCJ_POWERPC = 5,
+		BCJ_IA64 = 6,
+		BCJ_ARM = 7,
+		BCJ_ARMTHUMB = 8,
+		BCJ_SPARC = 9,
+	} type;
+	enum xz_ret ret;
+	bool single_call;
+	uint32_t pos;
+	uint32_t x86_prev_mask;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+	struct {
+		size_t filtered;
+		size_t size;
+		uint8_t buf[16];
+	} temp;
+};
+
+enum lzma_state {
+	STATE_LIT_LIT = 0,
+	STATE_MATCH_LIT_LIT = 1,
+	STATE_REP_LIT_LIT = 2,
+	STATE_SHORTREP_LIT_LIT = 3,
+	STATE_MATCH_LIT = 4,
+	STATE_REP_LIT = 5,
+	STATE_SHORTREP_LIT = 6,
+	STATE_LIT_MATCH = 7,
+	STATE_LIT_LONGREP = 8,
+	STATE_LIT_SHORTREP = 9,
+	STATE_NONLIT_MATCH = 10,
+	STATE_NONLIT_REP = 11,
+};
+
+struct dictionary {
+	uint8_t *buf;
+	size_t start;
+	size_t pos;
+	size_t full;
+	size_t limit;
+	size_t end;
+	uint32_t size;
+	uint32_t size_max;
+	uint32_t allocated;
+	enum xz_mode mode;
+};
+
+struct rc_dec {
+	uint32_t range;
+	uint32_t code;
+	uint32_t init_bytes_left;
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_limit;
+};
+
+struct lzma_len_dec {
+	uint16_t choice;
+	uint16_t choice2;
+	uint16_t low[128];
+	uint16_t mid[128];
+	uint16_t high[256];
+};
+
+struct lzma_dec {
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+	enum lzma_state state;
+	uint32_t len;
+	uint32_t lc;
+	uint32_t literal_pos_mask;
+	uint32_t pos_mask;
+	uint16_t is_match[192];
+	uint16_t is_rep[12];
+	uint16_t is_rep0[12];
+	uint16_t is_rep1[12];
+	uint16_t is_rep2[12];
+	uint16_t is_rep0_long[192];
+	uint16_t dist_slot[256];
+	uint16_t dist_special[114];
+	uint16_t dist_align[16];
+	struct lzma_len_dec match_len_dec;
+	struct lzma_len_dec rep_len_dec;
+	uint16_t literal[12288];
+};
+
+enum lzma2_seq {
+	SEQ_CONTROL = 0,
+	SEQ_UNCOMPRESSED_1 = 1,
+	SEQ_UNCOMPRESSED_2 = 2,
+	SEQ_COMPRESSED_0 = 3,
+	SEQ_COMPRESSED_1 = 4,
+	SEQ_PROPERTIES = 5,
+	SEQ_LZMA_PREPARE = 6,
+	SEQ_LZMA_RUN = 7,
+	SEQ_COPY = 8,
+};
+
+struct lzma2_dec {
+	enum lzma2_seq sequence;
+	enum lzma2_seq next_sequence;
+	uint32_t uncompressed;
+	uint32_t compressed;
+	bool need_dict_reset;
+	bool need_props;
+};
+
+struct xz_dec_lzma2 {
+	struct rc_dec rc;
+	struct dictionary dict;
+	struct lzma2_dec lzma2;
+	struct lzma_dec lzma;
+	struct {
+		uint32_t size;
+		uint8_t buf[63];
+	} temp;
+};
+
+struct raid6_recov_calls {
+	void (*data2)(int, size_t, int, int, void **);
+	void (*datap)(int, size_t, int, void **);
+	int (*valid)();
+	const char *name;
+	int priority;
+};
+
+typedef u64 unative_t;
+
+typedef U64 ZSTD_VecMask;
+
+typedef enum {
+	search_hashChain = 0,
+	search_binaryTree = 1,
+	search_rowHash = 2,
+} searchMethod_e;
+
+struct ei_entry {
+	struct list_head list;
+	long unsigned int start_addr;
+	long unsigned int end_addr;
+	int etype;
+	void *priv;
+};
+
+struct cpu_rmap {
+	struct kref refcount;
+	u16 size;
+	u16 used;
+	void **obj;
+	struct {
+		u16 index;
+		u16 dist;
+	} near[0];
+};
+
+struct irq_glue {
+	struct irq_affinity_notify notify;
+	struct cpu_rmap *rmap;
+	u16 index;
+};
+
+typedef mpi_limb_t *mpi_ptr_t;
+
+typedef int mpi_size_t;
+
+typedef mpi_limb_t UWtype;
+
+typedef unsigned int UHWtype;
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum gcry_mpi_format {
+	GCRYMPI_FMT_NONE = 0,
+	GCRYMPI_FMT_STD = 1,
+	GCRYMPI_FMT_PGP = 2,
+	GCRYMPI_FMT_SSH = 3,
+	GCRYMPI_FMT_HEX = 4,
+	GCRYMPI_FMT_USG = 5,
+	GCRYMPI_FMT_OPAQUE = 8,
+};
+
+enum gcry_mpi_constants {
+	MPI_C_ZERO = 0,
+	MPI_C_ONE = 1,
+	MPI_C_TWO = 2,
+	MPI_C_THREE = 3,
+	MPI_C_FOUR = 4,
+	MPI_C_EIGHT = 5,
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t;
+
+struct gcry_mpi_point {
+	MPI x;
+	MPI y;
+	MPI z;
+};
+
+typedef struct gcry_mpi_point *MPI_POINT;
+
+enum gcry_mpi_ec_models {
+	MPI_EC_WEIERSTRASS = 0,
+	MPI_EC_MONTGOMERY = 1,
+	MPI_EC_EDWARDS = 2,
+};
+
+enum ecc_dialects {
+	ECC_DIALECT_STANDARD = 0,
+	ECC_DIALECT_ED25519 = 1,
+	ECC_DIALECT_SAFECURVE = 2,
+};
+
+struct mpi_ec_ctx {
+	enum gcry_mpi_ec_models model;
+	enum ecc_dialects dialect;
+	int flags;
+	unsigned int nbits;
+	MPI p;
+	MPI a;
+	MPI b;
+	MPI_POINT G;
+	MPI n;
+	unsigned int h;
+	MPI_POINT Q;
+	MPI d;
+	const char *name;
+	struct {
+		struct {
+			unsigned int a_is_pminus3: 1;
+			unsigned int two_inv_p: 1;
+		} valid;
+		int a_is_pminus3;
+		MPI two_inv_p;
+		mpi_barrett_t p_barrett;
+		MPI scratch[11];
+	} t;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+};
+
+struct field_table {
+	const char *p;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t___2;
+
+struct barrett_ctx_s {
+	MPI m;
+	int m_copied;
+	int k;
+	MPI y;
+	MPI r1;
+	MPI r2;
+	MPI r3;
+};
+
+typedef long int mpi_limb_signed_t;
+
+struct karatsuba_ctx {
+	struct karatsuba_ctx *next;
+	mpi_ptr_t tspace;
+	mpi_size_t tspace_size;
+	mpi_ptr_t tp;
+	mpi_size_t tp_size;
+};
+
+struct word_at_a_time {
+	const long unsigned int one_bits;
+	const long unsigned int high_bits;
+};
+
+struct ref_tracker {
+	struct list_head head;
+	bool dead;
+	depot_stack_handle_t alloc_stack_handle;
+	depot_stack_handle_t free_stack_handle;
+};
+
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 slabindex: 16;
+		u32 offset: 10;
+		u32 valid: 1;
+		u32 extra: 5;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	long unsigned int entries[0];
+};
+
+struct sg_pool {
+	size_t size;
+	char *name;
+	struct kmem_cache *slab;
+	mempool_t *pool;
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+typedef u16 ucs2_char_t;
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
+
+struct plic_priv {
+	struct cpumask lmask;
+	struct irq_domain *irqdomain;
+	void *regs;
+	long unsigned int plic_quirks;
+};
+
+struct plic_handler {
+	bool present;
+	void *hart_base;
+	raw_spinlock_t enable_lock;
+	void *enable_base;
+	struct plic_priv *priv;
+};
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+enum device_link_state {
+	DL_STATE_NONE = 4294967295,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	long unsigned int differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	long unsigned int hs_clk_rate;
+	long unsigned int lp_clk_rate;
+	unsigned char lanes;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy;
+
+struct phy_ops {
+	int (*init)(struct phy *);
+	int (*exit)(struct phy *);
+	int (*power_on)(struct phy *);
+	int (*power_off)(struct phy *);
+	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
+	int (*configure)(struct phy *, union phy_configure_opts *);
+	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy *);
+	int (*calibrate)(struct phy *);
+	void (*release)(struct phy *);
+	struct module *owner;
+};
+
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
+};
+
+struct regulator;
+
+struct phy {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
+};
+
+struct phy_provider {
+	struct device *dev;
+	struct device_node *children;
+	struct module *owner;
+	struct list_head list;
+	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
+};
+
+struct phy_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct phy *phy;
+};
+
+enum pin_config_param {
+	PIN_CONFIG_BIAS_BUS_HOLD = 0,
+	PIN_CONFIG_BIAS_DISABLE = 1,
+	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
+	PIN_CONFIG_BIAS_PULL_DOWN = 3,
+	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
+	PIN_CONFIG_BIAS_PULL_UP = 5,
+	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
+	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
+	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
+	PIN_CONFIG_DRIVE_STRENGTH = 9,
+	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
+	PIN_CONFIG_INPUT_DEBOUNCE = 11,
+	PIN_CONFIG_INPUT_ENABLE = 12,
+	PIN_CONFIG_INPUT_SCHMITT = 13,
+	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
+	PIN_CONFIG_OUTPUT = 17,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
+	PIN_CONFIG_END = 127,
+	PIN_CONFIG_MAX = 255,
+};
+
+struct gpio_chip;
+
+union gpio_irq_fwspec;
+
+struct gpio_irq_chip {
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	const struct irq_domain_ops *domain_ops;
+	struct fwnode_handle *fwnode;
+	struct irq_domain *parent_domain;
+	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
+	int (*populate_parent_alloc_arg)(struct gpio_chip *, union gpio_irq_fwspec *, unsigned int, unsigned int);
+	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
+	struct irq_domain_ops child_irq_domain_ops;
+	irq_flow_handler_t handler;
+	unsigned int default_type;
+	struct lock_class_key *lock_key;
+	struct lock_class_key *request_key;
+	irq_flow_handler_t parent_handler;
+	union {
+		void *parent_handler_data;
+		void **parent_handler_data_array;
+	};
+	unsigned int num_parents;
+	unsigned int *parents;
+	unsigned int *map;
+	bool threaded;
+	bool per_parent_data;
+	bool initialized;
+	int (*init_hw)(struct gpio_chip *);
+	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	long unsigned int *valid_mask;
+	unsigned int first;
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+};
+
+struct gpio_device;
+
+struct gpio_chip {
+	const char *label;
+	struct gpio_device *gpiodev;
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	struct module *owner;
+	int (*request)(struct gpio_chip *, unsigned int);
+	void (*free)(struct gpio_chip *, unsigned int);
+	int (*get_direction)(struct gpio_chip *, unsigned int);
+	int (*direction_input)(struct gpio_chip *, unsigned int);
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	int (*get)(struct gpio_chip *, unsigned int);
+	int (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	void (*set)(struct gpio_chip *, unsigned int, int);
+	void (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);
+	int (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);
+	int (*to_irq)(struct gpio_chip *, unsigned int);
+	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
+	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int base;
+	u16 ngpio;
+	u16 offset;
+	const char * const *names;
+	bool can_sleep;
+	long unsigned int (*read_reg)(void *);
+	void (*write_reg)(void *, long unsigned int);
+	bool be_bits;
+	void *reg_dat;
+	void *reg_set;
+	void *reg_clr;
+	void *reg_dir_out;
+	void *reg_dir_in;
+	bool bgpio_dir_unreadable;
+	int bgpio_bits;
+	raw_spinlock_t bgpio_lock;
+	long unsigned int bgpio_data;
+	long unsigned int bgpio_dir;
+	struct gpio_irq_chip irq;
+	long unsigned int *valid_mask;
+	struct device_node *of_node;
+	unsigned int of_gpio_n_cells;
+	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+	int (*of_gpio_ranges_fallback)(struct gpio_chip *, struct device_node *);
+};
+
+union gpio_irq_fwspec {
+	struct irq_fwspec fwspec;
+	msi_alloc_info_t msiinfo;
+};
+
+struct gpio_desc;
+
+struct gpio_device {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	struct device *mockdev;
+	struct module *owner;
+	struct gpio_chip *chip;
+	struct gpio_desc *descs;
+	int base;
+	u16 ngpio;
+	const char *label;
+	void *data;
+	struct list_head list;
+	struct blocking_notifier_head notifier;
+	struct rw_semaphore sem;
+};
+
+struct gpio_array;
+
+struct gpio_descs {
+	struct gpio_array *info;
+	unsigned int ndescs;
+	struct gpio_desc *desc[0];
+};
+
+struct gpio_array {
+	struct gpio_desc **desc;
+	unsigned int size;
+	struct gpio_chip *chip;
+	long unsigned int *get_mask;
+	long unsigned int *set_mask;
+	long unsigned int invert_mask[0];
+};
+
+struct gpio_desc {
+	struct gpio_device *gdev;
+	long unsigned int flags;
+	const char *label;
+	const char *name;
+	struct device_node *hog;
+	unsigned int debounce_period_us;
+};
+
+enum gpiod_flags {
+	GPIOD_ASIS = 0,
+	GPIOD_IN = 1,
+	GPIOD_OUT_LOW = 3,
+	GPIOD_OUT_HIGH = 7,
+	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
+	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
+};
+
+enum gpio_lookup_flags {
+	GPIO_ACTIVE_HIGH = 0,
+	GPIO_ACTIVE_LOW = 1,
+	GPIO_OPEN_DRAIN = 2,
+	GPIO_OPEN_SOURCE = 4,
+	GPIO_PERSISTENT = 0,
+	GPIO_TRANSITORY = 8,
+	GPIO_PULL_UP = 16,
+	GPIO_PULL_DOWN = 32,
+	GPIO_PULL_DISABLE = 64,
+	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
+};
+
+struct gpiod_lookup {
+	const char *key;
+	u16 chip_hwnum;
+	const char *con_id;
+	unsigned int idx;
+	long unsigned int flags;
+};
+
+struct gpiod_lookup_table {
+	struct list_head list;
+	const char *dev_id;
+	struct gpiod_lookup table[0];
+};
+
+struct gpiod_hog {
+	struct list_head list;
+	const char *chip_label;
+	u16 chip_hwnum;
+	const char *line_name;
+	long unsigned int lflags;
+	int dflags;
+};
+
+enum {
+	GPIOLINE_CHANGED_REQUESTED = 1,
+	GPIOLINE_CHANGED_RELEASED = 2,
+	GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct trace_event_raw_gpio_direction {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int in;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_gpio_value {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int get;
+	int value;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_gpio_direction {};
+
+struct trace_event_data_offsets_gpio_value {};
+
+typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
+
+struct gpio {
+	unsigned int gpio;
+	long unsigned int flags;
+	const char *label;
+};
+
+struct devres;
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct of_reconfig_data {
+	struct device_node *dn;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+enum of_reconfig_change {
+	OF_RECONFIG_NO_CHANGE = 0,
+	OF_RECONFIG_CHANGE_ADD = 1,
+	OF_RECONFIG_CHANGE_REMOVE = 2,
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+	OF_GPIO_PULL_DISABLE = 64,
+};
+
+struct of_mm_gpio_chip {
+	struct gpio_chip gc;
+	void (*save_regs)(struct of_mm_gpio_chip *);
+	void *regs;
+};
+
+typedef struct gpio_desc * (*of_find_gpio_quirk)(struct device_node *, const char *, unsigned int, enum of_gpio_flags *);
+
+struct of_rename_gpio {
+	const char *con_id;
+	const char *legacy_id;
+	const char *compatible;
+};
+
+struct gpiochip_info {
+	char name[32];
+	char label[32];
+	__u32 lines;
+};
+
+enum gpio_v2_line_flag {
+	GPIO_V2_LINE_FLAG_USED = 1,
+	GPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,
+	GPIO_V2_LINE_FLAG_INPUT = 4,
+	GPIO_V2_LINE_FLAG_OUTPUT = 8,
+	GPIO_V2_LINE_FLAG_EDGE_RISING = 16,
+	GPIO_V2_LINE_FLAG_EDGE_FALLING = 32,
+	GPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,
+	GPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
+	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
+};
+
+struct gpio_v2_line_values {
+	__u64 bits;
+	__u64 mask;
+};
+
+enum gpio_v2_line_attr_id {
+	GPIO_V2_LINE_ATTR_ID_FLAGS = 1,
+	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,
+	GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,
+};
+
+struct gpio_v2_line_attribute {
+	__u32 id;
+	__u32 padding;
+	union {
+		__u64 flags;
+		__u64 values;
+		__u32 debounce_period_us;
+	};
+};
+
+struct gpio_v2_line_config_attribute {
+	struct gpio_v2_line_attribute attr;
+	__u64 mask;
+};
+
+struct gpio_v2_line_config {
+	__u64 flags;
+	__u32 num_attrs;
+	__u32 padding[5];
+	struct gpio_v2_line_config_attribute attrs[10];
+};
+
+struct gpio_v2_line_request {
+	__u32 offsets[64];
+	char consumer[32];
+	struct gpio_v2_line_config config;
+	__u32 num_lines;
+	__u32 event_buffer_size;
+	__u32 padding[5];
+	__s32 fd;
+};
+
+struct gpio_v2_line_info {
+	char name[32];
+	char consumer[32];
+	__u32 offset;
+	__u32 num_attrs;
+	__u64 flags;
+	struct gpio_v2_line_attribute attrs[10];
+	__u32 padding[4];
+};
+
+enum gpio_v2_line_changed_type {
+	GPIO_V2_LINE_CHANGED_REQUESTED = 1,
+	GPIO_V2_LINE_CHANGED_RELEASED = 2,
+	GPIO_V2_LINE_CHANGED_CONFIG = 3,
+};
+
+struct gpio_v2_line_info_changed {
+	struct gpio_v2_line_info info;
+	__u64 timestamp_ns;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+enum gpio_v2_line_event_id {
+	GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
+	GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
+};
+
+struct gpio_v2_line_event {
+	__u64 timestamp_ns;
+	__u32 id;
+	__u32 offset;
+	__u32 seqno;
+	__u32 line_seqno;
+	__u32 padding[6];
+};
+
+struct gpioline_info {
+	__u32 line_offset;
+	__u32 flags;
+	char name[32];
+	char consumer[32];
+};
+
+struct gpioline_info_changed {
+	struct gpioline_info info;
+	__u64 timestamp;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+struct gpiohandle_request {
+	__u32 lineoffsets[64];
+	__u32 flags;
+	__u8 default_values[64];
+	char consumer_label[32];
+	__u32 lines;
+	int fd;
+};
+
+struct gpiohandle_config {
+	__u32 flags;
+	__u8 default_values[64];
+	__u32 padding[4];
+};
+
+struct gpiohandle_data {
+	__u8 values[64];
+};
+
+struct gpioevent_request {
+	__u32 lineoffset;
+	__u32 handleflags;
+	__u32 eventflags;
+	char consumer_label[32];
+	int fd;
+};
+
+struct gpioevent_data {
+	__u64 timestamp;
+	__u32 id;
+};
+
+typedef __poll_t (*poll_fn)(struct file *, struct poll_table_struct *);
+
+typedef long int (*ioctl_fn___2)(struct file *, unsigned int, long unsigned int);
+
+typedef ssize_t (*read_fn)(struct file *, char *, size_t, loff_t *);
+
+struct linehandle_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *descs[64];
+	u32 num_descs;
+};
+
+struct linereq;
+
+struct line {
+	struct gpio_desc *desc;
+	struct linereq *req;
+	unsigned int irq;
+	u64 edflags;
+	u64 timestamp_ns;
+	u32 req_seqno;
+	u32 line_seqno;
+	struct delayed_work work;
+	unsigned int sw_debounced;
+	unsigned int level;
+};
+
+struct linereq {
+	struct gpio_device *gdev;
+	const char *label;
+	u32 num_lines;
+	wait_queue_head_t wait;
+	u32 event_buffer_size;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_event *type;
+			const struct gpio_v2_line_event *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_event *ptr;
+			const struct gpio_v2_line_event *ptr_const;
+		};
+		struct gpio_v2_line_event buf[0];
+	} events;
+	atomic_t seqno;
+	struct mutex config_mutex;
+	struct line lines[0];
+};
+
+struct lineevent_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *desc;
+	u32 eflags;
+	int irq;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpioevent_data *type;
+			const struct gpioevent_data *const_type;
+			char (*rectype)[0];
+			struct gpioevent_data *ptr;
+			const struct gpioevent_data *ptr_const;
+		};
+		struct gpioevent_data buf[16];
+	} events;
+	u64 timestamp;
+};
+
+struct gpio_chardev_data {
+	struct gpio_device *gdev;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_info_changed *type;
+			const struct gpio_v2_line_info_changed *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_info_changed *ptr;
+			const struct gpio_v2_line_info_changed *ptr_const;
+		};
+		struct gpio_v2_line_info_changed buf[32];
+	} events;
+	struct notifier_block lineinfo_changed_nb;
+	long unsigned int *watched_lines;
+	atomic_t watch_abi_version;
+};
+
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_COMPRESSED = 2,
+	REGCACHE_FLAT = 3,
+};
+
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
+};
+
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
+};
+
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_downshift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	bool io_port;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
+};
+
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+struct regmap;
+
+struct sifive_gpio {
+	void *base;
+	struct gpio_chip gc;
+	struct regmap *regs;
+	long unsigned int irq_state;
+	unsigned int trigger[32];
+	unsigned int irq_number[32];
+};
+
+enum pwm_polarity {
+	PWM_POLARITY_NORMAL = 0,
+	PWM_POLARITY_INVERSED = 1,
+};
+
+struct pwm_args {
+	u64 period;
+	enum pwm_polarity polarity;
+};
+
+enum {
+	PWMF_REQUESTED = 1,
+	PWMF_EXPORTED = 2,
+};
+
+struct pwm_state {
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	bool usage_power;
+};
+
+struct pwm_chip;
+
+struct pwm_device {
+	const char *label;
+	long unsigned int flags;
+	unsigned int hwpwm;
+	unsigned int pwm;
+	struct pwm_chip *chip;
+	void *chip_data;
+	struct pwm_args args;
+	struct pwm_state state;
+	struct pwm_state last;
+};
+
+struct pwm_ops;
+
+struct pwm_chip {
+	struct device *dev;
+	const struct pwm_ops *ops;
+	int base;
+	unsigned int npwm;
+	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
+	unsigned int of_pwm_n_cells;
+	struct list_head list;
+	struct pwm_device *pwms;
+};
+
+struct pwm_capture {
+	unsigned int period;
+	unsigned int duty_cycle;
+};
+
+struct pwm_ops {
+	int (*request)(struct pwm_chip *, struct pwm_device *);
+	void (*free)(struct pwm_chip *, struct pwm_device *);
+	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
+	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
+	int (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
+	struct module *owner;
+};
+
+struct pwm_export {
+	struct device child;
+	struct pwm_device *pwm;
+	struct mutex lock;
+	struct pwm_state suspend;
+};
+
+struct pwm_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+	unsigned int period;
+	enum pwm_polarity polarity;
+	const char *module;
+};
+
+struct trace_event_raw_pwm {
+	struct trace_entry ent;
+	struct pwm_device *pwm;
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_pwm {};
+
+typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+struct pci_sriov {
+	int pos;
+	int nres;
+	u32 cap;
+	u16 ctrl;
+	u16 total_VFs;
+	u16 initial_VFs;
+	u16 num_VFs;
+	u16 offset;
+	u16 stride;
+	u16 vf_device;
+	u32 pgsz;
+	u8 link;
+	u8 max_VF_buses;
+	u16 driver_max_VFs;
+	struct pci_dev *dev;
+	struct pci_dev *self;
+	u32 class;
+	u8 hdr_type;
+	u16 subsystem_vendor;
+	u16 subsystem_device;
+	resource_size_t barsz[6];
+	bool drivers_autoprobe;
+};
+
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct clk_notifier_data {
+	struct clk *clk;
+	long unsigned int old_rate;
+	long unsigned int new_rate;
+};
+
+struct pwm_sifive_ddata {
+	struct pwm_chip chip;
+	struct mutex lock;
+	struct notifier_block notifier;
+	struct clk *clk;
+	void *regs;
+	unsigned int real_period;
+	unsigned int approx_period;
+	int user_count;
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
+};
+
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+struct hotplug_slot_ops {
+	int (*enable_slot)(struct hotplug_slot *);
+	int (*disable_slot)(struct hotplug_slot *);
+	int (*set_attention_status)(struct hotplug_slot *, u8);
+	int (*hardware_test)(struct hotplug_slot *, u32);
+	int (*get_power_status)(struct hotplug_slot *, u8 *);
+	int (*get_attention_status)(struct hotplug_slot *, u8 *);
+	int (*get_latch_status)(struct hotplug_slot *, u8 *);
+	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
+	int (*reset_slot)(struct hotplug_slot *, bool);
+};
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+struct iopf_device_param;
+
+struct iommu_fault_param;
+
+struct iommu_fwspec;
+
+struct dev_iommu {
+	struct mutex lock;
+	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
+	struct iommu_fwspec *fwspec;
+	struct iommu_device *iommu_dev;
+	void *priv;
+	u32 max_pasids;
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct iommu_fault_unrecoverable {
+	__u32 reason;
+	__u32 flags;
+	__u32 pasid;
+	__u32 perm;
+	__u64 addr;
+	__u64 fetch_addr;
+};
+
+struct iommu_fault_page_request {
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 perm;
+	__u64 addr;
+	__u64 private_data[2];
+};
+
+struct iommu_fault {
+	__u32 type;
+	__u32 padding;
+	union {
+		struct iommu_fault_unrecoverable event;
+		struct iommu_fault_page_request prm;
+		__u8 padding2[56];
+	};
+};
+
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
+struct iommu_page_response {
+	__u32 argsz;
+	__u32 version;
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 code;
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
+
+struct iommu_domain_geometry {
+	dma_addr_t aperture_start;
+	dma_addr_t aperture_end;
+	bool force_aperture;
+};
+
+struct iommu_dma_cookie;
+
+struct iommu_domain {
+	unsigned int type;
+	const struct iommu_domain_ops *ops;
+	long unsigned int pgsize_bitmap;
+	struct iommu_domain_geometry geometry;
+	struct iommu_dma_cookie *iova_cookie;
+	enum iommu_page_response_code (*iopf_handler)(struct iommu_fault *, void *);
+	void *fault_data;
+	union {
+		struct {
+			iommu_fault_handler_t handler;
+			void *handler_token;
+		};
+		struct {
+			struct mm_struct *mm;
+			int users;
+		};
+	};
+};
+
+typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
+
+struct iommu_iotlb_gather;
+
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	void (*detach_dev)(struct iommu_domain *, struct device *);
+	int (*set_dev_pasid)(struct iommu_domain *, struct device *, ioasid_t);
+	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
+	void (*free)(struct iommu_domain *);
+};
+
+struct iommu_iotlb_gather {
+	long unsigned int start;
+	long unsigned int end;
+	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
+};
+
+struct iommu_device {
+	struct list_head list;
+	const struct iommu_ops *ops;
+	struct fwnode_handle *fwnode;
+	struct device *dev;
+	u32 max_pasids;
+};
+
+struct iommu_fault_event {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iommu_fault_param {
+	iommu_dev_fault_handler_t handler;
+	void *data;
+	struct list_head faults;
+	struct mutex lock;
+};
+
+struct iommu_fwspec {
+	const struct iommu_ops *ops;
+	struct fwnode_handle *iommu_fwnode;
+	u32 flags;
+	unsigned int num_ids;
+	u32 ids[0];
+};
+
+struct pcie_device {
+	int irq;
+	struct pci_dev *port;
+	u32 service;
+	void *priv_data;
+	struct device device;
+};
+
+struct pcie_port_service_driver {
+	const char *name;
+	int (*probe)(struct pcie_device *);
+	void (*remove)(struct pcie_device *);
+	int (*suspend)(struct pcie_device *);
+	int (*resume_noirq)(struct pcie_device *);
+	int (*resume)(struct pcie_device *);
+	int (*runtime_suspend)(struct pcie_device *);
+	int (*runtime_resume)(struct pcie_device *);
+	int (*slot_reset)(struct pcie_device *);
+	int port_type;
+	u32 service;
+	struct device_driver driver;
+};
+
+struct pci_dynid {
+	struct list_head node;
+	struct pci_device_id id;
+};
+
+struct drv_dev_and_id {
+	struct pci_driver *drv;
+	struct pci_dev *dev;
+	const struct pci_device_id *id;
+};
+
+struct acpi_device;
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct bus_type *, char *);
+	ssize_t (*store)(struct bus_type *, const char *, size_t);
+};
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
+	struct fwnode_handle *fwnode;
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	long unsigned int flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+	u32 (*in)(void *, long unsigned int, size_t);
+	void (*out)(void *, long unsigned int, u32, size_t);
+	u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);
+	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	long unsigned int flags;
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+enum enable_type {
+	undefined = 4294967295,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	void (*hook)(struct pci_dev *);
+};
+
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
+enum support_mode {
+	ALLOW_LEGACY = 0,
+	DENY_LEGACY = 1,
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+struct portdrv_service_data {
+	struct pcie_port_service_driver *drv;
+	struct device *dev;
+	u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
+};
+
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
+};
+
+struct aer_err_info {
+	struct pci_dev *dev[5];
+	int error_dev_num;
+	unsigned int id: 16;
+	unsigned int severity: 2;
+	unsigned int __pad1: 5;
+	unsigned int multi_error_valid: 1;
+	unsigned int first_error: 5;
+	unsigned int __pad2: 2;
+	unsigned int tlp_header_valid: 1;
+	unsigned int status;
+	unsigned int mask;
+	struct aer_header_log_regs tlp;
+};
+
+struct pcie_link_state {
+	struct pci_dev *pdev;
+	struct pci_dev *downstream;
+	struct pcie_link_state *root;
+	struct pcie_link_state *parent;
+	struct list_head sibling;
+	u32 aspm_support: 7;
+	u32 aspm_enabled: 7;
+	u32 aspm_capable: 7;
+	u32 aspm_default: 7;
+	char: 4;
+	u32 aspm_disable: 7;
+	u32 clkpm_capable: 1;
+	u32 clkpm_enabled: 1;
+	u32 clkpm_default: 1;
+	u32 clkpm_disable: 1;
+};
+
+struct aer_stats {
+	u64 dev_cor_errs[16];
+	u64 dev_fatal_errs[27];
+	u64 dev_nonfatal_errs[27];
+	u64 dev_total_cor_errs;
+	u64 dev_total_fatal_errs;
+	u64 dev_total_nonfatal_errs;
+	u64 rootport_total_cor_errs;
+	u64 rootport_total_fatal_errs;
+	u64 rootport_total_nonfatal_errs;
+};
+
+struct aer_err_source {
+	unsigned int status;
+	unsigned int id;
+};
+
+struct aer_rpc {
+	struct pci_dev *rpd;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct aer_err_source *type;
+			const struct aer_err_source *const_type;
+			char (*rectype)[0];
+			struct aer_err_source *ptr;
+			const struct aer_err_source *ptr_const;
+		};
+		struct aer_err_source buf[128];
+	} aer_fifo;
+};
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
+};
+
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+struct controller {
+	struct pcie_device *pcie;
+	u32 slot_cap;
+	unsigned int inband_presence_disabled: 1;
+	u16 slot_ctrl;
+	struct mutex ctrl_lock;
+	long unsigned int cmd_started;
+	unsigned int cmd_busy: 1;
+	wait_queue_head_t queue;
+	atomic_t pending_events;
+	unsigned int notification_enabled: 1;
+	unsigned int power_fault_detected;
+	struct task_struct *poll_thread;
+	u8 state;
+	struct mutex state_lock;
+	struct delayed_work button_work;
+	struct hotplug_slot hotplug_slot;
+	struct rw_semaphore reset_lock;
+	unsigned int depth;
+	unsigned int ist_running;
+	int request_result;
+	wait_queue_head_t requester;
+};
+
+enum {
+	NVME_REG_CAP = 0,
+	NVME_REG_VS = 8,
+	NVME_REG_INTMS = 12,
+	NVME_REG_INTMC = 16,
+	NVME_REG_CC = 20,
+	NVME_REG_CSTS = 28,
+	NVME_REG_NSSR = 32,
+	NVME_REG_AQA = 36,
+	NVME_REG_ASQ = 40,
+	NVME_REG_ACQ = 48,
+	NVME_REG_CMBLOC = 56,
+	NVME_REG_CMBSZ = 60,
+	NVME_REG_BPINFO = 64,
+	NVME_REG_BPRSEL = 68,
+	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
+	NVME_REG_PMRCAP = 3584,
+	NVME_REG_PMRCTL = 3588,
+	NVME_REG_PMRSTS = 3592,
+	NVME_REG_PMREBS = 3596,
+	NVME_REG_PMRSWTP = 3600,
+	NVME_REG_DBS = 4096,
+};
+
+enum {
+	NVME_CC_ENABLE = 1,
+	NVME_CC_EN_SHIFT = 0,
+	NVME_CC_CSS_SHIFT = 4,
+	NVME_CC_MPS_SHIFT = 7,
+	NVME_CC_AMS_SHIFT = 11,
+	NVME_CC_SHN_SHIFT = 14,
+	NVME_CC_IOSQES_SHIFT = 16,
+	NVME_CC_IOCQES_SHIFT = 20,
+	NVME_CC_CSS_NVM = 0,
+	NVME_CC_CSS_CSI = 96,
+	NVME_CC_CSS_MASK = 112,
+	NVME_CC_AMS_RR = 0,
+	NVME_CC_AMS_WRRU = 2048,
+	NVME_CC_AMS_VS = 14336,
+	NVME_CC_SHN_NONE = 0,
+	NVME_CC_SHN_NORMAL = 16384,
+	NVME_CC_SHN_ABRUPT = 32768,
+	NVME_CC_SHN_MASK = 49152,
+	NVME_CC_IOSQES = 393216,
+	NVME_CC_IOCQES = 4194304,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
+	NVME_CSTS_RDY = 1,
+	NVME_CSTS_CFS = 2,
+	NVME_CSTS_NSSRO = 16,
+	NVME_CSTS_PP = 32,
+	NVME_CSTS_SHST_NORMAL = 0,
+	NVME_CSTS_SHST_OCCUR = 4,
+	NVME_CSTS_SHST_CMPLT = 8,
+	NVME_CSTS_SHST_MASK = 12,
+};
+
+enum {
+	NVME_AEN_BIT_NS_ATTR = 8,
+	NVME_AEN_BIT_FW_ACT = 9,
+	NVME_AEN_BIT_ANA_CHANGE = 11,
+	NVME_AEN_BIT_DISC_CHANGE = 31,
+};
+
+enum {
+	SWITCHTEC_GAS_MRPC_OFFSET = 0,
+	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
+	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
+	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
+	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
+	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
+	SWITCHTEC_GAS_NTB_OFFSET = 65536,
+	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
+};
+
+enum {
+	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
+	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
+	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
+};
+
+struct nt_partition_info {
+	u32 xlink_enabled;
+	u32 target_part_low;
+	u32 target_part_high;
+	u32 reserved;
+};
+
+struct ntb_info_regs {
+	u8 partition_count;
+	u8 partition_id;
+	u16 reserved1;
+	u64 ep_map;
+	u16 requester_id;
+	u16 reserved2;
+	u32 reserved3[4];
+	struct nt_partition_info ntp_info[48];
+} __attribute__((packed));
+
+struct ntb_ctrl_regs {
+	u32 partition_status;
+	u32 partition_op;
+	u32 partition_ctrl;
+	u32 bar_setup;
+	u32 bar_error;
+	u16 lut_table_entries;
+	u16 lut_table_offset;
+	u32 lut_error;
+	u16 req_id_table_size;
+	u16 req_id_table_offset;
+	u32 req_id_error;
+	u32 reserved1[7];
+	struct {
+		u32 ctl;
+		u32 win_size;
+		u64 xlate_addr;
+	} bar_entry[6];
+	struct {
+		u32 win_size;
+		u32 reserved[3];
+	} bar_ext_entry[6];
+	u32 reserved2[192];
+	u32 req_id_table[512];
+	u32 reserved3[256];
+	u64 lut_entry[512];
+};
+
+struct pci_dev_reset_methods {
+	u16 vendor;
+	u16 device;
+	int (*reset)(struct pci_dev *, bool);
+};
+
+struct pci_dev_acs_enabled {
+	u16 vendor;
+	u16 device;
+	int (*acs_enabled)(struct pci_dev *, u16);
+};
+
+struct pci_dev_acs_ops {
+	u16 vendor;
+	u16 device;
+	int (*enable_acs)(struct pci_dev *);
+	int (*disable_acs_redir)(struct pci_dev *);
+};
+
+struct controller___2;
+
+struct hpc_ops;
+
+struct slot {
+	u8 bus;
+	u8 device;
+	u16 status;
+	u32 number;
+	u8 is_a_board;
+	u8 state;
+	u8 attention_save;
+	u8 presence_save;
+	u8 latch_save;
+	u8 pwr_save;
+	struct controller___2 *ctrl;
+	const struct hpc_ops *hpc_ops;
+	struct hotplug_slot hotplug_slot;
+	struct list_head slot_list;
+	struct delayed_work work;
+	struct mutex lock;
+	struct workqueue_struct *wq;
+	u8 hp_slot;
+};
+
+struct controller___2 {
+	struct mutex crit_sect;
+	struct mutex cmd_lock;
+	int num_slots;
+	int slot_num_inc;
+	struct pci_dev *pci_dev;
+	struct list_head slot_list;
+	const struct hpc_ops *hpc_ops;
+	wait_queue_head_t queue;
+	u8 slot_device_offset;
+	u32 pcix_misc2_reg;
+	u32 first_slot;
+	u32 cap_offset;
+	long unsigned int mmio_base;
+	long unsigned int mmio_size;
+	void *creg;
+	struct timer_list poll_timer;
+};
+
+struct hpc_ops {
+	int (*power_on_slot)(struct slot *);
+	int (*slot_enable)(struct slot *);
+	int (*slot_disable)(struct slot *);
+	int (*set_bus_speed_mode)(struct slot *, enum pci_bus_speed);
+	int (*get_power_status)(struct slot *, u8 *);
+	int (*get_attention_status)(struct slot *, u8 *);
+	int (*set_attention_status)(struct slot *, u8);
+	int (*get_latch_status)(struct slot *, u8 *);
+	int (*get_adapter_status)(struct slot *, u8 *);
+	int (*get_adapter_speed)(struct slot *, enum pci_bus_speed *);
+	int (*get_prog_int)(struct slot *, u8 *);
+	int (*query_power_fault)(struct slot *);
+	void (*green_led_on)(struct slot *);
+	void (*green_led_off)(struct slot *);
+	void (*green_led_blink)(struct slot *);
+	void (*release_ctlr)(struct controller___2 *);
+	int (*check_cmd_status)(struct controller___2 *);
+};
+
+struct event_info {
+	u32 event_type;
+	struct slot *p_slot;
+	struct work_struct work;
+};
+
+struct pushbutton_work_info {
+	struct slot *p_slot;
+	struct work_struct work;
+};
+
+enum ctrl_offsets {
+	BASE_OFFSET = 0,
+	SLOT_AVAIL1 = 4,
+	SLOT_AVAIL2 = 8,
+	SLOT_CONFIG = 12,
+	SEC_BUS_CONFIG = 16,
+	MSI_CTRL = 18,
+	PROG_INTERFACE = 19,
+	CMD = 20,
+	CMD_STATUS = 22,
+	INTR_LOC = 24,
+	SERR_LOC = 28,
+	SERR_INTR_ENABLE = 32,
+	SLOT1 = 36,
+};
+
+struct pci_config_window;
+
+struct pci_ecam_ops {
+	unsigned int bus_shift;
+	struct pci_ops pci_ops;
+	int (*init)(struct pci_config_window *);
+};
+
+struct pci_config_window {
+	struct resource res;
+	struct resource busr;
+	unsigned int bus_shift;
+	void *priv;
+	const struct pci_ecam_ops *ops;
+	union {
+		void *win;
+		void **winp;
+	};
+	struct device *parent;
+};
+
+enum pci_interrupt_pin {
+	PCI_INTERRUPT_UNKNOWN = 0,
+	PCI_INTERRUPT_INTA = 1,
+	PCI_INTERRUPT_INTB = 2,
+	PCI_INTERRUPT_INTC = 3,
+	PCI_INTERRUPT_INTD = 4,
+};
+
+struct xilinx_pcie {
+	struct device *dev;
+	void *reg_base;
+	long unsigned int msi_map[2];
+	struct mutex map_lock;
+	struct irq_domain *msi_domain;
+	struct irq_domain *leg_domain;
+	struct list_head resources;
+};
+
+enum con_scroll {
+	SM_UP = 0,
+	SM_DOWN = 1,
+};
+
+enum vc_intensity {
+	VCI_HALF_BRIGHT = 0,
+	VCI_NORMAL = 1,
+	VCI_BOLD = 2,
+	VCI_MASK = 3,
+};
+
+struct vc_data;
+
+struct console_font;
+
+struct consw {
+	struct module *owner;
+	const char * (*con_startup)();
+	void (*con_init)(struct vc_data *, int);
+	void (*con_deinit)(struct vc_data *);
+	void (*con_clear)(struct vc_data *, int, int, int, int);
+	void (*con_putc)(struct vc_data *, int, int, int);
+	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
+	void (*con_cursor)(struct vc_data *, int);
+	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+	int (*con_switch)(struct vc_data *);
+	int (*con_blank)(struct vc_data *, int, int);
+	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
+	int (*con_font_get)(struct vc_data *, struct console_font *);
+	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
+	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+	void (*con_set_palette)(struct vc_data *, const unsigned char *);
+	void (*con_scrolldelta)(struct vc_data *, int);
+	int (*con_set_origin)(struct vc_data *);
+	void (*con_save_screen)(struct vc_data *);
+	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+	void (*con_invert_region)(struct vc_data *, u16 *, int);
+	u16 * (*con_screen_pos)(const struct vc_data *, int);
+	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
+	void (*con_flush_scrollback)(struct vc_data *);
+	int (*con_debug_enter)(struct vc_data *);
+	int (*con_debug_leave)(struct vc_data *);
+};
+
+struct vc_state {
+	unsigned int x;
+	unsigned int y;
+	unsigned char color;
+	unsigned char Gx_charset[2];
+	unsigned int charset: 1;
+	enum vc_intensity intensity;
+	bool italic;
+	bool underline;
+	bool blink;
+	bool reverse;
+};
+
+struct console_font {
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_mode {
+	char mode;
+	char waitv;
+	short int relsig;
+	short int acqsig;
+	short int frsig;
+};
+
+struct uni_pagedict;
+
+struct uni_screen;
+
+struct vc_data {
+	struct tty_port port;
+	struct vc_state state;
+	struct vc_state saved_state;
+	short unsigned int vc_num;
+	unsigned int vc_cols;
+	unsigned int vc_rows;
+	unsigned int vc_size_row;
+	unsigned int vc_scan_lines;
+	unsigned int vc_cell_height;
+	long unsigned int vc_origin;
+	long unsigned int vc_scr_end;
+	long unsigned int vc_visible_origin;
+	unsigned int vc_top;
+	unsigned int vc_bottom;
+	const struct consw *vc_sw;
+	short unsigned int *vc_screenbuf;
+	unsigned int vc_screenbuf_size;
+	unsigned char vc_mode;
+	unsigned char vc_attr;
+	unsigned char vc_def_color;
+	unsigned char vc_ulcolor;
+	unsigned char vc_itcolor;
+	unsigned char vc_halfcolor;
+	unsigned int vc_cursor_type;
+	short unsigned int vc_complement_mask;
+	short unsigned int vc_s_complement_mask;
+	long unsigned int vc_pos;
+	short unsigned int vc_hi_font_mask;
+	struct console_font vc_font;
+	short unsigned int vc_video_erase_char;
+	unsigned int vc_state;
+	unsigned int vc_npar;
+	unsigned int vc_par[16];
+	struct vt_mode vt_mode;
+	struct pid *vt_pid;
+	int vt_newvt;
+	wait_queue_head_t paste_wait;
+	unsigned int vc_disp_ctrl: 1;
+	unsigned int vc_toggle_meta: 1;
+	unsigned int vc_decscnm: 1;
+	unsigned int vc_decom: 1;
+	unsigned int vc_decawm: 1;
+	unsigned int vc_deccm: 1;
+	unsigned int vc_decim: 1;
+	unsigned int vc_priv: 3;
+	unsigned int vc_need_wrap: 1;
+	unsigned int vc_can_do_color: 1;
+	unsigned int vc_report_mouse: 2;
+	unsigned char vc_utf: 1;
+	unsigned char vc_utf_count;
+	int vc_utf_char;
+	long unsigned int vc_tab_stop[4];
+	unsigned char vc_palette[48];
+	short unsigned int *vc_translate;
+	unsigned int vc_resize_user;
+	unsigned int vc_bell_pitch;
+	unsigned int vc_bell_duration;
+	short unsigned int vc_cur_blink_ms;
+	struct vc_data **vc_display_fg;
+	struct uni_pagedict *uni_pagedict;
+	struct uni_pagedict **uni_pagedict_loc;
+	struct uni_screen *vc_uni_screen;
+};
+
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+struct reset_control;
+
+struct reset_control_bulk_data {
+	const char *id;
+	struct reset_control *rstc;
+};
+
+enum pci_barno {
+	NO_BAR = 4294967295,
+	BAR_0 = 0,
+	BAR_1 = 1,
+	BAR_2 = 2,
+	BAR_3 = 3,
+	BAR_4 = 4,
+	BAR_5 = 5,
+};
+
+struct pci_epf_header {
+	u16 vendorid;
+	u16 deviceid;
+	u8 revid;
+	u8 progif_code;
+	u8 subclass_code;
+	u8 baseclass_code;
+	u8 cache_line_size;
+	u16 subsys_vendor_id;
+	u16 subsys_id;
+	enum pci_interrupt_pin interrupt_pin;
+};
+
+struct pci_epf_bar {
+	dma_addr_t phys_addr;
+	void *addr;
+	size_t size;
+	enum pci_barno barno;
+	int flags;
+};
+
+struct pci_epc_ops;
+
+struct pci_epc_mem;
+
+struct pci_epc {
+	struct device dev;
+	struct list_head pci_epf;
+	const struct pci_epc_ops *ops;
+	struct pci_epc_mem **windows;
+	struct pci_epc_mem *mem;
+	unsigned int num_windows;
+	u8 max_functions;
+	u8 *max_vfs;
+	struct config_group *group;
+	struct mutex lock;
+	long unsigned int function_num_map;
+	struct atomic_notifier_head notifier;
+};
+
+enum pci_epc_irq_type {
+	PCI_EPC_IRQ_UNKNOWN = 0,
+	PCI_EPC_IRQ_LEGACY = 1,
+	PCI_EPC_IRQ_MSI = 2,
+	PCI_EPC_IRQ_MSIX = 3,
+};
+
+struct pci_epc_features;
+
+struct pci_epc_ops {
+	int (*write_header)(struct pci_epc *, u8, u8, struct pci_epf_header *);
+	int (*set_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	void (*clear_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	int (*map_addr)(struct pci_epc *, u8, u8, phys_addr_t, u64, size_t);
+	void (*unmap_addr)(struct pci_epc *, u8, u8, phys_addr_t);
+	int (*set_msi)(struct pci_epc *, u8, u8, u8);
+	int (*get_msi)(struct pci_epc *, u8, u8);
+	int (*set_msix)(struct pci_epc *, u8, u8, u16, enum pci_barno, u32);
+	int (*get_msix)(struct pci_epc *, u8, u8);
+	int (*raise_irq)(struct pci_epc *, u8, u8, enum pci_epc_irq_type, u16);
+	int (*map_msi_irq)(struct pci_epc *, u8, u8, phys_addr_t, u8, u32, u32 *, u32 *);
+	int (*start)(struct pci_epc *);
+	void (*stop)(struct pci_epc *);
+	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8, u8);
+	struct module *owner;
+};
+
+struct pci_epc_features {
+	unsigned int linkup_notifier: 1;
+	unsigned int core_init_notifier: 1;
+	unsigned int msi_capable: 1;
+	unsigned int msix_capable: 1;
+	u8 reserved_bar;
+	u8 bar_fixed_64bit;
+	u64 bar_fixed_size[6];
+	size_t align;
+};
+
+struct pci_epc_mem_window {
+	phys_addr_t phys_base;
+	size_t size;
+	size_t page_size;
+};
+
+struct pci_epc_mem {
+	struct pci_epc_mem_window window;
+	long unsigned int *bitmap;
+	int pages;
+	struct mutex lock;
+};
+
+enum dw_pcie_app_clk {
+	DW_PCIE_DBI_CLK = 0,
+	DW_PCIE_MSTR_CLK = 1,
+	DW_PCIE_SLV_CLK = 2,
+	DW_PCIE_NUM_APP_CLKS = 3,
+};
+
+enum dw_pcie_core_clk {
+	DW_PCIE_PIPE_CLK = 0,
+	DW_PCIE_CORE_CLK = 1,
+	DW_PCIE_AUX_CLK = 2,
+	DW_PCIE_REF_CLK = 3,
+	DW_PCIE_NUM_CORE_CLKS = 4,
+};
+
+enum dw_pcie_app_rst {
+	DW_PCIE_DBI_RST = 0,
+	DW_PCIE_MSTR_RST = 1,
+	DW_PCIE_SLV_RST = 2,
+	DW_PCIE_NUM_APP_RSTS = 3,
+};
+
+enum dw_pcie_core_rst {
+	DW_PCIE_NON_STICKY_RST = 0,
+	DW_PCIE_STICKY_RST = 1,
+	DW_PCIE_CORE_RST = 2,
+	DW_PCIE_PIPE_RST = 3,
+	DW_PCIE_PHY_RST = 4,
+	DW_PCIE_HOT_RST = 5,
+	DW_PCIE_PWR_RST = 6,
+	DW_PCIE_NUM_CORE_RSTS = 7,
+};
+
+struct dw_pcie_rp;
+
+struct dw_pcie_host_ops {
+	int (*host_init)(struct dw_pcie_rp *);
+	void (*host_deinit)(struct dw_pcie_rp *);
+	int (*msi_host_init)(struct dw_pcie_rp *);
+};
+
+struct dw_pcie_rp {
+	bool has_msi_ctrl: 1;
+	bool cfg0_io_shared: 1;
+	u64 cfg0_base;
+	void *va_cfg0_base;
+	u32 cfg0_size;
+	resource_size_t io_base;
+	phys_addr_t io_bus_addr;
+	u32 io_size;
+	int irq;
+	const struct dw_pcie_host_ops *ops;
+	int msi_irq[8];
+	struct irq_domain *irq_domain;
+	struct irq_domain *msi_domain;
+	dma_addr_t msi_data;
+	struct irq_chip *msi_irq_chip;
+	u32 num_vectors;
+	u32 irq_mask[8];
+	struct pci_host_bridge *bridge;
+	raw_spinlock_t lock;
+	long unsigned int msi_irq_in_use[4];
+};
+
+struct dw_pcie_ep;
+
+struct dw_pcie_ep_ops {
+	void (*ep_init)(struct dw_pcie_ep *);
+	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
+	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
+	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
+};
+
+struct dw_pcie_ep {
+	struct pci_epc *epc;
+	struct list_head func_list;
+	const struct dw_pcie_ep_ops *ops;
+	phys_addr_t phys_base;
+	size_t addr_size;
+	size_t page_size;
+	u8 bar_to_atu[6];
+	phys_addr_t *outbound_addr;
+	long unsigned int *ib_window_map;
+	long unsigned int *ob_window_map;
+	void *msi_mem;
+	phys_addr_t msi_mem_phys;
+	struct pci_epf_bar *epf_bar[6];
+};
+
+struct dw_pcie;
+
+struct dw_pcie_ops {
+	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
+	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
+	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
+	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
+	int (*link_up)(struct dw_pcie *);
+	int (*start_link)(struct dw_pcie *);
+	void (*stop_link)(struct dw_pcie *);
+};
+
+struct dw_pcie {
+	struct device *dev;
+	void *dbi_base;
+	void *dbi_base2;
+	void *atu_base;
+	size_t atu_size;
+	u32 num_ib_windows;
+	u32 num_ob_windows;
+	u32 region_align;
+	u64 region_limit;
+	struct dw_pcie_rp pp;
+	struct dw_pcie_ep ep;
+	const struct dw_pcie_ops *ops;
+	u32 version;
+	u32 type;
+	long unsigned int caps;
+	int num_lanes;
+	int link_gen;
+	u8 n_fts[2];
+	struct clk_bulk_data app_clks[3];
+	struct clk_bulk_data core_clks[4];
+	struct reset_control_bulk_data app_rsts[3];
+	struct reset_control_bulk_data core_rsts[7];
+	struct gpio_desc *pe_rst;
+};
+
+struct aperture_range {
+	struct device *dev;
+	resource_size_t base;
+	resource_size_t size;
+	struct list_head lh;
+	void (*detach)(struct device *);
+};
+
+struct fu740_pcie {
+	struct dw_pcie pci;
+	void *mgmt_base;
+	struct gpio_desc *reset;
+	struct gpio_desc *pwren;
+	struct clk *pcie_aux;
+	struct reset_control *rst;
+};
+
+struct dp_sdp_header {
+	u8 HB0;
+	u8 HB1;
+	u8 HB2;
+	u8 HB3;
+};
+
+struct dp_sdp {
+	struct dp_sdp_header sdp_header;
+	u8 db[32];
+};
+
+enum hdmi_infoframe_type {
+	HDMI_INFOFRAME_TYPE_VENDOR = 129,
+	HDMI_INFOFRAME_TYPE_AVI = 130,
+	HDMI_INFOFRAME_TYPE_SPD = 131,
+	HDMI_INFOFRAME_TYPE_AUDIO = 132,
+	HDMI_INFOFRAME_TYPE_DRM = 135,
+};
+
+struct hdmi_any_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+};
+
+enum hdmi_colorspace {
+	HDMI_COLORSPACE_RGB = 0,
+	HDMI_COLORSPACE_YUV422 = 1,
+	HDMI_COLORSPACE_YUV444 = 2,
+	HDMI_COLORSPACE_YUV420 = 3,
+	HDMI_COLORSPACE_RESERVED4 = 4,
+	HDMI_COLORSPACE_RESERVED5 = 5,
+	HDMI_COLORSPACE_RESERVED6 = 6,
+	HDMI_COLORSPACE_IDO_DEFINED = 7,
+};
+
+enum hdmi_scan_mode {
+	HDMI_SCAN_MODE_NONE = 0,
+	HDMI_SCAN_MODE_OVERSCAN = 1,
+	HDMI_SCAN_MODE_UNDERSCAN = 2,
+	HDMI_SCAN_MODE_RESERVED = 3,
+};
+
+enum hdmi_colorimetry {
+	HDMI_COLORIMETRY_NONE = 0,
+	HDMI_COLORIMETRY_ITU_601 = 1,
+	HDMI_COLORIMETRY_ITU_709 = 2,
+	HDMI_COLORIMETRY_EXTENDED = 3,
+};
+
+enum hdmi_picture_aspect {
+	HDMI_PICTURE_ASPECT_NONE = 0,
+	HDMI_PICTURE_ASPECT_4_3 = 1,
+	HDMI_PICTURE_ASPECT_16_9 = 2,
+	HDMI_PICTURE_ASPECT_64_27 = 3,
+	HDMI_PICTURE_ASPECT_256_135 = 4,
+	HDMI_PICTURE_ASPECT_RESERVED = 5,
+};
+
+enum hdmi_active_aspect {
+	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
+	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
+	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
+	HDMI_ACTIVE_ASPECT_PICTURE = 8,
+	HDMI_ACTIVE_ASPECT_4_3 = 9,
+	HDMI_ACTIVE_ASPECT_16_9 = 10,
+	HDMI_ACTIVE_ASPECT_14_9 = 11,
+	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
+	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
+	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
+};
+
+enum hdmi_extended_colorimetry {
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
+	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
+	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
+	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
+	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
+	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
+	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
+};
+
+enum hdmi_quantization_range {
+	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
+	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
+	HDMI_QUANTIZATION_RANGE_FULL = 2,
+	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
+};
+
+enum hdmi_nups {
+	HDMI_NUPS_UNKNOWN = 0,
+	HDMI_NUPS_HORIZONTAL = 1,
+	HDMI_NUPS_VERTICAL = 2,
+	HDMI_NUPS_BOTH = 3,
+};
+
+enum hdmi_ycc_quantization_range {
+	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
+	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
+};
+
+enum hdmi_content_type {
+	HDMI_CONTENT_TYPE_GRAPHICS = 0,
+	HDMI_CONTENT_TYPE_PHOTO = 1,
+	HDMI_CONTENT_TYPE_CINEMA = 2,
+	HDMI_CONTENT_TYPE_GAME = 3,
+};
+
+enum hdmi_metadata_type {
+	HDMI_STATIC_METADATA_TYPE1 = 0,
+};
+
+enum hdmi_eotf {
+	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
+	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
+	HDMI_EOTF_SMPTE_ST2084 = 2,
+	HDMI_EOTF_BT_2100_HLG = 3,
+};
+
+struct hdmi_avi_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_colorspace colorspace;
+	enum hdmi_scan_mode scan_mode;
+	enum hdmi_colorimetry colorimetry;
+	enum hdmi_picture_aspect picture_aspect;
+	enum hdmi_active_aspect active_aspect;
+	bool itc;
+	enum hdmi_extended_colorimetry extended_colorimetry;
+	enum hdmi_quantization_range quantization_range;
+	enum hdmi_nups nups;
+	unsigned char video_code;
+	enum hdmi_ycc_quantization_range ycc_quantization_range;
+	enum hdmi_content_type content_type;
+	unsigned char pixel_repeat;
+	short unsigned int top_bar;
+	short unsigned int bottom_bar;
+	short unsigned int left_bar;
+	short unsigned int right_bar;
+};
+
+struct hdmi_drm_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_eotf eotf;
+	enum hdmi_metadata_type metadata_type;
+	struct {
+		u16 x;
+		u16 y;
+	} display_primaries[3];
+	struct {
+		u16 x;
+		u16 y;
+	} white_point;
+	u16 max_display_mastering_luminance;
+	u16 min_display_mastering_luminance;
+	u16 max_cll;
+	u16 max_fall;
+};
+
+enum hdmi_spd_sdi {
+	HDMI_SPD_SDI_UNKNOWN = 0,
+	HDMI_SPD_SDI_DSTB = 1,
+	HDMI_SPD_SDI_DVDP = 2,
+	HDMI_SPD_SDI_DVHS = 3,
+	HDMI_SPD_SDI_HDDVR = 4,
+	HDMI_SPD_SDI_DVC = 5,
+	HDMI_SPD_SDI_DSC = 6,
+	HDMI_SPD_SDI_VCD = 7,
+	HDMI_SPD_SDI_GAME = 8,
+	HDMI_SPD_SDI_PC = 9,
+	HDMI_SPD_SDI_BD = 10,
+	HDMI_SPD_SDI_SACD = 11,
+	HDMI_SPD_SDI_HDDVD = 12,
+	HDMI_SPD_SDI_PMP = 13,
+};
+
+struct hdmi_spd_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	char vendor[8];
+	char product[16];
+	enum hdmi_spd_sdi sdi;
+};
+
+enum hdmi_audio_coding_type {
+	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
+	HDMI_AUDIO_CODING_TYPE_PCM = 1,
+	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
+	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
+	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
+	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
+	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_DTS = 7,
+	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
+	HDMI_AUDIO_CODING_TYPE_DSD = 9,
+	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
+	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
+	HDMI_AUDIO_CODING_TYPE_MLP = 12,
+	HDMI_AUDIO_CODING_TYPE_DST = 13,
+	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
+	HDMI_AUDIO_CODING_TYPE_CXT = 15,
+};
+
+enum hdmi_audio_sample_size {
+	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
+	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
+	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
+};
+
+enum hdmi_audio_sample_frequency {
+	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
+};
+
+enum hdmi_audio_coding_type_ext {
+	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
+};
+
+struct hdmi_audio_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned char channels;
+	enum hdmi_audio_coding_type coding_type;
+	enum hdmi_audio_sample_size sample_size;
+	enum hdmi_audio_sample_frequency sample_frequency;
+	enum hdmi_audio_coding_type_ext coding_type_ext;
+	unsigned char channel_allocation;
+	unsigned char level_shift_value;
+	bool downmix_inhibit;
+};
+
+enum hdmi_3d_structure {
+	HDMI_3D_STRUCTURE_INVALID = 4294967295,
+	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
+	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
+	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
+	HDMI_3D_STRUCTURE_L_DEPTH = 4,
+	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
+	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
+};
+
+struct hdmi_vendor_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned int oui;
+	u8 vic;
+	enum hdmi_3d_structure s3d_struct;
+	unsigned int s3d_ext_data;
+};
+
+union hdmi_vendor_any_infoframe {
+	struct {
+		enum hdmi_infoframe_type type;
+		unsigned char version;
+		unsigned char length;
+		unsigned int oui;
+	} any;
+	struct hdmi_vendor_infoframe hdmi;
+};
+
+union hdmi_infoframe {
+	struct hdmi_any_infoframe any;
+	struct hdmi_avi_infoframe avi;
+	struct hdmi_spd_infoframe spd;
+	union hdmi_vendor_any_infoframe vendor;
+	struct hdmi_audio_infoframe audio;
+	struct hdmi_drm_infoframe drm;
+};
+
+struct linux_logo {
+	int type;
+	unsigned int width;
+	unsigned int height;
+	unsigned int clutsize;
+	const unsigned char *clut;
+	const unsigned char *data;
+};
+
+enum switchtec_gen {
+	SWITCHTEC_GEN3 = 0,
+	SWITCHTEC_GEN4 = 1,
+};
+
+struct mrpc_regs {
+	u8 input_data[1024];
+	u8 output_data[1024];
+	u32 cmd;
+	u32 status;
+	u32 ret_value;
+	u32 dma_en;
+	u64 dma_addr;
+	u32 dma_vector;
+	u32 dma_ver;
+};
+
+enum mrpc_status {
+	SWITCHTEC_MRPC_STATUS_INPROGRESS = 1,
+	SWITCHTEC_MRPC_STATUS_DONE = 2,
+	SWITCHTEC_MRPC_STATUS_ERROR = 255,
+	SWITCHTEC_MRPC_STATUS_INTERRUPTED = 256,
+};
+
+struct sw_event_regs {
+	u64 event_report_ctrl;
+	u64 reserved1;
+	u64 part_event_bitmap;
+	u64 reserved2;
+	u32 global_summary;
+	u32 reserved3[3];
+	u32 stack_error_event_hdr;
+	u32 stack_error_event_data;
+	u32 reserved4[4];
+	u32 ppu_error_event_hdr;
+	u32 ppu_error_event_data;
+	u32 reserved5[4];
+	u32 isp_error_event_hdr;
+	u32 isp_error_event_data;
+	u32 reserved6[4];
+	u32 sys_reset_event_hdr;
+	u32 reserved7[5];
+	u32 fw_exception_hdr;
+	u32 reserved8[5];
+	u32 fw_nmi_hdr;
+	u32 reserved9[5];
+	u32 fw_non_fatal_hdr;
+	u32 reserved10[5];
+	u32 fw_fatal_hdr;
+	u32 reserved11[5];
+	u32 twi_mrpc_comp_hdr;
+	u32 twi_mrpc_comp_data;
+	u32 reserved12[4];
+	u32 twi_mrpc_comp_async_hdr;
+	u32 twi_mrpc_comp_async_data;
+	u32 reserved13[4];
+	u32 cli_mrpc_comp_hdr;
+	u32 cli_mrpc_comp_data;
+	u32 reserved14[4];
+	u32 cli_mrpc_comp_async_hdr;
+	u32 cli_mrpc_comp_async_data;
+	u32 reserved15[4];
+	u32 gpio_interrupt_hdr;
+	u32 gpio_interrupt_data;
+	u32 reserved16[4];
+	u32 gfms_event_hdr;
+	u32 gfms_event_data;
+	u32 reserved17[4];
+};
+
+enum {
+	SWITCHTEC_GEN3_CFG0_RUNNING = 4,
+	SWITCHTEC_GEN3_CFG1_RUNNING = 5,
+	SWITCHTEC_GEN3_IMG0_RUNNING = 3,
+	SWITCHTEC_GEN3_IMG1_RUNNING = 7,
+};
+
+enum {
+	SWITCHTEC_GEN4_MAP0_RUNNING = 0,
+	SWITCHTEC_GEN4_MAP1_RUNNING = 1,
+	SWITCHTEC_GEN4_KEY0_RUNNING = 2,
+	SWITCHTEC_GEN4_KEY1_RUNNING = 3,
+	SWITCHTEC_GEN4_BL2_0_RUNNING = 4,
+	SWITCHTEC_GEN4_BL2_1_RUNNING = 5,
+	SWITCHTEC_GEN4_CFG0_RUNNING = 6,
+	SWITCHTEC_GEN4_CFG1_RUNNING = 7,
+	SWITCHTEC_GEN4_IMG0_RUNNING = 8,
+	SWITCHTEC_GEN4_IMG1_RUNNING = 9,
+};
+
+enum {
+	SWITCHTEC_GEN4_KEY0_ACTIVE = 0,
+	SWITCHTEC_GEN4_KEY1_ACTIVE = 1,
+	SWITCHTEC_GEN4_BL2_0_ACTIVE = 0,
+	SWITCHTEC_GEN4_BL2_1_ACTIVE = 1,
+	SWITCHTEC_GEN4_CFG0_ACTIVE = 0,
+	SWITCHTEC_GEN4_CFG1_ACTIVE = 1,
+	SWITCHTEC_GEN4_IMG0_ACTIVE = 0,
+	SWITCHTEC_GEN4_IMG1_ACTIVE = 1,
+};
+
+struct sys_info_regs_gen3 {
+	u32 reserved1;
+	u32 vendor_table_revision;
+	u32 table_format_version;
+	u32 partition_id;
+	u32 cfg_file_fmt_version;
+	u16 cfg_running;
+	u16 img_running;
+	u32 reserved2[57];
+	char vendor_id[8];
+	char product_id[16];
+	char product_revision[4];
+	char component_vendor[8];
+	u16 component_id;
+	u8 component_revision;
+} __attribute__((packed));
+
+struct sys_info_regs_gen4 {
+	u16 gas_layout_ver;
+	u8 evlist_ver;
+	u8 reserved1;
+	u16 mgmt_cmd_set_ver;
+	u16 fabric_cmd_set_ver;
+	u32 reserved2[2];
+	u8 mrpc_uart_ver;
+	u8 mrpc_twi_ver;
+	u8 mrpc_eth_ver;
+	u8 mrpc_inband_ver;
+	u32 reserved3[7];
+	u32 fw_update_tmo;
+	u32 xml_version_cfg;
+	u32 xml_version_img;
+	u32 partition_id;
+	u16 bl2_running;
+	u16 cfg_running;
+	u16 img_running;
+	u16 key_running;
+	u32 reserved4[43];
+	u32 vendor_seeprom_twi;
+	u32 vendor_table_revision;
+	u32 vendor_specific_info[2];
+	u16 p2p_vendor_id;
+	u16 p2p_device_id;
+	u8 p2p_revision_id;
+	u8 reserved5[3];
+	u32 p2p_class_id;
+	u16 subsystem_vendor_id;
+	u16 subsystem_id;
+	u32 p2p_serial_number[2];
+	u8 mac_addr[6];
+	u8 reserved6[2];
+	u32 reserved7[3];
+	char vendor_id[8];
+	char product_id[24];
+	char product_revision[2];
+	u16 reserved8;
+};
+
+struct sys_info_regs {
+	u32 device_id;
+	u32 device_version;
+	u32 firmware_version;
+	union {
+		struct sys_info_regs_gen3 gen3;
+		struct sys_info_regs_gen4 gen4;
+	};
+};
+
+struct partition_info {
+	u32 address;
+	u32 length;
+};
+
+struct active_partition_info_gen3 {
+	u32 address;
+	u32 build_version;
+	u32 build_string;
+};
+
+struct flash_info_regs_gen3 {
+	u32 flash_part_map_upd_idx;
+	struct active_partition_info_gen3 active_img;
+	struct active_partition_info_gen3 active_cfg;
+	struct active_partition_info_gen3 inactive_img;
+	struct active_partition_info_gen3 inactive_cfg;
+	u32 flash_length;
+	struct partition_info cfg0;
+	struct partition_info cfg1;
+	struct partition_info img0;
+	struct partition_info img1;
+	struct partition_info nvlog;
+	struct partition_info vendor[8];
+};
+
+struct active_partition_info_gen4 {
+	unsigned char bl2;
+	unsigned char cfg;
+	unsigned char img;
+	unsigned char key;
+};
+
+struct flash_info_regs_gen4 {
+	u32 flash_address;
+	u32 flash_length;
+	struct active_partition_info_gen4 active_flag;
+	u32 reserved[3];
+	struct partition_info map0;
+	struct partition_info map1;
+	struct partition_info key0;
+	struct partition_info key1;
+	struct partition_info bl2_0;
+	struct partition_info bl2_1;
+	struct partition_info cfg0;
+	struct partition_info cfg1;
+	struct partition_info img0;
+	struct partition_info img1;
+	struct partition_info nvlog;
+	struct partition_info vendor[8];
+};
+
+struct flash_info_regs {
+	union {
+		struct flash_info_regs_gen3 gen3;
+		struct flash_info_regs_gen4 gen4;
+	};
+};
+
+struct part_cfg_regs {
+	u32 status;
+	u32 state;
+	u32 port_cnt;
+	u32 usp_port_mode;
+	u32 usp_pff_inst_id;
+	u32 vep_pff_inst_id;
+	u32 dsp_pff_inst_id[47];
+	u32 reserved1[11];
+	u16 vep_vector_number;
+	u16 usp_vector_number;
+	u32 port_event_bitmap;
+	u32 reserved2[3];
+	u32 part_event_summary;
+	u32 reserved3[3];
+	u32 part_reset_hdr;
+	u32 part_reset_data[5];
+	u32 mrpc_comp_hdr;
+	u32 mrpc_comp_data[5];
+	u32 mrpc_comp_async_hdr;
+	u32 mrpc_comp_async_data[5];
+	u32 dyn_binding_hdr;
+	u32 dyn_binding_data[5];
+	u32 intercomm_notify_hdr;
+	u32 intercomm_notify_data[5];
+	u32 reserved4[153];
+};
+
+struct ntb_dbmsg_regs {
+	u32 reserved1[1024];
+	u64 odb;
+	u64 odb_mask;
+	u64 idb;
+	u64 idb_mask;
+	u8 idb_vec_map[64];
+	u32 msg_map;
+	u32 reserved2;
+	struct {
+		u32 msg;
+		u32 status;
+	} omsg[4];
+	struct {
+		u32 msg;
+		u8 status;
+		u8 mask;
+		u8 src;
+		u8 reserved;
+	} imsg[4];
+	u8 reserved3[3928];
+	u8 msix_table[1024];
+	u8 reserved4[3072];
+	u8 pba[24];
+	u8 reserved5[4072];
+};
+
+struct pff_csr_regs {
+	u16 vendor_id;
+	u16 device_id;
+	u16 pcicmd;
+	u16 pcists;
+	u32 pci_class;
+	u32 pci_opts;
+	union {
+		u32 pci_bar[6];
+		u64 pci_bar64[3];
+	};
+	u32 pci_cardbus;
+	u32 pci_subsystem_id;
+	u32 pci_expansion_rom;
+	u32 pci_cap_ptr;
+	u32 reserved1;
+	u32 pci_irq;
+	u32 pci_cap_region[48];
+	u32 pcie_cap_region[448];
+	u32 indirect_gas_window[128];
+	u32 indirect_gas_window_off;
+	u32 reserved[127];
+	u32 pff_event_summary;
+	u32 reserved2[3];
+	u32 aer_in_p2p_hdr;
+	u32 aer_in_p2p_data[5];
+	u32 aer_in_vep_hdr;
+	u32 aer_in_vep_data[5];
+	u32 dpc_hdr;
+	u32 dpc_data[5];
+	u32 cts_hdr;
+	u32 cts_data[5];
+	u32 uec_hdr;
+	u32 uec_data[5];
+	u32 hotplug_hdr;
+	u32 hotplug_data[5];
+	u32 ier_hdr;
+	u32 ier_data[5];
+	u32 threshold_hdr;
+	u32 threshold_data[5];
+	u32 power_mgmt_hdr;
+	u32 power_mgmt_data[5];
+	u32 tlp_throttling_hdr;
+	u32 tlp_throttling_data[5];
+	u32 force_speed_hdr;
+	u32 force_speed_data[5];
+	u32 credit_timeout_hdr;
+	u32 credit_timeout_data[5];
+	u32 link_state_hdr;
+	u32 link_state_data[5];
+	u32 reserved4[174];
+};
+
+struct dma_mrpc_output {
+	u32 status;
+	u32 cmd_id;
+	u32 rtn_code;
+	u32 output_size;
+	u8 data[1024];
+};
+
+struct switchtec_ntb;
+
+struct switchtec_dev {
+	struct pci_dev *pdev;
+	struct device dev;
+	struct cdev cdev;
+	enum switchtec_gen gen;
+	int partition;
+	int partition_count;
+	int pff_csr_count;
+	char pff_local[255];
+	void *mmio;
+	struct mrpc_regs *mmio_mrpc;
+	struct sw_event_regs *mmio_sw_event;
+	struct sys_info_regs *mmio_sys_info;
+	struct flash_info_regs *mmio_flash_info;
+	struct ntb_info_regs *mmio_ntb;
+	struct part_cfg_regs *mmio_part_cfg;
+	struct part_cfg_regs *mmio_part_cfg_all;
+	struct pff_csr_regs *mmio_pff_csr;
+	struct mutex mrpc_mutex;
+	struct list_head mrpc_queue;
+	int mrpc_busy;
+	struct work_struct mrpc_work;
+	struct delayed_work mrpc_timeout;
+	bool alive;
+	wait_queue_head_t event_wq;
+	atomic_t event_cnt;
+	struct work_struct link_event_work;
+	void (*link_notifier)(struct switchtec_dev *);
+	u8 link_event_count[255];
+	struct switchtec_ntb *sndev;
+	struct dma_mrpc_output *dma_mrpc;
+	dma_addr_t dma_mrpc_dma_addr;
+};
+
+struct switchtec_ioctl_flash_info {
+	__u64 flash_length;
+	__u32 num_partitions;
+	__u32 padding;
+};
+
+struct switchtec_ioctl_flash_part_info {
+	__u32 flash_partition;
+	__u32 address;
+	__u32 length;
+	__u32 active;
+};
+
+struct switchtec_ioctl_event_summary {
+	__u64 global;
+	__u64 part_bitmap;
+	__u32 local_part;
+	__u32 padding;
+	__u32 part[48];
+	__u32 pff[255];
+};
+
+struct switchtec_ioctl_event_ctl {
+	__u32 event_id;
+	__s32 index;
+	__u32 flags;
+	__u32 occurred;
+	__u32 count;
+	__u32 data[5];
+};
+
+struct switchtec_ioctl_pff_port {
+	__u32 pff;
+	__u32 partition;
+	__u32 port;
+};
+
+enum mrpc_state {
+	MRPC_IDLE = 0,
+	MRPC_QUEUED = 1,
+	MRPC_RUNNING = 2,
+	MRPC_DONE = 3,
+	MRPC_IO_ERROR = 4,
+};
+
+struct switchtec_user {
+	struct switchtec_dev *stdev;
+	enum mrpc_state state;
+	wait_queue_head_t cmd_comp;
+	struct kref kref;
+	struct list_head list;
+	bool cmd_done;
+	u32 cmd;
+	u32 status;
+	u32 return_code;
+	size_t data_len;
+	size_t read_len;
+	unsigned char data[1024];
+	int event_cnt;
+};
+
+struct event_reg {
+	size_t offset;
+	u32 * (*map_reg)(struct switchtec_dev *, size_t, int);
+};
+
+struct vc {
+	struct vc_data *d;
+	struct work_struct SAK_work;
+};
+
+struct vgastate {
+	void *vgabase;
+	long unsigned int membase;
+	__u32 memsize;
+	__u32 flags;
+	__u32 depth;
+	__u32 num_attr;
+	__u32 num_crtc;
+	__u32 num_gfx;
+	__u32 num_seq;
+	void *vidstate;
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	long unsigned int smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	long unsigned int mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_info;
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_deferred_io_pageref;
+
+struct fb_deferred_io;
+
+struct fb_ops;
+
+struct fb_tile_ops;
+
+struct apertures_struct;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	struct delayed_work deferred_work;
+	long unsigned int npagerefs;
+	struct fb_deferred_io_pageref *pagerefs;
+	struct fb_deferred_io *fbdefio;
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	struct fb_tile_ops *tileops;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	long unsigned int screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	struct apertures_struct *apertures;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+struct fb_deferred_io_pageref {
+	struct page *page;
+	long unsigned int offset;
+	struct list_head list;
+};
+
+struct fb_deferred_io {
+	long unsigned int delay;
+	bool sort_pagereflist;
+	struct mutex lock;
+	struct list_head pagereflist;
+	void (*first_io)(struct fb_info *);
+	void (*deferred_io)(struct fb_info *, struct list_head *);
+};
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct fb_tilemap {
+	__u32 width;
+	__u32 height;
+	__u32 depth;
+	__u32 length;
+	const __u8 *data;
+};
+
+struct fb_tilerect {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 index;
+	__u32 fg;
+	__u32 bg;
+	__u32 rop;
+};
+
+struct fb_tilearea {
+	__u32 sx;
+	__u32 sy;
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+};
+
+struct fb_tileblit {
+	__u32 sx;
+	__u32 sy;
+	__u32 width;
+	__u32 height;
+	__u32 fg;
+	__u32 bg;
+	__u32 length;
+	__u32 *indices;
+};
+
+struct fb_tilecursor {
+	__u32 sx;
+	__u32 sy;
+	__u32 mode;
+	__u32 shape;
+	__u32 fg;
+	__u32 bg;
+};
+
+struct fb_tile_ops {
+	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
+	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
+	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
+	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
+	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
+	int (*fb_get_tilemax)(struct fb_info *);
+};
+
+struct aperture {
+	resource_size_t base;
+	resource_size_t size;
+};
+
+struct apertures_struct {
+	unsigned int count;
+	struct aperture ranges[0];
+};
+
+struct dmt_videomode {
+	u32 dmt_id;
+	u32 std_2byte_code;
+	u32 cvt_3byte_code;
+	const struct fb_videomode *mode;
+};
+
+struct broken_edid {
+	u8 manufacturer[4];
+	u32 model;
+	u32 fix;
+};
+
+struct __fb_timings {
+	u32 dclk;
+	u32 hfreq;
+	u32 vfreq;
+	u32 hactive;
+	u32 vactive;
+	u32 hblank;
+	u32 vblank;
+	u32 htotal;
+	u32 vtotal;
+};
+
+typedef unsigned int u_int;
+
+struct fb_cmap_user {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+struct fb_event {
+	struct fb_info *info;
+	void *data;
+};
+
+struct fb_modelist {
+	struct list_head list;
+	struct fb_videomode mode;
+};
+
+struct logo_data {
+	int depth;
+	int needs_directpalette;
+	int needs_truepalette;
+	int needs_cmapreset;
+	const struct linux_logo *logo;
+};
+
+struct fb_fix_screeninfo32 {
+	char id[16];
+	compat_caddr_t smem_start;
+	u32 smem_len;
+	u32 type;
+	u32 type_aux;
+	u32 visual;
+	u16 xpanstep;
+	u16 ypanstep;
+	u16 ywrapstep;
+	u32 line_length;
+	compat_caddr_t mmio_start;
+	u32 mmio_len;
+	u32 accel;
+	u16 reserved[3];
+};
+
+struct fb_cmap32 {
+	u32 start;
+	u32 len;
+	compat_caddr_t red;
+	compat_caddr_t green;
+	compat_caddr_t blue;
+	compat_caddr_t transp;
+};
+
+struct fb_cvt_data {
+	u32 xres;
+	u32 yres;
+	u32 refresh;
+	u32 f_refresh;
+	u32 pixclock;
+	u32 hperiod;
+	u32 hblank;
+	u32 hfreq;
+	u32 htotal;
+	u32 vtotal;
+	u32 vsync;
+	u32 hsync;
+	u32 h_front_porch;
+	u32 h_back_porch;
+	u32 v_front_porch;
+	u32 v_back_porch;
+	u32 h_margin;
+	u32 v_margin;
+	u32 interlace;
+	u32 aspect_ratio;
+	u32 active_pixels;
+	u32 flags;
+	u32 status;
+};
+
+typedef unsigned char u_char;
+
+typedef short unsigned int u_short;
+
+struct fbcon_display {
+	const u_char *fontdata;
+	int userfont;
+	u_short inverse;
+	short int yscroll;
+	int vrows;
+	int cursor_shape;
+	int con_rotate;
+	u32 xres_virtual;
+	u32 yres_virtual;
+	u32 height;
+	u32 width;
+	u32 bits_per_pixel;
+	u32 grayscale;
+	u32 nonstd;
+	u32 accel_flags;
+	u32 rotate;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	const struct fb_videomode *mode;
+};
+
+struct fbcon_ops {
+	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
+	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
+	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
+	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
+	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int);
+	int (*update_start)(struct fb_info *);
+	int (*rotate_font)(struct fb_info *, struct vc_data *);
+	struct fb_var_screeninfo var;
+	struct delayed_work cursor_work;
+	struct fb_cursor cursor_state;
+	struct fbcon_display *p;
+	struct fb_info *info;
+	int currcon;
+	int cur_blink_jiffies;
+	int cursor_flash;
+	int cursor_reset;
+	int blank_state;
+	int graphics;
+	int save_graphics;
+	bool initialized;
+	int rotate;
+	int cur_rotate;
+	char *cursor_data;
+	u8 *fontbuffer;
+	u8 *fontdata;
+	u8 *cursor_src;
+	u32 cursor_size;
+	u32 fd_size;
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+enum {
+	FBCON_LOGO_CANSHOW = 4294967295,
+	FBCON_LOGO_DRAW = 4294967294,
+	FBCON_LOGO_DONTSHOW = 4294967293,
+};
+
+struct devm_clk_state {
+	struct clk *clk;
+	void (*exit)(struct clk *);
+};
+
+struct clk_bulk_devres {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_hw;
+
+struct clk_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct clk *clk;
+	struct clk_hw *clk_hw;
+};
+
+struct clk_core;
+
+struct clk_init_data;
+
+struct clk_hw {
+	struct clk_core *core;
+	struct clk *clk;
+	const struct clk_init_data *init;
+};
+
+struct clk_rate_request {
+	struct clk_core *core;
+	long unsigned int rate;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int best_parent_rate;
+	struct clk_hw *best_parent_hw;
+};
+
+struct clk_duty {
+	unsigned int num;
+	unsigned int den;
+};
+
+struct clk_ops {
+	int (*prepare)(struct clk_hw *);
+	void (*unprepare)(struct clk_hw *);
+	int (*is_prepared)(struct clk_hw *);
+	void (*unprepare_unused)(struct clk_hw *);
+	int (*enable)(struct clk_hw *);
+	void (*disable)(struct clk_hw *);
+	int (*is_enabled)(struct clk_hw *);
+	void (*disable_unused)(struct clk_hw *);
+	int (*save_context)(struct clk_hw *);
+	void (*restore_context)(struct clk_hw *);
+	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
+	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
+	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
+	int (*set_parent)(struct clk_hw *, u8);
+	u8 (*get_parent)(struct clk_hw *);
+	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
+	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
+	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
+	int (*get_phase)(struct clk_hw *);
+	int (*set_phase)(struct clk_hw *, int);
+	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*init)(struct clk_hw *);
+	void (*terminate)(struct clk_hw *);
+	void (*debug_init)(struct clk_hw *, struct dentry *);
+};
+
+struct clk_parent_data {
+	const struct clk_hw *hw;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct clk_init_data {
+	const char *name;
+	const struct clk_ops *ops;
+	const char * const *parent_names;
+	const struct clk_parent_data *parent_data;
+	const struct clk_hw **parent_hws;
+	u8 num_parents;
+	long unsigned int flags;
+};
+
+struct clk_lookup_alloc {
+	struct clk_lookup cl;
+	char dev_id[20];
+	char con_id[16];
+};
+
+typedef void (*of_init_fn_1)(struct device_node *);
+
+struct clk_fixed_factor {
+	struct clk_hw hw;
+	unsigned int mult;
+	unsigned int div;
+};
+
+struct clk_div_table {
+	unsigned int val;
+	unsigned int div;
+};
+
+struct clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_multiplier {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_notifier {
+	struct clk *clk;
+	struct srcu_notifier_head notifier_head;
+	struct list_head node;
+};
+
+struct clk {
+	struct clk_core *core;
+	struct device *dev;
+	const char *dev_id;
+	const char *con_id;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	unsigned int exclusive_count;
+	struct hlist_node clks_node;
+};
+
+struct clk_parent_map;
+
+struct clk_core {
+	const char *name;
+	const struct clk_ops *ops;
+	struct clk_hw *hw;
+	struct module *owner;
+	struct device *dev;
+	struct device_node *of_node;
+	struct clk_core *parent;
+	struct clk_parent_map *parents;
+	u8 num_parents;
+	u8 new_parent_index;
+	long unsigned int rate;
+	long unsigned int req_rate;
+	long unsigned int new_rate;
+	struct clk_core *new_parent;
+	struct clk_core *new_child;
+	long unsigned int flags;
+	bool orphan;
+	bool rpm_enabled;
+	unsigned int enable_count;
+	unsigned int prepare_count;
+	unsigned int protect_count;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int accuracy;
+	int phase;
+	struct clk_duty duty;
+	struct hlist_head children;
+	struct hlist_node child_node;
+	struct hlist_head clks;
+	unsigned int notifier_count;
+	struct dentry *dentry;
+	struct hlist_node debug_node;
+	struct kref ref;
+};
+
+struct clk_onecell_data {
+	struct clk **clks;
+	unsigned int clk_num;
+};
+
+struct clk_hw_onecell_data {
+	unsigned int num;
+	struct clk_hw *hws[0];
+};
+
+struct clk_parent_map {
+	const struct clk_hw *hw;
+	struct clk_core *core;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct trace_event_raw_clk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int rate;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int min;
+	long unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_parent {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_phase {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int phase;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_duty_cycle {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int num;
+	unsigned int den;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int prate;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_clk {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_parent {
+	u32 name;
+	u32 pname;
+};
+
+struct trace_event_data_offsets_clk_phase {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_duty_cycle {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_request {
+	u32 name;
+	u32 pname;
+};
+
+typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_rate_request_start)(void *, struct clk_rate_request *);
+
+typedef void (*btf_trace_clk_rate_request_done)(void *, struct clk_rate_request *);
+
+struct clk_notifier_devres {
+	struct clk *clk;
+	struct notifier_block *nb;
+};
+
+struct of_clk_provider {
+	struct list_head link;
+	struct device_node *node;
+	struct clk * (*get)(struct of_phandle_args *, void *);
+	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
+	void *data;
+};
+
+struct clock_provider {
+	void (*clk_init_cb)(struct device_node *);
+	struct device_node *np;
+	struct list_head node;
+};
+
+struct clk_fixed_rate {
+	struct clk_hw hw;
+	long unsigned int fixed_rate;
+	long unsigned int fixed_accuracy;
+	long unsigned int flags;
+};
+
+struct clk_gate {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_mux {
+	struct clk_hw hw;
+	void *reg;
+	const u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_composite {
+	struct clk_hw hw;
+	struct clk_ops ops;
+	struct clk_hw *mux_hw;
+	struct clk_hw *rate_hw;
+	struct clk_hw *gate_hw;
+	const struct clk_ops *mux_ops;
+	const struct clk_ops *rate_ops;
+	const struct clk_ops *gate_ops;
+};
+
+struct wrpll_cfg {
+	u8 divr;
+	u8 divq;
+	u8 range;
+	u8 flags;
+	u16 divf;
+	u32 output_rate_cache[6];
+	long unsigned int parent_rate;
+	u8 max_r;
+	u8 init_r;
+};
+
+struct clk_pwm {
+	struct clk_hw hw;
+	struct pwm_device *pwm;
+	u32 fixed_rate;
+};
+
+struct clk_gpio {
+	struct clk_hw hw;
+	struct gpio_desc *gpiod;
+};
+
+struct u32_fract {
+	__u32 numerator;
+	__u32 denominator;
+};
+
+struct clk_fractional_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 mshift;
+	u8 mwidth;
+	u32 mmask;
+	u8 nshift;
+	u8 nwidth;
+	u32 nmask;
+	u8 flags;
+	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
+	spinlock_t *lock;
+};
+
+struct reset_controller_dev;
+
+struct reset_control_ops {
+	int (*reset)(struct reset_controller_dev *, long unsigned int);
+	int (*assert)(struct reset_controller_dev *, long unsigned int);
+	int (*deassert)(struct reset_controller_dev *, long unsigned int);
+	int (*status)(struct reset_controller_dev *, long unsigned int);
+};
+
+struct reset_controller_dev {
+	const struct reset_control_ops *ops;
+	struct module *owner;
+	struct list_head list;
+	struct list_head reset_control_head;
+	struct device *dev;
+	struct device_node *of_node;
+	int of_reset_n_cells;
+	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+	unsigned int nr_resets;
+};
+
+struct reset_simple_data {
+	spinlock_t lock;
+	void *membase;
+	struct reset_controller_dev rcdev;
+	bool active_low;
+	bool status_active_low;
+	unsigned int reset_us;
+};
+
+struct __prci_data {
+	void *va;
+	struct reset_simple_data reset;
+	struct clk_hw_onecell_data hw_clks;
+};
+
+struct __prci_wrpll_data {
+	struct wrpll_cfg c;
+	void (*enable_bypass)(struct __prci_data *);
+	void (*disable_bypass)(struct __prci_data *);
+	u8 cfg0_offs;
+	u8 cfg1_offs;
+};
+
+struct __prci_clock {
+	const char *name;
+	const char *parent_name;
+	const struct clk_ops *ops;
+	struct clk_hw hw;
+	struct __prci_wrpll_data *pwd;
+	struct __prci_data *pd;
+};
+
+struct prci_clk_desc {
+	struct __prci_clock *clks;
+	size_t num_clks;
+};
+
+typedef s32 dma_cookie_t;
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+enum sum_check_bits {
+	SUM_CHECK_P = 0,
+	SUM_CHECK_Q = 1,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
+};
+
+typedef struct {
+	long unsigned int bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
+};
+
+struct dma_chan_percpu {
+	long unsigned int memcpy_count;
+	long unsigned int bytes_transferred;
+};
+
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
+};
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+struct dma_chan {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_slave_caps;
+
+struct dma_slave_config;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	short unsigned int max_xor;
+	short unsigned int max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan *);
+	int (*device_router_config)(struct dma_chan *);
+	void (*device_free_chan_resources)(struct dma_chan *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
+	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan *);
+	int (*device_resume)(struct dma_chan *);
+	int (*device_terminate_all)(struct dma_chan *);
+	void (*device_synchronize)(struct dma_chan *);
+	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_chan_dev {
+	struct dma_chan *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data {
+	u8 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+struct dma_chan_tbl_ent {
+	struct dma_chan *chan;
+};
+
+struct dmaengine_unmap_pool {
+	struct kmem_cache *cache;
+	const char *name;
+	mempool_t *pool;
+	size_t size;
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct of_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct dmaengine_desc_callback {
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+};
+
+struct virt_dma_desc {
+	struct dma_async_tx_descriptor tx;
+	struct dmaengine_result tx_result;
+	struct list_head node;
+};
+
+struct virt_dma_chan {
+	struct dma_chan chan;
+	struct tasklet_struct task;
+	void (*desc_free)(struct virt_dma_desc *);
+	spinlock_t lock;
+	struct list_head desc_allocated;
+	struct list_head desc_submitted;
+	struct list_head desc_issued;
+	struct list_head desc_completed;
+	struct list_head desc_terminated;
+	struct virt_dma_desc *cyclic;
+};
+
+struct virtio_driver {
+	struct device_driver driver;
+	const struct virtio_device_id *id_table;
+	const unsigned int *feature_table;
+	unsigned int feature_table_size;
+	const unsigned int *feature_table_legacy;
+	unsigned int feature_table_size_legacy;
+	int (*validate)(struct virtio_device *);
+	int (*probe)(struct virtio_device *);
+	void (*scan)(struct virtio_device *);
+	void (*remove)(struct virtio_device *);
+	void (*config_changed)(struct virtio_device *);
+};
+
+typedef __u16 __virtio16;
+
+typedef __u32 __virtio32;
+
+typedef __u64 __virtio64;
+
+struct vring_desc {
+	__virtio64 addr;
+	__virtio32 len;
+	__virtio16 flags;
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[0];
+};
+
+struct vring_used_elem {
+	__virtio32 id;
+	__virtio32 len;
+};
+
+typedef struct vring_used_elem vring_used_elem_t;
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	vring_used_elem_t ring[0];
+};
+
+typedef struct vring_desc vring_desc_t;
+
+typedef struct vring_avail vring_avail_t;
+
+typedef struct vring_used vring_used_t;
+
+struct vring {
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+};
+
+struct vring_packed_desc_event {
+	__le16 off_wrap;
+	__le16 flags;
+};
+
+struct vring_packed_desc {
+	__le64 addr;
+	__le32 len;
+	__le16 id;
+	__le16 flags;
+};
+
+struct vring_desc_state_split {
+	void *data;
+	struct vring_desc *indir_desc;
+};
+
+struct vring_desc_state_packed {
+	void *data;
+	struct vring_packed_desc *indir_desc;
+	u16 num;
+	u16 last;
+};
+
+struct vring_desc_extra {
+	dma_addr_t addr;
+	u32 len;
+	u16 flags;
+	u16 next;
+};
+
+struct vring_virtqueue_split {
+	struct vring vring;
+	u16 avail_flags_shadow;
+	u16 avail_idx_shadow;
+	struct vring_desc_state_split *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t queue_dma_addr;
+	size_t queue_size_in_bytes;
+	u32 vring_align;
+	bool may_reduce_num;
+};
+
+struct vring_virtqueue_packed {
+	struct {
+		unsigned int num;
+		struct vring_packed_desc *desc;
+		struct vring_packed_desc_event *driver;
+		struct vring_packed_desc_event *device;
+	} vring;
+	bool avail_wrap_counter;
+	u16 avail_used_flags;
+	u16 next_avail_idx;
+	u16 event_flags_shadow;
+	struct vring_desc_state_packed *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t ring_dma_addr;
+	dma_addr_t driver_event_dma_addr;
+	dma_addr_t device_event_dma_addr;
+	size_t ring_size_in_bytes;
+	size_t event_size_in_bytes;
+};
+
+struct vring_virtqueue {
+	struct virtqueue vq;
+	bool packed_ring;
+	bool use_dma_api;
+	bool weak_barriers;
+	bool broken;
+	bool indirect;
+	bool event;
+	unsigned int free_head;
+	unsigned int num_added;
+	u16 last_used_idx;
+	bool event_triggered;
+	union {
+		struct vring_virtqueue_split split;
+		struct vring_virtqueue_packed packed;
+	};
+	bool (*notify)(struct virtqueue *);
+	bool we_own_ring;
+};
+
+struct pdma_regs {
+	void *ctrl;
+	void *xfer_type;
+	void *xfer_size;
+	void *dst_addr;
+	void *src_addr;
+	void *act_type;
+	void *residue;
+	void *cur_dst_addr;
+	void *cur_src_addr;
+};
+
+struct sf_pdma_chan;
+
+struct sf_pdma_desc {
+	u32 xfer_type;
+	u64 xfer_size;
+	u64 dst_addr;
+	u64 src_addr;
+	struct virt_dma_desc vdesc;
+	struct sf_pdma_chan *chan;
+	bool in_use;
+	enum dma_transfer_direction dirn;
+	struct dma_async_tx_descriptor *async_tx;
+};
+
+enum sf_pdma_pm_state {
+	RUNNING = 0,
+	SUSPENDED = 1,
+};
+
+struct sf_pdma;
+
+struct sf_pdma_chan {
+	struct virt_dma_chan vchan;
+	enum dma_status status;
+	enum sf_pdma_pm_state pm_state;
+	u32 slave_id;
+	struct sf_pdma *pdma;
+	struct sf_pdma_desc *desc;
+	struct dma_slave_config cfg;
+	u32 attr;
+	dma_addr_t dma_dev_addr;
+	u32 dma_dev_size;
+	struct tasklet_struct done_tasklet;
+	struct tasklet_struct err_tasklet;
+	struct pdma_regs regs;
+	spinlock_t lock;
+	bool xfer_err;
+	int txirq;
+	int errirq;
+	int retries;
+};
+
+struct sf_pdma {
+	struct dma_device dma_dev;
+	void *membase;
+	void *mappedbase;
+	u32 n_chans;
+	struct sf_pdma_chan chans[0];
+};
+
+struct virtio_pci_legacy_device {
+	struct pci_dev *pci_dev;
+	u8 *isr;
+	void *ioaddr;
+	struct virtio_device_id id;
+};
+
+struct virtio_mmio_device {
+	struct virtio_device vdev;
+	struct platform_device *pdev;
+	void *base;
+	long unsigned int version;
+	spinlock_t lock;
+	struct list_head virtqueues;
+};
+
+struct virtio_mmio_vq_info {
+	struct virtqueue *vq;
+	struct list_head node;
+};
+
+struct virtio_pci_common_cfg {
+	__le32 device_feature_select;
+	__le32 device_feature;
+	__le32 guest_feature_select;
+	__le32 guest_feature;
+	__le16 msix_config;
+	__le16 num_queues;
+	__u8 device_status;
+	__u8 config_generation;
+	__le16 queue_select;
+	__le16 queue_size;
+	__le16 queue_msix_vector;
+	__le16 queue_enable;
+	__le16 queue_notify_off;
+	__le32 queue_desc_lo;
+	__le32 queue_desc_hi;
+	__le32 queue_avail_lo;
+	__le32 queue_avail_hi;
+	__le32 queue_used_lo;
+	__le32 queue_used_hi;
+};
+
+struct virtio_pci_modern_common_cfg {
+	struct virtio_pci_common_cfg cfg;
+	__le16 queue_notify_data;
+	__le16 queue_reset;
+};
+
+struct virtio_pci_modern_device {
+	struct pci_dev *pci_dev;
+	struct virtio_pci_common_cfg *common;
+	void *device;
+	void *notify_base;
+	resource_size_t notify_pa;
+	u8 *isr;
+	size_t notify_len;
+	size_t device_len;
+	int notify_map_cap;
+	u32 notify_offset_multiplier;
+	int modern_bars;
+	struct virtio_device_id id;
+};
+
+struct virtio_pci_vq_info {
+	struct virtqueue *vq;
+	struct list_head node;
+	unsigned int msix_vector;
+};
+
+struct virtio_pci_device {
+	struct virtio_device vdev;
+	struct pci_dev *pci_dev;
+	struct virtio_pci_legacy_device ldev;
+	struct virtio_pci_modern_device mdev;
+	bool is_legacy;
+	u8 *isr;
+	spinlock_t lock;
+	struct list_head virtqueues;
+	struct virtio_pci_vq_info **vqs;
+	int msix_enabled;
+	int intx_enabled;
+	cpumask_var_t *msix_affinity_masks;
+	char (*msix_names)[256];
+	unsigned int msix_vectors;
+	unsigned int msix_used_vectors;
+	bool per_vq_vectors;
+	struct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16);
+	void (*del_vq)(struct virtio_pci_vq_info *);
+	u16 (*config_vector)(struct virtio_pci_device *, u16);
+};
+
+enum {
+	VP_MSIX_CONFIG_VECTOR = 0,
+	VP_MSIX_VQ_VECTOR = 1,
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 *custom_data;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_handle;
+
+struct input_dev {
+	const char *name;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	long unsigned int propbit[1];
+	long unsigned int evbit[1];
+	long unsigned int keybit[12];
+	long unsigned int relbit[1];
+	long unsigned int absbit[1];
+	long unsigned int mscbit[1];
+	long unsigned int ledbit[1];
+	long unsigned int sndbit[1];
+	long unsigned int ffbit[2];
+	long unsigned int swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	long unsigned int key[12];
+	long unsigned int led[1];
+	long unsigned int snd[1];
+	long unsigned int sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
+};
+
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	long unsigned int ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	struct file *effect_owners[0];
+};
+
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+struct input_handler;
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+};
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+};
+
+enum virtio_input_config_select {
+	VIRTIO_INPUT_CFG_UNSET = 0,
+	VIRTIO_INPUT_CFG_ID_NAME = 1,
+	VIRTIO_INPUT_CFG_ID_SERIAL = 2,
+	VIRTIO_INPUT_CFG_ID_DEVIDS = 3,
+	VIRTIO_INPUT_CFG_PROP_BITS = 16,
+	VIRTIO_INPUT_CFG_EV_BITS = 17,
+	VIRTIO_INPUT_CFG_ABS_INFO = 18,
+};
+
+struct virtio_input_absinfo {
+	__le32 min;
+	__le32 max;
+	__le32 fuzz;
+	__le32 flat;
+	__le32 res;
+};
+
+struct virtio_input_devids {
+	__le16 bustype;
+	__le16 vendor;
+	__le16 product;
+	__le16 version;
+};
+
+struct virtio_input_config {
+	__u8 select;
+	__u8 subsel;
+	__u8 size;
+	__u8 reserved[5];
+	union {
+		char string[128];
+		__u8 bitmap[128];
+		struct virtio_input_absinfo abs;
+		struct virtio_input_devids ids;
+	} u;
+};
+
+struct virtio_input_event {
+	__le16 type;
+	__le16 code;
+	__le32 value;
+};
+
+struct virtio_input {
+	struct virtio_device *vdev;
+	struct input_dev *idev;
+	char name[64];
+	char serial[64];
+	char phys[64];
+	struct virtqueue *evt;
+	struct virtqueue *sts;
+	struct virtio_input_event evts[64];
+	spinlock_t lock;
+	bool ready;
+};
+
+struct virtio_balloon_config {
+	__le32 num_pages;
+	__le32 actual;
+	union {
+		__le32 free_page_hint_cmd_id;
+		__le32 free_page_report_cmd_id;
+	};
+	__le32 poison_val;
+};
+
+struct virtio_balloon_stat {
+	__virtio16 tag;
+	__virtio64 val;
+} __attribute__((packed));
+
+enum virtio_balloon_vq {
+	VIRTIO_BALLOON_VQ_INFLATE = 0,
+	VIRTIO_BALLOON_VQ_DEFLATE = 1,
+	VIRTIO_BALLOON_VQ_STATS = 2,
+	VIRTIO_BALLOON_VQ_FREE_PAGE = 3,
+	VIRTIO_BALLOON_VQ_REPORTING = 4,
+	VIRTIO_BALLOON_VQ_MAX = 5,
+};
+
+enum virtio_balloon_config_read {
+	VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
+};
+
+struct virtio_balloon {
+	struct virtio_device *vdev;
+	struct virtqueue *inflate_vq;
+	struct virtqueue *deflate_vq;
+	struct virtqueue *stats_vq;
+	struct virtqueue *free_page_vq;
+	struct workqueue_struct *balloon_wq;
+	struct work_struct report_free_page_work;
+	struct work_struct update_balloon_stats_work;
+	struct work_struct update_balloon_size_work;
+	spinlock_t stop_update_lock;
+	bool stop_update;
+	int: 24;
+	long unsigned int config_read_bitmap;
+	struct list_head free_page_list;
+	spinlock_t free_page_list_lock;
+	int: 32;
+	long unsigned int num_free_page_blocks;
+	u32 cmd_id_received_cache;
+	__virtio32 cmd_id_active;
+	__virtio32 cmd_id_stop;
+	int: 32;
+	wait_queue_head_t acked;
+	unsigned int num_pages;
+	int: 32;
+	struct balloon_dev_info vb_dev_info;
+	struct mutex balloon_lock;
+	unsigned int num_pfns;
+	__virtio32 pfns[256];
+	struct virtio_balloon_stat stats[10];
+	struct shrinker shrinker;
+	struct notifier_block oom_nb;
+	struct virtqueue *reporting_vq;
+	struct page_reporting_dev_info pr_dev_info;
+} __attribute__((packed));
+
+typedef int suspend_state_t;
+
+struct regulator_dev;
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+};
+
+struct regulator_coupler;
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+};
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+struct regulator_bulk_data {
+	const char *supply;
+	int init_load_uA;
+	struct regulator *consumer;
+	int ret;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	long unsigned int notifs;
+	long unsigned int errors;
+	int possible_errs;
+};
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long int opaque;
+};
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, long unsigned int *);
+	int (*renable)(struct regulator_irq_data *);
+};
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+struct fixed_voltage_config {
+	const char *supply_name;
+	const char *input_supply;
+	int microvolts;
+	unsigned int startup_delay;
+	unsigned int off_on_delay;
+	unsigned int enabled_at_boot: 1;
+	struct regulator_init_data *init_data;
+};
+
+struct fixed_regulator_data {
+	struct fixed_voltage_config cfg;
+	struct regulator_init_data init_data;
+	struct platform_device pdev;
+};
+
+struct pre_voltage_change_data {
+	long unsigned int old_uV;
+	long unsigned int min_uV;
+	long unsigned int max_uV;
+};
+
+struct regulator_coupler {
+	struct list_head list;
+	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
+};
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+enum regulator_status {
+	REGULATOR_STATUS_OFF = 0,
+	REGULATOR_STATUS_ON = 1,
+	REGULATOR_STATUS_ERROR = 2,
+	REGULATOR_STATUS_FAST = 3,
+	REGULATOR_STATUS_NORMAL = 4,
+	REGULATOR_STATUS_IDLE = 5,
+	REGULATOR_STATUS_STANDBY = 6,
+	REGULATOR_STATUS_BYPASS = 7,
+	REGULATOR_STATUS_UNDEFINED = 8,
+};
+
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
+};
+
+struct regulator_enable_gpio {
+	struct list_head list;
+	struct gpio_desc *gpiod;
+	u32 enable_count;
+	u32 request_count;
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct trace_event_raw_regulator_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int min;
+	int max;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_value {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regulator_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_value {
+	u32 name;
+};
+
+typedef void (*btf_trace_regulator_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
+
+typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
+
+struct regulator_map {
+	struct list_head list;
+	const char *dev_name;
+	const char *supply;
+	struct regulator_dev *regulator;
+};
+
+struct regulator_supply_alias {
+	struct list_head list;
+	struct device *src_dev;
+	const char *src_supply;
+	struct device *alias_dev;
+	const char *alias_supply;
+};
+
+struct summary_data {
+	struct seq_file *s;
+	struct regulator_dev *parent;
+	int level;
+};
+
+struct summary_lock_data {
+	struct ww_acquire_ctx *ww_ctx;
+	struct regulator_dev **new_contended_rdev;
+	struct regulator_dev **old_contended_rdev;
+};
+
+enum {
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
+};
+
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
+};
+
+struct of_regulator_match {
+	const char *name;
+	void *driver_data;
+	struct regulator_init_data *init_data;
+	struct device_node *of_node;
+	const struct regulator_desc *desc;
+};
+
+struct devm_of_regulator_matches {
+	struct of_regulator_match *matches;
+	unsigned int num_matches;
+};
+
+struct reset_control {
+	struct reset_controller_dev *rcdev;
+	struct list_head list;
+	unsigned int id;
+	struct kref refcnt;
+	bool acquired;
+	bool shared;
+	bool array;
+	atomic_t deassert_count;
+	atomic_t triggered_count;
+};
+
+struct reset_control_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct reset_control_array {
+	struct reset_control base;
+	unsigned int num_rstcs;
+	struct reset_control *rstc[0];
+};
+
+struct reset_control_bulk_devres {
+	int num_rstcs;
+	struct reset_control_bulk_data *rstcs;
+};
+
+struct reg_field {
+	unsigned int reg;
+	unsigned int lsb;
+	unsigned int msb;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+enum da9063_type {
+	PMIC_TYPE_DA9063 = 0,
+	PMIC_TYPE_DA9063L = 1,
+};
+
+struct regmap_irq_chip_data;
+
+struct da9063 {
+	struct device *dev;
+	enum da9063_type type;
+	unsigned char variant_code;
+	unsigned int flags;
+	struct regmap *regmap;
+	int chip_irq;
+	unsigned int irq_base;
+	struct regmap_irq_chip_data *regmap_irq;
+};
+
+enum {
+	DA9063_ID_BCORE1 = 0,
+	DA9063_ID_BCORE2 = 1,
+	DA9063_ID_BPRO = 2,
+	DA9063_ID_BMEM = 3,
+	DA9063_ID_BIO = 4,
+	DA9063_ID_BPERI = 5,
+	DA9063_ID_BCORES_MERGED = 6,
+	DA9063_ID_BMEM_BIO_MERGED = 7,
+	DA9063_ID_LDO3 = 8,
+	DA9063_ID_LDO7 = 9,
+	DA9063_ID_LDO8 = 10,
+	DA9063_ID_LDO9 = 11,
+	DA9063_ID_LDO11 = 12,
+	DA9063_ID_LDO1 = 13,
+	DA9063_ID_LDO2 = 14,
+	DA9063_ID_LDO4 = 15,
+	DA9063_ID_LDO5 = 16,
+	DA9063_ID_LDO6 = 17,
+	DA9063_ID_LDO10 = 18,
+};
+
+struct da9063_regulator_data {
+	int id;
+	struct regulator_init_data *initdata;
+};
+
+struct da9063_regulators_pdata {
+	unsigned int n_regulators;
+	struct da9063_regulator_data *regulator_data;
+};
+
+struct da9063_regulator_info {
+	struct regulator_desc desc;
+	struct reg_field mode;
+	struct reg_field suspend;
+	struct reg_field sleep;
+	struct reg_field suspend_sleep;
+	unsigned int suspend_vsel_reg;
+	struct reg_field oc_event;
+};
+
+struct da9063_dev_model {
+	const struct da9063_regulator_info *regulator_info;
+	unsigned int n_regulators;
+	enum da9063_type type;
+};
+
+struct regmap_field;
+
+struct da9063_regulator {
+	struct regulator_desc desc;
+	struct regulator_dev *rdev;
+	struct da9063 *hw;
+	const struct da9063_regulator_info *info;
+	struct regmap_field *mode;
+	struct regmap_field *suspend;
+	struct regmap_field *sleep;
+	struct regmap_field *suspend_sleep;
+};
+
+struct da9063_regulators {
+	unsigned int n_regulators;
+	struct da9063_regulator regulator[0];
+};
+
+enum {
+	BUCK_MODE_MANUAL = 0,
+	BUCK_MODE_SLEEP = 1,
+	BUCK_MODE_SYNC = 2,
+	BUCK_MODE_AUTO = 3,
+};
+
+struct reset_simple_devdata {
+	u32 reg_offset;
+	u32 nr_resets;
+	bool active_low;
+	bool status_active_low;
+};
+
+struct pwm_continuous_reg_data {
+	unsigned int min_uV_dutycycle;
+	unsigned int max_uV_dutycycle;
+	unsigned int dutycycle_unit;
+};
+
+struct pwm_voltages;
+
+struct pwm_regulator_data {
+	struct pwm_device *pwm;
+	struct pwm_voltages *duty_cycle_table;
+	struct pwm_continuous_reg_data continuous;
+	struct regulator_desc desc;
+	int state;
+	struct gpio_desc *enb_gpio;
+};
+
+struct pwm_voltages {
+	unsigned int uV;
+	unsigned int dutycycle;
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	short unsigned int c_iflag;
+	short unsigned int c_oflag;
+	short unsigned int c_cflag;
+	short unsigned int c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	long unsigned int char_map[4];
+	long unsigned int overrun_time;
+	int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	char read_buf[4096];
+	long unsigned int read_flags[64];
+	unsigned char echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	size_t lookahead_count;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
+};
+
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	long unsigned int iomap_base;
+};
+
+struct tty_file_private {
+	struct tty_struct *tty;
+	struct file *file;
+	struct list_head list;
+};
+
+struct serial_struct32 {
+	compat_int_t type;
+	compat_int_t line;
+	compat_uint_t port;
+	compat_int_t irq;
+	compat_int_t flags;
+	compat_int_t xmit_fifo_size;
+	compat_int_t custom_divisor;
+	compat_int_t baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char;
+	compat_int_t hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	compat_uint_t iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	compat_int_t reserved;
+};
+
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+};
+
+struct pts_fs_info;
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	long unsigned int key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	long unsigned int reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+struct unipair {
+	short unsigned int unicode;
+	short unsigned int fontpos;
+};
+
+struct unimapdesc {
+	short unsigned int entry_ct;
+	struct unipair *entries;
+};
+
+struct kbentry {
+	unsigned char kb_table;
+	unsigned char kb_index;
+	short unsigned int kb_value;
+};
+
+struct kbsentry {
+	unsigned char kb_func;
+	unsigned char kb_string[512];
+};
+
+struct kbkeycode {
+	unsigned int scancode;
+	unsigned int keycode;
+};
+
+struct kbd_repeat {
+	int delay;
+	int period;
+};
+
+struct console_font_op {
+	unsigned int op;
+	unsigned int flags;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_stat {
+	short unsigned int v_active;
+	short unsigned int v_signal;
+	short unsigned int v_state;
+};
+
+struct vt_sizes {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_scrollsize;
+};
+
+struct vt_consize {
+	short unsigned int v_rows;
+	short unsigned int v_cols;
+	short unsigned int v_vlin;
+	short unsigned int v_clin;
+	short unsigned int v_vcol;
+	short unsigned int v_ccol;
+};
+
+struct vt_event {
+	unsigned int event;
+	unsigned int oldev;
+	unsigned int newev;
+	unsigned int pad[4];
+};
+
+struct vt_setactivate {
+	unsigned int console;
+	struct vt_mode mode;
+};
+
+struct vt_spawn_console {
+	spinlock_t lock;
+	struct pid *pid;
+	int sig;
+};
+
+struct vt_event_wait {
+	struct list_head list;
+	struct vt_event event;
+	int done;
+};
+
+struct compat_console_font_op {
+	compat_uint_t op;
+	compat_uint_t flags;
+	compat_uint_t width;
+	compat_uint_t height;
+	compat_uint_t charcount;
+	compat_caddr_t data;
+};
+
+struct compat_unimapdesc {
+	short unsigned int entry_ct;
+	compat_caddr_t entries;
+};
+
+struct kbdiacr {
+	unsigned char diacr;
+	unsigned char base;
+	unsigned char result;
+};
+
+struct kbdiacrs {
+	unsigned int kb_cnt;
+	struct kbdiacr kbdiacr[256];
+};
+
+struct kbdiacruc {
+	unsigned int diacr;
+	unsigned int base;
+	unsigned int result;
+};
+
+struct kbdiacrsuc {
+	unsigned int kb_cnt;
+	struct kbdiacruc kbdiacruc[256];
+};
+
+struct keyboard_notifier_param {
+	struct vc_data *vc;
+	int down;
+	int shift;
+	int ledstate;
+	unsigned int value;
+};
+
+struct kbd_struct {
+	unsigned char lockstate;
+	unsigned char slockstate;
+	unsigned char ledmode: 1;
+	unsigned char ledflagstate: 4;
+	char: 3;
+	unsigned char default_ledflagstate: 4;
+	unsigned char kbdmode: 3;
+	char: 1;
+	unsigned char modeflags: 5;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+struct led_pattern;
+
+struct led_trigger;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	int flags;
+	long unsigned int work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	long unsigned int blink_delay_on;
+	long unsigned int blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+typedef void k_handler_fn(struct vc_data *, unsigned char, char);
+
+typedef void fn_handler_fn(struct vc_data *);
+
+struct getset_keycode_data {
+	struct input_keymap_entry ke;
+	int error;
+};
+
+struct kbd_led_trigger {
+	struct led_trigger trigger;
+	unsigned int mask;
+};
+
+enum translation_map {
+	LAT1_MAP = 0,
+	GRAF_MAP = 1,
+	IBMPC_MAP = 2,
+	USER_MAP = 3,
+	FIRST_MAP = 0,
+	LAST_MAP = 3,
+};
+
+struct uni_pagedict {
+	u16 **uni_pgdir[32];
+	long unsigned int refcount;
+	long unsigned int sum;
+	unsigned char *inverse_translations[4];
+	u16 *inverse_trans_unicode;
+};
+
+struct vt_notifier_param {
+	struct vc_data *vc;
+	unsigned int c;
+};
+
+struct vcs_poll_data {
+	struct notifier_block notifier;
+	unsigned int cons_num;
+	int event;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+};
+
+struct tiocl_selection {
+	short unsigned int xs;
+	short unsigned int ys;
+	short unsigned int xe;
+	short unsigned int ye;
+	short unsigned int sel_mode;
+};
+
+struct vc_selection {
+	struct mutex lock;
+	struct vc_data *cons;
+	char *buffer;
+	unsigned int buf_len;
+	volatile int start;
+	int end;
+};
+
+typedef uint32_t char32_t;
+
+struct uni_screen {
+	char32_t *lines[0];
+};
+
+struct con_driver {
+	const struct consw *con;
+	const char *desc;
+	struct device *dev;
+	int node;
+	int first;
+	int last;
+	int flag;
+};
+
+enum {
+	blank_off = 0,
+	blank_normal_wait = 1,
+	blank_vesa_wait = 2,
+};
+
+enum {
+	EPecma = 0,
+	EPdec = 1,
+	EPeq = 2,
+	EPgt = 3,
+	EPlt = 4,
+};
+
+struct rgb {
+	u8 r;
+	u8 g;
+	u8 b;
+};
+
+enum {
+	ESnormal = 0,
+	ESesc = 1,
+	ESsquare = 2,
+	ESgetpars = 3,
+	ESfunckey = 4,
+	EShash = 5,
+	ESsetG0 = 6,
+	ESsetG1 = 7,
+	ESpercent = 8,
+	EScsiignore = 9,
+	ESnonstd = 10,
+	ESpalette = 11,
+	ESosc = 12,
+	ESapc = 13,
+	ESpm = 14,
+	ESdcs = 15,
+};
+
+struct interval {
+	uint32_t first;
+	uint32_t last;
+};
+
+struct vc_draw_region {
+	long unsigned int from;
+	long unsigned int to;
+	int x;
+};
+
+struct hv_ops;
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	long unsigned int flags;
+};
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, int);
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	union {
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
+	};
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct uart_port;
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+typedef u64 upf_t;
+
+typedef unsigned int upstat_t;
+
+struct uart_state;
+
+struct uart_port {
+	spinlock_t lock;
+	long unsigned int iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	int hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	long unsigned int sysrq;
+	unsigned int sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+};
+
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[16];
+	unsigned int baud;
+};
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+enum hwparam_type {
+	hwparam_ioport = 0,
+	hwparam_iomem = 1,
+	hwparam_ioport_or_iomem = 2,
+	hwparam_irq = 3,
+	hwparam_dma = 4,
+	hwparam_dma_addr = 5,
+	hwparam_other = 6,
+};
+
+struct plat_serial8250_port {
+	long unsigned int iobase;
+	void *membase;
+	resource_size_t mapbase;
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	upf_t flags;
+	unsigned int type;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
+enum {
+	PLAT8250_DEV_LEGACY = 4294967295,
+	PLAT8250_DEV_PLATFORM = 0,
+	PLAT8250_DEV_PLATFORM1 = 1,
+	PLAT8250_DEV_PLATFORM2 = 2,
+	PLAT8250_DEV_FOURPORT = 3,
+	PLAT8250_DEV_ACCENT = 4,
+	PLAT8250_DEV_BOCA = 5,
+	PLAT8250_DEV_EXAR_ST16C554 = 6,
+	PLAT8250_DEV_HUB6 = 7,
+	PLAT8250_DEV_AU1X00 = 8,
+	PLAT8250_DEV_SM501 = 9,
+};
+
+struct uart_8250_port;
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+	void (*setup_timer)(struct uart_8250_port *);
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	short unsigned int bugs;
+	bool fifo_bug;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	int (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, int);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan *rxchan;
+	struct dma_chan *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+struct old_serial_port {
+	unsigned int uart;
+	unsigned int baud_base;
+	unsigned int port;
+	unsigned int irq;
+	upf_t flags;
+	unsigned char io_type;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+};
+
+struct irq_info {
+	struct hlist_node node;
+	int irq;
+	spinlock_t lock;
+	struct list_head *head;
+};
+
+struct serial8250_config {
+	const char *name;
+	short unsigned int fifo_size;
+	short unsigned int tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+struct exar8250_platform {
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	const struct serial_rs485 *rs485_supported;
+	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
+	void (*unregister_gpio)(struct uart_8250_port *);
+};
+
+struct exar8250;
+
+struct exar8250_board {
+	unsigned int num_ports;
+	unsigned int reg_shift;
+	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct exar8250 {
+	unsigned int nr;
+	struct exar8250_board *board;
+	void *virt;
+	int line[0];
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct serial_private;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct timedia_struct {
+	int num;
+	const short unsigned int *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct of_serial_info {
+	struct clk *clk;
+	struct reset_control *rst;
+	int type;
+	int line;
+};
+
+struct serdev_device;
+
+struct serdev_device_ops {
+	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
+	void (*write_wakeup)(struct serdev_device *);
+};
+
+struct serdev_controller;
+
+struct serdev_device {
+	struct device dev;
+	int nr;
+	struct serdev_controller *ctrl;
+	const struct serdev_device_ops *ops;
+	struct completion write_comp;
+	struct mutex write_lock;
+};
+
+struct serdev_controller_ops;
+
+struct serdev_controller {
+	struct device dev;
+	unsigned int nr;
+	struct serdev_device *serdev;
+	const struct serdev_controller_ops *ops;
+};
+
+struct serdev_device_driver {
+	struct device_driver driver;
+	int (*probe)(struct serdev_device *);
+	void (*remove)(struct serdev_device *);
+};
+
+enum serdev_parity {
+	SERDEV_PARITY_NONE = 0,
+	SERDEV_PARITY_EVEN = 1,
+	SERDEV_PARITY_ODD = 2,
+};
+
+struct serdev_controller_ops {
+	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
+	void (*write_flush)(struct serdev_controller *);
+	int (*write_room)(struct serdev_controller *);
+	int (*open)(struct serdev_controller *);
+	void (*close)(struct serdev_controller *);
+	void (*set_flow_control)(struct serdev_controller *, bool);
+	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
+	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
+	void (*wait_until_sent)(struct serdev_controller *, long int);
+	int (*get_tiocm)(struct serdev_controller *);
+	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
+};
+
+struct serport {
+	struct tty_port *port;
+	struct tty_struct *tty;
+	struct tty_driver *tty_drv;
+	int tty_idx;
+	long unsigned int flags;
+};
+
+struct sifive_serial_port {
+	struct uart_port port;
+	struct device *dev;
+	unsigned char ier;
+	long unsigned int baud_rate;
+	struct clk *clk;
+	struct notifier_block clk_notifier;
+};
+
+enum mctrl_gpio_idx {
+	UART_GPIO_CTS = 0,
+	UART_GPIO_DSR = 1,
+	UART_GPIO_DCD = 2,
+	UART_GPIO_RNG = 3,
+	UART_GPIO_RI = 3,
+	UART_GPIO_RTS = 4,
+	UART_GPIO_DTR = 5,
+	UART_GPIO_MAX = 6,
+};
+
+struct mctrl_gpios {
+	struct uart_port *port;
+	struct gpio_desc *gpio[6];
+	int irq[6];
+	unsigned int mctrl_prev;
+	bool mctrl_on;
+};
+
+struct memdev {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	fmode_t fmode;
+};
+
+struct timer_rand_state {
+	long unsigned int last_time;
+	long int last_delta;
+	long int last_delta2;
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 250,
+	CRNG_RESEED_INTERVAL = 15000,
+};
+
+struct crng {
+	u8 key[32];
+	long unsigned int generation;
+	local_lock_t lock;
+};
+
+struct batch_u8 {
+	u8 entropy[96];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u16 {
+	u16 entropy[48];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+struct fast_pool {
+	long unsigned int pool[4];
+	long unsigned int last;
+	unsigned int count;
+	struct timer_list mix;
+};
+
+struct entropy_timer_state {
+	long unsigned int entropy;
+	struct timer_list timer;
+	atomic_t samples;
+	unsigned int samples_per_bit;
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 16,
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	long unsigned int priv;
+	short unsigned int quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+	struct completion dying;
+};
+
+struct virtrng_info {
+	struct hwrng hwrng;
+	struct virtqueue *vq;
+	char name[25];
+	int index;
+	bool hwrng_register_done;
+	bool hwrng_removed;
+	struct completion have_data;
+	unsigned int data_avail;
+	unsigned int data_idx;
+	u8 data[64];
+};
+
+struct virtio_console_config {
+	__virtio16 cols;
+	__virtio16 rows;
+	__virtio32 max_nr_ports;
+	__virtio32 emerg_wr;
+};
+
+struct virtio_console_control {
+	__virtio32 id;
+	__virtio16 event;
+	__virtio16 value;
+};
+
+struct ports_driver_data {
+	struct class *class;
+	struct dentry *debugfs_dir;
+	struct list_head portdevs;
+	struct list_head consoles;
+};
+
+struct console___2 {
+	struct list_head list;
+	struct hvc_struct *hvc;
+	struct winsize ws;
+	u32 vtermno;
+};
+
+struct port_buffer {
+	char *buf;
+	size_t size;
+	size_t len;
+	size_t offset;
+	dma_addr_t dma;
+	struct device *dev;
+	struct list_head list;
+	unsigned int sgpages;
+	struct scatterlist sg[0];
+};
+
+struct ports_device {
+	struct list_head list;
+	struct work_struct control_work;
+	struct work_struct config_work;
+	struct list_head ports;
+	spinlock_t ports_lock;
+	spinlock_t c_ivq_lock;
+	spinlock_t c_ovq_lock;
+	u32 max_nr_ports;
+	struct virtio_device *vdev;
+	struct virtqueue *c_ivq;
+	struct virtqueue *c_ovq;
+	struct virtio_console_control cpkt;
+	struct virtqueue **in_vqs;
+	struct virtqueue **out_vqs;
+	int chr_major;
+};
+
+struct port_stats {
+	long unsigned int bytes_sent;
+	long unsigned int bytes_received;
+	long unsigned int bytes_discarded;
+};
+
+struct port {
+	struct list_head list;
+	struct ports_device *portdev;
+	struct port_buffer *inbuf;
+	spinlock_t inbuf_lock;
+	spinlock_t outvq_lock;
+	struct virtqueue *in_vq;
+	struct virtqueue *out_vq;
+	struct dentry *debugfs_file;
+	struct port_stats stats;
+	struct console___2 cons;
+	struct cdev *cdev;
+	struct device *dev;
+	struct kref kref;
+	wait_queue_head_t waitqueue;
+	char *name;
+	struct fasync_struct *async_queue;
+	u32 id;
+	bool outvq_full;
+	bool host_connected;
+	bool guest_connected;
+};
+
+struct sg_list {
+	unsigned int n;
+	unsigned int size;
+	size_t len;
+	struct scatterlist *sg;
+};
+
+struct trace_event_raw_iommu_group_event {
+	struct trace_entry ent;
+	int gid;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_device_event {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_map {
+	struct trace_entry ent;
+	u64 iova;
+	u64 paddr;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_unmap {
+	struct trace_entry ent;
+	u64 iova;
+	size_t size;
+	size_t unmapped_size;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_error {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u64 iova;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iommu_group_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_iommu_device_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_map {};
+
+struct trace_event_data_offsets_unmap {};
+
+struct trace_event_data_offsets_iommu_error {
+	u32 device;
+	u32 driver;
+};
+
+typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
+
+typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
+
+typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
+
+typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
+
+typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
+
+struct iommu_group {
+	struct kobject kobj;
+	struct kobject *devices_kobj;
+	struct list_head devices;
+	struct xarray pasid_array;
+	struct mutex mutex;
+	void *iommu_data;
+	void (*iommu_data_release)(void *);
+	char *name;
+	int id;
+	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
+	struct iommu_domain *domain;
+	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
+};
+
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
+};
+
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
+};
+
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
+};
+
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+struct group_device {
+	struct list_head list;
+	struct device *dev;
+	char *name;
+};
+
+struct iommu_group_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct iommu_group *, char *);
+	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+};
+
+struct group_for_pci_data {
+	struct pci_dev *pdev;
+	struct iommu_group *group;
+};
+
+struct __group_domain_type {
+	struct device *dev;
+	unsigned int type;
+};
+
+enum chipset_type {
+	NOT_SUPPORTED = 0,
+	SUPPORTED = 1,
+};
+
+struct agp_version {
+	u16 major;
+	u16 minor;
+};
+
+struct agp_kern_info {
+	struct agp_version version;
+	struct pci_dev *device;
+	enum chipset_type chipset;
+	long unsigned int mode;
+	long unsigned int aper_base;
+	size_t aper_size;
+	int max_memory;
+	int current_memory;
+	bool cant_use_aperture;
+	long unsigned int page_mask;
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct agp_bridge_data;
+
+struct drm_hw_lock {
+	volatile unsigned int lock;
+	char padding[60];
+};
+
+enum drm_map_type {
+	_DRM_FRAME_BUFFER = 0,
+	_DRM_REGISTERS = 1,
+	_DRM_SHM = 2,
+	_DRM_AGP = 3,
+	_DRM_SCATTER_GATHER = 4,
+	_DRM_CONSISTENT = 5,
+};
+
+enum drm_map_flags {
+	_DRM_RESTRICTED = 1,
+	_DRM_READ_ONLY = 2,
+	_DRM_LOCKED = 4,
+	_DRM_KERNEL = 8,
+	_DRM_WRITE_COMBINING = 16,
+	_DRM_CONTAINS_LOCK = 32,
+	_DRM_REMOVABLE = 64,
+	_DRM_DRIVER = 128,
+};
+
+struct drm_mode_fb_cmd2 {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pixel_format;
+	__u32 flags;
+	__u32 handles[4];
+	__u32 pitches[4];
+	__u32 offsets[4];
+	__u64 modifier[4];
+};
+
+struct drm_mode_create_dumb {
+	__u32 height;
+	__u32 width;
+	__u32 bpp;
+	__u32 flags;
+	__u32 handle;
+	__u32 pitch;
+	__u64 size;
+};
+
+struct drm_file;
+
+struct drm_lock_data {
+	struct drm_hw_lock *hw_lock;
+	struct drm_file *file_priv;
+	wait_queue_head_t lock_queue;
+	long unsigned int lock_time;
+	spinlock_t spinlock;
+	uint32_t kernel_waiters;
+	uint32_t user_waiters;
+	int idle_has_lock;
+};
+
+struct drm_device;
+
+struct drm_master {
+	struct kref refcount;
+	struct drm_device *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+	struct drm_lock_data lock;
+};
+
+struct drm_modeset_lock {
+	struct ww_mutex mutex;
+	struct list_head head;
+};
+
+struct drm_modeset_acquire_ctx;
+
+struct drm_mode_config_funcs;
+
+struct drm_property;
+
+struct drm_atomic_state;
+
+struct drm_mode_config_helper_funcs;
+
+struct drm_mode_config {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs *funcs;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool prefer_shadow_fbdev;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_vram_mm;
+
+enum switch_power_state {
+	DRM_SWITCH_POWER_ON = 0,
+	DRM_SWITCH_POWER_OFF = 1,
+	DRM_SWITCH_POWER_CHANGING = 2,
+	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
+};
+
+struct drm_fb_helper;
+
+struct drm_open_hash {
+	struct hlist_head *table;
+	u8 order;
+};
+
+struct drm_driver;
+
+struct drm_minor;
+
+struct drm_vblank_crtc;
+
+struct drm_vma_offset_manager;
+
+struct drm_agp_head;
+
+struct drm_device_dma;
+
+struct drm_local_map;
+
+struct drm_sg_mem;
+
+struct drm_device {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	struct drm_minor *accel;
+	bool registered;
+	struct drm_master *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+	struct list_head legacy_dev_list;
+	struct drm_agp_head *agp;
+	struct list_head ctxlist;
+	struct mutex ctxlist_mutex;
+	struct idr ctx_idr;
+	struct list_head maplist;
+	struct drm_open_hash map_hash;
+	struct list_head vmalist;
+	struct drm_device_dma *dma;
+	volatile long int context_flag;
+	int last_context;
+	spinlock_t buf_lock;
+	int buf_use;
+	atomic_t buf_alloc;
+	struct {
+		int context;
+		struct drm_hw_lock *lock;
+	} sigdata;
+	struct drm_local_map *agp_buffer_map;
+	unsigned int agp_buffer_token;
+	struct drm_sg_mem *sg;
+	bool irq_enabled;
+	int irq;
+};
+
+struct drm_buf {
+	int idx;
+	int total;
+	int order;
+	int used;
+	long unsigned int offset;
+	void *address;
+	long unsigned int bus_address;
+	struct drm_buf *next;
+	volatile int waiting;
+	volatile int pending;
+	struct drm_file *file_priv;
+	int context;
+	int while_locked;
+	enum {
+		DRM_LIST_NONE = 0,
+		DRM_LIST_FREE = 1,
+		DRM_LIST_WAIT = 2,
+		DRM_LIST_PEND = 3,
+		DRM_LIST_PRIO = 4,
+		DRM_LIST_RECLAIM = 5,
+	} list;
+	int dev_priv_size;
+	void *dev_private;
+};
+
+struct drm_dma_handle {
+	dma_addr_t busaddr;
+	void *vaddr;
+	size_t size;
+};
+
+struct drm_buf_entry {
+	int buf_size;
+	int buf_count;
+	struct drm_buf *buflist;
+	int seg_count;
+	int page_order;
+	struct drm_dma_handle **seglist;
+	int low_mark;
+	int high_mark;
+};
+
+struct drm_device_dma {
+	struct drm_buf_entry bufs[23];
+	int buf_count;
+	struct drm_buf **buflist;
+	int seg_count;
+	int page_count;
+	long unsigned int *pagelist;
+	long unsigned int byte_count;
+	enum {
+		_DRM_DMA_USE_AGP = 1,
+		_DRM_DMA_USE_SG = 2,
+		_DRM_DMA_USE_FB = 4,
+		_DRM_DMA_USE_PCI_RO = 8,
+	} flags;
+};
+
+struct drm_sg_mem {
+	long unsigned int handle;
+	void *virtual;
+	int pages;
+	struct page **pagelist;
+	dma_addr_t *busaddr;
+};
+
+struct drm_local_map {
+	dma_addr_t offset;
+	long unsigned int size;
+	enum drm_map_type type;
+	enum drm_map_flags flags;
+	void *handle;
+	int mtrr;
+};
+
+struct drm_agp_head {
+	struct agp_kern_info agp_info;
+	struct list_head memory;
+	long unsigned int mode;
+	struct agp_bridge_data *bridge;
+	int enabled;
+	int acquired;
+	long unsigned int base;
+	int agp_mtrr;
+	int cant_use_aperture;
+	long unsigned int page_mask;
+};
+
+struct drm_modeset_acquire_ctx {
+	struct ww_acquire_ctx ww_ctx;
+	struct drm_modeset_lock *contended;
+	depot_stack_handle_t stack_depot;
+	struct list_head locked;
+	bool trylock_only;
+	bool interruptible;
+};
+
+enum drm_mode_status {
+	MODE_OK = 0,
+	MODE_HSYNC = 1,
+	MODE_VSYNC = 2,
+	MODE_H_ILLEGAL = 3,
+	MODE_V_ILLEGAL = 4,
+	MODE_BAD_WIDTH = 5,
+	MODE_NOMODE = 6,
+	MODE_NO_INTERLACE = 7,
+	MODE_NO_DBLESCAN = 8,
+	MODE_NO_VSCAN = 9,
+	MODE_MEM = 10,
+	MODE_VIRTUAL_X = 11,
+	MODE_VIRTUAL_Y = 12,
+	MODE_MEM_VIRT = 13,
+	MODE_NOCLOCK = 14,
+	MODE_CLOCK_HIGH = 15,
+	MODE_CLOCK_LOW = 16,
+	MODE_CLOCK_RANGE = 17,
+	MODE_BAD_HVALUE = 18,
+	MODE_BAD_VVALUE = 19,
+	MODE_BAD_VSCAN = 20,
+	MODE_HSYNC_NARROW = 21,
+	MODE_HSYNC_WIDE = 22,
+	MODE_HBLANK_NARROW = 23,
+	MODE_HBLANK_WIDE = 24,
+	MODE_VSYNC_NARROW = 25,
+	MODE_VSYNC_WIDE = 26,
+	MODE_VBLANK_NARROW = 27,
+	MODE_VBLANK_WIDE = 28,
+	MODE_PANEL = 29,
+	MODE_INTERLACE_WIDTH = 30,
+	MODE_ONE_WIDTH = 31,
+	MODE_ONE_HEIGHT = 32,
+	MODE_ONE_SIZE = 33,
+	MODE_NO_REDUCED = 34,
+	MODE_NO_STEREO = 35,
+	MODE_NO_420 = 36,
+	MODE_STALE = 4294967293,
+	MODE_BAD = 4294967294,
+	MODE_ERROR = 4294967295,
+};
+
+struct drm_framebuffer;
+
+struct drm_format_info;
+
+struct drm_display_mode;
+
+struct drm_mode_config_funcs {
+	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device *);
+	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_format_info {
+	u32 format;
+	u8 depth;
+	u8 num_planes;
+	union {
+		u8 cpp[4];
+		u8 char_per_block[4];
+	};
+	u8 block_w[4];
+	u8 block_h[4];
+	u8 hsub;
+	u8 vsub;
+	bool has_alpha;
+	bool is_yuv;
+	bool is_color_indexed;
+};
+
+struct drm_display_mode {
+	int clock;
+	u16 hdisplay;
+	u16 hsync_start;
+	u16 hsync_end;
+	u16 htotal;
+	u16 hskew;
+	u16 vdisplay;
+	u16 vsync_start;
+	u16 vsync_end;
+	u16 vtotal;
+	u16 vscan;
+	u32 flags;
+	int crtc_clock;
+	u16 crtc_hdisplay;
+	u16 crtc_hblank_start;
+	u16 crtc_hblank_end;
+	u16 crtc_hsync_start;
+	u16 crtc_hsync_end;
+	u16 crtc_htotal;
+	u16 crtc_hskew;
+	u16 crtc_vdisplay;
+	u16 crtc_vblank_start;
+	u16 crtc_vblank_end;
+	u16 crtc_vsync_start;
+	u16 crtc_vsync_end;
+	u16 crtc_vtotal;
+	u16 width_mm;
+	u16 height_mm;
+	u8 type;
+	bool expose_to_userspace;
+	struct list_head head;
+	char name[32];
+	enum drm_mode_status status;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+};
+
+struct drm_mode_config_helper_funcs {
+	void (*atomic_commit_tail)(struct drm_atomic_state *);
+	int (*atomic_commit_setup)(struct drm_atomic_state *);
+};
+
+struct drm_gem_object;
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct drm_ioctl_desc;
+
+struct drm_driver {
+	int (*load)(struct drm_device *, long unsigned int);
+	int (*open)(struct drm_device *, struct drm_file *);
+	void (*postclose)(struct drm_device *, struct drm_file *);
+	void (*lastclose)(struct drm_device *);
+	void (*unload)(struct drm_device *);
+	void (*release)(struct drm_device *);
+	void (*master_set)(struct drm_device *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
+	int (*gem_prime_mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
+	int (*dumb_destroy)(struct drm_file *, struct drm_device *, uint32_t);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+	int (*firstopen)(struct drm_device *);
+	void (*preclose)(struct drm_device *, struct drm_file *);
+	int (*dma_ioctl)(struct drm_device *, void *, struct drm_file *);
+	int (*dma_quiescent)(struct drm_device *);
+	int (*context_dtor)(struct drm_device *, int);
+	irqreturn_t (*irq_handler)(int, void *);
+	void (*irq_preinstall)(struct drm_device *);
+	int (*irq_postinstall)(struct drm_device *);
+	void (*irq_uninstall)(struct drm_device *);
+	u32 (*get_vblank_counter)(struct drm_device *, unsigned int);
+	int (*enable_vblank)(struct drm_device *, unsigned int);
+	void (*disable_vblank)(struct drm_device *, unsigned int);
+	int dev_priv_size;
+};
+
+enum drm_ioctl_flags {
+	DRM_AUTH = 1,
+	DRM_MASTER = 2,
+	DRM_ROOT_ONLY = 4,
+	DRM_UNLOCKED = 16,
+	DRM_RENDER_ALLOW = 32,
+};
+
+typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
+
+struct drm_ioctl_desc {
+	unsigned int cmd;
+	enum drm_ioctl_flags flags;
+	drm_ioctl_t *func;
+	const char *name;
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	long unsigned int flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long int (*wait)(struct dma_fence *, bool, long int);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+};
+
+struct drm_object_properties;
+
+struct drm_mode_object {
+	uint32_t id;
+	uint32_t type;
+	struct drm_object_properties *properties;
+	struct kref refcount;
+	void (*free_cb)(struct kref *);
+};
+
+struct drm_object_properties {
+	int count;
+	struct drm_property *properties[24];
+	uint64_t values[24];
+};
+
+struct drm_property {
+	struct list_head head;
+	struct drm_mode_object base;
+	uint32_t flags;
+	char name[32];
+	uint32_t num_values;
+	uint64_t *values;
+	struct drm_device *dev;
+	struct list_head enum_list;
+};
+
+struct hdr_static_metadata {
+	__u8 eotf;
+	__u8 metadata_type;
+	__u16 max_cll;
+	__u16 max_fall;
+	__u16 min_cll;
+};
+
+struct hdr_sink_metadata {
+	__u32 metadata_type;
+	union {
+		struct hdr_static_metadata hdmi_type1;
+	};
+};
+
+typedef unsigned int drm_magic_t;
+
+struct drm_clip_rect {
+	short unsigned int x1;
+	short unsigned int y1;
+	short unsigned int x2;
+	short unsigned int y2;
+};
+
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+struct drm_event_vblank {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 sequence;
+	__u32 crtc_id;
+};
+
+struct drm_event_crtc_sequence {
+	struct drm_event base;
+	__u64 user_data;
+	__s64 time_ns;
+	__u64 sequence;
+};
+
+enum drm_mode_subconnector {
+	DRM_MODE_SUBCONNECTOR_Automatic = 0,
+	DRM_MODE_SUBCONNECTOR_Unknown = 0,
+	DRM_MODE_SUBCONNECTOR_VGA = 1,
+	DRM_MODE_SUBCONNECTOR_DVID = 3,
+	DRM_MODE_SUBCONNECTOR_DVIA = 4,
+	DRM_MODE_SUBCONNECTOR_Composite = 5,
+	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+	DRM_MODE_SUBCONNECTOR_Component = 8,
+	DRM_MODE_SUBCONNECTOR_SCART = 9,
+	DRM_MODE_SUBCONNECTOR_DisplayPort = 10,
+	DRM_MODE_SUBCONNECTOR_HDMIA = 11,
+	DRM_MODE_SUBCONNECTOR_Native = 15,
+	DRM_MODE_SUBCONNECTOR_Wireless = 18,
+};
+
+struct drm_mode_rect {
+	__s32 x1;
+	__s32 y1;
+	__s32 x2;
+	__s32 y2;
+};
+
+enum drm_connector_force {
+	DRM_FORCE_UNSPECIFIED = 0,
+	DRM_FORCE_OFF = 1,
+	DRM_FORCE_ON = 2,
+	DRM_FORCE_ON_DIGITAL = 3,
+};
+
+enum drm_connector_status {
+	connector_status_connected = 1,
+	connector_status_disconnected = 2,
+	connector_status_unknown = 3,
+};
+
+enum drm_connector_registration_state {
+	DRM_CONNECTOR_INITIALIZING = 0,
+	DRM_CONNECTOR_REGISTERED = 1,
+	DRM_CONNECTOR_UNREGISTERED = 2,
+};
+
+enum subpixel_order {
+	SubPixelUnknown = 0,
+	SubPixelHorizontalRGB = 1,
+	SubPixelHorizontalBGR = 2,
+	SubPixelVerticalRGB = 3,
+	SubPixelVerticalBGR = 4,
+	SubPixelNone = 5,
+};
+
+struct drm_scrambling {
+	bool supported;
+	bool low_rates;
+};
+
+struct drm_scdc {
+	bool supported;
+	bool read_request;
+	struct drm_scrambling scrambling;
+};
+
+struct drm_hdmi_dsc_cap {
+	bool v_1p2;
+	bool native_420;
+	bool all_bpp;
+	u8 bpc_supported;
+	u8 max_slices;
+	int clk_per_slice;
+	u8 max_lanes;
+	u8 max_frl_rate_per_lane;
+	u8 total_chunk_kbytes;
+};
+
+struct drm_hdmi_info {
+	struct drm_scdc scdc;
+	long unsigned int y420_vdb_modes[4];
+	long unsigned int y420_cmdb_modes[4];
+	u64 y420_cmdb_map;
+	u8 y420_dc_modes;
+	u8 max_frl_rate_per_lane;
+	u8 max_lanes;
+	struct drm_hdmi_dsc_cap dsc_cap;
+};
+
+enum drm_link_status {
+	DRM_LINK_STATUS_GOOD = 0,
+	DRM_LINK_STATUS_BAD = 1,
+};
+
+enum drm_panel_orientation {
+	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,
+	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
+	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
+	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
+	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
+};
+
+struct drm_monitor_range_info {
+	u16 min_vfreq;
+	u16 max_vfreq;
+};
+
+struct drm_luminance_range_info {
+	u32 min_luminance;
+	u32 max_luminance;
+};
+
+enum drm_privacy_screen_status {
+	PRIVACY_SCREEN_DISABLED = 0,
+	PRIVACY_SCREEN_ENABLED = 1,
+	PRIVACY_SCREEN_DISABLED_LOCKED = 2,
+	PRIVACY_SCREEN_ENABLED_LOCKED = 3,
+};
+
+struct drm_display_info {
+	unsigned int width_mm;
+	unsigned int height_mm;
+	unsigned int bpc;
+	enum subpixel_order subpixel_order;
+	int panel_orientation;
+	u32 color_formats;
+	const u32 *bus_formats;
+	unsigned int num_bus_formats;
+	u32 bus_flags;
+	int max_tmds_clock;
+	bool dvi_dual;
+	bool is_hdmi;
+	bool has_hdmi_infoframe;
+	bool rgb_quant_range_selectable;
+	u8 edid_hdmi_rgb444_dc_modes;
+	u8 edid_hdmi_ycbcr444_dc_modes;
+	u8 cea_rev;
+	struct drm_hdmi_info hdmi;
+	bool non_desktop;
+	struct drm_monitor_range_info monitor_range;
+	struct drm_luminance_range_info luminance_range;
+	u8 mso_stream_count;
+	u8 mso_pixel_overlap;
+	u32 max_dsc_bpp;
+};
+
+struct drm_connector_tv_margins {
+	unsigned int bottom;
+	unsigned int left;
+	unsigned int right;
+	unsigned int top;
+};
+
+struct drm_tv_connector_state {
+	enum drm_mode_subconnector select_subconnector;
+	enum drm_mode_subconnector subconnector;
+	struct drm_connector_tv_margins margins;
+	unsigned int mode;
+	unsigned int brightness;
+	unsigned int contrast;
+	unsigned int flicker_reduction;
+	unsigned int overscan;
+	unsigned int saturation;
+	unsigned int hue;
+};
+
+struct drm_connector;
+
+struct drm_crtc;
+
+struct drm_encoder;
+
+struct drm_crtc_commit;
+
+struct drm_writeback_job;
+
+struct drm_property_blob;
+
+struct drm_connector_state {
+	struct drm_connector *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	u32 colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_privacy_screen;
+
+struct drm_cmdline_mode {
+	char name[32];
+	bool specified;
+	bool refresh_specified;
+	bool bpp_specified;
+	unsigned int pixel_clock;
+	int xres;
+	int yres;
+	int bpp;
+	int refresh;
+	bool rb;
+	bool interlace;
+	bool cvt;
+	bool margins;
+	enum drm_connector_force force;
+	unsigned int rotation_reflection;
+	enum drm_panel_orientation panel_orientation;
+	struct drm_connector_tv_margins tv_margins;
+};
+
+struct drm_connector_funcs;
+
+struct drm_connector_helper_funcs;
+
+struct drm_edid;
+
+struct i2c_adapter;
+
+struct drm_tile_group;
+
+struct drm_connector {
+	struct drm_device *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	const struct drm_edid *edid_override;
+	struct mutex edid_override_mutex;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+struct drm_crtc_crc_entry;
+
+struct drm_crtc_crc {
+	spinlock_t lock;
+	const char *source;
+	bool opened;
+	bool overflow;
+	struct drm_crtc_crc_entry *entries;
+	int head;
+	int tail;
+	size_t values_cnt;
+	wait_queue_head_t wq;
+};
+
+struct drm_self_refresh_data;
+
+struct drm_plane;
+
+struct drm_crtc_funcs;
+
+struct drm_crtc_helper_funcs;
+
+struct drm_crtc_state;
+
+struct drm_crtc {
+	struct drm_device *dev;
+	struct device_node *port;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	struct drm_plane *primary;
+	struct drm_plane *cursor;
+	unsigned int index;
+	int cursor_x;
+	int cursor_y;
+	bool enabled;
+	struct drm_display_mode mode;
+	struct drm_display_mode hwmode;
+	int x;
+	int y;
+	const struct drm_crtc_funcs *funcs;
+	uint32_t gamma_size;
+	uint16_t *gamma_store;
+	const struct drm_crtc_helper_funcs *helper_private;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_filter_property;
+	struct drm_crtc_state *state;
+	struct list_head commit_list;
+	spinlock_t commit_lock;
+	struct dentry *debugfs_entry;
+	struct drm_crtc_crc crc;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
+	struct drm_self_refresh_data *self_refresh_data;
+};
+
+struct drm_encoder_funcs;
+
+struct drm_encoder_helper_funcs;
+
+struct drm_encoder {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char *name;
+	int encoder_type;
+	unsigned int index;
+	uint32_t possible_crtcs;
+	uint32_t possible_clones;
+	struct drm_crtc *crtc;
+	struct list_head bridge_chain;
+	const struct drm_encoder_funcs *funcs;
+	const struct drm_encoder_helper_funcs *helper_private;
+};
+
+struct __drm_planes_state;
+
+struct __drm_crtcs_state;
+
+struct __drm_connnectors_state;
+
+struct __drm_private_objs_state;
+
+struct drm_atomic_state {
+	struct kref ref;
+	struct drm_device *dev;
+	bool allow_modeset: 1;
+	bool legacy_cursor_update: 1;
+	bool async_update: 1;
+	bool duplicated: 1;
+	struct __drm_planes_state *planes;
+	struct __drm_crtcs_state *crtcs;
+	int num_connector;
+	struct __drm_connnectors_state *connectors;
+	int num_private_objs;
+	struct __drm_private_objs_state *private_objs;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct drm_crtc_commit *fake_commit;
+	struct work_struct commit_work;
+};
+
+struct drm_pending_vblank_event;
+
+struct drm_crtc_commit {
+	struct drm_crtc *crtc;
+	struct kref ref;
+	struct completion flip_done;
+	struct completion hw_done;
+	struct completion cleanup_done;
+	struct list_head commit_entry;
+	struct drm_pending_vblank_event *event;
+	bool abort_completion;
+};
+
+struct drm_writeback_connector;
+
+struct drm_writeback_job {
+	struct drm_writeback_connector *connector;
+	bool prepared;
+	struct work_struct cleanup_work;
+	struct list_head list_entry;
+	struct drm_framebuffer *fb;
+	struct dma_fence *out_fence;
+	void *priv;
+};
+
+struct drm_property_blob {
+	struct drm_mode_object base;
+	struct drm_device *dev;
+	struct list_head head_global;
+	struct list_head head_file;
+	size_t length;
+	void *data;
+};
+
+struct drm_printer;
+
+struct drm_connector_funcs {
+	int (*dpms)(struct drm_connector *, int);
+	void (*reset)(struct drm_connector *);
+	enum drm_connector_status (*detect)(struct drm_connector *, bool);
+	void (*force)(struct drm_connector *);
+	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector *);
+	void (*early_unregister)(struct drm_connector *);
+	void (*destroy)(struct drm_connector *);
+	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
+	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
+	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
+	void (*oob_hotplug_event)(struct drm_connector *);
+	void (*debugfs_init)(struct drm_connector *, struct dentry *);
+};
+
+struct drm_printer {
+	void (*printfn)(struct drm_printer *, struct va_format *);
+	void (*puts)(struct drm_printer *, const char *);
+	void *arg;
+	const char *prefix;
+};
+
+struct drm_connector_helper_funcs {
+	int (*get_modes)(struct drm_connector *);
+	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
+	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
+	int (*mode_valid_ctx)(struct drm_connector *, struct drm_display_mode *, struct drm_modeset_acquire_ctx *, enum drm_mode_status *);
+	struct drm_encoder * (*best_encoder)(struct drm_connector *);
+	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_atomic_state *);
+	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
+	void (*atomic_commit)(struct drm_connector *, struct drm_atomic_state *);
+	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+};
+
+struct edid;
+
+struct drm_edid {
+	size_t size;
+	const struct edid *edid;
+};
+
+struct drm_tile_group {
+	struct kref refcount;
+	struct drm_device *dev;
+	int id;
+	u8 group_data[8];
+};
+
+struct drm_connector_list_iter {
+	struct drm_device *dev;
+	struct drm_connector *conn;
+};
+
+struct drm_prime_file_private {
+	struct mutex lock;
+	struct rb_root dmabufs;
+	struct rb_root handles;
+};
+
+struct drm_file {
+	bool authenticated;
+	bool stereo_allowed;
+	bool universal_planes;
+	bool atomic;
+	bool aspect_ratio_allowed;
+	bool writeback_connectors;
+	bool was_master;
+	bool is_master;
+	struct drm_master *master;
+	spinlock_t master_lookup_lock;
+	struct pid *pid;
+	drm_magic_t magic;
+	struct list_head lhead;
+	struct drm_minor *minor;
+	struct idr object_idr;
+	spinlock_t table_lock;
+	struct idr syncobj_idr;
+	spinlock_t syncobj_table_lock;
+	struct file *filp;
+	void *driver_priv;
+	struct list_head fbs;
+	struct mutex fbs_lock;
+	struct list_head blobs;
+	wait_queue_head_t event_wait;
+	struct list_head pending_event_list;
+	struct list_head event_list;
+	int event_space;
+	struct mutex event_read_lock;
+	struct drm_prime_file_private prime;
+	long unsigned int lock_count;
+};
+
+struct drm_framebuffer_funcs;
+
+struct drm_framebuffer {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char comm[16];
+	const struct drm_format_info *format;
+	const struct drm_framebuffer_funcs *funcs;
+	unsigned int pitches[4];
+	unsigned int offsets[4];
+	uint64_t modifier;
+	unsigned int width;
+	unsigned int height;
+	int flags;
+	int hot_x;
+	int hot_y;
+	struct list_head filp_head;
+	struct drm_gem_object *obj[4];
+};
+
+struct drm_minor {
+	int index;
+	int type;
+	struct device *kdev;
+	struct drm_device *dev;
+	struct dentry *debugfs_root;
+	struct list_head debugfs_list;
+	struct mutex debugfs_lock;
+};
+
+struct drm_vblank_crtc {
+	struct drm_device *dev;
+	wait_queue_head_t queue;
+	struct timer_list disable_timer;
+	seqlock_t seqlock;
+	atomic64_t count;
+	ktime_t time;
+	atomic_t refcount;
+	u32 last;
+	u32 max_vblank_count;
+	unsigned int inmodeset;
+	unsigned int pipe;
+	int framedur_ns;
+	int linedur_ns;
+	struct drm_display_mode hwmode;
+	bool enabled;
+	struct kthread_worker *worker;
+	struct list_head pending_work;
+	wait_queue_head_t work_wait_queue;
+};
+
+enum drm_color_encoding {
+	DRM_COLOR_YCBCR_BT601 = 0,
+	DRM_COLOR_YCBCR_BT709 = 1,
+	DRM_COLOR_YCBCR_BT2020 = 2,
+	DRM_COLOR_ENCODING_MAX = 3,
+};
+
+enum drm_color_range {
+	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
+	DRM_COLOR_YCBCR_FULL_RANGE = 1,
+	DRM_COLOR_RANGE_MAX = 2,
+};
+
+struct drm_rect {
+	int x1;
+	int y1;
+	int x2;
+	int y2;
+};
+
+enum drm_scaling_filter {
+	DRM_SCALING_FILTER_DEFAULT = 0,
+	DRM_SCALING_FILTER_NEAREST_NEIGHBOR = 1,
+};
+
+struct drm_plane_state {
+	struct drm_plane *plane;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct dma_fence *fence;
+	int32_t crtc_x;
+	int32_t crtc_y;
+	uint32_t crtc_w;
+	uint32_t crtc_h;
+	uint32_t src_x;
+	uint32_t src_y;
+	uint32_t src_h;
+	uint32_t src_w;
+	u16 alpha;
+	uint16_t pixel_blend_mode;
+	unsigned int rotation;
+	unsigned int zpos;
+	unsigned int normalized_zpos;
+	enum drm_color_encoding color_encoding;
+	enum drm_color_range color_range;
+	struct drm_property_blob *fb_damage_clips;
+	struct drm_rect src;
+	struct drm_rect dst;
+	bool visible;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+enum drm_plane_type {
+	DRM_PLANE_TYPE_OVERLAY = 0,
+	DRM_PLANE_TYPE_PRIMARY = 1,
+	DRM_PLANE_TYPE_CURSOR = 2,
+};
+
+struct drm_plane_funcs;
+
+struct drm_plane_helper_funcs;
+
+struct drm_plane {
+	struct drm_device *dev;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	uint32_t possible_crtcs;
+	uint32_t *format_types;
+	unsigned int format_count;
+	bool format_default;
+	uint64_t *modifiers;
+	unsigned int modifier_count;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct drm_framebuffer *old_fb;
+	const struct drm_plane_funcs *funcs;
+	struct drm_object_properties properties;
+	enum drm_plane_type type;
+	unsigned int index;
+	const struct drm_plane_helper_funcs *helper_private;
+	struct drm_plane_state *state;
+	struct drm_property *alpha_property;
+	struct drm_property *zpos_property;
+	struct drm_property *rotation_property;
+	struct drm_property *blend_mode_property;
+	struct drm_property *color_encoding_property;
+	struct drm_property *color_range_property;
+	struct drm_property *scaling_filter_property;
+};
+
+struct drm_plane_funcs {
+	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_plane *);
+	void (*reset)(struct drm_plane *);
+	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
+	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
+	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_plane *);
+	void (*early_unregister)(struct drm_plane *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
+	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
+};
+
+struct drm_plane_helper_funcs {
+	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_update)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_plane *, struct drm_atomic_state *);
+	int (*atomic_async_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_async_update)(struct drm_plane *, struct drm_atomic_state *);
+};
+
+struct drm_crtc_crc_entry {
+	bool has_frame_counter;
+	uint32_t frame;
+	uint32_t crcs[10];
+};
+
+struct drm_crtc_state {
+	struct drm_crtc *crtc;
+	bool enable;
+	bool active;
+	bool planes_changed: 1;
+	bool mode_changed: 1;
+	bool active_changed: 1;
+	bool connectors_changed: 1;
+	bool zpos_changed: 1;
+	bool color_mgmt_changed: 1;
+	bool no_vblank: 1;
+	u32 plane_mask;
+	u32 connector_mask;
+	u32 encoder_mask;
+	struct drm_display_mode adjusted_mode;
+	struct drm_display_mode mode;
+	struct drm_property_blob *mode_blob;
+	struct drm_property_blob *degamma_lut;
+	struct drm_property_blob *ctm;
+	struct drm_property_blob *gamma_lut;
+	u32 target_vblank;
+	bool async_flip;
+	bool vrr_enabled;
+	bool self_refresh_active;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_pending_vblank_event *event;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct drm_pending_event {
+	struct completion *completion;
+	void (*completion_release)(struct completion *);
+	struct drm_event *event;
+	struct dma_fence *fence;
+	struct drm_file *file_priv;
+	struct list_head link;
+	struct list_head pending_link;
+};
+
+struct drm_pending_vblank_event {
+	struct drm_pending_event base;
+	unsigned int pipe;
+	u64 sequence;
+	union {
+		struct drm_event base;
+		struct drm_event_vblank vbl;
+		struct drm_event_crtc_sequence seq;
+	} event;
+};
+
+struct drm_mode_set;
+
+struct drm_crtc_funcs {
+	void (*reset)(struct drm_crtc *);
+	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
+	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
+	int (*cursor_move)(struct drm_crtc *, int, int);
+	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_crtc *);
+	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
+	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
+	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
+	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
+	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_crtc *);
+	void (*early_unregister)(struct drm_crtc *);
+	int (*set_crc_source)(struct drm_crtc *, const char *);
+	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
+	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
+	u32 (*get_vblank_counter)(struct drm_crtc *);
+	int (*enable_vblank)(struct drm_crtc *);
+	void (*disable_vblank)(struct drm_crtc *);
+	bool (*get_vblank_timestamp)(struct drm_crtc *, int *, ktime_t *, bool);
+};
+
+struct drm_mode_set {
+	struct drm_framebuffer *fb;
+	struct drm_crtc *crtc;
+	struct drm_display_mode *mode;
+	uint32_t x;
+	uint32_t y;
+	struct drm_connector **connectors;
+	size_t num_connectors;
+};
+
+enum mode_set_atomic;
+
+struct drm_crtc_helper_funcs {
+	void (*dpms)(struct drm_crtc *, int);
+	void (*prepare)(struct drm_crtc *);
+	void (*commit)(struct drm_crtc *);
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
+	void (*mode_set_nofb)(struct drm_crtc *);
+	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
+	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
+	void (*disable)(struct drm_crtc *);
+	int (*atomic_check)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_begin)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_flush)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_crtc *, struct drm_atomic_state *);
+	bool (*get_scanout_position)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+};
+
+struct __drm_planes_state {
+	struct drm_plane *ptr;
+	struct drm_plane_state *state;
+	struct drm_plane_state *old_state;
+	struct drm_plane_state *new_state;
+};
+
+struct __drm_crtcs_state {
+	struct drm_crtc *ptr;
+	struct drm_crtc_state *state;
+	struct drm_crtc_state *old_state;
+	struct drm_crtc_state *new_state;
+	struct drm_crtc_commit *commit;
+	s32 *out_fence_ptr;
+	u64 last_vblank_count;
+};
+
+struct __drm_connnectors_state {
+	struct drm_connector *ptr;
+	struct drm_connector_state *state;
+	struct drm_connector_state *old_state;
+	struct drm_connector_state *new_state;
+	s32 *out_fence_ptr;
+};
+
+struct drm_private_state;
+
+struct drm_private_obj;
+
+struct drm_private_state_funcs {
+	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
+	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_private_state *);
+};
+
+struct drm_private_state {
+	struct drm_atomic_state *state;
+	struct drm_private_obj *obj;
+};
+
+struct drm_private_obj {
+	struct list_head head;
+	struct drm_modeset_lock lock;
+	struct drm_private_state *state;
+	const struct drm_private_state_funcs *funcs;
+};
+
+struct __drm_private_objs_state {
+	struct drm_private_obj *ptr;
+	struct drm_private_state *state;
+	struct drm_private_state *old_state;
+	struct drm_private_state *new_state;
+};
+
+struct drm_bus_cfg {
+	u32 format;
+	u32 flags;
+};
+
+struct drm_bridge;
+
+struct drm_bridge_state {
+	struct drm_private_state base;
+	struct drm_bridge *bridge;
+	struct drm_bus_cfg input_bus_cfg;
+	struct drm_bus_cfg output_bus_cfg;
+};
+
+enum drm_bridge_ops {
+	DRM_BRIDGE_OP_DETECT = 1,
+	DRM_BRIDGE_OP_EDID = 2,
+	DRM_BRIDGE_OP_HPD = 4,
+	DRM_BRIDGE_OP_MODES = 8,
+};
+
+struct drm_bridge_timings;
+
+struct drm_bridge_funcs;
+
+struct drm_bridge {
+	struct drm_private_obj base;
+	struct drm_device *dev;
+	struct drm_encoder *encoder;
+	struct list_head chain_node;
+	struct device_node *of_node;
+	struct list_head list;
+	const struct drm_bridge_timings *timings;
+	const struct drm_bridge_funcs *funcs;
+	void *driver_private;
+	enum drm_bridge_ops ops;
+	int type;
+	bool interlace_allowed;
+	struct i2c_adapter *ddc;
+	struct mutex hpd_mutex;
+	void (*hpd_cb)(void *, enum drm_connector_status);
+	void *hpd_data;
+};
+
+struct drm_encoder_funcs {
+	void (*reset)(struct drm_encoder *);
+	void (*destroy)(struct drm_encoder *);
+	int (*late_register)(struct drm_encoder *);
+	void (*early_unregister)(struct drm_encoder *);
+};
+
+struct drm_encoder_helper_funcs {
+	void (*dpms)(struct drm_encoder *, int);
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*prepare)(struct drm_encoder *);
+	void (*commit)(struct drm_encoder *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*disable)(struct drm_encoder *);
+	void (*enable)(struct drm_encoder *);
+	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+};
+
+enum drm_bridge_attach_flags {
+	DRM_BRIDGE_ATTACH_NO_CONNECTOR = 1,
+};
+
+struct edid;
+
+struct drm_bridge_funcs {
+	int (*attach)(struct drm_bridge *, enum drm_bridge_attach_flags);
+	void (*detach)(struct drm_bridge *);
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*disable)(struct drm_bridge *);
+	void (*post_disable)(struct drm_bridge *);
+	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
+	void (*pre_enable)(struct drm_bridge *);
+	void (*enable)(struct drm_bridge *);
+	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_post_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	struct drm_bridge_state * (*atomic_duplicate_state)(struct drm_bridge *);
+	void (*atomic_destroy_state)(struct drm_bridge *, struct drm_bridge_state *);
+	u32 * (*atomic_get_output_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, unsigned int *);
+	u32 * (*atomic_get_input_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, u32, unsigned int *);
+	int (*atomic_check)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *);
+	struct drm_bridge_state * (*atomic_reset)(struct drm_bridge *);
+	enum drm_connector_status (*detect)(struct drm_bridge *);
+	int (*get_modes)(struct drm_bridge *, struct drm_connector *);
+	struct edid * (*get_edid)(struct drm_bridge *, struct drm_connector *);
+	void (*hpd_notify)(struct drm_bridge *, enum drm_connector_status);
+	void (*hpd_enable)(struct drm_bridge *);
+	void (*hpd_disable)(struct drm_bridge *);
+	void (*debugfs_init)(struct drm_bridge *, struct dentry *);
+};
+
+struct drm_bridge_timings {
+	u32 input_bus_flags;
+	u32 setup_time_ps;
+	u32 hold_time_ps;
+	bool dual_link;
+};
+
+struct drm_info_list {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+struct drm_info_node {
+	struct drm_minor *minor;
+	const struct drm_info_list *info_ent;
+	struct list_head list;
+	struct dentry *dent;
+};
+
+enum drm_driver_feature {
+	DRIVER_GEM = 1,
+	DRIVER_MODESET = 2,
+	DRIVER_RENDER = 8,
+	DRIVER_ATOMIC = 16,
+	DRIVER_SYNCOBJ = 32,
+	DRIVER_SYNCOBJ_TIMELINE = 64,
+	DRIVER_COMPUTE_ACCEL = 128,
+	DRIVER_USE_AGP = 33554432,
+	DRIVER_LEGACY = 67108864,
+	DRIVER_PCI_DMA = 134217728,
+	DRIVER_SG = 268435456,
+	DRIVER_HAVE_DMA = 536870912,
+	DRIVER_HAVE_IRQ = 1073741824,
+	DRIVER_KMS_LEGACY_CONTEXT = 2147483648,
+};
+
+struct drm_framebuffer_funcs {
+	void (*destroy)(struct drm_framebuffer *);
+	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
+	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
+};
+
+enum drm_debug_category {
+	DRM_UT_CORE = 0,
+	DRM_UT_DRIVER = 1,
+	DRM_UT_KMS = 2,
+	DRM_UT_PRIME = 3,
+	DRM_UT_ATOMIC = 4,
+	DRM_UT_VBL = 5,
+	DRM_UT_STATE = 6,
+	DRM_UT_LEASE = 7,
+	DRM_UT_DP = 8,
+	DRM_UT_DRMRES = 9,
+};
+
+struct drm_writeback_connector {
+	struct drm_connector base;
+	struct drm_encoder encoder;
+	struct drm_property_blob *pixel_formats_blob_ptr;
+	spinlock_t job_lock;
+	struct list_head job_queue;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	long unsigned int fence_seqno;
+	char timeline_name[32];
+};
+
+struct drm_prop_enum_list {
+	int type;
+	const char *name;
+};
+
+struct drm_auth {
+	drm_magic_t magic;
+};
+
+struct drm_mode_modeinfo {
+	__u32 clock;
+	__u16 hdisplay;
+	__u16 hsync_start;
+	__u16 hsync_end;
+	__u16 htotal;
+	__u16 hskew;
+	__u16 vdisplay;
+	__u16 vsync_start;
+	__u16 vsync_end;
+	__u16 vtotal;
+	__u16 vscan;
+	__u32 vrefresh;
+	__u32 flags;
+	__u32 type;
+	char name[32];
+};
+
+struct drm_mode_atomic {
+	__u32 flags;
+	__u32 count_objs;
+	__u64 objs_ptr;
+	__u64 count_props_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u64 reserved;
+	__u64 user_data;
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct sync_file {
+	struct file *file;
+	char user_name[32];
+	struct list_head sync_file_list;
+	wait_queue_head_t wq;
+	long unsigned int flags;
+	struct dma_fence *fence;
+	struct dma_fence_cb cb;
+};
+
+struct drm_out_fence_state {
+	s32 *out_fence_ptr;
+	struct sync_file *sync_file;
+	int fd;
+};
+
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
+};
+
+struct drm_mode_crtc_lut {
+	__u32 crtc_id;
+	__u32 gamma_size;
+	__u64 red;
+	__u64 green;
+	__u64 blue;
+};
+
+struct drm_color_lut {
+	__u16 red;
+	__u16 green;
+	__u16 blue;
+	__u16 reserved;
+};
+
+enum drm_color_lut_tests {
+	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
+	DRM_COLOR_LUT_NON_DECREASING = 2,
+};
+
+struct drm_mode_fb_cmd {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pitch;
+	__u32 bpp;
+	__u32 depth;
+	__u32 handle;
+};
+
+struct drm_mm;
+
+struct drm_mm_node {
+	long unsigned int color;
+	u64 start;
+	u64 size;
+	struct drm_mm *mm;
+	struct list_head node_list;
+	struct list_head hole_stack;
+	struct rb_node rb;
+	struct rb_node rb_hole_size;
+	struct rb_node rb_hole_addr;
+	u64 __subtree_last;
+	u64 hole_size;
+	u64 subtree_max_hole;
+	long unsigned int flags;
+};
+
+struct drm_mm {
+	void (*color_adjust)(const struct drm_mm_node *, long unsigned int, u64 *, u64 *);
+	struct list_head hole_stack;
+	struct drm_mm_node head_node;
+	struct rb_root_cached interval_tree;
+	struct rb_root_cached holes_size;
+	struct rb_root holes_addr;
+	long unsigned int scan_active;
+};
+
+struct drm_vma_offset_manager {
+	rwlock_t vm_lock;
+	struct drm_mm vm_addr_space_mm;
+};
+
+struct drm_client_dev;
+
+struct drm_client_funcs {
+	struct module *owner;
+	void (*unregister)(struct drm_client_dev *);
+	int (*restore)(struct drm_client_dev *);
+	int (*hotplug)(struct drm_client_dev *);
+};
+
+struct drm_client_dev {
+	struct drm_device *dev;
+	const char *name;
+	struct list_head list;
+	const struct drm_client_funcs *funcs;
+	struct drm_file *file;
+	struct mutex modeset_mutex;
+	struct drm_mode_set *modesets;
+};
+
+struct drm_client_buffer {
+	struct drm_client_dev *client;
+	u32 pitch;
+	struct drm_gem_object *gem;
+	struct iosys_map map;
+	struct drm_framebuffer *fb;
+};
+
+struct drm_vma_offset_node {
+	rwlock_t vm_lock;
+	struct drm_mm_node vm_node;
+	struct rb_root vm_files;
+	void *driver_private;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list *fences;
+};
+
+struct drm_gem_object_funcs;
+
+struct drm_gem_lru;
+
+struct drm_gem_object {
+	struct kref refcount;
+	unsigned int handle_count;
+	struct drm_device *dev;
+	struct file *filp;
+	struct drm_vma_offset_node vma_node;
+	size_t size;
+	int name;
+	struct dma_buf *dma_buf;
+	struct dma_buf_attachment *import_attach;
+	struct dma_resv *resv;
+	struct dma_resv _resv;
+	const struct drm_gem_object_funcs *funcs;
+	struct list_head lru_node;
+	struct drm_gem_lru *lru;
+};
+
+struct drm_gem_object_funcs {
+	void (*free)(struct drm_gem_object *);
+	int (*open)(struct drm_gem_object *, struct drm_file *);
+	void (*close)(struct drm_gem_object *, struct drm_file *);
+	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
+	struct dma_buf * (*export)(struct drm_gem_object *, int);
+	int (*pin)(struct drm_gem_object *);
+	void (*unpin)(struct drm_gem_object *);
+	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
+	int (*vmap)(struct drm_gem_object *, struct iosys_map *);
+	void (*vunmap)(struct drm_gem_object *, struct iosys_map *);
+	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct drm_gem_lru {
+	struct mutex *lock;
+	long int count;
+	struct list_head list;
+};
+
+struct drm_mode_crtc {
+	__u64 set_connectors_ptr;
+	__u32 count_connectors;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 x;
+	__u32 y;
+	__u32 gamma_size;
+	__u32 mode_valid;
+	struct drm_mode_modeinfo mode;
+};
+
+typedef void (*drmres_release_t)(struct drm_device *, void *);
+
+struct displayid_header {
+	u8 rev;
+	u8 bytes;
+	u8 prod_id;
+	u8 ext_count;
+};
+
+struct displayid_block {
+	u8 tag;
+	u8 rev;
+	u8 num_bytes;
+};
+
+struct displayid_iter {
+	const struct drm_edid *drm_edid;
+	const u8 *section;
+	int length;
+	int idx;
+	int ext_index;
+};
+
+struct drm_client_offset {
+	int x;
+	int y;
+};
+
+enum drm_minor_type {
+	DRM_MINOR_PRIMARY = 0,
+	DRM_MINOR_CONTROL = 1,
+	DRM_MINOR_RENDER = 2,
+	DRM_MINOR_ACCEL = 32,
+};
+
+struct drm_mode_map_dumb {
+	__u32 handle;
+	__u32 pad;
+	__u64 offset;
+};
+
+struct drm_mode_destroy_dumb {
+	__u32 handle;
+};
+
+struct drm_mode_get_connector {
+	__u64 encoders_ptr;
+	__u64 modes_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_modes;
+	__u32 count_props;
+	__u32 count_encoders;
+	__u32 encoder_id;
+	__u32 connector_id;
+	__u32 connector_type;
+	__u32 connector_type_id;
+	__u32 connection;
+	__u32 mm_width;
+	__u32 mm_height;
+	__u32 subpixel;
+	__u32 pad;
+};
+
+struct drm_mode_connector_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 connector_id;
+};
+
+struct drm_mode_obj_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	long unsigned int locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct display_timing;
+
+struct drm_panel;
+
+struct drm_panel_funcs {
+	int (*prepare)(struct drm_panel *);
+	int (*enable)(struct drm_panel *);
+	int (*disable)(struct drm_panel *);
+	int (*unprepare)(struct drm_panel *);
+	int (*get_modes)(struct drm_panel *, struct drm_connector *);
+	enum drm_panel_orientation (*get_orientation)(struct drm_panel *);
+	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
+	void (*debugfs_init)(struct drm_panel *, struct dentry *);
+};
+
+struct backlight_device;
+
+struct drm_panel {
+	struct device *dev;
+	struct backlight_device *backlight;
+	const struct drm_panel_funcs *funcs;
+	int connector_type;
+	struct list_head list;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_ops;
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct drm_conn_prop_enum_list {
+	int type;
+	const char *name;
+	struct ida ida;
+};
+
+struct drm_mode_get_encoder {
+	__u32 encoder_id;
+	__u32 encoder_type;
+	__u32 crtc_id;
+	__u32 possible_crtcs;
+	__u32 possible_clones;
+};
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+};
+
+struct drm_gem_close {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_gem_flink {
+	__u32 handle;
+	__u32 name;
+};
+
+struct drm_gem_open {
+	__u32 name;
+	__u32 handle;
+	__u64 size;
+};
+
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct displayid_tiled_block {
+	struct displayid_block base;
+	u8 tile_cap;
+	u8 topo[3];
+	u8 tile_size[4];
+	u8 tile_pixel_bezel[5];
+	u8 topology_id[8];
+};
+
+struct displayid_detailed_timings_1 {
+	u8 pixel_clock[3];
+	u8 flags;
+	u8 hactive[2];
+	u8 hblank[2];
+	u8 hsync[2];
+	u8 hsw[2];
+	u8 vactive[2];
+	u8 vblank[2];
+	u8 vsync[2];
+	u8 vsw[2];
+};
+
+struct displayid_detailed_timing_block {
+	struct displayid_block base;
+	struct displayid_detailed_timings_1 timings[0];
+};
+
+struct displayid_vesa_vendor_specific_block {
+	struct displayid_block base;
+	u8 oui[3];
+	u8 data_structure_type;
+	u8 mso;
+};
+
+struct est_timings {
+	u8 t1;
+	u8 t2;
+	u8 mfg_rsvd;
+};
+
+struct std_timing {
+	u8 hsize;
+	u8 vfreq_aspect;
+};
+
+struct detailed_pixel_timing {
+	u8 hactive_lo;
+	u8 hblank_lo;
+	u8 hactive_hblank_hi;
+	u8 vactive_lo;
+	u8 vblank_lo;
+	u8 vactive_vblank_hi;
+	u8 hsync_offset_lo;
+	u8 hsync_pulse_width_lo;
+	u8 vsync_offset_pulse_width_lo;
+	u8 hsync_vsync_offset_pulse_width_hi;
+	u8 width_mm_lo;
+	u8 height_mm_lo;
+	u8 width_height_mm_hi;
+	u8 hborder;
+	u8 vborder;
+	u8 misc;
+};
+
+struct detailed_data_string {
+	u8 str[13];
+};
+
+struct detailed_data_monitor_range {
+	u8 min_vfreq;
+	u8 max_vfreq;
+	u8 min_hfreq_khz;
+	u8 max_hfreq_khz;
+	u8 pixel_clock_mhz;
+	u8 flags;
+	union {
+		struct {
+			u8 reserved;
+			u8 hfreq_start_khz;
+			u8 c;
+			__le16 m;
+			u8 k;
+			u8 j;
+		} __attribute__((packed)) gtf2;
+		struct {
+			u8 version;
+			u8 data1;
+			u8 data2;
+			u8 supported_aspects;
+			u8 flags;
+			u8 supported_scalings;
+			u8 preferred_refresh;
+		} cvt;
+	} formula;
+} __attribute__((packed));
+
+struct detailed_data_wpindex {
+	u8 white_yx_lo;
+	u8 white_x_hi;
+	u8 white_y_hi;
+	u8 gamma;
+};
+
+struct cvt_timing {
+	u8 code[3];
+};
+
+struct detailed_non_pixel {
+	u8 pad1;
+	u8 type;
+	u8 pad2;
+	union {
+		struct detailed_data_string str;
+		struct detailed_data_monitor_range range;
+		struct detailed_data_wpindex color;
+		struct std_timing timings[6];
+		struct cvt_timing cvt[4];
+	} data;
+} __attribute__((packed));
+
+struct detailed_timing {
+	__le16 pixel_clock;
+	union {
+		struct detailed_pixel_timing pixel_data;
+		struct detailed_non_pixel other_data;
+	} data;
+};
+
+struct edid {
+	u8 header[8];
+	u8 mfg_id[2];
+	u8 prod_code[2];
+	u32 serial;
+	u8 mfg_week;
+	u8 mfg_year;
+	u8 version;
+	u8 revision;
+	u8 input;
+	u8 width_cm;
+	u8 height_cm;
+	u8 gamma;
+	u8 features;
+	u8 red_green_lo;
+	u8 blue_white_lo;
+	u8 red_x;
+	u8 red_y;
+	u8 green_x;
+	u8 green_y;
+	u8 blue_x;
+	u8 blue_y;
+	u8 white_x;
+	u8 white_y;
+	struct est_timings established_timings;
+	struct std_timing standard_timings[8];
+	struct detailed_timing detailed_timings[4];
+	u8 extensions;
+	u8 checksum;
+};
+
+struct cea_sad {
+	u8 format;
+	u8 channels;
+	u8 freq;
+	u8 byte2;
+};
+
+struct detailed_mode_closure {
+	struct drm_connector *connector;
+	const struct drm_edid *drm_edid;
+	bool preferred;
+	u32 quirks;
+	int modes;
+};
+
+struct edid_quirk {
+	u32 panel_id;
+	u32 quirks;
+};
+
+struct minimode {
+	short int w;
+	short int h;
+	short int r;
+	short int rb;
+};
+
+struct drm_edid_iter {
+	const struct drm_edid *drm_edid;
+	int index;
+};
+
+enum edid_block_status {
+	EDID_BLOCK_OK = 0,
+	EDID_BLOCK_READ_FAIL = 1,
+	EDID_BLOCK_NULL = 2,
+	EDID_BLOCK_ZERO = 3,
+	EDID_BLOCK_HEADER_CORRUPT = 4,
+	EDID_BLOCK_HEADER_REPAIR = 5,
+	EDID_BLOCK_HEADER_FIXED = 6,
+	EDID_BLOCK_CHECKSUM = 7,
+	EDID_BLOCK_VERSION = 8,
+};
+
+typedef int read_block_fn(void *, u8 *, unsigned int, size_t);
+
+typedef void detailed_cb(const struct detailed_timing *, void *);
+
+struct stereo_mandatory_mode {
+	int width;
+	int height;
+	int vrefresh;
+	unsigned int flags;
+};
+
+struct cea_db_iter {
+	struct drm_edid_iter edid_iter;
+	struct displayid_iter displayid_iter;
+	const u8 *collection;
+	int index;
+	int end;
+};
+
+struct cea_db {
+	u8 tag_length;
+	u8 data[0];
+};
+
+struct drm_mode_fb_dirty_cmd {
+	__u32 fb_id;
+	__u32 flags;
+	__u32 color;
+	__u32 num_clips;
+	__u64 clips_ptr;
+};
+
+struct drm_mode_rmfb_work {
+	struct work_struct work;
+	struct list_head fbs;
+};
+
+struct drm_mode_create_lease {
+	__u64 object_ids;
+	__u32 object_count;
+	__u32 flags;
+	__u32 lessee_id;
+	__u32 fd;
+};
+
+struct drm_mode_list_lessees {
+	__u32 count_lessees;
+	__u32 pad;
+	__u64 lessees_ptr;
+};
+
+struct drm_mode_get_lease {
+	__u32 count_objects;
+	__u32 pad;
+	__u64 objects_ptr;
+};
+
+struct drm_mode_revoke_lease {
+	__u32 lessee_id;
+};
+
+struct drm_version {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	__kernel_size_t name_len;
+	char *name;
+	__kernel_size_t date_len;
+	char *date;
+	__kernel_size_t desc_len;
+	char *desc;
+};
+
+struct drm_unique {
+	__kernel_size_t unique_len;
+	char *unique;
+};
+
+struct drm_client {
+	int idx;
+	int auth;
+	long unsigned int pid;
+	long unsigned int uid;
+	long unsigned int magic;
+	long unsigned int iocs;
+};
+
+enum drm_stat_type {
+	_DRM_STAT_LOCK = 0,
+	_DRM_STAT_OPENS = 1,
+	_DRM_STAT_CLOSES = 2,
+	_DRM_STAT_IOCTLS = 3,
+	_DRM_STAT_LOCKS = 4,
+	_DRM_STAT_UNLOCKS = 5,
+	_DRM_STAT_VALUE = 6,
+	_DRM_STAT_BYTE = 7,
+	_DRM_STAT_COUNT = 8,
+	_DRM_STAT_IRQ = 9,
+	_DRM_STAT_PRIMARY = 10,
+	_DRM_STAT_SECONDARY = 11,
+	_DRM_STAT_DMA = 12,
+	_DRM_STAT_SPECIAL = 13,
+	_DRM_STAT_MISSED = 14,
+};
+
+struct drm_stats {
+	long unsigned int count;
+	struct {
+		long unsigned int value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+};
+
+struct drm_get_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_set_client_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drmres_node {
+	struct list_head entry;
+	drmres_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct drmres {
+	struct drmres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+enum drm_mm_insert_mode {
+	DRM_MM_INSERT_BEST = 0,
+	DRM_MM_INSERT_LOW = 1,
+	DRM_MM_INSERT_HIGH = 2,
+	DRM_MM_INSERT_EVICT = 3,
+	DRM_MM_INSERT_ONCE = 2147483648,
+	DRM_MM_INSERT_HIGHEST = 2147483650,
+	DRM_MM_INSERT_LOWEST = 2147483649,
+};
+
+struct drm_mm_scan {
+	struct drm_mm *mm;
+	u64 size;
+	u64 alignment;
+	u64 remainder_mask;
+	u64 range_start;
+	u64 range_end;
+	u64 hit_start;
+	u64 hit_end;
+	long unsigned int color;
+	enum drm_mm_insert_mode mode;
+};
+
+struct drm_mode_card_res {
+	__u64 fb_id_ptr;
+	__u64 crtc_id_ptr;
+	__u64 connector_id_ptr;
+	__u64 encoder_id_ptr;
+	__u32 count_fbs;
+	__u32 count_crtcs;
+	__u32 count_connectors;
+	__u32 count_encoders;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+};
+
+struct drm_named_mode {
+	const char *name;
+	unsigned int pixel_clock_khz;
+	unsigned int xres;
+	unsigned int yres;
+	unsigned int flags;
+};
+
+struct drm_mode_set_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__s32 crtc_x;
+	__s32 crtc_y;
+	__u32 crtc_w;
+	__u32 crtc_h;
+	__u32 src_x;
+	__u32 src_y;
+	__u32 src_h;
+	__u32 src_w;
+};
+
+struct drm_mode_get_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 possible_crtcs;
+	__u32 gamma_size;
+	__u32 count_format_types;
+	__u64 format_type_ptr;
+};
+
+struct drm_mode_get_plane_res {
+	__u64 plane_id_ptr;
+	__u32 count_planes;
+};
+
+struct drm_mode_cursor {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+};
+
+struct drm_mode_cursor2 {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+	__s32 hot_x;
+	__s32 hot_y;
+};
+
+struct drm_mode_crtc_page_flip_target {
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__u32 sequence;
+	__u64 user_data;
+};
+
+struct drm_format_modifier_blob {
+	__u32 version;
+	__u32 flags;
+	__u32 count_formats;
+	__u32 formats_offset;
+	__u32 count_modifiers;
+	__u32 modifiers_offset;
+};
+
+struct drm_format_modifier {
+	__u64 formats;
+	__u32 offset;
+	__u32 pad;
+	__u64 modifier;
+};
+
+struct drm_mode_obj_get_properties {
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_props;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct drm_print_iterator {
+	void *data;
+	ssize_t start;
+	ssize_t remain;
+	ssize_t offset;
+};
+
+struct dma_buf_export_info {
+	const char *exp_name;
+	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
+};
+
+struct drm_prime_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+};
+
+struct drm_prime_member {
+	struct dma_buf *dma_buf;
+	uint32_t handle;
+	struct rb_node dmabuf_rb;
+	struct rb_node handle_rb;
+};
+
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct class *, struct class_attribute *, char *);
+	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct trace_event_raw_drm_vblank_event {
+	struct trace_entry ent;
+	int crtc;
+	unsigned int seq;
+	ktime_t time;
+	bool high_prec;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_queued {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_delivered {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_drm_vblank_event {};
+
+struct trace_event_data_offsets_drm_vblank_event_queued {};
+
+struct trace_event_data_offsets_drm_vblank_event_delivered {};
+
+typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
+
+typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
+
+typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
+
+struct drm_mode_property_enum {
+	__u64 value;
+	char name[32];
+};
+
+struct drm_mode_get_property {
+	__u64 values_ptr;
+	__u64 enum_blob_ptr;
+	__u32 prop_id;
+	__u32 flags;
+	char name[32];
+	__u32 count_values;
+	__u32 count_enum_blobs;
+};
+
+struct drm_mode_get_blob {
+	__u32 blob_id;
+	__u32 length;
+	__u64 data;
+};
+
+struct drm_mode_create_blob {
+	__u64 data;
+	__u32 length;
+	__u32 blob_id;
+};
+
+struct drm_mode_destroy_blob {
+	__u32 blob_id;
+};
+
+struct drm_property_enum {
+	uint64_t value;
+	struct list_head head;
+	char name[32];
+};
+
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct drm_syncobj_create {
+	__u32 handle;
+	__u32 flags;
+};
+
+struct drm_syncobj_destroy {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_syncobj_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_transfer {
+	__u32 src_handle;
+	__u32 dst_handle;
+	__u64 src_point;
+	__u64 dst_point;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct drm_syncobj_wait {
+	__u64 handles;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_wait {
+	__u64 handles;
+	__u64 points;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_array {
+	__u64 handles;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_array {
+	__u64 handles;
+	__u64 points;
+	__u32 count_handles;
+	__u32 flags;
+};
+
+struct dma_fence_chain {
+	struct dma_fence base;
+	struct dma_fence *prev;
+	u64 prev_seqno;
+	struct dma_fence *fence;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
+};
+
+struct drm_syncobj {
+	struct kref refcount;
+	struct dma_fence *fence;
+	struct list_head cb_list;
+	spinlock_t lock;
+	struct file *file;
+};
+
+struct syncobj_wait_entry {
+	struct list_head node;
+	struct task_struct *task;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	u64 point;
+};
+
+struct drm_vblank_work {
+	struct kthread_work base;
+	struct drm_vblank_crtc *vblank;
+	u64 count;
+	int cancelling;
+	struct list_head node;
+};
+
+struct drm_vma_offset_file {
+	struct rb_node vm_rb;
+	struct drm_file *vm_tag;
+	long unsigned int vm_count;
+};
+
+enum drm_vblank_seq_type {
+	_DRM_VBLANK_ABSOLUTE = 0,
+	_DRM_VBLANK_RELATIVE = 1,
+	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
+	_DRM_VBLANK_EVENT = 67108864,
+	_DRM_VBLANK_FLIP = 134217728,
+	_DRM_VBLANK_NEXTONMISS = 268435456,
+	_DRM_VBLANK_SECONDARY = 536870912,
+	_DRM_VBLANK_SIGNAL = 1073741824,
+};
+
+struct drm_wait_vblank_request {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long unsigned int signal;
+};
+
+struct drm_wait_vblank_reply {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long int tval_sec;
+	long int tval_usec;
+};
+
+union drm_wait_vblank {
+	struct drm_wait_vblank_request request;
+	struct drm_wait_vblank_reply reply;
+};
+
+struct drm_modeset_ctl {
+	__u32 crtc;
+	__u32 cmd;
+};
+
+struct drm_crtc_get_sequence {
+	__u32 crtc_id;
+	__u32 active;
+	__u64 sequence;
+	__s64 sequence_ns;
+};
+
+struct drm_crtc_queue_sequence {
+	__u32 crtc_id;
+	__u32 flags;
+	__u64 sequence;
+	__u64 user_data;
+};
+
+typedef bool (*drm_vblank_get_scanout_position_func)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+
+struct agp_memory {
+	struct agp_memory *next;
+	struct agp_memory *prev;
+	struct agp_bridge_data *bridge;
+	struct page **pages;
+	size_t page_count;
+	int key;
+	int num_scratch_pages;
+	off_t pg_start;
+	u32 type;
+	u32 physical;
+	bool is_bound;
+	bool is_flushed;
+	struct list_head mapped_list;
+	struct scatterlist *sg_list;
+	int num_sg;
+};
+
+struct drm_map {
+	long unsigned int offset;
+	long unsigned int size;
+	enum drm_map_type type;
+	enum drm_map_flags flags;
+	void *handle;
+	int mtrr;
+};
+
+struct drm_buf_desc {
+	int count;
+	int size;
+	int low_mark;
+	int high_mark;
+	enum {
+		_DRM_PAGE_ALIGN = 1,
+		_DRM_AGP_BUFFER = 2,
+		_DRM_SG_BUFFER = 4,
+		_DRM_FB_BUFFER = 8,
+		_DRM_PCI_BUFFER_RO = 16,
+	} flags;
+	long unsigned int agp_start;
+};
+
+struct drm_buf_info {
+	int count;
+	struct drm_buf_desc *list;
+};
+
+struct drm_buf_free {
+	int count;
+	int *list;
+};
+
+struct drm_buf_pub {
+	int idx;
+	int total;
+	int used;
+	void *address;
+};
+
+struct drm_buf_map {
+	int count;
+	void *virtual;
+	struct drm_buf_pub *list;
+};
+
+struct drm_hash_item {
+	struct hlist_node head;
+	long unsigned int key;
+};
+
+typedef struct drm_dma_handle drm_dma_handle_t;
+
+struct drm_map_list {
+	struct list_head head;
+	struct drm_hash_item hash;
+	struct drm_local_map *map;
+	uint64_t user_token;
+	struct drm_master *master;
+};
+
+struct drm_agp_mem {
+	long unsigned int handle;
+	struct agp_memory *memory;
+	long unsigned int bound;
+	int pages;
+	struct list_head head;
+};
+
+typedef unsigned int drm_context_t;
+
+struct drm_ctx_priv_map {
+	unsigned int ctx_id;
+	void *handle;
+};
+
+enum drm_ctx_flags {
+	_DRM_CONTEXT_PRESERVED = 1,
+	_DRM_CONTEXT_2DONLY = 2,
+};
+
+struct drm_ctx {
+	drm_context_t handle;
+	enum drm_ctx_flags flags;
+};
+
+struct drm_ctx_res {
+	int count;
+	struct drm_ctx *contexts;
+};
+
+struct drm_ctx_list {
+	struct list_head head;
+	drm_context_t handle;
+	struct drm_file *tag;
+};
+
+struct drm_control {
+	enum {
+		DRM_ADD_COMMAND = 0,
+		DRM_RM_COMMAND = 1,
+		DRM_INST_HANDLER = 2,
+		DRM_UNINST_HANDLER = 3,
+	} func;
+	int irq;
+};
+
+struct drm_vma_entry {
+	struct list_head head;
+	struct vm_area_struct *vma;
+	pid_t pid;
+};
+
+enum drm_lock_flags {
+	_DRM_LOCK_READY = 1,
+	_DRM_LOCK_QUIESCENT = 2,
+	_DRM_LOCK_FLUSH = 4,
+	_DRM_LOCK_FLUSH_ALL = 8,
+	_DRM_HALT_ALL_QUEUES = 16,
+	_DRM_HALT_CUR_QUEUES = 32,
+};
+
+struct drm_lock {
+	int context;
+	enum drm_lock_flags flags;
+};
+
+struct drm_scatter_gather {
+	long unsigned int size;
+	long unsigned int handle;
+};
+
+enum drm_dma_flags {
+	_DRM_DMA_BLOCK = 1,
+	_DRM_DMA_WHILE_LOCKED = 2,
+	_DRM_DMA_PRIORITY = 4,
+	_DRM_DMA_WAIT = 16,
+	_DRM_DMA_SMALLER_OK = 32,
+	_DRM_DMA_LARGER_OK = 64,
+};
+
+struct drm_dma {
+	int context;
+	int send_count;
+	int *send_indices;
+	int *send_sizes;
+	enum drm_dma_flags flags;
+	int request_count;
+	int request_size;
+	int *request_indices;
+	int *request_sizes;
+	int granted_count;
+};
+
+typedef int drm_ioctl_compat_t(struct file *, unsigned int, long unsigned int);
+
+struct drm_version_32 {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	u32 name_len;
+	u32 name;
+	u32 date_len;
+	u32 date;
+	u32 desc_len;
+	u32 desc;
+};
+
+typedef struct drm_version_32 drm_version32_t;
+
+struct drm_unique32 {
+	u32 unique_len;
+	u32 unique;
+};
+
+typedef struct drm_unique32 drm_unique32_t;
+
+struct drm_map32 {
+	u32 offset;
+	u32 size;
+	enum drm_map_type type;
+	enum drm_map_flags flags;
+	u32 handle;
+	int mtrr;
+};
+
+typedef struct drm_map32 drm_map32_t;
+
+struct drm_client32 {
+	int idx;
+	int auth;
+	u32 pid;
+	u32 uid;
+	u32 magic;
+	u32 iocs;
+};
+
+typedef struct drm_client32 drm_client32_t;
+
+struct drm_stats32 {
+	u32 count;
+	struct {
+		u32 value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+typedef struct drm_stats32 drm_stats32_t;
+
+struct drm_buf_desc32 {
+	int count;
+	int size;
+	int low_mark;
+	int high_mark;
+	int flags;
+	u32 agp_start;
+};
+
+typedef struct drm_buf_desc32 drm_buf_desc32_t;
+
+struct drm_buf_info32 {
+	int count;
+	u32 list;
+};
+
+typedef struct drm_buf_info32 drm_buf_info32_t;
+
+struct drm_buf_pub32 {
+	int idx;
+	int total;
+	int used;
+	u32 address;
+};
+
+typedef struct drm_buf_pub32 drm_buf_pub32_t;
+
+struct drm_buf_map32 {
+	int count;
+	u32 virtual;
+	u32 list;
+};
+
+typedef struct drm_buf_map32 drm_buf_map32_t;
+
+struct drm_buf_free32 {
+	int count;
+	u32 list;
+};
+
+typedef struct drm_buf_free32 drm_buf_free32_t;
+
+struct drm_ctx_priv_map32 {
+	unsigned int ctx_id;
+	u32 handle;
+};
+
+typedef struct drm_ctx_priv_map32 drm_ctx_priv_map32_t;
+
+struct drm_ctx_res32 {
+	int count;
+	u32 contexts;
+};
+
+typedef struct drm_ctx_res32 drm_ctx_res32_t;
+
+struct drm_dma32 {
+	int context;
+	int send_count;
+	u32 send_indices;
+	u32 send_sizes;
+	enum drm_dma_flags flags;
+	int request_count;
+	int request_size;
+	u32 request_indices;
+	u32 request_sizes;
+	int granted_count;
+};
+
+typedef struct drm_dma32 drm_dma32_t;
+
+struct drm_scatter_gather32 {
+	u32 size;
+	u32 handle;
+};
+
+typedef struct drm_scatter_gather32 drm_scatter_gather32_t;
+
+struct drm_wait_vblank_request32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	u32 signal;
+};
+
+struct drm_wait_vblank_reply32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	s32 tval_sec;
+	s32 tval_usec;
+};
+
+union drm_wait_vblank32 {
+	struct drm_wait_vblank_request32 request;
+	struct drm_wait_vblank_reply32 reply;
+};
+
+typedef union drm_wait_vblank32 drm_wait_vblank32_t;
+
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+enum drm_lvds_dual_link_pixels {
+	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
+	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
+};
+
+enum drm_of_lvds_pixels {
+	DRM_OF_LVDS_EVEN = 1,
+	DRM_OF_LVDS_ODD = 2,
+};
+
+struct component_match;
+
+struct drm_irq_busid {
+	int irq;
+	int busnum;
+	int devnum;
+	int funcnum;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
+	struct mutex mutex;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	struct bus_type *bus;
+	struct kset glue_dirs;
+	struct class *class;
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
+};
+
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
+};
+
+struct component;
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
+};
+
+enum dpm_order {
+	DPM_ORDER_NONE = 0,
+	DPM_ORDER_DEV_AFTER_PARENT = 1,
+	DPM_ORDER_PARENT_BEFORE_DEV = 2,
+	DPM_ORDER_DEV_LAST = 3,
+};
+
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
+};
+
+union device_attr_group_devres {
+	const struct attribute_group *group;
+	const struct attribute_group **groups;
+};
+
+struct class_dir {
+	struct kobject kobj;
+	struct class *class;
+};
+
+struct root_device {
+	struct device dev;
+	struct module *owner;
+};
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+typedef void *acpi_handle;
+
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
+};
+
+struct probe {
+	struct probe *next;
+	dev_t dev;
+	long unsigned int range;
+	struct module *owner;
+	kobj_probe_t *get;
+	int (*lock)(dev_t, void *);
+	void *data;
+};
+
+struct kobj_map {
+	struct probe *probes[255];
+	struct mutex *lock;
+};
+
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
+};
+
+struct attribute_container {
+	struct list_head node;
+	struct klist containers;
+	struct class *class;
+	const struct attribute_group *grp;
+	struct device_attribute **attrs;
+	int (*match)(struct attribute_container *, struct device *);
+	long unsigned int flags;
+};
+
+struct internal_container {
+	struct klist_node node;
+	struct attribute_container *cont;
+	struct device classdev;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	long unsigned int addr;
+	unsigned int order;
+};
+
+struct transport_container;
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+typedef void * (*devcon_match_fn_t)(const struct fwnode_handle *, const char *, void *);
+
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT = 93,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT = 94,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT = 95,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT = 96,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT = 97,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT = 98,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 99,
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_QSGMII = 18,
+	PHY_INTERFACE_MODE_TRGMII = 19,
+	PHY_INTERFACE_MODE_100BASEX = 20,
+	PHY_INTERFACE_MODE_1000BASEX = 21,
+	PHY_INTERFACE_MODE_2500BASEX = 22,
+	PHY_INTERFACE_MODE_5GBASER = 23,
+	PHY_INTERFACE_MODE_RXAUI = 24,
+	PHY_INTERFACE_MODE_XAUI = 25,
+	PHY_INTERFACE_MODE_10GBASER = 26,
+	PHY_INTERFACE_MODE_25GBASER = 27,
+	PHY_INTERFACE_MODE_USXGMII = 28,
+	PHY_INTERFACE_MODE_10GKR = 29,
+	PHY_INTERFACE_MODE_QUSGMII = 30,
+	PHY_INTERFACE_MODE_1000BASEKX = 31,
+	PHY_INTERFACE_MODE_MAX = 32,
+} phy_interface_t;
+
+struct pm_clk_notifier_block {
+	struct notifier_block nb;
+	struct dev_pm_domain *pm_domain;
+	char *con_ids[0];
+};
+
+struct software_node_ref_args {
+	const struct software_node *node;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct swnode {
+	struct kobject kobj;
+	struct fwnode_handle fwnode;
+	const struct software_node *node;
+	int id;
+	struct ida child_ids;
+	struct list_head entry;
+	struct list_head children;
+	struct swnode *parent;
+	unsigned int allocated: 1;
+	unsigned int managed: 1;
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	long unsigned int size;
+};
+
+struct req {
+	struct req *next;
+	struct completion done;
+	int err;
+	const char *name;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	struct device *dev;
+};
+
+enum fw_opt {
+	FW_OPT_UEVENT = 1,
+	FW_OPT_NOWAIT = 2,
+	FW_OPT_USERHELPER = 4,
+	FW_OPT_NO_WARN = 8,
+	FW_OPT_NOCACHE = 16,
+	FW_OPT_NOFALLBACK_SYSFS = 32,
+	FW_OPT_FALLBACK_PLATFORM = 64,
+	FW_OPT_PARTIAL = 128,
+};
+
+enum fw_status {
+	FW_STATUS_UNKNOWN = 0,
+	FW_STATUS_LOADING = 1,
+	FW_STATUS_DONE = 2,
+	FW_STATUS_ABORTED = 3,
+};
+
+struct fw_state {
+	struct completion completion;
+	enum fw_status status;
+};
+
+struct firmware_cache;
+
+struct fw_priv {
+	struct kref ref;
+	struct list_head list;
+	struct firmware_cache *fwc;
+	struct fw_state fw_st;
+	void *data;
+	size_t size;
+	size_t allocated_size;
+	size_t offset;
+	u32 opt_flags;
+	const char *fw_name;
+};
+
+struct firmware_cache {
+	spinlock_t lock;
+	struct list_head head;
+	int state;
+};
+
+struct firmware_work {
+	struct work_struct work;
+	struct module *module;
+	const char *name;
+	struct device *device;
+	void *context;
+	void (*cont)(const struct firmware *, void *);
+	u32 opt_flags;
+};
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
+};
+
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
+
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
+
+typedef int (*regmap_hw_reg_noinc_read)(void *, unsigned int, void *, size_t);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_noinc_write)(void *, unsigned int, const void *, size_t);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+typedef void (*regmap_hw_free_context)(void *);
+
+struct regmap_bus {
+	bool fast_io;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_noinc_write reg_noinc_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_reg_noinc_read reg_noinc_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool free_on_exit;
+};
+
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t reg_downshift;
+	size_t val_bytes;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
+};
+
+struct hwspinlock;
+
+struct regcache_ops;
+
+struct regmap {
+	union {
+		struct mutex mutex;
+		struct {
+			spinlock_t spinlock;
+			long unsigned int spinlock_flags;
+		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			long unsigned int raw_spinlock_flags;
+		};
+	};
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
+	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
+};
+
+struct regcache_ops {
+	const char *name;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
+};
+
+struct regcache_rbtree_node {
+	void *block;
+	long int *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct regmap_range_node {
+	struct rb_node node;
+	const char *name;
+	struct regmap *map;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+struct regmap_debugfs_node {
+	struct regmap *map;
+	struct list_head link;
+};
+
+struct regmap_field {
+	struct regmap *regmap;
+	unsigned int mask;
+	unsigned int shift;
+	unsigned int reg;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct trace_event_raw_regmap_reg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bulk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	u32 __data_loc_buf;
+	int val_len;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_block {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_sync {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_status;
+	u32 __data_loc_type;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bool {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flag;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_async {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_drop_region {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int from;
+	unsigned int to;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regmap_reg {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bulk {
+	u32 name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_regmap_block {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_sync {
+	u32 name;
+	u32 status;
+	u32 type;
+};
+
+struct trace_event_data_offsets_regmap_bool {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_async {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_drop_region {
+	u32 name;
+};
+
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_bulk_write)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_bulk_read)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
+
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
+
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct i2c_client {
+	short unsigned int flags;
+	short unsigned int addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+struct regmap_mmio_context {
+	void *regs;
+	unsigned int val_bytes;
+	bool big_endian;
+	bool attached_clk;
+	struct clk *clk;
+	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
+	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	unsigned int type_base;
+	unsigned int *virt_reg_base;
+	const unsigned int *config_base;
+	unsigned int irq_reg_stride;
+	unsigned int init_ack_masked: 1;
+	unsigned int mask_invert: 1;
+	unsigned int mask_unmask_non_inverted: 1;
+	unsigned int use_ack: 1;
+	unsigned int ack_invert: 1;
+	unsigned int clear_ack: 1;
+	unsigned int wake_invert: 1;
+	unsigned int runtime_pm: 1;
+	unsigned int type_invert: 1;
+	unsigned int type_in_mask: 1;
+	unsigned int clear_on_unmask: 1;
+	unsigned int not_fixed_stride: 1;
+	unsigned int status_invert: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_type_reg;
+	int num_virt_regs;
+	int num_config_bases;
+	int num_config_regs;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*handle_mask_sync)(struct regmap *, int, unsigned int, unsigned int, void *);
+	int (*set_type_virt)(unsigned int **, unsigned int, long unsigned int, int);
+	int (*set_type_config)(unsigned int **, unsigned int, const struct regmap_irq *, int);
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct regmap_irq_chip_data {
+	struct mutex lock;
+	struct irq_chip irq_chip;
+	struct regmap *map;
+	const struct regmap_irq_chip *chip;
+	int irq_base;
+	struct irq_domain *domain;
+	int irq;
+	int wake_count;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	void *status_reg_buf;
+	unsigned int *main_status_buf;
+	unsigned int *status_buf;
+	unsigned int *mask_buf;
+	unsigned int *mask_buf_def;
+	unsigned int *wake_buf;
+	unsigned int *type_buf;
+	unsigned int *type_buf_def;
+	unsigned int **virt_buf;
+	unsigned int **config_buf;
+	unsigned int irq_reg_stride;
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	unsigned int clear_status: 1;
+};
+
+struct devcd_entry {
+	struct device devcd_dev;
+	void *data;
+	size_t datalen;
+	struct mutex mutex;
+	bool delete_work;
+	struct module *owner;
+	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
+	void (*free)(void *);
+	struct delayed_work del_wk;
+	struct device *failing_dev;
+};
+
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
+
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
+};
+
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct brd_device {
+	int brd_number;
+	struct gendisk *brd_disk;
+	struct list_head brd_list;
+	spinlock_t brd_lock;
+	struct xarray brd_pages;
+	u64 brd_nr_pages;
+};
+
+enum scale_freq_source {
+	SCALE_FREQ_SOURCE_CPUFREQ = 0,
+	SCALE_FREQ_SOURCE_ARCH = 1,
+	SCALE_FREQ_SOURCE_CPPC = 2,
+};
+
+struct scale_freq_data {
+	enum scale_freq_source source;
+	void (*set_freq_scale)();
+};
+
+struct trace_event_raw_thermal_pressure_update {
+	struct trace_entry ent;
+	long unsigned int thermal_pressure;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_pressure_update {};
+
+typedef void (*btf_trace_thermal_pressure_update)(void *, int, long unsigned int);
+
+struct virtio_blk_geometry {
+	__virtio16 cylinders;
+	__u8 heads;
+	__u8 sectors;
+};
+
+struct virtio_blk_config {
+	__virtio64 capacity;
+	__virtio32 size_max;
+	__virtio32 seg_max;
+	struct virtio_blk_geometry geometry;
+	__virtio32 blk_size;
+	__u8 physical_block_exp;
+	__u8 alignment_offset;
+	__virtio16 min_io_size;
+	__virtio32 opt_io_size;
+	__u8 wce;
+	__u8 unused;
+	__virtio16 num_queues;
+	__virtio32 max_discard_sectors;
+	__virtio32 max_discard_seg;
+	__virtio32 discard_sector_alignment;
+	__virtio32 max_write_zeroes_sectors;
+	__virtio32 max_write_zeroes_seg;
+	__u8 write_zeroes_may_unmap;
+	__u8 unused1[3];
+	__virtio32 max_secure_erase_sectors;
+	__virtio32 max_secure_erase_seg;
+	__virtio32 secure_erase_sector_alignment;
+};
+
+struct virtio_blk_outhdr {
+	__virtio32 type;
+	__virtio32 ioprio;
+	__virtio64 sector;
+};
+
+struct virtio_blk_discard_write_zeroes {
+	__le64 sector;
+	__le32 num_sectors;
+	__le32 flags;
+};
+
+struct virtio_blk_vq {
+	struct virtqueue *vq;
+	spinlock_t lock;
+	char name[16];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct virtio_blk {
+	struct mutex vdev_mutex;
+	struct virtio_device *vdev;
+	struct gendisk *disk;
+	struct blk_mq_tag_set tag_set;
+	struct work_struct config_work;
+	int index;
+	int num_vqs;
+	int io_queues[3];
+	struct virtio_blk_vq *vqs;
+};
+
+struct virtblk_req {
+	struct virtio_blk_outhdr out_hdr;
+	u8 status;
+	struct sg_table sg_table;
+	struct scatterlist sg[0];
+};
+
+typedef unsigned int __kernel_old_dev_t;
+
+typedef u32 compat_dev_t;
+
+enum {
+	LO_FLAGS_READ_ONLY = 1,
+	LO_FLAGS_AUTOCLEAR = 4,
+	LO_FLAGS_PARTSCAN = 8,
+	LO_FLAGS_DIRECT_IO = 16,
+};
+
+struct loop_info {
+	int lo_number;
+	__kernel_old_dev_t lo_device;
+	long unsigned int lo_inode;
+	__kernel_old_dev_t lo_rdevice;
+	int lo_offset;
+	int lo_encrypt_type;
+	int lo_encrypt_key_size;
+	int lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	long unsigned int lo_init[2];
+	char reserved[4];
+};
+
+struct loop_info64 {
+	__u64 lo_device;
+	__u64 lo_inode;
+	__u64 lo_rdevice;
+	__u64 lo_offset;
+	__u64 lo_sizelimit;
+	__u32 lo_number;
+	__u32 lo_encrypt_type;
+	__u32 lo_encrypt_key_size;
+	__u32 lo_flags;
+	__u8 lo_file_name[64];
+	__u8 lo_crypt_name[64];
+	__u8 lo_encrypt_key[32];
+	__u64 lo_init[2];
+};
+
+struct loop_config {
+	__u32 fd;
+	__u32 block_size;
+	struct loop_info64 info;
+	__u64 __reserved[8];
+};
+
+enum {
+	Lo_unbound = 0,
+	Lo_bound = 1,
+	Lo_rundown = 2,
+	Lo_deleting = 3,
+};
+
+struct loop_device {
+	int lo_number;
+	loff_t lo_offset;
+	loff_t lo_sizelimit;
+	int lo_flags;
+	char lo_file_name[64];
+	struct file *lo_backing_file;
+	struct block_device *lo_device;
+	gfp_t old_gfp_mask;
+	spinlock_t lo_lock;
+	int lo_state;
+	spinlock_t lo_work_lock;
+	struct workqueue_struct *workqueue;
+	struct work_struct rootcg_work;
+	struct list_head rootcg_cmd_list;
+	struct list_head idle_worker_list;
+	struct rb_root worker_tree;
+	struct timer_list timer;
+	bool use_dio;
+	bool sysfs_inited;
+	struct request_queue *lo_queue;
+	struct blk_mq_tag_set tag_set;
+	struct gendisk *lo_disk;
+	struct mutex lo_mutex;
+	bool idr_visible;
+};
+
+struct loop_cmd {
+	struct list_head list_entry;
+	bool use_aio;
+	atomic_t ref;
+	long int ret;
+	struct kiocb iocb;
+	struct bio_vec *bvec;
+	struct cgroup_subsys_state *blkcg_css;
+	struct cgroup_subsys_state *memcg_css;
+};
+
+struct loop_worker {
+	struct rb_node rb_node;
+	struct work_struct work;
+	struct list_head cmd_list;
+	struct list_head idle_list;
+	struct loop_device *lo;
+	struct cgroup_subsys_state *blkcg_css;
+	long unsigned int last_ran_at;
+};
+
+struct compat_loop_info {
+	compat_int_t lo_number;
+	compat_dev_t lo_device;
+	compat_ulong_t lo_inode;
+	compat_dev_t lo_rdevice;
+	compat_int_t lo_offset;
+	compat_int_t lo_encrypt_type;
+	compat_int_t lo_encrypt_key_size;
+	compat_int_t lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	compat_ulong_t lo_init[2];
+	char reserved[4];
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+enum {
+	NBD_CMD_READ = 0,
+	NBD_CMD_WRITE = 1,
+	NBD_CMD_DISC = 2,
+	NBD_CMD_FLUSH = 3,
+	NBD_CMD_TRIM = 4,
+};
+
+struct nbd_request {
+	__be32 magic;
+	__be32 type;
+	char handle[8];
+	__be64 from;
+	__be32 len;
+} __attribute__((packed));
+
+struct nbd_reply {
+	__be32 magic;
+	__be32 error;
+	char handle[8];
+};
+
+enum {
+	NBD_ATTR_UNSPEC = 0,
+	NBD_ATTR_INDEX = 1,
+	NBD_ATTR_SIZE_BYTES = 2,
+	NBD_ATTR_BLOCK_SIZE_BYTES = 3,
+	NBD_ATTR_TIMEOUT = 4,
+	NBD_ATTR_SERVER_FLAGS = 5,
+	NBD_ATTR_CLIENT_FLAGS = 6,
+	NBD_ATTR_SOCKETS = 7,
+	NBD_ATTR_DEAD_CONN_TIMEOUT = 8,
+	NBD_ATTR_DEVICE_LIST = 9,
+	NBD_ATTR_BACKEND_IDENTIFIER = 10,
+	__NBD_ATTR_MAX = 11,
+};
+
+enum {
+	NBD_DEVICE_ITEM_UNSPEC = 0,
+	NBD_DEVICE_ITEM = 1,
+	__NBD_DEVICE_ITEM_MAX = 2,
+};
+
+enum {
+	NBD_DEVICE_UNSPEC = 0,
+	NBD_DEVICE_INDEX = 1,
+	NBD_DEVICE_CONNECTED = 2,
+	__NBD_DEVICE_MAX = 3,
+};
+
+enum {
+	NBD_SOCK_ITEM_UNSPEC = 0,
+	NBD_SOCK_ITEM = 1,
+	__NBD_SOCK_ITEM_MAX = 2,
+};
+
+enum {
+	NBD_SOCK_UNSPEC = 0,
+	NBD_SOCK_FD = 1,
+	__NBD_SOCK_MAX = 2,
+};
+
+enum {
+	NBD_CMD_UNSPEC = 0,
+	NBD_CMD_CONNECT = 1,
+	NBD_CMD_DISCONNECT = 2,
+	NBD_CMD_RECONFIGURE = 3,
+	NBD_CMD_LINK_DEAD = 4,
+	NBD_CMD_STATUS = 5,
+	__NBD_CMD_MAX = 6,
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+};
+
+struct genl_split_ops;
+
+struct genl_info;
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+struct genl_family {
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_split_ops;
+	u8 n_mcgrps;
+	u8 resv_start_op;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_split_ops *split_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+	int id;
+	unsigned int mcgrp_offset;
+};
+
+struct genl_split_ops {
+	union {
+		struct {
+			int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+			int (*doit)(struct sk_buff *, struct genl_info *);
+			void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+		};
+		struct {
+			int (*start)(struct netlink_callback *);
+			int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+			int (*done)(struct netlink_callback *);
+		};
+	};
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	void *userhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+struct trace_event_raw_nbd_transport_event {
+	struct trace_entry ent;
+	struct request *req;
+	u64 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_nbd_send_request {
+	struct trace_entry ent;
+	struct nbd_request *nbd_request;
+	u64 dev_index;
+	struct request *request;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nbd_transport_event {};
+
+struct trace_event_data_offsets_nbd_send_request {};
+
+typedef void (*btf_trace_nbd_header_sent)(void *, struct request *, u64);
+
+typedef void (*btf_trace_nbd_payload_sent)(void *, struct request *, u64);
+
+typedef void (*btf_trace_nbd_header_received)(void *, struct request *, u64);
+
+typedef void (*btf_trace_nbd_payload_received)(void *, struct request *, u64);
+
+typedef void (*btf_trace_nbd_send_request)(void *, struct nbd_request *, int, struct request *);
+
+struct nbd_sock {
+	struct socket *sock;
+	struct mutex tx_lock;
+	struct request *pending;
+	int sent;
+	bool dead;
+	int fallback_index;
+	int cookie;
+};
+
+struct nbd_device;
+
+struct recv_thread_args {
+	struct work_struct work;
+	struct nbd_device *nbd;
+	int index;
+};
+
+struct nbd_config;
+
+struct nbd_device {
+	struct blk_mq_tag_set tag_set;
+	int index;
+	refcount_t config_refs;
+	refcount_t refs;
+	struct nbd_config *config;
+	struct mutex config_lock;
+	struct gendisk *disk;
+	struct workqueue_struct *recv_workq;
+	struct work_struct remove_work;
+	struct list_head list;
+	struct task_struct *task_setup;
+	long unsigned int flags;
+	pid_t pid;
+	char *backend;
+};
+
+struct link_dead_args {
+	struct work_struct work;
+	int index;
+};
+
+struct nbd_config {
+	u32 flags;
+	long unsigned int runtime_flags;
+	u64 dead_conn_timeout;
+	struct nbd_sock **socks;
+	int num_connections;
+	atomic_t live_connections;
+	wait_queue_head_t conn_wait;
+	atomic_t recv_threads;
+	wait_queue_head_t recv_wq;
+	unsigned int blksize_bits;
+	loff_t bytesize;
+	struct dentry *dbg_dir;
+};
+
+struct nbd_cmd {
+	struct nbd_device *nbd;
+	struct mutex lock;
+	int index;
+	int cookie;
+	int retries;
+	blk_status_t status;
+	long unsigned int flags;
+	u32 cmd_cookie;
+};
+
+enum da9063_irqs {
+	DA9063_IRQ_ONKEY = 0,
+	DA9063_IRQ_ALARM = 1,
+	DA9063_IRQ_TICK = 2,
+	DA9063_IRQ_ADC_RDY = 3,
+	DA9063_IRQ_SEQ_RDY = 4,
+	DA9063_IRQ_WAKE = 5,
+	DA9063_IRQ_TEMP = 6,
+	DA9063_IRQ_COMP_1V2 = 7,
+	DA9063_IRQ_LDO_LIM = 8,
+	DA9063_IRQ_REG_UVOV = 9,
+	DA9063_IRQ_DVC_RDY = 10,
+	DA9063_IRQ_VDD_MON = 11,
+	DA9063_IRQ_WARN = 12,
+	DA9063_IRQ_GPI0 = 13,
+	DA9063_IRQ_GPI1 = 14,
+	DA9063_IRQ_GPI2 = 15,
+	DA9063_IRQ_GPI3 = 16,
+	DA9063_IRQ_GPI4 = 17,
+	DA9063_IRQ_GPI5 = 18,
+	DA9063_IRQ_GPI6 = 19,
+	DA9063_IRQ_GPI7 = 20,
+	DA9063_IRQ_GPI8 = 21,
+	DA9063_IRQ_GPI9 = 22,
+	DA9063_IRQ_GPI10 = 23,
+	DA9063_IRQ_GPI11 = 24,
+	DA9063_IRQ_GPI12 = 25,
+	DA9063_IRQ_GPI13 = 26,
+	DA9063_IRQ_GPI14 = 27,
+	DA9063_IRQ_GPI15 = 28,
+};
+
+struct mfd_cell_acpi_match;
+
+struct mfd_cell {
+	const char *name;
+	int id;
+	int level;
+	int (*enable)(struct platform_device *);
+	int (*disable)(struct platform_device *);
+	int (*suspend)(struct platform_device *);
+	int (*resume)(struct platform_device *);
+	void *platform_data;
+	size_t pdata_size;
+	const struct software_node *swnode;
+	const char *of_compatible;
+	const u64 of_reg;
+	bool use_of_reg;
+	const struct mfd_cell_acpi_match *acpi_match;
+	int num_resources;
+	const struct resource *resources;
+	bool ignore_resource_conflicts;
+	bool pm_runtime_no_callbacks;
+	const char * const *parent_supplies;
+	int num_parent_supplies;
+};
+
+struct mfd_cell_acpi_match {
+	const char *pnpid;
+	const long long unsigned int adr;
+};
+
+struct mfd_of_node_entry {
+	struct list_head list;
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_board_info;
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
+	void (*remove)(struct i2c_client *);
+	int (*probe_new)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const short unsigned int *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_board_info {
+	char type[20];
+	short unsigned int flags;
+	short unsigned int addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+enum da9063_variant_codes {
+	PMIC_DA9063_AD = 3,
+	PMIC_DA9063_BB = 5,
+	PMIC_DA9063_CA = 6,
+	PMIC_DA9063_DA = 7,
+	PMIC_DA9063_EA = 8,
+};
+
+enum da9063_page_sel_buf_fmt {
+	DA9063_PAGE_SEL_BUF_PAGE_REG = 0,
+	DA9063_PAGE_SEL_BUF_PAGE_VAL = 1,
+	DA9063_PAGE_SEL_BUF_SIZE = 2,
+};
+
+enum da9063_paged_read_msgs {
+	DA9063_PAGED_READ_MSG_PAGE_SEL = 0,
+	DA9063_PAGED_READ_MSG_REG_SEL = 1,
+	DA9063_PAGED_READ_MSG_DATA = 2,
+	DA9063_PAGED_READ_MSG_CNT = 3,
+};
+
+enum {
+	DA9063_DEV_ID_REG = 0,
+	DA9063_VAR_ID_REG = 1,
+	DA9063_CHIP_ID_REGS = 2,
+};
+
+struct syscon_platform_data {
+	const char *label;
+};
+
+struct syscon {
+	struct device_node *np;
+	struct regmap *regmap;
+	struct list_head list;
+};
+
+struct dma_fence_array;
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct dma_fence_array {
+	struct dma_fence base;
+	spinlock_t lock;
+	unsigned int num_fences;
+	atomic_t num_pending;
+	struct dma_fence **fences;
+	struct irq_work work;
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
+};
+
+struct dma_buf_sync {
+	__u64 flags;
+};
+
+struct dma_buf_export_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_import_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct sync_merge_data {
+	char name[32];
+	__s32 fd2;
+	__s32 fence;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct sync_fence_info {
+	char obj_name[32];
+	char driver_name[32];
+	__s32 status;
+	__u32 flags;
+	__u64 timestamp_ns;
+};
+
+struct sync_file_info {
+	char name[32];
+	__s32 status;
+	__u32 flags;
+	__u32 num_fences;
+	__u32 pad;
+	__u64 sync_fence_info;
+};
+
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence *table[0];
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+};
+
+struct bsg_device;
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	short unsigned int queue_depth;
+	short unsigned int max_queue_depth;
+	short unsigned int last_queue_full_depth;
+	short unsigned int last_queue_full_count;
+	long unsigned int last_queue_full_time;
+	long unsigned int queue_ramp_up_period;
+	long unsigned int last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd *vpd_pg0;
+	struct scsi_vpd *vpd_pg83;
+	struct scsi_vpd *vpd_pg80;
+	struct scsi_vpd *vpd_pg89;
+	struct scsi_vpd *vpd_pgb0;
+	struct scsi_vpd *vpd_pgb1;
+	struct scsi_vpd *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int use_16_for_sync: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int manage_start_stop: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	long unsigned int supported_events[1];
+	long unsigned int pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	atomic_t iotmo_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	long unsigned int sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	long unsigned int last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	short unsigned int max_cmd_len;
+	int this_id;
+	int can_queue;
+	short int cmd_per_lun;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	long unsigned int base;
+	long unsigned int io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	long unsigned int hostdata[0];
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	long unsigned int starget_data[0];
+};
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+};
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	long unsigned int jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	short unsigned int cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	long unsigned int state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+enum scsi_timeout_action {
+	SCSI_EH_DONE = 0,
+	SCSI_EH_RESET_TIMER = 1,
+	SCSI_EH_NOT_HANDLED = 2,
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*compat_ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	void (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum scsi_timeout_action (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	int can_queue;
+	int this_id;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	short int cmd_per_lun;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	int rpm_autosuspend_delay;
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
+	void *priv;
+};
+
+struct trace_event_raw_dma_fence {
+	struct trace_entry ent;
+	u32 __data_loc_driver;
+	u32 __data_loc_timeline;
+	unsigned int context;
+	unsigned int seqno;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dma_fence {
+	u32 driver;
+	u32 timeline;
+};
+
+typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
+
+struct default_wait_cb {
+	struct dma_fence_cb base;
+	struct task_struct *task;
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void *reserved[1];
+		void *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	unsigned int dxfer_len;
+	void *dxferp;
+	unsigned char *cmdp;
+	void *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+struct compat_cdrom_generic_command {
+	unsigned char cmd[12];
+	compat_caddr_t buffer;
+	compat_uint_t buflen;
+	compat_int_t stat;
+	compat_caddr_t sense;
+	unsigned char data_direction;
+	unsigned char pad[3];
+	compat_int_t quiet;
+	compat_int_t timeout;
+	compat_caddr_t unused;
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 2500,
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
+};
+
+enum scsi_ml_status {
+	SCSIML_STAT_OK = 0,
+	SCSIML_STAT_RESV_CONFLICT = 1,
+	SCSIML_STAT_NOSPC = 2,
+	SCSIML_STAT_MED_ERROR = 3,
+	SCSIML_STAT_TGT_FAILURE = 4,
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+struct scsi_proc_entry {
+	struct list_head entry;
+	const struct scsi_host_template *sht;
+	struct proc_dir_entry *proc_dir;
+	unsigned int present;
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct double_list {
+	struct list_head *top;
+	struct list_head *bottom;
+};
+
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
+};
+
+struct virtio_scsi_cmd_req {
+	__u8 lun[8];
+	__virtio64 tag;
+	__u8 task_attr;
+	__u8 prio;
+	__u8 crn;
+	__u8 cdb[32];
+} __attribute__((packed));
+
+struct virtio_scsi_cmd_req_pi {
+	__u8 lun[8];
+	__virtio64 tag;
+	__u8 task_attr;
+	__u8 prio;
+	__u8 crn;
+	__virtio32 pi_bytesout;
+	__virtio32 pi_bytesin;
+	__u8 cdb[32];
+} __attribute__((packed));
+
+struct virtio_scsi_cmd_resp {
+	__virtio32 sense_len;
+	__virtio32 resid;
+	__virtio16 status_qualifier;
+	__u8 status;
+	__u8 response;
+	__u8 sense[96];
+};
+
+struct virtio_scsi_ctrl_tmf_req {
+	__virtio32 type;
+	__virtio32 subtype;
+	__u8 lun[8];
+	__virtio64 tag;
+};
+
+struct virtio_scsi_ctrl_tmf_resp {
+	__u8 response;
+};
+
+struct virtio_scsi_ctrl_an_req {
+	__virtio32 type;
+	__u8 lun[8];
+	__virtio32 event_requested;
+};
+
+struct virtio_scsi_ctrl_an_resp {
+	__virtio32 event_actual;
+	__u8 response;
+} __attribute__((packed));
+
+struct virtio_scsi_event {
+	__virtio32 event;
+	__u8 lun[8];
+	__virtio32 reason;
+};
+
+struct virtio_scsi_config {
+	__virtio32 num_queues;
+	__virtio32 seg_max;
+	__virtio32 max_sectors;
+	__virtio32 cmd_per_lun;
+	__virtio32 event_info_size;
+	__virtio32 sense_size;
+	__virtio32 cdb_size;
+	__virtio16 max_channel;
+	__virtio16 max_target;
+	__virtio32 max_lun;
+};
+
+enum scsi_host_guard_type {
+	SHOST_DIX_GUARD_CRC = 1,
+	SHOST_DIX_GUARD_IP = 2,
+};
+
+struct virtio_scsi_cmd {
+	struct scsi_cmnd *sc;
+	struct completion *comp;
+	union {
+		struct virtio_scsi_cmd_req cmd;
+		struct virtio_scsi_cmd_req_pi cmd_pi;
+		struct virtio_scsi_ctrl_tmf_req tmf;
+		struct virtio_scsi_ctrl_an_req an;
+	} req;
+	union {
+		struct virtio_scsi_cmd_resp cmd;
+		struct virtio_scsi_ctrl_tmf_resp tmf;
+		struct virtio_scsi_ctrl_an_resp an;
+		struct virtio_scsi_event evt;
+	} resp;
+	long: 8;
+	long: 64;
+} __attribute__((packed));
+
+struct virtio_scsi;
+
+struct virtio_scsi_event_node {
+	struct virtio_scsi *vscsi;
+	struct virtio_scsi_event event;
+	struct work_struct work;
+};
+
+struct virtio_scsi_vq {
+	spinlock_t vq_lock;
+	struct virtqueue *vq;
+};
+
+struct virtio_scsi {
+	struct virtio_device *vdev;
+	struct virtio_scsi_event_node event_list[8];
+	u32 num_queues;
+	struct hlist_node node;
+	bool stop_events;
+	struct virtio_scsi_vq ctrl_vq;
+	struct virtio_scsi_vq event_vq;
+	struct virtio_scsi_vq req_vqs[0];
+};
+
+enum pr_status {
+	PR_STS_SUCCESS = 0,
+	PR_STS_IOERR = 2,
+	PR_STS_RESERVATION_CONFLICT = 24,
+	PR_STS_RETRY_PATH_FAILURE = 917504,
+	PR_STS_PATH_FAST_FAILED = 983040,
+	PR_STS_PATH_FAILED = 65536,
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct opal_dev;
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+};
+
+enum {
+	mechtype_caddy = 0,
+	mechtype_tray = 1,
+	mechtype_popup = 2,
+	mechtype_individual_changer = 4,
+	mechtype_cartridge_changer = 5,
+};
+
+struct event_header {
+	__be16 data_len;
+	__u8 notification_class: 3;
+	__u8 reserved1: 4;
+	__u8 nea: 1;
+	__u8 supp_event_class;
+};
+
+struct media_event_desc {
+	__u8 media_event_code: 4;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 media_present: 1;
+	__u8 reserved2: 6;
+	__u8 start_slot;
+	__u8 end_slot;
+};
+
+struct scsi_cd {
+	unsigned int capacity;
+	struct scsi_device *device;
+	unsigned int vendor;
+	long unsigned int ms_offset;
+	unsigned int writeable: 1;
+	unsigned int use: 1;
+	unsigned int xa_flag: 1;
+	unsigned int readcd_known: 1;
+	unsigned int readcd_cdda: 1;
+	unsigned int media_present: 1;
+	int tur_mismatch;
+	bool tur_changed: 1;
+	bool get_event_changed: 1;
+	bool ignore_get_event: 1;
+	struct cdrom_device_info cdi;
+	struct mutex lock;
+	struct gendisk *disk;
+};
+
+typedef struct scsi_cd Scsi_CD;
+
+struct cdrom_ti {
+	__u8 cdti_trk0;
+	__u8 cdti_ind0;
+	__u8 cdti_trk1;
+	__u8 cdti_ind1;
+};
+
+struct cdrom_tochdr {
+	__u8 cdth_trk0;
+	__u8 cdth_trk1;
+};
+
+struct ccs_modesel_head {
+	__u8 _r1;
+	__u8 medium;
+	__u8 _r2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_blocks_hi;
+	__u8 number_blocks_med;
+	__u8 number_blocks_lo;
+	__u8 _r3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+struct trace_event_raw_scsi_prepare_zone_append {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t lba;
+	unsigned int wp_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_zone_wp_update {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t rq_sector;
+	unsigned int wp_offset;
+	unsigned int good_bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_prepare_zone_append {};
+
+struct trace_event_data_offsets_scsi_zone_wp_update {};
+
+typedef void (*btf_trace_scsi_prepare_zone_append)(void *, struct scsi_cmnd *, sector_t, unsigned int);
+
+typedef void (*btf_trace_scsi_zone_wp_update)(void *, struct scsi_cmnd *, sector_t, unsigned int, unsigned int);
+
+struct nvme_user_io {
+	__u8 opcode;
+	__u8 flags;
+	__u16 control;
+	__u16 nblocks;
+	__u16 rsvd;
+	__u64 metadata;
+	__u64 addr;
+	__u64 slba;
+	__u32 dsmgmt;
+	__u32 reftag;
+	__u16 apptag;
+	__u16 appmask;
+};
+
+struct nvme_passthru_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 result;
+};
+
+struct nvme_passthru_cmd64 {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	union {
+		__u32 data_len;
+		__u32 vec_cnt;
+	};
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+	__u64 result;
+};
+
+struct nvme_uring_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+};
+
+enum nvme_subsys_type {
+	NVME_NQN_DISC = 1,
+	NVME_NQN_NVME = 2,
+	NVME_NQN_CURR = 3,
+};
+
+enum nvme_ctrl_type {
+	NVME_CTRL_IO = 1,
+	NVME_CTRL_DISC = 2,
+	NVME_CTRL_ADMIN = 3,
+};
+
+enum nvme_dctype {
+	NVME_DCTYPE_NOT_REPORTED = 0,
+	NVME_DCTYPE_DDC = 1,
+	NVME_DCTYPE_CDC = 2,
+};
+
+struct nvme_id_power_state {
+	__le16 max_power;
+	__u8 rsvd2;
+	__u8 flags;
+	__le32 entry_lat;
+	__le32 exit_lat;
+	__u8 read_tput;
+	__u8 read_lat;
+	__u8 write_tput;
+	__u8 write_lat;
+	__le16 idle_power;
+	__u8 idle_scale;
+	__u8 rsvd19;
+	__le16 active_power;
+	__u8 active_work_scale;
+	__u8 rsvd23[9];
+};
+
+enum {
+	NVME_ID_CNS_NS = 0,
+	NVME_ID_CNS_CTRL = 1,
+	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
+	NVME_ID_CNS_NS_DESC_LIST = 3,
+	NVME_ID_CNS_CS_NS = 5,
+	NVME_ID_CNS_CS_CTRL = 6,
+	NVME_ID_CNS_NS_CS_INDEP = 8,
+	NVME_ID_CNS_NS_PRESENT_LIST = 16,
+	NVME_ID_CNS_NS_PRESENT = 17,
+	NVME_ID_CNS_CTRL_NS_LIST = 18,
+	NVME_ID_CNS_CTRL_LIST = 19,
+	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
+	NVME_ID_CNS_NS_GRANULARITY = 22,
+	NVME_ID_CNS_UUID_LIST = 23,
+};
+
+enum {
+	NVME_CMD_EFFECTS_CSUPP = 1,
+	NVME_CMD_EFFECTS_LBCC = 2,
+	NVME_CMD_EFFECTS_NCC = 4,
+	NVME_CMD_EFFECTS_NIC = 8,
+	NVME_CMD_EFFECTS_CCC = 16,
+	NVME_CMD_EFFECTS_CSE_MASK = 458752,
+	NVME_CMD_EFFECTS_UUID_SEL = 524288,
+	NVME_CMD_EFFECTS_SCOPE_MASK = 4293918720,
+};
+
+struct nvme_effects_log {
+	__le32 acs[256];
+	__le32 iocs[256];
+	__u8 resv[2048];
+};
+
+enum nvme_ana_state {
+	NVME_ANA_OPTIMIZED = 1,
+	NVME_ANA_NONOPTIMIZED = 2,
+	NVME_ANA_INACCESSIBLE = 3,
+	NVME_ANA_PERSISTENT_LOSS = 4,
+	NVME_ANA_CHANGE = 15,
+};
+
+struct nvme_ana_rsp_hdr {
+	__le64 chgcnt;
+	__le16 ngrps;
+	__le16 rsvd10[3];
+};
+
+enum nvme_opcode {
+	nvme_cmd_flush = 0,
+	nvme_cmd_write = 1,
+	nvme_cmd_read = 2,
+	nvme_cmd_write_uncor = 4,
+	nvme_cmd_compare = 5,
+	nvme_cmd_write_zeroes = 8,
+	nvme_cmd_dsm = 9,
+	nvme_cmd_verify = 12,
+	nvme_cmd_resv_register = 13,
+	nvme_cmd_resv_report = 14,
+	nvme_cmd_resv_acquire = 17,
+	nvme_cmd_resv_release = 21,
+	nvme_cmd_zone_mgmt_send = 121,
+	nvme_cmd_zone_mgmt_recv = 122,
+	nvme_cmd_zone_append = 125,
+	nvme_cmd_vendor_start = 128,
+};
+
+struct nvme_sgl_desc {
+	__le64 addr;
+	__le32 length;
+	__u8 rsvd[3];
+	__u8 type;
+};
+
+struct nvme_keyed_sgl_desc {
+	__le64 addr;
+	__u8 length[3];
+	__u8 key[4];
+	__u8 type;
+};
+
+union nvme_data_ptr {
+	struct {
+		__le64 prp1;
+		__le64 prp2;
+	};
+	struct nvme_sgl_desc sgl;
+	struct nvme_keyed_sgl_desc ksgl;
+};
+
+struct nvme_common_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	union {
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		};
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		} cdws;
+	};
+};
+
+struct nvme_rw_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2;
+	__le32 cdw3;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+enum {
+	NVME_RW_LR = 32768,
+	NVME_RW_FUA = 16384,
+	NVME_RW_APPEND_PIREMAP = 512,
+	NVME_RW_DSM_FREQ_UNSPEC = 0,
+	NVME_RW_DSM_FREQ_TYPICAL = 1,
+	NVME_RW_DSM_FREQ_RARE = 2,
+	NVME_RW_DSM_FREQ_READS = 3,
+	NVME_RW_DSM_FREQ_WRITES = 4,
+	NVME_RW_DSM_FREQ_RW = 5,
+	NVME_RW_DSM_FREQ_ONCE = 6,
+	NVME_RW_DSM_FREQ_PREFETCH = 7,
+	NVME_RW_DSM_FREQ_TEMP = 8,
+	NVME_RW_DSM_LATENCY_NONE = 0,
+	NVME_RW_DSM_LATENCY_IDLE = 16,
+	NVME_RW_DSM_LATENCY_NORM = 32,
+	NVME_RW_DSM_LATENCY_LOW = 48,
+	NVME_RW_DSM_SEQ_REQ = 64,
+	NVME_RW_DSM_COMPRESSED = 128,
+	NVME_RW_PRINFO_PRCHK_REF = 1024,
+	NVME_RW_PRINFO_PRCHK_APP = 2048,
+	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
+	NVME_RW_PRINFO_PRACT = 8192,
+	NVME_RW_DTYPE_STREAMS = 16,
+	NVME_WZ_DEAC = 512,
+};
+
+struct nvme_dsm_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 nr;
+	__le32 attributes;
+	__u32 rsvd12[4];
+};
+
+struct nvme_write_zeroes_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+struct nvme_zone_mgmt_send_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 cdw12;
+	__u8 zsa;
+	__u8 select_all;
+	__u8 rsvd13[2];
+	__le32 cdw14[2];
+};
+
+struct nvme_zone_mgmt_recv_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 numd;
+	__u8 zra;
+	__u8 zrasf;
+	__u8 pr;
+	__u8 rsvd13;
+	__le32 cdw14[2];
+};
+
+enum nvme_admin_opcode {
+	nvme_admin_delete_sq = 0,
+	nvme_admin_create_sq = 1,
+	nvme_admin_get_log_page = 2,
+	nvme_admin_delete_cq = 4,
+	nvme_admin_create_cq = 5,
+	nvme_admin_identify = 6,
+	nvme_admin_abort_cmd = 8,
+	nvme_admin_set_features = 9,
+	nvme_admin_get_features = 10,
+	nvme_admin_async_event = 12,
+	nvme_admin_ns_mgmt = 13,
+	nvme_admin_activate_fw = 16,
+	nvme_admin_download_fw = 17,
+	nvme_admin_dev_self_test = 20,
+	nvme_admin_ns_attach = 21,
+	nvme_admin_keep_alive = 24,
+	nvme_admin_directive_send = 25,
+	nvme_admin_directive_recv = 26,
+	nvme_admin_virtual_mgmt = 28,
+	nvme_admin_nvme_mi_send = 29,
+	nvme_admin_nvme_mi_recv = 30,
+	nvme_admin_dbbuf = 124,
+	nvme_admin_format_nvm = 128,
+	nvme_admin_security_send = 129,
+	nvme_admin_security_recv = 130,
+	nvme_admin_sanitize_nvm = 132,
+	nvme_admin_get_lba_status = 134,
+	nvme_admin_vendor_start = 192,
+};
+
+struct nvme_identify {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 cns;
+	__u8 rsvd3;
+	__le16 ctrlid;
+	__u8 rsvd11[3];
+	__u8 csi;
+	__u32 rsvd12[4];
+};
+
+struct nvme_features {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 fid;
+	__le32 dword11;
+	__le32 dword12;
+	__le32 dword13;
+	__le32 dword14;
+	__le32 dword15;
+};
+
+struct nvme_create_cq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 cqid;
+	__le16 qsize;
+	__le16 cq_flags;
+	__le16 irq_vector;
+	__u32 rsvd12[4];
+};
+
+struct nvme_create_sq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 sqid;
+	__le16 qsize;
+	__le16 sq_flags;
+	__le16 cqid;
+	__u32 rsvd12[4];
+};
+
+struct nvme_delete_queue {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 qid;
+	__u16 rsvd10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_abort_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 sqid;
+	__u16 cid;
+	__u32 rsvd11[5];
+};
+
+struct nvme_download_firmware {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__le32 offset;
+	__u32 rsvd12[4];
+};
+
+struct nvme_format_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[4];
+	__le32 cdw10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_get_log_page_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 lid;
+	__u8 lsp;
+	__le16 numdl;
+	__le16 numdu;
+	__u16 rsvd11;
+	union {
+		struct {
+			__le32 lpol;
+			__le32 lpou;
+		};
+		__le64 lpo;
+	};
+	__u8 rsvd14[3];
+	__u8 csi;
+	__u32 rsvd15;
+};
+
+struct nvme_directive_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__u8 doper;
+	__u8 dtype;
+	__le16 dspec;
+	__u8 endir;
+	__u8 tdtype;
+	__u16 rsvd15;
+	__u32 rsvd16[3];
+};
+
+enum nvmf_fabrics_opcode {
+	nvme_fabrics_command = 127,
+};
+
+struct nvmf_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 ts[24];
+};
+
+struct nvmf_connect_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__le16 recfmt;
+	__le16 qid;
+	__le16 sqsize;
+	__u8 cattr;
+	__u8 resv3;
+	__le32 kato;
+	__u8 resv4[12];
+};
+
+struct nvmf_property_set_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__le64 value;
+	__u8 resv4[8];
+};
+
+struct nvmf_property_get_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al_tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_send_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_receive_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al;
+	__u8 resv4[16];
+};
+
+struct nvme_dbbuf {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__le64 prp2;
+	__u32 rsvd12[6];
+};
+
+struct nvme_command {
+	union {
+		struct nvme_common_command common;
+		struct nvme_rw_command rw;
+		struct nvme_identify identify;
+		struct nvme_features features;
+		struct nvme_create_cq create_cq;
+		struct nvme_create_sq create_sq;
+		struct nvme_delete_queue delete_queue;
+		struct nvme_download_firmware dlfw;
+		struct nvme_format_cmd format;
+		struct nvme_dsm_cmd dsm;
+		struct nvme_write_zeroes_cmd write_zeroes;
+		struct nvme_zone_mgmt_send_cmd zms;
+		struct nvme_zone_mgmt_recv_cmd zmr;
+		struct nvme_abort_cmd abort;
+		struct nvme_get_log_page_command get_log_page;
+		struct nvmf_common_command fabrics;
+		struct nvmf_connect_command connect;
+		struct nvmf_property_set_command prop_set;
+		struct nvmf_property_get_command prop_get;
+		struct nvmf_auth_common_command auth_common;
+		struct nvmf_auth_send_command auth_send;
+		struct nvmf_auth_receive_command auth_receive;
+		struct nvme_dbbuf dbbuf;
+		struct nvme_directive_cmd directive;
+	};
+};
+
+union nvme_result {
+	__le16 u16;
+	__le32 u32;
+	__le64 u64;
+};
+
+struct nvme_ctrl;
+
+struct nvme_request {
+	struct nvme_command *cmd;
+	union nvme_result result;
+	u8 genctr;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	long unsigned int start_time;
+	struct nvme_ctrl *ctrl;
+};
+
+enum nvme_ctrl_state {
+	NVME_CTRL_NEW = 0,
+	NVME_CTRL_LIVE = 1,
+	NVME_CTRL_RESETTING = 2,
+	NVME_CTRL_CONNECTING = 3,
+	NVME_CTRL_DELETING = 4,
+	NVME_CTRL_DELETING_NOIO = 5,
+	NVME_CTRL_DEAD = 6,
+};
+
+struct nvme_fault_inject {};
+
+struct nvme_ctrl_ops;
+
+struct nvme_subsystem;
+
+struct nvmf_ctrl_options;
+
+struct nvme_ctrl {
+	bool comp_seen;
+	enum nvme_ctrl_state state;
+	bool identified;
+	spinlock_t lock;
+	struct mutex scan_lock;
+	const struct nvme_ctrl_ops *ops;
+	struct request_queue *admin_q;
+	struct request_queue *connect_q;
+	struct request_queue *fabrics_q;
+	struct device *dev;
+	int instance;
+	int numa_node;
+	struct blk_mq_tag_set *tagset;
+	struct blk_mq_tag_set *admin_tagset;
+	struct list_head namespaces;
+	struct rw_semaphore namespaces_rwsem;
+	struct device ctrl_device;
+	struct device *device;
+	struct device *hwmon_device;
+	struct cdev cdev;
+	struct work_struct reset_work;
+	struct work_struct delete_work;
+	wait_queue_head_t state_wq;
+	struct nvme_subsystem *subsys;
+	struct list_head subsys_entry;
+	struct opal_dev *opal_dev;
+	char name[12];
+	u16 cntlid;
+	u32 ctrl_config;
+	u16 mtfa;
+	u32 queue_count;
+	u64 cap;
+	u32 max_hw_sectors;
+	u32 max_segments;
+	u32 max_integrity_segments;
+	u32 max_discard_sectors;
+	u32 max_discard_segments;
+	u32 max_zeroes_sectors;
+	u32 max_zone_append;
+	u16 crdt[3];
+	u16 oncs;
+	u32 dmrsl;
+	u16 oacs;
+	u16 sqsize;
+	u32 max_namespaces;
+	atomic_t abort_limit;
+	u8 vwc;
+	u32 vs;
+	u32 sgls;
+	u16 kas;
+	u8 npss;
+	u8 apsta;
+	u16 wctemp;
+	u16 cctemp;
+	u32 oaes;
+	u32 aen_result;
+	u32 ctratt;
+	unsigned int shutdown_timeout;
+	unsigned int kato;
+	bool subsystem;
+	long unsigned int quirks;
+	struct nvme_id_power_state psd[32];
+	struct nvme_effects_log *effects;
+	struct xarray cels;
+	struct work_struct scan_work;
+	struct work_struct async_event_work;
+	struct delayed_work ka_work;
+	struct delayed_work failfast_work;
+	struct nvme_command ka_cmd;
+	struct work_struct fw_act_work;
+	long unsigned int events;
+	u8 anacap;
+	u8 anatt;
+	u32 anagrpmax;
+	u32 nanagrpid;
+	struct mutex ana_lock;
+	struct nvme_ana_rsp_hdr *ana_log_buf;
+	size_t ana_log_size;
+	struct timer_list anatt_timer;
+	struct work_struct ana_work;
+	u64 ps_max_latency_us;
+	bool apst_enabled;
+	u32 hmpre;
+	u32 hmmin;
+	u32 hmminds;
+	u16 hmmaxd;
+	u32 ioccsz;
+	u32 iorcsz;
+	u16 icdoff;
+	u16 maxcmd;
+	int nr_reconnects;
+	long unsigned int flags;
+	struct nvmf_ctrl_options *opts;
+	struct page *discard_page;
+	long unsigned int discard_page_busy;
+	struct nvme_fault_inject fault_inject;
+	enum nvme_ctrl_type cntrltype;
+	enum nvme_dctype dctype;
+};
+
+enum {
+	NVME_REQ_CANCELLED = 1,
+	NVME_REQ_USERCMD = 2,
+	NVME_MPATH_IO_STATS = 4,
+};
+
+struct nvme_ctrl_ops {
+	const char *name;
+	struct module *module;
+	unsigned int flags;
+	const struct attribute_group **dev_attr_groups;
+	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
+	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
+	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
+	void (*free_ctrl)(struct nvme_ctrl *);
+	void (*submit_async_event)(struct nvme_ctrl *);
+	void (*delete_ctrl)(struct nvme_ctrl *);
+	void (*stop_ctrl)(struct nvme_ctrl *);
+	int (*get_address)(struct nvme_ctrl *, char *, int);
+	void (*print_device_info)(struct nvme_ctrl *);
+	bool (*supports_pci_p2pdma)(struct nvme_ctrl *);
+};
+
+enum nvme_iopolicy {
+	NVME_IOPOLICY_NUMA = 0,
+	NVME_IOPOLICY_RR = 1,
+};
+
+struct nvme_subsystem {
+	int instance;
+	struct device dev;
+	struct kref ref;
+	struct list_head entry;
+	struct mutex lock;
+	struct list_head ctrls;
+	struct list_head nsheads;
+	char subnqn[223];
+	char serial[20];
+	char model[40];
+	char firmware_rev[8];
+	u8 cmic;
+	enum nvme_subsys_type subtype;
+	u16 vendor_id;
+	u16 awupf;
+	struct ida ns_ida;
+	enum nvme_iopolicy iopolicy;
+};
+
+struct nvme_ns_ids {
+	u8 eui64[8];
+	u8 nguid[16];
+	uuid_t uuid;
+	u8 csi;
+};
+
+struct nvme_ns;
+
+struct nvme_ns_head {
+	struct list_head list;
+	struct srcu_struct srcu;
+	struct nvme_subsystem *subsys;
+	unsigned int ns_id;
+	struct nvme_ns_ids ids;
+	struct list_head entry;
+	struct kref ref;
+	bool shared;
+	int instance;
+	struct nvme_effects_log *effects;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct gendisk *disk;
+	struct bio_list requeue_list;
+	spinlock_t requeue_lock;
+	struct work_struct requeue_work;
+	struct mutex lock;
+	long unsigned int flags;
+	struct nvme_ns *current_path[0];
+};
+
+struct nvme_ns {
+	struct list_head list;
+	struct nvme_ctrl *ctrl;
+	struct request_queue *queue;
+	struct gendisk *disk;
+	enum nvme_ana_state ana_state;
+	u32 ana_grpid;
+	struct list_head siblings;
+	struct kref kref;
+	struct nvme_ns_head *head;
+	int lba_shift;
+	u16 ms;
+	u16 pi_size;
+	u16 sgs;
+	u32 sws;
+	u8 pi_type;
+	u8 guard_type;
+	u64 zsze;
+	long unsigned int features;
+	long unsigned int flags;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct nvme_fault_inject fault_inject;
+};
+
+enum nvme_ns_features {
+	NVME_NS_EXT_LBAS = 1,
+	NVME_NS_METADATA_SUPPORTED = 2,
+	NVME_NS_DEAC = 3,
+};
+
+enum {
+	NVME_IOCTL_VEC = 1,
+	NVME_IOCTL_PARTITION = 2,
+};
+
+struct nvme_uring_data {
+	__u64 metadata;
+	__u64 addr;
+	__u32 data_len;
+	__u32 metadata_len;
+	__u32 timeout_ms;
+};
+
+struct nvme_uring_cmd_pdu {
+	union {
+		struct bio *bio;
+		struct request *req;
+	};
+	u32 meta_len;
+	u32 nvme_status;
+	union {
+		struct {
+			void *meta;
+			void *meta_buffer;
+		};
+		u64 result;
+	} u;
+};
+
+typedef struct sg_io_hdr sg_io_hdr_t;
+
+struct sg_scsi_id {
+	int host_no;
+	int channel;
+	int scsi_id;
+	int lun;
+	int scsi_type;
+	short int h_cmd_per_lun;
+	short int d_queue_depth;
+	int unused[2];
+};
+
+typedef struct sg_scsi_id sg_scsi_id_t;
+
+struct sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	void *usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+typedef struct sg_req_info sg_req_info_t;
+
+struct sg_header {
+	int pack_len;
+	int reply_len;
+	int pack_id;
+	int result;
+	unsigned int twelve_byte: 1;
+	unsigned int target_status: 5;
+	unsigned int host_status: 8;
+	unsigned int driver_status: 8;
+	unsigned int other_flags: 10;
+	unsigned char sense_buffer[16];
+};
+
+struct sg_scatter_hold {
+	short unsigned int k_use_sg;
+	unsigned int sglist_len;
+	unsigned int bufflen;
+	struct page **pages;
+	int page_order;
+	char dio_in_use;
+	unsigned char cmd_opcode;
+};
+
+typedef struct sg_scatter_hold Sg_scatter_hold;
+
+struct sg_fd;
+
+struct sg_request {
+	struct list_head entry;
+	struct sg_fd *parentfp;
+	Sg_scatter_hold data;
+	sg_io_hdr_t header;
+	unsigned char sense_b[96];
+	char res_used;
+	char orphan;
+	char sg_io_owned;
+	char done;
+	struct request *rq;
+	struct bio *bio;
+	struct execute_work ew;
+};
+
+typedef struct sg_request Sg_request;
+
+struct sg_device;
+
+struct sg_fd {
+	struct list_head sfd_siblings;
+	struct sg_device *parentdp;
+	wait_queue_head_t read_wait;
+	rwlock_t rq_list_lock;
+	struct mutex f_mutex;
+	int timeout;
+	int timeout_user;
+	Sg_scatter_hold reserve;
+	struct list_head rq_list;
+	struct fasync_struct *async_qp;
+	Sg_request req_arr[16];
+	char force_packid;
+	char cmd_q;
+	unsigned char next_cmd_len;
+	char keep_orphan;
+	char mmap_called;
+	char res_in_use;
+	struct kref f_ref;
+	struct execute_work ew;
+};
+
+struct sg_device {
+	struct scsi_device *device;
+	wait_queue_head_t open_wait;
+	struct mutex open_rel_lock;
+	int sg_tablesize;
+	u32 index;
+	struct list_head sfds;
+	rwlock_t sfd_lock;
+	atomic_t detaching;
+	bool exclude;
+	int open_cnt;
+	char sgdebug;
+	char name[32];
+	struct cdev *cdev;
+	struct kref d_ref;
+};
+
+typedef struct sg_fd Sg_fd;
+
+typedef struct sg_device Sg_device;
+
+struct compat_sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+struct sg_proc_deviter {
+	loff_t index;
+	size_t max;
+};
+
+enum {
+	NVME_CAP_CSS_NVM = 1,
+	NVME_CAP_CSS_CSI = 64,
+};
+
+enum {
+	NVME_CAP_CRMS_CRWMS = 0,
+	NVME_CAP_CRMS_CRIMS = 0,
+};
+
+enum {
+	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
+	NVME_PS_FLAGS_NON_OP_STATE = 2,
+};
+
+enum nvme_ctrl_attr {
+	NVME_CTRL_ATTR_HID_128_BIT = 1,
+	NVME_CTRL_ATTR_TBKAS = 64,
+	NVME_CTRL_ATTR_ELBAS = 32768,
+};
+
+struct nvme_id_ctrl {
+	__le16 vid;
+	__le16 ssvid;
+	char sn[20];
+	char mn[40];
+	char fr[8];
+	__u8 rab;
+	__u8 ieee[3];
+	__u8 cmic;
+	__u8 mdts;
+	__le16 cntlid;
+	__le32 ver;
+	__le32 rtd3r;
+	__le32 rtd3e;
+	__le32 oaes;
+	__le32 ctratt;
+	__u8 rsvd100[11];
+	__u8 cntrltype;
+	__u8 fguid[16];
+	__le16 crdt1;
+	__le16 crdt2;
+	__le16 crdt3;
+	__u8 rsvd134[122];
+	__le16 oacs;
+	__u8 acl;
+	__u8 aerl;
+	__u8 frmw;
+	__u8 lpa;
+	__u8 elpe;
+	__u8 npss;
+	__u8 avscc;
+	__u8 apsta;
+	__le16 wctemp;
+	__le16 cctemp;
+	__le16 mtfa;
+	__le32 hmpre;
+	__le32 hmmin;
+	__u8 tnvmcap[16];
+	__u8 unvmcap[16];
+	__le32 rpmbs;
+	__le16 edstt;
+	__u8 dsto;
+	__u8 fwug;
+	__le16 kas;
+	__le16 hctma;
+	__le16 mntmt;
+	__le16 mxtmt;
+	__le32 sanicap;
+	__le32 hmminds;
+	__le16 hmmaxd;
+	__u8 rsvd338[4];
+	__u8 anatt;
+	__u8 anacap;
+	__le32 anagrpmax;
+	__le32 nanagrpid;
+	__u8 rsvd352[160];
+	__u8 sqes;
+	__u8 cqes;
+	__le16 maxcmd;
+	__le32 nn;
+	__le16 oncs;
+	__le16 fuses;
+	__u8 fna;
+	__u8 vwc;
+	__le16 awun;
+	__le16 awupf;
+	__u8 nvscc;
+	__u8 nwpc;
+	__le16 acwu;
+	__u8 rsvd534[2];
+	__le32 sgls;
+	__le32 mnan;
+	__u8 rsvd544[224];
+	char subnqn[256];
+	__u8 rsvd1024[768];
+	__le32 ioccsz;
+	__le32 iorcsz;
+	__le16 icdoff;
+	__u8 ctrattr;
+	__u8 msdbd;
+	__u8 rsvd1804[2];
+	__u8 dctype;
+	__u8 rsvd1807[241];
+	struct nvme_id_power_state psd[32];
+	__u8 vs[1024];
+};
+
+enum {
+	NVME_CTRL_CMIC_MULTI_PORT = 1,
+	NVME_CTRL_CMIC_MULTI_CTRL = 2,
+	NVME_CTRL_CMIC_ANA = 8,
+	NVME_CTRL_ONCS_COMPARE = 1,
+	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
+	NVME_CTRL_ONCS_DSM = 4,
+	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
+	NVME_CTRL_ONCS_RESERVATIONS = 32,
+	NVME_CTRL_ONCS_TIMESTAMP = 64,
+	NVME_CTRL_VWC_PRESENT = 1,
+	NVME_CTRL_OACS_SEC_SUPP = 1,
+	NVME_CTRL_OACS_NS_MNGT_SUPP = 8,
+	NVME_CTRL_OACS_DIRECTIVES = 32,
+	NVME_CTRL_OACS_DBBUF_SUPP = 256,
+	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
+	NVME_CTRL_CTRATT_128_ID = 1,
+	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
+	NVME_CTRL_CTRATT_NVM_SETS = 4,
+	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
+	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
+	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
+	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
+	NVME_CTRL_CTRATT_UUID_LIST = 512,
+};
+
+struct nvme_lbaf {
+	__le16 ms;
+	__u8 ds;
+	__u8 rp;
+};
+
+struct nvme_id_ns {
+	__le64 nsze;
+	__le64 ncap;
+	__le64 nuse;
+	__u8 nsfeat;
+	__u8 nlbaf;
+	__u8 flbas;
+	__u8 mc;
+	__u8 dpc;
+	__u8 dps;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__u8 dlfeat;
+	__le16 nawun;
+	__le16 nawupf;
+	__le16 nacwu;
+	__le16 nabsn;
+	__le16 nabo;
+	__le16 nabspf;
+	__le16 noiob;
+	__u8 nvmcap[16];
+	__le16 npwg;
+	__le16 npwa;
+	__le16 npdg;
+	__le16 npda;
+	__le16 nows;
+	__u8 rsvd74[18];
+	__le32 anagrpid;
+	__u8 rsvd96[3];
+	__u8 nsattr;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nguid[16];
+	__u8 eui64[8];
+	struct nvme_lbaf lbaf[64];
+	__u8 vs[3712];
+};
+
+struct nvme_id_ns_cs_indep {
+	__u8 nsfeat;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__le32 anagrpid;
+	__u8 nsattr;
+	__u8 rsvd9;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nstat;
+	__u8 rsvd15[4081];
+};
+
+struct nvme_id_ns_nvm {
+	__le64 lbstm;
+	__u8 pic;
+	__u8 rsvd9[3];
+	__le32 elbaf[64];
+	__u8 rsvd268[3828];
+};
+
+enum {
+	NVME_ID_NS_NVM_STS_MASK = 63,
+	NVME_ID_NS_NVM_GUARD_SHIFT = 7,
+	NVME_ID_NS_NVM_GUARD_MASK = 3,
+};
+
+struct nvme_id_ctrl_nvm {
+	__u8 vsl;
+	__u8 wzsl;
+	__u8 wusl;
+	__u8 dmrl;
+	__le32 dmrsl;
+	__le64 dmsl;
+	__u8 rsvd16[4080];
+};
+
+enum {
+	NVME_CSI_NVM = 0,
+	NVME_CSI_ZNS = 2,
+};
+
+enum {
+	NVME_NS_FEAT_THIN = 1,
+	NVME_NS_FEAT_ATOMICS = 2,
+	NVME_NS_FEAT_IO_OPT = 16,
+	NVME_NS_ATTR_RO = 1,
+	NVME_NS_FLBAS_LBA_MASK = 15,
+	NVME_NS_FLBAS_LBA_UMASK = 96,
+	NVME_NS_FLBAS_LBA_SHIFT = 1,
+	NVME_NS_FLBAS_META_EXT = 16,
+	NVME_NS_NMIC_SHARED = 1,
+	NVME_LBAF_RP_BEST = 0,
+	NVME_LBAF_RP_BETTER = 1,
+	NVME_LBAF_RP_GOOD = 2,
+	NVME_LBAF_RP_DEGRADED = 3,
+	NVME_NS_DPC_PI_LAST = 16,
+	NVME_NS_DPC_PI_FIRST = 8,
+	NVME_NS_DPC_PI_TYPE3 = 4,
+	NVME_NS_DPC_PI_TYPE2 = 2,
+	NVME_NS_DPC_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_FIRST = 8,
+	NVME_NS_DPS_PI_MASK = 7,
+	NVME_NS_DPS_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_TYPE2 = 2,
+	NVME_NS_DPS_PI_TYPE3 = 3,
+};
+
+enum {
+	NVME_NSTAT_NRDY = 1,
+};
+
+enum {
+	NVME_NVM_NS_16B_GUARD = 0,
+	NVME_NVM_NS_32B_GUARD = 1,
+	NVME_NVM_NS_64B_GUARD = 2,
+};
+
+struct nvme_ns_id_desc {
+	__u8 nidt;
+	__u8 nidl;
+	__le16 reserved;
+};
+
+enum {
+	NVME_NIDT_EUI64 = 1,
+	NVME_NIDT_NGUID = 2,
+	NVME_NIDT_UUID = 3,
+	NVME_NIDT_CSI = 4,
+};
+
+struct nvme_fw_slot_info_log {
+	__u8 afi;
+	__u8 rsvd1[7];
+	__le64 frs[7];
+	__u8 rsvd64[448];
+};
+
+enum {
+	NVME_AER_ERROR = 0,
+	NVME_AER_SMART = 1,
+	NVME_AER_NOTICE = 2,
+	NVME_AER_CSS = 6,
+	NVME_AER_VS = 7,
+};
+
+enum {
+	NVME_AER_ERROR_PERSIST_INT_ERR = 3,
+};
+
+enum {
+	NVME_AER_NOTICE_NS_CHANGED = 0,
+	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
+	NVME_AER_NOTICE_ANA = 3,
+	NVME_AER_NOTICE_DISC_CHANGED = 240,
+};
+
+enum {
+	NVME_AEN_CFG_NS_ATTR = 256,
+	NVME_AEN_CFG_FW_ACT = 512,
+	NVME_AEN_CFG_ANA_CHANGE = 2048,
+	NVME_AEN_CFG_DISC_CHANGE = 2147483648,
+};
+
+enum {
+	NVME_CMD_FUSE_FIRST = 1,
+	NVME_CMD_FUSE_SECOND = 2,
+	NVME_CMD_SGL_METABUF = 64,
+	NVME_CMD_SGL_METASEG = 128,
+	NVME_CMD_SGL_ALL = 192,
+};
+
+enum {
+	NVME_DSMGMT_IDR = 1,
+	NVME_DSMGMT_IDW = 2,
+	NVME_DSMGMT_AD = 4,
+};
+
+struct nvme_dsm_range {
+	__le32 cattr;
+	__le32 nlb;
+	__le64 slba;
+};
+
+enum nvme_zone_mgmt_action {
+	NVME_ZONE_CLOSE = 1,
+	NVME_ZONE_FINISH = 2,
+	NVME_ZONE_OPEN = 3,
+	NVME_ZONE_RESET = 4,
+	NVME_ZONE_OFFLINE = 5,
+	NVME_ZONE_SET_DESC_EXT = 16,
+};
+
+struct nvme_feat_auto_pst {
+	__le64 entries[32];
+};
+
+struct nvme_feat_host_behavior {
+	__u8 acre;
+	__u8 etdas;
+	__u8 lbafee;
+	__u8 resv1[509];
+};
+
+enum {
+	NVME_ENABLE_ACRE = 1,
+	NVME_ENABLE_LBAFEE = 1,
+};
+
+enum {
+	NVME_QUEUE_PHYS_CONTIG = 1,
+	NVME_CQ_IRQ_ENABLED = 2,
+	NVME_SQ_PRIO_URGENT = 0,
+	NVME_SQ_PRIO_HIGH = 2,
+	NVME_SQ_PRIO_MEDIUM = 4,
+	NVME_SQ_PRIO_LOW = 6,
+	NVME_FEAT_ARBITRATION = 1,
+	NVME_FEAT_POWER_MGMT = 2,
+	NVME_FEAT_LBA_RANGE = 3,
+	NVME_FEAT_TEMP_THRESH = 4,
+	NVME_FEAT_ERR_RECOVERY = 5,
+	NVME_FEAT_VOLATILE_WC = 6,
+	NVME_FEAT_NUM_QUEUES = 7,
+	NVME_FEAT_IRQ_COALESCE = 8,
+	NVME_FEAT_IRQ_CONFIG = 9,
+	NVME_FEAT_WRITE_ATOMIC = 10,
+	NVME_FEAT_ASYNC_EVENT = 11,
+	NVME_FEAT_AUTO_PST = 12,
+	NVME_FEAT_HOST_MEM_BUF = 13,
+	NVME_FEAT_TIMESTAMP = 14,
+	NVME_FEAT_KATO = 15,
+	NVME_FEAT_HCTM = 16,
+	NVME_FEAT_NOPSC = 17,
+	NVME_FEAT_RRL = 18,
+	NVME_FEAT_PLM_CONFIG = 19,
+	NVME_FEAT_PLM_WINDOW = 20,
+	NVME_FEAT_HOST_BEHAVIOR = 22,
+	NVME_FEAT_SANITIZE = 23,
+	NVME_FEAT_SW_PROGRESS = 128,
+	NVME_FEAT_HOST_ID = 129,
+	NVME_FEAT_RESV_MASK = 130,
+	NVME_FEAT_RESV_PERSIST = 131,
+	NVME_FEAT_WRITE_PROTECT = 132,
+	NVME_FEAT_VENDOR_START = 192,
+	NVME_FEAT_VENDOR_END = 255,
+	NVME_LOG_ERROR = 1,
+	NVME_LOG_SMART = 2,
+	NVME_LOG_FW_SLOT = 3,
+	NVME_LOG_CHANGED_NS = 4,
+	NVME_LOG_CMD_EFFECTS = 5,
+	NVME_LOG_DEVICE_SELF_TEST = 6,
+	NVME_LOG_TELEMETRY_HOST = 7,
+	NVME_LOG_TELEMETRY_CTRL = 8,
+	NVME_LOG_ENDURANCE_GROUP = 9,
+	NVME_LOG_ANA = 12,
+	NVME_LOG_DISC = 112,
+	NVME_LOG_RESERVATION = 128,
+	NVME_FWACT_REPL = 0,
+	NVME_FWACT_REPL_ACTV = 8,
+	NVME_FWACT_ACTV = 16,
+};
+
+enum nvmf_capsule_command {
+	nvme_fabrics_type_property_set = 0,
+	nvme_fabrics_type_connect = 1,
+	nvme_fabrics_type_property_get = 4,
+	nvme_fabrics_type_auth_send = 5,
+	nvme_fabrics_type_auth_receive = 6,
+};
+
+enum {
+	NVME_SC_SUCCESS = 0,
+	NVME_SC_INVALID_OPCODE = 1,
+	NVME_SC_INVALID_FIELD = 2,
+	NVME_SC_CMDID_CONFLICT = 3,
+	NVME_SC_DATA_XFER_ERROR = 4,
+	NVME_SC_POWER_LOSS = 5,
+	NVME_SC_INTERNAL = 6,
+	NVME_SC_ABORT_REQ = 7,
+	NVME_SC_ABORT_QUEUE = 8,
+	NVME_SC_FUSED_FAIL = 9,
+	NVME_SC_FUSED_MISSING = 10,
+	NVME_SC_INVALID_NS = 11,
+	NVME_SC_CMD_SEQ_ERROR = 12,
+	NVME_SC_SGL_INVALID_LAST = 13,
+	NVME_SC_SGL_INVALID_COUNT = 14,
+	NVME_SC_SGL_INVALID_DATA = 15,
+	NVME_SC_SGL_INVALID_METADATA = 16,
+	NVME_SC_SGL_INVALID_TYPE = 17,
+	NVME_SC_CMB_INVALID_USE = 18,
+	NVME_SC_PRP_INVALID_OFFSET = 19,
+	NVME_SC_ATOMIC_WU_EXCEEDED = 20,
+	NVME_SC_OP_DENIED = 21,
+	NVME_SC_SGL_INVALID_OFFSET = 22,
+	NVME_SC_RESERVED = 23,
+	NVME_SC_HOST_ID_INCONSIST = 24,
+	NVME_SC_KA_TIMEOUT_EXPIRED = 25,
+	NVME_SC_KA_TIMEOUT_INVALID = 26,
+	NVME_SC_ABORTED_PREEMPT_ABORT = 27,
+	NVME_SC_SANITIZE_FAILED = 28,
+	NVME_SC_SANITIZE_IN_PROGRESS = 29,
+	NVME_SC_SGL_INVALID_GRANULARITY = 30,
+	NVME_SC_CMD_NOT_SUP_CMB_QUEUE = 31,
+	NVME_SC_NS_WRITE_PROTECTED = 32,
+	NVME_SC_CMD_INTERRUPTED = 33,
+	NVME_SC_TRANSIENT_TR_ERR = 34,
+	NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY = 36,
+	NVME_SC_INVALID_IO_CMD_SET = 44,
+	NVME_SC_LBA_RANGE = 128,
+	NVME_SC_CAP_EXCEEDED = 129,
+	NVME_SC_NS_NOT_READY = 130,
+	NVME_SC_RESERVATION_CONFLICT = 131,
+	NVME_SC_FORMAT_IN_PROGRESS = 132,
+	NVME_SC_CQ_INVALID = 256,
+	NVME_SC_QID_INVALID = 257,
+	NVME_SC_QUEUE_SIZE = 258,
+	NVME_SC_ABORT_LIMIT = 259,
+	NVME_SC_ABORT_MISSING = 260,
+	NVME_SC_ASYNC_LIMIT = 261,
+	NVME_SC_FIRMWARE_SLOT = 262,
+	NVME_SC_FIRMWARE_IMAGE = 263,
+	NVME_SC_INVALID_VECTOR = 264,
+	NVME_SC_INVALID_LOG_PAGE = 265,
+	NVME_SC_INVALID_FORMAT = 266,
+	NVME_SC_FW_NEEDS_CONV_RESET = 267,
+	NVME_SC_INVALID_QUEUE = 268,
+	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
+	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
+	NVME_SC_FEATURE_NOT_PER_NS = 271,
+	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
+	NVME_SC_FW_NEEDS_RESET = 273,
+	NVME_SC_FW_NEEDS_MAX_TIME = 274,
+	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
+	NVME_SC_OVERLAPPING_RANGE = 276,
+	NVME_SC_NS_INSUFFICIENT_CAP = 277,
+	NVME_SC_NS_ID_UNAVAILABLE = 278,
+	NVME_SC_NS_ALREADY_ATTACHED = 280,
+	NVME_SC_NS_IS_PRIVATE = 281,
+	NVME_SC_NS_NOT_ATTACHED = 282,
+	NVME_SC_THIN_PROV_NOT_SUPP = 283,
+	NVME_SC_CTRL_LIST_INVALID = 284,
+	NVME_SC_SELT_TEST_IN_PROGRESS = 285,
+	NVME_SC_BP_WRITE_PROHIBITED = 286,
+	NVME_SC_CTRL_ID_INVALID = 287,
+	NVME_SC_SEC_CTRL_STATE_INVALID = 288,
+	NVME_SC_CTRL_RES_NUM_INVALID = 289,
+	NVME_SC_RES_ID_INVALID = 290,
+	NVME_SC_PMR_SAN_PROHIBITED = 291,
+	NVME_SC_ANA_GROUP_ID_INVALID = 292,
+	NVME_SC_ANA_ATTACH_FAILED = 293,
+	NVME_SC_BAD_ATTRIBUTES = 384,
+	NVME_SC_INVALID_PI = 385,
+	NVME_SC_READ_ONLY = 386,
+	NVME_SC_ONCS_NOT_SUPPORTED = 387,
+	NVME_SC_CONNECT_FORMAT = 384,
+	NVME_SC_CONNECT_CTRL_BUSY = 385,
+	NVME_SC_CONNECT_INVALID_PARAM = 386,
+	NVME_SC_CONNECT_RESTART_DISC = 387,
+	NVME_SC_CONNECT_INVALID_HOST = 388,
+	NVME_SC_DISCOVERY_RESTART = 400,
+	NVME_SC_AUTH_REQUIRED = 401,
+	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
+	NVME_SC_ZONE_FULL = 441,
+	NVME_SC_ZONE_READ_ONLY = 442,
+	NVME_SC_ZONE_OFFLINE = 443,
+	NVME_SC_ZONE_INVALID_WRITE = 444,
+	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
+	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
+	NVME_SC_ZONE_INVALID_TRANSITION = 447,
+	NVME_SC_WRITE_FAULT = 640,
+	NVME_SC_READ_ERROR = 641,
+	NVME_SC_GUARD_CHECK = 642,
+	NVME_SC_APPTAG_CHECK = 643,
+	NVME_SC_REFTAG_CHECK = 644,
+	NVME_SC_COMPARE_FAILED = 645,
+	NVME_SC_ACCESS_DENIED = 646,
+	NVME_SC_UNWRITTEN_BLOCK = 647,
+	NVME_SC_INTERNAL_PATH_ERROR = 768,
+	NVME_SC_ANA_PERSISTENT_LOSS = 769,
+	NVME_SC_ANA_INACCESSIBLE = 770,
+	NVME_SC_ANA_TRANSITION = 771,
+	NVME_SC_CTRL_PATH_ERROR = 864,
+	NVME_SC_HOST_PATH_ERROR = 880,
+	NVME_SC_HOST_ABORTED_CMD = 881,
+	NVME_SC_CRD = 6144,
+	NVME_SC_MORE = 8192,
+	NVME_SC_DNR = 16384,
+};
+
+enum nvme_quirks {
+	NVME_QUIRK_STRIPE_SIZE = 1,
+	NVME_QUIRK_IDENTIFY_CNS = 2,
+	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
+	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
+	NVME_QUIRK_NO_APST = 16,
+	NVME_QUIRK_NO_DEEPEST_PS = 32,
+	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
+	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
+	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
+	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
+	NVME_QUIRK_SINGLE_VECTOR = 2048,
+	NVME_QUIRK_128_BYTES_SQES = 4096,
+	NVME_QUIRK_SHARED_TAGS = 8192,
+	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
+	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
+	NVME_QUIRK_DMA_ADDRESS_BITS_48 = 65536,
+	NVME_QUIRK_SKIP_CID_GEN = 131072,
+	NVME_QUIRK_BOGUS_NID = 262144,
+};
+
+enum nvme_ctrl_flags {
+	NVME_CTRL_FAILFAST_EXPIRED = 0,
+	NVME_CTRL_ADMIN_Q_STOPPED = 1,
+	NVME_CTRL_STARTED_ONCE = 2,
+	NVME_CTRL_STOPPED = 3,
+};
+
+struct nvmf_host;
+
+struct nvmf_ctrl_options {
+	unsigned int mask;
+	char *transport;
+	char *subsysnqn;
+	char *traddr;
+	char *trsvcid;
+	char *host_traddr;
+	char *host_iface;
+	size_t queue_size;
+	unsigned int nr_io_queues;
+	unsigned int reconnect_delay;
+	bool discovery_nqn;
+	bool duplicate_connect;
+	unsigned int kato;
+	struct nvmf_host *host;
+	int max_reconnects;
+	char *dhchap_secret;
+	char *dhchap_ctrl_secret;
+	bool disable_sqflow;
+	bool hdr_digest;
+	bool data_digest;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+	int tos;
+	int fast_io_fail_tmo;
+};
+
+struct nvmf_host {
+	struct kref ref;
+	struct list_head list;
+	char nqn[223];
+	uuid_t id;
+};
+
+struct trace_event_raw_nvme_setup_cmd {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	u8 opcode;
+	u8 flags;
+	u8 fctype;
+	u16 cid;
+	u32 nsid;
+	bool metadata;
+	u8 cdw10[24];
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_complete_rq {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	int cid;
+	u64 result;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_async_event {
+	struct trace_entry ent;
+	int ctrl_id;
+	u32 result;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_sq {
+	struct trace_entry ent;
+	int ctrl_id;
+	char disk[32];
+	int qid;
+	u16 sq_head;
+	u16 sq_tail;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nvme_setup_cmd {};
+
+struct trace_event_data_offsets_nvme_complete_rq {};
+
+struct trace_event_data_offsets_nvme_async_event {};
+
+struct trace_event_data_offsets_nvme_sq {};
+
+typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
+
+typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
+
+typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
+
+typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
+
+struct nvme_ns_info {
+	struct nvme_ns_ids ids;
+	u32 nsid;
+	__le32 anagrpid;
+	bool is_shared;
+	bool is_readonly;
+	bool is_ready;
+};
+
+enum nvme_disposition {
+	COMPLETE = 0,
+	RETRY = 1,
+	FAILOVER = 2,
+	AUTHENTICATE = 3,
+};
+
+struct nvme_core_quirk_entry {
+	u16 vid;
+	const char *mn;
+	const char *fr;
+	long unsigned int quirks;
+};
+
+struct nvme_ana_group_desc {
+	__le32 grpid;
+	__le32 nnsids;
+	__le64 chgcnt;
+	__u8 state;
+	__u8 rsvd17[15];
+	__le32 nsids[0];
+};
+
+struct nvme_zns_lbafe {
+	__le64 zsze;
+	__u8 zdes;
+	__u8 rsvd9[7];
+};
+
+struct nvme_id_ns_zns {
+	__le16 zoc;
+	__le16 ozcs;
+	__le32 mar;
+	__le32 mor;
+	__le32 rrl;
+	__le32 frl;
+	__u8 rsvd20[2796];
+	struct nvme_zns_lbafe lbafe[64];
+	__u8 vs[256];
+};
+
+struct nvme_id_ctrl_zns {
+	__u8 zasl;
+	__u8 rsvd1[4095];
+};
+
+struct nvme_zone_descriptor {
+	__u8 zt;
+	__u8 zs;
+	__u8 za;
+	__u8 rsvd3[5];
+	__le64 zcap;
+	__le64 zslba;
+	__le64 wp;
+	__u8 rsvd32[32];
+};
+
+enum {
+	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
+};
+
+struct nvme_zone_report {
+	__le64 nr_zones;
+	__u8 resv8[56];
+	struct nvme_zone_descriptor entries[0];
+};
+
+enum {
+	NVME_ZRA_ZONE_REPORT = 0,
+	NVME_ZRASF_ZONE_REPORT_ALL = 0,
+	NVME_ZRASF_ZONE_STATE_EMPTY = 1,
+	NVME_ZRASF_ZONE_STATE_IMP_OPEN = 2,
+	NVME_ZRASF_ZONE_STATE_EXP_OPEN = 3,
+	NVME_ZRASF_ZONE_STATE_CLOSED = 4,
+	NVME_ZRASF_ZONE_STATE_READONLY = 5,
+	NVME_ZRASF_ZONE_STATE_FULL = 6,
+	NVME_ZRASF_ZONE_STATE_OFFLINE = 7,
+	NVME_REPORT_ZONE_PARTIAL = 1,
+};
+
+enum hwmon_sensor_types {
+	hwmon_chip = 0,
+	hwmon_temp = 1,
+	hwmon_in = 2,
+	hwmon_curr = 3,
+	hwmon_power = 4,
+	hwmon_energy = 5,
+	hwmon_humidity = 6,
+	hwmon_fan = 7,
+	hwmon_pwm = 8,
+	hwmon_intrusion = 9,
+	hwmon_max = 10,
+};
+
+enum hwmon_chip_attributes {
+	hwmon_chip_temp_reset_history = 0,
+	hwmon_chip_in_reset_history = 1,
+	hwmon_chip_curr_reset_history = 2,
+	hwmon_chip_power_reset_history = 3,
+	hwmon_chip_register_tz = 4,
+	hwmon_chip_update_interval = 5,
+	hwmon_chip_alarms = 6,
+	hwmon_chip_samples = 7,
+	hwmon_chip_curr_samples = 8,
+	hwmon_chip_in_samples = 9,
+	hwmon_chip_power_samples = 10,
+	hwmon_chip_temp_samples = 11,
+};
+
+enum hwmon_temp_attributes {
+	hwmon_temp_enable = 0,
+	hwmon_temp_input = 1,
+	hwmon_temp_type = 2,
+	hwmon_temp_lcrit = 3,
+	hwmon_temp_lcrit_hyst = 4,
+	hwmon_temp_min = 5,
+	hwmon_temp_min_hyst = 6,
+	hwmon_temp_max = 7,
+	hwmon_temp_max_hyst = 8,
+	hwmon_temp_crit = 9,
+	hwmon_temp_crit_hyst = 10,
+	hwmon_temp_emergency = 11,
+	hwmon_temp_emergency_hyst = 12,
+	hwmon_temp_alarm = 13,
+	hwmon_temp_lcrit_alarm = 14,
+	hwmon_temp_min_alarm = 15,
+	hwmon_temp_max_alarm = 16,
+	hwmon_temp_crit_alarm = 17,
+	hwmon_temp_emergency_alarm = 18,
+	hwmon_temp_fault = 19,
+	hwmon_temp_offset = 20,
+	hwmon_temp_label = 21,
+	hwmon_temp_lowest = 22,
+	hwmon_temp_highest = 23,
+	hwmon_temp_reset_history = 24,
+	hwmon_temp_rated_min = 25,
+	hwmon_temp_rated_max = 26,
+};
+
+struct hwmon_ops {
+	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+	enum hwmon_sensor_types type;
+	const u32 *config;
+};
+
+struct hwmon_chip_info {
+	const struct hwmon_ops *ops;
+	const struct hwmon_channel_info **info;
+};
+
+struct nvme_smart_log {
+	__u8 critical_warning;
+	__u8 temperature[2];
+	__u8 avail_spare;
+	__u8 spare_thresh;
+	__u8 percent_used;
+	__u8 endu_grp_crit_warn_sumry;
+	__u8 rsvd7[25];
+	__u8 data_units_read[16];
+	__u8 data_units_written[16];
+	__u8 host_reads[16];
+	__u8 host_writes[16];
+	__u8 ctrl_busy_time[16];
+	__u8 power_cycles[16];
+	__u8 power_on_hours[16];
+	__u8 unsafe_shutdowns[16];
+	__u8 media_errors[16];
+	__u8 num_err_log_entries[16];
+	__le32 warning_temp_time;
+	__le32 critical_comp_time;
+	__le16 temp_sensor[8];
+	__le32 thm_temp1_trans_count;
+	__le32 thm_temp2_trans_count;
+	__le32 thm_temp1_total_time;
+	__le32 thm_temp2_total_time;
+	__u8 rsvd232[280];
+};
+
+enum {
+	NVME_SMART_CRIT_SPARE = 1,
+	NVME_SMART_CRIT_TEMPERATURE = 2,
+	NVME_SMART_CRIT_RELIABILITY = 4,
+	NVME_SMART_CRIT_MEDIA = 8,
+	NVME_SMART_CRIT_VOLATILE_MEMORY = 16,
+};
+
+enum {
+	NVME_TEMP_THRESH_MASK = 65535,
+	NVME_TEMP_THRESH_SELECT_SHIFT = 16,
+	NVME_TEMP_THRESH_TYPE_UNDER = 1048576,
+};
+
+struct nvme_hwmon_data {
+	struct nvme_ctrl *ctrl;
+	struct nvme_smart_log *log;
+	struct mutex read_lock;
+};
+
+enum {
+	NVME_CMBSZ_SQS = 1,
+	NVME_CMBSZ_CQS = 2,
+	NVME_CMBSZ_LISTS = 4,
+	NVME_CMBSZ_RDS = 8,
+	NVME_CMBSZ_WDS = 16,
+	NVME_CMBSZ_SZ_SHIFT = 12,
+	NVME_CMBSZ_SZ_MASK = 1048575,
+	NVME_CMBSZ_SZU_SHIFT = 8,
+	NVME_CMBSZ_SZU_MASK = 15,
+};
+
+enum {
+	NVME_CMBMSC_CRE = 1,
+	NVME_CMBMSC_CMSE = 2,
+};
+
+enum {
+	NVME_SGL_FMT_DATA_DESC = 0,
+	NVME_SGL_FMT_SEG_DESC = 2,
+	NVME_SGL_FMT_LAST_SEG_DESC = 3,
+	NVME_KEY_SGL_FMT_DATA_DESC = 4,
+	NVME_TRANSPORT_SGL_DATA_DESC = 5,
+};
+
+enum {
+	NVME_HOST_MEM_ENABLE = 1,
+	NVME_HOST_MEM_RETURN = 2,
+};
+
+struct nvme_host_mem_buf_desc {
+	__le64 addr;
+	__le32 size;
+	__u32 rsvd;
+};
+
+struct nvme_completion {
+	union nvme_result result;
+	__le16 sq_head;
+	__le16 sq_id;
+	__u16 command_id;
+	__le16 status;
+};
+
+struct dma_pool;
+
+struct nvme_queue;
+
+struct nvme_dev {
+	struct nvme_queue *queues;
+	struct blk_mq_tag_set tagset;
+	struct blk_mq_tag_set admin_tagset;
+	u32 *dbs;
+	struct device *dev;
+	struct dma_pool *prp_page_pool;
+	struct dma_pool *prp_small_pool;
+	unsigned int online_queues;
+	unsigned int max_qid;
+	unsigned int io_queues[3];
+	unsigned int num_vecs;
+	u32 q_depth;
+	int io_sqes;
+	u32 db_stride;
+	void *bar;
+	long unsigned int bar_mapped_size;
+	struct mutex shutdown_lock;
+	bool subsystem;
+	u64 cmb_size;
+	bool cmb_use_sqes;
+	u32 cmbsz;
+	u32 cmbloc;
+	struct nvme_ctrl ctrl;
+	u32 last_ps;
+	bool hmb;
+	mempool_t *iod_mempool;
+	__le32 *dbbuf_dbs;
+	dma_addr_t dbbuf_dbs_dma_addr;
+	__le32 *dbbuf_eis;
+	dma_addr_t dbbuf_eis_dma_addr;
+	u64 host_mem_size;
+	u32 nr_host_mem_descs;
+	dma_addr_t host_mem_descs_dma;
+	struct nvme_host_mem_buf_desc *host_mem_descs;
+	void **host_mem_desc_bufs;
+	unsigned int nr_allocated_queues;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+};
+
+struct nvme_queue {
+	struct nvme_dev *dev;
+	spinlock_t sq_lock;
+	void *sq_cmds;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t cq_poll_lock;
+	struct nvme_completion *cqes;
+	dma_addr_t sq_dma_addr;
+	dma_addr_t cq_dma_addr;
+	u32 *q_db;
+	u32 q_depth;
+	u16 cq_vector;
+	u16 sq_tail;
+	u16 last_sq_tail;
+	u16 cq_head;
+	u16 qid;
+	u8 cq_phase;
+	u8 sqes;
+	long unsigned int flags;
+	__le32 *dbbuf_sq_db;
+	__le32 *dbbuf_cq_db;
+	__le32 *dbbuf_sq_ei;
+	__le32 *dbbuf_cq_ei;
+	struct completion delete_done;
+};
+
+struct nvme_iod {
+	struct nvme_request req;
+	struct nvme_command cmd;
+	bool use_sgl;
+	bool aborted;
+	s8 nr_allocations;
+	unsigned int dma_len;
+	dma_addr_t first_dma;
+	dma_addr_t meta_dma;
+	struct sg_table sgt;
+};
+
+enum fc_fh_type {
+	FC_TYPE_BLS = 0,
+	FC_TYPE_ELS = 1,
+	FC_TYPE_IP = 5,
+	FC_TYPE_FCP = 8,
+	FC_TYPE_CT = 32,
+	FC_TYPE_ILS = 34,
+	FC_TYPE_NVME = 40,
+};
+
+enum {
+	NVME_SGL_FMT_ADDRESS = 0,
+	NVME_SGL_FMT_OFFSET = 1,
+	NVME_SGL_FMT_TRANSPORT_A = 10,
+	NVME_SGL_FMT_INVALIDATE = 15,
+};
+
+enum {
+	NVMF_OPT_ERR = 0,
+	NVMF_OPT_TRANSPORT = 1,
+	NVMF_OPT_NQN = 2,
+	NVMF_OPT_TRADDR = 4,
+	NVMF_OPT_TRSVCID = 8,
+	NVMF_OPT_QUEUE_SIZE = 16,
+	NVMF_OPT_NR_IO_QUEUES = 32,
+	NVMF_OPT_TL_RETRY_COUNT = 64,
+	NVMF_OPT_KATO = 128,
+	NVMF_OPT_HOSTNQN = 256,
+	NVMF_OPT_RECONNECT_DELAY = 512,
+	NVMF_OPT_HOST_TRADDR = 1024,
+	NVMF_OPT_CTRL_LOSS_TMO = 2048,
+	NVMF_OPT_HOST_ID = 4096,
+	NVMF_OPT_DUP_CONNECT = 8192,
+	NVMF_OPT_DISABLE_SQFLOW = 16384,
+	NVMF_OPT_HDR_DIGEST = 32768,
+	NVMF_OPT_DATA_DIGEST = 65536,
+	NVMF_OPT_NR_WRITE_QUEUES = 131072,
+	NVMF_OPT_NR_POLL_QUEUES = 262144,
+	NVMF_OPT_TOS = 524288,
+	NVMF_OPT_FAIL_FAST_TMO = 1048576,
+	NVMF_OPT_HOST_IFACE = 2097152,
+	NVMF_OPT_DISCOVERY = 4194304,
+	NVMF_OPT_DHCHAP_SECRET = 8388608,
+	NVMF_OPT_DHCHAP_CTRL_SECRET = 16777216,
+};
+
+struct nvmf_transport_ops {
+	struct list_head entry;
+	struct module *module;
+	const char *name;
+	int required_opts;
+	int allowed_opts;
+	struct nvme_ctrl * (*create_ctrl)(struct device *, struct nvmf_ctrl_options *);
+};
+
+struct nvmefc_ls_req {
+	void *rqstaddr;
+	dma_addr_t rqstdma;
+	u32 rqstlen;
+	void *rspaddr;
+	dma_addr_t rspdma;
+	u32 rsplen;
+	u32 timeout;
+	void *private;
+	void (*done)(struct nvmefc_ls_req *, int);
+};
+
+struct nvmefc_ls_rsp {
+	void *rspbuf;
+	dma_addr_t rspdma;
+	u16 rsplen;
+	void (*done)(struct nvmefc_ls_rsp *);
+	void *nvme_fc_private;
+};
+
+struct nvme_fc_port_info {
+	u64 node_name;
+	u64 port_name;
+	u32 port_role;
+	u32 port_id;
+	u32 dev_loss_tmo;
+};
+
+enum nvmefc_fcp_datadir {
+	NVMEFC_FCP_NODATA = 0,
+	NVMEFC_FCP_WRITE = 1,
+	NVMEFC_FCP_READ = 2,
+};
+
+struct nvmefc_fcp_req {
+	void *cmdaddr;
+	void *rspaddr;
+	dma_addr_t cmddma;
+	dma_addr_t rspdma;
+	u16 cmdlen;
+	u16 rsplen;
+	u32 payload_length;
+	struct sg_table sg_table;
+	struct scatterlist *first_sgl;
+	int sg_cnt;
+	enum nvmefc_fcp_datadir io_dir;
+	__le16 sqid;
+	void (*done)(struct nvmefc_fcp_req *);
+	void *private;
+	u32 transferred_length;
+	u16 rcv_rsplen;
+	u32 status;
+};
+
+enum nvme_fc_obj_state {
+	FC_OBJSTATE_UNKNOWN = 0,
+	FC_OBJSTATE_NOTPRESENT = 1,
+	FC_OBJSTATE_ONLINE = 2,
+	FC_OBJSTATE_OFFLINE = 3,
+	FC_OBJSTATE_BLOCKED = 4,
+	FC_OBJSTATE_BYPASSED = 5,
+	FC_OBJSTATE_DIAGNOSTICS = 6,
+	FC_OBJSTATE_LINKDOWN = 7,
+	FC_OBJSTATE_ERROR = 8,
+	FC_OBJSTATE_LOOPBACK = 9,
+	FC_OBJSTATE_DELETED = 10,
+};
+
+struct nvme_fc_local_port {
+	u32 port_num;
+	u32 port_role;
+	u64 node_name;
+	u64 port_name;
+	void *private;
+	u32 port_id;
+	enum nvme_fc_obj_state port_state;
+};
+
+struct nvme_fc_remote_port {
+	u32 port_num;
+	u32 port_role;
+	u64 node_name;
+	u64 port_name;
+	struct nvme_fc_local_port *localport;
+	void *private;
+	u32 dev_loss_tmo;
+	u32 port_id;
+	enum nvme_fc_obj_state port_state;
+};
+
+struct nvme_fc_port_template {
+	void (*localport_delete)(struct nvme_fc_local_port *);
+	void (*remoteport_delete)(struct nvme_fc_remote_port *);
+	int (*create_queue)(struct nvme_fc_local_port *, unsigned int, u16, void **);
+	void (*delete_queue)(struct nvme_fc_local_port *, unsigned int, void *);
+	int (*ls_req)(struct nvme_fc_local_port *, struct nvme_fc_remote_port *, struct nvmefc_ls_req *);
+	int (*fcp_io)(struct nvme_fc_local_port *, struct nvme_fc_remote_port *, void *, struct nvmefc_fcp_req *);
+	void (*ls_abort)(struct nvme_fc_local_port *, struct nvme_fc_remote_port *, struct nvmefc_ls_req *);
+	void (*fcp_abort)(struct nvme_fc_local_port *, struct nvme_fc_remote_port *, void *, struct nvmefc_fcp_req *);
+	int (*xmt_ls_rsp)(struct nvme_fc_local_port *, struct nvme_fc_remote_port *, struct nvmefc_ls_rsp *);
+	void (*map_queues)(struct nvme_fc_local_port *, struct blk_mq_queue_map *);
+	u32 max_hw_queues;
+	u16 max_sgl_segments;
+	u16 max_dif_sgl_segments;
+	u64 dma_boundary;
+	u32 local_priv_sz;
+	u32 remote_priv_sz;
+	u32 lsrqst_priv_sz;
+	u32 fcprqst_priv_sz;
+};
+
+enum {
+	FCNVME_CMD_FLAGS_DIRMASK = 3,
+	FCNVME_CMD_FLAGS_WRITE = 1,
+	FCNVME_CMD_FLAGS_READ = 2,
+	FCNVME_CMD_FLAGS_PICWP = 4,
+};
+
+enum {
+	FCNVME_CMD_CAT_MASK = 15,
+	FCNVME_CMD_CAT_ADMINQ = 1,
+	FCNVME_CMD_CAT_CSSMASK = 7,
+	FCNVME_CMD_CAT_CSSFLAG = 8,
+};
+
+struct nvme_fc_cmd_iu {
+	__u8 format_id;
+	__u8 fc_id;
+	__be16 iu_len;
+	__u8 rsvd4[2];
+	__u8 rsv_cat;
+	__u8 flags;
+	__be64 connection_id;
+	__be32 csn;
+	__be32 data_len;
+	struct nvme_command sqe;
+	__u8 dps;
+	__u8 lbads;
+	__be16 ms;
+	__be32 rsvd92;
+};
+
+struct nvme_fc_ersp_iu {
+	__u8 ersp_result;
+	__u8 rsvd1;
+	__be16 iu_len;
+	__be32 rsn;
+	__be32 xfrd_len;
+	__be32 rsvd12;
+	struct nvme_completion cqe;
+};
+
+enum {
+	FCNVME_LS_RSVD = 0,
+	FCNVME_LS_RJT = 1,
+	FCNVME_LS_ACC = 2,
+	FCNVME_LS_CREATE_ASSOCIATION = 3,
+	FCNVME_LS_CREATE_CONNECTION = 4,
+	FCNVME_LS_DISCONNECT_ASSOC = 5,
+	FCNVME_LS_DISCONNECT_CONN = 6,
+};
+
+enum {
+	FCNVME_LSDESC_RSVD = 0,
+	FCNVME_LSDESC_RQST = 1,
+	FCNVME_LSDESC_RJT = 2,
+	FCNVME_LSDESC_CREATE_ASSOC_CMD = 3,
+	FCNVME_LSDESC_CREATE_CONN_CMD = 4,
+	FCNVME_LSDESC_DISCONN_CMD = 5,
+	FCNVME_LSDESC_CONN_ID = 6,
+	FCNVME_LSDESC_ASSOC_ID = 7,
+};
+
+struct fcnvme_ls_rqst_w0 {
+	u8 ls_cmd;
+	u8 zeros[3];
+};
+
+struct fcnvme_lsdesc_rqst {
+	__be32 desc_tag;
+	__be32 desc_len;
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 rsvd12;
+};
+
+enum fcnvme_ls_rjt_reason {
+	FCNVME_RJT_RC_NONE = 0,
+	FCNVME_RJT_RC_INVAL = 1,
+	FCNVME_RJT_RC_LOGIC = 3,
+	FCNVME_RJT_RC_UNAB = 9,
+	FCNVME_RJT_RC_UNSUP = 11,
+	FCNVME_RJT_RC_INV_ASSOC = 64,
+	FCNVME_RJT_RC_INV_CONN = 65,
+	FCNVME_RJT_RC_INV_PARAM = 66,
+	FCNVME_RJT_RC_INSUF_RES = 67,
+	FCNVME_RJT_RC_VENDOR = 255,
+};
+
+enum fcnvme_ls_rjt_explan {
+	FCNVME_RJT_EXP_NONE = 0,
+	FCNVME_RJT_EXP_OXID_RXID = 23,
+	FCNVME_RJT_EXP_UNAB_DATA = 42,
+	FCNVME_RJT_EXP_INV_LEN = 45,
+	FCNVME_RJT_EXP_INV_ERSP_RAT = 64,
+	FCNVME_RJT_EXP_INV_CTLR_ID = 65,
+	FCNVME_RJT_EXP_INV_QUEUE_ID = 66,
+	FCNVME_RJT_EXP_INV_SQSIZE = 67,
+	FCNVME_RJT_EXP_INV_HOSTID = 68,
+	FCNVME_RJT_EXP_INV_HOSTNQN = 69,
+	FCNVME_RJT_EXP_INV_SUBNQN = 70,
+};
+
+struct fcnvme_lsdesc_rjt {
+	__be32 desc_tag;
+	__be32 desc_len;
+	u8 rsvd8;
+	u8 reason_code;
+	u8 reason_explanation;
+	u8 vendor;
+	__be32 rsvd12;
+};
+
+struct fcnvme_lsdesc_cr_assoc_cmd {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be16 ersp_ratio;
+	__be16 rsvd10;
+	__be32 rsvd12[9];
+	__be16 cntlid;
+	__be16 sqsize;
+	__be32 rsvd52;
+	uuid_t hostid;
+	u8 hostnqn[256];
+	u8 subnqn[256];
+	__be32 rsvd584[108];
+};
+
+struct fcnvme_lsdesc_cr_conn_cmd {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be16 ersp_ratio;
+	__be16 rsvd10;
+	__be32 rsvd12[9];
+	__be16 qid;
+	__be16 sqsize;
+	__be32 rsvd52;
+};
+
+struct fcnvme_lsdesc_disconn_cmd {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be32 rsvd8[4];
+};
+
+struct fcnvme_lsdesc_conn_id {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be64 connection_id;
+};
+
+struct fcnvme_lsdesc_assoc_id {
+	__be32 desc_tag;
+	__be32 desc_len;
+	__be64 association_id;
+};
+
+struct fcnvme_ls_rjt {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_rqst rqst;
+	struct fcnvme_lsdesc_rjt rjt;
+};
+
+struct fcnvme_ls_acc_hdr {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_rqst rqst;
+};
+
+struct fcnvme_ls_cr_assoc_rqst {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_cr_assoc_cmd assoc_cmd;
+};
+
+struct fcnvme_ls_cr_assoc_acc {
+	struct fcnvme_ls_acc_hdr hdr;
+	struct fcnvme_lsdesc_assoc_id associd;
+	struct fcnvme_lsdesc_conn_id connectid;
+};
+
+struct fcnvme_ls_cr_conn_rqst {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_assoc_id associd;
+	struct fcnvme_lsdesc_cr_conn_cmd connect_cmd;
+};
+
+struct fcnvme_ls_cr_conn_acc {
+	struct fcnvme_ls_acc_hdr hdr;
+	struct fcnvme_lsdesc_conn_id connectid;
+};
+
+struct fcnvme_ls_disconnect_assoc_rqst {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_assoc_id associd;
+	struct fcnvme_lsdesc_disconn_cmd discon_cmd;
+};
+
+struct fcnvme_ls_disconnect_assoc_acc {
+	struct fcnvme_ls_acc_hdr hdr;
+};
+
+struct fcnvme_ls_disconnect_conn_rqst {
+	struct fcnvme_ls_rqst_w0 w0;
+	__be32 desc_list_len;
+	struct fcnvme_lsdesc_assoc_id associd;
+	struct fcnvme_lsdesc_conn_id connectid;
+};
+
+struct fcnvme_ls_disconnect_conn_acc {
+	struct fcnvme_ls_acc_hdr hdr;
+};
+
+union nvmefc_ls_requests {
+	struct fcnvme_ls_rqst_w0 w0;
+	struct fcnvme_ls_cr_assoc_rqst rq_cr_assoc;
+	struct fcnvme_ls_cr_conn_rqst rq_cr_conn;
+	struct fcnvme_ls_disconnect_assoc_rqst rq_dis_assoc;
+	struct fcnvme_ls_disconnect_conn_rqst rq_dis_conn;
+};
+
+union nvmefc_ls_responses {
+	struct fcnvme_ls_rjt rsp_rjt;
+	struct fcnvme_ls_cr_assoc_acc rsp_cr_assoc;
+	struct fcnvme_ls_cr_conn_acc rsp_cr_conn;
+	struct fcnvme_ls_disconnect_assoc_acc rsp_dis_assoc;
+	struct fcnvme_ls_disconnect_conn_acc rsp_dis_conn;
+};
+
+enum {
+	VERR_NO_ERROR = 0,
+	VERR_CR_ASSOC_LEN = 1,
+	VERR_CR_ASSOC_RQST_LEN = 2,
+	VERR_CR_ASSOC_CMD = 3,
+	VERR_CR_ASSOC_CMD_LEN = 4,
+	VERR_ERSP_RATIO = 5,
+	VERR_ASSOC_ALLOC_FAIL = 6,
+	VERR_QUEUE_ALLOC_FAIL = 7,
+	VERR_CR_CONN_LEN = 8,
+	VERR_CR_CONN_RQST_LEN = 9,
+	VERR_ASSOC_ID = 10,
+	VERR_ASSOC_ID_LEN = 11,
+	VERR_NO_ASSOC = 12,
+	VERR_CONN_ID = 13,
+	VERR_CONN_ID_LEN = 14,
+	VERR_INVAL_CONN = 15,
+	VERR_CR_CONN_CMD = 16,
+	VERR_CR_CONN_CMD_LEN = 17,
+	VERR_DISCONN_LEN = 18,
+	VERR_DISCONN_RQST_LEN = 19,
+	VERR_DISCONN_CMD = 20,
+	VERR_DISCONN_CMD_LEN = 21,
+	VERR_DISCONN_SCOPE = 22,
+	VERR_RS_LEN = 23,
+	VERR_RS_RQST_LEN = 24,
+	VERR_RS_CMD = 25,
+	VERR_RS_CMD_LEN = 26,
+	VERR_RS_RCTL = 27,
+	VERR_RS_RO = 28,
+	VERR_LSACC = 29,
+	VERR_LSDESC_RQST = 30,
+	VERR_LSDESC_RQST_LEN = 31,
+	VERR_CR_ASSOC = 32,
+	VERR_CR_ASSOC_ACC_LEN = 33,
+	VERR_CR_CONN = 34,
+	VERR_CR_CONN_ACC_LEN = 35,
+	VERR_DISCONN = 36,
+	VERR_DISCONN_ACC_LEN = 37,
+};
+
+enum nvme_fc_queue_flags {
+	NVME_FC_Q_CONNECTED = 0,
+	NVME_FC_Q_LIVE = 1,
+};
+
+struct nvme_fc_ctrl;
+
+struct nvme_fc_queue {
+	struct nvme_fc_ctrl *ctrl;
+	struct device *dev;
+	struct blk_mq_hw_ctx *hctx;
+	void *lldd_handle;
+	size_t cmnd_capsule_len;
+	u32 qnum;
+	u32 rqcnt;
+	u32 seqno;
+	u64 connection_id;
+	atomic_t csn;
+	long unsigned int flags;
+};
+
+struct nvme_fc_fcp_op {
+	struct nvme_request nreq;
+	struct nvmefc_fcp_req fcp_req;
+	struct nvme_fc_ctrl *ctrl;
+	struct nvme_fc_queue *queue;
+	struct request *rq;
+	atomic_t state;
+	u32 flags;
+	u32 rqno;
+	u32 nents;
+	struct nvme_fc_cmd_iu cmd_iu;
+	struct nvme_fc_ersp_iu rsp_iu;
+};
+
+struct nvme_fc_lport;
+
+struct nvme_fc_rport;
+
+struct nvmefc_ls_rcv_op;
+
+struct nvme_fc_ctrl {
+	spinlock_t lock;
+	struct nvme_fc_queue *queues;
+	struct device *dev;
+	struct nvme_fc_lport *lport;
+	struct nvme_fc_rport *rport;
+	u32 cnum;
+	bool ioq_live;
+	u64 association_id;
+	struct nvmefc_ls_rcv_op *rcv_disconn;
+	struct list_head ctrl_list;
+	struct blk_mq_tag_set admin_tag_set;
+	struct blk_mq_tag_set tag_set;
+	struct work_struct ioerr_work;
+	struct delayed_work connect_work;
+	struct kref ref;
+	long unsigned int flags;
+	u32 iocnt;
+	wait_queue_head_t ioabort_wait;
+	struct nvme_fc_fcp_op aen_ops[1];
+	struct nvme_ctrl ctrl;
+};
+
+enum nvme_fcop_flags {
+	FCOP_FLAGS_TERMIO = 1,
+	FCOP_FLAGS_AEN = 2,
+};
+
+struct nvmefc_ls_req_op {
+	struct nvmefc_ls_req ls_req;
+	struct nvme_fc_rport *rport;
+	struct nvme_fc_queue *queue;
+	struct request *rq;
+	u32 flags;
+	int ls_error;
+	struct completion ls_done;
+	struct list_head lsreq_list;
+	bool req_queued;
+};
+
+struct nvme_fc_rport {
+	struct nvme_fc_remote_port remoteport;
+	struct list_head endp_list;
+	struct list_head ctrl_list;
+	struct list_head ls_req_list;
+	struct list_head ls_rcv_list;
+	struct list_head disc_list;
+	struct device *dev;
+	struct nvme_fc_lport *lport;
+	spinlock_t lock;
+	struct kref ref;
+	atomic_t act_ctrl_cnt;
+	long unsigned int dev_loss_end;
+	struct work_struct lsrcv_work;
+};
+
+struct nvmefc_ls_rcv_op {
+	struct nvme_fc_rport *rport;
+	struct nvmefc_ls_rsp *lsrsp;
+	union nvmefc_ls_requests *rqstbuf;
+	union nvmefc_ls_responses *rspbuf;
+	u16 rqstdatalen;
+	bool handled;
+	dma_addr_t rspdma;
+	struct list_head lsrcv_list;
+};
+
+enum nvme_fcpop_state {
+	FCPOP_STATE_UNINIT = 0,
+	FCPOP_STATE_IDLE = 1,
+	FCPOP_STATE_ACTIVE = 2,
+	FCPOP_STATE_ABORTED = 3,
+	FCPOP_STATE_COMPLETE = 4,
+};
+
+struct nvme_fcp_op_w_sgl {
+	struct nvme_fc_fcp_op op;
+	struct scatterlist sgl[2];
+	uint8_t priv[0];
+};
+
+struct nvme_fc_lport {
+	struct nvme_fc_local_port localport;
+	struct ida endp_cnt;
+	struct list_head port_list;
+	struct list_head endp_list;
+	struct device *dev;
+	struct nvme_fc_port_template *ops;
+	struct kref ref;
+	atomic_t act_rport_cnt;
+};
+
+struct nvmet_fc_traddr {
+	u64 nn;
+	u64 pn;
+};
+
+enum {
+	NVME_CONNECT_DISABLE_SQFLOW = 4,
+};
+
+struct nvmf_connect_data {
+	uuid_t hostid;
+	__le16 cntlid;
+	char resv4[238];
+	char subsysnqn[256];
+	char hostnqn[256];
+	char resv5[256];
+};
+
+enum {
+	NVMF_ADDR_FAMILY_PCI = 0,
+	NVMF_ADDR_FAMILY_IP4 = 1,
+	NVMF_ADDR_FAMILY_IP6 = 2,
+	NVMF_ADDR_FAMILY_IB = 3,
+	NVMF_ADDR_FAMILY_FC = 4,
+	NVMF_ADDR_FAMILY_LOOP = 254,
+	NVMF_ADDR_FAMILY_MAX = 255,
+};
+
+enum {
+	NVMF_TRTYPE_RDMA = 1,
+	NVMF_TRTYPE_FC = 2,
+	NVMF_TRTYPE_TCP = 3,
+	NVMF_TRTYPE_LOOP = 254,
+	NVMF_TRTYPE_MAX = 255,
+};
+
+enum {
+	NVMF_TREQ_NOT_SPECIFIED = 0,
+	NVMF_TREQ_REQUIRED = 1,
+	NVMF_TREQ_NOT_REQUIRED = 2,
+	NVMF_TREQ_DISABLE_SQFLOW = 4,
+};
+
+enum {
+	NVMF_RDMA_QPTYPE_CONNECTED = 1,
+	NVMF_RDMA_QPTYPE_DATAGRAM = 2,
+};
+
+enum {
+	NVMF_RDMA_PRTYPE_NOT_SPECIFIED = 1,
+	NVMF_RDMA_PRTYPE_IB = 2,
+	NVMF_RDMA_PRTYPE_ROCE = 3,
+	NVMF_RDMA_PRTYPE_ROCEV2 = 4,
+	NVMF_RDMA_PRTYPE_IWARP = 5,
+};
+
+enum {
+	NVMF_RDMA_CMS_RDMA_CM = 1,
+};
+
+struct rdma {
+	__u8 qptype;
+	__u8 prtype;
+	__u8 cms;
+	__u8 resv3[5];
+	__u16 pkey;
+	__u8 resv10[246];
+};
+
+union tsas {
+	char common[256];
+	struct rdma rdma;
+};
+
+struct nvmf_disc_rsp_page_entry {
+	__u8 trtype;
+	__u8 adrfam;
+	__u8 subtype;
+	__u8 treq;
+	__le16 portid;
+	__le16 cntlid;
+	__le16 asqsz;
+	__le16 eflags;
+	__u8 resv10[20];
+	char trsvcid[32];
+	__u8 resv64[192];
+	char subnqn[256];
+	char traddr[256];
+	union tsas tsas;
+};
+
+struct nvme_error_slot {
+	__le64 error_count;
+	__le16 sqid;
+	__le16 cmdid;
+	__le16 status_field;
+	__le16 param_error_location;
+	__le64 lba;
+	__le32 nsid;
+	__u8 vs;
+	__u8 resv[3];
+	__le64 cs;
+	__u8 resv2[24];
+};
+
+struct nvmet_subsys;
+
+struct nvmet_ns {
+	struct percpu_ref ref;
+	struct block_device *bdev;
+	struct file *file;
+	bool readonly;
+	u32 nsid;
+	u32 blksize_shift;
+	loff_t size;
+	u8 nguid[16];
+	uuid_t uuid;
+	u32 anagrpid;
+	bool buffered_io;
+	bool enabled;
+	struct nvmet_subsys *subsys;
+	const char *device_path;
+	struct config_group device_group;
+	struct config_group group;
+	struct completion disable_done;
+	mempool_t *bvec_pool;
+	int use_p2pmem;
+	struct pci_dev *p2p_dev;
+	int pi_type;
+	int metadata_size;
+	u8 csi;
+};
+
+struct nvmet_subsys {
+	enum nvme_subsys_type type;
+	struct mutex lock;
+	struct kref ref;
+	struct xarray namespaces;
+	unsigned int nr_namespaces;
+	u32 max_nsid;
+	u16 cntlid_min;
+	u16 cntlid_max;
+	struct list_head ctrls;
+	struct list_head hosts;
+	bool allow_any_host;
+	u16 max_qid;
+	u64 ver;
+	char serial[20];
+	bool subsys_discovered;
+	char *subsysnqn;
+	bool pi_support;
+	struct config_group group;
+	struct config_group namespaces_group;
+	struct config_group allowed_hosts_group;
+	char *model_number;
+	u32 ieee_oui;
+	char *firmware_rev;
+	u8 zasl;
+};
+
+struct nvmet_cq {
+	u16 qid;
+	u16 size;
+};
+
+struct nvmet_ctrl;
+
+struct nvmet_sq {
+	struct nvmet_ctrl *ctrl;
+	struct percpu_ref ref;
+	u16 qid;
+	u16 size;
+	u32 sqhd;
+	bool sqhd_disabled;
+	struct completion free_done;
+	struct completion confirm_done;
+};
+
+struct nvmet_port;
+
+struct nvmet_req;
+
+struct nvmet_fabrics_ops;
+
+struct nvmet_ctrl {
+	struct nvmet_subsys *subsys;
+	struct nvmet_sq **sqs;
+	bool reset_tbkas;
+	struct mutex lock;
+	u64 cap;
+	u32 cc;
+	u32 csts;
+	uuid_t hostid;
+	u16 cntlid;
+	u32 kato;
+	struct nvmet_port *port;
+	u32 aen_enabled;
+	long unsigned int aen_masked;
+	struct nvmet_req *async_event_cmds[4];
+	unsigned int nr_async_event_cmds;
+	struct list_head async_events;
+	struct work_struct async_event_work;
+	struct list_head subsys_entry;
+	struct kref ref;
+	struct delayed_work ka_work;
+	struct work_struct fatal_err_work;
+	const struct nvmet_fabrics_ops *ops;
+	__le32 *changed_ns_list;
+	u32 nr_changed_ns;
+	char subsysnqn[256];
+	char hostnqn[256];
+	struct device *p2p_client;
+	struct xarray p2p_ns_map;
+	spinlock_t error_lock;
+	u64 err_counter;
+	struct nvme_error_slot slots[128];
+	bool pi_support;
+};
+
+struct nvmet_ana_group {
+	struct config_group group;
+	struct nvmet_port *port;
+	u32 grpid;
+};
+
+struct nvmet_port {
+	struct list_head entry;
+	struct nvmf_disc_rsp_page_entry disc_addr;
+	struct config_group group;
+	struct config_group subsys_group;
+	struct list_head subsystems;
+	struct config_group referrals_group;
+	struct list_head referrals;
+	struct list_head global_entry;
+	struct config_group ana_groups_group;
+	struct nvmet_ana_group ana_default_group;
+	enum nvme_ana_state *ana_state;
+	void *priv;
+	bool enabled;
+	int inline_data_size;
+	const struct nvmet_fabrics_ops *tr_ops;
+	bool pi_enable;
+};
+
+struct nvmet_fabrics_ops {
+	struct module *owner;
+	unsigned int type;
+	unsigned int msdbd;
+	unsigned int flags;
+	void (*queue_response)(struct nvmet_req *);
+	int (*add_port)(struct nvmet_port *);
+	void (*remove_port)(struct nvmet_port *);
+	void (*delete_ctrl)(struct nvmet_ctrl *);
+	void (*disc_traddr)(struct nvmet_req *, struct nvmet_port *, char *);
+	u16 (*install_queue)(struct nvmet_sq *);
+	void (*discovery_chg)(struct nvmet_port *);
+	u8 (*get_mdts)(const struct nvmet_ctrl *);
+	u16 (*get_max_queue_size)(const struct nvmet_ctrl *);
+};
+
+struct nvmet_req {
+	struct nvme_command *cmd;
+	struct nvme_completion *cqe;
+	struct nvmet_sq *sq;
+	struct nvmet_cq *cq;
+	struct nvmet_ns *ns;
+	struct scatterlist *sg;
+	struct scatterlist *metadata_sg;
+	struct bio_vec inline_bvec[8];
+	union {
+		struct {
+			struct bio inline_bio;
+		} b;
+		struct {
+			bool mpool_alloc;
+			struct kiocb iocb;
+			struct bio_vec *bvec;
+			struct work_struct work;
+		} f;
+		struct {
+			struct bio inline_bio;
+			struct request *rq;
+			struct work_struct work;
+			bool use_workqueue;
+		} p;
+		struct {
+			struct bio inline_bio;
+			struct work_struct zmgmt_work;
+		} z;
+	};
+	int sg_cnt;
+	int metadata_sg_cnt;
+	size_t transfer_len;
+	size_t metadata_len;
+	struct nvmet_port *port;
+	void (*execute)(struct nvmet_req *);
+	const struct nvmet_fabrics_ops *ops;
+	struct pci_dev *p2p_dev;
+	struct device *p2p_client;
+	u16 error_loc;
+	u64 error_slba;
+};
+
+struct nvmet_host {
+	struct config_group group;
+	u8 *dhchap_secret;
+	u8 *dhchap_ctrl_secret;
+	u8 dhchap_key_hash;
+	u8 dhchap_ctrl_key_hash;
+	u8 dhchap_hash_id;
+	u8 dhchap_dhgroup_id;
+};
+
+struct nvmet_host_link {
+	struct list_head entry;
+	struct nvmet_host *host;
+};
+
+struct nvmet_subsys_link {
+	struct list_head entry;
+	struct nvmet_subsys *subsys;
+};
+
+struct nvmet_type_name_map {
+	u8 type;
+	const char *name;
+};
+
+enum {
+	NVME_MC_EXTENDED_LBA = 1,
+	NVME_MC_METADATA_PTR = 2,
+};
+
+enum {
+	NVME_NS_NO_WRITE_PROTECT = 0,
+	NVME_NS_WRITE_PROTECT = 1,
+	NVME_NS_WRITE_PROTECT_POWER_CYCLE = 2,
+	NVME_NS_WRITE_PROTECT_PERMANENT = 3,
+};
+
+enum {
+	NVME_CONNECT_AUTHREQ_ASCR = 262144,
+	NVME_CONNECT_AUTHREQ_ATR = 131072,
+};
+
+enum nvme_async_event_type {
+	NVME_AER_TYPE_ERROR = 0,
+	NVME_AER_TYPE_SMART = 1,
+	NVME_AER_TYPE_NOTICE = 2,
+};
+
+struct nvmet_async_event {
+	struct list_head entry;
+	u8 event_type;
+	u8 event_info;
+	u8 log_page;
+};
+
+struct trace_event_raw_nvmet_req_init {
+	struct trace_entry ent;
+	struct nvme_command *cmd;
+	struct nvmet_ctrl *ctrl;
+	char disk[32];
+	int qid;
+	u16 cid;
+	u8 opcode;
+	u8 fctype;
+	u8 flags;
+	u32 nsid;
+	u64 metadata;
+	u8 cdw10[24];
+	char __data[0];
+};
+
+struct trace_event_raw_nvmet_req_complete {
+	struct trace_entry ent;
+	struct nvmet_ctrl *ctrl;
+	char disk[32];
+	int qid;
+	int cid;
+	u64 result;
+	u16 status;
+	char __data[0];
+};
+
+struct trace_event_raw_nvmet_async_event {
+	struct trace_entry ent;
+	int ctrl_id;
+	u32 result;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nvmet_req_init {};
+
+struct trace_event_data_offsets_nvmet_req_complete {};
+
+struct trace_event_data_offsets_nvmet_async_event {};
+
+typedef void (*btf_trace_nvmet_req_init)(void *, struct nvmet_req *, struct nvme_command *);
+
+typedef void (*btf_trace_nvmet_req_complete)(void *, struct nvmet_req *);
+
+typedef void (*btf_trace_nvmet_async_event)(void *, struct nvmet_ctrl *, __le32);
+
+struct nvmet_report_zone_data {
+	struct nvmet_req *req;
+	u64 out_buf_offset;
+	u64 out_nr_zones;
+	u64 nr_zones;
+	u8 zrasf;
+};
+
+struct nvmet_zone_mgmt_send_all_data {
+	long unsigned int *zbitmap;
+	struct nvmet_req *req;
+};
+
+struct nvmf_disc_rsp_page_hdr {
+	__le64 genctr;
+	__le64 numrec;
+	__le16 recfmt;
+	__u8 resv14[1006];
+	struct nvmf_disc_rsp_page_entry entries[0];
+};
+
+struct nvme_loop_queue;
+
+struct nvme_loop_iod {
+	struct nvme_request nvme_req;
+	struct nvme_command cmd;
+	struct nvme_completion cqe;
+	struct nvmet_req req;
+	struct nvme_loop_queue *queue;
+	struct work_struct work;
+	struct sg_table sg_table;
+	struct scatterlist first_sgl[0];
+};
+
+struct nvme_loop_ctrl;
+
+struct nvme_loop_queue {
+	struct nvmet_cq nvme_cq;
+	struct nvmet_sq nvme_sq;
+	struct nvme_loop_ctrl *ctrl;
+	long unsigned int flags;
+};
+
+struct nvme_loop_ctrl {
+	struct nvme_loop_queue *queues;
+	struct blk_mq_tag_set admin_tag_set;
+	struct list_head list;
+	struct blk_mq_tag_set tag_set;
+	struct nvme_loop_iod async_event_iod;
+	struct nvme_ctrl ctrl;
+	struct nvmet_port *port;
+};
+
+enum nvme_loop_queue_flags {
+	NVME_LOOP_Q_LIVE = 0,
+};
+
+struct fc_ba_rjt {
+	__u8 br_resvd;
+	__u8 br_reason;
+	__u8 br_explan;
+	__u8 br_vendor;
+};
+
+struct nvmet_fc_port_info {
+	u64 node_name;
+	u64 port_name;
+	u32 port_id;
+};
+
+enum {
+	NVMET_FCOP_READDATA = 1,
+	NVMET_FCOP_WRITEDATA = 2,
+	NVMET_FCOP_READDATA_RSP = 3,
+	NVMET_FCOP_RSP = 4,
+};
+
+struct nvmefc_tgt_fcp_req {
+	u8 op;
+	u16 hwqid;
+	u32 offset;
+	u32 timeout;
+	u32 transfer_length;
+	struct fc_ba_rjt ba_rjt;
+	struct scatterlist *sg;
+	int sg_cnt;
+	void *rspaddr;
+	dma_addr_t rspdma;
+	u16 rsplen;
+	void (*done)(struct nvmefc_tgt_fcp_req *);
+	void *nvmet_fc_private;
+	u32 transferred_length;
+	int fcp_error;
+};
+
+struct nvmet_fc_target_port {
+	u32 port_num;
+	u64 node_name;
+	u64 port_name;
+	void *private;
+	u32 port_id;
+	enum nvme_fc_obj_state port_state;
+};
+
+struct nvmet_fc_target_template {
+	void (*targetport_delete)(struct nvmet_fc_target_port *);
+	int (*xmt_ls_rsp)(struct nvmet_fc_target_port *, struct nvmefc_ls_rsp *);
+	int (*fcp_op)(struct nvmet_fc_target_port *, struct nvmefc_tgt_fcp_req *);
+	void (*fcp_abort)(struct nvmet_fc_target_port *, struct nvmefc_tgt_fcp_req *);
+	void (*fcp_req_release)(struct nvmet_fc_target_port *, struct nvmefc_tgt_fcp_req *);
+	void (*defer_rcv)(struct nvmet_fc_target_port *, struct nvmefc_tgt_fcp_req *);
+	void (*discovery_event)(struct nvmet_fc_target_port *);
+	int (*ls_req)(struct nvmet_fc_target_port *, void *, struct nvmefc_ls_req *);
+	void (*ls_abort)(struct nvmet_fc_target_port *, void *, struct nvmefc_ls_req *);
+	void (*host_release)(void *);
+	u32 max_hw_queues;
+	u16 max_sgl_segments;
+	u16 max_dif_sgl_segments;
+	u64 dma_boundary;
+	u32 target_features;
+	u32 target_priv_sz;
+	u32 lsrqst_priv_sz;
+};
+
+enum {
+	NVMF_OPT_ERR___2 = 0,
+	NVMF_OPT_WWNN = 1,
+	NVMF_OPT_WWPN = 2,
+	NVMF_OPT_ROLES = 4,
+	NVMF_OPT_FCADDR = 8,
+	NVMF_OPT_LPWWNN = 16,
+	NVMF_OPT_LPWWPN = 32,
+};
+
+struct fcloop_ctrl_options {
+	int mask;
+	u64 wwnn;
+	u64 wwpn;
+	u32 roles;
+	u32 fcaddr;
+	u64 lpwwnn;
+	u64 lpwwpn;
+};
+
+struct fcloop_lport {
+	struct nvme_fc_local_port *localport;
+	struct list_head lport_list;
+	struct completion unreg_done;
+};
+
+struct fcloop_lport_priv {
+	struct fcloop_lport *lport;
+};
+
+struct fcloop_nport;
+
+struct fcloop_rport {
+	struct nvme_fc_remote_port *remoteport;
+	struct nvmet_fc_target_port *targetport;
+	struct fcloop_nport *nport;
+	struct fcloop_lport *lport;
+	spinlock_t lock;
+	struct list_head ls_list;
+	struct work_struct ls_work;
+};
+
+struct fcloop_tport;
+
+struct fcloop_nport {
+	struct fcloop_rport *rport;
+	struct fcloop_tport *tport;
+	struct fcloop_lport *lport;
+	struct list_head nport_list;
+	struct kref ref;
+	u64 node_name;
+	u64 port_name;
+	u32 port_role;
+	u32 port_id;
+};
+
+struct fcloop_tport {
+	struct nvmet_fc_target_port *targetport;
+	struct nvme_fc_remote_port *remoteport;
+	struct fcloop_nport *nport;
+	struct fcloop_lport *lport;
+	spinlock_t lock;
+	struct list_head ls_list;
+	struct work_struct ls_work;
+};
+
+struct fcloop_lsreq {
+	struct nvmefc_ls_req *lsreq;
+	struct nvmefc_ls_rsp ls_rsp;
+	int lsdir;
+	int status;
+	struct list_head ls_list;
+};
+
+struct fcloop_rscn {
+	struct fcloop_tport *tport;
+	struct work_struct work;
+};
+
+enum {
+	INI_IO_START = 0,
+	INI_IO_ACTIVE = 1,
+	INI_IO_ABORTED = 2,
+	INI_IO_COMPLETED = 3,
+};
+
+struct fcloop_fcpreq {
+	struct fcloop_tport *tport;
+	struct nvmefc_fcp_req *fcpreq;
+	spinlock_t reqlock;
+	u16 status;
+	u32 inistate;
+	bool active;
+	bool aborted;
+	struct kref ref;
+	struct work_struct fcp_rcv_work;
+	struct work_struct abort_rcv_work;
+	struct work_struct tio_done_work;
+	struct nvmefc_tgt_fcp_req tgt_fcp_req;
+};
+
+struct fcloop_ini_fcpreq {
+	struct nvmefc_fcp_req *fcpreq;
+	struct fcloop_fcpreq *tfcp_req;
+	spinlock_t inilock;
+};
+
+enum {
+	NVMET_FCTGTFEAT_READDATA_RSP = 1,
+};
+
+struct nvmet_fc_tgtport;
+
+struct nvmet_fc_tgt_assoc;
+
+struct nvmet_fc_ls_iod {
+	struct nvmefc_ls_rsp *lsrsp;
+	struct nvmefc_tgt_fcp_req *fcpreq;
+	struct list_head ls_rcv_list;
+	struct nvmet_fc_tgtport *tgtport;
+	struct nvmet_fc_tgt_assoc *assoc;
+	void *hosthandle;
+	union nvmefc_ls_requests *rqstbuf;
+	union nvmefc_ls_responses *rspbuf;
+	u16 rqstdatalen;
+	dma_addr_t rspdma;
+	struct scatterlist sg[2];
+	struct work_struct work;
+};
+
+struct nvmet_fc_port_entry;
+
+struct nvmet_fc_tgtport {
+	struct nvmet_fc_target_port fc_target_port;
+	struct list_head tgt_list;
+	struct device *dev;
+	struct nvmet_fc_target_template *ops;
+	struct nvmet_fc_ls_iod *iod;
+	spinlock_t lock;
+	struct list_head ls_rcv_list;
+	struct list_head ls_req_list;
+	struct list_head ls_busylist;
+	struct list_head assoc_list;
+	struct list_head host_list;
+	struct ida assoc_cnt;
+	struct nvmet_fc_port_entry *pe;
+	struct kref ref;
+	u32 max_sg_cnt;
+};
+
+struct nvmet_fc_hostport;
+
+struct nvmet_fc_tgt_queue;
+
+struct nvmet_fc_tgt_assoc {
+	u64 association_id;
+	u32 a_id;
+	atomic_t terminating;
+	struct nvmet_fc_tgtport *tgtport;
+	struct nvmet_fc_hostport *hostport;
+	struct nvmet_fc_ls_iod *rcv_disconn;
+	struct list_head a_list;
+	struct nvmet_fc_tgt_queue *queues[129];
+	struct kref ref;
+	struct work_struct del_work;
+	struct callback_head rcu;
+};
+
+struct nvmet_fc_ls_req_op {
+	struct nvmefc_ls_req ls_req;
+	struct nvmet_fc_tgtport *tgtport;
+	void *hosthandle;
+	int ls_error;
+	struct list_head lsreq_list;
+	bool req_queued;
+};
+
+enum nvmet_fcp_datadir {
+	NVMET_FCP_NODATA = 0,
+	NVMET_FCP_WRITE = 1,
+	NVMET_FCP_READ = 2,
+	NVMET_FCP_ABORTED = 3,
+};
+
+struct nvmet_fc_fcp_iod {
+	struct nvmefc_tgt_fcp_req *fcpreq;
+	struct nvme_fc_cmd_iu cmdiubuf;
+	struct nvme_fc_ersp_iu rspiubuf;
+	dma_addr_t rspdma;
+	struct scatterlist *next_sg;
+	struct scatterlist *data_sg;
+	int data_sg_cnt;
+	u32 offset;
+	enum nvmet_fcp_datadir io_dir;
+	bool active;
+	bool abort;
+	bool aborted;
+	bool writedataactive;
+	spinlock_t flock;
+	struct nvmet_req req;
+	struct work_struct defer_work;
+	struct nvmet_fc_tgtport *tgtport;
+	struct nvmet_fc_tgt_queue *queue;
+	struct list_head fcp_list;
+};
+
+struct nvmet_fc_tgt_queue {
+	bool ninetypercent;
+	u16 qid;
+	u16 sqsize;
+	u16 ersp_ratio;
+	__le16 sqhd;
+	atomic_t connected;
+	atomic_t sqtail;
+	atomic_t zrspcnt;
+	atomic_t rsn;
+	spinlock_t qlock;
+	struct nvmet_cq nvme_cq;
+	struct nvmet_sq nvme_sq;
+	struct nvmet_fc_tgt_assoc *assoc;
+	struct list_head fod_list;
+	struct list_head pending_cmd_list;
+	struct list_head avail_defer_list;
+	struct workqueue_struct *work_q;
+	struct kref ref;
+	struct callback_head rcu;
+	struct nvmet_fc_fcp_iod fod[0];
+};
+
+struct nvmet_fc_port_entry {
+	struct nvmet_fc_tgtport *tgtport;
+	struct nvmet_port *port;
+	u64 node_name;
+	u64 port_name;
+	struct list_head pe_list;
+};
+
+struct nvmet_fc_defer_fcp_req {
+	struct list_head req_list;
+	struct nvmefc_tgt_fcp_req *fcp_req;
+};
+
+struct nvmet_fc_hostport {
+	struct nvmet_fc_tgtport *tgtport;
+	void *hosthandle;
+	struct list_head host_list;
+	struct kref ref;
+	u8 invalid;
+};
+
+enum nvme_tcp_pfv {
+	NVME_TCP_PFV_1_0 = 0,
+};
+
+enum nvme_tcp_digest_option {
+	NVME_TCP_HDR_DIGEST_ENABLE = 1,
+	NVME_TCP_DATA_DIGEST_ENABLE = 2,
+};
+
+enum nvme_tcp_pdu_type {
+	nvme_tcp_icreq = 0,
+	nvme_tcp_icresp = 1,
+	nvme_tcp_h2c_term = 2,
+	nvme_tcp_c2h_term = 3,
+	nvme_tcp_cmd = 4,
+	nvme_tcp_rsp = 5,
+	nvme_tcp_h2c_data = 6,
+	nvme_tcp_c2h_data = 7,
+	nvme_tcp_r2t = 9,
+};
+
+enum nvme_tcp_pdu_flags {
+	NVME_TCP_F_HDGST = 1,
+	NVME_TCP_F_DDGST = 2,
+	NVME_TCP_F_DATA_LAST = 4,
+	NVME_TCP_F_DATA_SUCCESS = 8,
+};
+
+struct nvme_tcp_hdr {
+	__u8 type;
+	__u8 flags;
+	__u8 hlen;
+	__u8 pdo;
+	__le32 plen;
+};
+
+struct nvme_tcp_icreq_pdu {
+	struct nvme_tcp_hdr hdr;
+	__le16 pfv;
+	__u8 hpda;
+	__u8 digest;
+	__le32 maxr2t;
+	__u8 rsvd2[112];
+};
+
+struct nvme_tcp_icresp_pdu {
+	struct nvme_tcp_hdr hdr;
+	__le16 pfv;
+	__u8 cpda;
+	__u8 digest;
+	__le32 maxdata;
+	__u8 rsvd[112];
+};
+
+struct nvme_tcp_cmd_pdu {
+	struct nvme_tcp_hdr hdr;
+	struct nvme_command cmd;
+};
+
+struct nvme_tcp_rsp_pdu {
+	struct nvme_tcp_hdr hdr;
+	struct nvme_completion cqe;
+};
+
+struct nvme_tcp_r2t_pdu {
+	struct nvme_tcp_hdr hdr;
+	__u16 command_id;
+	__u16 ttag;
+	__le32 r2t_offset;
+	__le32 r2t_length;
+	__u8 rsvd[4];
+};
+
+struct nvme_tcp_data_pdu {
+	struct nvme_tcp_hdr hdr;
+	__u16 command_id;
+	__u16 ttag;
+	__le32 data_offset;
+	__le32 data_length;
+	__u8 rsvd[4];
+};
+
+union nvme_tcp_pdu {
+	struct nvme_tcp_icreq_pdu icreq;
+	struct nvme_tcp_icresp_pdu icresp;
+	struct nvme_tcp_cmd_pdu cmd;
+	struct nvme_tcp_rsp_pdu rsp;
+	struct nvme_tcp_r2t_pdu r2t;
+	struct nvme_tcp_data_pdu data;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ipv6_opt_hdr;
+
+struct ipv6_rt_hdr;
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct ip_mc_socklist;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__u16 cmsg_flags;
+	struct ip_options_rcu *inet_opt;
+	__be16 inet_sport;
+	__u16 inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct ip_mc_socklist *mc_list;
+	struct inet_cork_full cork;
+};
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist *ipv6_fl_list;
+	struct ipv6_txoptions *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist *next;
+	struct ip6_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	long unsigned int linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	long unsigned int lastuse;
+	long unsigned int expires;
+	struct net *fl_net;
+};
+
+enum nvmet_tcp_send_state {
+	NVMET_TCP_SEND_DATA_PDU = 0,
+	NVMET_TCP_SEND_DATA = 1,
+	NVMET_TCP_SEND_R2T = 2,
+	NVMET_TCP_SEND_DDGST = 3,
+	NVMET_TCP_SEND_RESPONSE = 4,
+};
+
+enum nvmet_tcp_recv_state {
+	NVMET_TCP_RECV_PDU = 0,
+	NVMET_TCP_RECV_DATA = 1,
+	NVMET_TCP_RECV_DDGST = 2,
+	NVMET_TCP_RECV_ERR = 3,
+};
+
+enum {
+	NVMET_TCP_F_INIT_FAILED = 1,
+};
+
+struct nvmet_tcp_queue;
+
+struct nvmet_tcp_cmd {
+	struct nvmet_tcp_queue *queue;
+	struct nvmet_req req;
+	struct nvme_tcp_cmd_pdu *cmd_pdu;
+	struct nvme_tcp_rsp_pdu *rsp_pdu;
+	struct nvme_tcp_data_pdu *data_pdu;
+	struct nvme_tcp_r2t_pdu *r2t_pdu;
+	u32 rbytes_done;
+	u32 wbytes_done;
+	u32 pdu_len;
+	u32 pdu_recv;
+	int sg_idx;
+	struct msghdr recv_msg;
+	struct bio_vec *iov;
+	u32 flags;
+	struct list_head entry;
+	struct llist_node lentry;
+	u32 offset;
+	struct scatterlist *cur_sg;
+	enum nvmet_tcp_send_state state;
+	__le32 exp_ddgst;
+	__le32 recv_ddgst;
+};
+
+enum nvmet_tcp_queue_state {
+	NVMET_TCP_Q_CONNECTING = 0,
+	NVMET_TCP_Q_LIVE = 1,
+	NVMET_TCP_Q_DISCONNECTING = 2,
+};
+
+struct nvmet_tcp_port;
+
+struct nvmet_tcp_queue {
+	struct socket *sock;
+	struct nvmet_tcp_port *port;
+	struct work_struct io_work;
+	struct nvmet_cq nvme_cq;
+	struct nvmet_sq nvme_sq;
+	struct nvmet_tcp_cmd *cmds;
+	unsigned int nr_cmds;
+	struct list_head free_list;
+	struct llist_head resp_list;
+	struct list_head resp_send_list;
+	int send_list_len;
+	struct nvmet_tcp_cmd *snd_cmd;
+	int offset;
+	int left;
+	enum nvmet_tcp_recv_state rcv_state;
+	struct nvmet_tcp_cmd *cmd;
+	union nvme_tcp_pdu pdu;
+	bool hdr_digest;
+	bool data_digest;
+	struct ahash_request *snd_hash;
+	struct ahash_request *rcv_hash;
+	long unsigned int poll_end;
+	spinlock_t state_lock;
+	enum nvmet_tcp_queue_state state;
+	struct __kernel_sockaddr_storage sockaddr;
+	struct __kernel_sockaddr_storage sockaddr_peer;
+	struct work_struct release_work;
+	int idx;
+	struct list_head queue_list;
+	struct nvmet_tcp_cmd connect;
+	struct page_frag_cache pf_cache;
+	void (*data_ready)(struct sock *);
+	void (*state_change)(struct sock *);
+	void (*write_space)(struct sock *);
+};
+
+struct nvmet_tcp_port {
+	struct socket *sock;
+	struct work_struct accept_work;
+	struct nvmet_port *nport;
+	struct __kernel_sockaddr_storage addr;
+	void (*data_ready)(struct sock *);
+};
+
+enum {
+	ATA_MAX_DEVICES = 2,
+	ATA_MAX_PRD = 256,
+	ATA_SECT_SIZE = 512,
+	ATA_MAX_SECTORS_128 = 128,
+	ATA_MAX_SECTORS = 256,
+	ATA_MAX_SECTORS_1024 = 1024,
+	ATA_MAX_SECTORS_LBA48 = 65535,
+	ATA_MAX_SECTORS_TAPE = 65535,
+	ATA_MAX_TRIM_RNUM = 64,
+	ATA_ID_WORDS = 256,
+	ATA_ID_CONFIG = 0,
+	ATA_ID_CYLS = 1,
+	ATA_ID_HEADS = 3,
+	ATA_ID_SECTORS = 6,
+	ATA_ID_SERNO = 10,
+	ATA_ID_BUF_SIZE = 21,
+	ATA_ID_FW_REV = 23,
+	ATA_ID_PROD = 27,
+	ATA_ID_MAX_MULTSECT = 47,
+	ATA_ID_DWORD_IO = 48,
+	ATA_ID_TRUSTED = 48,
+	ATA_ID_CAPABILITY = 49,
+	ATA_ID_OLD_PIO_MODES = 51,
+	ATA_ID_OLD_DMA_MODES = 52,
+	ATA_ID_FIELD_VALID = 53,
+	ATA_ID_CUR_CYLS = 54,
+	ATA_ID_CUR_HEADS = 55,
+	ATA_ID_CUR_SECTORS = 56,
+	ATA_ID_MULTSECT = 59,
+	ATA_ID_LBA_CAPACITY = 60,
+	ATA_ID_SWDMA_MODES = 62,
+	ATA_ID_MWDMA_MODES = 63,
+	ATA_ID_PIO_MODES = 64,
+	ATA_ID_EIDE_DMA_MIN = 65,
+	ATA_ID_EIDE_DMA_TIME = 66,
+	ATA_ID_EIDE_PIO = 67,
+	ATA_ID_EIDE_PIO_IORDY = 68,
+	ATA_ID_ADDITIONAL_SUPP = 69,
+	ATA_ID_QUEUE_DEPTH = 75,
+	ATA_ID_SATA_CAPABILITY = 76,
+	ATA_ID_SATA_CAPABILITY_2 = 77,
+	ATA_ID_FEATURE_SUPP = 78,
+	ATA_ID_MAJOR_VER = 80,
+	ATA_ID_COMMAND_SET_1 = 82,
+	ATA_ID_COMMAND_SET_2 = 83,
+	ATA_ID_CFSSE = 84,
+	ATA_ID_CFS_ENABLE_1 = 85,
+	ATA_ID_CFS_ENABLE_2 = 86,
+	ATA_ID_CSF_DEFAULT = 87,
+	ATA_ID_UDMA_MODES = 88,
+	ATA_ID_HW_CONFIG = 93,
+	ATA_ID_SPG = 98,
+	ATA_ID_LBA_CAPACITY_2 = 100,
+	ATA_ID_SECTOR_SIZE = 106,
+	ATA_ID_WWN = 108,
+	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+	ATA_ID_COMMAND_SET_3 = 119,
+	ATA_ID_COMMAND_SET_4 = 120,
+	ATA_ID_LAST_LUN = 126,
+	ATA_ID_DLF = 128,
+	ATA_ID_CSFO = 129,
+	ATA_ID_CFA_POWER = 160,
+	ATA_ID_CFA_KEY_MGMT = 162,
+	ATA_ID_CFA_MODES = 163,
+	ATA_ID_DATA_SET_MGMT = 169,
+	ATA_ID_SCT_CMD_XPORT = 206,
+	ATA_ID_ROT_SPEED = 217,
+	ATA_ID_PIO4 = 2,
+	ATA_ID_SERNO_LEN = 20,
+	ATA_ID_FW_REV_LEN = 8,
+	ATA_ID_PROD_LEN = 40,
+	ATA_ID_WWN_LEN = 8,
+	ATA_PCI_CTL_OFS = 2,
+	ATA_PIO0 = 1,
+	ATA_PIO1 = 3,
+	ATA_PIO2 = 7,
+	ATA_PIO3 = 15,
+	ATA_PIO4 = 31,
+	ATA_PIO5 = 63,
+	ATA_PIO6 = 127,
+	ATA_PIO4_ONLY = 16,
+	ATA_SWDMA0 = 1,
+	ATA_SWDMA1 = 3,
+	ATA_SWDMA2 = 7,
+	ATA_SWDMA2_ONLY = 4,
+	ATA_MWDMA0 = 1,
+	ATA_MWDMA1 = 3,
+	ATA_MWDMA2 = 7,
+	ATA_MWDMA3 = 15,
+	ATA_MWDMA4 = 31,
+	ATA_MWDMA12_ONLY = 6,
+	ATA_MWDMA2_ONLY = 4,
+	ATA_UDMA0 = 1,
+	ATA_UDMA1 = 3,
+	ATA_UDMA2 = 7,
+	ATA_UDMA3 = 15,
+	ATA_UDMA4 = 31,
+	ATA_UDMA5 = 63,
+	ATA_UDMA6 = 127,
+	ATA_UDMA7 = 255,
+	ATA_UDMA24_ONLY = 20,
+	ATA_UDMA_MASK_40C = 7,
+	ATA_PRD_SZ = 8,
+	ATA_PRD_TBL_SZ = 2048,
+	ATA_PRD_EOT = 2147483648,
+	ATA_DMA_TABLE_OFS = 4,
+	ATA_DMA_STATUS = 2,
+	ATA_DMA_CMD = 0,
+	ATA_DMA_WR = 8,
+	ATA_DMA_START = 1,
+	ATA_DMA_INTR = 4,
+	ATA_DMA_ERR = 2,
+	ATA_DMA_ACTIVE = 1,
+	ATA_HOB = 128,
+	ATA_NIEN = 2,
+	ATA_LBA = 64,
+	ATA_DEV1 = 16,
+	ATA_DEVICE_OBS = 160,
+	ATA_DEVCTL_OBS = 8,
+	ATA_BUSY = 128,
+	ATA_DRDY = 64,
+	ATA_DF = 32,
+	ATA_DSC = 16,
+	ATA_DRQ = 8,
+	ATA_CORR = 4,
+	ATA_SENSE = 2,
+	ATA_ERR = 1,
+	ATA_SRST = 4,
+	ATA_ICRC = 128,
+	ATA_BBK = 128,
+	ATA_UNC = 64,
+	ATA_MC = 32,
+	ATA_IDNF = 16,
+	ATA_MCR = 8,
+	ATA_ABORTED = 4,
+	ATA_TRK0NF = 2,
+	ATA_AMNF = 1,
+	ATAPI_LFS = 240,
+	ATAPI_EOM = 2,
+	ATAPI_ILI = 1,
+	ATAPI_IO = 2,
+	ATAPI_COD = 1,
+	ATA_REG_DATA = 0,
+	ATA_REG_ERR = 1,
+	ATA_REG_NSECT = 2,
+	ATA_REG_LBAL = 3,
+	ATA_REG_LBAM = 4,
+	ATA_REG_LBAH = 5,
+	ATA_REG_DEVICE = 6,
+	ATA_REG_STATUS = 7,
+	ATA_REG_FEATURE = 1,
+	ATA_REG_CMD = 7,
+	ATA_REG_BYTEL = 4,
+	ATA_REG_BYTEH = 5,
+	ATA_REG_DEVSEL = 6,
+	ATA_REG_IRQ = 2,
+	ATA_CMD_DEV_RESET = 8,
+	ATA_CMD_CHK_POWER = 229,
+	ATA_CMD_STANDBY = 226,
+	ATA_CMD_IDLE = 227,
+	ATA_CMD_EDD = 144,
+	ATA_CMD_DOWNLOAD_MICRO = 146,
+	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+	ATA_CMD_NOP = 0,
+	ATA_CMD_FLUSH = 231,
+	ATA_CMD_FLUSH_EXT = 234,
+	ATA_CMD_ID_ATA = 236,
+	ATA_CMD_ID_ATAPI = 161,
+	ATA_CMD_SERVICE = 162,
+	ATA_CMD_READ = 200,
+	ATA_CMD_READ_EXT = 37,
+	ATA_CMD_READ_QUEUED = 38,
+	ATA_CMD_READ_STREAM_EXT = 43,
+	ATA_CMD_READ_STREAM_DMA_EXT = 42,
+	ATA_CMD_WRITE = 202,
+	ATA_CMD_WRITE_EXT = 53,
+	ATA_CMD_WRITE_QUEUED = 54,
+	ATA_CMD_WRITE_STREAM_EXT = 59,
+	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+	ATA_CMD_WRITE_FUA_EXT = 61,
+	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+	ATA_CMD_FPDMA_READ = 96,
+	ATA_CMD_FPDMA_WRITE = 97,
+	ATA_CMD_NCQ_NON_DATA = 99,
+	ATA_CMD_FPDMA_SEND = 100,
+	ATA_CMD_FPDMA_RECV = 101,
+	ATA_CMD_PIO_READ = 32,
+	ATA_CMD_PIO_READ_EXT = 36,
+	ATA_CMD_PIO_WRITE = 48,
+	ATA_CMD_PIO_WRITE_EXT = 52,
+	ATA_CMD_READ_MULTI = 196,
+	ATA_CMD_READ_MULTI_EXT = 41,
+	ATA_CMD_WRITE_MULTI = 197,
+	ATA_CMD_WRITE_MULTI_EXT = 57,
+	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+	ATA_CMD_SET_FEATURES = 239,
+	ATA_CMD_SET_MULTI = 198,
+	ATA_CMD_PACKET = 160,
+	ATA_CMD_VERIFY = 64,
+	ATA_CMD_VERIFY_EXT = 66,
+	ATA_CMD_WRITE_UNCORR_EXT = 69,
+	ATA_CMD_STANDBYNOW1 = 224,
+	ATA_CMD_IDLEIMMEDIATE = 225,
+	ATA_CMD_SLEEP = 230,
+	ATA_CMD_INIT_DEV_PARAMS = 145,
+	ATA_CMD_READ_NATIVE_MAX = 248,
+	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+	ATA_CMD_SET_MAX = 249,
+	ATA_CMD_SET_MAX_EXT = 55,
+	ATA_CMD_READ_LOG_EXT = 47,
+	ATA_CMD_WRITE_LOG_EXT = 63,
+	ATA_CMD_READ_LOG_DMA_EXT = 71,
+	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+	ATA_CMD_TRUSTED_NONDATA = 91,
+	ATA_CMD_TRUSTED_RCV = 92,
+	ATA_CMD_TRUSTED_RCV_DMA = 93,
+	ATA_CMD_TRUSTED_SND = 94,
+	ATA_CMD_TRUSTED_SND_DMA = 95,
+	ATA_CMD_PMP_READ = 228,
+	ATA_CMD_PMP_READ_DMA = 233,
+	ATA_CMD_PMP_WRITE = 232,
+	ATA_CMD_PMP_WRITE_DMA = 235,
+	ATA_CMD_CONF_OVERLAY = 177,
+	ATA_CMD_SEC_SET_PASS = 241,
+	ATA_CMD_SEC_UNLOCK = 242,
+	ATA_CMD_SEC_ERASE_PREP = 243,
+	ATA_CMD_SEC_ERASE_UNIT = 244,
+	ATA_CMD_SEC_FREEZE_LOCK = 245,
+	ATA_CMD_SEC_DISABLE_PASS = 246,
+	ATA_CMD_CONFIG_STREAM = 81,
+	ATA_CMD_SMART = 176,
+	ATA_CMD_MEDIA_LOCK = 222,
+	ATA_CMD_MEDIA_UNLOCK = 223,
+	ATA_CMD_DSM = 6,
+	ATA_CMD_CHK_MED_CRD_TYP = 209,
+	ATA_CMD_CFA_REQ_EXT_ERR = 3,
+	ATA_CMD_CFA_WRITE_NE = 56,
+	ATA_CMD_CFA_TRANS_SECT = 135,
+	ATA_CMD_CFA_ERASE = 192,
+	ATA_CMD_CFA_WRITE_MULT_NE = 205,
+	ATA_CMD_REQ_SENSE_DATA = 11,
+	ATA_CMD_SANITIZE_DEVICE = 180,
+	ATA_CMD_ZAC_MGMT_IN = 74,
+	ATA_CMD_ZAC_MGMT_OUT = 159,
+	ATA_CMD_RESTORE = 16,
+	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+	ATA_LOG_DIRECTORY = 0,
+	ATA_LOG_SATA_NCQ = 16,
+	ATA_LOG_NCQ_NON_DATA = 18,
+	ATA_LOG_NCQ_SEND_RECV = 19,
+	ATA_LOG_IDENTIFY_DEVICE = 48,
+	ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+	ATA_LOG_SECURITY = 6,
+	ATA_LOG_SATA_SETTINGS = 8,
+	ATA_LOG_ZONED_INFORMATION = 9,
+	ATA_LOG_DEVSLP_OFFSET = 48,
+	ATA_LOG_DEVSLP_SIZE = 8,
+	ATA_LOG_DEVSLP_MDAT = 0,
+	ATA_LOG_DEVSLP_MDAT_MASK = 31,
+	ATA_LOG_DEVSLP_DETO = 1,
+	ATA_LOG_DEVSLP_VALID = 7,
+	ATA_LOG_DEVSLP_VALID_MASK = 128,
+	ATA_LOG_NCQ_PRIO_OFFSET = 9,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+	ATA_CMD_READ_LONG = 34,
+	ATA_CMD_READ_LONG_ONCE = 35,
+	ATA_CMD_WRITE_LONG = 50,
+	ATA_CMD_WRITE_LONG_ONCE = 51,
+	SETFEATURES_XFER = 3,
+	XFER_UDMA_7 = 71,
+	XFER_UDMA_6 = 70,
+	XFER_UDMA_5 = 69,
+	XFER_UDMA_4 = 68,
+	XFER_UDMA_3 = 67,
+	XFER_UDMA_2 = 66,
+	XFER_UDMA_1 = 65,
+	XFER_UDMA_0 = 64,
+	XFER_MW_DMA_4 = 36,
+	XFER_MW_DMA_3 = 35,
+	XFER_MW_DMA_2 = 34,
+	XFER_MW_DMA_1 = 33,
+	XFER_MW_DMA_0 = 32,
+	XFER_SW_DMA_2 = 18,
+	XFER_SW_DMA_1 = 17,
+	XFER_SW_DMA_0 = 16,
+	XFER_PIO_6 = 14,
+	XFER_PIO_5 = 13,
+	XFER_PIO_4 = 12,
+	XFER_PIO_3 = 11,
+	XFER_PIO_2 = 10,
+	XFER_PIO_1 = 9,
+	XFER_PIO_0 = 8,
+	XFER_PIO_SLOW = 0,
+	SETFEATURES_WC_ON = 2,
+	SETFEATURES_WC_OFF = 130,
+	SETFEATURES_RA_ON = 170,
+	SETFEATURES_RA_OFF = 85,
+	SETFEATURES_AAM_ON = 66,
+	SETFEATURES_AAM_OFF = 194,
+	SETFEATURES_SPINUP = 7,
+	SETFEATURES_SPINUP_TIMEOUT = 30000,
+	SETFEATURES_SATA_ENABLE = 16,
+	SETFEATURES_SATA_DISABLE = 144,
+	SATA_FPDMA_OFFSET = 1,
+	SATA_FPDMA_AA = 2,
+	SATA_DIPM = 3,
+	SATA_FPDMA_IN_ORDER = 4,
+	SATA_AN = 5,
+	SATA_SSP = 6,
+	SATA_DEVSLP = 9,
+	SETFEATURE_SENSE_DATA = 195,
+	ATA_SET_MAX_ADDR = 0,
+	ATA_SET_MAX_PASSWD = 1,
+	ATA_SET_MAX_LOCK = 2,
+	ATA_SET_MAX_UNLOCK = 3,
+	ATA_SET_MAX_FREEZE_LOCK = 4,
+	ATA_SET_MAX_PASSWD_DMA = 5,
+	ATA_SET_MAX_UNLOCK_DMA = 6,
+	ATA_DCO_RESTORE = 192,
+	ATA_DCO_FREEZE_LOCK = 193,
+	ATA_DCO_IDENTIFY = 194,
+	ATA_DCO_SET = 195,
+	ATA_SMART_ENABLE = 216,
+	ATA_SMART_READ_VALUES = 208,
+	ATA_SMART_READ_THRESHOLDS = 209,
+	ATA_DSM_TRIM = 1,
+	ATA_SMART_LBAM_PASS = 79,
+	ATA_SMART_LBAH_PASS = 194,
+	ATAPI_PKT_DMA = 1,
+	ATAPI_DMADIR = 4,
+	ATAPI_CDB_LEN = 16,
+	SATA_PMP_MAX_PORTS = 15,
+	SATA_PMP_CTRL_PORT = 15,
+	SATA_PMP_GSCR_DWORDS = 128,
+	SATA_PMP_GSCR_PROD_ID = 0,
+	SATA_PMP_GSCR_REV = 1,
+	SATA_PMP_GSCR_PORT_INFO = 2,
+	SATA_PMP_GSCR_ERROR = 32,
+	SATA_PMP_GSCR_ERROR_EN = 33,
+	SATA_PMP_GSCR_FEAT = 64,
+	SATA_PMP_GSCR_FEAT_EN = 96,
+	SATA_PMP_PSCR_STATUS = 0,
+	SATA_PMP_PSCR_ERROR = 1,
+	SATA_PMP_PSCR_CONTROL = 2,
+	SATA_PMP_FEAT_BIST = 1,
+	SATA_PMP_FEAT_PMREQ = 2,
+	SATA_PMP_FEAT_DYNSSC = 4,
+	SATA_PMP_FEAT_NOTIFY = 8,
+	ATA_CBL_NONE = 0,
+	ATA_CBL_PATA40 = 1,
+	ATA_CBL_PATA80 = 2,
+	ATA_CBL_PATA40_SHORT = 3,
+	ATA_CBL_PATA_UNK = 4,
+	ATA_CBL_PATA_IGN = 5,
+	ATA_CBL_SATA = 6,
+	SCR_STATUS = 0,
+	SCR_ERROR = 1,
+	SCR_CONTROL = 2,
+	SCR_ACTIVE = 3,
+	SCR_NOTIFICATION = 4,
+	SERR_DATA_RECOVERED = 1,
+	SERR_COMM_RECOVERED = 2,
+	SERR_DATA = 256,
+	SERR_PERSISTENT = 512,
+	SERR_PROTOCOL = 1024,
+	SERR_INTERNAL = 2048,
+	SERR_PHYRDY_CHG = 65536,
+	SERR_PHY_INT_ERR = 131072,
+	SERR_COMM_WAKE = 262144,
+	SERR_10B_8B_ERR = 524288,
+	SERR_DISPARITY = 1048576,
+	SERR_CRC = 2097152,
+	SERR_HANDSHAKE = 4194304,
+	SERR_LINK_SEQ_ERR = 8388608,
+	SERR_TRANS_ST_ERROR = 16777216,
+	SERR_UNRECOG_FIS = 33554432,
+	SERR_DEV_XCHG = 67108864,
+};
+
+enum ata_prot_flags {
+	ATA_PROT_FLAG_PIO = 1,
+	ATA_PROT_FLAG_DMA = 2,
+	ATA_PROT_FLAG_NCQ = 4,
+	ATA_PROT_FLAG_ATAPI = 8,
+	ATA_PROT_UNKNOWN = 255,
+	ATA_PROT_NODATA = 0,
+	ATA_PROT_PIO = 1,
+	ATA_PROT_DMA = 2,
+	ATA_PROT_NCQ_NODATA = 4,
+	ATA_PROT_NCQ = 6,
+	ATAPI_PROT_NODATA = 8,
+	ATAPI_PROT_PIO = 9,
+	ATAPI_PROT_DMA = 10,
+};
+
+struct ata_bmdma_prd {
+	__le32 addr;
+	__le32 flags_len;
+};
+
+enum {
+	LIBATA_MAX_PRD = 128,
+	LIBATA_DUMB_MAX_PRD = 64,
+	ATA_DEF_QUEUE = 1,
+	ATA_MAX_QUEUE = 32,
+	ATA_TAG_INTERNAL = 32,
+	ATA_SHORT_PAUSE = 16,
+	ATAPI_MAX_DRAIN = 16384,
+	ATA_ALL_DEVICES = 3,
+	ATA_SHT_EMULATED = 1,
+	ATA_SHT_THIS_ID = 4294967295,
+	ATA_TFLAG_LBA48 = 1,
+	ATA_TFLAG_ISADDR = 2,
+	ATA_TFLAG_DEVICE = 4,
+	ATA_TFLAG_WRITE = 8,
+	ATA_TFLAG_LBA = 16,
+	ATA_TFLAG_FUA = 32,
+	ATA_TFLAG_POLLING = 64,
+	ATA_DFLAG_LBA = 1,
+	ATA_DFLAG_LBA48 = 2,
+	ATA_DFLAG_CDB_INTR = 4,
+	ATA_DFLAG_NCQ = 8,
+	ATA_DFLAG_FLUSH_EXT = 16,
+	ATA_DFLAG_ACPI_PENDING = 32,
+	ATA_DFLAG_ACPI_FAILED = 64,
+	ATA_DFLAG_AN = 128,
+	ATA_DFLAG_TRUSTED = 256,
+	ATA_DFLAG_DMADIR = 1024,
+	ATA_DFLAG_CFG_MASK = 4095,
+	ATA_DFLAG_PIO = 4096,
+	ATA_DFLAG_NCQ_OFF = 8192,
+	ATA_DFLAG_SLEEPING = 32768,
+	ATA_DFLAG_DUBIOUS_XFER = 65536,
+	ATA_DFLAG_NO_UNLOAD = 131072,
+	ATA_DFLAG_UNLOCK_HPA = 262144,
+	ATA_DFLAG_NCQ_SEND_RECV = 524288,
+	ATA_DFLAG_NCQ_PRIO = 1048576,
+	ATA_DFLAG_NCQ_PRIO_ENABLED = 2097152,
+	ATA_DFLAG_INIT_MASK = 16777215,
+	ATA_DFLAG_DETACH = 16777216,
+	ATA_DFLAG_DETACHED = 33554432,
+	ATA_DFLAG_DA = 67108864,
+	ATA_DFLAG_DEVSLP = 134217728,
+	ATA_DFLAG_ACPI_DISABLED = 268435456,
+	ATA_DFLAG_D_SENSE = 536870912,
+	ATA_DFLAG_ZAC = 1073741824,
+	ATA_DFLAG_FEATURES_MASK = 202899712,
+	ATA_DEV_UNKNOWN = 0,
+	ATA_DEV_ATA = 1,
+	ATA_DEV_ATA_UNSUP = 2,
+	ATA_DEV_ATAPI = 3,
+	ATA_DEV_ATAPI_UNSUP = 4,
+	ATA_DEV_PMP = 5,
+	ATA_DEV_PMP_UNSUP = 6,
+	ATA_DEV_SEMB = 7,
+	ATA_DEV_SEMB_UNSUP = 8,
+	ATA_DEV_ZAC = 9,
+	ATA_DEV_ZAC_UNSUP = 10,
+	ATA_DEV_NONE = 11,
+	ATA_LFLAG_NO_HRST = 2,
+	ATA_LFLAG_NO_SRST = 4,
+	ATA_LFLAG_ASSUME_ATA = 8,
+	ATA_LFLAG_ASSUME_SEMB = 16,
+	ATA_LFLAG_ASSUME_CLASS = 24,
+	ATA_LFLAG_NO_RETRY = 32,
+	ATA_LFLAG_DISABLED = 64,
+	ATA_LFLAG_SW_ACTIVITY = 128,
+	ATA_LFLAG_NO_LPM = 256,
+	ATA_LFLAG_RST_ONCE = 512,
+	ATA_LFLAG_CHANGED = 1024,
+	ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+	ATA_FLAG_SLAVE_POSS = 1,
+	ATA_FLAG_SATA = 2,
+	ATA_FLAG_NO_LPM = 4,
+	ATA_FLAG_NO_LOG_PAGE = 32,
+	ATA_FLAG_NO_ATAPI = 64,
+	ATA_FLAG_PIO_DMA = 128,
+	ATA_FLAG_PIO_LBA48 = 256,
+	ATA_FLAG_PIO_POLLING = 512,
+	ATA_FLAG_NCQ = 1024,
+	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+	ATA_FLAG_DEBUGMSG = 8192,
+	ATA_FLAG_FPDMA_AA = 16384,
+	ATA_FLAG_IGN_SIMPLEX = 32768,
+	ATA_FLAG_NO_IORDY = 65536,
+	ATA_FLAG_ACPI_SATA = 131072,
+	ATA_FLAG_AN = 262144,
+	ATA_FLAG_PMP = 524288,
+	ATA_FLAG_FPDMA_AUX = 1048576,
+	ATA_FLAG_EM = 2097152,
+	ATA_FLAG_SW_ACTIVITY = 4194304,
+	ATA_FLAG_NO_DIPM = 8388608,
+	ATA_FLAG_SAS_HOST = 16777216,
+	ATA_PFLAG_EH_PENDING = 1,
+	ATA_PFLAG_EH_IN_PROGRESS = 2,
+	ATA_PFLAG_FROZEN = 4,
+	ATA_PFLAG_RECOVERED = 8,
+	ATA_PFLAG_LOADING = 16,
+	ATA_PFLAG_SCSI_HOTPLUG = 64,
+	ATA_PFLAG_INITIALIZING = 128,
+	ATA_PFLAG_RESETTING = 256,
+	ATA_PFLAG_UNLOADING = 512,
+	ATA_PFLAG_UNLOADED = 1024,
+	ATA_PFLAG_SUSPENDED = 131072,
+	ATA_PFLAG_PM_PENDING = 262144,
+	ATA_PFLAG_INIT_GTM_VALID = 524288,
+	ATA_PFLAG_PIO32 = 1048576,
+	ATA_PFLAG_PIO32CHANGE = 2097152,
+	ATA_PFLAG_EXTERNAL = 4194304,
+	ATA_QCFLAG_ACTIVE = 1,
+	ATA_QCFLAG_DMAMAP = 2,
+	ATA_QCFLAG_IO = 8,
+	ATA_QCFLAG_RESULT_TF = 16,
+	ATA_QCFLAG_CLEAR_EXCL = 32,
+	ATA_QCFLAG_QUIET = 64,
+	ATA_QCFLAG_RETRY = 128,
+	ATA_QCFLAG_FAILED = 65536,
+	ATA_QCFLAG_SENSE_VALID = 131072,
+	ATA_QCFLAG_EH_SCHEDULED = 262144,
+	ATA_HOST_SIMPLEX = 1,
+	ATA_HOST_STARTED = 2,
+	ATA_HOST_PARALLEL_SCAN = 4,
+	ATA_HOST_IGNORE_ATA = 8,
+	ATA_TMOUT_BOOT = 30000,
+	ATA_TMOUT_BOOT_QUICK = 7000,
+	ATA_TMOUT_INTERNAL_QUICK = 5000,
+	ATA_TMOUT_MAX_PARK = 30000,
+	ATA_TMOUT_FF_WAIT_LONG = 2000,
+	ATA_TMOUT_FF_WAIT = 800,
+	ATA_WAIT_AFTER_RESET = 150,
+	ATA_TMOUT_PMP_SRST_WAIT = 5000,
+	ATA_TMOUT_SPURIOUS_PHY = 10000,
+	BUS_UNKNOWN = 0,
+	BUS_DMA = 1,
+	BUS_IDLE = 2,
+	BUS_NOINTR = 3,
+	BUS_NODATA = 4,
+	BUS_TIMER = 5,
+	BUS_PIO = 6,
+	BUS_EDD = 7,
+	BUS_IDENTIFY = 8,
+	BUS_PACKET = 9,
+	PORT_UNKNOWN = 0,
+	PORT_ENABLED = 1,
+	PORT_DISABLED = 2,
+	ATA_NR_PIO_MODES = 7,
+	ATA_NR_MWDMA_MODES = 5,
+	ATA_NR_UDMA_MODES = 8,
+	ATA_SHIFT_PIO = 0,
+	ATA_SHIFT_MWDMA = 7,
+	ATA_SHIFT_UDMA = 12,
+	ATA_SHIFT_PRIO = 6,
+	ATA_PRIO_HIGH = 2,
+	ATA_DMA_PAD_SZ = 4,
+	ATA_ERING_SIZE = 32,
+	ATA_DEFER_LINK = 1,
+	ATA_DEFER_PORT = 2,
+	ATA_EH_DESC_LEN = 80,
+	ATA_EH_REVALIDATE = 1,
+	ATA_EH_SOFTRESET = 2,
+	ATA_EH_HARDRESET = 4,
+	ATA_EH_RESET = 6,
+	ATA_EH_ENABLE_LINK = 8,
+	ATA_EH_PARK = 32,
+	ATA_EH_PERDEV_MASK = 33,
+	ATA_EH_ALL_ACTIONS = 15,
+	ATA_EHI_HOTPLUGGED = 1,
+	ATA_EHI_NO_AUTOPSY = 4,
+	ATA_EHI_QUIET = 8,
+	ATA_EHI_NO_RECOVERY = 16,
+	ATA_EHI_DID_SOFTRESET = 65536,
+	ATA_EHI_DID_HARDRESET = 131072,
+	ATA_EHI_PRINTINFO = 262144,
+	ATA_EHI_SETMODE = 524288,
+	ATA_EHI_POST_SETMODE = 1048576,
+	ATA_EHI_DID_RESET = 196608,
+	ATA_EHI_TO_SLAVE_MASK = 12,
+	ATA_EH_MAX_TRIES = 5,
+	ATA_LINK_RESUME_TRIES = 5,
+	ATA_PROBE_MAX_TRIES = 3,
+	ATA_EH_DEV_TRIES = 3,
+	ATA_EH_PMP_TRIES = 5,
+	ATA_EH_PMP_LINK_TRIES = 3,
+	SATA_PMP_RW_TIMEOUT = 3000,
+	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
+	ATA_HORKAGE_DIAGNOSTIC = 1,
+	ATA_HORKAGE_NODMA = 2,
+	ATA_HORKAGE_NONCQ = 4,
+	ATA_HORKAGE_MAX_SEC_128 = 8,
+	ATA_HORKAGE_BROKEN_HPA = 16,
+	ATA_HORKAGE_DISABLE = 32,
+	ATA_HORKAGE_HPA_SIZE = 64,
+	ATA_HORKAGE_IVB = 256,
+	ATA_HORKAGE_STUCK_ERR = 512,
+	ATA_HORKAGE_BRIDGE_OK = 1024,
+	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
+	ATA_HORKAGE_FIRMWARE_WARN = 4096,
+	ATA_HORKAGE_1_5_GBPS = 8192,
+	ATA_HORKAGE_NOSETXFER = 16384,
+	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
+	ATA_HORKAGE_DUMP_ID = 65536,
+	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
+	ATA_HORKAGE_ATAPI_DMADIR = 262144,
+	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
+	ATA_HORKAGE_NOLPM = 1048576,
+	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
+	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
+	ATA_HORKAGE_NO_DMA_LOG = 8388608,
+	ATA_HORKAGE_NOTRIM = 16777216,
+	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
+	ATA_HORKAGE_MAX_TRIM_128M = 67108864,
+	ATA_HORKAGE_NO_NCQ_ON_ATI = 134217728,
+	ATA_HORKAGE_NO_ID_DEV_LOG = 268435456,
+	ATA_HORKAGE_NO_LOG_DIR = 536870912,
+	ATA_DMA_MASK_ATA = 1,
+	ATA_DMA_MASK_ATAPI = 2,
+	ATA_DMA_MASK_CFA = 4,
+	ATAPI_READ = 0,
+	ATAPI_WRITE = 1,
+	ATAPI_READ_CD = 2,
+	ATAPI_PASS_THRU = 3,
+	ATAPI_MISC = 4,
+	ATA_TIMING_SETUP = 1,
+	ATA_TIMING_ACT8B = 2,
+	ATA_TIMING_REC8B = 4,
+	ATA_TIMING_CYC8B = 8,
+	ATA_TIMING_8BIT = 14,
+	ATA_TIMING_ACTIVE = 16,
+	ATA_TIMING_RECOVER = 32,
+	ATA_TIMING_DMACK_HOLD = 64,
+	ATA_TIMING_CYCLE = 128,
+	ATA_TIMING_UDMA = 256,
+	ATA_TIMING_ALL = 511,
+	ATA_ACPI_FILTER_SETXFER = 1,
+	ATA_ACPI_FILTER_LOCK = 2,
+	ATA_ACPI_FILTER_DIPM = 4,
+	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+	ATA_ACPI_FILTER_FPDMA_AA = 16,
+	ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum ata_completion_errors {
+	AC_ERR_OK = 0,
+	AC_ERR_DEV = 1,
+	AC_ERR_HSM = 2,
+	AC_ERR_TIMEOUT = 4,
+	AC_ERR_MEDIA = 8,
+	AC_ERR_ATA_BUS = 16,
+	AC_ERR_HOST_BUS = 32,
+	AC_ERR_SYSTEM = 64,
+	AC_ERR_INVALID = 128,
+	AC_ERR_OTHER = 256,
+	AC_ERR_NODEV_HINT = 512,
+	AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+	ATA_LPM_UNKNOWN = 0,
+	ATA_LPM_MAX_POWER = 1,
+	ATA_LPM_MED_POWER = 2,
+	ATA_LPM_MED_POWER_WITH_DIPM = 3,
+	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+	ATA_LPM_MIN_POWER = 5,
+};
+
+enum ata_lpm_hints {
+	ATA_LPM_EMPTY = 1,
+	ATA_LPM_HIPM = 2,
+	ATA_LPM_WAKE_ONLY = 4,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
+	long unsigned int flags;
+	u8 protocol;
+	u8 ctl;
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
+	union {
+		u8 error;
+		u8 feature;
+	};
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	union {
+		u8 status;
+		u8 command;
+	};
+	u32 auxiliary;
+};
+
+struct ata_port;
+
+struct ata_device;
+
+struct ata_queued_cmd {
+	struct ata_port *ap;
+	struct ata_device *dev;
+	struct scsi_cmnd *scsicmd;
+	void (*scsidone)(struct scsi_cmnd *);
+	struct ata_taskfile tf;
+	u8 cdb[16];
+	long unsigned int flags;
+	unsigned int tag;
+	unsigned int hw_tag;
+	unsigned int n_elem;
+	unsigned int orig_n_elem;
+	int dma_dir;
+	unsigned int sect_size;
+	unsigned int nbytes;
+	unsigned int extrabytes;
+	unsigned int curbytes;
+	struct scatterlist sgent;
+	struct scatterlist *sg;
+	struct scatterlist *cursg;
+	unsigned int cursg_ofs;
+	unsigned int err_mask;
+	struct ata_taskfile result_tf;
+	ata_qc_cb_t complete_fn;
+	void *private_data;
+	void *lldd_task;
+};
+
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+	struct ata_device *dev;
+	u32 serror;
+	unsigned int err_mask;
+	unsigned int action;
+	unsigned int dev_action[2];
+	unsigned int flags;
+	unsigned int probe_mask;
+	char desc[80];
+	int desc_len;
+};
+
+struct ata_eh_context {
+	struct ata_eh_info i;
+	int tries[2];
+	int cmd_timeout_idx[14];
+	unsigned int classes[2];
+	unsigned int did_probe_mask;
+	unsigned int unloaded_mask;
+	unsigned int saved_ncq_enabled;
+	u8 saved_xfer_mode[2];
+	long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+	unsigned int eflags;
+	unsigned int err_mask;
+	u64 timestamp;
+};
+
+struct ata_ering {
+	int cursor;
+	struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_device {
+	struct ata_link *link;
+	unsigned int devno;
+	unsigned int horkage;
+	long unsigned int flags;
+	struct scsi_device *sdev;
+	void *private_data;
+	struct device tdev;
+	u64 n_sectors;
+	u64 n_native_sectors;
+	unsigned int class;
+	long unsigned int unpark_deadline;
+	u8 pio_mode;
+	u8 dma_mode;
+	u8 xfer_mode;
+	unsigned int xfer_shift;
+	unsigned int multi_count;
+	unsigned int max_sectors;
+	unsigned int cdb_len;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	u16 cylinders;
+	u16 heads;
+	u16 sectors;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		u16 id[256];
+		u32 gscr[128];
+	};
+	u8 devslp_timing[8];
+	u8 ncq_send_recv_cmds[20];
+	u8 ncq_non_data_cmds[64];
+	u32 zac_zoned_cap;
+	u32 zac_zones_optimal_open;
+	u32 zac_zones_optimal_nonseq;
+	u32 zac_zones_max_open;
+	struct ata_cpr_log *cpr_log;
+	int spdn_cnt;
+	struct ata_ering ering;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ata_link {
+	struct ata_port *ap;
+	int pmp;
+	struct device tdev;
+	unsigned int active_tag;
+	u32 sactive;
+	unsigned int flags;
+	u32 saved_scontrol;
+	unsigned int hw_sata_spd_limit;
+	unsigned int sata_spd_limit;
+	unsigned int sata_spd;
+	enum ata_lpm_policy lpm_policy;
+	struct ata_eh_info eh_info;
+	struct ata_eh_context eh_context;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_device device[2];
+	long unsigned int last_lpm_change;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+	OFF = 0,
+	BLINK_ON = 1,
+	BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+	void *cmd_addr;
+	void *data_addr;
+	void *error_addr;
+	void *feature_addr;
+	void *nsect_addr;
+	void *lbal_addr;
+	void *lbam_addr;
+	void *lbah_addr;
+	void *device_addr;
+	void *status_addr;
+	void *command_addr;
+	void *altstatus_addr;
+	void *ctl_addr;
+	void *bmdma_addr;
+	void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+	spinlock_t lock;
+	struct device *dev;
+	void * const *iomap;
+	unsigned int n_ports;
+	unsigned int n_tags;
+	void *private_data;
+	struct ata_port_operations *ops;
+	long unsigned int flags;
+	struct kref kref;
+	struct mutex eh_mutex;
+	struct task_struct *eh_owner;
+	struct ata_port *simplex_claimed;
+	struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+	int (*qc_defer)(struct ata_queued_cmd *);
+	int (*check_atapi_dma)(struct ata_queued_cmd *);
+	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+	unsigned int (*qc_issue)(struct ata_queued_cmd *);
+	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
+	int (*cable_detect)(struct ata_port *);
+	unsigned int (*mode_filter)(struct ata_device *, unsigned int);
+	void (*set_piomode)(struct ata_port *, struct ata_device *);
+	void (*set_dmamode)(struct ata_port *, struct ata_device *);
+	int (*set_mode)(struct ata_link *, struct ata_device **);
+	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+	void (*dev_config)(struct ata_device *);
+	void (*freeze)(struct ata_port *);
+	void (*thaw)(struct ata_port *);
+	ata_prereset_fn_t prereset;
+	ata_reset_fn_t softreset;
+	ata_reset_fn_t hardreset;
+	ata_postreset_fn_t postreset;
+	ata_prereset_fn_t pmp_prereset;
+	ata_reset_fn_t pmp_softreset;
+	ata_reset_fn_t pmp_hardreset;
+	ata_postreset_fn_t pmp_postreset;
+	void (*error_handler)(struct ata_port *);
+	void (*lost_interrupt)(struct ata_port *);
+	void (*post_internal_cmd)(struct ata_queued_cmd *);
+	void (*sched_eh)(struct ata_port *);
+	void (*end_eh)(struct ata_port *);
+	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+	int (*scr_write)(struct ata_link *, unsigned int, u32);
+	void (*pmp_attach)(struct ata_port *);
+	void (*pmp_detach)(struct ata_port *);
+	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+	int (*port_suspend)(struct ata_port *, pm_message_t);
+	int (*port_resume)(struct ata_port *);
+	int (*port_start)(struct ata_port *);
+	void (*port_stop)(struct ata_port *);
+	void (*host_stop)(struct ata_host *);
+	void (*sff_dev_select)(struct ata_port *, unsigned int);
+	void (*sff_set_devctl)(struct ata_port *, u8);
+	u8 (*sff_check_status)(struct ata_port *);
+	u8 (*sff_check_altstatus)(struct ata_port *);
+	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+	void (*sff_irq_on)(struct ata_port *);
+	bool (*sff_irq_check)(struct ata_port *);
+	void (*sff_irq_clear)(struct ata_port *);
+	void (*sff_drain_fifo)(struct ata_queued_cmd *);
+	void (*bmdma_setup)(struct ata_queued_cmd *);
+	void (*bmdma_start)(struct ata_queued_cmd *);
+	void (*bmdma_stop)(struct ata_queued_cmd *);
+	u8 (*bmdma_status)(struct ata_port *);
+	ssize_t (*em_show)(struct ata_port *, char *);
+	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+	ssize_t (*sw_activity_show)(struct ata_device *, char *);
+	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+	void (*phy_reset)(struct ata_port *);
+	void (*eng_timeout)(struct ata_port *);
+	const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+	long unsigned int unhandled_irq;
+	long unsigned int idle_irq;
+	long unsigned int rw_reqbuf;
+};
+
+struct ata_port {
+	struct Scsi_Host *scsi_host;
+	struct ata_port_operations *ops;
+	spinlock_t *lock;
+	long unsigned int flags;
+	unsigned int pflags;
+	unsigned int print_id;
+	unsigned int local_port_no;
+	unsigned int port_no;
+	struct ata_ioports ioaddr;
+	u8 ctl;
+	u8 last_ctl;
+	struct ata_link *sff_pio_task_link;
+	struct delayed_work sff_pio_task;
+	struct ata_bmdma_prd *bmdma_prd;
+	dma_addr_t bmdma_prd_dma;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	unsigned int cbl;
+	struct ata_queued_cmd qcmd[33];
+	u64 qc_active;
+	int nr_active_links;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_link link;
+	struct ata_link *slave_link;
+	int nr_pmp_links;
+	struct ata_link *pmp_link;
+	struct ata_link *excl_link;
+	struct ata_port_stats stats;
+	struct ata_host *host;
+	struct device *dev;
+	struct device tdev;
+	struct mutex scsi_scan_mutex;
+	struct delayed_work hotplug_task;
+	struct work_struct scsi_rescan_task;
+	unsigned int hsm_task_state;
+	struct list_head eh_done_q;
+	wait_queue_head_t eh_wait_q;
+	int eh_tries;
+	struct completion park_req_pending;
+	pm_message_t pm_mesg;
+	enum ata_lpm_policy target_lpm_policy;
+	struct timer_list fastdrain_timer;
+	unsigned int fastdrain_cnt;
+	async_cookie_t cookie;
+	int em_message_type;
+	void *private_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 sector_buf[512];
+};
+
+struct ata_cpr {
+	u8 num;
+	u8 num_storage_elements;
+	u64 start_lba;
+	u64 num_lbas;
+};
+
+struct ata_cpr_log {
+	u8 nr_cpr;
+	struct ata_cpr cpr[0];
+};
+
+enum ata_link_iter_mode {
+	ATA_LITER_EDGE = 0,
+	ATA_LITER_HOST_FIRST = 1,
+	ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+	ATA_DITER_ENABLED = 0,
+	ATA_DITER_ENABLED_REVERSE = 1,
+	ATA_DITER_ALL = 2,
+	ATA_DITER_ALL_REVERSE = 3,
+};
+
+enum {
+	ATA_READID_POSTRESET = 1,
+	ATA_DNXFER_PIO = 0,
+	ATA_DNXFER_DMA = 1,
+	ATA_DNXFER_40C = 2,
+	ATA_DNXFER_FORCE_PIO = 3,
+	ATA_DNXFER_FORCE_PIO0 = 4,
+	ATA_DNXFER_QUIET = 2147483648,
+};
+
+enum {
+	ATA_EH_SPDN_NCQ_OFF = 1,
+	ATA_EH_SPDN_SPEED_DOWN = 2,
+	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+	ATA_EH_SPDN_KEEP_ERRORS = 8,
+	ATA_EFLAG_IS_IO = 1,
+	ATA_EFLAG_DUBIOUS_XFER = 2,
+	ATA_EFLAG_OLD_ER = 2147483648,
+	ATA_ECAT_NONE = 0,
+	ATA_ECAT_ATA_BUS = 1,
+	ATA_ECAT_TOUT_HSM = 2,
+	ATA_ECAT_UNK_DEV = 3,
+	ATA_ECAT_DUBIOUS_NONE = 4,
+	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+	ATA_ECAT_NR = 8,
+	ATA_EH_CMD_DFL_TIMEOUT = 5000,
+	ATA_EH_RESET_COOL_DOWN = 5000,
+	ATA_EH_PRERESET_TIMEOUT = 10000,
+	ATA_EH_FASTDRAIN_INTERVAL = 3000,
+	ATA_EH_UA_TRIES = 5,
+	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+	ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+	const u8 *commands;
+	const unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+	u64 since;
+	int xfer_ok;
+	int nr_errors[8];
+};
+
+struct ata_internal {
+	struct scsi_transport_template t;
+	struct device_attribute private_port_attrs[3];
+	struct device_attribute private_link_attrs[3];
+	struct device_attribute private_dev_attrs[9];
+	struct transport_container link_attr_cont;
+	struct transport_container dev_attr_cont;
+	struct device_attribute *link_attrs[4];
+	struct device_attribute *port_attrs[4];
+	struct device_attribute *dev_attrs[10];
+};
+
+struct ata_show_ering_arg {
+	char *buf;
+	int written;
+};
+
+enum ata_xfer_mask {
+	ATA_MASK_PIO = 127,
+	ATA_MASK_MWDMA = 3968,
+	ATA_MASK_UDMA = 1044480,
+};
+
+enum hsm_task_states {
+	HSM_ST_IDLE = 0,
+	HSM_ST_FIRST = 1,
+	HSM_ST = 2,
+	HSM_ST_LAST = 3,
+	HSM_ST_ERR = 4,
+};
+
+struct ata_port_info {
+	long unsigned int flags;
+	long unsigned int link_flags;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	struct ata_port_operations *port_ops;
+	void *private_data;
+};
+
+struct pci_bits {
+	unsigned int reg;
+	unsigned int width;
+	long unsigned int mask;
+	long unsigned int val;
+};
+
+struct trace_event_raw_ata_qc_issue_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	unsigned char proto;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_qc_complete_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char status;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char error;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_tf_load {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_exec_command_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char feature;
+	unsigned char hob_nsect;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_bmdma_status {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char host_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy_qc {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_action_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	long unsigned int deadline;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_end_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	int rc;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_port_eh_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_hsm_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int protocol;
+	unsigned int hsm_state;
+	unsigned char dev_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_transfer_data_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int flags;
+	unsigned int offset;
+	unsigned int bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char hsm_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ata_qc_issue_template {};
+
+struct trace_event_data_offsets_ata_qc_complete_template {};
+
+struct trace_event_data_offsets_ata_tf_load {};
+
+struct trace_event_data_offsets_ata_exec_command_template {};
+
+struct trace_event_data_offsets_ata_bmdma_status {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
+
+struct trace_event_data_offsets_ata_eh_action_template {};
+
+struct trace_event_data_offsets_ata_link_reset_begin_template {};
+
+struct trace_event_data_offsets_ata_link_reset_end_template {};
+
+struct trace_event_data_offsets_ata_port_eh_begin_template {};
+
+struct trace_event_data_offsets_ata_sff_hsm_template {};
+
+struct trace_event_data_offsets_ata_transfer_data_template {};
+
+struct trace_event_data_offsets_ata_sff_template {};
+
+typedef void (*btf_trace_ata_qc_prep)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_tf_load)(void *, struct ata_port *, const struct ata_taskfile *);
+
+typedef void (*btf_trace_ata_exec_command)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_setup)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_start)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_stop)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_status)(void *, struct ata_port *, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_eh_about_to_do)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_done)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_slave_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_softreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_softreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_std_sched_eh)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_freeze)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_thaw)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_sff_hsm_state)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_hsm_command_complete)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_port_intr)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_send_cdb)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_sff_flush_pio_task)(void *, struct ata_port *);
+
+struct ata_force_param {
+	const char *name;
+	u8 cbl;
+	u8 spd_limit;
+	unsigned int xfer_mask;
+	unsigned int horkage_on;
+	unsigned int horkage_off;
+	u16 lflags_on;
+	u16 lflags_off;
+};
+
+struct ata_force_ent {
+	int port;
+	int device;
+	struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+	int shift;
+	int bits;
+	u8 base;
+};
+
+struct ata_blacklist_entry {
+	const char *model_num;
+	const char *model_rev;
+	long unsigned int horkage;
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+	struct ata_device *dev;
+	u16 *id;
+	struct scsi_cmnd *cmd;
+};
+
+enum {
+	AHCI_MAX_PORTS = 32,
+	AHCI_MAX_SG = 168,
+	AHCI_DMA_BOUNDARY = 4294967295,
+	AHCI_MAX_CMDS = 32,
+	AHCI_CMD_SZ = 32,
+	AHCI_CMD_SLOT_SZ = 1024,
+	AHCI_RX_FIS_SZ = 256,
+	AHCI_CMD_TBL_CDB = 64,
+	AHCI_CMD_TBL_HDR_SZ = 128,
+	AHCI_CMD_TBL_SZ = 2816,
+	AHCI_CMD_TBL_AR_SZ = 90112,
+	AHCI_PORT_PRIV_DMA_SZ = 91392,
+	AHCI_PORT_PRIV_FBS_DMA_SZ = 95232,
+	AHCI_IRQ_ON_SG = 2147483648,
+	AHCI_CMD_ATAPI = 32,
+	AHCI_CMD_WRITE = 64,
+	AHCI_CMD_PREFETCH = 128,
+	AHCI_CMD_RESET = 256,
+	AHCI_CMD_CLR_BUSY = 1024,
+	RX_FIS_PIO_SETUP = 32,
+	RX_FIS_D2H_REG = 64,
+	RX_FIS_SDB = 88,
+	RX_FIS_UNK = 96,
+	HOST_CAP = 0,
+	HOST_CTL = 4,
+	HOST_IRQ_STAT = 8,
+	HOST_PORTS_IMPL = 12,
+	HOST_VERSION = 16,
+	HOST_EM_LOC = 28,
+	HOST_EM_CTL = 32,
+	HOST_CAP2 = 36,
+	HOST_RESET = 1,
+	HOST_IRQ_EN = 2,
+	HOST_MRSM = 4,
+	HOST_AHCI_EN = 2147483648,
+	HOST_CAP_SXS = 32,
+	HOST_CAP_EMS = 64,
+	HOST_CAP_CCC = 128,
+	HOST_CAP_PART = 8192,
+	HOST_CAP_SSC = 16384,
+	HOST_CAP_PIO_MULTI = 32768,
+	HOST_CAP_FBS = 65536,
+	HOST_CAP_PMP = 131072,
+	HOST_CAP_ONLY = 262144,
+	HOST_CAP_CLO = 16777216,
+	HOST_CAP_LED = 33554432,
+	HOST_CAP_ALPM = 67108864,
+	HOST_CAP_SSS = 134217728,
+	HOST_CAP_MPS = 268435456,
+	HOST_CAP_SNTF = 536870912,
+	HOST_CAP_NCQ = 1073741824,
+	HOST_CAP_64 = 2147483648,
+	HOST_CAP2_BOH = 1,
+	HOST_CAP2_NVMHCI = 2,
+	HOST_CAP2_APST = 4,
+	HOST_CAP2_SDS = 8,
+	HOST_CAP2_SADM = 16,
+	HOST_CAP2_DESO = 32,
+	PORT_LST_ADDR = 0,
+	PORT_LST_ADDR_HI = 4,
+	PORT_FIS_ADDR = 8,
+	PORT_FIS_ADDR_HI = 12,
+	PORT_IRQ_STAT = 16,
+	PORT_IRQ_MASK = 20,
+	PORT_CMD = 24,
+	PORT_TFDATA = 32,
+	PORT_SIG = 36,
+	PORT_CMD_ISSUE = 56,
+	PORT_SCR_STAT = 40,
+	PORT_SCR_CTL = 44,
+	PORT_SCR_ERR = 48,
+	PORT_SCR_ACT = 52,
+	PORT_SCR_NTF = 60,
+	PORT_FBS = 64,
+	PORT_DEVSLP = 68,
+	PORT_IRQ_COLD_PRES = 2147483648,
+	PORT_IRQ_TF_ERR = 1073741824,
+	PORT_IRQ_HBUS_ERR = 536870912,
+	PORT_IRQ_HBUS_DATA_ERR = 268435456,
+	PORT_IRQ_IF_ERR = 134217728,
+	PORT_IRQ_IF_NONFATAL = 67108864,
+	PORT_IRQ_OVERFLOW = 16777216,
+	PORT_IRQ_BAD_PMP = 8388608,
+	PORT_IRQ_PHYRDY = 4194304,
+	PORT_IRQ_DMPS = 128,
+	PORT_IRQ_CONNECT = 64,
+	PORT_IRQ_SG_DONE = 32,
+	PORT_IRQ_UNK_FIS = 16,
+	PORT_IRQ_SDB_FIS = 8,
+	PORT_IRQ_DMAS_FIS = 4,
+	PORT_IRQ_PIOS_FIS = 2,
+	PORT_IRQ_D2H_REG_FIS = 1,
+	PORT_IRQ_FREEZE = 683671632,
+	PORT_IRQ_ERROR = 2025848912,
+	DEF_PORT_IRQ = 2025848959,
+	PORT_CMD_ASP = 134217728,
+	PORT_CMD_ALPE = 67108864,
+	PORT_CMD_ATAPI = 16777216,
+	PORT_CMD_FBSCP = 4194304,
+	PORT_CMD_ESP = 2097152,
+	PORT_CMD_CPD = 1048576,
+	PORT_CMD_MPSP = 524288,
+	PORT_CMD_HPCP = 262144,
+	PORT_CMD_PMP = 131072,
+	PORT_CMD_LIST_ON = 32768,
+	PORT_CMD_FIS_ON = 16384,
+	PORT_CMD_FIS_RX = 16,
+	PORT_CMD_CLO = 8,
+	PORT_CMD_POWER_ON = 4,
+	PORT_CMD_SPIN_UP = 2,
+	PORT_CMD_START = 1,
+	PORT_CMD_ICC_MASK = 4026531840,
+	PORT_CMD_ICC_ACTIVE = 268435456,
+	PORT_CMD_ICC_PARTIAL = 536870912,
+	PORT_CMD_ICC_SLUMBER = 1610612736,
+	PORT_CMD_CAP = 8126464,
+	PORT_FBS_DWE_OFFSET = 16,
+	PORT_FBS_ADO_OFFSET = 12,
+	PORT_FBS_DEV_OFFSET = 8,
+	PORT_FBS_DEV_MASK = 3840,
+	PORT_FBS_SDE = 4,
+	PORT_FBS_DEC = 2,
+	PORT_FBS_EN = 1,
+	PORT_DEVSLP_DM_OFFSET = 25,
+	PORT_DEVSLP_DM_MASK = 503316480,
+	PORT_DEVSLP_DITO_OFFSET = 15,
+	PORT_DEVSLP_MDAT_OFFSET = 10,
+	PORT_DEVSLP_DETO_OFFSET = 2,
+	PORT_DEVSLP_DSP = 2,
+	PORT_DEVSLP_ADSE = 1,
+	AHCI_HFLAG_NO_NCQ = 1,
+	AHCI_HFLAG_IGN_IRQ_IF_ERR = 2,
+	AHCI_HFLAG_IGN_SERR_INTERNAL = 4,
+	AHCI_HFLAG_32BIT_ONLY = 8,
+	AHCI_HFLAG_MV_PATA = 16,
+	AHCI_HFLAG_NO_MSI = 32,
+	AHCI_HFLAG_NO_PMP = 64,
+	AHCI_HFLAG_SECT255 = 256,
+	AHCI_HFLAG_YES_NCQ = 512,
+	AHCI_HFLAG_NO_SUSPEND = 1024,
+	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,
+	AHCI_HFLAG_NO_SNTF = 4096,
+	AHCI_HFLAG_NO_FPDMA_AA = 8192,
+	AHCI_HFLAG_YES_FBS = 16384,
+	AHCI_HFLAG_DELAY_ENGINE = 32768,
+	AHCI_HFLAG_NO_DEVSLP = 131072,
+	AHCI_HFLAG_NO_FBS = 262144,
+	AHCI_HFLAG_MULTI_MSI = 1048576,
+	AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,
+	AHCI_HFLAG_YES_ALPM = 8388608,
+	AHCI_HFLAG_NO_WRITE_TO_RO = 16777216,
+	AHCI_HFLAG_USE_LPM_POLICY = 33554432,
+	AHCI_HFLAG_SUSPEND_PHYS = 67108864,
+	AHCI_HFLAG_NO_SXS = 268435456,
+	AHCI_FLAG_COMMON = 393346,
+	ICH_MAP = 144,
+	PCS_6 = 146,
+	PCS_7 = 148,
+	EM_MAX_SLOTS = 15,
+	EM_MAX_RETRY = 5,
+	EM_CTL_RST = 512,
+	EM_CTL_TM = 256,
+	EM_CTL_MR = 1,
+	EM_CTL_ALHD = 67108864,
+	EM_CTL_XMT = 33554432,
+	EM_CTL_SMB = 16777216,
+	EM_CTL_SGPIO = 524288,
+	EM_CTL_SES = 262144,
+	EM_CTL_SAFTE = 131072,
+	EM_CTL_LED = 65536,
+	EM_MSG_TYPE_LED = 1,
+	EM_MSG_TYPE_SAFTE = 2,
+	EM_MSG_TYPE_SES2 = 4,
+	EM_MSG_TYPE_SGPIO = 8,
+};
+
+struct ahci_cmd_hdr {
+	__le32 opts;
+	__le32 status;
+	__le32 tbl_addr;
+	__le32 tbl_addr_hi;
+	__le32 reserved[4];
+};
+
+struct ahci_em_priv {
+	enum sw_activity blink_policy;
+	struct timer_list timer;
+	long unsigned int saved_activity;
+	long unsigned int activity;
+	long unsigned int led_state;
+	struct ata_link *link;
+};
+
+struct ahci_port_priv {
+	struct ata_link *active_link;
+	struct ahci_cmd_hdr *cmd_slot;
+	dma_addr_t cmd_slot_dma;
+	void *cmd_tbl;
+	dma_addr_t cmd_tbl_dma;
+	void *rx_fis;
+	dma_addr_t rx_fis_dma;
+	unsigned int ncq_saw_d2h: 1;
+	unsigned int ncq_saw_dmas: 1;
+	unsigned int ncq_saw_sdb: 1;
+	spinlock_t lock;
+	u32 intr_mask;
+	bool fbs_supported;
+	bool fbs_enabled;
+	int fbs_last_dev;
+	struct ahci_em_priv em_priv[15];
+	char *irq_desc;
+};
+
+struct ahci_host_priv {
+	unsigned int flags;
+	u32 mask_port_map;
+	void *mmio;
+	u32 cap;
+	u32 cap2;
+	u32 version;
+	u32 port_map;
+	u32 saved_cap;
+	u32 saved_cap2;
+	u32 saved_port_map;
+	u32 saved_port_cap[32];
+	u32 em_loc;
+	u32 em_buf_sz;
+	u32 em_msg_type;
+	u32 remapped_nvme;
+	bool got_runtime_pm;
+	unsigned int n_clks;
+	struct clk_bulk_data *clks;
+	unsigned int f_rsts;
+	struct reset_control *rsts;
+	struct regulator **target_pwrs;
+	struct regulator *ahci_regulator;
+	struct regulator *phy_regulator;
+	struct phy **phys;
+	unsigned int nports;
+	void *plat_data;
+	unsigned int irq;
+	void (*start_engine)(struct ata_port *);
+	int (*stop_engine)(struct ata_port *);
+	irqreturn_t (*irq_handler)(int, void *);
+	int (*get_irq_vector)(struct ata_host *, int);
+};
+
+enum {
+	AHCI_PCI_BAR_STA2X11 = 0,
+	AHCI_PCI_BAR_CAVIUM = 0,
+	AHCI_PCI_BAR_LOONGSON = 0,
+	AHCI_PCI_BAR_ENMOTUS = 2,
+	AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
+	AHCI_PCI_BAR_STANDARD = 5,
+};
+
+enum board_ids {
+	board_ahci = 0,
+	board_ahci_ign_iferr = 1,
+	board_ahci_low_power = 2,
+	board_ahci_no_debounce_delay = 3,
+	board_ahci_nomsi = 4,
+	board_ahci_noncq = 5,
+	board_ahci_nosntf = 6,
+	board_ahci_yes_fbs = 7,
+	board_ahci_al = 8,
+	board_ahci_avn = 9,
+	board_ahci_mcp65 = 10,
+	board_ahci_mcp77 = 11,
+	board_ahci_mcp89 = 12,
+	board_ahci_mv = 13,
+	board_ahci_sb600 = 14,
+	board_ahci_sb700 = 15,
+	board_ahci_vt8251 = 16,
+	board_ahci_pcs7 = 17,
+	board_ahci_mcp_linux = 10,
+	board_ahci_mcp67 = 10,
+	board_ahci_mcp73 = 10,
+	board_ahci_mcp79 = 11,
+};
+
+struct ahci_sg {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 reserved;
+	__le32 flags_size;
+};
+
+enum {
+	PIIX_IOCFG = 84,
+	ICH5_PMR = 144,
+	ICH5_PCS = 146,
+	PIIX_SIDPR_BAR = 5,
+	PIIX_SIDPR_LEN = 16,
+	PIIX_SIDPR_IDX = 0,
+	PIIX_SIDPR_DATA = 4,
+	PIIX_FLAG_CHECKINTR = 268435456,
+	PIIX_FLAG_SIDPR = 536870912,
+	PIIX_PATA_FLAGS = 1,
+	PIIX_SATA_FLAGS = 268435458,
+	PIIX_FLAG_PIO16 = 1073741824,
+	PIIX_80C_PRI = 48,
+	PIIX_80C_SEC = 192,
+	P0 = 0,
+	P1 = 1,
+	P2 = 2,
+	P3 = 3,
+	IDE = 4294967295,
+	NA = 4294967294,
+	RV = 4294967293,
+	PIIX_AHCI_DEVICE = 6,
+	PIIX_HOST_BROKEN_SUSPEND = 16777216,
+};
+
+enum piix_controller_ids {
+	piix_pata_mwdma = 0,
+	piix_pata_33 = 1,
+	ich_pata_33 = 2,
+	ich_pata_66 = 3,
+	ich_pata_100 = 4,
+	ich_pata_100_nomwdma1 = 5,
+	ich5_sata = 6,
+	ich6_sata = 7,
+	ich6m_sata = 8,
+	ich8_sata = 9,
+	ich8_2port_sata = 10,
+	ich8m_apple_sata = 11,
+	tolapai_sata = 12,
+	piix_pata_vmw = 13,
+	ich8_sata_snb = 14,
+	ich8_2port_sata_snb = 15,
+	ich8_2port_sata_byt = 16,
+};
+
+struct piix_map_db {
+	const u32 mask;
+	const u16 port_enable;
+	const int map[0];
+};
+
+struct piix_host_priv {
+	const int *map;
+	u32 saved_iocfg;
+	void *sidpr;
+};
+
+struct ich_laptop {
+	u16 device;
+	u16 subvendor;
+	u16 subdevice;
+};
+
+enum {
+	SIL_MMIO_BAR = 5,
+	SIL_FLAG_NO_SATA_IRQ = 268435456,
+	SIL_FLAG_RERR_ON_DMA_ACT = 536870912,
+	SIL_FLAG_MOD15WRITE = 1073741824,
+	SIL_DFL_PORT_FLAGS = 2,
+	sil_3112 = 0,
+	sil_3112_no_sata_irq = 1,
+	sil_3512 = 2,
+	sil_3114 = 3,
+	SIL_SYSCFG = 72,
+	SIL_MASK_IDE0_INT = 4194304,
+	SIL_MASK_IDE1_INT = 8388608,
+	SIL_MASK_IDE2_INT = 16777216,
+	SIL_MASK_IDE3_INT = 33554432,
+	SIL_MASK_2PORT = 12582912,
+	SIL_MASK_4PORT = 62914560,
+	SIL_INTR_STEERING = 2,
+	SIL_DMA_ENABLE = 1,
+	SIL_DMA_RDWR = 8,
+	SIL_DMA_SATA_IRQ = 16,
+	SIL_DMA_ACTIVE = 65536,
+	SIL_DMA_ERROR = 131072,
+	SIL_DMA_COMPLETE = 262144,
+	SIL_DMA_N_SATA_IRQ = 64,
+	SIL_DMA_N_ACTIVE = 16777216,
+	SIL_DMA_N_ERROR = 33554432,
+	SIL_DMA_N_COMPLETE = 67108864,
+	SIL_SIEN_N = 65536,
+	SIL_QUIRK_MOD15WRITE = 1,
+	SIL_QUIRK_UDMA5MAX = 2,
+};
+
+struct sil_drivelist {
+	const char *product;
+	unsigned int quirk;
+};
+
+struct mv_sata_platform_data {
+	int n_ports;
+};
+
+struct mbus_dram_window {
+	u8 cs_index;
+	u8 mbus_attr;
+	u64 base;
+	u64 size;
+};
+
+struct mbus_dram_target_info {
+	u8 mbus_dram_target_id;
+	int num_cs;
+	struct mbus_dram_window cs[4];
+};
+
+enum {
+	MV_PRIMARY_BAR = 0,
+	MV_IO_BAR = 2,
+	MV_MISC_BAR = 3,
+	MV_MAJOR_REG_AREA_SZ = 65536,
+	MV_MINOR_REG_AREA_SZ = 8192,
+	COAL_CLOCKS_PER_USEC = 150,
+	MAX_COAL_TIME_THRESHOLD = 16777215,
+	MAX_COAL_IO_COUNT = 255,
+	MV_PCI_REG_BASE = 0,
+	COAL_REG_BASE = 98304,
+	IRQ_COAL_CAUSE = 98312,
+	ALL_PORTS_COAL_IRQ = 16,
+	IRQ_COAL_IO_THRESHOLD = 98508,
+	IRQ_COAL_TIME_THRESHOLD = 98512,
+	TRAN_COAL_CAUSE_LO = 98440,
+	TRAN_COAL_CAUSE_HI = 98444,
+	SATAHC0_REG_BASE = 131072,
+	FLASH_CTL = 66668,
+	GPIO_PORT_CTL = 66800,
+	RESET_CFG = 98520,
+	MV_PCI_REG_SZ = 65536,
+	MV_SATAHC_REG_SZ = 65536,
+	MV_SATAHC_ARBTR_REG_SZ = 8192,
+	MV_PORT_REG_SZ = 8192,
+	MV_MAX_Q_DEPTH = 32,
+	MV_MAX_Q_DEPTH_MASK = 31,
+	MV_CRQB_Q_SZ = 1024,
+	MV_CRPB_Q_SZ = 256,
+	MV_MAX_SG_CT = 256,
+	MV_SG_TBL_SZ = 4096,
+	MV_PORT_HC_SHIFT = 2,
+	MV_PORTS_PER_HC = 4,
+	MV_PORT_MASK = 3,
+	MV_FLAG_DUAL_HC = 1073741824,
+	MV_COMMON_FLAGS = 514,
+	MV_GEN_I_FLAGS = 578,
+	MV_GEN_II_FLAGS = 656898,
+	MV_GEN_IIE_FLAGS = 919042,
+	CRQB_FLAG_READ = 1,
+	CRQB_TAG_SHIFT = 1,
+	CRQB_IOID_SHIFT = 6,
+	CRQB_PMP_SHIFT = 12,
+	CRQB_HOSTQ_SHIFT = 17,
+	CRQB_CMD_ADDR_SHIFT = 8,
+	CRQB_CMD_CS = 4096,
+	CRQB_CMD_LAST = 32768,
+	CRPB_FLAG_STATUS_SHIFT = 8,
+	CRPB_IOID_SHIFT_6 = 5,
+	CRPB_IOID_SHIFT_7 = 7,
+	EPRD_FLAG_END_OF_TBL = 2147483648,
+	MV_PCI_COMMAND = 3072,
+	MV_PCI_COMMAND_MWRCOM = 16,
+	MV_PCI_COMMAND_MRDTRIG = 128,
+	PCI_MAIN_CMD_STS = 3376,
+	STOP_PCI_MASTER = 4,
+	PCI_MASTER_EMPTY = 8,
+	GLOB_SFT_RST = 16,
+	MV_PCI_MODE = 3328,
+	MV_PCI_MODE_MASK = 48,
+	MV_PCI_EXP_ROM_BAR_CTL = 3372,
+	MV_PCI_DISC_TIMER = 3332,
+	MV_PCI_MSI_TRIGGER = 3128,
+	MV_PCI_SERR_MASK = 3112,
+	MV_PCI_XBAR_TMOUT = 7428,
+	MV_PCI_ERR_LOW_ADDRESS = 7488,
+	MV_PCI_ERR_HIGH_ADDRESS = 7492,
+	MV_PCI_ERR_ATTRIBUTE = 7496,
+	MV_PCI_ERR_COMMAND = 7504,
+	PCI_IRQ_CAUSE = 7512,
+	PCI_IRQ_MASK = 7516,
+	PCI_UNMASK_ALL_IRQS = 8388607,
+	PCIE_IRQ_CAUSE = 6400,
+	PCIE_IRQ_MASK = 6416,
+	PCIE_UNMASK_ALL_IRQS = 1034,
+	PCI_HC_MAIN_IRQ_CAUSE = 7520,
+	PCI_HC_MAIN_IRQ_MASK = 7524,
+	SOC_HC_MAIN_IRQ_CAUSE = 131104,
+	SOC_HC_MAIN_IRQ_MASK = 131108,
+	ERR_IRQ = 1,
+	DONE_IRQ = 2,
+	HC0_IRQ_PEND = 511,
+	HC_SHIFT = 9,
+	DONE_IRQ_0_3 = 170,
+	DONE_IRQ_4_7 = 87040,
+	PCI_ERR = 262144,
+	TRAN_COAL_LO_DONE = 524288,
+	TRAN_COAL_HI_DONE = 1048576,
+	PORTS_0_3_COAL_DONE = 256,
+	PORTS_4_7_COAL_DONE = 131072,
+	ALL_PORTS_COAL_DONE = 2097152,
+	GPIO_INT = 4194304,
+	SELF_INT = 8388608,
+	TWSI_INT = 16777216,
+	HC_MAIN_RSVD = 4261412864,
+	HC_MAIN_RSVD_5 = 4294443008,
+	HC_MAIN_RSVD_SOC = 4294966976,
+	HC_CFG = 0,
+	HC_IRQ_CAUSE = 20,
+	DMA_IRQ = 1,
+	HC_COAL_IRQ = 16,
+	DEV_IRQ = 256,
+	HC_IRQ_COAL_IO_THRESHOLD = 12,
+	HC_IRQ_COAL_TIME_THRESHOLD = 16,
+	SOC_LED_CTRL = 44,
+	SOC_LED_CTRL_BLINK = 1,
+	SOC_LED_CTRL_ACT_PRESENCE = 4,
+	SHD_BLK = 256,
+	SHD_CTL_AST = 32,
+	SATA_STATUS = 768,
+	SATA_ACTIVE = 848,
+	FIS_IRQ_CAUSE = 868,
+	FIS_IRQ_CAUSE_AN = 512,
+	LTMODE = 780,
+	LTMODE_BIT8 = 256,
+	PHY_MODE2 = 816,
+	PHY_MODE3 = 784,
+	PHY_MODE4 = 788,
+	PHY_MODE4_CFG_MASK = 3,
+	PHY_MODE4_CFG_VALUE = 1,
+	PHY_MODE4_RSVD_ZEROS = 1575223290,
+	PHY_MODE4_RSVD_ONES = 5,
+	SATA_IFCTL = 836,
+	SATA_TESTCTL = 840,
+	SATA_IFSTAT = 844,
+	VENDOR_UNIQUE_FIS = 860,
+	FISCFG = 864,
+	FISCFG_WAIT_DEV_ERR = 256,
+	FISCFG_SINGLE_SYNC = 65536,
+	PHY_MODE9_GEN2 = 920,
+	PHY_MODE9_GEN1 = 924,
+	PHYCFG_OFS = 928,
+	MV5_PHY_MODE = 116,
+	MV5_LTMODE = 48,
+	MV5_PHY_CTL = 12,
+	SATA_IFCFG = 80,
+	LP_PHY_CTL = 88,
+	LP_PHY_CTL_PIN_PU_PLL = 1,
+	LP_PHY_CTL_PIN_PU_RX = 2,
+	LP_PHY_CTL_PIN_PU_TX = 4,
+	LP_PHY_CTL_GEN_TX_3G = 32,
+	LP_PHY_CTL_GEN_RX_3G = 512,
+	MV_M2_PREAMP_MASK = 2016,
+	EDMA_CFG = 0,
+	EDMA_CFG_Q_DEPTH = 31,
+	EDMA_CFG_NCQ = 32,
+	EDMA_CFG_NCQ_GO_ON_ERR = 16384,
+	EDMA_CFG_RD_BRST_EXT = 2048,
+	EDMA_CFG_WR_BUFF_LEN = 8192,
+	EDMA_CFG_EDMA_FBS = 65536,
+	EDMA_CFG_FBS = 67108864,
+	EDMA_ERR_IRQ_CAUSE = 8,
+	EDMA_ERR_IRQ_MASK = 12,
+	EDMA_ERR_D_PAR = 1,
+	EDMA_ERR_PRD_PAR = 2,
+	EDMA_ERR_DEV = 4,
+	EDMA_ERR_DEV_DCON = 8,
+	EDMA_ERR_DEV_CON = 16,
+	EDMA_ERR_SERR = 32,
+	EDMA_ERR_SELF_DIS = 128,
+	EDMA_ERR_SELF_DIS_5 = 256,
+	EDMA_ERR_BIST_ASYNC = 256,
+	EDMA_ERR_TRANS_IRQ_7 = 256,
+	EDMA_ERR_CRQB_PAR = 512,
+	EDMA_ERR_CRPB_PAR = 1024,
+	EDMA_ERR_INTRL_PAR = 2048,
+	EDMA_ERR_IORDY = 4096,
+	EDMA_ERR_LNK_CTRL_RX = 122880,
+	EDMA_ERR_LNK_CTRL_RX_0 = 8192,
+	EDMA_ERR_LNK_CTRL_RX_1 = 16384,
+	EDMA_ERR_LNK_CTRL_RX_2 = 32768,
+	EDMA_ERR_LNK_CTRL_RX_3 = 65536,
+	EDMA_ERR_LNK_DATA_RX = 1966080,
+	EDMA_ERR_LNK_CTRL_TX = 65011712,
+	EDMA_ERR_LNK_CTRL_TX_0 = 2097152,
+	EDMA_ERR_LNK_CTRL_TX_1 = 4194304,
+	EDMA_ERR_LNK_CTRL_TX_2 = 8388608,
+	EDMA_ERR_LNK_CTRL_TX_3 = 16777216,
+	EDMA_ERR_LNK_CTRL_TX_4 = 33554432,
+	EDMA_ERR_LNK_DATA_TX = 2080374784,
+	EDMA_ERR_TRANS_PROTO = 2147483648,
+	EDMA_ERR_OVERRUN_5 = 32,
+	EDMA_ERR_UNDERRUN_5 = 64,
+	EDMA_ERR_IRQ_TRANSIENT = 65101824,
+	EDMA_EH_FREEZE = 4229865147,
+	EDMA_EH_FREEZE_5 = 8059,
+	EDMA_REQ_Q_BASE_HI = 16,
+	EDMA_REQ_Q_IN_PTR = 20,
+	EDMA_REQ_Q_OUT_PTR = 24,
+	EDMA_REQ_Q_PTR_SHIFT = 5,
+	EDMA_RSP_Q_BASE_HI = 28,
+	EDMA_RSP_Q_IN_PTR = 32,
+	EDMA_RSP_Q_OUT_PTR = 36,
+	EDMA_RSP_Q_PTR_SHIFT = 3,
+	EDMA_CMD = 40,
+	EDMA_EN = 1,
+	EDMA_DS = 2,
+	EDMA_RESET = 4,
+	EDMA_STATUS = 48,
+	EDMA_STATUS_CACHE_EMPTY = 64,
+	EDMA_STATUS_IDLE = 128,
+	EDMA_IORDY_TMOUT = 52,
+	EDMA_ARB_CFG = 56,
+	EDMA_HALTCOND = 96,
+	EDMA_UNKNOWN_RSVD = 108,
+	BMDMA_CMD = 548,
+	BMDMA_STATUS = 552,
+	BMDMA_PRD_LOW = 556,
+	BMDMA_PRD_HIGH = 560,
+	MV_HP_FLAG_MSI = 1,
+	MV_HP_ERRATA_50XXB0 = 2,
+	MV_HP_ERRATA_50XXB2 = 4,
+	MV_HP_ERRATA_60X1B2 = 8,
+	MV_HP_ERRATA_60X1C0 = 16,
+	MV_HP_GEN_I = 64,
+	MV_HP_GEN_II = 128,
+	MV_HP_GEN_IIE = 256,
+	MV_HP_PCIE = 512,
+	MV_HP_CUT_THROUGH = 1024,
+	MV_HP_FLAG_SOC = 2048,
+	MV_HP_QUIRK_LED_BLINK_EN = 4096,
+	MV_HP_FIX_LP_PHY_CTL = 8192,
+	MV_PP_FLAG_EDMA_EN = 1,
+	MV_PP_FLAG_NCQ_EN = 2,
+	MV_PP_FLAG_FBS_EN = 4,
+	MV_PP_FLAG_DELAYED_EH = 8,
+	MV_PP_FLAG_FAKE_ATA_BUSY = 16,
+};
+
+enum {
+	MV_DMA_BOUNDARY = 65535,
+	EDMA_REQ_Q_BASE_LO_MASK = 4294966272,
+	EDMA_RSP_Q_BASE_LO_MASK = 4294967040,
+};
+
+enum chip_type {
+	chip_504x = 0,
+	chip_508x = 1,
+	chip_5080 = 2,
+	chip_604x = 3,
+	chip_608x = 4,
+	chip_6042 = 5,
+	chip_7042 = 6,
+	chip_soc = 7,
+};
+
+struct mv_crqb {
+	__le32 sg_addr;
+	__le32 sg_addr_hi;
+	__le16 ctrl_flags;
+	__le16 ata_cmd[11];
+};
+
+struct mv_crqb_iie {
+	__le32 addr;
+	__le32 addr_hi;
+	__le32 flags;
+	__le32 len;
+	__le32 ata_cmd[4];
+};
+
+struct mv_crpb {
+	__le16 id;
+	__le16 flags;
+	__le32 tmstmp;
+};
+
+struct mv_sg {
+	__le32 addr;
+	__le32 flags_size;
+	__le32 addr_hi;
+	__le32 reserved;
+};
+
+struct mv_cached_regs {
+	u32 fiscfg;
+	u32 ltmode;
+	u32 haltcond;
+	u32 unknown_rsvd;
+};
+
+struct mv_port_priv {
+	struct mv_crqb *crqb;
+	dma_addr_t crqb_dma;
+	struct mv_crpb *crpb;
+	dma_addr_t crpb_dma;
+	struct mv_sg *sg_tbl[32];
+	dma_addr_t sg_tbl_dma[32];
+	unsigned int req_idx;
+	unsigned int resp_idx;
+	u32 pp_flags;
+	struct mv_cached_regs cached;
+	unsigned int delayed_eh_pmp_map;
+};
+
+struct mv_port_signal {
+	u32 amps;
+	u32 pre;
+};
+
+struct mv_hw_ops;
+
+struct mv_host_priv {
+	u32 hp_flags;
+	unsigned int board_idx;
+	u32 main_irq_mask;
+	struct mv_port_signal signal[8];
+	const struct mv_hw_ops *ops;
+	int n_ports;
+	void *base;
+	void *main_irq_cause_addr;
+	void *main_irq_mask_addr;
+	u32 irq_cause_offset;
+	u32 irq_mask_offset;
+	u32 unmask_all_irqs;
+	struct clk *clk;
+	struct clk **port_clks;
+	struct phy **port_phys;
+	struct dma_pool *crqb_pool;
+	struct dma_pool *crpb_pool;
+	struct dma_pool *sg_tbl_pool;
+};
+
+struct mv_hw_ops {
+	void (*phy_errata)(struct mv_host_priv *, void *, unsigned int);
+	void (*enable_leds)(struct mv_host_priv *, void *);
+	void (*read_preamp)(struct mv_host_priv *, int, void *);
+	int (*reset_hc)(struct ata_host *, void *, unsigned int);
+	void (*reset_flash)(struct mv_host_priv *, void *);
+	void (*reset_bus)(struct ata_host *, void *);
+};
+
+enum hba_flags_table {
+	HBA_FLAGS_INTERNAL_USE = 1,
+	HBA_FLAGS_PSCSI_MODE = 2,
+};
+
+enum transport_state_table {
+	TRANSPORT_NO_STATE = 0,
+	TRANSPORT_NEW_CMD = 1,
+	TRANSPORT_WRITE_PENDING = 3,
+	TRANSPORT_PROCESSING = 5,
+	TRANSPORT_COMPLETE = 6,
+	TRANSPORT_ISTATE_PROCESSING = 11,
+	TRANSPORT_COMPLETE_QF_WP = 18,
+	TRANSPORT_COMPLETE_QF_OK = 19,
+	TRANSPORT_COMPLETE_QF_ERR = 20,
+};
+
+typedef unsigned int sense_reason_t;
+
+enum tcm_tmreq_table {
+	TMR_ABORT_TASK = 1,
+	TMR_ABORT_TASK_SET = 2,
+	TMR_CLEAR_ACA = 3,
+	TMR_CLEAR_TASK_SET = 4,
+	TMR_LUN_RESET = 5,
+	TMR_TARGET_WARM_RESET = 6,
+	TMR_TARGET_COLD_RESET = 7,
+	TMR_LUN_RESET_PRO = 128,
+	TMR_UNKNOWN = 255,
+};
+
+struct t10_alua_lba_map_member {
+	struct list_head lba_map_mem_list;
+	int lba_map_mem_alua_state;
+	int lba_map_mem_alua_pg_id;
+};
+
+struct t10_alua_lba_map {
+	u64 lba_map_first_lba;
+	u64 lba_map_last_lba;
+	struct list_head lba_map_list;
+	struct list_head lba_map_mem_list;
+};
+
+struct se_device;
+
+struct t10_alua_tg_pt_gp;
+
+struct t10_alua {
+	u16 alua_tg_pt_gps_counter;
+	u32 alua_tg_pt_gps_count;
+	spinlock_t lba_map_lock;
+	u32 lba_map_segment_size;
+	u32 lba_map_segment_multiplier;
+	struct list_head lba_map_list;
+	spinlock_t tg_pt_gps_lock;
+	struct se_device *t10_dev;
+	struct t10_alua_tg_pt_gp *default_tg_pt_gp;
+	struct config_group alua_tg_pt_gps_group;
+	struct list_head tg_pt_gps_list;
+};
+
+struct t10_wwn {
+	char vendor[9];
+	char model[17];
+	char revision[5];
+	char unit_serial[254];
+	u32 company_id;
+	spinlock_t t10_vpd_lock;
+	struct se_device *t10_dev;
+	struct config_group t10_wwn_group;
+	struct list_head t10_vpd_list;
+};
+
+struct se_node_acl;
+
+struct t10_reservation {
+	int pr_all_tg_pt;
+	int pr_aptpl_active;
+	u32 pr_generation;
+	spinlock_t registration_lock;
+	spinlock_t aptpl_reg_lock;
+	struct se_node_acl *pr_res_holder;
+	struct list_head registration_list;
+	struct list_head aptpl_reg_list;
+};
+
+enum target_ua_intlck_ctrl {
+	TARGET_UA_INTLCK_CTRL_CLEAR = 0,
+	TARGET_UA_INTLCK_CTRL_NO_CLEAR = 1,
+	TARGET_UA_INTLCK_CTRL_ESTABLISH_UA = 2,
+};
+
+enum target_prot_type {
+	TARGET_DIF_TYPE0_PROT = 0,
+	TARGET_DIF_TYPE1_PROT = 1,
+	TARGET_DIF_TYPE2_PROT = 2,
+	TARGET_DIF_TYPE3_PROT = 3,
+};
+
+struct se_dev_attrib {
+	bool emulate_model_alias;
+	bool emulate_dpo;
+	bool emulate_fua_write;
+	bool emulate_fua_read;
+	bool emulate_write_cache;
+	enum target_ua_intlck_ctrl emulate_ua_intlck_ctrl;
+	bool emulate_tas;
+	bool emulate_tpu;
+	bool emulate_tpws;
+	bool emulate_caw;
+	bool emulate_3pc;
+	bool emulate_pr;
+	bool emulate_rsoc;
+	enum target_prot_type pi_prot_type;
+	enum target_prot_type hw_pi_prot_type;
+	bool pi_prot_verify;
+	bool enforce_pr_isids;
+	bool force_pr_aptpl;
+	bool is_nonrot;
+	bool emulate_rest_reord;
+	bool unmap_zeroes_data;
+	u32 hw_block_size;
+	u32 block_size;
+	u32 hw_max_sectors;
+	u32 optimal_sectors;
+	u32 hw_queue_depth;
+	u32 queue_depth;
+	u32 max_unmap_lba_count;
+	u32 max_unmap_block_desc_count;
+	u32 unmap_granularity;
+	u32 unmap_granularity_alignment;
+	u32 max_write_same_len;
+	struct se_device *da_dev;
+	struct config_group da_group;
+};
+
+struct se_dev_stat_grps {
+	struct config_group stat_group;
+	struct config_group scsi_dev_group;
+	struct config_group scsi_tgt_dev_group;
+	struct config_group scsi_lu_group;
+};
+
+struct scsi_port_stats {
+	atomic_long_t cmd_pdus;
+	atomic_long_t tx_data_octets;
+	atomic_long_t rx_data_octets;
+};
+
+struct se_port_stat_grps {
+	struct config_group stat_group;
+	struct config_group scsi_port_group;
+	struct config_group scsi_tgt_port_group;
+	struct config_group scsi_transport_group;
+};
+
+struct se_portal_group;
+
+struct se_lun {
+	u64 unpacked_lun;
+	bool lun_shutdown;
+	bool lun_access_ro;
+	u32 lun_index;
+	u16 lun_rtpi;
+	atomic_t lun_acl_count;
+	struct se_device *lun_se_dev;
+	struct list_head lun_deve_list;
+	spinlock_t lun_deve_lock;
+	int lun_tg_pt_secondary_stat;
+	int lun_tg_pt_secondary_write_md;
+	atomic_t lun_tg_pt_secondary_offline;
+	struct mutex lun_tg_pt_md_mutex;
+	struct list_head lun_tg_pt_gp_link;
+	struct t10_alua_tg_pt_gp *lun_tg_pt_gp;
+	spinlock_t lun_tg_pt_gp_lock;
+	struct se_portal_group *lun_tpg;
+	struct scsi_port_stats lun_stats;
+	struct config_group lun_group;
+	struct se_port_stat_grps port_stat_grps;
+	struct completion lun_shutdown_comp;
+	struct percpu_ref lun_ref;
+	struct list_head lun_dev_link;
+	struct hlist_node link;
+	struct callback_head callback_head;
+};
+
+struct se_session;
+
+struct t10_alua_lu_gp_member;
+
+struct t10_pr_registration;
+
+struct se_hba;
+
+struct target_backend_ops;
+
+struct se_device_queue;
+
+struct se_device {
+	u16 dev_rpti_counter;
+	u32 dev_cur_ordered_id;
+	u32 dev_flags;
+	u8 transport_flags;
+	u32 queue_depth;
+	u64 dev_res_bin_isid;
+	u32 dev_index;
+	u64 creation_time;
+	atomic_long_t num_resets;
+	atomic_long_t aborts_complete;
+	atomic_long_t aborts_no_task;
+	atomic_long_t num_cmds;
+	atomic_long_t read_bytes;
+	atomic_long_t write_bytes;
+	atomic_t non_ordered;
+	bool ordered_sync_in_progress;
+	atomic_t delayed_cmd_count;
+	atomic_t dev_qf_count;
+	u32 export_count;
+	spinlock_t delayed_cmd_lock;
+	spinlock_t dev_reservation_lock;
+	unsigned int dev_reservation_flags;
+	spinlock_t se_port_lock;
+	spinlock_t se_tmr_lock;
+	spinlock_t qf_cmd_lock;
+	struct semaphore caw_sem;
+	struct se_session *reservation_holder;
+	struct t10_alua_lu_gp_member *dev_alua_lu_gp_mem;
+	struct t10_pr_registration *dev_pr_res_holder;
+	struct list_head dev_sep_list;
+	struct list_head dev_tmr_list;
+	struct work_struct qf_work_queue;
+	struct work_struct delayed_cmd_work;
+	struct list_head delayed_cmd_list;
+	struct list_head qf_cmd_list;
+	struct se_hba *se_hba;
+	struct t10_wwn t10_wwn;
+	struct t10_alua t10_alua;
+	struct t10_reservation t10_pr;
+	struct se_dev_attrib dev_attrib;
+	struct config_group dev_action_group;
+	struct config_group dev_group;
+	struct config_group dev_pr_group;
+	struct se_dev_stat_grps dev_stat_grps;
+	unsigned char dev_alias[512];
+	unsigned char udev_path[512];
+	const struct target_backend_ops *transport;
+	struct se_lun xcopy_lun;
+	int prot_length;
+	u32 hba_index;
+	struct callback_head callback_head;
+	int queue_cnt;
+	struct se_device_queue *queues;
+};
+
+struct t10_alua_tg_pt_gp {
+	u16 tg_pt_gp_id;
+	int tg_pt_gp_valid_id;
+	int tg_pt_gp_alua_supported_states;
+	int tg_pt_gp_alua_access_status;
+	int tg_pt_gp_alua_access_type;
+	int tg_pt_gp_nonop_delay_msecs;
+	int tg_pt_gp_trans_delay_msecs;
+	int tg_pt_gp_implicit_trans_secs;
+	int tg_pt_gp_pref;
+	int tg_pt_gp_write_metadata;
+	u32 tg_pt_gp_members;
+	int tg_pt_gp_alua_access_state;
+	atomic_t tg_pt_gp_ref_cnt;
+	spinlock_t tg_pt_gp_lock;
+	struct mutex tg_pt_gp_transition_mutex;
+	struct se_device *tg_pt_gp_dev;
+	struct config_group tg_pt_gp_group;
+	struct list_head tg_pt_gp_list;
+	struct list_head tg_pt_gp_lun_list;
+	struct se_lun *tg_pt_gp_alua_lun;
+	struct se_node_acl *tg_pt_gp_alua_nacl;
+};
+
+struct t10_alua_lu_gp {
+	u16 lu_gp_id;
+	int lu_gp_valid_id;
+	u32 lu_gp_members;
+	atomic_t lu_gp_ref_cnt;
+	spinlock_t lu_gp_lock;
+	struct config_group lu_gp_group;
+	struct list_head lu_gp_node;
+	struct list_head lu_gp_mem_list;
+};
+
+struct t10_alua_lu_gp_member {
+	bool lu_gp_assoc;
+	atomic_t lu_gp_mem_ref_cnt;
+	spinlock_t lu_gp_mem_lock;
+	struct t10_alua_lu_gp *lu_gp;
+	struct se_device *lu_gp_mem_dev;
+	struct list_head lu_gp_mem_list;
+};
+
+struct se_node_acl {
+	char initiatorname[224];
+	bool dynamic_node_acl;
+	bool dynamic_stop;
+	u32 queue_depth;
+	u32 acl_index;
+	enum target_prot_type saved_prot_type;
+	char acl_tag[64];
+	atomic_t acl_pr_ref_count;
+	struct hlist_head lun_entry_hlist;
+	struct se_session *nacl_sess;
+	struct se_portal_group *se_tpg;
+	struct mutex lun_entry_mutex;
+	spinlock_t nacl_sess_lock;
+	struct config_group acl_group;
+	struct config_group acl_attrib_group;
+	struct config_group acl_auth_group;
+	struct config_group acl_param_group;
+	struct config_group acl_fabric_stat_group;
+	struct list_head acl_list;
+	struct list_head acl_sess_list;
+	struct completion acl_free_comp;
+	struct kref acl_kref;
+};
+
+struct t10_vpd {
+	unsigned char device_identifier[254];
+	int protocol_identifier_set;
+	u32 protocol_identifier;
+	u32 device_identifier_code_set;
+	u32 association;
+	u32 device_identifier_type;
+	struct list_head vpd_list;
+};
+
+struct se_dev_entry;
+
+struct t10_pr_registration {
+	char pr_reg_isid[16];
+	unsigned char pr_iport[256];
+	unsigned char pr_tport[256];
+	u16 pr_aptpl_rpti;
+	u16 pr_reg_tpgt;
+	int pr_reg_all_tg_pt;
+	int pr_reg_aptpl;
+	int pr_res_holder;
+	int pr_res_type;
+	int pr_res_scope;
+	bool isid_present_at_reg;
+	u64 pr_res_mapped_lun;
+	u64 pr_aptpl_target_lun;
+	u16 tg_pt_sep_rtpi;
+	u32 pr_res_generation;
+	u64 pr_reg_bin_isid;
+	u64 pr_res_key;
+	atomic_t pr_res_holders;
+	struct se_node_acl *pr_reg_nacl;
+	struct se_dev_entry *pr_reg_deve;
+	struct list_head pr_reg_list;
+	struct list_head pr_reg_abort_list;
+	struct list_head pr_reg_aptpl_list;
+	struct list_head pr_reg_atp_list;
+	struct list_head pr_reg_atp_mem_list;
+};
+
+struct se_lun_acl;
+
+struct se_dev_entry {
+	u64 mapped_lun;
+	u64 pr_res_key;
+	u64 creation_time;
+	bool lun_access_ro;
+	u32 attach_count;
+	atomic_long_t total_cmds;
+	atomic_long_t read_bytes;
+	atomic_long_t write_bytes;
+	struct kref pr_kref;
+	struct completion pr_comp;
+	struct se_lun_acl *se_lun_acl;
+	spinlock_t ua_lock;
+	struct se_lun *se_lun;
+	long unsigned int deve_flags;
+	struct list_head alua_port_list;
+	struct list_head lun_link;
+	struct list_head ua_list;
+	struct hlist_node link;
+	struct callback_head callback_head;
+};
+
+struct se_cmd;
+
+struct se_tmr_req {
+	u8 function;
+	u8 response;
+	int call_transport;
+	u64 ref_task_tag;
+	void *fabric_tmr_ptr;
+	struct se_cmd *task_cmd;
+	struct se_device *tmr_dev;
+	struct list_head tmr_list;
+};
+
+enum target_prot_op {
+	TARGET_PROT_NORMAL = 0,
+	TARGET_PROT_DIN_INSERT = 1,
+	TARGET_PROT_DOUT_INSERT = 2,
+	TARGET_PROT_DIN_STRIP = 4,
+	TARGET_PROT_DOUT_STRIP = 8,
+	TARGET_PROT_DIN_PASS = 16,
+	TARGET_PROT_DOUT_PASS = 32,
+};
+
+struct target_core_fabric_ops;
+
+struct se_cmd {
+	sense_reason_t sense_reason;
+	u8 scsi_status;
+	u16 scsi_sense_length;
+	unsigned int unknown_data_length: 1;
+	bool state_active: 1;
+	u64 tag;
+	int alua_nonop_delay;
+	enum dma_data_direction data_direction;
+	int sam_task_attr;
+	unsigned int map_tag;
+	int map_cpu;
+	enum transport_state_table t_state;
+	u32 se_cmd_flags;
+	u32 data_length;
+	u32 residual_count;
+	u64 orig_fe_lun;
+	u64 pr_res_key;
+	void *sense_buffer;
+	struct list_head se_delayed_node;
+	struct list_head se_qf_node;
+	struct se_device *se_dev;
+	struct se_lun *se_lun;
+	struct se_session *se_sess;
+	struct se_tmr_req *se_tmr_req;
+	struct llist_node se_cmd_list;
+	struct completion *free_compl;
+	struct completion *abrt_compl;
+	const struct target_core_fabric_ops *se_tfo;
+	sense_reason_t (*execute_cmd)(struct se_cmd *);
+	sense_reason_t (*transport_complete_callback)(struct se_cmd *, bool, int *);
+	void *protocol_data;
+	unsigned char *t_task_cdb;
+	unsigned char __t_task_cdb[32];
+	long long unsigned int t_task_lba;
+	unsigned int t_task_nolb;
+	unsigned int transport_state;
+	spinlock_t t_state_lock;
+	struct kref cmd_kref;
+	struct completion t_transport_stop_comp;
+	struct work_struct work;
+	struct scatterlist *t_data_sg;
+	struct scatterlist *t_data_sg_orig;
+	unsigned int t_data_nents;
+	unsigned int t_data_nents_orig;
+	void *t_data_vmap;
+	struct scatterlist *t_bidi_data_sg;
+	unsigned int t_bidi_data_nents;
+	int lun_ref_active;
+	struct list_head state_list;
+	void *priv;
+	enum target_prot_op prot_op;
+	enum target_prot_type prot_type;
+	u8 prot_checks;
+	bool prot_pto;
+	u32 prot_length;
+	u32 reftag_seed;
+	struct scatterlist *t_prot_sg;
+	unsigned int t_prot_nents;
+	sense_reason_t pi_err;
+	u64 sense_info;
+	int cpuid;
+};
+
+struct se_session {
+	atomic_t stopped;
+	u64 sess_bin_isid;
+	enum target_prot_op sup_prot_ops;
+	enum target_prot_type sess_prot_type;
+	struct se_node_acl *se_node_acl;
+	struct se_portal_group *se_tpg;
+	void *fabric_sess_ptr;
+	struct percpu_ref cmd_count;
+	struct list_head sess_list;
+	struct list_head sess_acl_list;
+	spinlock_t sess_cmd_lock;
+	wait_queue_head_t cmd_count_wq;
+	struct completion stop_done;
+	void *sess_cmd_map;
+	struct sbitmap_queue sess_tag_pool;
+};
+
+struct se_wwn;
+
+struct target_fabric_configfs;
+
+struct se_tpg_np;
+
+struct target_core_fabric_ops {
+	struct module *module;
+	const char *fabric_alias;
+	const char *fabric_name;
+	size_t node_acl_size;
+	u32 max_data_sg_nents;
+	char * (*tpg_get_wwn)(struct se_portal_group *);
+	u16 (*tpg_get_tag)(struct se_portal_group *);
+	u32 (*tpg_get_default_depth)(struct se_portal_group *);
+	int (*tpg_check_demo_mode)(struct se_portal_group *);
+	int (*tpg_check_demo_mode_cache)(struct se_portal_group *);
+	int (*tpg_check_demo_mode_write_protect)(struct se_portal_group *);
+	int (*tpg_check_prod_mode_write_protect)(struct se_portal_group *);
+	int (*tpg_check_demo_mode_login_only)(struct se_portal_group *);
+	int (*tpg_check_prot_fabric_only)(struct se_portal_group *);
+	u32 (*tpg_get_inst_index)(struct se_portal_group *);
+	int (*check_stop_free)(struct se_cmd *);
+	void (*release_cmd)(struct se_cmd *);
+	void (*close_session)(struct se_session *);
+	u32 (*sess_get_index)(struct se_session *);
+	u32 (*sess_get_initiator_sid)(struct se_session *, unsigned char *, u32);
+	int (*write_pending)(struct se_cmd *);
+	void (*set_default_node_attributes)(struct se_node_acl *);
+	int (*get_cmd_state)(struct se_cmd *);
+	int (*queue_data_in)(struct se_cmd *);
+	int (*queue_status)(struct se_cmd *);
+	void (*queue_tm_rsp)(struct se_cmd *);
+	void (*aborted_task)(struct se_cmd *);
+	struct se_wwn * (*fabric_make_wwn)(struct target_fabric_configfs *, struct config_group *, const char *);
+	void (*fabric_drop_wwn)(struct se_wwn *);
+	void (*add_wwn_groups)(struct se_wwn *);
+	struct se_portal_group * (*fabric_make_tpg)(struct se_wwn *, const char *);
+	int (*fabric_enable_tpg)(struct se_portal_group *, bool);
+	void (*fabric_drop_tpg)(struct se_portal_group *);
+	int (*fabric_post_link)(struct se_portal_group *, struct se_lun *);
+	void (*fabric_pre_unlink)(struct se_portal_group *, struct se_lun *);
+	struct se_tpg_np * (*fabric_make_np)(struct se_portal_group *, struct config_group *, const char *);
+	void (*fabric_drop_np)(struct se_tpg_np *);
+	int (*fabric_init_nodeacl)(struct se_node_acl *, const char *);
+	struct configfs_attribute **tfc_discovery_attrs;
+	struct configfs_attribute **tfc_wwn_attrs;
+	struct configfs_attribute **tfc_tpg_base_attrs;
+	struct configfs_attribute **tfc_tpg_np_base_attrs;
+	struct configfs_attribute **tfc_tpg_attrib_attrs;
+	struct configfs_attribute **tfc_tpg_auth_attrs;
+	struct configfs_attribute **tfc_tpg_param_attrs;
+	struct configfs_attribute **tfc_tpg_nacl_base_attrs;
+	struct configfs_attribute **tfc_tpg_nacl_attrib_attrs;
+	struct configfs_attribute **tfc_tpg_nacl_auth_attrs;
+	struct configfs_attribute **tfc_tpg_nacl_param_attrs;
+	bool write_pending_must_be_called;
+};
+
+struct se_portal_group {
+	int proto_id;
+	bool enabled;
+	atomic_t tpg_pr_ref_count;
+	struct mutex acl_node_mutex;
+	spinlock_t session_lock;
+	struct mutex tpg_lun_mutex;
+	struct list_head acl_node_list;
+	struct hlist_head tpg_lun_hlist;
+	struct se_lun *tpg_virt_lun0;
+	struct list_head tpg_sess_list;
+	const struct target_core_fabric_ops *se_tpg_tfo;
+	struct se_wwn *se_tpg_wwn;
+	struct config_group tpg_group;
+	struct config_group tpg_lun_group;
+	struct config_group tpg_np_group;
+	struct config_group tpg_acl_group;
+	struct config_group tpg_attrib_group;
+	struct config_group tpg_auth_group;
+	struct config_group tpg_param_group;
+};
+
+struct se_ml_stat_grps {
+	struct config_group stat_group;
+	struct config_group scsi_auth_intr_group;
+	struct config_group scsi_att_intr_port_group;
+};
+
+struct se_lun_acl {
+	u64 mapped_lun;
+	struct se_node_acl *se_lun_nacl;
+	struct se_lun *se_lun;
+	struct config_group se_lun_group;
+	struct se_ml_stat_grps ml_stat_grps;
+};
+
+struct se_cmd_queue {
+	struct llist_head cmd_list;
+	struct work_struct work;
+};
+
+struct se_dev_plug {
+	struct se_device *se_dev;
+};
+
+struct se_device_queue {
+	struct list_head state_list;
+	spinlock_t lock;
+	struct se_cmd_queue sq;
+};
+
+struct target_backend;
+
+struct se_hba {
+	u16 hba_tpgt;
+	u32 hba_id;
+	u32 hba_flags;
+	u32 dev_count;
+	u32 hba_index;
+	void *hba_ptr;
+	struct list_head hba_node;
+	spinlock_t device_lock;
+	struct config_group hba_group;
+	struct mutex hba_access_mutex;
+	struct target_backend *backend;
+};
+
+struct target_backend_ops {
+	char name[16];
+	char inquiry_prod[16];
+	char inquiry_rev[4];
+	struct module *owner;
+	u8 transport_flags_default;
+	u8 transport_flags_changeable;
+	int (*attach_hba)(struct se_hba *, u32);
+	void (*detach_hba)(struct se_hba *);
+	int (*pmode_enable_hba)(struct se_hba *, long unsigned int);
+	struct se_device * (*alloc_device)(struct se_hba *, const char *);
+	int (*configure_device)(struct se_device *);
+	void (*destroy_device)(struct se_device *);
+	void (*free_device)(struct se_device *);
+	struct se_dev_plug * (*plug_device)(struct se_device *);
+	void (*unplug_device)(struct se_dev_plug *);
+	bool (*configure_unmap)(struct se_device *);
+	ssize_t (*set_configfs_dev_params)(struct se_device *, const char *, ssize_t);
+	ssize_t (*show_configfs_dev_params)(struct se_device *, char *);
+	sense_reason_t (*parse_cdb)(struct se_cmd *);
+	void (*tmr_notify)(struct se_device *, enum tcm_tmreq_table, struct list_head *);
+	u32 (*get_device_type)(struct se_device *);
+	sector_t (*get_blocks)(struct se_device *);
+	sector_t (*get_alignment_offset_lbas)(struct se_device *);
+	unsigned int (*get_lbppbe)(struct se_device *);
+	unsigned int (*get_io_min)(struct se_device *);
+	unsigned int (*get_io_opt)(struct se_device *);
+	unsigned char * (*get_sense_buffer)(struct se_cmd *);
+	bool (*get_write_cache)(struct se_device *);
+	int (*init_prot)(struct se_device *);
+	int (*format_prot)(struct se_device *);
+	void (*free_prot)(struct se_device *);
+	struct configfs_attribute **tb_dev_attrib_attrs;
+	struct configfs_attribute **tb_dev_action_attrs;
+};
+
+struct target_backend {
+	struct list_head list;
+	const struct target_backend_ops *ops;
+	struct config_item_type tb_dev_cit;
+	struct config_item_type tb_dev_attrib_cit;
+	struct config_item_type tb_dev_action_cit;
+	struct config_item_type tb_dev_pr_cit;
+	struct config_item_type tb_dev_wwn_cit;
+	struct config_item_type tb_dev_alua_tg_pt_gps_cit;
+	struct config_item_type tb_dev_stat_cit;
+};
+
+struct se_tpg_np {
+	struct se_portal_group *tpg_np_parent;
+	struct config_group tpg_np_group;
+};
+
+struct se_wwn {
+	struct target_fabric_configfs *wwn_tf;
+	void *priv;
+	struct config_group wwn_group;
+	struct config_group fabric_stat_group;
+	struct config_group param_group;
+	int cmd_compl_affinity;
+};
+
+struct target_fabric_configfs {
+	atomic_t tf_access_cnt;
+	struct list_head tf_list;
+	struct config_group tf_group;
+	struct config_group tf_disc_group;
+	const struct target_core_fabric_ops *tf_ops;
+	struct config_item_type tf_discovery_cit;
+	struct config_item_type tf_wwn_cit;
+	struct config_item_type tf_wwn_fabric_stats_cit;
+	struct config_item_type tf_wwn_param_cit;
+	struct config_item_type tf_tpg_cit;
+	struct config_item_type tf_tpg_base_cit;
+	struct config_item_type tf_tpg_lun_cit;
+	struct config_item_type tf_tpg_port_cit;
+	struct config_item_type tf_tpg_port_stat_cit;
+	struct config_item_type tf_tpg_np_cit;
+	struct config_item_type tf_tpg_np_base_cit;
+	struct config_item_type tf_tpg_attrib_cit;
+	struct config_item_type tf_tpg_auth_cit;
+	struct config_item_type tf_tpg_param_cit;
+	struct config_item_type tf_tpg_nacl_cit;
+	struct config_item_type tf_tpg_nacl_base_cit;
+	struct config_item_type tf_tpg_nacl_attrib_cit;
+	struct config_item_type tf_tpg_nacl_auth_cit;
+	struct config_item_type tf_tpg_nacl_param_cit;
+	struct config_item_type tf_tpg_nacl_stat_cit;
+	struct config_item_type tf_tpg_mappedlun_cit;
+	struct config_item_type tf_tpg_mappedlun_stat_cit;
+};
+
+enum {
+	Opt_initiator_fabric = 0,
+	Opt_initiator_node = 1,
+	Opt_initiator_sid = 2,
+	Opt_sa_res_key = 3,
+	Opt_res_holder = 4,
+	Opt_res_type = 5,
+	Opt_res_scope = 6,
+	Opt_res_all_tg_pt = 7,
+	Opt_mapped_lun = 8,
+	Opt_target_fabric = 9,
+	Opt_target_node = 10,
+	Opt_tpgt = 11,
+	Opt_port_rtpi = 12,
+	Opt_target_lun = 13,
+	Opt_err___12 = 14,
+};
+
+enum {
+	SE_COMPL_AFFINITY_CPUID = 4294967295,
+	SE_COMPL_AFFINITY_CURR_CPU = 4294967294,
+};
+
+enum scsi_protocol {
+	SCSI_PROTOCOL_FCP = 0,
+	SCSI_PROTOCOL_SPI = 1,
+	SCSI_PROTOCOL_SSA = 2,
+	SCSI_PROTOCOL_SBP = 3,
+	SCSI_PROTOCOL_SRP = 4,
+	SCSI_PROTOCOL_ISCSI = 5,
+	SCSI_PROTOCOL_SAS = 6,
+	SCSI_PROTOCOL_ADT = 7,
+	SCSI_PROTOCOL_ATA = 8,
+	SCSI_PROTOCOL_UNSPEC = 15,
+};
+
+enum tcm_sense_reason_table {
+	TCM_NO_SENSE = 0,
+	TCM_NON_EXISTENT_LUN = 1,
+	TCM_UNSUPPORTED_SCSI_OPCODE = 2,
+	TCM_INCORRECT_AMOUNT_OF_DATA = 3,
+	TCM_UNEXPECTED_UNSOLICITED_DATA = 4,
+	TCM_SERVICE_CRC_ERROR = 5,
+	TCM_SNACK_REJECTED = 6,
+	TCM_SECTOR_COUNT_TOO_MANY = 7,
+	TCM_INVALID_CDB_FIELD = 8,
+	TCM_INVALID_PARAMETER_LIST = 9,
+	TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE = 10,
+	TCM_UNKNOWN_MODE_PAGE = 11,
+	TCM_WRITE_PROTECTED = 12,
+	TCM_CHECK_CONDITION_ABORT_CMD = 13,
+	TCM_CHECK_CONDITION_UNIT_ATTENTION = 14,
+	TCM_RESERVATION_CONFLICT = 16,
+	TCM_ADDRESS_OUT_OF_RANGE = 17,
+	TCM_OUT_OF_RESOURCES = 18,
+	TCM_PARAMETER_LIST_LENGTH_ERROR = 19,
+	TCM_MISCOMPARE_VERIFY = 20,
+	TCM_LOGICAL_BLOCK_GUARD_CHECK_FAILED = 21,
+	TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED = 22,
+	TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED = 23,
+	TCM_COPY_TARGET_DEVICE_NOT_REACHABLE = 24,
+	TCM_TOO_MANY_TARGET_DESCS = 25,
+	TCM_UNSUPPORTED_TARGET_DESC_TYPE_CODE = 26,
+	TCM_TOO_MANY_SEGMENT_DESCS = 27,
+	TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE = 28,
+	TCM_INSUFFICIENT_REGISTRATION_RESOURCES = 29,
+	TCM_LUN_BUSY = 30,
+	TCM_INVALID_FIELD_IN_COMMAND_IU = 31,
+	TCM_ALUA_TG_PT_STANDBY = 32,
+	TCM_ALUA_TG_PT_UNAVAILABLE = 33,
+	TCM_ALUA_STATE_TRANSITION = 34,
+	TCM_ALUA_OFFLINE = 35,
+};
+
+struct pr_transport_id_holder {
+	struct t10_pr_registration *dest_pr_reg;
+	struct se_portal_group *dest_tpg;
+	struct se_node_acl *dest_node_acl;
+	struct se_dev_entry *dest_se_deve;
+	struct list_head dest_list;
+};
+
+enum register_type {
+	REGISTER = 0,
+	REGISTER_AND_IGNORE_EXISTING_KEY = 1,
+	REGISTER_AND_MOVE = 2,
+};
+
+enum preempt_type {
+	PREEMPT = 0,
+	PREEMPT_AND_ABORT = 1,
+};
+
+enum se_cmd_flags_table {
+	SCF_SUPPORTED_SAM_OPCODE = 1,
+	SCF_TRANSPORT_TASK_SENSE = 2,
+	SCF_EMULATED_TASK_SENSE = 4,
+	SCF_SCSI_DATA_CDB = 8,
+	SCF_SCSI_TMR_CDB = 16,
+	SCF_FUA = 32,
+	SCF_SE_LUN_CMD = 64,
+	SCF_BIDI = 128,
+	SCF_SENT_CHECK_CONDITION = 256,
+	SCF_OVERFLOW_BIT = 512,
+	SCF_UNDERFLOW_BIT = 1024,
+	SCF_ALUA_NON_OPTIMIZED = 2048,
+	SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 4096,
+	SCF_COMPARE_AND_WRITE = 8192,
+	SCF_PASSTHROUGH_PROT_SG_TO_MEM_NOALLOC = 16384,
+	SCF_ACK_KREF = 32768,
+	SCF_USE_CPUID = 65536,
+	SCF_TASK_ATTR_SET = 131072,
+	SCF_TREAT_READ_AS_NORMAL = 262144,
+};
+
+struct devices_idr_iter {
+	struct config_item *prev_item;
+	int (*fn)(struct se_device *, void *);
+	void *data;
+};
+
+typedef enum {
+	SCSI_INST_INDEX = 0,
+	SCSI_AUTH_INTR_INDEX = 1,
+	SCSI_INDEX_TYPE_MAX = 2,
+} scsi_index_t;
+
+enum tcm_tmrsp_table {
+	TMR_FUNCTION_FAILED = 0,
+	TMR_FUNCTION_COMPLETE = 1,
+	TMR_TASK_DOES_NOT_EXIST = 2,
+	TMR_LUN_DOES_NOT_EXIST = 3,
+	TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED = 4,
+	TMR_FUNCTION_REJECTED = 5,
+};
+
+enum target_core_dif_check {
+	TARGET_DIF_CHECK_GUARD = 1,
+	TARGET_DIF_CHECK_APPTAG = 2,
+	TARGET_DIF_CHECK_REFTAG = 4,
+};
+
+struct sbc_ops {
+	sense_reason_t (*execute_rw)(struct se_cmd *, struct scatterlist *, u32, enum dma_data_direction);
+	sense_reason_t (*execute_sync_cache)(struct se_cmd *);
+	sense_reason_t (*execute_write_same)(struct se_cmd *);
+	sense_reason_t (*execute_unmap)(struct se_cmd *, sector_t, sector_t);
+};
+
+enum scsi_version_descriptor {
+	SCSI_VERSION_DESCRIPTOR_FCP4 = 2624,
+	SCSI_VERSION_DESCRIPTOR_ISCSI = 2400,
+	SCSI_VERSION_DESCRIPTOR_SAM5 = 160,
+	SCSI_VERSION_DESCRIPTOR_SAS3 = 3168,
+	SCSI_VERSION_DESCRIPTOR_SBC3 = 1216,
+	SCSI_VERSION_DESCRIPTOR_SBP3 = 2432,
+	SCSI_VERSION_DESCRIPTOR_SPC4 = 1120,
+	SCSI_VERSION_DESCRIPTOR_SRP = 2368,
+};
+
+enum scsi_support_opcode {
+	SCSI_SUPPORT_NO_INFO = 0,
+	SCSI_SUPPORT_NOT_SUPPORTED = 1,
+	SCSI_SUPPORT_FULL = 3,
+	SCSI_SUPPORT_VENDOR = 5,
+};
+
+struct target_opcode_descriptor {
+	u8 support: 3;
+	u8 serv_action_valid: 1;
+	u8 opcode;
+	u16 service_action;
+	u32 cdb_size;
+	u8 specific_timeout;
+	u16 nominal_timeout;
+	u16 recommended_timeout;
+	bool (*enabled)(struct se_cmd *);
+	void (*update_usage_bits)(u8 *, struct se_device *);
+	u8 usage_bits[0];
+};
+
+struct se_ua {
+	u8 ua_asc;
+	u8 ua_ascq;
+	struct list_head ua_nacl_list;
+};
+
+struct rd_dev_sg_table {
+	u32 page_start_offset;
+	u32 page_end_offset;
+	u32 rd_sg_count;
+	struct scatterlist *sg_table;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rd_host;
+
+struct rd_dev {
+	struct se_device dev;
+	u32 rd_flags;
+	u32 rd_dev_id;
+	u32 rd_page_count;
+	u32 sg_table_count;
+	u32 sg_prot_count;
+	struct rd_dev_sg_table *sg_table_array;
+	struct rd_dev_sg_table *sg_prot_array;
+	struct rd_host *rd_host;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rd_host {
+	u32 rd_host_dev_id_count;
+	u32 rd_host_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	Opt_rd_pages = 0,
+	Opt_rd_nullio = 1,
+	Opt_rd_dummy = 2,
+	Opt_err___13 = 3,
+};
+
+enum xcopy_origin_list {
+	XCOL_SOURCE_RECV_OP = 1,
+	XCOL_DEST_RECV_OP = 2,
+};
+
+struct xcopy_op {
+	int op_origin;
+	struct se_cmd *xop_se_cmd;
+	struct se_device *src_dev;
+	unsigned char src_tid_wwn[16];
+	struct se_device *dst_dev;
+	unsigned char dst_tid_wwn[16];
+	unsigned char local_dev_wwn[16];
+	struct percpu_ref *remote_lun_ref;
+	sector_t src_lba;
+	sector_t dst_lba;
+	short unsigned int stdi;
+	short unsigned int dtdi;
+	short unsigned int nolb;
+	u32 xop_data_bytes;
+	u32 xop_data_nents;
+	struct scatterlist *xop_data_sg;
+	struct work_struct xop_work;
+};
+
+struct xcopy_pt_cmd {
+	struct se_cmd se_cmd;
+	struct completion xpt_passthrough_sem;
+	unsigned char sense_buffer[96];
+};
+
+struct iblock_req {
+	refcount_t pending;
+	atomic_t ib_bio_err_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iblock_dev_plug {
+	struct se_dev_plug se_plug;
+	struct blk_plug blk_plug;
+	long unsigned int flags;
+};
+
+struct iblock_dev {
+	struct se_device dev;
+	unsigned char ibd_udev_path[512];
+	u32 ibd_flags;
+	struct bio_set ibd_bio_set;
+	struct block_device *ibd_bd;
+	bool ibd_readonly;
+	struct iblock_dev_plug *ibd_plug;
+};
+
+enum {
+	Opt_udev_path = 0,
+	Opt_readonly = 1,
+	Opt_force = 2,
+	Opt_err___14 = 3,
+};
+
+enum target_sc_flags_table {
+	TARGET_SCF_BIDI_OP = 1,
+	TARGET_SCF_ACK_KREF = 2,
+	TARGET_SCF_UNKNOWN_SIZE = 4,
+	TARGET_SCF_USE_CPUID = 8,
+};
+
+struct trace_event_raw_target_sequencer_start {
+	struct trace_entry ent;
+	unsigned int unpacked_lun;
+	long long unsigned int tag;
+	unsigned int opcode;
+	unsigned int data_length;
+	unsigned int task_attribute;
+	unsigned char control;
+	unsigned char cdb[32];
+	u32 __data_loc_initiator;
+	char __data[0];
+};
+
+struct trace_event_raw_target_cmd_complete {
+	struct trace_entry ent;
+	unsigned int unpacked_lun;
+	long long unsigned int tag;
+	unsigned int opcode;
+	unsigned int data_length;
+	unsigned int task_attribute;
+	unsigned char control;
+	unsigned char scsi_status;
+	unsigned char sense_length;
+	unsigned char cdb[32];
+	unsigned char sense_data[18];
+	u32 __data_loc_initiator;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_target_sequencer_start {
+	u32 initiator;
+};
+
+struct trace_event_data_offsets_target_cmd_complete {
+	u32 initiator;
+};
+
+typedef void (*btf_trace_target_sequencer_start)(void *, struct se_cmd *);
+
+typedef void (*btf_trace_target_cmd_complete)(void *, struct se_cmd *);
+
+struct sense_detail {
+	u8 key;
+	u8 asc;
+	u8 ascq;
+	bool add_sense_info;
+};
+
+typedef uint32_t itt_t;
+
+enum tpg_state_table {
+	TPG_STATE_FREE = 0,
+	TPG_STATE_ACTIVE = 1,
+	TPG_STATE_INACTIVE = 2,
+	TPG_STATE_COLD_RESET = 3,
+};
+
+enum tiqn_state_table {
+	TIQN_STATE_ACTIVE = 1,
+	TIQN_STATE_SHUTDOWN = 2,
+};
+
+enum naf_flags_table {
+	NAF_USERID_SET = 1,
+	NAF_PASSWORD_SET = 2,
+	NAF_USERID_IN_SET = 4,
+	NAF_PASSWORD_IN_SET = 8,
+};
+
+enum iscsi_timer_flags_table {
+	ISCSI_TF_RUNNING = 1,
+	ISCSI_TF_STOP = 2,
+	ISCSI_TF_EXPIRED = 4,
+};
+
+enum np_flags_table {
+	NPF_IP_NETWORK = 0,
+};
+
+enum np_thread_state_table {
+	ISCSI_NP_THREAD_ACTIVE = 1,
+	ISCSI_NP_THREAD_INACTIVE = 2,
+	ISCSI_NP_THREAD_RESET = 3,
+	ISCSI_NP_THREAD_SHUTDOWN = 4,
+	ISCSI_NP_THREAD_EXIT = 5,
+};
+
+struct iscsi_conn_ops {
+	u8 HeaderDigest;
+	u8 DataDigest;
+	u32 MaxRecvDataSegmentLength;
+	u32 MaxXmitDataSegmentLength;
+	u32 InitiatorRecvDataSegmentLength;
+	u32 TargetRecvDataSegmentLength;
+};
+
+struct iscsi_sess_ops {
+	char InitiatorName[224];
+	char InitiatorAlias[256];
+	char TargetName[224];
+	char TargetAlias[256];
+	char TargetAddress[256];
+	u16 TargetPortalGroupTag;
+	u16 MaxConnections;
+	u8 InitialR2T;
+	u8 ImmediateData;
+	u32 MaxBurstLength;
+	u32 FirstBurstLength;
+	u16 DefaultTime2Wait;
+	u16 DefaultTime2Retain;
+	u16 MaxOutstandingR2T;
+	u8 DataPDUInOrder;
+	u8 DataSequenceInOrder;
+	u8 ErrorRecoveryLevel;
+	u8 SessionType;
+	u8 RDMAExtensions;
+};
+
+struct iscsi_param_list {
+	bool iser;
+	struct list_head param_list;
+	struct list_head extra_response_list;
+};
+
+struct iscsi_login_thread_s;
+
+struct iscsi_login;
+
+struct iscsit_transport;
+
+struct iscsi_portal_group;
+
+struct iscsi_tpg_np;
+
+struct iscsit_session;
+
+struct iscsit_conn {
+	wait_queue_head_t queues_wq;
+	u8 auth_complete;
+	u8 conn_state;
+	u8 conn_logout_reason;
+	u8 network_transport;
+	enum iscsi_timer_flags_table nopin_timer_flags;
+	enum iscsi_timer_flags_table nopin_response_timer_flags;
+	u8 which_thread;
+	u16 cid;
+	u16 login_port;
+	int net_size;
+	int login_family;
+	u32 auth_id;
+	u32 conn_flags;
+	itt_t login_itt;
+	u32 exp_statsn;
+	u32 stat_sn;
+	struct __kernel_sockaddr_storage login_sockaddr;
+	struct __kernel_sockaddr_storage local_sockaddr;
+	int conn_usage_count;
+	int conn_waiting_on_uc;
+	atomic_t check_immediate_queue;
+	atomic_t conn_logout_remove;
+	atomic_t connection_exit;
+	atomic_t connection_recovery;
+	atomic_t connection_reinstatement;
+	atomic_t connection_wait_rcfr;
+	atomic_t sleep_on_conn_wait_comp;
+	atomic_t transport_failed;
+	struct completion conn_post_wait_comp;
+	struct completion conn_wait_comp;
+	struct completion conn_wait_rcfr_comp;
+	struct completion conn_waiting_on_uc_comp;
+	struct completion conn_logout_comp;
+	struct completion tx_half_close_comp;
+	struct completion rx_half_close_comp;
+	struct socket *sock;
+	void (*orig_data_ready)(struct sock *);
+	void (*orig_state_change)(struct sock *);
+	long unsigned int login_flags;
+	struct delayed_work login_work;
+	struct iscsi_login *login;
+	struct timer_list nopin_timer;
+	struct timer_list nopin_response_timer;
+	struct timer_list transport_timer;
+	struct task_struct *login_kworker;
+	spinlock_t cmd_lock;
+	spinlock_t conn_usage_lock;
+	spinlock_t immed_queue_lock;
+	spinlock_t nopin_timer_lock;
+	spinlock_t response_queue_lock;
+	spinlock_t state_lock;
+	struct ahash_request *conn_rx_hash;
+	struct ahash_request *conn_tx_hash;
+	cpumask_var_t conn_cpumask;
+	cpumask_var_t allowed_cpumask;
+	unsigned int conn_rx_reset_cpumask: 1;
+	unsigned int conn_tx_reset_cpumask: 1;
+	struct list_head conn_cmd_list;
+	struct list_head immed_queue_list;
+	struct list_head response_queue_list;
+	struct iscsi_conn_ops *conn_ops;
+	struct iscsi_login *conn_login;
+	struct iscsit_transport *conn_transport;
+	struct iscsi_param_list *param_list;
+	void *auth_protocol;
+	void *context;
+	struct iscsi_login_thread_s *login_thread;
+	struct iscsi_portal_group *tpg;
+	struct iscsi_tpg_np *tpg_np;
+	struct iscsit_session *sess;
+	int bitmap_id;
+	int rx_thread_active;
+	struct task_struct *rx_thread;
+	struct completion rx_login_comp;
+	int tx_thread_active;
+	struct task_struct *tx_thread;
+	struct list_head conn_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsit_session {
+	u8 initiator_vendor;
+	u8 isid[6];
+	enum iscsi_timer_flags_table time2retain_timer_flags;
+	u8 version_active;
+	u16 cid_called;
+	u16 conn_recovery_count;
+	u16 tsih;
+	u32 session_state;
+	itt_t init_task_tag;
+	u32 targ_xfer_tag;
+	u32 cmdsn_window;
+	struct mutex cmdsn_mutex;
+	u32 exp_cmd_sn;
+	atomic_t max_cmd_sn;
+	struct list_head sess_ooo_cmdsn_list;
+	u32 sid;
+	char auth_type[8];
+	int session_index;
+	int session_usage_count;
+	int session_waiting_on_uc;
+	atomic_long_t cmd_pdus;
+	atomic_long_t rsp_pdus;
+	atomic_long_t tx_data_octets;
+	atomic_long_t rx_data_octets;
+	atomic_long_t conn_digest_errors;
+	atomic_long_t conn_timeout_errors;
+	u64 creation_time;
+	atomic_t nconn;
+	atomic_t session_continuation;
+	atomic_t session_fall_back_to_erl0;
+	atomic_t session_logout;
+	atomic_t session_reinstatement;
+	atomic_t session_stop_active;
+	atomic_t session_close;
+	struct list_head sess_conn_list;
+	struct list_head cr_active_list;
+	struct list_head cr_inactive_list;
+	spinlock_t conn_lock;
+	spinlock_t cr_a_lock;
+	spinlock_t cr_i_lock;
+	spinlock_t session_usage_lock;
+	spinlock_t ttt_lock;
+	struct completion async_msg_comp;
+	struct completion reinstatement_comp;
+	struct completion session_wait_comp;
+	struct completion session_waiting_on_uc_comp;
+	struct timer_list time2retain_timer;
+	struct iscsi_sess_ops *sess_ops;
+	struct se_session *se_sess;
+	struct iscsi_portal_group *tpg;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_np;
+
+struct iscsi_login {
+	u8 auth_complete;
+	u8 checked_for_existing;
+	u8 current_stage;
+	u8 leading_connection;
+	u8 first_request;
+	u8 version_min;
+	u8 version_max;
+	u8 login_complete;
+	u8 login_failed;
+	bool zero_tsih;
+	char isid[6];
+	u32 cmd_sn;
+	itt_t init_task_tag;
+	u32 initial_exp_statsn;
+	u32 rsp_length;
+	u16 cid;
+	u16 tsih;
+	char req[48];
+	char rsp[48];
+	char *req_buf;
+	char *rsp_buf;
+	struct iscsit_conn *conn;
+	struct iscsi_np *np;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_tpg_attrib {
+	u32 authentication;
+	u32 login_timeout;
+	u32 netif_timeout;
+	u32 generate_node_acls;
+	u32 cache_dynamic_acls;
+	u32 default_cmdsn_depth;
+	u32 demo_mode_write_protect;
+	u32 prod_mode_write_protect;
+	u32 demo_mode_discovery;
+	u32 default_erl;
+	u8 t10_pi;
+	u32 fabric_prot_type;
+	u32 tpg_enabled_sendtargets;
+	u32 login_keys_workaround;
+	struct iscsi_portal_group *tpg;
+};
+
+struct iscsi_node_auth {
+	enum naf_flags_table naf_flags;
+	int authenticate_target;
+	int enforce_discovery_auth;
+	char userid[256];
+	char password[256];
+	char userid_mutual[256];
+	char password_mutual[256];
+};
+
+struct iscsi_tiqn;
+
+struct iscsi_portal_group {
+	unsigned char tpg_chap_id;
+	enum tpg_state_table tpg_state;
+	u16 tpgt;
+	u16 ntsih;
+	u32 nsessions;
+	u32 num_tpg_nps;
+	u32 sid;
+	spinlock_t tpg_np_lock;
+	spinlock_t tpg_state_lock;
+	struct se_portal_group tpg_se_tpg;
+	struct mutex tpg_access_lock;
+	struct semaphore np_login_sem;
+	struct iscsi_tpg_attrib tpg_attrib;
+	struct iscsi_node_auth tpg_demo_auth;
+	struct iscsi_param_list *param_list;
+	struct iscsi_tiqn *tpg_tiqn;
+	struct list_head tpg_gnp_list;
+	struct list_head tpg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_tpg_np {
+	struct iscsi_np *tpg_np;
+	struct iscsi_portal_group *tpg;
+	struct iscsi_tpg_np *tpg_np_parent;
+	struct list_head tpg_np_list;
+	struct list_head tpg_np_child_list;
+	struct list_head tpg_np_parent_list;
+	struct se_tpg_np se_tpg_np;
+	spinlock_t tpg_np_parent_lock;
+	struct completion tpg_np_comp;
+	struct kref tpg_np_kref;
+};
+
+struct iscsi_np {
+	int np_network_transport;
+	int np_ip_proto;
+	int np_sock_type;
+	enum np_thread_state_table np_thread_state;
+	bool enabled;
+	atomic_t np_reset_count;
+	enum iscsi_timer_flags_table np_login_timer_flags;
+	u32 np_exports;
+	enum np_flags_table np_flags;
+	spinlock_t np_thread_lock;
+	struct completion np_restart_comp;
+	struct socket *np_socket;
+	struct __kernel_sockaddr_storage np_sockaddr;
+	struct task_struct *np_thread;
+	struct timer_list np_login_timer;
+	void *np_context;
+	struct iscsit_transport *np_transport;
+	struct list_head np_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_sess_err_stats {
+	spinlock_t lock;
+	u32 digest_errors;
+	u32 cxn_timeout_errors;
+	u32 pdu_format_errors;
+	u32 last_sess_failure_type;
+	char last_sess_fail_rem_name[224];
+	long: 32;
+	long: 64;
+};
+
+struct iscsi_login_stats {
+	spinlock_t lock;
+	u32 accepts;
+	u32 other_fails;
+	u32 redirects;
+	u32 authorize_fails;
+	u32 authenticate_fails;
+	u32 negotiate_fails;
+	u64 last_fail_time;
+	u32 last_fail_type;
+	int last_intr_fail_ip_family;
+	struct __kernel_sockaddr_storage last_intr_fail_sockaddr;
+	char last_intr_fail_name[224];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_logout_stats {
+	spinlock_t lock;
+	u32 normal_logouts;
+	u32 abnormal_logouts;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_wwn_stat_grps {
+	struct config_group iscsi_stat_group;
+	struct config_group iscsi_instance_group;
+	struct config_group iscsi_sess_err_group;
+	struct config_group iscsi_tgt_attr_group;
+	struct config_group iscsi_login_stats_group;
+	struct config_group iscsi_logout_stats_group;
+};
+
+struct iscsi_tiqn {
+	unsigned char tiqn[224];
+	enum tiqn_state_table tiqn_state;
+	int tiqn_access_count;
+	u32 tiqn_active_tpgs;
+	u32 tiqn_ntpgs;
+	u32 tiqn_num_tpg_nps;
+	u32 tiqn_nsessions;
+	struct list_head tiqn_list;
+	struct list_head tiqn_tpg_list;
+	spinlock_t tiqn_state_lock;
+	spinlock_t tiqn_tpg_lock;
+	struct se_wwn tiqn_wwn;
+	struct iscsi_wwn_stat_grps tiqn_stat_grps;
+	int tiqn_index;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct iscsi_sess_err_stats sess_err_stats;
+	struct iscsi_login_stats login_stats;
+	struct iscsi_logout_stats logout_stats;
+};
+
+struct iscsi_extra_response {
+	char key[64];
+	char value[32];
+	struct list_head er_list;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_param {
+	char *name;
+	char *value;
+	u8 set_param;
+	u8 phase;
+	u8 scope;
+	u8 sender;
+	u8 type;
+	u8 use;
+	u16 type_range;
+	u32 state;
+	struct list_head p_list;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_chap {
+	unsigned char id;
+	unsigned char challenge[32];
+	unsigned int challenge_len;
+	unsigned char *digest_name;
+	unsigned int digest_size;
+	unsigned int authenticate_target;
+	unsigned int chap_state;
+};
+
+enum cmd_flags_table {
+	ICF_GOT_LAST_DATAOUT = 1,
+	ICF_GOT_DATACK_SNACK = 2,
+	ICF_NON_IMMEDIATE_UNSOLICITED_DATA = 4,
+	ICF_SENT_LAST_R2T = 8,
+	ICF_WITHIN_COMMAND_RECOVERY = 16,
+	ICF_CONTIG_MEMORY = 32,
+	ICF_ATTACHED_TO_RQUEUE = 64,
+	ICF_OOO_CMDSN = 128,
+	ICF_SENDTARGETS_ALL = 256,
+	ICF_SENDTARGETS_SINGLE = 512,
+};
+
+enum cmd_i_state_table {
+	ISTATE_NO_STATE = 0,
+	ISTATE_NEW_CMD = 1,
+	ISTATE_DEFERRED_CMD = 2,
+	ISTATE_UNSOLICITED_DATA = 3,
+	ISTATE_RECEIVE_DATAOUT = 4,
+	ISTATE_RECEIVE_DATAOUT_RECOVERY = 5,
+	ISTATE_RECEIVED_LAST_DATAOUT = 6,
+	ISTATE_WITHIN_DATAOUT_RECOVERY = 7,
+	ISTATE_IN_CONNECTION_RECOVERY = 8,
+	ISTATE_RECEIVED_TASKMGT = 9,
+	ISTATE_SEND_ASYNCMSG = 10,
+	ISTATE_SENT_ASYNCMSG = 11,
+	ISTATE_SEND_DATAIN = 12,
+	ISTATE_SEND_LAST_DATAIN = 13,
+	ISTATE_SENT_LAST_DATAIN = 14,
+	ISTATE_SEND_LOGOUTRSP = 15,
+	ISTATE_SENT_LOGOUTRSP = 16,
+	ISTATE_SEND_NOPIN = 17,
+	ISTATE_SENT_NOPIN = 18,
+	ISTATE_SEND_REJECT = 19,
+	ISTATE_SENT_REJECT = 20,
+	ISTATE_SEND_R2T = 21,
+	ISTATE_SENT_R2T = 22,
+	ISTATE_SEND_R2T_RECOVERY = 23,
+	ISTATE_SENT_R2T_RECOVERY = 24,
+	ISTATE_SEND_LAST_R2T = 25,
+	ISTATE_SENT_LAST_R2T = 26,
+	ISTATE_SEND_LAST_R2T_RECOVERY = 27,
+	ISTATE_SENT_LAST_R2T_RECOVERY = 28,
+	ISTATE_SEND_STATUS = 29,
+	ISTATE_SEND_STATUS_BROKEN_PC = 30,
+	ISTATE_SENT_STATUS = 31,
+	ISTATE_SEND_STATUS_RECOVERY = 32,
+	ISTATE_SENT_STATUS_RECOVERY = 33,
+	ISTATE_SEND_TASKMGTRSP = 34,
+	ISTATE_SENT_TASKMGTRSP = 35,
+	ISTATE_SEND_TEXTRSP = 36,
+	ISTATE_SENT_TEXTRSP = 37,
+	ISTATE_SEND_NOPIN_WANT_RESPONSE = 38,
+	ISTATE_SENT_NOPIN_WANT_RESPONSE = 39,
+	ISTATE_SEND_NOPIN_NO_RESPONSE = 40,
+	ISTATE_REMOVE = 41,
+	ISTATE_FREE = 42,
+};
+
+struct iscsi_pdu;
+
+struct iscsi_seq;
+
+struct iscsi_tmr_req;
+
+struct iscsi_conn_recovery;
+
+struct iscsit_cmd {
+	enum iscsi_timer_flags_table dataout_timer_flags;
+	u8 dataout_timeout_retries;
+	u8 error_recovery_count;
+	enum cmd_i_state_table deferred_i_state;
+	enum cmd_i_state_table i_state;
+	u8 immediate_cmd;
+	u8 immediate_data;
+	u8 iscsi_opcode;
+	u8 iscsi_response;
+	u8 logout_reason;
+	u8 logout_response;
+	u8 maxcmdsn_inc;
+	u8 unsolicited_data;
+	u8 reject_reason;
+	u16 logout_cid;
+	enum cmd_flags_table cmd_flags;
+	itt_t init_task_tag;
+	u32 targ_xfer_tag;
+	u32 cmd_sn;
+	u32 exp_stat_sn;
+	u32 stat_sn;
+	u32 data_sn;
+	u32 r2t_sn;
+	u32 acked_data_sn;
+	u32 buf_ptr_size;
+	u32 data_crc;
+	u32 outstanding_r2ts;
+	u32 r2t_offset;
+	u32 iov_data_count;
+	u32 orig_iov_data_count;
+	u32 iov_misc_count;
+	u32 pdu_count;
+	u32 pdu_send_order;
+	u32 pdu_start;
+	u32 seq_send_order;
+	u32 seq_count;
+	u32 seq_no;
+	u32 seq_start_offset;
+	u32 seq_end_offset;
+	u32 read_data_done;
+	u32 write_data_done;
+	u32 first_burst_len;
+	u32 next_burst_len;
+	u32 tx_size;
+	void *buf_ptr;
+	void *text_in_ptr;
+	enum dma_data_direction data_direction;
+	unsigned char pdu[52];
+	atomic_t immed_queue_count;
+	atomic_t response_queue_count;
+	spinlock_t datain_lock;
+	spinlock_t dataout_timeout_lock;
+	spinlock_t istate_lock;
+	spinlock_t error_lock;
+	spinlock_t r2t_lock;
+	struct list_head datain_list;
+	struct list_head cmd_r2t_list;
+	struct timer_list dataout_timer;
+	struct kvec *iov_data;
+	void *overflow_buf;
+	struct kvec iov_misc[5];
+	struct iscsi_pdu *pdu_list;
+	struct iscsi_pdu *pdu_ptr;
+	struct iscsi_seq *seq_list;
+	struct iscsi_seq *seq_ptr;
+	struct iscsi_tmr_req *tmr_req;
+	struct iscsit_conn *conn;
+	struct iscsi_conn_recovery *cr;
+	struct iscsit_session *sess;
+	struct list_head i_conn_node;
+	struct se_cmd se_cmd;
+	unsigned char sense_buffer[98];
+	u32 padding;
+	u8 pad_bytes[4];
+	struct scatterlist *first_data_sg;
+	u32 first_data_sg_off;
+	u32 kmapped_nents;
+	sense_reason_t sense_reason;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_pdu {
+	int status;
+	int type;
+	u8 flags;
+	u32 data_sn;
+	u32 length;
+	u32 offset;
+	u32 pdu_send_order;
+	u32 seq_no;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_seq {
+	int sent;
+	int status;
+	int type;
+	u32 data_sn;
+	u32 first_datasn;
+	u32 last_datasn;
+	u32 next_burst_len;
+	u32 pdu_start;
+	u32 pdu_count;
+	u32 offset;
+	u32 orig_offset;
+	u32 pdu_send_order;
+	u32 r2t_sn;
+	u32 seq_send_order;
+	u32 seq_no;
+	u32 xfer_len;
+};
+
+struct iscsi_tmr_req {
+	bool task_reassign: 1;
+	u32 exp_data_sn;
+	struct iscsit_cmd *ref_cmd;
+	struct iscsi_conn_recovery *conn_recovery;
+	struct se_tmr_req *se_tmr_req;
+};
+
+struct iscsi_conn_recovery {
+	u16 cid;
+	u32 cmd_count;
+	u32 maxrecvdatasegmentlength;
+	u32 maxxmitdatasegmentlength;
+	int ready_for_reallegiance;
+	struct list_head conn_recovery_cmd_list;
+	spinlock_t conn_recovery_cmd_lock;
+	struct timer_list time2retain_timer;
+	struct iscsit_session *sess;
+	struct list_head cr_list;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_node_acl;
+
+struct iscsi_node_attrib {
+	s32 authentication;
+	u32 dataout_timeout;
+	u32 dataout_timeout_retries;
+	u32 default_erl;
+	u32 nopin_timeout;
+	u32 nopin_response_timeout;
+	u32 random_datain_pdu_offsets;
+	u32 random_datain_seq_offsets;
+	u32 random_r2t_offsets;
+	u32 tmr_cold_reset;
+	u32 tmr_warm_reset;
+	struct iscsi_node_acl *nacl;
+};
+
+struct iscsi_node_stat_grps {
+	struct config_group iscsi_sess_stats_group;
+	struct config_group iscsi_conn_stats_group;
+};
+
+struct iscsi_node_acl {
+	struct se_node_acl se_node_acl;
+	struct iscsi_node_attrib node_attrib;
+	struct iscsi_node_auth node_auth;
+	struct iscsi_node_stat_grps node_stat_grps;
+};
+
+struct iscsi_build_list {
+	int data_direction;
+	int randomize;
+	int type;
+	int immediate_data_length;
+};
+
+struct fd_host;
+
+struct fd_dev {
+	struct se_device dev;
+	u32 fbd_flags;
+	unsigned char fd_dev_name[256];
+	u32 fd_dev_id;
+	u32 fd_table_count;
+	u32 fd_queue_depth;
+	u32 fd_block_size;
+	long long unsigned int fd_dev_size;
+	struct file *fd_file;
+	struct file *fd_prot_file;
+	struct fd_host *fd_host;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct fd_host {
+	u32 fd_host_dev_id_count;
+	u32 fd_host_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct target_core_file_cmd {
+	long unsigned int len;
+	struct se_cmd *cmd;
+	struct kiocb iocb;
+	struct bio_vec bvecs[0];
+};
+
+enum {
+	Opt_fd_dev_name = 0,
+	Opt_fd_dev_size = 1,
+	Opt_fd_buffered_io = 2,
+	Opt_fd_async_io = 3,
+	Opt_err___15 = 4,
+};
+
+enum datain_req_comp_table {
+	DATAIN_COMPLETE_NORMAL = 1,
+	DATAIN_COMPLETE_WITHIN_COMMAND_RECOVERY = 2,
+	DATAIN_COMPLETE_CONNECTION_RECOVERY = 3,
+};
+
+enum datain_req_rec_table {
+	DATAIN_WITHIN_COMMAND_RECOVERY = 1,
+	DATAIN_CONNECTION_RECOVERY = 2,
+};
+
+struct iscsi_datain_req {
+	enum datain_req_comp_table dr_complete;
+	int generate_recovery_values;
+	enum datain_req_rec_table recovery;
+	u32 begrun;
+	u32 runlength;
+	u32 data_length;
+	u32 data_offset;
+	u32 data_sn;
+	u32 next_burst_len;
+	u32 read_data_done;
+	u32 seq_send_order;
+	struct list_head cmd_datain_node;
+};
+
+struct iscsi_datain {
+	u8 flags;
+	u32 data_sn;
+	u32 length;
+	u32 offset;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_ooo_cmdsn {
+	u16 cid;
+	u32 batch_count;
+	u32 cmdsn;
+	u32 exp_cmdsn;
+	struct iscsit_cmd *cmd;
+	struct list_head ooo_list;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct iscsi_data {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t rsvd3;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 rsvd4;
+	__be32 exp_statsn;
+	__be32 rsvd5;
+	__be32 datasn;
+	__be32 offset;
+	__be32 rsvd6;
+};
+
+enum target_conn_state_table {
+	TARG_CONN_STATE_FREE = 1,
+	TARG_CONN_STATE_XPT_UP = 3,
+	TARG_CONN_STATE_IN_LOGIN = 4,
+	TARG_CONN_STATE_LOGGED_IN = 5,
+	TARG_CONN_STATE_IN_LOGOUT = 6,
+	TARG_CONN_STATE_LOGOUT_REQUESTED = 7,
+	TARG_CONN_STATE_CLEANUP_WAIT = 8,
+};
+
+enum dataout_action_ret_table {
+	DATAOUT_CANNOT_RECOVER = 4294967295,
+	DATAOUT_NORMAL = 0,
+	DATAOUT_SEND_R2T = 1,
+	DATAOUT_SEND_TO_TRANSPORT = 2,
+	DATAOUT_WITHIN_COMMAND_RECOVERY = 3,
+};
+
+struct iscsi_r2t {
+	int seq_complete;
+	int recovery_r2t;
+	int sent_r2t;
+	u32 r2t_sn;
+	u32 offset;
+	u32 targ_xfer_tag;
+	u32 xfer_len;
+	struct list_head r2t_list;
+	long: 64;
+	long: 64;
+};
+
+struct iscsit_transport {
+	char name[16];
+	int transport_type;
+	bool rdma_shutdown;
+	int priv_size;
+	struct module *owner;
+	struct list_head t_node;
+	int (*iscsit_setup_np)(struct iscsi_np *, struct __kernel_sockaddr_storage *);
+	int (*iscsit_accept_np)(struct iscsi_np *, struct iscsit_conn *);
+	void (*iscsit_free_np)(struct iscsi_np *);
+	void (*iscsit_wait_conn)(struct iscsit_conn *);
+	void (*iscsit_free_conn)(struct iscsit_conn *);
+	int (*iscsit_get_login_rx)(struct iscsit_conn *, struct iscsi_login *);
+	int (*iscsit_put_login_tx)(struct iscsit_conn *, struct iscsi_login *, u32);
+	int (*iscsit_immediate_queue)(struct iscsit_conn *, struct iscsit_cmd *, int);
+	int (*iscsit_response_queue)(struct iscsit_conn *, struct iscsit_cmd *, int);
+	int (*iscsit_get_dataout)(struct iscsit_conn *, struct iscsit_cmd *, bool);
+	int (*iscsit_queue_data_in)(struct iscsit_conn *, struct iscsit_cmd *);
+	int (*iscsit_queue_status)(struct iscsit_conn *, struct iscsit_cmd *);
+	void (*iscsit_aborted_task)(struct iscsit_conn *, struct iscsit_cmd *);
+	int (*iscsit_xmit_pdu)(struct iscsit_conn *, struct iscsit_cmd *, struct iscsi_datain_req *, const void *, u32);
+	void (*iscsit_unmap_cmd)(struct iscsit_conn *, struct iscsit_cmd *);
+	void (*iscsit_get_rx_pdu)(struct iscsit_conn *);
+	int (*iscsit_validate_params)(struct iscsit_conn *);
+	void (*iscsit_get_r2t_ttt)(struct iscsit_conn *, struct iscsit_cmd *, struct iscsi_r2t *);
+	enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsit_conn *);
+};
+
+struct iscsi_login_req {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t max_version;
+	uint8_t min_version;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t isid[6];
+	__be16 tsih;
+	itt_t itt;
+	__be16 cid;
+	__be16 rsvd3;
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	uint8_t rsvd5[16];
+};
+
+enum iscsit_transport_type {
+	ISCSI_TCP = 0,
+	ISCSI_SCTP_TCP = 1,
+	ISCSI_SCTP_UDP = 2,
+	ISCSI_IWARP_TCP = 3,
+	ISCSI_IWARP_SCTP = 4,
+	ISCSI_INFINIBAND = 5,
+	ISCSI_CXGBIT = 6,
+};
+
+enum target_sess_state_table {
+	TARG_SESS_STATE_FREE = 1,
+	TARG_SESS_STATE_ACTIVE = 2,
+	TARG_SESS_STATE_LOGGED_IN = 3,
+	TARG_SESS_STATE_FAILED = 4,
+	TARG_SESS_STATE_IN_CONTINUE = 5,
+};
+
+struct iscsit_global {
+	u32 in_shutdown;
+	u32 active_ts;
+	u32 auth_id;
+	u32 inactive_ts;
+	long unsigned int *ts_bitmap;
+	spinlock_t ts_bitmap_lock;
+	cpumask_var_t allowed_cpumask;
+	struct iscsi_node_acl discovery_acl;
+	struct iscsi_portal_group *discovery_tpg;
+};
+
+struct iscsi_tm {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd1[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	itt_t rtt;
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	__be32 refcmdsn;
+	__be32 exp_datasn;
+	uint8_t rsvd2[8];
+};
+
+struct iscsi_login_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t max_version;
+	uint8_t active_version;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t isid[6];
+	__be16 tsih;
+	itt_t itt;
+	__be32 rsvd3;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	uint8_t status_class;
+	uint8_t status_detail;
+	uint8_t rsvd4[10];
+};
+
+struct conn_timeout {
+	struct timer_list timer;
+	struct iscsit_conn *conn;
+};
+
+enum recover_cmdsn_ret_table {
+	CMDSN_ERROR_CANNOT_RECOVER = 4294967295,
+	CMDSN_NORMAL_OPERATION = 0,
+	CMDSN_LOWER_THAN_EXP = 1,
+	CMDSN_HIGHER_THAN_EXP = 2,
+	CMDSN_MAXCMDSN_OVERRUN = 3,
+};
+
+struct iscsi_queue_req {
+	int state;
+	struct iscsit_cmd *cmd;
+	struct list_head qr_list;
+};
+
+struct iscsi_hdr {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 statsn;
+	__be32 exp_statsn;
+	__be32 max_statsn;
+	uint8_t other[12];
+};
+
+struct iscsi_scsi_req {
+	uint8_t opcode;
+	uint8_t flags;
+	__be16 rsvd2;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 data_length;
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	uint8_t cdb[16];
+};
+
+struct iscsi_ecdb_ahdr {
+	__be16 ahslength;
+	uint8_t ahstype;
+	uint8_t reserved;
+	uint8_t ecdb[244];
+};
+
+struct iscsi_scsi_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t response;
+	uint8_t cmd_status;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd[8];
+	itt_t itt;
+	__be32 rsvd1;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	__be32 exp_datasn;
+	__be32 bi_residual_count;
+	__be32 residual_count;
+};
+
+struct iscsi_async {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t rsvd3;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	uint8_t rsvd4[8];
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	uint8_t async_event;
+	uint8_t async_vcode;
+	__be16 param1;
+	__be16 param2;
+	__be16 param3;
+	uint8_t rsvd5[4];
+};
+
+struct iscsi_nopout {
+	uint8_t opcode;
+	uint8_t flags;
+	__be16 rsvd2;
+	uint8_t rsvd3;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	uint8_t rsvd4[16];
+};
+
+struct iscsi_nopin {
+	uint8_t opcode;
+	uint8_t flags;
+	__be16 rsvd2;
+	uint8_t rsvd3;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	uint8_t rsvd4[12];
+};
+
+struct iscsi_tm_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t response;
+	uint8_t qualifier;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd2[8];
+	itt_t itt;
+	itt_t rtt;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	uint8_t rsvd3[12];
+};
+
+struct iscsi_r2t_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	__be32 r2tsn;
+	__be32 data_offset;
+	__be32 data_length;
+};
+
+struct iscsi_data_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2;
+	uint8_t cmd_status;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	struct scsi_lun lun;
+	itt_t itt;
+	__be32 ttt;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	__be32 datasn;
+	__be32 offset;
+	__be32 residual_count;
+};
+
+struct iscsi_text {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd4[8];
+	itt_t itt;
+	__be32 ttt;
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	uint8_t rsvd5[16];
+};
+
+struct iscsi_text_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd4[8];
+	itt_t itt;
+	__be32 ttt;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	uint8_t rsvd5[12];
+};
+
+struct iscsi_logout {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd1[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd2[8];
+	itt_t itt;
+	__be16 cid;
+	uint8_t rsvd3[2];
+	__be32 cmdsn;
+	__be32 exp_statsn;
+	uint8_t rsvd4[16];
+};
+
+struct iscsi_logout_rsp {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t response;
+	uint8_t rsvd2;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd3[8];
+	itt_t itt;
+	__be32 rsvd4;
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	__be32 rsvd5;
+	__be16 t2wait;
+	__be16 t2retain;
+	__be32 rsvd6;
+};
+
+struct iscsi_snack {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t rsvd2[2];
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t lun[8];
+	itt_t itt;
+	__be32 ttt;
+	uint8_t rsvd3[4];
+	__be32 exp_statsn;
+	uint8_t rsvd4[8];
+	__be32 begrun;
+	__be32 runlength;
+};
+
+struct iscsi_reject {
+	uint8_t opcode;
+	uint8_t flags;
+	uint8_t reason;
+	uint8_t rsvd2;
+	uint8_t hlength;
+	uint8_t dlength[3];
+	uint8_t rsvd3[8];
+	__be32 ffffffff;
+	uint8_t rsvd4[4];
+	__be32 statsn;
+	__be32 exp_cmdsn;
+	__be32 max_cmdsn;
+	__be32 datasn;
+	uint8_t rsvd5[8];
+};
+
+enum immedate_data_ret_table {
+	IMMEDIATE_DATA_CANNOT_RECOVER = 4294967295,
+	IMMEDIATE_DATA_NORMAL_OPERATION = 0,
+	IMMEDIATE_DATA_ERL1_CRC_FAILURE = 1,
+};
+
+struct mtd_ecc_stats {
+	__u32 corrected;
+	__u32 failed;
+	__u32 badblocks;
+	__u32 bbtblocks;
+};
+
+struct mtd_debug_info {
+	struct dentry *dfs_dir;
+};
+
+struct nvmem_device;
+
+struct mtd_part {
+	struct list_head node;
+	u64 offset;
+	u64 size;
+	u32 flags;
+};
+
+struct mtd_master {
+	struct mutex partitions_lock;
+	struct mutex chrdev_lock;
+	unsigned int suspended: 1;
+};
+
+struct mtd_ooblayout_ops;
+
+struct mtd_pairing_scheme;
+
+struct mtd_erase_region_info;
+
+struct erase_info;
+
+struct mtd_oob_ops;
+
+struct otp_info;
+
+struct mtd_info {
+	u_char type;
+	uint32_t flags;
+	uint64_t size;
+	uint32_t erasesize;
+	uint32_t writesize;
+	uint32_t writebufsize;
+	uint32_t oobsize;
+	uint32_t oobavail;
+	unsigned int erasesize_shift;
+	unsigned int writesize_shift;
+	unsigned int erasesize_mask;
+	unsigned int writesize_mask;
+	unsigned int bitflip_threshold;
+	const char *name;
+	int index;
+	const struct mtd_ooblayout_ops *ooblayout;
+	const struct mtd_pairing_scheme *pairing;
+	unsigned int ecc_step_size;
+	unsigned int ecc_strength;
+	int numeraseregions;
+	struct mtd_erase_region_info *eraseregions;
+	int (*_erase)(struct mtd_info *, struct erase_info *);
+	int (*_point)(struct mtd_info *, loff_t, size_t, size_t *, void **, resource_size_t *);
+	int (*_unpoint)(struct mtd_info *, loff_t, size_t);
+	int (*_read)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+	int (*_write)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+	int (*_panic_write)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+	int (*_read_oob)(struct mtd_info *, loff_t, struct mtd_oob_ops *);
+	int (*_write_oob)(struct mtd_info *, loff_t, struct mtd_oob_ops *);
+	int (*_get_fact_prot_info)(struct mtd_info *, size_t, size_t *, struct otp_info *);
+	int (*_read_fact_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+	int (*_get_user_prot_info)(struct mtd_info *, size_t, size_t *, struct otp_info *);
+	int (*_read_user_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+	int (*_write_user_prot_reg)(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+	int (*_lock_user_prot_reg)(struct mtd_info *, loff_t, size_t);
+	int (*_erase_user_prot_reg)(struct mtd_info *, loff_t, size_t);
+	int (*_writev)(struct mtd_info *, const struct kvec *, long unsigned int, loff_t, size_t *);
+	void (*_sync)(struct mtd_info *);
+	int (*_lock)(struct mtd_info *, loff_t, uint64_t);
+	int (*_unlock)(struct mtd_info *, loff_t, uint64_t);
+	int (*_is_locked)(struct mtd_info *, loff_t, uint64_t);
+	int (*_block_isreserved)(struct mtd_info *, loff_t);
+	int (*_block_isbad)(struct mtd_info *, loff_t);
+	int (*_block_markbad)(struct mtd_info *, loff_t);
+	int (*_max_bad_blocks)(struct mtd_info *, loff_t, size_t);
+	int (*_suspend)(struct mtd_info *);
+	void (*_resume)(struct mtd_info *);
+	void (*_reboot)(struct mtd_info *);
+	int (*_get_device)(struct mtd_info *);
+	void (*_put_device)(struct mtd_info *);
+	bool oops_panic_write;
+	struct notifier_block reboot_notifier;
+	struct mtd_ecc_stats ecc_stats;
+	int subpage_sft;
+	void *priv;
+	struct module *owner;
+	struct device dev;
+	int usecount;
+	struct mtd_debug_info dbg;
+	struct nvmem_device *nvmem;
+	struct nvmem_device *otp_user_nvmem;
+	struct nvmem_device *otp_factory_nvmem;
+	struct mtd_info *parent;
+	struct list_head partitions;
+	struct mtd_part part;
+	struct mtd_master master;
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t);
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+struct nvmem_cell_info;
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+};
+
+enum {
+	MTD_OPS_PLACE_OOB = 0,
+	MTD_OPS_AUTO_OOB = 1,
+	MTD_OPS_RAW = 2,
+};
+
+struct otp_info {
+	__u32 start;
+	__u32 length;
+	__u32 locked;
+};
+
+struct erase_info {
+	uint64_t addr;
+	uint64_t len;
+	uint64_t fail_addr;
+};
+
+struct mtd_erase_region_info {
+	uint64_t offset;
+	uint32_t erasesize;
+	uint32_t numblocks;
+	long unsigned int *lockmap;
+};
+
+struct mtd_req_stats {
+	unsigned int uncorrectable_errors;
+	unsigned int corrected_bitflips;
+	unsigned int max_bitflips;
+};
+
+struct mtd_oob_ops {
+	unsigned int mode;
+	size_t len;
+	size_t retlen;
+	size_t ooblen;
+	size_t oobretlen;
+	uint32_t ooboffs;
+	uint8_t *datbuf;
+	uint8_t *oobbuf;
+	struct mtd_req_stats *stats;
+};
+
+struct mtd_oob_region {
+	u32 offset;
+	u32 length;
+};
+
+struct mtd_ooblayout_ops {
+	int (*ecc)(struct mtd_info *, int, struct mtd_oob_region *);
+	int (*free)(struct mtd_info *, int, struct mtd_oob_region *);
+};
+
+struct mtd_pairing_info {
+	int pair;
+	int group;
+};
+
+struct mtd_pairing_scheme {
+	int ngroups;
+	int (*get_info)(struct mtd_info *, int, struct mtd_pairing_info *);
+	int (*get_wunit)(struct mtd_info *, const struct mtd_pairing_info *);
+};
+
+struct mtd_notifier {
+	void (*add)(struct mtd_info *);
+	void (*remove)(struct mtd_info *);
+	struct list_head list;
+};
+
+struct mtd_partition {
+	const char *name;
+	const char * const *types;
+	uint64_t size;
+	uint64_t offset;
+	uint32_t mask_flags;
+	uint32_t add_flags;
+	struct device_node *of_node;
+};
+
+struct mtd_part_parser_data {
+	long unsigned int origin;
+};
+
+struct mtd_part_parser {
+	struct list_head list;
+	struct module *owner;
+	const char *name;
+	const struct of_device_id *of_match_table;
+	int (*parse_fn)(struct mtd_info *, const struct mtd_partition **, struct mtd_part_parser_data *);
+	void (*cleanup)(const struct mtd_partition *, int);
+};
+
+struct mtd_partitions {
+	const struct mtd_partition *parts;
+	int nr_parts;
+	const struct mtd_part_parser *parser;
+};
+
+typedef long unsigned int u_long;
+
+typedef u32 u_int32_t;
+
+struct blkpg_compat_ioctl_arg {
+	compat_int_t op;
+	compat_int_t flags;
+	compat_int_t datalen;
+	compat_uptr_t data;
+};
+
+struct erase_info_user {
+	__u32 start;
+	__u32 length;
+};
+
+struct erase_info_user64 {
+	__u64 start;
+	__u64 length;
+};
+
+struct mtd_oob_buf {
+	__u32 start;
+	__u32 length;
+	unsigned char *ptr;
+};
+
+struct mtd_oob_buf64 {
+	__u64 start;
+	__u32 pad;
+	__u32 length;
+	__u64 usr_ptr;
+};
+
+struct mtd_write_req {
+	__u64 start;
+	__u64 len;
+	__u64 ooblen;
+	__u64 usr_data;
+	__u64 usr_oob;
+	__u8 mode;
+	__u8 padding[7];
+};
+
+struct mtd_read_req_ecc_stats {
+	__u32 uncorrectable_errors;
+	__u32 corrected_bitflips;
+	__u32 max_bitflips;
+};
+
+struct mtd_read_req {
+	__u64 start;
+	__u64 len;
+	__u64 ooblen;
+	__u64 usr_data;
+	__u64 usr_oob;
+	__u8 mode;
+	__u8 padding[7];
+	struct mtd_read_req_ecc_stats ecc_stats;
+};
+
+struct mtd_info_user {
+	__u8 type;
+	__u32 flags;
+	__u32 size;
+	__u32 erasesize;
+	__u32 writesize;
+	__u32 oobsize;
+	__u64 padding;
+};
+
+struct region_info_user {
+	__u32 offset;
+	__u32 erasesize;
+	__u32 numblocks;
+	__u32 regionindex;
+};
+
+struct nand_oobinfo {
+	__u32 useecc;
+	__u32 eccbytes;
+	__u32 oobfree[16];
+	__u32 eccpos[32];
+};
+
+struct nand_oobfree {
+	__u32 offset;
+	__u32 length;
+};
+
+struct nand_ecclayout_user {
+	__u32 eccbytes;
+	__u32 eccpos[64];
+	__u32 oobavail;
+	struct nand_oobfree oobfree[8];
+};
+
+enum mtd_file_modes {
+	MTD_FILE_MODE_NORMAL = 0,
+	MTD_FILE_MODE_OTP_FACTORY = 1,
+	MTD_FILE_MODE_OTP_USER = 2,
+	MTD_FILE_MODE_RAW = 3,
+};
+
+struct mtd_chip_driver;
+
+struct map_info___2 {
+	const char *name;
+	long unsigned int size;
+	resource_size_t phys;
+	void *virt;
+	void *cached;
+	int swap;
+	int bankwidth;
+	void (*inval_cache)(struct map_info___2 *, long unsigned int, ssize_t);
+	void (*set_vpp)(struct map_info___2 *, int);
+	long unsigned int pfow_base;
+	long unsigned int map_priv_1;
+	long unsigned int map_priv_2;
+	struct device_node *device_node;
+	void *fldrv_priv;
+	struct mtd_chip_driver *fldrv;
+};
+
+struct mtd_chip_driver {
+	struct mtd_info * (*probe)(struct map_info___2 *);
+	void (*destroy)(struct mtd_info *);
+	struct module *module;
+	char *name;
+	struct list_head list;
+};
+
+struct mtd_file_info {
+	struct mtd_info *mtd;
+	enum mtd_file_modes mode;
+};
+
+struct mtd_oob_buf32 {
+	u_int32_t start;
+	u_int32_t length;
+	compat_caddr_t ptr;
+};
+
+struct mtd_concat {
+	struct mtd_info mtd;
+	int num_subdev;
+	struct mtd_info **subdev;
+};
+
+struct fixed_partitions_quirks {
+	int (*post_parse)(struct mtd_info *, struct mtd_partition *, int);
+};
+
+struct mtd_blktrans_ops;
+
+struct mtd_blktrans_dev {
+	struct mtd_blktrans_ops *tr;
+	struct list_head list;
+	struct mtd_info *mtd;
+	struct mutex lock;
+	int devnum;
+	bool bg_stop;
+	long unsigned int size;
+	int readonly;
+	int open;
+	struct kref ref;
+	struct gendisk *disk;
+	struct attribute_group *disk_attributes;
+	struct request_queue *rq;
+	struct list_head rq_list;
+	struct blk_mq_tag_set *tag_set;
+	spinlock_t queue_lock;
+	void *priv;
+	fmode_t file_mode;
+};
+
+struct mtd_blktrans_ops {
+	char *name;
+	int major;
+	int part_bits;
+	int blksize;
+	int blkshift;
+	int (*readsect)(struct mtd_blktrans_dev *, long unsigned int, char *);
+	int (*writesect)(struct mtd_blktrans_dev *, long unsigned int, char *);
+	int (*discard)(struct mtd_blktrans_dev *, long unsigned int, unsigned int);
+	void (*background)(struct mtd_blktrans_dev *);
+	int (*getgeo)(struct mtd_blktrans_dev *, struct hd_geometry *);
+	int (*flush)(struct mtd_blktrans_dev *);
+	int (*open)(struct mtd_blktrans_dev *);
+	void (*release)(struct mtd_blktrans_dev *);
+	void (*add_mtd)(struct mtd_blktrans_ops *, struct mtd_info *);
+	void (*remove_dev)(struct mtd_blktrans_dev *);
+	struct list_head devs;
+	struct list_head list;
+	struct module *owner;
+};
+
+struct mtdblk_dev {
+	struct mtd_blktrans_dev mbd;
+	int count;
+	struct mutex cache_mutex;
+	unsigned char *cache_data;
+	long unsigned int cache_offset;
+	unsigned int cache_size;
+	enum {
+		STATE_EMPTY = 0,
+		STATE_CLEAN = 1,
+		STATE_DIRTY = 2,
+	} cache_state;
+};
+
+typedef union {
+	long unsigned int x[1];
+} map_word;
+
+typedef enum {
+	FL_READY = 0,
+	FL_STATUS = 1,
+	FL_CFI_QUERY = 2,
+	FL_JEDEC_QUERY = 3,
+	FL_ERASING = 4,
+	FL_ERASE_SUSPENDING = 5,
+	FL_ERASE_SUSPENDED = 6,
+	FL_WRITING = 7,
+	FL_WRITING_TO_BUFFER = 8,
+	FL_OTP_WRITE = 9,
+	FL_WRITE_SUSPENDING = 10,
+	FL_WRITE_SUSPENDED = 11,
+	FL_PM_SUSPENDED = 12,
+	FL_SYNCING = 13,
+	FL_UNLOADING = 14,
+	FL_LOCKING = 15,
+	FL_UNLOCKING = 16,
+	FL_POINT = 17,
+	FL_XIP_WHILE_ERASING = 18,
+	FL_XIP_WHILE_WRITING = 19,
+	FL_SHUTDOWN = 20,
+	FL_READING = 21,
+	FL_CACHEDPRG = 22,
+	FL_RESETTING = 23,
+	FL_OTPING = 24,
+	FL_PREPARING_ERASE = 25,
+	FL_VERIFYING_ERASE = 26,
+	FL_UNKNOWN = 27,
+} flstate_t;
+
+struct flchip {
+	long unsigned int start;
+	int ref_point_counter;
+	flstate_t state;
+	flstate_t oldstate;
+	unsigned int write_suspended: 1;
+	unsigned int erase_suspended: 1;
+	long unsigned int in_progress_block_addr;
+	long unsigned int in_progress_block_mask;
+	struct mutex mutex;
+	wait_queue_head_t wq;
+	int word_write_time;
+	int buffer_write_time;
+	int erase_time;
+	int word_write_time_max;
+	int buffer_write_time_max;
+	int erase_time_max;
+	void *priv;
+};
+
+struct cfi_ident {
+	uint8_t qry[3];
+	uint16_t P_ID;
+	uint16_t P_ADR;
+	uint16_t A_ID;
+	uint16_t A_ADR;
+	uint8_t VccMin;
+	uint8_t VccMax;
+	uint8_t VppMin;
+	uint8_t VppMax;
+	uint8_t WordWriteTimeoutTyp;
+	uint8_t BufWriteTimeoutTyp;
+	uint8_t BlockEraseTimeoutTyp;
+	uint8_t ChipEraseTimeoutTyp;
+	uint8_t WordWriteTimeoutMax;
+	uint8_t BufWriteTimeoutMax;
+	uint8_t BlockEraseTimeoutMax;
+	uint8_t ChipEraseTimeoutMax;
+	uint8_t DevSize;
+	uint16_t InterfaceDesc;
+	uint16_t MaxBufWriteSize;
+	uint8_t NumEraseRegions;
+	uint32_t EraseRegionInfo[0];
+} __attribute__((packed));
+
+struct cfi_private {
+	uint16_t cmdset;
+	void *cmdset_priv;
+	int interleave;
+	int device_type;
+	int cfi_mode;
+	int addr_unlock1;
+	int addr_unlock2;
+	struct mtd_info * (*cmdset_setup)(struct map_info___2 *);
+	struct cfi_ident *cfiq;
+	int mfr;
+	int id;
+	int numchips;
+	map_word sector_erase_cmd;
+	long unsigned int chipshift;
+	const char *im_name;
+	long unsigned int quirks;
+	struct flchip chips[0];
+};
+
+struct chip_probe {
+	char *name;
+	int (*probe_chip)(struct map_info___2 *, __u32, long unsigned int *, struct cfi_private *);
+};
+
+struct cfi_early_fixup {
+	uint16_t mfr;
+	uint16_t id;
+	void (*fixup)(struct cfi_private *);
+};
+
+struct cfi_extquery {
+	uint8_t pri[3];
+	uint8_t MajorVersion;
+	uint8_t MinorVersion;
+};
+
+struct cfi_fixup {
+	uint16_t mfr;
+	uint16_t id;
+	void (*fixup)(struct mtd_info *);
+};
+
+typedef int (*varsize_frob_t)(struct map_info___2 *, struct flchip *, long unsigned int, int, void *);
+
+struct cfi_pri_intelext {
+	uint8_t pri[3];
+	uint8_t MajorVersion;
+	uint8_t MinorVersion;
+	uint32_t FeatureSupport;
+	uint8_t SuspendCmdSupport;
+	uint16_t BlkStatusRegMask;
+	uint8_t VccOptimal;
+	uint8_t VppOptimal;
+	uint8_t NumProtectionFields;
+	uint16_t ProtRegAddr;
+	uint8_t FactProtRegSize;
+	uint8_t UserProtRegSize;
+	uint8_t extra[0];
+} __attribute__((packed));
+
+struct flchip_shared {
+	struct mutex lock;
+	struct flchip *writing;
+	struct flchip *erasing;
+};
+
+struct cfi_intelext_blockinfo {
+	uint16_t NumIdentBlocks;
+	uint16_t BlockSize;
+	uint16_t MinBlockEraseCycles;
+	uint8_t BitsPerCell;
+	uint8_t BlockCap;
+};
+
+struct cfi_intelext_regioninfo {
+	uint16_t NumIdentPartitions;
+	uint8_t NumOpAllowed;
+	uint8_t NumOpAllowedSimProgMode;
+	uint8_t NumOpAllowedSimEraMode;
+	uint8_t NumBlockTypes;
+	struct cfi_intelext_blockinfo BlockTypes[1];
+};
+
+struct cfi_intelext_programming_regioninfo {
+	uint8_t ProgRegShift;
+	uint8_t Reserved1;
+	uint8_t ControlValid;
+	uint8_t Reserved2;
+	uint8_t ControlInvalid;
+	uint8_t Reserved3;
+};
+
+struct cfi_pri_atmel {
+	uint8_t pri[3];
+	uint8_t MajorVersion;
+	uint8_t MinorVersion;
+	uint8_t Features;
+	uint8_t BottomBoot;
+	uint8_t BurstMode;
+	uint8_t PageMode;
+};
+
+enum fwh_lock_state {
+	FWH_UNLOCKED = 0,
+	FWH_DENY_WRITE = 1,
+	FWH_IMMUTABLE = 2,
+	FWH_DENY_READ = 4,
+};
+
+struct fwh_xxlock_thunk {
+	enum fwh_lock_state val;
+	flstate_t state;
+};
+
+struct physmap_flash_data {
+	unsigned int width;
+	int (*init)(struct platform_device *);
+	void (*exit)(struct platform_device *);
+	void (*set_vpp)(struct platform_device *, int);
+	unsigned int nr_parts;
+	unsigned int pfow_base;
+	char *probe_type;
+	struct mtd_partition *parts;
+	const char * const *part_probe_types;
+};
+
+struct physmap_flash_info {
+	unsigned int nmaps;
+	struct mtd_info **mtds;
+	struct mtd_info *cmtd;
+	struct map_info___2 *maps;
+	spinlock_t vpp_lock;
+	int vpp_refcnt;
+	const char *probe_type;
+	const char * const *part_types;
+	unsigned int nparts;
+	const struct mtd_partition *parts;
+	struct gpio_descs *gpios;
+	unsigned int gpio_values;
+	unsigned int win_order;
+};
+
+struct cfi_pri_amdstd {
+	uint8_t pri[3];
+	uint8_t MajorVersion;
+	uint8_t MinorVersion;
+	uint8_t SiliconRevision;
+	uint8_t EraseSuspend;
+	uint8_t BlkProt;
+	uint8_t TmpBlkUnprotect;
+	uint8_t BlkProtUnprot;
+	uint8_t SimultaneousOps;
+	uint8_t BurstMode;
+	uint8_t PageMode;
+	uint8_t VppMin;
+	uint8_t VppMax;
+	uint8_t TopBottom;
+	uint8_t ProgramSuspend;
+	uint8_t UnlockBypass;
+	uint8_t SecureSiliconSector;
+	uint8_t SoftwareFeatures;
+};
+
+enum cfi_quirks {
+	CFI_QUIRK_DQ_TRUE_DATA = 1,
+};
+
+typedef int (*otp_op_t)(struct map_info___2 *, struct flchip *, loff_t, size_t, u_char *, size_t);
+
+struct ppb_lock {
+	struct flchip *chip;
+	long unsigned int adr;
+	int locked;
+};
+
+typedef struct mtd_info *cfi_cmdset_fn_t(struct map_info___2 *, int);
+
+struct spi_statistics {
+	struct u64_stats_sync syncp;
+	u64_stats_t messages;
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t timedout;
+	u64_stats_t spi_sync;
+	u64_stats_t spi_sync_immediate;
+	u64_stats_t spi_async;
+	u64_stats_t bytes;
+	u64_stats_t bytes_rx;
+	u64_stats_t bytes_tx;
+	u64_stats_t transfer_bytes_histo[17];
+	u64_stats_t transfers_split_maxsize;
+};
+
+struct spi_delay {
+	u16 value;
+	u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics *pcpu_statistics;
+};
+
+struct spi_message;
+
+struct spi_transfer;
+
+struct spi_controller_mem_ops;
+
+struct spi_controller_mem_caps;
+
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	union {
+		bool slave;
+		bool target;
+	};
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
+	struct device *cur_rx_dma_dev;
+	struct device *cur_tx_dma_dev;
+	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	struct completion cur_msg_completion;
+	bool cur_msg_incomplete;
+	bool cur_msg_need_completion;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	union {
+		int (*slave_abort)(struct spi_controller *);
+		int (*target_abort)(struct spi_controller *);
+	};
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics *pcpu_statistics;
+	struct dma_chan *dma_tx;
+	struct dma_chan *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	long unsigned int irq_flags;
+	bool queue_empty;
+	bool must_async;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	int status;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+	bool prepared;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_off: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	bool timestamped;
+	struct list_head transfer_list;
+	u16 error;
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+enum spi_mem_data_dir {
+	SPI_MEM_NO_DATA = 0,
+	SPI_MEM_DATA_IN = 1,
+	SPI_MEM_DATA_OUT = 2,
+};
+
+struct spi_mem_op {
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u16 opcode;
+	} cmd;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u64 val;
+	} addr;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+	} dummy;
+	struct {
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 ecc: 1;
+		enum spi_mem_data_dir dir;
+		unsigned int nbytes;
+		union {
+			void *in;
+			const void *out;
+		} buf;
+	} data;
+};
+
+struct spi_mem_dirmap_info {
+	struct spi_mem_op op_tmpl;
+	u64 offset;
+	u64 length;
+};
+
+struct spi_mem_dirmap_desc {
+	struct spi_mem *mem;
+	struct spi_mem_dirmap_info info;
+	unsigned int nodirmap;
+	void *priv;
+};
+
+struct spi_mem {
+	struct spi_device *spi;
+	void *drvpriv;
+	const char *name;
+};
+
+enum spi_nor_protocol {
+	SNOR_PROTO_1_1_1 = 65793,
+	SNOR_PROTO_1_1_2 = 65794,
+	SNOR_PROTO_1_1_4 = 65796,
+	SNOR_PROTO_1_1_8 = 65800,
+	SNOR_PROTO_1_2_2 = 66050,
+	SNOR_PROTO_1_4_4 = 66564,
+	SNOR_PROTO_1_8_8 = 67592,
+	SNOR_PROTO_2_2_2 = 131586,
+	SNOR_PROTO_4_4_4 = 263172,
+	SNOR_PROTO_8_8_8 = 526344,
+	SNOR_PROTO_1_1_1_DTR = 16843009,
+	SNOR_PROTO_1_2_2_DTR = 16843266,
+	SNOR_PROTO_1_4_4_DTR = 16843780,
+	SNOR_PROTO_1_8_8_DTR = 16844808,
+	SNOR_PROTO_8_8_8_DTR = 17303560,
+};
+
+struct spi_nor_hwcaps {
+	u32 mask;
+};
+
+struct spi_nor;
+
+struct spi_nor_controller_ops {
+	int (*prepare)(struct spi_nor *);
+	void (*unprepare)(struct spi_nor *);
+	int (*read_reg)(struct spi_nor *, u8, u8 *, size_t);
+	int (*write_reg)(struct spi_nor *, u8, const u8 *, size_t);
+	ssize_t (*read)(struct spi_nor *, loff_t, size_t, u8 *);
+	ssize_t (*write)(struct spi_nor *, loff_t, size_t, const u8 *);
+	int (*erase)(struct spi_nor *, loff_t);
+};
+
+enum spi_nor_cmd_ext {
+	SPI_NOR_EXT_NONE = 0,
+	SPI_NOR_EXT_REPEAT = 1,
+	SPI_NOR_EXT_INVERT = 2,
+	SPI_NOR_EXT_HEX = 3,
+};
+
+struct flash_info;
+
+struct spi_nor_manufacturer;
+
+struct sfdp;
+
+struct spi_nor_flash_parameter;
+
+struct spi_nor {
+	struct mtd_info mtd;
+	struct mutex lock;
+	struct device *dev;
+	struct spi_mem *spimem;
+	u8 *bouncebuf;
+	size_t bouncebuf_size;
+	u8 *id;
+	const struct flash_info *info;
+	const struct spi_nor_manufacturer *manufacturer;
+	u8 addr_nbytes;
+	u8 erase_opcode;
+	u8 read_opcode;
+	u8 read_dummy;
+	u8 program_opcode;
+	enum spi_nor_protocol read_proto;
+	enum spi_nor_protocol write_proto;
+	enum spi_nor_protocol reg_proto;
+	bool sst_write_second;
+	u32 flags;
+	enum spi_nor_cmd_ext cmd_ext_type;
+	struct sfdp *sfdp;
+	struct dentry *debugfs_root;
+	const struct spi_nor_controller_ops *controller_ops;
+	struct spi_nor_flash_parameter *params;
+	struct {
+		struct spi_mem_dirmap_desc *rdesc;
+		struct spi_mem_dirmap_desc *wdesc;
+	} dirmap;
+	void *priv;
+};
+
+struct spi_nor_otp_organization {
+	size_t len;
+	loff_t base;
+	loff_t offset;
+	unsigned int n_regions;
+};
+
+struct spi_nor_fixups;
+
+struct flash_info {
+	char *name;
+	u8 id[6];
+	u8 id_len;
+	unsigned int sector_size;
+	u16 n_sectors;
+	u16 page_size;
+	u8 addr_nbytes;
+	bool parse_sfdp;
+	u16 flags;
+	u8 no_sfdp_flags;
+	u8 fixup_flags;
+	u8 mfr_flags;
+	const struct spi_nor_otp_organization otp_org;
+	const struct spi_nor_fixups *fixups;
+};
+
+struct spi_nor_manufacturer {
+	const char *name;
+	const struct flash_info *parts;
+	unsigned int nparts;
+	const struct spi_nor_fixups *fixups;
+};
+
+struct sfdp {
+	size_t num_dwords;
+	u32 *dwords;
+};
+
+struct spi_nor_read_command {
+	u8 num_mode_clocks;
+	u8 num_wait_states;
+	u8 opcode;
+	enum spi_nor_protocol proto;
+};
+
+struct spi_nor_pp_command {
+	u8 opcode;
+	enum spi_nor_protocol proto;
+};
+
+struct spi_nor_erase_region {
+	u64 offset;
+	u64 size;
+};
+
+struct spi_nor_erase_type {
+	u32 size;
+	u32 size_shift;
+	u32 size_mask;
+	u8 opcode;
+	u8 idx;
+};
+
+struct spi_nor_erase_map {
+	struct spi_nor_erase_region *regions;
+	struct spi_nor_erase_region uniform_region;
+	struct spi_nor_erase_type erase_type[4];
+	u8 uniform_erase_type;
+};
+
+struct spi_nor_otp_ops;
+
+struct spi_nor_otp {
+	const struct spi_nor_otp_organization *org;
+	const struct spi_nor_otp_ops *ops;
+};
+
+struct spi_nor_locking_ops;
+
+struct spi_nor_flash_parameter {
+	u64 size;
+	u32 writesize;
+	u32 page_size;
+	u8 addr_nbytes;
+	u8 addr_mode_nbytes;
+	u8 rdsr_dummy;
+	u8 rdsr_addr_nbytes;
+	struct spi_nor_hwcaps hwcaps;
+	struct spi_nor_read_command reads[16];
+	struct spi_nor_pp_command page_programs[8];
+	struct spi_nor_erase_map erase_map;
+	struct spi_nor_otp otp;
+	int (*octal_dtr_enable)(struct spi_nor *, bool);
+	int (*quad_enable)(struct spi_nor *);
+	int (*set_4byte_addr_mode)(struct spi_nor *, bool);
+	u32 (*convert_addr)(struct spi_nor *, u32);
+	int (*setup)(struct spi_nor *, const struct spi_nor_hwcaps *);
+	int (*ready)(struct spi_nor *);
+	const struct spi_nor_locking_ops *locking_ops;
+};
+
+struct sfdp_bfpt {
+	u32 dwords[20];
+};
+
+struct sfdp_parameter_header {
+	u8 id_lsb;
+	u8 minor;
+	u8 major;
+	u8 length;
+	u8 parameter_table_pointer[3];
+	u8 id_msb;
+};
+
+enum spi_nor_option_flags {
+	SNOR_F_HAS_SR_TB = 1,
+	SNOR_F_NO_OP_CHIP_ERASE = 2,
+	SNOR_F_BROKEN_RESET = 4,
+	SNOR_F_4B_OPCODES = 8,
+	SNOR_F_HAS_4BAIT = 16,
+	SNOR_F_HAS_LOCK = 32,
+	SNOR_F_HAS_16BIT_SR = 64,
+	SNOR_F_NO_READ_CR = 128,
+	SNOR_F_HAS_SR_TB_BIT6 = 256,
+	SNOR_F_HAS_4BIT_BP = 512,
+	SNOR_F_HAS_SR_BP3_BIT6 = 1024,
+	SNOR_F_IO_MODE_EN_VOLATILE = 2048,
+	SNOR_F_SOFT_RESET = 4096,
+	SNOR_F_SWP_IS_VOLATILE = 8192,
+};
+
+enum spi_nor_read_command_index {
+	SNOR_CMD_READ = 0,
+	SNOR_CMD_READ_FAST = 1,
+	SNOR_CMD_READ_1_1_1_DTR = 2,
+	SNOR_CMD_READ_1_1_2 = 3,
+	SNOR_CMD_READ_1_2_2 = 4,
+	SNOR_CMD_READ_2_2_2 = 5,
+	SNOR_CMD_READ_1_2_2_DTR = 6,
+	SNOR_CMD_READ_1_1_4 = 7,
+	SNOR_CMD_READ_1_4_4 = 8,
+	SNOR_CMD_READ_4_4_4 = 9,
+	SNOR_CMD_READ_1_4_4_DTR = 10,
+	SNOR_CMD_READ_1_1_8 = 11,
+	SNOR_CMD_READ_1_8_8 = 12,
+	SNOR_CMD_READ_8_8_8 = 13,
+	SNOR_CMD_READ_1_8_8_DTR = 14,
+	SNOR_CMD_READ_8_8_8_DTR = 15,
+	SNOR_CMD_READ_MAX = 16,
+};
+
+enum spi_nor_pp_command_index {
+	SNOR_CMD_PP = 0,
+	SNOR_CMD_PP_1_1_4 = 1,
+	SNOR_CMD_PP_1_4_4 = 2,
+	SNOR_CMD_PP_4_4_4 = 3,
+	SNOR_CMD_PP_1_1_8 = 4,
+	SNOR_CMD_PP_1_8_8 = 5,
+	SNOR_CMD_PP_8_8_8 = 6,
+	SNOR_CMD_PP_8_8_8_DTR = 7,
+	SNOR_CMD_PP_MAX = 8,
+};
+
+struct spi_nor_locking_ops {
+	int (*lock)(struct spi_nor *, loff_t, uint64_t);
+	int (*unlock)(struct spi_nor *, loff_t, uint64_t);
+	int (*is_locked)(struct spi_nor *, loff_t, uint64_t);
+};
+
+struct spi_nor_otp_ops {
+	int (*read)(struct spi_nor *, loff_t, size_t, u8 *);
+	int (*write)(struct spi_nor *, loff_t, size_t, const u8 *);
+	int (*lock)(struct spi_nor *, unsigned int);
+	int (*erase)(struct spi_nor *, loff_t);
+	int (*is_locked)(struct spi_nor *, unsigned int);
+};
+
+struct spi_nor_fixups {
+	void (*default_init)(struct spi_nor *);
+	int (*post_bfpt)(struct spi_nor *, const struct sfdp_parameter_header *, const struct sfdp_bfpt *);
+	void (*post_sfdp)(struct spi_nor *);
+	void (*late_init)(struct spi_nor *);
+};
+
+struct sfdp_header {
+	u32 signature;
+	u8 minor;
+	u8 major;
+	u8 nph;
+	u8 unused;
+	struct sfdp_parameter_header bfpt_header;
+};
+
+struct sfdp_bfpt_read {
+	u32 hwcaps;
+	u32 supported_dword;
+	u32 supported_bit;
+	u32 settings_dword;
+	u32 settings_shift;
+	enum spi_nor_protocol proto;
+};
+
+struct sfdp_bfpt_erase {
+	u32 dword;
+	u32 shift;
+};
+
+struct sfdp_4bait {
+	u32 hwcaps;
+	u32 supported_bit;
+};
+
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct mtd_partition;
+
+struct flash_platform_data {
+	char *name;
+	struct mtd_partition *parts;
+	unsigned int nr_parts;
+	char *type;
+};
+
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+};
+
+struct spi_mem_driver {
+	struct spi_driver spidrv;
+	int (*probe)(struct spi_mem *);
+	int (*remove)(struct spi_mem *);
+	void (*shutdown)(struct spi_mem *);
+};
+
+struct spi_nor_erase_command {
+	struct list_head list;
+	u32 count;
+	u32 size;
+	u8 opcode;
+};
+
+struct mtd_part_parser_data;
+
+struct spi_ioc_transfer {
+	__u64 tx_buf;
+	__u64 rx_buf;
+	__u32 len;
+	__u32 speed_hz;
+	__u16 delay_usecs;
+	__u8 bits_per_word;
+	__u8 cs_change;
+	__u8 tx_nbits;
+	__u8 rx_nbits;
+	__u8 word_delay_usecs;
+	__u8 pad;
+};
+
+struct spidev_data {
+	dev_t devt;
+	struct mutex spi_lock;
+	struct spi_device *spi;
+	struct list_head device_entry;
+	struct mutex buf_lock;
+	unsigned int users;
+	u8 *tx_buffer;
+	u8 *rx_buffer;
+	u32 speed_hz;
+};
+
+typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
+
+struct spi_res {
+	struct list_head entry;
+	spi_res_release_t release;
+	long long unsigned int data[0];
+};
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct spi_replaced_transfers;
+
+typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
+
+struct spi_replaced_transfers {
+	spi_replaced_release_t release;
+	void *extradata;
+	struct list_head replaced_transfers;
+	struct list_head *replaced_after;
+	size_t inserted;
+	struct spi_transfer inserted_transfers[0];
+};
+
+struct spi_board_info {
+	char modalias[32];
+	const void *platform_data;
+	const struct software_node *swnode;
+	void *controller_data;
+	int irq;
+	u32 max_speed_hz;
+	u16 bus_num;
+	u16 chip_select;
+	u32 mode;
+};
+
+struct trace_event_raw_spi_controller {
+	struct trace_entry ent;
+	int bus_num;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	bool enable;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message_done {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	unsigned int frame;
+	unsigned int actual;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_transfer {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_transfer *xfer;
+	int len;
+	u32 __data_loc_rx_buf;
+	u32 __data_loc_tx_buf;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_spi_controller {};
+
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
+struct trace_event_data_offsets_spi_message {};
+
+struct trace_event_data_offsets_spi_message_done {};
+
+struct trace_event_data_offsets_spi_transfer {
+	u32 rx_buf;
+	u32 tx_buf;
+};
+
+typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
+typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
+
+typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
+
+struct boardinfo {
+	struct list_head list;
+	struct spi_board_info board_info;
+};
+
+struct sifive_spi {
+	void *regs;
+	struct clk *clk;
+	unsigned int fifo_depth;
+	u32 cs_inactive;
+	struct completion done;
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable **nhc_pcpu_rth_output;
+	struct rtable *nhc_rth_input;
+	struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	struct rt6_info **rt6i_pcpu;
+	struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info *fib6_next;
+	struct fib6_node *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	long unsigned int expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct uncached_list;
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	struct list_head rt6i_uncached;
+	struct uncached_list *rt6i_uncached_list;
+	short unsigned int rt6i_nfheader_len;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct fib6_node {
+	struct fib6_node *parent;
+	struct fib6_node *left;
+	struct fib6_node *right;
+	struct fib6_info *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info *rr_ptr;
+	struct callback_head rcu;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+enum ipvlan_mode {
+	IPVLAN_MODE_L2 = 0,
+	IPVLAN_MODE_L3 = 1,
+	IPVLAN_MODE_L3S = 2,
+	IPVLAN_MODE_MAX = 3,
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		};
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		} addrs;
+	};
+};
+
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	union {
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		};
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		} addrs;
+	};
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	long unsigned int fnhe_expires;
+	struct rtable *fnhe_rth_input;
+	struct rtable *fnhe_rth_output;
+	long unsigned int fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+};
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception *chain;
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info *nh_info;
+		struct nh_group *nh_grp;
+	};
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct nh_grp_entry;
+
+struct nh_res_bucket {
+	struct nh_grp_entry *nh_entry;
+	atomic_long_t used_time;
+	long unsigned int migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	long unsigned int unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+typedef enum {
+	IPVL_IPV6 = 0,
+	IPVL_ICMPV6 = 1,
+	IPVL_IPV4 = 2,
+	IPVL_ARP = 3,
+} ipvl_hdr_type;
+
+struct ipvl_pcpu_stats {
+	u64_stats_t rx_pkts;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_mcast;
+	u64_stats_t tx_pkts;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errs;
+	u32 tx_drps;
+};
+
+struct ipvl_port;
+
+struct ipvl_dev {
+	struct net_device *dev;
+	struct list_head pnode;
+	struct ipvl_port *port;
+	struct net_device *phy_dev;
+	struct list_head addrs;
+	struct ipvl_pcpu_stats *pcpu_stats;
+	long unsigned int mac_filters[4];
+	netdev_features_t sfeatures;
+	u32 msg_enable;
+	spinlock_t addrs_lock;
+};
+
+struct ipvl_port {
+	struct net_device *dev;
+	possible_net_t pnet;
+	struct hlist_head hlhead[256];
+	struct list_head ipvlans;
+	u16 mode;
+	u16 flags;
+	u16 dev_id_start;
+	struct work_struct wq;
+	struct sk_buff_head backlog;
+	int count;
+	struct ida ida;
+	netdevice_tracker dev_tracker;
+};
+
+struct ipvl_addr {
+	struct ipvl_dev *master;
+	union {
+		struct in6_addr ip6;
+		struct in_addr ip4;
+	} ipu;
+	struct hlist_node hlnode;
+	struct list_head anode;
+	ipvl_hdr_type atype;
+	struct callback_head rcu;
+};
+
+struct ipvl_skb_cb {
+	bool tx_pkt;
+};
+
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+};
+
+struct nf_hook_ops {
+	nf_hookfn *hook;
+	struct net_device *dev;
+	void *priv;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
+	unsigned int hooknum;
+	int priority;
+};
+
+struct ipvlan_netns {
+	unsigned int ipvl_nf_hook_refcnt;
+};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+struct ethtool_drvinfo {
+	__u32 cmd;
+	char driver[32];
+	char version[32];
+	char fw_version[32];
+	char bus_info[32];
+	char erom_version[32];
+	char reserved2[12];
+	__u32 n_priv_flags;
+	__u32 n_stats;
+	__u32 testinfo_len;
+	__u32 eedump_len;
+	__u32 regdump_len;
+};
+
+struct ethtool_wolinfo {
+	__u32 cmd;
+	__u32 supported;
+	__u32 wolopts;
+	__u8 sopass[6];
+};
+
+struct ethtool_tunable {
+	__u32 cmd;
+	__u32 id;
+	__u32 type_id;
+	__u32 len;
+	void *data[0];
+};
+
+struct ethtool_regs {
+	__u32 cmd;
+	__u32 version;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eeprom {
+	__u32 cmd;
+	__u32 magic;
+	__u32 offset;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eee {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertised;
+	__u32 lp_advertised;
+	__u32 eee_active;
+	__u32 eee_enabled;
+	__u32 tx_lpi_enabled;
+	__u32 tx_lpi_timer;
+	__u32 reserved[2];
+};
+
+struct ethtool_modinfo {
+	__u32 cmd;
+	__u32 type;
+	__u32 eeprom_len;
+	__u32 reserved[8];
+};
+
+struct ethtool_coalesce {
+	__u32 cmd;
+	__u32 rx_coalesce_usecs;
+	__u32 rx_max_coalesced_frames;
+	__u32 rx_coalesce_usecs_irq;
+	__u32 rx_max_coalesced_frames_irq;
+	__u32 tx_coalesce_usecs;
+	__u32 tx_max_coalesced_frames;
+	__u32 tx_coalesce_usecs_irq;
+	__u32 tx_max_coalesced_frames_irq;
+	__u32 stats_block_coalesce_usecs;
+	__u32 use_adaptive_rx_coalesce;
+	__u32 use_adaptive_tx_coalesce;
+	__u32 pkt_rate_low;
+	__u32 rx_coalesce_usecs_low;
+	__u32 rx_max_coalesced_frames_low;
+	__u32 tx_coalesce_usecs_low;
+	__u32 tx_max_coalesced_frames_low;
+	__u32 pkt_rate_high;
+	__u32 rx_coalesce_usecs_high;
+	__u32 rx_max_coalesced_frames_high;
+	__u32 tx_coalesce_usecs_high;
+	__u32 tx_max_coalesced_frames_high;
+	__u32 rate_sample_interval;
+};
+
+struct ethtool_ringparam {
+	__u32 cmd;
+	__u32 rx_max_pending;
+	__u32 rx_mini_max_pending;
+	__u32 rx_jumbo_max_pending;
+	__u32 tx_max_pending;
+	__u32 rx_pending;
+	__u32 rx_mini_pending;
+	__u32 rx_jumbo_pending;
+	__u32 tx_pending;
+};
+
+struct ethtool_channels {
+	__u32 cmd;
+	__u32 max_rx;
+	__u32 max_tx;
+	__u32 max_other;
+	__u32 max_combined;
+	__u32 rx_count;
+	__u32 tx_count;
+	__u32 other_count;
+	__u32 combined_count;
+};
+
+struct ethtool_pauseparam {
+	__u32 cmd;
+	__u32 autoneg;
+	__u32 rx_pause;
+	__u32 tx_pause;
+};
+
+enum ethtool_link_ext_state {
+	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
+	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
+	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
+	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
+	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
+	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
+	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
+	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
+	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
+	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
+};
+
+enum ethtool_link_ext_substate_autoneg {
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
+};
+
+enum ethtool_link_ext_substate_link_training {
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
+};
+
+enum ethtool_link_ext_substate_link_logical_mismatch {
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
+};
+
+enum ethtool_link_ext_substate_bad_signal_integrity {
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
+};
+
+enum ethtool_link_ext_substate_cable_issue {
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
+};
+
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+struct ethtool_test {
+	__u32 cmd;
+	__u32 flags;
+	__u32 reserved;
+	__u32 len;
+	__u64 data[0];
+};
+
+struct ethtool_stats {
+	__u32 cmd;
+	__u32 n_stats;
+	__u64 data[0];
+};
+
+struct ethtool_tcpip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 spi;
+	__u8 tos;
+};
+
+struct ethtool_usrip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 l4_4_bytes;
+	__u8 tos;
+	__u8 ip_ver;
+	__u8 proto;
+};
+
+struct ethtool_tcpip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tclass;
+};
+
+struct ethtool_ah_espip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 spi;
+	__u8 tclass;
+};
+
+struct ethtool_usrip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 l4_4_bytes;
+	__u8 tclass;
+	__u8 l4_proto;
+};
+
+union ethtool_flow_union {
+	struct ethtool_tcpip4_spec tcp_ip4_spec;
+	struct ethtool_tcpip4_spec udp_ip4_spec;
+	struct ethtool_tcpip4_spec sctp_ip4_spec;
+	struct ethtool_ah_espip4_spec ah_ip4_spec;
+	struct ethtool_ah_espip4_spec esp_ip4_spec;
+	struct ethtool_usrip4_spec usr_ip4_spec;
+	struct ethtool_tcpip6_spec tcp_ip6_spec;
+	struct ethtool_tcpip6_spec udp_ip6_spec;
+	struct ethtool_tcpip6_spec sctp_ip6_spec;
+	struct ethtool_ah_espip6_spec ah_ip6_spec;
+	struct ethtool_ah_espip6_spec esp_ip6_spec;
+	struct ethtool_usrip6_spec usr_ip6_spec;
+	struct ethhdr ether_spec;
+	__u8 hdata[52];
+};
+
+struct ethtool_flow_ext {
+	__u8 padding[2];
+	unsigned char h_dest[6];
+	__be16 vlan_etype;
+	__be16 vlan_tci;
+	__be32 data[2];
+};
+
+struct ethtool_rx_flow_spec {
+	__u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	__u64 ring_cookie;
+	__u32 location;
+};
+
+struct ethtool_rxnfc {
+	__u32 cmd;
+	__u32 flow_type;
+	__u64 data;
+	struct ethtool_rx_flow_spec fs;
+	union {
+		__u32 rule_cnt;
+		__u32 rss_context;
+	};
+	__u32 rule_locs[0];
+};
+
+struct ethtool_flash {
+	__u32 cmd;
+	__u32 region;
+	char data[128];
+};
+
+struct ethtool_dump {
+	__u32 cmd;
+	__u32 version;
+	__u32 flag;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_ts_info {
+	__u32 cmd;
+	__u32 so_timestamping;
+	__s32 phc_index;
+	__u32 tx_types;
+	__u32 tx_reserved[3];
+	__u32 rx_filters;
+	__u32 rx_reserved[3];
+};
+
+struct ethtool_fecparam {
+	__u32 cmd;
+	__u32 active_fec;
+	__u32 fec;
+	__u32 reserved;
+};
+
+struct ethtool_link_settings {
+	__u32 cmd;
+	__u32 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__s8 link_mode_masks_nwords;
+	__u8 transceiver;
+	__u8 master_slave_cfg;
+	__u8 master_slave_state;
+	__u8 rate_matching;
+	__u32 reserved[7];
+	__u32 link_mode_masks[0];
+};
+
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u32 cqe_size;
+};
+
+struct ethtool_link_ext_state_info {
+	enum ethtool_link_ext_state link_ext_state;
+	union {
+		enum ethtool_link_ext_substate_autoneg autoneg;
+		enum ethtool_link_ext_substate_link_training link_training;
+		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
+		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
+		enum ethtool_link_ext_substate_cable_issue cable_issue;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
+	};
+};
+
+struct ethtool_link_ext_stats {
+	u64 link_down_events;
+};
+
+struct ethtool_link_ksettings {
+	struct ethtool_link_settings base;
+	struct {
+		long unsigned int supported[2];
+		long unsigned int advertising[2];
+		long unsigned int lp_advertising[2];
+	} link_modes;
+	u32 lanes;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+};
+
+struct ethtool_eth_mac_stats {
+	u64 FramesTransmittedOK;
+	u64 SingleCollisionFrames;
+	u64 MultipleCollisionFrames;
+	u64 FramesReceivedOK;
+	u64 FrameCheckSequenceErrors;
+	u64 AlignmentErrors;
+	u64 OctetsTransmittedOK;
+	u64 FramesWithDeferredXmissions;
+	u64 LateCollisions;
+	u64 FramesAbortedDueToXSColls;
+	u64 FramesLostDueToIntMACXmitError;
+	u64 CarrierSenseErrors;
+	u64 OctetsReceivedOK;
+	u64 FramesLostDueToIntMACRcvError;
+	u64 MulticastFramesXmittedOK;
+	u64 BroadcastFramesXmittedOK;
+	u64 FramesWithExcessiveDeferral;
+	u64 MulticastFramesReceivedOK;
+	u64 BroadcastFramesReceivedOK;
+	u64 InRangeLengthErrors;
+	u64 OutOfRangeLengthField;
+	u64 FrameTooLongErrors;
+};
+
+struct ethtool_eth_phy_stats {
+	u64 SymbolErrorDuringCarrier;
+};
+
+struct ethtool_eth_ctrl_stats {
+	u64 MACControlFramesTransmitted;
+	u64 MACControlFramesReceived;
+	u64 UnsupportedOpcodesReceived;
+};
+
+struct ethtool_pause_stats {
+	u64 tx_pause_frames;
+	u64 rx_pause_frames;
+};
+
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
+};
+
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
+};
+
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
+};
+
+struct ethtool_rmon_stats {
+	u64 undersize_pkts;
+	u64 oversize_pkts;
+	u64 fragments;
+	u64 jabbers;
+	u64 hist[10];
+	u64 hist_tx[10];
+};
+
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
+};
+
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	IFLA_ALLMULTI = 61,
+	IFLA_DEVLINK_PORT = 62,
+	__IFLA_MAX = 63,
+};
+
+enum {
+	IFLA_IPVLAN_UNSPEC = 0,
+	IFLA_IPVLAN_MODE = 1,
+	IFLA_IPVLAN_FLAGS = 2,
+	__IFLA_IPVLAN_MAX = 3,
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+	struct netdev_notifier_info info;
+	const unsigned char *dev_addr;
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+enum noise_lengths {
+	NOISE_PUBLIC_KEY_LEN = 32,
+	NOISE_SYMMETRIC_KEY_LEN = 32,
+	NOISE_TIMESTAMP_LEN = 12,
+	NOISE_AUTHTAG_LEN = 16,
+	NOISE_HASH_LEN = 32,
+};
+
+enum limits {
+	REKEY_AFTER_MESSAGES = 0,
+	REJECT_AFTER_MESSAGES = 4294959166,
+	REKEY_TIMEOUT = 5,
+	REKEY_TIMEOUT_JITTER_MAX_JIFFIES = 83,
+	REKEY_AFTER_TIME = 120,
+	REJECT_AFTER_TIME = 180,
+	INITIATIONS_PER_SECOND = 50,
+	MAX_PEERS_PER_DEVICE = 1048576,
+	KEEPALIVE_TIMEOUT = 10,
+	MAX_TIMER_HANDSHAKES = 18,
+	MAX_QUEUED_INCOMING_HANDSHAKES = 4096,
+	MAX_STAGED_PACKETS = 128,
+	MAX_QUEUED_PACKETS = 1024,
+};
+
+enum message_type {
+	MESSAGE_INVALID = 0,
+	MESSAGE_HANDSHAKE_INITIATION = 1,
+	MESSAGE_HANDSHAKE_RESPONSE = 2,
+	MESSAGE_HANDSHAKE_COOKIE = 3,
+	MESSAGE_DATA = 4,
+};
+
+struct message_header {
+	__le32 type;
+};
+
+struct message_macs {
+	u8 mac1[16];
+	u8 mac2[16];
+};
+
+struct message_handshake_initiation {
+	struct message_header header;
+	__le32 sender_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_static[48];
+	u8 encrypted_timestamp[28];
+	struct message_macs macs;
+};
+
+struct message_handshake_response {
+	struct message_header header;
+	__le32 sender_index;
+	__le32 receiver_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_nothing[16];
+	struct message_macs macs;
+};
+
+struct pubkey_hashtable {
+	struct hlist_head hashtable[2048];
+	siphash_key_t key;
+	struct mutex lock;
+};
+
+struct index_hashtable {
+	struct hlist_head hashtable[8192];
+	spinlock_t lock;
+};
+
+enum index_hashtable_type {
+	INDEX_HASHTABLE_HANDSHAKE = 1,
+	INDEX_HASHTABLE_KEYPAIR = 2,
+};
+
+struct wg_peer;
+
+struct index_hashtable_entry {
+	struct wg_peer *peer;
+	struct hlist_node index_hash;
+	enum index_hashtable_type type;
+	__le32 index;
+};
+
+struct prev_queue {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct sk_buff *peeked;
+	struct {
+		struct sk_buff *next;
+		struct sk_buff *prev;
+	} empty;
+	atomic_t count;
+};
+
+struct noise_keypair;
+
+struct noise_keypairs {
+	struct noise_keypair *current_keypair;
+	struct noise_keypair *previous_keypair;
+	struct noise_keypair *next_keypair;
+	spinlock_t keypair_update_lock;
+};
+
+struct endpoint {
+	union {
+		struct sockaddr addr;
+		struct sockaddr_in addr4;
+		struct sockaddr_in6 addr6;
+	};
+	union {
+		struct {
+			struct in_addr src4;
+			int src_if4;
+		};
+		struct in6_addr src6;
+	};
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu *cache;
+	long unsigned int reset_ts;
+};
+
+enum noise_handshake_state {
+	HANDSHAKE_ZEROED = 0,
+	HANDSHAKE_CREATED_INITIATION = 1,
+	HANDSHAKE_CONSUMED_INITIATION = 2,
+	HANDSHAKE_CREATED_RESPONSE = 3,
+	HANDSHAKE_CONSUMED_RESPONSE = 4,
+};
+
+struct noise_static_identity;
+
+struct noise_handshake {
+	struct index_hashtable_entry entry;
+	enum noise_handshake_state state;
+	u64 last_initiation_consumption;
+	struct noise_static_identity *static_identity;
+	u8 ephemeral_private[32];
+	u8 remote_static[32];
+	u8 remote_ephemeral[32];
+	u8 precomputed_static_static[32];
+	u8 preshared_key[32];
+	u8 hash[32];
+	u8 chaining_key[32];
+	u8 latest_timestamp[12];
+	__le32 remote_index;
+	struct rw_semaphore lock;
+};
+
+struct cookie {
+	u64 birthdate;
+	bool is_valid;
+	u8 cookie[16];
+	bool have_sent_mac1;
+	u8 last_mac1_sent[16];
+	u8 cookie_decryption_key[32];
+	u8 message_mac1_key[32];
+	struct rw_semaphore lock;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	long unsigned int state;
+	int weight;
+	int defer_hard_irqs_count;
+	long unsigned int gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int poll_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	struct hrtimer timer;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	unsigned int napi_id;
+	struct task_struct *thread;
+};
+
+struct wg_device;
+
+struct wg_peer {
+	struct wg_device *device;
+	struct prev_queue tx_queue;
+	struct prev_queue rx_queue;
+	struct sk_buff_head staged_packet_queue;
+	int serial_work_cpu;
+	bool is_dead;
+	struct noise_keypairs keypairs;
+	struct endpoint endpoint;
+	struct dst_cache endpoint_cache;
+	rwlock_t endpoint_lock;
+	struct noise_handshake handshake;
+	atomic64_t last_sent_handshake;
+	struct work_struct transmit_handshake_work;
+	struct work_struct clear_peer_work;
+	struct work_struct transmit_packet_work;
+	struct cookie latest_cookie;
+	struct hlist_node pubkey_hash;
+	u64 rx_bytes;
+	u64 tx_bytes;
+	struct timer_list timer_retransmit_handshake;
+	struct timer_list timer_send_keepalive;
+	struct timer_list timer_new_handshake;
+	struct timer_list timer_zero_key_material;
+	struct timer_list timer_persistent_keepalive;
+	unsigned int timer_handshake_attempts;
+	u16 persistent_keepalive_interval;
+	bool timer_need_another_keepalive;
+	bool sent_lastminute_handshake;
+	struct timespec64 walltime_last_handshake;
+	struct kref refcount;
+	struct callback_head rcu;
+	struct list_head peer_list;
+	struct list_head allowedips_list;
+	struct napi_struct napi;
+	u64 internal_id;
+};
+
+struct noise_replay_counter {
+	u64 counter;
+	spinlock_t lock;
+	long unsigned int backtrack[128];
+};
+
+struct noise_symmetric_key {
+	u8 key[32];
+	u64 birthdate;
+	bool is_valid;
+};
+
+struct noise_keypair {
+	struct index_hashtable_entry entry;
+	struct noise_symmetric_key sending;
+	atomic64_t sending_counter;
+	struct noise_symmetric_key receiving;
+	struct noise_replay_counter receiving_counter;
+	__le32 remote_index;
+	bool i_am_the_initiator;
+	struct kref refcount;
+	struct callback_head rcu;
+	u64 internal_id;
+};
+
+struct noise_static_identity {
+	u8 static_public[32];
+	u8 static_private[32];
+	struct rw_semaphore lock;
+	bool has_identity;
+};
+
+struct allowedips_node {
+	struct wg_peer *peer;
+	struct allowedips_node *bit[2];
+	u8 cidr;
+	u8 bit_at_a;
+	u8 bit_at_b;
+	u8 bitlen;
+	int: 32;
+	u8 bits[16];
+	long unsigned int parent_bit_packed;
+	union {
+		struct list_head peer_list;
+		struct callback_head rcu;
+	};
+};
+
+struct allowedips {
+	struct allowedips_node *root4;
+	struct allowedips_node *root6;
+	u64 seq;
+};
+
+struct cookie_checker {
+	u8 secret[32];
+	u8 cookie_encryption_key[32];
+	u8 message_mac1_key[32];
+	u64 secret_birthdate;
+	struct rw_semaphore secret_lock;
+	struct wg_device *device;
+};
+
+struct multicore_worker;
+
+struct crypt_queue {
+	struct ptr_ring ring;
+	struct multicore_worker *worker;
+	int last_cpu;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct wg_device {
+	struct net_device *dev;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypt_queue encrypt_queue;
+	struct crypt_queue decrypt_queue;
+	struct crypt_queue handshake_queue;
+	struct sock *sock4;
+	struct sock *sock6;
+	struct net *creating_net;
+	struct noise_static_identity static_identity;
+	struct workqueue_struct *packet_crypt_wq;
+	struct workqueue_struct *handshake_receive_wq;
+	struct workqueue_struct *handshake_send_wq;
+	struct cookie_checker cookie_checker;
+	struct pubkey_hashtable *peer_hashtable;
+	struct index_hashtable *index_hashtable;
+	struct allowedips peer_allowedips;
+	struct mutex device_update_lock;
+	struct mutex socket_update_lock;
+	struct list_head device_list;
+	struct list_head peer_list;
+	atomic_t handshake_queue_len;
+	unsigned int num_peers;
+	unsigned int device_update_gen;
+	u32 fwmark;
+	u16 incoming_port;
+	long: 48;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct multicore_worker {
+	void *ptr;
+	struct work_struct work;
+};
+
+struct tap_queue;
+
+struct tap_dev {
+	struct net_device *dev;
+	u16 flags;
+	struct tap_queue *taps[256];
+	struct list_head queue_list;
+	int numvtaps;
+	int numqueues;
+	netdev_features_t tap_features;
+	int minor;
+	void (*update_features)(struct tap_dev *, netdev_features_t);
+	void (*count_tx_dropped)(struct tap_dev *);
+	void (*count_rx_dropped)(struct tap_dev *);
+};
+
+struct tap_queue {
+	struct sock sk;
+	struct socket sock;
+	int vnet_hdr_sz;
+	struct tap_dev *tap;
+	struct file *file;
+	unsigned int flags;
+	u16 queue_index;
+	bool enabled;
+	struct list_head next;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+};
+
+struct ipvtap_dev {
+	struct ipvl_dev vlan;
+	struct tap_dev tap;
+};
+
+enum message_alignments {
+	MESSAGE_PADDING_MULTIPLE = 16,
+	MESSAGE_MINIMUM_LENGTH = 32,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct packet_cb {
+	u64 nonce;
+	struct noise_keypair *keypair;
+	atomic_t state;
+	u32 mtu;
+	u8 ds;
+};
+
+enum {
+	WG_NETDEV_FEATURES = 1075644457,
+};
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
+};
+
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+};
+
+struct flow_dissector {
+	unsigned int used_keys;
+	short unsigned int offset[31];
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+struct message_handshake_cookie {
+	struct message_header header;
+	__le32 receiver_index;
+	u8 nonce[24];
+	u8 encrypted_cookie[32];
+};
+
+struct message_data {
+	struct message_header header;
+	__le32 key_idx;
+	__le64 counter;
+	u8 encrypted_data[0];
+};
+
+enum {
+	HANDSHAKE_DSCP = 136,
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
+};
+
+enum packet_state {
+	PACKET_STATE_UNCRYPTED = 0,
+	PACKET_STATE_CRYPTED = 1,
+	PACKET_STATE_DEAD = 2,
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+enum counter_values {
+	COUNTER_BITS_TOTAL = 8192,
+	COUNTER_REDUNDANT_BITS = 64,
+	COUNTER_WINDOW_SIZE = 8128,
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+enum cookie_mac_state {
+	INVALID_MAC = 0,
+	VALID_MAC_BUT_NO_COOKIE = 1,
+	VALID_MAC_WITH_COOKIE_BUT_RATELIMITED = 2,
+	VALID_MAC_WITH_COOKIE = 3,
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	long unsigned int fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+struct udp_port_cfg {
+	u8 family;
+	union {
+		struct in_addr local_ip;
+		struct in6_addr local_ip6;
+	};
+	union {
+		struct in_addr peer_ip;
+		struct in6_addr peer_ip6;
+	};
+	__be16 local_udp_port;
+	__be16 peer_udp_port;
+	int bind_ifindex;
+	unsigned int use_udp_checksums: 1;
+	unsigned int use_udp6_tx_checksums: 1;
+	unsigned int use_udp6_rx_checksums: 1;
+	unsigned int ipv6_v6only: 1;
+};
+
+typedef int (*udp_tunnel_encap_rcv_t)(struct sock *, struct sk_buff *);
+
+typedef int (*udp_tunnel_encap_err_lookup_t)(struct sock *, struct sk_buff *);
+
+typedef void (*udp_tunnel_encap_err_rcv_t)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+
+typedef void (*udp_tunnel_encap_destroy_t)(struct sock *);
+
+typedef struct sk_buff * (*udp_tunnel_gro_receive_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+typedef int (*udp_tunnel_gro_complete_t)(struct sock *, struct sk_buff *, int);
+
+struct udp_tunnel_sock_cfg {
+	void *sk_user_data;
+	__u8 encap_type;
+	udp_tunnel_encap_rcv_t encap_rcv;
+	udp_tunnel_encap_err_lookup_t encap_err_lookup;
+	udp_tunnel_encap_err_rcv_t encap_err_rcv;
+	udp_tunnel_encap_destroy_t encap_destroy;
+	udp_tunnel_gro_receive_t gro_receive;
+	udp_tunnel_gro_complete_t gro_complete;
+};
+
+struct udp_tunnel_info {
+	short unsigned int type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+typedef struct {
+	long unsigned int key[2];
+} hsiphash_key_t;
+
+struct ratelimiter_entry {
+	u64 last_time_ns;
+	u64 tokens;
+	u64 ip;
+	void *net;
+	spinlock_t lock;
+	struct hlist_node hash;
+	struct callback_head rcu;
+};
+
+enum {
+	PACKETS_PER_SECOND = 20,
+	PACKETS_BURSTABLE = 5,
+	PACKET_COST = 50000000,
+	TOKEN_MAX = 250000000,
+};
+
+enum cookie_values {
+	COOKIE_SECRET_MAX_AGE = 120,
+	COOKIE_SECRET_LATENCY = 5,
+	COOKIE_NONCE_LEN = 24,
+	COOKIE_LEN = 16,
+};
+
+enum {
+	MAX_ALLOWEDIPS_BITS = 128,
+};
+
+enum {
+	COOKIE_KEY_LABEL_LEN = 8,
+};
+
+enum wg_cmd {
+	WG_CMD_GET_DEVICE = 0,
+	WG_CMD_SET_DEVICE = 1,
+	__WG_CMD_MAX = 2,
+};
+
+enum wgdevice_flag {
+	WGDEVICE_F_REPLACE_PEERS = 1,
+	__WGDEVICE_F_ALL = 1,
+};
+
+enum wgdevice_attribute {
+	WGDEVICE_A_UNSPEC = 0,
+	WGDEVICE_A_IFINDEX = 1,
+	WGDEVICE_A_IFNAME = 2,
+	WGDEVICE_A_PRIVATE_KEY = 3,
+	WGDEVICE_A_PUBLIC_KEY = 4,
+	WGDEVICE_A_FLAGS = 5,
+	WGDEVICE_A_LISTEN_PORT = 6,
+	WGDEVICE_A_FWMARK = 7,
+	WGDEVICE_A_PEERS = 8,
+	__WGDEVICE_A_LAST = 9,
+};
+
+enum wgpeer_flag {
+	WGPEER_F_REMOVE_ME = 1,
+	WGPEER_F_REPLACE_ALLOWEDIPS = 2,
+	WGPEER_F_UPDATE_ONLY = 4,
+	__WGPEER_F_ALL = 7,
+};
+
+enum wgpeer_attribute {
+	WGPEER_A_UNSPEC = 0,
+	WGPEER_A_PUBLIC_KEY = 1,
+	WGPEER_A_PRESHARED_KEY = 2,
+	WGPEER_A_FLAGS = 3,
+	WGPEER_A_ENDPOINT = 4,
+	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 5,
+	WGPEER_A_LAST_HANDSHAKE_TIME = 6,
+	WGPEER_A_RX_BYTES = 7,
+	WGPEER_A_TX_BYTES = 8,
+	WGPEER_A_ALLOWEDIPS = 9,
+	WGPEER_A_PROTOCOL_VERSION = 10,
+	__WGPEER_A_LAST = 11,
+};
+
+enum wgallowedip_attribute {
+	WGALLOWEDIP_A_UNSPEC = 0,
+	WGALLOWEDIP_A_FAMILY = 1,
+	WGALLOWEDIP_A_IPADDR = 2,
+	WGALLOWEDIP_A_CIDR_MASK = 3,
+	__WGALLOWEDIP_A_LAST = 4,
+};
+
+struct genl_dumpit_info {
+	const struct genl_family *family;
+	struct genl_split_ops op;
+	struct nlattr **attrs;
+};
+
+struct dump_ctx {
+	struct wg_device *wg;
+	struct wg_peer *next_peer;
+	u64 allowedips_seq;
+	struct allowedips_node *next_allowedip;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+enum {
+	IFLA_MACVLAN_UNSPEC = 0,
+	IFLA_MACVLAN_MODE = 1,
+	IFLA_MACVLAN_FLAGS = 2,
+	IFLA_MACVLAN_MACADDR_MODE = 3,
+	IFLA_MACVLAN_MACADDR = 4,
+	IFLA_MACVLAN_MACADDR_DATA = 5,
+	IFLA_MACVLAN_MACADDR_COUNT = 6,
+	IFLA_MACVLAN_BC_QUEUE_LEN = 7,
+	IFLA_MACVLAN_BC_QUEUE_LEN_USED = 8,
+	__IFLA_MACVLAN_MAX = 9,
+};
+
+enum macvlan_mode {
+	MACVLAN_MODE_PRIVATE = 1,
+	MACVLAN_MODE_VEPA = 2,
+	MACVLAN_MODE_BRIDGE = 4,
+	MACVLAN_MODE_PASSTHRU = 8,
+	MACVLAN_MODE_SOURCE = 16,
+};
+
+enum macvlan_macaddr_mode {
+	MACVLAN_MACADDR_ADD = 0,
+	MACVLAN_MACADDR_DEL = 1,
+	MACVLAN_MACADDR_FLUSH = 2,
+	MACVLAN_MACADDR_SET = 3,
+};
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	long unsigned int offload_handle;
+	u8 dir: 2;
+	u8 type: 2;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long int saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	short unsigned int encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+	struct xfrm_dev_offload xdo;
+};
+
+struct netpoll;
+
+struct netpoll_info {
+	refcount_t refcnt;
+	struct semaphore dev_lock;
+	struct sk_buff_head txq;
+	struct delayed_work tx_work;
+	struct netpoll *netpoll;
+	struct callback_head rcu;
+};
+
+struct mii_bus;
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_UP = 3,
+	PHY_RUNNING = 4,
+	PHY_NOLINK = 5,
+	PHY_CABLETEST = 6,
+};
+
+struct pse_control;
+
+struct phy_driver;
+
+struct phy_package_shared;
+
+struct phylink;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	struct device_link *devlink;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	int rate_matching;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	long unsigned int supported[2];
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	long unsigned int adv_old[2];
+	long unsigned int host_interfaces[1];
+	u32 eee_broken_modes;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	struct pse_control *psec;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	unsigned int link_down_events;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_OPT_ID_TCP = 65536,
+	SOF_TIMESTAMPING_LAST = 65536,
+	SOF_TIMESTAMPING_MASK = 131071,
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct vlan_pcpu_stats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errors;
+	u32 tx_dropped;
+};
+
+union inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct netpoll {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	char dev_name[16];
+	const char *name;
+	union inet_addr local_ip;
+	union inet_addr remote_ip;
+	bool ipv6;
+	u16 local_port;
+	u16 remote_port;
+	u8 remote_mac[6];
+};
+
+struct macvlan_port;
+
+struct macvlan_dev {
+	struct net_device *dev;
+	struct list_head list;
+	struct hlist_node hlist;
+	struct macvlan_port *port;
+	struct net_device *lowerdev;
+	netdevice_tracker dev_tracker;
+	void *accel_priv;
+	struct vlan_pcpu_stats *pcpu_stats;
+	long unsigned int mc_filter[4];
+	netdev_features_t set_features;
+	enum macvlan_mode mode;
+	u16 flags;
+	unsigned int macaddr_count;
+	u32 bc_queue_len_req;
+	struct netpoll *netpoll;
+};
+
+struct macvlan_port {
+	struct net_device *dev;
+	struct hlist_head vlan_hash[256];
+	struct list_head vlans;
+	struct sk_buff_head bc_queue;
+	struct work_struct bc_work;
+	u32 bc_queue_len_used;
+	u32 flags;
+	int count;
+	struct hlist_head vlan_source_hash[256];
+	long unsigned int mc_filter[4];
+	unsigned char perm_addr[6];
+};
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *, struct netlink_ext_ack *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22 = 1,
+		MDIOBUS_C45 = 2,
+		MDIOBUS_C22_C45 = 3,
+	} probe_capabilities;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	long unsigned int flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const long unsigned int * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*get_rate_matching)(struct phy_device *, phy_interface_t);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+};
+
+struct macvlan_source_entry {
+	struct hlist_node hlist;
+	struct macvlan_dev *vlan;
+	unsigned char addr[8];
+	struct callback_head rcu;
+};
+
+struct macvlan_skb_cb {
+	const struct macvlan_dev *src;
+};
+
+struct mdio_board_info {
+	const char *bus_id;
+	char modalias[32];
+	int mdio_addr;
+	const void *platform_data;
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+struct macvtap_dev {
+	struct macvlan_dev vlan;
+	struct tap_dev tap;
+};
+
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	ETHTOOL_MSG_PSE_GET_REPLY = 37,
+	ETHTOOL_MSG_RSS_GET_REPLY = 38,
+	__ETHTOOL_MSG_KERNEL_CNT = 39,
+	ETHTOOL_MSG_KERNEL_MAX = 38,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	__ETHTOOL_A_STATS_CNT = 5,
+	ETHTOOL_A_STATS_MAX = 4,
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct phylink_link_state {
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	int rate_matching;
+	unsigned int link: 1;
+	unsigned int an_enabled: 1;
+	unsigned int an_complete: 1;
+};
+
+struct phylink_mac_ops;
+
+struct phylink_config;
+
+struct phylink_pcs;
+
+struct phylink {
+	struct net_device *netdev;
+	const struct phylink_mac_ops *mac_ops;
+	struct phylink_config *config;
+	struct phylink_pcs *pcs;
+	struct device *dev;
+	unsigned int old_link_state: 1;
+	long unsigned int phylink_disable_state;
+	struct phy_device *phydev;
+	phy_interface_t link_interface;
+	u8 cfg_link_an_mode;
+	u8 cur_link_an_mode;
+	u8 link_port;
+	long unsigned int supported[2];
+	struct phylink_link_state link_config;
+	phy_interface_t cur_interface;
+	struct gpio_desc *link_gpio;
+	unsigned int link_irq;
+	struct timer_list link_poll;
+	void (*get_fixed_state)(struct net_device *, struct phylink_link_state *);
+	struct mutex state_mutex;
+	struct phylink_link_state phy_state;
+	struct work_struct resolve;
+	bool mac_link_dropped;
+	bool using_mac_select_pcs;
+	struct sfp_bus *sfp_bus;
+	bool sfp_may_have_phy;
+	long unsigned int sfp_interfaces[1];
+	long unsigned int sfp_support[2];
+	u8 sfp_port;
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+enum {
+	MLO_PAUSE_NONE = 0,
+	MLO_PAUSE_RX = 1,
+	MLO_PAUSE_TX = 2,
+	MLO_PAUSE_TXRX_MASK = 3,
+	MLO_PAUSE_AN = 4,
+	MLO_AN_PHY = 0,
+	MLO_AN_FIXED = 1,
+	MLO_AN_INBAND = 2,
+	MAC_SYM_PAUSE = 1,
+	MAC_ASYM_PAUSE = 2,
+	MAC_10HD = 4,
+	MAC_10FD = 8,
+	MAC_10 = 12,
+	MAC_100HD = 16,
+	MAC_100FD = 32,
+	MAC_100 = 48,
+	MAC_1000HD = 64,
+	MAC_1000FD = 128,
+	MAC_1000 = 192,
+	MAC_2500FD = 256,
+	MAC_5000FD = 512,
+	MAC_10000FD = 1024,
+	MAC_20000FD = 2048,
+	MAC_25000FD = 4096,
+	MAC_40000FD = 8192,
+	MAC_50000FD = 16384,
+	MAC_56000FD = 32768,
+	MAC_100000FD = 65536,
+	MAC_200000FD = 131072,
+	MAC_400000FD = 262144,
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool legacy_pre_march2020;
+	bool poll_fixed_state;
+	bool mac_managed_pm;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	long unsigned int supported_interfaces[1];
+	long unsigned int mac_capabilities;
+};
+
+struct phylink_mac_ops {
+	void (*validate)(struct phylink_config *, long unsigned int *, struct phylink_link_state *);
+	struct phylink_pcs * (*mac_select_pcs)(struct phylink_config *, phy_interface_t);
+	void (*mac_pcs_get_state)(struct phylink_config *, struct phylink_link_state *);
+	int (*mac_prepare)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_config)(struct phylink_config *, unsigned int, const struct phylink_link_state *);
+	int (*mac_finish)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_an_restart)(struct phylink_config *);
+	void (*mac_link_down)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_up)(struct phylink_config *, struct phy_device *, unsigned int, phy_interface_t, int, int, bool, bool);
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, long unsigned int *, const struct phylink_link_state *);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const long unsigned int *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+enum {
+	PHYLINK_DISABLE_STOPPED = 0,
+	PHYLINK_DISABLE_LINK = 1,
+	PHYLINK_DISABLE_MAC_WOL = 2,
+};
+
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
+};
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+enum csr_target {
+	MACRO_CTRL = 7,
+};
+
+struct trace_event_raw_mdio_access {
+	struct trace_entry ent;
+	char busid[61];
+	char read;
+	u8 addr;
+	u16 val;
+	unsigned int regnum;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mdio_access {};
+
+typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
+
+struct mdio_bus_stat_attr {
+	int addr;
+	unsigned int field_offset;
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+struct mdio_device_id {
+	__u32 phy_id;
+	__u32 phy_id_mask;
+};
+
+enum rgmii_clock_delay {
+	RGMII_CLK_DELAY_0_2_NS = 0,
+	RGMII_CLK_DELAY_0_8_NS = 1,
+	RGMII_CLK_DELAY_1_1_NS = 2,
+	RGMII_CLK_DELAY_1_7_NS = 3,
+	RGMII_CLK_DELAY_2_0_NS = 4,
+	RGMII_CLK_DELAY_2_3_NS = 5,
+	RGMII_CLK_DELAY_2_6_NS = 6,
+	RGMII_CLK_DELAY_3_4_NS = 7,
+};
+
+struct reg_val {
+	u16 reg;
+	u32 val;
+};
+
+struct vsc85xx_hw_stat {
+	const char *string;
+	u8 reg;
+	u16 page;
+	u16 mask;
+};
+
+struct vsc85xx_ptp;
+
+struct vsc8531_private {
+	int rate_magic;
+	u16 supp_led_modes;
+	u32 leds_mode[4];
+	u8 nleds;
+	const struct vsc85xx_hw_stat *hw_stats;
+	u64 *stats;
+	int nstats;
+	u8 addr;
+	unsigned int base_addr;
+	struct mii_timestamper mii_ts;
+	bool input_clk_init;
+	struct vsc85xx_ptp *ptp;
+	struct gpio_desc *load_save;
+	unsigned int ts_base_addr;
+	u8 ts_base_phy;
+	struct mutex ts_lock;
+	struct mutex phc_lock;
+};
+
+struct vsc8531_edge_rate_table {
+	u32 vddmac;
+	u32 slowdown[8];
+};
+
+struct rtl821x_priv {
+	u16 phycr1;
+	u16 phycr2;
+	bool has_phycr2;
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+enum {
+	IFLA_TUN_UNSPEC = 0,
+	IFLA_TUN_OWNER = 1,
+	IFLA_TUN_GROUP = 2,
+	IFLA_TUN_TYPE = 3,
+	IFLA_TUN_PI = 4,
+	IFLA_TUN_VNET_HDR = 5,
+	IFLA_TUN_PERSIST = 6,
+	IFLA_TUN_MULTI_QUEUE = 7,
+	IFLA_TUN_NUM_QUEUES = 8,
+	IFLA_TUN_NUM_DISABLED_QUEUES = 9,
+	__IFLA_TUN_MAX = 10,
+};
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct tun_pi {
+	__u16 flags;
+	__be16 proto;
+};
+
+struct tun_filter {
+	__u16 flags;
+	__u16 count;
+	__u8 addr[0];
+};
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct tun_msg_ctl {
+	short unsigned int type;
+	short unsigned int num;
+	void *ptr;
+};
+
+struct tun_xdp_hdr {
+	int buflen;
+	struct virtio_net_hdr gso;
+};
+
+enum {
+	AX25_VALUES_IPDEFMODE = 0,
+	AX25_VALUES_AXDEFMODE = 1,
+	AX25_VALUES_BACKOFF = 2,
+	AX25_VALUES_CONMODE = 3,
+	AX25_VALUES_WINDOW = 4,
+	AX25_VALUES_EWINDOW = 5,
+	AX25_VALUES_T1 = 6,
+	AX25_VALUES_T2 = 7,
+	AX25_VALUES_T3 = 8,
+	AX25_VALUES_IDLE = 9,
+	AX25_VALUES_N2 = 10,
+	AX25_VALUES_PACLEN = 11,
+	AX25_VALUES_PROTOCOL = 12,
+	AX25_VALUES_DS_TIMEOUT = 13,
+	AX25_MAX_VALUES = 14,
+};
+
+struct tap_filter {
+	unsigned int count;
+	u32 mask[2];
+	unsigned char addr[48];
+};
+
+struct tun_struct;
+
+struct tun_file {
+	struct sock sk;
+	struct socket socket;
+	struct tun_struct *tun;
+	struct fasync_struct *fasync;
+	unsigned int flags;
+	union {
+		u16 queue_index;
+		unsigned int ifindex;
+	};
+	struct napi_struct napi;
+	bool napi_enabled;
+	bool napi_frags_enabled;
+	struct mutex napi_mutex;
+	struct list_head next;
+	struct tun_struct *detached;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring tx_ring;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct tun_prog;
+
+struct tun_struct {
+	struct tun_file *tfiles[256];
+	unsigned int numqueues;
+	unsigned int flags;
+	kuid_t owner;
+	kgid_t group;
+	struct net_device *dev;
+	netdev_features_t set_features;
+	int align;
+	int vnet_hdr_sz;
+	int sndbuf;
+	struct tap_filter txflt;
+	struct sock_fprog fprog;
+	bool filter_attached;
+	u32 msg_enable;
+	spinlock_t lock;
+	struct hlist_head flows[1024];
+	struct timer_list flow_gc_timer;
+	long unsigned int ageing_time;
+	unsigned int numdisabled;
+	struct list_head disabled;
+	void *security;
+	u32 flow_count;
+	u32 rx_batched;
+	atomic_long_t rx_frame_errors;
+	struct bpf_prog *xdp_prog;
+	struct tun_prog *steering_prog;
+	struct tun_prog *filter_prog;
+	struct ethtool_link_ksettings link_ksettings;
+	struct file *file;
+	struct ifreq *ifr;
+};
+
+struct tun_page {
+	struct page *page;
+	int count;
+};
+
+struct tun_flow_entry {
+	struct hlist_node hash_link;
+	struct callback_head rcu;
+	struct tun_struct *tun;
+	u32 rxhash;
+	u32 rps_rxhash;
+	int queue_index;
+	long: 32;
+	long: 64;
+	long unsigned int updated;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tun_prog {
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct veth {
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+};
+
+enum skb_free_reason {
+	SKB_REASON_CONSUMED = 0,
+	SKB_REASON_DROPPED = 1,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	short unsigned int ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+enum {
+	VETH_INFO_UNSPEC = 0,
+	VETH_INFO_PEER = 1,
+	__VETH_INFO_MAX = 2,
+};
+
+struct veth_stats {
+	u64 rx_drops;
+	u64 xdp_packets;
+	u64 xdp_bytes;
+	u64 xdp_redirect;
+	u64 xdp_drops;
+	u64 xdp_tx;
+	u64 xdp_tx_err;
+	u64 peer_tq_xdp_xmit;
+	u64 peer_tq_xdp_xmit_err;
+};
+
+struct veth_rq_stats {
+	struct veth_stats vs;
+	struct u64_stats_sync syncp;
+};
+
+struct veth_rq {
+	struct napi_struct xdp_napi;
+	struct napi_struct *napi;
+	struct net_device *dev;
+	struct bpf_prog *xdp_prog;
+	struct xdp_mem_info xdp_mem;
+	struct veth_rq_stats stats;
+	bool rx_notify_masked;
+	struct ptr_ring xdp_ring;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct veth_priv {
+	struct net_device *peer;
+	atomic64_t dropped;
+	struct bpf_prog *_xdp_prog;
+	struct veth_rq *rq;
+	unsigned int requested_headroom;
+};
+
+struct veth_xdp_tx_bq {
+	struct xdp_frame *q[16];
+	unsigned int count;
+};
+
+struct veth_q_stat_desc {
+	char desc[32];
+	size_t offset;
+};
+
+struct major_info {
+	struct callback_head rcu;
+	dev_t major;
+	struct idr minor_idr;
+	spinlock_t minor_lock;
+	const char *device_name;
+	struct list_head next;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+enum ifla_vxlan_df {
+	VXLAN_DF_UNSET = 0,
+	VXLAN_DF_SET = 1,
+	VXLAN_DF_INHERIT = 2,
+	__VXLAN_DF_END = 3,
+	VXLAN_DF_MAX = 2,
+};
+
+struct gro_cell;
+
+struct gro_cells {
+	struct gro_cell *cells;
+};
+
+struct vxlan_sock {
+	struct hlist_node hlist;
+	struct socket *sock;
+	struct hlist_head vni_list[1024];
+	refcount_t refcnt;
+	u32 flags;
+};
+
+union vxlan_addr {
+	struct sockaddr_in sin;
+	struct sockaddr_in6 sin6;
+	struct sockaddr sa;
+};
+
+struct vxlan_rdst {
+	union vxlan_addr remote_ip;
+	__be16 remote_port;
+	u8 offloaded: 1;
+	__be32 remote_vni;
+	u32 remote_ifindex;
+	struct net_device *remote_dev;
+	struct list_head list;
+	struct callback_head rcu;
+	struct dst_cache dst_cache;
+};
+
+struct vxlan_config {
+	union vxlan_addr remote_ip;
+	union vxlan_addr saddr;
+	__be32 vni;
+	int remote_ifindex;
+	int mtu;
+	__be16 dst_port;
+	u16 port_min;
+	u16 port_max;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	u32 flags;
+	long unsigned int age_interval;
+	unsigned int addrmax;
+	bool no_share;
+	enum ifla_vxlan_df df;
+};
+
+struct vxlan_vni_stats {
+	u64 rx_packets;
+	u64 rx_bytes;
+	u64 rx_drops;
+	u64 rx_errors;
+	u64 tx_packets;
+	u64 tx_bytes;
+	u64 tx_drops;
+	u64 tx_errors;
+};
+
+struct vxlan_vni_stats_pcpu {
+	struct vxlan_vni_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct vxlan_dev;
+
+struct vxlan_dev_node {
+	struct hlist_node hlist;
+	struct vxlan_dev *vxlan;
+};
+
+struct vxlan_vni_group;
+
+struct vxlan_dev {
+	struct vxlan_dev_node hlist4;
+	struct vxlan_dev_node hlist6;
+	struct list_head next;
+	struct vxlan_sock *vn4_sock;
+	struct vxlan_sock *vn6_sock;
+	struct net_device *dev;
+	struct net *net;
+	struct vxlan_rdst default_dst;
+	struct timer_list age_timer;
+	spinlock_t hash_lock[256];
+	unsigned int addrcnt;
+	struct gro_cells gro_cells;
+	struct vxlan_config cfg;
+	struct vxlan_vni_group *vnigrp;
+	struct hlist_head fdb_head[256];
+};
+
+struct vxlan_vni_node {
+	struct rhash_head vnode;
+	struct vxlan_dev_node hlist4;
+	struct vxlan_dev_node hlist6;
+	struct list_head vlist;
+	__be32 vni;
+	union vxlan_addr remote_ip;
+	struct vxlan_vni_stats_pcpu *stats;
+	struct callback_head rcu;
+};
+
+struct vxlan_vni_group {
+	struct rhashtable vni_hash;
+	struct list_head vni_list;
+	u32 num_vnis;
+};
+
+struct vxlan_net {
+	struct list_head vxlan_list;
+	struct hlist_head sock_list[256];
+	spinlock_t sock_lock;
+	struct notifier_block nexthop_notifier_block;
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	struct softnet_data *rps_ipi_list;
+	struct sd_flow_limit *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct sk_buff_head xfrm_backlog;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	long: 32;
+	long: 64;
+	unsigned int input_queue_head;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int received_rps;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+};
+
+enum {
+	ETH_RSS_HASH_TOP_BIT = 0,
+	ETH_RSS_HASH_XOR_BIT = 1,
+	ETH_RSS_HASH_CRC32_BIT = 2,
+	ETH_RSS_HASH_FUNCS_COUNT = 3,
+};
+
+struct virtio_net_config {
+	__u8 mac[6];
+	__virtio16 status;
+	__virtio16 max_virtqueue_pairs;
+	__virtio16 mtu;
+	__le32 speed;
+	__u8 duplex;
+	__u8 rss_max_key_size;
+	__le16 rss_max_indirection_table_length;
+	__le32 supported_hash_types;
+};
+
+struct virtio_net_hdr_v1 {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	union {
+		struct {
+			__virtio16 csum_start;
+			__virtio16 csum_offset;
+		};
+		struct {
+			__virtio16 start;
+			__virtio16 offset;
+		} csum;
+		struct {
+			__le16 segments;
+			__le16 dup_acks;
+		} rsc;
+	};
+	__virtio16 num_buffers;
+};
+
+struct virtio_net_hdr_v1_hash {
+	struct virtio_net_hdr_v1 hdr;
+	__le32 hash_value;
+	__le16 hash_report;
+	__le16 padding;
+};
+
+struct virtio_net_hdr_mrg_rxbuf {
+	struct virtio_net_hdr hdr;
+	__virtio16 num_buffers;
+};
+
+struct virtio_net_ctrl_hdr {
+	__u8 class;
+	__u8 cmd;
+};
+
+typedef __u8 virtio_net_ctrl_ack;
+
+struct virtio_net_ctrl_mac {
+	__virtio32 entries;
+	__u8 macs[0];
+};
+
+struct virtio_net_ctrl_mq {
+	__virtio16 virtqueue_pairs;
+};
+
+struct virtio_net_ctrl_coal_tx {
+	__le32 tx_max_packets;
+	__le32 tx_usecs;
+};
+
+struct virtio_net_ctrl_coal_rx {
+	__le32 rx_max_packets;
+	__le32 rx_usecs;
+};
+
+struct failover_ops {
+	int (*slave_pre_register)(struct net_device *, struct net_device *);
+	int (*slave_register)(struct net_device *, struct net_device *);
+	int (*slave_pre_unregister)(struct net_device *, struct net_device *);
+	int (*slave_unregister)(struct net_device *, struct net_device *);
+	int (*slave_link_change)(struct net_device *, struct net_device *);
+	int (*slave_name_change)(struct net_device *, struct net_device *);
+	rx_handler_result_t (*slave_handle_frame)(struct sk_buff **);
+};
+
+struct failover {
+	struct list_head list;
+	struct net_device *failover_dev;
+	netdevice_tracker dev_tracker;
+	struct failover_ops *ops;
+};
+
+struct ewma_pkt_len {
+	long unsigned int internal;
+};
+
+struct virtnet_stat_desc {
+	char desc[32];
+	size_t offset;
+};
+
+struct virtnet_sq_stats {
+	struct u64_stats_sync syncp;
+	u64 packets;
+	u64 bytes;
+	u64 xdp_tx;
+	u64 xdp_tx_drops;
+	u64 kicks;
+	u64 tx_timeouts;
+};
+
+struct virtnet_rq_stats {
+	struct u64_stats_sync syncp;
+	u64 packets;
+	u64 bytes;
+	u64 drops;
+	u64 xdp_packets;
+	u64 xdp_tx;
+	u64 xdp_redirects;
+	u64 xdp_drops;
+	u64 kicks;
+};
+
+struct send_queue {
+	struct virtqueue *vq;
+	struct scatterlist sg[19];
+	char name[40];
+	struct virtnet_sq_stats stats;
+	struct napi_struct napi;
+	bool reset;
+};
+
+struct receive_queue {
+	struct virtqueue *vq;
+	struct napi_struct napi;
+	struct bpf_prog *xdp_prog;
+	struct virtnet_rq_stats stats;
+	struct page *pages;
+	struct ewma_pkt_len mrg_avg_pkt_len;
+	struct page_frag alloc_frag;
+	struct scatterlist sg[19];
+	unsigned int min_buf_len;
+	char name[40];
+	long: 32;
+	long: 64;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct virtio_net_ctrl_rss {
+	u32 hash_types;
+	u16 indirection_table_mask;
+	u16 unclassified_queue;
+	u16 indirection_table[128];
+	u16 max_tx_vq;
+	u8 hash_key_length;
+	u8 key[40];
+};
+
+struct control_buf {
+	struct virtio_net_ctrl_hdr hdr;
+	virtio_net_ctrl_ack status;
+	struct virtio_net_ctrl_mq mq;
+	u8 promisc;
+	u8 allmulti;
+	__virtio16 vid;
+	__virtio64 offloads;
+	struct virtio_net_ctrl_rss rss;
+};
+
+struct virtnet_info {
+	struct virtio_device *vdev;
+	struct virtqueue *cvq;
+	struct net_device *dev;
+	struct send_queue *sq;
+	struct receive_queue *rq;
+	unsigned int status;
+	u16 max_queue_pairs;
+	u16 curr_queue_pairs;
+	u16 xdp_queue_pairs;
+	bool xdp_enabled;
+	bool big_packets;
+	unsigned int big_packets_num_skbfrags;
+	bool mergeable_rx_bufs;
+	bool has_rss;
+	bool has_rss_hash_report;
+	u8 rss_key_size;
+	u16 rss_indir_table_size;
+	u32 rss_hash_types_supported;
+	u32 rss_hash_types_saved;
+	bool has_cvq;
+	bool any_header_sg;
+	u8 hdr_len;
+	struct delayed_work refill;
+	bool refill_enabled;
+	spinlock_t refill_lock;
+	struct work_struct config_work;
+	bool affinity_hint_set;
+	struct hlist_node node;
+	struct hlist_node node_dead;
+	struct control_buf *ctrl;
+	u8 duplex;
+	u32 speed;
+	u32 tx_usecs;
+	u32 rx_usecs;
+	u32 tx_max_packets;
+	u32 rx_max_packets;
+	long unsigned int guest_offloads;
+	long unsigned int guest_offloads_capable;
+	struct failover *failover;
+};
+
+struct tunnel_msg {
+	__u8 family;
+	__u8 flags;
+	__u16 reserved2;
+	__u32 ifindex;
+};
+
+enum {
+	VNIFILTER_ENTRY_STATS_UNSPEC = 0,
+	VNIFILTER_ENTRY_STATS_RX_BYTES = 1,
+	VNIFILTER_ENTRY_STATS_RX_PKTS = 2,
+	VNIFILTER_ENTRY_STATS_RX_DROPS = 3,
+	VNIFILTER_ENTRY_STATS_RX_ERRORS = 4,
+	VNIFILTER_ENTRY_STATS_TX_BYTES = 5,
+	VNIFILTER_ENTRY_STATS_TX_PKTS = 6,
+	VNIFILTER_ENTRY_STATS_TX_DROPS = 7,
+	VNIFILTER_ENTRY_STATS_TX_ERRORS = 8,
+	VNIFILTER_ENTRY_STATS_PAD = 9,
+	__VNIFILTER_ENTRY_STATS_MAX = 10,
+};
+
+enum {
+	VXLAN_VNIFILTER_ENTRY_UNSPEC = 0,
+	VXLAN_VNIFILTER_ENTRY_START = 1,
+	VXLAN_VNIFILTER_ENTRY_END = 2,
+	VXLAN_VNIFILTER_ENTRY_GROUP = 3,
+	VXLAN_VNIFILTER_ENTRY_GROUP6 = 4,
+	VXLAN_VNIFILTER_ENTRY_STATS = 5,
+	__VXLAN_VNIFILTER_ENTRY_MAX = 6,
+};
+
+enum {
+	VXLAN_VNIFILTER_UNSPEC = 0,
+	VXLAN_VNIFILTER_ENTRY = 1,
+	__VXLAN_VNIFILTER_MAX = 2,
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+enum {
+	VXLAN_VNI_STATS_RX = 0,
+	VXLAN_VNI_STATS_RX_DROPS = 1,
+	VXLAN_VNI_STATS_RX_ERRORS = 2,
+	VXLAN_VNI_STATS_TX = 3,
+	VXLAN_VNI_STATS_TX_DROPS = 4,
+	VXLAN_VNI_STATS_TX_ERRORS = 5,
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct nlmon {
+	struct netlink_tap nt;
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+enum {
+	IFLA_VXLAN_UNSPEC = 0,
+	IFLA_VXLAN_ID = 1,
+	IFLA_VXLAN_GROUP = 2,
+	IFLA_VXLAN_LINK = 3,
+	IFLA_VXLAN_LOCAL = 4,
+	IFLA_VXLAN_TTL = 5,
+	IFLA_VXLAN_TOS = 6,
+	IFLA_VXLAN_LEARNING = 7,
+	IFLA_VXLAN_AGEING = 8,
+	IFLA_VXLAN_LIMIT = 9,
+	IFLA_VXLAN_PORT_RANGE = 10,
+	IFLA_VXLAN_PROXY = 11,
+	IFLA_VXLAN_RSC = 12,
+	IFLA_VXLAN_L2MISS = 13,
+	IFLA_VXLAN_L3MISS = 14,
+	IFLA_VXLAN_PORT = 15,
+	IFLA_VXLAN_GROUP6 = 16,
+	IFLA_VXLAN_LOCAL6 = 17,
+	IFLA_VXLAN_UDP_CSUM = 18,
+	IFLA_VXLAN_UDP_ZERO_CSUM6_TX = 19,
+	IFLA_VXLAN_UDP_ZERO_CSUM6_RX = 20,
+	IFLA_VXLAN_REMCSUM_TX = 21,
+	IFLA_VXLAN_REMCSUM_RX = 22,
+	IFLA_VXLAN_GBP = 23,
+	IFLA_VXLAN_REMCSUM_NOPARTIAL = 24,
+	IFLA_VXLAN_COLLECT_METADATA = 25,
+	IFLA_VXLAN_LABEL = 26,
+	IFLA_VXLAN_GPE = 27,
+	IFLA_VXLAN_TTL_INHERIT = 28,
+	IFLA_VXLAN_DF = 29,
+	IFLA_VXLAN_VNIFILTER = 30,
+	__IFLA_VXLAN_MAX = 31,
+};
+
+struct ifla_vxlan_port_range {
+	__be16 low;
+	__be16 high;
+};
+
+struct ip_sf_socklist;
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist *sflist;
+	struct callback_head rcu;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	int pending;
+	unsigned int corkflag;
+	__u8 encap_type;
+	unsigned char no_check6_tx: 1;
+	unsigned char no_check6_rx: 1;
+	unsigned char encap_enabled: 1;
+	unsigned char gro_enabled: 1;
+	unsigned char accept_udp_l4: 1;
+	unsigned char accept_udp_fraglist: 1;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	__u8 pcflag;
+	__u8 unused[3];
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	int forward_threshold;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	LWTUNNEL_ENCAP_XFRM = 10,
+	__LWTUNNEL_ENCAP_MAX = 11,
+};
+
+struct napi_gro_cb {
+	void *frag0;
+	unsigned int frag0_len;
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	long unsigned int age;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+	struct sk_buff *last;
+};
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+struct gro_remcsum {
+	int offset;
+	__wsum delta;
+};
+
+enum nexthop_event_type {
+	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+enum udp_parsable_tunnel_type {
+	UDP_TUNNEL_TYPE_VXLAN = 1,
+	UDP_TUNNEL_TYPE_GENEVE = 2,
+	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+typedef u64 sci_t;
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+	METADATA_MACSEC = 2,
+	METADATA_XFRM = 3,
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct macsec_info {
+	sci_t sci;
+};
+
+struct xfrm_md_info {
+	u32 if_id;
+	int link;
+	struct dst_entry *dst_orig;
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
+	union {
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+		struct macsec_info macsec_info;
+		struct xfrm_md_info xfrm_info;
+	} u;
+};
+
+enum switchdev_notifier_type {
+	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
+	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
+	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
+	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
+	SWITCHDEV_FDB_OFFLOADED = 5,
+	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
+	SWITCHDEV_PORT_OBJ_ADD = 7,
+	SWITCHDEV_PORT_OBJ_DEL = 8,
+	SWITCHDEV_PORT_ATTR_SET = 9,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
+	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
+	SWITCHDEV_BRPORT_OFFLOADED = 15,
+	SWITCHDEV_BRPORT_UNOFFLOADED = 16,
+};
+
+struct switchdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+	const void *ctx;
+};
+
+struct vxlanhdr {
+	__be32 vx_flags;
+	__be32 vx_vni;
+};
+
+struct vxlanhdr_gbp {
+	u8 vx_flags;
+	u8 reserved_flags1: 3;
+	u8 policy_applied: 1;
+	u8 reserved_flags2: 2;
+	u8 dont_learn: 1;
+	u8 reserved_flags3: 1;
+	__be16 policy_id;
+	__be32 vx_vni;
+};
+
+struct vxlanhdr_gpe {
+	u8 oam_flag: 1;
+	u8 reserved_flags1: 1;
+	u8 np_applied: 1;
+	u8 instance_applied: 1;
+	u8 version: 2;
+	u8 reserved_flags2: 2;
+	u8 reserved_flags3;
+	u8 reserved_flags4;
+	u8 next_protocol;
+	__be32 vx_vni;
+};
+
+struct vxlan_metadata {
+	u32 gbp;
+};
+
+struct switchdev_notifier_vxlan_fdb_info {
+	struct switchdev_notifier_info info;
+	union vxlan_addr remote_ip;
+	__be16 remote_port;
+	__be32 remote_vni;
+	u32 remote_ifindex;
+	u8 eth_addr[6];
+	__be32 vni;
+	bool offloaded;
+	bool added_by_user;
+};
+
+struct vxlan_fdb {
+	struct hlist_node hlist;
+	struct callback_head rcu;
+	long unsigned int updated;
+	long unsigned int used;
+	struct list_head remotes;
+	u8 eth_addr[6];
+	u16 state;
+	__be32 vni;
+	u16 flags;
+	struct list_head nh_list;
+	struct nexthop *nh;
+	struct vxlan_dev *vdev;
+};
+
+struct vsock_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct vsockmon {
+	struct vsock_tap vt;
+};
+
+enum {
+	IFLA_GENEVE_UNSPEC = 0,
+	IFLA_GENEVE_ID = 1,
+	IFLA_GENEVE_REMOTE = 2,
+	IFLA_GENEVE_TTL = 3,
+	IFLA_GENEVE_TOS = 4,
+	IFLA_GENEVE_PORT = 5,
+	IFLA_GENEVE_COLLECT_METADATA = 6,
+	IFLA_GENEVE_REMOTE6 = 7,
+	IFLA_GENEVE_UDP_CSUM = 8,
+	IFLA_GENEVE_UDP_ZERO_CSUM6_TX = 9,
+	IFLA_GENEVE_UDP_ZERO_CSUM6_RX = 10,
+	IFLA_GENEVE_LABEL = 11,
+	IFLA_GENEVE_TTL_INHERIT = 12,
+	IFLA_GENEVE_DF = 13,
+	IFLA_GENEVE_INNER_PROTO_INHERIT = 14,
+	__IFLA_GENEVE_MAX = 15,
+};
+
+enum ifla_geneve_df {
+	GENEVE_DF_UNSET = 0,
+	GENEVE_DF_SET = 1,
+	GENEVE_DF_INHERIT = 2,
+	__GENEVE_DF_END = 3,
+	GENEVE_DF_MAX = 2,
+};
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+struct genevehdr {
+	u8 opt_len: 6;
+	u8 ver: 2;
+	u8 rsvd1: 6;
+	u8 critical: 1;
+	u8 oam: 1;
+	__be16 proto_type;
+	u8 vni[3];
+	u8 rsvd2;
+	u8 options[0];
+};
+
+struct geneve_net {
+	struct list_head geneve_list;
+	struct list_head sock_list;
+};
+
+struct geneve_dev;
+
+struct geneve_dev_node {
+	struct hlist_node hlist;
+	struct geneve_dev *geneve;
+};
+
+struct geneve_config {
+	struct ip_tunnel_info info;
+	bool collect_md;
+	bool use_udp6_rx_checksums;
+	bool ttl_inherit;
+	enum ifla_geneve_df df;
+	bool inner_proto_inherit;
+};
+
+struct geneve_sock;
+
+struct geneve_dev {
+	struct geneve_dev_node hlist4;
+	struct geneve_dev_node hlist6;
+	struct net *net;
+	struct net_device *dev;
+	struct geneve_sock *sock4;
+	struct geneve_sock *sock6;
+	struct list_head next;
+	struct gro_cells gro_cells;
+	struct geneve_config cfg;
+};
+
+struct geneve_sock {
+	bool collect_md;
+	struct list_head list;
+	struct socket *sock;
+	struct callback_head rcu;
+	int refcnt;
+	struct hlist_head vni_list[1024];
+};
+
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
+enum pm_api_id {
+	PM_GET_API_VERSION = 1,
+	PM_REGISTER_NOTIFIER = 5,
+	PM_FORCE_POWERDOWN = 8,
+	PM_REQUEST_WAKEUP = 10,
+	PM_SYSTEM_SHUTDOWN = 12,
+	PM_REQUEST_NODE = 13,
+	PM_RELEASE_NODE = 14,
+	PM_SET_REQUIREMENT = 15,
+	PM_RESET_ASSERT = 17,
+	PM_RESET_GET_STATUS = 18,
+	PM_MMIO_WRITE = 19,
+	PM_MMIO_READ = 20,
+	PM_PM_INIT_FINALIZE = 21,
+	PM_FPGA_LOAD = 22,
+	PM_FPGA_GET_STATUS = 23,
+	PM_GET_CHIPID = 24,
+	PM_SECURE_SHA = 26,
+	PM_PINCTRL_REQUEST = 28,
+	PM_PINCTRL_RELEASE = 29,
+	PM_PINCTRL_GET_FUNCTION = 30,
+	PM_PINCTRL_SET_FUNCTION = 31,
+	PM_PINCTRL_CONFIG_PARAM_GET = 32,
+	PM_PINCTRL_CONFIG_PARAM_SET = 33,
+	PM_IOCTL = 34,
+	PM_QUERY_DATA = 35,
+	PM_CLOCK_ENABLE = 36,
+	PM_CLOCK_DISABLE = 37,
+	PM_CLOCK_GETSTATE = 38,
+	PM_CLOCK_SETDIVIDER = 39,
+	PM_CLOCK_GETDIVIDER = 40,
+	PM_CLOCK_SETRATE = 41,
+	PM_CLOCK_GETRATE = 42,
+	PM_CLOCK_SETPARENT = 43,
+	PM_CLOCK_GETPARENT = 44,
+	PM_SECURE_AES = 47,
+	PM_FEATURE_CHECK = 63,
+};
+
+enum pm_ioctl_id {
+	IOCTL_GET_RPU_OPER_MODE = 0,
+	IOCTL_SET_RPU_OPER_MODE = 1,
+	IOCTL_RPU_BOOT_ADDR_CONFIG = 2,
+	IOCTL_TCM_COMB_CONFIG = 3,
+	IOCTL_SET_TAPDELAY_BYPASS = 4,
+	IOCTL_SD_DLL_RESET = 6,
+	IOCTL_SET_SD_TAPDELAY = 7,
+	IOCTL_SET_PLL_FRAC_MODE = 8,
+	IOCTL_GET_PLL_FRAC_MODE = 9,
+	IOCTL_SET_PLL_FRAC_DATA = 10,
+	IOCTL_GET_PLL_FRAC_DATA = 11,
+	IOCTL_WRITE_GGS = 12,
+	IOCTL_READ_GGS = 13,
+	IOCTL_WRITE_PGGS = 14,
+	IOCTL_READ_PGGS = 15,
+	IOCTL_SET_BOOT_HEALTH_STATUS = 17,
+	IOCTL_OSPI_MUX_SELECT = 21,
+	IOCTL_REGISTER_SGI = 25,
+	IOCTL_SET_FEATURE_CONFIG = 26,
+	IOCTL_GET_FEATURE_CONFIG = 27,
+	IOCTL_SET_SD_CONFIG = 30,
+	IOCTL_SET_GEM_CONFIG = 31,
+};
+
+enum pm_gem_config_type {
+	GEM_CONFIG_SGMII_MODE = 1,
+	GEM_CONFIG_FIXED = 2,
+};
+
+struct ptp_clock_time {
+	__s64 sec;
+	__u32 nsec;
+	__u32 reserved;
+};
+
+struct ptp_extts_request {
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+	union {
+		struct ptp_clock_time start;
+		struct ptp_clock_time phase;
+	};
+	struct ptp_clock_time period;
+	unsigned int index;
+	unsigned int flags;
+	union {
+		struct ptp_clock_time on;
+		unsigned int rsv[4];
+	};
+};
+
+enum ptp_pin_function {
+	PTP_PF_NONE = 0,
+	PTP_PF_EXTTS = 1,
+	PTP_PF_PEROUT = 2,
+	PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+	char name[64];
+	unsigned int index;
+	unsigned int func;
+	unsigned int chan;
+	unsigned int rsv[5];
+};
+
+struct ptp_clock_request {
+	enum {
+		PTP_CLK_REQ_EXTTS = 0,
+		PTP_CLK_REQ_PEROUT = 1,
+		PTP_CLK_REQ_PPS = 2,
+	} type;
+	union {
+		struct ptp_extts_request extts;
+		struct ptp_perout_request perout;
+	};
+};
+
+struct ptp_clock_info {
+	struct module *owner;
+	char name[32];
+	s32 max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int n_pins;
+	int pps;
+	struct ptp_pin_desc *pin_config;
+	int (*adjfine)(struct ptp_clock_info *, long int);
+	int (*adjphase)(struct ptp_clock_info *, s32);
+	int (*adjtime)(struct ptp_clock_info *, s64);
+	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+	int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+	long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
+struct macb_dma_desc {
+	u32 addr;
+	u32 ctrl;
+};
+
+struct macb_dma_desc_64 {
+	u32 addrh;
+	u32 resvd;
+};
+
+struct macb_tx_skb {
+	struct sk_buff *skb;
+	dma_addr_t mapping;
+	size_t size;
+	bool mapped_as_page;
+};
+
+struct macb_stats {
+	u32 rx_pause_frames;
+	u32 tx_ok;
+	u32 tx_single_cols;
+	u32 tx_multiple_cols;
+	u32 rx_ok;
+	u32 rx_fcs_errors;
+	u32 rx_align_errors;
+	u32 tx_deferred;
+	u32 tx_late_cols;
+	u32 tx_excessive_cols;
+	u32 tx_underruns;
+	u32 tx_carrier_errors;
+	u32 rx_resource_errors;
+	u32 rx_overruns;
+	u32 rx_symbol_errors;
+	u32 rx_oversize_pkts;
+	u32 rx_jabbers;
+	u32 rx_undersize_pkts;
+	u32 sqe_test_errors;
+	u32 rx_length_mismatch;
+	u32 tx_pause_frames;
+};
+
+struct gem_stats {
+	u32 tx_octets_31_0;
+	u32 tx_octets_47_32;
+	u32 tx_frames;
+	u32 tx_broadcast_frames;
+	u32 tx_multicast_frames;
+	u32 tx_pause_frames;
+	u32 tx_64_byte_frames;
+	u32 tx_65_127_byte_frames;
+	u32 tx_128_255_byte_frames;
+	u32 tx_256_511_byte_frames;
+	u32 tx_512_1023_byte_frames;
+	u32 tx_1024_1518_byte_frames;
+	u32 tx_greater_than_1518_byte_frames;
+	u32 tx_underrun;
+	u32 tx_single_collision_frames;
+	u32 tx_multiple_collision_frames;
+	u32 tx_excessive_collisions;
+	u32 tx_late_collisions;
+	u32 tx_deferred_frames;
+	u32 tx_carrier_sense_errors;
+	u32 rx_octets_31_0;
+	u32 rx_octets_47_32;
+	u32 rx_frames;
+	u32 rx_broadcast_frames;
+	u32 rx_multicast_frames;
+	u32 rx_pause_frames;
+	u32 rx_64_byte_frames;
+	u32 rx_65_127_byte_frames;
+	u32 rx_128_255_byte_frames;
+	u32 rx_256_511_byte_frames;
+	u32 rx_512_1023_byte_frames;
+	u32 rx_1024_1518_byte_frames;
+	u32 rx_greater_than_1518_byte_frames;
+	u32 rx_undersized_frames;
+	u32 rx_oversize_frames;
+	u32 rx_jabbers;
+	u32 rx_frame_check_sequence_errors;
+	u32 rx_length_field_frame_errors;
+	u32 rx_symbol_errors;
+	u32 rx_alignment_errors;
+	u32 rx_resource_errors;
+	u32 rx_overruns;
+	u32 rx_ip_header_checksum_errors;
+	u32 rx_tcp_checksum_errors;
+	u32 rx_udp_checksum_errors;
+};
+
+struct gem_statistic {
+	char stat_string[32];
+	int offset;
+	u32 stat_bits;
+};
+
+struct queue_stats {
+	union {
+		long unsigned int first;
+		long unsigned int rx_packets;
+	};
+	long unsigned int rx_bytes;
+	long unsigned int rx_dropped;
+	long unsigned int tx_packets;
+	long unsigned int tx_bytes;
+	long unsigned int tx_dropped;
+};
+
+struct macb;
+
+struct macb_queue;
+
+struct macb_or_gem_ops {
+	int (*mog_alloc_rx_buffers)(struct macb *);
+	void (*mog_free_rx_buffers)(struct macb *);
+	void (*mog_init_rings)(struct macb *);
+	int (*mog_rx)(struct macb_queue *, struct napi_struct *, int);
+};
+
+struct macb_queue {
+	struct macb *bp;
+	int irq;
+	unsigned int ISR;
+	unsigned int IER;
+	unsigned int IDR;
+	unsigned int IMR;
+	unsigned int TBQP;
+	unsigned int TBQPH;
+	unsigned int RBQS;
+	unsigned int RBQP;
+	unsigned int RBQPH;
+	spinlock_t tx_ptr_lock;
+	unsigned int tx_head;
+	unsigned int tx_tail;
+	struct macb_dma_desc *tx_ring;
+	struct macb_tx_skb *tx_skb;
+	dma_addr_t tx_ring_dma;
+	struct work_struct tx_error_task;
+	bool txubr_pending;
+	struct napi_struct napi_tx;
+	dma_addr_t rx_ring_dma;
+	dma_addr_t rx_buffers_dma;
+	unsigned int rx_tail;
+	unsigned int rx_prepared_head;
+	struct macb_dma_desc *rx_ring;
+	struct sk_buff **rx_skbuff;
+	void *rx_buffers;
+	struct napi_struct napi_rx;
+	struct queue_stats stats;
+};
+
+struct ptp_clock;
+
+struct tsu_incr {
+	u32 sub_ns;
+	u32 ns;
+};
+
+struct ethtool_rx_fs_list {
+	struct list_head list;
+	unsigned int count;
+};
+
+struct macb_pm_data {
+	u32 scrt2;
+	u32 usrio;
+};
+
+struct macb_ptp_info;
+
+struct macb_usrio_config;
+
+struct macb {
+	void *regs;
+	bool native_io;
+	u32 (*macb_reg_readl)(struct macb *, int);
+	void (*macb_reg_writel)(struct macb *, int, u32);
+	size_t rx_buffer_size;
+	unsigned int rx_ring_size;
+	unsigned int tx_ring_size;
+	unsigned int num_queues;
+	unsigned int queue_mask;
+	struct macb_queue queues[8];
+	spinlock_t lock;
+	struct platform_device *pdev;
+	struct clk *pclk;
+	struct clk *hclk;
+	struct clk *tx_clk;
+	struct clk *rx_clk;
+	struct clk *tsu_clk;
+	struct net_device *dev;
+	union {
+		struct macb_stats macb;
+		struct gem_stats gem;
+	} hw_stats;
+	struct macb_or_gem_ops macbgem_ops;
+	struct mii_bus *mii_bus;
+	struct phylink *phylink;
+	struct phylink_config phylink_config;
+	struct phylink_pcs phylink_usx_pcs;
+	struct phylink_pcs phylink_sgmii_pcs;
+	u32 caps;
+	unsigned int dma_burst_length;
+	phy_interface_t phy_interface;
+	struct macb_tx_skb rm9200_txq[2];
+	unsigned int max_tx_length;
+	u64 ethtool_stats[91];
+	unsigned int rx_frm_len_mask;
+	unsigned int jumbo_max_len;
+	u32 wol;
+	struct macb_ptp_info *ptp_info;
+	struct phy *sgmii_phy;
+	uint8_t hw_dma_cap;
+	spinlock_t tsu_clk_lock;
+	unsigned int tsu_rate;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_clock_info;
+	struct tsu_incr tsu_incr;
+	struct hwtstamp_config tstamp_config;
+	struct ethtool_rx_fs_list rx_fs_list;
+	spinlock_t rx_fs_lock;
+	unsigned int max_tuples;
+	struct tasklet_struct hresp_err_tasklet;
+	int rx_bd_rd_prefetch;
+	int tx_bd_rd_prefetch;
+	u32 rx_intr_mask;
+	struct macb_pm_data pm_data;
+	const struct macb_usrio_config *usrio;
+};
+
+struct macb_ptp_info {
+	void (*ptp_init)(struct net_device *);
+	void (*ptp_remove)(struct net_device *);
+	s32 (*get_ptp_max_adj)();
+	unsigned int (*get_tsu_rate)(struct macb *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_hwtst)(struct net_device *, struct ifreq *);
+	int (*set_hwtst)(struct net_device *, struct ifreq *, int);
+};
+
+struct macb_usrio_config {
+	u32 mii;
+	u32 rmii;
+	u32 rgmii;
+	u32 refclk;
+	u32 hdfctlen;
+};
+
+struct macb_config {
+	u32 caps;
+	unsigned int dma_burst_length;
+	int (*clk_init)(struct platform_device *, struct clk **, struct clk **, struct clk **, struct clk **, struct clk **);
+	int (*init)(struct platform_device *);
+	int jumbo_max_len;
+	const struct macb_usrio_config *usrio;
+};
+
+struct ethtool_rx_fs_item {
+	struct ethtool_rx_flow_spec fs;
+	struct list_head list;
+};
+
+struct macb_platform_data {
+	struct clk *pclk;
+	struct clk *hclk;
+};
+
+struct sifive_fu540_macb_mgmt {
+	void *reg;
+	long unsigned int rate;
+	struct clk_hw hw;
+};
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum e1000_mac_type {
+	e1000_82571 = 0,
+	e1000_82572 = 1,
+	e1000_82573 = 2,
+	e1000_82574 = 3,
+	e1000_82583 = 4,
+	e1000_80003es2lan = 5,
+	e1000_ich8lan = 6,
+	e1000_ich9lan = 7,
+	e1000_ich10lan = 8,
+	e1000_pchlan = 9,
+	e1000_pch2lan = 10,
+	e1000_pch_lpt = 11,
+	e1000_pch_spt = 12,
+	e1000_pch_cnp = 13,
+	e1000_pch_tgp = 14,
+	e1000_pch_adp = 15,
+	e1000_pch_mtp = 16,
+	e1000_pch_lnp = 17,
+	e1000_pch_ptp = 18,
+};
+
+enum e1000_media_type {
+	e1000_media_type_unknown = 0,
+	e1000_media_type_copper = 1,
+	e1000_media_type_fiber = 2,
+	e1000_media_type_internal_serdes = 3,
+	e1000_num_media_types = 4,
+};
+
+enum e1000_nvm_type {
+	e1000_nvm_unknown = 0,
+	e1000_nvm_none = 1,
+	e1000_nvm_eeprom_spi = 2,
+	e1000_nvm_flash_hw = 3,
+	e1000_nvm_flash_sw = 4,
+};
+
+enum e1000_nvm_override {
+	e1000_nvm_override_none = 0,
+	e1000_nvm_override_spi_small = 1,
+	e1000_nvm_override_spi_large = 2,
+};
+
+enum e1000_phy_type {
+	e1000_phy_unknown = 0,
+	e1000_phy_none = 1,
+	e1000_phy_m88 = 2,
+	e1000_phy_igp = 3,
+	e1000_phy_igp_2 = 4,
+	e1000_phy_gg82563 = 5,
+	e1000_phy_igp_3 = 6,
+	e1000_phy_ife = 7,
+	e1000_phy_bm = 8,
+	e1000_phy_82578 = 9,
+	e1000_phy_82577 = 10,
+	e1000_phy_82579 = 11,
+	e1000_phy_i217 = 12,
+};
+
+enum e1000_bus_width {
+	e1000_bus_width_unknown = 0,
+	e1000_bus_width_pcie_x1 = 1,
+	e1000_bus_width_pcie_x2 = 2,
+	e1000_bus_width_pcie_x4 = 4,
+	e1000_bus_width_pcie_x8 = 8,
+	e1000_bus_width_32 = 9,
+	e1000_bus_width_64 = 10,
+	e1000_bus_width_reserved = 11,
+};
+
+enum e1000_1000t_rx_status {
+	e1000_1000t_rx_status_not_ok = 0,
+	e1000_1000t_rx_status_ok = 1,
+	e1000_1000t_rx_status_undefined = 255,
+};
+
+enum e1000_rev_polarity {
+	e1000_rev_polarity_normal = 0,
+	e1000_rev_polarity_reversed = 1,
+	e1000_rev_polarity_undefined = 255,
+};
+
+enum e1000_fc_mode {
+	e1000_fc_none = 0,
+	e1000_fc_rx_pause = 1,
+	e1000_fc_tx_pause = 2,
+	e1000_fc_full = 3,
+	e1000_fc_default = 255,
+};
+
+enum e1000_ms_type {
+	e1000_ms_hw_default = 0,
+	e1000_ms_force_master = 1,
+	e1000_ms_force_slave = 2,
+	e1000_ms_auto = 3,
+};
+
+enum e1000_smart_speed {
+	e1000_smart_speed_default = 0,
+	e1000_smart_speed_on = 1,
+	e1000_smart_speed_off = 2,
+};
+
+enum e1000_serdes_link_state {
+	e1000_serdes_link_down = 0,
+	e1000_serdes_link_autoneg_progress = 1,
+	e1000_serdes_link_autoneg_complete = 2,
+	e1000_serdes_link_forced_up = 3,
+};
+
+struct e1000_hw_stats {
+	u64 crcerrs;
+	u64 algnerrc;
+	u64 symerrs;
+	u64 rxerrc;
+	u64 mpc;
+	u64 scc;
+	u64 ecol;
+	u64 mcc;
+	u64 latecol;
+	u64 colc;
+	u64 dc;
+	u64 tncrs;
+	u64 sec;
+	u64 cexterr;
+	u64 rlec;
+	u64 xonrxc;
+	u64 xontxc;
+	u64 xoffrxc;
+	u64 xofftxc;
+	u64 fcruc;
+	u64 prc64;
+	u64 prc127;
+	u64 prc255;
+	u64 prc511;
+	u64 prc1023;
+	u64 prc1522;
+	u64 gprc;
+	u64 bprc;
+	u64 mprc;
+	u64 gptc;
+	u64 gorc;
+	u64 gotc;
+	u64 rnbc;
+	u64 ruc;
+	u64 rfc;
+	u64 roc;
+	u64 rjc;
+	u64 mgprc;
+	u64 mgpdc;
+	u64 mgptc;
+	u64 tor;
+	u64 tot;
+	u64 tpr;
+	u64 tpt;
+	u64 ptc64;
+	u64 ptc127;
+	u64 ptc255;
+	u64 ptc511;
+	u64 ptc1023;
+	u64 ptc1522;
+	u64 mptc;
+	u64 bptc;
+	u64 tsctc;
+	u64 tsctfc;
+	u64 iac;
+	u64 icrxptc;
+	u64 icrxatc;
+	u64 ictxptc;
+	u64 ictxatc;
+	u64 ictxqec;
+	u64 ictxqmtc;
+	u64 icrxdmtc;
+	u64 icrxoc;
+};
+
+struct e1000_phy_stats {
+	u32 idle_errors;
+	u32 receive_errors;
+};
+
+struct e1000_host_mng_dhcp_cookie {
+	u32 signature;
+	u8 status;
+	u8 reserved0;
+	u16 vlan_id;
+	u32 reserved1;
+	u16 reserved2;
+	u8 reserved3;
+	u8 checksum;
+};
+
+struct e1000_hw;
+
+struct e1000_mac_operations {
+	s32 (*id_led_init)(struct e1000_hw *);
+	s32 (*blink_led)(struct e1000_hw *);
+	bool (*check_mng_mode)(struct e1000_hw *);
+	s32 (*check_for_link)(struct e1000_hw *);
+	s32 (*cleanup_led)(struct e1000_hw *);
+	void (*clear_hw_cntrs)(struct e1000_hw *);
+	void (*clear_vfta)(struct e1000_hw *);
+	s32 (*get_bus_info)(struct e1000_hw *);
+	void (*set_lan_id)(struct e1000_hw *);
+	s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
+	s32 (*led_on)(struct e1000_hw *);
+	s32 (*led_off)(struct e1000_hw *);
+	void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
+	s32 (*reset_hw)(struct e1000_hw *);
+	s32 (*init_hw)(struct e1000_hw *);
+	s32 (*setup_link)(struct e1000_hw *);
+	s32 (*setup_physical_interface)(struct e1000_hw *);
+	s32 (*setup_led)(struct e1000_hw *);
+	void (*write_vfta)(struct e1000_hw *, u32, u32);
+	void (*config_collision_dist)(struct e1000_hw *);
+	int (*rar_set)(struct e1000_hw *, u8 *, u32);
+	s32 (*read_mac_addr)(struct e1000_hw *);
+	u32 (*rar_get_count)(struct e1000_hw *);
+};
+
+struct e1000_mac_info {
+	struct e1000_mac_operations ops;
+	u8 addr[6];
+	u8 perm_addr[6];
+	enum e1000_mac_type type;
+	u32 collision_delta;
+	u32 ledctl_default;
+	u32 ledctl_mode1;
+	u32 ledctl_mode2;
+	u32 mc_filter_type;
+	u32 tx_packet_delta;
+	u32 txcw;
+	u16 current_ifs_val;
+	u16 ifs_max_val;
+	u16 ifs_min_val;
+	u16 ifs_ratio;
+	u16 ifs_step_size;
+	u16 mta_reg_count;
+	u32 mta_shadow[128];
+	u16 rar_entry_count;
+	u8 forced_speed_duplex;
+	bool adaptive_ifs;
+	bool has_fwsm;
+	bool arc_subsystem_valid;
+	bool autoneg;
+	bool autoneg_failed;
+	bool get_link_status;
+	bool in_ifs_mode;
+	bool serdes_has_link;
+	bool tx_pkt_filtering;
+	enum e1000_serdes_link_state serdes_link_state;
+};
+
+struct e1000_fc_info {
+	u32 high_water;
+	u32 low_water;
+	u16 pause_time;
+	u16 refresh_time;
+	bool send_xon;
+	bool strict_ieee;
+	enum e1000_fc_mode current_mode;
+	enum e1000_fc_mode requested_mode;
+};
+
+struct e1000_phy_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*cfg_on_link_up)(struct e1000_hw *);
+	s32 (*check_polarity)(struct e1000_hw *);
+	s32 (*check_reset_block)(struct e1000_hw *);
+	s32 (*commit)(struct e1000_hw *);
+	s32 (*force_speed_duplex)(struct e1000_hw *);
+	s32 (*get_cfg_done)(struct e1000_hw *);
+	s32 (*get_cable_length)(struct e1000_hw *);
+	s32 (*get_info)(struct e1000_hw *);
+	s32 (*set_page)(struct e1000_hw *, u16);
+	s32 (*read_reg)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
+	s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *);
+	void (*release)(struct e1000_hw *);
+	s32 (*reset)(struct e1000_hw *);
+	s32 (*set_d0_lplu_state)(struct e1000_hw *, bool);
+	s32 (*set_d3_lplu_state)(struct e1000_hw *, bool);
+	s32 (*write_reg)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_locked)(struct e1000_hw *, u32, u16);
+	s32 (*write_reg_page)(struct e1000_hw *, u32, u16);
+	void (*power_up)(struct e1000_hw *);
+	void (*power_down)(struct e1000_hw *);
+};
+
+struct e1000_phy_info {
+	struct e1000_phy_operations ops;
+	enum e1000_phy_type type;
+	enum e1000_1000t_rx_status local_rx;
+	enum e1000_1000t_rx_status remote_rx;
+	enum e1000_ms_type ms_type;
+	enum e1000_ms_type original_ms_type;
+	enum e1000_rev_polarity cable_polarity;
+	enum e1000_smart_speed smart_speed;
+	u32 addr;
+	u32 id;
+	u32 reset_delay_us;
+	u32 revision;
+	enum e1000_media_type media_type;
+	u16 autoneg_advertised;
+	u16 autoneg_mask;
+	u16 cable_length;
+	u16 max_cable_length;
+	u16 min_cable_length;
+	u8 mdix;
+	bool disable_polarity_correction;
+	bool is_mdix;
+	bool polarity_correction;
+	bool speed_downgraded;
+	bool autoneg_wait_to_complete;
+};
+
+struct e1000_nvm_operations {
+	s32 (*acquire)(struct e1000_hw *);
+	s32 (*read)(struct e1000_hw *, u16, u16, u16 *);
+	void (*release)(struct e1000_hw *);
+	void (*reload)(struct e1000_hw *);
+	s32 (*update)(struct e1000_hw *);
+	s32 (*valid_led_default)(struct e1000_hw *, u16 *);
+	s32 (*validate)(struct e1000_hw *);
+	s32 (*write)(struct e1000_hw *, u16, u16, u16 *);
+};
+
+struct e1000_nvm_info {
+	struct e1000_nvm_operations ops;
+	enum e1000_nvm_type type;
+	enum e1000_nvm_override override;
+	u32 flash_bank_size;
+	u32 flash_base_addr;
+	u16 word_size;
+	u16 delay_usec;
+	u16 address_bits;
+	u16 opcode_bits;
+	u16 page_size;
+};
+
+struct e1000_bus_info {
+	enum e1000_bus_width width;
+	u16 func;
+};
+
+struct e1000_dev_spec_82571 {
+	bool laa_is_present;
+	u32 smb_counter;
+};
+
+struct e1000_dev_spec_80003es2lan {
+	bool mdic_wa_enable;
+};
+
+struct e1000_shadow_ram {
+	u16 value;
+	bool modified;
+};
+
+enum e1000_ulp_state {
+	e1000_ulp_state_unknown = 0,
+	e1000_ulp_state_off = 1,
+	e1000_ulp_state_on = 2,
+};
+
+struct e1000_dev_spec_ich8lan {
+	bool kmrn_lock_loss_workaround_enabled;
+	struct e1000_shadow_ram shadow_ram[2048];
+	bool nvm_k1_enabled;
+	bool eee_disable;
+	u16 eee_lp_ability;
+	enum e1000_ulp_state ulp_state;
+};
+
+struct e1000_adapter;
+
+struct e1000_hw {
+	struct e1000_adapter *adapter;
+	void *hw_addr;
+	void *flash_address;
+	struct e1000_mac_info mac;
+	struct e1000_fc_info fc;
+	struct e1000_phy_info phy;
+	struct e1000_nvm_info nvm;
+	struct e1000_bus_info bus;
+	struct e1000_host_mng_dhcp_cookie mng_cookie;
+	union {
+		struct e1000_dev_spec_82571 e82571;
+		struct e1000_dev_spec_80003es2lan e80003es2lan;
+		struct e1000_dev_spec_ich8lan ich8lan;
+	} dev_spec;
+};
+
+struct e1000_phy_regs {
+	u16 bmcr;
+	u16 bmsr;
+	u16 advertise;
+	u16 lpa;
+	u16 expansion;
+	u16 ctrl1000;
+	u16 stat1000;
+	u16 estatus;
+};
+
+struct e1000_buffer;
+
+struct e1000_ring {
+	struct e1000_adapter *adapter;
+	void *desc;
+	dma_addr_t dma;
+	unsigned int size;
+	unsigned int count;
+	u16 next_to_use;
+	u16 next_to_clean;
+	void *head;
+	void *tail;
+	struct e1000_buffer *buffer_info;
+	char name[21];
+	u32 ims_val;
+	u32 itr_val;
+	void *itr_register;
+	int set_itr;
+	struct sk_buff *rx_skb_top;
+};
+
+struct e1000_info;
+
+struct e1000_adapter {
+	struct timer_list watchdog_timer;
+	struct timer_list phy_info_timer;
+	struct timer_list blink_timer;
+	struct work_struct reset_task;
+	struct work_struct watchdog_task;
+	const struct e1000_info *ei;
+	long unsigned int active_vlans[64];
+	u32 bd_number;
+	u32 rx_buffer_len;
+	u16 mng_vlan_id;
+	u16 link_speed;
+	u16 link_duplex;
+	u16 eeprom_vers;
+	long unsigned int state;
+	u32 itr;
+	u32 itr_setting;
+	u16 tx_itr;
+	u16 rx_itr;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct e1000_ring *tx_ring;
+	u32 tx_fifo_limit;
+	struct napi_struct napi;
+	unsigned int uncorr_errors;
+	unsigned int corr_errors;
+	unsigned int restart_queue;
+	u32 txd_cmd;
+	bool detect_tx_hung;
+	bool tx_hang_recheck;
+	u8 tx_timeout_factor;
+	u32 tx_int_delay;
+	u32 tx_abs_int_delay;
+	unsigned int total_tx_bytes;
+	unsigned int total_tx_packets;
+	unsigned int total_rx_bytes;
+	unsigned int total_rx_packets;
+	u64 tpt_old;
+	u64 colc_old;
+	u32 gotc;
+	u64 gotc_old;
+	u32 tx_timeout_count;
+	u32 tx_fifo_head;
+	u32 tx_head_addr;
+	u32 tx_fifo_size;
+	u32 tx_dma_failed;
+	u32 tx_hwtstamp_timeouts;
+	u32 tx_hwtstamp_skipped;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	bool (*clean_rx)(struct e1000_ring *, int *, int);
+	void (*alloc_rx_buf)(struct e1000_ring *, int, gfp_t);
+	struct e1000_ring *rx_ring;
+	u32 rx_int_delay;
+	u32 rx_abs_int_delay;
+	u64 hw_csum_err;
+	u64 hw_csum_good;
+	u64 rx_hdr_split;
+	u32 gorc;
+	u64 gorc_old;
+	u32 alloc_rx_buff_failed;
+	u32 rx_dma_failed;
+	u32 rx_hwtstamp_cleared;
+	unsigned int rx_ps_pages;
+	u16 rx_ps_bsize0;
+	u32 max_frame_size;
+	u32 min_frame_size;
+	struct net_device *netdev;
+	struct pci_dev *pdev;
+	struct e1000_hw hw;
+	spinlock_t stats64_lock;
+	struct e1000_hw_stats stats;
+	struct e1000_phy_info phy_info;
+	struct e1000_phy_stats phy_stats;
+	struct e1000_phy_regs phy_regs;
+	struct e1000_ring test_tx_ring;
+	struct e1000_ring test_rx_ring;
+	u32 test_icr;
+	u32 msg_enable;
+	unsigned int num_vectors;
+	struct msix_entry *msix_entries;
+	int int_mode;
+	u32 eiac_mask;
+	u32 eeprom_wol;
+	u32 wol;
+	u32 pba;
+	u32 max_hw_frame_size;
+	bool fc_autoneg;
+	unsigned int flags;
+	unsigned int flags2;
+	struct work_struct downshift_task;
+	struct work_struct update_phy_task;
+	struct work_struct print_hang_task;
+	int phy_hang_count;
+	u16 tx_ring_count;
+	u16 rx_ring_count;
+	struct hwtstamp_config hwtstamp_config;
+	struct delayed_work systim_overflow_work;
+	struct sk_buff *tx_hwtstamp_skb;
+	long unsigned int tx_hwtstamp_start;
+	struct work_struct tx_hwtstamp_work;
+	spinlock_t systim_lock;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	struct ptp_clock *ptp_clock;
+	struct ptp_clock_info ptp_clock_info;
+	struct pm_qos_request pm_qos_req;
+	long int ptp_delta;
+	u16 eee_advert;
+	long: 48;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct e1000_ps_page {
+	struct page *page;
+	u64 dma;
+};
+
+struct e1000_buffer {
+	dma_addr_t dma;
+	struct sk_buff *skb;
+	union {
+		struct {
+			long unsigned int time_stamp;
+			u16 length;
+			u16 next_to_watch;
+			unsigned int segs;
+			unsigned int bytecount;
+			u16 mapped_as_page;
+		};
+		struct {
+			struct e1000_ps_page *ps_pages;
+			struct page *page;
+		};
+	};
+};
+
+struct e1000_info {
+	enum e1000_mac_type mac;
+	unsigned int flags;
+	unsigned int flags2;
+	u32 pba;
+	u32 max_hw_frame_size;
+	s32 (*get_variants)(struct e1000_adapter *);
+	const struct e1000_mac_operations *mac_ops;
+	const struct e1000_phy_operations *phy_ops;
+	const struct e1000_nvm_operations *nvm_ops;
+};
+
+enum e1000_state_t {
+	__E1000_TESTING = 0,
+	__E1000_RESETTING = 1,
+	__E1000_ACCESS_SHARED_RESOURCE = 2,
+	__E1000_DOWN = 3,
+};
+
+struct ich8_hsfsts {
+	u16 flcdone: 1;
+	u16 flcerr: 1;
+	u16 dael: 1;
+	u16 berasesz: 2;
+	u16 flcinprog: 1;
+	u16 reserved1: 2;
+	u16 reserved2: 6;
+	u16 fldesvalid: 1;
+	u16 flockdn: 1;
+};
+
+union ich8_hws_flash_status {
+	struct ich8_hsfsts hsf_status;
+	u16 regval;
+};
+
+struct ich8_hsflctl {
+	u16 flcgo: 1;
+	u16 flcycle: 2;
+	u16 reserved: 5;
+	u16 fldbcount: 2;
+	u16 flockdn: 6;
+};
+
+union ich8_hws_flash_ctrl {
+	struct ich8_hsflctl hsf_ctrl;
+	u16 regval;
+};
+
+struct ich8_pr {
+	u32 base: 13;
+	u32 reserved1: 2;
+	u32 rpe: 1;
+	u32 limit: 13;
+	u32 reserved2: 2;
+	u32 wpe: 1;
+};
+
+union ich8_flash_protected_range {
+	struct ich8_pr range;
+	u32 regval;
+};
+
+struct e1000_host_mng_command_header {
+	u8 command_id;
+	u8 checksum;
+	u16 reserved1;
+	u16 reserved2;
+	u16 command_length;
+};
+
+enum e1000_mng_mode {
+	e1000_mng_mode_none = 0,
+	e1000_mng_mode_asf = 1,
+	e1000_mng_mode_pt = 2,
+	e1000_mng_mode_ipmi = 3,
+	e1000_mng_mode_host_if_only = 4,
+};
+
+struct e1000_opt_list {
+	int i;
+	char *str;
+};
+
+struct e1000_option {
+	enum {
+		enable_option = 0,
+		range_option = 1,
+		list_option = 2,
+	} type;
+	const char *name;
+	const char *err;
+	int def;
+	union {
+		struct {
+			int min;
+			int max;
+		} r;
+		struct {
+			int nr;
+			struct e1000_opt_list *p;
+		} l;
+	} arg;
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
+};
+
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
+};
+
+union e1000_rx_desc_extended {
+	struct {
+		__le64 buffer_addr;
+		__le64 reserved;
+	} read;
+	struct {
+		struct {
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length;
+			__le16 vlan;
+		} upper;
+	} wb;
+};
+
+struct e1000_tx_desc {
+	__le64 buffer_addr;
+	union {
+		__le32 data;
+		struct {
+			__le16 length;
+			u8 cso;
+			u8 cmd;
+		} flags;
+	} lower;
+	union {
+		__le32 data;
+		struct {
+			u8 status;
+			u8 css;
+			__le16 special;
+		} fields;
+	} upper;
+};
+
+enum {
+	NETDEV_STATS = 0,
+	E1000_STATS = 1,
+};
+
+struct e1000_stats {
+	char stat_string[32];
+	int type;
+	int sizeof_stat;
+	int stat_offset;
+};
+
+struct rtl8169_private;
+
+typedef void (*rtl_fw_write_t)(struct rtl8169_private *, int, int);
+
+typedef int (*rtl_fw_read_t)(struct rtl8169_private *, int);
+
+struct rtl_fw_phy_action {
+	__le32 *code;
+	size_t size;
+};
+
+struct rtl_fw {
+	rtl_fw_write_t phy_write;
+	rtl_fw_read_t phy_read;
+	rtl_fw_write_t mac_mcu_write;
+	rtl_fw_read_t mac_mcu_read;
+	const struct firmware *fw;
+	const char *fw_name;
+	struct device *dev;
+	char version[32];
+	struct rtl_fw_phy_action phy_action;
+};
+
+enum rtl_fw_opcode {
+	PHY_READ = 0,
+	PHY_DATA_OR = 1,
+	PHY_DATA_AND = 2,
+	PHY_BJMPN = 3,
+	PHY_MDIO_CHG = 4,
+	PHY_CLEAR_READCOUNT = 7,
+	PHY_WRITE = 8,
+	PHY_READCOUNT_EQ_SKIP = 9,
+	PHY_COMP_EQ_SKIPN = 10,
+	PHY_COMP_NEQ_SKIPN = 11,
+	PHY_WRITE_PREVIOUS = 12,
+	PHY_SKIPN = 13,
+	PHY_DELAY_MS = 14,
+};
+
+struct fw_info {
+	u32 magic;
+	char version[32];
+	__le32 fw_start;
+	__le32 fw_len;
+	u8 chksum;
+} __attribute__((packed));
+
+enum mac_version {
+	RTL_GIGA_MAC_VER_02 = 0,
+	RTL_GIGA_MAC_VER_03 = 1,
+	RTL_GIGA_MAC_VER_04 = 2,
+	RTL_GIGA_MAC_VER_05 = 3,
+	RTL_GIGA_MAC_VER_06 = 4,
+	RTL_GIGA_MAC_VER_07 = 5,
+	RTL_GIGA_MAC_VER_08 = 6,
+	RTL_GIGA_MAC_VER_09 = 7,
+	RTL_GIGA_MAC_VER_10 = 8,
+	RTL_GIGA_MAC_VER_11 = 9,
+	RTL_GIGA_MAC_VER_14 = 10,
+	RTL_GIGA_MAC_VER_17 = 11,
+	RTL_GIGA_MAC_VER_18 = 12,
+	RTL_GIGA_MAC_VER_19 = 13,
+	RTL_GIGA_MAC_VER_20 = 14,
+	RTL_GIGA_MAC_VER_21 = 15,
+	RTL_GIGA_MAC_VER_22 = 16,
+	RTL_GIGA_MAC_VER_23 = 17,
+	RTL_GIGA_MAC_VER_24 = 18,
+	RTL_GIGA_MAC_VER_25 = 19,
+	RTL_GIGA_MAC_VER_26 = 20,
+	RTL_GIGA_MAC_VER_28 = 21,
+	RTL_GIGA_MAC_VER_29 = 22,
+	RTL_GIGA_MAC_VER_30 = 23,
+	RTL_GIGA_MAC_VER_31 = 24,
+	RTL_GIGA_MAC_VER_32 = 25,
+	RTL_GIGA_MAC_VER_33 = 26,
+	RTL_GIGA_MAC_VER_34 = 27,
+	RTL_GIGA_MAC_VER_35 = 28,
+	RTL_GIGA_MAC_VER_36 = 29,
+	RTL_GIGA_MAC_VER_37 = 30,
+	RTL_GIGA_MAC_VER_38 = 31,
+	RTL_GIGA_MAC_VER_39 = 32,
+	RTL_GIGA_MAC_VER_40 = 33,
+	RTL_GIGA_MAC_VER_42 = 34,
+	RTL_GIGA_MAC_VER_43 = 35,
+	RTL_GIGA_MAC_VER_44 = 36,
+	RTL_GIGA_MAC_VER_46 = 37,
+	RTL_GIGA_MAC_VER_48 = 38,
+	RTL_GIGA_MAC_VER_51 = 39,
+	RTL_GIGA_MAC_VER_52 = 40,
+	RTL_GIGA_MAC_VER_53 = 41,
+	RTL_GIGA_MAC_VER_61 = 42,
+	RTL_GIGA_MAC_VER_63 = 43,
+	RTL_GIGA_MAC_NONE = 44,
+};
+
+typedef void (*rtl_phy_cfg_fct)(struct rtl8169_private *, struct phy_device *);
+
+struct phy_reg {
+	u16 reg;
+	u16 val;
+};
+
+struct netdev_lag_lower_state_info {
+	u8 link_up: 1;
+	u8 tx_enabled: 1;
+};
+
+struct net_failover_info {
+	struct net_device *primary_dev;
+	struct net_device *standby_dev;
+	struct rtnl_link_stats64 primary_stats;
+	struct rtnl_link_stats64 standby_stats;
+	struct rtnl_link_stats64 failover_stats;
+	spinlock_t stats_lock;
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+enum rtl_dash_type {
+	RTL_DASH_NONE = 0,
+	RTL_DASH_DP = 1,
+	RTL_DASH_EP = 2,
+};
+
+struct ring_info {
+	struct sk_buff *skb;
+	u32 len;
+};
+
+struct rtl8169_tc_offsets {
+	bool inited;
+	__le64 tx_errors;
+	__le32 tx_multi_collision;
+	__le16 tx_aborted;
+	__le16 rx_missed;
+};
+
+struct TxDesc;
+
+struct RxDesc;
+
+struct rtl8169_counters;
+
+struct rtl8169_private {
+	void *mmio_addr;
+	struct pci_dev *pci_dev;
+	struct net_device *dev;
+	struct phy_device *phydev;
+	struct napi_struct napi;
+	enum mac_version mac_version;
+	enum rtl_dash_type dash_type;
+	u32 cur_rx;
+	u32 cur_tx;
+	u32 dirty_tx;
+	struct TxDesc *TxDescArray;
+	struct RxDesc *RxDescArray;
+	dma_addr_t TxPhyAddr;
+	dma_addr_t RxPhyAddr;
+	struct page *Rx_databuff[256];
+	struct ring_info tx_skb[256];
+	u16 cp_cmd;
+	u32 irq_mask;
+	int irq;
+	struct clk *clk;
+	struct {
+		long unsigned int flags[1];
+		struct work_struct work;
+	} wk;
+	unsigned int supports_gmii: 1;
+	unsigned int aspm_manageable: 1;
+	dma_addr_t counters_phys_addr;
+	struct rtl8169_counters *counters;
+	struct rtl8169_tc_offsets tc_offset;
+	u32 saved_wolopts;
+	int eee_adv;
+	const char *fw_name;
+	struct rtl_fw *rtl_fw;
+	u32 ocp_base;
+};
+
+enum rtl_registers {
+	MAC0 = 0,
+	MAC4 = 4,
+	MAR0 = 8,
+	CounterAddrLow = 16,
+	CounterAddrHigh = 20,
+	TxDescStartAddrLow = 32,
+	TxDescStartAddrHigh = 36,
+	TxHDescStartAddrLow = 40,
+	TxHDescStartAddrHigh = 44,
+	FLASH = 48,
+	ERSR = 54,
+	ChipCmd = 55,
+	TxPoll = 56,
+	IntrMask = 60,
+	IntrStatus = 62,
+	TxConfig = 64,
+	RxConfig = 68,
+	Cfg9346 = 80,
+	Config0 = 81,
+	Config1 = 82,
+	Config2 = 83,
+	Config3 = 84,
+	Config4 = 85,
+	Config5 = 86,
+	PHYAR = 96,
+	PHYstatus = 108,
+	RxMaxSize = 218,
+	CPlusCmd = 224,
+	IntrMitigate = 226,
+	RxDescAddrLow = 228,
+	RxDescAddrHigh = 232,
+	EarlyTxThres = 236,
+	MaxTxPacketSize = 236,
+	FuncEvent = 240,
+	FuncEventMask = 244,
+	FuncPresetState = 248,
+	IBCR0 = 248,
+	IBCR2 = 249,
+	IBIMR0 = 250,
+	IBISR0 = 251,
+	FuncForceEvent = 252,
+};
+
+enum rtl8168_8101_registers {
+	CSIDR = 100,
+	CSIAR = 104,
+	PMCH = 111,
+	EPHYAR = 128,
+	DLLPR = 208,
+	DBG_REG = 209,
+	TWSI = 210,
+	MCU = 211,
+	EFUSEAR = 220,
+	MISC_1 = 242,
+};
+
+enum rtl8168_registers {
+	LED_FREQ = 26,
+	EEE_LED = 27,
+	ERIDR = 112,
+	ERIAR = 116,
+	EPHY_RXER_NUM = 124,
+	OCPDR = 176,
+	OCPAR = 180,
+	GPHY_OCP = 184,
+	RDSAR1 = 208,
+	MISC = 240,
+};
+
+enum rtl8125_registers {
+	IntrMask_8125 = 56,
+	IntrStatus_8125 = 60,
+	TxPoll_8125 = 144,
+	MAC0_BKP = 6624,
+	EEE_TXIDLE_TIMER_8125 = 24648,
+};
+
+enum rtl_register_content {
+	SYSErr = 32768,
+	PCSTimeout = 16384,
+	SWInt = 256,
+	TxDescUnavail = 128,
+	RxFIFOOver = 64,
+	LinkChg = 32,
+	RxOverflow = 16,
+	TxErr = 8,
+	TxOK = 4,
+	RxErr = 2,
+	RxOK = 1,
+	RxRWT = 4194304,
+	RxRES = 2097152,
+	RxRUNT = 1048576,
+	RxCRC = 524288,
+	StopReq = 128,
+	CmdReset = 16,
+	CmdRxEnb = 8,
+	CmdTxEnb = 4,
+	RxBufEmpty = 1,
+	HPQ = 128,
+	NPQ = 64,
+	FSWInt = 1,
+	Cfg9346_Lock = 0,
+	Cfg9346_Unlock = 192,
+	AcceptErr = 32,
+	AcceptRunt = 16,
+	AcceptBroadcast = 8,
+	AcceptMulticast = 4,
+	AcceptMyPhys = 2,
+	AcceptAllPhys = 1,
+	TxInterFrameGapShift = 24,
+	TxDMAShift = 8,
+	LEDS1 = 128,
+	LEDS0 = 64,
+	Speed_down = 16,
+	MEMMAP = 8,
+	IOMAP = 4,
+	VPD = 2,
+	PMEnable = 1,
+	ClkReqEn = 128,
+	MSIEnable = 32,
+	PCI_Clock_66MHz = 1,
+	PCI_Clock_33MHz = 0,
+	MagicPacket = 32,
+	LinkUp = 16,
+	Jumbo_En0 = 4,
+	Rdy_to_L23 = 2,
+	Beacon_en = 1,
+	Jumbo_En1 = 2,
+	BWF = 64,
+	MWF = 32,
+	UWF = 16,
+	Spi_en = 8,
+	LanWake = 2,
+	PMEStatus = 1,
+	ASPM_en = 1,
+	EnableBist = 32768,
+	Mac_dbgo_oe = 16384,
+	EnAnaPLL = 16384,
+	Normal_mode = 8192,
+	Force_half_dup = 4096,
+	Force_rxflow_en = 2048,
+	Force_txflow_en = 1024,
+	Cxpl_dbg_sel = 512,
+	ASF = 256,
+	PktCntrDisable = 128,
+	Mac_dbgo_sel = 28,
+	RxVlan = 64,
+	RxChkSum = 32,
+	PCIDAC = 16,
+	PCIMulRW = 8,
+	TBI_Enable = 128,
+	TxFlowCtrl = 64,
+	RxFlowCtrl = 32,
+	_1000bpsF = 16,
+	_100bps = 8,
+	_10bps = 4,
+	LinkStatus = 2,
+	FullDup = 1,
+	CounterReset = 1,
+	CounterDump = 8,
+	MagicPacket_v2 = 65536,
+};
+
+enum rtl_desc_bit {
+	DescOwn = 2147483648,
+	RingEnd = 1073741824,
+	FirstFrag = 536870912,
+	LastFrag = 268435456,
+};
+
+enum rtl_tx_desc_bit {
+	TD_LSO = 134217728,
+	TxVlanTag = 131072,
+};
+
+enum rtl_tx_desc_bit_0 {
+	TD0_TCP_CS = 65536,
+	TD0_UDP_CS = 131072,
+	TD0_IP_CS = 262144,
+};
+
+enum rtl_tx_desc_bit_1 {
+	TD1_GTSENV4 = 67108864,
+	TD1_GTSENV6 = 33554432,
+	TD1_IPv6_CS = 268435456,
+	TD1_IPv4_CS = 536870912,
+	TD1_TCP_CS = 1073741824,
+	TD1_UDP_CS = 2147483648,
+};
+
+enum rtl_rx_desc_bit {
+	PID1 = 262144,
+	PID0 = 131072,
+	IPFail = 65536,
+	UDPFail = 32768,
+	TCPFail = 16384,
+	RxVlanTag = 65536,
+};
+
+struct TxDesc {
+	__le32 opts1;
+	__le32 opts2;
+	__le64 addr;
+};
+
+struct RxDesc {
+	__le32 opts1;
+	__le32 opts2;
+	__le64 addr;
+};
+
+struct rtl8169_counters {
+	__le64 tx_packets;
+	__le64 rx_packets;
+	__le64 tx_errors;
+	__le32 rx_errors;
+	__le16 rx_missed;
+	__le16 align_errors;
+	__le32 tx_one_collision;
+	__le32 tx_multi_collision;
+	__le64 rx_unicast;
+	__le64 rx_broadcast;
+	__le32 rx_multicast;
+	__le16 tx_aborted;
+	__le16 tx_underun;
+};
+
+enum rtl_flag {
+	RTL_FLAG_TASK_ENABLED = 0,
+	RTL_FLAG_TASK_RESET_PENDING = 1,
+	RTL_FLAG_MAX = 2,
+};
+
+typedef void (*rtl_generic_fct)(struct rtl8169_private *);
+
+struct rtl_cond {
+	bool (*check)(struct rtl8169_private *);
+	const char *msg;
+};
+
+struct rtl_coalesce_info {
+	u32 speed;
+	u32 scale_nsecs[4];
+};
+
+struct ephy_info {
+	unsigned int offset;
+	u16 mask;
+	u16 bits;
+};
+
+struct rtl_mac_info {
+	u16 mask;
+	u16 val;
+	enum mac_version ver;
+};
+
+union e1000_rx_desc_packet_split {
+	struct {
+		__le64 buffer_addr[4];
+	} read;
+	struct {
+		struct {
+			__le32 mrq;
+			union {
+				__le32 rss;
+				struct {
+					__le16 ip_id;
+					__le16 csum;
+				} csum_ip;
+			} hi_dword;
+		} lower;
+		struct {
+			__le32 status_error;
+			__le16 length0;
+			__le16 vlan;
+		} middle;
+		struct {
+			__le16 header_status;
+			__le16 length[3];
+		} upper;
+		__le64 reserved;
+	} wb;
+};
+
+struct e1000_context_desc {
+	union {
+		__le32 ip_config;
+		struct {
+			u8 ipcss;
+			u8 ipcso;
+			__le16 ipcse;
+		} ip_fields;
+	} lower_setup;
+	union {
+		__le32 tcp_config;
+		struct {
+			u8 tucss;
+			u8 tucso;
+			__le16 tucse;
+		} tcp_fields;
+	} upper_setup;
+	__le32 cmd_and_length;
+	union {
+		__le32 data;
+		struct {
+			u8 status;
+			u8 hdr_len;
+			__le16 mss;
+		} fields;
+	} tcp_seg_setup;
+};
+
+enum e1000_boards {
+	board_82571 = 0,
+	board_82572 = 1,
+	board_82573 = 2,
+	board_82574 = 3,
+	board_82583 = 4,
+	board_80003es2lan = 5,
+	board_ich8lan = 6,
+	board_ich9lan = 7,
+	board_ich10lan = 8,
+	board_pchlan = 9,
+	board_pch2lan = 10,
+	board_pch_lpt = 11,
+	board_pch_spt = 12,
+	board_pch_cnp = 13,
+	board_pch_tgp = 14,
+	board_pch_adp = 15,
+	board_pch_mtp = 16,
+};
+
+enum latency_range {
+	lowest_latency = 0,
+	low_latency = 1,
+	bulk_latency = 2,
+	latency_invalid = 255,
+};
+
+struct trace_event_raw_e1000e_trace_mac_register {
+	struct trace_entry ent;
+	uint32_t reg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_e1000e_trace_mac_register {};
+
+typedef void (*btf_trace_e1000e_trace_mac_register)(void *, uint32_t);
+
+struct e1000_reg_info {
+	u32 ofs;
+	char *name;
+};
+
+struct my_u0 {
+	__le64 a;
+	__le64 b;
+};
+
+struct my_u1 {
+	__le64 a;
+	__le64 b;
+	__le64 c;
+	__le64 d;
+};
+
+struct cdrom_msf {
+	__u8 cdmsf_min0;
+	__u8 cdmsf_sec0;
+	__u8 cdmsf_frame0;
+	__u8 cdmsf_min1;
+	__u8 cdmsf_sec1;
+	__u8 cdmsf_frame1;
+};
+
+struct cdrom_volctrl {
+	__u8 channel0;
+	__u8 channel1;
+	__u8 channel2;
+	__u8 channel3;
+};
+
+struct cdrom_subchnl {
+	__u8 cdsc_format;
+	__u8 cdsc_audiostatus;
+	__u8 cdsc_adr: 4;
+	__u8 cdsc_ctrl: 4;
+	__u8 cdsc_trk;
+	__u8 cdsc_ind;
+	union cdrom_addr cdsc_absaddr;
+	union cdrom_addr cdsc_reladdr;
+};
+
+struct cdrom_read_audio {
+	union cdrom_addr addr;
+	__u8 addr_format;
+	int nframes;
+	__u8 *buf;
+};
+
+struct cdrom_blk {
+	unsigned int from;
+	short unsigned int len;
+};
+
+struct cdrom_timed_media_change_info {
+	__s64 last_media_change;
+	__u64 media_flags;
+};
+
+struct dvd_layer {
+	__u8 book_version: 4;
+	__u8 book_type: 4;
+	__u8 min_rate: 4;
+	__u8 disc_size: 4;
+	__u8 layer_type: 4;
+	__u8 track_path: 1;
+	__u8 nlayers: 2;
+	char: 1;
+	__u8 track_density: 4;
+	__u8 linear_density: 4;
+	__u8 bca: 1;
+	__u32 start_sector;
+	__u32 end_sector;
+	__u32 end_sector_l0;
+};
+
+struct dvd_physical {
+	__u8 type;
+	__u8 layer_num;
+	struct dvd_layer layer[4];
+};
+
+struct dvd_copyright {
+	__u8 type;
+	__u8 layer_num;
+	__u8 cpst;
+	__u8 rmi;
+};
+
+struct dvd_disckey {
+	__u8 type;
+	unsigned int agid: 2;
+	__u8 value[2048];
+};
+
+struct dvd_bca {
+	__u8 type;
+	int len;
+	__u8 value[188];
+};
+
+struct dvd_manufact {
+	__u8 type;
+	__u8 layer_num;
+	int len;
+	__u8 value[2048];
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_physical physical;
+	struct dvd_copyright copyright;
+	struct dvd_disckey disckey;
+	struct dvd_bca bca;
+	struct dvd_manufact manufact;
+} dvd_struct;
+
+typedef __u8 dvd_key[5];
+
+typedef __u8 dvd_challenge[10];
+
+struct dvd_lu_send_agid {
+	__u8 type;
+	unsigned int agid: 2;
+};
+
+struct dvd_host_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_send_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_lu_send_title_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key title_key;
+	int lba;
+	unsigned int cpm: 1;
+	unsigned int cp_sec: 1;
+	unsigned int cgms: 2;
+};
+
+struct dvd_lu_send_asf {
+	__u8 type;
+	unsigned int agid: 2;
+	unsigned int asf: 1;
+};
+
+struct dvd_host_send_rpcstate {
+	__u8 type;
+	__u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+	__u8 type: 2;
+	__u8 vra: 3;
+	__u8 ucca: 3;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_lu_send_agid lsa;
+	struct dvd_host_send_challenge hsc;
+	struct dvd_send_key lsk;
+	struct dvd_lu_send_challenge lsc;
+	struct dvd_send_key hsk;
+	struct dvd_lu_send_title_key lstk;
+	struct dvd_lu_send_asf lsasf;
+	struct dvd_host_send_rpcstate hrpcs;
+	struct dvd_lu_send_rpcstate lrpcs;
+} dvd_authinfo;
+
+struct mrw_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u8 write: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+	__u8 reserved4;
+	__u8 reserved5;
+};
+
+struct rwrt_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u32 last_lba;
+	__u32 block_size;
+	__u16 blocking;
+	__u8 page_present: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+};
+
+typedef struct {
+	__be16 disc_information_length;
+	__u8 disc_status: 2;
+	__u8 border_status: 2;
+	__u8 erasable: 1;
+	__u8 reserved1: 3;
+	__u8 n_first_track;
+	__u8 n_sessions_lsb;
+	__u8 first_track_lsb;
+	__u8 last_track_lsb;
+	__u8 mrw_status: 2;
+	__u8 dbit: 1;
+	__u8 reserved2: 2;
+	__u8 uru: 1;
+	__u8 dbc_v: 1;
+	__u8 did_v: 1;
+	__u8 disc_type;
+	__u8 n_sessions_msb;
+	__u8 first_track_msb;
+	__u8 last_track_msb;
+	__u32 disc_id;
+	__u32 lead_in;
+	__u32 lead_out;
+	__u8 disc_bar_code[8];
+	__u8 reserved3;
+	__u8 n_opc;
+} disc_information;
+
+typedef struct {
+	__be16 track_information_length;
+	__u8 track_lsb;
+	__u8 session_lsb;
+	__u8 reserved1;
+	__u8 track_mode: 4;
+	__u8 copy: 1;
+	__u8 damage: 1;
+	__u8 reserved2: 2;
+	__u8 data_mode: 4;
+	__u8 fp: 1;
+	__u8 packet: 1;
+	__u8 blank: 1;
+	__u8 rt: 1;
+	__u8 nwa_v: 1;
+	__u8 lra_v: 1;
+	__u8 reserved3: 6;
+	__be32 track_start;
+	__be32 next_writable;
+	__be32 free_blocks;
+	__be32 fixed_packet_size;
+	__be32 track_size;
+	__be32 last_rec_address;
+} track_information;
+
+struct mode_page_header {
+	__be16 mode_data_length;
+	__u8 medium_type;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 reserved3;
+	__be16 desc_length;
+};
+
+typedef struct {
+	int data;
+	int audio;
+	int cdi;
+	int xa;
+	long int error;
+} tracktype;
+
+struct cdrom_mechstat_header {
+	__u8 curslot: 5;
+	__u8 changer_state: 2;
+	__u8 fault: 1;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 mech_state: 3;
+	__u8 curlba[3];
+	__u8 nslots;
+	__u16 slot_tablelen;
+};
+
+struct cdrom_slot {
+	__u8 change: 1;
+	__u8 reserved1: 6;
+	__u8 disc_present: 1;
+	__u8 reserved2[3];
+};
+
+struct cdrom_changer_info {
+	struct cdrom_mechstat_header hdr;
+	struct cdrom_slot slots[256];
+};
+
+struct modesel_head {
+	__u8 reserved1;
+	__u8 medium;
+	__u8 reserved2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_of_blocks_hi;
+	__u8 number_of_blocks_med;
+	__u8 number_of_blocks_lo;
+	__u8 reserved3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+typedef struct {
+	__u16 report_key_length;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 ucca: 3;
+	__u8 vra: 3;
+	__u8 type_code: 2;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+	__u8 reserved3;
+} rpc_state_t;
+
+struct cdrom_sysctl_settings {
+	char info[1000];
+	int autoclose;
+	int autoeject;
+	int debug;
+	int lock;
+	int check;
+};
+
+enum cdrom_print_option {
+	CTL_NAME = 0,
+	CTL_SPEED = 1,
+	CTL_SLOTS = 2,
+	CTL_CAPABILITY = 3,
+};
+
+struct compat_cdrom_read_audio {
+	union cdrom_addr addr;
+	u8 addr_format;
+	compat_int_t nframes;
+	compat_caddr_t buf;
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	__le32 bmSublinkSpeedAttr[1];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	char: 8;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	int: 32;
+} __attribute__((packed));
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+};
+
+struct usb_devmap {
+	long unsigned int devicemap[2];
+};
+
+struct usb_device;
+
+struct mon_bus;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+};
+
+struct wusb_dev;
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	short unsigned int bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int wusb: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	long unsigned int active_duration;
+	struct wusb_dev *wusb_dev;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+};
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct usb_phy_roothub;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	long unsigned int flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int wireless: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	long unsigned int hcd_priv[0];
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, bool);
+	int (*pci_poweroff_late)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+struct extcon_dev;
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy_io_ops;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+};
+
+typedef u32 usb_port_location_t;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	long unsigned int event_bits[1];
+	long unsigned int change_bits[1];
+	long unsigned int removed_bits[1];
+	long unsigned int wakeup_bits[1];
+	long unsigned int power_bits[1];
+	long unsigned int child_usage_bits[1];
+	long unsigned int warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int early_stop: 1;
+	unsigned int ignore_event: 1;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(const struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct usb_class {
+	struct kref kref;
+	struct class *class;
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void *data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void *context;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct usbdevfs_ctrltransfer32 {
+	u8 bRequestType;
+	u8 bRequest;
+	u16 wValue;
+	u16 wIndex;
+	u16 wLength;
+	u32 timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer32 {
+	compat_uint_t ep;
+	compat_uint_t len;
+	compat_uint_t timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_disconnectsignal32 {
+	compat_int_t signr;
+	compat_caddr_t context;
+};
+
+struct usbdevfs_urb32 {
+	unsigned char type;
+	unsigned char endpoint;
+	compat_int_t status;
+	compat_uint_t flags;
+	compat_caddr_t buffer;
+	compat_int_t buffer_length;
+	compat_int_t actual_length;
+	compat_int_t start_frame;
+	compat_int_t number_of_packets;
+	compat_int_t error_count;
+	compat_uint_t signr;
+	compat_caddr_t usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl32 {
+	s32 ifno;
+	s32 ioctl_code;
+	compat_caddr_t data;
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	long unsigned int ifclaimed;
+	u32 disabled_bulk_eps;
+	long unsigned int interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	long unsigned int vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void *userbuffer;
+	void *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE___2 = 1,
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct usb_phy_roothub {
+	struct phy *phy;
+	struct list_head list;
+};
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct mon_bus {
+	struct list_head bus_link;
+	spinlock_t lock;
+	struct usb_bus *u_bus;
+	int text_inited;
+	int bin_inited;
+	struct dentry *dent_s;
+	struct dentry *dent_t;
+	struct dentry *dent_u;
+	struct device *classdev;
+	int nreaders;
+	struct list_head r_list;
+	struct kref ref;
+	unsigned int cnt_events;
+	unsigned int cnt_text_lost;
+};
+
+struct mon_reader {
+	struct list_head r_link;
+	struct mon_bus *m_bus;
+	void *r_data;
+	void (*rnf_submit)(void *, struct urb *);
+	void (*rnf_error)(void *, struct urb *, int);
+	void (*rnf_complete)(void *, struct urb *, int);
+};
+
+struct mon_iso_desc {
+	int status;
+	unsigned int offset;
+	unsigned int length;
+};
+
+struct mon_event_text {
+	struct list_head e_link;
+	int type;
+	long unsigned int id;
+	unsigned int tstamp;
+	int busnum;
+	char devnum;
+	char epnum;
+	char is_in;
+	char xfertype;
+	int length;
+	int status;
+	int interval;
+	int start_frame;
+	int error_count;
+	char setup_flag;
+	char data_flag;
+	int numdesc;
+	struct mon_iso_desc isodesc[5];
+	unsigned char setup[8];
+	unsigned char data[32];
+};
+
+struct mon_reader_text {
+	struct kmem_cache *e_slab;
+	int nevents;
+	struct list_head e_list;
+	struct mon_reader r;
+	wait_queue_head_t wait;
+	int printf_size;
+	size_t printf_offset;
+	size_t printf_togo;
+	char *printf_buf;
+	struct mutex printf_lock;
+	char slab_name[30];
+};
+
+struct mon_text_ptr {
+	int cnt;
+	int limit;
+	char *pbuf;
+};
+
+enum {
+	NAMESZ = 10,
+};
+
+struct iso_rec {
+	int error_count;
+	int numdesc;
+};
+
+struct mon_bin_hdr {
+	u64 id;
+	unsigned char type;
+	unsigned char xfer_type;
+	unsigned char epnum;
+	unsigned char devnum;
+	short unsigned int busnum;
+	char flag_setup;
+	char flag_data;
+	s64 ts_sec;
+	s32 ts_usec;
+	int status;
+	unsigned int len_urb;
+	unsigned int len_cap;
+	union {
+		unsigned char setup[8];
+		struct iso_rec iso;
+	} s;
+	int interval;
+	int start_frame;
+	unsigned int xfer_flags;
+	unsigned int ndesc;
+};
+
+struct mon_bin_isodesc {
+	int iso_status;
+	unsigned int iso_off;
+	unsigned int iso_len;
+	u32 _pad;
+};
+
+struct mon_bin_stats {
+	u32 queued;
+	u32 dropped;
+};
+
+struct mon_bin_get {
+	struct mon_bin_hdr *hdr;
+	void *data;
+	size_t alloc;
+};
+
+struct mon_bin_mfetch {
+	u32 *offvec;
+	u32 nfetch;
+	u32 nflush;
+};
+
+struct mon_bin_get32 {
+	u32 hdr32;
+	u32 data32;
+	u32 alloc32;
+};
+
+struct mon_bin_mfetch32 {
+	u32 offvec32;
+	u32 nfetch32;
+	u32 nflush32;
+};
+
+struct mon_pgmap {
+	struct page *pg;
+	unsigned char *ptr;
+};
+
+struct mon_reader_bin {
+	spinlock_t b_lock;
+	unsigned int b_size;
+	unsigned int b_cnt;
+	unsigned int b_in;
+	unsigned int b_out;
+	unsigned int b_read;
+	struct mon_pgmap *b_vec;
+	wait_queue_head_t b_wait;
+	struct mutex fetch_lock;
+	int mmap_active;
+	struct mon_reader r;
+	unsigned int cnt_lost;
+};
+
+struct snap {
+	int slen;
+	char str[80];
+};
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	long unsigned int reset_done[15];
+	long unsigned int bus_suspended;
+	long unsigned int companion_ports;
+	long unsigned int owned_ports;
+	long unsigned int port_c_suspend;
+	long unsigned int suspended_ports;
+	long unsigned int resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	long unsigned int next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	long unsigned int priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+typedef __u32 __hc32;
+
+typedef __u16 __hc16;
+
+struct td;
+
+struct ed {
+	__hc32 hwINFO;
+	__hc32 hwTailP;
+	__hc32 hwHeadP;
+	__hc32 hwNextED;
+	dma_addr_t dma;
+	struct td *dummy;
+	struct ed *ed_next;
+	struct ed *ed_prev;
+	struct list_head td_list;
+	struct list_head in_use_list;
+	u8 state;
+	u8 type;
+	u8 branch;
+	u16 interval;
+	u16 load;
+	u16 last_iso;
+	u16 tick;
+	unsigned int takeback_wdh_cnt;
+	struct td *pending_td;
+	long: 64;
+};
+
+struct td {
+	__hc32 hwINFO;
+	__hc32 hwCBP;
+	__hc32 hwNextTD;
+	__hc32 hwBE;
+	__hc16 hwPSW[2];
+	__u8 index;
+	struct ed *ed;
+	struct td *td_hash;
+	struct td *next_dl_td;
+	struct urb *urb;
+	dma_addr_t td_dma;
+	dma_addr_t data_dma;
+	struct list_head td_list;
+	long: 64;
+};
+
+struct ohci_hcca {
+	__hc32 int_table[32];
+	__hc32 frame_no;
+	__hc32 done_head;
+	u8 reserved_for_hc[116];
+	u8 what[4];
+};
+
+struct ohci_roothub_regs {
+	__hc32 a;
+	__hc32 b;
+	__hc32 status;
+	__hc32 portstatus[15];
+};
+
+struct ohci_regs {
+	__hc32 revision;
+	__hc32 control;
+	__hc32 cmdstatus;
+	__hc32 intrstatus;
+	__hc32 intrenable;
+	__hc32 intrdisable;
+	__hc32 hcca;
+	__hc32 ed_periodcurrent;
+	__hc32 ed_controlhead;
+	__hc32 ed_controlcurrent;
+	__hc32 ed_bulkhead;
+	__hc32 ed_bulkcurrent;
+	__hc32 donehead;
+	__hc32 fminterval;
+	__hc32 fmremaining;
+	__hc32 fmnumber;
+	__hc32 periodicstart;
+	__hc32 lsthresh;
+	struct ohci_roothub_regs roothub;
+	long: 64;
+	long: 64;
+};
+
+enum ohci_rh_state {
+	OHCI_RH_HALTED = 0,
+	OHCI_RH_SUSPENDED = 1,
+	OHCI_RH_RUNNING = 2,
+};
+
+struct ohci_hcd {
+	spinlock_t lock;
+	struct ohci_regs *regs;
+	struct ohci_hcca *hcca;
+	dma_addr_t hcca_dma;
+	struct ed *ed_rm_list;
+	struct ed *ed_bulktail;
+	struct ed *ed_controltail;
+	struct ed *periodic[32];
+	void (*start_hnp)(struct ohci_hcd *);
+	struct dma_pool *td_cache;
+	struct dma_pool *ed_cache;
+	struct td *td_hash[64];
+	struct td *dl_start;
+	struct td *dl_end;
+	struct list_head pending;
+	struct list_head eds_in_use;
+	enum ohci_rh_state rh_state;
+	int num_ports;
+	int load[32];
+	u32 hc_control;
+	long unsigned int next_statechange;
+	u32 fminterval;
+	unsigned int autostop: 1;
+	unsigned int working: 1;
+	unsigned int restart_work: 1;
+	long unsigned int flags;
+	unsigned int prev_frame_no;
+	unsigned int wdh_cnt;
+	unsigned int prev_wdh_cnt;
+	u32 prev_donehead;
+	struct timer_list io_watchdog;
+	struct work_struct nec_work;
+	struct dentry *debug_dir;
+	long unsigned int priv[0];
+};
+
+struct ohci_driver_overrides {
+	const char *product_desc;
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct urb_priv {
+	struct ed *ed;
+	u16 length;
+	u16 td_cnt;
+	struct list_head pending;
+	struct td *td[0];
+};
+
+typedef struct urb_priv urb_priv_t;
+
+struct debug_buffer {
+	ssize_t (*fill_func)(struct debug_buffer *);
+	struct ohci_hcd *ohci;
+	struct mutex mutex;
+	size_t count;
+	char *page;
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+union xhci_trb;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_ring;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+struct xhci_segment;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int num_trbs_free_temp;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_virt_device;
+
+struct xhci_hcd;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int err_count;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	long unsigned int flags;
+	u16 current_mel;
+	void *debugfs_private;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+	u32 irq_pending;
+	u32 irq_control;
+	u32 erst_size;
+	u64 erst_base;
+	u64 erst_dequeue;
+};
+
+struct xhci_bus_state {
+	long unsigned int bus_suspended;
+	long unsigned int next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	long unsigned int resume_done[31];
+	long unsigned int resuming_ports;
+	long unsigned int rexit_ports;
+	struct completion rexit_done[31];
+	struct completion u3exit_done[31];
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_device_context_array;
+
+struct xhci_scratchpad;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	struct xhci_intr_reg *ir_set;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u8 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	u32 isoc_bei_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_scratchpad *scratchpad;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool *device_pool;
+	struct dma_pool *segment_pool;
+	struct dma_pool *small_streams_pool;
+	struct dma_pool *medium_streams_pool;
+	unsigned int xhc_state;
+	long unsigned int run_graceperiod;
+	struct s3_save s3;
+	long long unsigned int quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	long unsigned int priv[0];
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+	unsigned int lpm_incapable: 1;
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	unsigned int num_trbs;
+};
+
+struct urb_priv___2 {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+struct uhci_td;
+
+struct uhci_qh {
+	__le32 link;
+	__le32 element;
+	dma_addr_t dma_handle;
+	struct list_head node;
+	struct usb_host_endpoint *hep;
+	struct usb_device *udev;
+	struct list_head queue;
+	struct uhci_td *dummy_td;
+	struct uhci_td *post_td;
+	struct usb_iso_packet_descriptor *iso_packet_desc;
+	long unsigned int advance_jiffies;
+	unsigned int unlink_frame;
+	unsigned int period;
+	short int phase;
+	short int load;
+	unsigned int iso_frame;
+	int state;
+	int type;
+	int skel;
+	unsigned int initial_toggle: 1;
+	unsigned int needs_fixup: 1;
+	unsigned int is_stopped: 1;
+	unsigned int wait_expired: 1;
+	unsigned int bandwidth_reserved: 1;
+};
+
+struct uhci_td {
+	__le32 link;
+	__le32 status;
+	__le32 token;
+	__le32 buffer;
+	dma_addr_t dma_handle;
+	struct list_head list;
+	int frame;
+	struct list_head fl_list;
+};
+
+enum uhci_rh_state {
+	UHCI_RH_RESET = 0,
+	UHCI_RH_SUSPENDED = 1,
+	UHCI_RH_AUTO_STOPPED = 2,
+	UHCI_RH_RESUMING = 3,
+	UHCI_RH_SUSPENDING = 4,
+	UHCI_RH_RUNNING = 5,
+	UHCI_RH_RUNNING_NODEVS = 6,
+};
+
+struct uhci_hcd {
+	long unsigned int io_addr;
+	void *regs;
+	struct dma_pool *qh_pool;
+	struct dma_pool *td_pool;
+	struct uhci_td *term_td;
+	struct uhci_qh *skelqh[11];
+	struct uhci_qh *next_qh;
+	spinlock_t lock;
+	dma_addr_t frame_dma_handle;
+	__le32 *frame;
+	void **frame_cpu;
+	enum uhci_rh_state rh_state;
+	long unsigned int auto_stop_time;
+	unsigned int frame_number;
+	unsigned int is_stopped;
+	unsigned int last_iso_frame;
+	unsigned int cur_iso_frame;
+	unsigned int scan_in_progress: 1;
+	unsigned int need_rescan: 1;
+	unsigned int dead: 1;
+	unsigned int RD_enable: 1;
+	unsigned int is_initialized: 1;
+	unsigned int fsbr_is_on: 1;
+	unsigned int fsbr_is_wanted: 1;
+	unsigned int fsbr_expiring: 1;
+	struct timer_list fsbr_timer;
+	unsigned int oc_low: 1;
+	unsigned int wait_for_hp: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int is_aspeed: 1;
+	long unsigned int port_c_suspend;
+	long unsigned int resuming_ports;
+	long unsigned int ports_timeout;
+	struct list_head idle_qh_list;
+	int rh_numports;
+	wait_queue_head_t waitqh;
+	int num_waiting;
+	int total_load;
+	short int load[32];
+	struct clk *clk;
+	void (*reset_hc)(struct uhci_hcd *);
+	int (*check_and_reset_hc)(struct uhci_hcd *);
+	void (*configure_hc)(struct uhci_hcd *);
+	int (*resume_detect_interrupts_are_broken)(struct uhci_hcd *);
+	int (*global_suspend_mode_is_broken)(struct uhci_hcd *);
+};
+
+struct urb_priv___3 {
+	struct list_head node;
+	struct urb *urb;
+	struct uhci_qh *qh;
+	struct list_head td_list;
+	unsigned int fsbr: 1;
+};
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+struct usb_string_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wData[1];
+};
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_info_context {
+	__le64 string0;
+	__le64 manufacturer;
+	__le64 product;
+	__le64 serial;
+	__le32 length;
+	__le32 __reserved_0[7];
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct xhci_dbc;
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+enum evtreturn {
+	EVT_ERR = 4294967295,
+	EVT_DONE = 0,
+	EVT_GSER = 1,
+	EVT_DISC = 2,
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct dbc_port {
+	struct tty_port port;
+	spinlock_t port_lock;
+	int minor;
+	struct list_head read_pool;
+	struct list_head read_queue;
+	unsigned int n_read;
+	struct tasklet_struct push;
+	struct list_head write_pool;
+	struct kfifo write_fifo;
+	bool registered;
+};
+
+struct xhci_driver_data {
+	u64 quirks;
+	const char *firmware;
+};
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	int slot_id;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_doorbell {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+enum {
+	US_FL_SINGLE_LUN = 1,
+	US_FL_NEED_OVERRIDE = 2,
+	US_FL_SCM_MULT_TARG = 4,
+	US_FL_FIX_INQUIRY = 8,
+	US_FL_FIX_CAPACITY = 16,
+	US_FL_IGNORE_RESIDUE = 32,
+	US_FL_BULK32 = 64,
+	US_FL_NOT_LOCKABLE = 128,
+	US_FL_GO_SLOW = 256,
+	US_FL_NO_WP_DETECT = 512,
+	US_FL_MAX_SECTORS_64 = 1024,
+	US_FL_IGNORE_DEVICE = 2048,
+	US_FL_CAPACITY_HEURISTICS = 4096,
+	US_FL_MAX_SECTORS_MIN = 8192,
+	US_FL_BULK_IGNORE_TAG = 16384,
+	US_FL_SANE_SENSE = 32768,
+	US_FL_CAPACITY_OK = 65536,
+	US_FL_BAD_SENSE = 131072,
+	US_FL_NO_READ_DISC_INFO = 262144,
+	US_FL_NO_READ_CAPACITY_16 = 524288,
+	US_FL_INITIAL_READ10 = 1048576,
+	US_FL_WRITE_CACHE = 2097152,
+	US_FL_NEEDS_CAP16 = 4194304,
+	US_FL_IGNORE_UAS = 8388608,
+	US_FL_BROKEN_FUA = 16777216,
+	US_FL_NO_ATA_1X = 33554432,
+	US_FL_NO_REPORT_OPCODES = 67108864,
+	US_FL_MAX_SECTORS_240 = 134217728,
+	US_FL_NO_REPORT_LUNS = 268435456,
+	US_FL_ALWAYS_SYNC = 536870912,
+	US_FL_NO_SAME = 1073741824,
+	US_FL_SENSE_AFTER_SYNC = 2147483648,
+};
+
+struct us_data;
+
+struct us_unusual_dev {
+	const char *vendorName;
+	const char *productName;
+	__u8 useProtocol;
+	__u8 useTransport;
+	int (*initFunction)(struct us_data *);
+};
+
+typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef int (*trans_reset)(struct us_data *);
+
+typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef void (*extra_data_destructor)(void *);
+
+struct us_data {
+	struct mutex dev_mutex;
+	struct usb_device *pusb_dev;
+	struct usb_interface *pusb_intf;
+	const struct us_unusual_dev *unusual_dev;
+	long unsigned int fflags;
+	long unsigned int dflags;
+	unsigned int send_bulk_pipe;
+	unsigned int recv_bulk_pipe;
+	unsigned int send_ctrl_pipe;
+	unsigned int recv_ctrl_pipe;
+	unsigned int recv_intr_pipe;
+	char *transport_name;
+	char *protocol_name;
+	__le32 bcs_signature;
+	u8 subclass;
+	u8 protocol;
+	u8 max_lun;
+	u8 ifnum;
+	u8 ep_bInterval;
+	trans_cmnd transport;
+	trans_reset transport_reset;
+	proto_cmnd proto_handler;
+	struct scsi_cmnd *srb;
+	unsigned int tag;
+	char scsi_name[32];
+	struct urb *current_urb;
+	struct usb_ctrlrequest *cr;
+	struct usb_sg_request current_sg;
+	unsigned char *iobuf;
+	dma_addr_t iobuf_dma;
+	struct task_struct *ctl_thread;
+	struct completion cmnd_ready;
+	struct completion notify;
+	wait_queue_head_t delay_wait;
+	struct delayed_work scan_dwork;
+	void *extra;
+	extra_data_destructor extra_destructor;
+	int use_last_sector_hacks;
+	int last_sector_retries;
+};
+
+enum xfer_buf_dir {
+	TO_XFER_BUF = 0,
+	FROM_XFER_BUF = 1,
+};
+
+struct swoc_info {
+	__u8 rev;
+	__u8 reserved[8];
+	__u16 LinuxSKU;
+	__u16 LinuxVer;
+	__u8 reserved2[47];
+} __attribute__((packed));
+
+struct bulk_cb_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 DataTransferLength;
+	__u8 Flags;
+	__u8 Lun;
+	__u8 Length;
+	__u8 CDB[16];
+};
+
+struct bulk_cs_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 Residue;
+	__u8 Status;
+};
+
+struct ignore_entry {
+	u16 vid;
+	u16 pid;
+	u16 bcdmin;
+	u16 bcdmax;
+};
+
+struct async_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 tx;
+	__u32 rx;
+	__u32 frame;
+	__u32 parity;
+	__u32 overrun;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+struct usb_serial;
+
+struct usb_serial_port {
+	struct usb_serial *serial;
+	struct tty_port port;
+	spinlock_t lock;
+	u32 minor;
+	u8 port_number;
+	unsigned char *interrupt_in_buffer;
+	struct urb *interrupt_in_urb;
+	__u8 interrupt_in_endpointAddress;
+	unsigned char *interrupt_out_buffer;
+	int interrupt_out_size;
+	struct urb *interrupt_out_urb;
+	__u8 interrupt_out_endpointAddress;
+	unsigned char *bulk_in_buffer;
+	int bulk_in_size;
+	struct urb *read_urb;
+	__u8 bulk_in_endpointAddress;
+	unsigned char *bulk_in_buffers[2];
+	struct urb *read_urbs[2];
+	long unsigned int read_urbs_free;
+	unsigned char *bulk_out_buffer;
+	int bulk_out_size;
+	struct urb *write_urb;
+	struct kfifo write_fifo;
+	unsigned char *bulk_out_buffers[2];
+	struct urb *write_urbs[2];
+	long unsigned int write_urbs_free;
+	__u8 bulk_out_endpointAddress;
+	struct async_icount icount;
+	int tx_bytes;
+	long unsigned int flags;
+	struct work_struct work;
+	long unsigned int sysrq;
+	struct device dev;
+};
+
+struct usb_serial_driver;
+
+struct usb_serial {
+	struct usb_device *dev;
+	struct usb_serial_driver *type;
+	struct usb_interface *interface;
+	struct usb_interface *sibling;
+	unsigned int suspend_count;
+	unsigned char disconnected: 1;
+	unsigned char attached: 1;
+	unsigned char minors_reserved: 1;
+	unsigned char num_ports;
+	unsigned char num_port_pointers;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	struct usb_serial_port *port[16];
+	struct kref kref;
+	struct mutex disc_mutex;
+	void *private;
+};
+
+struct usb_serial_endpoints;
+
+struct usb_serial_driver {
+	const char *description;
+	const struct usb_device_id *id_table;
+	struct list_head driver_list;
+	struct device_driver driver;
+	struct usb_driver *usb_driver;
+	struct usb_dynids dynids;
+	unsigned char num_ports;
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	size_t bulk_in_size;
+	size_t bulk_out_size;
+	int (*probe)(struct usb_serial *, const struct usb_device_id *);
+	int (*attach)(struct usb_serial *);
+	int (*calc_num_ports)(struct usb_serial *, struct usb_serial_endpoints *);
+	void (*disconnect)(struct usb_serial *);
+	void (*release)(struct usb_serial *);
+	int (*port_probe)(struct usb_serial_port *);
+	void (*port_remove)(struct usb_serial_port *);
+	int (*suspend)(struct usb_serial *, pm_message_t);
+	int (*resume)(struct usb_serial *);
+	int (*reset_resume)(struct usb_serial *);
+	int (*open)(struct tty_struct *, struct usb_serial_port *);
+	void (*close)(struct usb_serial_port *);
+	int (*write)(struct tty_struct *, struct usb_serial_port *, const unsigned char *, int);
+	unsigned int (*write_room)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*set_termios)(struct tty_struct *, struct usb_serial_port *, const struct ktermios *);
+	void (*break_ctl)(struct tty_struct *, int);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, long int);
+	bool (*tx_empty)(struct usb_serial_port *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*tiocmiwait)(struct tty_struct *, long unsigned int);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	void (*dtr_rts)(struct usb_serial_port *, int);
+	int (*carrier_raised)(struct usb_serial_port *);
+	void (*init_termios)(struct tty_struct *);
+	void (*read_int_callback)(struct urb *);
+	void (*write_int_callback)(struct urb *);
+	void (*read_bulk_callback)(struct urb *);
+	void (*write_bulk_callback)(struct urb *);
+	void (*process_read_urb)(struct urb *);
+	int (*prepare_write_buffer)(struct usb_serial_port *, void *, size_t);
+};
+
+struct usb_serial_endpoints {
+	unsigned char num_bulk_in;
+	unsigned char num_bulk_out;
+	unsigned char num_interrupt_in;
+	unsigned char num_interrupt_out;
+	struct usb_endpoint_descriptor *bulk_in[16];
+	struct usb_endpoint_descriptor *bulk_out[16];
+	struct usb_endpoint_descriptor *interrupt_in[16];
+	struct usb_endpoint_descriptor *interrupt_out[16];
+};
+
+struct usbcons_info {
+	int magic;
+	int break_flag;
+	struct usb_serial_port *port;
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+struct serport___2 {
+	struct tty_struct *tty;
+	wait_queue_head_t wait;
+	struct serio *serio;
+	struct serio_device_id id;
+	spinlock_t lock;
+	long unsigned int flags;
+};
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	long unsigned int flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+};
+
+union input_seq_state {
+	struct {
+		short unsigned int pos;
+		bool mutex_acquired;
+	};
+	void *p;
+};
+
+struct input_devres {
+	struct input_dev *input;
+};
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_event_compat {
+	compat_ulong_t sec;
+	compat_ulong_t usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct ff_periodic_effect_compat {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	compat_uptr_t custom_data;
+};
+
+struct ff_effect_compat {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect_compat periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct input_mt_pos {
+	s16 x;
+	s16 y;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+struct input_led {
+	struct led_classdev cdev;
+	struct input_handle *handle;
+	unsigned int code;
+};
+
+struct input_leds {
+	struct input_handle handle;
+	unsigned int num_leds;
+	struct input_led leds[0];
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct evdev_client;
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	long unsigned int *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
+enum hid_report_type {
+	HID_INPUT_REPORT = 0,
+	HID_OUTPUT_REPORT = 1,
+	HID_FEATURE_REPORT = 2,
+	HID_REPORT_TYPES = 3,
+};
+
+struct usbtouch_usb;
+
+struct usbtouch_device_info {
+	int min_xc;
+	int max_xc;
+	int min_yc;
+	int max_yc;
+	int min_press;
+	int max_press;
+	int rept_size;
+	bool irq_always;
+	void (*process_pkt)(struct usbtouch_usb *, unsigned char *, int);
+	int (*get_pkt_len)(unsigned char *, int);
+	int (*read_data)(struct usbtouch_usb *, unsigned char *);
+	int (*alloc)(struct usbtouch_usb *);
+	int (*init)(struct usbtouch_usb *);
+	void (*exit)(struct usbtouch_usb *);
+};
+
+struct usbtouch_usb {
+	unsigned char *data;
+	dma_addr_t data_dma;
+	int data_size;
+	unsigned char *buffer;
+	int buf_len;
+	struct urb *irq;
+	struct usb_interface *interface;
+	struct input_dev *input;
+	struct usbtouch_device_info *type;
+	struct mutex pm_mutex;
+	bool is_open;
+	char name[128];
+	char phys[64];
+	void *priv;
+	int x;
+	int y;
+	int touch;
+	int press;
+};
+
+enum {
+	DEVTYPE_IGNORE = 4294967295,
+	DEVTYPE_EGALAX = 0,
+	DEVTYPE_PANJIT = 1,
+	DEVTYPE_3M = 2,
+	DEVTYPE_ITM = 3,
+	DEVTYPE_ETURBO = 4,
+	DEVTYPE_GUNZE = 5,
+	DEVTYPE_DMC_TSC10 = 6,
+	DEVTYPE_IRTOUCH = 7,
+	DEVTYPE_IRTOUCH_HIRES = 8,
+	DEVTYPE_IDEALTEK = 9,
+	DEVTYPE_GENERAL_TOUCH = 10,
+	DEVTYPE_GOTOP = 11,
+	DEVTYPE_JASTEC = 12,
+	DEVTYPE_E2I = 13,
+	DEVTYPE_ZYTRONIC = 14,
+	DEVTYPE_TC45USB = 15,
+	DEVTYPE_NEXIO = 16,
+	DEVTYPE_ELO = 17,
+	DEVTYPE_ETOUCH = 18,
+};
+
+struct mtouch_priv {
+	u8 fw_rev_major;
+	u8 fw_rev_minor;
+};
+
+struct nexio_priv {
+	struct urb *ack;
+	unsigned char *ack_buf;
+};
+
+struct nexio_touch_packet {
+	u8 flags;
+	__be16 data_len;
+	__be16 x_len;
+	__be16 y_len;
+	u8 data[0];
+} __attribute__((packed));
+
+struct mousedev_hw_data {
+	int dx;
+	int dy;
+	int dz;
+	int x;
+	int y;
+	int abs_event;
+	long unsigned int buttons;
+};
+
+struct mousedev {
+	int open;
+	struct input_handle handle;
+	wait_queue_head_t wait;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+	struct list_head mixdev_node;
+	bool opened_by_mixdev;
+	struct mousedev_hw_data packet;
+	unsigned int pkt_count;
+	int old_x[4];
+	int old_y[4];
+	int frac_dx;
+	int frac_dy;
+	long unsigned int touch;
+	int (*open_device)(struct mousedev *);
+	void (*close_device)(struct mousedev *);
+};
+
+enum mousedev_emul {
+	MOUSEDEV_EMUL_PS2 = 0,
+	MOUSEDEV_EMUL_IMPS = 1,
+	MOUSEDEV_EMUL_EXPS = 2,
+};
+
+struct mousedev_motion {
+	int dx;
+	int dy;
+	int dz;
+	long unsigned int buttons;
+};
+
+struct mousedev_client {
+	struct fasync_struct *fasync;
+	struct mousedev *mousedev;
+	struct list_head node;
+	struct mousedev_motion packets[16];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t packet_lock;
+	int pos_x;
+	int pos_y;
+	u8 ps2[6];
+	unsigned char ready;
+	unsigned char buffer;
+	unsigned char bufsiz;
+	unsigned char imexseq;
+	unsigned char impsseq;
+	enum mousedev_emul mode;
+	long unsigned int last_buttons;
+};
+
+enum {
+	FRACTION_DENOM = 128,
+};
+
+struct trace_event_raw_rtc_time_alarm_class {
+	struct trace_entry ent;
+	time64_t secs;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_freq {
+	struct trace_entry ent;
+	int freq;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_state {
+	struct trace_entry ent;
+	int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_alarm_irq_enable {
+	struct trace_entry ent;
+	unsigned int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_offset_class {
+	struct trace_entry ent;
+	long int offset;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_timer_class {
+	struct trace_entry ent;
+	struct rtc_timer *timer;
+	ktime_t expires;
+	ktime_t period;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rtc_time_alarm_class {};
+
+struct trace_event_data_offsets_rtc_irq_set_freq {};
+
+struct trace_event_data_offsets_rtc_irq_set_state {};
+
+struct trace_event_data_offsets_rtc_alarm_irq_enable {};
+
+struct trace_event_data_offsets_rtc_offset_class {};
+
+struct trace_event_data_offsets_rtc_timer_class {};
+
+typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
+
+typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
+
+typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
+
+typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
+
+enum {
+	none = 0,
+	day = 1,
+	month = 2,
+	year = 3,
+};
+
+enum {
+	RTC_SEC = 0,
+	RTC_MIN = 1,
+	RTC_HOUR = 2,
+	RTC_DAY = 3,
+	RTC_MONTH = 4,
+	RTC_YEAR = 5,
+	RTC_DATA_LEN = 6,
+};
+
+struct da9063_compatible_rtc_regmap {
+	int rtc_enable_reg;
+	int rtc_enable_32k_crystal_reg;
+	int rtc_alarm_secs_reg;
+	int rtc_alarm_year_reg;
+	int rtc_count_secs_reg;
+	int rtc_count_year_reg;
+	int rtc_event_reg;
+	int rtc_enable_mask;
+	int rtc_crystal_mask;
+	int rtc_event_alarm_mask;
+	int rtc_alarm_on_mask;
+	int rtc_alarm_status_mask;
+	int rtc_tick_on_mask;
+	int rtc_ready_to_read_mask;
+	int rtc_count_sec_mask;
+	int rtc_count_min_mask;
+	int rtc_count_hour_mask;
+	int rtc_count_day_mask;
+	int rtc_count_month_mask;
+	int rtc_count_year_mask;
+	int rtc_data_start;
+	int rtc_alarm_len;
+};
+
+struct da9063_compatible_rtc {
+	struct rtc_device *rtc_dev;
+	struct rtc_time alarm_time;
+	struct regmap *regmap;
+	const struct da9063_compatible_rtc_regmap *config;
+	bool rtc_sync;
+};
+
+struct goldfish_rtc {
+	void *base;
+	int irq;
+	struct rtc_device *rtc;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+struct i2c_smbus_alert_setup {
+	int irq;
+};
+
+struct trace_event_raw_smbus_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 flags;
+	__u16 addr;
+	__u8 command;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 read_write;
+	__u8 command;
+	__s16 res;
+	__u32 protocol;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_smbus_write {};
+
+struct trace_event_data_offsets_smbus_read {};
+
+struct trace_event_data_offsets_smbus_reply {};
+
+struct trace_event_data_offsets_smbus_result {};
+
+typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *);
+
+typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int);
+
+typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *, int);
+
+typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
+
+struct i2c_mux_core {
+	struct i2c_adapter *parent;
+	struct device *dev;
+	unsigned int mux_locked: 1;
+	unsigned int arbitrator: 1;
+	unsigned int gate: 1;
+	void *priv;
+	int (*select)(struct i2c_mux_core *, u32);
+	int (*deselect)(struct i2c_mux_core *, u32);
+	int num_adapters;
+	int max_adapters;
+	struct i2c_adapter *adapter[0];
+};
+
+struct i2c_mux_priv {
+	struct i2c_adapter adap;
+	struct i2c_algorithm algo;
+	struct i2c_mux_core *muxc;
+	u32 chan_id;
+};
+
+struct i2c_algo_bit_data {
+	void *data;
+	void (*setsda)(void *, int);
+	void (*setscl)(void *, int);
+	int (*getsda)(void *);
+	int (*getscl)(void *);
+	int (*pre_xfer)(struct i2c_adapter *);
+	void (*post_xfer)(struct i2c_adapter *);
+	int udelay;
+	int timeout;
+	bool can_do_atomic;
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_result {};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct class_compat;
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct i2c_smbus_ioctl_data {
+	__u8 read_write;
+	__u8 command;
+	__u32 size;
+	union i2c_smbus_data *data;
+};
+
+struct i2c_rdwr_ioctl_data {
+	struct i2c_msg *msgs;
+	__u32 nmsgs;
+};
+
+struct i2c_dev {
+	struct list_head list;
+	struct i2c_adapter *adap;
+	struct device dev;
+	struct cdev cdev;
+};
+
+struct i2c_smbus_ioctl_data32 {
+	u8 read_write;
+	u8 command;
+	u32 size;
+	compat_caddr_t data;
+};
+
+struct i2c_msg32 {
+	u16 addr;
+	u16 flags;
+	u16 len;
+	compat_caddr_t buf;
+};
+
+struct i2c_rdwr_ioctl_data32 {
+	compat_caddr_t msgs;
+	u32 nmsgs;
+};
+
+struct ocores_i2c_platform_data {
+	u32 reg_shift;
+	u32 reg_io_width;
+	u32 clock_khz;
+	u32 bus_khz;
+	bool big_endian;
+	u8 num_devices;
+	const struct i2c_board_info *devices;
+};
+
+struct ocores_i2c {
+	void *base;
+	int iobase;
+	u32 reg_shift;
+	u32 reg_io_width;
+	long unsigned int flags;
+	wait_queue_head_t wait;
+	struct i2c_adapter adap;
+	struct i2c_msg *msg;
+	int pos;
+	int nmsgs;
+	int state;
+	spinlock_t process_lock;
+	struct clk *clk;
+	int ip_clock_khz;
+	int bus_clock_khz;
+	void (*setreg)(struct ocores_i2c *, int, u8);
+	u8 (*getreg)(struct ocores_i2c *, int);
+};
+
+struct gpio_restart {
+	struct gpio_desc *reset_gpio;
+	struct notifier_block restart_handler;
+	u32 active_delay_ms;
+	u32 inactive_delay_ms;
+	u32 wait_delay_ms;
+};
+
+struct syscon_reboot_context {
+	struct regmap *map;
+	u32 offset;
+	u32 value;
+	u32 mask;
+	struct notifier_block restart_handler;
+};
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+enum {
+	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
+	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
+	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
+	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
+	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
+	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
+	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
+};
+
+enum {
+	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
+	POWER_SUPPLY_HEALTH_GOOD = 1,
+	POWER_SUPPLY_HEALTH_OVERHEAT = 2,
+	POWER_SUPPLY_HEALTH_DEAD = 3,
+	POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,
+	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,
+	POWER_SUPPLY_HEALTH_COLD = 6,
+	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,
+	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,
+	POWER_SUPPLY_HEALTH_OVERCURRENT = 9,
+	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,
+	POWER_SUPPLY_HEALTH_WARM = 11,
+	POWER_SUPPLY_HEALTH_COOL = 12,
+	POWER_SUPPLY_HEALTH_HOT = 13,
+	POWER_SUPPLY_HEALTH_NO_BATTERY = 14,
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+enum {
+	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+	POWER_SUPPLY_SCOPE_SYSTEM = 1,
+	POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+};
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
+	struct device dev;
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
+};
+
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[31];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+enum power_supply_notifier_events {
+	PSY_EVENT_PROP_CHANGED = 0,
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_attr;
+
+struct thermal_trip;
+
+struct thermal_zone_device_ops;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	struct thermal_trip *trips;
+	int num_trips;
+	long unsigned int trips_disabled;
+	long unsigned int passive_delay_jiffies;
+	long unsigned int polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	long unsigned int max_state;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+};
+
+struct power_supply_battery_ocv_table {
+	int ocv;
+	int capacity;
+};
+
+struct power_supply_resistance_temp_table {
+	int temp;
+	int resistance;
+};
+
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
+struct power_supply_battery_info {
+	unsigned int technology;
+	int energy_full_design_uwh;
+	int charge_full_design_uah;
+	int voltage_min_design_uv;
+	int voltage_max_design_uv;
+	int tricklecharge_current_ua;
+	int precharge_current_ua;
+	int precharge_voltage_max_uv;
+	int charge_term_current_ua;
+	int charge_restart_voltage_uv;
+	int overvoltage_limit_uv;
+	int constant_charge_current_max_ua;
+	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
+	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
+	int ocv_temp[20];
+	int temp_ambient_alert_min;
+	int temp_ambient_alert_max;
+	int temp_alert_min;
+	int temp_alert_max;
+	int temp_min;
+	int temp_max;
+	struct power_supply_battery_ocv_table *ocv_table[20];
+	int ocv_table_size[20];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+};
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
+	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+};
+
+struct thermal_trip {
+	int temperature;
+	int hysteresis;
+	enum thermal_trip_type type;
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
+};
+
+struct thermal_bind_params;
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	int num_tbps;
+	struct thermal_bind_params *tbp;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+};
+
+struct thermal_bind_params {
+	struct thermal_cooling_device *cdev;
+	int weight;
+	int trip_mask;
+	long unsigned int *binding_limits;
+	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
+};
+
+struct psy_am_i_supplied_data {
+	struct power_supply *psy;
+	unsigned int count;
+};
+
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
+};
+
+enum hwmon_in_attributes {
+	hwmon_in_enable = 0,
+	hwmon_in_input = 1,
+	hwmon_in_min = 2,
+	hwmon_in_max = 3,
+	hwmon_in_lcrit = 4,
+	hwmon_in_crit = 5,
+	hwmon_in_average = 6,
+	hwmon_in_lowest = 7,
+	hwmon_in_highest = 8,
+	hwmon_in_reset_history = 9,
+	hwmon_in_label = 10,
+	hwmon_in_alarm = 11,
+	hwmon_in_min_alarm = 12,
+	hwmon_in_max_alarm = 13,
+	hwmon_in_lcrit_alarm = 14,
+	hwmon_in_crit_alarm = 15,
+	hwmon_in_rated_min = 16,
+	hwmon_in_rated_max = 17,
+};
+
+enum hwmon_curr_attributes {
+	hwmon_curr_enable = 0,
+	hwmon_curr_input = 1,
+	hwmon_curr_min = 2,
+	hwmon_curr_max = 3,
+	hwmon_curr_lcrit = 4,
+	hwmon_curr_crit = 5,
+	hwmon_curr_average = 6,
+	hwmon_curr_lowest = 7,
+	hwmon_curr_highest = 8,
+	hwmon_curr_reset_history = 9,
+	hwmon_curr_label = 10,
+	hwmon_curr_alarm = 11,
+	hwmon_curr_min_alarm = 12,
+	hwmon_curr_max_alarm = 13,
+	hwmon_curr_lcrit_alarm = 14,
+	hwmon_curr_crit_alarm = 15,
+	hwmon_curr_rated_min = 16,
+	hwmon_curr_rated_max = 17,
+};
+
+enum hwmon_power_attributes {
+	hwmon_power_enable = 0,
+	hwmon_power_average = 1,
+	hwmon_power_average_interval = 2,
+	hwmon_power_average_interval_max = 3,
+	hwmon_power_average_interval_min = 4,
+	hwmon_power_average_highest = 5,
+	hwmon_power_average_lowest = 6,
+	hwmon_power_average_max = 7,
+	hwmon_power_average_min = 8,
+	hwmon_power_input = 9,
+	hwmon_power_input_highest = 10,
+	hwmon_power_input_lowest = 11,
+	hwmon_power_reset_history = 12,
+	hwmon_power_accuracy = 13,
+	hwmon_power_cap = 14,
+	hwmon_power_cap_hyst = 15,
+	hwmon_power_cap_max = 16,
+	hwmon_power_cap_min = 17,
+	hwmon_power_min = 18,
+	hwmon_power_max = 19,
+	hwmon_power_crit = 20,
+	hwmon_power_lcrit = 21,
+	hwmon_power_label = 22,
+	hwmon_power_alarm = 23,
+	hwmon_power_cap_alarm = 24,
+	hwmon_power_min_alarm = 25,
+	hwmon_power_max_alarm = 26,
+	hwmon_power_lcrit_alarm = 27,
+	hwmon_power_crit_alarm = 28,
+	hwmon_power_rated_min = 29,
+	hwmon_power_rated_max = 30,
+};
+
+enum hwmon_energy_attributes {
+	hwmon_energy_enable = 0,
+	hwmon_energy_input = 1,
+	hwmon_energy_label = 2,
+};
+
+enum hwmon_humidity_attributes {
+	hwmon_humidity_enable = 0,
+	hwmon_humidity_input = 1,
+	hwmon_humidity_label = 2,
+	hwmon_humidity_min = 3,
+	hwmon_humidity_min_hyst = 4,
+	hwmon_humidity_max = 5,
+	hwmon_humidity_max_hyst = 6,
+	hwmon_humidity_alarm = 7,
+	hwmon_humidity_fault = 8,
+	hwmon_humidity_rated_min = 9,
+	hwmon_humidity_rated_max = 10,
+};
+
+enum hwmon_fan_attributes {
+	hwmon_fan_enable = 0,
+	hwmon_fan_input = 1,
+	hwmon_fan_label = 2,
+	hwmon_fan_min = 3,
+	hwmon_fan_max = 4,
+	hwmon_fan_div = 5,
+	hwmon_fan_pulses = 6,
+	hwmon_fan_target = 7,
+	hwmon_fan_alarm = 8,
+	hwmon_fan_min_alarm = 9,
+	hwmon_fan_max_alarm = 10,
+	hwmon_fan_fault = 11,
+};
+
+enum hwmon_pwm_attributes {
+	hwmon_pwm_input = 0,
+	hwmon_pwm_enable = 1,
+	hwmon_pwm_mode = 2,
+	hwmon_pwm_freq = 3,
+	hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+	hwmon_intrusion_alarm = 0,
+	hwmon_intrusion_beep = 1,
+};
+
+struct trace_event_raw_hwmon_attr_class {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	long int val;
+	char __data[0];
+};
+
+struct trace_event_raw_hwmon_attr_show_string {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	u32 __data_loc_label;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hwmon_attr_class {
+	u32 attr_name;
+};
+
+struct trace_event_data_offsets_hwmon_attr_show_string {
+	u32 attr_name;
+	u32 label;
+};
+
+typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
+
+struct hwmon_device {
+	const char *name;
+	const char *label;
+	struct device dev;
+	const struct hwmon_chip_info *chip;
+	struct list_head tzdata;
+	struct attribute_group group;
+	const struct attribute_group **groups;
+};
+
+struct hwmon_device_attribute {
+	struct device_attribute dev_attr;
+	const struct hwmon_ops *ops;
+	enum hwmon_sensor_types type;
+	u32 attr;
+	int index;
+	char name[32];
+};
+
+struct hwmon_thermal_data {
+	struct list_head node;
+	struct device *dev;
+	int index;
+	struct thermal_zone_device *tzd;
+};
+
+enum chips {
+	adm1023 = 0,
+	adm1032 = 1,
+	adt7461 = 2,
+	adt7461a = 3,
+	adt7481 = 4,
+	g781 = 5,
+	lm84 = 6,
+	lm90 = 7,
+	lm99 = 8,
+	max1617 = 9,
+	max6642 = 10,
+	max6646 = 11,
+	max6648 = 12,
+	max6654 = 13,
+	max6657 = 14,
+	max6659 = 15,
+	max6680 = 16,
+	max6696 = 17,
+	nct210 = 18,
+	nct72 = 19,
+	ne1618 = 20,
+	sa56004 = 21,
+	tmp451 = 22,
+	tmp461 = 23,
+	w83l771 = 24,
+};
+
+struct lm90_params {
+	u32 flags;
+	u16 alert_alarms;
+	u8 max_convrate;
+	u8 resolution;
+	u8 reg_status2;
+	u8 reg_local_ext;
+	u8 faultqueue_mask;
+	u8 faultqueue_depth;
+};
+
+enum lm90_temp_reg_index {
+	LOCAL_LOW = 0,
+	LOCAL_HIGH = 1,
+	LOCAL_CRIT = 2,
+	REMOTE_CRIT = 3,
+	LOCAL_EMERG = 4,
+	REMOTE_EMERG = 5,
+	REMOTE2_CRIT = 6,
+	REMOTE2_EMERG = 7,
+	REMOTE_TEMP = 8,
+	REMOTE_LOW = 9,
+	REMOTE_HIGH = 10,
+	REMOTE_OFFSET = 11,
+	LOCAL_TEMP = 12,
+	REMOTE2_TEMP = 13,
+	REMOTE2_LOW = 14,
+	REMOTE2_HIGH = 15,
+	REMOTE2_OFFSET = 16,
+	TEMP_REG_NUM = 17,
+};
+
+struct lm90_data {
+	struct i2c_client *client;
+	struct device *hwmon_dev;
+	u32 chip_config[2];
+	u32 channel_config[4];
+	const char *channel_label[3];
+	struct hwmon_channel_info chip_info;
+	struct hwmon_channel_info temp_info;
+	const struct hwmon_channel_info *info[3];
+	struct hwmon_chip_info chip;
+	struct mutex update_lock;
+	struct delayed_work alert_work;
+	struct work_struct report_work;
+	bool valid;
+	bool alarms_valid;
+	long unsigned int last_updated;
+	long unsigned int alarms_updated;
+	int kind;
+	u32 flags;
+	unsigned int update_interval;
+	u8 config;
+	u8 config_orig;
+	u8 convrate_orig;
+	u8 resolution;
+	u16 alert_alarms;
+	u8 max_convrate;
+	u8 reg_status2;
+	u8 reg_local_ext;
+	u8 reg_remote_ext;
+	u8 faultqueue_mask;
+	u8 faultqueue_depth;
+	u16 temp[17];
+	u8 temp_hyst;
+	u8 conalert;
+	u16 reported_alarms;
+	u16 current_alarms;
+	u16 alarms;
+};
+
+struct thermal_attr {
+	struct device_attribute attr;
+	char name[20];
+};
+
+struct trace_event_raw_thermal_temperature {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int temp_prev;
+	int temp;
+	char __data[0];
+};
+
+struct trace_event_raw_cdev_update {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	long unsigned int target;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_zone_trip {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int trip;
+	enum thermal_trip_type trip_type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_temperature {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_cdev_update {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_zone_trip {
+	u32 thermal_zone;
+};
+
+typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
+
+typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);
+
+typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
+
+struct thermal_instance {
+	int id;
+	char name[20];
+	struct thermal_zone_device *tz;
+	struct thermal_cooling_device *cdev;
+	int trip;
+	bool initialized;
+	long unsigned int upper;
+	long unsigned int lower;
+	long unsigned int target;
+	char attr_name[20];
+	struct device_attribute attr;
+	char weight_attr_name[20];
+	struct device_attribute weight_attr;
+	struct list_head tz_node;
+	struct list_head cdev_node;
+	unsigned int weight;
+};
+
+struct power_supply_hwmon {
+	struct power_supply *psy;
+	long unsigned int *props;
+};
+
+struct hwmon_type_attr_list {
+	const u32 *attrs;
+	size_t n_attrs;
+};
+
+struct thermal_hwmon_device {
+	char type[20];
+	struct device *device;
+	int count;
+	struct list_head tz_list;
+	struct list_head node;
+};
+
+struct thermal_hwmon_attr {
+	struct device_attribute attr;
+	char name[16];
+};
+
+struct thermal_hwmon_temp {
+	struct list_head hwmon_node;
+	struct thermal_zone_device *tz;
+	struct thermal_hwmon_attr temp_input;
+	struct thermal_hwmon_attr temp_crit;
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_SM4_XTS = 4,
+	BLK_ENCRYPTION_MODE_MAX = 5,
+};
+
+struct dm_kobject_holder {
+	struct kobject kobj;
+	struct completion completion;
+};
+
+enum dev_type {
+	DEV_UNKNOWN = 0,
+	DEV_X1 = 1,
+	DEV_X2 = 2,
+	DEV_X4 = 3,
+	DEV_X8 = 4,
+	DEV_X16 = 5,
+	DEV_X32 = 6,
+	DEV_X64 = 7,
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+enum mem_type___2 {
+	MEM_EMPTY = 0,
+	MEM_RESERVED = 1,
+	MEM_UNKNOWN = 2,
+	MEM_FPM = 3,
+	MEM_EDO = 4,
+	MEM_BEDO = 5,
+	MEM_SDR = 6,
+	MEM_RDR = 7,
+	MEM_DDR = 8,
+	MEM_RDDR = 9,
+	MEM_RMBS = 10,
+	MEM_DDR2 = 11,
+	MEM_FB_DDR2 = 12,
+	MEM_RDDR2 = 13,
+	MEM_XDR = 14,
+	MEM_DDR3 = 15,
+	MEM_RDDR3 = 16,
+	MEM_LRDDR3 = 17,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
+};
+
+enum edac_type {
+	EDAC_UNKNOWN = 0,
+	EDAC_NONE = 1,
+	EDAC_RESERVED = 2,
+	EDAC_PARITY = 3,
+	EDAC_EC = 4,
+	EDAC_SECDED = 5,
+	EDAC_S2ECD2ED = 6,
+	EDAC_S4ECD4ED = 7,
+	EDAC_S8ECD8ED = 8,
+	EDAC_S16ECD16ED = 9,
+};
+
+enum scrub_type {
+	SCRUB_UNKNOWN = 0,
+	SCRUB_NONE = 1,
+	SCRUB_SW_PROG = 2,
+	SCRUB_SW_SRC = 3,
+	SCRUB_SW_PROG_SRC = 4,
+	SCRUB_SW_TUNABLE = 5,
+	SCRUB_HW_PROG = 6,
+	SCRUB_HW_SRC = 7,
+	SCRUB_HW_PROG_SRC = 8,
+	SCRUB_HW_TUNABLE = 9,
+};
+
+enum edac_mc_layer_type {
+	EDAC_MC_LAYER_BRANCH = 0,
+	EDAC_MC_LAYER_CHANNEL = 1,
+	EDAC_MC_LAYER_SLOT = 2,
+	EDAC_MC_LAYER_CHIP_SELECT = 3,
+	EDAC_MC_LAYER_ALL_MEM = 4,
+};
+
+struct edac_mc_layer {
+	enum edac_mc_layer_type type;
+	unsigned int size;
+	bool is_virt_csrow;
+};
+
+struct mem_ctl_info;
+
+struct dimm_info {
+	struct device dev;
+	char label[32];
+	unsigned int location[3];
+	struct mem_ctl_info *mci;
+	unsigned int idx;
+	u32 grain;
+	enum dev_type dtype;
+	enum mem_type___2 mtype;
+	enum edac_type edac_mode;
+	u32 nr_pages;
+	unsigned int csrow;
+	unsigned int cschannel;
+	u16 smbios_handle;
+	u32 ce_count;
+	u32 ue_count;
+};
+
+struct mcidev_sysfs_attribute;
+
+struct edac_raw_error_desc {
+	char location[256];
+	char label[296];
+	long int grain;
+	u16 error_count;
+	enum hw_event_mc_err_type type;
+	int top_layer;
+	int mid_layer;
+	int low_layer;
+	long unsigned int page_frame_number;
+	long unsigned int offset_in_page;
+	long unsigned int syndrome;
+	const char *msg;
+	const char *other_detail;
+};
+
+struct csrow_info;
+
+struct mem_ctl_info {
+	struct device dev;
+	struct bus_type *bus;
+	struct list_head link;
+	struct module *owner;
+	long unsigned int mtype_cap;
+	long unsigned int edac_ctl_cap;
+	long unsigned int edac_cap;
+	long unsigned int scrub_cap;
+	enum scrub_type scrub_mode;
+	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
+	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
+	void (*edac_check)(struct mem_ctl_info *);
+	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
+	int mc_idx;
+	struct csrow_info **csrows;
+	unsigned int nr_csrows;
+	unsigned int num_cschannel;
+	unsigned int n_layers;
+	struct edac_mc_layer *layers;
+	bool csbased;
+	unsigned int tot_dimms;
+	struct dimm_info **dimms;
+	struct device *pdev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	u32 ce_noinfo_count;
+	u32 ue_noinfo_count;
+	u32 ue_mc;
+	u32 ce_mc;
+	struct completion complete;
+	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
+	struct delayed_work work;
+	struct edac_raw_error_desc error_desc;
+	int op_state;
+	struct dentry *debugfs;
+	u8 fake_inject_layer[3];
+	bool fake_inject_ue;
+	u16 fake_inject_count;
+};
+
+struct rank_info {
+	int chan_idx;
+	struct csrow_info *csrow;
+	struct dimm_info *dimm;
+	u32 ce_count;
+};
+
+struct csrow_info {
+	struct device dev;
+	long unsigned int first_page;
+	long unsigned int last_page;
+	long unsigned int page_mask;
+	int csrow_idx;
+	u32 ue_count;
+	u32 ce_count;
+	struct mem_ctl_info *mci;
+	u32 nr_channels;
+	struct rank_info **channels;
+};
+
+struct dev_ch_attribute {
+	struct device_attribute attr;
+	unsigned int channel;
+};
+
+struct edac_device_counter {
+	u32 ue_count;
+	u32 ce_count;
+};
+
+struct edac_device_ctl_info;
+
+struct edac_dev_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct edac_device_instance;
+
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
+struct edac_device_ctl_info {
+	struct list_head link;
+	struct module *owner;
+	int dev_idx;
+	int log_ue;
+	int log_ce;
+	int panic_on_ue;
+	unsigned int poll_msec;
+	long unsigned int delay;
+	struct edac_dev_sysfs_attribute *sysfs_attributes;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_device_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	struct completion removal_complete;
+	char name[32];
+	u32 nr_instances;
+	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
+	struct edac_device_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_block_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+	struct edac_device_block *block;
+	unsigned int value;
+};
+
+struct edac_device_block {
+	struct edac_device_instance *instance;
+	char name[32];
+	struct edac_device_counter counters;
+	int nr_attribs;
+	struct edac_dev_sysfs_block_attribute *block_attributes;
+	struct kobject kobj;
+};
+
+struct edac_device_instance {
+	struct edac_device_ctl_info *ctl;
+	char name[35];
+	struct edac_device_counter counters;
+	u32 nr_blocks;
+	struct edac_device_block *blocks;
+	struct kobject kobj;
+};
+
+struct ctl_info_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct instance_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_instance *, char *);
+	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
+};
+
+struct edac_pci_counter {
+	atomic_t pe_count;
+	atomic_t npe_count;
+};
+
+struct edac_pci_ctl_info {
+	struct list_head link;
+	int pci_idx;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_pci_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	long unsigned int start_time;
+	struct completion complete;
+	char name[32];
+	struct edac_pci_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_pci_gen_data {
+	int edac_idx;
+};
+
+struct mmc_cid {
+	unsigned int manfid;
+	char prod_name[8];
+	unsigned char prv;
+	unsigned int serial;
+	short unsigned int oemid;
+	short unsigned int year;
+	unsigned char hwrev;
+	unsigned char fwrev;
+	unsigned char month;
+};
+
+struct mmc_csd {
+	unsigned char structure;
+	unsigned char mmca_vsn;
+	short unsigned int cmdclass;
+	short unsigned int taac_clks;
+	unsigned int taac_ns;
+	unsigned int c_size;
+	unsigned int r2w_factor;
+	unsigned int max_dtr;
+	unsigned int erase_size;
+	unsigned int read_blkbits;
+	unsigned int write_blkbits;
+	unsigned int capacity;
+	unsigned int read_partial: 1;
+	unsigned int read_misalign: 1;
+	unsigned int write_partial: 1;
+	unsigned int write_misalign: 1;
+	unsigned int dsr_imp: 1;
+};
+
+struct mmc_ext_csd {
+	u8 rev;
+	u8 erase_group_def;
+	u8 sec_feature_support;
+	u8 rel_sectors;
+	u8 rel_param;
+	bool enhanced_rpmb_supported;
+	u8 part_config;
+	u8 cache_ctrl;
+	u8 rst_n_function;
+	u8 max_packed_writes;
+	u8 max_packed_reads;
+	u8 packed_event_en;
+	unsigned int part_time;
+	unsigned int sa_timeout;
+	unsigned int generic_cmd6_time;
+	unsigned int power_off_longtime;
+	u8 power_off_notification;
+	unsigned int hs_max_dtr;
+	unsigned int hs200_max_dtr;
+	unsigned int sectors;
+	unsigned int hc_erase_size;
+	unsigned int hc_erase_timeout;
+	unsigned int sec_trim_mult;
+	unsigned int sec_erase_mult;
+	unsigned int trim_timeout;
+	bool partition_setting_completed;
+	long long unsigned int enhanced_area_offset;
+	unsigned int enhanced_area_size;
+	unsigned int cache_size;
+	bool hpi_en;
+	bool hpi;
+	unsigned int hpi_cmd;
+	bool bkops;
+	bool man_bkops_en;
+	bool auto_bkops_en;
+	unsigned int data_sector_size;
+	unsigned int data_tag_unit_size;
+	unsigned int boot_ro_lock;
+	bool boot_ro_lockable;
+	bool ffu_capable;
+	bool cmdq_en;
+	bool cmdq_support;
+	unsigned int cmdq_depth;
+	u8 fwrev[8];
+	u8 raw_exception_status;
+	u8 raw_partition_support;
+	u8 raw_rpmb_size_mult;
+	u8 raw_erased_mem_count;
+	u8 strobe_support;
+	u8 raw_ext_csd_structure;
+	u8 raw_card_type;
+	u8 raw_driver_strength;
+	u8 out_of_int_time;
+	u8 raw_pwr_cl_52_195;
+	u8 raw_pwr_cl_26_195;
+	u8 raw_pwr_cl_52_360;
+	u8 raw_pwr_cl_26_360;
+	u8 raw_s_a_timeout;
+	u8 raw_hc_erase_gap_size;
+	u8 raw_erase_timeout_mult;
+	u8 raw_hc_erase_grp_size;
+	u8 raw_boot_mult;
+	u8 raw_sec_trim_mult;
+	u8 raw_sec_erase_mult;
+	u8 raw_sec_feature_support;
+	u8 raw_trim_mult;
+	u8 raw_pwr_cl_200_195;
+	u8 raw_pwr_cl_200_360;
+	u8 raw_pwr_cl_ddr_52_195;
+	u8 raw_pwr_cl_ddr_52_360;
+	u8 raw_pwr_cl_ddr_200_360;
+	u8 raw_bkops_status;
+	u8 raw_sectors[4];
+	u8 pre_eol_info;
+	u8 device_life_time_est_typ_a;
+	u8 device_life_time_est_typ_b;
+	unsigned int feature_support;
+};
+
+struct sd_scr {
+	unsigned char sda_vsn;
+	unsigned char sda_spec3;
+	unsigned char sda_spec4;
+	unsigned char sda_specx;
+	unsigned char bus_widths;
+	unsigned char cmds;
+};
+
+struct sd_ssr {
+	unsigned int au;
+	unsigned int erase_timeout;
+	unsigned int erase_offset;
+};
+
+struct sd_switch_caps {
+	unsigned int hs_max_dtr;
+	unsigned int uhs_max_dtr;
+	unsigned int sd3_bus_mode;
+	unsigned int sd3_drv_type;
+	unsigned int sd3_curr_limit;
+};
+
+struct sd_ext_reg {
+	u8 fno;
+	u8 page;
+	u16 offset;
+	u8 rev;
+	u8 feature_enabled;
+	u8 feature_support;
+};
+
+struct sdio_cccr {
+	unsigned int sdio_vsn;
+	unsigned int sd_vsn;
+	unsigned int multi_block: 1;
+	unsigned int low_speed: 1;
+	unsigned int wide_bus: 1;
+	unsigned int high_power: 1;
+	unsigned int high_speed: 1;
+	unsigned int disable_cd: 1;
+	unsigned int enable_async_irq: 1;
+};
+
+struct sdio_cis {
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int blksize;
+	unsigned int max_dtr;
+};
+
+struct mmc_part {
+	u64 size;
+	unsigned int part_cfg;
+	char name[20];
+	bool force_ro;
+	unsigned int area_type;
+};
+
+struct mmc_host;
+
+struct sdio_func;
+
+struct sdio_func_tuple;
+
+struct mmc_card {
+	struct mmc_host *host;
+	struct device dev;
+	u32 ocr;
+	unsigned int rca;
+	unsigned int type;
+	unsigned int state;
+	unsigned int quirks;
+	unsigned int quirk_max_rate;
+	bool reenable_cmdq;
+	unsigned int erase_size;
+	unsigned int erase_shift;
+	unsigned int pref_erase;
+	unsigned int eg_boundary;
+	unsigned int erase_arg;
+	u8 erased_byte;
+	u32 raw_cid[4];
+	u32 raw_csd[4];
+	u32 raw_scr[2];
+	u32 raw_ssr[16];
+	struct mmc_cid cid;
+	struct mmc_csd csd;
+	struct mmc_ext_csd ext_csd;
+	struct sd_scr scr;
+	struct sd_ssr ssr;
+	struct sd_switch_caps sw_caps;
+	struct sd_ext_reg ext_power;
+	struct sd_ext_reg ext_perf;
+	unsigned int sdio_funcs;
+	atomic_t sdio_funcs_probed;
+	struct sdio_cccr cccr;
+	struct sdio_cis cis;
+	struct sdio_func *sdio_func[7];
+	struct sdio_func *sdio_single_irq;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+	unsigned int sd_bus_speed;
+	unsigned int mmc_avail_type;
+	unsigned int drive_strength;
+	struct dentry *debugfs_root;
+	struct mmc_part part[7];
+	unsigned int nr_parts;
+	struct workqueue_struct *complete_wq;
+};
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+	unsigned int clock;
+	short unsigned int vdd;
+	unsigned int power_delay_ms;
+	unsigned char bus_mode;
+	unsigned char chip_select;
+	unsigned char power_mode;
+	unsigned char bus_width;
+	unsigned char timing;
+	unsigned char signal_voltage;
+	unsigned char drv_type;
+	bool enhanced_strobe;
+};
+
+struct mmc_ctx {
+	struct task_struct *task;
+};
+
+struct mmc_slot {
+	int cd_irq;
+	bool cd_wake_enabled;
+	void *handler_priv;
+};
+
+struct mmc_supply {
+	struct regulator *vmmc;
+	struct regulator *vqmmc;
+};
+
+struct mmc_host_ops;
+
+struct mmc_pwrseq;
+
+struct mmc_bus_ops;
+
+struct mmc_request;
+
+struct mmc_cqe_ops;
+
+struct mmc_host {
+	struct device *parent;
+	struct device class_dev;
+	int index;
+	const struct mmc_host_ops *ops;
+	struct mmc_pwrseq *pwrseq;
+	unsigned int f_min;
+	unsigned int f_max;
+	unsigned int f_init;
+	u32 ocr_avail;
+	u32 ocr_avail_sdio;
+	u32 ocr_avail_sd;
+	u32 ocr_avail_mmc;
+	struct wakeup_source *ws;
+	u32 max_current_330;
+	u32 max_current_300;
+	u32 max_current_180;
+	u32 caps;
+	u32 caps2;
+	int fixed_drv_type;
+	mmc_pm_flag_t pm_caps;
+	unsigned int max_seg_size;
+	short unsigned int max_segs;
+	short unsigned int unused;
+	unsigned int max_req_size;
+	unsigned int max_blk_size;
+	unsigned int max_blk_count;
+	unsigned int max_busy_timeout;
+	spinlock_t lock;
+	struct mmc_ios ios;
+	unsigned int use_spi_crc: 1;
+	unsigned int claimed: 1;
+	unsigned int doing_init_tune: 1;
+	unsigned int can_retune: 1;
+	unsigned int doing_retune: 1;
+	unsigned int retune_now: 1;
+	unsigned int retune_paused: 1;
+	unsigned int retune_crc_disable: 1;
+	unsigned int can_dma_map_merge: 1;
+	int rescan_disable;
+	int rescan_entered;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct timer_list retune_timer;
+	bool trigger_card_event;
+	struct mmc_card *card;
+	wait_queue_head_t wq;
+	struct mmc_ctx *claimer;
+	int claim_cnt;
+	struct mmc_ctx default_ctx;
+	struct delayed_work detect;
+	int detect_change;
+	struct mmc_slot slot;
+	const struct mmc_bus_ops *bus_ops;
+	unsigned int sdio_irqs;
+	struct task_struct *sdio_irq_thread;
+	struct work_struct sdio_irq_work;
+	bool sdio_irq_pending;
+	atomic_t sdio_irq_thread_abort;
+	mmc_pm_flag_t pm_flags;
+	struct led_trigger *led;
+	bool regulator_enabled;
+	struct mmc_supply supply;
+	struct dentry *debugfs_root;
+	struct mmc_request *ongoing_mrq;
+	unsigned int actual_clock;
+	unsigned int slotno;
+	int dsr_req;
+	u32 dsr;
+	const struct mmc_cqe_ops *cqe_ops;
+	void *cqe_private;
+	int cqe_qdepth;
+	bool cqe_enabled;
+	bool cqe_on;
+	bool hsq_enabled;
+	u32 err_stats[15];
+	long unsigned int private[0];
+};
+
+struct mmc_data;
+
+struct mmc_command {
+	u32 opcode;
+	u32 arg;
+	u32 resp[4];
+	unsigned int flags;
+	unsigned int retries;
+	int error;
+	unsigned int busy_timeout;
+	struct mmc_data *data;
+	struct mmc_request *mrq;
+};
+
+struct mmc_data {
+	unsigned int timeout_ns;
+	unsigned int timeout_clks;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	int error;
+	unsigned int flags;
+	unsigned int bytes_xfered;
+	struct mmc_command *stop;
+	struct mmc_request *mrq;
+	unsigned int sg_len;
+	int sg_count;
+	struct scatterlist *sg;
+	s32 host_cookie;
+};
+
+struct mmc_request {
+	struct mmc_command *sbc;
+	struct mmc_command *cmd;
+	struct mmc_data *data;
+	struct mmc_command *stop;
+	struct completion completion;
+	struct completion cmd_completion;
+	void (*done)(struct mmc_request *);
+	void (*recovery_notifier)(struct mmc_request *);
+	struct mmc_host *host;
+	bool cap_cmd_during_tfr;
+	int tag;
+};
+
+enum mmc_err_stat {
+	MMC_ERR_CMD_TIMEOUT = 0,
+	MMC_ERR_CMD_CRC = 1,
+	MMC_ERR_DAT_TIMEOUT = 2,
+	MMC_ERR_DAT_CRC = 3,
+	MMC_ERR_AUTO_CMD = 4,
+	MMC_ERR_ADMA = 5,
+	MMC_ERR_TUNING = 6,
+	MMC_ERR_CMDQ_RED = 7,
+	MMC_ERR_CMDQ_GCE = 8,
+	MMC_ERR_CMDQ_ICCE = 9,
+	MMC_ERR_REQ_TIMEOUT = 10,
+	MMC_ERR_CMDQ_REQ_TIMEOUT = 11,
+	MMC_ERR_ICE_CFG = 12,
+	MMC_ERR_CTRL_TIMEOUT = 13,
+	MMC_ERR_UNEXPECTED_IRQ = 14,
+	MMC_ERR_MAX = 15,
+};
+
+struct mmc_host_ops {
+	void (*post_req)(struct mmc_host *, struct mmc_request *, int);
+	void (*pre_req)(struct mmc_host *, struct mmc_request *);
+	void (*request)(struct mmc_host *, struct mmc_request *);
+	int (*request_atomic)(struct mmc_host *, struct mmc_request *);
+	void (*set_ios)(struct mmc_host *, struct mmc_ios *);
+	int (*get_ro)(struct mmc_host *);
+	int (*get_cd)(struct mmc_host *);
+	void (*enable_sdio_irq)(struct mmc_host *, int);
+	void (*ack_sdio_irq)(struct mmc_host *);
+	void (*init_card)(struct mmc_host *, struct mmc_card *);
+	int (*start_signal_voltage_switch)(struct mmc_host *, struct mmc_ios *);
+	int (*card_busy)(struct mmc_host *);
+	int (*execute_tuning)(struct mmc_host *, u32);
+	int (*prepare_hs400_tuning)(struct mmc_host *, struct mmc_ios *);
+	int (*execute_hs400_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*hs400_prepare_ddr)(struct mmc_host *);
+	void (*hs400_downgrade)(struct mmc_host *);
+	void (*hs400_complete)(struct mmc_host *);
+	void (*hs400_enhanced_strobe)(struct mmc_host *, struct mmc_ios *);
+	int (*select_drive_strength)(struct mmc_card *, unsigned int, int, int, int *);
+	void (*card_hw_reset)(struct mmc_host *);
+	void (*card_event)(struct mmc_host *);
+	int (*multi_io_quirk)(struct mmc_card *, unsigned int, int);
+	int (*init_sd_express)(struct mmc_host *, struct mmc_ios *);
+};
+
+struct mmc_cqe_ops {
+	int (*cqe_enable)(struct mmc_host *, struct mmc_card *);
+	void (*cqe_disable)(struct mmc_host *);
+	int (*cqe_request)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_post_req)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_off)(struct mmc_host *);
+	int (*cqe_wait_for_idle)(struct mmc_host *);
+	bool (*cqe_timeout)(struct mmc_host *, struct mmc_request *, bool *);
+	void (*cqe_recovery_start)(struct mmc_host *);
+	void (*cqe_recovery_finish)(struct mmc_host *);
+};
+
+struct mmc_bus_ops {
+	void (*remove)(struct mmc_host *);
+	void (*detect)(struct mmc_host *);
+	int (*pre_suspend)(struct mmc_host *);
+	int (*suspend)(struct mmc_host *);
+	int (*resume)(struct mmc_host *);
+	int (*runtime_suspend)(struct mmc_host *);
+	int (*runtime_resume)(struct mmc_host *);
+	int (*alive)(struct mmc_host *);
+	int (*shutdown)(struct mmc_host *);
+	int (*hw_reset)(struct mmc_host *);
+	int (*sw_reset)(struct mmc_host *);
+	bool (*cache_enabled)(struct mmc_host *);
+	int (*flush_cache)(struct mmc_host *);
+};
+
+struct mmc_driver {
+	struct device_driver drv;
+	int (*probe)(struct mmc_card *);
+	void (*remove)(struct mmc_card *);
+	void (*shutdown)(struct mmc_card *);
+};
+
+struct mmc_clk_phase {
+	bool valid;
+	u16 in_deg;
+	u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+	struct mmc_clk_phase phase[11];
+};
+
+struct mmc_pwrseq_ops;
+
+struct mmc_pwrseq {
+	const struct mmc_pwrseq_ops *ops;
+	struct device *dev;
+	struct list_head pwrseq_node;
+	struct module *owner;
+};
+
+struct mmc_pwrseq_ops {
+	void (*pre_power_on)(struct mmc_host *);
+	void (*post_power_on)(struct mmc_host *);
+	void (*power_off)(struct mmc_host *);
+	void (*reset)(struct mmc_host *);
+};
+
+struct instance_attribute___2 {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
+	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
+};
+
+struct edac_pci_dev_attribute {
+	struct attribute attr;
+	void *value;
+	ssize_t (*show)(void *, char *);
+	ssize_t (*store)(void *, const char *, size_t);
+};
+
+typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
+
+struct trace_event_raw_mmc_request_start {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	u32 cmd_arg;
+	unsigned int cmd_flags;
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	u32 stop_arg;
+	unsigned int stop_flags;
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	u32 sbc_arg;
+	unsigned int sbc_flags;
+	unsigned int sbc_retries;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	unsigned int blksz;
+	unsigned int data_flags;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mmc_request_done {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	int cmd_err;
+	u32 cmd_resp[4];
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	int stop_err;
+	u32 stop_resp[4];
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	int sbc_err;
+	u32 sbc_resp[4];
+	unsigned int sbc_retries;
+	unsigned int bytes_xfered;
+	int data_err;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmc_request_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mmc_request_done {
+	u32 name;
+};
+
+typedef void (*btf_trace_mmc_request_start)(void *, struct mmc_host *, struct mmc_request *);
+
+typedef void (*btf_trace_mmc_request_done)(void *, struct mmc_host *, struct mmc_request *);
+
+enum mmc_busy_cmd {
+	MMC_BUSY_CMD6 = 0,
+	MMC_BUSY_ERASE = 1,
+	MMC_BUSY_HPI = 2,
+	MMC_BUSY_EXTR_SINGLE = 3,
+	MMC_BUSY_IO = 4,
+};
+
+struct mmc_busy_data {
+	struct mmc_card *card;
+	bool retry_crc_err;
+	enum mmc_busy_cmd busy_cmd;
+};
+
+struct mmc_op_cond_busy_data {
+	struct mmc_host *host;
+	u32 ocr;
+	struct mmc_command *cmd;
+};
+
+struct mmc_fixup {
+	const char *name;
+	u64 rev_start;
+	u64 rev_end;
+	unsigned int manfid;
+	short unsigned int oemid;
+	u16 cis_vendor;
+	u16 cis_device;
+	unsigned int ext_csd_rev;
+	const char *of_compatible;
+	void (*vendor_fixup)(struct mmc_card *, int);
+	int data;
+};
+
+typedef void sdio_irq_handler_t(struct sdio_func *);
+
+struct sdio_func {
+	struct mmc_card *card;
+	struct device dev;
+	sdio_irq_handler_t *irq_handler;
+	unsigned int num;
+	unsigned char class;
+	short unsigned int vendor;
+	short unsigned int device;
+	unsigned int max_blksize;
+	unsigned int cur_blksize;
+	unsigned int enable_timeout;
+	unsigned int state;
+	u8 *tmpbuf;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+};
+
+struct sdio_func_tuple {
+	struct sdio_func_tuple *next;
+	unsigned char code;
+	unsigned char size;
+	unsigned char data[0];
+};
+
+struct sd_busy_data {
+	struct mmc_card *card;
+	u8 *reg_buf;
+};
+
+struct sdio_device_id {
+	__u8 class;
+	__u16 vendor;
+	__u16 device;
+	kernel_ulong_t driver_data;
+};
+
+struct sdio_driver {
+	char *name;
+	const struct sdio_device_id *id_table;
+	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
+	void (*remove)(struct sdio_func *);
+	struct device_driver drv;
+};
+
+typedef int tpl_parse_t(struct mmc_card *, struct sdio_func *, const unsigned char *, unsigned int);
+
+struct cis_tpl {
+	unsigned char code;
+	unsigned char min_size;
+	tpl_parse_t *parse;
+};
+
+struct mmc_gpio {
+	struct gpio_desc *ro_gpio;
+	struct gpio_desc *cd_gpio;
+	irqreturn_t (*cd_gpio_isr)(int, void *);
+	char *ro_label;
+	char *cd_label;
+	u32 cd_debounce_delay_ms;
+};
+
+struct mmc_pwrseq_emmc {
+	struct mmc_pwrseq pwrseq;
+	struct notifier_block reset_nb;
+	struct gpio_desc *reset_gpio;
+};
+
+struct mmc_pwrseq_simple {
+	struct mmc_pwrseq pwrseq;
+	bool clk_enabled;
+	u32 post_power_on_delay_ms;
+	u32 power_off_delay_us;
+	struct clk *ext_clk;
+	struct gpio_descs *reset_gpios;
+};
+
+struct mmc_ioc_cmd {
+	int write_flag;
+	int is_acmd;
+	__u32 opcode;
+	__u32 arg;
+	__u32 response[4];
+	unsigned int flags;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int postsleep_min_us;
+	unsigned int postsleep_max_us;
+	unsigned int data_timeout_ns;
+	unsigned int cmd_timeout_ms;
+	__u32 __pad;
+	__u64 data_ptr;
+};
+
+struct mmc_ioc_multi_cmd {
+	__u64 num_of_cmds;
+	struct mmc_ioc_cmd cmds[0];
+};
+
+enum mmc_issued {
+	MMC_REQ_STARTED = 0,
+	MMC_REQ_BUSY = 1,
+	MMC_REQ_FAILED_TO_START = 2,
+	MMC_REQ_FINISHED = 3,
+};
+
+enum mmc_issue_type {
+	MMC_ISSUE_SYNC = 0,
+	MMC_ISSUE_DCMD = 1,
+	MMC_ISSUE_ASYNC = 2,
+	MMC_ISSUE_MAX = 3,
+};
+
+struct mmc_blk_request {
+	struct mmc_request mrq;
+	struct mmc_command sbc;
+	struct mmc_command cmd;
+	struct mmc_command stop;
+	struct mmc_data data;
+};
+
+enum mmc_drv_op {
+	MMC_DRV_OP_IOCTL = 0,
+	MMC_DRV_OP_IOCTL_RPMB = 1,
+	MMC_DRV_OP_BOOT_WP = 2,
+	MMC_DRV_OP_GET_CARD_STATUS = 3,
+	MMC_DRV_OP_GET_EXT_CSD = 4,
+};
+
+struct mmc_queue_req {
+	struct mmc_blk_request brq;
+	struct scatterlist *sg;
+	enum mmc_drv_op drv_op;
+	int drv_op_result;
+	void *drv_op_data;
+	unsigned int ioc_count;
+	int retries;
+};
+
+struct mmc_blk_data;
+
+struct mmc_queue {
+	struct mmc_card *card;
+	struct mmc_ctx ctx;
+	struct blk_mq_tag_set tag_set;
+	struct mmc_blk_data *blkdata;
+	struct request_queue *queue;
+	spinlock_t lock;
+	int in_flight[3];
+	unsigned int cqe_busy;
+	bool busy;
+	bool recovery_needed;
+	bool in_recovery;
+	bool rw_wait;
+	bool waiting;
+	struct work_struct recovery_work;
+	wait_queue_head_t wait;
+	struct request *recovery_req;
+	struct request *complete_req;
+	struct mutex complete_lock;
+	struct work_struct complete_work;
+};
+
+struct mmc_blk_data {
+	struct device *parent;
+	struct gendisk *disk;
+	struct mmc_queue queue;
+	struct list_head part;
+	struct list_head rpmbs;
+	unsigned int flags;
+	struct kref kref;
+	unsigned int read_only;
+	unsigned int part_type;
+	unsigned int reset_done;
+	unsigned int part_curr;
+	int area_type;
+	struct dentry *status_dentry;
+	struct dentry *ext_csd_dentry;
+};
+
+struct mmc_blk_busy_data {
+	struct mmc_card *card;
+	u32 status;
+};
+
+struct mmc_rpmb_data {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	unsigned int part_index;
+	struct mmc_blk_data *md;
+	struct list_head node;
+};
+
+struct mmc_blk_ioc_data {
+	struct mmc_ioc_cmd ic;
+	unsigned char *buf;
+	u64 buf_bytes;
+	struct mmc_rpmb_data *rpmb;
+};
+
+struct mmc_spi_platform_data {
+	int (*init)(struct device *, irqreturn_t (*)(int, void *), void *);
+	void (*exit)(struct device *, void *);
+	long unsigned int caps;
+	long unsigned int caps2;
+	u16 detect_delay;
+	u16 powerup_msecs;
+	u32 ocr_mask;
+	void (*setpower)(struct device *, unsigned int);
+};
+
+struct scratch {
+	u8 status[29];
+	u8 data_token;
+	__be16 crc_val;
+};
+
+struct mmc_spi_host {
+	struct mmc_host *mmc;
+	struct spi_device *spi;
+	unsigned char power_mode;
+	u16 powerup_msecs;
+	struct mmc_spi_platform_data *pdata;
+	struct spi_transfer token;
+	struct spi_transfer t;
+	struct spi_transfer crc;
+	struct spi_transfer early_status;
+	struct spi_message m;
+	struct spi_transfer status;
+	struct spi_message readback;
+	struct device *dma_dev;
+	struct scratch *data;
+	dma_addr_t data_dma;
+	void *ones;
+	dma_addr_t ones_dma;
+};
+
+struct of_mmc_spi {
+	struct mmc_spi_platform_data pdata;
+	int detect_irq;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+struct led_pwm {
+	const char *name;
+	u8 active_low;
+	u8 default_state;
+	unsigned int max_brightness;
+};
+
+struct led_pwm_data {
+	struct led_classdev cdev;
+	struct pwm_device *pwm;
+	struct pwm_state pwmstate;
+	unsigned int active_low;
+};
+
+struct led_pwm_priv {
+	int num_leds;
+	struct led_pwm_data leds[0];
+};
+
+struct oneshot_trig_data {
+	unsigned int invert;
+};
+
+struct heartbeat_trig_data {
+	struct led_classdev *led_cdev;
+	unsigned int phase;
+	unsigned int period;
+	struct timer_list timer;
+	unsigned int invert;
+};
+
+enum cpu_led_event {
+	CPU_LED_IDLE_START = 0,
+	CPU_LED_IDLE_END = 1,
+	CPU_LED_START = 2,
+	CPU_LED_STOP = 3,
+	CPU_LED_HALTED = 4,
+};
+
+struct led_trigger_cpu {
+	bool is_active;
+	char name[8];
+	struct led_trigger *_trig;
+};
+
+struct bl_trig_notifier {
+	struct led_classdev *led;
+	int brightness;
+	int old_status;
+	struct notifier_block notifier;
+	unsigned int invert;
+};
+
+struct gpio_trig_data {
+	struct led_classdev *led;
+	unsigned int desired_brightness;
+	unsigned int inverted;
+	unsigned int gpio;
+};
+
+struct transient_trig_data {
+	int activate;
+	int state;
+	int restore_state;
+	long unsigned int duration;
+	struct timer_list timer;
+	struct led_classdev *led_cdev;
+};
+
+struct activity_data {
+	struct timer_list timer;
+	struct led_classdev *led_cdev;
+	u64 last_used;
+	u64 last_boot;
+	int time_left;
+	int state;
+	int invert;
+};
+
+enum led_audio {
+	LED_AUDIO_MUTE = 0,
+	LED_AUDIO_MICMUTE = 1,
+	NUM_AUDIO_LEDS = 2,
+};
+
+struct led_netdev_data {
+	spinlock_t lock;
+	struct delayed_work work;
+	struct notifier_block notifier;
+	struct led_classdev *led_cdev;
+	struct net_device *net_dev;
+	char device_name[16];
+	atomic_t interval;
+	unsigned int last_activity;
+	long unsigned int mode;
+};
+
+enum netdev_led_attr {
+	NETDEV_ATTR_LINK = 0,
+	NETDEV_ATTR_TX = 1,
+	NETDEV_ATTR_RX = 2,
+};
+
+struct pattern_trig_data {
+	struct led_classdev *led_cdev;
+	struct led_pattern patterns[1024];
+	struct led_pattern *curr;
+	struct led_pattern *next;
+	struct mutex lock;
+	u32 npatterns;
+	int repeat;
+	int last_repeat;
+	int delta_t;
+	bool is_indefinite;
+	bool is_hw_pattern;
+	struct timer_list timer;
+};
+
+typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 table;
+} efi_config_table_32_t;
+
+typedef union {
+	struct {
+		efi_guid_t guid;
+		void *table;
+	};
+	efi_config_table_32_t mixed_mode;
+} efi_config_table_t;
+
+typedef struct {
+	efi_guid_t guid;
+	long unsigned int *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+typedef struct {
+	u16 version;
+	u16 length;
+	u32 runtime_services_supported;
+} efi_rt_properties_table_t;
+
+struct efivar_operations {
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_store_t *query_variable_store;
+};
+
+struct efivars {
+	struct kset *kset;
+	struct kobject *kobject;
+	const struct efivar_operations *ops;
+};
+
+struct linux_efi_random_seed {
+	u32 size;
+	u8 bits[0];
+};
+
+struct linux_efi_memreserve {
+	int size;
+	atomic_t count;
+	phys_addr_t next;
+	struct {
+		phys_addr_t base;
+		phys_addr_t size;
+	} entry[0];
+};
+
+struct linux_efi_initrd {
+	long unsigned int base;
+	long unsigned int size;
+};
+
+struct sys_off_handler;
+
+struct linux_efi_tpm_eventlog {
+	u32 size;
+	u32 final_events_preboot_size;
+	u8 version;
+	u8 log[0];
+};
+
+struct efi_tcg2_final_events_table {
+	u64 version;
+	u64 nr_events;
+	u8 events[0];
+};
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+enum tcpa_event_types {
+	PREBOOT = 0,
+	POST_CODE = 1,
+	UNUSED = 2,
+	NO_ACTION = 3,
+	SEPARATOR = 4,
+	ACTION = 5,
+	EVENT_TAG = 6,
+	SCRTM_CONTENTS = 7,
+	SCRTM_VERSION = 8,
+	CPU_MICROCODE = 9,
+	PLATFORM_CONFIG_FLAGS = 10,
+	TABLE_OF_DEVICES = 11,
+	COMPACT_HASH = 12,
+	IPL = 13,
+	IPL_PARTITION_DATA = 14,
+	NONHOST_CODE = 15,
+	NONHOST_CONFIG = 16,
+	NONHOST_INFO = 17,
+};
+
+struct tcg_efi_specid_event_algs {
+	u16 alg_id;
+	u16 digest_size;
+};
+
+struct tcg_efi_specid_event_head {
+	u8 signature[16];
+	u32 platform_class;
+	u8 spec_version_minor;
+	u8 spec_version_major;
+	u8 spec_errata;
+	u8 uintnsize;
+	u32 num_algs;
+	struct tcg_efi_specid_event_algs digest_sizes[0];
+};
+
+struct tcg_pcr_event {
+	u32 pcr_idx;
+	u32 event_type;
+	u8 digest[20];
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_event_field {
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_pcr_event2_head {
+	u32 pcr_idx;
+	u32 event_type;
+	u32 count;
+	struct tpm_digest digests[0];
+};
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	long unsigned int size;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
+};
+
+typedef struct {
+	u32 version;
+	u32 num_entries;
+	u32 desc_size;
+	u32 reserved;
+	efi_memory_desc_t entry[0];
+} efi_memory_attributes_table_t;
+
+typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
+
+struct efi_system_resource_entry_v1 {
+	efi_guid_t fw_class;
+	u32 fw_type;
+	u32 fw_version;
+	u32 lowest_supported_fw_version;
+	u32 capsule_flags;
+	u32 last_attempt_version;
+	u32 last_attempt_status;
+};
+
+struct efi_system_resource_table {
+	u32 fw_resource_count;
+	u32 fw_resource_count_max;
+	u64 fw_resource_version;
+	u8 entries[0];
+};
+
+struct esre_entry {
+	union {
+		struct efi_system_resource_entry_v1 *esre1;
+	} esre;
+	struct kobject kobj;
+	struct list_head list;
+};
+
+struct esre_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct esre_entry *, char *);
+	ssize_t (*store)(struct esre_entry *, const char *, size_t);
+};
+
+enum {
+	SYSTAB = 0,
+	MMBASE = 1,
+	MMSIZE = 2,
+	DCSIZE = 3,
+	DCVERS = 4,
+	PARAMCOUNT = 5,
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+};
+
+struct efi_runtime_work {
+	void *arg1;
+	void *arg2;
+	void *arg3;
+	void *arg4;
+	void *arg5;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+};
+
+struct of_timer_irq {
+	int irq;
+	int index;
+	int percpu;
+	const char *name;
+	long unsigned int flags;
+	irq_handler_t handler;
+};
+
+struct of_timer_base {
+	void *base;
+	const char *name;
+	int index;
+};
+
+struct of_timer_clk {
+	struct clk *clk;
+	const char *name;
+	int index;
+	long unsigned int rate;
+	long unsigned int period;
+};
+
+struct timer_of {
+	unsigned int flags;
+	struct device_node *np;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct clock_event_device clkevt;
+	struct of_timer_base of_base;
+	struct of_timer_irq of_irq;
+	struct of_timer_clk of_clk;
+	void *private_data;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 efi_physical_addr_t;
+
+typedef void *efi_event_t;
+
+typedef void (*efi_event_notify_t)(efi_event_t, void *);
+
+typedef enum {
+	EfiTimerCancel = 0,
+	EfiTimerPeriodic = 1,
+	EfiTimerRelative = 2,
+} EFI_TIMER_DELAY;
+
+typedef void *efi_handle_t;
+
+struct efi_generic_dev_path;
+
+typedef struct efi_generic_dev_path efi_device_path_protocol_t;
+
+union efi_boot_services {
+	struct {
+		efi_table_hdr_t hdr;
+		void *raise_tpl;
+		void *restore_tpl;
+		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
+		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
+		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
+		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
+		efi_status_t (*free_pool)(void *);
+		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
+		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
+		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
+		void *signal_event;
+		efi_status_t (*close_event)(efi_event_t);
+		void *check_event;
+		void *install_protocol_interface;
+		void *reinstall_protocol_interface;
+		void *uninstall_protocol_interface;
+		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
+		void *__reserved;
+		void *register_protocol_notify;
+		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
+		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
+		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
+		efi_status_t (*load_image)(bool, efi_handle_t, efi_device_path_protocol_t *, void *, long unsigned int, efi_handle_t *);
+		efi_status_t (*start_image)(efi_handle_t, long unsigned int *, efi_char16_t **);
+		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
+		efi_status_t (*unload_image)(efi_handle_t);
+		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
+		void *get_next_monotonic_count;
+		efi_status_t (*stall)(long unsigned int);
+		void *set_watchdog_timer;
+		void *connect_controller;
+		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
+		void *open_protocol;
+		void *close_protocol;
+		void *open_protocol_information;
+		void *protocols_per_handle;
+		void *locate_handle_buffer;
+		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
+		efi_status_t (*install_multiple_protocol_interfaces)(efi_handle_t *, ...);
+		efi_status_t (*uninstall_multiple_protocol_interfaces)(efi_handle_t, ...);
+		void *calculate_crc32;
+		void (*copy_mem)(void *, const void *, long unsigned int);
+		void (*set_mem)(void *, long unsigned int, unsigned char);
+		void *create_event_ex;
+	};
+	struct {
+		efi_table_hdr_t hdr;
+		u32 raise_tpl;
+		u32 restore_tpl;
+		u32 allocate_pages;
+		u32 free_pages;
+		u32 get_memory_map;
+		u32 allocate_pool;
+		u32 free_pool;
+		u32 create_event;
+		u32 set_timer;
+		u32 wait_for_event;
+		u32 signal_event;
+		u32 close_event;
+		u32 check_event;
+		u32 install_protocol_interface;
+		u32 reinstall_protocol_interface;
+		u32 uninstall_protocol_interface;
+		u32 handle_protocol;
+		u32 __reserved;
+		u32 register_protocol_notify;
+		u32 locate_handle;
+		u32 locate_device_path;
+		u32 install_configuration_table;
+		u32 load_image;
+		u32 start_image;
+		u32 exit;
+		u32 unload_image;
+		u32 exit_boot_services;
+		u32 get_next_monotonic_count;
+		u32 stall;
+		u32 set_watchdog_timer;
+		u32 connect_controller;
+		u32 disconnect_controller;
+		u32 open_protocol;
+		u32 close_protocol;
+		u32 open_protocol_information;
+		u32 protocols_per_handle;
+		u32 locate_handle_buffer;
+		u32 locate_protocol;
+		u32 install_multiple_protocol_interfaces;
+		u32 uninstall_multiple_protocol_interfaces;
+		u32 calculate_crc32;
+		u32 copy_mem;
+		u32 set_mem;
+		u32 create_event_ex;
+	} mixed_mode;
+};
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+typedef struct {
+	u16 scan_code;
+	efi_char16_t unicode_char;
+} efi_input_key_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_input_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
+		efi_event_t wait_for_key;
+	};
+	struct {
+		u32 reset;
+		u32 read_keystroke;
+		u32 wait_for_key;
+	} mixed_mode;
+};
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+union efi_simple_text_output_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
+		void *test_string;
+	};
+	struct {
+		u32 reset;
+		u32 output_string;
+		u32 test_string;
+	} mixed_mode;
+};
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		long unsigned int fw_vendor;
+		u32 fw_revision;
+		long unsigned int con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		long unsigned int con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		long unsigned int stderr_handle;
+		long unsigned int stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		long unsigned int nr_tables;
+		long unsigned int tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+typedef int (*of_init_fn_1_ret)(struct device_node *);
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+enum hid_class_request {
+	HID_REQ_GET_REPORT = 1,
+	HID_REQ_GET_IDLE = 2,
+	HID_REQ_GET_PROTOCOL = 3,
+	HID_REQ_SET_REPORT = 9,
+	HID_REQ_SET_IDLE = 10,
+	HID_REQ_SET_PROTOCOL = 11,
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_report;
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_field_entry;
+
+struct hid_device;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	enum hid_report_type type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	bool registered;
+	struct list_head reports;
+	unsigned int application;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+struct hid_driver;
+
+struct hid_ll_driver;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	long unsigned int status;
+	unsigned int claimed;
+	unsigned int quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	short unsigned int debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+	unsigned int id;
+};
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	struct device_driver driver;
+};
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
+};
+
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
+};
+
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
+};
+
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
+};
+
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct list_head list;
+	spinlock_t list_lock;
+	bool initialized;
+};
+
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
+};
+
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
+};
+
+enum uhid_event_type {
+	__UHID_LEGACY_CREATE = 0,
+	UHID_DESTROY = 1,
+	UHID_START = 2,
+	UHID_STOP = 3,
+	UHID_OPEN = 4,
+	UHID_CLOSE = 5,
+	UHID_OUTPUT = 6,
+	__UHID_LEGACY_OUTPUT_EV = 7,
+	__UHID_LEGACY_INPUT = 8,
+	UHID_GET_REPORT = 9,
+	UHID_GET_REPORT_REPLY = 10,
+	UHID_CREATE2 = 11,
+	UHID_INPUT2 = 12,
+	UHID_SET_REPORT = 13,
+	UHID_SET_REPORT_REPLY = 14,
+};
+
+struct uhid_create2_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+	__u8 rd_data[4096];
+};
+
+enum uhid_dev_flag {
+	UHID_DEV_NUMBERED_FEATURE_REPORTS = 1,
+	UHID_DEV_NUMBERED_OUTPUT_REPORTS = 2,
+	UHID_DEV_NUMBERED_INPUT_REPORTS = 4,
+};
+
+struct uhid_start_req {
+	__u64 dev_flags;
+};
+
+enum uhid_report_type {
+	UHID_FEATURE_REPORT = 0,
+	UHID_OUTPUT_REPORT = 1,
+	UHID_INPUT_REPORT = 2,
+};
+
+struct uhid_input2_req {
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_output_req {
+	__u8 data[4096];
+	__u16 size;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_get_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_get_report_reply_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_reply_req {
+	__u32 id;
+	__u16 err;
+} __attribute__((packed));
+
+enum uhid_legacy_event_type {
+	UHID_CREATE = 0,
+	UHID_OUTPUT_EV = 7,
+	UHID_INPUT = 8,
+	UHID_FEATURE = 9,
+	UHID_FEATURE_ANSWER = 10,
+};
+
+struct uhid_create_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u8 *rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+} __attribute__((packed));
+
+struct uhid_input_req {
+	__u8 data[4096];
+	__u16 size;
+};
+
+struct uhid_output_ev_req {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct uhid_feature_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_feature_answer_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_event {
+	__u32 type;
+	union {
+		struct uhid_create_req create;
+		struct uhid_input_req input;
+		struct uhid_output_req output;
+		struct uhid_output_ev_req output_ev;
+		struct uhid_feature_req feature;
+		struct uhid_get_report_req get_report;
+		struct uhid_feature_answer_req feature_answer;
+		struct uhid_get_report_reply_req get_report_reply;
+		struct uhid_create2_req create2;
+		struct uhid_input2_req input2;
+		struct uhid_set_report_req set_report;
+		struct uhid_set_report_reply_req set_report_reply;
+		struct uhid_start_req start;
+	} u;
+} __attribute__((packed));
+
+struct uhid_device {
+	struct mutex devlock;
+	bool running;
+	long: 56;
+	__u8 *rd_data;
+	uint rd_size;
+	int: 32;
+	struct hid_device *hid;
+	struct uhid_event input_buf;
+	int: 32;
+	wait_queue_head_t waitq;
+	spinlock_t qlock;
+	__u8 head;
+	__u8 tail;
+	short: 16;
+	struct uhid_event *outq[32];
+	struct mutex report_lock;
+	wait_queue_head_t report_wait;
+	bool report_running;
+	int: 24;
+	u32 report_id;
+	u32 report_type;
+	struct uhid_event report_buf;
+	struct work_struct worker;
+} __attribute__((packed));
+
+struct uhid_create_req_compat {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	compat_uptr_t rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+};
+
+struct hid_control_fifo {
+	unsigned char dir;
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_output_fifo {
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_class_descriptor {
+	__u8 bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__((packed));
+
+struct hid_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdHID;
+	__u8 bCountryCode;
+	__u8 bNumDescriptors;
+	struct hid_class_descriptor desc[1];
+} __attribute__((packed));
+
+struct usbhid_device {
+	struct hid_device *hid;
+	struct usb_interface *intf;
+	int ifnum;
+	unsigned int bufsize;
+	struct urb *urbin;
+	char *inbuf;
+	dma_addr_t inbuf_dma;
+	struct urb *urbctrl;
+	struct usb_ctrlrequest *cr;
+	struct hid_control_fifo ctrl[256];
+	unsigned char ctrlhead;
+	unsigned char ctrltail;
+	char *ctrlbuf;
+	dma_addr_t ctrlbuf_dma;
+	long unsigned int last_ctrl;
+	struct urb *urbout;
+	struct hid_output_fifo out[256];
+	unsigned char outhead;
+	unsigned char outtail;
+	char *outbuf;
+	dma_addr_t outbuf_dma;
+	long unsigned int last_out;
+	struct mutex mutex;
+	spinlock_t lock;
+	long unsigned int iofl;
+	struct timer_list io_retry;
+	long unsigned int stop_retry;
+	unsigned int retry_delay;
+	struct work_struct reset_work;
+	wait_queue_head_t wait;
+};
+
+struct hiddev_event {
+	unsigned int hid;
+	int value;
+};
+
+struct hiddev_devinfo {
+	__u32 bustype;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 ifnum;
+	__s16 vendor;
+	__s16 product;
+	__s16 version;
+	__u32 num_applications;
+};
+
+struct hiddev_collection_info {
+	__u32 index;
+	__u32 type;
+	__u32 usage;
+	__u32 level;
+};
+
+struct hiddev_report_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 num_fields;
+};
+
+struct hiddev_field_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 maxusage;
+	__u32 flags;
+	__u32 physical;
+	__u32 logical;
+	__u32 application;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__u32 unit_exponent;
+	__u32 unit;
+};
+
+struct hiddev_usage_ref {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 usage_index;
+	__u32 usage_code;
+	__s32 value;
+};
+
+struct hiddev_usage_ref_multi {
+	struct hiddev_usage_ref uref;
+	__u32 num_values;
+	__s32 values[1024];
+};
+
+struct hiddev_list {
+	struct hiddev_usage_ref buffer[2048];
+	int head;
+	int tail;
+	unsigned int flags;
+	struct fasync_struct *fasync;
+	struct hiddev *hiddev;
+	struct list_head node;
+	struct mutex thread_lock;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+struct alias_prop {
+	struct list_head link;
+	const char *alias;
+	struct device_node *np;
+	int id;
+	char stem[0];
+};
+
+struct pidff_usage {
+	struct hid_field *field;
+	s32 *value;
+};
+
+struct pidff_device {
+	struct hid_device *hid;
+	struct hid_report *reports[13];
+	struct pidff_usage set_effect[7];
+	struct pidff_usage set_envelope[5];
+	struct pidff_usage set_condition[8];
+	struct pidff_usage set_periodic[5];
+	struct pidff_usage set_constant[2];
+	struct pidff_usage set_ramp[3];
+	struct pidff_usage device_gain[1];
+	struct pidff_usage block_load[2];
+	struct pidff_usage pool[3];
+	struct pidff_usage effect_operation[2];
+	struct pidff_usage block_free[1];
+	struct hid_field *create_new_effect_type;
+	struct hid_field *set_effect_type;
+	struct hid_field *effect_direction;
+	struct hid_field *device_control;
+	struct hid_field *block_load_status;
+	struct hid_field *effect_operation_status;
+	int control_id[2];
+	int type_id[11];
+	int status_id[2];
+	int operation_id[2];
+	int pid_id[64];
+};
+
+struct amba_cs_uci_id {
+	unsigned int devarch;
+	unsigned int devarch_mask;
+	unsigned int devtype;
+	void *data;
+};
+
+struct amba_device {
+	struct device dev;
+	struct resource res;
+	struct clk *pclk;
+	struct device_dma_parameters dma_parms;
+	unsigned int periphid;
+	struct mutex periphid_lock;
+	unsigned int cid;
+	struct amba_cs_uci_id uci;
+	unsigned int irq[9];
+	const char *driver_override;
+};
+
+struct supplier_bindings {
+	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
+	bool optional;
+	bool node_not_dev;
+};
+
+struct of_changeset_entry {
+	struct list_head node;
+	long unsigned int action;
+	struct device_node *np;
+	struct property *prop;
+	struct property *old_prop;
+};
+
+struct of_changeset {
+	struct list_head entries;
+};
+
+struct of_bus___2 {
+	void (*count_cells)(const void *, int, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+};
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+struct rmem_assigned_device {
+	struct device *dev;
+	struct reserved_mem *rmem;
+	struct list_head list;
+};
+
+struct of_bus {
+	const char *name;
+	const char *addresses;
+	int (*match)(struct device_node *);
+	void (*count_cells)(struct device_node *, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+	bool has_flags;
+	unsigned int (*get_flags)(const __be32 *);
+};
+
+typedef __be64 fdt64_t;
+
+enum of_overlay_notify_action {
+	OF_OVERLAY_INIT = 0,
+	OF_OVERLAY_PRE_APPLY = 1,
+	OF_OVERLAY_POST_APPLY = 2,
+	OF_OVERLAY_PRE_REMOVE = 3,
+	OF_OVERLAY_POST_REMOVE = 4,
+};
+
+struct of_overlay_notify_data {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+struct target {
+	struct device_node *np;
+	bool in_livetree;
+};
+
+struct fragment {
+	struct device_node *overlay;
+	struct device_node *target;
+};
+
+struct overlay_changeset {
+	int id;
+	struct list_head ovcs_list;
+	const void *new_fdt;
+	const void *overlay_mem;
+	struct device_node *overlay_root;
+	enum of_overlay_notify_action notify_state;
+	int count;
+	struct fragment *fragments;
+	bool symbols_fragment;
+	struct of_changeset cset;
+};
+
+struct virtio_vsock_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le32 len;
+	__le16 type;
+	__le16 op;
+	__le32 flags;
+	__le32 buf_alloc;
+	__le32 fwd_cnt;
+} __attribute__((packed));
+
+enum virtio_vsock_rw {
+	VIRTIO_VSOCK_SEQ_EOM = 1,
+	VIRTIO_VSOCK_SEQ_EOR = 2,
+};
+
+struct sockaddr_vm {
+	__kernel_sa_family_t svm_family;
+	short unsigned int svm_reserved1;
+	unsigned int svm_port;
+	unsigned int svm_cid;
+	__u8 svm_flags;
+	unsigned char svm_zero[3];
+};
+
+struct vsock_transport;
+
+struct vsock_sock {
+	struct sock sk;
+	const struct vsock_transport *transport;
+	struct sockaddr_vm local_addr;
+	struct sockaddr_vm remote_addr;
+	struct list_head bound_table;
+	struct list_head connected_table;
+	bool trusted;
+	bool cached_peer_allow_dgram;
+	u32 cached_peer;
+	const struct cred *owner;
+	long int connect_timeout;
+	struct sock *listener;
+	struct list_head pending_links;
+	struct list_head accept_queue;
+	bool rejected;
+	struct delayed_work connect_work;
+	struct delayed_work pending_work;
+	struct delayed_work close_work;
+	bool close_work_scheduled;
+	u32 peer_shutdown;
+	bool sent_request;
+	bool ignore_connecting_rst;
+	u64 buffer_size;
+	u64 buffer_min_size;
+	u64 buffer_max_size;
+	void *trans;
+};
+
+struct vsock_transport_recv_notify_data;
+
+struct vsock_transport_send_notify_data;
+
+struct vsock_transport {
+	struct module *module;
+	int (*init)(struct vsock_sock *, struct vsock_sock *);
+	void (*destruct)(struct vsock_sock *);
+	void (*release)(struct vsock_sock *);
+	int (*cancel_pkt)(struct vsock_sock *);
+	int (*connect)(struct vsock_sock *);
+	int (*dgram_bind)(struct vsock_sock *, struct sockaddr_vm *);
+	int (*dgram_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	int (*dgram_enqueue)(struct vsock_sock *, struct sockaddr_vm *, struct msghdr *, size_t);
+	bool (*dgram_allow)(u32, u32);
+	ssize_t (*stream_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	ssize_t (*stream_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	s64 (*stream_has_data)(struct vsock_sock *);
+	s64 (*stream_has_space)(struct vsock_sock *);
+	u64 (*stream_rcvhiwat)(struct vsock_sock *);
+	bool (*stream_is_active)(struct vsock_sock *);
+	bool (*stream_allow)(u32, u32);
+	int (*set_rcvlowat)(struct vsock_sock *, int);
+	ssize_t (*seqpacket_dequeue)(struct vsock_sock *, struct msghdr *, int);
+	int (*seqpacket_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	bool (*seqpacket_allow)(u32);
+	u32 (*seqpacket_has_data)(struct vsock_sock *);
+	int (*notify_poll_in)(struct vsock_sock *, size_t, bool *);
+	int (*notify_poll_out)(struct vsock_sock *, size_t, bool *);
+	int (*notify_recv_init)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_block)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_dequeue)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_post_dequeue)(struct vsock_sock *, size_t, ssize_t, bool, struct vsock_transport_recv_notify_data *);
+	int (*notify_send_init)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_block)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_enqueue)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t, struct vsock_transport_send_notify_data *);
+	void (*notify_buffer_size)(struct vsock_sock *, u64 *);
+	int (*shutdown)(struct vsock_sock *, int);
+	u32 (*get_local_cid)();
+};
+
+struct vsock_transport_recv_notify_data {
+	u64 data1;
+	u64 data2;
+	bool notify_on_block;
+};
+
+struct vsock_transport_send_notify_data {
+	u64 data1;
+	u64 data2;
+};
+
+enum {
+	VSOCK_VQ_RX = 0,
+	VSOCK_VQ_TX = 1,
+	VSOCK_VQ_EVENT = 2,
+	VSOCK_VQ_MAX = 3,
+};
+
+struct virtio_vsock_pkt {
+	struct virtio_vsock_hdr hdr;
+	struct list_head list;
+	struct vsock_sock *vsk;
+	void *buf;
+	u32 buf_len;
+	u32 len;
+	u32 off;
+	bool reply;
+	bool tap_delivered;
+};
+
+struct virtio_transport {
+	struct vsock_transport transport;
+	int (*send_pkt)(struct virtio_vsock_pkt *);
+};
+
+struct vhost_iotlb_msg {
+	__u64 iova;
+	__u64 size;
+	__u64 uaddr;
+	__u8 perm;
+	__u8 type;
+};
+
+struct vhost_iotlb_map {
+	struct rb_node rb;
+	struct list_head link;
+	u64 start;
+	u64 last;
+	u64 size;
+	u64 addr;
+	u32 perm;
+	u32 flags_padding;
+	u64 __subtree_last;
+	void *opaque;
+};
+
+struct vhost_iotlb {
+	struct rb_root_cached root;
+	struct list_head list;
+	unsigned int limit;
+	unsigned int nmaps;
+	unsigned int flags;
+};
+
+struct irq_bypass_consumer;
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+struct vhost_work;
+
+typedef void (*vhost_work_fn_t)(struct vhost_work *);
+
+struct vhost_work {
+	struct llist_node node;
+	vhost_work_fn_t fn;
+	long unsigned int flags;
+};
+
+struct vhost_dev;
+
+struct vhost_poll {
+	poll_table table;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct vhost_work work;
+	__poll_t mask;
+	struct vhost_dev *dev;
+};
+
+struct vhost_virtqueue;
+
+struct vhost_dev {
+	struct mm_struct *mm;
+	struct mutex mutex;
+	struct vhost_virtqueue **vqs;
+	int nvqs;
+	struct eventfd_ctx *log_ctx;
+	struct llist_head work_list;
+	struct task_struct *worker;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	spinlock_t iotlb_lock;
+	struct list_head read_list;
+	struct list_head pending_list;
+	wait_queue_head_t wait;
+	int iov_limit;
+	int weight;
+	int byte_weight;
+	u64 kcov_handle;
+	bool use_worker;
+	int (*msg_handler)(struct vhost_dev *, u32, struct vhost_iotlb_msg *);
+};
+
+struct vhost_log {
+	u64 addr;
+	u64 len;
+};
+
+enum vhost_uaddr_type {
+	VHOST_ADDR_DESC = 0,
+	VHOST_ADDR_AVAIL = 1,
+	VHOST_ADDR_USED = 2,
+	VHOST_NUM_ADDRS = 3,
+};
+
+struct vhost_vring_call {
+	struct eventfd_ctx *ctx;
+	struct irq_bypass_producer producer;
+};
+
+struct vhost_virtqueue {
+	struct vhost_dev *dev;
+	struct mutex mutex;
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+	const struct vhost_iotlb_map *meta_iotlb[3];
+	struct file *kick;
+	struct vhost_vring_call call_ctx;
+	struct eventfd_ctx *error_ctx;
+	struct eventfd_ctx *log_ctx;
+	struct vhost_poll poll;
+	vhost_work_fn_t handle_kick;
+	u16 last_avail_idx;
+	u16 avail_idx;
+	u16 last_used_idx;
+	u16 used_flags;
+	u16 signalled_used;
+	bool signalled_used_valid;
+	bool log_used;
+	u64 log_addr;
+	struct iovec iov[1024];
+	struct iovec iotlb_iov[64];
+	struct iovec *indirect;
+	struct vring_used_elem *heads;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	void *private_data;
+	u64 acked_features;
+	u64 acked_backend_features;
+	void *log_base;
+	struct vhost_log *log;
+	struct iovec log_iov[64];
+	bool is_le;
+	bool user_be;
+	u32 busyloop_timeout;
+};
+
+enum {
+	VHOST_FEATURES = 1023410176,
+};
+
+enum {
+	VHOST_VSOCK_FEATURES = 1023410178,
+};
+
+enum {
+	VHOST_VSOCK_BACKEND_FEATURES = 2,
+};
+
+struct vhost_vsock {
+	struct vhost_dev dev;
+	struct vhost_virtqueue vqs[2];
+	struct hlist_node hash;
+	struct vhost_work send_pkt_work;
+	spinlock_t send_pkt_list_lock;
+	struct list_head send_pkt_list;
+	atomic_t queued_replies;
+	u32 guest_cid;
+	bool seqpacket_allow;
+};
+
+struct vhost_vring_file {
+	unsigned int index;
+	int fd;
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+struct ubuf_info_msgzc {
+	struct ubuf_info ubuf;
+	union {
+		struct {
+			long unsigned int desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	struct mmpin mmp;
+};
+
+enum {
+	VHOST_NET_FEATURES = 1023442944,
+};
+
+enum {
+	VHOST_NET_BACKEND_FEATURES = 2,
+};
+
+enum {
+	VHOST_NET_VQ_RX = 0,
+	VHOST_NET_VQ_TX = 1,
+	VHOST_NET_VQ_MAX = 2,
+};
+
+struct vhost_net_ubuf_ref {
+	atomic_t refcount;
+	wait_queue_head_t wait;
+	struct vhost_virtqueue *vq;
+};
+
+struct vhost_net_buf {
+	void **queue;
+	int tail;
+	int head;
+};
+
+struct vhost_net_virtqueue {
+	struct vhost_virtqueue vq;
+	size_t vhost_hlen;
+	size_t sock_hlen;
+	int upend_idx;
+	int done_idx;
+	int batched_xdp;
+	struct ubuf_info_msgzc *ubuf_info;
+	struct vhost_net_ubuf_ref *ubufs;
+	struct ptr_ring *rx_ring;
+	struct vhost_net_buf rxq;
+	struct xdp_buff *xdp;
+};
+
+struct vhost_net {
+	struct vhost_dev dev;
+	struct vhost_net_virtqueue vqs[2];
+	struct vhost_poll poll[2];
+	unsigned int tx_packets;
+	unsigned int tx_zcopy_err;
+	bool tx_flush;
+	struct page_frag page_frag;
+	int refcnt_bias;
+};
+
+struct vhost_vring_state {
+	unsigned int index;
+	unsigned int num;
+};
+
+struct vhost_vring_addr {
+	unsigned int index;
+	unsigned int flags;
+	__u64 desc_user_addr;
+	__u64 used_user_addr;
+	__u64 avail_user_addr;
+	__u64 log_guest_addr;
+};
+
+struct vhost_msg {
+	int type;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_msg_v2 {
+	__u32 type;
+	__u32 asid;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_memory_region {
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+	__u64 flags_padding;
+};
+
+struct vhost_memory {
+	__u32 nregions;
+	__u32 padding;
+	struct vhost_memory_region regions[0];
+};
+
+struct vhost_msg_node {
+	union {
+		struct vhost_msg msg;
+		struct vhost_msg_v2 msg_v2;
+	};
+	struct vhost_virtqueue *vq;
+	struct list_head node;
+};
+
+struct vhost_flush_struct {
+	struct vhost_work work;
+	struct completion wait_event;
+};
+
+struct vhost_attach_cgroups_struct {
+	struct vhost_work work;
+	struct task_struct *owner;
+	int ret;
+};
+
+struct vhost_scsi_target {
+	int abi_version;
+	char vhost_wwpn[224];
+	short unsigned int vhost_tpgt;
+	short unsigned int reserved;
+};
+
+struct vhost_scsi_inflight {
+	struct completion comp;
+	struct kref kref;
+};
+
+struct vhost_scsi;
+
+struct vhost_scsi_nexus;
+
+struct vhost_scsi_cmd {
+	int tvc_vq_desc;
+	int tvc_task_attr;
+	int tvc_in_iovs;
+	enum dma_data_direction tvc_data_direction;
+	u32 tvc_exp_data_len;
+	u64 tvc_tag;
+	u32 tvc_sgl_count;
+	u32 tvc_prot_sgl_count;
+	u32 tvc_lun;
+	struct scatterlist *tvc_sgl;
+	struct scatterlist *tvc_prot_sgl;
+	struct page **tvc_upages;
+	struct iovec *tvc_resp_iov;
+	struct vhost_scsi *tvc_vhost;
+	struct vhost_virtqueue *tvc_vq;
+	struct vhost_scsi_nexus *tvc_nexus;
+	struct se_cmd tvc_se_cmd;
+	unsigned char tvc_cdb[32];
+	unsigned char tvc_sense_buf[96];
+	struct llist_node tvc_completion_list;
+	struct vhost_scsi_inflight *inflight;
+};
+
+struct vhost_scsi_tpg;
+
+struct vhost_scsi_virtqueue;
+
+struct vhost_scsi {
+	struct vhost_scsi_tpg **vs_tpg;
+	char vs_vhost_wwpn[224];
+	struct vhost_dev dev;
+	struct vhost_scsi_virtqueue *vqs;
+	long unsigned int *compl_bitmap;
+	struct vhost_scsi_inflight **old_inflight;
+	struct vhost_work vs_completion_work;
+	struct llist_head vs_completion_list;
+	struct vhost_work vs_event_work;
+	struct llist_head vs_event_list;
+	bool vs_events_missed;
+	int vs_events_nr;
+};
+
+struct vhost_scsi_nexus {
+	struct se_session *tvn_se_sess;
+};
+
+struct vhost_scsi_tport;
+
+struct vhost_scsi_tpg {
+	u16 tport_tpgt;
+	int tv_tpg_port_count;
+	int tv_tpg_vhost_count;
+	int tv_fabric_prot_type;
+	struct list_head tv_tpg_list;
+	struct mutex tv_tpg_mutex;
+	struct vhost_scsi_nexus *tpg_nexus;
+	struct vhost_scsi_tport *tport;
+	struct se_portal_group se_tpg;
+	struct vhost_scsi *vhost_scsi;
+	struct list_head tmf_queue;
+};
+
+struct vhost_scsi_tport {
+	u8 tport_proto_id;
+	u64 tport_wwpn;
+	char tport_name[256];
+	struct se_wwn tport_wwn;
+};
+
+struct vhost_scsi_evt {
+	struct virtio_scsi_event event;
+	struct llist_node list;
+};
+
+enum {
+	VHOST_SCSI_VQ_CTL = 0,
+	VHOST_SCSI_VQ_EVT = 1,
+	VHOST_SCSI_VQ_IO = 2,
+};
+
+enum {
+	VHOST_SCSI_FEATURES = 1023410186,
+};
+
+struct vhost_scsi_virtqueue {
+	struct vhost_virtqueue vq;
+	struct vhost_scsi_inflight inflights[2];
+	int inflight_idx;
+	struct vhost_scsi_cmd *scsi_cmds;
+	struct sbitmap scsi_tags;
+	int max_cmds;
+};
+
+struct vhost_scsi_tmf {
+	struct vhost_work vwork;
+	struct vhost_scsi_tpg *tpg;
+	struct vhost_scsi *vhost;
+	struct vhost_scsi_virtqueue *svq;
+	struct list_head queue_entry;
+	struct se_cmd se_cmd;
+	u8 scsi_resp;
+	struct vhost_scsi_inflight *inflight;
+	struct iovec resp_iov;
+	int in_iovs;
+	int vq_desc;
+};
+
+struct vhost_scsi_ctx {
+	int head;
+	unsigned int out;
+	unsigned int in;
+	size_t req_size;
+	size_t rsp_size;
+	size_t out_size;
+	size_t in_size;
+	u8 *target;
+	u8 *lunp;
+	void *req;
+	struct iov_iter out_iter;
+};
+
+struct hwspinlock;
+
+struct hwspinlock_ops {
+	int (*trylock)(struct hwspinlock *);
+	void (*unlock)(struct hwspinlock *);
+	void (*relax)(struct hwspinlock *);
+};
+
+struct hwspinlock_device;
+
+struct hwspinlock {
+	struct hwspinlock_device *bank;
+	spinlock_t lock;
+	void *priv;
+};
+
+struct hwspinlock_device {
+	struct device *dev;
+	const struct hwspinlock_ops *ops;
+	int base_id;
+	int num_locks;
+	struct hwspinlock lock[0];
+};
+
+struct board_staging_clk {
+	const char *clk;
+	const char *con_id;
+	const char *dev_id;
+};
+
+struct board_staging_dev {
+	struct platform_device *pdev;
+	const struct board_staging_clk *clocks;
+	unsigned int nclocks;
+	const char *domain;
+};
+
+struct extcon_cable;
+
+struct extcon_dev {
+	const char *name;
+	const unsigned int *supported_cable;
+	const u32 *mutually_exclusive;
+	struct device dev;
+	struct raw_notifier_head nh_all;
+	struct raw_notifier_head *nh;
+	struct list_head entry;
+	int max_supported;
+	spinlock_t lock;
+	u32 state;
+	struct device_type extcon_dev_type;
+	struct extcon_cable *cables;
+	struct attribute_group attr_g_muex;
+	struct attribute **attrs_muex;
+	struct device_attribute *d_attrs_muex;
+};
+
+struct extcon_dev_notifier_devres {
+	struct extcon_dev *edev;
+	unsigned int id;
+	struct notifier_block *nb;
+};
+
+struct powercap_control_type;
+
+struct powercap_control_type_ops {
+	int (*set_enable)(struct powercap_control_type *, bool);
+	int (*get_enable)(struct powercap_control_type *, bool *);
+	int (*release)(struct powercap_control_type *);
+};
+
+struct powercap_control_type {
+	struct device dev;
+	struct idr idr;
+	int nr_zones;
+	const struct powercap_control_type_ops *ops;
+	struct mutex lock;
+	bool allocated;
+	struct list_head node;
+};
+
+struct powercap_zone;
+
+struct powercap_zone_ops {
+	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
+	int (*get_energy_uj)(struct powercap_zone *, u64 *);
+	int (*reset_energy_uj)(struct powercap_zone *);
+	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
+	int (*get_power_uw)(struct powercap_zone *, u64 *);
+	int (*set_enable)(struct powercap_zone *, bool);
+	int (*get_enable)(struct powercap_zone *, bool *);
+	int (*release)(struct powercap_zone *);
+};
+
+struct powercap_zone_constraint;
+
+struct powercap_zone {
+	int id;
+	char *name;
+	void *control_type_inst;
+	const struct powercap_zone_ops *ops;
+	struct device dev;
+	int const_id_cnt;
+	struct idr idr;
+	struct idr *parent_idr;
+	void *private_data;
+	struct attribute **zone_dev_attrs;
+	int zone_attr_count;
+	struct attribute_group dev_zone_attr_group;
+	const struct attribute_group *dev_attr_groups[2];
+	bool allocated;
+	struct powercap_zone_constraint *constraints;
+};
+
+struct powercap_zone_constraint_ops;
+
+struct powercap_zone_constraint {
+	int id;
+	struct powercap_zone *power_zone;
+	const struct powercap_zone_constraint_ops *ops;
+};
+
+struct powercap_zone_constraint_ops {
+	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
+	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
+	int (*set_time_window_us)(struct powercap_zone *, int, u64);
+	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
+	const char * (*get_name)(struct powercap_zone *, int);
+};
+
+struct powercap_constraint_attr {
+	struct device_attribute power_limit_attr;
+	struct device_attribute time_window_attr;
+	struct device_attribute max_power_attr;
+	struct device_attribute min_power_attr;
+	struct device_attribute max_time_window_attr;
+	struct device_attribute min_time_window_attr;
+	struct device_attribute name_attr;
+};
+
+union extcon_property_value {
+	int intval;
+};
+
+struct extcon_cable {
+	struct extcon_dev *edev;
+	int cable_index;
+	struct attribute_group attr_g;
+	struct device_attribute attr_name;
+	struct device_attribute attr_state;
+	struct attribute *attrs[3];
+	union extcon_property_value usb_propval[3];
+	union extcon_property_value chg_propval[1];
+	union extcon_property_value jack_propval[1];
+	union extcon_property_value disp_propval[2];
+	long unsigned int usb_bits[1];
+	long unsigned int chg_bits[1];
+	long unsigned int jack_bits[1];
+	long unsigned int disp_bits[1];
+};
+
+struct __extcon_info {
+	unsigned int type;
+	unsigned int id;
+	const char *name;
+};
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+struct cpu_hw_events {
+	int n_events;
+	int irq;
+	struct perf_event *events[64];
+	long unsigned int used_hw_ctrs[1];
+	long unsigned int used_fw_ctrs[1];
+};
+
+struct riscv_pmu {
+	struct pmu pmu;
+	char *name;
+	irqreturn_t (*handle_irq)(int, void *);
+	long unsigned int cmask;
+	u64 (*ctr_read)(struct perf_event *);
+	int (*ctr_get_idx)(struct perf_event *);
+	int (*ctr_get_width)(int);
+	void (*ctr_clear_idx)(struct perf_event *);
+	void (*ctr_start)(struct perf_event *, u64);
+	void (*ctr_stop)(struct perf_event *, long unsigned int);
+	int (*event_map)(struct perf_event *, u64 *);
+	struct cpu_hw_events *hw_events;
+	struct hlist_node node;
+	struct notifier_block riscv_pm_nb;
+};
+
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
+};
+
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+};
+
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+};
+
+enum sbi_ext_pmu_fid {
+	SBI_EXT_PMU_NUM_COUNTERS = 0,
+	SBI_EXT_PMU_COUNTER_GET_INFO = 1,
+	SBI_EXT_PMU_COUNTER_CFG_MATCH = 2,
+	SBI_EXT_PMU_COUNTER_START = 3,
+	SBI_EXT_PMU_COUNTER_STOP = 4,
+	SBI_EXT_PMU_COUNTER_FW_READ = 5,
+};
+
+union sbi_pmu_ctr_info {
+	long unsigned int value;
+	struct {
+		long unsigned int csr: 12;
+		long unsigned int width: 6;
+		long unsigned int reserved: 45;
+		long unsigned int type: 1;
+	};
+};
+
+enum sbi_pmu_hw_generic_events_t {
+	SBI_PMU_HW_NO_EVENT = 0,
+	SBI_PMU_HW_CPU_CYCLES = 1,
+	SBI_PMU_HW_INSTRUCTIONS = 2,
+	SBI_PMU_HW_CACHE_REFERENCES = 3,
+	SBI_PMU_HW_CACHE_MISSES = 4,
+	SBI_PMU_HW_BRANCH_INSTRUCTIONS = 5,
+	SBI_PMU_HW_BRANCH_MISSES = 6,
+	SBI_PMU_HW_BUS_CYCLES = 7,
+	SBI_PMU_HW_STALLED_CYCLES_FRONTEND = 8,
+	SBI_PMU_HW_STALLED_CYCLES_BACKEND = 9,
+	SBI_PMU_HW_REF_CPU_CYCLES = 10,
+	SBI_PMU_HW_GENERAL_MAX = 11,
+};
+
+enum sbi_pmu_fw_generic_events_t {
+	SBI_PMU_FW_MISALIGNED_LOAD = 0,
+	SBI_PMU_FW_MISALIGNED_STORE = 1,
+	SBI_PMU_FW_ACCESS_LOAD = 2,
+	SBI_PMU_FW_ACCESS_STORE = 3,
+	SBI_PMU_FW_ILLEGAL_INSN = 4,
+	SBI_PMU_FW_SET_TIMER = 5,
+	SBI_PMU_FW_IPI_SENT = 6,
+	SBI_PMU_FW_IPI_RECVD = 7,
+	SBI_PMU_FW_FENCE_I_SENT = 8,
+	SBI_PMU_FW_FENCE_I_RECVD = 9,
+	SBI_PMU_FW_SFENCE_VMA_SENT = 10,
+	SBI_PMU_FW_SFENCE_VMA_RCVD = 11,
+	SBI_PMU_FW_SFENCE_VMA_ASID_SENT = 12,
+	SBI_PMU_FW_SFENCE_VMA_ASID_RCVD = 13,
+	SBI_PMU_FW_HFENCE_GVMA_SENT = 14,
+	SBI_PMU_FW_HFENCE_GVMA_RCVD = 15,
+	SBI_PMU_FW_HFENCE_GVMA_VMID_SENT = 16,
+	SBI_PMU_FW_HFENCE_GVMA_VMID_RCVD = 17,
+	SBI_PMU_FW_HFENCE_VVMA_SENT = 18,
+	SBI_PMU_FW_HFENCE_VVMA_RCVD = 19,
+	SBI_PMU_FW_HFENCE_VVMA_ASID_SENT = 20,
+	SBI_PMU_FW_HFENCE_VVMA_ASID_RCVD = 21,
+	SBI_PMU_FW_MAX = 22,
+};
+
+enum sbi_pmu_event_type {
+	SBI_PMU_EVENT_TYPE_HW = 0,
+	SBI_PMU_EVENT_TYPE_CACHE = 1,
+	SBI_PMU_EVENT_TYPE_RAW = 2,
+	SBI_PMU_EVENT_TYPE_FW = 15,
+};
+
+enum sbi_pmu_ctr_type {
+	SBI_PMU_CTR_TYPE_HW = 0,
+	SBI_PMU_CTR_TYPE_FW = 1,
+};
+
+struct hw_gen_event {
+	uint32_t event_code: 16;
+	uint32_t event_type: 4;
+	uint32_t reserved: 12;
+};
+
+struct hw_cache_event {
+	uint32_t result_id: 1;
+	uint32_t op_id: 2;
+	uint32_t cache_id: 13;
+	uint32_t event_type: 4;
+	uint32_t reserved: 12;
+};
+
+struct sbi_pmu_event_data {
+	union {
+		union {
+			struct hw_gen_event hw_gen_event;
+			struct hw_cache_event hw_cache_event;
+		};
+		uint32_t event_idx;
+	};
+};
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+struct trace_event_raw_mc_event {
+	struct trace_entry ent;
+	unsigned int error_type;
+	u32 __data_loc_msg;
+	u32 __data_loc_label;
+	u16 error_count;
+	u8 mc_index;
+	s8 top_layer;
+	s8 middle_layer;
+	s8 lower_layer;
+	long int address;
+	u8 grain_bits;
+	long int syndrome;
+	u32 __data_loc_driver_detail;
+	char __data[0];
+};
+
+struct trace_event_raw_arm_event {
+	struct trace_entry ent;
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+	u8 affinity;
+	char __data[0];
+};
+
+struct trace_event_raw_non_standard_event {
+	struct trace_entry ent;
+	char sec_type[16];
+	char fru_id[16];
+	u32 __data_loc_fru_text;
+	u8 sev;
+	u32 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_aer_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 status;
+	u8 severity;
+	u8 tlp_header_valid;
+	u32 tlp_header[4];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mc_event {
+	u32 msg;
+	u32 label;
+	u32 driver_detail;
+};
+
+struct trace_event_data_offsets_arm_event {};
+
+struct trace_event_data_offsets_non_standard_event {
+	u32 fru_text;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_aer_event {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
+
+typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
+
+typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
+
+typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
+
+struct sound_unit {
+	int unit_minor;
+	const struct file_operations *unit_fops;
+	struct sound_unit *next;
+	char name[32];
+};
+
+struct snd_shutdown_f_ops;
+
+struct snd_info_entry;
+
+struct snd_mixer_oss;
+
+struct snd_card {
+	int number;
+	char id[16];
+	char driver[16];
+	char shortname[32];
+	char longname[80];
+	char irq_descr[32];
+	char mixername[80];
+	char components[128];
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_card *);
+	struct list_head devices;
+	struct device ctl_dev;
+	unsigned int last_numid;
+	struct rw_semaphore controls_rwsem;
+	rwlock_t ctl_files_rwlock;
+	int controls_count;
+	size_t user_ctl_alloc_size;
+	struct list_head controls;
+	struct list_head ctl_files;
+	struct xarray ctl_numids;
+	struct xarray ctl_hash;
+	bool ctl_hash_collision;
+	struct snd_info_entry *proc_root;
+	struct proc_dir_entry *proc_root_link;
+	struct list_head files_list;
+	struct snd_shutdown_f_ops *s_f_ops;
+	spinlock_t files_lock;
+	int shutdown;
+	struct completion *release_completion;
+	struct device *dev;
+	struct device card_dev;
+	const struct attribute_group *dev_groups[4];
+	bool registered;
+	bool managed;
+	bool releasing;
+	int sync_irq;
+	wait_queue_head_t remove_sleep;
+	size_t total_pcm_alloc_bytes;
+	struct mutex memory_mutex;
+	struct snd_mixer_oss *mixer_oss;
+	int mixer_oss_change_count;
+};
+
+struct snd_info_buffer;
+
+struct snd_info_entry_text {
+	void (*read)(struct snd_info_entry *, struct snd_info_buffer *);
+	void (*write)(struct snd_info_entry *, struct snd_info_buffer *);
+};
+
+struct snd_info_entry_ops;
+
+struct snd_info_entry {
+	const char *name;
+	umode_t mode;
+	long int size;
+	short unsigned int content;
+	union {
+		struct snd_info_entry_text text;
+		const struct snd_info_entry_ops *ops;
+	} c;
+	struct snd_info_entry *parent;
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_info_entry *);
+	struct proc_dir_entry *p;
+	struct mutex access;
+	struct list_head children;
+	struct list_head list;
+};
+
+enum {
+	SND_CTL_SUBDEV_PCM = 0,
+	SND_CTL_SUBDEV_RAWMIDI = 1,
+	SND_CTL_SUBDEV_ITEMS = 2,
+};
+
+struct snd_info_buffer {
+	char *buffer;
+	unsigned int curr;
+	unsigned int size;
+	unsigned int len;
+	int stop;
+	int error;
+};
+
+struct snd_info_entry_ops {
+	int (*open)(struct snd_info_entry *, short unsigned int, void **);
+	int (*release)(struct snd_info_entry *, short unsigned int, void *);
+	ssize_t (*read)(struct snd_info_entry *, void *, struct file *, char *, size_t, loff_t);
+	ssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char *, size_t, loff_t);
+	loff_t (*llseek)(struct snd_info_entry *, void *, struct file *, loff_t, int);
+	__poll_t (*poll)(struct snd_info_entry *, void *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_info_entry *, void *, struct file *, unsigned int, long unsigned int);
+	int (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);
+};
+
+struct snd_monitor_file {
+	struct file *file;
+	const struct file_operations *disconnected_f_op;
+	struct list_head shutdown_list;
+	struct list_head list;
+};
+
+struct snd_minor {
+	int type;
+	int card;
+	int device;
+	const struct file_operations *f_ops;
+	void *private_data;
+	struct device *dev;
+	struct snd_card *card_ptr;
+};
+
+enum {
+	SNDRV_DEVICE_TYPE_CONTROL = 0,
+	SNDRV_DEVICE_TYPE_SEQUENCER = 1,
+	SNDRV_DEVICE_TYPE_TIMER = 2,
+	SNDRV_DEVICE_TYPE_HWDEP = 3,
+	SNDRV_DEVICE_TYPE_RAWMIDI = 4,
+	SNDRV_DEVICE_TYPE_PCM_PLAYBACK = 5,
+	SNDRV_DEVICE_TYPE_PCM_CAPTURE = 6,
+	SNDRV_DEVICE_TYPE_COMPRESS = 7,
+};
+
+struct nvmem_cell_lookup {
+	const char *nvmem_name;
+	const char *cell_name;
+	const char *dev_id;
+	const char *con_id;
+	struct list_head node;
+};
+
+enum {
+	NVMEM_ADD = 1,
+	NVMEM_REMOVE = 2,
+	NVMEM_CELL_ADD = 3,
+	NVMEM_CELL_REMOVE = 4,
+};
+
+struct nvmem_cell_table {
+	const char *nvmem_name;
+	const struct nvmem_cell_info *cells;
+	size_t ncells;
+	struct list_head node;
+};
+
+struct nvmem_device {
+	struct module *owner;
+	struct device dev;
+	int stride;
+	int word_size;
+	int id;
+	struct kref refcnt;
+	size_t size;
+	bool read_only;
+	bool root_only;
+	int flags;
+	enum nvmem_type type;
+	struct bin_attribute eeprom;
+	struct device *base_dev;
+	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	struct gpio_desc *wp_gpio;
+	void *priv;
+};
+
+struct nvmem_cell_entry {
+	const char *name;
+	int offset;
+	int bytes;
+	int bit_offset;
+	int nbits;
+	struct device_node *np;
+	struct nvmem_device *nvmem;
+	struct list_head node;
+};
+
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
+};
+
+enum snd_device_type {
+	SNDRV_DEV_LOWLEVEL = 0,
+	SNDRV_DEV_INFO = 1,
+	SNDRV_DEV_BUS = 2,
+	SNDRV_DEV_CODEC = 3,
+	SNDRV_DEV_PCM = 4,
+	SNDRV_DEV_COMPRESS = 5,
+	SNDRV_DEV_RAWMIDI = 6,
+	SNDRV_DEV_TIMER = 7,
+	SNDRV_DEV_SEQUENCER = 8,
+	SNDRV_DEV_HWDEP = 9,
+	SNDRV_DEV_JACK = 10,
+	SNDRV_DEV_CONTROL = 11,
+};
+
+enum snd_device_state {
+	SNDRV_DEV_BUILD = 0,
+	SNDRV_DEV_REGISTERED = 1,
+	SNDRV_DEV_DISCONNECTED = 2,
+};
+
+struct snd_device;
+
+struct snd_device_ops {
+	int (*dev_free)(struct snd_device *);
+	int (*dev_register)(struct snd_device *);
+	int (*dev_disconnect)(struct snd_device *);
+};
+
+struct snd_device {
+	struct list_head list;
+	struct snd_card *card;
+	enum snd_device_state state;
+	enum snd_device_type type;
+	void *device_data;
+	const struct snd_device_ops *ops;
+};
+
+struct snd_info_private_data {
+	struct snd_info_buffer *rbuffer;
+	struct snd_info_buffer *wbuffer;
+	struct snd_info_entry *entry;
+	void *file_private_data;
+};
+
+struct snd_pci_quirk {
+	short unsigned int subvendor;
+	short unsigned int subdevice;
+	short unsigned int subdevice_mask;
+	int value;
+};
+
+struct snd_fasync {
+	struct fasync_struct *fasync;
+	int signal;
+	int poll;
+	int on;
+	struct list_head list;
+};
+
+struct snd_aes_iec958 {
+	unsigned char status[24];
+	unsigned char subcode[147];
+	unsigned char pad;
+	unsigned char dig_subframe[4];
+};
+
+struct snd_ctl_card_info {
+	int card;
+	int pad;
+	unsigned char id[16];
+	unsigned char driver[16];
+	unsigned char name[32];
+	unsigned char longname[80];
+	unsigned char reserved_[16];
+	unsigned char mixername[80];
+	unsigned char components[128];
+};
+
+typedef int snd_ctl_elem_type_t;
+
+typedef int snd_ctl_elem_iface_t;
+
+struct snd_ctl_elem_id {
+	unsigned int numid;
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	unsigned char name[44];
+	unsigned int index;
+};
+
+struct snd_ctl_elem_list {
+	unsigned int offset;
+	unsigned int space;
+	unsigned int used;
+	unsigned int count;
+	struct snd_ctl_elem_id *pids;
+	unsigned char reserved[50];
+};
+
+struct snd_ctl_elem_info {
+	struct snd_ctl_elem_id id;
+	snd_ctl_elem_type_t type;
+	unsigned int access;
+	unsigned int count;
+	__kernel_pid_t owner;
+	union {
+		struct {
+			long int min;
+			long int max;
+			long int step;
+		} integer;
+		struct {
+			long long int min;
+			long long int max;
+			long long int step;
+		} integer64;
+		struct {
+			unsigned int items;
+			unsigned int item;
+			char name[64];
+			__u64 names_ptr;
+			unsigned int names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_ctl_elem_value {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect: 1;
+	union {
+		union {
+			long int value[128];
+			long int *value_ptr;
+		} integer;
+		union {
+			long long int value[64];
+			long long int *value_ptr;
+		} integer64;
+		union {
+			unsigned int item[128];
+			unsigned int *item_ptr;
+		} enumerated;
+		union {
+			unsigned char data[512];
+			unsigned char *data_ptr;
+		} bytes;
+		struct snd_aes_iec958 iec958;
+	} value;
+	unsigned char reserved[128];
+};
+
+struct snd_ctl_tlv {
+	unsigned int numid;
+	unsigned int length;
+	unsigned int tlv[0];
+};
+
+enum sndrv_ctl_event_type {
+	SNDRV_CTL_EVENT_ELEM = 0,
+	SNDRV_CTL_EVENT_LAST = 0,
+};
+
+struct snd_ctl_event {
+	int type;
+	union {
+		struct {
+			unsigned int mask;
+			struct snd_ctl_elem_id id;
+		} elem;
+		unsigned char data8[60];
+	} data;
+};
+
+struct snd_kcontrol;
+
+typedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+
+typedef int snd_kcontrol_get_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+typedef int snd_kcontrol_put_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+typedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int *);
+
+struct snd_ctl_file;
+
+struct snd_kcontrol_volatile {
+	struct snd_ctl_file *owner;
+	unsigned int access;
+};
+
+struct snd_kcontrol {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	long unsigned int private_value;
+	void *private_data;
+	void (*private_free)(struct snd_kcontrol *);
+	struct snd_kcontrol_volatile vd[0];
+};
+
+enum {
+	SNDRV_CTL_TLV_OP_READ = 0,
+	SNDRV_CTL_TLV_OP_WRITE = 1,
+	SNDRV_CTL_TLV_OP_CMD = 4294967295,
+};
+
+struct snd_kcontrol_new {
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	const char *name;
+	unsigned int index;
+	unsigned int access;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	long unsigned int private_value;
+};
+
+struct snd_fasync;
+
+struct snd_ctl_file {
+	struct list_head list;
+	struct snd_card *card;
+	struct pid *pid;
+	int preferred_subdevice[2];
+	wait_queue_head_t change_sleep;
+	spinlock_t read_lock;
+	struct snd_fasync *fasync;
+	int subscribed;
+	struct list_head events;
+};
+
+struct snd_kctl_event {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int mask;
+};
+
+struct snd_ctl_layer_ops {
+	struct snd_ctl_layer_ops *next;
+	const char *module_name;
+	void (*lregister)(struct snd_card *);
+	void (*ldisconnect)(struct snd_card *);
+	void (*lnotify)(struct snd_card *, unsigned int, struct snd_kcontrol *, unsigned int);
+};
+
+typedef int (*snd_kctl_ioctl_func_t)(struct snd_card *, struct snd_ctl_file *, unsigned int, long unsigned int);
+
+struct snd_kctl_ioctl {
+	struct list_head list;
+	snd_kctl_ioctl_func_t fioctl;
+};
+
+enum snd_ctl_add_mode {
+	CTL_ADD_EXCLUSIVE = 0,
+	CTL_REPLACE = 1,
+	CTL_ADD_ON_REPLACE = 2,
+};
+
+struct user_element {
+	struct snd_ctl_elem_info info;
+	struct snd_card *card;
+	char *elem_data;
+	long unsigned int elem_data_size;
+	void *tlv_data;
+	long unsigned int tlv_data_size;
+	void *priv_data;
+};
+
+struct snd_ctl_elem_list32 {
+	u32 offset;
+	u32 space;
+	u32 used;
+	u32 count;
+	u32 pids;
+	unsigned char reserved[50];
+};
+
+struct snd_ctl_elem_info32 {
+	struct snd_ctl_elem_id id;
+	s32 type;
+	u32 access;
+	u32 count;
+	s32 owner;
+	union {
+		struct {
+			s32 min;
+			s32 max;
+			s32 step;
+		} integer;
+		struct {
+			u64 min;
+			u64 max;
+			u64 step;
+		} integer64;
+		struct {
+			u32 items;
+			u32 item;
+			char name[64];
+			u64 names_ptr;
+			u32 names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_ctl_elem_value32 {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect;
+	union {
+		s32 integer[128];
+		unsigned char data[512];
+		s64 integer64[64];
+	} value;
+	unsigned char reserved[128];
+};
+
+enum {
+	SNDRV_CTL_IOCTL_ELEM_LIST32 = 3225965840,
+	SNDRV_CTL_IOCTL_ELEM_INFO32 = 3239073041,
+	SNDRV_CTL_IOCTL_ELEM_READ32 = 3267908882,
+	SNDRV_CTL_IOCTL_ELEM_WRITE32 = 3267908883,
+	SNDRV_CTL_IOCTL_ELEM_ADD32 = 3239073047,
+	SNDRV_CTL_IOCTL_ELEM_REPLACE32 = 3239073048,
+};
+
+struct link_ctl_info {
+	snd_ctl_elem_type_t type;
+	int count;
+	int min_val;
+	int max_val;
+};
+
+struct link_master {
+	struct list_head followers;
+	struct link_ctl_info info;
+	int val;
+	unsigned int tlv[4];
+	void (*hook)(void *, int);
+	void *hook_private_data;
+};
+
+struct link_follower {
+	struct list_head list;
+	struct link_master *master;
+	struct link_ctl_info info;
+	int vals[2];
+	unsigned int flags;
+	struct snd_kcontrol *kctl;
+	struct snd_kcontrol follower;
+};
+
+enum snd_jack_types {
+	SND_JACK_HEADPHONE = 1,
+	SND_JACK_MICROPHONE = 2,
+	SND_JACK_HEADSET = 3,
+	SND_JACK_LINEOUT = 4,
+	SND_JACK_MECHANICAL = 8,
+	SND_JACK_VIDEOOUT = 16,
+	SND_JACK_AVOUT = 20,
+	SND_JACK_LINEIN = 32,
+	SND_JACK_BTN_0 = 16384,
+	SND_JACK_BTN_1 = 8192,
+	SND_JACK_BTN_2 = 4096,
+	SND_JACK_BTN_3 = 2048,
+	SND_JACK_BTN_4 = 1024,
+	SND_JACK_BTN_5 = 512,
+};
+
+struct snd_jack {
+	struct list_head kctl_list;
+	struct snd_card *card;
+	const char *id;
+	struct input_dev *input_dev;
+	struct mutex input_dev_lock;
+	int registered;
+	int type;
+	char name[100];
+	unsigned int key[6];
+	int hw_status_cache;
+	void *private_data;
+	void (*private_free)(struct snd_jack *);
+};
+
+struct snd_jack_kctl {
+	struct snd_kcontrol *kctl;
+	struct list_head list;
+	unsigned int mask_bits;
+	struct snd_jack *jack;
+	bool sw_inject_enable;
+};
+
+struct snd_hwdep_info {
+	unsigned int device;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	int iface;
+	unsigned char reserved[64];
+};
+
+struct snd_hwdep_dsp_status {
+	unsigned int version;
+	unsigned char id[32];
+	unsigned int num_dsps;
+	unsigned int dsp_loaded;
+	unsigned int chip_ready;
+	unsigned char reserved[16];
+};
+
+struct snd_hwdep_dsp_image {
+	unsigned int index;
+	unsigned char name[64];
+	unsigned char *image;
+	size_t length;
+	long unsigned int driver_data;
+};
+
+struct snd_hwdep;
+
+struct snd_hwdep_ops {
+	long long int (*llseek)(struct snd_hwdep *, struct file *, long long int, int);
+	long int (*read)(struct snd_hwdep *, char *, long int, loff_t *);
+	long int (*write)(struct snd_hwdep *, const char *, long int, loff_t *);
+	int (*open)(struct snd_hwdep *, struct file *);
+	int (*release)(struct snd_hwdep *, struct file *);
+	__poll_t (*poll)(struct snd_hwdep *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_hwdep *, struct file *, unsigned int, long unsigned int);
+	int (*ioctl_compat)(struct snd_hwdep *, struct file *, unsigned int, long unsigned int);
+	int (*mmap)(struct snd_hwdep *, struct file *, struct vm_area_struct *);
+	int (*dsp_status)(struct snd_hwdep *, struct snd_hwdep_dsp_status *);
+	int (*dsp_load)(struct snd_hwdep *, struct snd_hwdep_dsp_image *);
+};
+
+struct snd_hwdep {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	char id[32];
+	char name[80];
+	int iface;
+	int oss_type;
+	int ossreg;
+	struct snd_hwdep_ops ops;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_hwdep *);
+	struct device dev;
+	struct mutex open_mutex;
+	int used;
+	unsigned int dsp_loaded;
+	unsigned int exclusive: 1;
+};
+
+struct snd_hwdep_dsp_image32 {
+	u32 index;
+	unsigned char name[64];
+	u32 image;
+	u32 length;
+	u32 driver_data;
+};
+
+enum {
+	SNDRV_HWDEP_IOCTL_DSP_LOAD32 = 1079003139,
+};
+
+typedef long unsigned int snd_pcm_uframes_t;
+
+typedef long int snd_pcm_sframes_t;
+
+enum {
+	SNDRV_PCM_CLASS_GENERIC = 0,
+	SNDRV_PCM_CLASS_MULTI = 1,
+	SNDRV_PCM_CLASS_MODEM = 2,
+	SNDRV_PCM_CLASS_DIGITIZER = 3,
+	SNDRV_PCM_CLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_PCM_STREAM_PLAYBACK = 0,
+	SNDRV_PCM_STREAM_CAPTURE = 1,
+	SNDRV_PCM_STREAM_LAST = 1,
+};
+
+typedef int snd_pcm_access_t;
+
+typedef int snd_pcm_format_t;
+
+typedef int snd_pcm_subformat_t;
+
+typedef int snd_pcm_state_t;
+
+union snd_pcm_sync_id {
+	unsigned char id[16];
+	short unsigned int id16[8];
+	unsigned int id32[4];
+};
+
+struct snd_pcm_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	int dev_class;
+	int dev_subclass;
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	union snd_pcm_sync_id sync;
+	unsigned char reserved[64];
+};
+
+struct snd_interval {
+	unsigned int min;
+	unsigned int max;
+	unsigned int openmin: 1;
+	unsigned int openmax: 1;
+	unsigned int integer: 1;
+	unsigned int empty: 1;
+};
+
+struct snd_mask {
+	__u32 bits[8];
+};
+
+struct snd_pcm_hw_params {
+	unsigned int flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	unsigned int rmask;
+	unsigned int cmask;
+	unsigned int info;
+	unsigned int msbits;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	snd_pcm_uframes_t fifo_size;
+	unsigned char reserved[64];
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_NONE = 0,
+	SNDRV_PCM_TSTAMP_ENABLE = 1,
+	SNDRV_PCM_TSTAMP_LAST = 1,
+};
+
+typedef char __pad_before_uframe[0];
+
+typedef char __pad_after_uframe[0];
+
+struct snd_pcm_mmap_status {
+	snd_pcm_state_t state;
+	__u32 pad1;
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t hw_ptr;
+	__pad_after_uframe __pad2;
+	struct __kernel_timespec tstamp;
+	snd_pcm_state_t suspended_state;
+	__u32 pad3;
+	struct __kernel_timespec audio_tstamp;
+};
+
+struct snd_pcm_mmap_control {
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t appl_ptr;
+	__pad_before_uframe __pad2;
+	__pad_before_uframe __pad3;
+	snd_pcm_uframes_t avail_min;
+	__pad_after_uframe __pad4;
+};
+
+struct snd_dma_device {
+	int type;
+	enum dma_data_direction dir;
+	bool need_sync;
+	struct device *dev;
+};
+
+struct snd_dma_buffer {
+	struct snd_dma_device dev;
+	unsigned char *area;
+	dma_addr_t addr;
+	size_t bytes;
+	void *private_data;
+};
+
+struct snd_pcm_oss_setup {
+	char *task_name;
+	unsigned int disable: 1;
+	unsigned int direct: 1;
+	unsigned int block: 1;
+	unsigned int nonblock: 1;
+	unsigned int partialfrag: 1;
+	unsigned int nosilence: 1;
+	unsigned int buggyptr: 1;
+	unsigned int periods;
+	unsigned int period_size;
+	struct snd_pcm_oss_setup *next;
+};
+
+struct snd_pcm_plugin;
+
+struct snd_pcm_oss_runtime {
+	unsigned int params: 1;
+	unsigned int prepare: 1;
+	unsigned int trigger: 1;
+	unsigned int sync_trigger: 1;
+	int rate;
+	int format;
+	unsigned int channels;
+	unsigned int fragshift;
+	unsigned int maxfrags;
+	unsigned int subdivision;
+	size_t period_bytes;
+	size_t period_frames;
+	size_t period_ptr;
+	unsigned int periods;
+	size_t buffer_bytes;
+	size_t bytes;
+	size_t mmap_bytes;
+	char *buffer;
+	size_t buffer_used;
+	struct mutex params_lock;
+	atomic_t rw_ref;
+	struct snd_pcm_plugin *plugin_first;
+	struct snd_pcm_plugin *plugin_last;
+	unsigned int prev_hw_ptr_period;
+};
+
+struct snd_pcm_group {
+	spinlock_t lock;
+	struct mutex mutex;
+	struct list_head substreams;
+	refcount_t refs;
+};
+
+struct snd_pcm_oss_substream {
+	unsigned int oss: 1;
+	struct snd_pcm_oss_setup setup;
+};
+
+struct snd_pcm;
+
+struct snd_pcm_str;
+
+struct snd_pcm_ops;
+
+struct snd_pcm_runtime;
+
+struct snd_timer;
+
+struct snd_pcm_substream {
+	struct snd_pcm *pcm;
+	struct snd_pcm_str *pstr;
+	void *private_data;
+	int number;
+	char name[32];
+	int stream;
+	struct pm_qos_request latency_pm_qos_req;
+	size_t buffer_bytes_max;
+	struct snd_dma_buffer dma_buffer;
+	size_t dma_max;
+	const struct snd_pcm_ops *ops;
+	struct snd_pcm_runtime *runtime;
+	struct snd_timer *timer;
+	unsigned int timer_running: 1;
+	long int wait_time;
+	struct snd_pcm_substream *next;
+	struct list_head link_list;
+	struct snd_pcm_group self_group;
+	struct snd_pcm_group *group;
+	int ref_count;
+	atomic_t mmap_count;
+	unsigned int f_flags;
+	void (*pcm_release)(struct snd_pcm_substream *);
+	struct pid *pid;
+	struct snd_pcm_oss_substream oss;
+	struct snd_info_entry *proc_root;
+	unsigned int hw_opened: 1;
+	unsigned int managed_buffer_alloc: 1;
+};
+
+struct snd_pcm_oss_stream {
+	struct snd_pcm_oss_setup *setup_list;
+	struct mutex setup_mutex;
+	struct snd_info_entry *proc_entry;
+};
+
+struct snd_pcm_oss {
+	int reg;
+	unsigned int reg_mask;
+};
+
+struct snd_pcm_hardware {
+	unsigned int info;
+	u64 formats;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int channels_min;
+	unsigned int channels_max;
+	size_t buffer_bytes_max;
+	size_t period_bytes_min;
+	size_t period_bytes_max;
+	unsigned int periods_min;
+	unsigned int periods_max;
+	size_t fifo_size;
+};
+
+struct snd_pcm_audio_tstamp_config;
+
+struct snd_pcm_audio_tstamp_report;
+
+struct snd_pcm_ops {
+	int (*open)(struct snd_pcm_substream *);
+	int (*close)(struct snd_pcm_substream *);
+	int (*ioctl)(struct snd_pcm_substream *, unsigned int, void *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_pcm_substream *);
+	int (*prepare)(struct snd_pcm_substream *);
+	int (*trigger)(struct snd_pcm_substream *, int);
+	int (*sync_stop)(struct snd_pcm_substream *);
+	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);
+	int (*get_time_info)(struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
+	int (*fill_silence)(struct snd_pcm_substream *, int, long unsigned int, long unsigned int);
+	int (*copy_user)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
+	int (*copy_kernel)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
+	struct page * (*page)(struct snd_pcm_substream *, long unsigned int);
+	int (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);
+	int (*ack)(struct snd_pcm_substream *);
+};
+
+struct snd_pcm_audio_tstamp_config {
+	u32 type_requested: 4;
+	u32 report_delay: 1;
+};
+
+struct snd_pcm_audio_tstamp_report {
+	u32 valid: 1;
+	u32 actual_type: 4;
+	u32 accuracy_report: 1;
+	u32 accuracy;
+};
+
+struct snd_pcm_hw_rule;
+
+typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *, struct snd_pcm_hw_rule *);
+
+struct snd_pcm_hw_rule {
+	unsigned int cond;
+	int var;
+	int deps[5];
+	snd_pcm_hw_rule_func_t func;
+	void *private;
+};
+
+struct snd_pcm_hw_constraints {
+	struct snd_mask masks[3];
+	struct snd_interval intervals[12];
+	unsigned int rules_num;
+	unsigned int rules_all;
+	struct snd_pcm_hw_rule *rules;
+};
+
+struct snd_pcm_runtime {
+	snd_pcm_state_t state;
+	snd_pcm_state_t suspended_state;
+	struct snd_pcm_substream *trigger_master;
+	struct timespec64 trigger_tstamp;
+	bool trigger_tstamp_latched;
+	int overrange;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t hw_ptr_base;
+	snd_pcm_uframes_t hw_ptr_interrupt;
+	long unsigned int hw_ptr_jiffies;
+	long unsigned int hw_ptr_buffer_jiffies;
+	snd_pcm_sframes_t delay;
+	u64 hw_ptr_wrap;
+	snd_pcm_access_t access;
+	snd_pcm_format_t format;
+	snd_pcm_subformat_t subformat;
+	unsigned int rate;
+	unsigned int channels;
+	snd_pcm_uframes_t period_size;
+	unsigned int periods;
+	snd_pcm_uframes_t buffer_size;
+	snd_pcm_uframes_t min_align;
+	size_t byte_align;
+	unsigned int frame_bits;
+	unsigned int sample_bits;
+	unsigned int info;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	unsigned int no_period_wakeup: 1;
+	int tstamp_mode;
+	unsigned int period_step;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	snd_pcm_uframes_t silence_start;
+	snd_pcm_uframes_t silence_filled;
+	union snd_pcm_sync_id sync;
+	struct snd_pcm_mmap_status *status;
+	struct snd_pcm_mmap_control *control;
+	snd_pcm_uframes_t twake;
+	wait_queue_head_t sleep;
+	wait_queue_head_t tsleep;
+	struct snd_fasync *fasync;
+	bool stop_operating;
+	struct mutex buffer_mutex;
+	atomic_t buffer_accessing;
+	void *private_data;
+	void (*private_free)(struct snd_pcm_runtime *);
+	struct snd_pcm_hardware hw;
+	struct snd_pcm_hw_constraints hw_constraints;
+	unsigned int timer_resolution;
+	int tstamp_type;
+	unsigned char *dma_area;
+	dma_addr_t dma_addr;
+	size_t dma_bytes;
+	struct snd_dma_buffer *dma_buffer_p;
+	unsigned int buffer_changed: 1;
+	struct snd_pcm_audio_tstamp_config audio_tstamp_config;
+	struct snd_pcm_audio_tstamp_report audio_tstamp_report;
+	struct timespec64 driver_tstamp;
+	struct snd_pcm_oss_runtime oss;
+};
+
+struct snd_pcm_str {
+	int stream;
+	struct snd_pcm *pcm;
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct snd_pcm_substream *substream;
+	struct snd_pcm_oss_stream oss;
+	struct snd_info_entry *proc_root;
+	struct snd_kcontrol *chmap_kctl;
+	struct device dev;
+};
+
+struct snd_pcm {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	unsigned int info_flags;
+	short unsigned int dev_class;
+	short unsigned int dev_subclass;
+	char id[64];
+	char name[80];
+	struct snd_pcm_str streams[2];
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_pcm *);
+	bool internal;
+	bool nonatomic;
+	bool no_device_suspend;
+	struct snd_pcm_oss oss;
+};
+
+struct snd_timer_hardware {
+	unsigned int flags;
+	long unsigned int resolution;
+	long unsigned int resolution_min;
+	long unsigned int resolution_max;
+	long unsigned int ticks;
+	int (*open)(struct snd_timer *);
+	int (*close)(struct snd_timer *);
+	long unsigned int (*c_resolution)(struct snd_timer *);
+	int (*start)(struct snd_timer *);
+	int (*stop)(struct snd_timer *);
+	int (*set_period)(struct snd_timer *, long unsigned int, long unsigned int);
+	int (*precise_resolution)(struct snd_timer *, long unsigned int *, long unsigned int *);
+};
+
+struct snd_timer {
+	int tmr_class;
+	struct snd_card *card;
+	struct module *module;
+	int tmr_device;
+	int tmr_subdevice;
+	char id[64];
+	char name[80];
+	unsigned int flags;
+	int running;
+	long unsigned int sticks;
+	void *private_data;
+	void (*private_free)(struct snd_timer *);
+	struct snd_timer_hardware hw;
+	spinlock_t lock;
+	struct list_head device_list;
+	struct list_head open_list_head;
+	struct list_head active_list_head;
+	struct list_head ack_list_head;
+	struct list_head sack_list_head;
+	struct work_struct task_work;
+	int max_instances;
+	int num_instances;
+};
+
+struct snd_pcm_notify {
+	int (*n_register)(struct snd_pcm *);
+	int (*n_disconnect)(struct snd_pcm *);
+	int (*n_unregister)(struct snd_pcm *);
+	struct list_head list;
+};
+
+struct snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	snd_pcm_uframes_t appl_ptr;
+	snd_pcm_uframes_t hw_ptr;
+	snd_pcm_sframes_t delay;
+	snd_pcm_uframes_t avail;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t overrange;
+	snd_pcm_state_t suspended_state;
+	__u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	__u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+typedef u64 u_int64_t;
+
+enum {
+	SNDRV_PCM_MMAP_OFFSET_DATA = 0,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 2147483648,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 2164260864,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 2197815296,
+	SNDRV_PCM_MMAP_OFFSET_STATUS = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL = 2197815296,
+};
+
+typedef int snd_pcm_hw_param_t;
+
+struct snd_pcm_sw_params {
+	int tstamp_mode;
+	unsigned int period_step;
+	unsigned int sleep_min;
+	snd_pcm_uframes_t avail_min;
+	snd_pcm_uframes_t xfer_align;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	unsigned int proto;
+	unsigned int tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_channel_info {
+	unsigned int channel;
+	__kernel_off_t offset;
+	unsigned int first;
+	unsigned int step;
+};
+
+enum {
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = 5,
+};
+
+struct snd_pcm_sync_ptr {
+	__u32 flags;
+	__u32 pad1;
+	union {
+		struct snd_pcm_mmap_status status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_xferi {
+	snd_pcm_sframes_t result;
+	void *buf;
+	snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+	snd_pcm_sframes_t result;
+	void **bufs;
+	snd_pcm_uframes_t frames;
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC = 1,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW = 2,
+	SNDRV_PCM_TSTAMP_TYPE_LAST = 2,
+};
+
+enum {
+	SNDRV_TIMER_EVENT_RESOLUTION = 0,
+	SNDRV_TIMER_EVENT_TICK = 1,
+	SNDRV_TIMER_EVENT_START = 2,
+	SNDRV_TIMER_EVENT_STOP = 3,
+	SNDRV_TIMER_EVENT_CONTINUE = 4,
+	SNDRV_TIMER_EVENT_PAUSE = 5,
+	SNDRV_TIMER_EVENT_EARLY = 6,
+	SNDRV_TIMER_EVENT_SUSPEND = 7,
+	SNDRV_TIMER_EVENT_RESUME = 8,
+	SNDRV_TIMER_EVENT_MSTART = 12,
+	SNDRV_TIMER_EVENT_MSTOP = 13,
+	SNDRV_TIMER_EVENT_MCONTINUE = 14,
+	SNDRV_TIMER_EVENT_MPAUSE = 15,
+	SNDRV_TIMER_EVENT_MSUSPEND = 17,
+	SNDRV_TIMER_EVENT_MRESUME = 18,
+};
+
+enum snd_dma_sync_mode {
+	SNDRV_DMA_SYNC_CPU = 0,
+	SNDRV_DMA_SYNC_DEVICE = 1,
+};
+
+struct snd_pcm_file {
+	struct snd_pcm_substream *substream;
+	int no_compat_mmap;
+	unsigned int user_pversion;
+};
+
+struct snd_pcm_hw_constraint_list {
+	const unsigned int *list;
+	unsigned int count;
+	unsigned int mask;
+};
+
+struct snd_pcm_status32 {
+	snd_pcm_state_t state;
+	s32 trigger_tstamp_sec;
+	s32 trigger_tstamp_nsec;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+	s32 driver_tstamp_sec;
+	s32 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[36];
+};
+
+struct snd_pcm_hw_params_old {
+	unsigned int flags;
+	unsigned int masks[3];
+	struct snd_interval intervals[12];
+	unsigned int rmask;
+	unsigned int cmask;
+	unsigned int info;
+	unsigned int msbits;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	snd_pcm_uframes_t fifo_size;
+	unsigned char reserved[64];
+};
+
+struct action_ops {
+	int (*pre_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	int (*do_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*undo_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*post_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+};
+
+struct snd_pcm_mmap_status32 {
+	snd_pcm_state_t state;
+	s32 pad1;
+	u32 hw_ptr;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	snd_pcm_state_t suspended_state;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+};
+
+struct snd_pcm_mmap_control32 {
+	u32 appl_ptr;
+	u32 avail_min;
+};
+
+struct snd_pcm_sync_ptr32 {
+	u32 flags;
+	union {
+		struct snd_pcm_mmap_status32 status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control32 control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_pcm_hw_params32 {
+	u32 flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	u32 rmask;
+	u32 cmask;
+	u32 info;
+	u32 msbits;
+	u32 rate_num;
+	u32 rate_den;
+	u32 fifo_size;
+	unsigned char reserved[64];
+};
+
+struct snd_pcm_sw_params32 {
+	s32 tstamp_mode;
+	u32 period_step;
+	u32 sleep_min;
+	u32 avail_min;
+	u32 xfer_align;
+	u32 start_threshold;
+	u32 stop_threshold;
+	u32 silence_threshold;
+	u32 silence_size;
+	u32 boundary;
+	u32 proto;
+	u32 tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_channel_info32 {
+	u32 channel;
+	u32 offset;
+	u32 first;
+	u32 step;
+};
+
+struct compat_snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+struct snd_xferi32 {
+	s32 result;
+	u32 buf;
+	u32 frames;
+};
+
+struct snd_xfern32 {
+	s32 result;
+	u32 bufs;
+	u32 frames;
+};
+
+typedef char __pad_before_u32[0];
+
+struct __snd_pcm_mmap_control64_buggy {
+	__pad_before_u32 __pad1;
+	__u32 appl_ptr;
+	__pad_before_u32 __pad2;
+	__pad_before_u32 __pad3;
+	__u32 avail_min;
+	__pad_after_uframe __pad4;
+};
+
+enum {
+	SNDRV_PCM_IOCTL_HW_REFINE32 = 3260825872,
+	SNDRV_PCM_IOCTL_HW_PARAMS32 = 3260825873,
+	SNDRV_PCM_IOCTL_SW_PARAMS32 = 3228057875,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT32 = 2154578208,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT32 = 3228320036,
+	SNDRV_PCM_IOCTL_DELAY32 = 2147762465,
+	SNDRV_PCM_IOCTL_CHANNEL_INFO32 = 2148548914,
+	SNDRV_PCM_IOCTL_REWIND32 = 1074020678,
+	SNDRV_PCM_IOCTL_FORWARD32 = 1074020681,
+	SNDRV_PCM_IOCTL_WRITEI_FRAMES32 = 1074544976,
+	SNDRV_PCM_IOCTL_READI_FRAMES32 = 2148286801,
+	SNDRV_PCM_IOCTL_WRITEN_FRAMES32 = 1074544978,
+	SNDRV_PCM_IOCTL_READN_FRAMES32 = 2148286803,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT64 = 2155888928,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT64 = 3229630756,
+};
+
+enum {
+	SNDRV_CHMAP_UNKNOWN = 0,
+	SNDRV_CHMAP_NA = 1,
+	SNDRV_CHMAP_MONO = 2,
+	SNDRV_CHMAP_FL = 3,
+	SNDRV_CHMAP_FR = 4,
+	SNDRV_CHMAP_RL = 5,
+	SNDRV_CHMAP_RR = 6,
+	SNDRV_CHMAP_FC = 7,
+	SNDRV_CHMAP_LFE = 8,
+	SNDRV_CHMAP_SL = 9,
+	SNDRV_CHMAP_SR = 10,
+	SNDRV_CHMAP_RC = 11,
+	SNDRV_CHMAP_FLC = 12,
+	SNDRV_CHMAP_FRC = 13,
+	SNDRV_CHMAP_RLC = 14,
+	SNDRV_CHMAP_RRC = 15,
+	SNDRV_CHMAP_FLW = 16,
+	SNDRV_CHMAP_FRW = 17,
+	SNDRV_CHMAP_FLH = 18,
+	SNDRV_CHMAP_FCH = 19,
+	SNDRV_CHMAP_FRH = 20,
+	SNDRV_CHMAP_TC = 21,
+	SNDRV_CHMAP_TFL = 22,
+	SNDRV_CHMAP_TFR = 23,
+	SNDRV_CHMAP_TFC = 24,
+	SNDRV_CHMAP_TRL = 25,
+	SNDRV_CHMAP_TRR = 26,
+	SNDRV_CHMAP_TRC = 27,
+	SNDRV_CHMAP_TFLC = 28,
+	SNDRV_CHMAP_TFRC = 29,
+	SNDRV_CHMAP_TSL = 30,
+	SNDRV_CHMAP_TSR = 31,
+	SNDRV_CHMAP_LLFE = 32,
+	SNDRV_CHMAP_RLFE = 33,
+	SNDRV_CHMAP_BC = 34,
+	SNDRV_CHMAP_BLC = 35,
+	SNDRV_CHMAP_BRC = 36,
+	SNDRV_CHMAP_LAST = 36,
+};
+
+struct snd_ratnum {
+	unsigned int num;
+	unsigned int den_min;
+	unsigned int den_max;
+	unsigned int den_step;
+};
+
+struct snd_ratden {
+	unsigned int num_min;
+	unsigned int num_max;
+	unsigned int num_step;
+	unsigned int den;
+};
+
+struct snd_pcm_hw_constraint_ratnums {
+	int nrats;
+	const struct snd_ratnum *rats;
+};
+
+struct snd_pcm_hw_constraint_ratdens {
+	int nrats;
+	const struct snd_ratden *rats;
+};
+
+struct snd_pcm_hw_constraint_ranges {
+	unsigned int count;
+	const struct snd_interval *ranges;
+	unsigned int mask;
+};
+
+struct snd_pcm_chmap_elem {
+	unsigned char channels;
+	unsigned char map[15];
+};
+
+struct snd_pcm_chmap {
+	struct snd_pcm *pcm;
+	int stream;
+	struct snd_kcontrol *kctl;
+	const struct snd_pcm_chmap_elem *chmap;
+	unsigned int max_channels;
+	unsigned int channel_mask;
+	void *private_data;
+};
+
+typedef int (*pcm_transfer_f)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
+
+typedef int (*pcm_copy_f)(struct snd_pcm_substream *, snd_pcm_uframes_t, void *, snd_pcm_uframes_t, snd_pcm_uframes_t, pcm_transfer_f);
+
+enum {
+	SNDRV_TIMER_CLASS_NONE = 4294967295,
+	SNDRV_TIMER_CLASS_SLAVE = 0,
+	SNDRV_TIMER_CLASS_GLOBAL = 1,
+	SNDRV_TIMER_CLASS_CARD = 2,
+	SNDRV_TIMER_CLASS_PCM = 3,
+	SNDRV_TIMER_CLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_TIMER_SCLASS_NONE = 0,
+	SNDRV_TIMER_SCLASS_APPLICATION = 1,
+	SNDRV_TIMER_SCLASS_SEQUENCER = 2,
+	SNDRV_TIMER_SCLASS_OSS_SEQUENCER = 3,
+	SNDRV_TIMER_SCLASS_LAST = 3,
+};
+
+struct snd_timer_id {
+	int dev_class;
+	int dev_sclass;
+	int card;
+	int device;
+	int subdevice;
+};
+
+struct snd_timer_ginfo {
+	struct snd_timer_id tid;
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	long unsigned int reserved0;
+	long unsigned int resolution;
+	long unsigned int resolution_min;
+	long unsigned int resolution_max;
+	unsigned int clients;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+	struct snd_timer_id tid;
+	long unsigned int period_num;
+	long unsigned int period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_gstatus {
+	struct snd_timer_id tid;
+	long unsigned int resolution;
+	long unsigned int resolution_num;
+	long unsigned int resolution_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_select {
+	struct snd_timer_id id;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info {
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	long unsigned int reserved0;
+	long unsigned int resolution;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_params {
+	unsigned int flags;
+	unsigned int ticks;
+	unsigned int queue_size;
+	unsigned int reserved0;
+	unsigned int filter;
+	unsigned char reserved[60];
+};
+
+struct snd_timer_read {
+	unsigned int resolution;
+	unsigned int ticks;
+};
+
+struct snd_timer_instance {
+	struct snd_timer *timer;
+	char *owner;
+	unsigned int flags;
+	void *private_data;
+	void (*private_free)(struct snd_timer_instance *);
+	void (*callback)(struct snd_timer_instance *, long unsigned int, long unsigned int);
+	void (*ccallback)(struct snd_timer_instance *, int, struct timespec64 *, long unsigned int);
+	void (*disconnect)(struct snd_timer_instance *);
+	void *callback_data;
+	long unsigned int ticks;
+	long unsigned int cticks;
+	long unsigned int pticks;
+	long unsigned int resolution;
+	long unsigned int lost;
+	int slave_class;
+	unsigned int slave_id;
+	struct list_head open_list;
+	struct list_head active_list;
+	struct list_head ack_list;
+	struct list_head slave_list_head;
+	struct list_head slave_active_head;
+	struct snd_timer_instance *master;
+};
+
+enum timer_tread_format {
+	TREAD_FORMAT_NONE = 0,
+	TREAD_FORMAT_TIME64 = 1,
+	TREAD_FORMAT_TIME32 = 2,
+};
+
+struct snd_timer_tread32 {
+	int event;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int val;
+};
+
+struct snd_timer_tread64 {
+	int event;
+	u8 pad1[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int val;
+	u8 pad2[4];
+};
+
+struct snd_timer_user {
+	struct snd_timer_instance *timeri;
+	int tread;
+	long unsigned int ticks;
+	long unsigned int overrun;
+	int qhead;
+	int qtail;
+	int qused;
+	int queue_size;
+	bool disconnected;
+	struct snd_timer_read *queue;
+	struct snd_timer_tread64 *tqueue;
+	spinlock_t qlock;
+	long unsigned int last_resolution;
+	unsigned int filter;
+	struct timespec64 tstamp;
+	wait_queue_head_t qchange_sleep;
+	struct snd_fasync *fasync;
+	struct mutex ioctl_lock;
+};
+
+struct snd_timer_status32 {
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_status64 {
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_system_private {
+	struct timer_list tlist;
+	struct snd_timer *snd_timer;
+	long unsigned int last_expires;
+	long unsigned int last_jiffies;
+	long unsigned int correction;
+};
+
+enum {
+	SNDRV_TIMER_IOCTL_START_OLD = 21536,
+	SNDRV_TIMER_IOCTL_STOP_OLD = 21537,
+	SNDRV_TIMER_IOCTL_CONTINUE_OLD = 21538,
+	SNDRV_TIMER_IOCTL_PAUSE_OLD = 21539,
+};
+
+struct snd_timer_gparams32 {
+	struct snd_timer_id tid;
+	u32 period_num;
+	u32 period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info32 {
+	u32 flags;
+	s32 card;
+	unsigned char id[64];
+	unsigned char name[80];
+	u32 reserved0;
+	u32 resolution;
+	unsigned char reserved[64];
+};
+
+enum {
+	SNDRV_TIMER_IOCTL_GPARAMS32 = 1077695492,
+	SNDRV_TIMER_IOCTL_INFO32 = 2162185233,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT32 = 1079530516,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT64 = 1080054804,
+};
+
+struct pcm_format_data {
+	unsigned char width;
+	unsigned char phys;
+	signed char le;
+	signed char signd;
+	unsigned char silence[8];
+};
+
+struct snd_malloc_ops {
+	void * (*alloc)(struct snd_dma_buffer *, size_t);
+	void (*free)(struct snd_dma_buffer *);
+	dma_addr_t (*get_addr)(struct snd_dma_buffer *, size_t);
+	struct page * (*get_page)(struct snd_dma_buffer *, size_t);
+	unsigned int (*get_chunk_size)(struct snd_dma_buffer *, unsigned int, unsigned int);
+	int (*mmap)(struct snd_dma_buffer *, struct vm_area_struct *);
+	void (*sync)(struct snd_dma_buffer *, enum snd_dma_sync_mode);
+};
+
+struct snd_seq_device {
+	struct snd_card *card;
+	int device;
+	const char *id;
+	char name[80];
+	int argsize;
+	void *driver_data;
+	void *private_data;
+	void (*private_free)(struct snd_seq_device *);
+	struct device dev;
+};
+
+struct snd_seq_driver {
+	struct device_driver driver;
+	char *id;
+	int argsize;
+};
+
+struct snd_mixer_oss_file;
+
+struct snd_mixer_oss_slot {
+	int number;
+	unsigned int stereo: 1;
+	int (*get_volume)(struct snd_mixer_oss_file *, struct snd_mixer_oss_slot *, int *, int *);
+	int (*put_volume)(struct snd_mixer_oss_file *, struct snd_mixer_oss_slot *, int, int);
+	int (*get_recsrc)(struct snd_mixer_oss_file *, struct snd_mixer_oss_slot *, int *);
+	int (*put_recsrc)(struct snd_mixer_oss_file *, struct snd_mixer_oss_slot *, int);
+	long unsigned int private_value;
+	void *private_data;
+	void (*private_free)(struct snd_mixer_oss_slot *);
+	int volume[2];
+};
+
+struct snd_mixer_oss {
+	struct snd_card *card;
+	char id[16];
+	char name[32];
+	struct snd_mixer_oss_slot slots[32];
+	unsigned int mask_recsrc;
+	int (*get_recsrc)(struct snd_mixer_oss_file *, unsigned int *);
+	int (*put_recsrc)(struct snd_mixer_oss_file *, unsigned int);
+	void *private_data_recsrc;
+	void (*private_free_recsrc)(struct snd_mixer_oss *);
+	struct mutex reg_mutex;
+	struct snd_info_entry *proc_entry;
+	int oss_dev_alloc;
+	int oss_recsrc;
+};
+
+struct snd_pcm_plugin_format {
+	snd_pcm_format_t format;
+	unsigned int rate;
+	unsigned int channels;
+};
+
+enum snd_pcm_plugin_action {
+	INIT = 0,
+	PREPARE = 1,
+};
+
+struct snd_pcm_plugin_channel;
+
+struct snd_pcm_plugin {
+	const char *name;
+	int stream;
+	struct snd_pcm_plugin_format src_format;
+	struct snd_pcm_plugin_format dst_format;
+	int src_width;
+	int dst_width;
+	snd_pcm_access_t access;
+	snd_pcm_sframes_t (*src_frames)(struct snd_pcm_plugin *, snd_pcm_uframes_t);
+	snd_pcm_sframes_t (*dst_frames)(struct snd_pcm_plugin *, snd_pcm_uframes_t);
+	snd_pcm_sframes_t (*client_channels)(struct snd_pcm_plugin *, snd_pcm_uframes_t, struct snd_pcm_plugin_channel **);
+	snd_pcm_sframes_t (*transfer)(struct snd_pcm_plugin *, const struct snd_pcm_plugin_channel *, struct snd_pcm_plugin_channel *, snd_pcm_uframes_t);
+	int (*action)(struct snd_pcm_plugin *, enum snd_pcm_plugin_action, long unsigned int);
+	struct snd_pcm_plugin *prev;
+	struct snd_pcm_plugin *next;
+	struct snd_pcm_substream *plug;
+	void *private_data;
+	void (*private_free)(struct snd_pcm_plugin *);
+	char *buf;
+	snd_pcm_uframes_t buf_frames;
+	struct snd_pcm_plugin_channel *buf_channels;
+	char extra_data[0];
+};
+
+struct snd_pcm_oss_file {
+	struct snd_pcm_substream *streams[2];
+};
+
+struct snd_pcm_channel_area {
+	void *addr;
+	unsigned int first;
+	unsigned int step;
+};
+
+struct snd_pcm_plugin_channel {
+	void *aptr;
+	struct snd_pcm_channel_area area;
+	snd_pcm_uframes_t frames;
+	unsigned int enabled: 1;
+	unsigned int wanted: 1;
+};
+
+struct audio_buf_info {
+	int fragments;
+	int fragstotal;
+	int fragsize;
+	int bytes;
+};
+
+struct count_info {
+	int bytes;
+	int blocks;
+	int ptr;
+};
+
+struct buffmem_desc {
+	unsigned int *buffer;
+	int size;
+};
+
+struct snd_mixer_oss_file {
+	struct snd_card *card;
+	struct snd_mixer_oss *mixer;
+};
+
+enum {
+	SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
+	SNDRV_RAWMIDI_STREAM_INPUT = 1,
+	SNDRV_RAWMIDI_STREAM_LAST = 1,
+};
+
+struct snd_rawmidi_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned int flags;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	unsigned char reserved[64];
+};
+
+struct snd_rawmidi_framing_tstamp {
+	__u8 frame_type;
+	__u8 length;
+	__u8 reserved[2];
+	__u32 tv_nsec;
+	__u64 tv_sec;
+	__u8 data[16];
+};
+
+struct snd_rawmidi_params {
+	int stream;
+	size_t buffer_size;
+	size_t avail_min;
+	unsigned int no_active_sensing: 1;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct snd_rawmidi_substream;
+
+struct snd_rawmidi_ops {
+	int (*open)(struct snd_rawmidi_substream *);
+	int (*close)(struct snd_rawmidi_substream *);
+	void (*trigger)(struct snd_rawmidi_substream *, int);
+	void (*drain)(struct snd_rawmidi_substream *);
+};
+
+struct snd_rawmidi;
+
+struct snd_rawmidi_str;
+
+struct snd_rawmidi_runtime;
+
+struct snd_rawmidi_substream {
+	struct list_head list;
+	int stream;
+	int number;
+	bool opened;
+	bool append;
+	bool active_sensing;
+	unsigned int framing;
+	unsigned int clock_type;
+	int use_count;
+	size_t bytes;
+	spinlock_t lock;
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_str *pstr;
+	char name[32];
+	struct snd_rawmidi_runtime *runtime;
+	struct pid *pid;
+	const struct snd_rawmidi_ops *ops;
+};
+
+struct snd_seq_port_info;
+
+struct snd_rawmidi_global_ops {
+	int (*dev_register)(struct snd_rawmidi *);
+	int (*dev_unregister)(struct snd_rawmidi *);
+	void (*get_port_info)(struct snd_rawmidi *, int, struct snd_seq_port_info *);
+};
+
+struct snd_rawmidi_str {
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct list_head substreams;
+};
+
+struct snd_rawmidi {
+	struct snd_card *card;
+	struct list_head list;
+	unsigned int device;
+	unsigned int info_flags;
+	char id[64];
+	char name[80];
+	int ossreg;
+	const struct snd_rawmidi_global_ops *ops;
+	struct snd_rawmidi_str streams[2];
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi *);
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	struct device dev;
+	struct snd_info_entry *proc_entry;
+	struct snd_seq_device *seq_dev;
+};
+
+struct snd_rawmidi_runtime {
+	struct snd_rawmidi_substream *substream;
+	unsigned int drain: 1;
+	unsigned int oss: 1;
+	unsigned char *buffer;
+	size_t buffer_size;
+	size_t appl_ptr;
+	size_t hw_ptr;
+	size_t avail_min;
+	size_t avail;
+	size_t xruns;
+	int buffer_ref;
+	wait_queue_head_t sleep;
+	void (*event)(struct snd_rawmidi_substream *);
+	struct work_struct event_work;
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi_substream *);
+};
+
+struct snd_rawmidi_file {
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_substream *input;
+	struct snd_rawmidi_substream *output;
+	unsigned int user_pversion;
+};
+
+struct snd_rawmidi_status32 {
+	s32 stream;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_status64 {
+	int stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	size_t avail;
+	size_t xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_params32 {
+	s32 stream;
+	u32 buffer_size;
+	u32 avail_min;
+	unsigned int no_active_sensing;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct compat_snd_rawmidi_status64 {
+	s32 stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+enum {
+	SNDRV_RAWMIDI_IOCTL_PARAMS32 = 3223344912,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT32 = 3223607072,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT64 = 3224393504,
+};
+
+typedef void (*mulaw_f)(struct snd_pcm_plugin *, const struct snd_pcm_plugin_channel *, struct snd_pcm_plugin_channel *, snd_pcm_uframes_t);
+
+struct mulaw_priv {
+	mulaw_f func;
+	int cvt_endian;
+	unsigned int native_ofs;
+	unsigned int copy_ofs;
+	unsigned int native_bytes;
+	unsigned int copy_bytes;
+	u16 flip;
+};
+
+struct linear_priv {
+	int cvt_endian;
+	unsigned int src_ofs;
+	unsigned int dst_ofs;
+	unsigned int copy_ofs;
+	unsigned int dst_bytes;
+	unsigned int copy_bytes;
+	unsigned int flip;
+};
+
+struct uac1_ac_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__le16 wTotalLength;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[0];
+} __attribute__((packed));
+
+struct media_device;
+
+struct media_intf_devnode;
+
+struct snd_usb_audio {
+	int index;
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *intf[16];
+	u32 usb_id;
+	uint16_t quirk_type;
+	struct mutex mutex;
+	unsigned int system_suspend;
+	atomic_t active;
+	atomic_t shutdown;
+	atomic_t usage_count;
+	wait_queue_head_t shutdown_wait;
+	unsigned int quirk_flags;
+	unsigned int need_delayed_register: 1;
+	int num_interfaces;
+	int last_iface;
+	int num_suspended_intf;
+	int sample_rate_read_error;
+	int badd_profile;
+	struct list_head pcm_list;
+	struct list_head ep_list;
+	struct list_head iface_ref_list;
+	struct list_head clock_ref_list;
+	int pcm_devs;
+	struct list_head midi_list;
+	struct list_head mixer_list;
+	int setup;
+	bool generic_implicit_fb;
+	bool autoclock;
+	bool lowlatency;
+	struct usb_host_interface *ctrl_intf;
+	struct media_device *media_dev;
+	struct media_intf_devnode *ctl_intf_media_devnode;
+};
+
+enum quirk_type {
+	QUIRK_IGNORE_INTERFACE = 0,
+	QUIRK_COMPOSITE = 1,
+	QUIRK_AUTODETECT = 2,
+	QUIRK_MIDI_STANDARD_INTERFACE = 3,
+	QUIRK_MIDI_FIXED_ENDPOINT = 4,
+	QUIRK_MIDI_YAMAHA = 5,
+	QUIRK_MIDI_ROLAND = 6,
+	QUIRK_MIDI_MIDIMAN = 7,
+	QUIRK_MIDI_NOVATION = 8,
+	QUIRK_MIDI_RAW_BYTES = 9,
+	QUIRK_MIDI_EMAGIC = 10,
+	QUIRK_MIDI_CME = 11,
+	QUIRK_MIDI_AKAI = 12,
+	QUIRK_MIDI_US122L = 13,
+	QUIRK_MIDI_FTDI = 14,
+	QUIRK_MIDI_CH345 = 15,
+	QUIRK_AUDIO_STANDARD_INTERFACE = 16,
+	QUIRK_AUDIO_FIXED_ENDPOINT = 17,
+	QUIRK_AUDIO_EDIROL_UAXX = 18,
+	QUIRK_AUDIO_STANDARD_MIXER = 19,
+	QUIRK_TYPE_COUNT = 20,
+};
+
+struct snd_usb_audio_quirk {
+	const char *vendor_name;
+	const char *product_name;
+	int16_t ifnum;
+	uint16_t type;
+	const void *data;
+};
+
+struct audioformat {
+	struct list_head list;
+	u64 formats;
+	unsigned int channels;
+	unsigned int fmt_type;
+	unsigned int fmt_bits;
+	unsigned int frame_size;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	unsigned char altset_idx;
+	unsigned char attributes;
+	unsigned char endpoint;
+	unsigned char ep_attr;
+	bool implicit_fb;
+	unsigned char sync_ep;
+	unsigned char sync_iface;
+	unsigned char sync_altsetting;
+	unsigned char sync_ep_idx;
+	unsigned char datainterval;
+	unsigned char protocol;
+	unsigned int maxpacksize;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int nr_rates;
+	unsigned int *rate_table;
+	unsigned char clock;
+	struct snd_pcm_chmap_elem *chmap;
+	bool dsd_dop;
+	bool dsd_bitrev;
+	bool dsd_raw;
+};
+
+struct snd_usb_substream;
+
+struct snd_usb_endpoint;
+
+struct snd_urb_ctx {
+	struct urb *urb;
+	unsigned int buffer_size;
+	struct snd_usb_substream *subs;
+	struct snd_usb_endpoint *ep;
+	int index;
+	int packets;
+	int queued;
+	int packet_size[48];
+	struct list_head ready_list;
+};
+
+struct media_ctl;
+
+struct snd_usb_stream;
+
+struct snd_usb_power_domain;
+
+struct snd_usb_substream {
+	struct snd_usb_stream *stream;
+	struct usb_device *dev;
+	struct snd_pcm_substream *pcm_substream;
+	int direction;
+	int endpoint;
+	const struct audioformat *cur_audiofmt;
+	struct snd_usb_power_domain *str_pd;
+	unsigned int channels_max;
+	unsigned int txfr_quirk: 1;
+	unsigned int tx_length_quirk: 1;
+	unsigned int fmt_type;
+	unsigned int pkt_offset_adj;
+	unsigned int stream_offset_adj;
+	unsigned int running: 1;
+	unsigned int period_elapsed_pending;
+	unsigned int buffer_bytes;
+	unsigned int inflight_bytes;
+	unsigned int hwptr_done;
+	unsigned int transfer_done;
+	unsigned int frame_limit;
+	unsigned int ep_num;
+	struct snd_usb_endpoint *data_endpoint;
+	struct snd_usb_endpoint *sync_endpoint;
+	long unsigned int flags;
+	unsigned int speed;
+	u64 formats;
+	unsigned int num_formats;
+	struct list_head fmt_list;
+	spinlock_t lock;
+	unsigned int last_frame_number;
+	struct {
+		int marker;
+		int channel;
+		int byte_idx;
+	} dsd_dop;
+	bool trigger_tstamp_pending_update;
+	bool lowlatency_playback;
+	struct media_ctl *media_ctl;
+};
+
+struct snd_usb_packet_info {
+	uint32_t packet_size[48];
+	int packets;
+};
+
+struct snd_usb_iface_ref;
+
+struct snd_usb_clock_ref;
+
+struct snd_usb_endpoint {
+	struct snd_usb_audio *chip;
+	struct snd_usb_iface_ref *iface_ref;
+	struct snd_usb_clock_ref *clock_ref;
+	int opened;
+	atomic_t running;
+	int ep_num;
+	int type;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	atomic_t state;
+	int (*prepare_data_urb)(struct snd_usb_substream *, struct urb *, bool);
+	void (*retire_data_urb)(struct snd_usb_substream *, struct urb *);
+	struct snd_usb_substream *data_subs;
+	struct snd_usb_endpoint *sync_source;
+	struct snd_usb_endpoint *sync_sink;
+	struct snd_urb_ctx urb[12];
+	struct snd_usb_packet_info next_packet[12];
+	unsigned int next_packet_head;
+	unsigned int next_packet_queued;
+	struct list_head ready_playback_urbs;
+	unsigned int nurbs;
+	long unsigned int active_mask;
+	long unsigned int unlink_mask;
+	atomic_t submitted_urbs;
+	char *syncbuf;
+	dma_addr_t sync_dma;
+	unsigned int pipe;
+	unsigned int packsize[2];
+	unsigned int sample_rem;
+	unsigned int sample_accum;
+	unsigned int pps;
+	unsigned int freqn;
+	unsigned int freqm;
+	int freqshift;
+	unsigned int freqmax;
+	unsigned int phase;
+	unsigned int maxpacksize;
+	unsigned int maxframesize;
+	unsigned int max_urb_frames;
+	unsigned int curpacksize;
+	unsigned int curframesize;
+	unsigned int syncmaxsize;
+	unsigned int fill_max: 1;
+	unsigned int tenor_fb_quirk: 1;
+	unsigned int datainterval;
+	unsigned int syncinterval;
+	unsigned char silence_value;
+	unsigned int stride;
+	int skip_packets;
+	bool implicit_fb_sync;
+	bool lowlatency_playback;
+	bool need_setup;
+	bool need_prepare;
+	bool fixed_rate;
+	const struct audioformat *cur_audiofmt;
+	unsigned int cur_rate;
+	snd_pcm_format_t cur_format;
+	unsigned int cur_channels;
+	unsigned int cur_frame_bytes;
+	unsigned int cur_period_frames;
+	unsigned int cur_period_bytes;
+	unsigned int cur_buffer_periods;
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct snd_usb_stream {
+	struct snd_usb_audio *chip;
+	struct snd_pcm *pcm;
+	int pcm_index;
+	unsigned int fmt_type;
+	struct snd_usb_substream substream[2];
+	struct list_head list;
+};
+
+struct snd_usb_power_domain {
+	int pd_id;
+	int pd_d1d0_rec;
+	int pd_d2d0_rec;
+};
+
+struct snd_usb_midi_endpoint_info {
+	int8_t out_ep;
+	uint8_t out_interval;
+	int8_t in_ep;
+	uint8_t in_interval;
+	uint16_t out_cables;
+	uint16_t in_cables;
+	int16_t assoc_in_jacks[16];
+	int16_t assoc_out_jacks[16];
+};
+
+struct usbmix_connector_map {
+	u8 id;
+	u8 delegated_id;
+	u8 control;
+	u8 channel;
+};
+
+struct media_mixer_ctl;
+
+struct usb_mixer_elem_list;
+
+struct rc_config;
+
+struct usb_mixer_interface {
+	struct snd_usb_audio *chip;
+	struct usb_host_interface *hostif;
+	struct list_head list;
+	unsigned int ignore_ctl_error;
+	struct urb *urb;
+	struct usb_mixer_elem_list **id_elems;
+	int protocol;
+	const struct usbmix_connector_map *connector_map;
+	const struct rc_config *rc_cfg;
+	u32 rc_code;
+	wait_queue_head_t rc_waitq;
+	struct urb *rc_urb;
+	struct usb_ctrlrequest *rc_setup_packet;
+	u8 rc_buffer[6];
+	struct media_mixer_ctl *media_mixer_ctl;
+	bool disconnected;
+	void *private_data;
+	void (*private_free)(struct usb_mixer_interface *);
+	void (*private_suspend)(struct usb_mixer_interface *);
+};
+
+typedef void (*usb_mixer_elem_dump_func_t)(struct snd_info_buffer *, struct usb_mixer_elem_list *);
+
+typedef int (*usb_mixer_elem_resume_func_t)(struct usb_mixer_elem_list *);
+
+struct usb_mixer_elem_list {
+	struct usb_mixer_interface *mixer;
+	struct usb_mixer_elem_list *next_id_elem;
+	struct snd_kcontrol *kctl;
+	unsigned int id;
+	bool is_std_info;
+	usb_mixer_elem_dump_func_t dump;
+	usb_mixer_elem_resume_func_t resume;
+};
+
+struct rc_config {
+	u32 usb_id;
+	u8 offset;
+	u8 length;
+	u8 packet_length;
+	u8 min_packet_length;
+	u8 mute_mixer_id;
+	u32 mute_code;
+};
+
+struct usb_audio_device_name {
+	u32 id;
+	const char *vendor_name;
+	const char *product_name;
+	const char *profile_name;
+};
+
+struct uac_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bAssocTerminal;
+	__u8 iClockSource;
+};
+
+struct uac_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+struct uac_clock_multiplier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bCSourceID;
+	__u8 bmControls;
+	__u8 iClockMultiplier;
+};
+
+struct uac3_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__le32 bmControls;
+	__u8 bReferenceTerminal;
+	__le16 wClockSourceStr;
+} __attribute__((packed));
+
+struct uac3_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+union uac23_clock_source_desc {
+	struct uac_clock_source_descriptor v2;
+	struct uac3_clock_source_descriptor v3;
+};
+
+union uac23_clock_selector_desc {
+	struct uac_clock_selector_descriptor v2;
+	struct uac3_clock_selector_descriptor v3;
+};
+
+union uac23_clock_multiplier_desc {
+	struct uac_clock_multiplier_descriptor v2;
+	struct uac_clock_multiplier_descriptor v3;
+};
+
+struct rate_channel {
+	short int last_S1;
+	short int last_S2;
+};
+
+typedef void (*rate_f)(struct snd_pcm_plugin *, const struct snd_pcm_plugin_channel *, struct snd_pcm_plugin_channel *, int, int);
+
+struct rate_priv {
+	unsigned int pitch;
+	unsigned int pos;
+	rate_f func;
+	snd_pcm_sframes_t old_src_frames;
+	snd_pcm_sframes_t old_dst_frames;
+	struct rate_channel channels[0];
+};
+
+struct uac_format_type_i_continuous_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tLowerSamFreq[3];
+	__u8 tUpperSamFreq[3];
+};
+
+struct uac_format_type_i_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+};
+
+struct uac_format_type_i_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__u8 bHeaderLength;
+	__u8 bControlSize;
+	__u8 bSideBandProtocol;
+};
+
+struct uac_format_type_ii_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+} __attribute__((packed));
+
+struct uac_format_type_ii_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bHeaderLength;
+	__u8 bSideBandProtocol;
+};
+
+struct uac3_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le64 bmFormats;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__le16 bmAuxProtocols;
+	__u8 bControlSize;
+} __attribute__((packed));
+
+struct snd_usb_iface_ref {
+	unsigned char iface;
+	bool need_setup;
+	int opened;
+	int altset;
+	struct list_head list;
+};
+
+struct snd_usb_clock_ref {
+	unsigned char clock;
+	atomic_t locked;
+	int opened;
+	int rate;
+	bool need_setup;
+	struct list_head list;
+};
+
+enum {
+	EP_STATE_STOPPED = 0,
+	EP_STATE_RUNNING = 1,
+	EP_STATE_STOPPING = 2,
+};
+
+enum {
+	IMPLICIT_FB_NONE = 0,
+	IMPLICIT_FB_GENERIC = 1,
+	IMPLICIT_FB_FIXED = 2,
+	IMPLICIT_FB_BOTH = 3,
+};
+
+struct snd_usb_implicit_fb_match {
+	unsigned int id;
+	unsigned int iface_class;
+	unsigned int ep_num;
+	unsigned int iface;
+	int type;
+};
+
+enum {
+	USB_MIXER_BOOLEAN = 0,
+	USB_MIXER_INV_BOOLEAN = 1,
+	USB_MIXER_S8 = 2,
+	USB_MIXER_U8 = 3,
+	USB_MIXER_S16 = 4,
+	USB_MIXER_U16 = 5,
+	USB_MIXER_S32 = 6,
+	USB_MIXER_U32 = 7,
+	USB_MIXER_BESPOKEN = 8,
+};
+
+struct usb_mixer_elem_info {
+	struct usb_mixer_elem_list head;
+	unsigned int control;
+	unsigned int cmask;
+	unsigned int idx_off;
+	unsigned int ch_readonly;
+	unsigned int master_readonly;
+	int channels;
+	int val_type;
+	int min;
+	int max;
+	int res;
+	int dBmin;
+	int dBmax;
+	int cached;
+	int cache_val[16];
+	u8 initialized;
+	u8 min_mute;
+	void *private_data;
+};
+
+enum {
+	SCARLETT_OUTPUTS = 0,
+	SCARLETT_SWITCH_IMPEDANCE = 1,
+	SCARLETT_SWITCH_PAD = 2,
+	SCARLETT_SWITCH_GAIN = 3,
+};
+
+enum {
+	SCARLETT_OFFSET_PCM = 0,
+	SCARLETT_OFFSET_ANALOG = 1,
+	SCARLETT_OFFSET_SPDIF = 2,
+	SCARLETT_OFFSET_ADAT = 3,
+	SCARLETT_OFFSET_MIX = 4,
+};
+
+struct scarlett_mixer_elem_enum_info {
+	int start;
+	int len;
+	int offsets[5];
+	const char * const *names;
+};
+
+struct scarlett_mixer_control {
+	unsigned char num;
+	unsigned char type;
+	const char *name;
+};
+
+struct scarlett_device_info {
+	int matrix_in;
+	int matrix_out;
+	int input_len;
+	int output_len;
+	struct scarlett_mixer_elem_enum_info opt_master;
+	struct scarlett_mixer_elem_enum_info opt_matrix;
+	int matrix_mux_init[18];
+	int num_controls;
+	const struct scarlett_mixer_control controls[10];
+};
+
+enum {
+	SNDRV_HWDEP_IFACE_OPL2 = 0,
+	SNDRV_HWDEP_IFACE_OPL3 = 1,
+	SNDRV_HWDEP_IFACE_OPL4 = 2,
+	SNDRV_HWDEP_IFACE_SB16CSP = 3,
+	SNDRV_HWDEP_IFACE_EMU10K1 = 4,
+	SNDRV_HWDEP_IFACE_YSS225 = 5,
+	SNDRV_HWDEP_IFACE_ICS2115 = 6,
+	SNDRV_HWDEP_IFACE_SSCAPE = 7,
+	SNDRV_HWDEP_IFACE_VX = 8,
+	SNDRV_HWDEP_IFACE_MIXART = 9,
+	SNDRV_HWDEP_IFACE_USX2Y = 10,
+	SNDRV_HWDEP_IFACE_EMUX_WAVETABLE = 11,
+	SNDRV_HWDEP_IFACE_BLUETOOTH = 12,
+	SNDRV_HWDEP_IFACE_USX2Y_PCM = 13,
+	SNDRV_HWDEP_IFACE_PCXHR = 14,
+	SNDRV_HWDEP_IFACE_SB_RC = 15,
+	SNDRV_HWDEP_IFACE_HDA = 16,
+	SNDRV_HWDEP_IFACE_USB_STREAM = 17,
+	SNDRV_HWDEP_IFACE_FW_DICE = 18,
+	SNDRV_HWDEP_IFACE_FW_FIREWORKS = 19,
+	SNDRV_HWDEP_IFACE_FW_BEBOB = 20,
+	SNDRV_HWDEP_IFACE_FW_OXFW = 21,
+	SNDRV_HWDEP_IFACE_FW_DIGI00X = 22,
+	SNDRV_HWDEP_IFACE_FW_TASCAM = 23,
+	SNDRV_HWDEP_IFACE_LINE6 = 24,
+	SNDRV_HWDEP_IFACE_FW_MOTU = 25,
+	SNDRV_HWDEP_IFACE_FW_FIREFACE = 26,
+	SNDRV_HWDEP_IFACE_LAST = 26,
+};
+
+struct std_mono_table {
+	unsigned int unitid;
+	unsigned int control;
+	unsigned int cmask;
+	int val_type;
+	const char *name;
+	snd_kcontrol_tlv_rw_t *tlv_callback;
+};
+
+enum snd_rme_domain {
+	SND_RME_DOMAIN_SYSTEM = 0,
+	SND_RME_DOMAIN_AES = 1,
+	SND_RME_DOMAIN_SPDIF = 2,
+};
+
+enum snd_rme_clock_status {
+	SND_RME_CLOCK_NOLOCK = 0,
+	SND_RME_CLOCK_LOCK = 1,
+	SND_RME_CLOCK_SYNC = 2,
+};
+
+enum {
+	SND_BBFPRO_CTL_REG1 = 0,
+	SND_BBFPRO_CTL_REG2 = 1,
+};
+
+struct snd_djm_ctl;
+
+struct snd_djm_device {
+	const char *name;
+	const struct snd_djm_ctl *controls;
+	size_t ncontrols;
+};
+
+struct snd_djm_ctl {
+	const char *name;
+	const u16 *options;
+	size_t noptions;
+	u16 default_value;
+	u16 wIndex;
+};
+
+struct sb_jack {
+	int unitid;
+	const char *name;
+};
+
+enum {
+	SCARLETT2_CONFIG_SET_NO_MIXER = 0,
+	SCARLETT2_CONFIG_SET_GEN_2 = 1,
+	SCARLETT2_CONFIG_SET_GEN_3 = 2,
+	SCARLETT2_CONFIG_SET_CLARETT = 3,
+	SCARLETT2_CONFIG_SET_COUNT = 4,
+};
+
+enum {
+	SCARLETT2_PORT_TYPE_NONE = 0,
+	SCARLETT2_PORT_TYPE_ANALOGUE = 1,
+	SCARLETT2_PORT_TYPE_SPDIF = 2,
+	SCARLETT2_PORT_TYPE_ADAT = 3,
+	SCARLETT2_PORT_TYPE_MIX = 4,
+	SCARLETT2_PORT_TYPE_PCM = 5,
+	SCARLETT2_PORT_TYPE_COUNT = 6,
+};
+
+enum {
+	SCARLETT2_PORT_IN = 0,
+	SCARLETT2_PORT_OUT = 1,
+	SCARLETT2_PORT_DIRNS = 2,
+};
+
+enum {
+	SCARLETT2_BUTTON_MUTE = 0,
+	SCARLETT2_BUTTON_DIM = 1,
+	SCARLETT2_DIM_MUTE_COUNT = 2,
+};
+
+struct scarlett2_port {
+	u16 id;
+	const char * const src_descr;
+	int src_num_offset;
+	const char * const dst_descr;
+};
+
+struct scarlett2_mux_entry {
+	u8 port_type;
+	u8 start;
+	u8 count;
+};
+
+struct scarlett2_device_info {
+	u32 usb_id;
+	u8 has_msd_mode;
+	u8 config_set;
+	u8 line_out_hw_vol;
+	u8 has_speaker_switching;
+	u8 has_talkback;
+	u8 level_input_count;
+	u8 level_input_first;
+	u8 pad_input_count;
+	u8 air_input_count;
+	u8 phantom_count;
+	u8 inputs_per_phantom;
+	u8 direct_monitor;
+	u8 line_out_remap_enable;
+	u8 line_out_remap[10];
+	const char * const line_out_descrs[10];
+	const int port_count[12];
+	struct scarlett2_mux_entry mux_assignment[30];
+};
+
+struct scarlett2_data {
+	struct usb_mixer_interface *mixer;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+	struct delayed_work work;
+	const struct scarlett2_device_info *info;
+	__u8 bInterfaceNumber;
+	__u8 bEndpointAddress;
+	__u16 wMaxPacketSize;
+	__u8 bInterval;
+	int num_mux_srcs;
+	int num_mux_dsts;
+	u16 scarlett2_seq;
+	u8 sync_updated;
+	u8 vol_updated;
+	u8 input_other_updated;
+	u8 monitor_other_updated;
+	u8 mux_updated;
+	u8 speaker_switching_switched;
+	u8 sync;
+	u8 master_vol;
+	u8 vol[10];
+	u8 vol_sw_hw_switch[10];
+	u8 mute_switch[10];
+	u8 level_switch[2];
+	u8 pad_switch[8];
+	u8 dim_mute[2];
+	u8 air_switch[8];
+	u8 phantom_switch[2];
+	u8 phantom_persistence;
+	u8 direct_monitor_switch;
+	u8 speaker_switching_switch;
+	u8 talkback_switch;
+	u8 talkback_map[12];
+	u8 msd_switch;
+	u8 standalone_switch;
+	struct snd_kcontrol *sync_ctl;
+	struct snd_kcontrol *master_vol_ctl;
+	struct snd_kcontrol *vol_ctls[10];
+	struct snd_kcontrol *sw_hw_ctls[10];
+	struct snd_kcontrol *mute_ctls[10];
+	struct snd_kcontrol *dim_mute_ctls[2];
+	struct snd_kcontrol *level_ctls[2];
+	struct snd_kcontrol *pad_ctls[8];
+	struct snd_kcontrol *air_ctls[8];
+	struct snd_kcontrol *phantom_ctls[2];
+	struct snd_kcontrol *mux_ctls[77];
+	struct snd_kcontrol *direct_monitor_ctl;
+	struct snd_kcontrol *speaker_switching_ctl;
+	struct snd_kcontrol *talkback_ctl;
+	u8 mux[77];
+	u8 mix[300];
+};
+
+struct scarlett2_usb_volume_status {
+	u8 dim_mute[2];
+	u8 pad1;
+	s16 sw_vol[10];
+	s16 hw_vol[10];
+	u8 mute_switch[10];
+	u8 sw_hw_switch[10];
+	u8 pad3[6];
+	s16 master_vol;
+} __attribute__((packed));
+
+enum {
+	SCARLETT2_CONFIG_DIM_MUTE = 0,
+	SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
+	SCARLETT2_CONFIG_MUTE_SWITCH = 2,
+	SCARLETT2_CONFIG_SW_HW_SWITCH = 3,
+	SCARLETT2_CONFIG_LEVEL_SWITCH = 4,
+	SCARLETT2_CONFIG_PAD_SWITCH = 5,
+	SCARLETT2_CONFIG_MSD_SWITCH = 6,
+	SCARLETT2_CONFIG_AIR_SWITCH = 7,
+	SCARLETT2_CONFIG_STANDALONE_SWITCH = 8,
+	SCARLETT2_CONFIG_PHANTOM_SWITCH = 9,
+	SCARLETT2_CONFIG_PHANTOM_PERSISTENCE = 10,
+	SCARLETT2_CONFIG_DIRECT_MONITOR = 11,
+	SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH = 12,
+	SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE = 13,
+	SCARLETT2_CONFIG_TALKBACK_MAP = 14,
+	SCARLETT2_CONFIG_COUNT = 15,
+};
+
+struct scarlett2_config {
+	u8 offset;
+	u8 size;
+	u8 activate;
+};
+
+struct scarlett2_usb_packet {
+	__le32 cmd;
+	__le16 size;
+	__le16 seq;
+	__le32 error;
+	__le32 pad;
+	u8 data[0];
+};
+
+struct uac_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bNrChannels;
+	__le16 wChannelConfig;
+	__u8 iChannelNames;
+	__u8 iTerminal;
+};
+
+struct uac1_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac_mixer_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac_selector_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUintID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bControlSize;
+	__u8 bmaControls[0];
+};
+
+struct uac_processing_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wProcessType;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+} __attribute__((packed));
+
+struct uac1_status_word {
+	__u8 bStatusType;
+	__u8 bOriginator;
+};
+
+struct uac2_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac2_effect_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wEffectType;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+} __attribute__((packed));
+
+struct uac2_connectors_ctl_blk {
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac2_interrupt_data_msg {
+	__u8 bInfo;
+	__u8 bAttribute;
+	__le16 wValue;
+	__le16 wIndex;
+};
+
+struct uac3_cluster_header_descriptor {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+	__u8 bNrChannels;
+} __attribute__((packed));
+
+struct uac3_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+};
+
+struct uac3_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+} __attribute__((packed));
+
+struct uac3_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac3_insertion_ctl_blk {
+	__u8 bSize;
+	__u8 bmConInserted;
+};
+
+struct usb_audio_term {
+	int id;
+	int type;
+	int channels;
+	unsigned int chconfig;
+	int name;
+};
+
+struct usbmix_name_map;
+
+struct usbmix_selector_map;
+
+struct mixer_build {
+	struct snd_usb_audio *chip;
+	struct usb_mixer_interface *mixer;
+	unsigned char *buffer;
+	unsigned int buflen;
+	long unsigned int unitbitmap[4];
+	long unsigned int termbitmap[4];
+	struct usb_audio_term oterm;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+};
+
+struct usbmix_dB_map;
+
+struct usbmix_name_map {
+	int id;
+	const char *name;
+	int control;
+	const struct usbmix_dB_map *dB;
+};
+
+struct usbmix_selector_map {
+	int id;
+	int count;
+	const char **names;
+};
+
+enum {
+	USB_XU_CLOCK_RATE = 58113,
+	USB_XU_CLOCK_SOURCE = 58114,
+	USB_XU_DIGITAL_IO_STATUS = 58115,
+	USB_XU_DEVICE_OPTIONS = 58116,
+	USB_XU_DIRECT_MONITORING = 58117,
+	USB_XU_METERING = 58118,
+};
+
+enum {
+	USB_XU_CLOCK_SOURCE_SELECTOR = 2,
+	USB_XU_CLOCK_RATE_SELECTOR = 3,
+	USB_XU_DIGITAL_FORMAT_SELECTOR = 1,
+	USB_XU_SOFT_LIMIT_SELECTOR = 3,
+};
+
+struct usbmix_dB_map {
+	int min;
+	int max;
+	bool min_mute;
+};
+
+struct usbmix_ctl_map {
+	u32 id;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+	const struct usbmix_connector_map *connector_map;
+};
+
+struct iterm_name_combo {
+	int type;
+	char *name;
+};
+
+struct usb_feature_control_info {
+	int control;
+	const char *name;
+	int type;
+	int type_uac2;
+};
+
+struct procunit_value_info {
+	int control;
+	const char *suffix;
+	int val_type;
+	int min_value;
+};
+
+struct procunit_info {
+	int type;
+	char *name;
+	const struct procunit_value_info *values;
+};
+
+struct uac3_badd_profile {
+	int subclass;
+	const char *name;
+	int c_chmask;
+	int p_chmask;
+	int st_chmask;
+};
+
+struct snd_us16x08_eq_store {
+	u8 val[256];
+};
+
+struct snd_us16x08_comp_store {
+	u8 val[96];
+};
+
+struct snd_us16x08_meter_store {
+	int meter_level[16];
+	int master_level[2];
+	int comp_index;
+	int comp_active_index;
+	int comp_level[16];
+	struct snd_us16x08_comp_store *comp_store;
+};
+
+struct snd_us16x08_control_params {
+	const struct snd_kcontrol_new *kcontrol_new;
+	int control_id;
+	int type;
+	int num_channels;
+	const char *name;
+	int default_val;
+};
+
+enum {
+	UAC3_PD_STATE_D0 = 0,
+	UAC3_PD_STATE_D1 = 1,
+	UAC3_PD_STATE_D2 = 2,
+};
+
+struct s1810c_ctl_packet {
+	u32 a;
+	u32 b;
+	u32 fixed1;
+	u32 fixed2;
+	u32 c;
+	u32 d;
+	u32 e;
+};
+
+struct s1810c_state_packet {
+	u32 fields[63];
+};
+
+struct s1810_mixer_state {
+	uint16_t seqnum;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+};
+
+struct uac3_power_domain_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bPowerDomainID;
+	__le16 waRecoveryTime1;
+	__le16 waRecoveryTime2;
+	__u8 bNrEntities;
+	__u8 baEntityID[0];
+} __attribute__((packed));
+
+struct uac1_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bDelay;
+	__le16 wFormatTag;
+} __attribute__((packed));
+
+struct uac_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct uac2_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bmControls;
+	__u8 bFormatType;
+	__le32 bmFormats;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac2_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+};
+
+struct uac3_hc_descriptor_header {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+};
+
+struct uac3_cluster_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+} __attribute__((packed));
+
+struct uac3_cluster_information_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+	__u8 bChPurpose;
+	__u8 bChRelationship;
+	__u8 bChGroupID;
+};
+
+struct uac3_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le32 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct usb_ms_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdMSC;
+	__le16 wTotalLength;
+} __attribute__((packed));
+
+struct usb_midi_in_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 iJack;
+};
+
+struct usb_midi_source_pin {
+	__u8 baSourceID;
+	__u8 baSourcePin;
+};
+
+struct usb_midi_out_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 bNrInputPins;
+	struct usb_midi_source_pin pins[0];
+};
+
+struct usb_ms_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bNumEmbMIDIJack;
+	__u8 baAssocJackID[0];
+};
+
+enum {
+	EMU_QUIRK_SR_44100HZ = 0,
+	EMU_QUIRK_SR_48000HZ = 1,
+	EMU_QUIRK_SR_88200HZ = 2,
+	EMU_QUIRK_SR_96000HZ = 3,
+	EMU_QUIRK_SR_176400HZ = 4,
+	EMU_QUIRK_SR_192000HZ = 5,
+};
+
+struct usb_audio_quirk_flags_table {
+	u32 id;
+	u32 flags;
+};
+
+typedef int (*quirk_func_t)(struct snd_usb_audio *, struct usb_interface *, struct usb_driver *, const struct snd_usb_audio_quirk *);
+
+struct usb_desc_validator {
+	unsigned char protocol;
+	unsigned char type;
+	bool (*func)(const void *, const struct usb_desc_validator *);
+	size_t size;
+};
+
+struct snd_seq_addr {
+	unsigned char client;
+	unsigned char port;
+};
+
+struct snd_seq_port_info {
+	struct snd_seq_addr addr;
+	char name[64];
+	unsigned int capability;
+	unsigned int type;
+	int midi_channels;
+	int midi_voices;
+	int synth_voices;
+	int read_use;
+	int write_use;
+	void *kernel;
+	unsigned int flags;
+	unsigned char time_queue;
+	char reserved[59];
+};
+
+struct snd_usb_midi_in_endpoint;
+
+struct snd_usb_midi_out_endpoint;
+
+struct usb_protocol_ops {
+	void (*input)(struct snd_usb_midi_in_endpoint *, uint8_t *, int);
+	void (*output)(struct snd_usb_midi_out_endpoint *, struct urb *);
+	void (*output_packet)(struct urb *, uint8_t, uint8_t, uint8_t, uint8_t);
+	void (*init_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+	void (*finish_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+};
+
+struct usbmidi_in_port {
+	struct snd_rawmidi_substream *substream;
+	u8 running_status_length;
+};
+
+struct snd_usb_midi;
+
+struct snd_usb_midi_in_endpoint {
+	struct snd_usb_midi *umidi;
+	struct urb *urbs[7];
+	struct usbmidi_in_port ports[16];
+	u8 seen_f5;
+	bool in_sysex;
+	u8 last_cin;
+	u8 error_resubmit;
+	int current_port;
+};
+
+struct out_urb_context {
+	struct urb *urb;
+	struct snd_usb_midi_out_endpoint *ep;
+};
+
+struct usbmidi_out_port {
+	struct snd_usb_midi_out_endpoint *ep;
+	struct snd_rawmidi_substream *substream;
+	int active;
+	uint8_t cable;
+	uint8_t state;
+	uint8_t data[2];
+};
+
+struct snd_usb_midi_out_endpoint {
+	struct snd_usb_midi *umidi;
+	struct out_urb_context urbs[7];
+	unsigned int active_urbs;
+	unsigned int drain_urbs;
+	int max_transfer;
+	struct work_struct work;
+	unsigned int next_urb;
+	spinlock_t buffer_lock;
+	struct usbmidi_out_port ports[16];
+	int current_port;
+	wait_queue_head_t drain_wait;
+};
+
+struct snd_usb_midi_endpoint {
+	struct snd_usb_midi_out_endpoint *out;
+	struct snd_usb_midi_in_endpoint *in;
+};
+
+struct snd_usb_midi {
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *iface;
+	const struct snd_usb_audio_quirk *quirk;
+	struct snd_rawmidi *rmidi;
+	const struct usb_protocol_ops *usb_protocol_ops;
+	struct list_head list;
+	struct timer_list error_timer;
+	spinlock_t disc_lock;
+	struct rw_semaphore disc_rwsem;
+	struct mutex mutex;
+	u32 usb_id;
+	int next_midi_device;
+	struct snd_usb_midi_endpoint endpoints[2];
+	long unsigned int input_triggered;
+	unsigned int opened[2];
+	unsigned char disconnected;
+	unsigned char input_running;
+	struct snd_kcontrol *roland_load_ctl;
+};
+
+struct port_info {
+	u32 id;
+	short int port;
+	short int voices;
+	const char *name;
+	unsigned int seq_flags;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct inet_bind2_bucket;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	struct inet_bind2_bucket *icsk_bind2_hash;
+	long unsigned int icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		long unsigned int timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 icsk_ca_priv[13];
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(const struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	bool drop_req;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_md5sig_key;
+
+struct tcp_fastopen_cookie;
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
+	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
+	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct tcp_sock_af_ops;
+
+struct tcp_md5sig_info;
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 cwnd_usage_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u8 bpf_chg_cc_inprogress: 1;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 plb_rehash;
+	u32 mtu_info;
+	bool is_mptcp;
+	const struct tcp_sock_af_ops *af_specific;
+	struct tcp_md5sig_info *md5sig_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock *fastopen_rsk;
+	struct saved_syn *saved_syn;
+};
+
+struct tcp_sock_af_ops {
+	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
+	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
+	int (*md5_parse)(struct sock *, int, sockptr_t, int);
+};
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long int tv_nsec;
+};
+
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char *ifcu_buf;
+		struct ifreq *ifcu_req;
+	} ifc_ifcu;
+};
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	short unsigned int base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_if_settings {
+	unsigned int type;
+	unsigned int size;
+	compat_uptr_t ifs_ifsu;
+};
+
+struct compat_ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short int ifru_flags;
+		compat_int_t ifru_ivalue;
+		compat_int_t ifru_mtu;
+		struct compat_ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		compat_caddr_t ifru_data;
+		struct compat_if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+struct iw_param {
+	__s32 value;
+	__u8 fixed;
+	__u8 disabled;
+	__u16 flags;
+};
+
+struct iw_point {
+	void *pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iw_freq {
+	__s32 m;
+	__s16 e;
+	__u8 i;
+	__u8 flags;
+};
+
+struct iw_quality {
+	__u8 qual;
+	__u8 level;
+	__u8 noise;
+	__u8 updated;
+};
+
+struct iw_discarded {
+	__u32 nwid;
+	__u32 code;
+	__u32 fragment;
+	__u32 retries;
+	__u32 misc;
+};
+
+struct iw_missed {
+	__u32 beacon;
+};
+
+struct iw_statistics {
+	__u16 status;
+	struct iw_quality qual;
+	struct iw_discarded discard;
+	struct iw_missed miss;
+};
+
+union iwreq_data {
+	char name[16];
+	struct iw_point essid;
+	struct iw_param nwid;
+	struct iw_freq freq;
+	struct iw_param sens;
+	struct iw_param bitrate;
+	struct iw_param txpower;
+	struct iw_param rts;
+	struct iw_param frag;
+	__u32 mode;
+	struct iw_param retry;
+	struct iw_point encoding;
+	struct iw_param power;
+	struct iw_quality qual;
+	struct sockaddr ap_addr;
+	struct sockaddr addr;
+	struct iw_param param;
+	struct iw_point data;
+};
+
+struct iw_priv_args {
+	__u32 cmd;
+	__u16 set_args;
+	__u16 get_args;
+	char name[16];
+};
+
+struct compat_mmsghdr {
+	struct compat_msghdr msg_hdr;
+	compat_uint_t msg_len;
+};
+
+struct iw_request_info {
+	__u16 cmd;
+	__u16 flags;
+};
+
+struct iw_spy_data {
+	int spy_number;
+	u_char spy_address[48];
+	struct iw_quality spy_stat[8];
+	struct iw_quality spy_thr_low;
+	struct iw_quality spy_thr_high;
+	u_char spy_thr_under[8];
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct net_bridge;
+
+struct used_address {
+	struct __kernel_sockaddr_storage name;
+	unsigned int name_len;
+};
+
+struct linger {
+	int l_onoff;
+	int l_linger;
+};
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct so_timestamping {
+	int flags;
+	int bind_phc;
+};
+
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u32 tsflags;
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	short unsigned int fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct inet_bind2_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	short unsigned int port;
+	short unsigned int family;
+	union {
+		struct in6_addr v6_rcv_saddr;
+		__be32 rcv_saddr;
+	};
+	struct hlist_node node;
+	struct hlist_head owners;
+	struct hlist_head deathrow;
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_md5sig_info {
+	struct hlist_head head;
+	struct callback_head rcu;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+struct cgroup_cls_state {
+	struct cgroup_subsys_state css;
+	u32 classid;
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_config;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct page_frag_1k {
+	void *va;
+	u16 offset;
+	bool pfmemalloc;
+};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	struct page_frag_1k page_small;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t);
+
+typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int);
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+struct gnet_estimator {
+	signed char interval;
+	unsigned char ewma_log;
+};
+
+struct net_rate_estimator {
+	struct gnet_stats_basic_sync *bstats;
+	spinlock_t *stats_lock;
+	bool running;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	u8 ewma_log;
+	u8 intvl_log;
+	seqcount_t seq;
+	u64 last_packets;
+	u64 last_bytes;
+	u64 avpps;
+	u64 avbps;
+	long unsigned int next_jiffies;
+	struct timer_list timer;
+	struct callback_head rcu;
+};
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+enum {
+	NETNSA_NONE = 0,
+	NETNSA_NSID = 1,
+	NETNSA_PID = 2,
+	NETNSA_FD = 3,
+	NETNSA_TARGET_NSID = 4,
+	NETNSA_CURRENT_NSID = 5,
+	__NETNSA_MAX = 6,
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+struct gen_cookie {
+	struct pcpu_gen_cookie *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+struct net_fill_args {
+	u32 portid;
+	u32 seq;
+	int flags;
+	int cmd;
+	int nsid;
+	bool add_ref;
+	int ref_nsid;
+};
+
+struct rtnl_net_dump_cb {
+	struct net *tgt_net;
+	struct net *ref_net;
+	struct sk_buff *skb;
+	struct net_fill_args fillargs;
+	int idx;
+	int s_idx;
+};
+
+typedef u16 u_int16_t;
+
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
+};
+
+struct flow_dissector_key_tags {
+	u32 flow_label;
+};
+
+struct flow_dissector_key_vlan {
+	union {
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
+	};
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
+};
+
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
+};
+
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
+};
+
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
+};
+
+struct flow_dissector_key_keyid {
+	__be32 keyid;
+};
+
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
+};
+
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_dissector_key_l2tpv3 {
+	__be32 session_id;
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	int: 32;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct nf_ct_event;
+
+struct nf_exp_event;
+
+struct nf_ct_event_notifier {
+	int (*ct_event)(unsigned int, const struct nf_ct_event *);
+	int (*exp_event)(unsigned int, const struct nf_exp_event *);
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct ib_device;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	union {
+		struct {
+			struct net_device *netdev;
+			int ifindex;
+			char ifname[16];
+		} type_eth;
+		struct {
+			struct ib_device *ibdev;
+		} type_ib;
+	};
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	u8 registered: 1;
+	u8 initialized: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+struct dsa_device_ops;
+
+struct dsa_switch_tree;
+
+struct dsa_switch;
+
+struct dsa_bridge;
+
+struct dsa_lag;
+
+struct dsa_netdevice_ops;
+
+struct dsa_port {
+	union {
+		struct net_device *master;
+		struct net_device *slave;
+	};
+	const struct dsa_device_ops *tag_ops;
+	struct dsa_switch_tree *dst;
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	struct dsa_switch *ds;
+	unsigned int index;
+	enum {
+		DSA_PORT_TYPE_UNUSED = 0,
+		DSA_PORT_TYPE_CPU = 1,
+		DSA_PORT_TYPE_DSA = 2,
+		DSA_PORT_TYPE_USER = 3,
+	} type;
+	const char *name;
+	struct dsa_port *cpu_dp;
+	u8 mac[6];
+	u8 stp_state;
+	u8 vlan_filtering: 1;
+	u8 learning: 1;
+	u8 lag_tx_enabled: 1;
+	u8 master_admin_up: 1;
+	u8 master_oper_up: 1;
+	u8 cpu_port_in_lag: 1;
+	u8 setup: 1;
+	struct device_node *dn;
+	unsigned int ageing_time;
+	struct dsa_bridge *bridge;
+	struct devlink_port devlink_port;
+	struct phylink *pl;
+	struct phylink_config pl_config;
+	struct dsa_lag *lag;
+	struct net_device *hsr_dev;
+	struct list_head list;
+	const struct ethtool_ops *orig_ethtool_ops;
+	const struct dsa_netdevice_ops *netdev_ops;
+	struct mutex addr_lists_lock;
+	struct list_head fdbs;
+	struct list_head mdbs;
+	struct mutex vlans_lock;
+	struct list_head vlans;
+};
+
+enum netdev_lag_tx_type {
+	NETDEV_LAG_TX_TYPE_UNKNOWN = 0,
+	NETDEV_LAG_TX_TYPE_RANDOM = 1,
+	NETDEV_LAG_TX_TYPE_BROADCAST = 2,
+	NETDEV_LAG_TX_TYPE_ROUNDROBIN = 3,
+	NETDEV_LAG_TX_TYPE_ACTIVEBACKUP = 4,
+	NETDEV_LAG_TX_TYPE_HASH = 5,
+};
+
+enum netdev_lag_hash {
+	NETDEV_LAG_HASH_NONE = 0,
+	NETDEV_LAG_HASH_L2 = 1,
+	NETDEV_LAG_HASH_L34 = 2,
+	NETDEV_LAG_HASH_L23 = 3,
+	NETDEV_LAG_HASH_E23 = 4,
+	NETDEV_LAG_HASH_E34 = 5,
+	NETDEV_LAG_HASH_VLAN_SRCMAC = 6,
+	NETDEV_LAG_HASH_UNKNOWN = 7,
+};
+
+struct netdev_lag_upper_info {
+	enum netdev_lag_tx_type tx_type;
+	enum netdev_lag_hash hash_type;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
+};
+
+enum {
+	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
+	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_RX_QUEUE_MAPPING = 19,
+	FLOW_ACTION_WAKE = 20,
+	FLOW_ACTION_QUEUE = 21,
+	FLOW_ACTION_SAMPLE = 22,
+	FLOW_ACTION_POLICE = 23,
+	FLOW_ACTION_CT = 24,
+	FLOW_ACTION_CT_METADATA = 25,
+	FLOW_ACTION_MPLS_PUSH = 26,
+	FLOW_ACTION_MPLS_POP = 27,
+	FLOW_ACTION_MPLS_MANGLE = 28,
+	FLOW_ACTION_GATE = 29,
+	FLOW_ACTION_PPPOE_PUSH = 30,
+	FLOW_ACTION_JUMP = 31,
+	FLOW_ACTION_PIPE = 32,
+	FLOW_ACTION_VLAN_PUSH_ETH = 33,
+	FLOW_ACTION_VLAN_POP_ETH = 34,
+	FLOW_ACTION_CONTINUE = 35,
+	NUM_FLOW_ACTIONS = 36,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+typedef void (*action_destr)(void *);
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct psample_group;
+
+struct nf_flowtable;
+
+struct action_gate_entry;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u16 rx_queue;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			long unsigned int cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *cookie;
+};
+
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+enum flow_cls_command {
+	FLOW_CLS_REPLACE = 0,
+	FLOW_CLS_DESTROY = 1,
+	FLOW_CLS_STATS = 2,
+	FLOW_CLS_TMPLT_CREATE = 3,
+	FLOW_CLS_TMPLT_DESTROY = 4,
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct flow_cls_offload {
+	struct flow_cls_common_offload common;
+	enum flow_cls_command command;
+	long unsigned int cookie;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	u32 classid;
+};
+
+struct dsa_chip_data {
+	struct device *host_dev;
+	int sw_addr;
+	struct device *netdev[12];
+	int eeprom_len;
+	struct device_node *of_node;
+	char *port_names[12];
+	struct device_node *port_dn[12];
+	s8 rtable[4];
+};
+
+struct dsa_platform_data {
+	struct device *netdev;
+	struct net_device *of_netdev;
+	int nr_chips;
+	struct dsa_chip_data *chip;
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+	u32 tx_priority;
+	u32 tx_weight;
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+struct devlink_info_req;
+
+struct switchdev_mst_state {
+	u16 msti;
+	u8 state;
+};
+
+struct switchdev_brport_flags {
+	long unsigned int val;
+	long unsigned int mask;
+};
+
+struct switchdev_vlan_msti {
+	u16 vid;
+	u16 msti;
+};
+
+enum switchdev_obj_id {
+	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
+	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
+	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
+	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
+	SWITCHDEV_OBJ_ID_MRP = 4,
+	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
+	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
+	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
+	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
+	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
+	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
+};
+
+struct switchdev_obj {
+	struct list_head list;
+	struct net_device *orig_dev;
+	enum switchdev_obj_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+};
+
+struct switchdev_obj_port_vlan {
+	struct switchdev_obj obj;
+	u16 flags;
+	u16 vid;
+	bool changed;
+};
+
+struct switchdev_obj_port_mdb {
+	struct switchdev_obj obj;
+	unsigned char addr[6];
+	u16 vid;
+};
+
+struct switchdev_obj_mrp {
+	struct switchdev_obj obj;
+	struct net_device *p_port;
+	struct net_device *s_port;
+	u32 ring_id;
+	u16 prio;
+};
+
+struct switchdev_obj_ring_role_mrp {
+	struct switchdev_obj obj;
+	u8 ring_role;
+	u32 ring_id;
+	u8 sw_backup;
+};
+
+enum dsa_tag_protocol {
+	DSA_TAG_PROTO_NONE = 0,
+	DSA_TAG_PROTO_BRCM = 1,
+	DSA_TAG_PROTO_BRCM_LEGACY = 22,
+	DSA_TAG_PROTO_BRCM_PREPEND = 2,
+	DSA_TAG_PROTO_DSA = 3,
+	DSA_TAG_PROTO_EDSA = 4,
+	DSA_TAG_PROTO_GSWIP = 5,
+	DSA_TAG_PROTO_KSZ9477 = 6,
+	DSA_TAG_PROTO_KSZ9893 = 7,
+	DSA_TAG_PROTO_LAN9303 = 8,
+	DSA_TAG_PROTO_MTK = 9,
+	DSA_TAG_PROTO_QCA = 10,
+	DSA_TAG_PROTO_TRAILER = 11,
+	DSA_TAG_PROTO_8021Q = 12,
+	DSA_TAG_PROTO_SJA1105 = 13,
+	DSA_TAG_PROTO_KSZ8795 = 14,
+	DSA_TAG_PROTO_OCELOT = 15,
+	DSA_TAG_PROTO_AR9331 = 16,
+	DSA_TAG_PROTO_RTL4_A = 17,
+	DSA_TAG_PROTO_HELLCREEK = 18,
+	DSA_TAG_PROTO_XRS700X = 19,
+	DSA_TAG_PROTO_OCELOT_8021Q = 20,
+	DSA_TAG_PROTO_SEVILLE = 21,
+	DSA_TAG_PROTO_SJA1110 = 23,
+	DSA_TAG_PROTO_RTL8_4 = 24,
+	DSA_TAG_PROTO_RTL8_4T = 25,
+	DSA_TAG_PROTO_RZN1_A5PSW = 26,
+	DSA_TAG_PROTO_LAN937X = 27,
+};
+
+struct dsa_device_ops {
+	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
+	int (*connect)(struct dsa_switch *);
+	void (*disconnect)(struct dsa_switch *);
+	unsigned int needed_headroom;
+	unsigned int needed_tailroom;
+	const char *name;
+	enum dsa_tag_protocol proto;
+	bool promisc_on_master;
+};
+
+struct dsa_8021q_context;
+
+struct dsa_switch_ops;
+
+struct dsa_switch {
+	struct device *dev;
+	struct dsa_switch_tree *dst;
+	unsigned int index;
+	u32 setup: 1;
+	u32 vlan_filtering_is_global: 1;
+	u32 needs_standalone_vlan_filtering: 1;
+	u32 configure_vlan_while_not_filtering: 1;
+	u32 untag_bridge_pvid: 1;
+	u32 assisted_learning_on_cpu_port: 1;
+	u32 vlan_filtering: 1;
+	u32 mtu_enforcement_ingress: 1;
+	u32 fdb_isolation: 1;
+	struct notifier_block nb;
+	void *priv;
+	void *tagger_data;
+	struct dsa_chip_data *cd;
+	const struct dsa_switch_ops *ops;
+	u32 phys_mii_mask;
+	struct mii_bus *slave_mii_bus;
+	unsigned int ageing_time_min;
+	unsigned int ageing_time_max;
+	struct dsa_8021q_context *tag_8021q_ctx;
+	struct devlink *devlink;
+	unsigned int num_tx_queues;
+	unsigned int num_lag_ids;
+	unsigned int max_num_bridges;
+	unsigned int num_ports;
+};
+
+struct dsa_netdevice_ops {
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+};
+
+struct dsa_lag {
+	struct net_device *dev;
+	unsigned int id;
+	struct mutex fdb_lock;
+	struct list_head fdbs;
+	refcount_t refcount;
+};
+
+struct dsa_switch_tree {
+	struct list_head list;
+	struct list_head ports;
+	struct raw_notifier_head nh;
+	unsigned int index;
+	struct kref refcount;
+	struct dsa_lag **lags;
+	const struct dsa_device_ops *tag_ops;
+	enum dsa_tag_protocol default_proto;
+	bool setup;
+	struct dsa_platform_data *pd;
+	struct list_head rtable;
+	unsigned int lags_len;
+	unsigned int last_switch;
+};
+
+struct dsa_mall_mirror_tc_entry {
+	u8 to_local_port;
+	bool ingress;
+};
+
+struct dsa_mall_policer_tc_entry {
+	u32 burst;
+	u64 rate_bytes_per_sec;
+};
+
+struct dsa_bridge {
+	struct net_device *dev;
+	unsigned int num;
+	bool tx_fwd_offload;
+	refcount_t refcount;
+};
+
+enum dsa_db_type {
+	DSA_DB_PORT = 0,
+	DSA_DB_LAG = 1,
+	DSA_DB_BRIDGE = 2,
+};
+
+struct dsa_db {
+	enum dsa_db_type type;
+	union {
+		const struct dsa_port *dp;
+		struct dsa_lag lag;
+		struct dsa_bridge bridge;
+	};
+};
+
+struct fixed_phy_status;
+
+typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
+
+struct dsa_switch_ops {
+	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
+	int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*port_change_master)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *);
+	int (*setup)(struct dsa_switch *);
+	void (*teardown)(struct dsa_switch *);
+	int (*port_setup)(struct dsa_switch *, int);
+	void (*port_teardown)(struct dsa_switch *, int);
+	u32 (*get_phy_flags)(struct dsa_switch *, int);
+	int (*phy_read)(struct dsa_switch *, int, int);
+	int (*phy_write)(struct dsa_switch *, int, int, u16);
+	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
+	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
+	void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
+	struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
+	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
+	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
+	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
+	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
+	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
+	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
+	int (*get_sset_count)(struct dsa_switch *, int, int);
+	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
+	void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
+	void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *);
+	void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
+	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
+	int (*port_get_default_prio)(struct dsa_switch *, int);
+	int (*port_set_default_prio)(struct dsa_switch *, int, u8);
+	int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
+	int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*suspend)(struct dsa_switch *);
+	int (*resume)(struct dsa_switch *);
+	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
+	void (*port_disable)(struct dsa_switch *, int);
+	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_eeprom_len)(struct dsa_switch *);
+	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*get_regs_len)(struct dsa_switch *, int);
+	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
+	int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
+	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
+	int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
+	void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
+	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
+	int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
+	void (*port_fast_age)(struct dsa_switch *, int);
+	int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
+	int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
+	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
+	int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
+	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
+	int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
+	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
+	int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
+	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
+	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
+	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
+	void (*port_policer_del)(struct dsa_switch *, int);
+	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
+	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
+	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
+	int (*crosschip_lag_change)(struct dsa_switch *, int, int);
+	int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
+	int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
+	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
+	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
+	void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
+	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
+	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
+	int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
+	int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*port_change_mtu)(struct dsa_switch *, int, int);
+	int (*port_max_mtu)(struct dsa_switch *, int);
+	int (*port_lag_change)(struct dsa_switch *, int);
+	int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
+	int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
+	int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
+	int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
+	int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
+	int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
+	void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+struct gre_full_hdr {
+	struct gre_base_hdr fixed_header;
+	__be16 csum;
+	__be16 reserved1;
+	__be32 key;
+	__be32 seq;
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+enum sctp_msg_flags {
+	MSG_NOTIFICATION = 32768,
+};
+
+enum dccp_state {
+	DCCP_OPEN = 1,
+	DCCP_REQUESTING = 2,
+	DCCP_LISTEN = 10,
+	DCCP_RESPOND = 3,
+	DCCP_ACTIVE_CLOSEREQ = 4,
+	DCCP_PASSIVE_CLOSE = 8,
+	DCCP_CLOSING = 11,
+	DCCP_TIME_WAIT = 6,
+	DCCP_CLOSED = 7,
+	DCCP_NEW_SYN_RECV = 12,
+	DCCP_PARTOPEN = 13,
+	DCCP_PASSIVE_CLOSEREQ = 14,
+	DCCP_MAX_STATES = 15,
+};
+
+enum l2tp_debug_flags {
+	L2TP_MSG_DEBUG = 1,
+	L2TP_MSG_CONTROL = 2,
+	L2TP_MSG_SEQ = 4,
+	L2TP_MSG_DATA = 8,
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
+};
+
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
+};
+
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
+};
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_udp {
+	long unsigned int stream_ts;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_zone zone;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	long unsigned int status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {	} __nfct_init_offset;
+	struct nf_conn *master;
+	u_int32_t mark;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+};
+
+struct nf_conntrack_tuple_mask {
+	struct {
+		union nf_inet_addr u3;
+		union nf_conntrack_man_proto u;
+	} src;
+};
+
+struct nf_ct_ext {
+	u8 offset[9];
+	u8 len;
+	unsigned int gen_id;
+	char data[0];
+};
+
+struct nf_conntrack_helper;
+
+struct nf_conntrack_expect {
+	struct hlist_node lnode;
+	struct hlist_node hnode;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_tuple_mask mask;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+	struct nf_conntrack_helper *helper;
+	struct nf_conn *master;
+	struct timer_list timeout;
+	refcount_t use;
+	unsigned int flags;
+	unsigned int class;
+	union nf_inet_addr saved_addr;
+	union nf_conntrack_man_proto saved_proto;
+	enum ip_conntrack_dir dir;
+	struct callback_head rcu;
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_ECACHE = 4,
+	NF_CT_EXT_TSTAMP = 5,
+	NF_CT_EXT_TIMEOUT = 6,
+	NF_CT_EXT_LABELS = 7,
+	NF_CT_EXT_SYNPROXY = 8,
+	NF_CT_EXT_NUM = 9,
+};
+
+struct nf_ct_event {
+	struct nf_conn *ct;
+	u32 portid;
+	int report;
+};
+
+struct nf_exp_event {
+	struct nf_conntrack_expect *exp;
+	u32 portid;
+	int report;
+};
+
+struct nf_conn_labels {
+	long unsigned int bits[2];
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	IFLA_BRPORT_MAB = 40,
+	__IFLA_BRPORT_MAX = 41,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[63];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[41];
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
+};
+
+struct ifbond {
+	__s32 bond_mode;
+	__s32 num_slaves;
+	__s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct ifslave {
+	__s32 slave_id;
+	char slave_name[16];
+	__s8 link;
+	__s8 state;
+	__u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+enum {
+	NAPIF_STATE_SCHED = 1,
+	NAPIF_STATE_MISSED = 2,
+	NAPIF_STATE_DISABLE = 4,
+	NAPIF_STATE_NPSVC = 8,
+	NAPIF_STATE_LISTED = 16,
+	NAPIF_STATE_NO_BUSY_POLL = 32,
+	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
+};
+
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
+};
+
+struct bpf_xdp_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	int flags;
+};
+
+struct netdev_net_notifier {
+	struct list_head list;
+	struct notifier_block *nb;
+};
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changelowerstate_info {
+	struct netdev_notifier_info info;
+	void *lower_state_info;
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
+
+enum {
+	NESTED_SYNC_IMM_BIT = 0,
+	NESTED_SYNC_TODO_BIT = 1,
+};
+
+struct netdev_nested_priv {
+	unsigned char flags;
+	void *data;
+};
+
+struct netdev_bonding_info {
+	ifslave slave;
+	ifbond master;
+};
+
+struct netdev_notifier_bonding_info {
+	struct netdev_notifier_info info;
+	struct netdev_bonding_info bonding_info;
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	long unsigned int cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct dev_kfree_skb_cb {
+	enum skb_free_reason reason;
+};
+
+struct netdev_adjacent {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	bool master;
+	bool ignore;
+	u16 ref_nr;
+	void *private;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neighbour_cb {
+	long unsigned int sched_next;
+	unsigned int flags;
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+enum {
+	IF_LINK_MODE_DEFAULT = 0,
+	IF_LINK_MODE_DORMANT = 1,
+	IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+	LW_URGENT = 0,
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
+struct tso_t {
+	int next_frag_idx;
+	int size;
+	void *data;
+	u16 ip_id;
+	u8 tlen;
+	bool ipv6;
+	u32 tcp_seq;
+};
+
+enum {
+	BPF_F_RECOMPUTE_CSUM = 1,
+	BPF_F_INVALIDATE_HASH = 2,
+};
+
+enum {
+	BPF_F_HDR_FIELD_MASK = 15,
+};
+
+enum {
+	BPF_F_PSEUDO_HDR = 16,
+	BPF_F_MARK_MANGLED_0 = 32,
+	BPF_F_MARK_ENFORCE = 64,
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+enum {
+	BPF_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+	BPF_F_ZERO_CSUM_TX = 2,
+	BPF_F_DONT_FRAGMENT = 4,
+	BPF_F_SEQ_NUMBER = 8,
+};
+
+enum {
+	BPF_F_TUNINFO_FLAGS = 16,
+};
+
+enum {
+	BPF_CSUM_LEVEL_QUERY = 0,
+	BPF_CSUM_LEVEL_INC = 1,
+	BPF_CSUM_LEVEL_DEC = 2,
+	BPF_CSUM_LEVEL_RESET = 3,
+};
+
+enum {
+	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
+	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
+	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
+	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
+};
+
+enum {
+	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
+	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
+};
+
+enum {
+	BPF_SK_LOOKUP_F_REPLACE = 1,
+	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+enum bpf_adj_room_mode {
+	BPF_ADJ_ROOM_NET = 0,
+	BPF_ADJ_ROOM_MAC = 1,
+};
+
+enum bpf_hdr_start_off {
+	BPF_HDR_START_MAC = 0,
+	BPF_HDR_START_NET = 1,
+};
+
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
+struct bpf_tunnel_key {
+	__u32 tunnel_id;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+	__u8 tunnel_tos;
+	__u8 tunnel_ttl;
+	union {
+		__u16 tunnel_ext;
+		__be16 tunnel_flags;
+	};
+	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
+};
+
+struct bpf_xfrm_state {
+	__u32 reqid;
+	__u32 spi;
+	__u16 family;
+	__u16 ext;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+};
+
+struct bpf_tcp_sock {
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	__u32 dsack_dups;
+	__u32 delivered;
+	__u32 delivered_ce;
+	__u32 icsk_retransmits;
+};
+
+struct bpf_sock_tuple {
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+			__be16 sport;
+			__be16 dport;
+		} ipv4;
+		struct {
+			__be32 saddr[4];
+			__be32 daddr[4];
+			__be16 sport;
+			__be16 dport;
+		} ipv6;
+	};
+};
+
+struct bpf_xdp_sock {
+	__u32 queue_id;
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum {
+	TCP_BPF_IW = 1001,
+	TCP_BPF_SNDCWND_CLAMP = 1002,
+	TCP_BPF_DELACK_MAX = 1003,
+	TCP_BPF_RTO_MIN = 1004,
+	TCP_BPF_SYN = 1005,
+	TCP_BPF_SYN_IP = 1006,
+	TCP_BPF_SYN_MAC = 1007,
+};
+
+enum {
+	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+enum {
+	BPF_FIB_LOOKUP_DIRECT = 1,
+	BPF_FIB_LOOKUP_OUTPUT = 2,
+};
+
+enum {
+	BPF_FIB_LKUP_RET_SUCCESS = 0,
+	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
+	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
+	BPF_FIB_LKUP_RET_PROHIBIT = 3,
+	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
+	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
+	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
+	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
+	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
+};
+
+struct bpf_fib_lookup {
+	__u8 family;
+	__u8 l4_protocol;
+	__be16 sport;
+	__be16 dport;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
+	__u32 ifindex;
+	union {
+		__u8 tos;
+		__be32 flowinfo;
+		__u32 rt_metric;
+	};
+	union {
+		__be32 ipv4_src;
+		__u32 ipv6_src[4];
+	};
+	union {
+		__be32 ipv4_dst;
+		__u32 ipv6_dst[4];
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__u8 smac[6];
+	__u8 dmac[6];
+};
+
+struct bpf_redir_neigh {
+	__u32 nh_family;
+	union {
+		__be32 ipv4_nh;
+		__u32 ipv6_nh[4];
+	};
+};
+
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr *tun_src;
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+	struct inet_bind2_bucket *tw_tb2;
+	struct hlist_node tw_bind2_node;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+	struct tcp_md5sig_key *tw_md5_key;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+	int (*ipv6_setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*ipv6_getsockopt)(struct sock *, int, int, sockptr_t, sockptr_t);
+};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
+};
+
+struct strp_msg {
+	int full_len;
+	int offset;
+};
+
+struct _strp_msg {
+	struct strp_msg strp;
+	int accum_len;
+};
+
+struct tls_msg {
+	u8 control;
+};
+
+struct sk_skb_cb {
+	unsigned char data[20];
+	unsigned char pad[4];
+	struct _strp_msg strp;
+	struct tls_msg tls;
+	u64 temp_reg;
+};
+
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
+
+struct xsk_queue;
+
+struct xdp_sock {
+	struct sock sk;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+	long: 64;
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 msg_ready: 1;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	spinlock_t decrypt_compl_lock;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
+	union {
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
+	};
+};
+
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool in_tcp_sendpages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	long unsigned int flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
+	struct list_head list;
+	refcount_t refcount;
+	struct callback_head rcu;
+};
+
+typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
+
+struct bpf_scratchpad {
+	union {
+		__be32 diff[128];
+		u8 buff[512];
+	};
+};
+
+typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
+
+typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
+
+typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
+
+typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
+
+enum {
+	BPF_F_NEIGH = 2,
+	BPF_F_PEER = 4,
+	BPF_F_NEXTHOP = 8,
+};
+
+typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_get_cgroup_classid_curr)();
+
+typedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
+
+typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
+
+typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
+
+typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
+typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
+
+typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
+
+typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
+typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
+
+typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_release)(struct sock *);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *, struct tcphdr *);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *);
+
+typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct mptcp_sock;
+
+struct bpf_cpu_map_entry;
+
+struct bpf_dtab_netdev;
+
+struct unix_sock;
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_arp {
+	struct flow_dissector_key_arp *key;
+	struct flow_dissector_key_arp *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+struct flow_match_l2tpv3 {
+	struct flow_dissector_key_l2tpv3 *key;
+	struct flow_dissector_key_l2tpv3 *mask;
+};
+
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
+struct xdp_attachment_info {
+	struct bpf_prog *prog;
+	u32 flags;
+};
+
+struct xdp_buff_xsk;
+
+struct xdp_desc;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+};
+
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+struct fib_rule_uid_range {
+	__u32 start;
+	__u32 end;
+};
+
+enum {
+	FRA_UNSPEC = 0,
+	FRA_DST = 1,
+	FRA_SRC = 2,
+	FRA_IIFNAME = 3,
+	FRA_GOTO = 4,
+	FRA_UNUSED2 = 5,
+	FRA_PRIORITY = 6,
+	FRA_UNUSED3 = 7,
+	FRA_UNUSED4 = 8,
+	FRA_UNUSED5 = 9,
+	FRA_FWMARK = 10,
+	FRA_FLOW = 11,
+	FRA_TUN_ID = 12,
+	FRA_SUPPRESS_IFGROUP = 13,
+	FRA_SUPPRESS_PREFIXLEN = 14,
+	FRA_TABLE = 15,
+	FRA_FWMASK = 16,
+	FRA_OIFNAME = 17,
+	FRA_PAD = 18,
+	FRA_L3MDEV = 19,
+	FRA_UID_RANGE = 20,
+	FRA_PROTOCOL = 21,
+	FRA_IP_PROTO = 22,
+	FRA_SPORT_RANGE = 23,
+	FRA_DPORT_RANGE = 24,
+	__FRA_MAX = 25,
+};
+
+enum {
+	FR_ACT_UNSPEC = 0,
+	FR_ACT_TO_TBL = 1,
+	FR_ACT_GOTO = 2,
+	FR_ACT_NOP = 3,
+	FR_ACT_RES3 = 4,
+	FR_ACT_RES4 = 5,
+	FR_ACT_BLACKHOLE = 6,
+	FR_ACT_UNREACHABLE = 7,
+	FR_ACT_PROHIBIT = 8,
+	__FR_ACT_MAX = 9,
+};
+
+struct fib_rule_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_rule *rule;
+};
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+struct update_classid_context {
+	u32 classid;
+	unsigned int batch;
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	short unsigned int protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long int sysctl_mem[3];
+	long int allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	long unsigned int txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+typedef __u16 port_id;
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	long unsigned int delay_time;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge;
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	long unsigned int multicast_last_member_interval;
+	long unsigned int multicast_membership_interval;
+	long unsigned int multicast_querier_interval;
+	long unsigned int multicast_query_interval;
+	long unsigned int multicast_query_response_interval;
+	long unsigned int multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct net_bridge_vlan_group;
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	long unsigned int options;
+	__be16 vlan_proto;
+	u16 default_pvid;
+	struct net_bridge_vlan_group *vlgrp;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	union {
+		struct rtable fake_rtable;
+		struct rt6_info fake_rt6_info;
+	};
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	long unsigned int max_age;
+	long unsigned int hello_time;
+	long unsigned int forward_delay;
+	long unsigned int ageing_time;
+	long unsigned int bridge_max_age;
+	long unsigned int bridge_hello_time;
+	long unsigned int bridge_forward_delay;
+	long unsigned int bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	int last_hwdom;
+	long unsigned int busy_hwdoms;
+	struct hlist_head fdb_list;
+	struct hlist_head mrp_list;
+	struct hlist_head mep_list;
+};
+
+struct net_bridge_port;
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+};
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	long unsigned int flags;
+	struct net_bridge_vlan_group *vlgrp;
+	struct net_bridge_port *backup_port;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	long unsigned int designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	struct netpoll *np;
+	int hwdom;
+	int offload_count;
+	struct netdev_phys_item_id ppid;
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst *tunnel_dst;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+struct net_bridge_vlan_group {
+	struct rhashtable vlan_hash;
+	struct rhashtable tunnel_hash;
+	struct list_head vlan_list;
+	u16 num_vlans;
+	u16 pvid;
+	u8 pvid_state;
+};
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	long unsigned int flags;
+	long: 64;
+	long: 64;
+	long unsigned int updated;
+	long unsigned int used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	long unsigned int pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	long unsigned int confirmed;
+	long unsigned int updated;
+	long unsigned int used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+struct dst_cache_pcpu {
+	long unsigned int refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+struct gro_cell {
+	struct sk_buff_head napi_skbs;
+	struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
+	struct list_head list;
+	long unsigned int state;
+	int weight;
+	irq_poll_fn *poll;
+};
+
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+enum ib_uverbs_write_cmds {
+	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
+	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
+	IB_USER_VERBS_CMD_QUERY_PORT = 2,
+	IB_USER_VERBS_CMD_ALLOC_PD = 3,
+	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
+	IB_USER_VERBS_CMD_CREATE_AH = 5,
+	IB_USER_VERBS_CMD_MODIFY_AH = 6,
+	IB_USER_VERBS_CMD_QUERY_AH = 7,
+	IB_USER_VERBS_CMD_DESTROY_AH = 8,
+	IB_USER_VERBS_CMD_REG_MR = 9,
+	IB_USER_VERBS_CMD_REG_SMR = 10,
+	IB_USER_VERBS_CMD_REREG_MR = 11,
+	IB_USER_VERBS_CMD_QUERY_MR = 12,
+	IB_USER_VERBS_CMD_DEREG_MR = 13,
+	IB_USER_VERBS_CMD_ALLOC_MW = 14,
+	IB_USER_VERBS_CMD_BIND_MW = 15,
+	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
+	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
+	IB_USER_VERBS_CMD_CREATE_CQ = 18,
+	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
+	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
+	IB_USER_VERBS_CMD_POLL_CQ = 21,
+	IB_USER_VERBS_CMD_PEEK_CQ = 22,
+	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
+	IB_USER_VERBS_CMD_CREATE_QP = 24,
+	IB_USER_VERBS_CMD_QUERY_QP = 25,
+	IB_USER_VERBS_CMD_MODIFY_QP = 26,
+	IB_USER_VERBS_CMD_DESTROY_QP = 27,
+	IB_USER_VERBS_CMD_POST_SEND = 28,
+	IB_USER_VERBS_CMD_POST_RECV = 29,
+	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
+	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
+	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
+	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
+	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
+	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
+	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
+	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
+	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
+	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
+	IB_USER_VERBS_CMD_OPEN_QP = 40,
+};
+
+enum ib_uverbs_wc_opcode {
+	IB_UVERBS_WC_SEND = 0,
+	IB_UVERBS_WC_RDMA_WRITE = 1,
+	IB_UVERBS_WC_RDMA_READ = 2,
+	IB_UVERBS_WC_COMP_SWAP = 3,
+	IB_UVERBS_WC_FETCH_ADD = 4,
+	IB_UVERBS_WC_BIND_MW = 5,
+	IB_UVERBS_WC_LOCAL_INV = 6,
+	IB_UVERBS_WC_TSO = 7,
+	IB_UVERBS_WC_FLUSH = 8,
+	IB_UVERBS_WC_ATOMIC_WRITE = 9,
+};
+
+enum ib_uverbs_create_qp_mask {
+	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
+};
+
+enum ib_uverbs_wr_opcode {
+	IB_UVERBS_WR_RDMA_WRITE = 0,
+	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_UVERBS_WR_SEND = 2,
+	IB_UVERBS_WR_SEND_WITH_IMM = 3,
+	IB_UVERBS_WR_RDMA_READ = 4,
+	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_UVERBS_WR_LOCAL_INV = 7,
+	IB_UVERBS_WR_BIND_MW = 8,
+	IB_UVERBS_WR_SEND_WITH_INV = 9,
+	IB_UVERBS_WR_TSO = 10,
+	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
+	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_UVERBS_WR_FLUSH = 14,
+	IB_UVERBS_WR_ATOMIC_WRITE = 15,
+};
+
+enum ib_uverbs_device_cap_flags {
+	IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1,
+	IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2,
+	IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4,
+	IB_UVERBS_DEVICE_RAW_MULTI = 8,
+	IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16,
+	IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32,
+	IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64,
+	IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128,
+	IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256,
+	IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024,
+	IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048,
+	IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096,
+	IB_UVERBS_DEVICE_SRQ_RESIZE = 8192,
+	IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384,
+	IB_UVERBS_DEVICE_MEM_WINDOW = 131072,
+	IB_UVERBS_DEVICE_UD_IP_CSUM = 262144,
+	IB_UVERBS_DEVICE_XRC = 1048576,
+	IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216,
+	IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432,
+	IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864,
+	IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912,
+	IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 0,
+	IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 0,
+	IB_UVERBS_DEVICE_FLUSH_GLOBAL = 0,
+	IB_UVERBS_DEVICE_FLUSH_PERSISTENT = 0,
+	IB_UVERBS_DEVICE_ATOMIC_WRITE = 0,
+};
+
+enum ib_uverbs_raw_packet_caps {
+	IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+	IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+	IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+	IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
+};
+
+enum rdma_nl_counter_mode {
+	RDMA_COUNTER_MODE_NONE = 0,
+	RDMA_COUNTER_MODE_AUTO = 1,
+	RDMA_COUNTER_MODE_MANUAL = 2,
+	RDMA_COUNTER_MODE_MAX = 3,
+};
+
+enum rdma_nl_counter_mask {
+	RDMA_COUNTER_MASK_QP_TYPE = 1,
+	RDMA_COUNTER_MASK_PID = 2,
+};
+
+enum rdma_restrack_type {
+	RDMA_RESTRACK_PD = 0,
+	RDMA_RESTRACK_CQ = 1,
+	RDMA_RESTRACK_QP = 2,
+	RDMA_RESTRACK_CM_ID = 3,
+	RDMA_RESTRACK_MR = 4,
+	RDMA_RESTRACK_CTX = 5,
+	RDMA_RESTRACK_COUNTER = 6,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
+};
+
+struct rdma_restrack_entry {
+	bool valid;
+	u8 no_track: 1;
+	struct kref kref;
+	struct completion comp;
+	struct task_struct *task;
+	const char *kern_name;
+	enum rdma_restrack_type type;
+	bool user;
+	u32 id;
+};
+
+struct rdma_link_ops {
+	struct list_head list;
+	const char *type;
+	int (*newlink)(const char *, struct net_device *);
+};
+
+struct auto_mode_param {
+	int qp_type;
+};
+
+struct rdma_counter_mode {
+	enum rdma_nl_counter_mode mode;
+	enum rdma_nl_counter_mask mask;
+	struct auto_mode_param param;
+};
+
+struct rdma_hw_stats;
+
+struct rdma_port_counter {
+	struct rdma_counter_mode mode;
+	struct rdma_hw_stats *hstats;
+	unsigned int num_counters;
+	struct mutex lock;
+};
+
+struct rdma_stat_desc;
+
+struct rdma_hw_stats {
+	struct mutex lock;
+	long unsigned int timestamp;
+	long unsigned int lifespan;
+	const struct rdma_stat_desc *descs;
+	long unsigned int *is_disabled;
+	int num_counters;
+	u64 value[0];
+};
+
+struct rdma_counter {
+	struct rdma_restrack_entry res;
+	struct ib_device *device;
+	uint32_t id;
+	struct kref kref;
+	struct rdma_counter_mode mode;
+	struct mutex lock;
+	struct rdma_hw_stats *stats;
+	u32 port;
+};
+
+enum rdma_driver_id {
+	RDMA_DRIVER_UNKNOWN = 0,
+	RDMA_DRIVER_MLX5 = 1,
+	RDMA_DRIVER_MLX4 = 2,
+	RDMA_DRIVER_CXGB3 = 3,
+	RDMA_DRIVER_CXGB4 = 4,
+	RDMA_DRIVER_MTHCA = 5,
+	RDMA_DRIVER_BNXT_RE = 6,
+	RDMA_DRIVER_OCRDMA = 7,
+	RDMA_DRIVER_NES = 8,
+	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
+	RDMA_DRIVER_VMW_PVRDMA = 10,
+	RDMA_DRIVER_QEDR = 11,
+	RDMA_DRIVER_HNS = 12,
+	RDMA_DRIVER_USNIC = 13,
+	RDMA_DRIVER_RXE = 14,
+	RDMA_DRIVER_HFI1 = 15,
+	RDMA_DRIVER_QIB = 16,
+	RDMA_DRIVER_EFA = 17,
+	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
+	RDMA_DRIVER_MANA = 20,
+};
+
+enum ib_cq_notify_flags {
+	IB_CQ_SOLICITED = 1,
+	IB_CQ_NEXT_COMP = 2,
+	IB_CQ_SOLICITED_MASK = 3,
+	IB_CQ_REPORT_MISSED_EVENTS = 4,
+};
+
+struct ib_mad;
+
+enum rdma_link_layer {
+	IB_LINK_LAYER_UNSPECIFIED = 0,
+	IB_LINK_LAYER_INFINIBAND = 1,
+	IB_LINK_LAYER_ETHERNET = 2,
+};
+
+enum rdma_netdev_t {
+	RDMA_NETDEV_OPA_VNIC = 0,
+	RDMA_NETDEV_IPOIB = 1,
+};
+
+enum ib_srq_attr_mask {
+	IB_SRQ_MAX_WR = 1,
+	IB_SRQ_LIMIT = 2,
+};
+
+enum ib_mr_type {
+	IB_MR_TYPE_MEM_REG = 0,
+	IB_MR_TYPE_SG_GAPS = 1,
+	IB_MR_TYPE_DM = 2,
+	IB_MR_TYPE_USER = 3,
+	IB_MR_TYPE_DMA = 4,
+	IB_MR_TYPE_INTEGRITY = 5,
+};
+
+enum ib_uverbs_advise_mr_advice {
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
+};
+
+struct uverbs_attr_bundle;
+
+struct rdma_cm_id;
+
+struct iw_cm_id;
+
+struct iw_cm_conn_param;
+
+struct ib_qp;
+
+struct ib_send_wr;
+
+struct ib_recv_wr;
+
+struct ib_cq;
+
+struct ib_wc;
+
+struct ib_srq;
+
+struct ib_grh;
+
+struct ib_device_attr;
+
+struct ib_udata;
+
+struct ib_device_modify;
+
+struct ib_port_attr;
+
+struct ib_port_modify;
+
+struct ib_port_immutable;
+
+struct rdma_netdev_alloc_params;
+
+union ib_gid;
+
+struct ib_gid_attr;
+
+struct ib_ucontext;
+
+struct rdma_user_mmap_entry;
+
+struct ib_pd;
+
+struct ib_ah;
+
+struct rdma_ah_init_attr;
+
+struct rdma_ah_attr;
+
+struct ib_srq_init_attr;
+
+struct ib_srq_attr;
+
+struct ib_qp_init_attr;
+
+struct ib_qp_attr;
+
+struct ib_cq_init_attr;
+
+struct ib_mr;
+
+struct ib_sge;
+
+struct ib_mr_status;
+
+struct ib_mw;
+
+struct ib_xrcd;
+
+struct ib_flow;
+
+struct ib_flow_attr;
+
+struct ib_flow_action;
+
+struct ib_wq;
+
+struct ib_wq_init_attr;
+
+struct ib_wq_attr;
+
+struct ib_rwq_ind_table;
+
+struct ib_rwq_ind_table_init_attr;
+
+struct ib_dm;
+
+struct ib_dm_alloc_attr;
+
+struct ib_dm_mr_attr;
+
+struct ib_counters;
+
+struct ib_counters_read_attr;
+
+struct ib_device_ops {
+	struct module *owner;
+	enum rdma_driver_id driver_id;
+	u32 uverbs_abi_ver;
+	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
+	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
+	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	void (*drain_rq)(struct ib_qp *);
+	void (*drain_sq)(struct ib_qp *);
+	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
+	int (*peek_cq)(struct ib_cq *, int);
+	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
+	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
+	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
+	void (*get_dev_fw_str)(struct ib_device *, char *);
+	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
+	int (*add_gid)(const struct ib_gid_attr *, void **);
+	int (*del_gid)(const struct ib_gid_attr *, void **);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
+	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
+	void (*dealloc_ucontext)(struct ib_ucontext *);
+	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
+	void (*mmap_free)(struct rdma_user_mmap_entry *);
+	void (*disassociate_ucontext)(struct ib_ucontext *);
+	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*destroy_ah)(struct ib_ah *, u32);
+	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
+	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
+	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
+	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
+	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
+	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
+	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
+	int (*modify_cq)(struct ib_cq *, u16, u16);
+	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
+	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
+	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
+	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
+	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
+	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
+	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
+	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
+	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
+	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
+	int (*dealloc_mw)(struct ib_mw *);
+	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
+	int (*destroy_flow)(struct ib_flow *);
+	int (*destroy_flow_action)(struct ib_flow_action *);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
+	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
+	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
+	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
+	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
+	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
+	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
+	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
+	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
+	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
+	int (*destroy_counters)(struct ib_counters *);
+	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
+	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
+	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
+	int (*enable_driver)(struct ib_device *);
+	void (*dealloc_driver)(struct ib_device *);
+	void (*iw_add_ref)(struct ib_qp *);
+	void (*iw_rem_ref)(struct ib_qp *);
+	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
+	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
+	int (*iw_create_listen)(struct iw_cm_id *, int);
+	int (*iw_destroy_listen)(struct iw_cm_id *);
+	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
+	int (*counter_unbind_qp)(struct ib_qp *);
+	int (*counter_dealloc)(struct rdma_counter *);
+	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
+	int (*counter_update_stats)(struct rdma_counter *);
+	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
+	size_t size_ib_ah;
+	size_t size_ib_counters;
+	size_t size_ib_cq;
+	size_t size_ib_mw;
+	size_t size_ib_pd;
+	size_t size_ib_qp;
+	size_t size_ib_rwq_ind_table;
+	size_t size_ib_srq;
+	size_t size_ib_ucontext;
+	size_t size_ib_xrcd;
+};
+
+struct ib_core_device {
+	struct device dev;
+	possible_net_t rdma_net;
+	struct kobject *ports_kobj;
+	struct list_head port_list;
+	struct ib_device *owner;
+};
+
+enum ib_atomic_cap {
+	IB_ATOMIC_NONE = 0,
+	IB_ATOMIC_HCA = 1,
+	IB_ATOMIC_GLOB = 2,
+};
+
+struct ib_odp_caps {
+	uint64_t general_caps;
+	struct {
+		uint32_t rc_odp_caps;
+		uint32_t uc_odp_caps;
+		uint32_t ud_odp_caps;
+		uint32_t xrc_odp_caps;
+	} per_transport_caps;
+};
+
+struct ib_rss_caps {
+	u32 supported_qpts;
+	u32 max_rwq_indirection_tables;
+	u32 max_rwq_indirection_table_size;
+};
+
+struct ib_tm_caps {
+	u32 max_rndv_hdr_size;
+	u32 max_num_tags;
+	u32 flags;
+	u32 max_ops;
+	u32 max_sge;
+};
+
+struct ib_cq_caps {
+	u16 max_cq_moderation_count;
+	u16 max_cq_moderation_period;
+};
+
+struct ib_device_attr {
+	u64 fw_ver;
+	__be64 sys_image_guid;
+	u64 max_mr_size;
+	u64 page_size_cap;
+	u32 vendor_id;
+	u32 vendor_part_id;
+	u32 hw_ver;
+	int max_qp;
+	int max_qp_wr;
+	u64 device_cap_flags;
+	u64 kernel_cap_flags;
+	int max_send_sge;
+	int max_recv_sge;
+	int max_sge_rd;
+	int max_cq;
+	int max_cqe;
+	int max_mr;
+	int max_pd;
+	int max_qp_rd_atom;
+	int max_ee_rd_atom;
+	int max_res_rd_atom;
+	int max_qp_init_rd_atom;
+	int max_ee_init_rd_atom;
+	enum ib_atomic_cap atomic_cap;
+	enum ib_atomic_cap masked_atomic_cap;
+	int max_ee;
+	int max_rdd;
+	int max_mw;
+	int max_raw_ipv6_qp;
+	int max_raw_ethy_qp;
+	int max_mcast_grp;
+	int max_mcast_qp_attach;
+	int max_total_mcast_qp_attach;
+	int max_ah;
+	int max_srq;
+	int max_srq_wr;
+	int max_srq_sge;
+	unsigned int max_fast_reg_page_list_len;
+	unsigned int max_pi_fast_reg_page_list_len;
+	u16 max_pkeys;
+	u8 local_ca_ack_delay;
+	int sig_prot_cap;
+	int sig_guard_cap;
+	struct ib_odp_caps odp_caps;
+	uint64_t timestamp_mask;
+	uint64_t hca_core_clock;
+	struct ib_rss_caps rss_caps;
+	u32 max_wq_type_rq;
+	u32 raw_packet_caps;
+	struct ib_tm_caps tm_caps;
+	struct ib_cq_caps cq_caps;
+	u64 max_dm_size;
+	u32 max_sgl_rd;
+};
+
+struct hw_stats_device_data;
+
+struct rdma_restrack_root;
+
+struct uapi_definition;
+
+struct ib_port_data;
+
+struct ib_device {
+	struct device *dma_device;
+	struct ib_device_ops ops;
+	char name[64];
+	struct callback_head callback_head;
+	struct list_head event_handler_list;
+	struct rw_semaphore event_handler_rwsem;
+	spinlock_t qp_open_list_lock;
+	struct rw_semaphore client_data_rwsem;
+	struct xarray client_data;
+	struct mutex unregistration_lock;
+	rwlock_t cache_lock;
+	struct ib_port_data *port_data;
+	int num_comp_vectors;
+	union {
+		struct device dev;
+		struct ib_core_device coredev;
+	};
+	const struct attribute_group *groups[4];
+	u64 uverbs_cmd_mask;
+	char node_desc[64];
+	__be64 node_guid;
+	u32 local_dma_lkey;
+	u16 is_switch: 1;
+	u16 kverbs_provider: 1;
+	u16 use_cq_dim: 1;
+	u8 node_type;
+	u32 phys_port_cnt;
+	struct ib_device_attr attrs;
+	struct hw_stats_device_data *hw_stats_data;
+	struct rdmacg_device cg_device;
+	u32 index;
+	spinlock_t cq_pools_lock;
+	struct list_head cq_pools[3];
+	struct rdma_restrack_root *res;
+	const struct uapi_definition *driver_def;
+	refcount_t refcount;
+	struct completion unreg_completion;
+	struct work_struct unregistration_work;
+	const struct rdma_link_ops *link_ops;
+	struct mutex compat_devs_mutex;
+	struct xarray compat_devs;
+	char iw_ifname[16];
+	u32 iw_driver_flags;
+	u32 lag_flags;
+};
+
+enum ib_signature_type {
+	IB_SIG_TYPE_NONE = 0,
+	IB_SIG_TYPE_T10_DIF = 1,
+};
+
+enum ib_t10_dif_bg_type {
+	IB_T10DIF_CRC = 0,
+	IB_T10DIF_CSUM = 1,
+};
+
+struct ib_t10_dif_domain {
+	enum ib_t10_dif_bg_type bg_type;
+	u16 pi_interval;
+	u16 bg;
+	u16 app_tag;
+	u32 ref_tag;
+	bool ref_remap;
+	bool app_escape;
+	bool ref_escape;
+	u16 apptag_check_mask;
+};
+
+struct ib_sig_domain {
+	enum ib_signature_type sig_type;
+	union {
+		struct ib_t10_dif_domain dif;
+	} sig;
+};
+
+struct ib_sig_attrs {
+	u8 check_mask;
+	struct ib_sig_domain mem;
+	struct ib_sig_domain wire;
+	int meta_length;
+};
+
+enum ib_sig_err_type {
+	IB_SIG_BAD_GUARD = 0,
+	IB_SIG_BAD_REFTAG = 1,
+	IB_SIG_BAD_APPTAG = 2,
+};
+
+struct ib_sig_err {
+	enum ib_sig_err_type err_type;
+	u32 expected;
+	u32 actual;
+	u64 sig_err_offset;
+	u32 key;
+};
+
+enum ib_uverbs_access_flags {
+	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
+	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
+	IB_UVERBS_ACCESS_REMOTE_READ = 4,
+	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
+	IB_UVERBS_ACCESS_MW_BIND = 16,
+	IB_UVERBS_ACCESS_ZERO_BASED = 32,
+	IB_UVERBS_ACCESS_ON_DEMAND = 64,
+	IB_UVERBS_ACCESS_HUGETLB = 128,
+	IB_UVERBS_ACCESS_FLUSH_GLOBAL = 256,
+	IB_UVERBS_ACCESS_FLUSH_PERSISTENT = 512,
+	IB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,
+	IB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,
+};
+
+enum ib_uverbs_srq_type {
+	IB_UVERBS_SRQT_BASIC = 0,
+	IB_UVERBS_SRQT_XRC = 1,
+	IB_UVERBS_SRQT_TM = 2,
+};
+
+enum ib_uverbs_wq_type {
+	IB_UVERBS_WQT_RQ = 0,
+};
+
+enum ib_uverbs_wq_flags {
+	IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,
+	IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,
+	IB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,
+	IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,
+};
+
+enum ib_uverbs_qp_type {
+	IB_UVERBS_QPT_RC = 2,
+	IB_UVERBS_QPT_UC = 3,
+	IB_UVERBS_QPT_UD = 4,
+	IB_UVERBS_QPT_RAW_PACKET = 8,
+	IB_UVERBS_QPT_XRC_INI = 9,
+	IB_UVERBS_QPT_XRC_TGT = 10,
+	IB_UVERBS_QPT_DRIVER = 255,
+};
+
+enum ib_uverbs_qp_create_flags {
+	IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,
+	IB_UVERBS_QP_CREATE_SCATTER_FCS = 256,
+	IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,
+	IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,
+	IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,
+};
+
+enum ib_uverbs_gid_type {
+	IB_UVERBS_GID_TYPE_IB = 0,
+	IB_UVERBS_GID_TYPE_ROCE_V1 = 1,
+	IB_UVERBS_GID_TYPE_ROCE_V2 = 2,
+};
+
+union ib_gid {
+	u8 raw[16];
+	struct {
+		__be64 subnet_prefix;
+		__be64 interface_id;
+	} global;
+};
+
+enum ib_gid_type {
+	IB_GID_TYPE_IB = 0,
+	IB_GID_TYPE_ROCE = 1,
+	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
+	IB_GID_TYPE_SIZE = 3,
+};
+
+struct ib_gid_attr {
+	struct net_device *ndev;
+	struct ib_device *device;
+	union ib_gid gid;
+	enum ib_gid_type gid_type;
+	u16 index;
+	u32 port_num;
+};
+
+struct ib_cq_init_attr {
+	unsigned int cqe;
+	u32 comp_vector;
+	u32 flags;
+};
+
+struct ib_dm_mr_attr {
+	u64 length;
+	u64 offset;
+	u32 access_flags;
+};
+
+struct ib_dm_alloc_attr {
+	u64 length;
+	u32 alignment;
+	u32 flags;
+};
+
+enum ib_mtu {
+	IB_MTU_256 = 1,
+	IB_MTU_512 = 2,
+	IB_MTU_1024 = 3,
+	IB_MTU_2048 = 4,
+	IB_MTU_4096 = 5,
+};
+
+enum ib_port_state {
+	IB_PORT_NOP = 0,
+	IB_PORT_DOWN = 1,
+	IB_PORT_INIT = 2,
+	IB_PORT_ARMED = 3,
+	IB_PORT_ACTIVE = 4,
+	IB_PORT_ACTIVE_DEFER = 5,
+};
+
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
+struct ib_port_attr {
+	u64 subnet_prefix;
+	enum ib_port_state state;
+	enum ib_mtu max_mtu;
+	enum ib_mtu active_mtu;
+	u32 phys_mtu;
+	int gid_tbl_len;
+	unsigned int ip_gids: 1;
+	u32 port_cap_flags;
+	u32 max_msg_sz;
+	u32 bad_pkey_cntr;
+	u32 qkey_viol_cntr;
+	u16 pkey_tbl_len;
+	u32 sm_lid;
+	u32 lid;
+	u8 lmc;
+	u8 max_vl_num;
+	u8 sm_sl;
+	u8 subnet_timeout;
+	u8 init_type_reply;
+	u8 active_width;
+	u16 active_speed;
+	u8 phys_state;
+	u16 port_cap_flags2;
+};
+
+struct ib_device_modify {
+	u64 sys_image_guid;
+	char node_desc[64];
+};
+
+struct ib_port_modify {
+	u32 set_port_cap_mask;
+	u32 clr_port_cap_mask;
+	u8 init_type;
+};
+
+enum ib_event_type {
+	IB_EVENT_CQ_ERR = 0,
+	IB_EVENT_QP_FATAL = 1,
+	IB_EVENT_QP_REQ_ERR = 2,
+	IB_EVENT_QP_ACCESS_ERR = 3,
+	IB_EVENT_COMM_EST = 4,
+	IB_EVENT_SQ_DRAINED = 5,
+	IB_EVENT_PATH_MIG = 6,
+	IB_EVENT_PATH_MIG_ERR = 7,
+	IB_EVENT_DEVICE_FATAL = 8,
+	IB_EVENT_PORT_ACTIVE = 9,
+	IB_EVENT_PORT_ERR = 10,
+	IB_EVENT_LID_CHANGE = 11,
+	IB_EVENT_PKEY_CHANGE = 12,
+	IB_EVENT_SM_CHANGE = 13,
+	IB_EVENT_SRQ_ERR = 14,
+	IB_EVENT_SRQ_LIMIT_REACHED = 15,
+	IB_EVENT_QP_LAST_WQE_REACHED = 16,
+	IB_EVENT_CLIENT_REREGISTER = 17,
+	IB_EVENT_GID_CHANGE = 18,
+	IB_EVENT_WQ_FATAL = 19,
+};
+
+struct ib_ucq_object;
+
+typedef void (*ib_comp_handler)(struct ib_cq *, void *);
+
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
+};
+
+struct ib_event;
+
+struct ib_cq {
+	struct ib_device *device;
+	struct ib_ucq_object *uobject;
+	ib_comp_handler comp_handler;
+	void (*event_handler)(struct ib_event *, void *);
+	void *cq_context;
+	int cqe;
+	unsigned int cqe_used;
+	atomic_t usecnt;
+	enum ib_poll_context poll_ctx;
+	struct ib_wc *wc;
+	struct list_head pool_entry;
+	union {
+		struct irq_poll iop;
+		struct work_struct work;
+	};
+	struct workqueue_struct *comp_wq;
+	struct dim *dim;
+	ktime_t timestamp;
+	u8 interrupt: 1;
+	u8 shared: 1;
+	unsigned int comp_vector;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uqp_object;
+
+enum ib_qp_type {
+	IB_QPT_SMI = 0,
+	IB_QPT_GSI = 1,
+	IB_QPT_RC = 2,
+	IB_QPT_UC = 3,
+	IB_QPT_UD = 4,
+	IB_QPT_RAW_IPV6 = 5,
+	IB_QPT_RAW_ETHERTYPE = 6,
+	IB_QPT_RAW_PACKET = 8,
+	IB_QPT_XRC_INI = 9,
+	IB_QPT_XRC_TGT = 10,
+	IB_QPT_MAX = 11,
+	IB_QPT_DRIVER = 255,
+	IB_QPT_RESERVED1 = 4096,
+	IB_QPT_RESERVED2 = 4097,
+	IB_QPT_RESERVED3 = 4098,
+	IB_QPT_RESERVED4 = 4099,
+	IB_QPT_RESERVED5 = 4100,
+	IB_QPT_RESERVED6 = 4101,
+	IB_QPT_RESERVED7 = 4102,
+	IB_QPT_RESERVED8 = 4103,
+	IB_QPT_RESERVED9 = 4104,
+	IB_QPT_RESERVED10 = 4105,
+};
+
+struct ib_qp_security;
+
+struct ib_qp {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	spinlock_t mr_lock;
+	int mrs_used;
+	struct list_head rdma_mrs;
+	struct list_head sig_mrs;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct list_head xrcd_list;
+	atomic_t usecnt;
+	struct list_head open_list;
+	struct ib_qp *real_qp;
+	struct ib_uqp_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	const struct ib_gid_attr *av_sgid_attr;
+	const struct ib_gid_attr *alt_path_sgid_attr;
+	u32 qp_num;
+	u32 max_write_sge;
+	u32 max_read_sge;
+	enum ib_qp_type qp_type;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	struct ib_qp_security *qp_sec;
+	u32 port;
+	bool integrity_en;
+	struct rdma_restrack_entry res;
+	struct rdma_counter *counter;
+};
+
+struct ib_usrq_object;
+
+enum ib_srq_type {
+	IB_SRQT_BASIC = 0,
+	IB_SRQT_XRC = 1,
+	IB_SRQT_TM = 2,
+};
+
+struct ib_srq {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_usrq_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	enum ib_srq_type srq_type;
+	atomic_t usecnt;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+				u32 srq_num;
+			} xrc;
+		};
+	} ext;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uwq_object;
+
+enum ib_wq_state {
+	IB_WQS_RESET = 0,
+	IB_WQS_RDY = 1,
+	IB_WQS_ERR = 2,
+};
+
+enum ib_wq_type {
+	IB_WQT_RQ = 0,
+};
+
+struct ib_wq {
+	struct ib_device *device;
+	struct ib_uwq_object *uobject;
+	void *wq_context;
+	void (*event_handler)(struct ib_event *, void *);
+	struct ib_pd *pd;
+	struct ib_cq *cq;
+	u32 wq_num;
+	enum ib_wq_state state;
+	enum ib_wq_type wq_type;
+	atomic_t usecnt;
+};
+
+struct ib_event {
+	struct ib_device *device;
+	union {
+		struct ib_cq *cq;
+		struct ib_qp *qp;
+		struct ib_srq *srq;
+		struct ib_wq *wq;
+		u32 port_num;
+	} element;
+	enum ib_event_type event;
+};
+
+struct ib_global_route {
+	const struct ib_gid_attr *sgid_attr;
+	union ib_gid dgid;
+	u32 flow_label;
+	u8 sgid_index;
+	u8 hop_limit;
+	u8 traffic_class;
+};
+
+struct ib_grh {
+	__be32 version_tclass_flow;
+	__be16 paylen;
+	u8 next_hdr;
+	u8 hop_limit;
+	union ib_gid sgid;
+	union ib_gid dgid;
+};
+
+struct ib_mr_status {
+	u32 fail_status;
+	struct ib_sig_err sig_err;
+};
+
+struct rdma_ah_init_attr {
+	struct rdma_ah_attr *ah_attr;
+	u32 flags;
+	struct net_device *xmit_slave;
+};
+
+enum rdma_ah_attr_type {
+	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
+	RDMA_AH_ATTR_TYPE_IB = 1,
+	RDMA_AH_ATTR_TYPE_ROCE = 2,
+	RDMA_AH_ATTR_TYPE_OPA = 3,
+};
+
+struct ib_ah_attr {
+	u16 dlid;
+	u8 src_path_bits;
+};
+
+struct roce_ah_attr {
+	u8 dmac[6];
+};
+
+struct opa_ah_attr {
+	u32 dlid;
+	u8 src_path_bits;
+	bool make_grd;
+};
+
+struct rdma_ah_attr {
+	struct ib_global_route grh;
+	u8 sl;
+	u8 static_rate;
+	u32 port_num;
+	u8 ah_flags;
+	enum rdma_ah_attr_type type;
+	union {
+		struct ib_ah_attr ib;
+		struct roce_ah_attr roce;
+		struct opa_ah_attr opa;
+	};
+};
+
+enum ib_wc_status {
+	IB_WC_SUCCESS = 0,
+	IB_WC_LOC_LEN_ERR = 1,
+	IB_WC_LOC_QP_OP_ERR = 2,
+	IB_WC_LOC_EEC_OP_ERR = 3,
+	IB_WC_LOC_PROT_ERR = 4,
+	IB_WC_WR_FLUSH_ERR = 5,
+	IB_WC_MW_BIND_ERR = 6,
+	IB_WC_BAD_RESP_ERR = 7,
+	IB_WC_LOC_ACCESS_ERR = 8,
+	IB_WC_REM_INV_REQ_ERR = 9,
+	IB_WC_REM_ACCESS_ERR = 10,
+	IB_WC_REM_OP_ERR = 11,
+	IB_WC_RETRY_EXC_ERR = 12,
+	IB_WC_RNR_RETRY_EXC_ERR = 13,
+	IB_WC_LOC_RDD_VIOL_ERR = 14,
+	IB_WC_REM_INV_RD_REQ_ERR = 15,
+	IB_WC_REM_ABORT_ERR = 16,
+	IB_WC_INV_EECN_ERR = 17,
+	IB_WC_INV_EEC_STATE_ERR = 18,
+	IB_WC_FATAL_ERR = 19,
+	IB_WC_RESP_TIMEOUT_ERR = 20,
+	IB_WC_GENERAL_ERR = 21,
+};
+
+enum ib_wc_opcode {
+	IB_WC_SEND = 0,
+	IB_WC_RDMA_WRITE = 1,
+	IB_WC_RDMA_READ = 2,
+	IB_WC_COMP_SWAP = 3,
+	IB_WC_FETCH_ADD = 4,
+	IB_WC_BIND_MW = 5,
+	IB_WC_LOCAL_INV = 6,
+	IB_WC_LSO = 7,
+	IB_WC_ATOMIC_WRITE = 9,
+	IB_WC_REG_MR = 10,
+	IB_WC_MASKED_COMP_SWAP = 11,
+	IB_WC_MASKED_FETCH_ADD = 12,
+	IB_WC_FLUSH = 8,
+	IB_WC_RECV = 128,
+	IB_WC_RECV_RDMA_WITH_IMM = 129,
+};
+
+struct ib_cqe {
+	void (*done)(struct ib_cq *, struct ib_wc *);
+};
+
+struct ib_wc {
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	enum ib_wc_status status;
+	enum ib_wc_opcode opcode;
+	u32 vendor_err;
+	u32 byte_len;
+	struct ib_qp *qp;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+	u32 src_qp;
+	u32 slid;
+	int wc_flags;
+	u16 pkey_index;
+	u8 sl;
+	u8 dlid_path_bits;
+	u32 port_num;
+	u8 smac[6];
+	u16 vlan_id;
+	u8 network_hdr_type;
+};
+
+struct ib_srq_attr {
+	u32 max_wr;
+	u32 max_sge;
+	u32 srq_limit;
+};
+
+struct ib_xrcd {
+	struct ib_device *device;
+	atomic_t usecnt;
+	struct inode *inode;
+	struct rw_semaphore tgt_qps_rwsem;
+	struct xarray tgt_qps;
+};
+
+struct ib_srq_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	struct ib_srq_attr attr;
+	enum ib_srq_type srq_type;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+			} xrc;
+			struct {
+				u32 max_num_tags;
+			} tag_matching;
+		};
+	} ext;
+};
+
+struct ib_qp_cap {
+	u32 max_send_wr;
+	u32 max_recv_wr;
+	u32 max_send_sge;
+	u32 max_recv_sge;
+	u32 max_inline_data;
+	u32 max_rdma_ctxs;
+};
+
+enum ib_sig_type {
+	IB_SIGNAL_ALL_WR = 0,
+	IB_SIGNAL_REQ_WR = 1,
+};
+
+struct ib_qp_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct ib_qp_cap cap;
+	enum ib_sig_type sq_sig_type;
+	enum ib_qp_type qp_type;
+	u32 create_flags;
+	u32 port_num;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	u32 source_qpn;
+};
+
+struct ib_uobject;
+
+struct ib_rwq_ind_table {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 ind_tbl_num;
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum ib_qp_state {
+	IB_QPS_RESET = 0,
+	IB_QPS_INIT = 1,
+	IB_QPS_RTR = 2,
+	IB_QPS_RTS = 3,
+	IB_QPS_SQD = 4,
+	IB_QPS_SQE = 5,
+	IB_QPS_ERR = 6,
+};
+
+enum ib_mig_state {
+	IB_MIG_MIGRATED = 0,
+	IB_MIG_REARM = 1,
+	IB_MIG_ARMED = 2,
+};
+
+enum ib_mw_type {
+	IB_MW_TYPE_1 = 1,
+	IB_MW_TYPE_2 = 2,
+};
+
+struct ib_qp_attr {
+	enum ib_qp_state qp_state;
+	enum ib_qp_state cur_qp_state;
+	enum ib_mtu path_mtu;
+	enum ib_mig_state path_mig_state;
+	u32 qkey;
+	u32 rq_psn;
+	u32 sq_psn;
+	u32 dest_qp_num;
+	int qp_access_flags;
+	struct ib_qp_cap cap;
+	struct rdma_ah_attr ah_attr;
+	struct rdma_ah_attr alt_ah_attr;
+	u16 pkey_index;
+	u16 alt_pkey_index;
+	u8 en_sqd_async_notify;
+	u8 sq_draining;
+	u8 max_rd_atomic;
+	u8 max_dest_rd_atomic;
+	u8 min_rnr_timer;
+	u32 port_num;
+	u8 timeout;
+	u8 retry_cnt;
+	u8 rnr_retry;
+	u32 alt_port_num;
+	u8 alt_timeout;
+	u32 rate_limit;
+	struct net_device *xmit_slave;
+};
+
+enum ib_wr_opcode {
+	IB_WR_RDMA_WRITE = 0,
+	IB_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_WR_SEND = 2,
+	IB_WR_SEND_WITH_IMM = 3,
+	IB_WR_RDMA_READ = 4,
+	IB_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_WR_BIND_MW = 8,
+	IB_WR_LSO = 10,
+	IB_WR_SEND_WITH_INV = 9,
+	IB_WR_RDMA_READ_WITH_INV = 11,
+	IB_WR_LOCAL_INV = 7,
+	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_WR_FLUSH = 14,
+	IB_WR_ATOMIC_WRITE = 15,
+	IB_WR_REG_MR = 32,
+	IB_WR_REG_MR_INTEGRITY = 33,
+	IB_WR_RESERVED1 = 240,
+	IB_WR_RESERVED2 = 241,
+	IB_WR_RESERVED3 = 242,
+	IB_WR_RESERVED4 = 243,
+	IB_WR_RESERVED5 = 244,
+	IB_WR_RESERVED6 = 245,
+	IB_WR_RESERVED7 = 246,
+	IB_WR_RESERVED8 = 247,
+	IB_WR_RESERVED9 = 248,
+	IB_WR_RESERVED10 = 249,
+};
+
+struct ib_sge {
+	u64 addr;
+	u32 length;
+	u32 lkey;
+};
+
+struct ib_send_wr {
+	struct ib_send_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+	enum ib_wr_opcode opcode;
+	int send_flags;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+};
+
+struct ib_ah {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_ah_attr_type type;
+};
+
+struct ib_mr {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	u32 lkey;
+	u32 rkey;
+	u64 iova;
+	u64 length;
+	unsigned int page_size;
+	enum ib_mr_type type;
+	bool need_inval;
+	union {
+		struct ib_uobject *uobject;
+		struct list_head qp_entry;
+	};
+	struct ib_dm *dm;
+	struct ib_sig_attrs *sig_attrs;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_recv_wr {
+	struct ib_recv_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+};
+
+struct ib_rdmacg_object {
+	struct rdma_cgroup *cg;
+};
+
+struct ib_uverbs_file;
+
+struct ib_ucontext {
+	struct ib_device *device;
+	struct ib_uverbs_file *ufile;
+	struct ib_rdmacg_object cg_obj;
+	struct rdma_restrack_entry res;
+	struct xarray mmap_xa;
+};
+
+struct uverbs_api_object;
+
+struct ib_uobject {
+	u64 user_handle;
+	struct ib_uverbs_file *ufile;
+	struct ib_ucontext *context;
+	void *object;
+	struct list_head list;
+	struct ib_rdmacg_object cg_obj;
+	int id;
+	struct kref ref;
+	atomic_t usecnt;
+	struct callback_head rcu;
+	const struct uverbs_api_object *uapi_object;
+};
+
+struct ib_udata {
+	const void *inbuf;
+	void *outbuf;
+	size_t inlen;
+	size_t outlen;
+};
+
+struct ib_pd {
+	u32 local_dma_lkey;
+	u32 flags;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 unsafe_global_rkey;
+	struct ib_mr *__internal_mr;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_wq_init_attr {
+	void *wq_context;
+	enum ib_wq_type wq_type;
+	u32 max_wr;
+	u32 max_sge;
+	struct ib_cq *cq;
+	void (*event_handler)(struct ib_event *, void *);
+	u32 create_flags;
+};
+
+struct ib_wq_attr {
+	enum ib_wq_state wq_state;
+	enum ib_wq_state curr_wq_state;
+	u32 flags;
+	u32 flags_mask;
+};
+
+struct ib_rwq_ind_table_init_attr {
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+enum port_pkey_state {
+	IB_PORT_PKEY_NOT_VALID = 0,
+	IB_PORT_PKEY_VALID = 1,
+	IB_PORT_PKEY_LISTED = 2,
+};
+
+struct ib_port_pkey {
+	enum port_pkey_state state;
+	u16 pkey_index;
+	u32 port_num;
+	struct list_head qp_list;
+	struct list_head to_error_list;
+	struct ib_qp_security *sec;
+};
+
+struct ib_ports_pkeys;
+
+struct ib_qp_security {
+	struct ib_qp *qp;
+	struct ib_device *dev;
+	struct mutex mutex;
+	struct ib_ports_pkeys *ports_pkeys;
+	struct list_head shared_qp_list;
+	void *security;
+	bool destroying;
+	atomic_t error_list_count;
+	struct completion error_complete;
+	int error_comps_pending;
+};
+
+struct ib_ports_pkeys {
+	struct ib_port_pkey main;
+	struct ib_port_pkey alt;
+};
+
+struct ib_dm {
+	struct ib_device *device;
+	u32 length;
+	u32 flags;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+struct ib_mw {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	u32 rkey;
+	enum ib_mw_type type;
+};
+
+enum ib_flow_attr_type {
+	IB_FLOW_ATTR_NORMAL = 0,
+	IB_FLOW_ATTR_ALL_DEFAULT = 1,
+	IB_FLOW_ATTR_MC_DEFAULT = 2,
+	IB_FLOW_ATTR_SNIFFER = 3,
+};
+
+enum ib_flow_spec_type {
+	IB_FLOW_SPEC_ETH = 32,
+	IB_FLOW_SPEC_IB = 34,
+	IB_FLOW_SPEC_IPV4 = 48,
+	IB_FLOW_SPEC_IPV6 = 49,
+	IB_FLOW_SPEC_ESP = 52,
+	IB_FLOW_SPEC_TCP = 64,
+	IB_FLOW_SPEC_UDP = 65,
+	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
+	IB_FLOW_SPEC_GRE = 81,
+	IB_FLOW_SPEC_MPLS = 96,
+	IB_FLOW_SPEC_INNER = 256,
+	IB_FLOW_SPEC_ACTION_TAG = 4096,
+	IB_FLOW_SPEC_ACTION_DROP = 4097,
+	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
+	IB_FLOW_SPEC_ACTION_COUNT = 4099,
+};
+
+struct ib_flow_eth_filter {
+	u8 dst_mac[6];
+	u8 src_mac[6];
+	__be16 ether_type;
+	__be16 vlan_tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_eth {
+	u32 type;
+	u16 size;
+	struct ib_flow_eth_filter val;
+	struct ib_flow_eth_filter mask;
+};
+
+struct ib_flow_ib_filter {
+	__be16 dlid;
+	__u8 sl;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ib {
+	u32 type;
+	u16 size;
+	struct ib_flow_ib_filter val;
+	struct ib_flow_ib_filter mask;
+};
+
+struct ib_flow_ipv4_filter {
+	__be32 src_ip;
+	__be32 dst_ip;
+	u8 proto;
+	u8 tos;
+	u8 ttl;
+	u8 flags;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv4 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv4_filter val;
+	struct ib_flow_ipv4_filter mask;
+};
+
+struct ib_flow_ipv6_filter {
+	u8 src_ip[16];
+	u8 dst_ip[16];
+	__be32 flow_label;
+	u8 next_hdr;
+	u8 traffic_class;
+	u8 hop_limit;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv6 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv6_filter val;
+	struct ib_flow_ipv6_filter mask;
+};
+
+struct ib_flow_tcp_udp_filter {
+	__be16 dst_port;
+	__be16 src_port;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tcp_udp {
+	u32 type;
+	u16 size;
+	struct ib_flow_tcp_udp_filter val;
+	struct ib_flow_tcp_udp_filter mask;
+};
+
+struct ib_flow_tunnel_filter {
+	__be32 tunnel_id;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tunnel {
+	u32 type;
+	u16 size;
+	struct ib_flow_tunnel_filter val;
+	struct ib_flow_tunnel_filter mask;
+};
+
+struct ib_flow_esp_filter {
+	__be32 spi;
+	__be32 seq;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_esp {
+	u32 type;
+	u16 size;
+	struct ib_flow_esp_filter val;
+	struct ib_flow_esp_filter mask;
+};
+
+struct ib_flow_gre_filter {
+	__be16 c_ks_res0_ver;
+	__be16 protocol;
+	__be32 key;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_gre {
+	u32 type;
+	u16 size;
+	struct ib_flow_gre_filter val;
+	struct ib_flow_gre_filter mask;
+};
+
+struct ib_flow_mpls_filter {
+	__be32 tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_mpls {
+	u32 type;
+	u16 size;
+	struct ib_flow_mpls_filter val;
+	struct ib_flow_mpls_filter mask;
+};
+
+struct ib_flow_spec_action_tag {
+	enum ib_flow_spec_type type;
+	u16 size;
+	u32 tag_id;
+};
+
+struct ib_flow_spec_action_drop {
+	enum ib_flow_spec_type type;
+	u16 size;
+};
+
+struct ib_flow_spec_action_handle {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_flow_action *act;
+};
+
+enum ib_flow_action_type {
+	IB_FLOW_ACTION_UNSPECIFIED = 0,
+	IB_FLOW_ACTION_ESP = 1,
+};
+
+struct ib_flow_action {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	enum ib_flow_action_type type;
+	atomic_t usecnt;
+};
+
+struct ib_flow_spec_action_count {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_counters *counters;
+};
+
+struct ib_counters {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+union ib_flow_spec {
+	struct {
+		u32 type;
+		u16 size;
+	};
+	struct ib_flow_spec_eth eth;
+	struct ib_flow_spec_ib ib;
+	struct ib_flow_spec_ipv4 ipv4;
+	struct ib_flow_spec_tcp_udp tcp_udp;
+	struct ib_flow_spec_ipv6 ipv6;
+	struct ib_flow_spec_tunnel tunnel;
+	struct ib_flow_spec_esp esp;
+	struct ib_flow_spec_gre gre;
+	struct ib_flow_spec_mpls mpls;
+	struct ib_flow_spec_action_tag flow_tag;
+	struct ib_flow_spec_action_drop drop;
+	struct ib_flow_spec_action_handle action;
+	struct ib_flow_spec_action_count flow_count;
+};
+
+struct ib_flow_attr {
+	enum ib_flow_attr_type type;
+	u16 size;
+	u16 priority;
+	u32 flags;
+	u8 num_of_specs;
+	u32 port;
+	union ib_flow_spec flows[0];
+};
+
+struct ib_flow {
+	struct ib_qp *qp;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+};
+
+struct ib_pkey_cache;
+
+struct ib_gid_table;
+
+struct ib_port_cache {
+	u64 subnet_prefix;
+	struct ib_pkey_cache *pkey;
+	struct ib_gid_table *gid;
+	u8 lmc;
+	enum ib_port_state port_state;
+};
+
+struct ib_port_immutable {
+	int pkey_tbl_len;
+	int gid_tbl_len;
+	u32 core_cap_flags;
+	u32 max_mad_size;
+};
+
+struct ib_port;
+
+struct ib_port_data {
+	struct ib_device *ib_dev;
+	struct ib_port_immutable immutable;
+	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
+	struct list_head pkey_list;
+	struct ib_port_cache cache;
+	struct net_device *netdev;
+	netdevice_tracker netdev_tracker;
+	struct hlist_node ndev_hash_link;
+	struct rdma_port_counter port_counter;
+	struct ib_port *sysfs;
+};
+
+struct rdma_netdev_alloc_params {
+	size_t sizeof_priv;
+	unsigned int txqs;
+	unsigned int rxqs;
+	void *param;
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
+};
+
+struct ib_counters_read_attr {
+	u64 *counters_buff;
+	u32 ncounters;
+	u32 flags;
+};
+
+struct rdma_user_mmap_entry {
+	struct kref ref;
+	struct ib_ucontext *ucontext;
+	long unsigned int start_pgoff;
+	size_t npages;
+	bool driver_removed;
+};
+
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
+};
+
+enum devlink_eswitch_mode {
+	DEVLINK_ESWITCH_MODE_LEGACY = 0,
+	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
+};
+
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
+enum {
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
+};
+
+enum {
+	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,
+	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,
+	__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,
+	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
+};
+
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
+};
+
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
+};
+
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
+};
+
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	DEVLINK_ATTR_RATE_TX_PRIORITY = 177,
+	DEVLINK_ATTR_RATE_TX_WEIGHT = 178,
+	DEVLINK_ATTR_REGION_DIRECT = 179,
+	__DEVLINK_ATTR_MAX = 180,
+	DEVLINK_ATTR_MAX = 179,
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+enum devlink_dpipe_field_ethernet_id {
+	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,
+};
+
+enum devlink_dpipe_field_ipv4_id {
+	DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,
+};
+
+enum devlink_dpipe_field_ipv6_id {
+	DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,
+};
+
+enum devlink_dpipe_header_id {
+	DEVLINK_DPIPE_HEADER_ETHERNET = 0,
+	DEVLINK_DPIPE_HEADER_IPV4 = 1,
+	DEVLINK_DPIPE_HEADER_IPV6 = 2,
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+enum devlink_port_fn_attr_cap {
+	DEVLINK_PORT_FN_ATTR_CAP_ROCE_BIT = 0,
+	DEVLINK_PORT_FN_ATTR_CAP_MIGRATABLE_BIT = 1,
+	__DEVLINK_PORT_FN_ATTR_CAPS_MAX = 2,
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	DEVLINK_PORT_FN_ATTR_CAPS = 4,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 5,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct xarray ports;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	struct mutex linecards_lock;
+	const struct devlink_ops *ops;
+	u64 features;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct completion comp;
+	struct callback_head rcu;
+	struct notifier_block netdevice_nb;
+	char priv[0];
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	refcount_t refcount;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	long unsigned int done;
+	long unsigned int total;
+	long unsigned int timeout;
+};
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	long unsigned int supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	struct mutex dump_lock;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+	refcount_t refcount;
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	DEVLINK_TRAP_GENERIC_ID_EAPOL = 92,
+	DEVLINK_TRAP_GENERIC_ID_LOCKED_PORT = 93,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 94,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 93,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EAPOL = 26,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 27,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+};
+
+enum {
+	DEVLINK_F_RELOAD = 1,
+};
+
+struct devlink_info_req;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	long unsigned int reload_actions;
+	long unsigned int reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_function_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_function_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_fn_roce_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_roce_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_migratable_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_migratable_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *);
+	int (*port_del)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+enum devlink_info_version_type {
+	DEVLINK_INFO_VERSION_TYPE_NONE = 0,
+	DEVLINK_INFO_VERSION_TYPE_COMPONENT = 1,
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+	void (*version_cb)(const char *, enum devlink_info_version_type, void *);
+	void *version_cb_priv;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	long unsigned int type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+struct devlink_flash_component_lookup_ctx {
+	const char *lookup_name;
+	bool lookup_name_found;
+};
+
+typedef int devlink_chunk_fill_t(void *, u8 *, u32, u64, struct netlink_ext_ack *);
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats *stats;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats *stats;
+	void *priv;
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
+	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
+	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
+	SK_DIAG_BPF_STORAGE = 1,
+	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_NONE = 0,
+	SK_DIAG_BPF_STORAGE_PAD = 1,
+	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
+	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
+	__SK_DIAG_BPF_STORAGE_MAX = 4,
+};
+
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
+
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
+struct bpf_sk_storage_diag {
+	u32 nr_maps;
+	struct bpf_map *maps[0];
+};
+
+struct bpf_iter_seq_sk_storage_map_info {
+	struct bpf_map *map;
+	unsigned int bucket_id;
+	unsigned int skip_elems;
+};
+
+struct bpf_iter__bpf_sk_storage_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		struct sock *sk;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	raw_spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	raw_spinlock_t lock;
+};
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 32;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+struct nvmem_cell;
+
+struct llc_addr {
+	unsigned char lsap;
+	unsigned char mac[6];
+};
+
+struct llc_sap {
+	unsigned char state;
+	unsigned char p_bit;
+	unsigned char f_bit;
+	refcount_t refcnt;
+	int (*rcv_func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	struct llc_addr laddr;
+	struct list_head node;
+	spinlock_t sk_lock;
+	int sk_count;
+	struct hlist_nulls_head sk_laddr_hash[64];
+	struct hlist_head sk_dev_hash[64];
+	struct callback_head rcu;
+};
+
+struct compat_cmsghdr {
+	compat_size_t cmsg_len;
+	compat_int_t cmsg_level;
+	compat_int_t cmsg_type;
+};
+
+struct llc_pdu_sn {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+	u8 ctrl_2;
+};
+
+struct llc_pdu_un {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+};
+
+struct datalink_proto {
+	unsigned char type[8];
+	struct llc_sap *sap;
+	short unsigned int header_length;
+	int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	int (*request)(struct datalink_proto *, struct sk_buff *, const unsigned char *);
+	struct list_head node;
+};
+
+struct garp_applicant;
+
+struct garp_port {
+	struct garp_applicant *applicants[1];
+	struct callback_head rcu;
+};
+
+struct stp_proto {
+	unsigned char group_address[6];
+	void (*rcv)(const struct stp_proto *, struct sk_buff *, struct net_device *);
+	void *data;
+};
+
+struct garp_pdu_hdr {
+	__be16 protocol;
+};
+
+struct garp_msg_hdr {
+	u8 attrtype;
+};
+
+enum garp_attr_event {
+	GARP_LEAVE_ALL = 0,
+	GARP_JOIN_EMPTY = 1,
+	GARP_JOIN_IN = 2,
+	GARP_LEAVE_EMPTY = 3,
+	GARP_LEAVE_IN = 4,
+	GARP_EMPTY = 5,
+};
+
+struct garp_attr_hdr {
+	u8 len;
+	u8 event;
+	u8 data[0];
+};
+
+struct garp_skb_cb {
+	u8 cur_type;
+};
+
+enum garp_applicant_state {
+	GARP_APPLICANT_INVALID = 0,
+	GARP_APPLICANT_VA = 1,
+	GARP_APPLICANT_AA = 2,
+	GARP_APPLICANT_QA = 3,
+	GARP_APPLICANT_LA = 4,
+	GARP_APPLICANT_VP = 5,
+	GARP_APPLICANT_AP = 6,
+	GARP_APPLICANT_QP = 7,
+	GARP_APPLICANT_VO = 8,
+	GARP_APPLICANT_AO = 9,
+	GARP_APPLICANT_QO = 10,
+	__GARP_APPLICANT_MAX = 11,
+};
+
+enum garp_event {
+	GARP_EVENT_REQ_JOIN = 0,
+	GARP_EVENT_REQ_LEAVE = 1,
+	GARP_EVENT_R_JOIN_IN = 2,
+	GARP_EVENT_R_JOIN_EMPTY = 3,
+	GARP_EVENT_R_EMPTY = 4,
+	GARP_EVENT_R_LEAVE_IN = 5,
+	GARP_EVENT_R_LEAVE_EMPTY = 6,
+	GARP_EVENT_TRANSMIT_PDU = 7,
+	__GARP_EVENT_MAX = 8,
+};
+
+enum garp_action {
+	GARP_ACTION_NONE = 0,
+	GARP_ACTION_S_JOIN_IN = 1,
+	GARP_ACTION_S_LEAVE_EMPTY = 2,
+};
+
+struct garp_attr {
+	struct rb_node node;
+	enum garp_applicant_state state;
+	u8 type;
+	u8 dlen;
+	unsigned char data[0];
+};
+
+enum garp_applications {
+	GARP_APPLICATION_GVRP = 0,
+	__GARP_APPLICATION_MAX = 1,
+};
+
+struct garp_application {
+	enum garp_applications type;
+	unsigned int maxattr;
+	struct stp_proto proto;
+};
+
+struct garp_applicant {
+	struct garp_application *app;
+	struct net_device *dev;
+	struct timer_list join_timer;
+	spinlock_t lock;
+	struct sk_buff_head queue;
+	struct sk_buff *pdu;
+	struct rb_root gid;
+	struct callback_head rcu;
+};
+
+struct garp_state_trans {
+	u8 state;
+	u8 action;
+};
+
+struct mrp_applicant;
+
+struct mrp_port {
+	struct mrp_applicant *applicants[1];
+	struct callback_head rcu;
+};
+
+struct mrp_pdu_hdr {
+	u8 version;
+};
+
+struct mrp_msg_hdr {
+	u8 attrtype;
+	u8 attrlen;
+};
+
+struct mrp_vecattr_hdr {
+	__be16 lenflags;
+	unsigned char firstattrvalue[0];
+};
+
+enum mrp_vecattr_event {
+	MRP_VECATTR_EVENT_NEW = 0,
+	MRP_VECATTR_EVENT_JOIN_IN = 1,
+	MRP_VECATTR_EVENT_IN = 2,
+	MRP_VECATTR_EVENT_JOIN_MT = 3,
+	MRP_VECATTR_EVENT_MT = 4,
+	MRP_VECATTR_EVENT_LV = 5,
+	__MRP_VECATTR_EVENT_MAX = 6,
+};
+
+struct mrp_skb_cb {
+	struct mrp_msg_hdr *mh;
+	struct mrp_vecattr_hdr *vah;
+	unsigned char attrvalue[0];
+};
+
+enum mrp_applicant_state {
+	MRP_APPLICANT_INVALID = 0,
+	MRP_APPLICANT_VO = 1,
+	MRP_APPLICANT_VP = 2,
+	MRP_APPLICANT_VN = 3,
+	MRP_APPLICANT_AN = 4,
+	MRP_APPLICANT_AA = 5,
+	MRP_APPLICANT_QA = 6,
+	MRP_APPLICANT_LA = 7,
+	MRP_APPLICANT_AO = 8,
+	MRP_APPLICANT_QO = 9,
+	MRP_APPLICANT_AP = 10,
+	MRP_APPLICANT_QP = 11,
+	__MRP_APPLICANT_MAX = 12,
+};
+
+enum mrp_event {
+	MRP_EVENT_NEW = 0,
+	MRP_EVENT_JOIN = 1,
+	MRP_EVENT_LV = 2,
+	MRP_EVENT_TX = 3,
+	MRP_EVENT_R_NEW = 4,
+	MRP_EVENT_R_JOIN_IN = 5,
+	MRP_EVENT_R_IN = 6,
+	MRP_EVENT_R_JOIN_MT = 7,
+	MRP_EVENT_R_MT = 8,
+	MRP_EVENT_R_LV = 9,
+	MRP_EVENT_R_LA = 10,
+	MRP_EVENT_REDECLARE = 11,
+	MRP_EVENT_PERIODIC = 12,
+	__MRP_EVENT_MAX = 13,
+};
+
+enum mrp_tx_action {
+	MRP_TX_ACTION_NONE = 0,
+	MRP_TX_ACTION_S_NEW = 1,
+	MRP_TX_ACTION_S_JOIN_IN = 2,
+	MRP_TX_ACTION_S_JOIN_IN_OPTIONAL = 3,
+	MRP_TX_ACTION_S_IN_OPTIONAL = 4,
+	MRP_TX_ACTION_S_LV = 5,
+};
+
+struct mrp_attr {
+	struct rb_node node;
+	enum mrp_applicant_state state;
+	u8 type;
+	u8 len;
+	unsigned char value[0];
+};
+
+enum mrp_applications {
+	MRP_APPLICATION_MVRP = 0,
+	__MRP_APPLICATION_MAX = 1,
+};
+
+struct mrp_application {
+	enum mrp_applications type;
+	unsigned int maxattr;
+	struct packet_type pkttype;
+	unsigned char group_address[6];
+	u8 version;
+};
+
+struct mrp_applicant {
+	struct mrp_application *app;
+	struct net_device *dev;
+	struct timer_list join_timer;
+	struct timer_list periodic_timer;
+	spinlock_t lock;
+	struct sk_buff_head queue;
+	struct sk_buff *pdu;
+	struct rb_root mad;
+	struct callback_head rcu;
+	bool active;
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
+};
+
+struct tc_mq_opt_offload_graft_params {
+	long unsigned int queue;
+	u32 child_handle;
+};
+
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
+};
+
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+struct sch_frag_data {
+	long unsigned int dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
+};
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	short unsigned int overhead;
+	short int cell_align;
+	short unsigned int mpu;
+	__u32 rate;
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	__TCA_MAX = 16,
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	struct hlist_node hnode;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct qdisc_watchdog {
+	u64 last_expires;
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+struct tc_query_caps_base {
+	enum tc_setup_type type;
+	void *caps;
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	long unsigned int base;
+	long unsigned int cl;
+	u32 classid;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	long unsigned int new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc **p_miniq;
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+struct tc_police {
+	__u32 index;
+	int action;
+	__u32 limit;
+	__u32 burst;
+	__u32 mtu;
+	struct tc_ratespec rate;
+	struct tc_ratespec peakrate;
+	int refcnt;
+	int bindcnt;
+	__u32 capab;
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+enum {
+	TCA_POLICE_UNSPEC = 0,
+	TCA_POLICE_TBF = 1,
+	TCA_POLICE_RATE = 2,
+	TCA_POLICE_PEAKRATE = 3,
+	TCA_POLICE_AVRATE = 4,
+	TCA_POLICE_RESULT = 5,
+	TCA_POLICE_TM = 6,
+	TCA_POLICE_PAD = 7,
+	TCA_POLICE_RATE64 = 8,
+	TCA_POLICE_PEAKRATE64 = 9,
+	TCA_POLICE_PKTRATE64 = 10,
+	TCA_POLICE_PKTBURST64 = 11,
+	__TCA_POLICE_MAX = 12,
+};
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_action_ops;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_basic_sync *cpu_bstats_hw;
+	struct gnet_stats_queue *cpu_qstats;
+	struct tc_cookie *act_cookie;
+	struct tcf_chain *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	unsigned int net_id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+struct tc_action_net {
+	struct tcf_idrinfo *idrinfo;
+	const struct tc_action_ops *ops;
+};
+
+struct tcf_police_params {
+	int tcfp_result;
+	u32 tcfp_ewma_rate;
+	s64 tcfp_burst;
+	u32 tcfp_mtu;
+	s64 tcfp_mtu_ptoks;
+	s64 tcfp_pkt_burst;
+	struct psched_ratecfg rate;
+	bool rate_present;
+	struct psched_ratecfg peak;
+	bool peak_present;
+	struct psched_pktrate ppsrate;
+	bool pps_present;
+	struct callback_head rcu;
+};
+
+struct tcf_police {
+	struct tc_action common;
+	struct tcf_police_params *params;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t tcfp_lock;
+	s64 tcfp_toks;
+	s64 tcfp_ptoks;
+	s64 tcfp_pkttoks;
+	s64 tcfp_t_c;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tc_gact {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_GACT_UNSPEC = 0,
+	TCA_GACT_TM = 1,
+	TCA_GACT_PARMS = 2,
+	TCA_GACT_PROB = 3,
+	TCA_GACT_PAD = 4,
+	__TCA_GACT_MAX = 5,
+};
+
+struct tcf_gact {
+	struct tc_action common;
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+struct psample_group {
+	struct list_head list;
+	struct net *net;
+	u32 group_num;
+	u32 refcount;
+	u32 seq;
+	struct callback_head rcu;
+};
+
+struct action_gate_entry {
+	u8 gate_state;
+	u32 interval;
+	s32 ipv;
+	s32 maxoctets;
+};
+
+enum qdisc_class_ops_flags {
+	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+struct tcf_block_ext_info {
+	enum flow_block_binder_type binder_type;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+	u32 block_index;
+};
+
+struct tcf_qevent {
+	struct tcf_block *block;
+	struct tcf_block_ext_info info;
+	struct tcf_proto *filter_chain;
+};
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	int action;
+	int police;
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	u32 tcfp_off_max_hint;
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	long: 64;
+};
+
+struct tcf_filter_chain_list_item {
+	struct list_head list;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+};
+
+struct tcf_net {
+	spinlock_t idr_lock;
+	struct idr idr;
+};
+
+struct tcf_block_owner_item {
+	struct list_head list;
+	struct Qdisc *q;
+	enum flow_block_binder_type binder_type;
+};
+
+struct tcf_chain_info {
+	struct tcf_proto **pprev;
+	struct tcf_proto *next;
+};
+
+struct tcf_dump_args {
+	struct tcf_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct tcf_block *block;
+	struct Qdisc *q;
+	u32 parent;
+	bool terse_dump;
+};
+
+struct tcamsg {
+	unsigned char tca_family;
+	unsigned char tca__pad1;
+	short unsigned int tca__pad2;
+};
+
+enum {
+	TCA_ROOT_UNSPEC = 0,
+	TCA_ROOT_TAB = 1,
+	TCA_ROOT_FLAGS = 2,
+	TCA_ROOT_COUNT = 3,
+	TCA_ROOT_TIME_DELTA = 4,
+	__TCA_ROOT_MAX = 5,
+};
+
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
+};
+
+struct tc_cnt {
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_IPT_UNSPEC = 0,
+	TCA_IPT_TABLE = 1,
+	TCA_IPT_HOOK = 2,
+	TCA_IPT_INDEX = 3,
+	TCA_IPT_CNT = 4,
+	TCA_IPT_TM = 5,
+	TCA_IPT_TARG = 6,
+	TCA_IPT_PAD = 7,
+	__TCA_IPT_MAX = 8,
+};
+
+struct xt_entry_target;
+
+struct tcf_ipt {
+	struct tc_action common;
+	u32 tcfi_hook;
+	char *tcfi_tname;
+	struct xt_entry_target *tcfi_t;
+	long: 64;
+};
+
+struct xt_target;
+
+struct xt_entry_target {
+	union {
+		struct {
+			__u16 target_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 target_size;
+			struct xt_target *target;
+		} kernel;
+		__u16 target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_action_param;
+
+struct xt_mtchk_param;
+
+struct xt_mtdtor_param;
+
+struct xt_match {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	bool (*match)(const struct sk_buff *, struct xt_action_param *);
+	int (*checkentry)(const struct xt_mtchk_param *);
+	void (*destroy)(const struct xt_mtdtor_param *);
+	void (*compat_from_user)(void *, const void *);
+	int (*compat_to_user)(void *, const void *);
+	struct module *me;
+	const char *table;
+	unsigned int matchsize;
+	unsigned int usersize;
+	unsigned int compatsize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_tgchk_param;
+
+struct xt_tgdtor_param;
+
+struct xt_target {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
+	int (*checkentry)(const struct xt_tgchk_param *);
+	void (*destroy)(const struct xt_tgdtor_param *);
+	void (*compat_from_user)(void *, const void *);
+	int (*compat_to_user)(void *, const void *);
+	struct module *me;
+	const char *table;
+	unsigned int targetsize;
+	unsigned int usersize;
+	unsigned int compatsize;
+	unsigned int hooks;
+	short unsigned int proto;
+	short unsigned int family;
+};
+
+struct xt_counters {
+	__u64 pcnt;
+	__u64 bcnt;
+};
+
+struct xt_action_param {
+	union {
+		const struct xt_match *match;
+		const struct xt_target *target;
+	};
+	union {
+		const void *matchinfo;
+		const void *targinfo;
+	};
+	const struct nf_hook_state *state;
+	unsigned int thoff;
+	u16 fragoff;
+	bool hotdrop;
+};
+
+struct xt_mtchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_match *match;
+	void *matchinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_mtdtor_param {
+	struct net *net;
+	const struct xt_match *match;
+	void *matchinfo;
+	u_int8_t family;
+};
+
+struct xt_tgchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_target *target;
+	void *targinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_tgdtor_param {
+	struct net *net;
+	const struct xt_target *target;
+	void *targinfo;
+	u_int8_t family;
+};
+
+struct ipt_ip {
+	struct in_addr src;
+	struct in_addr dst;
+	struct in_addr smsk;
+	struct in_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ipt_entry {
+	struct ipt_ip ip;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+struct tc_act_bpf {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_ACT_BPF_UNSPEC = 0,
+	TCA_ACT_BPF_TM = 1,
+	TCA_ACT_BPF_PARMS = 2,
+	TCA_ACT_BPF_OPS_LEN = 3,
+	TCA_ACT_BPF_OPS = 4,
+	TCA_ACT_BPF_FD = 5,
+	TCA_ACT_BPF_NAME = 6,
+	TCA_ACT_BPF_PAD = 7,
+	TCA_ACT_BPF_TAG = 8,
+	TCA_ACT_BPF_ID = 9,
+	__TCA_ACT_BPF_MAX = 10,
+};
+
+struct tcf_bpf {
+	struct tc_action common;
+	struct bpf_prog *filter;
+	union {
+		u32 bpf_fd;
+		u16 bpf_num_ops;
+	};
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+};
+
+struct tcf_bpf_cfg {
+	struct bpf_prog *filter;
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+	u16 bpf_num_ops;
+	bool is_ebpf;
+};
+
+enum {
+	TCA_NAT_UNSPEC = 0,
+	TCA_NAT_PARMS = 1,
+	TCA_NAT_TM = 2,
+	TCA_NAT_PAD = 3,
+	__TCA_NAT_MAX = 4,
+};
+
+struct tc_nat {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+	__be32 old_addr;
+	__be32 new_addr;
+	__be32 mask;
+	__u32 flags;
+};
+
+struct tcf_nat {
+	struct tc_action common;
+	__be32 old_addr;
+	__be32 new_addr;
+	__be32 mask;
+	u32 flags;
+};
+
+struct tc_skbedit {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_SKBEDIT_UNSPEC = 0,
+	TCA_SKBEDIT_TM = 1,
+	TCA_SKBEDIT_PARMS = 2,
+	TCA_SKBEDIT_PRIORITY = 3,
+	TCA_SKBEDIT_QUEUE_MAPPING = 4,
+	TCA_SKBEDIT_MARK = 5,
+	TCA_SKBEDIT_PAD = 6,
+	TCA_SKBEDIT_PTYPE = 7,
+	TCA_SKBEDIT_MASK = 8,
+	TCA_SKBEDIT_FLAGS = 9,
+	TCA_SKBEDIT_QUEUE_MAPPING_MAX = 10,
+	__TCA_SKBEDIT_MAX = 11,
+};
+
+struct tcf_skbedit_params {
+	u32 flags;
+	u32 priority;
+	u32 mark;
+	u32 mask;
+	u16 queue_mapping;
+	u16 mapping_mod;
+	u16 ptype;
+	struct callback_head rcu;
+};
+
+struct tcf_skbedit {
+	struct tc_action common;
+	struct tcf_skbedit_params *params;
+	long: 64;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+struct genl_op_iter {
+	const struct genl_family *family;
+	struct genl_split_ops doit;
+	struct genl_split_ops dumpit;
+	int cmd_idx;
+	int entry_idx;
+	u32 cmd;
+	u8 flags;
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_split_ops *ops;
+	int hdrlen;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	struct genl_op_iter *op_iter;
+	u32 op;
+	u16 fam_id;
+	u8 dump_map: 1;
+	u8 single_op: 1;
+};
+
+enum {
+	TCA_FQ_UNSPEC = 0,
+	TCA_FQ_PLIMIT = 1,
+	TCA_FQ_FLOW_PLIMIT = 2,
+	TCA_FQ_QUANTUM = 3,
+	TCA_FQ_INITIAL_QUANTUM = 4,
+	TCA_FQ_RATE_ENABLE = 5,
+	TCA_FQ_FLOW_DEFAULT_RATE = 6,
+	TCA_FQ_FLOW_MAX_RATE = 7,
+	TCA_FQ_BUCKETS_LOG = 8,
+	TCA_FQ_FLOW_REFILL_DELAY = 9,
+	TCA_FQ_ORPHAN_MASK = 10,
+	TCA_FQ_LOW_RATE_THRESHOLD = 11,
+	TCA_FQ_CE_THRESHOLD = 12,
+	TCA_FQ_TIMER_SLACK = 13,
+	TCA_FQ_HORIZON = 14,
+	TCA_FQ_HORIZON_DROP = 15,
+	__TCA_FQ_MAX = 16,
+};
+
+struct tc_fq_qd_stats {
+	__u64 gc_flows;
+	__u64 highprio_packets;
+	__u64 tcp_retrans;
+	__u64 throttled;
+	__u64 flows_plimit;
+	__u64 pkts_too_long;
+	__u64 allocation_errors;
+	__s64 time_next_delayed_flow;
+	__u32 flows;
+	__u32 inactive_flows;
+	__u32 throttled_flows;
+	__u32 unthrottle_latency_ns;
+	__u64 ce_mark;
+	__u64 horizon_drops;
+	__u64 horizon_caps;
+};
+
+struct fq_skb_cb {
+	u64 time_to_send;
+};
+
+struct fq_flow {
+	struct rb_root t_root;
+	struct sk_buff *head;
+	union {
+		struct sk_buff *tail;
+		long unsigned int age;
+	};
+	struct rb_node fq_node;
+	struct sock *sk;
+	u32 socket_hash;
+	int qlen;
+	int credit;
+	struct fq_flow *next;
+	struct rb_node rate_node;
+	u64 time_next_packet;
+	long: 64;
+	long: 64;
+};
+
+struct fq_flow_head {
+	struct fq_flow *first;
+	struct fq_flow *last;
+};
+
+struct fq_sched_data {
+	struct fq_flow_head new_flows;
+	struct fq_flow_head old_flows;
+	struct rb_root delayed;
+	u64 time_next_delayed_flow;
+	u64 ktime_cache;
+	long unsigned int unthrottle_latency_ns;
+	struct fq_flow internal;
+	u32 quantum;
+	u32 initial_quantum;
+	u32 flow_refill_delay;
+	u32 flow_plimit;
+	long unsigned int flow_max_rate;
+	u64 ce_threshold;
+	u64 horizon;
+	u32 orphan_mask;
+	u32 low_rate_threshold;
+	struct rb_root *fq_root;
+	u8 rate_enable;
+	u8 fq_trees_log;
+	u8 horizon_drop;
+	u32 flows;
+	u32 inactive_flows;
+	u32 throttled_flows;
+	u64 stat_gc_flows;
+	u64 stat_internal_packets;
+	u64 stat_throttled;
+	u64 stat_ce_mark;
+	u64 stat_horizon_drops;
+	u64 stat_horizon_caps;
+	u64 stat_flows_plimit;
+	u64 stat_pkts_too_long;
+	u64 stat_allocation_errors;
+	u32 timer_slack;
+	struct qdisc_watchdog watchdog;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	short unsigned int nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	NLMSGERR_ATTR_MISS_TYPE = 5,
+	NLMSGERR_ATTR_MISS_NEST = 6,
+	__NLMSGERR_ATTR_MAX = 7,
+	NLMSGERR_ATTR_MAX = 6,
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct netlink_sock {
+	struct sock sk;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 flags;
+	u32 subscriptions;
+	u32 ngroups;
+	long unsigned int *groups;
+	long unsigned int state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	bool (*compare)(struct net *, struct sock *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	long unsigned int masks[0];
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+struct netlink_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 ndiag_ino;
+	__u32 ndiag_show;
+	__u32 ndiag_cookie[2];
+};
+
+struct netlink_diag_msg {
+	__u8 ndiag_family;
+	__u8 ndiag_type;
+	__u8 ndiag_protocol;
+	__u8 ndiag_state;
+	__u32 ndiag_portid;
+	__u32 ndiag_dst_portid;
+	__u32 ndiag_dst_group;
+	__u32 ndiag_ino;
+	__u32 ndiag_cookie[2];
+};
+
+enum {
+	NETLINK_DIAG_MEMINFO = 0,
+	NETLINK_DIAG_GROUPS = 1,
+	NETLINK_DIAG_RX_RING = 2,
+	NETLINK_DIAG_TX_RING = 3,
+	NETLINK_DIAG_FLAGS = 4,
+	__NETLINK_DIAG_MAX = 5,
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	struct xdp_frame frm;
+	u8 data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct prog_test_pass1 {
+	int x0;
+	struct {
+		int x1;
+		struct {
+			int x2;
+			struct {
+				int x3;
+			};
+		};
+	};
+};
+
+struct prog_test_pass2 {
+	int len;
+	short int arr1[4];
+	struct {
+		char arr2[4];
+		long unsigned int arr3[8];
+	} x;
+};
+
+struct prog_test_fail1 {
+	void *p;
+	int x;
+};
+
+struct prog_test_fail2 {
+	int x8;
+	struct prog_test_pass1 x;
+};
+
+struct prog_test_fail3 {
+	int len;
+	char arr1[2];
+	char arr2[0];
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
+};
+
+struct ethtool_value {
+	__u32 cmd;
+	__u32 data;
+};
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum tunable_type_id {
+	ETHTOOL_TUNABLE_UNSPEC = 0,
+	ETHTOOL_TUNABLE_U8 = 1,
+	ETHTOOL_TUNABLE_U16 = 2,
+	ETHTOOL_TUNABLE_U32 = 3,
+	ETHTOOL_TUNABLE_U64 = 4,
+	ETHTOOL_TUNABLE_STRING = 5,
+	ETHTOOL_TUNABLE_S8 = 6,
+	ETHTOOL_TUNABLE_S16 = 7,
+	ETHTOOL_TUNABLE_S32 = 8,
+	ETHTOOL_TUNABLE_S64 = 9,
+};
+
+struct ethtool_gstrings {
+	__u32 cmd;
+	__u32 string_set;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_sset_info {
+	__u32 cmd;
+	__u32 reserved;
+	__u64 sset_mask;
+	__u32 data[0];
+};
+
+struct ethtool_perm_addr {
+	__u32 cmd;
+	__u32 size;
+	__u8 data[0];
+};
+
+enum ethtool_flags {
+	ETH_FLAG_TXVLAN = 128,
+	ETH_FLAG_RXVLAN = 256,
+	ETH_FLAG_LRO = 32768,
+	ETH_FLAG_NTUPLE = 134217728,
+	ETH_FLAG_RXHASH = 268435456,
+};
+
+struct ethtool_rxfh {
+	__u32 cmd;
+	__u32 rss_context;
+	__u32 indir_size;
+	__u32 key_size;
+	__u8 hfunc;
+	__u8 rsvd8[3];
+	__u32 rsvd32;
+	__u32 rss_config[0];
+};
+
+struct ethtool_get_features_block {
+	__u32 available;
+	__u32 requested;
+	__u32 active;
+	__u32 never_changed;
+};
+
+struct ethtool_gfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_get_features_block features[0];
+};
+
+struct ethtool_set_features_block {
+	__u32 valid;
+	__u32 requested;
+};
+
+struct ethtool_sfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_set_features_block features[0];
+};
+
+enum ethtool_sfeatures_retval_bits {
+	ETHTOOL_F_UNSUPPORTED__BIT = 0,
+	ETHTOOL_F_WISH__BIT = 1,
+	ETHTOOL_F_COMPAT__BIT = 2,
+};
+
+struct ethtool_per_queue_op {
+	__u32 cmd;
+	__u32 sub_command;
+	__u32 queue_mask[128];
+	char data[0];
+};
+
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+struct ethtool_rx_flow_rule {
+	struct flow_rule *rule;
+	long unsigned int priv[0];
+};
+
+struct ethtool_rx_flow_spec_input {
+	const struct ethtool_rx_flow_spec *fs;
+	u32 rss_ctx;
+};
+
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
+struct ethtool_link_usettings {
+	struct ethtool_link_settings base;
+	struct {
+		__u32 supported[4];
+		__u32 advertising[4];
+		__u32 lp_advertising[4];
+	} link_modes;
+};
+
+struct ethtool_rx_flow_key {
+	struct flow_dissector_key_basic basic;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+};
+
+struct ethtool_rx_flow_match {
+	struct flow_dissector dissector;
+	int: 32;
+	struct ethtool_rx_flow_key key;
+	struct ethtool_rx_flow_key mask;
+};
+
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
+};
+
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+enum {
+	ETHTOOL_MSG_USER_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET = 1,
+	ETHTOOL_MSG_LINKINFO_GET = 2,
+	ETHTOOL_MSG_LINKINFO_SET = 3,
+	ETHTOOL_MSG_LINKMODES_GET = 4,
+	ETHTOOL_MSG_LINKMODES_SET = 5,
+	ETHTOOL_MSG_LINKSTATE_GET = 6,
+	ETHTOOL_MSG_DEBUG_GET = 7,
+	ETHTOOL_MSG_DEBUG_SET = 8,
+	ETHTOOL_MSG_WOL_GET = 9,
+	ETHTOOL_MSG_WOL_SET = 10,
+	ETHTOOL_MSG_FEATURES_GET = 11,
+	ETHTOOL_MSG_FEATURES_SET = 12,
+	ETHTOOL_MSG_PRIVFLAGS_GET = 13,
+	ETHTOOL_MSG_PRIVFLAGS_SET = 14,
+	ETHTOOL_MSG_RINGS_GET = 15,
+	ETHTOOL_MSG_RINGS_SET = 16,
+	ETHTOOL_MSG_CHANNELS_GET = 17,
+	ETHTOOL_MSG_CHANNELS_SET = 18,
+	ETHTOOL_MSG_COALESCE_GET = 19,
+	ETHTOOL_MSG_COALESCE_SET = 20,
+	ETHTOOL_MSG_PAUSE_GET = 21,
+	ETHTOOL_MSG_PAUSE_SET = 22,
+	ETHTOOL_MSG_EEE_GET = 23,
+	ETHTOOL_MSG_EEE_SET = 24,
+	ETHTOOL_MSG_TSINFO_GET = 25,
+	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
+	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
+	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
+	ETHTOOL_MSG_FEC_GET = 29,
+	ETHTOOL_MSG_FEC_SET = 30,
+	ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+	ETHTOOL_MSG_STATS_GET = 32,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+	ETHTOOL_MSG_MODULE_GET = 34,
+	ETHTOOL_MSG_MODULE_SET = 35,
+	ETHTOOL_MSG_PSE_GET = 36,
+	ETHTOOL_MSG_PSE_SET = 37,
+	ETHTOOL_MSG_RSS_GET = 38,
+	__ETHTOOL_MSG_USER_CNT = 39,
+	ETHTOOL_MSG_USER_MAX = 38,
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	ETHTOOL_A_LINKMODES_RATE_MATCHING = 10,
+	__ETHTOOL_A_LINKMODES_CNT = 11,
+	ETHTOOL_A_LINKMODES_MAX = 10,
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT = 7,
+	__ETHTOOL_A_LINKSTATE_CNT = 8,
+	ETHTOOL_A_LINKSTATE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	__ETHTOOL_A_RINGS_CNT = 14,
+	ETHTOOL_A_RINGS_MAX = 13,
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	__ETHTOOL_A_COALESCE_CNT = 26,
+	ETHTOOL_A_COALESCE_MAX = 25,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	__ETHTOOL_A_PAUSE_CNT = 6,
+	ETHTOOL_A_PAUSE_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_PSE_UNSPEC = 0,
+	ETHTOOL_A_PSE_HEADER = 1,
+	ETHTOOL_A_PODL_PSE_ADMIN_STATE = 2,
+	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL = 3,
+	ETHTOOL_A_PODL_PSE_PW_D_STATUS = 4,
+	__ETHTOOL_A_PSE_CNT = 5,
+	ETHTOOL_A_PSE_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_RSS_UNSPEC = 0,
+	ETHTOOL_A_RSS_HEADER = 1,
+	ETHTOOL_A_RSS_CONTEXT = 2,
+	ETHTOOL_A_RSS_HFUNC = 3,
+	ETHTOOL_A_RSS_INDIR = 4,
+	ETHTOOL_A_RSS_HKEY = 5,
+	__ETHTOOL_A_RSS_CNT = 6,
+	ETHTOOL_A_RSS_MAX = 5,
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	int pos_hash;
+	int pos_idx;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+enum {
+	ETHTOOL_A_STRING_UNSPEC = 0,
+	ETHTOOL_A_STRING_INDEX = 1,
+	ETHTOOL_A_STRING_VALUE = 2,
+	__ETHTOOL_A_STRING_CNT = 3,
+	ETHTOOL_A_STRING_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STRINGS_UNSPEC = 0,
+	ETHTOOL_A_STRINGS_STRING = 1,
+	__ETHTOOL_A_STRINGS_CNT = 2,
+	ETHTOOL_A_STRINGS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRINGSET_UNSPEC = 0,
+	ETHTOOL_A_STRINGSET_ID = 1,
+	ETHTOOL_A_STRINGSET_COUNT = 2,
+	ETHTOOL_A_STRINGSET_STRINGS = 3,
+	__ETHTOOL_A_STRINGSET_CNT = 4,
+	ETHTOOL_A_STRINGSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
+	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+	__ETHTOOL_A_STRINGSETS_CNT = 2,
+	ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+struct strset_info {
+	bool per_dev;
+	bool free_strings;
+	unsigned int count;
+	const char (*strings)[32];
+};
+
+struct strset_req_info {
+	struct ethnl_req_info base;
+	u32 req_ids;
+	bool counts_only;
+};
+
+struct strset_reply_data {
+	struct ethnl_reply_data base;
+	struct strset_info sets[21];
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+struct linkmodes_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+	bool peer_empty;
+};
+
+struct linkinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	struct ethtool_link_ext_stats link_stats;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+struct debug_reply_data {
+	struct ethnl_reply_data base;
+	u32 msg_mask;
+};
+
+struct rss_req_info {
+	struct ethnl_req_info base;
+	u32 rss_context;
+};
+
+struct rss_reply_data {
+	struct ethnl_reply_data base;
+	u32 indir_size;
+	u32 hkey_size;
+	u32 hfunc;
+	u32 *indir_table;
+	u8 *hkey;
+};
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
+};
+
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
+struct rings_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ringparam ringparam;
+	struct kernel_ethtool_ringparam kernel_ringparam;
+};
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+struct eee_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_eee eee;
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE = 2,
+	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
+	ETHTOOL_A_CABLE_RESULT_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
+	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_NEST_RESULT = 1,
+	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
+	__ETHTOOL_A_CABLE_NEST_CNT = 3,
+	ETHTOOL_A_CABLE_NEST_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
+	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
+	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
+	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
+	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
+	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
+	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
+	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_PULSE_mV = 1,
+	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
+	ETHTOOL_A_CABLE_PULSE_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
+	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
+	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
+	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
+	__ETHTOOL_A_CABLE_STEP_CNT = 4,
+	ETHTOOL_A_CABLE_STEP_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
+	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
+	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
+	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
+	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
+	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
+	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum udp_tunnel_nic_info_flags {
+	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
+	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
+	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
+	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+	struct ethnl_req_info req_info;
+	int pos_hash;
+	int pos_idx;
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	long unsigned int fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 4,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	long unsigned int stat_mask[1];
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+enum ethtool_podl_pse_admin_state {
+	ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED = 2,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED = 3,
+};
+
+enum ethtool_podl_pse_pw_d_status {
+	ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED = 2,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING = 3,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING = 4,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP = 5,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE = 6,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR = 7,
+};
+
+struct pse_control_config {
+	enum ethtool_podl_pse_admin_state admin_cotrol;
+};
+
+struct pse_control_status {
+	enum ethtool_podl_pse_admin_state podl_admin_state;
+	enum ethtool_podl_pse_pw_d_status podl_pw_status;
+};
+
+struct pse_reply_data {
+	struct ethnl_reply_data base;
+	struct pse_control_status status;
+};
+
+struct nf_loginfo {
+	u_int8_t type;
+	union {
+		struct {
+			u_int32_t copy_len;
+			u_int16_t group;
+			u_int16_t qthreshold;
+			u_int16_t flags;
+		} ulog;
+		struct {
+			u_int8_t level;
+			u_int8_t logflags;
+		} log;
+	} u;
+};
+
+struct nf_log_buf {
+	unsigned int count;
+	char buf[1020];
+};
+
+struct nf_hook_entries_rcu_head {
+	struct callback_head head;
+	void *allocation;
+};
+
+enum nf_nat_manip_type {
+	NF_NAT_MANIP_SRC = 0,
+	NF_NAT_MANIP_DST = 1,
+};
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+};
+
+struct nf_ct_hook {
+	int (*update)(struct net *, struct sk_buff *);
+	void (*destroy)(struct nf_conntrack *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
+};
+
+struct nfnl_ct_hook {
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
+};
+
+struct nf_queue_entry;
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct net_device *physin;
+	struct net_device *physout;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+struct nf_bridge_info {
+	enum {
+		BRNF_PROTO_UNCHANGED = 0,
+		BRNF_PROTO_8021Q = 1,
+		BRNF_PROTO_PPPOE = 2,
+	} orig_proto: 8;
+	u8 pkt_otherhost: 1;
+	u8 in_prerouting: 1;
+	u8 bridged_dnat: 1;
+	__u16 frag_max_size;
+	struct net_device *physindev;
+	struct net_device *physoutdev;
+	union {
+		__be32 ipv4_daddr;
+		struct in6_addr ipv6_daddr;
+		char neigh_header[8];
+	};
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
+};
+
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
+struct nf_sockopt_ops {
+	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void *, int *);
+	struct module *owner;
+};
+
+enum nfnetlink_groups {
+	NFNLGRP_NONE = 0,
+	NFNLGRP_CONNTRACK_NEW = 1,
+	NFNLGRP_CONNTRACK_UPDATE = 2,
+	NFNLGRP_CONNTRACK_DESTROY = 3,
+	NFNLGRP_CONNTRACK_EXP_NEW = 4,
+	NFNLGRP_CONNTRACK_EXP_UPDATE = 5,
+	NFNLGRP_CONNTRACK_EXP_DESTROY = 6,
+	NFNLGRP_NFTABLES = 7,
+	NFNLGRP_ACCT_QUOTA = 8,
+	NFNLGRP_NFTRACE = 9,
+	__NFNLGRP_MAX = 10,
+};
+
+struct nfgenmsg {
+	__u8 nfgen_family;
+	__u8 version;
+	__be16 res_id;
+};
+
+enum nfnl_batch_attributes {
+	NFNL_BATCH_UNSPEC = 0,
+	NFNL_BATCH_GENID = 1,
+	__NFNL_BATCH_MAX = 2,
+};
+
+struct nfnl_info {
+	struct net *net;
+	struct sock *sk;
+	const struct nlmsghdr *nlh;
+	const struct nfgenmsg *nfmsg;
+	struct netlink_ext_ack *extack;
+};
+
+enum nfnl_callback_type {
+	NFNL_CB_UNSPEC = 0,
+	NFNL_CB_MUTEX = 1,
+	NFNL_CB_RCU = 2,
+	NFNL_CB_BATCH = 3,
+};
+
+struct nfnl_callback {
+	int (*call)(struct sk_buff *, const struct nfnl_info *, const struct nlattr * const *);
+	const struct nla_policy *policy;
+	enum nfnl_callback_type type;
+	__u16 attr_count;
+};
+
+enum nfnl_abort_action {
+	NFNL_ABORT_NONE = 0,
+	NFNL_ABORT_AUTOLOAD = 1,
+	NFNL_ABORT_VALIDATE = 2,
+};
+
+struct nfnetlink_subsystem {
+	const char *name;
+	__u8 subsys_id;
+	__u8 cb_count;
+	const struct nfnl_callback *cb;
+	struct module *owner;
+	int (*commit)(struct net *, struct sk_buff *);
+	int (*abort)(struct net *, struct sk_buff *, enum nfnl_abort_action);
+	void (*cleanup)(struct net *);
+	bool (*valid_genid)(struct net *, u32);
+};
+
+struct nfnl_net {
+	struct sock *nfnl;
+};
+
+struct nfnl_err {
+	struct list_head head;
+	struct nlmsghdr *nlh;
+	int err;
+	struct netlink_ext_ack extack;
+};
+
+enum {
+	NFNL_BATCH_FAILURE = 1,
+	NFNL_BATCH_DONE = 2,
+	NFNL_BATCH_REPLAY = 4,
+};
+
+enum ip_conntrack_status {
+	IPS_EXPECTED_BIT = 0,
+	IPS_EXPECTED = 1,
+	IPS_SEEN_REPLY_BIT = 1,
+	IPS_SEEN_REPLY = 2,
+	IPS_ASSURED_BIT = 2,
+	IPS_ASSURED = 4,
+	IPS_CONFIRMED_BIT = 3,
+	IPS_CONFIRMED = 8,
+	IPS_SRC_NAT_BIT = 4,
+	IPS_SRC_NAT = 16,
+	IPS_DST_NAT_BIT = 5,
+	IPS_DST_NAT = 32,
+	IPS_NAT_MASK = 48,
+	IPS_SEQ_ADJUST_BIT = 6,
+	IPS_SEQ_ADJUST = 64,
+	IPS_SRC_NAT_DONE_BIT = 7,
+	IPS_SRC_NAT_DONE = 128,
+	IPS_DST_NAT_DONE_BIT = 8,
+	IPS_DST_NAT_DONE = 256,
+	IPS_NAT_DONE_MASK = 384,
+	IPS_DYING_BIT = 9,
+	IPS_DYING = 512,
+	IPS_FIXED_TIMEOUT_BIT = 10,
+	IPS_FIXED_TIMEOUT = 1024,
+	IPS_TEMPLATE_BIT = 11,
+	IPS_TEMPLATE = 2048,
+	IPS_UNTRACKED_BIT = 12,
+	IPS_UNTRACKED = 4096,
+	IPS_NAT_CLASH_BIT = 12,
+	IPS_NAT_CLASH = 4096,
+	IPS_HELPER_BIT = 13,
+	IPS_HELPER = 8192,
+	IPS_OFFLOAD_BIT = 14,
+	IPS_OFFLOAD = 16384,
+	IPS_HW_OFFLOAD_BIT = 15,
+	IPS_HW_OFFLOAD = 32768,
+	IPS_UNCHANGEABLE_MASK = 56313,
+	__IPS_MAX_BIT = 16,
+};
+
+enum ip_conntrack_events {
+	IPCT_NEW = 0,
+	IPCT_RELATED = 1,
+	IPCT_DESTROY = 2,
+	IPCT_REPLY = 3,
+	IPCT_ASSURED = 4,
+	IPCT_PROTOINFO = 5,
+	IPCT_HELPER = 6,
+	IPCT_MARK = 7,
+	IPCT_SEQADJ = 8,
+	IPCT_NATSEQADJ = 8,
+	IPCT_SECMARK = 9,
+	IPCT_LABEL = 10,
+	IPCT_SYNPROXY = 11,
+	__IPCT_MAX = 12,
+};
+
+struct nf_conntrack_net_ecache {
+	struct delayed_work dwork;
+	spinlock_t dying_lock;
+	struct hlist_nulls_head dying_list;
+};
+
+struct nf_conntrack_net {
+	atomic_t count;
+	unsigned int expect_count;
+	unsigned int users4;
+	unsigned int users6;
+	unsigned int users_bridge;
+	struct ctl_table_header *sysctl_header;
+	struct nf_conntrack_net_ecache ecache;
+};
+
+struct nf_conntrack_l4proto {
+	u_int8_t l4proto;
+	bool allow_clash;
+	u16 nlattr_size;
+	bool (*can_early_drop)(const struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, struct nlattr *, struct nf_conn *, bool);
+	int (*from_nlattr)(struct nlattr **, struct nf_conn *);
+	int (*tuple_to_nlattr)(struct sk_buff *, const struct nf_conntrack_tuple *);
+	unsigned int (*nlattr_tuple_size)();
+	int (*nlattr_to_tuple)(struct nlattr **, struct nf_conntrack_tuple *, u_int32_t);
+	const struct nla_policy *nla_policy;
+	struct {
+		int (*nlattr_to_obj)(struct nlattr **, struct net *, void *);
+		int (*obj_to_nlattr)(struct sk_buff *, const void *);
+		u16 obj_size;
+		u16 nlattr_max;
+		const struct nla_policy *nla_policy;
+	} ctnl_timeout;
+	void (*print_conntrack)(struct seq_file *, struct nf_conn *);
+};
+
+struct nf_ct_iter_data {
+	struct net *net;
+	void *data;
+	u32 portid;
+	int report;
+};
+
+struct nf_conntrack_expect_policy;
+
+struct nf_conntrack_helper {
+	struct hlist_node hnode;
+	char name[16];
+	refcount_t refcnt;
+	struct module *me;
+	const struct nf_conntrack_expect_policy *expect_policy;
+	struct nf_conntrack_tuple tuple;
+	int (*help)(struct sk_buff *, unsigned int, struct nf_conn *, enum ip_conntrack_info);
+	void (*destroy)(struct nf_conn *);
+	int (*from_nlattr)(struct nlattr *, struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, const struct nf_conn *);
+	unsigned int expect_class_max;
+	unsigned int flags;
+	unsigned int queue_num;
+	u16 data_len;
+	char nat_mod_name[16];
+};
+
+struct nf_conntrack_expect_policy {
+	unsigned int max_expected;
+	unsigned int timeout;
+	char name[16];
+};
+
+enum nf_ct_helper_flags {
+	NF_CT_HELPER_F_USERSPACE = 1,
+	NF_CT_HELPER_F_CONFIGURED = 2,
+};
+
+struct nf_conn_help {
+	struct nf_conntrack_helper *helper;
+	struct hlist_head expectations;
+	u8 expecting[4];
+	int: 32;
+	char data[32];
+};
+
+enum nf_ct_ecache_state {
+	NFCT_ECACHE_DESTROY_FAIL = 0,
+	NFCT_ECACHE_DESTROY_SENT = 1,
+};
+
+struct nf_conntrack_ecache {
+	long unsigned int cache;
+	u16 ctmask;
+	u16 expmask;
+	u32 missed;
+	u32 portid;
+};
+
+struct nf_conn_counter {
+	atomic64_t packets;
+	atomic64_t bytes;
+};
+
+struct nf_conn_acct {
+	struct nf_conn_counter counter[2];
+};
+
+struct nf_conn_tstamp {
+	u_int64_t start;
+	u_int64_t stop;
+};
+
+struct nf_ct_timeout {
+	__u16 l3num;
+	const struct nf_conntrack_l4proto *l4proto;
+	char data[0];
+};
+
+struct nf_conn_timeout {
+	struct nf_ct_timeout *timeout;
+};
+
+struct nf_ct_seqadj {
+	u32 correction_pos;
+	s32 offset_before;
+	s32 offset_after;
+};
+
+struct nf_conn_seqadj {
+	struct nf_ct_seqadj seq[2];
+};
+
+struct nf_conn_synproxy {
+	u32 isn;
+	u32 its;
+	u32 tsoff;
+};
+
+struct conntrack_gc_work {
+	struct delayed_work dwork;
+	u32 next_bucket;
+	u32 avg_timeout;
+	u32 count;
+	u32 start_time;
+	bool exiting;
+	bool early_drop;
+};
+
+enum ctattr_l4proto {
+	CTA_PROTO_UNSPEC = 0,
+	CTA_PROTO_NUM = 1,
+	CTA_PROTO_SRC_PORT = 2,
+	CTA_PROTO_DST_PORT = 3,
+	CTA_PROTO_ICMP_ID = 4,
+	CTA_PROTO_ICMP_TYPE = 5,
+	CTA_PROTO_ICMP_CODE = 6,
+	CTA_PROTO_ICMPV6_ID = 7,
+	CTA_PROTO_ICMPV6_TYPE = 8,
+	CTA_PROTO_ICMPV6_CODE = 9,
+	__CTA_PROTO_MAX = 10,
+};
+
+enum ip_conntrack_expect_events {
+	IPEXP_NEW = 0,
+	IPEXP_DESTROY = 1,
+};
+
+struct ct_expect_iter_state {
+	struct seq_net_private p;
+	unsigned int bucket;
+};
+
+struct ct_iter_state {
+	struct seq_net_private p;
+	struct hlist_nulls_head *hash;
+	unsigned int htable_size;
+	unsigned int bucket;
+	u_int64_t time_now;
+};
+
+enum nf_ct_sysctl_index {
+	NF_SYSCTL_CT_MAX = 0,
+	NF_SYSCTL_CT_COUNT = 1,
+	NF_SYSCTL_CT_BUCKETS = 2,
+	NF_SYSCTL_CT_CHECKSUM = 3,
+	NF_SYSCTL_CT_LOG_INVALID = 4,
+	NF_SYSCTL_CT_EXPECT_MAX = 5,
+	NF_SYSCTL_CT_ACCT = 6,
+	NF_SYSCTL_CT_EVENTS = 7,
+	NF_SYSCTL_CT_TIMESTAMP = 8,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC = 9,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_SENT = 10,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_RECV = 11,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_ESTABLISHED = 12,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_FIN_WAIT = 13,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE_WAIT = 14,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_LAST_ACK = 15,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_TIME_WAIT = 16,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE = 17,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_RETRANS = 18,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_UNACK = 19,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_OFFLOAD = 20,
+	NF_SYSCTL_CT_PROTO_TCP_LOOSE = 21,
+	NF_SYSCTL_CT_PROTO_TCP_LIBERAL = 22,
+	NF_SYSCTL_CT_PROTO_TCP_IGNORE_INVALID_RST = 23,
+	NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS = 24,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP = 25,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM = 26,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_OFFLOAD = 27,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP = 28,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6 = 29,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_CLOSED = 30,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_WAIT = 31,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_ECHOED = 32,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_ESTABLISHED = 33,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_SENT = 34,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_RECD = 35,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT = 36,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_HEARTBEAT_SENT = 37,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_REQUEST = 38,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_RESPOND = 39,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_PARTOPEN = 40,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_OPEN = 41,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSEREQ = 42,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSING = 43,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_TIMEWAIT = 44,
+	NF_SYSCTL_CT_PROTO_DCCP_LOOSE = 45,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE = 46,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM = 47,
+	__NF_SYSCTL_CT_LAST_SYSCTL = 48,
+};
+
+struct nf_ct_helper_expectfn {
+	struct list_head head;
+	const char *name;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct nf_conntrack_nat_helper {
+	struct list_head list;
+	char mod_name[16];
+	struct module *module;
+};
+
+enum nf_ip_hook_priorities {
+	NF_IP_PRI_FIRST = 2147483648,
+	NF_IP_PRI_RAW_BEFORE_DEFRAG = 4294966846,
+	NF_IP_PRI_CONNTRACK_DEFRAG = 4294966896,
+	NF_IP_PRI_RAW = 4294966996,
+	NF_IP_PRI_SELINUX_FIRST = 4294967071,
+	NF_IP_PRI_CONNTRACK = 4294967096,
+	NF_IP_PRI_MANGLE = 4294967146,
+	NF_IP_PRI_NAT_DST = 4294967196,
+	NF_IP_PRI_FILTER = 0,
+	NF_IP_PRI_SECURITY = 50,
+	NF_IP_PRI_NAT_SRC = 100,
+	NF_IP_PRI_SELINUX_LAST = 225,
+	NF_IP_PRI_CONNTRACK_HELPER = 300,
+	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
+	NF_IP_PRI_LAST = 2147483647,
+};
+
+struct nf_ct_bridge_info {
+	struct nf_hook_ops *ops;
+	unsigned int ops_size;
+	struct module *me;
+};
+
+enum nf_ip6_hook_priorities {
+	NF_IP6_PRI_FIRST = 2147483648,
+	NF_IP6_PRI_RAW_BEFORE_DEFRAG = 4294966846,
+	NF_IP6_PRI_CONNTRACK_DEFRAG = 4294966896,
+	NF_IP6_PRI_RAW = 4294966996,
+	NF_IP6_PRI_SELINUX_FIRST = 4294967071,
+	NF_IP6_PRI_CONNTRACK = 4294967096,
+	NF_IP6_PRI_MANGLE = 4294967146,
+	NF_IP6_PRI_NAT_DST = 4294967196,
+	NF_IP6_PRI_FILTER = 0,
+	NF_IP6_PRI_SECURITY = 50,
+	NF_IP6_PRI_NAT_SRC = 100,
+	NF_IP6_PRI_SELINUX_LAST = 225,
+	NF_IP6_PRI_CONNTRACK_HELPER = 300,
+	NF_IP6_PRI_LAST = 2147483647,
+};
+
+enum ctattr_timeout_generic {
+	CTA_TIMEOUT_GENERIC_UNSPEC = 0,
+	CTA_TIMEOUT_GENERIC_TIMEOUT = 1,
+	__CTA_TIMEOUT_GENERIC_MAX = 2,
+};
+
+struct nf_ct_tcp_flags {
+	__u8 flags;
+	__u8 mask;
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+enum nf_ct_tcp_action {
+	NFCT_TCP_IGNORE = 0,
+	NFCT_TCP_INVALID = 1,
+	NFCT_TCP_ACCEPT = 2,
+};
+
+enum tcp_bit_set {
+	TCP_SYN_SET = 0,
+	TCP_SYNACK_SET = 1,
+	TCP_FIN_SET = 2,
+	TCP_ACK_SET = 3,
+	TCP_RST_SET = 4,
+	TCP_NONE_SET = 5,
+};
+
+enum ctattr_protoinfo {
+	CTA_PROTOINFO_UNSPEC = 0,
+	CTA_PROTOINFO_TCP = 1,
+	CTA_PROTOINFO_DCCP = 2,
+	CTA_PROTOINFO_SCTP = 3,
+	__CTA_PROTOINFO_MAX = 4,
+};
+
+enum ctattr_protoinfo_tcp {
+	CTA_PROTOINFO_TCP_UNSPEC = 0,
+	CTA_PROTOINFO_TCP_STATE = 1,
+	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2,
+	CTA_PROTOINFO_TCP_WSCALE_REPLY = 3,
+	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL = 4,
+	CTA_PROTOINFO_TCP_FLAGS_REPLY = 5,
+	__CTA_PROTOINFO_TCP_MAX = 6,
+};
+
+enum ctattr_timeout_tcp {
+	CTA_TIMEOUT_TCP_UNSPEC = 0,
+	CTA_TIMEOUT_TCP_SYN_SENT = 1,
+	CTA_TIMEOUT_TCP_SYN_RECV = 2,
+	CTA_TIMEOUT_TCP_ESTABLISHED = 3,
+	CTA_TIMEOUT_TCP_FIN_WAIT = 4,
+	CTA_TIMEOUT_TCP_CLOSE_WAIT = 5,
+	CTA_TIMEOUT_TCP_LAST_ACK = 6,
+	CTA_TIMEOUT_TCP_TIME_WAIT = 7,
+	CTA_TIMEOUT_TCP_CLOSE = 8,
+	CTA_TIMEOUT_TCP_SYN_SENT2 = 9,
+	CTA_TIMEOUT_TCP_RETRANS = 10,
+	CTA_TIMEOUT_TCP_UNACK = 11,
+	__CTA_TIMEOUT_TCP_MAX = 12,
+};
+
+enum ctattr_timeout_udp {
+	CTA_TIMEOUT_UDP_UNSPEC = 0,
+	CTA_TIMEOUT_UDP_UNREPLIED = 1,
+	CTA_TIMEOUT_UDP_REPLIED = 2,
+	__CTA_TIMEOUT_UDP_MAX = 3,
+};
+
+enum ctattr_timeout_icmp {
+	CTA_TIMEOUT_ICMP_UNSPEC = 0,
+	CTA_TIMEOUT_ICMP_TIMEOUT = 1,
+	__CTA_TIMEOUT_ICMP_MAX = 2,
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+enum ctattr_timeout_icmpv6 {
+	CTA_TIMEOUT_ICMPV6_UNSPEC = 0,
+	CTA_TIMEOUT_ICMPV6_TIMEOUT = 1,
+	__CTA_TIMEOUT_ICMPV6_MAX = 2,
+};
+
+enum retry_state {
+	STATE_CONGESTED = 0,
+	STATE_RESTART = 1,
+	STATE_DONE = 2,
+};
+
+struct nf_ct_timeout_hooks {
+	struct nf_ct_timeout * (*timeout_find_get)(struct net *, const char *);
+	void (*timeout_put)(struct nf_ct_timeout *);
+};
+
+enum ct_dccp_roles {
+	CT_DCCP_ROLE_CLIENT = 0,
+	CT_DCCP_ROLE_SERVER = 1,
+	__CT_DCCP_ROLE_MAX = 2,
+};
+
+struct dccp_hdr {
+	__be16 dccph_sport;
+	__be16 dccph_dport;
+	__u8 dccph_doff;
+	__u8 dccph_cscov: 4;
+	__u8 dccph_ccval: 4;
+	__sum16 dccph_checksum;
+	__u8 dccph_x: 1;
+	__u8 dccph_type: 4;
+	__u8 dccph_reserved: 3;
+	__u8 dccph_seq2;
+	__be16 dccph_seq;
+};
+
+struct dccp_hdr_ext {
+	__be32 dccph_seq_low;
+};
+
+struct dccp_hdr_ack_bits {
+	__be16 dccph_reserved1;
+	__be16 dccph_ack_nr_high;
+	__be32 dccph_ack_nr_low;
+};
+
+enum dccp_pkt_type {
+	DCCP_PKT_REQUEST = 0,
+	DCCP_PKT_RESPONSE = 1,
+	DCCP_PKT_DATA = 2,
+	DCCP_PKT_ACK = 3,
+	DCCP_PKT_DATAACK = 4,
+	DCCP_PKT_CLOSEREQ = 5,
+	DCCP_PKT_CLOSE = 6,
+	DCCP_PKT_RESET = 7,
+	DCCP_PKT_SYNC = 8,
+	DCCP_PKT_SYNCACK = 9,
+	DCCP_PKT_INVALID = 10,
+};
+
+enum ctattr_protoinfo_dccp {
+	CTA_PROTOINFO_DCCP_UNSPEC = 0,
+	CTA_PROTOINFO_DCCP_STATE = 1,
+	CTA_PROTOINFO_DCCP_ROLE = 2,
+	CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ = 3,
+	CTA_PROTOINFO_DCCP_PAD = 4,
+	__CTA_PROTOINFO_DCCP_MAX = 5,
+};
+
+enum ctattr_timeout_dccp {
+	CTA_TIMEOUT_DCCP_UNSPEC = 0,
+	CTA_TIMEOUT_DCCP_REQUEST = 1,
+	CTA_TIMEOUT_DCCP_RESPOND = 2,
+	CTA_TIMEOUT_DCCP_PARTOPEN = 3,
+	CTA_TIMEOUT_DCCP_OPEN = 4,
+	CTA_TIMEOUT_DCCP_CLOSEREQ = 5,
+	CTA_TIMEOUT_DCCP_CLOSING = 6,
+	CTA_TIMEOUT_DCCP_TIMEWAIT = 7,
+	__CTA_TIMEOUT_DCCP_MAX = 8,
+};
+
+struct sctphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 vtag;
+	__le32 checksum;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+enum sctp_cid {
+	SCTP_CID_DATA = 0,
+	SCTP_CID_INIT = 1,
+	SCTP_CID_INIT_ACK = 2,
+	SCTP_CID_SACK = 3,
+	SCTP_CID_HEARTBEAT = 4,
+	SCTP_CID_HEARTBEAT_ACK = 5,
+	SCTP_CID_ABORT = 6,
+	SCTP_CID_SHUTDOWN = 7,
+	SCTP_CID_SHUTDOWN_ACK = 8,
+	SCTP_CID_ERROR = 9,
+	SCTP_CID_COOKIE_ECHO = 10,
+	SCTP_CID_COOKIE_ACK = 11,
+	SCTP_CID_ECN_ECNE = 12,
+	SCTP_CID_ECN_CWR = 13,
+	SCTP_CID_SHUTDOWN_COMPLETE = 14,
+	SCTP_CID_AUTH = 15,
+	SCTP_CID_I_DATA = 64,
+	SCTP_CID_FWD_TSN = 192,
+	SCTP_CID_ASCONF = 193,
+	SCTP_CID_I_FWD_TSN = 194,
+	SCTP_CID_ASCONF_ACK = 128,
+	SCTP_CID_RECONF = 130,
+	SCTP_CID_PAD = 132,
+};
+
+enum {
+	SCTP_CHUNK_FLAG_T = 1,
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+	__u8 params[0];
+};
+
+enum ctattr_protoinfo_sctp {
+	CTA_PROTOINFO_SCTP_UNSPEC = 0,
+	CTA_PROTOINFO_SCTP_STATE = 1,
+	CTA_PROTOINFO_SCTP_VTAG_ORIGINAL = 2,
+	CTA_PROTOINFO_SCTP_VTAG_REPLY = 3,
+	__CTA_PROTOINFO_SCTP_MAX = 4,
+};
+
+enum ctattr_timeout_sctp {
+	CTA_TIMEOUT_SCTP_UNSPEC = 0,
+	CTA_TIMEOUT_SCTP_CLOSED = 1,
+	CTA_TIMEOUT_SCTP_COOKIE_WAIT = 2,
+	CTA_TIMEOUT_SCTP_COOKIE_ECHOED = 3,
+	CTA_TIMEOUT_SCTP_ESTABLISHED = 4,
+	CTA_TIMEOUT_SCTP_SHUTDOWN_SENT = 5,
+	CTA_TIMEOUT_SCTP_SHUTDOWN_RECD = 6,
+	CTA_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT = 7,
+	CTA_TIMEOUT_SCTP_HEARTBEAT_SENT = 8,
+	CTA_TIMEOUT_SCTP_HEARTBEAT_ACKED = 9,
+	__CTA_TIMEOUT_SCTP_MAX = 10,
+};
+
+enum {
+	BPF_F_CURRENT_NETNS = 4294967295,
+};
+
+struct nf_conn___init {
+	struct nf_conn ct;
+};
+
+struct bpf_ct_opts {
+	s32 netns_id;
+	s32 error;
+	u8 l4proto;
+	u8 dir;
+	u8 reserved[2];
+};
+
+enum {
+	NF_BPF_CT_OPTS_SZ = 12,
+};
+
+struct nf_ct_gre_keymap {
+	struct list_head list;
+	struct nf_conntrack_tuple tuple;
+	struct callback_head rcu;
+};
+
+enum pptp_ctrlsess_state {
+	PPTP_SESSION_NONE = 0,
+	PPTP_SESSION_ERROR = 1,
+	PPTP_SESSION_STOPREQ = 2,
+	PPTP_SESSION_REQUESTED = 3,
+	PPTP_SESSION_CONFIRMED = 4,
+};
+
+enum pptp_ctrlcall_state {
+	PPTP_CALL_NONE = 0,
+	PPTP_CALL_ERROR = 1,
+	PPTP_CALL_OUT_REQ = 2,
+	PPTP_CALL_OUT_CONF = 3,
+	PPTP_CALL_IN_REQ = 4,
+	PPTP_CALL_IN_REP = 5,
+	PPTP_CALL_IN_CONF = 6,
+	PPTP_CALL_CLEAR_REQ = 7,
+};
+
+struct nf_ct_pptp_master {
+	enum pptp_ctrlsess_state sstate;
+	enum pptp_ctrlcall_state cstate;
+	__be16 pac_call_id;
+	__be16 pns_call_id;
+	struct nf_ct_gre_keymap *keymap[2];
+};
+
+enum ctattr_timeout_gre {
+	CTA_TIMEOUT_GRE_UNSPEC = 0,
+	CTA_TIMEOUT_GRE_UNREPLIED = 1,
+	CTA_TIMEOUT_GRE_REPLIED = 2,
+	__CTA_TIMEOUT_GRE_MAX = 3,
+};
+
+enum cntl_msg_types {
+	IPCTNL_MSG_CT_NEW = 0,
+	IPCTNL_MSG_CT_GET = 1,
+	IPCTNL_MSG_CT_DELETE = 2,
+	IPCTNL_MSG_CT_GET_CTRZERO = 3,
+	IPCTNL_MSG_CT_GET_STATS_CPU = 4,
+	IPCTNL_MSG_CT_GET_STATS = 5,
+	IPCTNL_MSG_CT_GET_DYING = 6,
+	IPCTNL_MSG_CT_GET_UNCONFIRMED = 7,
+	IPCTNL_MSG_MAX = 8,
+};
+
+enum ctnl_exp_msg_types {
+	IPCTNL_MSG_EXP_NEW = 0,
+	IPCTNL_MSG_EXP_GET = 1,
+	IPCTNL_MSG_EXP_DELETE = 2,
+	IPCTNL_MSG_EXP_GET_STATS_CPU = 3,
+	IPCTNL_MSG_EXP_MAX = 4,
+};
+
+enum ctattr_type {
+	CTA_UNSPEC = 0,
+	CTA_TUPLE_ORIG = 1,
+	CTA_TUPLE_REPLY = 2,
+	CTA_STATUS = 3,
+	CTA_PROTOINFO = 4,
+	CTA_HELP = 5,
+	CTA_NAT_SRC = 6,
+	CTA_TIMEOUT = 7,
+	CTA_MARK = 8,
+	CTA_COUNTERS_ORIG = 9,
+	CTA_COUNTERS_REPLY = 10,
+	CTA_USE = 11,
+	CTA_ID = 12,
+	CTA_NAT_DST = 13,
+	CTA_TUPLE_MASTER = 14,
+	CTA_SEQ_ADJ_ORIG = 15,
+	CTA_NAT_SEQ_ADJ_ORIG = 15,
+	CTA_SEQ_ADJ_REPLY = 16,
+	CTA_NAT_SEQ_ADJ_REPLY = 16,
+	CTA_SECMARK = 17,
+	CTA_ZONE = 18,
+	CTA_SECCTX = 19,
+	CTA_TIMESTAMP = 20,
+	CTA_MARK_MASK = 21,
+	CTA_LABELS = 22,
+	CTA_LABELS_MASK = 23,
+	CTA_SYNPROXY = 24,
+	CTA_FILTER = 25,
+	CTA_STATUS_MASK = 26,
+	__CTA_MAX = 27,
+};
+
+enum ctattr_tuple {
+	CTA_TUPLE_UNSPEC = 0,
+	CTA_TUPLE_IP = 1,
+	CTA_TUPLE_PROTO = 2,
+	CTA_TUPLE_ZONE = 3,
+	__CTA_TUPLE_MAX = 4,
+};
+
+enum ctattr_ip {
+	CTA_IP_UNSPEC = 0,
+	CTA_IP_V4_SRC = 1,
+	CTA_IP_V4_DST = 2,
+	CTA_IP_V6_SRC = 3,
+	CTA_IP_V6_DST = 4,
+	__CTA_IP_MAX = 5,
+};
+
+enum ctattr_counters {
+	CTA_COUNTERS_UNSPEC = 0,
+	CTA_COUNTERS_PACKETS = 1,
+	CTA_COUNTERS_BYTES = 2,
+	CTA_COUNTERS32_PACKETS = 3,
+	CTA_COUNTERS32_BYTES = 4,
+	CTA_COUNTERS_PAD = 5,
+	__CTA_COUNTERS_MAX = 6,
+};
+
+enum ctattr_tstamp {
+	CTA_TIMESTAMP_UNSPEC = 0,
+	CTA_TIMESTAMP_START = 1,
+	CTA_TIMESTAMP_STOP = 2,
+	CTA_TIMESTAMP_PAD = 3,
+	__CTA_TIMESTAMP_MAX = 4,
+};
+
+enum ctattr_seqadj {
+	CTA_SEQADJ_UNSPEC = 0,
+	CTA_SEQADJ_CORRECTION_POS = 1,
+	CTA_SEQADJ_OFFSET_BEFORE = 2,
+	CTA_SEQADJ_OFFSET_AFTER = 3,
+	__CTA_SEQADJ_MAX = 4,
+};
+
+enum ctattr_synproxy {
+	CTA_SYNPROXY_UNSPEC = 0,
+	CTA_SYNPROXY_ISN = 1,
+	CTA_SYNPROXY_ITS = 2,
+	CTA_SYNPROXY_TSOFF = 3,
+	__CTA_SYNPROXY_MAX = 4,
+};
+
+enum ctattr_expect {
+	CTA_EXPECT_UNSPEC = 0,
+	CTA_EXPECT_MASTER = 1,
+	CTA_EXPECT_TUPLE = 2,
+	CTA_EXPECT_MASK = 3,
+	CTA_EXPECT_TIMEOUT = 4,
+	CTA_EXPECT_ID = 5,
+	CTA_EXPECT_HELP_NAME = 6,
+	CTA_EXPECT_ZONE = 7,
+	CTA_EXPECT_FLAGS = 8,
+	CTA_EXPECT_CLASS = 9,
+	CTA_EXPECT_NAT = 10,
+	CTA_EXPECT_FN = 11,
+	__CTA_EXPECT_MAX = 12,
+};
+
+enum ctattr_expect_nat {
+	CTA_EXPECT_NAT_UNSPEC = 0,
+	CTA_EXPECT_NAT_DIR = 1,
+	CTA_EXPECT_NAT_TUPLE = 2,
+	__CTA_EXPECT_NAT_MAX = 3,
+};
+
+enum ctattr_help {
+	CTA_HELP_UNSPEC = 0,
+	CTA_HELP_NAME = 1,
+	CTA_HELP_INFO = 2,
+	__CTA_HELP_MAX = 3,
+};
+
+enum ctattr_stats_cpu {
+	CTA_STATS_UNSPEC = 0,
+	CTA_STATS_SEARCHED = 1,
+	CTA_STATS_FOUND = 2,
+	CTA_STATS_NEW = 3,
+	CTA_STATS_INVALID = 4,
+	CTA_STATS_IGNORE = 5,
+	CTA_STATS_DELETE = 6,
+	CTA_STATS_DELETE_LIST = 7,
+	CTA_STATS_INSERT = 8,
+	CTA_STATS_INSERT_FAILED = 9,
+	CTA_STATS_DROP = 10,
+	CTA_STATS_EARLY_DROP = 11,
+	CTA_STATS_ERROR = 12,
+	CTA_STATS_SEARCH_RESTART = 13,
+	CTA_STATS_CLASH_RESOLVE = 14,
+	CTA_STATS_CHAIN_TOOLONG = 15,
+	__CTA_STATS_MAX = 16,
+};
+
+enum ctattr_stats_global {
+	CTA_STATS_GLOBAL_UNSPEC = 0,
+	CTA_STATS_GLOBAL_ENTRIES = 1,
+	CTA_STATS_GLOBAL_MAX_ENTRIES = 2,
+	__CTA_STATS_GLOBAL_MAX = 3,
+};
+
+enum ctattr_expect_stats {
+	CTA_STATS_EXP_UNSPEC = 0,
+	CTA_STATS_EXP_NEW = 1,
+	CTA_STATS_EXP_CREATE = 2,
+	CTA_STATS_EXP_DELETE = 3,
+	__CTA_STATS_EXP_MAX = 4,
+};
+
+enum ctattr_filter {
+	CTA_FILTER_UNSPEC = 0,
+	CTA_FILTER_ORIG_FLAGS = 1,
+	CTA_FILTER_REPLY_FLAGS = 2,
+	__CTA_FILTER_MAX = 3,
+};
+
+struct ctnetlink_list_dump_ctx {
+	struct nf_conn *last;
+	unsigned int cpu;
+	bool done;
+};
+
+struct ctnetlink_filter_u32 {
+	u32 val;
+	u32 mask;
+};
+
+struct ctnetlink_filter {
+	u8 family;
+	u_int32_t orig_flags;
+	u_int32_t reply_flags;
+	struct nf_conntrack_tuple orig;
+	struct nf_conntrack_tuple reply;
+	struct nf_conntrack_zone zone;
+	struct ctnetlink_filter_u32 mark;
+	struct ctnetlink_filter_u32 status;
+};
+
+enum ctnl_timeout_msg_types {
+	IPCTNL_MSG_TIMEOUT_NEW = 0,
+	IPCTNL_MSG_TIMEOUT_GET = 1,
+	IPCTNL_MSG_TIMEOUT_DELETE = 2,
+	IPCTNL_MSG_TIMEOUT_DEFAULT_SET = 3,
+	IPCTNL_MSG_TIMEOUT_DEFAULT_GET = 4,
+	IPCTNL_MSG_TIMEOUT_MAX = 5,
+};
+
+enum ctattr_timeout {
+	CTA_TIMEOUT_UNSPEC = 0,
+	CTA_TIMEOUT_NAME = 1,
+	CTA_TIMEOUT_L3PROTO = 2,
+	CTA_TIMEOUT_L4PROTO = 3,
+	CTA_TIMEOUT_DATA = 4,
+	CTA_TIMEOUT_USE = 5,
+	__CTA_TIMEOUT_MAX = 6,
+};
+
+struct ctnl_timeout {
+	struct list_head head;
+	struct list_head free_head;
+	struct callback_head callback_head;
+	refcount_t refcnt;
+	char name[32];
+	struct nf_ct_timeout timeout;
+};
+
+struct nfct_timeout_pernet {
+	struct list_head nfct_timeout_list;
+	struct list_head nfct_timeout_freelist;
+};
+
+enum nf_ct_ftp_type {
+	NF_CT_FTP_PORT = 0,
+	NF_CT_FTP_PASV = 1,
+	NF_CT_FTP_EPRT = 2,
+	NF_CT_FTP_EPSV = 3,
+};
+
+struct nf_ct_ftp_master {
+	u_int32_t seq_aft_nl[4];
+	u_int16_t seq_aft_nl_num[2];
+	u_int16_t flags[2];
+};
+
+struct ftp_search {
+	const char *pattern;
+	size_t plen;
+	char skip;
+	char term;
+	enum nf_ct_ftp_type ftptype;
+	int (*getnum)(const char *, size_t, struct nf_conntrack_man *, char, unsigned int *);
+};
+
+struct pptp_pkt_hdr {
+	__u16 packetLength;
+	__be16 packetType;
+	__be32 magicCookie;
+};
+
+struct PptpControlHeader {
+	__be16 messageType;
+	__u16 reserved;
+};
+
+struct PptpStartSessionRequest {
+	__be16 protocolVersion;
+	__u16 reserved1;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStartSessionReply {
+	__be16 protocolVersion;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStopSessionRequest {
+	__u8 reason;
+	__u8 reserved1;
+	__u16 reserved2;
+};
+
+struct PptpStopSessionReply {
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__u16 reserved1;
+};
+
+struct PptpOutCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 minBPS;
+	__be32 maxBPS;
+	__be32 bearerType;
+	__be32 framingType;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be16 phoneNumberLength;
+	__u16 reserved1;
+	__u8 phoneNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpOutCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 physChannelID;
+};
+
+struct PptpInCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 callBearerType;
+	__be32 physChannelID;
+	__be16 dialedNumberLength;
+	__be16 dialingNumberLength;
+	__u8 dialedNumber[64];
+	__u8 dialingNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpInCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__u16 reserved;
+};
+
+struct PptpInCallConnected {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 callFramingType;
+};
+
+struct PptpClearCallRequest {
+	__be16 callID;
+	__u16 reserved;
+};
+
+struct PptpCallDisconnectNotify {
+	__be16 callID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__u16 reserved;
+	__u8 callStatistics[128];
+};
+
+struct PptpWanErrorNotify {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 crcErrors;
+	__be32 framingErrors;
+	__be32 hardwareOverRuns;
+	__be32 bufferOverRuns;
+	__be32 timeoutErrors;
+	__be32 alignmentErrors;
+};
+
+struct PptpSetLinkInfo {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 sendAccm;
+	__be32 recvAccm;
+};
+
+union pptp_ctrl_union {
+	struct PptpStartSessionRequest sreq;
+	struct PptpStartSessionReply srep;
+	struct PptpStopSessionRequest streq;
+	struct PptpStopSessionReply strep;
+	struct PptpOutCallRequest ocreq;
+	struct PptpOutCallReply ocack;
+	struct PptpInCallRequest icreq;
+	struct PptpInCallReply icack;
+	struct PptpInCallConnected iccon;
+	struct PptpClearCallRequest clrreq;
+	struct PptpCallDisconnectNotify disc;
+	struct PptpWanErrorNotify wanerr;
+	struct PptpSetLinkInfo setlink;
+};
+
+struct nf_nat_pptp_hook {
+	int (*outbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	int (*inbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	void (*exp_gre)(struct nf_conntrack_expect *, struct nf_conntrack_expect *);
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct nf_conn_nat;
+
+struct ip_esp_hdr {
+	__be32 spi;
+	__be32 seq_no;
+	__u8 enc_data[0];
+};
+
+struct arppayload {
+	unsigned char mac_src[6];
+	unsigned char ip_src[4];
+	unsigned char mac_dst[6];
+	unsigned char ip_dst[4];
+};
+
+struct nf_log_buf;
+
+struct tftphdr {
+	__be16 opcode;
+};
+
+struct nf_nat_pptp {
+	__be16 pns_call_id;
+	__be16 pac_call_id;
+};
+
+struct nf_nat_range2 {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+	union nf_conntrack_man_proto base_proto;
+};
+
+union nf_conntrack_nat_help {
+	struct nf_nat_pptp nat_pptp_info;
+};
+
+struct nf_conn_nat {
+	union nf_conntrack_nat_help help;
+	int masq_index;
+};
+
+struct nf_nat_lookup_hook_priv {
+	struct nf_hook_entries *entries;
+	struct callback_head callback_head;
+};
+
+struct nf_nat_hooks_net {
+	struct nf_hook_ops *nat_hook_ops;
+	unsigned int users;
+};
+
+struct nat_net {
+	struct nf_nat_hooks_net nat_proto_net[11];
+};
+
+struct nf_nat_proto_clean {
+	u8 l3proto;
+	u8 l4proto;
+};
+
+enum ctattr_nat {
+	CTA_NAT_UNSPEC = 0,
+	CTA_NAT_V4_MINIP = 1,
+	CTA_NAT_V4_MAXIP = 2,
+	CTA_NAT_PROTO = 3,
+	CTA_NAT_V6_MINIP = 4,
+	CTA_NAT_V6_MAXIP = 5,
+	__CTA_NAT_MAX = 6,
+};
+
+enum ctattr_protonat {
+	CTA_PROTONAT_UNSPEC = 0,
+	CTA_PROTONAT_PORT_MIN = 1,
+	CTA_PROTONAT_PORT_MAX = 2,
+	__CTA_PROTONAT_MAX = 3,
+};
+
+struct nf_nat_ipv4_range {
+	unsigned int flags;
+	__be32 min_ip;
+	__be32 max_ip;
+	union nf_conntrack_man_proto min;
+	union nf_conntrack_man_proto max;
+};
+
+struct nf_nat_ipv4_multi_range_compat {
+	unsigned int rangesize;
+	struct nf_nat_ipv4_range range[1];
+};
+
+struct masq_dev_work {
+	struct work_struct work;
+	struct net *net;
+	netns_tracker ns_tracker;
+	union nf_inet_addr addr;
+	int ifindex;
+	int (*iter)(struct nf_conn *, void *);
+};
+
+enum nft_registers {
+	NFT_REG_VERDICT = 0,
+	NFT_REG_1 = 1,
+	NFT_REG_2 = 2,
+	NFT_REG_3 = 3,
+	NFT_REG_4 = 4,
+	__NFT_REG_MAX = 5,
+	NFT_REG32_00 = 8,
+	NFT_REG32_01 = 9,
+	NFT_REG32_02 = 10,
+	NFT_REG32_03 = 11,
+	NFT_REG32_04 = 12,
+	NFT_REG32_05 = 13,
+	NFT_REG32_06 = 14,
+	NFT_REG32_07 = 15,
+	NFT_REG32_08 = 16,
+	NFT_REG32_09 = 17,
+	NFT_REG32_10 = 18,
+	NFT_REG32_11 = 19,
+	NFT_REG32_12 = 20,
+	NFT_REG32_13 = 21,
+	NFT_REG32_14 = 22,
+	NFT_REG32_15 = 23,
+};
+
+enum nft_verdicts {
+	NFT_CONTINUE = 4294967295,
+	NFT_BREAK = 4294967294,
+	NFT_JUMP = 4294967293,
+	NFT_GOTO = 4294967292,
+	NFT_RETURN = 4294967291,
+};
+
+enum nft_payload_bases {
+	NFT_PAYLOAD_LL_HEADER = 0,
+	NFT_PAYLOAD_NETWORK_HEADER = 1,
+	NFT_PAYLOAD_TRANSPORT_HEADER = 2,
+	NFT_PAYLOAD_INNER_HEADER = 3,
+	NFT_PAYLOAD_TUN_HEADER = 4,
+};
+
+enum nft_trace_types {
+	NFT_TRACETYPE_UNSPEC = 0,
+	NFT_TRACETYPE_POLICY = 1,
+	NFT_TRACETYPE_RETURN = 2,
+	NFT_TRACETYPE_RULE = 3,
+	__NFT_TRACETYPE_MAX = 4,
+};
+
+enum {
+	NFT_PKTINFO_L4PROTO = 1,
+	NFT_PKTINFO_INNER = 2,
+	NFT_PKTINFO_INNER_FULL = 4,
+};
+
+struct nft_pktinfo {
+	struct sk_buff *skb;
+	const struct nf_hook_state *state;
+	u8 flags;
+	u8 tprot;
+	u16 fragoff;
+	u16 thoff;
+	u16 inneroff;
+};
+
+struct nft_chain;
+
+struct nft_verdict {
+	u32 code;
+	struct nft_chain *chain;
+};
+
+struct nft_rule_blob;
+
+struct nft_table;
+
+struct nft_chain {
+	struct nft_rule_blob *blob_gen_0;
+	struct nft_rule_blob *blob_gen_1;
+	struct list_head rules;
+	struct list_head list;
+	struct rhlist_head rhlhead;
+	struct nft_table *table;
+	u64 handle;
+	u32 use;
+	u8 flags: 5;
+	u8 bound: 1;
+	u8 genmask: 2;
+	char *name;
+	u16 udlen;
+	u8 *udata;
+	struct nft_rule_blob *blob_next;
+};
+
+struct nft_data {
+	union {
+		u32 data[4];
+		struct nft_verdict verdict;
+	};
+};
+
+struct nft_regs {
+	union {
+		u32 data[20];
+		struct nft_verdict verdict;
+	};
+};
+
+struct nft_expr_ops;
+
+struct nft_expr {
+	const struct nft_expr_ops *ops;
+	unsigned char data[0];
+};
+
+struct nft_regs_track {
+	struct {
+		const struct nft_expr *selector;
+		const struct nft_expr *bitwise;
+		u8 num_reg;
+	} regs[20];
+	const struct nft_expr *cur;
+	const struct nft_expr *last;
+};
+
+struct nft_ctx {
+	struct net *net;
+	struct nft_table *table;
+	struct nft_chain *chain;
+	const struct nlattr * const *nla;
+	u32 portid;
+	u32 seq;
+	u16 flags;
+	u8 family;
+	u8 level;
+	bool report;
+};
+
+struct nft_table {
+	struct list_head list;
+	struct rhltable chains_ht;
+	struct list_head chains;
+	struct list_head sets;
+	struct list_head objects;
+	struct list_head flowtables;
+	u64 hgenerator;
+	u64 handle;
+	u32 use;
+	u16 family: 6;
+	u16 flags: 8;
+	u16 genmask: 2;
+	u32 nlpid;
+	char *name;
+	u16 udlen;
+	u8 *udata;
+};
+
+enum nft_trans_phase {
+	NFT_TRANS_PREPARE = 0,
+	NFT_TRANS_ABORT = 1,
+	NFT_TRANS_COMMIT = 2,
+	NFT_TRANS_RELEASE = 3,
+};
+
+struct nft_offload_ctx;
+
+struct nft_flow_rule;
+
+struct nft_expr_type;
+
+struct nft_expr_ops {
+	void (*eval)(const struct nft_expr *, struct nft_regs *, const struct nft_pktinfo *);
+	int (*clone)(struct nft_expr *, const struct nft_expr *);
+	unsigned int size;
+	int (*init)(const struct nft_ctx *, const struct nft_expr *, const struct nlattr * const *);
+	void (*activate)(const struct nft_ctx *, const struct nft_expr *);
+	void (*deactivate)(const struct nft_ctx *, const struct nft_expr *, enum nft_trans_phase);
+	void (*destroy)(const struct nft_ctx *, const struct nft_expr *);
+	void (*destroy_clone)(const struct nft_ctx *, const struct nft_expr *);
+	int (*dump)(struct sk_buff *, const struct nft_expr *, bool);
+	int (*validate)(const struct nft_ctx *, const struct nft_expr *, const struct nft_data **);
+	bool (*reduce)(struct nft_regs_track *, const struct nft_expr *);
+	bool (*gc)(struct net *, const struct nft_expr *);
+	int (*offload)(struct nft_offload_ctx *, struct nft_flow_rule *, const struct nft_expr *);
+	bool (*offload_action)(const struct nft_expr *);
+	void (*offload_stats)(struct nft_expr *, const struct flow_stats *);
+	const struct nft_expr_type *type;
+	void *data;
+};
+
+enum nft_set_extensions {
+	NFT_SET_EXT_KEY = 0,
+	NFT_SET_EXT_KEY_END = 1,
+	NFT_SET_EXT_DATA = 2,
+	NFT_SET_EXT_FLAGS = 3,
+	NFT_SET_EXT_TIMEOUT = 4,
+	NFT_SET_EXT_EXPIRATION = 5,
+	NFT_SET_EXT_USERDATA = 6,
+	NFT_SET_EXT_EXPRESSIONS = 7,
+	NFT_SET_EXT_OBJREF = 8,
+	NFT_SET_EXT_NUM = 9,
+};
+
+struct nft_expr_type {
+	const struct nft_expr_ops * (*select_ops)(const struct nft_ctx *, const struct nlattr * const *);
+	void (*release_ops)(const struct nft_expr_ops *);
+	const struct nft_expr_ops *ops;
+	const struct nft_expr_ops *inner_ops;
+	struct list_head list;
+	const char *name;
+	struct module *owner;
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 family;
+	u8 flags;
+};
+
+struct nft_rule_dp {
+	u64 is_last: 1;
+	u64 dlen: 12;
+	u64 handle: 42;
+	short: 9;
+	unsigned char data[0];
+};
+
+struct nft_rule_blob {
+	long unsigned int size;
+	unsigned char data[0];
+};
+
+enum nft_chain_types {
+	NFT_CHAIN_T_DEFAULT = 0,
+	NFT_CHAIN_T_ROUTE = 1,
+	NFT_CHAIN_T_NAT = 2,
+	NFT_CHAIN_T_MAX = 3,
+};
+
+struct nft_chain_type {
+	const char *name;
+	enum nft_chain_types type;
+	int family;
+	struct module *owner;
+	unsigned int hook_mask;
+	nf_hookfn *hooks[6];
+	int (*ops_register)(struct net *, const struct nf_hook_ops *);
+	void (*ops_unregister)(struct net *, const struct nf_hook_ops *);
+};
+
+struct nft_stats {
+	u64 bytes;
+	u64 pkts;
+	struct u64_stats_sync syncp;
+};
+
+struct nft_base_chain {
+	struct nf_hook_ops ops;
+	struct list_head hook_list;
+	const struct nft_chain_type *type;
+	u8 policy;
+	u8 flags;
+	struct nft_stats *stats;
+	struct nft_chain chain;
+	struct flow_block flow_block;
+};
+
+struct nft_object_hash_key {
+	const char *name;
+	const struct nft_table *table;
+};
+
+struct nft_object_ops;
+
+struct nft_object {
+	struct list_head list;
+	struct rhlist_head rhlhead;
+	struct nft_object_hash_key key;
+	u32 genmask: 2;
+	u32 use: 30;
+	u64 handle;
+	u16 udlen;
+	u8 *udata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	const struct nft_object_ops *ops;
+	unsigned char data[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nft_object_type;
+
+struct nft_object_ops {
+	void (*eval)(struct nft_object *, struct nft_regs *, const struct nft_pktinfo *);
+	unsigned int size;
+	int (*init)(const struct nft_ctx *, const struct nlattr * const *, struct nft_object *);
+	void (*destroy)(const struct nft_ctx *, struct nft_object *);
+	int (*dump)(struct sk_buff *, struct nft_object *, bool);
+	void (*update)(struct nft_object *, struct nft_object *);
+	const struct nft_object_type *type;
+};
+
+struct nft_object_type {
+	const struct nft_object_ops * (*select_ops)(const struct nft_ctx *, const struct nlattr * const *);
+	const struct nft_object_ops *ops;
+	struct list_head list;
+	u32 type;
+	unsigned int maxattr;
+	struct module *owner;
+	const struct nla_policy *policy;
+};
+
+struct nft_traceinfo {
+	bool trace;
+	bool nf_trace;
+	bool packet_dumped;
+	enum nft_trace_types type: 8;
+	u32 skbid;
+	const struct nft_pktinfo *pkt;
+	const struct nft_base_chain *basechain;
+	const struct nft_chain *chain;
+	const struct nft_rule_dp *rule;
+	const struct nft_verdict *verdict;
+};
+
+struct nft_bitwise_fast_expr {
+	u32 mask;
+	u32 xor;
+	u8 sreg;
+	u8 dreg;
+};
+
+struct nft_cmp_fast_expr {
+	u32 data;
+	u32 mask;
+	u8 sreg;
+	u8 len;
+	bool inv;
+};
+
+struct nft_cmp16_fast_expr {
+	struct nft_data data;
+	struct nft_data mask;
+	u8 sreg;
+	u8 len;
+	bool inv;
+};
+
+struct nft_payload {
+	enum nft_payload_bases base: 8;
+	u8 offset;
+	u8 len;
+	u8 dreg;
+};
+
+struct nft_jumpstack {
+	const struct nft_chain *chain;
+	const struct nft_rule_dp *rule;
+	const struct nft_rule_dp *last_rule;
+};
+
+struct nf_conncount_list {
+	spinlock_t list_lock;
+	u32 last_gc;
+	struct list_head head;
+	unsigned int count;
+};
+
+struct nf_conncount_tuple {
+	struct list_head node;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_zone zone;
+	int cpu;
+	u32 jiffies32;
+};
+
+struct nf_conncount_rb {
+	struct rb_node node;
+	struct nf_conncount_list list;
+	u32 key[5];
+	struct callback_head callback_head;
+};
+
+struct nf_conncount_data {
+	unsigned int keylen;
+	struct rb_root root[256];
+	struct net *net;
+	struct work_struct gc_work;
+	long unsigned int pending_trees[4];
+	unsigned int gc_tree;
+};
+
+enum nft_chain_flags {
+	NFT_CHAIN_BASE = 1,
+	NFT_CHAIN_HW_OFFLOAD = 2,
+	NFT_CHAIN_BINDING = 4,
+};
+
+enum nft_data_types {
+	NFT_DATA_VALUE = 0,
+	NFT_DATA_VERDICT = 4294967040,
+};
+
+enum nft_immediate_attributes {
+	NFTA_IMMEDIATE_UNSPEC = 0,
+	NFTA_IMMEDIATE_DREG = 1,
+	NFTA_IMMEDIATE_DATA = 2,
+	__NFTA_IMMEDIATE_MAX = 3,
+};
+
+struct nf_flowtable_type;
+
+struct nf_flowtable {
+	struct list_head list;
+	struct rhashtable rhashtable;
+	int priority;
+	const struct nf_flowtable_type *type;
+	struct delayed_work gc_work;
+	unsigned int flags;
+	struct flow_block flow_block;
+	struct rw_semaphore flow_block_lock;
+	possible_net_t net;
+};
+
+struct nf_flow_key {
+	struct flow_dissector_key_meta meta;
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_control enc_control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_keyid enc_key_id;
+	union {
+		struct flow_dissector_key_ipv4_addrs enc_ipv4;
+		struct flow_dissector_key_ipv6_addrs enc_ipv6;
+	};
+	struct flow_dissector_key_tcp tcp;
+	struct flow_dissector_key_ports tp;
+};
+
+struct nf_flow_match {
+	struct flow_dissector dissector;
+	int: 32;
+	struct nf_flow_key key;
+	struct nf_flow_key mask;
+};
+
+struct nf_flow_rule {
+	struct nf_flow_match match;
+	struct flow_rule *rule;
+};
+
+enum flow_offload_tuple_dir {
+	FLOW_OFFLOAD_DIR_ORIGINAL = 0,
+	FLOW_OFFLOAD_DIR_REPLY = 1,
+};
+
+struct flow_offload;
+
+struct nf_flowtable_type {
+	struct list_head list;
+	int family;
+	int (*init)(struct nf_flowtable *);
+	int (*setup)(struct nf_flowtable *, struct net_device *, enum flow_block_command);
+	int (*action)(struct net *, const struct flow_offload *, enum flow_offload_tuple_dir, struct nf_flow_rule *);
+	void (*free)(struct nf_flowtable *);
+	nf_hookfn *hook;
+	struct module *owner;
+};
+
+struct flow_offload_tuple {
+	union {
+		struct in_addr src_v4;
+		struct in6_addr src_v6;
+	};
+	union {
+		struct in_addr dst_v4;
+		struct in6_addr dst_v6;
+	};
+	struct {
+		__be16 src_port;
+		__be16 dst_port;
+	};
+	int iifidx;
+	u8 l3proto;
+	u8 l4proto;
+	struct {
+		u16 id;
+		__be16 proto;
+	} encap[2];
+	struct {	} __hash;
+	u8 dir: 2;
+	u8 xmit_type: 3;
+	u8 encap_num: 2;
+	char: 1;
+	u8 in_vlan_ingress: 2;
+	u16 mtu;
+	union {
+		struct {
+			struct dst_entry *dst_cache;
+			u32 dst_cookie;
+		};
+		struct {
+			u32 ifidx;
+			u32 hw_ifidx;
+			u8 h_source[6];
+			u8 h_dest[6];
+		} out;
+		struct {
+			u32 iifidx;
+		} tc;
+	};
+};
+
+struct flow_offload_tuple_rhash {
+	struct rhash_head node;
+	struct flow_offload_tuple tuple;
+};
+
+struct flow_offload {
+	struct flow_offload_tuple_rhash tuplehash[2];
+	struct nf_conn *ct;
+	long unsigned int flags;
+	u16 type;
+	u32 timeout;
+	struct callback_head callback_head;
+};
+
+struct nft_data_desc {
+	enum nft_data_types type;
+	unsigned int size;
+	unsigned int len;
+	unsigned int flags;
+};
+
+enum nft_offload_dep_type {
+	NFT_OFFLOAD_DEP_UNSPEC = 0,
+	NFT_OFFLOAD_DEP_NETWORK = 1,
+	NFT_OFFLOAD_DEP_TRANSPORT = 2,
+};
+
+struct nft_offload_reg {
+	u32 key;
+	u32 len;
+	u32 base_offset;
+	u32 offset;
+	u32 flags;
+	struct nft_data data;
+	struct nft_data mask;
+};
+
+struct nft_offload_ctx {
+	struct {
+		enum nft_offload_dep_type type;
+		__be16 l3num;
+		u8 protonum;
+	} dep;
+	unsigned int num_actions;
+	struct net *net;
+	struct nft_offload_reg regs[24];
+};
+
+struct nft_flow_key {
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_control control;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+	struct flow_dissector_key_meta meta;
+};
+
+struct nft_flow_match {
+	struct flow_dissector dissector;
+	int: 32;
+	struct nft_flow_key key;
+	struct nft_flow_key mask;
+};
+
+struct nft_flow_rule {
+	__be16 proto;
+	long: 48;
+	struct nft_flow_match match;
+	struct flow_rule *rule;
+};
+
+struct nft_rule {
+	struct list_head list;
+	u64 handle: 42;
+	u64 genmask: 2;
+	u64 dlen: 12;
+	u64 udata: 1;
+	unsigned char data[0];
+};
+
+struct nft_immediate_expr {
+	struct nft_data data;
+	u8 dreg;
+	u8 dlen;
+};
+
+enum nf_tables_msg_types {
+	NFT_MSG_NEWTABLE = 0,
+	NFT_MSG_GETTABLE = 1,
+	NFT_MSG_DELTABLE = 2,
+	NFT_MSG_NEWCHAIN = 3,
+	NFT_MSG_GETCHAIN = 4,
+	NFT_MSG_DELCHAIN = 5,
+	NFT_MSG_NEWRULE = 6,
+	NFT_MSG_GETRULE = 7,
+	NFT_MSG_DELRULE = 8,
+	NFT_MSG_NEWSET = 9,
+	NFT_MSG_GETSET = 10,
+	NFT_MSG_DELSET = 11,
+	NFT_MSG_NEWSETELEM = 12,
+	NFT_MSG_GETSETELEM = 13,
+	NFT_MSG_DELSETELEM = 14,
+	NFT_MSG_NEWGEN = 15,
+	NFT_MSG_GETGEN = 16,
+	NFT_MSG_TRACE = 17,
+	NFT_MSG_NEWOBJ = 18,
+	NFT_MSG_GETOBJ = 19,
+	NFT_MSG_DELOBJ = 20,
+	NFT_MSG_GETOBJ_RESET = 21,
+	NFT_MSG_NEWFLOWTABLE = 22,
+	NFT_MSG_GETFLOWTABLE = 23,
+	NFT_MSG_DELFLOWTABLE = 24,
+	NFT_MSG_GETRULE_RESET = 25,
+	NFT_MSG_MAX = 26,
+};
+
+enum nft_list_attributes {
+	NFTA_LIST_UNSPEC = 0,
+	NFTA_LIST_ELEM = 1,
+	__NFTA_LIST_MAX = 2,
+};
+
+enum nft_hook_attributes {
+	NFTA_HOOK_UNSPEC = 0,
+	NFTA_HOOK_HOOKNUM = 1,
+	NFTA_HOOK_PRIORITY = 2,
+	NFTA_HOOK_DEV = 3,
+	NFTA_HOOK_DEVS = 4,
+	__NFTA_HOOK_MAX = 5,
+};
+
+enum nft_table_flags {
+	NFT_TABLE_F_DORMANT = 1,
+	NFT_TABLE_F_OWNER = 2,
+};
+
+enum nft_table_attributes {
+	NFTA_TABLE_UNSPEC = 0,
+	NFTA_TABLE_NAME = 1,
+	NFTA_TABLE_FLAGS = 2,
+	NFTA_TABLE_USE = 3,
+	NFTA_TABLE_HANDLE = 4,
+	NFTA_TABLE_PAD = 5,
+	NFTA_TABLE_USERDATA = 6,
+	NFTA_TABLE_OWNER = 7,
+	__NFTA_TABLE_MAX = 8,
+};
+
+enum nft_chain_attributes {
+	NFTA_CHAIN_UNSPEC = 0,
+	NFTA_CHAIN_TABLE = 1,
+	NFTA_CHAIN_HANDLE = 2,
+	NFTA_CHAIN_NAME = 3,
+	NFTA_CHAIN_HOOK = 4,
+	NFTA_CHAIN_POLICY = 5,
+	NFTA_CHAIN_USE = 6,
+	NFTA_CHAIN_TYPE = 7,
+	NFTA_CHAIN_COUNTERS = 8,
+	NFTA_CHAIN_PAD = 9,
+	NFTA_CHAIN_FLAGS = 10,
+	NFTA_CHAIN_ID = 11,
+	NFTA_CHAIN_USERDATA = 12,
+	__NFTA_CHAIN_MAX = 13,
+};
+
+enum nft_rule_attributes {
+	NFTA_RULE_UNSPEC = 0,
+	NFTA_RULE_TABLE = 1,
+	NFTA_RULE_CHAIN = 2,
+	NFTA_RULE_HANDLE = 3,
+	NFTA_RULE_EXPRESSIONS = 4,
+	NFTA_RULE_COMPAT = 5,
+	NFTA_RULE_POSITION = 6,
+	NFTA_RULE_USERDATA = 7,
+	NFTA_RULE_PAD = 8,
+	NFTA_RULE_ID = 9,
+	NFTA_RULE_POSITION_ID = 10,
+	NFTA_RULE_CHAIN_ID = 11,
+	__NFTA_RULE_MAX = 12,
+};
+
+enum nft_set_flags {
+	NFT_SET_ANONYMOUS = 1,
+	NFT_SET_CONSTANT = 2,
+	NFT_SET_INTERVAL = 4,
+	NFT_SET_MAP = 8,
+	NFT_SET_TIMEOUT = 16,
+	NFT_SET_EVAL = 32,
+	NFT_SET_OBJECT = 64,
+	NFT_SET_CONCAT = 128,
+	NFT_SET_EXPR = 256,
+};
+
+enum nft_set_policies {
+	NFT_SET_POL_PERFORMANCE = 0,
+	NFT_SET_POL_MEMORY = 1,
+};
+
+enum nft_set_desc_attributes {
+	NFTA_SET_DESC_UNSPEC = 0,
+	NFTA_SET_DESC_SIZE = 1,
+	NFTA_SET_DESC_CONCAT = 2,
+	__NFTA_SET_DESC_MAX = 3,
+};
+
+enum nft_set_field_attributes {
+	NFTA_SET_FIELD_UNSPEC = 0,
+	NFTA_SET_FIELD_LEN = 1,
+	__NFTA_SET_FIELD_MAX = 2,
+};
+
+enum nft_set_attributes {
+	NFTA_SET_UNSPEC = 0,
+	NFTA_SET_TABLE = 1,
+	NFTA_SET_NAME = 2,
+	NFTA_SET_FLAGS = 3,
+	NFTA_SET_KEY_TYPE = 4,
+	NFTA_SET_KEY_LEN = 5,
+	NFTA_SET_DATA_TYPE = 6,
+	NFTA_SET_DATA_LEN = 7,
+	NFTA_SET_POLICY = 8,
+	NFTA_SET_DESC = 9,
+	NFTA_SET_ID = 10,
+	NFTA_SET_TIMEOUT = 11,
+	NFTA_SET_GC_INTERVAL = 12,
+	NFTA_SET_USERDATA = 13,
+	NFTA_SET_PAD = 14,
+	NFTA_SET_OBJ_TYPE = 15,
+	NFTA_SET_HANDLE = 16,
+	NFTA_SET_EXPR = 17,
+	NFTA_SET_EXPRESSIONS = 18,
+	__NFTA_SET_MAX = 19,
+};
+
+enum nft_set_elem_flags {
+	NFT_SET_ELEM_INTERVAL_END = 1,
+	NFT_SET_ELEM_CATCHALL = 2,
+};
+
+enum nft_set_elem_attributes {
+	NFTA_SET_ELEM_UNSPEC = 0,
+	NFTA_SET_ELEM_KEY = 1,
+	NFTA_SET_ELEM_DATA = 2,
+	NFTA_SET_ELEM_FLAGS = 3,
+	NFTA_SET_ELEM_TIMEOUT = 4,
+	NFTA_SET_ELEM_EXPIRATION = 5,
+	NFTA_SET_ELEM_USERDATA = 6,
+	NFTA_SET_ELEM_EXPR = 7,
+	NFTA_SET_ELEM_PAD = 8,
+	NFTA_SET_ELEM_OBJREF = 9,
+	NFTA_SET_ELEM_KEY_END = 10,
+	NFTA_SET_ELEM_EXPRESSIONS = 11,
+	__NFTA_SET_ELEM_MAX = 12,
+};
+
+enum nft_set_elem_list_attributes {
+	NFTA_SET_ELEM_LIST_UNSPEC = 0,
+	NFTA_SET_ELEM_LIST_TABLE = 1,
+	NFTA_SET_ELEM_LIST_SET = 2,
+	NFTA_SET_ELEM_LIST_ELEMENTS = 3,
+	NFTA_SET_ELEM_LIST_SET_ID = 4,
+	__NFTA_SET_ELEM_LIST_MAX = 5,
+};
+
+enum nft_data_attributes {
+	NFTA_DATA_UNSPEC = 0,
+	NFTA_DATA_VALUE = 1,
+	NFTA_DATA_VERDICT = 2,
+	__NFTA_DATA_MAX = 3,
+};
+
+enum nft_verdict_attributes {
+	NFTA_VERDICT_UNSPEC = 0,
+	NFTA_VERDICT_CODE = 1,
+	NFTA_VERDICT_CHAIN = 2,
+	NFTA_VERDICT_CHAIN_ID = 3,
+	__NFTA_VERDICT_MAX = 4,
+};
+
+enum nft_expr_attributes {
+	NFTA_EXPR_UNSPEC = 0,
+	NFTA_EXPR_NAME = 1,
+	NFTA_EXPR_DATA = 2,
+	__NFTA_EXPR_MAX = 3,
+};
+
+enum nft_counter_attributes {
+	NFTA_COUNTER_UNSPEC = 0,
+	NFTA_COUNTER_BYTES = 1,
+	NFTA_COUNTER_PACKETS = 2,
+	NFTA_COUNTER_PAD = 3,
+	__NFTA_COUNTER_MAX = 4,
+};
+
+enum nft_gen_attributes {
+	NFTA_GEN_UNSPEC = 0,
+	NFTA_GEN_ID = 1,
+	NFTA_GEN_PROC_PID = 2,
+	NFTA_GEN_PROC_NAME = 3,
+	__NFTA_GEN_MAX = 4,
+};
+
+enum nft_object_attributes {
+	NFTA_OBJ_UNSPEC = 0,
+	NFTA_OBJ_TABLE = 1,
+	NFTA_OBJ_NAME = 2,
+	NFTA_OBJ_TYPE = 3,
+	NFTA_OBJ_DATA = 4,
+	NFTA_OBJ_USE = 5,
+	NFTA_OBJ_HANDLE = 6,
+	NFTA_OBJ_PAD = 7,
+	NFTA_OBJ_USERDATA = 8,
+	__NFTA_OBJ_MAX = 9,
+};
+
+enum nft_flowtable_flags {
+	NFT_FLOWTABLE_HW_OFFLOAD = 1,
+	NFT_FLOWTABLE_COUNTER = 2,
+	NFT_FLOWTABLE_MASK = 3,
+};
+
+enum nft_flowtable_attributes {
+	NFTA_FLOWTABLE_UNSPEC = 0,
+	NFTA_FLOWTABLE_TABLE = 1,
+	NFTA_FLOWTABLE_NAME = 2,
+	NFTA_FLOWTABLE_HOOK = 3,
+	NFTA_FLOWTABLE_USE = 4,
+	NFTA_FLOWTABLE_HANDLE = 5,
+	NFTA_FLOWTABLE_PAD = 6,
+	NFTA_FLOWTABLE_FLAGS = 7,
+	__NFTA_FLOWTABLE_MAX = 8,
+};
+
+enum nft_flowtable_hook_attributes {
+	NFTA_FLOWTABLE_HOOK_UNSPEC = 0,
+	NFTA_FLOWTABLE_HOOK_NUM = 1,
+	NFTA_FLOWTABLE_HOOK_PRIORITY = 2,
+	NFTA_FLOWTABLE_HOOK_DEVS = 3,
+	__NFTA_FLOWTABLE_HOOK_MAX = 4,
+};
+
+enum nft_devices_attributes {
+	NFTA_DEVICE_UNSPEC = 0,
+	NFTA_DEVICE_NAME = 1,
+	__NFTA_DEVICE_MAX = 2,
+};
+
+enum audit_nfcfgop {
+	AUDIT_XT_OP_REGISTER = 0,
+	AUDIT_XT_OP_REPLACE = 1,
+	AUDIT_XT_OP_UNREGISTER = 2,
+	AUDIT_NFT_OP_TABLE_REGISTER = 3,
+	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
+	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
+	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
+	AUDIT_NFT_OP_RULE_REGISTER = 7,
+	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
+	AUDIT_NFT_OP_SET_REGISTER = 9,
+	AUDIT_NFT_OP_SET_UNREGISTER = 10,
+	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
+	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
+	AUDIT_NFT_OP_GEN_REGISTER = 13,
+	AUDIT_NFT_OP_OBJ_REGISTER = 14,
+	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
+	AUDIT_NFT_OP_OBJ_RESET = 16,
+	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
+	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
+	AUDIT_NFT_OP_INVALID = 19,
+};
+
+enum nft_data_desc_flags {
+	NFT_DATA_DESC_SETELEM = 1,
+};
+
+struct nft_userdata {
+	u8 len;
+	unsigned char data[0];
+};
+
+struct nft_set_elem {
+	union {
+		u32 buf[16];
+		struct nft_data val;
+	} key;
+	union {
+		u32 buf[16];
+		struct nft_data val;
+	} key_end;
+	union {
+		u32 buf[16];
+		struct nft_data val;
+	} data;
+	void *priv;
+};
+
+struct nft_set;
+
+struct nft_set_iter {
+	u8 genmask;
+	unsigned int count;
+	unsigned int skip;
+	int err;
+	int (*fn)(const struct nft_ctx *, struct nft_set *, const struct nft_set_iter *, struct nft_set_elem *);
+};
+
+struct nft_set_ops;
+
+struct nft_set {
+	struct list_head list;
+	struct list_head bindings;
+	struct nft_table *table;
+	possible_net_t net;
+	char *name;
+	u64 handle;
+	u32 ktype;
+	u32 dtype;
+	u32 objtype;
+	u32 size;
+	u8 field_len[16];
+	u8 field_count;
+	u32 use;
+	atomic_t nelems;
+	u32 ndeact;
+	u64 timeout;
+	u32 gc_int;
+	u16 policy;
+	u16 udlen;
+	unsigned char *udata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	const struct nft_set_ops *ops;
+	u16 flags: 14;
+	u16 genmask: 2;
+	u8 klen;
+	u8 dlen;
+	u8 num_exprs;
+	struct nft_expr *exprs[2];
+	struct list_head catchall_list;
+	unsigned char data[0];
+	long: 64;
+	long: 64;
+};
+
+struct nft_set_desc {
+	u32 ktype;
+	unsigned int klen;
+	u32 dtype;
+	unsigned int dlen;
+	u32 objtype;
+	unsigned int size;
+	u32 policy;
+	u32 gc_int;
+	u64 timeout;
+	u8 field_len[16];
+	u8 field_count;
+	bool expr;
+};
+
+enum nft_set_class {
+	NFT_SET_CLASS_O_1 = 0,
+	NFT_SET_CLASS_O_LOG_N = 1,
+	NFT_SET_CLASS_O_N = 2,
+};
+
+struct nft_set_estimate {
+	u64 size;
+	enum nft_set_class lookup;
+	enum nft_set_class space;
+};
+
+struct nft_set_ext;
+
+struct nft_set_ops {
+	bool (*lookup)(const struct net *, const struct nft_set *, const u32 *, const struct nft_set_ext **);
+	bool (*update)(struct nft_set *, const u32 *, void * (*)(struct nft_set *, const struct nft_expr *, struct nft_regs *), const struct nft_expr *, struct nft_regs *, const struct nft_set_ext **);
+	bool (*delete)(const struct nft_set *, const u32 *);
+	int (*insert)(const struct net *, const struct nft_set *, const struct nft_set_elem *, struct nft_set_ext **);
+	void (*activate)(const struct net *, const struct nft_set *, const struct nft_set_elem *);
+	void * (*deactivate)(const struct net *, const struct nft_set *, const struct nft_set_elem *);
+	bool (*flush)(const struct net *, const struct nft_set *, void *);
+	void (*remove)(const struct net *, const struct nft_set *, const struct nft_set_elem *);
+	void (*walk)(const struct nft_ctx *, struct nft_set *, struct nft_set_iter *);
+	void * (*get)(const struct net *, const struct nft_set *, const struct nft_set_elem *, unsigned int);
+	u64 (*privsize)(const struct nlattr * const *, const struct nft_set_desc *);
+	bool (*estimate)(const struct nft_set_desc *, u32, struct nft_set_estimate *);
+	int (*init)(const struct nft_set *, const struct nft_set_desc *, const struct nlattr * const *);
+	void (*destroy)(const struct nft_set *);
+	void (*gc_init)(const struct nft_set *);
+	unsigned int elemsize;
+};
+
+struct nft_set_ext {
+	u8 genmask;
+	u8 offset[9];
+	char data[0];
+};
+
+struct nft_set_type {
+	const struct nft_set_ops ops;
+	u32 features;
+};
+
+struct nft_set_elem_expr {
+	u8 size;
+	long: 56;
+	unsigned char data[0];
+};
+
+struct nft_set_binding {
+	struct list_head list;
+	const struct nft_chain *chain;
+	u32 flags;
+};
+
+struct nft_set_ext_type {
+	u8 len;
+	u8 align;
+};
+
+struct nft_set_ext_tmpl {
+	u16 len;
+	u8 offset[9];
+	u8 ext_len[9];
+};
+
+struct nft_set_gc_batch_head {
+	struct callback_head rcu;
+	const struct nft_set *set;
+	unsigned int cnt;
+};
+
+struct nft_set_gc_batch {
+	struct nft_set_gc_batch_head head;
+	void *elems[508];
+};
+
+struct nft_hook {
+	struct list_head list;
+	struct nf_hook_ops ops;
+	struct callback_head rcu;
+};
+
+struct nft_flowtable {
+	struct list_head list;
+	struct nft_table *table;
+	char *name;
+	int hooknum;
+	int ops_len;
+	u32 genmask: 2;
+	u32 use: 30;
+	u64 handle;
+	long: 64;
+	struct list_head hook_list;
+	struct nf_flowtable data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nft_trans {
+	struct list_head list;
+	int msg_type;
+	bool put_net;
+	struct nft_ctx ctx;
+	char data[0];
+};
+
+struct nft_trans_rule {
+	struct nft_rule *rule;
+	struct nft_flow_rule *flow;
+	u32 rule_id;
+};
+
+struct nft_trans_set {
+	struct nft_set *set;
+	u32 set_id;
+	u32 gc_int;
+	u64 timeout;
+	bool update;
+	bool bound;
+};
+
+struct nft_trans_chain {
+	bool update;
+	char *name;
+	struct nft_stats *stats;
+	u8 policy;
+	u32 chain_id;
+};
+
+struct nft_trans_table {
+	bool update;
+};
+
+struct nft_trans_elem {
+	struct nft_set *set;
+	struct nft_set_elem elem;
+	bool bound;
+};
+
+struct nft_trans_obj {
+	struct nft_object *obj;
+	struct nft_object *newobj;
+	bool update;
+};
+
+struct nft_trans_flowtable {
+	struct nft_flowtable *flowtable;
+	bool update;
+	struct list_head hook_list;
+	u32 flags;
+};
+
+struct nftables_pernet {
+	struct list_head tables;
+	struct list_head commit_list;
+	struct list_head module_list;
+	struct list_head notify_list;
+	struct mutex commit_mutex;
+	u64 table_handle;
+	unsigned int base_seq;
+	u8 validate_state;
+};
+
+enum {
+	NFT_VALIDATE_SKIP = 0,
+	NFT_VALIDATE_NEED = 1,
+	NFT_VALIDATE_DO = 2,
+};
+
+struct nft_audit_data {
+	struct nft_table *table;
+	int entries;
+	int op;
+	struct list_head list;
+};
+
+struct nft_module_request {
+	struct list_head list;
+	char module[56];
+	bool done;
+};
+
+struct nftnl_skb_parms {
+	bool report;
+};
+
+struct nft_chain_hook {
+	u32 num;
+	s32 priority;
+	const struct nft_chain_type *type;
+	struct list_head list;
+};
+
+struct nft_rules_old {
+	struct callback_head h;
+	struct nft_rule_blob *blob;
+};
+
+struct nft_expr_info {
+	const struct nft_expr_ops *ops;
+	const struct nlattr *attr;
+	struct nlattr *tb[17];
+};
+
+struct nft_rule_dump_ctx {
+	char *table;
+	char *chain;
+};
+
+struct nft_set_elem_catchall {
+	struct list_head list;
+	struct callback_head rcu;
+	void *elem;
+};
+
+struct nft_set_dump_args {
+	const struct netlink_callback *cb;
+	struct nft_set_iter iter;
+	struct sk_buff *skb;
+};
+
+struct nft_set_dump_ctx {
+	const struct nft_set *set;
+	struct nft_ctx ctx;
+};
+
+struct nft_obj_filter {
+	char *table;
+	u32 type;
+};
+
+struct nft_flowtable_hook {
+	u32 num;
+	int priority;
+	struct list_head list;
+};
+
+struct nft_flowtable_filter {
+	char *table;
+};
+
+enum nft_trace_attributes {
+	NFTA_TRACE_UNSPEC = 0,
+	NFTA_TRACE_TABLE = 1,
+	NFTA_TRACE_CHAIN = 2,
+	NFTA_TRACE_RULE_HANDLE = 3,
+	NFTA_TRACE_TYPE = 4,
+	NFTA_TRACE_VERDICT = 5,
+	NFTA_TRACE_ID = 6,
+	NFTA_TRACE_LL_HEADER = 7,
+	NFTA_TRACE_NETWORK_HEADER = 8,
+	NFTA_TRACE_TRANSPORT_HEADER = 9,
+	NFTA_TRACE_IIF = 10,
+	NFTA_TRACE_IIFTYPE = 11,
+	NFTA_TRACE_OIF = 12,
+	NFTA_TRACE_OIFTYPE = 13,
+	NFTA_TRACE_MARK = 14,
+	NFTA_TRACE_NFPROTO = 15,
+	NFTA_TRACE_POLICY = 16,
+	NFTA_TRACE_PAD = 17,
+	__NFTA_TRACE_MAX = 18,
+};
+
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
+enum nft_cmp_ops {
+	NFT_CMP_EQ = 0,
+	NFT_CMP_NEQ = 1,
+	NFT_CMP_LT = 2,
+	NFT_CMP_LTE = 3,
+	NFT_CMP_GT = 4,
+	NFT_CMP_GTE = 5,
+};
+
+enum nft_cmp_attributes {
+	NFTA_CMP_UNSPEC = 0,
+	NFTA_CMP_SREG = 1,
+	NFTA_CMP_OP = 2,
+	NFTA_CMP_DATA = 3,
+	__NFTA_CMP_MAX = 4,
+};
+
+enum nft_offload_reg_flags {
+	NFT_OFFLOAD_F_NETWORK2HOST = 1,
+};
+
+struct nft_cmp_expr {
+	struct nft_data data;
+	u8 sreg;
+	u8 len;
+	enum nft_cmp_ops op: 8;
+};
+
+union nft_cmp_offload_data {
+	u16 val16;
+	u32 val32;
+	u64 val64;
+};
+
+enum nft_range_ops {
+	NFT_RANGE_EQ = 0,
+	NFT_RANGE_NEQ = 1,
+};
+
+enum nft_range_attributes {
+	NFTA_RANGE_UNSPEC = 0,
+	NFTA_RANGE_SREG = 1,
+	NFTA_RANGE_OP = 2,
+	NFTA_RANGE_FROM_DATA = 3,
+	NFTA_RANGE_TO_DATA = 4,
+	__NFTA_RANGE_MAX = 5,
+};
+
+struct nft_range_expr {
+	struct nft_data data_from;
+	struct nft_data data_to;
+	u8 sreg;
+	u8 len;
+	enum nft_range_ops op: 8;
+};
+
+enum nft_bitwise_ops {
+	NFT_BITWISE_BOOL = 0,
+	NFT_BITWISE_LSHIFT = 1,
+	NFT_BITWISE_RSHIFT = 2,
+};
+
+enum nft_bitwise_attributes {
+	NFTA_BITWISE_UNSPEC = 0,
+	NFTA_BITWISE_SREG = 1,
+	NFTA_BITWISE_DREG = 2,
+	NFTA_BITWISE_LEN = 3,
+	NFTA_BITWISE_MASK = 4,
+	NFTA_BITWISE_XOR = 5,
+	NFTA_BITWISE_OP = 6,
+	NFTA_BITWISE_DATA = 7,
+	__NFTA_BITWISE_MAX = 8,
+};
+
+struct nft_bitwise {
+	u8 sreg;
+	u8 dreg;
+	enum nft_bitwise_ops op: 8;
+	u8 len;
+	struct nft_data mask;
+	struct nft_data xor;
+	struct nft_data data;
+};
+
+enum nft_lookup_flags {
+	NFT_LOOKUP_F_INV = 1,
+};
+
+enum nft_lookup_attributes {
+	NFTA_LOOKUP_UNSPEC = 0,
+	NFTA_LOOKUP_SET = 1,
+	NFTA_LOOKUP_SREG = 2,
+	NFTA_LOOKUP_DREG = 3,
+	NFTA_LOOKUP_SET_ID = 4,
+	NFTA_LOOKUP_FLAGS = 5,
+	__NFTA_LOOKUP_MAX = 6,
+};
+
+struct nft_lookup {
+	struct nft_set *set;
+	u8 sreg;
+	u8 dreg;
+	bool invert;
+	struct nft_set_binding binding;
+};
+
+enum nft_payload_csum_types {
+	NFT_PAYLOAD_CSUM_NONE = 0,
+	NFT_PAYLOAD_CSUM_INET = 1,
+	NFT_PAYLOAD_CSUM_SCTP = 2,
+};
+
+enum nft_payload_csum_flags {
+	NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 1,
+};
+
+enum nft_payload_attributes {
+	NFTA_PAYLOAD_UNSPEC = 0,
+	NFTA_PAYLOAD_DREG = 1,
+	NFTA_PAYLOAD_BASE = 2,
+	NFTA_PAYLOAD_OFFSET = 3,
+	NFTA_PAYLOAD_LEN = 4,
+	NFTA_PAYLOAD_SREG = 5,
+	NFTA_PAYLOAD_CSUM_TYPE = 6,
+	NFTA_PAYLOAD_CSUM_OFFSET = 7,
+	NFTA_PAYLOAD_CSUM_FLAGS = 8,
+	__NFTA_PAYLOAD_MAX = 9,
+};
+
+enum {
+	NFT_PAYLOAD_CTX_INNER_TUN = 1,
+	NFT_PAYLOAD_CTX_INNER_LL = 2,
+	NFT_PAYLOAD_CTX_INNER_NH = 4,
+	NFT_PAYLOAD_CTX_INNER_TH = 8,
+};
+
+struct nft_inner_tun_ctx {
+	u16 type;
+	u16 inner_tunoff;
+	u16 inner_lloff;
+	u16 inner_nhoff;
+	u16 inner_thoff;
+	__be16 llproto;
+	u8 l4proto;
+	u8 flags;
+};
+
+struct nft_payload_set {
+	enum nft_payload_bases base: 8;
+	u8 offset;
+	u8 len;
+	u8 sreg;
+	u8 csum_type;
+	u8 csum_offset;
+	u8 csum_flags;
+};
+
+enum nft_byteorder_ops {
+	NFT_BYTEORDER_NTOH = 0,
+	NFT_BYTEORDER_HTON = 1,
+};
+
+enum nft_byteorder_attributes {
+	NFTA_BYTEORDER_UNSPEC = 0,
+	NFTA_BYTEORDER_SREG = 1,
+	NFTA_BYTEORDER_DREG = 2,
+	NFTA_BYTEORDER_OP = 3,
+	NFTA_BYTEORDER_LEN = 4,
+	NFTA_BYTEORDER_SIZE = 5,
+	__NFTA_BYTEORDER_MAX = 6,
+};
+
+struct nft_byteorder {
+	u8 sreg;
+	u8 dreg;
+	enum nft_byteorder_ops op: 8;
+	u8 len;
+	u8 size;
+};
+
+enum nft_dynset_ops {
+	NFT_DYNSET_OP_ADD = 0,
+	NFT_DYNSET_OP_UPDATE = 1,
+	NFT_DYNSET_OP_DELETE = 2,
+};
+
+enum nft_dynset_flags {
+	NFT_DYNSET_F_INV = 1,
+	NFT_DYNSET_F_EXPR = 2,
+};
+
+enum nft_dynset_attributes {
+	NFTA_DYNSET_UNSPEC = 0,
+	NFTA_DYNSET_SET_NAME = 1,
+	NFTA_DYNSET_SET_ID = 2,
+	NFTA_DYNSET_OP = 3,
+	NFTA_DYNSET_SREG_KEY = 4,
+	NFTA_DYNSET_SREG_DATA = 5,
+	NFTA_DYNSET_TIMEOUT = 6,
+	NFTA_DYNSET_EXPR = 7,
+	NFTA_DYNSET_PAD = 8,
+	NFTA_DYNSET_FLAGS = 9,
+	NFTA_DYNSET_EXPRESSIONS = 10,
+	__NFTA_DYNSET_MAX = 11,
+};
+
+struct nft_dynset {
+	struct nft_set *set;
+	struct nft_set_ext_tmpl tmpl;
+	enum nft_dynset_ops op: 8;
+	u8 sreg_key;
+	u8 sreg_data;
+	bool invert;
+	bool expr;
+	u8 num_exprs;
+	u64 timeout;
+	struct nft_expr *expr_array[2];
+	struct nft_set_binding binding;
+};
+
+enum nft_meta_keys {
+	NFT_META_LEN = 0,
+	NFT_META_PROTOCOL = 1,
+	NFT_META_PRIORITY = 2,
+	NFT_META_MARK = 3,
+	NFT_META_IIF = 4,
+	NFT_META_OIF = 5,
+	NFT_META_IIFNAME = 6,
+	NFT_META_OIFNAME = 7,
+	NFT_META_IFTYPE = 8,
+	NFT_META_OIFTYPE = 9,
+	NFT_META_SKUID = 10,
+	NFT_META_SKGID = 11,
+	NFT_META_NFTRACE = 12,
+	NFT_META_RTCLASSID = 13,
+	NFT_META_SECMARK = 14,
+	NFT_META_NFPROTO = 15,
+	NFT_META_L4PROTO = 16,
+	NFT_META_BRI_IIFNAME = 17,
+	NFT_META_BRI_OIFNAME = 18,
+	NFT_META_PKTTYPE = 19,
+	NFT_META_CPU = 20,
+	NFT_META_IIFGROUP = 21,
+	NFT_META_OIFGROUP = 22,
+	NFT_META_CGROUP = 23,
+	NFT_META_PRANDOM = 24,
+	NFT_META_SECPATH = 25,
+	NFT_META_IIFKIND = 26,
+	NFT_META_OIFKIND = 27,
+	NFT_META_BRI_IIFPVID = 28,
+	NFT_META_BRI_IIFVPROTO = 29,
+	NFT_META_TIME_NS = 30,
+	NFT_META_TIME_DAY = 31,
+	NFT_META_TIME_HOUR = 32,
+	NFT_META_SDIF = 33,
+	NFT_META_SDIFNAME = 34,
+	__NFT_META_IIFTYPE = 35,
+};
+
+enum nft_meta_attributes {
+	NFTA_META_UNSPEC = 0,
+	NFTA_META_DREG = 1,
+	NFTA_META_KEY = 2,
+	NFTA_META_SREG = 3,
+	__NFTA_META_MAX = 4,
+};
+
+struct nft_meta {
+	enum nft_meta_keys key: 8;
+	u8 len;
+	union {
+		u8 dreg;
+		u8 sreg;
+	};
+};
+
+enum nft_rt_keys {
+	NFT_RT_CLASSID = 0,
+	NFT_RT_NEXTHOP4 = 1,
+	NFT_RT_NEXTHOP6 = 2,
+	NFT_RT_TCPMSS = 3,
+	NFT_RT_XFRM = 4,
+	__NFT_RT_MAX = 5,
+};
+
+enum nft_rt_attributes {
+	NFTA_RT_UNSPEC = 0,
+	NFTA_RT_DREG = 1,
+	NFTA_RT_KEY = 2,
+	__NFTA_RT_MAX = 3,
+};
+
+struct nft_rt {
+	enum nft_rt_keys key: 8;
+	u8 dreg;
+};
+
+enum nft_last_attributes {
+	NFTA_LAST_UNSPEC = 0,
+	NFTA_LAST_SET = 1,
+	NFTA_LAST_MSECS = 2,
+	NFTA_LAST_PAD = 3,
+	__NFTA_LAST_MAX = 4,
+};
+
+struct nft_last {
+	long unsigned int jiffies;
+	unsigned int set;
+};
+
+struct nft_last_priv {
+	struct nft_last *last;
+};
+
+struct nft_counter {
+	s64 bytes;
+	s64 packets;
+};
+
+struct nft_counter_percpu_priv {
+	struct nft_counter *counter;
+};
+
+enum nft_exthdr_flags {
+	NFT_EXTHDR_F_PRESENT = 1,
+};
+
+enum nft_exthdr_op {
+	NFT_EXTHDR_OP_IPV6 = 0,
+	NFT_EXTHDR_OP_TCPOPT = 1,
+	NFT_EXTHDR_OP_IPV4 = 2,
+	NFT_EXTHDR_OP_SCTP = 3,
+	__NFT_EXTHDR_OP_MAX = 4,
+};
+
+enum nft_exthdr_attributes {
+	NFTA_EXTHDR_UNSPEC = 0,
+	NFTA_EXTHDR_DREG = 1,
+	NFTA_EXTHDR_TYPE = 2,
+	NFTA_EXTHDR_OFFSET = 3,
+	NFTA_EXTHDR_LEN = 4,
+	NFTA_EXTHDR_FLAGS = 5,
+	NFTA_EXTHDR_OP = 6,
+	NFTA_EXTHDR_SREG = 7,
+	__NFTA_EXTHDR_MAX = 8,
+};
+
+struct nft_exthdr {
+	u8 type;
+	u8 offset;
+	u8 len;
+	u8 op;
+	u8 dreg;
+	u8 sreg;
+	u8 flags;
+};
+
+enum nft_objref_attributes {
+	NFTA_OBJREF_UNSPEC = 0,
+	NFTA_OBJREF_IMM_TYPE = 1,
+	NFTA_OBJREF_IMM_NAME = 2,
+	NFTA_OBJREF_SET_SREG = 3,
+	NFTA_OBJREF_SET_NAME = 4,
+	NFTA_OBJREF_SET_ID = 5,
+	__NFTA_OBJREF_MAX = 6,
+};
+
+struct nft_objref_map {
+	struct nft_set *set;
+	u8 sreg;
+	struct nft_set_binding binding;
+};
+
+struct nft_offload_ethertype {
+	__be16 value;
+	__be16 mask;
+};
+
+enum nft_inner_type {
+	NFT_INNER_UNSPEC = 0,
+	NFT_INNER_VXLAN = 1,
+	NFT_INNER_GENEVE = 2,
+};
+
+enum nft_inner_flags {
+	NFT_INNER_HDRSIZE = 1,
+	NFT_INNER_LL = 2,
+	NFT_INNER_NH = 4,
+	NFT_INNER_TH = 8,
+};
+
+enum nft_inner_attributes {
+	NFTA_INNER_UNSPEC = 0,
+	NFTA_INNER_NUM = 1,
+	NFTA_INNER_TYPE = 2,
+	NFTA_INNER_FLAGS = 3,
+	NFTA_INNER_HDRSIZE = 4,
+	NFTA_INNER_EXPR = 5,
+	__NFTA_INNER_MAX = 6,
+};
+
+struct __nft_expr {
+	const struct nft_expr_ops *ops;
+	union {
+		struct nft_payload payload;
+		struct nft_meta meta;
+	};
+};
+
+enum {
+	NFT_INNER_EXPR_PAYLOAD = 0,
+	NFT_INNER_EXPR_META = 1,
+};
+
+struct nft_inner {
+	u8 flags;
+	u8 hdrsize;
+	u8 type;
+	u8 expr_type;
+	struct __nft_expr expr;
+};
+
+struct nft_bitmap_elem {
+	struct list_head head;
+	struct nft_set_ext ext;
+};
+
+struct nft_bitmap {
+	struct list_head list;
+	u16 bitmap_size;
+	u8 bitmap[0];
+};
+
+struct nft_rhash {
+	struct rhashtable ht;
+	struct delayed_work gc_work;
+};
+
+struct nft_rhash_elem {
+	struct rhash_head node;
+	struct nft_set_ext ext;
+};
+
+struct nft_rhash_cmp_arg {
+	const struct nft_set *set;
+	const u32 *key;
+	u8 genmask;
+};
+
+struct nft_hash {
+	u32 seed;
+	u32 buckets;
+	struct hlist_head table[0];
+};
+
+struct nft_hash_elem {
+	struct hlist_node node;
+	struct nft_set_ext ext;
+};
+
+struct seqcount_rwlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_rwlock seqcount_rwlock_t;
+
+struct nft_rbtree {
+	struct rb_root root;
+	rwlock_t lock;
+	seqcount_rwlock_t count;
+	struct delayed_work gc_work;
+};
+
+struct nft_rbtree_elem {
+	struct rb_node node;
+	struct nft_set_ext ext;
+};
+
+enum nft_fib_attributes {
+	NFTA_FIB_UNSPEC = 0,
+	NFTA_FIB_DREG = 1,
+	NFTA_FIB_RESULT = 2,
+	NFTA_FIB_FLAGS = 3,
+	__NFTA_FIB_MAX = 4,
+};
+
+enum nft_fib_result {
+	NFT_FIB_RESULT_UNSPEC = 0,
+	NFT_FIB_RESULT_OIF = 1,
+	NFT_FIB_RESULT_OIFNAME = 2,
+	NFT_FIB_RESULT_ADDRTYPE = 3,
+	__NFT_FIB_RESULT_MAX = 4,
+};
+
+enum nft_fib_flags {
+	NFTA_FIB_F_SADDR = 1,
+	NFTA_FIB_F_DADDR = 2,
+	NFTA_FIB_F_MARK = 4,
+	NFTA_FIB_F_IIF = 8,
+	NFTA_FIB_F_OIF = 16,
+	NFTA_FIB_F_PRESENT = 32,
+};
+
+struct nft_fib {
+	u8 dreg;
+	u8 result;
+	u32 flags;
+};
+
+struct xt_entry_match {
+	union {
+		struct {
+			__u16 match_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 match_size;
+			struct xt_match *match;
+		} kernel;
+		__u16 match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_standard_target {
+	struct xt_entry_target target;
+	int verdict;
+};
+
+struct xt_error_target {
+	struct xt_entry_target target;
+	char errorname[30];
+};
+
+struct xt_counters_info {
+	char name[32];
+	unsigned int num_counters;
+	struct xt_counters counters[0];
+};
+
+struct xt_table_info;
+
+struct xt_table {
+	struct list_head list;
+	unsigned int valid_hooks;
+	struct xt_table_info *private;
+	struct nf_hook_ops *ops;
+	struct module *me;
+	u_int8_t af;
+	int priority;
+	const char name[32];
+};
+
+struct xt_table_info {
+	unsigned int size;
+	unsigned int number;
+	unsigned int initial_entries;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int stacksize;
+	void ***jumpstack;
+	unsigned char entries[0];
+};
+
+struct xt_percpu_counter_alloc_state {
+	unsigned int off;
+	const char *mem;
+};
+
+struct compat_xt_entry_match {
+	union {
+		struct {
+			u_int16_t match_size;
+			char name[29];
+			u_int8_t revision;
+		} user;
+		struct {
+			u_int16_t match_size;
+			compat_uptr_t match;
+		} kernel;
+		u_int16_t match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct compat_xt_entry_target {
+	union {
+		struct {
+			u_int16_t target_size;
+			char name[29];
+			u_int8_t revision;
+		} user;
+		struct {
+			u_int16_t target_size;
+			compat_uptr_t target;
+		} kernel;
+		u_int16_t target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct compat_xt_counters {
+	compat_u64 pcnt;
+	compat_u64 bcnt;
+};
+
+struct compat_xt_counters_info {
+	char name[32];
+	compat_uint_t num_counters;
+	struct compat_xt_counters counters[0];
+};
+
+struct xt_template {
+	struct list_head list;
+	int (*table_init)(struct net *);
+	struct module *me;
+	char name[32];
+};
+
+struct xt_pernet {
+	struct list_head tables[11];
+};
+
+struct compat_delta {
+	unsigned int offset;
+	int delta;
+};
+
+struct xt_af {
+	struct mutex mutex;
+	struct list_head match;
+	struct list_head target;
+	struct mutex compat_mutex;
+	struct compat_delta *compat_tab;
+	unsigned int number;
+	unsigned int cur;
+};
+
+struct compat_xt_standard_target {
+	struct compat_xt_entry_target t;
+	compat_uint_t verdict;
+};
+
+struct compat_xt_error_target {
+	struct compat_xt_entry_target t;
+	char errorname[30];
+};
+
+struct nf_mttg_trav {
+	struct list_head *head;
+	struct list_head *curr;
+	uint8_t class;
+};
+
+enum {
+	MTTG_TRAV_INIT = 0,
+	MTTG_TRAV_NFP_UNSPEC = 1,
+	MTTG_TRAV_NFP_SPEC = 2,
+	MTTG_TRAV_DONE = 3,
+};
+
+struct nft_pipapo_elem;
+
+union nft_pipapo_map_bucket {
+	struct {
+		u32 to;
+		u32 n;
+	};
+	struct nft_pipapo_elem *e;
+};
+
+struct nft_pipapo_elem {
+	struct nft_set_ext ext;
+};
+
+struct nft_pipapo_field {
+	int groups;
+	long unsigned int rules;
+	size_t bsize;
+	int bb;
+	long unsigned int *lt;
+	union nft_pipapo_map_bucket *mt;
+};
+
+struct nft_pipapo_match {
+	int field_count;
+	long unsigned int **scratch;
+	size_t bsize_max;
+	struct callback_head rcu;
+	struct nft_pipapo_field f[0];
+};
+
+struct nft_pipapo {
+	struct nft_pipapo_match *match;
+	struct nft_pipapo_match *clone;
+	int width;
+	bool dirty;
+	long unsigned int last_gc;
+};
+
+struct xt_tcp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 option;
+	__u8 flg_mask;
+	__u8 flg_cmp;
+	__u8 invflags;
+};
+
+struct xt_udp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 invflags;
+};
+
+struct xt_mark_tginfo2 {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct xt_mark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+enum {
+	XT_CONNMARK_SET = 0,
+	XT_CONNMARK_SAVE = 1,
+	XT_CONNMARK_RESTORE = 2,
+};
+
+enum {
+	D_SHIFT_LEFT = 0,
+	D_SHIFT_RIGHT = 1,
+};
+
+struct xt_connmark_tginfo1 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 mode;
+};
+
+struct xt_connmark_tginfo2 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 shift_dir;
+	__u8 shift_bits;
+	__u8 mode;
+};
+
+struct xt_connmark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+struct nf_nat_range {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+};
+
+enum {
+	XT_ADDRTYPE_INVERT_SOURCE = 1,
+	XT_ADDRTYPE_INVERT_DEST = 2,
+	XT_ADDRTYPE_LIMIT_IFACE_IN = 4,
+	XT_ADDRTYPE_LIMIT_IFACE_OUT = 8,
+};
+
+enum {
+	XT_ADDRTYPE_UNSPEC = 1,
+	XT_ADDRTYPE_UNICAST = 2,
+	XT_ADDRTYPE_LOCAL = 4,
+	XT_ADDRTYPE_BROADCAST = 8,
+	XT_ADDRTYPE_ANYCAST = 16,
+	XT_ADDRTYPE_MULTICAST = 32,
+	XT_ADDRTYPE_BLACKHOLE = 64,
+	XT_ADDRTYPE_UNREACHABLE = 128,
+	XT_ADDRTYPE_PROHIBIT = 256,
+	XT_ADDRTYPE_THROW = 512,
+	XT_ADDRTYPE_NAT = 1024,
+	XT_ADDRTYPE_XRESOLVE = 2048,
+};
+
+struct xt_addrtype_info_v1 {
+	__u16 source;
+	__u16 dest;
+	__u32 flags;
+};
+
+struct xt_addrtype_info {
+	__u16 source;
+	__u16 dest;
+	__u32 invert_source;
+	__u32 invert_dest;
+};
+
+enum xt_cluster_flags {
+	XT_CLUSTER_F_INV = 1,
+};
+
+struct xt_cluster_match_info {
+	__u32 total_nodes;
+	__u32 node_mask;
+	__u32 hash_seed;
+	__u32 flags;
+};
+
+struct xt_bpf_info {
+	__u16 bpf_program_num_elem;
+	struct sock_filter bpf_program[64];
+	struct bpf_prog *filter;
+};
+
+enum xt_bpf_modes {
+	XT_BPF_MODE_BYTECODE = 0,
+	XT_BPF_MODE_FD_PINNED = 1,
+	XT_BPF_MODE_FD_ELF = 2,
+};
+
+struct xt_bpf_info_v1 {
+	__u16 mode;
+	__u16 bpf_program_num_elem;
+	__s32 fd;
+	union {
+		struct sock_filter bpf_program[64];
+		char path[512];
+	};
+	struct bpf_prog *filter;
+};
+
+enum xt_connbytes_what {
+	XT_CONNBYTES_PKTS = 0,
+	XT_CONNBYTES_BYTES = 1,
+	XT_CONNBYTES_AVGPKT = 2,
+};
+
+enum xt_connbytes_direction {
+	XT_CONNBYTES_DIR_ORIGINAL = 0,
+	XT_CONNBYTES_DIR_REPLY = 1,
+	XT_CONNBYTES_DIR_BOTH = 2,
+};
+
+struct xt_connbytes_info {
+	struct {
+		__u64 from;
+		__u64 to;
+	} count;
+	__u8 what;
+	__u8 direction;
+};
+
+enum xt_connlabel_mtopts {
+	XT_CONNLABEL_OP_INVERT = 1,
+	XT_CONNLABEL_OP_SET = 2,
+};
+
+struct xt_connlabel_mtinfo {
+	__u16 bit;
+	__u16 options;
+};
+
+enum {
+	XT_CONNLIMIT_INVERT = 1,
+	XT_CONNLIMIT_DADDR = 2,
+};
+
+struct nf_conncount_data;
+
+struct xt_connlimit_info {
+	union {
+		union nf_inet_addr mask;
+	};
+	unsigned int limit;
+	__u32 flags;
+	struct nf_conncount_data *data;
+};
+
+enum {
+	XT_CONNTRACK_STATE = 1,
+	XT_CONNTRACK_PROTO = 2,
+	XT_CONNTRACK_ORIGSRC = 4,
+	XT_CONNTRACK_ORIGDST = 8,
+	XT_CONNTRACK_REPLSRC = 16,
+	XT_CONNTRACK_REPLDST = 32,
+	XT_CONNTRACK_STATUS = 64,
+	XT_CONNTRACK_EXPIRES = 128,
+	XT_CONNTRACK_ORIGSRC_PORT = 256,
+	XT_CONNTRACK_ORIGDST_PORT = 512,
+	XT_CONNTRACK_REPLSRC_PORT = 1024,
+	XT_CONNTRACK_REPLDST_PORT = 2048,
+	XT_CONNTRACK_DIRECTION = 4096,
+	XT_CONNTRACK_STATE_ALIAS = 8192,
+};
+
+struct xt_conntrack_mtinfo1 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u8 state_mask;
+	__u8 status_mask;
+};
+
+struct xt_conntrack_mtinfo2 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+};
+
+struct xt_conntrack_mtinfo3 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__u16 origsrc_port;
+	__u16 origdst_port;
+	__u16 replsrc_port;
+	__u16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+	__u16 origsrc_port_high;
+	__u16 origdst_port_high;
+	__u16 replsrc_port_high;
+	__u16 repldst_port_high;
+};
+
+struct xt_cpu_info {
+	__u32 cpu;
+	__u32 invert;
+};
+
+enum xt_devgroup_flags {
+	XT_DEVGROUP_MATCH_SRC = 1,
+	XT_DEVGROUP_INVERT_SRC = 2,
+	XT_DEVGROUP_MATCH_DST = 4,
+	XT_DEVGROUP_INVERT_DST = 8,
+};
+
+struct xt_devgroup_info {
+	__u32 flags;
+	__u32 src_group;
+	__u32 src_mask;
+	__u32 dst_group;
+	__u32 dst_mask;
+};
+
+struct xt_dscp_info {
+	__u8 dscp;
+	__u8 invert;
+};
+
+struct xt_tos_match_info {
+	__u8 tos_mask;
+	__u8 tos_value;
+	__u8 invert;
+};
+
+struct xt_dccp_info {
+	__u16 dpts[2];
+	__u16 spts[2];
+	__u16 flags;
+	__u16 invflags;
+	__u16 typemask;
+	__u8 option;
+};
+
+struct xt_cgroup_info_v0 {
+	__u32 id;
+	__u32 invert;
+};
+
+struct xt_cgroup_info_v1 {
+	__u8 has_path;
+	__u8 has_classid;
+	__u8 invert_path;
+	__u8 invert_classid;
+	char path[4096];
+	__u32 classid;
+	void *priv;
+};
+
+struct xt_cgroup_info_v2 {
+	__u8 has_path;
+	__u8 has_classid;
+	__u8 invert_path;
+	__u8 invert_classid;
+	union {
+		char path[512];
+		__u32 classid;
+	};
+	void *priv;
+};
+
+struct ipvs_sync_daemon_cfg {
+	union nf_inet_addr mcast_group;
+	int syncid;
+	u16 sync_maxlen;
+	u16 mcast_port;
+	u8 mcast_af;
+	u8 mcast_ttl;
+	char mcast_ifn[16];
+};
+
+struct ip_vs_proto_data;
+
+struct ip_vs_stats_rcu;
+
+struct ip_vs_est_kt_data;
+
+struct ipvs_master_sync_state;
+
+struct ip_vs_sync_thread_data;
+
+struct netns_ipvs {
+	int gen;
+	int enable;
+	struct hlist_head rs_table[16];
+	struct list_head app_list;
+	struct ip_vs_proto_data *proto_data_table[32];
+	struct list_head tcp_apps[16];
+	struct list_head udp_apps[16];
+	struct list_head sctp_apps[16];
+	atomic_t conn_count;
+	struct ip_vs_stats_rcu *tot_stats;
+	int num_services;
+	int num_services6;
+	struct list_head dest_trash;
+	spinlock_t dest_trash_lock;
+	struct timer_list dest_trash_timer;
+	atomic_t ftpsvc_counter;
+	atomic_t nullsvc_counter;
+	atomic_t conn_out_counter;
+	struct delayed_work expire_nodest_conn_work;
+	struct delayed_work defense_work;
+	int drop_rate;
+	int drop_counter;
+	int old_secure_tcp;
+	atomic_t dropentry;
+	spinlock_t dropentry_lock;
+	spinlock_t droppacket_lock;
+	spinlock_t securetcp_lock;
+	struct ctl_table_header *sysctl_hdr;
+	struct ctl_table *sysctl_tbl;
+	int sysctl_amemthresh;
+	int sysctl_am_droprate;
+	int sysctl_drop_entry;
+	int sysctl_drop_packet;
+	int sysctl_secure_tcp;
+	int sysctl_conntrack;
+	int sysctl_snat_reroute;
+	int sysctl_sync_ver;
+	int sysctl_sync_ports;
+	int sysctl_sync_persist_mode;
+	long unsigned int sysctl_sync_qlen_max;
+	int sysctl_sync_sock_size;
+	int sysctl_cache_bypass;
+	int sysctl_expire_nodest_conn;
+	int sysctl_sloppy_tcp;
+	int sysctl_sloppy_sctp;
+	int sysctl_expire_quiescent_template;
+	int sysctl_sync_threshold[2];
+	unsigned int sysctl_sync_refresh_period;
+	int sysctl_sync_retries;
+	int sysctl_nat_icmp_send;
+	int sysctl_pmtu_disc;
+	int sysctl_backup_only;
+	int sysctl_conn_reuse_mode;
+	int sysctl_schedule_icmp;
+	int sysctl_ignore_tunneled;
+	int sysctl_run_estimation;
+	cpumask_var_t sysctl_est_cpulist;
+	int est_cpulist_valid;
+	int sysctl_est_nice;
+	int est_stopped;
+	int sysctl_lblc_expiration;
+	struct ctl_table_header *lblc_ctl_header;
+	struct ctl_table *lblc_ctl_table;
+	int sysctl_lblcr_expiration;
+	struct ctl_table_header *lblcr_ctl_header;
+	struct ctl_table *lblcr_ctl_table;
+	struct delayed_work est_reload_work;
+	struct mutex est_mutex;
+	struct hlist_head est_temp_list;
+	struct ip_vs_est_kt_data **est_kt_arr;
+	long unsigned int est_max_threads;
+	int est_calc_phase;
+	int est_chain_max;
+	int est_kt_count;
+	int est_add_ktid;
+	atomic_t est_genid;
+	atomic_t est_genid_done;
+	spinlock_t sync_lock;
+	struct ipvs_master_sync_state *ms;
+	spinlock_t sync_buff_lock;
+	struct ip_vs_sync_thread_data *master_tinfo;
+	struct ip_vs_sync_thread_data *backup_tinfo;
+	int threads_mask;
+	volatile int sync_state;
+	struct mutex sync_mutex;
+	struct ipvs_sync_daemon_cfg mcfg;
+	struct ipvs_sync_daemon_cfg bcfg;
+	struct net *net;
+	unsigned int mixed_address_family_dests;
+	unsigned int hooks_afmask;
+};
+
+enum {
+	XT_IPVS_IPVS_PROPERTY = 1,
+	XT_IPVS_PROTO = 2,
+	XT_IPVS_VADDR = 4,
+	XT_IPVS_VPORT = 8,
+	XT_IPVS_DIR = 16,
+	XT_IPVS_METHOD = 32,
+	XT_IPVS_VPORTCTL = 64,
+	XT_IPVS_MASK = 127,
+	XT_IPVS_ONCE_MASK = 126,
+};
+
+struct xt_ipvs_mtinfo {
+	union nf_inet_addr vaddr;
+	union nf_inet_addr vmask;
+	__be16 vport;
+	__u8 l4proto;
+	__u8 fwd_method;
+	__be16 vportctl;
+	__u8 invert;
+	__u8 bitmask;
+};
+
+struct ip_vs_iphdr {
+	int hdr_flags;
+	__u32 off;
+	__u32 len;
+	__u16 fragoffs;
+	__s16 protocol;
+	__s32 flags;
+	union nf_inet_addr saddr;
+	union nf_inet_addr daddr;
+};
+
+struct ip_vs_seq {
+	__u32 init_seq;
+	__u32 delta;
+	__u32 previous_delta;
+};
+
+struct ip_vs_counters {
+	u64_stats_t conns;
+	u64_stats_t inpkts;
+	u64_stats_t outpkts;
+	u64_stats_t inbytes;
+	u64_stats_t outbytes;
+};
+
+struct ip_vs_cpu_stats {
+	struct ip_vs_counters cnt;
+	struct u64_stats_sync syncp;
+};
+
+struct ip_vs_estimator {
+	struct hlist_node list;
+	u64 last_inbytes;
+	u64 last_outbytes;
+	u64 last_conns;
+	u64 last_inpkts;
+	u64 last_outpkts;
+	u64 cps;
+	u64 inpps;
+	u64 outpps;
+	u64 inbps;
+	u64 outbps;
+	s32 ktid: 16;
+	s32 ktrow: 8;
+	s32 ktcid: 8;
+};
+
+struct ip_vs_kstats {
+	u64 conns;
+	u64 inpkts;
+	u64 outpkts;
+	u64 inbytes;
+	u64 outbytes;
+	u64 cps;
+	u64 inpps;
+	u64 outpps;
+	u64 inbps;
+	u64 outbps;
+};
+
+struct ip_vs_stats {
+	struct ip_vs_kstats kstats;
+	struct ip_vs_estimator est;
+	struct ip_vs_cpu_stats *cpustats;
+	spinlock_t lock;
+	struct ip_vs_kstats kstats0;
+};
+
+struct ip_vs_stats_rcu {
+	struct ip_vs_stats s;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_est_tick_data {
+	struct hlist_head chains[48];
+	long unsigned int present[1];
+	long unsigned int full[1];
+	int chain_len[48];
+};
+
+struct ip_vs_est_kt_data {
+	struct netns_ipvs *ipvs;
+	struct task_struct *task;
+	struct ip_vs_est_tick_data *ticks[50];
+	long unsigned int avail[1];
+	long unsigned int est_timer;
+	struct ip_vs_stats *calc_stats;
+	int tick_len[50];
+	int id;
+	int chain_max;
+	int tick_max;
+	int est_count;
+	int est_max_count;
+	int add_row;
+	int est_row;
+};
+
+struct ip_vs_conn;
+
+struct ip_vs_app;
+
+struct ip_vs_protocol {
+	struct ip_vs_protocol *next;
+	char *name;
+	u16 protocol;
+	u16 num_states;
+	int dont_defrag;
+	void (*init)(struct ip_vs_protocol *);
+	void (*exit)(struct ip_vs_protocol *);
+	int (*init_netns)(struct netns_ipvs *, struct ip_vs_proto_data *);
+	void (*exit_netns)(struct netns_ipvs *, struct ip_vs_proto_data *);
+	int (*conn_schedule)(struct netns_ipvs *, int, struct sk_buff *, struct ip_vs_proto_data *, int *, struct ip_vs_conn **, struct ip_vs_iphdr *);
+	struct ip_vs_conn * (*conn_in_get)(struct netns_ipvs *, int, const struct sk_buff *, const struct ip_vs_iphdr *);
+	struct ip_vs_conn * (*conn_out_get)(struct netns_ipvs *, int, const struct sk_buff *, const struct ip_vs_iphdr *);
+	int (*snat_handler)(struct sk_buff *, struct ip_vs_protocol *, struct ip_vs_conn *, struct ip_vs_iphdr *);
+	int (*dnat_handler)(struct sk_buff *, struct ip_vs_protocol *, struct ip_vs_conn *, struct ip_vs_iphdr *);
+	const char * (*state_name)(int);
+	void (*state_transition)(struct ip_vs_conn *, int, const struct sk_buff *, struct ip_vs_proto_data *);
+	int (*register_app)(struct netns_ipvs *, struct ip_vs_app *);
+	void (*unregister_app)(struct netns_ipvs *, struct ip_vs_app *);
+	int (*app_conn_bind)(struct ip_vs_conn *);
+	void (*debug_packet)(int, struct ip_vs_protocol *, const struct sk_buff *, int, const char *);
+	void (*timeout_change)(struct ip_vs_proto_data *, int);
+};
+
+struct tcp_states_t;
+
+struct ip_vs_proto_data {
+	struct ip_vs_proto_data *next;
+	struct ip_vs_protocol *pp;
+	int *timeout_table;
+	atomic_t appcnt;
+	struct tcp_states_t *tcp_state_table;
+};
+
+struct ip_vs_dest;
+
+struct ip_vs_pe;
+
+struct ip_vs_conn {
+	struct hlist_node c_list;
+	__be16 cport;
+	__be16 dport;
+	__be16 vport;
+	u16 af;
+	union nf_inet_addr caddr;
+	union nf_inet_addr vaddr;
+	union nf_inet_addr daddr;
+	volatile __u32 flags;
+	__u16 protocol;
+	__u16 daf;
+	struct netns_ipvs *ipvs;
+	refcount_t refcnt;
+	struct timer_list timer;
+	volatile long unsigned int timeout;
+	spinlock_t lock;
+	volatile __u16 state;
+	volatile __u16 old_state;
+	__u32 fwmark;
+	long unsigned int sync_endtime;
+	struct ip_vs_conn *control;
+	atomic_t n_control;
+	struct ip_vs_dest *dest;
+	atomic_t in_pkts;
+	int (*packet_xmit)(struct sk_buff *, struct ip_vs_conn *, struct ip_vs_protocol *, struct ip_vs_iphdr *);
+	struct ip_vs_app *app;
+	void *app_data;
+	struct ip_vs_seq in_seq;
+	struct ip_vs_seq out_seq;
+	const struct ip_vs_pe *pe;
+	char *pe_data;
+	__u8 pe_data_len;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_app {
+	struct list_head a_list;
+	int type;
+	char *name;
+	__u16 protocol;
+	struct module *module;
+	struct list_head incs_list;
+	struct list_head p_list;
+	struct ip_vs_app *app;
+	__be16 port;
+	atomic_t usecnt;
+	struct callback_head callback_head;
+	int (*pkt_out)(struct ip_vs_app *, struct ip_vs_conn *, struct sk_buff *, int *, struct ip_vs_iphdr *);
+	int (*pkt_in)(struct ip_vs_app *, struct ip_vs_conn *, struct sk_buff *, int *, struct ip_vs_iphdr *);
+	int (*init_conn)(struct ip_vs_app *, struct ip_vs_conn *);
+	int (*done_conn)(struct ip_vs_app *, struct ip_vs_conn *);
+	int (*bind_conn)(struct ip_vs_app *, struct ip_vs_conn *, struct ip_vs_protocol *);
+	void (*unbind_conn)(struct ip_vs_app *, struct ip_vs_conn *);
+	int *timeout_table;
+	int *timeouts;
+	int timeouts_size;
+	int (*conn_schedule)(struct sk_buff *, struct ip_vs_app *, int *, struct ip_vs_conn **);
+	struct ip_vs_conn * (*conn_in_get)(const struct sk_buff *, struct ip_vs_app *, const struct iphdr *, int);
+	struct ip_vs_conn * (*conn_out_get)(const struct sk_buff *, struct ip_vs_app *, const struct iphdr *, int);
+	int (*state_transition)(struct ip_vs_conn *, int, const struct sk_buff *, struct ip_vs_app *);
+	void (*timeout_change)(struct ip_vs_app *, int);
+};
+
+struct ip_vs_conn_param {
+	struct netns_ipvs *ipvs;
+	const union nf_inet_addr *caddr;
+	const union nf_inet_addr *vaddr;
+	__be16 cport;
+	__be16 vport;
+	__u16 protocol;
+	u16 af;
+	const struct ip_vs_pe *pe;
+	char *pe_data;
+	__u8 pe_data_len;
+};
+
+struct ip_vs_service;
+
+struct ip_vs_pe {
+	struct list_head n_list;
+	char *name;
+	atomic_t refcnt;
+	struct module *module;
+	int (*fill_param)(struct ip_vs_conn_param *, struct sk_buff *);
+	bool (*ct_match)(const struct ip_vs_conn_param *, struct ip_vs_conn *);
+	u32 (*hashkey_raw)(const struct ip_vs_conn_param *, u32, bool);
+	int (*show_pe_data)(const struct ip_vs_conn *, char *);
+	struct ip_vs_conn * (*conn_out)(struct ip_vs_service *, struct ip_vs_dest *, struct sk_buff *, const struct ip_vs_iphdr *, __be16, __be16);
+};
+
+struct ip_vs_dest_dst;
+
+struct ip_vs_dest {
+	struct list_head n_list;
+	struct hlist_node d_list;
+	u16 af;
+	__be16 port;
+	union nf_inet_addr addr;
+	volatile unsigned int flags;
+	atomic_t conn_flags;
+	atomic_t weight;
+	atomic_t last_weight;
+	__u16 tun_type;
+	__be16 tun_port;
+	__u16 tun_flags;
+	refcount_t refcnt;
+	struct ip_vs_stats stats;
+	long unsigned int idle_start;
+	atomic_t activeconns;
+	atomic_t inactconns;
+	atomic_t persistconns;
+	__u32 u_threshold;
+	__u32 l_threshold;
+	spinlock_t dst_lock;
+	struct ip_vs_dest_dst *dest_dst;
+	struct ip_vs_service *svc;
+	__u16 protocol;
+	__be16 vport;
+	union nf_inet_addr vaddr;
+	__u32 vfwmark;
+	struct callback_head callback_head;
+	struct list_head t_list;
+	unsigned int in_rs_table: 1;
+};
+
+struct ip_vs_scheduler;
+
+struct ip_vs_service {
+	struct hlist_node s_list;
+	struct hlist_node f_list;
+	atomic_t refcnt;
+	u16 af;
+	__u16 protocol;
+	union nf_inet_addr addr;
+	__be16 port;
+	__u32 fwmark;
+	unsigned int flags;
+	unsigned int timeout;
+	__be32 netmask;
+	struct netns_ipvs *ipvs;
+	struct list_head destinations;
+	__u32 num_dests;
+	struct ip_vs_stats stats;
+	struct ip_vs_scheduler *scheduler;
+	spinlock_t sched_lock;
+	void *sched_data;
+	struct ip_vs_pe *pe;
+	int conntrack_afmask;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_scheduler {
+	struct list_head n_list;
+	char *name;
+	atomic_t refcnt;
+	struct module *module;
+	int (*init_service)(struct ip_vs_service *);
+	void (*done_service)(struct ip_vs_service *);
+	int (*add_dest)(struct ip_vs_service *, struct ip_vs_dest *);
+	int (*del_dest)(struct ip_vs_service *, struct ip_vs_dest *);
+	int (*upd_dest)(struct ip_vs_service *, struct ip_vs_dest *);
+	struct ip_vs_dest * (*schedule)(struct ip_vs_service *, const struct sk_buff *, struct ip_vs_iphdr *);
+};
+
+struct ip_vs_dest_dst {
+	struct dst_entry *dst_cache;
+	u32 dst_cookie;
+	union nf_inet_addr dst_saddr;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_sync_buff;
+
+struct ipvs_master_sync_state {
+	struct list_head sync_queue;
+	struct ip_vs_sync_buff *sync_buff;
+	long unsigned int sync_queue_len;
+	unsigned int sync_queue_delay;
+	struct delayed_work master_wakeup_work;
+	struct netns_ipvs *ipvs;
+};
+
+enum ipset_cmd {
+	IPSET_CMD_NONE = 0,
+	IPSET_CMD_PROTOCOL = 1,
+	IPSET_CMD_CREATE = 2,
+	IPSET_CMD_DESTROY = 3,
+	IPSET_CMD_FLUSH = 4,
+	IPSET_CMD_RENAME = 5,
+	IPSET_CMD_SWAP = 6,
+	IPSET_CMD_LIST = 7,
+	IPSET_CMD_SAVE = 8,
+	IPSET_CMD_ADD = 9,
+	IPSET_CMD_DEL = 10,
+	IPSET_CMD_TEST = 11,
+	IPSET_CMD_HEADER = 12,
+	IPSET_CMD_TYPE = 13,
+	IPSET_CMD_GET_BYNAME = 14,
+	IPSET_CMD_GET_BYINDEX = 15,
+	IPSET_MSG_MAX = 16,
+	IPSET_CMD_RESTORE = 16,
+	IPSET_CMD_HELP = 17,
+	IPSET_CMD_VERSION = 18,
+	IPSET_CMD_QUIT = 19,
+	IPSET_CMD_MAX = 20,
+	IPSET_CMD_COMMIT = 20,
+};
+
+enum {
+	IPSET_ATTR_UNSPEC = 0,
+	IPSET_ATTR_PROTOCOL = 1,
+	IPSET_ATTR_SETNAME = 2,
+	IPSET_ATTR_TYPENAME = 3,
+	IPSET_ATTR_SETNAME2 = 3,
+	IPSET_ATTR_REVISION = 4,
+	IPSET_ATTR_FAMILY = 5,
+	IPSET_ATTR_FLAGS = 6,
+	IPSET_ATTR_DATA = 7,
+	IPSET_ATTR_ADT = 8,
+	IPSET_ATTR_LINENO = 9,
+	IPSET_ATTR_PROTOCOL_MIN = 10,
+	IPSET_ATTR_REVISION_MIN = 10,
+	IPSET_ATTR_INDEX = 11,
+	__IPSET_ATTR_CMD_MAX = 12,
+};
+
+enum {
+	IPSET_ATTR_IP = 1,
+	IPSET_ATTR_IP_FROM = 1,
+	IPSET_ATTR_IP_TO = 2,
+	IPSET_ATTR_CIDR = 3,
+	IPSET_ATTR_PORT = 4,
+	IPSET_ATTR_PORT_FROM = 4,
+	IPSET_ATTR_PORT_TO = 5,
+	IPSET_ATTR_TIMEOUT = 6,
+	IPSET_ATTR_PROTO = 7,
+	IPSET_ATTR_CADT_FLAGS = 8,
+	IPSET_ATTR_CADT_LINENO = 9,
+	IPSET_ATTR_MARK = 10,
+	IPSET_ATTR_MARKMASK = 11,
+	IPSET_ATTR_BITMASK = 12,
+	IPSET_ATTR_CADT_MAX = 16,
+	IPSET_ATTR_INITVAL = 17,
+	IPSET_ATTR_HASHSIZE = 18,
+	IPSET_ATTR_MAXELEM = 19,
+	IPSET_ATTR_NETMASK = 20,
+	IPSET_ATTR_BUCKETSIZE = 21,
+	IPSET_ATTR_RESIZE = 22,
+	IPSET_ATTR_SIZE = 23,
+	IPSET_ATTR_ELEMENTS = 24,
+	IPSET_ATTR_REFERENCES = 25,
+	IPSET_ATTR_MEMSIZE = 26,
+	__IPSET_ATTR_CREATE_MAX = 27,
+};
+
+enum {
+	IPSET_ATTR_ETHER = 17,
+	IPSET_ATTR_NAME = 18,
+	IPSET_ATTR_NAMEREF = 19,
+	IPSET_ATTR_IP2 = 20,
+	IPSET_ATTR_CIDR2 = 21,
+	IPSET_ATTR_IP2_TO = 22,
+	IPSET_ATTR_IFACE = 23,
+	IPSET_ATTR_BYTES = 24,
+	IPSET_ATTR_PACKETS = 25,
+	IPSET_ATTR_COMMENT = 26,
+	IPSET_ATTR_SKBMARK = 27,
+	IPSET_ATTR_SKBPRIO = 28,
+	IPSET_ATTR_SKBQUEUE = 29,
+	IPSET_ATTR_PAD = 30,
+	__IPSET_ATTR_ADT_MAX = 31,
+};
+
+enum {
+	IPSET_ATTR_IPADDR_IPV4 = 1,
+	IPSET_ATTR_IPADDR_IPV6 = 2,
+	__IPSET_ATTR_IPADDR_MAX = 3,
+};
+
+enum ipset_errno {
+	IPSET_ERR_PRIVATE = 4096,
+	IPSET_ERR_PROTOCOL = 4097,
+	IPSET_ERR_FIND_TYPE = 4098,
+	IPSET_ERR_MAX_SETS = 4099,
+	IPSET_ERR_BUSY = 4100,
+	IPSET_ERR_EXIST_SETNAME2 = 4101,
+	IPSET_ERR_TYPE_MISMATCH = 4102,
+	IPSET_ERR_EXIST = 4103,
+	IPSET_ERR_INVALID_CIDR = 4104,
+	IPSET_ERR_INVALID_NETMASK = 4105,
+	IPSET_ERR_INVALID_FAMILY = 4106,
+	IPSET_ERR_TIMEOUT = 4107,
+	IPSET_ERR_REFERENCED = 4108,
+	IPSET_ERR_IPADDR_IPV4 = 4109,
+	IPSET_ERR_IPADDR_IPV6 = 4110,
+	IPSET_ERR_COUNTER = 4111,
+	IPSET_ERR_COMMENT = 4112,
+	IPSET_ERR_INVALID_MARKMASK = 4113,
+	IPSET_ERR_SKBINFO = 4114,
+	IPSET_ERR_BITMASK_NETMASK_EXCL = 4115,
+	IPSET_ERR_TYPE_SPECIFIC = 4352,
+};
+
+enum ipset_cmd_flags {
+	IPSET_FLAG_BIT_EXIST = 0,
+	IPSET_FLAG_EXIST = 1,
+	IPSET_FLAG_BIT_LIST_SETNAME = 1,
+	IPSET_FLAG_LIST_SETNAME = 2,
+	IPSET_FLAG_BIT_LIST_HEADER = 2,
+	IPSET_FLAG_LIST_HEADER = 4,
+	IPSET_FLAG_BIT_SKIP_COUNTER_UPDATE = 3,
+	IPSET_FLAG_SKIP_COUNTER_UPDATE = 8,
+	IPSET_FLAG_BIT_SKIP_SUBCOUNTER_UPDATE = 4,
+	IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE = 16,
+	IPSET_FLAG_BIT_MATCH_COUNTERS = 5,
+	IPSET_FLAG_MATCH_COUNTERS = 32,
+	IPSET_FLAG_BIT_RETURN_NOMATCH = 7,
+	IPSET_FLAG_RETURN_NOMATCH = 128,
+	IPSET_FLAG_BIT_MAP_SKBMARK = 8,
+	IPSET_FLAG_MAP_SKBMARK = 256,
+	IPSET_FLAG_BIT_MAP_SKBPRIO = 9,
+	IPSET_FLAG_MAP_SKBPRIO = 512,
+	IPSET_FLAG_BIT_MAP_SKBQUEUE = 10,
+	IPSET_FLAG_MAP_SKBQUEUE = 1024,
+	IPSET_FLAG_CMD_MAX = 15,
+};
+
+enum ipset_cadt_flags {
+	IPSET_FLAG_BIT_BEFORE = 0,
+	IPSET_FLAG_BEFORE = 1,
+	IPSET_FLAG_BIT_PHYSDEV = 1,
+	IPSET_FLAG_PHYSDEV = 2,
+	IPSET_FLAG_BIT_NOMATCH = 2,
+	IPSET_FLAG_NOMATCH = 4,
+	IPSET_FLAG_BIT_WITH_COUNTERS = 3,
+	IPSET_FLAG_WITH_COUNTERS = 8,
+	IPSET_FLAG_BIT_WITH_COMMENT = 4,
+	IPSET_FLAG_WITH_COMMENT = 16,
+	IPSET_FLAG_BIT_WITH_FORCEADD = 5,
+	IPSET_FLAG_WITH_FORCEADD = 32,
+	IPSET_FLAG_BIT_WITH_SKBINFO = 6,
+	IPSET_FLAG_WITH_SKBINFO = 64,
+	IPSET_FLAG_BIT_IFACE_WILDCARD = 7,
+	IPSET_FLAG_IFACE_WILDCARD = 128,
+	IPSET_FLAG_CADT_MAX = 15,
+};
+
+enum ipset_create_flags {
+	IPSET_CREATE_FLAG_BIT_FORCEADD = 0,
+	IPSET_CREATE_FLAG_FORCEADD = 1,
+	IPSET_CREATE_FLAG_BIT_BUCKETSIZE = 1,
+	IPSET_CREATE_FLAG_BUCKETSIZE = 2,
+	IPSET_CREATE_FLAG_BIT_MAX = 7,
+};
+
+enum ipset_adt {
+	IPSET_ADD = 0,
+	IPSET_DEL = 1,
+	IPSET_TEST = 2,
+	IPSET_ADT_MAX = 3,
+	IPSET_CREATE = 3,
+	IPSET_CADT_MAX = 4,
+};
+
+typedef __u16 ip_set_id_t;
+
+enum ip_set_dim {
+	IPSET_DIM_ZERO = 0,
+	IPSET_DIM_ONE = 1,
+	IPSET_DIM_TWO = 2,
+	IPSET_DIM_THREE = 3,
+	IPSET_DIM_MAX = 6,
+	IPSET_BIT_RETURN_NOMATCH = 7,
+};
+
+enum {
+	IPSET_COUNTER_NONE = 0,
+	IPSET_COUNTER_EQ = 1,
+	IPSET_COUNTER_NE = 2,
+	IPSET_COUNTER_LT = 3,
+	IPSET_COUNTER_GT = 4,
+};
+
+union ip_set_name_index {
+	char name[32];
+	ip_set_id_t index;
+};
+
+struct ip_set_req_get_set {
+	unsigned int op;
+	unsigned int version;
+	union ip_set_name_index set;
+};
+
+struct ip_set_req_get_set_family {
+	unsigned int op;
+	unsigned int version;
+	unsigned int family;
+	union ip_set_name_index set;
+};
+
+struct ip_set_req_version {
+	unsigned int op;
+	unsigned int version;
+};
+
+enum ip_set_feature {
+	IPSET_TYPE_IP_FLAG = 0,
+	IPSET_TYPE_IP = 1,
+	IPSET_TYPE_PORT_FLAG = 1,
+	IPSET_TYPE_PORT = 2,
+	IPSET_TYPE_MAC_FLAG = 2,
+	IPSET_TYPE_MAC = 4,
+	IPSET_TYPE_IP2_FLAG = 3,
+	IPSET_TYPE_IP2 = 8,
+	IPSET_TYPE_NAME_FLAG = 4,
+	IPSET_TYPE_NAME = 16,
+	IPSET_TYPE_IFACE_FLAG = 5,
+	IPSET_TYPE_IFACE = 32,
+	IPSET_TYPE_MARK_FLAG = 6,
+	IPSET_TYPE_MARK = 64,
+	IPSET_TYPE_NOMATCH_FLAG = 7,
+	IPSET_TYPE_NOMATCH = 128,
+	IPSET_DUMP_LAST_FLAG = 8,
+	IPSET_DUMP_LAST = 256,
+};
+
+enum ip_set_extension {
+	IPSET_EXT_BIT_TIMEOUT = 0,
+	IPSET_EXT_TIMEOUT = 1,
+	IPSET_EXT_BIT_COUNTER = 1,
+	IPSET_EXT_COUNTER = 2,
+	IPSET_EXT_BIT_COMMENT = 2,
+	IPSET_EXT_COMMENT = 4,
+	IPSET_EXT_BIT_SKBINFO = 3,
+	IPSET_EXT_SKBINFO = 8,
+	IPSET_EXT_BIT_DESTROY = 7,
+	IPSET_EXT_DESTROY = 128,
+};
+
+enum ip_set_ext_id {
+	IPSET_EXT_ID_COUNTER = 0,
+	IPSET_EXT_ID_TIMEOUT = 1,
+	IPSET_EXT_ID_SKBINFO = 2,
+	IPSET_EXT_ID_COMMENT = 3,
+	IPSET_EXT_ID_MAX = 4,
+};
+
+struct ip_set;
+
+struct ip_set_ext_type {
+	void (*destroy)(struct ip_set *, void *);
+	enum ip_set_extension type;
+	enum ipset_cadt_flags flag;
+	u8 len;
+	u8 align;
+};
+
+struct ip_set_type;
+
+struct ip_set_type_variant;
+
+struct ip_set {
+	char name[32];
+	spinlock_t lock;
+	u32 ref;
+	u32 ref_netlink;
+	struct ip_set_type *type;
+	const struct ip_set_type_variant *variant;
+	u8 family;
+	u8 revision;
+	u8 extensions;
+	u8 flags;
+	u32 timeout;
+	u32 elements;
+	size_t ext_size;
+	size_t dsize;
+	size_t offset[4];
+	void *data;
+};
+
+struct ip_set_counter {
+	atomic64_t bytes;
+	atomic64_t packets;
+};
+
+struct ip_set_comment_rcu {
+	struct callback_head rcu;
+	char str[0];
+};
+
+struct ip_set_comment {
+	struct ip_set_comment_rcu *c;
+};
+
+struct ip_set_skbinfo {
+	u32 skbmark;
+	u32 skbmarkmask;
+	u32 skbprio;
+	u16 skbqueue;
+	u16 __pad;
+};
+
+struct ip_set_ext {
+	struct ip_set_skbinfo skbinfo;
+	u64 packets;
+	u64 bytes;
+	char *comment;
+	u32 timeout;
+	u8 packets_op;
+	u8 bytes_op;
+	bool target;
+};
+
+typedef int (*ipset_adtfn)(struct ip_set *, void *, const struct ip_set_ext *, struct ip_set_ext *, u32);
+
+struct ip_set_adt_opt {
+	u8 family;
+	u8 dim;
+	u8 flags;
+	u32 cmdflags;
+	struct ip_set_ext ext;
+};
+
+struct ip_set_type_variant {
+	int (*kadt)(struct ip_set *, const struct sk_buff *, const struct xt_action_param *, enum ipset_adt, struct ip_set_adt_opt *);
+	int (*uadt)(struct ip_set *, struct nlattr **, enum ipset_adt, u32 *, u32, bool);
+	ipset_adtfn adt[3];
+	int (*resize)(struct ip_set *, bool);
+	void (*destroy)(struct ip_set *);
+	void (*flush)(struct ip_set *);
+	void (*expire)(struct ip_set *);
+	int (*head)(struct ip_set *, struct sk_buff *);
+	int (*list)(const struct ip_set *, struct sk_buff *, struct netlink_callback *);
+	void (*uref)(struct ip_set *, struct netlink_callback *, bool);
+	bool (*same_set)(const struct ip_set *, const struct ip_set *);
+	bool region_lock;
+};
+
+struct ip_set_type {
+	struct list_head list;
+	char name[32];
+	u8 protocol;
+	u8 dimension;
+	u8 family;
+	u8 revision_min;
+	u8 revision_max;
+	u8 create_flags[10];
+	u16 features;
+	int (*create)(struct net *, struct ip_set *, struct nlattr **, u32);
+	const struct nla_policy create_policy[27];
+	const struct nla_policy adt_policy[31];
+	struct module *me;
+};
+
+enum {
+	IPSET_CB_NET = 0,
+	IPSET_CB_PROTO = 1,
+	IPSET_CB_DUMP = 2,
+	IPSET_CB_INDEX = 3,
+	IPSET_CB_PRIVATE = 4,
+	IPSET_CB_ARG0 = 5,
+};
+
+struct ip_set_net {
+	struct ip_set **ip_set_list;
+	ip_set_id_t ip_set_max;
+	bool is_deleted;
+	bool is_destroyed;
+};
+
+enum {
+	IP_VS_TCP_S_NONE = 0,
+	IP_VS_TCP_S_ESTABLISHED = 1,
+	IP_VS_TCP_S_SYN_SENT = 2,
+	IP_VS_TCP_S_SYN_RECV = 3,
+	IP_VS_TCP_S_FIN_WAIT = 4,
+	IP_VS_TCP_S_TIME_WAIT = 5,
+	IP_VS_TCP_S_CLOSE = 6,
+	IP_VS_TCP_S_CLOSE_WAIT = 7,
+	IP_VS_TCP_S_LAST_ACK = 8,
+	IP_VS_TCP_S_LISTEN = 9,
+	IP_VS_TCP_S_SYNACK = 10,
+	IP_VS_TCP_S_LAST = 11,
+};
+
+enum ip_vs_sctp_states {
+	IP_VS_SCTP_S_NONE = 0,
+	IP_VS_SCTP_S_INIT1 = 1,
+	IP_VS_SCTP_S_INIT = 2,
+	IP_VS_SCTP_S_COOKIE_SENT = 3,
+	IP_VS_SCTP_S_COOKIE_REPLIED = 4,
+	IP_VS_SCTP_S_COOKIE_WAIT = 5,
+	IP_VS_SCTP_S_COOKIE = 6,
+	IP_VS_SCTP_S_COOKIE_ECHOED = 7,
+	IP_VS_SCTP_S_ESTABLISHED = 8,
+	IP_VS_SCTP_S_SHUTDOWN_SENT = 9,
+	IP_VS_SCTP_S_SHUTDOWN_RECEIVED = 10,
+	IP_VS_SCTP_S_SHUTDOWN_ACK_SENT = 11,
+	IP_VS_SCTP_S_REJECTED = 12,
+	IP_VS_SCTP_S_CLOSED = 13,
+	IP_VS_SCTP_S_LAST = 14,
+};
+
+struct ip_vs_aligned_lock {
+	spinlock_t l;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ip_vs_iter_state {
+	struct seq_net_private p;
+	struct hlist_head *l;
+};
+
+struct guehdr {
+	union {
+		struct {
+			__u8 hlen: 5;
+			__u8 control: 1;
+			__u8 version: 2;
+			__u8 proto_ctype;
+			__be16 flags;
+		};
+		__be32 word;
+	};
+};
+
+enum {
+	IP_VS_CONN_F_TUNNEL_TYPE_IPIP = 0,
+	IP_VS_CONN_F_TUNNEL_TYPE_GUE = 1,
+	IP_VS_CONN_F_TUNNEL_TYPE_GRE = 2,
+	IP_VS_CONN_F_TUNNEL_TYPE_MAX = 3,
+};
+
+enum {
+	IP_VS_DIR_INPUT = 0,
+	IP_VS_DIR_OUTPUT = 1,
+	IP_VS_DIR_INPUT_ONLY = 2,
+	IP_VS_DIR_LAST = 3,
+};
+
+struct ip_vs_service_user {
+	__u16 protocol;
+	__be32 addr;
+	__be16 port;
+	__u32 fwmark;
+	char sched_name[16];
+	unsigned int flags;
+	unsigned int timeout;
+	__be32 netmask;
+};
+
+struct ip_vs_dest_user {
+	__be32 addr;
+	__be16 port;
+	unsigned int conn_flags;
+	int weight;
+	__u32 u_threshold;
+	__u32 l_threshold;
+};
+
+struct ip_vs_stats_user {
+	__u32 conns;
+	__u32 inpkts;
+	__u32 outpkts;
+	__u64 inbytes;
+	__u64 outbytes;
+	__u32 cps;
+	__u32 inpps;
+	__u32 outpps;
+	__u32 inbps;
+	__u32 outbps;
+};
+
+struct ip_vs_getinfo {
+	unsigned int version;
+	unsigned int size;
+	unsigned int num_services;
+};
+
+struct ip_vs_service_entry {
+	__u16 protocol;
+	__be32 addr;
+	__be16 port;
+	__u32 fwmark;
+	char sched_name[16];
+	unsigned int flags;
+	unsigned int timeout;
+	__be32 netmask;
+	unsigned int num_dests;
+	struct ip_vs_stats_user stats;
+};
+
+struct ip_vs_dest_entry {
+	__be32 addr;
+	__be16 port;
+	unsigned int conn_flags;
+	int weight;
+	__u32 u_threshold;
+	__u32 l_threshold;
+	__u32 activeconns;
+	__u32 inactconns;
+	__u32 persistconns;
+	struct ip_vs_stats_user stats;
+};
+
+struct ip_vs_get_dests {
+	__u16 protocol;
+	__be32 addr;
+	__be16 port;
+	__u32 fwmark;
+	unsigned int num_dests;
+	struct ip_vs_dest_entry entrytable[0];
+};
+
+struct ip_vs_get_services {
+	unsigned int num_services;
+	struct ip_vs_service_entry entrytable[0];
+};
+
+struct ip_vs_timeout_user {
+	int tcp_timeout;
+	int tcp_fin_timeout;
+	int udp_timeout;
+};
+
+struct ip_vs_daemon_user {
+	int state;
+	char mcast_ifn[16];
+	int syncid;
+};
+
+struct ip_vs_flags {
+	__u32 flags;
+	__u32 mask;
+};
+
+enum {
+	IPVS_CMD_UNSPEC = 0,
+	IPVS_CMD_NEW_SERVICE = 1,
+	IPVS_CMD_SET_SERVICE = 2,
+	IPVS_CMD_DEL_SERVICE = 3,
+	IPVS_CMD_GET_SERVICE = 4,
+	IPVS_CMD_NEW_DEST = 5,
+	IPVS_CMD_SET_DEST = 6,
+	IPVS_CMD_DEL_DEST = 7,
+	IPVS_CMD_GET_DEST = 8,
+	IPVS_CMD_NEW_DAEMON = 9,
+	IPVS_CMD_DEL_DAEMON = 10,
+	IPVS_CMD_GET_DAEMON = 11,
+	IPVS_CMD_SET_CONFIG = 12,
+	IPVS_CMD_GET_CONFIG = 13,
+	IPVS_CMD_SET_INFO = 14,
+	IPVS_CMD_GET_INFO = 15,
+	IPVS_CMD_ZERO = 16,
+	IPVS_CMD_FLUSH = 17,
+	__IPVS_CMD_MAX = 18,
+};
+
+enum {
+	IPVS_CMD_ATTR_UNSPEC = 0,
+	IPVS_CMD_ATTR_SERVICE = 1,
+	IPVS_CMD_ATTR_DEST = 2,
+	IPVS_CMD_ATTR_DAEMON = 3,
+	IPVS_CMD_ATTR_TIMEOUT_TCP = 4,
+	IPVS_CMD_ATTR_TIMEOUT_TCP_FIN = 5,
+	IPVS_CMD_ATTR_TIMEOUT_UDP = 6,
+	__IPVS_CMD_ATTR_MAX = 7,
+};
+
+enum {
+	IPVS_SVC_ATTR_UNSPEC = 0,
+	IPVS_SVC_ATTR_AF = 1,
+	IPVS_SVC_ATTR_PROTOCOL = 2,
+	IPVS_SVC_ATTR_ADDR = 3,
+	IPVS_SVC_ATTR_PORT = 4,
+	IPVS_SVC_ATTR_FWMARK = 5,
+	IPVS_SVC_ATTR_SCHED_NAME = 6,
+	IPVS_SVC_ATTR_FLAGS = 7,
+	IPVS_SVC_ATTR_TIMEOUT = 8,
+	IPVS_SVC_ATTR_NETMASK = 9,
+	IPVS_SVC_ATTR_STATS = 10,
+	IPVS_SVC_ATTR_PE_NAME = 11,
+	IPVS_SVC_ATTR_STATS64 = 12,
+	__IPVS_SVC_ATTR_MAX = 13,
+};
+
+enum {
+	IPVS_DEST_ATTR_UNSPEC = 0,
+	IPVS_DEST_ATTR_ADDR = 1,
+	IPVS_DEST_ATTR_PORT = 2,
+	IPVS_DEST_ATTR_FWD_METHOD = 3,
+	IPVS_DEST_ATTR_WEIGHT = 4,
+	IPVS_DEST_ATTR_U_THRESH = 5,
+	IPVS_DEST_ATTR_L_THRESH = 6,
+	IPVS_DEST_ATTR_ACTIVE_CONNS = 7,
+	IPVS_DEST_ATTR_INACT_CONNS = 8,
+	IPVS_DEST_ATTR_PERSIST_CONNS = 9,
+	IPVS_DEST_ATTR_STATS = 10,
+	IPVS_DEST_ATTR_ADDR_FAMILY = 11,
+	IPVS_DEST_ATTR_STATS64 = 12,
+	IPVS_DEST_ATTR_TUN_TYPE = 13,
+	IPVS_DEST_ATTR_TUN_PORT = 14,
+	IPVS_DEST_ATTR_TUN_FLAGS = 15,
+	__IPVS_DEST_ATTR_MAX = 16,
+};
+
+enum {
+	IPVS_DAEMON_ATTR_UNSPEC = 0,
+	IPVS_DAEMON_ATTR_STATE = 1,
+	IPVS_DAEMON_ATTR_MCAST_IFN = 2,
+	IPVS_DAEMON_ATTR_SYNC_ID = 3,
+	IPVS_DAEMON_ATTR_SYNC_MAXLEN = 4,
+	IPVS_DAEMON_ATTR_MCAST_GROUP = 5,
+	IPVS_DAEMON_ATTR_MCAST_GROUP6 = 6,
+	IPVS_DAEMON_ATTR_MCAST_PORT = 7,
+	IPVS_DAEMON_ATTR_MCAST_TTL = 8,
+	__IPVS_DAEMON_ATTR_MAX = 9,
+};
+
+enum {
+	IPVS_STATS_ATTR_UNSPEC = 0,
+	IPVS_STATS_ATTR_CONNS = 1,
+	IPVS_STATS_ATTR_INPKTS = 2,
+	IPVS_STATS_ATTR_OUTPKTS = 3,
+	IPVS_STATS_ATTR_INBYTES = 4,
+	IPVS_STATS_ATTR_OUTBYTES = 5,
+	IPVS_STATS_ATTR_CPS = 6,
+	IPVS_STATS_ATTR_INPPS = 7,
+	IPVS_STATS_ATTR_OUTPPS = 8,
+	IPVS_STATS_ATTR_INBPS = 9,
+	IPVS_STATS_ATTR_OUTBPS = 10,
+	IPVS_STATS_ATTR_PAD = 11,
+	__IPVS_STATS_ATTR_MAX = 12,
+};
+
+enum {
+	IPVS_INFO_ATTR_UNSPEC = 0,
+	IPVS_INFO_ATTR_VERSION = 1,
+	IPVS_INFO_ATTR_CONN_TAB_SIZE = 2,
+	__IPVS_INFO_ATTR_MAX = 3,
+};
+
+enum {
+	IP_VS_UDP_S_NORMAL = 0,
+	IP_VS_UDP_S_LAST = 1,
+};
+
+struct ip_vs_service_user_kern {
+	u16 af;
+	u16 protocol;
+	union nf_inet_addr addr;
+	__be16 port;
+	u32 fwmark;
+	char *sched_name;
+	char *pe_name;
+	unsigned int flags;
+	unsigned int timeout;
+	__be32 netmask;
+};
+
+struct ip_vs_dest_user_kern {
+	union nf_inet_addr addr;
+	__be16 port;
+	unsigned int conn_flags;
+	int weight;
+	u32 u_threshold;
+	u32 l_threshold;
+	u16 af;
+	u16 tun_type;
+	__be16 tun_port;
+	u16 tun_flags;
+};
+
+struct ip_vs_iter {
+	struct seq_net_private p;
+	struct hlist_head *table;
+	int bucket;
+};
+
+struct ip_sf_list;
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	long unsigned int sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list *next_rcu;
+	};
+	struct ip_mc_list *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	long unsigned int sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct ip_vs_sync_mesg;
+
+struct ip_vs_sync_buff {
+	struct list_head list;
+	long unsigned int firstuse;
+	struct ip_vs_sync_mesg *mesg;
+	unsigned char *head;
+	unsigned char *end;
+};
+
+struct ip_vs_sync_thread_data {
+	struct task_struct *task;
+	struct netns_ipvs *ipvs;
+	struct socket *sock;
+	char *buf;
+	int id;
+};
+
+struct ip_vs_sync_conn_v0 {
+	__u8 reserved;
+	__u8 protocol;
+	__be16 cport;
+	__be16 vport;
+	__be16 dport;
+	__be32 caddr;
+	__be32 vaddr;
+	__be32 daddr;
+	__be16 flags;
+	__be16 state;
+};
+
+struct ip_vs_sync_conn_options {
+	struct ip_vs_seq in_seq;
+	struct ip_vs_seq out_seq;
+};
+
+struct ip_vs_sync_v4 {
+	__u8 type;
+	__u8 protocol;
+	__be16 ver_size;
+	__be32 flags;
+	__be16 state;
+	__be16 cport;
+	__be16 vport;
+	__be16 dport;
+	__be32 fwmark;
+	__be32 timeout;
+	__be32 caddr;
+	__be32 vaddr;
+	__be32 daddr;
+};
+
+struct ip_vs_sync_v6 {
+	__u8 type;
+	__u8 protocol;
+	__be16 ver_size;
+	__be32 flags;
+	__be16 state;
+	__be16 cport;
+	__be16 vport;
+	__be16 dport;
+	__be32 fwmark;
+	__be32 timeout;
+	struct in6_addr caddr;
+	struct in6_addr vaddr;
+	struct in6_addr daddr;
+};
+
+union ip_vs_sync_conn {
+	struct ip_vs_sync_v4 v4;
+	struct ip_vs_sync_v6 v6;
+};
+
+struct ip_vs_sync_mesg_v0 {
+	__u8 nr_conns;
+	__u8 syncid;
+	__be16 size;
+};
+
+struct ip_vs_sync_mesg {
+	__u8 reserved;
+	__u8 syncid;
+	__be16 size;
+	__u8 nr_conns;
+	__s8 version;
+	__u16 spare;
+};
+
+union ipvs_sockaddr {
+	struct sockaddr_in in;
+	struct sockaddr_in6 in6;
+};
+
+enum {
+	IP_VS_RT_MODE_LOCAL = 1,
+	IP_VS_RT_MODE_NON_LOCAL = 2,
+	IP_VS_RT_MODE_RDR = 4,
+	IP_VS_RT_MODE_CONNECT = 8,
+	IP_VS_RT_MODE_KNOWN_NH = 16,
+	IP_VS_RT_MODE_TUNNEL = 32,
+};
+
+struct tcp_states_t {
+	int next_state[11];
+};
+
+enum ipvs_sctp_event_t {
+	IP_VS_SCTP_DATA = 0,
+	IP_VS_SCTP_INIT = 1,
+	IP_VS_SCTP_INIT_ACK = 2,
+	IP_VS_SCTP_COOKIE_ECHO = 3,
+	IP_VS_SCTP_COOKIE_ACK = 4,
+	IP_VS_SCTP_SHUTDOWN = 5,
+	IP_VS_SCTP_SHUTDOWN_ACK = 6,
+	IP_VS_SCTP_SHUTDOWN_COMPLETE = 7,
+	IP_VS_SCTP_ERROR = 8,
+	IP_VS_SCTP_ABORT = 9,
+	IP_VS_SCTP_EVENT_LAST = 10,
+};
+
+struct ip_vs_wrr_mark {
+	struct ip_vs_dest *cl;
+	int cw;
+	int mw;
+	int di;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_lblc_entry {
+	struct hlist_node list;
+	int af;
+	union nf_inet_addr addr;
+	struct ip_vs_dest *dest;
+	long unsigned int lastuse;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_lblc_table {
+	struct callback_head callback_head;
+	struct hlist_head bucket[1024];
+	struct timer_list periodic_timer;
+	struct ip_vs_service *svc;
+	atomic_t entries;
+	int max_size;
+	int rover;
+	int counter;
+	bool dead;
+};
+
+struct ip_vs_dest_set_elem {
+	struct list_head list;
+	struct ip_vs_dest *dest;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_dest_set {
+	atomic_t size;
+	long unsigned int lastmod;
+	struct list_head list;
+};
+
+struct ip_vs_lblcr_entry {
+	struct hlist_node list;
+	int af;
+	union nf_inet_addr addr;
+	struct ip_vs_dest_set set;
+	long unsigned int lastuse;
+	struct callback_head callback_head;
+};
+
+struct ip_vs_lblcr_table {
+	struct callback_head callback_head;
+	struct hlist_head bucket[1024];
+	atomic_t entries;
+	int max_size;
+	struct timer_list periodic_timer;
+	struct ip_vs_service *svc;
+	int rover;
+	int counter;
+	bool dead;
+};
+
+struct ip_vs_sh_bucket {
+	struct ip_vs_dest *dest;
+};
+
+struct ip_vs_sh_state {
+	struct callback_head callback_head;
+	struct ip_vs_sh_bucket buckets[256];
+};
+
+struct ip_vs_dh_bucket {
+	struct ip_vs_dest *dest;
+};
+
+struct ip_vs_dh_state {
+	struct ip_vs_dh_bucket buckets[256];
+	struct callback_head callback_head;
+};
+
+struct ip_vs_mh_lookup {
+	struct ip_vs_dest *dest;
+};
+
+struct ip_vs_mh_dest_setup {
+	unsigned int offset;
+	unsigned int skip;
+	unsigned int perm;
+	int turns;
+};
+
+struct ip_vs_mh_state {
+	struct callback_head callback_head;
+	struct ip_vs_mh_lookup *lookup;
+	struct ip_vs_mh_dest_setup *dest_setup;
+	hsiphash_key_t hash1;
+	hsiphash_key_t hash2;
+	int gcd;
+	int rshift;
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	long unsigned int rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+	INET_FRAG_DROP = 16,
+};
+
+struct ipq {
+	struct inet_frag_queue q;
+	u8 ecn;
+	u16 max_df_size;
+	int iif;
+	unsigned int rid;
+	struct inet_peer *peer;
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	struct hlist_nulls_head ht[256];
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_UNSPECIFIED = 0,
+	XFRM_DEV_OFFLOAD_CRYPTO = 1,
+	XFRM_DEV_OFFLOAD_PACKET = 2,
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+typedef u8 dscp_t;
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	__be32 imsf_multiaddr;
+	__be32 imsf_interface;
+	__u32 imsf_fmode;
+	__u32 imsf_numsrc;
+	union {
+		__be32 imsf_slist[1];
+		struct {
+			struct {			} __empty_imsf_slist_flex;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+enum {
+	BPFILTER_IPT_SO_SET_REPLACE = 64,
+	BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
+	BPFILTER_IPT_SET_MAX = 66,
+};
+
+enum {
+	BPFILTER_IPT_SO_GET_INFO = 64,
+	BPFILTER_IPT_SO_GET_ENTRIES = 65,
+	BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
+	BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
+	BPFILTER_IPT_GET_MAX = 68,
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+enum {
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 1,
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+};
+
+struct tcp_repair_opt {
+	__u32 opt_code;
+	__u32 opt_val;
+};
+
+struct tcp_repair_window {
+	__u32 snd_wl1;
+	__u32 snd_wnd;
+	__u32 max_window;
+	__u32 rcv_wnd;
+	__u32 rcv_wup;
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+	__u32 tcpi_rcv_wnd;
+	__u32 tcpi_rehash;
+};
+
+enum {
+	TCP_NLA_PAD = 0,
+	TCP_NLA_BUSY = 1,
+	TCP_NLA_RWND_LIMITED = 2,
+	TCP_NLA_SNDBUF_LIMITED = 3,
+	TCP_NLA_DATA_SEGS_OUT = 4,
+	TCP_NLA_TOTAL_RETRANS = 5,
+	TCP_NLA_PACING_RATE = 6,
+	TCP_NLA_DELIVERY_RATE = 7,
+	TCP_NLA_SND_CWND = 8,
+	TCP_NLA_REORDERING = 9,
+	TCP_NLA_MIN_RTT = 10,
+	TCP_NLA_RECUR_RETRANS = 11,
+	TCP_NLA_DELIVERY_RATE_APP_LMT = 12,
+	TCP_NLA_SNDQ_SIZE = 13,
+	TCP_NLA_CA_STATE = 14,
+	TCP_NLA_SND_SSTHRESH = 15,
+	TCP_NLA_DELIVERED = 16,
+	TCP_NLA_DELIVERED_CE = 17,
+	TCP_NLA_BYTES_SENT = 18,
+	TCP_NLA_BYTES_RETRANS = 19,
+	TCP_NLA_DSACK_DUPS = 20,
+	TCP_NLA_REORD_SEEN = 21,
+	TCP_NLA_SRTT = 22,
+	TCP_NLA_TIMEOUT_REHASH = 23,
+	TCP_NLA_BYTES_NOTSENT = 24,
+	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
+	TCP_NLA_REHASH = 27,
+};
+
+struct tcp_zerocopy_receive {
+	__u64 address;
+	__u32 length;
+	__u32 recv_skip_hint;
+	__u32 inq;
+	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+	long unsigned int timeout;
+	struct delayed_work work;
+};
+
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
+};
+
+struct tcp_md5sig_pool {
+	struct ahash_request *md5_req;
+	void *scratch;
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
+};
+
+struct tcp_splice_state {
+	struct pipe_inode_info *pipe;
+	size_t len;
+	unsigned int flags;
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct mptcp_ext {
+	union {
+		u64 data_ack;
+		u32 data_ack32;
+	};
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	__sum16 csum;
+	u8 use_map: 1;
+	u8 dsn64: 1;
+	u8 data_fin: 1;
+	u8 use_ack: 1;
+	u8 ack64: 1;
+	u8 mpc_map: 1;
+	u8 frozen: 1;
+	u8 reset_transient: 1;
+	u8 reset_reason: 4;
+	u8 csum_reqd: 1;
+	u8 infinite_map: 1;
+};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_rm_list {
+	u8 ids[8];
+	u8 nr;
+};
+
+struct mptcp_addr_info {
+	u8 id;
+	sa_family_t family;
+	__be16 port;
+	union {
+		struct in_addr addr;
+		struct in6_addr addr6;
+	};
+};
+
+struct mptcp_out_options {
+	u16 suboptions;
+	struct mptcp_rm_list rm_list;
+	u8 join_id;
+	u8 backup;
+	u8 reset_reason: 4;
+	u8 reset_transient: 1;
+	u8 csum_reqd: 1;
+	u8 allow_join_id0: 1;
+	union {
+		struct {
+			u64 sndr_key;
+			u64 rcvr_key;
+			u64 data_seq;
+			u32 subflow_seq;
+			u16 data_len;
+			__sum16 csum;
+		};
+		struct {
+			struct mptcp_addr_info addr;
+			u64 ahmac;
+		};
+		struct {
+			struct mptcp_ext ext_copy;
+			u64 fail_seq;
+		};
+		struct {
+			u32 nonce;
+			u32 token;
+			u64 thmac;
+			u8 hmac[20];
+		};
+	};
+};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+struct tcp_md5sig {
+	struct __kernel_sockaddr_storage tcpm_addr;
+	__u8 tcpm_flags;
+	__u8 tcpm_prefixlen;
+	__u16 tcpm_keylen;
+	int tcpm_ifindex;
+	__u8 tcpm_key[80];
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+struct tcp4_pseudohdr {
+	__be32 saddr;
+	__be32 daddr;
+	__u8 pad;
+	__u8 protocol;
+	__be16 len;
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__tcp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct sock_common *sk_common;
+	};
+	uid_t uid;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	long unsigned int last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block *tcpm_next;
+	possible_net_t tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	long unsigned int tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block *chain;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct tcp_plb_state {
+	u8 consec_cong_rounds: 5;
+	u8 unused: 3;
+	u32 pause_until;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	short unsigned int type;
+	short unsigned int protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	struct udp_seq_afinfo *bpf_seq_afinfo;
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	int: 32;
+	int bucket;
+};
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct icmp_ext_hdr {
+	__u8 reserved1: 4;
+	__u8 version: 4;
+	__u8 reserved2;
+	__sum16 checksum;
+};
+
+struct icmp_extobj_hdr {
+	__be16 length;
+	__u8 class_num;
+	__u8 class_type;
+};
+
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
+struct icmp_bxm {
+	struct sk_buff *skb;
+	int offset;
+	int data_len;
+	struct {
+		struct icmphdr icmph;
+		__be32 times[3];
+	} data;
+	int head_len;
+	struct ip_options_data replyopts;
+};
+
+struct icmp_control {
+	enum skb_drop_reason (*handler)(struct sk_buff *);
+	short int error;
+};
+
+struct rtentry {
+	long unsigned int rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	long unsigned int rt_pad3;
+	void *rt_pad4;
+	short int rt_metric;
+	char *rt_dev;
+	long unsigned int rt_mtu;
+	long unsigned int rt_window;
+	short unsigned int rt_irtt;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+struct compat_rtentry {
+	u32 rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	short unsigned int rt_flags;
+	short int rt_pad2;
+	u32 rt_pad3;
+	unsigned char rt_tos;
+	unsigned char rt_class;
+	short int rt_pad4;
+	short int rt_metric;
+	compat_uptr_t rt_dev;
+	u32 rt_mtu;
+	u32 rt_window;
+	short unsigned int rt_irtt;
+};
+
+struct rtnexthop {
+	short unsigned int rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+struct fib_nh_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_nh *fib_nh;
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct {
+			struct {			} __empty_tnode;
+			struct key_vector *tnode[0];
+		};
+	};
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector *parent;
+	struct key_vector kv[1];
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct trie {
+	struct key_vector kv[1];
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+enum {
+	IFLA_IPTUN_UNSPEC = 0,
+	IFLA_IPTUN_LINK = 1,
+	IFLA_IPTUN_LOCAL = 2,
+	IFLA_IPTUN_REMOTE = 3,
+	IFLA_IPTUN_TTL = 4,
+	IFLA_IPTUN_TOS = 5,
+	IFLA_IPTUN_ENCAP_LIMIT = 6,
+	IFLA_IPTUN_FLOWINFO = 7,
+	IFLA_IPTUN_FLAGS = 8,
+	IFLA_IPTUN_PROTO = 9,
+	IFLA_IPTUN_PMTUDISC = 10,
+	IFLA_IPTUN_6RD_PREFIX = 11,
+	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
+	IFLA_IPTUN_6RD_PREFIXLEN = 13,
+	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
+	IFLA_IPTUN_ENCAP_TYPE = 15,
+	IFLA_IPTUN_ENCAP_FLAGS = 16,
+	IFLA_IPTUN_ENCAP_SPORT = 17,
+	IFLA_IPTUN_ENCAP_DPORT = 18,
+	IFLA_IPTUN_COLLECT_METADATA = 19,
+	IFLA_IPTUN_FWMARK = 20,
+	__IFLA_IPTUN_MAX = 21,
+};
+
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+};
+
+struct geneve_opt {
+	__be16 opt_class;
+	u8 type;
+	u8 length: 5;
+	u8 r3: 1;
+	u8 r2: 1;
+	u8 r1: 1;
+	u8 opt_data[0];
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+struct ping_table {
+	struct hlist_nulls_head hash[64];
+	spinlock_t lock;
+};
+
+struct bpfilter_umh_ops {
+	struct umd_info info;
+	struct mutex lock;
+	int (*sockopt)(struct sock *, int, sockptr_t, unsigned int, bool);
+	int (*start)();
+};
+
+struct nhmsg {
+	unsigned char nh_family;
+	unsigned char nh_scope;
+	unsigned char nh_protocol;
+	unsigned char resvd;
+	unsigned int nh_flags;
+};
+
+struct nexthop_grp {
+	__u32 id;
+	__u8 weight;
+	__u8 resvd1;
+	__u16 resvd2;
+};
+
+enum {
+	NEXTHOP_GRP_TYPE_MPATH = 0,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+enum {
+	NHA_UNSPEC = 0,
+	NHA_ID = 1,
+	NHA_GROUP = 2,
+	NHA_GROUP_TYPE = 3,
+	NHA_BLACKHOLE = 4,
+	NHA_OIF = 5,
+	NHA_GATEWAY = 6,
+	NHA_ENCAP_TYPE = 7,
+	NHA_ENCAP = 8,
+	NHA_GROUPS = 9,
+	NHA_MASTER = 10,
+	NHA_FDB = 11,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
+};
+
+struct nh_config {
+	u32 nh_id;
+	u8 nh_family;
+	u8 nh_protocol;
+	u8 nh_blackhole;
+	u8 nh_fdb;
+	u32 nh_flags;
+	int nh_ifindex;
+	struct net_device *dev;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} gw;
+	struct nlattr *nh_grp;
+	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	long unsigned int nh_grp_res_idle_timer;
+	long unsigned int nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
+	struct nlattr *nh_encap;
+	u16 nh_encap_type;
+	u32 nlflags;
+	struct nl_info nlinfo;
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+	u32 done_nh_idx;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+struct fib4_rule {
+	struct fib_rule common;
+	u8 dst_len;
+	u8 src_len;
+	dscp_t dscp;
+	__be32 src;
+	__be32 srcmask;
+	__be32 dst;
+	__be32 dstmask;
+};
+
+enum tunnel_encap_types {
+	TUNNEL_ENCAP_NONE = 0,
+	TUNNEL_ENCAP_FOU = 1,
+	TUNNEL_ENCAP_GUE = 2,
+	TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct ip_tunnel {
+	struct ip_tunnel *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	long unsigned int err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_prl_entry *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct tnl_ptk_info {
+	__be16 flags;
+	__be16 proto;
+	__be32 key;
+	__be32 seq;
+	int hdr_len;
+};
+
+struct ip_tunnel_net {
+	struct net_device *fb_tunnel_dev;
+	struct rtnl_link_ops *rtnl_link_ops;
+	struct hlist_head tunnels[128];
+	struct ip_tunnel *collect_md_tun;
+	int type;
+};
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+struct rta_mfc_stats {
+	__u64 mfcs_packets;
+	__u64 mfcs_bytes;
+	__u64 mfcs_wrong_if;
+};
+
+struct vif_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	long unsigned int bytes_in;
+	long unsigned int bytes_out;
+	long unsigned int pkt_in;
+	long unsigned int pkt_out;
+	long unsigned int rate_limit;
+	unsigned char threshold;
+	short unsigned int flags;
+	int link;
+	struct netdev_phys_item_id dev_parent_id;
+	__be32 local;
+	__be32 remote;
+};
+
+struct vif_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct net_device *dev;
+	short unsigned int vif_index;
+	short unsigned int vif_flags;
+	u32 tb_id;
+};
+
+enum {
+	MFC_STATIC = 1,
+	MFC_OFFLOAD = 2,
+};
+
+struct mr_mfc {
+	struct rhlist_head mnode;
+	short unsigned int mfc_parent;
+	int mfc_flags;
+	union {
+		struct {
+			long unsigned int expires;
+			struct sk_buff_head unresolved;
+		} unres;
+		struct {
+			long unsigned int last_assert;
+			int minvif;
+			int maxvif;
+			long unsigned int bytes;
+			long unsigned int pkt;
+			long unsigned int wrong_if;
+			long unsigned int lastuse;
+			unsigned char ttls[32];
+			refcount_t refcount;
+		} res;
+	} mfc_un;
+	struct list_head list;
+	struct callback_head rcu;
+	void (*free)(struct callback_head *);
+};
+
+struct mfc_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct mr_mfc *mfc;
+	u32 tb_id;
+};
+
+struct mr_table_ops {
+	const struct rhashtable_params *rht_params;
+	void *cmparg_any;
+};
+
+struct mr_table {
+	struct list_head list;
+	possible_net_t net;
+	struct mr_table_ops ops;
+	u32 id;
+	struct sock *mroute_sk;
+	struct timer_list ipmr_expire_timer;
+	struct list_head mfc_unres_queue;
+	struct vif_device vif_table[32];
+	struct rhltable mfc_hash;
+	struct list_head mfc_cache_list;
+	int maxvif;
+	atomic_t cache_resolve_queue_len;
+	bool mroute_do_assert;
+	bool mroute_do_pim;
+	bool mroute_do_wrvifwhole;
+	int mroute_reg_vif_num;
+};
+
+struct mr_vif_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	int ct;
+};
+
+struct mr_mfc_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	struct list_head *cache;
+	spinlock_t *lock;
+};
+
+enum {
+	PIM_TYPE_HELLO = 0,
+	PIM_TYPE_REGISTER = 1,
+	PIM_TYPE_REGISTER_STOP = 2,
+	PIM_TYPE_JOIN_PRUNE = 3,
+	PIM_TYPE_BOOTSTRAP = 4,
+	PIM_TYPE_ASSERT = 5,
+	PIM_TYPE_GRAFT = 6,
+	PIM_TYPE_GRAFT_ACK = 7,
+	PIM_TYPE_CANDIDATE_RP_ADV = 8,
+};
+
+struct pimreghdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+	__be32 flags;
+};
+
+typedef short unsigned int vifi_t;
+
+struct vifctl {
+	vifi_t vifc_vifi;
+	unsigned char vifc_flags;
+	unsigned char vifc_threshold;
+	unsigned int vifc_rate_limit;
+	union {
+		struct in_addr vifc_lcl_addr;
+		int vifc_lcl_ifindex;
+	};
+	struct in_addr vifc_rmt_addr;
+};
+
+struct mfcctl {
+	struct in_addr mfcc_origin;
+	struct in_addr mfcc_mcastgrp;
+	vifi_t mfcc_parent;
+	unsigned char mfcc_ttls[32];
+	unsigned int mfcc_pkt_cnt;
+	unsigned int mfcc_byte_cnt;
+	unsigned int mfcc_wrong_if;
+	int mfcc_expire;
+};
+
+struct sioc_sg_req {
+	struct in_addr src;
+	struct in_addr grp;
+	long unsigned int pktcnt;
+	long unsigned int bytecnt;
+	long unsigned int wrong_if;
+};
+
+struct sioc_vif_req {
+	vifi_t vifi;
+	long unsigned int icount;
+	long unsigned int ocount;
+	long unsigned int ibytes;
+	long unsigned int obytes;
+};
+
+struct igmpmsg {
+	__u32 unused1;
+	__u32 unused2;
+	unsigned char im_msgtype;
+	unsigned char im_mbz;
+	unsigned char im_vif;
+	unsigned char im_vif_hi;
+	struct in_addr im_src;
+	struct in_addr im_dst;
+};
+
+enum {
+	IPMRA_TABLE_UNSPEC = 0,
+	IPMRA_TABLE_ID = 1,
+	IPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,
+	IPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,
+	IPMRA_TABLE_MROUTE_DO_ASSERT = 4,
+	IPMRA_TABLE_MROUTE_DO_PIM = 5,
+	IPMRA_TABLE_VIFS = 6,
+	IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,
+	__IPMRA_TABLE_MAX = 8,
+};
+
+enum {
+	IPMRA_VIF_UNSPEC = 0,
+	IPMRA_VIF = 1,
+	__IPMRA_VIF_MAX = 2,
+};
+
+enum {
+	IPMRA_VIFA_UNSPEC = 0,
+	IPMRA_VIFA_IFINDEX = 1,
+	IPMRA_VIFA_VIF_ID = 2,
+	IPMRA_VIFA_FLAGS = 3,
+	IPMRA_VIFA_BYTES_IN = 4,
+	IPMRA_VIFA_BYTES_OUT = 5,
+	IPMRA_VIFA_PACKETS_IN = 6,
+	IPMRA_VIFA_PACKETS_OUT = 7,
+	IPMRA_VIFA_LOCAL_ADDR = 8,
+	IPMRA_VIFA_REMOTE_ADDR = 9,
+	IPMRA_VIFA_PAD = 10,
+	__IPMRA_VIFA_MAX = 11,
+};
+
+enum {
+	IPMRA_CREPORT_UNSPEC = 0,
+	IPMRA_CREPORT_MSGTYPE = 1,
+	IPMRA_CREPORT_VIF_ID = 2,
+	IPMRA_CREPORT_SRC_ADDR = 3,
+	IPMRA_CREPORT_DST_ADDR = 4,
+	IPMRA_CREPORT_PKT = 5,
+	IPMRA_CREPORT_TABLE = 6,
+	__IPMRA_CREPORT_MAX = 7,
+};
+
+struct mfc_cache_cmp_arg {
+	__be32 mfc_mcastgrp;
+	__be32 mfc_origin;
+};
+
+struct mfc_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			__be32 mfc_mcastgrp;
+			__be32 mfc_origin;
+		};
+		struct mfc_cache_cmp_arg cmparg;
+	};
+};
+
+struct ipmr_result {
+	struct mr_table *mrt;
+};
+
+struct compat_sioc_sg_req {
+	struct in_addr src;
+	struct in_addr grp;
+	compat_ulong_t pktcnt;
+	compat_ulong_t bytecnt;
+	compat_ulong_t wrong_if;
+};
+
+struct compat_sioc_vif_req {
+	vifi_t vifi;
+	compat_ulong_t icount;
+	compat_ulong_t ocount;
+	compat_ulong_t ibytes;
+	compat_ulong_t obytes;
+};
+
+enum {
+	FOU_ATTR_UNSPEC = 0,
+	FOU_ATTR_PORT = 1,
+	FOU_ATTR_AF = 2,
+	FOU_ATTR_IPPROTO = 3,
+	FOU_ATTR_TYPE = 4,
+	FOU_ATTR_REMCSUM_NOPARTIAL = 5,
+	FOU_ATTR_LOCAL_V4 = 6,
+	FOU_ATTR_LOCAL_V6 = 7,
+	FOU_ATTR_PEER_V4 = 8,
+	FOU_ATTR_PEER_V6 = 9,
+	FOU_ATTR_PEER_PORT = 10,
+	FOU_ATTR_IFINDEX = 11,
+	__FOU_ATTR_MAX = 12,
+};
+
+enum {
+	FOU_CMD_UNSPEC = 0,
+	FOU_CMD_ADD = 1,
+	FOU_CMD_DEL = 2,
+	FOU_CMD_GET = 3,
+	__FOU_CMD_MAX = 4,
+};
+
+enum {
+	FOU_ENCAP_UNSPEC = 0,
+	FOU_ENCAP_DIRECT = 1,
+	FOU_ENCAP_GUE = 2,
+};
+
+struct fou {
+	struct socket *sock;
+	u8 protocol;
+	u8 flags;
+	__be16 port;
+	u8 family;
+	u16 type;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct fou_cfg {
+	u16 type;
+	u8 protocol;
+	u8 flags;
+	struct udp_port_cfg udp_config;
+};
+
+struct fou_net {
+	struct list_head fou_list;
+	struct mutex fou_lock;
+};
+
+struct udp_tunnel_nic_table_entry;
+
+struct udp_tunnel_nic {
+	struct work_struct work;
+	struct net_device *dev;
+	u8 need_sync: 1;
+	u8 need_replay: 1;
+	u8 work_pending: 1;
+	unsigned int n_tables;
+	long unsigned int missed;
+	struct udp_tunnel_nic_table_entry **entries;
+};
+
+struct udp_tunnel_nic_shared_node {
+	struct net_device *dev;
+	struct list_head list;
+};
+
+enum udp_tunnel_nic_table_entry_flags {
+	UDP_TUNNEL_NIC_ENTRY_ADD = 1,
+	UDP_TUNNEL_NIC_ENTRY_DEL = 2,
+	UDP_TUNNEL_NIC_ENTRY_OP_FAIL = 4,
+	UDP_TUNNEL_NIC_ENTRY_FROZEN = 8,
+};
+
+struct udp_tunnel_nic_table_entry {
+	__be16 port;
+	u8 type;
+	u8 flags;
+	u16 use_cnt;
+	u8 hw_priv;
+};
+
+struct sadb_alg {
+	__u8 sadb_alg_id;
+	__u8 sadb_alg_ivlen;
+	__u16 sadb_alg_minbits;
+	__u16 sadb_alg_maxbits;
+	__u16 sadb_alg_reserved;
+};
+
+struct ip6_tnl;
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct xfrm_algo_aead_info {
+	char *geniv;
+	u16 icv_truncbits;
+};
+
+struct xfrm_algo_auth_info {
+	u16 icv_truncbits;
+	u16 icv_fullbits;
+};
+
+struct xfrm_algo_encr_info {
+	char *geniv;
+	u16 blockbits;
+	u16 defkeybits;
+};
+
+struct xfrm_algo_comp_info {
+	u16 threshold;
+};
+
+struct xfrm_algo_desc {
+	char *name;
+	char *compat;
+	u8 available: 1;
+	u8 pfkey_supported: 1;
+	union {
+		struct xfrm_algo_aead_info aead;
+		struct xfrm_algo_auth_info auth;
+		struct xfrm_algo_encr_info encr;
+		struct xfrm_algo_comp_info comp;
+	} uinfo;
+	struct sadb_alg desc;
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol *next;
+	int priority;
+};
+
+struct esp_info {
+	struct ip_esp_hdr *esph;
+	__be64 seqno;
+	int tfclen;
+	int tailen;
+	int plen;
+	int clen;
+	int len;
+	int nfrags;
+	__u8 proto;
+	bool inplace;
+};
+
+struct esp_skb_cb {
+	struct xfrm_skb_cb xfrm;
+	void *tmp;
+};
+
+struct esp_output_extra {
+	__be32 seqhi;
+	u32 esphoff;
+};
+
+struct esp_tcp_sk {
+	struct sock *sk;
+	struct callback_head rcu;
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+struct xfrm_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm_tunnel *next;
+	int priority;
+};
+
+struct ic_device {
+	struct ic_device *next;
+	struct net_device *dev;
+	short unsigned int flags;
+	short int able;
+	__be32 xid;
+};
+
+struct bootp_pkt {
+	struct iphdr iph;
+	struct udphdr udph;
+	u8 op;
+	u8 htype;
+	u8 hlen;
+	u8 hops;
+	__be32 xid;
+	__be16 secs;
+	__be16 flags;
+	__be32 client_ip;
+	__be32 your_ip;
+	__be32 server_ip;
+	__be32 relay_ip;
+	u8 hw_addr[16];
+	u8 serv_name[64];
+	u8 boot_file[128];
+	u8 exten[312];
+};
+
+enum nft_dup_attributes {
+	NFTA_DUP_UNSPEC = 0,
+	NFTA_DUP_SREG_ADDR = 1,
+	NFTA_DUP_SREG_DEV = 2,
+	__NFTA_DUP_MAX = 3,
+};
+
+struct nft_dup_ipv4 {
+	u8 sreg_addr;
+	u8 sreg_dev;
+};
+
+struct ipt_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters *counters;
+	struct ipt_entry entries[0];
+};
+
+struct iptable_nat_pernet {
+	struct nf_hook_ops *nf_nat_ops;
+};
+
+struct xt_get_revision {
+	char name[29];
+	__u8 revision;
+};
+
+struct ipt_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct ipt_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ipt_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ipt_entry entrytable[0];
+};
+
+struct ipt_standard {
+	struct ipt_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ipt_error {
+	struct ipt_entry entry;
+	struct xt_error_target target;
+};
+
+struct compat_ipt_entry {
+	struct ipt_ip ip;
+	compat_uint_t nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	compat_uint_t comefrom;
+	struct compat_xt_counters counters;
+	unsigned char elems[0];
+};
+
+enum nf_ip_trace_comments {
+	NF_IP_TRACE_COMMENT_RULE = 0,
+	NF_IP_TRACE_COMMENT_RETURN = 1,
+	NF_IP_TRACE_COMMENT_POLICY = 2,
+};
+
+struct compat_ipt_replace {
+	char name[32];
+	u32 valid_hooks;
+	u32 num_entries;
+	u32 size;
+	u32 hook_entry[5];
+	u32 underflow[5];
+	u32 num_counters;
+	compat_uptr_t counters;
+	struct compat_ipt_entry entries[0];
+};
+
+struct compat_ipt_get_entries {
+	char name[32];
+	compat_uint_t size;
+	struct compat_ipt_entry entrytable[0];
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	short unsigned int no;
+};
+
+enum {
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
+};
+
+struct inet_diag_hostcond {
+	__u8 family;
+	__u8 prefix_len;
+	int port;
+	__be32 addr[0];
+};
+
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
+};
+
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct bpf_sk_storage_diag;
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
+	u16 sport;
+	u16 dport;
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
+};
+
+struct bictcp {
+	u32 cnt;
+	u32 last_max_cwnd;
+	u32 last_cwnd;
+	u32 last_time;
+	u32 bic_origin_point;
+	u32 bic_K;
+	u32 delay_min;
+	u32 epoch_start;
+	u32 ack_cnt;
+	u32 tcp_cwnd;
+	u16 unused;
+	u8 sample_cnt;
+	u8 found;
+	u32 round_start;
+	u32 end_seq;
+	u32 last_ack;
+	u32 curr_rtt;
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	spinlock_t encrypt_compl_lock;
+	int async_notify;
+	u8 async_capable: 1;
+	long unsigned int tx_bitmask;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct tcp_diag_md5sig {
+	__u8 tcpm_family;
+	__u8 tcpm_prefixlen;
+	__u16 tcpm_keylen;
+	__be32 tcpm_addr[4];
+	__u8 tcpm_key[80];
+};
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_if_decode_session_result {
+	struct net *net;
+	u32 if_id;
+};
+
+struct xfrm_if_cb {
+	bool (*decode_session)(struct sk_buff *, short unsigned int, struct xfrm_if_decode_session_result *);
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_node {
+	struct rb_node node;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
+};
+
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
+};
+
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
+	struct callback_head rcu;
+};
+
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+struct xfrm_user_sec_ctx {
+	__u16 len;
+	__u16 exttype;
+	__u8 ctx_alg;
+	__u8 ctx_doi;
+	__u16 ctx_len;
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+struct __ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	bool collect_md;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	__u32 fwmark;
+	__u32 index;
+	__u8 erspan_ver;
+	__u8 dir;
+	__u16 hwid;
+};
+
+struct ip6_tnl {
+	struct ip6_tnl *next;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	struct __ip6_tnl_parm parms;
+	struct flowi fl;
+	struct dst_cache dst_cache;
+	struct gro_cells gro_cells;
+	int err_count;
+	long unsigned int err_time;
+	__u32 i_seqno;
+	atomic_t o_seqno;
+	int hlen;
+	int tun_hlen;
+	int encap_hlen;
+	struct ip_tunnel_encap encap;
+	int mlink;
+};
+
+struct xfrm_trans_tasklet {
+	struct work_struct work;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+};
+
+struct xfrm_trans_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	int (*finish)(struct net *, struct sock *, struct sk_buff *);
+	struct net *net;
+};
+
+struct xfrm_user_offload {
+	int ifindex;
+	__u8 flags;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+	XFRM_DEV_OFFLOAD_FWD = 3,
+};
+
+struct xfrm_algo_list {
+	struct xfrm_algo_desc *algs;
+	int entries;
+	u32 type;
+	u32 mask;
+};
+
+struct xfrm_aead_name {
+	const char *name;
+	int icvbits;
+};
+
+enum {
+	XFRM_SHARE_ANY = 0,
+	XFRM_SHARE_SESSION = 1,
+	XFRM_SHARE_USER = 2,
+	XFRM_SHARE_UNIQUE = 3,
+};
+
+struct xfrm_user_tmpl {
+	struct xfrm_id id;
+	__u16 family;
+	xfrm_address_t saddr;
+	__u32 reqid;
+	__u8 mode;
+	__u8 share;
+	__u8 optional;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+};
+
+struct xfrm_userpolicy_type {
+	__u8 type;
+	__u16 reserved1;
+	__u8 reserved2;
+};
+
+enum xfrm_sadattr_type_t {
+	XFRMA_SAD_UNSPEC = 0,
+	XFRMA_SAD_CNT = 1,
+	XFRMA_SAD_HINFO = 2,
+	__XFRMA_SAD_MAX = 3,
+};
+
+struct xfrmu_sadhinfo {
+	__u32 sadhcnt;
+	__u32 sadhmcnt;
+};
+
+enum xfrm_spdattr_type_t {
+	XFRMA_SPD_UNSPEC = 0,
+	XFRMA_SPD_INFO = 1,
+	XFRMA_SPD_HINFO = 2,
+	XFRMA_SPD_IPV4_HTHRESH = 3,
+	XFRMA_SPD_IPV6_HTHRESH = 4,
+	__XFRMA_SPD_MAX = 5,
+};
+
+struct xfrmu_spdinfo {
+	__u32 incnt;
+	__u32 outcnt;
+	__u32 fwdcnt;
+	__u32 inscnt;
+	__u32 outscnt;
+	__u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+	__u32 spdhcnt;
+	__u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+	__u8 lbits;
+	__u8 rbits;
+};
+
+struct xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq;
+	__u32 reqid;
+	__u16 family;
+	__u8 mode;
+	__u8 replay_window;
+	__u8 flags;
+};
+
+struct xfrm_usersa_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u16 family;
+	__u8 proto;
+};
+
+struct xfrm_aevent_id {
+	struct xfrm_usersa_id sa_id;
+	xfrm_address_t saddr;
+	__u32 flags;
+	__u32 reqid;
+};
+
+struct xfrm_userspi_info {
+	struct xfrm_usersa_info info;
+	__u32 min;
+	__u32 max;
+};
+
+struct xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	__u32 priority;
+	__u32 index;
+	__u8 dir;
+	__u8 action;
+	__u8 flags;
+	__u8 share;
+};
+
+struct xfrm_userpolicy_id {
+	struct xfrm_selector sel;
+	__u32 index;
+	__u8 dir;
+};
+
+struct xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct xfrm_userpolicy_info policy;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+	__u32 seq;
+};
+
+struct xfrm_user_expire {
+	struct xfrm_usersa_info state;
+	__u8 hard;
+};
+
+struct xfrm_user_polexpire {
+	struct xfrm_userpolicy_info pol;
+	__u8 hard;
+};
+
+struct xfrm_usersa_flush {
+	__u8 proto;
+};
+
+struct xfrm_user_report {
+	__u8 proto;
+	struct xfrm_selector sel;
+};
+
+struct xfrm_user_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	__u32 reserved;
+	__u16 family;
+};
+
+struct xfrm_user_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	__u8 proto;
+	__u8 mode;
+	__u16 reserved;
+	__u32 reqid;
+	__u16 old_family;
+	__u16 new_family;
+};
+
+struct xfrm_user_mapping {
+	struct xfrm_usersa_id id;
+	__u32 reqid;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_saddr;
+	__be16 old_sport;
+	__be16 new_sport;
+};
+
+struct xfrm_userpolicy_default {
+	__u8 in;
+	__u8 fwd;
+	__u8 out;
+};
+
+struct xfrm_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct xfrm_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *nla_pol;
+	int nla_max;
+};
+
+struct espintcp_msg {
+	struct sk_buff *skb;
+	struct sk_msg skmsg;
+	int offset;
+	int len;
+};
+
+struct espintcp_ctx {
+	struct strparser strp;
+	struct sk_buff_head ike_queue;
+	struct sk_buff_head out_queue;
+	struct espintcp_msg partial;
+	void (*saved_data_ready)(struct sock *);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_destruct)(struct sock *);
+	struct work_struct work;
+	bool tx_running;
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	atomic_long_t inflight;
+	spinlock_t lock;
+	long unsigned int gc_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct unix_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 udiag_states;
+	__u32 udiag_ino;
+	__u32 udiag_show;
+	__u32 udiag_cookie[2];
+};
+
+struct unix_diag_msg {
+	__u8 udiag_family;
+	__u8 udiag_type;
+	__u8 udiag_state;
+	__u8 pad;
+	__u32 udiag_ino;
+	__u32 udiag_cookie[2];
+};
+
+enum {
+	UNIX_DIAG_NAME = 0,
+	UNIX_DIAG_VFS = 1,
+	UNIX_DIAG_PEER = 2,
+	UNIX_DIAG_ICONS = 3,
+	UNIX_DIAG_RQLEN = 4,
+	UNIX_DIAG_MEMINFO = 5,
+	UNIX_DIAG_SHUTDOWN = 6,
+	UNIX_DIAG_UID = 7,
+	__UNIX_DIAG_MAX = 8,
+};
+
+struct unix_diag_vfs {
+	__u32 udiag_vfs_ino;
+	__u32 udiag_vfs_dev;
+};
+
+struct unix_diag_rqlen {
+	__u32 udiag_rqueue;
+	__u32 udiag_wqueue;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	long unsigned int rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+struct compat_in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	u32 rtmsg_type;
+	u16 rtmsg_dst_len;
+	u16 rtmsg_src_len;
+	u32 rtmsg_metric;
+	u32 rtmsg_info;
+	u32 rtmsg_flags;
+	s32 rtmsg_ifindex;
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct ifaddrlblmsg {
+	__u8 ifal_family;
+	__u8 __ifal_reserved;
+	__u8 ifal_prefixlen;
+	__u8 ifal_flags;
+	__u32 ifal_index;
+	__u32 ifal_seq;
+};
+
+enum {
+	IFAL_ADDRESS = 1,
+	IFAL_LABEL = 2,
+	__IFAL_MAX = 3,
+};
+
+struct ip6addrlbl_entry {
+	struct in6_addr prefix;
+	int prefixlen;
+	int ifindex;
+	int addrtype;
+	u32 label;
+	struct hlist_node list;
+	struct callback_head rcu;
+};
+
+struct ip6addrlbl_init_table {
+	const struct in6_addr *prefix;
+	int prefixlen;
+	u32 label;
+};
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	short unsigned int prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_MAX = 58,
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_OIF = 4,
+	IPV6_SADDR_RULE_LABEL = 5,
+	IPV6_SADDR_RULE_PRIVACY = 6,
+	IPV6_SADDR_RULE_ORCHID = 7,
+	IPV6_SADDR_RULE_PREFIX = 8,
+	IPV6_SADDR_RULE_MAX = 9,
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	long unsigned int scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+enum fib6_walk_state {
+	FWS_L = 0,
+	FWS_R = 1,
+	FWS_C = 2,
+	FWS_U = 3,
+};
+
+struct fib6_walker {
+	struct list_head lh;
+	struct fib6_node *root;
+	struct fib6_node *node;
+	struct fib6_info *leaf;
+	enum fib6_walk_state state;
+	unsigned int skip;
+	unsigned int count;
+	unsigned int skip_in_node;
+	int (*func)(struct fib6_walker *);
+	void *args;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct fib6_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct fib6_info *rt;
+	unsigned int nsiblings;
+};
+
+struct ipv6_route_iter {
+	struct seq_net_private p;
+	struct fib6_walker w;
+	loff_t skip;
+	struct fib6_table *tbl;
+	int sernum;
+};
+
+struct bpf_iter__ipv6_route {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct fib6_info *rt;
+	};
+};
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct fib6_cleaner {
+	struct fib6_walker w;
+	struct net *net;
+	int (*func)(struct fib6_info *, void *);
+	int sernum;
+	void *arg;
+	bool skip_notify;
+};
+
+enum {
+	FIB6_NO_SERNUM_CHANGE = 0,
+};
+
+struct fib6_dump_arg {
+	struct net *net;
+	struct notifier_block *nb;
+	struct netlink_ext_ack *extack;
+};
+
+struct fib6_nh_pcpu_arg {
+	struct fib6_info *from;
+	const struct fib6_table *table;
+};
+
+struct lookup_args {
+	int offset;
+	const struct in6_addr *addr;
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+struct rt6_exception {
+	struct hlist_node hlist;
+	struct rt6_info *rt6i;
+	long unsigned int stamp;
+	struct callback_head rcu;
+};
+
+struct netevent_redirect {
+	struct dst_entry *old;
+	struct dst_entry *new;
+	struct neighbour *neigh;
+	const void *daddr;
+};
+
+struct trace_event_raw_fib6_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[16];
+	__u8 dst[16];
+	u16 sport;
+	u16 dport;
+	u8 proto;
+	u8 rt_type;
+	char name[16];
+	__u8 gw[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_fib6_table_lookup {};
+
+typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
+
+enum rt6_nud_state {
+	RT6_NUD_FAIL_HARD = 4294967293,
+	RT6_NUD_FAIL_PROBE = 4294967294,
+	RT6_NUD_FAIL_DO_RR = 4294967295,
+	RT6_NUD_SUCCEED = 1,
+};
+
+struct fib6_nh_dm_arg {
+	struct net *net;
+	const struct in6_addr *saddr;
+	int oif;
+	int flags;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_frl_arg {
+	u32 flags;
+	int oif;
+	int strict;
+	int *mpri;
+	bool *do_rr;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_excptn_arg {
+	struct rt6_info *rt;
+	int plen;
+};
+
+struct fib6_nh_match_arg {
+	const struct net_device *dev;
+	const struct in6_addr *gw;
+	struct fib6_nh *match;
+};
+
+struct fib6_nh_age_excptn_arg {
+	struct fib6_gc_args *gc_args;
+	long unsigned int now;
+};
+
+struct fib6_nh_rd_arg {
+	struct fib6_result *res;
+	struct flowi6 *fl6;
+	const struct in6_addr *gw;
+	struct rt6_info **ret;
+};
+
+struct ip6rd_flowi {
+	struct flowi6 fl6;
+	struct in6_addr gateway;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+	struct fib6_config *cfg;
+	struct fib6_info *f6i;
+};
+
+struct arg_dev_net_ip {
+	struct net_device *dev;
+	struct net *net;
+	struct in6_addr *addr;
+};
+
+struct arg_netdev_event {
+	const struct net_device *dev;
+	union {
+		unsigned char nh_flags;
+		long unsigned int event;
+	};
+};
+
+struct rt6_mtu_change_arg {
+	struct net_device *dev;
+	unsigned int mtu;
+	struct fib6_info *f6i;
+};
+
+struct rt6_nh {
+	struct fib6_info *fib6_info;
+	struct fib6_config r_cfg;
+	struct list_head next;
+};
+
+struct fib6_nh_exception_dump_walker {
+	struct rt6_rtnl_dump_arg *dump;
+	struct fib6_info *rt;
+	unsigned int flags;
+	unsigned int skip;
+	unsigned int count;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	short unsigned int nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	short unsigned int nduseropt_pad2;
+	unsigned int nduseropt_pad3;
+};
+
+enum {
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+enum ip6_defrag_users {
+	IP6_DEFRAG_LOCAL_DELIVER = 0,
+	IP6_DEFRAG_CONNTRACK_IN = 1,
+	__IP6_DEFRAG_CONNTRACK_IN = 65536,
+	IP6_DEFRAG_CONNTRACK_OUT = 65537,
+	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
+	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
+	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
+};
+
+struct frag_queue {
+	struct inet_frag_queue q;
+	int iif;
+	__u16 nhoffset;
+	u8 ecn;
+};
+
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
+
+struct icmpv6_msg {
+	struct sk_buff *skb;
+	int offset;
+	uint8_t type;
+};
+
+struct icmp6_err {
+	int err;
+	int fatal;
+};
+
+struct rt0_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr[0];
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct in6_addr addr[0];
+		__u8 data[0];
+	} segments;
+};
+
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
+};
+
+struct tcp6_pseudohdr {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	__be32 len;
+	__be32 protocol;
+};
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+struct ip6fl_iter_state {
+	struct seq_net_private p;
+	struct pid_namespace *pid_ns;
+	int bucket;
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
+};
+
+enum {
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
+};
+
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
+struct xfrm6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_protocol *next;
+	int priority;
+};
+
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+	u8 vlan_filtered: 1;
+	u8 br_netfilter_broute: 1;
+	u8 tx_fwd_offload: 1;
+	int src_hwdom;
+	long unsigned int fwd_hwdoms;
+};
+
+struct nf_bridge_frag_data;
+
+struct xfrm6_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_tunnel *next;
+	int priority;
+};
+
+struct ip6t_ip6 {
+	struct in6_addr src;
+	struct in6_addr dst;
+	struct in6_addr smsk;
+	struct in6_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 tos;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ip6t_entry {
+	struct ip6t_ip6 ipv6;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct ip6t_standard {
+	struct ip6t_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ip6t_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters *counters;
+	struct ip6t_entry entries[0];
+};
+
+struct ip6t_error {
+	struct ip6t_entry entry;
+	struct xt_error_target target;
+};
+
+struct ip6t_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct ip6t_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ip6t_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ip6t_entry entrytable[0];
+};
+
+struct compat_ip6t_entry {
+	struct ip6t_ip6 ipv6;
+	compat_uint_t nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	compat_uint_t comefrom;
+	struct compat_xt_counters counters;
+	unsigned char elems[0];
+};
+
+enum nf_ip_trace_comments___2 {
+	NF_IP6_TRACE_COMMENT_RULE = 0,
+	NF_IP6_TRACE_COMMENT_RETURN = 1,
+	NF_IP6_TRACE_COMMENT_POLICY = 2,
+};
+
+struct compat_ip6t_replace {
+	char name[32];
+	u32 valid_hooks;
+	u32 num_entries;
+	u32 size;
+	u32 hook_entry[5];
+	u32 underflow[5];
+	u32 num_counters;
+	compat_uptr_t counters;
+	struct compat_ip6t_entry entries[0];
+};
+
+struct compat_ip6t_get_entries {
+	char name[32];
+	compat_uint_t size;
+	struct compat_ip6t_entry entrytable[0];
+};
+
+struct ip6table_nat_pernet {
+	struct nf_hook_ops *nf_nat_ops;
+};
+
+struct nft_ct_frag6_pernet {
+	struct ctl_table_header *nf_frag_frags_hdr;
+	struct fqdir *fqdir;
+};
+
+enum nf_tproxy_lookup_t {
+	NF_TPROXY_LOOKUP_LISTENER = 0,
+	NF_TPROXY_LOOKUP_ESTABLISHED = 1,
+};
+
+struct nft_dup_ipv6 {
+	u8 sreg_addr;
+	u8 sreg_dev;
+};
+
+struct ip_tunnel_prl {
+	__be32 addr;
+	__u16 flags;
+	__u16 __reserved;
+	__u32 datalen;
+	__u32 __reserved2;
+};
+
+struct sit_net {
+	struct ip_tunnel *tunnels_r_l[16];
+	struct ip_tunnel *tunnels_r[16];
+	struct ip_tunnel *tunnels_l[16];
+	struct ip_tunnel *tunnels_wc[1];
+	struct ip_tunnel **tunnels[4];
+	struct net_device *fb_tunnel_dev;
+};
+
+struct ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+};
+
+struct ipv6_tlv_tnl_enc_lim {
+	__u8 type;
+	__u8 length;
+	__u8 encap_limit;
+};
+
+struct ip6_tnl_net {
+	struct net_device *fb_tnl_dev;
+	struct ip6_tnl *tnls_r_l[32];
+	struct ip6_tnl *tnls_wc[1];
+	struct ip6_tnl **tnls[2];
+	struct ip6_tnl *collect_md_tun;
+};
+
+struct ipv6_tel_txoption {
+	struct ipv6_txoptions ops;
+	__u8 dst_opt[8];
+};
+
+struct sockaddr_pkt {
+	short unsigned int spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+	short unsigned int sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	short unsigned int sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
+};
+
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct tpacket_hdr {
+	long unsigned int tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	short unsigned int tp_mac;
+	short unsigned int tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	short unsigned int type;
+	short unsigned int alen;
+	unsigned char addr[32];
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	short unsigned int kactive_blk_num;
+	short unsigned int blk_sizeof_priv;
+	short unsigned int last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	short unsigned int retire_blk_tov;
+	short unsigned int version;
+	long unsigned int tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int *pending_refcnt;
+	union {
+		long unsigned int *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned int running;
+	unsigned int auxdata: 1;
+	unsigned int origdev: 1;
+	unsigned int has_vnet_hdr: 1;
+	unsigned int tp_loss: 1;
+	unsigned int tp_tx_has_off: 1;
+	int pressure;
+	int ifindex;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device *cached_dev;
+	int (*xmit)(struct sk_buff *);
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	short unsigned int mr_type;
+	short unsigned int mr_alen;
+	unsigned char mr_address[32];
+};
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
+};
+
+struct packet_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 pdiag_ino;
+	__u32 pdiag_show;
+	__u32 pdiag_cookie[2];
+};
+
+struct packet_diag_msg {
+	__u8 pdiag_family;
+	__u8 pdiag_type;
+	__u16 pdiag_num;
+	__u32 pdiag_ino;
+	__u32 pdiag_cookie[2];
+};
+
+enum {
+	PACKET_DIAG_INFO = 0,
+	PACKET_DIAG_MCLIST = 1,
+	PACKET_DIAG_RX_RING = 2,
+	PACKET_DIAG_TX_RING = 3,
+	PACKET_DIAG_FANOUT = 4,
+	PACKET_DIAG_UID = 5,
+	PACKET_DIAG_MEMINFO = 6,
+	PACKET_DIAG_FILTER = 7,
+	__PACKET_DIAG_MAX = 8,
+};
+
+struct packet_diag_info {
+	__u32 pdi_index;
+	__u32 pdi_version;
+	__u32 pdi_reserve;
+	__u32 pdi_copy_thresh;
+	__u32 pdi_tstamp;
+	__u32 pdi_flags;
+};
+
+struct packet_diag_mclist {
+	__u32 pdmc_index;
+	__u32 pdmc_count;
+	__u16 pdmc_type;
+	__u16 pdmc_alen;
+	__u8 pdmc_addr[32];
+};
+
+struct packet_diag_ring {
+	__u32 pdr_block_size;
+	__u32 pdr_block_nr;
+	__u32 pdr_frame_size;
+	__u32 pdr_frame_nr;
+	__u32 pdr_retire_tmo;
+	__u32 pdr_sizeof_priv;
+	__u32 pdr_features;
+};
+
+struct switchdev_brport {
+	struct net_device *dev;
+	const void *ctx;
+	struct notifier_block *atomic_nb;
+	struct notifier_block *blocking_nb;
+	bool tx_fwd_offload;
+};
+
+struct switchdev_notifier_fdb_info {
+	struct switchdev_notifier_info info;
+	const unsigned char *addr;
+	u16 vid;
+	u8 added_by_user: 1;
+	u8 is_local: 1;
+	u8 locked: 1;
+	u8 offloaded: 1;
+};
+
+struct switchdev_notifier_brport_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_brport brport;
+};
+
+enum br_boolopt_id {
+	BR_BOOLOPT_NO_LL_LEARN = 0,
+	BR_BOOLOPT_MCAST_VLAN_SNOOPING = 1,
+	BR_BOOLOPT_MST_ENABLE = 2,
+	BR_BOOLOPT_MAX = 3,
+};
+
+struct br_boolopt_multi {
+	__u32 optval;
+	__u32 optmask;
+};
+
+enum net_bridge_opts {
+	BROPT_VLAN_ENABLED = 0,
+	BROPT_VLAN_STATS_ENABLED = 1,
+	BROPT_NF_CALL_IPTABLES = 2,
+	BROPT_NF_CALL_IP6TABLES = 3,
+	BROPT_NF_CALL_ARPTABLES = 4,
+	BROPT_GROUP_ADDR_SET = 5,
+	BROPT_MULTICAST_ENABLED = 6,
+	BROPT_MULTICAST_QUERY_USE_IFADDR = 7,
+	BROPT_MULTICAST_STATS_ENABLED = 8,
+	BROPT_HAS_IPV6_ADDR = 9,
+	BROPT_NEIGH_SUPPRESS_ENABLED = 10,
+	BROPT_MTU_SET_BY_USER = 11,
+	BROPT_VLAN_STATS_PER_PORT = 12,
+	BROPT_NO_LL_LEARN = 13,
+	BROPT_VLAN_BRIDGE_BINDING = 14,
+	BROPT_MCAST_VLAN_SNOOPING_ENABLED = 15,
+	BROPT_MST_ENABLED = 16,
+};
+
+struct net_bridge_mcast_gc {
+	struct hlist_node gc_node;
+	void (*destroy)(struct net_bridge_mcast_gc *);
+};
+
+struct net_bridge_port_group_sg_key {
+	struct net_bridge_port *port;
+	struct br_ip addr;
+};
+
+struct net_bridge_port_group {
+	struct net_bridge_port_group *next;
+	struct net_bridge_port_group_sg_key key;
+	unsigned char eth_addr[6];
+	unsigned char flags;
+	unsigned char filter_mode;
+	unsigned char grp_query_rexmit_cnt;
+	unsigned char rt_protocol;
+	struct hlist_head src_list;
+	unsigned int src_ents;
+	struct timer_list timer;
+	struct timer_list rexmit_timer;
+	struct hlist_node mglist;
+	struct rb_root eht_set_tree;
+	struct rb_root eht_host_tree;
+	struct rhash_head rhnode;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+struct net_bridge_mdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge *br;
+	struct net_bridge_port_group *ports;
+	struct br_ip addr;
+	bool host_joined;
+	struct timer_list timer;
+	struct hlist_node mdb_node;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+enum br_pkt_type {
+	BR_PKT_UNICAST = 0,
+	BR_PKT_MULTICAST = 1,
+	BR_PKT_BROADCAST = 2,
+};
+
+struct nf_br_ops {
+	int (*br_dev_xmit_hook)(struct sk_buff *);
+};
+
+enum {
+	FDB_NOTIFY_BIT = 1,
+	FDB_NOTIFY_INACTIVE_BIT = 2,
+};
+
+enum {
+	NFEA_UNSPEC = 0,
+	NFEA_ACTIVITY_NOTIFY = 1,
+	NFEA_DONT_REFRESH = 2,
+	__NFEA_MAX = 3,
+};
+
+struct __fdb_entry {
+	__u8 mac_addr[6];
+	__u8 port_no;
+	__u8 is_local;
+	__u32 ageing_timer_value;
+	__u8 port_hi;
+	__u8 pad0;
+	__u16 unused;
+};
+
+enum {
+	BR_FDB_LOCAL = 0,
+	BR_FDB_STATIC = 1,
+	BR_FDB_STICKY = 2,
+	BR_FDB_ADDED_BY_USER = 3,
+	BR_FDB_ADDED_BY_EXT_LEARN = 4,
+	BR_FDB_OFFLOADED = 5,
+	BR_FDB_NOTIFY = 6,
+	BR_FDB_NOTIFY_INACTIVE = 7,
+	BR_FDB_LOCKED = 8,
+};
+
+struct net_bridge_fdb_flush_desc {
+	long unsigned int flags;
+	long unsigned int flags_mask;
+	int port_ifindex;
+	u16 vlan_id;
+};
+
+struct __bridge_info {
+	__u64 designated_root;
+	__u64 bridge_id;
+	__u32 root_path_cost;
+	__u32 max_age;
+	__u32 hello_time;
+	__u32 forward_delay;
+	__u32 bridge_max_age;
+	__u32 bridge_hello_time;
+	__u32 bridge_forward_delay;
+	__u8 topology_change;
+	__u8 topology_change_detected;
+	__u8 root_port;
+	__u8 stp_enabled;
+	__u32 ageing_time;
+	__u32 gc_interval;
+	__u32 hello_timer_value;
+	__u32 tcn_timer_value;
+	__u32 topology_change_timer_value;
+	__u32 gc_timer_value;
+};
+
+struct __port_info {
+	__u64 designated_root;
+	__u64 designated_bridge;
+	__u16 port_id;
+	__u16 designated_port;
+	__u32 path_cost;
+	__u32 designated_cost;
+	__u8 state;
+	__u8 top_change_ack;
+	__u8 config_pending;
+	__u8 unused0;
+	__u32 message_age_timer_value;
+	__u32 forward_delay_timer_value;
+	__u32 hold_timer_value;
+};
+
+enum switchdev_attr_id {
+	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
+	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
+	SWITCHDEV_ATTR_ID_PORT_MST_STATE = 2,
+	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 3,
+	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 4,
+	SWITCHDEV_ATTR_ID_PORT_MROUTER = 5,
+	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 6,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 7,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 8,
+	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 9,
+	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 10,
+	SWITCHDEV_ATTR_ID_BRIDGE_MST = 11,
+	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 12,
+	SWITCHDEV_ATTR_ID_VLAN_MSTI = 13,
+};
+
+struct switchdev_attr {
+	struct net_device *orig_dev;
+	enum switchdev_attr_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+	union {
+		u8 stp_state;
+		struct switchdev_mst_state mst_state;
+		struct switchdev_brport_flags brport_flags;
+		bool mrouter;
+		clock_t ageing_time;
+		bool vlan_filtering;
+		u16 vlan_protocol;
+		bool mst;
+		bool mc_disabled;
+		u8 mrp_port_role;
+		struct switchdev_vlan_msti vlan_msti;
+	} u;
+};
+
+struct br_config_bpdu {
+	unsigned int topology_change: 1;
+	unsigned int topology_change_ack: 1;
+	bridge_id root;
+	int root_path_cost;
+	bridge_id bridge_id;
+	port_id port_id;
+	int message_age;
+	int max_age;
+	int hello_time;
+	int forward_delay;
+};
+
+enum {
+	MDB_RTR_TYPE_DISABLED = 0,
+	MDB_RTR_TYPE_TEMP_QUERY = 1,
+	MDB_RTR_TYPE_PERM = 2,
+	MDB_RTR_TYPE_TEMP = 3,
+};
+
+struct br_frame_type {
+	__be16 type;
+	int (*frame_handler)(struct net_bridge_port *, struct sk_buff *);
+	struct hlist_node list;
+};
+
+enum {
+	IFLA_BR_UNSPEC = 0,
+	IFLA_BR_FORWARD_DELAY = 1,
+	IFLA_BR_HELLO_TIME = 2,
+	IFLA_BR_MAX_AGE = 3,
+	IFLA_BR_AGEING_TIME = 4,
+	IFLA_BR_STP_STATE = 5,
+	IFLA_BR_PRIORITY = 6,
+	IFLA_BR_VLAN_FILTERING = 7,
+	IFLA_BR_VLAN_PROTOCOL = 8,
+	IFLA_BR_GROUP_FWD_MASK = 9,
+	IFLA_BR_ROOT_ID = 10,
+	IFLA_BR_BRIDGE_ID = 11,
+	IFLA_BR_ROOT_PORT = 12,
+	IFLA_BR_ROOT_PATH_COST = 13,
+	IFLA_BR_TOPOLOGY_CHANGE = 14,
+	IFLA_BR_TOPOLOGY_CHANGE_DETECTED = 15,
+	IFLA_BR_HELLO_TIMER = 16,
+	IFLA_BR_TCN_TIMER = 17,
+	IFLA_BR_TOPOLOGY_CHANGE_TIMER = 18,
+	IFLA_BR_GC_TIMER = 19,
+	IFLA_BR_GROUP_ADDR = 20,
+	IFLA_BR_FDB_FLUSH = 21,
+	IFLA_BR_MCAST_ROUTER = 22,
+	IFLA_BR_MCAST_SNOOPING = 23,
+	IFLA_BR_MCAST_QUERY_USE_IFADDR = 24,
+	IFLA_BR_MCAST_QUERIER = 25,
+	IFLA_BR_MCAST_HASH_ELASTICITY = 26,
+	IFLA_BR_MCAST_HASH_MAX = 27,
+	IFLA_BR_MCAST_LAST_MEMBER_CNT = 28,
+	IFLA_BR_MCAST_STARTUP_QUERY_CNT = 29,
+	IFLA_BR_MCAST_LAST_MEMBER_INTVL = 30,
+	IFLA_BR_MCAST_MEMBERSHIP_INTVL = 31,
+	IFLA_BR_MCAST_QUERIER_INTVL = 32,
+	IFLA_BR_MCAST_QUERY_INTVL = 33,
+	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL = 34,
+	IFLA_BR_MCAST_STARTUP_QUERY_INTVL = 35,
+	IFLA_BR_NF_CALL_IPTABLES = 36,
+	IFLA_BR_NF_CALL_IP6TABLES = 37,
+	IFLA_BR_NF_CALL_ARPTABLES = 38,
+	IFLA_BR_VLAN_DEFAULT_PVID = 39,
+	IFLA_BR_PAD = 40,
+	IFLA_BR_VLAN_STATS_ENABLED = 41,
+	IFLA_BR_MCAST_STATS_ENABLED = 42,
+	IFLA_BR_MCAST_IGMP_VERSION = 43,
+	IFLA_BR_MCAST_MLD_VERSION = 44,
+	IFLA_BR_VLAN_STATS_PER_PORT = 45,
+	IFLA_BR_MULTI_BOOLOPT = 46,
+	IFLA_BR_MCAST_QUERIER_STATE = 47,
+	__IFLA_BR_MAX = 48,
+};
+
+enum {
+	LINK_XSTATS_TYPE_UNSPEC = 0,
+	LINK_XSTATS_TYPE_BRIDGE = 1,
+	LINK_XSTATS_TYPE_BOND = 2,
+	__LINK_XSTATS_TYPE_MAX = 3,
+};
+
+struct bridge_vlan_info {
+	__u16 flags;
+	__u16 vid;
+};
+
+struct bridge_vlan_xstats {
+	__u64 rx_bytes;
+	__u64 rx_packets;
+	__u64 tx_bytes;
+	__u64 tx_packets;
+	__u16 vid;
+	__u16 flags;
+	__u32 pad2;
+};
+
+enum {
+	BRIDGE_XSTATS_UNSPEC = 0,
+	BRIDGE_XSTATS_VLAN = 1,
+	BRIDGE_XSTATS_MCAST = 2,
+	BRIDGE_XSTATS_PAD = 3,
+	BRIDGE_XSTATS_STP = 4,
+	__BRIDGE_XSTATS_MAX = 5,
+};
+
+enum {
+	BR_GROUPFWD_STP = 1,
+	BR_GROUPFWD_MACPAUSE = 2,
+	BR_GROUPFWD_LACP = 4,
+};
+
+struct vtunnel_info {
+	u32 tunid;
+	u16 vid;
+	u16 flags;
+};
+
+enum {
+	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC = 0,
+	IFLA_BRIDGE_VLAN_TUNNEL_ID = 1,
+	IFLA_BRIDGE_VLAN_TUNNEL_VID = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS = 3,
+	__IFLA_BRIDGE_VLAN_TUNNEL_MAX = 4,
+};
+
+struct brport_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct net_bridge_port *, char *);
+	int (*store)(struct net_bridge_port *, long unsigned int);
+	int (*store_raw)(struct net_bridge_port *, char *);
+};
+
+struct net_bridge_group_src {
+	struct hlist_node node;
+	struct br_ip addr;
+	struct net_bridge_port_group *pg;
+	u8 flags;
+	u8 src_query_rexmit_cnt;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+union net_bridge_eht_addr {
+	__be32 ip4;
+	struct in6_addr ip6;
+};
+
+struct net_bridge_group_eht_host {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr h_addr;
+	struct hlist_head set_entries;
+	unsigned int num_entries;
+	unsigned char filter_mode;
+	struct net_bridge_port_group *pg;
+};
+
+struct net_bridge_group_eht_set;
+
+struct net_bridge_group_eht_set_entry {
+	struct rb_node rb_node;
+	struct hlist_node host_list;
+	union net_bridge_eht_addr h_addr;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_group_eht_set *eht_set;
+	struct net_bridge_group_eht_host *h_parent;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+struct net_bridge_group_eht_set {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr src_addr;
+	struct rb_root entry_tree;
+	struct timer_list timer;
+	struct net_bridge_port_group *pg;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+enum {
+	MDBA_UNSPEC = 0,
+	MDBA_MDB = 1,
+	MDBA_ROUTER = 2,
+	__MDBA_MAX = 3,
+};
+
+enum {
+	MDBA_MDB_UNSPEC = 0,
+	MDBA_MDB_ENTRY = 1,
+	__MDBA_MDB_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_ENTRY_UNSPEC = 0,
+	MDBA_MDB_ENTRY_INFO = 1,
+	__MDBA_MDB_ENTRY_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_EATTR_UNSPEC = 0,
+	MDBA_MDB_EATTR_TIMER = 1,
+	MDBA_MDB_EATTR_SRC_LIST = 2,
+	MDBA_MDB_EATTR_GROUP_MODE = 3,
+	MDBA_MDB_EATTR_SOURCE = 4,
+	MDBA_MDB_EATTR_RTPROT = 5,
+	__MDBA_MDB_EATTR_MAX = 6,
+};
+
+enum {
+	MDBA_MDB_SRCLIST_UNSPEC = 0,
+	MDBA_MDB_SRCLIST_ENTRY = 1,
+	__MDBA_MDB_SRCLIST_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_SRCATTR_UNSPEC = 0,
+	MDBA_MDB_SRCATTR_ADDRESS = 1,
+	MDBA_MDB_SRCATTR_TIMER = 2,
+	__MDBA_MDB_SRCATTR_MAX = 3,
+};
+
+enum {
+	MDBA_ROUTER_UNSPEC = 0,
+	MDBA_ROUTER_PORT = 1,
+	__MDBA_ROUTER_MAX = 2,
+};
+
+enum {
+	MDBA_ROUTER_PATTR_UNSPEC = 0,
+	MDBA_ROUTER_PATTR_TIMER = 1,
+	MDBA_ROUTER_PATTR_TYPE = 2,
+	MDBA_ROUTER_PATTR_INET_TIMER = 3,
+	MDBA_ROUTER_PATTR_INET6_TIMER = 4,
+	MDBA_ROUTER_PATTR_VID = 5,
+	__MDBA_ROUTER_PATTR_MAX = 6,
+};
+
+struct br_port_msg {
+	__u8 family;
+	__u32 ifindex;
+};
+
+struct br_mdb_entry {
+	__u32 ifindex;
+	__u8 state;
+	__u8 flags;
+	__u16 vid;
+	struct {
+		union {
+			__be32 ip4;
+			struct in6_addr ip6;
+			unsigned char mac_addr[6];
+		} u;
+		__be16 proto;
+	} addr;
+};
+
+enum {
+	MDBA_SET_ENTRY_UNSPEC = 0,
+	MDBA_SET_ENTRY = 1,
+	MDBA_SET_ENTRY_ATTRS = 2,
+	__MDBA_SET_ENTRY_MAX = 3,
+};
+
+enum {
+	MDBE_ATTR_UNSPEC = 0,
+	MDBE_ATTR_SOURCE = 1,
+	MDBE_ATTR_SRC_LIST = 2,
+	MDBE_ATTR_GROUP_MODE = 3,
+	MDBE_ATTR_RTPROT = 4,
+	__MDBE_ATTR_MAX = 5,
+};
+
+enum {
+	MDBE_SRC_LIST_UNSPEC = 0,
+	MDBE_SRC_LIST_ENTRY = 1,
+	__MDBE_SRC_LIST_MAX = 2,
+};
+
+enum {
+	MDBE_SRCATTR_UNSPEC = 0,
+	MDBE_SRCATTR_ADDRESS = 1,
+	__MDBE_SRCATTR_MAX = 2,
+};
+
+struct br_mdb_src_entry {
+	struct br_ip addr;
+};
+
+struct br_mdb_config {
+	struct net_bridge *br;
+	struct net_bridge_port *p;
+	struct br_mdb_entry *entry;
+	struct br_ip group;
+	bool src_entry;
+	u8 filter_mode;
+	u16 nlflags;
+	struct br_mdb_src_entry *src_entries;
+	int num_src_entries;
+	u8 rt_protocol;
+};
+
+enum {
+	BR_VLFLAG_PER_PORT_STATS = 1,
+	BR_VLFLAG_ADDED_BY_SWITCHDEV = 2,
+	BR_VLFLAG_MCAST_ENABLED = 4,
+	BR_VLFLAG_GLOBAL_MCAST_ENABLED = 8,
+};
+
+struct pimhdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+};
+
+enum {
+	BRIDGE_QUERIER_UNSPEC = 0,
+	BRIDGE_QUERIER_IP_ADDRESS = 1,
+	BRIDGE_QUERIER_IP_PORT = 2,
+	BRIDGE_QUERIER_IP_OTHER_TIMER = 3,
+	BRIDGE_QUERIER_PAD = 4,
+	BRIDGE_QUERIER_IPV6_ADDRESS = 5,
+	BRIDGE_QUERIER_IPV6_PORT = 6,
+	BRIDGE_QUERIER_IPV6_OTHER_TIMER = 7,
+	__BRIDGE_QUERIER_MAX = 8,
+};
+
+struct br_ip_list {
+	struct list_head list;
+	struct br_ip addr;
+};
+
+struct br_vlan_msg {
+	__u8 family;
+	__u8 reserved1;
+	__u16 reserved2;
+	__u32 ifindex;
+};
+
+enum {
+	BRIDGE_VLANDB_DUMP_UNSPEC = 0,
+	BRIDGE_VLANDB_DUMP_FLAGS = 1,
+	__BRIDGE_VLANDB_DUMP_MAX = 2,
+};
+
+enum {
+	BRIDGE_VLANDB_UNSPEC = 0,
+	BRIDGE_VLANDB_ENTRY = 1,
+	BRIDGE_VLANDB_GLOBAL_OPTIONS = 2,
+	__BRIDGE_VLANDB_MAX = 3,
+};
+
+enum {
+	BRIDGE_VLANDB_ENTRY_UNSPEC = 0,
+	BRIDGE_VLANDB_ENTRY_INFO = 1,
+	BRIDGE_VLANDB_ENTRY_RANGE = 2,
+	BRIDGE_VLANDB_ENTRY_STATE = 3,
+	BRIDGE_VLANDB_ENTRY_TUNNEL_INFO = 4,
+	BRIDGE_VLANDB_ENTRY_STATS = 5,
+	BRIDGE_VLANDB_ENTRY_MCAST_ROUTER = 6,
+	__BRIDGE_VLANDB_ENTRY_MAX = 7,
+};
+
+enum {
+	BRIDGE_VLANDB_STATS_UNSPEC = 0,
+	BRIDGE_VLANDB_STATS_RX_BYTES = 1,
+	BRIDGE_VLANDB_STATS_RX_PACKETS = 2,
+	BRIDGE_VLANDB_STATS_TX_BYTES = 3,
+	BRIDGE_VLANDB_STATS_TX_PACKETS = 4,
+	BRIDGE_VLANDB_STATS_PAD = 5,
+	__BRIDGE_VLANDB_STATS_MAX = 6,
+};
+
+enum vlan_flags {
+	VLAN_FLAG_REORDER_HDR = 1,
+	VLAN_FLAG_GVRP = 2,
+	VLAN_FLAG_LOOSE_BINDING = 4,
+	VLAN_FLAG_MVRP = 8,
+	VLAN_FLAG_BRIDGE_BINDING = 16,
+};
+
+struct vlan_priority_tci_mapping {
+	u32 priority;
+	u16 vlan_qos;
+	struct vlan_priority_tci_mapping *next;
+};
+
+struct vlan_dev_priv {
+	unsigned int nr_ingress_mappings;
+	u32 ingress_priority_map[8];
+	unsigned int nr_egress_mappings;
+	struct vlan_priority_tci_mapping *egress_priority_map[16];
+	__be16 vlan_proto;
+	u16 vlan_id;
+	u16 flags;
+	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
+	unsigned char real_dev_addr[6];
+	struct proc_dir_entry *dent;
+	struct vlan_pcpu_stats *vlan_pcpu_stats;
+	struct netpoll *netpoll;
+};
+
+struct br_vlan_bind_walk_data {
+	u16 vid;
+	struct net_device *result;
+};
+
+struct br_vlan_link_state_walk_data {
+	struct net_bridge *br;
+};
+
+enum {
+	IFLA_BRIDGE_MST_UNSPEC = 0,
+	IFLA_BRIDGE_MST_ENTRY = 1,
+	__IFLA_BRIDGE_MST_MAX = 2,
+};
+
+enum {
+	IFLA_BRIDGE_MST_ENTRY_UNSPEC = 0,
+	IFLA_BRIDGE_MST_ENTRY_MSTI = 1,
+	IFLA_BRIDGE_MST_ENTRY_STATE = 2,
+	__IFLA_BRIDGE_MST_ENTRY_MAX = 3,
+};
+
+struct switchdev_notifier_port_obj_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_obj *obj;
+	bool handled;
+};
+
+struct switchdev_notifier_port_attr_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_attr *attr;
+	bool handled;
+};
+
+struct br_switchdev_mdb_complete_info {
+	struct net_bridge_port *port;
+	struct br_ip ip;
+};
+
+struct switchdev_obj_ring_test_mrp {
+	struct switchdev_obj obj;
+	u32 interval;
+	u8 max_miss;
+	u32 ring_id;
+	u32 period;
+	bool monitor;
+};
+
+struct switchdev_obj_ring_state_mrp {
+	struct switchdev_obj obj;
+	u8 ring_state;
+	u32 ring_id;
+};
+
+struct switchdev_obj_in_test_mrp {
+	struct switchdev_obj obj;
+	u32 interval;
+	u32 in_id;
+	u32 period;
+	u8 max_miss;
+};
+
+struct switchdev_obj_in_role_mrp {
+	struct switchdev_obj obj;
+	struct net_device *i_port;
+	u32 ring_id;
+	u16 in_id;
+	u8 in_role;
+	u8 sw_backup;
+};
+
+struct switchdev_obj_in_state_mrp {
+	struct switchdev_obj obj;
+	u32 in_id;
+	u8 in_state;
+};
+
+enum br_mrp_ring_role_type {
+	BR_MRP_RING_ROLE_DISABLED = 0,
+	BR_MRP_RING_ROLE_MRC = 1,
+	BR_MRP_RING_ROLE_MRM = 2,
+	BR_MRP_RING_ROLE_MRA = 3,
+};
+
+enum br_mrp_in_role_type {
+	BR_MRP_IN_ROLE_DISABLED = 0,
+	BR_MRP_IN_ROLE_MIC = 1,
+	BR_MRP_IN_ROLE_MIM = 2,
+};
+
+enum br_mrp_ring_state_type {
+	BR_MRP_RING_STATE_OPEN = 0,
+	BR_MRP_RING_STATE_CLOSED = 1,
+};
+
+enum br_mrp_in_state_type {
+	BR_MRP_IN_STATE_OPEN = 0,
+	BR_MRP_IN_STATE_CLOSED = 1,
+};
+
+enum br_mrp_port_role_type {
+	BR_MRP_PORT_ROLE_PRIMARY = 0,
+	BR_MRP_PORT_ROLE_SECONDARY = 1,
+	BR_MRP_PORT_ROLE_INTER = 2,
+};
+
+struct br_mrp {
+	struct hlist_node list;
+	struct net_bridge_port *p_port;
+	struct net_bridge_port *s_port;
+	struct net_bridge_port *i_port;
+	u32 ring_id;
+	u16 in_id;
+	u16 prio;
+	enum br_mrp_ring_role_type ring_role;
+	u8 ring_role_offloaded;
+	enum br_mrp_ring_state_type ring_state;
+	u32 ring_transitions;
+	enum br_mrp_in_role_type in_role;
+	u8 in_role_offloaded;
+	enum br_mrp_in_state_type in_state;
+	u32 in_transitions;
+	struct delayed_work test_work;
+	u32 test_interval;
+	long unsigned int test_end;
+	u32 test_count_miss;
+	u32 test_max_miss;
+	bool test_monitor;
+	struct delayed_work in_test_work;
+	u32 in_test_interval;
+	long unsigned int in_test_end;
+	u32 in_test_count_miss;
+	u32 in_test_max_miss;
+	u32 seq_id;
+	struct callback_head rcu;
+};
+
+enum br_mrp_hw_support {
+	BR_MRP_NONE = 0,
+	BR_MRP_SW = 1,
+	BR_MRP_HW = 2,
+};
+
+enum {
+	BRIDGE_VLANDB_TINFO_UNSPEC = 0,
+	BRIDGE_VLANDB_TINFO_ID = 1,
+	BRIDGE_VLANDB_TINFO_CMD = 2,
+	__BRIDGE_VLANDB_TINFO_MAX = 3,
+};
+
+enum {
+	BRIDGE_VLANDB_GOPTS_UNSPEC = 0,
+	BRIDGE_VLANDB_GOPTS_ID = 1,
+	BRIDGE_VLANDB_GOPTS_RANGE = 2,
+	BRIDGE_VLANDB_GOPTS_MCAST_SNOOPING = 3,
+	BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION = 4,
+	BRIDGE_VLANDB_GOPTS_MCAST_MLD_VERSION = 5,
+	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_CNT = 6,
+	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_CNT = 7,
+	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_INTVL = 8,
+	BRIDGE_VLANDB_GOPTS_PAD = 9,
+	BRIDGE_VLANDB_GOPTS_MCAST_MEMBERSHIP_INTVL = 10,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_INTVL = 11,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_INTVL = 12,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_RESPONSE_INTVL = 13,
+	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_INTVL = 14,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER = 15,
+	BRIDGE_VLANDB_GOPTS_MCAST_ROUTER_PORTS = 16,
+	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE = 17,
+	BRIDGE_VLANDB_GOPTS_MSTI = 18,
+	__BRIDGE_VLANDB_GOPTS_MAX = 19,
+};
+
+enum br_mrp_port_state_type {
+	BR_MRP_PORT_STATE_DISABLED = 0,
+	BR_MRP_PORT_STATE_BLOCKED = 1,
+	BR_MRP_PORT_STATE_FORWARDING = 2,
+	BR_MRP_PORT_STATE_NOT_CONNECTED = 3,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_INSTANCE = 1,
+	IFLA_BRIDGE_MRP_PORT_STATE = 2,
+	IFLA_BRIDGE_MRP_PORT_ROLE = 3,
+	IFLA_BRIDGE_MRP_RING_STATE = 4,
+	IFLA_BRIDGE_MRP_RING_ROLE = 5,
+	IFLA_BRIDGE_MRP_START_TEST = 6,
+	IFLA_BRIDGE_MRP_INFO = 7,
+	IFLA_BRIDGE_MRP_IN_ROLE = 8,
+	IFLA_BRIDGE_MRP_IN_STATE = 9,
+	IFLA_BRIDGE_MRP_START_IN_TEST = 10,
+	__IFLA_BRIDGE_MRP_MAX = 11,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_INSTANCE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_INSTANCE_RING_ID = 1,
+	IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX = 2,
+	IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX = 3,
+	IFLA_BRIDGE_MRP_INSTANCE_PRIO = 4,
+	__IFLA_BRIDGE_MRP_INSTANCE_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_PORT_STATE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_PORT_STATE_STATE = 1,
+	__IFLA_BRIDGE_MRP_PORT_STATE_MAX = 2,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_PORT_ROLE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_PORT_ROLE_ROLE = 1,
+	__IFLA_BRIDGE_MRP_PORT_ROLE_MAX = 2,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_RING_STATE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_RING_STATE_RING_ID = 1,
+	IFLA_BRIDGE_MRP_RING_STATE_STATE = 2,
+	__IFLA_BRIDGE_MRP_RING_STATE_MAX = 3,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_RING_ROLE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_RING_ROLE_RING_ID = 1,
+	IFLA_BRIDGE_MRP_RING_ROLE_ROLE = 2,
+	__IFLA_BRIDGE_MRP_RING_ROLE_MAX = 3,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_START_TEST_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_START_TEST_RING_ID = 1,
+	IFLA_BRIDGE_MRP_START_TEST_INTERVAL = 2,
+	IFLA_BRIDGE_MRP_START_TEST_MAX_MISS = 3,
+	IFLA_BRIDGE_MRP_START_TEST_PERIOD = 4,
+	IFLA_BRIDGE_MRP_START_TEST_MONITOR = 5,
+	__IFLA_BRIDGE_MRP_START_TEST_MAX = 6,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_INFO_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_INFO_RING_ID = 1,
+	IFLA_BRIDGE_MRP_INFO_P_IFINDEX = 2,
+	IFLA_BRIDGE_MRP_INFO_S_IFINDEX = 3,
+	IFLA_BRIDGE_MRP_INFO_PRIO = 4,
+	IFLA_BRIDGE_MRP_INFO_RING_STATE = 5,
+	IFLA_BRIDGE_MRP_INFO_RING_ROLE = 6,
+	IFLA_BRIDGE_MRP_INFO_TEST_INTERVAL = 7,
+	IFLA_BRIDGE_MRP_INFO_TEST_MAX_MISS = 8,
+	IFLA_BRIDGE_MRP_INFO_TEST_MONITOR = 9,
+	IFLA_BRIDGE_MRP_INFO_I_IFINDEX = 10,
+	IFLA_BRIDGE_MRP_INFO_IN_STATE = 11,
+	IFLA_BRIDGE_MRP_INFO_IN_ROLE = 12,
+	IFLA_BRIDGE_MRP_INFO_IN_TEST_INTERVAL = 13,
+	IFLA_BRIDGE_MRP_INFO_IN_TEST_MAX_MISS = 14,
+	__IFLA_BRIDGE_MRP_INFO_MAX = 15,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_IN_STATE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_IN_STATE_IN_ID = 1,
+	IFLA_BRIDGE_MRP_IN_STATE_STATE = 2,
+	__IFLA_BRIDGE_MRP_IN_STATE_MAX = 3,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_IN_ROLE_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_IN_ROLE_RING_ID = 1,
+	IFLA_BRIDGE_MRP_IN_ROLE_IN_ID = 2,
+	IFLA_BRIDGE_MRP_IN_ROLE_ROLE = 3,
+	IFLA_BRIDGE_MRP_IN_ROLE_I_IFINDEX = 4,
+	__IFLA_BRIDGE_MRP_IN_ROLE_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_MRP_START_IN_TEST_UNSPEC = 0,
+	IFLA_BRIDGE_MRP_START_IN_TEST_IN_ID = 1,
+	IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL = 2,
+	IFLA_BRIDGE_MRP_START_IN_TEST_MAX_MISS = 3,
+	IFLA_BRIDGE_MRP_START_IN_TEST_PERIOD = 4,
+	__IFLA_BRIDGE_MRP_START_IN_TEST_MAX = 5,
+};
+
+struct br_mrp_instance {
+	__u32 ring_id;
+	__u32 p_ifindex;
+	__u32 s_ifindex;
+	__u16 prio;
+};
+
+struct br_mrp_ring_state {
+	__u32 ring_id;
+	__u32 ring_state;
+};
+
+struct br_mrp_ring_role {
+	__u32 ring_id;
+	__u32 ring_role;
+};
+
+struct br_mrp_start_test {
+	__u32 ring_id;
+	__u32 interval;
+	__u32 max_miss;
+	__u32 period;
+	__u32 monitor;
+};
+
+struct br_mrp_in_state {
+	__u32 in_state;
+	__u16 in_id;
+};
+
+struct br_mrp_in_role {
+	__u32 ring_id;
+	__u32 in_role;
+	__u32 i_ifindex;
+	__u16 in_id;
+};
+
+struct br_mrp_start_in_test {
+	__u32 interval;
+	__u32 max_miss;
+	__u32 period;
+	__u16 in_id;
+};
+
+enum br_mrp_tlv_header_type {
+	BR_MRP_TLV_HEADER_END = 0,
+	BR_MRP_TLV_HEADER_COMMON = 1,
+	BR_MRP_TLV_HEADER_RING_TEST = 2,
+	BR_MRP_TLV_HEADER_RING_TOPO = 3,
+	BR_MRP_TLV_HEADER_RING_LINK_DOWN = 4,
+	BR_MRP_TLV_HEADER_RING_LINK_UP = 5,
+	BR_MRP_TLV_HEADER_IN_TEST = 6,
+	BR_MRP_TLV_HEADER_IN_TOPO = 7,
+	BR_MRP_TLV_HEADER_IN_LINK_DOWN = 8,
+	BR_MRP_TLV_HEADER_IN_LINK_UP = 9,
+	BR_MRP_TLV_HEADER_IN_LINK_STATUS = 10,
+	BR_MRP_TLV_HEADER_OPTION = 127,
+};
+
+enum br_mrp_sub_tlv_header_type {
+	BR_MRP_SUB_TLV_HEADER_TEST_MGR_NACK = 1,
+	BR_MRP_SUB_TLV_HEADER_TEST_PROPAGATE = 2,
+	BR_MRP_SUB_TLV_HEADER_TEST_AUTO_MGR = 3,
+};
+
+struct br_mrp_tlv_hdr {
+	__u8 type;
+	__u8 length;
+};
+
+struct br_mrp_common_hdr {
+	__be16 seq_id;
+	__u8 domain[16];
+};
+
+struct br_mrp_ring_test_hdr {
+	__be16 prio;
+	__u8 sa[6];
+	__be16 port_role;
+	__be16 state;
+	__be16 transitions;
+	__be32 timestamp;
+} __attribute__((packed));
+
+struct br_mrp_in_test_hdr {
+	__be16 id;
+	__u8 sa[6];
+	__be16 port_role;
+	__be16 state;
+	__be16 transitions;
+	__be32 timestamp;
+} __attribute__((packed));
+
+struct br_mrp_oui_hdr {
+	__u8 oui[3];
+};
+
+struct br_mrp_sub_option1_hdr {
+	__u8 type;
+	__u8 data[2];
+};
+
+struct br_cfm_common_hdr {
+	__u8 mdlevel_version;
+	__u8 opcode;
+	__u8 flags;
+	__u8 tlv_offset;
+};
+
+enum br_cfm_opcodes {
+	BR_CFM_OPCODE_CCM = 1,
+};
+
+enum br_cfm_domain {
+	BR_CFM_PORT = 0,
+	BR_CFM_VLAN = 1,
+};
+
+enum br_cfm_mep_direction {
+	BR_CFM_MEP_DIRECTION_DOWN = 0,
+	BR_CFM_MEP_DIRECTION_UP = 1,
+};
+
+enum br_cfm_ccm_interval {
+	BR_CFM_CCM_INTERVAL_NONE = 0,
+	BR_CFM_CCM_INTERVAL_3_3_MS = 1,
+	BR_CFM_CCM_INTERVAL_10_MS = 2,
+	BR_CFM_CCM_INTERVAL_100_MS = 3,
+	BR_CFM_CCM_INTERVAL_1_SEC = 4,
+	BR_CFM_CCM_INTERVAL_10_SEC = 5,
+	BR_CFM_CCM_INTERVAL_1_MIN = 6,
+	BR_CFM_CCM_INTERVAL_10_MIN = 7,
+};
+
+struct br_cfm_mep_create {
+	enum br_cfm_domain domain;
+	enum br_cfm_mep_direction direction;
+	u32 ifindex;
+};
+
+struct br_cfm_mep_config {
+	u32 mdlevel;
+	u32 mepid;
+	struct mac_addr unicast_mac;
+};
+
+struct br_cfm_maid {
+	u8 data[48];
+};
+
+struct br_cfm_cc_config {
+	struct br_cfm_maid exp_maid;
+	enum br_cfm_ccm_interval exp_interval;
+	bool enable;
+};
+
+struct br_cfm_cc_ccm_tx_info {
+	struct mac_addr dmac;
+	u32 period;
+	bool seq_no_update;
+	bool if_tlv;
+	u8 if_tlv_value;
+	bool port_tlv;
+	u8 port_tlv_value;
+};
+
+struct br_cfm_mep_status {
+	bool opcode_unexp_seen;
+	bool version_unexp_seen;
+	bool rx_level_low_seen;
+};
+
+struct br_cfm_cc_peer_status {
+	u8 port_tlv_value;
+	u8 if_tlv_value;
+	u8 ccm_defect: 1;
+	u8 rdi: 1;
+	u8 seen: 1;
+	u8 tlv_seen: 1;
+	u8 seq_unexp_seen: 1;
+};
+
+struct br_cfm_mep {
+	struct hlist_node head;
+	u32 instance;
+	struct br_cfm_mep_create create;
+	struct br_cfm_mep_config config;
+	struct br_cfm_cc_config cc_config;
+	struct br_cfm_cc_ccm_tx_info cc_ccm_tx_info;
+	struct hlist_head peer_mep_list;
+	struct net_bridge_port *b_port;
+	long unsigned int ccm_tx_end;
+	struct delayed_work ccm_tx_dwork;
+	u32 ccm_tx_snumber;
+	u32 ccm_rx_snumber;
+	struct br_cfm_mep_status status;
+	bool rdi;
+	struct callback_head rcu;
+};
+
+struct br_cfm_peer_mep {
+	struct hlist_node head;
+	struct br_cfm_mep *mep;
+	struct delayed_work ccm_rx_dwork;
+	u32 mepid;
+	struct br_cfm_cc_peer_status cc_status;
+	u32 ccm_rx_count_miss;
+	struct callback_head rcu;
+};
+
+enum {
+	IFLA_BRIDGE_CFM_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_MEP_CREATE = 1,
+	IFLA_BRIDGE_CFM_MEP_DELETE = 2,
+	IFLA_BRIDGE_CFM_MEP_CONFIG = 3,
+	IFLA_BRIDGE_CFM_CC_CONFIG = 4,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_ADD = 5,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_REMOVE = 6,
+	IFLA_BRIDGE_CFM_CC_RDI = 7,
+	IFLA_BRIDGE_CFM_CC_CCM_TX = 8,
+	IFLA_BRIDGE_CFM_MEP_CREATE_INFO = 9,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_INFO = 10,
+	IFLA_BRIDGE_CFM_CC_CONFIG_INFO = 11,
+	IFLA_BRIDGE_CFM_CC_RDI_INFO = 12,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_INFO = 13,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_INFO = 14,
+	IFLA_BRIDGE_CFM_MEP_STATUS_INFO = 15,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INFO = 16,
+	__IFLA_BRIDGE_CFM_MAX = 17,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_CREATE_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_MEP_CREATE_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_MEP_CREATE_DOMAIN = 2,
+	IFLA_BRIDGE_CFM_MEP_CREATE_DIRECTION = 3,
+	IFLA_BRIDGE_CFM_MEP_CREATE_IFINDEX = 4,
+	__IFLA_BRIDGE_CFM_MEP_CREATE_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_DELETE_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_MEP_DELETE_INSTANCE = 1,
+	__IFLA_BRIDGE_CFM_MEP_DELETE_MAX = 2,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_CONFIG_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_UNICAST_MAC = 2,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_MDLEVEL = 3,
+	IFLA_BRIDGE_CFM_MEP_CONFIG_MEPID = 4,
+	__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_CC_CONFIG_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_CC_CONFIG_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_CC_CONFIG_ENABLE = 2,
+	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_INTERVAL = 3,
+	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_MAID = 4,
+	__IFLA_BRIDGE_CFM_CC_CONFIG_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_CC_PEER_MEP_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_CC_PEER_MEPID = 2,
+	__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX = 3,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_CC_RDI_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_CC_RDI_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_CC_RDI_RDI = 2,
+	__IFLA_BRIDGE_CFM_CC_RDI_MAX = 3,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_CC_CCM_TX_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_DMAC = 2,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_SEQ_NO_UPDATE = 3,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PERIOD = 4,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV = 5,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV_VALUE = 6,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV = 7,
+	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV_VALUE = 8,
+	__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX = 9,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_MEP_STATUS_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_MEP_STATUS_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_MEP_STATUS_OPCODE_UNEXP_SEEN = 2,
+	IFLA_BRIDGE_CFM_MEP_STATUS_VERSION_UNEXP_SEEN = 3,
+	IFLA_BRIDGE_CFM_MEP_STATUS_RX_LEVEL_LOW_SEEN = 4,
+	__IFLA_BRIDGE_CFM_MEP_STATUS_MAX = 5,
+};
+
+enum {
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_UNSPEC = 0,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INSTANCE = 1,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PEER_MEPID = 2,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_CCM_DEFECT = 3,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_RDI = 4,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PORT_TLV_VALUE = 5,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_IF_TLV_VALUE = 6,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEEN = 7,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_TLV_SEEN = 8,
+	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEQ_UNEXP_SEEN = 9,
+	__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX = 10,
+};
+
+enum rpc_msg_type {
+	RPC_CALL = 0,
+	RPC_REPLY = 1,
+};
+
+enum rpc_reply_stat {
+	RPC_MSG_ACCEPTED = 0,
+	RPC_MSG_DENIED = 1,
+};
+
+enum rpc_reject_stat {
+	RPC_MISMATCH = 0,
+	RPC_AUTH_ERROR = 1,
+};
+
+struct rpc_sysfs_xprt {
+	struct kobject kobject;
+	struct rpc_xprt *xprt;
+	struct rpc_xprt_switch *xprt_switch;
+};
+
+enum {
+	SUNRPC_PIPEFS_NFS_PRIO = 0,
+	SUNRPC_PIPEFS_RPC_PRIO = 1,
+};
+
+struct rpc_sysfs_xprt_switch {
+	struct kobject kobject;
+	struct net *net;
+	struct rpc_xprt_switch *xprt_switch;
+	struct rpc_xprt *xprt;
+};
+
+struct rpc_sysfs_client {
+	struct kobject kobject;
+	struct net *net;
+	struct rpc_clnt *clnt;
+	struct rpc_xprt_switch *xprt_switch;
+};
+
+struct sunrpc_net {
+	struct proc_dir_entry *proc_net_rpc;
+	struct cache_detail *ip_map_cache;
+	struct cache_detail *unix_gid_cache;
+	struct cache_detail *rsc_cache;
+	struct cache_detail *rsi_cache;
+	struct super_block *pipefs_sb;
+	struct rpc_pipe *gssd_dummy;
+	struct mutex pipefs_sb_lock;
+	struct list_head all_clients;
+	spinlock_t rpc_client_lock;
+	struct rpc_clnt *rpcb_local_clnt;
+	struct rpc_clnt *rpcb_local_clnt4;
+	spinlock_t rpcb_clnt_lock;
+	unsigned int rpcb_users;
+	unsigned int rpcb_is_af_local: 1;
+	struct mutex gssp_lock;
+	struct rpc_clnt *gssp_clnt;
+	int use_gss_proxy;
+	int pipe_version;
+	atomic_t pipe_users;
+	struct proc_dir_entry *use_gssp_proc;
+};
+
+struct rpc_cb_add_xprt_calldata {
+	struct rpc_xprt_switch *xps;
+	struct rpc_xprt *xprt;
+};
+
+struct connect_timeout_data {
+	long unsigned int connect_timeout;
+	long unsigned int reconnect_timeout;
+};
+
+typedef __be32 rpc_fraghdr;
+
+struct xdr_skb_reader {
+	struct sk_buff *skb;
+	unsigned int offset;
+	size_t count;
+	__wsum csum;
+};
+
+typedef size_t (*xdr_skb_read_actor)(struct xdr_skb_reader *, void *, size_t);
+
+enum xprt_xid_rb_cmp {
+	XID_RB_EQUAL = 0,
+	XID_RB_LEFT = 1,
+	XID_RB_RIGHT = 2,
+};
+
+struct rpc_cred_cache {
+	struct hlist_head *hashtable;
+	unsigned int hashbits;
+	spinlock_t lock;
+};
+
+struct svc_sock {
+	struct svc_xprt sk_xprt;
+	struct socket *sk_sock;
+	struct sock *sk_sk;
+	void (*sk_ostate)(struct sock *);
+	void (*sk_odata)(struct sock *);
+	void (*sk_owspace)(struct sock *);
+	__be32 sk_marker;
+	u32 sk_tcplen;
+	u32 sk_datalen;
+	atomic_t sk_sendqlen;
+	struct page *sk_pages[259];
+};
+
+struct sock_xprt {
+	struct rpc_xprt xprt;
+	struct socket *sock;
+	struct sock *inet;
+	struct file *file;
+	struct {
+		struct {
+			__be32 fraghdr;
+			__be32 xid;
+			__be32 calldir;
+		};
+		u32 offset;
+		u32 len;
+		long unsigned int copied;
+	} recv;
+	struct {
+		u32 offset;
+	} xmit;
+	long unsigned int sock_state;
+	struct delayed_work connect_worker;
+	struct work_struct error_worker;
+	struct work_struct recv_worker;
+	struct mutex recv_mutex;
+	struct __kernel_sockaddr_storage srcaddr;
+	short unsigned int srcport;
+	int xprt_err;
+	size_t rcvsize;
+	size_t sndsize;
+	struct rpc_timeout tcp_timeout;
+	void (*old_data_ready)(struct sock *);
+	void (*old_state_change)(struct sock *);
+	void (*old_write_space)(struct sock *);
+	void (*old_error_report)(struct sock *);
+};
+
+struct rpc_buffer {
+	size_t len;
+	char data[0];
+};
+
+struct trace_event_raw_rpc_xdr_buf_class {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int msg_len;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_clnt_class {
+	struct trace_entry ent;
+	unsigned int client_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_clnt_new {
+	struct trace_entry ent;
+	unsigned int client_id;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	u32 __data_loc_program;
+	u32 __data_loc_server;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_clnt_new_err {
+	struct trace_entry ent;
+	int error;
+	u32 __data_loc_program;
+	u32 __data_loc_server;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_clnt_clone_err {
+	struct trace_entry ent;
+	unsigned int client_id;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_task_status {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_request {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	bool async;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_task_running {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	const void *action;
+	long unsigned int runstate;
+	int status;
+	short unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_task_queued {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	long unsigned int timeout;
+	long unsigned int runstate;
+	int status;
+	short unsigned int flags;
+	u32 __data_loc_q_name;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_failure {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_reply_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 __data_loc_progname;
+	u32 version;
+	u32 __data_loc_procname;
+	u32 __data_loc_servername;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_buf_alloc {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	size_t callsize;
+	size_t recvsize;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_call_rpcerror {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int tk_status;
+	int rpc_status;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_stats_latency {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int version;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
+	long unsigned int backlog;
+	long unsigned int rtt;
+	long unsigned int execute;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xdr_overflow {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	size_t requested;
+	const void *end;
+	const void *p;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int len;
+	u32 __data_loc_progname;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xdr_alignment {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int version;
+	size_t offset;
+	unsigned int copied;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int len;
+	u32 __data_loc_progname;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_socket_event {
+	struct trace_entry ent;
+	unsigned int socket_state;
+	unsigned int sock_state;
+	long long unsigned int ino;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_xs_socket_event_done {
+	struct trace_entry ent;
+	int error;
+	unsigned int socket_state;
+	unsigned int sock_state;
+	long long unsigned int ino;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_socket_nospace {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int total;
+	unsigned int remaining;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xprt_lifetime_class {
+	struct trace_entry ent;
+	long unsigned int state;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_rpc_xprt_event {
+	struct trace_entry ent;
+	u32 xid;
+	int status;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_transmit {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seqno;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_retransmit {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	int ntrans;
+	int version;
+	long unsigned int timeout;
+	u32 __data_loc_progname;
+	u32 __data_loc_procname;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_ping {
+	struct trace_entry ent;
+	int status;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_writelock_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int snd_task_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_cong_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int snd_task_id;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	bool wait;
+	char __data[0];
+};
+
+struct trace_event_raw_xprt_reserve {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_data_ready {
+	struct trace_entry ent;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_stream_read_data {
+	struct trace_entry ent;
+	ssize_t err;
+	size_t total;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	char __data[0];
+};
+
+struct trace_event_raw_xs_stream_read_request {
+	struct trace_entry ent;
+	u32 __data_loc_addr;
+	u32 __data_loc_port;
+	u32 xid;
+	long unsigned int copied;
+	unsigned int reclen;
+	unsigned int offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_getport {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	unsigned int program;
+	unsigned int version;
+	int protocol;
+	unsigned int bind_version;
+	u32 __data_loc_servername;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_setport {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	int status;
+	short unsigned int port;
+	char __data[0];
+};
+
+struct trace_event_raw_pmap_register {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	int protocol;
+	unsigned int port;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_register {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	u32 __data_loc_addr;
+	u32 __data_loc_netid;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcb_unregister {
+	struct trace_entry ent;
+	unsigned int program;
+	unsigned int version;
+	u32 __data_loc_netid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xdr_msg_class {
+	struct trace_entry ent;
+	u32 xid;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_len;
+	unsigned int msg_len;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xdr_buf_class {
+	struct trace_entry ent;
+	u32 xid;
+	const void *head_base;
+	size_t head_len;
+	const void *tail_base;
+	size_t tail_len;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int msg_len;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_authenticate {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int svc_status;
+	long unsigned int auth_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_process {
+	struct trace_entry ent;
+	u32 xid;
+	u32 vers;
+	u32 proc;
+	u32 __data_loc_service;
+	u32 __data_loc_procedure;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_rqst_event {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_rqst_status {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	int status;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_stats_latency {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	unsigned int netns_ino;
+	u32 xid;
+	long unsigned int execute;
+	u32 __data_loc_procedure;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_create_err {
+	struct trace_entry ent;
+	long int error;
+	u32 __data_loc_program;
+	u32 __data_loc_protocol;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_enqueue {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_dequeue {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	long unsigned int wakeup;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_event {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_xprt_accept {
+	struct trace_entry ent;
+	u32 __data_loc_server;
+	u32 __data_loc_client;
+	long unsigned int flags;
+	unsigned int netns_ino;
+	u32 __data_loc_protocol;
+	u32 __data_loc_service;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_wake_up {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_alloc_arg_err {
+	struct trace_entry ent;
+	unsigned int requested;
+	unsigned int allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_deferred_event {
+	struct trace_entry ent;
+	const void *dr;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_new_socket {
+	struct trace_entry ent;
+	long unsigned int type;
+	long unsigned int family;
+	bool listener;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_marker {
+	struct trace_entry ent;
+	unsigned int length;
+	bool last;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_class {
+	struct trace_entry ent;
+	ssize_t result;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_tcp_recv_short {
+	struct trace_entry ent;
+	u32 expected;
+	u32 received;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_tcp_state {
+	struct trace_entry ent;
+	long unsigned int socket_state;
+	long unsigned int sock_state;
+	long unsigned int flags;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_svcsock_accept_class {
+	struct trace_entry ent;
+	long int status;
+	u32 __data_loc_service;
+	unsigned int netns_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_cache_event {
+	struct trace_entry ent;
+	const struct cache_head *h;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_register_class {
+	struct trace_entry ent;
+	u32 version;
+	long unsigned int family;
+	short unsigned int protocol;
+	short unsigned int port;
+	int error;
+	u32 __data_loc_program;
+	char __data[0];
+};
+
+struct trace_event_raw_svc_unregister {
+	struct trace_entry ent;
+	u32 version;
+	int error;
+	u32 __data_loc_program;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpc_xdr_buf_class {};
+
+struct trace_event_data_offsets_rpc_clnt_class {};
+
+struct trace_event_data_offsets_rpc_clnt_new {
+	u32 addr;
+	u32 port;
+	u32 program;
+	u32 server;
+};
+
+struct trace_event_data_offsets_rpc_clnt_new_err {
+	u32 program;
+	u32 server;
+};
+
+struct trace_event_data_offsets_rpc_clnt_clone_err {};
+
+struct trace_event_data_offsets_rpc_task_status {};
+
+struct trace_event_data_offsets_rpc_request {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_rpc_task_running {};
+
+struct trace_event_data_offsets_rpc_task_queued {
+	u32 q_name;
+};
+
+struct trace_event_data_offsets_rpc_failure {};
+
+struct trace_event_data_offsets_rpc_reply_event {
+	u32 progname;
+	u32 procname;
+	u32 servername;
+};
+
+struct trace_event_data_offsets_rpc_buf_alloc {};
+
+struct trace_event_data_offsets_rpc_call_rpcerror {};
+
+struct trace_event_data_offsets_rpc_stats_latency {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_rpc_xdr_overflow {
+	u32 progname;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_rpc_xdr_alignment {
+	u32 progname;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_xs_socket_event {};
+
+struct trace_event_data_offsets_xs_socket_event_done {};
+
+struct trace_event_data_offsets_rpc_socket_nospace {};
+
+struct trace_event_data_offsets_rpc_xprt_lifetime_class {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_rpc_xprt_event {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xprt_transmit {};
+
+struct trace_event_data_offsets_xprt_retransmit {
+	u32 progname;
+	u32 procname;
+};
+
+struct trace_event_data_offsets_xprt_ping {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xprt_writelock_event {};
+
+struct trace_event_data_offsets_xprt_cong_event {};
+
+struct trace_event_data_offsets_xprt_reserve {};
+
+struct trace_event_data_offsets_xs_data_ready {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xs_stream_read_data {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_xs_stream_read_request {
+	u32 addr;
+	u32 port;
+};
+
+struct trace_event_data_offsets_rpcb_getport {
+	u32 servername;
+};
+
+struct trace_event_data_offsets_rpcb_setport {};
+
+struct trace_event_data_offsets_pmap_register {};
+
+struct trace_event_data_offsets_rpcb_register {
+	u32 addr;
+	u32 netid;
+};
+
+struct trace_event_data_offsets_rpcb_unregister {
+	u32 netid;
+};
+
+struct trace_event_data_offsets_svc_xdr_msg_class {};
+
+struct trace_event_data_offsets_svc_xdr_buf_class {};
+
+struct trace_event_data_offsets_svc_authenticate {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_process {
+	u32 service;
+	u32 procedure;
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svc_rqst_event {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_rqst_status {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_stats_latency {
+	u32 server;
+	u32 client;
+	u32 procedure;
+};
+
+struct trace_event_data_offsets_svc_xprt_create_err {
+	u32 program;
+	u32 protocol;
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svc_xprt_enqueue {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_dequeue {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_event {
+	u32 server;
+	u32 client;
+};
+
+struct trace_event_data_offsets_svc_xprt_accept {
+	u32 server;
+	u32 client;
+	u32 protocol;
+	u32 service;
+};
+
+struct trace_event_data_offsets_svc_wake_up {};
+
+struct trace_event_data_offsets_svc_alloc_arg_err {};
+
+struct trace_event_data_offsets_svc_deferred_event {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_new_socket {};
+
+struct trace_event_data_offsets_svcsock_marker {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_class {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_tcp_recv_short {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_tcp_state {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_svcsock_accept_class {
+	u32 service;
+};
+
+struct trace_event_data_offsets_cache_event {
+	u32 name;
+};
+
+struct trace_event_data_offsets_register_class {
+	u32 program;
+};
+
+struct trace_event_data_offsets_svc_unregister {
+	u32 program;
+};
+
+typedef void (*btf_trace_rpc_xdr_sendto)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_xdr_recvfrom)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_xdr_reply_pages)(void *, const struct rpc_task *, const struct xdr_buf *);
+
+typedef void (*btf_trace_rpc_clnt_free)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_killall)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_shutdown)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_release)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_replace_xprt)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_replace_xprt_err)(void *, const struct rpc_clnt *);
+
+typedef void (*btf_trace_rpc_clnt_new)(void *, const struct rpc_clnt *, const struct rpc_xprt *, const char *, const char *);
+
+typedef void (*btf_trace_rpc_clnt_new_err)(void *, const char *, const char *, int);
+
+typedef void (*btf_trace_rpc_clnt_clone_err)(void *, const struct rpc_clnt *, int);
+
+typedef void (*btf_trace_rpc_call_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_connect_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_timeout_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_retry_refresh_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_refresh_status)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_request)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_task_begin)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_run_action)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sync_sleep)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sync_wake)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_complete)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_timeout)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_signalled)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_end)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_call_done)(void *, const struct rpc_task *, const void *);
+
+typedef void (*btf_trace_rpc_task_sleep)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
+
+typedef void (*btf_trace_rpc_task_wakeup)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
+
+typedef void (*btf_trace_rpc_bad_callhdr)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_bad_verifier)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__prog_unavail)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__prog_mismatch)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__proc_unavail)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__garbage_args)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__unparsable)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__mismatch)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__stale_creds)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__bad_creds)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc__auth_tooweak)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_prog_unavail_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_timeout_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_bind_version_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_unreachable_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcb_unrecognized_err)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpc_buf_alloc)(void *, const struct rpc_task *, int);
+
+typedef void (*btf_trace_rpc_call_rpcerror)(void *, const struct rpc_task *, int, int);
+
+typedef void (*btf_trace_rpc_stats_latency)(void *, const struct rpc_task *, ktime_t, ktime_t, ktime_t);
+
+typedef void (*btf_trace_rpc_xdr_overflow)(void *, const struct xdr_stream *, size_t);
+
+typedef void (*btf_trace_rpc_xdr_alignment)(void *, const struct xdr_stream *, size_t, unsigned int);
+
+typedef void (*btf_trace_rpc_socket_state_change)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_connect)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_error)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_reset_connection)(void *, struct rpc_xprt *, struct socket *, int);
+
+typedef void (*btf_trace_rpc_socket_close)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_shutdown)(void *, struct rpc_xprt *, struct socket *);
+
+typedef void (*btf_trace_rpc_socket_nospace)(void *, const struct rpc_rqst *, const struct sock_xprt *);
+
+typedef void (*btf_trace_xprt_create)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_connect)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_auto)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_done)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_disconnect_force)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_destroy)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xprt_timer)(void *, const struct rpc_xprt *, __be32, int);
+
+typedef void (*btf_trace_xprt_lookup_rqst)(void *, const struct rpc_xprt *, __be32, int);
+
+typedef void (*btf_trace_xprt_transmit)(void *, const struct rpc_rqst *, int);
+
+typedef void (*btf_trace_xprt_retransmit)(void *, const struct rpc_rqst *);
+
+typedef void (*btf_trace_xprt_ping)(void *, const struct rpc_xprt *, int);
+
+typedef void (*btf_trace_xprt_reserve_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_release_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_reserve_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_release_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_get_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_put_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
+
+typedef void (*btf_trace_xprt_reserve)(void *, const struct rpc_rqst *);
+
+typedef void (*btf_trace_xs_data_ready)(void *, const struct rpc_xprt *);
+
+typedef void (*btf_trace_xs_stream_read_data)(void *, struct rpc_xprt *, ssize_t, size_t);
+
+typedef void (*btf_trace_xs_stream_read_request)(void *, struct sock_xprt *);
+
+typedef void (*btf_trace_rpcb_getport)(void *, const struct rpc_clnt *, const struct rpc_task *, unsigned int);
+
+typedef void (*btf_trace_rpcb_setport)(void *, const struct rpc_task *, int, short unsigned int);
+
+typedef void (*btf_trace_pmap_register)(void *, u32, u32, int, short unsigned int);
+
+typedef void (*btf_trace_rpcb_register)(void *, u32, u32, const char *, const char *);
+
+typedef void (*btf_trace_rpcb_unregister)(void *, u32, u32, const char *);
+
+typedef void (*btf_trace_svc_xdr_recvfrom)(void *, const struct xdr_buf *);
+
+typedef void (*btf_trace_svc_xdr_sendto)(void *, __be32, const struct xdr_buf *);
+
+typedef void (*btf_trace_svc_authenticate)(void *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_svc_process)(void *, const struct svc_rqst *, const char *);
+
+typedef void (*btf_trace_svc_defer)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_drop)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_send)(void *, const struct svc_rqst *, int);
+
+typedef void (*btf_trace_svc_stats_latency)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_create_err)(void *, const char *, const char *, struct sockaddr *, size_t, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_enqueue)(void *, const struct svc_xprt *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_dequeue)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_svc_xprt_no_write_space)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_close)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_detach)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_free)(void *, const struct svc_xprt *);
+
+typedef void (*btf_trace_svc_xprt_accept)(void *, const struct svc_xprt *, const char *);
+
+typedef void (*btf_trace_svc_wake_up)(void *, int);
+
+typedef void (*btf_trace_svc_alloc_arg_err)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_svc_defer_drop)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svc_defer_queue)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svc_defer_recv)(void *, const struct svc_deferred_req *);
+
+typedef void (*btf_trace_svcsock_new_socket)(void *, const struct socket *);
+
+typedef void (*btf_trace_svcsock_marker)(void *, const struct svc_xprt *, __be32);
+
+typedef void (*btf_trace_svcsock_udp_send)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_udp_recv)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_udp_recv_err)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_send)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_eagain)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_err)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_data_ready)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_write_space)(void *, const struct svc_xprt *, ssize_t);
+
+typedef void (*btf_trace_svcsock_tcp_recv_short)(void *, const struct svc_xprt *, u32, u32);
+
+typedef void (*btf_trace_svcsock_tcp_state)(void *, const struct svc_xprt *, const struct socket *);
+
+typedef void (*btf_trace_svcsock_accept_err)(void *, const struct svc_xprt *, const char *, long int);
+
+typedef void (*btf_trace_svcsock_getpeername_err)(void *, const struct svc_xprt *, const char *, long int);
+
+typedef void (*btf_trace_cache_entry_expired)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_upcall)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_update)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_make_negative)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_cache_entry_no_listener)(void *, const struct cache_detail *, const struct cache_head *);
+
+typedef void (*btf_trace_svc_register)(void *, const char *, const u32, const int, const short unsigned int, const short unsigned int, int);
+
+typedef void (*btf_trace_svc_noregister)(void *, const char *, const u32, const int, const short unsigned int, const short unsigned int, int);
+
+typedef void (*btf_trace_svc_unregister)(void *, const char *, const u32, int);
+
+enum {
+	SVC_POOL_AUTO = 4294967295,
+	SVC_POOL_GLOBAL = 0,
+	SVC_POOL_PERCPU = 1,
+	SVC_POOL_PERNODE = 2,
+};
+
+struct svc_pool_map {
+	int count;
+	int mode;
+	unsigned int npools;
+	unsigned int *pool_to;
+	unsigned int *to_pool;
+};
+
+struct unix_domain {
+	struct auth_domain h;
+};
+
+struct ip_map {
+	struct cache_head h;
+	char m_class[8];
+	struct in6_addr m_addr;
+	struct unix_domain *m_client;
+	struct callback_head m_rcu;
+};
+
+struct unix_gid {
+	struct cache_head h;
+	kuid_t uid;
+	struct group_info *gi;
+	struct callback_head rcu;
+};
+
+enum {
+	RPCBPROC_NULL = 0,
+	RPCBPROC_SET = 1,
+	RPCBPROC_UNSET = 2,
+	RPCBPROC_GETPORT = 3,
+	RPCBPROC_GETADDR = 3,
+	RPCBPROC_DUMP = 4,
+	RPCBPROC_CALLIT = 5,
+	RPCBPROC_BCAST = 5,
+	RPCBPROC_GETTIME = 6,
+	RPCBPROC_UADDR2TADDR = 7,
+	RPCBPROC_TADDR2UADDR = 8,
+	RPCBPROC_GETVERSADDR = 9,
+	RPCBPROC_INDIRECT = 10,
+	RPCBPROC_GETADDRLIST = 11,
+	RPCBPROC_GETSTAT = 12,
+};
+
+struct rpcbind_args {
+	struct rpc_xprt *r_xprt;
+	u32 r_prog;
+	u32 r_vers;
+	u32 r_prot;
+	short unsigned int r_port;
+	const char *r_netid;
+	const char *r_addr;
+	const char *r_owner;
+	int r_status;
+};
+
+struct rpcb_info {
+	u32 rpc_vers;
+	const struct rpc_procinfo *rpc_proc;
+};
+
+struct thread_deferred_req {
+	struct cache_deferred_req handle;
+	struct completion completion;
+};
+
+struct cache_queue {
+	struct list_head list;
+	int reader;
+};
+
+struct cache_request {
+	struct cache_queue q;
+	struct cache_head *item;
+	char *buf;
+	int len;
+	int readers;
+};
+
+struct cache_reader {
+	struct cache_queue q;
+	int offset;
+};
+
+struct rpc_filelist {
+	const char *name;
+	const struct file_operations *i_fop;
+	umode_t mode;
+};
+
+enum {
+	RPCAUTH_info = 0,
+	RPCAUTH_EOF = 1,
+};
+
+enum {
+	RPCAUTH_lockd = 0,
+	RPCAUTH_mount = 1,
+	RPCAUTH_nfs = 2,
+	RPCAUTH_portmap = 3,
+	RPCAUTH_statd = 4,
+	RPCAUTH_nfsd4_cb = 5,
+	RPCAUTH_cache = 6,
+	RPCAUTH_nfsd = 7,
+	RPCAUTH_gssd = 8,
+	RPCAUTH_RootEOF = 9,
+};
+
+struct xprt_addr {
+	const char *addr;
+	struct callback_head rcu;
+};
+
+typedef struct rpc_xprt * (*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *, const struct rpc_xprt *);
+
+typedef unsigned int OM_uint32;
+
+enum rpc_gss_proc {
+	RPC_GSS_PROC_DATA = 0,
+	RPC_GSS_PROC_INIT = 1,
+	RPC_GSS_PROC_CONTINUE_INIT = 2,
+	RPC_GSS_PROC_DESTROY = 3,
+};
+
+struct gss_cl_ctx {
+	refcount_t count;
+	enum rpc_gss_proc gc_proc;
+	u32 gc_seq;
+	u32 gc_seq_xmit;
+	spinlock_t gc_seq_lock;
+	struct gss_ctx *gc_gss_ctx;
+	struct xdr_netobj gc_wire_ctx;
+	struct xdr_netobj gc_acceptor;
+	u32 gc_win;
+	long unsigned int gc_expiry;
+	struct callback_head gc_rcu;
+};
+
+struct gss_upcall_msg;
+
+struct gss_cred {
+	struct rpc_cred gc_base;
+	enum rpc_gss_svc gc_service;
+	struct gss_cl_ctx *gc_ctx;
+	struct gss_upcall_msg *gc_upcall;
+	const char *gc_principal;
+	long unsigned int gc_upcall_timestamp;
+};
+
+struct gss_auth;
+
+struct gss_upcall_msg {
+	refcount_t count;
+	kuid_t uid;
+	const char *service_name;
+	struct rpc_pipe_msg msg;
+	struct list_head list;
+	struct gss_auth *auth;
+	struct rpc_pipe *pipe;
+	struct rpc_wait_queue rpc_waitqueue;
+	wait_queue_head_t waitqueue;
+	struct gss_cl_ctx *ctx;
+	char databuf[256];
+};
+
+struct gss_pipe {
+	struct rpc_pipe_dir_object pdo;
+	struct rpc_pipe *pipe;
+	struct rpc_clnt *clnt;
+	const char *name;
+	struct kref kref;
+};
+
+struct gss_auth {
+	struct kref kref;
+	struct hlist_node hash;
+	struct rpc_auth rpc_auth;
+	struct gss_api_mech *mech;
+	enum rpc_gss_svc service;
+	struct rpc_clnt *client;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct gss_pipe *gss_pipe[2];
+	const char *target_name;
+};
+
+struct gss_alloc_pdo {
+	struct rpc_clnt *clnt;
+	const char *name;
+	const struct rpc_pipe_ops *upcall_ops;
+};
+
+struct rpc_gss_wire_cred {
+	u32 gc_v;
+	u32 gc_proc;
+	u32 gc_seq;
+	u32 gc_svc;
+	struct xdr_netobj gc_ctx;
+};
+
+struct gssp_in_token {
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+};
+
+struct gssp_upcall_data {
+	struct xdr_netobj in_handle;
+	struct gssp_in_token in_token;
+	struct xdr_netobj out_handle;
+	struct xdr_netobj out_token;
+	struct rpcsec_gss_oid mech_oid;
+	struct svc_cred creds;
+	int found_creds;
+	int major_status;
+	int minor_status;
+};
+
+struct rsc;
+
+struct gss_svc_data {
+	struct rpc_gss_wire_cred clcred;
+	__be32 *verf_start;
+	struct rsc *rsci;
+	u8 gsd_scratch[36];
+};
+
+struct gss_svc_seq_data {
+	u32 sd_max;
+	long unsigned int sd_win[2];
+	spinlock_t sd_lock;
+};
+
+struct rsc {
+	struct cache_head h;
+	struct xdr_netobj handle;
+	struct svc_cred cred;
+	struct gss_svc_seq_data seqdata;
+	struct gss_ctx *mechctx;
+	struct callback_head callback_head;
+};
+
+struct rsi {
+	struct cache_head h;
+	struct xdr_netobj in_handle;
+	struct xdr_netobj in_token;
+	struct xdr_netobj out_handle;
+	struct xdr_netobj out_token;
+	int major_status;
+	int minor_status;
+	struct callback_head callback_head;
+};
+
+struct gss_domain {
+	struct auth_domain h;
+	u32 pseudoflavor;
+};
+
+typedef struct xdr_netobj gssx_buffer;
+
+typedef struct xdr_netobj utf8string;
+
+typedef struct xdr_netobj gssx_OID;
+
+struct gssx_option {
+	gssx_buffer option;
+	gssx_buffer value;
+};
+
+struct gssx_option_array {
+	u32 count;
+	struct gssx_option *data;
+};
+
+struct gssx_status {
+	u64 major_status;
+	gssx_OID mech;
+	u64 minor_status;
+	utf8string major_status_string;
+	utf8string minor_status_string;
+	gssx_buffer server_ctx;
+	struct gssx_option_array options;
+};
+
+struct gssx_call_ctx {
+	utf8string locale;
+	gssx_buffer server_ctx;
+	struct gssx_option_array options;
+};
+
+struct gssx_name_attr {
+	gssx_buffer attr;
+	gssx_buffer value;
+	struct gssx_option_array extensions;
+};
+
+struct gssx_name_attr_array {
+	u32 count;
+	struct gssx_name_attr *data;
+};
+
+struct gssx_name {
+	gssx_buffer display_name;
+};
+
+typedef struct gssx_name gssx_name;
+
+struct gssx_cred_element {
+	gssx_name MN;
+	gssx_OID mech;
+	u32 cred_usage;
+	u64 initiator_time_rec;
+	u64 acceptor_time_rec;
+	struct gssx_option_array options;
+};
+
+struct gssx_cred_element_array {
+	u32 count;
+	struct gssx_cred_element *data;
+};
+
+struct gssx_cred {
+	gssx_name desired_name;
+	struct gssx_cred_element_array elements;
+	gssx_buffer cred_handle_reference;
+	u32 needs_release;
+};
+
+struct gssx_ctx {
+	gssx_buffer exported_context_token;
+	gssx_buffer state;
+	u32 need_release;
+	gssx_OID mech;
+	gssx_name src_name;
+	gssx_name targ_name;
+	u64 lifetime;
+	u64 ctx_flags;
+	u32 locally_initiated;
+	u32 open;
+	struct gssx_option_array options;
+};
+
+struct gssx_cb {
+	u64 initiator_addrtype;
+	gssx_buffer initiator_address;
+	u64 acceptor_addrtype;
+	gssx_buffer acceptor_address;
+	gssx_buffer application_data;
+};
+
+struct gssx_arg_accept_sec_context {
+	struct gssx_call_ctx call_ctx;
+	struct gssx_ctx *context_handle;
+	struct gssx_cred *cred_handle;
+	struct gssp_in_token input_token;
+	struct gssx_cb *input_cb;
+	u32 ret_deleg_cred;
+	struct gssx_option_array options;
+	struct page **pages;
+	unsigned int npages;
+};
+
+struct gssx_res_accept_sec_context {
+	struct gssx_status status;
+	struct gssx_ctx *context_handle;
+	gssx_buffer *output_token;
+	struct gssx_option_array options;
+};
+
+struct trace_event_raw_rpcgss_gssapi_event {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 maj_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_import_ctx {
+	struct trace_entry ent;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_ctx_class {
+	struct trace_entry ent;
+	const void *cred;
+	long unsigned int service;
+	u32 __data_loc_principal;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_gssapi_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 maj_stat;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_unwrap_failed {
+	struct trace_entry ent;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_bad {
+	struct trace_entry ent;
+	u32 expected;
+	u32 received;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_accept_upcall {
+	struct trace_entry ent;
+	u32 minor_status;
+	long unsigned int major_status;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_authenticate {
+	struct trace_entry ent;
+	u32 seqno;
+	u32 xid;
+	u32 __data_loc_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_unwrap_failed {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_bad_seqno {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 expected;
+	u32 received;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_seqno {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seqno;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_need_reencode {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	u32 seq_xmit;
+	u32 seqno;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_update_slack {
+	struct trace_entry ent;
+	unsigned int task_id;
+	unsigned int client_id;
+	u32 xid;
+	const void *auth;
+	unsigned int rslack;
+	unsigned int ralign;
+	unsigned int verfsize;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_class {
+	struct trace_entry ent;
+	u32 xid;
+	u32 seqno;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_svc_seqno_low {
+	struct trace_entry ent;
+	u32 xid;
+	u32 seqno;
+	u32 min;
+	u32 max;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_upcall_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_upcall_result {
+	struct trace_entry ent;
+	u32 uid;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_context {
+	struct trace_entry ent;
+	long unsigned int expiry;
+	long unsigned int now;
+	unsigned int timeout;
+	u32 window_size;
+	int len;
+	u32 __data_loc_acceptor;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_createauth {
+	struct trace_entry ent;
+	unsigned int flavor;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_rpcgss_oid_to_mech {
+	struct trace_entry ent;
+	u32 __data_loc_oid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpcgss_gssapi_event {};
+
+struct trace_event_data_offsets_rpcgss_import_ctx {};
+
+struct trace_event_data_offsets_rpcgss_ctx_class {
+	u32 principal;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_gssapi_class {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_unwrap_failed {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_bad {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_accept_upcall {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_svc_authenticate {
+	u32 addr;
+};
+
+struct trace_event_data_offsets_rpcgss_unwrap_failed {};
+
+struct trace_event_data_offsets_rpcgss_bad_seqno {};
+
+struct trace_event_data_offsets_rpcgss_seqno {};
+
+struct trace_event_data_offsets_rpcgss_need_reencode {};
+
+struct trace_event_data_offsets_rpcgss_update_slack {};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_class {};
+
+struct trace_event_data_offsets_rpcgss_svc_seqno_low {};
+
+struct trace_event_data_offsets_rpcgss_upcall_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_rpcgss_upcall_result {};
+
+struct trace_event_data_offsets_rpcgss_context {
+	u32 acceptor;
+};
+
+struct trace_event_data_offsets_rpcgss_createauth {};
+
+struct trace_event_data_offsets_rpcgss_oid_to_mech {
+	u32 oid;
+};
+
+typedef void (*btf_trace_rpcgss_import_ctx)(void *, int);
+
+typedef void (*btf_trace_rpcgss_get_mic)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_verify_mic)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_wrap)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_unwrap)(void *, const struct rpc_task *, u32);
+
+typedef void (*btf_trace_rpcgss_ctx_init)(void *, const struct gss_cred *);
+
+typedef void (*btf_trace_rpcgss_ctx_destroy)(void *, const struct gss_cred *);
+
+typedef void (*btf_trace_rpcgss_svc_unwrap)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_mic)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_unwrap_failed)(void *, const struct svc_rqst *);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_bad)(void *, const struct svc_rqst *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_svc_accept_upcall)(void *, const struct svc_rqst *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_svc_authenticate)(void *, const struct svc_rqst *, const struct rpc_gss_wire_cred *);
+
+typedef void (*btf_trace_rpcgss_unwrap_failed)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcgss_bad_seqno)(void *, const struct rpc_task *, u32, u32);
+
+typedef void (*btf_trace_rpcgss_seqno)(void *, const struct rpc_task *);
+
+typedef void (*btf_trace_rpcgss_need_reencode)(void *, const struct rpc_task *, u32, bool);
+
+typedef void (*btf_trace_rpcgss_update_slack)(void *, const struct rpc_task *, const struct rpc_auth *);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_large)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_seen)(void *, const struct svc_rqst *, u32);
+
+typedef void (*btf_trace_rpcgss_svc_seqno_low)(void *, const struct svc_rqst *, u32, u32, u32);
+
+typedef void (*btf_trace_rpcgss_upcall_msg)(void *, const char *);
+
+typedef void (*btf_trace_rpcgss_upcall_result)(void *, u32, int);
+
+typedef void (*btf_trace_rpcgss_context)(void *, u32, long unsigned int, long unsigned int, unsigned int, unsigned int, const u8 *);
+
+typedef void (*btf_trace_rpcgss_createauth)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rpcgss_oid_to_mech)(void *, const char *);
+
+enum {
+	GSSX_NULL = 0,
+	GSSX_INDICATE_MECHS = 1,
+	GSSX_GET_CALL_CONTEXT = 2,
+	GSSX_IMPORT_AND_CANON_NAME = 3,
+	GSSX_EXPORT_CRED = 4,
+	GSSX_IMPORT_CRED = 5,
+	GSSX_ACQUIRE_CRED = 6,
+	GSSX_STORE_CRED = 7,
+	GSSX_INIT_SEC_CONTEXT = 8,
+	GSSX_ACCEPT_SEC_CONTEXT = 9,
+	GSSX_RELEASE_HANDLE = 10,
+	GSSX_GET_MIC = 11,
+	GSSX_VERIFY = 12,
+	GSSX_WRAP = 13,
+	GSSX_UNWRAP = 14,
+	GSSX_WRAP_SIZE_LIMIT = 15,
+};
+
+struct krb5_ctx;
+
+struct gss_krb5_enctype {
+	const u32 etype;
+	const u32 ctype;
+	const char *name;
+	const char *encrypt_name;
+	const char *cksum_name;
+	const u16 signalg;
+	const u16 sealalg;
+	const u32 blocksize;
+	const u32 conflen;
+	const u32 cksumlength;
+	const u32 keyed_cksum;
+	const u32 keybytes;
+	const u32 keylength;
+	u32 (*encrypt)(struct crypto_sync_skcipher *, void *, void *, void *, int);
+	u32 (*decrypt)(struct crypto_sync_skcipher *, void *, void *, void *, int);
+	u32 (*mk_key)(const struct gss_krb5_enctype *, struct xdr_netobj *, struct xdr_netobj *);
+	u32 (*encrypt_v2)(struct krb5_ctx *, u32, struct xdr_buf *, struct page **);
+	u32 (*decrypt_v2)(struct krb5_ctx *, u32, u32, struct xdr_buf *, u32 *, u32 *);
+};
+
+struct krb5_ctx {
+	int initiate;
+	u32 enctype;
+	u32 flags;
+	const struct gss_krb5_enctype *gk5e;
+	struct crypto_sync_skcipher *enc;
+	struct crypto_sync_skcipher *seq;
+	struct crypto_sync_skcipher *acceptor_enc;
+	struct crypto_sync_skcipher *initiator_enc;
+	struct crypto_sync_skcipher *acceptor_enc_aux;
+	struct crypto_sync_skcipher *initiator_enc_aux;
+	u8 Ksess[32];
+	u8 cksum[32];
+	atomic_t seq_send;
+	atomic64_t seq_send64;
+	time64_t endtime;
+	struct xdr_netobj mech_used;
+	u8 initiator_sign[32];
+	u8 acceptor_sign[32];
+	u8 initiator_seal[32];
+	u8 acceptor_seal[32];
+	u8 initiator_integ[32];
+	u8 acceptor_integ[32];
+};
+
+enum seal_alg {
+	SEAL_ALG_NONE = 65535,
+	SEAL_ALG_DES = 0,
+	SEAL_ALG_1 = 1,
+	SEAL_ALG_DES3KD = 2,
+};
+
+enum sgn_alg {
+	SGN_ALG_DES_MAC_MD5 = 0,
+	SGN_ALG_MD2_5 = 1,
+	SGN_ALG_DES_MAC = 2,
+	SGN_ALG_3 = 3,
+	SGN_ALG_HMAC_SHA1_DES3_KD = 4,
+};
+
+struct encryptor_desc {
+	u8 iv[16];
+	struct skcipher_request *req;
+	int pos;
+	struct xdr_buf *outbuf;
+	struct page **pages;
+	struct scatterlist infrags[4];
+	struct scatterlist outfrags[4];
+	int fragno;
+	int fraglen;
+};
+
+struct decryptor_desc {
+	u8 iv[16];
+	struct skcipher_request *req;
+	struct scatterlist frags[4];
+	int fragno;
+	int fraglen;
+};
+
+struct vlan_group {
+	unsigned int nr_vlan_devs;
+	struct hlist_node hlist;
+	struct net_device **vlan_devices_arrays[16];
+};
+
+struct vlan_info {
+	struct net_device *real_dev;
+	struct vlan_group grp;
+	struct list_head vid_list;
+	unsigned int nr_vids;
+	struct callback_head rcu;
+};
+
+enum vlan_ioctl_cmds {
+	ADD_VLAN_CMD = 0,
+	DEL_VLAN_CMD = 1,
+	SET_VLAN_INGRESS_PRIORITY_CMD = 2,
+	SET_VLAN_EGRESS_PRIORITY_CMD = 3,
+	GET_VLAN_INGRESS_PRIORITY_CMD = 4,
+	GET_VLAN_EGRESS_PRIORITY_CMD = 5,
+	SET_VLAN_NAME_TYPE_CMD = 6,
+	SET_VLAN_FLAG_CMD = 7,
+	GET_VLAN_REALDEV_NAME_CMD = 8,
+	GET_VLAN_VID_CMD = 9,
+};
+
+enum vlan_name_types {
+	VLAN_NAME_TYPE_PLUS_VID = 0,
+	VLAN_NAME_TYPE_RAW_PLUS_VID = 1,
+	VLAN_NAME_TYPE_PLUS_VID_NO_PAD = 2,
+	VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD = 3,
+	VLAN_NAME_TYPE_HIGHEST = 4,
+};
+
+struct vlan_ioctl_args {
+	int cmd;
+	char device1[24];
+	union {
+		char device2[24];
+		int VID;
+		unsigned int skb_priority;
+		unsigned int name_type;
+		unsigned int bind_type;
+		unsigned int flag;
+	} u;
+	short int vlan_qos;
+};
+
+enum vlan_protos {
+	VLAN_PROTO_8021Q = 0,
+	VLAN_PROTO_8021AD = 1,
+	VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_net {
+	struct proc_dir_entry *proc_vlan_dir;
+	struct proc_dir_entry *proc_vlan_conf;
+	short unsigned int name_type;
+};
+
+struct vlan_vid_info {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+	int refcount;
+};
+
+enum {
+	IFLA_VLAN_UNSPEC = 0,
+	IFLA_VLAN_ID = 1,
+	IFLA_VLAN_FLAGS = 2,
+	IFLA_VLAN_EGRESS_QOS = 3,
+	IFLA_VLAN_INGRESS_QOS = 4,
+	IFLA_VLAN_PROTOCOL = 5,
+	__IFLA_VLAN_MAX = 6,
+};
+
+struct ifla_vlan_flags {
+	__u32 flags;
+	__u32 mask;
+};
+
+enum {
+	IFLA_VLAN_QOS_UNSPEC = 0,
+	IFLA_VLAN_QOS_MAPPING = 1,
+	__IFLA_VLAN_QOS_MAX = 2,
+};
+
+struct ifla_vlan_qos_mapping {
+	__u32 from;
+	__u32 to;
+};
+
+enum mvrp_attributes {
+	MVRP_ATTR_INVALID = 0,
+	MVRP_ATTR_VID = 1,
+	__MVRP_ATTR_MAX = 2,
+};
+
+enum gvrp_attributes {
+	GVRP_ATTR_INVALID = 0,
+	GVRP_ATTR_VID = 1,
+	__GVRP_ATTR_MAX = 2,
+};
+
+enum nl80211_iftype {
+	NL80211_IFTYPE_UNSPECIFIED = 0,
+	NL80211_IFTYPE_ADHOC = 1,
+	NL80211_IFTYPE_STATION = 2,
+	NL80211_IFTYPE_AP = 3,
+	NL80211_IFTYPE_AP_VLAN = 4,
+	NL80211_IFTYPE_WDS = 5,
+	NL80211_IFTYPE_MONITOR = 6,
+	NL80211_IFTYPE_MESH_POINT = 7,
+	NL80211_IFTYPE_P2P_CLIENT = 8,
+	NL80211_IFTYPE_P2P_GO = 9,
+	NL80211_IFTYPE_P2P_DEVICE = 10,
+	NL80211_IFTYPE_OCB = 11,
+	NL80211_IFTYPE_NAN = 12,
+	NUM_NL80211_IFTYPES = 13,
+	NL80211_IFTYPE_MAX = 12,
+};
+
+struct cfg80211_conn;
+
+struct cfg80211_cached_keys;
+
+enum ieee80211_bss_type {
+	IEEE80211_BSS_TYPE_ESS = 0,
+	IEEE80211_BSS_TYPE_PBSS = 1,
+	IEEE80211_BSS_TYPE_IBSS = 2,
+	IEEE80211_BSS_TYPE_MBSS = 3,
+	IEEE80211_BSS_TYPE_ANY = 4,
+};
+
+enum nl80211_chan_width {
+	NL80211_CHAN_WIDTH_20_NOHT = 0,
+	NL80211_CHAN_WIDTH_20 = 1,
+	NL80211_CHAN_WIDTH_40 = 2,
+	NL80211_CHAN_WIDTH_80 = 3,
+	NL80211_CHAN_WIDTH_80P80 = 4,
+	NL80211_CHAN_WIDTH_160 = 5,
+	NL80211_CHAN_WIDTH_5 = 6,
+	NL80211_CHAN_WIDTH_10 = 7,
+	NL80211_CHAN_WIDTH_1 = 8,
+	NL80211_CHAN_WIDTH_2 = 9,
+	NL80211_CHAN_WIDTH_4 = 10,
+	NL80211_CHAN_WIDTH_8 = 11,
+	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
+};
+
+enum ieee80211_edmg_bw_config {
+	IEEE80211_EDMG_BW_CONFIG_4 = 4,
+	IEEE80211_EDMG_BW_CONFIG_5 = 5,
+	IEEE80211_EDMG_BW_CONFIG_6 = 6,
+	IEEE80211_EDMG_BW_CONFIG_7 = 7,
+	IEEE80211_EDMG_BW_CONFIG_8 = 8,
+	IEEE80211_EDMG_BW_CONFIG_9 = 9,
+	IEEE80211_EDMG_BW_CONFIG_10 = 10,
+	IEEE80211_EDMG_BW_CONFIG_11 = 11,
+	IEEE80211_EDMG_BW_CONFIG_12 = 12,
+	IEEE80211_EDMG_BW_CONFIG_13 = 13,
+	IEEE80211_EDMG_BW_CONFIG_14 = 14,
+	IEEE80211_EDMG_BW_CONFIG_15 = 15,
+};
+
+struct ieee80211_edmg {
+	u8 channels;
+	enum ieee80211_edmg_bw_config bw_config;
+};
+
+struct ieee80211_channel;
+
+struct cfg80211_chan_def {
+	struct ieee80211_channel *chan;
+	enum nl80211_chan_width width;
+	u32 center_freq1;
+	u32 center_freq2;
+	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
+};
+
+struct ieee80211_mcs_info {
+	u8 rx_mask[10];
+	__le16 rx_highest;
+	u8 tx_params;
+	u8 reserved[3];
+};
+
+struct ieee80211_ht_cap {
+	__le16 cap_info;
+	u8 ampdu_params_info;
+	struct ieee80211_mcs_info mcs;
+	__le16 extended_ht_cap_info;
+	__le32 tx_BF_cap_info;
+	u8 antenna_selection_info;
+} __attribute__((packed));
+
+struct key_params;
+
+struct cfg80211_ibss_params {
+	const u8 *ssid;
+	const u8 *bssid;
+	struct cfg80211_chan_def chandef;
+	const u8 *ie;
+	u8 ssid_len;
+	u8 ie_len;
+	u16 beacon_interval;
+	u32 basic_rates;
+	bool channel_fixed;
+	bool privacy;
+	bool control_port;
+	bool control_port_over_nl80211;
+	bool userspace_handles_dfs;
+	int: 24;
+	int mcast_rate[6];
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	int: 32;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	int: 32;
+} __attribute__((packed));
+
+enum nl80211_auth_type {
+	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
+	NL80211_AUTHTYPE_SHARED_KEY = 1,
+	NL80211_AUTHTYPE_FT = 2,
+	NL80211_AUTHTYPE_NETWORK_EAP = 3,
+	NL80211_AUTHTYPE_SAE = 4,
+	NL80211_AUTHTYPE_FILS_SK = 5,
+	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
+	NL80211_AUTHTYPE_FILS_PK = 7,
+	__NL80211_AUTHTYPE_NUM = 8,
+	NL80211_AUTHTYPE_MAX = 7,
+	NL80211_AUTHTYPE_AUTOMATIC = 8,
+};
+
+enum nl80211_mfp {
+	NL80211_MFP_NO = 0,
+	NL80211_MFP_REQUIRED = 1,
+	NL80211_MFP_OPTIONAL = 2,
+};
+
+enum nl80211_sae_pwe_mechanism {
+	NL80211_SAE_PWE_UNSPECIFIED = 0,
+	NL80211_SAE_PWE_HUNT_AND_PECK = 1,
+	NL80211_SAE_PWE_HASH_TO_ELEMENT = 2,
+	NL80211_SAE_PWE_BOTH = 3,
+};
+
+struct cfg80211_crypto_settings {
+	u32 wpa_versions;
+	u32 cipher_group;
+	int n_ciphers_pairwise;
+	u32 ciphers_pairwise[5];
+	int n_akm_suites;
+	u32 akm_suites[10];
+	bool control_port;
+	__be16 control_port_ethertype;
+	bool control_port_no_encrypt;
+	bool control_port_over_nl80211;
+	bool control_port_no_preauth;
+	struct key_params *wep_keys;
+	int wep_tx_key;
+	const u8 *psk;
+	const u8 *sae_pwd;
+	u8 sae_pwd_len;
+	enum nl80211_sae_pwe_mechanism sae_pwe;
+};
+
+struct ieee80211_vht_mcs_info {
+	__le16 rx_mcs_map;
+	__le16 rx_highest;
+	__le16 tx_mcs_map;
+	__le16 tx_highest;
+};
+
+struct ieee80211_vht_cap {
+	__le32 vht_cap_info;
+	struct ieee80211_vht_mcs_info supp_mcs;
+};
+
+enum nl80211_bss_select_attr {
+	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
+	NL80211_BSS_SELECT_ATTR_RSSI = 1,
+	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
+	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
+	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
+	NL80211_BSS_SELECT_ATTR_MAX = 3,
+};
+
+enum nl80211_band {
+	NL80211_BAND_2GHZ = 0,
+	NL80211_BAND_5GHZ = 1,
+	NL80211_BAND_60GHZ = 2,
+	NL80211_BAND_6GHZ = 3,
+	NL80211_BAND_S1GHZ = 4,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
+};
+
+struct cfg80211_bss_select_adjust {
+	enum nl80211_band band;
+	s8 delta;
+};
+
+struct cfg80211_bss_selection {
+	enum nl80211_bss_select_attr behaviour;
+	union {
+		enum nl80211_band band_pref;
+		struct cfg80211_bss_select_adjust adjust;
+	} param;
+};
+
+struct cfg80211_connect_params {
+	struct ieee80211_channel *channel;
+	struct ieee80211_channel *channel_hint;
+	const u8 *bssid;
+	const u8 *bssid_hint;
+	const u8 *ssid;
+	size_t ssid_len;
+	enum nl80211_auth_type auth_type;
+	int: 32;
+	const u8 *ie;
+	size_t ie_len;
+	bool privacy;
+	int: 24;
+	enum nl80211_mfp mfp;
+	struct cfg80211_crypto_settings crypto;
+	const u8 *key;
+	u8 key_len;
+	u8 key_idx;
+	short: 16;
+	u32 flags;
+	int bg_scan_period;
+	struct ieee80211_ht_cap ht_capa;
+	struct ieee80211_ht_cap ht_capa_mask;
+	struct ieee80211_vht_cap vht_capa;
+	struct ieee80211_vht_cap vht_capa_mask;
+	bool pbss;
+	int: 24;
+	struct cfg80211_bss_selection bss_select;
+	const u8 *prev_bssid;
+	const u8 *fils_erp_username;
+	size_t fils_erp_username_len;
+	const u8 *fils_erp_realm;
+	size_t fils_erp_realm_len;
+	u16 fils_erp_next_seq_num;
+	long: 48;
+	const u8 *fils_erp_rrk;
+	size_t fils_erp_rrk_len;
+	bool want_1x;
+	int: 24;
+	struct ieee80211_edmg edmg;
+	int: 32;
+} __attribute__((packed));
+
+struct cfg80211_cqm_config;
+
+struct cfg80211_internal_bss;
+
+struct wiphy;
+
+struct wireless_dev {
+	struct wiphy *wiphy;
+	enum nl80211_iftype iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	u32 identifier;
+	struct list_head mgmt_registrations;
+	u8 mgmt_registrations_need_update: 1;
+	struct mutex mtx;
+	bool use_4addr;
+	bool is_running;
+	bool registered;
+	bool registering;
+	u8 address[6];
+	struct cfg80211_conn *conn;
+	struct cfg80211_cached_keys *connect_keys;
+	enum ieee80211_bss_type conn_bss_type;
+	u32 conn_owner_nlportid;
+	struct work_struct disconnect_wk;
+	u8 disconnect_bssid[6];
+	struct list_head event_list;
+	spinlock_t event_lock;
+	u8 connected: 1;
+	bool ps;
+	int ps_timeout;
+	u32 ap_unexpected_nlportid;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	bool cac_started;
+	long unsigned int cac_start_time;
+	unsigned int cac_time_ms;
+	struct {
+		struct cfg80211_ibss_params ibss;
+		struct cfg80211_connect_params connect;
+		struct cfg80211_cached_keys *keys;
+		const u8 *ie;
+		size_t ie_len;
+		u8 bssid[6];
+		u8 prev_bssid[6];
+		u8 ssid[32];
+		s8 default_key;
+		s8 default_mgmt_key;
+		bool prev_bssid_valid;
+	} wext;
+	struct cfg80211_cqm_config *cqm_config;
+	struct list_head pmsr_list;
+	spinlock_t pmsr_lock;
+	struct work_struct pmsr_free_wk;
+	long unsigned int unprot_beacon_reported;
+	union {
+		struct {
+			u8 connected_addr[6];
+			u8 ssid[32];
+			u8 ssid_len;
+			char: 8;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[32];
+			u8 id_len;
+			u8 id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+	struct {
+		u8 addr[6];
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[15];
+	u16 valid_links;
+};
+
+struct iw_encode_ext {
+	__u32 ext_flags;
+	__u8 tx_seq[8];
+	__u8 rx_seq[8];
+	struct sockaddr addr;
+	__u16 alg;
+	__u16 key_len;
+	__u8 key[0];
+};
+
+struct iwreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union iwreq_data u;
+};
+
+struct iw_event {
+	__u16 len;
+	__u16 cmd;
+	union iwreq_data u;
+};
+
+struct compat_iw_point {
+	compat_caddr_t pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct __compat_iw_event {
+	__u16 len;
+	__u16 cmd;
+	union {
+		compat_caddr_t pointer;
+		struct {
+			struct {			} __empty_ptr_bytes;
+			__u8 ptr_bytes[0];
+		};
+	};
+};
+
+enum nl80211_reg_initiator {
+	NL80211_REGDOM_SET_BY_CORE = 0,
+	NL80211_REGDOM_SET_BY_USER = 1,
+	NL80211_REGDOM_SET_BY_DRIVER = 2,
+	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
+};
+
+enum nl80211_dfs_regions {
+	NL80211_DFS_UNSET = 0,
+	NL80211_DFS_FCC = 1,
+	NL80211_DFS_ETSI = 2,
+	NL80211_DFS_JP = 3,
+};
+
+enum nl80211_user_reg_hint_type {
+	NL80211_USER_REG_HINT_USER = 0,
+	NL80211_USER_REG_HINT_CELL_BASE = 1,
+	NL80211_USER_REG_HINT_INDOOR = 2,
+};
+
+enum nl80211_mntr_flags {
+	__NL80211_MNTR_FLAG_INVALID = 0,
+	NL80211_MNTR_FLAG_FCSFAIL = 1,
+	NL80211_MNTR_FLAG_PLCPFAIL = 2,
+	NL80211_MNTR_FLAG_CONTROL = 3,
+	NL80211_MNTR_FLAG_OTHER_BSS = 4,
+	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
+	NL80211_MNTR_FLAG_ACTIVE = 6,
+	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
+	NL80211_MNTR_FLAG_MAX = 6,
+};
+
+enum nl80211_key_mode {
+	NL80211_KEY_RX_TX = 0,
+	NL80211_KEY_NO_TX = 1,
+	NL80211_KEY_SET_TX = 2,
+};
+
+enum nl80211_ext_feature_index {
+	NL80211_EXT_FEATURE_VHT_IBSS = 0,
+	NL80211_EXT_FEATURE_RRM = 1,
+	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
+	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
+	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
+	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
+	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
+	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
+	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
+	NL80211_EXT_FEATURE_FILS_STA = 9,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
+	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
+	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
+	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
+	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
+	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
+	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
+	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
+	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
+	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
+	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
+	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
+	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
+	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
+	NL80211_EXT_FEATURE_TXQS = 28,
+	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
+	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
+	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
+	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
+	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
+	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
+	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
+	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
+	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
+	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
+	NL80211_EXT_FEATURE_AQL = 40,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION = 41,
+	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,
+	NL80211_EXT_FEATURE_PROTECTED_TWT = 43,
+	NL80211_EXT_FEATURE_DEL_IBSS_STA = 44,
+	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,
+	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,
+	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,
+	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,
+	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
+	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
+	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
+	NL80211_EXT_FEATURE_BEACON_RATE_HE = 54,
+	NL80211_EXT_FEATURE_SECURE_LTF = 55,
+	NL80211_EXT_FEATURE_SECURE_RTT = 56,
+	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 57,
+	NL80211_EXT_FEATURE_BSS_COLOR = 58,
+	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD = 59,
+	NL80211_EXT_FEATURE_RADAR_BACKGROUND = 60,
+	NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 61,
+	NUM_NL80211_EXT_FEATURES = 62,
+	MAX_NL80211_EXT_FEATURES = 61,
+};
+
+enum nl80211_dfs_state {
+	NL80211_DFS_USABLE = 0,
+	NL80211_DFS_UNAVAILABLE = 1,
+	NL80211_DFS_AVAILABLE = 2,
+};
+
+struct nl80211_vendor_cmd_info {
+	__u32 vendor_id;
+	__u32 subcmd;
+};
+
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
+struct ieee80211_he_cap_elem {
+	u8 mac_cap_info[6];
+	u8 phy_cap_info[11];
+};
+
+struct ieee80211_he_mcs_nss_supp {
+	__le16 rx_mcs_80;
+	__le16 tx_mcs_80;
+	__le16 rx_mcs_160;
+	__le16 tx_mcs_160;
+	__le16 rx_mcs_80p80;
+	__le16 tx_mcs_80p80;
+};
+
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	u8 rx_tx_mcs7_max_nss;
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
+struct ieee80211_he_6ghz_capa {
+	__le16 capa;
+};
+
+struct rfkill;
+
+enum environment_cap {
+	ENVIRON_ANY = 0,
+	ENVIRON_INDOOR = 1,
+	ENVIRON_OUTDOOR = 2,
+};
+
+struct regulatory_request {
+	struct callback_head callback_head;
+	int wiphy_idx;
+	enum nl80211_reg_initiator initiator;
+	enum nl80211_user_reg_hint_type user_reg_hint_type;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	bool intersect;
+	bool processed;
+	enum environment_cap country_ie_env;
+	struct list_head list;
+};
+
+struct ieee80211_freq_range {
+	u32 start_freq_khz;
+	u32 end_freq_khz;
+	u32 max_bandwidth_khz;
+};
+
+struct ieee80211_power_rule {
+	u32 max_antenna_gain;
+	u32 max_eirp;
+};
+
+struct ieee80211_wmm_ac {
+	u16 cw_min;
+	u16 cw_max;
+	u16 cot;
+	u8 aifsn;
+};
+
+struct ieee80211_wmm_rule {
+	struct ieee80211_wmm_ac client[4];
+	struct ieee80211_wmm_ac ap[4];
+};
+
+struct ieee80211_reg_rule {
+	struct ieee80211_freq_range freq_range;
+	struct ieee80211_power_rule power_rule;
+	struct ieee80211_wmm_rule wmm_rule;
+	u32 flags;
+	u32 dfs_cac_ms;
+	bool has_wmm;
+};
+
+struct ieee80211_regdomain {
+	struct callback_head callback_head;
+	u32 n_reg_rules;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	struct ieee80211_reg_rule reg_rules[0];
+};
+
+struct ieee80211_channel {
+	enum nl80211_band band;
+	u32 center_freq;
+	u16 freq_offset;
+	u16 hw_value;
+	u32 flags;
+	int max_antenna_gain;
+	int max_power;
+	int max_reg_power;
+	bool beacon_found;
+	u32 orig_flags;
+	int orig_mag;
+	int orig_mpwr;
+	enum nl80211_dfs_state dfs_state;
+	long unsigned int dfs_state_entered;
+	unsigned int dfs_cac_ms;
+};
+
+struct ieee80211_rate {
+	u32 flags;
+	u16 bitrate;
+	u16 hw_value;
+	u16 hw_value_short;
+};
+
+struct ieee80211_sta_ht_cap {
+	u16 cap;
+	bool ht_supported;
+	u8 ampdu_factor;
+	u8 ampdu_density;
+	struct ieee80211_mcs_info mcs;
+	char: 8;
+} __attribute__((packed));
+
+struct ieee80211_sta_vht_cap {
+	bool vht_supported;
+	u32 cap;
+	struct ieee80211_vht_mcs_info vht_mcs;
+};
+
+struct ieee80211_sta_he_cap {
+	bool has_he;
+	struct ieee80211_he_cap_elem he_cap_elem;
+	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
+	u8 ppe_thres[25];
+} __attribute__((packed));
+
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
+struct ieee80211_sband_iftype_data {
+	u16 types_mask;
+	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
+} __attribute__((packed));
+
+struct ieee80211_sta_s1g_cap {
+	bool s1g;
+	u8 cap[10];
+	u8 nss_mcs[5];
+};
+
+struct ieee80211_supported_band {
+	struct ieee80211_channel *channels;
+	struct ieee80211_rate *bitrates;
+	enum nl80211_band band;
+	int n_channels;
+	int n_bitrates;
+	struct ieee80211_sta_ht_cap ht_cap;
+	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_s1g_cap s1g_cap;
+	struct ieee80211_edmg edmg_cap;
+	u16 n_iftype_data;
+	const struct ieee80211_sband_iftype_data *iftype_data;
+};
+
+struct key_params {
+	const u8 *key;
+	const u8 *seq;
+	int key_len;
+	int seq_len;
+	u16 vlan_id;
+	u32 cipher;
+	enum nl80211_key_mode mode;
+};
+
+struct mac_address {
+	u8 addr[6];
+};
+
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
+enum cfg80211_signal_type {
+	CFG80211_SIGNAL_TYPE_NONE = 0,
+	CFG80211_SIGNAL_TYPE_MBM = 1,
+	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+};
+
+struct ieee80211_txrx_stypes;
+
+struct ieee80211_iface_combination;
+
+struct wiphy_iftype_akm_suites;
+
+struct wiphy_iftype_ext_capab;
+
+struct wiphy_coalesce_support;
+
+struct wiphy_vendor_command;
+
+struct cfg80211_pmsr_capabilities;
+
+struct wiphy {
+	struct mutex mtx;
+	u8 perm_addr[6];
+	u8 addr_mask[6];
+	struct mac_address *addresses;
+	const struct ieee80211_txrx_stypes *mgmt_stypes;
+	const struct ieee80211_iface_combination *iface_combinations;
+	int n_iface_combinations;
+	u16 software_iftypes;
+	u16 n_addresses;
+	u16 interface_modes;
+	u16 max_acl_mac_addrs;
+	u32 flags;
+	u32 regulatory_flags;
+	u32 features;
+	u8 ext_features[8];
+	u32 ap_sme_capa;
+	enum cfg80211_signal_type signal_type;
+	int bss_priv_size;
+	u8 max_scan_ssids;
+	u8 max_sched_scan_reqs;
+	u8 max_sched_scan_ssids;
+	u8 max_match_sets;
+	u16 max_scan_ie_len;
+	u16 max_sched_scan_ie_len;
+	u32 max_sched_scan_plans;
+	u32 max_sched_scan_plan_interval;
+	u32 max_sched_scan_plan_iterations;
+	int n_cipher_suites;
+	const u32 *cipher_suites;
+	int n_akm_suites;
+	const u32 *akm_suites;
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+	u8 retry_short;
+	u8 retry_long;
+	u32 frag_threshold;
+	u32 rts_threshold;
+	u8 coverage_class;
+	char fw_version[32];
+	u32 hw_version;
+	u16 max_remain_on_channel_duration;
+	u8 max_num_pmkids;
+	u32 available_antennas_tx;
+	u32 available_antennas_rx;
+	u32 probe_resp_offload;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+	unsigned int num_iftype_ext_capab;
+	const void *privid;
+	struct ieee80211_supported_band *bands[6];
+	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
+	const struct ieee80211_regdomain *regd;
+	struct device dev;
+	bool registered;
+	struct dentry *debugfsdir;
+	const struct ieee80211_ht_cap *ht_capa_mod_mask;
+	const struct ieee80211_vht_cap *vht_capa_mod_mask;
+	struct list_head wdev_list;
+	possible_net_t _net;
+	const struct iw_handler_def *wext;
+	const struct wiphy_coalesce_support *coalesce;
+	const struct wiphy_vendor_command *vendor_commands;
+	const struct nl80211_vendor_cmd_info *vendor_events;
+	int n_vendor_commands;
+	int n_vendor_events;
+	u16 max_ap_assoc_sta;
+	u8 max_num_csa_counters;
+	u32 bss_select_support;
+	u8 nan_supported_bands;
+	u32 txq_limit;
+	u32 txq_memory_limit;
+	u32 txq_quantum;
+	long unsigned int tx_queue_len;
+	u8 support_mbssid: 1;
+	u8 support_only_he_mbssid: 1;
+	const struct cfg80211_pmsr_capabilities *pmsr_capa;
+	struct {
+		u64 peer;
+		u64 vif;
+		u8 max_retry;
+	} tid_config_support;
+	u8 max_data_retry_count;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	u16 max_num_akm_suites;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	char priv[0];
+};
+
+struct ieee80211_iface_limit {
+	u16 max;
+	u16 types;
+};
+
+struct ieee80211_iface_combination {
+	const struct ieee80211_iface_limit *limits;
+	u32 num_different_channels;
+	u16 max_interfaces;
+	u8 n_limits;
+	bool beacon_int_infra_match;
+	u8 radar_detect_widths;
+	u8 radar_detect_regions;
+	u32 beacon_int_min_gcd;
+};
+
+struct ieee80211_txrx_stypes {
+	u16 tx;
+	u16 rx;
+};
+
+struct wiphy_coalesce_support {
+	int n_rules;
+	int max_delay;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+};
+
+struct wiphy_vendor_command {
+	struct nl80211_vendor_cmd_info info;
+	u32 flags;
+	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
+	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+};
+
+struct wiphy_iftype_ext_capab {
+	enum nl80211_iftype iftype;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	u16 eml_capabilities;
+	u16 mld_capa_and_ops;
+};
+
+struct cfg80211_pmsr_capabilities {
+	unsigned int max_peers;
+	u8 report_ap_tsf: 1;
+	u8 randomize_mac_addr: 1;
+	struct {
+		u32 preambles;
+		u32 bandwidths;
+		s8 max_bursts_exponent;
+		u8 max_ftms_per_burst;
+		u8 supported: 1;
+		u8 asap: 1;
+		u8 non_asap: 1;
+		u8 request_lci: 1;
+		u8 request_civicloc: 1;
+		u8 trigger_based: 1;
+		u8 non_trigger_based: 1;
+	} ftm;
+};
+
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+struct iw_ioctl_description {
+	__u8 header_type;
+	__u8 token_type;
+	__u16 token_size;
+	__u16 min_tokens;
+	__u16 max_tokens;
+	__u32 flags;
+};
+
+typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
+
+enum rfkill_type {
+	RFKILL_TYPE_ALL = 0,
+	RFKILL_TYPE_WLAN = 1,
+	RFKILL_TYPE_BLUETOOTH = 2,
+	RFKILL_TYPE_UWB = 3,
+	RFKILL_TYPE_WIMAX = 4,
+	RFKILL_TYPE_WWAN = 5,
+	RFKILL_TYPE_GPS = 6,
+	RFKILL_TYPE_FM = 7,
+	RFKILL_TYPE_NFC = 8,
+	NUM_RFKILL_TYPES = 9,
+};
+
+enum rfkill_input_master_mode {
+	RFKILL_INPUT_MASTER_UNLOCK = 0,
+	RFKILL_INPUT_MASTER_RESTORE = 1,
+	RFKILL_INPUT_MASTER_UNBLOCKALL = 2,
+	NUM_RFKILL_INPUT_MASTER_MODES = 3,
+};
+
+enum rfkill_sched_op {
+	RFKILL_GLOBAL_OP_EPO = 0,
+	RFKILL_GLOBAL_OP_RESTORE = 1,
+	RFKILL_GLOBAL_OP_UNLOCK = 2,
+	RFKILL_GLOBAL_OP_UNBLOCK = 3,
+};
+
+enum rfkill_operation {
+	RFKILL_OP_ADD = 0,
+	RFKILL_OP_DEL = 1,
+	RFKILL_OP_CHANGE = 2,
+	RFKILL_OP_CHANGE_ALL = 3,
+};
+
+enum rfkill_hard_block_reasons {
+	RFKILL_HARD_BLOCK_SIGNAL = 1,
+	RFKILL_HARD_BLOCK_NOT_OWNER = 2,
+};
+
+struct rfkill_event_ext {
+	__u32 idx;
+	__u8 type;
+	__u8 op;
+	__u8 soft;
+	__u8 hard;
+	__u8 hard_block_reasons;
+} __attribute__((packed));
+
+enum rfkill_user_states {
+	RFKILL_USER_STATE_SOFT_BLOCKED = 0,
+	RFKILL_USER_STATE_UNBLOCKED = 1,
+	RFKILL_USER_STATE_HARD_BLOCKED = 2,
+};
+
+struct rfkill;
+
+struct rfkill_ops {
+	void (*poll)(struct rfkill *, void *);
+	void (*query)(struct rfkill *, void *);
+	int (*set_block)(void *, bool);
+};
+
+struct rfkill {
+	spinlock_t lock;
+	enum rfkill_type type;
+	long unsigned int state;
+	long unsigned int hard_block_reasons;
+	u32 idx;
+	bool registered;
+	bool persistent;
+	bool polling_paused;
+	bool suspended;
+	const struct rfkill_ops *ops;
+	void *data;
+	struct led_trigger led_trigger;
+	const char *ledtrigname;
+	struct device dev;
+	struct list_head node;
+	struct delayed_work poll_work;
+	struct work_struct uevent_work;
+	struct work_struct sync_work;
+	char name[0];
+};
+
+struct rfkill_int_event {
+	struct list_head list;
+	struct rfkill_event_ext ev;
+};
+
+struct rfkill_data {
+	struct list_head list;
+	struct list_head events;
+	struct mutex mtx;
+	wait_queue_head_t read_wait;
+	bool input_handler;
+	u8 max_size;
+};
+
+struct iw_thrspy {
+	struct sockaddr addr;
+	struct iw_quality qual;
+	struct iw_quality low;
+	struct iw_quality high;
+};
+
+struct errormap {
+	char *name;
+	int val;
+	int namelen;
+	struct hlist_node list;
+};
+
+enum p9_msg_t {
+	P9_TLERROR = 6,
+	P9_RLERROR = 7,
+	P9_TSTATFS = 8,
+	P9_RSTATFS = 9,
+	P9_TLOPEN = 12,
+	P9_RLOPEN = 13,
+	P9_TLCREATE = 14,
+	P9_RLCREATE = 15,
+	P9_TSYMLINK = 16,
+	P9_RSYMLINK = 17,
+	P9_TMKNOD = 18,
+	P9_RMKNOD = 19,
+	P9_TRENAME = 20,
+	P9_RRENAME = 21,
+	P9_TREADLINK = 22,
+	P9_RREADLINK = 23,
+	P9_TGETATTR = 24,
+	P9_RGETATTR = 25,
+	P9_TSETATTR = 26,
+	P9_RSETATTR = 27,
+	P9_TXATTRWALK = 30,
+	P9_RXATTRWALK = 31,
+	P9_TXATTRCREATE = 32,
+	P9_RXATTRCREATE = 33,
+	P9_TREADDIR = 40,
+	P9_RREADDIR = 41,
+	P9_TFSYNC = 50,
+	P9_RFSYNC = 51,
+	P9_TLOCK = 52,
+	P9_RLOCK = 53,
+	P9_TGETLOCK = 54,
+	P9_RGETLOCK = 55,
+	P9_TLINK = 70,
+	P9_RLINK = 71,
+	P9_TMKDIR = 72,
+	P9_RMKDIR = 73,
+	P9_TRENAMEAT = 74,
+	P9_RRENAMEAT = 75,
+	P9_TUNLINKAT = 76,
+	P9_RUNLINKAT = 77,
+	P9_TVERSION = 100,
+	P9_RVERSION = 101,
+	P9_TAUTH = 102,
+	P9_RAUTH = 103,
+	P9_TATTACH = 104,
+	P9_RATTACH = 105,
+	P9_TERROR = 106,
+	P9_RERROR = 107,
+	P9_TFLUSH = 108,
+	P9_RFLUSH = 109,
+	P9_TWALK = 110,
+	P9_RWALK = 111,
+	P9_TOPEN = 112,
+	P9_ROPEN = 113,
+	P9_TCREATE = 114,
+	P9_RCREATE = 115,
+	P9_TREAD = 116,
+	P9_RREAD = 117,
+	P9_TWRITE = 118,
+	P9_RWRITE = 119,
+	P9_TCLUNK = 120,
+	P9_RCLUNK = 121,
+	P9_TREMOVE = 122,
+	P9_RREMOVE = 123,
+	P9_TSTAT = 124,
+	P9_RSTAT = 125,
+	P9_TWSTAT = 126,
+	P9_RWSTAT = 127,
+};
+
+enum p9_proto_versions {
+	p9_proto_legacy = 0,
+	p9_proto_2000u = 1,
+	p9_proto_2000L = 2,
+};
+
+enum p9_req_status_t {
+	REQ_STATUS_ALLOC = 0,
+	REQ_STATUS_UNSENT = 1,
+	REQ_STATUS_SENT = 2,
+	REQ_STATUS_RCVD = 3,
+	REQ_STATUS_FLSHD = 4,
+	REQ_STATUS_ERROR = 5,
+};
+
+enum p9_fid_reftype {
+	P9_FID_REF_CREATE = 0,
+	P9_FID_REF_GET = 1,
+	P9_FID_REF_PUT = 2,
+	P9_FID_REF_DESTROY = 3,
+};
+
+struct trace_event_raw_9p_client_req {
+	struct trace_entry ent;
+	void *clnt;
+	__u8 type;
+	__u32 tag;
+	char __data[0];
+};
+
+struct trace_event_raw_9p_client_res {
+	struct trace_entry ent;
+	void *clnt;
+	__u8 type;
+	__u32 tag;
+	__u32 err;
+	char __data[0];
+};
+
+struct trace_event_raw_9p_protocol_dump {
+	struct trace_entry ent;
+	void *clnt;
+	__u8 type;
+	__u16 tag;
+	unsigned char line[32];
+	char __data[0];
+};
+
+struct trace_event_raw_9p_fid_ref {
+	struct trace_entry ent;
+	int fid;
+	int refcount;
+	__u8 type;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_9p_client_req {};
+
+struct trace_event_data_offsets_9p_client_res {};
+
+struct trace_event_data_offsets_9p_protocol_dump {};
+
+struct trace_event_data_offsets_9p_fid_ref {};
+
+typedef void (*btf_trace_9p_client_req)(void *, struct p9_client *, int8_t, int);
+
+typedef void (*btf_trace_9p_client_res)(void *, struct p9_client *, int8_t, int, int);
+
+typedef void (*btf_trace_9p_protocol_dump)(void *, struct p9_client *, struct p9_fcall *);
+
+typedef void (*btf_trace_9p_fid_ref)(void *, struct p9_fid *, __u8);
+
+enum {
+	Opt_msize = 0,
+	Opt_trans = 1,
+	Opt_legacy = 2,
+	Opt_version = 3,
+	Opt_err___16 = 4,
+};
+
+struct virtio_9p_config {
+	__virtio16 tag_len;
+	__u8 tag[0];
+};
+
+struct virtio_chan {
+	bool inuse;
+	spinlock_t lock;
+	struct p9_client *client;
+	struct virtio_device *vdev;
+	struct virtqueue *vq;
+	int ring_bufs_avail;
+	wait_queue_head_t *vc_wq;
+	long unsigned int p9_max_pages;
+	struct scatterlist sg[128];
+	char *tag;
+	struct list_head chan_list;
+};
+
+struct p9_fd_opts {
+	int rfd;
+	int wfd;
+	u16 port;
+	bool privport;
+};
+
+enum {
+	Opt_port___2 = 0,
+	Opt_rfdno = 1,
+	Opt_wfdno = 2,
+	Opt_err___17 = 3,
+	Opt_privport = 4,
+};
+
+enum {
+	Rworksched = 1,
+	Rpending = 2,
+	Wworksched = 4,
+	Wpending = 8,
+};
+
+struct p9_conn;
+
+struct p9_poll_wait {
+	struct p9_conn *conn;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_addr;
+};
+
+struct p9_conn {
+	struct list_head mux_list;
+	struct p9_client *client;
+	int err;
+	spinlock_t req_lock;
+	struct list_head req_list;
+	struct list_head unsent_req_list;
+	struct p9_req_t *rreq;
+	struct p9_req_t *wreq;
+	char tmp_buf[7];
+	struct p9_fcall rc;
+	int wpos;
+	int wsize;
+	char *wbuf;
+	struct list_head poll_pending_link;
+	struct p9_poll_wait poll_wait[2];
+	poll_table pt;
+	struct work_struct rq;
+	struct work_struct wq;
+	long unsigned int wsched;
+};
+
+struct p9_trans_fd {
+	struct file *rd;
+	struct file *wr;
+	struct p9_conn conn;
+};
+
+enum dns_payload_content_type {
+	DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+
+struct dns_payload_header {
+	__u8 zero;
+	__u8 content;
+	__u8 version;
+};
+
+enum {
+	dns_key_data = 0,
+	dns_key_error = 1,
+};
+
+struct dcbmsg {
+	__u8 dcb_family;
+	__u8 cmd;
+	__u16 dcb_pad;
+};
+
+enum dcbnl_commands {
+	DCB_CMD_UNDEFINED = 0,
+	DCB_CMD_GSTATE = 1,
+	DCB_CMD_SSTATE = 2,
+	DCB_CMD_PGTX_GCFG = 3,
+	DCB_CMD_PGTX_SCFG = 4,
+	DCB_CMD_PGRX_GCFG = 5,
+	DCB_CMD_PGRX_SCFG = 6,
+	DCB_CMD_PFC_GCFG = 7,
+	DCB_CMD_PFC_SCFG = 8,
+	DCB_CMD_SET_ALL = 9,
+	DCB_CMD_GPERM_HWADDR = 10,
+	DCB_CMD_GCAP = 11,
+	DCB_CMD_GNUMTCS = 12,
+	DCB_CMD_SNUMTCS = 13,
+	DCB_CMD_PFC_GSTATE = 14,
+	DCB_CMD_PFC_SSTATE = 15,
+	DCB_CMD_BCN_GCFG = 16,
+	DCB_CMD_BCN_SCFG = 17,
+	DCB_CMD_GAPP = 18,
+	DCB_CMD_SAPP = 19,
+	DCB_CMD_IEEE_SET = 20,
+	DCB_CMD_IEEE_GET = 21,
+	DCB_CMD_GDCBX = 22,
+	DCB_CMD_SDCBX = 23,
+	DCB_CMD_GFEATCFG = 24,
+	DCB_CMD_SFEATCFG = 25,
+	DCB_CMD_CEE_GET = 26,
+	DCB_CMD_IEEE_DEL = 27,
+	__DCB_CMD_ENUM_MAX = 28,
+	DCB_CMD_MAX = 27,
+};
+
+enum dcbnl_attrs {
+	DCB_ATTR_UNDEFINED = 0,
+	DCB_ATTR_IFNAME = 1,
+	DCB_ATTR_STATE = 2,
+	DCB_ATTR_PFC_STATE = 3,
+	DCB_ATTR_PFC_CFG = 4,
+	DCB_ATTR_NUM_TC = 5,
+	DCB_ATTR_PG_CFG = 6,
+	DCB_ATTR_SET_ALL = 7,
+	DCB_ATTR_PERM_HWADDR = 8,
+	DCB_ATTR_CAP = 9,
+	DCB_ATTR_NUMTCS = 10,
+	DCB_ATTR_BCN = 11,
+	DCB_ATTR_APP = 12,
+	DCB_ATTR_IEEE = 13,
+	DCB_ATTR_DCBX = 14,
+	DCB_ATTR_FEATCFG = 15,
+	DCB_ATTR_CEE = 16,
+	__DCB_ATTR_ENUM_MAX = 17,
+	DCB_ATTR_MAX = 16,
+};
+
+enum ieee_attrs {
+	DCB_ATTR_IEEE_UNSPEC = 0,
+	DCB_ATTR_IEEE_ETS = 1,
+	DCB_ATTR_IEEE_PFC = 2,
+	DCB_ATTR_IEEE_APP_TABLE = 3,
+	DCB_ATTR_IEEE_PEER_ETS = 4,
+	DCB_ATTR_IEEE_PEER_PFC = 5,
+	DCB_ATTR_IEEE_PEER_APP = 6,
+	DCB_ATTR_IEEE_MAXRATE = 7,
+	DCB_ATTR_IEEE_QCN = 8,
+	DCB_ATTR_IEEE_QCN_STATS = 9,
+	DCB_ATTR_DCB_BUFFER = 10,
+	DCB_ATTR_DCB_APP_TRUST_TABLE = 11,
+	__DCB_ATTR_IEEE_MAX = 12,
+};
+
+enum ieee_attrs_app {
+	DCB_ATTR_IEEE_APP_UNSPEC = 0,
+	DCB_ATTR_IEEE_APP = 1,
+	DCB_ATTR_DCB_APP = 2,
+	__DCB_ATTR_IEEE_APP_MAX = 3,
+};
+
+enum cee_attrs {
+	DCB_ATTR_CEE_UNSPEC = 0,
+	DCB_ATTR_CEE_PEER_PG = 1,
+	DCB_ATTR_CEE_PEER_PFC = 2,
+	DCB_ATTR_CEE_PEER_APP_TABLE = 3,
+	DCB_ATTR_CEE_TX_PG = 4,
+	DCB_ATTR_CEE_RX_PG = 5,
+	DCB_ATTR_CEE_PFC = 6,
+	DCB_ATTR_CEE_APP_TABLE = 7,
+	DCB_ATTR_CEE_FEAT = 8,
+	__DCB_ATTR_CEE_MAX = 9,
+};
+
+enum peer_app_attr {
+	DCB_ATTR_CEE_PEER_APP_UNSPEC = 0,
+	DCB_ATTR_CEE_PEER_APP_INFO = 1,
+	DCB_ATTR_CEE_PEER_APP = 2,
+	__DCB_ATTR_CEE_PEER_APP_MAX = 3,
+};
+
+enum dcbnl_pfc_up_attrs {
+	DCB_PFC_UP_ATTR_UNDEFINED = 0,
+	DCB_PFC_UP_ATTR_0 = 1,
+	DCB_PFC_UP_ATTR_1 = 2,
+	DCB_PFC_UP_ATTR_2 = 3,
+	DCB_PFC_UP_ATTR_3 = 4,
+	DCB_PFC_UP_ATTR_4 = 5,
+	DCB_PFC_UP_ATTR_5 = 6,
+	DCB_PFC_UP_ATTR_6 = 7,
+	DCB_PFC_UP_ATTR_7 = 8,
+	DCB_PFC_UP_ATTR_ALL = 9,
+	__DCB_PFC_UP_ATTR_ENUM_MAX = 10,
+	DCB_PFC_UP_ATTR_MAX = 9,
+};
+
+enum dcbnl_pg_attrs {
+	DCB_PG_ATTR_UNDEFINED = 0,
+	DCB_PG_ATTR_TC_0 = 1,
+	DCB_PG_ATTR_TC_1 = 2,
+	DCB_PG_ATTR_TC_2 = 3,
+	DCB_PG_ATTR_TC_3 = 4,
+	DCB_PG_ATTR_TC_4 = 5,
+	DCB_PG_ATTR_TC_5 = 6,
+	DCB_PG_ATTR_TC_6 = 7,
+	DCB_PG_ATTR_TC_7 = 8,
+	DCB_PG_ATTR_TC_MAX = 9,
+	DCB_PG_ATTR_TC_ALL = 10,
+	DCB_PG_ATTR_BW_ID_0 = 11,
+	DCB_PG_ATTR_BW_ID_1 = 12,
+	DCB_PG_ATTR_BW_ID_2 = 13,
+	DCB_PG_ATTR_BW_ID_3 = 14,
+	DCB_PG_ATTR_BW_ID_4 = 15,
+	DCB_PG_ATTR_BW_ID_5 = 16,
+	DCB_PG_ATTR_BW_ID_6 = 17,
+	DCB_PG_ATTR_BW_ID_7 = 18,
+	DCB_PG_ATTR_BW_ID_MAX = 19,
+	DCB_PG_ATTR_BW_ID_ALL = 20,
+	__DCB_PG_ATTR_ENUM_MAX = 21,
+	DCB_PG_ATTR_MAX = 20,
+};
+
+enum dcbnl_tc_attrs {
+	DCB_TC_ATTR_PARAM_UNDEFINED = 0,
+	DCB_TC_ATTR_PARAM_PGID = 1,
+	DCB_TC_ATTR_PARAM_UP_MAPPING = 2,
+	DCB_TC_ATTR_PARAM_STRICT_PRIO = 3,
+	DCB_TC_ATTR_PARAM_BW_PCT = 4,
+	DCB_TC_ATTR_PARAM_ALL = 5,
+	__DCB_TC_ATTR_PARAM_ENUM_MAX = 6,
+	DCB_TC_ATTR_PARAM_MAX = 5,
+};
+
+enum dcbnl_cap_attrs {
+	DCB_CAP_ATTR_UNDEFINED = 0,
+	DCB_CAP_ATTR_ALL = 1,
+	DCB_CAP_ATTR_PG = 2,
+	DCB_CAP_ATTR_PFC = 3,
+	DCB_CAP_ATTR_UP2TC = 4,
+	DCB_CAP_ATTR_PG_TCS = 5,
+	DCB_CAP_ATTR_PFC_TCS = 6,
+	DCB_CAP_ATTR_GSP = 7,
+	DCB_CAP_ATTR_BCN = 8,
+	DCB_CAP_ATTR_DCBX = 9,
+	__DCB_CAP_ATTR_ENUM_MAX = 10,
+	DCB_CAP_ATTR_MAX = 9,
+};
+
+enum dcbnl_numtcs_attrs {
+	DCB_NUMTCS_ATTR_UNDEFINED = 0,
+	DCB_NUMTCS_ATTR_ALL = 1,
+	DCB_NUMTCS_ATTR_PG = 2,
+	DCB_NUMTCS_ATTR_PFC = 3,
+	__DCB_NUMTCS_ATTR_ENUM_MAX = 4,
+	DCB_NUMTCS_ATTR_MAX = 3,
+};
+
+enum dcbnl_bcn_attrs {
+	DCB_BCN_ATTR_UNDEFINED = 0,
+	DCB_BCN_ATTR_RP_0 = 1,
+	DCB_BCN_ATTR_RP_1 = 2,
+	DCB_BCN_ATTR_RP_2 = 3,
+	DCB_BCN_ATTR_RP_3 = 4,
+	DCB_BCN_ATTR_RP_4 = 5,
+	DCB_BCN_ATTR_RP_5 = 6,
+	DCB_BCN_ATTR_RP_6 = 7,
+	DCB_BCN_ATTR_RP_7 = 8,
+	DCB_BCN_ATTR_RP_ALL = 9,
+	DCB_BCN_ATTR_BCNA_0 = 10,
+	DCB_BCN_ATTR_BCNA_1 = 11,
+	DCB_BCN_ATTR_ALPHA = 12,
+	DCB_BCN_ATTR_BETA = 13,
+	DCB_BCN_ATTR_GD = 14,
+	DCB_BCN_ATTR_GI = 15,
+	DCB_BCN_ATTR_TMAX = 16,
+	DCB_BCN_ATTR_TD = 17,
+	DCB_BCN_ATTR_RMIN = 18,
+	DCB_BCN_ATTR_W = 19,
+	DCB_BCN_ATTR_RD = 20,
+	DCB_BCN_ATTR_RU = 21,
+	DCB_BCN_ATTR_WRTT = 22,
+	DCB_BCN_ATTR_RI = 23,
+	DCB_BCN_ATTR_C = 24,
+	DCB_BCN_ATTR_ALL = 25,
+	__DCB_BCN_ATTR_ENUM_MAX = 26,
+	DCB_BCN_ATTR_MAX = 25,
+};
+
+enum dcb_general_attr_values {
+	DCB_ATTR_VALUE_UNDEFINED = 255,
+};
+
+enum dcbnl_app_attrs {
+	DCB_APP_ATTR_UNDEFINED = 0,
+	DCB_APP_ATTR_IDTYPE = 1,
+	DCB_APP_ATTR_ID = 2,
+	DCB_APP_ATTR_PRIORITY = 3,
+	__DCB_APP_ATTR_ENUM_MAX = 4,
+	DCB_APP_ATTR_MAX = 3,
+};
+
+enum dcbnl_featcfg_attrs {
+	DCB_FEATCFG_ATTR_UNDEFINED = 0,
+	DCB_FEATCFG_ATTR_ALL = 1,
+	DCB_FEATCFG_ATTR_PG = 2,
+	DCB_FEATCFG_ATTR_PFC = 3,
+	DCB_FEATCFG_ATTR_APP = 4,
+	__DCB_FEATCFG_ATTR_ENUM_MAX = 5,
+	DCB_FEATCFG_ATTR_MAX = 4,
+};
+
+struct dcb_app_type {
+	int ifindex;
+	struct dcb_app app;
+	struct list_head list;
+	u8 dcbx;
+};
+
+struct dcb_ieee_app_prio_map {
+	u64 map[8];
+};
+
+struct dcb_ieee_app_dscp_map {
+	u8 map[64];
+};
+
+enum dcbevent_notif_type {
+	DCB_APP_EVENT = 1,
+};
+
+struct reply_func {
+	int type;
+	int (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);
+};
+
+enum ovs_packet_cmd {
+	OVS_PACKET_CMD_UNSPEC = 0,
+	OVS_PACKET_CMD_MISS = 1,
+	OVS_PACKET_CMD_ACTION = 2,
+	OVS_PACKET_CMD_EXECUTE = 3,
+};
+
+enum ovs_vport_type {
+	OVS_VPORT_TYPE_UNSPEC = 0,
+	OVS_VPORT_TYPE_NETDEV = 1,
+	OVS_VPORT_TYPE_INTERNAL = 2,
+	OVS_VPORT_TYPE_GRE = 3,
+	OVS_VPORT_TYPE_VXLAN = 4,
+	OVS_VPORT_TYPE_GENEVE = 5,
+	__OVS_VPORT_TYPE_MAX = 6,
+};
+
+struct ovs_flow_stats {
+	__u64 n_packets;
+	__u64 n_bytes;
+};
+
+enum ovs_key_attr {
+	OVS_KEY_ATTR_UNSPEC = 0,
+	OVS_KEY_ATTR_ENCAP = 1,
+	OVS_KEY_ATTR_PRIORITY = 2,
+	OVS_KEY_ATTR_IN_PORT = 3,
+	OVS_KEY_ATTR_ETHERNET = 4,
+	OVS_KEY_ATTR_VLAN = 5,
+	OVS_KEY_ATTR_ETHERTYPE = 6,
+	OVS_KEY_ATTR_IPV4 = 7,
+	OVS_KEY_ATTR_IPV6 = 8,
+	OVS_KEY_ATTR_TCP = 9,
+	OVS_KEY_ATTR_UDP = 10,
+	OVS_KEY_ATTR_ICMP = 11,
+	OVS_KEY_ATTR_ICMPV6 = 12,
+	OVS_KEY_ATTR_ARP = 13,
+	OVS_KEY_ATTR_ND = 14,
+	OVS_KEY_ATTR_SKB_MARK = 15,
+	OVS_KEY_ATTR_TUNNEL = 16,
+	OVS_KEY_ATTR_SCTP = 17,
+	OVS_KEY_ATTR_TCP_FLAGS = 18,
+	OVS_KEY_ATTR_DP_HASH = 19,
+	OVS_KEY_ATTR_RECIRC_ID = 20,
+	OVS_KEY_ATTR_MPLS = 21,
+	OVS_KEY_ATTR_CT_STATE = 22,
+	OVS_KEY_ATTR_CT_ZONE = 23,
+	OVS_KEY_ATTR_CT_MARK = 24,
+	OVS_KEY_ATTR_CT_LABELS = 25,
+	OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4 = 26,
+	OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6 = 27,
+	OVS_KEY_ATTR_NSH = 28,
+	OVS_KEY_ATTR_PACKET_TYPE = 29,
+	OVS_KEY_ATTR_ND_EXTENSIONS = 30,
+	OVS_KEY_ATTR_TUNNEL_INFO = 31,
+	OVS_KEY_ATTR_IPV6_EXTHDRS = 32,
+	__OVS_KEY_ATTR_MAX = 33,
+};
+
+struct ovs_key_ethernet {
+	__u8 eth_src[6];
+	__u8 eth_dst[6];
+};
+
+struct ovs_key_ipv4 {
+	__be32 ipv4_src;
+	__be32 ipv4_dst;
+	__u8 ipv4_proto;
+	__u8 ipv4_tos;
+	__u8 ipv4_ttl;
+	__u8 ipv4_frag;
+};
+
+struct ovs_key_ipv6 {
+	__be32 ipv6_src[4];
+	__be32 ipv6_dst[4];
+	__be32 ipv6_label;
+	__u8 ipv6_proto;
+	__u8 ipv6_tclass;
+	__u8 ipv6_hlimit;
+	__u8 ipv6_frag;
+};
+
+struct ovs_key_tcp {
+	__be16 tcp_src;
+	__be16 tcp_dst;
+};
+
+struct ovs_key_udp {
+	__be16 udp_src;
+	__be16 udp_dst;
+};
+
+struct ovs_key_sctp {
+	__be16 sctp_src;
+	__be16 sctp_dst;
+};
+
+struct ovs_key_ct_labels {
+	union {
+		__u8 ct_labels[16];
+		__u32 ct_labels_32[4];
+	};
+};
+
+struct ovs_nsh_key_base {
+	__u8 flags;
+	__u8 ttl;
+	__u8 mdtype;
+	__u8 np;
+	__be32 path_hdr;
+};
+
+struct sample_arg {
+	bool exec;
+	u32 probability;
+};
+
+enum ovs_userspace_attr {
+	OVS_USERSPACE_ATTR_UNSPEC = 0,
+	OVS_USERSPACE_ATTR_PID = 1,
+	OVS_USERSPACE_ATTR_USERDATA = 2,
+	OVS_USERSPACE_ATTR_EGRESS_TUN_PORT = 3,
+	OVS_USERSPACE_ATTR_ACTIONS = 4,
+	__OVS_USERSPACE_ATTR_MAX = 5,
+};
+
+struct ovs_action_trunc {
+	__u32 max_len;
+};
+
+struct ovs_action_push_mpls {
+	__be32 mpls_lse;
+	__be16 mpls_ethertype;
+};
+
+struct ovs_action_add_mpls {
+	__be32 mpls_lse;
+	__be16 mpls_ethertype;
+	__u16 tun_flags;
+};
+
+struct ovs_action_push_vlan {
+	__be16 vlan_tpid;
+	__be16 vlan_tci;
+};
+
+struct ovs_action_hash {
+	__u32 hash_alg;
+	__u32 hash_basis;
+};
+
+struct ovs_action_push_eth {
+	struct ovs_key_ethernet addresses;
+};
+
+struct check_pkt_len_arg {
+	u16 pkt_len;
+	bool exec_for_greater;
+	bool exec_for_lesser_equal;
+};
+
+enum ovs_action_attr {
+	OVS_ACTION_ATTR_UNSPEC = 0,
+	OVS_ACTION_ATTR_OUTPUT = 1,
+	OVS_ACTION_ATTR_USERSPACE = 2,
+	OVS_ACTION_ATTR_SET = 3,
+	OVS_ACTION_ATTR_PUSH_VLAN = 4,
+	OVS_ACTION_ATTR_POP_VLAN = 5,
+	OVS_ACTION_ATTR_SAMPLE = 6,
+	OVS_ACTION_ATTR_RECIRC = 7,
+	OVS_ACTION_ATTR_HASH = 8,
+	OVS_ACTION_ATTR_PUSH_MPLS = 9,
+	OVS_ACTION_ATTR_POP_MPLS = 10,
+	OVS_ACTION_ATTR_SET_MASKED = 11,
+	OVS_ACTION_ATTR_CT = 12,
+	OVS_ACTION_ATTR_TRUNC = 13,
+	OVS_ACTION_ATTR_PUSH_ETH = 14,
+	OVS_ACTION_ATTR_POP_ETH = 15,
+	OVS_ACTION_ATTR_CT_CLEAR = 16,
+	OVS_ACTION_ATTR_PUSH_NSH = 17,
+	OVS_ACTION_ATTR_POP_NSH = 18,
+	OVS_ACTION_ATTR_METER = 19,
+	OVS_ACTION_ATTR_CLONE = 20,
+	OVS_ACTION_ATTR_CHECK_PKT_LEN = 21,
+	OVS_ACTION_ATTR_ADD_MPLS = 22,
+	OVS_ACTION_ATTR_DEC_TTL = 23,
+	__OVS_ACTION_ATTR_MAX = 24,
+	OVS_ACTION_ATTR_SET_TO_MASKED = 25,
+};
+
+struct nsh_md1_ctx {
+	__be32 context[4];
+};
+
+struct nsh_md2_tlv {
+	__be16 md_class;
+	u8 type;
+	u8 length;
+	u8 md_value[0];
+};
+
+struct nshhdr {
+	__be16 ver_flags_ttl_len;
+	u8 mdtype;
+	u8 np;
+	__be32 path_hdr;
+	union {
+		struct nsh_md1_ctx md1;
+		struct nsh_md2_tlv md2;
+	};
+};
+
+enum sw_flow_mac_proto {
+	MAC_PROTO_NONE = 0,
+	MAC_PROTO_ETHERNET = 1,
+};
+
+struct ovs_tunnel_info {
+	struct metadata_dst *tun_dst;
+};
+
+struct vlan_head {
+	__be16 tpid;
+	__be16 tci;
+};
+
+struct ovs_key_nsh {
+	struct ovs_nsh_key_base base;
+	__be32 context[4];
+};
+
+struct sw_flow_key {
+	u8 tun_opts[255];
+	u8 tun_opts_len;
+	struct ip_tunnel_key tun_key;
+	struct {
+		u32 priority;
+		u32 skb_mark;
+		u16 in_port;
+	} __attribute__((packed)) phy;
+	u8 mac_proto;
+	u8 tun_proto;
+	u32 ovs_flow_hash;
+	u32 recirc_id;
+	struct {
+		u8 src[6];
+		u8 dst[6];
+		struct vlan_head vlan;
+		struct vlan_head cvlan;
+		__be16 type;
+	} eth;
+	u8 ct_state;
+	u8 ct_orig_proto;
+	union {
+		struct {
+			u8 proto;
+			u8 tos;
+			u8 ttl;
+			u8 frag;
+		} ip;
+	};
+	u16 ct_zone;
+	struct {
+		__be16 src;
+		__be16 dst;
+		__be16 flags;
+	} tp;
+	union {
+		struct {
+			struct {
+				__be32 src;
+				__be32 dst;
+			} addr;
+			union {
+				struct {
+					__be32 src;
+					__be32 dst;
+				} ct_orig;
+				struct {
+					u8 sha[6];
+					u8 tha[6];
+				} arp;
+			};
+		} ipv4;
+		struct {
+			struct {
+				struct in6_addr src;
+				struct in6_addr dst;
+			} addr;
+			__be32 label;
+			u16 exthdrs;
+			union {
+				struct {
+					struct in6_addr src;
+					struct in6_addr dst;
+				} ct_orig;
+				struct {
+					struct in6_addr target;
+					u8 sll[6];
+					u8 tll[6];
+				} nd;
+			};
+		} ipv6;
+		struct {
+			u32 num_labels_mask;
+			__be32 lse[3];
+		} mpls;
+		struct ovs_key_nsh nsh;
+	};
+	struct {
+		struct {
+			__be16 src;
+			__be16 dst;
+		} orig_tp;
+		u32 mark;
+		struct ovs_key_ct_labels labels;
+	} ct;
+};
+
+struct sw_flow_key_range {
+	short unsigned int start;
+	short unsigned int end;
+};
+
+struct sw_flow_mask {
+	int ref_count;
+	struct callback_head rcu;
+	struct sw_flow_key_range range;
+	struct sw_flow_key key;
+};
+
+struct sw_flow_actions {
+	struct callback_head rcu;
+	size_t orig_len;
+	u32 actions_len;
+	struct nlattr actions[0];
+};
+
+struct mask_cache_entry {
+	u32 skb_hash;
+	u32 mask_index;
+};
+
+struct mask_cache {
+	struct callback_head rcu;
+	u32 cache_size;
+	struct mask_cache_entry *mask_cache;
+};
+
+struct mask_array_stats {
+	struct u64_stats_sync syncp;
+	u64 usage_cntrs[0];
+};
+
+struct mask_array {
+	struct callback_head rcu;
+	int count;
+	int max;
+	struct mask_array_stats *masks_usage_stats;
+	u64 *masks_usage_zero_cntr;
+	struct sw_flow_mask *masks[0];
+};
+
+struct table_instance {
+	struct hlist_head *buckets;
+	unsigned int n_buckets;
+	struct callback_head rcu;
+	int node_ver;
+	u32 hash_seed;
+};
+
+struct flow_table {
+	struct table_instance *ti;
+	struct table_instance *ufid_ti;
+	struct mask_cache *mask_cache;
+	struct mask_array *mask_array;
+	long unsigned int last_rehash;
+	unsigned int count;
+	unsigned int ufid_count;
+};
+
+struct dp_meter_band {
+	u32 type;
+	u32 rate;
+	u32 burst_size;
+	u64 bucket;
+	struct ovs_flow_stats stats;
+};
+
+struct dp_meter {
+	spinlock_t lock;
+	struct callback_head rcu;
+	u32 id;
+	u16 kbps: 1;
+	u16 keep_stats: 1;
+	u16 n_bands;
+	u32 max_delta_t;
+	u64 used;
+	struct ovs_flow_stats stats;
+	struct dp_meter_band bands[0];
+};
+
+struct dp_meter_instance {
+	struct callback_head rcu;
+	u32 n_meters;
+	struct dp_meter *dp_meters[0];
+};
+
+struct dp_meter_table {
+	struct dp_meter_instance *ti;
+	u32 count;
+	u32 max_meters_allowed;
+};
+
+struct vport_portids {
+	struct reciprocal_value rn_ids;
+	struct callback_head rcu;
+	u32 n_ids;
+	u32 ids[0];
+};
+
+struct datapath;
+
+struct vport_ops;
+
+struct vport_upcall_stats_percpu;
+
+struct vport {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct datapath *dp;
+	struct vport_portids *upcall_portids;
+	u16 port_no;
+	struct hlist_node hash_node;
+	struct hlist_node dp_hash_node;
+	const struct vport_ops *ops;
+	struct vport_upcall_stats_percpu *upcall_stats;
+	struct list_head detach_list;
+	struct callback_head rcu;
+};
+
+struct dp_stats_percpu;
+
+struct dp_nlsk_pids;
+
+struct datapath {
+	struct callback_head rcu;
+	struct list_head list_node;
+	struct flow_table table;
+	struct hlist_head *ports;
+	struct dp_stats_percpu *stats_percpu;
+	possible_net_t net;
+	u32 user_features;
+	u32 max_headroom;
+	struct dp_meter_table meter_tbl;
+	struct dp_nlsk_pids *upcall_portids;
+};
+
+struct vport_parms;
+
+struct vport_ops {
+	enum ovs_vport_type type;
+	struct vport * (*create)(const struct vport_parms *);
+	void (*destroy)(struct vport *);
+	int (*set_options)(struct vport *, struct nlattr *);
+	int (*get_options)(const struct vport *, struct sk_buff *);
+	int (*send)(struct sk_buff *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct vport_upcall_stats_percpu {
+	struct u64_stats_sync syncp;
+	u64_stats_t n_success;
+	u64_stats_t n_fail;
+};
+
+struct vport_parms {
+	const char *name;
+	enum ovs_vport_type type;
+	int desired_ifindex;
+	struct nlattr *options;
+	struct datapath *dp;
+	u16 port_no;
+	struct nlattr *upcall_portids;
+};
+
+struct dp_stats_percpu {
+	u64 n_hit;
+	u64 n_missed;
+	u64 n_lost;
+	u64 n_mask_hit;
+	u64 n_cache_hit;
+	struct u64_stats_sync syncp;
+};
+
+struct dp_nlsk_pids {
+	struct callback_head rcu;
+	u32 n_pids;
+	u32 pids[0];
+};
+
+struct ovs_skb_cb {
+	struct vport *input_vport;
+	u16 mru;
+	u16 acts_origlen;
+	u32 cutlen;
+};
+
+struct dp_upcall_info {
+	struct ip_tunnel_info *egress_tun_info;
+	const struct nlattr *userdata;
+	const struct nlattr *actions;
+	int actions_len;
+	u32 portid;
+	u8 cmd;
+	u16 mru;
+};
+
+struct deferred_action {
+	struct sk_buff *skb;
+	const struct nlattr *actions;
+	int actions_len;
+	struct sw_flow_key pkt_key;
+};
+
+struct ovs_frag_data {
+	long unsigned int dst;
+	struct vport *vport;
+	struct ovs_skb_cb cb;
+	__be16 inner_protocol;
+	u16 network_offset;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 mac_proto;
+	u8 l2_data[30];
+};
+
+struct action_fifo {
+	int head;
+	int tail;
+	struct deferred_action fifo[10];
+};
+
+struct action_flow_keys {
+	struct sw_flow_key key[3];
+};
+
+struct ovs_conntrack_info;
+
+enum ovs_vport_cmd {
+	OVS_VPORT_CMD_UNSPEC = 0,
+	OVS_VPORT_CMD_NEW = 1,
+	OVS_VPORT_CMD_DEL = 2,
+	OVS_VPORT_CMD_GET = 3,
+	OVS_VPORT_CMD_SET = 4,
+};
+
+struct ovs_ct_limit_info;
+
+struct ovs_net {
+	struct list_head dps;
+	struct work_struct dp_notify_work;
+	struct delayed_work masks_rebalance;
+	struct ovs_ct_limit_info *ct_limit_info;
+	bool xt_label;
+};
+
+struct ovs_header {
+	int dp_ifindex;
+};
+
+enum ovs_datapath_cmd {
+	OVS_DP_CMD_UNSPEC = 0,
+	OVS_DP_CMD_NEW = 1,
+	OVS_DP_CMD_DEL = 2,
+	OVS_DP_CMD_GET = 3,
+	OVS_DP_CMD_SET = 4,
+};
+
+enum ovs_datapath_attr {
+	OVS_DP_ATTR_UNSPEC = 0,
+	OVS_DP_ATTR_NAME = 1,
+	OVS_DP_ATTR_UPCALL_PID = 2,
+	OVS_DP_ATTR_STATS = 3,
+	OVS_DP_ATTR_MEGAFLOW_STATS = 4,
+	OVS_DP_ATTR_USER_FEATURES = 5,
+	OVS_DP_ATTR_PAD = 6,
+	OVS_DP_ATTR_MASKS_CACHE_SIZE = 7,
+	OVS_DP_ATTR_PER_CPU_PIDS = 8,
+	OVS_DP_ATTR_IFINDEX = 9,
+	__OVS_DP_ATTR_MAX = 10,
+};
+
+struct ovs_dp_stats {
+	__u64 n_hit;
+	__u64 n_missed;
+	__u64 n_lost;
+	__u64 n_flows;
+};
+
+struct ovs_dp_megaflow_stats {
+	__u64 n_mask_hit;
+	__u32 n_masks;
+	__u32 pad0;
+	__u64 n_cache_hit;
+	__u64 pad1;
+};
+
+struct ovs_vport_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+enum ovs_packet_attr {
+	OVS_PACKET_ATTR_UNSPEC = 0,
+	OVS_PACKET_ATTR_PACKET = 1,
+	OVS_PACKET_ATTR_KEY = 2,
+	OVS_PACKET_ATTR_ACTIONS = 3,
+	OVS_PACKET_ATTR_USERDATA = 4,
+	OVS_PACKET_ATTR_EGRESS_TUN_KEY = 5,
+	OVS_PACKET_ATTR_UNUSED1 = 6,
+	OVS_PACKET_ATTR_UNUSED2 = 7,
+	OVS_PACKET_ATTR_PROBE = 8,
+	OVS_PACKET_ATTR_MRU = 9,
+	OVS_PACKET_ATTR_LEN = 10,
+	OVS_PACKET_ATTR_HASH = 11,
+	__OVS_PACKET_ATTR_MAX = 12,
+};
+
+enum ovs_vport_attr {
+	OVS_VPORT_ATTR_UNSPEC = 0,
+	OVS_VPORT_ATTR_PORT_NO = 1,
+	OVS_VPORT_ATTR_TYPE = 2,
+	OVS_VPORT_ATTR_NAME = 3,
+	OVS_VPORT_ATTR_OPTIONS = 4,
+	OVS_VPORT_ATTR_UPCALL_PID = 5,
+	OVS_VPORT_ATTR_STATS = 6,
+	OVS_VPORT_ATTR_PAD = 7,
+	OVS_VPORT_ATTR_IFINDEX = 8,
+	OVS_VPORT_ATTR_NETNSID = 9,
+	OVS_VPORT_ATTR_UPCALL_STATS = 10,
+	__OVS_VPORT_ATTR_MAX = 11,
+};
+
+enum ovs_flow_cmd {
+	OVS_FLOW_CMD_UNSPEC = 0,
+	OVS_FLOW_CMD_NEW = 1,
+	OVS_FLOW_CMD_DEL = 2,
+	OVS_FLOW_CMD_GET = 3,
+	OVS_FLOW_CMD_SET = 4,
+};
+
+enum ovs_frag_type {
+	OVS_FRAG_TYPE_NONE = 0,
+	OVS_FRAG_TYPE_FIRST = 1,
+	OVS_FRAG_TYPE_LATER = 2,
+	__OVS_FRAG_TYPE_MAX = 3,
+};
+
+enum ovs_flow_attr {
+	OVS_FLOW_ATTR_UNSPEC = 0,
+	OVS_FLOW_ATTR_KEY = 1,
+	OVS_FLOW_ATTR_ACTIONS = 2,
+	OVS_FLOW_ATTR_STATS = 3,
+	OVS_FLOW_ATTR_TCP_FLAGS = 4,
+	OVS_FLOW_ATTR_USED = 5,
+	OVS_FLOW_ATTR_CLEAR = 6,
+	OVS_FLOW_ATTR_MASK = 7,
+	OVS_FLOW_ATTR_PROBE = 8,
+	OVS_FLOW_ATTR_UFID = 9,
+	OVS_FLOW_ATTR_UFID_FLAGS = 10,
+	OVS_FLOW_ATTR_PAD = 11,
+	__OVS_FLOW_ATTR_MAX = 12,
+};
+
+struct sw_flow_match {
+	struct sw_flow_key *key;
+	struct sw_flow_key_range range;
+	struct sw_flow_mask *mask;
+};
+
+struct sw_flow_id {
+	u32 ufid_len;
+	union {
+		u32 ufid[4];
+		struct sw_flow_key *unmasked_key;
+	};
+};
+
+struct sw_flow_stats {
+	u64 packet_count;
+	u64 byte_count;
+	long unsigned int used;
+	spinlock_t lock;
+	__be16 tcp_flags;
+};
+
+struct sw_flow {
+	struct callback_head rcu;
+	struct {
+		struct hlist_node node[2];
+		u32 hash;
+	} flow_table;
+	struct {
+		struct hlist_node node[2];
+		u32 hash;
+	} ufid_table;
+	int stats_last_writer;
+	struct sw_flow_key key;
+	struct sw_flow_id id;
+	struct cpumask cpu_used_mask;
+	struct sw_flow_mask *mask;
+	struct sw_flow_actions *sf_acts;
+	struct sw_flow_stats *stats[0];
+};
+
+enum ovs_pkt_hash_types {
+	OVS_PACKET_HASH_SW_BIT = 0,
+	OVS_PACKET_HASH_L4_BIT = 0,
+};
+
+struct mask_count {
+	int index;
+	u64 counter;
+};
+
+enum ofp12_ipv6exthdr_flags {
+	OFPIEH12_NONEXT = 1,
+	OFPIEH12_ESP = 2,
+	OFPIEH12_AUTH = 4,
+	OFPIEH12_DEST = 8,
+	OFPIEH12_FRAG = 16,
+	OFPIEH12_ROUTER = 32,
+	OFPIEH12_HOP = 64,
+	OFPIEH12_UNREP = 128,
+	OFPIEH12_UNSEQ = 256,
+};
+
+struct arp_eth_header {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+	unsigned char ar_sha[6];
+	unsigned char ar_sip[4];
+	unsigned char ar_tha[6];
+	unsigned char ar_tip[4];
+};
+
+struct llc_snap_hdr {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl;
+	u8 oui[3];
+	__be16 ethertype;
+};
+
+enum {
+	OVS_VXLAN_EXT_UNSPEC = 0,
+	OVS_VXLAN_EXT_GBP = 1,
+	__OVS_VXLAN_EXT_MAX = 2,
+};
+
+enum ovs_tunnel_key_attr {
+	OVS_TUNNEL_KEY_ATTR_ID = 0,
+	OVS_TUNNEL_KEY_ATTR_IPV4_SRC = 1,
+	OVS_TUNNEL_KEY_ATTR_IPV4_DST = 2,
+	OVS_TUNNEL_KEY_ATTR_TOS = 3,
+	OVS_TUNNEL_KEY_ATTR_TTL = 4,
+	OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT = 5,
+	OVS_TUNNEL_KEY_ATTR_CSUM = 6,
+	OVS_TUNNEL_KEY_ATTR_OAM = 7,
+	OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS = 8,
+	OVS_TUNNEL_KEY_ATTR_TP_SRC = 9,
+	OVS_TUNNEL_KEY_ATTR_TP_DST = 10,
+	OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS = 11,
+	OVS_TUNNEL_KEY_ATTR_IPV6_SRC = 12,
+	OVS_TUNNEL_KEY_ATTR_IPV6_DST = 13,
+	OVS_TUNNEL_KEY_ATTR_PAD = 14,
+	OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS = 15,
+	OVS_TUNNEL_KEY_ATTR_IPV4_INFO_BRIDGE = 16,
+	__OVS_TUNNEL_KEY_ATTR_MAX = 17,
+};
+
+struct ovs_key_mpls {
+	__be32 mpls_lse;
+};
+
+struct ovs_key_ipv6_exthdrs {
+	__u16 hdrs;
+};
+
+struct ovs_key_icmp {
+	__u8 icmp_type;
+	__u8 icmp_code;
+};
+
+struct ovs_key_icmpv6 {
+	__u8 icmpv6_type;
+	__u8 icmpv6_code;
+};
+
+struct ovs_key_arp {
+	__be32 arp_sip;
+	__be32 arp_tip;
+	__be16 arp_op;
+	__u8 arp_sha[6];
+	__u8 arp_tha[6];
+};
+
+struct ovs_key_nd {
+	__be32 nd_target[4];
+	__u8 nd_sll[6];
+	__u8 nd_tll[6];
+};
+
+struct ovs_key_ct_tuple_ipv4 {
+	__be32 ipv4_src;
+	__be32 ipv4_dst;
+	__be16 src_port;
+	__be16 dst_port;
+	__u8 ipv4_proto;
+};
+
+struct ovs_key_ct_tuple_ipv6 {
+	__be32 ipv6_src[4];
+	__be32 ipv6_dst[4];
+	__be16 src_port;
+	__be16 dst_port;
+	__u8 ipv6_proto;
+};
+
+enum ovs_nsh_key_attr {
+	OVS_NSH_KEY_ATTR_UNSPEC = 0,
+	OVS_NSH_KEY_ATTR_BASE = 1,
+	OVS_NSH_KEY_ATTR_MD1 = 2,
+	OVS_NSH_KEY_ATTR_MD2 = 3,
+	__OVS_NSH_KEY_ATTR_MAX = 4,
+};
+
+struct ovs_nsh_key_md1 {
+	__be32 context[4];
+};
+
+enum ovs_sample_attr {
+	OVS_SAMPLE_ATTR_UNSPEC = 0,
+	OVS_SAMPLE_ATTR_PROBABILITY = 1,
+	OVS_SAMPLE_ATTR_ACTIONS = 2,
+	__OVS_SAMPLE_ATTR_MAX = 3,
+	OVS_SAMPLE_ATTR_ARG = 4,
+};
+
+enum ovs_hash_alg {
+	OVS_HASH_ALG_L4 = 0,
+};
+
+enum ovs_check_pkt_len_attr {
+	OVS_CHECK_PKT_LEN_ATTR_UNSPEC = 0,
+	OVS_CHECK_PKT_LEN_ATTR_PKT_LEN = 1,
+	OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER = 2,
+	OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL = 3,
+	__OVS_CHECK_PKT_LEN_ATTR_MAX = 4,
+	OVS_CHECK_PKT_LEN_ATTR_ARG = 5,
+};
+
+enum ovs_dec_ttl_attr {
+	OVS_DEC_TTL_ATTR_UNSPEC = 0,
+	OVS_DEC_TTL_ATTR_ACTION = 1,
+	__OVS_DEC_TTL_ATTR_MAX = 2,
+};
+
+struct ovs_len_tbl {
+	int len;
+	const struct ovs_len_tbl *next;
+};
+
+enum ovs_meter_cmd {
+	OVS_METER_CMD_UNSPEC = 0,
+	OVS_METER_CMD_FEATURES = 1,
+	OVS_METER_CMD_SET = 2,
+	OVS_METER_CMD_DEL = 3,
+	OVS_METER_CMD_GET = 4,
+};
+
+enum ovs_meter_attr {
+	OVS_METER_ATTR_UNSPEC = 0,
+	OVS_METER_ATTR_ID = 1,
+	OVS_METER_ATTR_KBPS = 2,
+	OVS_METER_ATTR_STATS = 3,
+	OVS_METER_ATTR_BANDS = 4,
+	OVS_METER_ATTR_USED = 5,
+	OVS_METER_ATTR_CLEAR = 6,
+	OVS_METER_ATTR_MAX_METERS = 7,
+	OVS_METER_ATTR_MAX_BANDS = 8,
+	OVS_METER_ATTR_PAD = 9,
+	__OVS_METER_ATTR_MAX = 10,
+};
+
+enum ovs_band_attr {
+	OVS_BAND_ATTR_UNSPEC = 0,
+	OVS_BAND_ATTR_TYPE = 1,
+	OVS_BAND_ATTR_RATE = 2,
+	OVS_BAND_ATTR_BURST = 3,
+	OVS_BAND_ATTR_STATS = 4,
+	__OVS_BAND_ATTR_MAX = 5,
+};
+
+enum ovs_meter_band_type {
+	OVS_METER_BAND_TYPE_UNSPEC = 0,
+	OVS_METER_BAND_TYPE_DROP = 1,
+	__OVS_METER_BAND_TYPE_MAX = 2,
+};
+
+struct trace_event_raw_ovs_do_execute_action {
+	struct trace_entry ent;
+	void *dpaddr;
+	u32 __data_loc_dp_name;
+	u32 __data_loc_dev_name;
+	void *skbaddr;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	u8 nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	u32 ovs_flow_hash;
+	u32 recirc_id;
+	void *keyaddr;
+	u16 key_eth_type;
+	u8 key_ct_state;
+	u8 key_ct_orig_proto;
+	u16 key_ct_zone;
+	unsigned int flow_key_valid;
+	u8 action_type;
+	unsigned int action_len;
+	void *action_data;
+	u8 is_last;
+	char __data[0];
+};
+
+struct trace_event_raw_ovs_dp_upcall {
+	struct trace_entry ent;
+	void *dpaddr;
+	u32 __data_loc_dp_name;
+	u32 __data_loc_dev_name;
+	void *skbaddr;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	u8 nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	u32 ovs_flow_hash;
+	u32 recirc_id;
+	const void *keyaddr;
+	u16 key_eth_type;
+	u8 key_ct_state;
+	u8 key_ct_orig_proto;
+	u16 key_ct_zone;
+	unsigned int flow_key_valid;
+	u8 upcall_cmd;
+	u32 upcall_port;
+	u16 upcall_mru;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ovs_do_execute_action {
+	u32 dp_name;
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ovs_dp_upcall {
+	u32 dp_name;
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_ovs_do_execute_action)(void *, struct datapath *, struct sk_buff *, struct sw_flow_key *, const struct nlattr *, int);
+
+typedef void (*btf_trace_ovs_dp_upcall)(void *, struct datapath *, struct sk_buff *, const struct sw_flow_key *, const struct dp_upcall_info *);
+
+struct internal_dev {
+	struct vport *vport;
+};
+
+enum ovs_vport_upcall_attr {
+	OVS_VPORT_UPCALL_ATTR_SUCCESS = 0,
+	OVS_VPORT_UPCALL_ATTR_FAIL = 1,
+	__OVS_VPORT_UPCALL_ATTR_MAX = 2,
+};
+
+enum ovs_ct_attr {
+	OVS_CT_ATTR_UNSPEC = 0,
+	OVS_CT_ATTR_COMMIT = 1,
+	OVS_CT_ATTR_ZONE = 2,
+	OVS_CT_ATTR_MARK = 3,
+	OVS_CT_ATTR_LABELS = 4,
+	OVS_CT_ATTR_HELPER = 5,
+	OVS_CT_ATTR_NAT = 6,
+	OVS_CT_ATTR_FORCE_COMMIT = 7,
+	OVS_CT_ATTR_EVENTMASK = 8,
+	OVS_CT_ATTR_TIMEOUT = 9,
+	__OVS_CT_ATTR_MAX = 10,
+};
+
+enum ovs_nat_attr {
+	OVS_NAT_ATTR_UNSPEC = 0,
+	OVS_NAT_ATTR_SRC = 1,
+	OVS_NAT_ATTR_DST = 2,
+	OVS_NAT_ATTR_IP_MIN = 3,
+	OVS_NAT_ATTR_IP_MAX = 4,
+	OVS_NAT_ATTR_PROTO_MIN = 5,
+	OVS_NAT_ATTR_PROTO_MAX = 6,
+	OVS_NAT_ATTR_PERSISTENT = 7,
+	OVS_NAT_ATTR_PROTO_HASH = 8,
+	OVS_NAT_ATTR_PROTO_RANDOM = 9,
+	__OVS_NAT_ATTR_MAX = 10,
+};
+
+enum ovs_ct_limit_cmd {
+	OVS_CT_LIMIT_CMD_UNSPEC = 0,
+	OVS_CT_LIMIT_CMD_SET = 1,
+	OVS_CT_LIMIT_CMD_DEL = 2,
+	OVS_CT_LIMIT_CMD_GET = 3,
+};
+
+enum ovs_ct_limit_attr {
+	OVS_CT_LIMIT_ATTR_UNSPEC = 0,
+	OVS_CT_LIMIT_ATTR_ZONE_LIMIT = 1,
+	__OVS_CT_LIMIT_ATTR_MAX = 2,
+};
+
+struct ovs_zone_limit {
+	int zone_id;
+	__u32 limit;
+	__u32 count;
+};
+
+struct nf_conn_act_ct_ext {
+	int ifindex[2];
+};
+
+struct ovs_ct_limit_info {
+	u32 default_limit;
+	struct hlist_head *limits;
+	struct nf_conncount_data *data;
+};
+
+struct ovs_ct_len_tbl {
+	int maxlen;
+	int minlen;
+};
+
+struct md_mark {
+	u32 value;
+	u32 mask;
+};
+
+struct md_labels {
+	struct ovs_key_ct_labels value;
+	struct ovs_key_ct_labels mask;
+};
+
+enum ovs_ct_nat {
+	OVS_CT_NAT = 1,
+	OVS_CT_SRC_NAT = 2,
+	OVS_CT_DST_NAT = 4,
+};
+
+struct ovs_conntrack_info {
+	struct nf_conntrack_helper *helper;
+	struct nf_conntrack_zone zone;
+	struct nf_conn *ct;
+	u8 commit: 1;
+	u8 nat: 3;
+	u8 force: 1;
+	u8 have_eventmask: 1;
+	u16 family;
+	u32 eventmask;
+	struct md_mark mark;
+	struct md_labels labels;
+	char timeout[32];
+	struct nf_ct_timeout *nf_ct_timeout;
+	struct nf_nat_range2 range;
+};
+
+struct ovs_ct_limit {
+	struct hlist_node hlist_node;
+	struct callback_head rcu;
+	u16 zone;
+	u32 limit;
+};
+
+enum {
+	OVS_TUNNEL_ATTR_UNSPEC = 0,
+	OVS_TUNNEL_ATTR_DST_PORT = 1,
+	OVS_TUNNEL_ATTR_EXTENSION = 2,
+	__OVS_TUNNEL_ATTR_MAX = 3,
+};
+
+struct geneve_port {
+	u16 dst_port;
+};
+
+struct vsock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 vdiag_states;
+	__u32 vdiag_ino;
+	__u32 vdiag_show;
+	__u32 vdiag_cookie[2];
+};
+
+struct vsock_diag_msg {
+	__u8 vdiag_family;
+	__u8 vdiag_type;
+	__u8 vdiag_state;
+	__u8 vdiag_shutdown;
+	__u32 vdiag_src_cid;
+	__u32 vdiag_src_port;
+	__u32 vdiag_dst_cid;
+	__u32 vdiag_dst_port;
+	__u32 vdiag_ino;
+	__u32 vdiag_cookie[2];
+};
+
+enum virtio_vsock_type {
+	VIRTIO_VSOCK_TYPE_STREAM = 1,
+	VIRTIO_VSOCK_TYPE_SEQPACKET = 2,
+};
+
+enum virtio_vsock_op {
+	VIRTIO_VSOCK_OP_INVALID = 0,
+	VIRTIO_VSOCK_OP_REQUEST = 1,
+	VIRTIO_VSOCK_OP_RESPONSE = 2,
+	VIRTIO_VSOCK_OP_RST = 3,
+	VIRTIO_VSOCK_OP_SHUTDOWN = 4,
+	VIRTIO_VSOCK_OP_RW = 5,
+	VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6,
+	VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7,
+};
+
+enum virtio_vsock_shutdown {
+	VIRTIO_VSOCK_SHUTDOWN_RCV = 1,
+	VIRTIO_VSOCK_SHUTDOWN_SEND = 2,
+};
+
+struct virtio_vsock_sock {
+	struct vsock_sock *vsk;
+	spinlock_t tx_lock;
+	spinlock_t rx_lock;
+	u32 tx_cnt;
+	u32 peer_fwd_cnt;
+	u32 peer_buf_alloc;
+	u32 fwd_cnt;
+	u32 last_fwd_cnt;
+	u32 rx_bytes;
+	u32 buf_alloc;
+	struct list_head rx_queue;
+	u32 msg_count;
+};
+
+struct virtio_vsock_pkt_info {
+	u32 remote_cid;
+	u32 remote_port;
+	struct vsock_sock *vsk;
+	struct msghdr *msg;
+	u32 pkt_len;
+	u16 type;
+	u16 op;
+	u32 flags;
+	bool reply;
+};
+
+struct af_vsockmon_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le16 op;
+	__le16 transport;
+	__le16 len;
+	__u8 reserved[2];
+};
+
+enum af_vsockmon_op {
+	AF_VSOCK_OP_UNKNOWN = 0,
+	AF_VSOCK_OP_CONNECT = 1,
+	AF_VSOCK_OP_DISCONNECT = 2,
+	AF_VSOCK_OP_CONTROL = 3,
+	AF_VSOCK_OP_PAYLOAD = 4,
+};
+
+enum af_vsockmon_transport {
+	AF_VSOCK_TRANSPORT_UNKNOWN = 0,
+	AF_VSOCK_TRANSPORT_NO_INFO = 1,
+	AF_VSOCK_TRANSPORT_VIRTIO = 2,
+};
+
+struct trace_event_raw_virtio_transport_alloc_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_virtio_transport_recv_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	__u32 buf_alloc;
+	__u32 fwd_cnt;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_virtio_transport_alloc_pkt {};
+
+struct trace_event_data_offsets_virtio_transport_recv_pkt {};
+
+typedef void (*btf_trace_virtio_transport_alloc_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32);
+
+typedef void (*btf_trace_virtio_transport_recv_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32, __u32, __u32);
+
+struct vsock_loopback {
+	struct workqueue_struct *workqueue;
+	spinlock_t pkt_list_lock;
+	struct list_head pkt_list;
+	struct work_struct pkt_work;
+};
+
+enum l3mdev_type {
+	L3MDEV_TYPE_UNSPEC = 0,
+	L3MDEV_TYPE_VRF = 1,
+	__L3MDEV_TYPE_MAX = 2,
+};
+
+typedef int (*lookup_by_table_id_t)(struct net *, u32);
+
+struct l3mdev_handler {
+	lookup_by_table_id_t dev_lookup;
+};
+
+typedef void switchdev_deferred_func_t(struct net_device *, const void *);
+
+struct switchdev_deferred_item {
+	struct list_head list;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	switchdev_deferred_func_t *func;
+	long unsigned int data[0];
+};
+
+struct switchdev_nested_priv {
+	bool (*check_cb)(const struct net_device *);
+	bool (*foreign_dev_check_cb)(const struct net_device *, const struct net_device *);
+	const struct net_device *dev;
+	struct net_device *lower_dev;
+};
+
+struct sockaddr_xdp {
+	__u16 sxdp_family;
+	__u16 sxdp_flags;
+	__u32 sxdp_ifindex;
+	__u32 sxdp_queue_id;
+	__u32 sxdp_shared_umem_fd;
+};
+
+struct xdp_ring_offset {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+	__u64 flags;
+};
+
+struct xdp_mmap_offsets {
+	struct xdp_ring_offset rx;
+	struct xdp_ring_offset tx;
+	struct xdp_ring_offset fr;
+	struct xdp_ring_offset cr;
+};
+
+struct xdp_umem_reg {
+	__u64 addr;
+	__u64 len;
+	__u32 chunk_size;
+	__u32 headroom;
+	__u32 flags;
+};
+
+struct xdp_statistics {
+	__u64 rx_dropped;
+	__u64 rx_invalid_descs;
+	__u64 tx_invalid_descs;
+	__u64 rx_ring_full;
+	__u64 rx_fill_ring_empty_descs;
+	__u64 tx_ring_empty_descs;
+};
+
+struct xdp_options {
+	__u32 flags;
+};
+
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct xdp_sock *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_ring;
+
+struct xsk_queue {
+	u32 ring_mask;
+	u32 nentries;
+	u32 cached_prod;
+	u32 cached_cons;
+	struct xdp_ring *ring;
+	u64 invalid_descs;
+	u64 queue_empty_descs;
+};
+
+struct xdp_ring_offset_v1 {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+};
+
+struct xdp_mmap_offsets_v1 {
+	struct xdp_ring_offset_v1 rx;
+	struct xdp_ring_offset_v1 tx;
+	struct xdp_ring_offset_v1 fr;
+	struct xdp_ring_offset_v1 cr;
+};
+
+struct xsk_map_node {
+	struct list_head node;
+	struct xsk_map *map;
+	struct xdp_sock **map_entry;
+};
+
+struct xdp_ring {
+	u32 producer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad1;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consumer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad3;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_rxtx_ring {
+	struct xdp_ring ptrs;
+	struct xdp_desc desc[0];
+};
+
+struct xdp_umem_ring {
+	struct xdp_ring ptrs;
+	u64 desc[0];
+};
+
+struct xsk_dma_map {
+	dma_addr_t *dma_pages;
+	struct device *dev;
+	struct net_device *netdev;
+	refcount_t users;
+	struct list_head list;
+	u32 dma_pages_cnt;
+	bool dma_need_sync;
+};
+
+struct mptcp_mib {
+	long unsigned int mibs[52];
+};
+
+struct mptcp_options_received {
+	u64 sndr_key;
+	u64 rcvr_key;
+	u64 data_ack;
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	__sum16 csum;
+	u16 suboptions;
+	u32 token;
+	u32 nonce;
+	u16 use_map: 1;
+	u16 dsn64: 1;
+	u16 data_fin: 1;
+	u16 use_ack: 1;
+	u16 ack64: 1;
+	u16 mpc_map: 1;
+	u16 reset_reason: 4;
+	u16 reset_transient: 1;
+	u16 echo: 1;
+	u16 backup: 1;
+	u16 deny_join_id0: 1;
+	u16 __unused: 2;
+	u8 join_id;
+	u64 thmac;
+	u8 hmac[20];
+	struct mptcp_addr_info addr;
+	struct mptcp_rm_list rm_list;
+	u64 ahmac;
+	u64 fail_seq;
+};
+
+enum mptcp_pm_type {
+	MPTCP_PM_TYPE_KERNEL = 0,
+	MPTCP_PM_TYPE_USERSPACE = 1,
+	__MPTCP_PM_TYPE_NR = 2,
+	__MPTCP_PM_TYPE_MAX = 1,
+};
+
+struct mptcp_pm_data {
+	struct mptcp_addr_info local;
+	struct mptcp_addr_info remote;
+	struct list_head anno_list;
+	struct list_head userspace_pm_local_addr_list;
+	spinlock_t lock;
+	u8 addr_signal;
+	bool server_side;
+	bool work_pending;
+	bool accept_addr;
+	bool accept_subflow;
+	bool remote_deny_join_id0;
+	u8 add_addr_signaled;
+	u8 add_addr_accepted;
+	u8 local_addr_used;
+	u8 pm_type;
+	u8 subflows;
+	u8 status;
+	long unsigned int id_avail_bitmap[4];
+	struct mptcp_rm_list rm_list_tx;
+	struct mptcp_rm_list rm_list_rx;
+};
+
+struct mptcp_data_frag {
+	struct list_head list;
+	u64 data_seq;
+	u16 data_len;
+	u16 offset;
+	u16 overhead;
+	u16 already_sent;
+	struct page *page;
+};
+
+struct mptcp_sock {
+	struct inet_connection_sock sk;
+	u64 local_key;
+	u64 remote_key;
+	u64 write_seq;
+	u64 snd_nxt;
+	u64 ack_seq;
+	atomic64_t rcv_wnd_sent;
+	u64 rcv_data_fin_seq;
+	int rmem_fwd_alloc;
+	struct sock *last_snd;
+	int snd_burst;
+	int old_wspace;
+	u64 recovery_snd_nxt;
+	u64 snd_una;
+	u64 wnd_end;
+	long unsigned int timer_ival;
+	u32 token;
+	int rmem_released;
+	long unsigned int flags;
+	long unsigned int cb_flags;
+	long unsigned int push_pending;
+	bool recovery;
+	bool can_ack;
+	bool fully_established;
+	bool rcv_data_fin;
+	bool snd_data_fin_enable;
+	bool rcv_fastclose;
+	bool use_64bit_ack;
+	bool csum_enabled;
+	bool allow_infinite_fallback;
+	u8 mpc_endpoint_id;
+	u8 recvmsg_inq: 1;
+	u8 cork: 1;
+	u8 nodelay: 1;
+	u8 fastopening: 1;
+	int connect_flags;
+	struct work_struct work;
+	struct sk_buff *ooo_last_skb;
+	struct rb_root out_of_order_queue;
+	struct sk_buff_head receive_queue;
+	struct list_head conn_list;
+	struct list_head rtx_queue;
+	struct mptcp_data_frag *first_pending;
+	struct list_head join_list;
+	struct socket *subflow;
+	struct sock *first;
+	struct mptcp_pm_data pm;
+	struct {
+		u32 space;
+		u32 copied;
+		u64 time;
+		u64 rtt_us;
+	} rcvq_space;
+	u32 setsockopt_seq;
+	char ca_name[16];
+	struct mptcp_sock *dl_next;
+};
+
+struct mptcp_subflow_request_sock {
+	struct tcp_request_sock sk;
+	u16 mp_capable: 1;
+	u16 mp_join: 1;
+	u16 backup: 1;
+	u16 csum_reqd: 1;
+	u16 allow_join_id0: 1;
+	u8 local_id;
+	u8 remote_id;
+	u64 local_key;
+	u64 idsn;
+	u32 token;
+	u32 ssn_offset;
+	u64 thmac;
+	u32 local_nonce;
+	u32 remote_nonce;
+	struct mptcp_sock *msk;
+	struct hlist_nulls_node token_node;
+};
+
+enum mptcp_data_avail {
+	MPTCP_SUBFLOW_NODATA = 0,
+	MPTCP_SUBFLOW_DATA_AVAIL = 1,
+};
+
+struct mptcp_subflow_context {
+	struct list_head node;
+	union {
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 remote_key_valid: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			u32 is_mptfo: 1;
+			u32 __unused: 8;
+			enum mptcp_data_avail data_avail;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			union {
+				u8 hmac[20];
+				u64 iasn;
+			};
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+			long unsigned int fail_tout;
+		};
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 remote_key_valid: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			u32 is_mptfo: 1;
+			u32 __unused: 8;
+			enum mptcp_data_avail data_avail;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			union {
+				u8 hmac[20];
+				u64 iasn;
+			};
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+			long unsigned int fail_tout;
+		} reset;
+	};
+	struct list_head delegated_node;
+	u32 setsockopt_seq;
+	u32 stale_rcv_tstamp;
+	struct sock *tcp_sock;
+	struct sock *conn;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	void (*tcp_state_change)(struct sock *);
+	void (*tcp_error_report)(struct sock *);
+	struct callback_head rcu;
+};
+
+enum linux_mptcp_mib_field {
+	MPTCP_MIB_NUM = 0,
+	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
+	MPTCP_MIB_MPCAPABLEACTIVE = 2,
+	MPTCP_MIB_MPCAPABLEACTIVEACK = 3,
+	MPTCP_MIB_MPCAPABLEPASSIVEACK = 4,
+	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 5,
+	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 6,
+	MPTCP_MIB_TOKENFALLBACKINIT = 7,
+	MPTCP_MIB_RETRANSSEGS = 8,
+	MPTCP_MIB_JOINNOTOKEN = 9,
+	MPTCP_MIB_JOINSYNRX = 10,
+	MPTCP_MIB_JOINSYNACKRX = 11,
+	MPTCP_MIB_JOINSYNACKMAC = 12,
+	MPTCP_MIB_JOINACKRX = 13,
+	MPTCP_MIB_JOINACKMAC = 14,
+	MPTCP_MIB_DSSNOMATCH = 15,
+	MPTCP_MIB_INFINITEMAPTX = 16,
+	MPTCP_MIB_INFINITEMAPRX = 17,
+	MPTCP_MIB_DSSTCPMISMATCH = 18,
+	MPTCP_MIB_DATACSUMERR = 19,
+	MPTCP_MIB_OFOQUEUETAIL = 20,
+	MPTCP_MIB_OFOQUEUE = 21,
+	MPTCP_MIB_OFOMERGE = 22,
+	MPTCP_MIB_NODSSWINDOW = 23,
+	MPTCP_MIB_DUPDATA = 24,
+	MPTCP_MIB_ADDADDR = 25,
+	MPTCP_MIB_ECHOADD = 26,
+	MPTCP_MIB_PORTADD = 27,
+	MPTCP_MIB_ADDADDRDROP = 28,
+	MPTCP_MIB_JOINPORTSYNRX = 29,
+	MPTCP_MIB_JOINPORTSYNACKRX = 30,
+	MPTCP_MIB_JOINPORTACKRX = 31,
+	MPTCP_MIB_MISMATCHPORTSYNRX = 32,
+	MPTCP_MIB_MISMATCHPORTACKRX = 33,
+	MPTCP_MIB_RMADDR = 34,
+	MPTCP_MIB_RMADDRDROP = 35,
+	MPTCP_MIB_RMSUBFLOW = 36,
+	MPTCP_MIB_MPPRIOTX = 37,
+	MPTCP_MIB_MPPRIORX = 38,
+	MPTCP_MIB_MPFAILTX = 39,
+	MPTCP_MIB_MPFAILRX = 40,
+	MPTCP_MIB_MPFASTCLOSETX = 41,
+	MPTCP_MIB_MPFASTCLOSERX = 42,
+	MPTCP_MIB_MPRSTTX = 43,
+	MPTCP_MIB_MPRSTRX = 44,
+	MPTCP_MIB_RCVPRUNED = 45,
+	MPTCP_MIB_SUBFLOWSTALE = 46,
+	MPTCP_MIB_SUBFLOWRECOVER = 47,
+	MPTCP_MIB_SNDWNDSHARED = 48,
+	MPTCP_MIB_RCVWNDSHARED = 49,
+	MPTCP_MIB_RCVWNDCONFLICTUPDATE = 50,
+	MPTCP_MIB_RCVWNDCONFLICT = 51,
+	__MPTCP_MIB_MAX = 52,
+};
+
+enum mapping_status {
+	MAPPING_OK = 0,
+	MAPPING_INVALID = 1,
+	MAPPING_EMPTY = 2,
+	MAPPING_DATA_FIN = 3,
+	MAPPING_DUMMY = 4,
+	MAPPING_BAD_CSUM = 5,
+};
+
+struct token_bucket {
+	spinlock_t lock;
+	int chain_len;
+	struct hlist_nulls_head req_chain;
+	struct hlist_nulls_head msk_chain;
+};
+
+enum mptcp_event_type {
+	MPTCP_EVENT_UNSPEC = 0,
+	MPTCP_EVENT_CREATED = 1,
+	MPTCP_EVENT_ESTABLISHED = 2,
+	MPTCP_EVENT_CLOSED = 3,
+	MPTCP_EVENT_ANNOUNCED = 6,
+	MPTCP_EVENT_REMOVED = 7,
+	MPTCP_EVENT_SUB_ESTABLISHED = 10,
+	MPTCP_EVENT_SUB_CLOSED = 11,
+	MPTCP_EVENT_SUB_PRIORITY = 13,
+	MPTCP_EVENT_LISTENER_CREATED = 15,
+	MPTCP_EVENT_LISTENER_CLOSED = 16,
+};
+
+struct mptcp_skb_cb {
+	u64 map_seq;
+	u64 end_seq;
+	u32 offset;
+	u8 has_rxtstamp: 1;
+};
+
+struct mptcp_delegated_action {
+	struct napi_struct napi;
+	struct list_head head;
+};
+
+struct trace_event_raw_mptcp_subflow_get_send {
+	struct trace_entry ent;
+	bool active;
+	bool free;
+	u32 snd_wnd;
+	u32 pace;
+	u8 backup;
+	u64 ratio;
+	char __data[0];
+};
+
+struct trace_event_raw_mptcp_dump_mpext {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	u16 csum;
+	u8 use_map;
+	u8 dsn64;
+	u8 data_fin;
+	u8 use_ack;
+	u8 ack64;
+	u8 mpc_map;
+	u8 frozen;
+	u8 reset_transient;
+	u8 reset_reason;
+	u8 csum_reqd;
+	u8 infinite_map;
+	char __data[0];
+};
+
+struct trace_event_raw_ack_update_msk {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 old_snd_una;
+	u64 new_snd_una;
+	u64 new_wnd_end;
+	u64 msk_wnd_end;
+	char __data[0];
+};
+
+struct trace_event_raw_subflow_check_data_avail {
+	struct trace_entry ent;
+	u8 status;
+	const void *skb;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mptcp_subflow_get_send {};
+
+struct trace_event_data_offsets_mptcp_dump_mpext {};
+
+struct trace_event_data_offsets_ack_update_msk {};
+
+struct trace_event_data_offsets_subflow_check_data_avail {};
+
+typedef void (*btf_trace_mptcp_subflow_get_send)(void *, struct mptcp_subflow_context *);
+
+typedef void (*btf_trace_mptcp_sendmsg_frag)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_get_mapping_status)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_ack_update_msk)(void *, u64, u64, u64, u64, u64);
+
+typedef void (*btf_trace_subflow_check_data_avail)(void *, __u8, struct sk_buff *);
+
+enum {
+	MPTCP_CMSG_TS = 1,
+	MPTCP_CMSG_INQ = 2,
+};
+
+struct mptcp_sendmsg_info {
+	int mss_now;
+	int size_goal;
+	u16 limit;
+	u16 sent;
+	unsigned int flags;
+	bool data_lock_held;
+};
+
+struct subflow_send_info {
+	struct sock *ssk;
+	u64 linger_time;
+};
+
+enum mptcp_addr_signal_status {
+	MPTCP_ADD_ADDR_SIGNAL = 0,
+	MPTCP_ADD_ADDR_ECHO = 1,
+	MPTCP_RM_ADDR_SIGNAL = 2,
+};
+
+struct csum_pseudo_header {
+	__be64 data_seq;
+	__be32 subflow_seq;
+	__be16 data_len;
+	__sum16 csum;
+};
+
+struct mptcp_pm_add_entry;
+
+struct mptcp_pernet {
+	struct ctl_table_header *ctl_table_hdr;
+	unsigned int add_addr_timeout;
+	unsigned int stale_loss_cnt;
+	u8 mptcp_enabled;
+	u8 checksum_enabled;
+	u8 allow_join_initial_addr_port;
+	u8 pm_type;
+};
+
+enum {
+	MPTCP_SUBFLOW_ATTR_UNSPEC = 0,
+	MPTCP_SUBFLOW_ATTR_TOKEN_REM = 1,
+	MPTCP_SUBFLOW_ATTR_TOKEN_LOC = 2,
+	MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ = 3,
+	MPTCP_SUBFLOW_ATTR_MAP_SEQ = 4,
+	MPTCP_SUBFLOW_ATTR_MAP_SFSEQ = 5,
+	MPTCP_SUBFLOW_ATTR_SSN_OFFSET = 6,
+	MPTCP_SUBFLOW_ATTR_MAP_DATALEN = 7,
+	MPTCP_SUBFLOW_ATTR_FLAGS = 8,
+	MPTCP_SUBFLOW_ATTR_ID_REM = 9,
+	MPTCP_SUBFLOW_ATTR_ID_LOC = 10,
+	MPTCP_SUBFLOW_ATTR_PAD = 11,
+	__MPTCP_SUBFLOW_ATTR_MAX = 12,
+};
+
+enum mptcp_pm_status {
+	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
+	MPTCP_PM_ADD_ADDR_SEND_ACK = 1,
+	MPTCP_PM_RM_ADDR_RECEIVED = 2,
+	MPTCP_PM_ESTABLISHED = 3,
+	MPTCP_PM_SUBFLOW_ESTABLISHED = 4,
+	MPTCP_PM_ALREADY_ESTABLISHED = 5,
+	MPTCP_PM_MPC_ENDPOINT_ACCOUNTED = 6,
+};
+
+enum {
+	MPTCP_PM_ATTR_UNSPEC = 0,
+	MPTCP_PM_ATTR_ADDR = 1,
+	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
+	MPTCP_PM_ATTR_SUBFLOWS = 3,
+	MPTCP_PM_ATTR_TOKEN = 4,
+	MPTCP_PM_ATTR_LOC_ID = 5,
+	MPTCP_PM_ATTR_ADDR_REMOTE = 6,
+	__MPTCP_PM_ATTR_MAX = 7,
+};
+
+enum {
+	MPTCP_PM_ADDR_ATTR_UNSPEC = 0,
+	MPTCP_PM_ADDR_ATTR_FAMILY = 1,
+	MPTCP_PM_ADDR_ATTR_ID = 2,
+	MPTCP_PM_ADDR_ATTR_ADDR4 = 3,
+	MPTCP_PM_ADDR_ATTR_ADDR6 = 4,
+	MPTCP_PM_ADDR_ATTR_PORT = 5,
+	MPTCP_PM_ADDR_ATTR_FLAGS = 6,
+	MPTCP_PM_ADDR_ATTR_IF_IDX = 7,
+	__MPTCP_PM_ADDR_ATTR_MAX = 8,
+};
+
+enum {
+	MPTCP_PM_CMD_UNSPEC = 0,
+	MPTCP_PM_CMD_ADD_ADDR = 1,
+	MPTCP_PM_CMD_DEL_ADDR = 2,
+	MPTCP_PM_CMD_GET_ADDR = 3,
+	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
+	MPTCP_PM_CMD_SET_LIMITS = 5,
+	MPTCP_PM_CMD_GET_LIMITS = 6,
+	MPTCP_PM_CMD_SET_FLAGS = 7,
+	MPTCP_PM_CMD_ANNOUNCE = 8,
+	MPTCP_PM_CMD_REMOVE = 9,
+	MPTCP_PM_CMD_SUBFLOW_CREATE = 10,
+	MPTCP_PM_CMD_SUBFLOW_DESTROY = 11,
+	__MPTCP_PM_CMD_AFTER_LAST = 12,
+};
+
+enum mptcp_event_attr {
+	MPTCP_ATTR_UNSPEC = 0,
+	MPTCP_ATTR_TOKEN = 1,
+	MPTCP_ATTR_FAMILY = 2,
+	MPTCP_ATTR_LOC_ID = 3,
+	MPTCP_ATTR_REM_ID = 4,
+	MPTCP_ATTR_SADDR4 = 5,
+	MPTCP_ATTR_SADDR6 = 6,
+	MPTCP_ATTR_DADDR4 = 7,
+	MPTCP_ATTR_DADDR6 = 8,
+	MPTCP_ATTR_SPORT = 9,
+	MPTCP_ATTR_DPORT = 10,
+	MPTCP_ATTR_BACKUP = 11,
+	MPTCP_ATTR_ERROR = 12,
+	MPTCP_ATTR_FLAGS = 13,
+	MPTCP_ATTR_TIMEOUT = 14,
+	MPTCP_ATTR_IF_IDX = 15,
+	MPTCP_ATTR_RESET_REASON = 16,
+	MPTCP_ATTR_RESET_FLAGS = 17,
+	MPTCP_ATTR_SERVER_SIDE = 18,
+	__MPTCP_ATTR_AFTER_LAST = 19,
+};
+
+struct mptcp_pm_addr_entry {
+	struct list_head list;
+	struct mptcp_addr_info addr;
+	u8 flags;
+	int ifindex;
+	struct socket *lsk;
+};
+
+struct mptcp_pm_add_entry {
+	struct list_head list;
+	struct mptcp_addr_info addr;
+	struct timer_list add_timer;
+	struct mptcp_sock *sock;
+	u8 retrans_times;
+};
+
+struct pm_nl_pernet {
+	spinlock_t lock;
+	struct list_head local_addr_list;
+	unsigned int addrs;
+	unsigned int stale_loss_cnt;
+	unsigned int add_addr_signal_max;
+	unsigned int add_addr_accept_max;
+	unsigned int local_addr_max;
+	unsigned int subflows_max;
+	unsigned int next_id;
+	long unsigned int id_bitmap[4];
+};
+
+struct mptcp_info {
+	__u8 mptcpi_subflows;
+	__u8 mptcpi_add_addr_signal;
+	__u8 mptcpi_add_addr_accepted;
+	__u8 mptcpi_subflows_max;
+	__u8 mptcpi_add_addr_signal_max;
+	__u8 mptcpi_add_addr_accepted_max;
+	__u32 mptcpi_flags;
+	__u32 mptcpi_token;
+	__u64 mptcpi_write_seq;
+	__u64 mptcpi_snd_una;
+	__u64 mptcpi_rcv_nxt;
+	__u8 mptcpi_local_addr_used;
+	__u8 mptcpi_local_addr_max;
+	__u8 mptcpi_csum_enabled;
+};
+
+struct mptcp_subflow_data {
+	__u32 size_subflow_data;
+	__u32 num_subflows;
+	__u32 size_kernel;
+	__u32 size_user;
+};
+
+struct mptcp_subflow_addrs {
+	union {
+		__kernel_sa_family_t sa_family;
+		struct sockaddr sa_local;
+		struct sockaddr_in sin_local;
+		struct sockaddr_in6 sin6_local;
+		struct __kernel_sockaddr_storage ss_local;
+	};
+	union {
+		struct sockaddr sa_remote;
+		struct sockaddr_in sin_remote;
+		struct sockaddr_in6 sin6_remote;
+		struct __kernel_sockaddr_storage ss_remote;
+	};
+};
+
+struct warn_args;
+
+struct mptcp_diag_ctx {
+	long int s_slot;
+	long int s_num;
+	unsigned int l_slot;
+	unsigned int l_num;
+};
+
+struct join_entry {
+	u32 token;
+	u32 remote_nonce;
+	u32 local_nonce;
+	u8 join_id;
+	u8 local_id;
+	u8 backup;
+	u8 valid;
+};
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+};
+
+struct rc {
+	long int (*fill)(void *, long unsigned int);
+	uint8_t *ptr;
+	uint8_t *buffer;
+	uint8_t *buffer_end;
+	long int buffer_size;
+	uint32_t code;
+	uint32_t range;
+	uint32_t bound;
+	void (*error)(char *);
+};
+
+struct lzma_header {
+	uint8_t pos;
+	uint32_t dict_size;
+	uint64_t dst_size;
+} __attribute__((packed));
+
+struct writer {
+	uint8_t *buffer;
+	uint8_t previous_byte;
+	size_t buffer_pos;
+	int bufsize;
+	size_t global_pos;
+	long int (*flush)(void *, long unsigned int);
+	struct lzma_header *header;
+};
+
+struct cstate {
+	int state;
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+};
+
+struct group_data {
+	int limit[21];
+	int base[20];
+	int permute[258];
+	int minLen;
+	int maxLen;
+};
+
+struct bunzip_data {
+	int writeCopies;
+	int writePos;
+	int writeRunCountdown;
+	int writeCount;
+	int writeCurrent;
+	long int (*fill)(void *, long unsigned int);
+	long int inbufCount;
+	long int inbufPos;
+	unsigned char *inbuf;
+	unsigned int inbufBitCount;
+	unsigned int inbufBits;
+	unsigned int crc32Table[256];
+	unsigned int headerCRC;
+	unsigned int totalCRC;
+	unsigned int writeCRC;
+	unsigned int *dbuf;
+	unsigned int dbufSize;
+	unsigned char selectors[32768];
+	struct group_data groups[6];
+	int io_error;
+	int byteCount[256];
+	unsigned char symToByte[256];
+	unsigned char mtfSymbol[256];
+};
+
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
+};
+
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
+};
+
+enum {
+	ASSUME_PERFECT = 255,
+	ASSUME_VALID_DTB = 1,
+	ASSUME_VALID_INPUT = 2,
+	ASSUME_LATEST = 4,
+	ASSUME_NO_ROLLBACK = 8,
+	ASSUME_LIBFDT_ORDER = 16,
+	ASSUME_LIBFDT_FLAWLESS = 32,
+};
+
+struct fdt_reserve_entry {
+	fdt64_t address;
+	fdt64_t size;
+};
+
+struct fdt_node_header {
+	fdt32_t tag;
+	char name[0];
+};
+
+struct fdt_property {
+	fdt32_t tag;
+	fdt32_t len;
+	fdt32_t nameoff;
+	char data[0];
+};
+
+struct fdt_errtabent {
+	const char *str;
+};
+
+struct fprop_local_single {
+	long unsigned int events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct ida_bitmap {
+	long unsigned int bitmap[16];
+};
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+struct uevent_sock {
+	struct list_head list;
+	struct sock *sk;
+};
+
+struct maple_metadata {
+	unsigned char end;
+	unsigned char gap;
+};
+
+struct maple_pnode;
+
+struct maple_range_64 {
+	struct maple_pnode *parent;
+	long unsigned int pivot[15];
+	union {
+		void *slot[16];
+		struct {
+			void *pad[15];
+			struct maple_metadata meta;
+		};
+	};
+};
+
+struct maple_arange_64 {
+	struct maple_pnode *parent;
+	long unsigned int pivot[9];
+	void *slot[10];
+	long unsigned int gap[10];
+	struct maple_metadata meta;
+};
+
+struct maple_topiary {
+	struct maple_pnode *parent;
+	struct maple_enode *next;
+};
+
+enum maple_type {
+	maple_dense = 0,
+	maple_leaf_64 = 1,
+	maple_range_64 = 2,
+	maple_arange_64 = 3,
+};
+
+struct maple_node {
+	union {
+		struct {
+			struct maple_pnode *parent;
+			void *slot[31];
+		};
+		struct {
+			void *pad;
+			struct callback_head rcu;
+			struct maple_enode *piv_parent;
+			unsigned char parent_slot;
+			enum maple_type type;
+			unsigned char slot_len;
+			unsigned int ma_flags;
+		};
+		struct maple_range_64 mr64;
+		struct maple_arange_64 ma64;
+		struct maple_alloc alloc;
+	};
+};
+
+struct ma_topiary {
+	struct maple_enode *head;
+	struct maple_enode *tail;
+	struct maple_tree *mtree;
+};
+
+struct ma_wr_state {
+	struct ma_state *mas;
+	struct maple_node *node;
+	long unsigned int r_min;
+	long unsigned int r_max;
+	enum maple_type type;
+	unsigned char offset_end;
+	unsigned char node_end;
+	long unsigned int *pivots;
+	long unsigned int end_piv;
+	void **slots;
+	void *entry;
+	void *content;
+};
+
+struct trace_event_raw_ma_op {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_read {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_write {
+	struct trace_entry ent;
+	const char *fn;
+	long unsigned int min;
+	long unsigned int max;
+	long unsigned int index;
+	long unsigned int last;
+	long unsigned int piv;
+	void *val;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ma_op {};
+
+struct trace_event_data_offsets_ma_read {};
+
+struct trace_event_data_offsets_ma_write {};
+
+typedef void (*btf_trace_ma_op)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_read)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_write)(void *, const char *, struct ma_state *, long unsigned int, void *);
+
+struct maple_big_node {
+	struct maple_pnode *parent;
+	long unsigned int pivot[33];
+	union {
+		struct maple_enode *slot[34];
+		struct {
+			long unsigned int padding[21];
+			long unsigned int gap[21];
+		};
+	};
+	unsigned char b_end;
+	enum maple_type type;
+};
+
+struct maple_subtree_state {
+	struct ma_state *orig_l;
+	struct ma_state *orig_r;
+	struct ma_state *l;
+	struct ma_state *m;
+	struct ma_state *r;
+	struct ma_topiary *free;
+	struct ma_topiary *destroy;
+	struct maple_big_node *bn;
+};
+
+enum format_type {
+	FORMAT_TYPE_NONE = 0,
+	FORMAT_TYPE_WIDTH = 1,
+	FORMAT_TYPE_PRECISION = 2,
+	FORMAT_TYPE_CHAR = 3,
+	FORMAT_TYPE_STR = 4,
+	FORMAT_TYPE_PTR = 5,
+	FORMAT_TYPE_PERCENT_CHAR = 6,
+	FORMAT_TYPE_INVALID = 7,
+	FORMAT_TYPE_LONG_LONG = 8,
+	FORMAT_TYPE_ULONG = 9,
+	FORMAT_TYPE_LONG = 10,
+	FORMAT_TYPE_UBYTE = 11,
+	FORMAT_TYPE_BYTE = 12,
+	FORMAT_TYPE_USHORT = 13,
+	FORMAT_TYPE_SHORT = 14,
+	FORMAT_TYPE_UINT = 15,
+	FORMAT_TYPE_INT = 16,
+	FORMAT_TYPE_SIZE_T = 17,
+	FORMAT_TYPE_PTRDIFF = 18,
+};
+
+struct printf_spec {
+	unsigned int type: 8;
+	int field_width: 24;
+	unsigned int flags: 8;
+	unsigned int base: 8;
+	int precision: 16;
+};
+
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
+struct efi_generic_dev_path {
+	u8 type;
+	u8 sub_type;
+	u16 length;
+};
+
+typedef union {
+	struct {
+		u32 revision;
+		efi_handle_t parent_handle;
+		efi_system_table_t *system_table;
+		efi_handle_t device_handle;
+		void *file_path;
+		void *reserved;
+		u32 load_options_size;
+		void *load_options;
+		void *image_base;
+		__u64 image_size;
+		unsigned int image_code_type;
+		unsigned int image_data_type;
+		efi_status_t (*unload)(efi_handle_t);
+	};
+	struct {
+		u32 revision;
+		u32 parent_handle;
+		u32 system_table;
+		u32 device_handle;
+		u32 file_path;
+		u32 reserved;
+		u32 load_options_size;
+		u32 load_options;
+		u32 image_base;
+		__u64 image_size;
+		u32 image_code_type;
+		u32 image_data_type;
+		u32 unload;
+	} mixed_mode;
+} efi_loaded_image_t;
+
+struct efi_boot_memmap {
+	long unsigned int map_size;
+	long unsigned int desc_size;
+	u32 desc_ver;
+	long unsigned int map_key;
+	long unsigned int buff_size;
+	efi_memory_desc_t map[0];
+};
+
+enum efi_secureboot_mode {
+	efi_secureboot_mode_unset = 0,
+	efi_secureboot_mode_unknown = 1,
+	efi_secureboot_mode_disabled = 2,
+	efi_secureboot_mode_enabled = 3,
+};
+
+typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+
+struct exit_boot_struct {
+	struct efi_boot_memmap *boot_memmap;
+	efi_memory_desc_t *runtime_map;
+	int runtime_entry_count;
+	void *new_fdt_addr;
+};
+
+typedef struct {
+	u32 red_mask;
+	u32 green_mask;
+	u32 blue_mask;
+	u32 reserved_mask;
+} efi_pixel_bitmask_t;
+
+typedef struct {
+	u32 version;
+	u32 horizontal_resolution;
+	u32 vertical_resolution;
+	int pixel_format;
+	efi_pixel_bitmask_t pixel_information;
+	u32 pixels_per_scan_line;
+} efi_graphics_output_mode_info_t;
+
+union efi_graphics_output_protocol_mode {
+	struct {
+		u32 max_mode;
+		u32 mode;
+		efi_graphics_output_mode_info_t *info;
+		long unsigned int size_of_info;
+		efi_physical_addr_t frame_buffer_base;
+		long unsigned int frame_buffer_size;
+	};
+	struct {
+		u32 max_mode;
+		u32 mode;
+		u32 info;
+		u32 size_of_info;
+		u64 frame_buffer_base;
+		u32 frame_buffer_size;
+	} mixed_mode;
+};
+
+typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
+
+union efi_graphics_output_protocol;
+
+typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
+
+union efi_graphics_output_protocol {
+	struct {
+		efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, long unsigned int *, efi_graphics_output_mode_info_t **);
+		efi_status_t (*set_mode)(efi_graphics_output_protocol_t *, u32);
+		void *blt;
+		efi_graphics_output_protocol_mode_t *mode;
+	};
+	struct {
+		u32 query_mode;
+		u32 set_mode;
+		u32 blt;
+		u32 mode;
+	} mixed_mode;
+};
+
+enum efi_cmdline_option {
+	EFI_CMDLINE_NONE = 0,
+	EFI_CMDLINE_MODE_NUM = 1,
+	EFI_CMDLINE_RES = 2,
+	EFI_CMDLINE_AUTO = 3,
+	EFI_CMDLINE_LIST = 4,
+};
+
+union efi_rng_protocol;
+
+typedef union efi_rng_protocol efi_rng_protocol_t;
+
+union efi_rng_protocol {
+	struct {
+		efi_status_t (*get_info)(efi_rng_protocol_t *, long unsigned int *, efi_guid_t *);
+		efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, long unsigned int, u8 *);
+	};
+	struct {
+		u32 get_info;
+		u32 get_rng;
+	} mixed_mode;
+};
+
+struct riscv_efi_boot_protocol {
+	u64 revision;
+	efi_status_t (*get_boot_hartid)(struct riscv_efi_boot_protocol *, long unsigned int *);
+};
+
+typedef void (*jump_kernel_func)(long unsigned int, long unsigned int);
+
+struct efi_vendor_dev_path {
+	struct efi_generic_dev_path header;
+	efi_guid_t vendorguid;
+	u8 vendordata[0];
+};
+
+typedef u32 efi_tcg2_event_log_format;
+
+struct efi_tcg2_event {
+	u32 event_size;
+	struct {
+		u32 header_size;
+		u16 header_version;
+		u32 pcr_index;
+		u32 event_type;
+	} __attribute__((packed)) event_header;
+} __attribute__((packed));
+
+struct efi_tcg2_tagged_event {
+	u32 tagged_event_id;
+	u32 tagged_event_data_size;
+};
+
+typedef struct efi_tcg2_event efi_tcg2_event_t;
+
+typedef struct efi_tcg2_tagged_event efi_tcg2_tagged_event_t;
+
+union efi_tcg2_protocol;
+
+typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
+
+union efi_tcg2_protocol {
+	struct {
+		void *get_capability;
+		efi_status_t (*get_event_log)(efi_tcg2_protocol_t *, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
+		efi_status_t (*hash_log_extend_event)(efi_tcg2_protocol_t *, u64, efi_physical_addr_t, u64, const efi_tcg2_event_t *);
+		void *submit_command;
+		void *get_active_pcr_banks;
+		void *set_active_pcr_banks;
+		void *get_result_of_set_active_pcr_banks;
+	};
+	struct {
+		u32 get_capability;
+		u32 get_event_log;
+		u32 hash_log_extend_event;
+		u32 submit_command;
+		u32 get_active_pcr_banks;
+		u32 set_active_pcr_banks;
+		u32 get_result_of_set_active_pcr_banks;
+	} mixed_mode;
+};
+
+union efi_load_file_protocol;
+
+typedef union efi_load_file_protocol efi_load_file_protocol_t;
+
+union efi_load_file_protocol {
+	struct {
+		efi_status_t (*load_file)(efi_load_file_protocol_t *, efi_device_path_protocol_t *, bool, long unsigned int *, void *);
+	};
+	struct {
+		u32 load_file;
+	} mixed_mode;
+};
+
+typedef union efi_load_file_protocol efi_load_file2_protocol_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	u8 variable_data[0];
+} __attribute__((packed)) efi_load_option_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	const efi_char16_t *description;
+	const efi_device_path_protocol_t *file_path_list;
+	u32 optional_data_size;
+	const void *optional_data;
+} efi_load_option_unpacked_t;
+
+enum efistub_event {
+	EFISTUB_EVT_INITRD = 0,
+	EFISTUB_EVT_LOAD_OPTIONS = 1,
+	EFISTUB_EVT_COUNT = 2,
+};
+
+struct efi_measured_event {
+	efi_tcg2_event_t event_data;
+	efi_tcg2_tagged_event_t tagged_event;
+	u8 tagged_event_data[0];
+} __attribute__((packed));
+
+struct tcpa_event {
+	u32 pcr_index;
+	u32 event_type;
+	u8 pcr_value[20];
+	u32 event_size;
+	u8 event_data[0];
+};
+
+typedef enum {
+	EfiPciIoWidthUint8 = 0,
+	EfiPciIoWidthUint16 = 1,
+	EfiPciIoWidthUint32 = 2,
+	EfiPciIoWidthUint64 = 3,
+	EfiPciIoWidthFifoUint8 = 4,
+	EfiPciIoWidthFifoUint16 = 5,
+	EfiPciIoWidthFifoUint32 = 6,
+	EfiPciIoWidthFifoUint64 = 7,
+	EfiPciIoWidthFillUint8 = 8,
+	EfiPciIoWidthFillUint16 = 9,
+	EfiPciIoWidthFillUint32 = 10,
+	EfiPciIoWidthFillUint64 = 11,
+	EfiPciIoWidthMaximum = 12,
+} EFI_PCI_IO_PROTOCOL_WIDTH;
+
+typedef struct {
+	u32 read;
+	u32 write;
+} efi_pci_io_protocol_access_32_t;
+
+typedef struct {
+	void *read;
+	void *write;
+} efi_pci_io_protocol_access_t;
+
+union efi_pci_io_protocol;
+
+typedef union efi_pci_io_protocol efi_pci_io_protocol_t;
+
+typedef efi_status_t (*efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, EFI_PCI_IO_PROTOCOL_WIDTH, u32, long unsigned int, void *);
+
+typedef struct {
+	efi_pci_io_protocol_cfg_t read;
+	efi_pci_io_protocol_cfg_t write;
+} efi_pci_io_protocol_config_access_t;
+
+union efi_pci_io_protocol {
+	struct {
+		void *poll_mem;
+		void *poll_io;
+		efi_pci_io_protocol_access_t mem;
+		efi_pci_io_protocol_access_t io;
+		efi_pci_io_protocol_config_access_t pci;
+		void *copy_mem;
+		void *map;
+		void *unmap;
+		void *allocate_buffer;
+		void *free_buffer;
+		void *flush;
+		efi_status_t (*get_location)(efi_pci_io_protocol_t *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);
+		void *attributes;
+		void *get_bar_attributes;
+		void *set_bar_attributes;
+		uint64_t romsize;
+		void *romimage;
+	};
+	struct {
+		u32 poll_mem;
+		u32 poll_io;
+		efi_pci_io_protocol_access_32_t mem;
+		efi_pci_io_protocol_access_32_t io;
+		efi_pci_io_protocol_access_32_t pci;
+		u32 copy_mem;
+		u32 map;
+		u32 unmap;
+		u32 allocate_buffer;
+		u32 free_buffer;
+		u32 flush;
+		u32 get_location;
+		u32 attributes;
+		u32 get_bar_attributes;
+		u32 set_bar_attributes;
+		u64 romsize;
+		u32 romimage;
+	} mixed_mode;
+};
+
+struct efi_file_path_dev_path {
+	struct efi_generic_dev_path header;
+	efi_char16_t filename[0];
+};
+
+union efi_device_path_from_text_protocol {
+	struct {
+		efi_device_path_protocol_t * (*convert_text_to_device_node)(const efi_char16_t *);
+		efi_device_path_protocol_t * (*convert_text_to_device_path)(const efi_char16_t *);
+	};
+	struct {
+		u32 convert_text_to_device_node;
+		u32 convert_text_to_device_path;
+	} mixed_mode;
+};
+
+typedef union efi_device_path_from_text_protocol efi_device_path_from_text_protocol_t;
+
+typedef struct {
+	u64 size;
+	u64 file_size;
+	u64 phys_size;
+	efi_time_t create_time;
+	efi_time_t last_access_time;
+	efi_time_t modification_time;
+	__u64 attribute;
+	efi_char16_t filename[0];
+} efi_file_info_t;
+
+union efi_file_protocol;
+
+typedef union efi_file_protocol efi_file_protocol_t;
+
+union efi_file_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
+		efi_status_t (*close)(efi_file_protocol_t *);
+		efi_status_t (*delete)(efi_file_protocol_t *);
+		efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
+		efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
+		efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
+		efi_status_t (*set_position)(efi_file_protocol_t *, u64);
+		efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
+		efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
+		efi_status_t (*flush)(efi_file_protocol_t *);
+	};
+	struct {
+		u64 revision;
+		u32 open;
+		u32 close;
+		u32 delete;
+		u32 read;
+		u32 write;
+		u32 get_position;
+		u32 set_position;
+		u32 get_info;
+		u32 set_info;
+		u32 flush;
+	} mixed_mode;
+};
+
+union efi_simple_file_system_protocol;
+
+typedef union efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
+
+union efi_simple_file_system_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
+	};
+	struct {
+		u64 revision;
+		u32 open_volume;
+	} mixed_mode;
+};
+
+struct finfo {
+	efi_file_info_t info;
+	efi_char16_t filename[256];
+};
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute pop
+#endif
+
+#endif /* __VMLINUX_H__ */
diff --git a/libbpf-tools/runqlat.bpf.c b/libbpf-tools/runqlat.bpf.c
index 6e103f0..76e0553 100644
--- a/libbpf-tools/runqlat.bpf.c
+++ b/libbpf-tools/runqlat.bpf.c
@@ -12,6 +12,7 @@
 #define MAX_ENTRIES	10240
 #define TASK_RUNNING 	0
 
+const volatile bool filter_cg = false;
 const volatile bool targ_per_process = false;
 const volatile bool targ_per_thread = false;
 const volatile bool targ_per_pidns = false;
@@ -19,6 +20,13 @@
 const volatile pid_t targ_tgid = 0;
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, u32);
@@ -34,8 +42,7 @@
 	__type(value, struct hist);
 } hists SEC(".maps");
 
-static __always_inline
-int trace_enqueue(u32 tgid, u32 pid)
+static int trace_enqueue(u32 tgid, u32 pid)
 {
 	u64 ts;
 
@@ -45,11 +52,11 @@
 		return 0;
 
 	ts = bpf_ktime_get_ns();
-	bpf_map_update_elem(&start, &pid, &ts, 0);
+	bpf_map_update_elem(&start, &pid, &ts, BPF_ANY);
 	return 0;
 }
 
-static __always_inline unsigned int pid_namespace(struct task_struct *task)
+static unsigned int pid_namespace(struct task_struct *task)
 {
 	struct pid *pid;
 	unsigned int level;
@@ -67,31 +74,20 @@
 	return inum;
 }
 
-SEC("tp_btf/sched_wakeup")
-int BPF_PROG(sched_wakeup, struct task_struct *p)
-{
-	return trace_enqueue(p->tgid, p->pid);
-}
-
-SEC("tp_btf/sched_wakeup_new")
-int BPF_PROG(sched_wakeup_new, struct task_struct *p)
-{
-	return trace_enqueue(p->tgid, p->pid);
-}
-
-SEC("tp_btf/sched_switch")
-int BPF_PROG(sched_swith, bool preempt, struct task_struct *prev,
-	struct task_struct *next)
+static int handle_switch(bool preempt, struct task_struct *prev, struct task_struct *next)
 {
 	struct hist *histp;
 	u64 *tsp, slot;
 	u32 pid, hkey;
 	s64 delta;
 
-	if (get_task_state(prev) == TASK_RUNNING)
-		trace_enqueue(prev->tgid, prev->pid);
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
 
-	pid = next->pid;
+	if (get_task_state(prev) == TASK_RUNNING)
+		trace_enqueue(BPF_CORE_READ(prev, tgid), BPF_CORE_READ(prev, pid));
+
+	pid = BPF_CORE_READ(next, pid);
 
 	tsp = bpf_map_lookup_elem(&start, &pid);
 	if (!tsp)
@@ -101,7 +97,7 @@
 		goto cleanup;
 
 	if (targ_per_process)
-		hkey = next->tgid;
+		hkey = BPF_CORE_READ(next, tgid);
 	else if (targ_per_thread)
 		hkey = pid;
 	else if (targ_per_pidns)
@@ -128,4 +124,52 @@
 	return 0;
 }
 
+SEC("tp_btf/sched_wakeup")
+int BPF_PROG(sched_wakeup, struct task_struct *p)
+{
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	return trace_enqueue(p->tgid, p->pid);
+}
+
+SEC("tp_btf/sched_wakeup_new")
+int BPF_PROG(sched_wakeup_new, struct task_struct *p)
+{
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	return trace_enqueue(p->tgid, p->pid);
+}
+
+SEC("tp_btf/sched_switch")
+int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
+{
+	return handle_switch(preempt, prev, next);
+}
+
+SEC("raw_tp/sched_wakeup")
+int BPF_PROG(handle_sched_wakeup, struct task_struct *p)
+{
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	return trace_enqueue(BPF_CORE_READ(p, tgid), BPF_CORE_READ(p, pid));
+}
+
+SEC("raw_tp/sched_wakeup_new")
+int BPF_PROG(handle_sched_wakeup_new, struct task_struct *p)
+{
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	return trace_enqueue(BPF_CORE_READ(p, tgid), BPF_CORE_READ(p, pid));
+}
+
+SEC("raw_tp/sched_switch")
+int BPF_PROG(handle_sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
+{
+	return handle_switch(preempt, prev, next);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/runqlat.c b/libbpf-tools/runqlat.c
index 5a60b87..4c4c170 100644
--- a/libbpf-tools/runqlat.c
+++ b/libbpf-tools/runqlat.c
@@ -10,6 +10,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "runqlat.h"
@@ -26,6 +27,8 @@
 	bool per_pidns;
 	bool timestamp;
 	bool verbose;
+	char *cgroupspath;
+	bool cg;
 } env = {
 	.interval = 99999999,
 	.times = 99999999,
@@ -39,14 +42,15 @@
 const char argp_program_doc[] =
 "Summarize run queue (scheduler) latency as a histogram.\n"
 "\n"
-"USAGE: runqlat [--help] [-T] [-m] [--pidnss] [-L] [-P] [-p PID] [interval] [count]\n"
+"USAGE: runqlat [--help] [-T] [-m] [--pidnss] [-L] [-P] [-p PID] [interval] [count] [-c CG]\n"
 "\n"
 "EXAMPLES:\n"
 "    runqlat         # summarize run queue latency as a histogram\n"
 "    runqlat 1 10    # print 1 second summaries, 10 times\n"
 "    runqlat -mT 1   # 1s summaries, milliseconds, and timestamps\n"
 "    runqlat -P      # show each PID separately\n"
-"    runqlat -p 185  # trace PID 185 only\n";
+"    runqlat -p 185  # trace PID 185 only\n"
+"    runqlat -c CG   # Trace process under cgroupsPath CG\n";
 
 #define OPT_PIDNSS	1	/* --pidnss */
 
@@ -58,6 +62,7 @@
 	{ "tids", 'L', NULL, 0, "Print a histogram per thread ID" },
 	{ "pid", 'p', "PID", 0, "Trace this PID only" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path"},
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
@@ -96,6 +101,10 @@
 	case 'T':
 		env.timestamp = true;
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case ARGP_KEY_ARG:
 		errno = 0;
 		if (pos_args == 0) {
@@ -182,6 +191,8 @@
 	char ts[32];
 	time_t t;
 	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
 	if (err)
@@ -193,7 +204,6 @@
 		return 1;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = runqlat_bpf__open();
@@ -208,6 +218,17 @@
 	obj->rodata->targ_per_pidns = env.per_pidns;
 	obj->rodata->targ_ms = env.milliseconds;
 	obj->rodata->targ_tgid = env.pid;
+	obj->rodata->filter_cg = env.cg;
+
+	if (probe_tp_btf("sched_wakeup")) {
+		bpf_program__set_autoload(obj->progs.handle_sched_wakeup, false);
+		bpf_program__set_autoload(obj->progs.handle_sched_wakeup_new, false);
+		bpf_program__set_autoload(obj->progs.handle_sched_switch, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.sched_wakeup, false);
+		bpf_program__set_autoload(obj->progs.sched_wakeup_new, false);
+		bpf_program__set_autoload(obj->progs.sched_switch, false);
+	}
 
 	err = runqlat_bpf__load(obj);
 	if (err) {
@@ -215,6 +236,21 @@
 		goto cleanup;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup;
+		}
+	}
+
 	err = runqlat_bpf__attach(obj);
 	if (err) {
 		fprintf(stderr, "failed to attach BPF programs\n");
@@ -247,6 +283,8 @@
 
 cleanup:
 	runqlat_bpf__destroy(obj);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/runqlen.bpf.c b/libbpf-tools/runqlen.bpf.c
index 260a5fa..de99823 100644
--- a/libbpf-tools/runqlen.bpf.c
+++ b/libbpf-tools/runqlen.bpf.c
@@ -7,6 +7,7 @@
 #include "runqlen.h"
 
 const volatile bool targ_per_cpu = false;
+const volatile bool targ_host = false;
 
 struct hist hists[MAX_CPU_NR] = {};
 
@@ -18,7 +19,10 @@
 	u64 slot, cpu = 0;
 
 	task = (void*)bpf_get_current_task();
-	slot = BPF_CORE_READ(task, se.cfs_rq, nr_running);
+	if (targ_host)
+		slot = BPF_CORE_READ(task, se.cfs_rq, rq, nr_running);
+	else
+		slot = BPF_CORE_READ(task, se.cfs_rq, nr_running);
 	/*
 	 * Calculate run queue length by subtracting the currently running task,
 	 * if present. len 0 == idle, len 1 == one running task.
diff --git a/libbpf-tools/runqlen.c b/libbpf-tools/runqlen.c
index 8c77693..c710949 100644
--- a/libbpf-tools/runqlen.c
+++ b/libbpf-tools/runqlen.c
@@ -16,6 +16,7 @@
 #include <bpf/bpf.h>
 #include "runqlen.h"
 #include "runqlen.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define max(x, y) ({				 \
@@ -28,6 +29,7 @@
 	bool per_cpu;
 	bool runqocc;
 	bool timestamp;
+	bool host;
 	time_t interval;
 	int freq;
 	int times;
@@ -54,6 +56,7 @@
 "    runqlen -T 1    # 1s summaries and timestamps\n"
 "    runqlen -O      # report run queue occupancy\n"
 "    runqlen -C      # show each CPU separately\n"
+"    runqlen -H      # show nr_running from host's rq instead of cfs_rq\n"
 "    runqlen -f 199  # sample at 199HZ\n";
 
 static const struct argp_option opts[] = {
@@ -62,6 +65,7 @@
 	{ "runqocc", 'O', NULL, 0, "Report run queue occupancy" },
 	{ "timestamp", 'T', NULL, 0, "Include timestamp on output" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "host", 'H', NULL, 0, "Report nr_running from host's rq" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
 };
@@ -86,6 +90,9 @@
 	case 'T':
 		env.timestamp = true;
 		break;
+	case 'H':
+		env.host = true;
+		break;
 	case 'f':
 		errno = 0;
 		env.freq = strtol(arg, NULL, 10);
@@ -214,6 +221,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -230,7 +238,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	nr_cpus = libbpf_num_possible_cpus();
@@ -245,7 +252,13 @@
 		return 1;
 	}
 
-	obj = runqlen_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = runqlen_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -253,6 +266,7 @@
 
 	/* initialize global data (filtering options) */
 	obj->rodata->targ_per_cpu = env.per_cpu;
+	obj->rodata->targ_host = env.host;
 
 	err = runqlen_bpf__load(obj);
 	if (err) {
@@ -297,6 +311,7 @@
 	for (i = 0; i < nr_cpus; i++)
 		bpf_link__destroy(links[i]);
 	runqlen_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/runqslower.bpf.c b/libbpf-tools/runqslower.bpf.c
index 277dbc1..e99644d 100644
--- a/libbpf-tools/runqslower.bpf.c
+++ b/libbpf-tools/runqslower.bpf.c
@@ -1,7 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0
 // Copyright (c) 2019 Facebook
 #include <vmlinux.h>
+#include <bpf/bpf_core_read.h>
 #include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
 #include "runqslower.h"
 #include "core_fixes.bpf.h"
 
@@ -25,8 +27,7 @@
 } events SEC(".maps");
 
 /* record enqueue timestamp */
-static __always_inline
-int trace_enqueue(u32 tgid, u32 pid)
+static int trace_enqueue(u32 tgid, u32 pid)
 {
 	u64 ts;
 
@@ -42,41 +43,17 @@
 	return 0;
 }
 
-SEC("tp_btf/sched_wakeup")
-int handle__sched_wakeup(u64 *ctx)
+static int handle_switch(void *ctx, struct task_struct *prev, struct task_struct *next)
 {
-	/* TP_PROTO(struct task_struct *p) */
-	struct task_struct *p = (void *)ctx[0];
-
-	return trace_enqueue(p->tgid, p->pid);
-}
-
-SEC("tp_btf/sched_wakeup_new")
-int handle__sched_wakeup_new(u64 *ctx)
-{
-	/* TP_PROTO(struct task_struct *p) */
-	struct task_struct *p = (void *)ctx[0];
-
-	return trace_enqueue(p->tgid, p->pid);
-}
-
-SEC("tp_btf/sched_switch")
-int handle__sched_switch(u64 *ctx)
-{
-	/* TP_PROTO(bool preempt, struct task_struct *prev,
-	 *	    struct task_struct *next)
-	 */
-	struct task_struct *prev = (struct task_struct *)ctx[1];
-	struct task_struct *next = (struct task_struct *)ctx[2];
 	struct event event = {};
 	u64 *tsp, delta_us;
 	u32 pid;
 
 	/* ivcsw: treat like an enqueue event and store timestamp */
 	if (get_task_state(prev) == TASK_RUNNING)
-		trace_enqueue(prev->tgid, prev->pid);
+		trace_enqueue(BPF_CORE_READ(prev, tgid), BPF_CORE_READ(prev, pid));
 
-	pid = next->pid;
+	pid = BPF_CORE_READ(next, pid);
 
 	/* fetch timestamp and calculate delta */
 	tsp = bpf_map_lookup_elem(&start, &pid);
@@ -88,7 +65,7 @@
 		return 0;
 
 	event.pid = pid;
-	event.prev_pid = prev->pid;
+	event.prev_pid = BPF_CORE_READ(prev, pid);
 	event.delta_us = delta_us;
 	bpf_probe_read_kernel_str(&event.task, sizeof(event.task), next->comm);
 	bpf_probe_read_kernel_str(&event.prev_task, sizeof(event.prev_task), prev->comm);
@@ -101,4 +78,40 @@
 	return 0;
 }
 
+SEC("tp_btf/sched_wakeup")
+int BPF_PROG(sched_wakeup, struct task_struct *p)
+{
+	return trace_enqueue(p->tgid, p->pid);
+}
+
+SEC("tp_btf/sched_wakeup_new")
+int BPF_PROG(sched_wakeup_new, struct task_struct *p)
+{
+	return trace_enqueue(p->tgid, p->pid);
+}
+
+SEC("tp_btf/sched_switch")
+int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
+{
+	return handle_switch(ctx, prev, next);
+}
+
+SEC("raw_tp/sched_wakeup")
+int BPF_PROG(handle_sched_wakeup, struct task_struct *p)
+{
+	return trace_enqueue(BPF_CORE_READ(p, tgid), BPF_CORE_READ(p, pid));
+}
+
+SEC("raw_tp/sched_wakeup_new")
+int BPF_PROG(handle_sched_wakeup_new, struct task_struct *p)
+{
+	return trace_enqueue(BPF_CORE_READ(p, tgid), BPF_CORE_READ(p, pid));
+}
+
+SEC("raw_tp/sched_switch")
+int BPF_PROG(handle_sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
+{
+	return handle_switch(ctx, prev, next);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/runqslower.c b/libbpf-tools/runqslower.c
index b038173..cbf2ff0 100644
--- a/libbpf-tools/runqslower.c
+++ b/libbpf-tools/runqslower.c
@@ -153,7 +153,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = runqslower_bpf__open();
@@ -167,6 +166,16 @@
 	obj->rodata->targ_pid = env.tid;
 	obj->rodata->min_us = env.min_us;
 
+	if (probe_tp_btf("sched_wakeup")) {
+		bpf_program__set_autoload(obj->progs.handle_sched_wakeup, false);
+		bpf_program__set_autoload(obj->progs.handle_sched_wakeup_new, false);
+		bpf_program__set_autoload(obj->progs.handle_sched_switch, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.sched_wakeup, false);
+		bpf_program__set_autoload(obj->progs.sched_wakeup_new, false);
+		bpf_program__set_autoload(obj->progs.sched_switch, false);
+	}
+
 	err = runqslower_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
diff --git a/libbpf-tools/sigsnoop.bpf.c b/libbpf-tools/sigsnoop.bpf.c
new file mode 100644
index 0000000..e03981f
--- /dev/null
+++ b/libbpf-tools/sigsnoop.bpf.c
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2021~2022 Hengqi Chen */
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include "sigsnoop.h"
+
+#define MAX_ENTRIES	10240
+
+const volatile pid_t filtered_pid = 0;
+const volatile int target_signal = 0;
+const volatile bool failed_only = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, __u32);
+	__type(value, struct event);
+} values SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__uint(key_size, sizeof(__u32));
+	__uint(value_size, sizeof(__u32));
+} events SEC(".maps");
+
+static int probe_entry(pid_t tpid, int sig)
+{
+	struct event event = {};
+	__u64 pid_tgid;
+	__u32 pid, tid;
+
+	if (target_signal && sig != target_signal)
+		return 0;
+
+	pid_tgid = bpf_get_current_pid_tgid();
+	pid = pid_tgid >> 32;
+	tid = (__u32)pid_tgid;
+	if (filtered_pid && pid != filtered_pid)
+		return 0;
+
+	event.pid = pid;
+	event.tpid = tpid;
+	event.sig = sig;
+	bpf_get_current_comm(event.comm, sizeof(event.comm));
+	bpf_map_update_elem(&values, &tid, &event, BPF_ANY);
+	return 0;
+}
+
+static int probe_exit(void *ctx, int ret)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 tid = (__u32)pid_tgid;
+	struct event *eventp;
+
+	eventp = bpf_map_lookup_elem(&values, &tid);
+	if (!eventp)
+		return 0;
+
+	if (failed_only && ret >= 0)
+		goto cleanup;
+
+	eventp->ret = ret;
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, eventp, sizeof(*eventp));
+
+cleanup:
+	bpf_map_delete_elem(&values, &tid);
+	return 0;
+}
+
+SEC("tracepoint/syscalls/sys_enter_kill")
+int kill_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	pid_t tpid = (pid_t)ctx->args[0];
+	int sig = (int)ctx->args[1];
+
+	return probe_entry(tpid, sig);
+}
+
+SEC("tracepoint/syscalls/sys_exit_kill")
+int kill_exit(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_exit(ctx, ctx->ret);
+}
+
+SEC("tracepoint/syscalls/sys_enter_tkill")
+int tkill_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	pid_t tpid = (pid_t)ctx->args[0];
+	int sig = (int)ctx->args[1];
+
+	return probe_entry(tpid, sig);
+}
+
+SEC("tracepoint/syscalls/sys_exit_tkill")
+int tkill_exit(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_exit(ctx, ctx->ret);
+}
+
+SEC("tracepoint/syscalls/sys_enter_tgkill")
+int tgkill_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	pid_t tpid = (pid_t)ctx->args[1];
+	int sig = (int)ctx->args[2];
+
+	return probe_entry(tpid, sig);
+}
+
+SEC("tracepoint/syscalls/sys_exit_tgkill")
+int tgkill_exit(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_exit(ctx, ctx->ret);
+}
+
+SEC("tracepoint/signal/signal_generate")
+int sig_trace(struct trace_event_raw_signal_generate *ctx)
+{
+	struct event event = {};
+	pid_t tpid = ctx->pid;
+	int ret = ctx->errno;
+	int sig = ctx->sig;
+	__u64 pid_tgid;
+	__u32 pid;
+
+	if (failed_only && ret == 0)
+		return 0;
+
+	if (target_signal && sig != target_signal)
+		return 0;
+
+	pid_tgid = bpf_get_current_pid_tgid();
+	pid = pid_tgid >> 32;
+	if (filtered_pid && pid != filtered_pid)
+		return 0;
+
+	event.pid = pid;
+	event.tpid = tpid;
+	event.sig = sig;
+	event.ret = ret;
+	bpf_get_current_comm(event.comm, sizeof(event.comm));
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+	return 0;
+}
+
+char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/sigsnoop.c b/libbpf-tools/sigsnoop.c
new file mode 100644
index 0000000..7a03d7f
--- /dev/null
+++ b/libbpf-tools/sigsnoop.c
@@ -0,0 +1,264 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+
+/*
+ * sigsnoop	Trace standard and real-time signals.
+ *
+ * Copyright (c) 2021~2022 Hengqi Chen
+ *
+ * 08-Aug-2021   Hengqi Chen   Created this.
+ */
+#include <argp.h>
+#include <libgen.h>
+#include <signal.h>
+#include <time.h>
+
+#include <bpf/bpf.h>
+#include "sigsnoop.h"
+#include "sigsnoop.skel.h"
+
+#define PERF_BUFFER_PAGES	16
+#define PERF_POLL_TIMEOUT_MS	100
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+static volatile sig_atomic_t exiting = 0;
+
+static pid_t target_pid = 0;
+static int target_signal = 0;
+static bool failed_only = false;
+static bool kill_only = false;
+static bool signal_name = false;
+static bool verbose = false;
+
+static const char *sig_name[] = {
+	[0] = "N/A",
+	[1] = "SIGHUP",
+	[2] = "SIGINT",
+	[3] = "SIGQUIT",
+	[4] = "SIGILL",
+	[5] = "SIGTRAP",
+	[6] = "SIGABRT",
+	[7] = "SIGBUS",
+	[8] = "SIGFPE",
+	[9] = "SIGKILL",
+	[10] = "SIGUSR1",
+	[11] = "SIGSEGV",
+	[12] = "SIGUSR2",
+	[13] = "SIGPIPE",
+	[14] = "SIGALRM",
+	[15] = "SIGTERM",
+	[16] = "SIGSTKFLT",
+	[17] = "SIGCHLD",
+	[18] = "SIGCONT",
+	[19] = "SIGSTOP",
+	[20] = "SIGTSTP",
+	[21] = "SIGTTIN",
+	[22] = "SIGTTOU",
+	[23] = "SIGURG",
+	[24] = "SIGXCPU",
+	[25] = "SIGXFSZ",
+	[26] = "SIGVTALRM",
+	[27] = "SIGPROF",
+	[28] = "SIGWINCH",
+	[29] = "SIGIO",
+	[30] = "SIGPWR",
+	[31] = "SIGSYS",
+};
+
+const char *argp_program_version = "sigsnoop 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace standard and real-time signals.\n"
+"\n"
+"USAGE: sigsnoop [-h] [-x] [-k] [-n] [-p PID] [-s SIGNAL]\n"
+"\n"
+"EXAMPLES:\n"
+"    sigsnoop             # trace signals system-wide\n"
+"    sigsnoop -k          # trace signals issued by kill syscall only\n"
+"    sigsnoop -x          # trace failed signals only\n"
+"    sigsnoop -p 1216     # only trace PID 1216\n"
+"    sigsnoop -s 9        # only trace signal 9\n";
+
+static const struct argp_option opts[] = {
+	{ "failed", 'x', NULL, 0, "Trace failed signals only." },
+	{ "kill", 'k', NULL, 0, "Trace signals issued by kill syscall only." },
+	{ "pid", 'p', "PID", 0, "Process ID to trace" },
+	{ "signal", 's', "SIGNAL", 0, "Signal to trace." },
+	{ "name", 'n', NULL, 0, "Output signal name instead of signal number." },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long pid, sig;
+
+	switch (key) {
+	case 'p':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			warn("Invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		target_pid = pid;
+		break;
+	case 's':
+		errno = 0;
+		sig = strtol(arg, NULL, 10);
+		if (errno || sig <= 0) {
+			warn("Invalid SIGNAL: %s\n", arg);
+			argp_usage(state);
+		}
+		target_signal = sig;
+		break;
+	case 'n':
+		signal_name = true;
+		break;
+	case 'x':
+		failed_only = true;
+		break;
+	case 'k':
+		kill_only = true;
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void alias_parse(char *prog)
+{
+	char *name = basename(prog);
+
+	if (!strcmp(name, "killsnoop")) {
+		kill_only = true;
+	}
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	struct event *e = data;
+	struct tm *tm;
+	char ts[32];
+	time_t t;
+
+	time(&t);
+	tm = localtime(&t);
+	strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+	if (signal_name && e->sig < ARRAY_SIZE(sig_name))
+		printf("%-8s %-7d %-16s %-9s %-7d %-6d\n",
+		       ts, e->pid, e->comm, sig_name[e->sig], e->tpid, e->ret);
+	else
+		printf("%-8s %-7d %-16s %-9d %-7d %-6d\n",
+		       ts, e->pid, e->comm, e->sig, e->tpid, e->ret);
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	warn("lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct perf_buffer *pb = NULL;
+	struct sigsnoop_bpf *obj;
+	int err;
+
+	alias_parse(argv[0]);
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = sigsnoop_bpf__open();
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->filtered_pid = target_pid;
+	obj->rodata->target_signal = target_signal;
+	obj->rodata->failed_only = failed_only;
+
+	if (kill_only) {
+		bpf_program__set_autoload(obj->progs.sig_trace, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.kill_entry, false);
+		bpf_program__set_autoload(obj->progs.kill_exit, false);
+		bpf_program__set_autoload(obj->progs.tkill_entry, false);
+		bpf_program__set_autoload(obj->progs.tkill_exit, false);
+		bpf_program__set_autoload(obj->progs.tgkill_entry, false);
+		bpf_program__set_autoload(obj->progs.tgkill_exit, false);
+	}
+
+	err = sigsnoop_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = sigsnoop_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
+			      handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		err = -errno;
+		warn("failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		goto cleanup;
+	}
+
+	printf("%-8s %-7s %-16s %-9s %-7s %-6s\n",
+	       "TIME", "PID", "COMM", "SIG", "TPID", "RESULT");
+
+	while (!exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			warn("error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	sigsnoop_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/sigsnoop.h b/libbpf-tools/sigsnoop.h
new file mode 100644
index 0000000..cc2c5b2
--- /dev/null
+++ b/libbpf-tools/sigsnoop.h
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2021~2022 Hengqi Chen */
+#ifndef __SIGSNOOP_H
+#define __SIGSNOOP_H
+
+#define TASK_COMM_LEN	16
+
+struct event {
+	__u32 pid;
+	__u32 tpid;
+	int sig;
+	int ret;
+	char comm[TASK_COMM_LEN];
+};
+
+#endif /* __SIGSNOOP_H */
diff --git a/libbpf-tools/sigsnoop_example.txt b/libbpf-tools/sigsnoop_example.txt
new file mode 100644
index 0000000..737568b
--- /dev/null
+++ b/libbpf-tools/sigsnoop_example.txt
@@ -0,0 +1,45 @@
+Demonstrations of sigsnoop.
+
+
+This traces signals generated system wide. For example:
+
+# ./sigsnoop -n
+TIME     PID     COMM             SIG       TPID    RESULT
+19:56:14 3204808 a.out            SIGSEGV   3204808 0
+19:56:14 3204808 a.out            SIGPIPE   3204808 0
+19:56:14 3204808 a.out            SIGCHLD   3204722 0
+
+The first line showed that a.out (a test program) deliver a SIGSEGV signal.
+The result, 0, means success.
+
+The second and third lines showed that a.out also deliver SIGPIPE/SIGCHLD
+signals successively.
+
+USAGE message:
+
+# ./sigsnoop -h
+Usage: sigsnoop [OPTION...]
+Trace standard and real-time signals.
+
+USAGE: sigsnoop [-h] [-x] [-k] [-n] [-p PID] [-s SIGNAL]
+
+EXAMPLES:
+    sigsnoop             # trace signals system-wide
+    sigsnoop -k          # trace signals issued by kill syscall only
+    sigsnoop -x          # trace failed signals only
+    sigsnoop -p 1216     # only trace PID 1216
+    sigsnoop -s 9        # only trace signal 9
+
+  -k, --kill                 Trace signals issued by kill syscall only.
+  -n, --name                 Output signal name instead of signal number.
+  -p, --pid=PID              Process ID to trace
+  -s, --signal=SIGNAL        Signal to trace.
+  -x, --failed               Trace failed signals only.
+  -?, --help                 Give this help list
+      --usage                Give a short usage message
+  -V, --version              Print program version
+
+Mandatory or optional arguments to long options are also mandatory or optional
+for any corresponding short options.
+
+Report bugs to https://github.com/iovisor/bcc/tree/master/libbpf-tools.
diff --git a/libbpf-tools/slabratetop.bpf.c b/libbpf-tools/slabratetop.bpf.c
new file mode 100644
index 0000000..de41a97
--- /dev/null
+++ b/libbpf-tools/slabratetop.bpf.c
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+/* Copyright (c) 2022 Rong Tao */
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+#include "slabratetop.h"
+
+#define MAX_ENTRIES	10240
+
+const volatile pid_t target_pid = 0;
+
+static struct slabrate_info slab_zero_value = {};
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, char *);
+	__type(value, struct slabrate_info);
+} slab_entries SEC(".maps");
+
+static int probe_entry(struct kmem_cache *cachep)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 pid = pid_tgid >> 32;
+	struct slabrate_info *valuep;
+	const char *name = BPF_CORE_READ(cachep, name);
+
+	if (target_pid && target_pid != pid)
+		return 0;
+
+	valuep = bpf_map_lookup_elem(&slab_entries, &name);
+	if (!valuep) {
+		bpf_map_update_elem(&slab_entries, &name, &slab_zero_value, BPF_ANY);
+		valuep = bpf_map_lookup_elem(&slab_entries, &name);
+		if (!valuep)
+			return 0;
+		bpf_probe_read_kernel(&valuep->name, sizeof(valuep->name), name);
+	}
+
+	valuep->count++;
+	valuep->size += BPF_CORE_READ(cachep, size);
+
+	return 0;
+}
+
+SEC("kprobe/kmem_cache_alloc")
+int BPF_KPROBE(kmem_cache_alloc, struct kmem_cache *cachep)
+{
+	return probe_entry(cachep);
+}
+
+char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/slabratetop.c b/libbpf-tools/slabratetop.c
new file mode 100644
index 0000000..2ca4cc6
--- /dev/null
+++ b/libbpf-tools/slabratetop.c
@@ -0,0 +1,306 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+/*
+ * slabratetop Trace slab kmem_cache_alloc by process.
+ * Copyright (c) 2022 Rong Tao
+ *
+ * Based on slabratetop(8) from BCC by Brendan Gregg.
+ * 07-Jan-2022   Rong Tao   Created this.
+ */
+#include <argp.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "slabratetop.h"
+#include "slabratetop.skel.h"
+#include "trace_helpers.h"
+
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+#define OUTPUT_ROWS_LIMIT 10240
+
+enum SORT_BY {
+	SORT_BY_CACHE_NAME,
+	SORT_BY_CACHE_COUNT,
+	SORT_BY_CACHE_SIZE,
+};
+
+static volatile sig_atomic_t exiting = 0;
+
+static pid_t target_pid = 0;
+static bool clear_screen = true;
+static int output_rows = 20;
+static int sort_by = SORT_BY_CACHE_SIZE;
+static int interval = 1;
+static int count = 99999999;
+static bool verbose = false;
+
+const char *argp_program_version = "slabratetop 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace slab kmem cache alloc by process.\n"
+"\n"
+"USAGE: slabratetop [-h] [-p PID] [interval] [count]\n"
+"\n"
+"EXAMPLES:\n"
+"    slabratetop            # slab rate top, refresh every 1s\n"
+"    slabratetop -p 181     # only trace PID 181\n"
+"    slabratetop -s count   # sort columns by count\n"
+"    slabratetop -r 100     # print 100 rows\n"
+"    slabratetop 5 10       # 5s summaries, 10 times\n";
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "Process ID to trace" },
+	{ "noclear", 'C', NULL, 0, "Don't clear the screen" },
+	{ "sort", 's', "SORT", 0, "Sort columns, default size [name, count, size]" },
+	{ "rows", 'r', "ROWS", 0, "Maximum rows to print, default 20" },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long pid, rows;
+	static int pos_args;
+
+	switch (key) {
+	case 'p':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			warn("invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		target_pid = pid;
+		break;
+	case 'C':
+		clear_screen = false;
+		break;
+	case 's':
+		if (!strcmp(arg, "name")) {
+			sort_by = SORT_BY_CACHE_NAME;
+		} else if (!strcmp(arg, "count")) {
+			sort_by = SORT_BY_CACHE_COUNT;
+		} else if (!strcmp(arg, "size")) {
+			sort_by = SORT_BY_CACHE_SIZE;
+		} else {
+			warn("invalid sort method: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'r':
+		errno = 0;
+		rows = strtol(arg, NULL, 10);
+		if (errno || rows <= 0) {
+			warn("invalid rows: %s\n", arg);
+			argp_usage(state);
+		}
+		output_rows = rows;
+		if (output_rows > OUTPUT_ROWS_LIMIT)
+			output_rows = OUTPUT_ROWS_LIMIT;
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case ARGP_KEY_ARG:
+		errno = 0;
+		if (pos_args == 0) {
+			interval = strtol(arg, NULL, 10);
+			if (errno || interval <= 0) {
+				warn("invalid interval\n");
+				argp_usage(state);
+			}
+		} else if (pos_args == 1) {
+			count = strtol(arg, NULL, 10);
+			if (errno || count <= 0) {
+				warn("invalid count\n");
+				argp_usage(state);
+			}
+		} else {
+			warn("unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+		pos_args++;
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static int sort_column(const void *obj1, const void *obj2)
+{
+	struct slabrate_info *s1 = (struct slabrate_info *)obj1;
+	struct slabrate_info *s2 = (struct slabrate_info *)obj2;
+
+	if (sort_by == SORT_BY_CACHE_NAME) {
+		return strcasecmp(s1->name, s2->name);
+	} else if (sort_by == SORT_BY_CACHE_COUNT) {
+		return s2->count - s1->count;
+	} else if (sort_by == SORT_BY_CACHE_SIZE) {
+		return s2->size - s1->size;
+	} else {
+		return s2->size - s1->size;
+	}
+}
+
+static int print_stat(struct slabratetop_bpf *obj)
+{
+	FILE *f;
+	time_t t;
+	struct tm *tm;
+	char ts[16], buf[256];
+	char *key, **prev_key = NULL;
+	static struct slabrate_info values[OUTPUT_ROWS_LIMIT];
+	int n, i, err = 0, rows = 0;
+	int fd = bpf_map__fd(obj->maps.slab_entries);
+
+	f = fopen("/proc/loadavg", "r");
+	if (f) {
+		time(&t);
+		tm = localtime(&t);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		memset(buf, 0 , sizeof(buf));
+		n = fread(buf, 1, sizeof(buf), f);
+		if (n)
+			printf("%8s loadavg: %s\n", ts, buf);
+		fclose(f);
+	}
+
+	printf("%-32s %6s %10s\n", "CACHE", "ALLOCS", "BYTES");
+
+	while (1) {
+		err = bpf_map_get_next_key(fd, prev_key, &key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_lookup_elem(fd, &key, &values[rows++]);
+		if (err) {
+			warn("bpf_map_lookup_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &key;
+	}
+
+	qsort(values, rows, sizeof(struct slabrate_info), sort_column);
+	rows = rows < output_rows ? rows : output_rows;
+	for (i = 0; i < rows; i++)
+		printf("%-32s %6lld %10lld\n",
+		       values[i].name, values[i].count, values[i].size);
+
+	printf("\n");
+	prev_key = NULL;
+
+	while (1) {
+		err = bpf_map_get_next_key(fd, prev_key, &key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_delete_elem(fd, &key);
+		if (err) {
+			warn("bpf_map_delete_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &key;
+	}
+	return err;
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct slabratetop_bpf *obj;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = slabratetop_bpf__open();
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->target_pid = target_pid;
+
+	err = slabratetop_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = slabratetop_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	while (1) {
+		sleep(interval);
+
+		if (clear_screen) {
+			err = system("clear");
+			if (err)
+				goto cleanup;
+		}
+
+		err = print_stat(obj);
+		if (err)
+			goto cleanup;
+
+		count--;
+		if (exiting || !count)
+			goto cleanup;
+	}
+
+cleanup:
+	slabratetop_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/slabratetop.h b/libbpf-tools/slabratetop.h
new file mode 100644
index 0000000..7c7c8b2
--- /dev/null
+++ b/libbpf-tools/slabratetop.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+#ifndef __SLABRATETOP_H
+#define __SLABRATETOP_H
+
+#define CACHE_NAME_SIZE 32
+
+struct slabrate_info {
+	char name[CACHE_NAME_SIZE];
+	__u64 count;
+	__u64 size;
+};
+
+#endif /* __SLABRATETOP_H */
diff --git a/libbpf-tools/softirqs.bpf.c b/libbpf-tools/softirqs.bpf.c
index faa009c..dde1e8d 100644
--- a/libbpf-tools/softirqs.bpf.c
+++ b/libbpf-tools/softirqs.bpf.c
@@ -18,38 +18,35 @@
 } start SEC(".maps");
 
 __u64 counts[NR_SOFTIRQS] = {};
+__u64 time[NR_SOFTIRQS] = {};
 struct hist hists[NR_SOFTIRQS] = {};
 
-SEC("tp_btf/softirq_entry")
-int BPF_PROG(softirq_entry, unsigned int vec_nr)
+static int handle_entry(unsigned int vec_nr)
 {
 	u64 ts = bpf_ktime_get_ns();
 	u32 key = 0;
 
-	bpf_map_update_elem(&start, &key, &ts, 0);
+	bpf_map_update_elem(&start, &key, &ts, BPF_ANY);
 	return 0;
 }
 
-SEC("tp_btf/softirq_exit")
-int BPF_PROG(softirq_exit, unsigned int vec_nr)
+static int handle_exit(unsigned int vec_nr)
 {
+	u64 delta, *tsp;
 	u32 key = 0;
-	s64 delta;
-	u64 *tsp;
 
 	if (vec_nr >= NR_SOFTIRQS)
 		return 0;
 	tsp = bpf_map_lookup_elem(&start, &key);
-	if (!tsp || !*tsp)
+	if (!tsp)
 		return 0;
 	delta = bpf_ktime_get_ns() - *tsp;
-	if (delta < 0)
-		return 0;
 	if (!targ_ns)
 		delta /= 1000U;
 
 	if (!targ_dist) {
-		__sync_fetch_and_add(&counts[vec_nr], delta);
+		__sync_fetch_and_add(&counts[vec_nr], 1);
+		__sync_fetch_and_add(&time[vec_nr], delta);
 	} else {
 		struct hist *hist;
 		u64 slot;
@@ -64,4 +61,28 @@
 	return 0;
 }
 
+SEC("tp_btf/softirq_entry")
+int BPF_PROG(softirq_entry_btf, unsigned int vec_nr)
+{
+	return handle_entry(vec_nr);
+}
+
+SEC("tp_btf/softirq_exit")
+int BPF_PROG(softirq_exit_btf, unsigned int vec_nr)
+{
+	return handle_exit(vec_nr);
+}
+
+SEC("raw_tp/softirq_entry")
+int BPF_PROG(softirq_entry, unsigned int vec_nr)
+{
+	return handle_entry(vec_nr);
+}
+
+SEC("raw_tp/softirq_exit")
+int BPF_PROG(softirq_exit, unsigned int vec_nr)
+{
+	return handle_exit(vec_nr);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/softirqs.c b/libbpf-tools/softirqs.c
index 833bc1a..66c0f0f 100644
--- a/libbpf-tools/softirqs.c
+++ b/libbpf-tools/softirqs.c
@@ -19,6 +19,7 @@
 struct env {
 	bool distributed;
 	bool nanoseconds;
+	bool count;
 	time_t interval;
 	int times;
 	bool timestamp;
@@ -26,6 +27,7 @@
 } env = {
 	.interval = 99999999,
 	.times = 99999999,
+	.count = false,
 };
 
 static volatile bool exiting;
@@ -48,6 +50,7 @@
 	{ "distributed", 'd', NULL, 0, "Show distributions as histograms" },
 	{ "timestamp", 'T', NULL, 0, "Include timestamp on output" },
 	{ "nanoseconds", 'N', NULL, 0, "Output in nanoseconds" },
+	{ "count", 'C', NULL, 0, "Show event counts with timing" },
 	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
 	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
 	{},
@@ -73,6 +76,9 @@
 	case 'T':
 		env.timestamp = true;
 		break;
+	case 'C':
+		env.count = true;
+		break;
 	case ARGP_KEY_ARG:
 		errno = 0;
 		if (pos_args == 0) {
@@ -142,16 +148,24 @@
 static int print_count(struct softirqs_bpf__bss *bss)
 {
 	const char *units = env.nanoseconds ? "nsecs" : "usecs";
-	__u64 count;
+	__u64 count, time;
 	__u32 vec;
 
-	printf("%-16s %6s%5s\n", "SOFTIRQ", "TOTAL_", units);
+	printf("%-16s %-6s%-5s  %-11s\n", "SOFTIRQ", "TOTAL_",
+			units, env.count?"TOTAL_count":"");
 
 	for (vec = 0; vec < NR_SOFTIRQS; vec++) {
+		time = __atomic_exchange_n(&bss->time[vec], 0,
+					__ATOMIC_RELAXED);
 		count = __atomic_exchange_n(&bss->counts[vec], 0,
 					__ATOMIC_RELAXED);
-		if (count > 0)
-			printf("%-16s %11llu\n", vec_names[vec], count);
+		if (count > 0) {
+			printf("%-16s %11llu", vec_names[vec], time);
+			if (env.count) {
+				printf("  %11llu", count);
+			}
+			printf("\n");
+		}
 	}
 
 	return 0;
@@ -195,7 +209,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = softirqs_bpf__open();
@@ -204,6 +217,14 @@
 		return 1;
 	}
 
+	if (probe_tp_btf("softirq_entry")) {
+		bpf_program__set_autoload(obj->progs.softirq_entry, false);
+		bpf_program__set_autoload(obj->progs.softirq_exit, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.softirq_entry_btf, false);
+		bpf_program__set_autoload(obj->progs.softirq_exit_btf, false);
+	}
+
 	/* initialize global data (filtering options) */
 	obj->rodata->targ_dist = env.distributed;
 	obj->rodata->targ_ns = env.nanoseconds;
diff --git a/libbpf-tools/solisten.c b/libbpf-tools/solisten.c
index 02f1ee5..bc802b9 100644
--- a/libbpf-tools/solisten.c
+++ b/libbpf-tools/solisten.c
@@ -14,11 +14,13 @@
 #include <signal.h>
 #include <sys/socket.h>
 #include <time.h>
+#include <unistd.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "solisten.h"
 #include "solisten.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES       16
@@ -132,6 +134,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -145,10 +148,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = solisten_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = solisten_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -207,6 +215,7 @@
 cleanup:
 	perf_buffer__free(pb);
 	solisten_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/solisten.h b/libbpf-tools/solisten.h
index 0b57b3e..bc303fa 100644
--- a/libbpf-tools/solisten.h
+++ b/libbpf-tools/solisten.h
@@ -10,7 +10,7 @@
 	__u32 proto;
 	int backlog;
 	int ret;
-	short port;
+	__u16 port;
 	char task[TASK_COMM_LEN];
 };
 
diff --git a/libbpf-tools/statsnoop.bpf.c b/libbpf-tools/statsnoop.bpf.c
index 3b37343..4ea887f 100644
--- a/libbpf-tools/statsnoop.bpf.c
+++ b/libbpf-tools/statsnoop.bpf.c
@@ -91,4 +91,40 @@
 	return probe_return(ctx, (int)ctx->ret);
 }
 
+SEC("tracepoint/syscalls/sys_enter_statx")
+int handle_statx_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	return probe_entry(ctx, (const char *)ctx->args[1]);
+}
+
+SEC("tracepoint/syscalls/sys_exit_statx")
+int handle_statx_return(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_return(ctx, (int)ctx->ret);
+}
+
+SEC("tracepoint/syscalls/sys_enter_newfstatat")
+int handle_newfstatat_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	return probe_entry(ctx, (const char *)ctx->args[1]);
+}
+
+SEC("tracepoint/syscalls/sys_exit_newfstatat")
+int handle_newfstatat_return(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_return(ctx, (int)ctx->ret);
+}
+
+SEC("tracepoint/syscalls/sys_enter_newlstat")
+int handle_newlstat_entry(struct trace_event_raw_sys_enter *ctx)
+{
+	return probe_entry(ctx, (const char *)ctx->args[0]);
+}
+
+SEC("tracepoint/syscalls/sys_exit_newlstat")
+int handle_newlstat_return(struct trace_event_raw_sys_exit *ctx)
+{
+	return probe_return(ctx, (int)ctx->ret);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/statsnoop.c b/libbpf-tools/statsnoop.c
index 3f8f5c5..f6e5d1d 100644
--- a/libbpf-tools/statsnoop.c
+++ b/libbpf-tools/statsnoop.c
@@ -7,11 +7,13 @@
 #include <errno.h>
 #include <signal.h>
 #include <time.h>
+#include <unistd.h>
 
 #include <bpf/libbpf.h>
 #include <bpf/bpf.h>
 #include "statsnoop.h"
 #include "statsnoop.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 #define PERF_BUFFER_PAGES       16
@@ -122,6 +124,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -135,10 +138,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = statsnoop_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = statsnoop_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -147,6 +155,27 @@
 	obj->rodata->target_pid = target_pid;
 	obj->rodata->trace_failed_only = trace_failed_only;
 
+	if (!tracepoint_exists("syscalls", "sys_enter_statfs")) {
+		bpf_program__set_autoload(obj->progs.handle_statfs_entry, false);
+		bpf_program__set_autoload(obj->progs.handle_statfs_return, false);
+	}
+	if (!tracepoint_exists("syscalls", "sys_enter_statx")) {
+		bpf_program__set_autoload(obj->progs.handle_statx_entry, false);
+		bpf_program__set_autoload(obj->progs.handle_statx_return, false);
+	}
+	if (!tracepoint_exists("syscalls", "sys_enter_newstat")) {
+		bpf_program__set_autoload(obj->progs.handle_newstat_entry, false);
+		bpf_program__set_autoload(obj->progs.handle_newstat_return, false);
+	}
+	if (!tracepoint_exists("syscalls", "sys_enter_newfstatat")) {
+		bpf_program__set_autoload(obj->progs.handle_newfstatat_entry, false);
+		bpf_program__set_autoload(obj->progs.handle_newfstatat_return, false);
+	}
+	if (!tracepoint_exists("syscalls", "sys_enter_newlstat")) {
+		bpf_program__set_autoload(obj->progs.handle_newlstat_entry, false);
+		bpf_program__set_autoload(obj->progs.handle_newlstat_return, false);
+	}
+
 	err = statsnoop_bpf__load(obj);
 	if (err) {
 		warn("failed to load BPF object: %d\n", err);
@@ -191,6 +220,7 @@
 cleanup:
 	perf_buffer__free(pb);
 	statsnoop_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/syscall_helpers.c b/libbpf-tools/syscall_helpers.c
index e114a08..19598a6 100644
--- a/libbpf-tools/syscall_helpers.c
+++ b/libbpf-tools/syscall_helpers.c
@@ -104,8 +104,8 @@
 	err = pclose(f);
 	if (err < 0)
 		warn("pclose: %s\n", strerror(errno));
-#ifndef __x86_64__
-	/* Ignore the error for x86_64 where we have a table compiled in */
+#if !defined(__x86_64__) && !defined(__aarch64__) && !defined(__riscv)
+	/* Ignore the error for x86_64/arm64/riscv where we have a table compiled in */
 	else if (err && WEXITSTATUS(err) == 127) {
 		warn("ausyscall required for syscalls number/name mapping\n");
 	} else if (err) {
@@ -487,6 +487,321 @@
 	[438] = "pidfd_getfd",
 };
 size_t syscall_names_x86_64_size = sizeof(syscall_names_x86_64)/sizeof(char*);
+#elif defined(__aarch64__) || defined(__riscv)
+static const char *syscall_names_generic[] = {
+	[0] = "io_setup",
+	[1] = "io_destroy",
+	[2] = "io_submit",
+	[3] = "io_cancel",
+	[4] = "io_getevents",
+	[5] = "setxattr",
+	[6] = "lsetxattr",
+	[7] = "fsetxattr",
+	[8] = "getxattr",
+	[9] = "lgetxattr",
+	[10] = "fgetxattr",
+	[11] = "listxattr",
+	[12] = "llistxattr",
+	[13] = "flistxattr",
+	[14] = "removexattr",
+	[15] = "lremovexattr",
+	[16] = "fremovexattr",
+	[17] = "getcwd",
+	[18] = "lookup_dcookie",
+	[19] = "eventfd2",
+	[20] = "epoll_create1",
+	[21] = "epoll_ctl",
+	[22] = "epoll_pwait",
+	[23] = "dup",
+	[24] = "dup3",
+	[25] = "fcntl",
+	[26] = "inotify_init1",
+	[27] = "inotify_add_watch",
+	[28] = "inotify_rm_watch",
+	[29] = "ioctl",
+	[30] = "ioprio_set",
+	[31] = "ioprio_get",
+	[32] = "flock",
+	[33] = "mknodat",
+	[34] = "mkdirat",
+	[35] = "unlinkat",
+	[36] = "symlinkat",
+	[37] = "linkat",
+	[38] = "renameat",
+	[39] = "umount2",
+	[40] = "mount",
+	[41] = "pivot_root",
+	[42] = "nfsservctl",
+	[43] = "statfs",
+	[44] = "fstatfs",
+	[45] = "truncate",
+	[46] = "ftruncate",
+	[47] = "fallocate",
+	[48] = "faccessat",
+	[49] = "chdir",
+	[50] = "fchdir",
+	[51] = "chroot",
+	[52] = "fchmod",
+	[53] = "fchmodat",
+	[54] = "fchownat",
+	[55] = "fchown",
+	[56] = "openat",
+	[57] = "close",
+	[58] = "vhangup",
+	[59] = "pipe2",
+	[60] = "quotactl",
+	[61] = "getdents64",
+	[62] = "lseek",
+	[63] = "read",
+	[64] = "write",
+	[65] = "readv",
+	[66] = "writev",
+	[67] = "pread64",
+	[68] = "pwrite64",
+	[69] = "preadv",
+	[70] = "pwritev",
+	[71] = "sendfile",
+	[72] = "pselect6",
+	[73] = "ppoll",
+	[74] = "signalfd4",
+	[75] = "vmsplice",
+	[76] = "splice",
+	[77] = "tee",
+	[78] = "readlinkat",
+	[79] = "newfstatat",
+	[80] = "fstat",
+	[81] = "sync",
+	[82] = "fsync",
+	[83] = "fdatasync",
+	[84] = "sync_file_range",
+	[85] = "timerfd_create",
+	[86] = "timerfd_settime",
+	[87] = "timerfd_gettime",
+	[88] = "utimensat",
+	[89] = "acct",
+	[90] = "capget",
+	[91] = "capset",
+	[92] = "personality",
+	[93] = "exit",
+	[94] = "exit_group",
+	[95] = "waitid",
+	[96] = "set_tid_address",
+	[97] = "unshare",
+	[98] = "futex",
+	[99] = "set_robust_list",
+	[100] = "get_robust_list",
+	[101] = "nanosleep",
+	[102] = "getitimer",
+	[103] = "setitimer",
+	[104] = "kexec_load",
+	[105] = "init_module",
+	[106] = "delete_module",
+	[107] = "timer_create",
+	[108] = "timer_gettime",
+	[109] = "timer_getoverrun",
+	[110] = "timer_settime",
+	[111] = "timer_delete",
+	[112] = "clock_settime",
+	[113] = "clock_gettime",
+	[114] = "clock_getres",
+	[115] = "clock_nanosleep",
+	[116] = "syslog",
+	[117] = "ptrace",
+	[118] = "sched_setparam",
+	[119] = "sched_setscheduler",
+	[120] = "sched_getscheduler",
+	[121] = "sched_getparam",
+	[122] = "sched_setaffinity",
+	[123] = "sched_getaffinity",
+	[124] = "sched_yield",
+	[125] = "sched_get_priority_max",
+	[126] = "sched_get_priority_min",
+	[127] = "sched_rr_get_interval",
+	[128] = "restart_syscall",
+	[129] = "kill",
+	[130] = "tkill",
+	[131] = "tgkill",
+	[132] = "sigaltstack",
+	[133] = "rt_sigsuspend",
+	[134] = "rt_sigaction",
+	[135] = "rt_sigprocmask",
+	[136] = "rt_sigpending",
+	[137] = "rt_sigtimedwait",
+	[138] = "rt_sigqueueinfo",
+	[139] = "rt_sigreturn",
+	[140] = "setpriority",
+	[141] = "getpriority",
+	[142] = "reboot",
+	[143] = "setregid",
+	[144] = "setgid",
+	[145] = "setreuid",
+	[146] = "setuid",
+	[147] = "setresuid",
+	[148] = "getresuid",
+	[149] = "setresgid",
+	[150] = "getresgid",
+	[151] = "setfsuid",
+	[152] = "setfsgid",
+	[153] = "times",
+	[154] = "setpgid",
+	[155] = "getpgid",
+	[156] = "getsid",
+	[157] = "setsid",
+	[158] = "getgroups",
+	[159] = "setgroups",
+	[160] = "uname",
+	[161] = "sethostname",
+	[162] = "setdomainname",
+	[163] = "getrlimit",
+	[164] = "setrlimit",
+	[165] = "getrusage",
+	[166] = "umask",
+	[167] = "prctl",
+	[168] = "getcpu",
+	[169] = "gettimeofday",
+	[170] = "settimeofday",
+	[171] = "adjtimex",
+	[172] = "getpid",
+	[173] = "getppid",
+	[174] = "getuid",
+	[175] = "geteuid",
+	[176] = "getgid",
+	[177] = "getegid",
+	[178] = "gettid",
+	[179] = "sysinfo",
+	[180] = "mq_open",
+	[181] = "mq_unlink",
+	[182] = "mq_timedsend",
+	[183] = "mq_timedreceive",
+	[184] = "mq_notify",
+	[185] = "mq_getsetattr",
+	[186] = "msgget",
+	[187] = "msgctl",
+	[188] = "msgrcv",
+	[189] = "msgsnd",
+	[190] = "semget",
+	[191] = "semctl",
+	[192] = "semtimedop",
+	[193] = "semop",
+	[194] = "shmget",
+	[195] = "shmctl",
+	[196] = "shmat",
+	[197] = "shmdt",
+	[198] = "socket",
+	[199] = "socketpair",
+	[200] = "bind",
+	[201] = "listen",
+	[202] = "accept",
+	[203] = "connect",
+	[204] = "getsockname",
+	[205] = "getpeername",
+	[206] = "sendto",
+	[207] = "recvfrom",
+	[208] = "setsockopt",
+	[209] = "getsockopt",
+	[210] = "shutdown",
+	[211] = "sendmsg",
+	[212] = "recvmsg",
+	[213] = "readahead",
+	[214] = "brk",
+	[215] = "munmap",
+	[216] = "mremap",
+	[217] = "add_key",
+	[218] = "request_key",
+	[219] = "keyctl",
+	[220] = "clone",
+	[221] = "execve",
+	[222] = "mmap",
+	[223] = "fadvise64",
+	[224] = "swapon",
+	[225] = "swapoff",
+	[226] = "mprotect",
+	[227] = "msync",
+	[228] = "mlock",
+	[229] = "munlock",
+	[230] = "mlockall",
+	[231] = "munlockall",
+	[232] = "mincore",
+	[233] = "madvise",
+	[234] = "remap_file_pages",
+	[235] = "mbind",
+	[236] = "get_mempolicy",
+	[237] = "set_mempolicy",
+	[238] = "migrate_pages",
+	[239] = "move_pages",
+	[240] = "rt_tgsigqueueinfo",
+	[241] = "perf_event_open",
+	[242] = "accept4",
+	[243] = "recvmmsg",
+	[244] = "arch_specific_syscall",
+#if defined(__riscv)
+	[258] = "riscv_hwprobe",
+	[259] = "riscv_flush_icache",
+#endif
+	[260] = "wait4",
+	[261] = "prlimit64",
+	[262] = "fanotify_init",
+	[263] = "fanotify_mark",
+	[264] = "name_to_handle_at",
+	[265] = "open_by_handle_at",
+	[266] = "clock_adjtime",
+	[267] = "syncfs",
+	[268] = "setns",
+	[269] = "sendmmsg",
+	[270] = "process_vm_readv",
+	[271] = "process_vm_writev",
+	[272] = "kcmp",
+	[273] = "finit_module",
+	[274] = "sched_setattr",
+	[275] = "sched_getattr",
+	[276] = "renameat2",
+	[277] = "seccomp",
+	[278] = "getrandom",
+	[279] = "memfd_create",
+	[280] = "bpf",
+	[281] = "execveat",
+	[282] = "userfaultfd",
+	[283] = "membarrier",
+	[284] = "mlock2",
+	[285] = "copy_file_range",
+	[286] = "preadv2",
+	[287] = "pwritev2",
+	[288] = "pkey_mprotect",
+	[289] = "pkey_alloc",
+	[290] = "pkey_free",
+	[291] = "statx",
+	[292] = "io_pgetevents",
+	[293] = "rseq",
+	[294] = "kexec_file_load",
+	[424] = "pidfd_send_signal",
+	[425] = "io_uring_setup",
+	[426] = "io_uring_enter",
+	[427] = "io_uring_register",
+	[428] = "open_tree",
+	[429] = "move_mount",
+	[430] = "fsopen",
+	[431] = "fsconfig",
+	[432] = "fsmount",
+	[433] = "fspick",
+	[434] = "pidfd_open",
+	[435] = "clone3",
+	[436] = "close_range",
+	[437] = "openat2",
+	[438] = "pidfd_getfd",
+	[439] = "faccessat2",
+	[440] = "process_madvise",
+	[441] = "syscalls",
+	[442] = "mount_setattr",
+	[443] = "quotactl_fd",
+	[444] = "landlock_create_ruleset",
+	[445] = "landlock_add_rule",
+	[446] = "landlock_restrict_self",
+	[447] = "memfd_secret",
+	[448] = "process_mrelease",
+	[449] = "futex_waitv",
+	[450] = "set_mempolicy_home_node",
+};
+size_t syscall_names_generic_size = sizeof(syscall_names_generic)/sizeof(char*);
 #endif
 
 void syscall_name(unsigned n, char *buf, size_t size)
@@ -498,6 +813,9 @@
 #ifdef __x86_64__
 	else if (n < syscall_names_x86_64_size)
 		name = syscall_names_x86_64[n];
+#elif defined(__aarch64__) || defined(__riscv)
+	else if (n < syscall_names_generic_size)
+		name = syscall_names_generic[n];
 #endif
 
 	if (name)
@@ -516,6 +834,11 @@
 		size = syscall_names_x86_64_size;
 		list = syscall_names_x86_64;
 	}
+#elif defined(__aarch64__) || defined(__riscv)
+	if (!size) {
+		size = syscall_names_generic_size;
+		list = syscall_names_generic;
+	}
 #endif
 
 	for (i = 0; i < size; i++) {
diff --git a/libbpf-tools/syscount.bpf.c b/libbpf-tools/syscount.bpf.c
index 312d33b..38f8f97 100644
--- a/libbpf-tools/syscount.bpf.c
+++ b/libbpf-tools/syscount.bpf.c
@@ -9,6 +9,7 @@
 #include "syscount.h"
 #include "maps.bpf.h"
 
+const volatile bool filter_cg = false;
 const volatile bool count_by_process = false;
 const volatile bool measure_latency = false;
 const volatile bool filter_failed = false;
@@ -16,11 +17,17 @@
 const volatile pid_t filter_pid = 0;
 
 struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, u32);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } start SEC(".maps");
 
 struct {
@@ -28,7 +35,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, u32);
 	__type(value, struct data_t);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } data SEC(".maps");
 
 static __always_inline
@@ -51,6 +57,9 @@
 	u32 tid = id;
 	u64 ts;
 
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	if (filter_pid && pid != filter_pid)
 		return 0;
 
@@ -62,11 +71,14 @@
 SEC("tracepoint/raw_syscalls/sys_exit")
 int sys_exit(struct trace_event_raw_sys_exit *args)
 {
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
 	u64 id = bpf_get_current_pid_tgid();
 	static const struct data_t zero;
 	pid_t pid = id >> 32;
 	struct data_t *val;
-	u64 *start_ts;
+	u64 *start_ts, lat = 0;
 	u32 tid = id;
 	u32 key;
 
@@ -85,6 +97,7 @@
 		start_ts = bpf_map_lookup_elem(&start, &tid);
 		if (!start_ts)
 			return 0;
+		lat = bpf_ktime_get_ns() - *start_ts;
 	}
 
 	key = (count_by_process) ? pid : args->id;
@@ -94,7 +107,7 @@
 		if (count_by_process)
 			save_proc_name(val);
 		if (measure_latency)
-			__sync_fetch_and_add(&val->total_ns, bpf_ktime_get_ns() - *start_ts);
+			__sync_fetch_and_add(&val->total_ns, lat);
 	}
 	return 0;
 }
diff --git a/libbpf-tools/syscount.c b/libbpf-tools/syscount.c
index 2d68757..eeda6a3 100644
--- a/libbpf-tools/syscount.c
+++ b/libbpf-tools/syscount.c
@@ -6,12 +6,14 @@
 #include <signal.h>
 #include <fcntl.h>
 #include <time.h>
+#include <unistd.h>
 #include <argp.h>
 #include <bpf/bpf.h>
 #include "syscount.h"
 #include "syscount.skel.h"
 #include "errno_helpers.h"
 #include "syscall_helpers.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 /* This structure extends data_t by adding a key item which should be sorted
@@ -38,7 +40,8 @@
 "    syscount -L              # measure and sort output by latency\n"
 "    syscount -P              # group statistics by pid, not by syscall\n"
 "    syscount -x -i 5         # count only failed syscalls\n"
-"    syscount -e ENOENT -i 5  # count only syscalls failed with a given errno"
+"    syscount -e ENOENT -i 5  # count only syscalls failed with a given errno\n"
+"    syscount -c CG           # Trace process under cgroupsPath CG\n";
 ;
 
 static const struct argp_option opts[] = {
@@ -48,6 +51,7 @@
 				" (seconds), 0 for infinite wait (default)" },
 	{ "duration", 'd', "DURATION", 0, "Total tracing duration (seconds)" },
 	{ "top", 'T', "TOP", 0, "Print only the top syscalls (default 10)" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified/<CG>", 0, "Trace process in cgroup path"},
 	{ "failures", 'x', NULL, 0, "Trace only failed syscalls" },
 	{ "latency", 'L', NULL, 0, "Collect syscall latency" },
 	{ "milliseconds", 'm', NULL, 0, "Display latency in milliseconds"
@@ -72,6 +76,8 @@
 	int duration;
 	int top;
 	pid_t pid;
+	char *cgroupspath;
+	bool cg;
 } env = {
 	.top = 10,
 };
@@ -334,6 +340,10 @@
 			argp_usage(state);
 		}
 		break;
+	case 'c':
+		env.cgroupspath = arg;
+		env.cg = true;
+		break;
 	case 'e':
 		err = get_int(arg, &number, 1, INT_MAX);
 		if (err) {
@@ -366,6 +376,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	void (*print)(struct data_ext_t *, size_t);
 	int (*compar)(const void *, const void *);
 	static const struct argp argp = {
@@ -378,6 +389,8 @@
 	int seconds = 0;
 	__u32 count;
 	int err;
+	int idx, cg_map_fd;
+	int cgfd = -1;
 
 	init_syscall_names();
 
@@ -390,10 +403,15 @@
 		goto free_names;
 	}
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = syscount_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = syscount_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		err = 1;
@@ -410,6 +428,8 @@
 		obj->rodata->count_by_process = true;
 	if (env.filter_errno)
 		obj->rodata->filter_errno = env.filter_errno;
+	if (env.cg)
+		obj->rodata->filter_cg = env.cg;
 
 	err = syscount_bpf__load(obj);
 	if (err) {
@@ -417,6 +437,21 @@
 		goto cleanup_obj;
 	}
 
+	/* update cgroup path fd to map */
+	if (env.cg) {
+		idx = 0;
+		cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+		cgfd = open(env.cgroupspath, O_RDONLY);
+		if (cgfd < 0) {
+			fprintf(stderr, "Failed opening Cgroup path: %s", env.cgroupspath);
+			goto cleanup_obj;
+		}
+		if (bpf_map_update_elem(cg_map_fd, &idx, &cgfd, BPF_ANY)) {
+			fprintf(stderr, "Failed adding target cgroup to map");
+			goto cleanup_obj;
+		}
+	}
+
 	obj->links.sys_exit = bpf_program__attach(obj->progs.sys_exit);
 	if (!obj->links.sys_exit) {
 		err = -errno;
@@ -467,6 +502,9 @@
 	syscount_bpf__destroy(obj);
 free_names:
 	free_syscall_names();
+	cleanup_core_btf(&open_opts);
+	if (cgfd > 0)
+		close(cgfd);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/tcpconnect.bpf.c b/libbpf-tools/tcpconnect.bpf.c
index 7ee8a30..8a0a152 100644
--- a/libbpf-tools/tcpconnect.bpf.c
+++ b/libbpf-tools/tcpconnect.bpf.c
@@ -11,11 +11,12 @@
 #include "maps.bpf.h"
 #include "tcpconnect.h"
 
-SEC(".rodata") int filter_ports[MAX_PORTS];
+const volatile int filter_ports[MAX_PORTS];
 const volatile int filter_ports_len = 0;
 const volatile uid_t filter_uid = -1;
 const volatile pid_t filter_pid = 0;
 const volatile bool do_count = 0;
+const volatile bool source_port = 0;
 
 /* Define here, because there are conflicts with include files */
 #define AF_INET		2
@@ -26,7 +27,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, u32);
 	__type(value, struct sock *);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } sockets SEC(".maps");
 
 struct {
@@ -34,7 +34,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct ipv4_flow_key);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } ipv4_count SEC(".maps");
 
 struct {
@@ -42,7 +41,6 @@
 	__uint(max_entries, MAX_ENTRIES);
 	__type(key, struct ipv6_flow_key);
 	__type(value, u64);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
 } ipv6_count SEC(".maps");
 
 struct {
@@ -58,7 +56,7 @@
 	if (filter_ports_len == 0)
 		return false;
 
-	for (i = 0; i < filter_ports_len; i++) {
+	for (i = 0; i < filter_ports_len && i < MAX_PORTS; i++) {
 		if (port == filter_ports[i])
 			return false;
 	}
@@ -84,7 +82,7 @@
 	return 0;
 }
 
-static  __always_inline void count_v4(struct sock *sk, __u16 dport)
+static  __always_inline void count_v4(struct sock *sk, __u16 sport, __u16 dport)
 {
 	struct ipv4_flow_key key = {};
 	static __u64 zero;
@@ -92,13 +90,14 @@
 
 	BPF_CORE_READ_INTO(&key.saddr, sk, __sk_common.skc_rcv_saddr);
 	BPF_CORE_READ_INTO(&key.daddr, sk, __sk_common.skc_daddr);
+	key.sport = sport;
 	key.dport = dport;
 	val = bpf_map_lookup_or_try_init(&ipv4_count, &key, &zero);
 	if (val)
 		__atomic_add_fetch(val, 1, __ATOMIC_RELAXED);
 }
 
-static __always_inline void count_v6(struct sock *sk, __u16 dport)
+static __always_inline void count_v6(struct sock *sk, __u16 sport, __u16 dport)
 {
 	struct ipv6_flow_key key = {};
 	static const __u64 zero;
@@ -108,6 +107,7 @@
 			   __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
 	BPF_CORE_READ_INTO(&key.daddr, sk,
 			   __sk_common.skc_v6_daddr.in6_u.u6_addr32);
+	key.sport = sport;
 	key.dport = dport;
 
 	val = bpf_map_lookup_or_try_init(&ipv6_count, &key, &zero);
@@ -116,7 +116,7 @@
 }
 
 static __always_inline void
-trace_v4(struct pt_regs *ctx, pid_t pid, struct sock *sk, __u16 dport)
+trace_v4(struct pt_regs *ctx, pid_t pid, struct sock *sk, __u16 sport, __u16 dport)
 {
 	struct event event = {};
 
@@ -126,6 +126,7 @@
 	event.ts_us = bpf_ktime_get_ns() / 1000;
 	BPF_CORE_READ_INTO(&event.saddr_v4, sk, __sk_common.skc_rcv_saddr);
 	BPF_CORE_READ_INTO(&event.daddr_v4, sk, __sk_common.skc_daddr);
+	event.sport = sport;
 	event.dport = dport;
 	bpf_get_current_comm(event.task, sizeof(event.task));
 
@@ -134,7 +135,7 @@
 }
 
 static __always_inline void
-trace_v6(struct pt_regs *ctx, pid_t pid, struct sock *sk, __u16 dport)
+trace_v6(struct pt_regs *ctx, pid_t pid, struct sock *sk, __u16 sport, __u16 dport)
 {
 	struct event event = {};
 
@@ -146,6 +147,7 @@
 			   __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
 	BPF_CORE_READ_INTO(&event.daddr_v6, sk,
 			   __sk_common.skc_v6_daddr.in6_u.u6_addr32);
+	event.sport = sport;
 	event.dport = dport;
 	bpf_get_current_comm(event.task, sizeof(event.task));
 
@@ -161,6 +163,7 @@
 	__u32 tid = pid_tgid;
 	struct sock **skpp;
 	struct sock *sk;
+	__u16 sport = 0;
 	__u16 dport;
 
 	skpp = bpf_map_lookup_elem(&sockets, &tid);
@@ -172,20 +175,23 @@
 
 	sk = *skpp;
 
+	if (source_port)
+		BPF_CORE_READ_INTO(&sport, sk, __sk_common.skc_num);
 	BPF_CORE_READ_INTO(&dport, sk, __sk_common.skc_dport);
+
 	if (filter_port(dport))
 		goto end;
 
 	if (do_count) {
 		if (ip_ver == 4)
-			count_v4(sk, dport);
+			count_v4(sk, sport, dport);
 		else
-			count_v6(sk, dport);
+			count_v6(sk, sport, dport);
 	} else {
 		if (ip_ver == 4)
-			trace_v4(ctx, pid, sk, dport);
+			trace_v4(ctx, pid, sk, sport, dport);
 		else
-			trace_v6(ctx, pid, sk, dport);
+			trace_v6(ctx, pid, sk, sport, dport);
 	}
 
 end:
diff --git a/libbpf-tools/tcpconnect.c b/libbpf-tools/tcpconnect.c
index 101cf72..f3e687a 100644
--- a/libbpf-tools/tcpconnect.c
+++ b/libbpf-tools/tcpconnect.c
@@ -12,6 +12,7 @@
 #include <bpf/bpf.h>
 #include "tcpconnect.h"
 #include "tcpconnect.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 #include "map_helpers.h"
 
@@ -109,6 +110,7 @@
 	{ "print-uid", 'U', NULL, 0, "Include UID on output" },
 	{ "pid", 'p', "PID", 0, "Process PID to trace" },
 	{ "uid", 'u', "UID", 0, "Process UID to trace" },
+	{ "source-port", 's', NULL, 0, "Consider source port when counting" },
 	{ "port", 'P', "PORTS", 0,
 	  "Comma-separated list of destination ports to trace" },
 	{ "cgroupmap", 'C', "PATH", 0, "trace cgroups in this map" },
@@ -126,6 +128,7 @@
 	uid_t uid;
 	int nports;
 	int ports[MAX_PORTS];
+	bool source_port;
 } env = {
 	.uid = (uid_t) -1,
 };
@@ -145,6 +148,9 @@
 	case 'c':
 		env.count = true;
 		break;
+	case 's':
+		env.source_port = true;
+		break;
 	case 't':
 		env.print_timestamp = true;
 		break;
@@ -220,10 +226,14 @@
 		src.s_addr = keys[i].saddr;
 		dst.s_addr = keys[i].daddr;
 
-		printf("%-25s %-25s %-20d %-10llu\n",
+		printf("%-25s %-25s",
 		       inet_ntop(AF_INET, &src, s, sizeof(s)),
-		       inet_ntop(AF_INET, &dst, d, sizeof(d)),
-		       ntohs(keys[i].dport), counts[i]);
+		       inet_ntop(AF_INET, &dst, d, sizeof(d)));
+		if (env.source_port)
+			printf(" %-20d", keys[i].sport);
+		printf(" %-20d", ntohs(keys[i].dport));
+		printf(" %-10llu", counts[i]);
+		printf("\n");
 	}
 }
 
@@ -249,21 +259,33 @@
 		memcpy(src.s6_addr, keys[i].saddr, sizeof(src.s6_addr));
 		memcpy(dst.s6_addr, keys[i].daddr, sizeof(src.s6_addr));
 
-		printf("%-25s %-25s %-20d %-10llu\n",
+		printf("%-25s %-25s",
 		       inet_ntop(AF_INET6, &src, s, sizeof(s)),
-		       inet_ntop(AF_INET6, &dst, d, sizeof(d)),
-		       ntohs(keys[i].dport), counts[i]);
+		       inet_ntop(AF_INET6, &dst, d, sizeof(d)));
+		if (env.source_port)
+			printf(" %-20d", keys[i].sport);
+		printf(" %-20d", ntohs(keys[i].dport));
+		printf(" %-10llu", counts[i]);
+		printf("\n");
 	}
 }
 
+static void print_count_header()
+{
+	printf("\n%-25s %-25s", "LADDR", "RADDR");
+	if (env.source_port)
+		printf(" %-20s", "LPORT");
+	printf(" %-20s", "RPORT");
+	printf(" %-10s", "CONNECTS");
+	printf("\n");
+}
+
 static void print_count(int map_fd_ipv4, int map_fd_ipv6)
 {
-	static const char *header_fmt = "\n%-25s %-25s %-20s %-10s\n";
-
 	while (!exiting)
 		pause();
 
-	printf(header_fmt, "LADDR", "RADDR", "RPORT", "CONNECTS");
+	print_count_header();
 	print_count_ipv4(map_fd_ipv4);
 	print_count_ipv6(map_fd_ipv6);
 }
@@ -274,8 +296,11 @@
 		printf("%-9s", "TIME(s)");
 	if (env.print_uid)
 		printf("%-6s", "UID");
-	printf("%-6s %-12s %-2s %-16s %-16s %-4s\n",
-	       "PID", "COMM", "IP", "SADDR", "DADDR", "DPORT");
+	printf("%-6s %-12s %-2s %-16s %-16s",
+	       "PID", "COMM", "IP", "SADDR", "DADDR");
+	if (env.source_port)
+		printf(" %-5s", "SPORT");
+	printf(" %-5s\n", "DPORT");
 }
 
 static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
@@ -309,12 +334,18 @@
 	if (env.print_uid)
 		printf("%-6d", event->uid);
 
-	printf("%-6d %-12.12s %-2d %-16s %-16s %-4d\n",
+	printf("%-6d %-12.12s %-2d %-16s %-16s",
 	       event->pid, event->task,
 	       event->af == AF_INET ? 4 : 6,
 	       inet_ntop(event->af, &s, src, sizeof(src)),
-	       inet_ntop(event->af, &d, dst, sizeof(dst)),
-	       ntohs(event->dport));
+	       inet_ntop(event->af, &d, dst, sizeof(dst)));
+
+	if (env.source_port)
+		printf(" %-5d", event->sport);
+
+	printf(" %-5d", ntohs(event->dport));
+
+	printf("\n");
 }
 
 static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
@@ -352,6 +383,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -365,10 +397,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = tcpconnect_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = tcpconnect_bpf__open_opts(&open_opts);
 	if (!obj) {
 		warn("failed to open BPF object\n");
 		return 1;
@@ -386,6 +423,8 @@
 			obj->rodata->filter_ports[i] = htons(env.ports[i]);
 		}
 	}
+	if (env.source_port)
+		obj->rodata->source_port = true;
 
 	err = tcpconnect_bpf__load(obj);
 	if (err) {
@@ -414,6 +453,7 @@
 
 cleanup:
 	tcpconnect_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/tcpconnect.h b/libbpf-tools/tcpconnect.h
index fffe70f..87ea71e 100644
--- a/libbpf-tools/tcpconnect.h
+++ b/libbpf-tools/tcpconnect.h
@@ -14,12 +14,14 @@
 struct ipv4_flow_key {
 	__u32 saddr;
 	__u32 daddr;
+	__u16 sport;
 	__u16 dport;
 };
 
 struct ipv6_flow_key {
 	__u8 saddr[16];
 	__u8 daddr[16];
+	__u16 sport;
 	__u16 dport;
 };
 
@@ -37,6 +39,7 @@
 	__u32 af; // AF_INET or AF_INET6
 	__u32 pid;
 	__u32 uid;
+	__u16 sport;
 	__u16 dport;
 };
 
diff --git a/libbpf-tools/tcpconnlat.bpf.c b/libbpf-tools/tcpconnlat.bpf.c
index 56d3741..0bd0dbd 100644
--- a/libbpf-tools/tcpconnlat.bpf.c
+++ b/libbpf-tools/tcpconnlat.bpf.c
@@ -31,7 +31,7 @@
 	__uint(value_size, sizeof(u32));
 } events SEC(".maps");
 
-static __always_inline int trace_connect(struct sock *sk)
+static int trace_connect(struct sock *sk)
 {
 	u32 tgid = bpf_get_current_pid_tgid() >> 32;
 	struct piddata piddata = {};
@@ -46,27 +46,14 @@
 	return 0;
 }
 
-SEC("fentry/tcp_v4_connect")
-int BPF_PROG(tcp_v4_connect, struct sock *sk)
-{
-	return trace_connect(sk);
-}
-
-SEC("kprobe/tcp_v6_connect")
-int BPF_KPROBE(tcp_v6_connect, struct sock *sk)
-{
-	return trace_connect(sk);
-}
-
-SEC("fentry/tcp_rcv_state_process")
-int BPF_PROG(tcp_rcv_state_process, struct sock *sk)
+static int handle_tcp_rcv_state_process(void *ctx, struct sock *sk)
 {
 	struct piddata *piddatap;
 	struct event event = {};
 	s64 delta;
 	u64 ts;
 
-	if (sk->__sk_common.skc_state != TCP_SYN_SENT)
+	if (BPF_CORE_READ(sk, __sk_common.skc_state) != TCP_SYN_SENT)
 		return 0;
 
 	piddatap = bpf_map_lookup_elem(&start, &sk);
@@ -85,12 +72,12 @@
 			sizeof(event.comm));
 	event.ts_us = ts / 1000;
 	event.tgid = piddatap->tgid;
-	event.lport = sk->__sk_common.skc_num;
-	event.dport = sk->__sk_common.skc_dport;
-	event.af = sk->__sk_common.skc_family;
+	event.lport = BPF_CORE_READ(sk, __sk_common.skc_num);
+	event.dport = BPF_CORE_READ(sk, __sk_common.skc_dport);
+	event.af = BPF_CORE_READ(sk, __sk_common.skc_family);
 	if (event.af == AF_INET) {
-		event.saddr_v4 = sk->__sk_common.skc_rcv_saddr;
-		event.daddr_v4 = sk->__sk_common.skc_daddr;
+		event.saddr_v4 = BPF_CORE_READ(sk, __sk_common.skc_rcv_saddr);
+		event.daddr_v4 = BPF_CORE_READ(sk, __sk_common.skc_daddr);
 	} else {
 		BPF_CORE_READ_INTO(&event.saddr_v6, sk,
 				__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
@@ -105,4 +92,49 @@
 	return 0;
 }
 
+SEC("kprobe/tcp_v4_connect")
+int BPF_KPROBE(tcp_v4_connect, struct sock *sk)
+{
+	return trace_connect(sk);
+}
+
+SEC("kprobe/tcp_v6_connect")
+int BPF_KPROBE(tcp_v6_connect, struct sock *sk)
+{
+	return trace_connect(sk);
+}
+
+SEC("kprobe/tcp_rcv_state_process")
+int BPF_KPROBE(tcp_rcv_state_process, struct sock *sk)
+{
+	return handle_tcp_rcv_state_process(ctx, sk);
+}
+
+SEC("tracepoint/tcp/tcp_destroy_sock")
+int tcp_destroy_sock(struct trace_event_raw_tcp_event_sk *ctx)
+{
+	const struct sock *sk = ctx->skaddr;
+
+	bpf_map_delete_elem(&start, &sk);
+	return 0;
+}
+
+SEC("fentry/tcp_v4_connect")
+int BPF_PROG(fentry_tcp_v4_connect, struct sock *sk)
+{
+	return trace_connect(sk);
+}
+
+SEC("fentry/tcp_v6_connect")
+int BPF_PROG(fentry_tcp_v6_connect, struct sock *sk)
+{
+	return trace_connect(sk);
+}
+
+SEC("fentry/tcp_rcv_state_process")
+int BPF_PROG(fentry_tcp_rcv_state_process, struct sock *sk)
+{
+	return handle_tcp_rcv_state_process(ctx, sk);
+}
+
 char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/tcpconnlat.c b/libbpf-tools/tcpconnlat.c
index 8eae76a..0e345da 100644
--- a/libbpf-tools/tcpconnlat.c
+++ b/libbpf-tools/tcpconnlat.c
@@ -169,7 +169,6 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = tcpconnlat_bpf__open();
@@ -182,6 +181,19 @@
 	obj->rodata->targ_min_us = env.min_us;
 	obj->rodata->targ_tgid = env.pid;
 
+	if (fentry_can_attach("tcp_v4_connect", NULL)) {
+		bpf_program__set_attach_target(obj->progs.fentry_tcp_v4_connect, 0, "tcp_v4_connect");
+		bpf_program__set_attach_target(obj->progs.fentry_tcp_v6_connect, 0, "tcp_v6_connect");
+		bpf_program__set_attach_target(obj->progs.fentry_tcp_rcv_state_process, 0, "tcp_rcv_state_process");
+		bpf_program__set_autoload(obj->progs.tcp_v4_connect, false);
+		bpf_program__set_autoload(obj->progs.tcp_v6_connect, false);
+		bpf_program__set_autoload(obj->progs.tcp_rcv_state_process, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.fentry_tcp_v4_connect, false);
+		bpf_program__set_autoload(obj->progs.fentry_tcp_v6_connect, false);
+		bpf_program__set_autoload(obj->progs.fentry_tcp_rcv_state_process, false);
+	}
+
 	err = tcpconnlat_bpf__load(obj);
 	if (err) {
 		fprintf(stderr, "failed to load BPF object: %d\n", err);
diff --git a/libbpf-tools/tcplife.bpf.c b/libbpf-tools/tcplife.bpf.c
new file mode 100644
index 0000000..a05d139
--- /dev/null
+++ b/libbpf-tools/tcplife.bpf.c
@@ -0,0 +1,152 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2022 Hengqi Chen */
+#include <vmlinux.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include "tcplife.h"
+
+#define MAX_ENTRIES	10240
+#define AF_INET		2
+#define AF_INET6	10
+
+const volatile bool filter_sport = false;
+const volatile bool filter_dport = false;
+const volatile __u16 target_sports[MAX_PORTS] = {};
+const volatile __u16 target_dports[MAX_PORTS] = {};
+const volatile pid_t target_pid = 0;
+const volatile __u16 target_family = 0;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, struct sock *);
+	__type(value, __u64);
+} birth SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, struct sock *);
+	__type(value, struct ident);
+} idents SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__uint(key_size, sizeof(__u32));
+	__uint(value_size, sizeof(__u32));
+} events SEC(".maps");
+
+SEC("tracepoint/sock/inet_sock_set_state")
+int inet_sock_set_state(struct trace_event_raw_inet_sock_set_state *args)
+{
+	__u64 ts, *start, delta_us, rx_b, tx_b;
+	struct ident ident = {}, *identp;
+	__u16 sport, dport, family;
+	struct event event = {};
+	struct tcp_sock *tp;
+	struct sock *sk;
+	bool found;
+	__u32 pid;
+	int i;
+
+	if (BPF_CORE_READ(args, protocol) != IPPROTO_TCP)
+		return 0;
+
+	family = BPF_CORE_READ(args, family);
+	if (target_family && family != target_family)
+		return 0;
+
+	sport = BPF_CORE_READ(args, sport);
+	if (filter_sport) {
+		found = false;
+		for (i = 0; i < MAX_PORTS; i++) {
+			if (!target_sports[i])
+				return 0;
+			if (sport != target_sports[i])
+				continue;
+			found = true;
+			break;
+		}
+		if (!found)
+			return 0;
+	}
+
+	dport = BPF_CORE_READ(args, dport);
+	if (filter_dport) {
+		found = false;
+		for (i = 0; i < MAX_PORTS; i++) {
+			if (!target_dports[i])
+				return 0;
+			if (dport != target_dports[i])
+				continue;
+			found = true;
+			break;
+		}
+		if (!found)
+			return 0;
+	}
+
+	sk = (struct sock *)BPF_CORE_READ(args, skaddr);
+	if (BPF_CORE_READ(args, newstate) < TCP_FIN_WAIT1) {
+		ts = bpf_ktime_get_ns();
+		bpf_map_update_elem(&birth, &sk, &ts, BPF_ANY);
+	}
+
+	if (BPF_CORE_READ(args, newstate) == TCP_SYN_SENT || BPF_CORE_READ(args, newstate) == TCP_LAST_ACK) {
+		pid = bpf_get_current_pid_tgid() >> 32;
+		if (target_pid && pid != target_pid)
+			return 0;
+		ident.pid = pid;
+		bpf_get_current_comm(ident.comm, sizeof(ident.comm));
+		bpf_map_update_elem(&idents, &sk, &ident, BPF_ANY);
+	}
+
+	if (BPF_CORE_READ(args, newstate) != TCP_CLOSE)
+		return 0;
+
+	start = bpf_map_lookup_elem(&birth, &sk);
+	if (!start) {
+		bpf_map_delete_elem(&idents, &sk);
+		return 0;
+	}
+	ts = bpf_ktime_get_ns();
+	delta_us = (ts - *start) / 1000;
+
+	identp = bpf_map_lookup_elem(&idents, &sk);
+	pid = identp ? identp->pid : bpf_get_current_pid_tgid() >> 32;
+	if (target_pid && pid != target_pid)
+		goto cleanup;
+
+	tp = (struct tcp_sock *)sk;
+	rx_b = BPF_CORE_READ(tp, bytes_received);
+	tx_b = BPF_CORE_READ(tp, bytes_acked);
+
+	event.ts_us = ts / 1000;
+	event.span_us = delta_us;
+	event.rx_b = rx_b;
+	event.tx_b = tx_b;
+	event.pid = pid;
+	event.sport = sport;
+	event.dport = dport;
+	event.family = family;
+	if (!identp)
+		bpf_get_current_comm(event.comm, sizeof(event.comm));
+	else
+		bpf_probe_read_kernel(event.comm, sizeof(event.comm), (void *)identp->comm);
+	if (family == AF_INET) {
+		bpf_probe_read_kernel(&event.saddr, sizeof(args->saddr), BPF_CORE_READ(args, saddr));
+		bpf_probe_read_kernel(&event.daddr, sizeof(args->daddr), BPF_CORE_READ(args, daddr));
+	} else {	/*  AF_INET6 */
+		bpf_probe_read_kernel(&event.saddr, sizeof(args->saddr_v6), BPF_CORE_READ(args, saddr_v6));
+		bpf_probe_read_kernel(&event.daddr, sizeof(args->daddr_v6), BPF_CORE_READ(args, daddr_v6));
+	}
+	bpf_perf_event_output(args, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+
+cleanup:
+	bpf_map_delete_elem(&birth, &sk);
+	bpf_map_delete_elem(&idents, &sk);
+	return 0;
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/tcplife.c b/libbpf-tools/tcplife.c
new file mode 100644
index 0000000..9af3ea0
--- /dev/null
+++ b/libbpf-tools/tcplife.c
@@ -0,0 +1,247 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/*
+ * tcplife      Trace the lifespan of TCP sessions and summarize.
+ *
+ * Copyright (c) 2022 Hengqi Chen
+ *
+ * Based on tcplife(8) from BCC by Brendan Gregg.
+ * 02-Jun-2022   Hengqi Chen   Created this.
+ */
+#include <argp.h>
+#include <errno.h>
+#include <signal.h>
+#include <time.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+#include "btf_helpers.h"
+#include "tcplife.h"
+#include "tcplife.skel.h"
+
+#define PERF_BUFFER_PAGES	16
+#define PERF_POLL_TIMEOUT_MS	100
+
+static volatile sig_atomic_t exiting = 0;
+
+static pid_t target_pid = 0;
+static short target_family = 0;
+static char *target_sports = NULL;
+static char *target_dports = NULL;
+static int column_width = 15;
+static bool emit_timestamp = false;
+static bool verbose = false;
+
+const char *argp_program_version = "tcplife 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace the lifespan of TCP sessions and summarize.\n"
+"\n"
+"USAGE: tcplife [-h] [-p PID] [-4] [-6] [-L] [-D] [-T] [-w]\n"
+"\n"
+"EXAMPLES:\n"
+"    tcplife -p 1215             # only trace PID 1215\n"
+"    tcplife -p 1215 -4          # trace IPv4 only\n";
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "Process ID to trace" },
+	{ "ipv4", '4', NULL, 0, "Trace IPv4 only" },
+	{ "ipv6", '6', NULL, 0, "Trace IPv6 only" },
+	{ "wide", 'w', NULL, 0, "Wide column output (fits IPv6 addresses)" },
+	{ "time", 'T', NULL, 0, "Include timestamp on output" },
+	{ "localport", 'L', "LOCALPORT", 0, "Comma-separated list of local ports to trace." },
+	{ "remoteport", 'D', "REMOTEPORT", 0, "Comma-separated list of remote ports to trace." },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long n;
+
+	switch (key) {
+	case 'p':
+		errno = 0;
+		n = strtol(arg, NULL, 10);
+		if (errno || n <= 0) {
+			fprintf(stderr, "Invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		target_pid = n;
+		break;
+	case '4':
+		target_family = AF_INET;
+		break;
+	case '6':
+		target_family = AF_INET6;
+		break;
+	case 'w':
+		column_width = 39;
+		break;
+	case 'L':
+		target_sports = strdup(arg);
+		break;
+	case 'D':
+		target_dports = strdup(arg);
+		break;
+	case 'T':
+		emit_timestamp = true;
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	char ts[32], saddr[48], daddr[48];
+	struct event *e = data;
+	struct tm *tm;
+	time_t t;
+
+	if (emit_timestamp) {
+		time(&t);
+		tm = localtime(&t);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		printf("%8s ", ts);
+	}
+
+	inet_ntop(e->family, &e->saddr, saddr, sizeof(saddr));
+	inet_ntop(e->family, &e->daddr, daddr, sizeof(daddr));
+
+	printf("%-7d %-16s %-*s %-5d %-*s %-5d %-6.2f %-6.2f %-.2f\n",
+	       e->pid, e->comm, column_width, saddr, e->sport, column_width, daddr, e->dport,
+	       (double)e->tx_b / 1024, (double)e->rx_b / 1024, (double)e->span_us / 1000);
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	fprintf(stderr, "lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct tcplife_bpf *obj;
+	struct perf_buffer *pb = NULL;
+	short port_num;
+	char *port;
+	int err, i;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = tcplife_bpf__open_opts(&open_opts);
+	if (!obj) {
+		fprintf(stderr, "failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->target_pid = target_pid;
+	obj->rodata->target_family = target_family;
+
+	if (target_sports) {
+		i = 0;
+		port = strtok(target_sports, ",");
+		while (port && i < MAX_PORTS) {
+			port_num = strtol(port, NULL, 10);
+			obj->rodata->target_sports[i++] = port_num;
+			port = strtok(NULL, ",");
+		}
+		obj->rodata->filter_sport = true;
+	}
+
+	if (target_dports) {
+		i = 0;
+		port = strtok(target_dports, ",");
+		while (port && i < MAX_PORTS) {
+			port_num = strtol(port, NULL, 10);
+			obj->rodata->target_dports[i++] = port_num;
+			port = strtok(NULL, ",");
+		}
+		obj->rodata->filter_dport = true;
+	}
+
+	err = tcplife_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = tcplife_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
+			      handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		err = -errno;
+		fprintf(stderr, "failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		fprintf(stderr, "can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	if (emit_timestamp)
+		printf("%-8s ", "TIME(s)");
+	printf("%-7s %-16s %-*s %-5s %-*s %-5s %-6s %-6s %-s\n",
+	       "PID", "COMM", column_width, "LADDR", "LPORT", column_width, "RADDR", "RPORT",
+	       "TX_KB", "RX_KB", "MS");
+
+	while (!exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	tcplife_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+	return err != 0;
+}
diff --git a/libbpf-tools/tcplife.h b/libbpf-tools/tcplife.h
new file mode 100644
index 0000000..6e92352
--- /dev/null
+++ b/libbpf-tools/tcplife.h
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2022 Hengqi Chen */
+#ifndef __TCPLIFE_H
+#define __TCPLIFE_H
+
+#define MAX_PORTS	1024
+#define TASK_COMM_LEN	16
+
+struct ident {
+	__u32 pid;
+	char comm[TASK_COMM_LEN];
+};
+
+struct event {
+	unsigned __int128 saddr;
+	unsigned __int128 daddr;
+	__u64 ts_us;
+	__u64 span_us;
+	__u64 rx_b;
+	__u64 tx_b;
+	__u32 pid;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	char comm[TASK_COMM_LEN];
+};
+
+#endif /* __TCPLIFE_H */
diff --git a/libbpf-tools/tcppktlat.bpf.c b/libbpf-tools/tcppktlat.bpf.c
new file mode 100644
index 0000000..24b4c8f
--- /dev/null
+++ b/libbpf-tools/tcppktlat.bpf.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2023 Wenbo Zhang
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+
+#include "compat.bpf.h"
+#include "core_fixes.bpf.h"
+#include "tcppktlat.h"
+
+#define MAX_ENTRIES	10240
+#define AF_INET		2
+
+const volatile pid_t targ_pid = 0;
+const volatile pid_t targ_tid = 0;
+const volatile __u16 targ_sport = 0;
+const volatile __u16 targ_dport = 0;
+const volatile __u64 targ_min_us = 0;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, u64);
+	__type(value, u64);
+} start SEC(".maps");
+
+static int handle_tcp_probe(struct sock *sk, struct sk_buff *skb)
+{
+	const struct inet_sock *inet = (struct inet_sock *)(sk);
+	u64 sock_ident, ts, len, doff;
+	const struct tcphdr *th;
+
+	if (targ_sport && targ_sport != BPF_CORE_READ(inet, inet_sport))
+		return 0;
+	if (targ_dport && targ_dport != BPF_CORE_READ(sk, __sk_common.skc_dport))
+		return 0;
+	th = (const struct tcphdr*)BPF_CORE_READ(skb, data);
+	doff = BPF_CORE_READ_BITFIELD_PROBED(th, doff);
+	len = BPF_CORE_READ(skb, len);
+	/* `doff * 4` means `__tcp_hdrlen` */
+	if (len <= doff * 4)
+		return 0;
+	sock_ident = get_sock_ident(sk);
+	ts = bpf_ktime_get_ns();
+	bpf_map_update_elem(&start, &sock_ident, &ts, 0);
+	return 0;
+}
+
+static int handle_tcp_rcv_space_adjust(void *ctx, struct sock *sk)
+{
+	const struct inet_sock *inet = (struct inet_sock *)(sk);
+	u64 sock_ident = get_sock_ident(sk);
+	u64 id = bpf_get_current_pid_tgid(), *tsp;
+	u32 pid = id >> 32, tid = id;
+	struct event *eventp;
+	s64 delta_us;
+	u16 family;
+
+	tsp = bpf_map_lookup_elem(&start, &sock_ident);
+	if (!tsp)
+		return 0;
+
+	if (targ_pid && targ_pid != pid)
+		goto cleanup;
+	if (targ_tid && targ_tid != tid)
+		goto cleanup;
+
+	delta_us = (bpf_ktime_get_ns() - *tsp) / 1000;
+	if (delta_us < 0 || delta_us <= targ_min_us)
+		goto cleanup;
+
+	eventp = reserve_buf(sizeof(*eventp));
+	if (!eventp)
+		goto cleanup;
+
+	eventp->pid = pid;
+	eventp->tid = tid;
+	eventp->delta_us = delta_us;
+	eventp->sport = BPF_CORE_READ(inet, inet_sport);
+	eventp->dport = BPF_CORE_READ(sk, __sk_common.skc_dport);
+	bpf_get_current_comm(&eventp->comm, TASK_COMM_LEN);
+	family = BPF_CORE_READ(sk, __sk_common.skc_family);
+	if (family == AF_INET) {
+		eventp->saddr[0] = BPF_CORE_READ(sk, __sk_common.skc_rcv_saddr);
+		eventp->daddr[0] = BPF_CORE_READ(sk, __sk_common.skc_daddr);
+	} else { /* family == AF_INET6 */
+		BPF_CORE_READ_INTO(eventp->saddr, sk, __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
+		BPF_CORE_READ_INTO(eventp->daddr, sk, __sk_common.skc_v6_daddr.in6_u.u6_addr32);
+	}
+	eventp->family = family;
+	submit_buf(ctx, eventp, sizeof(*eventp));
+
+cleanup:
+	bpf_map_delete_elem(&start, &sock_ident);
+	return 0;
+}
+
+static int handle_tcp_destroy_sock(void *ctx, struct sock *sk)
+{
+	u64 sock_ident = get_sock_ident(sk);
+
+	bpf_map_delete_elem(&start, &sock_ident);
+	return 0;
+}
+
+SEC("tp_btf/tcp_probe")
+int BPF_PROG(tcp_probe_btf, struct sock *sk, struct sk_buff *skb)
+{
+	return handle_tcp_probe(sk, skb);
+}
+
+SEC("tp_btf/tcp_rcv_space_adjust")
+int BPF_PROG(tcp_rcv_space_adjust_btf, struct sock *sk)
+{
+	return handle_tcp_rcv_space_adjust(ctx, sk);
+}
+
+SEC("tp_btf/tcp_destroy_sock")
+int BPF_PROG(tcp_destroy_sock_btf, struct sock *sk)
+{
+	return handle_tcp_destroy_sock(ctx, sk);
+}
+
+SEC("raw_tp/tcp_probe")
+int BPF_PROG(tcp_probe, struct sock *sk, struct sk_buff *skb) {
+	return handle_tcp_probe(sk, skb);
+}
+
+SEC("raw_tp/tcp_rcv_space_adjust")
+int BPF_PROG(tcp_rcv_space_adjust, struct sock *sk)
+{
+	return handle_tcp_rcv_space_adjust(ctx, sk);
+}
+
+SEC("raw_tp/tcp_destroy_sock")
+int BPF_PROG(tcp_destroy_sock, struct sock *sk)
+{
+	return handle_tcp_destroy_sock(ctx, sk);
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/tcppktlat.c b/libbpf-tools/tcppktlat.c
new file mode 100644
index 0000000..9c63bb3
--- /dev/null
+++ b/libbpf-tools/tcppktlat.c
@@ -0,0 +1,267 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+// Copyright (c) 2023 Wenbo Zhang
+#include <argp.h>
+#include <signal.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <sys/resource.h>
+
+#include <bpf/bpf.h>
+#include <bpf/libbpf.h>
+#include "tcppktlat.h"
+#include "tcppktlat.skel.h"
+#include "compat.h"
+#include "trace_helpers.h"
+
+static struct env {
+	pid_t pid;
+	pid_t tid;
+	__u64 min_us;
+	__u16 lport;
+	__u16 rport;
+	bool timestamp;
+	bool verbose;
+} env = {};
+
+static volatile sig_atomic_t exiting = 0;
+static int column_width = 15;
+
+const char *argp_program_version = "tcppktlat 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace latency between TCP received pkt and picked up by userspace thread.\n"
+"\n"
+"USAGE: tcppktlat [--help] [-T] [-p PID] [-t TID] [-l LPORT] [-r RPORT] [-w] [-v]\n"
+"\n"
+"EXAMPLES:\n"
+"    tcppktlat             # Trace all TCP packet picked up latency\n"
+"    tcppktlat -T          # summarize with timestamps\n"
+"    tcppktlat -p          # filter for pid\n"
+"    tcppktlat -t          # filter for tid\n"
+"    tcppktlat -l          # filter for local port\n"
+"    tcppktlat -r          # filter for remote port\n"
+"    tcppktlat 1000        # filter for latency higher than 1000us";
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "Process PID to trace"},
+	{ "tid", 't', "TID", 0, "Thread TID to trace"},
+	{ "timestamp", 'T', NULL, 0, "include timestamp on output" },
+	{ "lport", 'l', "LPORT", 0, "filter for local port" },
+	{ "rport", 'r', "RPORT", 0, "filter for remote port" },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "wide", 'w', NULL, 0, "Wide column output (fits IPv6 addresses)" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	static int pos_args;
+	long long min_us;
+	int pid;
+
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		env.verbose = true;
+		break;
+	case 'T':
+		env.timestamp = true;
+		break;
+	case 'p':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			fprintf(stderr, "Invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		env.pid = pid;
+		break;
+	case 't':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			fprintf(stderr, "Invalid TID: %s\n", arg);
+			argp_usage(state);
+		}
+		env.tid = pid;
+		break;
+	case 'l':
+		errno = 0;
+		env.lport = strtoul(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "invalid lport: %s\n", arg);
+			argp_usage(state);
+		}
+		env.lport = htons(env.lport);
+		break;
+	case 'r':
+		errno = 0;
+		env.rport = strtoul(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "invalid rport: %s\n", arg);
+			argp_usage(state);
+		}
+		env.rport = htons(env.rport);
+		break;
+	case 'w':
+		column_width = 26;
+		break;
+	case ARGP_KEY_ARG:
+		if (pos_args++) {
+			fprintf(stderr,
+				"Unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+		errno = 0;
+		min_us = strtoll(arg, NULL, 10);
+		if (errno || min_us <= 0) {
+			fprintf(stderr, "Invalid delay (in us): %s\n", arg);
+			argp_usage(state);
+		}
+		env.min_us = min_us;
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !env.verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static int handle_event(void *ctx, void *data, size_t data_sz)
+{
+	const struct event *e = data;
+	char saddr[48], daddr[48];
+	struct tm *tm;
+	char ts[32];
+	time_t t;
+
+	if (env.timestamp) {
+		time(&t);
+		tm = localtime(&t);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		printf("%-8s ", ts);
+	}
+	inet_ntop(e->family, &e->saddr, saddr, sizeof(saddr));
+	inet_ntop(e->family, &e->daddr, daddr, sizeof(daddr));
+
+	printf("%-7d %-7d %-16s %-*s %-5d %-*s %-5d %-.2f\n",
+		e->pid, e->tid, e->comm, column_width, saddr, ntohs(e->sport), column_width, daddr,
+		ntohs(e->dport), e->delta_us / 1000.0);
+
+	return 0;
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	fprintf(stderr, "lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct bpf_buffer *buf = NULL;
+	struct tcppktlat_bpf *obj;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = tcppktlat_bpf__open();
+	if (!obj) {
+		fprintf(stderr, "failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->targ_pid = env.pid;
+	obj->rodata->targ_tid = env.tid;
+	obj->rodata->targ_sport = env.lport;
+	obj->rodata->targ_dport = env.rport;
+	obj->rodata->targ_min_us = env.min_us;
+
+	buf = bpf_buffer__new(obj->maps.events, obj->maps.heap);
+	if (!buf) {
+		err = -errno;
+		fprintf(stderr, "failed to create ring/perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (probe_tp_btf("tcp_probe")) {
+		bpf_program__set_autoload(obj->progs.tcp_probe, false);
+		bpf_program__set_autoload(obj->progs.tcp_rcv_space_adjust, false);
+		bpf_program__set_autoload(obj->progs.tcp_destroy_sock, false);
+	} else {
+		bpf_program__set_autoload(obj->progs.tcp_probe_btf, false);
+		bpf_program__set_autoload(obj->progs.tcp_rcv_space_adjust_btf, false);
+		bpf_program__set_autoload(obj->progs.tcp_destroy_sock_btf, false);
+	}
+
+	err = tcppktlat_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d, maybe your kernel doesn't support `bpf_get_socket_cookie`\n", err);
+		goto cleanup;
+	}
+
+	err = tcppktlat_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = bpf_buffer__open(buf, handle_event, handle_lost_events, NULL);
+	if (err) {
+		fprintf(stderr, "failed to open ring/perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		fprintf(stderr, "can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	if (env.timestamp)
+		printf("%-8s ", "TIME(s)");
+	printf("%-7s %-7s %-16s %-*s %-5s %-*s %-5s %-s\n",
+		"PID", "TID", "COMM", column_width, "LADDR", "LPORT", column_width, "RADDR", "RPORT", "MS");
+
+	while (!exiting) {
+		err = bpf_buffer__poll(buf, POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			fprintf(stderr, "error polling ring/perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+cleanup:
+	bpf_buffer__free(buf);
+	tcppktlat_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/tcppktlat.h b/libbpf-tools/tcppktlat.h
new file mode 100644
index 0000000..00a93aa
--- /dev/null
+++ b/libbpf-tools/tcppktlat.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+#ifndef __TCPPKGLAT_H
+#define __TCPPKGLAT_H
+
+#define TASK_COMM_LEN	16
+
+struct event {
+	__u32 saddr[4];
+	__u32 daddr[4];
+	__u64 delta_us;
+	pid_t pid;
+	pid_t tid;
+	__u16 dport;
+	__u16 sport;
+	__u16 family;
+	char comm[TASK_COMM_LEN];
+};
+
+#endif /* __TCPPKGLAT_H_ */
diff --git a/libbpf-tools/tcppktlat_example.txt b/libbpf-tools/tcppktlat_example.txt
new file mode 100644
index 0000000..07c0a01
--- /dev/null
+++ b/libbpf-tools/tcppktlat_example.txt
@@ -0,0 +1,70 @@
+Demonstrations of tcppktlat, the Linux BPF CO-RE version.
+
+tcppktlat traces latency between TCP received pkt and picked up by userspace thread system-wide, and prints various details.
+Example output:
+
+# tcppktlat
+PID     COMM             LADDR           LPORT RADDR           RPORT MS
+4424    etcd             127.0.0.1       2379  127.0.0.1       53202 0.06
+4405    kube-apiserver   127.0.0.1       53202 127.0.0.1       2379  0.06
+1370211 wakatime-cli     172.22.130.115  59394 143.244.210.202 443   2.75
+3894    kubelet          172.18.0.3      51584 172.18.0.4      6443  0.08
+^C
+
+In the process of tracing, when a network soft interrupt reads a TCP packet, it is placed into the corresponding socket's receive queue, and then copied from kernel space to user space by a user-level thread. The latency between receiving the packet and it being retrieved can be used to determine if there are any performance issues in the user-level path for handling received TCP packet.
+
+The -l option can be used to filter on a local port, which is filtered in-kernel.
+
+# tcppktlat -l 7000
+PID     COMM             LADDR           LPORT RADDR           RPORT MS
+1354840 server           127.0.0.1       7000  127.0.0.1       43932 0.05
+1354840 server           127.0.0.1       7000  127.0.0.1       43932 4.88
+1354840 server           127.0.0.1       7000  127.0.0.1       43932 6.02
+^C
+
+The output shows server experiences jitter and higher latency in reading data, requiring troubleshooting.
+
+
+We can use minimum latency(us) as a filtering condition.
+
+# tcppktlat 1000
+PID     COMM             LADDR           LPORT RADDR           RPORT MS
+1354840 server           127.0.0.1       7000  127.0.0.1       35924 130.21
+1370211 wakatime-cli     172.22.130.115  59394 143.244.210.202 443   2.75
+4405    kube-apiserver   ::              6443  ::              55726 1.61
+1370227 wakatime-cli     172.22.130.115  50642 143.244.210.202 443   2.80
+4405    kube-apiserver   127.0.0.1       53178 127.0.0.1       2379  1.57
+1370281 wakatime-cli     172.22.130.115  40908 143.244.210.202 443   3.31
+1370315 sshd             127.0.0.1       22    127.0.0.1       42070 6.41
+^C
+
+
+# tcppktlat --help
+Usage: tcppktlat [OPTION...]
+Trace latency between TCP received pkt and picked up by userspace thread.
+
+USAGE: tcppktlat [--help] [-T] [-p PID] [-t TID] [-l LPORT] [-r RPORT] [-v]
+
+EXAMPLES:
+    tcppktlat             # Trace all TCP packet picked up latency
+    tcppktlat -T          # summarize with timestamps
+    tcppktlat -p          # filter for pid
+    tcppktlat -t          # filter for tid
+    tcppktlat -l          # filter for local port
+    tcppktlat -r          # filter for remote port
+    tcppktlat 1000        # filter for latency higher than 1000us
+
+  -l, --lport=LPORT          filter for local port
+  -p, --pid=PID              Process PID to trace
+  -r, --rport=RPORT          filter for remote port
+  -t, --tid=TID              Thread TID to trace
+  -T, --timestamp            include timestamp on output
+  -v, --verbose              Verbose debug output
+  -?, --help                 Give this help list
+      --usage                Give a short usage message
+  -V, --version              Print program version
+
+Mandatory or optional arguments to long options are also mandatory or optional
+for any corresponding short options.
+
+Report bugs to https://github.com/iovisor/bcc/tree/master/libbpf-tools.
diff --git a/libbpf-tools/tcprtt.bpf.c b/libbpf-tools/tcprtt.bpf.c
index 0b332e4..3f5cab6 100644
--- a/libbpf-tools/tcprtt.bpf.c
+++ b/libbpf-tools/tcprtt.bpf.c
@@ -9,6 +9,11 @@
 #include "bits.bpf.h"
 #include "maps.bpf.h"
 
+/* Taken from kernel include/linux/socket.h. */
+#define AF_INET		2	/* IP version 4 */
+#define AF_INET6	10	/* IP version 6 */
+
+
 const volatile bool targ_laddr_hist = false;
 const volatile bool targ_raddr_hist = false;
 const volatile bool targ_show_ext = false;
@@ -16,6 +21,8 @@
 const volatile __u16 targ_dport = 0;
 const volatile __u32 targ_saddr = 0;
 const volatile __u32 targ_daddr = 0;
+const volatile __u8 targ_saddr_v6[IPV6_LEN] = {};
+const volatile __u8 targ_daddr_v6[IPV6_LEN] = {};
 const volatile bool targ_ms = false;
 
 #define MAX_ENTRIES	10240
@@ -23,36 +30,99 @@
 struct {
 	__uint(type, BPF_MAP_TYPE_HASH);
 	__uint(max_entries, MAX_ENTRIES);
-	__type(key, u64);
+	__type(key, struct hist_key);
 	__type(value, struct hist);
 } hists SEC(".maps");
 
 static struct hist zero;
 
-SEC("fentry/tcp_rcv_established")
-int BPF_PROG(tcp_rcv, struct sock *sk)
+/*
+ * We cannot use the following:
+ * __builtin_memcmp(targ_*addr_v6, *, sizeof(targ_*addr_v6));
+ * Indeed, by using the builtin, we would discard the volatile qualifier of
+ * targ_*addr_v6, so the compiler would optimize it and replaces the call
+ * with 0.
+ * So, using the volatile qualifier ensures this function is called at runtime.
+ */
+static bool inline ipv6_is_not_zero(const volatile __u8 addr[IPV6_LEN])
+{
+	for (int i = 0; i < IPV6_LEN; i++)
+		if (addr[i])
+			return true;
+	return false;
+}
+
+static bool inline ipv6_are_different(const volatile __u8 a[IPV6_LEN], const __u8 b[IPV6_LEN])
+{
+	for (int i = 0; i < IPV6_LEN; i++)
+		if (a[i] != b[i])
+			return true;
+	return false;
+}
+
+static int handle_tcp_rcv_established(struct sock *sk)
 {
 	const struct inet_sock *inet = (struct inet_sock *)(sk);
 	struct tcp_sock *ts;
 	struct hist *histp;
-	u64 key, slot;
+	struct hist_key key = {};
+	u64 slot;
 	u32 srtt;
 
-	if (targ_sport && targ_sport != inet->inet_sport)
+	if (targ_sport && targ_sport != BPF_CORE_READ(inet, inet_sport))
 		return 0;
-	if (targ_dport && targ_dport != sk->__sk_common.skc_dport)
-		return 0;
-	if (targ_saddr && targ_saddr != inet->inet_saddr)
-		return 0;
-	if (targ_daddr && targ_daddr != sk->__sk_common.skc_daddr)
+	if (targ_dport && targ_dport != BPF_CORE_READ(sk, __sk_common.skc_dport))
 		return 0;
 
-	if (targ_laddr_hist)
-		key = inet->inet_saddr;
-	else if (targ_raddr_hist)
-		key = inet->sk.__sk_common.skc_daddr;
-	else
-		key = 0;
+	key.family = BPF_CORE_READ(sk, __sk_common.skc_family);
+	switch (key.family) {
+	case AF_INET:
+		/* If we set any of IPv6 address, we do not care about IPv4 ones. */
+		if (ipv6_is_not_zero(targ_saddr_v6) || ipv6_is_not_zero(targ_daddr_v6))
+			return 0;
+
+		if (targ_saddr && targ_saddr != BPF_CORE_READ(inet, inet_saddr))
+			return 0;
+
+		if (targ_daddr && targ_daddr != BPF_CORE_READ(sk, __sk_common.skc_daddr))
+			return 0;
+
+		break;
+	case AF_INET6:
+		/*
+		 * Reciprocal of the above: if we set any of IPv4 address, we do not care
+		 * about IPv6 ones.
+		 */
+		if (targ_saddr || targ_daddr)
+			return 0;
+
+		if (ipv6_is_not_zero(targ_saddr_v6)
+			&& ipv6_are_different(targ_saddr_v6, BPF_CORE_READ(inet, pinet6, saddr.in6_u.u6_addr8)))
+			return 0;
+
+		if (ipv6_is_not_zero(targ_daddr_v6)
+			&& ipv6_are_different(targ_daddr_v6, BPF_CORE_READ(sk, __sk_common.skc_v6_daddr.in6_u.u6_addr8)))
+			return 0;
+
+		break;
+	default:
+		return 0;
+	}
+
+	if (targ_laddr_hist) {
+		if (key.family == AF_INET6)
+			bpf_probe_read_kernel(key.addr, sizeof(key.addr), BPF_CORE_READ(inet, pinet6, saddr.in6_u.u6_addr8));
+		else
+			bpf_probe_read_kernel(key.addr, sizeof(inet->inet_saddr), &inet->inet_saddr);
+	} else if (targ_raddr_hist) {
+		if (key.family == AF_INET6)
+			bpf_probe_read_kernel(&key.addr, sizeof(key.addr), BPF_CORE_READ(sk, __sk_common.skc_v6_daddr.in6_u.u6_addr8));
+		else
+			bpf_probe_read_kernel(&key.addr, sizeof(inet->sk.__sk_common.skc_daddr), &inet->sk.__sk_common.skc_daddr);
+	} else {
+		key.family = 0;
+	}
+
 	histp = bpf_map_lookup_or_try_init(&hists, &key, &zero);
 	if (!histp)
 		return 0;
@@ -71,57 +141,16 @@
 	return 0;
 }
 
+SEC("fentry/tcp_rcv_established")
+int BPF_PROG(tcp_rcv, struct sock *sk)
+{
+	return handle_tcp_rcv_established(sk);
+}
+
 SEC("kprobe/tcp_rcv_established")
 int BPF_KPROBE(tcp_rcv_kprobe, struct sock *sk)
 {
-	const struct inet_sock *inet = (struct inet_sock *)(sk);
-	u32 srtt, saddr, daddr;
-	struct tcp_sock *ts;
-	struct hist *histp;
-	u64 key, slot;
-
-	if (targ_sport) {
-		u16 sport;
-		bpf_probe_read_kernel(&sport, sizeof(sport), &inet->inet_sport);
-		if (targ_sport != sport)
-			return 0;
-	}
-	if (targ_dport) {
-		u16 dport;
-		bpf_probe_read_kernel(&dport, sizeof(dport), &sk->__sk_common.skc_dport);
-		if (targ_dport != dport)
-			return 0;
-	}
-	bpf_probe_read_kernel(&saddr, sizeof(saddr), &inet->inet_saddr);
-	if (targ_saddr && targ_saddr != saddr)
-		return 0;
-	bpf_probe_read_kernel(&daddr, sizeof(daddr), &sk->__sk_common.skc_daddr);
-	if (targ_daddr && targ_daddr != daddr)
-		return 0;
-
-	if (targ_laddr_hist)
-		key = saddr;
-	else if (targ_raddr_hist)
-		key = daddr;
-	else
-		key = 0;
-	histp = bpf_map_lookup_or_try_init(&hists, &key, &zero);
-	if (!histp)
-		return 0;
-	ts = (struct tcp_sock *)(sk);
-	bpf_probe_read_kernel(&srtt, sizeof(srtt), &ts->srtt_us);
-	srtt >>= 3;
-	if (targ_ms)
-		srtt /= 1000U;
-	slot = log2l(srtt);
-	if (slot >= MAX_SLOTS)
-		slot = MAX_SLOTS - 1;
-	__sync_fetch_and_add(&histp->slots[slot], 1);
-	if (targ_show_ext) {
-		__sync_fetch_and_add(&histp->latency, srtt);
-		__sync_fetch_and_add(&histp->cnt, 1);
-	}
-	return 0;
+	return handle_tcp_rcv_established(sk);
 }
 
 char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/tcprtt.c b/libbpf-tools/tcprtt.c
index cfc0ed5..2ca883c 100644
--- a/libbpf-tools/tcprtt.c
+++ b/libbpf-tools/tcprtt.c
@@ -21,6 +21,8 @@
 	__u16 rport;
 	__u32 laddr;
 	__u32 raddr;
+	__u8 laddr_v6[IPV6_LEN];
+	__u8 raddr_v6[IPV6_LEN];
 	bool milliseconds;
 	time_t duration;
 	time_t interval;
@@ -77,6 +79,7 @@
 static error_t parse_arg(int key, char *arg, struct argp_state *state)
 {
 	struct in_addr addr;
+	struct in6_addr addr_v6;
 
 	switch (key) {
 	case 'h':
@@ -126,18 +129,34 @@
 		env.rport = htons(env.rport);
 		break;
 	case 'a':
-		if (inet_aton(arg, &addr) < 0) {
-			fprintf(stderr, "invalid local address: %s\n", arg);
-			argp_usage(state);
-		}
-		env.laddr = addr.s_addr;
+                if (strchr(arg, ':')) {
+                        if (inet_pton(AF_INET6, arg, &addr_v6) < 1) {
+                                fprintf(stderr, "invalid local IPv6 address: %s\n", arg);
+                                argp_usage(state);
+                        }
+                        memcpy(env.laddr_v6, &addr_v6, sizeof(env.laddr_v6));
+                } else {
+                        if (inet_pton(AF_INET, arg, &addr) < 0) {
+                                fprintf(stderr, "invalid local address: %s\n", arg);
+                                argp_usage(state);
+                        }
+                        env.laddr = addr.s_addr;
+                }
 		break;
 	case 'A':
-		if (inet_aton(arg, &addr) < 0) {
-			fprintf(stderr, "invalid remote address: %s\n", arg);
-			argp_usage(state);
-		}
-		env.raddr = addr.s_addr;
+                if (strchr(arg, ':')) {
+                        if (inet_pton(AF_INET6, arg, &addr_v6) < 1) {
+                                fprintf(stderr, "invalid remote address: %s\n", arg);
+                                argp_usage(state);
+                        }
+                        memcpy(env.raddr_v6, &addr_v6, sizeof(env.raddr_v6));
+                } else {
+                        if (inet_pton(AF_INET, arg, &addr) < 0) {
+                                fprintf(stderr, "invalid remote address: %s\n", arg);
+                                argp_usage(state);
+                        }
+                        env.raddr = addr.s_addr;
+                }
 		break;
 	case 'b':
 		env.laddr_hist = true;
@@ -169,39 +188,52 @@
 static int print_map(struct bpf_map *map)
 {
 	const char *units = env.milliseconds ? "msecs" : "usecs";
-	__u64 lookup_key = -1, next_key;
+	struct hist_key *lookup_key = NULL, next_key;
 	int err, fd = bpf_map__fd(map);
 	struct hist hist;
 
-	while (!bpf_map_get_next_key(fd, &lookup_key, &next_key)) {
+	while (!bpf_map_get_next_key(fd, lookup_key, &next_key)) {
 		err = bpf_map_lookup_elem(fd, &next_key, &hist);
 		if (err < 0) {
 			fprintf(stderr, "failed to lookup infos: %d\n", err);
 			return -1;
 		}
 
-		struct in_addr addr = {.s_addr = next_key };
+
 		if (env.laddr_hist)
-			printf("Local Address = %s ", inet_ntoa(addr));
+			printf("Local Address = ");
 		else if (env.raddr_hist)
-			printf("Remote Address = %s ", inet_ntoa(addr));
+			printf("Remote Address = ");
 		else
 			printf("All Addresses = ****** ");
+
+		if (env.laddr_hist || env.raddr_hist) {
+			__u16 family = next_key.family;
+			char str[INET6_ADDRSTRLEN];
+
+			if (!inet_ntop(family, next_key.addr, str, sizeof(str))) {
+				perror("converting IP to string:");
+				return -1;
+			}
+
+			printf("%s ", str);
+		}
+
 		if (env.extended)
 			printf("[AVG %llu]", hist.latency / hist.cnt);
 		printf("\n");
 		print_log2_hist(hist.slots, MAX_SLOTS, units);
-		lookup_key = next_key;
+		lookup_key = &next_key;
 	}
 
-	lookup_key = -1;
-	while (!bpf_map_get_next_key(fd, &lookup_key, &next_key)) {
+	lookup_key = NULL;
+	while (!bpf_map_get_next_key(fd, lookup_key, &next_key)) {
 		err = bpf_map_delete_elem(fd, &next_key);
 		if (err < 0) {
 			fprintf(stderr, "failed to cleanup infos: %d\n", err);
 			return -1;
 		}
-		lookup_key = next_key;
+		lookup_key = &next_key;
 	}
 
 	return 0;
@@ -214,6 +246,7 @@
 		.parser = parse_arg,
 		.doc = argp_program_doc,
 	};
+	__u8 zero_addr_v6[IPV6_LEN] = {};
 	struct tcprtt_bpf *obj;
 	__u64 time_end = 0;
 	struct tm *tm;
@@ -225,7 +258,12 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
+	if ((env.laddr || env.raddr)
+		&& (memcmp(env.laddr_v6, zero_addr_v6, sizeof(env.laddr_v6)) || memcmp(env.raddr_v6, zero_addr_v6, sizeof(env.raddr_v6)))) {
+		fprintf(stderr, "It is not permitted to filter by both IPv4 and IPv6\n");
+		return 1;
+	}
+
 	libbpf_set_print(libbpf_print_fn);
 
 	obj = tcprtt_bpf__open();
@@ -241,6 +279,8 @@
 	obj->rodata->targ_dport = env.rport;
 	obj->rodata->targ_saddr = env.laddr;
 	obj->rodata->targ_daddr = env.raddr;
+	memcpy(obj->rodata->targ_saddr_v6, env.laddr_v6, sizeof(obj->rodata->targ_saddr_v6));
+	memcpy(obj->rodata->targ_daddr_v6, env.raddr_v6, sizeof(obj->rodata->targ_daddr_v6));
 	obj->rodata->targ_ms = env.milliseconds;
 
 	if (fentry_can_attach("tcp_rcv_established", NULL))
diff --git a/libbpf-tools/tcprtt.h b/libbpf-tools/tcprtt.h
index d9daed1..3f82c31 100644
--- a/libbpf-tools/tcprtt.h
+++ b/libbpf-tools/tcprtt.h
@@ -3,6 +3,7 @@
 #define __TCPRTT_H
 
 #define MAX_SLOTS	27
+#define IPV6_LEN	16
 
 struct hist {
 	__u64 latency;
@@ -10,4 +11,9 @@
 	__u32 slots[MAX_SLOTS];
 };
 
+struct hist_key {
+	__u16 family;
+	__u8 addr[IPV6_LEN];
+};
+
 #endif /* __TCPRTT_H */
diff --git a/libbpf-tools/tcpstates.bpf.c b/libbpf-tools/tcpstates.bpf.c
new file mode 100644
index 0000000..0f9ed24
--- /dev/null
+++ b/libbpf-tools/tcpstates.bpf.c
@@ -0,0 +1,102 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2021 Hengqi Chen */
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_core_read.h>
+#include "tcpstates.h"
+
+#define MAX_ENTRIES	10240
+#define AF_INET		2
+#define AF_INET6	10
+
+const volatile bool filter_by_sport = false;
+const volatile bool filter_by_dport = false;
+const volatile short target_family = 0;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, __u16);
+	__type(value, __u16);
+} sports SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, __u16);
+	__type(value, __u16);
+} dports SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, struct sock *);
+	__type(value, __u64);
+} timestamps SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__uint(key_size, sizeof(__u32));
+	__uint(value_size, sizeof(__u32));
+} events SEC(".maps");
+
+SEC("tracepoint/sock/inet_sock_set_state")
+int handle_set_state(struct trace_event_raw_inet_sock_set_state *ctx)
+{
+	struct sock *sk = (struct sock *)ctx->skaddr;
+	__u16 family = ctx->family;
+	__u16 sport = ctx->sport;
+	__u16 dport = ctx->dport;
+	__u64 *tsp, delta_us, ts;
+	struct event event = {};
+
+	if (ctx->protocol != IPPROTO_TCP)
+		return 0;
+
+	if (target_family && target_family != family)
+		return 0;
+
+	if (filter_by_sport && !bpf_map_lookup_elem(&sports, &sport))
+		return 0;
+
+	if (filter_by_dport && !bpf_map_lookup_elem(&dports, &dport))
+		return 0;
+
+	tsp = bpf_map_lookup_elem(&timestamps, &sk);
+	ts = bpf_ktime_get_ns();
+	if (!tsp)
+		delta_us = 0;
+	else
+		delta_us = (ts - *tsp) / 1000;
+
+	event.skaddr = (__u64)sk;
+	event.ts_us = ts / 1000;
+	event.delta_us = delta_us;
+	event.pid = bpf_get_current_pid_tgid() >> 32;
+	event.oldstate = ctx->oldstate;
+	event.newstate = ctx->newstate;
+	event.family = family;
+	event.sport = sport;
+	event.dport = dport;
+	bpf_get_current_comm(&event.task, sizeof(event.task));
+
+	if (family == AF_INET) {
+		bpf_probe_read_kernel(&event.saddr, sizeof(event.saddr), &sk->__sk_common.skc_rcv_saddr);
+		bpf_probe_read_kernel(&event.daddr, sizeof(event.daddr), &sk->__sk_common.skc_daddr);
+	} else { /* family == AF_INET6 */
+		bpf_probe_read_kernel(&event.saddr, sizeof(event.saddr), &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
+		bpf_probe_read_kernel(&event.daddr, sizeof(event.daddr), &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
+	}
+
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
+
+	if (ctx->newstate == TCP_CLOSE)
+		bpf_map_delete_elem(&timestamps, &sk);
+	else
+		bpf_map_update_elem(&timestamps, &sk, &ts, BPF_ANY);
+
+	return 0;
+}
+
+char LICENSE[] SEC("license") = "Dual BSD/GPL";
diff --git a/libbpf-tools/tcpstates.c b/libbpf-tools/tcpstates.c
new file mode 100644
index 0000000..6367432
--- /dev/null
+++ b/libbpf-tools/tcpstates.c
@@ -0,0 +1,296 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+
+/*
+ * tcpstates    Trace TCP session state changes with durations.
+ * Copyright (c) 2021 Hengqi Chen
+ *
+ * Based on tcpstates(8) from BCC by Brendan Gregg.
+ * 18-Dec-2021   Hengqi Chen   Created this.
+ */
+#include <argp.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <time.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "btf_helpers.h"
+#include "tcpstates.h"
+#include "tcpstates.skel.h"
+#include "trace_helpers.h"
+
+#define PERF_BUFFER_PAGES	16
+#define PERF_POLL_TIMEOUT_MS	100
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+
+static volatile sig_atomic_t exiting = 0;
+
+static bool emit_timestamp = false;
+static short target_family = 0;
+static char *target_sports = NULL;
+static char *target_dports = NULL;
+static bool wide_output = false;
+static bool verbose = false;
+static const char *tcp_states[] = {
+	[1] = "ESTABLISHED",
+	[2] = "SYN_SENT",
+	[3] = "SYN_RECV",
+	[4] = "FIN_WAIT1",
+	[5] = "FIN_WAIT2",
+	[6] = "TIME_WAIT",
+	[7] = "CLOSE",
+	[8] = "CLOSE_WAIT",
+	[9] = "LAST_ACK",
+	[10] = "LISTEN",
+	[11] = "CLOSING",
+	[12] = "NEW_SYN_RECV",
+	[13] = "UNKNOWN",
+};
+
+const char *argp_program_version = "tcpstates 1.0";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace TCP session state changes and durations.\n"
+"\n"
+"USAGE: tcpstates [-4] [-6] [-T] [-L lport] [-D dport]\n"
+"\n"
+"EXAMPLES:\n"
+"    tcpstates                  # trace all TCP state changes\n"
+"    tcpstates -T               # include timestamps\n"
+"    tcpstates -L 80            # only trace local port 80\n"
+"    tcpstates -D 80            # only trace remote port 80\n";
+
+static const struct argp_option opts[] = {
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "timestamp", 'T', NULL, 0, "Include timestamp on output" },
+	{ "ipv4", '4', NULL, 0, "Trace IPv4 family only" },
+	{ "ipv6", '6', NULL, 0, "Trace IPv6 family only" },
+	{ "wide", 'w', NULL, 0, "Wide column output (fits IPv6 addresses)" },
+	{ "localport", 'L', "LPORT", 0, "Comma-separated list of local ports to trace." },
+	{ "remoteport", 'D', "DPORT", 0, "Comma-separated list of remote ports to trace." },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long port_num;
+	char *port;
+
+	switch (key) {
+	case 'v':
+		verbose = true;
+		break;
+	case 'T':
+		emit_timestamp = true;
+		break;
+	case '4':
+		target_family = AF_INET;
+		break;
+	case '6':
+		target_family = AF_INET6;
+		break;
+	case 'w':
+		wide_output = true;
+		break;
+	case 'L':
+		if (!arg) {
+			warn("No ports specified\n");
+			argp_usage(state);
+		}
+		target_sports = strdup(arg);
+		port = strtok(arg, ",");
+		while (port) {
+			port_num = strtol(port, NULL, 10);
+			if (errno || port_num <= 0 || port_num > 65536) {
+				warn("Invalid ports: %s\n", arg);
+				argp_usage(state);
+			}
+			port = strtok(NULL, ",");
+		}
+		break;
+	case 'D':
+		if (!arg) {
+			warn("No ports specified\n");
+			argp_usage(state);
+		}
+		target_dports = strdup(arg);
+		port = strtok(arg, ",");
+		while (port) {
+			port_num = strtol(port, NULL, 10);
+			if (errno || port_num <= 0 || port_num > 65536) {
+				warn("Invalid ports: %s\n", arg);
+				argp_usage(state);
+			}
+			port = strtok(NULL, ",");
+		}
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	char ts[32], saddr[39], daddr[39];
+	struct event *e = data;
+	struct tm *tm;
+	int family;
+	time_t t;
+
+	if (emit_timestamp) {
+		time(&t);
+		tm = localtime(&t);
+		strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+		printf("%8s ", ts);
+	}
+
+	inet_ntop(e->family, &e->saddr, saddr, sizeof(saddr));
+	inet_ntop(e->family, &e->daddr, daddr, sizeof(daddr));
+	if (wide_output) {
+		family = e->family == AF_INET ? 4 : 6;
+		printf("%-16llx %-7d %-16s %-2d %-39s %-5d %-39s %-5d %-11s -> %-11s %.3f\n",
+		       e->skaddr, e->pid, e->task, family, saddr, e->sport, daddr, e->dport,
+		       tcp_states[e->oldstate], tcp_states[e->newstate], (double)e->delta_us / 1000);
+	} else {
+		printf("%-16llx %-7d %-10.10s %-15s %-5d %-15s %-5d %-11s -> %-11s %.3f\n",
+		       e->skaddr, e->pid, e->task, saddr, e->sport, daddr, e->dport,
+		       tcp_states[e->oldstate], tcp_states[e->newstate], (double)e->delta_us / 1000);
+	}
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	warn("lost %llu events on CPU #%d\n", lost_cnt, cpu);
+}
+
+int main(int argc, char **argv)
+{
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct perf_buffer *pb = NULL;
+	struct tcpstates_bpf *obj;
+	int err, port_map_fd;
+	short port_num;
+	char *port;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		warn("failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = tcpstates_bpf__open_opts(&open_opts);
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->filter_by_sport = target_sports != NULL;
+	obj->rodata->filter_by_dport = target_dports != NULL;
+	obj->rodata->target_family = target_family;
+
+	err = tcpstates_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	if (target_sports) {
+		port_map_fd = bpf_map__fd(obj->maps.sports);
+		port = strtok(target_sports, ",");
+		while (port) {
+			port_num = strtol(port, NULL, 10);
+			bpf_map_update_elem(port_map_fd, &port_num, &port_num, BPF_ANY);
+			port = strtok(NULL, ",");
+		}
+	}
+	if (target_dports) {
+		port_map_fd = bpf_map__fd(obj->maps.dports);
+		port = strtok(target_dports, ",");
+		while (port) {
+			port_num = strtol(port, NULL, 10);
+			bpf_map_update_elem(port_map_fd, &port_num, &port_num, BPF_ANY);
+			port = strtok(NULL, ",");
+		}
+	}
+
+	err = tcpstates_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES,
+			      handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		err = - errno;
+		warn("failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	if (emit_timestamp)
+		printf("%-8s ", "TIME(s)");
+	if (wide_output)
+		printf("%-16s %-7s %-16s %-2s %-39s %-5s %-39s %-5s %-11s -> %-11s %s\n",
+		       "SKADDR", "PID", "COMM", "IP", "LADDR", "LPORT",
+		       "RADDR", "RPORT", "OLDSTATE", "NEWSTATE", "MS");
+	else
+		printf("%-16s %-7s %-10s %-15s %-5s %-15s %-5s %-11s -> %-11s %s\n",
+		       "SKADDR", "PID", "COMM", "LADDR", "LPORT",
+		       "RADDR", "RPORT", "OLDSTATE", "NEWSTATE", "MS");
+
+	while (!exiting) {
+		err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS);
+		if (err < 0 && err != -EINTR) {
+			warn("error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+	tcpstates_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/tcpstates.h b/libbpf-tools/tcpstates.h
new file mode 100644
index 0000000..31f2b61
--- /dev/null
+++ b/libbpf-tools/tcpstates.h
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+/* Copyright (c) 2021 Hengqi Chen */
+#ifndef __TCPSTATES_H
+#define __TCPSTATES_H
+
+#define TASK_COMM_LEN	16
+
+struct event {
+	unsigned __int128 saddr;
+	unsigned __int128 daddr;
+	__u64 skaddr;
+	__u64 ts_us;
+	__u64 delta_us;
+	__u32 pid;
+	int oldstate;
+	int newstate;
+	__u16 family;
+	__u16 sport;
+	__u16 dport;
+	char task[TASK_COMM_LEN];
+};
+
+#endif /* __TCPSTATES_H */
diff --git a/libbpf-tools/tcpsynbl.c b/libbpf-tools/tcpsynbl.c
index 188a2af..ea5fd98 100644
--- a/libbpf-tools/tcpsynbl.c
+++ b/libbpf-tools/tcpsynbl.c
@@ -12,6 +12,7 @@
 #include <bpf/bpf.h>
 #include "tcpsynbl.h"
 #include "tcpsynbl.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 static struct env {
@@ -170,6 +171,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -186,10 +188,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
-	obj = tcpsynbl_bpf__open();
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = tcpsynbl_bpf__open_opts(&open_opts);
 	if (!obj) {
 		fprintf(stderr, "failed to open BPF object\n");
 		return 1;
@@ -246,5 +253,7 @@
 
 cleanup:
 	tcpsynbl_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+
 	return err != 0;
 }
diff --git a/libbpf-tools/tcptop.bpf.c b/libbpf-tools/tcptop.bpf.c
new file mode 100644
index 0000000..9c27ba4
--- /dev/null
+++ b/libbpf-tools/tcptop.bpf.c
@@ -0,0 +1,127 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Francis Laniel <flaniel@linux.microsoft.com>
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_endian.h>
+
+#include "tcptop.h"
+
+/* Taken from kernel include/linux/socket.h. */
+#define AF_INET		2	/* Internet IP Protocol 	*/
+#define AF_INET6	10	/* IP version 6			*/
+
+const volatile bool filter_cg = false;
+const volatile pid_t target_pid = -1;
+const volatile int target_family = -1;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
+	__type(key, u32);
+	__type(value, u32);
+	__uint(max_entries, 1);
+} cgroup_map SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, 10240);
+	__type(key, struct ip_key_t);
+	__type(value, struct traffic_t);
+} ip_map SEC(".maps");
+
+static int probe_ip(bool receiving, struct sock *sk, size_t size)
+{
+	struct ip_key_t ip_key = {};
+	struct traffic_t *trafficp;
+	u16 family;
+	u32 pid;
+
+	if (filter_cg && !bpf_current_task_under_cgroup(&cgroup_map, 0))
+		return 0;
+
+	pid = bpf_get_current_pid_tgid() >> 32;
+	if (target_pid != -1 && target_pid != pid)
+		return 0;
+
+	family = BPF_CORE_READ(sk, __sk_common.skc_family);
+	if (target_family != -1 && target_family != family)
+		return 0;
+
+	/* drop */
+	if (family != AF_INET && family != AF_INET6)
+		return 0;
+
+	ip_key.pid = pid;
+	bpf_get_current_comm(&ip_key.name, sizeof(ip_key.name));
+	ip_key.lport = BPF_CORE_READ(sk, __sk_common.skc_num);
+	ip_key.dport = bpf_ntohs(BPF_CORE_READ(sk, __sk_common.skc_dport));
+	ip_key.family = family;
+
+	if (family == AF_INET) {
+		bpf_probe_read_kernel(&ip_key.saddr,
+				      sizeof(sk->__sk_common.skc_rcv_saddr),
+				      &sk->__sk_common.skc_rcv_saddr);
+		bpf_probe_read_kernel(&ip_key.daddr,
+				      sizeof(sk->__sk_common.skc_daddr),
+				      &sk->__sk_common.skc_daddr);
+	} else {
+		/*
+		 * family == AF_INET6,
+		 * we already checked above family is correct.
+		 */
+		bpf_probe_read_kernel(&ip_key.saddr,
+				      sizeof(sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32),
+				      &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
+		bpf_probe_read_kernel(&ip_key.daddr,
+				      sizeof(sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32),
+				      &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
+	}
+
+	trafficp = bpf_map_lookup_elem(&ip_map, &ip_key);
+	if (!trafficp) {
+		struct traffic_t zero;
+
+		if (receiving) {
+			zero.sent = 0;
+			zero.received = size;
+		} else {
+			zero.sent = size;
+			zero.received = 0;
+		}
+
+		bpf_map_update_elem(&ip_map, &ip_key, &zero, BPF_NOEXIST);
+	} else {
+		if (receiving)
+			trafficp->received += size;
+		else
+			trafficp->sent += size;
+
+		bpf_map_update_elem(&ip_map, &ip_key, trafficp, BPF_EXIST);
+	}
+
+	return 0;
+}
+
+SEC("kprobe/tcp_sendmsg")
+int BPF_KPROBE(tcp_sendmsg, struct sock *sk, struct msghdr *msg, size_t size)
+{
+	return probe_ip(false, sk, size);
+}
+
+/*
+ * tcp_recvmsg() would be obvious to trace, but is less suitable because:
+ * - we'd need to trace both entry and return, to have both sock and size
+ * - misses tcp_read_sock() traffic
+ * we'd much prefer tracepoints once they are available.
+ */
+SEC("kprobe/tcp_cleanup_rbuf")
+int BPF_KPROBE(tcp_cleanup_rbuf, struct sock *sk, int copied)
+{
+	if (copied <= 0)
+		return 0;
+
+	return probe_ip(true, sk, copied);
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/tcptop.c b/libbpf-tools/tcptop.c
new file mode 100644
index 0000000..6cd3fd4
--- /dev/null
+++ b/libbpf-tools/tcptop.c
@@ -0,0 +1,426 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+/*
+ * tcptop Trace sending and received operation over IP.
+ * Copyright (c) 2022 Francis Laniel <flaniel@linux.microsoft.com>
+ *
+ * Based on tcptop(8) from BCC by Brendan Gregg.
+ * 03-Mar-2022   Francis Laniel   Created this.
+ */
+#include <argp.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "tcptop.h"
+#include "tcptop.skel.h"
+#include "trace_helpers.h"
+
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+#define OUTPUT_ROWS_LIMIT 10240
+
+#define IPV4 0
+#define PORT_LENGTH 5
+
+enum SORT {
+	ALL,
+	SENT,
+	RECEIVED,
+};
+
+static volatile sig_atomic_t exiting = 0;
+
+static pid_t target_pid = -1;
+static char *cgroup_path;
+static bool cgroup_filtering = false;
+static bool clear_screen = true;
+static bool no_summary = false;
+static bool ipv4_only = false;
+static bool ipv6_only = false;
+static int output_rows = 20;
+static int sort_by = ALL;
+static int interval = 1;
+static int count = 99999999;
+static bool verbose = false;
+
+const char *argp_program_version = "tcptop 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Trace sending and received operation over IP.\n"
+"\n"
+"USAGE: tcptop [-h] [-p PID] [interval] [count]\n"
+"\n"
+"EXAMPLES:\n"
+"    tcptop            # TCP top, refresh every 1s\n"
+"    tcptop -p 1216    # only trace PID 1216\n"
+"    tcptop -c path    # only trace the given cgroup path\n"
+"    tcptop 5 10       # 5s summaries, 10 times\n";
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "Process ID to trace" },
+	{ "cgroup", 'c', "/sys/fs/cgroup/unified", 0, "Trace process in cgroup path" },
+	{ "ipv4", '4', NULL, 0, "trace IPv4 family only" },
+	{ "ipv6", '6', NULL, 0, "trace IPv6 family only" },
+	{ "nosummary", 'S', NULL, 0, "Skip system summary line"},
+	{ "noclear", 'C', NULL, 0, "Don't clear the screen" },
+	{ "sort", 's', "SORT", 0, "Sort columns, default all [all, sent, received]" },
+	{ "rows", 'r', "ROWS", 0, "Maximum rows to print, default 20" },
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+struct info_t {
+	struct ip_key_t key;
+	struct traffic_t value;
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	long pid, rows;
+	static int pos_args;
+
+	switch (key) {
+	case 'p':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			warn("invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		target_pid = pid;
+		break;
+	case 'c':
+		cgroup_path = arg;
+		cgroup_filtering = true;
+		break;
+	case 'C':
+		clear_screen = false;
+		break;
+	case 'S':
+		no_summary = true;
+		break;
+	case '4':
+		ipv4_only = true;
+		if (ipv6_only) {
+			warn("Only one --ipvX option should be used\n");
+			argp_usage(state);
+		}
+		break;
+	case '6':
+		ipv6_only = true;
+		if (ipv4_only) {
+			warn("Only one --ipvX option should be used\n");
+			argp_usage(state);
+		}
+		break;
+	case 's':
+		if (!strcmp(arg, "all")) {
+			sort_by = ALL;
+		} else if (!strcmp(arg, "sent")) {
+			sort_by = SENT;
+		} else if (!strcmp(arg, "received")) {
+			sort_by = RECEIVED;
+		} else {
+			warn("invalid sort method: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'r':
+		errno = 0;
+		rows = strtol(arg, NULL, 10);
+		if (errno || rows <= 0) {
+			warn("invalid rows: %s\n", arg);
+			argp_usage(state);
+		}
+		output_rows = rows;
+		if (output_rows > OUTPUT_ROWS_LIMIT)
+			output_rows = OUTPUT_ROWS_LIMIT;
+		break;
+	case 'v':
+		verbose = true;
+		break;
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case ARGP_KEY_ARG:
+		errno = 0;
+		if (pos_args == 0) {
+			interval = strtol(arg, NULL, 10);
+			if (errno || interval <= 0) {
+				warn("invalid interval\n");
+				argp_usage(state);
+			}
+		} else if (pos_args == 1) {
+			count = strtol(arg, NULL, 10);
+			if (errno || count <= 0) {
+				warn("invalid count\n");
+				argp_usage(state);
+			}
+		} else {
+			warn("unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+		pos_args++;
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static int sort_column(const void *obj1, const void *obj2)
+{
+	struct info_t *i1 = (struct info_t *)obj1;
+	struct info_t *i2 = (struct info_t *)obj2;
+
+	if (i1->key.family != i2->key.family)
+		/*
+		 * i1 - i2 because we want to sort by increasing order (first AF_INET then
+		 * AF_INET6).
+		 */
+		return i1->key.family - i2->key.family;
+
+	if (sort_by == SENT)
+		return i2->value.sent - i1->value.sent;
+	else if (sort_by == RECEIVED)
+		return i2->value.received - i1->value.received;
+	else
+		return (i2->value.sent + i2->value.received) - (i1->value.sent + i1->value.received);
+}
+
+static int print_stat(struct tcptop_bpf *obj)
+{
+	FILE *f;
+	time_t t;
+	struct tm *tm;
+	char ts[16], buf[256];
+	struct ip_key_t key, *prev_key = NULL;
+	static struct info_t infos[OUTPUT_ROWS_LIMIT];
+	int n, i, err = 0;
+	int fd = bpf_map__fd(obj->maps.ip_map);
+	int rows = 0;
+	bool ipv6_header_printed = false;
+
+	if (!no_summary) {
+		f = fopen("/proc/loadavg", "r");
+		if (f) {
+			time(&t);
+			tm = localtime(&t);
+			strftime(ts, sizeof(ts), "%H:%M:%S", tm);
+			memset(buf, 0, sizeof(buf));
+			n = fread(buf, 1, sizeof(buf), f);
+			if (n)
+				printf("%8s loadavg: %s\n", ts, buf);
+			fclose(f);
+		}
+	}
+
+	while (1) {
+		err = bpf_map_get_next_key(fd, prev_key, &infos[rows].key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_lookup_elem(fd, &infos[rows].key, &infos[rows].value);
+		if (err) {
+			warn("bpf_map_lookup_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &infos[rows].key;
+		rows++;
+	}
+
+	printf("%-6s %-12s %-21s %-21s %6s %6s", "PID", "COMM", "LADDR", "RADDR",
+				 "RX_KB", "TX_KB\n");
+
+	qsort(infos, rows, sizeof(struct info_t), sort_column);
+	rows = rows < output_rows ? rows : output_rows;
+	for (i = 0; i < rows; i++) {
+		/* Default width to fit IPv4 plus port. */
+		int column_width = 21;
+		struct ip_key_t *key = &infos[i].key;
+		struct traffic_t *value = &infos[i].value;
+
+		if (key->family == AF_INET6) {
+			/* Width to fit IPv6 plus port. */
+			column_width = 51;
+			if (!ipv6_header_printed) {
+				printf("\n%-6s %-12s %-51s %-51s %6s %6s", "PID", "COMM", "LADDR6",
+							"RADDR6", "RX_KB", "TX_KB\n");
+				ipv6_header_printed = true;
+			}
+		}
+
+		char saddr[INET6_ADDRSTRLEN];
+		char daddr[INET6_ADDRSTRLEN];
+
+		inet_ntop(key->family, &key->saddr, saddr, INET6_ADDRSTRLEN);
+		inet_ntop(key->family, &key->daddr, daddr, INET6_ADDRSTRLEN);
+
+		/*
+		 * A port is stored in u16, so highest value is 65535, which is 5
+		 * characters long.
+		 * We need one character more for ':'.
+		 */
+		size_t size = INET6_ADDRSTRLEN + PORT_LENGTH + 1;
+
+		char saddr_port[size];
+		char daddr_port[size];
+
+		snprintf(saddr_port, size, "%s:%d", saddr, key->lport);
+		snprintf(daddr_port, size, "%s:%d", daddr, key->dport);
+
+		printf("%-6d %-12.12s %-*s %-*s %6ld %6ld\n",
+					 key->pid, key->name,
+					 column_width, saddr_port,
+					 column_width, daddr_port,
+					 value->received / 1024, value->sent / 1024);
+	}
+
+	printf("\n");
+
+	prev_key = NULL;
+	while (1) {
+		err = bpf_map_get_next_key(fd, prev_key, &key);
+		if (err) {
+			if (errno == ENOENT) {
+				err = 0;
+				break;
+			}
+			warn("bpf_map_get_next_key failed: %s\n", strerror(errno));
+			return err;
+		}
+		err = bpf_map_delete_elem(fd, &key);
+		if (err) {
+			warn("bpf_map_delete_elem failed: %s\n", strerror(errno));
+			return err;
+		}
+		prev_key = &key;
+	}
+
+	return err;
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct tcptop_bpf *obj;
+	int family;
+	int cgfd = -1;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	family = -1;
+	if (ipv4_only)
+		family = AF_INET;
+	if (ipv6_only)
+		family = AF_INET6;
+
+	obj = tcptop_bpf__open();
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->target_pid = target_pid;
+	obj->rodata->target_family = family;
+	obj->rodata->filter_cg = cgroup_filtering;
+
+	err = tcptop_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	if (cgroup_filtering) {
+		int zero = 0;
+		int cg_map_fd = bpf_map__fd(obj->maps.cgroup_map);
+
+		cgfd = open(cgroup_path, O_RDONLY);
+		if (cgfd < 0) {
+			warn("Failed opening Cgroup path: %s\n", cgroup_path);
+			goto cleanup;
+		}
+
+		warn("bpf_map__fd: %d\n", cg_map_fd);
+
+		if (bpf_map_update_elem(cg_map_fd, &zero, &cgfd, BPF_ANY)) {
+			warn("Failed adding target cgroup to map\n");
+			goto cleanup;
+		}
+	}
+
+	err = tcptop_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %d\n", err);
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	while (1) {
+		sleep(interval);
+
+		if (clear_screen) {
+			err = system("clear");
+			if (err)
+				goto cleanup;
+		}
+
+		err = print_stat(obj);
+		if (err)
+			goto cleanup;
+
+		count--;
+		if (exiting || !count)
+			goto cleanup;
+	}
+
+cleanup:
+	if (cgroup_filtering && cgfd != -1)
+		close(cgfd);
+	tcptop_bpf__destroy(obj);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/tcptop.h b/libbpf-tools/tcptop.h
new file mode 100644
index 0000000..9e086c7
--- /dev/null
+++ b/libbpf-tools/tcptop.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+#ifndef __TCPTOP_H
+#define __TCPTOP_H
+
+#define TASK_COMM_LEN 16
+
+struct ip_key_t {
+	unsigned __int128 saddr;
+	unsigned __int128 daddr;
+	__u32 pid;
+	char name[TASK_COMM_LEN];
+	__u16 lport;
+	__u16 dport;
+	__u16 family;
+};
+
+struct traffic_t {
+	size_t sent;
+	size_t received;
+};
+
+#endif /* __TCPTOP_H */
diff --git a/libbpf-tools/tcptracer.bpf.c b/libbpf-tools/tcptracer.bpf.c
new file mode 100644
index 0000000..1383e3d
--- /dev/null
+++ b/libbpf-tools/tcptracer.bpf.c
@@ -0,0 +1,335 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Microsoft Corporation
+//
+// Based on tcptracer(8) from BCC by Kinvolk GmbH and
+// tcpconnect(8) by Anton Protopopov
+#include <vmlinux.h>
+
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_endian.h>
+#include "tcptracer.h"
+
+const volatile uid_t filter_uid = -1;
+const volatile pid_t filter_pid = 0;
+
+/* Define here, because there are conflicts with include files */
+#define AF_INET		2
+#define AF_INET6	10
+
+/*
+ * tcp_set_state doesn't run in the context of the process that initiated the
+ * connection so we need to store a map TUPLE -> PID to send the right PID on
+ * the event.
+ */
+struct tuple_key_t {
+	union {
+		__u32 saddr_v4;
+		unsigned __int128 saddr_v6;
+	};
+	union {
+		__u32 daddr_v4;
+		unsigned __int128 daddr_v6;
+	};
+	u16 sport;
+	u16 dport;
+	u32 netns;
+};
+
+struct pid_comm_t {
+	u64 pid;
+	char comm[TASK_COMM_LEN];
+	u32 uid;
+};
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, struct tuple_key_t);
+	__type(value, struct pid_comm_t);
+} tuplepid SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, u32);
+	__type(value, struct sock *);
+} sockets SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+	__uint(key_size, sizeof(u32));
+	__uint(value_size, sizeof(u32));
+} events SEC(".maps");
+
+
+static __always_inline bool
+fill_tuple(struct tuple_key_t *tuple, struct sock *sk, int family)
+{
+	struct inet_sock *sockp = (struct inet_sock *)sk;
+
+	BPF_CORE_READ_INTO(&tuple->netns, sk, __sk_common.skc_net.net, ns.inum);
+
+	switch (family) {
+	case AF_INET:
+		BPF_CORE_READ_INTO(&tuple->saddr_v4, sk, __sk_common.skc_rcv_saddr);
+		if (tuple->saddr_v4 == 0)
+			return false;
+
+		BPF_CORE_READ_INTO(&tuple->daddr_v4, sk, __sk_common.skc_daddr);
+		if (tuple->daddr_v4 == 0)
+			return false;
+
+		break;
+	case AF_INET6:
+		BPF_CORE_READ_INTO(&tuple->saddr_v6, sk,
+				   __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
+		if (tuple->saddr_v6 == 0)
+			return false;
+		BPF_CORE_READ_INTO(&tuple->daddr_v6, sk,
+				   __sk_common.skc_v6_daddr.in6_u.u6_addr32);
+		if (tuple->daddr_v6 == 0)
+			return false;
+
+		break;
+	/* it should not happen but to be sure let's handle this case */
+	default:
+		return false;
+	}
+
+	BPF_CORE_READ_INTO(&tuple->dport, sk, __sk_common.skc_dport);
+	if (tuple->dport == 0)
+		return false;
+
+	BPF_CORE_READ_INTO(&tuple->sport, sockp, inet_sport);
+	if (tuple->sport == 0)
+		return false;
+
+	return true;
+}
+
+static __always_inline void
+fill_event(struct tuple_key_t *tuple, struct event *event, __u32 pid,
+	   __u32 uid, __u16 family, __u8 type)
+{
+	event->ts_us = bpf_ktime_get_ns() / 1000;
+	event->type = type;
+	event->pid = pid;
+	event->uid = uid;
+	event->af = family;
+	event->netns = tuple->netns;
+	if (family == AF_INET) {
+		event->saddr_v4 = tuple->saddr_v4;
+		event->daddr_v4 = tuple->daddr_v4;
+	} else {
+		event->saddr_v6 = tuple->saddr_v6;
+		event->daddr_v6 = tuple->daddr_v6;
+	}
+	event->sport = tuple->sport;
+	event->dport = tuple->dport;
+}
+
+/* returns true if the event should be skipped */
+static __always_inline bool
+filter_event(struct sock *sk, __u32 uid, __u32 pid)
+{
+	u16 family = BPF_CORE_READ(sk, __sk_common.skc_family);
+
+	if (family != AF_INET && family != AF_INET6)
+		return true;
+
+	if (filter_pid && pid != filter_pid)
+		return true;
+
+	if (filter_uid != (uid_t) -1 && uid != filter_uid)
+		return true;
+
+	return false;
+}
+
+static __always_inline int
+enter_tcp_connect(struct pt_regs *ctx, struct sock *sk)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 pid = pid_tgid >> 32;
+	__u32 tid = pid_tgid;
+	__u64 uid_gid = bpf_get_current_uid_gid();
+	__u32 uid = uid_gid;
+
+	if (filter_event(sk, uid, pid))
+		return 0;
+
+	bpf_map_update_elem(&sockets, &tid, &sk, 0);
+	return 0;
+}
+
+static __always_inline int
+exit_tcp_connect(struct pt_regs *ctx, int ret, __u16 family)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 pid = pid_tgid >> 32;
+	__u32 tid = pid_tgid;
+	__u64 uid_gid = bpf_get_current_uid_gid();
+	__u32 uid = uid_gid;
+	struct tuple_key_t tuple = {};
+	struct pid_comm_t pid_comm = {};
+	struct sock **skpp;
+	struct sock *sk;
+
+	skpp = bpf_map_lookup_elem(&sockets, &tid);
+	if (!skpp)
+		return 0;
+
+	if (ret)
+		goto end;
+
+	sk = *skpp;
+
+	if (!fill_tuple(&tuple, sk, family))
+		goto end;
+
+	pid_comm.pid = pid;
+	pid_comm.uid = uid;
+	bpf_get_current_comm(&pid_comm.comm, sizeof(pid_comm.comm));
+
+	bpf_map_update_elem(&tuplepid, &tuple, &pid_comm, 0);
+
+end:
+	bpf_map_delete_elem(&sockets, &tid);
+	return 0;
+}
+
+SEC("kprobe/tcp_v4_connect")
+int BPF_KPROBE(tcp_v4_connect, struct sock *sk)
+{
+	return enter_tcp_connect(ctx, sk);
+}
+
+SEC("kretprobe/tcp_v4_connect")
+int BPF_KRETPROBE(tcp_v4_connect_ret, int ret)
+{
+	return exit_tcp_connect(ctx, ret, AF_INET);
+}
+
+SEC("kprobe/tcp_v6_connect")
+int BPF_KPROBE(tcp_v6_connect, struct sock *sk)
+{
+	return enter_tcp_connect(ctx, sk);
+}
+
+SEC("kretprobe/tcp_v6_connect")
+int BPF_KRETPROBE(tcp_v6_connect_ret, int ret)
+{
+	return exit_tcp_connect(ctx, ret, AF_INET6);
+}
+
+SEC("kprobe/tcp_close")
+int BPF_KPROBE(entry_trace_close, struct sock *sk)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 pid = pid_tgid >> 32;
+	__u64 uid_gid = bpf_get_current_uid_gid();
+	__u32 uid = uid_gid;
+	struct tuple_key_t tuple = {};
+	struct event event = {};
+	u16 family;
+
+	if (filter_event(sk, uid, pid))
+		return 0;
+
+	/*
+	 * Don't generate close events for connections that were never
+	 * established in the first place.
+	 */
+	u8 oldstate = BPF_CORE_READ(sk, __sk_common.skc_state);
+	if (oldstate == TCP_SYN_SENT ||
+	    oldstate == TCP_SYN_RECV ||
+	    oldstate == TCP_NEW_SYN_RECV)
+		return 0;
+
+	family = BPF_CORE_READ(sk, __sk_common.skc_family);
+	if (!fill_tuple(&tuple, sk, family))
+		return 0;
+
+	fill_event(&tuple, &event, pid, uid, family, TCP_EVENT_TYPE_CLOSE);
+	bpf_get_current_comm(&event.task, sizeof(event.task));
+
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU,
+		      &event, sizeof(event));
+
+	return 0;
+};
+
+SEC("kprobe/tcp_set_state")
+int BPF_KPROBE(enter_tcp_set_state, struct sock *sk, int state)
+{
+	struct tuple_key_t tuple = {};
+	struct event event = {};
+	__u16 family;
+
+	if (state != TCP_ESTABLISHED && state != TCP_CLOSE)
+		goto end;
+
+	family = BPF_CORE_READ(sk, __sk_common.skc_family);
+
+	if (!fill_tuple(&tuple, sk, family))
+		goto end;
+
+	if (state == TCP_CLOSE)
+		goto end;
+
+	struct pid_comm_t *p;
+	p = bpf_map_lookup_elem(&tuplepid, &tuple);
+	if (!p)
+		return 0; /* missed entry */
+
+	fill_event(&tuple, &event, p->pid, p->uid, family, TCP_EVENT_TYPE_CONNECT);
+	__builtin_memcpy(&event.task, p->comm, sizeof(event.task));
+
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU,
+			      &event, sizeof(event));
+
+end:
+	bpf_map_delete_elem(&tuplepid, &tuple);
+
+	return 0;
+}
+
+SEC("kretprobe/inet_csk_accept")
+int BPF_KRETPROBE(exit_inet_csk_accept, struct sock *sk)
+{
+	__u64 pid_tgid = bpf_get_current_pid_tgid();
+	__u32 pid = pid_tgid >> 32;
+	__u64 uid_gid = bpf_get_current_uid_gid();
+	__u32 uid = uid_gid;
+	__u16 sport, family;
+	struct event event = {};
+
+	if (!sk)
+		return 0;
+
+	if (filter_event(sk, uid, pid))
+		return 0;
+
+	family = BPF_CORE_READ(sk, __sk_common.skc_family);
+	sport = BPF_CORE_READ(sk, __sk_common.skc_num);
+
+	struct tuple_key_t t = {};
+	fill_tuple(&t, sk, family);
+	t.sport = bpf_ntohs(sport);
+	/* do not send event if IP address is 0.0.0.0 or port is 0 */
+	if (t.saddr_v6 == 0 || t.daddr_v6 == 0 || t.dport == 0 || t.sport == 0)
+		return 0;
+
+	fill_event(&t, &event, pid, uid, family, TCP_EVENT_TYPE_ACCEPT);
+
+	bpf_get_current_comm(&event.task, sizeof(event.task));
+	bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU,
+			      &event, sizeof(event));
+
+	return 0;
+}
+
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/tcptracer.c b/libbpf-tools/tcptracer.c
new file mode 100644
index 0000000..afc140d
--- /dev/null
+++ b/libbpf-tools/tcptracer.c
@@ -0,0 +1,314 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Microsoft Corporation
+//
+// Based on tcptracer(8) from BCC by Kinvolk GmbH and
+// tcpconnect(8) by Anton Protopopov
+#include <sys/resource.h>
+#include <arpa/inet.h>
+#include <argp.h>
+#include <signal.h>
+#include <limits.h>
+#include <unistd.h>
+#include <time.h>
+#include <bpf/bpf.h>
+#include "tcptracer.h"
+#include "tcptracer.skel.h"
+#include "btf_helpers.h"
+#include "trace_helpers.h"
+#include "map_helpers.h"
+
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+
+static volatile sig_atomic_t exiting = 0;
+
+const char *argp_program_version = "tcptracer 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+static const char argp_program_doc[] =
+	"\ntcptracer: Trace TCP connections\n"
+	"\n"
+	"EXAMPLES:\n"
+	"    tcptracer             # trace all TCP connections\n"
+	"    tcptracer -t          # include timestamps\n"
+	"    tcptracer -p 181      # only trace PID 181\n"
+	"    tcptracer -U          # include UID\n"
+	"    tcptracer -u 1000     # only trace UID 1000\n"
+	"    tcptracer --C mappath # only trace cgroups in the map\n"
+	"    tcptracer --M mappath # only trace mount namespaces in the map\n"
+	;
+
+static int get_int(const char *arg, int *ret, int min, int max)
+{
+	char *end;
+	long val;
+
+	errno = 0;
+	val = strtol(arg, &end, 10);
+	if (errno) {
+		warn("strtol: %s: %s\n", arg, strerror(errno));
+		return -1;
+	} else if (end == arg || val < min || val > max) {
+		return -1;
+	}
+	if (ret)
+		*ret = val;
+	return 0;
+}
+
+static int get_uint(const char *arg, unsigned int *ret,
+		    unsigned int min, unsigned int max)
+{
+	char *end;
+	long val;
+
+	errno = 0;
+	val = strtoul(arg, &end, 10);
+	if (errno) {
+		warn("strtoul: %s: %s\n", arg, strerror(errno));
+		return -1;
+	} else if (end == arg || val < min || val > max) {
+		return -1;
+	}
+	if (ret)
+		*ret = val;
+	return 0;
+}
+
+static const struct argp_option opts[] = {
+	{ "verbose", 'v', NULL, 0, "Verbose debug output" },
+	{ "timestamp", 't', NULL, 0, "Include timestamp on output" },
+	{ "print-uid", 'U', NULL, 0, "Include UID on output" },
+	{ "pid", 'p', "PID", 0, "Process PID to trace" },
+	{ "uid", 'u', "UID", 0, "Process UID to trace" },
+	{ "cgroupmap", 'C', "PATH", 0, "trace cgroups in this map" },
+	{ "mntnsmap", 'M', "PATH", 0, "trace mount namespaces in this map" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static struct env {
+	bool verbose;
+	bool count;
+	bool print_timestamp;
+	bool print_uid;
+	pid_t pid;
+	uid_t uid;
+} env = {
+	.uid = (uid_t) -1,
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	int err;
+
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		env.verbose = true;
+		break;
+	case 'c':
+		env.count = true;
+		break;
+	case 't':
+		env.print_timestamp = true;
+		break;
+	case 'U':
+		env.print_uid = true;
+		break;
+	case 'p':
+		err = get_int(arg, &env.pid, 1, INT_MAX);
+		if (err) {
+			warn("invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'u':
+		err = get_uint(arg, &env.uid, 0, (uid_t) -2);
+		if (err) {
+			warn("invalid UID: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'C':
+		warn("not implemented: --cgroupmap");
+		break;
+	case 'M':
+		warn("not implemented: --mntnsmap");
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !env.verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+	exiting = 1;
+}
+
+static void print_events_header()
+{
+	if (env.print_timestamp)
+		printf("%-9s", "TIME(s)");
+	if (env.print_uid)
+		printf("%-6s", "UID");
+	printf("%s %-6s %-12s %-2s %-16s %-16s %-4s %-4s\n",
+	       "T", "PID", "COMM", "IP", "SADDR", "DADDR", "SPORT", "DPORT");
+}
+
+static void handle_event(void *ctx, int cpu, void *data, __u32 data_sz)
+{
+	const struct event *event = data;
+	char src[INET6_ADDRSTRLEN];
+	char dst[INET6_ADDRSTRLEN];
+	union {
+		struct in_addr  x4;
+		struct in6_addr x6;
+	} s, d;
+	static __u64 start_ts;
+
+	if (event->af == AF_INET) {
+		s.x4.s_addr = event->saddr_v4;
+		d.x4.s_addr = event->daddr_v4;
+	} else if (event->af == AF_INET6) {
+		memcpy(&s.x6.s6_addr, &event->saddr_v6, sizeof(s.x6.s6_addr));
+		memcpy(&d.x6.s6_addr, &event->daddr_v6, sizeof(d.x6.s6_addr));
+	} else {
+		warn("broken event: event->af=%d", event->af);
+		return;
+	}
+
+	if (env.print_timestamp) {
+		if (start_ts == 0)
+			start_ts = event->ts_us;
+		printf("%-9.3f", (event->ts_us - start_ts) / 1000000.0);
+	}
+
+	if (env.print_uid)
+		printf("%-6d", event->uid);
+
+	char type = '-';
+	switch (event->type) {
+	case TCP_EVENT_TYPE_CONNECT:
+		type = 'C';
+		break;
+	case TCP_EVENT_TYPE_ACCEPT:
+		type = 'A';
+		break;
+	case TCP_EVENT_TYPE_CLOSE:
+		type = 'X';
+		break;
+	}
+
+	printf("%c %-6d %-12.12s %-2d %-16s %-16s %-4d %-4d\n",
+	       type, event->pid, event->task,
+	       event->af == AF_INET ? 4 : 6,
+	       inet_ntop(event->af, &s, src, sizeof(src)),
+	       inet_ntop(event->af, &d, dst, sizeof(dst)),
+	       ntohs(event->sport), ntohs(event->dport));
+}
+
+static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt)
+{
+	warn("Lost %llu events on CPU #%d!\n", lost_cnt, cpu);
+}
+
+static void print_events(int perf_map_fd)
+{
+	struct perf_buffer *pb;
+	int err;
+
+	pb = perf_buffer__new(perf_map_fd, 128,
+			      handle_event, handle_lost_events, NULL, NULL);
+	if (!pb) {
+		err = -errno;
+		warn("failed to open perf buffer: %d\n", err);
+		goto cleanup;
+	}
+
+	print_events_header();
+	while (!exiting) {
+		err = perf_buffer__poll(pb, 100);
+		if (err < 0 && err != -EINTR) {
+			warn("error polling perf buffer: %s\n", strerror(-err));
+			goto cleanup;
+		}
+		/* reset err to return 0 if exiting */
+		err = 0;
+	}
+
+cleanup:
+	perf_buffer__free(pb);
+}
+
+int main(int argc, char **argv)
+{
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+		.args_doc = NULL,
+	};
+	struct tcptracer_bpf *obj;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	libbpf_set_print(libbpf_print_fn);
+
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
+	obj = tcptracer_bpf__open_opts(&open_opts);
+	if (!obj) {
+		warn("failed to open BPF object\n");
+		return 1;
+	}
+
+	if (env.pid)
+		obj->rodata->filter_pid = env.pid;
+	if (env.uid != (uid_t) -1)
+		obj->rodata->filter_uid = env.uid;
+
+	err = tcptracer_bpf__load(obj);
+	if (err) {
+		warn("failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	err = tcptracer_bpf__attach(obj);
+	if (err) {
+		warn("failed to attach BPF programs: %s\n", strerror(-err));
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		warn("can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+
+	print_events(bpf_map__fd(obj->maps.events));
+
+cleanup:
+	tcptracer_bpf__destroy(obj);
+	cleanup_core_btf(&open_opts);
+
+	return err != 0;
+}
diff --git a/libbpf-tools/tcptracer.h b/libbpf-tools/tcptracer.h
new file mode 100644
index 0000000..1b624f8
--- /dev/null
+++ b/libbpf-tools/tcptracer.h
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Microsoft Corporation
+//
+// Based on tcptracer(8) from BCC by Kinvolk GmbH and
+// tcpconnect(8) by Anton Protopopov
+
+#ifndef __TCPTRACER_H
+#define __TCPTRACER_H
+
+/* The maximum number of items in maps */
+#define MAX_ENTRIES 8192
+
+#define TASK_COMM_LEN 16
+
+enum event_type {
+	TCP_EVENT_TYPE_CONNECT,
+	TCP_EVENT_TYPE_ACCEPT,
+	TCP_EVENT_TYPE_CLOSE,
+};
+
+struct event {
+	union {
+		__u32 saddr_v4;
+		unsigned __int128 saddr_v6;
+	};
+	union {
+		__u32 daddr_v4;
+		unsigned __int128 daddr_v6;
+	};
+	char task[TASK_COMM_LEN];
+	__u64 ts_us;
+	__u32 af; /* AF_INET or AF_INET6 */
+	__u32 pid;
+	__u32 uid;
+	__u32 netns;
+	__u16 dport;
+	__u16 sport;
+	__u8 type;
+};
+
+
+#endif /* __TCPTRACER_H */
diff --git a/libbpf-tools/trace_helpers.c b/libbpf-tools/trace_helpers.c
index 9165be4..47c24e7 100644
--- a/libbpf-tools/trace_helpers.c
+++ b/libbpf-tools/trace_helpers.c
@@ -243,6 +243,7 @@
 		STARTS_WITH(mapname, "[stack") ||
 		STARTS_WITH(mapname, "/SYSV") ||
 		STARTS_WITH(mapname, "[heap]") ||
+		STARTS_WITH(mapname, "[uprobes]") ||
 		STARTS_WITH(mapname, "[vsyscall]"));
 }
 
@@ -256,6 +257,11 @@
 	return !strcmp(path, "[vdso]");
 }
 
+static bool is_uprobes(const char *path)
+{
+	return !strcmp(path, "[uprobes]");
+}
+
 static int get_elf_type(const char *path)
 {
 	GElf_Ehdr hdr;
@@ -265,6 +271,8 @@
 
 	if (is_vdso(path))
 		return -1;
+	if (is_uprobes(path))
+		return -1;
 	e = open_elf(path, &fd);
 	if (!e)
 		return -1;
@@ -423,6 +431,7 @@
 	sym->name = (void*)(unsigned long)off;
 	sym->start = start;
 	sym->size = size;
+	sym->offset = 0;
 
 	return 0;
 }
@@ -635,8 +644,10 @@
 			end = mid - 1;
 	}
 
-	if (start == end && dso->syms[start].start <= offset)
+	if (start == end && dso->syms[start].start <= offset) {
+		(dso->syms[start]).offset = offset - dso->syms[start].start;
 		return &dso->syms[start];
+	}
 	return NULL;
 }
 
@@ -721,6 +732,22 @@
 	return dso__find_sym(dso, offset);
 }
 
+const struct sym *syms__map_addr_dso(const struct syms *syms, unsigned long addr,
+				     char **dso_name, unsigned long *dso_offset)
+{
+	struct dso *dso;
+	uint64_t offset;
+
+	dso = syms__find_dso(syms, addr, &offset);
+	if (!dso)
+		return NULL;
+
+	*dso_name = dso->name;
+	*dso_offset = offset;
+
+	return dso__find_sym(dso, offset);
+}
+
 struct syms_cache {
 	struct {
 		struct syms *syms;
@@ -954,6 +981,8 @@
 	printf("     %-13s : count     distribution\n", val_type);
 	for (i = idx_min; i <= idx_max; i++) {
 		val = vals[i];
+		if (!val)
+			continue;
 		printf("        %-10d : %-8d |", base + i * step, val);
 		print_stars(val, val_max, stars_max);
 		printf("|\n");
@@ -993,14 +1022,21 @@
 
 static bool fentry_try_attach(int id)
 {
-	struct bpf_insn insns[] = { { .code = BPF_JMP | BPF_EXIT } };
-	LIBBPF_OPTS(bpf_prog_load_opts, opts);
 	int prog_fd, attach_fd;
+	char error[4096];
+	struct bpf_insn insns[] = {
+		{ .code = BPF_ALU64 | BPF_MOV | BPF_K, .dst_reg = BPF_REG_0, .imm = 0 },
+		{ .code = BPF_JMP | BPF_EXIT },
+	};
+	LIBBPF_OPTS(bpf_prog_load_opts, opts,
+			.expected_attach_type = BPF_TRACE_FENTRY,
+			.attach_btf_id = id,
+			.log_buf = error,
+			.log_size = sizeof(error),
+	);
 
-	opts.expected_attach_type = BPF_TRACE_FENTRY;
-	opts.attach_btf_id = id,
-
-	prog_fd = bpf_prog_load(BPF_PROG_TYPE_TRACING, "test", NULL, insns, 1, &opts);
+	prog_fd = bpf_prog_load(BPF_PROG_TYPE_TRACING, "test", "GPL", insns,
+			sizeof(insns) / sizeof(struct bpf_insn), &opts);
 	if (prog_fd < 0)
 		return false;
 
@@ -1014,48 +1050,82 @@
 
 bool fentry_can_attach(const char *name, const char *mod)
 {
-	const char sysfs_vmlinux[] = "/sys/kernel/btf/vmlinux";
-	struct btf *base, *btf = NULL;
-	char sysfs_mod[80];
-	int id = -1, err;
+	struct btf *btf, *vmlinux_btf, *module_btf = NULL;
+	int err, id;
 
-	base = btf__parse(sysfs_vmlinux, NULL);
-	if (!base) {
-		err = -errno;
-		fprintf(stderr, "failed to parse vmlinux BTF at '%s': %s\n",
-			sysfs_vmlinux, strerror(-err));
-		goto err_out;
-	}
-	if (mod && module_btf_exists(mod)) {
-		snprintf(sysfs_mod, sizeof(sysfs_mod), "/sys/kernel/btf/%s", mod);
-		btf = btf__parse_split(sysfs_mod, base);
-		if (!btf) {
-			err = -errno;
-			fprintf(stderr, "failed to load BTF from %s: %s\n",
-				sysfs_mod, strerror(-err));
-			btf = base;
-			base = NULL;
-		}
-	} else {
-		btf = base;
-		base = NULL;
+	vmlinux_btf = btf__load_vmlinux_btf();
+	err = libbpf_get_error(vmlinux_btf);
+	if (err)
+		return false;
+
+	btf = vmlinux_btf;
+
+	if (mod) {
+		module_btf = btf__load_module_btf(mod, vmlinux_btf);
+		err = libbpf_get_error(module_btf);
+		if (!err)
+			btf = module_btf;
 	}
 
 	id = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC);
 
-err_out:
-	btf__free(btf);
-	btf__free(base);
+	btf__free(module_btf);
+	btf__free(vmlinux_btf);
 	return id > 0 && fentry_try_attach(id);
 }
 
+#define DEBUGFS "/sys/kernel/debug/tracing"
+#define TRACEFS "/sys/kernel/tracing"
+
+static bool use_debugfs(void)
+{
+	static int has_debugfs = -1;
+
+	if (has_debugfs < 0)
+		has_debugfs = faccessat(AT_FDCWD, DEBUGFS, F_OK, AT_EACCESS) == 0;
+
+	return has_debugfs == 1;
+}
+
+static const char *tracefs_path(void)
+{
+	return use_debugfs() ? DEBUGFS : TRACEFS;
+}
+
+static const char *tracefs_available_filter_functions(void)
+{
+	return use_debugfs() ? DEBUGFS"/available_filter_functions" :
+			       TRACEFS"/available_filter_functions";
+}
+
 bool kprobe_exists(const char *name)
 {
+	char addr_range[256];
 	char sym_name[256];
 	FILE *f;
 	int ret;
 
-	f = fopen("/sys/kernel/debug/tracing/available_filter_functions", "r");
+	f = fopen("/sys/kernel/debug/kprobes/blacklist", "r");
+	if (!f)
+		goto avail_filter;
+
+	while (true) {
+		ret = fscanf(f, "%s %s%*[^\n]\n", addr_range, sym_name);
+		if (ret == EOF && feof(f))
+			break;
+		if (ret != 2) {
+			fprintf(stderr, "failed to read symbol from kprobe blacklist\n");
+			break;
+		}
+		if (!strcmp(name, sym_name)) {
+			fclose(f);
+			return false;
+		}
+	}
+	fclose(f);
+
+avail_filter:
+	f = fopen(tracefs_available_filter_functions(), "r");
 	if (!f)
 		goto slow_path;
 
@@ -1099,13 +1169,30 @@
 	return false;
 }
 
-bool vmlinux_btf_exists(void)
+bool tracepoint_exists(const char *category, const char *event)
 {
-	if (!access("/sys/kernel/btf/vmlinux", R_OK))
+	char path[PATH_MAX];
+
+	snprintf(path, sizeof(path), "%s/events/%s/%s/format", tracefs_path(), category, event);
+	if (!access(path, F_OK))
 		return true;
 	return false;
 }
 
+bool vmlinux_btf_exists(void)
+{
+	struct btf *btf;
+	int err;
+
+	btf = btf__load_vmlinux_btf();
+	err = libbpf_get_error(btf);
+	if (err)
+		return false;
+
+	btf__free(btf);
+	return true;
+}
+
 bool module_btf_exists(const char *mod)
 {
 	char sysfs_mod[80];
@@ -1117,3 +1204,31 @@
 	}
 	return false;
 }
+
+bool probe_tp_btf(const char *name)
+{
+	LIBBPF_OPTS(bpf_prog_load_opts, opts, .expected_attach_type = BPF_TRACE_RAW_TP);
+	struct bpf_insn insns[] = {
+		{ .code = BPF_ALU64 | BPF_MOV | BPF_K, .dst_reg = BPF_REG_0, .imm = 0 },
+		{ .code = BPF_JMP | BPF_EXIT },
+	};
+	int fd, insn_cnt = sizeof(insns) / sizeof(struct bpf_insn);
+
+	opts.attach_btf_id = libbpf_find_vmlinux_btf_id(name, BPF_TRACE_RAW_TP);
+	fd = bpf_prog_load(BPF_PROG_TYPE_TRACING, NULL, "GPL", insns, insn_cnt, &opts);
+	if (fd >= 0)
+		close(fd);
+	return fd >= 0;
+}
+
+bool probe_ringbuf()
+{
+	int map_fd;
+
+	map_fd = bpf_map_create(BPF_MAP_TYPE_RINGBUF, NULL, 0, 0, getpagesize(), NULL);
+	if (map_fd < 0)
+		return false;
+
+	close(map_fd);
+	return true;
+}
diff --git a/libbpf-tools/trace_helpers.h b/libbpf-tools/trace_helpers.h
index d68d246..171bc4e 100644
--- a/libbpf-tools/trace_helpers.h
+++ b/libbpf-tools/trace_helpers.h
@@ -24,6 +24,7 @@
 	const char *name;
 	unsigned long start;
 	unsigned long size;
+	unsigned long offset;
 };
 
 struct syms;
@@ -32,6 +33,8 @@
 struct syms *syms__load_file(const char *fname);
 void syms__free(struct syms *syms);
 const struct sym *syms__map_addr(const struct syms *syms, unsigned long addr);
+const struct sym *syms__map_addr_dso(const struct syms *syms, unsigned long addr,
+				     char **dso_name, unsigned long *dso_offset);
 
 struct syms_cache;
 
@@ -90,8 +93,12 @@
  * which is slower.
  */
 bool kprobe_exists(const char *name);
+bool tracepoint_exists(const char *category, const char *event);
 
 bool vmlinux_btf_exists(void);
 bool module_btf_exists(const char *mod);
 
+bool probe_tp_btf(const char *name);
+bool probe_ringbuf();
+
 #endif /* __TRACE_HELPERS_H */
diff --git a/libbpf-tools/uprobe_helpers.c b/libbpf-tools/uprobe_helpers.c
index 953cea1..1d5db77 100644
--- a/libbpf-tools/uprobe_helpers.c
+++ b/libbpf-tools/uprobe_helpers.c
@@ -56,6 +56,7 @@
 	char *p;
 	char proc_pid_maps[32];
 	char line_buf[1024];
+	char path_buf[1024];
 
 	if (snprintf(proc_pid_maps, sizeof(proc_pid_maps), "/proc/%d/maps", pid)
 	    >= sizeof(proc_pid_maps)) {
@@ -68,10 +69,10 @@
 		return -1;
 	}
 	while (fgets(line_buf, sizeof(line_buf), maps)) {
-		if (sscanf(line_buf, "%*x-%*x %*s %*x %*s %*u %s", path) != 1)
+		if (sscanf(line_buf, "%*x-%*x %*s %*x %*s %*u %s", path_buf) != 1)
 			continue;
 		/* e.g. /usr/lib/x86_64-linux-gnu/libc-2.31.so */
-		p = strrchr(path, '/');
+		p = strrchr(path_buf, '/');
 		if (!p)
 			continue;
 		if (strncmp(p, "/lib", 4))
@@ -83,7 +84,11 @@
 		/* libraries can have - or . after the name */
 		if (*p != '.' && *p != '-')
 			continue;
-
+		if (strnlen(path_buf, 1024) >= path_sz) {
+			warn("path size too small\n");
+			return -1;
+		}
+		strcpy(path, path_buf);
 		fclose(maps);
 		return 0;
 	}
diff --git a/libbpf-tools/vfsstat.c b/libbpf-tools/vfsstat.c
index 3cba0b0..a20ff26 100644
--- a/libbpf-tools/vfsstat.c
+++ b/libbpf-tools/vfsstat.c
@@ -8,6 +8,7 @@
 #include <bpf/bpf.h>
 #include "vfsstat.h"
 #include "vfsstat.skel.h"
+#include "btf_helpers.h"
 #include "trace_helpers.h"
 
 const char *argp_program_version = "vfsstat 0.1";
@@ -137,6 +138,7 @@
 
 int main(int argc, char **argv)
 {
+	LIBBPF_OPTS(bpf_object_open_opts, open_opts);
 	static const struct argp argp = {
 		.options = opts,
 		.parser = parse_arg,
@@ -150,9 +152,15 @@
 	if (err)
 		return err;
 
-	libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
 	libbpf_set_print(libbpf_print_fn);
 
+
+	err = ensure_core_btf(&open_opts);
+	if (err) {
+		fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
+		return 1;
+	}
+
 	skel = vfsstat_bpf__open();
 	if (!skel) {
 		fprintf(stderr, "failed to open BPF skelect\n");
@@ -160,7 +168,7 @@
 	}
 
 	/* It fallbacks to kprobes when kernel does not support fentry. */
-	if (vmlinux_btf_exists() && fentry_can_attach("vfs_read", NULL)) {
+	if (fentry_can_attach("vfs_read", NULL)) {
 		bpf_program__set_autoload(skel->progs.kprobe_vfs_read, false);
 		bpf_program__set_autoload(skel->progs.kprobe_vfs_write, false);
 		bpf_program__set_autoload(skel->progs.kprobe_vfs_fsync, false);
@@ -200,6 +208,7 @@
 
 cleanup:
 	vfsstat_bpf__destroy(skel);
+	cleanup_core_btf(&open_opts);
 
 	return err != 0;
 }
diff --git a/libbpf-tools/wakeuptime.bpf.c b/libbpf-tools/wakeuptime.bpf.c
new file mode 100644
index 0000000..ec7f698
--- /dev/null
+++ b/libbpf-tools/wakeuptime.bpf.c
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: GPL-3.0
+// Copyright (c) 2022 Nicolas Sterchele
+#include "vmlinux.h"
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_tracing.h>
+#include "wakeuptime.h"
+#include "maps.bpf.h"
+
+#define PF_KTHREAD		0x00200000	/* kernel thread */
+
+const volatile pid_t targ_pid = 0;
+const volatile __u64 max_block_ns = -1;
+const volatile __u64 min_block_ns = 1;
+const volatile bool user_threads_only = false;
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, struct key_t);
+	__type(value, u64);
+} counts SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__uint(max_entries, MAX_ENTRIES);
+	__type(key, u32);
+	__type(value, u64);
+} start SEC(".maps");
+
+struct {
+	__uint(type, BPF_MAP_TYPE_STACK_TRACE);
+	__uint(key_size, sizeof(u32));
+} stackmap SEC(".maps");
+
+static int offcpu_sched_switch(struct task_struct *prev)
+{
+	u64 pid_tgid = bpf_get_current_pid_tgid();
+	u32 pid = pid_tgid >> 32;
+	u32 tid = (u32)pid_tgid;
+	u64 ts;
+
+	if (targ_pid && targ_pid != pid)
+		return 0;
+
+	if (user_threads_only && prev->flags & PF_KTHREAD)
+		return 0;
+
+	ts = bpf_ktime_get_ns();
+	bpf_map_update_elem(&start, &tid, &ts, BPF_ANY);
+	return 0;
+}
+
+static int wakeup(void *ctx, struct task_struct *p)
+{
+	u32 pid = p->tgid;
+	u32 tid = p->pid;
+	u64 delta, *count_key, *tsp;
+	static const u64 zero;
+	struct key_t key = {};
+
+	if (targ_pid && targ_pid != pid)
+		return 0;
+	tsp = bpf_map_lookup_elem(&start, &tid);
+	if (tsp == 0)
+		return 0;
+	bpf_map_delete_elem(&start, &tid);
+
+	delta = bpf_ktime_get_ns() - *tsp;
+	if ((delta < min_block_ns) || (delta > max_block_ns))
+		return 0;
+
+	key.w_k_stack_id = bpf_get_stackid(ctx, &stackmap, 0);
+	bpf_probe_read_kernel(&key.target, sizeof(key.target), p->comm);
+	bpf_get_current_comm(&key.waker, sizeof(key.waker));
+
+	count_key = bpf_map_lookup_or_try_init(&counts, &key, &zero);
+	if (count_key)
+		__atomic_add_fetch(count_key, delta, __ATOMIC_RELAXED);
+
+	return 0;
+}
+
+
+SEC("tp_btf/sched_switch")
+int BPF_PROG(sched_switch, bool preempt, struct task_struct *prev, struct task_struct *next)
+{
+	return offcpu_sched_switch(prev);
+}
+
+SEC("tp_btf/sched_wakeup")
+int BPF_PROG(sched_wakeup, struct task_struct *p)
+{
+	return wakeup(ctx, p);
+}
+
+char LICENSE[] SEC("license") = "GPL";
diff --git a/libbpf-tools/wakeuptime.c b/libbpf-tools/wakeuptime.c
new file mode 100644
index 0000000..8eedbd0
--- /dev/null
+++ b/libbpf-tools/wakeuptime.c
@@ -0,0 +1,273 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+// Copyright (c) 2022 Nicolas Sterchele
+//
+// Based on wakeuptime(8) from BCC by Brendan Gregg
+// XX-Jul-2022 Nicolas Sterchele created this.
+#include <argp.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <bpf/libbpf.h>
+#include <bpf/bpf.h>
+#include "wakeuptime.h"
+#include "wakeuptime.skel.h"
+#include "trace_helpers.h"
+#include <unistd.h>
+
+struct env {
+	pid_t pid;
+	bool user_threads_only;
+	bool verbose;
+	int stack_storage_size;
+	int perf_max_stack_depth;
+	__u64 min_block_time;
+	__u64 max_block_time;
+	int duration;
+} env = {
+	.verbose = false,
+	.stack_storage_size = 1024,
+	.perf_max_stack_depth = 127,
+	.min_block_time = 1,
+	.max_block_time = -1,
+	.duration = 99999999,
+};
+
+const char *argp_program_version = "wakeuptime 0.1";
+const char *argp_program_bug_address =
+	"https://github.com/iovisor/bcc/tree/master/libbpf-tools";
+const char argp_program_doc[] =
+"Summarize sleep to wakeup time by waker kernel stack.\n"
+"\n"
+"USAGE: wakeuptime [-h] [-p PID | -u] [-v] [-m MIN-BLOCK-TIME] "
+"[-M MAX-BLOCK-TIME] ]--perf-max-stack-depth] [--stack-storage-size] [duration]\n"
+"EXAMPLES:\n"
+"	wakeuptime		# trace blocked time with waker stacks\n"
+"	wakeuptime 5		# trace for 5 seconds only\n"
+"	wakeuptime -u		# don't include kernel threads (user only)\n"
+"	wakeuptime -p 185	# trace for PID 185 only\n";
+
+#define OPT_PERF_MAX_STACK_DEPTH	1 /* --pef-max-stack-depth */
+#define OPT_STACK_STORAGE_SIZE		2 /* --stack-storage-size */
+
+static const struct argp_option opts[] = {
+	{ "pid", 'p', "PID", 0, "trace this PID only"},
+	{ "verbose", 'v', NULL, 0, "show raw addresses" },
+	{ "user-threads-only", 'u', NULL, 0, "user threads only (no kernel threads)" },
+	{ "perf-max-stack-depth", OPT_PERF_MAX_STACK_DEPTH,
+		"PERF-MAX-STACK-DEPTH", 0, "the limit for both kernel and user stack traces (default 127)" },
+	{ "stack-storage-size", OPT_STACK_STORAGE_SIZE, "STACK-STORAGE-SIZE", 0,
+		"the number of unique stack traces that can be stored and displayed (default 1024)" },
+	{ "min-block-time", 'm', "MIN-BLOCK-TIME", 0,
+		"the amount of time in microseconds over which we store traces (default 1)" },
+	{ "max-block-time", 'M', "MAX-BLOCK-TIME", 0,
+		"the amount of time in microseconds under which we store traces (default U64_MAX)" },
+	{ NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" },
+	{},
+};
+
+static error_t parse_arg(int key, char *arg, struct argp_state *state)
+{
+	static int pos_args;
+	int pid;
+
+	switch (key) {
+	case 'h':
+		argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
+		break;
+	case 'v':
+		env.verbose = true;
+		break;
+	case 'u':
+		env.user_threads_only = true;
+		break;
+	case 'p':
+		errno = 0;
+		pid = strtol(arg, NULL, 10);
+		if (errno || pid <= 0) {
+			fprintf(stderr, "Invalid PID: %s\n", arg);
+			argp_usage(state);
+		}
+		env.pid = pid;
+		break;
+	case OPT_PERF_MAX_STACK_DEPTH:
+		errno = 0;
+		env.perf_max_stack_depth = strtol(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "invalid perf max stack depth: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case OPT_STACK_STORAGE_SIZE:
+		errno = 0;
+		env.stack_storage_size = strtol(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "invalid stack storage size: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'm':
+		errno = 0;
+		env.min_block_time = strtoll(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "Invalid min block time (in us): %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case 'M':
+		errno = 0;
+		env.max_block_time = strtoll(arg, NULL, 10);
+		if (errno) {
+			fprintf(stderr, "Invalid min block time (in us): %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	case ARGP_KEY_ARG:
+		errno = 0;
+		if (pos_args == 0){
+			env.duration = strtol(arg, NULL, 10);
+			if (errno || env.duration <= 0) {
+				fprintf(stderr, "invalid duration (in s)\n");
+				argp_usage(state);
+			}
+		} else {
+			fprintf(stderr, "Unrecognized positional argument: %s\n", arg);
+			argp_usage(state);
+		}
+		break;
+	default:
+		return ARGP_ERR_UNKNOWN;
+	}
+	return 0;
+}
+
+static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
+{
+	if (level == LIBBPF_DEBUG && !env.verbose)
+		return 0;
+	return vfprintf(stderr, format, args);
+}
+
+static void sig_int(int signo)
+{
+}
+
+static void print_map(struct ksyms *ksyms, struct wakeuptime_bpf *obj)
+{
+	struct key_t lookup_key = {}, next_key;
+	int err, i, counts_fd, stack_traces_fd;
+	unsigned long *ip;
+	const struct ksym *ksym;
+	__u64 val;
+
+	ip = calloc(env.perf_max_stack_depth, sizeof(*ip));
+	if (!ip) {
+		fprintf(stderr, "failed to alloc ip\n");
+		return;
+	}
+
+	counts_fd = bpf_map__fd(obj->maps.counts);
+	stack_traces_fd = bpf_map__fd(obj->maps.stackmap);
+
+	while (!bpf_map_get_next_key(counts_fd, &lookup_key, &next_key)){
+		err = bpf_map_lookup_elem(counts_fd, &next_key, &val);
+		if (err < 0) {
+			fprintf(stderr, "failed to lookup info: %d\n", err);
+			free(ip);
+			return;
+		}
+		printf("\n	%-16s %s\n", "target:", next_key.target);
+		lookup_key = next_key;
+
+		err = bpf_map_lookup_elem(stack_traces_fd, &next_key.w_k_stack_id, ip);
+		if (err < 0) {
+			fprintf(stderr, "missed kernel stack: %d\n", err);
+		}
+		for (i = 0; i < env.perf_max_stack_depth && ip[i]; i++) {
+			ksym = ksyms__map_addr(ksyms, ip[i]);
+			printf("	%-16lx %s\n", ip[i], ksym ? ksym->name: "Unknown");
+		}
+		printf("	%16s %s\n","waker:", next_key.waker);
+		/*to convert val in microseconds*/
+		val /= 1000;
+		printf("	%lld\n", val);
+	}
+
+	free(ip);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct argp argp = {
+		.options = opts,
+		.parser = parse_arg,
+		.doc = argp_program_doc,
+	};
+	struct wakeuptime_bpf *obj;
+	struct ksyms *ksyms = NULL;
+	int err;
+
+	err = argp_parse(&argp, argc, argv, 0, NULL, NULL);
+	if (err)
+		return err;
+
+	if (env.min_block_time >= env.max_block_time) {
+		fprintf(stderr, "min_block_time should be smaller than max_block_time\n");
+		return 1;
+	}
+
+	if (env.user_threads_only && env.pid > 0) {
+		fprintf(stderr, "use either -u or -p");
+	}
+
+	libbpf_set_print(libbpf_print_fn);
+
+	obj = wakeuptime_bpf__open();
+	if (!obj) {
+		fprintf(stderr, "failed to open BPF object\n");
+		return 1;
+	}
+
+	obj->rodata->targ_pid = env.pid;
+	obj->rodata->min_block_ns = env.min_block_time * 1000;
+	obj->rodata->max_block_ns = env.max_block_time * 1000;
+	obj->rodata->user_threads_only = env.user_threads_only;
+
+	bpf_map__set_value_size(obj->maps.stackmap,
+				env.perf_max_stack_depth * sizeof(unsigned long));
+	bpf_map__set_max_entries(obj->maps.stackmap, env.stack_storage_size);
+
+	err = wakeuptime_bpf__load(obj);
+	if (err) {
+		fprintf(stderr, "failed to load BPF object: %d\n", err);
+		goto cleanup;
+	}
+
+	ksyms = ksyms__load();
+	if (!ksyms) {
+		fprintf(stderr, "failed to load kallsyms\n");
+		goto cleanup;
+	}
+
+	err = wakeuptime_bpf__attach(obj);
+	if (err) {
+		fprintf(stderr, "failed to attach BPF programs\n");
+		goto cleanup;
+	}
+
+	if (signal(SIGINT, sig_int) == SIG_ERR) {
+		fprintf(stderr, "can't set signal handler: %s\n", strerror(errno));
+		err = 1;
+		goto cleanup;
+	}
+
+	printf("Tracing blocked time (us) by kernel stack\n");
+	sleep(env.duration);
+	print_map(ksyms, obj);
+
+cleanup:
+	wakeuptime_bpf__destroy(obj);
+	ksyms__free(ksyms);
+	return err != 0;
+}
diff --git a/libbpf-tools/wakeuptime.h b/libbpf-tools/wakeuptime.h
new file mode 100644
index 0000000..3c5376a
--- /dev/null
+++ b/libbpf-tools/wakeuptime.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
+
+#ifndef __WAKEUPTIME_H
+#define __WAKEUPTIME_H
+
+#define MAX_ENTRIES 10240
+#define TASK_COMM_LEN 16
+
+struct key_t {
+	char waker[TASK_COMM_LEN];
+	char target[TASK_COMM_LEN];
+	int w_k_stack_id;
+};
+
+#endif /* __WAKEUPTIME_H */
diff --git a/libbpf-tools/x86/vmlinux.h b/libbpf-tools/x86/vmlinux.h
index 332faaf..a5cfa4c 120000
--- a/libbpf-tools/x86/vmlinux.h
+++ b/libbpf-tools/x86/vmlinux.h
@@ -1 +1 @@
-vmlinux_505.h
\ No newline at end of file
+vmlinux_518.h
\ No newline at end of file
diff --git a/libbpf-tools/x86/vmlinux_505.h b/libbpf-tools/x86/vmlinux_505.h
deleted file mode 100644
index 7c2aaa7..0000000
--- a/libbpf-tools/x86/vmlinux_505.h
+++ /dev/null
@@ -1,127441 +0,0 @@
-#ifndef __VMLINUX_H__
-#define __VMLINUX_H__
-
-#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
-#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
-#endif
-
-typedef signed char __s8;
-
-typedef unsigned char __u8;
-
-typedef short int __s16;
-
-typedef short unsigned int __u16;
-
-typedef int __s32;
-
-typedef unsigned int __u32;
-
-typedef long long int __s64;
-
-typedef long long unsigned int __u64;
-
-typedef __s8 s8;
-
-typedef __u8 u8;
-
-typedef __s16 s16;
-
-typedef __u16 u16;
-
-typedef __s32 s32;
-
-typedef __u32 u32;
-
-typedef __s64 s64;
-
-typedef __u64 u64;
-
-enum {
-	false = 0,
-	true = 1,
-};
-
-typedef long int __kernel_long_t;
-
-typedef long unsigned int __kernel_ulong_t;
-
-typedef int __kernel_pid_t;
-
-typedef unsigned int __kernel_uid32_t;
-
-typedef unsigned int __kernel_gid32_t;
-
-typedef __kernel_ulong_t __kernel_size_t;
-
-typedef __kernel_long_t __kernel_ssize_t;
-
-typedef long long int __kernel_loff_t;
-
-typedef long long int __kernel_time64_t;
-
-typedef __kernel_long_t __kernel_clock_t;
-
-typedef int __kernel_timer_t;
-
-typedef int __kernel_clockid_t;
-
-typedef unsigned int __poll_t;
-
-typedef u32 __kernel_dev_t;
-
-typedef __kernel_dev_t dev_t;
-
-typedef short unsigned int umode_t;
-
-typedef __kernel_pid_t pid_t;
-
-typedef __kernel_clockid_t clockid_t;
-
-typedef _Bool bool;
-
-typedef __kernel_uid32_t uid_t;
-
-typedef __kernel_gid32_t gid_t;
-
-typedef __kernel_loff_t loff_t;
-
-typedef __kernel_size_t size_t;
-
-typedef __kernel_ssize_t ssize_t;
-
-typedef u8 uint8_t;
-
-typedef u16 uint16_t;
-
-typedef u32 uint32_t;
-
-typedef u64 sector_t;
-
-typedef u64 blkcnt_t;
-
-typedef u64 dma_addr_t;
-
-typedef unsigned int gfp_t;
-
-typedef unsigned int fmode_t;
-
-typedef u64 phys_addr_t;
-
-typedef phys_addr_t resource_size_t;
-
-typedef struct {
-	int counter;
-} atomic_t;
-
-typedef struct {
-	s64 counter;
-} atomic64_t;
-
-struct list_head {
-	struct list_head *next;
-	struct list_head *prev;
-};
-
-struct hlist_node;
-
-struct hlist_head {
-	struct hlist_node *first;
-};
-
-struct hlist_node {
-	struct hlist_node *next;
-	struct hlist_node **pprev;
-};
-
-struct callback_head {
-	struct callback_head *next;
-	void (*func)(struct callback_head *);
-};
-
-typedef int initcall_entry_t;
-
-struct lock_class_key {};
-
-struct fs_context;
-
-struct fs_parameter_description;
-
-struct dentry;
-
-struct super_block;
-
-struct module;
-
-struct file_system_type {
-	const char *name;
-	int fs_flags;
-	int (*init_fs_context)(struct fs_context *);
-	const struct fs_parameter_description *parameters;
-	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
-	void (*kill_sb)(struct super_block *);
-	struct module *owner;
-	struct file_system_type *next;
-	struct hlist_head fs_supers;
-	struct lock_class_key s_lock_key;
-	struct lock_class_key s_umount_key;
-	struct lock_class_key s_vfs_rename_key;
-	struct lock_class_key s_writers_key[3];
-	struct lock_class_key i_lock_key;
-	struct lock_class_key i_mutex_key;
-	struct lock_class_key i_mutex_dir_key;
-};
-
-typedef void *fl_owner_t;
-
-struct file;
-
-struct kiocb;
-
-struct iov_iter;
-
-struct dir_context;
-
-struct poll_table_struct;
-
-struct vm_area_struct;
-
-struct inode;
-
-struct file_lock;
-
-struct page;
-
-struct pipe_inode_info;
-
-struct seq_file;
-
-struct file_operations {
-	struct module *owner;
-	loff_t (*llseek)(struct file *, loff_t, int);
-	ssize_t (*read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
-	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
-	int (*iopoll)(struct kiocb *, bool);
-	int (*iterate)(struct file *, struct dir_context *);
-	int (*iterate_shared)(struct file *, struct dir_context *);
-	__poll_t (*poll)(struct file *, struct poll_table_struct *);
-	long int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int mmap_supported_flags;
-	int (*open)(struct inode *, struct file *);
-	int (*flush)(struct file *, fl_owner_t);
-	int (*release)(struct inode *, struct file *);
-	int (*fsync)(struct file *, loff_t, loff_t, int);
-	int (*fasync)(int, struct file *, int);
-	int (*lock)(struct file *, int, struct file_lock *);
-	ssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int);
-	long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	int (*check_flags)(int);
-	int (*flock)(struct file *, int, struct file_lock *);
-	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
-	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	int (*setlease)(struct file *, long int, struct file_lock **, void **);
-	long int (*fallocate)(struct file *, int, loff_t, loff_t);
-	void (*show_fdinfo)(struct seq_file *, struct file *);
-	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
-	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
-	int (*fadvise)(struct file *, loff_t, loff_t, int);
-};
-
-struct qspinlock {
-	union {
-		atomic_t val;
-		struct {
-			u8 locked;
-			u8 pending;
-		};
-		struct {
-			u16 locked_pending;
-			u16 tail;
-		};
-	};
-};
-
-typedef struct qspinlock arch_spinlock_t;
-
-struct raw_spinlock {
-	arch_spinlock_t raw_lock;
-};
-
-struct spinlock {
-	union {
-		struct raw_spinlock rlock;
-	};
-};
-
-typedef struct spinlock spinlock_t;
-
-struct notifier_block;
-
-struct atomic_notifier_head {
-	spinlock_t lock;
-	struct notifier_block *head;
-};
-
-enum system_states {
-	SYSTEM_BOOTING = 0,
-	SYSTEM_SCHEDULING = 1,
-	SYSTEM_RUNNING = 2,
-	SYSTEM_HALT = 3,
-	SYSTEM_POWER_OFF = 4,
-	SYSTEM_RESTART = 5,
-	SYSTEM_SUSPEND = 6,
-};
-
-struct taint_flag {
-	char c_true;
-	char c_false;
-	bool module;
-};
-
-struct jump_entry {
-	s32 code;
-	s32 target;
-	long int key;
-};
-
-struct static_key_mod;
-
-struct static_key {
-	atomic_t enabled;
-	union {
-		long unsigned int type;
-		struct jump_entry *entries;
-		struct static_key_mod *next;
-	};
-};
-
-struct static_key_true {
-	struct static_key key;
-};
-
-struct static_key_false {
-	struct static_key key;
-};
-
-typedef __s64 time64_t;
-
-struct __kernel_timespec {
-	__kernel_time64_t tv_sec;
-	long long int tv_nsec;
-};
-
-struct timezone {
-	int tz_minuteswest;
-	int tz_dsttime;
-};
-
-struct timespec64 {
-	time64_t tv_sec;
-	long int tv_nsec;
-};
-
-enum timespec_type {
-	TT_NONE = 0,
-	TT_NATIVE = 1,
-	TT_COMPAT = 2,
-};
-
-typedef s32 old_time32_t;
-
-struct old_timespec32 {
-	old_time32_t tv_sec;
-	s32 tv_nsec;
-};
-
-struct pollfd;
-
-struct restart_block {
-	long int (*fn)(struct restart_block *);
-	union {
-		struct {
-			u32 *uaddr;
-			u32 val;
-			u32 flags;
-			u32 bitset;
-			u64 time;
-			u32 *uaddr2;
-		} futex;
-		struct {
-			clockid_t clockid;
-			enum timespec_type type;
-			union {
-				struct __kernel_timespec *rmtp;
-				struct old_timespec32 *compat_rmtp;
-			};
-			u64 expires;
-		} nanosleep;
-		struct {
-			struct pollfd *ufds;
-			int nfds;
-			int has_timeout;
-			long unsigned int tv_sec;
-			long unsigned int tv_nsec;
-		} poll;
-	};
-};
-
-struct thread_info {
-	long unsigned int flags;
-	u32 status;
-};
-
-struct refcount_struct {
-	atomic_t refs;
-};
-
-typedef struct refcount_struct refcount_t;
-
-struct llist_node {
-	struct llist_node *next;
-};
-
-struct load_weight {
-	long unsigned int weight;
-	u32 inv_weight;
-};
-
-struct rb_node {
-	long unsigned int __rb_parent_color;
-	struct rb_node *rb_right;
-	struct rb_node *rb_left;
-};
-
-struct sched_statistics {
-	u64 wait_start;
-	u64 wait_max;
-	u64 wait_count;
-	u64 wait_sum;
-	u64 iowait_count;
-	u64 iowait_sum;
-	u64 sleep_start;
-	u64 sleep_max;
-	s64 sum_sleep_runtime;
-	u64 block_start;
-	u64 block_max;
-	u64 exec_max;
-	u64 slice_max;
-	u64 nr_migrations_cold;
-	u64 nr_failed_migrations_affine;
-	u64 nr_failed_migrations_running;
-	u64 nr_failed_migrations_hot;
-	u64 nr_forced_migrations;
-	u64 nr_wakeups;
-	u64 nr_wakeups_sync;
-	u64 nr_wakeups_migrate;
-	u64 nr_wakeups_local;
-	u64 nr_wakeups_remote;
-	u64 nr_wakeups_affine;
-	u64 nr_wakeups_affine_attempts;
-	u64 nr_wakeups_passive;
-	u64 nr_wakeups_idle;
-};
-
-struct util_est {
-	unsigned int enqueued;
-	unsigned int ewma;
-};
-
-struct sched_avg {
-	u64 last_update_time;
-	u64 load_sum;
-	u64 runnable_load_sum;
-	u32 util_sum;
-	u32 period_contrib;
-	long unsigned int load_avg;
-	long unsigned int runnable_load_avg;
-	long unsigned int util_avg;
-	struct util_est util_est;
-};
-
-struct cfs_rq;
-
-struct sched_entity {
-	struct load_weight load;
-	long unsigned int runnable_weight;
-	struct rb_node run_node;
-	struct list_head group_node;
-	unsigned int on_rq;
-	u64 exec_start;
-	u64 sum_exec_runtime;
-	u64 vruntime;
-	u64 prev_sum_exec_runtime;
-	u64 nr_migrations;
-	struct sched_statistics statistics;
-	int depth;
-	struct sched_entity *parent;
-	struct cfs_rq *cfs_rq;
-	struct cfs_rq *my_q;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg;
-};
-
-struct sched_rt_entity {
-	struct list_head run_list;
-	long unsigned int timeout;
-	long unsigned int watchdog_stamp;
-	unsigned int time_slice;
-	short unsigned int on_rq;
-	short unsigned int on_list;
-	struct sched_rt_entity *back;
-};
-
-typedef s64 ktime_t;
-
-struct timerqueue_node {
-	struct rb_node node;
-	ktime_t expires;
-};
-
-enum hrtimer_restart {
-	HRTIMER_NORESTART = 0,
-	HRTIMER_RESTART = 1,
-};
-
-struct hrtimer_clock_base;
-
-struct hrtimer {
-	struct timerqueue_node node;
-	ktime_t _softexpires;
-	enum hrtimer_restart (*function)(struct hrtimer *);
-	struct hrtimer_clock_base *base;
-	u8 state;
-	u8 is_rel;
-	u8 is_soft;
-	u8 is_hard;
-};
-
-struct sched_dl_entity {
-	struct rb_node rb_node;
-	u64 dl_runtime;
-	u64 dl_deadline;
-	u64 dl_period;
-	u64 dl_bw;
-	u64 dl_density;
-	s64 runtime;
-	u64 deadline;
-	unsigned int flags;
-	unsigned int dl_throttled: 1;
-	unsigned int dl_boosted: 1;
-	unsigned int dl_yielded: 1;
-	unsigned int dl_non_contending: 1;
-	unsigned int dl_overrun: 1;
-	struct hrtimer dl_timer;
-	struct hrtimer inactive_timer;
-};
-
-struct cpumask {
-	long unsigned int bits[1];
-};
-
-typedef struct cpumask cpumask_t;
-
-struct sched_info {
-	long unsigned int pcount;
-	long long unsigned int run_delay;
-	long long unsigned int last_arrival;
-	long long unsigned int last_queued;
-};
-
-struct plist_node {
-	int prio;
-	struct list_head prio_list;
-	struct list_head node_list;
-};
-
-struct vmacache {
-	u64 seqnum;
-	struct vm_area_struct *vmas[4];
-};
-
-struct task_rss_stat {
-	int events;
-	int count[4];
-};
-
-typedef struct raw_spinlock raw_spinlock_t;
-
-struct prev_cputime {
-	u64 utime;
-	u64 stime;
-	raw_spinlock_t lock;
-};
-
-struct rb_root {
-	struct rb_node *rb_node;
-};
-
-struct rb_root_cached {
-	struct rb_root rb_root;
-	struct rb_node *rb_leftmost;
-};
-
-struct timerqueue_head {
-	struct rb_root_cached rb_root;
-};
-
-struct posix_cputimer_base {
-	u64 nextevt;
-	struct timerqueue_head tqhead;
-};
-
-struct posix_cputimers {
-	struct posix_cputimer_base bases[3];
-	unsigned int timers_active;
-	unsigned int expiry_active;
-};
-
-struct sem_undo_list;
-
-struct sysv_sem {
-	struct sem_undo_list *undo_list;
-};
-
-struct sysv_shm {
-	struct list_head shm_clist;
-};
-
-typedef struct {
-	long unsigned int sig[1];
-} sigset_t;
-
-struct sigpending {
-	struct list_head list;
-	sigset_t signal;
-};
-
-typedef struct {
-	uid_t val;
-} kuid_t;
-
-struct seccomp_filter;
-
-struct seccomp {
-	int mode;
-	struct seccomp_filter *filter;
-};
-
-struct wake_q_node {
-	struct wake_q_node *next;
-};
-
-struct task_io_accounting {
-	u64 rchar;
-	u64 wchar;
-	u64 syscr;
-	u64 syscw;
-	u64 read_bytes;
-	u64 write_bytes;
-	u64 cancelled_write_bytes;
-};
-
-typedef struct {
-	long unsigned int bits[1];
-} nodemask_t;
-
-struct seqcount {
-	unsigned int sequence;
-};
-
-typedef struct seqcount seqcount_t;
-
-typedef atomic64_t atomic_long_t;
-
-struct optimistic_spin_queue {
-	atomic_t tail;
-};
-
-struct mutex {
-	atomic_long_t owner;
-	spinlock_t wait_lock;
-	struct optimistic_spin_queue osq;
-	struct list_head wait_list;
-};
-
-struct arch_tlbflush_unmap_batch {
-	struct cpumask cpumask;
-};
-
-struct tlbflush_unmap_batch {
-	struct arch_tlbflush_unmap_batch arch;
-	bool flush_required;
-	bool writable;
-};
-
-struct page_frag {
-	struct page *page;
-	__u32 offset;
-	__u32 size;
-};
-
-struct desc_struct {
-	u16 limit0;
-	u16 base0;
-	u16 base1: 8;
-	u16 type: 4;
-	u16 s: 1;
-	u16 dpl: 2;
-	u16 p: 1;
-	u16 limit1: 4;
-	u16 avl: 1;
-	u16 l: 1;
-	u16 d: 1;
-	u16 g: 1;
-	u16 base2: 8;
-};
-
-typedef struct {
-	long unsigned int seg;
-} mm_segment_t;
-
-struct fregs_state {
-	u32 cwd;
-	u32 swd;
-	u32 twd;
-	u32 fip;
-	u32 fcs;
-	u32 foo;
-	u32 fos;
-	u32 st_space[20];
-	u32 status;
-};
-
-struct fxregs_state {
-	u16 cwd;
-	u16 swd;
-	u16 twd;
-	u16 fop;
-	union {
-		struct {
-			u64 rip;
-			u64 rdp;
-		};
-		struct {
-			u32 fip;
-			u32 fcs;
-			u32 foo;
-			u32 fos;
-		};
-	};
-	u32 mxcsr;
-	u32 mxcsr_mask;
-	u32 st_space[32];
-	u32 xmm_space[64];
-	u32 padding[12];
-	union {
-		u32 padding1[12];
-		u32 sw_reserved[12];
-	};
-};
-
-struct math_emu_info;
-
-struct swregs_state {
-	u32 cwd;
-	u32 swd;
-	u32 twd;
-	u32 fip;
-	u32 fcs;
-	u32 foo;
-	u32 fos;
-	u32 st_space[20];
-	u8 ftop;
-	u8 changed;
-	u8 lookahead;
-	u8 no_update;
-	u8 rm;
-	u8 alimit;
-	struct math_emu_info *info;
-	u32 entry_eip;
-};
-
-struct xstate_header {
-	u64 xfeatures;
-	u64 xcomp_bv;
-	u64 reserved[6];
-};
-
-struct xregs_state {
-	struct fxregs_state i387;
-	struct xstate_header header;
-	u8 extended_state_area[0];
-};
-
-union fpregs_state {
-	struct fregs_state fsave;
-	struct fxregs_state fxsave;
-	struct swregs_state soft;
-	struct xregs_state xsave;
-	u8 __padding[4096];
-};
-
-struct fpu {
-	unsigned int last_cpu;
-	long unsigned int avx512_timestamp;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union fpregs_state state;
-};
-
-struct perf_event;
-
-struct io_bitmap;
-
-struct thread_struct {
-	struct desc_struct tls_array[3];
-	long unsigned int sp;
-	short unsigned int es;
-	short unsigned int ds;
-	short unsigned int fsindex;
-	short unsigned int gsindex;
-	long unsigned int fsbase;
-	long unsigned int gsbase;
-	struct perf_event *ptrace_bps[4];
-	long unsigned int debugreg6;
-	long unsigned int ptrace_dr7;
-	long unsigned int cr2;
-	long unsigned int trap_nr;
-	long unsigned int error_code;
-	struct io_bitmap *io_bitmap;
-	long unsigned int iopl_emul;
-	mm_segment_t addr_limit;
-	unsigned int sig_on_uaccess_err: 1;
-	unsigned int uaccess_err: 1;
-	long: 62;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct fpu fpu;
-};
-
-struct sched_class;
-
-struct task_group;
-
-struct mm_struct;
-
-struct pid;
-
-struct completion;
-
-struct cred;
-
-struct key;
-
-struct nameidata;
-
-struct fs_struct;
-
-struct files_struct;
-
-struct nsproxy;
-
-struct signal_struct;
-
-struct sighand_struct;
-
-struct audit_context;
-
-struct rt_mutex_waiter;
-
-struct bio_list;
-
-struct blk_plug;
-
-struct reclaim_state;
-
-struct backing_dev_info;
-
-struct io_context;
-
-struct capture_control;
-
-struct kernel_siginfo;
-
-typedef struct kernel_siginfo kernel_siginfo_t;
-
-struct css_set;
-
-struct robust_list_head;
-
-struct compat_robust_list_head;
-
-struct futex_pi_state;
-
-struct perf_event_context;
-
-struct mempolicy;
-
-struct rseq;
-
-struct task_delay_info;
-
-struct uprobe_task;
-
-struct vm_struct;
-
-struct task_struct {
-	struct thread_info thread_info;
-	volatile long int state;
-	void *stack;
-	refcount_t usage;
-	unsigned int flags;
-	unsigned int ptrace;
-	struct llist_node wake_entry;
-	int on_cpu;
-	unsigned int cpu;
-	unsigned int wakee_flips;
-	long unsigned int wakee_flip_decay_ts;
-	struct task_struct *last_wakee;
-	int recent_used_cpu;
-	int wake_cpu;
-	int on_rq;
-	int prio;
-	int static_prio;
-	int normal_prio;
-	unsigned int rt_priority;
-	const struct sched_class *sched_class;
-	struct sched_entity se;
-	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
-	struct sched_dl_entity dl;
-	unsigned int btrace_seq;
-	unsigned int policy;
-	int nr_cpus_allowed;
-	const cpumask_t *cpus_ptr;
-	cpumask_t cpus_mask;
-	struct sched_info sched_info;
-	struct list_head tasks;
-	struct plist_node pushable_tasks;
-	struct rb_node pushable_dl_tasks;
-	struct mm_struct *mm;
-	struct mm_struct *active_mm;
-	struct vmacache vmacache;
-	struct task_rss_stat rss_stat;
-	int exit_state;
-	int exit_code;
-	int exit_signal;
-	int pdeath_signal;
-	long unsigned int jobctl;
-	unsigned int personality;
-	unsigned int sched_reset_on_fork: 1;
-	unsigned int sched_contributes_to_load: 1;
-	unsigned int sched_migrated: 1;
-	unsigned int sched_remote_wakeup: 1;
-	int: 28;
-	unsigned int in_execve: 1;
-	unsigned int in_iowait: 1;
-	unsigned int restore_sigmask: 1;
-	unsigned int no_cgroup_migration: 1;
-	unsigned int frozen: 1;
-	long unsigned int atomic_flags;
-	struct restart_block restart_block;
-	pid_t pid;
-	pid_t tgid;
-	long unsigned int stack_canary;
-	struct task_struct *real_parent;
-	struct task_struct *parent;
-	struct list_head children;
-	struct list_head sibling;
-	struct task_struct *group_leader;
-	struct list_head ptraced;
-	struct list_head ptrace_entry;
-	struct pid *thread_pid;
-	struct hlist_node pid_links[4];
-	struct list_head thread_group;
-	struct list_head thread_node;
-	struct completion *vfork_done;
-	int *set_child_tid;
-	int *clear_child_tid;
-	u64 utime;
-	u64 stime;
-	u64 gtime;
-	struct prev_cputime prev_cputime;
-	long unsigned int nvcsw;
-	long unsigned int nivcsw;
-	u64 start_time;
-	u64 start_boottime;
-	long unsigned int min_flt;
-	long unsigned int maj_flt;
-	struct posix_cputimers posix_cputimers;
-	const struct cred *ptracer_cred;
-	const struct cred *real_cred;
-	const struct cred *cred;
-	struct key *cached_requested_key;
-	char comm[16];
-	struct nameidata *nameidata;
-	struct sysv_sem sysvsem;
-	struct sysv_shm sysvshm;
-	struct fs_struct *fs;
-	struct files_struct *files;
-	struct nsproxy *nsproxy;
-	struct signal_struct *signal;
-	struct sighand_struct *sighand;
-	sigset_t blocked;
-	sigset_t real_blocked;
-	sigset_t saved_sigmask;
-	struct sigpending pending;
-	long unsigned int sas_ss_sp;
-	size_t sas_ss_size;
-	unsigned int sas_ss_flags;
-	struct callback_head *task_works;
-	struct audit_context *audit_context;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct seccomp seccomp;
-	u32 parent_exec_id;
-	u32 self_exec_id;
-	spinlock_t alloc_lock;
-	raw_spinlock_t pi_lock;
-	struct wake_q_node wake_q;
-	struct rb_root_cached pi_waiters;
-	struct task_struct *pi_top_task;
-	struct rt_mutex_waiter *pi_blocked_on;
-	void *journal_info;
-	struct bio_list *bio_list;
-	struct blk_plug *plug;
-	struct reclaim_state *reclaim_state;
-	struct backing_dev_info *backing_dev_info;
-	struct io_context *io_context;
-	struct capture_control *capture_control;
-	long unsigned int ptrace_message;
-	kernel_siginfo_t *last_siginfo;
-	struct task_io_accounting ioac;
-	u64 acct_rss_mem1;
-	u64 acct_vm_mem1;
-	u64 acct_timexpd;
-	nodemask_t mems_allowed;
-	seqcount_t mems_allowed_seq;
-	int cpuset_mem_spread_rotor;
-	int cpuset_slab_spread_rotor;
-	struct css_set *cgroups;
-	struct list_head cg_list;
-	struct robust_list_head *robust_list;
-	struct compat_robust_list_head *compat_robust_list;
-	struct list_head pi_state_list;
-	struct futex_pi_state *pi_state_cache;
-	struct mutex futex_exit_mutex;
-	unsigned int futex_state;
-	struct perf_event_context *perf_event_ctxp[2];
-	struct mutex perf_event_mutex;
-	struct list_head perf_event_list;
-	struct mempolicy *mempolicy;
-	short int il_prev;
-	short int pref_node_fork;
-	struct rseq *rseq;
-	u32 rseq_sig;
-	long unsigned int rseq_event_mask;
-	struct tlbflush_unmap_batch tlb_ubc;
-	union {
-		refcount_t rcu_users;
-		struct callback_head rcu;
-	};
-	struct pipe_inode_info *splice_pipe;
-	struct page_frag task_frag;
-	struct task_delay_info *delays;
-	int nr_dirtied;
-	int nr_dirtied_pause;
-	long unsigned int dirty_paused_when;
-	u64 timer_slack_ns;
-	u64 default_timer_slack_ns;
-	long unsigned int trace;
-	long unsigned int trace_recursion;
-	struct uprobe_task *utask;
-	int pagefault_disabled;
-	struct task_struct *oom_reaper_list;
-	struct vm_struct *stack_vm_area;
-	refcount_t stack_refcount;
-	void *security;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct thread_struct thread;
-};
-
-struct screen_info {
-	__u8 orig_x;
-	__u8 orig_y;
-	__u16 ext_mem_k;
-	__u16 orig_video_page;
-	__u8 orig_video_mode;
-	__u8 orig_video_cols;
-	__u8 flags;
-	__u8 unused2;
-	__u16 orig_video_ega_bx;
-	__u16 unused3;
-	__u8 orig_video_lines;
-	__u8 orig_video_isVGA;
-	__u16 orig_video_points;
-	__u16 lfb_width;
-	__u16 lfb_height;
-	__u16 lfb_depth;
-	__u32 lfb_base;
-	__u32 lfb_size;
-	__u16 cl_magic;
-	__u16 cl_offset;
-	__u16 lfb_linelength;
-	__u8 red_size;
-	__u8 red_pos;
-	__u8 green_size;
-	__u8 green_pos;
-	__u8 blue_size;
-	__u8 blue_pos;
-	__u8 rsvd_size;
-	__u8 rsvd_pos;
-	__u16 vesapm_seg;
-	__u16 vesapm_off;
-	__u16 pages;
-	__u16 vesa_attributes;
-	__u32 capabilities;
-	__u32 ext_lfb_base;
-	__u8 _reserved[2];
-} __attribute__((packed));
-
-struct apm_bios_info {
-	__u16 version;
-	__u16 cseg;
-	__u32 offset;
-	__u16 cseg_16;
-	__u16 dseg;
-	__u16 flags;
-	__u16 cseg_len;
-	__u16 cseg_16_len;
-	__u16 dseg_len;
-};
-
-struct apm_info {
-	struct apm_bios_info bios;
-	short unsigned int connection_version;
-	int get_power_status_broken;
-	int get_power_status_swabinminutes;
-	int allow_ints;
-	int forbid_idle;
-	int realmode_power_off;
-	int disabled;
-};
-
-struct edd_device_params {
-	__u16 length;
-	__u16 info_flags;
-	__u32 num_default_cylinders;
-	__u32 num_default_heads;
-	__u32 sectors_per_track;
-	__u64 number_of_sectors;
-	__u16 bytes_per_sector;
-	__u32 dpte_ptr;
-	__u16 key;
-	__u8 device_path_info_length;
-	__u8 reserved2;
-	__u16 reserved3;
-	__u8 host_bus_type[4];
-	__u8 interface_type[8];
-	union {
-		struct {
-			__u16 base_address;
-			__u16 reserved1;
-			__u32 reserved2;
-		} isa;
-		struct {
-			__u8 bus;
-			__u8 slot;
-			__u8 function;
-			__u8 channel;
-			__u32 reserved;
-		} pci;
-		struct {
-			__u64 reserved;
-		} ibnd;
-		struct {
-			__u64 reserved;
-		} xprs;
-		struct {
-			__u64 reserved;
-		} htpt;
-		struct {
-			__u64 reserved;
-		} unknown;
-	} interface_path;
-	union {
-		struct {
-			__u8 device;
-			__u8 reserved1;
-			__u16 reserved2;
-			__u32 reserved3;
-			__u64 reserved4;
-		} ata;
-		struct {
-			__u8 device;
-			__u8 lun;
-			__u8 reserved1;
-			__u8 reserved2;
-			__u32 reserved3;
-			__u64 reserved4;
-		} atapi;
-		struct {
-			__u16 id;
-			__u64 lun;
-			__u16 reserved1;
-			__u32 reserved2;
-		} __attribute__((packed)) scsi;
-		struct {
-			__u64 serial_number;
-			__u64 reserved;
-		} usb;
-		struct {
-			__u64 eui;
-			__u64 reserved;
-		} i1394;
-		struct {
-			__u64 wwid;
-			__u64 lun;
-		} fibre;
-		struct {
-			__u64 identity_tag;
-			__u64 reserved;
-		} i2o;
-		struct {
-			__u32 array_number;
-			__u32 reserved1;
-			__u64 reserved2;
-		} raid;
-		struct {
-			__u8 device;
-			__u8 reserved1;
-			__u16 reserved2;
-			__u32 reserved3;
-			__u64 reserved4;
-		} sata;
-		struct {
-			__u64 reserved1;
-			__u64 reserved2;
-		} unknown;
-	} device_path;
-	__u8 reserved4;
-	__u8 checksum;
-} __attribute__((packed));
-
-struct edd_info {
-	__u8 device;
-	__u8 version;
-	__u16 interface_support;
-	__u16 legacy_max_cylinder;
-	__u8 legacy_max_head;
-	__u8 legacy_sectors_per_track;
-	struct edd_device_params params;
-} __attribute__((packed));
-
-struct edd {
-	unsigned int mbr_signature[16];
-	struct edd_info edd_info[6];
-	unsigned char mbr_signature_nr;
-	unsigned char edd_info_nr;
-};
-
-struct ist_info {
-	__u32 signature;
-	__u32 command;
-	__u32 event;
-	__u32 perf_level;
-};
-
-struct edid_info {
-	unsigned char dummy[128];
-};
-
-struct setup_header {
-	__u8 setup_sects;
-	__u16 root_flags;
-	__u32 syssize;
-	__u16 ram_size;
-	__u16 vid_mode;
-	__u16 root_dev;
-	__u16 boot_flag;
-	__u16 jump;
-	__u32 header;
-	__u16 version;
-	__u32 realmode_swtch;
-	__u16 start_sys_seg;
-	__u16 kernel_version;
-	__u8 type_of_loader;
-	__u8 loadflags;
-	__u16 setup_move_size;
-	__u32 code32_start;
-	__u32 ramdisk_image;
-	__u32 ramdisk_size;
-	__u32 bootsect_kludge;
-	__u16 heap_end_ptr;
-	__u8 ext_loader_ver;
-	__u8 ext_loader_type;
-	__u32 cmd_line_ptr;
-	__u32 initrd_addr_max;
-	__u32 kernel_alignment;
-	__u8 relocatable_kernel;
-	__u8 min_alignment;
-	__u16 xloadflags;
-	__u32 cmdline_size;
-	__u32 hardware_subarch;
-	__u64 hardware_subarch_data;
-	__u32 payload_offset;
-	__u32 payload_length;
-	__u64 setup_data;
-	__u64 pref_address;
-	__u32 init_size;
-	__u32 handover_offset;
-	__u32 kernel_info_offset;
-} __attribute__((packed));
-
-struct sys_desc_table {
-	__u16 length;
-	__u8 table[14];
-};
-
-struct olpc_ofw_header {
-	__u32 ofw_magic;
-	__u32 ofw_version;
-	__u32 cif_handler;
-	__u32 irq_desc_table;
-};
-
-struct efi_info {
-	__u32 efi_loader_signature;
-	__u32 efi_systab;
-	__u32 efi_memdesc_size;
-	__u32 efi_memdesc_version;
-	__u32 efi_memmap;
-	__u32 efi_memmap_size;
-	__u32 efi_systab_hi;
-	__u32 efi_memmap_hi;
-};
-
-struct boot_e820_entry {
-	__u64 addr;
-	__u64 size;
-	__u32 type;
-} __attribute__((packed));
-
-struct boot_params {
-	struct screen_info screen_info;
-	struct apm_bios_info apm_bios_info;
-	__u8 _pad2[4];
-	__u64 tboot_addr;
-	struct ist_info ist_info;
-	__u64 acpi_rsdp_addr;
-	__u8 _pad3[8];
-	__u8 hd0_info[16];
-	__u8 hd1_info[16];
-	struct sys_desc_table sys_desc_table;
-	struct olpc_ofw_header olpc_ofw_header;
-	__u32 ext_ramdisk_image;
-	__u32 ext_ramdisk_size;
-	__u32 ext_cmd_line_ptr;
-	__u8 _pad4[116];
-	struct edid_info edid_info;
-	struct efi_info efi_info;
-	__u32 alt_mem_k;
-	__u32 scratch;
-	__u8 e820_entries;
-	__u8 eddbuf_entries;
-	__u8 edd_mbr_sig_buf_entries;
-	__u8 kbd_status;
-	__u8 secure_boot;
-	__u8 _pad5[2];
-	__u8 sentinel;
-	__u8 _pad6[1];
-	struct setup_header hdr;
-	__u8 _pad7[36];
-	__u32 edd_mbr_sig_buffer[16];
-	struct boot_e820_entry e820_table[128];
-	__u8 _pad8[48];
-	struct edd_info eddbuf[6];
-	__u8 _pad9[276];
-} __attribute__((packed));
-
-enum x86_hardware_subarch {
-	X86_SUBARCH_PC = 0,
-	X86_SUBARCH_LGUEST = 1,
-	X86_SUBARCH_XEN = 2,
-	X86_SUBARCH_INTEL_MID = 3,
-	X86_SUBARCH_CE4100 = 4,
-	X86_NR_SUBARCHS = 5,
-};
-
-struct range {
-	u64 start;
-	u64 end;
-};
-
-struct pt_regs {
-	long unsigned int r15;
-	long unsigned int r14;
-	long unsigned int r13;
-	long unsigned int r12;
-	long unsigned int bp;
-	long unsigned int bx;
-	long unsigned int r11;
-	long unsigned int r10;
-	long unsigned int r9;
-	long unsigned int r8;
-	long unsigned int ax;
-	long unsigned int cx;
-	long unsigned int dx;
-	long unsigned int si;
-	long unsigned int di;
-	long unsigned int orig_ax;
-	long unsigned int ip;
-	long unsigned int cs;
-	long unsigned int flags;
-	long unsigned int sp;
-	long unsigned int ss;
-};
-
-struct math_emu_info {
-	long int ___orig_eip;
-	struct pt_regs *regs;
-};
-
-typedef long unsigned int pteval_t;
-
-typedef long unsigned int pmdval_t;
-
-typedef long unsigned int pudval_t;
-
-typedef long unsigned int p4dval_t;
-
-typedef long unsigned int pgdval_t;
-
-typedef long unsigned int pgprotval_t;
-
-typedef struct {
-	pteval_t pte;
-} pte_t;
-
-struct pgprot {
-	pgprotval_t pgprot;
-};
-
-typedef struct pgprot pgprot_t;
-
-typedef struct {
-	pgdval_t pgd;
-} pgd_t;
-
-typedef struct {
-	p4dval_t p4d;
-} p4d_t;
-
-typedef struct {
-	pudval_t pud;
-} pud_t;
-
-typedef struct {
-	pmdval_t pmd;
-} pmd_t;
-
-typedef struct page *pgtable_t;
-
-struct address_space;
-
-struct kmem_cache;
-
-struct dev_pagemap;
-
-struct page {
-	long unsigned int flags;
-	union {
-		struct {
-			struct list_head lru;
-			struct address_space *mapping;
-			long unsigned int index;
-			long unsigned int private;
-		};
-		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
-			union {
-				struct list_head slab_list;
-				struct {
-					struct page *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
-			};
-		};
-		struct {
-			long unsigned int compound_head;
-			unsigned char compound_dtor;
-			unsigned char compound_order;
-			atomic_t compound_mapcount;
-		};
-		struct {
-			long unsigned int _compound_pad_1;
-			long unsigned int _compound_pad_2;
-			struct list_head deferred_list;
-		};
-		struct {
-			long unsigned int _pt_pad_1;
-			pgtable_t pmd_huge_pte;
-			long unsigned int _pt_pad_2;
-			union {
-				struct mm_struct *pt_mm;
-				atomic_t pt_frag_refcount;
-			};
-			spinlock_t ptl;
-		};
-		struct {
-			struct dev_pagemap *pgmap;
-			void *zone_device_data;
-		};
-		struct callback_head callback_head;
-	};
-	union {
-		atomic_t _mapcount;
-		unsigned int page_type;
-		unsigned int active;
-		int units;
-	};
-	atomic_t _refcount;
-	long: 64;
-};
-
-typedef struct cpumask cpumask_var_t[1];
-
-struct tracepoint_func {
-	void *func;
-	void *data;
-	int prio;
-};
-
-struct tracepoint {
-	const char *name;
-	struct static_key key;
-	int (*regfunc)();
-	void (*unregfunc)();
-	struct tracepoint_func *funcs;
-};
-
-struct idt_bits {
-	u16 ist: 3;
-	u16 zero: 5;
-	u16 type: 5;
-	u16 dpl: 2;
-	u16 p: 1;
-};
-
-struct gate_struct {
-	u16 offset_low;
-	u16 segment;
-	struct idt_bits bits;
-	u16 offset_middle;
-	u32 offset_high;
-	u32 reserved;
-};
-
-typedef struct gate_struct gate_desc;
-
-struct desc_ptr {
-	short unsigned int size;
-	long unsigned int address;
-} __attribute__((packed));
-
-struct cpuinfo_x86 {
-	__u8 x86;
-	__u8 x86_vendor;
-	__u8 x86_model;
-	__u8 x86_stepping;
-	int x86_tlbsize;
-	__u8 x86_virt_bits;
-	__u8 x86_phys_bits;
-	__u8 x86_coreid_bits;
-	__u8 cu_id;
-	__u32 extended_cpuid_level;
-	int cpuid_level;
-	union {
-		__u32 x86_capability[20];
-		long unsigned int x86_capability_alignment;
-	};
-	char x86_vendor_id[16];
-	char x86_model_id[64];
-	unsigned int x86_cache_size;
-	int x86_cache_alignment;
-	int x86_cache_max_rmid;
-	int x86_cache_occ_scale;
-	int x86_power;
-	long unsigned int loops_per_jiffy;
-	u16 x86_max_cores;
-	u16 apicid;
-	u16 initial_apicid;
-	u16 x86_clflush_size;
-	u16 booted_cores;
-	u16 phys_proc_id;
-	u16 logical_proc_id;
-	u16 cpu_core_id;
-	u16 cpu_die_id;
-	u16 logical_die_id;
-	u16 cpu_index;
-	u32 microcode;
-	u8 x86_cache_bits;
-	unsigned int initialized: 1;
-};
-
-struct seq_file___2;
-
-struct seq_operations {
-	void * (*start)(struct seq_file___2 *, loff_t *);
-	void (*stop)(struct seq_file___2 *, void *);
-	void * (*next)(struct seq_file___2 *, void *, loff_t *);
-	int (*show)(struct seq_file___2 *, void *);
-};
-
-struct x86_hw_tss {
-	u32 reserved1;
-	u64 sp0;
-	u64 sp1;
-	u64 sp2;
-	u64 reserved2;
-	u64 ist[7];
-	u32 reserved3;
-	u32 reserved4;
-	u16 reserved5;
-	u16 io_bitmap_base;
-} __attribute__((packed));
-
-struct entry_stack {
-	long unsigned int words[64];
-};
-
-struct entry_stack_page {
-	struct entry_stack stack;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct x86_io_bitmap {
-	u64 prev_sequence;
-	unsigned int prev_max;
-	long unsigned int bitmap[1025];
-	long unsigned int mapall[1025];
-};
-
-struct tss_struct {
-	struct x86_hw_tss x86_tss;
-	struct x86_io_bitmap io_bitmap;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct irq_stack {
-	char stack[16384];
-};
-
-struct fixed_percpu_data {
-	char gs_base[40];
-	long unsigned int stack_canary;
-};
-
-enum l1tf_mitigations {
-	L1TF_MITIGATION_OFF = 0,
-	L1TF_MITIGATION_FLUSH_NOWARN = 1,
-	L1TF_MITIGATION_FLUSH = 2,
-	L1TF_MITIGATION_FLUSH_NOSMT = 3,
-	L1TF_MITIGATION_FULL = 4,
-	L1TF_MITIGATION_FULL_FORCE = 5,
-};
-
-struct mpc_table {
-	char signature[4];
-	short unsigned int length;
-	char spec;
-	char checksum;
-	char oem[8];
-	char productid[12];
-	unsigned int oemptr;
-	short unsigned int oemsize;
-	short unsigned int oemcount;
-	unsigned int lapic;
-	unsigned int reserved;
-};
-
-struct mpc_cpu {
-	unsigned char type;
-	unsigned char apicid;
-	unsigned char apicver;
-	unsigned char cpuflag;
-	unsigned int cpufeature;
-	unsigned int featureflag;
-	unsigned int reserved[2];
-};
-
-struct mpc_bus {
-	unsigned char type;
-	unsigned char busid;
-	unsigned char bustype[6];
-};
-
-struct mpc_intsrc {
-	unsigned char type;
-	unsigned char irqtype;
-	short unsigned int irqflag;
-	unsigned char srcbus;
-	unsigned char srcbusirq;
-	unsigned char dstapic;
-	unsigned char dstirq;
-};
-
-struct x86_init_mpparse {
-	void (*mpc_record)(unsigned int);
-	void (*setup_ioapic_ids)();
-	int (*mpc_apic_id)(struct mpc_cpu *);
-	void (*smp_read_mpc_oem)(struct mpc_table *);
-	void (*mpc_oem_pci_bus)(struct mpc_bus *);
-	void (*mpc_oem_bus_info)(struct mpc_bus *, char *);
-	void (*find_smp_config)();
-	void (*get_smp_config)(unsigned int);
-};
-
-struct x86_init_resources {
-	void (*probe_roms)();
-	void (*reserve_resources)();
-	char * (*memory_setup)();
-};
-
-struct x86_init_irqs {
-	void (*pre_vector_init)();
-	void (*intr_init)();
-	void (*trap_init)();
-	void (*intr_mode_init)();
-};
-
-struct x86_init_oem {
-	void (*arch_setup)();
-	void (*banner)();
-};
-
-struct x86_init_paging {
-	void (*pagetable_init)();
-};
-
-struct x86_init_timers {
-	void (*setup_percpu_clockev)();
-	void (*timer_init)();
-	void (*wallclock_init)();
-};
-
-struct x86_init_iommu {
-	int (*iommu_init)();
-};
-
-struct x86_init_pci {
-	int (*arch_init)();
-	int (*init)();
-	void (*init_irq)();
-	void (*fixup_irqs)();
-};
-
-struct x86_hyper_init {
-	void (*init_platform)();
-	void (*guest_late_init)();
-	bool (*x2apic_available)();
-	void (*init_mem_mapping)();
-	void (*init_after_bootmem)();
-};
-
-struct x86_init_acpi {
-	void (*set_root_pointer)(u64);
-	u64 (*get_root_pointer)();
-	void (*reduced_hw_early_init)();
-};
-
-struct x86_init_ops {
-	struct x86_init_resources resources;
-	struct x86_init_mpparse mpparse;
-	struct x86_init_irqs irqs;
-	struct x86_init_oem oem;
-	struct x86_init_paging paging;
-	struct x86_init_timers timers;
-	struct x86_init_iommu iommu;
-	struct x86_init_pci pci;
-	struct x86_hyper_init hyper;
-	struct x86_init_acpi acpi;
-};
-
-struct x86_cpuinit_ops {
-	void (*setup_percpu_clockev)();
-	void (*early_percpu_clock_init)();
-	void (*fixup_cpu_id)(struct cpuinfo_x86 *, int);
-};
-
-struct x86_legacy_devices {
-	int pnpbios;
-};
-
-enum x86_legacy_i8042_state {
-	X86_LEGACY_I8042_PLATFORM_ABSENT = 0,
-	X86_LEGACY_I8042_FIRMWARE_ABSENT = 1,
-	X86_LEGACY_I8042_EXPECTED_PRESENT = 2,
-};
-
-struct x86_legacy_features {
-	enum x86_legacy_i8042_state i8042;
-	int rtc;
-	int warm_reset;
-	int no_vga;
-	int reserve_bios_regions;
-	struct x86_legacy_devices devices;
-};
-
-struct x86_hyper_runtime {
-	void (*pin_vcpu)(int);
-};
-
-struct x86_platform_ops {
-	long unsigned int (*calibrate_cpu)();
-	long unsigned int (*calibrate_tsc)();
-	void (*get_wallclock)(struct timespec64 *);
-	int (*set_wallclock)(const struct timespec64 *);
-	void (*iommu_shutdown)();
-	bool (*is_untracked_pat_range)(u64, u64);
-	void (*nmi_init)();
-	unsigned char (*get_nmi_reason)();
-	void (*save_sched_clock_state)();
-	void (*restore_sched_clock_state)();
-	void (*apic_post_init)();
-	struct x86_legacy_features legacy;
-	void (*set_legacy_features)();
-	struct x86_hyper_runtime hyper;
-};
-
-struct pci_dev;
-
-struct x86_msi_ops {
-	int (*setup_msi_irqs)(struct pci_dev *, int, int);
-	void (*teardown_msi_irq)(unsigned int);
-	void (*teardown_msi_irqs)(struct pci_dev *);
-	void (*restore_msi_irqs)(struct pci_dev *);
-};
-
-struct x86_apic_ops {
-	unsigned int (*io_apic_read)(unsigned int, unsigned int);
-	void (*restore)();
-};
-
-struct physid_mask {
-	long unsigned int mask[512];
-};
-
-typedef struct physid_mask physid_mask_t;
-
-struct qrwlock {
-	union {
-		atomic_t cnts;
-		struct {
-			u8 wlocked;
-			u8 __lstate[3];
-		};
-	};
-	arch_spinlock_t wait_lock;
-};
-
-typedef struct qrwlock arch_rwlock_t;
-
-typedef struct {
-	arch_rwlock_t raw_lock;
-} rwlock_t;
-
-struct rw_semaphore {
-	atomic_long_t count;
-	atomic_long_t owner;
-	struct optimistic_spin_queue osq;
-	raw_spinlock_t wait_lock;
-	struct list_head wait_list;
-};
-
-struct vdso_image {
-	void *data;
-	long unsigned int size;
-	long unsigned int alt;
-	long unsigned int alt_len;
-	long int sym_vvar_start;
-	long int sym_vvar_page;
-	long int sym_pvclock_page;
-	long int sym_hvclock_page;
-	long int sym_VDSO32_NOTE_MASK;
-	long int sym___kernel_sigreturn;
-	long int sym___kernel_rt_sigreturn;
-	long int sym___kernel_vsyscall;
-	long int sym_int80_landing_pad;
-};
-
-struct ldt_struct;
-
-typedef struct {
-	u64 ctx_id;
-	atomic64_t tlb_gen;
-	struct rw_semaphore ldt_usr_sem;
-	struct ldt_struct *ldt;
-	short unsigned int ia32_compat;
-	struct mutex lock;
-	void *vdso;
-	const struct vdso_image *vdso_image;
-	atomic_t perf_rdpmc_allowed;
-	u16 pkey_allocation_map;
-	s16 execute_only_pkey;
-} mm_context_t;
-
-struct fwnode_operations;
-
-struct device;
-
-struct fwnode_handle {
-	struct fwnode_handle *secondary;
-	const struct fwnode_operations *ops;
-	struct device *dev;
-};
-
-struct fwnode_reference_args;
-
-struct fwnode_endpoint;
-
-struct fwnode_operations {
-	struct fwnode_handle * (*get)(struct fwnode_handle *);
-	void (*put)(struct fwnode_handle *);
-	bool (*device_is_available)(const struct fwnode_handle *);
-	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
-	bool (*property_present)(const struct fwnode_handle *, const char *);
-	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
-	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
-	const char * (*get_name)(const struct fwnode_handle *);
-	const char * (*get_name_prefix)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
-	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
-	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
-	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
-	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
-	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
-	int (*add_links)(const struct fwnode_handle *, struct device *);
-};
-
-struct kref {
-	refcount_t refcount;
-};
-
-struct kset;
-
-struct kobj_type;
-
-struct kernfs_node;
-
-struct kobject {
-	const char *name;
-	struct list_head entry;
-	struct kobject *parent;
-	struct kset *kset;
-	struct kobj_type *ktype;
-	struct kernfs_node *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-enum dl_dev_state {
-	DL_DEV_NO_DRIVER = 0,
-	DL_DEV_PROBING = 1,
-	DL_DEV_DRIVER_BOUND = 2,
-	DL_DEV_UNBINDING = 3,
-};
-
-struct dev_links_info {
-	struct list_head suppliers;
-	struct list_head consumers;
-	struct list_head needs_suppliers;
-	struct list_head defer_sync;
-	bool need_for_probe;
-	enum dl_dev_state status;
-};
-
-struct pm_message {
-	int event;
-};
-
-typedef struct pm_message pm_message_t;
-
-struct wait_queue_head {
-	spinlock_t lock;
-	struct list_head head;
-};
-
-typedef struct wait_queue_head wait_queue_head_t;
-
-struct completion {
-	unsigned int done;
-	wait_queue_head_t wait;
-};
-
-struct work_struct;
-
-typedef void (*work_func_t)(struct work_struct *);
-
-struct work_struct {
-	atomic_long_t data;
-	struct list_head entry;
-	work_func_t func;
-};
-
-enum rpm_request {
-	RPM_REQ_NONE = 0,
-	RPM_REQ_IDLE = 1,
-	RPM_REQ_SUSPEND = 2,
-	RPM_REQ_AUTOSUSPEND = 3,
-	RPM_REQ_RESUME = 4,
-};
-
-enum rpm_status {
-	RPM_ACTIVE = 0,
-	RPM_RESUMING = 1,
-	RPM_SUSPENDED = 2,
-	RPM_SUSPENDING = 3,
-};
-
-struct wakeup_source;
-
-struct wake_irq;
-
-struct pm_subsys_data;
-
-struct dev_pm_qos;
-
-struct dev_pm_info {
-	pm_message_t power_state;
-	unsigned int can_wakeup: 1;
-	unsigned int async_suspend: 1;
-	bool in_dpm_list: 1;
-	bool is_prepared: 1;
-	bool is_suspended: 1;
-	bool is_noirq_suspended: 1;
-	bool is_late_suspended: 1;
-	bool no_pm: 1;
-	bool early_init: 1;
-	bool direct_complete: 1;
-	u32 driver_flags;
-	spinlock_t lock;
-	struct list_head entry;
-	struct completion completion;
-	struct wakeup_source *wakeup;
-	bool wakeup_path: 1;
-	bool syscore: 1;
-	bool no_pm_callbacks: 1;
-	unsigned int must_resume: 1;
-	unsigned int may_skip_resume: 1;
-	struct hrtimer suspend_timer;
-	long unsigned int timer_expires;
-	struct work_struct work;
-	wait_queue_head_t wait_queue;
-	struct wake_irq *wakeirq;
-	atomic_t usage_count;
-	atomic_t child_count;
-	unsigned int disable_depth: 3;
-	unsigned int idle_notification: 1;
-	unsigned int request_pending: 1;
-	unsigned int deferred_resume: 1;
-	unsigned int runtime_auto: 1;
-	bool ignore_children: 1;
-	unsigned int no_callbacks: 1;
-	unsigned int irq_safe: 1;
-	unsigned int use_autosuspend: 1;
-	unsigned int timer_autosuspends: 1;
-	unsigned int memalloc_noio: 1;
-	unsigned int links_count;
-	enum rpm_request request;
-	enum rpm_status runtime_status;
-	int runtime_error;
-	int autosuspend_delay;
-	u64 last_busy;
-	u64 active_time;
-	u64 suspended_time;
-	u64 accounting_timestamp;
-	struct pm_subsys_data *subsys_data;
-	void (*set_latency_tolerance)(struct device *, s32);
-	struct dev_pm_qos *qos;
-};
-
-struct dev_archdata {
-	void *iommu;
-};
-
-struct device_private;
-
-struct device_type;
-
-struct bus_type;
-
-struct device_driver;
-
-struct dev_pm_domain;
-
-struct irq_domain;
-
-struct dma_map_ops;
-
-struct device_dma_parameters;
-
-struct device_node;
-
-struct class;
-
-struct attribute_group;
-
-struct iommu_group;
-
-struct iommu_fwspec;
-
-struct iommu_param;
-
-struct device {
-	struct kobject kobj;
-	struct device *parent;
-	struct device_private *p;
-	const char *init_name;
-	const struct device_type *type;
-	struct bus_type *bus;
-	struct device_driver *driver;
-	void *platform_data;
-	void *driver_data;
-	struct mutex mutex;
-	struct dev_links_info links;
-	struct dev_pm_info power;
-	struct dev_pm_domain *pm_domain;
-	struct irq_domain *msi_domain;
-	struct list_head msi_list;
-	const struct dma_map_ops *dma_ops;
-	u64 *dma_mask;
-	u64 coherent_dma_mask;
-	u64 bus_dma_limit;
-	long unsigned int dma_pfn_offset;
-	struct device_dma_parameters *dma_parms;
-	struct list_head dma_pools;
-	struct dev_archdata archdata;
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	int numa_node;
-	dev_t devt;
-	u32 id;
-	spinlock_t devres_lock;
-	struct list_head devres_head;
-	struct class *class;
-	const struct attribute_group **groups;
-	void (*release)(struct device *);
-	struct iommu_group *iommu_group;
-	struct iommu_fwspec *iommu_fwspec;
-	struct iommu_param *iommu_param;
-	bool offline_disabled: 1;
-	bool offline: 1;
-	bool of_node_reused: 1;
-	bool state_synced: 1;
-};
-
-struct fwnode_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct fwnode_handle *local_fwnode;
-};
-
-struct fwnode_reference_args {
-	struct fwnode_handle *fwnode;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct vm_struct {
-	struct vm_struct *next;
-	void *addr;
-	long unsigned int size;
-	long unsigned int flags;
-	struct page **pages;
-	unsigned int nr_pages;
-	phys_addr_t phys_addr;
-	const void *caller;
-};
-
-struct real_mode_header {
-	u32 text_start;
-	u32 ro_end;
-	u32 trampoline_start;
-	u32 trampoline_header;
-	u32 trampoline_pgd;
-	u32 wakeup_start;
-	u32 wakeup_header;
-	u32 machine_real_restart_asm;
-	u32 machine_real_restart_seg;
-};
-
-enum fixed_addresses {
-	VSYSCALL_PAGE = 511,
-	FIX_DBGP_BASE = 512,
-	FIX_EARLYCON_MEM_BASE = 513,
-	FIX_OHCI1394_BASE = 514,
-	FIX_APIC_BASE = 515,
-	FIX_IO_APIC_BASE_0 = 516,
-	FIX_IO_APIC_BASE_END = 643,
-	__end_of_permanent_fixed_addresses = 644,
-	FIX_BTMAP_END = 1024,
-	FIX_BTMAP_BEGIN = 1535,
-	__end_of_fixed_addresses = 1536,
-};
-
-struct vm_userfaultfd_ctx {};
-
-struct anon_vma;
-
-struct vm_operations_struct;
-
-struct vm_area_struct {
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	struct vm_area_struct *vm_next;
-	struct vm_area_struct *vm_prev;
-	struct rb_node vm_rb;
-	long unsigned int rb_subtree_gap;
-	struct mm_struct *vm_mm;
-	pgprot_t vm_page_prot;
-	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
-	struct list_head anon_vma_chain;
-	struct anon_vma *anon_vma;
-	const struct vm_operations_struct *vm_ops;
-	long unsigned int vm_pgoff;
-	struct file *vm_file;
-	void *vm_private_data;
-	atomic_long_t swap_readahead_info;
-	struct mempolicy *vm_policy;
-	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
-};
-
-struct mm_rss_stat {
-	atomic_long_t count[4];
-};
-
-struct xol_area;
-
-struct uprobes_state {
-	struct xol_area *xol_area;
-};
-
-struct linux_binfmt;
-
-struct core_state;
-
-struct kioctx_table;
-
-struct user_namespace;
-
-struct mmu_notifier_mm;
-
-struct mm_struct {
-	struct {
-		struct vm_area_struct *mmap;
-		struct rb_root mm_rb;
-		u64 vmacache_seqnum;
-		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-		long unsigned int mmap_base;
-		long unsigned int mmap_legacy_base;
-		long unsigned int mmap_compat_base;
-		long unsigned int mmap_compat_legacy_base;
-		long unsigned int task_size;
-		long unsigned int highest_vm_end;
-		pgd_t *pgd;
-		atomic_t membarrier_state;
-		atomic_t mm_users;
-		atomic_t mm_count;
-		atomic_long_t pgtables_bytes;
-		int map_count;
-		spinlock_t page_table_lock;
-		struct rw_semaphore mmap_sem;
-		struct list_head mmlist;
-		long unsigned int hiwater_rss;
-		long unsigned int hiwater_vm;
-		long unsigned int total_vm;
-		long unsigned int locked_vm;
-		atomic64_t pinned_vm;
-		long unsigned int data_vm;
-		long unsigned int exec_vm;
-		long unsigned int stack_vm;
-		long unsigned int def_flags;
-		spinlock_t arg_lock;
-		long unsigned int start_code;
-		long unsigned int end_code;
-		long unsigned int start_data;
-		long unsigned int end_data;
-		long unsigned int start_brk;
-		long unsigned int brk;
-		long unsigned int start_stack;
-		long unsigned int arg_start;
-		long unsigned int arg_end;
-		long unsigned int env_start;
-		long unsigned int env_end;
-		long unsigned int saved_auxv[46];
-		struct mm_rss_stat rss_stat;
-		struct linux_binfmt *binfmt;
-		mm_context_t context;
-		long unsigned int flags;
-		struct core_state *core_state;
-		spinlock_t ioctx_lock;
-		struct kioctx_table *ioctx_table;
-		struct user_namespace *user_ns;
-		struct file *exe_file;
-		struct mmu_notifier_mm *mmu_notifier_mm;
-		atomic_t tlb_flush_pending;
-		bool tlb_flush_batched;
-		struct uprobes_state uprobes_state;
-		atomic_long_t hugetlb_usage;
-		struct work_struct async_put_work;
-	};
-	long unsigned int cpu_bitmap[0];
-};
-
-typedef struct {
-	struct seqcount seqcount;
-	spinlock_t lock;
-} seqlock_t;
-
-struct timer_list {
-	struct hlist_node entry;
-	long unsigned int expires;
-	void (*function)(struct timer_list *);
-	u32 flags;
-};
-
-typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
-
-struct notifier_block {
-	notifier_fn_t notifier_call;
-	struct notifier_block *next;
-	int priority;
-};
-
-struct blocking_notifier_head {
-	struct rw_semaphore rwsem;
-	struct notifier_block *head;
-};
-
-struct arch_uprobe_task {
-	long unsigned int saved_scratch_register;
-	unsigned int saved_trap_nr;
-	unsigned int saved_tf;
-};
-
-enum uprobe_task_state {
-	UTASK_RUNNING = 0,
-	UTASK_SSTEP = 1,
-	UTASK_SSTEP_ACK = 2,
-	UTASK_SSTEP_TRAPPED = 3,
-};
-
-struct uprobe;
-
-struct return_instance;
-
-struct uprobe_task {
-	enum uprobe_task_state state;
-	union {
-		struct {
-			struct arch_uprobe_task autask;
-			long unsigned int vaddr;
-		};
-		struct {
-			struct callback_head dup_xol_work;
-			long unsigned int dup_xol_addr;
-		};
-	};
-	struct uprobe *active_uprobe;
-	long unsigned int xol_vaddr;
-	struct return_instance *return_instances;
-	unsigned int depth;
-};
-
-struct return_instance {
-	struct uprobe *uprobe;
-	long unsigned int func;
-	long unsigned int stack;
-	long unsigned int orig_ret_vaddr;
-	bool chained;
-	struct return_instance *next;
-};
-
-struct xarray {
-	spinlock_t xa_lock;
-	gfp_t xa_flags;
-	void *xa_head;
-};
-
-typedef u32 errseq_t;
-
-struct address_space_operations;
-
-struct address_space {
-	struct inode *host;
-	struct xarray i_pages;
-	gfp_t gfp_mask;
-	atomic_t i_mmap_writable;
-	struct rb_root_cached i_mmap;
-	struct rw_semaphore i_mmap_rwsem;
-	long unsigned int nrpages;
-	long unsigned int nrexceptional;
-	long unsigned int writeback_index;
-	const struct address_space_operations *a_ops;
-	long unsigned int flags;
-	errseq_t wb_err;
-	spinlock_t private_lock;
-	struct list_head private_list;
-	void *private_data;
-};
-
-struct vmem_altmap {
-	const long unsigned int base_pfn;
-	const long unsigned int end_pfn;
-	const long unsigned int reserve;
-	long unsigned int free;
-	long unsigned int align;
-	long unsigned int alloc;
-};
-
-struct resource {
-	resource_size_t start;
-	resource_size_t end;
-	const char *name;
-	long unsigned int flags;
-	long unsigned int desc;
-	struct resource *parent;
-	struct resource *sibling;
-	struct resource *child;
-};
-
-struct percpu_ref;
-
-typedef void percpu_ref_func_t(struct percpu_ref *);
-
-struct percpu_ref {
-	atomic_long_t count;
-	long unsigned int percpu_count_ptr;
-	percpu_ref_func_t *release;
-	percpu_ref_func_t *confirm_switch;
-	bool force_atomic: 1;
-	bool allow_reinit: 1;
-	struct callback_head rcu;
-};
-
-enum memory_type {
-	MEMORY_DEVICE_PRIVATE = 1,
-	MEMORY_DEVICE_FS_DAX = 2,
-	MEMORY_DEVICE_DEVDAX = 3,
-	MEMORY_DEVICE_PCI_P2PDMA = 4,
-};
-
-struct dev_pagemap_ops;
-
-struct dev_pagemap {
-	struct vmem_altmap altmap;
-	struct resource res;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
-	struct completion done;
-	enum memory_type type;
-	unsigned int flags;
-	const struct dev_pagemap_ops *ops;
-};
-
-struct vfsmount;
-
-struct path {
-	struct vfsmount *mnt;
-	struct dentry *dentry;
-};
-
-enum rw_hint {
-	WRITE_LIFE_NOT_SET = 0,
-	WRITE_LIFE_NONE = 1,
-	WRITE_LIFE_SHORT = 2,
-	WRITE_LIFE_MEDIUM = 3,
-	WRITE_LIFE_LONG = 4,
-	WRITE_LIFE_EXTREME = 5,
-};
-
-enum pid_type {
-	PIDTYPE_PID = 0,
-	PIDTYPE_TGID = 1,
-	PIDTYPE_PGID = 2,
-	PIDTYPE_SID = 3,
-	PIDTYPE_MAX = 4,
-};
-
-struct fown_struct {
-	rwlock_t lock;
-	struct pid *pid;
-	enum pid_type pid_type;
-	kuid_t uid;
-	kuid_t euid;
-	int signum;
-};
-
-struct file_ra_state {
-	long unsigned int start;
-	unsigned int size;
-	unsigned int async_size;
-	unsigned int ra_pages;
-	unsigned int mmap_miss;
-	loff_t prev_pos;
-};
-
-struct file {
-	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
-	struct path f_path;
-	struct inode *f_inode;
-	const struct file_operations *f_op;
-	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
-	atomic_long_t f_count;
-	unsigned int f_flags;
-	fmode_t f_mode;
-	struct mutex f_pos_lock;
-	loff_t f_pos;
-	struct fown_struct f_owner;
-	const struct cred *f_cred;
-	struct file_ra_state f_ra;
-	u64 f_version;
-	void *f_security;
-	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
-	struct address_space *f_mapping;
-	errseq_t f_wb_err;
-};
-
-typedef unsigned int vm_fault_t;
-
-enum page_entry_size {
-	PE_SIZE_PTE = 0,
-	PE_SIZE_PMD = 1,
-	PE_SIZE_PUD = 2,
-};
-
-struct vm_fault;
-
-struct vm_operations_struct {
-	void (*open)(struct vm_area_struct *);
-	void (*close)(struct vm_area_struct *);
-	int (*split)(struct vm_area_struct *, long unsigned int);
-	int (*mremap)(struct vm_area_struct *);
-	vm_fault_t (*fault)(struct vm_fault *);
-	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
-	long unsigned int (*pagesize)(struct vm_area_struct *);
-	vm_fault_t (*page_mkwrite)(struct vm_fault *);
-	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
-	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
-	const char * (*name)(struct vm_area_struct *);
-	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
-	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
-	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
-};
-
-struct core_thread {
-	struct task_struct *task;
-	struct core_thread *next;
-};
-
-struct core_state {
-	atomic_t nr_threads;
-	struct core_thread dumper;
-	struct completion startup;
-};
-
-struct mem_cgroup;
-
-struct vm_fault {
-	struct vm_area_struct *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
-	pmd_t *pmd;
-	pud_t *pud;
-	pte_t orig_pte;
-	struct page *cow_page;
-	struct mem_cgroup *memcg;
-	struct page *page;
-	pte_t *pte;
-	spinlock_t *ptl;
-	pgtable_t prealloc_pte;
-};
-
-typedef struct {
-	u16 __softirq_pending;
-	unsigned int __nmi_count;
-	unsigned int apic_timer_irqs;
-	unsigned int irq_spurious_count;
-	unsigned int icr_read_retry_count;
-	unsigned int kvm_posted_intr_ipis;
-	unsigned int kvm_posted_intr_wakeup_ipis;
-	unsigned int kvm_posted_intr_nested_ipis;
-	unsigned int x86_platform_ipis;
-	unsigned int apic_perf_irqs;
-	unsigned int apic_irq_work_irqs;
-	unsigned int irq_resched_count;
-	unsigned int irq_call_count;
-	unsigned int irq_tlb_count;
-	unsigned int irq_thermal_count;
-	unsigned int irq_threshold_count;
-	unsigned int irq_deferred_error_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-} irq_cpustat_t;
-
-enum apic_intr_mode_id {
-	APIC_PIC = 0,
-	APIC_VIRTUAL_WIRE = 1,
-	APIC_VIRTUAL_WIRE_NO_CONFIG = 2,
-	APIC_SYMMETRIC_IO = 3,
-	APIC_SYMMETRIC_IO_NO_ROUTING = 4,
-};
-
-struct apic {
-	void (*eoi_write)(u32, u32);
-	void (*native_eoi_write)(u32, u32);
-	void (*write)(u32, u32);
-	u32 (*read)(u32);
-	void (*wait_icr_idle)();
-	u32 (*safe_wait_icr_idle)();
-	void (*send_IPI)(int, int);
-	void (*send_IPI_mask)(const struct cpumask *, int);
-	void (*send_IPI_mask_allbutself)(const struct cpumask *, int);
-	void (*send_IPI_allbutself)(int);
-	void (*send_IPI_all)(int);
-	void (*send_IPI_self)(int);
-	u32 dest_logical;
-	u32 disable_esr;
-	u32 irq_delivery_mode;
-	u32 irq_dest_mode;
-	u32 (*calc_dest_apicid)(unsigned int);
-	u64 (*icr_read)();
-	void (*icr_write)(u32, u32);
-	int (*probe)();
-	int (*acpi_madt_oem_check)(char *, char *);
-	int (*apic_id_valid)(u32);
-	int (*apic_id_registered)();
-	bool (*check_apicid_used)(physid_mask_t *, int);
-	void (*init_apic_ldr)();
-	void (*ioapic_phys_id_map)(physid_mask_t *, physid_mask_t *);
-	void (*setup_apic_routing)();
-	int (*cpu_present_to_apicid)(int);
-	void (*apicid_to_cpu_present)(int, physid_mask_t *);
-	int (*check_phys_apicid_present)(int);
-	int (*phys_pkg_id)(int, int);
-	u32 (*get_apic_id)(long unsigned int);
-	u32 (*set_apic_id)(unsigned int);
-	int (*wakeup_secondary_cpu)(int, long unsigned int);
-	void (*inquire_remote_apic)(int);
-	char *name;
-};
-
-struct smp_ops {
-	void (*smp_prepare_boot_cpu)();
-	void (*smp_prepare_cpus)(unsigned int);
-	void (*smp_cpus_done)(unsigned int);
-	void (*stop_other_cpus)(int);
-	void (*crash_stop_other_cpus)();
-	void (*smp_send_reschedule)(int);
-	int (*cpu_up)(unsigned int, struct task_struct *);
-	int (*cpu_disable)();
-	void (*cpu_die)(unsigned int);
-	void (*play_dead)();
-	void (*send_call_func_ipi)(const struct cpumask *);
-	void (*send_call_func_single_ipi)(int);
-};
-
-enum pcpu_fc {
-	PCPU_FC_AUTO = 0,
-	PCPU_FC_EMBED = 1,
-	PCPU_FC_PAGE = 2,
-	PCPU_FC_NR = 3,
-};
-
-struct free_area {
-	struct list_head free_list[4];
-	long unsigned int nr_free;
-};
-
-struct zone_padding {
-	char x[0];
-};
-
-enum numa_stat_item {
-	NUMA_HIT = 0,
-	NUMA_MISS = 1,
-	NUMA_FOREIGN = 2,
-	NUMA_INTERLEAVE_HIT = 3,
-	NUMA_LOCAL = 4,
-	NUMA_OTHER = 5,
-	NR_VM_NUMA_STAT_ITEMS = 6,
-};
-
-enum zone_stat_item {
-	NR_FREE_PAGES = 0,
-	NR_ZONE_LRU_BASE = 1,
-	NR_ZONE_INACTIVE_ANON = 1,
-	NR_ZONE_ACTIVE_ANON = 2,
-	NR_ZONE_INACTIVE_FILE = 3,
-	NR_ZONE_ACTIVE_FILE = 4,
-	NR_ZONE_UNEVICTABLE = 5,
-	NR_ZONE_WRITE_PENDING = 6,
-	NR_MLOCK = 7,
-	NR_PAGETABLE = 8,
-	NR_KERNEL_STACK_KB = 9,
-	NR_BOUNCE = 10,
-	NR_FREE_CMA_PAGES = 11,
-	NR_VM_ZONE_STAT_ITEMS = 12,
-};
-
-enum node_stat_item {
-	NR_LRU_BASE = 0,
-	NR_INACTIVE_ANON = 0,
-	NR_ACTIVE_ANON = 1,
-	NR_INACTIVE_FILE = 2,
-	NR_ACTIVE_FILE = 3,
-	NR_UNEVICTABLE = 4,
-	NR_SLAB_RECLAIMABLE = 5,
-	NR_SLAB_UNRECLAIMABLE = 6,
-	NR_ISOLATED_ANON = 7,
-	NR_ISOLATED_FILE = 8,
-	WORKINGSET_NODES = 9,
-	WORKINGSET_REFAULT = 10,
-	WORKINGSET_ACTIVATE = 11,
-	WORKINGSET_RESTORE = 12,
-	WORKINGSET_NODERECLAIM = 13,
-	NR_ANON_MAPPED = 14,
-	NR_FILE_MAPPED = 15,
-	NR_FILE_PAGES = 16,
-	NR_FILE_DIRTY = 17,
-	NR_WRITEBACK = 18,
-	NR_WRITEBACK_TEMP = 19,
-	NR_SHMEM = 20,
-	NR_SHMEM_THPS = 21,
-	NR_SHMEM_PMDMAPPED = 22,
-	NR_FILE_THPS = 23,
-	NR_FILE_PMDMAPPED = 24,
-	NR_ANON_THPS = 25,
-	NR_UNSTABLE_NFS = 26,
-	NR_VMSCAN_WRITE = 27,
-	NR_VMSCAN_IMMEDIATE = 28,
-	NR_DIRTIED = 29,
-	NR_WRITTEN = 30,
-	NR_KERNEL_MISC_RECLAIMABLE = 31,
-	NR_VM_NODE_STAT_ITEMS = 32,
-};
-
-struct zone_reclaim_stat {
-	long unsigned int recent_rotated[2];
-	long unsigned int recent_scanned[2];
-};
-
-struct lruvec {
-	struct list_head lists[5];
-	struct zone_reclaim_stat reclaim_stat;
-	atomic_long_t inactive_age;
-	long unsigned int refaults;
-	long unsigned int flags;
-};
-
-typedef unsigned int isolate_mode_t;
-
-struct per_cpu_pages {
-	int count;
-	int high;
-	int batch;
-	struct list_head lists[3];
-};
-
-struct per_cpu_pageset {
-	struct per_cpu_pages pcp;
-	s8 expire;
-	u16 vm_numa_stat_diff[6];
-	s8 stat_threshold;
-	s8 vm_stat_diff[12];
-};
-
-struct per_cpu_nodestat {
-	s8 stat_threshold;
-	s8 vm_node_stat_diff[32];
-};
-
-enum zone_type {
-	ZONE_DMA = 0,
-	ZONE_DMA32 = 1,
-	ZONE_NORMAL = 2,
-	ZONE_MOVABLE = 3,
-	__MAX_NR_ZONES = 4,
-};
-
-struct pglist_data;
-
-struct zone {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[4];
-	int node;
-	struct pglist_data *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[11];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	short: 16;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct zoneref {
-	struct zone *zone;
-	int zone_idx;
-};
-
-struct zonelist {
-	struct zoneref _zonerefs[257];
-};
-
-struct pglist_data {
-	struct zone node_zones[4];
-	struct zonelist node_zonelists[2];
-	int nr_zones;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_classzone_idx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_classzone_idx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[32];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct mem_section_usage {
-	long unsigned int subsection_map[1];
-	long unsigned int pageblock_flags[0];
-};
-
-struct mem_section {
-	long unsigned int section_mem_map;
-	struct mem_section_usage *usage;
-};
-
-struct shrink_control {
-	gfp_t gfp_mask;
-	int nid;
-	long unsigned int nr_to_scan;
-	long unsigned int nr_scanned;
-	struct mem_cgroup *memcg;
-};
-
-struct shrinker {
-	long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);
-	long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);
-	long int batch;
-	int seeks;
-	unsigned int flags;
-	struct list_head list;
-	atomic_long_t *nr_deferred;
-};
-
-struct dev_pagemap_ops {
-	void (*page_free)(struct page *);
-	void (*kill)(struct dev_pagemap *);
-	void (*cleanup)(struct dev_pagemap *);
-	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
-};
-
-struct pid_namespace;
-
-struct upid {
-	int nr;
-	struct pid_namespace *ns;
-};
-
-struct pid {
-	refcount_t count;
-	unsigned int level;
-	struct hlist_head tasks[4];
-	wait_queue_head_t wait_pidfd;
-	struct callback_head rcu;
-	struct upid numbers[1];
-};
-
-typedef struct {
-	gid_t val;
-} kgid_t;
-
-struct hrtimer_cpu_base;
-
-struct hrtimer_clock_base {
-	struct hrtimer_cpu_base *cpu_base;
-	unsigned int index;
-	clockid_t clockid;
-	seqcount_t seq;
-	struct hrtimer *running;
-	struct timerqueue_head active;
-	ktime_t (*get_time)();
-	ktime_t offset;
-};
-
-struct hrtimer_cpu_base {
-	raw_spinlock_t lock;
-	unsigned int cpu;
-	unsigned int active_bases;
-	unsigned int clock_was_set_seq;
-	unsigned int hres_active: 1;
-	unsigned int in_hrtirq: 1;
-	unsigned int hang_detected: 1;
-	unsigned int softirq_activated: 1;
-	unsigned int nr_events;
-	short unsigned int nr_retries;
-	short unsigned int nr_hangs;
-	unsigned int max_hang_time;
-	ktime_t expires_next;
-	struct hrtimer *next_timer;
-	ktime_t softirq_expires_next;
-	struct hrtimer *softirq_next_timer;
-	struct hrtimer_clock_base clock_base[8];
-};
-
-struct tick_device;
-
-union sigval {
-	int sival_int;
-	void *sival_ptr;
-};
-
-typedef union sigval sigval_t;
-
-union __sifields {
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-	} _kill;
-	struct {
-		__kernel_timer_t _tid;
-		int _overrun;
-		sigval_t _sigval;
-		int _sys_private;
-	} _timer;
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-		sigval_t _sigval;
-	} _rt;
-	struct {
-		__kernel_pid_t _pid;
-		__kernel_uid32_t _uid;
-		int _status;
-		__kernel_clock_t _utime;
-		__kernel_clock_t _stime;
-	} _sigchld;
-	struct {
-		void *_addr;
-		union {
-			short int _addr_lsb;
-			struct {
-				char _dummy_bnd[8];
-				void *_lower;
-				void *_upper;
-			} _addr_bnd;
-			struct {
-				char _dummy_pkey[8];
-				__u32 _pkey;
-			} _addr_pkey;
-		};
-	} _sigfault;
-	struct {
-		long int _band;
-		int _fd;
-	} _sigpoll;
-	struct {
-		void *_call_addr;
-		int _syscall;
-		unsigned int _arch;
-	} _sigsys;
-};
-
-struct kernel_siginfo {
-	struct {
-		int si_signo;
-		int si_errno;
-		int si_code;
-		union __sifields _sifields;
-	};
-};
-
-struct rseq {
-	__u32 cpu_id_start;
-	__u32 cpu_id;
-	union {
-		__u64 ptr64;
-		__u64 ptr;
-	} rseq_cs;
-	__u32 flags;
-	long: 32;
-	long: 64;
-};
-
-struct root_domain;
-
-struct rq;
-
-struct rq_flags;
-
-struct sched_class {
-	const struct sched_class *next;
-	void (*enqueue_task)(struct rq *, struct task_struct *, int);
-	void (*dequeue_task)(struct rq *, struct task_struct *, int);
-	void (*yield_task)(struct rq *);
-	bool (*yield_to_task)(struct rq *, struct task_struct *, bool);
-	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
-	struct task_struct * (*pick_next_task)(struct rq *);
-	void (*put_prev_task)(struct rq *, struct task_struct *);
-	void (*set_next_task)(struct rq *, struct task_struct *, bool);
-	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
-	int (*select_task_rq)(struct task_struct *, int, int, int);
-	void (*migrate_task_rq)(struct task_struct *, int);
-	void (*task_woken)(struct rq *, struct task_struct *);
-	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *);
-	void (*rq_online)(struct rq *);
-	void (*rq_offline)(struct rq *);
-	void (*task_tick)(struct rq *, struct task_struct *, int);
-	void (*task_fork)(struct task_struct *);
-	void (*task_dead)(struct task_struct *);
-	void (*switched_from)(struct rq *, struct task_struct *);
-	void (*switched_to)(struct rq *, struct task_struct *);
-	void (*prio_changed)(struct rq *, struct task_struct *, int);
-	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
-	void (*update_curr)(struct rq *);
-	void (*task_change_group)(struct task_struct *, int);
-};
-
-struct kernel_cap_struct {
-	__u32 cap[2];
-};
-
-typedef struct kernel_cap_struct kernel_cap_t;
-
-struct user_struct;
-
-struct group_info;
-
-struct cred {
-	atomic_t usage;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t suid;
-	kgid_t sgid;
-	kuid_t euid;
-	kgid_t egid;
-	kuid_t fsuid;
-	kgid_t fsgid;
-	unsigned int securebits;
-	kernel_cap_t cap_inheritable;
-	kernel_cap_t cap_permitted;
-	kernel_cap_t cap_effective;
-	kernel_cap_t cap_bset;
-	kernel_cap_t cap_ambient;
-	unsigned char jit_keyring;
-	struct key *session_keyring;
-	struct key *process_keyring;
-	struct key *thread_keyring;
-	struct key *request_key_auth;
-	void *security;
-	struct user_struct *user;
-	struct user_namespace *user_ns;
-	struct group_info *group_info;
-	union {
-		int non_rcu;
-		struct callback_head rcu;
-	};
-};
-
-struct io_cq;
-
-struct io_context {
-	atomic_long_t refcount;
-	atomic_t active_ref;
-	atomic_t nr_tasks;
-	spinlock_t lock;
-	short unsigned int ioprio;
-	int nr_batch_requests;
-	long unsigned int last_waited;
-	struct xarray icq_tree;
-	struct io_cq *icq_hint;
-	struct hlist_head icq_list;
-	struct work_struct release_work;
-};
-
-struct hlist_bl_node;
-
-struct hlist_bl_head {
-	struct hlist_bl_node *first;
-};
-
-struct hlist_bl_node {
-	struct hlist_bl_node *next;
-	struct hlist_bl_node **pprev;
-};
-
-struct lockref {
-	union {
-		__u64 lock_count;
-		struct {
-			spinlock_t lock;
-			int count;
-		};
-	};
-};
-
-struct qstr {
-	union {
-		struct {
-			u32 hash;
-			u32 len;
-		};
-		u64 hash_len;
-	};
-	const unsigned char *name;
-};
-
-struct dentry_stat_t {
-	long int nr_dentry;
-	long int nr_unused;
-	long int age_limit;
-	long int want_pages;
-	long int nr_negative;
-	long int dummy;
-};
-
-struct dentry_operations;
-
-struct dentry {
-	unsigned int d_flags;
-	seqcount_t d_seq;
-	struct hlist_bl_node d_hash;
-	struct dentry *d_parent;
-	struct qstr d_name;
-	struct inode *d_inode;
-	unsigned char d_iname[32];
-	struct lockref d_lockref;
-	const struct dentry_operations *d_op;
-	struct super_block *d_sb;
-	long unsigned int d_time;
-	void *d_fsdata;
-	union {
-		struct list_head d_lru;
-		wait_queue_head_t *d_wait;
-	};
-	struct list_head d_child;
-	struct list_head d_subdirs;
-	union {
-		struct hlist_node d_alias;
-		struct hlist_bl_node d_in_lookup_hash;
-		struct callback_head d_rcu;
-	} d_u;
-};
-
-struct posix_acl;
-
-struct inode_operations;
-
-struct file_lock_context;
-
-struct block_device;
-
-struct cdev;
-
-struct fsnotify_mark_connector;
-
-struct inode {
-	umode_t i_mode;
-	short unsigned int i_opflags;
-	kuid_t i_uid;
-	kgid_t i_gid;
-	unsigned int i_flags;
-	struct posix_acl *i_acl;
-	struct posix_acl *i_default_acl;
-	const struct inode_operations *i_op;
-	struct super_block *i_sb;
-	struct address_space *i_mapping;
-	void *i_security;
-	long unsigned int i_ino;
-	union {
-		const unsigned int i_nlink;
-		unsigned int __i_nlink;
-	};
-	dev_t i_rdev;
-	loff_t i_size;
-	struct timespec64 i_atime;
-	struct timespec64 i_mtime;
-	struct timespec64 i_ctime;
-	spinlock_t i_lock;
-	short unsigned int i_bytes;
-	u8 i_blkbits;
-	u8 i_write_hint;
-	blkcnt_t i_blocks;
-	long unsigned int i_state;
-	struct rw_semaphore i_rwsem;
-	long unsigned int dirtied_when;
-	long unsigned int dirtied_time_when;
-	struct hlist_node i_hash;
-	struct list_head i_io_list;
-	struct list_head i_lru;
-	struct list_head i_sb_list;
-	struct list_head i_wb_list;
-	union {
-		struct hlist_head i_dentry;
-		struct callback_head i_rcu;
-	};
-	atomic64_t i_version;
-	atomic_t i_count;
-	atomic_t i_dio_count;
-	atomic_t i_writecount;
-	atomic_t i_readcount;
-	union {
-		const struct file_operations *i_fop;
-		void (*free_inode)(struct inode *);
-	};
-	struct file_lock_context *i_flctx;
-	struct address_space i_data;
-	struct list_head i_devices;
-	union {
-		struct pipe_inode_info *i_pipe;
-		struct block_device *i_bdev;
-		struct cdev *i_cdev;
-		char *i_link;
-		unsigned int i_dir_seq;
-	};
-	__u32 i_generation;
-	__u32 i_fsnotify_mask;
-	struct fsnotify_mark_connector *i_fsnotify_marks;
-	void *i_private;
-};
-
-struct dentry_operations {
-	int (*d_revalidate)(struct dentry *, unsigned int);
-	int (*d_weak_revalidate)(struct dentry *, unsigned int);
-	int (*d_hash)(const struct dentry *, struct qstr *);
-	int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *);
-	int (*d_delete)(const struct dentry *);
-	int (*d_init)(struct dentry *);
-	void (*d_release)(struct dentry *);
-	void (*d_prune)(struct dentry *);
-	void (*d_iput)(struct dentry *, struct inode *);
-	char * (*d_dname)(struct dentry *, char *, int);
-	struct vfsmount * (*d_automount)(struct path *);
-	int (*d_manage)(const struct path *, bool);
-	struct dentry * (*d_real)(struct dentry *, const struct inode *);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct mtd_info;
-
-typedef long long int qsize_t;
-
-struct quota_format_type;
-
-struct mem_dqinfo {
-	struct quota_format_type *dqi_format;
-	int dqi_fmt_id;
-	struct list_head dqi_dirty_list;
-	long unsigned int dqi_flags;
-	unsigned int dqi_bgrace;
-	unsigned int dqi_igrace;
-	qsize_t dqi_max_spc_limit;
-	qsize_t dqi_max_ino_limit;
-	void *dqi_priv;
-};
-
-struct quota_format_ops;
-
-struct quota_info {
-	unsigned int flags;
-	struct rw_semaphore dqio_sem;
-	struct inode *files[3];
-	struct mem_dqinfo info[3];
-	const struct quota_format_ops *ops[3];
-};
-
-struct rcu_sync {
-	int gp_state;
-	int gp_count;
-	wait_queue_head_t gp_wait;
-	struct callback_head cb_head;
-};
-
-struct rcuwait {
-	struct task_struct *task;
-};
-
-struct percpu_rw_semaphore {
-	struct rcu_sync rss;
-	unsigned int *read_count;
-	struct rw_semaphore rw_sem;
-	struct rcuwait writer;
-	int readers_block;
-};
-
-struct sb_writers {
-	int frozen;
-	wait_queue_head_t wait_unfrozen;
-	struct percpu_rw_semaphore rw_sem[3];
-};
-
-typedef struct {
-	__u8 b[16];
-} uuid_t;
-
-struct list_lru_node;
-
-struct list_lru {
-	struct list_lru_node *node;
-};
-
-struct super_operations;
-
-struct dquot_operations;
-
-struct quotactl_ops;
-
-struct export_operations;
-
-struct xattr_handler;
-
-struct workqueue_struct;
-
-struct super_block {
-	struct list_head s_list;
-	dev_t s_dev;
-	unsigned char s_blocksize_bits;
-	long unsigned int s_blocksize;
-	loff_t s_maxbytes;
-	struct file_system_type *s_type;
-	const struct super_operations *s_op;
-	const struct dquot_operations *dq_op;
-	const struct quotactl_ops *s_qcop;
-	const struct export_operations *s_export_op;
-	long unsigned int s_flags;
-	long unsigned int s_iflags;
-	long unsigned int s_magic;
-	struct dentry *s_root;
-	struct rw_semaphore s_umount;
-	int s_count;
-	atomic_t s_active;
-	void *s_security;
-	const struct xattr_handler **s_xattr;
-	struct hlist_bl_head s_roots;
-	struct list_head s_mounts;
-	struct block_device *s_bdev;
-	struct backing_dev_info *s_bdi;
-	struct mtd_info *s_mtd;
-	struct hlist_node s_instances;
-	unsigned int s_quota_types;
-	struct quota_info s_dquot;
-	struct sb_writers s_writers;
-	void *s_fs_info;
-	u32 s_time_gran;
-	time64_t s_time_min;
-	time64_t s_time_max;
-	__u32 s_fsnotify_mask;
-	struct fsnotify_mark_connector *s_fsnotify_marks;
-	char s_id[32];
-	uuid_t s_uuid;
-	unsigned int s_max_links;
-	fmode_t s_mode;
-	struct mutex s_vfs_rename_mutex;
-	const char *s_subtype;
-	const struct dentry_operations *s_d_op;
-	int cleancache_poolid;
-	struct shrinker s_shrink;
-	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
-	int s_readonly_remount;
-	struct workqueue_struct *s_dio_done_wq;
-	struct hlist_head s_pins;
-	struct user_namespace *s_user_ns;
-	struct list_lru s_dentry_lru;
-	struct list_lru s_inode_lru;
-	struct callback_head rcu;
-	struct work_struct destroy_work;
-	struct mutex s_sync_lock;
-	int s_stack_depth;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_inode_list_lock;
-	struct list_head s_inodes;
-	spinlock_t s_inode_wblist_lock;
-	struct list_head s_inodes_wb;
-	long: 64;
-	long: 64;
-};
-
-struct kstat {
-	u32 result_mask;
-	umode_t mode;
-	unsigned int nlink;
-	uint32_t blksize;
-	u64 attributes;
-	u64 attributes_mask;
-	u64 ino;
-	dev_t dev;
-	dev_t rdev;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	struct timespec64 btime;
-	u64 blocks;
-};
-
-struct list_lru_one {
-	struct list_head list;
-	long int nr_items;
-};
-
-struct list_lru_node {
-	spinlock_t lock;
-	struct list_lru_one lru;
-	long int nr_items;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct fiemap_extent {
-	__u64 fe_logical;
-	__u64 fe_physical;
-	__u64 fe_length;
-	__u64 fe_reserved64[2];
-	__u32 fe_flags;
-	__u32 fe_reserved[3];
-};
-
-enum migrate_mode {
-	MIGRATE_ASYNC = 0,
-	MIGRATE_SYNC_LIGHT = 1,
-	MIGRATE_SYNC = 2,
-	MIGRATE_SYNC_NO_COPY = 3,
-};
-
-struct delayed_call {
-	void (*fn)(void *);
-	void *arg;
-};
-
-typedef struct {
-	__u8 b[16];
-} guid_t;
-
-struct request_queue;
-
-struct io_cq {
-	struct request_queue *q;
-	struct io_context *ioc;
-	union {
-		struct list_head q_node;
-		struct kmem_cache *__rcu_icq_cache;
-	};
-	union {
-		struct hlist_node ioc_node;
-		struct callback_head __rcu_head;
-	};
-	unsigned int flags;
-};
-
-struct files_stat_struct {
-	long unsigned int nr_files;
-	long unsigned int nr_free_files;
-	long unsigned int max_files;
-};
-
-struct inodes_stat_t {
-	long int nr_inodes;
-	long int nr_unused;
-	long int dummy[5];
-};
-
-struct kiocb {
-	struct file *ki_filp;
-	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb *, long int, long int);
-	void *private;
-	int ki_flags;
-	u16 ki_hint;
-	u16 ki_ioprio;
-	unsigned int ki_cookie;
-};
-
-struct iattr {
-	unsigned int ia_valid;
-	umode_t ia_mode;
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	loff_t ia_size;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct file *ia_file;
-};
-
-struct percpu_counter {
-	raw_spinlock_t lock;
-	s64 count;
-	struct list_head list;
-	s32 *counters;
-};
-
-typedef __kernel_uid32_t projid_t;
-
-typedef struct {
-	projid_t val;
-} kprojid_t;
-
-enum quota_type {
-	USRQUOTA = 0,
-	GRPQUOTA = 1,
-	PRJQUOTA = 2,
-};
-
-struct kqid {
-	union {
-		kuid_t uid;
-		kgid_t gid;
-		kprojid_t projid;
-	};
-	enum quota_type type;
-};
-
-struct mem_dqblk {
-	qsize_t dqb_bhardlimit;
-	qsize_t dqb_bsoftlimit;
-	qsize_t dqb_curspace;
-	qsize_t dqb_rsvspace;
-	qsize_t dqb_ihardlimit;
-	qsize_t dqb_isoftlimit;
-	qsize_t dqb_curinodes;
-	time64_t dqb_btime;
-	time64_t dqb_itime;
-};
-
-struct dquot {
-	struct hlist_node dq_hash;
-	struct list_head dq_inuse;
-	struct list_head dq_free;
-	struct list_head dq_dirty;
-	struct mutex dq_lock;
-	spinlock_t dq_dqb_lock;
-	atomic_t dq_count;
-	struct super_block *dq_sb;
-	struct kqid dq_id;
-	loff_t dq_off;
-	long unsigned int dq_flags;
-	struct mem_dqblk dq_dqb;
-};
-
-struct quota_format_type {
-	int qf_fmt_id;
-	const struct quota_format_ops *qf_ops;
-	struct module *qf_owner;
-	struct quota_format_type *qf_next;
-};
-
-struct dqstats {
-	long unsigned int stat[8];
-	struct percpu_counter counter[8];
-};
-
-struct quota_format_ops {
-	int (*check_quota_file)(struct super_block *, int);
-	int (*read_file_info)(struct super_block *, int);
-	int (*write_file_info)(struct super_block *, int);
-	int (*free_file_info)(struct super_block *, int);
-	int (*read_dqblk)(struct dquot *);
-	int (*commit_dqblk)(struct dquot *);
-	int (*release_dqblk)(struct dquot *);
-	int (*get_next_id)(struct super_block *, struct kqid *);
-};
-
-struct dquot_operations {
-	int (*write_dquot)(struct dquot *);
-	struct dquot * (*alloc_dquot)(struct super_block *, int);
-	void (*destroy_dquot)(struct dquot *);
-	int (*acquire_dquot)(struct dquot *);
-	int (*release_dquot)(struct dquot *);
-	int (*mark_dirty)(struct dquot *);
-	int (*write_info)(struct super_block *, int);
-	qsize_t * (*get_reserved_space)(struct inode *);
-	int (*get_projid)(struct inode *, kprojid_t *);
-	int (*get_inode_usage)(struct inode *, qsize_t *);
-	int (*get_next_id)(struct super_block *, struct kqid *);
-};
-
-struct qc_dqblk {
-	int d_fieldmask;
-	u64 d_spc_hardlimit;
-	u64 d_spc_softlimit;
-	u64 d_ino_hardlimit;
-	u64 d_ino_softlimit;
-	u64 d_space;
-	u64 d_ino_count;
-	s64 d_ino_timer;
-	s64 d_spc_timer;
-	int d_ino_warns;
-	int d_spc_warns;
-	u64 d_rt_spc_hardlimit;
-	u64 d_rt_spc_softlimit;
-	u64 d_rt_space;
-	s64 d_rt_spc_timer;
-	int d_rt_spc_warns;
-};
-
-struct qc_type_state {
-	unsigned int flags;
-	unsigned int spc_timelimit;
-	unsigned int ino_timelimit;
-	unsigned int rt_spc_timelimit;
-	unsigned int spc_warnlimit;
-	unsigned int ino_warnlimit;
-	unsigned int rt_spc_warnlimit;
-	long long unsigned int ino;
-	blkcnt_t blocks;
-	blkcnt_t nextents;
-};
-
-struct qc_state {
-	unsigned int s_incoredqs;
-	struct qc_type_state s_state[3];
-};
-
-struct qc_info {
-	int i_fieldmask;
-	unsigned int i_flags;
-	unsigned int i_spc_timelimit;
-	unsigned int i_ino_timelimit;
-	unsigned int i_rt_spc_timelimit;
-	unsigned int i_spc_warnlimit;
-	unsigned int i_ino_warnlimit;
-	unsigned int i_rt_spc_warnlimit;
-};
-
-struct quotactl_ops {
-	int (*quota_on)(struct super_block *, int, int, const struct path *);
-	int (*quota_off)(struct super_block *, int);
-	int (*quota_enable)(struct super_block *, unsigned int);
-	int (*quota_disable)(struct super_block *, unsigned int);
-	int (*quota_sync)(struct super_block *, int);
-	int (*set_info)(struct super_block *, int, struct qc_info *);
-	int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
-	int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *);
-	int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
-	int (*get_state)(struct super_block *, struct qc_state *);
-	int (*rm_xquota)(struct super_block *, unsigned int);
-};
-
-struct writeback_control;
-
-struct swap_info_struct;
-
-struct address_space_operations {
-	int (*writepage)(struct page *, struct writeback_control *);
-	int (*readpage)(struct file *, struct page *);
-	int (*writepages)(struct address_space *, struct writeback_control *);
-	int (*set_page_dirty)(struct page *);
-	int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);
-	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);
-	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
-	sector_t (*bmap)(struct address_space *, sector_t);
-	void (*invalidatepage)(struct page *, unsigned int, unsigned int);
-	int (*releasepage)(struct page *, gfp_t);
-	void (*freepage)(struct page *);
-	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
-	int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);
-	bool (*isolate_page)(struct page *, isolate_mode_t);
-	void (*putback_page)(struct page *);
-	int (*launder_page)(struct page *);
-	int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page *, bool *, bool *);
-	int (*error_remove_page)(struct address_space *, struct page *);
-	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
-	void (*swap_deactivate)(struct file *);
-};
-
-struct hd_struct;
-
-struct gendisk;
-
-struct block_device {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode *bd_inode;
-	struct super_block *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device *bd_contains;
-	unsigned int bd_block_size;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	int bd_invalidated;
-	struct gendisk *bd_disk;
-	struct request_queue *bd_queue;
-	struct backing_dev_info *bd_bdi;
-	struct list_head bd_list;
-	long unsigned int bd_private;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct fiemap_extent_info;
-
-struct inode_operations {
-	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
-	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
-	int (*permission)(struct inode *, int);
-	struct posix_acl * (*get_acl)(struct inode *, int);
-	int (*readlink)(struct dentry *, char *, int);
-	int (*create)(struct inode *, struct dentry *, umode_t, bool);
-	int (*link)(struct dentry *, struct inode *, struct dentry *);
-	int (*unlink)(struct inode *, struct dentry *);
-	int (*symlink)(struct inode *, struct dentry *, const char *);
-	int (*mkdir)(struct inode *, struct dentry *, umode_t);
-	int (*rmdir)(struct inode *, struct dentry *);
-	int (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
-	int (*setattr)(struct dentry *, struct iattr *);
-	int (*getattr)(const struct path *, struct kstat *, u32, unsigned int);
-	ssize_t (*listxattr)(struct dentry *, char *, size_t);
-	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
-	int (*update_time)(struct inode *, struct timespec64 *, int);
-	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode *, struct dentry *, umode_t);
-	int (*set_acl)(struct inode *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct file_lock_context {
-	spinlock_t flc_lock;
-	struct list_head flc_flock;
-	struct list_head flc_posix;
-	struct list_head flc_lease;
-};
-
-struct file_lock_operations {
-	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
-	void (*fl_release_private)(struct file_lock *);
-};
-
-struct nlm_lockowner;
-
-struct nfs_lock_info {
-	u32 state;
-	struct nlm_lockowner *owner;
-	struct list_head list;
-};
-
-struct nfs4_lock_state;
-
-struct nfs4_lock_info {
-	struct nfs4_lock_state *owner;
-};
-
-struct fasync_struct;
-
-struct lock_manager_operations;
-
-struct file_lock {
-	struct file_lock *fl_blocker;
-	struct list_head fl_list;
-	struct hlist_node fl_link;
-	struct list_head fl_blocked_requests;
-	struct list_head fl_blocked_member;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	unsigned int fl_pid;
-	int fl_link_cpu;
-	wait_queue_head_t fl_wait;
-	struct file *fl_file;
-	loff_t fl_start;
-	loff_t fl_end;
-	struct fasync_struct *fl_fasync;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	const struct file_lock_operations *fl_ops;
-	const struct lock_manager_operations *fl_lmops;
-	union {
-		struct nfs_lock_info nfs_fl;
-		struct nfs4_lock_info nfs4_fl;
-		struct {
-			struct list_head link;
-			int state;
-			unsigned int debug_id;
-		} afs;
-	} fl_u;
-};
-
-struct lock_manager_operations {
-	fl_owner_t (*lm_get_owner)(fl_owner_t);
-	void (*lm_put_owner)(fl_owner_t);
-	void (*lm_notify)(struct file_lock *);
-	int (*lm_grant)(struct file_lock *, int);
-	bool (*lm_break)(struct file_lock *);
-	int (*lm_change)(struct file_lock *, int, struct list_head *);
-	void (*lm_setup)(struct file_lock *, void **);
-};
-
-struct fasync_struct {
-	rwlock_t fa_lock;
-	int magic;
-	int fa_fd;
-	struct fasync_struct *fa_next;
-	struct file *fa_file;
-	struct callback_head fa_rcu;
-};
-
-struct kstatfs;
-
-struct super_operations {
-	struct inode * (*alloc_inode)(struct super_block *);
-	void (*destroy_inode)(struct inode *);
-	void (*free_inode)(struct inode *);
-	void (*dirty_inode)(struct inode *, int);
-	int (*write_inode)(struct inode *, struct writeback_control *);
-	int (*drop_inode)(struct inode *);
-	void (*evict_inode)(struct inode *);
-	void (*put_super)(struct super_block *);
-	int (*sync_fs)(struct super_block *, int);
-	int (*freeze_super)(struct super_block *);
-	int (*freeze_fs)(struct super_block *);
-	int (*thaw_super)(struct super_block *);
-	int (*unfreeze_fs)(struct super_block *);
-	int (*statfs)(struct dentry *, struct kstatfs *);
-	int (*remount_fs)(struct super_block *, int *, char *);
-	void (*umount_begin)(struct super_block *);
-	int (*show_options)(struct seq_file *, struct dentry *);
-	int (*show_devname)(struct seq_file *, struct dentry *);
-	int (*show_path)(struct seq_file *, struct dentry *);
-	int (*show_stats)(struct seq_file *, struct dentry *);
-	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
-	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
-	struct dquot ** (*get_dquots)(struct inode *);
-	int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);
-	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
-	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
-};
-
-struct iomap;
-
-struct inode___2;
-
-struct dentry___2;
-
-struct fid;
-
-struct iattr___2;
-
-struct export_operations {
-	int (*encode_fh)(struct inode___2 *, __u32 *, int *, struct inode___2 *);
-	struct dentry___2 * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
-	struct dentry___2 * (*fh_to_parent)(struct super_block *, struct fid *, int, int);
-	int (*get_name)(struct dentry___2 *, char *, struct dentry___2 *);
-	struct dentry___2 * (*get_parent)(struct dentry___2 *);
-	int (*commit_metadata)(struct inode___2 *);
-	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
-	int (*map_blocks)(struct inode___2 *, loff_t, u64, struct iomap *, bool, u32 *);
-	int (*commit_blocks)(struct inode___2 *, struct iomap *, int, struct iattr___2 *);
-};
-
-struct xattr_handler {
-	const char *name;
-	const char *prefix;
-	int flags;
-	bool (*list)(struct dentry *);
-	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
-	int (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
-};
-
-struct fiemap_extent_info {
-	unsigned int fi_flags;
-	unsigned int fi_extents_mapped;
-	unsigned int fi_extents_max;
-	struct fiemap_extent *fi_extents_start;
-};
-
-typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
-
-struct dir_context {
-	filldir_t actor;
-	loff_t pos;
-};
-
-struct fs_parameter_spec;
-
-struct fs_parameter_enum;
-
-struct fs_parameter_description {
-	const char name[16];
-	const struct fs_parameter_spec *specs;
-	const struct fs_parameter_enum *enums;
-};
-
-struct attribute {
-	const char *name;
-	umode_t mode;
-};
-
-struct kobj_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
-};
-
-typedef void compound_page_dtor(struct page *);
-
-enum vm_event_item {
-	PGPGIN = 0,
-	PGPGOUT = 1,
-	PSWPIN = 2,
-	PSWPOUT = 3,
-	PGALLOC_DMA = 4,
-	PGALLOC_DMA32 = 5,
-	PGALLOC_NORMAL = 6,
-	PGALLOC_MOVABLE = 7,
-	ALLOCSTALL_DMA = 8,
-	ALLOCSTALL_DMA32 = 9,
-	ALLOCSTALL_NORMAL = 10,
-	ALLOCSTALL_MOVABLE = 11,
-	PGSCAN_SKIP_DMA = 12,
-	PGSCAN_SKIP_DMA32 = 13,
-	PGSCAN_SKIP_NORMAL = 14,
-	PGSCAN_SKIP_MOVABLE = 15,
-	PGFREE = 16,
-	PGACTIVATE = 17,
-	PGDEACTIVATE = 18,
-	PGLAZYFREE = 19,
-	PGFAULT = 20,
-	PGMAJFAULT = 21,
-	PGLAZYFREED = 22,
-	PGREFILL = 23,
-	PGSTEAL_KSWAPD = 24,
-	PGSTEAL_DIRECT = 25,
-	PGSCAN_KSWAPD = 26,
-	PGSCAN_DIRECT = 27,
-	PGSCAN_DIRECT_THROTTLE = 28,
-	PGSCAN_ZONE_RECLAIM_FAILED = 29,
-	PGINODESTEAL = 30,
-	SLABS_SCANNED = 31,
-	KSWAPD_INODESTEAL = 32,
-	KSWAPD_LOW_WMARK_HIT_QUICKLY = 33,
-	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 34,
-	PAGEOUTRUN = 35,
-	PGROTATED = 36,
-	DROP_PAGECACHE = 37,
-	DROP_SLAB = 38,
-	OOM_KILL = 39,
-	PGMIGRATE_SUCCESS = 40,
-	PGMIGRATE_FAIL = 41,
-	COMPACTMIGRATE_SCANNED = 42,
-	COMPACTFREE_SCANNED = 43,
-	COMPACTISOLATED = 44,
-	COMPACTSTALL = 45,
-	COMPACTFAIL = 46,
-	COMPACTSUCCESS = 47,
-	KCOMPACTD_WAKE = 48,
-	KCOMPACTD_MIGRATE_SCANNED = 49,
-	KCOMPACTD_FREE_SCANNED = 50,
-	HTLB_BUDDY_PGALLOC = 51,
-	HTLB_BUDDY_PGALLOC_FAIL = 52,
-	UNEVICTABLE_PGCULLED = 53,
-	UNEVICTABLE_PGSCANNED = 54,
-	UNEVICTABLE_PGRESCUED = 55,
-	UNEVICTABLE_PGMLOCKED = 56,
-	UNEVICTABLE_PGMUNLOCKED = 57,
-	UNEVICTABLE_PGCLEARED = 58,
-	UNEVICTABLE_PGSTRANDED = 59,
-	SWAP_RA = 60,
-	SWAP_RA_HIT = 61,
-	NR_VM_EVENT_ITEMS = 62,
-};
-
-struct vm_event_state {
-	long unsigned int event[62];
-};
-
-enum memblock_flags {
-	MEMBLOCK_NONE = 0,
-	MEMBLOCK_HOTPLUG = 1,
-	MEMBLOCK_MIRROR = 2,
-	MEMBLOCK_NOMAP = 4,
-};
-
-struct memblock_region {
-	phys_addr_t base;
-	phys_addr_t size;
-	enum memblock_flags flags;
-	int nid;
-};
-
-struct memblock_type {
-	long unsigned int cnt;
-	long unsigned int max;
-	phys_addr_t total_size;
-	struct memblock_region *regions;
-	char *name;
-};
-
-struct memblock {
-	bool bottom_up;
-	phys_addr_t current_limit;
-	struct memblock_type memory;
-	struct memblock_type reserved;
-};
-
-struct debug_store {
-	u64 bts_buffer_base;
-	u64 bts_index;
-	u64 bts_absolute_maximum;
-	u64 bts_interrupt_threshold;
-	u64 pebs_buffer_base;
-	u64 pebs_index;
-	u64 pebs_absolute_maximum;
-	u64 pebs_interrupt_threshold;
-	u64 pebs_event_reset[12];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct debug_store_buffers {
-	char bts_buffer[65536];
-	char pebs_buffer[65536];
-};
-
-struct cea_exception_stacks {
-	char DF_stack_guard[4096];
-	char DF_stack[4096];
-	char NMI_stack_guard[4096];
-	char NMI_stack[4096];
-	char DB2_stack_guard[4096];
-	char DB2_stack[4096];
-	char DB1_stack_guard[4096];
-	char DB1_stack[4096];
-	char DB_stack_guard[4096];
-	char DB_stack[4096];
-	char MCE_stack_guard[4096];
-	char MCE_stack[4096];
-	char IST_top_guard[4096];
-};
-
-struct cpu_entry_area {
-	char gdt[4096];
-	struct entry_stack_page entry_stack_page;
-	struct tss_struct tss;
-	struct cea_exception_stacks estacks;
-	struct debug_store cpu_debug_store;
-	struct debug_store_buffers cpu_debug_buffers;
-};
-
-struct gdt_page {
-	struct desc_struct gdt[16];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tlb_context {
-	u64 ctx_id;
-	u64 tlb_gen;
-};
-
-struct tlb_state {
-	struct mm_struct *loaded_mm;
-	union {
-		struct mm_struct *last_user_mm;
-		long unsigned int last_user_mm_ibpb;
-	};
-	u16 loaded_mm_asid;
-	u16 next_asid;
-	bool is_lazy;
-	bool invalidate_other;
-	short unsigned int user_pcid_flush_mask;
-	long unsigned int cr4;
-	struct tlb_context ctxs[6];
-};
-
-enum e820_type {
-	E820_TYPE_RAM = 1,
-	E820_TYPE_RESERVED = 2,
-	E820_TYPE_ACPI = 3,
-	E820_TYPE_NVS = 4,
-	E820_TYPE_UNUSABLE = 5,
-	E820_TYPE_PMEM = 7,
-	E820_TYPE_PRAM = 12,
-	E820_TYPE_SOFT_RESERVED = 4026531839,
-	E820_TYPE_RESERVED_KERN = 128,
-};
-
-struct e820_entry {
-	u64 addr;
-	u64 size;
-	enum e820_type type;
-} __attribute__((packed));
-
-struct e820_table {
-	__u32 nr_entries;
-	struct e820_entry entries[320];
-} __attribute__((packed));
-
-struct boot_params_to_save {
-	unsigned int start;
-	unsigned int len;
-};
-
-struct idr {
-	struct xarray idr_rt;
-	unsigned int idr_base;
-	unsigned int idr_next;
-};
-
-struct kernfs_root;
-
-struct kernfs_elem_dir {
-	long unsigned int subdirs;
-	struct rb_root children;
-	struct kernfs_root *root;
-};
-
-struct kernfs_syscall_ops;
-
-struct kernfs_root {
-	struct kernfs_node *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
-};
-
-struct kernfs_elem_symlink {
-	struct kernfs_node *target_kn;
-};
-
-struct kernfs_ops;
-
-struct kernfs_open_node;
-
-struct kernfs_elem_attr {
-	const struct kernfs_ops *ops;
-	struct kernfs_open_node *open;
-	loff_t size;
-	struct kernfs_node *notify_next;
-};
-
-struct kernfs_iattrs;
-
-struct kernfs_node {
-	atomic_t count;
-	atomic_t active;
-	struct kernfs_node *parent;
-	const char *name;
-	struct rb_node rb;
-	const void *ns;
-	unsigned int hash;
-	union {
-		struct kernfs_elem_dir dir;
-		struct kernfs_elem_symlink symlink;
-		struct kernfs_elem_attr attr;
-	};
-	void *priv;
-	u64 id;
-	short unsigned int flags;
-	umode_t mode;
-	struct kernfs_iattrs *iattr;
-};
-
-struct kernfs_open_file;
-
-struct kernfs_ops {
-	int (*open)(struct kernfs_open_file *);
-	void (*release)(struct kernfs_open_file *);
-	int (*seq_show)(struct seq_file *, void *);
-	void * (*seq_start)(struct seq_file *, loff_t *);
-	void * (*seq_next)(struct seq_file *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file *, void *);
-	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
-	size_t atomic_write_len;
-	bool prealloc;
-	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
-	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
-};
-
-struct kernfs_syscall_ops {
-	int (*show_options)(struct seq_file *, struct kernfs_root *);
-	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node *);
-	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
-	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
-};
-
-struct kernfs_open_file {
-	struct kernfs_node *kn;
-	struct file *file;
-	struct seq_file *seq_file;
-	void *priv;
-	struct mutex mutex;
-	struct mutex prealloc_mutex;
-	int event;
-	struct list_head list;
-	char *prealloc_buf;
-	size_t atomic_write_len;
-	bool mmapped: 1;
-	bool released: 1;
-	const struct vm_operations_struct *vm_ops;
-};
-
-enum kobj_ns_type {
-	KOBJ_NS_TYPE_NONE = 0,
-	KOBJ_NS_TYPE_NET = 1,
-	KOBJ_NS_TYPES = 2,
-};
-
-struct sock;
-
-struct kobj_ns_type_operations {
-	enum kobj_ns_type type;
-	bool (*current_may_mount)();
-	void * (*grab_current_ns)();
-	const void * (*netlink_ns)(struct sock *);
-	const void * (*initial_ns)();
-	void (*drop_ns)(void *);
-};
-
-struct bin_attribute;
-
-struct attribute_group {
-	const char *name;
-	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
-	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
-	struct attribute **attrs;
-	struct bin_attribute **bin_attrs;
-};
-
-struct bin_attribute {
-	struct attribute attr;
-	size_t size;
-	void *private;
-	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
-	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
-};
-
-struct sysfs_ops {
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
-};
-
-struct kset_uevent_ops;
-
-struct kset {
-	struct list_head list;
-	spinlock_t list_lock;
-	struct kobject kobj;
-	const struct kset_uevent_ops *uevent_ops;
-};
-
-struct kobj_type {
-	void (*release)(struct kobject *);
-	const struct sysfs_ops *sysfs_ops;
-	struct attribute **default_attrs;
-	const struct attribute_group **default_groups;
-	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
-	const void * (*namespace)(struct kobject *);
-	void (*get_ownership)(struct kobject *, kuid_t *, kgid_t *);
-};
-
-struct kobj_uevent_env {
-	char *argv[3];
-	char *envp[32];
-	int envp_idx;
-	char buf[2048];
-	int buflen;
-};
-
-struct kset_uevent_ops {
-	int (* const filter)(struct kset *, struct kobject *);
-	const char * (* const name)(struct kset *, struct kobject *);
-	int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);
-};
-
-struct dev_pm_ops {
-	int (*prepare)(struct device *);
-	void (*complete)(struct device *);
-	int (*suspend)(struct device *);
-	int (*resume)(struct device *);
-	int (*freeze)(struct device *);
-	int (*thaw)(struct device *);
-	int (*poweroff)(struct device *);
-	int (*restore)(struct device *);
-	int (*suspend_late)(struct device *);
-	int (*resume_early)(struct device *);
-	int (*freeze_late)(struct device *);
-	int (*thaw_early)(struct device *);
-	int (*poweroff_late)(struct device *);
-	int (*restore_early)(struct device *);
-	int (*suspend_noirq)(struct device *);
-	int (*resume_noirq)(struct device *);
-	int (*freeze_noirq)(struct device *);
-	int (*thaw_noirq)(struct device *);
-	int (*poweroff_noirq)(struct device *);
-	int (*restore_noirq)(struct device *);
-	int (*runtime_suspend)(struct device *);
-	int (*runtime_resume)(struct device *);
-	int (*runtime_idle)(struct device *);
-};
-
-struct pm_subsys_data {
-	spinlock_t lock;
-	unsigned int refcount;
-	struct list_head clock_list;
-};
-
-struct wakeup_source {
-	const char *name;
-	int id;
-	struct list_head entry;
-	spinlock_t lock;
-	struct wake_irq *wakeirq;
-	struct timer_list timer;
-	long unsigned int timer_expires;
-	ktime_t total_time;
-	ktime_t max_time;
-	ktime_t last_time;
-	ktime_t start_prevent_time;
-	ktime_t prevent_sleep_time;
-	long unsigned int event_count;
-	long unsigned int active_count;
-	long unsigned int relax_count;
-	long unsigned int expire_count;
-	long unsigned int wakeup_count;
-	struct device *dev;
-	bool active: 1;
-	bool autosleep_enabled: 1;
-};
-
-struct dev_pm_domain {
-	struct dev_pm_ops ops;
-	int (*start)(struct device *);
-	void (*detach)(struct device *, bool);
-	int (*activate)(struct device *);
-	void (*sync)(struct device *);
-	void (*dismiss)(struct device *);
-};
-
-struct ratelimit_state {
-	raw_spinlock_t lock;
-	int interval;
-	int burst;
-	int printed;
-	int missed;
-	long unsigned int begin;
-	long unsigned int flags;
-};
-
-struct iommu_ops;
-
-struct subsys_private;
-
-struct bus_type {
-	const char *name;
-	const char *dev_name;
-	struct device *dev_root;
-	const struct attribute_group **bus_groups;
-	const struct attribute_group **dev_groups;
-	const struct attribute_group **drv_groups;
-	int (*match)(struct device *, struct device_driver *);
-	int (*uevent)(struct device *, struct kobj_uevent_env *);
-	int (*probe)(struct device *);
-	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
-	void (*shutdown)(struct device *);
-	int (*online)(struct device *);
-	int (*offline)(struct device *);
-	int (*suspend)(struct device *, pm_message_t);
-	int (*resume)(struct device *);
-	int (*num_vf)(struct device *);
-	int (*dma_configure)(struct device *);
-	const struct dev_pm_ops *pm;
-	const struct iommu_ops *iommu_ops;
-	struct subsys_private *p;
-	struct lock_class_key lock_key;
-	bool need_parent_lock;
-};
-
-enum probe_type {
-	PROBE_DEFAULT_STRATEGY = 0,
-	PROBE_PREFER_ASYNCHRONOUS = 1,
-	PROBE_FORCE_SYNCHRONOUS = 2,
-};
-
-struct of_device_id;
-
-struct acpi_device_id;
-
-struct driver_private;
-
-struct device_driver {
-	const char *name;
-	struct bus_type *bus;
-	struct module *owner;
-	const char *mod_name;
-	bool suppress_bind_attrs;
-	enum probe_type probe_type;
-	const struct of_device_id *of_match_table;
-	const struct acpi_device_id *acpi_match_table;
-	int (*probe)(struct device *);
-	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
-	void (*shutdown)(struct device *);
-	int (*suspend)(struct device *, pm_message_t);
-	int (*resume)(struct device *);
-	const struct attribute_group **groups;
-	const struct attribute_group **dev_groups;
-	const struct dev_pm_ops *pm;
-	void (*coredump)(struct device *);
-	struct driver_private *p;
-};
-
-enum iommu_cap {
-	IOMMU_CAP_CACHE_COHERENCY = 0,
-	IOMMU_CAP_INTR_REMAP = 1,
-	IOMMU_CAP_NOEXEC = 2,
-};
-
-enum iommu_attr {
-	DOMAIN_ATTR_GEOMETRY = 0,
-	DOMAIN_ATTR_PAGING = 1,
-	DOMAIN_ATTR_WINDOWS = 2,
-	DOMAIN_ATTR_FSL_PAMU_STASH = 3,
-	DOMAIN_ATTR_FSL_PAMU_ENABLE = 4,
-	DOMAIN_ATTR_FSL_PAMUV1 = 5,
-	DOMAIN_ATTR_NESTING = 6,
-	DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,
-	DOMAIN_ATTR_MAX = 8,
-};
-
-enum iommu_dev_features {
-	IOMMU_DEV_FEAT_AUX = 0,
-	IOMMU_DEV_FEAT_SVA = 1,
-};
-
-struct iommu_domain;
-
-struct iommu_iotlb_gather;
-
-struct iommu_resv_region;
-
-struct of_phandle_args;
-
-struct iommu_sva;
-
-struct iommu_fault_event;
-
-struct iommu_page_response;
-
-struct iommu_cache_invalidate_info;
-
-struct iommu_gpasid_bind_data;
-
-struct iommu_ops {
-	bool (*capable)(enum iommu_cap);
-	struct iommu_domain * (*domain_alloc)(unsigned int);
-	void (*domain_free)(struct iommu_domain *);
-	int (*attach_dev)(struct iommu_domain *, struct device *);
-	void (*detach_dev)(struct iommu_domain *, struct device *);
-	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	void (*flush_iotlb_all)(struct iommu_domain *);
-	void (*iotlb_sync_map)(struct iommu_domain *);
-	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
-	int (*add_device)(struct device *);
-	void (*remove_device)(struct device *);
-	struct iommu_group * (*device_group)(struct device *);
-	int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	void (*get_resv_regions)(struct device *, struct list_head *);
-	void (*put_resv_regions)(struct device *, struct list_head *);
-	void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
-	int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
-	void (*domain_window_disable)(struct iommu_domain *, u32);
-	int (*of_xlate)(struct device *, struct of_phandle_args *);
-	bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
-	bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
-	bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
-	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
-	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
-	int (*aux_attach_dev)(struct iommu_domain *, struct device *);
-	void (*aux_detach_dev)(struct iommu_domain *, struct device *);
-	int (*aux_get_pasid)(struct iommu_domain *, struct device *);
-	struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
-	void (*sva_unbind)(struct iommu_sva *);
-	int (*sva_get_pasid)(struct iommu_sva *);
-	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
-	int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
-	int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
-	int (*sva_unbind_gpasid)(struct device *, int);
-	long unsigned int pgsize_bitmap;
-};
-
-struct device_type {
-	const char *name;
-	const struct attribute_group **groups;
-	int (*uevent)(struct device *, struct kobj_uevent_env *);
-	char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *);
-	void (*release)(struct device *);
-	const struct dev_pm_ops *pm;
-};
-
-struct of_device_id {
-	char name[32];
-	char type[32];
-	char compatible[128];
-	const void *data;
-};
-
-typedef long unsigned int kernel_ulong_t;
-
-struct acpi_device_id {
-	__u8 id[9];
-	kernel_ulong_t driver_data;
-	__u32 cls;
-	__u32 cls_msk;
-};
-
-struct class {
-	const char *name;
-	struct module *owner;
-	const struct attribute_group **class_groups;
-	const struct attribute_group **dev_groups;
-	struct kobject *dev_kobj;
-	int (*dev_uevent)(struct device *, struct kobj_uevent_env *);
-	char * (*devnode)(struct device *, umode_t *);
-	void (*class_release)(struct class *);
-	void (*dev_release)(struct device *);
-	int (*shutdown_pre)(struct device *);
-	const struct kobj_ns_type_operations *ns_type;
-	const void * (*namespace)(struct device *);
-	void (*get_ownership)(struct device *, kuid_t *, kgid_t *);
-	const struct dev_pm_ops *pm;
-	struct subsys_private *p;
-};
-
-struct device_dma_parameters {
-	unsigned int max_segment_size;
-	long unsigned int segment_boundary_mask;
-};
-
-enum dma_data_direction {
-	DMA_BIDIRECTIONAL = 0,
-	DMA_TO_DEVICE = 1,
-	DMA_FROM_DEVICE = 2,
-	DMA_NONE = 3,
-};
-
-struct sg_table;
-
-struct scatterlist;
-
-struct dma_map_ops {
-	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);
-	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
-	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
-	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
-	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
-	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
-	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
-	int (*dma_supported)(struct device *, u64);
-	u64 (*get_required_mask)(struct device *);
-	size_t (*max_mapping_size)(struct device *);
-	long unsigned int (*get_merge_boundary)(struct device *);
-};
-
-struct node {
-	struct device dev;
-	struct list_head access_list;
-};
-
-enum cpuhp_smt_control {
-	CPU_SMT_ENABLED = 0,
-	CPU_SMT_DISABLED = 1,
-	CPU_SMT_FORCE_DISABLED = 2,
-	CPU_SMT_NOT_SUPPORTED = 3,
-	CPU_SMT_NOT_IMPLEMENTED = 4,
-};
-
-struct cpu_signature {
-	unsigned int sig;
-	unsigned int pf;
-	unsigned int rev;
-};
-
-struct ucode_cpu_info {
-	struct cpu_signature cpu_sig;
-	int valid;
-	void *mc;
-};
-
-typedef long unsigned int pto_T__;
-
-struct kobj_attribute___2;
-
-struct file_system_type___2;
-
-struct atomic_notifier_head___2;
-
-typedef s32 int32_t;
-
-typedef long unsigned int irq_hw_number_t;
-
-struct kernel_symbol {
-	int value_offset;
-	int name_offset;
-	int namespace_offset;
-};
-
-typedef int (*initcall_t)();
-
-struct obs_kernel_param {
-	const char *str;
-	int (*setup_func)(char *);
-	int early;
-};
-
-enum ftrace_dump_mode {
-	DUMP_NONE = 0,
-	DUMP_ALL = 1,
-	DUMP_ORIG = 2,
-};
-
-struct bug_entry {
-	int bug_addr_disp;
-	int file_disp;
-	short unsigned int line;
-	short unsigned int flags;
-};
-
-struct pollfd {
-	int fd;
-	short int events;
-	short int revents;
-};
-
-typedef const int tracepoint_ptr_t;
-
-struct bpf_raw_event_map {
-	struct tracepoint *tp;
-	void *bpf_func;
-	u32 num_args;
-	u32 writable_size;
-	long: 64;
-};
-
-struct orc_entry {
-	s16 sp_offset;
-	s16 bp_offset;
-	unsigned int sp_reg: 4;
-	unsigned int bp_reg: 4;
-	unsigned int type: 2;
-	unsigned int end: 1;
-} __attribute__((packed));
-
-struct seq_operations___2 {
-	void * (*start)(struct seq_file *, loff_t *);
-	void (*stop)(struct seq_file *, void *);
-	void * (*next)(struct seq_file *, void *, loff_t *);
-	int (*show)(struct seq_file *, void *);
-};
-
-enum perf_event_state {
-	PERF_EVENT_STATE_DEAD = 4294967292,
-	PERF_EVENT_STATE_EXIT = 4294967293,
-	PERF_EVENT_STATE_ERROR = 4294967294,
-	PERF_EVENT_STATE_OFF = 4294967295,
-	PERF_EVENT_STATE_INACTIVE = 0,
-	PERF_EVENT_STATE_ACTIVE = 1,
-};
-
-typedef struct {
-	atomic_long_t a;
-} local_t;
-
-typedef struct {
-	local_t a;
-} local64_t;
-
-struct perf_event_attr {
-	__u32 type;
-	__u32 size;
-	__u64 config;
-	union {
-		__u64 sample_period;
-		__u64 sample_freq;
-	};
-	__u64 sample_type;
-	__u64 read_format;
-	__u64 disabled: 1;
-	__u64 inherit: 1;
-	__u64 pinned: 1;
-	__u64 exclusive: 1;
-	__u64 exclude_user: 1;
-	__u64 exclude_kernel: 1;
-	__u64 exclude_hv: 1;
-	__u64 exclude_idle: 1;
-	__u64 mmap: 1;
-	__u64 comm: 1;
-	__u64 freq: 1;
-	__u64 inherit_stat: 1;
-	__u64 enable_on_exec: 1;
-	__u64 task: 1;
-	__u64 watermark: 1;
-	__u64 precise_ip: 2;
-	__u64 mmap_data: 1;
-	__u64 sample_id_all: 1;
-	__u64 exclude_host: 1;
-	__u64 exclude_guest: 1;
-	__u64 exclude_callchain_kernel: 1;
-	__u64 exclude_callchain_user: 1;
-	__u64 mmap2: 1;
-	__u64 comm_exec: 1;
-	__u64 use_clockid: 1;
-	__u64 context_switch: 1;
-	__u64 write_backward: 1;
-	__u64 namespaces: 1;
-	__u64 ksymbol: 1;
-	__u64 bpf_event: 1;
-	__u64 aux_output: 1;
-	__u64 __reserved_1: 32;
-	union {
-		__u32 wakeup_events;
-		__u32 wakeup_watermark;
-	};
-	__u32 bp_type;
-	union {
-		__u64 bp_addr;
-		__u64 kprobe_func;
-		__u64 uprobe_path;
-		__u64 config1;
-	};
-	union {
-		__u64 bp_len;
-		__u64 kprobe_addr;
-		__u64 probe_offset;
-		__u64 config2;
-	};
-	__u64 branch_sample_type;
-	__u64 sample_regs_user;
-	__u32 sample_stack_user;
-	__s32 clockid;
-	__u64 sample_regs_intr;
-	__u32 aux_watermark;
-	__u16 sample_max_stack;
-	__u16 __reserved_2;
-	__u32 aux_sample_size;
-	__u32 __reserved_3;
-};
-
-struct hw_perf_event_extra {
-	u64 config;
-	unsigned int reg;
-	int alloc;
-	int idx;
-};
-
-struct arch_hw_breakpoint {
-	long unsigned int address;
-	long unsigned int mask;
-	u8 len;
-	u8 type;
-};
-
-struct hw_perf_event {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	u64 last_period;
-	local64_t period_left;
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
-
-struct irq_work {
-	atomic_t flags;
-	struct llist_node llnode;
-	void (*func)(struct irq_work *);
-};
-
-struct perf_addr_filters_head {
-	struct list_head list;
-	raw_spinlock_t lock;
-	unsigned int nr_file_filters;
-};
-
-struct perf_sample_data;
-
-typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
-
-struct pmu;
-
-struct ring_buffer;
-
-struct perf_addr_filter_range;
-
-struct bpf_prog;
-
-struct trace_event_call;
-
-struct event_filter;
-
-struct perf_event {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event *group_leader;
-	struct pmu *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event hw;
-	struct perf_event_context *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct ring_buffer *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event *aux_event;
-	void (*destroy)(struct perf_event *);
-	struct callback_head callback_head;
-	struct pid_namespace *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t orig_overflow_handler;
-	struct bpf_prog *prog;
-	struct trace_event_call *tp_event;
-	struct event_filter *filter;
-	void *security;
-	struct list_head sb_list;
-};
-
-struct lockdep_map {};
-
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map {
-	u32 nr_extents;
-	union {
-		struct uid_gid_extent extent[5];
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
-
-struct proc_ns_operations;
-
-struct ns_common {
-	atomic_long_t stashed;
-	const struct proc_ns_operations *ops;
-	unsigned int inum;
-};
-
-struct ctl_table;
-
-struct ctl_table_root;
-
-struct ctl_table_set;
-
-struct ctl_dir;
-
-struct ctl_node;
-
-struct ctl_table_header {
-	union {
-		struct {
-			struct ctl_table *ctl_table;
-			int used;
-			int count;
-			int nreg;
-		};
-		struct callback_head rcu;
-	};
-	struct completion *unregistering;
-	struct ctl_table *ctl_table_arg;
-	struct ctl_table_root *root;
-	struct ctl_table_set *set;
-	struct ctl_dir *parent;
-	struct ctl_node *node;
-	struct hlist_head inodes;
-};
-
-struct ctl_dir {
-	struct ctl_table_header header;
-	struct rb_root root;
-};
-
-struct ctl_table_set {
-	int (*is_seen)(struct ctl_table_set *);
-	struct ctl_dir dir;
-};
-
-struct ucounts;
-
-struct user_namespace {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts *ucounts;
-	int ucount_max[9];
-};
-
-enum node_states {
-	N_POSSIBLE = 0,
-	N_ONLINE = 1,
-	N_NORMAL_MEMORY = 2,
-	N_HIGH_MEMORY = 2,
-	N_MEMORY = 3,
-	N_CPU = 4,
-	NR_NODE_STATES = 5,
-};
-
-struct delayed_work {
-	struct work_struct work;
-	struct timer_list timer;
-	struct workqueue_struct *wq;
-	int cpu;
-};
-
-struct rcu_work {
-	struct work_struct work;
-	struct callback_head rcu;
-	struct workqueue_struct *wq;
-};
-
-struct rcu_segcblist {
-	struct callback_head *head;
-	struct callback_head **tails[4];
-	long unsigned int gp_seq[4];
-	long int len;
-	long int len_lazy;
-	u8 enabled;
-	u8 offloaded;
-};
-
-struct srcu_node;
-
-struct srcu_struct;
-
-struct srcu_data {
-	long unsigned int srcu_lock_count[2];
-	long unsigned int srcu_unlock_count[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	struct rcu_segcblist srcu_cblist;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	bool srcu_cblist_invoking;
-	struct timer_list delay_work;
-	struct work_struct work;
-	struct callback_head srcu_barrier_head;
-	struct srcu_node *mynode;
-	long unsigned int grpmask;
-	int cpu;
-	struct srcu_struct *ssp;
-	long: 64;
-};
-
-struct srcu_node {
-	spinlock_t lock;
-	long unsigned int srcu_have_cbs[4];
-	long unsigned int srcu_data_have_cbs[4];
-	long unsigned int srcu_gp_seq_needed_exp;
-	struct srcu_node *srcu_parent;
-	int grplo;
-	int grphi;
-};
-
-struct srcu_struct {
-	struct srcu_node node[5];
-	struct srcu_node *level[3];
-	struct mutex srcu_cb_mutex;
-	spinlock_t lock;
-	struct mutex srcu_gp_mutex;
-	unsigned int srcu_idx;
-	long unsigned int srcu_gp_seq;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	long unsigned int srcu_last_gp_end;
-	struct srcu_data *sda;
-	long unsigned int srcu_barrier_seq;
-	struct mutex srcu_barrier_mutex;
-	struct completion srcu_barrier_completion;
-	atomic_t srcu_barrier_cpu_cnt;
-	struct delayed_work work;
-};
-
-struct anon_vma {
-	struct anon_vma *root;
-	struct rw_semaphore rwsem;
-	atomic_t refcount;
-	unsigned int degree;
-	struct anon_vma *parent;
-	struct rb_root_cached rb_root;
-};
-
-struct mempolicy {
-	atomic_t refcnt;
-	short unsigned int mode;
-	short unsigned int flags;
-	union {
-		short int preferred_node;
-		nodemask_t nodes;
-	} v;
-	union {
-		nodemask_t cpuset_mems_allowed;
-		nodemask_t user_nodemask;
-	} w;
-};
-
-struct linux_binprm;
-
-struct coredump_params;
-
-struct linux_binfmt {
-	struct list_head lh;
-	struct module *module;
-	int (*load_binary)(struct linux_binprm *);
-	int (*load_shlib)(struct file *);
-	int (*core_dump)(struct coredump_params *);
-	long unsigned int min_coredump;
-};
-
-typedef void (*smp_call_func_t)(void *);
-
-struct __call_single_data {
-	struct llist_node llist;
-	smp_call_func_t func;
-	void *info;
-	unsigned int flags;
-};
-
-typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
-
-struct ctl_table_poll;
-
-struct ctl_table {
-	const char *procname;
-	void *data;
-	int maxlen;
-	umode_t mode;
-	struct ctl_table *child;
-	proc_handler *proc_handler;
-	struct ctl_table_poll *poll;
-	void *extra1;
-	void *extra2;
-};
-
-struct ctl_table_poll {
-	atomic_t event;
-	wait_queue_head_t wait;
-};
-
-struct ctl_node {
-	struct rb_node node;
-	struct ctl_table_header *header;
-};
-
-struct ctl_table_root {
-	struct ctl_table_set default_set;
-	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
-	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
-	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
-};
-
-enum umh_disable_depth {
-	UMH_ENABLED = 0,
-	UMH_FREEZING = 1,
-	UMH_DISABLED = 2,
-};
-
-struct va_alignment {
-	int flags;
-	long unsigned int mask;
-	long unsigned int bits;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef __u64 Elf64_Addr;
-
-typedef __u16 Elf64_Half;
-
-typedef __u32 Elf64_Word;
-
-typedef __u64 Elf64_Xword;
-
-typedef __s64 Elf64_Sxword;
-
-typedef struct {
-	Elf64_Sxword d_tag;
-	union {
-		Elf64_Xword d_val;
-		Elf64_Addr d_ptr;
-	} d_un;
-} Elf64_Dyn;
-
-struct elf64_sym {
-	Elf64_Word st_name;
-	unsigned char st_info;
-	unsigned char st_other;
-	Elf64_Half st_shndx;
-	Elf64_Addr st_value;
-	Elf64_Xword st_size;
-};
-
-typedef struct elf64_sym Elf64_Sym;
-
-struct seq_file {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	u64 version;
-	struct mutex lock;
-	const struct seq_operations___2 *op;
-	int poll_event;
-	const struct file *file;
-	void *private;
-};
-
-typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct poll_table_struct {
-	poll_queue_proc _qproc;
-	__poll_t _key;
-};
-
-struct kernel_param;
-
-struct kernel_param_ops {
-	unsigned int flags;
-	int (*set)(const char *, const struct kernel_param *);
-	int (*get)(char *, const struct kernel_param *);
-	void (*free)(void *);
-};
-
-struct kparam_string;
-
-struct kparam_array;
-
-struct kernel_param {
-	const char *name;
-	struct module *mod;
-	const struct kernel_param_ops *ops;
-	const u16 perm;
-	s8 level;
-	u8 flags;
-	union {
-		void *arg;
-		const struct kparam_string *str;
-		const struct kparam_array *arr;
-	};
-};
-
-struct kparam_string {
-	unsigned int maxlen;
-	char *string;
-};
-
-struct kparam_array {
-	unsigned int max;
-	unsigned int elemsize;
-	unsigned int *num;
-	const struct kernel_param_ops *ops;
-	void *elem;
-};
-
-enum module_state {
-	MODULE_STATE_LIVE = 0,
-	MODULE_STATE_COMING = 1,
-	MODULE_STATE_GOING = 2,
-	MODULE_STATE_UNFORMED = 3,
-};
-
-struct module_param_attrs;
-
-struct module_kobject {
-	struct kobject kobj;
-	struct module *mod;
-	struct kobject *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct latch_tree_node {
-	struct rb_node node[2];
-};
-
-struct mod_tree_node {
-	struct module *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node mtn;
-};
-
-struct mod_arch_specific {
-	unsigned int num_orcs;
-	int *orc_unwind_ip;
-	struct orc_entry *orc_unwind;
-};
-
-struct mod_kallsyms {
-	Elf64_Sym *symtab;
-	unsigned int num_symtab;
-	char *strtab;
-	char *typetab;
-};
-
-struct module_attribute;
-
-struct exception_table_entry;
-
-struct module_sect_attrs;
-
-struct module_notes_attrs;
-
-struct trace_eval_map;
-
-struct error_injection_entry;
-
-struct module {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject mkobj;
-	struct module_attribute *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout core_layout;
-	struct module_layout init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct error_injection_entry {
-	long unsigned int addr;
-	int etype;
-};
-
-struct module_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
-	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
-	void (*setup)(struct module *, const char *);
-	int (*test)(struct module *);
-	void (*free)(struct module *);
-};
-
-struct exception_table_entry {
-	int insn;
-	int fixup;
-	int handler;
-};
-
-struct trace_event_functions;
-
-struct trace_event {
-	struct hlist_node node;
-	struct list_head list;
-	int type;
-	struct trace_event_functions *funcs;
-};
-
-struct trace_event_class;
-
-struct bpf_prog_array;
-
-struct trace_event_call {
-	struct list_head list;
-	struct trace_event_class *class;
-	union {
-		char *name;
-		struct tracepoint *tp;
-	};
-	struct trace_event event;
-	char *print_fmt;
-	struct event_filter *filter;
-	void *mod;
-	void *data;
-	int flags;
-	int perf_refcount;
-	struct hlist_head *perf_events;
-	struct bpf_prog_array *prog_array;
-	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
-};
-
-struct trace_eval_map {
-	const char *system;
-	const char *eval_string;
-	long unsigned int eval_value;
-};
-
-struct fs_pin;
-
-struct pid_namespace {
-	struct kref kref;
-	struct idr idr;
-	struct callback_head rcu;
-	unsigned int pid_allocated;
-	struct task_struct *child_reaper;
-	struct kmem_cache *pid_cachep;
-	unsigned int level;
-	struct pid_namespace *parent;
-	struct vfsmount *proc_mnt;
-	struct dentry *proc_self;
-	struct dentry *proc_thread_self;
-	struct fs_pin *bacct;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct work_struct proc_work;
-	kgid_t pid_gid;
-	int hide_pid;
-	int reboot;
-	struct ns_common ns;
-};
-
-struct rlimit {
-	__kernel_ulong_t rlim_cur;
-	__kernel_ulong_t rlim_max;
-};
-
-struct task_cputime {
-	u64 stime;
-	u64 utime;
-	long long unsigned int sum_exec_runtime;
-};
-
-typedef void __signalfn_t(int);
-
-typedef __signalfn_t *__sighandler_t;
-
-typedef void __restorefn_t();
-
-typedef __restorefn_t *__sigrestore_t;
-
-struct user_struct {
-	refcount_t __count;
-	atomic_t processes;
-	atomic_t sigpending;
-	atomic_long_t epoll_watches;
-	long unsigned int mq_bytes;
-	long unsigned int locked_shm;
-	long unsigned int unix_inflight;
-	atomic_long_t pipe_bufs;
-	struct hlist_node uidhash_node;
-	kuid_t uid;
-	atomic_long_t locked_vm;
-	struct ratelimit_state ratelimit;
-};
-
-struct sigaction {
-	__sighandler_t sa_handler;
-	long unsigned int sa_flags;
-	__sigrestore_t sa_restorer;
-	sigset_t sa_mask;
-};
-
-struct k_sigaction {
-	struct sigaction sa;
-};
-
-struct cpu_itimer {
-	u64 expires;
-	u64 incr;
-};
-
-struct task_cputime_atomic {
-	atomic64_t utime;
-	atomic64_t stime;
-	atomic64_t sum_exec_runtime;
-};
-
-struct thread_group_cputimer {
-	struct task_cputime_atomic cputime_atomic;
-};
-
-struct pacct_struct {
-	int ac_flag;
-	long int ac_exitcode;
-	long unsigned int ac_mem;
-	u64 ac_utime;
-	u64 ac_stime;
-	long unsigned int ac_minflt;
-	long unsigned int ac_majflt;
-};
-
-struct tty_struct;
-
-struct taskstats;
-
-struct tty_audit_buf;
-
-struct signal_struct {
-	refcount_t sigcnt;
-	atomic_t live;
-	int nr_threads;
-	struct list_head thread_head;
-	wait_queue_head_t wait_chldexit;
-	struct task_struct *curr_target;
-	struct sigpending shared_pending;
-	struct hlist_head multiprocess;
-	int group_exit_code;
-	int notify_count;
-	struct task_struct *group_exit_task;
-	int group_stop_count;
-	unsigned int flags;
-	unsigned int is_child_subreaper: 1;
-	unsigned int has_child_subreaper: 1;
-	int posix_timer_id;
-	struct list_head posix_timers;
-	struct hrtimer real_timer;
-	ktime_t it_real_incr;
-	struct cpu_itimer it[2];
-	struct thread_group_cputimer cputimer;
-	struct posix_cputimers posix_cputimers;
-	struct pid *pids[4];
-	struct pid *tty_old_pgrp;
-	int leader;
-	struct tty_struct *tty;
-	seqlock_t stats_lock;
-	u64 utime;
-	u64 stime;
-	u64 cutime;
-	u64 cstime;
-	u64 gtime;
-	u64 cgtime;
-	struct prev_cputime prev_cputime;
-	long unsigned int nvcsw;
-	long unsigned int nivcsw;
-	long unsigned int cnvcsw;
-	long unsigned int cnivcsw;
-	long unsigned int min_flt;
-	long unsigned int maj_flt;
-	long unsigned int cmin_flt;
-	long unsigned int cmaj_flt;
-	long unsigned int inblock;
-	long unsigned int oublock;
-	long unsigned int cinblock;
-	long unsigned int coublock;
-	long unsigned int maxrss;
-	long unsigned int cmaxrss;
-	struct task_io_accounting ioac;
-	long long unsigned int sum_sched_runtime;
-	struct rlimit rlim[16];
-	struct pacct_struct pacct;
-	struct taskstats *stats;
-	unsigned int audit_tty;
-	struct tty_audit_buf *tty_audit_buf;
-	bool oom_flag_origin;
-	short int oom_score_adj;
-	short int oom_score_adj_min;
-	struct mm_struct *oom_mm;
-	struct mutex cred_guard_mutex;
-};
-
-typedef int32_t key_serial_t;
-
-typedef uint32_t key_perm_t;
-
-struct key_type;
-
-struct key_tag;
-
-struct keyring_index_key {
-	long unsigned int hash;
-	union {
-		struct {
-			u16 desc_len;
-			char desc[6];
-		};
-		long unsigned int x;
-	};
-	struct key_type *type;
-	struct key_tag *domain_tag;
-	const char *description;
-};
-
-union key_payload {
-	void *rcu_data0;
-	void *data[4];
-};
-
-struct assoc_array_ptr;
-
-struct assoc_array {
-	struct assoc_array_ptr *root;
-	long unsigned int nr_leaves_on_tree;
-};
-
-struct key_user;
-
-struct key_restriction;
-
-struct key {
-	refcount_t usage;
-	key_serial_t serial;
-	union {
-		struct list_head graveyard_link;
-		struct rb_node serial_node;
-	};
-	struct rw_semaphore sem;
-	struct key_user *user;
-	void *security;
-	union {
-		time64_t expiry;
-		time64_t revoked_at;
-	};
-	time64_t last_used_at;
-	kuid_t uid;
-	kgid_t gid;
-	key_perm_t perm;
-	short unsigned int quotalen;
-	short unsigned int datalen;
-	short int state;
-	long unsigned int flags;
-	union {
-		struct keyring_index_key index_key;
-		struct {
-			long unsigned int hash;
-			long unsigned int len_desc;
-			struct key_type *type;
-			struct key_tag *domain_tag;
-			char *description;
-		};
-	};
-	union {
-		union key_payload payload;
-		struct {
-			struct list_head name_link;
-			struct assoc_array keys;
-		};
-	};
-	struct key_restriction *restrict_link;
-};
-
-struct uts_namespace;
-
-struct ipc_namespace;
-
-struct mnt_namespace;
-
-struct net;
-
-struct cgroup_namespace;
-
-struct nsproxy {
-	atomic_t count;
-	struct uts_namespace *uts_ns;
-	struct ipc_namespace *ipc_ns;
-	struct mnt_namespace *mnt_ns;
-	struct pid_namespace *pid_ns_for_children;
-	struct net *net_ns;
-	struct cgroup_namespace *cgroup_ns;
-};
-
-struct sighand_struct {
-	spinlock_t siglock;
-	refcount_t count;
-	wait_queue_head_t signalfd_wqh;
-	struct k_sigaction action[64];
-};
-
-struct bio;
-
-struct bio_list {
-	struct bio *head;
-	struct bio *tail;
-};
-
-struct blk_plug {
-	struct list_head mq_list;
-	struct list_head cb_list;
-	short unsigned int rq_count;
-	bool multiple_queues;
-};
-
-struct reclaim_state {
-	long unsigned int reclaimed_slab;
-};
-
-typedef int congested_fn(void *, int);
-
-struct fprop_local_percpu {
-	struct percpu_counter events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-enum wb_reason {
-	WB_REASON_BACKGROUND = 0,
-	WB_REASON_VMSCAN = 1,
-	WB_REASON_SYNC = 2,
-	WB_REASON_PERIODIC = 3,
-	WB_REASON_LAPTOP_TIMER = 4,
-	WB_REASON_FREE_MORE_MEM = 5,
-	WB_REASON_FS_FREE_SPACE = 6,
-	WB_REASON_FORKER_THREAD = 7,
-	WB_REASON_FOREIGN_FLUSH = 8,
-	WB_REASON_MAX = 9,
-};
-
-struct bdi_writeback_congested;
-
-struct bdi_writeback {
-	struct backing_dev_info *bdi;
-	long unsigned int state;
-	long unsigned int last_old_flush;
-	struct list_head b_dirty;
-	struct list_head b_io;
-	struct list_head b_more_io;
-	struct list_head b_dirty_time;
-	spinlock_t list_lock;
-	struct percpu_counter stat[4];
-	struct bdi_writeback_congested *congested;
-	long unsigned int bw_time_stamp;
-	long unsigned int dirtied_stamp;
-	long unsigned int written_stamp;
-	long unsigned int write_bandwidth;
-	long unsigned int avg_write_bandwidth;
-	long unsigned int dirty_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	struct fprop_local_percpu completions;
-	int dirty_exceeded;
-	enum wb_reason start_all_reason;
-	spinlock_t work_lock;
-	struct list_head work_list;
-	struct delayed_work dwork;
-	long unsigned int dirty_sleep;
-	struct list_head bdi_node;
-};
-
-struct backing_dev_info {
-	u64 id;
-	struct rb_node rb_node;
-	struct list_head bdi_list;
-	long unsigned int ra_pages;
-	long unsigned int io_pages;
-	congested_fn *congested_fn;
-	void *congested_data;
-	const char *name;
-	struct kref refcnt;
-	unsigned int capabilities;
-	unsigned int min_ratio;
-	unsigned int max_ratio;
-	unsigned int max_prop_frac;
-	atomic_long_t tot_write_bandwidth;
-	struct bdi_writeback wb;
-	struct list_head wb_list;
-	struct bdi_writeback_congested *wb_congested;
-	wait_queue_head_t wb_waitq;
-	struct device *dev;
-	struct device *owner;
-	struct timer_list laptop_mode_wb_timer;
-	struct dentry *debug_dir;
-};
-
-struct cgroup_subsys_state;
-
-struct cgroup;
-
-struct css_set {
-	struct cgroup_subsys_state *subsys[4];
-	refcount_t refcount;
-	struct css_set *dom_cset;
-	struct cgroup *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[4];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup *mg_src_cgrp;
-	struct cgroup *mg_dst_cgrp;
-	struct css_set *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
-};
-
-struct perf_event_groups {
-	struct rb_root tree;
-	u64 index;
-};
-
-struct perf_event_context {
-	struct pmu *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct task_delay_info {
-	raw_spinlock_t lock;
-	unsigned int flags;
-	u64 blkio_start;
-	u64 blkio_delay;
-	u64 swapin_delay;
-	u32 blkio_count;
-	u32 swapin_count;
-	u64 freepages_start;
-	u64 freepages_delay;
-	u64 thrashing_start;
-	u64 thrashing_delay;
-	u32 freepages_count;
-	u32 thrashing_count;
-};
-
-union thread_union {
-	struct task_struct task;
-	long unsigned int stack[2048];
-};
-
-typedef unsigned int blk_qc_t;
-
-typedef blk_qc_t make_request_fn(struct request_queue *, struct bio *);
-
-struct request;
-
-typedef int dma_drain_needed_fn(struct request *);
-
-struct blk_rq_stat {
-	u64 mean;
-	u64 min;
-	u64 max;
-	u32 nr_samples;
-	u64 batch;
-};
-
-enum blk_zoned_model {
-	BLK_ZONED_NONE = 0,
-	BLK_ZONED_HA = 1,
-	BLK_ZONED_HM = 2,
-};
-
-struct queue_limits {
-	long unsigned int bounce_pfn;
-	long unsigned int seg_boundary_mask;
-	long unsigned int virt_boundary_mask;
-	unsigned int max_hw_sectors;
-	unsigned int max_dev_sectors;
-	unsigned int chunk_sectors;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	unsigned int physical_block_size;
-	unsigned int logical_block_size;
-	unsigned int alignment_offset;
-	unsigned int io_min;
-	unsigned int io_opt;
-	unsigned int max_discard_sectors;
-	unsigned int max_hw_discard_sectors;
-	unsigned int max_write_same_sectors;
-	unsigned int max_write_zeroes_sectors;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	short unsigned int max_segments;
-	short unsigned int max_integrity_segments;
-	short unsigned int max_discard_segments;
-	unsigned char misaligned;
-	unsigned char discard_misaligned;
-	unsigned char raid_partial_stripes_expensive;
-	enum blk_zoned_model zoned;
-};
-
-struct bsg_ops;
-
-struct bsg_class_device {
-	struct device *class_dev;
-	int minor;
-	struct request_queue *queue;
-	const struct bsg_ops *ops;
-};
-
-typedef void *mempool_alloc_t(gfp_t, void *);
-
-typedef void mempool_free_t(void *, void *);
-
-struct mempool_s {
-	spinlock_t lock;
-	int min_nr;
-	int curr_nr;
-	void **elements;
-	void *pool_data;
-	mempool_alloc_t *alloc;
-	mempool_free_t *free;
-	wait_queue_head_t wait;
-};
-
-typedef struct mempool_s mempool_t;
-
-struct bio_set {
-	struct kmem_cache *bio_slab;
-	unsigned int front_pad;
-	mempool_t bio_pool;
-	mempool_t bvec_pool;
-	spinlock_t rescue_lock;
-	struct bio_list rescue_list;
-	struct work_struct rescue_work;
-	struct workqueue_struct *rescue_workqueue;
-};
-
-struct elevator_queue;
-
-struct blk_queue_stats;
-
-struct rq_qos;
-
-struct blk_mq_ops;
-
-struct blk_mq_ctx;
-
-struct blk_mq_hw_ctx;
-
-struct blk_stat_callback;
-
-struct blk_trace;
-
-struct blk_flush_queue;
-
-struct blk_mq_tag_set;
-
-struct request_queue {
-	struct request *last_merge;
-	struct elevator_queue *elevator;
-	struct blk_queue_stats *stats;
-	struct rq_qos *rq_qos;
-	make_request_fn *make_request_fn;
-	dma_drain_needed_fn *dma_drain_needed;
-	const struct blk_mq_ops *mq_ops;
-	struct blk_mq_ctx *queue_ctx;
-	unsigned int queue_depth;
-	struct blk_mq_hw_ctx **queue_hw_ctx;
-	unsigned int nr_hw_queues;
-	struct backing_dev_info *backing_dev_info;
-	void *queuedata;
-	long unsigned int queue_flags;
-	atomic_t pm_only;
-	int id;
-	gfp_t bounce_gfp;
-	spinlock_t queue_lock;
-	struct kobject kobj;
-	struct kobject *mq_kobj;
-	struct device *dev;
-	int rpm_status;
-	unsigned int nr_pending;
-	long unsigned int nr_requests;
-	unsigned int dma_drain_size;
-	void *dma_drain_buffer;
-	unsigned int dma_pad_mask;
-	unsigned int dma_alignment;
-	unsigned int rq_timeout;
-	int poll_nsec;
-	struct blk_stat_callback *poll_cb;
-	struct blk_rq_stat poll_stat[16];
-	struct timer_list timeout;
-	struct work_struct timeout_work;
-	struct list_head icq_list;
-	struct queue_limits limits;
-	unsigned int required_elevator_features;
-	unsigned int sg_timeout;
-	unsigned int sg_reserved_size;
-	int node;
-	struct blk_trace *blk_trace;
-	struct mutex blk_trace_mutex;
-	struct blk_flush_queue *fq;
-	struct list_head requeue_list;
-	spinlock_t requeue_lock;
-	struct delayed_work requeue_work;
-	struct mutex sysfs_lock;
-	struct mutex sysfs_dir_lock;
-	struct list_head unused_hctx_list;
-	spinlock_t unused_hctx_lock;
-	int mq_freeze_depth;
-	struct bsg_class_device bsg_dev;
-	struct callback_head callback_head;
-	wait_queue_head_t mq_freeze_wq;
-	struct mutex mq_freeze_lock;
-	struct percpu_ref q_usage_counter;
-	struct blk_mq_tag_set *tag_set;
-	struct list_head tag_set_list;
-	struct bio_set bio_split;
-	struct dentry *debugfs_dir;
-	struct dentry *sched_debugfs_dir;
-	struct dentry *rqos_debugfs_dir;
-	bool mq_sysfs_init_done;
-	size_t cmd_size;
-	struct work_struct release_work;
-	u64 write_hints[5];
-};
-
-enum writeback_sync_modes {
-	WB_SYNC_NONE = 0,
-	WB_SYNC_ALL = 1,
-};
-
-struct writeback_control {
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	enum writeback_sync_modes sync_mode;
-	unsigned int for_kupdate: 1;
-	unsigned int for_background: 1;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_reclaim: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_sync: 1;
-	unsigned int no_cgroup_owner: 1;
-	unsigned int punt_to_cgroup: 1;
-};
-
-struct swap_cluster_info {
-	spinlock_t lock;
-	unsigned int data: 24;
-	unsigned int flags: 8;
-};
-
-struct swap_cluster_list {
-	struct swap_cluster_info head;
-	struct swap_cluster_info tail;
-};
-
-struct percpu_cluster;
-
-struct swap_info_struct {
-	long unsigned int flags;
-	short int prio;
-	struct plist_node list;
-	signed char type;
-	unsigned int max;
-	unsigned char *swap_map;
-	struct swap_cluster_info *cluster_info;
-	struct swap_cluster_list free_clusters;
-	unsigned int lowest_bit;
-	unsigned int highest_bit;
-	unsigned int pages;
-	unsigned int inuse_pages;
-	unsigned int cluster_next;
-	unsigned int cluster_nr;
-	struct percpu_cluster *percpu_cluster;
-	struct rb_root swap_extent_root;
-	struct block_device *bdev;
-	struct file *swap_file;
-	unsigned int old_block_size;
-	spinlock_t lock;
-	spinlock_t cont_lock;
-	struct work_struct discard_work;
-	struct swap_cluster_list discard_clusters;
-	struct plist_node avail_lists[0];
-};
-
-struct partition_meta_info;
-
-struct disk_stats;
-
-struct hd_struct {
-	sector_t start_sect;
-	sector_t nr_sects;
-	seqcount_t nr_sects_seq;
-	sector_t alignment_offset;
-	unsigned int discard_alignment;
-	struct device __dev;
-	struct kobject *holder_dir;
-	int policy;
-	int partno;
-	struct partition_meta_info *info;
-	long unsigned int stamp;
-	struct disk_stats *dkstats;
-	struct percpu_ref ref;
-	struct rcu_work rcu_work;
-};
-
-struct disk_part_tbl;
-
-struct block_device_operations;
-
-struct timer_rand_state;
-
-struct disk_events;
-
-struct badblocks;
-
-struct gendisk {
-	int major;
-	int first_minor;
-	int minors;
-	char disk_name[32];
-	char * (*devnode)(struct gendisk *, umode_t *);
-	short unsigned int events;
-	short unsigned int event_flags;
-	struct disk_part_tbl *part_tbl;
-	struct hd_struct part0;
-	const struct block_device_operations *fops;
-	struct request_queue *queue;
-	void *private_data;
-	int flags;
-	struct rw_semaphore lookup_sem;
-	struct kobject *slave_dir;
-	struct timer_rand_state *random;
-	atomic_t sync_io;
-	struct disk_events *ev;
-	int node_id;
-	struct badblocks *bb;
-	struct lockdep_map lockdep_map;
-};
-
-struct cdev {
-	struct kobject kobj;
-	struct module *owner;
-	const struct file_operations *ops;
-	struct list_head list;
-	dev_t dev;
-	unsigned int count;
-};
-
-typedef u8 blk_status_t;
-
-struct bvec_iter {
-	sector_t bi_sector;
-	unsigned int bi_size;
-	unsigned int bi_idx;
-	unsigned int bi_bvec_done;
-};
-
-typedef void bio_end_io_t(struct bio *);
-
-struct bio_vec {
-	struct page *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct bio {
-	struct bio *bi_next;
-	struct gendisk *bi_disk;
-	unsigned int bi_opf;
-	short unsigned int bi_flags;
-	short unsigned int bi_ioprio;
-	short unsigned int bi_write_hint;
-	blk_status_t bi_status;
-	u8 bi_partno;
-	atomic_t __bi_remaining;
-	struct bvec_iter bi_iter;
-	bio_end_io_t *bi_end_io;
-	void *bi_private;
-	union {	};
-	short unsigned int bi_vcnt;
-	short unsigned int bi_max_vecs;
-	atomic_t __bi_cnt;
-	struct bio_vec *bi_io_vec;
-	struct bio_set *bi_pool;
-	struct bio_vec bi_inline_vecs[0];
-};
-
-struct linux_binprm {
-	struct vm_area_struct *vma;
-	long unsigned int vma_pages;
-	struct mm_struct *mm;
-	long unsigned int p;
-	long unsigned int argmin;
-	unsigned int called_set_creds: 1;
-	unsigned int cap_elevated: 1;
-	unsigned int secureexec: 1;
-	unsigned int recursion_depth;
-	struct file *file;
-	struct cred *cred;
-	int unsafe;
-	unsigned int per_clear;
-	int argc;
-	int envc;
-	const char *filename;
-	const char *interp;
-	unsigned int interp_flags;
-	unsigned int interp_data;
-	long unsigned int loader;
-	long unsigned int exec;
-	struct rlimit rlim_stack;
-	char buf[256];
-};
-
-struct coredump_params {
-	const kernel_siginfo_t *siginfo;
-	struct pt_regs *regs;
-	struct file *file;
-	long unsigned int limit;
-	long unsigned int mm_flags;
-	loff_t written;
-	loff_t pos;
-};
-
-struct key_tag {
-	struct callback_head rcu;
-	refcount_t usage;
-	bool removed;
-};
-
-typedef int (*request_key_actor_t)(struct key *, void *);
-
-struct key_preparsed_payload;
-
-struct key_match_data;
-
-struct kernel_pkey_params;
-
-struct kernel_pkey_query;
-
-struct key_type {
-	const char *name;
-	size_t def_datalen;
-	unsigned int flags;
-	int (*vet_description)(const char *);
-	int (*preparse)(struct key_preparsed_payload *);
-	void (*free_preparse)(struct key_preparsed_payload *);
-	int (*instantiate)(struct key *, struct key_preparsed_payload *);
-	int (*update)(struct key *, struct key_preparsed_payload *);
-	int (*match_preparse)(struct key_match_data *);
-	void (*match_free)(struct key_match_data *);
-	void (*revoke)(struct key *);
-	void (*destroy)(struct key *);
-	void (*describe)(const struct key *, struct seq_file *);
-	long int (*read)(const struct key *, char *, size_t);
-	request_key_actor_t request_key;
-	struct key_restriction * (*lookup_restriction)(const char *);
-	int (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
-	int (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *);
-	int (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *);
-	struct list_head link;
-	struct lock_class_key lock_class;
-};
-
-typedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *);
-
-struct key_restriction {
-	key_restrict_link_func_t check;
-	struct key *key;
-	struct key_type *keytype;
-};
-
-struct group_info {
-	atomic_t usage;
-	int ngroups;
-	kgid_t gid[0];
-};
-
-struct ring_buffer_event {
-	u32 type_len: 5;
-	u32 time_delta: 27;
-	u32 array[0];
-};
-
-struct seq_buf {
-	char *buffer;
-	size_t size;
-	size_t len;
-	loff_t readpos;
-};
-
-struct trace_seq {
-	unsigned char buffer[4096];
-	struct seq_buf seq;
-	int full;
-};
-
-enum perf_sw_ids {
-	PERF_COUNT_SW_CPU_CLOCK = 0,
-	PERF_COUNT_SW_TASK_CLOCK = 1,
-	PERF_COUNT_SW_PAGE_FAULTS = 2,
-	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
-	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
-	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
-	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
-	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
-	PERF_COUNT_SW_EMULATION_FAULTS = 8,
-	PERF_COUNT_SW_DUMMY = 9,
-	PERF_COUNT_SW_BPF_OUTPUT = 10,
-	PERF_COUNT_SW_MAX = 11,
-};
-
-union perf_mem_data_src {
-	__u64 val;
-	struct {
-		__u64 mem_op: 5;
-		__u64 mem_lvl: 14;
-		__u64 mem_snoop: 5;
-		__u64 mem_lock: 2;
-		__u64 mem_dtlb: 7;
-		__u64 mem_lvl_num: 4;
-		__u64 mem_remote: 1;
-		__u64 mem_snoopx: 2;
-		__u64 mem_rsvd: 24;
-	};
-};
-
-struct perf_branch_entry {
-	__u64 from;
-	__u64 to;
-	__u64 mispred: 1;
-	__u64 predicted: 1;
-	__u64 in_tx: 1;
-	__u64 abort: 1;
-	__u64 cycles: 16;
-	__u64 type: 4;
-	__u64 reserved: 40;
-};
-
-struct taskstats {
-	__u16 version;
-	__u32 ac_exitcode;
-	__u8 ac_flag;
-	__u8 ac_nice;
-	__u64 cpu_count;
-	__u64 cpu_delay_total;
-	__u64 blkio_count;
-	__u64 blkio_delay_total;
-	__u64 swapin_count;
-	__u64 swapin_delay_total;
-	__u64 cpu_run_real_total;
-	__u64 cpu_run_virtual_total;
-	char ac_comm[32];
-	__u8 ac_sched;
-	__u8 ac_pad[3];
-	int: 32;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u64 ac_etime;
-	__u64 ac_utime;
-	__u64 ac_stime;
-	__u64 ac_minflt;
-	__u64 ac_majflt;
-	__u64 coremem;
-	__u64 virtmem;
-	__u64 hiwater_rss;
-	__u64 hiwater_vm;
-	__u64 read_char;
-	__u64 write_char;
-	__u64 read_syscalls;
-	__u64 write_syscalls;
-	__u64 read_bytes;
-	__u64 write_bytes;
-	__u64 cancelled_write_bytes;
-	__u64 nvcsw;
-	__u64 nivcsw;
-	__u64 ac_utimescaled;
-	__u64 ac_stimescaled;
-	__u64 cpu_scaled_run_real_total;
-	__u64 freepages_count;
-	__u64 freepages_delay_total;
-	__u64 thrashing_count;
-	__u64 thrashing_delay_total;
-};
-
-struct new_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-	char domainname[65];
-};
-
-struct uts_namespace {
-	struct kref kref;
-	struct new_utsname name;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-};
-
-struct cgroup_namespace {
-	refcount_t count;
-	struct ns_common ns;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct css_set *root_cset;
-};
-
-struct proc_ns_operations {
-	const char *name;
-	const char *real_ns_name;
-	int type;
-	struct ns_common * (*get)(struct task_struct *);
-	void (*put)(struct ns_common *);
-	int (*install)(struct nsproxy *, struct ns_common *);
-	struct user_namespace * (*owner)(struct ns_common *);
-	struct ns_common * (*get_parent)(struct ns_common *);
-};
-
-struct ucounts {
-	struct hlist_node node;
-	struct user_namespace *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[9];
-};
-
-struct perf_guest_info_callbacks {
-	int (*is_in_guest)();
-	int (*is_user_mode)();
-	long unsigned int (*get_guest_ip)();
-	void (*handle_intel_pt_intr)();
-};
-
-struct perf_cpu_context;
-
-struct perf_output_handle;
-
-struct pmu {
-	struct list_head entry;
-	struct module *module;
-	struct device *dev;
-	const struct attribute_group **attr_groups;
-	const struct attribute_group **attr_update;
-	const char *name;
-	int type;
-	int capabilities;
-	int *pmu_disable_count;
-	struct perf_cpu_context *pmu_cpu_context;
-	atomic_t exclusive_cnt;
-	int task_ctx_nr;
-	int hrtimer_interval_ms;
-	unsigned int nr_addr_filters;
-	void (*pmu_enable)(struct pmu *);
-	void (*pmu_disable)(struct pmu *);
-	int (*event_init)(struct perf_event *);
-	void (*event_mapped)(struct perf_event *, struct mm_struct *);
-	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
-	int (*add)(struct perf_event *, int);
-	void (*del)(struct perf_event *, int);
-	void (*start)(struct perf_event *, int);
-	void (*stop)(struct perf_event *, int);
-	void (*read)(struct perf_event *);
-	void (*start_txn)(struct pmu *, unsigned int);
-	int (*commit_txn)(struct pmu *);
-	void (*cancel_txn)(struct pmu *);
-	int (*event_idx)(struct perf_event *);
-	void (*sched_task)(struct perf_event_context *, bool);
-	size_t task_ctx_size;
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
-	void * (*setup_aux)(struct perf_event *, void **, int, bool);
-	void (*free_aux)(void *);
-	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
-	int (*addr_filters_validate)(struct list_head *);
-	void (*addr_filters_sync)(struct perf_event *);
-	int (*aux_output_match)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int (*check_period)(struct perf_event *, u64);
-};
-
-enum irq_domain_bus_token {
-	DOMAIN_BUS_ANY = 0,
-	DOMAIN_BUS_WIRED = 1,
-	DOMAIN_BUS_GENERIC_MSI = 2,
-	DOMAIN_BUS_PCI_MSI = 3,
-	DOMAIN_BUS_PLATFORM_MSI = 4,
-	DOMAIN_BUS_NEXUS = 5,
-	DOMAIN_BUS_IPI = 6,
-	DOMAIN_BUS_FSL_MC_MSI = 7,
-	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
-	DOMAIN_BUS_WAKEUP = 9,
-};
-
-struct irq_domain_ops;
-
-struct irq_domain_chip_generic;
-
-struct irq_domain {
-	struct list_head link;
-	const char *name;
-	const struct irq_domain_ops *ops;
-	void *host_data;
-	unsigned int flags;
-	unsigned int mapcount;
-	struct fwnode_handle *fwnode;
-	enum irq_domain_bus_token bus_token;
-	struct irq_domain_chip_generic *gc;
-	struct irq_domain *parent;
-	irq_hw_number_t hwirq_max;
-	unsigned int revmap_direct_max_irq;
-	unsigned int revmap_size;
-	struct xarray revmap_tree;
-	struct mutex revmap_tree_mutex;
-	unsigned int linear_revmap[0];
-};
-
-typedef u32 phandle;
-
-struct property;
-
-struct device_node {
-	const char *name;
-	phandle phandle;
-	const char *full_name;
-	struct fwnode_handle fwnode;
-	struct property *properties;
-	struct property *deadprops;
-	struct device_node *parent;
-	struct device_node *child;
-	struct device_node *sibling;
-	long unsigned int _flags;
-	void *data;
-};
-
-enum cpuhp_state {
-	CPUHP_INVALID = 4294967295,
-	CPUHP_OFFLINE = 0,
-	CPUHP_CREATE_THREADS = 1,
-	CPUHP_PERF_PREPARE = 2,
-	CPUHP_PERF_X86_PREPARE = 3,
-	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
-	CPUHP_PERF_POWER = 5,
-	CPUHP_PERF_SUPERH = 6,
-	CPUHP_X86_HPET_DEAD = 7,
-	CPUHP_X86_APB_DEAD = 8,
-	CPUHP_X86_MCE_DEAD = 9,
-	CPUHP_VIRT_NET_DEAD = 10,
-	CPUHP_SLUB_DEAD = 11,
-	CPUHP_MM_WRITEBACK_DEAD = 12,
-	CPUHP_MM_VMSTAT_DEAD = 13,
-	CPUHP_SOFTIRQ_DEAD = 14,
-	CPUHP_NET_MVNETA_DEAD = 15,
-	CPUHP_CPUIDLE_DEAD = 16,
-	CPUHP_ARM64_FPSIMD_DEAD = 17,
-	CPUHP_ARM_OMAP_WAKE_DEAD = 18,
-	CPUHP_IRQ_POLL_DEAD = 19,
-	CPUHP_BLOCK_SOFTIRQ_DEAD = 20,
-	CPUHP_ACPI_CPUDRV_DEAD = 21,
-	CPUHP_S390_PFAULT_DEAD = 22,
-	CPUHP_BLK_MQ_DEAD = 23,
-	CPUHP_FS_BUFF_DEAD = 24,
-	CPUHP_PRINTK_DEAD = 25,
-	CPUHP_MM_MEMCQ_DEAD = 26,
-	CPUHP_PERCPU_CNT_DEAD = 27,
-	CPUHP_RADIX_DEAD = 28,
-	CPUHP_PAGE_ALLOC_DEAD = 29,
-	CPUHP_NET_DEV_DEAD = 30,
-	CPUHP_PCI_XGENE_DEAD = 31,
-	CPUHP_IOMMU_INTEL_DEAD = 32,
-	CPUHP_LUSTRE_CFS_DEAD = 33,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 34,
-	CPUHP_WORKQUEUE_PREP = 35,
-	CPUHP_POWER_NUMA_PREPARE = 36,
-	CPUHP_HRTIMERS_PREPARE = 37,
-	CPUHP_PROFILE_PREPARE = 38,
-	CPUHP_X2APIC_PREPARE = 39,
-	CPUHP_SMPCFD_PREPARE = 40,
-	CPUHP_RELAY_PREPARE = 41,
-	CPUHP_SLAB_PREPARE = 42,
-	CPUHP_MD_RAID5_PREPARE = 43,
-	CPUHP_RCUTREE_PREP = 44,
-	CPUHP_CPUIDLE_COUPLED_PREPARE = 45,
-	CPUHP_POWERPC_PMAC_PREPARE = 46,
-	CPUHP_POWERPC_MMU_CTX_PREPARE = 47,
-	CPUHP_XEN_PREPARE = 48,
-	CPUHP_XEN_EVTCHN_PREPARE = 49,
-	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 50,
-	CPUHP_SH_SH3X_PREPARE = 51,
-	CPUHP_NET_FLOW_PREPARE = 52,
-	CPUHP_TOPOLOGY_PREPARE = 53,
-	CPUHP_NET_IUCV_PREPARE = 54,
-	CPUHP_ARM_BL_PREPARE = 55,
-	CPUHP_TRACE_RB_PREPARE = 56,
-	CPUHP_MM_ZS_PREPARE = 57,
-	CPUHP_MM_ZSWP_MEM_PREPARE = 58,
-	CPUHP_MM_ZSWP_POOL_PREPARE = 59,
-	CPUHP_KVM_PPC_BOOK3S_PREPARE = 60,
-	CPUHP_ZCOMP_PREPARE = 61,
-	CPUHP_TIMERS_PREPARE = 62,
-	CPUHP_MIPS_SOC_PREPARE = 63,
-	CPUHP_BP_PREPARE_DYN = 64,
-	CPUHP_BP_PREPARE_DYN_END = 84,
-	CPUHP_BRINGUP_CPU = 85,
-	CPUHP_AP_IDLE_DEAD = 86,
-	CPUHP_AP_OFFLINE = 87,
-	CPUHP_AP_SCHED_STARTING = 88,
-	CPUHP_AP_RCUTREE_DYING = 89,
-	CPUHP_AP_IRQ_GIC_STARTING = 90,
-	CPUHP_AP_IRQ_HIP04_STARTING = 91,
-	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 92,
-	CPUHP_AP_IRQ_BCM2836_STARTING = 93,
-	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 94,
-	CPUHP_AP_ARM_MVEBU_COHERENCY = 95,
-	CPUHP_AP_MICROCODE_LOADER = 96,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 97,
-	CPUHP_AP_PERF_X86_STARTING = 98,
-	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 99,
-	CPUHP_AP_PERF_X86_CQM_STARTING = 100,
-	CPUHP_AP_PERF_X86_CSTATE_STARTING = 101,
-	CPUHP_AP_PERF_XTENSA_STARTING = 102,
-	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 103,
-	CPUHP_AP_ARM_SDEI_STARTING = 104,
-	CPUHP_AP_ARM_VFP_STARTING = 105,
-	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 106,
-	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 107,
-	CPUHP_AP_PERF_ARM_ACPI_STARTING = 108,
-	CPUHP_AP_PERF_ARM_STARTING = 109,
-	CPUHP_AP_ARM_L2X0_STARTING = 110,
-	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 111,
-	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 112,
-	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 113,
-	CPUHP_AP_JCORE_TIMER_STARTING = 114,
-	CPUHP_AP_ARM_TWD_STARTING = 115,
-	CPUHP_AP_QCOM_TIMER_STARTING = 116,
-	CPUHP_AP_TEGRA_TIMER_STARTING = 117,
-	CPUHP_AP_ARMADA_TIMER_STARTING = 118,
-	CPUHP_AP_MARCO_TIMER_STARTING = 119,
-	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 120,
-	CPUHP_AP_ARC_TIMER_STARTING = 121,
-	CPUHP_AP_RISCV_TIMER_STARTING = 122,
-	CPUHP_AP_CSKY_TIMER_STARTING = 123,
-	CPUHP_AP_HYPERV_TIMER_STARTING = 124,
-	CPUHP_AP_KVM_STARTING = 125,
-	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 126,
-	CPUHP_AP_KVM_ARM_VGIC_STARTING = 127,
-	CPUHP_AP_KVM_ARM_TIMER_STARTING = 128,
-	CPUHP_AP_DUMMY_TIMER_STARTING = 129,
-	CPUHP_AP_ARM_XEN_STARTING = 130,
-	CPUHP_AP_ARM_KVMPV_STARTING = 131,
-	CPUHP_AP_ARM_CORESIGHT_STARTING = 132,
-	CPUHP_AP_ARM64_ISNDEP_STARTING = 133,
-	CPUHP_AP_SMPCFD_DYING = 134,
-	CPUHP_AP_X86_TBOOT_DYING = 135,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 136,
-	CPUHP_AP_ONLINE = 137,
-	CPUHP_TEARDOWN_CPU = 138,
-	CPUHP_AP_ONLINE_IDLE = 139,
-	CPUHP_AP_SMPBOOT_THREADS = 140,
-	CPUHP_AP_X86_VDSO_VMA_ONLINE = 141,
-	CPUHP_AP_IRQ_AFFINITY_ONLINE = 142,
-	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 143,
-	CPUHP_AP_X86_INTEL_EPB_ONLINE = 144,
-	CPUHP_AP_PERF_ONLINE = 145,
-	CPUHP_AP_PERF_X86_ONLINE = 146,
-	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 147,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 148,
-	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 149,
-	CPUHP_AP_PERF_X86_RAPL_ONLINE = 150,
-	CPUHP_AP_PERF_X86_CQM_ONLINE = 151,
-	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 152,
-	CPUHP_AP_PERF_S390_CF_ONLINE = 153,
-	CPUHP_AP_PERF_S390_SF_ONLINE = 154,
-	CPUHP_AP_PERF_ARM_CCI_ONLINE = 155,
-	CPUHP_AP_PERF_ARM_CCN_ONLINE = 156,
-	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 157,
-	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 158,
-	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 159,
-	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 160,
-	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 161,
-	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 162,
-	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 163,
-	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 164,
-	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 165,
-	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 166,
-	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 167,
-	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 168,
-	CPUHP_AP_WATCHDOG_ONLINE = 169,
-	CPUHP_AP_WORKQUEUE_ONLINE = 170,
-	CPUHP_AP_RCUTREE_ONLINE = 171,
-	CPUHP_AP_BASE_CACHEINFO_ONLINE = 172,
-	CPUHP_AP_ONLINE_DYN = 173,
-	CPUHP_AP_ONLINE_DYN_END = 203,
-	CPUHP_AP_X86_HPET_ONLINE = 204,
-	CPUHP_AP_X86_KVM_CLK_ONLINE = 205,
-	CPUHP_AP_ACTIVE = 206,
-	CPUHP_ONLINE = 207,
-};
-
-struct perf_regs {
-	__u64 abi;
-	struct pt_regs *regs;
-};
-
-struct kernel_cpustat {
-	u64 cpustat[10];
-};
-
-struct kernel_stat {
-	long unsigned int irqs_sum;
-	unsigned int softirqs[10];
-};
-
-struct u64_stats_sync {};
-
-struct bpf_insn {
-	__u8 code;
-	__u8 dst_reg: 4;
-	__u8 src_reg: 4;
-	__s16 off;
-	__s32 imm;
-};
-
-struct bpf_cgroup_storage_key {
-	__u64 cgroup_inode_id;
-	__u32 attach_type;
-};
-
-enum bpf_map_type {
-	BPF_MAP_TYPE_UNSPEC = 0,
-	BPF_MAP_TYPE_HASH = 1,
-	BPF_MAP_TYPE_ARRAY = 2,
-	BPF_MAP_TYPE_PROG_ARRAY = 3,
-	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
-	BPF_MAP_TYPE_PERCPU_HASH = 5,
-	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
-	BPF_MAP_TYPE_STACK_TRACE = 7,
-	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
-	BPF_MAP_TYPE_LRU_HASH = 9,
-	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
-	BPF_MAP_TYPE_LPM_TRIE = 11,
-	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
-	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
-	BPF_MAP_TYPE_DEVMAP = 14,
-	BPF_MAP_TYPE_SOCKMAP = 15,
-	BPF_MAP_TYPE_CPUMAP = 16,
-	BPF_MAP_TYPE_XSKMAP = 17,
-	BPF_MAP_TYPE_SOCKHASH = 18,
-	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
-	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
-	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
-	BPF_MAP_TYPE_QUEUE = 22,
-	BPF_MAP_TYPE_STACK = 23,
-	BPF_MAP_TYPE_SK_STORAGE = 24,
-	BPF_MAP_TYPE_DEVMAP_HASH = 25,
-};
-
-union bpf_attr {
-	struct {
-		__u32 map_type;
-		__u32 key_size;
-		__u32 value_size;
-		__u32 max_entries;
-		__u32 map_flags;
-		__u32 inner_map_fd;
-		__u32 numa_node;
-		char map_name[16];
-		__u32 map_ifindex;
-		__u32 btf_fd;
-		__u32 btf_key_type_id;
-		__u32 btf_value_type_id;
-	};
-	struct {
-		__u32 map_fd;
-		__u64 key;
-		union {
-			__u64 value;
-			__u64 next_key;
-		};
-		__u64 flags;
-	};
-	struct {
-		__u32 prog_type;
-		__u32 insn_cnt;
-		__u64 insns;
-		__u64 license;
-		__u32 log_level;
-		__u32 log_size;
-		__u64 log_buf;
-		__u32 kern_version;
-		__u32 prog_flags;
-		char prog_name[16];
-		__u32 prog_ifindex;
-		__u32 expected_attach_type;
-		__u32 prog_btf_fd;
-		__u32 func_info_rec_size;
-		__u64 func_info;
-		__u32 func_info_cnt;
-		__u32 line_info_rec_size;
-		__u64 line_info;
-		__u32 line_info_cnt;
-		__u32 attach_btf_id;
-		__u32 attach_prog_fd;
-	};
-	struct {
-		__u64 pathname;
-		__u32 bpf_fd;
-		__u32 file_flags;
-	};
-	struct {
-		__u32 target_fd;
-		__u32 attach_bpf_fd;
-		__u32 attach_type;
-		__u32 attach_flags;
-	};
-	struct {
-		__u32 prog_fd;
-		__u32 retval;
-		__u32 data_size_in;
-		__u32 data_size_out;
-		__u64 data_in;
-		__u64 data_out;
-		__u32 repeat;
-		__u32 duration;
-		__u32 ctx_size_in;
-		__u32 ctx_size_out;
-		__u64 ctx_in;
-		__u64 ctx_out;
-	} test;
-	struct {
-		union {
-			__u32 start_id;
-			__u32 prog_id;
-			__u32 map_id;
-			__u32 btf_id;
-		};
-		__u32 next_id;
-		__u32 open_flags;
-	};
-	struct {
-		__u32 bpf_fd;
-		__u32 info_len;
-		__u64 info;
-	} info;
-	struct {
-		__u32 target_fd;
-		__u32 attach_type;
-		__u32 query_flags;
-		__u32 attach_flags;
-		__u64 prog_ids;
-		__u32 prog_cnt;
-	} query;
-	struct {
-		__u64 name;
-		__u32 prog_fd;
-	} raw_tracepoint;
-	struct {
-		__u64 btf;
-		__u64 btf_log_buf;
-		__u32 btf_size;
-		__u32 btf_log_size;
-		__u32 btf_log_level;
-	};
-	struct {
-		__u32 pid;
-		__u32 fd;
-		__u32 flags;
-		__u32 buf_len;
-		__u64 buf;
-		__u32 prog_id;
-		__u32 fd_type;
-		__u64 probe_offset;
-		__u64 probe_addr;
-	} task_fd_query;
-};
-
-enum bpf_func_id {
-	BPF_FUNC_unspec = 0,
-	BPF_FUNC_map_lookup_elem = 1,
-	BPF_FUNC_map_update_elem = 2,
-	BPF_FUNC_map_delete_elem = 3,
-	BPF_FUNC_probe_read = 4,
-	BPF_FUNC_ktime_get_ns = 5,
-	BPF_FUNC_trace_printk = 6,
-	BPF_FUNC_get_prandom_u32 = 7,
-	BPF_FUNC_get_smp_processor_id = 8,
-	BPF_FUNC_skb_store_bytes = 9,
-	BPF_FUNC_l3_csum_replace = 10,
-	BPF_FUNC_l4_csum_replace = 11,
-	BPF_FUNC_tail_call = 12,
-	BPF_FUNC_clone_redirect = 13,
-	BPF_FUNC_get_current_pid_tgid = 14,
-	BPF_FUNC_get_current_uid_gid = 15,
-	BPF_FUNC_get_current_comm = 16,
-	BPF_FUNC_get_cgroup_classid = 17,
-	BPF_FUNC_skb_vlan_push = 18,
-	BPF_FUNC_skb_vlan_pop = 19,
-	BPF_FUNC_skb_get_tunnel_key = 20,
-	BPF_FUNC_skb_set_tunnel_key = 21,
-	BPF_FUNC_perf_event_read = 22,
-	BPF_FUNC_redirect = 23,
-	BPF_FUNC_get_route_realm = 24,
-	BPF_FUNC_perf_event_output = 25,
-	BPF_FUNC_skb_load_bytes = 26,
-	BPF_FUNC_get_stackid = 27,
-	BPF_FUNC_csum_diff = 28,
-	BPF_FUNC_skb_get_tunnel_opt = 29,
-	BPF_FUNC_skb_set_tunnel_opt = 30,
-	BPF_FUNC_skb_change_proto = 31,
-	BPF_FUNC_skb_change_type = 32,
-	BPF_FUNC_skb_under_cgroup = 33,
-	BPF_FUNC_get_hash_recalc = 34,
-	BPF_FUNC_get_current_task = 35,
-	BPF_FUNC_probe_write_user = 36,
-	BPF_FUNC_current_task_under_cgroup = 37,
-	BPF_FUNC_skb_change_tail = 38,
-	BPF_FUNC_skb_pull_data = 39,
-	BPF_FUNC_csum_update = 40,
-	BPF_FUNC_set_hash_invalid = 41,
-	BPF_FUNC_get_numa_node_id = 42,
-	BPF_FUNC_skb_change_head = 43,
-	BPF_FUNC_xdp_adjust_head = 44,
-	BPF_FUNC_probe_read_str = 45,
-	BPF_FUNC_get_socket_cookie = 46,
-	BPF_FUNC_get_socket_uid = 47,
-	BPF_FUNC_set_hash = 48,
-	BPF_FUNC_setsockopt = 49,
-	BPF_FUNC_skb_adjust_room = 50,
-	BPF_FUNC_redirect_map = 51,
-	BPF_FUNC_sk_redirect_map = 52,
-	BPF_FUNC_sock_map_update = 53,
-	BPF_FUNC_xdp_adjust_meta = 54,
-	BPF_FUNC_perf_event_read_value = 55,
-	BPF_FUNC_perf_prog_read_value = 56,
-	BPF_FUNC_getsockopt = 57,
-	BPF_FUNC_override_return = 58,
-	BPF_FUNC_sock_ops_cb_flags_set = 59,
-	BPF_FUNC_msg_redirect_map = 60,
-	BPF_FUNC_msg_apply_bytes = 61,
-	BPF_FUNC_msg_cork_bytes = 62,
-	BPF_FUNC_msg_pull_data = 63,
-	BPF_FUNC_bind = 64,
-	BPF_FUNC_xdp_adjust_tail = 65,
-	BPF_FUNC_skb_get_xfrm_state = 66,
-	BPF_FUNC_get_stack = 67,
-	BPF_FUNC_skb_load_bytes_relative = 68,
-	BPF_FUNC_fib_lookup = 69,
-	BPF_FUNC_sock_hash_update = 70,
-	BPF_FUNC_msg_redirect_hash = 71,
-	BPF_FUNC_sk_redirect_hash = 72,
-	BPF_FUNC_lwt_push_encap = 73,
-	BPF_FUNC_lwt_seg6_store_bytes = 74,
-	BPF_FUNC_lwt_seg6_adjust_srh = 75,
-	BPF_FUNC_lwt_seg6_action = 76,
-	BPF_FUNC_rc_repeat = 77,
-	BPF_FUNC_rc_keydown = 78,
-	BPF_FUNC_skb_cgroup_id = 79,
-	BPF_FUNC_get_current_cgroup_id = 80,
-	BPF_FUNC_get_local_storage = 81,
-	BPF_FUNC_sk_select_reuseport = 82,
-	BPF_FUNC_skb_ancestor_cgroup_id = 83,
-	BPF_FUNC_sk_lookup_tcp = 84,
-	BPF_FUNC_sk_lookup_udp = 85,
-	BPF_FUNC_sk_release = 86,
-	BPF_FUNC_map_push_elem = 87,
-	BPF_FUNC_map_pop_elem = 88,
-	BPF_FUNC_map_peek_elem = 89,
-	BPF_FUNC_msg_push_data = 90,
-	BPF_FUNC_msg_pop_data = 91,
-	BPF_FUNC_rc_pointer_rel = 92,
-	BPF_FUNC_spin_lock = 93,
-	BPF_FUNC_spin_unlock = 94,
-	BPF_FUNC_sk_fullsock = 95,
-	BPF_FUNC_tcp_sock = 96,
-	BPF_FUNC_skb_ecn_set_ce = 97,
-	BPF_FUNC_get_listener_sock = 98,
-	BPF_FUNC_skc_lookup_tcp = 99,
-	BPF_FUNC_tcp_check_syncookie = 100,
-	BPF_FUNC_sysctl_get_name = 101,
-	BPF_FUNC_sysctl_get_current_value = 102,
-	BPF_FUNC_sysctl_get_new_value = 103,
-	BPF_FUNC_sysctl_set_new_value = 104,
-	BPF_FUNC_strtol = 105,
-	BPF_FUNC_strtoul = 106,
-	BPF_FUNC_sk_storage_get = 107,
-	BPF_FUNC_sk_storage_delete = 108,
-	BPF_FUNC_send_signal = 109,
-	BPF_FUNC_tcp_gen_syncookie = 110,
-	BPF_FUNC_skb_output = 111,
-	BPF_FUNC_probe_read_user = 112,
-	BPF_FUNC_probe_read_kernel = 113,
-	BPF_FUNC_probe_read_user_str = 114,
-	BPF_FUNC_probe_read_kernel_str = 115,
-	__BPF_FUNC_MAX_ID = 116,
-};
-
-struct bpf_func_info {
-	__u32 insn_off;
-	__u32 type_id;
-};
-
-struct bpf_line_info {
-	__u32 insn_off;
-	__u32 file_name_off;
-	__u32 line_off;
-	__u32 line_col;
-};
-
-struct bpf_map;
-
-struct btf;
-
-struct btf_type;
-
-struct bpf_prog_aux;
-
-struct bpf_map_ops {
-	int (*map_alloc_check)(union bpf_attr *);
-	struct bpf_map * (*map_alloc)(union bpf_attr *);
-	void (*map_release)(struct bpf_map *, struct file *);
-	void (*map_free)(struct bpf_map *);
-	int (*map_get_next_key)(struct bpf_map *, void *, void *);
-	void (*map_release_uref)(struct bpf_map *);
-	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
-	void * (*map_lookup_elem)(struct bpf_map *, void *);
-	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_map *, void *);
-	int (*map_push_elem)(struct bpf_map *, void *, u64);
-	int (*map_pop_elem)(struct bpf_map *, void *);
-	int (*map_peek_elem)(struct bpf_map *, void *);
-	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
-	void (*map_fd_put_ptr)(void *);
-	u32 (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
-	u32 (*map_fd_sys_lookup_elem)(void *);
-	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
-	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
-	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
-	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
-	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
-	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
-};
-
-struct bpf_map_memory {
-	u32 pages;
-	struct user_struct *user;
-};
-
-struct bpf_map {
-	const struct bpf_map_ops *ops;
-	struct bpf_map *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	bool unpriv_array;
-	bool frozen;
-	long: 48;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_header {
-	__u16 magic;
-	__u8 version;
-	__u8 flags;
-	__u32 hdr_len;
-	__u32 type_off;
-	__u32 type_len;
-	__u32 str_off;
-	__u32 str_len;
-};
-
-struct btf {
-	void *data;
-	struct btf_type **types;
-	u32 *resolved_ids;
-	u32 *resolved_sizes;
-	const char *strings;
-	void *nohdr_data;
-	struct btf_header hdr;
-	u32 nr_types;
-	u32 types_size;
-	u32 data_size;
-	refcount_t refcnt;
-	u32 id;
-	struct callback_head rcu;
-};
-
-struct btf_type {
-	__u32 name_off;
-	__u32 info;
-	union {
-		__u32 size;
-		__u32 type;
-	};
-};
-
-enum bpf_tramp_prog_type {
-	BPF_TRAMP_FENTRY = 0,
-	BPF_TRAMP_FEXIT = 1,
-	BPF_TRAMP_MAX = 2,
-};
-
-struct bpf_trampoline;
-
-struct bpf_jit_poke_descriptor;
-
-struct bpf_prog_ops;
-
-struct bpf_prog_offload;
-
-struct bpf_func_info_aux;
-
-struct bpf_prog_stats;
-
-struct bpf_prog_aux {
-	atomic64_t refcnt;
-	u32 used_map_cnt;
-	u32 max_ctx_offset;
-	u32 max_pkt_offset;
-	u32 max_tp_access;
-	u32 stack_depth;
-	u32 id;
-	u32 func_cnt;
-	u32 func_idx;
-	u32 attach_btf_id;
-	struct bpf_prog *linked_prog;
-	bool verifier_zext;
-	bool offload_requested;
-	bool attach_btf_trace;
-	bool func_proto_unreliable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct bpf_trampoline *trampoline;
-	struct hlist_node tramp_hlist;
-	const struct btf_type *attach_func_proto;
-	const char *attach_func_name;
-	struct bpf_prog **func;
-	void *jit_data;
-	struct bpf_jit_poke_descriptor *poke_tab;
-	u32 size_poke_tab;
-	struct latch_tree_node ksym_tnode;
-	struct list_head ksym_lnode;
-	const struct bpf_prog_ops *ops;
-	struct bpf_map **used_maps;
-	struct bpf_prog *prog;
-	struct user_struct *user;
-	u64 load_time;
-	struct bpf_map *cgroup_storage[2];
-	char name[16];
-	void *security;
-	struct bpf_prog_offload *offload;
-	struct btf *btf;
-	struct bpf_func_info *func_info;
-	struct bpf_func_info_aux *func_info_aux;
-	struct bpf_line_info *linfo;
-	void **jited_linfo;
-	u32 func_info_cnt;
-	u32 nr_linfo;
-	u32 linfo_idx;
-	u32 num_exentries;
-	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
-	union {
-		struct work_struct work;
-		struct callback_head rcu;
-	};
-};
-
-enum bpf_prog_type {
-	BPF_PROG_TYPE_UNSPEC = 0,
-	BPF_PROG_TYPE_SOCKET_FILTER = 1,
-	BPF_PROG_TYPE_KPROBE = 2,
-	BPF_PROG_TYPE_SCHED_CLS = 3,
-	BPF_PROG_TYPE_SCHED_ACT = 4,
-	BPF_PROG_TYPE_TRACEPOINT = 5,
-	BPF_PROG_TYPE_XDP = 6,
-	BPF_PROG_TYPE_PERF_EVENT = 7,
-	BPF_PROG_TYPE_CGROUP_SKB = 8,
-	BPF_PROG_TYPE_CGROUP_SOCK = 9,
-	BPF_PROG_TYPE_LWT_IN = 10,
-	BPF_PROG_TYPE_LWT_OUT = 11,
-	BPF_PROG_TYPE_LWT_XMIT = 12,
-	BPF_PROG_TYPE_SOCK_OPS = 13,
-	BPF_PROG_TYPE_SK_SKB = 14,
-	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
-	BPF_PROG_TYPE_SK_MSG = 16,
-	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
-	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
-	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
-	BPF_PROG_TYPE_LIRC_MODE2 = 20,
-	BPF_PROG_TYPE_SK_REUSEPORT = 21,
-	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
-	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
-	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
-	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
-	BPF_PROG_TYPE_TRACING = 26,
-};
-
-enum bpf_attach_type {
-	BPF_CGROUP_INET_INGRESS = 0,
-	BPF_CGROUP_INET_EGRESS = 1,
-	BPF_CGROUP_INET_SOCK_CREATE = 2,
-	BPF_CGROUP_SOCK_OPS = 3,
-	BPF_SK_SKB_STREAM_PARSER = 4,
-	BPF_SK_SKB_STREAM_VERDICT = 5,
-	BPF_CGROUP_DEVICE = 6,
-	BPF_SK_MSG_VERDICT = 7,
-	BPF_CGROUP_INET4_BIND = 8,
-	BPF_CGROUP_INET6_BIND = 9,
-	BPF_CGROUP_INET4_CONNECT = 10,
-	BPF_CGROUP_INET6_CONNECT = 11,
-	BPF_CGROUP_INET4_POST_BIND = 12,
-	BPF_CGROUP_INET6_POST_BIND = 13,
-	BPF_CGROUP_UDP4_SENDMSG = 14,
-	BPF_CGROUP_UDP6_SENDMSG = 15,
-	BPF_LIRC_MODE2 = 16,
-	BPF_FLOW_DISSECTOR = 17,
-	BPF_CGROUP_SYSCTL = 18,
-	BPF_CGROUP_UDP4_RECVMSG = 19,
-	BPF_CGROUP_UDP6_RECVMSG = 20,
-	BPF_CGROUP_GETSOCKOPT = 21,
-	BPF_CGROUP_SETSOCKOPT = 22,
-	BPF_TRACE_RAW_TP = 23,
-	BPF_TRACE_FENTRY = 24,
-	BPF_TRACE_FEXIT = 25,
-	__MAX_BPF_ATTACH_TYPE = 26,
-};
-
-struct sock_filter {
-	__u16 code;
-	__u8 jt;
-	__u8 jf;
-	__u32 k;
-};
-
-struct sock_fprog_kern;
-
-struct bpf_prog {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	union {
-		struct sock_filter insns[0];
-		struct bpf_insn insnsi[0];
-	};
-};
-
-enum bpf_arg_type {
-	ARG_DONTCARE = 0,
-	ARG_CONST_MAP_PTR = 1,
-	ARG_PTR_TO_MAP_KEY = 2,
-	ARG_PTR_TO_MAP_VALUE = 3,
-	ARG_PTR_TO_UNINIT_MAP_VALUE = 4,
-	ARG_PTR_TO_MAP_VALUE_OR_NULL = 5,
-	ARG_PTR_TO_MEM = 6,
-	ARG_PTR_TO_MEM_OR_NULL = 7,
-	ARG_PTR_TO_UNINIT_MEM = 8,
-	ARG_CONST_SIZE = 9,
-	ARG_CONST_SIZE_OR_ZERO = 10,
-	ARG_PTR_TO_CTX = 11,
-	ARG_ANYTHING = 12,
-	ARG_PTR_TO_SPIN_LOCK = 13,
-	ARG_PTR_TO_SOCK_COMMON = 14,
-	ARG_PTR_TO_INT = 15,
-	ARG_PTR_TO_LONG = 16,
-	ARG_PTR_TO_SOCKET = 17,
-	ARG_PTR_TO_BTF_ID = 18,
-};
-
-enum bpf_return_type {
-	RET_INTEGER = 0,
-	RET_VOID = 1,
-	RET_PTR_TO_MAP_VALUE = 2,
-	RET_PTR_TO_MAP_VALUE_OR_NULL = 3,
-	RET_PTR_TO_SOCKET_OR_NULL = 4,
-	RET_PTR_TO_TCP_SOCK_OR_NULL = 5,
-	RET_PTR_TO_SOCK_COMMON_OR_NULL = 6,
-};
-
-struct bpf_func_proto {
-	u64 (*func)(u64, u64, u64, u64, u64);
-	bool gpl_only;
-	bool pkt_access;
-	enum bpf_return_type ret_type;
-	union {
-		struct {
-			enum bpf_arg_type arg1_type;
-			enum bpf_arg_type arg2_type;
-			enum bpf_arg_type arg3_type;
-			enum bpf_arg_type arg4_type;
-			enum bpf_arg_type arg5_type;
-		};
-		enum bpf_arg_type arg_type[5];
-	};
-	int *btf_id;
-};
-
-enum bpf_access_type {
-	BPF_READ = 1,
-	BPF_WRITE = 2,
-};
-
-enum bpf_reg_type {
-	NOT_INIT = 0,
-	SCALAR_VALUE = 1,
-	PTR_TO_CTX = 2,
-	CONST_PTR_TO_MAP = 3,
-	PTR_TO_MAP_VALUE = 4,
-	PTR_TO_MAP_VALUE_OR_NULL = 5,
-	PTR_TO_STACK = 6,
-	PTR_TO_PACKET_META = 7,
-	PTR_TO_PACKET = 8,
-	PTR_TO_PACKET_END = 9,
-	PTR_TO_FLOW_KEYS = 10,
-	PTR_TO_SOCKET = 11,
-	PTR_TO_SOCKET_OR_NULL = 12,
-	PTR_TO_SOCK_COMMON = 13,
-	PTR_TO_SOCK_COMMON_OR_NULL = 14,
-	PTR_TO_TCP_SOCK = 15,
-	PTR_TO_TCP_SOCK_OR_NULL = 16,
-	PTR_TO_TP_BUFFER = 17,
-	PTR_TO_XDP_SOCK = 18,
-	PTR_TO_BTF_ID = 19,
-};
-
-struct bpf_verifier_log;
-
-struct bpf_insn_access_aux {
-	enum bpf_reg_type reg_type;
-	union {
-		int ctx_field_size;
-		u32 btf_id;
-	};
-	struct bpf_verifier_log *log;
-};
-
-struct bpf_prog_ops {
-	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
-};
-
-struct bpf_verifier_ops {
-	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
-	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
-	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
-	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
-	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-};
-
-struct net_device;
-
-struct bpf_offload_dev;
-
-struct bpf_prog_offload {
-	struct bpf_prog *prog;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	void *dev_priv;
-	struct list_head offloads;
-	bool dev_state;
-	bool opt_failed;
-	void *jited_image;
-	u32 jited_len;
-};
-
-struct bpf_prog_stats {
-	u64 cnt;
-	u64 nsecs;
-	struct u64_stats_sync syncp;
-};
-
-struct btf_func_model {
-	u8 ret_size;
-	u8 nr_args;
-	u8 arg_size[12];
-};
-
-struct bpf_trampoline {
-	struct hlist_node hlist;
-	struct mutex mutex;
-	refcount_t refcnt;
-	u64 key;
-	struct {
-		struct btf_func_model model;
-		void *addr;
-		bool ftrace_managed;
-	} func;
-	struct hlist_head progs_hlist[2];
-	int progs_cnt[2];
-	void *image;
-	u64 selector;
-};
-
-struct bpf_func_info_aux {
-	bool unreliable;
-};
-
-struct bpf_jit_poke_descriptor {
-	void *ip;
-	union {
-		struct {
-			struct bpf_map *map;
-			u32 key;
-		} tail_call;
-	};
-	bool ip_stable;
-	u8 adj_off;
-	u16 reason;
-};
-
-struct bpf_cgroup_storage;
-
-struct bpf_prog_array_item {
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_storage_buffer;
-
-struct bpf_cgroup_storage_map;
-
-struct bpf_cgroup_storage {
-	union {
-		struct bpf_storage_buffer *buf;
-		void *percpu_buf;
-	};
-	struct bpf_cgroup_storage_map *map;
-	struct bpf_cgroup_storage_key key;
-	struct list_head list;
-	struct rb_node node;
-	struct callback_head rcu;
-};
-
-struct bpf_prog_array {
-	struct callback_head rcu;
-	struct bpf_prog_array_item items[0];
-};
-
-struct bpf_storage_buffer {
-	struct callback_head rcu;
-	char data[0];
-};
-
-struct cgroup_bpf {
-	struct bpf_prog_array *effective[26];
-	struct list_head progs[26];
-	u32 flags[26];
-	struct bpf_prog_array *inactive;
-	struct percpu_ref refcnt;
-	struct work_struct release_work;
-};
-
-struct psi_group {};
-
-struct cgroup_file {
-	struct kernfs_node *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct cgroup_subsys;
-
-struct cgroup_subsys_state {
-	struct cgroup *cgroup;
-	struct cgroup_subsys *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state *parent;
-};
-
-struct cgroup_base_stat {
-	struct task_cputime cputime;
-};
-
-struct cgroup_freezer_state {
-	bool freeze;
-	int e_freeze;
-	int nr_frozen_descendants;
-	int nr_frozen_tasks;
-};
-
-struct cgroup_root;
-
-struct cgroup_rstat_cpu;
-
-struct cgroup {
-	struct cgroup_subsys_state self;
-	long unsigned int flags;
-	int level;
-	int max_depth;
-	int nr_descendants;
-	int nr_dying_descendants;
-	int max_descendants;
-	int nr_populated_csets;
-	int nr_populated_domain_children;
-	int nr_populated_threaded_children;
-	int nr_threaded_children;
-	struct kernfs_node *kn;
-	struct cgroup_file procs_file;
-	struct cgroup_file events_file;
-	u16 subtree_control;
-	u16 subtree_ss_mask;
-	u16 old_subtree_control;
-	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state *subsys[4];
-	struct cgroup_root *root;
-	struct list_head cset_links;
-	struct list_head e_csets[4];
-	struct cgroup *dom_cgrp;
-	struct cgroup *old_dom_cgrp;
-	struct cgroup_rstat_cpu *rstat_cpu;
-	struct list_head rstat_css_list;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup_base_stat bstat;
-	struct prev_cputime prev_cputime;
-	struct list_head pidlists;
-	struct mutex pidlist_mutex;
-	wait_queue_head_t offline_waitq;
-	struct work_struct release_agent_work;
-	struct psi_group psi;
-	struct cgroup_bpf bpf;
-	atomic_t congestion_count;
-	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
-};
-
-struct cgroup_taskset;
-
-struct cftype;
-
-struct cgroup_subsys {
-	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
-	int (*css_online)(struct cgroup_subsys_state *);
-	void (*css_offline)(struct cgroup_subsys_state *);
-	void (*css_released)(struct cgroup_subsys_state *);
-	void (*css_free)(struct cgroup_subsys_state *);
-	void (*css_reset)(struct cgroup_subsys_state *);
-	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
-	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
-	int (*can_attach)(struct cgroup_taskset *);
-	void (*cancel_attach)(struct cgroup_taskset *);
-	void (*attach)(struct cgroup_taskset *);
-	void (*post_attach)();
-	int (*can_fork)(struct task_struct *);
-	void (*cancel_fork)(struct task_struct *);
-	void (*fork)(struct task_struct *);
-	void (*exit)(struct task_struct *);
-	void (*release)(struct task_struct *);
-	void (*bind)(struct cgroup_subsys_state *);
-	bool early_init: 1;
-	bool implicit_on_dfl: 1;
-	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
-	int id;
-	const char *name;
-	const char *legacy_name;
-	struct cgroup_root *root;
-	struct idr css_idr;
-	struct list_head cfts;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	unsigned int depends_on;
-};
-
-struct cgroup_rstat_cpu {
-	struct u64_stats_sync bsync;
-	struct cgroup_base_stat bstat;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup *updated_children;
-	struct cgroup *updated_next;
-};
-
-struct cgroup_root {
-	struct kernfs_root *kf_root;
-	unsigned int subsys_mask;
-	int hierarchy_id;
-	struct cgroup cgrp;
-	u64 cgrp_ancestor_id_storage;
-	atomic_t nr_cgrps;
-	struct list_head root_list;
-	unsigned int flags;
-	char release_agent_path[4096];
-	char name[64];
-};
-
-struct cftype {
-	char name[64];
-	long unsigned int private;
-	size_t max_write_len;
-	unsigned int flags;
-	unsigned int file_offset;
-	struct cgroup_subsys *ss;
-	struct list_head node;
-	struct kernfs_ops *kf_ops;
-	int (*open)(struct kernfs_open_file *);
-	void (*release)(struct kernfs_open_file *);
-	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
-	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
-	int (*seq_show)(struct seq_file *, void *);
-	void * (*seq_start)(struct seq_file *, loff_t *);
-	void * (*seq_next)(struct seq_file *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file *, void *);
-	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
-	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
-	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
-};
-
-struct perf_callchain_entry {
-	__u64 nr;
-	__u64 ip[0];
-};
-
-typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);
-
-struct perf_raw_frag {
-	union {
-		struct perf_raw_frag *next;
-		long unsigned int pad;
-	};
-	perf_copy_f copy;
-	void *data;
-	u32 size;
-} __attribute__((packed));
-
-struct perf_raw_record {
-	struct perf_raw_frag frag;
-	u32 size;
-};
-
-struct perf_branch_stack {
-	__u64 nr;
-	struct perf_branch_entry entries[0];
-};
-
-struct perf_cpu_context {
-	struct perf_event_context ctx;
-	struct perf_event_context *task_ctx;
-	int active_oncpu;
-	int exclusive;
-	raw_spinlock_t hrtimer_lock;
-	struct hrtimer hrtimer;
-	ktime_t hrtimer_interval;
-	unsigned int hrtimer_active;
-	struct list_head sched_cb_entry;
-	int sched_cb_usage;
-	int online;
-};
-
-struct perf_output_handle {
-	struct perf_event *event;
-	struct ring_buffer *rb;
-	long unsigned int wakeup;
-	long unsigned int size;
-	u64 aux_flags;
-	union {
-		void *addr;
-		long unsigned int head;
-	};
-	int page;
-};
-
-struct perf_addr_filter_range {
-	long unsigned int start;
-	long unsigned int size;
-};
-
-struct perf_sample_data {
-	u64 addr;
-	struct perf_raw_record *raw;
-	struct perf_branch_stack *br_stack;
-	u64 period;
-	u64 weight;
-	u64 txn;
-	union perf_mem_data_src data_src;
-	u64 type;
-	u64 ip;
-	struct {
-		u32 pid;
-		u32 tid;
-	} tid_entry;
-	u64 time;
-	u64 id;
-	u64 stream_id;
-	struct {
-		u32 cpu;
-		u32 reserved;
-	} cpu_entry;
-	struct perf_callchain_entry *callchain;
-	u64 aux_size;
-	struct perf_regs regs_user;
-	struct pt_regs regs_user_copy;
-	struct perf_regs regs_intr;
-	u64 stack_user_size;
-	u64 phys_addr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct trace_entry {
-	short unsigned int type;
-	unsigned char flags;
-	unsigned char preempt_count;
-	int pid;
-};
-
-struct trace_array;
-
-struct tracer;
-
-struct trace_buffer;
-
-struct ring_buffer_iter;
-
-struct trace_iterator {
-	struct trace_array *tr;
-	struct tracer *trace;
-	struct trace_buffer *trace_buffer;
-	void *private;
-	int cpu_file;
-	struct mutex mutex;
-	struct ring_buffer_iter **buffer_iter;
-	long unsigned int iter_flags;
-	struct trace_seq tmp_seq;
-	cpumask_var_t started;
-	bool snapshot;
-	struct trace_seq seq;
-	struct trace_entry *ent;
-	long unsigned int lost_events;
-	int leftover;
-	int ent_size;
-	int cpu;
-	u64 ts;
-	loff_t pos;
-	long int idx;
-};
-
-enum print_line_t {
-	TRACE_TYPE_PARTIAL_LINE = 0,
-	TRACE_TYPE_HANDLED = 1,
-	TRACE_TYPE_UNHANDLED = 2,
-	TRACE_TYPE_NO_CONSUME = 3,
-};
-
-typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
-
-struct trace_event_functions {
-	trace_print_func trace;
-	trace_print_func raw;
-	trace_print_func hex;
-	trace_print_func binary;
-};
-
-enum trace_reg {
-	TRACE_REG_REGISTER = 0,
-	TRACE_REG_UNREGISTER = 1,
-	TRACE_REG_PERF_REGISTER = 2,
-	TRACE_REG_PERF_UNREGISTER = 3,
-	TRACE_REG_PERF_OPEN = 4,
-	TRACE_REG_PERF_CLOSE = 5,
-	TRACE_REG_PERF_ADD = 6,
-	TRACE_REG_PERF_DEL = 7,
-};
-
-struct trace_event_class {
-	const char *system;
-	void *probe;
-	void *perf_probe;
-	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
-	int (*define_fields)(struct trace_event_call *);
-	struct list_head * (*get_fields)(struct trace_event_call *);
-	struct list_head fields;
-	int (*raw_init)(struct trace_event_call *);
-};
-
-struct trace_event_file;
-
-struct trace_event_buffer {
-	struct ring_buffer *buffer;
-	struct ring_buffer_event *event;
-	struct trace_event_file *trace_file;
-	void *entry;
-	long unsigned int flags;
-	int pc;
-};
-
-struct trace_subsystem_dir;
-
-struct trace_event_file {
-	struct list_head list;
-	struct trace_event_call *event_call;
-	struct event_filter *filter;
-	struct dentry *dir;
-	struct trace_array *tr;
-	struct trace_subsystem_dir *system;
-	struct list_head triggers;
-	long unsigned int flags;
-	atomic_t sm_ref;
-	atomic_t tm_ref;
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED_BIT = 0,
-	TRACE_EVENT_FL_CAP_ANY_BIT = 1,
-	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
-	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
-	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
-	TRACE_EVENT_FL_KPROBE_BIT = 5,
-	TRACE_EVENT_FL_UPROBE_BIT = 6,
-};
-
-enum {
-	TRACE_EVENT_FL_FILTERED = 1,
-	TRACE_EVENT_FL_CAP_ANY = 2,
-	TRACE_EVENT_FL_NO_SET_FILTER = 4,
-	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
-	TRACE_EVENT_FL_TRACEPOINT = 16,
-	TRACE_EVENT_FL_KPROBE = 32,
-	TRACE_EVENT_FL_UPROBE = 64,
-};
-
-enum {
-	EVENT_FILE_FL_ENABLED_BIT = 0,
-	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
-	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
-	EVENT_FILE_FL_FILTERED_BIT = 3,
-	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
-	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
-	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
-	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
-	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
-	EVENT_FILE_FL_PID_FILTER_BIT = 9,
-	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
-};
-
-enum {
-	EVENT_FILE_FL_ENABLED = 1,
-	EVENT_FILE_FL_RECORDED_CMD = 2,
-	EVENT_FILE_FL_RECORDED_TGID = 4,
-	EVENT_FILE_FL_FILTERED = 8,
-	EVENT_FILE_FL_NO_SET_FILTER = 16,
-	EVENT_FILE_FL_SOFT_MODE = 32,
-	EVENT_FILE_FL_SOFT_DISABLED = 64,
-	EVENT_FILE_FL_TRIGGER_MODE = 128,
-	EVENT_FILE_FL_TRIGGER_COND = 256,
-	EVENT_FILE_FL_PID_FILTER = 512,
-	EVENT_FILE_FL_WAS_ENABLED = 1024,
-};
-
-enum {
-	FILTER_OTHER = 0,
-	FILTER_STATIC_STRING = 1,
-	FILTER_DYN_STRING = 2,
-	FILTER_PTR_STRING = 3,
-	FILTER_TRACE_FN = 4,
-	FILTER_COMM = 5,
-	FILTER_CPU = 6,
-};
-
-struct property {
-	char *name;
-	int length;
-	void *value;
-	struct property *next;
-};
-
-struct irq_fwspec {
-	struct fwnode_handle *fwnode;
-	int param_count;
-	u32 param[16];
-};
-
-struct irq_data;
-
-struct irq_domain_ops {
-	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
-	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
-	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
-	void (*unmap)(struct irq_domain *, unsigned int);
-	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);
-	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
-	void (*free)(struct irq_domain *, unsigned int, unsigned int);
-	int (*activate)(struct irq_domain *, struct irq_data *, bool);
-	void (*deactivate)(struct irq_domain *, struct irq_data *);
-	int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);
-};
-
-struct acpi_table_header {
-	char signature[4];
-	u32 length;
-	u8 revision;
-	u8 checksum;
-	char oem_id[6];
-	char oem_table_id[8];
-	u32 oem_revision;
-	char asl_compiler_id[4];
-	u32 asl_compiler_revision;
-};
-
-struct acpi_generic_address {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_table_fadt {
-	struct acpi_table_header header;
-	u32 facs;
-	u32 dsdt;
-	u8 model;
-	u8 preferred_profile;
-	u16 sci_interrupt;
-	u32 smi_command;
-	u8 acpi_enable;
-	u8 acpi_disable;
-	u8 s4_bios_request;
-	u8 pstate_control;
-	u32 pm1a_event_block;
-	u32 pm1b_event_block;
-	u32 pm1a_control_block;
-	u32 pm1b_control_block;
-	u32 pm2_control_block;
-	u32 pm_timer_block;
-	u32 gpe0_block;
-	u32 gpe1_block;
-	u8 pm1_event_length;
-	u8 pm1_control_length;
-	u8 pm2_control_length;
-	u8 pm_timer_length;
-	u8 gpe0_block_length;
-	u8 gpe1_block_length;
-	u8 gpe1_base;
-	u8 cst_control;
-	u16 c2_latency;
-	u16 c3_latency;
-	u16 flush_size;
-	u16 flush_stride;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 day_alarm;
-	u8 month_alarm;
-	u8 century;
-	u16 boot_flags;
-	u8 reserved;
-	u32 flags;
-	struct acpi_generic_address reset_register;
-	u8 reset_value;
-	u16 arm_boot_flags;
-	u8 minor_revision;
-	u64 Xfacs;
-	u64 Xdsdt;
-	struct acpi_generic_address xpm1a_event_block;
-	struct acpi_generic_address xpm1b_event_block;
-	struct acpi_generic_address xpm1a_control_block;
-	struct acpi_generic_address xpm1b_control_block;
-	struct acpi_generic_address xpm2_control_block;
-	struct acpi_generic_address xpm_timer_block;
-	struct acpi_generic_address xgpe0_block;
-	struct acpi_generic_address xgpe1_block;
-	struct acpi_generic_address sleep_control;
-	struct acpi_generic_address sleep_status;
-	u64 hypervisor_id;
-} __attribute__((packed));
-
-enum acpi_irq_model_id {
-	ACPI_IRQ_MODEL_PIC = 0,
-	ACPI_IRQ_MODEL_IOAPIC = 1,
-	ACPI_IRQ_MODEL_IOSAPIC = 2,
-	ACPI_IRQ_MODEL_PLATFORM = 3,
-	ACPI_IRQ_MODEL_GIC = 4,
-	ACPI_IRQ_MODEL_COUNT = 5,
-};
-
-enum con_scroll {
-	SM_UP = 0,
-	SM_DOWN = 1,
-};
-
-struct vc_data;
-
-struct console_font;
-
-struct consw {
-	struct module *owner;
-	const char * (*con_startup)();
-	void (*con_init)(struct vc_data *, int);
-	void (*con_deinit)(struct vc_data *);
-	void (*con_clear)(struct vc_data *, int, int, int, int);
-	void (*con_putc)(struct vc_data *, int, int, int);
-	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
-	void (*con_cursor)(struct vc_data *, int);
-	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
-	int (*con_switch)(struct vc_data *);
-	int (*con_blank)(struct vc_data *, int, int);
-	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
-	int (*con_font_get)(struct vc_data *, struct console_font *);
-	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
-	int (*con_font_copy)(struct vc_data *, int);
-	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
-	void (*con_set_palette)(struct vc_data *, const unsigned char *);
-	void (*con_scrolldelta)(struct vc_data *, int);
-	int (*con_set_origin)(struct vc_data *);
-	void (*con_save_screen)(struct vc_data *);
-	u8 (*con_build_attr)(struct vc_data *, u8, u8, u8, u8, u8, u8);
-	void (*con_invert_region)(struct vc_data *, u16 *, int);
-	u16 * (*con_screen_pos)(struct vc_data *, int);
-	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
-	void (*con_flush_scrollback)(struct vc_data *);
-	int (*con_debug_enter)(struct vc_data *);
-	int (*con_debug_leave)(struct vc_data *);
-};
-
-struct tty_driver;
-
-struct console {
-	char name[16];
-	void (*write)(struct console *, const char *, unsigned int);
-	int (*read)(struct console *, char *, unsigned int);
-	struct tty_driver * (*device)(struct console *, int *);
-	void (*unblank)();
-	int (*setup)(struct console *, char *);
-	int (*match)(struct console *, char *, int, char *);
-	short int flags;
-	short int index;
-	int cflag;
-	void *data;
-	struct console *next;
-};
-
-struct fprop_global {
-	struct percpu_counter events;
-	unsigned int period;
-	seqcount_t sequence;
-};
-
-enum wb_stat_item {
-	WB_RECLAIMABLE = 0,
-	WB_WRITEBACK = 1,
-	WB_DIRTIED = 2,
-	WB_WRITTEN = 3,
-	NR_WB_STAT_ITEMS = 4,
-};
-
-struct bdi_writeback_congested {
-	long unsigned int state;
-	refcount_t refcnt;
-};
-
-enum stat_group {
-	STAT_READ = 0,
-	STAT_WRITE = 1,
-	STAT_DISCARD = 2,
-	STAT_FLUSH = 3,
-	NR_STAT_GROUPS = 4,
-};
-
-struct disk_stats {
-	u64 nsecs[4];
-	long unsigned int sectors[4];
-	long unsigned int ios[4];
-	long unsigned int merges[4];
-	long unsigned int io_ticks;
-	long unsigned int time_in_queue;
-	local_t in_flight[2];
-};
-
-struct partition_meta_info {
-	char uuid[37];
-	u8 volname[64];
-};
-
-struct disk_part_tbl {
-	struct callback_head callback_head;
-	int len;
-	struct hd_struct *last_lookup;
-	struct hd_struct *part[0];
-};
-
-struct blk_zone;
-
-typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
-
-struct hd_geometry;
-
-struct pr_ops;
-
-struct block_device_operations {
-	int (*open)(struct block_device *, fmode_t);
-	void (*release)(struct gendisk *, fmode_t);
-	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
-	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	unsigned int (*check_events)(struct gendisk *, unsigned int);
-	int (*media_changed)(struct gendisk *);
-	void (*unlock_native_capacity)(struct gendisk *);
-	int (*revalidate_disk)(struct gendisk *);
-	int (*getgeo)(struct block_device *, struct hd_geometry *);
-	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
-	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
-	struct module *owner;
-	const struct pr_ops *pr_ops;
-};
-
-struct sg_io_v4 {
-	__s32 guard;
-	__u32 protocol;
-	__u32 subprotocol;
-	__u32 request_len;
-	__u64 request;
-	__u64 request_tag;
-	__u32 request_attr;
-	__u32 request_priority;
-	__u32 request_extra;
-	__u32 max_response_len;
-	__u64 response;
-	__u32 dout_iovec_count;
-	__u32 dout_xfer_len;
-	__u32 din_iovec_count;
-	__u32 din_xfer_len;
-	__u64 dout_xferp;
-	__u64 din_xferp;
-	__u32 timeout;
-	__u32 flags;
-	__u64 usr_ptr;
-	__u32 spare_in;
-	__u32 driver_status;
-	__u32 transport_status;
-	__u32 device_status;
-	__u32 retry_delay;
-	__u32 info;
-	__u32 duration;
-	__u32 response_len;
-	__s32 din_resid;
-	__s32 dout_resid;
-	__u64 generated_tag;
-	__u32 spare_out;
-	__u32 padding;
-};
-
-struct bsg_ops {
-	int (*check_proto)(struct sg_io_v4 *);
-	int (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);
-	int (*complete_rq)(struct request *, struct sg_io_v4 *);
-	void (*free_rq)(struct request *);
-};
-
-typedef __u32 req_flags_t;
-
-typedef void rq_end_io_fn(struct request *, blk_status_t);
-
-enum mq_rq_state {
-	MQ_RQ_IDLE = 0,
-	MQ_RQ_IN_FLIGHT = 1,
-	MQ_RQ_COMPLETE = 2,
-};
-
-struct request {
-	struct request_queue *q;
-	struct blk_mq_ctx *mq_ctx;
-	struct blk_mq_hw_ctx *mq_hctx;
-	unsigned int cmd_flags;
-	req_flags_t rq_flags;
-	int tag;
-	int internal_tag;
-	unsigned int __data_len;
-	sector_t __sector;
-	struct bio *bio;
-	struct bio *biotail;
-	struct list_head queuelist;
-	union {
-		struct hlist_node hash;
-		struct list_head ipi_list;
-	};
-	union {
-		struct rb_node rb_node;
-		struct bio_vec special_vec;
-		void *completion_data;
-		int error_count;
-	};
-	union {
-		struct {
-			struct io_cq *icq;
-			void *priv[2];
-		} elv;
-		struct {
-			unsigned int seq;
-			struct list_head list;
-			rq_end_io_fn *saved_end_io;
-		} flush;
-	};
-	struct gendisk *rq_disk;
-	struct hd_struct *part;
-	u64 start_time_ns;
-	u64 io_start_time_ns;
-	short unsigned int stats_sectors;
-	short unsigned int nr_phys_segments;
-	short unsigned int write_hint;
-	short unsigned int ioprio;
-	unsigned int extra_len;
-	enum mq_rq_state state;
-	refcount_t ref;
-	unsigned int timeout;
-	long unsigned int deadline;
-	union {
-		struct __call_single_data csd;
-		u64 fifo_time;
-	};
-	rq_end_io_fn *end_io;
-	void *end_io_data;
-};
-
-struct blk_zone {
-	__u64 start;
-	__u64 len;
-	__u64 wp;
-	__u8 type;
-	__u8 cond;
-	__u8 non_seq;
-	__u8 reset;
-	__u8 reserved[36];
-};
-
-enum elv_merge {
-	ELEVATOR_NO_MERGE = 0,
-	ELEVATOR_FRONT_MERGE = 1,
-	ELEVATOR_BACK_MERGE = 2,
-	ELEVATOR_DISCARD_MERGE = 3,
-};
-
-struct elevator_type;
-
-struct blk_mq_alloc_data;
-
-struct elevator_mq_ops {
-	int (*init_sched)(struct request_queue *, struct elevator_type *);
-	void (*exit_sched)(struct elevator_queue *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*depth_updated)(struct blk_mq_hw_ctx *);
-	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-	bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);
-	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
-	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-	void (*prepare_request)(struct request *, struct bio *);
-	void (*finish_request)(struct request *);
-	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
-	bool (*has_work)(struct blk_mq_hw_ctx *);
-	void (*completed_request)(struct request *, u64);
-	void (*requeue_request)(struct request *);
-	struct request * (*former_request)(struct request_queue *, struct request *);
-	struct request * (*next_request)(struct request_queue *, struct request *);
-	void (*init_icq)(struct io_cq *);
-	void (*exit_icq)(struct io_cq *);
-};
-
-struct elv_fs_entry;
-
-struct blk_mq_debugfs_attr;
-
-struct elevator_type {
-	struct kmem_cache *icq_cache;
-	struct elevator_mq_ops ops;
-	size_t icq_size;
-	size_t icq_align;
-	struct elv_fs_entry *elevator_attrs;
-	const char *elevator_name;
-	const char *elevator_alias;
-	const unsigned int elevator_features;
-	struct module *elevator_owner;
-	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
-	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
-	char icq_cache_name[22];
-	struct list_head list;
-};
-
-struct elevator_queue {
-	struct elevator_type *type;
-	void *elevator_data;
-	struct kobject kobj;
-	struct mutex sysfs_lock;
-	unsigned int registered: 1;
-	struct hlist_head hash[64];
-};
-
-struct elv_fs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct elevator_queue *, char *);
-	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-struct blk_mq_debugfs_attr {
-	const char *name;
-	umode_t mode;
-	int (*show)(void *, struct seq_file *);
-	ssize_t (*write)(void *, const char *, size_t, loff_t *);
-	const struct seq_operations___2 *seq_ops;
-};
-
-struct blk_mq_queue_data;
-
-typedef blk_status_t queue_rq_fn(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
-
-typedef void commit_rqs_fn(struct blk_mq_hw_ctx *);
-
-typedef bool get_budget_fn(struct blk_mq_hw_ctx *);
-
-typedef void put_budget_fn(struct blk_mq_hw_ctx *);
-
-enum blk_eh_timer_return {
-	BLK_EH_DONE = 0,
-	BLK_EH_RESET_TIMER = 1,
-};
-
-typedef enum blk_eh_timer_return timeout_fn(struct request *, bool);
-
-typedef int poll_fn(struct blk_mq_hw_ctx *);
-
-typedef void complete_fn(struct request *);
-
-typedef int init_hctx_fn(struct blk_mq_hw_ctx *, void *, unsigned int);
-
-typedef void exit_hctx_fn(struct blk_mq_hw_ctx *, unsigned int);
-
-typedef int init_request_fn(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
-
-typedef void exit_request_fn(struct blk_mq_tag_set *, struct request *, unsigned int);
-
-typedef void cleanup_rq_fn(struct request *);
-
-typedef bool busy_fn(struct request_queue *);
-
-typedef int map_queues_fn(struct blk_mq_tag_set *);
-
-struct blk_mq_ops {
-	queue_rq_fn *queue_rq;
-	commit_rqs_fn *commit_rqs;
-	get_budget_fn *get_budget;
-	put_budget_fn *put_budget;
-	timeout_fn *timeout;
-	poll_fn *poll;
-	complete_fn *complete;
-	init_hctx_fn *init_hctx;
-	exit_hctx_fn *exit_hctx;
-	init_request_fn *init_request;
-	exit_request_fn *exit_request;
-	void (*initialize_rq_fn)(struct request *);
-	cleanup_rq_fn *cleanup_rq;
-	busy_fn *busy;
-	map_queues_fn *map_queues;
-	void (*show_rq)(struct seq_file *, struct request *);
-};
-
-enum pr_type {
-	PR_WRITE_EXCLUSIVE = 1,
-	PR_EXCLUSIVE_ACCESS = 2,
-	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
-	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
-	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
-	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
-};
-
-struct pr_ops {
-	int (*pr_register)(struct block_device *, u64, u64, u32);
-	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
-	int (*pr_release)(struct block_device *, u64, enum pr_type);
-	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
-	int (*pr_clear)(struct block_device *, u64);
-};
-
-struct wb_domain {
-	spinlock_t lock;
-	struct fprop_global completions;
-	struct timer_list period_timer;
-	long unsigned int period_time;
-	long unsigned int dirty_limit_tstamp;
-	long unsigned int dirty_limit;
-};
-
-enum cpu_idle_type {
-	CPU_IDLE = 0,
-	CPU_NOT_IDLE = 1,
-	CPU_NEWLY_IDLE = 2,
-	CPU_MAX_IDLE_TYPES = 3,
-};
-
-enum reboot_mode {
-	REBOOT_UNDEFINED = 4294967295,
-	REBOOT_COLD = 0,
-	REBOOT_WARM = 1,
-	REBOOT_HARD = 2,
-	REBOOT_SOFT = 3,
-	REBOOT_GPIO = 4,
-};
-
-enum reboot_type {
-	BOOT_TRIPLE = 116,
-	BOOT_KBD = 107,
-	BOOT_BIOS = 98,
-	BOOT_ACPI = 97,
-	BOOT_EFI = 101,
-	BOOT_CF9_FORCE = 112,
-	BOOT_CF9_SAFE = 113,
-};
-
-typedef long unsigned int efi_status_t;
-
-typedef u8 efi_bool_t;
-
-typedef u16 efi_char16_t;
-
-typedef u64 efi_physical_addr_t;
-
-typedef void *efi_handle_t;
-
-typedef guid_t efi_guid_t;
-
-typedef struct {
-	u64 signature;
-	u32 revision;
-	u32 headersize;
-	u32 crc32;
-	u32 reserved;
-} efi_table_hdr_t;
-
-typedef struct {
-	u32 type;
-	u32 pad;
-	u64 phys_addr;
-	u64 virt_addr;
-	u64 num_pages;
-	u64 attribute;
-} efi_memory_desc_t;
-
-typedef struct {
-	efi_guid_t guid;
-	u32 headersize;
-	u32 flags;
-	u32 imagesize;
-} efi_capsule_header_t;
-
-typedef struct {
-	u16 year;
-	u8 month;
-	u8 day;
-	u8 hour;
-	u8 minute;
-	u8 second;
-	u8 pad1;
-	u32 nanosecond;
-	s16 timezone;
-	u8 daylight;
-	u8 pad2;
-} efi_time_t;
-
-typedef struct {
-	u32 resolution;
-	u32 accuracy;
-	u8 sets_to_zero;
-} efi_time_cap_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	void *raise_tpl;
-	void *restore_tpl;
-	efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
-	efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
-	efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
-	efi_status_t (*allocate_pool)(int, long unsigned int, void **);
-	efi_status_t (*free_pool)(void *);
-	void *create_event;
-	void *set_timer;
-	void *wait_for_event;
-	void *signal_event;
-	void *close_event;
-	void *check_event;
-	void *install_protocol_interface;
-	void *reinstall_protocol_interface;
-	void *uninstall_protocol_interface;
-	efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
-	void *__reserved;
-	void *register_protocol_notify;
-	efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
-	void *locate_device_path;
-	efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
-	void *load_image;
-	void *start_image;
-	void *exit;
-	void *unload_image;
-	efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
-	void *get_next_monotonic_count;
-	void *stall;
-	void *set_watchdog_timer;
-	void *connect_controller;
-	void *disconnect_controller;
-	void *open_protocol;
-	void *close_protocol;
-	void *open_protocol_information;
-	void *protocols_per_handle;
-	void *locate_handle_buffer;
-	efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
-	void *install_multiple_protocol_interfaces;
-	void *uninstall_multiple_protocol_interfaces;
-	void *calculate_crc32;
-	void *copy_mem;
-	void *set_mem;
-	void *create_event_ex;
-} efi_boot_services_t;
-
-typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
-
-typedef efi_status_t efi_set_time_t(efi_time_t *);
-
-typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
-
-typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
-
-typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);
-
-typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);
-
-typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
-
-typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
-
-typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);
-
-typedef efi_status_t efi_set_virtual_address_map_t(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);
-
-typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
-
-typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int);
-
-typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	efi_get_time_t *get_time;
-	efi_set_time_t *set_time;
-	efi_get_wakeup_time_t *get_wakeup_time;
-	efi_set_wakeup_time_t *set_wakeup_time;
-	efi_set_virtual_address_map_t *set_virtual_address_map;
-	void *convert_pointer;
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_get_next_high_mono_count_t *get_next_high_mono_count;
-	efi_reset_system_t *reset_system;
-	efi_update_capsule_t *update_capsule;
-	efi_query_capsule_caps_t *query_capsule_caps;
-	efi_query_variable_info_t *query_variable_info;
-} efi_runtime_services_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	long unsigned int fw_vendor;
-	u32 fw_revision;
-	long unsigned int con_in_handle;
-	long unsigned int con_in;
-	long unsigned int con_out_handle;
-	long unsigned int con_out;
-	long unsigned int stderr_handle;
-	long unsigned int stderr;
-	efi_runtime_services_t *runtime;
-	efi_boot_services_t *boottime;
-	long unsigned int nr_tables;
-	long unsigned int tables;
-} efi_system_table_t;
-
-struct efi_memory_map {
-	phys_addr_t phys_map;
-	void *map;
-	void *map_end;
-	int nr_map;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-	bool late;
-};
-
-struct efi {
-	efi_system_table_t *systab;
-	unsigned int runtime_version;
-	long unsigned int mps;
-	long unsigned int acpi;
-	long unsigned int acpi20;
-	long unsigned int smbios;
-	long unsigned int smbios3;
-	long unsigned int boot_info;
-	long unsigned int hcdp;
-	long unsigned int uga;
-	long unsigned int fw_vendor;
-	long unsigned int runtime;
-	long unsigned int config_table;
-	long unsigned int esrt;
-	long unsigned int properties_table;
-	long unsigned int mem_attr_table;
-	long unsigned int rng_seed;
-	long unsigned int tpm_log;
-	long unsigned int tpm_final_log;
-	long unsigned int mem_reserve;
-	efi_get_time_t *get_time;
-	efi_set_time_t *set_time;
-	efi_get_wakeup_time_t *get_wakeup_time;
-	efi_set_wakeup_time_t *set_wakeup_time;
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_set_variable_t *set_variable_nonblocking;
-	efi_query_variable_info_t *query_variable_info;
-	efi_query_variable_info_t *query_variable_info_nonblocking;
-	efi_update_capsule_t *update_capsule;
-	efi_query_capsule_caps_t *query_capsule_caps;
-	efi_get_next_high_mono_count_t *get_next_high_mono_count;
-	efi_reset_system_t *reset_system;
-	efi_set_virtual_address_map_t *set_virtual_address_map;
-	struct efi_memory_map memmap;
-	long unsigned int flags;
-};
-
-enum efi_rts_ids {
-	EFI_NONE = 0,
-	EFI_GET_TIME = 1,
-	EFI_SET_TIME = 2,
-	EFI_GET_WAKEUP_TIME = 3,
-	EFI_SET_WAKEUP_TIME = 4,
-	EFI_GET_VARIABLE = 5,
-	EFI_GET_NEXT_VARIABLE = 6,
-	EFI_SET_VARIABLE = 7,
-	EFI_QUERY_VARIABLE_INFO = 8,
-	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
-	EFI_RESET_SYSTEM = 10,
-	EFI_UPDATE_CAPSULE = 11,
-	EFI_QUERY_CAPSULE_CAPS = 12,
-};
-
-struct efi_runtime_work {
-	void *arg1;
-	void *arg2;
-	void *arg3;
-	void *arg4;
-	void *arg5;
-	efi_status_t status;
-	struct work_struct work;
-	enum efi_rts_ids efi_rts_id;
-	struct completion efi_rts_comp;
-};
-
-struct percpu_cluster {
-	struct swap_cluster_info index;
-	unsigned int next;
-};
-
-struct trace_event_raw_initcall_level {
-	struct trace_entry ent;
-	u32 __data_loc_level;
-	char __data[0];
-};
-
-struct trace_event_raw_initcall_start {
-	struct trace_entry ent;
-	initcall_t func;
-	char __data[0];
-};
-
-struct trace_event_raw_initcall_finish {
-	struct trace_entry ent;
-	initcall_t func;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_initcall_level {
-	u32 level;
-};
-
-struct trace_event_data_offsets_initcall_start {};
-
-struct trace_event_data_offsets_initcall_finish {};
-
-typedef void (*btf_trace_initcall_level)(void *, const char *);
-
-typedef void (*btf_trace_initcall_start)(void *, initcall_t);
-
-typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
-
-struct blacklist_entry {
-	struct list_head next;
-	char *buf;
-};
-
-enum page_cache_mode {
-	_PAGE_CACHE_MODE_WB = 0,
-	_PAGE_CACHE_MODE_WC = 1,
-	_PAGE_CACHE_MODE_UC_MINUS = 2,
-	_PAGE_CACHE_MODE_UC = 3,
-	_PAGE_CACHE_MODE_WT = 4,
-	_PAGE_CACHE_MODE_WP = 5,
-	_PAGE_CACHE_MODE_NUM = 8,
-};
-
-enum {
-	UNAME26 = 131072,
-	ADDR_NO_RANDOMIZE = 262144,
-	FDPIC_FUNCPTRS = 524288,
-	MMAP_PAGE_ZERO = 1048576,
-	ADDR_COMPAT_LAYOUT = 2097152,
-	READ_IMPLIES_EXEC = 4194304,
-	ADDR_LIMIT_32BIT = 8388608,
-	SHORT_INODE = 16777216,
-	WHOLE_SECONDS = 33554432,
-	STICKY_TIMEOUTS = 67108864,
-	ADDR_LIMIT_3GB = 134217728,
-};
-
-enum tlb_infos {
-	ENTRIES = 0,
-	NR_INFO = 1,
-};
-
-enum {
-	MM_FILEPAGES = 0,
-	MM_ANONPAGES = 1,
-	MM_SWAPENTS = 2,
-	MM_SHMEMPAGES = 3,
-	NR_MM_COUNTERS = 4,
-};
-
-typedef __u32 Elf32_Word;
-
-struct elf32_note {
-	Elf32_Word n_namesz;
-	Elf32_Word n_descsz;
-	Elf32_Word n_type;
-};
-
-enum hrtimer_base_type {
-	HRTIMER_BASE_MONOTONIC = 0,
-	HRTIMER_BASE_REALTIME = 1,
-	HRTIMER_BASE_BOOTTIME = 2,
-	HRTIMER_BASE_TAI = 3,
-	HRTIMER_BASE_MONOTONIC_SOFT = 4,
-	HRTIMER_BASE_REALTIME_SOFT = 5,
-	HRTIMER_BASE_BOOTTIME_SOFT = 6,
-	HRTIMER_BASE_TAI_SOFT = 7,
-	HRTIMER_MAX_CLOCK_BASES = 8,
-};
-
-enum rseq_cs_flags_bit {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
-};
-
-enum perf_event_task_context {
-	perf_invalid_context = 4294967295,
-	perf_hw_context = 0,
-	perf_sw_context = 1,
-	perf_nr_task_contexts = 2,
-};
-
-enum rseq_event_mask_bits {
-	RSEQ_EVENT_PREEMPT_BIT = 0,
-	RSEQ_EVENT_SIGNAL_BIT = 1,
-	RSEQ_EVENT_MIGRATE_BIT = 2,
-};
-
-enum {
-	PROC_ROOT_INO = 1,
-	PROC_IPC_INIT_INO = 4026531839,
-	PROC_UTS_INIT_INO = 4026531838,
-	PROC_USER_INIT_INO = 4026531837,
-	PROC_PID_INIT_INO = 4026531836,
-	PROC_CGROUP_INIT_INO = 4026531835,
-};
-
-typedef __u16 __le16;
-
-typedef __u16 __be16;
-
-typedef __u32 __be32;
-
-typedef __u64 __be64;
-
-typedef __u32 __wsum;
-
-typedef u64 uint64_t;
-
-typedef unsigned int slab_flags_t;
-
-struct raw_notifier_head {
-	struct notifier_block *head;
-};
-
-struct llist_head {
-	struct llist_node *first;
-};
-
-typedef struct __call_single_data call_single_data_t;
-
-struct ida {
-	struct xarray xa;
-};
-
-typedef __u64 __addrpair;
-
-typedef __u32 __portpair;
-
-typedef struct {
-	struct net *net;
-} possible_net_t;
-
-struct in6_addr {
-	union {
-		__u8 u6_addr8[16];
-		__be16 u6_addr16[8];
-		__be32 u6_addr32[4];
-	} in6_u;
-};
-
-struct hlist_nulls_node {
-	struct hlist_nulls_node *next;
-	struct hlist_nulls_node **pprev;
-};
-
-struct proto;
-
-struct inet_timewait_death_row;
-
-struct sock_common {
-	union {
-		__addrpair skc_addrpair;
-		struct {
-			__be32 skc_daddr;
-			__be32 skc_rcv_saddr;
-		};
-	};
-	union {
-		unsigned int skc_hash;
-		__u16 skc_u16hashes[2];
-	};
-	union {
-		__portpair skc_portpair;
-		struct {
-			__be16 skc_dport;
-			__u16 skc_num;
-		};
-	};
-	short unsigned int skc_family;
-	volatile unsigned char skc_state;
-	unsigned char skc_reuse: 4;
-	unsigned char skc_reuseport: 1;
-	unsigned char skc_ipv6only: 1;
-	unsigned char skc_net_refcnt: 1;
-	int skc_bound_dev_if;
-	union {
-		struct hlist_node skc_bind_node;
-		struct hlist_node skc_portaddr_node;
-	};
-	struct proto *skc_prot;
-	possible_net_t skc_net;
-	struct in6_addr skc_v6_daddr;
-	struct in6_addr skc_v6_rcv_saddr;
-	atomic64_t skc_cookie;
-	union {
-		long unsigned int skc_flags;
-		struct sock *skc_listener;
-		struct inet_timewait_death_row *skc_tw_dr;
-	};
-	int skc_dontcopy_begin[0];
-	union {
-		struct hlist_node skc_node;
-		struct hlist_nulls_node skc_nulls_node;
-	};
-	short unsigned int skc_tx_queue_mapping;
-	short unsigned int skc_rx_queue_mapping;
-	union {
-		int skc_incoming_cpu;
-		u32 skc_rcv_wnd;
-		u32 skc_tw_rcv_nxt;
-	};
-	refcount_t skc_refcnt;
-	int skc_dontcopy_end[0];
-	union {
-		u32 skc_rxhash;
-		u32 skc_window_clamp;
-		u32 skc_tw_snd_nxt;
-	};
-};
-
-typedef struct {
-	spinlock_t slock;
-	int owned;
-	wait_queue_head_t wq;
-} socket_lock_t;
-
-struct sk_buff;
-
-struct sk_buff_head {
-	struct sk_buff *next;
-	struct sk_buff *prev;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-typedef u64 netdev_features_t;
-
-struct sock_cgroup_data {
-	union {
-		struct {
-			u8 is_data;
-			u8 padding;
-			u16 prioidx;
-			u32 classid;
-		};
-		u64 val;
-	};
-};
-
-struct sk_filter;
-
-struct socket_wq;
-
-struct xfrm_policy;
-
-struct dst_entry;
-
-struct socket;
-
-struct sock_reuseport;
-
-struct bpf_sk_storage;
-
-struct sock {
-	struct sock_common __sk_common;
-	socket_lock_t sk_lock;
-	atomic_t sk_drops;
-	int sk_rcvlowat;
-	struct sk_buff_head sk_error_queue;
-	struct sk_buff *sk_rx_skb_cache;
-	struct sk_buff_head sk_receive_queue;
-	struct {
-		atomic_t rmem_alloc;
-		int len;
-		struct sk_buff *head;
-		struct sk_buff *tail;
-	} sk_backlog;
-	int sk_forward_alloc;
-	unsigned int sk_ll_usec;
-	unsigned int sk_napi_id;
-	int sk_rcvbuf;
-	struct sk_filter *sk_filter;
-	union {
-		struct socket_wq *sk_wq;
-		struct socket_wq *sk_wq_raw;
-	};
-	struct xfrm_policy *sk_policy[2];
-	struct dst_entry *sk_rx_dst;
-	struct dst_entry *sk_dst_cache;
-	atomic_t sk_omem_alloc;
-	int sk_sndbuf;
-	int sk_wmem_queued;
-	refcount_t sk_wmem_alloc;
-	long unsigned int sk_tsq_flags;
-	union {
-		struct sk_buff *sk_send_head;
-		struct rb_root tcp_rtx_queue;
-	};
-	struct sk_buff *sk_tx_skb_cache;
-	struct sk_buff_head sk_write_queue;
-	__s32 sk_peek_off;
-	int sk_write_pending;
-	__u32 sk_dst_pending_confirm;
-	u32 sk_pacing_status;
-	long int sk_sndtimeo;
-	struct timer_list sk_timer;
-	__u32 sk_priority;
-	__u32 sk_mark;
-	long unsigned int sk_pacing_rate;
-	long unsigned int sk_max_pacing_rate;
-	struct page_frag sk_frag;
-	netdev_features_t sk_route_caps;
-	netdev_features_t sk_route_nocaps;
-	netdev_features_t sk_route_forced_caps;
-	int sk_gso_type;
-	unsigned int sk_gso_max_size;
-	gfp_t sk_allocation;
-	__u32 sk_txhash;
-	unsigned int __sk_flags_offset[0];
-	unsigned int sk_padding: 1;
-	unsigned int sk_kern_sock: 1;
-	unsigned int sk_no_check_tx: 1;
-	unsigned int sk_no_check_rx: 1;
-	unsigned int sk_userlocks: 4;
-	unsigned int sk_protocol: 8;
-	unsigned int sk_type: 16;
-	u16 sk_gso_max_segs;
-	u8 sk_pacing_shift;
-	long unsigned int sk_lingertime;
-	struct proto *sk_prot_creator;
-	rwlock_t sk_callback_lock;
-	int sk_err;
-	int sk_err_soft;
-	u32 sk_ack_backlog;
-	u32 sk_max_ack_backlog;
-	kuid_t sk_uid;
-	struct pid *sk_peer_pid;
-	const struct cred *sk_peer_cred;
-	long int sk_rcvtimeo;
-	ktime_t sk_stamp;
-	u16 sk_tsflags;
-	u8 sk_shutdown;
-	u32 sk_tskey;
-	atomic_t sk_zckey;
-	u8 sk_clockid;
-	u8 sk_txtime_deadline_mode: 1;
-	u8 sk_txtime_report_errors: 1;
-	u8 sk_txtime_unused: 6;
-	struct socket *sk_socket;
-	void *sk_user_data;
-	void *sk_security;
-	struct sock_cgroup_data sk_cgrp_data;
-	struct mem_cgroup *sk_memcg;
-	void (*sk_state_change)(struct sock *);
-	void (*sk_data_ready)(struct sock *);
-	void (*sk_write_space)(struct sock *);
-	void (*sk_error_report)(struct sock *);
-	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
-	void (*sk_destruct)(struct sock *);
-	struct sock_reuseport *sk_reuseport_cb;
-	struct bpf_sk_storage *sk_bpf_storage;
-	struct callback_head sk_rcu;
-};
-
-struct rhash_head {
-	struct rhash_head *next;
-};
-
-struct rhashtable;
-
-struct rhashtable_compare_arg {
-	struct rhashtable *ht;
-	const void *key;
-};
-
-typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
-
-typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
-
-typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
-
-struct rhashtable_params {
-	u16 nelem_hint;
-	u16 key_len;
-	u16 key_offset;
-	u16 head_offset;
-	unsigned int max_size;
-	u16 min_size;
-	bool automatic_shrinking;
-	rht_hashfn_t hashfn;
-	rht_obj_hashfn_t obj_hashfn;
-	rht_obj_cmpfn_t obj_cmpfn;
-};
-
-struct bucket_table;
-
-struct rhashtable {
-	struct bucket_table *tbl;
-	unsigned int key_len;
-	unsigned int max_elems;
-	struct rhashtable_params p;
-	bool rhlist;
-	struct work_struct run_work;
-	struct mutex mutex;
-	spinlock_t lock;
-	atomic_t nelems;
-};
-
-struct rhash_lock_head;
-
-struct bucket_table {
-	unsigned int size;
-	unsigned int nest;
-	u32 hash_rnd;
-	struct list_head walkers;
-	struct callback_head rcu;
-	struct bucket_table *future_tbl;
-	struct lockdep_map dep_map;
-	long: 64;
-	struct rhash_lock_head *buckets[0];
-};
-
-struct fs_struct {
-	int users;
-	spinlock_t lock;
-	seqcount_t seq;
-	int umask;
-	int in_exec;
-	struct path root;
-	struct path pwd;
-};
-
-typedef u32 compat_uptr_t;
-
-struct compat_robust_list {
-	compat_uptr_t next;
-};
-
-typedef s32 compat_long_t;
-
-struct compat_robust_list_head {
-	struct compat_robust_list list;
-	compat_long_t futex_offset;
-	compat_uptr_t list_op_pending;
-};
-
-struct pipe_buffer;
-
-struct pipe_inode_info {
-	struct mutex mutex;
-	wait_queue_head_t wait;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int max_usage;
-	unsigned int ring_size;
-	unsigned int readers;
-	unsigned int writers;
-	unsigned int files;
-	unsigned int r_counter;
-	unsigned int w_counter;
-	struct page *tmp_page;
-	struct fasync_struct *fasync_readers;
-	struct fasync_struct *fasync_writers;
-	struct pipe_buffer *bufs;
-	struct user_struct *user;
-};
-
-struct scatterlist {
-	long unsigned int page_link;
-	unsigned int offset;
-	unsigned int length;
-	dma_addr_t dma_address;
-	unsigned int dma_length;
-};
-
-struct iovec {
-	void *iov_base;
-	__kernel_size_t iov_len;
-};
-
-struct kvec {
-	void *iov_base;
-	size_t iov_len;
-};
-
-struct iov_iter {
-	unsigned int type;
-	size_t iov_offset;
-	size_t count;
-	union {
-		const struct iovec *iov;
-		const struct kvec *kvec;
-		const struct bio_vec *bvec;
-		struct pipe_inode_info *pipe;
-	};
-	union {
-		long unsigned int nr_segs;
-		struct {
-			unsigned int head;
-			unsigned int start_head;
-		};
-	};
-};
-
-typedef short unsigned int __kernel_sa_family_t;
-
-struct __kernel_sockaddr_storage {
-	union {
-		struct {
-			__kernel_sa_family_t ss_family;
-			char __data[126];
-		};
-		void *__align;
-	};
-};
-
-typedef __kernel_sa_family_t sa_family_t;
-
-struct sockaddr {
-	sa_family_t sa_family;
-	char sa_data[14];
-};
-
-struct msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iov_iter msg_iter;
-	void *msg_control;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-	struct kiocb *msg_iocb;
-};
-
-typedef struct {
-	unsigned int clock_rate;
-	unsigned int clock_type;
-	short unsigned int loopback;
-} sync_serial_settings;
-
-typedef struct {
-	unsigned int clock_rate;
-	unsigned int clock_type;
-	short unsigned int loopback;
-	unsigned int slot_map;
-} te1_settings;
-
-typedef struct {
-	short unsigned int encoding;
-	short unsigned int parity;
-} raw_hdlc_proto;
-
-typedef struct {
-	unsigned int t391;
-	unsigned int t392;
-	unsigned int n391;
-	unsigned int n392;
-	unsigned int n393;
-	short unsigned int lmi;
-	short unsigned int dce;
-} fr_proto;
-
-typedef struct {
-	unsigned int dlci;
-} fr_proto_pvc;
-
-typedef struct {
-	unsigned int dlci;
-	char master[16];
-} fr_proto_pvc_info;
-
-typedef struct {
-	unsigned int interval;
-	unsigned int timeout;
-} cisco_proto;
-
-struct ifmap {
-	long unsigned int mem_start;
-	long unsigned int mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
-};
-
-struct if_settings {
-	unsigned int type;
-	unsigned int size;
-	union {
-		raw_hdlc_proto *raw_hdlc;
-		cisco_proto *cisco;
-		fr_proto *fr;
-		fr_proto_pvc *fr_pvc;
-		fr_proto_pvc_info *fr_pvc_info;
-		sync_serial_settings *sync;
-		te1_settings *te1;
-	} ifs_ifsu;
-};
-
-struct ifreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union {
-		struct sockaddr ifru_addr;
-		struct sockaddr ifru_dstaddr;
-		struct sockaddr ifru_broadaddr;
-		struct sockaddr ifru_netmask;
-		struct sockaddr ifru_hwaddr;
-		short int ifru_flags;
-		int ifru_ivalue;
-		int ifru_mtu;
-		struct ifmap ifru_map;
-		char ifru_slave[16];
-		char ifru_newname[16];
-		void *ifru_data;
-		struct if_settings ifru_settings;
-	} ifr_ifru;
-};
-
-struct vfsmount {
-	struct dentry *mnt_root;
-	struct super_block *mnt_sb;
-	int mnt_flags;
-};
-
-typedef struct {
-	size_t written;
-	size_t count;
-	union {
-		char *buf;
-		void *data;
-	} arg;
-	int error;
-} read_descriptor_t;
-
-struct posix_acl_entry {
-	short int e_tag;
-	short unsigned int e_perm;
-	union {
-		kuid_t e_uid;
-		kgid_t e_gid;
-	};
-};
-
-struct posix_acl {
-	refcount_t a_refcount;
-	struct callback_head a_rcu;
-	unsigned int a_count;
-	struct posix_acl_entry a_entries[0];
-};
-
-typedef unsigned char cc_t;
-
-typedef unsigned int speed_t;
-
-typedef unsigned int tcflag_t;
-
-struct ktermios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct winsize {
-	short unsigned int ws_row;
-	short unsigned int ws_col;
-	short unsigned int ws_xpixel;
-	short unsigned int ws_ypixel;
-};
-
-struct termiox {
-	__u16 x_hflag;
-	__u16 x_cflag;
-	__u16 x_rflag[5];
-	__u16 x_sflag;
-};
-
-struct serial_icounter_struct;
-
-struct serial_struct;
-
-struct tty_operations {
-	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
-	int (*install)(struct tty_driver *, struct tty_struct *);
-	void (*remove)(struct tty_driver *, struct tty_struct *);
-	int (*open)(struct tty_struct *, struct file *);
-	void (*close)(struct tty_struct *, struct file *);
-	void (*shutdown)(struct tty_struct *);
-	void (*cleanup)(struct tty_struct *);
-	int (*write)(struct tty_struct *, const unsigned char *, int);
-	int (*put_char)(struct tty_struct *, unsigned char);
-	void (*flush_chars)(struct tty_struct *);
-	int (*write_room)(struct tty_struct *);
-	int (*chars_in_buffer)(struct tty_struct *);
-	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	void (*throttle)(struct tty_struct *);
-	void (*unthrottle)(struct tty_struct *);
-	void (*stop)(struct tty_struct *);
-	void (*start)(struct tty_struct *);
-	void (*hangup)(struct tty_struct *);
-	int (*break_ctl)(struct tty_struct *, int);
-	void (*flush_buffer)(struct tty_struct *);
-	void (*set_ldisc)(struct tty_struct *);
-	void (*wait_until_sent)(struct tty_struct *, int);
-	void (*send_xchar)(struct tty_struct *, char);
-	int (*tiocmget)(struct tty_struct *);
-	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
-	int (*resize)(struct tty_struct *, struct winsize *);
-	int (*set_termiox)(struct tty_struct *, struct termiox *);
-	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
-	int (*get_serial)(struct tty_struct *, struct serial_struct *);
-	int (*set_serial)(struct tty_struct *, struct serial_struct *);
-	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
-	int (*proc_show)(struct seq_file *, void *);
-};
-
-struct ld_semaphore {
-	atomic_long_t count;
-	raw_spinlock_t wait_lock;
-	unsigned int wait_readers;
-	struct list_head read_wait;
-	struct list_head write_wait;
-};
-
-struct tty_ldisc;
-
-struct tty_port;
-
-struct tty_struct {
-	int magic;
-	struct kref kref;
-	struct device *dev;
-	struct tty_driver *driver;
-	const struct tty_operations *ops;
-	int index;
-	struct ld_semaphore ldisc_sem;
-	struct tty_ldisc *ldisc;
-	struct mutex atomic_write_lock;
-	struct mutex legacy_mutex;
-	struct mutex throttle_mutex;
-	struct rw_semaphore termios_rwsem;
-	struct mutex winsize_mutex;
-	spinlock_t ctrl_lock;
-	spinlock_t flow_lock;
-	struct ktermios termios;
-	struct ktermios termios_locked;
-	struct termiox *termiox;
-	char name[64];
-	struct pid *pgrp;
-	struct pid *session;
-	long unsigned int flags;
-	int count;
-	struct winsize winsize;
-	long unsigned int stopped: 1;
-	long unsigned int flow_stopped: 1;
-	int: 30;
-	long unsigned int unused: 62;
-	int hw_stopped;
-	long unsigned int ctrl_status: 8;
-	long unsigned int packet: 1;
-	int: 23;
-	long unsigned int unused_ctrl: 55;
-	unsigned int receive_room;
-	int flow_change;
-	struct tty_struct *link;
-	struct fasync_struct *fasync;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t read_wait;
-	struct work_struct hangup_work;
-	void *disc_data;
-	void *driver_data;
-	spinlock_t files_lock;
-	struct list_head tty_files;
-	int closing;
-	unsigned char *write_buf;
-	int write_cnt;
-	struct work_struct SAK_work;
-	struct tty_port *port;
-};
-
-struct proc_dir_entry;
-
-struct tty_driver {
-	int magic;
-	struct kref kref;
-	struct cdev **cdevs;
-	struct module *owner;
-	const char *driver_name;
-	const char *name;
-	int name_base;
-	int major;
-	int minor_start;
-	unsigned int num;
-	short int type;
-	short int subtype;
-	struct ktermios init_termios;
-	long unsigned int flags;
-	struct proc_dir_entry *proc_entry;
-	struct tty_driver *other;
-	struct tty_struct **ttys;
-	struct tty_port **ports;
-	struct ktermios **termios;
-	void *driver_state;
-	const struct tty_operations *ops;
-	struct list_head tty_drivers;
-};
-
-struct tty_buffer {
-	union {
-		struct tty_buffer *next;
-		struct llist_node free;
-	};
-	int used;
-	int size;
-	int commit;
-	int read;
-	int flags;
-	long unsigned int data[0];
-};
-
-struct tty_bufhead {
-	struct tty_buffer *head;
-	struct work_struct work;
-	struct mutex lock;
-	atomic_t priority;
-	struct tty_buffer sentinel;
-	struct llist_head free;
-	atomic_t mem_used;
-	int mem_limit;
-	struct tty_buffer *tail;
-};
-
-struct tty_port_operations;
-
-struct tty_port_client_operations;
-
-struct tty_port {
-	struct tty_bufhead buf;
-	struct tty_struct *tty;
-	struct tty_struct *itty;
-	const struct tty_port_operations *ops;
-	const struct tty_port_client_operations *client_ops;
-	spinlock_t lock;
-	int blocked_open;
-	int count;
-	wait_queue_head_t open_wait;
-	wait_queue_head_t delta_msr_wait;
-	long unsigned int flags;
-	long unsigned int iflags;
-	unsigned char console: 1;
-	unsigned char low_latency: 1;
-	struct mutex mutex;
-	struct mutex buf_mutex;
-	unsigned char *xmit_buf;
-	unsigned int close_delay;
-	unsigned int closing_wait;
-	int drain_delay;
-	struct kref kref;
-	void *client_data;
-};
-
-struct tty_ldisc_ops {
-	int magic;
-	char *name;
-	int num;
-	int flags;
-	int (*open)(struct tty_struct *);
-	void (*close)(struct tty_struct *);
-	void (*flush_buffer)(struct tty_struct *);
-	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t);
-	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
-	int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
-	int (*hangup)(struct tty_struct *);
-	void (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);
-	void (*write_wakeup)(struct tty_struct *);
-	void (*dcd_change)(struct tty_struct *, unsigned int);
-	int (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);
-	struct module *owner;
-	int refcount;
-};
-
-struct tty_ldisc {
-	struct tty_ldisc_ops *ops;
-	struct tty_struct *tty;
-};
-
-struct tty_port_operations {
-	int (*carrier_raised)(struct tty_port *);
-	void (*dtr_rts)(struct tty_port *, int);
-	void (*shutdown)(struct tty_port *);
-	int (*activate)(struct tty_port *, struct tty_struct *);
-	void (*destruct)(struct tty_port *);
-};
-
-struct tty_port_client_operations {
-	int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);
-	void (*write_wakeup)(struct tty_port *);
-};
-
-struct prot_inuse;
-
-struct netns_core {
-	struct ctl_table_header *sysctl_hdr;
-	int sysctl_somaxconn;
-	int *sock_inuse;
-	struct prot_inuse *prot_inuse;
-};
-
-struct tcp_mib;
-
-struct ipstats_mib;
-
-struct linux_mib;
-
-struct udp_mib;
-
-struct icmp_mib;
-
-struct icmpmsg_mib;
-
-struct icmpv6_mib;
-
-struct icmpv6msg_mib;
-
-struct netns_mib {
-	struct tcp_mib *tcp_statistics;
-	struct ipstats_mib *ip_statistics;
-	struct linux_mib *net_statistics;
-	struct udp_mib *udp_statistics;
-	struct udp_mib *udplite_statistics;
-	struct icmp_mib *icmp_statistics;
-	struct icmpmsg_mib *icmpmsg_statistics;
-	struct proc_dir_entry *proc_net_devsnmp6;
-	struct udp_mib *udp_stats_in6;
-	struct udp_mib *udplite_stats_in6;
-	struct ipstats_mib *ipv6_statistics;
-	struct icmpv6_mib *icmpv6_statistics;
-	struct icmpv6msg_mib *icmpv6msg_statistics;
-};
-
-struct netns_packet {
-	struct mutex sklist_lock;
-	struct hlist_head sklist;
-};
-
-struct netns_unix {
-	int sysctl_max_dgram_qlen;
-	struct ctl_table_header *ctl;
-};
-
-struct netns_nexthop {
-	struct rb_root rb_root;
-	struct hlist_head *devhash;
-	unsigned int seq;
-	u32 last_id_allocated;
-};
-
-struct local_ports {
-	seqlock_t lock;
-	int range[2];
-	bool warned;
-};
-
-struct inet_hashinfo;
-
-struct inet_timewait_death_row {
-	atomic_t tw_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_hashinfo *hashinfo;
-	int sysctl_max_tw_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ping_group_range {
-	seqlock_t lock;
-	kgid_t range[2];
-};
-
-typedef struct {
-	u64 key[2];
-} siphash_key_t;
-
-struct ipv4_devconf;
-
-struct ip_ra_chain;
-
-struct fib_rules_ops;
-
-struct fib_table;
-
-struct inet_peer_base;
-
-struct fqdir;
-
-struct xt_table;
-
-struct tcp_congestion_ops;
-
-struct tcp_fastopen_context;
-
-struct mr_table;
-
-struct fib_notifier_ops;
-
-struct netns_ipv4 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct mr_table *mrt;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-};
-
-struct netns_sysctl_ipv6 {
-	struct ctl_table_header *hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *icmp_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *xfrm6_hdr;
-	int bindv6only;
-	int flush_delay;
-	int ip6_rt_max_size;
-	int ip6_rt_gc_min_interval;
-	int ip6_rt_gc_timeout;
-	int ip6_rt_gc_interval;
-	int ip6_rt_gc_elasticity;
-	int ip6_rt_mtu_expires;
-	int ip6_rt_min_advmss;
-	int multipath_hash_policy;
-	int flowlabel_consistency;
-	int auto_flowlabels;
-	int icmpv6_time;
-	int icmpv6_echo_ignore_all;
-	int icmpv6_echo_ignore_multicast;
-	int icmpv6_echo_ignore_anycast;
-	long unsigned int icmpv6_ratemask[4];
-	long unsigned int *icmpv6_ratemask_ptr;
-	int anycast_src_echo_reply;
-	int ip_nonlocal_bind;
-	int fwmark_reflect;
-	int idgen_retries;
-	int idgen_delay;
-	int flowlabel_state_ranges;
-	int flowlabel_reflect;
-	int max_dst_opts_cnt;
-	int max_hbh_opts_cnt;
-	int max_dst_opts_len;
-	int max_hbh_opts_len;
-	int seg6_flowlabel;
-	bool skip_notify_on_dev_down;
-};
-
-struct neighbour;
-
-struct dst_ops {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
-	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ipv6_devconf;
-
-struct fib6_info;
-
-struct rt6_info;
-
-struct rt6_statistics;
-
-struct fib6_table;
-
-struct seg6_pernet_data;
-
-struct netns_ipv6 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
-	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct nf_queue_handler;
-
-struct nf_logger;
-
-struct nf_hook_entries;
-
-struct netns_nf {
-	struct proc_dir_entry *proc_netfilter;
-	const struct nf_queue_handler *queue_handler;
-	const struct nf_logger *nf_loggers[13];
-	struct ctl_table_header *nf_log_dir_header;
-	struct nf_hook_entries *hooks_ipv4[5];
-	struct nf_hook_entries *hooks_ipv6[5];
-	bool defrag_ipv4;
-	bool defrag_ipv6;
-};
-
-struct netns_xt {
-	struct list_head tables[13];
-	bool notrack_deprecated_warning;
-	bool clusterip_deprecated_warning;
-};
-
-struct nf_ct_event_notifier;
-
-struct nf_exp_event_notifier;
-
-struct nf_generic_net {
-	unsigned int timeout;
-};
-
-struct nf_tcp_net {
-	unsigned int timeouts[14];
-	int tcp_loose;
-	int tcp_be_liberal;
-	int tcp_max_retrans;
-};
-
-struct nf_udp_net {
-	unsigned int timeouts[2];
-};
-
-struct nf_icmp_net {
-	unsigned int timeout;
-};
-
-struct nf_dccp_net {
-	int dccp_loose;
-	unsigned int dccp_timeout[10];
-};
-
-struct nf_sctp_net {
-	unsigned int timeouts[10];
-};
-
-struct nf_ip_net {
-	struct nf_generic_net generic;
-	struct nf_tcp_net tcp;
-	struct nf_udp_net udp;
-	struct nf_icmp_net icmp;
-	struct nf_icmp_net icmpv6;
-	struct nf_dccp_net dccp;
-	struct nf_sctp_net sctp;
-};
-
-struct ct_pcpu;
-
-struct ip_conntrack_stat;
-
-struct netns_ct {
-	atomic_t count;
-	unsigned int expect_count;
-	bool auto_assign_helper_warned;
-	struct ctl_table_header *sysctl_header;
-	unsigned int sysctl_log_invalid;
-	int sysctl_events;
-	int sysctl_acct;
-	int sysctl_auto_assign_helper;
-	int sysctl_tstamp;
-	int sysctl_checksum;
-	struct ct_pcpu *pcpu_lists;
-	struct ip_conntrack_stat *stat;
-	struct nf_ct_event_notifier *nf_conntrack_event_cb;
-	struct nf_exp_event_notifier *nf_expect_event_cb;
-	struct nf_ip_net nf_ct_proto;
-};
-
-struct netns_nf_frag {
-	struct fqdir *fqdir;
-};
-
-struct xfrm_policy_hash {
-	struct hlist_head *table;
-	unsigned int hmask;
-	u8 dbits4;
-	u8 sbits4;
-	u8 dbits6;
-	u8 sbits6;
-};
-
-struct xfrm_policy_hthresh {
-	struct work_struct work;
-	seqlock_t lock;
-	u8 lbits4;
-	u8 rbits4;
-	u8 lbits6;
-	u8 rbits6;
-};
-
-struct netns_xfrm {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops xfrm4_dst_ops;
-	struct dst_ops xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_xdp {
-	struct mutex lock;
-	struct hlist_head list;
-};
-
-struct uevent_sock;
-
-struct net_generic;
-
-struct net {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct idr netns_ids;
-	struct ns_common ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4 ipv4;
-	struct netns_ipv6 ipv6;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nf_frag nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct net_generic *gen;
-	struct bpf_prog *flow_dissector_prog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm xfrm;
-	struct netns_xdp xdp;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	local64_t v;
-} u64_stats_t;
-
-struct bpf_offloaded_map;
-
-struct bpf_map_dev_ops {
-	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
-};
-
-struct bpf_offloaded_map {
-	struct bpf_map map;
-	struct net_device *netdev;
-	const struct bpf_map_dev_ops *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net_device_stats {
-	long unsigned int rx_packets;
-	long unsigned int tx_packets;
-	long unsigned int rx_bytes;
-	long unsigned int tx_bytes;
-	long unsigned int rx_errors;
-	long unsigned int tx_errors;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	long unsigned int multicast;
-	long unsigned int collisions;
-	long unsigned int rx_length_errors;
-	long unsigned int rx_over_errors;
-	long unsigned int rx_crc_errors;
-	long unsigned int rx_frame_errors;
-	long unsigned int rx_fifo_errors;
-	long unsigned int rx_missed_errors;
-	long unsigned int tx_aborted_errors;
-	long unsigned int tx_carrier_errors;
-	long unsigned int tx_fifo_errors;
-	long unsigned int tx_heartbeat_errors;
-	long unsigned int tx_window_errors;
-	long unsigned int rx_compressed;
-	long unsigned int tx_compressed;
-};
-
-struct netdev_hw_addr_list {
-	struct list_head list;
-	int count;
-};
-
-enum rx_handler_result {
-	RX_HANDLER_CONSUMED = 0,
-	RX_HANDLER_ANOTHER = 1,
-	RX_HANDLER_EXACT = 2,
-	RX_HANDLER_PASS = 3,
-};
-
-typedef enum rx_handler_result rx_handler_result_t;
-
-typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
-
-struct pcpu_dstats;
-
-struct netdev_tc_txq {
-	u16 count;
-	u16 offset;
-};
-
-struct sfp_bus;
-
-struct netdev_name_node;
-
-struct dev_ifalias;
-
-struct net_device_ops;
-
-struct ethtool_ops;
-
-struct ndisc_ops;
-
-struct header_ops;
-
-struct in_device;
-
-struct inet6_dev;
-
-struct wireless_dev;
-
-struct wpan_dev;
-
-struct netdev_rx_queue;
-
-struct mini_Qdisc;
-
-struct netdev_queue;
-
-struct cpu_rmap;
-
-struct Qdisc;
-
-struct xps_dev_maps;
-
-struct netpoll_info;
-
-struct pcpu_lstats;
-
-struct pcpu_sw_netstats;
-
-struct rtnl_link_ops;
-
-struct phy_device;
-
-struct net_device {
-	char name[16];
-	struct netdev_name_node *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops *ethtool_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct header_ops *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	unsigned char name_assign_type;
-	bool uc_promisc;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	struct in_device *ip_ptr;
-	struct inet6_dev *ip6_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	rx_handler_func_t *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc *miniq_ingress;
-	struct netdev_queue *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc *qdisc;
-	struct hlist_head qdisc_hash[16];
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	int watchdog_timeo;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc *miniq_egress;
-	struct timer_list watchdog_timer;
-	int *pcpu_refcnt;
-	struct list_head todo_list;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED = 0,
-		NETREG_REGISTERED = 1,
-		NETREG_UNREGISTERING = 2,
-		NETREG_UNREGISTERED = 3,
-		NETREG_RELEASED = 4,
-		NETREG_DUMMY = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED = 0,
-		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device *);
-	struct netpoll_info *npinfo;
-	possible_net_t nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct device dev;
-	const struct attribute_group *sysfs_groups[4];
-	const struct attribute_group *sysfs_rx_queue_group;
-	const struct rtnl_link_ops *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key qdisc_tx_busylock_key;
-	struct lock_class_key qdisc_running_key;
-	struct lock_class_key qdisc_xmit_lock_key;
-	struct lock_class_key addr_list_lock_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-};
-
-typedef unsigned int sk_buff_data_t;
-
-struct skb_ext;
-
-struct sk_buff {
-	union {
-		struct {
-			struct sk_buff *next;
-			struct sk_buff *prev;
-			union {
-				struct net_device *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 tc_redirected: 1;
-	__u8 tc_from_ingress: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
-};
-
-struct sg_table {
-	struct scatterlist *sgl;
-	unsigned int nents;
-	unsigned int orig_nents;
-};
-
-typedef int suspend_state_t;
-
-enum suspend_stat_step {
-	SUSPEND_FREEZE = 1,
-	SUSPEND_PREPARE = 2,
-	SUSPEND_SUSPEND = 3,
-	SUSPEND_SUSPEND_LATE = 4,
-	SUSPEND_SUSPEND_NOIRQ = 5,
-	SUSPEND_RESUME_NOIRQ = 6,
-	SUSPEND_RESUME_EARLY = 7,
-	SUSPEND_RESUME = 8,
-};
-
-struct suspend_stats {
-	int success;
-	int fail;
-	int failed_freeze;
-	int failed_prepare;
-	int failed_suspend;
-	int failed_suspend_late;
-	int failed_suspend_noirq;
-	int failed_resume;
-	int failed_resume_early;
-	int failed_resume_noirq;
-	int last_failed_dev;
-	char failed_devs[80];
-	int last_failed_errno;
-	int errno[2];
-	int last_failed_step;
-	enum suspend_stat_step failed_steps[2];
-};
-
-enum s2idle_states {
-	S2IDLE_STATE_NONE = 0,
-	S2IDLE_STATE_ENTER = 1,
-	S2IDLE_STATE_WAKE = 2,
-};
-
-struct pbe {
-	void *address;
-	void *orig_address;
-	struct pbe *next;
-};
-
-enum {
-	Root_NFS = 255,
-	Root_CIFS = 254,
-	Root_RAM0 = 1048576,
-	Root_RAM1 = 1048577,
-	Root_FD0 = 2097152,
-	Root_HDA1 = 3145729,
-	Root_HDA2 = 3145730,
-	Root_SDA1 = 8388609,
-	Root_SDA2 = 8388610,
-	Root_HDC1 = 23068673,
-	Root_SR0 = 11534336,
-};
-
-struct xdr_buf {
-	struct kvec head[1];
-	struct kvec tail[1];
-	struct bio_vec *bvec;
-	struct page **pages;
-	unsigned int page_base;
-	unsigned int page_len;
-	unsigned int flags;
-	unsigned int buflen;
-	unsigned int len;
-};
-
-struct rpc_rqst;
-
-struct xdr_stream {
-	__be32 *p;
-	struct xdr_buf *buf;
-	__be32 *end;
-	struct kvec *iov;
-	struct kvec scratch;
-	struct page **page_ptr;
-	unsigned int nwords;
-	struct rpc_rqst *rqst;
-};
-
-struct rpc_xprt;
-
-struct rpc_task;
-
-struct rpc_cred;
-
-struct rpc_rqst {
-	struct rpc_xprt *rq_xprt;
-	struct xdr_buf rq_snd_buf;
-	struct xdr_buf rq_rcv_buf;
-	struct rpc_task *rq_task;
-	struct rpc_cred *rq_cred;
-	__be32 rq_xid;
-	int rq_cong;
-	u32 rq_seqno;
-	int rq_enc_pages_num;
-	struct page **rq_enc_pages;
-	void (*rq_release_snd_buf)(struct rpc_rqst *);
-	union {
-		struct list_head rq_list;
-		struct rb_node rq_recv;
-	};
-	struct list_head rq_xmit;
-	struct list_head rq_xmit2;
-	void *rq_buffer;
-	size_t rq_callsize;
-	void *rq_rbuffer;
-	size_t rq_rcvsize;
-	size_t rq_xmit_bytes_sent;
-	size_t rq_reply_bytes_recvd;
-	struct xdr_buf rq_private_buf;
-	long unsigned int rq_majortimeo;
-	long unsigned int rq_timeout;
-	ktime_t rq_rtt;
-	unsigned int rq_retries;
-	unsigned int rq_connect_cookie;
-	atomic_t rq_pin;
-	u32 rq_bytes_sent;
-	ktime_t rq_xtime;
-	int rq_ntrans;
-};
-
-typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
-
-typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
-
-struct rpc_procinfo;
-
-struct rpc_message {
-	const struct rpc_procinfo *rpc_proc;
-	void *rpc_argp;
-	void *rpc_resp;
-	const struct cred *rpc_cred;
-};
-
-struct rpc_procinfo {
-	u32 p_proc;
-	kxdreproc_t p_encode;
-	kxdrdproc_t p_decode;
-	unsigned int p_arglen;
-	unsigned int p_replen;
-	unsigned int p_timer;
-	u32 p_statidx;
-	const char *p_name;
-};
-
-struct rpc_wait {
-	struct list_head list;
-	struct list_head links;
-	struct list_head timer_list;
-};
-
-struct rpc_wait_queue;
-
-struct rpc_call_ops;
-
-struct rpc_clnt;
-
-struct rpc_task {
-	atomic_t tk_count;
-	int tk_status;
-	struct list_head tk_task;
-	void (*tk_callback)(struct rpc_task *);
-	void (*tk_action)(struct rpc_task *);
-	long unsigned int tk_timeout;
-	long unsigned int tk_runstate;
-	struct rpc_wait_queue *tk_waitqueue;
-	union {
-		struct work_struct tk_work;
-		struct rpc_wait tk_wait;
-	} u;
-	int tk_rpc_status;
-	struct rpc_message tk_msg;
-	void *tk_calldata;
-	const struct rpc_call_ops *tk_ops;
-	struct rpc_clnt *tk_client;
-	struct rpc_xprt *tk_xprt;
-	struct rpc_cred *tk_op_cred;
-	struct rpc_rqst *tk_rqstp;
-	struct workqueue_struct *tk_workqueue;
-	ktime_t tk_start;
-	pid_t tk_owner;
-	short unsigned int tk_flags;
-	short unsigned int tk_timeouts;
-	short unsigned int tk_pid;
-	unsigned char tk_priority: 2;
-	unsigned char tk_garb_retry: 2;
-	unsigned char tk_cred_retry: 2;
-	unsigned char tk_rebind_retry: 2;
-};
-
-struct rpc_timer {
-	struct list_head list;
-	long unsigned int expires;
-	struct delayed_work dwork;
-};
-
-struct rpc_wait_queue {
-	spinlock_t lock;
-	struct list_head tasks[4];
-	unsigned char maxpriority;
-	unsigned char priority;
-	unsigned char nr;
-	short unsigned int qlen;
-	struct rpc_timer timer_list;
-	const char *name;
-};
-
-struct rpc_call_ops {
-	void (*rpc_call_prepare)(struct rpc_task *, void *);
-	void (*rpc_call_done)(struct rpc_task *, void *);
-	void (*rpc_count_stats)(struct rpc_task *, void *);
-	void (*rpc_release)(void *);
-};
-
-struct rpc_pipe_dir_head {
-	struct list_head pdh_entries;
-	struct dentry *pdh_dentry;
-};
-
-struct rpc_rtt {
-	long unsigned int timeo;
-	long unsigned int srtt[5];
-	long unsigned int sdrtt[5];
-	int ntimeouts[5];
-};
-
-struct rpc_timeout {
-	long unsigned int to_initval;
-	long unsigned int to_maxval;
-	long unsigned int to_increment;
-	unsigned int to_retries;
-	unsigned char to_exponential;
-};
-
-struct rpc_xprt_switch;
-
-struct rpc_xprt_iter_ops;
-
-struct rpc_xprt_iter {
-	struct rpc_xprt_switch *xpi_xpswitch;
-	struct rpc_xprt *xpi_cursor;
-	const struct rpc_xprt_iter_ops *xpi_ops;
-};
-
-struct rpc_auth;
-
-struct rpc_stat;
-
-struct rpc_iostats;
-
-struct rpc_program;
-
-struct rpc_clnt {
-	atomic_t cl_count;
-	unsigned int cl_clid;
-	struct list_head cl_clients;
-	struct list_head cl_tasks;
-	spinlock_t cl_lock;
-	struct rpc_xprt *cl_xprt;
-	const struct rpc_procinfo *cl_procinfo;
-	u32 cl_prog;
-	u32 cl_vers;
-	u32 cl_maxproc;
-	struct rpc_auth *cl_auth;
-	struct rpc_stat *cl_stats;
-	struct rpc_iostats *cl_metrics;
-	unsigned int cl_softrtry: 1;
-	unsigned int cl_softerr: 1;
-	unsigned int cl_discrtry: 1;
-	unsigned int cl_noretranstimeo: 1;
-	unsigned int cl_autobind: 1;
-	unsigned int cl_chatty: 1;
-	struct rpc_rtt *cl_rtt;
-	const struct rpc_timeout *cl_timeout;
-	atomic_t cl_swapper;
-	int cl_nodelen;
-	char cl_nodename[65];
-	struct rpc_pipe_dir_head cl_pipedir_objects;
-	struct rpc_clnt *cl_parent;
-	struct rpc_rtt cl_rtt_default;
-	struct rpc_timeout cl_timeout_default;
-	const struct rpc_program *cl_program;
-	const char *cl_principal;
-	struct rpc_xprt_iter cl_xpi;
-	const struct cred *cl_cred;
-};
-
-struct rpc_xprt_ops;
-
-struct svc_xprt;
-
-struct rpc_xprt {
-	struct kref kref;
-	const struct rpc_xprt_ops *ops;
-	const struct rpc_timeout *timeout;
-	struct __kernel_sockaddr_storage addr;
-	size_t addrlen;
-	int prot;
-	long unsigned int cong;
-	long unsigned int cwnd;
-	size_t max_payload;
-	struct rpc_wait_queue binding;
-	struct rpc_wait_queue sending;
-	struct rpc_wait_queue pending;
-	struct rpc_wait_queue backlog;
-	struct list_head free;
-	unsigned int max_reqs;
-	unsigned int min_reqs;
-	unsigned int num_reqs;
-	long unsigned int state;
-	unsigned char resvport: 1;
-	unsigned char reuseport: 1;
-	atomic_t swapper;
-	unsigned int bind_index;
-	struct list_head xprt_switch;
-	long unsigned int bind_timeout;
-	long unsigned int reestablish_timeout;
-	unsigned int connect_cookie;
-	struct work_struct task_cleanup;
-	struct timer_list timer;
-	long unsigned int last_used;
-	long unsigned int idle_timeout;
-	long unsigned int connect_timeout;
-	long unsigned int max_reconnect_timeout;
-	atomic_long_t queuelen;
-	spinlock_t transport_lock;
-	spinlock_t reserve_lock;
-	spinlock_t queue_lock;
-	u32 xid;
-	struct rpc_task *snd_task;
-	struct list_head xmit_queue;
-	struct svc_xprt *bc_xprt;
-	struct rb_root recv_queue;
-	struct {
-		long unsigned int bind_count;
-		long unsigned int connect_count;
-		long unsigned int connect_start;
-		long unsigned int connect_time;
-		long unsigned int sends;
-		long unsigned int recvs;
-		long unsigned int bad_xids;
-		long unsigned int max_slots;
-		long long unsigned int req_u;
-		long long unsigned int bklog_u;
-		long long unsigned int sending_u;
-		long long unsigned int pending_u;
-	} stat;
-	struct net *xprt_net;
-	const char *servername;
-	const char *address_strings[6];
-	struct callback_head rcu;
-};
-
-struct rpc_credops;
-
-struct rpc_cred {
-	struct hlist_node cr_hash;
-	struct list_head cr_lru;
-	struct callback_head cr_rcu;
-	struct rpc_auth *cr_auth;
-	const struct rpc_credops *cr_ops;
-	long unsigned int cr_expire;
-	long unsigned int cr_flags;
-	refcount_t cr_count;
-	const struct cred *cr_cred;
-};
-
-typedef u32 rpc_authflavor_t;
-
-struct ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_proto;
-};
-
-struct flow_dissector {
-	unsigned int used_keys;
-	short unsigned int offset[27];
-};
-
-struct flowi_tunnel {
-	__be64 tun_id;
-};
-
-struct flowi_common {
-	int flowic_oif;
-	int flowic_iif;
-	__u32 flowic_mark;
-	__u8 flowic_tos;
-	__u8 flowic_scope;
-	__u8 flowic_proto;
-	__u8 flowic_flags;
-	__u32 flowic_secid;
-	kuid_t flowic_uid;
-	struct flowi_tunnel flowic_tun_key;
-	__u32 flowic_multipath_hash;
-};
-
-union flowi_uli {
-	struct {
-		__be16 dport;
-		__be16 sport;
-	} ports;
-	struct {
-		__u8 type;
-		__u8 code;
-	} icmpt;
-	struct {
-		__le16 dport;
-		__le16 sport;
-	} dnports;
-	__be32 spi;
-	__be32 gre_key;
-	struct {
-		__u8 type;
-	} mht;
-};
-
-struct flowi4 {
-	struct flowi_common __fl_common;
-	__be32 saddr;
-	__be32 daddr;
-	union flowi_uli uli;
-};
-
-struct flowi6 {
-	struct flowi_common __fl_common;
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	__be32 flowlabel;
-	union flowi_uli uli;
-	__u32 mp_hash;
-};
-
-struct flowidn {
-	struct flowi_common __fl_common;
-	__le16 daddr;
-	__le16 saddr;
-	union flowi_uli uli;
-};
-
-struct flowi {
-	union {
-		struct flowi_common __fl_common;
-		struct flowi4 ip4;
-		struct flowi6 ip6;
-		struct flowidn dn;
-	} u;
-};
-
-struct ipstats_mib {
-	u64 mibs[37];
-	struct u64_stats_sync syncp;
-};
-
-struct icmp_mib {
-	long unsigned int mibs[28];
-};
-
-struct icmpmsg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6_mib {
-	long unsigned int mibs[6];
-};
-
-struct icmpv6_mib_device {
-	atomic_long_t mibs[6];
-};
-
-struct icmpv6msg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6msg_mib_device {
-	atomic_long_t mibs[512];
-};
-
-struct tcp_mib {
-	long unsigned int mibs[16];
-};
-
-struct udp_mib {
-	long unsigned int mibs[9];
-};
-
-struct linux_mib {
-	long unsigned int mibs[120];
-};
-
-struct inet_frags;
-
-struct fqdir {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags *f;
-	struct net *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue;
-
-struct inet_frags {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue *, const void *);
-	void (*destructor)(struct inet_frag_queue *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct frag_v4_compare_key {
-	__be32 saddr;
-	__be32 daddr;
-	u32 user;
-	u32 vif;
-	__be16 id;
-	u16 protocol;
-};
-
-struct frag_v6_compare_key {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	u32 user;
-	__be32 id;
-	u32 iif;
-};
-
-struct inet_frag_queue {
-	struct rhash_head node;
-	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff *fragments_tail;
-	struct sk_buff *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir *fqdir;
-	struct callback_head rcu;
-};
-
-struct fib_rule;
-
-struct fib_lookup_arg;
-
-struct fib_rule_hdr;
-
-struct nlattr;
-
-struct netlink_ext_ack;
-
-struct nla_policy;
-
-struct fib_rules_ops {
-	int family;
-	struct list_head list;
-	int rule_size;
-	int addr_size;
-	int unresolved_rules;
-	int nr_goto_rules;
-	unsigned int fib_rules_seq;
-	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
-	bool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);
-	int (*match)(struct fib_rule *, struct flowi *, int);
-	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
-	int (*delete)(struct fib_rule *);
-	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
-	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
-	size_t (*nlmsg_payload)(struct fib_rule *);
-	void (*flush_cache)(struct fib_rules_ops *);
-	int nlgroup;
-	const struct nla_policy *policy;
-	struct list_head rules_list;
-	struct module *owner;
-	struct net *fro_net;
-	struct callback_head rcu;
-};
-
-enum tcp_ca_event {
-	CA_EVENT_TX_START = 0,
-	CA_EVENT_CWND_RESTART = 1,
-	CA_EVENT_COMPLETE_CWR = 2,
-	CA_EVENT_LOSS = 3,
-	CA_EVENT_ECN_NO_CE = 4,
-	CA_EVENT_ECN_IS_CE = 5,
-};
-
-struct ack_sample;
-
-struct rate_sample;
-
-union tcp_cc_info;
-
-struct tcp_congestion_ops {
-	struct list_head list;
-	u32 key;
-	u32 flags;
-	void (*init)(struct sock *);
-	void (*release)(struct sock *);
-	u32 (*ssthresh)(struct sock *);
-	void (*cong_avoid)(struct sock *, u32, u32);
-	void (*set_state)(struct sock *, u8);
-	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
-	void (*in_ack_event)(struct sock *, u32);
-	u32 (*undo_cwnd)(struct sock *);
-	void (*pkts_acked)(struct sock *, const struct ack_sample *);
-	u32 (*min_tso_segs)(struct sock *);
-	u32 (*sndbuf_expand)(struct sock *);
-	void (*cong_control)(struct sock *, const struct rate_sample *);
-	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
-	char name[16];
-	struct module *owner;
-};
-
-struct fib_notifier_ops {
-	int family;
-	struct list_head list;
-	unsigned int (*fib_seq_read)(struct net *);
-	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
-	struct module *owner;
-	struct callback_head rcu;
-};
-
-struct xfrm_state;
-
-struct lwtunnel_state;
-
-struct dst_entry {
-	struct net_device *dev;
-	struct dst_ops *ops;
-	long unsigned int _metrics;
-	long unsigned int expires;
-	struct xfrm_state *xfrm;
-	int (*input)(struct sk_buff *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	short unsigned int flags;
-	short int obsolete;
-	short unsigned int header_len;
-	short unsigned int trailer_len;
-	atomic_t __refcnt;
-	int __use;
-	long unsigned int lastuse;
-	struct lwtunnel_state *lwtstate;
-	struct callback_head callback_head;
-	short int error;
-	short int __pad;
-	__u32 tclassid;
-};
-
-struct hh_cache {
-	unsigned int hh_len;
-	seqlock_t hh_lock;
-	long unsigned int hh_data[12];
-};
-
-struct neigh_table;
-
-struct neigh_parms;
-
-struct neigh_ops;
-
-struct neighbour {
-	struct neighbour *next;
-	struct neigh_table *tbl;
-	struct neigh_parms *parms;
-	long unsigned int confirmed;
-	long unsigned int updated;
-	rwlock_t lock;
-	refcount_t refcnt;
-	unsigned int arp_queue_len_bytes;
-	struct sk_buff_head arp_queue;
-	struct timer_list timer;
-	long unsigned int used;
-	atomic_t probes;
-	__u8 flags;
-	__u8 nud_state;
-	__u8 type;
-	__u8 dead;
-	u8 protocol;
-	seqlock_t ha_lock;
-	int: 32;
-	unsigned char ha[32];
-	struct hh_cache hh;
-	int (*output)(struct neighbour *, struct sk_buff *);
-	const struct neigh_ops *ops;
-	struct list_head gc_list;
-	struct callback_head rcu;
-	struct net_device *dev;
-	u8 primary_key[0];
-};
-
-struct ipv6_stable_secret {
-	bool initialized;
-	struct in6_addr secret;
-};
-
-struct ipv6_devconf {
-	__s32 forwarding;
-	__s32 hop_limit;
-	__s32 mtu6;
-	__s32 accept_ra;
-	__s32 accept_redirects;
-	__s32 autoconf;
-	__s32 dad_transmits;
-	__s32 rtr_solicits;
-	__s32 rtr_solicit_interval;
-	__s32 rtr_solicit_max_interval;
-	__s32 rtr_solicit_delay;
-	__s32 force_mld_version;
-	__s32 mldv1_unsolicited_report_interval;
-	__s32 mldv2_unsolicited_report_interval;
-	__s32 use_tempaddr;
-	__s32 temp_valid_lft;
-	__s32 temp_prefered_lft;
-	__s32 regen_max_retry;
-	__s32 max_desync_factor;
-	__s32 max_addresses;
-	__s32 accept_ra_defrtr;
-	__s32 accept_ra_min_hop_limit;
-	__s32 accept_ra_pinfo;
-	__s32 ignore_routes_with_linkdown;
-	__s32 proxy_ndp;
-	__s32 accept_source_route;
-	__s32 accept_ra_from_local;
-	__s32 disable_ipv6;
-	__s32 drop_unicast_in_l2_multicast;
-	__s32 accept_dad;
-	__s32 force_tllao;
-	__s32 ndisc_notify;
-	__s32 suppress_frag_ndisc;
-	__s32 accept_ra_mtu;
-	__s32 drop_unsolicited_na;
-	struct ipv6_stable_secret stable_secret;
-	__s32 use_oif_addrs_only;
-	__s32 keep_addr_on_down;
-	__s32 seg6_enabled;
-	__u32 enhanced_dad;
-	__u32 addr_gen_mode;
-	__s32 disable_policy;
-	__s32 ndisc_tclass;
-	struct ctl_table_header *sysctl_header;
-};
-
-struct nf_queue_entry;
-
-struct nf_queue_handler {
-	int (*outfn)(struct nf_queue_entry *, unsigned int);
-	void (*nf_hook_drop)(struct net *);
-};
-
-enum nf_log_type {
-	NF_LOG_TYPE_LOG = 0,
-	NF_LOG_TYPE_ULOG = 1,
-	NF_LOG_TYPE_MAX = 2,
-};
-
-typedef u8 u_int8_t;
-
-struct nf_loginfo;
-
-typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
-
-struct nf_logger {
-	char *name;
-	enum nf_log_type type;
-	nf_logfn *logfn;
-	struct module *me;
-};
-
-struct hlist_nulls_head {
-	struct hlist_nulls_node *first;
-};
-
-struct ip_conntrack_stat {
-	unsigned int found;
-	unsigned int invalid;
-	unsigned int ignore;
-	unsigned int insert;
-	unsigned int insert_failed;
-	unsigned int drop;
-	unsigned int early_drop;
-	unsigned int error;
-	unsigned int expect_new;
-	unsigned int expect_create;
-	unsigned int expect_delete;
-	unsigned int search_restart;
-};
-
-struct ct_pcpu {
-	spinlock_t lock;
-	struct hlist_nulls_head unconfirmed;
-	struct hlist_nulls_head dying;
-};
-
-typedef enum {
-	SS_FREE = 0,
-	SS_UNCONNECTED = 1,
-	SS_CONNECTING = 2,
-	SS_CONNECTED = 3,
-	SS_DISCONNECTING = 4,
-} socket_state;
-
-struct socket_wq {
-	wait_queue_head_t wait;
-	struct fasync_struct *fasync_list;
-	long unsigned int flags;
-	struct callback_head rcu;
-	long: 64;
-};
-
-struct proto_ops;
-
-struct socket {
-	socket_state state;
-	short int type;
-	long unsigned int flags;
-	struct file *file;
-	struct sock *sk;
-	const struct proto_ops *ops;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct socket_wq wq;
-};
-
-typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
-
-struct proto_ops {
-	int family;
-	struct module *owner;
-	int (*release)(struct socket *);
-	int (*bind)(struct socket *, struct sockaddr *, int);
-	int (*connect)(struct socket *, struct sockaddr *, int, int);
-	int (*socketpair)(struct socket *, struct socket *);
-	int (*accept)(struct socket *, struct socket *, int, bool);
-	int (*getname)(struct socket *, struct sockaddr *, int);
-	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
-	int (*ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);
-	int (*gettstamp)(struct socket *, void *, bool, bool);
-	int (*listen)(struct socket *, int);
-	int (*shutdown)(struct socket *, int);
-	int (*setsockopt)(struct socket *, int, int, char *, unsigned int);
-	int (*getsockopt)(struct socket *, int, int, char *, int *);
-	int (*compat_setsockopt)(struct socket *, int, int, char *, unsigned int);
-	int (*compat_getsockopt)(struct socket *, int, int, char *, int *);
-	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
-	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
-	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
-	ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
-	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	int (*set_peek_off)(struct sock *, int);
-	int (*peek_len)(struct socket *);
-	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
-	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
-	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
-	int (*set_rcvlowat)(struct sock *, int);
-};
-
-enum swiotlb_force {
-	SWIOTLB_NORMAL = 0,
-	SWIOTLB_FORCE = 1,
-	SWIOTLB_NO_FORCE = 2,
-};
-
-struct pipe_buf_operations;
-
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations *ops;
-	unsigned int flags;
-	long unsigned int private;
-};
-
-struct pipe_buf_operations {
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-	int (*steal)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
-};
-
-struct skb_ext {
-	refcount_t refcnt;
-	u8 offset[1];
-	u8 chunks;
-	short: 16;
-	char data[0];
-};
-
-struct skb_checksum_ops {
-	__wsum (*update)(const void *, int, __wsum);
-	__wsum (*combine)(__wsum, __wsum, int, int);
-};
-
-struct pernet_operations {
-	struct list_head list;
-	int (*init)(struct net *);
-	void (*pre_exit)(struct net *);
-	void (*exit)(struct net *);
-	void (*exit_batch)(struct list_head *);
-	unsigned int *id;
-	size_t size;
-};
-
-struct auth_cred {
-	const struct cred *cred;
-	const char *principal;
-};
-
-struct rpc_authops;
-
-struct rpc_cred_cache;
-
-struct rpc_auth {
-	unsigned int au_cslack;
-	unsigned int au_rslack;
-	unsigned int au_verfsize;
-	unsigned int au_ralign;
-	unsigned int au_flags;
-	const struct rpc_authops *au_ops;
-	rpc_authflavor_t au_flavor;
-	refcount_t au_count;
-	struct rpc_cred_cache *au_credcache;
-};
-
-struct rpc_credops {
-	const char *cr_name;
-	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
-	void (*crdestroy)(struct rpc_cred *);
-	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
-	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
-	int (*crrefresh)(struct rpc_task *);
-	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
-	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
-	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
-	int (*crkey_timeout)(struct rpc_cred *);
-	char * (*crstringify_acceptor)(struct rpc_cred *);
-	bool (*crneed_reencode)(struct rpc_task *);
-};
-
-struct rpc_auth_create_args;
-
-struct rpcsec_gss_info;
-
-struct rpc_authops {
-	struct module *owner;
-	rpc_authflavor_t au_flavor;
-	char *au_name;
-	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
-	void (*destroy)(struct rpc_auth *);
-	int (*hash_cred)(struct auth_cred *, unsigned int);
-	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
-	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
-	int (*list_pseudoflavors)(rpc_authflavor_t *, int);
-	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
-	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
-	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
-};
-
-struct rpc_auth_create_args {
-	rpc_authflavor_t pseudoflavor;
-	const char *target_name;
-};
-
-struct rpcsec_gss_oid {
-	unsigned int len;
-	u8 data[32];
-};
-
-struct rpcsec_gss_info {
-	struct rpcsec_gss_oid oid;
-	u32 qop;
-	u32 service;
-};
-
-struct rpc_xprt_ops {
-	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
-	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
-	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
-	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
-	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
-	void (*rpcbind)(struct rpc_task *);
-	void (*set_port)(struct rpc_xprt *, short unsigned int);
-	void (*connect)(struct rpc_xprt *, struct rpc_task *);
-	int (*buf_alloc)(struct rpc_task *);
-	void (*buf_free)(struct rpc_task *);
-	void (*prepare_request)(struct rpc_rqst *);
-	int (*send_request)(struct rpc_rqst *);
-	void (*wait_for_reply_request)(struct rpc_task *);
-	void (*timer)(struct rpc_xprt *, struct rpc_task *);
-	void (*release_request)(struct rpc_task *);
-	void (*close)(struct rpc_xprt *);
-	void (*destroy)(struct rpc_xprt *);
-	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
-	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
-	int (*enable_swap)(struct rpc_xprt *);
-	void (*disable_swap)(struct rpc_xprt *);
-	void (*inject_disconnect)(struct rpc_xprt *);
-	int (*bc_setup)(struct rpc_xprt *, unsigned int);
-	size_t (*bc_maxpayload)(struct rpc_xprt *);
-	unsigned int (*bc_num_slots)(struct rpc_xprt *);
-	void (*bc_free_rqst)(struct rpc_rqst *);
-	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
-};
-
-struct rpc_xprt_switch {
-	spinlock_t xps_lock;
-	struct kref xps_kref;
-	unsigned int xps_nxprts;
-	unsigned int xps_nactive;
-	atomic_long_t xps_queuelen;
-	struct list_head xps_xprt_list;
-	struct net *xps_net;
-	const struct rpc_xprt_iter_ops *xps_iter_ops;
-	struct callback_head xps_rcu;
-};
-
-struct rpc_stat {
-	const struct rpc_program *program;
-	unsigned int netcnt;
-	unsigned int netudpcnt;
-	unsigned int nettcpcnt;
-	unsigned int nettcpconn;
-	unsigned int netreconn;
-	unsigned int rpccnt;
-	unsigned int rpcretrans;
-	unsigned int rpcauthrefresh;
-	unsigned int rpcgarbage;
-};
-
-struct rpc_version;
-
-struct rpc_program {
-	const char *name;
-	u32 number;
-	unsigned int nrvers;
-	const struct rpc_version **version;
-	struct rpc_stat *stats;
-	const char *pipe_dir_name;
-};
-
-struct ipv6_params {
-	__s32 disable_ipv6;
-	__s32 autoconf;
-};
-
-struct dql {
-	unsigned int num_queued;
-	unsigned int adj_limit;
-	unsigned int last_obj_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int limit;
-	unsigned int num_completed;
-	unsigned int prev_ovlimit;
-	unsigned int prev_num_queued;
-	unsigned int prev_last_obj_cnt;
-	unsigned int lowest_slack;
-	long unsigned int slack_start_time;
-	unsigned int max_limit;
-	unsigned int min_limit;
-	unsigned int slack_hold_time;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-struct ethtool_drvinfo {
-	__u32 cmd;
-	char driver[32];
-	char version[32];
-	char fw_version[32];
-	char bus_info[32];
-	char erom_version[32];
-	char reserved2[12];
-	__u32 n_priv_flags;
-	__u32 n_stats;
-	__u32 testinfo_len;
-	__u32 eedump_len;
-	__u32 regdump_len;
-};
-
-struct ethtool_wolinfo {
-	__u32 cmd;
-	__u32 supported;
-	__u32 wolopts;
-	__u8 sopass[6];
-};
-
-struct ethtool_tunable {
-	__u32 cmd;
-	__u32 id;
-	__u32 type_id;
-	__u32 len;
-	void *data[0];
-};
-
-struct ethtool_regs {
-	__u32 cmd;
-	__u32 version;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eeprom {
-	__u32 cmd;
-	__u32 magic;
-	__u32 offset;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eee {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertised;
-	__u32 lp_advertised;
-	__u32 eee_active;
-	__u32 eee_enabled;
-	__u32 tx_lpi_enabled;
-	__u32 tx_lpi_timer;
-	__u32 reserved[2];
-};
-
-struct ethtool_modinfo {
-	__u32 cmd;
-	__u32 type;
-	__u32 eeprom_len;
-	__u32 reserved[8];
-};
-
-struct ethtool_coalesce {
-	__u32 cmd;
-	__u32 rx_coalesce_usecs;
-	__u32 rx_max_coalesced_frames;
-	__u32 rx_coalesce_usecs_irq;
-	__u32 rx_max_coalesced_frames_irq;
-	__u32 tx_coalesce_usecs;
-	__u32 tx_max_coalesced_frames;
-	__u32 tx_coalesce_usecs_irq;
-	__u32 tx_max_coalesced_frames_irq;
-	__u32 stats_block_coalesce_usecs;
-	__u32 use_adaptive_rx_coalesce;
-	__u32 use_adaptive_tx_coalesce;
-	__u32 pkt_rate_low;
-	__u32 rx_coalesce_usecs_low;
-	__u32 rx_max_coalesced_frames_low;
-	__u32 tx_coalesce_usecs_low;
-	__u32 tx_max_coalesced_frames_low;
-	__u32 pkt_rate_high;
-	__u32 rx_coalesce_usecs_high;
-	__u32 rx_max_coalesced_frames_high;
-	__u32 tx_coalesce_usecs_high;
-	__u32 tx_max_coalesced_frames_high;
-	__u32 rate_sample_interval;
-};
-
-struct ethtool_ringparam {
-	__u32 cmd;
-	__u32 rx_max_pending;
-	__u32 rx_mini_max_pending;
-	__u32 rx_jumbo_max_pending;
-	__u32 tx_max_pending;
-	__u32 rx_pending;
-	__u32 rx_mini_pending;
-	__u32 rx_jumbo_pending;
-	__u32 tx_pending;
-};
-
-struct ethtool_channels {
-	__u32 cmd;
-	__u32 max_rx;
-	__u32 max_tx;
-	__u32 max_other;
-	__u32 max_combined;
-	__u32 rx_count;
-	__u32 tx_count;
-	__u32 other_count;
-	__u32 combined_count;
-};
-
-struct ethtool_pauseparam {
-	__u32 cmd;
-	__u32 autoneg;
-	__u32 rx_pause;
-	__u32 tx_pause;
-};
-
-struct ethtool_test {
-	__u32 cmd;
-	__u32 flags;
-	__u32 reserved;
-	__u32 len;
-	__u64 data[0];
-};
-
-struct ethtool_stats {
-	__u32 cmd;
-	__u32 n_stats;
-	__u64 data[0];
-};
-
-struct ethtool_tcpip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tos;
-};
-
-struct ethtool_ah_espip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 spi;
-	__u8 tos;
-};
-
-struct ethtool_usrip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 l4_4_bytes;
-	__u8 tos;
-	__u8 ip_ver;
-	__u8 proto;
-};
-
-struct ethtool_tcpip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tclass;
-};
-
-struct ethtool_ah_espip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 spi;
-	__u8 tclass;
-};
-
-struct ethtool_usrip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 l4_4_bytes;
-	__u8 tclass;
-	__u8 l4_proto;
-};
-
-union ethtool_flow_union {
-	struct ethtool_tcpip4_spec tcp_ip4_spec;
-	struct ethtool_tcpip4_spec udp_ip4_spec;
-	struct ethtool_tcpip4_spec sctp_ip4_spec;
-	struct ethtool_ah_espip4_spec ah_ip4_spec;
-	struct ethtool_ah_espip4_spec esp_ip4_spec;
-	struct ethtool_usrip4_spec usr_ip4_spec;
-	struct ethtool_tcpip6_spec tcp_ip6_spec;
-	struct ethtool_tcpip6_spec udp_ip6_spec;
-	struct ethtool_tcpip6_spec sctp_ip6_spec;
-	struct ethtool_ah_espip6_spec ah_ip6_spec;
-	struct ethtool_ah_espip6_spec esp_ip6_spec;
-	struct ethtool_usrip6_spec usr_ip6_spec;
-	struct ethhdr ether_spec;
-	__u8 hdata[52];
-};
-
-struct ethtool_flow_ext {
-	__u8 padding[2];
-	unsigned char h_dest[6];
-	__be16 vlan_etype;
-	__be16 vlan_tci;
-	__be32 data[2];
-};
-
-struct ethtool_rx_flow_spec {
-	__u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	__u64 ring_cookie;
-	__u32 location;
-};
-
-struct ethtool_rxnfc {
-	__u32 cmd;
-	__u32 flow_type;
-	__u64 data;
-	struct ethtool_rx_flow_spec fs;
-	union {
-		__u32 rule_cnt;
-		__u32 rss_context;
-	};
-	__u32 rule_locs[0];
-};
-
-struct ethtool_flash {
-	__u32 cmd;
-	__u32 region;
-	char data[128];
-};
-
-struct ethtool_dump {
-	__u32 cmd;
-	__u32 version;
-	__u32 flag;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_ts_info {
-	__u32 cmd;
-	__u32 so_timestamping;
-	__s32 phc_index;
-	__u32 tx_types;
-	__u32 tx_reserved[3];
-	__u32 rx_filters;
-	__u32 rx_reserved[3];
-};
-
-struct ethtool_fecparam {
-	__u32 cmd;
-	__u32 active_fec;
-	__u32 fec;
-	__u32 reserved;
-};
-
-struct ethtool_link_settings {
-	__u32 cmd;
-	__u32 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__s8 link_mode_masks_nwords;
-	__u8 transceiver;
-	__u8 reserved1[3];
-	__u32 reserved[7];
-	__u32 link_mode_masks[0];
-};
-
-enum ethtool_phys_id_state {
-	ETHTOOL_ID_INACTIVE = 0,
-	ETHTOOL_ID_ACTIVE = 1,
-	ETHTOOL_ID_ON = 2,
-	ETHTOOL_ID_OFF = 3,
-};
-
-struct ethtool_link_ksettings {
-	struct ethtool_link_settings base;
-	struct {
-		long unsigned int supported[2];
-		long unsigned int advertising[2];
-		long unsigned int lp_advertising[2];
-	} link_modes;
-};
-
-struct ethtool_ops {
-	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device *);
-	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device *);
-	void (*set_msglevel)(struct net_device *, u32);
-	int (*nway_reset)(struct net_device *);
-	u32 (*get_link)(struct net_device *);
-	int (*get_eeprom_len)(struct net_device *);
-	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device *, u32, u8 *);
-	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device *);
-	void (*complete)(struct net_device *);
-	u32 (*get_priv_flags)(struct net_device *);
-	int (*set_priv_flags)(struct net_device *, u32);
-	int (*get_sset_count)(struct net_device *, int);
-	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device *, struct ethtool_flash *);
-	int (*reset)(struct net_device *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device *);
-	u32 (*get_rxfh_indir_size)(struct net_device *);
-	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-};
-
-struct xdp_mem_info {
-	u32 type;
-	u32 id;
-};
-
-struct xdp_rxq_info {
-	struct net_device *dev;
-	u32 queue_index;
-	u32 reg_state;
-	struct xdp_mem_info mem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_frame {
-	void *data;
-	u16 len;
-	u16 headroom;
-	u16 metasize;
-	struct xdp_mem_info mem;
-	struct net_device *dev_rx;
-};
-
-struct nlmsghdr {
-	__u32 nlmsg_len;
-	__u16 nlmsg_type;
-	__u16 nlmsg_flags;
-	__u32 nlmsg_seq;
-	__u32 nlmsg_pid;
-};
-
-struct nlattr {
-	__u16 nla_len;
-	__u16 nla_type;
-};
-
-struct netlink_ext_ack {
-	const char *_msg;
-	const struct nlattr *bad_attr;
-	u8 cookie[20];
-	u8 cookie_len;
-};
-
-struct netlink_callback {
-	struct sk_buff *skb;
-	const struct nlmsghdr *nlh;
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	struct netlink_ext_ack *extack;
-	u16 family;
-	u16 min_dump_alloc;
-	bool strict_check;
-	u16 answer_flags;
-	unsigned int prev_seq;
-	unsigned int seq;
-	union {
-		u8 ctx[48];
-		long int args[6];
-	};
-};
-
-struct ndmsg {
-	__u8 ndm_family;
-	__u8 ndm_pad1;
-	__u16 ndm_pad2;
-	__s32 ndm_ifindex;
-	__u16 ndm_state;
-	__u8 ndm_flags;
-	__u8 ndm_type;
-};
-
-struct rtnl_link_stats64 {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 rx_errors;
-	__u64 tx_errors;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-	__u64 multicast;
-	__u64 collisions;
-	__u64 rx_length_errors;
-	__u64 rx_over_errors;
-	__u64 rx_crc_errors;
-	__u64 rx_frame_errors;
-	__u64 rx_fifo_errors;
-	__u64 rx_missed_errors;
-	__u64 tx_aborted_errors;
-	__u64 tx_carrier_errors;
-	__u64 tx_fifo_errors;
-	__u64 tx_heartbeat_errors;
-	__u64 tx_window_errors;
-	__u64 rx_compressed;
-	__u64 tx_compressed;
-	__u64 rx_nohandler;
-};
-
-struct ifla_vf_guid {
-	__u32 vf;
-	__u64 guid;
-};
-
-struct ifla_vf_stats {
-	__u64 rx_packets;
-	__u64 tx_packets;
-	__u64 rx_bytes;
-	__u64 tx_bytes;
-	__u64 broadcast;
-	__u64 multicast;
-	__u64 rx_dropped;
-	__u64 tx_dropped;
-};
-
-struct ifla_vf_info {
-	__u32 vf;
-	__u8 mac[32];
-	__u32 vlan;
-	__u32 qos;
-	__u32 spoofchk;
-	__u32 linkstate;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-	__u32 rss_query_en;
-	__u32 trusted;
-	__be16 vlan_proto;
-};
-
-struct tc_stats {
-	__u64 bytes;
-	__u32 packets;
-	__u32 drops;
-	__u32 overlimits;
-	__u32 bps;
-	__u32 pps;
-	__u32 qlen;
-	__u32 backlog;
-};
-
-struct tc_sizespec {
-	unsigned char cell_log;
-	unsigned char size_log;
-	short int cell_align;
-	int overhead;
-	unsigned int linklayer;
-	unsigned int mpu;
-	unsigned int mtu;
-	unsigned int tsize;
-};
-
-enum netdev_tx {
-	__NETDEV_TX_MIN = 2147483648,
-	NETDEV_TX_OK = 0,
-	NETDEV_TX_BUSY = 16,
-};
-
-typedef enum netdev_tx netdev_tx_t;
-
-struct header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
-	int (*parse)(const struct sk_buff *, unsigned char *);
-	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
-	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
-	bool (*validate)(const char *, unsigned int);
-	__be16 (*parse_protocol)(const struct sk_buff *);
-};
-
-struct gro_list {
-	struct list_head list;
-	int count;
-};
-
-struct napi_struct {
-	struct list_head poll_list;
-	long unsigned int state;
-	int weight;
-	long unsigned int gro_bitmask;
-	int (*poll)(struct napi_struct *, int);
-	int poll_owner;
-	struct net_device *dev;
-	struct gro_list gro_hash[8];
-	struct sk_buff *skb;
-	struct list_head rx_list;
-	int rx_count;
-	struct hrtimer timer;
-	struct list_head dev_list;
-	struct hlist_node napi_hash_node;
-	unsigned int napi_id;
-};
-
-struct xdp_umem;
-
-struct netdev_queue {
-	struct net_device *dev;
-	struct Qdisc *qdisc;
-	struct Qdisc *qdisc_sleeping;
-	struct kobject kobj;
-	int numa_node;
-	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
-	struct net_device *sb_dev;
-	struct xdp_umem *umem;
-	spinlock_t _xmit_lock;
-	int xmit_lock_owner;
-	long unsigned int trans_start;
-	long unsigned int state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dql dql;
-};
-
-struct qdisc_skb_head {
-	struct sk_buff *head;
-	struct sk_buff *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct gnet_stats_basic_packed {
-	__u64 bytes;
-	__u64 packets;
-};
-
-struct gnet_stats_queue {
-	__u32 qlen;
-	__u32 backlog;
-	__u32 drops;
-	__u32 requeues;
-	__u32 overlimits;
-};
-
-struct Qdisc_ops;
-
-struct qdisc_size_table;
-
-struct net_rate_estimator;
-
-struct gnet_stats_basic_cpu;
-
-struct Qdisc {
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int padded;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head gso_skb;
-	struct qdisc_skb_head q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc *next_sched;
-	struct sk_buff_head skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rps_map {
-	unsigned int len;
-	struct callback_head rcu;
-	u16 cpus[0];
-};
-
-struct rps_dev_flow {
-	u16 cpu;
-	u16 filter;
-	unsigned int last_qtail;
-};
-
-struct rps_dev_flow_table {
-	unsigned int mask;
-	struct callback_head rcu;
-	struct rps_dev_flow flows[0];
-};
-
-struct rps_sock_flow_table {
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 ents[0];
-};
-
-struct netdev_rx_queue {
-	struct rps_map *rps_map;
-	struct rps_dev_flow_table *rps_flow_table;
-	struct kobject kobj;
-	struct net_device *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
-	struct xdp_umem *umem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xps_map {
-	unsigned int len;
-	unsigned int alloc_len;
-	struct callback_head rcu;
-	u16 queues[0];
-};
-
-struct xps_dev_maps {
-	struct callback_head rcu;
-	struct xps_map *attr_map[0];
-};
-
-struct netdev_phys_item_id {
-	unsigned char id[32];
-	unsigned char id_len;
-};
-
-enum tc_setup_type {
-	TC_SETUP_QDISC_MQPRIO = 0,
-	TC_SETUP_CLSU32 = 1,
-	TC_SETUP_CLSFLOWER = 2,
-	TC_SETUP_CLSMATCHALL = 3,
-	TC_SETUP_CLSBPF = 4,
-	TC_SETUP_BLOCK = 5,
-	TC_SETUP_QDISC_CBS = 6,
-	TC_SETUP_QDISC_RED = 7,
-	TC_SETUP_QDISC_PRIO = 8,
-	TC_SETUP_QDISC_MQ = 9,
-	TC_SETUP_QDISC_ETF = 10,
-	TC_SETUP_ROOT_QDISC = 11,
-	TC_SETUP_QDISC_GRED = 12,
-	TC_SETUP_QDISC_TAPRIO = 13,
-	TC_SETUP_FT = 14,
-};
-
-enum bpf_netdev_command {
-	XDP_SETUP_PROG = 0,
-	XDP_SETUP_PROG_HW = 1,
-	XDP_QUERY_PROG = 2,
-	XDP_QUERY_PROG_HW = 3,
-	BPF_OFFLOAD_MAP_ALLOC = 4,
-	BPF_OFFLOAD_MAP_FREE = 5,
-	XDP_SETUP_XSK_UMEM = 6,
-};
-
-struct netdev_bpf {
-	enum bpf_netdev_command command;
-	union {
-		struct {
-			u32 flags;
-			struct bpf_prog *prog;
-			struct netlink_ext_ack *extack;
-		};
-		struct {
-			u32 prog_id;
-			u32 prog_flags;
-		};
-		struct {
-			struct bpf_offloaded_map *offmap;
-		};
-		struct {
-			struct xdp_umem *umem;
-			u16 queue_id;
-		} xsk;
-	};
-};
-
-struct dev_ifalias {
-	struct callback_head rcuhead;
-	char ifalias[0];
-};
-
-struct netdev_name_node {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device *dev;
-	const char *name;
-};
-
-struct udp_tunnel_info;
-
-struct devlink_port;
-
-struct net_device_ops {
-	int (*ndo_init)(struct net_device *);
-	void (*ndo_uninit)(struct net_device *);
-	int (*ndo_open)(struct net_device *);
-	int (*ndo_stop)(struct net_device *);
-	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
-	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
-	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
-	void (*ndo_change_rx_flags)(struct net_device *, int);
-	void (*ndo_set_rx_mode)(struct net_device *);
-	int (*ndo_set_mac_address)(struct net_device *, void *);
-	int (*ndo_validate_addr)(struct net_device *);
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-	int (*ndo_set_config)(struct net_device *, struct ifmap *);
-	int (*ndo_change_mtu)(struct net_device *, int);
-	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
-	void (*ndo_tx_timeout)(struct net_device *);
-	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
-	bool (*ndo_has_offload_stats)(const struct net_device *, int);
-	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
-	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
-	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
-	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
-	void (*ndo_poll_controller)(struct net_device *);
-	int (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);
-	void (*ndo_netpoll_cleanup)(struct net_device *);
-	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
-	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
-	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
-	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
-	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
-	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
-	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
-	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
-	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
-	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
-	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
-	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
-	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
-	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
-	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
-	int (*ndo_del_slave)(struct net_device *, struct net_device *);
-	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
-	int (*ndo_set_features)(struct net_device *, netdev_features_t);
-	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
-	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
-	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);
-	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
-	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
-	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
-	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
-	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
-	int (*ndo_change_carrier)(struct net_device *, bool);
-	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
-	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);
-	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
-	void (*ndo_dfwd_del_station)(struct net_device *, void *);
-	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
-	int (*ndo_get_iflink)(const struct net_device *);
-	int (*ndo_change_proto_down)(struct net_device *, bool);
-	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
-	void (*ndo_set_rx_headroom)(struct net_device *, int);
-	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
-	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
-	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
-	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
-};
-
-struct neigh_parms {
-	possible_net_t net;
-	struct net_device *dev;
-	struct list_head list;
-	int (*neigh_setup)(struct neighbour *);
-	struct neigh_table *tbl;
-	void *sysctl_table;
-	int dead;
-	refcount_t refcnt;
-	struct callback_head callback_head;
-	int reachable_time;
-	int data[13];
-	long unsigned int data_state[1];
-};
-
-struct pcpu_lstats {
-	u64_stats_t packets;
-	u64_stats_t bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct pcpu_sw_netstats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 tx_packets;
-	u64 tx_bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct nd_opt_hdr;
-
-struct ndisc_options;
-
-struct prefix_info;
-
-struct ndisc_ops {
-	int (*is_useropt)(u8);
-	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
-	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
-	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
-	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
-	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
-};
-
-struct ipv6_devstat {
-	struct proc_dir_entry *proc_dir_entry;
-	struct ipstats_mib *ipv6;
-	struct icmpv6_mib_device *icmpv6dev;
-	struct icmpv6msg_mib_device *icmpv6msgdev;
-};
-
-struct ifmcaddr6;
-
-struct ifacaddr6;
-
-struct inet6_dev {
-	struct net_device *dev;
-	struct list_head addr_list;
-	struct ifmcaddr6 *mc_list;
-	struct ifmcaddr6 *mc_tomb;
-	spinlock_t mc_lock;
-	unsigned char mc_qrv;
-	unsigned char mc_gq_running;
-	unsigned char mc_ifc_count;
-	unsigned char mc_dad_count;
-	long unsigned int mc_v1_seen;
-	long unsigned int mc_qi;
-	long unsigned int mc_qri;
-	long unsigned int mc_maxdelay;
-	struct timer_list mc_gq_timer;
-	struct timer_list mc_ifc_timer;
-	struct timer_list mc_dad_timer;
-	struct ifacaddr6 *ac_list;
-	rwlock_t lock;
-	refcount_t refcnt;
-	__u32 if_flags;
-	int dead;
-	u32 desync_factor;
-	u8 rndid[8];
-	struct list_head tempaddr_list;
-	struct in6_addr token;
-	struct neigh_parms *nd_parms;
-	struct ipv6_devconf cnf;
-	struct ipv6_devstat stats;
-	struct timer_list rs_timer;
-	__s32 rs_interval;
-	__u8 rs_probes;
-	long unsigned int tstamp;
-	struct callback_head rcu;
-};
-
-struct tcf_proto;
-
-struct mini_Qdisc {
-	struct tcf_proto *filter_list;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
-};
-
-struct rtnl_link_ops {
-	struct list_head list;
-	const char *kind;
-	size_t priv_size;
-	void (*setup)(struct net_device *);
-	unsigned int maxtype;
-	const struct nla_policy *policy;
-	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	void (*dellink)(struct net_device *, struct list_head *);
-	size_t (*get_size)(const struct net_device *);
-	int (*fill_info)(struct sk_buff *, const struct net_device *);
-	size_t (*get_xstats_size)(const struct net_device *);
-	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
-	unsigned int (*get_num_tx_queues)();
-	unsigned int (*get_num_rx_queues)();
-	unsigned int slave_maxtype;
-	const struct nla_policy *slave_policy;
-	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
-	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
-	struct net * (*get_link_net)(const struct net_device *);
-	size_t (*get_linkxstats_size)(const struct net_device *, int);
-	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
-};
-
-struct sd_flow_limit {
-	u64 count;
-	unsigned int num_buckets;
-	unsigned int history_head;
-	u16 history[128];
-	u8 buckets[0];
-};
-
-struct softnet_data {
-	struct list_head poll_list;
-	struct sk_buff_head process_queue;
-	unsigned int processed;
-	unsigned int time_squeeze;
-	unsigned int received_rps;
-	struct softnet_data *rps_ipi_list;
-	struct sd_flow_limit *flow_limit;
-	struct Qdisc *output_queue;
-	struct Qdisc **output_queue_tailp;
-	struct sk_buff *completion_queue;
-	struct {
-		u16 recursion;
-		u8 more;
-	} xmit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int input_queue_head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t csd;
-	struct softnet_data *rps_ipi_next;
-	unsigned int cpu;
-	unsigned int input_queue_tail;
-	unsigned int dropped;
-	struct sk_buff_head input_pkt_queue;
-	struct napi_struct backlog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	RTAX_UNSPEC = 0,
-	RTAX_LOCK = 1,
-	RTAX_MTU = 2,
-	RTAX_WINDOW = 3,
-	RTAX_RTT = 4,
-	RTAX_RTTVAR = 5,
-	RTAX_SSTHRESH = 6,
-	RTAX_CWND = 7,
-	RTAX_ADVMSS = 8,
-	RTAX_REORDERING = 9,
-	RTAX_HOPLIMIT = 10,
-	RTAX_INITCWND = 11,
-	RTAX_FEATURES = 12,
-	RTAX_RTO_MIN = 13,
-	RTAX_INITRWND = 14,
-	RTAX_QUICKACK = 15,
-	RTAX_CC_ALGO = 16,
-	RTAX_FASTOPEN_NO_COOKIE = 17,
-	__RTAX_MAX = 18,
-};
-
-struct tcmsg {
-	unsigned char tcm_family;
-	unsigned char tcm__pad1;
-	short unsigned int tcm__pad2;
-	int tcm_ifindex;
-	__u32 tcm_handle;
-	__u32 tcm_parent;
-	__u32 tcm_info;
-};
-
-struct gnet_stats_basic_cpu {
-	struct gnet_stats_basic_packed bstats;
-	struct u64_stats_sync syncp;
-};
-
-struct gnet_dump {
-	spinlock_t *lock;
-	struct sk_buff *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
-};
-
-struct nla_policy {
-	u8 type;
-	u8 validation_type;
-	u16 len;
-	union {
-		const void *validation_data;
-		struct {
-			s16 min;
-			s16 max;
-		};
-		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
-		u16 strict_start_type;
-	};
-};
-
-struct nl_info {
-	struct nlmsghdr *nlh;
-	struct net *nl_net;
-	u32 portid;
-	u8 skip_notify: 1;
-	u8 skip_notify_kernel: 1;
-};
-
-struct rhash_lock_head {};
-
-struct flow_block {
-	struct list_head cb_list;
-};
-
-typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
-
-struct qdisc_size_table {
-	struct callback_head rcu;
-	struct list_head list;
-	struct tc_sizespec szopts;
-	int refcnt;
-	u16 data[0];
-};
-
-struct Qdisc_class_ops;
-
-struct Qdisc_ops {
-	struct Qdisc_ops *next;
-	const struct Qdisc_class_ops *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	struct sk_buff * (*peek)(struct Qdisc *);
-	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc *);
-	void (*destroy)(struct Qdisc *);
-	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc *);
-	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	int (*dump)(struct Qdisc *, struct sk_buff *);
-	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
-	void (*ingress_block_set)(struct Qdisc *, u32);
-	void (*egress_block_set)(struct Qdisc *, u32);
-	u32 (*ingress_block_get)(struct Qdisc *);
-	u32 (*egress_block_get)(struct Qdisc *);
-	struct module *owner;
-};
-
-struct qdisc_walker;
-
-struct tcf_block;
-
-struct Qdisc_class_ops {
-	unsigned int flags;
-	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
-	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
-	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc *, u32);
-	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc *, long unsigned int);
-	void (*walk)(struct Qdisc *, struct qdisc_walker *);
-	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
-	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
-};
-
-struct tcf_chain;
-
-struct tcf_block {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	refcount_t refcnt;
-	struct net *net;
-	struct Qdisc *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
-	struct {
-		struct tcf_chain *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
-};
-
-struct tcf_result;
-
-struct tcf_proto_ops;
-
-struct tcf_proto {
-	struct tcf_proto *next;
-	void *root;
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops *ops;
-	struct tcf_chain *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
-};
-
-struct tcf_result {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
-};
-
-struct tcf_walker;
-
-struct tcf_proto_ops {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	int (*init)(struct tcf_proto *);
-	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto *, u32);
-	void (*put)(struct tcf_proto *, void *);
-	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto *);
-	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto *, void *);
-	void (*hw_del)(struct tcf_proto *, void *);
-	void (*bind_class)(void *, u32, long unsigned int);
-	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
-	struct module *owner;
-	int flags;
-};
-
-struct tcf_chain {
-	struct mutex filter_chain_lock;
-	struct tcf_proto *filter_chain;
-	struct list_head list;
-	struct tcf_block *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct sock_fprog_kern {
-	u16 len;
-	struct sock_filter *filter;
-};
-
-struct sk_filter {
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct bpf_prog *prog;
-};
-
-struct bpf_redirect_info {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map *map;
-	struct bpf_map *map_to_flush;
-	u32 kern_flags;
-};
-
-enum {
-	NEIGH_VAR_MCAST_PROBES = 0,
-	NEIGH_VAR_UCAST_PROBES = 1,
-	NEIGH_VAR_APP_PROBES = 2,
-	NEIGH_VAR_MCAST_REPROBES = 3,
-	NEIGH_VAR_RETRANS_TIME = 4,
-	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
-	NEIGH_VAR_DELAY_PROBE_TIME = 6,
-	NEIGH_VAR_GC_STALETIME = 7,
-	NEIGH_VAR_QUEUE_LEN_BYTES = 8,
-	NEIGH_VAR_PROXY_QLEN = 9,
-	NEIGH_VAR_ANYCAST_DELAY = 10,
-	NEIGH_VAR_PROXY_DELAY = 11,
-	NEIGH_VAR_LOCKTIME = 12,
-	NEIGH_VAR_QUEUE_LEN = 13,
-	NEIGH_VAR_RETRANS_TIME_MS = 14,
-	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 15,
-	NEIGH_VAR_GC_INTERVAL = 16,
-	NEIGH_VAR_GC_THRESH1 = 17,
-	NEIGH_VAR_GC_THRESH2 = 18,
-	NEIGH_VAR_GC_THRESH3 = 19,
-	NEIGH_VAR_MAX = 20,
-};
-
-struct pneigh_entry;
-
-struct neigh_statistics;
-
-struct neigh_hash_table;
-
-struct neigh_table {
-	int family;
-	unsigned int entry_size;
-	unsigned int key_len;
-	__be16 protocol;
-	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
-	bool (*key_eq)(const struct neighbour *, const void *);
-	int (*constructor)(struct neighbour *);
-	int (*pconstructor)(struct pneigh_entry *);
-	void (*pdestructor)(struct pneigh_entry *);
-	void (*proxy_redo)(struct sk_buff *);
-	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
-	char *id;
-	struct neigh_parms parms;
-	struct list_head parms_list;
-	int gc_interval;
-	int gc_thresh1;
-	int gc_thresh2;
-	int gc_thresh3;
-	long unsigned int last_flush;
-	struct delayed_work gc_work;
-	struct timer_list proxy_timer;
-	struct sk_buff_head proxy_queue;
-	atomic_t entries;
-	atomic_t gc_entries;
-	struct list_head gc_list;
-	rwlock_t lock;
-	long unsigned int last_rand;
-	struct neigh_statistics *stats;
-	struct neigh_hash_table *nht;
-	struct pneigh_entry **phash_buckets;
-};
-
-struct neigh_statistics {
-	long unsigned int allocs;
-	long unsigned int destroys;
-	long unsigned int hash_grows;
-	long unsigned int res_failed;
-	long unsigned int lookups;
-	long unsigned int hits;
-	long unsigned int rcv_probes_mcast;
-	long unsigned int rcv_probes_ucast;
-	long unsigned int periodic_gc_runs;
-	long unsigned int forced_gc_runs;
-	long unsigned int unres_discards;
-	long unsigned int table_fulls;
-};
-
-struct neigh_ops {
-	int family;
-	void (*solicit)(struct neighbour *, struct sk_buff *);
-	void (*error_report)(struct neighbour *, struct sk_buff *);
-	int (*output)(struct neighbour *, struct sk_buff *);
-	int (*connected_output)(struct neighbour *, struct sk_buff *);
-};
-
-struct pneigh_entry {
-	struct pneigh_entry *next;
-	possible_net_t net;
-	struct net_device *dev;
-	u8 flags;
-	u8 protocol;
-	u8 key[0];
-};
-
-struct neigh_hash_table {
-	struct neighbour **hash_buckets;
-	unsigned int hash_shift;
-	__u32 hash_rnd[4];
-	struct callback_head rcu;
-};
-
-struct dst_metrics {
-	u32 metrics[17];
-	refcount_t refcnt;
-};
-
-enum {
-	TCP_ESTABLISHED = 1,
-	TCP_SYN_SENT = 2,
-	TCP_SYN_RECV = 3,
-	TCP_FIN_WAIT1 = 4,
-	TCP_FIN_WAIT2 = 5,
-	TCP_TIME_WAIT = 6,
-	TCP_CLOSE = 7,
-	TCP_CLOSE_WAIT = 8,
-	TCP_LAST_ACK = 9,
-	TCP_LISTEN = 10,
-	TCP_CLOSING = 11,
-	TCP_NEW_SYN_RECV = 12,
-	TCP_MAX_STATES = 13,
-};
-
-struct fib_rule_hdr {
-	__u8 family;
-	__u8 dst_len;
-	__u8 src_len;
-	__u8 tos;
-	__u8 table;
-	__u8 res1;
-	__u8 res2;
-	__u8 action;
-	__u32 flags;
-};
-
-struct fib_rule_port_range {
-	__u16 start;
-	__u16 end;
-};
-
-struct fib_kuid_range {
-	kuid_t start;
-	kuid_t end;
-};
-
-struct fib_rule {
-	struct list_head list;
-	int iifindex;
-	int oifindex;
-	u32 mark;
-	u32 mark_mask;
-	u32 flags;
-	u32 table;
-	u8 action;
-	u8 l3mdev;
-	u8 proto;
-	u8 ip_proto;
-	u32 target;
-	__be64 tun_id;
-	struct fib_rule *ctarget;
-	struct net *fr_net;
-	refcount_t refcnt;
-	u32 pref;
-	int suppress_ifgroup;
-	int suppress_prefixlen;
-	char iifname[16];
-	char oifname[16];
-	struct fib_kuid_range uid_range;
-	struct fib_rule_port_range sport_range;
-	struct fib_rule_port_range dport_range;
-	struct callback_head rcu;
-};
-
-struct fib_lookup_arg {
-	void *lookup_ptr;
-	const void *lookup_data;
-	void *result;
-	struct fib_rule *rule;
-	u32 table;
-	int flags;
-};
-
-struct smc_hashinfo;
-
-struct request_sock_ops;
-
-struct timewait_sock_ops;
-
-struct udp_table;
-
-struct raw_hashinfo;
-
-struct proto {
-	void (*close)(struct sock *, long int);
-	int (*pre_connect)(struct sock *, struct sockaddr *, int);
-	int (*connect)(struct sock *, struct sockaddr *, int);
-	int (*disconnect)(struct sock *, int);
-	struct sock * (*accept)(struct sock *, int, int *, bool);
-	int (*ioctl)(struct sock *, int, long unsigned int);
-	int (*init)(struct sock *);
-	void (*destroy)(struct sock *);
-	void (*shutdown)(struct sock *, int);
-	int (*setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*keepalive)(struct sock *, int);
-	int (*compat_setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*compat_getsockopt)(struct sock *, int, int, char *, int *);
-	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
-	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
-	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);
-	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
-	int (*bind)(struct sock *, struct sockaddr *, int);
-	int (*backlog_rcv)(struct sock *, struct sk_buff *);
-	void (*release_cb)(struct sock *);
-	int (*hash)(struct sock *);
-	void (*unhash)(struct sock *);
-	void (*rehash)(struct sock *);
-	int (*get_port)(struct sock *, short unsigned int);
-	unsigned int inuse_idx;
-	bool (*stream_memory_free)(const struct sock *, int);
-	bool (*stream_memory_read)(const struct sock *);
-	void (*enter_memory_pressure)(struct sock *);
-	void (*leave_memory_pressure)(struct sock *);
-	atomic_long_t *memory_allocated;
-	struct percpu_counter *sockets_allocated;
-	long unsigned int *memory_pressure;
-	long int *sysctl_mem;
-	int *sysctl_wmem;
-	int *sysctl_rmem;
-	u32 sysctl_wmem_offset;
-	u32 sysctl_rmem_offset;
-	int max_header;
-	bool no_autobind;
-	struct kmem_cache *slab;
-	unsigned int obj_size;
-	slab_flags_t slab_flags;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct percpu_counter *orphan_count;
-	struct request_sock_ops *rsk_prot;
-	struct timewait_sock_ops *twsk_prot;
-	union {
-		struct inet_hashinfo *hashinfo;
-		struct udp_table *udp_table;
-		struct raw_hashinfo *raw_hash;
-		struct smc_hashinfo *smc_hash;
-	} h;
-	struct module *owner;
-	char name[32];
-	struct list_head node;
-	int (*diag_destroy)(struct sock *, int);
-};
-
-struct request_sock;
-
-struct request_sock_ops {
-	int family;
-	unsigned int obj_size;
-	struct kmem_cache *slab;
-	char *slab_name;
-	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
-	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
-	void (*send_reset)(const struct sock *, struct sk_buff *);
-	void (*destructor)(struct request_sock *);
-	void (*syn_ack_timeout)(const struct request_sock *);
-};
-
-struct timewait_sock_ops {
-	struct kmem_cache *twsk_slab;
-	char *twsk_slab_name;
-	unsigned int twsk_obj_size;
-	int (*twsk_unique)(struct sock *, struct sock *, void *);
-	void (*twsk_destructor)(struct sock *);
-};
-
-struct request_sock {
-	struct sock_common __req_common;
-	struct request_sock *dl_next;
-	u16 mss;
-	u8 num_retrans;
-	u8 cookie_ts: 1;
-	u8 num_timeout: 7;
-	u32 ts_recent;
-	struct timer_list rsk_timer;
-	const struct request_sock_ops *rsk_ops;
-	struct sock *sk;
-	u32 *saved_syn;
-	u32 secid;
-	u32 peer_secid;
-};
-
-enum tsq_enum {
-	TSQ_THROTTLED = 0,
-	TSQ_QUEUED = 1,
-	TCP_TSQ_DEFERRED = 2,
-	TCP_WRITE_TIMER_DEFERRED = 3,
-	TCP_DELACK_TIMER_DEFERRED = 4,
-	TCP_MTU_REDUCED_DEFERRED = 5,
-};
-
-struct static_key_false_deferred {
-	struct static_key_false key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-struct ip6_sf_list {
-	struct ip6_sf_list *sf_next;
-	struct in6_addr sf_addr;
-	long unsigned int sf_count[2];
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ifmcaddr6 {
-	struct in6_addr mca_addr;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *next;
-	struct ip6_sf_list *mca_sources;
-	struct ip6_sf_list *mca_tomb;
-	unsigned int mca_sfmode;
-	unsigned char mca_crcount;
-	long unsigned int mca_sfcount[2];
-	struct timer_list mca_timer;
-	unsigned int mca_flags;
-	int mca_users;
-	refcount_t mca_refcnt;
-	spinlock_t mca_lock;
-	long unsigned int mca_cstamp;
-	long unsigned int mca_tstamp;
-};
-
-struct ifacaddr6 {
-	struct in6_addr aca_addr;
-	struct fib6_info *aca_rt;
-	struct ifacaddr6 *aca_next;
-	struct hlist_node aca_addr_lst;
-	int aca_users;
-	refcount_t aca_refcnt;
-	long unsigned int aca_cstamp;
-	long unsigned int aca_tstamp;
-	struct callback_head rcu;
-};
-
-struct fib6_result;
-
-struct fib6_nh;
-
-struct fib6_config;
-
-struct ipv6_stub {
-	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
-	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
-	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
-	int (*ipv6_route_input)(struct sk_buff *);
-	struct fib6_table * (*fib6_get_table)(struct net *, u32);
-	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
-	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
-	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
-	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
-	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
-	void (*fib6_nh_release)(struct fib6_nh *);
-	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
-	int (*ip6_del_rt)(struct net *, struct fib6_info *);
-	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
-	void (*udpv6_encap_enable)();
-	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
-	struct neigh_table *nd_tbl;
-};
-
-struct fib6_result {
-	struct fib6_nh *nh;
-	struct fib6_info *f6i;
-	u32 fib6_flags;
-	u8 fib6_type;
-	struct rt6_info *rt6;
-};
-
-struct ipv6_bpf_stub {
-	int (*inet6_bind)(struct sock *, struct sockaddr *, int, bool, bool);
-	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
-};
-
-enum {
-	__ND_OPT_PREFIX_INFO_END = 0,
-	ND_OPT_SOURCE_LL_ADDR = 1,
-	ND_OPT_TARGET_LL_ADDR = 2,
-	ND_OPT_PREFIX_INFO = 3,
-	ND_OPT_REDIRECT_HDR = 4,
-	ND_OPT_MTU = 5,
-	ND_OPT_NONCE = 14,
-	__ND_OPT_ARRAY_MAX = 15,
-	ND_OPT_ROUTE_INFO = 24,
-	ND_OPT_RDNSS = 25,
-	ND_OPT_DNSSL = 31,
-	ND_OPT_6CO = 34,
-	ND_OPT_CAPTIVE_PORTAL = 37,
-	__ND_OPT_MAX = 38,
-};
-
-struct nd_opt_hdr {
-	__u8 nd_opt_type;
-	__u8 nd_opt_len;
-};
-
-struct ndisc_options {
-	struct nd_opt_hdr *nd_opt_array[15];
-	struct nd_opt_hdr *nd_useropts;
-	struct nd_opt_hdr *nd_useropts_end;
-};
-
-struct prefix_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved: 6;
-	__u8 autoconf: 1;
-	__u8 onlink: 1;
-	__be32 valid;
-	__be32 prefered;
-	__be32 reserved2;
-	struct in6_addr prefix;
-};
-
-struct ip6_ra_chain {
-	struct ip6_ra_chain *next;
-	struct sock *sk;
-	int sel;
-	void (*destructor)(struct sock *);
-};
-
-struct rpc_xprt_iter_ops {
-	void (*xpi_rewind)(struct rpc_xprt_iter *);
-	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
-	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
-};
-
-struct rpc_version {
-	u32 number;
-	unsigned int nrprocs;
-	const struct rpc_procinfo *procs;
-	unsigned int *counts;
-};
-
-struct nfs_fh {
-	short unsigned int size;
-	unsigned char data[128];
-};
-
-enum nfs3_stable_how {
-	NFS_UNSTABLE = 0,
-	NFS_DATA_SYNC = 1,
-	NFS_FILE_SYNC = 2,
-	NFS_INVALID_STABLE_HOW = 4294967295,
-};
-
-struct nfs4_label {
-	uint32_t lfs;
-	uint32_t pi;
-	u32 len;
-	char *label;
-};
-
-typedef struct {
-	char data[8];
-} nfs4_verifier;
-
-struct nfs4_stateid_struct {
-	union {
-		char data[16];
-		struct {
-			__be32 seqid;
-			char other[12];
-		};
-	};
-	enum {
-		NFS4_INVALID_STATEID_TYPE = 0,
-		NFS4_SPECIAL_STATEID_TYPE = 1,
-		NFS4_OPEN_STATEID_TYPE = 2,
-		NFS4_LOCK_STATEID_TYPE = 3,
-		NFS4_DELEGATION_STATEID_TYPE = 4,
-		NFS4_LAYOUT_STATEID_TYPE = 5,
-		NFS4_PNFS_DS_STATEID_TYPE = 6,
-		NFS4_REVOKED_STATEID_TYPE = 7,
-	} type;
-};
-
-typedef struct nfs4_stateid_struct nfs4_stateid;
-
-enum nfs_opnum4 {
-	OP_ACCESS = 3,
-	OP_CLOSE = 4,
-	OP_COMMIT = 5,
-	OP_CREATE = 6,
-	OP_DELEGPURGE = 7,
-	OP_DELEGRETURN = 8,
-	OP_GETATTR = 9,
-	OP_GETFH = 10,
-	OP_LINK = 11,
-	OP_LOCK = 12,
-	OP_LOCKT = 13,
-	OP_LOCKU = 14,
-	OP_LOOKUP = 15,
-	OP_LOOKUPP = 16,
-	OP_NVERIFY = 17,
-	OP_OPEN = 18,
-	OP_OPENATTR = 19,
-	OP_OPEN_CONFIRM = 20,
-	OP_OPEN_DOWNGRADE = 21,
-	OP_PUTFH = 22,
-	OP_PUTPUBFH = 23,
-	OP_PUTROOTFH = 24,
-	OP_READ = 25,
-	OP_READDIR = 26,
-	OP_READLINK = 27,
-	OP_REMOVE = 28,
-	OP_RENAME = 29,
-	OP_RENEW = 30,
-	OP_RESTOREFH = 31,
-	OP_SAVEFH = 32,
-	OP_SECINFO = 33,
-	OP_SETATTR = 34,
-	OP_SETCLIENTID = 35,
-	OP_SETCLIENTID_CONFIRM = 36,
-	OP_VERIFY = 37,
-	OP_WRITE = 38,
-	OP_RELEASE_LOCKOWNER = 39,
-	OP_BACKCHANNEL_CTL = 40,
-	OP_BIND_CONN_TO_SESSION = 41,
-	OP_EXCHANGE_ID = 42,
-	OP_CREATE_SESSION = 43,
-	OP_DESTROY_SESSION = 44,
-	OP_FREE_STATEID = 45,
-	OP_GET_DIR_DELEGATION = 46,
-	OP_GETDEVICEINFO = 47,
-	OP_GETDEVICELIST = 48,
-	OP_LAYOUTCOMMIT = 49,
-	OP_LAYOUTGET = 50,
-	OP_LAYOUTRETURN = 51,
-	OP_SECINFO_NO_NAME = 52,
-	OP_SEQUENCE = 53,
-	OP_SET_SSV = 54,
-	OP_TEST_STATEID = 55,
-	OP_WANT_DELEGATION = 56,
-	OP_DESTROY_CLIENTID = 57,
-	OP_RECLAIM_COMPLETE = 58,
-	OP_ALLOCATE = 59,
-	OP_COPY = 60,
-	OP_COPY_NOTIFY = 61,
-	OP_DEALLOCATE = 62,
-	OP_IO_ADVISE = 63,
-	OP_LAYOUTERROR = 64,
-	OP_LAYOUTSTATS = 65,
-	OP_OFFLOAD_CANCEL = 66,
-	OP_OFFLOAD_STATUS = 67,
-	OP_READ_PLUS = 68,
-	OP_SEEK = 69,
-	OP_WRITE_SAME = 70,
-	OP_CLONE = 71,
-	OP_ILLEGAL = 10044,
-};
-
-struct nfs4_string {
-	unsigned int len;
-	char *data;
-};
-
-struct nfs_fsid {
-	uint64_t major;
-	uint64_t minor;
-};
-
-struct nfs4_threshold {
-	__u32 bm;
-	__u32 l_type;
-	__u64 rd_sz;
-	__u64 wr_sz;
-	__u64 rd_io_sz;
-	__u64 wr_io_sz;
-};
-
-struct nfs_fattr {
-	unsigned int valid;
-	umode_t mode;
-	__u32 nlink;
-	kuid_t uid;
-	kgid_t gid;
-	dev_t rdev;
-	__u64 size;
-	union {
-		struct {
-			__u32 blocksize;
-			__u32 blocks;
-		} nfs2;
-		struct {
-			__u64 used;
-		} nfs3;
-	} du;
-	struct nfs_fsid fsid;
-	__u64 fileid;
-	__u64 mounted_on_fileid;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	__u64 change_attr;
-	__u64 pre_change_attr;
-	__u64 pre_size;
-	struct timespec64 pre_mtime;
-	struct timespec64 pre_ctime;
-	long unsigned int time_start;
-	long unsigned int gencount;
-	struct nfs4_string *owner_name;
-	struct nfs4_string *group_name;
-	struct nfs4_threshold *mdsthreshold;
-};
-
-struct nfs_fsinfo {
-	struct nfs_fattr *fattr;
-	__u32 rtmax;
-	__u32 rtpref;
-	__u32 rtmult;
-	__u32 wtmax;
-	__u32 wtpref;
-	__u32 wtmult;
-	__u32 dtpref;
-	__u64 maxfilesize;
-	struct timespec64 time_delta;
-	__u32 lease_time;
-	__u32 nlayouttypes;
-	__u32 layouttype[8];
-	__u32 blksize;
-	__u32 clone_blksize;
-};
-
-struct nfs_fsstat {
-	struct nfs_fattr *fattr;
-	__u64 tbytes;
-	__u64 fbytes;
-	__u64 abytes;
-	__u64 tfiles;
-	__u64 ffiles;
-	__u64 afiles;
-};
-
-struct nfs_pathconf {
-	struct nfs_fattr *fattr;
-	__u32 max_link;
-	__u32 max_namelen;
-};
-
-struct nfs4_change_info {
-	u32 atomic;
-	u64 before;
-	u64 after;
-};
-
-struct nfs4_slot;
-
-struct nfs4_sequence_args {
-	struct nfs4_slot *sa_slot;
-	u8 sa_cache_this: 1;
-	u8 sa_privileged: 1;
-};
-
-struct nfs4_sequence_res {
-	struct nfs4_slot *sr_slot;
-	long unsigned int sr_timestamp;
-	int sr_status;
-	u32 sr_status_flags;
-	u32 sr_highest_slotid;
-	u32 sr_target_highest_slotid;
-};
-
-struct nfs_open_context;
-
-struct nfs_lock_context {
-	refcount_t count;
-	struct list_head list;
-	struct nfs_open_context *open_context;
-	fl_owner_t lockowner;
-	atomic_t io_count;
-	struct callback_head callback_head;
-};
-
-struct nfs4_state;
-
-struct nfs_open_context {
-	struct nfs_lock_context lock_context;
-	fl_owner_t flock_owner;
-	struct dentry *dentry;
-	const struct cred *cred;
-	struct rpc_cred *ll_cred;
-	struct nfs4_state *state;
-	fmode_t mode;
-	long unsigned int flags;
-	int error;
-	struct list_head list;
-	struct nfs4_threshold *mdsthreshold;
-	struct callback_head callback_head;
-};
-
-struct nfs_auth_info {
-	unsigned int flavor_len;
-	rpc_authflavor_t flavors[12];
-};
-
-struct pnfs_layoutdriver_type;
-
-struct nfs_client;
-
-struct nlm_host;
-
-struct nfs_iostats;
-
-struct nfs_server {
-	struct nfs_client *nfs_client;
-	struct list_head client_link;
-	struct list_head master_link;
-	struct rpc_clnt *client;
-	struct rpc_clnt *client_acl;
-	struct nlm_host *nlm_host;
-	struct nfs_iostats *io_stats;
-	atomic_long_t writeback;
-	int flags;
-	unsigned int caps;
-	unsigned int rsize;
-	unsigned int rpages;
-	unsigned int wsize;
-	unsigned int wpages;
-	unsigned int wtmult;
-	unsigned int dtsize;
-	short unsigned int port;
-	unsigned int bsize;
-	unsigned int acregmin;
-	unsigned int acregmax;
-	unsigned int acdirmin;
-	unsigned int acdirmax;
-	unsigned int namelen;
-	unsigned int options;
-	unsigned int clone_blksize;
-	struct nfs_fsid fsid;
-	__u64 maxfilesize;
-	struct timespec64 time_delta;
-	long unsigned int mount_time;
-	struct super_block *super;
-	dev_t s_dev;
-	struct nfs_auth_info auth_info;
-	u32 pnfs_blksize;
-	u32 attr_bitmask[3];
-	u32 attr_bitmask_nl[3];
-	u32 exclcreat_bitmask[3];
-	u32 cache_consistency_bitmask[3];
-	u32 acl_bitmask;
-	u32 fh_expire_type;
-	struct pnfs_layoutdriver_type *pnfs_curr_ld;
-	struct rpc_wait_queue roc_rpcwaitq;
-	void *pnfs_ld_data;
-	struct rb_root state_owners;
-	struct ida openowner_id;
-	struct ida lockowner_id;
-	struct list_head state_owners_lru;
-	struct list_head layouts;
-	struct list_head delegations;
-	struct list_head ss_copies;
-	long unsigned int mig_gen;
-	long unsigned int mig_status;
-	void (*destroy)(struct nfs_server *);
-	atomic_t active;
-	struct __kernel_sockaddr_storage mountd_address;
-	size_t mountd_addrlen;
-	u32 mountd_version;
-	short unsigned int mountd_port;
-	short unsigned int mountd_protocol;
-	struct rpc_wait_queue uoc_rpcwaitq;
-	unsigned int read_hdrsize;
-	const struct cred *cred;
-};
-
-struct nfs41_server_owner;
-
-struct nfs41_server_scope;
-
-struct nfs41_impl_id;
-
-struct nfs_rpc_ops;
-
-struct nfs_subversion;
-
-struct idmap;
-
-struct nfs4_minor_version_ops;
-
-struct nfs4_slot_table;
-
-struct nfs4_session;
-
-struct nfs_client {
-	refcount_t cl_count;
-	atomic_t cl_mds_count;
-	int cl_cons_state;
-	long unsigned int cl_res_state;
-	long unsigned int cl_flags;
-	struct __kernel_sockaddr_storage cl_addr;
-	size_t cl_addrlen;
-	char *cl_hostname;
-	char *cl_acceptor;
-	struct list_head cl_share_link;
-	struct list_head cl_superblocks;
-	struct rpc_clnt *cl_rpcclient;
-	const struct nfs_rpc_ops *rpc_ops;
-	int cl_proto;
-	struct nfs_subversion *cl_nfs_mod;
-	u32 cl_minorversion;
-	unsigned int cl_nconnect;
-	const char *cl_principal;
-	struct list_head cl_ds_clients;
-	u64 cl_clientid;
-	nfs4_verifier cl_confirm;
-	long unsigned int cl_state;
-	spinlock_t cl_lock;
-	long unsigned int cl_lease_time;
-	long unsigned int cl_last_renewal;
-	struct delayed_work cl_renewd;
-	struct rpc_wait_queue cl_rpcwaitq;
-	struct idmap *cl_idmap;
-	const char *cl_owner_id;
-	u32 cl_cb_ident;
-	const struct nfs4_minor_version_ops *cl_mvops;
-	long unsigned int cl_mig_gen;
-	struct nfs4_slot_table *cl_slot_tbl;
-	u32 cl_seqid;
-	u32 cl_exchange_flags;
-	struct nfs4_session *cl_session;
-	bool cl_preserve_clid;
-	struct nfs41_server_owner *cl_serverowner;
-	struct nfs41_server_scope *cl_serverscope;
-	struct nfs41_impl_id *cl_implid;
-	long unsigned int cl_sp4_flags;
-	char cl_ipaddr[48];
-	struct net *cl_net;
-	struct list_head pending_cb_stateids;
-};
-
-struct nfs_write_verifier {
-	char data[8];
-};
-
-struct nfs_writeverf {
-	struct nfs_write_verifier verifier;
-	enum nfs3_stable_how committed;
-};
-
-struct nfs_pgio_args {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	struct nfs_open_context *context;
-	struct nfs_lock_context *lock_context;
-	nfs4_stateid stateid;
-	__u64 offset;
-	__u32 count;
-	unsigned int pgbase;
-	struct page **pages;
-	union {
-		unsigned int replen;
-		struct {
-			const u32 *bitmask;
-			enum nfs3_stable_how stable;
-		};
-	};
-};
-
-struct nfs_pgio_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fattr *fattr;
-	__u32 count;
-	__u32 op_status;
-	union {
-		struct {
-			unsigned int replen;
-			int eof;
-		};
-		struct {
-			struct nfs_writeverf *verf;
-			const struct nfs_server *server;
-		};
-	};
-};
-
-struct nfs_commitargs {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	__u64 offset;
-	__u32 count;
-	const u32 *bitmask;
-};
-
-struct nfs_commitres {
-	struct nfs4_sequence_res seq_res;
-	__u32 op_status;
-	struct nfs_fattr *fattr;
-	struct nfs_writeverf *verf;
-	const struct nfs_server *server;
-};
-
-struct nfs_removeargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	struct qstr name;
-};
-
-struct nfs_removeres {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_server *server;
-	struct nfs_fattr *dir_attr;
-	struct nfs4_change_info cinfo;
-};
-
-struct nfs_renameargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *old_dir;
-	const struct nfs_fh *new_dir;
-	const struct qstr *old_name;
-	const struct qstr *new_name;
-};
-
-struct nfs_renameres {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_server *server;
-	struct nfs4_change_info old_cinfo;
-	struct nfs_fattr *old_fattr;
-	struct nfs4_change_info new_cinfo;
-	struct nfs_fattr *new_fattr;
-};
-
-struct nfs_entry {
-	__u64 ino;
-	__u64 cookie;
-	__u64 prev_cookie;
-	const char *name;
-	unsigned int len;
-	int eof;
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-	struct nfs4_label *label;
-	unsigned char d_type;
-	struct nfs_server *server;
-};
-
-struct pnfs_ds_commit_info {};
-
-struct nfs_page_array {
-	struct page **pagevec;
-	unsigned int npages;
-	struct page *page_array[8];
-};
-
-struct nfs_page;
-
-struct pnfs_layout_segment;
-
-struct nfs_pgio_completion_ops;
-
-struct nfs_rw_ops;
-
-struct nfs_io_completion;
-
-struct nfs_direct_req;
-
-struct nfs_pgio_header {
-	struct inode *inode;
-	const struct cred *cred;
-	struct list_head pages;
-	struct nfs_page *req;
-	struct nfs_writeverf verf;
-	fmode_t rw_mode;
-	struct pnfs_layout_segment *lseg;
-	loff_t io_start;
-	const struct rpc_call_ops *mds_ops;
-	void (*release)(struct nfs_pgio_header *);
-	const struct nfs_pgio_completion_ops *completion_ops;
-	const struct nfs_rw_ops *rw_ops;
-	struct nfs_io_completion *io_completion;
-	struct nfs_direct_req *dreq;
-	int pnfs_error;
-	int error;
-	unsigned int good_bytes;
-	long unsigned int flags;
-	struct rpc_task task;
-	struct nfs_fattr fattr;
-	struct nfs_pgio_args args;
-	struct nfs_pgio_res res;
-	long unsigned int timestamp;
-	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
-	__u64 mds_offset;
-	struct nfs_page_array page_array;
-	struct nfs_client *ds_clp;
-	int ds_commit_idx;
-	int pgio_mirror_idx;
-};
-
-struct nfs_pgio_completion_ops {
-	void (*error_cleanup)(struct list_head *, int);
-	void (*init_hdr)(struct nfs_pgio_header *);
-	void (*completion)(struct nfs_pgio_header *);
-	void (*reschedule_io)(struct nfs_pgio_header *);
-};
-
-struct rpc_task_setup;
-
-struct nfs_rw_ops {
-	struct nfs_pgio_header * (*rw_alloc_header)();
-	void (*rw_free_header)(struct nfs_pgio_header *);
-	int (*rw_done)(struct rpc_task *, struct nfs_pgio_header *, struct inode *);
-	void (*rw_result)(struct rpc_task *, struct nfs_pgio_header *);
-	void (*rw_initiate)(struct nfs_pgio_header *, struct rpc_message *, const struct nfs_rpc_ops *, struct rpc_task_setup *, int);
-};
-
-struct nfs_mds_commit_info {
-	atomic_t rpcs_out;
-	atomic_long_t ncommit;
-	struct list_head list;
-};
-
-struct nfs_commit_data;
-
-struct nfs_commit_info;
-
-struct nfs_commit_completion_ops {
-	void (*completion)(struct nfs_commit_data *);
-	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
-};
-
-struct nfs_commit_data {
-	struct rpc_task task;
-	struct inode *inode;
-	const struct cred *cred;
-	struct nfs_fattr fattr;
-	struct nfs_writeverf verf;
-	struct list_head pages;
-	struct list_head list;
-	struct nfs_direct_req *dreq;
-	struct nfs_commitargs args;
-	struct nfs_commitres res;
-	struct nfs_open_context *context;
-	struct pnfs_layout_segment *lseg;
-	struct nfs_client *ds_clp;
-	int ds_commit_index;
-	loff_t lwb;
-	const struct rpc_call_ops *mds_ops;
-	const struct nfs_commit_completion_ops *completion_ops;
-	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
-	long unsigned int flags;
-};
-
-struct nfs_commit_info {
-	struct inode *inode;
-	struct nfs_mds_commit_info *mds;
-	struct pnfs_ds_commit_info *ds;
-	struct nfs_direct_req *dreq;
-	const struct nfs_commit_completion_ops *completion_ops;
-};
-
-struct nfs_unlinkdata {
-	struct nfs_removeargs args;
-	struct nfs_removeres res;
-	struct dentry *dentry;
-	wait_queue_head_t wq;
-	const struct cred *cred;
-	struct nfs_fattr dir_attr;
-	long int timeout;
-};
-
-struct nfs_renamedata {
-	struct nfs_renameargs args;
-	struct nfs_renameres res;
-	const struct cred *cred;
-	struct inode *old_dir;
-	struct dentry *old_dentry;
-	struct nfs_fattr old_fattr;
-	struct inode *new_dir;
-	struct dentry *new_dentry;
-	struct nfs_fattr new_fattr;
-	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
-	long int timeout;
-	bool cancelled;
-};
-
-struct nlmclnt_operations;
-
-struct nfs_mount_info;
-
-struct nfs_access_entry;
-
-struct nfs_client_initdata;
-
-struct nfs_rpc_ops {
-	u32 version;
-	const struct dentry_operations *dentry_ops;
-	const struct inode_operations *dir_inode_ops;
-	const struct inode_operations *file_inode_ops;
-	const struct file_operations *file_ops;
-	const struct nlmclnt_operations *nlmclnt_ops;
-	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
-	struct vfsmount * (*submount)(struct nfs_server *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
-	struct dentry * (*try_mount)(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
-	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *, struct inode *);
-	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
-	int (*lookup)(struct inode *, const struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
-	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *);
-	int (*access)(struct inode *, struct nfs_access_entry *);
-	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
-	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
-	int (*remove)(struct inode *, struct dentry *);
-	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
-	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
-	int (*unlink_done)(struct rpc_task *, struct inode *);
-	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
-	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
-	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
-	int (*link)(struct inode *, struct inode *, const struct qstr *);
-	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
-	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
-	int (*rmdir)(struct inode *, const struct qstr *);
-	int (*readdir)(struct dentry *, const struct cred *, u64, struct page **, unsigned int, bool);
-	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
-	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
-	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
-	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
-	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
-	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
-	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
-	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
-	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
-	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
-	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
-	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
-	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
-	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
-	int (*lock)(struct file *, int, struct file_lock *);
-	int (*lock_check_bounds)(const struct file_lock *);
-	void (*clear_acl_cache)(struct inode *);
-	void (*close_context)(struct nfs_open_context *, int);
-	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
-	int (*have_delegation)(struct inode *, fmode_t);
-	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
-	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
-	void (*free_client)(struct nfs_client *);
-	struct nfs_server * (*create_server)(struct nfs_mount_info *, struct nfs_subversion *);
-	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
-};
-
-struct nlmclnt_operations {
-	void (*nlmclnt_alloc_call)(void *);
-	bool (*nlmclnt_unlock_prepare)(struct rpc_task *, void *);
-	void (*nlmclnt_release_call)(void *);
-};
-
-struct nfs_access_entry {
-	struct rb_node rb_node;
-	struct list_head lru;
-	const struct cred *cred;
-	__u32 mask;
-	struct callback_head callback_head;
-};
-
-struct nfs_client_initdata {
-	long unsigned int init_flags;
-	const char *hostname;
-	const struct sockaddr *addr;
-	const char *nodename;
-	const char *ip_addr;
-	size_t addrlen;
-	struct nfs_subversion *nfs_mod;
-	int proto;
-	u32 minorversion;
-	unsigned int nconnect;
-	struct net *net;
-	const struct rpc_timeout *timeparms;
-	const struct cred *cred;
-};
-
-struct nfs_seqid;
-
-struct nfs_seqid_counter;
-
-struct nfs4_state_recovery_ops;
-
-struct nfs4_state_maintenance_ops;
-
-struct nfs4_mig_recovery_ops;
-
-struct nfs4_minor_version_ops {
-	u32 minor_version;
-	unsigned int init_caps;
-	int (*init_client)(struct nfs_client *);
-	void (*shutdown_client)(struct nfs_client *);
-	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
-	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
-	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
-	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
-	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
-	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
-	const struct rpc_call_ops *call_sync_ops;
-	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
-	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
-	const struct nfs4_state_maintenance_ops *state_renewal_ops;
-	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
-};
-
-enum perf_branch_sample_type_shift {
-	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
-	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
-	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
-	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
-	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
-	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
-	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
-	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
-	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
-	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
-	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
-	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
-	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
-	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
-	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
-	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
-	PERF_SAMPLE_BRANCH_MAX_SHIFT = 17,
-};
-
-enum exception_stack_ordering {
-	ESTACK_DF = 0,
-	ESTACK_NMI = 1,
-	ESTACK_DB2 = 2,
-	ESTACK_DB1 = 3,
-	ESTACK_DB = 4,
-	ESTACK_MCE = 5,
-	N_EXCEPTION_STACKS = 6,
-};
-
-enum {
-	TSK_TRACE_FL_TRACE_BIT = 0,
-	TSK_TRACE_FL_GRAPH_BIT = 1,
-};
-
-struct uuidcmp {
-	const char *uuid;
-	int len;
-};
-
-struct subprocess_info {
-	struct work_struct work;
-	struct completion *complete;
-	const char *path;
-	char **argv;
-	char **envp;
-	struct file *file;
-	int wait;
-	int retval;
-	pid_t pid;
-	int (*init)(struct subprocess_info *, struct cred *);
-	void (*cleanup)(struct subprocess_info *);
-	void *data;
-};
-
-struct mdu_array_info_s {
-	int major_version;
-	int minor_version;
-	int patch_version;
-	unsigned int ctime;
-	int level;
-	int size;
-	int nr_disks;
-	int raid_disks;
-	int md_minor;
-	int not_persistent;
-	unsigned int utime;
-	int state;
-	int active_disks;
-	int working_disks;
-	int failed_disks;
-	int spare_disks;
-	int layout;
-	int chunk_size;
-};
-
-typedef struct mdu_array_info_s mdu_array_info_t;
-
-struct mdu_disk_info_s {
-	int number;
-	int major;
-	int minor;
-	int raid_disk;
-	int state;
-};
-
-typedef struct mdu_disk_info_s mdu_disk_info_t;
-
-enum kmalloc_cache_type {
-	KMALLOC_NORMAL = 0,
-	KMALLOC_RECLAIM = 1,
-	KMALLOC_DMA = 2,
-	NR_KMALLOC_TYPES = 3,
-};
-
-struct hash {
-	int ino;
-	int minor;
-	int major;
-	umode_t mode;
-	struct hash *next;
-	char name[4098];
-};
-
-struct dir_entry {
-	struct list_head list;
-	char *name;
-	time64_t mtime;
-};
-
-enum state {
-	Start = 0,
-	Collect = 1,
-	GotHeader = 2,
-	SkipIt = 3,
-	GotName = 4,
-	CopyFile = 5,
-	GotSymlink = 6,
-	Reset = 7,
-};
-
-typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
-
-typedef u32 note_buf_t[92];
-
-struct kimage_arch {
-	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
-	pte_t *pte;
-	void *elf_headers;
-	long unsigned int elf_headers_sz;
-	long unsigned int elf_load_addr;
-};
-
-typedef void crash_vmclear_fn();
-
-typedef long unsigned int kimage_entry_t;
-
-struct kexec_segment {
-	union {
-		void *buf;
-		void *kbuf;
-	};
-	size_t bufsz;
-	long unsigned int mem;
-	size_t memsz;
-};
-
-struct kimage {
-	kimage_entry_t head;
-	kimage_entry_t *entry;
-	kimage_entry_t *last_entry;
-	long unsigned int start;
-	struct page *control_code_page;
-	struct page *swap_page;
-	void *vmcoreinfo_data_copy;
-	long unsigned int nr_segments;
-	struct kexec_segment segment[16];
-	struct list_head control_pages;
-	struct list_head dest_pages;
-	struct list_head unusable_pages;
-	long unsigned int control_page;
-	unsigned int type: 1;
-	unsigned int preserve_context: 1;
-	unsigned int file_mode: 1;
-	struct kimage_arch arch;
-};
-
-enum ucount_type {
-	UCOUNT_USER_NAMESPACES = 0,
-	UCOUNT_PID_NAMESPACES = 1,
-	UCOUNT_UTS_NAMESPACES = 2,
-	UCOUNT_IPC_NAMESPACES = 3,
-	UCOUNT_NET_NAMESPACES = 4,
-	UCOUNT_MNT_NAMESPACES = 5,
-	UCOUNT_CGROUP_NAMESPACES = 6,
-	UCOUNT_INOTIFY_INSTANCES = 7,
-	UCOUNT_INOTIFY_WATCHES = 8,
-	UCOUNT_COUNTS = 9,
-};
-
-enum flow_dissector_key_id {
-	FLOW_DISSECTOR_KEY_CONTROL = 0,
-	FLOW_DISSECTOR_KEY_BASIC = 1,
-	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
-	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
-	FLOW_DISSECTOR_KEY_PORTS = 4,
-	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
-	FLOW_DISSECTOR_KEY_ICMP = 6,
-	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
-	FLOW_DISSECTOR_KEY_TIPC = 8,
-	FLOW_DISSECTOR_KEY_ARP = 9,
-	FLOW_DISSECTOR_KEY_VLAN = 10,
-	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
-	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
-	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
-	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
-	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
-	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
-	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
-	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
-	FLOW_DISSECTOR_KEY_MPLS = 19,
-	FLOW_DISSECTOR_KEY_TCP = 20,
-	FLOW_DISSECTOR_KEY_IP = 21,
-	FLOW_DISSECTOR_KEY_CVLAN = 22,
-	FLOW_DISSECTOR_KEY_ENC_IP = 23,
-	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
-	FLOW_DISSECTOR_KEY_META = 25,
-	FLOW_DISSECTOR_KEY_CT = 26,
-	FLOW_DISSECTOR_KEY_MAX = 27,
-};
-
-enum {
-	IPSTATS_MIB_NUM = 0,
-	IPSTATS_MIB_INPKTS = 1,
-	IPSTATS_MIB_INOCTETS = 2,
-	IPSTATS_MIB_INDELIVERS = 3,
-	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
-	IPSTATS_MIB_OUTPKTS = 5,
-	IPSTATS_MIB_OUTOCTETS = 6,
-	IPSTATS_MIB_INHDRERRORS = 7,
-	IPSTATS_MIB_INTOOBIGERRORS = 8,
-	IPSTATS_MIB_INNOROUTES = 9,
-	IPSTATS_MIB_INADDRERRORS = 10,
-	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
-	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
-	IPSTATS_MIB_INDISCARDS = 13,
-	IPSTATS_MIB_OUTDISCARDS = 14,
-	IPSTATS_MIB_OUTNOROUTES = 15,
-	IPSTATS_MIB_REASMTIMEOUT = 16,
-	IPSTATS_MIB_REASMREQDS = 17,
-	IPSTATS_MIB_REASMOKS = 18,
-	IPSTATS_MIB_REASMFAILS = 19,
-	IPSTATS_MIB_FRAGOKS = 20,
-	IPSTATS_MIB_FRAGFAILS = 21,
-	IPSTATS_MIB_FRAGCREATES = 22,
-	IPSTATS_MIB_INMCASTPKTS = 23,
-	IPSTATS_MIB_OUTMCASTPKTS = 24,
-	IPSTATS_MIB_INBCASTPKTS = 25,
-	IPSTATS_MIB_OUTBCASTPKTS = 26,
-	IPSTATS_MIB_INMCASTOCTETS = 27,
-	IPSTATS_MIB_OUTMCASTOCTETS = 28,
-	IPSTATS_MIB_INBCASTOCTETS = 29,
-	IPSTATS_MIB_OUTBCASTOCTETS = 30,
-	IPSTATS_MIB_CSUMERRORS = 31,
-	IPSTATS_MIB_NOECTPKTS = 32,
-	IPSTATS_MIB_ECT1PKTS = 33,
-	IPSTATS_MIB_ECT0PKTS = 34,
-	IPSTATS_MIB_CEPKTS = 35,
-	IPSTATS_MIB_REASM_OVERLAPS = 36,
-	__IPSTATS_MIB_MAX = 37,
-};
-
-enum {
-	ICMP_MIB_NUM = 0,
-	ICMP_MIB_INMSGS = 1,
-	ICMP_MIB_INERRORS = 2,
-	ICMP_MIB_INDESTUNREACHS = 3,
-	ICMP_MIB_INTIMEEXCDS = 4,
-	ICMP_MIB_INPARMPROBS = 5,
-	ICMP_MIB_INSRCQUENCHS = 6,
-	ICMP_MIB_INREDIRECTS = 7,
-	ICMP_MIB_INECHOS = 8,
-	ICMP_MIB_INECHOREPS = 9,
-	ICMP_MIB_INTIMESTAMPS = 10,
-	ICMP_MIB_INTIMESTAMPREPS = 11,
-	ICMP_MIB_INADDRMASKS = 12,
-	ICMP_MIB_INADDRMASKREPS = 13,
-	ICMP_MIB_OUTMSGS = 14,
-	ICMP_MIB_OUTERRORS = 15,
-	ICMP_MIB_OUTDESTUNREACHS = 16,
-	ICMP_MIB_OUTTIMEEXCDS = 17,
-	ICMP_MIB_OUTPARMPROBS = 18,
-	ICMP_MIB_OUTSRCQUENCHS = 19,
-	ICMP_MIB_OUTREDIRECTS = 20,
-	ICMP_MIB_OUTECHOS = 21,
-	ICMP_MIB_OUTECHOREPS = 22,
-	ICMP_MIB_OUTTIMESTAMPS = 23,
-	ICMP_MIB_OUTTIMESTAMPREPS = 24,
-	ICMP_MIB_OUTADDRMASKS = 25,
-	ICMP_MIB_OUTADDRMASKREPS = 26,
-	ICMP_MIB_CSUMERRORS = 27,
-	__ICMP_MIB_MAX = 28,
-};
-
-enum {
-	ICMP6_MIB_NUM = 0,
-	ICMP6_MIB_INMSGS = 1,
-	ICMP6_MIB_INERRORS = 2,
-	ICMP6_MIB_OUTMSGS = 3,
-	ICMP6_MIB_OUTERRORS = 4,
-	ICMP6_MIB_CSUMERRORS = 5,
-	__ICMP6_MIB_MAX = 6,
-};
-
-enum {
-	TCP_MIB_NUM = 0,
-	TCP_MIB_RTOALGORITHM = 1,
-	TCP_MIB_RTOMIN = 2,
-	TCP_MIB_RTOMAX = 3,
-	TCP_MIB_MAXCONN = 4,
-	TCP_MIB_ACTIVEOPENS = 5,
-	TCP_MIB_PASSIVEOPENS = 6,
-	TCP_MIB_ATTEMPTFAILS = 7,
-	TCP_MIB_ESTABRESETS = 8,
-	TCP_MIB_CURRESTAB = 9,
-	TCP_MIB_INSEGS = 10,
-	TCP_MIB_OUTSEGS = 11,
-	TCP_MIB_RETRANSSEGS = 12,
-	TCP_MIB_INERRS = 13,
-	TCP_MIB_OUTRSTS = 14,
-	TCP_MIB_CSUMERRORS = 15,
-	__TCP_MIB_MAX = 16,
-};
-
-enum {
-	UDP_MIB_NUM = 0,
-	UDP_MIB_INDATAGRAMS = 1,
-	UDP_MIB_NOPORTS = 2,
-	UDP_MIB_INERRORS = 3,
-	UDP_MIB_OUTDATAGRAMS = 4,
-	UDP_MIB_RCVBUFERRORS = 5,
-	UDP_MIB_SNDBUFERRORS = 6,
-	UDP_MIB_CSUMERRORS = 7,
-	UDP_MIB_IGNOREDMULTI = 8,
-	__UDP_MIB_MAX = 9,
-};
-
-enum {
-	LINUX_MIB_NUM = 0,
-	LINUX_MIB_SYNCOOKIESSENT = 1,
-	LINUX_MIB_SYNCOOKIESRECV = 2,
-	LINUX_MIB_SYNCOOKIESFAILED = 3,
-	LINUX_MIB_EMBRYONICRSTS = 4,
-	LINUX_MIB_PRUNECALLED = 5,
-	LINUX_MIB_RCVPRUNED = 6,
-	LINUX_MIB_OFOPRUNED = 7,
-	LINUX_MIB_OUTOFWINDOWICMPS = 8,
-	LINUX_MIB_LOCKDROPPEDICMPS = 9,
-	LINUX_MIB_ARPFILTER = 10,
-	LINUX_MIB_TIMEWAITED = 11,
-	LINUX_MIB_TIMEWAITRECYCLED = 12,
-	LINUX_MIB_TIMEWAITKILLED = 13,
-	LINUX_MIB_PAWSACTIVEREJECTED = 14,
-	LINUX_MIB_PAWSESTABREJECTED = 15,
-	LINUX_MIB_DELAYEDACKS = 16,
-	LINUX_MIB_DELAYEDACKLOCKED = 17,
-	LINUX_MIB_DELAYEDACKLOST = 18,
-	LINUX_MIB_LISTENOVERFLOWS = 19,
-	LINUX_MIB_LISTENDROPS = 20,
-	LINUX_MIB_TCPHPHITS = 21,
-	LINUX_MIB_TCPPUREACKS = 22,
-	LINUX_MIB_TCPHPACKS = 23,
-	LINUX_MIB_TCPRENORECOVERY = 24,
-	LINUX_MIB_TCPSACKRECOVERY = 25,
-	LINUX_MIB_TCPSACKRENEGING = 26,
-	LINUX_MIB_TCPSACKREORDER = 27,
-	LINUX_MIB_TCPRENOREORDER = 28,
-	LINUX_MIB_TCPTSREORDER = 29,
-	LINUX_MIB_TCPFULLUNDO = 30,
-	LINUX_MIB_TCPPARTIALUNDO = 31,
-	LINUX_MIB_TCPDSACKUNDO = 32,
-	LINUX_MIB_TCPLOSSUNDO = 33,
-	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
-	LINUX_MIB_TCPRENOFAILURES = 35,
-	LINUX_MIB_TCPSACKFAILURES = 36,
-	LINUX_MIB_TCPLOSSFAILURES = 37,
-	LINUX_MIB_TCPFASTRETRANS = 38,
-	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
-	LINUX_MIB_TCPTIMEOUTS = 40,
-	LINUX_MIB_TCPLOSSPROBES = 41,
-	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
-	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
-	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
-	LINUX_MIB_TCPRCVCOLLAPSED = 45,
-	LINUX_MIB_TCPDSACKOLDSENT = 46,
-	LINUX_MIB_TCPDSACKOFOSENT = 47,
-	LINUX_MIB_TCPDSACKRECV = 48,
-	LINUX_MIB_TCPDSACKOFORECV = 49,
-	LINUX_MIB_TCPABORTONDATA = 50,
-	LINUX_MIB_TCPABORTONCLOSE = 51,
-	LINUX_MIB_TCPABORTONMEMORY = 52,
-	LINUX_MIB_TCPABORTONTIMEOUT = 53,
-	LINUX_MIB_TCPABORTONLINGER = 54,
-	LINUX_MIB_TCPABORTFAILED = 55,
-	LINUX_MIB_TCPMEMORYPRESSURES = 56,
-	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
-	LINUX_MIB_TCPSACKDISCARD = 58,
-	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
-	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
-	LINUX_MIB_TCPSPURIOUSRTOS = 61,
-	LINUX_MIB_TCPMD5NOTFOUND = 62,
-	LINUX_MIB_TCPMD5UNEXPECTED = 63,
-	LINUX_MIB_TCPMD5FAILURE = 64,
-	LINUX_MIB_SACKSHIFTED = 65,
-	LINUX_MIB_SACKMERGED = 66,
-	LINUX_MIB_SACKSHIFTFALLBACK = 67,
-	LINUX_MIB_TCPBACKLOGDROP = 68,
-	LINUX_MIB_PFMEMALLOCDROP = 69,
-	LINUX_MIB_TCPMINTTLDROP = 70,
-	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
-	LINUX_MIB_IPRPFILTER = 72,
-	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
-	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
-	LINUX_MIB_TCPREQQFULLDROP = 75,
-	LINUX_MIB_TCPRETRANSFAIL = 76,
-	LINUX_MIB_TCPRCVCOALESCE = 77,
-	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
-	LINUX_MIB_TCPOFOQUEUE = 79,
-	LINUX_MIB_TCPOFODROP = 80,
-	LINUX_MIB_TCPOFOMERGE = 81,
-	LINUX_MIB_TCPCHALLENGEACK = 82,
-	LINUX_MIB_TCPSYNCHALLENGE = 83,
-	LINUX_MIB_TCPFASTOPENACTIVE = 84,
-	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
-	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
-	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
-	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
-	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
-	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
-	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
-	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
-	LINUX_MIB_TCPAUTOCORKING = 93,
-	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
-	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
-	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
-	LINUX_MIB_TCPSYNRETRANS = 97,
-	LINUX_MIB_TCPORIGDATASENT = 98,
-	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
-	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
-	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
-	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
-	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
-	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
-	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
-	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
-	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
-	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
-	LINUX_MIB_TCPWINPROBE = 109,
-	LINUX_MIB_TCPKEEPALIVE = 110,
-	LINUX_MIB_TCPMTUPFAIL = 111,
-	LINUX_MIB_TCPMTUPSUCCESS = 112,
-	LINUX_MIB_TCPDELIVERED = 113,
-	LINUX_MIB_TCPDELIVEREDCE = 114,
-	LINUX_MIB_TCPACKCOMPRESSED = 115,
-	LINUX_MIB_TCPZEROWINDOWDROP = 116,
-	LINUX_MIB_TCPRCVQDROP = 117,
-	LINUX_MIB_TCPWQUEUETOOBIG = 118,
-	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
-	__LINUX_MIB_MAX = 120,
-};
-
-enum {
-	LINUX_MIB_XFRMNUM = 0,
-	LINUX_MIB_XFRMINERROR = 1,
-	LINUX_MIB_XFRMINBUFFERERROR = 2,
-	LINUX_MIB_XFRMINHDRERROR = 3,
-	LINUX_MIB_XFRMINNOSTATES = 4,
-	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
-	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
-	LINUX_MIB_XFRMINSTATESEQERROR = 7,
-	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
-	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
-	LINUX_MIB_XFRMINSTATEINVALID = 10,
-	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
-	LINUX_MIB_XFRMINNOPOLS = 12,
-	LINUX_MIB_XFRMINPOLBLOCK = 13,
-	LINUX_MIB_XFRMINPOLERROR = 14,
-	LINUX_MIB_XFRMOUTERROR = 15,
-	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
-	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
-	LINUX_MIB_XFRMOUTNOSTATES = 18,
-	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
-	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
-	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
-	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
-	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
-	LINUX_MIB_XFRMOUTPOLDEAD = 24,
-	LINUX_MIB_XFRMOUTPOLERROR = 25,
-	LINUX_MIB_XFRMFWDHDRERROR = 26,
-	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
-	LINUX_MIB_XFRMACQUIREERROR = 28,
-	__LINUX_MIB_XFRMMAX = 29,
-};
-
-enum {
-	LINUX_MIB_TLSNUM = 0,
-	LINUX_MIB_TLSCURRTXSW = 1,
-	LINUX_MIB_TLSCURRRXSW = 2,
-	LINUX_MIB_TLSCURRTXDEVICE = 3,
-	LINUX_MIB_TLSCURRRXDEVICE = 4,
-	LINUX_MIB_TLSTXSW = 5,
-	LINUX_MIB_TLSRXSW = 6,
-	LINUX_MIB_TLSTXDEVICE = 7,
-	LINUX_MIB_TLSRXDEVICE = 8,
-	LINUX_MIB_TLSDECRYPTERROR = 9,
-	LINUX_MIB_TLSRXDEVICERESYNC = 10,
-	__LINUX_MIB_TLSMAX = 11,
-};
-
-enum nf_inet_hooks {
-	NF_INET_PRE_ROUTING = 0,
-	NF_INET_LOCAL_IN = 1,
-	NF_INET_FORWARD = 2,
-	NF_INET_LOCAL_OUT = 3,
-	NF_INET_POST_ROUTING = 4,
-	NF_INET_NUMHOOKS = 5,
-};
-
-enum {
-	NFPROTO_UNSPEC = 0,
-	NFPROTO_INET = 1,
-	NFPROTO_IPV4 = 2,
-	NFPROTO_ARP = 3,
-	NFPROTO_NETDEV = 5,
-	NFPROTO_BRIDGE = 7,
-	NFPROTO_IPV6 = 10,
-	NFPROTO_DECNET = 12,
-	NFPROTO_NUMPROTO = 13,
-};
-
-enum tcp_conntrack {
-	TCP_CONNTRACK_NONE = 0,
-	TCP_CONNTRACK_SYN_SENT = 1,
-	TCP_CONNTRACK_SYN_RECV = 2,
-	TCP_CONNTRACK_ESTABLISHED = 3,
-	TCP_CONNTRACK_FIN_WAIT = 4,
-	TCP_CONNTRACK_CLOSE_WAIT = 5,
-	TCP_CONNTRACK_LAST_ACK = 6,
-	TCP_CONNTRACK_TIME_WAIT = 7,
-	TCP_CONNTRACK_CLOSE = 8,
-	TCP_CONNTRACK_LISTEN = 9,
-	TCP_CONNTRACK_MAX = 10,
-	TCP_CONNTRACK_IGNORE = 11,
-	TCP_CONNTRACK_RETRANS = 12,
-	TCP_CONNTRACK_UNACK = 13,
-	TCP_CONNTRACK_TIMEOUT_MAX = 14,
-};
-
-enum ct_dccp_states {
-	CT_DCCP_NONE = 0,
-	CT_DCCP_REQUEST = 1,
-	CT_DCCP_RESPOND = 2,
-	CT_DCCP_PARTOPEN = 3,
-	CT_DCCP_OPEN = 4,
-	CT_DCCP_CLOSEREQ = 5,
-	CT_DCCP_CLOSING = 6,
-	CT_DCCP_TIMEWAIT = 7,
-	CT_DCCP_IGNORE = 8,
-	CT_DCCP_INVALID = 9,
-	__CT_DCCP_MAX = 10,
-};
-
-enum ip_conntrack_dir {
-	IP_CT_DIR_ORIGINAL = 0,
-	IP_CT_DIR_REPLY = 1,
-	IP_CT_DIR_MAX = 2,
-};
-
-enum sctp_conntrack {
-	SCTP_CONNTRACK_NONE = 0,
-	SCTP_CONNTRACK_CLOSED = 1,
-	SCTP_CONNTRACK_COOKIE_WAIT = 2,
-	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
-	SCTP_CONNTRACK_ESTABLISHED = 4,
-	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
-	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
-	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
-	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
-	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
-	SCTP_CONNTRACK_MAX = 10,
-};
-
-enum udp_conntrack {
-	UDP_CT_UNREPLIED = 0,
-	UDP_CT_REPLIED = 1,
-	UDP_CT_MAX = 2,
-};
-
-enum {
-	XFRM_POLICY_IN = 0,
-	XFRM_POLICY_OUT = 1,
-	XFRM_POLICY_FWD = 2,
-	XFRM_POLICY_MASK = 3,
-	XFRM_POLICY_MAX = 3,
-};
-
-enum skb_ext_id {
-	SKB_EXT_SEC_PATH = 0,
-	SKB_EXT_NUM = 1,
-};
-
-enum sched_tunable_scaling {
-	SCHED_TUNABLESCALING_NONE = 0,
-	SCHED_TUNABLESCALING_LOG = 1,
-	SCHED_TUNABLESCALING_LINEAR = 2,
-	SCHED_TUNABLESCALING_END = 3,
-};
-
-enum audit_ntp_type {
-	AUDIT_NTP_OFFSET = 0,
-	AUDIT_NTP_FREQ = 1,
-	AUDIT_NTP_STATUS = 2,
-	AUDIT_NTP_TAI = 3,
-	AUDIT_NTP_TICK = 4,
-	AUDIT_NTP_ADJUST = 5,
-	AUDIT_NTP_NVALS = 6,
-};
-
-typedef long int (*sys_call_ptr_t)(const struct pt_regs *);
-
-enum {
-	EI_ETYPE_NONE = 0,
-	EI_ETYPE_NULL = 1,
-	EI_ETYPE_ERRNO = 2,
-	EI_ETYPE_ERRNO_NULL = 3,
-	EI_ETYPE_TRUE = 4,
-};
-
-struct io_bitmap {
-	u64 sequence;
-	refcount_t refcnt;
-	unsigned int max;
-	long unsigned int bitmap[1024];
-};
-
-struct seccomp_data {
-	int nr;
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 args[6];
-};
-
-struct ksignal {
-	struct k_sigaction ka;
-	kernel_siginfo_t info;
-	int sig;
-};
-
-struct __large_struct {
-	long unsigned int buf[100];
-};
-
-enum {
-	TASKSTATS_CMD_UNSPEC = 0,
-	TASKSTATS_CMD_GET = 1,
-	TASKSTATS_CMD_NEW = 2,
-	__TASKSTATS_CMD_MAX = 3,
-};
-
-enum ctx_state {
-	CONTEXT_DISABLED = 4294967295,
-	CONTEXT_KERNEL = 0,
-	CONTEXT_USER = 1,
-	CONTEXT_GUEST = 2,
-};
-
-enum {
-	HI_SOFTIRQ = 0,
-	TIMER_SOFTIRQ = 1,
-	NET_TX_SOFTIRQ = 2,
-	NET_RX_SOFTIRQ = 3,
-	BLOCK_SOFTIRQ = 4,
-	IRQ_POLL_SOFTIRQ = 5,
-	TASKLET_SOFTIRQ = 6,
-	SCHED_SOFTIRQ = 7,
-	HRTIMER_SOFTIRQ = 8,
-	RCU_SOFTIRQ = 9,
-	NR_SOFTIRQS = 10,
-};
-
-enum cpu_usage_stat {
-	CPUTIME_USER = 0,
-	CPUTIME_NICE = 1,
-	CPUTIME_SYSTEM = 2,
-	CPUTIME_SOFTIRQ = 3,
-	CPUTIME_IRQ = 4,
-	CPUTIME_IDLE = 5,
-	CPUTIME_IOWAIT = 6,
-	CPUTIME_STEAL = 7,
-	CPUTIME_GUEST = 8,
-	CPUTIME_GUEST_NICE = 9,
-	NR_STATS = 10,
-};
-
-enum bpf_cgroup_storage_type {
-	BPF_CGROUP_STORAGE_SHARED = 0,
-	BPF_CGROUP_STORAGE_PERCPU = 1,
-	__BPF_CGROUP_STORAGE_MAX = 2,
-};
-
-enum cgroup_subsys_id {
-	cpuset_cgrp_id = 0,
-	cpu_cgrp_id = 1,
-	cpuacct_cgrp_id = 2,
-	freezer_cgrp_id = 3,
-	CGROUP_SUBSYS_COUNT = 4,
-};
-
-typedef u8 kprobe_opcode_t;
-
-struct arch_specific_insn {
-	kprobe_opcode_t *insn;
-	bool boostable;
-	bool if_modifier;
-};
-
-struct kprobe;
-
-struct prev_kprobe {
-	struct kprobe *kp;
-	long unsigned int status;
-	long unsigned int old_flags;
-	long unsigned int saved_flags;
-};
-
-typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
-
-typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
-
-typedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);
-
-struct kprobe {
-	struct hlist_node hlist;
-	struct list_head list;
-	long unsigned int nmissed;
-	kprobe_opcode_t *addr;
-	const char *symbol_name;
-	unsigned int offset;
-	kprobe_pre_handler_t pre_handler;
-	kprobe_post_handler_t post_handler;
-	kprobe_fault_handler_t fault_handler;
-	kprobe_opcode_t opcode;
-	struct arch_specific_insn ainsn;
-	u32 flags;
-};
-
-struct kprobe_ctlblk {
-	long unsigned int kprobe_status;
-	long unsigned int kprobe_old_flags;
-	long unsigned int kprobe_saved_flags;
-	struct prev_kprobe prev_kprobe;
-};
-
-struct kretprobe_blackpoint {
-	const char *name;
-	void *addr;
-};
-
-struct kprobe_insn_cache {
-	struct mutex mutex;
-	void * (*alloc)();
-	void (*free)(void *);
-	struct list_head pages;
-	size_t insn_size;
-	int nr_garbage;
-};
-
-struct trace_event_raw_sys_enter {
-	struct trace_entry ent;
-	long int id;
-	long unsigned int args[6];
-	char __data[0];
-};
-
-struct trace_event_raw_sys_exit {
-	struct trace_entry ent;
-	long int id;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sys_enter {};
-
-struct trace_event_data_offsets_sys_exit {};
-
-typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
-
-typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
-
-struct alt_instr {
-	s32 instr_offset;
-	s32 repl_offset;
-	u16 cpuid;
-	u8 instrlen;
-	u8 replacementlen;
-	u8 padlen;
-} __attribute__((packed));
-
-enum vm_fault_reason {
-	VM_FAULT_OOM = 1,
-	VM_FAULT_SIGBUS = 2,
-	VM_FAULT_MAJOR = 4,
-	VM_FAULT_WRITE = 8,
-	VM_FAULT_HWPOISON = 16,
-	VM_FAULT_HWPOISON_LARGE = 32,
-	VM_FAULT_SIGSEGV = 64,
-	VM_FAULT_NOPAGE = 256,
-	VM_FAULT_LOCKED = 512,
-	VM_FAULT_RETRY = 1024,
-	VM_FAULT_FALLBACK = 2048,
-	VM_FAULT_DONE_COW = 4096,
-	VM_FAULT_NEEDDSYNC = 8192,
-	VM_FAULT_HINDEX_MASK = 983040,
-};
-
-struct vm_special_mapping {
-	const char *name;
-	struct page **pages;
-	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
-	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
-};
-
-struct pvclock_vcpu_time_info {
-	u32 version;
-	u32 pad0;
-	u64 tsc_timestamp;
-	u64 system_time;
-	u32 tsc_to_system_mul;
-	s8 tsc_shift;
-	u8 flags;
-	u8 pad[2];
-};
-
-struct pvclock_vsyscall_time_info {
-	struct pvclock_vcpu_time_info pvti;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct vdso_timestamp {
-	u64 sec;
-	u64 nsec;
-};
-
-struct vdso_data {
-	u32 seq;
-	s32 clock_mode;
-	u64 cycle_last;
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	struct vdso_timestamp basetime[12];
-	s32 tz_minuteswest;
-	s32 tz_dsttime;
-	u32 hrtimer_res;
-	u32 __unused;
-};
-
-struct ms_hyperv_tsc_page {
-	volatile u32 tsc_sequence;
-	u32 reserved1;
-	volatile u64 tsc_scale;
-	volatile s64 tsc_offset;
-	u64 reserved2[509];
-};
-
-struct ms_hyperv_info {
-	u32 features;
-	u32 misc_features;
-	u32 hints;
-	u32 nested_features;
-	u32 max_vp_index;
-	u32 max_lp_index;
-};
-
-enum {
-	X86_TRAP_DE = 0,
-	X86_TRAP_DB = 1,
-	X86_TRAP_NMI = 2,
-	X86_TRAP_BP = 3,
-	X86_TRAP_OF = 4,
-	X86_TRAP_BR = 5,
-	X86_TRAP_UD = 6,
-	X86_TRAP_NM = 7,
-	X86_TRAP_DF = 8,
-	X86_TRAP_OLD_MF = 9,
-	X86_TRAP_TS = 10,
-	X86_TRAP_NP = 11,
-	X86_TRAP_SS = 12,
-	X86_TRAP_GP = 13,
-	X86_TRAP_PF = 14,
-	X86_TRAP_SPURIOUS = 15,
-	X86_TRAP_MF = 16,
-	X86_TRAP_AC = 17,
-	X86_TRAP_MC = 18,
-	X86_TRAP_XF = 19,
-	X86_TRAP_IRET = 32,
-};
-
-enum x86_pf_error_code {
-	X86_PF_PROT = 1,
-	X86_PF_WRITE = 2,
-	X86_PF_USER = 4,
-	X86_PF_RSVD = 8,
-	X86_PF_INSTR = 16,
-	X86_PF_PK = 32,
-};
-
-struct trace_event_raw_emulate_vsyscall {
-	struct trace_entry ent;
-	int nr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_emulate_vsyscall {};
-
-typedef void (*btf_trace_emulate_vsyscall)(void *, int);
-
-enum {
-	EMULATE = 0,
-	XONLY = 1,
-	NONE = 2,
-};
-
-enum perf_type_id {
-	PERF_TYPE_HARDWARE = 0,
-	PERF_TYPE_SOFTWARE = 1,
-	PERF_TYPE_TRACEPOINT = 2,
-	PERF_TYPE_HW_CACHE = 3,
-	PERF_TYPE_RAW = 4,
-	PERF_TYPE_BREAKPOINT = 5,
-	PERF_TYPE_MAX = 6,
-};
-
-enum perf_hw_id {
-	PERF_COUNT_HW_CPU_CYCLES = 0,
-	PERF_COUNT_HW_INSTRUCTIONS = 1,
-	PERF_COUNT_HW_CACHE_REFERENCES = 2,
-	PERF_COUNT_HW_CACHE_MISSES = 3,
-	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
-	PERF_COUNT_HW_BRANCH_MISSES = 5,
-	PERF_COUNT_HW_BUS_CYCLES = 6,
-	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
-	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
-	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
-	PERF_COUNT_HW_MAX = 10,
-};
-
-enum perf_hw_cache_id {
-	PERF_COUNT_HW_CACHE_L1D = 0,
-	PERF_COUNT_HW_CACHE_L1I = 1,
-	PERF_COUNT_HW_CACHE_LL = 2,
-	PERF_COUNT_HW_CACHE_DTLB = 3,
-	PERF_COUNT_HW_CACHE_ITLB = 4,
-	PERF_COUNT_HW_CACHE_BPU = 5,
-	PERF_COUNT_HW_CACHE_NODE = 6,
-	PERF_COUNT_HW_CACHE_MAX = 7,
-};
-
-enum perf_hw_cache_op_id {
-	PERF_COUNT_HW_CACHE_OP_READ = 0,
-	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
-	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
-	PERF_COUNT_HW_CACHE_OP_MAX = 3,
-};
-
-enum perf_hw_cache_op_result_id {
-	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
-	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
-	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
-};
-
-enum perf_event_sample_format {
-	PERF_SAMPLE_IP = 1,
-	PERF_SAMPLE_TID = 2,
-	PERF_SAMPLE_TIME = 4,
-	PERF_SAMPLE_ADDR = 8,
-	PERF_SAMPLE_READ = 16,
-	PERF_SAMPLE_CALLCHAIN = 32,
-	PERF_SAMPLE_ID = 64,
-	PERF_SAMPLE_CPU = 128,
-	PERF_SAMPLE_PERIOD = 256,
-	PERF_SAMPLE_STREAM_ID = 512,
-	PERF_SAMPLE_RAW = 1024,
-	PERF_SAMPLE_BRANCH_STACK = 2048,
-	PERF_SAMPLE_REGS_USER = 4096,
-	PERF_SAMPLE_STACK_USER = 8192,
-	PERF_SAMPLE_WEIGHT = 16384,
-	PERF_SAMPLE_DATA_SRC = 32768,
-	PERF_SAMPLE_IDENTIFIER = 65536,
-	PERF_SAMPLE_TRANSACTION = 131072,
-	PERF_SAMPLE_REGS_INTR = 262144,
-	PERF_SAMPLE_PHYS_ADDR = 524288,
-	PERF_SAMPLE_AUX = 1048576,
-	PERF_SAMPLE_MAX = 2097152,
-	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
-};
-
-enum perf_branch_sample_type {
-	PERF_SAMPLE_BRANCH_USER = 1,
-	PERF_SAMPLE_BRANCH_KERNEL = 2,
-	PERF_SAMPLE_BRANCH_HV = 4,
-	PERF_SAMPLE_BRANCH_ANY = 8,
-	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
-	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
-	PERF_SAMPLE_BRANCH_IND_CALL = 64,
-	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
-	PERF_SAMPLE_BRANCH_IN_TX = 256,
-	PERF_SAMPLE_BRANCH_NO_TX = 512,
-	PERF_SAMPLE_BRANCH_COND = 1024,
-	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
-	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
-	PERF_SAMPLE_BRANCH_CALL = 8192,
-	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
-	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
-	PERF_SAMPLE_BRANCH_MAX = 131072,
-};
-
-struct perf_event_mmap_page {
-	__u32 version;
-	__u32 compat_version;
-	__u32 lock;
-	__u32 index;
-	__s64 offset;
-	__u64 time_enabled;
-	__u64 time_running;
-	union {
-		__u64 capabilities;
-		struct {
-			__u64 cap_bit0: 1;
-			__u64 cap_bit0_is_deprecated: 1;
-			__u64 cap_user_rdpmc: 1;
-			__u64 cap_user_time: 1;
-			__u64 cap_user_time_zero: 1;
-			__u64 cap_____res: 59;
-		};
-	};
-	__u16 pmc_width;
-	__u16 time_shift;
-	__u32 time_mult;
-	__u64 time_offset;
-	__u64 time_zero;
-	__u32 size;
-	__u8 __reserved[948];
-	__u64 data_head;
-	__u64 data_tail;
-	__u64 data_offset;
-	__u64 data_size;
-	__u64 aux_head;
-	__u64 aux_tail;
-	__u64 aux_offset;
-	__u64 aux_size;
-};
-
-struct ldt_struct {
-	struct desc_struct *entries;
-	unsigned int nr_entries;
-	int slot;
-};
-
-struct x86_pmu_capability {
-	int version;
-	int num_counters_gp;
-	int num_counters_fixed;
-	int bit_width_gp;
-	int bit_width_fixed;
-	unsigned int events_mask;
-	int events_mask_len;
-};
-
-enum stack_type {
-	STACK_TYPE_UNKNOWN = 0,
-	STACK_TYPE_TASK = 1,
-	STACK_TYPE_IRQ = 2,
-	STACK_TYPE_SOFTIRQ = 3,
-	STACK_TYPE_ENTRY = 4,
-	STACK_TYPE_EXCEPTION = 5,
-	STACK_TYPE_EXCEPTION_LAST = 10,
-};
-
-struct stack_info {
-	enum stack_type type;
-	long unsigned int *begin;
-	long unsigned int *end;
-	long unsigned int *next_sp;
-};
-
-struct stack_frame {
-	struct stack_frame *next_frame;
-	long unsigned int return_address;
-};
-
-struct stack_frame_ia32 {
-	u32 next_frame;
-	u32 return_address;
-};
-
-struct perf_guest_switch_msr {
-	unsigned int msr;
-	u64 host;
-	u64 guest;
-};
-
-struct device_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device *, struct device_attribute *, char *);
-	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
-};
-
-enum perf_event_x86_regs {
-	PERF_REG_X86_AX = 0,
-	PERF_REG_X86_BX = 1,
-	PERF_REG_X86_CX = 2,
-	PERF_REG_X86_DX = 3,
-	PERF_REG_X86_SI = 4,
-	PERF_REG_X86_DI = 5,
-	PERF_REG_X86_BP = 6,
-	PERF_REG_X86_SP = 7,
-	PERF_REG_X86_IP = 8,
-	PERF_REG_X86_FLAGS = 9,
-	PERF_REG_X86_CS = 10,
-	PERF_REG_X86_SS = 11,
-	PERF_REG_X86_DS = 12,
-	PERF_REG_X86_ES = 13,
-	PERF_REG_X86_FS = 14,
-	PERF_REG_X86_GS = 15,
-	PERF_REG_X86_R8 = 16,
-	PERF_REG_X86_R9 = 17,
-	PERF_REG_X86_R10 = 18,
-	PERF_REG_X86_R11 = 19,
-	PERF_REG_X86_R12 = 20,
-	PERF_REG_X86_R13 = 21,
-	PERF_REG_X86_R14 = 22,
-	PERF_REG_X86_R15 = 23,
-	PERF_REG_X86_32_MAX = 16,
-	PERF_REG_X86_64_MAX = 24,
-	PERF_REG_X86_XMM0 = 32,
-	PERF_REG_X86_XMM1 = 34,
-	PERF_REG_X86_XMM2 = 36,
-	PERF_REG_X86_XMM3 = 38,
-	PERF_REG_X86_XMM4 = 40,
-	PERF_REG_X86_XMM5 = 42,
-	PERF_REG_X86_XMM6 = 44,
-	PERF_REG_X86_XMM7 = 46,
-	PERF_REG_X86_XMM8 = 48,
-	PERF_REG_X86_XMM9 = 50,
-	PERF_REG_X86_XMM10 = 52,
-	PERF_REG_X86_XMM11 = 54,
-	PERF_REG_X86_XMM12 = 56,
-	PERF_REG_X86_XMM13 = 58,
-	PERF_REG_X86_XMM14 = 60,
-	PERF_REG_X86_XMM15 = 62,
-	PERF_REG_X86_XMM_MAX = 64,
-};
-
-struct perf_callchain_entry_ctx {
-	struct perf_callchain_entry *entry;
-	u32 max_stack;
-	u32 nr;
-	short int contexts;
-	bool contexts_maxed;
-};
-
-struct perf_pmu_events_attr {
-	struct device_attribute attr;
-	u64 id;
-	const char *event_str;
-};
-
-struct perf_pmu_events_ht_attr {
-	struct device_attribute attr;
-	u64 id;
-	const char *event_str_ht;
-	const char *event_str_noht;
-};
-
-enum {
-	NMI_LOCAL = 0,
-	NMI_UNKNOWN = 1,
-	NMI_SERR = 2,
-	NMI_IO_CHECK = 3,
-	NMI_MAX = 4,
-};
-
-typedef int (*nmi_handler_t)(unsigned int, struct pt_regs *);
-
-struct nmiaction {
-	struct list_head list;
-	nmi_handler_t handler;
-	u64 max_duration;
-	struct irq_work irq_work;
-	long unsigned int flags;
-	const char *name;
-};
-
-struct cyc2ns_data {
-	u32 cyc2ns_mul;
-	u32 cyc2ns_shift;
-	u64 cyc2ns_offset;
-};
-
-struct unwind_state {
-	struct stack_info stack_info;
-	long unsigned int stack_mask;
-	struct task_struct *task;
-	int graph_idx;
-	bool error;
-	bool signal;
-	bool full_regs;
-	long unsigned int sp;
-	long unsigned int bp;
-	long unsigned int ip;
-	struct pt_regs *regs;
-};
-
-enum extra_reg_type {
-	EXTRA_REG_NONE = 4294967295,
-	EXTRA_REG_RSP_0 = 0,
-	EXTRA_REG_RSP_1 = 1,
-	EXTRA_REG_LBR = 2,
-	EXTRA_REG_LDLAT = 3,
-	EXTRA_REG_FE = 4,
-	EXTRA_REG_MAX = 5,
-};
-
-struct event_constraint {
-	union {
-		long unsigned int idxmsk[1];
-		u64 idxmsk64;
-	};
-	u64 code;
-	u64 cmask;
-	int weight;
-	int overlap;
-	int flags;
-	unsigned int size;
-};
-
-struct amd_nb {
-	int nb_id;
-	int refcnt;
-	struct perf_event *owners[64];
-	struct event_constraint event_constraints[64];
-};
-
-struct er_account {
-	raw_spinlock_t lock;
-	u64 config;
-	u64 reg;
-	atomic_t ref;
-};
-
-struct intel_shared_regs {
-	struct er_account regs[5];
-	int refcnt;
-	unsigned int core_id;
-};
-
-enum intel_excl_state_type {
-	INTEL_EXCL_UNUSED = 0,
-	INTEL_EXCL_SHARED = 1,
-	INTEL_EXCL_EXCLUSIVE = 2,
-};
-
-struct intel_excl_states {
-	enum intel_excl_state_type state[64];
-	bool sched_started;
-};
-
-struct intel_excl_cntrs {
-	raw_spinlock_t lock;
-	struct intel_excl_states states[2];
-	union {
-		u16 has_exclusive[2];
-		u32 exclusive_present;
-	};
-	int refcnt;
-	unsigned int core_id;
-};
-
-enum {
-	X86_PERF_KFREE_SHARED = 0,
-	X86_PERF_KFREE_EXCL = 1,
-	X86_PERF_KFREE_MAX = 2,
-};
-
-struct x86_perf_task_context;
-
-struct cpu_hw_events {
-	struct perf_event *events[64];
-	long unsigned int active_mask[1];
-	long unsigned int running[1];
-	int enabled;
-	int n_events;
-	int n_added;
-	int n_txn;
-	int assign[64];
-	u64 tags[64];
-	struct perf_event *event_list[64];
-	struct event_constraint *event_constraint[64];
-	int n_excl;
-	unsigned int txn_flags;
-	int is_fake;
-	struct debug_store *ds;
-	void *ds_pebs_vaddr;
-	void *ds_bts_vaddr;
-	u64 pebs_enabled;
-	int n_pebs;
-	int n_large_pebs;
-	int n_pebs_via_pt;
-	int pebs_output;
-	u64 pebs_data_cfg;
-	u64 active_pebs_data_cfg;
-	int pebs_record_size;
-	int lbr_users;
-	int lbr_pebs_users;
-	struct perf_branch_stack lbr_stack;
-	struct perf_branch_entry lbr_entries[32];
-	struct er_account *lbr_sel;
-	u64 br_sel;
-	struct x86_perf_task_context *last_task_ctx;
-	int last_log_id;
-	u64 intel_ctrl_guest_mask;
-	u64 intel_ctrl_host_mask;
-	struct perf_guest_switch_msr guest_switch_msrs[64];
-	u64 intel_cp_status;
-	struct intel_shared_regs *shared_regs;
-	struct event_constraint *constraint_list;
-	struct intel_excl_cntrs *excl_cntrs;
-	int excl_thread_id;
-	u64 tfa_shadow;
-	struct amd_nb *amd_nb;
-	u64 perf_ctr_virt_mask;
-	void *kfree_on_online[2];
-};
-
-struct x86_perf_task_context {
-	u64 lbr_from[32];
-	u64 lbr_to[32];
-	u64 lbr_info[32];
-	int tos;
-	int valid_lbrs;
-	int lbr_callstack_users;
-	int lbr_stack_state;
-	int log_id;
-};
-
-struct extra_reg {
-	unsigned int event;
-	unsigned int msr;
-	u64 config_mask;
-	u64 valid_mask;
-	int idx;
-	bool extra_msr_access;
-};
-
-union perf_capabilities {
-	struct {
-		u64 lbr_format: 6;
-		u64 pebs_trap: 1;
-		u64 pebs_arch_reg: 1;
-		u64 pebs_format: 4;
-		u64 smm_freeze: 1;
-		u64 full_width_write: 1;
-		u64 pebs_baseline: 1;
-		u64 pebs_metrics_available: 1;
-		u64 pebs_output_pt_available: 1;
-	};
-	u64 capabilities;
-};
-
-struct x86_pmu_quirk {
-	struct x86_pmu_quirk *next;
-	void (*func)();
-};
-
-enum {
-	x86_lbr_exclusive_lbr = 0,
-	x86_lbr_exclusive_bts = 1,
-	x86_lbr_exclusive_pt = 2,
-	x86_lbr_exclusive_max = 3,
-};
-
-struct x86_pmu {
-	const char *name;
-	int version;
-	int (*handle_irq)(struct pt_regs *);
-	void (*disable_all)();
-	void (*enable_all)(int);
-	void (*enable)(struct perf_event *);
-	void (*disable)(struct perf_event *);
-	void (*add)(struct perf_event *);
-	void (*del)(struct perf_event *);
-	void (*read)(struct perf_event *);
-	int (*hw_config)(struct perf_event *);
-	int (*schedule_events)(struct cpu_hw_events *, int, int *);
-	unsigned int eventsel;
-	unsigned int perfctr;
-	int (*addr_offset)(int, bool);
-	int (*rdpmc_index)(int);
-	u64 (*event_map)(int);
-	int max_events;
-	int num_counters;
-	int num_counters_fixed;
-	int cntval_bits;
-	u64 cntval_mask;
-	union {
-		long unsigned int events_maskl;
-		long unsigned int events_mask[1];
-	};
-	int events_mask_len;
-	int apic;
-	u64 max_period;
-	struct event_constraint * (*get_event_constraints)(struct cpu_hw_events *, int, struct perf_event *);
-	void (*put_event_constraints)(struct cpu_hw_events *, struct perf_event *);
-	void (*start_scheduling)(struct cpu_hw_events *);
-	void (*commit_scheduling)(struct cpu_hw_events *, int, int);
-	void (*stop_scheduling)(struct cpu_hw_events *);
-	struct event_constraint *event_constraints;
-	struct x86_pmu_quirk *quirks;
-	int perfctr_second_write;
-	u64 (*limit_period)(struct perf_event *, u64);
-	unsigned int late_ack: 1;
-	unsigned int counter_freezing: 1;
-	int attr_rdpmc_broken;
-	int attr_rdpmc;
-	struct attribute **format_attrs;
-	ssize_t (*events_sysfs_show)(char *, u64);
-	const struct attribute_group **attr_update;
-	long unsigned int attr_freeze_on_smi;
-	int (*cpu_prepare)(int);
-	void (*cpu_starting)(int);
-	void (*cpu_dying)(int);
-	void (*cpu_dead)(int);
-	void (*check_microcode)();
-	void (*sched_task)(struct perf_event_context *, bool);
-	u64 intel_ctrl;
-	union perf_capabilities intel_cap;
-	unsigned int bts: 1;
-	unsigned int bts_active: 1;
-	unsigned int pebs: 1;
-	unsigned int pebs_active: 1;
-	unsigned int pebs_broken: 1;
-	unsigned int pebs_prec_dist: 1;
-	unsigned int pebs_no_tlb: 1;
-	unsigned int pebs_no_isolation: 1;
-	int pebs_record_size;
-	int pebs_buffer_size;
-	int max_pebs_events;
-	void (*drain_pebs)(struct pt_regs *);
-	struct event_constraint *pebs_constraints;
-	void (*pebs_aliases)(struct perf_event *);
-	long unsigned int large_pebs_flags;
-	u64 rtm_abort_event;
-	long unsigned int lbr_tos;
-	long unsigned int lbr_from;
-	long unsigned int lbr_to;
-	int lbr_nr;
-	u64 lbr_sel_mask;
-	const int *lbr_sel_map;
-	bool lbr_double_abort;
-	bool lbr_pt_coexist;
-	atomic_t lbr_exclusive[3];
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
-	unsigned int amd_nb_constraints: 1;
-	struct extra_reg *extra_regs;
-	unsigned int flags;
-	struct perf_guest_switch_msr * (*guest_get_msrs)(int *);
-	int (*check_period)(struct perf_event *, u64);
-	int (*aux_output_match)(struct perf_event *);
-};
-
-struct sched_state {
-	int weight;
-	int event;
-	int counter;
-	int unassigned;
-	int nr_gp;
-	long unsigned int used[1];
-};
-
-struct perf_sched {
-	int max_weight;
-	int max_events;
-	int max_gp;
-	int saved_states;
-	struct event_constraint **constraints;
-	struct sched_state state;
-	struct sched_state saved[2];
-};
-
-typedef int pao_T__;
-
-typedef int pto_T_____2;
-
-typedef unsigned int pao_T_____2;
-
-enum migratetype {
-	MIGRATE_UNMOVABLE = 0,
-	MIGRATE_MOVABLE = 1,
-	MIGRATE_RECLAIMABLE = 2,
-	MIGRATE_PCPTYPES = 3,
-	MIGRATE_HIGHATOMIC = 3,
-	MIGRATE_TYPES = 4,
-};
-
-enum lru_list {
-	LRU_INACTIVE_ANON = 0,
-	LRU_ACTIVE_ANON = 1,
-	LRU_INACTIVE_FILE = 2,
-	LRU_ACTIVE_FILE = 3,
-	LRU_UNEVICTABLE = 4,
-	NR_LRU_LISTS = 5,
-};
-
-enum zone_watermarks {
-	WMARK_MIN = 0,
-	WMARK_LOW = 1,
-	WMARK_HIGH = 2,
-	NR_WMARK = 3,
-};
-
-enum {
-	ZONELIST_FALLBACK = 0,
-	ZONELIST_NOFALLBACK = 1,
-	MAX_ZONELISTS = 2,
-};
-
-struct perf_msr {
-	u64 msr;
-	struct attribute_group *grp;
-	bool (*test)(int, void *);
-	bool no_check;
-};
-
-struct amd_uncore {
-	int id;
-	int refcnt;
-	int cpu;
-	int num_counters;
-	int rdpmc_base;
-	u32 msr_base;
-	cpumask_t *active_mask;
-	struct pmu *pmu;
-	struct perf_event *events[6];
-	struct hlist_node node;
-};
-
-typedef int pci_power_t;
-
-typedef unsigned int pci_channel_state_t;
-
-typedef short unsigned int pci_dev_flags_t;
-
-struct pci_bus;
-
-struct pci_slot;
-
-struct aer_stats;
-
-struct pci_driver;
-
-struct pcie_link_state;
-
-struct pci_vpd;
-
-struct pci_sriov;
-
-struct pci_dev {
-	struct list_head bus_list;
-	struct pci_bus *bus;
-	struct pci_bus *subordinate;
-	void *sysdata;
-	struct proc_dir_entry *procent;
-	struct pci_slot *slot;
-	unsigned int devfn;
-	short unsigned int vendor;
-	short unsigned int device;
-	short unsigned int subsystem_vendor;
-	short unsigned int subsystem_device;
-	unsigned int class;
-	u8 revision;
-	u8 hdr_type;
-	u16 aer_cap;
-	struct aer_stats *aer_stats;
-	u8 pcie_cap;
-	u8 msi_cap;
-	u8 msix_cap;
-	u8 pcie_mpss: 3;
-	u8 rom_base_reg;
-	u8 pin;
-	u16 pcie_flags_reg;
-	long unsigned int *dma_alias_mask;
-	struct pci_driver *driver;
-	u64 dma_mask;
-	struct device_dma_parameters dma_parms;
-	pci_power_t current_state;
-	unsigned int imm_ready: 1;
-	u8 pm_cap;
-	unsigned int pme_support: 5;
-	unsigned int pme_poll: 1;
-	unsigned int d1_support: 1;
-	unsigned int d2_support: 1;
-	unsigned int no_d1d2: 1;
-	unsigned int no_d3cold: 1;
-	unsigned int bridge_d3: 1;
-	unsigned int d3cold_allowed: 1;
-	unsigned int mmio_always_on: 1;
-	unsigned int wakeup_prepared: 1;
-	unsigned int runtime_d3cold: 1;
-	unsigned int skip_bus_pm: 1;
-	unsigned int ignore_hotplug: 1;
-	unsigned int hotplug_user_indicators: 1;
-	unsigned int clear_retrain_link: 1;
-	unsigned int d3_delay;
-	unsigned int d3cold_delay;
-	struct pcie_link_state *link_state;
-	unsigned int ltr_path: 1;
-	unsigned int eetlp_prefix_path: 1;
-	pci_channel_state_t error_state;
-	struct device dev;
-	int cfg_size;
-	unsigned int irq;
-	struct resource resource[11];
-	bool match_driver;
-	unsigned int transparent: 1;
-	unsigned int io_window: 1;
-	unsigned int pref_window: 1;
-	unsigned int pref_64_window: 1;
-	unsigned int multifunction: 1;
-	unsigned int is_busmaster: 1;
-	unsigned int no_msi: 1;
-	unsigned int no_64bit_msi: 1;
-	unsigned int block_cfg_access: 1;
-	unsigned int broken_parity_status: 1;
-	unsigned int irq_reroute_variant: 2;
-	unsigned int msi_enabled: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int ari_enabled: 1;
-	unsigned int ats_enabled: 1;
-	unsigned int pasid_enabled: 1;
-	unsigned int pri_enabled: 1;
-	unsigned int is_managed: 1;
-	unsigned int needs_freset: 1;
-	unsigned int state_saved: 1;
-	unsigned int is_physfn: 1;
-	unsigned int is_virtfn: 1;
-	unsigned int reset_fn: 1;
-	unsigned int is_hotplug_bridge: 1;
-	unsigned int shpc_managed: 1;
-	unsigned int is_thunderbolt: 1;
-	unsigned int untrusted: 1;
-	unsigned int __aer_firmware_first_valid: 1;
-	unsigned int __aer_firmware_first: 1;
-	unsigned int broken_intx_masking: 1;
-	unsigned int io_window_1k: 1;
-	unsigned int irq_managed: 1;
-	unsigned int non_compliant_bars: 1;
-	unsigned int is_probed: 1;
-	unsigned int link_active_reporting: 1;
-	unsigned int no_vf_scan: 1;
-	pci_dev_flags_t dev_flags;
-	atomic_t enable_cnt;
-	u32 saved_config_space[16];
-	struct hlist_head saved_cap_space;
-	struct bin_attribute *rom_attr;
-	int rom_attr_enabled;
-	struct bin_attribute *res_attr[11];
-	struct bin_attribute *res_attr_wc[11];
-	const struct attribute_group **msi_irq_groups;
-	struct pci_vpd *vpd;
-	union {
-		struct pci_sriov *sriov;
-		struct pci_dev *physfn;
-	};
-	u16 ats_cap;
-	u8 ats_stu;
-	u16 pri_cap;
-	u32 pri_reqs_alloc;
-	unsigned int pasid_required: 1;
-	u16 pasid_cap;
-	u16 pasid_features;
-	phys_addr_t rom;
-	size_t romlen;
-	char *driver_override;
-	long unsigned int priv_flags;
-};
-
-struct pci_device_id {
-	__u32 vendor;
-	__u32 device;
-	__u32 subvendor;
-	__u32 subdevice;
-	__u32 class;
-	__u32 class_mask;
-	kernel_ulong_t driver_data;
-};
-
-struct hotplug_slot;
-
-struct pci_slot {
-	struct pci_bus *bus;
-	struct list_head list;
-	struct hotplug_slot *hotplug;
-	unsigned char number;
-	struct kobject kobj;
-};
-
-typedef short unsigned int pci_bus_flags_t;
-
-struct pci_ops;
-
-struct msi_controller;
-
-struct pci_bus {
-	struct list_head node;
-	struct pci_bus *parent;
-	struct list_head children;
-	struct list_head devices;
-	struct pci_dev *self;
-	struct list_head slots;
-	struct resource *resource[4];
-	struct list_head resources;
-	struct resource busn_res;
-	struct pci_ops *ops;
-	struct msi_controller *msi;
-	void *sysdata;
-	struct proc_dir_entry *procdir;
-	unsigned char number;
-	unsigned char primary;
-	unsigned char max_bus_speed;
-	unsigned char cur_bus_speed;
-	char name[48];
-	short unsigned int bridge_ctl;
-	pci_bus_flags_t bus_flags;
-	struct device *bridge;
-	struct device dev;
-	struct bin_attribute *legacy_io;
-	struct bin_attribute *legacy_mem;
-	unsigned int is_added: 1;
-};
-
-enum {
-	PCI_STD_RESOURCES = 0,
-	PCI_STD_RESOURCE_END = 5,
-	PCI_ROM_RESOURCE = 6,
-	PCI_BRIDGE_RESOURCES = 7,
-	PCI_BRIDGE_RESOURCE_END = 10,
-	PCI_NUM_RESOURCES = 11,
-	DEVICE_COUNT_RESOURCE = 11,
-};
-
-enum pci_channel_state {
-	pci_channel_io_normal = 1,
-	pci_channel_io_frozen = 2,
-	pci_channel_io_perm_failure = 3,
-};
-
-typedef unsigned int pcie_reset_state_t;
-
-struct pci_dynids {
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct pci_error_handlers;
-
-struct pci_driver {
-	struct list_head node;
-	const char *name;
-	const struct pci_device_id *id_table;
-	int (*probe)(struct pci_dev *, const struct pci_device_id *);
-	void (*remove)(struct pci_dev *);
-	int (*suspend)(struct pci_dev *, pm_message_t);
-	int (*resume)(struct pci_dev *);
-	void (*shutdown)(struct pci_dev *);
-	int (*sriov_configure)(struct pci_dev *, int);
-	const struct pci_error_handlers *err_handler;
-	const struct attribute_group **groups;
-	struct device_driver driver;
-	struct pci_dynids dynids;
-};
-
-struct pci_ops {
-	int (*add_bus)(struct pci_bus *);
-	void (*remove_bus)(struct pci_bus *);
-	void * (*map_bus)(struct pci_bus *, unsigned int, int);
-	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
-	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
-};
-
-typedef unsigned int pci_ers_result_t;
-
-struct pci_error_handlers {
-	pci_ers_result_t (*error_detected)(struct pci_dev *, enum pci_channel_state);
-	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
-	pci_ers_result_t (*slot_reset)(struct pci_dev *);
-	void (*reset_prepare)(struct pci_dev *);
-	void (*reset_done)(struct pci_dev *);
-	void (*resume)(struct pci_dev *);
-};
-
-enum pcie_bus_config_types {
-	PCIE_BUS_TUNE_OFF = 0,
-	PCIE_BUS_DEFAULT = 1,
-	PCIE_BUS_SAFE = 2,
-	PCIE_BUS_PERFORMANCE = 3,
-	PCIE_BUS_PEER2PEER = 4,
-};
-
-struct syscore_ops {
-	struct list_head node;
-	int (*suspend)();
-	void (*resume)();
-	void (*shutdown)();
-};
-
-enum ibs_states {
-	IBS_ENABLED = 0,
-	IBS_STARTED = 1,
-	IBS_STOPPING = 2,
-	IBS_STOPPED = 3,
-	IBS_MAX_STATES = 4,
-};
-
-struct cpu_perf_ibs {
-	struct perf_event *event;
-	long unsigned int state[1];
-};
-
-struct perf_ibs {
-	struct pmu pmu;
-	unsigned int msr;
-	u64 config_mask;
-	u64 cnt_mask;
-	u64 enable_mask;
-	u64 valid_mask;
-	u64 max_period;
-	long unsigned int offset_mask[1];
-	int offset_max;
-	struct cpu_perf_ibs *pcpu;
-	struct attribute **format_attrs;
-	struct attribute_group format_group;
-	const struct attribute_group *attr_groups[2];
-	u64 (*get_count)(u64);
-};
-
-struct perf_ibs_data {
-	u32 size;
-	union {
-		u32 data[0];
-		u32 caps;
-	};
-	u64 regs[8];
-};
-
-struct amd_iommu;
-
-struct perf_amd_iommu {
-	struct list_head list;
-	struct pmu pmu;
-	struct amd_iommu *iommu;
-	char name[16];
-	u8 max_banks;
-	u8 max_counters;
-	u64 cntr_assign_mask;
-	raw_spinlock_t lock;
-};
-
-struct amd_iommu_event_desc {
-	struct kobj_attribute attr;
-	const char *event;
-};
-
-enum perf_msr_id {
-	PERF_MSR_TSC = 0,
-	PERF_MSR_APERF = 1,
-	PERF_MSR_MPERF = 2,
-	PERF_MSR_PPERF = 3,
-	PERF_MSR_SMI = 4,
-	PERF_MSR_PTSC = 5,
-	PERF_MSR_IRPERF = 6,
-	PERF_MSR_THERM = 7,
-	PERF_MSR_EVENT_MAX = 8,
-};
-
-struct x86_cpu_desc {
-	u8 x86_family;
-	u8 x86_vendor;
-	u8 x86_model;
-	u8 x86_stepping;
-	u32 x86_microcode_rev;
-};
-
-union cpuid10_eax {
-	struct {
-		unsigned int version_id: 8;
-		unsigned int num_counters: 8;
-		unsigned int bit_width: 8;
-		unsigned int mask_length: 8;
-	} split;
-	unsigned int full;
-};
-
-union cpuid10_ebx {
-	struct {
-		unsigned int no_unhalted_core_cycles: 1;
-		unsigned int no_instructions_retired: 1;
-		unsigned int no_unhalted_reference_cycles: 1;
-		unsigned int no_llc_reference: 1;
-		unsigned int no_llc_misses: 1;
-		unsigned int no_branch_instruction_retired: 1;
-		unsigned int no_branch_misses_retired: 1;
-	} split;
-	unsigned int full;
-};
-
-union cpuid10_edx {
-	struct {
-		unsigned int num_counters_fixed: 5;
-		unsigned int bit_width_fixed: 8;
-		unsigned int reserved: 19;
-	} split;
-	unsigned int full;
-};
-
-union x86_pmu_config {
-	struct {
-		u64 event: 8;
-		u64 umask: 8;
-		u64 usr: 1;
-		u64 os: 1;
-		u64 edge: 1;
-		u64 pc: 1;
-		u64 interrupt: 1;
-		u64 __reserved1: 1;
-		u64 en: 1;
-		u64 inv: 1;
-		u64 cmask: 8;
-		u64 event2: 4;
-		u64 __reserved2: 4;
-		u64 go: 1;
-		u64 ho: 1;
-	} bits;
-	u64 value;
-};
-
-enum pageflags {
-	PG_locked = 0,
-	PG_referenced = 1,
-	PG_uptodate = 2,
-	PG_dirty = 3,
-	PG_lru = 4,
-	PG_active = 5,
-	PG_workingset = 6,
-	PG_waiters = 7,
-	PG_error = 8,
-	PG_slab = 9,
-	PG_owner_priv_1 = 10,
-	PG_arch_1 = 11,
-	PG_reserved = 12,
-	PG_private = 13,
-	PG_private_2 = 14,
-	PG_writeback = 15,
-	PG_head = 16,
-	PG_mappedtodisk = 17,
-	PG_reclaim = 18,
-	PG_swapbacked = 19,
-	PG_unevictable = 20,
-	PG_mlocked = 21,
-	PG_uncached = 22,
-	__NR_PAGEFLAGS = 23,
-	PG_checked = 10,
-	PG_swapcache = 10,
-	PG_fscache = 14,
-	PG_pinned = 10,
-	PG_savepinned = 3,
-	PG_foreign = 10,
-	PG_xen_remapped = 10,
-	PG_slob_free = 13,
-	PG_double_map = 14,
-	PG_isolated = 18,
-};
-
-struct bts_ctx {
-	struct perf_output_handle handle;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct debug_store ds_back;
-	int state;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	BTS_STATE_STOPPED = 0,
-	BTS_STATE_INACTIVE = 1,
-	BTS_STATE_ACTIVE = 2,
-};
-
-struct bts_phys {
-	struct page *page;
-	long unsigned int size;
-	long unsigned int offset;
-	long unsigned int displacement;
-};
-
-struct bts_buffer {
-	size_t real_size;
-	unsigned int nr_pages;
-	unsigned int nr_bufs;
-	unsigned int cur_buf;
-	bool snapshot;
-	local_t data_size;
-	local_t head;
-	long unsigned int end;
-	void **data_pages;
-	struct bts_phys buf[0];
-};
-
-struct pebs_basic {
-	u64 format_size;
-	u64 ip;
-	u64 applicable_counters;
-	u64 tsc;
-};
-
-struct pebs_meminfo {
-	u64 address;
-	u64 aux;
-	u64 latency;
-	u64 tsx_tuning;
-};
-
-struct pebs_gprs {
-	u64 flags;
-	u64 ip;
-	u64 ax;
-	u64 cx;
-	u64 dx;
-	u64 bx;
-	u64 sp;
-	u64 bp;
-	u64 si;
-	u64 di;
-	u64 r8;
-	u64 r9;
-	u64 r10;
-	u64 r11;
-	u64 r12;
-	u64 r13;
-	u64 r14;
-	u64 r15;
-};
-
-struct pebs_xmm {
-	u64 xmm[32];
-};
-
-struct pebs_lbr_entry {
-	u64 from;
-	u64 to;
-	u64 info;
-};
-
-struct pebs_lbr {
-	struct pebs_lbr_entry lbr[0];
-};
-
-struct x86_perf_regs {
-	struct pt_regs regs;
-	u64 *xmm_regs;
-};
-
-typedef unsigned int insn_attr_t;
-
-typedef unsigned char insn_byte_t;
-
-typedef int insn_value_t;
-
-struct insn_field {
-	union {
-		insn_value_t value;
-		insn_byte_t bytes[4];
-	};
-	unsigned char got;
-	unsigned char nbytes;
-};
-
-struct insn {
-	struct insn_field prefixes;
-	struct insn_field rex_prefix;
-	struct insn_field vex_prefix;
-	struct insn_field opcode;
-	struct insn_field modrm;
-	struct insn_field sib;
-	struct insn_field displacement;
-	union {
-		struct insn_field immediate;
-		struct insn_field moffset1;
-		struct insn_field immediate1;
-	};
-	union {
-		struct insn_field moffset2;
-		struct insn_field immediate2;
-	};
-	int emulate_prefix_size;
-	insn_attr_t attr;
-	unsigned char opnd_bytes;
-	unsigned char addr_bytes;
-	unsigned char length;
-	unsigned char x86_64;
-	const insn_byte_t *kaddr;
-	const insn_byte_t *end_kaddr;
-	const insn_byte_t *next_byte;
-};
-
-enum {
-	PERF_TXN_ELISION = 1,
-	PERF_TXN_TRANSACTION = 2,
-	PERF_TXN_SYNC = 4,
-	PERF_TXN_ASYNC = 8,
-	PERF_TXN_RETRY = 16,
-	PERF_TXN_CONFLICT = 32,
-	PERF_TXN_CAPACITY_WRITE = 64,
-	PERF_TXN_CAPACITY_READ = 128,
-	PERF_TXN_MAX = 256,
-	PERF_TXN_ABORT_MASK = 0,
-	PERF_TXN_ABORT_SHIFT = 32,
-};
-
-struct perf_event_header {
-	__u32 type;
-	__u16 misc;
-	__u16 size;
-};
-
-union intel_x86_pebs_dse {
-	u64 val;
-	struct {
-		unsigned int ld_dse: 4;
-		unsigned int ld_stlb_miss: 1;
-		unsigned int ld_locked: 1;
-		unsigned int ld_reserved: 26;
-	};
-	struct {
-		unsigned int st_l1d_hit: 1;
-		unsigned int st_reserved1: 3;
-		unsigned int st_stlb_miss: 1;
-		unsigned int st_locked: 1;
-		unsigned int st_reserved2: 26;
-	};
-};
-
-struct pebs_record_core {
-	u64 flags;
-	u64 ip;
-	u64 ax;
-	u64 bx;
-	u64 cx;
-	u64 dx;
-	u64 si;
-	u64 di;
-	u64 bp;
-	u64 sp;
-	u64 r8;
-	u64 r9;
-	u64 r10;
-	u64 r11;
-	u64 r12;
-	u64 r13;
-	u64 r14;
-	u64 r15;
-};
-
-struct pebs_record_nhm {
-	u64 flags;
-	u64 ip;
-	u64 ax;
-	u64 bx;
-	u64 cx;
-	u64 dx;
-	u64 si;
-	u64 di;
-	u64 bp;
-	u64 sp;
-	u64 r8;
-	u64 r9;
-	u64 r10;
-	u64 r11;
-	u64 r12;
-	u64 r13;
-	u64 r14;
-	u64 r15;
-	u64 status;
-	u64 dla;
-	u64 dse;
-	u64 lat;
-};
-
-union hsw_tsx_tuning {
-	struct {
-		u32 cycles_last_block: 32;
-		u32 hle_abort: 1;
-		u32 rtm_abort: 1;
-		u32 instruction_abort: 1;
-		u32 non_instruction_abort: 1;
-		u32 retry: 1;
-		u32 data_conflict: 1;
-		u32 capacity_writes: 1;
-		u32 capacity_reads: 1;
-	};
-	u64 value;
-};
-
-struct pebs_record_skl {
-	u64 flags;
-	u64 ip;
-	u64 ax;
-	u64 bx;
-	u64 cx;
-	u64 dx;
-	u64 si;
-	u64 di;
-	u64 bp;
-	u64 sp;
-	u64 r8;
-	u64 r9;
-	u64 r10;
-	u64 r11;
-	u64 r12;
-	u64 r13;
-	u64 r14;
-	u64 r15;
-	u64 status;
-	u64 dla;
-	u64 dse;
-	u64 lat;
-	u64 real_ip;
-	u64 tsx_tuning;
-	u64 tsc;
-};
-
-struct bts_record {
-	u64 from;
-	u64 to;
-	u64 flags;
-};
-
-enum {
-	PERF_BR_UNKNOWN = 0,
-	PERF_BR_COND = 1,
-	PERF_BR_UNCOND = 2,
-	PERF_BR_IND = 3,
-	PERF_BR_CALL = 4,
-	PERF_BR_IND_CALL = 5,
-	PERF_BR_RET = 6,
-	PERF_BR_SYSCALL = 7,
-	PERF_BR_SYSRET = 8,
-	PERF_BR_COND_CALL = 9,
-	PERF_BR_COND_RET = 10,
-	PERF_BR_MAX = 11,
-};
-
-enum {
-	LBR_FORMAT_32 = 0,
-	LBR_FORMAT_LIP = 1,
-	LBR_FORMAT_EIP = 2,
-	LBR_FORMAT_EIP_FLAGS = 3,
-	LBR_FORMAT_EIP_FLAGS2 = 4,
-	LBR_FORMAT_INFO = 5,
-	LBR_FORMAT_TIME = 6,
-	LBR_FORMAT_MAX_KNOWN = 6,
-};
-
-enum {
-	X86_BR_NONE = 0,
-	X86_BR_USER = 1,
-	X86_BR_KERNEL = 2,
-	X86_BR_CALL = 4,
-	X86_BR_RET = 8,
-	X86_BR_SYSCALL = 16,
-	X86_BR_SYSRET = 32,
-	X86_BR_INT = 64,
-	X86_BR_IRET = 128,
-	X86_BR_JCC = 256,
-	X86_BR_JMP = 512,
-	X86_BR_IRQ = 1024,
-	X86_BR_IND_CALL = 2048,
-	X86_BR_ABORT = 4096,
-	X86_BR_IN_TX = 8192,
-	X86_BR_NO_TX = 16384,
-	X86_BR_ZERO_CALL = 32768,
-	X86_BR_CALL_STACK = 65536,
-	X86_BR_IND_JMP = 131072,
-	X86_BR_TYPE_SAVE = 262144,
-};
-
-enum {
-	LBR_NONE = 0,
-	LBR_VALID = 1,
-};
-
-enum P4_EVENTS {
-	P4_EVENT_TC_DELIVER_MODE = 0,
-	P4_EVENT_BPU_FETCH_REQUEST = 1,
-	P4_EVENT_ITLB_REFERENCE = 2,
-	P4_EVENT_MEMORY_CANCEL = 3,
-	P4_EVENT_MEMORY_COMPLETE = 4,
-	P4_EVENT_LOAD_PORT_REPLAY = 5,
-	P4_EVENT_STORE_PORT_REPLAY = 6,
-	P4_EVENT_MOB_LOAD_REPLAY = 7,
-	P4_EVENT_PAGE_WALK_TYPE = 8,
-	P4_EVENT_BSQ_CACHE_REFERENCE = 9,
-	P4_EVENT_IOQ_ALLOCATION = 10,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES = 11,
-	P4_EVENT_FSB_DATA_ACTIVITY = 12,
-	P4_EVENT_BSQ_ALLOCATION = 13,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES = 14,
-	P4_EVENT_SSE_INPUT_ASSIST = 15,
-	P4_EVENT_PACKED_SP_UOP = 16,
-	P4_EVENT_PACKED_DP_UOP = 17,
-	P4_EVENT_SCALAR_SP_UOP = 18,
-	P4_EVENT_SCALAR_DP_UOP = 19,
-	P4_EVENT_64BIT_MMX_UOP = 20,
-	P4_EVENT_128BIT_MMX_UOP = 21,
-	P4_EVENT_X87_FP_UOP = 22,
-	P4_EVENT_TC_MISC = 23,
-	P4_EVENT_GLOBAL_POWER_EVENTS = 24,
-	P4_EVENT_TC_MS_XFER = 25,
-	P4_EVENT_UOP_QUEUE_WRITES = 26,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE = 27,
-	P4_EVENT_RETIRED_BRANCH_TYPE = 28,
-	P4_EVENT_RESOURCE_STALL = 29,
-	P4_EVENT_WC_BUFFER = 30,
-	P4_EVENT_B2B_CYCLES = 31,
-	P4_EVENT_BNR = 32,
-	P4_EVENT_SNOOP = 33,
-	P4_EVENT_RESPONSE = 34,
-	P4_EVENT_FRONT_END_EVENT = 35,
-	P4_EVENT_EXECUTION_EVENT = 36,
-	P4_EVENT_REPLAY_EVENT = 37,
-	P4_EVENT_INSTR_RETIRED = 38,
-	P4_EVENT_UOPS_RETIRED = 39,
-	P4_EVENT_UOP_TYPE = 40,
-	P4_EVENT_BRANCH_RETIRED = 41,
-	P4_EVENT_MISPRED_BRANCH_RETIRED = 42,
-	P4_EVENT_X87_ASSIST = 43,
-	P4_EVENT_MACHINE_CLEAR = 44,
-	P4_EVENT_INSTR_COMPLETED = 45,
-};
-
-enum P4_EVENT_OPCODES {
-	P4_EVENT_TC_DELIVER_MODE_OPCODE = 257,
-	P4_EVENT_BPU_FETCH_REQUEST_OPCODE = 768,
-	P4_EVENT_ITLB_REFERENCE_OPCODE = 6147,
-	P4_EVENT_MEMORY_CANCEL_OPCODE = 517,
-	P4_EVENT_MEMORY_COMPLETE_OPCODE = 2050,
-	P4_EVENT_LOAD_PORT_REPLAY_OPCODE = 1026,
-	P4_EVENT_STORE_PORT_REPLAY_OPCODE = 1282,
-	P4_EVENT_MOB_LOAD_REPLAY_OPCODE = 770,
-	P4_EVENT_PAGE_WALK_TYPE_OPCODE = 260,
-	P4_EVENT_BSQ_CACHE_REFERENCE_OPCODE = 3079,
-	P4_EVENT_IOQ_ALLOCATION_OPCODE = 774,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES_OPCODE = 6662,
-	P4_EVENT_FSB_DATA_ACTIVITY_OPCODE = 5894,
-	P4_EVENT_BSQ_ALLOCATION_OPCODE = 1287,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES_OPCODE = 1543,
-	P4_EVENT_SSE_INPUT_ASSIST_OPCODE = 13313,
-	P4_EVENT_PACKED_SP_UOP_OPCODE = 2049,
-	P4_EVENT_PACKED_DP_UOP_OPCODE = 3073,
-	P4_EVENT_SCALAR_SP_UOP_OPCODE = 2561,
-	P4_EVENT_SCALAR_DP_UOP_OPCODE = 3585,
-	P4_EVENT_64BIT_MMX_UOP_OPCODE = 513,
-	P4_EVENT_128BIT_MMX_UOP_OPCODE = 6657,
-	P4_EVENT_X87_FP_UOP_OPCODE = 1025,
-	P4_EVENT_TC_MISC_OPCODE = 1537,
-	P4_EVENT_GLOBAL_POWER_EVENTS_OPCODE = 4870,
-	P4_EVENT_TC_MS_XFER_OPCODE = 1280,
-	P4_EVENT_UOP_QUEUE_WRITES_OPCODE = 2304,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE_OPCODE = 1282,
-	P4_EVENT_RETIRED_BRANCH_TYPE_OPCODE = 1026,
-	P4_EVENT_RESOURCE_STALL_OPCODE = 257,
-	P4_EVENT_WC_BUFFER_OPCODE = 1285,
-	P4_EVENT_B2B_CYCLES_OPCODE = 5635,
-	P4_EVENT_BNR_OPCODE = 2051,
-	P4_EVENT_SNOOP_OPCODE = 1539,
-	P4_EVENT_RESPONSE_OPCODE = 1027,
-	P4_EVENT_FRONT_END_EVENT_OPCODE = 2053,
-	P4_EVENT_EXECUTION_EVENT_OPCODE = 3077,
-	P4_EVENT_REPLAY_EVENT_OPCODE = 2309,
-	P4_EVENT_INSTR_RETIRED_OPCODE = 516,
-	P4_EVENT_UOPS_RETIRED_OPCODE = 260,
-	P4_EVENT_UOP_TYPE_OPCODE = 514,
-	P4_EVENT_BRANCH_RETIRED_OPCODE = 1541,
-	P4_EVENT_MISPRED_BRANCH_RETIRED_OPCODE = 772,
-	P4_EVENT_X87_ASSIST_OPCODE = 773,
-	P4_EVENT_MACHINE_CLEAR_OPCODE = 517,
-	P4_EVENT_INSTR_COMPLETED_OPCODE = 1796,
-};
-
-enum P4_ESCR_EMASKS {
-	P4_EVENT_TC_DELIVER_MODE__DD = 512,
-	P4_EVENT_TC_DELIVER_MODE__DB = 1024,
-	P4_EVENT_TC_DELIVER_MODE__DI = 2048,
-	P4_EVENT_TC_DELIVER_MODE__BD = 4096,
-	P4_EVENT_TC_DELIVER_MODE__BB = 8192,
-	P4_EVENT_TC_DELIVER_MODE__BI = 16384,
-	P4_EVENT_TC_DELIVER_MODE__ID = 32768,
-	P4_EVENT_BPU_FETCH_REQUEST__TCMISS = 512,
-	P4_EVENT_ITLB_REFERENCE__HIT = 512,
-	P4_EVENT_ITLB_REFERENCE__MISS = 1024,
-	P4_EVENT_ITLB_REFERENCE__HIT_UK = 2048,
-	P4_EVENT_MEMORY_CANCEL__ST_RB_FULL = 2048,
-	P4_EVENT_MEMORY_CANCEL__64K_CONF = 4096,
-	P4_EVENT_MEMORY_COMPLETE__LSC = 512,
-	P4_EVENT_MEMORY_COMPLETE__SSC = 1024,
-	P4_EVENT_LOAD_PORT_REPLAY__SPLIT_LD = 1024,
-	P4_EVENT_STORE_PORT_REPLAY__SPLIT_ST = 1024,
-	P4_EVENT_MOB_LOAD_REPLAY__NO_STA = 1024,
-	P4_EVENT_MOB_LOAD_REPLAY__NO_STD = 4096,
-	P4_EVENT_MOB_LOAD_REPLAY__PARTIAL_DATA = 8192,
-	P4_EVENT_MOB_LOAD_REPLAY__UNALGN_ADDR = 16384,
-	P4_EVENT_PAGE_WALK_TYPE__DTMISS = 512,
-	P4_EVENT_PAGE_WALK_TYPE__ITMISS = 1024,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITS = 512,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITE = 1024,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITM = 2048,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITS = 4096,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITE = 8192,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITM = 16384,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_MISS = 131072,
-	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_MISS = 262144,
-	P4_EVENT_BSQ_CACHE_REFERENCE__WR_2ndL_MISS = 524288,
-	P4_EVENT_IOQ_ALLOCATION__DEFAULT = 512,
-	P4_EVENT_IOQ_ALLOCATION__ALL_READ = 16384,
-	P4_EVENT_IOQ_ALLOCATION__ALL_WRITE = 32768,
-	P4_EVENT_IOQ_ALLOCATION__MEM_UC = 65536,
-	P4_EVENT_IOQ_ALLOCATION__MEM_WC = 131072,
-	P4_EVENT_IOQ_ALLOCATION__MEM_WT = 262144,
-	P4_EVENT_IOQ_ALLOCATION__MEM_WP = 524288,
-	P4_EVENT_IOQ_ALLOCATION__MEM_WB = 1048576,
-	P4_EVENT_IOQ_ALLOCATION__OWN = 4194304,
-	P4_EVENT_IOQ_ALLOCATION__OTHER = 8388608,
-	P4_EVENT_IOQ_ALLOCATION__PREFETCH = 16777216,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__DEFAULT = 512,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_READ = 16384,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_WRITE = 32768,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_UC = 65536,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WC = 131072,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WT = 262144,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WP = 524288,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WB = 1048576,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__OWN = 4194304,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__OTHER = 8388608,
-	P4_EVENT_IOQ_ACTIVE_ENTRIES__PREFETCH = 16777216,
-	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_DRV = 512,
-	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OWN = 1024,
-	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OTHER = 2048,
-	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_DRV = 4096,
-	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OWN = 8192,
-	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OTHER = 16384,
-	P4_EVENT_BSQ_ALLOCATION__REQ_TYPE0 = 512,
-	P4_EVENT_BSQ_ALLOCATION__REQ_TYPE1 = 1024,
-	P4_EVENT_BSQ_ALLOCATION__REQ_LEN0 = 2048,
-	P4_EVENT_BSQ_ALLOCATION__REQ_LEN1 = 4096,
-	P4_EVENT_BSQ_ALLOCATION__REQ_IO_TYPE = 16384,
-	P4_EVENT_BSQ_ALLOCATION__REQ_LOCK_TYPE = 32768,
-	P4_EVENT_BSQ_ALLOCATION__REQ_CACHE_TYPE = 65536,
-	P4_EVENT_BSQ_ALLOCATION__REQ_SPLIT_TYPE = 131072,
-	P4_EVENT_BSQ_ALLOCATION__REQ_DEM_TYPE = 262144,
-	P4_EVENT_BSQ_ALLOCATION__REQ_ORD_TYPE = 524288,
-	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE0 = 1048576,
-	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE1 = 2097152,
-	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE2 = 4194304,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE0 = 512,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE1 = 1024,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN0 = 2048,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN1 = 4096,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_IO_TYPE = 16384,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LOCK_TYPE = 32768,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_CACHE_TYPE = 65536,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_SPLIT_TYPE = 131072,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_DEM_TYPE = 262144,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_ORD_TYPE = 524288,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE0 = 1048576,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE1 = 2097152,
-	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE2 = 4194304,
-	P4_EVENT_SSE_INPUT_ASSIST__ALL = 16777216,
-	P4_EVENT_PACKED_SP_UOP__ALL = 16777216,
-	P4_EVENT_PACKED_DP_UOP__ALL = 16777216,
-	P4_EVENT_SCALAR_SP_UOP__ALL = 16777216,
-	P4_EVENT_SCALAR_DP_UOP__ALL = 16777216,
-	P4_EVENT_64BIT_MMX_UOP__ALL = 16777216,
-	P4_EVENT_128BIT_MMX_UOP__ALL = 16777216,
-	P4_EVENT_X87_FP_UOP__ALL = 16777216,
-	P4_EVENT_TC_MISC__FLUSH = 8192,
-	P4_EVENT_GLOBAL_POWER_EVENTS__RUNNING = 512,
-	P4_EVENT_TC_MS_XFER__CISC = 512,
-	P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_BUILD = 512,
-	P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_DELIVER = 1024,
-	P4_EVENT_UOP_QUEUE_WRITES__FROM_ROM = 2048,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CONDITIONAL = 1024,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CALL = 2048,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__RETURN = 4096,
-	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__INDIRECT = 8192,
-	P4_EVENT_RETIRED_BRANCH_TYPE__CONDITIONAL = 1024,
-	P4_EVENT_RETIRED_BRANCH_TYPE__CALL = 2048,
-	P4_EVENT_RETIRED_BRANCH_TYPE__RETURN = 4096,
-	P4_EVENT_RETIRED_BRANCH_TYPE__INDIRECT = 8192,
-	P4_EVENT_RESOURCE_STALL__SBFULL = 16384,
-	P4_EVENT_WC_BUFFER__WCB_EVICTS = 512,
-	P4_EVENT_WC_BUFFER__WCB_FULL_EVICTS = 1024,
-	P4_EVENT_FRONT_END_EVENT__NBOGUS = 512,
-	P4_EVENT_FRONT_END_EVENT__BOGUS = 1024,
-	P4_EVENT_EXECUTION_EVENT__NBOGUS0 = 512,
-	P4_EVENT_EXECUTION_EVENT__NBOGUS1 = 1024,
-	P4_EVENT_EXECUTION_EVENT__NBOGUS2 = 2048,
-	P4_EVENT_EXECUTION_EVENT__NBOGUS3 = 4096,
-	P4_EVENT_EXECUTION_EVENT__BOGUS0 = 8192,
-	P4_EVENT_EXECUTION_EVENT__BOGUS1 = 16384,
-	P4_EVENT_EXECUTION_EVENT__BOGUS2 = 32768,
-	P4_EVENT_EXECUTION_EVENT__BOGUS3 = 65536,
-	P4_EVENT_REPLAY_EVENT__NBOGUS = 512,
-	P4_EVENT_REPLAY_EVENT__BOGUS = 1024,
-	P4_EVENT_INSTR_RETIRED__NBOGUSNTAG = 512,
-	P4_EVENT_INSTR_RETIRED__NBOGUSTAG = 1024,
-	P4_EVENT_INSTR_RETIRED__BOGUSNTAG = 2048,
-	P4_EVENT_INSTR_RETIRED__BOGUSTAG = 4096,
-	P4_EVENT_UOPS_RETIRED__NBOGUS = 512,
-	P4_EVENT_UOPS_RETIRED__BOGUS = 1024,
-	P4_EVENT_UOP_TYPE__TAGLOADS = 1024,
-	P4_EVENT_UOP_TYPE__TAGSTORES = 2048,
-	P4_EVENT_BRANCH_RETIRED__MMNP = 512,
-	P4_EVENT_BRANCH_RETIRED__MMNM = 1024,
-	P4_EVENT_BRANCH_RETIRED__MMTP = 2048,
-	P4_EVENT_BRANCH_RETIRED__MMTM = 4096,
-	P4_EVENT_MISPRED_BRANCH_RETIRED__NBOGUS = 512,
-	P4_EVENT_X87_ASSIST__FPSU = 512,
-	P4_EVENT_X87_ASSIST__FPSO = 1024,
-	P4_EVENT_X87_ASSIST__POAO = 2048,
-	P4_EVENT_X87_ASSIST__POAU = 4096,
-	P4_EVENT_X87_ASSIST__PREA = 8192,
-	P4_EVENT_MACHINE_CLEAR__CLEAR = 512,
-	P4_EVENT_MACHINE_CLEAR__MOCLEAR = 1024,
-	P4_EVENT_MACHINE_CLEAR__SMCLEAR = 2048,
-	P4_EVENT_INSTR_COMPLETED__NBOGUS = 512,
-	P4_EVENT_INSTR_COMPLETED__BOGUS = 1024,
-};
-
-enum P4_PEBS_METRIC {
-	P4_PEBS_METRIC__none = 0,
-	P4_PEBS_METRIC__1stl_cache_load_miss_retired = 1,
-	P4_PEBS_METRIC__2ndl_cache_load_miss_retired = 2,
-	P4_PEBS_METRIC__dtlb_load_miss_retired = 3,
-	P4_PEBS_METRIC__dtlb_store_miss_retired = 4,
-	P4_PEBS_METRIC__dtlb_all_miss_retired = 5,
-	P4_PEBS_METRIC__tagged_mispred_branch = 6,
-	P4_PEBS_METRIC__mob_load_replay_retired = 7,
-	P4_PEBS_METRIC__split_load_retired = 8,
-	P4_PEBS_METRIC__split_store_retired = 9,
-	P4_PEBS_METRIC__max = 10,
-};
-
-struct p4_event_bind {
-	unsigned int opcode;
-	unsigned int escr_msr[2];
-	unsigned int escr_emask;
-	unsigned int shared;
-	char cntr[6];
-};
-
-struct p4_pebs_bind {
-	unsigned int metric_pebs;
-	unsigned int metric_vert;
-};
-
-struct p4_event_alias {
-	u64 original;
-	u64 alternative;
-};
-
-enum cpuid_regs_idx {
-	CPUID_EAX = 0,
-	CPUID_EBX = 1,
-	CPUID_ECX = 2,
-	CPUID_EDX = 3,
-};
-
-struct dev_ext_attribute {
-	struct device_attribute attr;
-	void *var;
-};
-
-enum pt_capabilities {
-	PT_CAP_max_subleaf = 0,
-	PT_CAP_cr3_filtering = 1,
-	PT_CAP_psb_cyc = 2,
-	PT_CAP_ip_filtering = 3,
-	PT_CAP_mtc = 4,
-	PT_CAP_ptwrite = 5,
-	PT_CAP_power_event_trace = 6,
-	PT_CAP_topa_output = 7,
-	PT_CAP_topa_multiple_entries = 8,
-	PT_CAP_single_range_output = 9,
-	PT_CAP_output_subsys = 10,
-	PT_CAP_payloads_lip = 11,
-	PT_CAP_num_address_ranges = 12,
-	PT_CAP_mtc_periods = 13,
-	PT_CAP_cycle_thresholds = 14,
-	PT_CAP_psb_periods = 15,
-};
-
-enum perf_addr_filter_action_t {
-	PERF_ADDR_FILTER_ACTION_STOP = 0,
-	PERF_ADDR_FILTER_ACTION_START = 1,
-	PERF_ADDR_FILTER_ACTION_FILTER = 2,
-};
-
-struct perf_addr_filter {
-	struct list_head entry;
-	struct path path;
-	long unsigned int offset;
-	long unsigned int size;
-	enum perf_addr_filter_action_t action;
-};
-
-struct topa_entry {
-	u64 end: 1;
-	u64 rsvd0: 1;
-	u64 intr: 1;
-	u64 rsvd1: 1;
-	u64 stop: 1;
-	u64 rsvd2: 1;
-	u64 size: 4;
-	u64 rsvd3: 2;
-	u64 base: 36;
-	u64 rsvd4: 16;
-};
-
-struct pt_pmu {
-	struct pmu pmu;
-	u32 caps[8];
-	bool vmx;
-	bool branch_en_always_on;
-	long unsigned int max_nonturbo_ratio;
-	unsigned int tsc_art_num;
-	unsigned int tsc_art_den;
-};
-
-struct topa;
-
-struct pt_buffer {
-	struct list_head tables;
-	struct topa *first;
-	struct topa *last;
-	struct topa *cur;
-	unsigned int cur_idx;
-	size_t output_off;
-	long unsigned int nr_pages;
-	local_t data_size;
-	local64_t head;
-	bool snapshot;
-	bool single;
-	long int stop_pos;
-	long int intr_pos;
-	struct topa_entry *stop_te;
-	struct topa_entry *intr_te;
-	void **data_pages;
-};
-
-struct topa {
-	struct list_head list;
-	u64 offset;
-	size_t size;
-	int last;
-	unsigned int z_count;
-};
-
-struct pt_filter {
-	long unsigned int msr_a;
-	long unsigned int msr_b;
-	long unsigned int config;
-};
-
-struct pt_filters {
-	struct pt_filter filter[4];
-	unsigned int nr_filters;
-};
-
-struct pt {
-	struct perf_output_handle handle;
-	struct pt_filters filters;
-	int handle_nmi;
-	int vmx_on;
-	u64 output_base;
-	u64 output_mask;
-};
-
-struct pt_cap_desc {
-	const char *name;
-	u32 leaf;
-	u8 reg;
-	u32 mask;
-};
-
-struct pt_address_range {
-	long unsigned int msr_a;
-	long unsigned int msr_b;
-	unsigned int reg_off;
-};
-
-struct topa_page {
-	struct topa_entry table[507];
-	struct topa topa;
-};
-
-typedef void (*exitcall_t)();
-
-enum hrtimer_mode {
-	HRTIMER_MODE_ABS = 0,
-	HRTIMER_MODE_REL = 1,
-	HRTIMER_MODE_PINNED = 2,
-	HRTIMER_MODE_SOFT = 4,
-	HRTIMER_MODE_HARD = 8,
-	HRTIMER_MODE_ABS_PINNED = 2,
-	HRTIMER_MODE_REL_PINNED = 3,
-	HRTIMER_MODE_ABS_SOFT = 4,
-	HRTIMER_MODE_REL_SOFT = 5,
-	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
-	HRTIMER_MODE_REL_PINNED_SOFT = 7,
-	HRTIMER_MODE_ABS_HARD = 8,
-	HRTIMER_MODE_REL_HARD = 9,
-	HRTIMER_MODE_ABS_PINNED_HARD = 10,
-	HRTIMER_MODE_REL_PINNED_HARD = 11,
-};
-
-struct x86_cpu_id {
-	__u16 vendor;
-	__u16 family;
-	__u16 model;
-	__u16 feature;
-	kernel_ulong_t driver_data;
-};
-
-enum perf_rapl_events {
-	PERF_RAPL_PP0 = 0,
-	PERF_RAPL_PKG = 1,
-	PERF_RAPL_RAM = 2,
-	PERF_RAPL_PP1 = 3,
-	PERF_RAPL_PSYS = 4,
-	PERF_RAPL_MAX = 5,
-	NR_RAPL_DOMAINS = 5,
-};
-
-struct rapl_pmu {
-	raw_spinlock_t lock;
-	int n_active;
-	int cpu;
-	struct list_head active_list;
-	struct pmu *pmu;
-	ktime_t timer_interval;
-	struct hrtimer hrtimer;
-};
-
-struct rapl_pmus {
-	struct pmu pmu;
-	unsigned int maxdie;
-	struct rapl_pmu *pmus[0];
-};
-
-struct rapl_model {
-	long unsigned int events;
-	bool apply_quirk;
-};
-
-struct acpi_device;
-
-struct pci_sysdata {
-	int domain;
-	int node;
-	struct acpi_device *companion;
-	void *iommu;
-	void *fwnode;
-};
-
-struct pci_extra_dev {
-	struct pci_dev *dev[4];
-};
-
-struct intel_uncore_pmu;
-
-struct intel_uncore_ops;
-
-struct uncore_event_desc;
-
-struct freerunning_counters;
-
-struct intel_uncore_type {
-	const char *name;
-	int num_counters;
-	int num_boxes;
-	int perf_ctr_bits;
-	int fixed_ctr_bits;
-	int num_freerunning_types;
-	unsigned int perf_ctr;
-	unsigned int event_ctl;
-	unsigned int event_mask;
-	unsigned int event_mask_ext;
-	unsigned int fixed_ctr;
-	unsigned int fixed_ctl;
-	unsigned int box_ctl;
-	union {
-		unsigned int msr_offset;
-		unsigned int mmio_offset;
-	};
-	unsigned int num_shared_regs: 8;
-	unsigned int single_fixed: 1;
-	unsigned int pair_ctr_ctl: 1;
-	unsigned int *msr_offsets;
-	struct event_constraint unconstrainted;
-	struct event_constraint *constraints;
-	struct intel_uncore_pmu *pmus;
-	struct intel_uncore_ops *ops;
-	struct uncore_event_desc *event_descs;
-	struct freerunning_counters *freerunning;
-	const struct attribute_group *attr_groups[4];
-	struct pmu *pmu;
-};
-
-struct intel_uncore_box;
-
-struct intel_uncore_pmu {
-	struct pmu pmu;
-	char name[32];
-	int pmu_idx;
-	int func_id;
-	bool registered;
-	atomic_t activeboxes;
-	struct intel_uncore_type *type;
-	struct intel_uncore_box **boxes;
-};
-
-struct intel_uncore_ops {
-	void (*init_box)(struct intel_uncore_box *);
-	void (*exit_box)(struct intel_uncore_box *);
-	void (*disable_box)(struct intel_uncore_box *);
-	void (*enable_box)(struct intel_uncore_box *);
-	void (*disable_event)(struct intel_uncore_box *, struct perf_event *);
-	void (*enable_event)(struct intel_uncore_box *, struct perf_event *);
-	u64 (*read_counter)(struct intel_uncore_box *, struct perf_event *);
-	int (*hw_config)(struct intel_uncore_box *, struct perf_event *);
-	struct event_constraint * (*get_constraint)(struct intel_uncore_box *, struct perf_event *);
-	void (*put_constraint)(struct intel_uncore_box *, struct perf_event *);
-};
-
-struct uncore_event_desc {
-	struct kobj_attribute attr;
-	const char *config;
-};
-
-struct freerunning_counters {
-	unsigned int counter_base;
-	unsigned int counter_offset;
-	unsigned int box_offset;
-	unsigned int num_counters;
-	unsigned int bits;
-};
-
-struct intel_uncore_extra_reg {
-	raw_spinlock_t lock;
-	u64 config;
-	u64 config1;
-	u64 config2;
-	atomic_t ref;
-};
-
-struct intel_uncore_box {
-	int pci_phys_id;
-	int dieid;
-	int n_active;
-	int n_events;
-	int cpu;
-	long unsigned int flags;
-	atomic_t refcnt;
-	struct perf_event *events[10];
-	struct perf_event *event_list[10];
-	struct event_constraint *event_constraint[10];
-	long unsigned int active_mask[1];
-	u64 tags[10];
-	struct pci_dev *pci_dev;
-	struct intel_uncore_pmu *pmu;
-	u64 hrtimer_duration;
-	struct hrtimer hrtimer;
-	struct list_head list;
-	struct list_head active_list;
-	void *io_addr;
-	struct intel_uncore_extra_reg shared_regs[0];
-};
-
-struct pci2phy_map {
-	struct list_head list;
-	int segment;
-	int pbus_to_physid[256];
-};
-
-struct intel_uncore_init_fun {
-	void (*cpu_init)();
-	int (*pci_init)();
-	void (*mmio_init)();
-};
-
-enum {
-	EXTRA_REG_NHMEX_M_FILTER = 0,
-	EXTRA_REG_NHMEX_M_DSP = 1,
-	EXTRA_REG_NHMEX_M_ISS = 2,
-	EXTRA_REG_NHMEX_M_MAP = 3,
-	EXTRA_REG_NHMEX_M_MSC_THR = 4,
-	EXTRA_REG_NHMEX_M_PGT = 5,
-	EXTRA_REG_NHMEX_M_PLD = 6,
-	EXTRA_REG_NHMEX_M_ZDP_CTL_FVC = 7,
-};
-
-enum {
-	SNB_PCI_UNCORE_IMC = 0,
-};
-
-enum perf_snb_uncore_imc_freerunning_types {
-	SNB_PCI_UNCORE_IMC_DATA = 0,
-	SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX = 1,
-};
-
-struct imc_uncore_pci_dev {
-	__u32 pci_id;
-	struct pci_driver *driver;
-};
-
-enum {
-	SNBEP_PCI_QPI_PORT0_FILTER = 0,
-	SNBEP_PCI_QPI_PORT1_FILTER = 1,
-	BDX_PCI_QPI_PORT2_FILTER = 2,
-	HSWEP_PCI_PCU_3 = 3,
-};
-
-enum {
-	SNBEP_PCI_UNCORE_HA = 0,
-	SNBEP_PCI_UNCORE_IMC = 1,
-	SNBEP_PCI_UNCORE_QPI = 2,
-	SNBEP_PCI_UNCORE_R2PCIE = 3,
-	SNBEP_PCI_UNCORE_R3QPI = 4,
-};
-
-enum {
-	IVBEP_PCI_UNCORE_HA = 0,
-	IVBEP_PCI_UNCORE_IMC = 1,
-	IVBEP_PCI_UNCORE_IRP = 2,
-	IVBEP_PCI_UNCORE_QPI = 3,
-	IVBEP_PCI_UNCORE_R2PCIE = 4,
-	IVBEP_PCI_UNCORE_R3QPI = 5,
-};
-
-enum {
-	KNL_PCI_UNCORE_MC_UCLK = 0,
-	KNL_PCI_UNCORE_MC_DCLK = 1,
-	KNL_PCI_UNCORE_EDC_UCLK = 2,
-	KNL_PCI_UNCORE_EDC_ECLK = 3,
-	KNL_PCI_UNCORE_M2PCIE = 4,
-	KNL_PCI_UNCORE_IRP = 5,
-};
-
-enum {
-	HSWEP_PCI_UNCORE_HA = 0,
-	HSWEP_PCI_UNCORE_IMC = 1,
-	HSWEP_PCI_UNCORE_IRP = 2,
-	HSWEP_PCI_UNCORE_QPI = 3,
-	HSWEP_PCI_UNCORE_R2PCIE = 4,
-	HSWEP_PCI_UNCORE_R3QPI = 5,
-};
-
-enum {
-	BDX_PCI_UNCORE_HA = 0,
-	BDX_PCI_UNCORE_IMC = 1,
-	BDX_PCI_UNCORE_IRP = 2,
-	BDX_PCI_UNCORE_QPI = 3,
-	BDX_PCI_UNCORE_R2PCIE = 4,
-	BDX_PCI_UNCORE_R3QPI = 5,
-};
-
-enum perf_uncore_iio_freerunning_type_id {
-	SKX_IIO_MSR_IOCLK = 0,
-	SKX_IIO_MSR_BW = 1,
-	SKX_IIO_MSR_UTIL = 2,
-	SKX_IIO_FREERUNNING_TYPE_MAX = 3,
-};
-
-enum {
-	SKX_PCI_UNCORE_IMC = 0,
-	SKX_PCI_UNCORE_M2M = 1,
-	SKX_PCI_UNCORE_UPI = 2,
-	SKX_PCI_UNCORE_M2PCIE = 3,
-	SKX_PCI_UNCORE_M3UPI = 4,
-};
-
-enum perf_uncore_snr_iio_freerunning_type_id {
-	SNR_IIO_MSR_IOCLK = 0,
-	SNR_IIO_MSR_BW_IN = 1,
-	SNR_IIO_FREERUNNING_TYPE_MAX = 2,
-};
-
-enum {
-	SNR_PCI_UNCORE_M2M = 0,
-};
-
-enum perf_uncore_snr_imc_freerunning_type_id {
-	SNR_IMC_DCLK = 0,
-	SNR_IMC_DDR = 1,
-	SNR_IMC_FREERUNNING_TYPE_MAX = 2,
-};
-
-struct cstate_model {
-	long unsigned int core_events;
-	long unsigned int pkg_events;
-	long unsigned int quirks;
-};
-
-enum perf_cstate_core_events {
-	PERF_CSTATE_CORE_C1_RES = 0,
-	PERF_CSTATE_CORE_C3_RES = 1,
-	PERF_CSTATE_CORE_C6_RES = 2,
-	PERF_CSTATE_CORE_C7_RES = 3,
-	PERF_CSTATE_CORE_EVENT_MAX = 4,
-};
-
-enum perf_cstate_pkg_events {
-	PERF_CSTATE_PKG_C2_RES = 0,
-	PERF_CSTATE_PKG_C3_RES = 1,
-	PERF_CSTATE_PKG_C6_RES = 2,
-	PERF_CSTATE_PKG_C7_RES = 3,
-	PERF_CSTATE_PKG_C8_RES = 4,
-	PERF_CSTATE_PKG_C9_RES = 5,
-	PERF_CSTATE_PKG_C10_RES = 6,
-	PERF_CSTATE_PKG_EVENT_MAX = 7,
-};
-
-struct trampoline_header {
-	u64 start;
-	u64 efer;
-	u32 cr4;
-	u32 flags;
-};
-
-enum xfeature {
-	XFEATURE_FP = 0,
-	XFEATURE_SSE = 1,
-	XFEATURE_YMM = 2,
-	XFEATURE_BNDREGS = 3,
-	XFEATURE_BNDCSR = 4,
-	XFEATURE_OPMASK = 5,
-	XFEATURE_ZMM_Hi256 = 6,
-	XFEATURE_Hi16_ZMM = 7,
-	XFEATURE_PT_UNIMPLEMENTED_SO_FAR = 8,
-	XFEATURE_PKRU = 9,
-	XFEATURE_MAX = 10,
-};
-
-struct pkru_state {
-	u32 pkru;
-	u32 pad;
-};
-
-enum show_regs_mode {
-	SHOW_REGS_SHORT = 0,
-	SHOW_REGS_USER = 1,
-	SHOW_REGS_ALL = 2,
-};
-
-struct shared_info;
-
-struct start_info;
-
-enum which_selector {
-	FS = 0,
-	GS = 1,
-};
-
-typedef struct task_struct *pto_T_____3;
-
-typedef u64 pto_T_____4;
-
-struct sigcontext_64 {
-	__u64 r8;
-	__u64 r9;
-	__u64 r10;
-	__u64 r11;
-	__u64 r12;
-	__u64 r13;
-	__u64 r14;
-	__u64 r15;
-	__u64 di;
-	__u64 si;
-	__u64 bp;
-	__u64 bx;
-	__u64 dx;
-	__u64 ax;
-	__u64 cx;
-	__u64 sp;
-	__u64 ip;
-	__u64 flags;
-	__u16 cs;
-	__u16 gs;
-	__u16 fs;
-	__u16 ss;
-	__u64 err;
-	__u64 trapno;
-	__u64 oldmask;
-	__u64 cr2;
-	__u64 fpstate;
-	__u64 reserved1[8];
-};
-
-struct sigaltstack {
-	void *ss_sp;
-	int ss_flags;
-	size_t ss_size;
-};
-
-typedef struct sigaltstack stack_t;
-
-struct siginfo {
-	union {
-		struct {
-			int si_signo;
-			int si_errno;
-			int si_code;
-			union __sifields _sifields;
-		};
-		int _si_pad[32];
-	};
-};
-
-struct ucontext {
-	long unsigned int uc_flags;
-	struct ucontext *uc_link;
-	stack_t uc_stack;
-	struct sigcontext_64 uc_mcontext;
-	sigset_t uc_sigmask;
-};
-
-typedef u32 compat_sigset_word;
-
-typedef struct {
-	compat_sigset_word sig[2];
-} compat_sigset_t;
-
-struct mce {
-	__u64 status;
-	__u64 misc;
-	__u64 addr;
-	__u64 mcgstatus;
-	__u64 ip;
-	__u64 tsc;
-	__u64 time;
-	__u8 cpuvendor;
-	__u8 inject_flags;
-	__u8 severity;
-	__u8 pad;
-	__u32 cpuid;
-	__u8 cs;
-	__u8 bank;
-	__u8 cpu;
-	__u8 finished;
-	__u32 extcpu;
-	__u32 socketid;
-	__u32 apicid;
-	__u64 mcgcap;
-	__u64 synd;
-	__u64 ipid;
-	__u64 ppin;
-	__u32 microcode;
-};
-
-typedef long unsigned int mce_banks_t[1];
-
-struct smca_hwid {
-	unsigned int bank_type;
-	u32 hwid_mcatype;
-	u32 xec_bitmap;
-	u8 count;
-};
-
-struct smca_bank {
-	struct smca_hwid *hwid;
-	u32 id;
-	u8 sysfs_id;
-};
-
-struct kernel_vm86_regs {
-	struct pt_regs pt;
-	short unsigned int es;
-	short unsigned int __esh;
-	short unsigned int ds;
-	short unsigned int __dsh;
-	short unsigned int fs;
-	short unsigned int __fsh;
-	short unsigned int gs;
-	short unsigned int __gsh;
-};
-
-struct rt_sigframe {
-	char *pretcode;
-	struct ucontext uc;
-	struct siginfo info;
-};
-
-typedef struct siginfo siginfo_t;
-
-typedef s32 compat_clock_t;
-
-typedef s32 compat_pid_t;
-
-typedef s32 compat_timer_t;
-
-typedef s32 compat_int_t;
-
-typedef u32 __compat_uid32_t;
-
-union compat_sigval {
-	compat_int_t sival_int;
-	compat_uptr_t sival_ptr;
-};
-
-typedef union compat_sigval compat_sigval_t;
-
-struct compat_siginfo {
-	int si_signo;
-	int si_errno;
-	int si_code;
-	union {
-		int _pad[29];
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-		} _kill;
-		struct {
-			compat_timer_t _tid;
-			int _overrun;
-			compat_sigval_t _sigval;
-		} _timer;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			compat_sigval_t _sigval;
-		} _rt;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			int _status;
-			compat_clock_t _utime;
-			compat_clock_t _stime;
-		} _sigchld;
-		struct {
-			compat_uptr_t _addr;
-			union {
-				short int _addr_lsb;
-				struct {
-					char _dummy_bnd[4];
-					compat_uptr_t _lower;
-					compat_uptr_t _upper;
-				} _addr_bnd;
-				struct {
-					char _dummy_pkey[4];
-					u32 _pkey;
-				} _addr_pkey;
-			};
-		} _sigfault;
-		struct {
-			compat_long_t _band;
-			int _fd;
-		} _sigpoll;
-		struct {
-			compat_uptr_t _call_addr;
-			int _syscall;
-			unsigned int _arch;
-		} _sigsys;
-	} _sifields;
-};
-
-typedef struct compat_siginfo compat_siginfo_t;
-
-enum bug_trap_type {
-	BUG_TRAP_TYPE_NONE = 0,
-	BUG_TRAP_TYPE_WARN = 1,
-	BUG_TRAP_TYPE_BUG = 2,
-};
-
-struct mpx_bndcsr {
-	u64 bndcfgu;
-	u64 bndstatus;
-};
-
-enum die_val {
-	DIE_OOPS = 1,
-	DIE_INT3 = 2,
-	DIE_DEBUG = 3,
-	DIE_PANIC = 4,
-	DIE_NMI = 5,
-	DIE_DIE = 6,
-	DIE_KERNELDEBUG = 7,
-	DIE_TRAP = 8,
-	DIE_GPF = 9,
-	DIE_CALL = 10,
-	DIE_PAGE_FAULT = 11,
-	DIE_NMIUNKNOWN = 12,
-};
-
-struct mpx_fault_info {
-	void *addr;
-	void *lower;
-	void *upper;
-};
-
-struct bad_iret_stack {
-	void *error_entry_ret;
-	struct pt_regs regs;
-};
-
-enum {
-	GATE_INTERRUPT = 14,
-	GATE_TRAP = 15,
-	GATE_CALL = 12,
-	GATE_TASK = 5,
-};
-
-struct irq_desc;
-
-typedef struct irq_desc *vector_irq_t[256];
-
-struct idt_data {
-	unsigned int vector;
-	unsigned int segment;
-	struct idt_bits bits;
-	const void *addr;
-};
-
-enum irqreturn {
-	IRQ_NONE = 0,
-	IRQ_HANDLED = 1,
-	IRQ_WAKE_THREAD = 2,
-};
-
-typedef enum irqreturn irqreturn_t;
-
-typedef irqreturn_t (*irq_handler_t)(int, void *);
-
-struct irqaction {
-	irq_handler_t handler;
-	void *dev_id;
-	void *percpu_dev_id;
-	struct irqaction *next;
-	irq_handler_t thread_fn;
-	struct task_struct *thread;
-	struct irqaction *secondary;
-	unsigned int irq;
-	unsigned int flags;
-	long unsigned int thread_flags;
-	long unsigned int thread_mask;
-	const char *name;
-	struct proc_dir_entry *dir;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct irq_affinity_notify {
-	unsigned int irq;
-	struct kref kref;
-	struct work_struct work;
-	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
-	void (*release)(struct kref *);
-};
-
-enum irqchip_irq_state {
-	IRQCHIP_STATE_PENDING = 0,
-	IRQCHIP_STATE_ACTIVE = 1,
-	IRQCHIP_STATE_MASKED = 2,
-	IRQCHIP_STATE_LINE_LEVEL = 3,
-};
-
-struct irq_desc___2;
-
-typedef void (*irq_flow_handler_t)(struct irq_desc___2 *);
-
-struct msi_desc;
-
-struct irq_common_data {
-	unsigned int state_use_accessors;
-	unsigned int node;
-	void *handler_data;
-	struct msi_desc *msi_desc;
-	cpumask_var_t affinity;
-	cpumask_var_t effective_affinity;
-};
-
-struct irq_chip;
-
-struct irq_data {
-	u32 mask;
-	unsigned int irq;
-	long unsigned int hwirq;
-	struct irq_common_data *common;
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	struct irq_data *parent_data;
-	void *chip_data;
-};
-
-struct irq_desc___2 {
-	struct irq_common_data irq_common_data;
-	struct irq_data irq_data;
-	unsigned int *kstat_irqs;
-	irq_flow_handler_t handle_irq;
-	struct irqaction *action;
-	unsigned int status_use_accessors;
-	unsigned int core_internal_state__do_not_mess_with_it;
-	unsigned int depth;
-	unsigned int wake_depth;
-	unsigned int tot_count;
-	unsigned int irq_count;
-	long unsigned int last_unhandled;
-	unsigned int irqs_unhandled;
-	atomic_t threads_handled;
-	int threads_handled_last;
-	raw_spinlock_t lock;
-	struct cpumask *percpu_enabled;
-	const struct cpumask *percpu_affinity;
-	const struct cpumask *affinity_hint;
-	struct irq_affinity_notify *affinity_notify;
-	cpumask_var_t pending_mask;
-	long unsigned int threads_oneshot;
-	atomic_t threads_active;
-	wait_queue_head_t wait_for_threads;
-	unsigned int nr_actions;
-	unsigned int no_suspend_depth;
-	unsigned int cond_suspend_depth;
-	unsigned int force_resume_depth;
-	struct proc_dir_entry *dir;
-	struct callback_head rcu;
-	struct kobject kobj;
-	struct mutex request_mutex;
-	int parent_irq;
-	struct module *owner;
-	const char *name;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct msi_msg;
-
-struct irq_chip {
-	struct device *parent_device;
-	const char *name;
-	unsigned int (*irq_startup)(struct irq_data *);
-	void (*irq_shutdown)(struct irq_data *);
-	void (*irq_enable)(struct irq_data *);
-	void (*irq_disable)(struct irq_data *);
-	void (*irq_ack)(struct irq_data *);
-	void (*irq_mask)(struct irq_data *);
-	void (*irq_mask_ack)(struct irq_data *);
-	void (*irq_unmask)(struct irq_data *);
-	void (*irq_eoi)(struct irq_data *);
-	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
-	int (*irq_retrigger)(struct irq_data *);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	void (*irq_bus_lock)(struct irq_data *);
-	void (*irq_bus_sync_unlock)(struct irq_data *);
-	void (*irq_cpu_online)(struct irq_data *);
-	void (*irq_cpu_offline)(struct irq_data *);
-	void (*irq_suspend)(struct irq_data *);
-	void (*irq_resume)(struct irq_data *);
-	void (*irq_pm_shutdown)(struct irq_data *);
-	void (*irq_calc_mask)(struct irq_data *);
-	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
-	int (*irq_request_resources)(struct irq_data *);
-	void (*irq_release_resources)(struct irq_data *);
-	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
-	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
-	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
-	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
-	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
-	void (*ipi_send_single)(struct irq_data *, unsigned int);
-	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
-	int (*irq_nmi_setup)(struct irq_data *);
-	void (*irq_nmi_teardown)(struct irq_data *);
-	long unsigned int flags;
-};
-
-typedef struct irq_desc___2 *vector_irq_t___2[256];
-
-struct trace_event_raw_x86_irq_vector {
-	struct trace_entry ent;
-	int vector;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_config {
-	struct trace_entry ent;
-	unsigned int irq;
-	unsigned int vector;
-	unsigned int cpu;
-	unsigned int apicdest;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_mod {
-	struct trace_entry ent;
-	unsigned int irq;
-	unsigned int vector;
-	unsigned int cpu;
-	unsigned int prev_vector;
-	unsigned int prev_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_reserve {
-	struct trace_entry ent;
-	unsigned int irq;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_alloc {
-	struct trace_entry ent;
-	unsigned int irq;
-	unsigned int vector;
-	bool reserved;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_alloc_managed {
-	struct trace_entry ent;
-	unsigned int irq;
-	unsigned int vector;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_activate {
-	struct trace_entry ent;
-	unsigned int irq;
-	bool is_managed;
-	bool can_reserve;
-	bool reserve;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_teardown {
-	struct trace_entry ent;
-	unsigned int irq;
-	bool is_managed;
-	bool has_reserved;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_setup {
-	struct trace_entry ent;
-	unsigned int irq;
-	bool is_legacy;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_vector_free_moved {
-	struct trace_entry ent;
-	unsigned int irq;
-	unsigned int cpu;
-	unsigned int vector;
-	bool is_managed;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_x86_irq_vector {};
-
-struct trace_event_data_offsets_vector_config {};
-
-struct trace_event_data_offsets_vector_mod {};
-
-struct trace_event_data_offsets_vector_reserve {};
-
-struct trace_event_data_offsets_vector_alloc {};
-
-struct trace_event_data_offsets_vector_alloc_managed {};
-
-struct trace_event_data_offsets_vector_activate {};
-
-struct trace_event_data_offsets_vector_teardown {};
-
-struct trace_event_data_offsets_vector_setup {};
-
-struct trace_event_data_offsets_vector_free_moved {};
-
-typedef void (*btf_trace_local_timer_entry)(void *, int);
-
-typedef void (*btf_trace_local_timer_exit)(void *, int);
-
-typedef void (*btf_trace_spurious_apic_entry)(void *, int);
-
-typedef void (*btf_trace_spurious_apic_exit)(void *, int);
-
-typedef void (*btf_trace_error_apic_entry)(void *, int);
-
-typedef void (*btf_trace_error_apic_exit)(void *, int);
-
-typedef void (*btf_trace_x86_platform_ipi_entry)(void *, int);
-
-typedef void (*btf_trace_x86_platform_ipi_exit)(void *, int);
-
-typedef void (*btf_trace_irq_work_entry)(void *, int);
-
-typedef void (*btf_trace_irq_work_exit)(void *, int);
-
-typedef void (*btf_trace_reschedule_entry)(void *, int);
-
-typedef void (*btf_trace_reschedule_exit)(void *, int);
-
-typedef void (*btf_trace_call_function_entry)(void *, int);
-
-typedef void (*btf_trace_call_function_exit)(void *, int);
-
-typedef void (*btf_trace_call_function_single_entry)(void *, int);
-
-typedef void (*btf_trace_call_function_single_exit)(void *, int);
-
-typedef void (*btf_trace_threshold_apic_entry)(void *, int);
-
-typedef void (*btf_trace_threshold_apic_exit)(void *, int);
-
-typedef void (*btf_trace_deferred_error_apic_entry)(void *, int);
-
-typedef void (*btf_trace_deferred_error_apic_exit)(void *, int);
-
-typedef void (*btf_trace_thermal_apic_entry)(void *, int);
-
-typedef void (*btf_trace_thermal_apic_exit)(void *, int);
-
-typedef void (*btf_trace_vector_config)(void *, unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_vector_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_vector_clear)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_vector_reserve_managed)(void *, unsigned int, int);
-
-typedef void (*btf_trace_vector_reserve)(void *, unsigned int, int);
-
-typedef void (*btf_trace_vector_alloc)(void *, unsigned int, unsigned int, bool, int);
-
-typedef void (*btf_trace_vector_alloc_managed)(void *, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_vector_activate)(void *, unsigned int, bool, bool, bool);
-
-typedef void (*btf_trace_vector_deactivate)(void *, unsigned int, bool, bool, bool);
-
-typedef void (*btf_trace_vector_teardown)(void *, unsigned int, bool, bool);
-
-typedef void (*btf_trace_vector_setup)(void *, unsigned int, bool, int);
-
-typedef void (*btf_trace_vector_free_moved)(void *, unsigned int, unsigned int, unsigned int, bool);
-
-typedef struct irq_desc___2 *pto_T_____5;
-
-typedef struct pt_regs *pto_T_____6;
-
-struct estack_pages {
-	u32 offs;
-	u16 size;
-	u16 type;
-};
-
-struct arch_clocksource_data {
-	int vclock_mode;
-};
-
-struct clocksource {
-	u64 (*read)(struct clocksource *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	u64 max_idle_ns;
-	u32 maxadj;
-	struct arch_clocksource_data archdata;
-	u64 max_cycles;
-	const char *name;
-	struct list_head list;
-	int rating;
-	int (*enable)(struct clocksource *);
-	void (*disable)(struct clocksource *);
-	long unsigned int flags;
-	void (*suspend)(struct clocksource *);
-	void (*resume)(struct clocksource *);
-	void (*mark_unstable)(struct clocksource *);
-	void (*tick_stable)(struct clocksource *);
-	struct list_head wd_list;
-	u64 cs_last;
-	u64 wd_last;
-	struct module *owner;
-};
-
-enum clock_event_state {
-	CLOCK_EVT_STATE_DETACHED = 0,
-	CLOCK_EVT_STATE_SHUTDOWN = 1,
-	CLOCK_EVT_STATE_PERIODIC = 2,
-	CLOCK_EVT_STATE_ONESHOT = 3,
-	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
-};
-
-struct clock_event_device {
-	void (*event_handler)(struct clock_event_device *);
-	int (*set_next_event)(long unsigned int, struct clock_event_device *);
-	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
-	ktime_t next_event;
-	u64 max_delta_ns;
-	u64 min_delta_ns;
-	u32 mult;
-	u32 shift;
-	enum clock_event_state state_use_accessors;
-	unsigned int features;
-	long unsigned int retries;
-	int (*set_state_periodic)(struct clock_event_device *);
-	int (*set_state_oneshot)(struct clock_event_device *);
-	int (*set_state_oneshot_stopped)(struct clock_event_device *);
-	int (*set_state_shutdown)(struct clock_event_device *);
-	int (*tick_resume)(struct clock_event_device *);
-	void (*broadcast)(const struct cpumask *);
-	void (*suspend)(struct clock_event_device *);
-	void (*resume)(struct clock_event_device *);
-	long unsigned int min_delta_ticks;
-	long unsigned int max_delta_ticks;
-	const char *name;
-	int rating;
-	int irq;
-	int bound_on;
-	const struct cpumask *cpumask;
-	struct list_head list;
-	struct module *owner;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct irq_affinity_desc {
-	struct cpumask mask;
-	unsigned int is_managed: 1;
-};
-
-struct msi_msg {
-	u32 address_lo;
-	u32 address_hi;
-	u32 data;
-};
-
-struct platform_msi_priv_data;
-
-struct platform_msi_desc {
-	struct platform_msi_priv_data *msi_priv_data;
-	u16 msi_index;
-};
-
-struct fsl_mc_msi_desc {
-	u16 msi_index;
-};
-
-struct ti_sci_inta_msi_desc {
-	u16 dev_index;
-};
-
-struct msi_desc {
-	struct list_head list;
-	unsigned int irq;
-	unsigned int nvec_used;
-	struct device *dev;
-	struct msi_msg msg;
-	struct irq_affinity_desc *affinity;
-	const void *iommu_cookie;
-	void (*write_msi_msg)(struct msi_desc *, void *);
-	void *write_msi_msg_data;
-	union {
-		struct {
-			u32 masked;
-			struct {
-				u8 is_msix: 1;
-				u8 multiple: 3;
-				u8 multi_cap: 3;
-				u8 maskbit: 1;
-				u8 is_64: 1;
-				u8 is_virtual: 1;
-				u16 entry_nr;
-				unsigned int default_irq;
-			} msi_attrib;
-			union {
-				u8 mask_pos;
-				void *mask_base;
-			};
-		};
-		struct platform_msi_desc platform;
-		struct fsl_mc_msi_desc fsl_mc;
-		struct ti_sci_inta_msi_desc inta;
-	};
-};
-
-struct irq_chip_regs {
-	long unsigned int enable;
-	long unsigned int disable;
-	long unsigned int mask;
-	long unsigned int ack;
-	long unsigned int eoi;
-	long unsigned int type;
-	long unsigned int polarity;
-};
-
-struct irq_chip_type {
-	struct irq_chip chip;
-	struct irq_chip_regs regs;
-	irq_flow_handler_t handler;
-	u32 type;
-	u32 mask_cache_priv;
-	u32 *mask_cache;
-};
-
-struct irq_chip_generic {
-	raw_spinlock_t lock;
-	void *reg_base;
-	u32 (*reg_readl)(void *);
-	void (*reg_writel)(u32, void *);
-	void (*suspend)(struct irq_chip_generic *);
-	void (*resume)(struct irq_chip_generic *);
-	unsigned int irq_base;
-	unsigned int irq_cnt;
-	u32 mask_cache;
-	u32 type_cache;
-	u32 polarity_cache;
-	u32 wake_enabled;
-	u32 wake_active;
-	unsigned int num_ct;
-	void *private;
-	long unsigned int installed;
-	long unsigned int unused;
-	struct irq_domain *domain;
-	struct list_head list;
-	struct irq_chip_type chip_types[0];
-};
-
-enum irq_gc_flags {
-	IRQ_GC_INIT_MASK_CACHE = 1,
-	IRQ_GC_INIT_NESTED_LOCK = 2,
-	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
-	IRQ_GC_NO_MASK = 8,
-	IRQ_GC_BE_IO = 16,
-};
-
-struct irq_domain_chip_generic {
-	unsigned int irqs_per_chip;
-	unsigned int num_chips;
-	unsigned int irq_flags_to_clear;
-	unsigned int irq_flags_to_set;
-	enum irq_gc_flags gc_flags;
-	struct irq_chip_generic *gc[0];
-};
-
-struct legacy_pic {
-	int nr_legacy_irqs;
-	struct irq_chip *chip;
-	void (*mask)(unsigned int);
-	void (*unmask)(unsigned int);
-	void (*mask_all)();
-	void (*restore_mask)();
-	void (*init)(int);
-	int (*probe)();
-	int (*irq_pending)(unsigned int);
-	void (*make_irq)(unsigned int);
-};
-
-enum refcount_saturation_type {
-	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
-	REFCOUNT_ADD_OVF = 1,
-	REFCOUNT_ADD_UAF = 2,
-	REFCOUNT_SUB_UAF = 3,
-	REFCOUNT_DEC_LEAK = 4,
-};
-
-enum lockdown_reason {
-	LOCKDOWN_NONE = 0,
-	LOCKDOWN_MODULE_SIGNATURE = 1,
-	LOCKDOWN_DEV_MEM = 2,
-	LOCKDOWN_EFI_TEST = 3,
-	LOCKDOWN_KEXEC = 4,
-	LOCKDOWN_HIBERNATION = 5,
-	LOCKDOWN_PCI_ACCESS = 6,
-	LOCKDOWN_IOPORT = 7,
-	LOCKDOWN_MSR = 8,
-	LOCKDOWN_ACPI_TABLES = 9,
-	LOCKDOWN_PCMCIA_CIS = 10,
-	LOCKDOWN_TIOCSSERIAL = 11,
-	LOCKDOWN_MODULE_PARAMETERS = 12,
-	LOCKDOWN_MMIOTRACE = 13,
-	LOCKDOWN_DEBUGFS = 14,
-	LOCKDOWN_XMON_WR = 15,
-	LOCKDOWN_INTEGRITY_MAX = 16,
-	LOCKDOWN_KCORE = 17,
-	LOCKDOWN_KPROBES = 18,
-	LOCKDOWN_BPF_READ = 19,
-	LOCKDOWN_PERF = 20,
-	LOCKDOWN_TRACEFS = 21,
-	LOCKDOWN_XMON_RW = 22,
-	LOCKDOWN_CONFIDENTIALITY_MAX = 23,
-};
-
-enum lockdep_ok {
-	LOCKDEP_STILL_OK = 0,
-	LOCKDEP_NOW_UNRELIABLE = 1,
-};
-
-typedef long unsigned int uintptr_t;
-
-struct machine_ops {
-	void (*restart)(char *);
-	void (*halt)();
-	void (*power_off)();
-	void (*shutdown)();
-	void (*crash_shutdown)(struct pt_regs *);
-	void (*emergency_restart)();
-};
-
-struct trace_event_raw_nmi_handler {
-	struct trace_entry ent;
-	void *handler;
-	s64 delta_ns;
-	int handled;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nmi_handler {};
-
-typedef void (*btf_trace_nmi_handler)(void *, void *, s64, int);
-
-struct nmi_desc {
-	raw_spinlock_t lock;
-	struct list_head head;
-};
-
-struct nmi_stats {
-	unsigned int normal;
-	unsigned int unknown;
-	unsigned int external;
-	unsigned int swallow;
-};
-
-enum nmi_states {
-	NMI_NOT_RUNNING = 0,
-	NMI_EXECUTING = 1,
-	NMI_LATCHED = 2,
-};
-
-typedef enum nmi_states pto_T_____7;
-
-typedef bool pto_T_____8;
-
-enum {
-	DESC_TSS = 9,
-	DESC_LDT = 2,
-	DESCTYPE_S = 16,
-};
-
-struct ldttss_desc {
-	u16 limit0;
-	u16 base0;
-	u16 base1: 8;
-	u16 type: 5;
-	u16 dpl: 2;
-	u16 p: 1;
-	u16 limit1: 4;
-	u16 zero0: 3;
-	u16 g: 1;
-	u16 base2: 8;
-	u32 base3;
-	u32 zero1;
-};
-
-typedef struct ldttss_desc ldt_desc;
-
-struct user_desc {
-	unsigned int entry_number;
-	unsigned int base_addr;
-	unsigned int limit;
-	unsigned int seg_32bit: 1;
-	unsigned int contents: 2;
-	unsigned int read_exec_only: 1;
-	unsigned int limit_in_pages: 1;
-	unsigned int seg_not_present: 1;
-	unsigned int useable: 1;
-	unsigned int lm: 1;
-};
-
-struct mmu_gather_batch {
-	struct mmu_gather_batch *next;
-	unsigned int nr;
-	unsigned int max;
-	struct page *pages[0];
-};
-
-struct mmu_gather {
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int fullmm: 1;
-	unsigned int need_flush_all: 1;
-	unsigned int freed_tables: 1;
-	unsigned int cleared_ptes: 1;
-	unsigned int cleared_pmds: 1;
-	unsigned int cleared_puds: 1;
-	unsigned int cleared_p4ds: 1;
-	unsigned int vma_exec: 1;
-	unsigned int vma_huge: 1;
-	unsigned int batch_count;
-	struct mmu_gather_batch *active;
-	struct mmu_gather_batch local;
-	struct page *__pages[8];
-};
-
-struct setup_data {
-	__u64 next;
-	__u32 type;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct setup_indirect {
-	__u32 type;
-	__u32 reserved;
-	__u64 len;
-	__u64 addr;
-};
-
-struct plist_head {
-	struct list_head node_list;
-};
-
-enum pm_qos_type {
-	PM_QOS_UNITIALIZED = 0,
-	PM_QOS_MAX = 1,
-	PM_QOS_MIN = 2,
-	PM_QOS_SUM = 3,
-};
-
-struct pm_qos_constraints {
-	struct plist_head list;
-	s32 target_value;
-	s32 default_value;
-	s32 no_constraint_value;
-	enum pm_qos_type type;
-	struct blocking_notifier_head *notifiers;
-};
-
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
-};
-
-struct pm_qos_flags {
-	struct list_head list;
-	s32 effective_flags;
-};
-
-struct dev_pm_qos_request;
-
-struct dev_pm_qos {
-	struct pm_qos_constraints resume_latency;
-	struct pm_qos_constraints latency_tolerance;
-	struct freq_constraints freq;
-	struct pm_qos_flags flags;
-	struct dev_pm_qos_request *resume_latency_req;
-	struct dev_pm_qos_request *latency_tolerance_req;
-	struct dev_pm_qos_request *flags_req;
-};
-
-struct acpi_table_ibft {
-	struct acpi_table_header header;
-	u8 reserved[12];
-};
-
-enum efi_secureboot_mode {
-	efi_secureboot_mode_unset = 0,
-	efi_secureboot_mode_unknown = 1,
-	efi_secureboot_mode_disabled = 2,
-	efi_secureboot_mode_enabled = 3,
-};
-
-enum xen_domain_type {
-	XEN_NATIVE = 0,
-	XEN_PV_DOMAIN = 1,
-	XEN_HVM_DOMAIN = 2,
-};
-
-struct hvm_start_info {
-	uint32_t magic;
-	uint32_t version;
-	uint32_t flags;
-	uint32_t nr_modules;
-	uint64_t modlist_paddr;
-	uint64_t cmdline_paddr;
-	uint64_t rsdp_paddr;
-	uint64_t memmap_paddr;
-	uint32_t memmap_entries;
-	uint32_t reserved;
-};
-
-struct pm_qos_flags_request {
-	struct list_head node;
-	s32 flags;
-};
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX = 2,
-};
-
-struct freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
-	DEV_PM_QOS_MIN_FREQUENCY = 3,
-	DEV_PM_QOS_MAX_FREQUENCY = 4,
-	DEV_PM_QOS_FLAGS = 5,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-		struct freq_qos_request freq;
-	} data;
-	struct device *dev;
-};
-
-enum cpufreq_table_sorting {
-	CPUFREQ_TABLE_UNSORTED = 0,
-	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
-	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
-};
-
-struct cpufreq_cpuinfo {
-	unsigned int max_freq;
-	unsigned int min_freq;
-	unsigned int transition_latency;
-};
-
-struct cpufreq_stats;
-
-struct clk;
-
-struct cpufreq_governor;
-
-struct cpufreq_frequency_table;
-
-struct thermal_cooling_device;
-
-struct cpufreq_policy {
-	cpumask_var_t cpus;
-	cpumask_var_t related_cpus;
-	cpumask_var_t real_cpus;
-	unsigned int shared_type;
-	unsigned int cpu;
-	struct clk *clk;
-	struct cpufreq_cpuinfo cpuinfo;
-	unsigned int min;
-	unsigned int max;
-	unsigned int cur;
-	unsigned int restore_freq;
-	unsigned int suspend_freq;
-	unsigned int policy;
-	unsigned int last_policy;
-	struct cpufreq_governor *governor;
-	void *governor_data;
-	char last_governor[16];
-	struct work_struct update;
-	struct freq_constraints constraints;
-	struct freq_qos_request *min_freq_req;
-	struct freq_qos_request *max_freq_req;
-	struct cpufreq_frequency_table *freq_table;
-	enum cpufreq_table_sorting freq_table_sorted;
-	struct list_head policy_list;
-	struct kobject kobj;
-	struct completion kobj_unregister;
-	struct rw_semaphore rwsem;
-	bool fast_switch_possible;
-	bool fast_switch_enabled;
-	unsigned int transition_delay_us;
-	bool dvfs_possible_from_any_cpu;
-	unsigned int cached_target_freq;
-	int cached_resolved_idx;
-	bool transition_ongoing;
-	spinlock_t transition_lock;
-	wait_queue_head_t transition_wait;
-	struct task_struct *transition_task;
-	struct cpufreq_stats *stats;
-	void *driver_data;
-	struct thermal_cooling_device *cdev;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct cpufreq_governor {
-	char name[16];
-	int (*init)(struct cpufreq_policy *);
-	void (*exit)(struct cpufreq_policy *);
-	int (*start)(struct cpufreq_policy *);
-	void (*stop)(struct cpufreq_policy *);
-	void (*limits)(struct cpufreq_policy *);
-	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
-	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
-	bool dynamic_switching;
-	struct list_head governor_list;
-	struct module *owner;
-};
-
-struct cpufreq_frequency_table {
-	unsigned int flags;
-	unsigned int driver_data;
-	unsigned int frequency;
-};
-
-struct freq_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpufreq_policy *, char *);
-	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
-};
-
-struct efi_scratch {
-	u64 phys_stack;
-	struct mm_struct *prev_mm;
-};
-
-struct amd_nb_bus_dev_range {
-	u8 bus;
-	u8 dev_base;
-	u8 dev_limit;
-};
-
-struct msi_controller {
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct list_head list;
-	int (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);
-	int (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);
-	void (*teardown_irq)(struct msi_controller *, unsigned int);
-};
-
-struct pci_raw_ops {
-	int (*read)(unsigned int, unsigned int, unsigned int, int, int, u32 *);
-	int (*write)(unsigned int, unsigned int, unsigned int, int, int, u32);
-};
-
-struct clock_event_device___2;
-
-enum jump_label_type {
-	JUMP_LABEL_NOP = 0,
-	JUMP_LABEL_JMP = 1,
-};
-
-struct text_poke_loc {
-	void *addr;
-	int len;
-	s32 rel32;
-	u8 opcode;
-	const u8 text[5];
-};
-
-union jump_code_union {
-	char code[5];
-	struct {
-		char jump;
-		int offset;
-	} __attribute__((packed));
-};
-
-enum {
-	JL_STATE_START = 0,
-	JL_STATE_NO_UPDATE = 1,
-	JL_STATE_UPDATE = 2,
-};
-
-struct vm_unmapped_area_info {
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
-};
-
-enum align_flags {
-	ALIGN_VA_32 = 1,
-	ALIGN_VA_64 = 2,
-};
-
-enum {
-	MEMREMAP_WB = 1,
-	MEMREMAP_WT = 2,
-	MEMREMAP_WC = 4,
-	MEMREMAP_ENC = 8,
-	MEMREMAP_DEC = 16,
-};
-
-enum {
-	IORES_DESC_NONE = 0,
-	IORES_DESC_CRASH_KERNEL = 1,
-	IORES_DESC_ACPI_TABLES = 2,
-	IORES_DESC_ACPI_NV_STORAGE = 3,
-	IORES_DESC_PERSISTENT_MEMORY = 4,
-	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
-	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
-	IORES_DESC_RESERVED = 7,
-	IORES_DESC_SOFT_RESERVED = 8,
-};
-
-struct change_member {
-	struct e820_entry *entry;
-	long long unsigned int addr;
-};
-
-struct iommu_fwspec {
-	const struct iommu_ops *ops;
-	struct fwnode_handle *iommu_fwnode;
-	void *iommu_priv;
-	u32 flags;
-	unsigned int num_ids;
-	u32 ids[1];
-};
-
-struct iommu_fault_param;
-
-struct iommu_param {
-	struct mutex lock;
-	struct iommu_fault_param *fault_param;
-};
-
-struct of_phandle_args {
-	struct device_node *np;
-	int args_count;
-	uint32_t args[16];
-};
-
-struct iommu_fault_unrecoverable {
-	__u32 reason;
-	__u32 flags;
-	__u32 pasid;
-	__u32 perm;
-	__u64 addr;
-	__u64 fetch_addr;
-};
-
-struct iommu_fault_page_request {
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 perm;
-	__u64 addr;
-	__u64 private_data[2];
-};
-
-struct iommu_fault {
-	__u32 type;
-	__u32 padding;
-	union {
-		struct iommu_fault_unrecoverable event;
-		struct iommu_fault_page_request prm;
-		__u8 padding2[56];
-	};
-};
-
-struct iommu_page_response {
-	__u32 version;
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 code;
-};
-
-struct iommu_inv_addr_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-	__u64 addr;
-	__u64 granule_size;
-	__u64 nb_granules;
-};
-
-struct iommu_inv_pasid_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-};
-
-struct iommu_cache_invalidate_info {
-	__u32 version;
-	__u8 cache;
-	__u8 granularity;
-	__u8 padding[2];
-	union {
-		struct iommu_inv_pasid_info pasid_info;
-		struct iommu_inv_addr_info addr_info;
-	};
-};
-
-struct iommu_gpasid_bind_data_vtd {
-	__u64 flags;
-	__u32 pat;
-	__u32 emt;
-};
-
-struct iommu_gpasid_bind_data {
-	__u32 version;
-	__u32 format;
-	__u64 flags;
-	__u64 gpgd;
-	__u64 hpasid;
-	__u64 gpasid;
-	__u32 addr_width;
-	__u8 padding[12];
-	union {
-		struct iommu_gpasid_bind_data_vtd vtd;
-	};
-};
-
-typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
-
-struct iommu_domain_geometry {
-	dma_addr_t aperture_start;
-	dma_addr_t aperture_end;
-	bool force_aperture;
-};
-
-struct iommu_domain {
-	unsigned int type;
-	const struct iommu_ops *ops;
-	long unsigned int pgsize_bitmap;
-	iommu_fault_handler_t handler;
-	void *handler_token;
-	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
-};
-
-typedef int (*iommu_mm_exit_handler_t)(struct device *, struct iommu_sva *, void *);
-
-struct iommu_sva_ops;
-
-struct iommu_sva {
-	struct device *dev;
-	const struct iommu_sva_ops *ops;
-};
-
-typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
-
-enum iommu_resv_type {
-	IOMMU_RESV_DIRECT = 0,
-	IOMMU_RESV_DIRECT_RELAXABLE = 1,
-	IOMMU_RESV_RESERVED = 2,
-	IOMMU_RESV_MSI = 3,
-	IOMMU_RESV_SW_MSI = 4,
-};
-
-struct iommu_resv_region {
-	struct list_head list;
-	phys_addr_t start;
-	size_t length;
-	int prot;
-	enum iommu_resv_type type;
-};
-
-struct iommu_sva_ops {
-	iommu_mm_exit_handler_t mm_exit;
-};
-
-struct iommu_iotlb_gather {
-	long unsigned int start;
-	long unsigned int end;
-	size_t pgsize;
-};
-
-struct iommu_fault_event {
-	struct iommu_fault fault;
-	struct list_head list;
-};
-
-struct iommu_fault_param {
-	iommu_dev_fault_handler_t handler;
-	void *data;
-	struct list_head faults;
-	struct mutex lock;
-};
-
-struct iommu_table_entry {
-	initcall_t detect;
-	initcall_t depend;
-	void (*early_init)();
-	void (*late_init)();
-	int flags;
-};
-
-enum dmi_field {
-	DMI_NONE = 0,
-	DMI_BIOS_VENDOR = 1,
-	DMI_BIOS_VERSION = 2,
-	DMI_BIOS_DATE = 3,
-	DMI_SYS_VENDOR = 4,
-	DMI_PRODUCT_NAME = 5,
-	DMI_PRODUCT_VERSION = 6,
-	DMI_PRODUCT_SERIAL = 7,
-	DMI_PRODUCT_UUID = 8,
-	DMI_PRODUCT_SKU = 9,
-	DMI_PRODUCT_FAMILY = 10,
-	DMI_BOARD_VENDOR = 11,
-	DMI_BOARD_NAME = 12,
-	DMI_BOARD_VERSION = 13,
-	DMI_BOARD_SERIAL = 14,
-	DMI_BOARD_ASSET_TAG = 15,
-	DMI_CHASSIS_VENDOR = 16,
-	DMI_CHASSIS_TYPE = 17,
-	DMI_CHASSIS_VERSION = 18,
-	DMI_CHASSIS_SERIAL = 19,
-	DMI_CHASSIS_ASSET_TAG = 20,
-	DMI_STRING_MAX = 21,
-	DMI_OEM_STRING = 22,
-};
-
-enum {
-	NONE_FORCE_HPET_RESUME = 0,
-	OLD_ICH_FORCE_HPET_RESUME = 1,
-	ICH_FORCE_HPET_RESUME = 2,
-	VT8237_FORCE_HPET_RESUME = 3,
-	NVIDIA_FORCE_HPET_RESUME = 4,
-	ATI_FORCE_HPET_RESUME = 5,
-};
-
-struct cpu {
-	int node_id;
-	int hotpluggable;
-	struct device dev;
-};
-
-struct x86_cpu {
-	struct cpu cpu;
-};
-
-struct debugfs_blob_wrapper {
-	void *data;
-	long unsigned int size;
-};
-
-struct setup_data_node {
-	u64 paddr;
-	u32 type;
-	u32 len;
-};
-
-struct die_args {
-	struct pt_regs *regs;
-	const char *str;
-	long int err;
-	int trapnr;
-	int signr;
-};
-
-typedef struct {
-	struct mm_struct *mm;
-} temp_mm_state_t;
-
-struct smp_alt_module {
-	struct module *mod;
-	char *name;
-	const s32 *locks;
-	const s32 *locks_end;
-	u8 *text;
-	u8 *text_end;
-	struct list_head next;
-};
-
-struct bp_patching_desc {
-	struct text_poke_loc *vec;
-	int nr_entries;
-};
-
-struct paravirt_patch_site;
-
-struct user_i387_struct {
-	short unsigned int cwd;
-	short unsigned int swd;
-	short unsigned int twd;
-	short unsigned int fop;
-	__u64 rip;
-	__u64 rdp;
-	__u32 mxcsr;
-	__u32 mxcsr_mask;
-	__u32 st_space[32];
-	__u32 xmm_space[64];
-	__u32 padding[24];
-};
-
-struct user_regs_struct {
-	long unsigned int r15;
-	long unsigned int r14;
-	long unsigned int r13;
-	long unsigned int r12;
-	long unsigned int bp;
-	long unsigned int bx;
-	long unsigned int r11;
-	long unsigned int r10;
-	long unsigned int r9;
-	long unsigned int r8;
-	long unsigned int ax;
-	long unsigned int cx;
-	long unsigned int dx;
-	long unsigned int si;
-	long unsigned int di;
-	long unsigned int orig_ax;
-	long unsigned int ip;
-	long unsigned int cs;
-	long unsigned int flags;
-	long unsigned int sp;
-	long unsigned int ss;
-	long unsigned int fs_base;
-	long unsigned int gs_base;
-	long unsigned int ds;
-	long unsigned int es;
-	long unsigned int fs;
-	long unsigned int gs;
-};
-
-struct user {
-	struct user_regs_struct regs;
-	int u_fpvalid;
-	int pad0;
-	struct user_i387_struct i387;
-	long unsigned int u_tsize;
-	long unsigned int u_dsize;
-	long unsigned int u_ssize;
-	long unsigned int start_code;
-	long unsigned int start_stack;
-	long int signal;
-	int reserved;
-	int pad1;
-	long unsigned int u_ar0;
-	struct user_i387_struct *u_fpstate;
-	long unsigned int magic;
-	char u_comm[32];
-	long unsigned int u_debugreg[8];
-	long unsigned int error_code;
-	long unsigned int fault_address;
-};
-
-enum {
-	HW_BREAKPOINT_LEN_1 = 1,
-	HW_BREAKPOINT_LEN_2 = 2,
-	HW_BREAKPOINT_LEN_3 = 3,
-	HW_BREAKPOINT_LEN_4 = 4,
-	HW_BREAKPOINT_LEN_5 = 5,
-	HW_BREAKPOINT_LEN_6 = 6,
-	HW_BREAKPOINT_LEN_7 = 7,
-	HW_BREAKPOINT_LEN_8 = 8,
-};
-
-enum {
-	HW_BREAKPOINT_EMPTY = 0,
-	HW_BREAKPOINT_R = 1,
-	HW_BREAKPOINT_W = 2,
-	HW_BREAKPOINT_RW = 3,
-	HW_BREAKPOINT_X = 4,
-	HW_BREAKPOINT_INVALID = 7,
-};
-
-typedef unsigned int u_int;
-
-typedef long long unsigned int cycles_t;
-
-struct system_counterval_t {
-	u64 cycles;
-	struct clocksource *cs;
-};
-
-enum {
-	WORK_STRUCT_PENDING_BIT = 0,
-	WORK_STRUCT_DELAYED_BIT = 1,
-	WORK_STRUCT_PWQ_BIT = 2,
-	WORK_STRUCT_LINKED_BIT = 3,
-	WORK_STRUCT_COLOR_SHIFT = 4,
-	WORK_STRUCT_COLOR_BITS = 4,
-	WORK_STRUCT_PENDING = 1,
-	WORK_STRUCT_DELAYED = 2,
-	WORK_STRUCT_PWQ = 4,
-	WORK_STRUCT_LINKED = 8,
-	WORK_STRUCT_STATIC = 0,
-	WORK_NR_COLORS = 15,
-	WORK_NO_COLOR = 15,
-	WORK_CPU_UNBOUND = 64,
-	WORK_STRUCT_FLAG_BITS = 8,
-	WORK_OFFQ_FLAG_BASE = 4,
-	__WORK_OFFQ_CANCELING = 4,
-	WORK_OFFQ_CANCELING = 16,
-	WORK_OFFQ_FLAG_BITS = 1,
-	WORK_OFFQ_POOL_SHIFT = 5,
-	WORK_OFFQ_LEFT = 59,
-	WORK_OFFQ_POOL_BITS = 31,
-	WORK_OFFQ_POOL_NONE = 2147483647,
-	WORK_STRUCT_FLAG_MASK = 255,
-	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
-	WORK_STRUCT_NO_POOL = 4294967264,
-	WORK_BUSY_PENDING = 1,
-	WORK_BUSY_RUNNING = 2,
-	WORKER_DESC_LEN = 24,
-};
-
-struct cpufreq_freqs {
-	struct cpufreq_policy *policy;
-	unsigned int old;
-	unsigned int new;
-	u8 flags;
-};
-
-struct cyc2ns {
-	struct cyc2ns_data data[2];
-	seqcount_t seq;
-};
-
-struct freq_desc {
-	u8 msr_plat;
-	u32 freqs[9];
-};
-
-struct dmi_strmatch {
-	unsigned char slot: 7;
-	unsigned char exact_match: 1;
-	char substr[79];
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-struct pdev_archdata {};
-
-struct mfd_cell;
-
-struct platform_device_id;
-
-struct platform_device {
-	const char *name;
-	int id;
-	bool id_auto;
-	struct device dev;
-	u64 dma_mask;
-	u32 num_resources;
-	struct resource *resource;
-	const struct platform_device_id *id_entry;
-	char *driver_override;
-	struct mfd_cell *mfd_cell;
-	struct pdev_archdata archdata;
-};
-
-struct platform_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-struct rtc_time {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	int tm_year;
-	int tm_wday;
-	int tm_yday;
-	int tm_isdst;
-};
-
-struct pnp_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-};
-
-struct pnp_card_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-	struct {
-		__u8 id[8];
-	} devs[8];
-};
-
-struct pnp_protocol;
-
-struct pnp_id;
-
-struct pnp_card {
-	struct device dev;
-	unsigned char number;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head devices;
-	struct pnp_protocol *protocol;
-	struct pnp_id *id;
-	char name[50];
-	unsigned char pnpver;
-	unsigned char productver;
-	unsigned int serial;
-	unsigned char checksum;
-	struct proc_dir_entry *procdir;
-};
-
-struct pnp_dev;
-
-struct pnp_protocol {
-	struct list_head protocol_list;
-	char *name;
-	int (*get)(struct pnp_dev *);
-	int (*set)(struct pnp_dev *);
-	int (*disable)(struct pnp_dev *);
-	bool (*can_wakeup)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	unsigned char number;
-	struct device dev;
-	struct list_head cards;
-	struct list_head devices;
-};
-
-struct pnp_id {
-	char id[8];
-	struct pnp_id *next;
-};
-
-struct pnp_card_driver;
-
-struct pnp_card_link {
-	struct pnp_card *card;
-	struct pnp_card_driver *driver;
-	void *driver_data;
-	pm_message_t pm_state;
-};
-
-struct pnp_driver {
-	char *name;
-	const struct pnp_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
-	void (*remove)(struct pnp_dev *);
-	void (*shutdown)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	struct device_driver driver;
-};
-
-struct pnp_card_driver {
-	struct list_head global_list;
-	char *name;
-	const struct pnp_card_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
-	void (*remove)(struct pnp_card_link *);
-	int (*suspend)(struct pnp_card_link *, pm_message_t);
-	int (*resume)(struct pnp_card_link *);
-	struct pnp_driver link;
-};
-
-struct pnp_dev {
-	struct device dev;
-	u64 dma_mask;
-	unsigned int number;
-	int status;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head card_list;
-	struct list_head rdev_list;
-	struct pnp_protocol *protocol;
-	struct pnp_card *card;
-	struct pnp_driver *driver;
-	struct pnp_card_link *card_link;
-	struct pnp_id *id;
-	int active;
-	int capabilities;
-	unsigned int num_dependent_sets;
-	struct list_head resources;
-	struct list_head options;
-	char name[50];
-	int flags;
-	struct proc_dir_entry *procent;
-	void *data;
-};
-
-struct sfi_rtc_table_entry {
-	u64 phys_addr;
-	u32 irq;
-} __attribute__((packed));
-
-enum intel_mid_cpu_type {
-	INTEL_MID_CPU_CHIP_PENWELL = 2,
-	INTEL_MID_CPU_CHIP_CLOVERVIEW = 3,
-	INTEL_MID_CPU_CHIP_TANGIER = 4,
-};
-
-enum intel_mid_timer_options {
-	INTEL_MID_TIMER_DEFAULT = 0,
-	INTEL_MID_TIMER_APBT_ONLY = 1,
-	INTEL_MID_TIMER_LAPIC_APBT = 2,
-};
-
-typedef struct ldttss_desc tss_desc;
-
-enum idle_boot_override {
-	IDLE_NO_OVERRIDE = 0,
-	IDLE_HALT = 1,
-	IDLE_NOMWAIT = 2,
-	IDLE_POLL = 3,
-};
-
-enum tick_broadcast_mode {
-	TICK_BROADCAST_OFF = 0,
-	TICK_BROADCAST_ON = 1,
-	TICK_BROADCAST_FORCE = 2,
-};
-
-enum tick_broadcast_state {
-	TICK_BROADCAST_EXIT = 0,
-	TICK_BROADCAST_ENTER = 1,
-};
-
-struct cpuidle_state_usage {
-	long long unsigned int disable;
-	long long unsigned int usage;
-	u64 time_ns;
-	long long unsigned int above;
-	long long unsigned int below;
-	long long unsigned int s2idle_usage;
-	long long unsigned int s2idle_time;
-};
-
-struct cpuidle_driver_kobj;
-
-struct cpuidle_state_kobj;
-
-struct cpuidle_device_kobj;
-
-struct cpuidle_device {
-	unsigned int registered: 1;
-	unsigned int enabled: 1;
-	unsigned int poll_time_limit: 1;
-	unsigned int cpu;
-	ktime_t next_hrtimer;
-	int last_state_idx;
-	u64 last_residency_ns;
-	u64 poll_limit_ns;
-	u64 forced_idle_latency_limit_ns;
-	struct cpuidle_state_usage states_usage[10];
-	struct cpuidle_state_kobj *kobjs[10];
-	struct cpuidle_driver_kobj *kobj_driver;
-	struct cpuidle_device_kobj *kobj_dev;
-	struct list_head device_list;
-};
-
-struct inactive_task_frame {
-	long unsigned int r15;
-	long unsigned int r14;
-	long unsigned int r13;
-	long unsigned int r12;
-	long unsigned int bx;
-	long unsigned int bp;
-	long unsigned int ret_addr;
-};
-
-struct fork_frame {
-	struct inactive_task_frame frame;
-	struct pt_regs regs;
-};
-
-struct ssb_state {
-	struct ssb_state *shared_state;
-	raw_spinlock_t lock;
-	unsigned int disable_state;
-	long unsigned int local_state;
-};
-
-struct trace_event_raw_x86_fpu {
-	struct trace_entry ent;
-	struct fpu *fpu;
-	bool load_fpu;
-	u64 xfeatures;
-	u64 xcomp_bv;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_x86_fpu {};
-
-typedef void (*btf_trace_x86_fpu_before_save)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_after_save)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_before_restore)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_after_restore)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_regs_activated)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_regs_deactivated)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_init_state)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_dropped)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_copy_src)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_copy_dst)(void *, struct fpu *);
-
-typedef void (*btf_trace_x86_fpu_xstate_check_failed)(void *, struct fpu *);
-
-typedef struct fpu *pto_T_____9;
-
-struct _fpreg {
-	__u16 significand[4];
-	__u16 exponent;
-};
-
-struct _fpxreg {
-	__u16 significand[4];
-	__u16 exponent;
-	__u16 padding[3];
-};
-
-struct user_i387_ia32_struct {
-	u32 cwd;
-	u32 swd;
-	u32 twd;
-	u32 fip;
-	u32 fcs;
-	u32 foo;
-	u32 fos;
-	u32 st_space[20];
-};
-
-struct user_regset;
-
-typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
-
-typedef int user_regset_get_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, void *, void *);
-
-typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
-
-typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
-
-typedef unsigned int user_regset_get_size_fn(struct task_struct *, const struct user_regset *);
-
-struct user_regset {
-	user_regset_get_fn *get;
-	user_regset_set_fn *set;
-	user_regset_active_fn *active;
-	user_regset_writeback_fn *writeback;
-	user_regset_get_size_fn *get_size;
-	unsigned int n;
-	unsigned int size;
-	unsigned int align;
-	unsigned int bias;
-	unsigned int core_note_type;
-};
-
-struct _fpx_sw_bytes {
-	__u32 magic1;
-	__u32 extended_size;
-	__u64 xfeatures;
-	__u32 xstate_size;
-	__u32 padding[7];
-};
-
-struct _xmmreg {
-	__u32 element[4];
-};
-
-struct _fpstate_32 {
-	__u32 cw;
-	__u32 sw;
-	__u32 tag;
-	__u32 ipoff;
-	__u32 cssel;
-	__u32 dataoff;
-	__u32 datasel;
-	struct _fpreg _st[8];
-	__u16 status;
-	__u16 magic;
-	__u32 _fxsr_env[6];
-	__u32 mxcsr;
-	__u32 reserved;
-	struct _fpxreg _fxsr_st[8];
-	struct _xmmreg _xmm[8];
-	union {
-		__u32 padding1[44];
-		__u32 padding[44];
-	};
-	union {
-		__u32 padding2[12];
-		struct _fpx_sw_bytes sw_reserved;
-	};
-};
-
-typedef u32 compat_ulong_t;
-
-struct user_regset_view {
-	const char *name;
-	const struct user_regset *regsets;
-	unsigned int n;
-	u32 e_flags;
-	u16 e_machine;
-	u8 ei_osabi;
-};
-
-enum x86_regset {
-	REGSET_GENERAL = 0,
-	REGSET_FP = 1,
-	REGSET_XFP = 2,
-	REGSET_IOPERM64 = 2,
-	REGSET_XSTATE = 3,
-	REGSET_TLS = 4,
-	REGSET_IOPERM32 = 5,
-};
-
-struct pt_regs_offset {
-	const char *name;
-	int offset;
-};
-
-typedef bool (*stack_trace_consume_fn)(void *, long unsigned int, bool);
-
-struct stack_frame_user {
-	const void *next_fp;
-	long unsigned int ret_addr;
-};
-
-enum cache_type {
-	CACHE_TYPE_NOCACHE = 0,
-	CACHE_TYPE_INST = 1,
-	CACHE_TYPE_DATA = 2,
-	CACHE_TYPE_SEPARATE = 3,
-	CACHE_TYPE_UNIFIED = 4,
-};
-
-struct cacheinfo {
-	unsigned int id;
-	enum cache_type type;
-	unsigned int level;
-	unsigned int coherency_line_size;
-	unsigned int number_of_sets;
-	unsigned int ways_of_associativity;
-	unsigned int physical_line_partition;
-	unsigned int size;
-	cpumask_t shared_cpu_map;
-	unsigned int attributes;
-	void *fw_token;
-	bool disable_sysfs;
-	void *priv;
-};
-
-struct cpu_cacheinfo {
-	struct cacheinfo *info_list;
-	unsigned int num_levels;
-	unsigned int num_leaves;
-	bool cpu_map_populated;
-};
-
-struct amd_l3_cache {
-	unsigned int indices;
-	u8 subcaches[4];
-};
-
-struct threshold_block {
-	unsigned int block;
-	unsigned int bank;
-	unsigned int cpu;
-	u32 address;
-	u16 interrupt_enable;
-	bool interrupt_capable;
-	u16 threshold_limit;
-	struct kobject kobj;
-	struct list_head miscj;
-};
-
-struct threshold_bank {
-	struct kobject *kobj;
-	struct threshold_block *blocks;
-	refcount_t cpus;
-};
-
-struct amd_northbridge {
-	struct pci_dev *root;
-	struct pci_dev *misc;
-	struct pci_dev *link;
-	struct amd_l3_cache l3_cache;
-	struct threshold_bank *bank4;
-};
-
-struct cpu_dev {
-	const char *c_vendor;
-	const char *c_ident[2];
-	void (*c_early_init)(struct cpuinfo_x86 *);
-	void (*c_bsp_init)(struct cpuinfo_x86 *);
-	void (*c_init)(struct cpuinfo_x86 *);
-	void (*c_identify)(struct cpuinfo_x86 *);
-	void (*c_detect_tlb)(struct cpuinfo_x86 *);
-	int c_x86_vendor;
-};
-
-enum tsx_ctrl_states {
-	TSX_CTRL_ENABLE = 0,
-	TSX_CTRL_DISABLE = 1,
-	TSX_CTRL_NOT_SUPPORTED = 2,
-};
-
-struct _cache_table {
-	unsigned char descriptor;
-	char cache_type;
-	short int size;
-};
-
-enum _cache_type {
-	CTYPE_NULL = 0,
-	CTYPE_DATA = 1,
-	CTYPE_INST = 2,
-	CTYPE_UNIFIED = 3,
-};
-
-union _cpuid4_leaf_eax {
-	struct {
-		enum _cache_type type: 5;
-		unsigned int level: 3;
-		unsigned int is_self_initializing: 1;
-		unsigned int is_fully_associative: 1;
-		unsigned int reserved: 4;
-		unsigned int num_threads_sharing: 12;
-		unsigned int num_cores_on_die: 6;
-	} split;
-	u32 full;
-};
-
-union _cpuid4_leaf_ebx {
-	struct {
-		unsigned int coherency_line_size: 12;
-		unsigned int physical_line_partition: 10;
-		unsigned int ways_of_associativity: 10;
-	} split;
-	u32 full;
-};
-
-union _cpuid4_leaf_ecx {
-	struct {
-		unsigned int number_of_sets: 32;
-	} split;
-	u32 full;
-};
-
-struct _cpuid4_info_regs {
-	union _cpuid4_leaf_eax eax;
-	union _cpuid4_leaf_ebx ebx;
-	union _cpuid4_leaf_ecx ecx;
-	unsigned int id;
-	long unsigned int size;
-	struct amd_northbridge *nb;
-};
-
-union l1_cache {
-	struct {
-		unsigned int line_size: 8;
-		unsigned int lines_per_tag: 8;
-		unsigned int assoc: 8;
-		unsigned int size_in_kb: 8;
-	};
-	unsigned int val;
-};
-
-union l2_cache {
-	struct {
-		unsigned int line_size: 8;
-		unsigned int lines_per_tag: 4;
-		unsigned int assoc: 4;
-		unsigned int size_in_kb: 16;
-	};
-	unsigned int val;
-};
-
-union l3_cache {
-	struct {
-		unsigned int line_size: 8;
-		unsigned int lines_per_tag: 4;
-		unsigned int assoc: 4;
-		unsigned int res: 2;
-		unsigned int size_encoded: 14;
-	};
-	unsigned int val;
-};
-
-struct cpuid_bit {
-	u16 feature;
-	u8 reg;
-	u8 bit;
-	u32 level;
-	u32 sub_leaf;
-};
-
-enum cpuid_leafs {
-	CPUID_1_EDX = 0,
-	CPUID_8000_0001_EDX = 1,
-	CPUID_8086_0001_EDX = 2,
-	CPUID_LNX_1 = 3,
-	CPUID_1_ECX = 4,
-	CPUID_C000_0001_EDX = 5,
-	CPUID_8000_0001_ECX = 6,
-	CPUID_LNX_2 = 7,
-	CPUID_LNX_3 = 8,
-	CPUID_7_0_EBX = 9,
-	CPUID_D_1_EAX = 10,
-	CPUID_LNX_4 = 11,
-	CPUID_7_1_EAX = 12,
-	CPUID_8000_0008_EBX = 13,
-	CPUID_6_EAX = 14,
-	CPUID_8000_000A_EDX = 15,
-	CPUID_7_ECX = 16,
-	CPUID_8000_0007_EBX = 17,
-	CPUID_7_EDX = 18,
-};
-
-struct cpuid_dependent_feature {
-	u32 feature;
-	u32 level;
-};
-
-typedef u32 pao_T_____3;
-
-enum spectre_v2_mitigation {
-	SPECTRE_V2_NONE = 0,
-	SPECTRE_V2_RETPOLINE_GENERIC = 1,
-	SPECTRE_V2_RETPOLINE_AMD = 2,
-	SPECTRE_V2_IBRS_ENHANCED = 3,
-};
-
-enum spectre_v2_user_mitigation {
-	SPECTRE_V2_USER_NONE = 0,
-	SPECTRE_V2_USER_STRICT = 1,
-	SPECTRE_V2_USER_STRICT_PREFERRED = 2,
-	SPECTRE_V2_USER_PRCTL = 3,
-	SPECTRE_V2_USER_SECCOMP = 4,
-};
-
-enum ssb_mitigation {
-	SPEC_STORE_BYPASS_NONE = 0,
-	SPEC_STORE_BYPASS_DISABLE = 1,
-	SPEC_STORE_BYPASS_PRCTL = 2,
-	SPEC_STORE_BYPASS_SECCOMP = 3,
-};
-
-enum mds_mitigations {
-	MDS_MITIGATION_OFF = 0,
-	MDS_MITIGATION_FULL = 1,
-	MDS_MITIGATION_VMWERV = 2,
-};
-
-enum taa_mitigations {
-	TAA_MITIGATION_OFF = 0,
-	TAA_MITIGATION_UCODE_NEEDED = 1,
-	TAA_MITIGATION_VERW = 2,
-	TAA_MITIGATION_TSX_DISABLED = 3,
-};
-
-enum vmx_l1d_flush_state {
-	VMENTER_L1D_FLUSH_AUTO = 0,
-	VMENTER_L1D_FLUSH_NEVER = 1,
-	VMENTER_L1D_FLUSH_COND = 2,
-	VMENTER_L1D_FLUSH_ALWAYS = 3,
-	VMENTER_L1D_FLUSH_EPT_DISABLED = 4,
-	VMENTER_L1D_FLUSH_NOT_REQUIRED = 5,
-};
-
-enum x86_hypervisor_type {
-	X86_HYPER_NATIVE = 0,
-	X86_HYPER_VMWARE = 1,
-	X86_HYPER_MS_HYPERV = 2,
-	X86_HYPER_XEN_PV = 3,
-	X86_HYPER_XEN_HVM = 4,
-	X86_HYPER_KVM = 5,
-	X86_HYPER_JAILHOUSE = 6,
-	X86_HYPER_ACRN = 7,
-};
-
-enum spectre_v1_mitigation {
-	SPECTRE_V1_MITIGATION_NONE = 0,
-	SPECTRE_V1_MITIGATION_AUTO = 1,
-};
-
-enum spectre_v2_mitigation_cmd {
-	SPECTRE_V2_CMD_NONE = 0,
-	SPECTRE_V2_CMD_AUTO = 1,
-	SPECTRE_V2_CMD_FORCE = 2,
-	SPECTRE_V2_CMD_RETPOLINE = 3,
-	SPECTRE_V2_CMD_RETPOLINE_GENERIC = 4,
-	SPECTRE_V2_CMD_RETPOLINE_AMD = 5,
-};
-
-enum spectre_v2_user_cmd {
-	SPECTRE_V2_USER_CMD_NONE = 0,
-	SPECTRE_V2_USER_CMD_AUTO = 1,
-	SPECTRE_V2_USER_CMD_FORCE = 2,
-	SPECTRE_V2_USER_CMD_PRCTL = 3,
-	SPECTRE_V2_USER_CMD_PRCTL_IBPB = 4,
-	SPECTRE_V2_USER_CMD_SECCOMP = 5,
-	SPECTRE_V2_USER_CMD_SECCOMP_IBPB = 6,
-};
-
-enum ssb_mitigation_cmd {
-	SPEC_STORE_BYPASS_CMD_NONE = 0,
-	SPEC_STORE_BYPASS_CMD_AUTO = 1,
-	SPEC_STORE_BYPASS_CMD_ON = 2,
-	SPEC_STORE_BYPASS_CMD_PRCTL = 3,
-	SPEC_STORE_BYPASS_CMD_SECCOMP = 4,
-};
-
-enum hk_flags {
-	HK_FLAG_TIMER = 1,
-	HK_FLAG_RCU = 2,
-	HK_FLAG_MISC = 4,
-	HK_FLAG_SCHED = 8,
-	HK_FLAG_TICK = 16,
-	HK_FLAG_DOMAIN = 32,
-	HK_FLAG_WQ = 64,
-};
-
-struct aperfmperf_sample {
-	unsigned int khz;
-	ktime_t time;
-	u64 aperf;
-	u64 mperf;
-};
-
-struct cpuid_dep {
-	unsigned int feature;
-	unsigned int depends;
-};
-
-struct _tlb_table {
-	unsigned char descriptor;
-	char tlb_type;
-	unsigned int entries;
-	char info[128];
-};
-
-struct sku_microcode {
-	u8 model;
-	u8 stepping;
-	u32 microcode;
-};
-
-struct cpuid_regs {
-	u32 eax;
-	u32 ebx;
-	u32 ecx;
-	u32 edx;
-};
-
-enum pconfig_target {
-	INVALID_TARGET = 0,
-	MKTME_TARGET = 1,
-	PCONFIG_TARGET_NR = 2,
-};
-
-enum {
-	PCONFIG_CPUID_SUBLEAF_INVALID = 0,
-	PCONFIG_CPUID_SUBLEAF_TARGETID = 1,
-};
-
-typedef u8 pto_T_____10;
-
-enum mf_flags {
-	MF_COUNT_INCREASED = 1,
-	MF_ACTION_REQUIRED = 2,
-	MF_MUST_KILL = 4,
-	MF_SOFT_OFFLINE = 8,
-};
-
-enum mce_notifier_prios {
-	MCE_PRIO_FIRST = 2147483647,
-	MCE_PRIO_SRAO = 2147483646,
-	MCE_PRIO_EXTLOG = 2147483645,
-	MCE_PRIO_NFIT = 2147483644,
-	MCE_PRIO_EDAC = 2147483643,
-	MCE_PRIO_MCELOG = 1,
-	MCE_PRIO_LOWEST = 0,
-};
-
-enum mcp_flags {
-	MCP_TIMESTAMP = 1,
-	MCP_UC = 2,
-	MCP_DONTLOG = 4,
-};
-
-enum severity_level {
-	MCE_NO_SEVERITY = 0,
-	MCE_DEFERRED_SEVERITY = 1,
-	MCE_UCNA_SEVERITY = 1,
-	MCE_KEEP_SEVERITY = 2,
-	MCE_SOME_SEVERITY = 3,
-	MCE_AO_SEVERITY = 4,
-	MCE_UC_SEVERITY = 5,
-	MCE_AR_SEVERITY = 6,
-	MCE_PANIC_SEVERITY = 7,
-};
-
-struct mce_evt_llist {
-	struct llist_node llnode;
-	struct mce mce;
-};
-
-struct mca_config {
-	bool dont_log_ce;
-	bool cmci_disabled;
-	bool ignore_ce;
-	__u64 lmce_disabled: 1;
-	__u64 disabled: 1;
-	__u64 ser: 1;
-	__u64 recovery: 1;
-	__u64 bios_cmci_threshold: 1;
-	long: 35;
-	__u64 __reserved: 59;
-	s8 bootlog;
-	int tolerant;
-	int monarch_timeout;
-	int panic_timeout;
-	u32 rip_msr;
-};
-
-struct mce_vendor_flags {
-	__u64 overflow_recov: 1;
-	__u64 succor: 1;
-	__u64 smca: 1;
-	__u64 __reserved_0: 61;
-};
-
-struct mca_msr_regs {
-	u32 (*ctl)(int);
-	u32 (*status)(int);
-	u32 (*addr)(int);
-	u32 (*misc)(int);
-};
-
-struct trace_event_raw_mce_record {
-	struct trace_entry ent;
-	u64 mcgcap;
-	u64 mcgstatus;
-	u64 status;
-	u64 addr;
-	u64 misc;
-	u64 synd;
-	u64 ipid;
-	u64 ip;
-	u64 tsc;
-	u64 walltime;
-	u32 cpu;
-	u32 cpuid;
-	u32 apicid;
-	u32 socketid;
-	u8 cs;
-	u8 bank;
-	u8 cpuvendor;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mce_record {};
-
-typedef void (*btf_trace_mce_record)(void *, struct mce *);
-
-struct mce_bank {
-	u64 ctl;
-	bool init;
-};
-
-struct mce_bank_dev {
-	struct device_attribute attr;
-	char attrname[16];
-	u8 bank;
-};
-
-typedef unsigned int pto_T_____11;
-
-enum context {
-	IN_KERNEL = 1,
-	IN_USER = 2,
-	IN_KERNEL_RECOV = 3,
-};
-
-enum ser {
-	SER_REQUIRED = 1,
-	NO_SER = 2,
-};
-
-enum exception {
-	EXCP_CONTEXT = 1,
-	NO_EXCP = 2,
-};
-
-struct severity {
-	u64 mask;
-	u64 result;
-	unsigned char sev;
-	unsigned char mcgmask;
-	unsigned char mcgres;
-	unsigned char ser;
-	unsigned char context;
-	unsigned char excp;
-	unsigned char covered;
-	char *msg;
-};
-
-struct gen_pool;
-
-typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
-
-struct gen_pool {
-	spinlock_t lock;
-	struct list_head chunks;
-	int min_alloc_order;
-	genpool_algo_t algo;
-	void *data;
-	const char *name;
-};
-
-enum {
-	CMCI_STORM_NONE = 0,
-	CMCI_STORM_ACTIVE = 1,
-	CMCI_STORM_SUBSIDED = 2,
-};
-
-enum kobject_action {
-	KOBJ_ADD = 0,
-	KOBJ_REMOVE = 1,
-	KOBJ_CHANGE = 2,
-	KOBJ_MOVE = 3,
-	KOBJ_ONLINE = 4,
-	KOBJ_OFFLINE = 5,
-	KOBJ_BIND = 6,
-	KOBJ_UNBIND = 7,
-	KOBJ_MAX = 8,
-};
-
-enum smca_bank_types {
-	SMCA_LS = 0,
-	SMCA_IF = 1,
-	SMCA_L2_CACHE = 2,
-	SMCA_DE = 3,
-	SMCA_RESERVED = 4,
-	SMCA_EX = 5,
-	SMCA_FP = 6,
-	SMCA_L3_CACHE = 7,
-	SMCA_CS = 8,
-	SMCA_CS_V2 = 9,
-	SMCA_PIE = 10,
-	SMCA_UMC = 11,
-	SMCA_PB = 12,
-	SMCA_PSP = 13,
-	SMCA_PSP_V2 = 14,
-	SMCA_SMU = 15,
-	SMCA_SMU_V2 = 16,
-	SMCA_MP5 = 17,
-	SMCA_NBIO = 18,
-	SMCA_PCIE = 19,
-	N_SMCA_BANK_TYPES = 20,
-};
-
-struct smca_bank_name {
-	const char *name;
-	const char *long_name;
-};
-
-struct thresh_restart {
-	struct threshold_block *b;
-	int reset;
-	int set_lvt_off;
-	int lvt_off;
-	u16 old_limit;
-};
-
-struct threshold_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct threshold_block *, char *);
-	ssize_t (*store)(struct threshold_block *, const char *, size_t);
-};
-
-struct _thermal_state {
-	u64 next_check;
-	u64 last_interrupt_time;
-	struct delayed_work therm_work;
-	long unsigned int count;
-	long unsigned int last_count;
-	long unsigned int max_time_ms;
-	long unsigned int total_time_ms;
-	bool rate_control_active;
-	bool new_event;
-	u8 level;
-	u8 sample_index;
-	u8 sample_count;
-	u8 average;
-	u8 baseline_temp;
-	u8 temp_samples[3];
-};
-
-struct thermal_state {
-	struct _thermal_state core_throttle;
-	struct _thermal_state core_power_limit;
-	struct _thermal_state package_throttle;
-	struct _thermal_state package_power_limit;
-	struct _thermal_state core_thresh0;
-	struct _thermal_state core_thresh1;
-	struct _thermal_state pkg_thresh0;
-	struct _thermal_state pkg_thresh1;
-};
-
-struct mtrr_var_range {
-	__u32 base_lo;
-	__u32 base_hi;
-	__u32 mask_lo;
-	__u32 mask_hi;
-};
-
-typedef __u8 mtrr_type;
-
-struct mtrr_state_type {
-	struct mtrr_var_range var_ranges[256];
-	mtrr_type fixed_ranges[88];
-	unsigned char enabled;
-	unsigned char have_fixed;
-	mtrr_type def_type;
-};
-
-struct mtrr_ops {
-	u32 vendor;
-	u32 use_intel_if;
-	void (*set)(unsigned int, long unsigned int, long unsigned int, mtrr_type);
-	void (*set_all)();
-	void (*get)(unsigned int, long unsigned int *, long unsigned int *, mtrr_type *);
-	int (*get_free_region)(long unsigned int, long unsigned int, int);
-	int (*validate_add_page)(long unsigned int, long unsigned int, unsigned int);
-	int (*have_wrcomb)();
-};
-
-struct set_mtrr_data {
-	long unsigned int smp_base;
-	long unsigned int smp_size;
-	unsigned int smp_reg;
-	mtrr_type smp_type;
-};
-
-struct mtrr_value {
-	mtrr_type ltype;
-	long unsigned int lbase;
-	long unsigned int lsize;
-};
-
-struct mtrr_sentry {
-	__u64 base;
-	__u32 size;
-	__u32 type;
-};
-
-struct mtrr_gentry {
-	__u64 base;
-	__u32 size;
-	__u32 regnum;
-	__u32 type;
-	__u32 _pad;
-};
-
-typedef u32 compat_uint_t;
-
-struct mtrr_sentry32 {
-	compat_ulong_t base;
-	compat_uint_t size;
-	compat_uint_t type;
-};
-
-struct mtrr_gentry32 {
-	compat_ulong_t regnum;
-	compat_uint_t base;
-	compat_uint_t size;
-	compat_uint_t type;
-};
-
-struct fixed_range_block {
-	int base_msr;
-	int ranges;
-};
-
-struct var_mtrr_range_state {
-	long unsigned int base_pfn;
-	long unsigned int size_pfn;
-	mtrr_type type;
-};
-
-struct subsys_interface {
-	const char *name;
-	struct bus_type *subsys;
-	struct list_head node;
-	int (*add_dev)(struct device *, struct subsys_interface *);
-	void (*remove_dev)(struct device *, struct subsys_interface *);
-};
-
-struct property_entry;
-
-struct platform_device_info {
-	struct device *parent;
-	struct fwnode_handle *fwnode;
-	bool of_node_reused;
-	const char *name;
-	int id;
-	const struct resource *res;
-	unsigned int num_res;
-	const void *data;
-	size_t size_data;
-	u64 dma_mask;
-	struct property_entry *properties;
-};
-
-struct builtin_fw {
-	char *name;
-	void *data;
-	long unsigned int size;
-};
-
-struct cpio_data {
-	void *data;
-	size_t size;
-	char name[18];
-};
-
-enum ucode_state {
-	UCODE_OK = 0,
-	UCODE_NEW = 1,
-	UCODE_UPDATED = 2,
-	UCODE_NFOUND = 3,
-	UCODE_ERROR = 4,
-};
-
-struct microcode_ops {
-	enum ucode_state (*request_microcode_user)(int, const void *, size_t);
-	enum ucode_state (*request_microcode_fw)(int, struct device *, bool);
-	void (*microcode_fini_cpu)(int);
-	enum ucode_state (*apply_microcode)(int);
-	int (*collect_cpu_info)(int, struct cpu_signature *);
-};
-
-struct cpu_info_ctx {
-	struct cpu_signature *cpu_sig;
-	int err;
-};
-
-struct firmware {
-	size_t size;
-	const u8 *data;
-	struct page **pages;
-	void *priv;
-};
-
-struct ucode_patch {
-	struct list_head plist;
-	void *data;
-	u32 patch_id;
-	u16 equiv_cpu;
-};
-
-struct microcode_header_intel {
-	unsigned int hdrver;
-	unsigned int rev;
-	unsigned int date;
-	unsigned int sig;
-	unsigned int cksum;
-	unsigned int ldrver;
-	unsigned int pf;
-	unsigned int datasize;
-	unsigned int totalsize;
-	unsigned int reserved[3];
-};
-
-struct microcode_intel {
-	struct microcode_header_intel hdr;
-	unsigned int bits[0];
-};
-
-struct extended_signature {
-	unsigned int sig;
-	unsigned int pf;
-	unsigned int cksum;
-};
-
-struct extended_sigtable {
-	unsigned int count;
-	unsigned int cksum;
-	unsigned int reserved[3];
-	struct extended_signature sigs[0];
-};
-
-struct equiv_cpu_entry {
-	u32 installed_cpu;
-	u32 fixed_errata_mask;
-	u32 fixed_errata_compare;
-	u16 equiv_cpu;
-	u16 res;
-};
-
-struct microcode_header_amd {
-	u32 data_code;
-	u32 patch_id;
-	u16 mc_patch_data_id;
-	u8 mc_patch_data_len;
-	u8 init_flag;
-	u32 mc_patch_data_checksum;
-	u32 nb_dev_id;
-	u32 sb_dev_id;
-	u16 processor_rev_id;
-	u8 nb_rev_id;
-	u8 sb_rev_id;
-	u8 bios_api_rev;
-	u8 reserved1[3];
-	u32 match_reg[8];
-};
-
-struct microcode_amd {
-	struct microcode_header_amd hdr;
-	unsigned int mpb[0];
-};
-
-struct equiv_cpu_table {
-	unsigned int num_entries;
-	struct equiv_cpu_entry *entry;
-};
-
-struct cont_desc {
-	struct microcode_amd *mc;
-	u32 cpuid_1_eax;
-	u32 psize;
-	u8 *data;
-	size_t size;
-};
-
-enum mp_irq_source_types {
-	mp_INT = 0,
-	mp_NMI = 1,
-	mp_SMI = 2,
-	mp_ExtINT = 3,
-};
-
-struct IO_APIC_route_entry {
-	__u32 vector: 8;
-	__u32 delivery_mode: 3;
-	__u32 dest_mode: 1;
-	__u32 delivery_status: 1;
-	__u32 polarity: 1;
-	__u32 irr: 1;
-	__u32 trigger: 1;
-	__u32 mask: 1;
-	__u32 __reserved_2: 15;
-	__u32 __reserved_3: 24;
-	__u32 dest: 8;
-};
-
-typedef u64 acpi_physical_address;
-
-typedef u32 acpi_status;
-
-typedef void *acpi_handle;
-
-typedef u8 acpi_adr_space_type;
-
-struct acpi_subtable_header {
-	u8 type;
-	u8 length;
-};
-
-struct acpi_table_bgrt {
-	struct acpi_table_header header;
-	u16 version;
-	u8 status;
-	u8 image_type;
-	u64 image_address;
-	u32 image_offset_x;
-	u32 image_offset_y;
-};
-
-struct acpi_table_boot {
-	struct acpi_table_header header;
-	u8 cmos_index;
-	u8 reserved[3];
-};
-
-struct acpi_hmat_structure {
-	u16 type;
-	u16 reserved;
-	u32 length;
-};
-
-struct acpi_table_hpet {
-	struct acpi_table_header header;
-	u32 id;
-	struct acpi_generic_address address;
-	u8 sequence;
-	u16 minimum_tick;
-	u8 flags;
-} __attribute__((packed));
-
-struct acpi_table_madt {
-	struct acpi_table_header header;
-	u32 address;
-	u32 flags;
-};
-
-enum acpi_madt_type {
-	ACPI_MADT_TYPE_LOCAL_APIC = 0,
-	ACPI_MADT_TYPE_IO_APIC = 1,
-	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
-	ACPI_MADT_TYPE_NMI_SOURCE = 3,
-	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
-	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
-	ACPI_MADT_TYPE_IO_SAPIC = 6,
-	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
-	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
-	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
-	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
-	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
-	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
-	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
-	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
-	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
-	ACPI_MADT_TYPE_RESERVED = 16,
-};
-
-struct acpi_madt_local_apic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u32 lapic_flags;
-};
-
-struct acpi_madt_io_apic {
-	struct acpi_subtable_header header;
-	u8 id;
-	u8 reserved;
-	u32 address;
-	u32 global_irq_base;
-};
-
-struct acpi_madt_interrupt_override {
-	struct acpi_subtable_header header;
-	u8 bus;
-	u8 source_irq;
-	u32 global_irq;
-	u16 inti_flags;
-} __attribute__((packed));
-
-struct acpi_madt_nmi_source {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 global_irq;
-};
-
-struct acpi_madt_local_apic_nmi {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u16 inti_flags;
-	u8 lint;
-} __attribute__((packed));
-
-struct acpi_madt_local_apic_override {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_madt_local_sapic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u8 eid;
-	u8 reserved[3];
-	u32 lapic_flags;
-	u32 uid;
-	char uid_string[1];
-} __attribute__((packed));
-
-struct acpi_madt_local_x2apic {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 local_apic_id;
-	u32 lapic_flags;
-	u32 uid;
-};
-
-struct acpi_madt_local_x2apic_nmi {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 uid;
-	u8 lint;
-	u8 reserved[3];
-};
-
-union acpi_subtable_headers {
-	struct acpi_subtable_header common;
-	struct acpi_hmat_structure hmat;
-};
-
-typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
-
-struct acpi_subtable_proc {
-	int id;
-	acpi_tbl_entry_handler handler;
-	int count;
-};
-
-typedef u32 phys_cpuid_t;
-
-enum irq_alloc_type {
-	X86_IRQ_ALLOC_TYPE_IOAPIC = 1,
-	X86_IRQ_ALLOC_TYPE_HPET = 2,
-	X86_IRQ_ALLOC_TYPE_MSI = 3,
-	X86_IRQ_ALLOC_TYPE_MSIX = 4,
-	X86_IRQ_ALLOC_TYPE_DMAR = 5,
-	X86_IRQ_ALLOC_TYPE_UV = 6,
-};
-
-struct irq_alloc_info {
-	enum irq_alloc_type type;
-	u32 flags;
-	const struct cpumask *mask;
-	union {
-		int unused;
-		struct {
-			int hpet_id;
-			int hpet_index;
-			void *hpet_data;
-		};
-		struct {
-			struct pci_dev *msi_dev;
-			irq_hw_number_t msi_hwirq;
-		};
-		struct {
-			int ioapic_id;
-			int ioapic_pin;
-			int ioapic_node;
-			u32 ioapic_trigger: 1;
-			u32 ioapic_polarity: 1;
-			u32 ioapic_valid: 1;
-			struct IO_APIC_route_entry *ioapic_entry;
-		};
-		struct {
-			int dmar_id;
-			void *dmar_data;
-		};
-	};
-};
-
-struct circ_buf {
-	char *buf;
-	int head;
-	int tail;
-};
-
-struct serial_icounter_struct {
-	int cts;
-	int dsr;
-	int rng;
-	int dcd;
-	int rx;
-	int tx;
-	int frame;
-	int overrun;
-	int parity;
-	int brk;
-	int buf_overrun;
-	int reserved[9];
-};
-
-struct serial_struct {
-	int type;
-	int line;
-	unsigned int port;
-	int irq;
-	int flags;
-	int xmit_fifo_size;
-	int custom_divisor;
-	int baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	int hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	long unsigned int iomap_base;
-};
-
-struct serial_rs485 {
-	__u32 flags;
-	__u32 delay_rts_before_send;
-	__u32 delay_rts_after_send;
-	__u32 padding[5];
-};
-
-struct serial_iso7816 {
-	__u32 flags;
-	__u32 tg;
-	__u32 sc_fi;
-	__u32 sc_di;
-	__u32 clk;
-	__u32 reserved[5];
-};
-
-struct uart_port;
-
-struct uart_ops {
-	unsigned int (*tx_empty)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*stop_tx)(struct uart_port *);
-	void (*start_tx)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	void (*send_xchar)(struct uart_port *, char);
-	void (*stop_rx)(struct uart_port *);
-	void (*enable_ms)(struct uart_port *);
-	void (*break_ctl)(struct uart_port *, int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*flush_buffer)(struct uart_port *);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	const char * (*type)(struct uart_port *);
-	void (*release_port)(struct uart_port *);
-	int (*request_port)(struct uart_port *);
-	void (*config_port)(struct uart_port *, int);
-	int (*verify_port)(struct uart_port *, struct serial_struct *);
-	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
-};
-
-struct uart_icount {
-	__u32 cts;
-	__u32 dsr;
-	__u32 rng;
-	__u32 dcd;
-	__u32 rx;
-	__u32 tx;
-	__u32 frame;
-	__u32 overrun;
-	__u32 parity;
-	__u32 brk;
-	__u32 buf_overrun;
-};
-
-typedef unsigned int upf_t;
-
-typedef unsigned int upstat_t;
-
-struct uart_state;
-
-struct uart_port {
-	spinlock_t lock;
-	long unsigned int iobase;
-	unsigned char *membase;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
-	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	unsigned int fifosize;
-	unsigned char x_char;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char quirks;
-	unsigned int read_status_mask;
-	unsigned int ignore_status_mask;
-	struct uart_state *state;
-	struct uart_icount icount;
-	struct console *cons;
-	long unsigned int sysrq;
-	unsigned int sysrq_ch;
-	upf_t flags;
-	upstat_t status;
-	int hw_stopped;
-	unsigned int mctrl;
-	unsigned int timeout;
-	unsigned int type;
-	const struct uart_ops *ops;
-	unsigned int custom_divisor;
-	unsigned int line;
-	unsigned int minor;
-	resource_size_t mapbase;
-	resource_size_t mapsize;
-	struct device *dev;
-	unsigned char hub6;
-	unsigned char suspended;
-	unsigned char unused[2];
-	const char *name;
-	struct attribute_group *attr_group;
-	const struct attribute_group **tty_groups;
-	struct serial_rs485 rs485;
-	struct serial_iso7816 iso7816;
-	void *private_data;
-};
-
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3,
-	UART_PM_STATE_UNDEFINED = 4,
-};
-
-struct uart_state {
-	struct tty_port port;
-	enum uart_pm_state pm_state;
-	struct circ_buf xmit;
-	atomic_t refcount;
-	wait_queue_head_t remove_wait;
-	struct uart_port *uart_port;
-};
-
-struct earlycon_device {
-	struct console *con;
-	struct uart_port port;
-	char options[16];
-	unsigned int baud;
-};
-
-struct earlycon_id {
-	char name[15];
-	char name_term;
-	char compatible[128];
-	int (*setup)(struct earlycon_device *, const char *);
-};
-
-enum ioapic_domain_type {
-	IOAPIC_DOMAIN_INVALID = 0,
-	IOAPIC_DOMAIN_LEGACY = 1,
-	IOAPIC_DOMAIN_STRICT = 2,
-	IOAPIC_DOMAIN_DYNAMIC = 3,
-};
-
-struct ioapic_domain_cfg {
-	enum ioapic_domain_type type;
-	const struct irq_domain_ops *ops;
-	struct device_node *dev;
-};
-
-struct thermal_cooling_device_ops;
-
-struct thermal_cooling_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct device_node *np;
-	void *devdata;
-	void *stats;
-	const struct thermal_cooling_device_ops *ops;
-	bool updated;
-	struct mutex lock;
-	struct list_head thermal_instances;
-	struct list_head node;
-};
-
-enum thermal_device_mode {
-	THERMAL_DEVICE_DISABLED = 0,
-	THERMAL_DEVICE_ENABLED = 1,
-};
-
-enum thermal_trip_type {
-	THERMAL_TRIP_ACTIVE = 0,
-	THERMAL_TRIP_PASSIVE = 1,
-	THERMAL_TRIP_HOT = 2,
-	THERMAL_TRIP_CRITICAL = 3,
-};
-
-enum thermal_trend {
-	THERMAL_TREND_STABLE = 0,
-	THERMAL_TREND_RAISING = 1,
-	THERMAL_TREND_DROPPING = 2,
-	THERMAL_TREND_RAISE_FULL = 3,
-	THERMAL_TREND_DROP_FULL = 4,
-};
-
-enum thermal_notify_event {
-	THERMAL_EVENT_UNSPECIFIED = 0,
-	THERMAL_EVENT_TEMP_SAMPLE = 1,
-	THERMAL_TRIP_VIOLATED = 2,
-	THERMAL_TRIP_CHANGED = 3,
-	THERMAL_DEVICE_DOWN = 4,
-	THERMAL_DEVICE_UP = 5,
-	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
-	THERMAL_TABLE_CHANGED = 7,
-};
-
-struct thermal_zone_device;
-
-struct thermal_zone_device_ops {
-	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*get_temp)(struct thermal_zone_device *, int *);
-	int (*set_trips)(struct thermal_zone_device *, int, int);
-	int (*get_mode)(struct thermal_zone_device *, enum thermal_device_mode *);
-	int (*set_mode)(struct thermal_zone_device *, enum thermal_device_mode);
-	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
-	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
-	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
-	int (*get_crit_temp)(struct thermal_zone_device *, int *);
-	int (*set_emul_temp)(struct thermal_zone_device *, int);
-	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
-	int (*notify)(struct thermal_zone_device *, int, enum thermal_trip_type);
-};
-
-struct thermal_attr;
-
-struct thermal_zone_params;
-
-struct thermal_governor;
-
-struct thermal_zone_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct attribute_group trips_attribute_group;
-	struct thermal_attr *trip_temp_attrs;
-	struct thermal_attr *trip_type_attrs;
-	struct thermal_attr *trip_hyst_attrs;
-	void *devdata;
-	int trips;
-	long unsigned int trips_disabled;
-	int passive_delay;
-	int polling_delay;
-	int temperature;
-	int last_temperature;
-	int emul_temperature;
-	int passive;
-	int prev_low_trip;
-	int prev_high_trip;
-	unsigned int forced_passive;
-	atomic_t need_update;
-	struct thermal_zone_device_ops *ops;
-	struct thermal_zone_params *tzp;
-	struct thermal_governor *governor;
-	void *governor_data;
-	struct list_head thermal_instances;
-	struct ida ida;
-	struct mutex lock;
-	struct list_head node;
-	struct delayed_work poll_queue;
-	enum thermal_notify_event notify_event;
-};
-
-struct thermal_cooling_device_ops {
-	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
-	int (*get_requested_power)(struct thermal_cooling_device *, struct thermal_zone_device *, u32 *);
-	int (*state2power)(struct thermal_cooling_device *, struct thermal_zone_device *, long unsigned int, u32 *);
-	int (*power2state)(struct thermal_cooling_device *, struct thermal_zone_device *, u32, long unsigned int *);
-};
-
-struct thermal_attr {
-	struct device_attribute attr;
-	char name[20];
-};
-
-struct thermal_bind_params;
-
-struct thermal_zone_params {
-	char governor_name[20];
-	bool no_hwmon;
-	int num_tbps;
-	struct thermal_bind_params *tbp;
-	u32 sustainable_power;
-	s32 k_po;
-	s32 k_pu;
-	s32 k_i;
-	s32 k_d;
-	s32 integral_cutoff;
-	int slope;
-	int offset;
-};
-
-struct thermal_governor {
-	char name[20];
-	int (*bind_to_tz)(struct thermal_zone_device *);
-	void (*unbind_from_tz)(struct thermal_zone_device *);
-	int (*throttle)(struct thermal_zone_device *, int);
-	struct list_head governor_list;
-};
-
-struct thermal_bind_params {
-	struct thermal_cooling_device *cdev;
-	int weight;
-	int trip_mask;
-	long unsigned int *binding_limits;
-	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
-};
-
-struct acpi_processor_cx {
-	u8 valid;
-	u8 type;
-	u32 address;
-	u8 entry_method;
-	u8 index;
-	u32 latency;
-	u8 bm_sts_skip;
-	char desc[32];
-};
-
-struct acpi_lpi_state {
-	u32 min_residency;
-	u32 wake_latency;
-	u32 flags;
-	u32 arch_flags;
-	u32 res_cnt_freq;
-	u32 enable_parent_state;
-	u64 address;
-	u8 index;
-	u8 entry_method;
-	char desc[32];
-};
-
-struct acpi_processor_power {
-	int count;
-	union {
-		struct acpi_processor_cx states[8];
-		struct acpi_lpi_state lpi_states[8];
-	};
-	int timer_broadcast_on_state;
-};
-
-struct acpi_psd_package {
-	u64 num_entries;
-	u64 revision;
-	u64 domain;
-	u64 coord_type;
-	u64 num_processors;
-};
-
-struct acpi_pct_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 reserved;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_processor_px {
-	u64 core_frequency;
-	u64 power;
-	u64 transition_latency;
-	u64 bus_master_latency;
-	u64 control;
-	u64 status;
-};
-
-struct acpi_processor_performance {
-	unsigned int state;
-	unsigned int platform_limit;
-	struct acpi_pct_register control_register;
-	struct acpi_pct_register status_register;
-	short: 16;
-	unsigned int state_count;
-	int: 32;
-	struct acpi_processor_px *states;
-	struct acpi_psd_package domain_info;
-	cpumask_var_t shared_cpu_map;
-	unsigned int shared_type;
-	int: 32;
-} __attribute__((packed));
-
-struct acpi_tsd_package {
-	u64 num_entries;
-	u64 revision;
-	u64 domain;
-	u64 coord_type;
-	u64 num_processors;
-};
-
-struct acpi_processor_tx_tss {
-	u64 freqpercentage;
-	u64 power;
-	u64 transition_latency;
-	u64 control;
-	u64 status;
-};
-
-struct acpi_processor_tx {
-	u16 power;
-	u16 performance;
-};
-
-struct acpi_processor;
-
-struct acpi_processor_throttling {
-	unsigned int state;
-	unsigned int platform_limit;
-	struct acpi_pct_register control_register;
-	struct acpi_pct_register status_register;
-	short: 16;
-	unsigned int state_count;
-	int: 32;
-	struct acpi_processor_tx_tss *states_tss;
-	struct acpi_tsd_package domain_info;
-	cpumask_var_t shared_cpu_map;
-	int (*acpi_processor_get_throttling)(struct acpi_processor *);
-	int (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool);
-	u32 address;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 tsd_valid_flag;
-	char: 8;
-	unsigned int shared_type;
-	struct acpi_processor_tx states[16];
-	int: 32;
-} __attribute__((packed));
-
-struct acpi_processor_flags {
-	u8 power: 1;
-	u8 performance: 1;
-	u8 throttling: 1;
-	u8 limit: 1;
-	u8 bm_control: 1;
-	u8 bm_check: 1;
-	u8 has_cst: 1;
-	u8 has_lpi: 1;
-	u8 power_setup_done: 1;
-	u8 bm_rld_set: 1;
-	u8 need_hotplug_init: 1;
-};
-
-struct acpi_processor_lx {
-	int px;
-	int tx;
-};
-
-struct acpi_processor_limit {
-	struct acpi_processor_lx state;
-	struct acpi_processor_lx thermal;
-	struct acpi_processor_lx user;
-};
-
-struct acpi_processor {
-	acpi_handle handle;
-	u32 acpi_id;
-	phys_cpuid_t phys_id;
-	u32 id;
-	u32 pblk;
-	int performance_platform_limit;
-	int throttling_platform_limit;
-	struct acpi_processor_flags flags;
-	struct acpi_processor_power power;
-	struct acpi_processor_performance *performance;
-	struct acpi_processor_throttling throttling;
-	struct acpi_processor_limit limit;
-	struct thermal_cooling_device *cdev;
-	struct device *dev;
-	struct freq_qos_request perflib_req;
-	struct freq_qos_request thermal_req;
-};
-
-struct acpi_processor_errata {
-	u8 smp;
-	struct {
-		u8 throttle: 1;
-		u8 fdma: 1;
-		u8 reserved: 6;
-		u32 bmisx;
-	} piix4;
-};
-
-struct cpuidle_driver;
-
-struct wakeup_header {
-	u16 video_mode;
-	u32 pmode_entry;
-	u16 pmode_cs;
-	u32 pmode_cr0;
-	u32 pmode_cr3;
-	u32 pmode_cr4;
-	u32 pmode_efer_low;
-	u32 pmode_efer_high;
-	u64 pmode_gdt;
-	u32 pmode_misc_en_low;
-	u32 pmode_misc_en_high;
-	u32 pmode_behavior;
-	u32 realmode_flags;
-	u32 real_magic;
-	u32 signature;
-} __attribute__((packed));
-
-struct cpc_reg {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_power_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct cstate_entry {
-	struct {
-		unsigned int eax;
-		unsigned int ecx;
-	} states[8];
-};
-
-typedef void (*nmi_shootdown_cb)(int, struct pt_regs *);
-
-struct pci_ops___2;
-
-struct cpuid_regs_done {
-	struct cpuid_regs regs;
-	struct completion done;
-};
-
-struct intel_early_ops {
-	resource_size_t (*stolen_size)(int, int, int);
-	resource_size_t (*stolen_base)(int, int, int, resource_size_t);
-};
-
-struct chipset {
-	u32 vendor;
-	u32 device;
-	u32 class;
-	u32 class_mask;
-	u32 flags;
-	void (*f)(int, int, int);
-};
-
-struct sched_domain_shared {
-	atomic_t ref;
-	atomic_t nr_busy_cpus;
-	int has_idle_cores;
-};
-
-struct sched_group;
-
-struct sched_domain {
-	struct sched_domain *parent;
-	struct sched_domain *child;
-	struct sched_group *groups;
-	long unsigned int min_interval;
-	long unsigned int max_interval;
-	unsigned int busy_factor;
-	unsigned int imbalance_pct;
-	unsigned int cache_nice_tries;
-	int nohz_idle;
-	int flags;
-	int level;
-	long unsigned int last_balance;
-	unsigned int balance_interval;
-	unsigned int nr_balance_failed;
-	u64 max_newidle_lb_cost;
-	long unsigned int next_decay_max_lb_cost;
-	u64 avg_scan_cost;
-	unsigned int lb_count[3];
-	unsigned int lb_failed[3];
-	unsigned int lb_balanced[3];
-	unsigned int lb_imbalance[3];
-	unsigned int lb_gained[3];
-	unsigned int lb_hot_gained[3];
-	unsigned int lb_nobusyg[3];
-	unsigned int lb_nobusyq[3];
-	unsigned int alb_count;
-	unsigned int alb_failed;
-	unsigned int alb_pushed;
-	unsigned int sbe_count;
-	unsigned int sbe_balanced;
-	unsigned int sbe_pushed;
-	unsigned int sbf_count;
-	unsigned int sbf_balanced;
-	unsigned int sbf_pushed;
-	unsigned int ttwu_wake_remote;
-	unsigned int ttwu_move_affine;
-	unsigned int ttwu_move_balance;
-	union {
-		void *private;
-		struct callback_head rcu;
-	};
-	struct sched_domain_shared *shared;
-	unsigned int span_weight;
-	long unsigned int span[0];
-};
-
-typedef const struct cpumask * (*sched_domain_mask_f)(int);
-
-typedef int (*sched_domain_flags_f)();
-
-struct sched_group_capacity;
-
-struct sd_data {
-	struct sched_domain **sd;
-	struct sched_domain_shared **sds;
-	struct sched_group **sg;
-	struct sched_group_capacity **sgc;
-};
-
-struct sched_domain_topology_level {
-	sched_domain_mask_f mask;
-	sched_domain_flags_f sd_flags;
-	int flags;
-	int numa_level;
-	struct sd_data data;
-};
-
-struct tsc_adjust {
-	s64 bootval;
-	s64 adjusted;
-	long unsigned int nextcheck;
-	bool warned;
-};
-
-enum {
-	DUMP_PREFIX_NONE = 0,
-	DUMP_PREFIX_ADDRESS = 1,
-	DUMP_PREFIX_OFFSET = 2,
-};
-
-struct mpf_intel {
-	char signature[4];
-	unsigned int physptr;
-	unsigned char length;
-	unsigned char specification;
-	unsigned char checksum;
-	unsigned char feature1;
-	unsigned char feature2;
-	unsigned char feature3;
-	unsigned char feature4;
-	unsigned char feature5;
-};
-
-struct mpc_ioapic {
-	unsigned char type;
-	unsigned char apicid;
-	unsigned char apicver;
-	unsigned char flags;
-	unsigned int apicaddr;
-};
-
-struct mpc_lintsrc {
-	unsigned char type;
-	unsigned char irqtype;
-	short unsigned int irqflag;
-	unsigned char srcbusid;
-	unsigned char srcbusirq;
-	unsigned char destapic;
-	unsigned char destapiclint;
-};
-
-union apic_ir {
-	long unsigned int map[4];
-	u32 regs[8];
-};
-
-enum ioapic_irq_destination_types {
-	dest_Fixed = 0,
-	dest_LowestPrio = 1,
-	dest_SMI = 2,
-	dest__reserved_1 = 3,
-	dest_NMI = 4,
-	dest_INIT = 5,
-	dest__reserved_2 = 6,
-	dest_ExtINT = 7,
-};
-
-enum {
-	IRQ_SET_MASK_OK = 0,
-	IRQ_SET_MASK_OK_NOCOPY = 1,
-	IRQ_SET_MASK_OK_DONE = 2,
-};
-
-enum {
-	IRQD_TRIGGER_MASK = 15,
-	IRQD_SETAFFINITY_PENDING = 256,
-	IRQD_ACTIVATED = 512,
-	IRQD_NO_BALANCING = 1024,
-	IRQD_PER_CPU = 2048,
-	IRQD_AFFINITY_SET = 4096,
-	IRQD_LEVEL = 8192,
-	IRQD_WAKEUP_STATE = 16384,
-	IRQD_MOVE_PCNTXT = 32768,
-	IRQD_IRQ_DISABLED = 65536,
-	IRQD_IRQ_MASKED = 131072,
-	IRQD_IRQ_INPROGRESS = 262144,
-	IRQD_WAKEUP_ARMED = 524288,
-	IRQD_FORWARDED_TO_VCPU = 1048576,
-	IRQD_AFFINITY_MANAGED = 2097152,
-	IRQD_IRQ_STARTED = 4194304,
-	IRQD_MANAGED_SHUTDOWN = 8388608,
-	IRQD_SINGLE_TARGET = 16777216,
-	IRQD_DEFAULT_TRIGGER_SET = 33554432,
-	IRQD_CAN_RESERVE = 67108864,
-};
-
-struct irq_cfg {
-	unsigned int dest_apicid;
-	unsigned int vector;
-};
-
-enum {
-	IRQCHIP_FWNODE_REAL = 0,
-	IRQCHIP_FWNODE_NAMED = 1,
-	IRQCHIP_FWNODE_NAMED_ID = 2,
-};
-
-enum {
-	X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 1,
-	X86_IRQ_ALLOC_LEGACY = 2,
-};
-
-struct apic_chip_data {
-	struct irq_cfg hw_irq_cfg;
-	unsigned int vector;
-	unsigned int prev_vector;
-	unsigned int cpu;
-	unsigned int prev_cpu;
-	unsigned int irq;
-	struct hlist_node clist;
-	unsigned int move_in_progress: 1;
-	unsigned int is_managed: 1;
-	unsigned int can_reserve: 1;
-	unsigned int has_reserved: 1;
-};
-
-struct irq_matrix;
-
-union IO_APIC_reg_00 {
-	u32 raw;
-	struct {
-		u32 __reserved_2: 14;
-		u32 LTS: 1;
-		u32 delivery_type: 1;
-		u32 __reserved_1: 8;
-		u32 ID: 8;
-	} bits;
-};
-
-union IO_APIC_reg_01 {
-	u32 raw;
-	struct {
-		u32 version: 8;
-		u32 __reserved_2: 7;
-		u32 PRQ: 1;
-		u32 entries: 8;
-		u32 __reserved_1: 8;
-	} bits;
-};
-
-union IO_APIC_reg_02 {
-	u32 raw;
-	struct {
-		u32 __reserved_2: 24;
-		u32 arbitration: 4;
-		u32 __reserved_1: 4;
-	} bits;
-};
-
-union IO_APIC_reg_03 {
-	u32 raw;
-	struct {
-		u32 boot_DT: 1;
-		u32 __reserved_1: 31;
-	} bits;
-};
-
-struct IR_IO_APIC_route_entry {
-	__u64 vector: 8;
-	__u64 zero: 3;
-	__u64 index2: 1;
-	__u64 delivery_status: 1;
-	__u64 polarity: 1;
-	__u64 irr: 1;
-	__u64 trigger: 1;
-	__u64 mask: 1;
-	__u64 reserved: 31;
-	__u64 format: 1;
-	__u64 index: 15;
-};
-
-enum {
-	IRQ_TYPE_NONE = 0,
-	IRQ_TYPE_EDGE_RISING = 1,
-	IRQ_TYPE_EDGE_FALLING = 2,
-	IRQ_TYPE_EDGE_BOTH = 3,
-	IRQ_TYPE_LEVEL_HIGH = 4,
-	IRQ_TYPE_LEVEL_LOW = 8,
-	IRQ_TYPE_LEVEL_MASK = 12,
-	IRQ_TYPE_SENSE_MASK = 15,
-	IRQ_TYPE_DEFAULT = 15,
-	IRQ_TYPE_PROBE = 16,
-	IRQ_LEVEL = 256,
-	IRQ_PER_CPU = 512,
-	IRQ_NOPROBE = 1024,
-	IRQ_NOREQUEST = 2048,
-	IRQ_NOAUTOEN = 4096,
-	IRQ_NO_BALANCING = 8192,
-	IRQ_MOVE_PCNTXT = 16384,
-	IRQ_NESTED_THREAD = 32768,
-	IRQ_NOTHREAD = 65536,
-	IRQ_PER_CPU_DEVID = 131072,
-	IRQ_IS_POLLED = 262144,
-	IRQ_DISABLE_UNLAZY = 524288,
-};
-
-enum {
-	IRQCHIP_SET_TYPE_MASKED = 1,
-	IRQCHIP_EOI_IF_HANDLED = 2,
-	IRQCHIP_MASK_ON_SUSPEND = 4,
-	IRQCHIP_ONOFFLINE_ENABLED = 8,
-	IRQCHIP_SKIP_SET_WAKE = 16,
-	IRQCHIP_ONESHOT_SAFE = 32,
-	IRQCHIP_EOI_THREADED = 64,
-	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
-	IRQCHIP_SUPPORTS_NMI = 256,
-};
-
-struct irq_pin_list {
-	struct list_head list;
-	int apic;
-	int pin;
-};
-
-struct mp_chip_data {
-	struct list_head irq_2_pin;
-	struct IO_APIC_route_entry entry;
-	int trigger;
-	int polarity;
-	u32 count;
-	bool isa_irq;
-};
-
-struct mp_ioapic_gsi {
-	u32 gsi_base;
-	u32 gsi_end;
-};
-
-struct ioapic {
-	int nr_registers;
-	struct IO_APIC_route_entry *saved_registers;
-	struct mpc_ioapic mp_config;
-	struct mp_ioapic_gsi gsi_config;
-	struct ioapic_domain_cfg irqdomain_cfg;
-	struct irq_domain *irqdomain;
-	struct resource *iomem_res;
-};
-
-struct io_apic {
-	unsigned int index;
-	unsigned int unused[3];
-	unsigned int data;
-	unsigned int unused2[11];
-	unsigned int eoi;
-};
-
-union entry_union {
-	struct {
-		u32 w1;
-		u32 w2;
-	};
-	struct IO_APIC_route_entry entry;
-};
-
-typedef struct irq_alloc_info msi_alloc_info_t;
-
-struct msi_domain_info;
-
-struct msi_domain_ops {
-	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
-	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
-	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
-	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
-	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
-	void (*msi_finish)(msi_alloc_info_t *, int);
-	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
-	int (*handle_error)(struct irq_domain *, struct msi_desc *, int);
-};
-
-struct msi_domain_info {
-	u32 flags;
-	struct msi_domain_ops *ops;
-	struct irq_chip *chip;
-	void *chip_data;
-	irq_flow_handler_t handler;
-	void *handler_data;
-	const char *handler_name;
-	void *data;
-};
-
-enum {
-	MSI_FLAG_USE_DEF_DOM_OPS = 1,
-	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
-	MSI_FLAG_MULTI_PCI_MSI = 4,
-	MSI_FLAG_PCI_MSIX = 8,
-	MSI_FLAG_ACTIVATE_EARLY = 16,
-	MSI_FLAG_MUST_REACTIVATE = 32,
-	MSI_FLAG_LEVEL_CAPABLE = 64,
-};
-
-struct hpet_channel;
-
-struct x86_mapping_info {
-	void * (*alloc_pgt_page)(void *);
-	void *context;
-	long unsigned int page_flag;
-	long unsigned int offset;
-	bool direct_gbpages;
-	long unsigned int kernpg_flag;
-};
-
-struct kexec_file_ops;
-
-struct init_pgtable_data {
-	struct x86_mapping_info *info;
-	pgd_t *level4p;
-};
-
-struct kretprobe_instance;
-
-typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
-
-struct kretprobe;
-
-struct kretprobe_instance {
-	struct hlist_node hlist;
-	struct kretprobe *rp;
-	kprobe_opcode_t *ret_addr;
-	struct task_struct *task;
-	void *fp;
-	char data[0];
-};
-
-struct kretprobe {
-	struct kprobe kp;
-	kretprobe_handler_t handler;
-	kretprobe_handler_t entry_handler;
-	int maxactive;
-	int nmissed;
-	size_t data_size;
-	struct hlist_head free_instances;
-	raw_spinlock_t lock;
-};
-
-typedef struct kprobe *pto_T_____12;
-
-struct __arch_relative_insn {
-	u8 op;
-	s32 raddr;
-} __attribute__((packed));
-
-struct arch_optimized_insn {
-	kprobe_opcode_t copied_insn[4];
-	kprobe_opcode_t *insn;
-	size_t size;
-};
-
-struct optimized_kprobe {
-	struct kprobe kp;
-	struct list_head list;
-	struct arch_optimized_insn optinsn;
-};
-
-typedef __u64 Elf64_Off;
-
-struct elf64_rela {
-	Elf64_Addr r_offset;
-	Elf64_Xword r_info;
-	Elf64_Sxword r_addend;
-};
-
-typedef struct elf64_rela Elf64_Rela;
-
-struct elf64_hdr {
-	unsigned char e_ident[16];
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;
-	Elf64_Off e_phoff;
-	Elf64_Off e_shoff;
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
-};
-
-typedef struct elf64_hdr Elf64_Ehdr;
-
-struct elf64_shdr {
-	Elf64_Word sh_name;
-	Elf64_Word sh_type;
-	Elf64_Xword sh_flags;
-	Elf64_Addr sh_addr;
-	Elf64_Off sh_offset;
-	Elf64_Xword sh_size;
-	Elf64_Word sh_link;
-	Elf64_Word sh_info;
-	Elf64_Xword sh_addralign;
-	Elf64_Xword sh_entsize;
-};
-
-typedef struct elf64_shdr Elf64_Shdr;
-
-struct hpet_data {
-	long unsigned int hd_phys_address;
-	void *hd_address;
-	short unsigned int hd_nirqs;
-	unsigned int hd_state;
-	unsigned int hd_irq[32];
-};
-
-typedef irqreturn_t (*rtc_irq_handler)(int, void *);
-
-enum hpet_mode {
-	HPET_MODE_UNUSED = 0,
-	HPET_MODE_LEGACY = 1,
-	HPET_MODE_CLOCKEVT = 2,
-	HPET_MODE_DEVICE = 3,
-};
-
-struct hpet_channel___2 {
-	struct clock_event_device evt;
-	unsigned int num;
-	unsigned int cpu;
-	unsigned int irq;
-	unsigned int in_use;
-	enum hpet_mode mode;
-	unsigned int boot_cfg;
-	char name[10];
-	long: 48;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct hpet_base {
-	unsigned int nr_channels;
-	unsigned int nr_clockevents;
-	unsigned int boot_cfg;
-	struct hpet_channel___2 *channels;
-};
-
-union hpet_lock {
-	struct {
-		arch_spinlock_t lock;
-		u32 value;
-	};
-	u64 lockval;
-};
-
-struct amd_northbridge_info {
-	u16 num;
-	u64 flags;
-	struct amd_northbridge *nb;
-};
-
-struct scan_area {
-	u64 addr;
-	u64 size;
-};
-
-struct uprobe_xol_ops;
-
-struct arch_uprobe {
-	union {
-		u8 insn[16];
-		u8 ixol[16];
-	};
-	const struct uprobe_xol_ops *ops;
-	union {
-		struct {
-			s32 offs;
-			u8 ilen;
-			u8 opc1;
-		} branch;
-		struct {
-			u8 fixups;
-			u8 ilen;
-		} defparam;
-		struct {
-			u8 reg_offset;
-			u8 ilen;
-		} push;
-	};
-};
-
-struct uprobe_xol_ops {
-	bool (*emulate)(struct arch_uprobe *, struct pt_regs *);
-	int (*pre_xol)(struct arch_uprobe *, struct pt_regs *);
-	int (*post_xol)(struct arch_uprobe *, struct pt_regs *);
-	void (*abort)(struct arch_uprobe *, struct pt_regs *);
-};
-
-enum rp_check {
-	RP_CHECK_CALL = 0,
-	RP_CHECK_CHAIN_CALL = 1,
-	RP_CHECK_RET = 2,
-};
-
-enum dev_prop_type {
-	DEV_PROP_U8 = 0,
-	DEV_PROP_U16 = 1,
-	DEV_PROP_U32 = 2,
-	DEV_PROP_U64 = 3,
-	DEV_PROP_STRING = 4,
-};
-
-struct property_entry {
-	const char *name;
-	size_t length;
-	bool is_array;
-	enum dev_prop_type type;
-	union {
-		const void *pointer;
-		union {
-			u8 u8_data;
-			u16 u16_data;
-			u32 u32_data;
-			u64 u64_data;
-			const char *str;
-		} value;
-	};
-};
-
-struct fb_fix_screeninfo {
-	char id[16];
-	long unsigned int smem_start;
-	__u32 smem_len;
-	__u32 type;
-	__u32 type_aux;
-	__u32 visual;
-	__u16 xpanstep;
-	__u16 ypanstep;
-	__u16 ywrapstep;
-	__u32 line_length;
-	long unsigned int mmio_start;
-	__u32 mmio_len;
-	__u32 accel;
-	__u16 capabilities;
-	__u16 reserved[2];
-};
-
-struct fb_bitfield {
-	__u32 offset;
-	__u32 length;
-	__u32 msb_right;
-};
-
-struct fb_var_screeninfo {
-	__u32 xres;
-	__u32 yres;
-	__u32 xres_virtual;
-	__u32 yres_virtual;
-	__u32 xoffset;
-	__u32 yoffset;
-	__u32 bits_per_pixel;
-	__u32 grayscale;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	__u32 nonstd;
-	__u32 activate;
-	__u32 height;
-	__u32 width;
-	__u32 accel_flags;
-	__u32 pixclock;
-	__u32 left_margin;
-	__u32 right_margin;
-	__u32 upper_margin;
-	__u32 lower_margin;
-	__u32 hsync_len;
-	__u32 vsync_len;
-	__u32 sync;
-	__u32 vmode;
-	__u32 rotate;
-	__u32 colorspace;
-	__u32 reserved[4];
-};
-
-struct fb_cmap {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-struct fb_copyarea {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 sx;
-	__u32 sy;
-};
-
-struct fb_fillrect {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 color;
-	__u32 rop;
-};
-
-struct fb_image {
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-	__u32 fg_color;
-	__u32 bg_color;
-	__u8 depth;
-	const char *data;
-	struct fb_cmap cmap;
-};
-
-struct fbcurpos {
-	__u16 x;
-	__u16 y;
-};
-
-struct fb_cursor {
-	__u16 set;
-	__u16 enable;
-	__u16 rop;
-	const char *mask;
-	struct fbcurpos hot;
-	struct fb_image image;
-};
-
-struct fb_chroma {
-	__u32 redx;
-	__u32 greenx;
-	__u32 bluex;
-	__u32 whitex;
-	__u32 redy;
-	__u32 greeny;
-	__u32 bluey;
-	__u32 whitey;
-};
-
-struct fb_videomode;
-
-struct fb_monspecs {
-	struct fb_chroma chroma;
-	struct fb_videomode *modedb;
-	__u8 manufacturer[4];
-	__u8 monitor[14];
-	__u8 serial_no[14];
-	__u8 ascii[14];
-	__u32 modedb_len;
-	__u32 model;
-	__u32 serial;
-	__u32 year;
-	__u32 week;
-	__u32 hfmin;
-	__u32 hfmax;
-	__u32 dclkmin;
-	__u32 dclkmax;
-	__u16 input;
-	__u16 dpms;
-	__u16 signal;
-	__u16 vfmin;
-	__u16 vfmax;
-	__u16 gamma;
-	__u16 gtf: 1;
-	__u16 misc;
-	__u8 version;
-	__u8 revision;
-	__u8 max_x;
-	__u8 max_y;
-};
-
-struct fb_info;
-
-struct fb_pixmap {
-	u8 *addr;
-	u32 size;
-	u32 offset;
-	u32 buf_align;
-	u32 scan_align;
-	u32 access_align;
-	u32 flags;
-	u32 blit_x;
-	u32 blit_y;
-	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
-	void (*readio)(struct fb_info *, void *, void *, unsigned int);
-};
-
-struct fb_deferred_io;
-
-struct fb_ops;
-
-struct fb_tile_ops;
-
-struct apertures_struct;
-
-struct fb_info {
-	atomic_t count;
-	int node;
-	int flags;
-	int fbcon_rotate_hint;
-	struct mutex lock;
-	struct mutex mm_lock;
-	struct fb_var_screeninfo var;
-	struct fb_fix_screeninfo fix;
-	struct fb_monspecs monspecs;
-	struct work_struct queue;
-	struct fb_pixmap pixmap;
-	struct fb_pixmap sprite;
-	struct fb_cmap cmap;
-	struct list_head modelist;
-	struct fb_videomode *mode;
-	struct delayed_work deferred_work;
-	struct fb_deferred_io *fbdefio;
-	struct fb_ops *fbops;
-	struct device *device;
-	struct device *dev;
-	int class_flag;
-	struct fb_tile_ops *tileops;
-	union {
-		char *screen_base;
-		char *screen_buffer;
-	};
-	long unsigned int screen_size;
-	void *pseudo_palette;
-	u32 state;
-	void *fbcon_par;
-	void *par;
-	struct apertures_struct *apertures;
-	bool skip_vt_switch;
-};
-
-struct fb_videomode {
-	const char *name;
-	u32 refresh;
-	u32 xres;
-	u32 yres;
-	u32 pixclock;
-	u32 left_margin;
-	u32 right_margin;
-	u32 upper_margin;
-	u32 lower_margin;
-	u32 hsync_len;
-	u32 vsync_len;
-	u32 sync;
-	u32 vmode;
-	u32 flag;
-};
-
-struct fb_blit_caps {
-	u32 x;
-	u32 y;
-	u32 len;
-	u32 flags;
-};
-
-struct fb_deferred_io {
-	long unsigned int delay;
-	struct mutex lock;
-	struct list_head pagelist;
-	void (*first_io)(struct fb_info *);
-	void (*deferred_io)(struct fb_info *, struct list_head *);
-};
-
-struct fb_ops {
-	struct module *owner;
-	int (*fb_open)(struct fb_info *, int);
-	int (*fb_release)(struct fb_info *, int);
-	ssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);
-	ssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);
-	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
-	int (*fb_set_par)(struct fb_info *);
-	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
-	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
-	int (*fb_blank)(int, struct fb_info *);
-	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
-	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
-	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
-	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
-	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
-	int (*fb_sync)(struct fb_info *);
-	int (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);
-	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
-	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
-	void (*fb_destroy)(struct fb_info *);
-	int (*fb_debug_enter)(struct fb_info *);
-	int (*fb_debug_leave)(struct fb_info *);
-};
-
-struct fb_tilemap {
-	__u32 width;
-	__u32 height;
-	__u32 depth;
-	__u32 length;
-	const __u8 *data;
-};
-
-struct fb_tilerect {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 index;
-	__u32 fg;
-	__u32 bg;
-	__u32 rop;
-};
-
-struct fb_tilearea {
-	__u32 sx;
-	__u32 sy;
-	__u32 dx;
-	__u32 dy;
-	__u32 width;
-	__u32 height;
-};
-
-struct fb_tileblit {
-	__u32 sx;
-	__u32 sy;
-	__u32 width;
-	__u32 height;
-	__u32 fg;
-	__u32 bg;
-	__u32 length;
-	__u32 *indices;
-};
-
-struct fb_tilecursor {
-	__u32 sx;
-	__u32 sy;
-	__u32 mode;
-	__u32 shape;
-	__u32 fg;
-	__u32 bg;
-};
-
-struct fb_tile_ops {
-	void (*fb_settile)(struct fb_info *, struct fb_tilemap *);
-	void (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);
-	void (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);
-	void (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);
-	void (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);
-	int (*fb_get_tilemax)(struct fb_info *);
-};
-
-struct aperture {
-	resource_size_t base;
-	resource_size_t size;
-};
-
-struct apertures_struct {
-	unsigned int count;
-	struct aperture ranges[0];
-};
-
-struct dmt_videomode {
-	u32 dmt_id;
-	u32 std_2byte_code;
-	u32 cvt_3byte_code;
-	const struct fb_videomode *mode;
-};
-
-struct simplefb_platform_data {
-	u32 width;
-	u32 height;
-	u32 stride;
-	const char *format;
-};
-
-struct efifb_dmi_info {
-	char *optname;
-	long unsigned int base;
-	int stride;
-	int width;
-	int height;
-	int flags;
-};
-
-enum {
-	M_I17 = 0,
-	M_I20 = 1,
-	M_I20_SR = 2,
-	M_I24 = 3,
-	M_I24_8_1 = 4,
-	M_I24_10_1 = 5,
-	M_I27_11_1 = 6,
-	M_MINI = 7,
-	M_MINI_3_1 = 8,
-	M_MINI_4_1 = 9,
-	M_MB = 10,
-	M_MB_2 = 11,
-	M_MB_3 = 12,
-	M_MB_5_1 = 13,
-	M_MB_6_1 = 14,
-	M_MB_7_1 = 15,
-	M_MB_SR = 16,
-	M_MBA = 17,
-	M_MBA_3 = 18,
-	M_MBP = 19,
-	M_MBP_2 = 20,
-	M_MBP_2_2 = 21,
-	M_MBP_SR = 22,
-	M_MBP_4 = 23,
-	M_MBP_5_1 = 24,
-	M_MBP_5_2 = 25,
-	M_MBP_5_3 = 26,
-	M_MBP_6_1 = 27,
-	M_MBP_6_2 = 28,
-	M_MBP_7_1 = 29,
-	M_MBP_8_2 = 30,
-	M_UNKNOWN = 31,
-};
-
-enum {
-	OVERRIDE_NONE = 0,
-	OVERRIDE_BASE = 1,
-	OVERRIDE_STRIDE = 2,
-	OVERRIDE_HEIGHT = 4,
-	OVERRIDE_WIDTH = 8,
-};
-
-enum perf_sample_regs_abi {
-	PERF_SAMPLE_REGS_ABI_NONE = 0,
-	PERF_SAMPLE_REGS_ABI_32 = 1,
-	PERF_SAMPLE_REGS_ABI_64 = 2,
-};
-
-struct __va_list_tag {
-	unsigned int gp_offset;
-	unsigned int fp_offset;
-	void *overflow_arg_area;
-	void *reg_save_area;
-};
-
-typedef __builtin_va_list __gnuc_va_list;
-
-typedef __gnuc_va_list va_list;
-
-struct va_format {
-	const char *fmt;
-	va_list *va;
-};
-
-struct pci_hostbridge_probe {
-	u32 bus;
-	u32 slot;
-	u32 vendor;
-	u32 device;
-};
-
-enum pg_level {
-	PG_LEVEL_NONE = 0,
-	PG_LEVEL_4K = 1,
-	PG_LEVEL_2M = 2,
-	PG_LEVEL_1G = 3,
-	PG_LEVEL_512G = 4,
-	PG_LEVEL_NUM = 5,
-};
-
-struct trace_print_flags {
-	long unsigned int mask;
-	const char *name;
-};
-
-enum tlb_flush_reason {
-	TLB_FLUSH_ON_TASK_SWITCH = 0,
-	TLB_REMOTE_SHOOTDOWN = 1,
-	TLB_LOCAL_SHOOTDOWN = 2,
-	TLB_LOCAL_MM_SHOOTDOWN = 3,
-	TLB_REMOTE_SEND_IPI = 4,
-	NR_TLB_FLUSH_REASONS = 5,
-};
-
-enum {
-	REGION_INTERSECTS = 0,
-	REGION_DISJOINT = 1,
-	REGION_MIXED = 2,
-};
-
-struct trace_event_raw_tlb_flush {
-	struct trace_entry ent;
-	int reason;
-	long unsigned int pages;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_tlb_flush {};
-
-typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
-
-struct map_range {
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int page_size_mask;
-};
-
-enum kcore_type {
-	KCORE_TEXT = 0,
-	KCORE_VMALLOC = 1,
-	KCORE_RAM = 2,
-	KCORE_VMEMMAP = 3,
-	KCORE_USER = 4,
-	KCORE_OTHER = 5,
-	KCORE_REMAP = 6,
-};
-
-struct kcore_list {
-	struct list_head list;
-	long unsigned int addr;
-	long unsigned int vaddr;
-	size_t size;
-	int type;
-};
-
-struct hstate {
-	int next_nid_to_alloc;
-	int next_nid_to_free;
-	unsigned int order;
-	long unsigned int mask;
-	long unsigned int max_huge_pages;
-	long unsigned int nr_huge_pages;
-	long unsigned int free_huge_pages;
-	long unsigned int resv_huge_pages;
-	long unsigned int surplus_huge_pages;
-	long unsigned int nr_overcommit_huge_pages;
-	struct list_head hugepage_activelist;
-	struct list_head hugepage_freelists[64];
-	unsigned int nr_huge_pages_node[64];
-	unsigned int free_huge_pages_node[64];
-	unsigned int surplus_huge_pages_node[64];
-	char name[32];
-};
-
-struct trace_event_raw_x86_exceptions {
-	struct trace_entry ent;
-	long unsigned int address;
-	long unsigned int ip;
-	long unsigned int error_code;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_x86_exceptions {};
-
-typedef void (*btf_trace_page_fault_user)(void *, long unsigned int, struct pt_regs *, long unsigned int);
-
-typedef void (*btf_trace_page_fault_kernel)(void *, long unsigned int, struct pt_regs *, long unsigned int);
-
-enum {
-	IORES_MAP_SYSTEM_RAM = 1,
-	IORES_MAP_ENCRYPTED = 2,
-};
-
-struct ioremap_desc {
-	unsigned int flags;
-};
-
-typedef bool (*ex_handler_t)(const struct exception_table_entry *, struct pt_regs *, int, long unsigned int, long unsigned int);
-
-struct cpa_data {
-	long unsigned int *vaddr;
-	pgd_t *pgd;
-	pgprot_t mask_set;
-	pgprot_t mask_clr;
-	long unsigned int numpages;
-	long unsigned int curpage;
-	long unsigned int pfn;
-	unsigned int flags;
-	unsigned int force_split: 1;
-	unsigned int force_static_prot: 1;
-	struct page **pages;
-};
-
-enum cpa_warn {
-	CPA_CONFLICT = 0,
-	CPA_PROTECT = 1,
-	CPA_DETECT = 2,
-};
-
-typedef struct {
-	u64 val;
-} pfn_t;
-
-struct memtype {
-	u64 start;
-	u64 end;
-	u64 subtree_max_end;
-	enum page_cache_mode type;
-	struct rb_node rb;
-};
-
-enum {
-	PAT_UC = 0,
-	PAT_WC = 1,
-	PAT_WT = 4,
-	PAT_WP = 5,
-	PAT_WB = 6,
-	PAT_UC_MINUS = 7,
-};
-
-struct pagerange_state {
-	long unsigned int cur_pfn;
-	int ram;
-	int not_ram;
-};
-
-struct flush_tlb_info {
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	u64 new_tlb_gen;
-	unsigned int stride_shift;
-	bool freed_tables;
-};
-
-typedef u16 pto_T_____13;
-
-typedef struct mm_struct *pto_T_____14;
-
-struct exception_stacks {
-	char DF_stack_guard[0];
-	char DF_stack[4096];
-	char NMI_stack_guard[0];
-	char NMI_stack[4096];
-	char DB2_stack_guard[0];
-	char DB2_stack[0];
-	char DB1_stack_guard[0];
-	char DB1_stack[4096];
-	char DB_stack_guard[0];
-	char DB_stack[4096];
-	char MCE_stack_guard[0];
-	char MCE_stack[4096];
-	char IST_top_guard[0];
-};
-
-struct rb_augment_callbacks {
-	void (*propagate)(struct rb_node *, struct rb_node *);
-	void (*copy)(struct rb_node *, struct rb_node *);
-	void (*rotate)(struct rb_node *, struct rb_node *);
-};
-
-enum {
-	MEMTYPE_EXACT_MATCH = 0,
-	MEMTYPE_END_MATCH = 1,
-};
-
-struct hugepage_subpool {
-	spinlock_t lock;
-	long int count;
-	long int max_hpages;
-	long int used_hpages;
-	struct hstate *hstate;
-	long int min_hpages;
-	long int rsv_hpages;
-};
-
-struct hugetlbfs_sb_info {
-	long int max_inodes;
-	long int free_inodes;
-	spinlock_t stat_lock;
-	struct hstate *hstate;
-	struct hugepage_subpool *spool;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-struct numa_memblk {
-	u64 start;
-	u64 end;
-	int nid;
-};
-
-struct numa_meminfo {
-	int nr_blks;
-	struct numa_memblk blk[128];
-};
-
-struct acpi_srat_cpu_affinity {
-	struct acpi_subtable_header header;
-	u8 proximity_domain_lo;
-	u8 apic_id;
-	u32 flags;
-	u8 local_sapic_eid;
-	u8 proximity_domain_hi[3];
-	u32 clock_domain;
-};
-
-struct acpi_srat_x2apic_cpu_affinity {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 proximity_domain;
-	u32 apic_id;
-	u32 flags;
-	u32 clock_domain;
-	u32 reserved2;
-};
-
-enum uv_system_type {
-	UV_NONE = 0,
-	UV_LEGACY_APIC = 1,
-	UV_X2APIC = 2,
-	UV_NON_UNIQUE_APIC = 3,
-};
-
-struct rnd_state {
-	__u32 s1;
-	__u32 s2;
-	__u32 s3;
-	__u32 s4;
-};
-
-struct kaslr_memory_region {
-	long unsigned int *base;
-	long unsigned int size_tb;
-};
-
-enum pti_mode {
-	PTI_AUTO = 0,
-	PTI_FORCE_OFF = 1,
-	PTI_FORCE_ON = 2,
-};
-
-enum pti_clone_level {
-	PTI_CLONE_PMD = 0,
-	PTI_CLONE_PTE = 1,
-};
-
-typedef short unsigned int __kernel_old_uid_t;
-
-typedef short unsigned int __kernel_old_gid_t;
-
-typedef struct {
-	int val[2];
-} __kernel_fsid_t;
-
-typedef __kernel_old_uid_t old_uid_t;
-
-typedef __kernel_old_gid_t old_gid_t;
-
-struct kstatfs {
-	long int f_type;
-	long int f_bsize;
-	u64 f_blocks;
-	u64 f_bfree;
-	u64 f_bavail;
-	u64 f_files;
-	u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	long int f_namelen;
-	long int f_frsize;
-	long int f_flags;
-	long int f_spare[4];
-};
-
-struct kernel_clone_args {
-	u64 flags;
-	int *pidfd;
-	int *child_tid;
-	int *parent_tid;
-	int exit_signal;
-	long unsigned int stack;
-	long unsigned int stack_size;
-	long unsigned int tls;
-	pid_t *set_tid;
-	size_t set_tid_size;
-};
-
-struct stat64 {
-	long long unsigned int st_dev;
-	unsigned char __pad0[4];
-	unsigned int __st_ino;
-	unsigned int st_mode;
-	unsigned int st_nlink;
-	unsigned int st_uid;
-	unsigned int st_gid;
-	long long unsigned int st_rdev;
-	unsigned char __pad3[4];
-	long long int st_size;
-	unsigned int st_blksize;
-	long long int st_blocks;
-	unsigned int st_atime;
-	unsigned int st_atime_nsec;
-	unsigned int st_mtime;
-	unsigned int st_mtime_nsec;
-	unsigned int st_ctime;
-	unsigned int st_ctime_nsec;
-	long long unsigned int st_ino;
-} __attribute__((packed));
-
-struct mmap_arg_struct32 {
-	unsigned int addr;
-	unsigned int len;
-	unsigned int prot;
-	unsigned int flags;
-	unsigned int fd;
-	unsigned int offset;
-};
-
-struct sigcontext_32 {
-	__u16 gs;
-	__u16 __gsh;
-	__u16 fs;
-	__u16 __fsh;
-	__u16 es;
-	__u16 __esh;
-	__u16 ds;
-	__u16 __dsh;
-	__u32 di;
-	__u32 si;
-	__u32 bp;
-	__u32 sp;
-	__u32 bx;
-	__u32 dx;
-	__u32 cx;
-	__u32 ax;
-	__u32 trapno;
-	__u32 err;
-	__u32 ip;
-	__u16 cs;
-	__u16 __csh;
-	__u32 flags;
-	__u32 sp_at_signal;
-	__u16 ss;
-	__u16 __ssh;
-	__u32 fpstate;
-	__u32 oldmask;
-	__u32 cr2;
-};
-
-typedef u32 compat_size_t;
-
-struct compat_sigaltstack {
-	compat_uptr_t ss_sp;
-	int ss_flags;
-	compat_size_t ss_size;
-};
-
-typedef struct compat_sigaltstack compat_stack_t;
-
-struct ucontext_ia32 {
-	unsigned int uc_flags;
-	unsigned int uc_link;
-	compat_stack_t uc_stack;
-	struct sigcontext_32 uc_mcontext;
-	compat_sigset_t uc_sigmask;
-};
-
-struct sigframe_ia32 {
-	u32 pretcode;
-	int sig;
-	struct sigcontext_32 sc;
-	struct _fpstate_32 fpstate_unused;
-	unsigned int extramask[1];
-	char retcode[8];
-};
-
-struct rt_sigframe_ia32 {
-	u32 pretcode;
-	int sig;
-	u32 pinfo;
-	u32 puc;
-	compat_siginfo_t info;
-	struct ucontext_ia32 uc;
-	char retcode[8];
-};
-
-typedef struct {
-	efi_guid_t guid;
-	u64 table;
-} efi_config_table_64_t;
-
-struct efi_mem_range {
-	struct range range;
-	u64 attribute;
-};
-
-struct efi_setup_data {
-	u64 fw_vendor;
-	u64 runtime;
-	u64 tables;
-	u64 smbios;
-	u64 reserved[8];
-};
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 get_time;
-	u32 set_time;
-	u32 get_wakeup_time;
-	u32 set_wakeup_time;
-	u32 set_virtual_address_map;
-	u32 convert_pointer;
-	u32 get_variable;
-	u32 get_next_variable;
-	u32 set_variable;
-	u32 get_next_high_mono_count;
-	u32 reset_system;
-	u32 update_capsule;
-	u32 query_capsule_caps;
-	u32 query_variable_info;
-} efi_runtime_services_32_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u64 get_time;
-	u64 set_time;
-	u64 get_wakeup_time;
-	u64 set_wakeup_time;
-	u64 set_virtual_address_map;
-	u64 convert_pointer;
-	u64 get_variable;
-	u64 get_next_variable;
-	u64 set_variable;
-	u64 get_next_high_mono_count;
-	u64 reset_system;
-	u64 update_capsule;
-	u64 query_capsule_caps;
-	u64 query_variable_info;
-} efi_runtime_services_64_t;
-
-typedef struct {
-	efi_guid_t guid;
-	const char *name;
-	long unsigned int *ptr;
-} efi_config_table_type_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u64 fw_vendor;
-	u32 fw_revision;
-	u32 __pad1;
-	u64 con_in_handle;
-	u64 con_in;
-	u64 con_out_handle;
-	u64 con_out;
-	u64 stderr_handle;
-	u64 stderr;
-	u64 runtime;
-	u64 boottime;
-	u32 nr_tables;
-	u32 __pad2;
-	u64 tables;
-} efi_system_table_64_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 fw_vendor;
-	u32 fw_revision;
-	u32 con_in_handle;
-	u32 con_in;
-	u32 con_out_handle;
-	u32 con_out;
-	u32 stderr_handle;
-	u32 stderr;
-	u32 runtime;
-	u32 boottime;
-	u32 nr_tables;
-	u32 tables;
-} efi_system_table_32_t;
-
-struct efi_memory_map_data {
-	phys_addr_t phys_map;
-	long unsigned int size;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-};
-
-struct wait_queue_entry;
-
-typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
-
-struct wait_queue_entry {
-	unsigned int flags;
-	void *private;
-	wait_queue_func_t func;
-	struct list_head entry;
-};
-
-enum {
-	PM_QOS_RESERVED = 0,
-	PM_QOS_CPU_DMA_LATENCY = 1,
-	PM_QOS_NUM_CLASSES = 2,
-};
-
-struct pm_qos_request {
-	struct plist_node node;
-	int pm_qos_class;
-	struct delayed_work work;
-};
-
-enum {
-	BPF_REG_0 = 0,
-	BPF_REG_1 = 1,
-	BPF_REG_2 = 2,
-	BPF_REG_3 = 3,
-	BPF_REG_4 = 4,
-	BPF_REG_5 = 5,
-	BPF_REG_6 = 6,
-	BPF_REG_7 = 7,
-	BPF_REG_8 = 8,
-	BPF_REG_9 = 9,
-	BPF_REG_10 = 10,
-	__MAX_BPF_REG = 11,
-};
-
-enum bpf_jit_poke_reason {
-	BPF_POKE_REASON_TAIL_CALL = 0,
-};
-
-struct bpf_array_aux {
-	enum bpf_prog_type type;
-	bool jited;
-	struct list_head poke_progs;
-	struct bpf_map *map;
-	struct mutex poke_mutex;
-	struct work_struct work;
-};
-
-struct bpf_array {
-	struct bpf_map map;
-	u32 elem_size;
-	u32 index_mask;
-	struct bpf_array_aux *aux;
-	union {
-		char value[0];
-		void *ptrs[0];
-		void *pptrs[0];
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum bpf_text_poke_type {
-	BPF_MOD_CALL = 0,
-	BPF_MOD_JUMP = 1,
-};
-
-struct bpf_binary_header {
-	u32 pages;
-	int: 32;
-	u8 image[0];
-};
-
-struct jit_context {
-	int cleanup_addr;
-};
-
-struct x64_jit_data {
-	struct bpf_binary_header *header;
-	int *addrs;
-	u8 *image;
-	int proglen;
-	struct jit_context ctx;
-};
-
-enum tk_offsets {
-	TK_OFFS_REAL = 0,
-	TK_OFFS_BOOT = 1,
-	TK_OFFS_TAI = 2,
-	TK_OFFS_MAX = 3,
-};
-
-struct clone_args {
-	__u64 flags;
-	__u64 pidfd;
-	__u64 child_tid;
-	__u64 parent_tid;
-	__u64 exit_signal;
-	__u64 stack;
-	__u64 stack_size;
-	__u64 tls;
-	__u64 set_tid;
-	__u64 set_tid_size;
-};
-
-struct fdtable {
-	unsigned int max_fds;
-	struct file **fd;
-	long unsigned int *close_on_exec;
-	long unsigned int *open_fds;
-	long unsigned int *full_fds_bits;
-	struct callback_head rcu;
-};
-
-struct files_struct {
-	atomic_t count;
-	bool resize_in_progress;
-	wait_queue_head_t resize_wait;
-	struct fdtable *fdt;
-	struct fdtable fdtab;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t file_lock;
-	unsigned int next_fd;
-	long unsigned int close_on_exec_init[1];
-	long unsigned int open_fds_init[1];
-	long unsigned int full_fds_bits_init[1];
-	struct file *fd_array[64];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct robust_list {
-	struct robust_list *next;
-};
-
-struct robust_list_head {
-	struct robust_list list;
-	long int futex_offset;
-	struct robust_list *list_op_pending;
-};
-
-struct multiprocess_signals {
-	sigset_t signal;
-	struct hlist_node node;
-};
-
-typedef int (*proc_visitor)(struct task_struct *, void *);
-
-enum {
-	IOPRIO_CLASS_NONE = 0,
-	IOPRIO_CLASS_RT = 1,
-	IOPRIO_CLASS_BE = 2,
-	IOPRIO_CLASS_IDLE = 3,
-};
-
-enum memcg_stat_item {
-	MEMCG_CACHE = 32,
-	MEMCG_RSS = 33,
-	MEMCG_RSS_HUGE = 34,
-	MEMCG_SWAP = 35,
-	MEMCG_SOCK = 36,
-	MEMCG_KERNEL_STACK_KB = 37,
-	MEMCG_NR_STAT = 38,
-};
-
-typedef struct poll_table_struct poll_table;
-
-enum {
-	FUTEX_STATE_OK = 0,
-	FUTEX_STATE_EXITING = 1,
-	FUTEX_STATE_DEAD = 2,
-};
-
-struct trace_event_raw_task_newtask {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	long unsigned int clone_flags;
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_task_rename {
-	struct trace_entry ent;
-	pid_t pid;
-	char oldcomm[16];
-	char newcomm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_task_newtask {};
-
-struct trace_event_data_offsets_task_rename {};
-
-typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);
-
-typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
-
-typedef long unsigned int pao_T_____4;
-
-enum kmsg_dump_reason {
-	KMSG_DUMP_UNDEF = 0,
-	KMSG_DUMP_PANIC = 1,
-	KMSG_DUMP_OOPS = 2,
-	KMSG_DUMP_EMERG = 3,
-	KMSG_DUMP_RESTART = 4,
-	KMSG_DUMP_HALT = 5,
-	KMSG_DUMP_POWEROFF = 6,
-};
-
-struct vt_mode {
-	char mode;
-	char waitv;
-	short int relsig;
-	short int acqsig;
-	short int frsig;
-};
-
-struct console_font {
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct uni_pagedir;
-
-struct uni_screen;
-
-struct vc_data {
-	struct tty_port port;
-	short unsigned int vc_num;
-	unsigned int vc_cols;
-	unsigned int vc_rows;
-	unsigned int vc_size_row;
-	unsigned int vc_scan_lines;
-	long unsigned int vc_origin;
-	long unsigned int vc_scr_end;
-	long unsigned int vc_visible_origin;
-	unsigned int vc_top;
-	unsigned int vc_bottom;
-	const struct consw *vc_sw;
-	short unsigned int *vc_screenbuf;
-	unsigned int vc_screenbuf_size;
-	unsigned char vc_mode;
-	unsigned char vc_attr;
-	unsigned char vc_def_color;
-	unsigned char vc_color;
-	unsigned char vc_s_color;
-	unsigned char vc_ulcolor;
-	unsigned char vc_itcolor;
-	unsigned char vc_halfcolor;
-	unsigned int vc_cursor_type;
-	short unsigned int vc_complement_mask;
-	short unsigned int vc_s_complement_mask;
-	unsigned int vc_x;
-	unsigned int vc_y;
-	unsigned int vc_saved_x;
-	unsigned int vc_saved_y;
-	long unsigned int vc_pos;
-	short unsigned int vc_hi_font_mask;
-	struct console_font vc_font;
-	short unsigned int vc_video_erase_char;
-	unsigned int vc_state;
-	unsigned int vc_npar;
-	unsigned int vc_par[16];
-	struct vt_mode vt_mode;
-	struct pid *vt_pid;
-	int vt_newvt;
-	wait_queue_head_t paste_wait;
-	unsigned int vc_charset: 1;
-	unsigned int vc_s_charset: 1;
-	unsigned int vc_disp_ctrl: 1;
-	unsigned int vc_toggle_meta: 1;
-	unsigned int vc_decscnm: 1;
-	unsigned int vc_decom: 1;
-	unsigned int vc_decawm: 1;
-	unsigned int vc_deccm: 1;
-	unsigned int vc_decim: 1;
-	unsigned int vc_intensity: 2;
-	unsigned int vc_italic: 1;
-	unsigned int vc_underline: 1;
-	unsigned int vc_blink: 1;
-	unsigned int vc_reverse: 1;
-	unsigned int vc_s_intensity: 2;
-	unsigned int vc_s_italic: 1;
-	unsigned int vc_s_underline: 1;
-	unsigned int vc_s_blink: 1;
-	unsigned int vc_s_reverse: 1;
-	unsigned int vc_priv: 3;
-	unsigned int vc_need_wrap: 1;
-	unsigned int vc_can_do_color: 1;
-	unsigned int vc_report_mouse: 2;
-	unsigned char vc_utf: 1;
-	unsigned char vc_utf_count;
-	int vc_utf_char;
-	unsigned int vc_tab_stop[8];
-	unsigned char vc_palette[48];
-	short unsigned int *vc_translate;
-	unsigned char vc_G0_charset;
-	unsigned char vc_G1_charset;
-	unsigned char vc_saved_G0;
-	unsigned char vc_saved_G1;
-	unsigned int vc_resize_user;
-	unsigned int vc_bell_pitch;
-	unsigned int vc_bell_duration;
-	short unsigned int vc_cur_blink_ms;
-	struct vc_data **vc_display_fg;
-	struct uni_pagedir *vc_uni_pagedir;
-	struct uni_pagedir **vc_uni_pagedir_loc;
-	struct uni_screen *vc_uni_screen;
-};
-
-struct vc {
-	struct vc_data *d;
-	struct work_struct SAK_work;
-};
-
-struct vt_spawn_console {
-	spinlock_t lock;
-	struct pid *pid;
-	int sig;
-};
-
-enum con_flush_mode {
-	CONSOLE_FLUSH_PENDING = 0,
-	CONSOLE_REPLAY_ALL = 1,
-};
-
-struct warn_args {
-	const char *fmt;
-	va_list args;
-};
-
-struct smp_hotplug_thread {
-	struct task_struct **store;
-	struct list_head list;
-	int (*thread_should_run)(unsigned int);
-	void (*thread_fn)(unsigned int);
-	void (*create)(unsigned int);
-	void (*setup)(unsigned int);
-	void (*cleanup)(unsigned int, bool);
-	void (*park)(unsigned int);
-	void (*unpark)(unsigned int);
-	bool selfparking;
-	const char *thread_comm;
-};
-
-struct trace_event_raw_cpuhp_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_multi_enter {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int target;
-	int idx;
-	void *fun;
-	char __data[0];
-};
-
-struct trace_event_raw_cpuhp_exit {
-	struct trace_entry ent;
-	unsigned int cpu;
-	int state;
-	int idx;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpuhp_enter {};
-
-struct trace_event_data_offsets_cpuhp_multi_enter {};
-
-struct trace_event_data_offsets_cpuhp_exit {};
-
-typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
-
-typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
-
-typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
-
-struct cpuhp_cpu_state {
-	enum cpuhp_state state;
-	enum cpuhp_state target;
-	enum cpuhp_state fail;
-	struct task_struct *thread;
-	bool should_run;
-	bool rollback;
-	bool single;
-	bool bringup;
-	struct hlist_node *node;
-	struct hlist_node *last;
-	enum cpuhp_state cb_state;
-	int result;
-	struct completion done_up;
-	struct completion done_down;
-};
-
-struct cpuhp_step {
-	const char *name;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} startup;
-	union {
-		int (*single)(unsigned int);
-		int (*multi)(unsigned int, struct hlist_node *);
-	} teardown;
-	struct hlist_head list;
-	bool cant_stop;
-	bool multi_instance;
-};
-
-enum cpu_mitigations {
-	CPU_MITIGATIONS_OFF = 0,
-	CPU_MITIGATIONS_AUTO = 1,
-	CPU_MITIGATIONS_AUTO_NOSMT = 2,
-};
-
-typedef enum cpuhp_state pto_T_____15;
-
-struct __kernel_old_timeval {
-	__kernel_long_t tv_sec;
-	__kernel_long_t tv_usec;
-};
-
-typedef struct wait_queue_entry wait_queue_entry_t;
-
-struct old_timeval32 {
-	old_time32_t tv_sec;
-	s32 tv_usec;
-};
-
-struct rusage {
-	struct __kernel_old_timeval ru_utime;
-	struct __kernel_old_timeval ru_stime;
-	__kernel_long_t ru_maxrss;
-	__kernel_long_t ru_ixrss;
-	__kernel_long_t ru_idrss;
-	__kernel_long_t ru_isrss;
-	__kernel_long_t ru_minflt;
-	__kernel_long_t ru_majflt;
-	__kernel_long_t ru_nswap;
-	__kernel_long_t ru_inblock;
-	__kernel_long_t ru_oublock;
-	__kernel_long_t ru_msgsnd;
-	__kernel_long_t ru_msgrcv;
-	__kernel_long_t ru_nsignals;
-	__kernel_long_t ru_nvcsw;
-	__kernel_long_t ru_nivcsw;
-};
-
-struct fd {
-	struct file *file;
-	unsigned int flags;
-};
-
-struct compat_rusage {
-	struct old_timeval32 ru_utime;
-	struct old_timeval32 ru_stime;
-	compat_long_t ru_maxrss;
-	compat_long_t ru_ixrss;
-	compat_long_t ru_idrss;
-	compat_long_t ru_isrss;
-	compat_long_t ru_minflt;
-	compat_long_t ru_majflt;
-	compat_long_t ru_nswap;
-	compat_long_t ru_inblock;
-	compat_long_t ru_oublock;
-	compat_long_t ru_msgsnd;
-	compat_long_t ru_msgrcv;
-	compat_long_t ru_nsignals;
-	compat_long_t ru_nvcsw;
-	compat_long_t ru_nivcsw;
-};
-
-struct waitid_info {
-	pid_t pid;
-	uid_t uid;
-	int status;
-	int cause;
-};
-
-struct wait_opts {
-	enum pid_type wo_type;
-	int wo_flags;
-	struct pid *wo_pid;
-	struct waitid_info *wo_info;
-	int wo_stat;
-	struct rusage *wo_rusage;
-	wait_queue_entry_t child_wait;
-	int notask_error;
-};
-
-struct softirq_action {
-	void (*action)(struct softirq_action *);
-};
-
-struct tasklet_struct {
-	struct tasklet_struct *next;
-	long unsigned int state;
-	atomic_t count;
-	void (*func)(long unsigned int);
-	long unsigned int data;
-};
-
-enum {
-	TASKLET_STATE_SCHED = 0,
-	TASKLET_STATE_RUN = 1,
-};
-
-struct trace_event_raw_irq_handler_entry {
-	struct trace_entry ent;
-	int irq;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_irq_handler_exit {
-	struct trace_entry ent;
-	int irq;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_softirq {
-	struct trace_entry ent;
-	unsigned int vec;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_irq_handler_entry {
-	u32 name;
-};
-
-struct trace_event_data_offsets_irq_handler_exit {};
-
-struct trace_event_data_offsets_softirq {};
-
-typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
-
-typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
-
-typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
-
-typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
-
-struct tasklet_head {
-	struct tasklet_struct *head;
-	struct tasklet_struct **tail;
-};
-
-typedef struct tasklet_struct **pto_T_____16;
-
-struct resource_entry {
-	struct list_head node;
-	struct resource *res;
-	resource_size_t offset;
-	struct resource __res;
-};
-
-struct resource_constraint {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
-	void *alignf_data;
-};
-
-enum {
-	MAX_IORES_LEVEL = 5,
-};
-
-struct region_devres {
-	struct resource *parent;
-	resource_size_t start;
-	resource_size_t n;
-};
-
-enum sysctl_writes_mode {
-	SYSCTL_WRITES_LEGACY = 4294967295,
-	SYSCTL_WRITES_WARN = 0,
-	SYSCTL_WRITES_STRICT = 1,
-};
-
-struct do_proc_dointvec_minmax_conv_param {
-	int *min;
-	int *max;
-};
-
-struct do_proc_douintvec_minmax_conv_param {
-	unsigned int *min;
-	unsigned int *max;
-};
-
-struct __sysctl_args {
-	int *name;
-	int nlen;
-	void *oldval;
-	size_t *oldlenp;
-	void *newval;
-	size_t newlen;
-	long unsigned int __unused[4];
-};
-
-enum {
-	CTL_KERN = 1,
-	CTL_VM = 2,
-	CTL_NET = 3,
-	CTL_PROC = 4,
-	CTL_FS = 5,
-	CTL_DEBUG = 6,
-	CTL_DEV = 7,
-	CTL_BUS = 8,
-	CTL_ABI = 9,
-	CTL_CPU = 10,
-	CTL_ARLAN = 254,
-	CTL_S390DBF = 5677,
-	CTL_SUNRPC = 7249,
-	CTL_PM = 9899,
-	CTL_FRV = 9898,
-};
-
-enum {
-	KERN_OSTYPE = 1,
-	KERN_OSRELEASE = 2,
-	KERN_OSREV = 3,
-	KERN_VERSION = 4,
-	KERN_SECUREMASK = 5,
-	KERN_PROF = 6,
-	KERN_NODENAME = 7,
-	KERN_DOMAINNAME = 8,
-	KERN_PANIC = 15,
-	KERN_REALROOTDEV = 16,
-	KERN_SPARC_REBOOT = 21,
-	KERN_CTLALTDEL = 22,
-	KERN_PRINTK = 23,
-	KERN_NAMETRANS = 24,
-	KERN_PPC_HTABRECLAIM = 25,
-	KERN_PPC_ZEROPAGED = 26,
-	KERN_PPC_POWERSAVE_NAP = 27,
-	KERN_MODPROBE = 28,
-	KERN_SG_BIG_BUFF = 29,
-	KERN_ACCT = 30,
-	KERN_PPC_L2CR = 31,
-	KERN_RTSIGNR = 32,
-	KERN_RTSIGMAX = 33,
-	KERN_SHMMAX = 34,
-	KERN_MSGMAX = 35,
-	KERN_MSGMNB = 36,
-	KERN_MSGPOOL = 37,
-	KERN_SYSRQ = 38,
-	KERN_MAX_THREADS = 39,
-	KERN_RANDOM = 40,
-	KERN_SHMALL = 41,
-	KERN_MSGMNI = 42,
-	KERN_SEM = 43,
-	KERN_SPARC_STOP_A = 44,
-	KERN_SHMMNI = 45,
-	KERN_OVERFLOWUID = 46,
-	KERN_OVERFLOWGID = 47,
-	KERN_SHMPATH = 48,
-	KERN_HOTPLUG = 49,
-	KERN_IEEE_EMULATION_WARNINGS = 50,
-	KERN_S390_USER_DEBUG_LOGGING = 51,
-	KERN_CORE_USES_PID = 52,
-	KERN_TAINTED = 53,
-	KERN_CADPID = 54,
-	KERN_PIDMAX = 55,
-	KERN_CORE_PATTERN = 56,
-	KERN_PANIC_ON_OOPS = 57,
-	KERN_HPPA_PWRSW = 58,
-	KERN_HPPA_UNALIGNED = 59,
-	KERN_PRINTK_RATELIMIT = 60,
-	KERN_PRINTK_RATELIMIT_BURST = 61,
-	KERN_PTY = 62,
-	KERN_NGROUPS_MAX = 63,
-	KERN_SPARC_SCONS_PWROFF = 64,
-	KERN_HZ_TIMER = 65,
-	KERN_UNKNOWN_NMI_PANIC = 66,
-	KERN_BOOTLOADER_TYPE = 67,
-	KERN_RANDOMIZE = 68,
-	KERN_SETUID_DUMPABLE = 69,
-	KERN_SPIN_RETRY = 70,
-	KERN_ACPI_VIDEO_FLAGS = 71,
-	KERN_IA64_UNALIGNED = 72,
-	KERN_COMPAT_LOG = 73,
-	KERN_MAX_LOCK_DEPTH = 74,
-	KERN_NMI_WATCHDOG = 75,
-	KERN_PANIC_ON_NMI = 76,
-	KERN_PANIC_ON_WARN = 77,
-	KERN_PANIC_PRINT = 78,
-};
-
-struct xfs_sysctl_val {
-	int min;
-	int val;
-	int max;
-};
-
-typedef struct xfs_sysctl_val xfs_sysctl_val_t;
-
-struct xfs_param {
-	xfs_sysctl_val_t sgid_inherit;
-	xfs_sysctl_val_t symlink_mode;
-	xfs_sysctl_val_t panic_mask;
-	xfs_sysctl_val_t error_level;
-	xfs_sysctl_val_t syncd_timer;
-	xfs_sysctl_val_t stats_clear;
-	xfs_sysctl_val_t inherit_sync;
-	xfs_sysctl_val_t inherit_nodump;
-	xfs_sysctl_val_t inherit_noatim;
-	xfs_sysctl_val_t xfs_buf_timer;
-	xfs_sysctl_val_t xfs_buf_age;
-	xfs_sysctl_val_t inherit_nosym;
-	xfs_sysctl_val_t rotorstep;
-	xfs_sysctl_val_t inherit_nodfrg;
-	xfs_sysctl_val_t fstrm_timer;
-	xfs_sysctl_val_t eofb_timer;
-	xfs_sysctl_val_t cowb_timer;
-};
-
-typedef struct xfs_param xfs_param_t;
-
-struct xfs_globals {
-	int log_recovery_delay;
-	int mount_delay;
-	bool bug_on_assert;
-	bool always_cow;
-};
-
-enum ethtool_link_mode_bit_indices {
-	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
-	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
-	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
-	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
-	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
-	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
-	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
-	ETHTOOL_LINK_MODE_TP_BIT = 7,
-	ETHTOOL_LINK_MODE_AUI_BIT = 8,
-	ETHTOOL_LINK_MODE_MII_BIT = 9,
-	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
-	ETHTOOL_LINK_MODE_BNC_BIT = 11,
-	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
-	ETHTOOL_LINK_MODE_Pause_BIT = 13,
-	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
-	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
-	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
-	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
-	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
-	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
-	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
-	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
-	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
-	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
-	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
-	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
-	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
-	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
-	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
-	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
-	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
-	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
-	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
-	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
-	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
-	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
-	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
-	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
-	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
-	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
-	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
-	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
-	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
-	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
-	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
-	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
-	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
-	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
-	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
-	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
-	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
-	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
-	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
-	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
-	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
-	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
-	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
-	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
-	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
-	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
-	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
-	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
-	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
-	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
-	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
-	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
-	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
-	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
-	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
-	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
-	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
-	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
-	__ETHTOOL_LINK_MODE_MASK_NBITS = 74,
-};
-
-enum {
-	NAPI_STATE_SCHED = 0,
-	NAPI_STATE_MISSED = 1,
-	NAPI_STATE_DISABLE = 2,
-	NAPI_STATE_NPSVC = 3,
-	NAPI_STATE_HASHED = 4,
-	NAPI_STATE_NO_BUSY_POLL = 5,
-	NAPI_STATE_IN_BUSY_POLL = 6,
-};
-
-struct compat_sysctl_args {
-	compat_uptr_t name;
-	int nlen;
-	compat_uptr_t oldval;
-	compat_uptr_t oldlenp;
-	compat_uptr_t newval;
-	compat_size_t newlen;
-	compat_ulong_t __unused[4];
-};
-
-struct __user_cap_header_struct {
-	__u32 version;
-	int pid;
-};
-
-typedef struct __user_cap_header_struct *cap_user_header_t;
-
-struct __user_cap_data_struct {
-	__u32 effective;
-	__u32 permitted;
-	__u32 inheritable;
-};
-
-typedef struct __user_cap_data_struct *cap_user_data_t;
-
-struct sigqueue {
-	struct list_head list;
-	int flags;
-	kernel_siginfo_t info;
-	struct user_struct *user;
-};
-
-struct ptrace_peeksiginfo_args {
-	__u64 off;
-	__u32 flags;
-	__s32 nr;
-};
-
-struct ptrace_syscall_info {
-	__u8 op;
-	__u32 arch;
-	__u64 instruction_pointer;
-	__u64 stack_pointer;
-	union {
-		struct {
-			__u64 nr;
-			__u64 args[6];
-		} entry;
-		struct {
-			__s64 rval;
-			__u8 is_error;
-		} exit;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u32 ret_data;
-		} seccomp;
-	};
-};
-
-struct compat_iovec {
-	compat_uptr_t iov_base;
-	compat_size_t iov_len;
-};
-
-typedef long unsigned int old_sigset_t;
-
-enum siginfo_layout {
-	SIL_KILL = 0,
-	SIL_TIMER = 1,
-	SIL_POLL = 2,
-	SIL_FAULT = 3,
-	SIL_FAULT_MCEERR = 4,
-	SIL_FAULT_BNDERR = 5,
-	SIL_FAULT_PKUERR = 6,
-	SIL_CHLD = 7,
-	SIL_RT = 8,
-	SIL_SYS = 9,
-};
-
-typedef u32 compat_old_sigset_t;
-
-struct compat_sigaction {
-	compat_uptr_t sa_handler;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-	compat_sigset_t sa_mask;
-};
-
-struct compat_old_sigaction {
-	compat_uptr_t sa_handler;
-	compat_old_sigset_t sa_mask;
-	compat_ulong_t sa_flags;
-	compat_uptr_t sa_restorer;
-};
-
-enum {
-	TRACE_SIGNAL_DELIVERED = 0,
-	TRACE_SIGNAL_IGNORED = 1,
-	TRACE_SIGNAL_ALREADY_PENDING = 2,
-	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
-	TRACE_SIGNAL_LOSE_INFO = 4,
-};
-
-struct trace_event_raw_signal_generate {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	char comm[16];
-	pid_t pid;
-	int group;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_signal_deliver {
-	struct trace_entry ent;
-	int sig;
-	int errno;
-	int code;
-	long unsigned int sa_handler;
-	long unsigned int sa_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_signal_generate {};
-
-struct trace_event_data_offsets_signal_deliver {};
-
-typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
-
-typedef __kernel_clock_t clock_t;
-
-struct sysinfo {
-	__kernel_long_t uptime;
-	__kernel_ulong_t loads[3];
-	__kernel_ulong_t totalram;
-	__kernel_ulong_t freeram;
-	__kernel_ulong_t sharedram;
-	__kernel_ulong_t bufferram;
-	__kernel_ulong_t totalswap;
-	__kernel_ulong_t freeswap;
-	__u16 procs;
-	__u16 pad;
-	__kernel_ulong_t totalhigh;
-	__kernel_ulong_t freehigh;
-	__u32 mem_unit;
-	char _f[0];
-};
-
-enum {
-	PER_LINUX = 0,
-	PER_LINUX_32BIT = 8388608,
-	PER_LINUX_FDPIC = 524288,
-	PER_SVR4 = 68157441,
-	PER_SVR3 = 83886082,
-	PER_SCOSVR3 = 117440515,
-	PER_OSR5 = 100663299,
-	PER_WYSEV386 = 83886084,
-	PER_ISCR4 = 67108869,
-	PER_BSD = 6,
-	PER_SUNOS = 67108870,
-	PER_XENIX = 83886087,
-	PER_LINUX32 = 8,
-	PER_LINUX32_3GB = 134217736,
-	PER_IRIX32 = 67108873,
-	PER_IRIXN32 = 67108874,
-	PER_IRIX64 = 67108875,
-	PER_RISCOS = 12,
-	PER_SOLARIS = 67108877,
-	PER_UW7 = 68157454,
-	PER_OSF4 = 15,
-	PER_HPUX = 16,
-	PER_MASK = 255,
-};
-
-struct rlimit64 {
-	__u64 rlim_cur;
-	__u64 rlim_max;
-};
-
-struct oldold_utsname {
-	char sysname[9];
-	char nodename[9];
-	char release[9];
-	char version[9];
-	char machine[9];
-};
-
-struct old_utsname {
-	char sysname[65];
-	char nodename[65];
-	char release[65];
-	char version[65];
-	char machine[65];
-};
-
-enum uts_proc {
-	UTS_PROC_OSTYPE = 0,
-	UTS_PROC_OSRELEASE = 1,
-	UTS_PROC_VERSION = 2,
-	UTS_PROC_HOSTNAME = 3,
-	UTS_PROC_DOMAINNAME = 4,
-};
-
-struct prctl_mm_map {
-	__u64 start_code;
-	__u64 end_code;
-	__u64 start_data;
-	__u64 end_data;
-	__u64 start_brk;
-	__u64 brk;
-	__u64 start_stack;
-	__u64 arg_start;
-	__u64 arg_end;
-	__u64 env_start;
-	__u64 env_end;
-	__u64 *auxv;
-	__u32 auxv_size;
-	__u32 exe_fd;
-};
-
-struct tms {
-	__kernel_clock_t tms_utime;
-	__kernel_clock_t tms_stime;
-	__kernel_clock_t tms_cutime;
-	__kernel_clock_t tms_cstime;
-};
-
-struct getcpu_cache {
-	long unsigned int blob[16];
-};
-
-struct compat_tms {
-	compat_clock_t tms_utime;
-	compat_clock_t tms_stime;
-	compat_clock_t tms_cutime;
-	compat_clock_t tms_cstime;
-};
-
-struct compat_rlimit {
-	compat_ulong_t rlim_cur;
-	compat_ulong_t rlim_max;
-};
-
-struct compat_sysinfo {
-	s32 uptime;
-	u32 loads[3];
-	u32 totalram;
-	u32 freeram;
-	u32 sharedram;
-	u32 bufferram;
-	u32 totalswap;
-	u32 freeswap;
-	u16 procs;
-	u16 pad;
-	u32 totalhigh;
-	u32 freehigh;
-	u32 mem_unit;
-	char _f[8];
-};
-
-struct umh_info {
-	const char *cmdline;
-	struct file *pipe_to_umh;
-	struct file *pipe_from_umh;
-	struct list_head list;
-	void (*cleanup)(struct umh_info *);
-	pid_t pid;
-};
-
-struct wq_flusher;
-
-struct worker;
-
-struct workqueue_attrs;
-
-struct pool_workqueue;
-
-struct wq_device;
-
-struct workqueue_struct {
-	struct list_head pwqs;
-	struct list_head list;
-	struct mutex mutex;
-	int work_color;
-	int flush_color;
-	atomic_t nr_pwqs_to_flush;
-	struct wq_flusher *first_flusher;
-	struct list_head flusher_queue;
-	struct list_head flusher_overflow;
-	struct list_head maydays;
-	struct worker *rescuer;
-	int nr_drainers;
-	int saved_max_active;
-	struct workqueue_attrs *unbound_attrs;
-	struct pool_workqueue *dfl_pwq;
-	struct wq_device *wq_dev;
-	char name[24];
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int flags;
-	struct pool_workqueue *cpu_pwqs;
-	struct pool_workqueue *numa_pwq_tbl[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct workqueue_attrs {
-	int nice;
-	cpumask_var_t cpumask;
-	bool no_numa;
-};
-
-struct execute_work {
-	struct work_struct work;
-};
-
-enum {
-	WQ_UNBOUND = 2,
-	WQ_FREEZABLE = 4,
-	WQ_MEM_RECLAIM = 8,
-	WQ_HIGHPRI = 16,
-	WQ_CPU_INTENSIVE = 32,
-	WQ_SYSFS = 64,
-	WQ_POWER_EFFICIENT = 128,
-	__WQ_DRAINING = 65536,
-	__WQ_ORDERED = 131072,
-	__WQ_LEGACY = 262144,
-	__WQ_ORDERED_EXPLICIT = 524288,
-	WQ_MAX_ACTIVE = 512,
-	WQ_MAX_UNBOUND_PER_CPU = 4,
-	WQ_DFL_ACTIVE = 256,
-};
-
-typedef unsigned int xa_mark_t;
-
-enum xa_lock_type {
-	XA_LOCK_IRQ = 1,
-	XA_LOCK_BH = 2,
-};
-
-struct __una_u32 {
-	u32 x;
-};
-
-struct worker_pool;
-
-struct worker {
-	union {
-		struct list_head entry;
-		struct hlist_node hentry;
-	};
-	struct work_struct *current_work;
-	work_func_t current_func;
-	struct pool_workqueue *current_pwq;
-	struct list_head scheduled;
-	struct task_struct *task;
-	struct worker_pool *pool;
-	struct list_head node;
-	long unsigned int last_active;
-	unsigned int flags;
-	int id;
-	int sleeping;
-	char desc[24];
-	struct workqueue_struct *rescue_wq;
-	work_func_t last_func;
-};
-
-struct pool_workqueue {
-	struct worker_pool *pool;
-	struct workqueue_struct *wq;
-	int work_color;
-	int flush_color;
-	int refcnt;
-	int nr_in_flight[15];
-	int nr_active;
-	int max_active;
-	struct list_head delayed_works;
-	struct list_head pwqs_node;
-	struct list_head mayday_node;
-	struct work_struct unbound_release_work;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct worker_pool {
-	spinlock_t lock;
-	int cpu;
-	int node;
-	int id;
-	unsigned int flags;
-	long unsigned int watchdog_ts;
-	struct list_head worklist;
-	int nr_workers;
-	int nr_idle;
-	struct list_head idle_list;
-	struct timer_list idle_timer;
-	struct timer_list mayday_timer;
-	struct hlist_head busy_hash[64];
-	struct worker *manager;
-	struct list_head workers;
-	struct completion *detach_completion;
-	struct ida worker_ida;
-	struct workqueue_attrs *attrs;
-	struct hlist_node hash_node;
-	int refcnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_t nr_running;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum {
-	POOL_MANAGER_ACTIVE = 1,
-	POOL_DISASSOCIATED = 4,
-	WORKER_DIE = 2,
-	WORKER_IDLE = 4,
-	WORKER_PREP = 8,
-	WORKER_CPU_INTENSIVE = 64,
-	WORKER_UNBOUND = 128,
-	WORKER_REBOUND = 256,
-	WORKER_NOT_RUNNING = 456,
-	NR_STD_WORKER_POOLS = 2,
-	UNBOUND_POOL_HASH_ORDER = 6,
-	BUSY_WORKER_HASH_ORDER = 6,
-	MAX_IDLE_WORKERS_RATIO = 4,
-	IDLE_WORKER_TIMEOUT = 300000,
-	MAYDAY_INITIAL_TIMEOUT = 10,
-	MAYDAY_INTERVAL = 100,
-	CREATE_COOLDOWN = 1000,
-	RESCUER_NICE_LEVEL = 4294967276,
-	HIGHPRI_NICE_LEVEL = 4294967276,
-	WQ_NAME_LEN = 24,
-};
-
-struct wq_flusher {
-	struct list_head list;
-	int flush_color;
-	struct completion done;
-};
-
-struct wq_device {
-	struct workqueue_struct *wq;
-	struct device dev;
-};
-
-struct trace_event_raw_workqueue_work {
-	struct trace_entry ent;
-	void *work;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_queue_work {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	void *workqueue;
-	unsigned int req_cpu;
-	unsigned int cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_workqueue_execute_start {
-	struct trace_entry ent;
-	void *work;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_workqueue_work {};
-
-struct trace_event_data_offsets_workqueue_queue_work {};
-
-struct trace_event_data_offsets_workqueue_execute_start {};
-
-typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
-
-typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *);
-
-struct wq_barrier {
-	struct work_struct work;
-	struct completion done;
-	struct task_struct *task;
-};
-
-struct cwt_wait {
-	wait_queue_entry_t wait;
-	struct work_struct *work;
-};
-
-struct apply_wqattrs_ctx {
-	struct workqueue_struct *wq;
-	struct workqueue_attrs *attrs;
-	struct list_head list;
-	struct pool_workqueue *dfl_pwq;
-	struct pool_workqueue *pwq_tbl[0];
-};
-
-struct work_for_cpu {
-	struct work_struct work;
-	long int (*fn)(void *);
-	void *arg;
-	long int ret;
-};
-
-typedef void (*task_work_func_t)(struct callback_head *);
-
-enum {
-	KERNEL_PARAM_OPS_FL_NOARG = 1,
-};
-
-enum {
-	KERNEL_PARAM_FL_UNSAFE = 1,
-	KERNEL_PARAM_FL_HWPARAM = 2,
-};
-
-struct param_attribute {
-	struct module_attribute mattr;
-	const struct kernel_param *param;
-};
-
-struct module_param_attrs {
-	unsigned int num;
-	struct attribute_group grp;
-	struct param_attribute attrs[0];
-};
-
-struct module_version_attribute {
-	struct module_attribute mattr;
-	const char *module_name;
-	const char *version;
-};
-
-struct kmalloced_param {
-	struct list_head list;
-	char val[0];
-};
-
-struct sched_param {
-	int sched_priority;
-};
-
-struct kthread_work;
-
-typedef void (*kthread_work_func_t)(struct kthread_work *);
-
-struct kthread_worker;
-
-struct kthread_work {
-	struct list_head node;
-	kthread_work_func_t func;
-	struct kthread_worker *worker;
-	int canceling;
-};
-
-enum {
-	KTW_FREEZABLE = 1,
-};
-
-struct kthread_worker {
-	unsigned int flags;
-	raw_spinlock_t lock;
-	struct list_head work_list;
-	struct list_head delayed_work_list;
-	struct task_struct *task;
-	struct kthread_work *current_work;
-};
-
-struct kthread_delayed_work {
-	struct kthread_work work;
-	struct timer_list timer;
-};
-
-struct kthread_create_info {
-	int (*threadfn)(void *);
-	void *data;
-	int node;
-	struct task_struct *result;
-	struct completion *done;
-	struct list_head list;
-};
-
-struct kthread {
-	long unsigned int flags;
-	unsigned int cpu;
-	void *data;
-	struct completion parked;
-	struct completion exited;
-};
-
-enum KTHREAD_BITS {
-	KTHREAD_IS_PER_CPU = 0,
-	KTHREAD_SHOULD_STOP = 1,
-	KTHREAD_SHOULD_PARK = 2,
-};
-
-struct kthread_flush_work {
-	struct kthread_work work;
-	struct completion done;
-};
-
-struct pt_regs___2;
-
-struct ipc_ids {
-	int in_use;
-	short unsigned int seq;
-	struct rw_semaphore rwsem;
-	struct idr ipcs_idr;
-	int max_idx;
-	int last_idx;
-	struct rhashtable key_ht;
-};
-
-struct ipc_namespace {
-	refcount_t count;
-	struct ipc_ids ids[3];
-	int sem_ctls[4];
-	int used_sems;
-	unsigned int msg_ctlmax;
-	unsigned int msg_ctlmnb;
-	unsigned int msg_ctlmni;
-	atomic_t msg_bytes;
-	atomic_t msg_hdrs;
-	size_t shm_ctlmax;
-	size_t shm_ctlall;
-	long unsigned int shm_tot;
-	int shm_ctlmni;
-	int shm_rmid_forced;
-	struct notifier_block ipcns_nb;
-	struct vfsmount *mq_mnt;
-	unsigned int mq_queues_count;
-	unsigned int mq_queues_max;
-	unsigned int mq_msg_max;
-	unsigned int mq_msgsize_max;
-	unsigned int mq_msg_default;
-	unsigned int mq_msgsize_default;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-};
-
-struct srcu_notifier_head {
-	struct mutex mutex;
-	struct srcu_struct srcu;
-	struct notifier_block *head;
-};
-
-enum what {
-	PROC_EVENT_NONE = 0,
-	PROC_EVENT_FORK = 1,
-	PROC_EVENT_EXEC = 2,
-	PROC_EVENT_UID = 4,
-	PROC_EVENT_GID = 64,
-	PROC_EVENT_SID = 128,
-	PROC_EVENT_PTRACE = 256,
-	PROC_EVENT_COMM = 512,
-	PROC_EVENT_COREDUMP = 1073741824,
-	PROC_EVENT_EXIT = 2147483648,
-};
-
-typedef u64 async_cookie_t;
-
-typedef void (*async_func_t)(void *, async_cookie_t);
-
-struct async_domain {
-	struct list_head pending;
-	unsigned int registered: 1;
-};
-
-struct async_entry {
-	struct list_head domain_list;
-	struct list_head global_list;
-	struct work_struct work;
-	async_cookie_t cookie;
-	async_func_t func;
-	void *data;
-	struct async_domain *domain;
-};
-
-struct smpboot_thread_data {
-	unsigned int cpu;
-	unsigned int status;
-	struct smp_hotplug_thread *ht;
-};
-
-enum {
-	HP_THREAD_NONE = 0,
-	HP_THREAD_ACTIVE = 1,
-	HP_THREAD_PARKED = 2,
-};
-
-struct pin_cookie {};
-
-struct dl_bw {
-	raw_spinlock_t lock;
-	u64 bw;
-	u64 total_bw;
-};
-
-struct cpudl_item;
-
-struct cpudl {
-	raw_spinlock_t lock;
-	int size;
-	cpumask_var_t free_cpus;
-	struct cpudl_item *elements;
-};
-
-struct cpupri_vec {
-	atomic_t count;
-	cpumask_var_t mask;
-};
-
-struct cpupri {
-	struct cpupri_vec pri_to_cpu[102];
-	int *cpu_to_pri;
-};
-
-struct perf_domain;
-
-struct root_domain___2 {
-	atomic_t refcount;
-	atomic_t rto_count;
-	struct callback_head rcu;
-	cpumask_var_t span;
-	cpumask_var_t online;
-	int overload;
-	int overutilized;
-	cpumask_var_t dlo_mask;
-	atomic_t dlo_count;
-	struct dl_bw dl_bw;
-	struct cpudl cpudl;
-	struct irq_work rto_push_work;
-	raw_spinlock_t rto_lock;
-	int rto_loop;
-	int rto_cpu;
-	atomic_t rto_loop_next;
-	atomic_t rto_loop_start;
-	cpumask_var_t rto_mask;
-	struct cpupri cpupri;
-	long unsigned int max_cpu_capacity;
-	struct perf_domain *pd;
-};
-
-struct cfs_rq {
-	struct load_weight load;
-	long unsigned int runnable_weight;
-	unsigned int nr_running;
-	unsigned int h_nr_running;
-	unsigned int idle_h_nr_running;
-	u64 exec_clock;
-	u64 min_vruntime;
-	struct rb_root_cached tasks_timeline;
-	struct sched_entity *curr;
-	struct sched_entity *next;
-	struct sched_entity *last;
-	struct sched_entity *skip;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg;
-	struct {
-		raw_spinlock_t lock;
-		int nr;
-		long unsigned int load_avg;
-		long unsigned int util_avg;
-		long unsigned int runnable_sum;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	} removed;
-	long unsigned int tg_load_avg_contrib;
-	long int propagate;
-	long int prop_runnable_sum;
-	long unsigned int h_load;
-	u64 last_h_load_update;
-	struct sched_entity *h_load_next;
-	struct rq *rq;
-	int on_list;
-	struct list_head leaf_cfs_rq_list;
-	struct task_group *tg;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct cfs_bandwidth {};
-
-struct task_group {
-	struct cgroup_subsys_state css;
-	struct sched_entity **se;
-	struct cfs_rq **cfs_rq;
-	long unsigned int shares;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t load_avg;
-	struct callback_head rcu;
-	struct list_head list;
-	struct task_group *parent;
-	struct list_head siblings;
-	struct list_head children;
-	struct cfs_bandwidth cfs_bandwidth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct update_util_data {
-	void (*func)(struct update_util_data *, u64, unsigned int);
-};
-
-enum {
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-};
-
-struct sched_group {
-	struct sched_group *next;
-	atomic_t ref;
-	unsigned int group_weight;
-	struct sched_group_capacity *sgc;
-	int asym_prefer_cpu;
-	long unsigned int cpumask[0];
-};
-
-struct sched_group_capacity {
-	atomic_t ref;
-	long unsigned int capacity;
-	long unsigned int min_capacity;
-	long unsigned int max_capacity;
-	long unsigned int next_update;
-	int imbalance;
-	long unsigned int cpumask[0];
-};
-
-struct wake_q_head {
-	struct wake_q_node *first;
-	struct wake_q_node **lastp;
-};
-
-struct sched_attr {
-	__u32 size;
-	__u32 sched_policy;
-	__u64 sched_flags;
-	__s32 sched_nice;
-	__u32 sched_priority;
-	__u64 sched_runtime;
-	__u64 sched_deadline;
-	__u64 sched_period;
-	__u32 sched_util_min;
-	__u32 sched_util_max;
-};
-
-struct cpuidle_driver___2;
-
-struct cpuidle_state {
-	char name[16];
-	char desc[32];
-	u64 exit_latency_ns;
-	u64 target_residency_ns;
-	unsigned int flags;
-	unsigned int exit_latency;
-	int power_usage;
-	unsigned int target_residency;
-	int (*enter)(struct cpuidle_device *, struct cpuidle_driver___2 *, int);
-	int (*enter_dead)(struct cpuidle_device *, int);
-	void (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver___2 *, int);
-};
-
-struct cpuidle_driver___2 {
-	const char *name;
-	struct module *owner;
-	int refcnt;
-	unsigned int bctimer: 1;
-	struct cpuidle_state states[10];
-	int state_count;
-	int safe_state_index;
-	struct cpumask *cpumask;
-	const char *governor;
-};
-
-struct em_cap_state {
-	long unsigned int frequency;
-	long unsigned int power;
-	long unsigned int cost;
-};
-
-struct em_perf_domain {
-	struct em_cap_state *table;
-	int nr_cap_states;
-	long unsigned int cpus[0];
-};
-
-enum {
-	CFTYPE_ONLY_ON_ROOT = 1,
-	CFTYPE_NOT_ON_ROOT = 2,
-	CFTYPE_NS_DELEGATABLE = 4,
-	CFTYPE_NO_PREFIX = 8,
-	CFTYPE_WORLD_WRITABLE = 16,
-	CFTYPE_DEBUG = 32,
-	__CFTYPE_ONLY_ON_DFL = 65536,
-	__CFTYPE_NOT_ON_DFL = 131072,
-};
-
-typedef int (*cpu_stop_fn_t)(void *);
-
-struct cpu_stop_done;
-
-struct cpu_stop_work {
-	struct list_head list;
-	cpu_stop_fn_t fn;
-	void *arg;
-	struct cpu_stop_done *done;
-};
-
-struct cpudl_item {
-	u64 dl;
-	int cpu;
-	int idx;
-};
-
-struct rt_prio_array {
-	long unsigned int bitmap[2];
-	struct list_head queue[100];
-};
-
-struct rt_bandwidth {
-	raw_spinlock_t rt_runtime_lock;
-	ktime_t rt_period;
-	u64 rt_runtime;
-	struct hrtimer rt_period_timer;
-	unsigned int rt_period_active;
-};
-
-struct dl_bandwidth {
-	raw_spinlock_t dl_runtime_lock;
-	u64 dl_runtime;
-	u64 dl_period;
-};
-
-typedef int (*tg_visitor)(struct task_group *, void *);
-
-struct rt_rq {
-	struct rt_prio_array active;
-	unsigned int rt_nr_running;
-	unsigned int rr_nr_running;
-	struct {
-		int curr;
-		int next;
-	} highest_prio;
-	long unsigned int rt_nr_migratory;
-	long unsigned int rt_nr_total;
-	int overloaded;
-	struct plist_head pushable_tasks;
-	int rt_queued;
-	int rt_throttled;
-	u64 rt_time;
-	u64 rt_runtime;
-	raw_spinlock_t rt_runtime_lock;
-};
-
-struct dl_rq {
-	struct rb_root_cached root;
-	long unsigned int dl_nr_running;
-	struct {
-		u64 curr;
-		u64 next;
-	} earliest_dl;
-	long unsigned int dl_nr_migratory;
-	int overloaded;
-	struct rb_root_cached pushable_dl_tasks_root;
-	u64 running_bw;
-	u64 this_bw;
-	u64 extra_bw;
-	u64 bw_ratio;
-};
-
-struct rq {
-	raw_spinlock_t lock;
-	unsigned int nr_running;
-	long unsigned int last_load_update_tick;
-	long unsigned int last_blocked_load_update_tick;
-	unsigned int has_blocked_load;
-	unsigned int nohz_tick_stopped;
-	atomic_t nohz_flags;
-	long unsigned int nr_load_updates;
-	u64 nr_switches;
-	long: 64;
-	struct cfs_rq cfs;
-	struct rt_rq rt;
-	struct dl_rq dl;
-	struct list_head leaf_cfs_rq_list;
-	struct list_head *tmp_alone_branch;
-	long unsigned int nr_uninterruptible;
-	struct task_struct *curr;
-	struct task_struct *idle;
-	struct task_struct *stop;
-	long unsigned int next_balance;
-	struct mm_struct *prev_mm;
-	unsigned int clock_update_flags;
-	u64 clock;
-	long: 64;
-	long: 64;
-	long: 64;
-	u64 clock_task;
-	u64 clock_pelt;
-	long unsigned int lost_idle_time;
-	atomic_t nr_iowait;
-	int membarrier_state;
-	struct root_domain___2 *rd;
-	struct sched_domain *sd;
-	long unsigned int cpu_capacity;
-	long unsigned int cpu_capacity_orig;
-	struct callback_head *balance_callback;
-	unsigned char idle_balance;
-	long unsigned int misfit_task_load;
-	int active_balance;
-	int push_cpu;
-	struct cpu_stop_work active_balance_work;
-	int cpu;
-	int online;
-	struct list_head cfs_tasks;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg_rt;
-	struct sched_avg avg_dl;
-	u64 idle_stamp;
-	u64 avg_idle;
-	u64 max_idle_balance_cost;
-	long unsigned int calc_load_update;
-	long int calc_load_active;
-	int hrtick_csd_pending;
-	long: 32;
-	long: 64;
-	long: 64;
-	call_single_data_t hrtick_csd;
-	struct hrtimer hrtick_timer;
-	struct sched_info rq_sched_info;
-	long long unsigned int rq_cpu_time;
-	unsigned int yld_count;
-	unsigned int sched_count;
-	unsigned int sched_goidle;
-	unsigned int ttwu_count;
-	unsigned int ttwu_local;
-	struct llist_head wake_list;
-	struct cpuidle_state *idle_state;
-	long: 64;
-	long: 64;
-};
-
-struct perf_domain {
-	struct em_perf_domain *em_pd;
-	struct perf_domain *next;
-	struct callback_head rcu;
-};
-
-struct rq_flags {
-	long unsigned int flags;
-	struct pin_cookie cookie;
-};
-
-enum numa_topology_type {
-	NUMA_DIRECT = 0,
-	NUMA_GLUELESS_MESH = 1,
-	NUMA_BACKPLANE = 2,
-};
-
-enum {
-	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
-	__SCHED_FEAT_START_DEBIT = 1,
-	__SCHED_FEAT_NEXT_BUDDY = 2,
-	__SCHED_FEAT_LAST_BUDDY = 3,
-	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
-	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
-	__SCHED_FEAT_HRTICK = 6,
-	__SCHED_FEAT_DOUBLE_TICK = 7,
-	__SCHED_FEAT_NONTASK_CAPACITY = 8,
-	__SCHED_FEAT_TTWU_QUEUE = 9,
-	__SCHED_FEAT_SIS_AVG_CPU = 10,
-	__SCHED_FEAT_SIS_PROP = 11,
-	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
-	__SCHED_FEAT_RT_PUSH_IPI = 13,
-	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
-	__SCHED_FEAT_LB_MIN = 15,
-	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
-	__SCHED_FEAT_WA_IDLE = 17,
-	__SCHED_FEAT_WA_WEIGHT = 18,
-	__SCHED_FEAT_WA_BIAS = 19,
-	__SCHED_FEAT_UTIL_EST = 20,
-	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
-	__SCHED_FEAT_NR = 22,
-};
-
-struct trace_event_raw_sched_kthread_stop {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_kthread_stop_ret {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wakeup_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int success;
-	int target_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_switch {
-	struct trace_entry ent;
-	char prev_comm[16];
-	pid_t prev_pid;
-	int prev_prio;
-	long int prev_state;
-	char next_comm[16];
-	pid_t next_pid;
-	int next_prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_migrate_task {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	int orig_cpu;
-	int dest_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_wait {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_fork {
-	struct trace_entry ent;
-	char parent_comm[16];
-	pid_t parent_pid;
-	char child_comm[16];
-	pid_t child_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_process_exec {
-	struct trace_entry ent;
-	u32 __data_loc_filename;
-	pid_t pid;
-	pid_t old_pid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_template {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 delay;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_stat_runtime {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	u64 runtime;
-	u64 vruntime;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_pi_setprio {
-	struct trace_entry ent;
-	char comm[16];
-	pid_t pid;
-	int oldprio;
-	int newprio;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_move_task_template {
-	struct trace_entry ent;
-	pid_t pid;
-	pid_t tgid;
-	pid_t ngid;
-	int src_cpu;
-	int src_nid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_swap_numa {
-	struct trace_entry ent;
-	pid_t src_pid;
-	pid_t src_tgid;
-	pid_t src_ngid;
-	int src_cpu;
-	int src_nid;
-	pid_t dst_pid;
-	pid_t dst_tgid;
-	pid_t dst_ngid;
-	int dst_cpu;
-	int dst_nid;
-	char __data[0];
-};
-
-struct trace_event_raw_sched_wake_idle_without_ipi {
-	struct trace_entry ent;
-	int cpu;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sched_kthread_stop {};
-
-struct trace_event_data_offsets_sched_kthread_stop_ret {};
-
-struct trace_event_data_offsets_sched_wakeup_template {};
-
-struct trace_event_data_offsets_sched_switch {};
-
-struct trace_event_data_offsets_sched_migrate_task {};
-
-struct trace_event_data_offsets_sched_process_template {};
-
-struct trace_event_data_offsets_sched_process_wait {};
-
-struct trace_event_data_offsets_sched_process_fork {};
-
-struct trace_event_data_offsets_sched_process_exec {
-	u32 filename;
-};
-
-struct trace_event_data_offsets_sched_stat_template {};
-
-struct trace_event_data_offsets_sched_stat_runtime {};
-
-struct trace_event_data_offsets_sched_pi_setprio {};
-
-struct trace_event_data_offsets_sched_move_task_template {};
-
-struct trace_event_data_offsets_sched_swap_numa {};
-
-struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
-
-typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
-
-typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
-
-typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
-
-typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
-
-typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
-
-typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
-
-typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, int);
-
-typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
-
-typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
-
-struct migration_arg {
-	struct task_struct *task;
-	int dest_cpu;
-};
-
-enum {
-	cpuset = 0,
-	possible = 1,
-	fail = 2,
-};
-
-enum tick_dep_bits {
-	TICK_DEP_BIT_POSIX_TIMER = 0,
-	TICK_DEP_BIT_PERF_EVENTS = 1,
-	TICK_DEP_BIT_SCHED = 2,
-	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
-	TICK_DEP_BIT_RCU = 4,
-};
-
-struct sched_clock_data {
-	u64 tick_raw;
-	u64 tick_gtod;
-	u64 clock;
-};
-
-typedef u64 pao_T_____5;
-
-struct idle_timer {
-	struct hrtimer timer;
-	int done;
-};
-
-enum schedutil_type {
-	FREQUENCY_UTIL = 0,
-	ENERGY_UTIL = 1,
-};
-
-enum fbq_type {
-	regular = 0,
-	remote = 1,
-	all = 2,
-};
-
-enum group_type {
-	group_has_spare = 0,
-	group_fully_busy = 1,
-	group_misfit_task = 2,
-	group_asym_packing = 3,
-	group_imbalanced = 4,
-	group_overloaded = 5,
-};
-
-enum migration_type {
-	migrate_load = 0,
-	migrate_util = 1,
-	migrate_task = 2,
-	migrate_misfit = 3,
-};
-
-struct lb_env {
-	struct sched_domain *sd;
-	struct rq *src_rq;
-	int src_cpu;
-	int dst_cpu;
-	struct rq *dst_rq;
-	struct cpumask *dst_grpmask;
-	int new_dst_cpu;
-	enum cpu_idle_type idle;
-	long int imbalance;
-	struct cpumask *cpus;
-	unsigned int flags;
-	unsigned int loop;
-	unsigned int loop_break;
-	unsigned int loop_max;
-	enum fbq_type fbq_type;
-	enum migration_type migration_type;
-	struct list_head tasks;
-};
-
-struct sg_lb_stats {
-	long unsigned int avg_load;
-	long unsigned int group_load;
-	long unsigned int group_capacity;
-	long unsigned int group_util;
-	unsigned int sum_nr_running;
-	unsigned int sum_h_nr_running;
-	unsigned int idle_cpus;
-	unsigned int group_weight;
-	enum group_type group_type;
-	unsigned int group_asym_packing;
-	long unsigned int group_misfit_task_load;
-};
-
-struct sd_lb_stats {
-	struct sched_group *busiest;
-	struct sched_group *local;
-	long unsigned int total_load;
-	long unsigned int total_capacity;
-	long unsigned int avg_load;
-	unsigned int prefer_sibling;
-	struct sg_lb_stats busiest_stat;
-	struct sg_lb_stats local_stat;
-};
-
-typedef struct rt_rq *rt_rq_iter_t;
-
-struct wait_bit_key {
-	void *flags;
-	int bit_nr;
-	long unsigned int timeout;
-};
-
-struct wait_bit_queue_entry {
-	struct wait_bit_key key;
-	struct wait_queue_entry wq_entry;
-};
-
-typedef int wait_bit_action_f(struct wait_bit_key *, int);
-
-struct swait_queue_head {
-	raw_spinlock_t lock;
-	struct list_head task_list;
-};
-
-struct swait_queue {
-	struct task_struct *task;
-	struct list_head task_list;
-};
-
-struct sched_domain_attr {
-	int relax_domain_level;
-};
-
-struct s_data {
-	struct sched_domain **sd;
-	struct root_domain___2 *rd;
-};
-
-enum s_alloc {
-	sa_rootdomain = 0,
-	sa_sd = 1,
-	sa_sd_storage = 2,
-	sa_none = 3,
-};
-
-enum cpuacct_stat_index {
-	CPUACCT_STAT_USER = 0,
-	CPUACCT_STAT_SYSTEM = 1,
-	CPUACCT_STAT_NSTATS = 2,
-};
-
-struct cpuacct_usage {
-	u64 usages[2];
-};
-
-struct cpuacct {
-	struct cgroup_subsys_state css;
-	struct cpuacct_usage *cpuusage;
-	struct kernel_cpustat *cpustat;
-};
-
-enum {
-	MEMBARRIER_FLAG_SYNC_CORE = 1,
-};
-
-enum membarrier_cmd {
-	MEMBARRIER_CMD_QUERY = 0,
-	MEMBARRIER_CMD_GLOBAL = 1,
-	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
-	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
-	MEMBARRIER_CMD_SHARED = 1,
-};
-
-struct ww_acquire_ctx;
-
-struct mutex_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	struct ww_acquire_ctx *ww_ctx;
-};
-
-struct ww_acquire_ctx {
-	struct task_struct *task;
-	long unsigned int stamp;
-	unsigned int acquired;
-	short unsigned int wounded;
-	short unsigned int is_wait_die;
-};
-
-enum mutex_trylock_recursive_enum {
-	MUTEX_TRYLOCK_FAILED = 0,
-	MUTEX_TRYLOCK_SUCCESS = 1,
-	MUTEX_TRYLOCK_RECURSIVE = 2,
-};
-
-struct ww_mutex {
-	struct mutex base;
-	struct ww_acquire_ctx *ctx;
-};
-
-struct semaphore {
-	raw_spinlock_t lock;
-	unsigned int count;
-	struct list_head wait_list;
-};
-
-struct semaphore_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	bool up;
-};
-
-enum rwsem_waiter_type {
-	RWSEM_WAITING_FOR_WRITE = 0,
-	RWSEM_WAITING_FOR_READ = 1,
-};
-
-struct rwsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-	enum rwsem_waiter_type type;
-	long unsigned int timeout;
-	long unsigned int last_rowner;
-};
-
-enum rwsem_wake_type {
-	RWSEM_WAKE_ANY = 0,
-	RWSEM_WAKE_READERS = 1,
-	RWSEM_WAKE_READ_OWNED = 2,
-};
-
-enum writer_wait_state {
-	WRITER_NOT_FIRST = 0,
-	WRITER_FIRST = 1,
-	WRITER_HANDOFF = 2,
-};
-
-enum owner_state {
-	OWNER_NULL = 1,
-	OWNER_WRITER = 2,
-	OWNER_READER = 4,
-	OWNER_NONSPINNABLE = 8,
-};
-
-struct optimistic_spin_node {
-	struct optimistic_spin_node *next;
-	struct optimistic_spin_node *prev;
-	int locked;
-	int cpu;
-};
-
-struct mcs_spinlock {
-	struct mcs_spinlock *next;
-	int locked;
-	int count;
-};
-
-struct qnode {
-	struct mcs_spinlock mcs;
-};
-
-struct hrtimer_sleeper {
-	struct hrtimer timer;
-	struct task_struct *task;
-};
-
-struct rt_mutex;
-
-struct rt_mutex_waiter {
-	struct rb_node tree_entry;
-	struct rb_node pi_tree_entry;
-	struct task_struct *task;
-	struct rt_mutex *lock;
-	int prio;
-	u64 deadline;
-};
-
-struct rt_mutex {
-	raw_spinlock_t wait_lock;
-	struct rb_root_cached waiters;
-	struct task_struct *owner;
-};
-
-enum rtmutex_chainwalk {
-	RT_MUTEX_MIN_CHAINWALK = 0,
-	RT_MUTEX_FULL_CHAINWALK = 1,
-};
-
-enum pm_qos_req_action {
-	PM_QOS_ADD_REQ = 0,
-	PM_QOS_UPDATE_REQ = 1,
-	PM_QOS_REMOVE_REQ = 2,
-};
-
-struct miscdevice {
-	int minor;
-	const char *name;
-	const struct file_operations *fops;
-	struct list_head list;
-	struct device *parent;
-	struct device *this_device;
-	const struct attribute_group **groups;
-	const char *nodename;
-	umode_t mode;
-};
-
-struct pm_qos_object {
-	struct pm_qos_constraints *constraints;
-	struct miscdevice pm_qos_power_miscdev;
-	char *name;
-};
-
-enum {
-	TEST_NONE = 0,
-	TEST_CORE = 1,
-	TEST_CPUS = 2,
-	TEST_PLATFORM = 3,
-	TEST_DEVICES = 4,
-	TEST_FREEZER = 5,
-	__TEST_AFTER_LAST = 6,
-};
-
-struct pm_vt_switch {
-	struct list_head head;
-	struct device *dev;
-	bool required;
-};
-
-struct platform_suspend_ops {
-	int (*valid)(suspend_state_t);
-	int (*begin)(suspend_state_t);
-	int (*prepare)();
-	int (*prepare_late)();
-	int (*enter)(suspend_state_t);
-	void (*wake)();
-	void (*finish)();
-	bool (*suspend_again)();
-	void (*end)();
-	void (*recover)();
-};
-
-struct platform_s2idle_ops {
-	int (*begin)();
-	int (*prepare)();
-	int (*prepare_late)();
-	void (*wake)();
-	void (*restore_early)();
-	void (*restore)();
-	void (*end)();
-};
-
-struct platform_hibernation_ops {
-	int (*begin)(pm_message_t);
-	void (*end)();
-	int (*pre_snapshot)();
-	void (*finish)();
-	int (*prepare)();
-	int (*enter)();
-	void (*leave)();
-	int (*pre_restore)();
-	void (*restore_cleanup)();
-	void (*recover)();
-};
-
-enum {
-	HIBERNATION_INVALID = 0,
-	HIBERNATION_PLATFORM = 1,
-	HIBERNATION_SHUTDOWN = 2,
-	HIBERNATION_REBOOT = 3,
-	HIBERNATION_SUSPEND = 4,
-	HIBERNATION_TEST_RESUME = 5,
-	__HIBERNATION_AFTER_LAST = 6,
-};
-
-struct swsusp_info {
-	struct new_utsname uts;
-	u32 version_code;
-	long unsigned int num_physpages;
-	int cpus;
-	long unsigned int image_pages;
-	long unsigned int pages;
-	long unsigned int size;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct snapshot_handle {
-	unsigned int cur;
-	void *buffer;
-	int sync_read;
-};
-
-struct linked_page {
-	struct linked_page *next;
-	char data[4088];
-};
-
-struct chain_allocator {
-	struct linked_page *chain;
-	unsigned int used_space;
-	gfp_t gfp_mask;
-	int safe_needed;
-};
-
-struct rtree_node {
-	struct list_head list;
-	long unsigned int *data;
-};
-
-struct mem_zone_bm_rtree {
-	struct list_head list;
-	struct list_head nodes;
-	struct list_head leaves;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	struct rtree_node *rtree;
-	int levels;
-	unsigned int blocks;
-};
-
-struct bm_position {
-	struct mem_zone_bm_rtree *zone;
-	struct rtree_node *node;
-	long unsigned int node_pfn;
-	int node_bit;
-};
-
-struct memory_bitmap {
-	struct list_head zones;
-	struct linked_page *p_list;
-	struct bm_position cur;
-};
-
-struct mem_extent {
-	struct list_head hook;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct nosave_region {
-	struct list_head list;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-};
-
-typedef struct {
-	long unsigned int val;
-} swp_entry_t;
-
-enum {
-	BIO_NO_PAGE_REF = 0,
-	BIO_CLONED = 1,
-	BIO_BOUNCED = 2,
-	BIO_USER_MAPPED = 3,
-	BIO_NULL_MAPPED = 4,
-	BIO_WORKINGSET = 5,
-	BIO_QUIET = 6,
-	BIO_CHAIN = 7,
-	BIO_REFFED = 8,
-	BIO_THROTTLED = 9,
-	BIO_TRACE_COMPLETION = 10,
-	BIO_QUEUE_ENTERED = 11,
-	BIO_TRACKED = 12,
-	BIO_FLAG_LAST = 13,
-};
-
-enum req_opf {
-	REQ_OP_READ = 0,
-	REQ_OP_WRITE = 1,
-	REQ_OP_FLUSH = 2,
-	REQ_OP_DISCARD = 3,
-	REQ_OP_SECURE_ERASE = 5,
-	REQ_OP_ZONE_RESET = 6,
-	REQ_OP_WRITE_SAME = 7,
-	REQ_OP_ZONE_RESET_ALL = 8,
-	REQ_OP_WRITE_ZEROES = 9,
-	REQ_OP_ZONE_OPEN = 10,
-	REQ_OP_ZONE_CLOSE = 11,
-	REQ_OP_ZONE_FINISH = 12,
-	REQ_OP_SCSI_IN = 32,
-	REQ_OP_SCSI_OUT = 33,
-	REQ_OP_DRV_IN = 34,
-	REQ_OP_DRV_OUT = 35,
-	REQ_OP_LAST = 36,
-};
-
-enum req_flag_bits {
-	__REQ_FAILFAST_DEV = 8,
-	__REQ_FAILFAST_TRANSPORT = 9,
-	__REQ_FAILFAST_DRIVER = 10,
-	__REQ_SYNC = 11,
-	__REQ_META = 12,
-	__REQ_PRIO = 13,
-	__REQ_NOMERGE = 14,
-	__REQ_IDLE = 15,
-	__REQ_INTEGRITY = 16,
-	__REQ_FUA = 17,
-	__REQ_PREFLUSH = 18,
-	__REQ_RAHEAD = 19,
-	__REQ_BACKGROUND = 20,
-	__REQ_NOWAIT = 21,
-	__REQ_NOWAIT_INLINE = 22,
-	__REQ_CGROUP_PUNT = 23,
-	__REQ_NOUNMAP = 24,
-	__REQ_HIPRI = 25,
-	__REQ_DRV = 26,
-	__REQ_SWAP = 27,
-	__REQ_NR_BITS = 28,
-};
-
-struct swap_map_page {
-	sector_t entries[511];
-	sector_t next_swap;
-};
-
-struct swap_map_page_list {
-	struct swap_map_page *map;
-	struct swap_map_page_list *next;
-};
-
-struct swap_map_handle {
-	struct swap_map_page *cur;
-	struct swap_map_page_list *maps;
-	sector_t cur_swap;
-	sector_t first_sector;
-	unsigned int k;
-	long unsigned int reqd_free_pages;
-	u32 crc32;
-};
-
-struct swsusp_header {
-	char reserved[4060];
-	u32 crc32;
-	sector_t image;
-	unsigned int flags;
-	char orig_sig[10];
-	char sig[10];
-};
-
-struct swsusp_extent {
-	struct rb_node node;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct hib_bio_batch {
-	atomic_t count;
-	wait_queue_head_t wait;
-	blk_status_t error;
-};
-
-struct crc_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	unsigned int run_threads;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	u32 *crc32;
-	size_t *unc_len[3];
-	unsigned char *unc[3];
-};
-
-struct cmp_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[131072];
-	unsigned char cmp[143360];
-	unsigned char wrk[16384];
-};
-
-struct dec_data {
-	struct task_struct *thr;
-	atomic_t ready;
-	atomic_t stop;
-	int ret;
-	wait_queue_head_t go;
-	wait_queue_head_t done;
-	size_t unc_len;
-	size_t cmp_len;
-	unsigned char unc[131072];
-	unsigned char cmp[143360];
-};
-
-typedef s64 compat_loff_t;
-
-struct resume_swap_area {
-	__kernel_loff_t offset;
-	__u32 dev;
-} __attribute__((packed));
-
-struct snapshot_data {
-	struct snapshot_handle handle;
-	int swap;
-	int mode;
-	bool frozen;
-	bool ready;
-	bool platform_support;
-	bool free_bitmaps;
-};
-
-struct compat_resume_swap_area {
-	compat_loff_t offset;
-	u32 dev;
-} __attribute__((packed));
-
-struct sysrq_key_op {
-	void (*handler)(int);
-	char *help_msg;
-	char *action_msg;
-	int enable_mask;
-};
-
-struct kmsg_dumper {
-	struct list_head list;
-	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
-	enum kmsg_dump_reason max_reason;
-	bool active;
-	bool registered;
-	u32 cur_idx;
-	u32 next_idx;
-	u64 cur_seq;
-	u64 next_seq;
-};
-
-struct trace_event_raw_console {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_console {
-	u32 msg;
-};
-
-typedef void (*btf_trace_console)(void *, const char *, size_t);
-
-struct console_cmdline {
-	char name[16];
-	int index;
-	char *options;
-};
-
-enum devkmsg_log_bits {
-	__DEVKMSG_LOG_BIT_ON = 0,
-	__DEVKMSG_LOG_BIT_OFF = 1,
-	__DEVKMSG_LOG_BIT_LOCK = 2,
-};
-
-enum devkmsg_log_masks {
-	DEVKMSG_LOG_MASK_ON = 1,
-	DEVKMSG_LOG_MASK_OFF = 2,
-	DEVKMSG_LOG_MASK_LOCK = 4,
-};
-
-enum con_msg_format_flags {
-	MSG_FORMAT_DEFAULT = 0,
-	MSG_FORMAT_SYSLOG = 1,
-};
-
-enum log_flags {
-	LOG_NEWLINE = 2,
-	LOG_CONT = 8,
-};
-
-struct printk_log {
-	u64 ts_nsec;
-	u16 len;
-	u16 text_len;
-	u16 dict_len;
-	u8 facility;
-	u8 flags: 5;
-	u8 level: 3;
-};
-
-struct devkmsg_user {
-	u64 seq;
-	u32 idx;
-	struct ratelimit_state rs;
-	struct mutex lock;
-	char buf[8192];
-};
-
-struct cont {
-	char buf[992];
-	size_t len;
-	u32 caller_id;
-	u64 ts_nsec;
-	u8 level;
-	u8 facility;
-	enum log_flags flags;
-};
-
-struct printk_safe_seq_buf {
-	atomic_t len;
-	atomic_t message_lost;
-	struct irq_work work;
-	unsigned char buffer[8160];
-};
-
-enum {
-	IRQS_AUTODETECT = 1,
-	IRQS_SPURIOUS_DISABLED = 2,
-	IRQS_POLL_INPROGRESS = 8,
-	IRQS_ONESHOT = 32,
-	IRQS_REPLAY = 64,
-	IRQS_WAITING = 128,
-	IRQS_PENDING = 512,
-	IRQS_SUSPENDED = 2048,
-	IRQS_TIMINGS = 4096,
-	IRQS_NMI = 8192,
-};
-
-enum {
-	_IRQ_DEFAULT_INIT_FLAGS = 0,
-	_IRQ_PER_CPU = 512,
-	_IRQ_LEVEL = 256,
-	_IRQ_NOPROBE = 1024,
-	_IRQ_NOREQUEST = 2048,
-	_IRQ_NOTHREAD = 65536,
-	_IRQ_NOAUTOEN = 4096,
-	_IRQ_MOVE_PCNTXT = 16384,
-	_IRQ_NO_BALANCING = 8192,
-	_IRQ_NESTED_THREAD = 32768,
-	_IRQ_PER_CPU_DEVID = 131072,
-	_IRQ_IS_POLLED = 262144,
-	_IRQ_DISABLE_UNLAZY = 524288,
-	_IRQF_MODIFY_MASK = 1048335,
-};
-
-enum {
-	IRQTF_RUNTHREAD = 0,
-	IRQTF_WARNED = 1,
-	IRQTF_AFFINITY = 2,
-	IRQTF_FORCED_THREAD = 3,
-};
-
-enum {
-	IRQC_IS_HARDIRQ = 0,
-	IRQC_IS_NESTED = 1,
-};
-
-enum {
-	IRQ_STARTUP_NORMAL = 0,
-	IRQ_STARTUP_MANAGED = 1,
-	IRQ_STARTUP_ABORT = 2,
-};
-
-struct irq_devres {
-	unsigned int irq;
-	void *dev_id;
-};
-
-struct irq_desc_devres {
-	unsigned int from;
-	unsigned int cnt;
-};
-
-enum {
-	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
-	IRQ_DOMAIN_NAME_ALLOCATED = 64,
-	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
-	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
-	IRQ_DOMAIN_FLAG_MSI = 16,
-	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
-	IRQ_DOMAIN_FLAG_NONCORE = 65536,
-};
-
-typedef u64 acpi_size;
-
-typedef u64 acpi_io_address;
-
-typedef u32 acpi_object_type;
-
-union acpi_object {
-	acpi_object_type type;
-	struct {
-		acpi_object_type type;
-		u64 value;
-	} integer;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		char *pointer;
-	} string;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		u8 *pointer;
-	} buffer;
-	struct {
-		acpi_object_type type;
-		u32 count;
-		union acpi_object *elements;
-	} package;
-	struct {
-		acpi_object_type type;
-		acpi_object_type actual_type;
-		acpi_handle handle;
-	} reference;
-	struct {
-		acpi_object_type type;
-		u32 proc_id;
-		acpi_io_address pblk_address;
-		u32 pblk_length;
-	} processor;
-	struct {
-		acpi_object_type type;
-		u32 system_level;
-		u32 resource_order;
-	} power_resource;
-};
-
-struct acpi_buffer {
-	acpi_size length;
-	void *pointer;
-};
-
-struct acpi_hotplug_profile {
-	struct kobject kobj;
-	int (*scan_dependent)(struct acpi_device *);
-	void (*notify_online)(struct acpi_device *);
-	bool enabled: 1;
-	bool demand_offline: 1;
-};
-
-struct acpi_device_status {
-	u32 present: 1;
-	u32 enabled: 1;
-	u32 show_in_ui: 1;
-	u32 functional: 1;
-	u32 battery_present: 1;
-	u32 reserved: 27;
-};
-
-struct acpi_device_flags {
-	u32 dynamic_status: 1;
-	u32 removable: 1;
-	u32 ejectable: 1;
-	u32 power_manageable: 1;
-	u32 match_driver: 1;
-	u32 initialized: 1;
-	u32 visited: 1;
-	u32 hotplug_notify: 1;
-	u32 is_dock_station: 1;
-	u32 of_compatible_ok: 1;
-	u32 coherent_dma: 1;
-	u32 cca_seen: 1;
-	u32 enumeration_by_parent: 1;
-	u32 reserved: 19;
-};
-
-typedef char acpi_bus_id[8];
-
-struct acpi_pnp_type {
-	u32 hardware_id: 1;
-	u32 bus_address: 1;
-	u32 platform_id: 1;
-	u32 reserved: 29;
-};
-
-typedef u64 acpi_bus_address;
-
-typedef char acpi_device_name[40];
-
-typedef char acpi_device_class[20];
-
-struct acpi_device_pnp {
-	acpi_bus_id bus_id;
-	struct acpi_pnp_type type;
-	acpi_bus_address bus_address;
-	char *unique_id;
-	struct list_head ids;
-	acpi_device_name device_name;
-	acpi_device_class device_class;
-	union acpi_object *str_obj;
-};
-
-struct acpi_device_power_flags {
-	u32 explicit_get: 1;
-	u32 power_resources: 1;
-	u32 inrush_current: 1;
-	u32 power_removed: 1;
-	u32 ignore_parent: 1;
-	u32 dsw_present: 1;
-	u32 reserved: 26;
-};
-
-struct acpi_device_power_state {
-	struct {
-		u8 valid: 1;
-		u8 explicit_set: 1;
-		u8 reserved: 6;
-	} flags;
-	int power;
-	int latency;
-	struct list_head resources;
-};
-
-struct acpi_device_power {
-	int state;
-	struct acpi_device_power_flags flags;
-	struct acpi_device_power_state states[5];
-};
-
-struct acpi_device_wakeup_flags {
-	u8 valid: 1;
-	u8 notifier_present: 1;
-};
-
-struct acpi_device_wakeup_context {
-	void (*func)(struct acpi_device_wakeup_context *);
-	struct device *dev;
-};
-
-struct acpi_device_wakeup {
-	acpi_handle gpe_device;
-	u64 gpe_number;
-	u64 sleep_state;
-	struct list_head resources;
-	struct acpi_device_wakeup_flags flags;
-	struct acpi_device_wakeup_context context;
-	struct wakeup_source *ws;
-	int prepare_count;
-	int enable_count;
-};
-
-struct acpi_device_perf_flags {
-	u8 reserved: 8;
-};
-
-struct acpi_device_perf_state;
-
-struct acpi_device_perf {
-	int state;
-	struct acpi_device_perf_flags flags;
-	int state_count;
-	struct acpi_device_perf_state *states;
-};
-
-struct acpi_device_dir {
-	struct proc_dir_entry *entry;
-};
-
-struct acpi_device_data {
-	const union acpi_object *pointer;
-	struct list_head properties;
-	const union acpi_object *of_compatible;
-	struct list_head subnodes;
-};
-
-struct acpi_scan_handler;
-
-struct acpi_hotplug_context;
-
-struct acpi_driver;
-
-struct acpi_gpio_mapping;
-
-struct acpi_device {
-	int device_type;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct acpi_device *parent;
-	struct list_head children;
-	struct list_head node;
-	struct list_head wakeup_list;
-	struct list_head del_list;
-	struct acpi_device_status status;
-	struct acpi_device_flags flags;
-	struct acpi_device_pnp pnp;
-	struct acpi_device_power power;
-	struct acpi_device_wakeup wakeup;
-	struct acpi_device_perf performance;
-	struct acpi_device_dir dir;
-	struct acpi_device_data data;
-	struct acpi_scan_handler *handler;
-	struct acpi_hotplug_context *hp;
-	struct acpi_driver *driver;
-	const struct acpi_gpio_mapping *driver_gpios;
-	void *driver_data;
-	struct device dev;
-	unsigned int physical_node_count;
-	unsigned int dep_unmet;
-	struct list_head physical_node_list;
-	struct mutex physical_node_lock;
-	void (*remove)(struct acpi_device *);
-};
-
-struct acpi_scan_handler {
-	const struct acpi_device_id *ids;
-	struct list_head list_node;
-	bool (*match)(const char *, const struct acpi_device_id **);
-	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
-	void (*detach)(struct acpi_device *);
-	void (*bind)(struct device *);
-	void (*unbind)(struct device *);
-	struct acpi_hotplug_profile hotplug;
-};
-
-struct acpi_hotplug_context {
-	struct acpi_device *self;
-	int (*notify)(struct acpi_device *, u32);
-	void (*uevent)(struct acpi_device *, u32);
-	void (*fixup)(struct acpi_device *);
-};
-
-typedef int (*acpi_op_add)(struct acpi_device *);
-
-typedef int (*acpi_op_remove)(struct acpi_device *);
-
-typedef void (*acpi_op_notify)(struct acpi_device *, u32);
-
-struct acpi_device_ops {
-	acpi_op_add add;
-	acpi_op_remove remove;
-	acpi_op_notify notify;
-};
-
-struct acpi_driver {
-	char name[80];
-	char class[80];
-	const struct acpi_device_id *ids;
-	unsigned int flags;
-	struct acpi_device_ops ops;
-	struct device_driver drv;
-	struct module *owner;
-};
-
-struct acpi_device_perf_state {
-	struct {
-		u8 valid: 1;
-		u8 reserved: 7;
-	} flags;
-	u8 power;
-	u8 performance;
-	int latency;
-};
-
-struct acpi_gpio_params;
-
-struct acpi_gpio_mapping {
-	const char *name;
-	const struct acpi_gpio_params *data;
-	unsigned int size;
-	unsigned int quirks;
-};
-
-struct irqchip_fwid {
-	struct fwnode_handle fwnode;
-	unsigned int type;
-	char *name;
-	phys_addr_t *pa;
-};
-
-enum {
-	AFFINITY = 0,
-	AFFINITY_LIST = 1,
-	EFFECTIVE = 2,
-	EFFECTIVE_LIST = 3,
-};
-
-struct irq_affinity {
-	unsigned int pre_vectors;
-	unsigned int post_vectors;
-	unsigned int nr_sets;
-	unsigned int set_size[4];
-	void (*calc_sets)(struct irq_affinity *, unsigned int);
-	void *priv;
-};
-
-struct node_vectors {
-	unsigned int id;
-	union {
-		unsigned int nvectors;
-		unsigned int ncpus;
-	};
-};
-
-struct cpumap {
-	unsigned int available;
-	unsigned int allocated;
-	unsigned int managed;
-	unsigned int managed_allocated;
-	bool initialized;
-	bool online;
-	long unsigned int alloc_map[4];
-	long unsigned int managed_map[4];
-};
-
-struct irq_matrix___2 {
-	unsigned int matrix_bits;
-	unsigned int alloc_start;
-	unsigned int alloc_end;
-	unsigned int alloc_size;
-	unsigned int global_available;
-	unsigned int global_reserved;
-	unsigned int systembits_inalloc;
-	unsigned int total_allocated;
-	unsigned int online_maps;
-	struct cpumap *maps;
-	long unsigned int scratch_map[4];
-	long unsigned int system_map[4];
-};
-
-struct trace_event_raw_irq_matrix_global {
-	struct trace_entry ent;
-	unsigned int online_maps;
-	unsigned int global_available;
-	unsigned int global_reserved;
-	unsigned int total_allocated;
-	char __data[0];
-};
-
-struct trace_event_raw_irq_matrix_global_update {
-	struct trace_entry ent;
-	int bit;
-	unsigned int online_maps;
-	unsigned int global_available;
-	unsigned int global_reserved;
-	unsigned int total_allocated;
-	char __data[0];
-};
-
-struct trace_event_raw_irq_matrix_cpu {
-	struct trace_entry ent;
-	int bit;
-	unsigned int cpu;
-	bool online;
-	unsigned int available;
-	unsigned int allocated;
-	unsigned int managed;
-	unsigned int online_maps;
-	unsigned int global_available;
-	unsigned int global_reserved;
-	unsigned int total_allocated;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_irq_matrix_global {};
-
-struct trace_event_data_offsets_irq_matrix_global_update {};
-
-struct trace_event_data_offsets_irq_matrix_cpu {};
-
-typedef void (*btf_trace_irq_matrix_online)(void *, struct irq_matrix___2 *);
-
-typedef void (*btf_trace_irq_matrix_offline)(void *, struct irq_matrix___2 *);
-
-typedef void (*btf_trace_irq_matrix_reserve)(void *, struct irq_matrix___2 *);
-
-typedef void (*btf_trace_irq_matrix_remove_reserved)(void *, struct irq_matrix___2 *);
-
-typedef void (*btf_trace_irq_matrix_assign_system)(void *, int, struct irq_matrix___2 *);
-
-typedef void (*btf_trace_irq_matrix_alloc_reserved)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_reserve_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_remove_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_alloc_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_assign)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_alloc)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*btf_trace_irq_matrix_free)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
-
-typedef void (*rcu_callback_t)(struct callback_head *);
-
-typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
-
-struct rcu_synchronize {
-	struct callback_head head;
-	struct completion completion;
-};
-
-struct trace_event_raw_rcu_utilization {
-	struct trace_entry ent;
-	const char *s;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_grace_period {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	const char *gpevent;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_future_grace_period {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_req;
-	u8 level;
-	int grplo;
-	int grphi;
-	const char *gpevent;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_grace_period_init {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	u8 level;
-	int grplo;
-	int grphi;
-	long unsigned int qsmask;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_exp_grace_period {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gpseq;
-	const char *gpevent;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_exp_funnel_lock {
-	struct trace_entry ent;
-	const char *rcuname;
-	u8 level;
-	int grplo;
-	int grphi;
-	const char *gpevent;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_preempt_task {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_unlock_preempted_task {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_quiescent_state_report {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	long unsigned int mask;
-	long unsigned int qsmask;
-	u8 level;
-	int grplo;
-	int grphi;
-	u8 gp_tasks;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_fqs {
-	struct trace_entry ent;
-	const char *rcuname;
-	long unsigned int gp_seq;
-	int cpu;
-	const char *qsevent;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_dyntick {
-	struct trace_entry ent;
-	const char *polarity;
-	long int oldnesting;
-	long int newnesting;
-	int dynticks;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_callback {
-	struct trace_entry ent;
-	const char *rcuname;
-	void *rhp;
-	void *func;
-	long int qlen_lazy;
-	long int qlen;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_kfree_callback {
-	struct trace_entry ent;
-	const char *rcuname;
-	void *rhp;
-	long unsigned int offset;
-	long int qlen_lazy;
-	long int qlen;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_batch_start {
-	struct trace_entry ent;
-	const char *rcuname;
-	long int qlen_lazy;
-	long int qlen;
-	long int blimit;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_invoke_callback {
-	struct trace_entry ent;
-	const char *rcuname;
-	void *rhp;
-	void *func;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_invoke_kfree_callback {
-	struct trace_entry ent;
-	const char *rcuname;
-	void *rhp;
-	long unsigned int offset;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_batch_end {
-	struct trace_entry ent;
-	const char *rcuname;
-	int callbacks_invoked;
-	char cb;
-	char nr;
-	char iit;
-	char risk;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_torture_read {
-	struct trace_entry ent;
-	char rcutorturename[8];
-	struct callback_head *rhp;
-	long unsigned int secs;
-	long unsigned int c_old;
-	long unsigned int c;
-	char __data[0];
-};
-
-struct trace_event_raw_rcu_barrier {
-	struct trace_entry ent;
-	const char *rcuname;
-	const char *s;
-	int cpu;
-	int cnt;
-	long unsigned int done;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rcu_utilization {};
-
-struct trace_event_data_offsets_rcu_grace_period {};
-
-struct trace_event_data_offsets_rcu_future_grace_period {};
-
-struct trace_event_data_offsets_rcu_grace_period_init {};
-
-struct trace_event_data_offsets_rcu_exp_grace_period {};
-
-struct trace_event_data_offsets_rcu_exp_funnel_lock {};
-
-struct trace_event_data_offsets_rcu_preempt_task {};
-
-struct trace_event_data_offsets_rcu_unlock_preempted_task {};
-
-struct trace_event_data_offsets_rcu_quiescent_state_report {};
-
-struct trace_event_data_offsets_rcu_fqs {};
-
-struct trace_event_data_offsets_rcu_dyntick {};
-
-struct trace_event_data_offsets_rcu_callback {};
-
-struct trace_event_data_offsets_rcu_kfree_callback {};
-
-struct trace_event_data_offsets_rcu_batch_start {};
-
-struct trace_event_data_offsets_rcu_invoke_callback {};
-
-struct trace_event_data_offsets_rcu_invoke_kfree_callback {};
-
-struct trace_event_data_offsets_rcu_batch_end {};
-
-struct trace_event_data_offsets_rcu_torture_read {};
-
-struct trace_event_data_offsets_rcu_barrier {};
-
-typedef void (*btf_trace_rcu_utilization)(void *, const char *);
-
-typedef void (*btf_trace_rcu_grace_period)(void *, const char *, long unsigned int, const char *);
-
-typedef void (*btf_trace_rcu_future_grace_period)(void *, const char *, long unsigned int, long unsigned int, u8, int, int, const char *);
-
-typedef void (*btf_trace_rcu_grace_period_init)(void *, const char *, long unsigned int, u8, int, int, long unsigned int);
-
-typedef void (*btf_trace_rcu_exp_grace_period)(void *, const char *, long unsigned int, const char *);
-
-typedef void (*btf_trace_rcu_exp_funnel_lock)(void *, const char *, u8, int, int, const char *);
-
-typedef void (*btf_trace_rcu_preempt_task)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_rcu_unlock_preempted_task)(void *, const char *, long unsigned int, int);
-
-typedef void (*btf_trace_rcu_quiescent_state_report)(void *, const char *, long unsigned int, long unsigned int, long unsigned int, u8, int, int, int);
-
-typedef void (*btf_trace_rcu_fqs)(void *, const char *, long unsigned int, int, const char *);
-
-typedef void (*btf_trace_rcu_dyntick)(void *, const char *, long int, long int, atomic_t);
-
-typedef void (*btf_trace_rcu_callback)(void *, const char *, struct callback_head *, long int, long int);
-
-typedef void (*btf_trace_rcu_kfree_callback)(void *, const char *, struct callback_head *, long unsigned int, long int, long int);
-
-typedef void (*btf_trace_rcu_batch_start)(void *, const char *, long int, long int, long int);
-
-typedef void (*btf_trace_rcu_invoke_callback)(void *, const char *, struct callback_head *);
-
-typedef void (*btf_trace_rcu_invoke_kfree_callback)(void *, const char *, struct callback_head *, long unsigned int);
-
-typedef void (*btf_trace_rcu_batch_end)(void *, const char *, int, char, char, char, char);
-
-typedef void (*btf_trace_rcu_torture_read)(void *, const char *, struct callback_head *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_rcu_barrier)(void *, const char *, const char *, int, int, long unsigned int);
-
-enum {
-	GP_IDLE = 0,
-	GP_ENTER = 1,
-	GP_PASSED = 2,
-	GP_EXIT = 3,
-	GP_REPLAY = 4,
-};
-
-typedef long unsigned int ulong;
-
-struct rcu_cblist {
-	struct callback_head *head;
-	struct callback_head **tail;
-	long int len;
-	long int len_lazy;
-};
-
-enum rcutorture_type {
-	RCU_FLAVOR = 0,
-	RCU_TASKS_FLAVOR = 1,
-	RCU_TRIVIAL_FLAVOR = 2,
-	SRCU_FLAVOR = 3,
-	INVALID_RCU_FLAVOR = 4,
-};
-
-enum tick_device_mode {
-	TICKDEV_MODE_PERIODIC = 0,
-	TICKDEV_MODE_ONESHOT = 1,
-};
-
-struct tick_device___2 {
-	struct clock_event_device *evtdev;
-	enum tick_device_mode mode;
-};
-
-struct rcu_exp_work {
-	long unsigned int rew_s;
-	struct work_struct rew_work;
-};
-
-struct rcu_node {
-	raw_spinlock_t lock;
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	long unsigned int completedqs;
-	long unsigned int qsmask;
-	long unsigned int rcu_gp_init_mask;
-	long unsigned int qsmaskinit;
-	long unsigned int qsmaskinitnext;
-	long unsigned int expmask;
-	long unsigned int expmaskinit;
-	long unsigned int expmaskinitnext;
-	long unsigned int ffmask;
-	long unsigned int grpmask;
-	int grplo;
-	int grphi;
-	u8 grpnum;
-	u8 level;
-	bool wait_blkd_tasks;
-	struct rcu_node *parent;
-	struct list_head blkd_tasks;
-	struct list_head *gp_tasks;
-	struct list_head *exp_tasks;
-	struct list_head *boost_tasks;
-	struct rt_mutex boost_mtx;
-	long unsigned int boost_time;
-	struct task_struct *boost_kthread_task;
-	unsigned int boost_kthread_status;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	raw_spinlock_t fqslock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t exp_lock;
-	long unsigned int exp_seq_rq;
-	wait_queue_head_t exp_wq[4];
-	struct rcu_exp_work rew;
-	bool exp_need_flush;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-union rcu_noqs {
-	struct {
-		u8 norm;
-		u8 exp;
-	} b;
-	u16 s;
-};
-
-struct rcu_data {
-	long unsigned int gp_seq;
-	long unsigned int gp_seq_needed;
-	union rcu_noqs cpu_no_qs;
-	bool core_needs_qs;
-	bool beenonline;
-	bool gpwrap;
-	bool exp_deferred_qs;
-	struct rcu_node *mynode;
-	long unsigned int grpmask;
-	long unsigned int ticks_this_gp;
-	struct irq_work defer_qs_iw;
-	bool defer_qs_iw_pending;
-	struct rcu_segcblist cblist;
-	long int qlen_last_fqs_check;
-	long unsigned int n_force_qs_snap;
-	long int blimit;
-	int dynticks_snap;
-	long int dynticks_nesting;
-	long int dynticks_nmi_nesting;
-	atomic_t dynticks;
-	bool rcu_need_heavy_qs;
-	bool rcu_urgent_qs;
-	bool rcu_forced_tick;
-	struct callback_head barrier_head;
-	int exp_dynticks_snap;
-	struct task_struct *rcu_cpu_kthread_task;
-	unsigned int rcu_cpu_kthread_status;
-	char rcu_cpu_has_work;
-	unsigned int softirq_snap;
-	struct irq_work rcu_iw;
-	bool rcu_iw_pending;
-	long unsigned int rcu_iw_gp_seq;
-	long unsigned int rcu_ofl_gp_seq;
-	short int rcu_ofl_gp_flags;
-	long unsigned int rcu_onl_gp_seq;
-	short int rcu_onl_gp_flags;
-	long unsigned int last_fqs_resched;
-	int cpu;
-};
-
-struct rcu_state {
-	struct rcu_node node[5];
-	struct rcu_node *level[3];
-	int ncpus;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u8 boost;
-	long unsigned int gp_seq;
-	struct task_struct *gp_kthread;
-	struct swait_queue_head gp_wq;
-	short int gp_flags;
-	short int gp_state;
-	long unsigned int gp_wake_time;
-	long unsigned int gp_wake_seq;
-	struct mutex barrier_mutex;
-	atomic_t barrier_cpu_count;
-	struct completion barrier_completion;
-	long unsigned int barrier_sequence;
-	struct mutex exp_mutex;
-	struct mutex exp_wake_mutex;
-	long unsigned int expedited_sequence;
-	atomic_t expedited_need_qs;
-	struct swait_queue_head expedited_wq;
-	int ncpus_snap;
-	long unsigned int jiffies_force_qs;
-	long unsigned int jiffies_kick_kthreads;
-	long unsigned int n_force_qs;
-	long unsigned int gp_start;
-	long unsigned int gp_end;
-	long unsigned int gp_activity;
-	long unsigned int gp_req_activity;
-	long unsigned int jiffies_stall;
-	long unsigned int jiffies_resched;
-	long unsigned int n_force_qs_gpstart;
-	long unsigned int gp_max;
-	const char *name;
-	char abbr;
-	long: 56;
-	long: 64;
-	long: 64;
-	raw_spinlock_t ofl_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef char pto_T_____17;
-
-struct dma_devres {
-	size_t size;
-	void *vaddr;
-	dma_addr_t dma_handle;
-	long unsigned int attrs;
-};
-
-enum dma_sync_target {
-	SYNC_FOR_CPU = 0,
-	SYNC_FOR_DEVICE = 1,
-};
-
-struct trace_event_raw_swiotlb_bounced {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u64 dma_mask;
-	dma_addr_t dev_addr;
-	size_t size;
-	enum swiotlb_force swiotlb_force;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_swiotlb_bounced {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);
-
-enum profile_type {
-	PROFILE_TASK_EXIT = 0,
-	PROFILE_MUNMAP = 1,
-};
-
-struct profile_hit {
-	u32 pc;
-	u32 hits;
-};
-
-struct stacktrace_cookie {
-	long unsigned int *store;
-	unsigned int size;
-	unsigned int skip;
-	unsigned int len;
-};
-
-typedef __kernel_long_t __kernel_suseconds_t;
-
-typedef __kernel_long_t __kernel_old_time_t;
-
-typedef __kernel_suseconds_t suseconds_t;
-
-typedef __u64 timeu64_t;
-
-struct __kernel_itimerspec {
-	struct __kernel_timespec it_interval;
-	struct __kernel_timespec it_value;
-};
-
-struct timespec {
-	__kernel_old_time_t tv_sec;
-	long int tv_nsec;
-};
-
-struct timeval {
-	__kernel_old_time_t tv_sec;
-	__kernel_suseconds_t tv_usec;
-};
-
-struct itimerspec64 {
-	struct timespec64 it_interval;
-	struct timespec64 it_value;
-};
-
-struct old_itimerspec32 {
-	struct old_timespec32 it_interval;
-	struct old_timespec32 it_value;
-};
-
-struct old_timex32 {
-	u32 modes;
-	s32 offset;
-	s32 freq;
-	s32 maxerror;
-	s32 esterror;
-	s32 status;
-	s32 constant;
-	s32 precision;
-	s32 tolerance;
-	struct old_timeval32 time;
-	s32 tick;
-	s32 ppsfreq;
-	s32 jitter;
-	s32 shift;
-	s32 stabil;
-	s32 jitcnt;
-	s32 calcnt;
-	s32 errcnt;
-	s32 stbcnt;
-	s32 tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct __kernel_timex_timeval {
-	__kernel_time64_t tv_sec;
-	long long int tv_usec;
-};
-
-struct __kernel_timex {
-	unsigned int modes;
-	long long int offset;
-	long long int freq;
-	long long int maxerror;
-	long long int esterror;
-	int status;
-	long long int constant;
-	long long int precision;
-	long long int tolerance;
-	struct __kernel_timex_timeval time;
-	long long int tick;
-	long long int ppsfreq;
-	long long int jitter;
-	int shift;
-	long long int stabil;
-	long long int jitcnt;
-	long long int calcnt;
-	long long int errcnt;
-	long long int stbcnt;
-	int tai;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct trace_event_raw_timer_class {
-	struct trace_entry ent;
-	void *timer;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_start {
-	struct trace_entry ent;
-	void *timer;
-	void *function;
-	long unsigned int expires;
-	long unsigned int now;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_timer_expire_entry {
-	struct trace_entry ent;
-	void *timer;
-	long unsigned int now;
-	void *function;
-	long unsigned int baseclk;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_init {
-	struct trace_entry ent;
-	void *hrtimer;
-	clockid_t clockid;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_start {
-	struct trace_entry ent;
-	void *hrtimer;
-	void *function;
-	s64 expires;
-	s64 softexpires;
-	enum hrtimer_mode mode;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_expire_entry {
-	struct trace_entry ent;
-	void *hrtimer;
-	s64 now;
-	void *function;
-	char __data[0];
-};
-
-struct trace_event_raw_hrtimer_class {
-	struct trace_entry ent;
-	void *hrtimer;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_state {
-	struct trace_entry ent;
-	int which;
-	long long unsigned int expires;
-	long int value_sec;
-	long int value_nsec;
-	long int interval_sec;
-	long int interval_nsec;
-	char __data[0];
-};
-
-struct trace_event_raw_itimer_expire {
-	struct trace_entry ent;
-	int which;
-	pid_t pid;
-	long long unsigned int now;
-	char __data[0];
-};
-
-struct trace_event_raw_tick_stop {
-	struct trace_entry ent;
-	int success;
-	int dependency;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_timer_class {};
-
-struct trace_event_data_offsets_timer_start {};
-
-struct trace_event_data_offsets_timer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_init {};
-
-struct trace_event_data_offsets_hrtimer_start {};
-
-struct trace_event_data_offsets_hrtimer_expire_entry {};
-
-struct trace_event_data_offsets_hrtimer_class {};
-
-struct trace_event_data_offsets_itimer_state {};
-
-struct trace_event_data_offsets_itimer_expire {};
-
-struct trace_event_data_offsets_tick_stop {};
-
-typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);
-
-typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
-
-typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
-
-typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
-
-typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
-
-typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
-
-typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);
-
-typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);
-
-typedef void (*btf_trace_tick_stop)(void *, int, int);
-
-struct timer_base {
-	raw_spinlock_t lock;
-	struct timer_list *running_timer;
-	long unsigned int clk;
-	long unsigned int next_expiry;
-	unsigned int cpu;
-	bool is_idle;
-	bool must_forward_clk;
-	long unsigned int pending_map[9];
-	struct hlist_head vectors[576];
-	long: 64;
-	long: 64;
-};
-
-struct process_timer {
-	struct timer_list timer;
-	struct task_struct *task;
-};
-
-struct system_time_snapshot {
-	u64 cycles;
-	ktime_t real;
-	ktime_t raw;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-};
-
-struct system_device_crosststamp {
-	ktime_t device;
-	ktime_t sys_realtime;
-	ktime_t sys_monoraw;
-};
-
-struct tk_read_base {
-	struct clocksource *clock;
-	u64 mask;
-	u64 cycle_last;
-	u32 mult;
-	u32 shift;
-	u64 xtime_nsec;
-	ktime_t base;
-	u64 base_real;
-};
-
-struct timekeeper {
-	struct tk_read_base tkr_mono;
-	struct tk_read_base tkr_raw;
-	u64 xtime_sec;
-	long unsigned int ktime_sec;
-	struct timespec64 wall_to_monotonic;
-	ktime_t offs_real;
-	ktime_t offs_boot;
-	ktime_t offs_tai;
-	s32 tai_offset;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-	ktime_t next_leap_ktime;
-	u64 raw_sec;
-	struct timespec64 monotonic_to_boot;
-	u64 cycle_interval;
-	u64 xtime_interval;
-	s64 xtime_remainder;
-	u64 raw_interval;
-	u64 ntp_tick;
-	s64 ntp_error;
-	u32 ntp_error_shift;
-	u32 ntp_err_mult;
-	u32 skip_second_overflow;
-};
-
-struct audit_ntp_val {
-	long long int oldval;
-	long long int newval;
-};
-
-struct audit_ntp_data {
-	struct audit_ntp_val vals[6];
-};
-
-enum timekeeping_adv_mode {
-	TK_ADV_TICK = 0,
-	TK_ADV_FREQ = 1,
-};
-
-struct tk_fast {
-	seqcount_t seq;
-	struct tk_read_base base[2];
-};
-
-typedef s64 int64_t;
-
-enum tick_nohz_mode {
-	NOHZ_MODE_INACTIVE = 0,
-	NOHZ_MODE_LOWRES = 1,
-	NOHZ_MODE_HIGHRES = 2,
-};
-
-struct tick_sched {
-	struct hrtimer sched_timer;
-	long unsigned int check_clocks;
-	enum tick_nohz_mode nohz_mode;
-	unsigned int inidle: 1;
-	unsigned int tick_stopped: 1;
-	unsigned int idle_active: 1;
-	unsigned int do_timer_last: 1;
-	unsigned int got_idle_tick: 1;
-	ktime_t last_tick;
-	ktime_t next_tick;
-	long unsigned int idle_jiffies;
-	long unsigned int idle_calls;
-	long unsigned int idle_sleeps;
-	ktime_t idle_entrytime;
-	ktime_t idle_waketime;
-	ktime_t idle_exittime;
-	ktime_t idle_sleeptime;
-	ktime_t iowait_sleeptime;
-	long unsigned int last_jiffies;
-	u64 timer_expires;
-	u64 timer_expires_base;
-	u64 next_timer;
-	ktime_t idle_expires;
-	atomic_t tick_dep_mask;
-};
-
-struct timer_list_iter {
-	int cpu;
-	bool second_pass;
-	u64 now;
-};
-
-struct tm {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	long int tm_year;
-	int tm_wday;
-	int tm_yday;
-};
-
-struct cyclecounter {
-	u64 (*read)(const struct cyclecounter *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-};
-
-struct timecounter {
-	const struct cyclecounter *cc;
-	u64 cycle_last;
-	u64 nsec;
-	u64 mask;
-	u64 frac;
-};
-
-typedef __kernel_timer_t timer_t;
-
-struct rtc_wkalrm {
-	unsigned char enabled;
-	unsigned char pending;
-	struct rtc_time time;
-};
-
-enum alarmtimer_type {
-	ALARM_REALTIME = 0,
-	ALARM_BOOTTIME = 1,
-	ALARM_NUMTYPE = 2,
-	ALARM_REALTIME_FREEZER = 3,
-	ALARM_BOOTTIME_FREEZER = 4,
-};
-
-enum alarmtimer_restart {
-	ALARMTIMER_NORESTART = 0,
-	ALARMTIMER_RESTART = 1,
-};
-
-struct alarm {
-	struct timerqueue_node node;
-	struct hrtimer timer;
-	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
-	enum alarmtimer_type type;
-	int state;
-	void *data;
-};
-
-struct cpu_timer {
-	struct timerqueue_node node;
-	struct timerqueue_head *head;
-	struct task_struct *task;
-	struct list_head elist;
-	int firing;
-};
-
-struct k_clock;
-
-struct k_itimer {
-	struct list_head list;
-	struct hlist_node t_hash;
-	spinlock_t it_lock;
-	const struct k_clock *kclock;
-	clockid_t it_clock;
-	timer_t it_id;
-	int it_active;
-	s64 it_overrun;
-	s64 it_overrun_last;
-	int it_requeue_pending;
-	int it_sigev_notify;
-	ktime_t it_interval;
-	struct signal_struct *it_signal;
-	union {
-		struct pid *it_pid;
-		struct task_struct *it_process;
-	};
-	struct sigqueue *sigq;
-	union {
-		struct {
-			struct hrtimer timer;
-		} real;
-		struct cpu_timer cpu;
-		struct {
-			struct alarm alarmtimer;
-		} alarm;
-	} it;
-	struct callback_head rcu;
-};
-
-struct k_clock {
-	int (*clock_getres)(const clockid_t, struct timespec64 *);
-	int (*clock_set)(const clockid_t, const struct timespec64 *);
-	int (*clock_get)(const clockid_t, struct timespec64 *);
-	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
-	int (*timer_create)(struct k_itimer *);
-	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
-	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
-	int (*timer_del)(struct k_itimer *);
-	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
-	void (*timer_rearm)(struct k_itimer *);
-	s64 (*timer_forward)(struct k_itimer *, ktime_t);
-	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
-	int (*timer_try_to_cancel)(struct k_itimer *);
-	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
-	void (*timer_wait_running)(struct k_itimer *);
-};
-
-struct class_interface {
-	struct list_head node;
-	struct class *class;
-	int (*add_dev)(struct device *, struct class_interface *);
-	void (*remove_dev)(struct device *, struct class_interface *);
-};
-
-struct rtc_class_ops {
-	int (*ioctl)(struct device *, unsigned int, long unsigned int);
-	int (*read_time)(struct device *, struct rtc_time *);
-	int (*set_time)(struct device *, struct rtc_time *);
-	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*proc)(struct device *, struct seq_file *);
-	int (*alarm_irq_enable)(struct device *, unsigned int);
-	int (*read_offset)(struct device *, long int *);
-	int (*set_offset)(struct device *, long int);
-};
-
-struct rtc_device;
-
-struct rtc_timer {
-	struct timerqueue_node node;
-	ktime_t period;
-	void (*func)(struct rtc_device *);
-	struct rtc_device *rtc;
-	int enabled;
-};
-
-struct rtc_device {
-	struct device dev;
-	struct module *owner;
-	int id;
-	const struct rtc_class_ops *ops;
-	struct mutex ops_lock;
-	struct cdev char_dev;
-	long unsigned int flags;
-	long unsigned int irq_data;
-	spinlock_t irq_lock;
-	wait_queue_head_t irq_queue;
-	struct fasync_struct *async_queue;
-	int irq_freq;
-	int max_user_freq;
-	struct timerqueue_head timerqueue;
-	struct rtc_timer aie_timer;
-	struct rtc_timer uie_rtctimer;
-	struct hrtimer pie_timer;
-	int pie_enabled;
-	struct work_struct irqwork;
-	int uie_unsupported;
-	long int set_offset_nsec;
-	bool registered;
-	bool nvram_old_abi;
-	struct bin_attribute *nvram;
-	time64_t range_min;
-	timeu64_t range_max;
-	time64_t start_secs;
-	time64_t offset_secs;
-	bool set_start_time;
-};
-
-struct platform_driver {
-	int (*probe)(struct platform_device *);
-	int (*remove)(struct platform_device *);
-	void (*shutdown)(struct platform_device *);
-	int (*suspend)(struct platform_device *, pm_message_t);
-	int (*resume)(struct platform_device *);
-	struct device_driver driver;
-	const struct platform_device_id *id_table;
-	bool prevent_deferred_probe;
-};
-
-struct trace_event_raw_alarmtimer_suspend {
-	struct trace_entry ent;
-	s64 expires;
-	unsigned char alarm_type;
-	char __data[0];
-};
-
-struct trace_event_raw_alarm_class {
-	struct trace_entry ent;
-	void *alarm;
-	unsigned char alarm_type;
-	s64 expires;
-	s64 now;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_alarmtimer_suspend {};
-
-struct trace_event_data_offsets_alarm_class {};
-
-typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
-
-typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
-
-typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
-
-struct alarm_base {
-	spinlock_t lock;
-	struct timerqueue_head timerqueue;
-	ktime_t (*gettime)();
-	clockid_t base_clockid;
-};
-
-struct sigevent {
-	sigval_t sigev_value;
-	int sigev_signo;
-	int sigev_notify;
-	union {
-		int _pad[12];
-		int _tid;
-		struct {
-			void (*_function)(sigval_t);
-			void *_attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef struct sigevent sigevent_t;
-
-struct compat_sigevent {
-	compat_sigval_t sigev_value;
-	compat_int_t sigev_signo;
-	compat_int_t sigev_notify;
-	union {
-		compat_int_t _pad[13];
-		compat_int_t _tid;
-		struct {
-			compat_uptr_t _function;
-			compat_uptr_t _attribute;
-		} _sigev_thread;
-	} _sigev_un;
-};
-
-typedef unsigned int uint;
-
-struct posix_clock;
-
-struct posix_clock_operations {
-	struct module *owner;
-	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
-	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
-	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
-	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
-	long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);
-	int (*open)(struct posix_clock *, fmode_t);
-	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
-	int (*release)(struct posix_clock *);
-	ssize_t (*read)(struct posix_clock *, uint, char *, size_t);
-};
-
-struct posix_clock {
-	struct posix_clock_operations ops;
-	struct cdev cdev;
-	struct device *dev;
-	struct rw_semaphore rwsem;
-	bool zombie;
-};
-
-struct posix_clock_desc {
-	struct file *fp;
-	struct posix_clock *clk;
-};
-
-struct itimerval {
-	struct timeval it_interval;
-	struct timeval it_value;
-};
-
-struct old_itimerval32 {
-	struct old_timeval32 it_interval;
-	struct old_timeval32 it_value;
-};
-
-struct ce_unbind {
-	struct clock_event_device *ce;
-	int res;
-};
-
-typedef ktime_t pto_T_____18;
-
-union futex_key {
-	struct {
-		long unsigned int pgoff;
-		struct inode *inode;
-		int offset;
-	} shared;
-	struct {
-		long unsigned int address;
-		struct mm_struct *mm;
-		int offset;
-	} private;
-	struct {
-		long unsigned int word;
-		void *ptr;
-		int offset;
-	} both;
-};
-
-struct futex_pi_state {
-	struct list_head list;
-	struct rt_mutex pi_mutex;
-	struct task_struct *owner;
-	refcount_t refcount;
-	union futex_key key;
-};
-
-struct futex_q {
-	struct plist_node list;
-	struct task_struct *task;
-	spinlock_t *lock_ptr;
-	union futex_key key;
-	struct futex_pi_state *pi_state;
-	struct rt_mutex_waiter *rt_waiter;
-	union futex_key *requeue_pi_key;
-	u32 bitset;
-};
-
-struct futex_hash_bucket {
-	atomic_t waiters;
-	spinlock_t lock;
-	struct plist_head chain;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum futex_access {
-	FUTEX_READ = 0,
-	FUTEX_WRITE = 1,
-};
-
-struct dma_chan {
-	int lock;
-	const char *device_id;
-};
-
-enum {
-	CSD_FLAG_LOCK = 1,
-	CSD_FLAG_SYNCHRONOUS = 2,
-};
-
-struct call_function_data {
-	call_single_data_t *csd;
-	cpumask_var_t cpumask;
-	cpumask_var_t cpumask_ipi;
-};
-
-struct smp_call_on_cpu_struct {
-	struct work_struct work;
-	struct completion done;
-	int (*func)(void *);
-	void *data;
-	int ret;
-	int cpu;
-};
-
-struct latch_tree_root {
-	seqcount_t seq;
-	struct rb_root tree[2];
-};
-
-struct latch_tree_ops {
-	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
-	int (*comp)(void *, struct latch_tree_node *);
-};
-
-struct module_use {
-	struct list_head source_list;
-	struct list_head target_list;
-	struct module *source;
-	struct module *target;
-};
-
-struct module_sect_attr {
-	struct module_attribute mattr;
-	char *name;
-	long unsigned int address;
-};
-
-struct module_sect_attrs {
-	struct attribute_group grp;
-	unsigned int nsections;
-	struct module_sect_attr attrs[0];
-};
-
-struct module_notes_attrs {
-	struct kobject *dir;
-	unsigned int notes;
-	struct bin_attribute attrs[0];
-};
-
-struct symsearch {
-	const struct kernel_symbol *start;
-	const struct kernel_symbol *stop;
-	const s32 *crcs;
-	enum {
-		NOT_GPL_ONLY = 0,
-		GPL_ONLY = 1,
-		WILL_BE_GPL_ONLY = 2,
-	} licence;
-	bool unused;
-};
-
-enum kernel_read_file_id {
-	READING_UNKNOWN = 0,
-	READING_FIRMWARE = 1,
-	READING_FIRMWARE_PREALLOC_BUFFER = 2,
-	READING_MODULE = 3,
-	READING_KEXEC_IMAGE = 4,
-	READING_KEXEC_INITRAMFS = 5,
-	READING_POLICY = 6,
-	READING_X509_CERTIFICATE = 7,
-	READING_MAX_ID = 8,
-};
-
-enum kernel_load_data_id {
-	LOADING_UNKNOWN = 0,
-	LOADING_FIRMWARE = 1,
-	LOADING_FIRMWARE_PREALLOC_BUFFER = 2,
-	LOADING_MODULE = 3,
-	LOADING_KEXEC_IMAGE = 4,
-	LOADING_KEXEC_INITRAMFS = 5,
-	LOADING_POLICY = 6,
-	LOADING_X509_CERTIFICATE = 7,
-	LOADING_MAX_ID = 8,
-};
-
-struct _ddebug {
-	const char *modname;
-	const char *function;
-	const char *filename;
-	const char *format;
-	unsigned int lineno: 18;
-	unsigned int flags: 8;
-	union {
-		struct static_key_true dd_key_true;
-		struct static_key_false dd_key_false;
-	} key;
-};
-
-struct load_info {
-	const char *name;
-	struct module *mod;
-	Elf64_Ehdr *hdr;
-	long unsigned int len;
-	Elf64_Shdr *sechdrs;
-	char *secstrings;
-	char *strtab;
-	long unsigned int symoffs;
-	long unsigned int stroffs;
-	long unsigned int init_typeoffs;
-	long unsigned int core_typeoffs;
-	struct _ddebug *debug;
-	unsigned int num_debug;
-	bool sig_ok;
-	long unsigned int mod_kallsyms_init_off;
-	struct {
-		unsigned int sym;
-		unsigned int str;
-		unsigned int mod;
-		unsigned int vers;
-		unsigned int info;
-		unsigned int pcpu;
-	} index;
-};
-
-struct trace_event_raw_module_load {
-	struct trace_entry ent;
-	unsigned int taints;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_free {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_refcnt {
-	struct trace_entry ent;
-	long unsigned int ip;
-	int refcnt;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_request {
-	struct trace_entry ent;
-	long unsigned int ip;
-	bool wait;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_module_load {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_free {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_refcnt {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_module_load)(void *, struct module *);
-
-typedef void (*btf_trace_module_free)(void *, struct module *);
-
-typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
-
-struct mod_tree_root {
-	struct latch_tree_root root;
-	long unsigned int addr_min;
-	long unsigned int addr_max;
-};
-
-struct find_symbol_arg {
-	const char *name;
-	bool gplok;
-	bool warn;
-	struct module *owner;
-	const s32 *crc;
-	const struct kernel_symbol *sym;
-};
-
-struct mod_initfree {
-	struct llist_node node;
-	void *module_init;
-};
-
-struct kallsym_iter {
-	loff_t pos;
-	loff_t pos_arch_end;
-	loff_t pos_mod_end;
-	loff_t pos_ftrace_mod_end;
-	long unsigned int value;
-	unsigned int nameoff;
-	char type;
-	char name[128];
-	char module_name[56];
-	int exported;
-	int show_value;
-};
-
-enum {
-	SB_UNFROZEN = 0,
-	SB_FREEZE_WRITE = 1,
-	SB_FREEZE_PAGEFAULT = 2,
-	SB_FREEZE_FS = 3,
-	SB_FREEZE_COMPLETE = 4,
-};
-
-struct audit_names;
-
-struct filename {
-	const char *name;
-	const char *uptr;
-	int refcnt;
-	struct audit_names *aname;
-	const char iname[0];
-};
-
-typedef __u16 comp_t;
-
-typedef __u32 comp2_t;
-
-struct acct {
-	char ac_flag;
-	char ac_version;
-	__u16 ac_uid16;
-	__u16 ac_gid16;
-	__u16 ac_tty;
-	__u32 ac_btime;
-	comp_t ac_utime;
-	comp_t ac_stime;
-	comp_t ac_etime;
-	comp_t ac_mem;
-	comp_t ac_io;
-	comp_t ac_rw;
-	comp_t ac_minflt;
-	comp_t ac_majflt;
-	comp_t ac_swaps;
-	__u16 ac_ahz;
-	__u32 ac_exitcode;
-	char ac_comm[17];
-	__u8 ac_etime_hi;
-	__u16 ac_etime_lo;
-	__u32 ac_uid;
-	__u32 ac_gid;
-};
-
-typedef struct acct acct_t;
-
-struct fs_pin {
-	wait_queue_head_t wait;
-	int done;
-	struct hlist_node s_list;
-	struct hlist_node m_list;
-	void (*kill)(struct fs_pin *);
-};
-
-struct bsd_acct_struct {
-	struct fs_pin pin;
-	atomic_long_t count;
-	struct callback_head rcu;
-	struct mutex lock;
-	int active;
-	long unsigned int needcheck;
-	struct file *file;
-	struct pid_namespace *ns;
-	struct work_struct work;
-	struct completion done;
-};
-
-enum compound_dtor_id {
-	NULL_COMPOUND_DTOR = 0,
-	COMPOUND_PAGE_DTOR = 1,
-	HUGETLB_PAGE_DTOR = 2,
-	NR_COMPOUND_DTORS = 3,
-};
-
-struct elf64_note {
-	Elf64_Word n_namesz;
-	Elf64_Word n_descsz;
-	Elf64_Word n_type;
-};
-
-typedef long unsigned int elf_greg_t;
-
-typedef elf_greg_t elf_gregset_t[27];
-
-struct elf_siginfo {
-	int si_signo;
-	int si_code;
-	int si_errno;
-};
-
-struct elf_prstatus {
-	struct elf_siginfo pr_info;
-	short int pr_cursig;
-	long unsigned int pr_sigpend;
-	long unsigned int pr_sighold;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	struct __kernel_old_timeval pr_utime;
-	struct __kernel_old_timeval pr_stime;
-	struct __kernel_old_timeval pr_cutime;
-	struct __kernel_old_timeval pr_cstime;
-	elf_gregset_t pr_reg;
-	int pr_fpvalid;
-};
-
-struct compat_kexec_segment {
-	compat_uptr_t buf;
-	compat_size_t bufsz;
-	compat_ulong_t mem;
-	compat_size_t memsz;
-};
-
-enum migrate_reason {
-	MR_COMPACTION = 0,
-	MR_MEMORY_FAILURE = 1,
-	MR_MEMORY_HOTPLUG = 2,
-	MR_SYSCALL = 3,
-	MR_MEMPOLICY_MBIND = 4,
-	MR_NUMA_MISPLACED = 5,
-	MR_CONTIG_RANGE = 6,
-	MR_TYPES = 7,
-};
-
-typedef __kernel_ulong_t __kernel_ino_t;
-
-typedef __kernel_ino_t ino_t;
-
-enum fs_context_purpose {
-	FS_CONTEXT_FOR_MOUNT = 0,
-	FS_CONTEXT_FOR_SUBMOUNT = 1,
-	FS_CONTEXT_FOR_RECONFIGURE = 2,
-};
-
-enum fs_context_phase {
-	FS_CONTEXT_CREATE_PARAMS = 0,
-	FS_CONTEXT_CREATING = 1,
-	FS_CONTEXT_AWAITING_MOUNT = 2,
-	FS_CONTEXT_AWAITING_RECONF = 3,
-	FS_CONTEXT_RECONF_PARAMS = 4,
-	FS_CONTEXT_RECONFIGURING = 5,
-	FS_CONTEXT_FAILED = 6,
-};
-
-struct fs_context_operations;
-
-struct fc_log;
-
-struct fs_context {
-	const struct fs_context_operations *ops;
-	struct mutex uapi_mutex;
-	struct file_system_type *fs_type;
-	void *fs_private;
-	void *sget_key;
-	struct dentry *root;
-	struct user_namespace *user_ns;
-	struct net *net_ns;
-	const struct cred *cred;
-	struct fc_log *log;
-	const char *source;
-	void *security;
-	void *s_fs_info;
-	unsigned int sb_flags;
-	unsigned int sb_flags_mask;
-	unsigned int s_iflags;
-	unsigned int lsm_flags;
-	enum fs_context_purpose purpose: 8;
-	enum fs_context_phase phase: 8;
-	bool need_free: 1;
-	bool global: 1;
-};
-
-enum kernfs_node_type {
-	KERNFS_DIR = 1,
-	KERNFS_FILE = 2,
-	KERNFS_LINK = 4,
-};
-
-enum kernfs_root_flag {
-	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
-	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
-	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
-};
-
-struct kernfs_fs_context {
-	struct kernfs_root *root;
-	void *ns_tag;
-	long unsigned int magic;
-	bool new_sb_created;
-};
-
-enum {
-	__PERCPU_REF_ATOMIC = 1,
-	__PERCPU_REF_DEAD = 2,
-	__PERCPU_REF_ATOMIC_DEAD = 3,
-	__PERCPU_REF_FLAG_BITS = 2,
-};
-
-enum {
-	CSS_NO_REF = 1,
-	CSS_ONLINE = 2,
-	CSS_RELEASED = 4,
-	CSS_VISIBLE = 8,
-	CSS_DYING = 16,
-};
-
-enum {
-	CGRP_NOTIFY_ON_RELEASE = 0,
-	CGRP_CPUSET_CLONE_CHILDREN = 1,
-	CGRP_FREEZE = 2,
-	CGRP_FROZEN = 3,
-};
-
-enum {
-	CGRP_ROOT_NOPREFIX = 2,
-	CGRP_ROOT_XATTR = 4,
-	CGRP_ROOT_NS_DELEGATE = 8,
-	CGRP_ROOT_CPUSET_V2_MODE = 16,
-	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 32,
-};
-
-struct cgroup_taskset {
-	struct list_head src_csets;
-	struct list_head dst_csets;
-	int nr_tasks;
-	int ssid;
-	struct list_head *csets;
-	struct css_set *cur_cset;
-	struct task_struct *cur_task;
-};
-
-struct css_task_iter {
-	struct cgroup_subsys *ss;
-	unsigned int flags;
-	struct list_head *cset_pos;
-	struct list_head *cset_head;
-	struct list_head *tcset_pos;
-	struct list_head *tcset_head;
-	struct list_head *task_pos;
-	struct list_head *tasks_head;
-	struct list_head *mg_tasks_head;
-	struct list_head *dying_tasks_head;
-	struct css_set *cur_cset;
-	struct css_set *cur_dcset;
-	struct task_struct *cur_task;
-	struct list_head iters_node;
-};
-
-enum fs_value_type {
-	fs_value_is_undefined = 0,
-	fs_value_is_flag = 1,
-	fs_value_is_string = 2,
-	fs_value_is_blob = 3,
-	fs_value_is_filename = 4,
-	fs_value_is_filename_empty = 5,
-	fs_value_is_file = 6,
-};
-
-struct fs_parameter {
-	const char *key;
-	enum fs_value_type type: 8;
-	union {
-		char *string;
-		void *blob;
-		struct filename *name;
-		struct file *file;
-	};
-	size_t size;
-	int dirfd;
-};
-
-struct fs_context_operations {
-	void (*free)(struct fs_context *);
-	int (*dup)(struct fs_context *, struct fs_context *);
-	int (*parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*parse_monolithic)(struct fs_context *, void *);
-	int (*get_tree)(struct fs_context *);
-	int (*reconfigure)(struct fs_context *);
-};
-
-struct fc_log {
-	refcount_t usage;
-	u8 head;
-	u8 tail;
-	u8 need_free;
-	struct module *owner;
-	char *buffer[8];
-};
-
-struct cgroup_fs_context {
-	struct kernfs_fs_context kfc;
-	struct cgroup_root *root;
-	struct cgroup_namespace *ns;
-	unsigned int flags;
-	bool cpuset_clone_children;
-	bool none;
-	bool all_ss;
-	u16 subsys_mask;
-	char *name;
-	char *release_agent;
-};
-
-struct cgrp_cset_link {
-	struct cgroup *cgrp;
-	struct css_set *cset;
-	struct list_head cset_link;
-	struct list_head cgrp_link;
-};
-
-struct cgroup_mgctx {
-	struct list_head preloaded_src_csets;
-	struct list_head preloaded_dst_csets;
-	struct cgroup_taskset tset;
-	u16 ss_mask;
-};
-
-enum fs_parameter_type {
-	__fs_param_wasnt_defined = 0,
-	fs_param_is_flag = 1,
-	fs_param_is_bool = 2,
-	fs_param_is_u32 = 3,
-	fs_param_is_u32_octal = 4,
-	fs_param_is_u32_hex = 5,
-	fs_param_is_s32 = 6,
-	fs_param_is_u64 = 7,
-	fs_param_is_enum = 8,
-	fs_param_is_string = 9,
-	fs_param_is_blob = 10,
-	fs_param_is_blockdev = 11,
-	fs_param_is_path = 12,
-	fs_param_is_fd = 13,
-	nr__fs_parameter_type = 14,
-};
-
-struct fs_parameter_spec {
-	const char *name;
-	u8 opt;
-	enum fs_parameter_type type: 8;
-	short unsigned int flags;
-};
-
-struct fs_parameter_enum {
-	u8 opt;
-	char name[14];
-	u8 value;
-};
-
-struct fs_parse_result {
-	bool negated;
-	bool has_value;
-	union {
-		bool boolean;
-		int int_32;
-		unsigned int uint_32;
-		u64 uint_64;
-	};
-};
-
-struct trace_event_raw_cgroup_root {
-	struct trace_entry ent;
-	int root;
-	u16 ss_mask;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_migrate {
-	struct trace_entry ent;
-	int dst_root;
-	int dst_id;
-	int dst_level;
-	int pid;
-	u32 __data_loc_dst_path;
-	u32 __data_loc_comm;
-	char __data[0];
-};
-
-struct trace_event_raw_cgroup_event {
-	struct trace_entry ent;
-	int root;
-	int id;
-	int level;
-	u32 __data_loc_path;
-	int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cgroup_root {
-	u32 name;
-};
-
-struct trace_event_data_offsets_cgroup {
-	u32 path;
-};
-
-struct trace_event_data_offsets_cgroup_migrate {
-	u32 dst_path;
-	u32 comm;
-};
-
-struct trace_event_data_offsets_cgroup_event {
-	u32 path;
-};
-
-typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
-
-typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
-
-typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
-
-typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
-
-typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
-
-enum cgroup2_param {
-	Opt_nsdelegate = 0,
-	Opt_memory_localevents = 1,
-	nr__cgroup2_params = 2,
-};
-
-struct cgroupstats {
-	__u64 nr_sleeping;
-	__u64 nr_running;
-	__u64 nr_stopped;
-	__u64 nr_uninterruptible;
-	__u64 nr_io_wait;
-};
-
-enum cgroup_filetype {
-	CGROUP_FILE_PROCS = 0,
-	CGROUP_FILE_TASKS = 1,
-};
-
-struct cgroup_pidlist {
-	struct {
-		enum cgroup_filetype type;
-		struct pid_namespace *ns;
-	} key;
-	pid_t *list;
-	int length;
-	struct list_head links;
-	struct cgroup *owner;
-	struct delayed_work destroy_dwork;
-};
-
-enum cgroup1_param {
-	Opt_all = 0,
-	Opt_clone_children = 1,
-	Opt_cpuset_v2_mode = 2,
-	Opt_name = 3,
-	Opt_none = 4,
-	Opt_noprefix = 5,
-	Opt_release_agent = 6,
-	Opt_xattr = 7,
-};
-
-enum freezer_state_flags {
-	CGROUP_FREEZER_ONLINE = 1,
-	CGROUP_FREEZING_SELF = 2,
-	CGROUP_FREEZING_PARENT = 4,
-	CGROUP_FROZEN = 8,
-	CGROUP_FREEZING = 6,
-};
-
-struct freezer {
-	struct cgroup_subsys_state css;
-	unsigned int state;
-};
-
-struct fmeter {
-	int cnt;
-	int val;
-	time64_t time;
-	spinlock_t lock;
-};
-
-struct cpuset {
-	struct cgroup_subsys_state css;
-	long unsigned int flags;
-	cpumask_var_t cpus_allowed;
-	nodemask_t mems_allowed;
-	cpumask_var_t effective_cpus;
-	nodemask_t effective_mems;
-	cpumask_var_t subparts_cpus;
-	nodemask_t old_mems_allowed;
-	struct fmeter fmeter;
-	int attach_in_progress;
-	int pn;
-	int relax_domain_level;
-	int nr_subparts_cpus;
-	int partition_root_state;
-	int use_parent_ecpus;
-	int child_ecpus_count;
-};
-
-struct tmpmasks {
-	cpumask_var_t addmask;
-	cpumask_var_t delmask;
-	cpumask_var_t new_cpus;
-};
-
-typedef enum {
-	CS_ONLINE = 0,
-	CS_CPU_EXCLUSIVE = 1,
-	CS_MEM_EXCLUSIVE = 2,
-	CS_MEM_HARDWALL = 3,
-	CS_MEMORY_MIGRATE = 4,
-	CS_SCHED_LOAD_BALANCE = 5,
-	CS_SPREAD_PAGE = 6,
-	CS_SPREAD_SLAB = 7,
-} cpuset_flagbits_t;
-
-enum subparts_cmd {
-	partcmd_enable = 0,
-	partcmd_disable = 1,
-	partcmd_update = 2,
-};
-
-struct cpuset_migrate_mm_work {
-	struct work_struct work;
-	struct mm_struct *mm;
-	nodemask_t from;
-	nodemask_t to;
-};
-
-typedef enum {
-	FILE_MEMORY_MIGRATE = 0,
-	FILE_CPULIST = 1,
-	FILE_MEMLIST = 2,
-	FILE_EFFECTIVE_CPULIST = 3,
-	FILE_EFFECTIVE_MEMLIST = 4,
-	FILE_SUBPARTS_CPULIST = 5,
-	FILE_CPU_EXCLUSIVE = 6,
-	FILE_MEM_EXCLUSIVE = 7,
-	FILE_MEM_HARDWALL = 8,
-	FILE_SCHED_LOAD_BALANCE = 9,
-	FILE_PARTITION_ROOT = 10,
-	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
-	FILE_MEMORY_PRESSURE_ENABLED = 12,
-	FILE_MEMORY_PRESSURE = 13,
-	FILE_SPREAD_PAGE = 14,
-	FILE_SPREAD_SLAB = 15,
-} cpuset_filetype_t;
-
-struct cpu_stop_done {
-	atomic_t nr_todo;
-	int ret;
-	struct completion completion;
-};
-
-struct cpu_stopper {
-	struct task_struct *thread;
-	raw_spinlock_t lock;
-	bool enabled;
-	struct list_head works;
-	struct cpu_stop_work stop_work;
-};
-
-enum multi_stop_state {
-	MULTI_STOP_NONE = 0,
-	MULTI_STOP_PREPARE = 1,
-	MULTI_STOP_DISABLE_IRQ = 2,
-	MULTI_STOP_RUN = 3,
-	MULTI_STOP_EXIT = 4,
-};
-
-struct multi_stop_data {
-	cpu_stop_fn_t fn;
-	void *data;
-	unsigned int num_threads;
-	const struct cpumask *active_cpus;
-	enum multi_stop_state state;
-	atomic_t thread_ack;
-};
-
-typedef int __kernel_mqd_t;
-
-typedef __kernel_mqd_t mqd_t;
-
-enum audit_state {
-	AUDIT_DISABLED = 0,
-	AUDIT_BUILD_CONTEXT = 1,
-	AUDIT_RECORD_CONTEXT = 2,
-};
-
-struct audit_cap_data {
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	union {
-		unsigned int fE;
-		kernel_cap_t effective;
-	};
-	kernel_cap_t ambient;
-	kuid_t rootid;
-};
-
-struct audit_names {
-	struct list_head list;
-	struct filename *name;
-	int name_len;
-	bool hidden;
-	long unsigned int ino;
-	dev_t dev;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	dev_t rdev;
-	u32 osid;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	unsigned char type;
-	bool should_free;
-};
-
-struct mq_attr {
-	__kernel_long_t mq_flags;
-	__kernel_long_t mq_maxmsg;
-	__kernel_long_t mq_msgsize;
-	__kernel_long_t mq_curmsgs;
-	__kernel_long_t __reserved[4];
-};
-
-struct audit_proctitle {
-	int len;
-	char *value;
-};
-
-struct audit_aux_data;
-
-struct audit_tree_refs;
-
-struct audit_context {
-	int dummy;
-	int in_syscall;
-	enum audit_state state;
-	enum audit_state current_state;
-	unsigned int serial;
-	int major;
-	struct timespec64 ctime;
-	long unsigned int argv[4];
-	long int return_code;
-	u64 prio;
-	int return_valid;
-	struct audit_names preallocated_names[5];
-	int name_count;
-	struct list_head names_list;
-	char *filterkey;
-	struct path pwd;
-	struct audit_aux_data *aux;
-	struct audit_aux_data *aux_pids;
-	struct __kernel_sockaddr_storage *sockaddr;
-	size_t sockaddr_len;
-	pid_t pid;
-	pid_t ppid;
-	kuid_t uid;
-	kuid_t euid;
-	kuid_t suid;
-	kuid_t fsuid;
-	kgid_t gid;
-	kgid_t egid;
-	kgid_t sgid;
-	kgid_t fsgid;
-	long unsigned int personality;
-	int arch;
-	pid_t target_pid;
-	kuid_t target_auid;
-	kuid_t target_uid;
-	unsigned int target_sessionid;
-	u32 target_sid;
-	char target_comm[16];
-	struct audit_tree_refs *trees;
-	struct audit_tree_refs *first_trees;
-	struct list_head killed_trees;
-	int tree_count;
-	int type;
-	union {
-		struct {
-			int nargs;
-			long int args[6];
-		} socketcall;
-		struct {
-			kuid_t uid;
-			kgid_t gid;
-			umode_t mode;
-			u32 osid;
-			int has_perm;
-			uid_t perm_uid;
-			gid_t perm_gid;
-			umode_t perm_mode;
-			long unsigned int qbytes;
-		} ipc;
-		struct {
-			mqd_t mqdes;
-			struct mq_attr mqstat;
-		} mq_getsetattr;
-		struct {
-			mqd_t mqdes;
-			int sigev_signo;
-		} mq_notify;
-		struct {
-			mqd_t mqdes;
-			size_t msg_len;
-			unsigned int msg_prio;
-			struct timespec64 abs_timeout;
-		} mq_sendrecv;
-		struct {
-			int oflag;
-			umode_t mode;
-			struct mq_attr attr;
-		} mq_open;
-		struct {
-			pid_t pid;
-			struct audit_cap_data cap;
-		} capset;
-		struct {
-			int fd;
-			int flags;
-		} mmap;
-		struct {
-			int argc;
-		} execve;
-		struct {
-			char *name;
-		} module;
-	};
-	int fds[2];
-	struct audit_proctitle proctitle;
-};
-
-enum audit_nlgrps {
-	AUDIT_NLGRP_NONE = 0,
-	AUDIT_NLGRP_READLOG = 1,
-	__AUDIT_NLGRP_MAX = 2,
-};
-
-struct audit_status {
-	__u32 mask;
-	__u32 enabled;
-	__u32 failure;
-	__u32 pid;
-	__u32 rate_limit;
-	__u32 backlog_limit;
-	__u32 lost;
-	__u32 backlog;
-	union {
-		__u32 version;
-		__u32 feature_bitmap;
-	};
-	__u32 backlog_wait_time;
-};
-
-struct audit_features {
-	__u32 vers;
-	__u32 mask;
-	__u32 features;
-	__u32 lock;
-};
-
-struct audit_tty_status {
-	__u32 enabled;
-	__u32 log_passwd;
-};
-
-struct audit_sig_info {
-	uid_t uid;
-	pid_t pid;
-	char ctx[0];
-};
-
-struct net_generic {
-	union {
-		struct {
-			unsigned int len;
-			struct callback_head rcu;
-		} s;
-		void *ptr[0];
-	};
-};
-
-struct scm_creds {
-	u32 pid;
-	kuid_t uid;
-	kgid_t gid;
-};
-
-struct netlink_skb_parms {
-	struct scm_creds creds;
-	__u32 portid;
-	__u32 dst_group;
-	__u32 flags;
-	struct sock *sk;
-	bool nsid_is_set;
-	int nsid;
-};
-
-struct netlink_kernel_cfg {
-	unsigned int groups;
-	unsigned int flags;
-	void (*input)(struct sk_buff *);
-	struct mutex *cb_mutex;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-};
-
-struct audit_netlink_list {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff_head q;
-};
-
-struct audit_net {
-	struct sock *sk;
-};
-
-struct auditd_connection {
-	struct pid *pid;
-	u32 portid;
-	struct net *net;
-	struct callback_head rcu;
-};
-
-struct audit_ctl_mutex {
-	struct mutex lock;
-	void *owner;
-};
-
-struct audit_buffer {
-	struct sk_buff *skb;
-	struct audit_context *ctx;
-	gfp_t gfp_mask;
-};
-
-struct audit_reply {
-	__u32 portid;
-	struct net *net;
-	struct sk_buff *skb;
-};
-
-enum {
-	Audit_equal = 0,
-	Audit_not_equal = 1,
-	Audit_bitmask = 2,
-	Audit_bittest = 3,
-	Audit_lt = 4,
-	Audit_gt = 5,
-	Audit_le = 6,
-	Audit_ge = 7,
-	Audit_bad = 8,
-};
-
-struct audit_rule_data {
-	__u32 flags;
-	__u32 action;
-	__u32 field_count;
-	__u32 mask[64];
-	__u32 fields[64];
-	__u32 values[64];
-	__u32 fieldflags[64];
-	__u32 buflen;
-	char buf[0];
-};
-
-struct audit_field;
-
-struct audit_watch;
-
-struct audit_tree;
-
-struct audit_fsnotify_mark;
-
-struct audit_krule {
-	u32 pflags;
-	u32 flags;
-	u32 listnr;
-	u32 action;
-	u32 mask[64];
-	u32 buflen;
-	u32 field_count;
-	char *filterkey;
-	struct audit_field *fields;
-	struct audit_field *arch_f;
-	struct audit_field *inode_f;
-	struct audit_watch *watch;
-	struct audit_tree *tree;
-	struct audit_fsnotify_mark *exe;
-	struct list_head rlist;
-	struct list_head list;
-	u64 prio;
-};
-
-struct audit_field {
-	u32 type;
-	union {
-		u32 val;
-		kuid_t uid;
-		kgid_t gid;
-		struct {
-			char *lsm_str;
-			void *lsm_rule;
-		};
-	};
-	u32 op;
-};
-
-struct audit_entry {
-	struct list_head list;
-	struct callback_head rcu;
-	struct audit_krule rule;
-};
-
-struct audit_buffer___2;
-
-typedef int __kernel_key_t;
-
-typedef __kernel_key_t key_t;
-
-struct cpu_vfs_cap_data {
-	__u32 magic_etc;
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	kuid_t rootid;
-};
-
-struct kern_ipc_perm {
-	spinlock_t lock;
-	bool deleted;
-	int id;
-	key_t key;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t cuid;
-	kgid_t cgid;
-	umode_t mode;
-	long unsigned int seq;
-	void *security;
-	struct rhash_head khtnode;
-	struct callback_head rcu;
-	refcount_t refcount;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct fsnotify_mark_connector *fsnotify_connp_t;
-
-struct fsnotify_mark_connector {
-	spinlock_t lock;
-	short unsigned int type;
-	short unsigned int flags;
-	__kernel_fsid_t fsid;
-	union {
-		fsnotify_connp_t *obj;
-		struct fsnotify_mark_connector *destroy_next;
-	};
-	struct hlist_head list;
-};
-
-enum fsnotify_obj_type {
-	FSNOTIFY_OBJ_TYPE_INODE = 0,
-	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
-	FSNOTIFY_OBJ_TYPE_SB = 2,
-	FSNOTIFY_OBJ_TYPE_COUNT = 3,
-	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
-};
-
-struct audit_aux_data {
-	struct audit_aux_data *next;
-	int type;
-};
-
-struct audit_chunk;
-
-struct audit_tree_refs {
-	struct audit_tree_refs *next;
-	struct audit_chunk *c[31];
-};
-
-struct audit_aux_data_pids {
-	struct audit_aux_data d;
-	pid_t target_pid[16];
-	kuid_t target_auid[16];
-	kuid_t target_uid[16];
-	unsigned int target_sessionid[16];
-	u32 target_sid[16];
-	char target_comm[256];
-	int pid_count;
-};
-
-struct audit_aux_data_bprm_fcaps {
-	struct audit_aux_data d;
-	struct audit_cap_data fcap;
-	unsigned int fcap_ver;
-	struct audit_cap_data old_pcap;
-	struct audit_cap_data new_pcap;
-};
-
-struct audit_parent;
-
-struct audit_watch {
-	refcount_t count;
-	dev_t dev;
-	char *path;
-	long unsigned int ino;
-	struct audit_parent *parent;
-	struct list_head wlist;
-	struct list_head rules;
-};
-
-struct fsnotify_group;
-
-struct fsnotify_iter_info;
-
-struct fsnotify_mark;
-
-struct fsnotify_event;
-
-struct fsnotify_ops {
-	int (*handle_event)(struct fsnotify_group *, struct inode *, u32, const void *, int, const struct qstr *, u32, struct fsnotify_iter_info *);
-	void (*free_group_priv)(struct fsnotify_group *);
-	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
-	void (*free_event)(struct fsnotify_event *);
-	void (*free_mark)(struct fsnotify_mark *);
-};
-
-struct inotify_group_private_data {
-	spinlock_t idr_lock;
-	struct idr idr;
-	struct ucounts *ucounts;
-};
-
-struct fsnotify_group {
-	const struct fsnotify_ops *ops;
-	refcount_t refcnt;
-	spinlock_t notification_lock;
-	struct list_head notification_list;
-	wait_queue_head_t notification_waitq;
-	unsigned int q_len;
-	unsigned int max_events;
-	unsigned int priority;
-	bool shutdown;
-	struct mutex mark_mutex;
-	atomic_t num_marks;
-	atomic_t user_waits;
-	struct list_head marks_list;
-	struct fasync_struct *fsn_fa;
-	struct fsnotify_event *overflow_event;
-	struct mem_cgroup *memcg;
-	union {
-		void *private;
-		struct inotify_group_private_data inotify_data;
-	};
-};
-
-struct fsnotify_iter_info {
-	struct fsnotify_mark *marks[3];
-	unsigned int report_mask;
-	int srcu_idx;
-};
-
-struct fsnotify_mark {
-	__u32 mask;
-	refcount_t refcnt;
-	struct fsnotify_group *group;
-	struct list_head g_list;
-	spinlock_t lock;
-	struct hlist_node obj_list;
-	struct fsnotify_mark_connector *connector;
-	__u32 ignored_mask;
-	unsigned int flags;
-};
-
-struct fsnotify_event {
-	struct list_head list;
-	struct inode *inode;
-};
-
-struct audit_parent {
-	struct list_head watches;
-	struct fsnotify_mark mark;
-};
-
-struct audit_fsnotify_mark {
-	dev_t dev;
-	long unsigned int ino;
-	char *path;
-	struct fsnotify_mark mark;
-	struct audit_krule *rule;
-};
-
-struct audit_chunk___2;
-
-struct audit_tree {
-	refcount_t count;
-	int goner;
-	struct audit_chunk___2 *root;
-	struct list_head chunks;
-	struct list_head rules;
-	struct list_head list;
-	struct list_head same_root;
-	struct callback_head head;
-	char pathname[0];
-};
-
-struct node___2 {
-	struct list_head list;
-	struct audit_tree *owner;
-	unsigned int index;
-};
-
-struct audit_chunk___2 {
-	struct list_head hash;
-	long unsigned int key;
-	struct fsnotify_mark *mark;
-	struct list_head trees;
-	int count;
-	atomic_long_t refs;
-	struct callback_head head;
-	struct node___2 owners[0];
-};
-
-struct audit_tree_mark {
-	struct fsnotify_mark mark;
-	struct audit_chunk___2 *chunk;
-};
-
-enum {
-	HASH_SIZE = 128,
-};
-
-struct kprobe_blacklist_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-};
-
-struct kprobe_insn_page {
-	struct list_head list;
-	kprobe_opcode_t *insns;
-	struct kprobe_insn_cache *cache;
-	int nused;
-	int ngarbage;
-	char slot_used[0];
-};
-
-enum kprobe_slot_state {
-	SLOT_CLEAN = 0,
-	SLOT_DIRTY = 1,
-	SLOT_USED = 2,
-};
-
-struct seccomp_notif_sizes {
-	__u16 seccomp_notif;
-	__u16 seccomp_notif_resp;
-	__u16 seccomp_data;
-};
-
-struct seccomp_notif {
-	__u64 id;
-	__u32 pid;
-	__u32 flags;
-	struct seccomp_data data;
-};
-
-struct seccomp_notif_resp {
-	__u64 id;
-	__s64 val;
-	__s32 error;
-	__u32 flags;
-};
-
-struct notification;
-
-struct seccomp_filter {
-	refcount_t usage;
-	bool log;
-	struct seccomp_filter *prev;
-	struct bpf_prog *prog;
-	struct notification *notif;
-	struct mutex notify_lock;
-};
-
-struct ctl_path {
-	const char *procname;
-};
-
-struct sock_fprog {
-	short unsigned int len;
-	struct sock_filter *filter;
-};
-
-struct compat_sock_fprog {
-	u16 len;
-	compat_uptr_t filter;
-};
-
-enum notify_state {
-	SECCOMP_NOTIFY_INIT = 0,
-	SECCOMP_NOTIFY_SENT = 1,
-	SECCOMP_NOTIFY_REPLIED = 2,
-};
-
-struct seccomp_knotif {
-	struct task_struct *task;
-	u64 id;
-	const struct seccomp_data *data;
-	enum notify_state state;
-	int error;
-	long int val;
-	u32 flags;
-	struct completion ready;
-	struct list_head list;
-};
-
-struct notification {
-	struct semaphore request;
-	u64 next_id;
-	struct list_head notifications;
-	wait_queue_head_t wqh;
-};
-
-struct seccomp_log_name {
-	u32 log;
-	const char *name;
-};
-
-struct rchan;
-
-struct rchan_buf {
-	void *start;
-	void *data;
-	size_t offset;
-	size_t subbufs_produced;
-	size_t subbufs_consumed;
-	struct rchan *chan;
-	wait_queue_head_t read_wait;
-	struct irq_work wakeup_work;
-	struct dentry *dentry;
-	struct kref kref;
-	struct page **page_array;
-	unsigned int page_count;
-	unsigned int finalized;
-	size_t *padding;
-	size_t prev_padding;
-	size_t bytes_consumed;
-	size_t early_bytes;
-	unsigned int cpu;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rchan_callbacks;
-
-struct rchan {
-	u32 version;
-	size_t subbuf_size;
-	size_t n_subbufs;
-	size_t alloc_size;
-	struct rchan_callbacks *cb;
-	struct kref kref;
-	void *private_data;
-	size_t last_toobig;
-	struct rchan_buf **buf;
-	int is_global;
-	struct list_head list;
-	struct dentry *parent;
-	int has_base_filename;
-	char base_filename[255];
-};
-
-struct rchan_callbacks {
-	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
-	void (*buf_mapped)(struct rchan_buf *, struct file *);
-	void (*buf_unmapped)(struct rchan_buf *, struct file *);
-	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
-	int (*remove_buf_file)(struct dentry *);
-};
-
-struct partial_page {
-	unsigned int offset;
-	unsigned int len;
-	long unsigned int private;
-};
-
-struct splice_pipe_desc {
-	struct page **pages;
-	struct partial_page *partial;
-	int nr_pages;
-	unsigned int nr_pages_max;
-	const struct pipe_buf_operations *ops;
-	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
-};
-
-struct rchan_percpu_buf_dispatcher {
-	struct rchan_buf *buf;
-	struct dentry *dentry;
-};
-
-enum {
-	TASKSTATS_TYPE_UNSPEC = 0,
-	TASKSTATS_TYPE_PID = 1,
-	TASKSTATS_TYPE_TGID = 2,
-	TASKSTATS_TYPE_STATS = 3,
-	TASKSTATS_TYPE_AGGR_PID = 4,
-	TASKSTATS_TYPE_AGGR_TGID = 5,
-	TASKSTATS_TYPE_NULL = 6,
-	__TASKSTATS_TYPE_MAX = 7,
-};
-
-enum {
-	TASKSTATS_CMD_ATTR_UNSPEC = 0,
-	TASKSTATS_CMD_ATTR_PID = 1,
-	TASKSTATS_CMD_ATTR_TGID = 2,
-	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
-	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
-	__TASKSTATS_CMD_ATTR_MAX = 5,
-};
-
-enum {
-	CGROUPSTATS_CMD_UNSPEC = 3,
-	CGROUPSTATS_CMD_GET = 4,
-	CGROUPSTATS_CMD_NEW = 5,
-	__CGROUPSTATS_CMD_MAX = 6,
-};
-
-enum {
-	CGROUPSTATS_TYPE_UNSPEC = 0,
-	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
-	__CGROUPSTATS_TYPE_MAX = 2,
-};
-
-enum {
-	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
-	CGROUPSTATS_CMD_ATTR_FD = 1,
-	__CGROUPSTATS_CMD_ATTR_MAX = 2,
-};
-
-struct genlmsghdr {
-	__u8 cmd;
-	__u8 version;
-	__u16 reserved;
-};
-
-enum {
-	NLA_UNSPEC = 0,
-	NLA_U8 = 1,
-	NLA_U16 = 2,
-	NLA_U32 = 3,
-	NLA_U64 = 4,
-	NLA_STRING = 5,
-	NLA_FLAG = 6,
-	NLA_MSECS = 7,
-	NLA_NESTED = 8,
-	NLA_NESTED_ARRAY = 9,
-	NLA_NUL_STRING = 10,
-	NLA_BINARY = 11,
-	NLA_S8 = 12,
-	NLA_S16 = 13,
-	NLA_S32 = 14,
-	NLA_S64 = 15,
-	NLA_BITFIELD32 = 16,
-	NLA_REJECT = 17,
-	NLA_EXACT_LEN = 18,
-	NLA_EXACT_LEN_WARN = 19,
-	NLA_MIN_LEN = 20,
-	__NLA_TYPE_MAX = 21,
-};
-
-enum netlink_validation {
-	NL_VALIDATE_LIBERAL = 0,
-	NL_VALIDATE_TRAILING = 1,
-	NL_VALIDATE_MAXTYPE = 2,
-	NL_VALIDATE_UNSPEC = 4,
-	NL_VALIDATE_STRICT_ATTRS = 8,
-	NL_VALIDATE_NESTED = 16,
-};
-
-struct genl_multicast_group {
-	char name[16];
-};
-
-struct genl_ops;
-
-struct genl_info;
-
-struct genl_family {
-	int id;
-	unsigned int hdrsize;
-	char name[16];
-	unsigned int version;
-	unsigned int maxattr;
-	bool netnsok;
-	bool parallel_ops;
-	const struct nla_policy *policy;
-	int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);
-	int (*mcast_bind)(struct net *, int);
-	void (*mcast_unbind)(struct net *, int);
-	struct nlattr **attrbuf;
-	const struct genl_ops *ops;
-	const struct genl_multicast_group *mcgrps;
-	unsigned int n_ops;
-	unsigned int n_mcgrps;
-	unsigned int mcgrp_offset;
-	struct module *module;
-};
-
-struct genl_ops {
-	int (*doit)(struct sk_buff *, struct genl_info *);
-	int (*start)(struct netlink_callback *);
-	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	u8 cmd;
-	u8 internal_flags;
-	u8 flags;
-	u8 validate;
-};
-
-struct genl_info {
-	u32 snd_seq;
-	u32 snd_portid;
-	struct nlmsghdr *nlhdr;
-	struct genlmsghdr *genlhdr;
-	void *userhdr;
-	struct nlattr **attrs;
-	possible_net_t _net;
-	void *user_ptr[2];
-	struct netlink_ext_ack *extack;
-};
-
-enum genl_validate_flags {
-	GENL_DONT_VALIDATE_STRICT = 1,
-	GENL_DONT_VALIDATE_DUMP = 2,
-	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
-};
-
-struct listener {
-	struct list_head list;
-	pid_t pid;
-	char valid;
-};
-
-struct listener_list {
-	struct rw_semaphore sem;
-	struct list_head list;
-};
-
-enum actions {
-	REGISTER = 0,
-	DEREGISTER = 1,
-	CPU_DONT_CARE = 2,
-};
-
-struct tp_module {
-	struct list_head list;
-	struct module *mod;
-};
-
-struct tp_probes {
-	struct callback_head rcu;
-	struct tracepoint_func probes[0];
-};
-
-enum ring_buffer_type {
-	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
-	RINGBUF_TYPE_PADDING = 29,
-	RINGBUF_TYPE_TIME_EXTEND = 30,
-	RINGBUF_TYPE_TIME_STAMP = 31,
-};
-
-enum ring_buffer_flags {
-	RB_FL_OVERWRITE = 1,
-};
-
-struct rb_irq_work {
-	struct irq_work work;
-	wait_queue_head_t waiters;
-	wait_queue_head_t full_waiters;
-	bool waiters_pending;
-	bool full_waiters_pending;
-	bool wakeup_full;
-};
-
-struct ring_buffer_per_cpu;
-
-struct ring_buffer {
-	unsigned int flags;
-	int cpus;
-	atomic_t record_disabled;
-	atomic_t resize_disabled;
-	cpumask_var_t cpumask;
-	struct lock_class_key *reader_lock_key;
-	struct mutex mutex;
-	struct ring_buffer_per_cpu **buffers;
-	struct hlist_node node;
-	u64 (*clock)();
-	struct rb_irq_work irq_work;
-	bool time_stamp_abs;
-};
-
-struct buffer_page;
-
-struct ring_buffer_iter {
-	struct ring_buffer_per_cpu *cpu_buffer;
-	long unsigned int head;
-	struct buffer_page *head_page;
-	struct buffer_page *cache_reader_page;
-	long unsigned int cache_read;
-	u64 read_stamp;
-};
-
-enum {
-	RB_LEN_TIME_EXTEND = 8,
-	RB_LEN_TIME_STAMP = 8,
-};
-
-struct buffer_data_page {
-	u64 time_stamp;
-	local_t commit;
-	unsigned char data[0];
-};
-
-struct buffer_page {
-	struct list_head list;
-	local_t write;
-	unsigned int read;
-	local_t entries;
-	long unsigned int real_end;
-	struct buffer_data_page *page;
-};
-
-struct rb_event_info {
-	u64 ts;
-	u64 delta;
-	long unsigned int length;
-	struct buffer_page *tail_page;
-	int add_timestamp;
-};
-
-enum {
-	RB_CTX_NMI = 0,
-	RB_CTX_IRQ = 1,
-	RB_CTX_SOFTIRQ = 2,
-	RB_CTX_NORMAL = 3,
-	RB_CTX_MAX = 4,
-};
-
-struct ring_buffer_per_cpu {
-	int cpu;
-	atomic_t record_disabled;
-	struct ring_buffer *buffer;
-	raw_spinlock_t reader_lock;
-	arch_spinlock_t lock;
-	struct lock_class_key lock_key;
-	struct buffer_data_page *free_page;
-	long unsigned int nr_pages;
-	unsigned int current_context;
-	struct list_head *pages;
-	struct buffer_page *head_page;
-	struct buffer_page *tail_page;
-	struct buffer_page *commit_page;
-	struct buffer_page *reader_page;
-	long unsigned int lost_events;
-	long unsigned int last_overrun;
-	long unsigned int nest;
-	local_t entries_bytes;
-	local_t entries;
-	local_t overrun;
-	local_t commit_overrun;
-	local_t dropped_events;
-	local_t committing;
-	local_t commits;
-	local_t pages_touched;
-	local_t pages_read;
-	long int last_pages_touch;
-	size_t shortest_full;
-	long unsigned int read;
-	long unsigned int read_bytes;
-	u64 write_stamp;
-	u64 read_stamp;
-	long int nr_pages_to_update;
-	struct list_head new_pages;
-	struct work_struct update_pages_work;
-	struct completion update_done;
-	struct rb_irq_work irq_work;
-};
-
-struct trace_export {
-	struct trace_export *next;
-	void (*write)(struct trace_export *, const void *, unsigned int);
-};
-
-struct prog_entry;
-
-struct event_filter {
-	struct prog_entry *prog;
-	char *filter_string;
-};
-
-struct trace_array_cpu;
-
-struct trace_buffer {
-	struct trace_array *tr;
-	struct ring_buffer *buffer;
-	struct trace_array_cpu *data;
-	u64 time_start;
-	int cpu;
-};
-
-struct trace_pid_list;
-
-struct trace_options;
-
-struct trace_array {
-	struct list_head list;
-	char *name;
-	struct trace_buffer trace_buffer;
-	struct trace_pid_list *filtered_pids;
-	arch_spinlock_t max_lock;
-	int buffer_disabled;
-	int stop_count;
-	int clock_id;
-	int nr_topts;
-	bool clear_trace;
-	int buffer_percent;
-	unsigned int n_err_log_entries;
-	struct tracer *current_trace;
-	unsigned int trace_flags;
-	unsigned char trace_flags_index[32];
-	unsigned int flags;
-	raw_spinlock_t start_lock;
-	struct list_head err_log;
-	struct dentry *dir;
-	struct dentry *options;
-	struct dentry *percpu_dir;
-	struct dentry *event_dir;
-	struct trace_options *topts;
-	struct list_head systems;
-	struct list_head events;
-	struct trace_event_file *trace_marker_file;
-	cpumask_var_t tracing_cpumask;
-	int ref;
-	int time_stamp_abs_ref;
-	struct list_head hist_vars;
-};
-
-struct tracer_flags;
-
-struct tracer {
-	const char *name;
-	int (*init)(struct trace_array *);
-	void (*reset)(struct trace_array *);
-	void (*start)(struct trace_array *);
-	void (*stop)(struct trace_array *);
-	int (*update_thresh)(struct trace_array *);
-	void (*open)(struct trace_iterator *);
-	void (*pipe_open)(struct trace_iterator *);
-	void (*close)(struct trace_iterator *);
-	void (*pipe_close)(struct trace_iterator *);
-	ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);
-	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-	void (*print_header)(struct seq_file *);
-	enum print_line_t (*print_line)(struct trace_iterator *);
-	int (*set_flag)(struct trace_array *, u32, u32, int);
-	int (*flag_changed)(struct trace_array *, u32, int);
-	struct tracer *next;
-	struct tracer_flags *flags;
-	int enabled;
-	int ref;
-	bool print_max;
-	bool allow_instances;
-	bool noboot;
-};
-
-enum trace_iter_flags {
-	TRACE_FILE_LAT_FMT = 1,
-	TRACE_FILE_ANNOTATE = 2,
-	TRACE_FILE_TIME_IN_NS = 4,
-};
-
-struct event_subsystem;
-
-struct trace_subsystem_dir {
-	struct list_head list;
-	struct event_subsystem *subsystem;
-	struct trace_array *tr;
-	struct dentry *entry;
-	int ref_count;
-	int nr_events;
-};
-
-enum event_trigger_type {
-	ETT_NONE = 0,
-	ETT_TRACE_ONOFF = 1,
-	ETT_SNAPSHOT = 2,
-	ETT_STACKTRACE = 4,
-	ETT_EVENT_ENABLE = 8,
-	ETT_EVENT_HIST = 16,
-	ETT_HIST_ENABLE = 32,
-};
-
-enum trace_type {
-	__TRACE_FIRST_TYPE = 0,
-	TRACE_FN = 1,
-	TRACE_CTX = 2,
-	TRACE_WAKE = 3,
-	TRACE_STACK = 4,
-	TRACE_PRINT = 5,
-	TRACE_BPRINT = 6,
-	TRACE_MMIO_RW = 7,
-	TRACE_MMIO_MAP = 8,
-	TRACE_BRANCH = 9,
-	TRACE_GRAPH_RET = 10,
-	TRACE_GRAPH_ENT = 11,
-	TRACE_USER_STACK = 12,
-	TRACE_BLK = 13,
-	TRACE_BPUTS = 14,
-	TRACE_HWLAT = 15,
-	TRACE_RAW_DATA = 16,
-	__TRACE_LAST_TYPE = 17,
-};
-
-struct ftrace_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	long unsigned int parent_ip;
-};
-
-struct stack_entry {
-	struct trace_entry ent;
-	int size;
-	long unsigned int caller[0];
-};
-
-struct userstack_entry {
-	struct trace_entry ent;
-	unsigned int tgid;
-	long unsigned int caller[8];
-};
-
-struct bprint_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *fmt;
-	u32 buf[0];
-};
-
-struct print_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	char buf[0];
-};
-
-struct raw_data_entry {
-	struct trace_entry ent;
-	unsigned int id;
-	char buf[0];
-};
-
-struct bputs_entry {
-	struct trace_entry ent;
-	long unsigned int ip;
-	const char *str;
-};
-
-enum trace_flag_type {
-	TRACE_FLAG_IRQS_OFF = 1,
-	TRACE_FLAG_IRQS_NOSUPPORT = 2,
-	TRACE_FLAG_NEED_RESCHED = 4,
-	TRACE_FLAG_HARDIRQ = 8,
-	TRACE_FLAG_SOFTIRQ = 16,
-	TRACE_FLAG_PREEMPT_RESCHED = 32,
-	TRACE_FLAG_NMI = 64,
-};
-
-struct trace_array_cpu {
-	atomic_t disabled;
-	void *buffer_page;
-	long unsigned int entries;
-	long unsigned int saved_latency;
-	long unsigned int critical_start;
-	long unsigned int critical_end;
-	long unsigned int critical_sequence;
-	long unsigned int nice;
-	long unsigned int policy;
-	long unsigned int rt_priority;
-	long unsigned int skipped_entries;
-	u64 preempt_timestamp;
-	pid_t pid;
-	kuid_t uid;
-	char comm[16];
-	bool ignore_pid;
-};
-
-struct trace_option_dentry;
-
-struct trace_options {
-	struct tracer *tracer;
-	struct trace_option_dentry *topts;
-};
-
-struct tracer_opt;
-
-struct trace_option_dentry {
-	struct tracer_opt *opt;
-	struct tracer_flags *flags;
-	struct trace_array *tr;
-	struct dentry *entry;
-};
-
-struct trace_pid_list {
-	int pid_max;
-	long unsigned int *pids;
-};
-
-typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
-
-enum {
-	TRACE_ARRAY_FL_GLOBAL = 1,
-};
-
-struct tracer_opt {
-	const char *name;
-	u32 bit;
-};
-
-struct tracer_flags {
-	u32 val;
-	struct tracer_opt *opts;
-	struct tracer *trace;
-};
-
-struct trace_parser {
-	bool cont;
-	char *buffer;
-	unsigned int idx;
-	unsigned int size;
-};
-
-enum trace_iterator_bits {
-	TRACE_ITER_PRINT_PARENT_BIT = 0,
-	TRACE_ITER_SYM_OFFSET_BIT = 1,
-	TRACE_ITER_SYM_ADDR_BIT = 2,
-	TRACE_ITER_VERBOSE_BIT = 3,
-	TRACE_ITER_RAW_BIT = 4,
-	TRACE_ITER_HEX_BIT = 5,
-	TRACE_ITER_BIN_BIT = 6,
-	TRACE_ITER_BLOCK_BIT = 7,
-	TRACE_ITER_PRINTK_BIT = 8,
-	TRACE_ITER_ANNOTATE_BIT = 9,
-	TRACE_ITER_USERSTACKTRACE_BIT = 10,
-	TRACE_ITER_SYM_USEROBJ_BIT = 11,
-	TRACE_ITER_PRINTK_MSGONLY_BIT = 12,
-	TRACE_ITER_CONTEXT_INFO_BIT = 13,
-	TRACE_ITER_LATENCY_FMT_BIT = 14,
-	TRACE_ITER_RECORD_CMD_BIT = 15,
-	TRACE_ITER_RECORD_TGID_BIT = 16,
-	TRACE_ITER_OVERWRITE_BIT = 17,
-	TRACE_ITER_STOP_ON_FREE_BIT = 18,
-	TRACE_ITER_IRQ_INFO_BIT = 19,
-	TRACE_ITER_MARKERS_BIT = 20,
-	TRACE_ITER_EVENT_FORK_BIT = 21,
-	TRACE_ITER_STACKTRACE_BIT = 22,
-	TRACE_ITER_LAST_BIT = 23,
-};
-
-enum trace_iterator_flags {
-	TRACE_ITER_PRINT_PARENT = 1,
-	TRACE_ITER_SYM_OFFSET = 2,
-	TRACE_ITER_SYM_ADDR = 4,
-	TRACE_ITER_VERBOSE = 8,
-	TRACE_ITER_RAW = 16,
-	TRACE_ITER_HEX = 32,
-	TRACE_ITER_BIN = 64,
-	TRACE_ITER_BLOCK = 128,
-	TRACE_ITER_PRINTK = 256,
-	TRACE_ITER_ANNOTATE = 512,
-	TRACE_ITER_USERSTACKTRACE = 1024,
-	TRACE_ITER_SYM_USEROBJ = 2048,
-	TRACE_ITER_PRINTK_MSGONLY = 4096,
-	TRACE_ITER_CONTEXT_INFO = 8192,
-	TRACE_ITER_LATENCY_FMT = 16384,
-	TRACE_ITER_RECORD_CMD = 32768,
-	TRACE_ITER_RECORD_TGID = 65536,
-	TRACE_ITER_OVERWRITE = 131072,
-	TRACE_ITER_STOP_ON_FREE = 262144,
-	TRACE_ITER_IRQ_INFO = 524288,
-	TRACE_ITER_MARKERS = 1048576,
-	TRACE_ITER_EVENT_FORK = 2097152,
-	TRACE_ITER_STACKTRACE = 4194304,
-};
-
-struct event_subsystem {
-	struct list_head list;
-	const char *name;
-	struct event_filter *filter;
-	int ref_count;
-};
-
-struct saved_cmdlines_buffer {
-	unsigned int map_pid_to_cmdline[32769];
-	unsigned int *map_cmdline_to_pid;
-	unsigned int cmdline_num;
-	int cmdline_idx;
-	char *saved_cmdlines;
-};
-
-struct ftrace_stack {
-	long unsigned int calls[1024];
-};
-
-struct ftrace_stacks {
-	struct ftrace_stack stacks[4];
-};
-
-struct trace_buffer_struct {
-	int nesting;
-	char buffer[4096];
-};
-
-struct ftrace_buffer_info {
-	struct trace_iterator iter;
-	void *spare;
-	unsigned int spare_cpu;
-	unsigned int read;
-};
-
-struct err_info {
-	const char **errs;
-	u8 type;
-	u8 pos;
-	u64 ts;
-};
-
-struct tracing_log_err {
-	struct list_head list;
-	struct err_info info;
-	char loc[128];
-	char cmd[256];
-};
-
-struct buffer_ref {
-	struct ring_buffer *buffer;
-	void *page;
-	int cpu;
-	refcount_t refcount;
-};
-
-struct ctx_switch_entry {
-	struct trace_entry ent;
-	unsigned int prev_pid;
-	unsigned int next_pid;
-	unsigned int next_cpu;
-	unsigned char prev_prio;
-	unsigned char prev_state;
-	unsigned char next_prio;
-	unsigned char next_state;
-};
-
-struct hwlat_entry {
-	struct trace_entry ent;
-	u64 duration;
-	u64 outer_duration;
-	u64 nmi_total_ts;
-	struct timespec64 timestamp;
-	unsigned int nmi_count;
-	unsigned int seqnum;
-};
-
-struct trace_mark {
-	long long unsigned int val;
-	char sym;
-};
-
-typedef int (*cmp_func_t)(const void *, const void *);
-
-struct tracer_stat {
-	const char *name;
-	void * (*stat_start)(struct tracer_stat *);
-	void * (*stat_next)(void *, int);
-	cmp_func_t stat_cmp;
-	int (*stat_show)(struct seq_file *, void *);
-	void (*stat_release)(void *);
-	int (*stat_headers)(struct seq_file *);
-};
-
-struct stat_node {
-	struct rb_node node;
-	void *stat;
-};
-
-struct stat_session {
-	struct list_head session_list;
-	struct tracer_stat *ts;
-	struct rb_root stat_root;
-	struct mutex stat_mutex;
-	struct dentry *file;
-};
-
-struct trace_bprintk_fmt {
-	struct list_head list;
-	const char *fmt;
-};
-
-enum {
-	TRACE_NOP_OPT_ACCEPT = 1,
-	TRACE_NOP_OPT_REFUSE = 2,
-};
-
-typedef __u32 blk_mq_req_flags_t;
-
-struct blk_mq_ctxs;
-
-struct blk_mq_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head rq_lists[3];
-		long: 64;
-	};
-	unsigned int cpu;
-	short unsigned int index_hw[3];
-	struct blk_mq_hw_ctx *hctxs[3];
-	long unsigned int rq_dispatched[2];
-	long unsigned int rq_merged;
-	long unsigned int rq_completed[2];
-	struct request_queue *queue;
-	struct blk_mq_ctxs *ctxs;
-	struct kobject kobj;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbitmap_word;
-
-struct sbitmap {
-	unsigned int depth;
-	unsigned int shift;
-	unsigned int map_nr;
-	struct sbitmap_word *map;
-};
-
-struct blk_mq_tags;
-
-struct blk_mq_hw_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head dispatch;
-		long unsigned int state;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct delayed_work run_work;
-	cpumask_var_t cpumask;
-	int next_cpu;
-	int next_cpu_batch;
-	long unsigned int flags;
-	void *sched_data;
-	struct request_queue *queue;
-	struct blk_flush_queue *fq;
-	void *driver_data;
-	struct sbitmap ctx_map;
-	struct blk_mq_ctx *dispatch_from;
-	unsigned int dispatch_busy;
-	short unsigned int type;
-	short unsigned int nr_ctx;
-	struct blk_mq_ctx **ctxs;
-	spinlock_t dispatch_wait_lock;
-	wait_queue_entry_t dispatch_wait;
-	atomic_t wait_index;
-	struct blk_mq_tags *tags;
-	struct blk_mq_tags *sched_tags;
-	long unsigned int queued;
-	long unsigned int run;
-	long unsigned int dispatched[7];
-	unsigned int numa_node;
-	unsigned int queue_num;
-	atomic_t nr_active;
-	struct hlist_node cpuhp_dead;
-	struct kobject kobj;
-	long unsigned int poll_considered;
-	long unsigned int poll_invoked;
-	long unsigned int poll_success;
-	struct dentry *debugfs_dir;
-	struct dentry *sched_debugfs_dir;
-	struct list_head hctx_list;
-	struct srcu_struct srcu[0];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_alloc_data {
-	struct request_queue *q;
-	blk_mq_req_flags_t flags;
-	unsigned int shallow_depth;
-	unsigned int cmd_flags;
-	struct blk_mq_ctx *ctx;
-	struct blk_mq_hw_ctx *hctx;
-};
-
-struct blk_stat_callback {
-	struct list_head list;
-	struct timer_list timer;
-	struct blk_rq_stat *cpu_stat;
-	int (*bucket_fn)(const struct request *);
-	unsigned int buckets;
-	struct blk_rq_stat *stat;
-	void (*timer_fn)(struct blk_stat_callback *);
-	void *data;
-	struct callback_head rcu;
-};
-
-struct blk_trace {
-	int trace_state;
-	struct rchan *rchan;
-	long unsigned int *sequence;
-	unsigned char *msg_data;
-	u16 act_mask;
-	u64 start_lba;
-	u64 end_lba;
-	u32 pid;
-	u32 dev;
-	struct dentry *dir;
-	struct dentry *dropped_file;
-	struct dentry *msg_file;
-	struct list_head running_list;
-	atomic_t dropped;
-};
-
-struct blk_flush_queue {
-	unsigned int flush_queue_delayed: 1;
-	unsigned int flush_pending_idx: 1;
-	unsigned int flush_running_idx: 1;
-	blk_status_t rq_status;
-	long unsigned int flush_pending_since;
-	struct list_head flush_queue[2];
-	struct list_head flush_data_in_flight;
-	struct request *flush_rq;
-	struct request *orig_rq;
-	struct lock_class_key key;
-	spinlock_t mq_flush_lock;
-};
-
-struct blk_mq_queue_map {
-	unsigned int *mq_map;
-	unsigned int nr_queues;
-	unsigned int queue_offset;
-};
-
-struct blk_mq_tag_set {
-	struct blk_mq_queue_map map[3];
-	unsigned int nr_maps;
-	const struct blk_mq_ops *ops;
-	unsigned int nr_hw_queues;
-	unsigned int queue_depth;
-	unsigned int reserved_tags;
-	unsigned int cmd_size;
-	int numa_node;
-	unsigned int timeout;
-	unsigned int flags;
-	void *driver_data;
-	struct blk_mq_tags **tags;
-	struct mutex tag_list_lock;
-	struct list_head tag_list;
-};
-
-typedef u64 compat_u64;
-
-enum blktrace_cat {
-	BLK_TC_READ = 1,
-	BLK_TC_WRITE = 2,
-	BLK_TC_FLUSH = 4,
-	BLK_TC_SYNC = 8,
-	BLK_TC_SYNCIO = 8,
-	BLK_TC_QUEUE = 16,
-	BLK_TC_REQUEUE = 32,
-	BLK_TC_ISSUE = 64,
-	BLK_TC_COMPLETE = 128,
-	BLK_TC_FS = 256,
-	BLK_TC_PC = 512,
-	BLK_TC_NOTIFY = 1024,
-	BLK_TC_AHEAD = 2048,
-	BLK_TC_META = 4096,
-	BLK_TC_DISCARD = 8192,
-	BLK_TC_DRV_DATA = 16384,
-	BLK_TC_FUA = 32768,
-	BLK_TC_END = 32768,
-};
-
-enum blktrace_act {
-	__BLK_TA_QUEUE = 1,
-	__BLK_TA_BACKMERGE = 2,
-	__BLK_TA_FRONTMERGE = 3,
-	__BLK_TA_GETRQ = 4,
-	__BLK_TA_SLEEPRQ = 5,
-	__BLK_TA_REQUEUE = 6,
-	__BLK_TA_ISSUE = 7,
-	__BLK_TA_COMPLETE = 8,
-	__BLK_TA_PLUG = 9,
-	__BLK_TA_UNPLUG_IO = 10,
-	__BLK_TA_UNPLUG_TIMER = 11,
-	__BLK_TA_INSERT = 12,
-	__BLK_TA_SPLIT = 13,
-	__BLK_TA_BOUNCE = 14,
-	__BLK_TA_REMAP = 15,
-	__BLK_TA_ABORT = 16,
-	__BLK_TA_DRV_DATA = 17,
-	__BLK_TA_CGROUP = 256,
-};
-
-enum blktrace_notify {
-	__BLK_TN_PROCESS = 0,
-	__BLK_TN_TIMESTAMP = 1,
-	__BLK_TN_MESSAGE = 2,
-	__BLK_TN_CGROUP = 256,
-};
-
-struct blk_io_trace {
-	__u32 magic;
-	__u32 sequence;
-	__u64 time;
-	__u64 sector;
-	__u32 bytes;
-	__u32 action;
-	__u32 pid;
-	__u32 device;
-	__u32 cpu;
-	__u16 error;
-	__u16 pdu_len;
-};
-
-struct blk_io_trace_remap {
-	__be32 device_from;
-	__be32 device_to;
-	__be64 sector_from;
-};
-
-enum {
-	Blktrace_setup = 1,
-	Blktrace_running = 2,
-	Blktrace_stopped = 3,
-};
-
-struct blk_user_trace_setup {
-	char name[32];
-	__u16 act_mask;
-	__u32 buf_size;
-	__u32 buf_nr;
-	__u64 start_lba;
-	__u64 end_lba;
-	__u32 pid;
-};
-
-struct compat_blk_user_trace_setup {
-	char name[32];
-	u16 act_mask;
-	short: 16;
-	u32 buf_size;
-	u32 buf_nr;
-	compat_u64 start_lba;
-	compat_u64 end_lba;
-	u32 pid;
-} __attribute__((packed));
-
-struct blkcg {};
-
-struct sbitmap_word {
-	long unsigned int depth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int word;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int cleared;
-	spinlock_t swap_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbq_wait_state {
-	atomic_t wait_cnt;
-	wait_queue_head_t wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbitmap_queue {
-	struct sbitmap sb;
-	unsigned int *alloc_hint;
-	unsigned int wake_batch;
-	atomic_t wake_index;
-	struct sbq_wait_state *ws;
-	atomic_t ws_active;
-	bool round_robin;
-	unsigned int min_shallow_depth;
-};
-
-struct blk_mq_tags {
-	unsigned int nr_tags;
-	unsigned int nr_reserved_tags;
-	atomic_t active_queues;
-	struct sbitmap_queue bitmap_tags;
-	struct sbitmap_queue breserved_tags;
-	struct request **rqs;
-	struct request **static_rqs;
-	struct list_head page_list;
-};
-
-struct blk_mq_queue_data {
-	struct request *rq;
-	bool last;
-};
-
-struct blk_mq_ctxs {
-	struct kobject kobj;
-	struct blk_mq_ctx *queue_ctx;
-};
-
-typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
-
-struct ftrace_event_field {
-	struct list_head link;
-	const char *name;
-	const char *type;
-	int filter_type;
-	int offset;
-	int size;
-	int is_signed;
-};
-
-enum {
-	FORMAT_HEADER = 1,
-	FORMAT_FIELD_SEPERATOR = 2,
-	FORMAT_PRINTFMT = 3,
-};
-
-struct ftrace_graph_ent {
-	long unsigned int func;
-	int depth;
-} __attribute__((packed));
-
-struct ftrace_graph_ret {
-	long unsigned int func;
-	long unsigned int overrun;
-	long long unsigned int calltime;
-	long long unsigned int rettime;
-	int depth;
-} __attribute__((packed));
-
-struct mmiotrace_rw {
-	resource_size_t phys;
-	long unsigned int value;
-	long unsigned int pc;
-	int map_id;
-	unsigned char opcode;
-	unsigned char width;
-};
-
-struct mmiotrace_map {
-	resource_size_t phys;
-	long unsigned int virt;
-	long unsigned int len;
-	int map_id;
-	unsigned char opcode;
-};
-
-struct ftrace_graph_ent_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ent graph_ent;
-} __attribute__((packed));
-
-struct ftrace_graph_ret_entry {
-	struct trace_entry ent;
-	struct ftrace_graph_ret ret;
-} __attribute__((packed));
-
-struct trace_mmiotrace_rw {
-	struct trace_entry ent;
-	struct mmiotrace_rw rw;
-};
-
-struct trace_mmiotrace_map {
-	struct trace_entry ent;
-	struct mmiotrace_map map;
-};
-
-struct trace_branch {
-	struct trace_entry ent;
-	unsigned int line;
-	char func[31];
-	char file[21];
-	char correct;
-	char constant;
-};
-
-typedef long unsigned int perf_trace_t[256];
-
-struct filter_pred;
-
-struct prog_entry {
-	int target;
-	int when_to_branch;
-	struct filter_pred *pred;
-};
-
-typedef int (*filter_pred_fn_t)(struct filter_pred *, void *);
-
-struct regex;
-
-typedef int (*regex_match_func)(char *, struct regex *, int);
-
-struct regex {
-	char pattern[256];
-	int len;
-	int field_len;
-	regex_match_func match;
-};
-
-struct filter_pred {
-	filter_pred_fn_t fn;
-	u64 val;
-	struct regex regex;
-	short unsigned int *ops;
-	struct ftrace_event_field *field;
-	int offset;
-	int not;
-	int op;
-};
-
-enum regex_type {
-	MATCH_FULL = 0,
-	MATCH_FRONT_ONLY = 1,
-	MATCH_MIDDLE_ONLY = 2,
-	MATCH_END_ONLY = 3,
-	MATCH_GLOB = 4,
-	MATCH_INDEX = 5,
-};
-
-enum filter_op_ids {
-	OP_GLOB = 0,
-	OP_NE = 1,
-	OP_EQ = 2,
-	OP_LE = 3,
-	OP_LT = 4,
-	OP_GE = 5,
-	OP_GT = 6,
-	OP_BAND = 7,
-	OP_MAX = 8,
-};
-
-enum {
-	FILT_ERR_NONE = 0,
-	FILT_ERR_INVALID_OP = 1,
-	FILT_ERR_TOO_MANY_OPEN = 2,
-	FILT_ERR_TOO_MANY_CLOSE = 3,
-	FILT_ERR_MISSING_QUOTE = 4,
-	FILT_ERR_OPERAND_TOO_LONG = 5,
-	FILT_ERR_EXPECT_STRING = 6,
-	FILT_ERR_EXPECT_DIGIT = 7,
-	FILT_ERR_ILLEGAL_FIELD_OP = 8,
-	FILT_ERR_FIELD_NOT_FOUND = 9,
-	FILT_ERR_ILLEGAL_INTVAL = 10,
-	FILT_ERR_BAD_SUBSYS_FILTER = 11,
-	FILT_ERR_TOO_MANY_PREDS = 12,
-	FILT_ERR_INVALID_FILTER = 13,
-	FILT_ERR_IP_FIELD_ONLY = 14,
-	FILT_ERR_INVALID_VALUE = 15,
-	FILT_ERR_ERRNO = 16,
-	FILT_ERR_NO_FILTER = 17,
-};
-
-struct filter_parse_error {
-	int lasterr;
-	int lasterr_pos;
-};
-
-typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
-
-enum {
-	INVERT = 1,
-	PROCESS_AND = 2,
-	PROCESS_OR = 4,
-};
-
-enum {
-	TOO_MANY_CLOSE = 4294967295,
-	TOO_MANY_OPEN = 4294967294,
-	MISSING_QUOTE = 4294967293,
-};
-
-struct filter_list {
-	struct list_head list;
-	struct event_filter *filter;
-};
-
-struct event_trigger_ops;
-
-struct event_command;
-
-struct event_trigger_data {
-	long unsigned int count;
-	int ref;
-	struct event_trigger_ops *ops;
-	struct event_command *cmd_ops;
-	struct event_filter *filter;
-	char *filter_str;
-	void *private_data;
-	bool paused;
-	bool paused_tmp;
-	struct list_head list;
-	char *name;
-	struct list_head named_list;
-	struct event_trigger_data *named_data;
-};
-
-struct event_trigger_ops {
-	void (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);
-	int (*init)(struct event_trigger_ops *, struct event_trigger_data *);
-	void (*free)(struct event_trigger_ops *, struct event_trigger_data *);
-	int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);
-};
-
-struct event_command {
-	struct list_head list;
-	char *name;
-	enum event_trigger_type trigger_type;
-	int flags;
-	int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);
-	int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg_all)(struct trace_event_file *);
-	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
-	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
-};
-
-struct enable_trigger_data {
-	struct trace_event_file *file;
-	bool enable;
-	bool hist;
-};
-
-enum event_command_flags {
-	EVENT_CMD_FL_POST_TRIGGER = 1,
-	EVENT_CMD_FL_NEEDS_REC = 2,
-};
-
-enum {
-	BPF_F_INDEX_MASK = 4294967295,
-	BPF_F_CURRENT_CPU = 4294967295,
-	BPF_F_CTXLEN_MASK = 0,
-};
-
-struct bpf_perf_event_value {
-	__u64 counter;
-	__u64 enabled;
-	__u64 running;
-};
-
-struct bpf_raw_tracepoint_args {
-	__u64 args[0];
-};
-
-enum bpf_task_fd_type {
-	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
-	BPF_FD_TYPE_TRACEPOINT = 1,
-	BPF_FD_TYPE_KPROBE = 2,
-	BPF_FD_TYPE_KRETPROBE = 3,
-	BPF_FD_TYPE_UPROBE = 4,
-	BPF_FD_TYPE_URETPROBE = 5,
-};
-
-struct bpf_event_entry {
-	struct perf_event *event;
-	struct file *perf_file;
-	struct file *map_file;
-	struct callback_head rcu;
-};
-
-typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
-
-typedef struct pt_regs bpf_user_pt_regs_t;
-
-struct bpf_perf_event_data {
-	bpf_user_pt_regs_t regs;
-	__u64 sample_period;
-	__u64 addr;
-};
-
-struct perf_event_query_bpf {
-	__u32 ids_len;
-	__u32 prog_cnt;
-	__u32 ids[0];
-};
-
-struct bpf_perf_event_data_kern {
-	bpf_user_pt_regs_t *regs;
-	struct perf_sample_data *data;
-	struct perf_event *event;
-};
-
-struct bpf_trace_module {
-	struct module *module;
-	struct list_head list;
-};
-
-typedef u64 (*btf_bpf_override_return)(struct pt_regs *, long unsigned int);
-
-typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
-
-typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);
-
-typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
-
-struct bpf_trace_sample_data {
-	struct perf_sample_data sds[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
-
-struct bpf_nested_pt_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_get_current_task)();
-
-typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
-
-struct send_signal_irq_work {
-	struct irq_work irq_work;
-	struct task_struct *task;
-	u32 sig;
-};
-
-typedef u64 (*btf_bpf_send_signal)(u32);
-
-typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
-
-typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
-
-struct bpf_raw_tp_regs {
-	struct pt_regs regs[3];
-};
-
-typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
-
-typedef struct bpf_cgroup_storage *pto_T_____19;
-
-struct kprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int ip;
-};
-
-struct kretprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int func;
-	long unsigned int ret_ip;
-};
-
-struct dyn_event;
-
-struct dyn_event_operations {
-	struct list_head list;
-	int (*create)(int, const char **);
-	int (*show)(struct seq_file *, struct dyn_event *);
-	bool (*is_busy)(struct dyn_event *);
-	int (*free)(struct dyn_event *);
-	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
-};
-
-struct dyn_event {
-	struct list_head list;
-	struct dyn_event_operations *ops;
-};
-
-typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
-
-enum fetch_op {
-	FETCH_OP_NOP = 0,
-	FETCH_OP_REG = 1,
-	FETCH_OP_STACK = 2,
-	FETCH_OP_STACKP = 3,
-	FETCH_OP_RETVAL = 4,
-	FETCH_OP_IMM = 5,
-	FETCH_OP_COMM = 6,
-	FETCH_OP_ARG = 7,
-	FETCH_OP_FOFFS = 8,
-	FETCH_OP_DATA = 9,
-	FETCH_OP_DEREF = 10,
-	FETCH_OP_UDEREF = 11,
-	FETCH_OP_ST_RAW = 12,
-	FETCH_OP_ST_MEM = 13,
-	FETCH_OP_ST_UMEM = 14,
-	FETCH_OP_ST_STRING = 15,
-	FETCH_OP_ST_USTRING = 16,
-	FETCH_OP_MOD_BF = 17,
-	FETCH_OP_LP_ARRAY = 18,
-	FETCH_OP_END = 19,
-	FETCH_NOP_SYMBOL = 20,
-};
-
-struct fetch_insn {
-	enum fetch_op op;
-	union {
-		unsigned int param;
-		struct {
-			unsigned int size;
-			int offset;
-		};
-		struct {
-			unsigned char basesize;
-			unsigned char lshift;
-			unsigned char rshift;
-		};
-		long unsigned int immediate;
-		void *data;
-	};
-};
-
-struct fetch_type {
-	const char *name;
-	size_t size;
-	int is_signed;
-	print_type_func_t print;
-	const char *fmt;
-	const char *fmttype;
-};
-
-struct probe_arg {
-	struct fetch_insn *code;
-	bool dynamic;
-	unsigned int offset;
-	unsigned int count;
-	const char *name;
-	const char *comm;
-	char *fmt;
-	const struct fetch_type *type;
-};
-
-struct trace_uprobe_filter {
-	rwlock_t rwlock;
-	int nr_systemwide;
-	struct list_head perf_events;
-};
-
-struct trace_probe_event {
-	unsigned int flags;
-	struct trace_event_class class;
-	struct trace_event_call call;
-	struct list_head files;
-	struct list_head probes;
-	struct trace_uprobe_filter filter[0];
-};
-
-struct trace_probe {
-	struct list_head list;
-	struct trace_probe_event *event;
-	ssize_t size;
-	unsigned int nr_args;
-	struct probe_arg args[0];
-};
-
-struct event_file_link {
-	struct trace_event_file *file;
-	struct list_head list;
-};
-
-enum {
-	TP_ERR_FILE_NOT_FOUND = 0,
-	TP_ERR_NO_REGULAR_FILE = 1,
-	TP_ERR_BAD_REFCNT = 2,
-	TP_ERR_REFCNT_OPEN_BRACE = 3,
-	TP_ERR_BAD_REFCNT_SUFFIX = 4,
-	TP_ERR_BAD_UPROBE_OFFS = 5,
-	TP_ERR_MAXACT_NO_KPROBE = 6,
-	TP_ERR_BAD_MAXACT = 7,
-	TP_ERR_MAXACT_TOO_BIG = 8,
-	TP_ERR_BAD_PROBE_ADDR = 9,
-	TP_ERR_BAD_RETPROBE = 10,
-	TP_ERR_NO_GROUP_NAME = 11,
-	TP_ERR_GROUP_TOO_LONG = 12,
-	TP_ERR_BAD_GROUP_NAME = 13,
-	TP_ERR_NO_EVENT_NAME = 14,
-	TP_ERR_EVENT_TOO_LONG = 15,
-	TP_ERR_BAD_EVENT_NAME = 16,
-	TP_ERR_RETVAL_ON_PROBE = 17,
-	TP_ERR_BAD_STACK_NUM = 18,
-	TP_ERR_BAD_ARG_NUM = 19,
-	TP_ERR_BAD_VAR = 20,
-	TP_ERR_BAD_REG_NAME = 21,
-	TP_ERR_BAD_MEM_ADDR = 22,
-	TP_ERR_BAD_IMM = 23,
-	TP_ERR_IMMSTR_NO_CLOSE = 24,
-	TP_ERR_FILE_ON_KPROBE = 25,
-	TP_ERR_BAD_FILE_OFFS = 26,
-	TP_ERR_SYM_ON_UPROBE = 27,
-	TP_ERR_TOO_MANY_OPS = 28,
-	TP_ERR_DEREF_NEED_BRACE = 29,
-	TP_ERR_BAD_DEREF_OFFS = 30,
-	TP_ERR_DEREF_OPEN_BRACE = 31,
-	TP_ERR_COMM_CANT_DEREF = 32,
-	TP_ERR_BAD_FETCH_ARG = 33,
-	TP_ERR_ARRAY_NO_CLOSE = 34,
-	TP_ERR_BAD_ARRAY_SUFFIX = 35,
-	TP_ERR_BAD_ARRAY_NUM = 36,
-	TP_ERR_ARRAY_TOO_BIG = 37,
-	TP_ERR_BAD_TYPE = 38,
-	TP_ERR_BAD_STRING = 39,
-	TP_ERR_BAD_BITFIELD = 40,
-	TP_ERR_ARG_NAME_TOO_LONG = 41,
-	TP_ERR_NO_ARG_NAME = 42,
-	TP_ERR_BAD_ARG_NAME = 43,
-	TP_ERR_USED_ARG_NAME = 44,
-	TP_ERR_ARG_TOO_LONG = 45,
-	TP_ERR_NO_ARG_BODY = 46,
-	TP_ERR_BAD_INSN_BNDRY = 47,
-	TP_ERR_FAIL_REG_PROBE = 48,
-	TP_ERR_DIFF_PROBE_TYPE = 49,
-	TP_ERR_DIFF_ARG_TYPE = 50,
-	TP_ERR_SAME_PROBE = 51,
-};
-
-struct trace_kprobe {
-	struct dyn_event devent;
-	struct kretprobe rp;
-	long unsigned int *nhit;
-	const char *symbol;
-	struct trace_probe tp;
-};
-
-struct trace_event_raw_cpu {
-	struct trace_entry ent;
-	u32 state;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_powernv_throttle {
-	struct trace_entry ent;
-	int chip_id;
-	u32 __data_loc_reason;
-	int pmax;
-	char __data[0];
-};
-
-struct trace_event_raw_pstate_sample {
-	struct trace_entry ent;
-	u32 core_busy;
-	u32 scaled_busy;
-	u32 from;
-	u32 to;
-	u64 mperf;
-	u64 aperf;
-	u64 tsc;
-	u32 freq;
-	u32 io_boost;
-	char __data[0];
-};
-
-struct trace_event_raw_cpu_frequency_limits {
-	struct trace_entry ent;
-	u32 min_freq;
-	u32 max_freq;
-	u32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_start {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u32 __data_loc_parent;
-	u32 __data_loc_pm_ops;
-	int event;
-	char __data[0];
-};
-
-struct trace_event_raw_device_pm_callback_end {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_suspend_resume {
-	struct trace_entry ent;
-	const char *action;
-	int val;
-	bool start;
-	char __data[0];
-};
-
-struct trace_event_raw_wakeup_source {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	char __data[0];
-};
-
-struct trace_event_raw_clock {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_power_domain {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u64 state;
-	u64 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_pm_qos_request {
-	struct trace_entry ent;
-	int pm_qos_class;
-	s32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_pm_qos_update_request_timeout {
-	struct trace_entry ent;
-	int pm_qos_class;
-	s32 value;
-	long unsigned int timeout_us;
-	char __data[0];
-};
-
-struct trace_event_raw_pm_qos_update {
-	struct trace_entry ent;
-	enum pm_qos_req_action action;
-	int prev_value;
-	int curr_value;
-	char __data[0];
-};
-
-struct trace_event_raw_dev_pm_qos_request {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	enum dev_pm_qos_req_type type;
-	s32 new_value;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cpu {};
-
-struct trace_event_data_offsets_powernv_throttle {
-	u32 reason;
-};
-
-struct trace_event_data_offsets_pstate_sample {};
-
-struct trace_event_data_offsets_cpu_frequency_limits {};
-
-struct trace_event_data_offsets_device_pm_callback_start {
-	u32 device;
-	u32 driver;
-	u32 parent;
-	u32 pm_ops;
-};
-
-struct trace_event_data_offsets_device_pm_callback_end {
-	u32 device;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_suspend_resume {};
-
-struct trace_event_data_offsets_wakeup_source {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clock {
-	u32 name;
-};
-
-struct trace_event_data_offsets_power_domain {
-	u32 name;
-};
-
-struct trace_event_data_offsets_pm_qos_request {};
-
-struct trace_event_data_offsets_pm_qos_update_request_timeout {};
-
-struct trace_event_data_offsets_pm_qos_update {};
-
-struct trace_event_data_offsets_dev_pm_qos_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
-
-typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
-
-typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
-
-typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
-
-typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
-
-typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
-
-typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
-
-typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_pm_qos_add_request)(void *, int, s32);
-
-typedef void (*btf_trace_pm_qos_update_request)(void *, int, s32);
-
-typedef void (*btf_trace_pm_qos_remove_request)(void *, int, s32);
-
-typedef void (*btf_trace_pm_qos_update_request_timeout)(void *, int, s32, long unsigned int);
-
-typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
-
-typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
-
-struct trace_event_raw_rpm_internal {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flags;
-	int usage_count;
-	int disable_depth;
-	int runtime_auto;
-	int request_pending;
-	int irq_safe;
-	int child_count;
-	char __data[0];
-};
-
-struct trace_event_raw_rpm_return_int {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int ip;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rpm_internal {
-	u32 name;
-};
-
-struct trace_event_data_offsets_rpm_return_int {
-	u32 name;
-};
-
-typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
-
-typedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);
-
-struct trace_probe_log {
-	const char *subsystem;
-	const char **argv;
-	int argc;
-	int index;
-};
-
-enum uprobe_filter_ctx {
-	UPROBE_FILTER_REGISTER = 0,
-	UPROBE_FILTER_UNREGISTER = 1,
-	UPROBE_FILTER_MMAP = 2,
-};
-
-struct uprobe_consumer {
-	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
-	int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);
-	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-	struct uprobe_consumer *next;
-};
-
-struct uprobe_trace_entry_head {
-	struct trace_entry ent;
-	long unsigned int vaddr[0];
-};
-
-struct trace_uprobe {
-	struct dyn_event devent;
-	struct uprobe_consumer consumer;
-	struct path path;
-	struct inode *inode;
-	char *filename;
-	long unsigned int offset;
-	long unsigned int ref_ctr_offset;
-	long unsigned int nhit;
-	struct trace_probe tp;
-};
-
-struct uprobe_dispatch_data {
-	struct trace_uprobe *tu;
-	long unsigned int bp_addr;
-};
-
-struct uprobe_cpu_buffer {
-	struct mutex mutex;
-	void *buf;
-};
-
-typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
-
-typedef __u32 __le32;
-
-typedef __u64 __le64;
-
-enum xdp_action {
-	XDP_ABORTED = 0,
-	XDP_DROP = 1,
-	XDP_PASS = 2,
-	XDP_TX = 3,
-	XDP_REDIRECT = 4,
-};
-
-enum xdp_mem_type {
-	MEM_TYPE_PAGE_SHARED = 0,
-	MEM_TYPE_PAGE_ORDER0 = 1,
-	MEM_TYPE_PAGE_POOL = 2,
-	MEM_TYPE_ZERO_COPY = 3,
-	MEM_TYPE_MAX = 4,
-};
-
-struct zero_copy_allocator {
-	void (*free)(struct zero_copy_allocator *, long unsigned int);
-};
-
-typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
-
-struct bpf_prog_dummy {
-	struct bpf_prog prog;
-};
-
-typedef u64 (*btf_bpf_user_rnd_u32)();
-
-struct page_pool;
-
-struct xdp_mem_allocator {
-	struct xdp_mem_info mem;
-	union {
-		void *allocator;
-		struct page_pool *page_pool;
-		struct zero_copy_allocator *zc_alloc;
-	};
-	struct rhash_head node;
-	struct callback_head rcu;
-};
-
-struct trace_event_raw_xdp_exception {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_bulk_tx {
-	struct trace_entry ent;
-	int ifindex;
-	u32 act;
-	int drops;
-	int sent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_redirect_template {
-	struct trace_entry ent;
-	int prog_id;
-	u32 act;
-	int ifindex;
-	int err;
-	int to_ifindex;
-	u32 map_id;
-	int map_index;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_kthread {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int sched;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_cpumap_enqueue {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	int cpu;
-	unsigned int drops;
-	unsigned int processed;
-	int to_cpu;
-	char __data[0];
-};
-
-struct trace_event_raw_xdp_devmap_xmit {
-	struct trace_entry ent;
-	int map_id;
-	u32 act;
-	u32 map_index;
-	int drops;
-	int sent;
-	int from_ifindex;
-	int to_ifindex;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_disconnect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_connect {
-	struct trace_entry ent;
-	const struct xdp_mem_allocator *xa;
-	u32 mem_id;
-	u32 mem_type;
-	const void *allocator;
-	const struct xdp_rxq_info *rxq;
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_mem_return_failed {
-	struct trace_entry ent;
-	const struct page *page;
-	u32 mem_id;
-	u32 mem_type;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_xdp_exception {};
-
-struct trace_event_data_offsets_xdp_bulk_tx {};
-
-struct trace_event_data_offsets_xdp_redirect_template {};
-
-struct trace_event_data_offsets_xdp_cpumap_kthread {};
-
-struct trace_event_data_offsets_xdp_cpumap_enqueue {};
-
-struct trace_event_data_offsets_xdp_devmap_xmit {};
-
-struct trace_event_data_offsets_mem_disconnect {};
-
-struct trace_event_data_offsets_mem_connect {};
-
-struct trace_event_data_offsets_mem_return_failed {};
-
-typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
-
-typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
-
-typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, int, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, int, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, int, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, int, int, const struct bpf_map *, u32);
-
-typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct bpf_map *, u32, int, int, const struct net_device *, const struct net_device *, int);
-
-typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
-
-typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
-
-typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
-
-enum bpf_cmd {
-	BPF_MAP_CREATE = 0,
-	BPF_MAP_LOOKUP_ELEM = 1,
-	BPF_MAP_UPDATE_ELEM = 2,
-	BPF_MAP_DELETE_ELEM = 3,
-	BPF_MAP_GET_NEXT_KEY = 4,
-	BPF_PROG_LOAD = 5,
-	BPF_OBJ_PIN = 6,
-	BPF_OBJ_GET = 7,
-	BPF_PROG_ATTACH = 8,
-	BPF_PROG_DETACH = 9,
-	BPF_PROG_TEST_RUN = 10,
-	BPF_PROG_GET_NEXT_ID = 11,
-	BPF_MAP_GET_NEXT_ID = 12,
-	BPF_PROG_GET_FD_BY_ID = 13,
-	BPF_MAP_GET_FD_BY_ID = 14,
-	BPF_OBJ_GET_INFO_BY_FD = 15,
-	BPF_PROG_QUERY = 16,
-	BPF_RAW_TRACEPOINT_OPEN = 17,
-	BPF_BTF_LOAD = 18,
-	BPF_BTF_GET_FD_BY_ID = 19,
-	BPF_TASK_FD_QUERY = 20,
-	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
-	BPF_MAP_FREEZE = 22,
-	BPF_BTF_GET_NEXT_ID = 23,
-};
-
-enum {
-	BPF_ANY = 0,
-	BPF_NOEXIST = 1,
-	BPF_EXIST = 2,
-	BPF_F_LOCK = 4,
-};
-
-enum {
-	BPF_F_NO_PREALLOC = 1,
-	BPF_F_NO_COMMON_LRU = 2,
-	BPF_F_NUMA_NODE = 4,
-	BPF_F_RDONLY = 8,
-	BPF_F_WRONLY = 16,
-	BPF_F_STACK_BUILD_ID = 32,
-	BPF_F_ZERO_SEED = 64,
-	BPF_F_RDONLY_PROG = 128,
-	BPF_F_WRONLY_PROG = 256,
-	BPF_F_CLONE = 512,
-	BPF_F_MMAPABLE = 1024,
-};
-
-struct bpf_prog_info {
-	__u32 type;
-	__u32 id;
-	__u8 tag[8];
-	__u32 jited_prog_len;
-	__u32 xlated_prog_len;
-	__u64 jited_prog_insns;
-	__u64 xlated_prog_insns;
-	__u64 load_time;
-	__u32 created_by_uid;
-	__u32 nr_map_ids;
-	__u64 map_ids;
-	char name[16];
-	__u32 ifindex;
-	__u32 gpl_compatible: 1;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 nr_jited_ksyms;
-	__u32 nr_jited_func_lens;
-	__u64 jited_ksyms;
-	__u64 jited_func_lens;
-	__u32 btf_id;
-	__u32 func_info_rec_size;
-	__u64 func_info;
-	__u32 nr_func_info;
-	__u32 nr_line_info;
-	__u64 line_info;
-	__u64 jited_line_info;
-	__u32 nr_jited_line_info;
-	__u32 line_info_rec_size;
-	__u32 jited_line_info_rec_size;
-	__u32 nr_prog_tags;
-	__u64 prog_tags;
-	__u64 run_time_ns;
-	__u64 run_cnt;
-};
-
-struct bpf_map_info {
-	__u32 type;
-	__u32 id;
-	__u32 key_size;
-	__u32 value_size;
-	__u32 max_entries;
-	__u32 map_flags;
-	char name[16];
-	__u32 ifindex;
-	__u64 netns_dev;
-	__u64 netns_ino;
-	__u32 btf_id;
-	__u32 btf_key_type_id;
-	__u32 btf_value_type_id;
-};
-
-struct bpf_btf_info {
-	__u64 btf;
-	__u32 btf_size;
-	__u32 id;
-};
-
-struct bpf_spin_lock {
-	__u32 val;
-};
-
-enum perf_bpf_event_type {
-	PERF_BPF_EVENT_UNKNOWN = 0,
-	PERF_BPF_EVENT_PROG_LOAD = 1,
-	PERF_BPF_EVENT_PROG_UNLOAD = 2,
-	PERF_BPF_EVENT_MAX = 3,
-};
-
-struct bpf_raw_tracepoint {
-	struct bpf_raw_event_map *btp;
-	struct bpf_prog *prog;
-};
-
-struct bpf_verifier_log {
-	u32 level;
-	char kbuf[1024];
-	char *ubuf;
-	u32 len_used;
-	u32 len_total;
-};
-
-struct bpf_subprog_info {
-	u32 start;
-	u32 linfo_idx;
-	u16 stack_depth;
-};
-
-struct bpf_verifier_stack_elem;
-
-struct bpf_verifier_state;
-
-struct bpf_verifier_state_list;
-
-struct bpf_insn_aux_data;
-
-struct bpf_verifier_env {
-	u32 insn_idx;
-	u32 prev_insn_idx;
-	struct bpf_prog *prog;
-	const struct bpf_verifier_ops *ops;
-	struct bpf_verifier_stack_elem *head;
-	int stack_size;
-	bool strict_alignment;
-	bool test_state_freq;
-	struct bpf_verifier_state *cur_state;
-	struct bpf_verifier_state_list **explored_states;
-	struct bpf_verifier_state_list *free_list;
-	struct bpf_map *used_maps[64];
-	u32 used_map_cnt;
-	u32 id_gen;
-	bool allow_ptr_leaks;
-	bool seen_direct_write;
-	struct bpf_insn_aux_data *insn_aux_data;
-	const struct bpf_line_info *prev_linfo;
-	struct bpf_verifier_log log;
-	struct bpf_subprog_info subprog_info[257];
-	struct {
-		int *insn_state;
-		int *insn_stack;
-		int cur_stack;
-	} cfg;
-	u32 subprog_cnt;
-	u32 prev_insn_processed;
-	u32 insn_processed;
-	u32 prev_jmps_processed;
-	u32 jmps_processed;
-	u64 verification_time;
-	u32 max_states_per_insn;
-	u32 total_states;
-	u32 peak_states;
-	u32 longest_mark_read_walk;
-};
-
-typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-
-struct tnum {
-	u64 value;
-	u64 mask;
-};
-
-enum bpf_reg_liveness {
-	REG_LIVE_NONE = 0,
-	REG_LIVE_READ32 = 1,
-	REG_LIVE_READ64 = 2,
-	REG_LIVE_READ = 3,
-	REG_LIVE_WRITTEN = 4,
-	REG_LIVE_DONE = 8,
-};
-
-struct bpf_reg_state {
-	enum bpf_reg_type type;
-	union {
-		u16 range;
-		struct bpf_map *map_ptr;
-		u32 btf_id;
-		long unsigned int raw;
-	};
-	s32 off;
-	u32 id;
-	u32 ref_obj_id;
-	struct tnum var_off;
-	s64 smin_value;
-	s64 smax_value;
-	u64 umin_value;
-	u64 umax_value;
-	struct bpf_reg_state *parent;
-	u32 frameno;
-	s32 subreg_def;
-	enum bpf_reg_liveness live;
-	bool precise;
-};
-
-enum bpf_stack_slot_type {
-	STACK_INVALID = 0,
-	STACK_SPILL = 1,
-	STACK_MISC = 2,
-	STACK_ZERO = 3,
-};
-
-struct bpf_stack_state {
-	struct bpf_reg_state spilled_ptr;
-	u8 slot_type[8];
-};
-
-struct bpf_reference_state {
-	int id;
-	int insn_idx;
-};
-
-struct bpf_func_state {
-	struct bpf_reg_state regs[11];
-	int callsite;
-	u32 frameno;
-	u32 subprogno;
-	int acquired_refs;
-	struct bpf_reference_state *refs;
-	int allocated_stack;
-	struct bpf_stack_state *stack;
-};
-
-struct bpf_idx_pair {
-	u32 prev_idx;
-	u32 idx;
-};
-
-struct bpf_verifier_state {
-	struct bpf_func_state *frame[8];
-	struct bpf_verifier_state *parent;
-	u32 branches;
-	u32 insn_idx;
-	u32 curframe;
-	u32 active_spin_lock;
-	bool speculative;
-	u32 first_insn_idx;
-	u32 last_insn_idx;
-	struct bpf_idx_pair *jmp_history;
-	u32 jmp_history_cnt;
-};
-
-struct bpf_verifier_state_list {
-	struct bpf_verifier_state state;
-	struct bpf_verifier_state_list *next;
-	int miss_cnt;
-	int hit_cnt;
-};
-
-struct bpf_insn_aux_data {
-	union {
-		enum bpf_reg_type ptr_type;
-		long unsigned int map_ptr_state;
-		s32 call_imm;
-		u32 alu_limit;
-		struct {
-			u32 map_index;
-			u32 map_off;
-		};
-	};
-	u64 map_key_state;
-	int ctx_field_size;
-	int sanitize_stack_off;
-	bool seen;
-	bool zext_dst;
-	u8 alu_state;
-	bool prune_point;
-	unsigned int orig_idx;
-};
-
-struct bpf_verifier_stack_elem {
-	struct bpf_verifier_state st;
-	int insn_idx;
-	int prev_insn_idx;
-	struct bpf_verifier_stack_elem *next;
-};
-
-typedef void (*bpf_insn_print_t)(void *, const char *, ...);
-
-typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
-
-typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
-
-struct bpf_insn_cbs {
-	bpf_insn_print_t cb_print;
-	bpf_insn_revmap_call_t cb_call;
-	bpf_insn_print_imm_t cb_imm;
-	void *private_data;
-};
-
-struct bpf_call_arg_meta {
-	struct bpf_map *map_ptr;
-	bool raw_mode;
-	bool pkt_access;
-	int regno;
-	int access_size;
-	s64 msize_smax_value;
-	u64 msize_umax_value;
-	int ref_obj_id;
-	int func_id;
-	u32 btf_id;
-};
-
-enum reg_arg_type {
-	SRC_OP = 0,
-	DST_OP = 1,
-	DST_OP_NO_MARK = 2,
-};
-
-enum {
-	DISCOVERED = 16,
-	EXPLORED = 32,
-	FALLTHROUGH = 1,
-	BRANCH = 2,
-};
-
-struct idpair {
-	u32 old;
-	u32 cur;
-};
-
-struct tree_descr {
-	const char *name;
-	const struct file_operations *ops;
-	int mode;
-};
-
-enum bpf_type {
-	BPF_TYPE_UNSPEC = 0,
-	BPF_TYPE_PROG = 1,
-	BPF_TYPE_MAP = 2,
-};
-
-struct map_iter {
-	void *key;
-	bool done;
-};
-
-enum {
-	OPT_MODE = 0,
-};
-
-struct bpf_mount_opts {
-	umode_t mode;
-};
-
-typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
-
-typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
-
-typedef u64 (*btf_bpf_get_smp_processor_id)();
-
-typedef u64 (*btf_bpf_get_numa_node_id)();
-
-typedef u64 (*btf_bpf_ktime_get_ns)();
-
-typedef u64 (*btf_bpf_get_current_pid_tgid)();
-
-typedef u64 (*btf_bpf_get_current_uid_gid)();
-
-typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
-
-typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
-
-typedef u64 (*btf_bpf_get_current_cgroup_id)();
-
-typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);
-
-typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
-
-struct pcpu_freelist_node;
-
-struct pcpu_freelist_head {
-	struct pcpu_freelist_node *first;
-	raw_spinlock_t lock;
-};
-
-struct pcpu_freelist_node {
-	struct pcpu_freelist_node *next;
-};
-
-struct pcpu_freelist {
-	struct pcpu_freelist_head *freelist;
-};
-
-struct bpf_lru_node {
-	struct list_head list;
-	u16 cpu;
-	u8 type;
-	u8 ref;
-};
-
-struct bpf_lru_list {
-	struct list_head lists[3];
-	unsigned int counts[2];
-	struct list_head *next_inactive_rotation;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_lru_locallist {
-	struct list_head lists[2];
-	u16 next_steal;
-	raw_spinlock_t lock;
-};
-
-struct bpf_common_lru {
-	struct bpf_lru_list lru_list;
-	struct bpf_lru_locallist *local_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
-
-struct bpf_lru {
-	union {
-		struct bpf_common_lru common_lru;
-		struct bpf_lru_list *percpu_lru;
-	};
-	del_from_htab_func del_from_htab;
-	void *del_arg;
-	unsigned int hash_offset;
-	unsigned int nr_scans;
-	bool percpu;
-	long: 56;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bucket {
-	struct hlist_nulls_head head;
-	raw_spinlock_t lock;
-};
-
-struct htab_elem;
-
-struct bpf_htab {
-	struct bpf_map map;
-	struct bucket *buckets;
-	void *elems;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	union {
-		struct pcpu_freelist freelist;
-		struct bpf_lru lru;
-	};
-	struct htab_elem **extra_elems;
-	atomic_t count;
-	u32 n_buckets;
-	u32 elem_size;
-	u32 hashrnd;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct htab_elem {
-	union {
-		struct hlist_nulls_node hash_node;
-		struct {
-			void *padding;
-			union {
-				struct bpf_htab *htab;
-				struct pcpu_freelist_node fnode;
-			};
-		};
-	};
-	union {
-		struct callback_head rcu;
-		struct bpf_lru_node lru_node;
-	};
-	u32 hash;
-	int: 32;
-	char key[0];
-};
-
-struct prog_poke_elem {
-	struct list_head list;
-	struct bpf_prog_aux *aux;
-};
-
-enum bpf_lru_list_type {
-	BPF_LRU_LIST_T_ACTIVE = 0,
-	BPF_LRU_LIST_T_INACTIVE = 1,
-	BPF_LRU_LIST_T_FREE = 2,
-	BPF_LRU_LOCAL_LIST_T_FREE = 3,
-	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
-};
-
-struct bpf_lpm_trie_key {
-	__u32 prefixlen;
-	__u8 data[0];
-};
-
-struct lpm_trie_node {
-	struct callback_head rcu;
-	struct lpm_trie_node *child[2];
-	u32 prefixlen;
-	u32 flags;
-	u8 data[0];
-};
-
-struct lpm_trie {
-	struct bpf_map map;
-	struct lpm_trie_node *root;
-	size_t n_entries;
-	size_t max_prefixlen;
-	size_t data_size;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct idr___2;
-
-struct bpf_cgroup_storage_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct bpf_prog_aux *aux;
-	struct rb_root root;
-	struct list_head list;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_member {
-	__u32 name_off;
-	__u32 type;
-	__u32 offset;
-};
-
-struct bpf_queue_stack {
-	struct bpf_map map;
-	raw_spinlock_t lock;
-	u32 head;
-	u32 tail;
-	u32 size;
-	char elements[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_enum {
-	__u32 name_off;
-	__s32 val;
-};
-
-struct btf_array {
-	__u32 type;
-	__u32 index_type;
-	__u32 nelems;
-};
-
-struct btf_param {
-	__u32 name_off;
-	__u32 type;
-};
-
-enum {
-	BTF_VAR_STATIC = 0,
-	BTF_VAR_GLOBAL_ALLOCATED = 1,
-};
-
-struct btf_var {
-	__u32 linkage;
-};
-
-struct btf_var_secinfo {
-	__u32 type;
-	__u32 offset;
-	__u32 size;
-};
-
-struct bpf_flow_keys {
-	__u16 nhoff;
-	__u16 thoff;
-	__u16 addr_proto;
-	__u8 is_frag;
-	__u8 is_first_frag;
-	__u8 is_encap;
-	__u8 ip_proto;
-	__be16 n_proto;
-	__be16 sport;
-	__be16 dport;
-	union {
-		struct {
-			__be32 ipv4_src;
-			__be32 ipv4_dst;
-		};
-		struct {
-			__u32 ipv6_src[4];
-			__u32 ipv6_dst[4];
-		};
-	};
-	__u32 flags;
-	__be32 flow_label;
-};
-
-struct bpf_sock {
-	__u32 bound_dev_if;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 mark;
-	__u32 priority;
-	__u32 src_ip4;
-	__u32 src_ip6[4];
-	__u32 src_port;
-	__u32 dst_port;
-	__u32 dst_ip4;
-	__u32 dst_ip6[4];
-	__u32 state;
-};
-
-struct __sk_buff {
-	__u32 len;
-	__u32 pkt_type;
-	__u32 mark;
-	__u32 queue_mapping;
-	__u32 protocol;
-	__u32 vlan_present;
-	__u32 vlan_tci;
-	__u32 vlan_proto;
-	__u32 priority;
-	__u32 ingress_ifindex;
-	__u32 ifindex;
-	__u32 tc_index;
-	__u32 cb[5];
-	__u32 hash;
-	__u32 tc_classid;
-	__u32 data;
-	__u32 data_end;
-	__u32 napi_id;
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 data_meta;
-	union {
-		struct bpf_flow_keys *flow_keys;
-	};
-	__u64 tstamp;
-	__u32 wire_len;
-	__u32 gso_segs;
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct xdp_md {
-	__u32 data;
-	__u32 data_end;
-	__u32 data_meta;
-	__u32 ingress_ifindex;
-	__u32 rx_queue_index;
-};
-
-struct sk_msg_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 size;
-};
-
-struct sk_reuseport_md {
-	union {
-		void *data;
-	};
-	union {
-		void *data_end;
-	};
-	__u32 len;
-	__u32 eth_protocol;
-	__u32 ip_protocol;
-	__u32 bind_inany;
-	__u32 hash;
-};
-
-struct bpf_sock_addr {
-	__u32 user_family;
-	__u32 user_ip4;
-	__u32 user_ip6[4];
-	__u32 user_port;
-	__u32 family;
-	__u32 type;
-	__u32 protocol;
-	__u32 msg_src_ip4;
-	__u32 msg_src_ip6[4];
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct bpf_sock_ops {
-	__u32 op;
-	union {
-		__u32 args[4];
-		__u32 reply;
-		__u32 replylong[4];
-	};
-	__u32 family;
-	__u32 remote_ip4;
-	__u32 local_ip4;
-	__u32 remote_ip6[4];
-	__u32 local_ip6[4];
-	__u32 remote_port;
-	__u32 local_port;
-	__u32 is_fullsock;
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 bpf_sock_ops_cb_flags;
-	__u32 state;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u32 sk_txhash;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	union {
-		struct bpf_sock *sk;
-	};
-};
-
-struct bpf_cgroup_dev_ctx {
-	__u32 access_type;
-	__u32 major;
-	__u32 minor;
-};
-
-struct bpf_sysctl {
-	__u32 write;
-	__u32 file_pos;
-};
-
-struct bpf_sockopt {
-	union {
-		struct bpf_sock *sk;
-	};
-	union {
-		void *optval;
-	};
-	union {
-		void *optval_end;
-	};
-	__s32 level;
-	__s32 optname;
-	__s32 optlen;
-	__s32 retval;
-};
-
-struct sk_reuseport_kern {
-	struct sk_buff *skb;
-	struct sock *sk;
-	struct sock *selected_sk;
-	void *data_end;
-	u32 hash;
-	u32 reuseport_id;
-	bool bind_inany;
-};
-
-struct bpf_flow_dissector {
-	struct bpf_flow_keys *flow_keys;
-	const struct sk_buff *skb;
-	void *data;
-	void *data_end;
-};
-
-struct inet_listen_hashbucket {
-	spinlock_t lock;
-	unsigned int count;
-	union {
-		struct hlist_head head;
-		struct hlist_nulls_head nulls_head;
-	};
-};
-
-struct inet_ehash_bucket;
-
-struct inet_bind_hashbucket;
-
-struct inet_hashinfo {
-	struct inet_ehash_bucket *ehash;
-	spinlock_t *ehash_locks;
-	unsigned int ehash_mask;
-	unsigned int ehash_locks_mask;
-	struct kmem_cache *bind_bucket_cachep;
-	struct inet_bind_hashbucket *bhash;
-	unsigned int bhash_size;
-	unsigned int lhash2_mask;
-	struct inet_listen_hashbucket *lhash2;
-	long: 64;
-	struct inet_listen_hashbucket listening_hash[32];
-};
-
-struct ip_ra_chain {
-	struct ip_ra_chain *next;
-	struct sock *sk;
-	union {
-		void (*destructor)(struct sock *);
-		struct sock *saved_sk;
-	};
-	struct callback_head rcu;
-};
-
-struct fib_table {
-	struct hlist_node tb_hlist;
-	u32 tb_id;
-	int tb_num_default;
-	struct callback_head rcu;
-	long unsigned int *tb_data;
-	long unsigned int __data[0];
-};
-
-struct inet_peer_base {
-	struct rb_root rb_root;
-	seqlock_t lock;
-	int total;
-};
-
-struct tcp_fastopen_context {
-	siphash_key_t key[2];
-	int num;
-	struct callback_head rcu;
-};
-
-struct xdp_buff {
-	void *data;
-	void *data_end;
-	void *data_meta;
-	void *data_hard_start;
-	long unsigned int handle;
-	struct xdp_rxq_info *rxq;
-};
-
-struct bpf_sock_addr_kern {
-	struct sock *sk;
-	struct sockaddr *uaddr;
-	u64 tmp_reg;
-	void *t_ctx;
-};
-
-struct bpf_sock_ops_kern {
-	struct sock *sk;
-	u32 op;
-	union {
-		u32 args[4];
-		u32 reply;
-		u32 replylong[4];
-	};
-	u32 is_fullsock;
-	u64 temp;
-};
-
-struct bpf_sysctl_kern {
-	struct ctl_table_header *head;
-	struct ctl_table *table;
-	void *cur_val;
-	size_t cur_len;
-	void *new_val;
-	size_t new_len;
-	int new_updated;
-	int write;
-	loff_t *ppos;
-	u64 tmp_reg;
-};
-
-struct bpf_sockopt_kern {
-	struct sock *sk;
-	u8 *optval;
-	u8 *optval_end;
-	s32 level;
-	s32 optname;
-	s32 optlen;
-	s32 retval;
-};
-
-struct sock_reuseport {
-	struct callback_head rcu;
-	u16 max_socks;
-	u16 num_socks;
-	unsigned int synq_overflow_ts;
-	unsigned int reuseport_id;
-	unsigned int bind_inany: 1;
-	unsigned int has_conns: 1;
-	struct bpf_prog *prog;
-	struct sock *socks[0];
-};
-
-struct ip_rt_acct {
-	__u32 o_bytes;
-	__u32 o_packets;
-	__u32 i_bytes;
-	__u32 i_packets;
-};
-
-struct inet_ehash_bucket {
-	struct hlist_nulls_head chain;
-};
-
-struct inet_bind_hashbucket {
-	spinlock_t lock;
-	struct hlist_head chain;
-};
-
-struct ack_sample {
-	u32 pkts_acked;
-	s32 rtt_us;
-	u32 in_flight;
-};
-
-struct rate_sample {
-	u64 prior_mstamp;
-	u32 prior_delivered;
-	s32 delivered;
-	long int interval_us;
-	u32 snd_interval_us;
-	u32 rcv_interval_us;
-	long int rtt_us;
-	int losses;
-	u32 acked_sacked;
-	u32 prior_in_flight;
-	bool is_app_limited;
-	bool is_retrans;
-	bool is_ack_delayed;
-};
-
-struct sk_msg_sg {
-	u32 start;
-	u32 curr;
-	u32 end;
-	u32 size;
-	u32 copybreak;
-	long unsigned int copy;
-	struct scatterlist data[19];
-};
-
-struct sk_msg {
-	struct sk_msg_sg sg;
-	void *data;
-	void *data_end;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 flags;
-	struct sk_buff *skb;
-	struct sock *sk_redir;
-	struct sock *sk;
-	struct list_head list;
-};
-
-enum verifier_phase {
-	CHECK_META = 0,
-	CHECK_TYPE = 1,
-};
-
-struct resolve_vertex {
-	const struct btf_type *t;
-	u32 type_id;
-	u16 next_member;
-};
-
-enum visit_state {
-	NOT_VISITED = 0,
-	VISITED = 1,
-	RESOLVED = 2,
-};
-
-enum resolve_mode {
-	RESOLVE_TBD = 0,
-	RESOLVE_PTR = 1,
-	RESOLVE_STRUCT_OR_ARRAY = 2,
-};
-
-struct btf_sec_info {
-	u32 off;
-	u32 len;
-};
-
-struct btf_verifier_env {
-	struct btf *btf;
-	u8 *visit_states;
-	struct resolve_vertex stack[32];
-	struct bpf_verifier_log log;
-	u32 log_type_id;
-	u32 top_stack;
-	enum verifier_phase phase;
-	enum resolve_mode resolve_mode;
-};
-
-struct btf_kind_operations {
-	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
-	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
-	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
-	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
-	void (*seq_show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct seq_file *);
-};
-
-struct bpf_ctx_convert {
-	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
-	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
-	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
-	struct xdp_md BPF_PROG_TYPE_XDP_prog;
-	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
-	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
-	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
-	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
-	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
-	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
-	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
-	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
-	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
-	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
-	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
-	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
-	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
-	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
-	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
-	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
-	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
-	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
-	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
-	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
-	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
-	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
-	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
-	void *BPF_PROG_TYPE_TRACING_prog;
-	void *BPF_PROG_TYPE_TRACING_kern;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
-	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
-	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
-	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
-	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
-	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
-	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
-	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
-};
-
-enum {
-	__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,
-	__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,
-	__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,
-	__ctx_convertBPF_PROG_TYPE_XDP = 3,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,
-	__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,
-	__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,
-	__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,
-	__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,
-	__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,
-	__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,
-	__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,
-	__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,
-	__ctx_convertBPF_PROG_TYPE_KPROBE = 15,
-	__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,
-	__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,
-	__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,
-	__ctx_convertBPF_PROG_TYPE_TRACING = 20,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,
-	__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,
-	__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24,
-	__ctx_convert_unused = 25,
-};
-
-enum net_device_flags {
-	IFF_UP = 1,
-	IFF_BROADCAST = 2,
-	IFF_DEBUG = 4,
-	IFF_LOOPBACK = 8,
-	IFF_POINTOPOINT = 16,
-	IFF_NOTRAILERS = 32,
-	IFF_RUNNING = 64,
-	IFF_NOARP = 128,
-	IFF_PROMISC = 256,
-	IFF_ALLMULTI = 512,
-	IFF_MASTER = 1024,
-	IFF_SLAVE = 2048,
-	IFF_MULTICAST = 4096,
-	IFF_PORTSEL = 8192,
-	IFF_AUTOMEDIA = 16384,
-	IFF_DYNAMIC = 32768,
-	IFF_LOWER_UP = 65536,
-	IFF_DORMANT = 131072,
-	IFF_ECHO = 262144,
-};
-
-enum netdev_cmd {
-	NETDEV_UP = 1,
-	NETDEV_DOWN = 2,
-	NETDEV_REBOOT = 3,
-	NETDEV_CHANGE = 4,
-	NETDEV_REGISTER = 5,
-	NETDEV_UNREGISTER = 6,
-	NETDEV_CHANGEMTU = 7,
-	NETDEV_CHANGEADDR = 8,
-	NETDEV_PRE_CHANGEADDR = 9,
-	NETDEV_GOING_DOWN = 10,
-	NETDEV_CHANGENAME = 11,
-	NETDEV_FEAT_CHANGE = 12,
-	NETDEV_BONDING_FAILOVER = 13,
-	NETDEV_PRE_UP = 14,
-	NETDEV_PRE_TYPE_CHANGE = 15,
-	NETDEV_POST_TYPE_CHANGE = 16,
-	NETDEV_POST_INIT = 17,
-	NETDEV_RELEASE = 18,
-	NETDEV_NOTIFY_PEERS = 19,
-	NETDEV_JOIN = 20,
-	NETDEV_CHANGEUPPER = 21,
-	NETDEV_RESEND_IGMP = 22,
-	NETDEV_PRECHANGEMTU = 23,
-	NETDEV_CHANGEINFODATA = 24,
-	NETDEV_BONDING_INFO = 25,
-	NETDEV_PRECHANGEUPPER = 26,
-	NETDEV_CHANGELOWERSTATE = 27,
-	NETDEV_UDP_TUNNEL_PUSH_INFO = 28,
-	NETDEV_UDP_TUNNEL_DROP_INFO = 29,
-	NETDEV_CHANGE_TX_QUEUE_LEN = 30,
-	NETDEV_CVLAN_FILTER_PUSH_INFO = 31,
-	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
-	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
-	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
-};
-
-struct netdev_notifier_info {
-	struct net_device *dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct bpf_dtab_netdev;
-
-struct xdp_bulk_queue {
-	struct xdp_frame *q[16];
-	struct list_head flush_node;
-	struct net_device *dev_rx;
-	struct bpf_dtab_netdev *obj;
-	unsigned int count;
-};
-
-struct bpf_dtab;
-
-struct bpf_dtab_netdev {
-	struct net_device *dev;
-	struct hlist_node index_hlist;
-	struct bpf_dtab *dtab;
-	struct xdp_bulk_queue *bulkq;
-	struct callback_head rcu;
-	unsigned int idx;
-};
-
-struct bpf_dtab {
-	struct bpf_map map;
-	struct bpf_dtab_netdev **netdev_map;
-	struct list_head *flush_list;
-	struct list_head list;
-	struct hlist_head *dev_index_head;
-	spinlock_t index_lock;
-	unsigned int items;
-	u32 n_buckets;
-	long: 32;
-	long: 64;
-};
-
-typedef struct bio_vec skb_frag_t;
-
-struct skb_shared_hwtstamps {
-	ktime_t hwtstamp;
-};
-
-struct skb_shared_info {
-	__u8 __unused;
-	__u8 meta_len;
-	__u8 nr_frags;
-	__u8 tx_flags;
-	short unsigned int gso_size;
-	short unsigned int gso_segs;
-	struct sk_buff *frag_list;
-	struct skb_shared_hwtstamps hwtstamps;
-	unsigned int gso_type;
-	u32 tskey;
-	atomic_t dataref;
-	void *destructor_arg;
-	skb_frag_t frags[17];
-};
-
-struct ptr_ring {
-	int producer;
-	spinlock_t producer_lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int consumer_head;
-	int consumer_tail;
-	spinlock_t consumer_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int size;
-	int batch;
-	void **queue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_cpu_map_entry;
-
-struct xdp_bulk_queue___2 {
-	void *q[8];
-	struct list_head flush_node;
-	struct bpf_cpu_map_entry *obj;
-	unsigned int count;
-};
-
-struct bpf_cpu_map;
-
-struct bpf_cpu_map_entry {
-	u32 cpu;
-	int map_id;
-	u32 qsize;
-	struct xdp_bulk_queue___2 *bulkq;
-	struct bpf_cpu_map *cmap;
-	struct ptr_ring *queue;
-	struct task_struct *kthread;
-	struct work_struct kthread_stop_wq;
-	atomic_t refcnt;
-	struct callback_head rcu;
-};
-
-struct bpf_cpu_map {
-	struct bpf_map map;
-	struct bpf_cpu_map_entry **cpu_map;
-	struct list_head *flush_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xsk_queue;
-
-struct xdp_umem_page;
-
-struct xdp_umem_fq_reuse;
-
-struct xdp_umem {
-	struct xsk_queue *fq;
-	struct xsk_queue *cq;
-	struct xdp_umem_page *pages;
-	u64 chunk_mask;
-	u64 size;
-	u32 headroom;
-	u32 chunk_size_nohr;
-	struct user_struct *user;
-	long unsigned int address;
-	refcount_t users;
-	struct work_struct work;
-	struct page **pgs;
-	u32 npgs;
-	u16 queue_id;
-	u8 need_wakeup;
-	u8 flags;
-	int id;
-	struct net_device *dev;
-	struct xdp_umem_fq_reuse *fq_reuse;
-	bool zc;
-	spinlock_t xsk_list_lock;
-	struct list_head xsk_list;
-};
-
-struct xdp_umem_page {
-	void *addr;
-	dma_addr_t dma;
-};
-
-struct xdp_umem_fq_reuse {
-	u32 nentries;
-	u32 length;
-	u64 handles[0];
-};
-
-struct xdp_sock;
-
-struct xsk_map {
-	struct bpf_map map;
-	struct list_head *flush_list;
-	spinlock_t lock;
-	struct xdp_sock *xsk_map[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_sock {
-	struct sock sk;
-	struct xsk_queue *rx;
-	struct net_device *dev;
-	struct xdp_umem *umem;
-	struct list_head flush_node;
-	u16 queue_id;
-	bool zc;
-	enum {
-		XSK_READY = 0,
-		XSK_BOUND = 1,
-		XSK_UNBOUND = 2,
-	} state;
-	struct mutex mutex;
-	struct xsk_queue *tx;
-	struct list_head list;
-	spinlock_t tx_completion_lock;
-	spinlock_t rx_lock;
-	u64 rx_dropped;
-	struct list_head map_list;
-	spinlock_t map_list_lock;
-};
-
-struct xsk_map_node {
-	struct list_head node;
-	struct xsk_map *map;
-	struct xdp_sock **map_entry;
-};
-
-struct bpf_prog_offload_ops {
-	int (*insn_hook)(struct bpf_verifier_env *, int, int);
-	int (*finalize)(struct bpf_verifier_env *);
-	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
-	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
-	int (*prepare)(struct bpf_prog *);
-	int (*translate)(struct bpf_prog *);
-	void (*destroy)(struct bpf_prog *);
-};
-
-struct bpf_offload_dev {
-	const struct bpf_prog_offload_ops *ops;
-	struct list_head netdevs;
-	void *priv;
-};
-
-struct rhlist_head {
-	struct rhash_head rhead;
-	struct rhlist_head *next;
-};
-
-struct bpf_offload_netdev {
-	struct rhash_head l;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	struct list_head progs;
-	struct list_head maps;
-	struct list_head offdev_netdevs;
-};
-
-struct ns_get_path_bpf_prog_args {
-	struct bpf_prog *prog;
-	struct bpf_prog_info *info;
-};
-
-struct ns_get_path_bpf_map_args {
-	struct bpf_offloaded_map *offmap;
-	struct bpf_map_info *info;
-};
-
-enum bpf_stack_build_id_status {
-	BPF_STACK_BUILD_ID_EMPTY = 0,
-	BPF_STACK_BUILD_ID_VALID = 1,
-	BPF_STACK_BUILD_ID_IP = 2,
-};
-
-struct bpf_stack_build_id {
-	__s32 status;
-	unsigned char build_id[20];
-	union {
-		__u64 offset;
-		__u64 ip;
-	};
-};
-
-enum {
-	BPF_F_SKIP_FIELD_MASK = 255,
-	BPF_F_USER_STACK = 256,
-	BPF_F_FAST_STACK_CMP = 512,
-	BPF_F_REUSE_STACKID = 1024,
-	BPF_F_USER_BUILD_ID = 2048,
-};
-
-typedef __u32 Elf32_Addr;
-
-typedef __u16 Elf32_Half;
-
-typedef __u32 Elf32_Off;
-
-struct elf32_hdr {
-	unsigned char e_ident[16];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-};
-
-typedef struct elf32_hdr Elf32_Ehdr;
-
-struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-};
-
-typedef struct elf32_phdr Elf32_Phdr;
-
-struct elf64_phdr {
-	Elf64_Word p_type;
-	Elf64_Word p_flags;
-	Elf64_Off p_offset;
-	Elf64_Addr p_vaddr;
-	Elf64_Addr p_paddr;
-	Elf64_Xword p_filesz;
-	Elf64_Xword p_memsz;
-	Elf64_Xword p_align;
-};
-
-typedef struct elf64_phdr Elf64_Phdr;
-
-typedef struct elf32_note Elf32_Nhdr;
-
-struct stack_map_bucket {
-	struct pcpu_freelist_node fnode;
-	u32 hash;
-	u32 nr;
-	u64 data[0];
-};
-
-struct bpf_stack_map {
-	struct bpf_map map;
-	void *elems;
-	struct pcpu_freelist freelist;
-	u32 n_buckets;
-	struct stack_map_bucket *buckets[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct stack_map_irq_work {
-	struct irq_work irq_work;
-	struct rw_semaphore *sem;
-};
-
-typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
-
-typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
-
-enum {
-	BPF_F_SYSCTL_BASE_NAME = 1,
-};
-
-struct bpf_prog_list {
-	struct list_head node;
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *storage[2];
-};
-
-struct qdisc_skb_cb {
-	struct {
-		unsigned int pkt_len;
-		u16 slave_dev_queue_mapping;
-		u16 tc_classid;
-	};
-	unsigned char data[20];
-};
-
-struct bpf_skb_data_end {
-	struct qdisc_skb_cb qdisc_cb;
-	void *data_meta;
-	void *data_end;
-};
-
-enum {
-	TCPF_ESTABLISHED = 2,
-	TCPF_SYN_SENT = 4,
-	TCPF_SYN_RECV = 8,
-	TCPF_FIN_WAIT1 = 16,
-	TCPF_FIN_WAIT2 = 32,
-	TCPF_TIME_WAIT = 64,
-	TCPF_CLOSE = 128,
-	TCPF_CLOSE_WAIT = 256,
-	TCPF_LAST_ACK = 512,
-	TCPF_LISTEN = 1024,
-	TCPF_CLOSING = 2048,
-	TCPF_NEW_SYN_RECV = 4096,
-};
-
-typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
-
-typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
-
-typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
-
-enum sock_type {
-	SOCK_STREAM = 1,
-	SOCK_DGRAM = 2,
-	SOCK_RAW = 3,
-	SOCK_RDM = 4,
-	SOCK_SEQPACKET = 5,
-	SOCK_DCCP = 6,
-	SOCK_PACKET = 10,
-};
-
-enum {
-	IPPROTO_IP = 0,
-	IPPROTO_ICMP = 1,
-	IPPROTO_IGMP = 2,
-	IPPROTO_IPIP = 4,
-	IPPROTO_TCP = 6,
-	IPPROTO_EGP = 8,
-	IPPROTO_PUP = 12,
-	IPPROTO_UDP = 17,
-	IPPROTO_IDP = 22,
-	IPPROTO_TP = 29,
-	IPPROTO_DCCP = 33,
-	IPPROTO_IPV6 = 41,
-	IPPROTO_RSVP = 46,
-	IPPROTO_GRE = 47,
-	IPPROTO_ESP = 50,
-	IPPROTO_AH = 51,
-	IPPROTO_MTP = 92,
-	IPPROTO_BEETPH = 94,
-	IPPROTO_ENCAP = 98,
-	IPPROTO_PIM = 103,
-	IPPROTO_COMP = 108,
-	IPPROTO_SCTP = 132,
-	IPPROTO_UDPLITE = 136,
-	IPPROTO_MPLS = 137,
-	IPPROTO_RAW = 255,
-	IPPROTO_MAX = 256,
-};
-
-enum sock_flags {
-	SOCK_DEAD = 0,
-	SOCK_DONE = 1,
-	SOCK_URGINLINE = 2,
-	SOCK_KEEPOPEN = 3,
-	SOCK_LINGER = 4,
-	SOCK_DESTROY = 5,
-	SOCK_BROADCAST = 6,
-	SOCK_TIMESTAMP = 7,
-	SOCK_ZAPPED = 8,
-	SOCK_USE_WRITE_QUEUE = 9,
-	SOCK_DBG = 10,
-	SOCK_RCVTSTAMP = 11,
-	SOCK_RCVTSTAMPNS = 12,
-	SOCK_LOCALROUTE = 13,
-	SOCK_QUEUE_SHRUNK = 14,
-	SOCK_MEMALLOC = 15,
-	SOCK_TIMESTAMPING_RX_SOFTWARE = 16,
-	SOCK_FASYNC = 17,
-	SOCK_RXQ_OVFL = 18,
-	SOCK_ZEROCOPY = 19,
-	SOCK_WIFI_STATUS = 20,
-	SOCK_NOFCS = 21,
-	SOCK_FILTER_LOCKED = 22,
-	SOCK_SELECT_ERR_QUEUE = 23,
-	SOCK_RCU_FREE = 24,
-	SOCK_TXTIME = 25,
-	SOCK_XDP = 26,
-	SOCK_TSTAMP_NEW = 27,
-};
-
-struct reuseport_array {
-	struct bpf_map map;
-	struct sock *ptrs[0];
-};
-
-struct super_block___2;
-
-struct module___2;
-
-struct file_system_type___3 {
-	const char *name;
-	int fs_flags;
-	int (*init_fs_context)(struct fs_context *);
-	const struct fs_parameter_description *parameters;
-	struct dentry___2 * (*mount)(struct file_system_type___3 *, int, const char *, void *);
-	void (*kill_sb)(struct super_block___2 *);
-	struct module___2 *owner;
-	struct file_system_type___3 *next;
-	struct hlist_head fs_supers;
-	struct lock_class_key s_lock_key;
-	struct lock_class_key s_umount_key;
-	struct lock_class_key s_vfs_rename_key;
-	struct lock_class_key s_writers_key[3];
-	struct lock_class_key i_lock_key;
-	struct lock_class_key i_mutex_key;
-	struct lock_class_key i_mutex_dir_key;
-};
-
-struct file___2;
-
-struct kiocb___2;
-
-struct iov_iter___2;
-
-struct poll_table_struct___2;
-
-struct vm_area_struct___2;
-
-struct file_lock___2;
-
-struct page___2;
-
-struct pipe_inode_info___2;
-
-struct file_operations___2 {
-	struct module___2 *owner;
-	loff_t (*llseek)(struct file___2 *, loff_t, int);
-	ssize_t (*read)(struct file___2 *, char *, size_t, loff_t *);
-	ssize_t (*write)(struct file___2 *, const char *, size_t, loff_t *);
-	ssize_t (*read_iter)(struct kiocb___2 *, struct iov_iter___2 *);
-	ssize_t (*write_iter)(struct kiocb___2 *, struct iov_iter___2 *);
-	int (*iopoll)(struct kiocb___2 *, bool);
-	int (*iterate)(struct file___2 *, struct dir_context *);
-	int (*iterate_shared)(struct file___2 *, struct dir_context *);
-	__poll_t (*poll)(struct file___2 *, struct poll_table_struct___2 *);
-	long int (*unlocked_ioctl)(struct file___2 *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct file___2 *, unsigned int, long unsigned int);
-	int (*mmap)(struct file___2 *, struct vm_area_struct___2 *);
-	long unsigned int mmap_supported_flags;
-	int (*open)(struct inode___2 *, struct file___2 *);
-	int (*flush)(struct file___2 *, fl_owner_t);
-	int (*release)(struct inode___2 *, struct file___2 *);
-	int (*fsync)(struct file___2 *, loff_t, loff_t, int);
-	int (*fasync)(int, struct file___2 *, int);
-	int (*lock)(struct file___2 *, int, struct file_lock___2 *);
-	ssize_t (*sendpage)(struct file___2 *, struct page___2 *, int, size_t, loff_t *, int);
-	long unsigned int (*get_unmapped_area)(struct file___2 *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	int (*check_flags)(int);
-	int (*flock)(struct file___2 *, int, struct file_lock___2 *);
-	ssize_t (*splice_write)(struct pipe_inode_info___2 *, struct file___2 *, loff_t *, size_t, unsigned int);
-	ssize_t (*splice_read)(struct file___2 *, loff_t *, struct pipe_inode_info___2 *, size_t, unsigned int);
-	int (*setlease)(struct file___2 *, long int, struct file_lock___2 **, void **);
-	long int (*fallocate)(struct file___2 *, int, loff_t, loff_t);
-	void (*show_fdinfo)(struct seq_file___2 *, struct file___2 *);
-	ssize_t (*copy_file_range)(struct file___2 *, loff_t, struct file___2 *, loff_t, size_t, unsigned int);
-	loff_t (*remap_file_range)(struct file___2 *, loff_t, struct file___2 *, loff_t, loff_t, unsigned int);
-	int (*fadvise)(struct file___2 *, loff_t, loff_t, int);
-};
-
-struct vmacache___2 {
-	u64 seqnum;
-	struct vm_area_struct___2 *vmas[4];
-};
-
-struct page_frag___2 {
-	struct page___2 *page;
-	__u32 offset;
-	__u32 size;
-};
-
-struct perf_event___2;
-
-struct thread_struct___2 {
-	struct desc_struct tls_array[3];
-	long unsigned int sp;
-	short unsigned int es;
-	short unsigned int ds;
-	short unsigned int fsindex;
-	short unsigned int gsindex;
-	long unsigned int fsbase;
-	long unsigned int gsbase;
-	struct perf_event___2 *ptrace_bps[4];
-	long unsigned int debugreg6;
-	long unsigned int ptrace_dr7;
-	long unsigned int cr2;
-	long unsigned int trap_nr;
-	long unsigned int error_code;
-	struct io_bitmap *io_bitmap;
-	long unsigned int iopl_emul;
-	mm_segment_t addr_limit;
-	unsigned int sig_on_uaccess_err: 1;
-	unsigned int uaccess_err: 1;
-	long: 62;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct fpu fpu;
-};
-
-struct mm_struct___2;
-
-struct pid___2;
-
-struct cred___2;
-
-struct nsproxy___2;
-
-struct signal_struct___2;
-
-struct css_set___2;
-
-struct perf_event_context___2;
-
-struct vm_struct___2;
-
-struct task_struct___2 {
-	struct thread_info thread_info;
-	volatile long int state;
-	void *stack;
-	refcount_t usage;
-	unsigned int flags;
-	unsigned int ptrace;
-	struct llist_node wake_entry;
-	int on_cpu;
-	unsigned int cpu;
-	unsigned int wakee_flips;
-	long unsigned int wakee_flip_decay_ts;
-	struct task_struct___2 *last_wakee;
-	int recent_used_cpu;
-	int wake_cpu;
-	int on_rq;
-	int prio;
-	int static_prio;
-	int normal_prio;
-	unsigned int rt_priority;
-	const struct sched_class *sched_class;
-	struct sched_entity se;
-	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
-	struct sched_dl_entity dl;
-	unsigned int btrace_seq;
-	unsigned int policy;
-	int nr_cpus_allowed;
-	const cpumask_t *cpus_ptr;
-	cpumask_t cpus_mask;
-	struct sched_info sched_info;
-	struct list_head tasks;
-	struct plist_node pushable_tasks;
-	struct rb_node pushable_dl_tasks;
-	struct mm_struct___2 *mm;
-	struct mm_struct___2 *active_mm;
-	struct vmacache___2 vmacache;
-	struct task_rss_stat rss_stat;
-	int exit_state;
-	int exit_code;
-	int exit_signal;
-	int pdeath_signal;
-	long unsigned int jobctl;
-	unsigned int personality;
-	unsigned int sched_reset_on_fork: 1;
-	unsigned int sched_contributes_to_load: 1;
-	unsigned int sched_migrated: 1;
-	unsigned int sched_remote_wakeup: 1;
-	int: 28;
-	unsigned int in_execve: 1;
-	unsigned int in_iowait: 1;
-	unsigned int restore_sigmask: 1;
-	unsigned int no_cgroup_migration: 1;
-	unsigned int frozen: 1;
-	long unsigned int atomic_flags;
-	struct restart_block restart_block;
-	pid_t pid;
-	pid_t tgid;
-	long unsigned int stack_canary;
-	struct task_struct___2 *real_parent;
-	struct task_struct___2 *parent;
-	struct list_head children;
-	struct list_head sibling;
-	struct task_struct___2 *group_leader;
-	struct list_head ptraced;
-	struct list_head ptrace_entry;
-	struct pid___2 *thread_pid;
-	struct hlist_node pid_links[4];
-	struct list_head thread_group;
-	struct list_head thread_node;
-	struct completion *vfork_done;
-	int *set_child_tid;
-	int *clear_child_tid;
-	u64 utime;
-	u64 stime;
-	u64 gtime;
-	struct prev_cputime prev_cputime;
-	long unsigned int nvcsw;
-	long unsigned int nivcsw;
-	u64 start_time;
-	u64 start_boottime;
-	long unsigned int min_flt;
-	long unsigned int maj_flt;
-	struct posix_cputimers posix_cputimers;
-	const struct cred___2 *ptracer_cred;
-	const struct cred___2 *real_cred;
-	const struct cred___2 *cred;
-	struct key *cached_requested_key;
-	char comm[16];
-	struct nameidata *nameidata;
-	struct sysv_sem sysvsem;
-	struct sysv_shm sysvshm;
-	struct fs_struct *fs;
-	struct files_struct *files;
-	struct nsproxy___2 *nsproxy;
-	struct signal_struct___2 *signal;
-	struct sighand_struct *sighand;
-	sigset_t blocked;
-	sigset_t real_blocked;
-	sigset_t saved_sigmask;
-	struct sigpending pending;
-	long unsigned int sas_ss_sp;
-	size_t sas_ss_size;
-	unsigned int sas_ss_flags;
-	struct callback_head *task_works;
-	struct audit_context *audit_context;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct seccomp seccomp;
-	u32 parent_exec_id;
-	u32 self_exec_id;
-	spinlock_t alloc_lock;
-	raw_spinlock_t pi_lock;
-	struct wake_q_node wake_q;
-	struct rb_root_cached pi_waiters;
-	struct task_struct___2 *pi_top_task;
-	struct rt_mutex_waiter *pi_blocked_on;
-	void *journal_info;
-	struct bio_list *bio_list;
-	struct blk_plug *plug;
-	struct reclaim_state *reclaim_state;
-	struct backing_dev_info *backing_dev_info;
-	struct io_context *io_context;
-	struct capture_control *capture_control;
-	long unsigned int ptrace_message;
-	kernel_siginfo_t *last_siginfo;
-	struct task_io_accounting ioac;
-	u64 acct_rss_mem1;
-	u64 acct_vm_mem1;
-	u64 acct_timexpd;
-	nodemask_t mems_allowed;
-	seqcount_t mems_allowed_seq;
-	int cpuset_mem_spread_rotor;
-	int cpuset_slab_spread_rotor;
-	struct css_set___2 *cgroups;
-	struct list_head cg_list;
-	struct robust_list_head *robust_list;
-	struct compat_robust_list_head *compat_robust_list;
-	struct list_head pi_state_list;
-	struct futex_pi_state *pi_state_cache;
-	struct mutex futex_exit_mutex;
-	unsigned int futex_state;
-	struct perf_event_context___2 *perf_event_ctxp[2];
-	struct mutex perf_event_mutex;
-	struct list_head perf_event_list;
-	struct mempolicy *mempolicy;
-	short int il_prev;
-	short int pref_node_fork;
-	struct rseq *rseq;
-	u32 rseq_sig;
-	long unsigned int rseq_event_mask;
-	struct tlbflush_unmap_batch tlb_ubc;
-	union {
-		refcount_t rcu_users;
-		struct callback_head rcu;
-	};
-	struct pipe_inode_info___2 *splice_pipe;
-	struct page_frag___2 task_frag;
-	struct task_delay_info *delays;
-	int nr_dirtied;
-	int nr_dirtied_pause;
-	long unsigned int dirty_paused_when;
-	u64 timer_slack_ns;
-	u64 default_timer_slack_ns;
-	long unsigned int trace;
-	long unsigned int trace_recursion;
-	struct uprobe_task *utask;
-	int pagefault_disabled;
-	struct task_struct___2 *oom_reaper_list;
-	struct vm_struct___2 *stack_vm_area;
-	refcount_t stack_refcount;
-	void *security;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct thread_struct___2 thread;
-};
-
-typedef struct page___2 *pgtable_t___2;
-
-struct address_space___2;
-
-struct dev_pagemap___2;
-
-struct page___2 {
-	long unsigned int flags;
-	union {
-		struct {
-			struct list_head lru;
-			struct address_space___2 *mapping;
-			long unsigned int index;
-			long unsigned int private;
-		};
-		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
-			union {
-				struct list_head slab_list;
-				struct {
-					struct page___2 *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
-			};
-		};
-		struct {
-			long unsigned int compound_head;
-			unsigned char compound_dtor;
-			unsigned char compound_order;
-			atomic_t compound_mapcount;
-		};
-		struct {
-			long unsigned int _compound_pad_1;
-			long unsigned int _compound_pad_2;
-			struct list_head deferred_list;
-		};
-		struct {
-			long unsigned int _pt_pad_1;
-			pgtable_t___2 pmd_huge_pte;
-			long unsigned int _pt_pad_2;
-			union {
-				struct mm_struct___2 *pt_mm;
-				atomic_t pt_frag_refcount;
-			};
-			spinlock_t ptl;
-		};
-		struct {
-			struct dev_pagemap___2 *pgmap;
-			void *zone_device_data;
-		};
-		struct callback_head callback_head;
-	};
-	union {
-		atomic_t _mapcount;
-		unsigned int page_type;
-		unsigned int active;
-		int units;
-	};
-	atomic_t _refcount;
-	long: 64;
-};
-
-struct hw_perf_event___2 {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct___2 *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	u64 last_period;
-	local64_t period_left;
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
-
-typedef void (*perf_overflow_handler_t___2)(struct perf_event___2 *, struct perf_sample_data *, struct pt_regs *);
-
-struct pmu___2;
-
-struct ring_buffer___2;
-
-struct fasync_struct___2;
-
-struct pid_namespace___2;
-
-struct bpf_prog___2;
-
-struct trace_event_call___2;
-
-struct perf_event___2 {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event___2 *group_leader;
-	struct pmu___2 *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event___2 hw;
-	struct perf_event_context___2 *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event___2 *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct___2 *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct ring_buffer___2 *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct___2 *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event___2 *aux_event;
-	void (*destroy)(struct perf_event___2 *);
-	struct callback_head callback_head;
-	struct pid_namespace___2 *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t___2 overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t___2 orig_overflow_handler;
-	struct bpf_prog___2 *prog;
-	struct trace_event_call___2 *tp_event;
-	struct event_filter *filter;
-	void *security;
-	struct list_head sb_list;
-};
-
-struct dentry_operations___2;
-
-struct dentry___2 {
-	unsigned int d_flags;
-	seqcount_t d_seq;
-	struct hlist_bl_node d_hash;
-	struct dentry___2 *d_parent;
-	struct qstr d_name;
-	struct inode___2 *d_inode;
-	unsigned char d_iname[32];
-	struct lockref d_lockref;
-	const struct dentry_operations___2 *d_op;
-	struct super_block___2 *d_sb;
-	long unsigned int d_time;
-	void *d_fsdata;
-	union {
-		struct list_head d_lru;
-		wait_queue_head_t *d_wait;
-	};
-	struct list_head d_child;
-	struct list_head d_subdirs;
-	union {
-		struct hlist_node d_alias;
-		struct hlist_bl_node d_in_lookup_hash;
-		struct callback_head d_rcu;
-	} d_u;
-};
-
-struct address_space_operations___2;
-
-struct address_space___2 {
-	struct inode___2 *host;
-	struct xarray i_pages;
-	gfp_t gfp_mask;
-	atomic_t i_mmap_writable;
-	struct rb_root_cached i_mmap;
-	struct rw_semaphore i_mmap_rwsem;
-	long unsigned int nrpages;
-	long unsigned int nrexceptional;
-	long unsigned int writeback_index;
-	const struct address_space_operations___2 *a_ops;
-	long unsigned int flags;
-	errseq_t wb_err;
-	spinlock_t private_lock;
-	struct list_head private_list;
-	void *private_data;
-};
-
-struct inode_operations___2;
-
-struct block_device___2;
-
-struct inode___2 {
-	umode_t i_mode;
-	short unsigned int i_opflags;
-	kuid_t i_uid;
-	kgid_t i_gid;
-	unsigned int i_flags;
-	struct posix_acl *i_acl;
-	struct posix_acl *i_default_acl;
-	const struct inode_operations___2 *i_op;
-	struct super_block___2 *i_sb;
-	struct address_space___2 *i_mapping;
-	void *i_security;
-	long unsigned int i_ino;
-	union {
-		const unsigned int i_nlink;
-		unsigned int __i_nlink;
-	};
-	dev_t i_rdev;
-	loff_t i_size;
-	struct timespec64 i_atime;
-	struct timespec64 i_mtime;
-	struct timespec64 i_ctime;
-	spinlock_t i_lock;
-	short unsigned int i_bytes;
-	u8 i_blkbits;
-	u8 i_write_hint;
-	blkcnt_t i_blocks;
-	long unsigned int i_state;
-	struct rw_semaphore i_rwsem;
-	long unsigned int dirtied_when;
-	long unsigned int dirtied_time_when;
-	struct hlist_node i_hash;
-	struct list_head i_io_list;
-	struct list_head i_lru;
-	struct list_head i_sb_list;
-	struct list_head i_wb_list;
-	union {
-		struct hlist_head i_dentry;
-		struct callback_head i_rcu;
-	};
-	atomic64_t i_version;
-	atomic_t i_count;
-	atomic_t i_dio_count;
-	atomic_t i_writecount;
-	atomic_t i_readcount;
-	union {
-		const struct file_operations___2 *i_fop;
-		void (*free_inode)(struct inode___2 *);
-	};
-	struct file_lock_context *i_flctx;
-	struct address_space___2 i_data;
-	struct list_head i_devices;
-	union {
-		struct pipe_inode_info___2 *i_pipe;
-		struct block_device___2 *i_bdev;
-		struct cdev *i_cdev;
-		char *i_link;
-		unsigned int i_dir_seq;
-	};
-	__u32 i_generation;
-	__u32 i_fsnotify_mask;
-	struct fsnotify_mark_connector *i_fsnotify_marks;
-	void *i_private;
-};
-
-struct vfsmount___2;
-
-struct path___2;
-
-struct dentry_operations___2 {
-	int (*d_revalidate)(struct dentry___2 *, unsigned int);
-	int (*d_weak_revalidate)(struct dentry___2 *, unsigned int);
-	int (*d_hash)(const struct dentry___2 *, struct qstr *);
-	int (*d_compare)(const struct dentry___2 *, unsigned int, const char *, const struct qstr *);
-	int (*d_delete)(const struct dentry___2 *);
-	int (*d_init)(struct dentry___2 *);
-	void (*d_release)(struct dentry___2 *);
-	void (*d_prune)(struct dentry___2 *);
-	void (*d_iput)(struct dentry___2 *, struct inode___2 *);
-	char * (*d_dname)(struct dentry___2 *, char *, int);
-	struct vfsmount___2 * (*d_automount)(struct path___2 *);
-	int (*d_manage)(const struct path___2 *, bool);
-	struct dentry___2 * (*d_real)(struct dentry___2 *, const struct inode___2 *);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct quota_format_type___2;
-
-struct mem_dqinfo___2 {
-	struct quota_format_type___2 *dqi_format;
-	int dqi_fmt_id;
-	struct list_head dqi_dirty_list;
-	long unsigned int dqi_flags;
-	unsigned int dqi_bgrace;
-	unsigned int dqi_igrace;
-	qsize_t dqi_max_spc_limit;
-	qsize_t dqi_max_ino_limit;
-	void *dqi_priv;
-};
-
-struct quota_format_ops___2;
-
-struct quota_info___2 {
-	unsigned int flags;
-	struct rw_semaphore dqio_sem;
-	struct inode___2 *files[3];
-	struct mem_dqinfo___2 info[3];
-	const struct quota_format_ops___2 *ops[3];
-};
-
-struct rcuwait___2 {
-	struct task_struct___2 *task;
-};
-
-struct percpu_rw_semaphore___2 {
-	struct rcu_sync rss;
-	unsigned int *read_count;
-	struct rw_semaphore rw_sem;
-	struct rcuwait___2 writer;
-	int readers_block;
-};
-
-struct sb_writers___2 {
-	int frozen;
-	wait_queue_head_t wait_unfrozen;
-	struct percpu_rw_semaphore___2 rw_sem[3];
-};
-
-struct super_operations___2;
-
-struct dquot_operations___2;
-
-struct quotactl_ops___2;
-
-struct user_namespace___2;
-
-struct super_block___2 {
-	struct list_head s_list;
-	dev_t s_dev;
-	unsigned char s_blocksize_bits;
-	long unsigned int s_blocksize;
-	loff_t s_maxbytes;
-	struct file_system_type___3 *s_type;
-	const struct super_operations___2 *s_op;
-	const struct dquot_operations___2 *dq_op;
-	const struct quotactl_ops___2 *s_qcop;
-	const struct export_operations *s_export_op;
-	long unsigned int s_flags;
-	long unsigned int s_iflags;
-	long unsigned int s_magic;
-	struct dentry___2 *s_root;
-	struct rw_semaphore s_umount;
-	int s_count;
-	atomic_t s_active;
-	void *s_security;
-	const struct xattr_handler **s_xattr;
-	struct hlist_bl_head s_roots;
-	struct list_head s_mounts;
-	struct block_device___2 *s_bdev;
-	struct backing_dev_info *s_bdi;
-	struct mtd_info *s_mtd;
-	struct hlist_node s_instances;
-	unsigned int s_quota_types;
-	struct quota_info___2 s_dquot;
-	struct sb_writers___2 s_writers;
-	void *s_fs_info;
-	u32 s_time_gran;
-	time64_t s_time_min;
-	time64_t s_time_max;
-	__u32 s_fsnotify_mask;
-	struct fsnotify_mark_connector *s_fsnotify_marks;
-	char s_id[32];
-	uuid_t s_uuid;
-	unsigned int s_max_links;
-	fmode_t s_mode;
-	struct mutex s_vfs_rename_mutex;
-	const char *s_subtype;
-	const struct dentry_operations___2 *s_d_op;
-	int cleancache_poolid;
-	struct shrinker s_shrink;
-	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
-	int s_readonly_remount;
-	struct workqueue_struct *s_dio_done_wq;
-	struct hlist_head s_pins;
-	struct user_namespace___2 *s_user_ns;
-	struct list_lru s_dentry_lru;
-	struct list_lru s_inode_lru;
-	struct callback_head rcu;
-	struct work_struct destroy_work;
-	struct mutex s_sync_lock;
-	int s_stack_depth;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_inode_list_lock;
-	struct list_head s_inodes;
-	spinlock_t s_inode_wblist_lock;
-	struct list_head s_inodes_wb;
-	long: 64;
-	long: 64;
-};
-
-struct vfsmount___2 {
-	struct dentry___2 *mnt_root;
-	struct super_block___2 *mnt_sb;
-	int mnt_flags;
-};
-
-struct path___2 {
-	struct vfsmount___2 *mnt;
-	struct dentry___2 *dentry;
-};
-
-struct proc_ns_operations___2;
-
-struct ns_common___2 {
-	atomic_long_t stashed;
-	const struct proc_ns_operations___2 *ops;
-	unsigned int inum;
-};
-
-struct ucounts___2;
-
-struct user_namespace___2 {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace___2 *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common___2 ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts___2 *ucounts;
-	int ucount_max[9];
-};
-
-struct vm_operations_struct___2;
-
-struct vm_area_struct___2 {
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	struct vm_area_struct___2 *vm_next;
-	struct vm_area_struct___2 *vm_prev;
-	struct rb_node vm_rb;
-	long unsigned int rb_subtree_gap;
-	struct mm_struct___2 *vm_mm;
-	pgprot_t vm_page_prot;
-	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
-	struct list_head anon_vma_chain;
-	struct anon_vma *anon_vma;
-	const struct vm_operations_struct___2 *vm_ops;
-	long unsigned int vm_pgoff;
-	struct file___2 *vm_file;
-	void *vm_private_data;
-	atomic_long_t swap_readahead_info;
-	struct mempolicy *vm_policy;
-	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
-};
-
-struct core_state___2;
-
-struct mm_struct___2 {
-	struct {
-		struct vm_area_struct___2 *mmap;
-		struct rb_root mm_rb;
-		u64 vmacache_seqnum;
-		long unsigned int (*get_unmapped_area)(struct file___2 *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-		long unsigned int mmap_base;
-		long unsigned int mmap_legacy_base;
-		long unsigned int mmap_compat_base;
-		long unsigned int mmap_compat_legacy_base;
-		long unsigned int task_size;
-		long unsigned int highest_vm_end;
-		pgd_t *pgd;
-		atomic_t membarrier_state;
-		atomic_t mm_users;
-		atomic_t mm_count;
-		atomic_long_t pgtables_bytes;
-		int map_count;
-		spinlock_t page_table_lock;
-		struct rw_semaphore mmap_sem;
-		struct list_head mmlist;
-		long unsigned int hiwater_rss;
-		long unsigned int hiwater_vm;
-		long unsigned int total_vm;
-		long unsigned int locked_vm;
-		atomic64_t pinned_vm;
-		long unsigned int data_vm;
-		long unsigned int exec_vm;
-		long unsigned int stack_vm;
-		long unsigned int def_flags;
-		spinlock_t arg_lock;
-		long unsigned int start_code;
-		long unsigned int end_code;
-		long unsigned int start_data;
-		long unsigned int end_data;
-		long unsigned int start_brk;
-		long unsigned int brk;
-		long unsigned int start_stack;
-		long unsigned int arg_start;
-		long unsigned int arg_end;
-		long unsigned int env_start;
-		long unsigned int env_end;
-		long unsigned int saved_auxv[46];
-		struct mm_rss_stat rss_stat;
-		struct linux_binfmt *binfmt;
-		mm_context_t context;
-		long unsigned int flags;
-		struct core_state___2 *core_state;
-		spinlock_t ioctx_lock;
-		struct kioctx_table *ioctx_table;
-		struct user_namespace___2 *user_ns;
-		struct file___2 *exe_file;
-		struct mmu_notifier_mm *mmu_notifier_mm;
-		atomic_t tlb_flush_pending;
-		bool tlb_flush_batched;
-		struct uprobes_state uprobes_state;
-		atomic_long_t hugetlb_usage;
-		struct work_struct async_put_work;
-	};
-	long unsigned int cpu_bitmap[0];
-};
-
-struct dev_pagemap_ops___2;
-
-struct dev_pagemap___2 {
-	struct vmem_altmap altmap;
-	struct resource res;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
-	struct completion done;
-	enum memory_type type;
-	unsigned int flags;
-	const struct dev_pagemap_ops___2 *ops;
-};
-
-struct fown_struct___2 {
-	rwlock_t lock;
-	struct pid___2 *pid;
-	enum pid_type pid_type;
-	kuid_t uid;
-	kuid_t euid;
-	int signum;
-};
-
-struct file___2 {
-	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
-	struct path___2 f_path;
-	struct inode___2 *f_inode;
-	const struct file_operations___2 *f_op;
-	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
-	atomic_long_t f_count;
-	unsigned int f_flags;
-	fmode_t f_mode;
-	struct mutex f_pos_lock;
-	loff_t f_pos;
-	struct fown_struct___2 f_owner;
-	const struct cred___2 *f_cred;
-	struct file_ra_state f_ra;
-	u64 f_version;
-	void *f_security;
-	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
-	struct address_space___2 *f_mapping;
-	errseq_t f_wb_err;
-};
-
-struct vm_fault___2;
-
-struct vm_operations_struct___2 {
-	void (*open)(struct vm_area_struct___2 *);
-	void (*close)(struct vm_area_struct___2 *);
-	int (*split)(struct vm_area_struct___2 *, long unsigned int);
-	int (*mremap)(struct vm_area_struct___2 *);
-	vm_fault_t (*fault)(struct vm_fault___2 *);
-	vm_fault_t (*huge_fault)(struct vm_fault___2 *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault___2 *, long unsigned int, long unsigned int);
-	long unsigned int (*pagesize)(struct vm_area_struct___2 *);
-	vm_fault_t (*page_mkwrite)(struct vm_fault___2 *);
-	vm_fault_t (*pfn_mkwrite)(struct vm_fault___2 *);
-	int (*access)(struct vm_area_struct___2 *, long unsigned int, void *, int, int);
-	const char * (*name)(struct vm_area_struct___2 *);
-	int (*set_policy)(struct vm_area_struct___2 *, struct mempolicy *);
-	struct mempolicy * (*get_policy)(struct vm_area_struct___2 *, long unsigned int);
-	struct page___2 * (*find_special_page)(struct vm_area_struct___2 *, long unsigned int);
-};
-
-struct core_thread___2 {
-	struct task_struct___2 *task;
-	struct core_thread___2 *next;
-};
-
-struct core_state___2 {
-	atomic_t nr_threads;
-	struct core_thread___2 dumper;
-	struct completion startup;
-};
-
-struct vm_fault___2 {
-	struct vm_area_struct___2 *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
-	pmd_t *pmd;
-	pud_t *pud;
-	pte_t orig_pte;
-	struct page___2 *cow_page;
-	struct mem_cgroup *memcg;
-	struct page___2 *page;
-	pte_t *pte;
-	spinlock_t *ptl;
-	pgtable_t___2 prealloc_pte;
-};
-
-struct pglist_data___2;
-
-struct zone___2 {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[4];
-	int node;
-	struct pglist_data___2 *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[11];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	short: 16;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct zoneref___2 {
-	struct zone___2 *zone;
-	int zone_idx;
-};
-
-struct zonelist___2 {
-	struct zoneref___2 _zonerefs[257];
-};
-
-struct pglist_data___2 {
-	struct zone___2 node_zones[4];
-	struct zonelist___2 node_zonelists[2];
-	int nr_zones;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct___2 *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_classzone_idx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_classzone_idx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct___2 *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[32];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct fwnode_operations___2;
-
-struct device___2;
-
-struct fwnode_handle___2 {
-	struct fwnode_handle___2 *secondary;
-	const struct fwnode_operations___2 *ops;
-	struct device___2 *dev;
-};
-
-struct fwnode_reference_args___2;
-
-struct fwnode_endpoint___2;
-
-struct fwnode_operations___2 {
-	struct fwnode_handle___2 * (*get)(struct fwnode_handle___2 *);
-	void (*put)(struct fwnode_handle___2 *);
-	bool (*device_is_available)(const struct fwnode_handle___2 *);
-	const void * (*device_get_match_data)(const struct fwnode_handle___2 *, const struct device___2 *);
-	bool (*property_present)(const struct fwnode_handle___2 *, const char *);
-	int (*property_read_int_array)(const struct fwnode_handle___2 *, const char *, unsigned int, void *, size_t);
-	int (*property_read_string_array)(const struct fwnode_handle___2 *, const char *, const char **, size_t);
-	const char * (*get_name)(const struct fwnode_handle___2 *);
-	const char * (*get_name_prefix)(const struct fwnode_handle___2 *);
-	struct fwnode_handle___2 * (*get_parent)(const struct fwnode_handle___2 *);
-	struct fwnode_handle___2 * (*get_next_child_node)(const struct fwnode_handle___2 *, struct fwnode_handle___2 *);
-	struct fwnode_handle___2 * (*get_named_child_node)(const struct fwnode_handle___2 *, const char *);
-	int (*get_reference_args)(const struct fwnode_handle___2 *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args___2 *);
-	struct fwnode_handle___2 * (*graph_get_next_endpoint)(const struct fwnode_handle___2 *, struct fwnode_handle___2 *);
-	struct fwnode_handle___2 * (*graph_get_remote_endpoint)(const struct fwnode_handle___2 *);
-	struct fwnode_handle___2 * (*graph_get_port_parent)(struct fwnode_handle___2 *);
-	int (*graph_parse_endpoint)(const struct fwnode_handle___2 *, struct fwnode_endpoint___2 *);
-	int (*add_links)(const struct fwnode_handle___2 *, struct device___2 *);
-};
-
-struct kset___2;
-
-struct kobj_type___2;
-
-struct kernfs_node___2;
-
-struct kobject___2 {
-	const char *name;
-	struct list_head entry;
-	struct kobject___2 *parent;
-	struct kset___2 *kset;
-	struct kobj_type___2 *ktype;
-	struct kernfs_node___2 *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-struct wakeup_source___2;
-
-struct dev_pm_info___2 {
-	pm_message_t power_state;
-	unsigned int can_wakeup: 1;
-	unsigned int async_suspend: 1;
-	bool in_dpm_list: 1;
-	bool is_prepared: 1;
-	bool is_suspended: 1;
-	bool is_noirq_suspended: 1;
-	bool is_late_suspended: 1;
-	bool no_pm: 1;
-	bool early_init: 1;
-	bool direct_complete: 1;
-	u32 driver_flags;
-	spinlock_t lock;
-	struct list_head entry;
-	struct completion completion;
-	struct wakeup_source___2 *wakeup;
-	bool wakeup_path: 1;
-	bool syscore: 1;
-	bool no_pm_callbacks: 1;
-	unsigned int must_resume: 1;
-	unsigned int may_skip_resume: 1;
-	struct hrtimer suspend_timer;
-	long unsigned int timer_expires;
-	struct work_struct work;
-	wait_queue_head_t wait_queue;
-	struct wake_irq *wakeirq;
-	atomic_t usage_count;
-	atomic_t child_count;
-	unsigned int disable_depth: 3;
-	unsigned int idle_notification: 1;
-	unsigned int request_pending: 1;
-	unsigned int deferred_resume: 1;
-	unsigned int runtime_auto: 1;
-	bool ignore_children: 1;
-	unsigned int no_callbacks: 1;
-	unsigned int irq_safe: 1;
-	unsigned int use_autosuspend: 1;
-	unsigned int timer_autosuspends: 1;
-	unsigned int memalloc_noio: 1;
-	unsigned int links_count;
-	enum rpm_request request;
-	enum rpm_status runtime_status;
-	int runtime_error;
-	int autosuspend_delay;
-	u64 last_busy;
-	u64 active_time;
-	u64 suspended_time;
-	u64 accounting_timestamp;
-	struct pm_subsys_data *subsys_data;
-	void (*set_latency_tolerance)(struct device___2 *, s32);
-	struct dev_pm_qos *qos;
-};
-
-struct device_type___2;
-
-struct bus_type___2;
-
-struct device_driver___2;
-
-struct dev_pm_domain___2;
-
-struct dma_map_ops___2;
-
-struct device_node___2;
-
-struct class___2;
-
-struct attribute_group___2;
-
-struct device___2 {
-	struct kobject___2 kobj;
-	struct device___2 *parent;
-	struct device_private *p;
-	const char *init_name;
-	const struct device_type___2 *type;
-	struct bus_type___2 *bus;
-	struct device_driver___2 *driver;
-	void *platform_data;
-	void *driver_data;
-	struct mutex mutex;
-	struct dev_links_info links;
-	struct dev_pm_info___2 power;
-	struct dev_pm_domain___2 *pm_domain;
-	struct irq_domain *msi_domain;
-	struct list_head msi_list;
-	const struct dma_map_ops___2 *dma_ops;
-	u64 *dma_mask;
-	u64 coherent_dma_mask;
-	u64 bus_dma_limit;
-	long unsigned int dma_pfn_offset;
-	struct device_dma_parameters *dma_parms;
-	struct list_head dma_pools;
-	struct dev_archdata archdata;
-	struct device_node___2 *of_node;
-	struct fwnode_handle___2 *fwnode;
-	int numa_node;
-	dev_t devt;
-	u32 id;
-	spinlock_t devres_lock;
-	struct list_head devres_head;
-	struct class___2 *class;
-	const struct attribute_group___2 **groups;
-	void (*release)(struct device___2 *);
-	struct iommu_group *iommu_group;
-	struct iommu_fwspec *iommu_fwspec;
-	struct iommu_param *iommu_param;
-	bool offline_disabled: 1;
-	bool offline: 1;
-	bool of_node_reused: 1;
-	bool state_synced: 1;
-};
-
-struct fwnode_endpoint___2 {
-	unsigned int port;
-	unsigned int id;
-	const struct fwnode_handle___2 *local_fwnode;
-};
-
-struct fwnode_reference_args___2 {
-	struct fwnode_handle___2 *fwnode;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct vm_struct___2 {
-	struct vm_struct___2 *next;
-	void *addr;
-	long unsigned int size;
-	long unsigned int flags;
-	struct page___2 **pages;
-	unsigned int nr_pages;
-	phys_addr_t phys_addr;
-	const void *caller;
-};
-
-struct smp_ops___2 {
-	void (*smp_prepare_boot_cpu)();
-	void (*smp_prepare_cpus)(unsigned int);
-	void (*smp_cpus_done)(unsigned int);
-	void (*stop_other_cpus)(int);
-	void (*crash_stop_other_cpus)();
-	void (*smp_send_reschedule)(int);
-	int (*cpu_up)(unsigned int, struct task_struct___2 *);
-	int (*cpu_disable)();
-	void (*cpu_die)(unsigned int);
-	void (*play_dead)();
-	void (*send_call_func_ipi)(const struct cpumask *);
-	void (*send_call_func_single_ipi)(int);
-};
-
-struct upid___2 {
-	int nr;
-	struct pid_namespace___2 *ns;
-};
-
-struct pid_namespace___2 {
-	struct kref kref;
-	struct idr idr;
-	struct callback_head rcu;
-	unsigned int pid_allocated;
-	struct task_struct___2 *child_reaper;
-	struct kmem_cache *pid_cachep;
-	unsigned int level;
-	struct pid_namespace___2 *parent;
-	struct vfsmount___2 *proc_mnt;
-	struct dentry___2 *proc_self;
-	struct dentry___2 *proc_thread_self;
-	struct fs_pin *bacct;
-	struct user_namespace___2 *user_ns;
-	struct ucounts___2 *ucounts;
-	struct work_struct proc_work;
-	kgid_t pid_gid;
-	int hide_pid;
-	int reboot;
-	struct ns_common___2 ns;
-};
-
-struct pid___2 {
-	refcount_t count;
-	unsigned int level;
-	struct hlist_head tasks[4];
-	wait_queue_head_t wait_pidfd;
-	struct callback_head rcu;
-	struct upid___2 numbers[1];
-};
-
-struct signal_struct___2 {
-	refcount_t sigcnt;
-	atomic_t live;
-	int nr_threads;
-	struct list_head thread_head;
-	wait_queue_head_t wait_chldexit;
-	struct task_struct___2 *curr_target;
-	struct sigpending shared_pending;
-	struct hlist_head multiprocess;
-	int group_exit_code;
-	int notify_count;
-	struct task_struct___2 *group_exit_task;
-	int group_stop_count;
-	unsigned int flags;
-	unsigned int is_child_subreaper: 1;
-	unsigned int has_child_subreaper: 1;
-	int posix_timer_id;
-	struct list_head posix_timers;
-	struct hrtimer real_timer;
-	ktime_t it_real_incr;
-	struct cpu_itimer it[2];
-	struct thread_group_cputimer cputimer;
-	struct posix_cputimers posix_cputimers;
-	struct pid___2 *pids[4];
-	struct pid___2 *tty_old_pgrp;
-	int leader;
-	struct tty_struct *tty;
-	seqlock_t stats_lock;
-	u64 utime;
-	u64 stime;
-	u64 cutime;
-	u64 cstime;
-	u64 gtime;
-	u64 cgtime;
-	struct prev_cputime prev_cputime;
-	long unsigned int nvcsw;
-	long unsigned int nivcsw;
-	long unsigned int cnvcsw;
-	long unsigned int cnivcsw;
-	long unsigned int min_flt;
-	long unsigned int maj_flt;
-	long unsigned int cmin_flt;
-	long unsigned int cmaj_flt;
-	long unsigned int inblock;
-	long unsigned int oublock;
-	long unsigned int cinblock;
-	long unsigned int coublock;
-	long unsigned int maxrss;
-	long unsigned int cmaxrss;
-	struct task_io_accounting ioac;
-	long long unsigned int sum_sched_runtime;
-	struct rlimit rlim[16];
-	struct pacct_struct pacct;
-	struct taskstats *stats;
-	unsigned int audit_tty;
-	struct tty_audit_buf *tty_audit_buf;
-	bool oom_flag_origin;
-	short int oom_score_adj;
-	short int oom_score_adj_min;
-	struct mm_struct___2 *oom_mm;
-	struct mutex cred_guard_mutex;
-};
-
-struct cred___2 {
-	atomic_t usage;
-	kuid_t uid;
-	kgid_t gid;
-	kuid_t suid;
-	kgid_t sgid;
-	kuid_t euid;
-	kgid_t egid;
-	kuid_t fsuid;
-	kgid_t fsgid;
-	unsigned int securebits;
-	kernel_cap_t cap_inheritable;
-	kernel_cap_t cap_permitted;
-	kernel_cap_t cap_effective;
-	kernel_cap_t cap_bset;
-	kernel_cap_t cap_ambient;
-	unsigned char jit_keyring;
-	struct key *session_keyring;
-	struct key *process_keyring;
-	struct key *thread_keyring;
-	struct key *request_key_auth;
-	void *security;
-	struct user_struct *user;
-	struct user_namespace___2 *user_ns;
-	struct group_info *group_info;
-	union {
-		int non_rcu;
-		struct callback_head rcu;
-	};
-};
-
-struct net___2;
-
-struct cgroup_namespace___2;
-
-struct nsproxy___2 {
-	atomic_t count;
-	struct uts_namespace *uts_ns;
-	struct ipc_namespace *ipc_ns;
-	struct mnt_namespace *mnt_ns;
-	struct pid_namespace___2 *pid_ns_for_children;
-	struct net___2 *net_ns;
-	struct cgroup_namespace___2 *cgroup_ns;
-};
-
-struct cgroup_subsys_state___2;
-
-struct cgroup___2;
-
-struct css_set___2 {
-	struct cgroup_subsys_state___2 *subsys[4];
-	refcount_t refcount;
-	struct css_set___2 *dom_cset;
-	struct cgroup___2 *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[4];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup___2 *mg_src_cgrp;
-	struct cgroup___2 *mg_dst_cgrp;
-	struct css_set___2 *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
-};
-
-struct perf_event_context___2 {
-	struct pmu___2 *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct___2 *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context___2 *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct pipe_buffer___2;
-
-struct pipe_inode_info___2 {
-	struct mutex mutex;
-	wait_queue_head_t wait;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int max_usage;
-	unsigned int ring_size;
-	unsigned int readers;
-	unsigned int writers;
-	unsigned int files;
-	unsigned int r_counter;
-	unsigned int w_counter;
-	struct page___2 *tmp_page;
-	struct fasync_struct___2 *fasync_readers;
-	struct fasync_struct___2 *fasync_writers;
-	struct pipe_buffer___2 *bufs;
-	struct user_struct *user;
-};
-
-union thread_union___2 {
-	struct task_struct___2 task;
-	long unsigned int stack[2048];
-};
-
-struct kiocb___2 {
-	struct file___2 *ki_filp;
-	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb___2 *, long int, long int);
-	void *private;
-	int ki_flags;
-	u16 ki_hint;
-	u16 ki_ioprio;
-	unsigned int ki_cookie;
-};
-
-struct iattr___2 {
-	unsigned int ia_valid;
-	umode_t ia_mode;
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	loff_t ia_size;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct file___2 *ia_file;
-};
-
-struct dquot___2 {
-	struct hlist_node dq_hash;
-	struct list_head dq_inuse;
-	struct list_head dq_free;
-	struct list_head dq_dirty;
-	struct mutex dq_lock;
-	spinlock_t dq_dqb_lock;
-	atomic_t dq_count;
-	struct super_block___2 *dq_sb;
-	struct kqid dq_id;
-	loff_t dq_off;
-	long unsigned int dq_flags;
-	struct mem_dqblk dq_dqb;
-};
-
-struct quota_format_type___2 {
-	int qf_fmt_id;
-	const struct quota_format_ops___2 *qf_ops;
-	struct module___2 *qf_owner;
-	struct quota_format_type___2 *qf_next;
-};
-
-struct quota_format_ops___2 {
-	int (*check_quota_file)(struct super_block___2 *, int);
-	int (*read_file_info)(struct super_block___2 *, int);
-	int (*write_file_info)(struct super_block___2 *, int);
-	int (*free_file_info)(struct super_block___2 *, int);
-	int (*read_dqblk)(struct dquot___2 *);
-	int (*commit_dqblk)(struct dquot___2 *);
-	int (*release_dqblk)(struct dquot___2 *);
-	int (*get_next_id)(struct super_block___2 *, struct kqid *);
-};
-
-struct dquot_operations___2 {
-	int (*write_dquot)(struct dquot___2 *);
-	struct dquot___2 * (*alloc_dquot)(struct super_block___2 *, int);
-	void (*destroy_dquot)(struct dquot___2 *);
-	int (*acquire_dquot)(struct dquot___2 *);
-	int (*release_dquot)(struct dquot___2 *);
-	int (*mark_dirty)(struct dquot___2 *);
-	int (*write_info)(struct super_block___2 *, int);
-	qsize_t * (*get_reserved_space)(struct inode___2 *);
-	int (*get_projid)(struct inode___2 *, kprojid_t *);
-	int (*get_inode_usage)(struct inode___2 *, qsize_t *);
-	int (*get_next_id)(struct super_block___2 *, struct kqid *);
-};
-
-struct quotactl_ops___2 {
-	int (*quota_on)(struct super_block___2 *, int, int, const struct path___2 *);
-	int (*quota_off)(struct super_block___2 *, int);
-	int (*quota_enable)(struct super_block___2 *, unsigned int);
-	int (*quota_disable)(struct super_block___2 *, unsigned int);
-	int (*quota_sync)(struct super_block___2 *, int);
-	int (*set_info)(struct super_block___2 *, int, struct qc_info *);
-	int (*get_dqblk)(struct super_block___2 *, struct kqid, struct qc_dqblk *);
-	int (*get_nextdqblk)(struct super_block___2 *, struct kqid *, struct qc_dqblk *);
-	int (*set_dqblk)(struct super_block___2 *, struct kqid, struct qc_dqblk *);
-	int (*get_state)(struct super_block___2 *, struct qc_state *);
-	int (*rm_xquota)(struct super_block___2 *, unsigned int);
-};
-
-struct module_kobject___2 {
-	struct kobject___2 kobj;
-	struct module___2 *mod;
-	struct kobject___2 *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct mod_tree_node___2 {
-	struct module___2 *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout___2 {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node___2 mtn;
-};
-
-struct module_attribute___2;
-
-struct kernel_param___2;
-
-struct module___2 {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject___2 mkobj;
-	struct module_attribute___2 *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject___2 *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param___2 *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout___2 core_layout;
-	struct module_layout___2 init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call___2 **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct address_space_operations___2 {
-	int (*writepage)(struct page___2 *, struct writeback_control *);
-	int (*readpage)(struct file___2 *, struct page___2 *);
-	int (*writepages)(struct address_space___2 *, struct writeback_control *);
-	int (*set_page_dirty)(struct page___2 *);
-	int (*readpages)(struct file___2 *, struct address_space___2 *, struct list_head *, unsigned int);
-	int (*write_begin)(struct file___2 *, struct address_space___2 *, loff_t, unsigned int, unsigned int, struct page___2 **, void **);
-	int (*write_end)(struct file___2 *, struct address_space___2 *, loff_t, unsigned int, unsigned int, struct page___2 *, void *);
-	sector_t (*bmap)(struct address_space___2 *, sector_t);
-	void (*invalidatepage)(struct page___2 *, unsigned int, unsigned int);
-	int (*releasepage)(struct page___2 *, gfp_t);
-	void (*freepage)(struct page___2 *);
-	ssize_t (*direct_IO)(struct kiocb___2 *, struct iov_iter___2 *);
-	int (*migratepage)(struct address_space___2 *, struct page___2 *, struct page___2 *, enum migrate_mode);
-	bool (*isolate_page)(struct page___2 *, isolate_mode_t);
-	void (*putback_page)(struct page___2 *);
-	int (*launder_page)(struct page___2 *);
-	int (*is_partially_uptodate)(struct page___2 *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page___2 *, bool *, bool *);
-	int (*error_remove_page)(struct address_space___2 *, struct page___2 *);
-	int (*swap_activate)(struct swap_info_struct *, struct file___2 *, sector_t *);
-	void (*swap_deactivate)(struct file___2 *);
-};
-
-struct bio_vec___2;
-
-struct iov_iter___2 {
-	unsigned int type;
-	size_t iov_offset;
-	size_t count;
-	union {
-		const struct iovec *iov;
-		const struct kvec *kvec;
-		const struct bio_vec___2 *bvec;
-		struct pipe_inode_info___2 *pipe;
-	};
-	union {
-		long unsigned int nr_segs;
-		struct {
-			unsigned int head;
-			unsigned int start_head;
-		};
-	};
-};
-
-struct block_device___2 {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode___2 *bd_inode;
-	struct super_block___2 *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device___2 *bd_contains;
-	unsigned int bd_block_size;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	int bd_invalidated;
-	struct gendisk *bd_disk;
-	struct request_queue *bd_queue;
-	struct backing_dev_info *bd_bdi;
-	struct list_head bd_list;
-	long unsigned int bd_private;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct inode_operations___2 {
-	struct dentry___2 * (*lookup)(struct inode___2 *, struct dentry___2 *, unsigned int);
-	const char * (*get_link)(struct dentry___2 *, struct inode___2 *, struct delayed_call *);
-	int (*permission)(struct inode___2 *, int);
-	struct posix_acl * (*get_acl)(struct inode___2 *, int);
-	int (*readlink)(struct dentry___2 *, char *, int);
-	int (*create)(struct inode___2 *, struct dentry___2 *, umode_t, bool);
-	int (*link)(struct dentry___2 *, struct inode___2 *, struct dentry___2 *);
-	int (*unlink)(struct inode___2 *, struct dentry___2 *);
-	int (*symlink)(struct inode___2 *, struct dentry___2 *, const char *);
-	int (*mkdir)(struct inode___2 *, struct dentry___2 *, umode_t);
-	int (*rmdir)(struct inode___2 *, struct dentry___2 *);
-	int (*mknod)(struct inode___2 *, struct dentry___2 *, umode_t, dev_t);
-	int (*rename)(struct inode___2 *, struct dentry___2 *, struct inode___2 *, struct dentry___2 *, unsigned int);
-	int (*setattr)(struct dentry___2 *, struct iattr___2 *);
-	int (*getattr)(const struct path___2 *, struct kstat *, u32, unsigned int);
-	ssize_t (*listxattr)(struct dentry___2 *, char *, size_t);
-	int (*fiemap)(struct inode___2 *, struct fiemap_extent_info *, u64, u64);
-	int (*update_time)(struct inode___2 *, struct timespec64 *, int);
-	int (*atomic_open)(struct inode___2 *, struct dentry___2 *, struct file___2 *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode___2 *, struct dentry___2 *, umode_t);
-	int (*set_acl)(struct inode___2 *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct file_lock_operations___2 {
-	void (*fl_copy_lock)(struct file_lock___2 *, struct file_lock___2 *);
-	void (*fl_release_private)(struct file_lock___2 *);
-};
-
-struct lock_manager_operations___2;
-
-struct file_lock___2 {
-	struct file_lock___2 *fl_blocker;
-	struct list_head fl_list;
-	struct hlist_node fl_link;
-	struct list_head fl_blocked_requests;
-	struct list_head fl_blocked_member;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	unsigned int fl_pid;
-	int fl_link_cpu;
-	wait_queue_head_t fl_wait;
-	struct file___2 *fl_file;
-	loff_t fl_start;
-	loff_t fl_end;
-	struct fasync_struct___2 *fl_fasync;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	const struct file_lock_operations___2 *fl_ops;
-	const struct lock_manager_operations___2 *fl_lmops;
-	union {
-		struct nfs_lock_info nfs_fl;
-		struct nfs4_lock_info nfs4_fl;
-		struct {
-			struct list_head link;
-			int state;
-			unsigned int debug_id;
-		} afs;
-	} fl_u;
-};
-
-struct lock_manager_operations___2 {
-	fl_owner_t (*lm_get_owner)(fl_owner_t);
-	void (*lm_put_owner)(fl_owner_t);
-	void (*lm_notify)(struct file_lock___2 *);
-	int (*lm_grant)(struct file_lock___2 *, int);
-	bool (*lm_break)(struct file_lock___2 *);
-	int (*lm_change)(struct file_lock___2 *, int, struct list_head *);
-	void (*lm_setup)(struct file_lock___2 *, void **);
-};
-
-struct fasync_struct___2 {
-	rwlock_t fa_lock;
-	int magic;
-	int fa_fd;
-	struct fasync_struct___2 *fa_next;
-	struct file___2 *fa_file;
-	struct callback_head fa_rcu;
-};
-
-struct super_operations___2 {
-	struct inode___2 * (*alloc_inode)(struct super_block___2 *);
-	void (*destroy_inode)(struct inode___2 *);
-	void (*free_inode)(struct inode___2 *);
-	void (*dirty_inode)(struct inode___2 *, int);
-	int (*write_inode)(struct inode___2 *, struct writeback_control *);
-	int (*drop_inode)(struct inode___2 *);
-	void (*evict_inode)(struct inode___2 *);
-	void (*put_super)(struct super_block___2 *);
-	int (*sync_fs)(struct super_block___2 *, int);
-	int (*freeze_super)(struct super_block___2 *);
-	int (*freeze_fs)(struct super_block___2 *);
-	int (*thaw_super)(struct super_block___2 *);
-	int (*unfreeze_fs)(struct super_block___2 *);
-	int (*statfs)(struct dentry___2 *, struct kstatfs *);
-	int (*remount_fs)(struct super_block___2 *, int *, char *);
-	void (*umount_begin)(struct super_block___2 *);
-	int (*show_options)(struct seq_file___2 *, struct dentry___2 *);
-	int (*show_devname)(struct seq_file___2 *, struct dentry___2 *);
-	int (*show_path)(struct seq_file___2 *, struct dentry___2 *);
-	int (*show_stats)(struct seq_file___2 *, struct dentry___2 *);
-	ssize_t (*quota_read)(struct super_block___2 *, int, char *, size_t, loff_t);
-	ssize_t (*quota_write)(struct super_block___2 *, int, const char *, size_t, loff_t);
-	struct dquot___2 ** (*get_dquots)(struct inode___2 *);
-	int (*bdev_try_to_free_page)(struct super_block___2 *, struct page___2 *, gfp_t);
-	long int (*nr_cached_objects)(struct super_block___2 *, struct shrink_control *);
-	long int (*free_cached_objects)(struct super_block___2 *, struct shrink_control *);
-};
-
-typedef void (*poll_queue_proc___2)(struct file___2 *, wait_queue_head_t *, struct poll_table_struct___2 *);
-
-struct poll_table_struct___2 {
-	poll_queue_proc___2 _qproc;
-	__poll_t _key;
-};
-
-struct seq_file___2 {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	u64 version;
-	struct mutex lock;
-	const struct seq_operations *op;
-	int poll_event;
-	const struct file___2 *file;
-	void *private;
-};
-
-struct dev_pagemap_ops___2 {
-	void (*page_free)(struct page___2 *);
-	void (*kill)(struct dev_pagemap___2 *);
-	void (*cleanup)(struct dev_pagemap___2 *);
-	vm_fault_t (*migrate_to_ram)(struct vm_fault___2 *);
-};
-
-struct kobj_attribute___3 {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject___2 *, struct kobj_attribute___3 *, char *);
-	ssize_t (*store)(struct kobject___2 *, struct kobj_attribute___3 *, const char *, size_t);
-};
-
-typedef void compound_page_dtor___2(struct page___2 *);
-
-struct kernfs_root___2;
-
-struct kernfs_elem_dir___2 {
-	long unsigned int subdirs;
-	struct rb_root children;
-	struct kernfs_root___2 *root;
-};
-
-struct kernfs_syscall_ops___2;
-
-struct kernfs_root___2 {
-	struct kernfs_node___2 *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops___2 *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
-};
-
-struct kernfs_elem_symlink___2 {
-	struct kernfs_node___2 *target_kn;
-};
-
-struct kernfs_ops___2;
-
-struct kernfs_elem_attr___2 {
-	const struct kernfs_ops___2 *ops;
-	struct kernfs_open_node *open;
-	loff_t size;
-	struct kernfs_node___2 *notify_next;
-};
-
-struct kernfs_node___2 {
-	atomic_t count;
-	atomic_t active;
-	struct kernfs_node___2 *parent;
-	const char *name;
-	struct rb_node rb;
-	const void *ns;
-	unsigned int hash;
-	union {
-		struct kernfs_elem_dir___2 dir;
-		struct kernfs_elem_symlink___2 symlink;
-		struct kernfs_elem_attr___2 attr;
-	};
-	void *priv;
-	u64 id;
-	short unsigned int flags;
-	umode_t mode;
-	struct kernfs_iattrs *iattr;
-};
-
-struct kernfs_open_file___2;
-
-struct kernfs_ops___2 {
-	int (*open)(struct kernfs_open_file___2 *);
-	void (*release)(struct kernfs_open_file___2 *);
-	int (*seq_show)(struct seq_file___2 *, void *);
-	void * (*seq_start)(struct seq_file___2 *, loff_t *);
-	void * (*seq_next)(struct seq_file___2 *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file___2 *, void *);
-	ssize_t (*read)(struct kernfs_open_file___2 *, char *, size_t, loff_t);
-	size_t atomic_write_len;
-	bool prealloc;
-	ssize_t (*write)(struct kernfs_open_file___2 *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file___2 *, struct poll_table_struct___2 *);
-	int (*mmap)(struct kernfs_open_file___2 *, struct vm_area_struct___2 *);
-};
-
-struct kernfs_syscall_ops___2 {
-	int (*show_options)(struct seq_file___2 *, struct kernfs_root___2 *);
-	int (*mkdir)(struct kernfs_node___2 *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node___2 *);
-	int (*rename)(struct kernfs_node___2 *, struct kernfs_node___2 *, const char *);
-	int (*show_path)(struct seq_file___2 *, struct kernfs_node___2 *, struct kernfs_root___2 *);
-};
-
-struct kernfs_open_file___2 {
-	struct kernfs_node___2 *kn;
-	struct file___2 *file;
-	struct seq_file___2 *seq_file;
-	void *priv;
-	struct mutex mutex;
-	struct mutex prealloc_mutex;
-	int event;
-	struct list_head list;
-	char *prealloc_buf;
-	size_t atomic_write_len;
-	bool mmapped: 1;
-	bool released: 1;
-	const struct vm_operations_struct___2 *vm_ops;
-};
-
-struct bin_attribute___2;
-
-struct attribute_group___2 {
-	const char *name;
-	umode_t (*is_visible)(struct kobject___2 *, struct attribute *, int);
-	umode_t (*is_bin_visible)(struct kobject___2 *, struct bin_attribute___2 *, int);
-	struct attribute **attrs;
-	struct bin_attribute___2 **bin_attrs;
-};
-
-struct bin_attribute___2 {
-	struct attribute attr;
-	size_t size;
-	void *private;
-	ssize_t (*read)(struct file___2 *, struct kobject___2 *, struct bin_attribute___2 *, char *, loff_t, size_t);
-	ssize_t (*write)(struct file___2 *, struct kobject___2 *, struct bin_attribute___2 *, char *, loff_t, size_t);
-	int (*mmap)(struct file___2 *, struct kobject___2 *, struct bin_attribute___2 *, struct vm_area_struct___2 *);
-};
-
-struct sysfs_ops___2 {
-	ssize_t (*show)(struct kobject___2 *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject___2 *, struct attribute *, const char *, size_t);
-};
-
-struct kset_uevent_ops___2;
-
-struct kset___2 {
-	struct list_head list;
-	spinlock_t list_lock;
-	struct kobject___2 kobj;
-	const struct kset_uevent_ops___2 *uevent_ops;
-};
-
-struct kobj_type___2 {
-	void (*release)(struct kobject___2 *);
-	const struct sysfs_ops___2 *sysfs_ops;
-	struct attribute **default_attrs;
-	const struct attribute_group___2 **default_groups;
-	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject___2 *);
-	const void * (*namespace)(struct kobject___2 *);
-	void (*get_ownership)(struct kobject___2 *, kuid_t *, kgid_t *);
-};
-
-struct kset_uevent_ops___2 {
-	int (* const filter)(struct kset___2 *, struct kobject___2 *);
-	const char * (* const name)(struct kset___2 *, struct kobject___2 *);
-	int (* const uevent)(struct kset___2 *, struct kobject___2 *, struct kobj_uevent_env *);
-};
-
-struct dev_pm_ops___2 {
-	int (*prepare)(struct device___2 *);
-	void (*complete)(struct device___2 *);
-	int (*suspend)(struct device___2 *);
-	int (*resume)(struct device___2 *);
-	int (*freeze)(struct device___2 *);
-	int (*thaw)(struct device___2 *);
-	int (*poweroff)(struct device___2 *);
-	int (*restore)(struct device___2 *);
-	int (*suspend_late)(struct device___2 *);
-	int (*resume_early)(struct device___2 *);
-	int (*freeze_late)(struct device___2 *);
-	int (*thaw_early)(struct device___2 *);
-	int (*poweroff_late)(struct device___2 *);
-	int (*restore_early)(struct device___2 *);
-	int (*suspend_noirq)(struct device___2 *);
-	int (*resume_noirq)(struct device___2 *);
-	int (*freeze_noirq)(struct device___2 *);
-	int (*thaw_noirq)(struct device___2 *);
-	int (*poweroff_noirq)(struct device___2 *);
-	int (*restore_noirq)(struct device___2 *);
-	int (*runtime_suspend)(struct device___2 *);
-	int (*runtime_resume)(struct device___2 *);
-	int (*runtime_idle)(struct device___2 *);
-};
-
-struct wakeup_source___2 {
-	const char *name;
-	int id;
-	struct list_head entry;
-	spinlock_t lock;
-	struct wake_irq *wakeirq;
-	struct timer_list timer;
-	long unsigned int timer_expires;
-	ktime_t total_time;
-	ktime_t max_time;
-	ktime_t last_time;
-	ktime_t start_prevent_time;
-	ktime_t prevent_sleep_time;
-	long unsigned int event_count;
-	long unsigned int active_count;
-	long unsigned int relax_count;
-	long unsigned int expire_count;
-	long unsigned int wakeup_count;
-	struct device___2 *dev;
-	bool active: 1;
-	bool autosleep_enabled: 1;
-};
-
-struct dev_pm_domain___2 {
-	struct dev_pm_ops___2 ops;
-	int (*start)(struct device___2 *);
-	void (*detach)(struct device___2 *, bool);
-	int (*activate)(struct device___2 *);
-	void (*sync)(struct device___2 *);
-	void (*dismiss)(struct device___2 *);
-};
-
-struct bus_type___2 {
-	const char *name;
-	const char *dev_name;
-	struct device___2 *dev_root;
-	const struct attribute_group___2 **bus_groups;
-	const struct attribute_group___2 **dev_groups;
-	const struct attribute_group___2 **drv_groups;
-	int (*match)(struct device___2 *, struct device_driver___2 *);
-	int (*uevent)(struct device___2 *, struct kobj_uevent_env *);
-	int (*probe)(struct device___2 *);
-	void (*sync_state)(struct device___2 *);
-	int (*remove)(struct device___2 *);
-	void (*shutdown)(struct device___2 *);
-	int (*online)(struct device___2 *);
-	int (*offline)(struct device___2 *);
-	int (*suspend)(struct device___2 *, pm_message_t);
-	int (*resume)(struct device___2 *);
-	int (*num_vf)(struct device___2 *);
-	int (*dma_configure)(struct device___2 *);
-	const struct dev_pm_ops___2 *pm;
-	const struct iommu_ops *iommu_ops;
-	struct subsys_private *p;
-	struct lock_class_key lock_key;
-	bool need_parent_lock;
-};
-
-struct device_driver___2 {
-	const char *name;
-	struct bus_type___2 *bus;
-	struct module___2 *owner;
-	const char *mod_name;
-	bool suppress_bind_attrs;
-	enum probe_type probe_type;
-	const struct of_device_id *of_match_table;
-	const struct acpi_device_id *acpi_match_table;
-	int (*probe)(struct device___2 *);
-	void (*sync_state)(struct device___2 *);
-	int (*remove)(struct device___2 *);
-	void (*shutdown)(struct device___2 *);
-	int (*suspend)(struct device___2 *, pm_message_t);
-	int (*resume)(struct device___2 *);
-	const struct attribute_group___2 **groups;
-	const struct attribute_group___2 **dev_groups;
-	const struct dev_pm_ops___2 *pm;
-	void (*coredump)(struct device___2 *);
-	struct driver_private *p;
-};
-
-struct device_type___2 {
-	const char *name;
-	const struct attribute_group___2 **groups;
-	int (*uevent)(struct device___2 *, struct kobj_uevent_env *);
-	char * (*devnode)(struct device___2 *, umode_t *, kuid_t *, kgid_t *);
-	void (*release)(struct device___2 *);
-	const struct dev_pm_ops___2 *pm;
-};
-
-struct class___2 {
-	const char *name;
-	struct module___2 *owner;
-	const struct attribute_group___2 **class_groups;
-	const struct attribute_group___2 **dev_groups;
-	struct kobject___2 *dev_kobj;
-	int (*dev_uevent)(struct device___2 *, struct kobj_uevent_env *);
-	char * (*devnode)(struct device___2 *, umode_t *);
-	void (*class_release)(struct class___2 *);
-	void (*dev_release)(struct device___2 *);
-	int (*shutdown_pre)(struct device___2 *);
-	const struct kobj_ns_type_operations *ns_type;
-	const void * (*namespace)(struct device___2 *);
-	void (*get_ownership)(struct device___2 *, kuid_t *, kgid_t *);
-	const struct dev_pm_ops___2 *pm;
-	struct subsys_private *p;
-};
-
-struct device_attribute___2 {
-	struct attribute attr;
-	ssize_t (*show)(struct device___2 *, struct device_attribute___2 *, char *);
-	ssize_t (*store)(struct device___2 *, struct device_attribute___2 *, const char *, size_t);
-};
-
-struct dma_map_ops___2 {
-	void * (*alloc)(struct device___2 *, size_t, dma_addr_t *, gfp_t, long unsigned int);
-	void (*free)(struct device___2 *, size_t, void *, dma_addr_t, long unsigned int);
-	int (*mmap)(struct device___2 *, struct vm_area_struct___2 *, void *, dma_addr_t, size_t, long unsigned int);
-	int (*get_sgtable)(struct device___2 *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
-	dma_addr_t (*map_page)(struct device___2 *, struct page___2 *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_page)(struct device___2 *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	int (*map_sg)(struct device___2 *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	void (*unmap_sg)(struct device___2 *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);
-	dma_addr_t (*map_resource)(struct device___2 *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*unmap_resource)(struct device___2 *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);
-	void (*sync_single_for_cpu)(struct device___2 *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_single_for_device)(struct device___2 *, dma_addr_t, size_t, enum dma_data_direction);
-	void (*sync_sg_for_cpu)(struct device___2 *, struct scatterlist *, int, enum dma_data_direction);
-	void (*sync_sg_for_device)(struct device___2 *, struct scatterlist *, int, enum dma_data_direction);
-	void (*cache_sync)(struct device___2 *, void *, size_t, enum dma_data_direction);
-	int (*dma_supported)(struct device___2 *, u64);
-	u64 (*get_required_mask)(struct device___2 *);
-	size_t (*max_mapping_size)(struct device___2 *);
-	long unsigned int (*get_merge_boundary)(struct device___2 *);
-};
-
-struct device_node___2 {
-	const char *name;
-	phandle phandle;
-	const char *full_name;
-	struct fwnode_handle___2 fwnode;
-	struct property *properties;
-	struct property *deadprops;
-	struct device_node___2 *parent;
-	struct device_node___2 *child;
-	struct device_node___2 *sibling;
-	long unsigned int _flags;
-	void *data;
-};
-
-struct node___3 {
-	struct device___2 dev;
-	struct list_head access_list;
-};
-
-struct fd___2 {
-	struct file___2 *file;
-	unsigned int flags;
-};
-
-typedef struct poll_table_struct___2 poll_table___2;
-
-struct fqdir___2;
-
-struct netns_ipv4___2 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir___2 *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct mr_table *mrt;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-};
-
-struct net_device___2;
-
-struct sk_buff___2;
-
-struct dst_ops___2 {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops___2 *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device___2 *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff___2 *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff___2 *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff___2 *);
-	int (*local_out)(struct net___2 *, struct sock *, struct sk_buff___2 *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff___2 *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_ipv6___2 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir___2 *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops___2 ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
-	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_nf_frag___2 {
-	struct fqdir___2 *fqdir;
-};
-
-struct netns_xfrm___2 {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops___2 xfrm4_dst_ops;
-	struct dst_ops___2 xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net___2 {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace___2 *user_ns;
-	struct ucounts___2 *ucounts;
-	struct idr netns_ids;
-	struct ns_common___2 ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device___2 *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4___2 ipv4;
-	struct netns_ipv6___2 ipv6;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nf_frag___2 nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct net_generic *gen;
-	struct bpf_prog___2 *flow_dissector_prog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm___2 xfrm;
-	struct netns_xdp xdp;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-};
-
-struct cgroup_namespace___2 {
-	refcount_t count;
-	struct ns_common___2 ns;
-	struct user_namespace___2 *user_ns;
-	struct ucounts___2 *ucounts;
-	struct css_set___2 *root_cset;
-};
-
-struct proc_ns_operations___2 {
-	const char *name;
-	const char *real_ns_name;
-	int type;
-	struct ns_common___2 * (*get)(struct task_struct___2 *);
-	void (*put)(struct ns_common___2 *);
-	int (*install)(struct nsproxy___2 *, struct ns_common___2 *);
-	struct user_namespace___2 * (*owner)(struct ns_common___2 *);
-	struct ns_common___2 * (*get_parent)(struct ns_common___2 *);
-};
-
-struct ucounts___2 {
-	struct hlist_node node;
-	struct user_namespace___2 *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[9];
-};
-
-enum perf_event_read_format {
-	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
-	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
-	PERF_FORMAT_ID = 4,
-	PERF_FORMAT_GROUP = 8,
-	PERF_FORMAT_MAX = 16,
-};
-
-enum perf_event_ioc_flags {
-	PERF_IOC_FLAG_GROUP = 1,
-};
-
-struct perf_ns_link_info {
-	__u64 dev;
-	__u64 ino;
-};
-
-enum {
-	NET_NS_INDEX = 0,
-	UTS_NS_INDEX = 1,
-	IPC_NS_INDEX = 2,
-	PID_NS_INDEX = 3,
-	USER_NS_INDEX = 4,
-	MNT_NS_INDEX = 5,
-	CGROUP_NS_INDEX = 6,
-	NR_NAMESPACES = 7,
-};
-
-enum perf_event_type {
-	PERF_RECORD_MMAP = 1,
-	PERF_RECORD_LOST = 2,
-	PERF_RECORD_COMM = 3,
-	PERF_RECORD_EXIT = 4,
-	PERF_RECORD_THROTTLE = 5,
-	PERF_RECORD_UNTHROTTLE = 6,
-	PERF_RECORD_FORK = 7,
-	PERF_RECORD_READ = 8,
-	PERF_RECORD_SAMPLE = 9,
-	PERF_RECORD_MMAP2 = 10,
-	PERF_RECORD_AUX = 11,
-	PERF_RECORD_ITRACE_START = 12,
-	PERF_RECORD_LOST_SAMPLES = 13,
-	PERF_RECORD_SWITCH = 14,
-	PERF_RECORD_SWITCH_CPU_WIDE = 15,
-	PERF_RECORD_NAMESPACES = 16,
-	PERF_RECORD_KSYMBOL = 17,
-	PERF_RECORD_BPF_EVENT = 18,
-	PERF_RECORD_MAX = 19,
-};
-
-enum perf_record_ksymbol_type {
-	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
-	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
-	PERF_RECORD_KSYMBOL_TYPE_MAX = 2,
-};
-
-struct perf_cpu_context___2;
-
-struct perf_output_handle___2;
-
-struct pmu___2 {
-	struct list_head entry;
-	struct module___2 *module;
-	struct device___2 *dev;
-	const struct attribute_group___2 **attr_groups;
-	const struct attribute_group___2 **attr_update;
-	const char *name;
-	int type;
-	int capabilities;
-	int *pmu_disable_count;
-	struct perf_cpu_context___2 *pmu_cpu_context;
-	atomic_t exclusive_cnt;
-	int task_ctx_nr;
-	int hrtimer_interval_ms;
-	unsigned int nr_addr_filters;
-	void (*pmu_enable)(struct pmu___2 *);
-	void (*pmu_disable)(struct pmu___2 *);
-	int (*event_init)(struct perf_event___2 *);
-	void (*event_mapped)(struct perf_event___2 *, struct mm_struct___2 *);
-	void (*event_unmapped)(struct perf_event___2 *, struct mm_struct___2 *);
-	int (*add)(struct perf_event___2 *, int);
-	void (*del)(struct perf_event___2 *, int);
-	void (*start)(struct perf_event___2 *, int);
-	void (*stop)(struct perf_event___2 *, int);
-	void (*read)(struct perf_event___2 *);
-	void (*start_txn)(struct pmu___2 *, unsigned int);
-	int (*commit_txn)(struct pmu___2 *);
-	void (*cancel_txn)(struct pmu___2 *);
-	int (*event_idx)(struct perf_event___2 *);
-	void (*sched_task)(struct perf_event_context___2 *, bool);
-	size_t task_ctx_size;
-	void (*swap_task_ctx)(struct perf_event_context___2 *, struct perf_event_context___2 *);
-	void * (*setup_aux)(struct perf_event___2 *, void **, int, bool);
-	void (*free_aux)(void *);
-	long int (*snapshot_aux)(struct perf_event___2 *, struct perf_output_handle___2 *, long unsigned int);
-	int (*addr_filters_validate)(struct list_head *);
-	void (*addr_filters_sync)(struct perf_event___2 *);
-	int (*aux_output_match)(struct perf_event___2 *);
-	int (*filter_match)(struct perf_event___2 *);
-	int (*check_period)(struct perf_event___2 *, u64);
-};
-
-struct kernel_param_ops___2 {
-	unsigned int flags;
-	int (*set)(const char *, const struct kernel_param___2 *);
-	int (*get)(char *, const struct kernel_param___2 *);
-	void (*free)(void *);
-};
-
-struct kparam_array___2;
-
-struct kernel_param___2 {
-	const char *name;
-	struct module___2 *mod;
-	const struct kernel_param_ops___2 *ops;
-	const u16 perm;
-	s8 level;
-	u8 flags;
-	union {
-		void *arg;
-		const struct kparam_string *str;
-		const struct kparam_array___2 *arr;
-	};
-};
-
-struct kparam_array___2 {
-	unsigned int max;
-	unsigned int elemsize;
-	unsigned int *num;
-	const struct kernel_param_ops___2 *ops;
-	void *elem;
-};
-
-struct module_attribute___2 {
-	struct attribute attr;
-	ssize_t (*show)(struct module_attribute___2 *, struct module_kobject___2 *, char *);
-	ssize_t (*store)(struct module_attribute___2 *, struct module_kobject___2 *, const char *, size_t);
-	void (*setup)(struct module___2 *, const char *);
-	int (*test)(struct module___2 *);
-	void (*free)(struct module___2 *);
-};
-
-struct trace_event_class___2;
-
-struct bpf_prog_array___2;
-
-struct trace_event_call___2 {
-	struct list_head list;
-	struct trace_event_class___2 *class;
-	union {
-		char *name;
-		struct tracepoint *tp;
-	};
-	struct trace_event event;
-	char *print_fmt;
-	struct event_filter *filter;
-	void *mod;
-	void *data;
-	int flags;
-	int perf_refcount;
-	struct hlist_head *perf_events;
-	struct bpf_prog_array___2 *prog_array;
-	int (*perf_perm)(struct trace_event_call___2 *, struct perf_event___2 *);
-};
-
-struct bpf_map___2;
-
-struct bpf_prog_aux___2;
-
-struct bpf_map_ops___2 {
-	int (*map_alloc_check)(union bpf_attr *);
-	struct bpf_map___2 * (*map_alloc)(union bpf_attr *);
-	void (*map_release)(struct bpf_map___2 *, struct file___2 *);
-	void (*map_free)(struct bpf_map___2 *);
-	int (*map_get_next_key)(struct bpf_map___2 *, void *, void *);
-	void (*map_release_uref)(struct bpf_map___2 *);
-	void * (*map_lookup_elem_sys_only)(struct bpf_map___2 *, void *);
-	void * (*map_lookup_elem)(struct bpf_map___2 *, void *);
-	int (*map_update_elem)(struct bpf_map___2 *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_map___2 *, void *);
-	int (*map_push_elem)(struct bpf_map___2 *, void *, u64);
-	int (*map_pop_elem)(struct bpf_map___2 *, void *);
-	int (*map_peek_elem)(struct bpf_map___2 *, void *);
-	void * (*map_fd_get_ptr)(struct bpf_map___2 *, struct file___2 *, int);
-	void (*map_fd_put_ptr)(void *);
-	u32 (*map_gen_lookup)(struct bpf_map___2 *, struct bpf_insn *);
-	u32 (*map_fd_sys_lookup_elem)(void *);
-	void (*map_seq_show_elem)(struct bpf_map___2 *, void *, struct seq_file___2 *);
-	int (*map_check_btf)(const struct bpf_map___2 *, const struct btf *, const struct btf_type *, const struct btf_type *);
-	int (*map_poke_track)(struct bpf_map___2 *, struct bpf_prog_aux___2 *);
-	void (*map_poke_untrack)(struct bpf_map___2 *, struct bpf_prog_aux___2 *);
-	void (*map_poke_run)(struct bpf_map___2 *, u32, struct bpf_prog___2 *, struct bpf_prog___2 *);
-	int (*map_direct_value_addr)(const struct bpf_map___2 *, u64 *, u32);
-	int (*map_direct_value_meta)(const struct bpf_map___2 *, u64, u32 *);
-	int (*map_mmap)(struct bpf_map___2 *, struct vm_area_struct___2 *);
-};
-
-struct bpf_map___2 {
-	const struct bpf_map_ops___2 *ops;
-	struct bpf_map___2 *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	bool unpriv_array;
-	bool frozen;
-	long: 48;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_jit_poke_descriptor___2;
-
-struct bpf_prog_ops___2;
-
-struct bpf_prog_offload___2;
-
-struct bpf_prog_aux___2 {
-	atomic64_t refcnt;
-	u32 used_map_cnt;
-	u32 max_ctx_offset;
-	u32 max_pkt_offset;
-	u32 max_tp_access;
-	u32 stack_depth;
-	u32 id;
-	u32 func_cnt;
-	u32 func_idx;
-	u32 attach_btf_id;
-	struct bpf_prog___2 *linked_prog;
-	bool verifier_zext;
-	bool offload_requested;
-	bool attach_btf_trace;
-	bool func_proto_unreliable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct bpf_trampoline *trampoline;
-	struct hlist_node tramp_hlist;
-	const struct btf_type *attach_func_proto;
-	const char *attach_func_name;
-	struct bpf_prog___2 **func;
-	void *jit_data;
-	struct bpf_jit_poke_descriptor___2 *poke_tab;
-	u32 size_poke_tab;
-	struct latch_tree_node ksym_tnode;
-	struct list_head ksym_lnode;
-	const struct bpf_prog_ops___2 *ops;
-	struct bpf_map___2 **used_maps;
-	struct bpf_prog___2 *prog;
-	struct user_struct *user;
-	u64 load_time;
-	struct bpf_map___2 *cgroup_storage[2];
-	char name[16];
-	void *security;
-	struct bpf_prog_offload___2 *offload;
-	struct btf *btf;
-	struct bpf_func_info *func_info;
-	struct bpf_func_info_aux *func_info_aux;
-	struct bpf_line_info *linfo;
-	void **jited_linfo;
-	u32 func_info_cnt;
-	u32 nr_linfo;
-	u32 linfo_idx;
-	u32 num_exentries;
-	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
-	union {
-		struct work_struct work;
-		struct callback_head rcu;
-	};
-};
-
-struct bpf_prog___2 {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux___2 *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	union {
-		struct sock_filter insns[0];
-		struct bpf_insn insnsi[0];
-	};
-};
-
-struct bpf_offloaded_map___2;
-
-struct bpf_map_dev_ops___2 {
-	int (*map_get_next_key)(struct bpf_offloaded_map___2 *, void *, void *);
-	int (*map_lookup_elem)(struct bpf_offloaded_map___2 *, void *, void *);
-	int (*map_update_elem)(struct bpf_offloaded_map___2 *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_offloaded_map___2 *, void *);
-};
-
-struct bpf_offloaded_map___2 {
-	struct bpf_map___2 map;
-	struct net_device___2 *netdev;
-	const struct bpf_map_dev_ops___2 *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef rx_handler_result_t rx_handler_func_t___2(struct sk_buff___2 **);
-
-typedef struct {
-	struct net___2 *net;
-} possible_net_t___2;
-
-struct netdev_name_node___2;
-
-struct net_device_ops___2;
-
-struct ethtool_ops___2;
-
-struct header_ops___2;
-
-struct netdev_rx_queue___2;
-
-struct mini_Qdisc___2;
-
-struct netdev_queue___2;
-
-struct Qdisc___2;
-
-struct rtnl_link_ops___2;
-
-struct net_device___2 {
-	char name[16];
-	struct netdev_name_node___2 *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct net_device_ops___2 *netdev_ops;
-	const struct ethtool_ops___2 *ethtool_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct header_ops___2 *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	unsigned char name_assign_type;
-	bool uc_promisc;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset___2 *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	struct in_device *ip_ptr;
-	struct inet6_dev *ip6_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue___2 *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog___2 *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	rx_handler_func_t___2 *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc___2 *miniq_ingress;
-	struct netdev_queue___2 *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue___2 *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc___2 *qdisc;
-	struct hlist_head qdisc_hash[16];
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	int watchdog_timeo;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc___2 *miniq_egress;
-	struct timer_list watchdog_timer;
-	int *pcpu_refcnt;
-	struct list_head todo_list;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED___2 = 0,
-		NETREG_REGISTERED___2 = 1,
-		NETREG_UNREGISTERING___2 = 2,
-		NETREG_UNREGISTERED___2 = 3,
-		NETREG_RELEASED___2 = 4,
-		NETREG_DUMMY___2 = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED___2 = 0,
-		RTNL_LINK_INITIALIZING___2 = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device___2 *);
-	struct netpoll_info *npinfo;
-	possible_net_t___2 nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct device___2 dev;
-	const struct attribute_group___2 *sysfs_groups[4];
-	const struct attribute_group___2 *sysfs_rx_queue_group;
-	const struct rtnl_link_ops___2 *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key qdisc_tx_busylock_key;
-	struct lock_class_key qdisc_running_key;
-	struct lock_class_key qdisc_xmit_lock_key;
-	struct lock_class_key addr_list_lock_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-};
-
-struct bpf_prog_ops___2 {
-	int (*test_run)(struct bpf_prog___2 *, const union bpf_attr *, union bpf_attr *);
-};
-
-struct bpf_verifier_ops___2 {
-	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog___2 *);
-	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog___2 *, struct bpf_insn_access_aux *);
-	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog___2 *);
-	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
-	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog___2 *, u32 *);
-};
-
-struct bpf_prog_offload___2 {
-	struct bpf_prog___2 *prog;
-	struct net_device___2 *netdev;
-	struct bpf_offload_dev *offdev;
-	void *dev_priv;
-	struct list_head offloads;
-	bool dev_state;
-	bool opt_failed;
-	void *jited_image;
-	u32 jited_len;
-};
-
-struct bpf_jit_poke_descriptor___2 {
-	void *ip;
-	union {
-		struct {
-			struct bpf_map___2 *map;
-			u32 key;
-		} tail_call;
-	};
-	bool ip_stable;
-	u8 adj_off;
-	u16 reason;
-};
-
-struct bpf_prog_array_item___2 {
-	struct bpf_prog___2 *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_prog_array___2 {
-	struct callback_head rcu;
-	struct bpf_prog_array_item___2 items[0];
-};
-
-struct sk_buff___2 {
-	union {
-		struct {
-			struct sk_buff___2 *next;
-			struct sk_buff___2 *prev;
-			union {
-				struct net_device___2 *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff___2 *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 tc_redirected: 1;
-	__u8 tc_from_ingress: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
-};
-
-struct cgroup_bpf___2 {
-	struct bpf_prog_array___2 *effective[26];
-	struct list_head progs[26];
-	u32 flags[26];
-	struct bpf_prog_array___2 *inactive;
-	struct percpu_ref refcnt;
-	struct work_struct release_work;
-};
-
-struct cgroup_file___2 {
-	struct kernfs_node___2 *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct cgroup_subsys___2;
-
-struct cgroup_subsys_state___2 {
-	struct cgroup___2 *cgroup;
-	struct cgroup_subsys___2 *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state___2 *parent;
-};
-
-struct cgroup_root___2;
-
-struct cgroup_rstat_cpu___2;
-
-struct cgroup___2 {
-	struct cgroup_subsys_state___2 self;
-	long unsigned int flags;
-	int level;
-	int max_depth;
-	int nr_descendants;
-	int nr_dying_descendants;
-	int max_descendants;
-	int nr_populated_csets;
-	int nr_populated_domain_children;
-	int nr_populated_threaded_children;
-	int nr_threaded_children;
-	struct kernfs_node___2 *kn;
-	struct cgroup_file___2 procs_file;
-	struct cgroup_file___2 events_file;
-	u16 subtree_control;
-	u16 subtree_ss_mask;
-	u16 old_subtree_control;
-	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state___2 *subsys[4];
-	struct cgroup_root___2 *root;
-	struct list_head cset_links;
-	struct list_head e_csets[4];
-	struct cgroup___2 *dom_cgrp;
-	struct cgroup___2 *old_dom_cgrp;
-	struct cgroup_rstat_cpu___2 *rstat_cpu;
-	struct list_head rstat_css_list;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup_base_stat bstat;
-	struct prev_cputime prev_cputime;
-	struct list_head pidlists;
-	struct mutex pidlist_mutex;
-	wait_queue_head_t offline_waitq;
-	struct work_struct release_agent_work;
-	struct psi_group psi;
-	struct cgroup_bpf___2 bpf;
-	atomic_t congestion_count;
-	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
-};
-
-struct cftype___2;
-
-struct cgroup_subsys___2 {
-	struct cgroup_subsys_state___2 * (*css_alloc)(struct cgroup_subsys_state___2 *);
-	int (*css_online)(struct cgroup_subsys_state___2 *);
-	void (*css_offline)(struct cgroup_subsys_state___2 *);
-	void (*css_released)(struct cgroup_subsys_state___2 *);
-	void (*css_free)(struct cgroup_subsys_state___2 *);
-	void (*css_reset)(struct cgroup_subsys_state___2 *);
-	void (*css_rstat_flush)(struct cgroup_subsys_state___2 *, int);
-	int (*css_extra_stat_show)(struct seq_file___2 *, struct cgroup_subsys_state___2 *);
-	int (*can_attach)(struct cgroup_taskset *);
-	void (*cancel_attach)(struct cgroup_taskset *);
-	void (*attach)(struct cgroup_taskset *);
-	void (*post_attach)();
-	int (*can_fork)(struct task_struct___2 *);
-	void (*cancel_fork)(struct task_struct___2 *);
-	void (*fork)(struct task_struct___2 *);
-	void (*exit)(struct task_struct___2 *);
-	void (*release)(struct task_struct___2 *);
-	void (*bind)(struct cgroup_subsys_state___2 *);
-	bool early_init: 1;
-	bool implicit_on_dfl: 1;
-	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
-	int id;
-	const char *name;
-	const char *legacy_name;
-	struct cgroup_root___2 *root;
-	struct idr css_idr;
-	struct list_head cfts;
-	struct cftype___2 *dfl_cftypes;
-	struct cftype___2 *legacy_cftypes;
-	unsigned int depends_on;
-};
-
-struct cgroup_rstat_cpu___2 {
-	struct u64_stats_sync bsync;
-	struct cgroup_base_stat bstat;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup___2 *updated_children;
-	struct cgroup___2 *updated_next;
-};
-
-struct cgroup_root___2 {
-	struct kernfs_root___2 *kf_root;
-	unsigned int subsys_mask;
-	int hierarchy_id;
-	struct cgroup___2 cgrp;
-	u64 cgrp_ancestor_id_storage;
-	atomic_t nr_cgrps;
-	struct list_head root_list;
-	unsigned int flags;
-	char release_agent_path[4096];
-	char name[64];
-};
-
-struct cftype___2 {
-	char name[64];
-	long unsigned int private;
-	size_t max_write_len;
-	unsigned int flags;
-	unsigned int file_offset;
-	struct cgroup_subsys___2 *ss;
-	struct list_head node;
-	struct kernfs_ops___2 *kf_ops;
-	int (*open)(struct kernfs_open_file___2 *);
-	void (*release)(struct kernfs_open_file___2 *);
-	u64 (*read_u64)(struct cgroup_subsys_state___2 *, struct cftype___2 *);
-	s64 (*read_s64)(struct cgroup_subsys_state___2 *, struct cftype___2 *);
-	int (*seq_show)(struct seq_file___2 *, void *);
-	void * (*seq_start)(struct seq_file___2 *, loff_t *);
-	void * (*seq_next)(struct seq_file___2 *, void *, loff_t *);
-	void (*seq_stop)(struct seq_file___2 *, void *);
-	int (*write_u64)(struct cgroup_subsys_state___2 *, struct cftype___2 *, u64);
-	int (*write_s64)(struct cgroup_subsys_state___2 *, struct cftype___2 *, s64);
-	ssize_t (*write)(struct kernfs_open_file___2 *, char *, size_t, loff_t);
-	__poll_t (*poll)(struct kernfs_open_file___2 *, struct poll_table_struct___2 *);
-};
-
-struct perf_cpu_context___2 {
-	struct perf_event_context___2 ctx;
-	struct perf_event_context___2 *task_ctx;
-	int active_oncpu;
-	int exclusive;
-	raw_spinlock_t hrtimer_lock;
-	struct hrtimer hrtimer;
-	ktime_t hrtimer_interval;
-	unsigned int hrtimer_active;
-	struct list_head sched_cb_entry;
-	int sched_cb_usage;
-	int online;
-};
-
-struct perf_output_handle___2 {
-	struct perf_event___2 *event;
-	struct ring_buffer___2 *rb;
-	long unsigned int wakeup;
-	long unsigned int size;
-	u64 aux_flags;
-	union {
-		void *addr;
-		long unsigned int head;
-	};
-	int page;
-};
-
-struct perf_addr_filter___2 {
-	struct list_head entry;
-	struct path___2 path;
-	long unsigned int offset;
-	long unsigned int size;
-	enum perf_addr_filter_action_t action;
-};
-
-struct swevent_hlist {
-	struct hlist_head heads[256];
-	struct callback_head callback_head;
-};
-
-struct pmu_event_list {
-	raw_spinlock_t lock;
-	struct list_head list;
-};
-
-struct ring_buffer___2 {
-	refcount_t refcount;
-	struct callback_head callback_head;
-	int nr_pages;
-	int overwrite;
-	int paused;
-	atomic_t poll;
-	local_t head;
-	unsigned int nest;
-	local_t events;
-	local_t wakeup;
-	local_t lost;
-	long int watermark;
-	long int aux_watermark;
-	spinlock_t event_lock;
-	struct list_head event_list;
-	atomic_t mmap_count;
-	long unsigned int mmap_locked;
-	struct user_struct *mmap_user;
-	long int aux_head;
-	unsigned int aux_nest;
-	long int aux_wakeup;
-	long unsigned int aux_pgoff;
-	int aux_nr_pages;
-	int aux_overwrite;
-	atomic_t aux_mmap_count;
-	long unsigned int aux_mmap_locked;
-	void (*free_aux)(void *);
-	refcount_t aux_refcount;
-	int aux_in_sampling;
-	void **aux_pages;
-	void *aux_priv;
-	struct perf_event_mmap_page *user_page;
-	void *data_pages[0];
-};
-
-struct bpf_perf_event_data_kern___2 {
-	bpf_user_pt_regs_t *regs;
-	struct perf_sample_data *data;
-	struct perf_event___2 *event;
-};
-
-struct perf_pmu_events_attr___2 {
-	struct device_attribute___2 attr;
-	u64 id;
-	const char *event_str;
-};
-
-struct trace_event_class___2 {
-	const char *system;
-	void *probe;
-	void *perf_probe;
-	int (*reg)(struct trace_event_call___2 *, enum trace_reg, void *);
-	int (*define_fields)(struct trace_event_call___2 *);
-	struct list_head * (*get_fields)(struct trace_event_call___2 *);
-	struct list_head fields;
-	int (*raw_init)(struct trace_event_call___2 *);
-};
-
-struct bio_vec___2 {
-	struct page___2 *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct pipe_buf_operations___2;
-
-struct pipe_buffer___2 {
-	struct page___2 *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations___2 *ops;
-	unsigned int flags;
-	long unsigned int private;
-};
-
-struct pipe_buf_operations___2 {
-	int (*confirm)(struct pipe_inode_info___2 *, struct pipe_buffer___2 *);
-	void (*release)(struct pipe_inode_info___2 *, struct pipe_buffer___2 *);
-	int (*steal)(struct pipe_inode_info___2 *, struct pipe_buffer___2 *);
-	bool (*get)(struct pipe_inode_info___2 *, struct pipe_buffer___2 *);
-};
-
-struct sk_buff_head___2 {
-	struct sk_buff___2 *next;
-	struct sk_buff___2 *prev;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct ethtool_ops___2 {
-	void (*get_drvinfo)(struct net_device___2 *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device___2 *);
-	void (*get_regs)(struct net_device___2 *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device___2 *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device___2 *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device___2 *);
-	void (*set_msglevel)(struct net_device___2 *, u32);
-	int (*nway_reset)(struct net_device___2 *);
-	u32 (*get_link)(struct net_device___2 *);
-	int (*get_eeprom_len)(struct net_device___2 *);
-	int (*get_eeprom)(struct net_device___2 *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device___2 *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device___2 *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device___2 *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device___2 *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device___2 *, struct ethtool_ringparam *);
-	void (*get_pauseparam)(struct net_device___2 *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device___2 *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device___2 *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device___2 *, u32, u8 *);
-	int (*set_phys_id)(struct net_device___2 *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device___2 *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device___2 *);
-	void (*complete)(struct net_device___2 *);
-	u32 (*get_priv_flags)(struct net_device___2 *);
-	int (*set_priv_flags)(struct net_device___2 *, u32);
-	int (*get_sset_count)(struct net_device___2 *, int);
-	int (*get_rxnfc)(struct net_device___2 *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device___2 *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device___2 *, struct ethtool_flash *);
-	int (*reset)(struct net_device___2 *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device___2 *);
-	u32 (*get_rxfh_indir_size)(struct net_device___2 *);
-	int (*get_rxfh)(struct net_device___2 *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device___2 *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device___2 *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device___2 *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device___2 *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device___2 *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device___2 *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device___2 *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device___2 *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device___2 *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device___2 *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device___2 *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device___2 *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device___2 *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device___2 *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device___2 *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device___2 *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device___2 *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device___2 *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device___2 *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device___2 *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device___2 *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device___2 *, struct ethtool_stats *, u64 *);
-};
-
-struct inet_frags___2;
-
-struct fqdir___2 {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags___2 *f;
-	struct net___2 *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue___2;
-
-struct inet_frags___2 {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue___2 *, const void *);
-	void (*destructor)(struct inet_frag_queue___2 *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct inet_frag_queue___2 {
-	struct rhash_head node;
-	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff___2 *fragments_tail;
-	struct sk_buff___2 *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir___2 *fqdir;
-	struct callback_head rcu;
-};
-
-struct pernet_operations___2 {
-	struct list_head list;
-	int (*init)(struct net___2 *);
-	void (*pre_exit)(struct net___2 *);
-	void (*exit)(struct net___2 *);
-	void (*exit_batch)(struct list_head *);
-	unsigned int *id;
-	size_t size;
-};
-
-struct xdp_rxq_info___2 {
-	struct net_device___2 *dev;
-	u32 queue_index;
-	u32 reg_state;
-	struct xdp_mem_info mem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_frame___2 {
-	void *data;
-	u16 len;
-	u16 headroom;
-	u16 metasize;
-	struct xdp_mem_info mem;
-	struct net_device___2 *dev_rx;
-};
-
-struct netlink_callback___2 {
-	struct sk_buff___2 *skb;
-	const struct nlmsghdr *nlh;
-	int (*dump)(struct sk_buff___2 *, struct netlink_callback___2 *);
-	int (*done)(struct netlink_callback___2 *);
-	void *data;
-	struct module___2 *module;
-	struct netlink_ext_ack *extack;
-	u16 family;
-	u16 min_dump_alloc;
-	bool strict_check;
-	u16 answer_flags;
-	unsigned int prev_seq;
-	unsigned int seq;
-	union {
-		u8 ctx[48];
-		long int args[6];
-	};
-};
-
-struct header_ops___2 {
-	int (*create)(struct sk_buff___2 *, struct net_device___2 *, short unsigned int, const void *, const void *, unsigned int);
-	int (*parse)(const struct sk_buff___2 *, unsigned char *);
-	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
-	void (*cache_update)(struct hh_cache *, const struct net_device___2 *, const unsigned char *);
-	bool (*validate)(const char *, unsigned int);
-	__be16 (*parse_protocol)(const struct sk_buff___2 *);
-};
-
-struct napi_struct___2 {
-	struct list_head poll_list;
-	long unsigned int state;
-	int weight;
-	long unsigned int gro_bitmask;
-	int (*poll)(struct napi_struct___2 *, int);
-	int poll_owner;
-	struct net_device___2 *dev;
-	struct gro_list gro_hash[8];
-	struct sk_buff___2 *skb;
-	struct list_head rx_list;
-	int rx_count;
-	struct hrtimer timer;
-	struct list_head dev_list;
-	struct hlist_node napi_hash_node;
-	unsigned int napi_id;
-};
-
-struct netdev_queue___2 {
-	struct net_device___2 *dev;
-	struct Qdisc___2 *qdisc;
-	struct Qdisc___2 *qdisc_sleeping;
-	struct kobject___2 kobj;
-	int numa_node;
-	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
-	struct net_device___2 *sb_dev;
-	struct xdp_umem *umem;
-	spinlock_t _xmit_lock;
-	int xmit_lock_owner;
-	long unsigned int trans_start;
-	long unsigned int state;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dql dql;
-};
-
-struct qdisc_skb_head___2 {
-	struct sk_buff___2 *head;
-	struct sk_buff___2 *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct Qdisc_ops___2;
-
-struct Qdisc___2 {
-	int (*enqueue)(struct sk_buff___2 *, struct Qdisc___2 *, struct sk_buff___2 **);
-	struct sk_buff___2 * (*dequeue)(struct Qdisc___2 *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops___2 *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue___2 *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int padded;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head___2 gso_skb;
-	struct qdisc_skb_head___2 q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc___2 *next_sched;
-	struct sk_buff_head___2 skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netdev_rx_queue___2 {
-	struct rps_map *rps_map;
-	struct rps_dev_flow_table *rps_flow_table;
-	struct kobject___2 kobj;
-	struct net_device___2 *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info___2 xdp_rxq;
-	struct xdp_umem *umem;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netdev_bpf___2 {
-	enum bpf_netdev_command command;
-	union {
-		struct {
-			u32 flags;
-			struct bpf_prog___2 *prog;
-			struct netlink_ext_ack *extack;
-		};
-		struct {
-			u32 prog_id;
-			u32 prog_flags;
-		};
-		struct {
-			struct bpf_offloaded_map___2 *offmap;
-		};
-		struct {
-			struct xdp_umem *umem;
-			u16 queue_id;
-		} xsk;
-	};
-};
-
-struct netdev_name_node___2 {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device___2 *dev;
-	const char *name;
-};
-
-struct net_device_ops___2 {
-	int (*ndo_init)(struct net_device___2 *);
-	void (*ndo_uninit)(struct net_device___2 *);
-	int (*ndo_open)(struct net_device___2 *);
-	int (*ndo_stop)(struct net_device___2 *);
-	netdev_tx_t (*ndo_start_xmit)(struct sk_buff___2 *, struct net_device___2 *);
-	netdev_features_t (*ndo_features_check)(struct sk_buff___2 *, struct net_device___2 *, netdev_features_t);
-	u16 (*ndo_select_queue)(struct net_device___2 *, struct sk_buff___2 *, struct net_device___2 *);
-	void (*ndo_change_rx_flags)(struct net_device___2 *, int);
-	void (*ndo_set_rx_mode)(struct net_device___2 *);
-	int (*ndo_set_mac_address)(struct net_device___2 *, void *);
-	int (*ndo_validate_addr)(struct net_device___2 *);
-	int (*ndo_do_ioctl)(struct net_device___2 *, struct ifreq *, int);
-	int (*ndo_set_config)(struct net_device___2 *, struct ifmap *);
-	int (*ndo_change_mtu)(struct net_device___2 *, int);
-	int (*ndo_neigh_setup)(struct net_device___2 *, struct neigh_parms *);
-	void (*ndo_tx_timeout)(struct net_device___2 *);
-	void (*ndo_get_stats64)(struct net_device___2 *, struct rtnl_link_stats64 *);
-	bool (*ndo_has_offload_stats)(const struct net_device___2 *, int);
-	int (*ndo_get_offload_stats)(int, const struct net_device___2 *, void *);
-	struct net_device_stats * (*ndo_get_stats)(struct net_device___2 *);
-	int (*ndo_vlan_rx_add_vid)(struct net_device___2 *, __be16, u16);
-	int (*ndo_vlan_rx_kill_vid)(struct net_device___2 *, __be16, u16);
-	void (*ndo_poll_controller)(struct net_device___2 *);
-	int (*ndo_netpoll_setup)(struct net_device___2 *, struct netpoll_info *);
-	void (*ndo_netpoll_cleanup)(struct net_device___2 *);
-	int (*ndo_set_vf_mac)(struct net_device___2 *, int, u8 *);
-	int (*ndo_set_vf_vlan)(struct net_device___2 *, int, u16, u8, __be16);
-	int (*ndo_set_vf_rate)(struct net_device___2 *, int, int, int);
-	int (*ndo_set_vf_spoofchk)(struct net_device___2 *, int, bool);
-	int (*ndo_set_vf_trust)(struct net_device___2 *, int, bool);
-	int (*ndo_get_vf_config)(struct net_device___2 *, int, struct ifla_vf_info *);
-	int (*ndo_set_vf_link_state)(struct net_device___2 *, int, int);
-	int (*ndo_get_vf_stats)(struct net_device___2 *, int, struct ifla_vf_stats *);
-	int (*ndo_set_vf_port)(struct net_device___2 *, int, struct nlattr **);
-	int (*ndo_get_vf_port)(struct net_device___2 *, int, struct sk_buff___2 *);
-	int (*ndo_get_vf_guid)(struct net_device___2 *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*ndo_set_vf_guid)(struct net_device___2 *, int, u64, int);
-	int (*ndo_set_vf_rss_query_en)(struct net_device___2 *, int, bool);
-	int (*ndo_setup_tc)(struct net_device___2 *, enum tc_setup_type, void *);
-	int (*ndo_rx_flow_steer)(struct net_device___2 *, const struct sk_buff___2 *, u16, u32);
-	int (*ndo_add_slave)(struct net_device___2 *, struct net_device___2 *, struct netlink_ext_ack *);
-	int (*ndo_del_slave)(struct net_device___2 *, struct net_device___2 *);
-	netdev_features_t (*ndo_fix_features)(struct net_device___2 *, netdev_features_t);
-	int (*ndo_set_features)(struct net_device___2 *, netdev_features_t);
-	int (*ndo_neigh_construct)(struct net_device___2 *, struct neighbour *);
-	void (*ndo_neigh_destroy)(struct net_device___2 *, struct neighbour *);
-	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device___2 *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device___2 *, const unsigned char *, u16);
-	int (*ndo_fdb_dump)(struct sk_buff___2 *, struct netlink_callback___2 *, struct net_device___2 *, struct net_device___2 *, int *);
-	int (*ndo_fdb_get)(struct sk_buff___2 *, struct nlattr **, struct net_device___2 *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
-	int (*ndo_bridge_setlink)(struct net_device___2 *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
-	int (*ndo_bridge_getlink)(struct sk_buff___2 *, u32, u32, struct net_device___2 *, u32, int);
-	int (*ndo_bridge_dellink)(struct net_device___2 *, struct nlmsghdr *, u16);
-	int (*ndo_change_carrier)(struct net_device___2 *, bool);
-	int (*ndo_get_phys_port_id)(struct net_device___2 *, struct netdev_phys_item_id *);
-	int (*ndo_get_port_parent_id)(struct net_device___2 *, struct netdev_phys_item_id *);
-	int (*ndo_get_phys_port_name)(struct net_device___2 *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device___2 *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device___2 *, struct udp_tunnel_info *);
-	void * (*ndo_dfwd_add_station)(struct net_device___2 *, struct net_device___2 *);
-	void (*ndo_dfwd_del_station)(struct net_device___2 *, void *);
-	int (*ndo_set_tx_maxrate)(struct net_device___2 *, int, u32);
-	int (*ndo_get_iflink)(const struct net_device___2 *);
-	int (*ndo_change_proto_down)(struct net_device___2 *, bool);
-	int (*ndo_fill_metadata_dst)(struct net_device___2 *, struct sk_buff___2 *);
-	void (*ndo_set_rx_headroom)(struct net_device___2 *, int);
-	int (*ndo_bpf)(struct net_device___2 *, struct netdev_bpf___2 *);
-	int (*ndo_xdp_xmit)(struct net_device___2 *, int, struct xdp_frame___2 **, u32);
-	int (*ndo_xsk_wakeup)(struct net_device___2 *, u32, u32);
-	struct devlink_port * (*ndo_get_devlink_port)(struct net_device___2 *);
-};
-
-struct tcf_proto___2;
-
-struct mini_Qdisc___2 {
-	struct tcf_proto___2 *filter_list;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
-};
-
-struct rtnl_link_ops___2 {
-	struct list_head list;
-	const char *kind;
-	size_t priv_size;
-	void (*setup)(struct net_device___2 *);
-	unsigned int maxtype;
-	const struct nla_policy *policy;
-	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*newlink)(struct net___2 *, struct net_device___2 *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	int (*changelink)(struct net_device___2 *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	void (*dellink)(struct net_device___2 *, struct list_head *);
-	size_t (*get_size)(const struct net_device___2 *);
-	int (*fill_info)(struct sk_buff___2 *, const struct net_device___2 *);
-	size_t (*get_xstats_size)(const struct net_device___2 *);
-	int (*fill_xstats)(struct sk_buff___2 *, const struct net_device___2 *);
-	unsigned int (*get_num_tx_queues)();
-	unsigned int (*get_num_rx_queues)();
-	unsigned int slave_maxtype;
-	const struct nla_policy *slave_policy;
-	int (*slave_changelink)(struct net_device___2 *, struct net_device___2 *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
-	size_t (*get_slave_size)(const struct net_device___2 *, const struct net_device___2 *);
-	int (*fill_slave_info)(struct sk_buff___2 *, const struct net_device___2 *, const struct net_device___2 *);
-	struct net___2 * (*get_link_net)(const struct net_device___2 *);
-	size_t (*get_linkxstats_size)(const struct net_device___2 *, int);
-	int (*fill_linkxstats)(struct sk_buff___2 *, const struct net_device___2 *, int *, int);
-};
-
-struct softnet_data___2 {
-	struct list_head poll_list;
-	struct sk_buff_head___2 process_queue;
-	unsigned int processed;
-	unsigned int time_squeeze;
-	unsigned int received_rps;
-	struct softnet_data___2 *rps_ipi_list;
-	struct sd_flow_limit *flow_limit;
-	struct Qdisc___2 *output_queue;
-	struct Qdisc___2 **output_queue_tailp;
-	struct sk_buff___2 *completion_queue;
-	struct {
-		u16 recursion;
-		u8 more;
-	} xmit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int input_queue_head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t csd;
-	struct softnet_data___2 *rps_ipi_next;
-	unsigned int cpu;
-	unsigned int input_queue_tail;
-	unsigned int dropped;
-	struct sk_buff_head___2 input_pkt_queue;
-	struct napi_struct___2 backlog;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct gnet_dump___2 {
-	spinlock_t *lock;
-	struct sk_buff___2 *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
-};
-
-struct Qdisc_class_ops___2;
-
-struct Qdisc_ops___2 {
-	struct Qdisc_ops___2 *next;
-	const struct Qdisc_class_ops___2 *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff___2 *, struct Qdisc___2 *, struct sk_buff___2 **);
-	struct sk_buff___2 * (*dequeue)(struct Qdisc___2 *);
-	struct sk_buff___2 * (*peek)(struct Qdisc___2 *);
-	int (*init)(struct Qdisc___2 *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc___2 *);
-	void (*destroy)(struct Qdisc___2 *);
-	int (*change)(struct Qdisc___2 *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc___2 *);
-	int (*change_tx_queue_len)(struct Qdisc___2 *, unsigned int);
-	int (*dump)(struct Qdisc___2 *, struct sk_buff___2 *);
-	int (*dump_stats)(struct Qdisc___2 *, struct gnet_dump___2 *);
-	void (*ingress_block_set)(struct Qdisc___2 *, u32);
-	void (*egress_block_set)(struct Qdisc___2 *, u32);
-	u32 (*ingress_block_get)(struct Qdisc___2 *);
-	u32 (*egress_block_get)(struct Qdisc___2 *);
-	struct module___2 *owner;
-};
-
-struct tcf_block___2;
-
-struct Qdisc_class_ops___2 {
-	unsigned int flags;
-	struct netdev_queue___2 * (*select_queue)(struct Qdisc___2 *, struct tcmsg *);
-	int (*graft)(struct Qdisc___2 *, long unsigned int, struct Qdisc___2 *, struct Qdisc___2 **, struct netlink_ext_ack *);
-	struct Qdisc___2 * (*leaf)(struct Qdisc___2 *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc___2 *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc___2 *, u32);
-	int (*change)(struct Qdisc___2 *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc___2 *, long unsigned int);
-	void (*walk)(struct Qdisc___2 *, struct qdisc_walker *);
-	struct tcf_block___2 * (*tcf_block)(struct Qdisc___2 *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc___2 *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc___2 *, long unsigned int);
-	int (*dump)(struct Qdisc___2 *, long unsigned int, struct sk_buff___2 *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc___2 *, long unsigned int, struct gnet_dump___2 *);
-};
-
-struct tcf_chain___2;
-
-struct tcf_block___2 {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	refcount_t refcnt;
-	struct net___2 *net;
-	struct Qdisc___2 *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
-	struct {
-		struct tcf_chain___2 *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
-};
-
-struct tcf_result___2;
-
-struct tcf_proto_ops___2;
-
-struct tcf_proto___2 {
-	struct tcf_proto___2 *next;
-	void *root;
-	int (*classify)(struct sk_buff___2 *, const struct tcf_proto___2 *, struct tcf_result___2 *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops___2 *ops;
-	struct tcf_chain___2 *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
-};
-
-struct tcf_result___2 {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto___2 *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
-};
-
-struct tcf_proto_ops___2 {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff___2 *, const struct tcf_proto___2 *, struct tcf_result___2 *);
-	int (*init)(struct tcf_proto___2 *);
-	void (*destroy)(struct tcf_proto___2 *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto___2 *, u32);
-	void (*put)(struct tcf_proto___2 *, void *);
-	int (*change)(struct net___2 *, struct sk_buff___2 *, struct tcf_proto___2 *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto___2 *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto___2 *);
-	void (*walk)(struct tcf_proto___2 *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto___2 *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto___2 *, void *);
-	void (*hw_del)(struct tcf_proto___2 *, void *);
-	void (*bind_class)(void *, u32, long unsigned int);
-	void * (*tmplt_create)(struct net___2 *, struct tcf_chain___2 *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net___2 *, struct tcf_proto___2 *, void *, struct sk_buff___2 *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff___2 *, struct net___2 *, void *);
-	struct module___2 *owner;
-	int flags;
-};
-
-struct tcf_chain___2 {
-	struct mutex filter_chain_lock;
-	struct tcf_proto___2 *filter_chain;
-	struct list_head list;
-	struct tcf_block___2 *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops___2 *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct bpf_redirect_info___2 {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map___2 *map;
-	struct bpf_map___2 *map_to_flush;
-	u32 kern_flags;
-};
-
-struct match_token {
-	int token;
-	const char *pattern;
-};
-
-enum {
-	MAX_OPT_ARGS = 3,
-};
-
-typedef struct {
-	char *from;
-	char *to;
-} substring_t;
-
-typedef int (*remote_function_f)(void *);
-
-struct remote_function_call {
-	struct task_struct___2 *p;
-	remote_function_f func;
-	void *info;
-	int ret;
-};
-
-typedef void (*event_f)(struct perf_event___2 *, struct perf_cpu_context___2 *, struct perf_event_context___2 *, void *);
-
-struct event_function_struct {
-	struct perf_event___2 *event;
-	event_f func;
-	void *data;
-};
-
-enum event_type_t {
-	EVENT_FLEXIBLE = 1,
-	EVENT_PINNED = 2,
-	EVENT_TIME = 4,
-	EVENT_CPU = 8,
-	EVENT_ALL = 3,
-};
-
-struct stop_event_data {
-	struct perf_event___2 *event;
-	unsigned int restart;
-};
-
-struct sched_in_data {
-	struct perf_event_context___2 *ctx;
-	struct perf_cpu_context___2 *cpuctx;
-	int can_add_hw;
-};
-
-struct perf_read_data {
-	struct perf_event___2 *event;
-	bool group;
-	int ret;
-};
-
-struct perf_read_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-typedef void perf_iterate_f(struct perf_event___2 *, void *);
-
-struct remote_output {
-	struct ring_buffer___2 *rb;
-	int err;
-};
-
-struct perf_task_event {
-	struct task_struct___2 *task;
-	struct perf_event_context___2 *task_ctx;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 ppid;
-		u32 tid;
-		u32 ptid;
-		u64 time;
-	} event_id;
-};
-
-struct perf_comm_event {
-	struct task_struct___2 *task;
-	char *comm;
-	int comm_size;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-	} event_id;
-};
-
-struct perf_namespaces_event {
-	struct task_struct___2 *task;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 nr_namespaces;
-		struct perf_ns_link_info link_info[7];
-	} event_id;
-};
-
-struct perf_mmap_event {
-	struct vm_area_struct___2 *vma;
-	const char *file_name;
-	int file_size;
-	int maj;
-	int min;
-	u64 ino;
-	u64 ino_generation;
-	u32 prot;
-	u32 flags;
-	struct {
-		struct perf_event_header header;
-		u32 pid;
-		u32 tid;
-		u64 start;
-		u64 len;
-		u64 pgoff;
-	} event_id;
-};
-
-struct perf_switch_event {
-	struct task_struct___2 *task;
-	struct task_struct___2 *next_prev;
-	struct {
-		struct perf_event_header header;
-		u32 next_prev_pid;
-		u32 next_prev_tid;
-	} event_id;
-};
-
-struct perf_ksymbol_event {
-	const char *name;
-	int name_len;
-	struct {
-		struct perf_event_header header;
-		u64 addr;
-		u32 len;
-		u16 ksym_type;
-		u16 flags;
-	} event_id;
-};
-
-struct perf_bpf_event {
-	struct bpf_prog___2 *prog;
-	struct {
-		struct perf_event_header header;
-		u16 type;
-		u16 flags;
-		u32 id;
-		u8 tag[8];
-	} event_id;
-};
-
-struct swevent_htable {
-	struct swevent_hlist *swevent_hlist;
-	struct mutex hlist_mutex;
-	int hlist_refcount;
-	int recursion[4];
-};
-
-enum perf_probe_config {
-	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
-	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
-	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
-};
-
-enum {
-	IF_ACT_NONE = 4294967295,
-	IF_ACT_FILTER = 0,
-	IF_ACT_START = 1,
-	IF_ACT_STOP = 2,
-	IF_SRC_FILE = 3,
-	IF_SRC_KERNEL = 4,
-	IF_SRC_FILEADDR = 5,
-	IF_SRC_KERNELADDR = 6,
-};
-
-enum {
-	IF_STATE_ACTION = 0,
-	IF_STATE_SOURCE = 1,
-	IF_STATE_END = 2,
-};
-
-struct perf_aux_event {
-	struct perf_event_header header;
-	u32 pid;
-	u32 tid;
-};
-
-struct perf_aux_event___2 {
-	struct perf_event_header header;
-	u64 offset;
-	u64 size;
-	u64 flags;
-};
-
-enum perf_callchain_context {
-	PERF_CONTEXT_HV = 4294967264,
-	PERF_CONTEXT_KERNEL = 4294967168,
-	PERF_CONTEXT_USER = 4294966784,
-	PERF_CONTEXT_GUEST = 4294965248,
-	PERF_CONTEXT_GUEST_KERNEL = 4294965120,
-	PERF_CONTEXT_GUEST_USER = 4294964736,
-	PERF_CONTEXT_MAX = 4294963201,
-};
-
-struct callchain_cpus_entries {
-	struct callback_head callback_head;
-	struct perf_callchain_entry *cpu_entries[0];
-};
-
-enum bp_type_idx {
-	TYPE_INST = 0,
-	TYPE_DATA = 0,
-	TYPE_MAX = 1,
-};
-
-struct bp_cpuinfo {
-	unsigned int cpu_pinned;
-	unsigned int *tsk_pinned;
-	unsigned int flexible;
-};
-
-struct bp_busy_slots {
-	unsigned int pinned;
-	unsigned int flexible;
-};
-
-typedef u8 uprobe_opcode_t;
-
-struct uprobe {
-	struct rb_node rb_node;
-	refcount_t ref;
-	struct rw_semaphore register_rwsem;
-	struct rw_semaphore consumer_rwsem;
-	struct list_head pending_list;
-	struct uprobe_consumer *consumers;
-	struct inode___2 *inode;
-	loff_t offset;
-	loff_t ref_ctr_offset;
-	long unsigned int flags;
-	struct arch_uprobe arch;
-};
-
-struct xol_area {
-	wait_queue_head_t wq;
-	atomic_t slot_count;
-	long unsigned int *bitmap;
-	struct vm_special_mapping xol_mapping;
-	struct page___2 *pages[2];
-	long unsigned int vaddr;
-};
-
-typedef long unsigned int vm_flags_t;
-
-struct compact_control;
-
-struct capture_control {
-	struct compact_control *cc;
-	struct page___2 *page;
-};
-
-struct page_vma_mapped_walk {
-	struct page___2 *page;
-	struct vm_area_struct___2 *vma;
-	long unsigned int address;
-	pmd_t *pmd;
-	pte_t *pte;
-	spinlock_t *ptl;
-	unsigned int flags;
-};
-
-enum mmu_notifier_event {
-	MMU_NOTIFY_UNMAP = 0,
-	MMU_NOTIFY_CLEAR = 1,
-	MMU_NOTIFY_PROTECTION_VMA = 2,
-	MMU_NOTIFY_PROTECTION_PAGE = 3,
-	MMU_NOTIFY_SOFT_DIRTY = 4,
-	MMU_NOTIFY_RELEASE = 5,
-};
-
-struct mmu_notifier_range {
-	struct vm_area_struct___2 *vma;
-	struct mm_struct___2 *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int flags;
-	enum mmu_notifier_event event;
-};
-
-struct compact_control {
-	struct list_head freepages;
-	struct list_head migratepages;
-	unsigned int nr_freepages;
-	unsigned int nr_migratepages;
-	long unsigned int free_pfn;
-	long unsigned int migrate_pfn;
-	long unsigned int fast_start_pfn;
-	struct zone___2 *zone;
-	long unsigned int total_migrate_scanned;
-	long unsigned int total_free_scanned;
-	short unsigned int fast_search_fail;
-	short int search_order;
-	const gfp_t gfp_mask;
-	int order;
-	int migratetype;
-	const unsigned int alloc_flags;
-	const int classzone_idx;
-	enum migrate_mode mode;
-	bool ignore_skip_hint;
-	bool no_set_skip_hint;
-	bool ignore_block_suitable;
-	bool direct_compaction;
-	bool whole_zone;
-	bool contended;
-	bool rescan;
-};
-
-struct delayed_uprobe {
-	struct list_head list;
-	struct uprobe *uprobe;
-	struct mm_struct___2 *mm;
-};
-
-struct map_info {
-	struct map_info *next;
-	struct mm_struct___2 *mm;
-	long unsigned int vaddr;
-};
-
-struct static_key_mod {
-	struct static_key_mod *next;
-	struct jump_entry *entries;
-	struct module___2 *mod;
-};
-
-struct static_key_deferred {
-	struct static_key key;
-	long unsigned int timeout;
-	struct delayed_work work;
-};
-
-enum rseq_cpu_id_state {
-	RSEQ_CPU_ID_UNINITIALIZED = 4294967295,
-	RSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294,
-};
-
-enum rseq_flags {
-	RSEQ_FLAG_UNREGISTER = 1,
-};
-
-enum rseq_cs_flags {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,
-};
-
-struct rseq_cs {
-	__u32 version;
-	__u32 flags;
-	__u64 start_ip;
-	__u64 post_commit_offset;
-	__u64 abort_ip;
-};
-
-struct trace_event_raw_rseq_update {
-	struct trace_entry ent;
-	s32 cpu_id;
-	char __data[0];
-};
-
-struct trace_event_raw_rseq_ip_fixup {
-	struct trace_entry ent;
-	long unsigned int regs_ip;
-	long unsigned int start_ip;
-	long unsigned int post_commit_offset;
-	long unsigned int abort_ip;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rseq_update {};
-
-struct trace_event_data_offsets_rseq_ip_fixup {};
-
-typedef void (*btf_trace_rseq_update)(void *, struct task_struct___2 *);
-
-typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-struct __key_reference_with_attributes;
-
-typedef struct __key_reference_with_attributes *key_ref_t;
-
-enum key_being_used_for {
-	VERIFYING_MODULE_SIGNATURE = 0,
-	VERIFYING_FIRMWARE_SIGNATURE = 1,
-	VERIFYING_KEXEC_PE_SIGNATURE = 2,
-	VERIFYING_KEY_SIGNATURE = 3,
-	VERIFYING_KEY_SELF_SIGNATURE = 4,
-	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
-	NR__KEY_BEING_USED_FOR = 6,
-};
-
-struct key_preparsed_payload {
-	char *description;
-	union key_payload payload;
-	const void *data;
-	size_t datalen;
-	size_t quotalen;
-	time64_t expiry;
-};
-
-struct key_match_data {
-	bool (*cmp)(const struct key *, const struct key_match_data *);
-	const void *raw_data;
-	void *preparsed;
-	unsigned int lookup_type;
-};
-
-enum kernel_pkey_operation {
-	kernel_pkey_encrypt = 0,
-	kernel_pkey_decrypt = 1,
-	kernel_pkey_sign = 2,
-	kernel_pkey_verify = 3,
-};
-
-struct kernel_pkey_params {
-	struct key *key;
-	const char *encoding;
-	const char *hash_algo;
-	char *info;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	enum kernel_pkey_operation op: 8;
-};
-
-struct kernel_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-};
-
-struct asymmetric_key_subtype;
-
-struct pkcs7_message;
-
-typedef struct pglist_data___2 pg_data_t;
-
-struct xa_node {
-	unsigned char shift;
-	unsigned char offset;
-	unsigned char count;
-	unsigned char nr_values;
-	struct xa_node *parent;
-	struct xarray *array;
-	union {
-		struct list_head private_list;
-		struct callback_head callback_head;
-	};
-	void *slots[64];
-	union {
-		long unsigned int tags[3];
-		long unsigned int marks[3];
-	};
-};
-
-typedef void (*xa_update_node_t)(struct xa_node *);
-
-struct xa_state {
-	struct xarray *xa;
-	long unsigned int xa_index;
-	unsigned char xa_shift;
-	unsigned char xa_sibs;
-	unsigned char xa_offset;
-	unsigned char xa_pad;
-	struct xa_node *xa_node;
-	struct xa_node *xa_alloc;
-	xa_update_node_t xa_update;
-};
-
-enum positive_aop_returns {
-	AOP_WRITEPAGE_ACTIVATE = 524288,
-	AOP_TRUNCATED_PAGE = 524289,
-};
-
-enum mapping_flags {
-	AS_EIO = 0,
-	AS_ENOSPC = 1,
-	AS_MM_ALL_LOCKS = 2,
-	AS_UNEVICTABLE = 3,
-	AS_EXITING = 4,
-	AS_NO_WRITEBACK_TAGS = 5,
-};
-
-enum iter_type {
-	ITER_IOVEC = 4,
-	ITER_KVEC = 8,
-	ITER_BVEC = 16,
-	ITER_PIPE = 32,
-	ITER_DISCARD = 64,
-};
-
-struct pagevec {
-	unsigned char nr;
-	bool percpu_pvec_drained;
-	struct page___2 *pages[15];
-};
-
-struct fid {
-	union {
-		struct {
-			u32 ino;
-			u32 gen;
-			u32 parent_ino;
-			u32 parent_gen;
-		} i32;
-		struct {
-			u32 block;
-			u16 partref;
-			u16 parent_partref;
-			u32 generation;
-			u32 parent_block;
-			u32 parent_generation;
-		} udf;
-		__u32 raw[0];
-	};
-};
-
-typedef void (*poll_queue_proc___3)(struct file___2 *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct trace_event_raw_mm_filemap_op_page_cache {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	long unsigned int i_ino;
-	long unsigned int index;
-	dev_t s_dev;
-	char __data[0];
-};
-
-struct trace_event_raw_filemap_set_wb_err {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t errseq;
-	char __data[0];
-};
-
-struct trace_event_raw_file_check_and_advance_wb_err {
-	struct trace_entry ent;
-	struct file___2 *file;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	errseq_t old;
-	errseq_t new;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_filemap_op_page_cache {};
-
-struct trace_event_data_offsets_filemap_set_wb_err {};
-
-struct trace_event_data_offsets_file_check_and_advance_wb_err {};
-
-typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page___2 *);
-
-typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page___2 *);
-
-typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space___2 *, errseq_t);
-
-typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file___2 *, errseq_t);
-
-struct wait_page_key {
-	struct page___2 *page;
-	int bit_nr;
-	int page_match;
-};
-
-struct wait_page_queue {
-	struct page___2 *page;
-	int bit_nr;
-	wait_queue_entry_t wait;
-};
-
-enum behavior {
-	EXCLUSIVE = 0,
-	SHARED = 1,
-	DROP = 2,
-};
-
-struct kmem_cache_order_objects {
-	unsigned int x;
-};
-
-struct kmem_cache_cpu;
-
-struct kmem_cache_node;
-
-struct kmem_cache {
-	struct kmem_cache_cpu *cpu_slab;
-	slab_flags_t flags;
-	long unsigned int min_partial;
-	unsigned int size;
-	unsigned int object_size;
-	unsigned int offset;
-	unsigned int cpu_partial;
-	struct kmem_cache_order_objects oo;
-	struct kmem_cache_order_objects max;
-	struct kmem_cache_order_objects min;
-	gfp_t allocflags;
-	int refcount;
-	void (*ctor)(void *);
-	unsigned int inuse;
-	unsigned int align;
-	unsigned int red_left_pad;
-	const char *name;
-	struct list_head list;
-	struct kobject kobj;
-	struct work_struct kobj_remove_work;
-	unsigned int remote_node_defrag_ratio;
-	unsigned int useroffset;
-	unsigned int usersize;
-	struct kmem_cache_node *node[64];
-};
-
-struct kmem_cache_cpu {
-	void **freelist;
-	long unsigned int tid;
-	struct page___2 *page;
-	struct page___2 *partial;
-};
-
-struct kmem_cache_node {
-	spinlock_t list_lock;
-	long unsigned int nr_partial;
-	struct list_head partial;
-	atomic_long_t nr_slabs;
-	atomic_long_t total_objects;
-	struct list_head full;
-};
-
-enum slab_state {
-	DOWN = 0,
-	PARTIAL = 1,
-	PARTIAL_NODE = 2,
-	UP = 3,
-	FULL = 4,
-};
-
-struct kmalloc_info_struct {
-	const char *name[3];
-	unsigned int size;
-};
-
-enum oom_constraint {
-	CONSTRAINT_NONE = 0,
-	CONSTRAINT_CPUSET = 1,
-	CONSTRAINT_MEMORY_POLICY = 2,
-	CONSTRAINT_MEMCG = 3,
-};
-
-struct oom_control {
-	struct zonelist___2 *zonelist;
-	nodemask_t *nodemask;
-	struct mem_cgroup *memcg;
-	const gfp_t gfp_mask;
-	const int order;
-	long unsigned int totalpages;
-	struct task_struct___2 *chosen;
-	long unsigned int chosen_points;
-	enum oom_constraint constraint;
-};
-
-enum memcg_memory_event {
-	MEMCG_LOW = 0,
-	MEMCG_HIGH = 1,
-	MEMCG_MAX = 2,
-	MEMCG_OOM = 3,
-	MEMCG_OOM_KILL = 4,
-	MEMCG_SWAP_MAX = 5,
-	MEMCG_SWAP_FAIL = 6,
-	MEMCG_NR_MEMORY_EVENTS = 7,
-};
-
-enum compact_priority {
-	COMPACT_PRIO_SYNC_FULL = 0,
-	MIN_COMPACT_PRIORITY = 0,
-	COMPACT_PRIO_SYNC_LIGHT = 1,
-	MIN_COMPACT_COSTLY_PRIORITY = 1,
-	DEF_COMPACT_PRIORITY = 1,
-	COMPACT_PRIO_ASYNC = 2,
-	INIT_COMPACT_PRIORITY = 2,
-};
-
-enum compact_result {
-	COMPACT_NOT_SUITABLE_ZONE = 0,
-	COMPACT_SKIPPED = 1,
-	COMPACT_DEFERRED = 2,
-	COMPACT_INACTIVE = 2,
-	COMPACT_NO_SUITABLE_PAGE = 3,
-	COMPACT_CONTINUE = 4,
-	COMPACT_COMPLETE = 5,
-	COMPACT_PARTIAL_SKIPPED = 6,
-	COMPACT_CONTENDED = 7,
-	COMPACT_SUCCESS = 8,
-};
-
-struct trace_event_raw_oom_score_adj_update {
-	struct trace_entry ent;
-	pid_t pid;
-	char comm[16];
-	short int oom_score_adj;
-	char __data[0];
-};
-
-struct trace_event_raw_reclaim_retry_zone {
-	struct trace_entry ent;
-	int node;
-	int zone_idx;
-	int order;
-	long unsigned int reclaimable;
-	long unsigned int available;
-	long unsigned int min_wmark;
-	int no_progress_loops;
-	bool wmark_check;
-	char __data[0];
-};
-
-struct trace_event_raw_mark_victim {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_wake_reaper {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_start_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_finish_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_skip_task_reaping {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_compact_retry {
-	struct trace_entry ent;
-	int order;
-	int priority;
-	int result;
-	int retries;
-	int max_retries;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_oom_score_adj_update {};
-
-struct trace_event_data_offsets_reclaim_retry_zone {};
-
-struct trace_event_data_offsets_mark_victim {};
-
-struct trace_event_data_offsets_wake_reaper {};
-
-struct trace_event_data_offsets_start_task_reaping {};
-
-struct trace_event_data_offsets_finish_task_reaping {};
-
-struct trace_event_data_offsets_skip_task_reaping {};
-
-struct trace_event_data_offsets_compact_retry {};
-
-typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct___2 *);
-
-typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref___2 *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);
-
-typedef void (*btf_trace_mark_victim)(void *, int);
-
-typedef void (*btf_trace_wake_reaper)(void *, int);
-
-typedef void (*btf_trace_start_task_reaping)(void *, int);
-
-typedef void (*btf_trace_finish_task_reaping)(void *, int);
-
-typedef void (*btf_trace_skip_task_reaping)(void *, int);
-
-typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
-
-enum wb_congested_state {
-	WB_async_congested = 0,
-	WB_sync_congested = 1,
-};
-
-enum {
-	XA_CHECK_SCHED = 4096,
-};
-
-enum wb_state {
-	WB_registered = 0,
-	WB_writeback_running = 1,
-	WB_has_dirty_io = 2,
-	WB_start_all = 3,
-};
-
-enum {
-	BLK_RW_ASYNC = 0,
-	BLK_RW_SYNC = 1,
-};
-
-struct wb_lock_cookie {
-	bool locked;
-	long unsigned int flags;
-};
-
-typedef int (*writepage_t)(struct page___2 *, struct writeback_control *, void *);
-
-struct dirty_throttle_control {
-	struct bdi_writeback *wb;
-	struct fprop_local_percpu *wb_completions;
-	long unsigned int avail;
-	long unsigned int dirty;
-	long unsigned int thresh;
-	long unsigned int bg_thresh;
-	long unsigned int wb_dirty;
-	long unsigned int wb_thresh;
-	long unsigned int wb_bg_thresh;
-	long unsigned int pos_ratio;
-};
-
-struct trace_event_raw_mm_lru_insertion {
-	struct trace_entry ent;
-	struct page___2 *page;
-	long unsigned int pfn;
-	int lru;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_lru_activate {
-	struct trace_entry ent;
-	struct page___2 *page;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_lru_insertion {};
-
-struct trace_event_data_offsets_mm_lru_activate {};
-
-typedef void (*btf_trace_mm_lru_insertion)(void *, struct page___2 *, int);
-
-typedef void (*btf_trace_mm_lru_activate)(void *, struct page___2 *);
-
-enum lruvec_flags {
-	LRUVEC_CONGESTED = 0,
-};
-
-enum pgdat_flags {
-	PGDAT_DIRTY = 0,
-	PGDAT_WRITEBACK = 1,
-	PGDAT_RECLAIM_LOCKED = 2,
-};
-
-struct reclaim_stat {
-	unsigned int nr_dirty;
-	unsigned int nr_unqueued_dirty;
-	unsigned int nr_congested;
-	unsigned int nr_writeback;
-	unsigned int nr_immediate;
-	unsigned int nr_activate[2];
-	unsigned int nr_ref_keep;
-	unsigned int nr_unmap_fail;
-};
-
-enum mem_cgroup_protection {
-	MEMCG_PROT_NONE = 0,
-	MEMCG_PROT_LOW = 1,
-	MEMCG_PROT_MIN = 2,
-};
-
-struct mem_cgroup_reclaim_cookie {
-	pg_data_t *pgdat;
-	unsigned int generation;
-};
-
-enum ttu_flags {
-	TTU_MIGRATION = 1,
-	TTU_MUNLOCK = 2,
-	TTU_SPLIT_HUGE_PMD = 4,
-	TTU_IGNORE_MLOCK = 8,
-	TTU_IGNORE_ACCESS = 16,
-	TTU_IGNORE_HWPOISON = 32,
-	TTU_BATCH_FLUSH = 64,
-	TTU_RMAP_LOCKED = 128,
-	TTU_SPLIT_FREEZE = 256,
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_kswapd_wake {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_wakeup_kswapd {
-	struct trace_entry ent;
-	int nid;
-	int zid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
-	struct trace_entry ent;
-	long unsigned int nr_reclaimed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_start {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	void *shrink;
-	int nid;
-	long int nr_objects_to_shrink;
-	gfp_t gfp_flags;
-	long unsigned int cache_items;
-	long long unsigned int delta;
-	long unsigned int total_scan;
-	int priority;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_shrink_slab_end {
-	struct trace_entry ent;
-	struct shrinker *shr;
-	int nid;
-	void *shrink;
-	long int unused_scan;
-	long int new_scan;
-	int retval;
-	long int total_scan;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_isolate {
-	struct trace_entry ent;
-	int classzone_idx;
-	int order;
-	long unsigned int nr_requested;
-	long unsigned int nr_scanned;
-	long unsigned int nr_skipped;
-	long unsigned int nr_taken;
-	isolate_mode_t isolate_mode;
-	int lru;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_writepage {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int nr_congested;
-	long unsigned int nr_immediate;
-	unsigned int nr_activate0;
-	unsigned int nr_activate1;
-	long unsigned int nr_ref_keep;
-	long unsigned int nr_unmap_fail;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_lru_shrink_active {
-	struct trace_entry ent;
-	int nid;
-	long unsigned int nr_taken;
-	long unsigned int nr_active;
-	long unsigned int nr_deactivated;
-	long unsigned int nr_referenced;
-	int priority;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_inactive_list_is_low {
-	struct trace_entry ent;
-	int nid;
-	int reclaim_idx;
-	long unsigned int total_inactive;
-	long unsigned int inactive;
-	long unsigned int total_active;
-	long unsigned int active;
-	long unsigned int ratio;
-	int reclaim_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_vmscan_node_reclaim_begin {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
-
-struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
-
-struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
-
-struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
-
-struct trace_event_data_offsets_mm_shrink_slab_start {};
-
-struct trace_event_data_offsets_mm_shrink_slab_end {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
-
-struct trace_event_data_offsets_mm_vmscan_writepage {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
-
-struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
-
-struct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};
-
-struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
-
-typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);
-
-typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);
-
-typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
-
-typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page___2 *);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
-
-typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
-
-typedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
-
-typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
-
-struct scan_control {
-	long unsigned int nr_to_reclaim;
-	nodemask_t *nodemask;
-	struct mem_cgroup *target_mem_cgroup;
-	unsigned int may_deactivate: 2;
-	unsigned int force_deactivate: 1;
-	unsigned int skipped_deactivate: 1;
-	unsigned int may_writepage: 1;
-	unsigned int may_unmap: 1;
-	unsigned int may_swap: 1;
-	unsigned int memcg_low_reclaim: 1;
-	unsigned int memcg_low_skipped: 1;
-	unsigned int hibernation_mode: 1;
-	unsigned int compaction_ready: 1;
-	unsigned int cache_trim_mode: 1;
-	unsigned int file_is_tiny: 1;
-	s8 order;
-	s8 priority;
-	s8 reclaim_idx;
-	gfp_t gfp_mask;
-	long unsigned int nr_scanned;
-	long unsigned int nr_reclaimed;
-	struct {
-		unsigned int dirty;
-		unsigned int unqueued_dirty;
-		unsigned int congested;
-		unsigned int writeback;
-		unsigned int immediate;
-		unsigned int file_taken;
-		unsigned int taken;
-	} nr;
-	struct reclaim_state reclaim_state;
-};
-
-typedef enum {
-	PAGE_KEEP = 0,
-	PAGE_ACTIVATE = 1,
-	PAGE_SUCCESS = 2,
-	PAGE_CLEAN = 3,
-} pageout_t;
-
-enum page_references {
-	PAGEREF_RECLAIM = 0,
-	PAGEREF_RECLAIM_CLEAN = 1,
-	PAGEREF_KEEP = 2,
-	PAGEREF_ACTIVATE = 3,
-};
-
-enum scan_balance {
-	SCAN_EQUAL = 0,
-	SCAN_FRACT = 1,
-	SCAN_ANON = 2,
-	SCAN_FILE = 3,
-};
-
-enum {
-	MPOL_DEFAULT = 0,
-	MPOL_PREFERRED = 1,
-	MPOL_BIND = 2,
-	MPOL_INTERLEAVE = 3,
-	MPOL_LOCAL = 4,
-	MPOL_MAX = 5,
-};
-
-struct shared_policy {
-	struct rb_root root;
-	rwlock_t lock;
-};
-
-struct xattr {
-	const char *name;
-	void *value;
-	size_t value_len;
-};
-
-struct simple_xattrs {
-	struct list_head head;
-	spinlock_t lock;
-};
-
-struct simple_xattr {
-	struct list_head list;
-	char *name;
-	size_t size;
-	char value[0];
-};
-
-enum fid_type {
-	FILEID_ROOT = 0,
-	FILEID_INO32_GEN = 1,
-	FILEID_INO32_GEN_PARENT = 2,
-	FILEID_BTRFS_WITHOUT_PARENT = 77,
-	FILEID_BTRFS_WITH_PARENT = 78,
-	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
-	FILEID_UDF_WITHOUT_PARENT = 81,
-	FILEID_UDF_WITH_PARENT = 82,
-	FILEID_NILFS_WITHOUT_PARENT = 97,
-	FILEID_NILFS_WITH_PARENT = 98,
-	FILEID_FAT_WITHOUT_PARENT = 113,
-	FILEID_FAT_WITH_PARENT = 114,
-	FILEID_LUSTRE = 151,
-	FILEID_KERNFS = 254,
-	FILEID_INVALID = 255,
-};
-
-struct shmem_inode_info {
-	spinlock_t lock;
-	unsigned int seals;
-	long unsigned int flags;
-	long unsigned int alloced;
-	long unsigned int swapped;
-	struct list_head shrinklist;
-	struct list_head swaplist;
-	struct shared_policy policy;
-	struct simple_xattrs xattrs;
-	atomic_t stop_eviction;
-	struct inode vfs_inode;
-};
-
-struct shmem_sb_info {
-	long unsigned int max_blocks;
-	struct percpu_counter used_blocks;
-	long unsigned int max_inodes;
-	long unsigned int free_inodes;
-	spinlock_t stat_lock;
-	umode_t mode;
-	unsigned char huge;
-	kuid_t uid;
-	kgid_t gid;
-	struct mempolicy *mpol;
-	spinlock_t shrinklist_lock;
-	struct list_head shrinklist;
-	long unsigned int shrinklist_len;
-};
-
-enum sgp_type {
-	SGP_READ = 0,
-	SGP_CACHE = 1,
-	SGP_NOHUGE = 2,
-	SGP_HUGE = 3,
-	SGP_WRITE = 4,
-	SGP_FALLOC = 5,
-};
-
-struct shmem_falloc {
-	wait_queue_head_t *waitq;
-	long unsigned int start;
-	long unsigned int next;
-	long unsigned int nr_falloced;
-	long unsigned int nr_unswapped;
-};
-
-struct shmem_options {
-	long long unsigned int blocks;
-	long long unsigned int inodes;
-	struct mempolicy *mpol;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-	int huge;
-	int seen;
-};
-
-enum shmem_param {
-	Opt_gid = 0,
-	Opt_huge = 1,
-	Opt_mode = 2,
-	Opt_mpol = 3,
-	Opt_nr_blocks = 4,
-	Opt_nr_inodes = 5,
-	Opt_size = 6,
-	Opt_uid = 7,
-};
-
-enum pageblock_bits {
-	PB_migrate = 0,
-	PB_migrate_end = 2,
-	PB_migrate_skip = 3,
-	NR_PAGEBLOCK_BITS = 4,
-};
-
-enum writeback_stat_item {
-	NR_DIRTY_THRESHOLD = 0,
-	NR_DIRTY_BG_THRESHOLD = 1,
-	NR_VM_WRITEBACK_STAT_ITEMS = 2,
-};
-
-struct contig_page_info {
-	long unsigned int free_pages;
-	long unsigned int free_blocks_total;
-	long unsigned int free_blocks_suitable;
-};
-
-typedef s8 pto_T_____20;
-
-enum mminit_level {
-	MMINIT_WARNING = 0,
-	MMINIT_VERIFY = 1,
-	MMINIT_TRACE = 2,
-};
-
-struct pcpu_group_info {
-	int nr_units;
-	long unsigned int base_offset;
-	unsigned int *cpu_map;
-};
-
-struct pcpu_alloc_info {
-	size_t static_size;
-	size_t reserved_size;
-	size_t dyn_size;
-	size_t unit_size;
-	size_t atom_size;
-	size_t alloc_size;
-	size_t __ai_size;
-	int nr_groups;
-	struct pcpu_group_info groups[0];
-};
-
-typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);
-
-typedef void (*pcpu_fc_free_fn_t)(void *, size_t);
-
-typedef void (*pcpu_fc_populate_pte_fn_t)(long unsigned int);
-
-typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
-
-struct trace_event_raw_percpu_alloc_percpu {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_free_percpu {
-	struct trace_entry ent;
-	void *base_addr;
-	int off;
-	void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_alloc_percpu_fail {
-	struct trace_entry ent;
-	bool reserved;
-	bool is_atomic;
-	size_t size;
-	size_t align;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_create_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_percpu_destroy_chunk {
-	struct trace_entry ent;
-	void *base_addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_percpu_alloc_percpu {};
-
-struct trace_event_data_offsets_percpu_free_percpu {};
-
-struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
-
-struct trace_event_data_offsets_percpu_create_chunk {};
-
-struct trace_event_data_offsets_percpu_destroy_chunk {};
-
-typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);
-
-typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
-
-typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
-
-typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
-
-typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
-
-struct pcpu_block_md {
-	int scan_hint;
-	int scan_hint_start;
-	int contig_hint;
-	int contig_hint_start;
-	int left_free;
-	int right_free;
-	int first_free;
-	int nr_bits;
-};
-
-struct pcpu_chunk {
-	struct list_head list;
-	int free_bytes;
-	struct pcpu_block_md chunk_md;
-	void *base_addr;
-	long unsigned int *alloc_map;
-	long unsigned int *bound_map;
-	struct pcpu_block_md *md_blocks;
-	void *data;
-	bool immutable;
-	int start_offset;
-	int end_offset;
-	int nr_pages;
-	int nr_populated;
-	int nr_empty_pop_pages;
-	long unsigned int populated[0];
-};
-
-struct trace_event_raw_kmem_alloc {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_alloc_node {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	size_t bytes_req;
-	size_t bytes_alloc;
-	gfp_t gfp_flags;
-	int node;
-	char __data[0];
-};
-
-struct trace_event_raw_kmem_free {
-	struct trace_entry ent;
-	long unsigned int call_site;
-	const void *ptr;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_free_batched {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	gfp_t gfp_flags;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_pcpu_drain {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	unsigned int order;
-	int migratetype;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_page_alloc_extfrag {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	int alloc_order;
-	int fallback_order;
-	int alloc_migratetype;
-	int fallback_migratetype;
-	int change_ownership;
-	char __data[0];
-};
-
-struct trace_event_raw_rss_stat {
-	struct trace_entry ent;
-	unsigned int mm_id;
-	unsigned int curr;
-	int member;
-	long int size;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kmem_alloc {};
-
-struct trace_event_data_offsets_kmem_alloc_node {};
-
-struct trace_event_data_offsets_kmem_free {};
-
-struct trace_event_data_offsets_mm_page_free {};
-
-struct trace_event_data_offsets_mm_page_free_batched {};
-
-struct trace_event_data_offsets_mm_page_alloc {};
-
-struct trace_event_data_offsets_mm_page {};
-
-struct trace_event_data_offsets_mm_page_pcpu_drain {};
-
-struct trace_event_data_offsets_mm_page_alloc_extfrag {};
-
-struct trace_event_data_offsets_rss_stat {};
-
-typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);
-
-typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);
-
-typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);
-
-typedef void (*btf_trace_mm_page_free)(void *, struct page___2 *, unsigned int);
-
-typedef void (*btf_trace_mm_page_free_batched)(void *, struct page___2 *);
-
-typedef void (*btf_trace_mm_page_alloc)(void *, struct page___2 *, unsigned int, gfp_t, int);
-
-typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page___2 *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page___2 *, unsigned int, int);
-
-typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page___2 *, int, int, int, int);
-
-typedef void (*btf_trace_rss_stat)(void *, struct mm_struct___2 *, int, long int);
-
-struct slabinfo {
-	long unsigned int active_objs;
-	long unsigned int num_objs;
-	long unsigned int active_slabs;
-	long unsigned int num_slabs;
-	long unsigned int shared_avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int shared;
-	unsigned int objects_per_slab;
-	unsigned int cache_order;
-};
-
-struct alloc_context {
-	struct zonelist___2 *zonelist;
-	nodemask_t *nodemask;
-	struct zoneref___2 *preferred_zoneref;
-	int migratetype;
-	enum zone_type high_zoneidx;
-	bool spread_dirty_pages;
-};
-
-struct trace_event_raw_mm_compaction_isolate_template {
-	struct trace_entry ent;
-	long unsigned int start_pfn;
-	long unsigned int end_pfn;
-	long unsigned int nr_scanned;
-	long unsigned int nr_taken;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_migratepages {
-	struct trace_entry ent;
-	long unsigned int nr_migrated;
-	long unsigned int nr_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_begin {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_end {
-	struct trace_entry ent;
-	long unsigned int zone_start;
-	long unsigned int migrate_pfn;
-	long unsigned int free_pfn;
-	long unsigned int zone_end;
-	bool sync;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_try_to_compact_pages {
-	struct trace_entry ent;
-	int order;
-	gfp_t gfp_mask;
-	int prio;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_suitable_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_defer_template {
-	struct trace_entry ent;
-	int nid;
-	enum zone_type idx;
-	int order;
-	unsigned int considered;
-	unsigned int defer_shift;
-	int order_failed;
-	char __data[0];
-};
-
-struct trace_event_raw_mm_compaction_kcompactd_sleep {
-	struct trace_entry ent;
-	int nid;
-	char __data[0];
-};
-
-struct trace_event_raw_kcompactd_wake_template {
-	struct trace_entry ent;
-	int nid;
-	int order;
-	enum zone_type classzone_idx;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_compaction_isolate_template {};
-
-struct trace_event_data_offsets_mm_compaction_migratepages {};
-
-struct trace_event_data_offsets_mm_compaction_begin {};
-
-struct trace_event_data_offsets_mm_compaction_end {};
-
-struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
-
-struct trace_event_data_offsets_mm_compaction_suitable_template {};
-
-struct trace_event_data_offsets_mm_compaction_defer_template {};
-
-struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
-
-struct trace_event_data_offsets_kcompactd_wake_template {};
-
-typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);
-
-typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);
-
-typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);
-
-typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
-
-typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone___2 *, int, int);
-
-typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone___2 *, int, int);
-
-typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone___2 *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone___2 *, int);
-
-typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone___2 *, int);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
-
-typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
-
-typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
-
-typedef enum {
-	ISOLATE_ABORT = 0,
-	ISOLATE_NONE = 1,
-	ISOLATE_SUCCESS = 2,
-} isolate_migrate_t;
-
-struct anon_vma_chain {
-	struct vm_area_struct___2 *vma;
-	struct anon_vma *anon_vma;
-	struct list_head same_vma;
-	struct rb_node rb;
-	long unsigned int rb_subtree_last;
-};
-
-enum lru_status {
-	LRU_REMOVED = 0,
-	LRU_REMOVED_RETRY = 1,
-	LRU_ROTATE = 2,
-	LRU_SKIP = 3,
-	LRU_RETRY = 4,
-};
-
-typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
-
-typedef struct {
-	long unsigned int pd;
-} hugepd_t;
-
-struct follow_page_context {
-	struct dev_pagemap *pgmap;
-	unsigned int page_mask;
-};
-
-struct zap_details {
-	struct address_space___2 *check_mapping;
-	long unsigned int first_index;
-	long unsigned int last_index;
-};
-
-typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
-
-enum {
-	SWP_USED = 1,
-	SWP_WRITEOK = 2,
-	SWP_DISCARDABLE = 4,
-	SWP_DISCARDING = 8,
-	SWP_SOLIDSTATE = 16,
-	SWP_CONTINUED = 32,
-	SWP_BLKDEV = 64,
-	SWP_ACTIVATED = 128,
-	SWP_FS = 256,
-	SWP_AREA_DISCARD = 512,
-	SWP_PAGE_DISCARD = 1024,
-	SWP_STABLE_WRITES = 2048,
-	SWP_SYNCHRONOUS_IO = 4096,
-	SWP_VALID = 8192,
-	SWP_SCANNING = 16384,
-};
-
-struct copy_subpage_arg {
-	struct page___2 *dst;
-	struct page___2 *src;
-	struct vm_area_struct___2 *vma;
-};
-
-struct mm_walk;
-
-struct mm_walk_ops {
-	int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pte_hole)(long unsigned int, long unsigned int, struct mm_walk *);
-	int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);
-	int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);
-	int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);
-	void (*post_vma)(struct mm_walk *);
-};
-
-struct mm_walk {
-	const struct mm_walk_ops *ops;
-	struct mm_struct___2 *mm;
-	struct vm_area_struct___2 *vma;
-	void *private;
-};
-
-enum {
-	HUGETLB_SHMFS_INODE = 1,
-	HUGETLB_ANONHUGE_INODE = 2,
-};
-
-struct attribute_group___3;
-
-struct rmap_walk_control {
-	void *arg;
-	bool (*rmap_one)(struct page___2 *, struct vm_area_struct___2 *, long unsigned int, void *);
-	int (*done)(struct page___2 *);
-	struct anon_vma * (*anon_lock)(struct page___2 *);
-	bool (*invalid_vma)(struct vm_area_struct___2 *, void *);
-};
-
-struct page_referenced_arg {
-	int mapcount;
-	int referenced;
-	long unsigned int vm_flags;
-	struct mem_cgroup *memcg;
-};
-
-struct vmap_area {
-	long unsigned int va_start;
-	long unsigned int va_end;
-	struct rb_node rb_node;
-	struct list_head list;
-	union {
-		long unsigned int subtree_max_size;
-		struct vm_struct *vm;
-		struct llist_node purge_list;
-	};
-};
-
-struct vfree_deferred {
-	struct llist_head list;
-	struct work_struct wq;
-};
-
-enum fit_type {
-	NOTHING_FIT = 0,
-	FL_FIT_TYPE = 1,
-	LE_FIT_TYPE = 2,
-	RE_FIT_TYPE = 3,
-	NE_FIT_TYPE = 4,
-};
-
-struct vmap_block_queue {
-	spinlock_t lock;
-	struct list_head free;
-};
-
-struct vmap_block {
-	spinlock_t lock;
-	struct vmap_area *va;
-	long unsigned int free;
-	long unsigned int dirty;
-	long unsigned int dirty_min;
-	long unsigned int dirty_max;
-	struct list_head free_list;
-	struct callback_head callback_head;
-	struct list_head purge;
-};
-
-typedef struct vmap_area *pto_T_____21;
-
-struct page_frag_cache {
-	void *va;
-	__u16 offset;
-	__u16 size;
-	unsigned int pagecnt_bias;
-	bool pfmemalloc;
-};
-
-enum zone_flags {
-	ZONE_BOOSTED_WATERMARK = 0,
-};
-
-enum memmap_context {
-	MEMMAP_EARLY = 0,
-	MEMMAP_HOTPLUG = 1,
-};
-
-struct mminit_pfnnid_cache {
-	long unsigned int last_start;
-	long unsigned int last_end;
-	int last_nid;
-};
-
-struct pcpu_drain {
-	struct zone___2 *zone;
-	struct work_struct work;
-};
-
-struct madvise_walk_private {
-	struct mmu_gather *tlb;
-	bool pageout;
-};
-
-struct vma_swap_readahead {
-	short unsigned int win;
-	short unsigned int offset;
-	short unsigned int nr_pte;
-	pte_t *ptes;
-};
-
-union swap_header {
-	struct {
-		char reserved[4086];
-		char magic[10];
-	} magic;
-	struct {
-		char bootbits[1024];
-		__u32 version;
-		__u32 last_page;
-		__u32 nr_badpages;
-		unsigned char sws_uuid[16];
-		unsigned char sws_volume[16];
-		__u32 padding[117];
-		__u32 badpages[1];
-	} info;
-};
-
-struct swap_extent {
-	struct rb_node rb_node;
-	long unsigned int start_page;
-	long unsigned int nr_pages;
-	sector_t start_block;
-};
-
-struct swap_slots_cache {
-	bool lock_initialized;
-	struct mutex alloc_lock;
-	swp_entry_t *slots;
-	int nr;
-	int cur;
-	spinlock_t free_lock;
-	swp_entry_t *slots_ret;
-	int n_ret;
-};
-
-struct dma_pool {
-	struct list_head page_list;
-	spinlock_t lock;
-	size_t size;
-	struct device___2 *dev;
-	size_t allocation;
-	size_t boundary;
-	char name[32];
-	struct list_head pools;
-};
-
-struct dma_page {
-	struct list_head page_list;
-	void *vaddr;
-	dma_addr_t dma;
-	unsigned int in_use;
-	unsigned int offset;
-};
-
-enum string_size_units {
-	STRING_UNITS_10 = 0,
-	STRING_UNITS_2 = 1,
-};
-
-struct resv_map {
-	struct kref refs;
-	spinlock_t lock;
-	struct list_head regions;
-	long int adds_in_progress;
-	struct list_head region_cache;
-	long int region_cache_count;
-};
-
-struct huge_bootmem_page {
-	struct list_head list;
-	struct hstate *hstate;
-};
-
-struct file_region {
-	struct list_head link;
-	long int from;
-	long int to;
-};
-
-enum vma_resv_mode {
-	VMA_NEEDS_RESV = 0,
-	VMA_COMMIT_RESV = 1,
-	VMA_END_RESV = 2,
-	VMA_ADD_RESV = 3,
-};
-
-struct node_hstate {
-	struct kobject *hugepages_kobj;
-	struct kobject *hstate_kobjs[2];
-};
-
-struct hugetlb_cgroup;
-
-struct nodemask_scratch {
-	nodemask_t mask1;
-	nodemask_t mask2;
-};
-
-struct sp_node {
-	struct rb_node nd;
-	long unsigned int start;
-	long unsigned int end;
-	struct mempolicy *policy;
-};
-
-struct mempolicy_operations {
-	int (*create)(struct mempolicy *, const nodemask_t *);
-	void (*rebind)(struct mempolicy *, const nodemask_t *);
-};
-
-struct queue_pages {
-	struct list_head *pagelist;
-	long unsigned int flags;
-	nodemask_t *nmask;
-	long unsigned int start;
-	long unsigned int end;
-	struct vm_area_struct___2 *first;
-};
-
-struct mmu_notifier_mm {
-	struct hlist_head list;
-	bool has_itree;
-	spinlock_t lock;
-	long unsigned int invalidate_seq;
-	long unsigned int active_invalidate_ranges;
-	struct rb_root_cached itree;
-	wait_queue_head_t wq;
-	struct hlist_head deferred_list;
-};
-
-struct interval_tree_node {
-	struct rb_node rb;
-	long unsigned int start;
-	long unsigned int last;
-	long unsigned int __subtree_last;
-};
-
-struct mmu_notifier;
-
-struct mmu_notifier_ops {
-	void (*release)(struct mmu_notifier *, struct mm_struct___2 *);
-	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct___2 *, long unsigned int, long unsigned int);
-	int (*clear_young)(struct mmu_notifier *, struct mm_struct___2 *, long unsigned int, long unsigned int);
-	int (*test_young)(struct mmu_notifier *, struct mm_struct___2 *, long unsigned int);
-	void (*change_pte)(struct mmu_notifier *, struct mm_struct___2 *, long unsigned int, pte_t);
-	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct___2 *, long unsigned int, long unsigned int);
-	struct mmu_notifier * (*alloc_notifier)(struct mm_struct___2 *);
-	void (*free_notifier)(struct mmu_notifier *);
-};
-
-struct mmu_notifier {
-	struct hlist_node hlist;
-	const struct mmu_notifier_ops *ops;
-	struct mm_struct___2 *mm;
-	struct callback_head rcu;
-	unsigned int users;
-};
-
-struct mmu_interval_notifier;
-
-struct mmu_interval_notifier_ops {
-	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);
-};
-
-struct mmu_interval_notifier {
-	struct interval_tree_node interval_tree;
-	const struct mmu_interval_notifier_ops *ops;
-	struct mm_struct___2 *mm;
-	struct hlist_node deferred_item;
-	long unsigned int invalidate_seq;
-};
-
-enum stat_item {
-	ALLOC_FASTPATH = 0,
-	ALLOC_SLOWPATH = 1,
-	FREE_FASTPATH = 2,
-	FREE_SLOWPATH = 3,
-	FREE_FROZEN = 4,
-	FREE_ADD_PARTIAL = 5,
-	FREE_REMOVE_PARTIAL = 6,
-	ALLOC_FROM_PARTIAL = 7,
-	ALLOC_SLAB = 8,
-	ALLOC_REFILL = 9,
-	ALLOC_NODE_MISMATCH = 10,
-	FREE_SLAB = 11,
-	CPUSLAB_FLUSH = 12,
-	DEACTIVATE_FULL = 13,
-	DEACTIVATE_EMPTY = 14,
-	DEACTIVATE_TO_HEAD = 15,
-	DEACTIVATE_TO_TAIL = 16,
-	DEACTIVATE_REMOTE_FREES = 17,
-	DEACTIVATE_BYPASS = 18,
-	ORDER_FALLBACK = 19,
-	CMPXCHG_DOUBLE_CPU_FAIL = 20,
-	CMPXCHG_DOUBLE_FAIL = 21,
-	CPU_PARTIAL_ALLOC = 22,
-	CPU_PARTIAL_FREE = 23,
-	CPU_PARTIAL_NODE = 24,
-	CPU_PARTIAL_DRAIN = 25,
-	NR_SLUB_STAT_ITEMS = 26,
-};
-
-struct track {
-	long unsigned int addr;
-	long unsigned int addrs[16];
-	int cpu;
-	int pid;
-	long unsigned int when;
-};
-
-enum track_item {
-	TRACK_ALLOC = 0,
-	TRACK_FREE = 1,
-};
-
-struct detached_freelist {
-	struct page___2 *page;
-	void *tail;
-	void *freelist;
-	int cnt;
-	struct kmem_cache *s;
-};
-
-struct location {
-	long unsigned int count;
-	long unsigned int addr;
-	long long int sum_time;
-	long int min_time;
-	long int max_time;
-	long int min_pid;
-	long int max_pid;
-	long unsigned int cpus[1];
-	nodemask_t nodes;
-};
-
-struct loc_track {
-	long unsigned int max;
-	long unsigned int count;
-	struct location *loc;
-};
-
-enum slab_stat_type {
-	SL_ALL = 0,
-	SL_PARTIAL = 1,
-	SL_CPU = 2,
-	SL_OBJECTS = 3,
-	SL_TOTAL = 4,
-};
-
-struct slab_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kmem_cache *, char *);
-	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
-};
-
-struct saved_alias {
-	struct kmem_cache *s;
-	const char *name;
-	struct saved_alias *next;
-};
-
-enum slab_modes {
-	M_NONE = 0,
-	M_PARTIAL = 1,
-	M_FULL = 2,
-	M_FREE = 3,
-};
-
-struct buffer_head;
-
-typedef void bh_end_io_t(struct buffer_head *, int);
-
-struct buffer_head {
-	long unsigned int b_state;
-	struct buffer_head *b_this_page;
-	struct page___2 *b_page;
-	sector_t b_blocknr;
-	size_t b_size;
-	char *b_data;
-	struct block_device *b_bdev;
-	bh_end_io_t *b_end_io;
-	void *b_private;
-	struct list_head b_assoc_buffers;
-	struct address_space___2 *b_assoc_map;
-	atomic_t b_count;
-};
-
-typedef struct page___2 *new_page_t(struct page___2 *, long unsigned int);
-
-typedef void free_page_t(struct page___2 *, long unsigned int);
-
-enum bh_state_bits {
-	BH_Uptodate = 0,
-	BH_Dirty = 1,
-	BH_Lock = 2,
-	BH_Req = 3,
-	BH_Uptodate_Lock = 4,
-	BH_Mapped = 5,
-	BH_New = 6,
-	BH_Async_Read = 7,
-	BH_Async_Write = 8,
-	BH_Delay = 9,
-	BH_Boundary = 10,
-	BH_Write_EIO = 11,
-	BH_Unwritten = 12,
-	BH_Quiet = 13,
-	BH_Meta = 14,
-	BH_Prio = 15,
-	BH_Defer_Completion = 16,
-	BH_PrivateStart = 17,
-};
-
-struct trace_event_raw_mm_migrate_pages {
-	struct trace_entry ent;
-	long unsigned int succeeded;
-	long unsigned int failed;
-	enum migrate_mode mode;
-	int reason;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mm_migrate_pages {};
-
-typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, enum migrate_mode, int);
-
-struct hugetlbfs_inode_info {
-	struct shared_policy policy;
-	struct inode___2 vfs_inode;
-	unsigned int seals;
-};
-
-typedef s32 compat_off_t;
-
-struct fs_context_operations___2;
-
-struct open_flags {
-	int open_flag;
-	umode_t mode;
-	int acc_mode;
-	int intent;
-	int lookup_flags;
-};
-
-typedef __kernel_long_t __kernel_off_t;
-
-typedef __kernel_off_t off_t;
-
-struct file_dedupe_range_info {
-	__s64 dest_fd;
-	__u64 dest_offset;
-	__u64 bytes_deduped;
-	__s32 status;
-	__u32 reserved;
-};
-
-struct file_dedupe_range {
-	__u64 src_offset;
-	__u64 src_length;
-	__u16 dest_count;
-	__u16 reserved1;
-	__u32 reserved2;
-	struct file_dedupe_range_info info[0];
-};
-
-typedef int __kernel_rwf_t;
-
-typedef __kernel_rwf_t rwf_t;
-
-typedef s32 compat_ssize_t;
-
-enum vfs_get_super_keying {
-	vfs_get_single_super = 0,
-	vfs_get_single_reconf_super = 1,
-	vfs_get_keyed_super = 2,
-	vfs_get_independent_super = 3,
-};
-
-struct kobj_map;
-
-struct char_device_struct {
-	struct char_device_struct *next;
-	unsigned int major;
-	unsigned int baseminor;
-	int minorct;
-	char name[64];
-	struct cdev *cdev;
-};
-
-struct stat {
-	__kernel_ulong_t st_dev;
-	__kernel_ulong_t st_ino;
-	__kernel_ulong_t st_nlink;
-	unsigned int st_mode;
-	unsigned int st_uid;
-	unsigned int st_gid;
-	unsigned int __pad0;
-	__kernel_ulong_t st_rdev;
-	__kernel_long_t st_size;
-	__kernel_long_t st_blksize;
-	__kernel_long_t st_blocks;
-	__kernel_ulong_t st_atime;
-	__kernel_ulong_t st_atime_nsec;
-	__kernel_ulong_t st_mtime;
-	__kernel_ulong_t st_mtime_nsec;
-	__kernel_ulong_t st_ctime;
-	__kernel_ulong_t st_ctime_nsec;
-	__kernel_long_t __unused[3];
-};
-
-struct __old_kernel_stat {
-	short unsigned int st_dev;
-	short unsigned int st_ino;
-	short unsigned int st_mode;
-	short unsigned int st_nlink;
-	short unsigned int st_uid;
-	short unsigned int st_gid;
-	short unsigned int st_rdev;
-	unsigned int st_size;
-	unsigned int st_atime;
-	unsigned int st_mtime;
-	unsigned int st_ctime;
-};
-
-struct statx_timestamp {
-	__s64 tv_sec;
-	__u32 tv_nsec;
-	__s32 __reserved;
-};
-
-struct statx {
-	__u32 stx_mask;
-	__u32 stx_blksize;
-	__u64 stx_attributes;
-	__u32 stx_nlink;
-	__u32 stx_uid;
-	__u32 stx_gid;
-	__u16 stx_mode;
-	__u16 __spare0[1];
-	__u64 stx_ino;
-	__u64 stx_size;
-	__u64 stx_blocks;
-	__u64 stx_attributes_mask;
-	struct statx_timestamp stx_atime;
-	struct statx_timestamp stx_btime;
-	struct statx_timestamp stx_ctime;
-	struct statx_timestamp stx_mtime;
-	__u32 stx_rdev_major;
-	__u32 stx_rdev_minor;
-	__u32 stx_dev_major;
-	__u32 stx_dev_minor;
-	__u64 __spare2[14];
-};
-
-typedef u32 compat_ino_t;
-
-typedef u16 __compat_uid_t;
-
-typedef u16 __compat_gid_t;
-
-typedef u16 compat_mode_t;
-
-typedef u16 compat_dev_t;
-
-typedef u16 compat_nlink_t;
-
-struct compat_stat {
-	compat_dev_t st_dev;
-	u16 __pad1;
-	compat_ino_t st_ino;
-	compat_mode_t st_mode;
-	compat_nlink_t st_nlink;
-	__compat_uid_t st_uid;
-	__compat_gid_t st_gid;
-	compat_dev_t st_rdev;
-	u16 __pad2;
-	u32 st_size;
-	u32 st_blksize;
-	u32 st_blocks;
-	u32 st_atime;
-	u32 st_atime_nsec;
-	u32 st_mtime;
-	u32 st_mtime_nsec;
-	u32 st_ctime;
-	u32 st_ctime_nsec;
-	u32 __unused4;
-	u32 __unused5;
-};
-
-typedef short unsigned int ushort;
-
-struct user_arg_ptr {
-	bool is_compat;
-	union {
-		const char * const *native;
-		const compat_uptr_t *compat;
-	} ptr;
-};
-
-enum inode_i_mutex_lock_class {
-	I_MUTEX_NORMAL = 0,
-	I_MUTEX_PARENT = 1,
-	I_MUTEX_CHILD = 2,
-	I_MUTEX_XATTR = 3,
-	I_MUTEX_NONDIR2 = 4,
-	I_MUTEX_PARENT2 = 5,
-};
-
-struct pseudo_fs_context {
-	const struct super_operations *ops;
-	const struct xattr_handler **xattr;
-	const struct dentry_operations *dops;
-	long unsigned int magic;
-};
-
-struct name_snapshot {
-	struct qstr name;
-	unsigned char inline_name[32];
-};
-
-struct saved {
-	struct path___2 link;
-	struct delayed_call done;
-	const char *name;
-	unsigned int seq;
-};
-
-struct nameidata {
-	struct path___2 path;
-	struct qstr last;
-	struct path___2 root;
-	struct inode___2 *inode;
-	unsigned int flags;
-	unsigned int seq;
-	unsigned int m_seq;
-	int last_type;
-	unsigned int depth;
-	int total_link_count;
-	struct saved *stack;
-	struct saved internal[2];
-	struct filename *name;
-	struct nameidata *saved;
-	struct inode___2 *link_inode;
-	unsigned int root_seq;
-	int dfd;
-};
-
-enum {
-	LAST_NORM = 0,
-	LAST_ROOT = 1,
-	LAST_DOT = 2,
-	LAST_DOTDOT = 3,
-	LAST_BIND = 4,
-};
-
-struct mount;
-
-struct mnt_namespace {
-	atomic_t count;
-	struct ns_common___2 ns;
-	struct mount *root;
-	struct list_head list;
-	struct user_namespace___2 *user_ns;
-	struct ucounts___2 *ucounts;
-	u64 seq;
-	wait_queue_head_t poll;
-	u64 event;
-	unsigned int mounts;
-	unsigned int pending_mounts;
-};
-
-struct mnt_pcp;
-
-struct mountpoint;
-
-struct mount {
-	struct hlist_node mnt_hash;
-	struct mount *mnt_parent;
-	struct dentry___2 *mnt_mountpoint;
-	struct vfsmount___2 mnt;
-	union {
-		struct callback_head mnt_rcu;
-		struct llist_node mnt_llist;
-	};
-	struct mnt_pcp *mnt_pcp;
-	struct list_head mnt_mounts;
-	struct list_head mnt_child;
-	struct list_head mnt_instance;
-	const char *mnt_devname;
-	struct list_head mnt_list;
-	struct list_head mnt_expire;
-	struct list_head mnt_share;
-	struct list_head mnt_slave_list;
-	struct list_head mnt_slave;
-	struct mount *mnt_master;
-	struct mnt_namespace *mnt_ns;
-	struct mountpoint *mnt_mp;
-	union {
-		struct hlist_node mnt_mp_list;
-		struct hlist_node mnt_umount;
-	};
-	struct list_head mnt_umounting;
-	struct fsnotify_mark_connector *mnt_fsnotify_marks;
-	__u32 mnt_fsnotify_mask;
-	int mnt_id;
-	int mnt_group_id;
-	int mnt_expiry_mark;
-	struct hlist_head mnt_pins;
-	struct hlist_head mnt_stuck_children;
-};
-
-struct mnt_pcp {
-	int mnt_count;
-	int mnt_writers;
-};
-
-struct mountpoint {
-	struct hlist_node m_hash;
-	struct dentry___2 *m_dentry;
-	struct hlist_head m_list;
-	int m_count;
-};
-
-enum {
-	WALK_FOLLOW = 1,
-	WALK_MORE = 2,
-};
-
-struct word_at_a_time {
-	const long unsigned int one_bits;
-	const long unsigned int high_bits;
-};
-
-struct f_owner_ex {
-	int type;
-	__kernel_pid_t pid;
-};
-
-struct flock {
-	short int l_type;
-	short int l_whence;
-	__kernel_off_t l_start;
-	__kernel_off_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct compat_flock {
-	short int l_type;
-	short int l_whence;
-	compat_off_t l_start;
-	compat_off_t l_len;
-	compat_pid_t l_pid;
-};
-
-struct compat_flock64 {
-	short int l_type;
-	short int l_whence;
-	compat_loff_t l_start;
-	compat_loff_t l_len;
-	compat_pid_t l_pid;
-} __attribute__((packed));
-
-struct fiemap {
-	__u64 fm_start;
-	__u64 fm_length;
-	__u32 fm_flags;
-	__u32 fm_mapped_extents;
-	__u32 fm_extent_count;
-	__u32 fm_reserved;
-	struct fiemap_extent fm_extents[0];
-};
-
-struct file_clone_range {
-	__s64 src_fd;
-	__u64 src_offset;
-	__u64 src_length;
-	__u64 dest_offset;
-};
-
-typedef int get_block_t(struct inode___2 *, sector_t, struct buffer_head *, int);
-
-struct space_resv {
-	__s16 l_type;
-	__s16 l_whence;
-	__s64 l_start;
-	__s64 l_len;
-	__s32 l_sysid;
-	__u32 l_pid;
-	__s32 l_pad[4];
-};
-
-struct space_resv_32 {
-	__s16 l_type;
-	__s16 l_whence;
-	__s64 l_start;
-	__s64 l_len;
-	__s32 l_sysid;
-	__u32 l_pid;
-	__s32 l_pad[4];
-} __attribute__((packed));
-
-struct linux_dirent64 {
-	u64 d_ino;
-	s64 d_off;
-	short unsigned int d_reclen;
-	unsigned char d_type;
-	char d_name[0];
-};
-
-struct old_linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct readdir_callback {
-	struct dir_context ctx;
-	struct old_linux_dirent *dirent;
-	int result;
-};
-
-struct linux_dirent {
-	long unsigned int d_ino;
-	long unsigned int d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct getdents_callback {
-	struct dir_context ctx;
-	struct linux_dirent *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct getdents_callback64 {
-	struct dir_context ctx;
-	struct linux_dirent64 *current_dir;
-	int prev_reclen;
-	int count;
-	int error;
-};
-
-struct compat_old_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_offset;
-	short unsigned int d_namlen;
-	char d_name[1];
-};
-
-struct compat_readdir_callback {
-	struct dir_context ctx;
-	struct compat_old_linux_dirent *dirent;
-	int result;
-};
-
-struct compat_linux_dirent {
-	compat_ulong_t d_ino;
-	compat_ulong_t d_off;
-	short unsigned int d_reclen;
-	char d_name[1];
-};
-
-struct compat_getdents_callback {
-	struct dir_context ctx;
-	struct compat_linux_dirent *current_dir;
-	struct compat_linux_dirent *previous;
-	int count;
-	int error;
-};
-
-typedef struct {
-	long unsigned int fds_bits[16];
-} __kernel_fd_set;
-
-typedef __kernel_fd_set fd_set;
-
-struct poll_table_entry {
-	struct file___2 *filp;
-	__poll_t key;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *wait_address;
-};
-
-struct poll_table_page;
-
-struct poll_wqueues {
-	poll_table pt;
-	struct poll_table_page *table;
-	struct task_struct___2 *polling_task;
-	int triggered;
-	int error;
-	int inline_index;
-	struct poll_table_entry inline_entries[9];
-};
-
-struct poll_table_page {
-	struct poll_table_page *next;
-	struct poll_table_entry *entry;
-	struct poll_table_entry entries[0];
-};
-
-enum poll_time_type {
-	PT_TIMEVAL = 0,
-	PT_OLD_TIMEVAL = 1,
-	PT_TIMESPEC = 2,
-	PT_OLD_TIMESPEC = 3,
-};
-
-typedef struct {
-	long unsigned int *in;
-	long unsigned int *out;
-	long unsigned int *ex;
-	long unsigned int *res_in;
-	long unsigned int *res_out;
-	long unsigned int *res_ex;
-} fd_set_bits;
-
-struct poll_list {
-	struct poll_list *next;
-	int len;
-	struct pollfd entries[0];
-};
-
-struct compat_sel_arg_struct {
-	compat_ulong_t n;
-	compat_uptr_t inp;
-	compat_uptr_t outp;
-	compat_uptr_t exp;
-	compat_uptr_t tvp;
-};
-
-enum dentry_d_lock_class {
-	DENTRY_D_LOCK_NORMAL = 0,
-	DENTRY_D_LOCK_NESTED = 1,
-};
-
-struct external_name {
-	union {
-		atomic_t count;
-		struct callback_head head;
-	} u;
-	unsigned char name[0];
-};
-
-enum d_walk_ret {
-	D_WALK_CONTINUE = 0,
-	D_WALK_QUIT = 1,
-	D_WALK_NORETRY = 2,
-	D_WALK_SKIP = 3,
-};
-
-struct check_mount {
-	struct vfsmount___2 *mnt;
-	unsigned int mounted;
-};
-
-struct select_data {
-	struct dentry___2 *start;
-	union {
-		long int found;
-		struct dentry___2 *victim;
-	};
-	struct list_head dispose;
-};
-
-typedef long int pao_T_____6;
-
-struct fsxattr {
-	__u32 fsx_xflags;
-	__u32 fsx_extsize;
-	__u32 fsx_nextents;
-	__u32 fsx_projid;
-	__u32 fsx_cowextsize;
-	unsigned char fsx_pad[8];
-};
-
-enum file_time_flags {
-	S_ATIME = 1,
-	S_MTIME = 2,
-	S_CTIME = 4,
-	S_VERSION = 8,
-};
-
-struct proc_mounts {
-	struct mnt_namespace *ns;
-	struct path root;
-	int (*show)(struct seq_file *, struct vfsmount *);
-	void *cached_mount;
-	u64 cached_event;
-	loff_t cached_index;
-};
-
-enum umount_tree_flags {
-	UMOUNT_SYNC = 1,
-	UMOUNT_PROPAGATE = 2,
-	UMOUNT_CONNECTED = 4,
-};
-
-struct simple_transaction_argresp {
-	ssize_t size;
-	char data[0];
-};
-
-struct simple_attr {
-	int (*get)(void *, u64 *);
-	int (*set)(void *, u64);
-	char get_buf[24];
-	char set_buf[24];
-	void *data;
-	const char *fmt;
-	struct mutex mutex;
-};
-
-struct wb_completion {
-	atomic_t cnt;
-	wait_queue_head_t *waitq;
-};
-
-struct wb_writeback_work {
-	long int nr_pages;
-	struct super_block *sb;
-	long unsigned int *older_than_this;
-	enum writeback_sync_modes sync_mode;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_kupdate: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_background: 1;
-	unsigned int for_sync: 1;
-	unsigned int auto_free: 1;
-	enum wb_reason reason;
-	struct list_head list;
-	struct wb_completion *done;
-};
-
-struct trace_event_raw_writeback_page_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_dirty_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_write_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	int sync_mode;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_work_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_pages;
-	dev_t sb_dev;
-	int sync_mode;
-	int for_kupdate;
-	int range_cyclic;
-	int for_background;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_pages_written {
-	struct trace_entry ent;
-	long int pages;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_class {
-	struct trace_entry ent;
-	char name[32];
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_bdi_register {
-	struct trace_entry ent;
-	char name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wbc_class {
-	struct trace_entry ent;
-	char name[32];
-	long int nr_to_write;
-	long int pages_skipped;
-	int sync_mode;
-	int for_kupdate;
-	int for_background;
-	int for_reclaim;
-	int range_cyclic;
-	long int range_start;
-	long int range_end;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_queue_io {
-	struct trace_entry ent;
-	char name[32];
-	long unsigned int older;
-	long int age;
-	int moved;
-	int reason;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_global_dirty_state {
-	struct trace_entry ent;
-	long unsigned int nr_dirty;
-	long unsigned int nr_writeback;
-	long unsigned int nr_unstable;
-	long unsigned int background_thresh;
-	long unsigned int dirty_thresh;
-	long unsigned int dirty_limit;
-	long unsigned int nr_dirtied;
-	long unsigned int nr_written;
-	char __data[0];
-};
-
-struct trace_event_raw_bdi_dirty_ratelimit {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int write_bw;
-	long unsigned int avg_write_bw;
-	long unsigned int dirty_rate;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_balance_dirty_pages {
-	struct trace_entry ent;
-	char bdi[32];
-	long unsigned int limit;
-	long unsigned int setpoint;
-	long unsigned int dirty;
-	long unsigned int bdi_setpoint;
-	long unsigned int bdi_dirty;
-	long unsigned int dirty_ratelimit;
-	long unsigned int task_ratelimit;
-	unsigned int dirtied;
-	unsigned int dirtied_pause;
-	long unsigned int paused;
-	long int pause;
-	long unsigned int period;
-	long int think;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_sb_inodes_requeue {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_congest_waited_template {
-	struct trace_entry ent;
-	unsigned int usec_timeout;
-	unsigned int usec_delayed;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_single_inode_template {
-	struct trace_entry ent;
-	char name[32];
-	ino_t ino;
-	long unsigned int state;
-	long unsigned int dirtied_when;
-	long unsigned int writeback_index;
-	long int nr_to_write;
-	long unsigned int wrote;
-	ino_t cgroup_ino;
-	char __data[0];
-};
-
-struct trace_event_raw_writeback_inode_template {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int state;
-	__u16 mode;
-	long unsigned int dirtied_when;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_writeback_page_template {};
-
-struct trace_event_data_offsets_writeback_dirty_inode_template {};
-
-struct trace_event_data_offsets_writeback_write_inode_template {};
-
-struct trace_event_data_offsets_writeback_work_class {};
-
-struct trace_event_data_offsets_writeback_pages_written {};
-
-struct trace_event_data_offsets_writeback_class {};
-
-struct trace_event_data_offsets_writeback_bdi_register {};
-
-struct trace_event_data_offsets_wbc_class {};
-
-struct trace_event_data_offsets_writeback_queue_io {};
-
-struct trace_event_data_offsets_global_dirty_state {};
-
-struct trace_event_data_offsets_bdi_dirty_ratelimit {};
-
-struct trace_event_data_offsets_balance_dirty_pages {};
-
-struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
-
-struct trace_event_data_offsets_writeback_congest_waited_template {};
-
-struct trace_event_data_offsets_writeback_single_inode_template {};
-
-struct trace_event_data_offsets_writeback_inode_template {};
-
-typedef void (*btf_trace_writeback_dirty_page)(void *, struct page___2 *, struct address_space___2 *);
-
-typedef void (*btf_trace_wait_on_page_writeback)(void *, struct page___2 *, struct address_space___2 *);
-
-typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode___2 *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode___2 *, int);
-
-typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode___2 *, int);
-
-typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode___2 *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_write_inode)(void *, struct inode___2 *, struct writeback_control *);
-
-typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
-
-typedef void (*btf_trace_writeback_pages_written)(void *, long int);
-
-typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
-
-typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
-
-typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
-
-typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, int);
-
-typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);
-
-typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode___2 *);
-
-typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode___2 *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_single_inode)(void *, struct inode___2 *, struct writeback_control *, long unsigned int);
-
-typedef void (*btf_trace_writeback_lazytime)(void *, struct inode___2 *);
-
-typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode___2 *);
-
-typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode___2 *);
-
-typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode___2 *);
-
-typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode___2 *);
-
-struct splice_desc {
-	size_t total_len;
-	unsigned int len;
-	unsigned int flags;
-	union {
-		void *userptr;
-		struct file___2 *file;
-		void *data;
-	} u;
-	loff_t pos;
-	loff_t *opos;
-	size_t num_spliced;
-	bool need_wakeup;
-};
-
-typedef int splice_actor(struct pipe_inode_info___2 *, struct pipe_buffer___2 *, struct splice_desc *);
-
-typedef int splice_direct_actor(struct pipe_inode_info___2 *, struct splice_desc *);
-
-struct utimbuf {
-	__kernel_old_time_t actime;
-	__kernel_old_time_t modtime;
-};
-
-struct old_utimbuf32 {
-	old_time32_t actime;
-	old_time32_t modtime;
-};
-
-typedef int __kernel_daddr_t;
-
-struct ustat {
-	__kernel_daddr_t f_tfree;
-	__kernel_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-struct statfs {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__kernel_long_t f_blocks;
-	__kernel_long_t f_bfree;
-	__kernel_long_t f_bavail;
-	__kernel_long_t f_files;
-	__kernel_long_t f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct statfs64 {
-	__kernel_long_t f_type;
-	__kernel_long_t f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__kernel_long_t f_namelen;
-	__kernel_long_t f_frsize;
-	__kernel_long_t f_flags;
-	__kernel_long_t f_spare[4];
-};
-
-struct compat_statfs64 {
-	__u32 f_type;
-	__u32 f_bsize;
-	__u64 f_blocks;
-	__u64 f_bfree;
-	__u64 f_bavail;
-	__u64 f_files;
-	__u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	__u32 f_namelen;
-	__u32 f_frsize;
-	__u32 f_flags;
-	__u32 f_spare[4];
-} __attribute__((packed));
-
-typedef s32 compat_daddr_t;
-
-typedef __kernel_fsid_t compat_fsid_t;
-
-struct compat_statfs {
-	int f_type;
-	int f_bsize;
-	int f_blocks;
-	int f_bfree;
-	int f_bavail;
-	int f_files;
-	int f_ffree;
-	compat_fsid_t f_fsid;
-	int f_namelen;
-	int f_frsize;
-	int f_flags;
-	int f_spare[4];
-};
-
-struct compat_ustat {
-	compat_daddr_t f_tfree;
-	compat_ino_t f_tinode;
-	char f_fname[6];
-	char f_fpack[6];
-};
-
-typedef struct ns_common *ns_get_path_helper_t(void *);
-
-struct ns_get_path_task_args {
-	const struct proc_ns_operations *ns_ops;
-	struct task_struct *task;
-};
-
-struct constant_table {
-	const char *name;
-	int value;
-};
-
-enum legacy_fs_param {
-	LEGACY_FS_UNSET_PARAMS = 0,
-	LEGACY_FS_MONOLITHIC_PARAMS = 1,
-	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
-};
-
-struct legacy_fs_context {
-	char *legacy_data;
-	size_t data_size;
-	enum legacy_fs_param param_type;
-};
-
-enum fsconfig_command {
-	FSCONFIG_SET_FLAG = 0,
-	FSCONFIG_SET_STRING = 1,
-	FSCONFIG_SET_BINARY = 2,
-	FSCONFIG_SET_PATH = 3,
-	FSCONFIG_SET_PATH_EMPTY = 4,
-	FSCONFIG_SET_FD = 5,
-	FSCONFIG_CMD_CREATE = 6,
-	FSCONFIG_CMD_RECONFIGURE = 7,
-};
-
-struct dax_device;
-
-struct iomap_page_ops;
-
-struct iomap___2 {
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	struct block_device *bdev;
-	struct dax_device *dax_dev;
-	void *inline_data;
-	void *private;
-	const struct iomap_page_ops *page_ops;
-};
-
-struct iomap_page_ops {
-	int (*page_prepare)(struct inode___2 *, loff_t, unsigned int, struct iomap___2 *);
-	void (*page_done)(struct inode___2 *, loff_t, unsigned int, struct page___2 *, struct iomap___2 *);
-};
-
-struct decrypt_bh_ctx {
-	struct work_struct work;
-	struct buffer_head *bh;
-};
-
-struct bh_lru {
-	struct buffer_head *bhs[16];
-};
-
-struct bh_accounting {
-	int nr;
-	int ratelimit;
-};
-
-typedef struct buffer_head *pto_T_____22;
-
-enum {
-	DISK_EVENT_MEDIA_CHANGE = 1,
-	DISK_EVENT_EJECT_REQUEST = 2,
-};
-
-enum {
-	BIOSET_NEED_BVECS = 1,
-	BIOSET_NEED_RESCUER = 2,
-};
-
-struct bdev_inode {
-	struct block_device bdev;
-	struct inode vfs_inode;
-};
-
-struct blkdev_dio {
-	union {
-		struct kiocb *iocb;
-		struct task_struct *waiter;
-	};
-	size_t size;
-	atomic_t ref;
-	bool multi_bio: 1;
-	bool should_dirty: 1;
-	bool is_sync: 1;
-	struct bio bio;
-};
-
-struct bd_holder_disk {
-	struct list_head list;
-	struct gendisk *disk;
-	int refcnt;
-};
-
-struct blk_integrity;
-
-typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
-
-typedef void dio_submit_t(struct bio *, struct inode___2 *, loff_t);
-
-enum {
-	DIO_LOCKING = 1,
-	DIO_SKIP_HOLES = 2,
-};
-
-struct dio_submit {
-	struct bio *bio;
-	unsigned int blkbits;
-	unsigned int blkfactor;
-	unsigned int start_zero_done;
-	int pages_in_io;
-	sector_t block_in_file;
-	unsigned int blocks_available;
-	int reap_counter;
-	sector_t final_block_in_request;
-	int boundary;
-	get_block_t *get_block;
-	dio_submit_t *submit_io;
-	loff_t logical_offset_in_bio;
-	sector_t final_block_in_bio;
-	sector_t next_block_for_io;
-	struct page *cur_page;
-	unsigned int cur_page_offset;
-	unsigned int cur_page_len;
-	sector_t cur_page_block;
-	loff_t cur_page_fs_offset;
-	struct iov_iter *iter;
-	unsigned int head;
-	unsigned int tail;
-	size_t from;
-	size_t to;
-};
-
-struct dio {
-	int flags;
-	int op;
-	int op_flags;
-	blk_qc_t bio_cookie;
-	struct gendisk *bio_disk;
-	struct inode___2 *inode;
-	loff_t i_size;
-	dio_iodone_t *end_io;
-	void *private;
-	spinlock_t bio_lock;
-	int page_errors;
-	int is_async;
-	bool defer_completion;
-	bool should_dirty;
-	int io_error;
-	long unsigned int refcount;
-	struct bio *bio_list;
-	struct task_struct___2 *waiter;
-	struct kiocb *iocb;
-	ssize_t result;
-	union {
-		struct page *pages[64];
-		struct work_struct complete_work;
-	};
-	long: 64;
-};
-
-struct bvec_iter_all {
-	struct bio_vec bv;
-	int idx;
-	unsigned int done;
-};
-
-struct mpage_readpage_args {
-	struct bio *bio;
-	struct page___2 *page;
-	unsigned int nr_pages;
-	bool is_readahead;
-	sector_t last_block_in_bio;
-	struct buffer_head map_bh;
-	long unsigned int first_logical_block;
-	get_block_t *get_block;
-};
-
-struct mpage_data {
-	struct bio *bio;
-	sector_t last_block_in_bio;
-	get_block_t *get_block;
-	unsigned int use_writepage;
-};
-
-typedef u32 nlink_t;
-
-typedef int (*proc_write_t)(struct file___2 *, char *, size_t);
-
-struct proc_dir_entry {
-	atomic_t in_use;
-	refcount_t refcnt;
-	struct list_head pde_openers;
-	spinlock_t pde_unload_lock;
-	struct completion *pde_unload_completion;
-	const struct inode_operations___2 *proc_iops;
-	const struct file_operations___2 *proc_fops;
-	const struct dentry_operations *proc_dops;
-	union {
-		const struct seq_operations *seq_ops;
-		int (*single_show)(struct seq_file___2 *, void *);
-	};
-	proc_write_t write;
-	void *data;
-	unsigned int state_size;
-	unsigned int low_ino;
-	nlink_t nlink;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct proc_dir_entry *parent;
-	struct rb_root subdir;
-	struct rb_node subdir_node;
-	char *name;
-	umode_t mode;
-	u8 namelen;
-	char inline_name[0];
-};
-
-union proc_op {
-	int (*proc_get_link)(struct dentry___2 *, struct path___2 *);
-	int (*proc_show)(struct seq_file___2 *, struct pid_namespace *, struct pid *, struct task_struct *);
-	const char *lsm;
-};
-
-struct proc_inode {
-	struct pid *pid;
-	unsigned int fd;
-	union proc_op op;
-	struct proc_dir_entry *pde;
-	struct ctl_table_header *sysctl;
-	struct ctl_table *sysctl_entry;
-	struct hlist_node sysctl_inodes;
-	const struct proc_ns_operations *ns_ops;
-	struct inode___2 vfs_inode;
-};
-
-struct proc_fs_info {
-	int flag;
-	const char *str;
-};
-
-struct file_handle {
-	__u32 handle_bytes;
-	int handle_type;
-	unsigned char f_handle[0];
-};
-
-struct inotify_inode_mark {
-	struct fsnotify_mark fsn_mark;
-	int wd;
-};
-
-struct dnotify_struct {
-	struct dnotify_struct *dn_next;
-	__u32 dn_mask;
-	int dn_fd;
-	struct file___2 *dn_filp;
-	fl_owner_t dn_owner;
-};
-
-struct dnotify_mark {
-	struct fsnotify_mark fsn_mark;
-	struct dnotify_struct *dn;
-};
-
-struct inotify_event_info {
-	struct fsnotify_event fse;
-	u32 mask;
-	int wd;
-	u32 sync_cookie;
-	int name_len;
-	char name[0];
-};
-
-struct inotify_event {
-	__s32 wd;
-	__u32 mask;
-	__u32 cookie;
-	__u32 len;
-	char name[0];
-};
-
-struct epoll_event {
-	__poll_t events;
-	__u64 data;
-} __attribute__((packed));
-
-struct epoll_filefd {
-	struct file___2 *file;
-	int fd;
-} __attribute__((packed));
-
-struct nested_call_node {
-	struct list_head llink;
-	void *cookie;
-	void *ctx;
-};
-
-struct nested_calls {
-	struct list_head tasks_call_list;
-	spinlock_t lock;
-};
-
-struct eventpoll;
-
-struct epitem {
-	union {
-		struct rb_node rbn;
-		struct callback_head rcu;
-	};
-	struct list_head rdllink;
-	struct epitem *next;
-	struct epoll_filefd ffd;
-	int nwait;
-	struct list_head pwqlist;
-	struct eventpoll *ep;
-	struct list_head fllink;
-	struct wakeup_source *ws;
-	struct epoll_event event;
-};
-
-struct eventpoll {
-	struct mutex mtx;
-	wait_queue_head_t wq;
-	wait_queue_head_t poll_wait;
-	struct list_head rdllist;
-	rwlock_t lock;
-	struct rb_root_cached rbr;
-	struct epitem *ovflist;
-	struct wakeup_source *ws;
-	struct user_struct *user;
-	struct file___2 *file;
-	int visited;
-	struct list_head visited_list_link;
-	unsigned int napi_id;
-};
-
-struct eppoll_entry {
-	struct list_head llink;
-	struct epitem *base;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *whead;
-};
-
-struct ep_pqueue {
-	poll_table pt;
-	struct epitem *epi;
-};
-
-struct ep_send_events_data {
-	int maxevents;
-	struct epoll_event *events;
-	int res;
-};
-
-struct signalfd_siginfo {
-	__u32 ssi_signo;
-	__s32 ssi_errno;
-	__s32 ssi_code;
-	__u32 ssi_pid;
-	__u32 ssi_uid;
-	__s32 ssi_fd;
-	__u32 ssi_tid;
-	__u32 ssi_band;
-	__u32 ssi_overrun;
-	__u32 ssi_trapno;
-	__s32 ssi_status;
-	__s32 ssi_int;
-	__u64 ssi_ptr;
-	__u64 ssi_utime;
-	__u64 ssi_stime;
-	__u64 ssi_addr;
-	__u16 ssi_addr_lsb;
-	__u16 __pad2;
-	__s32 ssi_syscall;
-	__u64 ssi_call_addr;
-	__u32 ssi_arch;
-	__u8 __pad[28];
-};
-
-struct signalfd_ctx {
-	sigset_t sigmask;
-};
-
-struct timerfd_ctx {
-	union {
-		struct hrtimer tmr;
-		struct alarm alarm;
-	} t;
-	ktime_t tintv;
-	ktime_t moffs;
-	wait_queue_head_t wqh;
-	u64 ticks;
-	int clockid;
-	short unsigned int expired;
-	short unsigned int settime_flags;
-	struct callback_head rcu;
-	struct list_head clist;
-	spinlock_t cancel_lock;
-	bool might_cancel;
-};
-
-struct eventfd_ctx {
-	struct kref kref;
-	wait_queue_head_t wqh;
-	__u64 count;
-	unsigned int flags;
-	int id;
-};
-
-struct kioctx;
-
-struct kioctx_table {
-	struct callback_head rcu;
-	unsigned int nr;
-	struct kioctx *table[0];
-};
-
-typedef __kernel_ulong_t aio_context_t;
-
-enum {
-	IOCB_CMD_PREAD = 0,
-	IOCB_CMD_PWRITE = 1,
-	IOCB_CMD_FSYNC = 2,
-	IOCB_CMD_FDSYNC = 3,
-	IOCB_CMD_POLL = 5,
-	IOCB_CMD_NOOP = 6,
-	IOCB_CMD_PREADV = 7,
-	IOCB_CMD_PWRITEV = 8,
-};
-
-struct io_event {
-	__u64 data;
-	__u64 obj;
-	__s64 res;
-	__s64 res2;
-};
-
-struct iocb {
-	__u64 aio_data;
-	__u32 aio_key;
-	__kernel_rwf_t aio_rw_flags;
-	__u16 aio_lio_opcode;
-	__s16 aio_reqprio;
-	__u32 aio_fildes;
-	__u64 aio_buf;
-	__u64 aio_nbytes;
-	__s64 aio_offset;
-	__u64 aio_reserved2;
-	__u32 aio_flags;
-	__u32 aio_resfd;
-};
-
-typedef int kiocb_cancel_fn(struct kiocb *);
-
-typedef u32 compat_aio_context_t;
-
-struct aio_ring {
-	unsigned int id;
-	unsigned int nr;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int magic;
-	unsigned int compat_features;
-	unsigned int incompat_features;
-	unsigned int header_length;
-	struct io_event io_events[0];
-};
-
-struct kioctx_cpu;
-
-struct ctx_rq_wait;
-
-struct kioctx {
-	struct percpu_ref users;
-	atomic_t dead;
-	struct percpu_ref reqs;
-	long unsigned int user_id;
-	struct kioctx_cpu *cpu;
-	unsigned int req_batch;
-	unsigned int max_reqs;
-	unsigned int nr_events;
-	long unsigned int mmap_base;
-	long unsigned int mmap_size;
-	struct page **ring_pages;
-	long int nr_pages;
-	struct rcu_work free_rwork;
-	struct ctx_rq_wait *rq_wait;
-	long: 64;
-	struct {
-		atomic_t reqs_available;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		spinlock_t ctx_lock;
-		struct list_head active_reqs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
-		struct mutex ring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		unsigned int tail;
-		unsigned int completed_events;
-		spinlock_t completion_lock;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct page *internal_pages[8];
-	struct file *aio_ring_file;
-	unsigned int id;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kioctx_cpu {
-	unsigned int reqs_available;
-};
-
-struct ctx_rq_wait {
-	struct completion comp;
-	atomic_t count;
-};
-
-struct fsync_iocb {
-	struct file *file;
-	struct work_struct work;
-	bool datasync;
-};
-
-struct poll_iocb {
-	struct file *file;
-	struct wait_queue_head *head;
-	__poll_t events;
-	bool done;
-	bool cancelled;
-	struct wait_queue_entry wait;
-	struct work_struct work;
-};
-
-struct eventfd_ctx___2;
-
-struct aio_kiocb {
-	union {
-		struct file *ki_filp;
-		struct kiocb rw;
-		struct fsync_iocb fsync;
-		struct poll_iocb poll;
-	};
-	struct kioctx *ki_ctx;
-	kiocb_cancel_fn *ki_cancel;
-	struct io_event ki_res;
-	struct list_head ki_list;
-	refcount_t ki_refcnt;
-	struct eventfd_ctx___2 *ki_eventfd;
-};
-
-struct aio_poll_table {
-	struct poll_table_struct pt;
-	struct aio_kiocb *iocb;
-	int error;
-};
-
-struct __aio_sigset {
-	const sigset_t *sigmask;
-	size_t sigsetsize;
-};
-
-struct __compat_aio_sigset {
-	compat_uptr_t sigmask;
-	compat_size_t sigsetsize;
-};
-
-enum {
-	PERCPU_REF_INIT_ATOMIC = 1,
-	PERCPU_REF_INIT_DEAD = 2,
-	PERCPU_REF_ALLOW_REINIT = 4,
-};
-
-struct user_msghdr {
-	void *msg_name;
-	int msg_namelen;
-	struct iovec *msg_iov;
-	__kernel_size_t msg_iovlen;
-	void *msg_control;
-	__kernel_size_t msg_controllen;
-	unsigned int msg_flags;
-};
-
-struct scm_fp_list {
-	short int count;
-	short int max;
-	struct user_struct *user;
-	struct file___2 *fp[253];
-};
-
-struct unix_skb_parms {
-	struct pid___2 *pid;
-	kuid_t uid;
-	kgid_t gid;
-	struct scm_fp_list *fp;
-	u32 secid;
-	u32 consumed;
-};
-
-struct trace_event_raw_io_uring_create {
-	struct trace_entry ent;
-	int fd;
-	void *ctx;
-	u32 sq_entries;
-	u32 cq_entries;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_register {
-	struct trace_entry ent;
-	void *ctx;
-	unsigned int opcode;
-	unsigned int nr_files;
-	unsigned int nr_bufs;
-	bool eventfd;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_file_get {
-	struct trace_entry ent;
-	void *ctx;
-	int fd;
-	char __data[0];
-};
-
-struct io_wq_work;
-
-struct trace_event_raw_io_uring_queue_async_work {
-	struct trace_entry ent;
-	void *ctx;
-	int rw;
-	void *req;
-	struct io_wq_work *work;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct io_wq_work_node {
-	struct io_wq_work_node *next;
-};
-
-struct io_wq_work {
-	union {
-		struct io_wq_work_node list;
-		void *data;
-	};
-	void (*func)(struct io_wq_work **);
-	struct files_struct *files;
-	unsigned int flags;
-};
-
-struct trace_event_raw_io_uring_defer {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	long long unsigned int data;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_link {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	void *target_req;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_cqring_wait {
-	struct trace_entry ent;
-	void *ctx;
-	int min_events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_fail_link {
-	struct trace_entry ent;
-	void *req;
-	void *link;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_complete {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	long int res;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_submit_sqe {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	bool force_nonblock;
-	bool sq_thread;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_io_uring_create {};
-
-struct trace_event_data_offsets_io_uring_register {};
-
-struct trace_event_data_offsets_io_uring_file_get {};
-
-struct trace_event_data_offsets_io_uring_queue_async_work {};
-
-struct trace_event_data_offsets_io_uring_defer {};
-
-struct trace_event_data_offsets_io_uring_link {};
-
-struct trace_event_data_offsets_io_uring_cqring_wait {};
-
-struct trace_event_data_offsets_io_uring_fail_link {};
-
-struct trace_event_data_offsets_io_uring_complete {};
-
-struct trace_event_data_offsets_io_uring_submit_sqe {};
-
-typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
-
-typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);
-
-typedef void (*btf_trace_io_uring_file_get)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);
-
-typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);
-
-typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);
-
-typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u64, bool, bool);
-
-struct io_uring_sqe {
-	__u8 opcode;
-	__u8 flags;
-	__u16 ioprio;
-	__s32 fd;
-	union {
-		__u64 off;
-		__u64 addr2;
-	};
-	__u64 addr;
-	__u32 len;
-	union {
-		__kernel_rwf_t rw_flags;
-		__u32 fsync_flags;
-		__u16 poll_events;
-		__u32 sync_range_flags;
-		__u32 msg_flags;
-		__u32 timeout_flags;
-		__u32 accept_flags;
-		__u32 cancel_flags;
-	};
-	__u64 user_data;
-	union {
-		__u16 buf_index;
-		__u64 __pad2[3];
-	};
-};
-
-enum {
-	IORING_OP_NOP = 0,
-	IORING_OP_READV = 1,
-	IORING_OP_WRITEV = 2,
-	IORING_OP_FSYNC = 3,
-	IORING_OP_READ_FIXED = 4,
-	IORING_OP_WRITE_FIXED = 5,
-	IORING_OP_POLL_ADD = 6,
-	IORING_OP_POLL_REMOVE = 7,
-	IORING_OP_SYNC_FILE_RANGE = 8,
-	IORING_OP_SENDMSG = 9,
-	IORING_OP_RECVMSG = 10,
-	IORING_OP_TIMEOUT = 11,
-	IORING_OP_TIMEOUT_REMOVE = 12,
-	IORING_OP_ACCEPT = 13,
-	IORING_OP_ASYNC_CANCEL = 14,
-	IORING_OP_LINK_TIMEOUT = 15,
-	IORING_OP_CONNECT = 16,
-	IORING_OP_LAST = 17,
-};
-
-struct io_uring_cqe {
-	__u64 user_data;
-	__s32 res;
-	__u32 flags;
-};
-
-struct io_sqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 flags;
-	__u32 dropped;
-	__u32 array;
-	__u32 resv1;
-	__u64 resv2;
-};
-
-struct io_cqring_offsets {
-	__u32 head;
-	__u32 tail;
-	__u32 ring_mask;
-	__u32 ring_entries;
-	__u32 overflow;
-	__u32 cqes;
-	__u64 resv[2];
-};
-
-struct io_uring_params {
-	__u32 sq_entries;
-	__u32 cq_entries;
-	__u32 flags;
-	__u32 sq_thread_cpu;
-	__u32 sq_thread_idle;
-	__u32 features;
-	__u32 resv[4];
-	struct io_sqring_offsets sq_off;
-	struct io_cqring_offsets cq_off;
-};
-
-struct io_uring_files_update {
-	__u32 offset;
-	__u32 resv;
-	__u64 fds;
-};
-
-enum {
-	IO_WQ_WORK_CANCEL = 1,
-	IO_WQ_WORK_HAS_MM = 2,
-	IO_WQ_WORK_HASHED = 4,
-	IO_WQ_WORK_NEEDS_USER = 8,
-	IO_WQ_WORK_NEEDS_FILES = 16,
-	IO_WQ_WORK_UNBOUND = 32,
-	IO_WQ_WORK_INTERNAL = 64,
-	IO_WQ_WORK_CB = 128,
-	IO_WQ_HASH_SHIFT = 24,
-};
-
-enum io_wq_cancel {
-	IO_WQ_CANCEL_OK = 0,
-	IO_WQ_CANCEL_RUNNING = 1,
-	IO_WQ_CANCEL_NOTFOUND = 2,
-};
-
-typedef void get_work_fn(struct io_wq_work *);
-
-typedef void put_work_fn(struct io_wq_work *);
-
-struct io_wq_data {
-	struct mm_struct___2 *mm;
-	struct user_struct *user;
-	const struct cred___2 *creds;
-	get_work_fn *get_work;
-	put_work_fn *put_work;
-};
-
-struct io_uring {
-	u32 head;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 tail;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct io_rings {
-	struct io_uring sq;
-	struct io_uring cq;
-	u32 sq_ring_mask;
-	u32 cq_ring_mask;
-	u32 sq_ring_entries;
-	u32 cq_ring_entries;
-	u32 sq_dropped;
-	u32 sq_flags;
-	u32 cq_overflow;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct io_uring_cqe cqes[0];
-};
-
-struct io_mapped_ubuf {
-	u64 ubuf;
-	size_t len;
-	struct bio_vec *bvec;
-	unsigned int nr_bvecs;
-};
-
-struct fixed_file_table {
-	struct file___2 **files;
-};
-
-struct io_wq;
-
-struct io_kiocb;
-
-struct io_ring_ctx {
-	struct {
-		struct percpu_ref refs;
-		long: 64;
-	};
-	struct {
-		unsigned int flags;
-		bool compat;
-		bool account_mem;
-		bool cq_overflow_flushed;
-		bool drain_next;
-		u32 *sq_array;
-		unsigned int cached_sq_head;
-		unsigned int sq_entries;
-		unsigned int sq_mask;
-		unsigned int sq_thread_idle;
-		unsigned int cached_sq_dropped;
-		atomic_t cached_cq_overflow;
-		struct io_uring_sqe *sq_sqes;
-		struct list_head defer_list;
-		struct list_head timeout_list;
-		struct list_head cq_overflow_list;
-		wait_queue_head_t inflight_wait;
-		long: 64;
-	};
-	struct io_rings *rings;
-	struct io_wq *io_wq;
-	struct task_struct___2 *sqo_thread;
-	struct mm_struct___2 *sqo_mm;
-	wait_queue_head_t sqo_wait;
-	struct fixed_file_table *file_table;
-	unsigned int nr_user_files;
-	unsigned int nr_user_bufs;
-	struct io_mapped_ubuf *user_bufs;
-	struct user_struct *user;
-	const struct cred___2 *creds;
-	struct completion *completions;
-	struct io_kiocb *fallback_req;
-	struct socket *ring_sock;
-	long: 64;
-	struct {
-		unsigned int cached_cq_tail;
-		unsigned int cq_entries;
-		unsigned int cq_mask;
-		atomic_t cq_timeouts;
-		struct wait_queue_head cq_wait;
-		struct fasync_struct *cq_fasync;
-		struct eventfd_ctx___2 *cq_ev_fd;
-		long: 64;
-	};
-	struct {
-		struct mutex uring_lock;
-		wait_queue_head_t wait;
-		long: 64;
-	};
-	struct {
-		spinlock_t completion_lock;
-		bool poll_multi_file;
-		struct list_head poll_list;
-		struct hlist_head *cancel_hash;
-		unsigned int cancel_hash_bits;
-		spinlock_t inflight_lock;
-		struct list_head inflight_list;
-		long: 64;
-	};
-};
-
-struct io_rw {
-	struct kiocb kiocb;
-	u64 addr;
-	u64 len;
-};
-
-struct io_poll_iocb {
-	struct file___2 *file;
-	union {
-		struct wait_queue_head *head;
-		u64 addr;
-	};
-	__poll_t events;
-	bool done;
-	bool canceled;
-	struct wait_queue_entry wait;
-};
-
-struct io_accept {
-	struct file___2 *file;
-	struct sockaddr *addr;
-	int *addr_len;
-	int flags;
-};
-
-struct io_sync {
-	struct file___2 *file;
-	loff_t len;
-	loff_t off;
-	int flags;
-};
-
-struct io_cancel {
-	struct file___2 *file;
-	u64 addr;
-};
-
-struct io_timeout {
-	struct file___2 *file;
-	u64 addr;
-	int flags;
-	unsigned int count;
-};
-
-struct io_connect {
-	struct file___2 *file;
-	struct sockaddr *addr;
-	int addr_len;
-};
-
-struct io_sr_msg {
-	struct file___2 *file;
-	struct user_msghdr *msg;
-	int msg_flags;
-};
-
-struct io_async_ctx;
-
-struct io_kiocb {
-	union {
-		struct file___2 *file;
-		struct io_rw rw;
-		struct io_poll_iocb poll;
-		struct io_accept accept;
-		struct io_sync sync;
-		struct io_cancel cancel;
-		struct io_timeout timeout;
-		struct io_connect connect;
-		struct io_sr_msg sr_msg;
-	};
-	struct io_async_ctx *io;
-	struct file___2 *ring_file;
-	int ring_fd;
-	bool has_user;
-	bool in_async;
-	bool needs_fixed_file;
-	u8 opcode;
-	struct io_ring_ctx *ctx;
-	union {
-		struct list_head list;
-		struct hlist_node hash_node;
-	};
-	struct list_head link_list;
-	unsigned int flags;
-	refcount_t refs;
-	u64 user_data;
-	u32 result;
-	u32 sequence;
-	struct list_head inflight_entry;
-	struct io_wq_work work;
-};
-
-struct io_timeout_data {
-	struct io_kiocb *req;
-	struct hrtimer timer;
-	struct timespec64 ts;
-	enum hrtimer_mode mode;
-	u32 seq_offset;
-};
-
-struct io_async_connect {
-	struct __kernel_sockaddr_storage address;
-};
-
-struct io_async_msghdr {
-	struct iovec fast_iov[8];
-	struct iovec *iov;
-	struct sockaddr *uaddr;
-	struct msghdr msg;
-};
-
-struct io_async_rw {
-	struct iovec fast_iov[8];
-	struct iovec *iov;
-	ssize_t nr_segs;
-	ssize_t size;
-};
-
-struct io_async_ctx {
-	union {
-		struct io_async_rw rw;
-		struct io_async_msghdr msg;
-		struct io_async_connect connect;
-		struct io_timeout_data timeout;
-	};
-};
-
-struct io_submit_state {
-	struct blk_plug plug;
-	void *reqs[8];
-	unsigned int free_reqs;
-	unsigned int cur_req;
-	struct file___2 *file;
-	unsigned int fd;
-	unsigned int has_refs;
-	unsigned int used_refs;
-	unsigned int ios_left;
-};
-
-struct io_poll_table {
-	struct poll_table_struct pt;
-	struct io_kiocb *req;
-	int error;
-};
-
-struct io_wait_queue {
-	struct wait_queue_entry wq;
-	struct io_ring_ctx *ctx;
-	unsigned int to_wait;
-	unsigned int nr_timeouts;
-};
-
-struct io_wq_work_list {
-	struct io_wq_work_node *first;
-	struct io_wq_work_node *last;
-};
-
-typedef bool work_cancel_fn(struct io_wq_work *, void *);
-
-enum {
-	IO_WORKER_F_UP = 1,
-	IO_WORKER_F_RUNNING = 2,
-	IO_WORKER_F_FREE = 4,
-	IO_WORKER_F_EXITING = 8,
-	IO_WORKER_F_FIXED = 16,
-	IO_WORKER_F_BOUND = 32,
-};
-
-enum {
-	IO_WQ_BIT_EXIT = 0,
-	IO_WQ_BIT_CANCEL = 1,
-	IO_WQ_BIT_ERROR = 2,
-};
-
-enum {
-	IO_WQE_FLAG_STALLED = 1,
-};
-
-struct io_wqe;
-
-struct io_worker {
-	refcount_t ref;
-	unsigned int flags;
-	struct hlist_nulls_node nulls_node;
-	struct list_head all_list;
-	struct task_struct___2 *task;
-	struct io_wqe *wqe;
-	struct io_wq_work *cur_work;
-	spinlock_t lock;
-	struct callback_head rcu;
-	struct mm_struct___2 *mm;
-	const struct cred___2 *creds;
-	struct files_struct *restore_files;
-};
-
-struct io_wqe_acct {
-	unsigned int nr_workers;
-	unsigned int max_workers;
-	atomic_t nr_running;
-};
-
-struct io_wq___2;
-
-struct io_wqe {
-	struct {
-		spinlock_t lock;
-		struct io_wq_work_list work_list;
-		long unsigned int hash_map;
-		unsigned int flags;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	int node;
-	struct io_wqe_acct acct[2];
-	struct hlist_nulls_head free_list;
-	struct list_head all_list;
-	struct io_wq___2 *wq;
-};
-
-enum {
-	IO_WQ_ACCT_BOUND = 0,
-	IO_WQ_ACCT_UNBOUND = 1,
-};
-
-struct io_wq___2 {
-	struct io_wqe **wqes;
-	long unsigned int state;
-	get_work_fn *get_work;
-	put_work_fn *put_work;
-	struct task_struct___2 *manager;
-	struct user_struct *user;
-	const struct cred___2 *creds;
-	struct mm_struct___2 *mm;
-	refcount_t refs;
-	struct completion done;
-};
-
-struct io_cb_cancel_data {
-	struct io_wqe *wqe;
-	work_cancel_fn *cancel;
-	void *caller_data;
-};
-
-struct io_wq_flush_data {
-	struct io_wq_work work;
-	struct completion done;
-};
-
-struct flock64 {
-	short int l_type;
-	short int l_whence;
-	__kernel_loff_t l_start;
-	__kernel_loff_t l_len;
-	__kernel_pid_t l_pid;
-};
-
-struct trace_event_raw_locks_get_lock_context {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	unsigned char type;
-	struct file_lock_context *ctx;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lock {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_pid;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	loff_t fl_start;
-	loff_t fl_end;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_filelock_lease {
-	struct trace_entry ent;
-	struct file_lock *fl;
-	long unsigned int i_ino;
-	dev_t s_dev;
-	struct file_lock *fl_blocker;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	long unsigned int fl_break_time;
-	long unsigned int fl_downgrade_time;
-	char __data[0];
-};
-
-struct trace_event_raw_generic_add_lease {
-	struct trace_entry ent;
-	long unsigned int i_ino;
-	int wcount;
-	int rcount;
-	int icount;
-	dev_t s_dev;
-	fl_owner_t fl_owner;
-	unsigned int fl_flags;
-	unsigned char fl_type;
-	char __data[0];
-};
-
-struct trace_event_raw_leases_conflict {
-	struct trace_entry ent;
-	void *lease;
-	void *breaker;
-	unsigned int l_fl_flags;
-	unsigned int b_fl_flags;
-	unsigned char l_fl_type;
-	unsigned char b_fl_type;
-	bool conflict;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_locks_get_lock_context {};
-
-struct trace_event_data_offsets_filelock_lock {};
-
-struct trace_event_data_offsets_filelock_lease {};
-
-struct trace_event_data_offsets_generic_add_lease {};
-
-struct trace_event_data_offsets_leases_conflict {};
-
-typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode___2 *, int, struct file_lock_context *);
-
-typedef void (*btf_trace_posix_lock_inode)(void *, struct inode___2 *, struct file_lock *, int);
-
-typedef void (*btf_trace_fcntl_setlk)(void *, struct inode___2 *, struct file_lock *, int);
-
-typedef void (*btf_trace_locks_remove_posix)(void *, struct inode___2 *, struct file_lock *, int);
-
-typedef void (*btf_trace_flock_lock_inode)(void *, struct inode___2 *, struct file_lock *, int);
-
-typedef void (*btf_trace_break_lease_noblock)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_block)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_break_lease_unblock)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_generic_delete_lease)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_time_out_leases)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_generic_add_lease)(void *, struct inode___2 *, struct file_lock *);
-
-typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
-
-struct file_lock_list_struct {
-	spinlock_t lock;
-	struct hlist_head hlist;
-};
-
-struct locks_iterator {
-	int li_cpu;
-	loff_t li_pos;
-};
-
-struct nfs_string {
-	unsigned int len;
-	const char *data;
-};
-
-struct nfs4_mount_data {
-	int version;
-	int flags;
-	int rsize;
-	int wsize;
-	int timeo;
-	int retrans;
-	int acregmin;
-	int acregmax;
-	int acdirmin;
-	int acdirmax;
-	struct nfs_string client_addr;
-	struct nfs_string mnt_path;
-	struct nfs_string hostname;
-	unsigned int host_addrlen;
-	struct sockaddr *host_addr;
-	int proto;
-	int auth_flavourlen;
-	int *auth_flavours;
-};
-
-struct compat_nfs_string {
-	compat_uint_t len;
-	compat_uptr_t data;
-};
-
-struct compat_nfs4_mount_data_v1 {
-	compat_int_t version;
-	compat_int_t flags;
-	compat_int_t rsize;
-	compat_int_t wsize;
-	compat_int_t timeo;
-	compat_int_t retrans;
-	compat_int_t acregmin;
-	compat_int_t acregmax;
-	compat_int_t acdirmin;
-	compat_int_t acdirmax;
-	struct compat_nfs_string client_addr;
-	struct compat_nfs_string mnt_path;
-	struct compat_nfs_string hostname;
-	compat_uint_t host_addrlen;
-	compat_uptr_t host_addr;
-	compat_int_t proto;
-	compat_int_t auth_flavourlen;
-	compat_uptr_t auth_flavours;
-};
-
-enum {
-	VERBOSE_STATUS = 1,
-};
-
-enum {
-	Enabled = 0,
-	Magic = 1,
-};
-
-typedef struct {
-	struct list_head list;
-	long unsigned int flags;
-	int offset;
-	int size;
-	char *magic;
-	char *mask;
-	const char *interpreter;
-	char *name;
-	struct dentry *dentry;
-	struct file *interp_file;
-} Node;
-
-typedef unsigned int __kernel_uid_t;
-
-typedef unsigned int __kernel_gid_t;
-
-struct elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	long unsigned int pr_flag;
-	__kernel_uid_t pr_uid;
-	__kernel_gid_t pr_gid;
-	pid_t pr_pid;
-	pid_t pr_ppid;
-	pid_t pr_pgrp;
-	pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct arch_elf_state {};
-
-struct memelfnote {
-	const char *name;
-	int type;
-	unsigned int datasz;
-	void *data;
-};
-
-struct elf_thread_core_info {
-	struct elf_thread_core_info *next;
-	struct task_struct *task;
-	struct elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info {
-	struct elf_thread_core_info *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct elf32_shdr {
-	Elf32_Word sh_name;
-	Elf32_Word sh_type;
-	Elf32_Word sh_flags;
-	Elf32_Addr sh_addr;
-	Elf32_Off sh_offset;
-	Elf32_Word sh_size;
-	Elf32_Word sh_link;
-	Elf32_Word sh_info;
-	Elf32_Word sh_addralign;
-	Elf32_Word sh_entsize;
-};
-
-typedef struct user_regs_struct compat_elf_gregset_t;
-
-struct compat_elf_siginfo {
-	compat_int_t si_signo;
-	compat_int_t si_code;
-	compat_int_t si_errno;
-};
-
-struct compat_elf_prstatus {
-	struct compat_elf_siginfo pr_info;
-	short int pr_cursig;
-	compat_ulong_t pr_sigpend;
-	compat_ulong_t pr_sighold;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	struct old_timeval32 pr_utime;
-	struct old_timeval32 pr_stime;
-	struct old_timeval32 pr_cutime;
-	struct old_timeval32 pr_cstime;
-	compat_elf_gregset_t pr_reg;
-	compat_int_t pr_fpvalid;
-};
-
-struct compat_elf_prpsinfo {
-	char pr_state;
-	char pr_sname;
-	char pr_zomb;
-	char pr_nice;
-	compat_ulong_t pr_flag;
-	__compat_uid_t pr_uid;
-	__compat_gid_t pr_gid;
-	compat_pid_t pr_pid;
-	compat_pid_t pr_ppid;
-	compat_pid_t pr_pgrp;
-	compat_pid_t pr_sid;
-	char pr_fname[16];
-	char pr_psargs[80];
-};
-
-struct elf_thread_core_info___2 {
-	struct elf_thread_core_info___2 *next;
-	struct task_struct *task;
-	struct compat_elf_prstatus prstatus;
-	struct memelfnote notes[0];
-};
-
-struct elf_note_info___2 {
-	struct elf_thread_core_info___2 *thread;
-	struct memelfnote psinfo;
-	struct memelfnote signote;
-	struct memelfnote auxv;
-	struct memelfnote files;
-	compat_siginfo_t csigdata;
-	size_t size;
-	int thread_notes;
-};
-
-struct mb_cache_entry {
-	struct list_head e_list;
-	struct hlist_bl_node e_hash_list;
-	atomic_t e_refcnt;
-	u32 e_key;
-	u32 e_referenced: 1;
-	u32 e_reusable: 1;
-	u64 e_value;
-};
-
-struct mb_cache {
-	struct hlist_bl_head *c_hash;
-	int c_bucket_bits;
-	long unsigned int c_max_entries;
-	spinlock_t c_list_lock;
-	struct list_head c_list;
-	long unsigned int c_entry_count;
-	struct shrinker c_shrink;
-	struct work_struct c_shrink_work;
-};
-
-struct posix_acl_xattr_entry {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-};
-
-struct posix_acl_xattr_header {
-	__le32 a_version;
-};
-
-struct xdr_array2_desc;
-
-typedef int (*xdr_xcode_elem_t)(struct xdr_array2_desc *, void *);
-
-struct xdr_array2_desc {
-	unsigned int elem_size;
-	unsigned int array_len;
-	unsigned int array_maxlen;
-	xdr_xcode_elem_t xcode;
-};
-
-struct nfsacl_encode_desc {
-	struct xdr_array2_desc desc;
-	unsigned int count;
-	struct posix_acl *acl;
-	int typeflag;
-	kuid_t uid;
-	kgid_t gid;
-};
-
-struct nfsacl_simple_acl {
-	struct posix_acl acl;
-	struct posix_acl_entry ace[4];
-};
-
-struct nfsacl_decode_desc {
-	struct xdr_array2_desc desc;
-	unsigned int count;
-	struct posix_acl *acl;
-};
-
-struct lock_manager {
-	struct list_head list;
-	bool block_opens;
-};
-
-struct core_name {
-	char *corename;
-	int used;
-	int size;
-};
-
-struct trace_event_raw_iomap_readpage_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	int nr_pages;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_page_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	long unsigned int pgoff;
-	loff_t size;
-	long unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	u64 addr;
-	loff_t offset;
-	u64 length;
-	u16 type;
-	u16 flags;
-	dev_t bdev;
-	char __data[0];
-};
-
-struct trace_event_raw_iomap_apply {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	loff_t pos;
-	loff_t length;
-	unsigned int flags;
-	const void *ops;
-	void *actor;
-	long unsigned int caller;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iomap_readpage_class {};
-
-struct trace_event_data_offsets_iomap_page_class {};
-
-struct trace_event_data_offsets_iomap_class {};
-
-struct trace_event_data_offsets_iomap_apply {};
-
-typedef void (*btf_trace_iomap_readpage)(void *, struct inode___2 *, int);
-
-typedef void (*btf_trace_iomap_readpages)(void *, struct inode___2 *, int);
-
-typedef void (*btf_trace_iomap_writepage)(void *, struct inode___2 *, struct page___2 *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_releasepage)(void *, struct inode___2 *, struct page___2 *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode___2 *, struct page___2 *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode___2 *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode___2 *, struct iomap___2 *);
-
-typedef void (*btf_trace_iomap_apply)(void *, struct inode___2 *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);
-
-struct iomap_ops {
-	int (*iomap_begin)(struct inode___2 *, loff_t, loff_t, unsigned int, struct iomap___2 *, struct iomap___2 *);
-	int (*iomap_end)(struct inode___2 *, loff_t, loff_t, ssize_t, unsigned int, struct iomap___2 *);
-};
-
-typedef loff_t (*iomap_actor_t)(struct inode___2 *, loff_t, loff_t, void *, struct iomap___2 *, struct iomap___2 *);
-
-struct iomap_ioend {
-	struct list_head io_list;
-	u16 io_type;
-	u16 io_flags;
-	struct inode___2 *io_inode;
-	size_t io_size;
-	loff_t io_offset;
-	void *io_private;
-	struct bio *io_bio;
-	struct bio io_inline_bio;
-};
-
-struct iomap_writepage_ctx;
-
-struct iomap_writeback_ops {
-	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode___2 *, loff_t);
-	int (*prepare_ioend)(struct iomap_ioend *, int);
-	void (*discard_page)(struct page___2 *);
-};
-
-struct iomap_writepage_ctx {
-	struct iomap___2 iomap;
-	struct iomap_ioend *ioend;
-	const struct iomap_writeback_ops *ops;
-};
-
-struct iomap_page {
-	atomic_t read_count;
-	atomic_t write_count;
-	spinlock_t uptodate_lock;
-	long unsigned int uptodate[1];
-};
-
-struct iomap_readpage_ctx {
-	struct page___2 *cur_page;
-	bool cur_page_in_bio;
-	bool is_readahead;
-	struct bio *bio;
-	struct list_head *pages;
-};
-
-enum {
-	IOMAP_WRITE_F_UNSHARE = 1,
-};
-
-struct iomap_dio_ops {
-	int (*end_io)(struct kiocb___2 *, ssize_t, int, unsigned int);
-};
-
-struct iomap_dio {
-	struct kiocb___2 *iocb;
-	const struct iomap_dio_ops *dops;
-	loff_t i_size;
-	loff_t size;
-	atomic_t ref;
-	unsigned int flags;
-	int error;
-	bool wait_for_completion;
-	union {
-		struct {
-			struct iov_iter___2 *iter;
-			struct task_struct___2 *waiter;
-			struct request_queue *last_queue;
-			blk_qc_t cookie;
-		} submit;
-		struct {
-			struct work_struct work;
-		} aio;
-	};
-};
-
-struct fiemap_ctx {
-	struct fiemap_extent_info *fi;
-	struct iomap___2 prev;
-};
-
-struct iomap_swapfile_info {
-	struct iomap___2 iomap;
-	struct swap_info_struct *sis;
-	uint64_t lowest_ppage;
-	uint64_t highest_ppage;
-	long unsigned int nr_pages;
-	int nr_extents;
-};
-
-enum {
-	QIF_BLIMITS_B = 0,
-	QIF_SPACE_B = 1,
-	QIF_ILIMITS_B = 2,
-	QIF_INODES_B = 3,
-	QIF_BTIME_B = 4,
-	QIF_ITIME_B = 5,
-};
-
-enum {
-	DQF_ROOT_SQUASH_B = 0,
-	DQF_SYS_FILE_B = 16,
-	DQF_PRIVATE = 17,
-};
-
-typedef __kernel_uid32_t qid_t;
-
-enum {
-	DQF_INFO_DIRTY_B = 17,
-};
-
-enum {
-	DQST_LOOKUPS = 0,
-	DQST_DROPS = 1,
-	DQST_READS = 2,
-	DQST_WRITES = 3,
-	DQST_CACHE_HITS = 4,
-	DQST_ALLOC_DQUOTS = 5,
-	DQST_FREE_DQUOTS = 6,
-	DQST_SYNCS = 7,
-	_DQST_DQSTAT_LAST = 8,
-};
-
-enum {
-	_DQUOT_USAGE_ENABLED = 0,
-	_DQUOT_LIMITS_ENABLED = 1,
-	_DQUOT_SUSPENDED = 2,
-	_DQUOT_STATE_FLAGS = 3,
-};
-
-struct quota_module_name {
-	int qm_fmt_id;
-	char *qm_mod_name;
-};
-
-struct dquot_warn {
-	struct super_block___2 *w_sb;
-	struct kqid w_dq_id;
-	short int w_type;
-};
-
-struct qtree_fmt_operations {
-	void (*mem2disk_dqblk)(void *, struct dquot___2 *);
-	void (*disk2mem_dqblk)(struct dquot___2 *, void *);
-	int (*is_id)(void *, struct dquot___2 *);
-};
-
-struct qtree_mem_dqinfo {
-	struct super_block___2 *dqi_sb;
-	int dqi_type;
-	unsigned int dqi_blocks;
-	unsigned int dqi_free_blk;
-	unsigned int dqi_free_entry;
-	unsigned int dqi_blocksize_bits;
-	unsigned int dqi_entry_size;
-	unsigned int dqi_usable_bs;
-	unsigned int dqi_qtree_depth;
-	const struct qtree_fmt_operations *dqi_ops;
-};
-
-struct v2_disk_dqheader {
-	__le32 dqh_magic;
-	__le32 dqh_version;
-};
-
-struct v2r0_disk_dqblk {
-	__le32 dqb_id;
-	__le32 dqb_ihardlimit;
-	__le32 dqb_isoftlimit;
-	__le32 dqb_curinodes;
-	__le32 dqb_bhardlimit;
-	__le32 dqb_bsoftlimit;
-	__le64 dqb_curspace;
-	__le64 dqb_btime;
-	__le64 dqb_itime;
-};
-
-struct v2r1_disk_dqblk {
-	__le32 dqb_id;
-	__le32 dqb_pad;
-	__le64 dqb_ihardlimit;
-	__le64 dqb_isoftlimit;
-	__le64 dqb_curinodes;
-	__le64 dqb_bhardlimit;
-	__le64 dqb_bsoftlimit;
-	__le64 dqb_curspace;
-	__le64 dqb_btime;
-	__le64 dqb_itime;
-};
-
-struct v2_disk_dqinfo {
-	__le32 dqi_bgrace;
-	__le32 dqi_igrace;
-	__le32 dqi_flags;
-	__le32 dqi_blocks;
-	__le32 dqi_free_blk;
-	__le32 dqi_free_entry;
-};
-
-struct qt_disk_dqdbheader {
-	__le32 dqdh_next_free;
-	__le32 dqdh_prev_free;
-	__le16 dqdh_entries;
-	__le16 dqdh_pad1;
-	__le32 dqdh_pad2;
-};
-
-struct fs_disk_quota {
-	__s8 d_version;
-	__s8 d_flags;
-	__u16 d_fieldmask;
-	__u32 d_id;
-	__u64 d_blk_hardlimit;
-	__u64 d_blk_softlimit;
-	__u64 d_ino_hardlimit;
-	__u64 d_ino_softlimit;
-	__u64 d_bcount;
-	__u64 d_icount;
-	__s32 d_itimer;
-	__s32 d_btimer;
-	__u16 d_iwarns;
-	__u16 d_bwarns;
-	__s32 d_padding2;
-	__u64 d_rtb_hardlimit;
-	__u64 d_rtb_softlimit;
-	__u64 d_rtbcount;
-	__s32 d_rtbtimer;
-	__u16 d_rtbwarns;
-	__s16 d_padding3;
-	char d_padding4[8];
-};
-
-struct fs_qfilestat {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-};
-
-typedef struct fs_qfilestat fs_qfilestat_t;
-
-struct fs_quota_stat {
-	__s8 qs_version;
-	__u16 qs_flags;
-	__s8 qs_pad;
-	fs_qfilestat_t qs_uquota;
-	fs_qfilestat_t qs_gquota;
-	__u32 qs_incoredqs;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-};
-
-struct fs_qfilestatv {
-	__u64 qfs_ino;
-	__u64 qfs_nblks;
-	__u32 qfs_nextents;
-	__u32 qfs_pad;
-};
-
-struct fs_quota_statv {
-	__s8 qs_version;
-	__u8 qs_pad1;
-	__u16 qs_flags;
-	__u32 qs_incoredqs;
-	struct fs_qfilestatv qs_uquota;
-	struct fs_qfilestatv qs_gquota;
-	struct fs_qfilestatv qs_pquota;
-	__s32 qs_btimelimit;
-	__s32 qs_itimelimit;
-	__s32 qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-	__u64 qs_pad2[8];
-};
-
-struct if_dqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-};
-
-struct if_nextdqblk {
-	__u64 dqb_bhardlimit;
-	__u64 dqb_bsoftlimit;
-	__u64 dqb_curspace;
-	__u64 dqb_ihardlimit;
-	__u64 dqb_isoftlimit;
-	__u64 dqb_curinodes;
-	__u64 dqb_btime;
-	__u64 dqb_itime;
-	__u32 dqb_valid;
-	__u32 dqb_id;
-};
-
-struct if_dqinfo {
-	__u64 dqi_bgrace;
-	__u64 dqi_igrace;
-	__u32 dqi_flags;
-	__u32 dqi_valid;
-};
-
-struct compat_if_dqblk {
-	compat_u64 dqb_bhardlimit;
-	compat_u64 dqb_bsoftlimit;
-	compat_u64 dqb_curspace;
-	compat_u64 dqb_ihardlimit;
-	compat_u64 dqb_isoftlimit;
-	compat_u64 dqb_curinodes;
-	compat_u64 dqb_btime;
-	compat_u64 dqb_itime;
-	compat_uint_t dqb_valid;
-} __attribute__((packed));
-
-struct compat_fs_qfilestat {
-	compat_u64 dqb_bhardlimit;
-	compat_u64 qfs_nblks;
-	compat_uint_t qfs_nextents;
-} __attribute__((packed));
-
-struct compat_fs_quota_stat {
-	__s8 qs_version;
-	char: 8;
-	__u16 qs_flags;
-	__s8 qs_pad;
-	int: 24;
-	struct compat_fs_qfilestat qs_uquota;
-	struct compat_fs_qfilestat qs_gquota;
-	compat_uint_t qs_incoredqs;
-	compat_int_t qs_btimelimit;
-	compat_int_t qs_itimelimit;
-	compat_int_t qs_rtbtimelimit;
-	__u16 qs_bwarnlimit;
-	__u16 qs_iwarnlimit;
-} __attribute__((packed));
-
-enum {
-	QUOTA_NL_C_UNSPEC = 0,
-	QUOTA_NL_C_WARNING = 1,
-	__QUOTA_NL_C_MAX = 2,
-};
-
-enum {
-	QUOTA_NL_A_UNSPEC = 0,
-	QUOTA_NL_A_QTYPE = 1,
-	QUOTA_NL_A_EXCESS_ID = 2,
-	QUOTA_NL_A_WARNING = 3,
-	QUOTA_NL_A_DEV_MAJOR = 4,
-	QUOTA_NL_A_DEV_MINOR = 5,
-	QUOTA_NL_A_CAUSED_ID = 6,
-	QUOTA_NL_A_PAD = 7,
-	__QUOTA_NL_A_MAX = 8,
-};
-
-struct proc_maps_private {
-	struct inode___2 *inode;
-	struct task_struct *task;
-	struct mm_struct *mm;
-	struct vm_area_struct *tail_vma;
-	struct mempolicy *task_mempolicy;
-};
-
-struct mem_size_stats {
-	long unsigned int resident;
-	long unsigned int shared_clean;
-	long unsigned int shared_dirty;
-	long unsigned int private_clean;
-	long unsigned int private_dirty;
-	long unsigned int referenced;
-	long unsigned int anonymous;
-	long unsigned int lazyfree;
-	long unsigned int anonymous_thp;
-	long unsigned int shmem_thp;
-	long unsigned int file_thp;
-	long unsigned int swap;
-	long unsigned int shared_hugetlb;
-	long unsigned int private_hugetlb;
-	u64 pss;
-	u64 pss_anon;
-	u64 pss_file;
-	u64 pss_shmem;
-	u64 pss_locked;
-	u64 swap_pss;
-	bool check_shmem_swap;
-};
-
-enum clear_refs_types {
-	CLEAR_REFS_ALL = 1,
-	CLEAR_REFS_ANON = 2,
-	CLEAR_REFS_MAPPED = 3,
-	CLEAR_REFS_SOFT_DIRTY = 4,
-	CLEAR_REFS_MM_HIWATER_RSS = 5,
-	CLEAR_REFS_LAST = 6,
-};
-
-struct clear_refs_private {
-	enum clear_refs_types type;
-};
-
-typedef struct {
-	u64 pme;
-} pagemap_entry_t;
-
-struct pagemapread {
-	int pos;
-	int len;
-	pagemap_entry_t *buffer;
-	bool show_pfn;
-};
-
-struct numa_maps {
-	long unsigned int pages;
-	long unsigned int anon;
-	long unsigned int active;
-	long unsigned int writeback;
-	long unsigned int mapcount_max;
-	long unsigned int dirty;
-	long unsigned int swapcache;
-	long unsigned int node[64];
-};
-
-struct numa_maps_private {
-	struct proc_maps_private proc_maps;
-	struct numa_maps md;
-};
-
-enum {
-	HIDEPID_OFF = 0,
-	HIDEPID_NO_ACCESS = 1,
-	HIDEPID_INVISIBLE = 2,
-};
-
-struct pde_opener {
-	struct list_head lh;
-	struct file___2 *file;
-	bool closing;
-	struct completion *c;
-};
-
-enum {
-	BIAS = 2147483648,
-};
-
-typedef int (*proc_write_t___2)(struct file *, char *, size_t);
-
-struct proc_fs_context {
-	struct pid_namespace *pid_ns;
-	unsigned int mask;
-	int hidepid;
-	int gid;
-};
-
-enum proc_param {
-	Opt_gid___2 = 0,
-	Opt_hidepid = 1,
-};
-
-struct genradix_root;
-
-struct __genradix {
-	struct genradix_root *root;
-};
-
-struct syscall_info {
-	__u64 sp;
-	struct seccomp_data data;
-};
-
-typedef struct dentry___2 *instantiate_t(struct dentry___2 *, struct task_struct *, const void *);
-
-struct pid_entry {
-	const char *name;
-	unsigned int len;
-	umode_t mode;
-	const struct inode_operations___2 *iop;
-	const struct file_operations *fop;
-	union proc_op op;
-};
-
-struct limit_names {
-	const char *name;
-	const char *unit;
-};
-
-struct map_files_info {
-	long unsigned int start;
-	long unsigned int end;
-	fmode_t mode;
-};
-
-struct tgid_iter {
-	unsigned int tgid;
-	struct task_struct *task;
-};
-
-struct fd_data {
-	fmode_t mode;
-	unsigned int fd;
-};
-
-struct seq_net_private {
-	struct net *net;
-};
-
-struct vmcore {
-	struct list_head list;
-	long long unsigned int paddr;
-	long long unsigned int size;
-	loff_t offset;
-};
-
-typedef struct elf64_note Elf64_Nhdr;
-
-struct kernfs_iattrs {
-	kuid_t ia_uid;
-	kgid_t ia_gid;
-	struct timespec64 ia_atime;
-	struct timespec64 ia_mtime;
-	struct timespec64 ia_ctime;
-	struct simple_xattrs xattrs;
-};
-
-struct kernfs_super_info {
-	struct super_block *sb;
-	struct kernfs_root___2 *root;
-	const void *ns;
-	struct list_head node;
-};
-
-enum kernfs_node_flag {
-	KERNFS_ACTIVATED = 16,
-	KERNFS_NS = 32,
-	KERNFS_HAS_SEQ_SHOW = 64,
-	KERNFS_HAS_MMAP = 128,
-	KERNFS_LOCKDEP = 256,
-	KERNFS_SUICIDAL = 1024,
-	KERNFS_SUICIDED = 2048,
-	KERNFS_EMPTY_DIR = 4096,
-	KERNFS_HAS_RELEASE = 8192,
-};
-
-struct kernfs_open_node {
-	atomic_t refcnt;
-	atomic_t event;
-	wait_queue_head_t poll;
-	struct list_head files;
-};
-
-struct pts_mount_opts {
-	int setuid;
-	int setgid;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-	umode_t ptmxmode;
-	int reserve;
-	int max;
-};
-
-enum {
-	Opt_uid___2 = 0,
-	Opt_gid___3 = 1,
-	Opt_mode___2 = 2,
-	Opt_ptmxmode = 3,
-	Opt_newinstance = 4,
-	Opt_max = 5,
-	Opt_err = 6,
-};
-
-struct pts_fs_info {
-	struct ida allocated_ptys;
-	struct pts_mount_opts mount_opts;
-	struct super_block___2 *sb;
-	struct dentry___2 *ptmx_dentry;
-};
-
-struct dcookie_struct {
-	struct path___2 path;
-	struct list_head hash_list;
-};
-
-struct dcookie_user {
-	struct list_head next;
-};
-
-typedef unsigned int tid_t;
-
-struct transaction_chp_stats_s {
-	long unsigned int cs_chp_time;
-	__u32 cs_forced_to_close;
-	__u32 cs_written;
-	__u32 cs_dropped;
-};
-
-struct journal_s;
-
-typedef struct journal_s journal_t;
-
-struct journal_head;
-
-struct transaction_s;
-
-typedef struct transaction_s transaction_t;
-
-struct transaction_s {
-	journal_t *t_journal;
-	tid_t t_tid;
-	enum {
-		T_RUNNING = 0,
-		T_LOCKED = 1,
-		T_SWITCH = 2,
-		T_FLUSH = 3,
-		T_COMMIT = 4,
-		T_COMMIT_DFLUSH = 5,
-		T_COMMIT_JFLUSH = 6,
-		T_COMMIT_CALLBACK = 7,
-		T_FINISHED = 8,
-	} t_state;
-	long unsigned int t_log_start;
-	int t_nr_buffers;
-	struct journal_head *t_reserved_list;
-	struct journal_head *t_buffers;
-	struct journal_head *t_forget;
-	struct journal_head *t_checkpoint_list;
-	struct journal_head *t_checkpoint_io_list;
-	struct journal_head *t_shadow_list;
-	struct list_head t_inode_list;
-	spinlock_t t_handle_lock;
-	long unsigned int t_max_wait;
-	long unsigned int t_start;
-	long unsigned int t_requested;
-	struct transaction_chp_stats_s t_chp_stats;
-	atomic_t t_updates;
-	atomic_t t_outstanding_credits;
-	atomic_t t_outstanding_revokes;
-	atomic_t t_handle_count;
-	transaction_t *t_cpnext;
-	transaction_t *t_cpprev;
-	long unsigned int t_expires;
-	ktime_t t_start_time;
-	unsigned int t_synchronous_commit: 1;
-	int t_need_data_flush;
-	struct list_head t_private_list;
-};
-
-struct jbd2_buffer_trigger_type;
-
-struct journal_head {
-	struct buffer_head *b_bh;
-	spinlock_t b_state_lock;
-	int b_jcount;
-	unsigned int b_jlist;
-	unsigned int b_modified;
-	char *b_frozen_data;
-	char *b_committed_data;
-	transaction_t *b_transaction;
-	transaction_t *b_next_transaction;
-	struct journal_head *b_tnext;
-	struct journal_head *b_tprev;
-	transaction_t *b_cp_transaction;
-	struct journal_head *b_cpnext;
-	struct journal_head *b_cpprev;
-	struct jbd2_buffer_trigger_type *b_triggers;
-	struct jbd2_buffer_trigger_type *b_frozen_triggers;
-};
-
-struct jbd2_buffer_trigger_type {
-	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
-	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
-};
-
-struct crypto_tfm;
-
-struct cipher_tfm {
-	int (*cit_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cit_encrypt_one)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cit_decrypt_one)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_tfm {
-	int (*cot_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*cot_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_alg;
-
-struct crypto_tfm {
-	u32 crt_flags;
-	union {
-		struct cipher_tfm cipher;
-		struct compress_tfm compress;
-	} crt_u;
-	void (*exit)(struct crypto_tfm *);
-	struct crypto_alg *__crt_alg;
-	void *__crt_ctx[0];
-};
-
-struct cipher_alg {
-	unsigned int cia_min_keysize;
-	unsigned int cia_max_keysize;
-	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_alg {
-	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_type;
-
-struct crypto_alg {
-	struct list_head cra_list;
-	struct list_head cra_users;
-	u32 cra_flags;
-	unsigned int cra_blocksize;
-	unsigned int cra_ctxsize;
-	unsigned int cra_alignmask;
-	int cra_priority;
-	refcount_t cra_refcnt;
-	char cra_name[128];
-	char cra_driver_name[128];
-	const struct crypto_type *cra_type;
-	union {
-		struct cipher_alg cipher;
-		struct compress_alg compress;
-	} cra_u;
-	int (*cra_init)(struct crypto_tfm *);
-	void (*cra_exit)(struct crypto_tfm *);
-	void (*cra_destroy)(struct crypto_alg *);
-	struct module___2 *cra_module;
-};
-
-struct crypto_instance;
-
-struct crypto_type {
-	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
-	unsigned int (*extsize)(struct crypto_alg *);
-	int (*init)(struct crypto_tfm *, u32, u32);
-	int (*init_tfm)(struct crypto_tfm *);
-	void (*show)(struct seq_file *, struct crypto_alg *);
-	int (*report)(struct sk_buff *, struct crypto_alg *);
-	void (*free)(struct crypto_instance *);
-	unsigned int type;
-	unsigned int maskclear;
-	unsigned int maskset;
-	unsigned int tfmsize;
-};
-
-struct crypto_shash {
-	unsigned int descsize;
-	struct crypto_tfm base;
-};
-
-struct jbd2_journal_handle;
-
-typedef struct jbd2_journal_handle handle_t;
-
-struct jbd2_journal_handle {
-	union {
-		transaction_t *h_transaction;
-		journal_t *h_journal;
-	};
-	handle_t *h_rsv_handle;
-	int h_total_credits;
-	int h_revoke_credits;
-	int h_revoke_credits_requested;
-	int h_ref;
-	int h_err;
-	unsigned int h_sync: 1;
-	unsigned int h_jdata: 1;
-	unsigned int h_reserved: 1;
-	unsigned int h_aborted: 1;
-	unsigned int h_type: 8;
-	unsigned int h_line_no: 16;
-	long unsigned int h_start_jiffies;
-	unsigned int h_requested_credits;
-	unsigned int saved_alloc_context;
-};
-
-struct transaction_run_stats_s {
-	long unsigned int rs_wait;
-	long unsigned int rs_request_delay;
-	long unsigned int rs_running;
-	long unsigned int rs_locked;
-	long unsigned int rs_flushing;
-	long unsigned int rs_logging;
-	__u32 rs_handle_count;
-	__u32 rs_blocks;
-	__u32 rs_blocks_logged;
-};
-
-struct transaction_stats_s {
-	long unsigned int ts_tid;
-	long unsigned int ts_requested;
-	struct transaction_run_stats_s run;
-};
-
-struct journal_superblock_s;
-
-typedef struct journal_superblock_s journal_superblock_t;
-
-struct jbd2_revoke_table_s;
-
-struct journal_s {
-	long unsigned int j_flags;
-	int j_errno;
-	struct buffer_head *j_sb_buffer;
-	journal_superblock_t *j_superblock;
-	int j_format_version;
-	rwlock_t j_state_lock;
-	int j_barrier_count;
-	struct mutex j_barrier;
-	transaction_t *j_running_transaction;
-	transaction_t *j_committing_transaction;
-	transaction_t *j_checkpoint_transactions;
-	wait_queue_head_t j_wait_transaction_locked;
-	wait_queue_head_t j_wait_done_commit;
-	wait_queue_head_t j_wait_commit;
-	wait_queue_head_t j_wait_updates;
-	wait_queue_head_t j_wait_reserved;
-	struct mutex j_checkpoint_mutex;
-	struct buffer_head *j_chkpt_bhs[64];
-	long unsigned int j_head;
-	long unsigned int j_tail;
-	long unsigned int j_free;
-	long unsigned int j_first;
-	long unsigned int j_last;
-	struct block_device *j_dev;
-	int j_blocksize;
-	long long unsigned int j_blk_offset;
-	char j_devname[56];
-	struct block_device *j_fs_dev;
-	unsigned int j_maxlen;
-	atomic_t j_reserved_credits;
-	spinlock_t j_list_lock;
-	struct inode___2 *j_inode;
-	tid_t j_tail_sequence;
-	tid_t j_transaction_sequence;
-	tid_t j_commit_sequence;
-	tid_t j_commit_request;
-	__u8 j_uuid[16];
-	struct task_struct___2 *j_task;
-	int j_max_transaction_buffers;
-	int j_revoke_records_per_block;
-	long unsigned int j_commit_interval;
-	struct timer_list j_commit_timer;
-	spinlock_t j_revoke_lock;
-	struct jbd2_revoke_table_s *j_revoke;
-	struct jbd2_revoke_table_s *j_revoke_table[2];
-	struct buffer_head **j_wbuf;
-	int j_wbufsize;
-	pid_t j_last_sync_writer;
-	u64 j_average_commit_time;
-	u32 j_min_batch_time;
-	u32 j_max_batch_time;
-	void (*j_commit_callback)(journal_t *, transaction_t *);
-	spinlock_t j_history_lock;
-	struct proc_dir_entry *j_proc_entry;
-	struct transaction_stats_s j_stats;
-	unsigned int j_failed_commit;
-	void *j_private;
-	struct crypto_shash *j_chksum_driver;
-	__u32 j_csum_seed;
-};
-
-struct journal_header_s {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-};
-
-typedef struct journal_header_s journal_header_t;
-
-struct journal_superblock_s {
-	journal_header_t s_header;
-	__be32 s_blocksize;
-	__be32 s_maxlen;
-	__be32 s_first;
-	__be32 s_sequence;
-	__be32 s_start;
-	__be32 s_errno;
-	__be32 s_feature_compat;
-	__be32 s_feature_incompat;
-	__be32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	__be32 s_nr_users;
-	__be32 s_dynsuper;
-	__be32 s_max_transaction;
-	__be32 s_max_trans_data;
-	__u8 s_checksum_type;
-	__u8 s_padding2[3];
-	__u32 s_padding[42];
-	__be32 s_checksum;
-	__u8 s_users[768];
-};
-
-enum jbd_state_bits {
-	BH_JBD = 17,
-	BH_JWrite = 18,
-	BH_Freed = 19,
-	BH_Revoked = 20,
-	BH_RevokeValid = 21,
-	BH_JBDDirty = 22,
-	BH_JournalHead = 23,
-	BH_Shadow = 24,
-	BH_Verified = 25,
-	BH_JBDPrivateStart = 26,
-};
-
-struct jbd2_inode {
-	transaction_t *i_transaction;
-	transaction_t *i_next_transaction;
-	struct list_head i_list;
-	struct inode___2 *i_vfs_inode;
-	long unsigned int i_flags;
-	loff_t i_dirty_start;
-	loff_t i_dirty_end;
-};
-
-struct bgl_lock {
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blockgroup_lock {
-	struct bgl_lock locks[128];
-};
-
-struct fsverity_operations {
-	int (*begin_enable_verity)(struct file___2 *);
-	int (*end_enable_verity)(struct file___2 *, const void *, size_t, u64);
-	int (*get_verity_descriptor)(struct inode___2 *, void *, size_t);
-	struct page___2 * (*read_merkle_tree_page)(struct inode___2 *, long unsigned int);
-	int (*write_merkle_tree_block)(struct inode___2 *, const void *, u64, int);
-};
-
-typedef int ext4_grpblk_t;
-
-typedef long long unsigned int ext4_fsblk_t;
-
-typedef __u32 ext4_lblk_t;
-
-typedef unsigned int ext4_group_t;
-
-struct ext4_allocation_request {
-	struct inode___2 *inode;
-	unsigned int len;
-	ext4_lblk_t logical;
-	ext4_lblk_t lleft;
-	ext4_lblk_t lright;
-	ext4_fsblk_t goal;
-	ext4_fsblk_t pleft;
-	ext4_fsblk_t pright;
-	unsigned int flags;
-};
-
-struct ext4_system_blocks {
-	struct rb_root root;
-	struct callback_head rcu;
-};
-
-struct ext4_group_desc {
-	__le32 bg_block_bitmap_lo;
-	__le32 bg_inode_bitmap_lo;
-	__le32 bg_inode_table_lo;
-	__le16 bg_free_blocks_count_lo;
-	__le16 bg_free_inodes_count_lo;
-	__le16 bg_used_dirs_count_lo;
-	__le16 bg_flags;
-	__le32 bg_exclude_bitmap_lo;
-	__le16 bg_block_bitmap_csum_lo;
-	__le16 bg_inode_bitmap_csum_lo;
-	__le16 bg_itable_unused_lo;
-	__le16 bg_checksum;
-	__le32 bg_block_bitmap_hi;
-	__le32 bg_inode_bitmap_hi;
-	__le32 bg_inode_table_hi;
-	__le16 bg_free_blocks_count_hi;
-	__le16 bg_free_inodes_count_hi;
-	__le16 bg_used_dirs_count_hi;
-	__le16 bg_itable_unused_hi;
-	__le32 bg_exclude_bitmap_hi;
-	__le16 bg_block_bitmap_csum_hi;
-	__le16 bg_inode_bitmap_csum_hi;
-	__u32 bg_reserved;
-};
-
-struct flex_groups {
-	atomic64_t free_clusters;
-	atomic_t free_inodes;
-	atomic_t used_dirs;
-};
-
-struct extent_status {
-	struct rb_node rb_node;
-	ext4_lblk_t es_lblk;
-	ext4_lblk_t es_len;
-	ext4_fsblk_t es_pblk;
-};
-
-struct ext4_es_tree {
-	struct rb_root root;
-	struct extent_status *cache_es;
-};
-
-struct ext4_es_stats {
-	long unsigned int es_stats_shrunk;
-	struct percpu_counter es_stats_cache_hits;
-	struct percpu_counter es_stats_cache_misses;
-	u64 es_stats_scan_time;
-	u64 es_stats_max_scan_time;
-	struct percpu_counter es_stats_all_cnt;
-	struct percpu_counter es_stats_shk_cnt;
-};
-
-struct ext4_pending_tree {
-	struct rb_root root;
-};
-
-struct ext4_inode_info {
-	__le32 i_data[15];
-	__u32 i_dtime;
-	ext4_fsblk_t i_file_acl;
-	ext4_group_t i_block_group;
-	ext4_lblk_t i_dir_start_lookup;
-	long unsigned int i_flags;
-	struct rw_semaphore xattr_sem;
-	struct list_head i_orphan;
-	loff_t i_disksize;
-	struct rw_semaphore i_data_sem;
-	struct rw_semaphore i_mmap_sem;
-	struct inode___2 vfs_inode;
-	struct jbd2_inode *jinode;
-	spinlock_t i_raw_lock;
-	struct timespec64 i_crtime;
-	struct list_head i_prealloc_list;
-	spinlock_t i_prealloc_lock;
-	struct ext4_es_tree i_es_tree;
-	rwlock_t i_es_lock;
-	struct list_head i_es_list;
-	unsigned int i_es_all_nr;
-	unsigned int i_es_shk_nr;
-	ext4_lblk_t i_es_shrink_lblk;
-	ext4_group_t i_last_alloc_group;
-	unsigned int i_reserved_data_blocks;
-	ext4_lblk_t i_da_metadata_calc_last_lblock;
-	int i_da_metadata_calc_len;
-	struct ext4_pending_tree i_pending_tree;
-	__u16 i_extra_isize;
-	u16 i_inline_off;
-	u16 i_inline_size;
-	qsize_t i_reserved_quota;
-	spinlock_t i_completed_io_lock;
-	struct list_head i_rsv_conversion_list;
-	struct work_struct i_rsv_conversion_work;
-	atomic_t i_unwritten;
-	spinlock_t i_block_reservation_lock;
-	tid_t i_sync_tid;
-	tid_t i_datasync_tid;
-	struct dquot *i_dquot[3];
-	__u32 i_csum_seed;
-	kprojid_t i_projid;
-};
-
-struct ext4_super_block {
-	__le32 s_inodes_count;
-	__le32 s_blocks_count_lo;
-	__le32 s_r_blocks_count_lo;
-	__le32 s_free_blocks_count_lo;
-	__le32 s_free_inodes_count;
-	__le32 s_first_data_block;
-	__le32 s_log_block_size;
-	__le32 s_log_cluster_size;
-	__le32 s_blocks_per_group;
-	__le32 s_clusters_per_group;
-	__le32 s_inodes_per_group;
-	__le32 s_mtime;
-	__le32 s_wtime;
-	__le16 s_mnt_count;
-	__le16 s_max_mnt_count;
-	__le16 s_magic;
-	__le16 s_state;
-	__le16 s_errors;
-	__le16 s_minor_rev_level;
-	__le32 s_lastcheck;
-	__le32 s_checkinterval;
-	__le32 s_creator_os;
-	__le32 s_rev_level;
-	__le16 s_def_resuid;
-	__le16 s_def_resgid;
-	__le32 s_first_ino;
-	__le16 s_inode_size;
-	__le16 s_block_group_nr;
-	__le32 s_feature_compat;
-	__le32 s_feature_incompat;
-	__le32 s_feature_ro_compat;
-	__u8 s_uuid[16];
-	char s_volume_name[16];
-	char s_last_mounted[64];
-	__le32 s_algorithm_usage_bitmap;
-	__u8 s_prealloc_blocks;
-	__u8 s_prealloc_dir_blocks;
-	__le16 s_reserved_gdt_blocks;
-	__u8 s_journal_uuid[16];
-	__le32 s_journal_inum;
-	__le32 s_journal_dev;
-	__le32 s_last_orphan;
-	__le32 s_hash_seed[4];
-	__u8 s_def_hash_version;
-	__u8 s_jnl_backup_type;
-	__le16 s_desc_size;
-	__le32 s_default_mount_opts;
-	__le32 s_first_meta_bg;
-	__le32 s_mkfs_time;
-	__le32 s_jnl_blocks[17];
-	__le32 s_blocks_count_hi;
-	__le32 s_r_blocks_count_hi;
-	__le32 s_free_blocks_count_hi;
-	__le16 s_min_extra_isize;
-	__le16 s_want_extra_isize;
-	__le32 s_flags;
-	__le16 s_raid_stride;
-	__le16 s_mmp_update_interval;
-	__le64 s_mmp_block;
-	__le32 s_raid_stripe_width;
-	__u8 s_log_groups_per_flex;
-	__u8 s_checksum_type;
-	__u8 s_encryption_level;
-	__u8 s_reserved_pad;
-	__le64 s_kbytes_written;
-	__le32 s_snapshot_inum;
-	__le32 s_snapshot_id;
-	__le64 s_snapshot_r_blocks_count;
-	__le32 s_snapshot_list;
-	__le32 s_error_count;
-	__le32 s_first_error_time;
-	__le32 s_first_error_ino;
-	__le64 s_first_error_block;
-	__u8 s_first_error_func[32];
-	__le32 s_first_error_line;
-	__le32 s_last_error_time;
-	__le32 s_last_error_ino;
-	__le32 s_last_error_line;
-	__le64 s_last_error_block;
-	__u8 s_last_error_func[32];
-	__u8 s_mount_opts[64];
-	__le32 s_usr_quota_inum;
-	__le32 s_grp_quota_inum;
-	__le32 s_overhead_clusters;
-	__le32 s_backup_bgs[2];
-	__u8 s_encrypt_algos[4];
-	__u8 s_encrypt_pw_salt[16];
-	__le32 s_lpf_ino;
-	__le32 s_prj_quota_inum;
-	__le32 s_checksum_seed;
-	__u8 s_wtime_hi;
-	__u8 s_mtime_hi;
-	__u8 s_mkfs_time_hi;
-	__u8 s_lastcheck_hi;
-	__u8 s_first_error_time_hi;
-	__u8 s_last_error_time_hi;
-	__u8 s_pad[2];
-	__le16 s_encoding;
-	__le16 s_encoding_flags;
-	__le32 s_reserved[95];
-	__le32 s_checksum;
-};
-
-struct mb_cache___2;
-
-struct ext4_group_info;
-
-struct ext4_locality_group;
-
-struct ext4_li_request;
-
-struct ext4_sb_info {
-	long unsigned int s_desc_size;
-	long unsigned int s_inodes_per_block;
-	long unsigned int s_blocks_per_group;
-	long unsigned int s_clusters_per_group;
-	long unsigned int s_inodes_per_group;
-	long unsigned int s_itb_per_group;
-	long unsigned int s_gdb_count;
-	long unsigned int s_desc_per_block;
-	ext4_group_t s_groups_count;
-	ext4_group_t s_blockfile_groups;
-	long unsigned int s_overhead;
-	unsigned int s_cluster_ratio;
-	unsigned int s_cluster_bits;
-	loff_t s_bitmap_maxbytes;
-	struct buffer_head *s_sbh;
-	struct ext4_super_block *s_es;
-	struct buffer_head **s_group_desc;
-	unsigned int s_mount_opt;
-	unsigned int s_mount_opt2;
-	unsigned int s_mount_flags;
-	unsigned int s_def_mount_opt;
-	ext4_fsblk_t s_sb_block;
-	atomic64_t s_resv_clusters;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	short unsigned int s_mount_state;
-	short unsigned int s_pad;
-	int s_addr_per_block_bits;
-	int s_desc_per_block_bits;
-	int s_inode_size;
-	int s_first_ino;
-	unsigned int s_inode_readahead_blks;
-	unsigned int s_inode_goal;
-	u32 s_hash_seed[4];
-	int s_def_hash_version;
-	int s_hash_unsigned;
-	struct percpu_counter s_freeclusters_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
-	struct percpu_counter s_dirtyclusters_counter;
-	struct blockgroup_lock *s_blockgroup_lock;
-	struct proc_dir_entry *s_proc;
-	struct kobject___2 s_kobj;
-	struct completion s_kobj_unregister;
-	struct super_block *s_sb;
-	struct journal_s *s_journal;
-	struct list_head s_orphan;
-	struct mutex s_orphan_lock;
-	long unsigned int s_ext4_flags;
-	long unsigned int s_commit_interval;
-	u32 s_max_batch_time;
-	u32 s_min_batch_time;
-	struct block_device *journal_bdev;
-	char *s_qf_names[3];
-	int s_jquota_fmt;
-	unsigned int s_want_extra_isize;
-	struct ext4_system_blocks *system_blks;
-	struct ext4_group_info ***s_group_info;
-	struct inode___2 *s_buddy_cache;
-	spinlock_t s_md_lock;
-	short unsigned int *s_mb_offsets;
-	unsigned int *s_mb_maxs;
-	unsigned int s_group_info_size;
-	unsigned int s_mb_free_pending;
-	struct list_head s_freed_data_list;
-	long unsigned int s_stripe;
-	unsigned int s_mb_stream_request;
-	unsigned int s_mb_max_to_scan;
-	unsigned int s_mb_min_to_scan;
-	unsigned int s_mb_stats;
-	unsigned int s_mb_order2_reqs;
-	unsigned int s_mb_group_prealloc;
-	unsigned int s_max_dir_size_kb;
-	long unsigned int s_mb_last_group;
-	long unsigned int s_mb_last_start;
-	atomic_t s_bal_reqs;
-	atomic_t s_bal_success;
-	atomic_t s_bal_allocated;
-	atomic_t s_bal_ex_scanned;
-	atomic_t s_bal_goals;
-	atomic_t s_bal_breaks;
-	atomic_t s_bal_2orders;
-	spinlock_t s_bal_lock;
-	long unsigned int s_mb_buddies_generated;
-	long long unsigned int s_mb_generation_time;
-	atomic_t s_mb_lost_chunks;
-	atomic_t s_mb_preallocated;
-	atomic_t s_mb_discarded;
-	atomic_t s_lock_busy;
-	struct ext4_locality_group *s_locality_groups;
-	long unsigned int s_sectors_written_start;
-	u64 s_kbytes_written;
-	unsigned int s_extent_max_zeroout_kb;
-	unsigned int s_log_groups_per_flex;
-	struct flex_groups *s_flex_groups;
-	ext4_group_t s_flex_groups_allocated;
-	struct workqueue_struct *rsv_conversion_wq;
-	struct timer_list s_err_report;
-	struct ext4_li_request *s_li_request;
-	unsigned int s_li_wait_mult;
-	struct task_struct___2 *s_mmp_tsk;
-	atomic_t s_last_trim_minblks;
-	struct crypto_shash *s_chksum_driver;
-	__u32 s_csum_seed;
-	struct shrinker s_es_shrinker;
-	struct list_head s_es_list;
-	long int s_es_nr_inode;
-	struct ext4_es_stats s_es_stats;
-	struct mb_cache___2 *s_ea_block_cache;
-	struct mb_cache___2 *s_ea_inode_cache;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t s_es_lock;
-	struct ratelimit_state s_err_ratelimit_state;
-	struct ratelimit_state s_warning_ratelimit_state;
-	struct ratelimit_state s_msg_ratelimit_state;
-	struct percpu_rw_semaphore s_journal_flag_rwsem;
-	struct dax_device *s_daxdev;
-	long: 64;
-};
-
-struct ext4_group_info {
-	long unsigned int bb_state;
-	struct rb_root bb_free_root;
-	ext4_grpblk_t bb_first_free;
-	ext4_grpblk_t bb_free;
-	ext4_grpblk_t bb_fragments;
-	ext4_grpblk_t bb_largest_free_order;
-	struct list_head bb_prealloc_list;
-	struct rw_semaphore alloc_sem;
-	ext4_grpblk_t bb_counters[0];
-};
-
-struct ext4_locality_group {
-	struct mutex lg_mutex;
-	struct list_head lg_prealloc_list[10];
-	spinlock_t lg_prealloc_lock;
-};
-
-struct ext4_li_request {
-	struct super_block *lr_super;
-	struct ext4_sb_info *lr_sbi;
-	ext4_group_t lr_next_group;
-	struct list_head lr_request;
-	long unsigned int lr_next_sched;
-	long unsigned int lr_timeout;
-};
-
-struct iomap_ops___2;
-
-struct shash_desc {
-	struct crypto_shash *tfm;
-	void *__ctx[0];
-};
-
-struct ext4_map_blocks {
-	ext4_fsblk_t m_pblk;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	unsigned int m_flags;
-};
-
-struct ext4_system_zone {
-	struct rb_node node;
-	ext4_fsblk_t start_blk;
-	unsigned int count;
-};
-
-struct fscrypt_str {
-	unsigned char *name;
-	u32 len;
-};
-
-enum {
-	EXT4_INODE_SECRM = 0,
-	EXT4_INODE_UNRM = 1,
-	EXT4_INODE_COMPR = 2,
-	EXT4_INODE_SYNC = 3,
-	EXT4_INODE_IMMUTABLE = 4,
-	EXT4_INODE_APPEND = 5,
-	EXT4_INODE_NODUMP = 6,
-	EXT4_INODE_NOATIME = 7,
-	EXT4_INODE_DIRTY = 8,
-	EXT4_INODE_COMPRBLK = 9,
-	EXT4_INODE_NOCOMPR = 10,
-	EXT4_INODE_ENCRYPT = 11,
-	EXT4_INODE_INDEX = 12,
-	EXT4_INODE_IMAGIC = 13,
-	EXT4_INODE_JOURNAL_DATA = 14,
-	EXT4_INODE_NOTAIL = 15,
-	EXT4_INODE_DIRSYNC = 16,
-	EXT4_INODE_TOPDIR = 17,
-	EXT4_INODE_HUGE_FILE = 18,
-	EXT4_INODE_EXTENTS = 19,
-	EXT4_INODE_VERITY = 20,
-	EXT4_INODE_EA_INODE = 21,
-	EXT4_INODE_EOFBLOCKS = 22,
-	EXT4_INODE_INLINE_DATA = 28,
-	EXT4_INODE_PROJINHERIT = 29,
-	EXT4_INODE_RESERVED = 31,
-};
-
-struct ext4_dir_entry_2 {
-	__le32 inode;
-	__le16 rec_len;
-	__u8 name_len;
-	__u8 file_type;
-	char name[255];
-};
-
-struct fname;
-
-struct dir_private_info {
-	struct rb_root root;
-	struct rb_node *curr_node;
-	struct fname *extra_fname;
-	loff_t last_pos;
-	__u32 curr_hash;
-	__u32 curr_minor_hash;
-	__u32 next_hash;
-};
-
-struct fname {
-	__u32 hash;
-	__u32 minor_hash;
-	struct rb_node rb_hash;
-	struct fname *next;
-	__u32 inode;
-	__u8 name_len;
-	__u8 file_type;
-	char name[0];
-};
-
-enum SHIFT_DIRECTION {
-	SHIFT_LEFT = 0,
-	SHIFT_RIGHT = 1,
-};
-
-struct ext4_io_end_vec {
-	struct list_head list;
-	loff_t offset;
-	ssize_t size;
-};
-
-struct ext4_io_end {
-	struct list_head list;
-	handle_t *handle;
-	struct inode *inode;
-	struct bio *bio;
-	unsigned int flag;
-	atomic_t count;
-	struct list_head list_vec;
-};
-
-typedef struct ext4_io_end ext4_io_end_t;
-
-enum {
-	ES_WRITTEN_B = 0,
-	ES_UNWRITTEN_B = 1,
-	ES_DELAYED_B = 2,
-	ES_HOLE_B = 3,
-	ES_REFERENCED_B = 4,
-	ES_FLAGS = 5,
-};
-
-enum {
-	EXT4_STATE_JDATA = 0,
-	EXT4_STATE_NEW = 1,
-	EXT4_STATE_XATTR = 2,
-	EXT4_STATE_NO_EXPAND = 3,
-	EXT4_STATE_DA_ALLOC_CLOSE = 4,
-	EXT4_STATE_EXT_MIGRATE = 5,
-	EXT4_STATE_NEWENTRY = 6,
-	EXT4_STATE_MAY_INLINE_DATA = 7,
-	EXT4_STATE_EXT_PRECACHED = 8,
-	EXT4_STATE_LUSTRE_EA_INODE = 9,
-	EXT4_STATE_VERITY_IN_PROGRESS = 10,
-};
-
-struct ext4_iloc {
-	struct buffer_head *bh;
-	long unsigned int offset;
-	ext4_group_t block_group;
-};
-
-struct ext4_extent_tail {
-	__le32 et_checksum;
-};
-
-struct ext4_extent {
-	__le32 ee_block;
-	__le16 ee_len;
-	__le16 ee_start_hi;
-	__le32 ee_start_lo;
-};
-
-struct ext4_extent_idx {
-	__le32 ei_block;
-	__le32 ei_leaf_lo;
-	__le16 ei_leaf_hi;
-	__u16 ei_unused;
-};
-
-struct ext4_extent_header {
-	__le16 eh_magic;
-	__le16 eh_entries;
-	__le16 eh_max;
-	__le16 eh_depth;
-	__le32 eh_generation;
-};
-
-struct ext4_ext_path {
-	ext4_fsblk_t p_block;
-	__u16 p_depth;
-	__u16 p_maxdepth;
-	struct ext4_extent *p_ext;
-	struct ext4_extent_idx *p_idx;
-	struct ext4_extent_header *p_hdr;
-	struct buffer_head *p_bh;
-};
-
-struct partial_cluster {
-	ext4_fsblk_t pclu;
-	ext4_lblk_t lblk;
-	enum {
-		initial = 0,
-		tofree = 1,
-		nofree = 2,
-	} state;
-};
-
-struct pending_reservation {
-	struct rb_node rb_node;
-	ext4_lblk_t lclu;
-};
-
-struct rsvd_count {
-	int ndelonly;
-	bool first_do_lblk_found;
-	ext4_lblk_t first_do_lblk;
-	ext4_lblk_t last_do_lblk;
-	struct extent_status *left_es;
-	bool partial;
-	ext4_lblk_t lclu;
-};
-
-struct fsverity_info;
-
-struct fsmap {
-	__u32 fmr_device;
-	__u32 fmr_flags;
-	__u64 fmr_physical;
-	__u64 fmr_owner;
-	__u64 fmr_offset;
-	__u64 fmr_length;
-	__u64 fmr_reserved[3];
-};
-
-struct ext4_fsmap {
-	struct list_head fmr_list;
-	dev_t fmr_device;
-	uint32_t fmr_flags;
-	uint64_t fmr_physical;
-	uint64_t fmr_owner;
-	uint64_t fmr_length;
-};
-
-struct ext4_fsmap_head {
-	uint32_t fmh_iflags;
-	uint32_t fmh_oflags;
-	unsigned int fmh_count;
-	unsigned int fmh_entries;
-	struct ext4_fsmap fmh_keys[2];
-};
-
-typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
-
-struct ext4_getfsmap_info {
-	struct ext4_fsmap_head *gfi_head;
-	ext4_fsmap_format_t gfi_formatter;
-	void *gfi_format_arg;
-	ext4_fsblk_t gfi_next_fsblk;
-	u32 gfi_dev;
-	ext4_group_t gfi_agno;
-	struct ext4_fsmap gfi_low;
-	struct ext4_fsmap gfi_high;
-	struct ext4_fsmap gfi_lastfree;
-	struct list_head gfi_meta_list;
-	bool gfi_last;
-};
-
-struct ext4_getfsmap_dev {
-	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
-	u32 gfd_dev;
-};
-
-struct dx_hash_info {
-	u32 hash;
-	u32 minor_hash;
-	int hash_version;
-	u32 *seed;
-};
-
-struct ext4_inode {
-	__le16 i_mode;
-	__le16 i_uid;
-	__le32 i_size_lo;
-	__le32 i_atime;
-	__le32 i_ctime;
-	__le32 i_mtime;
-	__le32 i_dtime;
-	__le16 i_gid;
-	__le16 i_links_count;
-	__le32 i_blocks_lo;
-	__le32 i_flags;
-	union {
-		struct {
-			__le32 l_i_version;
-		} linux1;
-		struct {
-			__u32 h_i_translator;
-		} hurd1;
-		struct {
-			__u32 m_i_reserved1;
-		} masix1;
-	} osd1;
-	__le32 i_block[15];
-	__le32 i_generation;
-	__le32 i_file_acl_lo;
-	__le32 i_size_high;
-	__le32 i_obso_faddr;
-	union {
-		struct {
-			__le16 l_i_blocks_high;
-			__le16 l_i_file_acl_high;
-			__le16 l_i_uid_high;
-			__le16 l_i_gid_high;
-			__le16 l_i_checksum_lo;
-			__le16 l_i_reserved;
-		} linux2;
-		struct {
-			__le16 h_i_reserved1;
-			__u16 h_i_mode_high;
-			__u16 h_i_uid_high;
-			__u16 h_i_gid_high;
-			__u32 h_i_author;
-		} hurd2;
-		struct {
-			__le16 h_i_reserved1;
-			__le16 m_i_file_acl_high;
-			__u32 m_i_reserved2[2];
-		} masix2;
-	} osd2;
-	__le16 i_extra_isize;
-	__le16 i_checksum_hi;
-	__le32 i_ctime_extra;
-	__le32 i_mtime_extra;
-	__le32 i_atime_extra;
-	__le32 i_crtime;
-	__le32 i_crtime_extra;
-	__le32 i_version_hi;
-	__le32 i_projid;
-};
-
-struct orlov_stats {
-	__u64 free_clusters;
-	__u32 free_inodes;
-	__u32 used_dirs;
-};
-
-typedef struct {
-	__le32 *p;
-	__le32 key;
-	struct buffer_head *bh;
-} Indirect;
-
-struct ext4_filename {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	struct dx_hash_info hinfo;
-};
-
-struct ext4_xattr_ibody_header {
-	__le32 h_magic;
-};
-
-struct ext4_xattr_entry {
-	__u8 e_name_len;
-	__u8 e_name_index;
-	__le16 e_value_offs;
-	__le32 e_value_inum;
-	__le32 e_value_size;
-	__le32 e_hash;
-	char e_name[0];
-};
-
-struct ext4_xattr_info {
-	const char *name;
-	const void *value;
-	size_t value_len;
-	int name_index;
-	int in_inode;
-};
-
-struct ext4_xattr_search {
-	struct ext4_xattr_entry *first;
-	void *base;
-	void *end;
-	struct ext4_xattr_entry *here;
-	int not_found;
-};
-
-struct ext4_xattr_ibody_find {
-	struct ext4_xattr_search s;
-	struct ext4_iloc iloc;
-};
-
-typedef short unsigned int __kernel_uid16_t;
-
-typedef short unsigned int __kernel_gid16_t;
-
-typedef __kernel_uid16_t uid16_t;
-
-typedef __kernel_gid16_t gid16_t;
-
-typedef int get_block_t___2(struct inode *, sector_t, struct buffer_head *, int);
-
-struct ext4_io_submit {
-	struct writeback_control *io_wbc;
-	struct bio *io_bio;
-	ext4_io_end_t *io_end;
-	sector_t io_next_block;
-};
-
-typedef enum {
-	EXT4_IGET_NORMAL = 0,
-	EXT4_IGET_SPECIAL = 1,
-	EXT4_IGET_HANDLE = 2,
-} ext4_iget_flags;
-
-struct ext4_xattr_inode_array {
-	unsigned int count;
-	struct inode *inodes[0];
-};
-
-struct mpage_da_data {
-	struct inode *inode;
-	struct writeback_control *wbc;
-	long unsigned int first_page;
-	long unsigned int next_page;
-	long unsigned int last_page;
-	struct ext4_map_blocks map;
-	struct ext4_io_submit io_submit;
-	unsigned int do_map: 1;
-};
-
-struct other_inode {
-	long unsigned int orig_ino;
-	struct ext4_inode *raw_inode;
-};
-
-struct fstrim_range {
-	__u64 start;
-	__u64 len;
-	__u64 minlen;
-};
-
-struct ext4_new_group_input {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 unused;
-};
-
-struct compat_ext4_new_group_input {
-	u32 group;
-	compat_u64 block_bitmap;
-	compat_u64 inode_bitmap;
-	compat_u64 inode_table;
-	u32 blocks_count;
-	u16 reserved_blocks;
-	u16 unused;
-} __attribute__((packed));
-
-struct ext4_new_group_data {
-	__u32 group;
-	__u64 block_bitmap;
-	__u64 inode_bitmap;
-	__u64 inode_table;
-	__u32 blocks_count;
-	__u16 reserved_blocks;
-	__u16 mdata_blocks;
-	__u32 free_clusters_count;
-};
-
-struct move_extent {
-	__u32 reserved;
-	__u32 donor_fd;
-	__u64 orig_start;
-	__u64 donor_start;
-	__u64 len;
-	__u64 moved_len;
-};
-
-struct fsmap_head {
-	__u32 fmh_iflags;
-	__u32 fmh_oflags;
-	__u32 fmh_count;
-	__u32 fmh_entries;
-	__u64 fmh_reserved[6];
-	struct fsmap fmh_keys[2];
-	struct fsmap fmh_recs[0];
-};
-
-struct getfsmap_info {
-	struct super_block *gi_sb;
-	struct fsmap_head *gi_data;
-	unsigned int gi_idx;
-	__u32 gi_last_flags;
-};
-
-struct ext4_free_data {
-	struct list_head efd_list;
-	struct rb_node efd_node;
-	ext4_group_t efd_group;
-	ext4_grpblk_t efd_start_cluster;
-	ext4_grpblk_t efd_count;
-	tid_t efd_tid;
-};
-
-struct ext4_prealloc_space {
-	struct list_head pa_inode_list;
-	struct list_head pa_group_list;
-	union {
-		struct list_head pa_tmp_list;
-		struct callback_head pa_rcu;
-	} u;
-	spinlock_t pa_lock;
-	atomic_t pa_count;
-	unsigned int pa_deleted;
-	ext4_fsblk_t pa_pstart;
-	ext4_lblk_t pa_lstart;
-	ext4_grpblk_t pa_len;
-	ext4_grpblk_t pa_free;
-	short unsigned int pa_type;
-	spinlock_t *pa_obj_lock;
-	struct inode *pa_inode;
-};
-
-enum {
-	MB_INODE_PA = 0,
-	MB_GROUP_PA = 1,
-};
-
-struct ext4_free_extent {
-	ext4_lblk_t fe_logical;
-	ext4_grpblk_t fe_start;
-	ext4_group_t fe_group;
-	ext4_grpblk_t fe_len;
-};
-
-struct ext4_allocation_context {
-	struct inode *ac_inode;
-	struct super_block *ac_sb;
-	struct ext4_free_extent ac_o_ex;
-	struct ext4_free_extent ac_g_ex;
-	struct ext4_free_extent ac_b_ex;
-	struct ext4_free_extent ac_f_ex;
-	__u16 ac_groups_scanned;
-	__u16 ac_found;
-	__u16 ac_tail;
-	__u16 ac_buddy;
-	__u16 ac_flags;
-	__u8 ac_status;
-	__u8 ac_criteria;
-	__u8 ac_2order;
-	__u8 ac_op;
-	struct page *ac_bitmap_page;
-	struct page *ac_buddy_page;
-	struct ext4_prealloc_space *ac_pa;
-	struct ext4_locality_group *ac_lg;
-};
-
-struct ext4_buddy {
-	struct page *bd_buddy_page;
-	void *bd_buddy;
-	struct page *bd_bitmap_page;
-	void *bd_bitmap;
-	struct ext4_group_info *bd_info;
-	struct super_block *bd_sb;
-	__u16 bd_blkbits;
-	ext4_group_t bd_group;
-};
-
-typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
-
-struct sg {
-	struct ext4_group_info info;
-	ext4_grpblk_t counters[18];
-};
-
-struct migrate_struct {
-	ext4_lblk_t first_block;
-	ext4_lblk_t last_block;
-	ext4_lblk_t curr_block;
-	ext4_fsblk_t first_pblock;
-	ext4_fsblk_t last_pblock;
-};
-
-struct mmp_struct {
-	__le32 mmp_magic;
-	__le32 mmp_seq;
-	__le64 mmp_time;
-	char mmp_nodename[64];
-	char mmp_bdevname[32];
-	__le16 mmp_check_interval;
-	__le16 mmp_pad1;
-	__le32 mmp_pad2[226];
-	__le32 mmp_checksum;
-};
-
-struct mmpd_data {
-	struct buffer_head *bh;
-	struct super_block *sb;
-};
-
-struct fscrypt_name {
-	const struct qstr *usr_fname;
-	struct fscrypt_str disk_name;
-	u32 hash;
-	u32 minor_hash;
-	struct fscrypt_str crypto_buf;
-	bool is_ciphertext_name;
-};
-
-struct ext4_dir_entry {
-	__le32 inode;
-	__le16 rec_len;
-	__le16 name_len;
-	char name[255];
-};
-
-struct ext4_dir_entry_tail {
-	__le32 det_reserved_zero1;
-	__le16 det_rec_len;
-	__u8 det_reserved_zero2;
-	__u8 det_reserved_ft;
-	__le32 det_checksum;
-};
-
-typedef enum {
-	EITHER = 0,
-	INDEX = 1,
-	DIRENT = 2,
-	DIRENT_HTREE = 3,
-} dirblock_type_t;
-
-struct fake_dirent {
-	__le32 inode;
-	__le16 rec_len;
-	u8 name_len;
-	u8 file_type;
-};
-
-struct dx_countlimit {
-	__le16 limit;
-	__le16 count;
-};
-
-struct dx_entry {
-	__le32 hash;
-	__le32 block;
-};
-
-struct dx_root_info {
-	__le32 reserved_zero;
-	u8 hash_version;
-	u8 info_length;
-	u8 indirect_levels;
-	u8 unused_flags;
-};
-
-struct dx_root {
-	struct fake_dirent dot;
-	char dot_name[4];
-	struct fake_dirent dotdot;
-	char dotdot_name[4];
-	struct dx_root_info info;
-	struct dx_entry entries[0];
-};
-
-struct dx_node {
-	struct fake_dirent fake;
-	struct dx_entry entries[0];
-};
-
-struct dx_frame {
-	struct buffer_head *bh;
-	struct dx_entry *entries;
-	struct dx_entry *at;
-};
-
-struct dx_map_entry {
-	u32 hash;
-	u16 offs;
-	u16 size;
-};
-
-struct dx_tail {
-	u32 dt_reserved;
-	__le32 dt_checksum;
-};
-
-struct ext4_renament {
-	struct inode *dir;
-	struct dentry *dentry;
-	struct inode *inode;
-	bool is_dir;
-	int dir_nlink_delta;
-	struct buffer_head *bh;
-	struct ext4_dir_entry_2 *de;
-	int inlined;
-	struct buffer_head *dir_bh;
-	struct ext4_dir_entry_2 *parent_de;
-	int dir_inlined;
-};
-
-enum bio_post_read_step {
-	STEP_INITIAL = 0,
-	STEP_DECRYPT = 1,
-	STEP_VERITY = 2,
-};
-
-struct bio_post_read_ctx {
-	struct bio *bio;
-	struct work_struct work;
-	unsigned int cur_step;
-	unsigned int enabled_steps;
-};
-
-enum {
-	BLOCK_BITMAP = 0,
-	INODE_BITMAP = 1,
-	INODE_TABLE = 2,
-	GROUP_TABLE_COUNT = 3,
-};
-
-struct ext4_new_flex_group_data {
-	struct ext4_new_group_data *groups;
-	__u16 *bg_flags;
-	ext4_group_t count;
-};
-
-enum {
-	I_DATA_SEM_NORMAL = 0,
-	I_DATA_SEM_OTHER = 1,
-	I_DATA_SEM_QUOTA = 2,
-};
-
-struct ext4_lazy_init {
-	long unsigned int li_state;
-	struct list_head li_request_list;
-	struct mutex li_list_mtx;
-};
-
-struct ext4_journal_cb_entry {
-	struct list_head jce_list;
-	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
-};
-
-struct trace_event_raw_ext4_other_inode_update_time {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t orig_ino;
-	uid_t uid;
-	gid_t gid;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_free_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	uid_t uid;
-	gid_t gid;
-	__u64 blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_request_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t dir;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_allocate_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t dir;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_evict_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int nlink;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_drop_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int drop;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_nfs_commit_metadata {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mark_inode_dirty {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int ip;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_begin_ordered_truncate {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t new_size;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__write_begin {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int len;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__write_end {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int len;
-	unsigned int copied;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_writepages {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	long unsigned int writeback_index;
-	int sync_mode;
-	char for_kupdate;
-	char range_cyclic;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_write_pages {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int first_page;
-	long int nr_to_write;
-	int sync_mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_write_pages_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 lblk;
-	__u32 len;
-	__u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_writepages_result {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	int pages_written;
-	long int pages_skipped;
-	long unsigned int writeback_index;
-	int sync_mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__page_op {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int index;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_invalidatepage_op {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	long unsigned int index;
-	unsigned int offset;
-	unsigned int length;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_discard_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	__u64 blk;
-	__u64 count;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__mb_new_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 pa_pstart;
-	__u64 pa_lstart;
-	__u32 pa_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_release_inode_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	__u32 count;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_release_group_pa {
-	struct trace_entry ent;
-	dev_t dev;
-	__u64 pa_pstart;
-	__u32 pa_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_discard_preallocations {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mb_discard_preallocations {
-	struct trace_entry ent;
-	dev_t dev;
-	int needed;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_request_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int len;
-	__u32 logical;
-	__u32 lleft;
-	__u32 lright;
-	__u64 goal;
-	__u64 pleft;
-	__u64 pright;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_allocate_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	unsigned int len;
-	__u32 logical;
-	__u32 lleft;
-	__u32 lright;
-	__u64 goal;
-	__u64 pleft;
-	__u64 pright;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_free_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	long unsigned int count;
-	int flags;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_file_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t parent;
-	int datasync;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_file_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_sync_fs {
-	struct trace_entry ent;
-	dev_t dev;
-	int wait;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_alloc_da_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int data_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mballoc_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u32 orig_logical;
-	int orig_start;
-	__u32 orig_group;
-	int orig_len;
-	__u32 goal_logical;
-	int goal_start;
-	__u32 goal_group;
-	int goal_len;
-	__u32 result_logical;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	__u16 found;
-	__u16 groups;
-	__u16 buddy;
-	__u16 flags;
-	__u16 tail;
-	__u8 cr;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_mballoc_prealloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u32 orig_logical;
-	int orig_start;
-	__u32 orig_group;
-	int orig_len;
-	__u32 result_logical;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__mballoc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int result_start;
-	__u32 result_group;
-	int result_len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_forget {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 block;
-	int is_metadata;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_update_reserve_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int used_blocks;
-	int reserved_data_blocks;
-	int quota_claim;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_reserve_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int reserved_data_blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_da_release_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 i_blocks;
-	int freed_blocks;
-	int reserved_data_blocks;
-	__u16 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__bitmap_load {
-	struct trace_entry ent;
-	dev_t dev;
-	__u32 group;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__fallocate_mode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	int mode;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fallocate_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	unsigned int blocks;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_unlink_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ino_t parent;
-	loff_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_unlink_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__truncate {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	__u64 blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_convert_to_initialized_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	ext4_lblk_t u_lblk;
-	unsigned int u_len;
-	ext4_fsblk_t u_pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t m_lblk;
-	unsigned int m_len;
-	ext4_lblk_t u_lblk;
-	unsigned int u_len;
-	ext4_fsblk_t u_pblk;
-	ext4_lblk_t i_lblk;
-	unsigned int i_len;
-	ext4_fsblk_t i_pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__map_blocks_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__map_blocks_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	unsigned int flags;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	unsigned int mflags;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_load_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_load_inode {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_journal_start {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int ip;
-	int blocks;
-	int rsv_blocks;
-	int revoke_creds;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_journal_start_reserved {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int ip;
-	int blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__trim {
-	struct trace_entry ent;
-	int dev_major;
-	int dev_minor;
-	__u32 group;
-	int start;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_handle_unwritten_extents {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	int flags;
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	unsigned int len;
-	unsigned int allocated;
-	ext4_fsblk_t newblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_implied_cluster_alloc_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	unsigned int flags;
-	ext4_lblk_t lblk;
-	ext4_fsblk_t pblk;
-	unsigned int len;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_put_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	ext4_fsblk_t start;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_find_delalloc_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	int reverse;
-	int found;
-	ext4_lblk_t found_blk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_reserved_cluster_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_show_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	ext4_lblk_t lblk;
-	short unsigned int len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_remove_blocks {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	ext4_fsblk_t ee_pblk;
-	ext4_lblk_t ee_lblk;
-	short unsigned int ee_len;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_rm_leaf {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t ee_lblk;
-	ext4_fsblk_t ee_pblk;
-	short int ee_len;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_rm_idx {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_fsblk_t pblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_remove_space {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-	int depth;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_remove_space_done {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t start;
-	ext4_lblk_t end;
-	int depth;
-	ext4_fsblk_t pc_pclu;
-	ext4_lblk_t pc_lblk;
-	int pc_state;
-	short unsigned int eh_entries;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__es_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_remove_extent {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t lblk;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_find_extent_range_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_find_extent_range_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_lookup_extent_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_lookup_extent_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	int found;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4__es_shrink_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_to_scan;
-	int cache_cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_shrink_scan_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_shrunk;
-	int cache_cnt;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_collapse_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_insert_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t offset;
-	loff_t len;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_shrink {
-	struct trace_entry ent;
-	dev_t dev;
-	int nr_shrunk;
-	long long unsigned int scan_time;
-	int nr_skipped;
-	int retried;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_es_insert_delayed_block {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	ext4_lblk_t len;
-	ext4_fsblk_t pblk;
-	char status;
-	bool allocated;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fsmap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	dev_t keydev;
-	u32 agno;
-	u64 bno;
-	u64 len;
-	u64 owner;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_getfsmap_class {
-	struct trace_entry ent;
-	dev_t dev;
-	dev_t keydev;
-	u64 block;
-	u64 len;
-	u64 owner;
-	u64 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_shutdown {
-	struct trace_entry ent;
-	dev_t dev;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_error {
-	struct trace_entry ent;
-	dev_t dev;
-	const char *function;
-	unsigned int line;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_ext4_other_inode_update_time {};
-
-struct trace_event_data_offsets_ext4_free_inode {};
-
-struct trace_event_data_offsets_ext4_request_inode {};
-
-struct trace_event_data_offsets_ext4_allocate_inode {};
-
-struct trace_event_data_offsets_ext4_evict_inode {};
-
-struct trace_event_data_offsets_ext4_drop_inode {};
-
-struct trace_event_data_offsets_ext4_nfs_commit_metadata {};
-
-struct trace_event_data_offsets_ext4_mark_inode_dirty {};
-
-struct trace_event_data_offsets_ext4_begin_ordered_truncate {};
-
-struct trace_event_data_offsets_ext4__write_begin {};
-
-struct trace_event_data_offsets_ext4__write_end {};
-
-struct trace_event_data_offsets_ext4_writepages {};
-
-struct trace_event_data_offsets_ext4_da_write_pages {};
-
-struct trace_event_data_offsets_ext4_da_write_pages_extent {};
-
-struct trace_event_data_offsets_ext4_writepages_result {};
-
-struct trace_event_data_offsets_ext4__page_op {};
-
-struct trace_event_data_offsets_ext4_invalidatepage_op {};
-
-struct trace_event_data_offsets_ext4_discard_blocks {};
-
-struct trace_event_data_offsets_ext4__mb_new_pa {};
-
-struct trace_event_data_offsets_ext4_mb_release_inode_pa {};
-
-struct trace_event_data_offsets_ext4_mb_release_group_pa {};
-
-struct trace_event_data_offsets_ext4_discard_preallocations {};
-
-struct trace_event_data_offsets_ext4_mb_discard_preallocations {};
-
-struct trace_event_data_offsets_ext4_request_blocks {};
-
-struct trace_event_data_offsets_ext4_allocate_blocks {};
-
-struct trace_event_data_offsets_ext4_free_blocks {};
-
-struct trace_event_data_offsets_ext4_sync_file_enter {};
-
-struct trace_event_data_offsets_ext4_sync_file_exit {};
-
-struct trace_event_data_offsets_ext4_sync_fs {};
-
-struct trace_event_data_offsets_ext4_alloc_da_blocks {};
-
-struct trace_event_data_offsets_ext4_mballoc_alloc {};
-
-struct trace_event_data_offsets_ext4_mballoc_prealloc {};
-
-struct trace_event_data_offsets_ext4__mballoc {};
-
-struct trace_event_data_offsets_ext4_forget {};
-
-struct trace_event_data_offsets_ext4_da_update_reserve_space {};
-
-struct trace_event_data_offsets_ext4_da_reserve_space {};
-
-struct trace_event_data_offsets_ext4_da_release_space {};
-
-struct trace_event_data_offsets_ext4__bitmap_load {};
-
-struct trace_event_data_offsets_ext4_direct_IO_enter {};
-
-struct trace_event_data_offsets_ext4_direct_IO_exit {};
-
-struct trace_event_data_offsets_ext4__fallocate_mode {};
-
-struct trace_event_data_offsets_ext4_fallocate_exit {};
-
-struct trace_event_data_offsets_ext4_unlink_enter {};
-
-struct trace_event_data_offsets_ext4_unlink_exit {};
-
-struct trace_event_data_offsets_ext4__truncate {};
-
-struct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};
-
-struct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};
-
-struct trace_event_data_offsets_ext4__map_blocks_enter {};
-
-struct trace_event_data_offsets_ext4__map_blocks_exit {};
-
-struct trace_event_data_offsets_ext4_ext_load_extent {};
-
-struct trace_event_data_offsets_ext4_load_inode {};
-
-struct trace_event_data_offsets_ext4_journal_start {};
-
-struct trace_event_data_offsets_ext4_journal_start_reserved {};
-
-struct trace_event_data_offsets_ext4__trim {};
-
-struct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};
-
-struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
-
-struct trace_event_data_offsets_ext4_ext_put_in_cache {};
-
-struct trace_event_data_offsets_ext4_ext_in_cache {};
-
-struct trace_event_data_offsets_ext4_find_delalloc_range {};
-
-struct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};
-
-struct trace_event_data_offsets_ext4_ext_show_extent {};
-
-struct trace_event_data_offsets_ext4_remove_blocks {};
-
-struct trace_event_data_offsets_ext4_ext_rm_leaf {};
-
-struct trace_event_data_offsets_ext4_ext_rm_idx {};
-
-struct trace_event_data_offsets_ext4_ext_remove_space {};
-
-struct trace_event_data_offsets_ext4_ext_remove_space_done {};
-
-struct trace_event_data_offsets_ext4__es_extent {};
-
-struct trace_event_data_offsets_ext4_es_remove_extent {};
-
-struct trace_event_data_offsets_ext4_es_find_extent_range_enter {};
-
-struct trace_event_data_offsets_ext4_es_find_extent_range_exit {};
-
-struct trace_event_data_offsets_ext4_es_lookup_extent_enter {};
-
-struct trace_event_data_offsets_ext4_es_lookup_extent_exit {};
-
-struct trace_event_data_offsets_ext4__es_shrink_enter {};
-
-struct trace_event_data_offsets_ext4_es_shrink_scan_exit {};
-
-struct trace_event_data_offsets_ext4_collapse_range {};
-
-struct trace_event_data_offsets_ext4_insert_range {};
-
-struct trace_event_data_offsets_ext4_es_shrink {};
-
-struct trace_event_data_offsets_ext4_es_insert_delayed_block {};
-
-struct trace_event_data_offsets_ext4_fsmap_class {};
-
-struct trace_event_data_offsets_ext4_getfsmap_class {};
-
-struct trace_event_data_offsets_ext4_shutdown {};
-
-struct trace_event_data_offsets_ext4_error {};
-
-typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
-
-typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, long unsigned int);
-
-typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
-
-typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);
-
-typedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, long unsigned int, struct writeback_control *);
-
-typedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);
-
-typedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);
-
-typedef void (*btf_trace_ext4_writepage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_readpage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
-
-typedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
-
-typedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, long long unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);
-
-typedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);
-
-typedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);
-
-typedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, long long unsigned int);
-
-typedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);
-
-typedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);
-
-typedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);
-
-typedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);
-
-typedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);
-
-typedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);
-
-typedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);
-
-typedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
-
-typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);
-
-typedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);
-
-typedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);
-
-typedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);
-
-typedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);
-
-typedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);
-
-typedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_load_inode)(void *, struct inode *);
-
-typedef void (*btf_trace_ext4_journal_start)(void *, struct super_block *, int, int, int, long unsigned int);
-
-typedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, long unsigned int);
-
-typedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
-
-typedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
-
-typedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);
-
-typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
-
-typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
-
-typedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);
-
-typedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);
-
-typedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);
-
-typedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);
-
-typedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);
-
-typedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);
-
-typedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);
-
-typedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);
-
-typedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);
-
-typedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);
-
-typedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);
-
-typedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, long unsigned int);
-
-typedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);
-
-enum {
-	Opt_bsd_df = 0,
-	Opt_minix_df = 1,
-	Opt_grpid = 2,
-	Opt_nogrpid = 3,
-	Opt_resgid = 4,
-	Opt_resuid = 5,
-	Opt_sb = 6,
-	Opt_err_cont = 7,
-	Opt_err_panic = 8,
-	Opt_err_ro = 9,
-	Opt_nouid32 = 10,
-	Opt_debug = 11,
-	Opt_removed = 12,
-	Opt_user_xattr = 13,
-	Opt_nouser_xattr = 14,
-	Opt_acl = 15,
-	Opt_noacl = 16,
-	Opt_auto_da_alloc = 17,
-	Opt_noauto_da_alloc = 18,
-	Opt_noload = 19,
-	Opt_commit = 20,
-	Opt_min_batch_time = 21,
-	Opt_max_batch_time = 22,
-	Opt_journal_dev = 23,
-	Opt_journal_path = 24,
-	Opt_journal_checksum = 25,
-	Opt_journal_async_commit = 26,
-	Opt_abort = 27,
-	Opt_data_journal = 28,
-	Opt_data_ordered = 29,
-	Opt_data_writeback = 30,
-	Opt_data_err_abort = 31,
-	Opt_data_err_ignore = 32,
-	Opt_test_dummy_encryption = 33,
-	Opt_usrjquota = 34,
-	Opt_grpjquota = 35,
-	Opt_offusrjquota = 36,
-	Opt_offgrpjquota = 37,
-	Opt_jqfmt_vfsold = 38,
-	Opt_jqfmt_vfsv0 = 39,
-	Opt_jqfmt_vfsv1 = 40,
-	Opt_quota = 41,
-	Opt_noquota = 42,
-	Opt_barrier = 43,
-	Opt_nobarrier = 44,
-	Opt_err___2 = 45,
-	Opt_usrquota = 46,
-	Opt_grpquota = 47,
-	Opt_prjquota = 48,
-	Opt_i_version = 49,
-	Opt_dax = 50,
-	Opt_stripe = 51,
-	Opt_delalloc = 52,
-	Opt_nodelalloc = 53,
-	Opt_warn_on_error = 54,
-	Opt_nowarn_on_error = 55,
-	Opt_mblk_io_submit = 56,
-	Opt_lazytime = 57,
-	Opt_nolazytime = 58,
-	Opt_debug_want_extra_isize = 59,
-	Opt_nomblk_io_submit = 60,
-	Opt_block_validity = 61,
-	Opt_noblock_validity = 62,
-	Opt_inode_readahead_blks = 63,
-	Opt_journal_ioprio = 64,
-	Opt_dioread_nolock = 65,
-	Opt_dioread_lock = 66,
-	Opt_discard = 67,
-	Opt_nodiscard = 68,
-	Opt_init_itable = 69,
-	Opt_noinit_itable = 70,
-	Opt_max_dir_size_kb = 71,
-	Opt_nojournal_checksum = 72,
-	Opt_nombcache = 73,
-};
-
-struct mount_opts {
-	int token;
-	int mount_opt;
-	int flags;
-};
-
-struct ext4_mount_options {
-	long unsigned int s_mount_opt;
-	long unsigned int s_mount_opt2;
-	kuid_t s_resuid;
-	kgid_t s_resgid;
-	long unsigned int s_commit_interval;
-	u32 s_min_batch_time;
-	u32 s_max_batch_time;
-	int s_jquota_fmt;
-	char *s_qf_names[3];
-};
-
-enum {
-	attr_noop = 0,
-	attr_delayed_allocation_blocks = 1,
-	attr_session_write_kbytes = 2,
-	attr_lifetime_write_kbytes = 3,
-	attr_reserved_clusters = 4,
-	attr_inode_readahead = 5,
-	attr_trigger_test_error = 6,
-	attr_first_error_time = 7,
-	attr_last_error_time = 8,
-	attr_feature = 9,
-	attr_pointer_ui = 10,
-	attr_pointer_atomic = 11,
-	attr_journal_task = 12,
-};
-
-enum {
-	ptr_explicit = 0,
-	ptr_ext4_sb_info_offset = 1,
-	ptr_ext4_super_block_offset = 2,
-};
-
-struct ext4_attr {
-	struct attribute attr;
-	short int attr_id;
-	short int attr_ptr;
-	union {
-		int offset;
-		void *explicit_ptr;
-	} u;
-};
-
-struct ext4_xattr_header {
-	__le32 h_magic;
-	__le32 h_refcount;
-	__le32 h_blocks;
-	__le32 h_hash;
-	__le32 h_checksum;
-	__u32 h_reserved[3];
-};
-
-struct ext4_xattr_block_find {
-	struct ext4_xattr_search s;
-	struct buffer_head *bh;
-};
-
-typedef struct {
-	__le16 e_tag;
-	__le16 e_perm;
-	__le32 e_id;
-} ext4_acl_entry;
-
-typedef struct {
-	__le32 a_version;
-} ext4_acl_header;
-
-struct commit_header {
-	__be32 h_magic;
-	__be32 h_blocktype;
-	__be32 h_sequence;
-	unsigned char h_chksum_type;
-	unsigned char h_chksum_size;
-	unsigned char h_padding[2];
-	__be32 h_chksum[8];
-	__be64 h_commit_sec;
-	__be32 h_commit_nsec;
-};
-
-struct journal_block_tag3_s {
-	__be32 t_blocknr;
-	__be32 t_flags;
-	__be32 t_blocknr_high;
-	__be32 t_checksum;
-};
-
-typedef struct journal_block_tag3_s journal_block_tag3_t;
-
-struct journal_block_tag_s {
-	__be32 t_blocknr;
-	__be16 t_checksum;
-	__be16 t_flags;
-	__be32 t_blocknr_high;
-};
-
-typedef struct journal_block_tag_s journal_block_tag_t;
-
-struct jbd2_journal_block_tail {
-	__be32 t_checksum;
-};
-
-struct jbd2_journal_revoke_header_s {
-	journal_header_t r_header;
-	__be32 r_count;
-};
-
-typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
-
-struct recovery_info {
-	tid_t start_transaction;
-	tid_t end_transaction;
-	int nr_replays;
-	int nr_revokes;
-	int nr_revoke_hits;
-};
-
-enum passtype {
-	PASS_SCAN = 0,
-	PASS_REVOKE = 1,
-	PASS_REPLAY = 2,
-};
-
-struct jbd2_revoke_table_s {
-	int hash_size;
-	int hash_shift;
-	struct list_head *hash_table;
-};
-
-struct jbd2_revoke_record_s {
-	struct list_head hash;
-	tid_t sequence;
-	long long unsigned int blocknr;
-};
-
-struct trace_event_raw_jbd2_checkpoint {
-	struct trace_entry ent;
-	dev_t dev;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_end_commit {
-	struct trace_entry ent;
-	dev_t dev;
-	char sync_commit;
-	int transaction;
-	int head;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_submit_inode_data {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_start_class {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_extend {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int buffer_credits;
-	int requested_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_handle_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	unsigned int type;
-	unsigned int line_no;
-	int interval;
-	int sync;
-	int requested_blocks;
-	int dirtied_blocks;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_run_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int wait;
-	long unsigned int request_delay;
-	long unsigned int running;
-	long unsigned int locked;
-	long unsigned int flushing;
-	long unsigned int logging;
-	__u32 handle_count;
-	__u32 blocks;
-	__u32 blocks_logged;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_checkpoint_stats {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int tid;
-	long unsigned int chp_time;
-	__u32 forced_to_close;
-	__u32 written;
-	__u32 dropped;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_update_log_tail {
-	struct trace_entry ent;
-	dev_t dev;
-	tid_t tail_sequence;
-	tid_t first_tid;
-	long unsigned int block_nr;
-	long unsigned int freed;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_write_superblock {
-	struct trace_entry ent;
-	dev_t dev;
-	int write_op;
-	char __data[0];
-};
-
-struct trace_event_raw_jbd2_lock_buffer_stall {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int stall_ms;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_jbd2_checkpoint {};
-
-struct trace_event_data_offsets_jbd2_commit {};
-
-struct trace_event_data_offsets_jbd2_end_commit {};
-
-struct trace_event_data_offsets_jbd2_submit_inode_data {};
-
-struct trace_event_data_offsets_jbd2_handle_start_class {};
-
-struct trace_event_data_offsets_jbd2_handle_extend {};
-
-struct trace_event_data_offsets_jbd2_handle_stats {};
-
-struct trace_event_data_offsets_jbd2_run_stats {};
-
-struct trace_event_data_offsets_jbd2_checkpoint_stats {};
-
-struct trace_event_data_offsets_jbd2_update_log_tail {};
-
-struct trace_event_data_offsets_jbd2_write_superblock {};
-
-struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
-
-typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
-
-typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
-
-typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);
-
-typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);
-
-typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);
-
-typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);
-
-typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);
-
-typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, int);
-
-typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
-
-struct jbd2_stats_proc_session {
-	journal_t *journal;
-	struct transaction_stats_s *stats;
-	int start;
-	int max;
-};
-
-struct ramfs_mount_opts {
-	umode_t mode;
-};
-
-struct ramfs_fs_info {
-	struct ramfs_mount_opts mount_opts;
-};
-
-enum ramfs_param {
-	Opt_mode___3 = 0,
-};
-
-enum hugetlbfs_size_type {
-	NO_SIZE = 0,
-	SIZE_STD = 1,
-	SIZE_PERCENT = 2,
-};
-
-struct hugetlbfs_fs_context {
-	struct hstate *hstate;
-	long long unsigned int max_size_opt;
-	long long unsigned int min_size_opt;
-	long int max_hpages;
-	long int nr_inodes;
-	long int min_hpages;
-	enum hugetlbfs_size_type max_val_type;
-	enum hugetlbfs_size_type min_val_type;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-enum hugetlb_param {
-	Opt_gid___4 = 0,
-	Opt_min_size = 1,
-	Opt_mode___4 = 2,
-	Opt_nr_inodes___2 = 3,
-	Opt_pagesize = 4,
-	Opt_size___2 = 5,
-	Opt_uid___3 = 6,
-};
-
-typedef u16 wchar_t;
-
-struct nls_table {
-	const char *charset;
-	const char *alias;
-	int (*uni2char)(wchar_t, unsigned char *, int);
-	int (*char2uni)(const unsigned char *, int, wchar_t *);
-	const unsigned char *charset2lower;
-	const unsigned char *charset2upper;
-	struct module *owner;
-	struct nls_table *next;
-};
-
-struct fat_mount_options {
-	kuid_t fs_uid;
-	kgid_t fs_gid;
-	short unsigned int fs_fmask;
-	short unsigned int fs_dmask;
-	short unsigned int codepage;
-	int time_offset;
-	char *iocharset;
-	short unsigned int shortname;
-	unsigned char name_check;
-	unsigned char errors;
-	unsigned char nfs;
-	short unsigned int allow_utime;
-	unsigned int quiet: 1;
-	unsigned int showexec: 1;
-	unsigned int sys_immutable: 1;
-	unsigned int dotsOK: 1;
-	unsigned int isvfat: 1;
-	unsigned int utf8: 1;
-	unsigned int unicode_xlate: 1;
-	unsigned int numtail: 1;
-	unsigned int flush: 1;
-	unsigned int nocase: 1;
-	unsigned int usefree: 1;
-	unsigned int tz_set: 1;
-	unsigned int rodir: 1;
-	unsigned int discard: 1;
-	unsigned int dos1xfloppy: 1;
-};
-
-struct fatent_operations;
-
-struct msdos_sb_info {
-	short unsigned int sec_per_clus;
-	short unsigned int cluster_bits;
-	unsigned int cluster_size;
-	unsigned char fats;
-	unsigned char fat_bits;
-	short unsigned int fat_start;
-	long unsigned int fat_length;
-	long unsigned int dir_start;
-	short unsigned int dir_entries;
-	long unsigned int data_start;
-	long unsigned int max_cluster;
-	long unsigned int root_cluster;
-	long unsigned int fsinfo_sector;
-	struct mutex fat_lock;
-	struct mutex nfs_build_inode_lock;
-	struct mutex s_lock;
-	unsigned int prev_free;
-	unsigned int free_clusters;
-	unsigned int free_clus_valid;
-	struct fat_mount_options options;
-	struct nls_table *nls_disk;
-	struct nls_table *nls_io;
-	const void *dir_ops;
-	int dir_per_block;
-	int dir_per_block_bits;
-	unsigned int vol_id;
-	int fatent_shift;
-	const struct fatent_operations *fatent_ops;
-	struct inode *fat_inode;
-	struct inode *fsinfo_inode;
-	struct ratelimit_state ratelimit;
-	spinlock_t inode_hash_lock;
-	struct hlist_head inode_hashtable[256];
-	spinlock_t dir_hash_lock;
-	struct hlist_head dir_hashtable[256];
-	unsigned int dirty;
-	struct callback_head rcu;
-};
-
-struct fat_entry;
-
-struct fatent_operations {
-	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
-	void (*ent_set_ptr)(struct fat_entry *, int);
-	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
-	int (*ent_get)(struct fat_entry *);
-	void (*ent_put)(struct fat_entry *, int);
-	int (*ent_next)(struct fat_entry *);
-};
-
-struct msdos_inode_info {
-	spinlock_t cache_lru_lock;
-	struct list_head cache_lru;
-	int nr_caches;
-	unsigned int cache_valid_id;
-	loff_t mmu_private;
-	int i_start;
-	int i_logstart;
-	int i_attrs;
-	loff_t i_pos;
-	struct hlist_node i_fat_hash;
-	struct hlist_node i_dir_hash;
-	struct rw_semaphore truncate_lock;
-	struct inode vfs_inode;
-};
-
-struct fat_entry {
-	int entry;
-	union {
-		u8 *ent12_p[2];
-		__le16 *ent16_p;
-		__le32 *ent32_p;
-	} u;
-	int nr_bhs;
-	struct buffer_head *bhs[2];
-	struct inode *fat_inode;
-};
-
-struct fat_cache {
-	struct list_head cache_list;
-	int nr_contig;
-	int fcluster;
-	int dcluster;
-};
-
-struct fat_cache_id {
-	unsigned int id;
-	int nr_contig;
-	int fcluster;
-	int dcluster;
-};
-
-struct compat_dirent {
-	u32 d_ino;
-	compat_off_t d_off;
-	u16 d_reclen;
-	char d_name[256];
-};
-
-enum utf16_endian {
-	UTF16_HOST_ENDIAN = 0,
-	UTF16_LITTLE_ENDIAN = 1,
-	UTF16_BIG_ENDIAN = 2,
-};
-
-struct __fat_dirent {
-	long int d_ino;
-	__kernel_off_t d_off;
-	short unsigned int d_reclen;
-	char d_name[256];
-};
-
-struct msdos_dir_entry {
-	__u8 name[11];
-	__u8 attr;
-	__u8 lcase;
-	__u8 ctime_cs;
-	__le16 ctime;
-	__le16 cdate;
-	__le16 adate;
-	__le16 starthi;
-	__le16 time;
-	__le16 date;
-	__le16 start;
-	__le32 size;
-};
-
-struct msdos_dir_slot {
-	__u8 id;
-	__u8 name0_4[10];
-	__u8 attr;
-	__u8 reserved;
-	__u8 alias_checksum;
-	__u8 name5_10[12];
-	__le16 start;
-	__u8 name11_12[4];
-};
-
-struct fat_slot_info {
-	loff_t i_pos;
-	loff_t slot_off;
-	int nr_slots;
-	struct msdos_dir_entry *de;
-	struct buffer_head *bh;
-};
-
-typedef long long unsigned int llu;
-
-enum {
-	PARSE_INVALID = 1,
-	PARSE_NOT_LONGNAME = 2,
-	PARSE_EOF = 3,
-};
-
-struct fat_ioctl_filldir_callback {
-	struct dir_context ctx;
-	void *dirent;
-	int result;
-	const char *longname;
-	int long_len;
-	const char *shortname;
-	int short_len;
-};
-
-struct fat_boot_sector {
-	__u8 ignored[3];
-	__u8 system_id[8];
-	__u8 sector_size[2];
-	__u8 sec_per_clus;
-	__le16 reserved;
-	__u8 fats;
-	__u8 dir_entries[2];
-	__u8 sectors[2];
-	__u8 media;
-	__le16 fat_length;
-	__le16 secs_track;
-	__le16 heads;
-	__le32 hidden;
-	__le32 total_sect;
-	union {
-		struct {
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat16;
-		struct {
-			__le32 length;
-			__le16 flags;
-			__u8 version[2];
-			__le32 root_cluster;
-			__le16 info_sector;
-			__le16 backup_boot;
-			__le16 reserved2[6];
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat32;
-	};
-};
-
-struct fat_boot_fsinfo {
-	__le32 signature1;
-	__le32 reserved1[120];
-	__le32 signature2;
-	__le32 free_clusters;
-	__le32 next_cluster;
-	__le32 reserved2[4];
-};
-
-struct fat_bios_param_block {
-	u16 fat_sector_size;
-	u8 fat_sec_per_clus;
-	u16 fat_reserved;
-	u8 fat_fats;
-	u16 fat_dir_entries;
-	u16 fat_sectors;
-	u16 fat_fat_length;
-	u32 fat_total_sect;
-	u8 fat16_state;
-	u32 fat16_vol_id;
-	u32 fat32_length;
-	u32 fat32_root_cluster;
-	u16 fat32_info_sector;
-	u8 fat32_state;
-	u32 fat32_vol_id;
-};
-
-struct fat_floppy_defaults {
-	unsigned int nr_sectors;
-	unsigned int sec_per_clus;
-	unsigned int dir_entries;
-	unsigned int media;
-	unsigned int fat_length;
-};
-
-enum {
-	Opt_check_n = 0,
-	Opt_check_r = 1,
-	Opt_check_s = 2,
-	Opt_uid___4 = 3,
-	Opt_gid___5 = 4,
-	Opt_umask = 5,
-	Opt_dmask = 6,
-	Opt_fmask = 7,
-	Opt_allow_utime = 8,
-	Opt_codepage = 9,
-	Opt_usefree = 10,
-	Opt_nocase = 11,
-	Opt_quiet = 12,
-	Opt_showexec = 13,
-	Opt_debug___2 = 14,
-	Opt_immutable = 15,
-	Opt_dots = 16,
-	Opt_nodots = 17,
-	Opt_charset = 18,
-	Opt_shortname_lower = 19,
-	Opt_shortname_win95 = 20,
-	Opt_shortname_winnt = 21,
-	Opt_shortname_mixed = 22,
-	Opt_utf8_no = 23,
-	Opt_utf8_yes = 24,
-	Opt_uni_xl_no = 25,
-	Opt_uni_xl_yes = 26,
-	Opt_nonumtail_no = 27,
-	Opt_nonumtail_yes = 28,
-	Opt_obsolete = 29,
-	Opt_flush = 30,
-	Opt_tz_utc = 31,
-	Opt_rodir = 32,
-	Opt_err_cont___2 = 33,
-	Opt_err_panic___2 = 34,
-	Opt_err_ro___2 = 35,
-	Opt_discard___2 = 36,
-	Opt_nfs = 37,
-	Opt_time_offset = 38,
-	Opt_nfs_stale_rw = 39,
-	Opt_nfs_nostale_ro = 40,
-	Opt_err___3 = 41,
-	Opt_dos1xfloppy = 42,
-};
-
-struct fat_fid {
-	u32 i_gen;
-	u32 i_pos_low;
-	u16 i_pos_hi;
-	u16 parent_i_pos_hi;
-	u32 parent_i_pos_low;
-	u32 parent_i_gen;
-};
-
-struct shortname_info {
-	unsigned char lower: 1;
-	unsigned char upper: 1;
-	unsigned char valid: 1;
-};
-
-struct iso_directory_record {
-	__u8 length[1];
-	__u8 ext_attr_length[1];
-	__u8 extent[8];
-	__u8 size[8];
-	__u8 date[7];
-	__u8 flags[1];
-	__u8 file_unit_size[1];
-	__u8 interleave[1];
-	__u8 volume_sequence_number[4];
-	__u8 name_len[1];
-	char name[0];
-};
-
-struct iso_inode_info {
-	long unsigned int i_iget5_block;
-	long unsigned int i_iget5_offset;
-	unsigned int i_first_extent;
-	unsigned char i_file_format;
-	unsigned char i_format_parm[3];
-	long unsigned int i_next_section_block;
-	long unsigned int i_next_section_offset;
-	off_t i_section_size;
-	struct inode vfs_inode;
-};
-
-struct isofs_sb_info {
-	long unsigned int s_ninodes;
-	long unsigned int s_nzones;
-	long unsigned int s_firstdatazone;
-	long unsigned int s_log_zone_size;
-	long unsigned int s_max_size;
-	int s_rock_offset;
-	s32 s_sbsector;
-	unsigned char s_joliet_level;
-	unsigned char s_mapping;
-	unsigned char s_check;
-	unsigned char s_session;
-	unsigned int s_high_sierra: 1;
-	unsigned int s_rock: 2;
-	unsigned int s_utf8: 1;
-	unsigned int s_cruft: 1;
-	unsigned int s_nocompress: 1;
-	unsigned int s_hide: 1;
-	unsigned int s_showassoc: 1;
-	unsigned int s_overriderockperm: 1;
-	unsigned int s_uid_set: 1;
-	unsigned int s_gid_set: 1;
-	umode_t s_fmode;
-	umode_t s_dmode;
-	kgid_t s_gid;
-	kuid_t s_uid;
-	struct nls_table *s_nls_iocharset;
-};
-
-struct cdrom_msf0 {
-	__u8 minute;
-	__u8 second;
-	__u8 frame;
-};
-
-union cdrom_addr {
-	struct cdrom_msf0 msf;
-	int lba;
-};
-
-struct cdrom_tocentry {
-	__u8 cdte_track;
-	__u8 cdte_adr: 4;
-	__u8 cdte_ctrl: 4;
-	__u8 cdte_format;
-	union cdrom_addr cdte_addr;
-	__u8 cdte_datamode;
-};
-
-struct cdrom_multisession {
-	union cdrom_addr addr;
-	__u8 xa_flag;
-	__u8 addr_format;
-};
-
-struct iso_volume_descriptor {
-	__u8 type[1];
-	char id[5];
-	__u8 version[1];
-	__u8 data[2041];
-};
-
-struct iso_primary_descriptor {
-	__u8 type[1];
-	char id[5];
-	__u8 version[1];
-	__u8 unused1[1];
-	char system_id[32];
-	char volume_id[32];
-	__u8 unused2[8];
-	__u8 volume_space_size[8];
-	__u8 unused3[32];
-	__u8 volume_set_size[4];
-	__u8 volume_sequence_number[4];
-	__u8 logical_block_size[4];
-	__u8 path_table_size[8];
-	__u8 type_l_path_table[4];
-	__u8 opt_type_l_path_table[4];
-	__u8 type_m_path_table[4];
-	__u8 opt_type_m_path_table[4];
-	__u8 root_directory_record[34];
-	char volume_set_id[128];
-	char publisher_id[128];
-	char preparer_id[128];
-	char application_id[128];
-	char copyright_file_id[37];
-	char abstract_file_id[37];
-	char bibliographic_file_id[37];
-	__u8 creation_date[17];
-	__u8 modification_date[17];
-	__u8 expiration_date[17];
-	__u8 effective_date[17];
-	__u8 file_structure_version[1];
-	__u8 unused4[1];
-	__u8 application_data[512];
-	__u8 unused5[653];
-};
-
-struct iso_supplementary_descriptor {
-	__u8 type[1];
-	char id[5];
-	__u8 version[1];
-	__u8 flags[1];
-	char system_id[32];
-	char volume_id[32];
-	__u8 unused2[8];
-	__u8 volume_space_size[8];
-	__u8 escape[32];
-	__u8 volume_set_size[4];
-	__u8 volume_sequence_number[4];
-	__u8 logical_block_size[4];
-	__u8 path_table_size[8];
-	__u8 type_l_path_table[4];
-	__u8 opt_type_l_path_table[4];
-	__u8 type_m_path_table[4];
-	__u8 opt_type_m_path_table[4];
-	__u8 root_directory_record[34];
-	char volume_set_id[128];
-	char publisher_id[128];
-	char preparer_id[128];
-	char application_id[128];
-	char copyright_file_id[37];
-	char abstract_file_id[37];
-	char bibliographic_file_id[37];
-	__u8 creation_date[17];
-	__u8 modification_date[17];
-	__u8 expiration_date[17];
-	__u8 effective_date[17];
-	__u8 file_structure_version[1];
-	__u8 unused4[1];
-	__u8 application_data[512];
-	__u8 unused5[653];
-};
-
-struct hs_volume_descriptor {
-	__u8 foo[8];
-	__u8 type[1];
-	char id[5];
-	__u8 version[1];
-	__u8 data[2033];
-};
-
-struct hs_primary_descriptor {
-	__u8 foo[8];
-	__u8 type[1];
-	__u8 id[5];
-	__u8 version[1];
-	__u8 unused1[1];
-	char system_id[32];
-	char volume_id[32];
-	__u8 unused2[8];
-	__u8 volume_space_size[8];
-	__u8 unused3[32];
-	__u8 volume_set_size[4];
-	__u8 volume_sequence_number[4];
-	__u8 logical_block_size[4];
-	__u8 path_table_size[8];
-	__u8 type_l_path_table[4];
-	__u8 unused4[28];
-	__u8 root_directory_record[34];
-};
-
-enum isofs_file_format {
-	isofs_file_normal = 0,
-	isofs_file_sparse = 1,
-	isofs_file_compressed = 2,
-};
-
-struct iso9660_options {
-	unsigned int rock: 1;
-	unsigned int joliet: 1;
-	unsigned int cruft: 1;
-	unsigned int hide: 1;
-	unsigned int showassoc: 1;
-	unsigned int nocompress: 1;
-	unsigned int overriderockperm: 1;
-	unsigned int uid_set: 1;
-	unsigned int gid_set: 1;
-	unsigned int utf8: 1;
-	unsigned char map;
-	unsigned char check;
-	unsigned int blocksize;
-	umode_t fmode;
-	umode_t dmode;
-	kgid_t gid;
-	kuid_t uid;
-	char *iocharset;
-	s32 session;
-	s32 sbsector;
-};
-
-enum {
-	Opt_block = 0,
-	Opt_check_r___2 = 1,
-	Opt_check_s___2 = 2,
-	Opt_cruft = 3,
-	Opt_gid___6 = 4,
-	Opt_ignore = 5,
-	Opt_iocharset = 6,
-	Opt_map_a = 7,
-	Opt_map_n = 8,
-	Opt_map_o = 9,
-	Opt_mode___5 = 10,
-	Opt_nojoliet = 11,
-	Opt_norock = 12,
-	Opt_sb___2 = 13,
-	Opt_session = 14,
-	Opt_uid___5 = 15,
-	Opt_unhide = 16,
-	Opt_utf8 = 17,
-	Opt_err___4 = 18,
-	Opt_nocompress = 19,
-	Opt_hide = 20,
-	Opt_showassoc = 21,
-	Opt_dmode = 22,
-	Opt_overriderockperm = 23,
-};
-
-struct isofs_iget5_callback_data {
-	long unsigned int block;
-	long unsigned int offset;
-};
-
-struct SU_SP_s {
-	__u8 magic[2];
-	__u8 skip;
-};
-
-struct SU_CE_s {
-	__u8 extent[8];
-	__u8 offset[8];
-	__u8 size[8];
-};
-
-struct SU_ER_s {
-	__u8 len_id;
-	__u8 len_des;
-	__u8 len_src;
-	__u8 ext_ver;
-	__u8 data[0];
-};
-
-struct RR_RR_s {
-	__u8 flags[1];
-};
-
-struct RR_PX_s {
-	__u8 mode[8];
-	__u8 n_links[8];
-	__u8 uid[8];
-	__u8 gid[8];
-};
-
-struct RR_PN_s {
-	__u8 dev_high[8];
-	__u8 dev_low[8];
-};
-
-struct SL_component {
-	__u8 flags;
-	__u8 len;
-	__u8 text[0];
-};
-
-struct RR_SL_s {
-	__u8 flags;
-	struct SL_component link;
-};
-
-struct RR_NM_s {
-	__u8 flags;
-	char name[0];
-};
-
-struct RR_CL_s {
-	__u8 location[8];
-};
-
-struct RR_PL_s {
-	__u8 location[8];
-};
-
-struct stamp {
-	__u8 time[7];
-};
-
-struct RR_TF_s {
-	__u8 flags;
-	struct stamp times[0];
-};
-
-struct RR_ZF_s {
-	__u8 algorithm[2];
-	__u8 parms[2];
-	__u8 real_size[8];
-};
-
-struct rock_ridge {
-	__u8 signature[2];
-	__u8 len;
-	__u8 version;
-	union {
-		struct SU_SP_s SP;
-		struct SU_CE_s CE;
-		struct SU_ER_s ER;
-		struct RR_RR_s RR;
-		struct RR_PX_s PX;
-		struct RR_PN_s PN;
-		struct RR_SL_s SL;
-		struct RR_NM_s NM;
-		struct RR_CL_s CL;
-		struct RR_PL_s PL;
-		struct RR_TF_s TF;
-		struct RR_ZF_s ZF;
-	} u;
-};
-
-struct rock_state {
-	void *buffer;
-	unsigned char *chr;
-	int len;
-	int cont_size;
-	int cont_extent;
-	int cont_offset;
-	int cont_loops;
-	struct inode *inode;
-};
-
-struct isofs_fid {
-	u32 block;
-	u16 offset;
-	u16 parent_offset;
-	u32 generation;
-	u32 parent_block;
-	u32 parent_generation;
-};
-
-typedef unsigned char Byte;
-
-typedef long unsigned int uLong;
-
-struct internal_state;
-
-struct z_stream_s {
-	const Byte *next_in;
-	uLong avail_in;
-	uLong total_in;
-	Byte *next_out;
-	uLong avail_out;
-	uLong total_out;
-	char *msg;
-	struct internal_state *state;
-	void *workspace;
-	int data_type;
-	uLong adler;
-	uLong reserved;
-};
-
-struct internal_state {
-	int dummy;
-};
-
-typedef struct z_stream_s z_stream;
-
-typedef __kernel_old_time_t time_t;
-
-struct nfs_seqid_counter {
-	ktime_t create_time;
-	int owner_id;
-	int flags;
-	u32 counter;
-	spinlock_t lock;
-	struct list_head list;
-	struct rpc_wait_queue wait;
-};
-
-struct nfs4_lock_state {
-	struct list_head ls_locks;
-	struct nfs4_state *ls_state;
-	long unsigned int ls_flags;
-	struct nfs_seqid_counter ls_seqid;
-	nfs4_stateid ls_stateid;
-	refcount_t ls_count;
-	fl_owner_t ls_owner;
-};
-
-struct in_addr {
-	__be32 s_addr;
-};
-
-struct sockaddr_in {
-	__kernel_sa_family_t sin_family;
-	__be16 sin_port;
-	struct in_addr sin_addr;
-	unsigned char __pad[8];
-};
-
-struct sockaddr_in6 {
-	short unsigned int sin6_family;
-	__be16 sin6_port;
-	__be32 sin6_flowinfo;
-	struct in6_addr sin6_addr;
-	__u32 sin6_scope_id;
-};
-
-enum rpc_auth_flavors {
-	RPC_AUTH_NULL = 0,
-	RPC_AUTH_UNIX = 1,
-	RPC_AUTH_SHORT = 2,
-	RPC_AUTH_DES = 3,
-	RPC_AUTH_KRB = 4,
-	RPC_AUTH_GSS = 6,
-	RPC_AUTH_MAXFLAVOR = 8,
-	RPC_AUTH_GSS_KRB5 = 390003,
-	RPC_AUTH_GSS_KRB5I = 390004,
-	RPC_AUTH_GSS_KRB5P = 390005,
-	RPC_AUTH_GSS_LKEY = 390006,
-	RPC_AUTH_GSS_LKEYI = 390007,
-	RPC_AUTH_GSS_LKEYP = 390008,
-	RPC_AUTH_GSS_SPKM = 390009,
-	RPC_AUTH_GSS_SPKMI = 390010,
-	RPC_AUTH_GSS_SPKMP = 390011,
-};
-
-struct xdr_netobj {
-	unsigned int len;
-	u8 *data;
-};
-
-struct rpc_task_setup {
-	struct rpc_task *task;
-	struct rpc_clnt *rpc_client;
-	struct rpc_xprt *rpc_xprt;
-	struct rpc_cred *rpc_op_cred;
-	const struct rpc_message *rpc_message;
-	const struct rpc_call_ops *callback_ops;
-	void *callback_data;
-	struct workqueue_struct *workqueue;
-	short unsigned int flags;
-	signed char priority;
-};
-
-enum rpc_display_format_t {
-	RPC_DISPLAY_ADDR = 0,
-	RPC_DISPLAY_PORT = 1,
-	RPC_DISPLAY_PROTO = 2,
-	RPC_DISPLAY_HEX_ADDR = 3,
-	RPC_DISPLAY_HEX_PORT = 4,
-	RPC_DISPLAY_NETID = 5,
-	RPC_DISPLAY_MAX = 6,
-};
-
-enum xprt_transports {
-	XPRT_TRANSPORT_UDP = 17,
-	XPRT_TRANSPORT_TCP = 6,
-	XPRT_TRANSPORT_BC_TCP = 2147483654,
-	XPRT_TRANSPORT_RDMA = 256,
-	XPRT_TRANSPORT_BC_RDMA = 2147483904,
-	XPRT_TRANSPORT_LOCAL = 257,
-};
-
-struct svc_xprt_class;
-
-struct svc_xprt_ops;
-
-struct svc_serv;
-
-struct svc_xprt {
-	struct svc_xprt_class *xpt_class;
-	const struct svc_xprt_ops *xpt_ops;
-	struct kref xpt_ref;
-	struct list_head xpt_list;
-	struct list_head xpt_ready;
-	long unsigned int xpt_flags;
-	struct svc_serv *xpt_server;
-	atomic_t xpt_reserved;
-	atomic_t xpt_nr_rqsts;
-	struct mutex xpt_mutex;
-	spinlock_t xpt_lock;
-	void *xpt_auth_cache;
-	struct list_head xpt_deferred;
-	struct __kernel_sockaddr_storage xpt_local;
-	size_t xpt_locallen;
-	struct __kernel_sockaddr_storage xpt_remote;
-	size_t xpt_remotelen;
-	char xpt_remotebuf[58];
-	struct list_head xpt_users;
-	struct net *xpt_net;
-	const struct cred *xpt_cred;
-	struct rpc_xprt *xpt_bc_xprt;
-	struct rpc_xprt_switch *xpt_bc_xps;
-};
-
-struct svc_program;
-
-struct svc_stat {
-	struct svc_program *program;
-	unsigned int netcnt;
-	unsigned int netudpcnt;
-	unsigned int nettcpcnt;
-	unsigned int nettcpconn;
-	unsigned int rpccnt;
-	unsigned int rpcbadfmt;
-	unsigned int rpcbadauth;
-	unsigned int rpcbadclnt;
-};
-
-struct svc_version;
-
-struct svc_rqst;
-
-struct svc_process_info;
-
-struct svc_program {
-	struct svc_program *pg_next;
-	u32 pg_prog;
-	unsigned int pg_lovers;
-	unsigned int pg_hivers;
-	unsigned int pg_nvers;
-	const struct svc_version **pg_vers;
-	char *pg_name;
-	char *pg_class;
-	struct svc_stat *pg_stats;
-	int (*pg_authenticate)(struct svc_rqst *);
-	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
-	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
-};
-
-struct rpc_pipe_msg {
-	struct list_head list;
-	void *data;
-	size_t len;
-	size_t copied;
-	int errno;
-};
-
-struct rpc_pipe_ops {
-	ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char *, size_t);
-	ssize_t (*downcall)(struct file *, const char *, size_t);
-	void (*release_pipe)(struct inode *);
-	int (*open_pipe)(struct inode *);
-	void (*destroy_msg)(struct rpc_pipe_msg *);
-};
-
-struct rpc_pipe {
-	struct list_head pipe;
-	struct list_head in_upcall;
-	struct list_head in_downcall;
-	int pipelen;
-	int nreaders;
-	int nwriters;
-	int flags;
-	struct delayed_work queue_timeout;
-	const struct rpc_pipe_ops *ops;
-	spinlock_t lock;
-	struct dentry *dentry;
-};
-
-struct rpc_iostats {
-	spinlock_t om_lock;
-	long unsigned int om_ops;
-	long unsigned int om_ntrans;
-	long unsigned int om_timeouts;
-	long long unsigned int om_bytes_sent;
-	long long unsigned int om_bytes_recv;
-	ktime_t om_queue;
-	ktime_t om_rtt;
-	ktime_t om_execute;
-	long unsigned int om_error_status;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct rpc_create_args {
-	struct net *net;
-	int protocol;
-	struct sockaddr *address;
-	size_t addrsize;
-	struct sockaddr *saddress;
-	const struct rpc_timeout *timeout;
-	const char *servername;
-	const char *nodename;
-	const struct rpc_program *program;
-	u32 prognumber;
-	u32 version;
-	rpc_authflavor_t authflavor;
-	u32 nconnect;
-	long unsigned int flags;
-	char *client_name;
-	struct svc_xprt *bc_xprt;
-	const struct cred *cred;
-};
-
-struct gss_api_mech;
-
-struct gss_ctx {
-	struct gss_api_mech *mech_type;
-	void *internal_ctx_id;
-};
-
-struct gss_api_ops;
-
-struct pf_desc;
-
-struct gss_api_mech {
-	struct list_head gm_list;
-	struct module *gm_owner;
-	struct rpcsec_gss_oid gm_oid;
-	char *gm_name;
-	const struct gss_api_ops *gm_ops;
-	int gm_pf_num;
-	struct pf_desc *gm_pfs;
-	const char *gm_upcall_enctypes;
-};
-
-struct pf_desc {
-	u32 pseudoflavor;
-	u32 qop;
-	u32 service;
-	char *name;
-	char *auth_domain_name;
-	bool datatouch;
-};
-
-struct gss_api_ops {
-	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time_t *, gfp_t);
-	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
-	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
-	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
-	u32 (*gss_unwrap)(struct gss_ctx *, int, struct xdr_buf *);
-	void (*gss_delete_sec_context)(void *);
-};
-
-struct pnfs_layout_range {
-	u32 iomode;
-	u64 offset;
-	u64 length;
-};
-
-struct pnfs_layout_hdr;
-
-struct pnfs_layout_segment {
-	struct list_head pls_list;
-	struct list_head pls_lc_list;
-	struct pnfs_layout_range pls_range;
-	refcount_t pls_refcount;
-	u32 pls_seq;
-	long unsigned int pls_flags;
-	struct pnfs_layout_hdr *pls_layout;
-};
-
-struct nfs_seqid {
-	struct nfs_seqid_counter *sequence;
-	struct list_head list;
-	struct rpc_task *task;
-};
-
-struct nfs4_pathname {
-	unsigned int ncomponents;
-	struct nfs4_string components[512];
-};
-
-struct nfs4_fs_location {
-	unsigned int nservers;
-	struct nfs4_string servers[10];
-	struct nfs4_pathname rootpath;
-};
-
-struct nfs4_fs_locations {
-	struct nfs_fattr fattr;
-	const struct nfs_server *server;
-	struct nfs4_pathname fs_path;
-	int nlocations;
-	struct nfs4_fs_location locations[10];
-};
-
-struct nfs_page {
-	struct list_head wb_list;
-	struct page *wb_page;
-	struct nfs_lock_context *wb_lock_context;
-	long unsigned int wb_index;
-	unsigned int wb_offset;
-	unsigned int wb_pgbase;
-	unsigned int wb_bytes;
-	struct kref wb_kref;
-	long unsigned int wb_flags;
-	struct nfs_write_verifier wb_verf;
-	struct nfs_page *wb_this_page;
-	struct nfs_page *wb_head;
-	short unsigned int wb_nio;
-};
-
-struct nfs_parsed_mount_data;
-
-struct nfs_clone_mount;
-
-struct nfs_mount_info {
-	void (*fill_super)(struct super_block *, struct nfs_mount_info *);
-	int (*set_security)(struct super_block *, struct dentry *, struct nfs_mount_info *);
-	struct nfs_parsed_mount_data *parsed;
-	struct nfs_clone_mount *cloned;
-	struct nfs_fh *mntfh;
-};
-
-struct nfs_subversion {
-	struct module *owner;
-	struct file_system_type *nfs_fs;
-	const struct rpc_version *rpc_vers;
-	const struct nfs_rpc_ops *rpc_ops;
-	const struct super_operations *sops;
-	const struct xattr_handler **xattr;
-	struct list_head list;
-};
-
-struct nfs_iostats {
-	long long unsigned int bytes[8];
-	long unsigned int events[27];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct nfs4_state_owner;
-
-struct nfs4_state {
-	struct list_head open_states;
-	struct list_head inode_states;
-	struct list_head lock_states;
-	struct nfs4_state_owner *owner;
-	struct inode *inode;
-	long unsigned int flags;
-	spinlock_t state_lock;
-	seqlock_t seqlock;
-	nfs4_stateid stateid;
-	nfs4_stateid open_stateid;
-	unsigned int n_rdonly;
-	unsigned int n_wronly;
-	unsigned int n_rdwr;
-	fmode_t state;
-	refcount_t count;
-	wait_queue_head_t waitq;
-	struct callback_head callback_head;
-};
-
-struct nlmsvc_binding {
-	__be32 (*fopen)(struct svc_rqst *, struct nfs_fh *, struct file **);
-	void (*fclose)(struct file *);
-};
-
-struct svc_cred {
-	kuid_t cr_uid;
-	kgid_t cr_gid;
-	struct group_info *cr_group_info;
-	u32 cr_flavor;
-	char *cr_raw_principal;
-	char *cr_principal;
-	char *cr_targ_princ;
-	struct gss_api_mech *cr_gss_mech;
-};
-
-struct cache_deferred_req;
-
-struct cache_req {
-	struct cache_deferred_req * (*defer)(struct cache_req *);
-	int thread_wait;
-};
-
-struct svc_cacherep;
-
-struct svc_pool;
-
-struct svc_procedure;
-
-struct auth_ops;
-
-struct svc_deferred_req;
-
-struct auth_domain;
-
-struct svc_rqst {
-	struct list_head rq_all;
-	struct callback_head rq_rcu_head;
-	struct svc_xprt *rq_xprt;
-	struct __kernel_sockaddr_storage rq_addr;
-	size_t rq_addrlen;
-	struct __kernel_sockaddr_storage rq_daddr;
-	size_t rq_daddrlen;
-	struct svc_serv *rq_server;
-	struct svc_pool *rq_pool;
-	const struct svc_procedure *rq_procinfo;
-	struct auth_ops *rq_authop;
-	struct svc_cred rq_cred;
-	void *rq_xprt_ctxt;
-	struct svc_deferred_req *rq_deferred;
-	size_t rq_xprt_hlen;
-	struct xdr_buf rq_arg;
-	struct xdr_buf rq_res;
-	struct page *rq_pages[260];
-	struct page **rq_respages;
-	struct page **rq_next_page;
-	struct page **rq_page_end;
-	struct kvec rq_vec[259];
-	__be32 rq_xid;
-	u32 rq_prog;
-	u32 rq_vers;
-	u32 rq_proc;
-	u32 rq_prot;
-	int rq_cachetype;
-	long unsigned int rq_flags;
-	ktime_t rq_qtime;
-	void *rq_argp;
-	void *rq_resp;
-	void *rq_auth_data;
-	int rq_auth_slack;
-	int rq_reserved;
-	ktime_t rq_stime;
-	struct cache_req rq_chandle;
-	struct auth_domain *rq_client;
-	struct auth_domain *rq_gssclient;
-	struct svc_cacherep *rq_cacherep;
-	struct task_struct *rq_task;
-	spinlock_t rq_lock;
-	struct net *rq_bc_net;
-};
-
-struct nlmclnt_initdata {
-	const char *hostname;
-	const struct sockaddr *address;
-	size_t addrlen;
-	short unsigned int protocol;
-	u32 nfs_version;
-	int noresvport;
-	struct net *net;
-	const struct nlmclnt_operations *nlmclnt_ops;
-	const struct cred *cred;
-};
-
-struct cache_head {
-	struct hlist_node cache_list;
-	time_t expiry_time;
-	time_t last_refresh;
-	struct kref ref;
-	long unsigned int flags;
-};
-
-struct cache_detail {
-	struct module *owner;
-	int hash_size;
-	struct hlist_head *hash_table;
-	spinlock_t hash_lock;
-	char *name;
-	void (*cache_put)(struct kref *);
-	int (*cache_upcall)(struct cache_detail *, struct cache_head *);
-	void (*cache_request)(struct cache_detail *, struct cache_head *, char **, int *);
-	int (*cache_parse)(struct cache_detail *, char *, int);
-	int (*cache_show)(struct seq_file *, struct cache_detail *, struct cache_head *);
-	void (*warn_no_listener)(struct cache_detail *, int);
-	struct cache_head * (*alloc)();
-	void (*flush)();
-	int (*match)(struct cache_head *, struct cache_head *);
-	void (*init)(struct cache_head *, struct cache_head *);
-	void (*update)(struct cache_head *, struct cache_head *);
-	time_t flush_time;
-	struct list_head others;
-	time_t nextcheck;
-	int entries;
-	struct list_head queue;
-	atomic_t writers;
-	time_t last_close;
-	time_t last_warn;
-	union {
-		struct proc_dir_entry *procfs;
-		struct dentry *pipefs;
-	};
-	struct net *net;
-};
-
-struct cache_deferred_req {
-	struct hlist_node hash;
-	struct list_head recent;
-	struct cache_head *item;
-	void *owner;
-	void (*revisit)(struct cache_deferred_req *, int);
-};
-
-struct auth_domain {
-	struct kref ref;
-	struct hlist_node hash;
-	char *name;
-	struct auth_ops *flavour;
-	struct callback_head callback_head;
-};
-
-struct auth_ops {
-	char *name;
-	struct module *owner;
-	int flavour;
-	int (*accept)(struct svc_rqst *, __be32 *);
-	int (*release)(struct svc_rqst *);
-	void (*domain_release)(struct auth_domain *);
-	int (*set_client)(struct svc_rqst *);
-};
-
-struct svc_pool_stats {
-	atomic_long_t packets;
-	long unsigned int sockets_queued;
-	atomic_long_t threads_woken;
-	atomic_long_t threads_timedout;
-};
-
-struct svc_pool {
-	unsigned int sp_id;
-	spinlock_t sp_lock;
-	struct list_head sp_sockets;
-	unsigned int sp_nrthreads;
-	struct list_head sp_all_threads;
-	struct svc_pool_stats sp_stats;
-	long unsigned int sp_flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct svc_serv_ops {
-	void (*svo_shutdown)(struct svc_serv *, struct net *);
-	int (*svo_function)(void *);
-	void (*svo_enqueue_xprt)(struct svc_xprt *);
-	int (*svo_setup)(struct svc_serv *, struct svc_pool *, int);
-	struct module *svo_module;
-};
-
-struct svc_serv {
-	struct svc_program *sv_program;
-	struct svc_stat *sv_stats;
-	spinlock_t sv_lock;
-	unsigned int sv_nrthreads;
-	unsigned int sv_maxconn;
-	unsigned int sv_max_payload;
-	unsigned int sv_max_mesg;
-	unsigned int sv_xdrsize;
-	struct list_head sv_permsocks;
-	struct list_head sv_tempsocks;
-	int sv_tmpcnt;
-	struct timer_list sv_temptimer;
-	char *sv_name;
-	unsigned int sv_nrpools;
-	struct svc_pool *sv_pools;
-	const struct svc_serv_ops *sv_ops;
-};
-
-struct svc_procedure {
-	__be32 (*pc_func)(struct svc_rqst *);
-	int (*pc_decode)(struct svc_rqst *, __be32 *);
-	int (*pc_encode)(struct svc_rqst *, __be32 *);
-	void (*pc_release)(struct svc_rqst *);
-	unsigned int pc_argsize;
-	unsigned int pc_ressize;
-	unsigned int pc_cachetype;
-	unsigned int pc_xdrressize;
-};
-
-struct svc_deferred_req {
-	u32 prot;
-	struct svc_xprt *xprt;
-	struct __kernel_sockaddr_storage addr;
-	size_t addrlen;
-	struct __kernel_sockaddr_storage daddr;
-	size_t daddrlen;
-	struct cache_deferred_req handle;
-	size_t xprt_hlen;
-	int argslen;
-	__be32 args[0];
-};
-
-struct svc_process_info {
-	union {
-		int (*dispatch)(struct svc_rqst *, __be32 *);
-		struct {
-			unsigned int lovers;
-			unsigned int hivers;
-		} mismatch;
-	};
-};
-
-struct svc_version {
-	u32 vs_vers;
-	u32 vs_nproc;
-	const struct svc_procedure *vs_proc;
-	unsigned int *vs_count;
-	u32 vs_xdrsize;
-	bool vs_hidden;
-	bool vs_rpcb_optnl;
-	bool vs_need_cong_ctrl;
-	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
-};
-
-struct svc_pool_map {
-	int count;
-	int mode;
-	unsigned int npools;
-	unsigned int *pool_to;
-	unsigned int *to_pool;
-};
-
-struct svc_xprt_ops {
-	struct svc_xprt * (*xpo_create)(struct svc_serv *, struct net *, struct sockaddr *, int, int);
-	struct svc_xprt * (*xpo_accept)(struct svc_xprt *);
-	int (*xpo_has_wspace)(struct svc_xprt *);
-	int (*xpo_recvfrom)(struct svc_rqst *);
-	int (*xpo_sendto)(struct svc_rqst *);
-	void (*xpo_release_rqst)(struct svc_rqst *);
-	void (*xpo_detach)(struct svc_xprt *);
-	void (*xpo_free)(struct svc_xprt *);
-	void (*xpo_secure_port)(struct svc_rqst *);
-	void (*xpo_kill_temp_xprt)(struct svc_xprt *);
-};
-
-struct svc_xprt_class {
-	const char *xcl_name;
-	struct module *xcl_owner;
-	const struct svc_xprt_ops *xcl_ops;
-	struct list_head xcl_list;
-	u32 xcl_max_payload;
-	int xcl_ident;
-};
-
-struct nfs4_state_recovery_ops {
-	int owner_flag_bit;
-	int state_flag_bit;
-	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
-	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
-	int (*establish_clid)(struct nfs_client *, const struct cred *);
-	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
-	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
-};
-
-struct nfs4_state_maintenance_ops {
-	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
-	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
-	int (*renew_lease)(struct nfs_client *, const struct cred *);
-};
-
-struct nfs4_mig_recovery_ops {
-	int (*get_locations)(struct inode *, struct nfs4_fs_locations *, struct page *, const struct cred *);
-	int (*fsid_present)(struct inode *, const struct cred *);
-};
-
-struct nfs4_state_owner {
-	struct nfs_server *so_server;
-	struct list_head so_lru;
-	long unsigned int so_expires;
-	struct rb_node so_server_node;
-	const struct cred *so_cred;
-	spinlock_t so_lock;
-	atomic_t so_count;
-	long unsigned int so_flags;
-	struct list_head so_states;
-	struct nfs_seqid_counter so_seqid;
-	seqcount_t so_reclaim_seqcount;
-	struct mutex so_delegreturn_mutex;
-};
-
-enum nfs_stat_bytecounters {
-	NFSIOS_NORMALREADBYTES = 0,
-	NFSIOS_NORMALWRITTENBYTES = 1,
-	NFSIOS_DIRECTREADBYTES = 2,
-	NFSIOS_DIRECTWRITTENBYTES = 3,
-	NFSIOS_SERVERREADBYTES = 4,
-	NFSIOS_SERVERWRITTENBYTES = 5,
-	NFSIOS_READPAGES = 6,
-	NFSIOS_WRITEPAGES = 7,
-	__NFSIOS_BYTESMAX = 8,
-};
-
-enum nfs_stat_eventcounters {
-	NFSIOS_INODEREVALIDATE = 0,
-	NFSIOS_DENTRYREVALIDATE = 1,
-	NFSIOS_DATAINVALIDATE = 2,
-	NFSIOS_ATTRINVALIDATE = 3,
-	NFSIOS_VFSOPEN = 4,
-	NFSIOS_VFSLOOKUP = 5,
-	NFSIOS_VFSACCESS = 6,
-	NFSIOS_VFSUPDATEPAGE = 7,
-	NFSIOS_VFSREADPAGE = 8,
-	NFSIOS_VFSREADPAGES = 9,
-	NFSIOS_VFSWRITEPAGE = 10,
-	NFSIOS_VFSWRITEPAGES = 11,
-	NFSIOS_VFSGETDENTS = 12,
-	NFSIOS_VFSSETATTR = 13,
-	NFSIOS_VFSFLUSH = 14,
-	NFSIOS_VFSFSYNC = 15,
-	NFSIOS_VFSLOCK = 16,
-	NFSIOS_VFSRELEASE = 17,
-	NFSIOS_CONGESTIONWAIT = 18,
-	NFSIOS_SETATTRTRUNC = 19,
-	NFSIOS_EXTENDWRITE = 20,
-	NFSIOS_SILLYRENAME = 21,
-	NFSIOS_SHORTREAD = 22,
-	NFSIOS_SHORTWRITE = 23,
-	NFSIOS_DELAY = 24,
-	NFSIOS_PNFS_READ = 25,
-	NFSIOS_PNFS_WRITE = 26,
-	__NFSIOS_COUNTSMAX = 27,
-};
-
-struct nfs_pageio_descriptor;
-
-struct nfs_pageio_ops {
-	void (*pg_init)(struct nfs_pageio_descriptor *, struct nfs_page *);
-	size_t (*pg_test)(struct nfs_pageio_descriptor *, struct nfs_page *, struct nfs_page *);
-	int (*pg_doio)(struct nfs_pageio_descriptor *);
-	unsigned int (*pg_get_mirror_count)(struct nfs_pageio_descriptor *, struct nfs_page *);
-	void (*pg_cleanup)(struct nfs_pageio_descriptor *);
-};
-
-struct nfs_pgio_mirror {
-	struct list_head pg_list;
-	long unsigned int pg_bytes_written;
-	size_t pg_count;
-	size_t pg_bsize;
-	unsigned int pg_base;
-	unsigned char pg_recoalesce: 1;
-};
-
-struct nfs_pageio_descriptor {
-	struct inode *pg_inode;
-	const struct nfs_pageio_ops *pg_ops;
-	const struct nfs_rw_ops *pg_rw_ops;
-	int pg_ioflags;
-	int pg_error;
-	const struct rpc_call_ops *pg_rpc_callops;
-	const struct nfs_pgio_completion_ops *pg_completion_ops;
-	struct pnfs_layout_segment *pg_lseg;
-	struct nfs_io_completion *pg_io_completion;
-	struct nfs_direct_req *pg_dreq;
-	unsigned int pg_bsize;
-	u32 pg_mirror_count;
-	struct nfs_pgio_mirror *pg_mirrors;
-	struct nfs_pgio_mirror pg_mirrors_static[1];
-	struct nfs_pgio_mirror *pg_mirrors_dynamic;
-	u32 pg_mirror_idx;
-	short unsigned int pg_maxretrans;
-	unsigned char pg_moreio: 1;
-};
-
-struct nfs_clone_mount {
-	const struct super_block *sb;
-	const struct dentry *dentry;
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-	char *hostname;
-	char *mnt_path;
-	struct sockaddr *addr;
-	size_t addrlen;
-	rpc_authflavor_t authflavor;
-};
-
-struct nfs_parsed_mount_data {
-	int flags;
-	unsigned int rsize;
-	unsigned int wsize;
-	unsigned int timeo;
-	unsigned int retrans;
-	unsigned int acregmin;
-	unsigned int acregmax;
-	unsigned int acdirmin;
-	unsigned int acdirmax;
-	unsigned int namlen;
-	unsigned int options;
-	unsigned int bsize;
-	struct nfs_auth_info auth_info;
-	rpc_authflavor_t selected_flavor;
-	char *client_address;
-	unsigned int version;
-	unsigned int minorversion;
-	char *fscache_uniq;
-	bool need_mount;
-	struct {
-		struct __kernel_sockaddr_storage address;
-		size_t addrlen;
-		char *hostname;
-		u32 version;
-		int port;
-		short unsigned int protocol;
-	} mount_server;
-	struct {
-		struct __kernel_sockaddr_storage address;
-		size_t addrlen;
-		char *hostname;
-		char *export_path;
-		int port;
-		short unsigned int protocol;
-		short unsigned int nconnect;
-	} nfs_server;
-	void *lsm_opts;
-	struct net *net;
-};
-
-struct bl_dev_msg {
-	int32_t status;
-	uint32_t major;
-	uint32_t minor;
-};
-
-struct nfs_netns_client;
-
-struct nfs_net {
-	struct cache_detail *nfs_dns_resolve;
-	struct rpc_pipe *bl_device_pipe;
-	struct bl_dev_msg bl_mount_reply;
-	wait_queue_head_t bl_wq;
-	struct mutex bl_mutex;
-	struct list_head nfs_client_list;
-	struct list_head nfs_volume_list;
-	struct idr cb_ident_idr;
-	short unsigned int nfs_callback_tcpport;
-	short unsigned int nfs_callback_tcpport6;
-	int cb_users[1];
-	struct nfs_netns_client *nfs_client;
-	spinlock_t nfs_client_lock;
-	ktime_t boot_time;
-	struct proc_dir_entry *proc_nfsfs;
-};
-
-struct nfs_netns_client {
-	struct kobject kobject;
-	struct net *net;
-	const char *identifier;
-};
-
-struct nfs_open_dir_context {
-	struct list_head list;
-	const struct cred *cred;
-	long unsigned int attr_gencount;
-	__u64 dir_cookie;
-	__u64 dup_cookie;
-	signed char duped;
-};
-
-struct nfs4_cached_acl;
-
-struct nfs_delegation;
-
-struct nfs_inode {
-	__u64 fileid;
-	struct nfs_fh fh;
-	long unsigned int flags;
-	long unsigned int cache_validity;
-	long unsigned int read_cache_jiffies;
-	long unsigned int attrtimeo;
-	long unsigned int attrtimeo_timestamp;
-	long unsigned int attr_gencount;
-	long unsigned int cache_change_attribute;
-	struct rb_root access_cache;
-	struct list_head access_cache_entry_lru;
-	struct list_head access_cache_inode_lru;
-	__be32 cookieverf[2];
-	atomic_long_t nrequests;
-	struct nfs_mds_commit_info commit_info;
-	struct list_head open_files;
-	struct rw_semaphore rmdir_sem;
-	struct mutex commit_mutex;
-	struct nfs4_cached_acl *nfs4_acl;
-	struct list_head open_states;
-	struct nfs_delegation *delegation;
-	struct rw_semaphore rwsem;
-	struct pnfs_layout_hdr *layout;
-	__u64 write_io;
-	__u64 read_io;
-	struct inode vfs_inode;
-};
-
-struct nfs_delegation {
-	struct list_head super_list;
-	const struct cred *cred;
-	struct inode *inode;
-	nfs4_stateid stateid;
-	fmode_t type;
-	long unsigned int pagemod_limit;
-	__u64 change_attr;
-	long unsigned int flags;
-	spinlock_t lock;
-	struct callback_head rcu;
-};
-
-struct svc_version___2;
-
-struct nfs_cache_array_entry {
-	u64 cookie;
-	u64 ino;
-	struct qstr string;
-	unsigned char d_type;
-};
-
-struct nfs_cache_array {
-	int size;
-	int eof_index;
-	u64 last_cookie;
-	struct nfs_cache_array_entry array[0];
-};
-
-typedef int (*decode_dirent_t)(struct xdr_stream *, struct nfs_entry *, bool);
-
-typedef struct {
-	struct file *file;
-	struct page *page;
-	struct dir_context *ctx;
-	long unsigned int page_index;
-	u64 *dir_cookie;
-	u64 last_cookie;
-	loff_t current_index;
-	decode_dirent_t decode;
-	long unsigned int timestamp;
-	long unsigned int gencount;
-	unsigned int cache_entry_index;
-	bool plus;
-	bool eof;
-} nfs_readdir_descriptor_t;
-
-typedef long long unsigned int pao_T_____7;
-
-struct nfs_find_desc {
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-};
-
-struct nfs2_fh {
-	char data[32];
-};
-
-struct nfs3_fh {
-	short unsigned int size;
-	unsigned char data[64];
-};
-
-struct nfs4_sessionid {
-	unsigned char data[16];
-};
-
-struct nfs4_channel_attrs {
-	u32 max_rqst_sz;
-	u32 max_resp_sz;
-	u32 max_resp_sz_cached;
-	u32 max_ops;
-	u32 max_reqs;
-};
-
-struct nfs4_slot {
-	struct nfs4_slot_table *table;
-	struct nfs4_slot *next;
-	long unsigned int generation;
-	u32 slot_nr;
-	u32 seq_nr;
-	u32 seq_nr_last_acked;
-	u32 seq_nr_highest_sent;
-	unsigned int privileged: 1;
-	unsigned int seq_done: 1;
-};
-
-struct nfs4_slot_table {
-	struct nfs4_session *session;
-	struct nfs4_slot *slots;
-	long unsigned int used_slots[16];
-	spinlock_t slot_tbl_lock;
-	struct rpc_wait_queue slot_tbl_waitq;
-	wait_queue_head_t slot_waitq;
-	u32 max_slots;
-	u32 max_slotid;
-	u32 highest_used_slotid;
-	u32 target_highest_slotid;
-	u32 server_highest_slotid;
-	s32 d_target_highest_slotid;
-	s32 d2_target_highest_slotid;
-	long unsigned int generation;
-	struct completion complete;
-	long unsigned int slot_tbl_state;
-};
-
-struct nfs4_session {
-	struct nfs4_sessionid sess_id;
-	u32 flags;
-	long unsigned int session_state;
-	u32 hash_alg;
-	u32 ssv_len;
-	struct nfs4_channel_attrs fc_attrs;
-	struct nfs4_slot_table fc_slot_table;
-	struct nfs4_channel_attrs bc_attrs;
-	struct nfs4_slot_table bc_slot_table;
-	struct nfs_client *clp;
-};
-
-struct nfs_mount_data {
-	int version;
-	int fd;
-	struct nfs2_fh old_root;
-	int flags;
-	int rsize;
-	int wsize;
-	int timeo;
-	int retrans;
-	int acregmin;
-	int acregmax;
-	int acdirmin;
-	int acdirmax;
-	struct sockaddr_in addr;
-	char hostname[256];
-	int namlen;
-	unsigned int bsize;
-	struct nfs3_fh root;
-	int pseudoflavor;
-	char context[257];
-};
-
-struct nfs_mount_request {
-	struct sockaddr *sap;
-	size_t salen;
-	char *hostname;
-	char *dirpath;
-	u32 version;
-	short unsigned int protocol;
-	struct nfs_fh *fh;
-	int noresvport;
-	unsigned int *auth_flav_len;
-	rpc_authflavor_t *auth_flavs;
-	struct net *net;
-};
-
-enum {
-	Opt_soft = 0,
-	Opt_softerr = 1,
-	Opt_hard = 2,
-	Opt_posix = 3,
-	Opt_noposix = 4,
-	Opt_cto = 5,
-	Opt_nocto = 6,
-	Opt_ac = 7,
-	Opt_noac = 8,
-	Opt_lock = 9,
-	Opt_nolock = 10,
-	Opt_udp = 11,
-	Opt_tcp = 12,
-	Opt_rdma = 13,
-	Opt_acl___2 = 14,
-	Opt_noacl___2 = 15,
-	Opt_rdirplus = 16,
-	Opt_nordirplus = 17,
-	Opt_sharecache = 18,
-	Opt_nosharecache = 19,
-	Opt_resvport = 20,
-	Opt_noresvport = 21,
-	Opt_fscache = 22,
-	Opt_nofscache = 23,
-	Opt_migration = 24,
-	Opt_nomigration = 25,
-	Opt_port = 26,
-	Opt_rsize = 27,
-	Opt_wsize = 28,
-	Opt_bsize = 29,
-	Opt_timeo = 30,
-	Opt_retrans = 31,
-	Opt_acregmin = 32,
-	Opt_acregmax = 33,
-	Opt_acdirmin = 34,
-	Opt_acdirmax = 35,
-	Opt_actimeo = 36,
-	Opt_namelen = 37,
-	Opt_mountport = 38,
-	Opt_mountvers = 39,
-	Opt_minorversion = 40,
-	Opt_nfsvers = 41,
-	Opt_sec = 42,
-	Opt_proto = 43,
-	Opt_mountproto = 44,
-	Opt_mounthost = 45,
-	Opt_addr = 46,
-	Opt_mountaddr = 47,
-	Opt_clientaddr = 48,
-	Opt_nconnect = 49,
-	Opt_lookupcache = 50,
-	Opt_fscache_uniq = 51,
-	Opt_local_lock = 52,
-	Opt_userspace = 53,
-	Opt_deprecated = 54,
-	Opt_sloppy = 55,
-	Opt_err___5 = 56,
-};
-
-enum {
-	Opt_xprt_udp = 0,
-	Opt_xprt_udp6 = 1,
-	Opt_xprt_tcp = 2,
-	Opt_xprt_tcp6 = 3,
-	Opt_xprt_rdma = 4,
-	Opt_xprt_rdma6 = 5,
-	Opt_xprt_err = 6,
-};
-
-enum {
-	Opt_sec_none = 0,
-	Opt_sec_sys = 1,
-	Opt_sec_krb5 = 2,
-	Opt_sec_krb5i = 3,
-	Opt_sec_krb5p = 4,
-	Opt_sec_lkey = 5,
-	Opt_sec_lkeyi = 6,
-	Opt_sec_lkeyp = 7,
-	Opt_sec_spkm = 8,
-	Opt_sec_spkmi = 9,
-	Opt_sec_spkmp = 10,
-	Opt_sec_err = 11,
-};
-
-enum {
-	Opt_lookupcache_all = 0,
-	Opt_lookupcache_positive = 1,
-	Opt_lookupcache_none = 2,
-	Opt_lookupcache_err = 3,
-};
-
-enum {
-	Opt_local_lock_all = 0,
-	Opt_local_lock_flock = 1,
-	Opt_local_lock_posix = 2,
-	Opt_local_lock_none = 3,
-	Opt_local_lock_err = 4,
-};
-
-enum {
-	Opt_vers_2 = 0,
-	Opt_vers_3 = 1,
-	Opt_vers_4 = 2,
-	Opt_vers_4_0 = 3,
-	Opt_vers_4_1 = 4,
-	Opt_vers_4_2 = 5,
-	Opt_vers_err = 6,
-};
-
-struct nfs_sb_mountdata {
-	struct nfs_server *server;
-	int mntflags;
-};
-
-struct proc_nfs_info {
-	int flag;
-	const char *str;
-	const char *nostr;
-};
-
-enum {
-	NFS_IOHDR_ERROR = 0,
-	NFS_IOHDR_EOF = 1,
-	NFS_IOHDR_REDO = 2,
-	NFS_IOHDR_STAT = 3,
-	NFS_IOHDR_RESEND_PNFS = 4,
-	NFS_IOHDR_RESEND_MDS = 5,
-};
-
-struct nfs_direct_req {
-	struct kref kref;
-	struct nfs_open_context *ctx;
-	struct nfs_lock_context *l_ctx;
-	struct kiocb *iocb;
-	struct inode *inode;
-	atomic_t io_count;
-	spinlock_t lock;
-	loff_t io_start;
-	ssize_t count;
-	ssize_t max_count;
-	ssize_t bytes_left;
-	ssize_t error;
-	struct completion completion;
-	struct nfs_mds_commit_info mds_cinfo;
-	struct pnfs_ds_commit_info ds_cinfo;
-	struct work_struct work;
-	int flags;
-	struct nfs_writeverf verf;
-};
-
-enum {
-	PG_BUSY = 0,
-	PG_MAPPED = 1,
-	PG_CLEAN = 2,
-	PG_COMMIT_TO_DS = 3,
-	PG_INODE_REF = 4,
-	PG_HEADLOCK = 5,
-	PG_TEARDOWN = 6,
-	PG_UNLOCKPAGE = 7,
-	PG_UPTODATE = 8,
-	PG_WB_END = 9,
-	PG_REMOVE = 10,
-	PG_CONTENDED1 = 11,
-	PG_CONTENDED2 = 12,
-};
-
-struct nfs_readdesc {
-	struct nfs_pageio_descriptor *pgio;
-	struct nfs_open_context *ctx;
-};
-
-struct nfs_io_completion {
-	void (*complete)(void *);
-	void *data;
-	struct kref refcount;
-};
-
-enum pnfs_try_status {
-	PNFS_ATTEMPTED = 0,
-	PNFS_NOT_ATTEMPTED = 1,
-	PNFS_TRY_AGAIN = 2,
-};
-
-enum {
-	MOUNTPROC_NULL = 0,
-	MOUNTPROC_MNT = 1,
-	MOUNTPROC_DUMP = 2,
-	MOUNTPROC_UMNT = 3,
-	MOUNTPROC_UMNTALL = 4,
-	MOUNTPROC_EXPORT = 5,
-};
-
-enum {
-	MOUNTPROC3_NULL = 0,
-	MOUNTPROC3_MNT = 1,
-	MOUNTPROC3_DUMP = 2,
-	MOUNTPROC3_UMNT = 3,
-	MOUNTPROC3_UMNTALL = 4,
-	MOUNTPROC3_EXPORT = 5,
-};
-
-enum mountstat {
-	MNT_OK = 0,
-	MNT_EPERM = 1,
-	MNT_ENOENT = 2,
-	MNT_EACCES = 13,
-	MNT_EINVAL = 22,
-};
-
-enum mountstat3 {
-	MNT3_OK = 0,
-	MNT3ERR_PERM = 1,
-	MNT3ERR_NOENT = 2,
-	MNT3ERR_IO = 5,
-	MNT3ERR_ACCES = 13,
-	MNT3ERR_NOTDIR = 20,
-	MNT3ERR_INVAL = 22,
-	MNT3ERR_NAMETOOLONG = 63,
-	MNT3ERR_NOTSUPP = 10004,
-	MNT3ERR_SERVERFAULT = 10006,
-};
-
-struct mountres {
-	int errno;
-	struct nfs_fh *fh;
-	unsigned int *auth_count;
-	rpc_authflavor_t *auth_flavors;
-};
-
-enum nfs_stat {
-	NFS_OK = 0,
-	NFSERR_PERM = 1,
-	NFSERR_NOENT = 2,
-	NFSERR_IO = 5,
-	NFSERR_NXIO = 6,
-	NFSERR_EAGAIN = 11,
-	NFSERR_ACCES = 13,
-	NFSERR_EXIST = 17,
-	NFSERR_XDEV = 18,
-	NFSERR_NODEV = 19,
-	NFSERR_NOTDIR = 20,
-	NFSERR_ISDIR = 21,
-	NFSERR_INVAL = 22,
-	NFSERR_FBIG = 27,
-	NFSERR_NOSPC = 28,
-	NFSERR_ROFS = 30,
-	NFSERR_MLINK = 31,
-	NFSERR_OPNOTSUPP = 45,
-	NFSERR_NAMETOOLONG = 63,
-	NFSERR_NOTEMPTY = 66,
-	NFSERR_DQUOT = 69,
-	NFSERR_STALE = 70,
-	NFSERR_REMOTE = 71,
-	NFSERR_WFLUSH = 99,
-	NFSERR_BADHANDLE = 10001,
-	NFSERR_NOT_SYNC = 10002,
-	NFSERR_BAD_COOKIE = 10003,
-	NFSERR_NOTSUPP = 10004,
-	NFSERR_TOOSMALL = 10005,
-	NFSERR_SERVERFAULT = 10006,
-	NFSERR_BADTYPE = 10007,
-	NFSERR_JUKEBOX = 10008,
-	NFSERR_SAME = 10009,
-	NFSERR_DENIED = 10010,
-	NFSERR_EXPIRED = 10011,
-	NFSERR_LOCKED = 10012,
-	NFSERR_GRACE = 10013,
-	NFSERR_FHEXPIRED = 10014,
-	NFSERR_SHARE_DENIED = 10015,
-	NFSERR_WRONGSEC = 10016,
-	NFSERR_CLID_INUSE = 10017,
-	NFSERR_RESOURCE = 10018,
-	NFSERR_MOVED = 10019,
-	NFSERR_NOFILEHANDLE = 10020,
-	NFSERR_MINOR_VERS_MISMATCH = 10021,
-	NFSERR_STALE_CLIENTID = 10022,
-	NFSERR_STALE_STATEID = 10023,
-	NFSERR_OLD_STATEID = 10024,
-	NFSERR_BAD_STATEID = 10025,
-	NFSERR_BAD_SEQID = 10026,
-	NFSERR_NOT_SAME = 10027,
-	NFSERR_LOCK_RANGE = 10028,
-	NFSERR_SYMLINK = 10029,
-	NFSERR_RESTOREFH = 10030,
-	NFSERR_LEASE_MOVED = 10031,
-	NFSERR_ATTRNOTSUPP = 10032,
-	NFSERR_NO_GRACE = 10033,
-	NFSERR_RECLAIM_BAD = 10034,
-	NFSERR_RECLAIM_CONFLICT = 10035,
-	NFSERR_BAD_XDR = 10036,
-	NFSERR_LOCKS_HELD = 10037,
-	NFSERR_OPENMODE = 10038,
-	NFSERR_BADOWNER = 10039,
-	NFSERR_BADCHAR = 10040,
-	NFSERR_BADNAME = 10041,
-	NFSERR_BAD_RANGE = 10042,
-	NFSERR_LOCK_NOTSUPP = 10043,
-	NFSERR_OP_ILLEGAL = 10044,
-	NFSERR_DEADLOCK = 10045,
-	NFSERR_FILE_OPEN = 10046,
-	NFSERR_ADMIN_REVOKED = 10047,
-	NFSERR_CB_PATH_DOWN = 10048,
-};
-
-struct trace_event_raw_nfs_inode_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	u64 version;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_inode_event_done {
-	struct trace_entry ent;
-	long unsigned int error;
-	dev_t dev;
-	u32 fhandle;
-	unsigned char type;
-	u64 fileid;
-	u64 version;
-	loff_t size;
-	long unsigned int nfsi_flags;
-	long unsigned int cache_validity;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_lookup_event {
-	struct trace_entry ent;
-	long unsigned int flags;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_lookup_event_done {
-	struct trace_entry ent;
-	long unsigned int error;
-	long unsigned int flags;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_atomic_open_enter {
-	struct trace_entry ent;
-	long unsigned int flags;
-	unsigned int fmode;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_atomic_open_exit {
-	struct trace_entry ent;
-	long unsigned int error;
-	long unsigned int flags;
-	unsigned int fmode;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_create_enter {
-	struct trace_entry ent;
-	long unsigned int flags;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_create_exit {
-	struct trace_entry ent;
-	long unsigned int error;
-	long unsigned int flags;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_directory_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_directory_event_done {
-	struct trace_entry ent;
-	long unsigned int error;
-	dev_t dev;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_link_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 fileid;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_link_exit {
-	struct trace_entry ent;
-	long unsigned int error;
-	dev_t dev;
-	u64 fileid;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_rename_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 old_dir;
-	u64 new_dir;
-	u32 __data_loc_old_name;
-	u32 __data_loc_new_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_rename_event_done {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int error;
-	u64 old_dir;
-	u32 __data_loc_old_name;
-	u64 new_dir;
-	u32 __data_loc_new_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_sillyrename_unlink {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int error;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_initiate_read {
-	struct trace_entry ent;
-	loff_t offset;
-	long unsigned int count;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_readpage_done {
-	struct trace_entry ent;
-	int status;
-	loff_t offset;
-	bool eof;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_initiate_write {
-	struct trace_entry ent;
-	loff_t offset;
-	long unsigned int count;
-	enum nfs3_stable_how stable;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_writeback_done {
-	struct trace_entry ent;
-	int status;
-	loff_t offset;
-	enum nfs3_stable_how stable;
-	long long unsigned int verifier;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_initiate_commit {
-	struct trace_entry ent;
-	loff_t offset;
-	long unsigned int count;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_commit_done {
-	struct trace_entry ent;
-	int status;
-	loff_t offset;
-	long long unsigned int verifier;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_fh_to_dentry {
-	struct trace_entry ent;
-	int error;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs_xdr_status {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nfs_inode_event {};
-
-struct trace_event_data_offsets_nfs_inode_event_done {};
-
-struct trace_event_data_offsets_nfs_lookup_event {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_lookup_event_done {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_atomic_open_enter {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_atomic_open_exit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_create_enter {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_create_exit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_directory_event {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_directory_event_done {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_link_enter {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_link_exit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_rename_event {
-	u32 old_name;
-	u32 new_name;
-};
-
-struct trace_event_data_offsets_nfs_rename_event_done {
-	u32 old_name;
-	u32 new_name;
-};
-
-struct trace_event_data_offsets_nfs_sillyrename_unlink {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs_initiate_read {};
-
-struct trace_event_data_offsets_nfs_readpage_done {};
-
-struct trace_event_data_offsets_nfs_initiate_write {};
-
-struct trace_event_data_offsets_nfs_writeback_done {};
-
-struct trace_event_data_offsets_nfs_initiate_commit {};
-
-struct trace_event_data_offsets_nfs_commit_done {};
-
-struct trace_event_data_offsets_nfs_fh_to_dentry {};
-
-struct trace_event_data_offsets_nfs_xdr_status {};
-
-typedef void (*btf_trace_nfs_refresh_inode_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_refresh_inode_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_revalidate_inode_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_revalidate_inode_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_invalidate_mapping_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_invalidate_mapping_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_getattr_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_getattr_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_setattr_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_setattr_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_writeback_page_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_writeback_page_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_writeback_inode_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_writeback_inode_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_fsync_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_fsync_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_access_enter)(void *, const struct inode *);
-
-typedef void (*btf_trace_nfs_access_exit)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs_lookup_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
-
-typedef void (*btf_trace_nfs_lookup_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
-
-typedef void (*btf_trace_nfs_lookup_revalidate_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
-
-typedef void (*btf_trace_nfs_lookup_revalidate_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
-
-typedef void (*btf_trace_nfs_atomic_open_enter)(void *, const struct inode *, const struct nfs_open_context *, unsigned int);
-
-typedef void (*btf_trace_nfs_atomic_open_exit)(void *, const struct inode *, const struct nfs_open_context *, unsigned int, int);
-
-typedef void (*btf_trace_nfs_create_enter)(void *, const struct inode *, const struct dentry *, unsigned int);
-
-typedef void (*btf_trace_nfs_create_exit)(void *, const struct inode *, const struct dentry *, unsigned int, int);
-
-typedef void (*btf_trace_nfs_mknod_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_mknod_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_mkdir_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_mkdir_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_rmdir_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_rmdir_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_remove_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_remove_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_unlink_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_unlink_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_symlink_enter)(void *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_symlink_exit)(void *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_link_enter)(void *, const struct inode *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_link_exit)(void *, const struct inode *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_rename_enter)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *);
-
-typedef void (*btf_trace_nfs_rename_exit)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_sillyrename_rename)(void *, const struct inode *, const struct dentry *, const struct inode *, const struct dentry *, int);
-
-typedef void (*btf_trace_nfs_sillyrename_unlink)(void *, const struct nfs_unlinkdata *, int);
-
-typedef void (*btf_trace_nfs_initiate_read)(void *, const struct inode *, loff_t, long unsigned int);
-
-typedef void (*btf_trace_nfs_readpage_done)(void *, const struct inode *, int, loff_t, bool);
-
-typedef void (*btf_trace_nfs_initiate_write)(void *, const struct inode *, loff_t, long unsigned int, enum nfs3_stable_how);
-
-typedef void (*btf_trace_nfs_writeback_done)(void *, const struct inode *, int, loff_t, struct nfs_writeverf *);
-
-typedef void (*btf_trace_nfs_initiate_commit)(void *, const struct nfs_commit_data *);
-
-typedef void (*btf_trace_nfs_commit_done)(void *, const struct nfs_commit_data *);
-
-typedef void (*btf_trace_nfs_fh_to_dentry)(void *, const struct super_block *, const struct nfs_fh *, u64, int);
-
-typedef void (*btf_trace_nfs_xdr_status)(void *, const struct xdr_stream *, int);
-
-enum {
-	FILEID_HIGH_OFF = 0,
-	FILEID_LOW_OFF = 1,
-	FILE_I_TYPE_OFF = 2,
-	EMBED_FH_OFF = 3,
-};
-
-struct nfs2_fsstat {
-	__u32 tsize;
-	__u32 bsize;
-	__u32 blocks;
-	__u32 bfree;
-	__u32 bavail;
-};
-
-struct nfs_sattrargs {
-	struct nfs_fh *fh;
-	struct iattr *sattr;
-};
-
-struct nfs_diropargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-};
-
-struct nfs_createargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-	struct iattr *sattr;
-};
-
-struct nfs_linkargs {
-	struct nfs_fh *fromfh;
-	struct nfs_fh *tofh;
-	const char *toname;
-	unsigned int tolen;
-};
-
-struct nfs_symlinkargs {
-	struct nfs_fh *fromfh;
-	const char *fromname;
-	unsigned int fromlen;
-	struct page **pages;
-	unsigned int pathlen;
-	struct iattr *sattr;
-};
-
-struct nfs_readdirargs {
-	struct nfs_fh *fh;
-	__u32 cookie;
-	unsigned int count;
-	struct page **pages;
-};
-
-struct nfs_diropok {
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-};
-
-struct nfs_readlinkargs {
-	struct nfs_fh *fh;
-	unsigned int pgbase;
-	unsigned int pglen;
-	struct page **pages;
-};
-
-struct nfs_createdata {
-	struct nfs_createargs arg;
-	struct nfs_diropok res;
-	struct nfs_fh fhandle;
-	struct nfs_fattr fattr;
-};
-
-enum nfs_ftype {
-	NFNON = 0,
-	NFREG = 1,
-	NFDIR = 2,
-	NFBLK = 3,
-	NFCHR = 4,
-	NFLNK = 5,
-	NFSOCK = 6,
-	NFBAD = 7,
-	NFFIFO = 8,
-};
-
-enum nfs2_ftype {
-	NF2NON = 0,
-	NF2REG = 1,
-	NF2DIR = 2,
-	NF2BLK = 3,
-	NF2CHR = 4,
-	NF2LNK = 5,
-	NF2SOCK = 6,
-	NF2BAD = 7,
-	NF2FIFO = 8,
-};
-
-enum nfs3_createmode {
-	NFS3_CREATE_UNCHECKED = 0,
-	NFS3_CREATE_GUARDED = 1,
-	NFS3_CREATE_EXCLUSIVE = 2,
-};
-
-enum nfs3_ftype {
-	NF3NON = 0,
-	NF3REG = 1,
-	NF3DIR = 2,
-	NF3BLK = 3,
-	NF3CHR = 4,
-	NF3LNK = 5,
-	NF3SOCK = 6,
-	NF3FIFO = 7,
-	NF3BAD = 8,
-};
-
-struct nfs3_sattrargs {
-	struct nfs_fh *fh;
-	struct iattr *sattr;
-	unsigned int guard;
-	struct timespec64 guardtime;
-};
-
-struct nfs3_diropargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-};
-
-struct nfs3_accessargs {
-	struct nfs_fh *fh;
-	__u32 access;
-};
-
-struct nfs3_createargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-	struct iattr *sattr;
-	enum nfs3_createmode createmode;
-	__be32 verifier[2];
-};
-
-struct nfs3_mkdirargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-	struct iattr *sattr;
-};
-
-struct nfs3_symlinkargs {
-	struct nfs_fh *fromfh;
-	const char *fromname;
-	unsigned int fromlen;
-	struct page **pages;
-	unsigned int pathlen;
-	struct iattr *sattr;
-};
-
-struct nfs3_mknodargs {
-	struct nfs_fh *fh;
-	const char *name;
-	unsigned int len;
-	enum nfs3_ftype type;
-	struct iattr *sattr;
-	dev_t rdev;
-};
-
-struct nfs3_linkargs {
-	struct nfs_fh *fromfh;
-	struct nfs_fh *tofh;
-	const char *toname;
-	unsigned int tolen;
-};
-
-struct nfs3_readdirargs {
-	struct nfs_fh *fh;
-	__u64 cookie;
-	__be32 verf[2];
-	bool plus;
-	unsigned int count;
-	struct page **pages;
-};
-
-struct nfs3_diropres {
-	struct nfs_fattr *dir_attr;
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-};
-
-struct nfs3_accessres {
-	struct nfs_fattr *fattr;
-	__u32 access;
-};
-
-struct nfs3_readlinkargs {
-	struct nfs_fh *fh;
-	unsigned int pgbase;
-	unsigned int pglen;
-	struct page **pages;
-};
-
-struct nfs3_linkres {
-	struct nfs_fattr *dir_attr;
-	struct nfs_fattr *fattr;
-};
-
-struct nfs3_readdirres {
-	struct nfs_fattr *dir_attr;
-	__be32 *verf;
-	bool plus;
-};
-
-struct nfs3_createdata {
-	struct rpc_message msg;
-	union {
-		struct nfs3_createargs create;
-		struct nfs3_mkdirargs mkdir;
-		struct nfs3_symlinkargs symlink;
-		struct nfs3_mknodargs mknod;
-	} arg;
-	struct nfs3_diropres res;
-	struct nfs_fh fh;
-	struct nfs_fattr fattr;
-	struct nfs_fattr dir_attr;
-};
-
-struct nfs3_getaclargs {
-	struct nfs_fh *fh;
-	int mask;
-	struct page **pages;
-};
-
-struct nfs3_setaclargs {
-	struct inode *inode;
-	int mask;
-	struct posix_acl *acl_access;
-	struct posix_acl *acl_default;
-	size_t len;
-	unsigned int npages;
-	struct page **pages;
-};
-
-struct nfs3_getaclres {
-	struct nfs_fattr *fattr;
-	int mask;
-	unsigned int acl_access_count;
-	unsigned int acl_default_count;
-	struct posix_acl *acl_access;
-	struct posix_acl *acl_default;
-};
-
-enum nfsstat4 {
-	NFS4_OK = 0,
-	NFS4ERR_PERM = 1,
-	NFS4ERR_NOENT = 2,
-	NFS4ERR_IO = 5,
-	NFS4ERR_NXIO = 6,
-	NFS4ERR_ACCESS = 13,
-	NFS4ERR_EXIST = 17,
-	NFS4ERR_XDEV = 18,
-	NFS4ERR_NOTDIR = 20,
-	NFS4ERR_ISDIR = 21,
-	NFS4ERR_INVAL = 22,
-	NFS4ERR_FBIG = 27,
-	NFS4ERR_NOSPC = 28,
-	NFS4ERR_ROFS = 30,
-	NFS4ERR_MLINK = 31,
-	NFS4ERR_NAMETOOLONG = 63,
-	NFS4ERR_NOTEMPTY = 66,
-	NFS4ERR_DQUOT = 69,
-	NFS4ERR_STALE = 70,
-	NFS4ERR_BADHANDLE = 10001,
-	NFS4ERR_BAD_COOKIE = 10003,
-	NFS4ERR_NOTSUPP = 10004,
-	NFS4ERR_TOOSMALL = 10005,
-	NFS4ERR_SERVERFAULT = 10006,
-	NFS4ERR_BADTYPE = 10007,
-	NFS4ERR_DELAY = 10008,
-	NFS4ERR_SAME = 10009,
-	NFS4ERR_DENIED = 10010,
-	NFS4ERR_EXPIRED = 10011,
-	NFS4ERR_LOCKED = 10012,
-	NFS4ERR_GRACE = 10013,
-	NFS4ERR_FHEXPIRED = 10014,
-	NFS4ERR_SHARE_DENIED = 10015,
-	NFS4ERR_WRONGSEC = 10016,
-	NFS4ERR_CLID_INUSE = 10017,
-	NFS4ERR_RESOURCE = 10018,
-	NFS4ERR_MOVED = 10019,
-	NFS4ERR_NOFILEHANDLE = 10020,
-	NFS4ERR_MINOR_VERS_MISMATCH = 10021,
-	NFS4ERR_STALE_CLIENTID = 10022,
-	NFS4ERR_STALE_STATEID = 10023,
-	NFS4ERR_OLD_STATEID = 10024,
-	NFS4ERR_BAD_STATEID = 10025,
-	NFS4ERR_BAD_SEQID = 10026,
-	NFS4ERR_NOT_SAME = 10027,
-	NFS4ERR_LOCK_RANGE = 10028,
-	NFS4ERR_SYMLINK = 10029,
-	NFS4ERR_RESTOREFH = 10030,
-	NFS4ERR_LEASE_MOVED = 10031,
-	NFS4ERR_ATTRNOTSUPP = 10032,
-	NFS4ERR_NO_GRACE = 10033,
-	NFS4ERR_RECLAIM_BAD = 10034,
-	NFS4ERR_RECLAIM_CONFLICT = 10035,
-	NFS4ERR_BADXDR = 10036,
-	NFS4ERR_LOCKS_HELD = 10037,
-	NFS4ERR_OPENMODE = 10038,
-	NFS4ERR_BADOWNER = 10039,
-	NFS4ERR_BADCHAR = 10040,
-	NFS4ERR_BADNAME = 10041,
-	NFS4ERR_BAD_RANGE = 10042,
-	NFS4ERR_LOCK_NOTSUPP = 10043,
-	NFS4ERR_OP_ILLEGAL = 10044,
-	NFS4ERR_DEADLOCK = 10045,
-	NFS4ERR_FILE_OPEN = 10046,
-	NFS4ERR_ADMIN_REVOKED = 10047,
-	NFS4ERR_CB_PATH_DOWN = 10048,
-	NFS4ERR_BADIOMODE = 10049,
-	NFS4ERR_BADLAYOUT = 10050,
-	NFS4ERR_BAD_SESSION_DIGEST = 10051,
-	NFS4ERR_BADSESSION = 10052,
-	NFS4ERR_BADSLOT = 10053,
-	NFS4ERR_COMPLETE_ALREADY = 10054,
-	NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
-	NFS4ERR_DELEG_ALREADY_WANTED = 10056,
-	NFS4ERR_BACK_CHAN_BUSY = 10057,
-	NFS4ERR_LAYOUTTRYLATER = 10058,
-	NFS4ERR_LAYOUTUNAVAILABLE = 10059,
-	NFS4ERR_NOMATCHING_LAYOUT = 10060,
-	NFS4ERR_RECALLCONFLICT = 10061,
-	NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
-	NFS4ERR_SEQ_MISORDERED = 10063,
-	NFS4ERR_SEQUENCE_POS = 10064,
-	NFS4ERR_REQ_TOO_BIG = 10065,
-	NFS4ERR_REP_TOO_BIG = 10066,
-	NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
-	NFS4ERR_RETRY_UNCACHED_REP = 10068,
-	NFS4ERR_UNSAFE_COMPOUND = 10069,
-	NFS4ERR_TOO_MANY_OPS = 10070,
-	NFS4ERR_OP_NOT_IN_SESSION = 10071,
-	NFS4ERR_HASH_ALG_UNSUPP = 10072,
-	NFS4ERR_CLIENTID_BUSY = 10074,
-	NFS4ERR_PNFS_IO_HOLE = 10075,
-	NFS4ERR_SEQ_FALSE_RETRY = 10076,
-	NFS4ERR_BAD_HIGH_SLOT = 10077,
-	NFS4ERR_DEADSESSION = 10078,
-	NFS4ERR_ENCR_ALG_UNSUPP = 10079,
-	NFS4ERR_PNFS_NO_LAYOUT = 10080,
-	NFS4ERR_NOT_ONLY_OP = 10081,
-	NFS4ERR_WRONG_CRED = 10082,
-	NFS4ERR_WRONG_TYPE = 10083,
-	NFS4ERR_DIRDELEG_UNAVAIL = 10084,
-	NFS4ERR_REJECT_DELEG = 10085,
-	NFS4ERR_RETURNCONFLICT = 10086,
-	NFS4ERR_DELEG_REVOKED = 10087,
-	NFS4ERR_PARTNER_NOTSUPP = 10088,
-	NFS4ERR_PARTNER_NO_AUTH = 10089,
-	NFS4ERR_UNION_NOTSUPP = 10090,
-	NFS4ERR_OFFLOAD_DENIED = 10091,
-	NFS4ERR_WRONG_LFS = 10092,
-	NFS4ERR_BADLABEL = 10093,
-	NFS4ERR_OFFLOAD_NO_REQS = 10094,
-};
-
-enum nfs_ftype4 {
-	NF4BAD = 0,
-	NF4REG = 1,
-	NF4DIR = 2,
-	NF4BLK = 3,
-	NF4CHR = 4,
-	NF4LNK = 5,
-	NF4SOCK = 6,
-	NF4FIFO = 7,
-	NF4ATTRDIR = 8,
-	NF4NAMEDATTR = 9,
-};
-
-enum open_claim_type4 {
-	NFS4_OPEN_CLAIM_NULL = 0,
-	NFS4_OPEN_CLAIM_PREVIOUS = 1,
-	NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
-	NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
-	NFS4_OPEN_CLAIM_FH = 4,
-	NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5,
-	NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6,
-};
-
-enum createmode4 {
-	NFS4_CREATE_UNCHECKED = 0,
-	NFS4_CREATE_GUARDED = 1,
-	NFS4_CREATE_EXCLUSIVE = 2,
-	NFS4_CREATE_EXCLUSIVE4_1 = 3,
-};
-
-enum {
-	NFSPROC4_CLNT_NULL = 0,
-	NFSPROC4_CLNT_READ = 1,
-	NFSPROC4_CLNT_WRITE = 2,
-	NFSPROC4_CLNT_COMMIT = 3,
-	NFSPROC4_CLNT_OPEN = 4,
-	NFSPROC4_CLNT_OPEN_CONFIRM = 5,
-	NFSPROC4_CLNT_OPEN_NOATTR = 6,
-	NFSPROC4_CLNT_OPEN_DOWNGRADE = 7,
-	NFSPROC4_CLNT_CLOSE = 8,
-	NFSPROC4_CLNT_SETATTR = 9,
-	NFSPROC4_CLNT_FSINFO = 10,
-	NFSPROC4_CLNT_RENEW = 11,
-	NFSPROC4_CLNT_SETCLIENTID = 12,
-	NFSPROC4_CLNT_SETCLIENTID_CONFIRM = 13,
-	NFSPROC4_CLNT_LOCK = 14,
-	NFSPROC4_CLNT_LOCKT = 15,
-	NFSPROC4_CLNT_LOCKU = 16,
-	NFSPROC4_CLNT_ACCESS = 17,
-	NFSPROC4_CLNT_GETATTR = 18,
-	NFSPROC4_CLNT_LOOKUP = 19,
-	NFSPROC4_CLNT_LOOKUP_ROOT = 20,
-	NFSPROC4_CLNT_REMOVE = 21,
-	NFSPROC4_CLNT_RENAME = 22,
-	NFSPROC4_CLNT_LINK = 23,
-	NFSPROC4_CLNT_SYMLINK = 24,
-	NFSPROC4_CLNT_CREATE = 25,
-	NFSPROC4_CLNT_PATHCONF = 26,
-	NFSPROC4_CLNT_STATFS = 27,
-	NFSPROC4_CLNT_READLINK = 28,
-	NFSPROC4_CLNT_READDIR = 29,
-	NFSPROC4_CLNT_SERVER_CAPS = 30,
-	NFSPROC4_CLNT_DELEGRETURN = 31,
-	NFSPROC4_CLNT_GETACL = 32,
-	NFSPROC4_CLNT_SETACL = 33,
-	NFSPROC4_CLNT_FS_LOCATIONS = 34,
-	NFSPROC4_CLNT_RELEASE_LOCKOWNER = 35,
-	NFSPROC4_CLNT_SECINFO = 36,
-	NFSPROC4_CLNT_FSID_PRESENT = 37,
-	NFSPROC4_CLNT_EXCHANGE_ID = 38,
-	NFSPROC4_CLNT_CREATE_SESSION = 39,
-	NFSPROC4_CLNT_DESTROY_SESSION = 40,
-	NFSPROC4_CLNT_SEQUENCE = 41,
-	NFSPROC4_CLNT_GET_LEASE_TIME = 42,
-	NFSPROC4_CLNT_RECLAIM_COMPLETE = 43,
-	NFSPROC4_CLNT_LAYOUTGET = 44,
-	NFSPROC4_CLNT_GETDEVICEINFO = 45,
-	NFSPROC4_CLNT_LAYOUTCOMMIT = 46,
-	NFSPROC4_CLNT_LAYOUTRETURN = 47,
-	NFSPROC4_CLNT_SECINFO_NO_NAME = 48,
-	NFSPROC4_CLNT_TEST_STATEID = 49,
-	NFSPROC4_CLNT_FREE_STATEID = 50,
-	NFSPROC4_CLNT_GETDEVICELIST = 51,
-	NFSPROC4_CLNT_BIND_CONN_TO_SESSION = 52,
-	NFSPROC4_CLNT_DESTROY_CLIENTID = 53,
-	NFSPROC4_CLNT_SEEK = 54,
-	NFSPROC4_CLNT_ALLOCATE = 55,
-	NFSPROC4_CLNT_DEALLOCATE = 56,
-	NFSPROC4_CLNT_LAYOUTSTATS = 57,
-	NFSPROC4_CLNT_CLONE = 58,
-	NFSPROC4_CLNT_COPY = 59,
-	NFSPROC4_CLNT_OFFLOAD_CANCEL = 60,
-	NFSPROC4_CLNT_LOOKUPP = 61,
-	NFSPROC4_CLNT_LAYOUTERROR = 62,
-	NFSPROC4_CLNT_COPY_NOTIFY = 63,
-};
-
-struct nfs4_get_lease_time_args {
-	struct nfs4_sequence_args la_seq_args;
-};
-
-struct nfs4_get_lease_time_res {
-	struct nfs4_sequence_res lr_seq_res;
-	struct nfs_fsinfo *lr_fsinfo;
-};
-
-struct nfs4_xdr_opaque_data;
-
-struct nfs4_xdr_opaque_ops {
-	void (*encode)(struct xdr_stream *, const void *, const struct nfs4_xdr_opaque_data *);
-	void (*free)(struct nfs4_xdr_opaque_data *);
-};
-
-struct nfs4_xdr_opaque_data {
-	const struct nfs4_xdr_opaque_ops *ops;
-	void *data;
-};
-
-struct nfs4_layoutdriver_data {
-	struct page **pages;
-	__u32 pglen;
-	__u32 len;
-};
-
-struct nfs4_layoutget_args {
-	struct nfs4_sequence_args seq_args;
-	__u32 type;
-	struct pnfs_layout_range range;
-	__u64 minlength;
-	__u32 maxcount;
-	struct inode *inode;
-	struct nfs_open_context *ctx;
-	nfs4_stateid stateid;
-	struct nfs4_layoutdriver_data layout;
-};
-
-struct nfs4_layoutget_res {
-	struct nfs4_sequence_res seq_res;
-	int status;
-	__u32 return_on_close;
-	struct pnfs_layout_range range;
-	__u32 type;
-	nfs4_stateid stateid;
-	struct nfs4_layoutdriver_data *layoutp;
-};
-
-struct nfs4_layoutget {
-	struct nfs4_layoutget_args args;
-	struct nfs4_layoutget_res res;
-	const struct cred *cred;
-	gfp_t gfp_flags;
-};
-
-struct nfs4_layoutreturn_args {
-	struct nfs4_sequence_args seq_args;
-	struct pnfs_layout_hdr *layout;
-	struct inode *inode;
-	struct pnfs_layout_range range;
-	nfs4_stateid stateid;
-	__u32 layout_type;
-	struct nfs4_xdr_opaque_data *ld_private;
-};
-
-struct nfs4_layoutreturn_res {
-	struct nfs4_sequence_res seq_res;
-	u32 lrs_present;
-	nfs4_stateid stateid;
-};
-
-struct stateowner_id {
-	__u64 create_time;
-	__u32 uniquifier;
-};
-
-struct nfs_openargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	struct nfs_seqid *seqid;
-	int open_flags;
-	fmode_t fmode;
-	u32 share_access;
-	u32 access;
-	__u64 clientid;
-	struct stateowner_id id;
-	union {
-		struct {
-			struct iattr *attrs;
-			nfs4_verifier verifier;
-		};
-		nfs4_stateid delegation;
-		fmode_t delegation_type;
-	} u;
-	const struct qstr *name;
-	const struct nfs_server *server;
-	const u32 *bitmask;
-	const u32 *open_bitmap;
-	enum open_claim_type4 claim;
-	enum createmode4 createmode;
-	const struct nfs4_label *label;
-	umode_t umask;
-	struct nfs4_layoutget_args *lg_args;
-};
-
-struct nfs_openres {
-	struct nfs4_sequence_res seq_res;
-	nfs4_stateid stateid;
-	struct nfs_fh fh;
-	struct nfs4_change_info cinfo;
-	__u32 rflags;
-	struct nfs_fattr *f_attr;
-	struct nfs4_label *f_label;
-	struct nfs_seqid *seqid;
-	const struct nfs_server *server;
-	fmode_t delegation_type;
-	nfs4_stateid delegation;
-	long unsigned int pagemod_limit;
-	__u32 do_recall;
-	__u32 attrset[3];
-	struct nfs4_string *owner;
-	struct nfs4_string *group_owner;
-	__u32 access_request;
-	__u32 access_supported;
-	__u32 access_result;
-	struct nfs4_layoutget_res *lg_res;
-};
-
-struct nfs_open_confirmargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	nfs4_stateid *stateid;
-	struct nfs_seqid *seqid;
-};
-
-struct nfs_open_confirmres {
-	struct nfs4_sequence_res seq_res;
-	nfs4_stateid stateid;
-	struct nfs_seqid *seqid;
-};
-
-struct nfs_closeargs {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	nfs4_stateid stateid;
-	struct nfs_seqid *seqid;
-	fmode_t fmode;
-	u32 share_access;
-	const u32 *bitmask;
-	struct nfs4_layoutreturn_args *lr_args;
-};
-
-struct nfs_closeres {
-	struct nfs4_sequence_res seq_res;
-	nfs4_stateid stateid;
-	struct nfs_fattr *fattr;
-	struct nfs_seqid *seqid;
-	const struct nfs_server *server;
-	struct nfs4_layoutreturn_res *lr_res;
-	int lr_ret;
-};
-
-struct nfs_lowner {
-	__u64 clientid;
-	__u64 id;
-	dev_t s_dev;
-};
-
-struct nfs_lock_args {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	struct file_lock *fl;
-	struct nfs_seqid *lock_seqid;
-	nfs4_stateid lock_stateid;
-	struct nfs_seqid *open_seqid;
-	nfs4_stateid open_stateid;
-	struct nfs_lowner lock_owner;
-	unsigned char block: 1;
-	unsigned char reclaim: 1;
-	unsigned char new_lock: 1;
-	unsigned char new_lock_owner: 1;
-};
-
-struct nfs_lock_res {
-	struct nfs4_sequence_res seq_res;
-	nfs4_stateid stateid;
-	struct nfs_seqid *lock_seqid;
-	struct nfs_seqid *open_seqid;
-};
-
-struct nfs_locku_args {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	struct file_lock *fl;
-	struct nfs_seqid *seqid;
-	nfs4_stateid stateid;
-};
-
-struct nfs_locku_res {
-	struct nfs4_sequence_res seq_res;
-	nfs4_stateid stateid;
-	struct nfs_seqid *seqid;
-};
-
-struct nfs_lockt_args {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	struct file_lock *fl;
-	struct nfs_lowner lock_owner;
-};
-
-struct nfs_lockt_res {
-	struct nfs4_sequence_res seq_res;
-	struct file_lock *denied;
-};
-
-struct nfs_release_lockowner_args {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_lowner lock_owner;
-};
-
-struct nfs_release_lockowner_res {
-	struct nfs4_sequence_res seq_res;
-};
-
-struct nfs4_delegreturnargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fhandle;
-	const nfs4_stateid *stateid;
-	const u32 *bitmask;
-	struct nfs4_layoutreturn_args *lr_args;
-};
-
-struct nfs4_delegreturnres {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fattr *fattr;
-	struct nfs_server *server;
-	struct nfs4_layoutreturn_res *lr_res;
-	int lr_ret;
-};
-
-struct nfs_setattrargs {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	nfs4_stateid stateid;
-	struct iattr *iap;
-	const struct nfs_server *server;
-	const u32 *bitmask;
-	const struct nfs4_label *label;
-};
-
-struct nfs_setaclargs {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	size_t acl_len;
-	struct page **acl_pages;
-};
-
-struct nfs_setaclres {
-	struct nfs4_sequence_res seq_res;
-};
-
-struct nfs_getaclargs {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fh;
-	size_t acl_len;
-	struct page **acl_pages;
-};
-
-struct nfs_getaclres {
-	struct nfs4_sequence_res seq_res;
-	size_t acl_len;
-	size_t acl_data_offset;
-	int acl_flags;
-	struct page *acl_scratch;
-};
-
-struct nfs_setattrres {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fattr *fattr;
-	struct nfs4_label *label;
-	const struct nfs_server *server;
-};
-
-typedef u64 clientid4;
-
-struct nfs4_accessargs {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-	u32 access;
-};
-
-struct nfs4_accessres {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fattr *fattr;
-	u32 supported;
-	u32 access;
-};
-
-struct nfs4_create_arg {
-	struct nfs4_sequence_args seq_args;
-	u32 ftype;
-	union {
-		struct {
-			struct page **pages;
-			unsigned int len;
-		} symlink;
-		struct {
-			u32 specdata1;
-			u32 specdata2;
-		} device;
-	} u;
-	const struct qstr *name;
-	const struct nfs_server *server;
-	const struct iattr *attrs;
-	const struct nfs_fh *dir_fh;
-	const u32 *bitmask;
-	const struct nfs4_label *label;
-	umode_t umask;
-};
-
-struct nfs4_create_res {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fh *fh;
-	struct nfs_fattr *fattr;
-	struct nfs4_label *label;
-	struct nfs4_change_info dir_cinfo;
-};
-
-struct nfs4_fsinfo_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-};
-
-struct nfs4_fsinfo_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fsinfo *fsinfo;
-};
-
-struct nfs4_getattr_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-};
-
-struct nfs4_getattr_res {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fattr *fattr;
-	struct nfs4_label *label;
-};
-
-struct nfs4_link_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const struct nfs_fh *dir_fh;
-	const struct qstr *name;
-	const u32 *bitmask;
-};
-
-struct nfs4_link_res {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fattr *fattr;
-	struct nfs4_label *label;
-	struct nfs4_change_info cinfo;
-	struct nfs_fattr *dir_attr;
-};
-
-struct nfs4_lookup_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *dir_fh;
-	const struct qstr *name;
-	const u32 *bitmask;
-};
-
-struct nfs4_lookup_res {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fattr *fattr;
-	struct nfs_fh *fh;
-	struct nfs4_label *label;
-};
-
-struct nfs4_lookupp_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-};
-
-struct nfs4_lookupp_res {
-	struct nfs4_sequence_res seq_res;
-	const struct nfs_server *server;
-	struct nfs_fattr *fattr;
-	struct nfs_fh *fh;
-	struct nfs4_label *label;
-};
-
-struct nfs4_lookup_root_arg {
-	struct nfs4_sequence_args seq_args;
-	const u32 *bitmask;
-};
-
-struct nfs4_pathconf_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-};
-
-struct nfs4_pathconf_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_pathconf *pathconf;
-};
-
-struct nfs4_readdir_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	u64 cookie;
-	nfs4_verifier verifier;
-	u32 count;
-	struct page **pages;
-	unsigned int pgbase;
-	const u32 *bitmask;
-	bool plus;
-};
-
-struct nfs4_readdir_res {
-	struct nfs4_sequence_res seq_res;
-	nfs4_verifier verifier;
-	unsigned int pgbase;
-};
-
-struct nfs4_readlink {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	unsigned int pgbase;
-	unsigned int pglen;
-	struct page **pages;
-};
-
-struct nfs4_readlink_res {
-	struct nfs4_sequence_res seq_res;
-};
-
-struct nfs4_setclientid {
-	const nfs4_verifier *sc_verifier;
-	u32 sc_prog;
-	unsigned int sc_netid_len;
-	char sc_netid[6];
-	unsigned int sc_uaddr_len;
-	char sc_uaddr[58];
-	struct nfs_client *sc_clnt;
-	struct rpc_cred *sc_cred;
-};
-
-struct nfs4_setclientid_res {
-	u64 clientid;
-	nfs4_verifier confirm;
-};
-
-struct nfs4_statfs_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	const u32 *bitmask;
-};
-
-struct nfs4_statfs_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fsstat *fsstat;
-};
-
-struct nfs4_server_caps_arg {
-	struct nfs4_sequence_args seq_args;
-	struct nfs_fh *fhandle;
-	const u32 *bitmask;
-};
-
-struct nfs4_server_caps_res {
-	struct nfs4_sequence_res seq_res;
-	u32 attr_bitmask[3];
-	u32 exclcreat_bitmask[3];
-	u32 acl_bitmask;
-	u32 has_links;
-	u32 has_symlinks;
-	u32 fh_expire_type;
-};
-
-struct nfs4_fs_locations_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *dir_fh;
-	const struct nfs_fh *fh;
-	const struct qstr *name;
-	struct page *page;
-	const u32 *bitmask;
-	clientid4 clientid;
-	unsigned char migration: 1;
-	unsigned char renew: 1;
-};
-
-struct nfs4_fs_locations_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs4_fs_locations *fs_locations;
-	unsigned char migration: 1;
-	unsigned char renew: 1;
-};
-
-struct nfs4_secinfo4 {
-	u32 flavor;
-	struct rpcsec_gss_info flavor_info;
-};
-
-struct nfs4_secinfo_flavors {
-	unsigned int num_flavors;
-	struct nfs4_secinfo4 flavors[0];
-};
-
-struct nfs4_secinfo_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *dir_fh;
-	const struct qstr *name;
-};
-
-struct nfs4_secinfo_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs4_secinfo_flavors *flavors;
-};
-
-struct nfs4_fsid_present_arg {
-	struct nfs4_sequence_args seq_args;
-	const struct nfs_fh *fh;
-	clientid4 clientid;
-	unsigned char renew: 1;
-};
-
-struct nfs4_fsid_present_res {
-	struct nfs4_sequence_res seq_res;
-	struct nfs_fh *fh;
-	unsigned char renew: 1;
-};
-
-struct nfs4_cached_acl {
-	int cached;
-	size_t len;
-	char data[0];
-};
-
-enum nfs4_client_state {
-	NFS4CLNT_MANAGER_RUNNING = 0,
-	NFS4CLNT_CHECK_LEASE = 1,
-	NFS4CLNT_LEASE_EXPIRED = 2,
-	NFS4CLNT_RECLAIM_REBOOT = 3,
-	NFS4CLNT_RECLAIM_NOGRACE = 4,
-	NFS4CLNT_DELEGRETURN = 5,
-	NFS4CLNT_SESSION_RESET = 6,
-	NFS4CLNT_LEASE_CONFIRM = 7,
-	NFS4CLNT_SERVER_SCOPE_MISMATCH = 8,
-	NFS4CLNT_PURGE_STATE = 9,
-	NFS4CLNT_BIND_CONN_TO_SESSION = 10,
-	NFS4CLNT_MOVED = 11,
-	NFS4CLNT_LEASE_MOVED = 12,
-	NFS4CLNT_DELEGATION_EXPIRED = 13,
-	NFS4CLNT_RUN_MANAGER = 14,
-	NFS4CLNT_DELEGRETURN_RUNNING = 15,
-};
-
-enum {
-	NFS_OWNER_RECLAIM_REBOOT = 0,
-	NFS_OWNER_RECLAIM_NOGRACE = 1,
-};
-
-enum {
-	LK_STATE_IN_USE = 0,
-	NFS_DELEGATED_STATE = 1,
-	NFS_OPEN_STATE = 2,
-	NFS_O_RDONLY_STATE = 3,
-	NFS_O_WRONLY_STATE = 4,
-	NFS_O_RDWR_STATE = 5,
-	NFS_STATE_RECLAIM_REBOOT = 6,
-	NFS_STATE_RECLAIM_NOGRACE = 7,
-	NFS_STATE_POSIX_LOCKS = 8,
-	NFS_STATE_RECOVERY_FAILED = 9,
-	NFS_STATE_MAY_NOTIFY_LOCK = 10,
-	NFS_STATE_CHANGE_WAIT = 11,
-	NFS_CLNT_DST_SSC_COPY_STATE = 12,
-	NFS_CLNT_SRC_SSC_COPY_STATE = 13,
-	NFS_SRV_SSC_COPY_STATE = 14,
-};
-
-struct nfs4_exception {
-	struct nfs4_state *state;
-	struct inode *inode;
-	nfs4_stateid *stateid;
-	long int timeout;
-	unsigned char delay: 1;
-	unsigned char recovering: 1;
-	unsigned char retry: 1;
-	bool interruptible;
-};
-
-struct nfs4_opendata {
-	struct kref kref;
-	struct nfs_openargs o_arg;
-	struct nfs_openres o_res;
-	struct nfs_open_confirmargs c_arg;
-	struct nfs_open_confirmres c_res;
-	struct nfs4_string owner_name;
-	struct nfs4_string group_name;
-	struct nfs4_label *a_label;
-	struct nfs_fattr f_attr;
-	struct nfs4_label *f_label;
-	struct dentry *dir;
-	struct dentry *dentry;
-	struct nfs4_state_owner *owner;
-	struct nfs4_state *state;
-	struct iattr attrs;
-	struct nfs4_layoutget *lgp;
-	long unsigned int timestamp;
-	bool rpc_done;
-	bool file_created;
-	bool is_recover;
-	bool cancelled;
-	int rpc_status;
-};
-
-enum {
-	NFS_DELEGATION_NEED_RECLAIM = 0,
-	NFS_DELEGATION_RETURN = 1,
-	NFS_DELEGATION_RETURN_IF_CLOSED = 2,
-	NFS_DELEGATION_REFERENCED = 3,
-	NFS_DELEGATION_RETURNING = 4,
-	NFS_DELEGATION_REVOKED = 5,
-	NFS_DELEGATION_TEST_EXPIRED = 6,
-	NFS_DELEGATION_INODE_FREEING = 7,
-};
-
-enum nfs4_slot_tbl_state {
-	NFS4_SLOT_TBL_DRAINING = 0,
-};
-
-struct nfs4_call_sync_data {
-	const struct nfs_server *seq_server;
-	struct nfs4_sequence_args *seq_args;
-	struct nfs4_sequence_res *seq_res;
-};
-
-struct nfs4_open_createattrs {
-	struct nfs4_label *label;
-	struct iattr *sattr;
-	const __u32 verf[2];
-};
-
-struct nfs4_closedata {
-	struct inode *inode;
-	struct nfs4_state *state;
-	struct nfs_closeargs arg;
-	struct nfs_closeres res;
-	struct {
-		struct nfs4_layoutreturn_args arg;
-		struct nfs4_layoutreturn_res res;
-		struct nfs4_xdr_opaque_data ld_private;
-		u32 roc_barrier;
-		bool roc;
-	} lr;
-	struct nfs_fattr fattr;
-	long unsigned int timestamp;
-};
-
-struct nfs4_createdata {
-	struct rpc_message msg;
-	struct nfs4_create_arg arg;
-	struct nfs4_create_res res;
-	struct nfs_fh fh;
-	struct nfs_fattr fattr;
-	struct nfs4_label *label;
-};
-
-struct nfs4_renewdata {
-	struct nfs_client *client;
-	long unsigned int timestamp;
-};
-
-struct nfs4_delegreturndata {
-	struct nfs4_delegreturnargs args;
-	struct nfs4_delegreturnres res;
-	struct nfs_fh fh;
-	nfs4_stateid stateid;
-	long unsigned int timestamp;
-	struct {
-		struct nfs4_layoutreturn_args arg;
-		struct nfs4_layoutreturn_res res;
-		struct nfs4_xdr_opaque_data ld_private;
-		u32 roc_barrier;
-		bool roc;
-	} lr;
-	struct nfs_fattr fattr;
-	int rpc_status;
-	struct inode *inode;
-};
-
-struct nfs4_unlockdata {
-	struct nfs_locku_args arg;
-	struct nfs_locku_res res;
-	struct nfs4_lock_state *lsp;
-	struct nfs_open_context *ctx;
-	struct nfs_lock_context *l_ctx;
-	struct file_lock fl;
-	struct nfs_server *server;
-	long unsigned int timestamp;
-};
-
-struct nfs4_lockdata {
-	struct nfs_lock_args arg;
-	struct nfs_lock_res res;
-	struct nfs4_lock_state *lsp;
-	struct nfs_open_context *ctx;
-	struct file_lock fl;
-	long unsigned int timestamp;
-	int rpc_status;
-	int cancelled;
-	struct nfs_server *server;
-};
-
-struct nfs_release_lockowner_data {
-	struct nfs4_lock_state *lsp;
-	struct nfs_server *server;
-	struct nfs_release_lockowner_args args;
-	struct nfs_release_lockowner_res res;
-	long unsigned int timestamp;
-};
-
-struct nfs4_get_lease_time_data {
-	struct nfs4_get_lease_time_args *args;
-	struct nfs4_get_lease_time_res *res;
-	struct nfs_client *clp;
-};
-
-enum opentype4 {
-	NFS4_OPEN_NOCREATE = 0,
-	NFS4_OPEN_CREATE = 1,
-};
-
-enum limit_by4 {
-	NFS4_LIMIT_SIZE = 1,
-	NFS4_LIMIT_BLOCKS = 2,
-};
-
-enum open_delegation_type4 {
-	NFS4_OPEN_DELEGATE_NONE = 0,
-	NFS4_OPEN_DELEGATE_READ = 1,
-	NFS4_OPEN_DELEGATE_WRITE = 2,
-	NFS4_OPEN_DELEGATE_NONE_EXT = 3,
-};
-
-enum why_no_delegation4 {
-	WND4_NOT_WANTED = 0,
-	WND4_CONTENTION = 1,
-	WND4_RESOURCE = 2,
-	WND4_NOT_SUPP_FTYPE = 3,
-	WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
-	WND4_NOT_SUPP_UPGRADE = 5,
-	WND4_NOT_SUPP_DOWNGRADE = 6,
-	WND4_CANCELLED = 7,
-	WND4_IS_DIR = 8,
-};
-
-enum lock_type4 {
-	NFS4_UNLOCK_LT = 0,
-	NFS4_READ_LT = 1,
-	NFS4_WRITE_LT = 2,
-	NFS4_READW_LT = 3,
-	NFS4_WRITEW_LT = 4,
-};
-
-struct compound_hdr {
-	int32_t status;
-	uint32_t nops;
-	__be32 *nops_p;
-	uint32_t taglen;
-	char *tag;
-	uint32_t replen;
-	u32 minorversion;
-};
-
-struct nfs_referral_count {
-	struct list_head list;
-	const struct task_struct *task;
-	unsigned int referral_count;
-};
-
-struct rpc_pipe_dir_object_ops;
-
-struct rpc_pipe_dir_object {
-	struct list_head pdo_head;
-	const struct rpc_pipe_dir_object_ops *pdo_ops;
-	void *pdo_data;
-};
-
-struct rpc_pipe_dir_object_ops {
-	int (*create)(struct dentry *, struct rpc_pipe_dir_object *);
-	void (*destroy)(struct dentry *, struct rpc_pipe_dir_object *);
-};
-
-struct rpc_inode {
-	struct inode vfs_inode;
-	void *private;
-	struct rpc_pipe *pipe;
-	wait_queue_head_t waitq;
-};
-
-struct idmap_legacy_upcalldata;
-
-struct idmap {
-	struct rpc_pipe_dir_object idmap_pdo;
-	struct rpc_pipe *idmap_pipe;
-	struct idmap_legacy_upcalldata *idmap_upcall_data;
-	struct mutex idmap_mutex;
-	const struct cred *cred;
-};
-
-struct user_key_payload {
-	struct callback_head rcu;
-	short unsigned int datalen;
-	long: 48;
-	char data[0];
-};
-
-struct request_key_auth {
-	struct callback_head rcu;
-	struct key *target_key;
-	struct key *dest_keyring;
-	const struct cred *cred;
-	void *callout_info;
-	size_t callout_len;
-	pid_t pid;
-	char op[8];
-};
-
-struct idmap_msg {
-	__u8 im_type;
-	__u8 im_conv;
-	char im_name[128];
-	__u32 im_id;
-	__u8 im_status;
-};
-
-struct idmap_legacy_upcalldata {
-	struct rpc_pipe_msg pipe_msg;
-	struct idmap_msg idmap_msg;
-	struct key *authkey;
-	struct idmap *idmap;
-};
-
-enum {
-	Opt_find_uid = 0,
-	Opt_find_gid = 1,
-	Opt_find_user = 2,
-	Opt_find_group = 3,
-	Opt_find_err = 4,
-};
-
-enum nfs4_callback_procnum {
-	CB_NULL = 0,
-	CB_COMPOUND = 1,
-};
-
-struct nfs_callback_data {
-	unsigned int users;
-	struct svc_serv *serv;
-};
-
-enum rpc_accept_stat {
-	RPC_SUCCESS = 0,
-	RPC_PROG_UNAVAIL = 1,
-	RPC_PROG_MISMATCH = 2,
-	RPC_PROC_UNAVAIL = 3,
-	RPC_GARBAGE_ARGS = 4,
-	RPC_SYSTEM_ERR = 5,
-	RPC_DROP_REPLY = 60000,
-};
-
-enum rpc_auth_stat {
-	RPC_AUTH_OK = 0,
-	RPC_AUTH_BADCRED = 1,
-	RPC_AUTH_REJECTEDCRED = 2,
-	RPC_AUTH_BADVERF = 3,
-	RPC_AUTH_REJECTEDVERF = 4,
-	RPC_AUTH_TOOWEAK = 5,
-	RPCSEC_GSS_CREDPROBLEM = 13,
-	RPCSEC_GSS_CTXPROBLEM = 14,
-};
-
-enum nfs4_callback_opnum {
-	OP_CB_GETATTR = 3,
-	OP_CB_RECALL = 4,
-	OP_CB_LAYOUTRECALL = 5,
-	OP_CB_NOTIFY = 6,
-	OP_CB_PUSH_DELEG = 7,
-	OP_CB_RECALL_ANY = 8,
-	OP_CB_RECALLABLE_OBJ_AVAIL = 9,
-	OP_CB_RECALL_SLOT = 10,
-	OP_CB_SEQUENCE = 11,
-	OP_CB_WANTS_CANCELLED = 12,
-	OP_CB_NOTIFY_LOCK = 13,
-	OP_CB_NOTIFY_DEVICEID = 14,
-	OP_CB_OFFLOAD = 15,
-	OP_CB_ILLEGAL = 10044,
-};
-
-struct cb_process_state {
-	__be32 drc_status;
-	struct nfs_client *clp;
-	struct nfs4_slot *slot;
-	u32 minorversion;
-	struct net *net;
-};
-
-struct cb_compound_hdr_arg {
-	unsigned int taglen;
-	const char *tag;
-	unsigned int minorversion;
-	unsigned int cb_ident;
-	unsigned int nops;
-};
-
-struct cb_compound_hdr_res {
-	__be32 *status;
-	unsigned int taglen;
-	const char *tag;
-	__be32 *nops;
-};
-
-struct cb_getattrargs {
-	struct nfs_fh fh;
-	uint32_t bitmap[2];
-};
-
-struct cb_getattrres {
-	__be32 status;
-	uint32_t bitmap[2];
-	uint64_t size;
-	uint64_t change_attr;
-	struct timespec64 ctime;
-	struct timespec64 mtime;
-};
-
-struct cb_recallargs {
-	struct nfs_fh fh;
-	nfs4_stateid stateid;
-	uint32_t truncate;
-};
-
-struct callback_op {
-	__be32 (*process_op)(void *, void *, struct cb_process_state *);
-	__be32 (*decode_args)(struct svc_rqst *, struct xdr_stream *, void *);
-	__be32 (*encode_res)(struct svc_rqst *, struct xdr_stream *, const void *);
-	long int res_maxsize;
-};
-
-struct xprt_create {
-	int ident;
-	struct net *net;
-	struct sockaddr *srcaddr;
-	struct sockaddr *dstaddr;
-	size_t addrlen;
-	const char *servername;
-	struct svc_xprt *bc_xprt;
-	struct rpc_xprt_switch *bc_xps;
-	unsigned int flags;
-};
-
-struct trace_event_raw_nfs4_clientid_event {
-	struct trace_entry ent;
-	u32 __data_loc_dstaddr;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_setup_sequence {
-	struct trace_entry ent;
-	unsigned int session;
-	unsigned int slot_nr;
-	unsigned int seq_nr;
-	unsigned int highest_used_slotid;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_state_mgr {
-	struct trace_entry ent;
-	long unsigned int state;
-	u32 __data_loc_hostname;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_state_mgr_failed {
-	struct trace_entry ent;
-	long unsigned int error;
-	long unsigned int state;
-	u32 __data_loc_hostname;
-	u32 __data_loc_section;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_xdr_status {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 op;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_open_event {
-	struct trace_entry ent;
-	long unsigned int error;
-	unsigned int flags;
-	unsigned int fmode;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	u64 dir;
-	u32 __data_loc_name;
-	int stateid_seq;
-	u32 stateid_hash;
-	int openstateid_seq;
-	u32 openstateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_cached_open {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	unsigned int fmode;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_close {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	unsigned int fmode;
-	long unsigned int error;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_lock_event {
-	struct trace_entry ent;
-	long unsigned int error;
-	int cmd;
-	char type;
-	loff_t start;
-	loff_t end;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_set_lock {
-	struct trace_entry ent;
-	long unsigned int error;
-	int cmd;
-	char type;
-	loff_t start;
-	loff_t end;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	int stateid_seq;
-	u32 stateid_hash;
-	int lockstateid_seq;
-	u32 lockstateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_state_lock_reclaim {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	long unsigned int state_flags;
-	long unsigned int lock_flags;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_set_delegation_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	unsigned int fmode;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_delegreturn_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	long unsigned int error;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_lookup_event {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int error;
-	u64 dir;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_lookupp {
-	struct trace_entry ent;
-	dev_t dev;
-	u64 ino;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_rename {
-	struct trace_entry ent;
-	dev_t dev;
-	long unsigned int error;
-	u64 olddir;
-	u32 __data_loc_oldname;
-	u64 newdir;
-	u32 __data_loc_newname;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_inode_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_inode_stateid_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	long unsigned int error;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_getattr_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	unsigned int valid;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_inode_callback_event {
-	struct trace_entry ent;
-	long unsigned int error;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	u32 __data_loc_dstaddr;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_inode_stateid_callback_event {
-	struct trace_entry ent;
-	long unsigned int error;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	u32 __data_loc_dstaddr;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_idmap_event {
-	struct trace_entry ent;
-	long unsigned int error;
-	u32 id;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_read_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	loff_t offset;
-	size_t count;
-	long unsigned int error;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_write_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	loff_t offset;
-	size_t count;
-	long unsigned int error;
-	int stateid_seq;
-	u32 stateid_hash;
-	char __data[0];
-};
-
-struct trace_event_raw_nfs4_commit_event {
-	struct trace_entry ent;
-	dev_t dev;
-	u32 fhandle;
-	u64 fileid;
-	loff_t offset;
-	size_t count;
-	long unsigned int error;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nfs4_clientid_event {
-	u32 dstaddr;
-};
-
-struct trace_event_data_offsets_nfs4_setup_sequence {};
-
-struct trace_event_data_offsets_nfs4_state_mgr {
-	u32 hostname;
-};
-
-struct trace_event_data_offsets_nfs4_state_mgr_failed {
-	u32 hostname;
-	u32 section;
-};
-
-struct trace_event_data_offsets_nfs4_xdr_status {};
-
-struct trace_event_data_offsets_nfs4_open_event {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs4_cached_open {};
-
-struct trace_event_data_offsets_nfs4_close {};
-
-struct trace_event_data_offsets_nfs4_lock_event {};
-
-struct trace_event_data_offsets_nfs4_set_lock {};
-
-struct trace_event_data_offsets_nfs4_state_lock_reclaim {};
-
-struct trace_event_data_offsets_nfs4_set_delegation_event {};
-
-struct trace_event_data_offsets_nfs4_delegreturn_exit {};
-
-struct trace_event_data_offsets_nfs4_lookup_event {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs4_lookupp {};
-
-struct trace_event_data_offsets_nfs4_rename {
-	u32 oldname;
-	u32 newname;
-};
-
-struct trace_event_data_offsets_nfs4_inode_event {};
-
-struct trace_event_data_offsets_nfs4_inode_stateid_event {};
-
-struct trace_event_data_offsets_nfs4_getattr_event {};
-
-struct trace_event_data_offsets_nfs4_inode_callback_event {
-	u32 dstaddr;
-};
-
-struct trace_event_data_offsets_nfs4_inode_stateid_callback_event {
-	u32 dstaddr;
-};
-
-struct trace_event_data_offsets_nfs4_idmap_event {
-	u32 name;
-};
-
-struct trace_event_data_offsets_nfs4_read_event {};
-
-struct trace_event_data_offsets_nfs4_write_event {};
-
-struct trace_event_data_offsets_nfs4_commit_event {};
-
-typedef void (*btf_trace_nfs4_setclientid)(void *, const struct nfs_client *, int);
-
-typedef void (*btf_trace_nfs4_setclientid_confirm)(void *, const struct nfs_client *, int);
-
-typedef void (*btf_trace_nfs4_renew)(void *, const struct nfs_client *, int);
-
-typedef void (*btf_trace_nfs4_renew_async)(void *, const struct nfs_client *, int);
-
-typedef void (*btf_trace_nfs4_setup_sequence)(void *, const struct nfs4_session *, const struct nfs4_sequence_args *);
-
-typedef void (*btf_trace_nfs4_state_mgr)(void *, const struct nfs_client *);
-
-typedef void (*btf_trace_nfs4_state_mgr_failed)(void *, const struct nfs_client *, const char *, int);
-
-typedef void (*btf_trace_nfs4_xdr_status)(void *, const struct xdr_stream *, u32, int);
-
-typedef void (*btf_trace_nfs4_open_reclaim)(void *, const struct nfs_open_context *, int, int);
-
-typedef void (*btf_trace_nfs4_open_expired)(void *, const struct nfs_open_context *, int, int);
-
-typedef void (*btf_trace_nfs4_open_file)(void *, const struct nfs_open_context *, int, int);
-
-typedef void (*btf_trace_nfs4_cached_open)(void *, const struct nfs4_state *);
-
-typedef void (*btf_trace_nfs4_close)(void *, const struct nfs4_state *, const struct nfs_closeargs *, const struct nfs_closeres *, int);
-
-typedef void (*btf_trace_nfs4_get_lock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
-
-typedef void (*btf_trace_nfs4_unlock)(void *, const struct file_lock *, const struct nfs4_state *, int, int);
-
-typedef void (*btf_trace_nfs4_set_lock)(void *, const struct file_lock *, const struct nfs4_state *, const nfs4_stateid *, int, int);
-
-typedef void (*btf_trace_nfs4_state_lock_reclaim)(void *, const struct nfs4_state *, const struct nfs4_lock_state *);
-
-typedef void (*btf_trace_nfs4_set_delegation)(void *, const struct inode *, fmode_t);
-
-typedef void (*btf_trace_nfs4_reclaim_delegation)(void *, const struct inode *, fmode_t);
-
-typedef void (*btf_trace_nfs4_delegreturn_exit)(void *, const struct nfs4_delegreturnargs *, const struct nfs4_delegreturnres *, int);
-
-typedef void (*btf_trace_nfs4_lookup)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_symlink)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_mkdir)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_mknod)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_remove)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_get_fs_locations)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_secinfo)(void *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_lookupp)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_rename)(void *, const struct inode *, const struct qstr *, const struct inode *, const struct qstr *, int);
-
-typedef void (*btf_trace_nfs4_access)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_readlink)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_readdir)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_get_acl)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_set_acl)(void *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_setattr)(void *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_delegreturn)(void *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_open_stateid_update)(void *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_open_stateid_update_wait)(void *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_getattr)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
-
-typedef void (*btf_trace_nfs4_lookup_root)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
-
-typedef void (*btf_trace_nfs4_fsinfo)(void *, const struct nfs_server *, const struct nfs_fh *, const struct nfs_fattr *, int);
-
-typedef void (*btf_trace_nfs4_cb_getattr)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, int);
-
-typedef void (*btf_trace_nfs4_cb_recall)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_cb_layoutrecall_file)(void *, const struct nfs_client *, const struct nfs_fh *, const struct inode *, const nfs4_stateid *, int);
-
-typedef void (*btf_trace_nfs4_map_name_to_uid)(void *, const char *, int, u32, int);
-
-typedef void (*btf_trace_nfs4_map_group_to_gid)(void *, const char *, int, u32, int);
-
-typedef void (*btf_trace_nfs4_map_uid_to_name)(void *, const char *, int, u32, int);
-
-typedef void (*btf_trace_nfs4_map_gid_to_group)(void *, const char *, int, u32, int);
-
-typedef void (*btf_trace_nfs4_read)(void *, const struct nfs_pgio_header *, int);
-
-typedef void (*btf_trace_nfs4_write)(void *, const struct nfs_pgio_header *, int);
-
-typedef void (*btf_trace_nfs4_commit)(void *, const struct nfs_commit_data *, int);
-
-struct getdents_callback___2 {
-	struct dir_context ctx;
-	char *name;
-	u64 ino;
-	int found;
-	int sequence;
-};
-
-struct nlm_lockowner {
-	struct list_head list;
-	refcount_t count;
-	struct nlm_host *host;
-	fl_owner_t owner;
-	uint32_t pid;
-};
-
-struct nsm_handle;
-
-struct nlm_host {
-	struct hlist_node h_hash;
-	struct __kernel_sockaddr_storage h_addr;
-	size_t h_addrlen;
-	struct __kernel_sockaddr_storage h_srcaddr;
-	size_t h_srcaddrlen;
-	struct rpc_clnt *h_rpcclnt;
-	char *h_name;
-	u32 h_version;
-	short unsigned int h_proto;
-	short unsigned int h_reclaiming: 1;
-	short unsigned int h_server: 1;
-	short unsigned int h_noresvport: 1;
-	short unsigned int h_inuse: 1;
-	wait_queue_head_t h_gracewait;
-	struct rw_semaphore h_rwsem;
-	u32 h_state;
-	u32 h_nsmstate;
-	u32 h_pidcount;
-	refcount_t h_count;
-	struct mutex h_mutex;
-	long unsigned int h_nextrebind;
-	long unsigned int h_expires;
-	struct list_head h_lockowners;
-	spinlock_t h_lock;
-	struct list_head h_granted;
-	struct list_head h_reclaim;
-	struct nsm_handle *h_nsmhandle;
-	char *h_addrbuf;
-	struct net *net;
-	const struct cred *h_cred;
-	char nodename[65];
-	const struct nlmclnt_operations *h_nlmclnt_ops;
-};
-
-enum {
-	NLM_LCK_GRANTED = 0,
-	NLM_LCK_DENIED = 1,
-	NLM_LCK_DENIED_NOLOCKS = 2,
-	NLM_LCK_BLOCKED = 3,
-	NLM_LCK_DENIED_GRACE_PERIOD = 4,
-	NLM_DEADLCK = 5,
-	NLM_ROFS = 6,
-	NLM_STALE_FH = 7,
-	NLM_FBIG = 8,
-	NLM_FAILED = 9,
-};
-
-struct nsm_private {
-	unsigned char data[16];
-};
-
-struct nlm_lock {
-	char *caller;
-	unsigned int len;
-	struct nfs_fh fh;
-	struct xdr_netobj oh;
-	u32 svid;
-	struct file_lock fl;
-};
-
-struct nlm_cookie {
-	unsigned char data[32];
-	unsigned int len;
-};
-
-struct nlm_args {
-	struct nlm_cookie cookie;
-	struct nlm_lock lock;
-	u32 block;
-	u32 reclaim;
-	u32 state;
-	u32 monitor;
-	u32 fsm_access;
-	u32 fsm_mode;
-};
-
-struct nlm_res {
-	struct nlm_cookie cookie;
-	__be32 status;
-	struct nlm_lock lock;
-};
-
-struct nsm_handle {
-	struct list_head sm_link;
-	refcount_t sm_count;
-	char *sm_mon_name;
-	char *sm_name;
-	struct __kernel_sockaddr_storage sm_addr;
-	size_t sm_addrlen;
-	unsigned int sm_monitored: 1;
-	unsigned int sm_sticky: 1;
-	struct nsm_private sm_priv;
-	char sm_addrbuf[51];
-};
-
-struct nlm_block;
-
-struct nlm_rqst {
-	refcount_t a_count;
-	unsigned int a_flags;
-	struct nlm_host *a_host;
-	struct nlm_args a_args;
-	struct nlm_res a_res;
-	struct nlm_block *a_block;
-	unsigned int a_retries;
-	u8 a_owner[74];
-	void *a_callback_data;
-};
-
-struct nlm_file;
-
-struct nlm_block {
-	struct kref b_count;
-	struct list_head b_list;
-	struct list_head b_flist;
-	struct nlm_rqst *b_call;
-	struct svc_serv *b_daemon;
-	struct nlm_host *b_host;
-	long unsigned int b_when;
-	unsigned int b_id;
-	unsigned char b_granted;
-	struct nlm_file *b_file;
-	struct cache_req *b_cache_req;
-	struct cache_deferred_req *b_deferred_req;
-	unsigned int b_flags;
-};
-
-struct nlm_share;
-
-struct nlm_file {
-	struct hlist_node f_list;
-	struct nfs_fh f_handle;
-	struct file *f_file;
-	struct nlm_share *f_shares;
-	struct list_head f_blocks;
-	unsigned int f_locks;
-	unsigned int f_count;
-	struct mutex f_mutex;
-};
-
-struct nlm_wait {
-	struct list_head b_list;
-	wait_queue_head_t b_wait;
-	struct nlm_host *b_host;
-	struct file_lock *b_lock;
-	short unsigned int b_reclaim;
-	__be32 b_status;
-};
-
-struct nlm_wait___2;
-
-struct nlm_reboot {
-	char *mon;
-	unsigned int len;
-	u32 state;
-	struct nsm_private priv;
-};
-
-struct lockd_net {
-	unsigned int nlmsvc_users;
-	long unsigned int next_gc;
-	long unsigned int nrhosts;
-	struct delayed_work grace_period_end;
-	struct lock_manager lockd_manager;
-	struct list_head nsm_handles;
-};
-
-struct nlm_lookup_host_info {
-	const int server;
-	const struct sockaddr *sap;
-	const size_t salen;
-	const short unsigned int protocol;
-	const u32 version;
-	const char *hostname;
-	const size_t hostname_len;
-	const int noresvport;
-	struct net *net;
-	const struct cred *cred;
-};
-
-struct ipv4_devconf {
-	void *sysctl;
-	int data[32];
-	long unsigned int state[1];
-};
-
-struct in_ifaddr;
-
-struct ip_mc_list;
-
-struct in_device {
-	struct net_device *dev;
-	refcount_t refcnt;
-	int dead;
-	struct in_ifaddr *ifa_list;
-	struct ip_mc_list *mc_list;
-	struct ip_mc_list **mc_hash;
-	int mc_count;
-	spinlock_t mc_tomb_lock;
-	struct ip_mc_list *mc_tomb;
-	long unsigned int mr_v1_seen;
-	long unsigned int mr_v2_seen;
-	long unsigned int mr_maxdelay;
-	long unsigned int mr_qi;
-	long unsigned int mr_qri;
-	unsigned char mr_qrv;
-	unsigned char mr_gq_running;
-	unsigned char mr_ifc_count;
-	struct timer_list mr_gq_timer;
-	struct timer_list mr_ifc_timer;
-	struct neigh_parms *arp_parms;
-	struct ipv4_devconf cnf;
-	struct callback_head callback_head;
-};
-
-struct in_ifaddr {
-	struct hlist_node hash;
-	struct in_ifaddr *ifa_next;
-	struct in_device *ifa_dev;
-	struct callback_head callback_head;
-	__be32 ifa_local;
-	__be32 ifa_address;
-	__be32 ifa_mask;
-	__u32 ifa_rt_priority;
-	__be32 ifa_broadcast;
-	unsigned char ifa_scope;
-	unsigned char ifa_prefixlen;
-	__u32 ifa_flags;
-	char ifa_label[16];
-	__u32 ifa_valid_lft;
-	__u32 ifa_preferred_lft;
-	long unsigned int ifa_cstamp;
-	long unsigned int ifa_tstamp;
-};
-
-struct inet6_ifaddr {
-	struct in6_addr addr;
-	__u32 prefix_len;
-	__u32 rt_priority;
-	__u32 valid_lft;
-	__u32 prefered_lft;
-	refcount_t refcnt;
-	spinlock_t lock;
-	int state;
-	__u32 flags;
-	__u8 dad_probes;
-	__u8 stable_privacy_retry;
-	__u16 scope;
-	__u64 dad_nonce;
-	long unsigned int cstamp;
-	long unsigned int tstamp;
-	struct delayed_work dad_work;
-	struct inet6_dev *idev;
-	struct fib6_info *rt;
-	struct hlist_node addr_lst;
-	struct list_head if_list;
-	struct list_head tmp_list;
-	struct inet6_ifaddr *ifpub;
-	int regen_count;
-	bool tokenized;
-	struct callback_head rcu;
-	struct in6_addr peer_addr;
-};
-
-typedef int (*nlm_host_match_fn_t)(void *, struct nlm_host *);
-
-struct nlm_share {
-	struct nlm_share *s_next;
-	struct nlm_host *s_host;
-	struct nlm_file *s_file;
-	struct xdr_netobj s_owner;
-	u32 s_access;
-	u32 s_mode;
-};
-
-struct rpc_version___2;
-
-struct rpc_program___2;
-
-enum {
-	NSMPROC_NULL = 0,
-	NSMPROC_STAT = 1,
-	NSMPROC_MON = 2,
-	NSMPROC_UNMON = 3,
-	NSMPROC_UNMON_ALL = 4,
-	NSMPROC_SIMU_CRASH = 5,
-	NSMPROC_NOTIFY = 6,
-};
-
-struct nsm_args {
-	struct nsm_private *priv;
-	u32 prog;
-	u32 vers;
-	u32 proc;
-	char *mon_name;
-	const char *nodename;
-};
-
-struct nsm_res {
-	u32 status;
-	u32 state;
-};
-
-typedef u32 unicode_t;
-
-struct utf8_table {
-	int cmask;
-	int cval;
-	int shift;
-	long int lmask;
-	long int lval;
-};
-
-typedef unsigned int autofs_wqt_t;
-
-struct autofs_sb_info;
-
-struct autofs_info {
-	struct dentry *dentry;
-	struct inode *inode;
-	int flags;
-	struct completion expire_complete;
-	struct list_head active;
-	struct list_head expiring;
-	struct autofs_sb_info *sbi;
-	long unsigned int last_used;
-	int count;
-	kuid_t uid;
-	kgid_t gid;
-	struct callback_head rcu;
-};
-
-struct autofs_wait_queue;
-
-struct autofs_sb_info {
-	u32 magic;
-	int pipefd;
-	struct file *pipe;
-	struct pid *oz_pgrp;
-	int version;
-	int sub_version;
-	int min_proto;
-	int max_proto;
-	unsigned int flags;
-	long unsigned int exp_timeout;
-	unsigned int type;
-	struct super_block *sb;
-	struct mutex wq_mutex;
-	struct mutex pipe_mutex;
-	spinlock_t fs_lock;
-	struct autofs_wait_queue *queues;
-	spinlock_t lookup_lock;
-	struct list_head active_list;
-	struct list_head expiring_list;
-	struct callback_head rcu;
-};
-
-struct autofs_wait_queue {
-	wait_queue_head_t queue;
-	struct autofs_wait_queue *next;
-	autofs_wqt_t wait_queue_token;
-	struct qstr name;
-	u32 dev;
-	u64 ino;
-	kuid_t uid;
-	kgid_t gid;
-	pid_t pid;
-	pid_t tgid;
-	int status;
-	unsigned int wait_ctr;
-};
-
-enum {
-	Opt_err___6 = 0,
-	Opt_fd = 1,
-	Opt_uid___6 = 2,
-	Opt_gid___7 = 3,
-	Opt_pgrp = 4,
-	Opt_minproto = 5,
-	Opt_maxproto = 6,
-	Opt_indirect = 7,
-	Opt_direct = 8,
-	Opt_offset = 9,
-	Opt_strictexpire = 10,
-	Opt_ignore___2 = 11,
-};
-
-enum {
-	AUTOFS_IOC_READY_CMD = 96,
-	AUTOFS_IOC_FAIL_CMD = 97,
-	AUTOFS_IOC_CATATONIC_CMD = 98,
-	AUTOFS_IOC_PROTOVER_CMD = 99,
-	AUTOFS_IOC_SETTIMEOUT_CMD = 100,
-	AUTOFS_IOC_EXPIRE_CMD = 101,
-};
-
-enum autofs_notify {
-	NFY_NONE = 0,
-	NFY_MOUNT = 1,
-	NFY_EXPIRE = 2,
-};
-
-enum {
-	AUTOFS_IOC_EXPIRE_MULTI_CMD = 102,
-	AUTOFS_IOC_PROTOSUBVER_CMD = 103,
-	AUTOFS_IOC_ASKUMOUNT_CMD = 112,
-};
-
-struct autofs_packet_hdr {
-	int proto_version;
-	int type;
-};
-
-struct autofs_packet_missing {
-	struct autofs_packet_hdr hdr;
-	autofs_wqt_t wait_queue_token;
-	int len;
-	char name[256];
-};
-
-struct autofs_packet_expire {
-	struct autofs_packet_hdr hdr;
-	int len;
-	char name[256];
-};
-
-struct autofs_packet_expire_multi {
-	struct autofs_packet_hdr hdr;
-	autofs_wqt_t wait_queue_token;
-	int len;
-	char name[256];
-};
-
-union autofs_packet_union {
-	struct autofs_packet_hdr hdr;
-	struct autofs_packet_missing missing;
-	struct autofs_packet_expire expire;
-	struct autofs_packet_expire_multi expire_multi;
-};
-
-struct autofs_v5_packet {
-	struct autofs_packet_hdr hdr;
-	autofs_wqt_t wait_queue_token;
-	__u32 dev;
-	__u64 ino;
-	__u32 uid;
-	__u32 gid;
-	__u32 pid;
-	__u32 tgid;
-	__u32 len;
-	char name[256];
-};
-
-typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
-
-typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
-
-typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
-
-typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
-
-union autofs_v5_packet_union {
-	struct autofs_packet_hdr hdr;
-	struct autofs_v5_packet v5_packet;
-	autofs_packet_missing_indirect_t missing_indirect;
-	autofs_packet_expire_indirect_t expire_indirect;
-	autofs_packet_missing_direct_t missing_direct;
-	autofs_packet_expire_direct_t expire_direct;
-};
-
-struct args_protover {
-	__u32 version;
-};
-
-struct args_protosubver {
-	__u32 sub_version;
-};
-
-struct args_openmount {
-	__u32 devid;
-};
-
-struct args_ready {
-	__u32 token;
-};
-
-struct args_fail {
-	__u32 token;
-	__s32 status;
-};
-
-struct args_setpipefd {
-	__s32 pipefd;
-};
-
-struct args_timeout {
-	__u64 timeout;
-};
-
-struct args_requester {
-	__u32 uid;
-	__u32 gid;
-};
-
-struct args_expire {
-	__u32 how;
-};
-
-struct args_askumount {
-	__u32 may_umount;
-};
-
-struct args_in {
-	__u32 type;
-};
-
-struct args_out {
-	__u32 devid;
-	__u32 magic;
-};
-
-struct args_ismountpoint {
-	union {
-		struct args_in in;
-		struct args_out out;
-	};
-};
-
-struct autofs_dev_ioctl {
-	__u32 ver_major;
-	__u32 ver_minor;
-	__u32 size;
-	__s32 ioctlfd;
-	union {
-		struct args_protover protover;
-		struct args_protosubver protosubver;
-		struct args_openmount openmount;
-		struct args_ready ready;
-		struct args_fail fail;
-		struct args_setpipefd setpipefd;
-		struct args_timeout timeout;
-		struct args_requester requester;
-		struct args_expire expire;
-		struct args_askumount askumount;
-		struct args_ismountpoint ismountpoint;
-	};
-	char path[0];
-};
-
-enum {
-	AUTOFS_DEV_IOCTL_VERSION_CMD = 113,
-	AUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,
-	AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,
-	AUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,
-	AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,
-	AUTOFS_DEV_IOCTL_READY_CMD = 118,
-	AUTOFS_DEV_IOCTL_FAIL_CMD = 119,
-	AUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,
-	AUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,
-	AUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,
-	AUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,
-	AUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,
-	AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,
-	AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,
-};
-
-typedef int (*ioctl_fn)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);
-
-typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
-
-struct debugfs_fsdata {
-	const struct file_operations *real_fops;
-	refcount_t active_users;
-	struct completion active_users_drained;
-};
-
-struct debugfs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-enum {
-	Opt_uid___7 = 0,
-	Opt_gid___8 = 1,
-	Opt_mode___6 = 2,
-	Opt_err___7 = 3,
-};
-
-struct debugfs_fs_info {
-	struct debugfs_mount_opts mount_opts;
-};
-
-struct debugfs_reg32 {
-	char *name;
-	long unsigned int offset;
-};
-
-struct debugfs_regset32 {
-	const struct debugfs_reg32 *regs;
-	int nregs;
-	void *base;
-};
-
-struct array_data {
-	void *array;
-	u32 elements;
-};
-
-struct debugfs_devm_entry {
-	int (*read)(struct seq_file *, void *);
-	struct device *dev;
-};
-
-struct tracefs_dir_ops {
-	int (*mkdir)(const char *);
-	int (*rmdir)(const char *);
-};
-
-struct tracefs_mount_opts {
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-struct tracefs_fs_info {
-	struct tracefs_mount_opts mount_opts;
-};
-
-typedef unsigned int __kernel_mode_t;
-
-struct ipc64_perm {
-	__kernel_key_t key;
-	__kernel_uid32_t uid;
-	__kernel_gid32_t gid;
-	__kernel_uid32_t cuid;
-	__kernel_gid32_t cgid;
-	__kernel_mode_t mode;
-	unsigned char __pad1[0];
-	short unsigned int seq;
-	short unsigned int __pad2;
-	__kernel_ulong_t __unused1;
-	__kernel_ulong_t __unused2;
-};
-
-typedef s32 compat_key_t;
-
-typedef u32 __compat_gid32_t;
-
-struct compat_ipc64_perm {
-	compat_key_t key;
-	__compat_uid32_t uid;
-	__compat_gid32_t gid;
-	__compat_uid32_t cuid;
-	__compat_gid32_t cgid;
-	short unsigned int mode;
-	short unsigned int __pad1;
-	short unsigned int seq;
-	short unsigned int __pad2;
-	compat_ulong_t unused1;
-	compat_ulong_t unused2;
-};
-
-struct compat_ipc_perm {
-	key_t key;
-	__compat_uid_t uid;
-	__compat_gid_t gid;
-	__compat_uid_t cuid;
-	__compat_gid_t cgid;
-	compat_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_perm {
-	__kernel_key_t key;
-	__kernel_uid_t uid;
-	__kernel_gid_t gid;
-	__kernel_uid_t cuid;
-	__kernel_gid_t cgid;
-	__kernel_mode_t mode;
-	short unsigned int seq;
-};
-
-struct ipc_params {
-	key_t key;
-	int flg;
-	union {
-		size_t size;
-		int nsems;
-	} u;
-};
-
-struct ipc_ops {
-	int (*getnew)(struct ipc_namespace *, struct ipc_params *);
-	int (*associate)(struct kern_ipc_perm *, int);
-	int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);
-};
-
-struct ipc_proc_iface {
-	const char *path;
-	const char *header;
-	int ids;
-	int (*show)(struct seq_file *, void *);
-};
-
-struct ipc_proc_iter {
-	struct ipc_namespace *ns;
-	struct pid_namespace *pid_ns;
-	struct ipc_proc_iface *iface;
-};
-
-struct msg_msgseg;
-
-struct msg_msg {
-	struct list_head m_list;
-	long int m_type;
-	size_t m_ts;
-	struct msg_msgseg *next;
-	void *security;
-};
-
-struct msg_msgseg {
-	struct msg_msgseg *next;
-};
-
-typedef int __kernel_ipc_pid_t;
-
-struct msgbuf {
-	__kernel_long_t mtype;
-	char mtext[1];
-};
-
-struct msg;
-
-struct msqid_ds {
-	struct ipc_perm msg_perm;
-	struct msg *msg_first;
-	struct msg *msg_last;
-	__kernel_old_time_t msg_stime;
-	__kernel_old_time_t msg_rtime;
-	__kernel_old_time_t msg_ctime;
-	long unsigned int msg_lcbytes;
-	long unsigned int msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	__kernel_ipc_pid_t msg_lspid;
-	__kernel_ipc_pid_t msg_lrpid;
-};
-
-struct msqid64_ds {
-	struct ipc64_perm msg_perm;
-	long int msg_stime;
-	long int msg_rtime;
-	long int msg_ctime;
-	long unsigned int msg_cbytes;
-	long unsigned int msg_qnum;
-	long unsigned int msg_qbytes;
-	__kernel_pid_t msg_lspid;
-	__kernel_pid_t msg_lrpid;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-};
-
-struct msginfo {
-	int msgpool;
-	int msgmap;
-	int msgmax;
-	int msgmnb;
-	int msgmni;
-	int msgssz;
-	int msgtql;
-	short unsigned int msgseg;
-};
-
-typedef u16 compat_ipc_pid_t;
-
-struct compat_msqid64_ds {
-	struct compat_ipc64_perm msg_perm;
-	compat_ulong_t msg_stime;
-	compat_ulong_t msg_stime_high;
-	compat_ulong_t msg_rtime;
-	compat_ulong_t msg_rtime_high;
-	compat_ulong_t msg_ctime;
-	compat_ulong_t msg_ctime_high;
-	compat_ulong_t msg_cbytes;
-	compat_ulong_t msg_qnum;
-	compat_ulong_t msg_qbytes;
-	compat_pid_t msg_lspid;
-	compat_pid_t msg_lrpid;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct msg_queue {
-	struct kern_ipc_perm q_perm;
-	time64_t q_stime;
-	time64_t q_rtime;
-	time64_t q_ctime;
-	long unsigned int q_cbytes;
-	long unsigned int q_qnum;
-	long unsigned int q_qbytes;
-	struct pid *q_lspid;
-	struct pid *q_lrpid;
-	struct list_head q_messages;
-	struct list_head q_receivers;
-	struct list_head q_senders;
-	long: 64;
-	long: 64;
-};
-
-struct msg_receiver {
-	struct list_head r_list;
-	struct task_struct *r_tsk;
-	int r_mode;
-	long int r_msgtype;
-	long int r_maxsize;
-	struct msg_msg *r_msg;
-};
-
-struct msg_sender {
-	struct list_head list;
-	struct task_struct *tsk;
-	size_t msgsz;
-};
-
-struct compat_msqid_ds {
-	struct compat_ipc_perm msg_perm;
-	compat_uptr_t msg_first;
-	compat_uptr_t msg_last;
-	old_time32_t msg_stime;
-	old_time32_t msg_rtime;
-	old_time32_t msg_ctime;
-	compat_ulong_t msg_lcbytes;
-	compat_ulong_t msg_lqbytes;
-	short unsigned int msg_cbytes;
-	short unsigned int msg_qnum;
-	short unsigned int msg_qbytes;
-	compat_ipc_pid_t msg_lspid;
-	compat_ipc_pid_t msg_lrpid;
-};
-
-struct compat_msgbuf {
-	compat_long_t mtype;
-	char mtext[1];
-};
-
-struct sem;
-
-struct sem_queue;
-
-struct sem_undo;
-
-struct semid_ds {
-	struct ipc_perm sem_perm;
-	__kernel_old_time_t sem_otime;
-	__kernel_old_time_t sem_ctime;
-	struct sem *sem_base;
-	struct sem_queue *sem_pending;
-	struct sem_queue **sem_pending_last;
-	struct sem_undo *undo;
-	short unsigned int sem_nsems;
-};
-
-struct sem {
-	int semval;
-	struct pid *sempid;
-	spinlock_t lock;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	time64_t sem_otime;
-};
-
-struct sembuf;
-
-struct sem_queue {
-	struct list_head list;
-	struct task_struct *sleeper;
-	struct sem_undo *undo;
-	struct pid *pid;
-	int status;
-	struct sembuf *sops;
-	struct sembuf *blocking;
-	int nsops;
-	bool alter;
-	bool dupsop;
-};
-
-struct sem_undo {
-	struct list_head list_proc;
-	struct callback_head rcu;
-	struct sem_undo_list *ulp;
-	struct list_head list_id;
-	int semid;
-	short int *semadj;
-};
-
-struct semid64_ds {
-	struct ipc64_perm sem_perm;
-	__kernel_long_t sem_otime;
-	__kernel_ulong_t __unused1;
-	__kernel_long_t sem_ctime;
-	__kernel_ulong_t __unused2;
-	__kernel_ulong_t sem_nsems;
-	__kernel_ulong_t __unused3;
-	__kernel_ulong_t __unused4;
-};
-
-struct sembuf {
-	short unsigned int sem_num;
-	short int sem_op;
-	short int sem_flg;
-};
-
-struct seminfo {
-	int semmap;
-	int semmni;
-	int semmns;
-	int semmnu;
-	int semmsl;
-	int semopm;
-	int semume;
-	int semusz;
-	int semvmx;
-	int semaem;
-};
-
-struct sem_undo_list {
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct list_head list_proc;
-};
-
-struct compat_semid64_ds {
-	struct compat_ipc64_perm sem_perm;
-	compat_ulong_t sem_otime;
-	compat_ulong_t sem_otime_high;
-	compat_ulong_t sem_ctime;
-	compat_ulong_t sem_ctime_high;
-	compat_ulong_t sem_nsems;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct sem_array {
-	struct kern_ipc_perm sem_perm;
-	time64_t sem_ctime;
-	struct list_head pending_alter;
-	struct list_head pending_const;
-	struct list_head list_id;
-	int sem_nsems;
-	int complex_count;
-	unsigned int use_global_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sem sems[0];
-};
-
-struct compat_semid_ds {
-	struct compat_ipc_perm sem_perm;
-	old_time32_t sem_otime;
-	old_time32_t sem_ctime;
-	compat_uptr_t sem_base;
-	compat_uptr_t sem_pending;
-	compat_uptr_t sem_pending_last;
-	compat_uptr_t undo;
-	short unsigned int sem_nsems;
-};
-
-struct shmid_ds {
-	struct ipc_perm shm_perm;
-	int shm_segsz;
-	__kernel_old_time_t shm_atime;
-	__kernel_old_time_t shm_dtime;
-	__kernel_old_time_t shm_ctime;
-	__kernel_ipc_pid_t shm_cpid;
-	__kernel_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	void *shm_unused2;
-	void *shm_unused3;
-};
-
-struct shmid64_ds {
-	struct ipc64_perm shm_perm;
-	size_t shm_segsz;
-	long int shm_atime;
-	long int shm_dtime;
-	long int shm_ctime;
-	__kernel_pid_t shm_cpid;
-	__kernel_pid_t shm_lpid;
-	long unsigned int shm_nattch;
-	long unsigned int __unused4;
-	long unsigned int __unused5;
-};
-
-struct shminfo64 {
-	long unsigned int shmmax;
-	long unsigned int shmmin;
-	long unsigned int shmmni;
-	long unsigned int shmseg;
-	long unsigned int shmall;
-	long unsigned int __unused1;
-	long unsigned int __unused2;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
-};
-
-struct shminfo {
-	int shmmax;
-	int shmmin;
-	int shmmni;
-	int shmseg;
-	int shmall;
-};
-
-struct shm_info {
-	int used_ids;
-	__kernel_ulong_t shm_tot;
-	__kernel_ulong_t shm_rss;
-	__kernel_ulong_t shm_swp;
-	__kernel_ulong_t swap_attempts;
-	__kernel_ulong_t swap_successes;
-};
-
-struct compat_shmid64_ds {
-	struct compat_ipc64_perm shm_perm;
-	compat_size_t shm_segsz;
-	compat_ulong_t shm_atime;
-	compat_ulong_t shm_atime_high;
-	compat_ulong_t shm_dtime;
-	compat_ulong_t shm_dtime_high;
-	compat_ulong_t shm_ctime;
-	compat_ulong_t shm_ctime_high;
-	compat_pid_t shm_cpid;
-	compat_pid_t shm_lpid;
-	compat_ulong_t shm_nattch;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct shmid_kernel {
-	struct kern_ipc_perm shm_perm;
-	struct file *shm_file;
-	long unsigned int shm_nattch;
-	long unsigned int shm_segsz;
-	time64_t shm_atim;
-	time64_t shm_dtim;
-	time64_t shm_ctim;
-	struct pid *shm_cprid;
-	struct pid *shm_lprid;
-	struct user_struct *mlock_user;
-	struct task_struct *shm_creator;
-	struct list_head shm_clist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct shm_file_data {
-	int id;
-	struct ipc_namespace *ns;
-	struct file *file;
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct compat_shmid_ds {
-	struct compat_ipc_perm shm_perm;
-	int shm_segsz;
-	old_time32_t shm_atime;
-	old_time32_t shm_dtime;
-	old_time32_t shm_ctime;
-	compat_ipc_pid_t shm_cpid;
-	compat_ipc_pid_t shm_lpid;
-	short unsigned int shm_nattch;
-	short unsigned int shm_unused;
-	compat_uptr_t shm_unused2;
-	compat_uptr_t shm_unused3;
-};
-
-struct compat_shminfo64 {
-	compat_ulong_t shmmax;
-	compat_ulong_t shmmin;
-	compat_ulong_t shmmni;
-	compat_ulong_t shmseg;
-	compat_ulong_t shmall;
-	compat_ulong_t __unused1;
-	compat_ulong_t __unused2;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct compat_shm_info {
-	compat_int_t used_ids;
-	compat_ulong_t shm_tot;
-	compat_ulong_t shm_rss;
-	compat_ulong_t shm_swp;
-	compat_ulong_t swap_attempts;
-	compat_ulong_t swap_successes;
-};
-
-struct compat_ipc_kludge {
-	compat_uptr_t msgp;
-	compat_long_t msgtyp;
-};
-
-struct mqueue_fs_context {
-	struct ipc_namespace *ipc_ns;
-};
-
-struct posix_msg_tree_node {
-	struct rb_node rb_node;
-	struct list_head msg_list;
-	int priority;
-};
-
-struct ext_wait_queue {
-	struct task_struct *task;
-	struct list_head list;
-	struct msg_msg *msg;
-	int state;
-};
-
-struct mqueue_inode_info {
-	spinlock_t lock;
-	struct inode vfs_inode;
-	wait_queue_head_t wait_q;
-	struct rb_root msg_tree;
-	struct rb_node *msg_tree_rightmost;
-	struct posix_msg_tree_node *node_cache;
-	struct mq_attr attr;
-	struct sigevent notify;
-	struct pid *notify_owner;
-	struct user_namespace *notify_user_ns;
-	struct user_struct *user;
-	struct sock *notify_sock;
-	struct sk_buff *notify_cookie;
-	struct ext_wait_queue e_wait_q[2];
-	long unsigned int qsize;
-};
-
-struct compat_mq_attr {
-	compat_long_t mq_flags;
-	compat_long_t mq_maxmsg;
-	compat_long_t mq_msgsize;
-	compat_long_t mq_curmsgs;
-	compat_long_t __reserved[4];
-};
-
-enum key_state {
-	KEY_IS_UNINSTANTIATED = 0,
-	KEY_IS_POSITIVE = 1,
-};
-
-struct key_user {
-	struct rb_node node;
-	struct mutex cons_lock;
-	spinlock_t lock;
-	refcount_t usage;
-	atomic_t nkeys;
-	atomic_t nikeys;
-	kuid_t uid;
-	int qnkeys;
-	int qnbytes;
-};
-
-struct assoc_array_edit;
-
-struct assoc_array_ops {
-	long unsigned int (*get_key_chunk)(const void *, int);
-	long unsigned int (*get_object_key_chunk)(const void *, int);
-	bool (*compare_object)(const void *, const void *);
-	int (*diff_objects)(const void *, const void *);
-	void (*free_object)(void *);
-};
-
-struct assoc_array_node {
-	struct assoc_array_ptr *back_pointer;
-	u8 parent_slot;
-	struct assoc_array_ptr *slots[16];
-	long unsigned int nr_leaves_on_branch;
-};
-
-struct assoc_array_shortcut {
-	struct assoc_array_ptr *back_pointer;
-	int parent_slot;
-	int skip_to_level;
-	struct assoc_array_ptr *next_node;
-	long unsigned int index_key[0];
-};
-
-struct assoc_array_edit___2 {
-	struct callback_head rcu;
-	struct assoc_array *array;
-	const struct assoc_array_ops *ops;
-	const struct assoc_array_ops *ops_for_excised_subtree;
-	struct assoc_array_ptr *leaf;
-	struct assoc_array_ptr **leaf_p;
-	struct assoc_array_ptr *dead_leaf;
-	struct assoc_array_ptr *new_meta[3];
-	struct assoc_array_ptr *excised_meta[1];
-	struct assoc_array_ptr *excised_subtree;
-	struct assoc_array_ptr **set_backpointers[16];
-	struct assoc_array_ptr *set_backpointers_to;
-	struct assoc_array_node *adjust_count_on;
-	long int adjust_count_by;
-	struct {
-		struct assoc_array_ptr **ptr;
-		struct assoc_array_ptr *to;
-	} set[2];
-	struct {
-		u8 *p;
-		u8 to;
-	} set_parent_slot[1];
-	u8 segment_cache[17];
-};
-
-struct keyring_search_context {
-	struct keyring_index_key index_key;
-	const struct cred *cred;
-	struct key_match_data match_data;
-	unsigned int flags;
-	int (*iterator)(const void *, void *);
-	int skipped_ret;
-	bool possessed;
-	key_ref_t result;
-	time64_t now;
-};
-
-struct keyring_read_iterator_context {
-	size_t buflen;
-	size_t count;
-	key_serial_t *buffer;
-};
-
-struct keyctl_dh_params {
-	union {
-		__s32 private;
-		__s32 priv;
-	};
-	__s32 prime;
-	__s32 base;
-};
-
-struct keyctl_kdf_params {
-	char *hashname;
-	char *otherinfo;
-	__u32 otherinfolen;
-	__u32 __spare[8];
-};
-
-struct keyctl_pkey_query {
-	__u32 supported_ops;
-	__u32 key_size;
-	__u16 max_data_size;
-	__u16 max_sig_size;
-	__u16 max_enc_size;
-	__u16 max_dec_size;
-	__u32 __spare[10];
-};
-
-struct keyctl_pkey_params {
-	__s32 key_id;
-	__u32 in_len;
-	union {
-		__u32 out_len;
-		__u32 in2_len;
-	};
-	__u32 __spare[7];
-};
-
-enum {
-	Opt_err___8 = 0,
-	Opt_enc = 1,
-	Opt_hash = 2,
-};
-
-struct vfs_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-};
-
-struct vfs_ns_cap_data {
-	__le32 magic_etc;
-	struct {
-		__le32 permitted;
-		__le32 inheritable;
-	} data[2];
-	__le32 rootid;
-};
-
-struct sctp_endpoint;
-
-union security_list_options {
-	int (*binder_set_context_mgr)(struct task_struct *);
-	int (*binder_transaction)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_binder)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);
-	int (*ptrace_access_check)(struct task_struct *, unsigned int);
-	int (*ptrace_traceme)(struct task_struct *);
-	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
-	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
-	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
-	int (*quotactl)(int, int, int, struct super_block *);
-	int (*quota_on)(struct dentry *);
-	int (*syslog)(int);
-	int (*settime)(const struct timespec64 *, const struct timezone *);
-	int (*vm_enough_memory)(struct mm_struct *, long int);
-	int (*bprm_set_creds)(struct linux_binprm *);
-	int (*bprm_check_security)(struct linux_binprm *);
-	void (*bprm_committing_creds)(struct linux_binprm *);
-	void (*bprm_committed_creds)(struct linux_binprm *);
-	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
-	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
-	int (*sb_alloc_security)(struct super_block *);
-	void (*sb_free_security)(struct super_block *);
-	void (*sb_free_mnt_opts)(void *);
-	int (*sb_eat_lsm_opts)(char *, void **);
-	int (*sb_remount)(struct super_block *, void *);
-	int (*sb_kern_mount)(struct super_block *);
-	int (*sb_show_options)(struct seq_file *, struct super_block *);
-	int (*sb_statfs)(struct dentry *);
-	int (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);
-	int (*sb_umount)(struct vfsmount *, int);
-	int (*sb_pivotroot)(const struct path *, const struct path *);
-	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
-	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
-	int (*sb_add_mnt_opt)(const char *, const char *, int, void **);
-	int (*move_mount)(const struct path *, const struct path *);
-	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);
-	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
-	int (*path_notify)(const struct path *, u64, unsigned int);
-	int (*inode_alloc_security)(struct inode *);
-	void (*inode_free_security)(struct inode *);
-	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
-	int (*inode_create)(struct inode *, struct dentry *, umode_t);
-	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
-	int (*inode_unlink)(struct inode *, struct dentry *);
-	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
-	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
-	int (*inode_rmdir)(struct inode *, struct dentry *);
-	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
-	int (*inode_readlink)(struct dentry *);
-	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
-	int (*inode_permission)(struct inode *, int);
-	int (*inode_setattr)(struct dentry *, struct iattr *);
-	int (*inode_getattr)(const struct path *);
-	int (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
-	int (*inode_getxattr)(struct dentry *, const char *);
-	int (*inode_listxattr)(struct dentry *);
-	int (*inode_removexattr)(struct dentry *, const char *);
-	int (*inode_need_killpriv)(struct dentry *);
-	int (*inode_killpriv)(struct dentry *);
-	int (*inode_getsecurity)(struct inode *, const char *, void **, bool);
-	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
-	int (*inode_listsecurity)(struct inode *, char *, size_t);
-	void (*inode_getsecid)(struct inode *, u32 *);
-	int (*inode_copy_up)(struct dentry *, struct cred **);
-	int (*inode_copy_up_xattr)(const char *);
-	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
-	int (*file_permission)(struct file *, int);
-	int (*file_alloc_security)(struct file *);
-	void (*file_free_security)(struct file *);
-	int (*file_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*mmap_addr)(long unsigned int);
-	int (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);
-	int (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);
-	int (*file_lock)(struct file *, unsigned int);
-	int (*file_fcntl)(struct file *, unsigned int, long unsigned int);
-	void (*file_set_fowner)(struct file *);
-	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
-	int (*file_receive)(struct file *);
-	int (*file_open)(struct file *);
-	int (*task_alloc)(struct task_struct *, long unsigned int);
-	void (*task_free)(struct task_struct *);
-	int (*cred_alloc_blank)(struct cred *, gfp_t);
-	void (*cred_free)(struct cred *);
-	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
-	void (*cred_transfer)(struct cred *, const struct cred *);
-	void (*cred_getsecid)(const struct cred *, u32 *);
-	int (*kernel_act_as)(struct cred *, u32);
-	int (*kernel_create_files_as)(struct cred *, struct inode *);
-	int (*kernel_module_request)(char *);
-	int (*kernel_load_data)(enum kernel_load_data_id);
-	int (*kernel_read_file)(struct file *, enum kernel_read_file_id);
-	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
-	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
-	int (*task_setpgid)(struct task_struct *, pid_t);
-	int (*task_getpgid)(struct task_struct *);
-	int (*task_getsid)(struct task_struct *);
-	void (*task_getsecid)(struct task_struct *, u32 *);
-	int (*task_setnice)(struct task_struct *, int);
-	int (*task_setioprio)(struct task_struct *, int);
-	int (*task_getioprio)(struct task_struct *);
-	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
-	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
-	int (*task_setscheduler)(struct task_struct *);
-	int (*task_getscheduler)(struct task_struct *);
-	int (*task_movememory)(struct task_struct *);
-	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
-	int (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-	void (*task_to_inode)(struct task_struct *, struct inode *);
-	int (*ipc_permission)(struct kern_ipc_perm *, short int);
-	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
-	int (*msg_msg_alloc_security)(struct msg_msg *);
-	void (*msg_msg_free_security)(struct msg_msg *);
-	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
-	void (*msg_queue_free_security)(struct kern_ipc_perm *);
-	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
-	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
-	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);
-	int (*shm_alloc_security)(struct kern_ipc_perm *);
-	void (*shm_free_security)(struct kern_ipc_perm *);
-	int (*shm_associate)(struct kern_ipc_perm *, int);
-	int (*shm_shmctl)(struct kern_ipc_perm *, int);
-	int (*shm_shmat)(struct kern_ipc_perm *, char *, int);
-	int (*sem_alloc_security)(struct kern_ipc_perm *);
-	void (*sem_free_security)(struct kern_ipc_perm *);
-	int (*sem_associate)(struct kern_ipc_perm *, int);
-	int (*sem_semctl)(struct kern_ipc_perm *, int);
-	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
-	int (*netlink_send)(struct sock *, struct sk_buff *);
-	void (*d_instantiate)(struct dentry *, struct inode *);
-	int (*getprocattr)(struct task_struct *, char *, char **);
-	int (*setprocattr)(const char *, void *, size_t);
-	int (*ismaclabel)(const char *);
-	int (*secid_to_secctx)(u32, char **, u32 *);
-	int (*secctx_to_secid)(const char *, u32, u32 *);
-	void (*release_secctx)(char *, u32);
-	void (*inode_invalidate_secctx)(struct inode *);
-	int (*inode_notifysecctx)(struct inode *, void *, u32);
-	int (*inode_setsecctx)(struct dentry *, void *, u32);
-	int (*inode_getsecctx)(struct inode *, void **, u32 *);
-	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
-	int (*unix_may_send)(struct socket *, struct socket *);
-	int (*socket_create)(int, int, int, int);
-	int (*socket_post_create)(struct socket *, int, int, int, int);
-	int (*socket_socketpair)(struct socket *, struct socket *);
-	int (*socket_bind)(struct socket *, struct sockaddr *, int);
-	int (*socket_connect)(struct socket *, struct sockaddr *, int);
-	int (*socket_listen)(struct socket *, int);
-	int (*socket_accept)(struct socket *, struct socket *);
-	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
-	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
-	int (*socket_getsockname)(struct socket *);
-	int (*socket_getpeername)(struct socket *);
-	int (*socket_getsockopt)(struct socket *, int, int);
-	int (*socket_setsockopt)(struct socket *, int, int);
-	int (*socket_shutdown)(struct socket *, int);
-	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
-	int (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);
-	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
-	int (*sk_alloc_security)(struct sock *, int, gfp_t);
-	void (*sk_free_security)(struct sock *);
-	void (*sk_clone_security)(const struct sock *, struct sock *);
-	void (*sk_getsecid)(struct sock *, u32 *);
-	void (*sock_graft)(struct sock *, struct socket *);
-	int (*inet_conn_request)(struct sock *, struct sk_buff *, struct request_sock *);
-	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
-	void (*inet_conn_established)(struct sock *, struct sk_buff *);
-	int (*secmark_relabel_packet)(u32);
-	void (*secmark_refcount_inc)();
-	void (*secmark_refcount_dec)();
-	void (*req_classify_flow)(const struct request_sock *, struct flowi *);
-	int (*tun_dev_alloc_security)(void **);
-	void (*tun_dev_free_security)(void *);
-	int (*tun_dev_create)();
-	int (*tun_dev_attach_queue)(void *);
-	int (*tun_dev_attach)(struct sock *, void *);
-	int (*tun_dev_open)(void *);
-	int (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);
-	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
-	void (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);
-	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
-	void (*key_free)(struct key *);
-	int (*key_permission)(key_ref_t, const struct cred *, unsigned int);
-	int (*key_getsecurity)(struct key *, char **);
-	int (*audit_rule_init)(u32, u32, char *, void **);
-	int (*audit_rule_known)(struct audit_krule *);
-	int (*audit_rule_match)(u32, u32, u32, void *);
-	void (*audit_rule_free)(void *);
-	int (*bpf)(int, union bpf_attr *, unsigned int);
-	int (*bpf_map)(struct bpf_map *, fmode_t);
-	int (*bpf_prog)(struct bpf_prog *);
-	int (*bpf_map_alloc_security)(struct bpf_map *);
-	void (*bpf_map_free_security)(struct bpf_map *);
-	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
-	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
-	int (*locked_down)(enum lockdown_reason);
-	int (*perf_event_open)(struct perf_event_attr *, int);
-	int (*perf_event_alloc)(struct perf_event *);
-	void (*perf_event_free)(struct perf_event *);
-	int (*perf_event_read)(struct perf_event *);
-	int (*perf_event_write)(struct perf_event *);
-};
-
-struct security_hook_heads {
-	struct hlist_head binder_set_context_mgr;
-	struct hlist_head binder_transaction;
-	struct hlist_head binder_transfer_binder;
-	struct hlist_head binder_transfer_file;
-	struct hlist_head ptrace_access_check;
-	struct hlist_head ptrace_traceme;
-	struct hlist_head capget;
-	struct hlist_head capset;
-	struct hlist_head capable;
-	struct hlist_head quotactl;
-	struct hlist_head quota_on;
-	struct hlist_head syslog;
-	struct hlist_head settime;
-	struct hlist_head vm_enough_memory;
-	struct hlist_head bprm_set_creds;
-	struct hlist_head bprm_check_security;
-	struct hlist_head bprm_committing_creds;
-	struct hlist_head bprm_committed_creds;
-	struct hlist_head fs_context_dup;
-	struct hlist_head fs_context_parse_param;
-	struct hlist_head sb_alloc_security;
-	struct hlist_head sb_free_security;
-	struct hlist_head sb_free_mnt_opts;
-	struct hlist_head sb_eat_lsm_opts;
-	struct hlist_head sb_remount;
-	struct hlist_head sb_kern_mount;
-	struct hlist_head sb_show_options;
-	struct hlist_head sb_statfs;
-	struct hlist_head sb_mount;
-	struct hlist_head sb_umount;
-	struct hlist_head sb_pivotroot;
-	struct hlist_head sb_set_mnt_opts;
-	struct hlist_head sb_clone_mnt_opts;
-	struct hlist_head sb_add_mnt_opt;
-	struct hlist_head move_mount;
-	struct hlist_head dentry_init_security;
-	struct hlist_head dentry_create_files_as;
-	struct hlist_head path_notify;
-	struct hlist_head inode_alloc_security;
-	struct hlist_head inode_free_security;
-	struct hlist_head inode_init_security;
-	struct hlist_head inode_create;
-	struct hlist_head inode_link;
-	struct hlist_head inode_unlink;
-	struct hlist_head inode_symlink;
-	struct hlist_head inode_mkdir;
-	struct hlist_head inode_rmdir;
-	struct hlist_head inode_mknod;
-	struct hlist_head inode_rename;
-	struct hlist_head inode_readlink;
-	struct hlist_head inode_follow_link;
-	struct hlist_head inode_permission;
-	struct hlist_head inode_setattr;
-	struct hlist_head inode_getattr;
-	struct hlist_head inode_setxattr;
-	struct hlist_head inode_post_setxattr;
-	struct hlist_head inode_getxattr;
-	struct hlist_head inode_listxattr;
-	struct hlist_head inode_removexattr;
-	struct hlist_head inode_need_killpriv;
-	struct hlist_head inode_killpriv;
-	struct hlist_head inode_getsecurity;
-	struct hlist_head inode_setsecurity;
-	struct hlist_head inode_listsecurity;
-	struct hlist_head inode_getsecid;
-	struct hlist_head inode_copy_up;
-	struct hlist_head inode_copy_up_xattr;
-	struct hlist_head kernfs_init_security;
-	struct hlist_head file_permission;
-	struct hlist_head file_alloc_security;
-	struct hlist_head file_free_security;
-	struct hlist_head file_ioctl;
-	struct hlist_head mmap_addr;
-	struct hlist_head mmap_file;
-	struct hlist_head file_mprotect;
-	struct hlist_head file_lock;
-	struct hlist_head file_fcntl;
-	struct hlist_head file_set_fowner;
-	struct hlist_head file_send_sigiotask;
-	struct hlist_head file_receive;
-	struct hlist_head file_open;
-	struct hlist_head task_alloc;
-	struct hlist_head task_free;
-	struct hlist_head cred_alloc_blank;
-	struct hlist_head cred_free;
-	struct hlist_head cred_prepare;
-	struct hlist_head cred_transfer;
-	struct hlist_head cred_getsecid;
-	struct hlist_head kernel_act_as;
-	struct hlist_head kernel_create_files_as;
-	struct hlist_head kernel_load_data;
-	struct hlist_head kernel_read_file;
-	struct hlist_head kernel_post_read_file;
-	struct hlist_head kernel_module_request;
-	struct hlist_head task_fix_setuid;
-	struct hlist_head task_setpgid;
-	struct hlist_head task_getpgid;
-	struct hlist_head task_getsid;
-	struct hlist_head task_getsecid;
-	struct hlist_head task_setnice;
-	struct hlist_head task_setioprio;
-	struct hlist_head task_getioprio;
-	struct hlist_head task_prlimit;
-	struct hlist_head task_setrlimit;
-	struct hlist_head task_setscheduler;
-	struct hlist_head task_getscheduler;
-	struct hlist_head task_movememory;
-	struct hlist_head task_kill;
-	struct hlist_head task_prctl;
-	struct hlist_head task_to_inode;
-	struct hlist_head ipc_permission;
-	struct hlist_head ipc_getsecid;
-	struct hlist_head msg_msg_alloc_security;
-	struct hlist_head msg_msg_free_security;
-	struct hlist_head msg_queue_alloc_security;
-	struct hlist_head msg_queue_free_security;
-	struct hlist_head msg_queue_associate;
-	struct hlist_head msg_queue_msgctl;
-	struct hlist_head msg_queue_msgsnd;
-	struct hlist_head msg_queue_msgrcv;
-	struct hlist_head shm_alloc_security;
-	struct hlist_head shm_free_security;
-	struct hlist_head shm_associate;
-	struct hlist_head shm_shmctl;
-	struct hlist_head shm_shmat;
-	struct hlist_head sem_alloc_security;
-	struct hlist_head sem_free_security;
-	struct hlist_head sem_associate;
-	struct hlist_head sem_semctl;
-	struct hlist_head sem_semop;
-	struct hlist_head netlink_send;
-	struct hlist_head d_instantiate;
-	struct hlist_head getprocattr;
-	struct hlist_head setprocattr;
-	struct hlist_head ismaclabel;
-	struct hlist_head secid_to_secctx;
-	struct hlist_head secctx_to_secid;
-	struct hlist_head release_secctx;
-	struct hlist_head inode_invalidate_secctx;
-	struct hlist_head inode_notifysecctx;
-	struct hlist_head inode_setsecctx;
-	struct hlist_head inode_getsecctx;
-	struct hlist_head unix_stream_connect;
-	struct hlist_head unix_may_send;
-	struct hlist_head socket_create;
-	struct hlist_head socket_post_create;
-	struct hlist_head socket_socketpair;
-	struct hlist_head socket_bind;
-	struct hlist_head socket_connect;
-	struct hlist_head socket_listen;
-	struct hlist_head socket_accept;
-	struct hlist_head socket_sendmsg;
-	struct hlist_head socket_recvmsg;
-	struct hlist_head socket_getsockname;
-	struct hlist_head socket_getpeername;
-	struct hlist_head socket_getsockopt;
-	struct hlist_head socket_setsockopt;
-	struct hlist_head socket_shutdown;
-	struct hlist_head socket_sock_rcv_skb;
-	struct hlist_head socket_getpeersec_stream;
-	struct hlist_head socket_getpeersec_dgram;
-	struct hlist_head sk_alloc_security;
-	struct hlist_head sk_free_security;
-	struct hlist_head sk_clone_security;
-	struct hlist_head sk_getsecid;
-	struct hlist_head sock_graft;
-	struct hlist_head inet_conn_request;
-	struct hlist_head inet_csk_clone;
-	struct hlist_head inet_conn_established;
-	struct hlist_head secmark_relabel_packet;
-	struct hlist_head secmark_refcount_inc;
-	struct hlist_head secmark_refcount_dec;
-	struct hlist_head req_classify_flow;
-	struct hlist_head tun_dev_alloc_security;
-	struct hlist_head tun_dev_free_security;
-	struct hlist_head tun_dev_create;
-	struct hlist_head tun_dev_attach_queue;
-	struct hlist_head tun_dev_attach;
-	struct hlist_head tun_dev_open;
-	struct hlist_head sctp_assoc_request;
-	struct hlist_head sctp_bind_connect;
-	struct hlist_head sctp_sk_clone;
-	struct hlist_head key_alloc;
-	struct hlist_head key_free;
-	struct hlist_head key_permission;
-	struct hlist_head key_getsecurity;
-	struct hlist_head audit_rule_init;
-	struct hlist_head audit_rule_known;
-	struct hlist_head audit_rule_match;
-	struct hlist_head audit_rule_free;
-	struct hlist_head bpf;
-	struct hlist_head bpf_map;
-	struct hlist_head bpf_prog;
-	struct hlist_head bpf_map_alloc_security;
-	struct hlist_head bpf_map_free_security;
-	struct hlist_head bpf_prog_alloc_security;
-	struct hlist_head bpf_prog_free_security;
-	struct hlist_head locked_down;
-	struct hlist_head perf_event_open;
-	struct hlist_head perf_event_alloc;
-	struct hlist_head perf_event_free;
-	struct hlist_head perf_event_read;
-	struct hlist_head perf_event_write;
-};
-
-struct security_hook_list {
-	struct hlist_node list;
-	struct hlist_head *head;
-	union security_list_options hook;
-	char *lsm;
-};
-
-struct lsm_blob_sizes {
-	int lbs_cred;
-	int lbs_file;
-	int lbs_inode;
-	int lbs_ipc;
-	int lbs_msg_msg;
-	int lbs_task;
-};
-
-enum lsm_order {
-	LSM_ORDER_FIRST = 4294967295,
-	LSM_ORDER_MUTABLE = 0,
-};
-
-struct lsm_info {
-	const char *name;
-	enum lsm_order order;
-	long unsigned int flags;
-	int *enabled;
-	int (*init)();
-	struct lsm_blob_sizes *blobs;
-};
-
-enum lsm_event {
-	LSM_POLICY_CHANGE = 0,
-};
-
-typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
-
-enum ib_uverbs_write_cmds {
-	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
-	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
-	IB_USER_VERBS_CMD_QUERY_PORT = 2,
-	IB_USER_VERBS_CMD_ALLOC_PD = 3,
-	IB_USER_VERBS_CMD_DEALLOC_PD = 4,
-	IB_USER_VERBS_CMD_CREATE_AH = 5,
-	IB_USER_VERBS_CMD_MODIFY_AH = 6,
-	IB_USER_VERBS_CMD_QUERY_AH = 7,
-	IB_USER_VERBS_CMD_DESTROY_AH = 8,
-	IB_USER_VERBS_CMD_REG_MR = 9,
-	IB_USER_VERBS_CMD_REG_SMR = 10,
-	IB_USER_VERBS_CMD_REREG_MR = 11,
-	IB_USER_VERBS_CMD_QUERY_MR = 12,
-	IB_USER_VERBS_CMD_DEREG_MR = 13,
-	IB_USER_VERBS_CMD_ALLOC_MW = 14,
-	IB_USER_VERBS_CMD_BIND_MW = 15,
-	IB_USER_VERBS_CMD_DEALLOC_MW = 16,
-	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,
-	IB_USER_VERBS_CMD_CREATE_CQ = 18,
-	IB_USER_VERBS_CMD_RESIZE_CQ = 19,
-	IB_USER_VERBS_CMD_DESTROY_CQ = 20,
-	IB_USER_VERBS_CMD_POLL_CQ = 21,
-	IB_USER_VERBS_CMD_PEEK_CQ = 22,
-	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,
-	IB_USER_VERBS_CMD_CREATE_QP = 24,
-	IB_USER_VERBS_CMD_QUERY_QP = 25,
-	IB_USER_VERBS_CMD_MODIFY_QP = 26,
-	IB_USER_VERBS_CMD_DESTROY_QP = 27,
-	IB_USER_VERBS_CMD_POST_SEND = 28,
-	IB_USER_VERBS_CMD_POST_RECV = 29,
-	IB_USER_VERBS_CMD_ATTACH_MCAST = 30,
-	IB_USER_VERBS_CMD_DETACH_MCAST = 31,
-	IB_USER_VERBS_CMD_CREATE_SRQ = 32,
-	IB_USER_VERBS_CMD_MODIFY_SRQ = 33,
-	IB_USER_VERBS_CMD_QUERY_SRQ = 34,
-	IB_USER_VERBS_CMD_DESTROY_SRQ = 35,
-	IB_USER_VERBS_CMD_POST_SRQ_RECV = 36,
-	IB_USER_VERBS_CMD_OPEN_XRCD = 37,
-	IB_USER_VERBS_CMD_CLOSE_XRCD = 38,
-	IB_USER_VERBS_CMD_CREATE_XSRQ = 39,
-	IB_USER_VERBS_CMD_OPEN_QP = 40,
-};
-
-enum ib_uverbs_create_qp_mask {
-	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,
-};
-
-enum ib_uverbs_wr_opcode {
-	IB_UVERBS_WR_RDMA_WRITE = 0,
-	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
-	IB_UVERBS_WR_SEND = 2,
-	IB_UVERBS_WR_SEND_WITH_IMM = 3,
-	IB_UVERBS_WR_RDMA_READ = 4,
-	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
-	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
-	IB_UVERBS_WR_LOCAL_INV = 7,
-	IB_UVERBS_WR_BIND_MW = 8,
-	IB_UVERBS_WR_SEND_WITH_INV = 9,
-	IB_UVERBS_WR_TSO = 10,
-	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
-	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
-	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
-};
-
-enum ib_uverbs_access_flags {
-	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
-	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
-	IB_UVERBS_ACCESS_REMOTE_READ = 4,
-	IB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,
-	IB_UVERBS_ACCESS_MW_BIND = 16,
-	IB_UVERBS_ACCESS_ZERO_BASED = 32,
-	IB_UVERBS_ACCESS_ON_DEMAND = 64,
-	IB_UVERBS_ACCESS_HUGETLB = 128,
-};
-
-union ib_gid {
-	u8 raw[16];
-	struct {
-		__be64 subnet_prefix;
-		__be64 interface_id;
-	} global;
-};
-
-struct lsm_network_audit {
-	int netif;
-	struct sock *sk;
-	u16 family;
-	__be16 dport;
-	__be16 sport;
-	union {
-		struct {
-			__be32 daddr;
-			__be32 saddr;
-		} v4;
-		struct {
-			struct in6_addr daddr;
-			struct in6_addr saddr;
-		} v6;
-	} fam;
-};
-
-struct lsm_ioctlop_audit {
-	struct path path;
-	u16 cmd;
-};
-
-struct lsm_ibpkey_audit {
-	u64 subnet_prefix;
-	u16 pkey;
-};
-
-struct lsm_ibendport_audit {
-	char dev_name[64];
-	u8 port;
-};
-
-struct selinux_state;
-
-struct selinux_audit_data {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	u32 requested;
-	u32 audited;
-	u32 denied;
-	int result;
-	struct selinux_state *state;
-};
-
-struct common_audit_data {
-	char type;
-	union {
-		struct path path;
-		struct dentry *dentry;
-		struct inode *inode;
-		struct lsm_network_audit *net;
-		int cap;
-		int ipc_id;
-		struct task_struct *tsk;
-		struct {
-			key_serial_t key;
-			char *key_desc;
-		} key_struct;
-		char *kmod_name;
-		struct lsm_ioctlop_audit *op;
-		struct file *file;
-		struct lsm_ibpkey_audit *ibpkey;
-		struct lsm_ibendport_audit *ibendport;
-	} u;
-	union {
-		struct selinux_audit_data *selinux_audit_data;
-	};
-};
-
-enum {
-	POLICYDB_CAPABILITY_NETPEER = 0,
-	POLICYDB_CAPABILITY_OPENPERM = 1,
-	POLICYDB_CAPABILITY_EXTSOCKCLASS = 2,
-	POLICYDB_CAPABILITY_ALWAYSNETWORK = 3,
-	POLICYDB_CAPABILITY_CGROUPSECLABEL = 4,
-	POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,
-	__POLICYDB_CAPABILITY_MAX = 6,
-};
-
-struct selinux_avc;
-
-struct selinux_ss;
-
-struct selinux_state {
-	bool disabled;
-	bool enforcing;
-	bool checkreqprot;
-	bool initialized;
-	bool policycap[6];
-	struct selinux_avc *avc;
-	struct selinux_ss *ss;
-};
-
-struct avc_cache {
-	struct hlist_head slots[512];
-	spinlock_t slots_lock[512];
-	atomic_t lru_hint;
-	atomic_t active_nodes;
-	u32 latest_notif;
-};
-
-struct selinux_avc {
-	unsigned int avc_cache_threshold;
-	struct avc_cache avc_cache;
-};
-
-struct av_decision {
-	u32 allowed;
-	u32 auditallow;
-	u32 auditdeny;
-	u32 seqno;
-	u32 flags;
-};
-
-struct extended_perms_data {
-	u32 p[8];
-};
-
-struct extended_perms_decision {
-	u8 used;
-	u8 driver;
-	struct extended_perms_data *allowed;
-	struct extended_perms_data *auditallow;
-	struct extended_perms_data *dontaudit;
-};
-
-struct extended_perms {
-	u16 len;
-	struct extended_perms_data drivers;
-};
-
-struct avc_cache_stats {
-	unsigned int lookups;
-	unsigned int misses;
-	unsigned int allocations;
-	unsigned int reclaims;
-	unsigned int frees;
-};
-
-struct security_class_mapping {
-	const char *name;
-	const char *perms[33];
-};
-
-struct avc_xperms_node;
-
-struct avc_entry {
-	u32 ssid;
-	u32 tsid;
-	u16 tclass;
-	struct av_decision avd;
-	struct avc_xperms_node *xp_node;
-};
-
-struct avc_xperms_node {
-	struct extended_perms xp;
-	struct list_head xpd_head;
-};
-
-struct avc_node {
-	struct avc_entry ae;
-	struct hlist_node list;
-	struct callback_head rhead;
-};
-
-struct avc_xperms_decision_node {
-	struct extended_perms_decision xpd;
-	struct list_head xpd_list;
-};
-
-struct avc_callback_node {
-	int (*callback)(u32);
-	u32 events;
-	struct avc_callback_node *next;
-};
-
-typedef __u16 __sum16;
-
-typedef u16 u_int16_t;
-
-struct rhltable {
-	struct rhashtable ht;
-};
-
-enum sctp_endpoint_type {
-	SCTP_EP_TYPE_SOCKET = 0,
-	SCTP_EP_TYPE_ASSOCIATION = 1,
-};
-
-struct sctp_chunk;
-
-struct sctp_inq {
-	struct list_head in_chunk_list;
-	struct sctp_chunk *in_progress;
-	struct work_struct immediate;
-};
-
-struct sctp_bind_addr {
-	__u16 port;
-	struct list_head address_list;
-};
-
-struct sctp_ep_common {
-	struct hlist_node node;
-	int hashent;
-	enum sctp_endpoint_type type;
-	refcount_t refcnt;
-	bool dead;
-	struct sock *sk;
-	struct net *net;
-	struct sctp_inq inqueue;
-	struct sctp_bind_addr bind_addr;
-};
-
-struct sctp_hmac_algo_param;
-
-struct sctp_chunks_param;
-
-struct sctp_endpoint {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	__u8 secret_key[32];
-	__u8 *digest;
-	__u32 sndbuf_policy;
-	__u32 rcvbuf_policy;
-	struct crypto_shash **auth_hmacs;
-	struct sctp_hmac_algo_param *auth_hmacs_list;
-	struct sctp_chunks_param *auth_chunk_list;
-	struct list_head endpoint_shared_keys;
-	__u16 active_key_id;
-	__u8 ecn_enable: 1;
-	__u8 auth_enable: 1;
-	__u8 intl_enable: 1;
-	__u8 prsctp_enable: 1;
-	__u8 asconf_enable: 1;
-	__u8 reconf_enable: 1;
-	__u8 strreset_enable;
-	u32 secid;
-	u32 peer_secid;
-};
-
-enum ip_conntrack_info {
-	IP_CT_ESTABLISHED = 0,
-	IP_CT_RELATED = 1,
-	IP_CT_NEW = 2,
-	IP_CT_IS_REPLY = 3,
-	IP_CT_ESTABLISHED_REPLY = 3,
-	IP_CT_RELATED_REPLY = 4,
-	IP_CT_NUMBER = 5,
-	IP_CT_UNTRACKED = 7,
-};
-
-struct nf_conntrack {
-	atomic_t use;
-};
-
-struct nf_hook_state;
-
-typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
-
-struct nf_hook_entry {
-	nf_hookfn *hook;
-	void *priv;
-};
-
-struct nf_hook_entries {
-	u16 num_hook_entries;
-	struct nf_hook_entry hooks[0];
-};
-
-struct nf_hook_state {
-	unsigned int hook;
-	u_int8_t pf;
-	struct net_device *in;
-	struct net_device *out;
-	struct sock *sk;
-	struct net *net;
-	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
-};
-
-struct nf_hook_ops {
-	nf_hookfn *hook;
-	struct net_device *dev;
-	void *priv;
-	u_int8_t pf;
-	unsigned int hooknum;
-	int priority;
-};
-
-enum nf_nat_manip_type {
-	NF_NAT_MANIP_SRC = 0,
-	NF_NAT_MANIP_DST = 1,
-};
-
-struct nf_conn;
-
-struct nf_nat_hook {
-	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
-	void (*decode_session)(struct sk_buff *, struct flowi *);
-	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
-};
-
-union nf_inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-union nf_conntrack_man_proto {
-	__be16 all;
-	struct {
-		__be16 port;
-	} tcp;
-	struct {
-		__be16 port;
-	} udp;
-	struct {
-		__be16 id;
-	} icmp;
-	struct {
-		__be16 port;
-	} dccp;
-	struct {
-		__be16 port;
-	} sctp;
-	struct {
-		__be16 key;
-	} gre;
-};
-
-struct nf_conntrack_man {
-	union nf_inet_addr u3;
-	union nf_conntrack_man_proto u;
-	u_int16_t l3num;
-};
-
-struct nf_conntrack_tuple {
-	struct nf_conntrack_man src;
-	struct {
-		union nf_inet_addr u3;
-		union {
-			__be16 all;
-			struct {
-				__be16 port;
-			} tcp;
-			struct {
-				__be16 port;
-			} udp;
-			struct {
-				u_int8_t type;
-				u_int8_t code;
-			} icmp;
-			struct {
-				__be16 port;
-			} dccp;
-			struct {
-				__be16 port;
-			} sctp;
-			struct {
-				__be16 key;
-			} gre;
-		} u;
-		u_int8_t protonum;
-		u_int8_t dir;
-	} dst;
-};
-
-struct nf_conntrack_tuple_hash {
-	struct hlist_nulls_node hnnode;
-	struct nf_conntrack_tuple tuple;
-};
-
-typedef u32 u_int32_t;
-
-typedef u64 u_int64_t;
-
-struct nf_ct_dccp {
-	u_int8_t role[2];
-	u_int8_t state;
-	u_int8_t last_pkt;
-	u_int8_t last_dir;
-	u_int64_t handshake_seq;
-};
-
-struct ip_ct_sctp {
-	enum sctp_conntrack state;
-	__be32 vtag[2];
-};
-
-struct ip_ct_tcp_state {
-	u_int32_t td_end;
-	u_int32_t td_maxend;
-	u_int32_t td_maxwin;
-	u_int32_t td_maxack;
-	u_int8_t td_scale;
-	u_int8_t flags;
-};
-
-struct ip_ct_tcp {
-	struct ip_ct_tcp_state seen[2];
-	u_int8_t state;
-	u_int8_t last_dir;
-	u_int8_t retrans;
-	u_int8_t last_index;
-	u_int32_t last_seq;
-	u_int32_t last_ack;
-	u_int32_t last_end;
-	u_int16_t last_win;
-	u_int8_t last_wscale;
-	u_int8_t last_flags;
-};
-
-struct nf_ct_udp {
-	long unsigned int stream_ts;
-};
-
-struct nf_ct_gre {
-	unsigned int stream_timeout;
-	unsigned int timeout;
-};
-
-union nf_conntrack_proto {
-	struct nf_ct_dccp dccp;
-	struct ip_ct_sctp sctp;
-	struct ip_ct_tcp tcp;
-	struct nf_ct_udp udp;
-	struct nf_ct_gre gre;
-	unsigned int tmpl_padto;
-};
-
-struct nf_ct_ext;
-
-struct nf_conn {
-	struct nf_conntrack ct_general;
-	spinlock_t lock;
-	u32 timeout;
-	struct nf_conntrack_tuple_hash tuplehash[2];
-	long unsigned int status;
-	u16 cpu;
-	possible_net_t ct_net;
-	struct hlist_node nat_bysource;
-	u8 __nfct_init_offset[0];
-	struct nf_conn *master;
-	u_int32_t secmark;
-	struct nf_ct_ext *ext;
-	union nf_conntrack_proto proto;
-};
-
-struct nf_conntrack_zone {
-	u16 id;
-	u8 flags;
-	u8 dir;
-};
-
-struct nf_ct_hook {
-	int (*update)(struct net *, struct sk_buff *);
-	void (*destroy)(struct nf_conntrack *);
-	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
-};
-
-struct nfnl_ct_hook {
-	struct nf_conn * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);
-	size_t (*build_size)(const struct nf_conn *);
-	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
-	int (*parse)(const struct nlattr *, struct nf_conn *);
-	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
-	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
-};
-
-enum nf_ip_hook_priorities {
-	NF_IP_PRI_FIRST = 2147483648,
-	NF_IP_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP_PRI_RAW = 4294966996,
-	NF_IP_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP_PRI_CONNTRACK = 4294967096,
-	NF_IP_PRI_MANGLE = 4294967146,
-	NF_IP_PRI_NAT_DST = 4294967196,
-	NF_IP_PRI_FILTER = 0,
-	NF_IP_PRI_SECURITY = 50,
-	NF_IP_PRI_NAT_SRC = 100,
-	NF_IP_PRI_SELINUX_LAST = 225,
-	NF_IP_PRI_CONNTRACK_HELPER = 300,
-	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
-	NF_IP_PRI_LAST = 2147483647,
-};
-
-enum nf_ip6_hook_priorities {
-	NF_IP6_PRI_FIRST = 2147483648,
-	NF_IP6_PRI_RAW_BEFORE_DEFRAG = 4294966846,
-	NF_IP6_PRI_CONNTRACK_DEFRAG = 4294966896,
-	NF_IP6_PRI_RAW = 4294966996,
-	NF_IP6_PRI_SELINUX_FIRST = 4294967071,
-	NF_IP6_PRI_CONNTRACK = 4294967096,
-	NF_IP6_PRI_MANGLE = 4294967146,
-	NF_IP6_PRI_NAT_DST = 4294967196,
-	NF_IP6_PRI_FILTER = 0,
-	NF_IP6_PRI_SECURITY = 50,
-	NF_IP6_PRI_NAT_SRC = 100,
-	NF_IP6_PRI_SELINUX_LAST = 225,
-	NF_IP6_PRI_CONNTRACK_HELPER = 300,
-	NF_IP6_PRI_LAST = 2147483647,
-};
-
-struct socket_alloc {
-	struct socket socket;
-	struct inode vfs_inode;
-	long: 64;
-	long: 64;
-};
-
-struct ip_options {
-	__be32 faddr;
-	__be32 nexthop;
-	unsigned char optlen;
-	unsigned char srr;
-	unsigned char rr;
-	unsigned char ts;
-	unsigned char is_strictroute: 1;
-	unsigned char srr_is_hit: 1;
-	unsigned char is_changed: 1;
-	unsigned char rr_needaddr: 1;
-	unsigned char ts_needtime: 1;
-	unsigned char ts_needaddr: 1;
-	unsigned char router_alert;
-	unsigned char cipso;
-	unsigned char __pad2;
-	unsigned char __data[0];
-};
-
-struct ip_options_rcu {
-	struct callback_head rcu;
-	struct ip_options opt;
-};
-
-struct ipv6_opt_hdr;
-
-struct ipv6_rt_hdr;
-
-struct ipv6_txoptions {
-	refcount_t refcnt;
-	int tot_len;
-	__u16 opt_flen;
-	__u16 opt_nflen;
-	struct ipv6_opt_hdr *hopopt;
-	struct ipv6_opt_hdr *dst0opt;
-	struct ipv6_rt_hdr *srcrt;
-	struct ipv6_opt_hdr *dst1opt;
-	struct callback_head rcu;
-};
-
-struct inet_cork {
-	unsigned int flags;
-	__be32 addr;
-	struct ip_options *opt;
-	unsigned int fragsize;
-	int length;
-	struct dst_entry *dst;
-	u8 tx_flags;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-	u64 transmit_time;
-	u32 mark;
-};
-
-struct inet_cork_full {
-	struct inet_cork base;
-	struct flowi fl;
-};
-
-struct ipv6_pinfo;
-
-struct ip_mc_socklist;
-
-struct inet_sock {
-	struct sock sk;
-	struct ipv6_pinfo *pinet6;
-	__be32 inet_saddr;
-	__s16 uc_ttl;
-	__u16 cmsg_flags;
-	__be16 inet_sport;
-	__u16 inet_id;
-	struct ip_options_rcu *inet_opt;
-	int rx_dst_ifindex;
-	__u8 tos;
-	__u8 min_ttl;
-	__u8 mc_ttl;
-	__u8 pmtudisc;
-	__u8 recverr: 1;
-	__u8 is_icsk: 1;
-	__u8 freebind: 1;
-	__u8 hdrincl: 1;
-	__u8 mc_loop: 1;
-	__u8 transparent: 1;
-	__u8 mc_all: 1;
-	__u8 nodefrag: 1;
-	__u8 bind_address_no_port: 1;
-	__u8 defer_connect: 1;
-	__u8 rcv_tos;
-	__u8 convert_csum;
-	int uc_index;
-	int mc_index;
-	__be32 mc_addr;
-	struct ip_mc_socklist *mc_list;
-	struct inet_cork_full cork;
-};
-
-struct in6_pktinfo {
-	struct in6_addr ipi6_addr;
-	int ipi6_ifindex;
-};
-
-struct inet6_cork {
-	struct ipv6_txoptions *opt;
-	u8 hop_limit;
-	u8 tclass;
-};
-
-struct ipv6_mc_socklist;
-
-struct ipv6_ac_socklist;
-
-struct ipv6_fl_socklist;
-
-struct ipv6_pinfo {
-	struct in6_addr saddr;
-	struct in6_pktinfo sticky_pktinfo;
-	const struct in6_addr *daddr_cache;
-	__be32 flow_label;
-	__u32 frag_size;
-	__u16 __unused_1: 7;
-	__s16 hop_limit: 9;
-	__u16 mc_loop: 1;
-	__u16 __unused_2: 6;
-	__s16 mcast_hops: 9;
-	int ucast_oif;
-	int mcast_oif;
-	union {
-		struct {
-			__u16 srcrt: 1;
-			__u16 osrcrt: 1;
-			__u16 rxinfo: 1;
-			__u16 rxoinfo: 1;
-			__u16 rxhlim: 1;
-			__u16 rxohlim: 1;
-			__u16 hopopts: 1;
-			__u16 ohopopts: 1;
-			__u16 dstopts: 1;
-			__u16 odstopts: 1;
-			__u16 rxflow: 1;
-			__u16 rxtclass: 1;
-			__u16 rxpmtu: 1;
-			__u16 rxorigdstaddr: 1;
-			__u16 recvfragsize: 1;
-		} bits;
-		__u16 all;
-	} rxopt;
-	__u16 recverr: 1;
-	__u16 sndflow: 1;
-	__u16 repflow: 1;
-	__u16 pmtudisc: 3;
-	__u16 padding: 1;
-	__u16 srcprefs: 3;
-	__u16 dontfrag: 1;
-	__u16 autoflowlabel: 1;
-	__u16 autoflowlabel_set: 1;
-	__u16 mc_all: 1;
-	__u16 rtalert_isolate: 1;
-	__u8 min_hopcount;
-	__u8 tclass;
-	__be32 rcv_flowinfo;
-	__u32 dst_cookie;
-	__u32 rx_dst_cookie;
-	struct ipv6_mc_socklist *ipv6_mc_list;
-	struct ipv6_ac_socklist *ipv6_ac_list;
-	struct ipv6_fl_socklist *ipv6_fl_list;
-	struct ipv6_txoptions *opt;
-	struct sk_buff *pktoptions;
-	struct sk_buff *rxpmtu;
-	struct inet6_cork cork;
-};
-
-struct tcphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 seq;
-	__be32 ack_seq;
-	__u16 res1: 4;
-	__u16 doff: 4;
-	__u16 fin: 1;
-	__u16 syn: 1;
-	__u16 rst: 1;
-	__u16 psh: 1;
-	__u16 ack: 1;
-	__u16 urg: 1;
-	__u16 ece: 1;
-	__u16 cwr: 1;
-	__be16 window;
-	__sum16 check;
-	__be16 urg_ptr;
-};
-
-struct iphdr {
-	__u8 ihl: 4;
-	__u8 version: 4;
-	__u8 tos;
-	__be16 tot_len;
-	__be16 id;
-	__be16 frag_off;
-	__u8 ttl;
-	__u8 protocol;
-	__sum16 check;
-	__be32 saddr;
-	__be32 daddr;
-};
-
-struct ipv6_rt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-};
-
-struct ipv6_opt_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-};
-
-struct ipv6hdr {
-	__u8 priority: 4;
-	__u8 version: 4;
-	__u8 flow_lbl[3];
-	__be16 payload_len;
-	__u8 nexthdr;
-	__u8 hop_limit;
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-};
-
-struct udphdr {
-	__be16 source;
-	__be16 dest;
-	__be16 len;
-	__sum16 check;
-};
-
-struct inet6_skb_parm {
-	int iif;
-	__be16 ra;
-	__u16 dst0;
-	__u16 srcrt;
-	__u16 dst1;
-	__u16 lastopt;
-	__u16 nhoff;
-	__u16 flags;
-	__u16 frag_max_size;
-};
-
-struct ip6_sf_socklist;
-
-struct ipv6_mc_socklist {
-	struct in6_addr addr;
-	int ifindex;
-	unsigned int sfmode;
-	struct ipv6_mc_socklist *next;
-	rwlock_t sflock;
-	struct ip6_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ipv6_ac_socklist {
-	struct in6_addr acl_addr;
-	int acl_ifindex;
-	struct ipv6_ac_socklist *acl_next;
-};
-
-struct ip6_flowlabel;
-
-struct ipv6_fl_socklist {
-	struct ipv6_fl_socklist *next;
-	struct ip6_flowlabel *fl;
-	struct callback_head rcu;
-};
-
-struct ip6_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct in6_addr sl_addr[0];
-};
-
-struct ip6_flowlabel {
-	struct ip6_flowlabel *next;
-	__be32 label;
-	atomic_t users;
-	struct in6_addr dst;
-	struct ipv6_txoptions *opt;
-	long unsigned int linger;
-	struct callback_head rcu;
-	u8 share;
-	union {
-		struct pid *pid;
-		kuid_t uid;
-	} owner;
-	long unsigned int lastuse;
-	long unsigned int expires;
-	struct net *fl_net;
-};
-
-struct inet_skb_parm {
-	int iif;
-	struct ip_options opt;
-	u16 flags;
-	u16 frag_max_size;
-};
-
-struct nf_ipv6_ops {
-	void (*route_input)(struct sk_buff *);
-	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
-};
-
-struct nf_queue_entry {
-	struct list_head list;
-	struct sk_buff *skb;
-	unsigned int id;
-	unsigned int hook_index;
-	struct nf_hook_state state;
-	u16 size;
-};
-
-struct tty_file_private {
-	struct tty_struct *tty;
-	struct file *file;
-	struct list_head list;
-};
-
-struct icmp_err {
-	int errno;
-	unsigned int fatal: 1;
-};
-
-struct netlbl_lsm_cache {
-	refcount_t refcount;
-	void (*free)(const void *);
-	void *data;
-};
-
-struct netlbl_lsm_catmap {
-	u32 startbit;
-	u64 bitmap[4];
-	struct netlbl_lsm_catmap *next;
-};
-
-struct netlbl_lsm_secattr {
-	u32 flags;
-	u32 type;
-	char *domain;
-	struct netlbl_lsm_cache *cache;
-	struct {
-		struct {
-			struct netlbl_lsm_catmap *cat;
-			u32 lvl;
-		} mls;
-		u32 secid;
-	} attr;
-};
-
-struct dccp_hdr {
-	__be16 dccph_sport;
-	__be16 dccph_dport;
-	__u8 dccph_doff;
-	__u8 dccph_cscov: 4;
-	__u8 dccph_ccval: 4;
-	__sum16 dccph_checksum;
-	__u8 dccph_x: 1;
-	__u8 dccph_type: 4;
-	__u8 dccph_reserved: 3;
-	__u8 dccph_seq2;
-	__be16 dccph_seq;
-};
-
-enum dccp_state {
-	DCCP_OPEN = 1,
-	DCCP_REQUESTING = 2,
-	DCCP_LISTEN = 10,
-	DCCP_RESPOND = 3,
-	DCCP_ACTIVE_CLOSEREQ = 4,
-	DCCP_PASSIVE_CLOSE = 8,
-	DCCP_CLOSING = 11,
-	DCCP_TIME_WAIT = 6,
-	DCCP_CLOSED = 7,
-	DCCP_NEW_SYN_RECV = 12,
-	DCCP_PARTOPEN = 13,
-	DCCP_PASSIVE_CLOSEREQ = 14,
-	DCCP_MAX_STATES = 15,
-};
-
-typedef __s32 sctp_assoc_t;
-
-enum sctp_msg_flags {
-	MSG_NOTIFICATION = 32768,
-};
-
-struct sctp_initmsg {
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u16 sinit_max_attempts;
-	__u16 sinit_max_init_timeo;
-};
-
-struct sctp_sndrcvinfo {
-	__u16 sinfo_stream;
-	__u16 sinfo_ssn;
-	__u16 sinfo_flags;
-	__u32 sinfo_ppid;
-	__u32 sinfo_context;
-	__u32 sinfo_timetolive;
-	__u32 sinfo_tsn;
-	__u32 sinfo_cumtsn;
-	sctp_assoc_t sinfo_assoc_id;
-};
-
-struct sctp_rtoinfo {
-	sctp_assoc_t srto_assoc_id;
-	__u32 srto_initial;
-	__u32 srto_max;
-	__u32 srto_min;
-};
-
-struct sctp_assocparams {
-	sctp_assoc_t sasoc_assoc_id;
-	__u16 sasoc_asocmaxrxt;
-	__u16 sasoc_number_peer_destinations;
-	__u32 sasoc_peer_rwnd;
-	__u32 sasoc_local_rwnd;
-	__u32 sasoc_cookie_life;
-};
-
-struct sctp_paddrparams {
-	sctp_assoc_t spp_assoc_id;
-	struct __kernel_sockaddr_storage spp_address;
-	__u32 spp_hbinterval;
-	__u16 spp_pathmaxrxt;
-	__u32 spp_pathmtu;
-	__u32 spp_sackdelay;
-	__u32 spp_flags;
-	__u32 spp_ipv6_flowlabel;
-	__u8 spp_dscp;
-	char: 8;
-} __attribute__((packed));
-
-struct sctphdr {
-	__be16 source;
-	__be16 dest;
-	__be32 vtag;
-	__le32 checksum;
-};
-
-struct sctp_chunkhdr {
-	__u8 type;
-	__u8 flags;
-	__be16 length;
-};
-
-enum sctp_cid {
-	SCTP_CID_DATA = 0,
-	SCTP_CID_INIT = 1,
-	SCTP_CID_INIT_ACK = 2,
-	SCTP_CID_SACK = 3,
-	SCTP_CID_HEARTBEAT = 4,
-	SCTP_CID_HEARTBEAT_ACK = 5,
-	SCTP_CID_ABORT = 6,
-	SCTP_CID_SHUTDOWN = 7,
-	SCTP_CID_SHUTDOWN_ACK = 8,
-	SCTP_CID_ERROR = 9,
-	SCTP_CID_COOKIE_ECHO = 10,
-	SCTP_CID_COOKIE_ACK = 11,
-	SCTP_CID_ECN_ECNE = 12,
-	SCTP_CID_ECN_CWR = 13,
-	SCTP_CID_SHUTDOWN_COMPLETE = 14,
-	SCTP_CID_AUTH = 15,
-	SCTP_CID_I_DATA = 64,
-	SCTP_CID_FWD_TSN = 192,
-	SCTP_CID_ASCONF = 193,
-	SCTP_CID_I_FWD_TSN = 194,
-	SCTP_CID_ASCONF_ACK = 128,
-	SCTP_CID_RECONF = 130,
-};
-
-struct sctp_paramhdr {
-	__be16 type;
-	__be16 length;
-};
-
-enum sctp_param {
-	SCTP_PARAM_HEARTBEAT_INFO = 256,
-	SCTP_PARAM_IPV4_ADDRESS = 1280,
-	SCTP_PARAM_IPV6_ADDRESS = 1536,
-	SCTP_PARAM_STATE_COOKIE = 1792,
-	SCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,
-	SCTP_PARAM_COOKIE_PRESERVATIVE = 2304,
-	SCTP_PARAM_HOST_NAME_ADDRESS = 2816,
-	SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,
-	SCTP_PARAM_ECN_CAPABLE = 128,
-	SCTP_PARAM_RANDOM = 640,
-	SCTP_PARAM_CHUNKS = 896,
-	SCTP_PARAM_HMAC_ALGO = 1152,
-	SCTP_PARAM_SUPPORTED_EXT = 2176,
-	SCTP_PARAM_FWD_TSN_SUPPORT = 192,
-	SCTP_PARAM_ADD_IP = 448,
-	SCTP_PARAM_DEL_IP = 704,
-	SCTP_PARAM_ERR_CAUSE = 960,
-	SCTP_PARAM_SET_PRIMARY = 1216,
-	SCTP_PARAM_SUCCESS_REPORT = 1472,
-	SCTP_PARAM_ADAPTATION_LAYER_IND = 1728,
-	SCTP_PARAM_RESET_OUT_REQUEST = 3328,
-	SCTP_PARAM_RESET_IN_REQUEST = 3584,
-	SCTP_PARAM_RESET_TSN_REQUEST = 3840,
-	SCTP_PARAM_RESET_RESPONSE = 4096,
-	SCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,
-	SCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,
-};
-
-struct sctp_datahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 ssn;
-	__u32 ppid;
-	__u8 payload[0];
-};
-
-struct sctp_idatahdr {
-	__be32 tsn;
-	__be16 stream;
-	__be16 reserved;
-	__be32 mid;
-	union {
-		__u32 ppid;
-		__be32 fsn;
-	};
-	__u8 payload[0];
-};
-
-struct sctp_inithdr {
-	__be32 init_tag;
-	__be32 a_rwnd;
-	__be16 num_outbound_streams;
-	__be16 num_inbound_streams;
-	__be32 initial_tsn;
-	__u8 params[0];
-};
-
-struct sctp_init_chunk {
-	struct sctp_chunkhdr chunk_hdr;
-	struct sctp_inithdr init_hdr;
-};
-
-struct sctp_ipv4addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in_addr addr;
-};
-
-struct sctp_ipv6addr_param {
-	struct sctp_paramhdr param_hdr;
-	struct in6_addr addr;
-};
-
-struct sctp_cookie_preserve_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 lifespan_increment;
-};
-
-struct sctp_hostname_param {
-	struct sctp_paramhdr param_hdr;
-	uint8_t hostname[0];
-};
-
-struct sctp_supported_addrs_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 types[0];
-};
-
-struct sctp_adaptation_ind_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 adaptation_ind;
-};
-
-struct sctp_supported_ext_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_random_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 random_val[0];
-};
-
-struct sctp_chunks_param {
-	struct sctp_paramhdr param_hdr;
-	__u8 chunks[0];
-};
-
-struct sctp_hmac_algo_param {
-	struct sctp_paramhdr param_hdr;
-	__be16 hmac_ids[0];
-};
-
-struct sctp_cookie_param {
-	struct sctp_paramhdr p;
-	__u8 body[0];
-};
-
-struct sctp_gap_ack_block {
-	__be16 start;
-	__be16 end;
-};
-
-union sctp_sack_variable {
-	struct sctp_gap_ack_block gab;
-	__be32 dup;
-};
-
-struct sctp_sackhdr {
-	__be32 cum_tsn_ack;
-	__be32 a_rwnd;
-	__be16 num_gap_ack_blocks;
-	__be16 num_dup_tsns;
-	union sctp_sack_variable variable[0];
-};
-
-struct sctp_heartbeathdr {
-	struct sctp_paramhdr info;
-};
-
-struct sctp_shutdownhdr {
-	__be32 cum_tsn_ack;
-};
-
-struct sctp_errhdr {
-	__be16 cause;
-	__be16 length;
-	__u8 variable[0];
-};
-
-struct sctp_ecnehdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_cwrhdr {
-	__be32 lowest_tsn;
-};
-
-struct sctp_fwdtsn_skip {
-	__be16 stream;
-	__be16 ssn;
-};
-
-struct sctp_fwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_fwdtsn_skip skip[0];
-};
-
-struct sctp_ifwdtsn_skip {
-	__be16 stream;
-	__u8 reserved;
-	__u8 flags;
-	__be32 mid;
-};
-
-struct sctp_ifwdtsn_hdr {
-	__be32 new_cum_tsn;
-	struct sctp_ifwdtsn_skip skip[0];
-};
-
-struct sctp_addip_param {
-	struct sctp_paramhdr param_hdr;
-	__be32 crr_id;
-};
-
-struct sctp_addiphdr {
-	__be32 serial;
-	__u8 params[0];
-};
-
-struct sctp_authhdr {
-	__be16 shkey_id;
-	__be16 hmac_id;
-	__u8 hmac[0];
-};
-
-union sctp_addr {
-	struct sockaddr_in v4;
-	struct sockaddr_in6 v6;
-	struct sockaddr sa;
-};
-
-struct sctp_cookie {
-	__u32 my_vtag;
-	__u32 peer_vtag;
-	__u32 my_ttag;
-	__u32 peer_ttag;
-	ktime_t expiration;
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u32 initial_tsn;
-	union sctp_addr peer_addr;
-	__u16 my_port;
-	__u8 prsctp_capable;
-	__u8 padding;
-	__u32 adaptation_ind;
-	__u8 auth_random[36];
-	__u8 auth_hmacs[10];
-	__u8 auth_chunks[20];
-	__u32 raw_addr_list_len;
-	struct sctp_init_chunk peer_init[0];
-};
-
-struct sctp_tsnmap {
-	long unsigned int *tsn_map;
-	__u32 base_tsn;
-	__u32 cumulative_tsn_ack_point;
-	__u32 max_tsn_seen;
-	__u16 len;
-	__u16 pending_data;
-	__u16 num_dup_tsns;
-	__be32 dup_tsns[16];
-};
-
-struct sctp_inithdr_host {
-	__u32 init_tag;
-	__u32 a_rwnd;
-	__u16 num_outbound_streams;
-	__u16 num_inbound_streams;
-	__u32 initial_tsn;
-};
-
-enum sctp_state {
-	SCTP_STATE_CLOSED = 0,
-	SCTP_STATE_COOKIE_WAIT = 1,
-	SCTP_STATE_COOKIE_ECHOED = 2,
-	SCTP_STATE_ESTABLISHED = 3,
-	SCTP_STATE_SHUTDOWN_PENDING = 4,
-	SCTP_STATE_SHUTDOWN_SENT = 5,
-	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
-	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
-};
-
-struct sctp_stream_out_ext;
-
-struct sctp_stream_out {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	struct sctp_stream_out_ext *ext;
-	__u8 state;
-};
-
-struct sctp_stream_in {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	__u32 fsn;
-	__u32 fsn_uo;
-	char pd_mode;
-	char pd_mode_uo;
-};
-
-struct sctp_stream_interleave;
-
-struct sctp_stream {
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_out type[0];
-	} out;
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_in type[0];
-	} in;
-	__u16 outcnt;
-	__u16 incnt;
-	struct sctp_stream_out *out_curr;
-	union {
-		struct {
-			struct list_head prio_list;
-		};
-		struct {
-			struct list_head rr_list;
-			struct sctp_stream_out_ext *rr_next;
-		};
-	};
-	struct sctp_stream_interleave *si;
-};
-
-struct sctp_sched_ops;
-
-struct sctp_association;
-
-struct sctp_outq {
-	struct sctp_association *asoc;
-	struct list_head out_chunk_list;
-	struct sctp_sched_ops *sched;
-	unsigned int out_qlen;
-	unsigned int error;
-	struct list_head control_chunk_list;
-	struct list_head sacked;
-	struct list_head retransmit;
-	struct list_head abandoned;
-	__u32 outstanding_bytes;
-	char fast_rtx;
-	char cork;
-};
-
-struct sctp_ulpq {
-	char pd_mode;
-	struct sctp_association *asoc;
-	struct sk_buff_head reasm;
-	struct sk_buff_head reasm_uo;
-	struct sk_buff_head lobby;
-};
-
-struct sctp_priv_assoc_stats {
-	struct __kernel_sockaddr_storage obs_rto_ipaddr;
-	__u64 max_obs_rto;
-	__u64 isacks;
-	__u64 osacks;
-	__u64 opackets;
-	__u64 ipackets;
-	__u64 rtxchunks;
-	__u64 outofseqtsns;
-	__u64 idupchunks;
-	__u64 gapcnt;
-	__u64 ouodchunks;
-	__u64 iuodchunks;
-	__u64 oodchunks;
-	__u64 iodchunks;
-	__u64 octrlchunks;
-	__u64 ictrlchunks;
-};
-
-struct sctp_transport;
-
-struct sctp_auth_bytes;
-
-struct sctp_shared_key;
-
-struct sctp_association {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	sctp_assoc_t assoc_id;
-	struct sctp_endpoint *ep;
-	struct sctp_cookie c;
-	struct {
-		struct list_head transport_addr_list;
-		__u32 rwnd;
-		__u16 transport_count;
-		__u16 port;
-		struct sctp_transport *primary_path;
-		union sctp_addr primary_addr;
-		struct sctp_transport *active_path;
-		struct sctp_transport *retran_path;
-		struct sctp_transport *last_sent_to;
-		struct sctp_transport *last_data_from;
-		struct sctp_tsnmap tsn_map;
-		__be16 addip_disabled_mask;
-		__u16 ecn_capable: 1;
-		__u16 ipv4_address: 1;
-		__u16 ipv6_address: 1;
-		__u16 hostname_address: 1;
-		__u16 asconf_capable: 1;
-		__u16 prsctp_capable: 1;
-		__u16 reconf_capable: 1;
-		__u16 intl_capable: 1;
-		__u16 auth_capable: 1;
-		__u16 sack_needed: 1;
-		__u16 sack_generation: 1;
-		__u16 zero_window_announced: 1;
-		__u32 sack_cnt;
-		__u32 adaptation_ind;
-		struct sctp_inithdr_host i;
-		void *cookie;
-		int cookie_len;
-		__u32 addip_serial;
-		struct sctp_random_param *peer_random;
-		struct sctp_chunks_param *peer_chunks;
-		struct sctp_hmac_algo_param *peer_hmacs;
-	} peer;
-	enum sctp_state state;
-	int overall_error_count;
-	ktime_t cookie_life;
-	long unsigned int rto_initial;
-	long unsigned int rto_max;
-	long unsigned int rto_min;
-	int max_burst;
-	int max_retrans;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u16 max_init_attempts;
-	__u16 init_retries;
-	long unsigned int max_init_timeo;
-	long unsigned int hbinterval;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u8 pmtu_pending;
-	__u32 pathmtu;
-	__u32 param_flags;
-	__u32 sackfreq;
-	long unsigned int sackdelay;
-	long unsigned int timeouts[11];
-	struct timer_list timers[11];
-	struct sctp_transport *shutdown_last_sent_to;
-	struct sctp_transport *init_last_sent_to;
-	int shutdown_retries;
-	__u32 next_tsn;
-	__u32 ctsn_ack_point;
-	__u32 adv_peer_ack_point;
-	__u32 highest_sacked;
-	__u32 fast_recovery_exit;
-	__u8 fast_recovery;
-	__u16 unack_data;
-	__u32 rtx_data_chunks;
-	__u32 rwnd;
-	__u32 a_rwnd;
-	__u32 rwnd_over;
-	__u32 rwnd_press;
-	int sndbuf_used;
-	atomic_t rmem_alloc;
-	wait_queue_head_t wait;
-	__u32 frag_point;
-	__u32 user_frag;
-	int init_err_counter;
-	int init_cycle;
-	__u16 default_stream;
-	__u16 default_flags;
-	__u32 default_ppid;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	struct sctp_stream stream;
-	struct sctp_outq outqueue;
-	struct sctp_ulpq ulpq;
-	__u32 last_ecne_tsn;
-	__u32 last_cwr_tsn;
-	int numduptsns;
-	struct sctp_chunk *addip_last_asconf;
-	struct list_head asconf_ack_list;
-	struct list_head addip_chunk_list;
-	__u32 addip_serial;
-	int src_out_of_asoc_ok;
-	union sctp_addr *asconf_addr_del_pending;
-	struct sctp_transport *new_transport;
-	struct list_head endpoint_shared_keys;
-	struct sctp_auth_bytes *asoc_shared_key;
-	struct sctp_shared_key *shkey;
-	__u16 default_hmac_id;
-	__u16 active_key_id;
-	__u8 need_ecne: 1;
-	__u8 temp: 1;
-	__u8 pf_expose: 2;
-	__u8 force_delay: 1;
-	__u8 strreset_enable;
-	__u8 strreset_outstanding;
-	__u32 strreset_outseq;
-	__u32 strreset_inseq;
-	__u32 strreset_result[2];
-	struct sctp_chunk *strreset_chunk;
-	struct sctp_priv_assoc_stats stats;
-	int sent_cnt_removable;
-	__u16 subscribe;
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct callback_head rcu;
-};
-
-struct sctp_auth_bytes {
-	refcount_t refcnt;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct sctp_shared_key {
-	struct list_head key_list;
-	struct sctp_auth_bytes *key;
-	refcount_t refcnt;
-	__u16 key_id;
-	__u8 deactivated;
-};
-
-enum {
-	SCTP_MAX_STREAM = 65535,
-};
-
-enum sctp_event_timeout {
-	SCTP_EVENT_TIMEOUT_NONE = 0,
-	SCTP_EVENT_TIMEOUT_T1_COOKIE = 1,
-	SCTP_EVENT_TIMEOUT_T1_INIT = 2,
-	SCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,
-	SCTP_EVENT_TIMEOUT_T3_RTX = 4,
-	SCTP_EVENT_TIMEOUT_T4_RTO = 5,
-	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
-	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
-	SCTP_EVENT_TIMEOUT_RECONF = 8,
-	SCTP_EVENT_TIMEOUT_SACK = 9,
-	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,
-};
-
-enum {
-	SCTP_MAX_DUP_TSNS = 16,
-};
-
-enum sctp_scope {
-	SCTP_SCOPE_GLOBAL = 0,
-	SCTP_SCOPE_PRIVATE = 1,
-	SCTP_SCOPE_LINK = 2,
-	SCTP_SCOPE_LOOPBACK = 3,
-	SCTP_SCOPE_UNUSABLE = 4,
-};
-
-enum {
-	SCTP_AUTH_HMAC_ID_RESERVED_0 = 0,
-	SCTP_AUTH_HMAC_ID_SHA1 = 1,
-	SCTP_AUTH_HMAC_ID_RESERVED_2 = 2,
-	SCTP_AUTH_HMAC_ID_SHA256 = 3,
-	__SCTP_AUTH_HMAC_MAX = 4,
-};
-
-struct sctp_ulpevent {
-	struct sctp_association *asoc;
-	struct sctp_chunk *chunk;
-	unsigned int rmem_len;
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	union {
-		__u32 ppid;
-		__u32 fsn;
-	};
-	__u32 tsn;
-	__u32 cumtsn;
-	__u16 stream;
-	__u16 flags;
-	__u16 msg_flags;
-} __attribute__((packed));
-
-union sctp_addr_param;
-
-union sctp_params {
-	void *v;
-	struct sctp_paramhdr *p;
-	struct sctp_cookie_preserve_param *life;
-	struct sctp_hostname_param *dns;
-	struct sctp_cookie_param *cookie;
-	struct sctp_supported_addrs_param *sat;
-	struct sctp_ipv4addr_param *v4;
-	struct sctp_ipv6addr_param *v6;
-	union sctp_addr_param *addr;
-	struct sctp_adaptation_ind_param *aind;
-	struct sctp_supported_ext_param *ext;
-	struct sctp_random_param *random;
-	struct sctp_chunks_param *chunks;
-	struct sctp_hmac_algo_param *hmac_algo;
-	struct sctp_addip_param *addip;
-};
-
-struct sctp_sender_hb_info;
-
-struct sctp_signed_cookie;
-
-struct sctp_datamsg;
-
-struct sctp_chunk {
-	struct list_head list;
-	refcount_t refcnt;
-	int sent_count;
-	union {
-		struct list_head transmitted_list;
-		struct list_head stream_list;
-	};
-	struct list_head frag_list;
-	struct sk_buff *skb;
-	union {
-		struct sk_buff *head_skb;
-		struct sctp_shared_key *shkey;
-	};
-	union sctp_params param_hdr;
-	union {
-		__u8 *v;
-		struct sctp_datahdr *data_hdr;
-		struct sctp_inithdr *init_hdr;
-		struct sctp_sackhdr *sack_hdr;
-		struct sctp_heartbeathdr *hb_hdr;
-		struct sctp_sender_hb_info *hbs_hdr;
-		struct sctp_shutdownhdr *shutdown_hdr;
-		struct sctp_signed_cookie *cookie_hdr;
-		struct sctp_ecnehdr *ecne_hdr;
-		struct sctp_cwrhdr *ecn_cwr_hdr;
-		struct sctp_errhdr *err_hdr;
-		struct sctp_addiphdr *addip_hdr;
-		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
-		struct sctp_authhdr *auth_hdr;
-		struct sctp_idatahdr *idata_hdr;
-		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
-	} subh;
-	__u8 *chunk_end;
-	struct sctp_chunkhdr *chunk_hdr;
-	struct sctphdr *sctp_hdr;
-	struct sctp_sndrcvinfo sinfo;
-	struct sctp_association *asoc;
-	struct sctp_ep_common *rcvr;
-	long unsigned int sent_at;
-	union sctp_addr source;
-	union sctp_addr dest;
-	struct sctp_datamsg *msg;
-	struct sctp_transport *transport;
-	struct sk_buff *auth_chunk;
-	__u16 rtt_in_progress: 1;
-	__u16 has_tsn: 1;
-	__u16 has_ssn: 1;
-	__u16 singleton: 1;
-	__u16 end_of_packet: 1;
-	__u16 ecn_ce_done: 1;
-	__u16 pdiscard: 1;
-	__u16 tsn_gap_acked: 1;
-	__u16 data_accepted: 1;
-	__u16 auth: 1;
-	__u16 has_asconf: 1;
-	__u16 tsn_missing_report: 2;
-	__u16 fast_retransmit: 2;
-};
-
-struct sctp_stream_interleave {
-	__u16 data_chunk_len;
-	__u16 ftsn_chunk_len;
-	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
-	void (*assign_number)(struct sctp_chunk *);
-	bool (*validate_data)(struct sctp_chunk *);
-	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
-	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
-	void (*start_pd)(struct sctp_ulpq *, gfp_t);
-	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
-	void (*generate_ftsn)(struct sctp_outq *, __u32);
-	bool (*validate_ftsn)(struct sctp_chunk *);
-	void (*report_ftsn)(struct sctp_ulpq *, __u32);
-	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
-};
-
-struct sctp_bind_bucket {
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct hlist_node node;
-	struct hlist_head owner;
-	struct net *net;
-};
-
-struct sctp_bind_hashbucket {
-	spinlock_t lock;
-	struct hlist_head chain;
-};
-
-struct sctp_hashbucket {
-	rwlock_t lock;
-	struct hlist_head chain;
-};
-
-struct sctp_globals {
-	struct list_head address_families;
-	struct sctp_hashbucket *ep_hashtable;
-	struct sctp_bind_hashbucket *port_hashtable;
-	struct rhltable transport_hashtable;
-	int ep_hashsize;
-	int port_hashsize;
-	__u16 max_instreams;
-	__u16 max_outstreams;
-	bool checksum_disable;
-};
-
-enum sctp_socket_type {
-	SCTP_SOCKET_UDP = 0,
-	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
-	SCTP_SOCKET_TCP = 2,
-};
-
-struct sctp_pf;
-
-struct sctp_sock {
-	struct inet_sock inet;
-	enum sctp_socket_type type;
-	int: 32;
-	struct sctp_pf *pf;
-	struct crypto_shash *hmac;
-	char *sctp_hmac_alg;
-	struct sctp_endpoint *ep;
-	struct sctp_bind_bucket *bind_hash;
-	__u16 default_stream;
-	short: 16;
-	__u32 default_ppid;
-	__u16 default_flags;
-	short: 16;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	int max_burst;
-	__u32 hbinterval;
-	__u16 pathmaxrxt;
-	short: 16;
-	__u32 flowlabel;
-	__u8 dscp;
-	char: 8;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	short: 16;
-	__u32 pathmtu;
-	__u32 sackdelay;
-	__u32 sackfreq;
-	__u32 param_flags;
-	__u32 default_ss;
-	struct sctp_rtoinfo rtoinfo;
-	struct sctp_paddrparams paddrparam;
-	struct sctp_assocparams assocparams;
-	__u16 subscribe;
-	struct sctp_initmsg initmsg;
-	short: 16;
-	int user_frag;
-	__u32 autoclose;
-	__u32 adaptation_ind;
-	__u32 pd_point;
-	__u16 nodelay: 1;
-	__u16 pf_expose: 2;
-	__u16 reuse: 1;
-	__u16 disable_fragments: 1;
-	__u16 v4mapped: 1;
-	__u16 frag_interleave: 1;
-	__u16 recvrcvinfo: 1;
-	__u16 recvnxtinfo: 1;
-	__u16 data_ready_signalled: 1;
-	int: 22;
-	atomic_t pd_mode;
-	struct sk_buff_head pd_lobby;
-	struct list_head auto_asconf_list;
-	int do_auto_asconf;
-	int: 32;
-} __attribute__((packed));
-
-struct sctp_af;
-
-struct sctp_pf {
-	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
-	void (*skb_msgname)(struct sk_buff *, char *, int *);
-	int (*af_supported)(sa_family_t, struct sctp_sock *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
-	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
-	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
-	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
-	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
-	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
-	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
-	void (*copy_ip_options)(struct sock *, struct sock *);
-	struct sctp_af *af;
-};
-
-struct sctp_signed_cookie {
-	__u8 signature[32];
-	__u32 __pad;
-	struct sctp_cookie c;
-} __attribute__((packed));
-
-union sctp_addr_param {
-	struct sctp_paramhdr p;
-	struct sctp_ipv4addr_param v4;
-	struct sctp_ipv6addr_param v6;
-};
-
-struct sctp_sender_hb_info {
-	struct sctp_paramhdr param_hdr;
-	union sctp_addr daddr;
-	long unsigned int sent_at;
-	__u64 hb_nonce;
-};
-
-struct sctp_af {
-	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
-	int (*setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	int (*compat_setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*compat_getsockopt)(struct sock *, int, int, char *, int *);
-	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
-	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
-	void (*copy_addrlist)(struct list_head *, struct net_device *);
-	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
-	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
-	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
-	void (*from_sk)(union sctp_addr *, struct sock *);
-	void (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
-	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
-	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
-	enum sctp_scope (*scope)(union sctp_addr *);
-	void (*inaddr_any)(union sctp_addr *, __be16);
-	int (*is_any)(const union sctp_addr *);
-	int (*available)(union sctp_addr *, struct sctp_sock *);
-	int (*skb_iif)(const struct sk_buff *);
-	int (*is_ce)(const struct sk_buff *);
-	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
-	void (*ecn_capable)(struct sock *);
-	__u16 net_header_len;
-	int sockaddr_len;
-	int (*ip_options_len)(struct sock *);
-	sa_family_t sa_family;
-	struct list_head list;
-};
-
-struct sctp_packet {
-	__u16 source_port;
-	__u16 destination_port;
-	__u32 vtag;
-	struct list_head chunk_list;
-	size_t overhead;
-	size_t size;
-	size_t max_size;
-	struct sctp_transport *transport;
-	struct sctp_chunk *auth;
-	u8 has_cookie_echo: 1;
-	u8 has_sack: 1;
-	u8 has_auth: 1;
-	u8 has_data: 1;
-	u8 ipfragok: 1;
-};
-
-struct sctp_transport {
-	struct list_head transports;
-	struct rhlist_head node;
-	refcount_t refcnt;
-	__u32 rto_pending: 1;
-	__u32 hb_sent: 1;
-	__u32 pmtu_pending: 1;
-	__u32 dst_pending_confirm: 1;
-	__u32 sack_generation: 1;
-	u32 dst_cookie;
-	struct flowi fl;
-	union sctp_addr ipaddr;
-	struct sctp_af *af_specific;
-	struct sctp_association *asoc;
-	long unsigned int rto;
-	__u32 rtt;
-	__u32 rttvar;
-	__u32 srtt;
-	__u32 cwnd;
-	__u32 ssthresh;
-	__u32 partial_bytes_acked;
-	__u32 flight_size;
-	__u32 burst_limited;
-	struct dst_entry *dst;
-	union sctp_addr saddr;
-	long unsigned int hbinterval;
-	long unsigned int sackdelay;
-	__u32 sackfreq;
-	atomic_t mtu_info;
-	ktime_t last_time_heard;
-	long unsigned int last_time_sent;
-	long unsigned int last_time_ecne_reduced;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u32 pathmtu;
-	__u32 param_flags;
-	int init_sent_count;
-	int state;
-	short unsigned int error_count;
-	struct timer_list T3_rtx_timer;
-	struct timer_list hb_timer;
-	struct timer_list proto_unreach_timer;
-	struct timer_list reconf_timer;
-	struct list_head transmitted;
-	struct sctp_packet packet;
-	struct list_head send_ready;
-	struct {
-		__u32 next_tsn_at_change;
-		char changeover_active;
-		char cycling_changeover;
-		char cacc_saw_newack;
-	} cacc;
-	__u64 hb_nonce;
-	struct callback_head rcu;
-};
-
-struct sctp_datamsg {
-	struct list_head chunks;
-	refcount_t refcnt;
-	long unsigned int expires_at;
-	int send_error;
-	u8 send_failed: 1;
-	u8 can_delay: 1;
-	u8 abandoned: 1;
-};
-
-struct sctp_stream_priorities {
-	struct list_head prio_sched;
-	struct list_head active;
-	struct sctp_stream_out_ext *next;
-	__u16 prio;
-};
-
-struct sctp_stream_out_ext {
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct list_head outq;
-	union {
-		struct {
-			struct list_head prio_list;
-			struct sctp_stream_priorities *prio_head;
-		};
-		struct {
-			struct list_head rr_list;
-		};
-	};
-};
-
-struct task_security_struct {
-	u32 osid;
-	u32 sid;
-	u32 exec_sid;
-	u32 create_sid;
-	u32 keycreate_sid;
-	u32 sockcreate_sid;
-};
-
-enum label_initialized {
-	LABEL_INVALID = 0,
-	LABEL_INITIALIZED = 1,
-	LABEL_PENDING = 2,
-};
-
-struct inode_security_struct {
-	struct inode *inode;
-	struct list_head list;
-	u32 task_sid;
-	u32 sid;
-	u16 sclass;
-	unsigned char initialized;
-	spinlock_t lock;
-};
-
-struct file_security_struct {
-	u32 sid;
-	u32 fown_sid;
-	u32 isid;
-	u32 pseqno;
-};
-
-struct superblock_security_struct {
-	struct super_block *sb;
-	u32 sid;
-	u32 def_sid;
-	u32 mntpoint_sid;
-	short unsigned int behavior;
-	short unsigned int flags;
-	struct mutex lock;
-	struct list_head isec_head;
-	spinlock_t isec_lock;
-};
-
-struct msg_security_struct {
-	u32 sid;
-};
-
-struct ipc_security_struct {
-	u16 sclass;
-	u32 sid;
-};
-
-struct sk_security_struct {
-	enum {
-		NLBL_UNSET = 0,
-		NLBL_REQUIRE = 1,
-		NLBL_LABELED = 2,
-		NLBL_REQSKB = 3,
-		NLBL_CONNLABELED = 4,
-	} nlbl_state;
-	struct netlbl_lsm_secattr *nlbl_secattr;
-	u32 sid;
-	u32 peer_sid;
-	u16 sclass;
-	enum {
-		SCTP_ASSOC_UNSET = 0,
-		SCTP_ASSOC_SET = 1,
-	} sctp_assoc_state;
-};
-
-struct tun_security_struct {
-	u32 sid;
-};
-
-struct key_security_struct {
-	u32 sid;
-};
-
-struct bpf_security_struct {
-	u32 sid;
-};
-
-struct perf_event_security_struct {
-	u32 sid;
-};
-
-struct selinux_mnt_opts {
-	const char *fscontext;
-	const char *context;
-	const char *rootcontext;
-	const char *defcontext;
-};
-
-enum {
-	Opt_error = 4294967295,
-	Opt_context = 0,
-	Opt_defcontext = 1,
-	Opt_fscontext = 2,
-	Opt_rootcontext = 3,
-	Opt_seclabel = 4,
-};
-
-enum sel_inos {
-	SEL_ROOT_INO = 2,
-	SEL_LOAD = 3,
-	SEL_ENFORCE = 4,
-	SEL_CONTEXT = 5,
-	SEL_ACCESS = 6,
-	SEL_CREATE = 7,
-	SEL_RELABEL = 8,
-	SEL_USER = 9,
-	SEL_POLICYVERS = 10,
-	SEL_COMMIT_BOOLS = 11,
-	SEL_MLS = 12,
-	SEL_DISABLE = 13,
-	SEL_MEMBER = 14,
-	SEL_CHECKREQPROT = 15,
-	SEL_COMPAT_NET = 16,
-	SEL_REJECT_UNKNOWN = 17,
-	SEL_DENY_UNKNOWN = 18,
-	SEL_STATUS = 19,
-	SEL_POLICY = 20,
-	SEL_VALIDATE_TRANS = 21,
-	SEL_INO_NEXT = 22,
-};
-
-struct selinux_fs_info {
-	struct dentry *bool_dir;
-	unsigned int bool_num;
-	char **bool_pending_names;
-	unsigned int *bool_pending_values;
-	struct dentry *class_dir;
-	long unsigned int last_class_ino;
-	bool policy_opened;
-	struct dentry *policycap_dir;
-	struct mutex mutex;
-	long unsigned int last_ino;
-	struct selinux_state *state;
-	struct super_block *sb;
-};
-
-struct policy_load_memory {
-	size_t len;
-	void *data;
-};
-
-enum {
-	SELNL_MSG_SETENFORCE = 16,
-	SELNL_MSG_POLICYLOAD = 17,
-	SELNL_MSG_MAX = 18,
-};
-
-enum selinux_nlgroups {
-	SELNLGRP_NONE = 0,
-	SELNLGRP_AVC = 1,
-	__SELNLGRP_MAX = 2,
-};
-
-struct selnl_msg_setenforce {
-	__s32 val;
-};
-
-struct selnl_msg_policyload {
-	__u32 seqno;
-};
-
-enum {
-	XFRM_MSG_BASE = 16,
-	XFRM_MSG_NEWSA = 16,
-	XFRM_MSG_DELSA = 17,
-	XFRM_MSG_GETSA = 18,
-	XFRM_MSG_NEWPOLICY = 19,
-	XFRM_MSG_DELPOLICY = 20,
-	XFRM_MSG_GETPOLICY = 21,
-	XFRM_MSG_ALLOCSPI = 22,
-	XFRM_MSG_ACQUIRE = 23,
-	XFRM_MSG_EXPIRE = 24,
-	XFRM_MSG_UPDPOLICY = 25,
-	XFRM_MSG_UPDSA = 26,
-	XFRM_MSG_POLEXPIRE = 27,
-	XFRM_MSG_FLUSHSA = 28,
-	XFRM_MSG_FLUSHPOLICY = 29,
-	XFRM_MSG_NEWAE = 30,
-	XFRM_MSG_GETAE = 31,
-	XFRM_MSG_REPORT = 32,
-	XFRM_MSG_MIGRATE = 33,
-	XFRM_MSG_NEWSADINFO = 34,
-	XFRM_MSG_GETSADINFO = 35,
-	XFRM_MSG_NEWSPDINFO = 36,
-	XFRM_MSG_GETSPDINFO = 37,
-	XFRM_MSG_MAPPING = 38,
-	__XFRM_MSG_MAX = 39,
-};
-
-enum {
-	RTM_BASE = 16,
-	RTM_NEWLINK = 16,
-	RTM_DELLINK = 17,
-	RTM_GETLINK = 18,
-	RTM_SETLINK = 19,
-	RTM_NEWADDR = 20,
-	RTM_DELADDR = 21,
-	RTM_GETADDR = 22,
-	RTM_NEWROUTE = 24,
-	RTM_DELROUTE = 25,
-	RTM_GETROUTE = 26,
-	RTM_NEWNEIGH = 28,
-	RTM_DELNEIGH = 29,
-	RTM_GETNEIGH = 30,
-	RTM_NEWRULE = 32,
-	RTM_DELRULE = 33,
-	RTM_GETRULE = 34,
-	RTM_NEWQDISC = 36,
-	RTM_DELQDISC = 37,
-	RTM_GETQDISC = 38,
-	RTM_NEWTCLASS = 40,
-	RTM_DELTCLASS = 41,
-	RTM_GETTCLASS = 42,
-	RTM_NEWTFILTER = 44,
-	RTM_DELTFILTER = 45,
-	RTM_GETTFILTER = 46,
-	RTM_NEWACTION = 48,
-	RTM_DELACTION = 49,
-	RTM_GETACTION = 50,
-	RTM_NEWPREFIX = 52,
-	RTM_GETMULTICAST = 58,
-	RTM_GETANYCAST = 62,
-	RTM_NEWNEIGHTBL = 64,
-	RTM_GETNEIGHTBL = 66,
-	RTM_SETNEIGHTBL = 67,
-	RTM_NEWNDUSEROPT = 68,
-	RTM_NEWADDRLABEL = 72,
-	RTM_DELADDRLABEL = 73,
-	RTM_GETADDRLABEL = 74,
-	RTM_GETDCB = 78,
-	RTM_SETDCB = 79,
-	RTM_NEWNETCONF = 80,
-	RTM_DELNETCONF = 81,
-	RTM_GETNETCONF = 82,
-	RTM_NEWMDB = 84,
-	RTM_DELMDB = 85,
-	RTM_GETMDB = 86,
-	RTM_NEWNSID = 88,
-	RTM_DELNSID = 89,
-	RTM_GETNSID = 90,
-	RTM_NEWSTATS = 92,
-	RTM_GETSTATS = 94,
-	RTM_NEWCACHEREPORT = 96,
-	RTM_NEWCHAIN = 100,
-	RTM_DELCHAIN = 101,
-	RTM_GETCHAIN = 102,
-	RTM_NEWNEXTHOP = 104,
-	RTM_DELNEXTHOP = 105,
-	RTM_GETNEXTHOP = 106,
-	RTM_NEWLINKPROP = 108,
-	RTM_DELLINKPROP = 109,
-	RTM_GETLINKPROP = 110,
-	__RTM_MAX = 111,
-};
-
-struct nlmsg_perm {
-	u16 nlmsg_type;
-	u32 perm;
-};
-
-struct netif_security_struct {
-	struct net *ns;
-	int ifindex;
-	u32 sid;
-};
-
-struct sel_netif {
-	struct list_head list;
-	struct netif_security_struct nsec;
-	struct callback_head callback_head;
-};
-
-struct netnode_security_struct {
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} addr;
-	u32 sid;
-	u16 family;
-};
-
-struct sel_netnode_bkt {
-	unsigned int size;
-	struct list_head list;
-};
-
-struct sel_netnode {
-	struct netnode_security_struct nsec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netport_security_struct {
-	u32 sid;
-	u16 port;
-	u8 protocol;
-};
-
-struct sel_netport_bkt {
-	int size;
-	struct list_head list;
-};
-
-struct sel_netport {
-	struct netport_security_struct psec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct pkey_security_struct {
-	u64 subnet_prefix;
-	u16 pkey;
-	u32 sid;
-};
-
-struct sel_ib_pkey_bkt {
-	int size;
-	struct list_head list;
-};
-
-struct sel_ib_pkey {
-	struct pkey_security_struct psec;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct ebitmap_node {
-	struct ebitmap_node *next;
-	long unsigned int maps[6];
-	u32 startbit;
-};
-
-struct ebitmap {
-	struct ebitmap_node *node;
-	u32 highbit;
-};
-
-struct policy_file {
-	char *data;
-	size_t len;
-};
-
-struct hashtab_node {
-	void *key;
-	void *datum;
-	struct hashtab_node *next;
-};
-
-struct hashtab {
-	struct hashtab_node **htable;
-	u32 size;
-	u32 nel;
-	u32 (*hash_value)(struct hashtab *, const void *);
-	int (*keycmp)(struct hashtab *, const void *, const void *);
-};
-
-struct hashtab_info {
-	u32 slots_used;
-	u32 max_chain_len;
-};
-
-struct symtab {
-	struct hashtab *table;
-	u32 nprim;
-};
-
-struct mls_level {
-	u32 sens;
-	struct ebitmap cat;
-};
-
-struct mls_range {
-	struct mls_level level[2];
-};
-
-struct context___2 {
-	u32 user;
-	u32 role;
-	u32 type;
-	u32 len;
-	struct mls_range range;
-	char *str;
-};
-
-struct sidtab_entry_leaf {
-	struct context___2 context;
-};
-
-struct sidtab_node_inner;
-
-struct sidtab_node_leaf;
-
-union sidtab_entry_inner {
-	struct sidtab_node_inner *ptr_inner;
-	struct sidtab_node_leaf *ptr_leaf;
-};
-
-struct sidtab_node_inner {
-	union sidtab_entry_inner entries[512];
-};
-
-struct sidtab_node_leaf {
-	struct sidtab_entry_leaf entries[56];
-};
-
-struct sidtab_isid_entry {
-	int set;
-	struct context___2 context;
-};
-
-struct sidtab;
-
-struct sidtab_convert_params {
-	int (*func)(struct context___2 *, struct context___2 *, void *);
-	void *args;
-	struct sidtab *target;
-};
-
-struct sidtab {
-	union sidtab_entry_inner roots[4];
-	u32 count;
-	struct sidtab_convert_params *convert;
-	spinlock_t lock;
-	u32 rcache[3];
-	struct sidtab_isid_entry isids[27];
-};
-
-struct avtab_key {
-	u16 source_type;
-	u16 target_type;
-	u16 target_class;
-	u16 specified;
-};
-
-struct avtab_extended_perms {
-	u8 specified;
-	u8 driver;
-	struct extended_perms_data perms;
-};
-
-struct avtab_datum {
-	union {
-		u32 data;
-		struct avtab_extended_perms *xperms;
-	} u;
-};
-
-struct avtab_node {
-	struct avtab_key key;
-	struct avtab_datum datum;
-	struct avtab_node *next;
-};
-
-struct avtab {
-	struct avtab_node **htable;
-	u32 nel;
-	u32 nslot;
-	u32 mask;
-};
-
-struct type_set;
-
-struct constraint_expr {
-	u32 expr_type;
-	u32 attr;
-	u32 op;
-	struct ebitmap names;
-	struct type_set *type_names;
-	struct constraint_expr *next;
-};
-
-struct type_set {
-	struct ebitmap types;
-	struct ebitmap negset;
-	u32 flags;
-};
-
-struct constraint_node {
-	u32 permissions;
-	struct constraint_expr *expr;
-	struct constraint_node *next;
-};
-
-struct common_datum {
-	u32 value;
-	struct symtab permissions;
-};
-
-struct class_datum {
-	u32 value;
-	char *comkey;
-	struct common_datum *comdatum;
-	struct symtab permissions;
-	struct constraint_node *constraints;
-	struct constraint_node *validatetrans;
-	char default_user;
-	char default_role;
-	char default_type;
-	char default_range;
-};
-
-struct role_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap dominates;
-	struct ebitmap types;
-};
-
-struct role_trans {
-	u32 role;
-	u32 type;
-	u32 tclass;
-	u32 new_role;
-	struct role_trans *next;
-};
-
-struct role_allow {
-	u32 role;
-	u32 new_role;
-	struct role_allow *next;
-};
-
-struct type_datum {
-	u32 value;
-	u32 bounds;
-	unsigned char primary;
-	unsigned char attribute;
-};
-
-struct user_datum {
-	u32 value;
-	u32 bounds;
-	struct ebitmap roles;
-	struct mls_range range;
-	struct mls_level dfltlevel;
-};
-
-struct cond_bool_datum {
-	__u32 value;
-	int state;
-};
-
-struct ocontext {
-	union {
-		char *name;
-		struct {
-			u8 protocol;
-			u16 low_port;
-			u16 high_port;
-		} port;
-		struct {
-			u32 addr;
-			u32 mask;
-		} node;
-		struct {
-			u32 addr[4];
-			u32 mask[4];
-		} node6;
-		struct {
-			u64 subnet_prefix;
-			u16 low_pkey;
-			u16 high_pkey;
-		} ibpkey;
-		struct {
-			char *dev_name;
-			u8 port;
-		} ibendport;
-	} u;
-	union {
-		u32 sclass;
-		u32 behavior;
-	} v;
-	struct context___2 context[2];
-	u32 sid[2];
-	struct ocontext *next;
-};
-
-struct genfs {
-	char *fstype;
-	struct ocontext *head;
-	struct genfs *next;
-};
-
-struct cond_node;
-
-struct policydb {
-	int mls_enabled;
-	struct symtab symtab[8];
-	char **sym_val_to_name[8];
-	struct class_datum **class_val_to_struct;
-	struct role_datum **role_val_to_struct;
-	struct user_datum **user_val_to_struct;
-	struct type_datum **type_val_to_struct;
-	struct avtab te_avtab;
-	struct role_trans *role_tr;
-	struct ebitmap filename_trans_ttypes;
-	struct hashtab *filename_trans;
-	struct cond_bool_datum **bool_val_to_struct;
-	struct avtab te_cond_avtab;
-	struct cond_node *cond_list;
-	struct role_allow *role_allow;
-	struct ocontext *ocontexts[9];
-	struct genfs *genfs;
-	struct hashtab *range_tr;
-	struct ebitmap *type_attr_map_array;
-	struct ebitmap policycaps;
-	struct ebitmap permissive_map;
-	size_t len;
-	unsigned int policyvers;
-	unsigned int reject_unknown: 1;
-	unsigned int allow_unknown: 1;
-	u16 process_class;
-	u32 process_trans_perms;
-};
-
-struct selinux_mapping;
-
-struct selinux_map {
-	struct selinux_mapping *mapping;
-	u16 size;
-};
-
-struct selinux_ss {
-	struct sidtab *sidtab;
-	struct policydb policydb;
-	rwlock_t policy_rwlock;
-	u32 latest_granting;
-	struct selinux_map map;
-	struct page *status_page;
-	struct mutex status_lock;
-};
-
-struct perm_datum {
-	u32 value;
-};
-
-struct filename_trans {
-	u32 stype;
-	u32 ttype;
-	u16 tclass;
-	const char *name;
-};
-
-struct filename_trans_datum {
-	u32 otype;
-};
-
-struct level_datum {
-	struct mls_level *level;
-	unsigned char isalias;
-};
-
-struct cat_datum {
-	u32 value;
-	unsigned char isalias;
-};
-
-struct range_trans {
-	u32 source_type;
-	u32 target_type;
-	u32 target_class;
-};
-
-struct cond_expr;
-
-struct cond_av_list;
-
-struct cond_node {
-	int cur_state;
-	struct cond_expr *expr;
-	struct cond_av_list *true_list;
-	struct cond_av_list *false_list;
-	struct cond_node *next;
-};
-
-struct policy_data {
-	struct policydb *p;
-	void *fp;
-};
-
-struct cond_expr {
-	__u32 expr_type;
-	__u32 bool;
-	struct cond_expr *next;
-};
-
-struct cond_av_list {
-	struct avtab_node *node;
-	struct cond_av_list *next;
-};
-
-struct selinux_mapping {
-	u16 value;
-	unsigned int num_perms;
-	u32 perms[32];
-};
-
-struct policydb_compat_info {
-	int version;
-	int sym_num;
-	int ocon_num;
-};
-
-struct convert_context_args {
-	struct selinux_state *state;
-	struct policydb *oldp;
-	struct policydb *newp;
-};
-
-struct selinux_audit_rule {
-	u32 au_seqno;
-	struct context___2 au_ctxt;
-};
-
-struct cond_insertf_data {
-	struct policydb *p;
-	struct cond_av_list *other;
-	struct cond_av_list *head;
-	struct cond_av_list *tail;
-};
-
-struct selinux_kernel_status {
-	u32 version;
-	u32 sequence;
-	u32 enforcing;
-	u32 policyload;
-	u32 deny_unknown;
-};
-
-struct sockaddr_un {
-	__kernel_sa_family_t sun_family;
-	char sun_path[108];
-};
-
-struct unix_address {
-	refcount_t refcnt;
-	int len;
-	unsigned int hash;
-	struct sockaddr_un name[0];
-};
-
-struct unix_sock {
-	struct sock sk;
-	struct unix_address *addr;
-	struct path path;
-	struct mutex iolock;
-	struct mutex bindlock;
-	struct sock *peer;
-	struct list_head link;
-	atomic_long_t inflight;
-	spinlock_t lock;
-	long unsigned int gc_flags;
-	long: 64;
-	struct socket_wq peer_wq;
-	wait_queue_entry_t peer_wake;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum integrity_status {
-	INTEGRITY_PASS = 0,
-	INTEGRITY_PASS_IMMUTABLE = 1,
-	INTEGRITY_FAIL = 2,
-	INTEGRITY_NOLABEL = 3,
-	INTEGRITY_NOXATTRS = 4,
-	INTEGRITY_UNKNOWN = 5,
-};
-
-struct ima_digest_data {
-	u8 algo;
-	u8 length;
-	union {
-		struct {
-			u8 unused;
-			u8 type;
-		} sha1;
-		struct {
-			u8 type;
-			u8 algo;
-		} ng;
-		u8 data[2];
-	} xattr;
-	u8 digest[0];
-};
-
-struct integrity_iint_cache {
-	struct rb_node rb_node;
-	struct mutex mutex;
-	struct inode *inode;
-	u64 version;
-	long unsigned int flags;
-	long unsigned int measured_pcrs;
-	long unsigned int atomic_flags;
-	enum integrity_status ima_file_status: 4;
-	enum integrity_status ima_mmap_status: 4;
-	enum integrity_status ima_bprm_status: 4;
-	enum integrity_status ima_read_status: 4;
-	enum integrity_status ima_creds_status: 4;
-	enum integrity_status evm_status: 4;
-	struct ima_digest_data *ima_hash;
-};
-
-struct crypto_async_request;
-
-typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
-
-struct crypto_async_request {
-	struct list_head list;
-	crypto_completion_t complete;
-	void *data;
-	struct crypto_tfm *tfm;
-	u32 flags;
-};
-
-struct crypto_wait {
-	struct completion completion;
-	int err;
-};
-
-struct crypto_template;
-
-struct crypto_instance {
-	struct crypto_alg alg;
-	struct crypto_template *tmpl;
-	struct hlist_node list;
-	void *__ctx[0];
-};
-
-struct rtattr;
-
-struct crypto_template {
-	struct list_head list;
-	struct hlist_head instances;
-	struct module *module;
-	struct crypto_instance * (*alloc)(struct rtattr **);
-	void (*free)(struct crypto_instance *);
-	int (*create)(struct crypto_template *, struct rtattr **);
-	char name[128];
-};
-
-enum {
-	CRYPTO_MSG_ALG_REQUEST = 0,
-	CRYPTO_MSG_ALG_REGISTER = 1,
-	CRYPTO_MSG_ALG_LOADED = 2,
-};
-
-struct crypto_larval {
-	struct crypto_alg alg;
-	struct crypto_alg *adult;
-	struct completion completion;
-	u32 mask;
-};
-
-enum {
-	CRYPTOA_UNSPEC = 0,
-	CRYPTOA_ALG = 1,
-	CRYPTOA_TYPE = 2,
-	CRYPTOA_U32 = 3,
-	__CRYPTOA_MAX = 4,
-};
-
-struct crypto_attr_alg {
-	char name[128];
-};
-
-struct crypto_attr_type {
-	u32 type;
-	u32 mask;
-};
-
-struct crypto_attr_u32 {
-	u32 num;
-};
-
-struct rtattr {
-	short unsigned int rta_len;
-	short unsigned int rta_type;
-};
-
-struct crypto_spawn {
-	struct list_head list;
-	struct crypto_alg *alg;
-	struct crypto_instance *inst;
-	const struct crypto_type *frontend;
-	u32 mask;
-};
-
-struct crypto_queue {
-	struct list_head list;
-	struct list_head *backlog;
-	unsigned int qlen;
-	unsigned int max_qlen;
-};
-
-struct scatter_walk {
-	struct scatterlist *sg;
-	unsigned int offset;
-};
-
-struct aead_request {
-	struct crypto_async_request base;
-	unsigned int assoclen;
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	void *__ctx[0];
-};
-
-struct crypto_aead;
-
-struct aead_alg {
-	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
-	int (*setauthsize)(struct crypto_aead *, unsigned int);
-	int (*encrypt)(struct aead_request *);
-	int (*decrypt)(struct aead_request *);
-	int (*init)(struct crypto_aead *);
-	void (*exit)(struct crypto_aead *);
-	unsigned int ivsize;
-	unsigned int maxauthsize;
-	unsigned int chunksize;
-	struct crypto_alg base;
-};
-
-struct crypto_aead {
-	unsigned int authsize;
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct aead_instance {
-	void (*free)(struct aead_instance *);
-	union {
-		struct {
-			char head[64];
-			struct crypto_instance base;
-		} s;
-		struct aead_alg alg;
-	};
-};
-
-struct crypto_aead_spawn {
-	struct crypto_spawn base;
-};
-
-enum crypto_attr_type_t {
-	CRYPTOCFGA_UNSPEC = 0,
-	CRYPTOCFGA_PRIORITY_VAL = 1,
-	CRYPTOCFGA_REPORT_LARVAL = 2,
-	CRYPTOCFGA_REPORT_HASH = 3,
-	CRYPTOCFGA_REPORT_BLKCIPHER = 4,
-	CRYPTOCFGA_REPORT_AEAD = 5,
-	CRYPTOCFGA_REPORT_COMPRESS = 6,
-	CRYPTOCFGA_REPORT_RNG = 7,
-	CRYPTOCFGA_REPORT_CIPHER = 8,
-	CRYPTOCFGA_REPORT_AKCIPHER = 9,
-	CRYPTOCFGA_REPORT_KPP = 10,
-	CRYPTOCFGA_REPORT_ACOMP = 11,
-	CRYPTOCFGA_STAT_LARVAL = 12,
-	CRYPTOCFGA_STAT_HASH = 13,
-	CRYPTOCFGA_STAT_BLKCIPHER = 14,
-	CRYPTOCFGA_STAT_AEAD = 15,
-	CRYPTOCFGA_STAT_COMPRESS = 16,
-	CRYPTOCFGA_STAT_RNG = 17,
-	CRYPTOCFGA_STAT_CIPHER = 18,
-	CRYPTOCFGA_STAT_AKCIPHER = 19,
-	CRYPTOCFGA_STAT_KPP = 20,
-	CRYPTOCFGA_STAT_ACOMP = 21,
-	__CRYPTOCFGA_MAX = 22,
-};
-
-struct crypto_report_aead {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int maxauthsize;
-	unsigned int ivsize;
-};
-
-struct crypto_sync_skcipher;
-
-struct aead_geniv_ctx {
-	spinlock_t lock;
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *sknull;
-	u8 salt[0];
-};
-
-struct crypto_rng;
-
-struct rng_alg {
-	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
-	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
-	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
-	unsigned int seedsize;
-	struct crypto_alg base;
-};
-
-struct crypto_rng {
-	struct crypto_tfm base;
-};
-
-struct crypto_cipher {
-	struct crypto_tfm base;
-};
-
-struct skcipher_request {
-	unsigned int cryptlen;
-	u8 *iv;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	struct crypto_async_request base;
-	void *__ctx[0];
-};
-
-struct crypto_skcipher {
-	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
-	int (*encrypt)(struct skcipher_request *);
-	int (*decrypt)(struct skcipher_request *);
-	unsigned int ivsize;
-	unsigned int reqsize;
-	unsigned int keysize;
-	struct crypto_tfm base;
-};
-
-struct crypto_sync_skcipher {
-	struct crypto_skcipher base;
-};
-
-struct skcipher_alg {
-	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
-	int (*encrypt)(struct skcipher_request *);
-	int (*decrypt)(struct skcipher_request *);
-	int (*init)(struct crypto_skcipher *);
-	void (*exit)(struct crypto_skcipher *);
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-	unsigned int chunksize;
-	unsigned int walksize;
-	struct crypto_alg base;
-};
-
-struct skcipher_instance {
-	void (*free)(struct skcipher_instance *);
-	union {
-		struct {
-			char head[64];
-			struct crypto_instance base;
-		} s;
-		struct skcipher_alg alg;
-	};
-};
-
-struct crypto_skcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct skcipher_walk {
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} src;
-	union {
-		struct {
-			struct page *page;
-			long unsigned int offset;
-		} phys;
-		struct {
-			u8 *page;
-			void *addr;
-		} virt;
-	} dst;
-	struct scatter_walk in;
-	unsigned int nbytes;
-	struct scatter_walk out;
-	unsigned int total;
-	struct list_head buffers;
-	u8 *page;
-	u8 *buffer;
-	u8 *oiv;
-	void *iv;
-	unsigned int ivsize;
-	int flags;
-	unsigned int blocksize;
-	unsigned int stride;
-	unsigned int alignmask;
-};
-
-struct skcipher_ctx_simple {
-	struct crypto_cipher *cipher;
-};
-
-struct crypto_report_blkcipher {
-	char type[64];
-	char geniv[64];
-	unsigned int blocksize;
-	unsigned int min_keysize;
-	unsigned int max_keysize;
-	unsigned int ivsize;
-};
-
-enum {
-	SKCIPHER_WALK_PHYS = 1,
-	SKCIPHER_WALK_SLOW = 2,
-	SKCIPHER_WALK_COPY = 4,
-	SKCIPHER_WALK_DIFF = 8,
-	SKCIPHER_WALK_SLEEP = 16,
-};
-
-struct skcipher_walk_buffer {
-	struct list_head entry;
-	struct scatter_walk dst;
-	unsigned int len;
-	u8 *data;
-	u8 buffer[0];
-};
-
-struct hash_alg_common {
-	unsigned int digestsize;
-	unsigned int statesize;
-	struct crypto_alg base;
-};
-
-struct ahash_request {
-	struct crypto_async_request base;
-	unsigned int nbytes;
-	struct scatterlist *src;
-	u8 *result;
-	void *priv;
-	void *__ctx[0];
-};
-
-struct crypto_ahash;
-
-struct ahash_alg {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	struct hash_alg_common halg;
-};
-
-struct crypto_ahash {
-	int (*init)(struct ahash_request *);
-	int (*update)(struct ahash_request *);
-	int (*final)(struct ahash_request *);
-	int (*finup)(struct ahash_request *);
-	int (*digest)(struct ahash_request *);
-	int (*export)(struct ahash_request *, void *);
-	int (*import)(struct ahash_request *, const void *);
-	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct shash_alg {
-	int (*init)(struct shash_desc *);
-	int (*update)(struct shash_desc *, const u8 *, unsigned int);
-	int (*final)(struct shash_desc *, u8 *);
-	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*export)(struct shash_desc *, void *);
-	int (*import)(struct shash_desc *, const void *);
-	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
-	unsigned int descsize;
-	int: 32;
-	unsigned int digestsize;
-	unsigned int statesize;
-	struct crypto_alg base;
-};
-
-struct crypto_hash_walk {
-	char *data;
-	unsigned int offset;
-	unsigned int alignmask;
-	struct page *pg;
-	unsigned int entrylen;
-	unsigned int total;
-	struct scatterlist *sg;
-	unsigned int flags;
-};
-
-struct ahash_instance {
-	struct ahash_alg alg;
-};
-
-struct crypto_ahash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_hash {
-	char type[64];
-	unsigned int blocksize;
-	unsigned int digestsize;
-};
-
-struct ahash_request_priv {
-	crypto_completion_t complete;
-	void *data;
-	u8 *result;
-	u32 flags;
-	void *ubuf[0];
-};
-
-struct shash_instance {
-	struct shash_alg alg;
-};
-
-struct crypto_shash_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_akcipher {
-	char type[64];
-};
-
-struct akcipher_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	void *__ctx[0];
-};
-
-struct crypto_akcipher {
-	struct crypto_tfm base;
-};
-
-struct akcipher_alg {
-	int (*sign)(struct akcipher_request *);
-	int (*verify)(struct akcipher_request *);
-	int (*encrypt)(struct akcipher_request *);
-	int (*decrypt)(struct akcipher_request *);
-	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
-	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
-	unsigned int (*max_size)(struct crypto_akcipher *);
-	int (*init)(struct crypto_akcipher *);
-	void (*exit)(struct crypto_akcipher *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-struct akcipher_instance {
-	void (*free)(struct akcipher_instance *);
-	union {
-		struct {
-			char head[80];
-			struct crypto_instance base;
-		} s;
-		struct akcipher_alg alg;
-	};
-};
-
-struct crypto_akcipher_spawn {
-	struct crypto_spawn base;
-};
-
-struct crypto_report_kpp {
-	char type[64];
-};
-
-struct kpp_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	void *__ctx[0];
-};
-
-struct crypto_kpp {
-	struct crypto_tfm base;
-};
-
-struct kpp_alg {
-	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
-	int (*generate_public_key)(struct kpp_request *);
-	int (*compute_shared_secret)(struct kpp_request *);
-	unsigned int (*max_size)(struct crypto_kpp *);
-	int (*init)(struct crypto_kpp *);
-	void (*exit)(struct crypto_kpp *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-enum asn1_class {
-	ASN1_UNIV = 0,
-	ASN1_APPL = 1,
-	ASN1_CONT = 2,
-	ASN1_PRIV = 3,
-};
-
-enum asn1_method {
-	ASN1_PRIM = 0,
-	ASN1_CONS = 1,
-};
-
-enum asn1_tag {
-	ASN1_EOC = 0,
-	ASN1_BOOL = 1,
-	ASN1_INT = 2,
-	ASN1_BTS = 3,
-	ASN1_OTS = 4,
-	ASN1_NULL = 5,
-	ASN1_OID = 6,
-	ASN1_ODE = 7,
-	ASN1_EXT = 8,
-	ASN1_REAL = 9,
-	ASN1_ENUM = 10,
-	ASN1_EPDV = 11,
-	ASN1_UTF8STR = 12,
-	ASN1_RELOID = 13,
-	ASN1_SEQ = 16,
-	ASN1_SET = 17,
-	ASN1_NUMSTR = 18,
-	ASN1_PRNSTR = 19,
-	ASN1_TEXSTR = 20,
-	ASN1_VIDSTR = 21,
-	ASN1_IA5STR = 22,
-	ASN1_UNITIM = 23,
-	ASN1_GENTIM = 24,
-	ASN1_GRASTR = 25,
-	ASN1_VISSTR = 26,
-	ASN1_GENSTR = 27,
-	ASN1_UNISTR = 28,
-	ASN1_CHRSTR = 29,
-	ASN1_BMPSTR = 30,
-	ASN1_LONG_TAG = 31,
-};
-
-typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
-
-struct asn1_decoder {
-	const unsigned char *machine;
-	size_t machlen;
-	const asn1_action_t *actions;
-};
-
-enum asn1_opcode {
-	ASN1_OP_MATCH = 0,
-	ASN1_OP_MATCH_OR_SKIP = 1,
-	ASN1_OP_MATCH_ACT = 2,
-	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
-	ASN1_OP_MATCH_JUMP = 4,
-	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
-	ASN1_OP_MATCH_ANY = 8,
-	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
-	ASN1_OP_MATCH_ANY_ACT = 10,
-	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
-	ASN1_OP_COND_MATCH_OR_SKIP = 17,
-	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
-	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
-	ASN1_OP_COND_MATCH_ANY = 24,
-	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
-	ASN1_OP_COND_MATCH_ANY_ACT = 26,
-	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
-	ASN1_OP_COND_FAIL = 28,
-	ASN1_OP_COMPLETE = 29,
-	ASN1_OP_ACT = 30,
-	ASN1_OP_MAYBE_ACT = 31,
-	ASN1_OP_END_SEQ = 32,
-	ASN1_OP_END_SET = 33,
-	ASN1_OP_END_SEQ_OF = 34,
-	ASN1_OP_END_SET_OF = 35,
-	ASN1_OP_END_SEQ_ACT = 36,
-	ASN1_OP_END_SET_ACT = 37,
-	ASN1_OP_END_SEQ_OF_ACT = 38,
-	ASN1_OP_END_SET_OF_ACT = 39,
-	ASN1_OP_RETURN = 40,
-	ASN1_OP__NR = 41,
-};
-
-enum rsapubkey_actions {
-	ACT_rsa_get_e = 0,
-	ACT_rsa_get_n = 1,
-	NR__rsapubkey_actions = 2,
-};
-
-enum rsaprivkey_actions {
-	ACT_rsa_get_d = 0,
-	ACT_rsa_get_dp = 1,
-	ACT_rsa_get_dq = 2,
-	ACT_rsa_get_e___2 = 3,
-	ACT_rsa_get_n___2 = 4,
-	ACT_rsa_get_p = 5,
-	ACT_rsa_get_q = 6,
-	ACT_rsa_get_qinv = 7,
-	NR__rsaprivkey_actions = 8,
-};
-
-typedef long unsigned int mpi_limb_t;
-
-struct gcry_mpi {
-	int alloced;
-	int nlimbs;
-	int nbits;
-	int sign;
-	unsigned int flags;
-	mpi_limb_t *d;
-};
-
-typedef struct gcry_mpi *MPI;
-
-struct rsa_key {
-	const u8 *n;
-	const u8 *e;
-	const u8 *d;
-	const u8 *p;
-	const u8 *q;
-	const u8 *dp;
-	const u8 *dq;
-	const u8 *qinv;
-	size_t n_sz;
-	size_t e_sz;
-	size_t d_sz;
-	size_t p_sz;
-	size_t q_sz;
-	size_t dp_sz;
-	size_t dq_sz;
-	size_t qinv_sz;
-};
-
-struct rsa_mpi_key {
-	MPI n;
-	MPI e;
-	MPI d;
-};
-
-struct crypto_template___2;
-
-struct asn1_decoder___2;
-
-struct rsa_asn1_template {
-	const char *name;
-	const u8 *data;
-	size_t size;
-};
-
-struct pkcs1pad_ctx {
-	struct crypto_akcipher *child;
-	unsigned int key_size;
-};
-
-struct pkcs1pad_inst_ctx {
-	struct crypto_akcipher_spawn spawn;
-	const struct rsa_asn1_template *digest_info;
-};
-
-struct pkcs1pad_request {
-	struct scatterlist in_sg[2];
-	struct scatterlist out_sg[1];
-	uint8_t *in_buf;
-	uint8_t *out_buf;
-	struct akcipher_request child_req;
-};
-
-struct crypto_report_acomp {
-	char type[64];
-};
-
-struct acomp_req {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int slen;
-	unsigned int dlen;
-	u32 flags;
-	void *__ctx[0];
-};
-
-struct crypto_acomp {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	unsigned int reqsize;
-	struct crypto_tfm base;
-};
-
-struct acomp_alg {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	int (*init)(struct crypto_acomp *);
-	void (*exit)(struct crypto_acomp *);
-	unsigned int reqsize;
-	struct crypto_alg base;
-};
-
-struct crypto_report_comp {
-	char type[64];
-};
-
-struct crypto_scomp {
-	struct crypto_tfm base;
-};
-
-struct scomp_alg {
-	void * (*alloc_ctx)(struct crypto_scomp *);
-	void (*free_ctx)(struct crypto_scomp *, void *);
-	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	struct crypto_alg base;
-};
-
-struct scomp_scratch {
-	spinlock_t lock;
-	void *src;
-	void *dst;
-};
-
-struct cryptomgr_param {
-	struct rtattr *tb[34];
-	struct {
-		struct rtattr attr;
-		struct crypto_attr_type data;
-	} type;
-	union {
-		struct rtattr attr;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_alg data;
-		} alg;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_u32 data;
-		} nu32;
-	} attrs[32];
-	char template[128];
-	struct crypto_larval *larval;
-	u32 otype;
-	u32 omask;
-};
-
-struct crypto_test_param {
-	char driver[128];
-	char alg[128];
-	u32 type;
-};
-
-struct cmac_tfm_ctx {
-	struct crypto_cipher *child;
-	u8 ctx[0];
-};
-
-struct cmac_desc_ctx {
-	unsigned int len;
-	u8 ctx[0];
-};
-
-struct hmac_ctx {
-	struct crypto_shash *hash;
-};
-
-struct md5_state {
-	u32 hash[4];
-	u32 block[16];
-	u64 byte_count;
-};
-
-struct sha1_state {
-	u32 state[5];
-	u64 count;
-	u8 buffer[64];
-};
-
-typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
-
-struct sha256_state {
-	u32 state[8];
-	u64 count;
-	u8 buf[64];
-};
-
-typedef struct {
-	u64 a;
-	u64 b;
-} u128;
-
-typedef struct {
-	__be64 a;
-	__be64 b;
-} be128;
-
-typedef struct {
-	__le64 b;
-	__le64 a;
-} le128;
-
-struct gf128mul_4k {
-	be128 t[256];
-};
-
-struct gf128mul_64k {
-	struct gf128mul_4k *t[16];
-};
-
-struct crypto_rfc3686_ctx {
-	struct crypto_skcipher *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc3686_req_ctx {
-	u8 iv[16];
-	struct skcipher_request subreq;
-};
-
-struct gcm_instance_ctx {
-	struct crypto_skcipher_spawn ctr;
-	struct crypto_ahash_spawn ghash;
-};
-
-struct crypto_gcm_ctx {
-	struct crypto_skcipher *ctr;
-	struct crypto_ahash *ghash;
-};
-
-struct crypto_rfc4106_ctx {
-	struct crypto_aead *child;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4106_req_ctx {
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct aead_request subreq;
-};
-
-struct crypto_rfc4543_instance_ctx {
-	struct crypto_aead_spawn aead;
-};
-
-struct crypto_rfc4543_ctx {
-	struct crypto_aead *child;
-	struct crypto_sync_skcipher *null;
-	u8 nonce[4];
-};
-
-struct crypto_rfc4543_req_ctx {
-	struct aead_request subreq;
-};
-
-struct crypto_gcm_ghash_ctx {
-	unsigned int cryptlen;
-	struct scatterlist *src;
-	int (*complete)(struct aead_request *, u32);
-};
-
-struct crypto_gcm_req_priv_ctx {
-	u8 iv[16];
-	u8 auth_tag[16];
-	u8 iauth_tag[16];
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct scatterlist sg;
-	struct crypto_gcm_ghash_ctx ghash_ctx;
-	union {
-		struct ahash_request ahreq;
-		struct skcipher_request skreq;
-	} u;
-};
-
-struct ccm_instance_ctx {
-	struct crypto_skcipher_spawn ctr;
-	struct crypto_ahash_spawn mac;
-};
-
-struct crypto_ccm_ctx {
-	struct crypto_ahash *mac;
-	struct crypto_skcipher *ctr;
-};
-
-struct crypto_rfc4309_ctx {
-	struct crypto_aead *child;
-	u8 nonce[3];
-};
-
-struct crypto_rfc4309_req_ctx {
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	struct aead_request subreq;
-};
-
-struct crypto_ccm_req_priv_ctx {
-	u8 odata[16];
-	u8 idata[16];
-	u8 auth_tag[16];
-	u32 flags;
-	struct scatterlist src[3];
-	struct scatterlist dst[3];
-	union {
-		struct ahash_request ahreq;
-		struct skcipher_request skreq;
-	};
-};
-
-struct cbcmac_tfm_ctx {
-	struct crypto_cipher *child;
-};
-
-struct cbcmac_desc_ctx {
-	unsigned int len;
-};
-
-struct des_ctx {
-	u32 expkey[32];
-};
-
-struct des3_ede_ctx {
-	u32 expkey[96];
-};
-
-struct crypto_aes_ctx {
-	u32 key_enc[60];
-	u32 key_dec[60];
-	u32 key_length;
-};
-
-struct chksum_ctx {
-	u32 key;
-};
-
-struct chksum_desc_ctx {
-	u32 crc;
-};
-
-enum {
-	CRYPTO_AUTHENC_KEYA_UNSPEC = 0,
-	CRYPTO_AUTHENC_KEYA_PARAM = 1,
-};
-
-struct crypto_authenc_key_param {
-	__be32 enckeylen;
-};
-
-struct crypto_authenc_keys {
-	const u8 *authkey;
-	const u8 *enckey;
-	unsigned int authkeylen;
-	unsigned int enckeylen;
-};
-
-struct authenc_instance_ctx {
-	struct crypto_ahash_spawn auth;
-	struct crypto_skcipher_spawn enc;
-	unsigned int reqoff;
-};
-
-struct crypto_authenc_ctx {
-	struct crypto_ahash *auth;
-	struct crypto_skcipher *enc;
-	struct crypto_sync_skcipher *null;
-};
-
-struct authenc_request_ctx {
-	struct scatterlist src[2];
-	struct scatterlist dst[2];
-	char tail[0];
-};
-
-struct authenc_esn_instance_ctx {
-	struct crypto_ahash_spawn auth;
-	struct crypto_skcipher_spawn enc;
-};
-
-struct crypto_authenc_esn_ctx {
-	unsigned int reqoff;
-	struct crypto_ahash *auth;
-	struct crypto_skcipher *enc;
-	struct crypto_sync_skcipher *null;
-};
-
-struct authenc_esn_request_ctx {
-	struct scatterlist src[2];
-	struct scatterlist dst[2];
-	char tail[0];
-};
-
-struct crypto_report_rng {
-	char type[64];
-	unsigned int seedsize;
-};
-
-struct random_ready_callback {
-	struct list_head list;
-	void (*func)(struct random_ready_callback *);
-	struct module *owner;
-};
-
-struct drbg_string {
-	const unsigned char *buf;
-	size_t len;
-	struct list_head list;
-};
-
-typedef uint32_t drbg_flag_t;
-
-struct drbg_core {
-	drbg_flag_t flags;
-	__u8 statelen;
-	__u8 blocklen_bytes;
-	char cra_name[128];
-	char backend_cra_name[128];
-};
-
-struct drbg_state;
-
-struct drbg_state_ops {
-	int (*update)(struct drbg_state *, struct list_head *, int);
-	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
-	int (*crypto_init)(struct drbg_state *);
-	int (*crypto_fini)(struct drbg_state *);
-};
-
-struct drbg_state {
-	struct mutex drbg_mutex;
-	unsigned char *V;
-	unsigned char *Vbuf;
-	unsigned char *C;
-	unsigned char *Cbuf;
-	size_t reseed_ctr;
-	size_t reseed_threshold;
-	unsigned char *scratchpad;
-	unsigned char *scratchpadbuf;
-	void *priv_data;
-	struct crypto_skcipher *ctr_handle;
-	struct skcipher_request *ctr_req;
-	__u8 *outscratchpadbuf;
-	__u8 *outscratchpad;
-	struct crypto_wait ctr_wait;
-	struct scatterlist sg_in;
-	struct scatterlist sg_out;
-	bool seeded;
-	bool pr;
-	bool fips_primed;
-	unsigned char *prev;
-	struct work_struct seed_work;
-	struct crypto_rng *jent;
-	const struct drbg_state_ops *d_ops;
-	const struct drbg_core *core;
-	struct drbg_string test_data;
-	struct random_ready_callback random_ready;
-};
-
-enum drbg_prefixes {
-	DRBG_PREFIX0 = 0,
-	DRBG_PREFIX1 = 1,
-	DRBG_PREFIX2 = 2,
-	DRBG_PREFIX3 = 3,
-};
-
-struct sdesc {
-	struct shash_desc shash;
-	char ctx[0];
-};
-
-struct rand_data {
-	__u64 data;
-	__u64 old_data;
-	__u64 prev_time;
-	__u64 last_delta;
-	__s64 last_delta2;
-	unsigned int osr;
-	unsigned char *mem;
-	unsigned int memlocation;
-	unsigned int memblocks;
-	unsigned int memblocksize;
-	unsigned int memaccessloops;
-};
-
-struct rand_data___2;
-
-struct jitterentropy {
-	spinlock_t jent_lock;
-	struct rand_data___2 *entropy_collector;
-};
-
-struct ghash_ctx {
-	struct gf128mul_4k *gf128;
-};
-
-struct ghash_desc_ctx {
-	u8 buffer[16];
-	u32 bytes;
-};
-
-enum asymmetric_payload_bits {
-	asym_crypto = 0,
-	asym_subtype = 1,
-	asym_key_ids = 2,
-	asym_auth = 3,
-};
-
-struct asymmetric_key_id {
-	short unsigned int len;
-	unsigned char data[0];
-};
-
-struct asymmetric_key_ids {
-	void *id[2];
-};
-
-struct public_key_signature;
-
-struct asymmetric_key_subtype___2 {
-	struct module *owner;
-	const char *name;
-	short unsigned int name_len;
-	void (*describe)(const struct key *, struct seq_file *);
-	void (*destroy)(void *, void *);
-	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
-	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
-	int (*verify_signature)(const struct key *, const struct public_key_signature *);
-};
-
-struct public_key_signature {
-	struct asymmetric_key_id *auth_ids[2];
-	u8 *s;
-	u32 s_size;
-	u8 *digest;
-	u8 digest_size;
-	const char *pkey_algo;
-	const char *hash_algo;
-	const char *encoding;
-};
-
-struct asymmetric_key_parser {
-	struct list_head link;
-	struct module *owner;
-	const char *name;
-	int (*parse)(struct key_preparsed_payload *);
-};
-
-enum OID {
-	OID_id_dsa_with_sha1 = 0,
-	OID_id_dsa = 1,
-	OID_id_ecdsa_with_sha1 = 2,
-	OID_id_ecPublicKey = 3,
-	OID_rsaEncryption = 4,
-	OID_md2WithRSAEncryption = 5,
-	OID_md3WithRSAEncryption = 6,
-	OID_md4WithRSAEncryption = 7,
-	OID_sha1WithRSAEncryption = 8,
-	OID_sha256WithRSAEncryption = 9,
-	OID_sha384WithRSAEncryption = 10,
-	OID_sha512WithRSAEncryption = 11,
-	OID_sha224WithRSAEncryption = 12,
-	OID_data = 13,
-	OID_signed_data = 14,
-	OID_email_address = 15,
-	OID_contentType = 16,
-	OID_messageDigest = 17,
-	OID_signingTime = 18,
-	OID_smimeCapabilites = 19,
-	OID_smimeAuthenticatedAttrs = 20,
-	OID_md2 = 21,
-	OID_md4 = 22,
-	OID_md5 = 23,
-	OID_msIndirectData = 24,
-	OID_msStatementType = 25,
-	OID_msSpOpusInfo = 26,
-	OID_msPeImageDataObjId = 27,
-	OID_msIndividualSPKeyPurpose = 28,
-	OID_msOutlookExpress = 29,
-	OID_certAuthInfoAccess = 30,
-	OID_sha1 = 31,
-	OID_sha256 = 32,
-	OID_sha384 = 33,
-	OID_sha512 = 34,
-	OID_sha224 = 35,
-	OID_commonName = 36,
-	OID_surname = 37,
-	OID_countryName = 38,
-	OID_locality = 39,
-	OID_stateOrProvinceName = 40,
-	OID_organizationName = 41,
-	OID_organizationUnitName = 42,
-	OID_title = 43,
-	OID_description = 44,
-	OID_name = 45,
-	OID_givenName = 46,
-	OID_initials = 47,
-	OID_generationalQualifier = 48,
-	OID_subjectKeyIdentifier = 49,
-	OID_keyUsage = 50,
-	OID_subjectAltName = 51,
-	OID_issuerAltName = 52,
-	OID_basicConstraints = 53,
-	OID_crlDistributionPoints = 54,
-	OID_certPolicies = 55,
-	OID_authorityKeyIdentifier = 56,
-	OID_extKeyUsage = 57,
-	OID_gostCPSignA = 58,
-	OID_gostCPSignB = 59,
-	OID_gostCPSignC = 60,
-	OID_gost2012PKey256 = 61,
-	OID_gost2012PKey512 = 62,
-	OID_gost2012Digest256 = 63,
-	OID_gost2012Digest512 = 64,
-	OID_gost2012Signature256 = 65,
-	OID_gost2012Signature512 = 66,
-	OID_gostTC26Sign256A = 67,
-	OID_gostTC26Sign256B = 68,
-	OID_gostTC26Sign256C = 69,
-	OID_gostTC26Sign256D = 70,
-	OID_gostTC26Sign512A = 71,
-	OID_gostTC26Sign512B = 72,
-	OID_gostTC26Sign512C = 73,
-	OID__NR = 74,
-};
-
-struct public_key {
-	void *key;
-	u32 keylen;
-	enum OID algo;
-	void *params;
-	u32 paramlen;
-	bool key_is_private;
-	const char *id_type;
-	const char *pkey_algo;
-};
-
-enum x509_actions {
-	ACT_x509_extract_key_data = 0,
-	ACT_x509_extract_name_segment = 1,
-	ACT_x509_note_OID = 2,
-	ACT_x509_note_issuer = 3,
-	ACT_x509_note_not_after = 4,
-	ACT_x509_note_not_before = 5,
-	ACT_x509_note_params = 6,
-	ACT_x509_note_pkey_algo = 7,
-	ACT_x509_note_serial = 8,
-	ACT_x509_note_signature = 9,
-	ACT_x509_note_subject = 10,
-	ACT_x509_note_tbs_certificate = 11,
-	ACT_x509_process_extension = 12,
-	NR__x509_actions = 13,
-};
-
-enum x509_akid_actions {
-	ACT_x509_akid_note_kid = 0,
-	ACT_x509_akid_note_name = 1,
-	ACT_x509_akid_note_serial = 2,
-	ACT_x509_extract_name_segment___2 = 3,
-	ACT_x509_note_OID___2 = 4,
-	NR__x509_akid_actions = 5,
-};
-
-struct x509_certificate {
-	struct x509_certificate *next;
-	struct x509_certificate *signer;
-	struct public_key *pub;
-	struct public_key_signature *sig;
-	char *issuer;
-	char *subject;
-	struct asymmetric_key_id *id;
-	struct asymmetric_key_id *skid;
-	time64_t valid_from;
-	time64_t valid_to;
-	const void *tbs;
-	unsigned int tbs_size;
-	unsigned int raw_sig_size;
-	const void *raw_sig;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_subject;
-	unsigned int raw_subject_size;
-	unsigned int raw_skid_size;
-	const void *raw_skid;
-	unsigned int index;
-	bool seen;
-	bool verified;
-	bool self_signed;
-	bool unsupported_key;
-	bool unsupported_sig;
-	bool blacklisted;
-};
-
-struct x509_parse_context {
-	struct x509_certificate *cert;
-	long unsigned int data;
-	const void *cert_start;
-	const void *key;
-	size_t key_size;
-	const void *params;
-	size_t params_size;
-	enum OID key_algo;
-	enum OID last_oid;
-	enum OID algo_oid;
-	unsigned char nr_mpi;
-	u8 o_size;
-	u8 cn_size;
-	u8 email_size;
-	u16 o_offset;
-	u16 cn_offset;
-	u16 email_offset;
-	unsigned int raw_akid_size;
-	const void *raw_akid;
-	const void *akid_raw_issuer;
-	unsigned int akid_raw_issuer_size;
-};
-
-enum pkcs7_actions {
-	ACT_pkcs7_check_content_type = 0,
-	ACT_pkcs7_extract_cert = 1,
-	ACT_pkcs7_note_OID = 2,
-	ACT_pkcs7_note_certificate_list = 3,
-	ACT_pkcs7_note_content = 4,
-	ACT_pkcs7_note_data = 5,
-	ACT_pkcs7_note_signed_info = 6,
-	ACT_pkcs7_note_signeddata_version = 7,
-	ACT_pkcs7_note_signerinfo_version = 8,
-	ACT_pkcs7_sig_note_authenticated_attr = 9,
-	ACT_pkcs7_sig_note_digest_algo = 10,
-	ACT_pkcs7_sig_note_issuer = 11,
-	ACT_pkcs7_sig_note_pkey_algo = 12,
-	ACT_pkcs7_sig_note_serial = 13,
-	ACT_pkcs7_sig_note_set_of_authattrs = 14,
-	ACT_pkcs7_sig_note_signature = 15,
-	ACT_pkcs7_sig_note_skid = 16,
-	NR__pkcs7_actions = 17,
-};
-
-struct pkcs7_signed_info {
-	struct pkcs7_signed_info *next;
-	struct x509_certificate *signer;
-	unsigned int index;
-	bool unsupported_crypto;
-	bool blacklisted;
-	const void *msgdigest;
-	unsigned int msgdigest_len;
-	unsigned int authattrs_len;
-	const void *authattrs;
-	long unsigned int aa_set;
-	time64_t signing_time;
-	struct public_key_signature *sig;
-};
-
-struct pkcs7_message___2 {
-	struct x509_certificate *certs;
-	struct x509_certificate *crl;
-	struct pkcs7_signed_info *signed_infos;
-	u8 version;
-	bool have_authattrs;
-	enum OID data_type;
-	size_t data_len;
-	size_t data_hdrlen;
-	const void *data;
-};
-
-struct pkcs7_parse_context {
-	struct pkcs7_message___2 *msg;
-	struct pkcs7_signed_info *sinfo;
-	struct pkcs7_signed_info **ppsinfo;
-	struct x509_certificate *certs;
-	struct x509_certificate **ppcerts;
-	long unsigned int data;
-	enum OID last_oid;
-	unsigned int x509_index;
-	unsigned int sinfo_index;
-	const void *raw_serial;
-	unsigned int raw_serial_size;
-	unsigned int raw_issuer_size;
-	const void *raw_issuer;
-	const void *raw_skid;
-	unsigned int raw_skid_size;
-	bool expect_skid;
-};
-
-enum hash_algo {
-	HASH_ALGO_MD4 = 0,
-	HASH_ALGO_MD5 = 1,
-	HASH_ALGO_SHA1 = 2,
-	HASH_ALGO_RIPE_MD_160 = 3,
-	HASH_ALGO_SHA256 = 4,
-	HASH_ALGO_SHA384 = 5,
-	HASH_ALGO_SHA512 = 6,
-	HASH_ALGO_SHA224 = 7,
-	HASH_ALGO_RIPE_MD_128 = 8,
-	HASH_ALGO_RIPE_MD_256 = 9,
-	HASH_ALGO_RIPE_MD_320 = 10,
-	HASH_ALGO_WP_256 = 11,
-	HASH_ALGO_WP_384 = 12,
-	HASH_ALGO_WP_512 = 13,
-	HASH_ALGO_TGR_128 = 14,
-	HASH_ALGO_TGR_160 = 15,
-	HASH_ALGO_TGR_192 = 16,
-	HASH_ALGO_SM3_256 = 17,
-	HASH_ALGO_STREEBOG_256 = 18,
-	HASH_ALGO_STREEBOG_512 = 19,
-	HASH_ALGO__LAST = 20,
-};
-
-struct biovec_slab {
-	int nr_vecs;
-	char *name;
-	struct kmem_cache *slab;
-};
-
-enum rq_qos_id {
-	RQ_QOS_WBT = 0,
-	RQ_QOS_LATENCY = 1,
-	RQ_QOS_COST = 2,
-};
-
-struct rq_qos_ops;
-
-struct rq_qos {
-	struct rq_qos_ops *ops;
-	struct request_queue *q;
-	enum rq_qos_id id;
-	struct rq_qos *next;
-	struct dentry *debugfs_dir;
-};
-
-struct rq_map_data {
-	struct page **pages;
-	int page_order;
-	int nr_entries;
-	long unsigned int offset;
-	int null_mapped;
-	int from_user;
-};
-
-enum hctx_type {
-	HCTX_TYPE_DEFAULT = 0,
-	HCTX_TYPE_READ = 1,
-	HCTX_TYPE_POLL = 2,
-	HCTX_MAX_TYPES = 3,
-};
-
-struct rq_qos_ops {
-	void (*throttle)(struct rq_qos *, struct bio *);
-	void (*track)(struct rq_qos *, struct request *, struct bio *);
-	void (*merge)(struct rq_qos *, struct request *, struct bio *);
-	void (*issue)(struct rq_qos *, struct request *);
-	void (*requeue)(struct rq_qos *, struct request *);
-	void (*done)(struct rq_qos *, struct request *);
-	void (*done_bio)(struct rq_qos *, struct bio *);
-	void (*cleanup)(struct rq_qos *, struct bio *);
-	void (*queue_depth_changed)(struct rq_qos *);
-	void (*exit)(struct rq_qos *);
-	const struct blk_mq_debugfs_attr *debugfs_attrs;
-};
-
-struct bio_slab {
-	struct kmem_cache *slab;
-	unsigned int slab_ref;
-	unsigned int slab_size;
-	char name[8];
-};
-
-struct bio_map_data {
-	int is_our_pages;
-	struct iov_iter iter;
-	struct iovec iov[0];
-};
-
-enum {
-	BLK_MQ_F_SHOULD_MERGE = 1,
-	BLK_MQ_F_TAG_SHARED = 2,
-	BLK_MQ_F_BLOCKING = 32,
-	BLK_MQ_F_NO_SCHED = 64,
-	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
-	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
-	BLK_MQ_S_STOPPED = 0,
-	BLK_MQ_S_TAG_ACTIVE = 1,
-	BLK_MQ_S_SCHED_RESTART = 2,
-	BLK_MQ_MAX_DEPTH = 10240,
-	BLK_MQ_CPU_WORK_BATCH = 8,
-};
-
-enum {
-	WBT_RWQ_BG = 0,
-	WBT_RWQ_KSWAPD = 1,
-	WBT_RWQ_DISCARD = 2,
-	WBT_NUM_RWQ = 3,
-};
-
-struct blk_plug_cb;
-
-typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
-
-struct blk_plug_cb {
-	struct list_head list;
-	blk_plug_cb_fn callback;
-	void *data;
-};
-
-enum {
-	BLK_MQ_REQ_NOWAIT = 1,
-	BLK_MQ_REQ_RESERVED = 2,
-	BLK_MQ_REQ_INTERNAL = 4,
-	BLK_MQ_REQ_PREEMPT = 8,
-};
-
-struct blk_integrity_profile;
-
-struct trace_event_raw_block_buffer {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_requeue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	unsigned int bytes;
-	char rwbs[8];
-	char comm[16];
-	u32 __data_loc_cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_bounce {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_complete {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	int error;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_merge {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_queue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_get_rq {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_plug {
-	struct trace_entry ent;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_unplug {
-	struct trace_entry ent;
-	int nr_rq;
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_split {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	sector_t new_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_raw_block_rq_remap {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	dev_t old_dev;
-	sector_t old_sector;
-	unsigned int nr_bios;
-	char rwbs[8];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_block_buffer {};
-
-struct trace_event_data_offsets_block_rq_requeue {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq_complete {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_rq {
-	u32 cmd;
-};
-
-struct trace_event_data_offsets_block_bio_bounce {};
-
-struct trace_event_data_offsets_block_bio_complete {};
-
-struct trace_event_data_offsets_block_bio_merge {};
-
-struct trace_event_data_offsets_block_bio_queue {};
-
-struct trace_event_data_offsets_block_get_rq {};
-
-struct trace_event_data_offsets_block_plug {};
-
-struct trace_event_data_offsets_block_unplug {};
-
-struct trace_event_data_offsets_block_split {};
-
-struct trace_event_data_offsets_block_bio_remap {};
-
-struct trace_event_data_offsets_block_rq_remap {};
-
-typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
-
-typedef void (*btf_trace_block_rq_requeue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);
-
-typedef void (*btf_trace_block_rq_insert)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_rq_issue)(void *, struct request_queue *, struct request *);
-
-typedef void (*btf_trace_block_bio_bounce)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_bio_backmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_frontmerge)(void *, struct request_queue *, struct request *, struct bio *);
-
-typedef void (*btf_trace_block_bio_queue)(void *, struct request_queue *, struct bio *);
-
-typedef void (*btf_trace_block_getrq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_sleeprq)(void *, struct request_queue *, struct bio *, int);
-
-typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
-
-typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
-
-typedef void (*btf_trace_block_split)(void *, struct request_queue *, struct bio *, unsigned int);
-
-typedef void (*btf_trace_block_bio_remap)(void *, struct request_queue *, struct bio *, dev_t, sector_t);
-
-typedef void (*btf_trace_block_rq_remap)(void *, struct request_queue *, struct request *, dev_t, sector_t);
-
-struct queue_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct request_queue *, char *);
-	ssize_t (*store)(struct request_queue *, const char *, size_t);
-};
-
-enum {
-	REQ_FSEQ_PREFLUSH = 1,
-	REQ_FSEQ_DATA = 2,
-	REQ_FSEQ_POSTFLUSH = 4,
-	REQ_FSEQ_DONE = 8,
-	REQ_FSEQ_ACTIONS = 7,
-	FLUSH_PENDING_TIMEOUT = 5000,
-};
-
-enum blk_default_limits {
-	BLK_MAX_SEGMENTS = 128,
-	BLK_SAFE_MAX_SECTORS = 255,
-	BLK_DEF_MAX_SECTORS = 2560,
-	BLK_MAX_SEGMENT_SIZE = 65536,
-	BLK_SEG_BOUNDARY_MASK = 4294967295,
-};
-
-enum {
-	ICQ_EXITED = 4,
-};
-
-enum {
-	sysctl_hung_task_timeout_secs = 0,
-};
-
-struct req_iterator {
-	struct bvec_iter iter;
-	struct bio *bio;
-};
-
-typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
-
-enum {
-	BLK_MQ_UNIQUE_TAG_BITS = 16,
-	BLK_MQ_UNIQUE_TAG_MASK = 65535,
-};
-
-enum {
-	BLK_MQ_TAG_FAIL = 4294967295,
-	BLK_MQ_TAG_MIN = 1,
-	BLK_MQ_TAG_MAX = 4294967294,
-};
-
-struct mq_inflight {
-	struct hd_struct *part;
-	unsigned int inflight[2];
-};
-
-struct flush_busy_ctx_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct list_head *list;
-};
-
-struct dispatch_rq_data {
-	struct blk_mq_hw_ctx *hctx;
-	struct request *rq;
-};
-
-struct blk_mq_qe_pair {
-	struct list_head node;
-	struct request_queue *q;
-	struct elevator_type *type;
-};
-
-struct sbq_wait {
-	struct sbitmap_queue *sbq;
-	struct wait_queue_entry wait;
-};
-
-typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);
-
-typedef bool busy_tag_iter_fn(struct request *, void *, bool);
-
-struct bt_iter_data {
-	struct blk_mq_hw_ctx *hctx;
-	busy_iter_fn *fn;
-	void *data;
-	bool reserved;
-};
-
-struct bt_tags_iter_data {
-	struct blk_mq_tags *tags;
-	busy_tag_iter_fn *fn;
-	void *data;
-	bool reserved;
-};
-
-struct blk_queue_stats {
-	struct list_head callbacks;
-	spinlock_t lock;
-	bool enable_accounting;
-};
-
-struct blk_mq_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);
-};
-
-struct blk_mq_hw_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);
-};
-
-struct disk_part_iter {
-	struct gendisk *disk;
-	struct hd_struct *part;
-	int idx;
-	unsigned int flags;
-};
-
-struct hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	long unsigned int start;
-};
-
-struct blkpg_ioctl_arg {
-	int op;
-	int flags;
-	int datalen;
-	void *data;
-};
-
-struct blkpg_partition {
-	long long int start;
-	long long int length;
-	int pno;
-	char devname[64];
-	char volname[64];
-};
-
-struct pr_reservation {
-	__u64 key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_registration {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct pr_preempt {
-	__u64 old_key;
-	__u64 new_key;
-	__u32 type;
-	__u32 flags;
-};
-
-struct pr_clear {
-	__u64 key;
-	__u32 flags;
-	__u32 __pad;
-};
-
-struct klist_node;
-
-struct klist {
-	spinlock_t k_lock;
-	struct list_head k_list;
-	void (*get)(struct klist_node *);
-	void (*put)(struct klist_node *);
-};
-
-struct klist_node {
-	void *n_klist;
-	struct list_head n_node;
-	struct kref n_ref;
-};
-
-struct klist_iter {
-	struct klist *i_klist;
-	struct klist_node *i_cur;
-};
-
-struct class_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-enum {
-	DISK_EVENT_FLAG_POLL = 1,
-	DISK_EVENT_FLAG_UEVENT = 2,
-};
-
-struct disk_events {
-	struct list_head node;
-	struct gendisk *disk;
-	spinlock_t lock;
-	struct mutex block_mutex;
-	int block;
-	unsigned int pending;
-	unsigned int clearing;
-	long int poll_msecs;
-	struct delayed_work dwork;
-};
-
-struct badblocks {
-	struct device *dev;
-	int count;
-	int unacked_exist;
-	int shift;
-	u64 *page;
-	int changed;
-	seqlock_t lock;
-	sector_t sector;
-	sector_t size;
-};
-
-struct blk_major_name {
-	struct blk_major_name *next;
-	int major;
-	char name[16];
-};
-
-typedef struct {
-	struct page *v;
-} Sector;
-
-struct parsed_partitions {
-	struct block_device *bdev;
-	char name[32];
-	struct {
-		sector_t from;
-		sector_t size;
-		int flags;
-		bool has_info;
-		struct partition_meta_info info;
-	} *parts;
-	int next;
-	int limit;
-	bool access_beyond_eod;
-	char *pp_buf;
-};
-
-enum {
-	IOPRIO_WHO_PROCESS = 1,
-	IOPRIO_WHO_PGRP = 2,
-	IOPRIO_WHO_USER = 3,
-};
-
-enum {
-	DOS_EXTENDED_PARTITION = 5,
-	LINUX_EXTENDED_PARTITION = 133,
-	WIN98_EXTENDED_PARTITION = 15,
-	SUN_WHOLE_DISK = 5,
-	LINUX_SWAP_PARTITION = 130,
-	LINUX_DATA_PARTITION = 131,
-	LINUX_LVM_PARTITION = 142,
-	LINUX_RAID_PARTITION = 253,
-	SOLARIS_X86_PARTITION = 130,
-	NEW_SOLARIS_X86_PARTITION = 191,
-	DM6_AUX1PARTITION = 81,
-	DM6_AUX3PARTITION = 83,
-	DM6_PARTITION = 84,
-	EZD_PARTITION = 85,
-	FREEBSD_PARTITION = 165,
-	OPENBSD_PARTITION = 166,
-	NETBSD_PARTITION = 169,
-	BSDI_PARTITION = 183,
-	MINIX_PARTITION = 129,
-	UNIXWARE_PARTITION = 99,
-};
-
-struct partition {
-	unsigned char boot_ind;
-	unsigned char head;
-	unsigned char sector;
-	unsigned char cyl;
-	unsigned char sys_ind;
-	unsigned char end_head;
-	unsigned char end_sector;
-	unsigned char end_cyl;
-	__le32 start_sect;
-	__le32 nr_sects;
-};
-
-struct _gpt_header {
-	__le64 signature;
-	__le32 revision;
-	__le32 header_size;
-	__le32 header_crc32;
-	__le32 reserved1;
-	__le64 my_lba;
-	__le64 alternate_lba;
-	__le64 first_usable_lba;
-	__le64 last_usable_lba;
-	efi_guid_t disk_guid;
-	__le64 partition_entry_lba;
-	__le32 num_partition_entries;
-	__le32 sizeof_partition_entry;
-	__le32 partition_entry_array_crc32;
-} __attribute__((packed));
-
-typedef struct _gpt_header gpt_header;
-
-struct _gpt_entry_attributes {
-	u64 required_to_function: 1;
-	u64 reserved: 47;
-	u64 type_guid_specific: 16;
-};
-
-typedef struct _gpt_entry_attributes gpt_entry_attributes;
-
-struct _gpt_entry {
-	efi_guid_t partition_type_guid;
-	efi_guid_t unique_partition_guid;
-	__le64 starting_lba;
-	__le64 ending_lba;
-	gpt_entry_attributes attributes;
-	efi_char16_t partition_name[36];
-};
-
-typedef struct _gpt_entry gpt_entry;
-
-struct _gpt_mbr_record {
-	u8 boot_indicator;
-	u8 start_head;
-	u8 start_sector;
-	u8 start_track;
-	u8 os_type;
-	u8 end_head;
-	u8 end_sector;
-	u8 end_track;
-	__le32 starting_lba;
-	__le32 size_in_lba;
-};
-
-typedef struct _gpt_mbr_record gpt_mbr_record;
-
-struct _legacy_mbr {
-	u8 boot_code[440];
-	__le32 unique_mbr_signature;
-	__le16 unknown;
-	gpt_mbr_record partition_record[4];
-	__le16 signature;
-} __attribute__((packed));
-
-typedef struct _legacy_mbr legacy_mbr;
-
-struct rq_wait {
-	wait_queue_head_t wait;
-	atomic_t inflight;
-};
-
-struct rq_depth {
-	unsigned int max_depth;
-	int scale_step;
-	bool scaled_max;
-	unsigned int queue_depth;
-	unsigned int default_depth;
-};
-
-typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
-
-typedef void cleanup_cb_t(struct rq_wait *, void *);
-
-struct rq_qos_wait_data {
-	struct wait_queue_entry wq;
-	struct task_struct *task;
-	struct rq_wait *rqw;
-	acquire_inflight_cb_t *cb;
-	void *private_data;
-	bool got_token;
-};
-
-struct request_sense;
-
-struct cdrom_generic_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct request_sense *sense;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct request_sense {
-	__u8 error_code: 7;
-	__u8 valid: 1;
-	__u8 segment_number;
-	__u8 sense_key: 4;
-	__u8 reserved2: 1;
-	__u8 ili: 1;
-	__u8 reserved1: 2;
-	__u8 information[4];
-	__u8 add_sense_len;
-	__u8 command_info[4];
-	__u8 asc;
-	__u8 ascq;
-	__u8 fruc;
-	__u8 sks[3];
-	__u8 asb[46];
-};
-
-struct scsi_ioctl_command {
-	unsigned int inlen;
-	unsigned int outlen;
-	unsigned char data[0];
-};
-
-enum scsi_device_event {
-	SDEV_EVT_MEDIA_CHANGE = 1,
-	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
-	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
-	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
-	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
-	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
-	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
-	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
-	SDEV_EVT_FIRST = 1,
-	SDEV_EVT_LAST = 8,
-	SDEV_EVT_MAXBITS = 9,
-};
-
-struct scsi_request {
-	unsigned char __cmd[16];
-	unsigned char *cmd;
-	short unsigned int cmd_len;
-	int result;
-	unsigned int sense_len;
-	unsigned int resid_len;
-	int retries;
-	void *sense;
-};
-
-struct blk_cmd_filter {
-	long unsigned int read_ok[4];
-	long unsigned int write_ok[4];
-};
-
-struct sg_io_hdr {
-	int interface_id;
-	int dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	unsigned int dxfer_len;
-	void *dxferp;
-	unsigned char *cmdp;
-	void *sbp;
-	unsigned int timeout;
-	unsigned int flags;
-	int pack_id;
-	void *usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	int resid;
-	unsigned int duration;
-	unsigned int info;
-};
-
-struct compat_sg_io_hdr {
-	compat_int_t interface_id;
-	compat_int_t dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	compat_uint_t dxfer_len;
-	compat_uint_t dxferp;
-	compat_uptr_t cmdp;
-	compat_uptr_t sbp;
-	compat_uint_t timeout;
-	compat_uint_t flags;
-	compat_int_t pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	compat_int_t resid;
-	compat_uint_t duration;
-	compat_uint_t info;
-};
-
-enum {
-	OMAX_SB_LEN = 16,
-};
-
-struct bsg_device {
-	struct request_queue *queue;
-	spinlock_t lock;
-	struct hlist_node dev_list;
-	refcount_t ref_count;
-	char name[20];
-	int max_queue;
-};
-
-struct deadline_data {
-	struct rb_root sort_list[2];
-	struct list_head fifo_list[2];
-	struct request *next_rq[2];
-	unsigned int batching;
-	unsigned int starved;
-	int fifo_expire[2];
-	int fifo_batch;
-	int writes_starved;
-	int front_merges;
-	spinlock_t lock;
-	spinlock_t zone_lock;
-	struct list_head dispatch;
-};
-
-struct trace_event_raw_kyber_latency {
-	struct trace_entry ent;
-	dev_t dev;
-	char domain[16];
-	char type[8];
-	u8 percentile;
-	u8 numerator;
-	u8 denominator;
-	unsigned int samples;
-	char __data[0];
-};
-
-struct trace_event_raw_kyber_adjust {
-	struct trace_entry ent;
-	dev_t dev;
-	char domain[16];
-	unsigned int depth;
-	char __data[0];
-};
-
-struct trace_event_raw_kyber_throttled {
-	struct trace_entry ent;
-	dev_t dev;
-	char domain[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kyber_latency {};
-
-struct trace_event_data_offsets_kyber_adjust {};
-
-struct trace_event_data_offsets_kyber_throttled {};
-
-typedef void (*btf_trace_kyber_latency)(void *, struct request_queue *, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
-
-typedef void (*btf_trace_kyber_adjust)(void *, struct request_queue *, const char *, unsigned int);
-
-typedef void (*btf_trace_kyber_throttled)(void *, struct request_queue *, const char *);
-
-enum {
-	KYBER_READ = 0,
-	KYBER_WRITE = 1,
-	KYBER_DISCARD = 2,
-	KYBER_OTHER = 3,
-	KYBER_NUM_DOMAINS = 4,
-};
-
-enum {
-	KYBER_ASYNC_PERCENT = 75,
-};
-
-enum {
-	KYBER_LATENCY_SHIFT = 2,
-	KYBER_GOOD_BUCKETS = 4,
-	KYBER_LATENCY_BUCKETS = 8,
-};
-
-enum {
-	KYBER_TOTAL_LATENCY = 0,
-	KYBER_IO_LATENCY = 1,
-};
-
-struct kyber_cpu_latency {
-	atomic_t buckets[48];
-};
-
-struct kyber_ctx_queue {
-	spinlock_t lock;
-	struct list_head rq_list[4];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct kyber_queue_data {
-	struct request_queue *q;
-	struct sbitmap_queue domain_tokens[4];
-	unsigned int async_depth;
-	struct kyber_cpu_latency *cpu_latency;
-	struct timer_list timer;
-	unsigned int latency_buckets[48];
-	long unsigned int latency_timeout[3];
-	int domain_p99[3];
-	u64 latency_targets[3];
-};
-
-struct kyber_hctx_data {
-	spinlock_t lock;
-	struct list_head rqs[4];
-	unsigned int cur_domain;
-	unsigned int batching;
-	struct kyber_ctx_queue *kcqs;
-	struct sbitmap kcq_map[4];
-	struct sbq_wait domain_wait[4];
-	struct sbq_wait_state *domain_ws[4];
-	atomic_t wait_index[4];
-};
-
-struct flush_kcq_data {
-	struct kyber_hctx_data *khd;
-	unsigned int sched_domain;
-	struct list_head *list;
-};
-
-typedef u32 compat_caddr_t;
-
-struct cdrom_read_audio {
-	union cdrom_addr addr;
-	__u8 addr_format;
-	int nframes;
-	__u8 *buf;
-};
-
-struct compat_hd_geometry {
-	unsigned char heads;
-	unsigned char sectors;
-	short unsigned int cylinders;
-	u32 start;
-};
-
-struct compat_cdrom_read_audio {
-	union cdrom_addr addr;
-	u8 addr_format;
-	compat_int_t nframes;
-	compat_caddr_t buf;
-};
-
-struct compat_cdrom_generic_command {
-	unsigned char cmd[12];
-	compat_caddr_t buffer;
-	compat_uint_t buflen;
-	compat_int_t stat;
-	compat_caddr_t sense;
-	unsigned char data_direction;
-	compat_int_t quiet;
-	compat_int_t timeout;
-	compat_caddr_t reserved[1];
-};
-
-struct compat_blkpg_ioctl_arg {
-	compat_int_t op;
-	compat_int_t flags;
-	compat_int_t datalen;
-	compat_caddr_t data;
-};
-
-struct show_busy_params {
-	struct seq_file *m;
-	struct blk_mq_hw_ctx *hctx;
-};
-
-typedef void (*swap_func_t)(void *, void *, int);
-
-typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
-
-typedef __kernel_long_t __kernel_ptrdiff_t;
-
-typedef __kernel_ptrdiff_t ptrdiff_t;
-
-struct region {
-	unsigned int start;
-	unsigned int off;
-	unsigned int group_len;
-	unsigned int end;
-};
-
-enum {
-	REG_OP_ISFREE = 0,
-	REG_OP_ALLOC = 1,
-	REG_OP_RELEASE = 2,
-};
-
-typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
-
-typedef void sg_free_fn(struct scatterlist *, unsigned int);
-
-struct sg_page_iter {
-	struct scatterlist *sg;
-	unsigned int sg_pgoffset;
-	unsigned int __nents;
-	int __pg_advance;
-};
-
-struct sg_dma_page_iter {
-	struct sg_page_iter base;
-};
-
-struct sg_mapping_iter {
-	struct page *page;
-	void *addr;
-	size_t length;
-	size_t consumed;
-	struct sg_page_iter piter;
-	unsigned int __offset;
-	unsigned int __remaining;
-	unsigned int __flags;
-};
-
-typedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);
-
-struct __kfifo {
-	unsigned int in;
-	unsigned int out;
-	unsigned int mask;
-	unsigned int esize;
-	void *data;
-};
-
-struct rhashtable_walker {
-	struct list_head list;
-	struct bucket_table *tbl;
-};
-
-struct rhashtable_iter {
-	struct rhashtable *ht;
-	struct rhash_head *p;
-	struct rhlist_head *list;
-	struct rhashtable_walker walker;
-	unsigned int slot;
-	unsigned int skip;
-	bool end_of_table;
-};
-
-union nested_table {
-	union nested_table *table;
-	struct rhash_lock_head *bucket;
-};
-
-struct once_work {
-	struct work_struct work;
-	struct static_key_true *key;
-};
-
-struct genradix_iter {
-	size_t offset;
-	size_t pos;
-};
-
-struct genradix_node {
-	union {
-		struct genradix_node *children[512];
-		u8 data[4096];
-	};
-};
-
-struct reciprocal_value {
-	u32 m;
-	u8 sh1;
-	u8 sh2;
-};
-
-struct reciprocal_value_adv {
-	u32 m;
-	u8 sh;
-	u8 exp;
-	bool is_wide_m;
-};
-
-struct arc4_ctx {
-	u32 S[256];
-	u32 x;
-	u32 y;
-};
-
-enum devm_ioremap_type {
-	DEVM_IOREMAP = 0,
-	DEVM_IOREMAP_NC = 1,
-	DEVM_IOREMAP_UC = 2,
-	DEVM_IOREMAP_WC = 3,
-};
-
-struct pcim_iomap_devres {
-	void *table[6];
-};
-
-enum assoc_array_walk_status {
-	assoc_array_walk_tree_empty = 0,
-	assoc_array_walk_found_terminal_node = 1,
-	assoc_array_walk_found_wrong_shortcut = 2,
-};
-
-struct assoc_array_walk_result {
-	struct {
-		struct assoc_array_node *node;
-		int level;
-		int slot;
-	} terminal_node;
-	struct {
-		struct assoc_array_shortcut *shortcut;
-		int level;
-		int sc_level;
-		long unsigned int sc_segments;
-		long unsigned int dissimilarity;
-	} wrong_shortcut;
-};
-
-struct assoc_array_delete_collapse_context {
-	struct assoc_array_node *node;
-	const void *skip_leaf;
-	int slot;
-};
-
-struct gen_pool_chunk {
-	struct list_head next_chunk;
-	atomic_long_t avail;
-	phys_addr_t phys_addr;
-	void *owner;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	long unsigned int bits[0];
-};
-
-struct genpool_data_align {
-	int align;
-};
-
-struct genpool_data_fixed {
-	long unsigned int offset;
-};
-
-typedef z_stream *z_streamp;
-
-typedef struct {
-	unsigned char op;
-	unsigned char bits;
-	short unsigned int val;
-} code;
-
-typedef enum {
-	HEAD = 0,
-	FLAGS = 1,
-	TIME = 2,
-	OS = 3,
-	EXLEN = 4,
-	EXTRA = 5,
-	NAME = 6,
-	COMMENT = 7,
-	HCRC = 8,
-	DICTID = 9,
-	DICT = 10,
-	TYPE = 11,
-	TYPEDO = 12,
-	STORED = 13,
-	COPY = 14,
-	TABLE = 15,
-	LENLENS = 16,
-	CODELENS = 17,
-	LEN = 18,
-	LENEXT = 19,
-	DIST = 20,
-	DISTEXT = 21,
-	MATCH = 22,
-	LIT = 23,
-	CHECK = 24,
-	LENGTH = 25,
-	DONE = 26,
-	BAD = 27,
-	MEM = 28,
-	SYNC = 29,
-} inflate_mode;
-
-struct inflate_state {
-	inflate_mode mode;
-	int last;
-	int wrap;
-	int havedict;
-	int flags;
-	unsigned int dmax;
-	long unsigned int check;
-	long unsigned int total;
-	unsigned int wbits;
-	unsigned int wsize;
-	unsigned int whave;
-	unsigned int write;
-	unsigned char *window;
-	long unsigned int hold;
-	unsigned int bits;
-	unsigned int length;
-	unsigned int offset;
-	unsigned int extra;
-	const code *lencode;
-	const code *distcode;
-	unsigned int lenbits;
-	unsigned int distbits;
-	unsigned int ncode;
-	unsigned int nlen;
-	unsigned int ndist;
-	unsigned int have;
-	code *next;
-	short unsigned int lens[320];
-	short unsigned int work[288];
-	code codes[2048];
-};
-
-union uu {
-	short unsigned int us;
-	unsigned char b[2];
-};
-
-typedef unsigned int uInt;
-
-struct inflate_workspace {
-	struct inflate_state inflate_state;
-	unsigned char working_window[32768];
-};
-
-typedef enum {
-	CODES = 0,
-	LENS = 1,
-	DISTS = 2,
-} codetype;
-
-typedef unsigned char uch;
-
-typedef short unsigned int ush;
-
-typedef long unsigned int ulg;
-
-struct ct_data_s {
-	union {
-		ush freq;
-		ush code;
-	} fc;
-	union {
-		ush dad;
-		ush len;
-	} dl;
-};
-
-typedef struct ct_data_s ct_data;
-
-struct static_tree_desc_s {
-	const ct_data *static_tree;
-	const int *extra_bits;
-	int extra_base;
-	int elems;
-	int max_length;
-};
-
-typedef struct static_tree_desc_s static_tree_desc;
-
-struct tree_desc_s {
-	ct_data *dyn_tree;
-	int max_code;
-	static_tree_desc *stat_desc;
-};
-
-typedef ush Pos;
-
-typedef unsigned int IPos;
-
-struct deflate_state {
-	z_streamp strm;
-	int status;
-	Byte *pending_buf;
-	ulg pending_buf_size;
-	Byte *pending_out;
-	int pending;
-	int noheader;
-	Byte data_type;
-	Byte method;
-	int last_flush;
-	uInt w_size;
-	uInt w_bits;
-	uInt w_mask;
-	Byte *window;
-	ulg window_size;
-	Pos *prev;
-	Pos *head;
-	uInt ins_h;
-	uInt hash_size;
-	uInt hash_bits;
-	uInt hash_mask;
-	uInt hash_shift;
-	long int block_start;
-	uInt match_length;
-	IPos prev_match;
-	int match_available;
-	uInt strstart;
-	uInt match_start;
-	uInt lookahead;
-	uInt prev_length;
-	uInt max_chain_length;
-	uInt max_lazy_match;
-	int level;
-	int strategy;
-	uInt good_match;
-	int nice_match;
-	struct ct_data_s dyn_ltree[573];
-	struct ct_data_s dyn_dtree[61];
-	struct ct_data_s bl_tree[39];
-	struct tree_desc_s l_desc;
-	struct tree_desc_s d_desc;
-	struct tree_desc_s bl_desc;
-	ush bl_count[16];
-	int heap[573];
-	int heap_len;
-	int heap_max;
-	uch depth[573];
-	uch *l_buf;
-	uInt lit_bufsize;
-	uInt last_lit;
-	ush *d_buf;
-	ulg opt_len;
-	ulg static_len;
-	ulg compressed_len;
-	uInt matches;
-	int last_eob_len;
-	ush bi_buf;
-	int bi_valid;
-};
-
-typedef struct deflate_state deflate_state;
-
-struct deflate_workspace {
-	deflate_state deflate_memory;
-	Byte *window_memory;
-	Pos *prev_memory;
-	Pos *head_memory;
-	char *overlay_memory;
-};
-
-typedef struct deflate_workspace deflate_workspace;
-
-typedef enum {
-	need_more = 0,
-	block_done = 1,
-	finish_started = 2,
-	finish_done = 3,
-} block_state;
-
-typedef block_state (*compress_func)(deflate_state *, int);
-
-struct config_s {
-	ush good_length;
-	ush max_lazy;
-	ush nice_length;
-	ush max_chain;
-	compress_func func;
-};
-
-typedef struct config_s config;
-
-typedef struct tree_desc_s tree_desc;
-
-typedef struct {
-	const uint8_t *externalDict;
-	size_t extDictSize;
-	const uint8_t *prefixEnd;
-	size_t prefixSize;
-} LZ4_streamDecode_t_internal;
-
-typedef union {
-	long long unsigned int table[4];
-	LZ4_streamDecode_t_internal internal_donotuse;
-} LZ4_streamDecode_t;
-
-typedef uint8_t BYTE;
-
-typedef uint16_t U16;
-
-typedef uint32_t U32;
-
-typedef uint64_t U64;
-
-typedef uintptr_t uptrval;
-
-typedef enum {
-	noDict = 0,
-	withPrefix64k = 1,
-	usingExtDict = 2,
-} dict_directive;
-
-typedef enum {
-	endOnOutputSize = 0,
-	endOnInputSize = 1,
-} endCondition_directive;
-
-typedef enum {
-	decode_full_block = 0,
-	partial_decode = 1,
-} earlyEnd_directive;
-
-enum xz_mode {
-	XZ_SINGLE = 0,
-	XZ_PREALLOC = 1,
-	XZ_DYNALLOC = 2,
-};
-
-enum xz_ret {
-	XZ_OK = 0,
-	XZ_STREAM_END = 1,
-	XZ_UNSUPPORTED_CHECK = 2,
-	XZ_MEM_ERROR = 3,
-	XZ_MEMLIMIT_ERROR = 4,
-	XZ_FORMAT_ERROR = 5,
-	XZ_OPTIONS_ERROR = 6,
-	XZ_DATA_ERROR = 7,
-	XZ_BUF_ERROR = 8,
-};
-
-struct xz_buf {
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_size;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-};
-
-typedef uint64_t vli_type;
-
-enum xz_check {
-	XZ_CHECK_NONE = 0,
-	XZ_CHECK_CRC32 = 1,
-	XZ_CHECK_CRC64 = 4,
-	XZ_CHECK_SHA256 = 10,
-};
-
-struct xz_dec_hash {
-	vli_type unpadded;
-	vli_type uncompressed;
-	uint32_t crc32;
-};
-
-struct xz_dec_lzma2;
-
-struct xz_dec_bcj;
-
-struct xz_dec {
-	enum {
-		SEQ_STREAM_HEADER = 0,
-		SEQ_BLOCK_START = 1,
-		SEQ_BLOCK_HEADER = 2,
-		SEQ_BLOCK_UNCOMPRESS = 3,
-		SEQ_BLOCK_PADDING = 4,
-		SEQ_BLOCK_CHECK = 5,
-		SEQ_INDEX = 6,
-		SEQ_INDEX_PADDING = 7,
-		SEQ_INDEX_CRC32 = 8,
-		SEQ_STREAM_FOOTER = 9,
-	} sequence;
-	uint32_t pos;
-	vli_type vli;
-	size_t in_start;
-	size_t out_start;
-	uint32_t crc32;
-	enum xz_check check_type;
-	enum xz_mode mode;
-	bool allow_buf_error;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		uint32_t size;
-	} block_header;
-	struct {
-		vli_type compressed;
-		vli_type uncompressed;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} block;
-	struct {
-		enum {
-			SEQ_INDEX_COUNT = 0,
-			SEQ_INDEX_UNPADDED = 1,
-			SEQ_INDEX_UNCOMPRESSED = 2,
-		} sequence;
-		vli_type size;
-		vli_type count;
-		struct xz_dec_hash hash;
-	} index;
-	struct {
-		size_t pos;
-		size_t size;
-		uint8_t buf[1024];
-	} temp;
-	struct xz_dec_lzma2 *lzma2;
-	struct xz_dec_bcj *bcj;
-	bool bcj_active;
-};
-
-enum lzma_state {
-	STATE_LIT_LIT = 0,
-	STATE_MATCH_LIT_LIT = 1,
-	STATE_REP_LIT_LIT = 2,
-	STATE_SHORTREP_LIT_LIT = 3,
-	STATE_MATCH_LIT = 4,
-	STATE_REP_LIT = 5,
-	STATE_SHORTREP_LIT = 6,
-	STATE_LIT_MATCH = 7,
-	STATE_LIT_LONGREP = 8,
-	STATE_LIT_SHORTREP = 9,
-	STATE_NONLIT_MATCH = 10,
-	STATE_NONLIT_REP = 11,
-};
-
-struct dictionary {
-	uint8_t *buf;
-	size_t start;
-	size_t pos;
-	size_t full;
-	size_t limit;
-	size_t end;
-	uint32_t size;
-	uint32_t size_max;
-	uint32_t allocated;
-	enum xz_mode mode;
-};
-
-struct rc_dec {
-	uint32_t range;
-	uint32_t code;
-	uint32_t init_bytes_left;
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_limit;
-};
-
-struct lzma_len_dec {
-	uint16_t choice;
-	uint16_t choice2;
-	uint16_t low[128];
-	uint16_t mid[128];
-	uint16_t high[256];
-};
-
-struct lzma_dec {
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-	enum lzma_state state;
-	uint32_t len;
-	uint32_t lc;
-	uint32_t literal_pos_mask;
-	uint32_t pos_mask;
-	uint16_t is_match[192];
-	uint16_t is_rep[12];
-	uint16_t is_rep0[12];
-	uint16_t is_rep1[12];
-	uint16_t is_rep2[12];
-	uint16_t is_rep0_long[192];
-	uint16_t dist_slot[256];
-	uint16_t dist_special[114];
-	uint16_t dist_align[16];
-	struct lzma_len_dec match_len_dec;
-	struct lzma_len_dec rep_len_dec;
-	uint16_t literal[12288];
-};
-
-enum lzma2_seq {
-	SEQ_CONTROL = 0,
-	SEQ_UNCOMPRESSED_1 = 1,
-	SEQ_UNCOMPRESSED_2 = 2,
-	SEQ_COMPRESSED_0 = 3,
-	SEQ_COMPRESSED_1 = 4,
-	SEQ_PROPERTIES = 5,
-	SEQ_LZMA_PREPARE = 6,
-	SEQ_LZMA_RUN = 7,
-	SEQ_COPY = 8,
-};
-
-struct lzma2_dec {
-	enum lzma2_seq sequence;
-	enum lzma2_seq next_sequence;
-	uint32_t uncompressed;
-	uint32_t compressed;
-	bool need_dict_reset;
-	bool need_props;
-};
-
-struct xz_dec_lzma2___2 {
-	struct rc_dec rc;
-	struct dictionary dict;
-	struct lzma2_dec lzma2;
-	struct lzma_dec lzma;
-	struct {
-		uint32_t size;
-		uint8_t buf[63];
-	} temp;
-};
-
-struct xz_dec_bcj___2 {
-	enum {
-		BCJ_X86 = 4,
-		BCJ_POWERPC = 5,
-		BCJ_IA64 = 6,
-		BCJ_ARM = 7,
-		BCJ_ARMTHUMB = 8,
-		BCJ_SPARC = 9,
-	} type;
-	enum xz_ret ret;
-	bool single_call;
-	uint32_t pos;
-	uint32_t x86_prev_mask;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-	struct {
-		size_t filtered;
-		size_t size;
-		uint8_t buf[16];
-	} temp;
-};
-
-typedef s32 pao_T_____8;
-
-struct ei_entry {
-	struct list_head list;
-	long unsigned int start_addr;
-	long unsigned int end_addr;
-	int etype;
-	void *priv;
-};
-
-struct nla_bitfield32 {
-	__u32 value;
-	__u32 selector;
-};
-
-enum nla_policy_validation {
-	NLA_VALIDATE_NONE = 0,
-	NLA_VALIDATE_RANGE = 1,
-	NLA_VALIDATE_MIN = 2,
-	NLA_VALIDATE_MAX = 3,
-	NLA_VALIDATE_FUNCTION = 4,
-};
-
-struct cpu_rmap {
-	struct kref refcount;
-	u16 size;
-	u16 used;
-	void **obj;
-	struct {
-		u16 index;
-		u16 dist;
-	} near[0];
-};
-
-struct irq_glue {
-	struct irq_affinity_notify notify;
-	struct cpu_rmap *rmap;
-	u16 index;
-};
-
-typedef mpi_limb_t *mpi_ptr_t;
-
-typedef int mpi_size_t;
-
-typedef mpi_limb_t UWtype;
-
-typedef unsigned int UHWtype;
-
-struct karatsuba_ctx {
-	struct karatsuba_ctx *next;
-	mpi_ptr_t tspace;
-	mpi_size_t tspace_size;
-	mpi_ptr_t tp;
-	mpi_size_t tp_size;
-};
-
-typedef long int mpi_limb_signed_t;
-
-struct sg_pool {
-	size_t size;
-	char *name;
-	struct kmem_cache *slab;
-	mempool_t *pool;
-};
-
-struct font_desc {
-	int idx;
-	const char *name;
-	int width;
-	int height;
-	const void *data;
-	int pref;
-};
-
-typedef u16 ucs2_char_t;
-
-struct msr {
-	union {
-		struct {
-			u32 l;
-			u32 h;
-		};
-		u64 q;
-	};
-};
-
-struct msr_info {
-	u32 msr_no;
-	struct msr reg;
-	struct msr *msrs;
-	int err;
-};
-
-struct msr_regs_info {
-	u32 *regs;
-	int err;
-};
-
-struct msr_info_completion {
-	struct msr_info msr;
-	struct completion done;
-};
-
-struct trace_event_raw_msr_trace_class {
-	struct trace_entry ent;
-	unsigned int msr;
-	u64 val;
-	int failed;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_msr_trace_class {};
-
-typedef void (*btf_trace_read_msr)(void *, unsigned int, u64, int);
-
-typedef void (*btf_trace_write_msr)(void *, unsigned int, u64, int);
-
-typedef void (*btf_trace_rdpmc)(void *, unsigned int, u64, int);
-
-struct pci_sriov {
-	int pos;
-	int nres;
-	u32 cap;
-	u16 ctrl;
-	u16 total_VFs;
-	u16 initial_VFs;
-	u16 num_VFs;
-	u16 offset;
-	u16 stride;
-	u16 vf_device;
-	u32 pgsz;
-	u8 link;
-	u8 max_VF_buses;
-	u16 driver_max_VFs;
-	struct pci_dev *dev;
-	struct pci_dev *self;
-	u32 class;
-	u8 hdr_type;
-	u16 subsystem_vendor;
-	u16 subsystem_device;
-	resource_size_t barsz[6];
-	bool drivers_autoprobe;
-};
-
-struct pci_bus_resource {
-	struct list_head list;
-	struct resource *res;
-	unsigned int flags;
-};
-
-typedef u64 pci_bus_addr_t;
-
-struct pci_bus_region {
-	pci_bus_addr_t start;
-	pci_bus_addr_t end;
-};
-
-enum pci_fixup_pass {
-	pci_fixup_early = 0,
-	pci_fixup_header = 1,
-	pci_fixup_final = 2,
-	pci_fixup_enable = 3,
-	pci_fixup_resume = 4,
-	pci_fixup_suspend = 5,
-	pci_fixup_resume_early = 6,
-	pci_fixup_suspend_late = 7,
-};
-
-struct hotplug_slot_ops;
-
-struct hotplug_slot {
-	const struct hotplug_slot_ops *ops;
-	struct list_head slot_list;
-	struct pci_slot *pci_slot;
-	struct module *owner;
-	const char *mod_name;
-};
-
-enum pci_dev_flags {
-	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
-	PCI_DEV_FLAGS_NO_D3 = 2,
-	PCI_DEV_FLAGS_ASSIGNED = 4,
-	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
-	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
-	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
-	PCI_DEV_FLAGS_NO_PM_RESET = 128,
-	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
-	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
-	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
-	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
-};
-
-enum pci_bus_flags {
-	PCI_BUS_FLAGS_NO_MSI = 1,
-	PCI_BUS_FLAGS_NO_MMRBC = 2,
-	PCI_BUS_FLAGS_NO_AERSID = 4,
-	PCI_BUS_FLAGS_NO_EXTCFG = 8,
-};
-
-enum pci_bus_speed {
-	PCI_SPEED_33MHz = 0,
-	PCI_SPEED_66MHz = 1,
-	PCI_SPEED_66MHz_PCIX = 2,
-	PCI_SPEED_100MHz_PCIX = 3,
-	PCI_SPEED_133MHz_PCIX = 4,
-	PCI_SPEED_66MHz_PCIX_ECC = 5,
-	PCI_SPEED_100MHz_PCIX_ECC = 6,
-	PCI_SPEED_133MHz_PCIX_ECC = 7,
-	PCI_SPEED_66MHz_PCIX_266 = 9,
-	PCI_SPEED_100MHz_PCIX_266 = 10,
-	PCI_SPEED_133MHz_PCIX_266 = 11,
-	AGP_UNKNOWN = 12,
-	AGP_1X = 13,
-	AGP_2X = 14,
-	AGP_4X = 15,
-	AGP_8X = 16,
-	PCI_SPEED_66MHz_PCIX_533 = 17,
-	PCI_SPEED_100MHz_PCIX_533 = 18,
-	PCI_SPEED_133MHz_PCIX_533 = 19,
-	PCIE_SPEED_2_5GT = 20,
-	PCIE_SPEED_5_0GT = 21,
-	PCIE_SPEED_8_0GT = 22,
-	PCIE_SPEED_16_0GT = 23,
-	PCIE_SPEED_32_0GT = 24,
-	PCI_SPEED_UNKNOWN = 255,
-};
-
-struct pci_host_bridge {
-	struct device dev;
-	struct pci_bus *bus;
-	struct pci_ops *ops;
-	void *sysdata;
-	int busnr;
-	struct list_head windows;
-	struct list_head dma_ranges;
-	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
-	int (*map_irq)(const struct pci_dev *, u8, u8);
-	void (*release_fn)(struct pci_host_bridge *);
-	void *release_data;
-	struct msi_controller *msi;
-	unsigned int ignore_reset_delay: 1;
-	unsigned int no_ext_tags: 1;
-	unsigned int native_aer: 1;
-	unsigned int native_pcie_hotplug: 1;
-	unsigned int native_shpc_hotplug: 1;
-	unsigned int native_pme: 1;
-	unsigned int native_ltr: 1;
-	unsigned int preserve_config: 1;
-	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int private[0];
-};
-
-enum {
-	PCI_REASSIGN_ALL_RSRC = 1,
-	PCI_REASSIGN_ALL_BUS = 2,
-	PCI_PROBE_ONLY = 4,
-	PCI_CAN_SKIP_ISA_ALIGN = 8,
-	PCI_ENABLE_PROC_DOMAINS = 16,
-	PCI_COMPAT_DOMAIN_0 = 32,
-	PCI_SCAN_ALL_PCIE_DEVS = 64,
-};
-
-struct hotplug_slot_ops {
-	int (*enable_slot)(struct hotplug_slot *);
-	int (*disable_slot)(struct hotplug_slot *);
-	int (*set_attention_status)(struct hotplug_slot *, u8);
-	int (*hardware_test)(struct hotplug_slot *, u32);
-	int (*get_power_status)(struct hotplug_slot *, u8 *);
-	int (*get_attention_status)(struct hotplug_slot *, u8 *);
-	int (*get_latch_status)(struct hotplug_slot *, u8 *);
-	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
-	int (*reset_slot)(struct hotplug_slot *, int);
-};
-
-enum pci_bar_type {
-	pci_bar_unknown = 0,
-	pci_bar_io = 1,
-	pci_bar_mem32 = 2,
-	pci_bar_mem64 = 3,
-};
-
-struct pci_domain_busn_res {
-	struct list_head list;
-	struct resource res;
-	int domain_nr;
-};
-
-struct bus_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct bus_type *, char *);
-	ssize_t (*store)(struct bus_type *, const char *, size_t);
-};
-
-enum pcie_reset_state {
-	pcie_deassert_reset = 1,
-	pcie_warm_reset = 2,
-	pcie_hot_reset = 3,
-};
-
-enum pcie_link_width {
-	PCIE_LNK_WIDTH_RESRV = 0,
-	PCIE_LNK_X1 = 1,
-	PCIE_LNK_X2 = 2,
-	PCIE_LNK_X4 = 4,
-	PCIE_LNK_X8 = 8,
-	PCIE_LNK_X12 = 12,
-	PCIE_LNK_X16 = 16,
-	PCIE_LNK_X32 = 32,
-	PCIE_LNK_WIDTH_UNKNOWN = 255,
-};
-
-struct pci_cap_saved_data {
-	u16 cap_nr;
-	bool cap_extended;
-	unsigned int size;
-	u32 data[0];
-};
-
-struct pci_cap_saved_state {
-	struct hlist_node next;
-	struct pci_cap_saved_data cap;
-};
-
-typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
-
-struct pci_platform_pm_ops {
-	bool (*bridge_d3)(struct pci_dev *);
-	bool (*is_manageable)(struct pci_dev *);
-	int (*set_state)(struct pci_dev *, pci_power_t);
-	pci_power_t (*get_state)(struct pci_dev *);
-	void (*refresh_state)(struct pci_dev *);
-	pci_power_t (*choose_state)(struct pci_dev *);
-	int (*set_wakeup)(struct pci_dev *, bool);
-	bool (*need_resume)(struct pci_dev *);
-};
-
-struct pci_pme_device {
-	struct list_head list;
-	struct pci_dev *dev;
-};
-
-struct pci_saved_state {
-	u32 config_space[16];
-	struct pci_cap_saved_data cap[0];
-};
-
-struct pci_devres {
-	unsigned int enabled: 1;
-	unsigned int pinned: 1;
-	unsigned int orig_intx: 1;
-	unsigned int restore_intx: 1;
-	unsigned int mwi: 1;
-	u32 region_mask;
-};
-
-struct driver_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct device_driver *, char *);
-	ssize_t (*store)(struct device_driver *, const char *, size_t);
-};
-
-enum pci_ers_result {
-	PCI_ERS_RESULT_NONE = 1,
-	PCI_ERS_RESULT_CAN_RECOVER = 2,
-	PCI_ERS_RESULT_NEED_RESET = 3,
-	PCI_ERS_RESULT_DISCONNECT = 4,
-	PCI_ERS_RESULT_RECOVERED = 5,
-	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
-};
-
-struct pcie_device {
-	int irq;
-	struct pci_dev *port;
-	u32 service;
-	void *priv_data;
-	struct device device;
-};
-
-struct pcie_port_service_driver {
-	const char *name;
-	int (*probe)(struct pcie_device *);
-	void (*remove)(struct pcie_device *);
-	int (*suspend)(struct pcie_device *);
-	int (*resume_noirq)(struct pcie_device *);
-	int (*resume)(struct pcie_device *);
-	int (*runtime_suspend)(struct pcie_device *);
-	int (*runtime_resume)(struct pcie_device *);
-	void (*error_resume)(struct pci_dev *);
-	pci_ers_result_t (*reset_link)(struct pci_dev *);
-	int port_type;
-	u32 service;
-	struct device_driver driver;
-};
-
-struct pci_dynid {
-	struct list_head node;
-	struct pci_device_id id;
-};
-
-struct drv_dev_and_id {
-	struct pci_driver *drv;
-	struct pci_dev *dev;
-	const struct pci_device_id *id;
-};
-
-enum pci_mmap_state {
-	pci_mmap_io = 0,
-	pci_mmap_mem = 1,
-};
-
-enum pci_mmap_api {
-	PCI_MMAP_SYSFS = 0,
-	PCI_MMAP_PROCFS = 1,
-};
-
-enum pci_lost_interrupt_reason {
-	PCI_LOST_IRQ_NO_INFORMATION = 0,
-	PCI_LOST_IRQ_DISABLE_MSI = 1,
-	PCI_LOST_IRQ_DISABLE_MSIX = 2,
-	PCI_LOST_IRQ_DISABLE_ACPI = 3,
-};
-
-struct pci_vpd_ops;
-
-struct pci_vpd {
-	const struct pci_vpd_ops *ops;
-	struct bin_attribute *attr;
-	struct mutex lock;
-	unsigned int len;
-	u16 flag;
-	u8 cap;
-	unsigned int busy: 1;
-	unsigned int valid: 1;
-};
-
-struct pci_vpd_ops {
-	ssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);
-	ssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);
-	int (*set_size)(struct pci_dev *, size_t);
-};
-
-struct pci_dev_resource {
-	struct list_head list;
-	struct resource *res;
-	struct pci_dev *dev;
-	resource_size_t start;
-	resource_size_t end;
-	resource_size_t add_size;
-	resource_size_t min_align;
-	long unsigned int flags;
-};
-
-enum release_type {
-	leaf_only = 0,
-	whole_subtree = 1,
-};
-
-enum enable_type {
-	undefined = 4294967295,
-	user_disabled = 0,
-	auto_disabled = 1,
-	user_enabled = 2,
-	auto_enabled = 3,
-};
-
-struct portdrv_service_data {
-	struct pcie_port_service_driver *drv;
-	struct device *dev;
-	u32 service;
-};
-
-typedef int (*pcie_pm_callback_t)(struct pcie_device *);
-
-struct aspm_latency {
-	u32 l0s;
-	u32 l1;
-};
-
-struct pcie_link_state {
-	struct pci_dev *pdev;
-	struct pci_dev *downstream;
-	struct pcie_link_state *root;
-	struct pcie_link_state *parent;
-	struct list_head sibling;
-	u32 aspm_support: 7;
-	u32 aspm_enabled: 7;
-	u32 aspm_capable: 7;
-	u32 aspm_default: 7;
-	char: 4;
-	u32 aspm_disable: 7;
-	u32 clkpm_capable: 1;
-	u32 clkpm_enabled: 1;
-	u32 clkpm_default: 1;
-	u32 clkpm_disable: 1;
-	struct aspm_latency latency_up;
-	struct aspm_latency latency_dw;
-	struct aspm_latency acceptable[8];
-	struct {
-		u32 up_cap_ptr;
-		u32 dw_cap_ptr;
-		u32 ctl1;
-		u32 ctl2;
-	} l1ss;
-};
-
-struct aspm_register_info {
-	u32 support: 2;
-	u32 enabled: 2;
-	u32 latency_encoding_l0s;
-	u32 latency_encoding_l1;
-	u32 l1ss_cap_ptr;
-	u32 l1ss_cap;
-	u32 l1ss_ctl1;
-	u32 l1ss_ctl2;
-};
-
-struct aer_stats {
-	u64 dev_cor_errs[16];
-	u64 dev_fatal_errs[27];
-	u64 dev_nonfatal_errs[27];
-	u64 dev_total_cor_errs;
-	u64 dev_total_fatal_errs;
-	u64 dev_total_nonfatal_errs;
-	u64 rootport_total_cor_errs;
-	u64 rootport_total_fatal_errs;
-	u64 rootport_total_nonfatal_errs;
-};
-
-struct aer_header_log_regs {
-	unsigned int dw0;
-	unsigned int dw1;
-	unsigned int dw2;
-	unsigned int dw3;
-};
-
-struct aer_err_info {
-	struct pci_dev *dev[5];
-	int error_dev_num;
-	unsigned int id: 16;
-	unsigned int severity: 2;
-	unsigned int __pad1: 5;
-	unsigned int multi_error_valid: 1;
-	unsigned int first_error: 5;
-	unsigned int __pad2: 2;
-	unsigned int tlp_header_valid: 1;
-	unsigned int status;
-	unsigned int mask;
-	struct aer_header_log_regs tlp;
-};
-
-struct aer_err_source {
-	unsigned int status;
-	unsigned int id;
-};
-
-struct aer_rpc {
-	struct pci_dev *rpd;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct aer_err_source *type;
-			const struct aer_err_source *const_type;
-			char (*rectype)[0];
-			struct aer_err_source *ptr;
-			const struct aer_err_source *ptr_const;
-		};
-		struct aer_err_source buf[128];
-	} aer_fifo;
-};
-
-struct pcie_pme_service_data {
-	spinlock_t lock;
-	struct pcie_device *srv;
-	struct work_struct work;
-	bool noirq;
-};
-
-struct pci_filp_private {
-	enum pci_mmap_state mmap_state;
-	int write_combine;
-};
-
-struct pci_slot_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct pci_slot *, char *);
-	ssize_t (*store)(struct pci_slot *, const char *, size_t);
-};
-
-struct acpi_bus_type {
-	struct list_head list;
-	const char *name;
-	bool (*match)(struct device *);
-	struct acpi_device * (*find_companion)(struct device *);
-	void (*setup)(struct device *);
-	void (*cleanup)(struct device *);
-};
-
-struct acpi_pci_root {
-	struct acpi_device *device;
-	struct pci_bus *bus;
-	u16 segment;
-	struct resource secondary;
-	u32 osc_support_set;
-	u32 osc_control_set;
-	phys_addr_t mcfg_addr;
-};
-
-enum pm_qos_flags_status {
-	PM_QOS_FLAGS_UNDEFINED = 4294967295,
-	PM_QOS_FLAGS_NONE = 0,
-	PM_QOS_FLAGS_SOME = 1,
-	PM_QOS_FLAGS_ALL = 2,
-};
-
-struct hpx_type0 {
-	u32 revision;
-	u8 cache_line_size;
-	u8 latency_timer;
-	u8 enable_serr;
-	u8 enable_perr;
-};
-
-struct hpx_type1 {
-	u32 revision;
-	u8 max_mem_read;
-	u8 avg_max_split;
-	u16 tot_max_split;
-};
-
-struct hpx_type2 {
-	u32 revision;
-	u32 unc_err_mask_and;
-	u32 unc_err_mask_or;
-	u32 unc_err_sever_and;
-	u32 unc_err_sever_or;
-	u32 cor_err_mask_and;
-	u32 cor_err_mask_or;
-	u32 adv_err_cap_and;
-	u32 adv_err_cap_or;
-	u16 pci_exp_devctl_and;
-	u16 pci_exp_devctl_or;
-	u16 pci_exp_lnkctl_and;
-	u16 pci_exp_lnkctl_or;
-	u32 sec_unc_err_sever_and;
-	u32 sec_unc_err_sever_or;
-	u32 sec_unc_err_mask_and;
-	u32 sec_unc_err_mask_or;
-};
-
-struct hpx_type3 {
-	u16 device_type;
-	u16 function_type;
-	u16 config_space_location;
-	u16 pci_exp_cap_id;
-	u16 pci_exp_cap_ver;
-	u16 pci_exp_vendor_id;
-	u16 dvsec_id;
-	u16 dvsec_rev;
-	u16 match_offset;
-	u32 match_mask_and;
-	u32 match_value;
-	u16 reg_offset;
-	u32 reg_mask_and;
-	u32 reg_mask_or;
-};
-
-enum hpx_type3_dev_type {
-	HPX_TYPE_ENDPOINT = 1,
-	HPX_TYPE_LEG_END = 2,
-	HPX_TYPE_RC_END = 4,
-	HPX_TYPE_RC_EC = 8,
-	HPX_TYPE_ROOT_PORT = 16,
-	HPX_TYPE_UPSTREAM = 32,
-	HPX_TYPE_DOWNSTREAM = 64,
-	HPX_TYPE_PCI_BRIDGE = 128,
-	HPX_TYPE_PCIE_BRIDGE = 256,
-};
-
-enum hpx_type3_fn_type {
-	HPX_FN_NORMAL = 1,
-	HPX_FN_SRIOV_PHYS = 2,
-	HPX_FN_SRIOV_VIRT = 4,
-};
-
-enum hpx_type3_cfg_loc {
-	HPX_CFG_PCICFG = 0,
-	HPX_CFG_PCIE_CAP = 1,
-	HPX_CFG_PCIE_CAP_EXT = 2,
-	HPX_CFG_VEND_CAP = 3,
-	HPX_CFG_DVSEC = 4,
-	HPX_CFG_MAX = 5,
-};
-
-enum pci_irq_reroute_variant {
-	INTEL_IRQ_REROUTE_VARIANT = 1,
-	MAX_IRQ_REROUTE_VARIANTS = 3,
-};
-
-struct pci_fixup {
-	u16 vendor;
-	u16 device;
-	u32 class;
-	unsigned int class_shift;
-	int hook_offset;
-};
-
-enum {
-	NVME_REG_CAP = 0,
-	NVME_REG_VS = 8,
-	NVME_REG_INTMS = 12,
-	NVME_REG_INTMC = 16,
-	NVME_REG_CC = 20,
-	NVME_REG_CSTS = 28,
-	NVME_REG_NSSR = 32,
-	NVME_REG_AQA = 36,
-	NVME_REG_ASQ = 40,
-	NVME_REG_ACQ = 48,
-	NVME_REG_CMBLOC = 56,
-	NVME_REG_CMBSZ = 60,
-	NVME_REG_BPINFO = 64,
-	NVME_REG_BPRSEL = 68,
-	NVME_REG_BPMBL = 72,
-	NVME_REG_PMRCAP = 3584,
-	NVME_REG_PMRCTL = 3588,
-	NVME_REG_PMRSTS = 3592,
-	NVME_REG_PMREBS = 3596,
-	NVME_REG_PMRSWTP = 3600,
-	NVME_REG_DBS = 4096,
-};
-
-enum {
-	NVME_CC_ENABLE = 1,
-	NVME_CC_CSS_NVM = 0,
-	NVME_CC_EN_SHIFT = 0,
-	NVME_CC_CSS_SHIFT = 4,
-	NVME_CC_MPS_SHIFT = 7,
-	NVME_CC_AMS_SHIFT = 11,
-	NVME_CC_SHN_SHIFT = 14,
-	NVME_CC_IOSQES_SHIFT = 16,
-	NVME_CC_IOCQES_SHIFT = 20,
-	NVME_CC_AMS_RR = 0,
-	NVME_CC_AMS_WRRU = 2048,
-	NVME_CC_AMS_VS = 14336,
-	NVME_CC_SHN_NONE = 0,
-	NVME_CC_SHN_NORMAL = 16384,
-	NVME_CC_SHN_ABRUPT = 32768,
-	NVME_CC_SHN_MASK = 49152,
-	NVME_CC_IOSQES = 393216,
-	NVME_CC_IOCQES = 4194304,
-	NVME_CSTS_RDY = 1,
-	NVME_CSTS_CFS = 2,
-	NVME_CSTS_NSSRO = 16,
-	NVME_CSTS_PP = 32,
-	NVME_CSTS_SHST_NORMAL = 0,
-	NVME_CSTS_SHST_OCCUR = 4,
-	NVME_CSTS_SHST_CMPLT = 8,
-	NVME_CSTS_SHST_MASK = 12,
-};
-
-enum {
-	NVME_AEN_BIT_NS_ATTR = 8,
-	NVME_AEN_BIT_FW_ACT = 9,
-	NVME_AEN_BIT_ANA_CHANGE = 11,
-	NVME_AEN_BIT_DISC_CHANGE = 31,
-};
-
-enum {
-	SWITCHTEC_GAS_MRPC_OFFSET = 0,
-	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
-	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
-	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
-	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
-	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
-	SWITCHTEC_GAS_NTB_OFFSET = 65536,
-	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
-};
-
-enum {
-	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
-	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
-	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
-};
-
-struct nt_partition_info {
-	u32 xlink_enabled;
-	u32 target_part_low;
-	u32 target_part_high;
-	u32 reserved;
-};
-
-struct ntb_info_regs {
-	u8 partition_count;
-	u8 partition_id;
-	u16 reserved1;
-	u64 ep_map;
-	u16 requester_id;
-	u16 reserved2;
-	u32 reserved3[4];
-	struct nt_partition_info ntp_info[48];
-} __attribute__((packed));
-
-struct ntb_ctrl_regs {
-	u32 partition_status;
-	u32 partition_op;
-	u32 partition_ctrl;
-	u32 bar_setup;
-	u32 bar_error;
-	u16 lut_table_entries;
-	u16 lut_table_offset;
-	u32 lut_error;
-	u16 req_id_table_size;
-	u16 req_id_table_offset;
-	u32 req_id_error;
-	u32 reserved1[7];
-	struct {
-		u32 ctl;
-		u32 win_size;
-		u64 xlate_addr;
-	} bar_entry[6];
-	struct {
-		u32 win_size;
-		u32 reserved[3];
-	} bar_ext_entry[6];
-	u32 reserved2[192];
-	u32 req_id_table[512];
-	u32 reserved3[256];
-	u64 lut_entry[512];
-};
-
-struct pci_dev_reset_methods {
-	u16 vendor;
-	u16 device;
-	int (*reset)(struct pci_dev *, int);
-};
-
-struct pci_dev_acs_enabled {
-	u16 vendor;
-	u16 device;
-	int (*acs_enabled)(struct pci_dev *, u16);
-};
-
-struct pci_dev_acs_ops {
-	u16 vendor;
-	u16 device;
-	int (*enable_acs)(struct pci_dev *);
-	int (*disable_acs_redir)(struct pci_dev *);
-};
-
-struct msix_entry {
-	u32 vector;
-	u16 entry;
-};
-
-enum dmi_device_type {
-	DMI_DEV_TYPE_ANY = 0,
-	DMI_DEV_TYPE_OTHER = 1,
-	DMI_DEV_TYPE_UNKNOWN = 2,
-	DMI_DEV_TYPE_VIDEO = 3,
-	DMI_DEV_TYPE_SCSI = 4,
-	DMI_DEV_TYPE_ETHERNET = 5,
-	DMI_DEV_TYPE_TOKENRING = 6,
-	DMI_DEV_TYPE_SOUND = 7,
-	DMI_DEV_TYPE_PATA = 8,
-	DMI_DEV_TYPE_SATA = 9,
-	DMI_DEV_TYPE_SAS = 10,
-	DMI_DEV_TYPE_IPMI = 4294967295,
-	DMI_DEV_TYPE_OEM_STRING = 4294967294,
-	DMI_DEV_TYPE_DEV_ONBOARD = 4294967293,
-	DMI_DEV_TYPE_DEV_SLOT = 4294967292,
-};
-
-struct dmi_device {
-	struct list_head list;
-	int type;
-	const char *name;
-	void *device_data;
-};
-
-struct dmi_dev_onboard {
-	struct dmi_device dev;
-	int instance;
-	int segment;
-	int bus;
-	int devfn;
-};
-
-enum smbios_attr_enum {
-	SMBIOS_ATTR_NONE = 0,
-	SMBIOS_ATTR_LABEL_SHOW = 1,
-	SMBIOS_ATTR_INSTANCE_SHOW = 2,
-};
-
-enum acpi_attr_enum {
-	ACPI_ATTR_LABEL_SHOW = 0,
-	ACPI_ATTR_INDEX_SHOW = 1,
-};
-
-enum hdmi_infoframe_type {
-	HDMI_INFOFRAME_TYPE_VENDOR = 129,
-	HDMI_INFOFRAME_TYPE_AVI = 130,
-	HDMI_INFOFRAME_TYPE_SPD = 131,
-	HDMI_INFOFRAME_TYPE_AUDIO = 132,
-	HDMI_INFOFRAME_TYPE_DRM = 135,
-};
-
-struct hdmi_any_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-};
-
-enum hdmi_colorspace {
-	HDMI_COLORSPACE_RGB = 0,
-	HDMI_COLORSPACE_YUV422 = 1,
-	HDMI_COLORSPACE_YUV444 = 2,
-	HDMI_COLORSPACE_YUV420 = 3,
-	HDMI_COLORSPACE_RESERVED4 = 4,
-	HDMI_COLORSPACE_RESERVED5 = 5,
-	HDMI_COLORSPACE_RESERVED6 = 6,
-	HDMI_COLORSPACE_IDO_DEFINED = 7,
-};
-
-enum hdmi_scan_mode {
-	HDMI_SCAN_MODE_NONE = 0,
-	HDMI_SCAN_MODE_OVERSCAN = 1,
-	HDMI_SCAN_MODE_UNDERSCAN = 2,
-	HDMI_SCAN_MODE_RESERVED = 3,
-};
-
-enum hdmi_colorimetry {
-	HDMI_COLORIMETRY_NONE = 0,
-	HDMI_COLORIMETRY_ITU_601 = 1,
-	HDMI_COLORIMETRY_ITU_709 = 2,
-	HDMI_COLORIMETRY_EXTENDED = 3,
-};
-
-enum hdmi_picture_aspect {
-	HDMI_PICTURE_ASPECT_NONE = 0,
-	HDMI_PICTURE_ASPECT_4_3 = 1,
-	HDMI_PICTURE_ASPECT_16_9 = 2,
-	HDMI_PICTURE_ASPECT_64_27 = 3,
-	HDMI_PICTURE_ASPECT_256_135 = 4,
-	HDMI_PICTURE_ASPECT_RESERVED = 5,
-};
-
-enum hdmi_active_aspect {
-	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
-	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
-	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
-	HDMI_ACTIVE_ASPECT_PICTURE = 8,
-	HDMI_ACTIVE_ASPECT_4_3 = 9,
-	HDMI_ACTIVE_ASPECT_16_9 = 10,
-	HDMI_ACTIVE_ASPECT_14_9 = 11,
-	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
-	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
-	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
-};
-
-enum hdmi_extended_colorimetry {
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
-	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
-	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
-	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
-	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
-	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
-	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
-	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
-};
-
-enum hdmi_quantization_range {
-	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
-	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
-	HDMI_QUANTIZATION_RANGE_FULL = 2,
-	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
-};
-
-enum hdmi_nups {
-	HDMI_NUPS_UNKNOWN = 0,
-	HDMI_NUPS_HORIZONTAL = 1,
-	HDMI_NUPS_VERTICAL = 2,
-	HDMI_NUPS_BOTH = 3,
-};
-
-enum hdmi_ycc_quantization_range {
-	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
-	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
-};
-
-enum hdmi_content_type {
-	HDMI_CONTENT_TYPE_GRAPHICS = 0,
-	HDMI_CONTENT_TYPE_PHOTO = 1,
-	HDMI_CONTENT_TYPE_CINEMA = 2,
-	HDMI_CONTENT_TYPE_GAME = 3,
-};
-
-enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
-};
-
-enum hdmi_eotf {
-	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
-	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
-	HDMI_EOTF_SMPTE_ST2084 = 2,
-	HDMI_EOTF_BT_2100_HLG = 3,
-};
-
-struct hdmi_avi_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_colorspace colorspace;
-	enum hdmi_scan_mode scan_mode;
-	enum hdmi_colorimetry colorimetry;
-	enum hdmi_picture_aspect picture_aspect;
-	enum hdmi_active_aspect active_aspect;
-	bool itc;
-	enum hdmi_extended_colorimetry extended_colorimetry;
-	enum hdmi_quantization_range quantization_range;
-	enum hdmi_nups nups;
-	unsigned char video_code;
-	enum hdmi_ycc_quantization_range ycc_quantization_range;
-	enum hdmi_content_type content_type;
-	unsigned char pixel_repeat;
-	short unsigned int top_bar;
-	short unsigned int bottom_bar;
-	short unsigned int left_bar;
-	short unsigned int right_bar;
-};
-
-struct hdmi_drm_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	enum hdmi_eotf eotf;
-	enum hdmi_metadata_type metadata_type;
-	struct {
-		u16 x;
-		u16 y;
-	} display_primaries[3];
-	struct {
-		u16 x;
-		u16 y;
-	} white_point;
-	u16 max_display_mastering_luminance;
-	u16 min_display_mastering_luminance;
-	u16 max_cll;
-	u16 max_fall;
-};
-
-enum hdmi_spd_sdi {
-	HDMI_SPD_SDI_UNKNOWN = 0,
-	HDMI_SPD_SDI_DSTB = 1,
-	HDMI_SPD_SDI_DVDP = 2,
-	HDMI_SPD_SDI_DVHS = 3,
-	HDMI_SPD_SDI_HDDVR = 4,
-	HDMI_SPD_SDI_DVC = 5,
-	HDMI_SPD_SDI_DSC = 6,
-	HDMI_SPD_SDI_VCD = 7,
-	HDMI_SPD_SDI_GAME = 8,
-	HDMI_SPD_SDI_PC = 9,
-	HDMI_SPD_SDI_BD = 10,
-	HDMI_SPD_SDI_SACD = 11,
-	HDMI_SPD_SDI_HDDVD = 12,
-	HDMI_SPD_SDI_PMP = 13,
-};
-
-struct hdmi_spd_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	char vendor[8];
-	char product[16];
-	enum hdmi_spd_sdi sdi;
-};
-
-enum hdmi_audio_coding_type {
-	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
-	HDMI_AUDIO_CODING_TYPE_PCM = 1,
-	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
-	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
-	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
-	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
-	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_DTS = 7,
-	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
-	HDMI_AUDIO_CODING_TYPE_DSD = 9,
-	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
-	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
-	HDMI_AUDIO_CODING_TYPE_MLP = 12,
-	HDMI_AUDIO_CODING_TYPE_DST = 13,
-	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
-	HDMI_AUDIO_CODING_TYPE_CXT = 15,
-};
-
-enum hdmi_audio_sample_size {
-	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
-	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
-	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
-};
-
-enum hdmi_audio_sample_frequency {
-	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
-	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
-};
-
-enum hdmi_audio_coding_type_ext {
-	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
-	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
-	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
-	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
-};
-
-struct hdmi_audio_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned char channels;
-	enum hdmi_audio_coding_type coding_type;
-	enum hdmi_audio_sample_size sample_size;
-	enum hdmi_audio_sample_frequency sample_frequency;
-	enum hdmi_audio_coding_type_ext coding_type_ext;
-	unsigned char channel_allocation;
-	unsigned char level_shift_value;
-	bool downmix_inhibit;
-};
-
-enum hdmi_3d_structure {
-	HDMI_3D_STRUCTURE_INVALID = 4294967295,
-	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
-	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
-	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
-	HDMI_3D_STRUCTURE_L_DEPTH = 4,
-	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
-	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
-	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
-};
-
-struct hdmi_vendor_infoframe {
-	enum hdmi_infoframe_type type;
-	unsigned char version;
-	unsigned char length;
-	unsigned int oui;
-	u8 vic;
-	enum hdmi_3d_structure s3d_struct;
-	unsigned int s3d_ext_data;
-};
-
-union hdmi_vendor_any_infoframe {
-	struct {
-		enum hdmi_infoframe_type type;
-		unsigned char version;
-		unsigned char length;
-		unsigned int oui;
-	} any;
-	struct hdmi_vendor_infoframe hdmi;
-};
-
-union hdmi_infoframe {
-	struct hdmi_any_infoframe any;
-	struct hdmi_avi_infoframe avi;
-	struct hdmi_spd_infoframe spd;
-	union hdmi_vendor_any_infoframe vendor;
-	struct hdmi_audio_infoframe audio;
-	struct hdmi_drm_infoframe drm;
-};
-
-struct vgastate {
-	void *vgabase;
-	long unsigned int membase;
-	__u32 memsize;
-	__u32 flags;
-	__u32 depth;
-	__u32 num_attr;
-	__u32 num_crtc;
-	__u32 num_gfx;
-	__u32 num_seq;
-	void *vidstate;
-};
-
-struct vgacon_scrollback_info {
-	void *data;
-	int tail;
-	int size;
-	int rows;
-	int cnt;
-	int cur;
-	int save;
-	int restore;
-};
-
-struct linux_logo {
-	int type;
-	unsigned int width;
-	unsigned int height;
-	unsigned int clutsize;
-	const unsigned char *clut;
-	const unsigned char *data;
-};
-
-enum {
-	FB_BLANK_UNBLANK = 0,
-	FB_BLANK_NORMAL = 1,
-	FB_BLANK_VSYNC_SUSPEND = 2,
-	FB_BLANK_HSYNC_SUSPEND = 3,
-	FB_BLANK_POWERDOWN = 4,
-};
-
-struct fb_event {
-	struct fb_info *info;
-	void *data;
-};
-
-enum backlight_update_reason {
-	BACKLIGHT_UPDATE_HOTKEY = 0,
-	BACKLIGHT_UPDATE_SYSFS = 1,
-};
-
-enum backlight_type {
-	BACKLIGHT_RAW = 1,
-	BACKLIGHT_PLATFORM = 2,
-	BACKLIGHT_FIRMWARE = 3,
-	BACKLIGHT_TYPE_MAX = 4,
-};
-
-enum backlight_notification {
-	BACKLIGHT_REGISTERED = 0,
-	BACKLIGHT_UNREGISTERED = 1,
-};
-
-enum backlight_scale {
-	BACKLIGHT_SCALE_UNKNOWN = 0,
-	BACKLIGHT_SCALE_LINEAR = 1,
-	BACKLIGHT_SCALE_NON_LINEAR = 2,
-};
-
-struct backlight_device;
-
-struct backlight_ops {
-	unsigned int options;
-	int (*update_status)(struct backlight_device *);
-	int (*get_brightness)(struct backlight_device *);
-	int (*check_fb)(struct backlight_device *, struct fb_info *);
-};
-
-struct backlight_properties {
-	int brightness;
-	int max_brightness;
-	int power;
-	int fb_blank;
-	enum backlight_type type;
-	unsigned int state;
-	enum backlight_scale scale;
-};
-
-struct backlight_device {
-	struct backlight_properties props;
-	struct mutex update_lock;
-	struct mutex ops_lock;
-	const struct backlight_ops *ops;
-	struct notifier_block fb_notif;
-	struct list_head entry;
-	struct device dev;
-	bool fb_bl_on[32];
-	int use_count;
-};
-
-struct generic_bl_info {
-	const char *name;
-	int max_intensity;
-	int default_intensity;
-	int limit_mask;
-	void (*set_bl_intensity)(int);
-	void (*kick_battery)();
-};
-
-struct fb_cmap_user {
-	__u32 start;
-	__u32 len;
-	__u16 *red;
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;
-};
-
-struct fb_modelist {
-	struct list_head list;
-	struct fb_videomode mode;
-};
-
-struct logo_data {
-	int depth;
-	int needs_directpalette;
-	int needs_truepalette;
-	int needs_cmapreset;
-	const struct linux_logo *logo;
-};
-
-struct fb_fix_screeninfo32 {
-	char id[16];
-	compat_caddr_t smem_start;
-	u32 smem_len;
-	u32 type;
-	u32 type_aux;
-	u32 visual;
-	u16 xpanstep;
-	u16 ypanstep;
-	u16 ywrapstep;
-	u32 line_length;
-	compat_caddr_t mmio_start;
-	u32 mmio_len;
-	u32 accel;
-	u16 reserved[3];
-};
-
-struct fb_cmap32 {
-	u32 start;
-	u32 len;
-	compat_caddr_t red;
-	compat_caddr_t green;
-	compat_caddr_t blue;
-	compat_caddr_t transp;
-};
-
-struct broken_edid {
-	u8 manufacturer[4];
-	u32 model;
-	u32 fix;
-};
-
-struct __fb_timings {
-	u32 dclk;
-	u32 hfreq;
-	u32 vfreq;
-	u32 hactive;
-	u32 vactive;
-	u32 hblank;
-	u32 vblank;
-	u32 htotal;
-	u32 vtotal;
-};
-
-struct fb_cvt_data {
-	u32 xres;
-	u32 yres;
-	u32 refresh;
-	u32 f_refresh;
-	u32 pixclock;
-	u32 hperiod;
-	u32 hblank;
-	u32 hfreq;
-	u32 htotal;
-	u32 vtotal;
-	u32 vsync;
-	u32 hsync;
-	u32 h_front_porch;
-	u32 h_back_porch;
-	u32 v_front_porch;
-	u32 v_back_porch;
-	u32 h_margin;
-	u32 v_margin;
-	u32 interlace;
-	u32 aspect_ratio;
-	u32 active_pixels;
-	u32 flags;
-	u32 status;
-};
-
-typedef unsigned char u_char;
-
-typedef short unsigned int u_short;
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
-};
-
-struct fbcon_display {
-	const u_char *fontdata;
-	int userfont;
-	u_short scrollmode;
-	u_short inverse;
-	short int yscroll;
-	int vrows;
-	int cursor_shape;
-	int con_rotate;
-	u32 xres_virtual;
-	u32 yres_virtual;
-	u32 height;
-	u32 width;
-	u32 bits_per_pixel;
-	u32 grayscale;
-	u32 nonstd;
-	u32 accel_flags;
-	u32 rotate;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	const struct fb_videomode *mode;
-};
-
-struct fbcon_ops {
-	void (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);
-	void (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);
-	void (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);
-	void (*clear_margins)(struct vc_data *, struct fb_info *, int, int);
-	void (*cursor)(struct vc_data *, struct fb_info *, int, int, int, int);
-	int (*update_start)(struct fb_info *);
-	int (*rotate_font)(struct fb_info *, struct vc_data *);
-	struct fb_var_screeninfo var;
-	struct timer_list cursor_timer;
-	struct fb_cursor cursor_state;
-	struct fbcon_display *p;
-	struct fb_info *info;
-	int currcon;
-	int cur_blink_jiffies;
-	int cursor_flash;
-	int cursor_reset;
-	int blank_state;
-	int graphics;
-	int save_graphics;
-	int flags;
-	int rotate;
-	int cur_rotate;
-	char *cursor_data;
-	u8 *fontbuffer;
-	u8 *fontdata;
-	u8 *cursor_src;
-	u32 cursor_size;
-	u32 fd_size;
-};
-
-enum {
-	FBCON_LOGO_CANSHOW = 4294967295,
-	FBCON_LOGO_DRAW = 4294967294,
-	FBCON_LOGO_DONTSHOW = 4294967293,
-};
-
-enum drm_panel_orientation {
-	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,
-	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
-	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
-	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
-	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
-};
-
-typedef u16 acpi_owner_id;
-
-union acpi_name_union {
-	u32 integer;
-	char ascii[4];
-};
-
-struct acpi_table_desc {
-	acpi_physical_address address;
-	struct acpi_table_header *pointer;
-	u32 length;
-	union acpi_name_union signature;
-	acpi_owner_id owner_id;
-	u8 flags;
-	u16 validation_count;
-};
-
-struct acpi_madt_io_sapic {
-	struct acpi_subtable_header header;
-	u8 id;
-	u8 reserved;
-	u32 global_irq_base;
-	u64 address;
-};
-
-struct acpi_madt_interrupt_source {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u8 type;
-	u8 id;
-	u8 eid;
-	u8 io_sapic_vector;
-	u32 global_irq;
-	u32 flags;
-};
-
-struct acpi_madt_generic_interrupt {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 cpu_interface_number;
-	u32 uid;
-	u32 flags;
-	u32 parking_version;
-	u32 performance_interrupt;
-	u64 parked_address;
-	u64 base_address;
-	u64 gicv_base_address;
-	u64 gich_base_address;
-	u32 vgic_interrupt;
-	u64 gicr_base_address;
-	u64 arm_mpidr;
-	u8 efficiency_class;
-	u8 reserved2[1];
-	u16 spe_interrupt;
-} __attribute__((packed));
-
-struct acpi_madt_generic_distributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 gic_id;
-	u64 base_address;
-	u32 global_irq_base;
-	u8 version;
-	u8 reserved2[3];
-};
-
-typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
-
-struct transaction;
-
-struct acpi_ec {
-	acpi_handle handle;
-	int gpe;
-	int irq;
-	long unsigned int command_addr;
-	long unsigned int data_addr;
-	bool global_lock;
-	long unsigned int flags;
-	long unsigned int reference_count;
-	struct mutex mutex;
-	wait_queue_head_t wait;
-	struct list_head list;
-	struct transaction *curr;
-	spinlock_t lock;
-	struct work_struct work;
-	long unsigned int timestamp;
-	long unsigned int nr_pending_queries;
-	bool busy_polling;
-	unsigned int polling_guard;
-};
-
-enum acpi_subtable_type {
-	ACPI_SUBTABLE_COMMON = 0,
-	ACPI_SUBTABLE_HMAT = 1,
-};
-
-struct acpi_subtable_entry {
-	union acpi_subtable_headers *hdr;
-	enum acpi_subtable_type type;
-};
-
-enum acpi_predicate {
-	all_versions = 0,
-	less_than_or_equal = 1,
-	equal = 2,
-	greater_than_or_equal = 3,
-};
-
-struct acpi_platform_list {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	char *table;
-	enum acpi_predicate pred;
-	char *reason;
-	u32 data;
-};
-
-typedef char *acpi_string;
-
-struct acpi_osi_entry {
-	char string[64];
-	bool enable;
-};
-
-struct acpi_osi_config {
-	u8 default_disabling;
-	unsigned int linux_enable: 1;
-	unsigned int linux_dmi: 1;
-	unsigned int linux_cmdline: 1;
-	unsigned int darwin_enable: 1;
-	unsigned int darwin_dmi: 1;
-	unsigned int darwin_cmdline: 1;
-};
-
-typedef u32 acpi_name;
-
-struct acpi_predefined_names {
-	const char *name;
-	u8 type;
-	char *val;
-};
-
-typedef u32 (*acpi_osd_handler)(void *);
-
-typedef void (*acpi_osd_exec_callback)(void *);
-
-typedef u32 (*acpi_sci_handler)(void *);
-
-typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
-
-typedef u32 (*acpi_event_handler)(void *);
-
-typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_object_handler)(acpi_handle, void *);
-
-typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
-
-typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
-
-typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
-
-typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
-
-typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
-
-typedef u32 (*acpi_interface_handler)(acpi_string, u32);
-
-struct acpi_pci_id {
-	u16 segment;
-	u16 bus;
-	u16 device;
-	u16 function;
-};
-
-struct acpi_mem_space_context {
-	u32 length;
-	acpi_physical_address address;
-	acpi_physical_address mapped_physical_address;
-	u8 *mapped_logical_address;
-	acpi_size mapped_length;
-};
-
-struct acpi_table_facs {
-	char signature[4];
-	u32 length;
-	u32 hardware_signature;
-	u32 firmware_waking_vector;
-	u32 global_lock;
-	u32 flags;
-	u64 xfirmware_waking_vector;
-	u8 version;
-	u8 reserved[3];
-	u32 ospm_flags;
-	u8 reserved1[24];
-};
-
-typedef enum {
-	OSL_GLOBAL_LOCK_HANDLER = 0,
-	OSL_NOTIFY_HANDLER = 1,
-	OSL_GPE_HANDLER = 2,
-	OSL_DEBUGGER_MAIN_THREAD = 3,
-	OSL_DEBUGGER_EXEC_THREAD = 4,
-	OSL_EC_POLL_HANDLER = 5,
-	OSL_EC_BURST_HANDLER = 6,
-} acpi_execute_type;
-
-struct acpi_rw_lock {
-	void *writer_mutex;
-	void *reader_mutex;
-	u32 num_readers;
-};
-
-struct acpi_mutex_info {
-	void *mutex;
-	u32 use_count;
-	u64 thread_id;
-};
-
-union acpi_operand_object;
-
-struct acpi_namespace_node {
-	union acpi_operand_object *object;
-	u8 descriptor_type;
-	u8 type;
-	u16 flags;
-	union acpi_name_union name;
-	struct acpi_namespace_node *parent;
-	struct acpi_namespace_node *child;
-	struct acpi_namespace_node *peer;
-	acpi_owner_id owner_id;
-};
-
-struct acpi_object_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-};
-
-struct acpi_object_integer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 fill[3];
-	u64 value;
-};
-
-struct acpi_object_string {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	char *pointer;
-	u32 length;
-};
-
-struct acpi_object_buffer {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 *pointer;
-	u32 length;
-	u32 aml_length;
-	u8 *aml_start;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_object_package {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **elements;
-	u8 *aml_start;
-	u32 aml_length;
-	u32 count;
-};
-
-struct acpi_object_event {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	void *os_semaphore;
-};
-
-struct acpi_walk_state;
-
-typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
-
-struct acpi_object_method {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 info_flags;
-	u8 param_count;
-	u8 sync_level;
-	union acpi_operand_object *mutex;
-	union acpi_operand_object *node;
-	u8 *aml_start;
-	union {
-		acpi_internal_method implementation;
-		union acpi_operand_object *handler;
-	} dispatch;
-	u32 aml_length;
-	acpi_owner_id owner_id;
-	u8 thread_count;
-};
-
-struct acpi_thread_state;
-
-struct acpi_object_mutex {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 sync_level;
-	u16 acquisition_depth;
-	void *os_mutex;
-	u64 thread_id;
-	struct acpi_thread_state *owner_thread;
-	union acpi_operand_object *prev;
-	union acpi_operand_object *next;
-	struct acpi_namespace_node *node;
-	u8 original_sync_level;
-};
-
-struct acpi_object_region {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler;
-	union acpi_operand_object *next;
-	acpi_physical_address address;
-	u32 length;
-};
-
-struct acpi_object_notify_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_gpe_block_info;
-
-struct acpi_object_device {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	struct acpi_gpe_block_info *gpe_block;
-};
-
-struct acpi_object_power_resource {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	u32 system_level;
-	u32 resource_order;
-};
-
-struct acpi_object_processor {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 proc_id;
-	u8 length;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-	acpi_io_address address;
-};
-
-struct acpi_object_thermal_zone {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *notify_list[2];
-	union acpi_operand_object *handler;
-};
-
-struct acpi_object_field_common {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-};
-
-struct acpi_object_region_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	u16 resource_length;
-	union acpi_operand_object *region_obj;
-	u8 *resource_buffer;
-	u16 pin_number_index;
-	u8 *internal_pcc_buffer;
-};
-
-struct acpi_object_buffer_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *buffer_obj;
-};
-
-struct acpi_object_bank_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *region_obj;
-	union acpi_operand_object *bank_obj;
-};
-
-struct acpi_object_index_field {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 field_flags;
-	u8 attribute;
-	u8 access_byte_width;
-	struct acpi_namespace_node *node;
-	u32 bit_length;
-	u32 base_byte_offset;
-	u32 value;
-	u8 start_field_bit_offset;
-	u8 access_length;
-	union acpi_operand_object *index_obj;
-	union acpi_operand_object *data_obj;
-};
-
-struct acpi_object_notify_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *node;
-	u32 handler_type;
-	acpi_notify_handler handler;
-	void *context;
-	union acpi_operand_object *next[2];
-};
-
-struct acpi_object_addr_handler {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 space_id;
-	u8 handler_flags;
-	acpi_adr_space_handler handler;
-	struct acpi_namespace_node *node;
-	void *context;
-	acpi_adr_space_setup setup;
-	union acpi_operand_object *region_list;
-	union acpi_operand_object *next;
-};
-
-struct acpi_object_reference {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	u8 class;
-	u8 target_type;
-	u8 resolved;
-	void *object;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object **where;
-	u8 *index_pointer;
-	u8 *aml;
-	u32 value;
-};
-
-struct acpi_object_extra {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	struct acpi_namespace_node *method_REG;
-	struct acpi_namespace_node *scope_node;
-	void *region_context;
-	u8 *aml_start;
-	u32 aml_length;
-};
-
-struct acpi_object_data {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	acpi_object_handler handler;
-	void *pointer;
-};
-
-struct acpi_object_cache_list {
-	union acpi_operand_object *next_object;
-	u8 descriptor_type;
-	u8 type;
-	u16 reference_count;
-	u8 flags;
-	union acpi_operand_object *next;
-};
-
-union acpi_operand_object {
-	struct acpi_object_common common;
-	struct acpi_object_integer integer;
-	struct acpi_object_string string;
-	struct acpi_object_buffer buffer;
-	struct acpi_object_package package;
-	struct acpi_object_event event;
-	struct acpi_object_method method;
-	struct acpi_object_mutex mutex;
-	struct acpi_object_region region;
-	struct acpi_object_notify_common common_notify;
-	struct acpi_object_device device;
-	struct acpi_object_power_resource power_resource;
-	struct acpi_object_processor processor;
-	struct acpi_object_thermal_zone thermal_zone;
-	struct acpi_object_field_common common_field;
-	struct acpi_object_region_field field;
-	struct acpi_object_buffer_field buffer_field;
-	struct acpi_object_bank_field bank_field;
-	struct acpi_object_index_field index_field;
-	struct acpi_object_notify_handler notify;
-	struct acpi_object_addr_handler address_space;
-	struct acpi_object_reference reference;
-	struct acpi_object_extra extra;
-	struct acpi_object_data data;
-	struct acpi_object_cache_list cache;
-	struct acpi_namespace_node node;
-};
-
-struct acpi_table_list {
-	struct acpi_table_desc *tables;
-	u32 current_table_count;
-	u32 max_table_count;
-	u8 flags;
-};
-
-union acpi_parse_object;
-
-union acpi_generic_state;
-
-struct acpi_parse_state {
-	u8 *aml_start;
-	u8 *aml;
-	u8 *aml_end;
-	u8 *pkg_start;
-	u8 *pkg_end;
-	union acpi_parse_object *start_op;
-	struct acpi_namespace_node *start_node;
-	union acpi_generic_state *scope;
-	union acpi_parse_object *start_scope;
-	u32 aml_size;
-};
-
-typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
-
-typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
-
-struct acpi_opcode_info;
-
-struct acpi_walk_state {
-	struct acpi_walk_state *next;
-	u8 descriptor_type;
-	u8 walk_type;
-	u16 opcode;
-	u8 next_op_info;
-	u8 num_operands;
-	u8 operand_index;
-	acpi_owner_id owner_id;
-	u8 last_predicate;
-	u8 current_result;
-	u8 return_used;
-	u8 scope_depth;
-	u8 pass_number;
-	u8 namespace_override;
-	u8 result_size;
-	u8 result_count;
-	u8 *aml;
-	u32 arg_types;
-	u32 method_breakpoint;
-	u32 user_breakpoint;
-	u32 parse_flags;
-	struct acpi_parse_state parser_state;
-	u32 prev_arg_types;
-	u32 arg_count;
-	u16 method_nesting_depth;
-	u8 method_is_nested;
-	struct acpi_namespace_node arguments[7];
-	struct acpi_namespace_node local_variables[8];
-	union acpi_operand_object *operands[9];
-	union acpi_operand_object **params;
-	u8 *aml_last_while;
-	union acpi_operand_object **caller_return_desc;
-	union acpi_generic_state *control_state;
-	struct acpi_namespace_node *deferred_node;
-	union acpi_operand_object *implicit_return_obj;
-	struct acpi_namespace_node *method_call_node;
-	union acpi_parse_object *method_call_op;
-	union acpi_operand_object *method_desc;
-	struct acpi_namespace_node *method_node;
-	char *method_pathname;
-	union acpi_parse_object *op;
-	const struct acpi_opcode_info *op_info;
-	union acpi_parse_object *origin;
-	union acpi_operand_object *result_obj;
-	union acpi_generic_state *results;
-	union acpi_operand_object *return_desc;
-	union acpi_generic_state *scope_info;
-	union acpi_parse_object *prev_op;
-	union acpi_parse_object *next_op;
-	struct acpi_thread_state *thread;
-	acpi_parse_downwards descending_callback;
-	acpi_parse_upwards ascending_callback;
-};
-
-struct acpi_sci_handler_info {
-	struct acpi_sci_handler_info *next;
-	acpi_sci_handler address;
-	void *context;
-};
-
-struct acpi_gpe_handler_info {
-	acpi_gpe_handler address;
-	void *context;
-	struct acpi_namespace_node *method_node;
-	u8 original_flags;
-	u8 originally_enabled;
-};
-
-struct acpi_gpe_notify_info {
-	struct acpi_namespace_node *device_node;
-	struct acpi_gpe_notify_info *next;
-};
-
-union acpi_gpe_dispatch_info {
-	struct acpi_namespace_node *method_node;
-	struct acpi_gpe_handler_info *handler;
-	struct acpi_gpe_notify_info *notify_list;
-};
-
-struct acpi_gpe_register_info;
-
-struct acpi_gpe_event_info {
-	union acpi_gpe_dispatch_info dispatch;
-	struct acpi_gpe_register_info *register_info;
-	u8 flags;
-	u8 gpe_number;
-	u8 runtime_count;
-	u8 disable_for_dispatch;
-};
-
-struct acpi_gpe_register_info {
-	struct acpi_generic_address status_address;
-	struct acpi_generic_address enable_address;
-	u16 base_gpe_number;
-	u8 enable_for_wake;
-	u8 enable_for_run;
-	u8 mask_for_run;
-	u8 enable_mask;
-} __attribute__((packed));
-
-struct acpi_gpe_xrupt_info;
-
-struct acpi_gpe_block_info {
-	struct acpi_namespace_node *node;
-	struct acpi_gpe_block_info *previous;
-	struct acpi_gpe_block_info *next;
-	struct acpi_gpe_xrupt_info *xrupt_block;
-	struct acpi_gpe_register_info *register_info;
-	struct acpi_gpe_event_info *event_info;
-	u64 address;
-	u32 register_count;
-	u16 gpe_count;
-	u16 block_base_number;
-	u8 space_id;
-	u8 initialized;
-};
-
-struct acpi_gpe_xrupt_info {
-	struct acpi_gpe_xrupt_info *previous;
-	struct acpi_gpe_xrupt_info *next;
-	struct acpi_gpe_block_info *gpe_block_list_head;
-	u32 interrupt_number;
-};
-
-struct acpi_fixed_event_handler {
-	acpi_event_handler handler;
-	void *context;
-};
-
-struct acpi_fixed_event_info {
-	u8 status_register_id;
-	u8 enable_register_id;
-	u16 status_bit_mask;
-	u16 enable_bit_mask;
-};
-
-struct acpi_common_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-};
-
-struct acpi_update_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *object;
-};
-
-struct acpi_pkg_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 index;
-	union acpi_operand_object *source_object;
-	union acpi_operand_object *dest_object;
-	struct acpi_walk_state *walk_state;
-	void *this_target_obj;
-	u32 num_packages;
-};
-
-struct acpi_control_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u16 opcode;
-	union acpi_parse_object *predicate_op;
-	u8 *aml_predicate_start;
-	u8 *package_end;
-	u64 loop_timeout;
-};
-
-union acpi_parse_value {
-	u64 integer;
-	u32 size;
-	char *string;
-	u8 *buffer;
-	char *name;
-	union acpi_parse_object *arg;
-};
-
-struct acpi_parse_obj_common {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-};
-
-struct acpi_parse_obj_named {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	char *path;
-	u8 *data;
-	u32 length;
-	u32 name;
-};
-
-struct acpi_parse_obj_asl {
-	union acpi_parse_object *parent;
-	u8 descriptor_type;
-	u8 flags;
-	u16 aml_opcode;
-	u8 *aml;
-	union acpi_parse_object *next;
-	struct acpi_namespace_node *node;
-	union acpi_parse_value value;
-	u8 arg_list_length;
-	union acpi_parse_object *child;
-	union acpi_parse_object *parent_method;
-	char *filename;
-	u8 file_changed;
-	char *parent_filename;
-	char *external_name;
-	char *namepath;
-	char name_seg[4];
-	u32 extra_value;
-	u32 column;
-	u32 line_number;
-	u32 logical_line_number;
-	u32 logical_byte_offset;
-	u32 end_line;
-	u32 end_logical_line;
-	u32 acpi_btype;
-	u32 aml_length;
-	u32 aml_subtree_length;
-	u32 final_aml_length;
-	u32 final_aml_offset;
-	u32 compile_flags;
-	u16 parse_opcode;
-	u8 aml_opcode_length;
-	u8 aml_pkg_len_bytes;
-	u8 extra;
-	char parse_op_name[20];
-};
-
-union acpi_parse_object {
-	struct acpi_parse_obj_common common;
-	struct acpi_parse_obj_named named;
-	struct acpi_parse_obj_asl asl;
-};
-
-struct acpi_scope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	struct acpi_namespace_node *node;
-};
-
-struct acpi_pscope_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u32 arg_count;
-	union acpi_parse_object *op;
-	u8 *arg_end;
-	u8 *pkg_end;
-	u32 arg_list;
-};
-
-struct acpi_thread_state {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 current_sync_level;
-	struct acpi_walk_state *walk_state_list;
-	union acpi_operand_object *acquired_mutex_list;
-	u64 thread_id;
-};
-
-struct acpi_result_values {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	union acpi_operand_object *obj_desc[8];
-};
-
-struct acpi_global_notify_handler {
-	acpi_notify_handler handler;
-	void *context;
-};
-
-struct acpi_notify_info {
-	void *next;
-	u8 descriptor_type;
-	u8 flags;
-	u16 value;
-	u16 state;
-	u8 handler_list_id;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *handler_list_head;
-	struct acpi_global_notify_handler *global;
-};
-
-union acpi_generic_state {
-	struct acpi_common_state common;
-	struct acpi_control_state control;
-	struct acpi_update_state update;
-	struct acpi_scope_state scope;
-	struct acpi_pscope_state parse_scope;
-	struct acpi_pkg_state pkg;
-	struct acpi_thread_state thread;
-	struct acpi_result_values results;
-	struct acpi_notify_info notify;
-};
-
-struct acpi_address_range {
-	struct acpi_address_range *next;
-	struct acpi_namespace_node *region_node;
-	acpi_physical_address start_address;
-	acpi_physical_address end_address;
-};
-
-struct acpi_opcode_info {
-	u32 parse_args;
-	u32 runtime_args;
-	u16 flags;
-	u8 object_type;
-	u8 class;
-	u8 type;
-};
-
-struct acpi_comment_node {
-	char *comment;
-	struct acpi_comment_node *next;
-};
-
-struct acpi_bit_register_info {
-	u8 parent_register;
-	u8 bit_position;
-	u16 access_bit_mask;
-};
-
-struct acpi_interface_info {
-	char *name;
-	struct acpi_interface_info *next;
-	u8 flags;
-	u8 value;
-};
-
-struct acpi_os_dpc {
-	acpi_osd_exec_callback function;
-	void *context;
-	struct work_struct work;
-};
-
-struct acpi_ioremap {
-	struct list_head list;
-	void *virt;
-	acpi_physical_address phys;
-	acpi_size size;
-	long unsigned int refcount;
-};
-
-struct acpi_hp_work {
-	struct work_struct work;
-	struct acpi_device *adev;
-	u32 src;
-};
-
-struct acpi_object_list {
-	u32 count;
-	union acpi_object *pointer;
-};
-
-struct acpi_pld_info {
-	u8 revision;
-	u8 ignore_color;
-	u8 red;
-	u8 green;
-	u8 blue;
-	u16 width;
-	u16 height;
-	u8 user_visible;
-	u8 dock;
-	u8 lid;
-	u8 panel;
-	u8 vertical_position;
-	u8 horizontal_position;
-	u8 shape;
-	u8 group_orientation;
-	u8 group_token;
-	u8 group_position;
-	u8 bay;
-	u8 ejectable;
-	u8 ospm_eject_required;
-	u8 cabinet_number;
-	u8 card_cage_number;
-	u8 reference;
-	u8 rotation;
-	u8 order;
-	u8 reserved;
-	u16 vertical_offset;
-	u16 horizontal_offset;
-};
-
-struct acpi_handle_list {
-	u32 count;
-	acpi_handle handles[10];
-};
-
-struct acpi_device_bus_id {
-	char bus_id[15];
-	unsigned int instance_no;
-	struct list_head node;
-};
-
-struct acpi_dev_match_info {
-	struct acpi_device_id hid[2];
-	const char *uid;
-	s64 hrv;
-};
-
-struct nvs_region {
-	__u64 phys_start;
-	__u64 size;
-	struct list_head node;
-};
-
-struct nvs_page {
-	long unsigned int phys_start;
-	unsigned int size;
-	void *kaddr;
-	void *data;
-	bool unmap;
-	struct list_head node;
-};
-
-typedef u32 acpi_event_status;
-
-struct lpi_device_info {
-	char *name;
-	int enabled;
-	union acpi_object *package;
-};
-
-struct lpi_device_constraint {
-	int uid;
-	int min_dstate;
-	int function_states;
-};
-
-struct lpi_constraints {
-	acpi_handle handle;
-	int min_dstate;
-};
-
-struct acpi_hardware_id {
-	struct list_head list;
-	const char *id;
-};
-
-struct acpi_data_node {
-	const char *name;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct fwnode_handle *parent;
-	struct acpi_device_data data;
-	struct list_head sibling;
-	struct kobject kobj;
-	struct completion kobj_done;
-};
-
-struct acpi_data_node_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct acpi_data_node *, char *);
-	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
-};
-
-struct acpi_device_physical_node {
-	unsigned int node_id;
-	struct list_head node;
-	struct device *dev;
-	bool put_online: 1;
-};
-
-enum acpi_bus_device_type {
-	ACPI_BUS_TYPE_DEVICE = 0,
-	ACPI_BUS_TYPE_POWER = 1,
-	ACPI_BUS_TYPE_PROCESSOR = 2,
-	ACPI_BUS_TYPE_THERMAL = 3,
-	ACPI_BUS_TYPE_POWER_BUTTON = 4,
-	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
-	ACPI_BUS_TYPE_ECDT_EC = 6,
-	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
-};
-
-struct acpi_osc_context {
-	char *uuid_str;
-	int rev;
-	struct acpi_buffer cap;
-	struct acpi_buffer ret;
-};
-
-enum dev_dma_attr {
-	DEV_DMA_NOT_SUPPORTED = 0,
-	DEV_DMA_NON_COHERENT = 1,
-	DEV_DMA_COHERENT = 2,
-};
-
-struct acpi_pnp_device_id {
-	u32 length;
-	char *string;
-};
-
-struct acpi_pnp_device_id_list {
-	u32 count;
-	u32 list_size;
-	struct acpi_pnp_device_id ids[1];
-};
-
-struct acpi_device_info {
-	u32 info_size;
-	u32 name;
-	acpi_object_type type;
-	u8 param_count;
-	u16 valid;
-	u8 flags;
-	u8 highest_dstates[4];
-	u8 lowest_dstates[5];
-	u64 address;
-	struct acpi_pnp_device_id hardware_id;
-	struct acpi_pnp_device_id unique_id;
-	struct acpi_pnp_device_id class_code;
-	struct acpi_pnp_device_id_list compatible_id_list;
-};
-
-struct acpi_table_spcr {
-	struct acpi_table_header header;
-	u8 interface_type;
-	u8 reserved[3];
-	struct acpi_generic_address serial_port;
-	u8 interrupt_type;
-	u8 pc_interrupt;
-	u32 interrupt;
-	u8 baud_rate;
-	u8 parity;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 terminal_type;
-	u8 reserved1;
-	u16 pci_device_id;
-	u16 pci_vendor_id;
-	u8 pci_bus;
-	u8 pci_device;
-	u8 pci_function;
-	u32 pci_flags;
-	u8 pci_segment;
-	u32 reserved2;
-} __attribute__((packed));
-
-struct acpi_table_stao {
-	struct acpi_table_header header;
-	u8 ignore_uart;
-} __attribute__((packed));
-
-struct acpi_resource_irq {
-	u8 descriptor_length;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	u8 interrupts[1];
-};
-
-struct acpi_resource_dma {
-	u8 type;
-	u8 bus_master;
-	u8 transfer;
-	u8 channel_count;
-	u8 channels[1];
-};
-
-struct acpi_resource_start_dependent {
-	u8 descriptor_length;
-	u8 compatibility_priority;
-	u8 performance_robustness;
-};
-
-struct acpi_resource_io {
-	u8 io_decode;
-	u8 alignment;
-	u8 address_length;
-	u16 minimum;
-	u16 maximum;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_io {
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_dma {
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct acpi_resource_vendor {
-	u16 byte_length;
-	u8 byte_data[1];
-} __attribute__((packed));
-
-struct acpi_resource_vendor_typed {
-	u16 byte_length;
-	u8 uuid_subtype;
-	u8 uuid[16];
-	u8 byte_data[1];
-};
-
-struct acpi_resource_end_tag {
-	u8 checksum;
-};
-
-struct acpi_resource_memory24 {
-	u8 write_protect;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_memory32 {
-	u8 write_protect;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_resource_fixed_memory32 {
-	u8 write_protect;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct acpi_memory_attribute {
-	u8 write_protect;
-	u8 caching;
-	u8 range_type;
-	u8 translation;
-};
-
-struct acpi_io_attribute {
-	u8 range_type;
-	u8 translation;
-	u8 translation_type;
-	u8 reserved1;
-};
-
-union acpi_resource_attribute {
-	struct acpi_memory_attribute mem;
-	struct acpi_io_attribute io;
-	u8 type_specific;
-};
-
-struct acpi_resource_label {
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_resource_source {
-	u8 index;
-	u16 string_length;
-	char *string_ptr;
-} __attribute__((packed));
-
-struct acpi_address16_attribute {
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-};
-
-struct acpi_address32_attribute {
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-};
-
-struct acpi_address64_attribute {
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-};
-
-struct acpi_resource_address {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-};
-
-struct acpi_resource_address16 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address16_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address32 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address32_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	struct acpi_address64_attribute address;
-	struct acpi_resource_source resource_source;
-} __attribute__((packed));
-
-struct acpi_resource_extended_address64 {
-	u8 resource_type;
-	u8 producer_consumer;
-	u8 decode;
-	u8 min_address_fixed;
-	u8 max_address_fixed;
-	union acpi_resource_attribute info;
-	u8 revision_ID;
-	struct acpi_address64_attribute address;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct acpi_resource_extended_irq {
-	u8 producer_consumer;
-	u8 triggering;
-	u8 polarity;
-	u8 shareable;
-	u8 wake_capable;
-	u8 interrupt_count;
-	struct acpi_resource_source resource_source;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_resource_generic_register {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_resource_gpio {
-	u8 revision_id;
-	u8 connection_type;
-	u8 producer_consumer;
-	u8 pin_config;
-	u8 shareable;
-	u8 wake_capable;
-	u8 io_restriction;
-	u8 triggering;
-	u8 polarity;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_common_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_i2c_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 access_mode;
-	u16 slave_address;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_spi_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 wire_mode;
-	u8 device_polarity;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-	u32 connection_speed;
-} __attribute__((packed));
-
-struct acpi_resource_uart_serialbus {
-	u8 revision_id;
-	u8 type;
-	u8 producer_consumer;
-	u8 slave_mode;
-	u8 connection_sharing;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u8 *vendor_data;
-	u8 endian;
-	u8 data_bits;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 parity;
-	u8 lines_enabled;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u32 default_baud_rate;
-} __attribute__((packed));
-
-struct acpi_resource_pin_function {
-	u8 revision_id;
-	u8 pin_config;
-	u8 shareable;
-	u16 function_number;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_length;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	u16 *pin_table;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group {
-	u8 revision_id;
-	u8 producer_consumer;
-	u16 pin_table_length;
-	u16 vendor_length;
-	u16 *pin_table;
-	struct acpi_resource_label resource_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_function {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u16 function_number;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-struct acpi_resource_pin_group_config {
-	u8 revision_id;
-	u8 producer_consumer;
-	u8 shareable;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 vendor_length;
-	struct acpi_resource_source resource_source;
-	struct acpi_resource_label resource_source_label;
-	u8 *vendor_data;
-} __attribute__((packed));
-
-union acpi_resource_data {
-	struct acpi_resource_irq irq;
-	struct acpi_resource_dma dma;
-	struct acpi_resource_start_dependent start_dpf;
-	struct acpi_resource_io io;
-	struct acpi_resource_fixed_io fixed_io;
-	struct acpi_resource_fixed_dma fixed_dma;
-	struct acpi_resource_vendor vendor;
-	struct acpi_resource_vendor_typed vendor_typed;
-	struct acpi_resource_end_tag end_tag;
-	struct acpi_resource_memory24 memory24;
-	struct acpi_resource_memory32 memory32;
-	struct acpi_resource_fixed_memory32 fixed_memory32;
-	struct acpi_resource_address16 address16;
-	struct acpi_resource_address32 address32;
-	struct acpi_resource_address64 address64;
-	struct acpi_resource_extended_address64 ext_address64;
-	struct acpi_resource_extended_irq extended_irq;
-	struct acpi_resource_generic_register generic_reg;
-	struct acpi_resource_gpio gpio;
-	struct acpi_resource_i2c_serialbus i2c_serial_bus;
-	struct acpi_resource_spi_serialbus spi_serial_bus;
-	struct acpi_resource_uart_serialbus uart_serial_bus;
-	struct acpi_resource_common_serialbus common_serial_bus;
-	struct acpi_resource_pin_function pin_function;
-	struct acpi_resource_pin_config pin_config;
-	struct acpi_resource_pin_group pin_group;
-	struct acpi_resource_pin_group_function pin_group_function;
-	struct acpi_resource_pin_group_config pin_group_config;
-	struct acpi_resource_address address;
-};
-
-struct acpi_resource {
-	u32 type;
-	u32 length;
-	union acpi_resource_data data;
-} __attribute__((packed));
-
-enum acpi_reconfig_event {
-	ACPI_RECONFIG_DEVICE_ADD = 0,
-	ACPI_RECONFIG_DEVICE_REMOVE = 1,
-};
-
-struct acpi_probe_entry;
-
-typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
-
-struct acpi_probe_entry {
-	__u8 id[5];
-	__u8 type;
-	acpi_probe_entry_validate_subtbl subtable_valid;
-	union {
-		acpi_tbl_table_handler probe_table;
-		acpi_tbl_entry_handler probe_subtbl;
-	};
-	kernel_ulong_t driver_data;
-};
-
-struct acpi_dep_data {
-	struct list_head node;
-	acpi_handle master;
-	acpi_handle slave;
-};
-
-struct acpi_table_events_work {
-	struct work_struct work;
-	void *table;
-	u32 event;
-};
-
-struct resource_win {
-	struct resource res;
-	resource_size_t offset;
-};
-
-struct res_proc_context {
-	struct list_head *list;
-	int (*preproc)(struct acpi_resource *, void *);
-	void *preproc_data;
-	int count;
-	int error;
-};
-
-struct acpi_table_ecdt {
-	struct acpi_table_header header;
-	struct acpi_generic_address control;
-	struct acpi_generic_address data;
-	u32 uid;
-	u8 gpe;
-	u8 id[1];
-} __attribute__((packed));
-
-struct transaction {
-	const u8 *wdata;
-	u8 *rdata;
-	short unsigned int irq_count;
-	u8 command;
-	u8 wi;
-	u8 ri;
-	u8 wlen;
-	u8 rlen;
-	u8 flags;
-};
-
-typedef int (*acpi_ec_query_func)(void *);
-
-enum ec_command {
-	ACPI_EC_COMMAND_READ = 128,
-	ACPI_EC_COMMAND_WRITE = 129,
-	ACPI_EC_BURST_ENABLE = 130,
-	ACPI_EC_BURST_DISABLE = 131,
-	ACPI_EC_COMMAND_QUERY = 132,
-};
-
-enum {
-	EC_FLAGS_QUERY_ENABLED = 0,
-	EC_FLAGS_QUERY_PENDING = 1,
-	EC_FLAGS_QUERY_GUARDING = 2,
-	EC_FLAGS_EVENT_HANDLER_INSTALLED = 3,
-	EC_FLAGS_EC_HANDLER_INSTALLED = 4,
-	EC_FLAGS_QUERY_METHODS_INSTALLED = 5,
-	EC_FLAGS_STARTED = 6,
-	EC_FLAGS_STOPPED = 7,
-	EC_FLAGS_EVENTS_MASKED = 8,
-};
-
-struct acpi_ec_query_handler {
-	struct list_head node;
-	acpi_ec_query_func func;
-	acpi_handle handle;
-	void *data;
-	u8 query_bit;
-	struct kref kref;
-};
-
-struct acpi_ec_query {
-	struct transaction transaction;
-	struct work_struct work;
-	struct acpi_ec_query_handler *handler;
-};
-
-struct dock_station {
-	acpi_handle handle;
-	long unsigned int last_dock_time;
-	u32 flags;
-	struct list_head dependent_devices;
-	struct list_head sibling;
-	struct platform_device *dock_device;
-};
-
-struct dock_dependent_device {
-	struct list_head list;
-	struct acpi_device *adev;
-};
-
-enum dock_callback_type {
-	DOCK_CALL_HANDLER = 0,
-	DOCK_CALL_FIXUP = 1,
-	DOCK_CALL_UEVENT = 2,
-};
-
-struct acpi_pci_root_ops;
-
-struct acpi_pci_root_info {
-	struct acpi_pci_root *root;
-	struct acpi_device *bridge;
-	struct acpi_pci_root_ops *ops;
-	struct list_head resources;
-	char name[16];
-};
-
-struct acpi_pci_root_ops {
-	struct pci_ops *pci_ops;
-	int (*init_info)(struct acpi_pci_root_info *);
-	void (*release_info)(struct acpi_pci_root_info *);
-	int (*prepare_resources)(struct acpi_pci_root_info *);
-};
-
-struct pci_osc_bit_struct {
-	u32 bit;
-	char *desc;
-};
-
-struct acpi_handle_node {
-	struct list_head node;
-	acpi_handle handle;
-};
-
-struct acpi_pci_link_irq {
-	u32 active;
-	u8 triggering;
-	u8 polarity;
-	u8 resource_type;
-	u8 possible_count;
-	u32 possible[16];
-	u8 initialized: 1;
-	u8 reserved: 7;
-};
-
-struct acpi_pci_link {
-	struct list_head list;
-	struct acpi_device *device;
-	struct acpi_pci_link_irq irq;
-	int refcnt;
-};
-
-struct acpi_pci_routing_table {
-	u32 length;
-	u32 pin;
-	u64 address;
-	u32 source_index;
-	char source[4];
-};
-
-struct acpi_prt_entry {
-	struct acpi_pci_id id;
-	u8 pin;
-	acpi_handle link;
-	u32 index;
-};
-
-struct prt_quirk {
-	const struct dmi_system_id *system;
-	unsigned int segment;
-	unsigned int bus;
-	unsigned int device;
-	unsigned char pin;
-	const char *source;
-	const char *actual_source;
-};
-
-struct clk_core;
-
-struct clk_init_data;
-
-struct clk_hw {
-	struct clk_core *core;
-	struct clk *clk;
-	const struct clk_init_data *init;
-};
-
-struct clk_rate_request {
-	long unsigned int rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int best_parent_rate;
-	struct clk_hw *best_parent_hw;
-};
-
-struct clk_duty {
-	unsigned int num;
-	unsigned int den;
-};
-
-struct clk_ops {
-	int (*prepare)(struct clk_hw *);
-	void (*unprepare)(struct clk_hw *);
-	int (*is_prepared)(struct clk_hw *);
-	void (*unprepare_unused)(struct clk_hw *);
-	int (*enable)(struct clk_hw *);
-	void (*disable)(struct clk_hw *);
-	int (*is_enabled)(struct clk_hw *);
-	void (*disable_unused)(struct clk_hw *);
-	int (*save_context)(struct clk_hw *);
-	void (*restore_context)(struct clk_hw *);
-	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
-	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
-	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
-	int (*set_parent)(struct clk_hw *, u8);
-	u8 (*get_parent)(struct clk_hw *);
-	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
-	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
-	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
-	int (*get_phase)(struct clk_hw *);
-	int (*set_phase)(struct clk_hw *, int);
-	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	void (*init)(struct clk_hw *);
-	void (*debug_init)(struct clk_hw *, struct dentry *);
-};
-
-struct clk_parent_data {
-	const struct clk_hw *hw;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct clk_init_data {
-	const char *name;
-	const struct clk_ops *ops;
-	const char * const *parent_names;
-	const struct clk_parent_data *parent_data;
-	const struct clk_hw **parent_hws;
-	u8 num_parents;
-	long unsigned int flags;
-};
-
-struct apd_private_data;
-
-struct apd_device_desc {
-	unsigned int flags;
-	unsigned int fixed_clk_rate;
-	struct property_entry *properties;
-	int (*setup)(struct apd_private_data *);
-};
-
-struct apd_private_data {
-	struct clk *clk;
-	struct acpi_device *adev;
-	const struct apd_device_desc *dev_desc;
-};
-
-struct acpi_power_dependent_device {
-	struct device *dev;
-	struct list_head node;
-};
-
-struct acpi_power_resource {
-	struct acpi_device device;
-	struct list_head list_node;
-	char *name;
-	u32 system_level;
-	u32 order;
-	unsigned int ref_count;
-	bool wakeup_enabled;
-	struct mutex resource_lock;
-	struct list_head dependents;
-};
-
-struct acpi_power_resource_entry {
-	struct list_head node;
-	struct acpi_power_resource *resource;
-};
-
-struct acpi_bus_event {
-	struct list_head node;
-	acpi_device_class device_class;
-	acpi_bus_id bus_id;
-	u32 type;
-	u32 data;
-};
-
-struct acpi_genl_event {
-	acpi_device_class device_class;
-	char bus_id[15];
-	u32 type;
-	u32 data;
-};
-
-enum {
-	ACPI_GENL_ATTR_UNSPEC = 0,
-	ACPI_GENL_ATTR_EVENT = 1,
-	__ACPI_GENL_ATTR_MAX = 2,
-};
-
-enum {
-	ACPI_GENL_CMD_UNSPEC = 0,
-	ACPI_GENL_CMD_EVENT = 1,
-	__ACPI_GENL_CMD_MAX = 2,
-};
-
-struct acpi_ged_device {
-	struct device *dev;
-	struct list_head event_list;
-};
-
-struct acpi_ged_event {
-	struct list_head node;
-	struct device *dev;
-	unsigned int gsi;
-	unsigned int irq;
-	acpi_handle handle;
-};
-
-struct acpi_table_bert {
-	struct acpi_table_header header;
-	u32 region_length;
-	u64 address;
-};
-
-struct acpi_table_attr {
-	struct bin_attribute attr;
-	char name[4];
-	int instance;
-	char filename[8];
-	struct list_head node;
-};
-
-struct acpi_data_attr {
-	struct bin_attribute attr;
-	u64 addr;
-};
-
-struct acpi_data_obj {
-	char *name;
-	int (*fn)(void *, struct acpi_data_attr *);
-};
-
-struct event_counter {
-	u32 count;
-	u32 flags;
-};
-
-struct acpi_device_properties {
-	const guid_t *guid;
-	const union acpi_object *properties;
-	struct list_head list;
-};
-
-struct always_present_id {
-	struct acpi_device_id hid[2];
-	struct x86_cpu_id cpu_ids[2];
-	struct dmi_system_id dmi_ids[2];
-	const char *uid;
-};
-
-struct acpi_lpat {
-	int temp;
-	int raw;
-};
-
-struct acpi_lpat_conversion_table {
-	struct acpi_lpat *lpat;
-	int lpat_count;
-};
-
-struct acpi_table_lpit {
-	struct acpi_table_header header;
-};
-
-struct acpi_lpit_header {
-	u32 type;
-	u32 length;
-	u16 unique_id;
-	u16 reserved;
-	u32 flags;
-};
-
-struct acpi_lpit_native {
-	struct acpi_lpit_header header;
-	struct acpi_generic_address entry_trigger;
-	u32 residency;
-	u32 latency;
-	struct acpi_generic_address residency_counter;
-	u64 counter_frequency;
-} __attribute__((packed));
-
-struct lpit_residency_info {
-	struct acpi_generic_address gaddr;
-	u64 frequency;
-	void *iomem_addr;
-};
-
-enum {
-	ACPI_REFCLASS_LOCAL = 0,
-	ACPI_REFCLASS_ARG = 1,
-	ACPI_REFCLASS_REFOF = 2,
-	ACPI_REFCLASS_INDEX = 3,
-	ACPI_REFCLASS_TABLE = 4,
-	ACPI_REFCLASS_NAME = 5,
-	ACPI_REFCLASS_DEBUG = 6,
-	ACPI_REFCLASS_MAX = 6,
-};
-
-struct acpi_common_descriptor {
-	void *common_pointer;
-	u8 descriptor_type;
-};
-
-union acpi_descriptor {
-	struct acpi_common_descriptor common;
-	union acpi_operand_object object;
-	struct acpi_namespace_node node;
-	union acpi_parse_object op;
-};
-
-struct acpi_create_field_info {
-	struct acpi_namespace_node *region_node;
-	struct acpi_namespace_node *field_node;
-	struct acpi_namespace_node *register_node;
-	struct acpi_namespace_node *data_register_node;
-	struct acpi_namespace_node *connection_node;
-	u8 *resource_buffer;
-	u32 bank_value;
-	u32 field_bit_position;
-	u32 field_bit_length;
-	u16 resource_length;
-	u16 pin_number_index;
-	u8 field_flags;
-	u8 attribute;
-	u8 field_type;
-	u8 access_length;
-};
-
-struct acpi_init_walk_info {
-	u32 table_index;
-	u32 object_count;
-	u32 method_count;
-	u32 serial_method_count;
-	u32 non_serial_method_count;
-	u32 serialized_method_count;
-	u32 device_count;
-	u32 op_region_count;
-	u32 field_count;
-	u32 buffer_count;
-	u32 package_count;
-	u32 op_region_init;
-	u32 field_init;
-	u32 buffer_init;
-	u32 package_init;
-	acpi_owner_id owner_id;
-};
-
-struct acpi_name_info {
-	char name[4];
-	u16 argument_list;
-	u8 expected_btypes;
-} __attribute__((packed));
-
-struct acpi_package_info {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 object_type2;
-	u8 count2;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info2 {
-	u8 type;
-	u8 count;
-	u8 object_type[4];
-	u8 reserved;
-};
-
-struct acpi_package_info3 {
-	u8 type;
-	u8 count;
-	u8 object_type[2];
-	u8 tail_object_type;
-	u16 reserved;
-} __attribute__((packed));
-
-struct acpi_package_info4 {
-	u8 type;
-	u8 object_type1;
-	u8 count1;
-	u8 sub_object_types;
-	u8 pkg_count;
-	u16 reserved;
-} __attribute__((packed));
-
-union acpi_predefined_info {
-	struct acpi_name_info info;
-	struct acpi_package_info ret_info;
-	struct acpi_package_info2 ret_info2;
-	struct acpi_package_info3 ret_info3;
-	struct acpi_package_info4 ret_info4;
-};
-
-struct acpi_evaluate_info {
-	struct acpi_namespace_node *prefix_node;
-	const char *relative_pathname;
-	union acpi_operand_object **parameters;
-	struct acpi_namespace_node *node;
-	union acpi_operand_object *obj_desc;
-	char *full_pathname;
-	const union acpi_predefined_info *predefined;
-	union acpi_operand_object *return_object;
-	union acpi_operand_object *parent_package;
-	u32 return_flags;
-	u32 return_btype;
-	u16 param_count;
-	u16 node_flags;
-	u8 pass_number;
-	u8 return_object_type;
-	u8 flags;
-};
-
-enum {
-	AML_FIELD_ACCESS_ANY = 0,
-	AML_FIELD_ACCESS_BYTE = 1,
-	AML_FIELD_ACCESS_WORD = 2,
-	AML_FIELD_ACCESS_DWORD = 3,
-	AML_FIELD_ACCESS_QWORD = 4,
-	AML_FIELD_ACCESS_BUFFER = 5,
-};
-
-typedef enum {
-	ACPI_IMODE_LOAD_PASS1 = 1,
-	ACPI_IMODE_LOAD_PASS2 = 2,
-	ACPI_IMODE_EXECUTE = 3,
-} acpi_interpreter_mode;
-
-typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
-
-struct acpi_gpe_walk_info {
-	struct acpi_namespace_node *gpe_device;
-	struct acpi_gpe_block_info *gpe_block;
-	u16 count;
-	acpi_owner_id owner_id;
-	u8 execute_by_owner_id;
-};
-
-struct acpi_gpe_device_info {
-	u32 index;
-	u32 next_block_base_index;
-	acpi_status status;
-	struct acpi_namespace_node *gpe_device;
-};
-
-typedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *);
-
-struct acpi_connection_info {
-	u8 *connection;
-	u16 length;
-	u8 access_length;
-};
-
-struct acpi_reg_walk_info {
-	u32 function;
-	u32 reg_run_count;
-	acpi_adr_space_type space_id;
-};
-
-enum {
-	AML_FIELD_UPDATE_PRESERVE = 0,
-	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
-	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
-};
-
-struct acpi_signal_fatal_info {
-	u32 type;
-	u32 code;
-	u32 argument;
-};
-
-enum {
-	MATCH_MTR = 0,
-	MATCH_MEQ = 1,
-	MATCH_MLE = 2,
-	MATCH_MLT = 3,
-	MATCH_MGE = 4,
-	MATCH_MGT = 5,
-};
-
-enum {
-	AML_FIELD_ATTRIB_QUICK = 2,
-	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
-	AML_FIELD_ATTRIB_BYTE = 6,
-	AML_FIELD_ATTRIB_WORD = 8,
-	AML_FIELD_ATTRIB_BLOCK = 10,
-	AML_FIELD_ATTRIB_BYTES = 11,
-	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
-	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
-	AML_FIELD_ATTRIB_RAW_BYTES = 14,
-	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
-};
-
-typedef enum {
-	ACPI_TRACE_AML_METHOD = 0,
-	ACPI_TRACE_AML_OPCODE = 1,
-	ACPI_TRACE_AML_REGION = 2,
-} acpi_trace_event_type;
-
-struct acpi_port_info {
-	char *name;
-	u16 start;
-	u16 end;
-	u8 osi_dependency;
-};
-
-struct acpi_pci_device {
-	acpi_handle device;
-	struct acpi_pci_device *next;
-};
-
-struct acpi_device_walk_info {
-	struct acpi_table_desc *table_desc;
-	struct acpi_evaluate_info *evaluate_info;
-	u32 device_count;
-	u32 num_STA;
-	u32 num_INI;
-};
-
-enum acpi_return_package_types {
-	ACPI_PTYPE1_FIXED = 1,
-	ACPI_PTYPE1_VAR = 2,
-	ACPI_PTYPE1_OPTION = 3,
-	ACPI_PTYPE2 = 4,
-	ACPI_PTYPE2_COUNT = 5,
-	ACPI_PTYPE2_PKG_COUNT = 6,
-	ACPI_PTYPE2_FIXED = 7,
-	ACPI_PTYPE2_MIN = 8,
-	ACPI_PTYPE2_REV_FIXED = 9,
-	ACPI_PTYPE2_FIX_VAR = 10,
-	ACPI_PTYPE2_VAR_VAR = 11,
-	ACPI_PTYPE2_UUID_PAIR = 12,
-	ACPI_PTYPE_CUSTOM = 13,
-};
-
-typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);
-
-struct acpi_simple_repair_info {
-	char name[4];
-	u32 unexpected_btypes;
-	u32 package_index;
-	acpi_object_converter object_converter;
-};
-
-typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
-
-struct acpi_repair_info {
-	char name[4];
-	acpi_repair_function repair_function;
-};
-
-struct acpi_namestring_info {
-	const char *external_name;
-	const char *next_external_char;
-	char *internal_name;
-	u32 length;
-	u32 num_segments;
-	u32 num_carats;
-	u8 fully_qualified;
-};
-
-typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
-
-struct acpi_get_devices_info {
-	acpi_walk_callback user_function;
-	void *context;
-	const char *hid;
-};
-
-struct aml_resource_small_header {
-	u8 descriptor_type;
-};
-
-struct aml_resource_irq {
-	u8 descriptor_type;
-	u16 irq_mask;
-	u8 flags;
-} __attribute__((packed));
-
-struct aml_resource_dma {
-	u8 descriptor_type;
-	u8 dma_channel_mask;
-	u8 flags;
-};
-
-struct aml_resource_start_dependent {
-	u8 descriptor_type;
-	u8 flags;
-};
-
-struct aml_resource_end_dependent {
-	u8 descriptor_type;
-};
-
-struct aml_resource_io {
-	u8 descriptor_type;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u8 alignment;
-	u8 address_length;
-};
-
-struct aml_resource_fixed_io {
-	u8 descriptor_type;
-	u16 address;
-	u8 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_small {
-	u8 descriptor_type;
-};
-
-struct aml_resource_end_tag {
-	u8 descriptor_type;
-	u8 checksum;
-};
-
-struct aml_resource_fixed_dma {
-	u8 descriptor_type;
-	u16 request_lines;
-	u16 channels;
-	u8 width;
-} __attribute__((packed));
-
-struct aml_resource_large_header {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory24 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u16 minimum;
-	u16 maximum;
-	u16 alignment;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_vendor_large {
-	u8 descriptor_type;
-	u16 resource_length;
-} __attribute__((packed));
-
-struct aml_resource_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 minimum;
-	u32 maximum;
-	u32 alignment;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_fixed_memory32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u32 address;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-} __attribute__((packed));
-
-struct aml_resource_extended_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u8 revision_ID;
-	u8 reserved;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-	u64 type_specific;
-} __attribute__((packed));
-
-struct aml_resource_address64 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u64 granularity;
-	u64 minimum;
-	u64 maximum;
-	u64 translation_offset;
-	u64 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address32 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u32 granularity;
-	u32 minimum;
-	u32 maximum;
-	u32 translation_offset;
-	u32 address_length;
-} __attribute__((packed));
-
-struct aml_resource_address16 {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 resource_type;
-	u8 flags;
-	u8 specific_flags;
-	u16 granularity;
-	u16 minimum;
-	u16 maximum;
-	u16 translation_offset;
-	u16 address_length;
-} __attribute__((packed));
-
-struct aml_resource_extended_irq {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 flags;
-	u8 interrupt_count;
-	u32 interrupts[1];
-} __attribute__((packed));
-
-struct aml_resource_generic_register {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 address_space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct aml_resource_gpio {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 connection_type;
-	u16 flags;
-	u16 int_flags;
-	u8 pin_config;
-	u16 drive_strength;
-	u16 debounce_timeout;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_common_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-} __attribute__((packed));
-
-struct aml_resource_i2c_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u16 slave_address;
-} __attribute__((packed));
-
-struct aml_resource_spi_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 connection_speed;
-	u8 data_bit_length;
-	u8 clock_phase;
-	u8 clock_polarity;
-	u16 device_selection;
-} __attribute__((packed));
-
-struct aml_resource_uart_serialbus {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u8 res_source_index;
-	u8 type;
-	u8 flags;
-	u16 type_specific_flags;
-	u8 type_revision_id;
-	u16 type_data_length;
-	u32 default_baud_rate;
-	u16 rx_fifo_size;
-	u16 tx_fifo_size;
-	u8 parity;
-	u8 lines_enabled;
-} __attribute__((packed));
-
-struct aml_resource_pin_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config;
-	u16 function_number;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u16 pin_table_offset;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 pin_table_offset;
-	u16 label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_function {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u16 function_number;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-struct aml_resource_pin_group_config {
-	u8 descriptor_type;
-	u16 resource_length;
-	u8 revision_id;
-	u16 flags;
-	u8 pin_config_type;
-	u32 pin_config_value;
-	u8 res_source_index;
-	u16 res_source_offset;
-	u16 res_source_label_offset;
-	u16 vendor_offset;
-	u16 vendor_length;
-} __attribute__((packed));
-
-union aml_resource {
-	u8 descriptor_type;
-	struct aml_resource_small_header small_header;
-	struct aml_resource_large_header large_header;
-	struct aml_resource_irq irq;
-	struct aml_resource_dma dma;
-	struct aml_resource_start_dependent start_dpf;
-	struct aml_resource_end_dependent end_dpf;
-	struct aml_resource_io io;
-	struct aml_resource_fixed_io fixed_io;
-	struct aml_resource_fixed_dma fixed_dma;
-	struct aml_resource_vendor_small vendor_small;
-	struct aml_resource_end_tag end_tag;
-	struct aml_resource_memory24 memory24;
-	struct aml_resource_generic_register generic_reg;
-	struct aml_resource_vendor_large vendor_large;
-	struct aml_resource_memory32 memory32;
-	struct aml_resource_fixed_memory32 fixed_memory32;
-	struct aml_resource_address16 address16;
-	struct aml_resource_address32 address32;
-	struct aml_resource_address64 address64;
-	struct aml_resource_extended_address64 ext_address64;
-	struct aml_resource_extended_irq extended_irq;
-	struct aml_resource_gpio gpio;
-	struct aml_resource_i2c_serialbus i2c_serial_bus;
-	struct aml_resource_spi_serialbus spi_serial_bus;
-	struct aml_resource_uart_serialbus uart_serial_bus;
-	struct aml_resource_common_serialbus common_serial_bus;
-	struct aml_resource_pin_function pin_function;
-	struct aml_resource_pin_config pin_config;
-	struct aml_resource_pin_group pin_group;
-	struct aml_resource_pin_group_function pin_group_function;
-	struct aml_resource_pin_group_config pin_group_config;
-	struct aml_resource_address address;
-	u32 dword_item;
-	u16 word_item;
-	u8 byte_item;
-};
-
-struct acpi_rsconvert_info {
-	u8 opcode;
-	u8 resource_offset;
-	u8 aml_offset;
-	u8 value;
-};
-
-enum {
-	ACPI_RSC_INITGET = 0,
-	ACPI_RSC_INITSET = 1,
-	ACPI_RSC_FLAGINIT = 2,
-	ACPI_RSC_1BITFLAG = 3,
-	ACPI_RSC_2BITFLAG = 4,
-	ACPI_RSC_3BITFLAG = 5,
-	ACPI_RSC_ADDRESS = 6,
-	ACPI_RSC_BITMASK = 7,
-	ACPI_RSC_BITMASK16 = 8,
-	ACPI_RSC_COUNT = 9,
-	ACPI_RSC_COUNT16 = 10,
-	ACPI_RSC_COUNT_GPIO_PIN = 11,
-	ACPI_RSC_COUNT_GPIO_RES = 12,
-	ACPI_RSC_COUNT_GPIO_VEN = 13,
-	ACPI_RSC_COUNT_SERIAL_RES = 14,
-	ACPI_RSC_COUNT_SERIAL_VEN = 15,
-	ACPI_RSC_DATA8 = 16,
-	ACPI_RSC_EXIT_EQ = 17,
-	ACPI_RSC_EXIT_LE = 18,
-	ACPI_RSC_EXIT_NE = 19,
-	ACPI_RSC_LENGTH = 20,
-	ACPI_RSC_MOVE_GPIO_PIN = 21,
-	ACPI_RSC_MOVE_GPIO_RES = 22,
-	ACPI_RSC_MOVE_SERIAL_RES = 23,
-	ACPI_RSC_MOVE_SERIAL_VEN = 24,
-	ACPI_RSC_MOVE8 = 25,
-	ACPI_RSC_MOVE16 = 26,
-	ACPI_RSC_MOVE32 = 27,
-	ACPI_RSC_MOVE64 = 28,
-	ACPI_RSC_SET8 = 29,
-	ACPI_RSC_SOURCE = 30,
-	ACPI_RSC_SOURCEX = 31,
-};
-
-typedef u16 acpi_rs_length;
-
-typedef u32 acpi_rsdesc_size;
-
-struct acpi_vendor_uuid {
-	u8 subtype;
-	u8 data[16];
-};
-
-typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
-
-struct acpi_vendor_walk_info {
-	struct acpi_vendor_uuid *uuid;
-	struct acpi_buffer *buffer;
-	acpi_status status;
-};
-
-struct acpi_fadt_info {
-	const char *name;
-	u16 address64;
-	u16 address32;
-	u16 length;
-	u8 default_length;
-	u8 flags;
-};
-
-struct acpi_fadt_pm_info {
-	struct acpi_generic_address *target;
-	u16 source;
-	u8 register_num;
-};
-
-struct acpi_table_rsdp {
-	char signature[8];
-	u8 checksum;
-	char oem_id[6];
-	u8 revision;
-	u32 rsdt_physical_address;
-	u32 length;
-	u64 xsdt_physical_address;
-	u8 extended_checksum;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_pkg_info {
-	u8 *free_space;
-	acpi_size length;
-	u32 object_space;
-	u32 num_packages;
-};
-
-struct acpi_exception_info {
-	char *name;
-};
-
-typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
-
-typedef u32 acpi_mutex_handle;
-
-typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
-
-enum led_brightness {
-	LED_OFF = 0,
-	LED_ON = 1,
-	LED_HALF = 127,
-	LED_FULL = 255,
-};
-
-struct led_pattern;
-
-struct led_trigger;
-
-struct led_classdev {
-	const char *name;
-	enum led_brightness brightness;
-	enum led_brightness max_brightness;
-	int flags;
-	long unsigned int work_flags;
-	void (*brightness_set)(struct led_classdev *, enum led_brightness);
-	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
-	enum led_brightness (*brightness_get)(struct led_classdev *);
-	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
-	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
-	int (*pattern_clear)(struct led_classdev *);
-	struct device *dev;
-	const struct attribute_group **groups;
-	struct list_head node;
-	const char *default_trigger;
-	long unsigned int blink_delay_on;
-	long unsigned int blink_delay_off;
-	struct timer_list blink_timer;
-	int blink_brightness;
-	int new_blink_brightness;
-	void (*flash_resume)(struct led_classdev *);
-	struct work_struct set_brightness_work;
-	int delayed_set_value;
-	struct rw_semaphore trigger_lock;
-	struct led_trigger *trigger;
-	struct list_head trig_list;
-	void *trigger_data;
-	bool activated;
-	struct mutex led_access;
-};
-
-struct led_pattern {
-	u32 delta_t;
-	int brightness;
-};
-
-struct led_trigger {
-	const char *name;
-	int (*activate)(struct led_classdev *);
-	void (*deactivate)(struct led_classdev *);
-	rwlock_t leddev_list_lock;
-	struct list_head led_cdevs;
-	struct list_head next_trig;
-	const struct attribute_group **groups;
-};
-
-enum power_supply_property {
-	POWER_SUPPLY_PROP_STATUS = 0,
-	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
-	POWER_SUPPLY_PROP_HEALTH = 2,
-	POWER_SUPPLY_PROP_PRESENT = 3,
-	POWER_SUPPLY_PROP_ONLINE = 4,
-	POWER_SUPPLY_PROP_AUTHENTIC = 5,
-	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
-	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
-	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
-	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
-	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
-	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
-	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
-	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
-	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
-	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
-	POWER_SUPPLY_PROP_POWER_NOW = 20,
-	POWER_SUPPLY_PROP_POWER_AVG = 21,
-	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
-	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
-	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
-	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
-	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
-	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,
-	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,
-	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,
-	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,
-	POWER_SUPPLY_PROP_ENERGY_FULL = 42,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY = 43,
-	POWER_SUPPLY_PROP_ENERGY_NOW = 44,
-	POWER_SUPPLY_PROP_ENERGY_AVG = 45,
-	POWER_SUPPLY_PROP_CAPACITY = 46,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,
-	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 49,
-	POWER_SUPPLY_PROP_TEMP = 50,
-	POWER_SUPPLY_PROP_TEMP_MAX = 51,
-	POWER_SUPPLY_PROP_TEMP_MIN = 52,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 53,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 54,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT = 55,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 56,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 57,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 58,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 59,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 60,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 61,
-	POWER_SUPPLY_PROP_TYPE = 62,
-	POWER_SUPPLY_PROP_USB_TYPE = 63,
-	POWER_SUPPLY_PROP_SCOPE = 64,
-	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 65,
-	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 66,
-	POWER_SUPPLY_PROP_CALIBRATE = 67,
-	POWER_SUPPLY_PROP_MODEL_NAME = 68,
-	POWER_SUPPLY_PROP_MANUFACTURER = 69,
-	POWER_SUPPLY_PROP_SERIAL_NUMBER = 70,
-};
-
-enum power_supply_type {
-	POWER_SUPPLY_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_TYPE_BATTERY = 1,
-	POWER_SUPPLY_TYPE_UPS = 2,
-	POWER_SUPPLY_TYPE_MAINS = 3,
-	POWER_SUPPLY_TYPE_USB = 4,
-	POWER_SUPPLY_TYPE_USB_DCP = 5,
-	POWER_SUPPLY_TYPE_USB_CDP = 6,
-	POWER_SUPPLY_TYPE_USB_ACA = 7,
-	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
-	POWER_SUPPLY_TYPE_USB_PD = 9,
-	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
-	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
-};
-
-enum power_supply_usb_type {
-	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_USB_TYPE_SDP = 1,
-	POWER_SUPPLY_USB_TYPE_DCP = 2,
-	POWER_SUPPLY_USB_TYPE_CDP = 3,
-	POWER_SUPPLY_USB_TYPE_ACA = 4,
-	POWER_SUPPLY_USB_TYPE_C = 5,
-	POWER_SUPPLY_USB_TYPE_PD = 6,
-	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
-	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
-	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
-};
-
-union power_supply_propval {
-	int intval;
-	const char *strval;
-};
-
-struct power_supply_config {
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	void *drv_data;
-	const struct attribute_group **attr_grp;
-	char **supplied_to;
-	size_t num_supplicants;
-};
-
-struct power_supply;
-
-struct power_supply_desc {
-	const char *name;
-	enum power_supply_type type;
-	enum power_supply_usb_type *usb_types;
-	size_t num_usb_types;
-	enum power_supply_property *properties;
-	size_t num_properties;
-	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
-	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
-	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
-	void (*external_power_changed)(struct power_supply *);
-	void (*set_charged)(struct power_supply *);
-	bool no_thermal;
-	int use_for_apm;
-};
-
-struct power_supply {
-	const struct power_supply_desc *desc;
-	char **supplied_to;
-	size_t num_supplicants;
-	char **supplied_from;
-	size_t num_supplies;
-	struct device_node *of_node;
-	void *drv_data;
-	struct device dev;
-	struct work_struct changed_work;
-	struct delayed_work deferred_register_work;
-	spinlock_t changed_lock;
-	bool changed;
-	bool initialized;
-	bool removing;
-	atomic_t use_cnt;
-	struct thermal_zone_device *tzd;
-	struct thermal_cooling_device *tcd;
-	struct led_trigger *charging_full_trig;
-	char *charging_full_trig_name;
-	struct led_trigger *charging_trig;
-	char *charging_trig_name;
-	struct led_trigger *full_trig;
-	char *full_trig_name;
-	struct led_trigger *online_trig;
-	char *online_trig_name;
-	struct led_trigger *charging_blink_full_solid_trig;
-	char *charging_blink_full_solid_trig_name;
-};
-
-struct acpi_ac_bl {
-	const char *hid;
-	int hrv;
-};
-
-struct acpi_ac {
-	struct power_supply *charger;
-	struct power_supply_desc charger_desc;
-	struct acpi_device *device;
-	long long unsigned int state;
-	struct notifier_block battery_nb;
-};
-
-struct input_id {
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-};
-
-struct input_absinfo {
-	__s32 value;
-	__s32 minimum;
-	__s32 maximum;
-	__s32 fuzz;
-	__s32 flat;
-	__s32 resolution;
-};
-
-struct input_keymap_entry {
-	__u8 flags;
-	__u8 len;
-	__u16 index;
-	__u32 keycode;
-	__u8 scancode[32];
-};
-
-struct ff_replay {
-	__u16 length;
-	__u16 delay;
-};
-
-struct ff_trigger {
-	__u16 button;
-	__u16 interval;
-};
-
-struct ff_envelope {
-	__u16 attack_length;
-	__u16 attack_level;
-	__u16 fade_length;
-	__u16 fade_level;
-};
-
-struct ff_constant_effect {
-	__s16 level;
-	struct ff_envelope envelope;
-};
-
-struct ff_ramp_effect {
-	__s16 start_level;
-	__s16 end_level;
-	struct ff_envelope envelope;
-};
-
-struct ff_condition_effect {
-	__u16 right_saturation;
-	__u16 left_saturation;
-	__s16 right_coeff;
-	__s16 left_coeff;
-	__u16 deadband;
-	__s16 center;
-};
-
-struct ff_periodic_effect {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	__s16 *custom_data;
-};
-
-struct ff_rumble_effect {
-	__u16 strong_magnitude;
-	__u16 weak_magnitude;
-};
-
-struct ff_effect {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_device_id {
-	kernel_ulong_t flags;
-	__u16 bustype;
-	__u16 vendor;
-	__u16 product;
-	__u16 version;
-	kernel_ulong_t evbit[1];
-	kernel_ulong_t keybit[12];
-	kernel_ulong_t relbit[1];
-	kernel_ulong_t absbit[1];
-	kernel_ulong_t mscbit[1];
-	kernel_ulong_t ledbit[1];
-	kernel_ulong_t sndbit[1];
-	kernel_ulong_t ffbit[2];
-	kernel_ulong_t swbit[1];
-	kernel_ulong_t propbit[1];
-	kernel_ulong_t driver_info;
-};
-
-struct input_value {
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-enum input_clock_type {
-	INPUT_CLK_REAL = 0,
-	INPUT_CLK_MONO = 1,
-	INPUT_CLK_BOOT = 2,
-	INPUT_CLK_MAX = 3,
-};
-
-struct ff_device;
-
-struct input_dev_poller;
-
-struct input_mt;
-
-struct input_handle;
-
-struct input_dev {
-	const char *name;
-	const char *phys;
-	const char *uniq;
-	struct input_id id;
-	long unsigned int propbit[1];
-	long unsigned int evbit[1];
-	long unsigned int keybit[12];
-	long unsigned int relbit[1];
-	long unsigned int absbit[1];
-	long unsigned int mscbit[1];
-	long unsigned int ledbit[1];
-	long unsigned int sndbit[1];
-	long unsigned int ffbit[2];
-	long unsigned int swbit[1];
-	unsigned int hint_events_per_packet;
-	unsigned int keycodemax;
-	unsigned int keycodesize;
-	void *keycode;
-	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
-	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
-	struct ff_device *ff;
-	struct input_dev_poller *poller;
-	unsigned int repeat_key;
-	struct timer_list timer;
-	int rep[2];
-	struct input_mt *mt;
-	struct input_absinfo *absinfo;
-	long unsigned int key[12];
-	long unsigned int led[1];
-	long unsigned int snd[1];
-	long unsigned int sw[1];
-	int (*open)(struct input_dev *);
-	void (*close)(struct input_dev *);
-	int (*flush)(struct input_dev *, struct file *);
-	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
-	struct input_handle *grab;
-	spinlock_t event_lock;
-	struct mutex mutex;
-	unsigned int users;
-	bool going_away;
-	struct device dev;
-	struct list_head h_list;
-	struct list_head node;
-	unsigned int num_vals;
-	unsigned int max_vals;
-	struct input_value *vals;
-	bool devres_managed;
-	ktime_t timestamp[3];
-};
-
-struct ff_device {
-	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
-	int (*erase)(struct input_dev *, int);
-	int (*playback)(struct input_dev *, int, int);
-	void (*set_gain)(struct input_dev *, u16);
-	void (*set_autocenter)(struct input_dev *, u16);
-	void (*destroy)(struct ff_device *);
-	void *private;
-	long unsigned int ffbit[2];
-	struct mutex mutex;
-	int max_effects;
-	struct ff_effect *effects;
-	struct file *effect_owners[0];
-};
-
-struct input_handler;
-
-struct input_handle {
-	void *private;
-	int open;
-	const char *name;
-	struct input_dev *dev;
-	struct input_handler *handler;
-	struct list_head d_node;
-	struct list_head h_node;
-};
-
-struct input_handler {
-	void *private;
-	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
-	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
-	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
-	bool (*match)(struct input_handler *, struct input_dev *);
-	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
-	void (*disconnect)(struct input_handle *);
-	void (*start)(struct input_handle *);
-	bool legacy_minors;
-	int minor;
-	const char *name;
-	const struct input_device_id *id_table;
-	struct list_head h_list;
-	struct list_head node;
-};
-
-enum {
-	ACPI_BUTTON_LID_INIT_IGNORE = 0,
-	ACPI_BUTTON_LID_INIT_OPEN = 1,
-	ACPI_BUTTON_LID_INIT_METHOD = 2,
-	ACPI_BUTTON_LID_INIT_DISABLED = 3,
-};
-
-struct acpi_button {
-	unsigned int type;
-	struct input_dev *input;
-	char phys[32];
-	long unsigned int pushed;
-	int last_state;
-	ktime_t last_time;
-	bool suspended;
-};
-
-struct acpi_fan_fps {
-	u64 control;
-	u64 trip_point;
-	u64 speed;
-	u64 noise_level;
-	u64 power;
-};
-
-struct acpi_fan_fif {
-	u64 revision;
-	u64 fine_grain_ctrl;
-	u64 step_size;
-	u64 low_speed_notification;
-};
-
-struct acpi_fan {
-	bool acpi4;
-	struct acpi_fan_fif fif;
-	struct acpi_fan_fps *fps;
-	int fps_count;
-	struct thermal_cooling_device *cdev;
-};
-
-struct acpi_video_brightness_flags {
-	u8 _BCL_no_ac_battery_levels: 1;
-	u8 _BCL_reversed: 1;
-	u8 _BQC_use_index: 1;
-};
-
-struct acpi_video_device_brightness {
-	int curr;
-	int count;
-	int *levels;
-	struct acpi_video_brightness_flags flags;
-};
-
-enum acpi_backlight_type {
-	acpi_backlight_undef = 4294967295,
-	acpi_backlight_none = 0,
-	acpi_backlight_video = 1,
-	acpi_backlight_vendor = 2,
-	acpi_backlight_native = 3,
-};
-
-enum acpi_video_level_idx {
-	ACPI_VIDEO_AC_LEVEL = 0,
-	ACPI_VIDEO_BATTERY_LEVEL = 1,
-	ACPI_VIDEO_FIRST_LEVEL = 2,
-};
-
-struct acpi_video_bus_flags {
-	u8 multihead: 1;
-	u8 rom: 1;
-	u8 post: 1;
-	u8 reserved: 5;
-};
-
-struct acpi_video_bus_cap {
-	u8 _DOS: 1;
-	u8 _DOD: 1;
-	u8 _ROM: 1;
-	u8 _GPD: 1;
-	u8 _SPD: 1;
-	u8 _VPO: 1;
-	u8 reserved: 2;
-};
-
-struct acpi_video_device_attrib {
-	u32 display_index: 4;
-	u32 display_port_attachment: 4;
-	u32 display_type: 4;
-	u32 vendor_specific: 4;
-	u32 bios_can_detect: 1;
-	u32 depend_on_vga: 1;
-	u32 pipe_id: 3;
-	u32 reserved: 10;
-	u32 device_id_scheme: 1;
-};
-
-struct acpi_video_device;
-
-struct acpi_video_enumerated_device {
-	union {
-		u32 int_val;
-		struct acpi_video_device_attrib attrib;
-	} value;
-	struct acpi_video_device *bind_info;
-};
-
-struct acpi_video_device_flags {
-	u8 crt: 1;
-	u8 lcd: 1;
-	u8 tvout: 1;
-	u8 dvi: 1;
-	u8 bios: 1;
-	u8 unknown: 1;
-	u8 notify: 1;
-	u8 reserved: 1;
-};
-
-struct acpi_video_device_cap {
-	u8 _ADR: 1;
-	u8 _BCL: 1;
-	u8 _BCM: 1;
-	u8 _BQC: 1;
-	u8 _BCQ: 1;
-	u8 _DDC: 1;
-};
-
-struct acpi_video_bus;
-
-struct acpi_video_device {
-	long unsigned int device_id;
-	struct acpi_video_device_flags flags;
-	struct acpi_video_device_cap cap;
-	struct list_head entry;
-	struct delayed_work switch_brightness_work;
-	int switch_brightness_event;
-	struct acpi_video_bus *video;
-	struct acpi_device *dev;
-	struct acpi_video_device_brightness *brightness;
-	struct backlight_device *backlight;
-	struct thermal_cooling_device *cooling_dev;
-};
-
-struct acpi_video_bus {
-	struct acpi_device *device;
-	bool backlight_registered;
-	u8 dos_setting;
-	struct acpi_video_enumerated_device *attached_array;
-	u8 attached_count;
-	u8 child_count;
-	struct acpi_video_bus_cap cap;
-	struct acpi_video_bus_flags flags;
-	struct list_head video_device_list;
-	struct mutex device_list_lock;
-	struct list_head entry;
-	struct input_dev *input;
-	char phys[32];
-	struct notifier_block pm_nb;
-};
-
-struct acpi_lpi_states_array {
-	unsigned int size;
-	unsigned int composite_states_size;
-	struct acpi_lpi_state *entries;
-	struct acpi_lpi_state *composite_states[8];
-};
-
-struct throttling_tstate {
-	unsigned int cpu;
-	int target_state;
-};
-
-struct acpi_processor_throttling_arg {
-	struct acpi_processor *pr;
-	int target_state;
-	bool force;
-};
-
-struct container_dev {
-	struct device dev;
-	int (*offline)(struct container_dev *);
-};
-
-struct acpi_thermal_state {
-	u8 critical: 1;
-	u8 hot: 1;
-	u8 passive: 1;
-	u8 active: 1;
-	u8 reserved: 4;
-	int active_index;
-};
-
-struct acpi_thermal_state_flags {
-	u8 valid: 1;
-	u8 enabled: 1;
-	u8 reserved: 6;
-};
-
-struct acpi_thermal_critical {
-	struct acpi_thermal_state_flags flags;
-	long unsigned int temperature;
-};
-
-struct acpi_thermal_hot {
-	struct acpi_thermal_state_flags flags;
-	long unsigned int temperature;
-};
-
-struct acpi_thermal_passive {
-	struct acpi_thermal_state_flags flags;
-	long unsigned int temperature;
-	long unsigned int tc1;
-	long unsigned int tc2;
-	long unsigned int tsp;
-	struct acpi_handle_list devices;
-};
-
-struct acpi_thermal_active {
-	struct acpi_thermal_state_flags flags;
-	long unsigned int temperature;
-	struct acpi_handle_list devices;
-};
-
-struct acpi_thermal_trips {
-	struct acpi_thermal_critical critical;
-	struct acpi_thermal_hot hot;
-	struct acpi_thermal_passive passive;
-	struct acpi_thermal_active active[10];
-};
-
-struct acpi_thermal_flags {
-	u8 cooling_mode: 1;
-	u8 devices: 1;
-	u8 reserved: 6;
-};
-
-struct acpi_thermal {
-	struct acpi_device *device;
-	acpi_bus_id name;
-	long unsigned int temperature;
-	long unsigned int last_temperature;
-	long unsigned int polling_frequency;
-	volatile u8 zombie;
-	struct acpi_thermal_flags flags;
-	struct acpi_thermal_state state;
-	struct acpi_thermal_trips trips;
-	struct acpi_handle_list devices;
-	struct thermal_zone_device *thermal_zone;
-	int tz_enabled;
-	int kelvin_offset;
-	struct work_struct thermal_check_work;
-};
-
-struct acpi_table_slit {
-	struct acpi_table_header header;
-	u64 locality_count;
-	u8 entry[1];
-} __attribute__((packed));
-
-struct acpi_table_srat {
-	struct acpi_table_header header;
-	u32 table_revision;
-	u64 reserved;
-};
-
-enum acpi_srat_type {
-	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
-	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
-	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
-	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
-	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
-	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
-	ACPI_SRAT_TYPE_RESERVED = 6,
-};
-
-struct acpi_srat_mem_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u64 base_address;
-	u64 length;
-	u32 reserved1;
-	u32 flags;
-	u64 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_gicc_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u32 acpi_processor_uid;
-	u32 flags;
-	u32 clock_domain;
-} __attribute__((packed));
-
-struct acpi_pci_ioapic {
-	acpi_handle root_handle;
-	acpi_handle handle;
-	u32 gsi_base;
-	struct resource res;
-	struct pci_dev *pdev;
-	struct list_head list;
-};
-
-enum dmi_entry_type {
-	DMI_ENTRY_BIOS = 0,
-	DMI_ENTRY_SYSTEM = 1,
-	DMI_ENTRY_BASEBOARD = 2,
-	DMI_ENTRY_CHASSIS = 3,
-	DMI_ENTRY_PROCESSOR = 4,
-	DMI_ENTRY_MEM_CONTROLLER = 5,
-	DMI_ENTRY_MEM_MODULE = 6,
-	DMI_ENTRY_CACHE = 7,
-	DMI_ENTRY_PORT_CONNECTOR = 8,
-	DMI_ENTRY_SYSTEM_SLOT = 9,
-	DMI_ENTRY_ONBOARD_DEVICE = 10,
-	DMI_ENTRY_OEMSTRINGS = 11,
-	DMI_ENTRY_SYSCONF = 12,
-	DMI_ENTRY_BIOS_LANG = 13,
-	DMI_ENTRY_GROUP_ASSOC = 14,
-	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
-	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
-	DMI_ENTRY_MEM_DEVICE = 17,
-	DMI_ENTRY_32_MEM_ERROR = 18,
-	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
-	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
-	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
-	DMI_ENTRY_PORTABLE_BATTERY = 22,
-	DMI_ENTRY_SYSTEM_RESET = 23,
-	DMI_ENTRY_HW_SECURITY = 24,
-	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
-	DMI_ENTRY_VOLTAGE_PROBE = 26,
-	DMI_ENTRY_COOLING_DEV = 27,
-	DMI_ENTRY_TEMP_PROBE = 28,
-	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
-	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
-	DMI_ENTRY_BIS_ENTRY = 31,
-	DMI_ENTRY_SYSTEM_BOOT = 32,
-	DMI_ENTRY_MGMT_DEV = 33,
-	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
-	DMI_ENTRY_MGMT_DEV_THRES = 35,
-	DMI_ENTRY_MEM_CHANNEL = 36,
-	DMI_ENTRY_IPMI_DEV = 37,
-	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
-	DMI_ENTRY_ADDITIONAL = 39,
-	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
-	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
-	DMI_ENTRY_INACTIVE = 126,
-	DMI_ENTRY_END_OF_TABLE = 127,
-};
-
-struct dmi_header {
-	u8 type;
-	u8 length;
-	u16 handle;
-};
-
-enum {
-	POWER_SUPPLY_STATUS_UNKNOWN = 0,
-	POWER_SUPPLY_STATUS_CHARGING = 1,
-	POWER_SUPPLY_STATUS_DISCHARGING = 2,
-	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
-	POWER_SUPPLY_STATUS_FULL = 4,
-};
-
-enum {
-	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
-	POWER_SUPPLY_TECHNOLOGY_LION = 2,
-	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
-	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
-	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
-	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
-};
-
-enum {
-	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
-	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
-	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
-	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
-	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
-};
-
-struct acpi_battery_hook {
-	const char *name;
-	int (*add_battery)(struct power_supply *);
-	int (*remove_battery)(struct power_supply *);
-	struct list_head list;
-};
-
-enum {
-	ACPI_BATTERY_ALARM_PRESENT = 0,
-	ACPI_BATTERY_XINFO_PRESENT = 1,
-	ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,
-	ACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,
-	ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,
-};
-
-struct acpi_battery {
-	struct mutex lock;
-	struct mutex sysfs_lock;
-	struct power_supply *bat;
-	struct power_supply_desc bat_desc;
-	struct acpi_device *device;
-	struct notifier_block pm_nb;
-	struct list_head list;
-	long unsigned int update_time;
-	int revision;
-	int rate_now;
-	int capacity_now;
-	int voltage_now;
-	int design_capacity;
-	int full_charge_capacity;
-	int technology;
-	int design_voltage;
-	int design_capacity_warning;
-	int design_capacity_low;
-	int cycle_count;
-	int measurement_accuracy;
-	int max_sampling_time;
-	int min_sampling_time;
-	int max_averaging_interval;
-	int min_averaging_interval;
-	int capacity_granularity_1;
-	int capacity_granularity_2;
-	int alarm;
-	char model_number[32];
-	char serial_number[32];
-	char type[32];
-	char oem_info[32];
-	int state;
-	int power_unit;
-	long unsigned int flags;
-};
-
-struct acpi_offsets {
-	size_t offset;
-	u8 mode;
-};
-
-struct acpi_pcct_hw_reduced {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_shared_memory {
-	u32 signature;
-	u16 command;
-	u16 status;
-};
-
-struct mbox_chan;
-
-struct mbox_chan_ops {
-	int (*send_data)(struct mbox_chan *, void *);
-	int (*flush)(struct mbox_chan *, long unsigned int);
-	int (*startup)(struct mbox_chan *);
-	void (*shutdown)(struct mbox_chan *);
-	bool (*last_tx_done)(struct mbox_chan *);
-	bool (*peek_data)(struct mbox_chan *);
-};
-
-struct mbox_controller;
-
-struct mbox_client;
-
-struct mbox_chan {
-	struct mbox_controller *mbox;
-	unsigned int txdone_method;
-	struct mbox_client *cl;
-	struct completion tx_complete;
-	void *active_req;
-	unsigned int msg_count;
-	unsigned int msg_free;
-	void *msg_data[20];
-	spinlock_t lock;
-	void *con_priv;
-};
-
-struct mbox_controller {
-	struct device *dev;
-	const struct mbox_chan_ops *ops;
-	struct mbox_chan *chans;
-	int num_chans;
-	bool txdone_irq;
-	bool txdone_poll;
-	unsigned int txpoll_period;
-	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
-	struct hrtimer poll_hrt;
-	struct list_head node;
-};
-
-struct mbox_client {
-	struct device *dev;
-	bool tx_block;
-	long unsigned int tx_tout;
-	bool knows_txdone;
-	void (*rx_callback)(struct mbox_client *, void *);
-	void (*tx_prepare)(struct mbox_client *, void *);
-	void (*tx_done)(struct mbox_client *, void *, int);
-};
-
-struct cpc_register_resource {
-	acpi_object_type type;
-	u64 *sys_mem_vaddr;
-	union {
-		struct cpc_reg reg;
-		u64 int_value;
-	} cpc_entry;
-};
-
-struct cpc_desc {
-	int num_entries;
-	int version;
-	int cpu_id;
-	int write_cmd_status;
-	int write_cmd_id;
-	struct cpc_register_resource cpc_regs[21];
-	struct acpi_psd_package domain_info;
-	struct kobject kobj;
-};
-
-enum cppc_regs {
-	HIGHEST_PERF = 0,
-	NOMINAL_PERF = 1,
-	LOW_NON_LINEAR_PERF = 2,
-	LOWEST_PERF = 3,
-	GUARANTEED_PERF = 4,
-	DESIRED_PERF = 5,
-	MIN_PERF = 6,
-	MAX_PERF = 7,
-	PERF_REDUC_TOLERANCE = 8,
-	TIME_WINDOW = 9,
-	CTR_WRAP_TIME = 10,
-	REFERENCE_CTR = 11,
-	DELIVERED_CTR = 12,
-	PERF_LIMITED = 13,
-	ENABLE = 14,
-	AUTO_SEL_ENABLE = 15,
-	AUTO_ACT_WINDOW = 16,
-	ENERGY_PERF = 17,
-	REFERENCE_PERF = 18,
-	LOWEST_FREQ = 19,
-	NOMINAL_FREQ = 20,
-};
-
-struct cppc_perf_caps {
-	u32 guaranteed_perf;
-	u32 highest_perf;
-	u32 nominal_perf;
-	u32 lowest_perf;
-	u32 lowest_nonlinear_perf;
-	u32 lowest_freq;
-	u32 nominal_freq;
-};
-
-struct cppc_perf_ctrls {
-	u32 max_perf;
-	u32 min_perf;
-	u32 desired_perf;
-};
-
-struct cppc_perf_fb_ctrs {
-	u64 reference;
-	u64 delivered;
-	u64 reference_perf;
-	u64 wraparound_time;
-};
-
-struct cppc_cpudata {
-	int cpu;
-	struct cppc_perf_caps perf_caps;
-	struct cppc_perf_ctrls perf_ctrls;
-	struct cppc_perf_fb_ctrs perf_fb_ctrs;
-	struct cpufreq_policy *cur_policy;
-	unsigned int shared_type;
-	cpumask_var_t shared_cpu_map;
-};
-
-struct cppc_pcc_data {
-	struct mbox_chan *pcc_channel;
-	void *pcc_comm_addr;
-	bool pcc_channel_acquired;
-	unsigned int deadline_us;
-	unsigned int pcc_mpar;
-	unsigned int pcc_mrtt;
-	unsigned int pcc_nominal;
-	bool pending_pcc_write_cmd;
-	bool platform_owns_pcc;
-	unsigned int pcc_write_cnt;
-	struct rw_semaphore pcc_lock;
-	wait_queue_head_t pcc_write_wait_q;
-	ktime_t last_cmd_cmpl_time;
-	ktime_t last_mpar_reset;
-	int mpar_count;
-	int refcount;
-};
-
-struct cppc_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, ssize_t);
-};
-
-struct pnp_resource {
-	struct list_head list;
-	struct resource res;
-};
-
-struct pnp_port {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-typedef struct {
-	long unsigned int bits[4];
-} pnp_irq_mask_t;
-
-struct pnp_irq {
-	pnp_irq_mask_t map;
-	unsigned char flags;
-};
-
-struct pnp_dma {
-	unsigned char map;
-	unsigned char flags;
-};
-
-struct pnp_mem {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-struct pnp_option {
-	struct list_head list;
-	unsigned int flags;
-	long unsigned int type;
-	union {
-		struct pnp_port port;
-		struct pnp_irq irq;
-		struct pnp_dma dma;
-		struct pnp_mem mem;
-	} u;
-};
-
-struct pnp_info_buffer {
-	char *buffer;
-	char *curr;
-	long unsigned int size;
-	long unsigned int len;
-	int stop;
-	int error;
-};
-
-typedef struct pnp_info_buffer pnp_info_buffer_t;
-
-struct pnp_fixup {
-	char id[7];
-	void (*quirk_function)(struct pnp_dev *);
-};
-
-struct acpipnp_parse_option_s {
-	struct pnp_dev *dev;
-	unsigned int option_flags;
-};
-
-struct clk_bulk_data {
-	const char *id;
-	struct clk *clk;
-};
-
-struct clk_bulk_devres {
-	struct clk_bulk_data *clks;
-	int num_clks;
-};
-
-struct clk_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct clk *clk;
-	struct clk_hw *clk_hw;
-};
-
-struct clk_lookup_alloc {
-	struct clk_lookup cl;
-	char dev_id[20];
-	char con_id[16];
-};
-
-struct clk_notifier {
-	struct clk *clk;
-	struct srcu_notifier_head notifier_head;
-	struct list_head node;
-};
-
-struct clk {
-	struct clk_core *core;
-	struct device *dev;
-	const char *dev_id;
-	const char *con_id;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	unsigned int exclusive_count;
-	struct hlist_node clks_node;
-};
-
-struct clk_notifier_data {
-	struct clk *clk;
-	long unsigned int old_rate;
-	long unsigned int new_rate;
-};
-
-struct clk_parent_map;
-
-struct clk_core {
-	const char *name;
-	const struct clk_ops *ops;
-	struct clk_hw *hw;
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct clk_core *parent;
-	struct clk_parent_map *parents;
-	u8 num_parents;
-	u8 new_parent_index;
-	long unsigned int rate;
-	long unsigned int req_rate;
-	long unsigned int new_rate;
-	struct clk_core *new_parent;
-	struct clk_core *new_child;
-	long unsigned int flags;
-	bool orphan;
-	bool rpm_enabled;
-	unsigned int enable_count;
-	unsigned int prepare_count;
-	unsigned int protect_count;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int accuracy;
-	int phase;
-	struct clk_duty duty;
-	struct hlist_head children;
-	struct hlist_node child_node;
-	struct hlist_head clks;
-	unsigned int notifier_count;
-	struct dentry *dentry;
-	struct hlist_node debug_node;
-	struct kref ref;
-};
-
-struct clk_parent_map {
-	const struct clk_hw *hw;
-	struct clk_core *core;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct trace_event_raw_clk {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_rate {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int rate;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_parent {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_pname;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_phase {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int phase;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_duty_cycle {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int num;
-	unsigned int den;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_clk {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_rate {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_parent {
-	u32 name;
-	u32 pname;
-};
-
-struct trace_event_data_offsets_clk_phase {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_duty_cycle {
-	u32 name;
-};
-
-typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
-
-typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
-
-struct clk_div_table {
-	unsigned int val;
-	unsigned int div;
-};
-
-struct clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-struct clk_fixed_factor {
-	struct clk_hw hw;
-	unsigned int mult;
-	unsigned int div;
-};
-
-struct clk_fixed_rate {
-	struct clk_hw hw;
-	long unsigned int fixed_rate;
-	long unsigned int fixed_accuracy;
-};
-
-struct clk_gate {
-	struct clk_hw hw;
-	void *reg;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_multiplier {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_mux {
-	struct clk_hw hw;
-	void *reg;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_composite {
-	struct clk_hw hw;
-	struct clk_ops ops;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *rate_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct clk_fractional_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 mshift;
-	u8 mwidth;
-	u32 mmask;
-	u8 nshift;
-	u8 nwidth;
-	u32 nmask;
-	u8 flags;
-	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
-	spinlock_t *lock;
-};
-
-struct gpio_desc;
-
-struct clk_gpio {
-	struct clk_hw hw;
-	struct gpio_desc *gpiod;
-};
-
-enum gpiod_flags {
-	GPIOD_ASIS = 0,
-	GPIOD_IN = 1,
-	GPIOD_OUT_LOW = 3,
-	GPIOD_OUT_HIGH = 7,
-	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
-	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
-};
-
-struct pmc_clk {
-	const char *name;
-	long unsigned int freq;
-	const char *parent_name;
-};
-
-struct pmc_clk_data {
-	void *base;
-	const struct pmc_clk *clks;
-	bool critical;
-};
-
-struct clk_plt_fixed {
-	struct clk_hw *clk;
-	struct clk_lookup *lookup;
-};
-
-struct clk_plt {
-	struct clk_hw hw;
-	void *reg;
-	struct clk_lookup *lookup;
-	spinlock_t lock;
-};
-
-struct clk_plt_data {
-	struct clk_plt_fixed **parents;
-	u8 nparents;
-	struct clk_plt *clks[6];
-	struct clk_lookup *mclk_lookup;
-	struct clk_lookup *ether_clk_lookup;
-};
-
-typedef s32 dma_cookie_t;
-
-enum dma_status {
-	DMA_COMPLETE = 0,
-	DMA_IN_PROGRESS = 1,
-	DMA_PAUSED = 2,
-	DMA_ERROR = 3,
-};
-
-enum dma_transaction_type {
-	DMA_MEMCPY = 0,
-	DMA_XOR = 1,
-	DMA_PQ = 2,
-	DMA_XOR_VAL = 3,
-	DMA_PQ_VAL = 4,
-	DMA_MEMSET = 5,
-	DMA_MEMSET_SG = 6,
-	DMA_INTERRUPT = 7,
-	DMA_PRIVATE = 8,
-	DMA_ASYNC_TX = 9,
-	DMA_SLAVE = 10,
-	DMA_CYCLIC = 11,
-	DMA_INTERLEAVE = 12,
-	DMA_TX_TYPE_END = 13,
-};
-
-enum dma_transfer_direction {
-	DMA_MEM_TO_MEM = 0,
-	DMA_MEM_TO_DEV = 1,
-	DMA_DEV_TO_MEM = 2,
-	DMA_DEV_TO_DEV = 3,
-	DMA_TRANS_NONE = 4,
-};
-
-struct data_chunk {
-	size_t size;
-	size_t icg;
-	size_t dst_icg;
-	size_t src_icg;
-};
-
-struct dma_interleaved_template {
-	dma_addr_t src_start;
-	dma_addr_t dst_start;
-	enum dma_transfer_direction dir;
-	bool src_inc;
-	bool dst_inc;
-	bool src_sgl;
-	bool dst_sgl;
-	size_t numf;
-	size_t frame_size;
-	struct data_chunk sgl[0];
-};
-
-enum dma_ctrl_flags {
-	DMA_PREP_INTERRUPT = 1,
-	DMA_CTRL_ACK = 2,
-	DMA_PREP_PQ_DISABLE_P = 4,
-	DMA_PREP_PQ_DISABLE_Q = 8,
-	DMA_PREP_CONTINUE = 16,
-	DMA_PREP_FENCE = 32,
-	DMA_CTRL_REUSE = 64,
-	DMA_PREP_CMD = 128,
-};
-
-enum sum_check_bits {
-	SUM_CHECK_P = 0,
-	SUM_CHECK_Q = 1,
-};
-
-enum sum_check_flags {
-	SUM_CHECK_P_RESULT = 1,
-	SUM_CHECK_Q_RESULT = 2,
-};
-
-typedef struct {
-	long unsigned int bits[1];
-} dma_cap_mask_t;
-
-struct dma_chan_percpu {
-	long unsigned int memcpy_count;
-	long unsigned int bytes_transferred;
-};
-
-struct dma_router {
-	struct device *dev;
-	void (*route_free)(struct device *, void *);
-};
-
-struct dma_device;
-
-struct dma_chan_dev;
-
-struct dma_chan___2 {
-	struct dma_device *device;
-	dma_cookie_t cookie;
-	dma_cookie_t completed_cookie;
-	int chan_id;
-	struct dma_chan_dev *dev;
-	struct list_head device_node;
-	struct dma_chan_percpu *local;
-	int client_count;
-	int table_count;
-	struct dma_router *router;
-	void *route_data;
-	void *private;
-};
-
-typedef bool (*dma_filter_fn)(struct dma_chan___2 *, void *);
-
-struct dma_slave_map;
-
-struct dma_filter {
-	dma_filter_fn fn;
-	int mapcnt;
-	const struct dma_slave_map *map;
-};
-
-enum dmaengine_alignment {
-	DMAENGINE_ALIGN_1_BYTE = 0,
-	DMAENGINE_ALIGN_2_BYTES = 1,
-	DMAENGINE_ALIGN_4_BYTES = 2,
-	DMAENGINE_ALIGN_8_BYTES = 3,
-	DMAENGINE_ALIGN_16_BYTES = 4,
-	DMAENGINE_ALIGN_32_BYTES = 5,
-	DMAENGINE_ALIGN_64_BYTES = 6,
-};
-
-enum dma_residue_granularity {
-	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
-	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
-	DMA_RESIDUE_GRANULARITY_BURST = 2,
-};
-
-struct dma_async_tx_descriptor;
-
-struct dma_slave_config;
-
-struct dma_tx_state;
-
-struct dma_device {
-	unsigned int chancnt;
-	unsigned int privatecnt;
-	struct list_head channels;
-	struct list_head global_node;
-	struct dma_filter filter;
-	dma_cap_mask_t cap_mask;
-	short unsigned int max_xor;
-	short unsigned int max_pq;
-	enum dmaengine_alignment copy_align;
-	enum dmaengine_alignment xor_align;
-	enum dmaengine_alignment pq_align;
-	enum dmaengine_alignment fill_align;
-	int dev_id;
-	struct device *dev;
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 max_burst;
-	bool descriptor_reuse;
-	enum dma_residue_granularity residue_granularity;
-	int (*device_alloc_chan_resources)(struct dma_chan___2 *);
-	void (*device_free_chan_resources)(struct dma_chan___2 *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan___2 *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan___2 *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan___2 *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan___2 *, dma_addr_t, int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, int, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan___2 *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan___2 *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan___2 *, struct dma_interleaved_template *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan___2 *, dma_addr_t, u64, long unsigned int);
-	int (*device_config)(struct dma_chan___2 *, struct dma_slave_config *);
-	int (*device_pause)(struct dma_chan___2 *);
-	int (*device_resume)(struct dma_chan___2 *);
-	int (*device_terminate_all)(struct dma_chan___2 *);
-	void (*device_synchronize)(struct dma_chan___2 *);
-	enum dma_status (*device_tx_status)(struct dma_chan___2 *, dma_cookie_t, struct dma_tx_state *);
-	void (*device_issue_pending)(struct dma_chan___2 *);
-};
-
-struct dma_chan_dev {
-	struct dma_chan___2 *chan;
-	struct device device;
-	int dev_id;
-	atomic_t *idr_ref;
-};
-
-enum dma_slave_buswidth {
-	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
-	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
-	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
-	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
-	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
-	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
-	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
-	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
-	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
-};
-
-struct dma_slave_config {
-	enum dma_transfer_direction direction;
-	phys_addr_t src_addr;
-	phys_addr_t dst_addr;
-	enum dma_slave_buswidth src_addr_width;
-	enum dma_slave_buswidth dst_addr_width;
-	u32 src_maxburst;
-	u32 dst_maxburst;
-	u32 src_port_window_size;
-	u32 dst_port_window_size;
-	bool device_fc;
-	unsigned int slave_id;
-};
-
-struct dma_slave_caps {
-	u32 src_addr_widths;
-	u32 dst_addr_widths;
-	u32 directions;
-	u32 max_burst;
-	bool cmd_pause;
-	bool cmd_resume;
-	bool cmd_terminate;
-	enum dma_residue_granularity residue_granularity;
-	bool descriptor_reuse;
-};
-
-typedef void (*dma_async_tx_callback)(void *);
-
-enum dmaengine_tx_result {
-	DMA_TRANS_NOERROR = 0,
-	DMA_TRANS_READ_FAILED = 1,
-	DMA_TRANS_WRITE_FAILED = 2,
-	DMA_TRANS_ABORTED = 3,
-};
-
-struct dmaengine_result {
-	enum dmaengine_tx_result result;
-	u32 residue;
-};
-
-typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
-
-struct dmaengine_unmap_data {
-	u8 map_cnt;
-	u8 to_cnt;
-	u8 from_cnt;
-	u8 bidi_cnt;
-	struct device *dev;
-	struct kref kref;
-	size_t len;
-	dma_addr_t addr[0];
-};
-
-struct dma_async_tx_descriptor {
-	dma_cookie_t cookie;
-	enum dma_ctrl_flags flags;
-	dma_addr_t phys;
-	struct dma_chan___2 *chan;
-	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
-	int (*desc_free)(struct dma_async_tx_descriptor *);
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-	struct dmaengine_unmap_data *unmap;
-};
-
-struct dma_tx_state {
-	dma_cookie_t last;
-	dma_cookie_t used;
-	u32 residue;
-};
-
-struct dma_slave_map {
-	const char *devname;
-	const char *slave;
-	void *param;
-};
-
-struct dma_chan_tbl_ent {
-	struct dma_chan___2 *chan;
-};
-
-struct dmaengine_unmap_pool {
-	struct kmem_cache *cache;
-	const char *name;
-	mempool_t *pool;
-	size_t size;
-};
-
-struct dmaengine_desc_callback {
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-};
-
-struct virt_dma_desc {
-	struct dma_async_tx_descriptor tx;
-	struct dmaengine_result tx_result;
-	struct list_head node;
-};
-
-struct virt_dma_chan {
-	struct dma_chan___2 chan;
-	struct tasklet_struct task;
-	void (*desc_free)(struct virt_dma_desc *);
-	spinlock_t lock;
-	struct list_head desc_allocated;
-	struct list_head desc_submitted;
-	struct list_head desc_issued;
-	struct list_head desc_completed;
-	struct virt_dma_desc *cyclic;
-	struct virt_dma_desc *vd_terminated;
-};
-
-struct acpi_table_csrt {
-	struct acpi_table_header header;
-};
-
-struct acpi_csrt_group {
-	u32 length;
-	u32 vendor_id;
-	u32 subvendor_id;
-	u16 device_id;
-	u16 subdevice_id;
-	u16 revision;
-	u16 reserved;
-	u32 shared_info_length;
-};
-
-struct acpi_csrt_shared_info {
-	u16 major_version;
-	u16 minor_version;
-	u32 mmio_base_low;
-	u32 mmio_base_high;
-	u32 gsi_interrupt;
-	u8 interrupt_polarity;
-	u8 interrupt_mode;
-	u8 num_channels;
-	u8 dma_address_width;
-	u16 base_request_line;
-	u16 num_handshake_signals;
-	u32 max_block_size;
-};
-
-struct acpi_dma_spec {
-	int chan_id;
-	int slave_id;
-	struct device *dev;
-};
-
-struct acpi_dma {
-	struct list_head dma_controllers;
-	struct device *dev;
-	struct dma_chan___2 * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
-	void *data;
-	short unsigned int base_request_line;
-	short unsigned int end_request_line;
-};
-
-struct acpi_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct acpi_dma_parser_data {
-	struct acpi_dma_spec dma_spec;
-	size_t index;
-	size_t n;
-};
-
-struct dw_dma_slave {
-	struct device *dma_dev;
-	u8 src_id;
-	u8 dst_id;
-	u8 m_master;
-	u8 p_master;
-	bool hs_polarity;
-};
-
-struct dw_dma_platform_data {
-	unsigned int nr_channels;
-	unsigned char chan_allocation_order;
-	unsigned char chan_priority;
-	unsigned int block_size;
-	unsigned char nr_masters;
-	unsigned char data_width[4];
-	unsigned char multi_block[8];
-	unsigned char protctl;
-};
-
-struct dw_dma;
-
-struct dw_dma_chip {
-	struct device *dev;
-	int id;
-	int irq;
-	void *regs;
-	struct clk *clk;
-	struct dw_dma *dw;
-	const struct dw_dma_platform_data *pdata;
-};
-
-struct dma_pool___2;
-
-struct dw_dma_chan;
-
-struct dw_dma {
-	struct dma_device dma;
-	char name[20];
-	void *regs;
-	struct dma_pool___2 *desc_pool;
-	struct tasklet_struct tasklet;
-	struct dw_dma_chan *chan;
-	u8 all_chan_mask;
-	u8 in_use;
-	void (*initialize_chan)(struct dw_dma_chan *);
-	void (*suspend_chan)(struct dw_dma_chan *, bool);
-	void (*resume_chan)(struct dw_dma_chan *, bool);
-	u32 (*prepare_ctllo)(struct dw_dma_chan *);
-	void (*encode_maxburst)(struct dw_dma_chan *, u32 *);
-	u32 (*bytes2block)(struct dw_dma_chan *, size_t, unsigned int, size_t *);
-	size_t (*block2bytes)(struct dw_dma_chan *, u32, u32);
-	void (*set_device_name)(struct dw_dma *, int);
-	void (*disable)(struct dw_dma *);
-	void (*enable)(struct dw_dma *);
-	struct dw_dma_platform_data *pdata;
-};
-
-enum dw_dma_fc {
-	DW_DMA_FC_D_M2M = 0,
-	DW_DMA_FC_D_M2P = 1,
-	DW_DMA_FC_D_P2M = 2,
-	DW_DMA_FC_D_P2P = 3,
-	DW_DMA_FC_P_P2M = 4,
-	DW_DMA_FC_SP_P2P = 5,
-	DW_DMA_FC_P_M2P = 6,
-	DW_DMA_FC_DP_P2P = 7,
-};
-
-struct dw_dma_chan_regs {
-	u32 SAR;
-	u32 __pad_SAR;
-	u32 DAR;
-	u32 __pad_DAR;
-	u32 LLP;
-	u32 __pad_LLP;
-	u32 CTL_LO;
-	u32 CTL_HI;
-	u32 SSTAT;
-	u32 __pad_SSTAT;
-	u32 DSTAT;
-	u32 __pad_DSTAT;
-	u32 SSTATAR;
-	u32 __pad_SSTATAR;
-	u32 DSTATAR;
-	u32 __pad_DSTATAR;
-	u32 CFG_LO;
-	u32 CFG_HI;
-	u32 SGR;
-	u32 __pad_SGR;
-	u32 DSR;
-	u32 __pad_DSR;
-};
-
-struct dw_dma_irq_regs {
-	u32 XFER;
-	u32 __pad_XFER;
-	u32 BLOCK;
-	u32 __pad_BLOCK;
-	u32 SRC_TRAN;
-	u32 __pad_SRC_TRAN;
-	u32 DST_TRAN;
-	u32 __pad_DST_TRAN;
-	u32 ERROR;
-	u32 __pad_ERROR;
-};
-
-struct dw_dma_regs {
-	struct dw_dma_chan_regs CHAN[8];
-	struct dw_dma_irq_regs RAW;
-	struct dw_dma_irq_regs STATUS;
-	struct dw_dma_irq_regs MASK;
-	struct dw_dma_irq_regs CLEAR;
-	u32 STATUS_INT;
-	u32 __pad_STATUS_INT;
-	u32 REQ_SRC;
-	u32 __pad_REQ_SRC;
-	u32 REQ_DST;
-	u32 __pad_REQ_DST;
-	u32 SGL_REQ_SRC;
-	u32 __pad_SGL_REQ_SRC;
-	u32 SGL_REQ_DST;
-	u32 __pad_SGL_REQ_DST;
-	u32 LAST_SRC;
-	u32 __pad_LAST_SRC;
-	u32 LAST_DST;
-	u32 __pad_LAST_DST;
-	u32 CFG;
-	u32 __pad_CFG;
-	u32 CH_EN;
-	u32 __pad_CH_EN;
-	u32 ID;
-	u32 __pad_ID;
-	u32 TEST;
-	u32 __pad_TEST;
-	u32 CLASS_PRIORITY0;
-	u32 __pad_CLASS_PRIORITY0;
-	u32 CLASS_PRIORITY1;
-	u32 __pad_CLASS_PRIORITY1;
-	u32 __reserved;
-	u32 DWC_PARAMS[8];
-	u32 MULTI_BLK_TYPE;
-	u32 MAX_BLK_SIZE;
-	u32 DW_PARAMS;
-	u32 COMP_TYPE;
-	u32 COMP_VERSION;
-	u32 FIFO_PARTITION0;
-	u32 __pad_FIFO_PARTITION0;
-	u32 FIFO_PARTITION1;
-	u32 __pad_FIFO_PARTITION1;
-	u32 SAI_ERR;
-	u32 __pad_SAI_ERR;
-	u32 GLOBAL_CFG;
-	u32 __pad_GLOBAL_CFG;
-};
-
-enum dw_dmac_flags {
-	DW_DMA_IS_CYCLIC = 0,
-	DW_DMA_IS_SOFT_LLP = 1,
-	DW_DMA_IS_PAUSED = 2,
-	DW_DMA_IS_INITIALIZED = 3,
-};
-
-struct dw_dma_chan {
-	struct dma_chan___2 chan;
-	void *ch_regs;
-	u8 mask;
-	u8 priority;
-	enum dma_transfer_direction direction;
-	struct list_head *tx_node_active;
-	spinlock_t lock;
-	long unsigned int flags;
-	struct list_head active_list;
-	struct list_head queue;
-	unsigned int descs_allocated;
-	unsigned int block_size;
-	bool nollp;
-	struct dw_dma_slave dws;
-	struct dma_slave_config dma_sconfig;
-};
-
-struct dw_lli {
-	__le32 sar;
-	__le32 dar;
-	__le32 llp;
-	__le32 ctllo;
-	__le32 ctlhi;
-	__le32 sstat;
-	__le32 dstat;
-};
-
-struct dw_desc {
-	struct dw_lli lli;
-	struct list_head desc_node;
-	struct list_head tx_list;
-	struct dma_async_tx_descriptor txd;
-	size_t len;
-	size_t total_len;
-	u32 residue;
-};
-
-struct dw_dma_chip_pdata {
-	const struct dw_dma_platform_data *pdata;
-	int (*probe)(struct dw_dma_chip *);
-	int (*remove)(struct dw_dma_chip *);
-	struct dw_dma_chip *chip;
-};
-
-enum dw_dma_msize {
-	DW_DMA_MSIZE_1 = 0,
-	DW_DMA_MSIZE_4 = 1,
-	DW_DMA_MSIZE_8 = 2,
-	DW_DMA_MSIZE_16 = 3,
-	DW_DMA_MSIZE_32 = 4,
-	DW_DMA_MSIZE_64 = 5,
-	DW_DMA_MSIZE_128 = 6,
-	DW_DMA_MSIZE_256 = 7,
-};
-
-enum idma32_msize {
-	IDMA32_MSIZE_1 = 0,
-	IDMA32_MSIZE_2 = 1,
-	IDMA32_MSIZE_4 = 2,
-	IDMA32_MSIZE_8 = 3,
-	IDMA32_MSIZE_16 = 4,
-	IDMA32_MSIZE_32 = 5,
-};
-
-struct hsu_dma;
-
-struct hsu_dma_chip {
-	struct device *dev;
-	int irq;
-	void *regs;
-	unsigned int length;
-	unsigned int offset;
-	struct hsu_dma *hsu;
-};
-
-struct hsu_dma_chan;
-
-struct hsu_dma {
-	struct dma_device dma;
-	struct hsu_dma_chan *chan;
-	short unsigned int nr_channels;
-};
-
-struct hsu_dma_sg {
-	dma_addr_t addr;
-	unsigned int len;
-};
-
-struct hsu_dma_desc {
-	struct virt_dma_desc vdesc;
-	enum dma_transfer_direction direction;
-	struct hsu_dma_sg *sg;
-	unsigned int nents;
-	size_t length;
-	unsigned int active;
-	enum dma_status status;
-};
-
-struct hsu_dma_chan {
-	struct virt_dma_chan vchan;
-	void *reg;
-	enum dma_transfer_direction direction;
-	struct dma_slave_config config;
-	struct hsu_dma_desc *desc;
-};
-
-struct serial_struct32 {
-	compat_int_t type;
-	compat_int_t line;
-	compat_uint_t port;
-	compat_int_t irq;
-	compat_int_t flags;
-	compat_int_t xmit_fifo_size;
-	compat_int_t custom_divisor;
-	compat_int_t baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	compat_int_t hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	compat_uint_t iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	compat_int_t reserved[1];
-};
-
-struct n_tty_data {
-	size_t read_head;
-	size_t commit_head;
-	size_t canon_head;
-	size_t echo_head;
-	size_t echo_commit;
-	size_t echo_mark;
-	long unsigned int char_map[4];
-	long unsigned int overrun_time;
-	int num_overrun;
-	bool no_room;
-	unsigned char lnext: 1;
-	unsigned char erasing: 1;
-	unsigned char raw: 1;
-	unsigned char real_raw: 1;
-	unsigned char icanon: 1;
-	unsigned char push: 1;
-	char read_buf[4096];
-	long unsigned int read_flags[64];
-	unsigned char echo_buf[4096];
-	size_t read_tail;
-	size_t line_start;
-	unsigned int column;
-	unsigned int canon_column;
-	size_t echo_tail;
-	struct mutex atomic_read_lock;
-	struct mutex output_lock;
-};
-
-enum {
-	ERASE = 0,
-	WERASE = 1,
-	KILL = 2,
-};
-
-struct termios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-};
-
-struct termios2 {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct termio {
-	short unsigned int c_iflag;
-	short unsigned int c_oflag;
-	short unsigned int c_cflag;
-	short unsigned int c_lflag;
-	unsigned char c_line;
-	unsigned char c_cc[8];
-};
-
-struct ldsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-};
-
-struct pts_fs_info___2;
-
-struct tty_audit_buf {
-	struct mutex mutex;
-	dev_t dev;
-	unsigned int icanon: 1;
-	size_t valid;
-	unsigned char *data;
-};
-
-struct sysrq_state {
-	struct input_handle handle;
-	struct work_struct reinject_work;
-	long unsigned int key_down[12];
-	unsigned int alt;
-	unsigned int alt_use;
-	bool active;
-	bool need_reinject;
-	bool reinjecting;
-	bool reset_canceled;
-	bool reset_requested;
-	long unsigned int reset_keybit[12];
-	int reset_seq_len;
-	int reset_seq_cnt;
-	int reset_seq_version;
-	struct timer_list keyreset_timer;
-};
-
-struct consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	char *chardata;
-};
-
-struct unipair {
-	short unsigned int unicode;
-	short unsigned int fontpos;
-};
-
-struct unimapdesc {
-	short unsigned int entry_ct;
-	struct unipair *entries;
-};
-
-struct kbdiacruc {
-	unsigned int diacr;
-	unsigned int base;
-	unsigned int result;
-};
-
-struct kbd_repeat {
-	int delay;
-	int period;
-};
-
-struct console_font_op {
-	unsigned int op;
-	unsigned int flags;
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_stat {
-	short unsigned int v_active;
-	short unsigned int v_signal;
-	short unsigned int v_state;
-};
-
-struct vt_sizes {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_scrollsize;
-};
-
-struct vt_consize {
-	short unsigned int v_rows;
-	short unsigned int v_cols;
-	short unsigned int v_vlin;
-	short unsigned int v_clin;
-	short unsigned int v_vcol;
-	short unsigned int v_ccol;
-};
-
-struct vt_event {
-	unsigned int event;
-	unsigned int oldev;
-	unsigned int newev;
-	unsigned int pad[4];
-};
-
-struct vt_setactivate {
-	unsigned int console;
-	struct vt_mode mode;
-};
-
-struct vt_event_wait {
-	struct list_head list;
-	struct vt_event event;
-	int done;
-};
-
-struct compat_consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	compat_caddr_t chardata;
-};
-
-struct compat_console_font_op {
-	compat_uint_t op;
-	compat_uint_t flags;
-	compat_uint_t width;
-	compat_uint_t height;
-	compat_uint_t charcount;
-	compat_caddr_t data;
-};
-
-struct compat_unimapdesc {
-	short unsigned int entry_ct;
-	compat_caddr_t entries;
-};
-
-struct vt_notifier_param {
-	struct vc_data *vc;
-	unsigned int c;
-};
-
-struct vcs_poll_data {
-	struct notifier_block notifier;
-	unsigned int cons_num;
-	int event;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-};
-
-struct tiocl_selection {
-	short unsigned int xs;
-	short unsigned int ys;
-	short unsigned int xe;
-	short unsigned int ye;
-	short unsigned int sel_mode;
-};
-
-struct keyboard_notifier_param {
-	struct vc_data *vc;
-	int down;
-	int shift;
-	int ledstate;
-	unsigned int value;
-};
-
-struct kbd_struct {
-	unsigned char lockstate;
-	unsigned char slockstate;
-	unsigned char ledmode: 1;
-	unsigned char ledflagstate: 4;
-	char: 3;
-	unsigned char default_ledflagstate: 4;
-	unsigned char kbdmode: 3;
-	char: 1;
-	unsigned char modeflags: 5;
-};
-
-struct kbentry {
-	unsigned char kb_table;
-	unsigned char kb_index;
-	short unsigned int kb_value;
-};
-
-struct kbsentry {
-	unsigned char kb_func;
-	unsigned char kb_string[512];
-};
-
-struct kbdiacr {
-	unsigned char diacr;
-	unsigned char base;
-	unsigned char result;
-};
-
-struct kbdiacrs {
-	unsigned int kb_cnt;
-	struct kbdiacr kbdiacr[256];
-};
-
-struct kbdiacrsuc {
-	unsigned int kb_cnt;
-	struct kbdiacruc kbdiacruc[256];
-};
-
-struct kbkeycode {
-	unsigned int scancode;
-	unsigned int keycode;
-};
-
-typedef void k_handler_fn(struct vc_data *, unsigned char, char);
-
-typedef void fn_handler_fn(struct vc_data *);
-
-struct getset_keycode_data {
-	struct input_keymap_entry ke;
-	int error;
-};
-
-struct kbd_led_trigger {
-	struct led_trigger trigger;
-	unsigned int mask;
-};
-
-struct uni_pagedir {
-	u16 **uni_pgdir[32];
-	long unsigned int refcount;
-	long unsigned int sum;
-	unsigned char *inverse_translations[4];
-	u16 *inverse_trans_unicode;
-};
-
-typedef uint32_t char32_t;
-
-struct uni_screen {
-	char32_t *lines[0];
-};
-
-struct con_driver {
-	const struct consw *con;
-	const char *desc;
-	struct device *dev;
-	int node;
-	int first;
-	int last;
-	int flag;
-};
-
-enum {
-	blank_off = 0,
-	blank_normal_wait = 1,
-	blank_vesa_wait = 2,
-};
-
-enum {
-	EPecma = 0,
-	EPdec = 1,
-	EPeq = 2,
-	EPgt = 3,
-	EPlt = 4,
-};
-
-struct rgb {
-	u8 r;
-	u8 g;
-	u8 b;
-};
-
-enum {
-	ESnormal = 0,
-	ESesc = 1,
-	ESsquare = 2,
-	ESgetpars = 3,
-	ESfunckey = 4,
-	EShash = 5,
-	ESsetG0 = 6,
-	ESsetG1 = 7,
-	ESpercent = 8,
-	EScsiignore = 9,
-	ESnonstd = 10,
-	ESpalette = 11,
-	ESosc = 12,
-};
-
-struct interval {
-	uint32_t first;
-	uint32_t last;
-};
-
-struct uart_driver {
-	struct module *owner;
-	const char *driver_name;
-	const char *dev_name;
-	int major;
-	int minor;
-	int nr;
-	struct console *cons;
-	struct uart_state *state;
-	struct tty_driver *tty_driver;
-};
-
-struct uart_match {
-	struct uart_port *port;
-	struct uart_driver *driver;
-};
-
-enum hwparam_type {
-	hwparam_ioport = 0,
-	hwparam_iomem = 1,
-	hwparam_ioport_or_iomem = 2,
-	hwparam_irq = 3,
-	hwparam_dma = 4,
-	hwparam_dma_addr = 5,
-	hwparam_other = 6,
-};
-
-struct plat_serial8250_port {
-	long unsigned int iobase;
-	void *membase;
-	resource_size_t mapbase;
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	void *private_data;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char hub6;
-	upf_t flags;
-	unsigned int type;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-};
-
-enum {
-	PLAT8250_DEV_LEGACY = 4294967295,
-	PLAT8250_DEV_PLATFORM = 0,
-	PLAT8250_DEV_PLATFORM1 = 1,
-	PLAT8250_DEV_PLATFORM2 = 2,
-	PLAT8250_DEV_FOURPORT = 3,
-	PLAT8250_DEV_ACCENT = 4,
-	PLAT8250_DEV_BOCA = 5,
-	PLAT8250_DEV_EXAR_ST16C554 = 6,
-	PLAT8250_DEV_HUB6 = 7,
-	PLAT8250_DEV_AU1X00 = 8,
-	PLAT8250_DEV_SM501 = 9,
-};
-
-struct uart_8250_port;
-
-struct uart_8250_ops {
-	int (*setup_irq)(struct uart_8250_port *);
-	void (*release_irq)(struct uart_8250_port *);
-};
-
-struct mctrl_gpios;
-
-struct uart_8250_dma;
-
-struct uart_8250_em485;
-
-struct uart_8250_port {
-	struct uart_port port;
-	struct timer_list timer;
-	struct list_head list;
-	u32 capabilities;
-	short unsigned int bugs;
-	bool fifo_bug;
-	unsigned int tx_loadsz;
-	unsigned char acr;
-	unsigned char fcr;
-	unsigned char ier;
-	unsigned char lcr;
-	unsigned char mcr;
-	unsigned char mcr_mask;
-	unsigned char mcr_force;
-	unsigned char cur_iotype;
-	unsigned int rpm_tx_active;
-	unsigned char canary;
-	unsigned char probe;
-	struct mctrl_gpios *gpios;
-	unsigned char lsr_saved_flags;
-	unsigned char msr_saved_flags;
-	struct uart_8250_dma *dma;
-	const struct uart_8250_ops *ops;
-	int (*dl_read)(struct uart_8250_port *);
-	void (*dl_write)(struct uart_8250_port *, int);
-	struct uart_8250_em485 *em485;
-	struct delayed_work overrun_backoff;
-	u32 overrun_backoff_time_ms;
-};
-
-struct uart_8250_em485 {
-	struct hrtimer start_tx_timer;
-	struct hrtimer stop_tx_timer;
-	struct hrtimer *active_timer;
-	struct uart_8250_port *port;
-};
-
-struct uart_8250_dma {
-	int (*tx_dma)(struct uart_8250_port *);
-	int (*rx_dma)(struct uart_8250_port *);
-	dma_filter_fn fn;
-	void *rx_param;
-	void *tx_param;
-	struct dma_slave_config rxconf;
-	struct dma_slave_config txconf;
-	struct dma_chan___2 *rxchan;
-	struct dma_chan___2 *txchan;
-	phys_addr_t rx_dma_addr;
-	phys_addr_t tx_dma_addr;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	void *rx_buf;
-	size_t rx_size;
-	size_t tx_size;
-	unsigned char tx_running;
-	unsigned char tx_err;
-	unsigned char rx_running;
-};
-
-struct old_serial_port {
-	unsigned int uart;
-	unsigned int baud_base;
-	unsigned int port;
-	unsigned int irq;
-	upf_t flags;
-	unsigned char io_type;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-};
-
-struct irq_info {
-	struct hlist_node node;
-	int irq;
-	spinlock_t lock;
-	struct list_head *head;
-};
-
-struct serial8250_config {
-	const char *name;
-	short unsigned int fifo_size;
-	short unsigned int tx_loadsz;
-	unsigned char fcr;
-	unsigned char rxtrig_bytes[4];
-	unsigned int flags;
-};
-
-struct dw8250_port_data {
-	int line;
-	struct uart_8250_dma dma;
-	u8 dlf_size;
-};
-
-struct pciserial_board {
-	unsigned int flags;
-	unsigned int num_ports;
-	unsigned int base_baud;
-	unsigned int uart_offset;
-	unsigned int reg_shift;
-	unsigned int first_offset;
-};
-
-struct serial_private;
-
-struct pci_serial_quirk {
-	u32 vendor;
-	u32 device;
-	u32 subvendor;
-	u32 subdevice;
-	int (*probe)(struct pci_dev *);
-	int (*init)(struct pci_dev *);
-	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct serial_private {
-	struct pci_dev *dev;
-	unsigned int nr;
-	struct pci_serial_quirk *quirk;
-	const struct pciserial_board *board;
-	int line[0];
-};
-
-struct f815xxa_data {
-	spinlock_t lock;
-	int idx;
-};
-
-struct timedia_struct {
-	int num;
-	const short unsigned int *ids;
-};
-
-struct quatech_feature {
-	u16 devid;
-	bool amcc;
-};
-
-enum pci_board_num_t {
-	pbn_default = 0,
-	pbn_b0_1_115200 = 1,
-	pbn_b0_2_115200 = 2,
-	pbn_b0_4_115200 = 3,
-	pbn_b0_5_115200 = 4,
-	pbn_b0_8_115200 = 5,
-	pbn_b0_1_921600 = 6,
-	pbn_b0_2_921600 = 7,
-	pbn_b0_4_921600 = 8,
-	pbn_b0_2_1130000 = 9,
-	pbn_b0_4_1152000 = 10,
-	pbn_b0_4_1250000 = 11,
-	pbn_b0_2_1843200 = 12,
-	pbn_b0_4_1843200 = 13,
-	pbn_b0_1_4000000 = 14,
-	pbn_b0_bt_1_115200 = 15,
-	pbn_b0_bt_2_115200 = 16,
-	pbn_b0_bt_4_115200 = 17,
-	pbn_b0_bt_8_115200 = 18,
-	pbn_b0_bt_1_460800 = 19,
-	pbn_b0_bt_2_460800 = 20,
-	pbn_b0_bt_4_460800 = 21,
-	pbn_b0_bt_1_921600 = 22,
-	pbn_b0_bt_2_921600 = 23,
-	pbn_b0_bt_4_921600 = 24,
-	pbn_b0_bt_8_921600 = 25,
-	pbn_b1_1_115200 = 26,
-	pbn_b1_2_115200 = 27,
-	pbn_b1_4_115200 = 28,
-	pbn_b1_8_115200 = 29,
-	pbn_b1_16_115200 = 30,
-	pbn_b1_1_921600 = 31,
-	pbn_b1_2_921600 = 32,
-	pbn_b1_4_921600 = 33,
-	pbn_b1_8_921600 = 34,
-	pbn_b1_2_1250000 = 35,
-	pbn_b1_bt_1_115200 = 36,
-	pbn_b1_bt_2_115200 = 37,
-	pbn_b1_bt_4_115200 = 38,
-	pbn_b1_bt_2_921600 = 39,
-	pbn_b1_1_1382400 = 40,
-	pbn_b1_2_1382400 = 41,
-	pbn_b1_4_1382400 = 42,
-	pbn_b1_8_1382400 = 43,
-	pbn_b2_1_115200 = 44,
-	pbn_b2_2_115200 = 45,
-	pbn_b2_4_115200 = 46,
-	pbn_b2_8_115200 = 47,
-	pbn_b2_1_460800 = 48,
-	pbn_b2_4_460800 = 49,
-	pbn_b2_8_460800 = 50,
-	pbn_b2_16_460800 = 51,
-	pbn_b2_1_921600 = 52,
-	pbn_b2_4_921600 = 53,
-	pbn_b2_8_921600 = 54,
-	pbn_b2_8_1152000 = 55,
-	pbn_b2_bt_1_115200 = 56,
-	pbn_b2_bt_2_115200 = 57,
-	pbn_b2_bt_4_115200 = 58,
-	pbn_b2_bt_2_921600 = 59,
-	pbn_b2_bt_4_921600 = 60,
-	pbn_b3_2_115200 = 61,
-	pbn_b3_4_115200 = 62,
-	pbn_b3_8_115200 = 63,
-	pbn_b4_bt_2_921600 = 64,
-	pbn_b4_bt_4_921600 = 65,
-	pbn_b4_bt_8_921600 = 66,
-	pbn_panacom = 67,
-	pbn_panacom2 = 68,
-	pbn_panacom4 = 69,
-	pbn_plx_romulus = 70,
-	pbn_endrun_2_4000000 = 71,
-	pbn_oxsemi = 72,
-	pbn_oxsemi_1_4000000 = 73,
-	pbn_oxsemi_2_4000000 = 74,
-	pbn_oxsemi_4_4000000 = 75,
-	pbn_oxsemi_8_4000000 = 76,
-	pbn_intel_i960 = 77,
-	pbn_sgi_ioc3 = 78,
-	pbn_computone_4 = 79,
-	pbn_computone_6 = 80,
-	pbn_computone_8 = 81,
-	pbn_sbsxrsio = 82,
-	pbn_pasemi_1682M = 83,
-	pbn_ni8430_2 = 84,
-	pbn_ni8430_4 = 85,
-	pbn_ni8430_8 = 86,
-	pbn_ni8430_16 = 87,
-	pbn_ADDIDATA_PCIe_1_3906250 = 88,
-	pbn_ADDIDATA_PCIe_2_3906250 = 89,
-	pbn_ADDIDATA_PCIe_4_3906250 = 90,
-	pbn_ADDIDATA_PCIe_8_3906250 = 91,
-	pbn_ce4100_1_115200 = 92,
-	pbn_omegapci = 93,
-	pbn_NETMOS9900_2s_115200 = 94,
-	pbn_brcm_trumanage = 95,
-	pbn_fintek_4 = 96,
-	pbn_fintek_8 = 97,
-	pbn_fintek_12 = 98,
-	pbn_fintek_F81504A = 99,
-	pbn_fintek_F81508A = 100,
-	pbn_fintek_F81512A = 101,
-	pbn_wch382_2 = 102,
-	pbn_wch384_4 = 103,
-	pbn_pericom_PI7C9X7951 = 104,
-	pbn_pericom_PI7C9X7952 = 105,
-	pbn_pericom_PI7C9X7954 = 106,
-	pbn_pericom_PI7C9X7958 = 107,
-	pbn_sunix_pci_1s = 108,
-	pbn_sunix_pci_2s = 109,
-	pbn_sunix_pci_4s = 110,
-	pbn_sunix_pci_8s = 111,
-	pbn_sunix_pci_16s = 112,
-	pbn_moxa8250_2p = 113,
-	pbn_moxa8250_4p = 114,
-	pbn_moxa8250_8p = 115,
-};
-
-struct acpi_gpio_params {
-	unsigned int crs_entry_index;
-	unsigned int line_index;
-	bool active_low;
-};
-
-struct exar8250_platform {
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
-};
-
-struct exar8250;
-
-struct exar8250_board {
-	unsigned int num_ports;
-	unsigned int reg_shift;
-	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct exar8250 {
-	unsigned int nr;
-	struct exar8250_board *board;
-	void *virt;
-	int line[0];
-};
-
-struct lpss8250;
-
-struct lpss8250_board {
-	long unsigned int freq;
-	unsigned int base_baud;
-	int (*setup)(struct lpss8250 *, struct uart_port *);
-	void (*exit)(struct lpss8250 *);
-};
-
-struct lpss8250 {
-	struct dw8250_port_data data;
-	struct lpss8250_board *board;
-	struct dw_dma_chip dma_chip;
-	struct dw_dma_slave dma_param;
-	u8 dma_maxburst;
-};
-
-struct hsu_dma_slave {
-	struct device *dma_dev;
-	int chan_id;
-};
-
-struct mid8250;
-
-struct mid8250_board {
-	unsigned int flags;
-	long unsigned int freq;
-	unsigned int base_baud;
-	int (*setup)(struct mid8250 *, struct uart_port *);
-	void (*exit)(struct mid8250 *);
-};
-
-struct mid8250 {
-	int line;
-	int dma_index;
-	struct pci_dev *dma_dev;
-	struct uart_8250_dma dma;
-	struct mid8250_board *board;
-	struct hsu_dma_chip dma_chip;
-};
-
-struct memdev {
-	const char *name;
-	umode_t mode;
-	const struct file_operations *fops;
-	fmode_t fmode;
-};
-
-struct timer_rand_state {
-	cycles_t last_time;
-	long int last_delta;
-	long int last_delta2;
-};
-
-struct trace_event_raw_add_device_randomness {
-	struct trace_entry ent;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__mix_pool_bytes {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_credit_entropy_bits {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bits;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_push_to_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int pool_bits;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_debit_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int debit_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_input_randomness {
-	struct trace_entry ent;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_add_disk_randomness {
-	struct trace_entry ent;
-	dev_t dev;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_xfer_secondary_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int xfer_bits;
-	int request_bits;
-	int pool_entropy;
-	int input_entropy;
-	char __data[0];
-};
-
-struct trace_event_raw_random__get_random_bytes {
-	struct trace_entry ent;
-	int nbytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__extract_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int nbytes;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random_read {
-	struct trace_entry ent;
-	int got_bits;
-	int need_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_urandom_read {
-	struct trace_entry ent;
-	int got_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_add_device_randomness {};
-
-struct trace_event_data_offsets_random__mix_pool_bytes {};
-
-struct trace_event_data_offsets_credit_entropy_bits {};
-
-struct trace_event_data_offsets_push_to_pool {};
-
-struct trace_event_data_offsets_debit_entropy {};
-
-struct trace_event_data_offsets_add_input_randomness {};
-
-struct trace_event_data_offsets_add_disk_randomness {};
-
-struct trace_event_data_offsets_xfer_secondary_pool {};
-
-struct trace_event_data_offsets_random__get_random_bytes {};
-
-struct trace_event_data_offsets_random__extract_entropy {};
-
-struct trace_event_data_offsets_random_read {};
-
-struct trace_event_data_offsets_urandom_read {};
-
-typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);
-
-typedef void (*btf_trace_debit_entropy)(void *, const char *, int);
-
-typedef void (*btf_trace_add_input_randomness)(void *, int);
-
-typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);
-
-typedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);
-
-typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_random_read)(void *, int, int, int, int);
-
-typedef void (*btf_trace_urandom_read)(void *, int, int, int);
-
-struct poolinfo {
-	int poolbitshift;
-	int poolwords;
-	int poolbytes;
-	int poolfracbits;
-	int tap1;
-	int tap2;
-	int tap3;
-	int tap4;
-	int tap5;
-};
-
-struct crng_state {
-	__u32 state[16];
-	long unsigned int init_time;
-	spinlock_t lock;
-};
-
-struct entropy_store {
-	const struct poolinfo *poolinfo;
-	__u32 *pool;
-	const char *name;
-	struct entropy_store *pull;
-	struct work_struct push_work;
-	long unsigned int last_pulled;
-	spinlock_t lock;
-	short unsigned int add_ptr;
-	short unsigned int input_rotate;
-	int entropy_count;
-	unsigned int initialized: 1;
-	unsigned int last_data_init: 1;
-	__u8 last_data[10];
-};
-
-struct fast_pool {
-	__u32 pool[4];
-	long unsigned int last;
-	short unsigned int reg_idx;
-	unsigned char count;
-};
-
-struct batched_entropy {
-	union {
-		u64 entropy_u64[8];
-		u32 entropy_u32[16];
-	};
-	unsigned int position;
-	spinlock_t batch_lock;
-};
-
-struct hpet_info {
-	long unsigned int hi_ireqfreq;
-	long unsigned int hi_flags;
-	short unsigned int hi_hpet;
-	short unsigned int hi_timer;
-};
-
-struct hpet_timer {
-	u64 hpet_config;
-	union {
-		u64 _hpet_hc64;
-		u32 _hpet_hc32;
-		long unsigned int _hpet_compare;
-	} _u1;
-	u64 hpet_fsb[2];
-};
-
-struct hpet {
-	u64 hpet_cap;
-	u64 res0;
-	u64 hpet_config;
-	u64 res1;
-	u64 hpet_isr;
-	u64 res2[25];
-	union {
-		u64 _hpet_mc64;
-		u32 _hpet_mc32;
-		long unsigned int _hpet_mc;
-	} _u0;
-	u64 res3;
-	struct hpet_timer hpet_timers[1];
-};
-
-struct hpets;
-
-struct hpet_dev {
-	struct hpets *hd_hpets;
-	struct hpet *hd_hpet;
-	struct hpet_timer *hd_timer;
-	long unsigned int hd_ireqfreq;
-	long unsigned int hd_irqdata;
-	wait_queue_head_t hd_waitqueue;
-	struct fasync_struct *hd_async_queue;
-	unsigned int hd_flags;
-	unsigned int hd_irq;
-	unsigned int hd_hdwirq;
-	char hd_name[7];
-};
-
-struct hpets {
-	struct hpets *hp_next;
-	struct hpet *hp_hpet;
-	long unsigned int hp_hpet_phys;
-	struct clocksource *hp_clocksource;
-	long long unsigned int hp_tick_freq;
-	long unsigned int hp_delta;
-	unsigned int hp_ntimer;
-	unsigned int hp_which;
-	struct hpet_dev hp_dev[1];
-};
-
-struct compat_hpet_info {
-	compat_ulong_t hi_ireqfreq;
-	compat_ulong_t hi_flags;
-	short unsigned int hi_hpet;
-	short unsigned int hi_timer;
-};
-
-struct nvram_ops {
-	ssize_t (*get_size)();
-	unsigned char (*read_byte)(int);
-	void (*write_byte)(unsigned char, int);
-	ssize_t (*read)(char *, size_t, loff_t *);
-	ssize_t (*write)(char *, size_t, loff_t *);
-	long int (*initialize)();
-	long int (*set_checksum)();
-};
-
-struct hwrng {
-	const char *name;
-	int (*init)(struct hwrng *);
-	void (*cleanup)(struct hwrng *);
-	int (*data_present)(struct hwrng *, int);
-	int (*data_read)(struct hwrng *, u32 *);
-	int (*read)(struct hwrng *, void *, size_t, bool);
-	long unsigned int priv;
-	short unsigned int quality;
-	struct list_head list;
-	struct kref ref;
-	struct completion cleanup_done;
-};
-
-enum {
-	VIA_STRFILT_CNT_SHIFT = 16,
-	VIA_STRFILT_FAIL = 32768,
-	VIA_STRFILT_ENABLE = 16384,
-	VIA_RAWBITS_ENABLE = 8192,
-	VIA_RNG_ENABLE = 64,
-	VIA_NOISESRC1 = 256,
-	VIA_NOISESRC2 = 512,
-	VIA_XSTORE_CNT_MASK = 15,
-	VIA_RNG_CHUNK_8 = 0,
-	VIA_RNG_CHUNK_4 = 1,
-	VIA_RNG_CHUNK_4_MASK = 4294967295,
-	VIA_RNG_CHUNK_2 = 2,
-	VIA_RNG_CHUNK_2_MASK = 65535,
-	VIA_RNG_CHUNK_1 = 3,
-	VIA_RNG_CHUNK_1_MASK = 255,
-};
-
-enum chipset_type {
-	NOT_SUPPORTED = 0,
-	SUPPORTED = 1,
-};
-
-struct agp_version {
-	u16 major;
-	u16 minor;
-};
-
-struct agp_bridge_data;
-
-struct agp_memory {
-	struct agp_memory *next;
-	struct agp_memory *prev;
-	struct agp_bridge_data *bridge;
-	struct page **pages;
-	size_t page_count;
-	int key;
-	int num_scratch_pages;
-	off_t pg_start;
-	u32 type;
-	u32 physical;
-	bool is_bound;
-	bool is_flushed;
-	struct list_head mapped_list;
-	struct scatterlist *sg_list;
-	int num_sg;
-};
-
-struct agp_bridge_driver;
-
-struct agp_bridge_data {
-	const struct agp_version *version;
-	const struct agp_bridge_driver *driver;
-	const struct vm_operations_struct *vm_ops;
-	void *previous_size;
-	void *current_size;
-	void *dev_private_data;
-	struct pci_dev *dev;
-	u32 *gatt_table;
-	u32 *gatt_table_real;
-	long unsigned int scratch_page;
-	struct page *scratch_page_page;
-	dma_addr_t scratch_page_dma;
-	long unsigned int gart_bus_addr;
-	long unsigned int gatt_bus_addr;
-	u32 mode;
-	enum chipset_type type;
-	long unsigned int *key_list;
-	atomic_t current_memory_agp;
-	atomic_t agp_in_use;
-	int max_memory_agp;
-	int aperture_size_idx;
-	int capndx;
-	int flags;
-	char major_version;
-	char minor_version;
-	struct list_head list;
-	u32 apbase_config;
-	struct list_head mapped_list;
-	spinlock_t mapped_lock;
-};
-
-enum aper_size_type {
-	U8_APER_SIZE = 0,
-	U16_APER_SIZE = 1,
-	U32_APER_SIZE = 2,
-	LVL2_APER_SIZE = 3,
-	FIXED_APER_SIZE = 4,
-};
-
-struct gatt_mask {
-	long unsigned int mask;
-	u32 type;
-};
-
-struct aper_size_info_16 {
-	int size;
-	int num_entries;
-	int page_order;
-	u16 size_value;
-};
-
-struct agp_bridge_driver {
-	struct module *owner;
-	const void *aperture_sizes;
-	int num_aperture_sizes;
-	enum aper_size_type size_type;
-	bool cant_use_aperture;
-	bool needs_scratch_page;
-	const struct gatt_mask *masks;
-	int (*fetch_size)();
-	int (*configure)();
-	void (*agp_enable)(struct agp_bridge_data *, u32);
-	void (*cleanup)();
-	void (*tlb_flush)(struct agp_memory *);
-	long unsigned int (*mask_memory)(struct agp_bridge_data *, dma_addr_t, int);
-	void (*cache_flush)();
-	int (*create_gatt_table)(struct agp_bridge_data *);
-	int (*free_gatt_table)(struct agp_bridge_data *);
-	int (*insert_memory)(struct agp_memory *, off_t, int);
-	int (*remove_memory)(struct agp_memory *, off_t, int);
-	struct agp_memory * (*alloc_by_type)(size_t, int);
-	void (*free_by_type)(struct agp_memory *);
-	struct page * (*agp_alloc_page)(struct agp_bridge_data *);
-	int (*agp_alloc_pages)(struct agp_bridge_data *, struct agp_memory *, size_t);
-	void (*agp_destroy_page)(struct page *, int);
-	void (*agp_destroy_pages)(struct agp_memory *);
-	int (*agp_type_to_mask_type)(struct agp_bridge_data *, int);
-};
-
-struct agp_kern_info {
-	struct agp_version version;
-	struct pci_dev *device;
-	enum chipset_type chipset;
-	long unsigned int mode;
-	long unsigned int aper_base;
-	size_t aper_size;
-	int max_memory;
-	int current_memory;
-	bool cant_use_aperture;
-	long unsigned int page_mask;
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct agp_info {
-	struct agp_version version;
-	u32 bridge_id;
-	u32 agp_mode;
-	long unsigned int aper_base;
-	size_t aper_size;
-	size_t pg_total;
-	size_t pg_system;
-	size_t pg_used;
-};
-
-struct agp_setup {
-	u32 agp_mode;
-};
-
-struct agp_segment {
-	off_t pg_start;
-	size_t pg_count;
-	int prot;
-};
-
-struct agp_segment_priv {
-	off_t pg_start;
-	size_t pg_count;
-	pgprot_t prot;
-};
-
-struct agp_region {
-	pid_t pid;
-	size_t seg_count;
-	struct agp_segment *seg_list;
-};
-
-struct agp_allocate {
-	int key;
-	size_t pg_count;
-	u32 type;
-	u32 physical;
-};
-
-struct agp_bind {
-	int key;
-	off_t pg_start;
-};
-
-struct agp_unbind {
-	int key;
-	u32 priority;
-};
-
-struct agp_client {
-	struct agp_client *next;
-	struct agp_client *prev;
-	pid_t pid;
-	int num_segments;
-	struct agp_segment_priv **segments;
-};
-
-struct agp_controller {
-	struct agp_controller *next;
-	struct agp_controller *prev;
-	pid_t pid;
-	int num_clients;
-	struct agp_memory *pool;
-	struct agp_client *clients;
-};
-
-struct agp_file_private {
-	struct agp_file_private *next;
-	struct agp_file_private *prev;
-	pid_t my_pid;
-	long unsigned int access_flags;
-};
-
-struct agp_front_data {
-	struct mutex agp_mutex;
-	struct agp_controller *current_controller;
-	struct agp_controller *controllers;
-	struct agp_file_private *file_priv_list;
-	bool used_by_controller;
-	bool backend_acquired;
-};
-
-struct aper_size_info_8 {
-	int size;
-	int num_entries;
-	int page_order;
-	u8 size_value;
-};
-
-struct aper_size_info_32 {
-	int size;
-	int num_entries;
-	int page_order;
-	u32 size_value;
-};
-
-struct aper_size_info_lvl2 {
-	int size;
-	int num_entries;
-	u32 size_value;
-};
-
-struct aper_size_info_fixed {
-	int size;
-	int num_entries;
-	int page_order;
-};
-
-struct agp_3_5_dev {
-	struct list_head list;
-	u8 capndx;
-	u32 maxbw;
-	struct pci_dev *dev;
-};
-
-struct isoch_data {
-	u32 maxbw;
-	u32 n;
-	u32 y;
-	u32 l;
-	u32 rq;
-	struct agp_3_5_dev *dev;
-};
-
-struct agp_info32 {
-	struct agp_version version;
-	u32 bridge_id;
-	u32 agp_mode;
-	compat_long_t aper_base;
-	compat_size_t aper_size;
-	compat_size_t pg_total;
-	compat_size_t pg_system;
-	compat_size_t pg_used;
-};
-
-struct agp_segment32 {
-	compat_off_t pg_start;
-	compat_size_t pg_count;
-	compat_int_t prot;
-};
-
-struct agp_region32 {
-	compat_pid_t pid;
-	compat_size_t seg_count;
-	struct agp_segment32 *seg_list;
-};
-
-struct agp_allocate32 {
-	compat_int_t key;
-	compat_size_t pg_count;
-	u32 type;
-	u32 physical;
-};
-
-struct agp_bind32 {
-	compat_int_t key;
-	compat_off_t pg_start;
-};
-
-struct agp_unbind32 {
-	compat_int_t key;
-	u32 priority;
-};
-
-struct intel_agp_driver_description {
-	unsigned int chip_id;
-	char *name;
-	const struct agp_bridge_driver *driver;
-};
-
-struct intel_gtt_driver {
-	unsigned int gen: 8;
-	unsigned int is_g33: 1;
-	unsigned int is_pineview: 1;
-	unsigned int is_ironlake: 1;
-	unsigned int has_pgtbl_enable: 1;
-	unsigned int dma_mask_size: 8;
-	int (*setup)();
-	void (*cleanup)();
-	void (*write_entry)(dma_addr_t, unsigned int, unsigned int);
-	bool (*check_flags)(unsigned int);
-	void (*chipset_flush)();
-};
-
-struct _intel_private {
-	const struct intel_gtt_driver *driver;
-	struct pci_dev *pcidev;
-	struct pci_dev *bridge_dev;
-	u8 *registers;
-	phys_addr_t gtt_phys_addr;
-	u32 PGETBL_save;
-	u32 *gtt;
-	bool clear_fake_agp;
-	int num_dcache_entries;
-	void *i9xx_flush_page;
-	char *i81x_gtt_table;
-	struct resource ifp_resource;
-	int resource_valid;
-	struct page *scratch_page;
-	phys_addr_t scratch_page_dma;
-	int refcount;
-	unsigned int needs_dmar: 1;
-	phys_addr_t gma_bus_addr;
-	resource_size_t stolen_size;
-	unsigned int gtt_total_entries;
-	unsigned int gtt_mappable_entries;
-};
-
-struct intel_gtt_driver_description {
-	unsigned int gmch_chip_id;
-	char *name;
-	const struct intel_gtt_driver *gtt_driver;
-};
-
-enum device_link_state {
-	DL_STATE_NONE = 4294967295,
-	DL_STATE_DORMANT = 0,
-	DL_STATE_AVAILABLE = 1,
-	DL_STATE_CONSUMER_PROBE = 2,
-	DL_STATE_ACTIVE = 3,
-	DL_STATE_SUPPLIER_UNBIND = 4,
-};
-
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-	struct callback_head callback_head;
-	bool supplier_preactivated;
-};
-
-struct iommu_group {
-	struct kobject kobj;
-	struct kobject *devices_kobj;
-	struct list_head devices;
-	struct mutex mutex;
-	struct blocking_notifier_head notifier;
-	void *iommu_data;
-	void (*iommu_data_release)(void *);
-	char *name;
-	int id;
-	struct iommu_domain *default_domain;
-	struct iommu_domain *domain;
-};
-
-typedef unsigned int ioasid_t;
-
-enum iommu_fault_type {
-	IOMMU_FAULT_DMA_UNRECOV = 1,
-	IOMMU_FAULT_PAGE_REQ = 2,
-};
-
-struct iommu_device {
-	struct list_head list;
-	const struct iommu_ops *ops;
-	struct fwnode_handle *fwnode;
-	struct device *dev;
-};
-
-struct fsl_mc_obj_desc {
-	char type[16];
-	int id;
-	u16 vendor;
-	u16 ver_major;
-	u16 ver_minor;
-	u8 irq_count;
-	u8 region_count;
-	u32 state;
-	char label[16];
-	u16 flags;
-};
-
-struct fsl_mc_io;
-
-struct fsl_mc_device_irq;
-
-struct fsl_mc_resource;
-
-struct fsl_mc_device {
-	struct device dev;
-	u64 dma_mask;
-	u16 flags;
-	u16 icid;
-	u16 mc_handle;
-	struct fsl_mc_io *mc_io;
-	struct fsl_mc_obj_desc obj_desc;
-	struct resource *regions;
-	struct fsl_mc_device_irq **irqs;
-	struct fsl_mc_resource *resource;
-	struct device_link *consumer_link;
-};
-
-enum fsl_mc_pool_type {
-	FSL_MC_POOL_DPMCP = 0,
-	FSL_MC_POOL_DPBP = 1,
-	FSL_MC_POOL_DPCON = 2,
-	FSL_MC_POOL_IRQ = 3,
-	FSL_MC_NUM_POOL_TYPES = 4,
-};
-
-struct fsl_mc_resource_pool;
-
-struct fsl_mc_resource {
-	enum fsl_mc_pool_type type;
-	s32 id;
-	void *data;
-	struct fsl_mc_resource_pool *parent_pool;
-	struct list_head node;
-};
-
-struct fsl_mc_device_irq {
-	struct msi_desc *msi_desc;
-	struct fsl_mc_device *mc_dev;
-	u8 dev_irq_index;
-	struct fsl_mc_resource resource;
-};
-
-struct fsl_mc_io {
-	struct device *dev;
-	u16 flags;
-	u32 portal_size;
-	phys_addr_t portal_phys_addr;
-	void *portal_virt_addr;
-	struct fsl_mc_device *dpmcp_dev;
-	union {
-		struct mutex mutex;
-		spinlock_t spinlock;
-	};
-};
-
-struct group_device {
-	struct list_head list;
-	struct device *dev;
-	char *name;
-};
-
-struct iommu_group_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct iommu_group *, char *);
-	ssize_t (*store)(struct iommu_group *, const char *, size_t);
-};
-
-struct group_for_pci_data {
-	struct pci_dev *pdev;
-	struct iommu_group *group;
-};
-
-struct trace_event_raw_iommu_group_event {
-	struct trace_entry ent;
-	int gid;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_device_event {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	char __data[0];
-};
-
-struct trace_event_raw_map {
-	struct trace_entry ent;
-	u64 iova;
-	u64 paddr;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_unmap {
-	struct trace_entry ent;
-	u64 iova;
-	size_t size;
-	size_t unmapped_size;
-	char __data[0];
-};
-
-struct trace_event_raw_iommu_error {
-	struct trace_entry ent;
-	u32 __data_loc_device;
-	u32 __data_loc_driver;
-	u64 iova;
-	int flags;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_iommu_group_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_iommu_device_event {
-	u32 device;
-};
-
-struct trace_event_data_offsets_map {};
-
-struct trace_event_data_offsets_unmap {};
-
-struct trace_event_data_offsets_iommu_error {
-	u32 device;
-	u32 driver;
-};
-
-typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
-
-typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
-
-typedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);
-
-typedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);
-
-typedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);
-
-typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
-
-struct iova {
-	struct rb_node node;
-	long unsigned int pfn_hi;
-	long unsigned int pfn_lo;
-};
-
-struct iova_magazine;
-
-struct iova_cpu_rcache;
-
-struct iova_rcache {
-	spinlock_t lock;
-	long unsigned int depot_size;
-	struct iova_magazine *depot[32];
-	struct iova_cpu_rcache *cpu_rcaches;
-};
-
-struct iova_domain;
-
-typedef void (*iova_flush_cb)(struct iova_domain *);
-
-typedef void (*iova_entry_dtor)(long unsigned int);
-
-struct iova_fq;
-
-struct iova_domain {
-	spinlock_t iova_rbtree_lock;
-	struct rb_root rbroot;
-	struct rb_node *cached_node;
-	struct rb_node *cached32_node;
-	long unsigned int granule;
-	long unsigned int start_pfn;
-	long unsigned int dma_32bit_pfn;
-	long unsigned int max32_alloc_size;
-	struct iova_fq *fq;
-	atomic64_t fq_flush_start_cnt;
-	atomic64_t fq_flush_finish_cnt;
-	struct iova anchor;
-	struct iova_rcache rcaches[6];
-	iova_flush_cb flush_cb;
-	iova_entry_dtor entry_dtor;
-	struct timer_list fq_timer;
-	atomic_t fq_timer_on;
-};
-
-struct iova_fq_entry {
-	long unsigned int iova_pfn;
-	long unsigned int pages;
-	long unsigned int data;
-	u64 counter;
-};
-
-struct iova_fq {
-	struct iova_fq_entry entries[256];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t lock;
-};
-
-struct iommu_dma_msi_page {
-	struct list_head list;
-	dma_addr_t iova;
-	phys_addr_t phys;
-};
-
-enum iommu_dma_cookie_type {
-	IOMMU_DMA_IOVA_COOKIE = 0,
-	IOMMU_DMA_MSI_COOKIE = 1,
-};
-
-struct iommu_dma_cookie {
-	enum iommu_dma_cookie_type type;
-	union {
-		struct iova_domain iovad;
-		dma_addr_t msi_iova;
-	};
-	struct list_head msi_page_list;
-	struct iommu_domain *fq_domain;
-};
-
-struct iova_magazine {
-	long unsigned int size;
-	long unsigned int pfns[128];
-};
-
-struct iova_cpu_rcache {
-	spinlock_t lock;
-	struct iova_magazine *loaded;
-	struct iova_magazine *prev;
-};
-
-struct amd_iommu_device_info {
-	int max_pasids;
-	u32 flags;
-};
-
-struct irq_remap_table {
-	raw_spinlock_t lock;
-	unsigned int min_index;
-	u32 *table;
-};
-
-struct amd_iommu_fault {
-	u64 address;
-	u32 pasid;
-	u16 device_id;
-	u16 tag;
-	u16 flags;
-};
-
-struct protection_domain {
-	struct list_head list;
-	struct list_head dev_list;
-	struct iommu_domain domain;
-	spinlock_t lock;
-	u16 id;
-	int mode;
-	u64 *pt_root;
-	int glx;
-	u64 *gcr3_tbl;
-	long unsigned int flags;
-	unsigned int dev_cnt;
-	unsigned int dev_iommu[32];
-};
-
-struct amd_iommu___2 {
-	struct list_head list;
-	int index;
-	raw_spinlock_t lock;
-	struct pci_dev *dev;
-	struct pci_dev *root_pdev;
-	u64 mmio_phys;
-	u64 mmio_phys_end;
-	u8 *mmio_base;
-	u32 cap;
-	u8 acpi_flags;
-	u64 features;
-	bool is_iommu_v2;
-	u16 devid;
-	u16 cap_ptr;
-	u16 pci_seg;
-	u64 exclusion_start;
-	u64 exclusion_length;
-	u8 *cmd_buf;
-	u32 cmd_buf_head;
-	u32 cmd_buf_tail;
-	u8 *evt_buf;
-	u8 *ppr_log;
-	u8 *ga_log;
-	u8 *ga_log_tail;
-	bool int_enabled;
-	bool need_sync;
-	struct iommu_device iommu;
-	u32 stored_addr_lo;
-	u32 stored_addr_hi;
-	u32 stored_l1[108];
-	u32 stored_l2[131];
-	u8 max_banks;
-	u8 max_counters;
-	u32 flags;
-	volatile u64 cmd_sem;
-	struct irq_affinity_notify intcapxt_notify;
-};
-
-struct acpihid_map_entry {
-	struct list_head list;
-	u8 uid[256];
-	u8 hid[9];
-	u16 devid;
-	u16 root_devid;
-	bool cmd_line;
-	struct iommu_group *group;
-};
-
-struct iommu_dev_data {
-	spinlock_t lock;
-	struct list_head list;
-	struct llist_node dev_data_list;
-	struct protection_domain *domain;
-	struct pci_dev *pdev;
-	u16 devid;
-	bool iommu_v2;
-	bool passthrough;
-	struct {
-		bool enabled;
-		int qdep;
-	} ats;
-	bool pri_tlp;
-	u32 errata;
-	bool use_vapic;
-	bool defer_attach;
-	struct ratelimit_state rs;
-};
-
-struct dev_table_entry {
-	u64 data[4];
-};
-
-struct unity_map_entry {
-	struct list_head list;
-	u16 devid_start;
-	u16 devid_end;
-	u64 address_start;
-	u64 address_end;
-	int prot;
-};
-
-struct iommu_cmd {
-	u32 data[4];
-};
-
-enum {
-	IRQ_REMAP_XAPIC_MODE = 0,
-	IRQ_REMAP_X2APIC_MODE = 1,
-};
-
-struct devid_map {
-	struct list_head list;
-	u8 id;
-	u16 devid;
-	bool cmd_line;
-};
-
-enum amd_iommu_intr_mode_type {
-	AMD_IOMMU_GUEST_IR_LEGACY = 0,
-	AMD_IOMMU_GUEST_IR_LEGACY_GA = 1,
-	AMD_IOMMU_GUEST_IR_VAPIC = 2,
-};
-
-struct ivhd_header {
-	u8 type;
-	u8 flags;
-	u16 length;
-	u16 devid;
-	u16 cap_ptr;
-	u64 mmio_phys;
-	u16 pci_seg;
-	u16 info;
-	u32 efr_attr;
-	u64 efr_reg;
-	u64 res;
-};
-
-struct ivhd_entry {
-	u8 type;
-	u16 devid;
-	u8 flags;
-	u32 ext;
-	u32 hidh;
-	u64 cid;
-	u8 uidf;
-	u8 uidl;
-	u8 uid;
-} __attribute__((packed));
-
-struct ivmd_header {
-	u8 type;
-	u8 flags;
-	u16 length;
-	u16 devid;
-	u16 aux;
-	u64 resv;
-	u64 range_start;
-	u64 range_length;
-};
-
-enum iommu_init_state {
-	IOMMU_START_STATE = 0,
-	IOMMU_IVRS_DETECTED = 1,
-	IOMMU_ACPI_FINISHED = 2,
-	IOMMU_ENABLED = 3,
-	IOMMU_PCI_INIT = 4,
-	IOMMU_INTERRUPTS_EN = 5,
-	IOMMU_DMA_OPS = 6,
-	IOMMU_INITIALIZED = 7,
-	IOMMU_NOT_FOUND = 8,
-	IOMMU_INIT_ERROR = 9,
-	IOMMU_CMDLINE_DISABLED = 10,
-};
-
-struct ivrs_quirk_entry {
-	u8 id;
-	u16 devid;
-};
-
-enum {
-	DELL_INSPIRON_7375 = 0,
-	DELL_LATITUDE_5495 = 1,
-	LENOVO_IDEAPAD_330S_15ARR = 2,
-};
-
-struct acpi_table_dmar {
-	struct acpi_table_header header;
-	u8 width;
-	u8 flags;
-	u8 reserved[10];
-};
-
-struct acpi_dmar_header {
-	u16 type;
-	u16 length;
-};
-
-enum acpi_dmar_type {
-	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
-	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
-	ACPI_DMAR_TYPE_ROOT_ATS = 2,
-	ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
-	ACPI_DMAR_TYPE_NAMESPACE = 4,
-	ACPI_DMAR_TYPE_RESERVED = 5,
-};
-
-struct acpi_dmar_device_scope {
-	u8 entry_type;
-	u8 length;
-	u16 reserved;
-	u8 enumeration_id;
-	u8 bus;
-};
-
-enum acpi_dmar_scope_type {
-	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
-	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
-	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
-	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
-	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
-	ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
-	ACPI_DMAR_SCOPE_TYPE_RESERVED = 6,
-};
-
-struct acpi_dmar_pci_path {
-	u8 device;
-	u8 function;
-};
-
-struct acpi_dmar_hardware_unit {
-	struct acpi_dmar_header header;
-	u8 flags;
-	u8 reserved;
-	u16 segment;
-	u64 address;
-};
-
-struct acpi_dmar_reserved_memory {
-	struct acpi_dmar_header header;
-	u16 reserved;
-	u16 segment;
-	u64 base_address;
-	u64 end_address;
-};
-
-struct acpi_dmar_atsr {
-	struct acpi_dmar_header header;
-	u8 flags;
-	u8 reserved;
-	u16 segment;
-};
-
-struct acpi_dmar_rhsa {
-	struct acpi_dmar_header header;
-	u32 reserved;
-	u64 base_address;
-	u32 proximity_domain;
-} __attribute__((packed));
-
-struct acpi_dmar_andd {
-	struct acpi_dmar_header header;
-	u8 reserved[3];
-	u8 device_number;
-	char device_name[1];
-} __attribute__((packed));
-
-struct dmar_dev_scope {
-	struct device *dev;
-	u8 bus;
-	u8 devfn;
-};
-
-struct intel_iommu;
-
-struct dmar_drhd_unit {
-	struct list_head list;
-	struct acpi_dmar_header *hdr;
-	u64 reg_base_addr;
-	struct dmar_dev_scope *devices;
-	int devices_cnt;
-	u16 segment;
-	u8 ignored: 1;
-	u8 include_all: 1;
-	struct intel_iommu *iommu;
-};
-
-struct iommu_flush {
-	void (*flush_context)(struct intel_iommu *, u16, u16, u8, u64);
-	void (*flush_iotlb)(struct intel_iommu *, u16, u64, unsigned int, u64);
-};
-
-struct dmar_domain;
-
-struct root_entry;
-
-struct q_inval;
-
-struct intel_iommu {
-	void *reg;
-	u64 reg_phys;
-	u64 reg_size;
-	u64 cap;
-	u64 ecap;
-	u32 gcmd;
-	raw_spinlock_t register_lock;
-	int seq_id;
-	int agaw;
-	int msagaw;
-	unsigned int irq;
-	unsigned int pr_irq;
-	u16 segment;
-	unsigned char name[13];
-	long unsigned int *domain_ids;
-	struct dmar_domain ***domains;
-	spinlock_t lock;
-	struct root_entry *root_entry;
-	struct iommu_flush flush;
-	struct q_inval *qi;
-	u32 *iommu_state;
-	struct iommu_device iommu;
-	int node;
-	u32 flags;
-};
-
-struct dmar_pci_path {
-	u8 bus;
-	u8 device;
-	u8 function;
-};
-
-struct dmar_pci_notify_info {
-	struct pci_dev *dev;
-	long unsigned int event;
-	int bus;
-	u16 seg;
-	u16 level;
-	struct dmar_pci_path path[0];
-};
-
-enum {
-	QI_FREE = 0,
-	QI_IN_USE = 1,
-	QI_DONE = 2,
-	QI_ABORT = 3,
-};
-
-struct qi_desc {
-	u64 qw0;
-	u64 qw1;
-	u64 qw2;
-	u64 qw3;
-};
-
-struct q_inval {
-	raw_spinlock_t q_lock;
-	void *desc;
-	int *desc_status;
-	int free_head;
-	int free_tail;
-	int free_cnt;
-};
-
-struct root_entry {
-	u64 lo;
-	u64 hi;
-};
-
-struct dma_pte;
-
-struct dmar_domain {
-	int nid;
-	unsigned int iommu_refcnt[128];
-	u16 iommu_did[128];
-	unsigned int auxd_refcnt;
-	bool has_iotlb_device;
-	struct list_head devices;
-	struct list_head auxd;
-	struct iova_domain iovad;
-	struct dma_pte *pgd;
-	int gaw;
-	int agaw;
-	int flags;
-	int iommu_coherency;
-	int iommu_snooping;
-	int iommu_count;
-	int iommu_superpage;
-	u64 max_addr;
-	int default_pasid;
-	struct iommu_domain domain;
-};
-
-struct dma_pte {
-	u64 val;
-};
-
-typedef int (*dmar_res_handler_t)(struct acpi_dmar_header *, void *);
-
-struct dmar_res_callback {
-	dmar_res_handler_t cb[5];
-	void *arg[5];
-	bool ignore_unhandled;
-	bool print_entry;
-};
-
-enum faulttype {
-	DMA_REMAP = 0,
-	INTR_REMAP = 1,
-	UNKNOWN = 2,
-};
-
-struct memory_notify {
-	long unsigned int start_pfn;
-	long unsigned int nr_pages;
-	int status_change_nid_normal;
-	int status_change_nid_high;
-	int status_change_nid;
-};
-
-enum {
-	SR_DMAR_FECTL_REG = 0,
-	SR_DMAR_FEDATA_REG = 1,
-	SR_DMAR_FEADDR_REG = 2,
-	SR_DMAR_FEUADDR_REG = 3,
-	MAX_SR_DMAR_REGS = 4,
-};
-
-struct context_entry {
-	u64 lo;
-	u64 hi;
-};
-
-struct pasid_table;
-
-struct device_domain_info {
-	struct list_head link;
-	struct list_head global;
-	struct list_head table;
-	struct list_head auxiliary_domains;
-	u8 bus;
-	u8 devfn;
-	u16 pfsid;
-	u8 pasid_supported: 3;
-	u8 pasid_enabled: 1;
-	u8 pri_supported: 1;
-	u8 pri_enabled: 1;
-	u8 ats_supported: 1;
-	u8 ats_enabled: 1;
-	u8 auxd_enabled: 1;
-	u8 ats_qdep;
-	struct device *dev;
-	struct intel_iommu *iommu;
-	struct dmar_domain *domain;
-	struct pasid_table *pasid_table;
-};
-
-struct pasid_table {
-	void *table;
-	int order;
-	int max_pasid;
-	struct list_head dev;
-};
-
-struct dmar_rmrr_unit {
-	struct list_head list;
-	struct acpi_dmar_header *hdr;
-	u64 base_address;
-	u64 end_address;
-	struct dmar_dev_scope *devices;
-	int devices_cnt;
-};
-
-struct dmar_atsr_unit {
-	struct list_head list;
-	struct acpi_dmar_header *hdr;
-	struct dmar_dev_scope *devices;
-	int devices_cnt;
-	u8 include_all: 1;
-};
-
-struct domain_context_mapping_data {
-	struct dmar_domain *domain;
-	struct intel_iommu *iommu;
-	struct pasid_table *table;
-};
-
-struct pasid_dir_entry {
-	u64 val;
-};
-
-struct pasid_entry {
-	u64 val[8];
-};
-
-struct pasid_table_opaque {
-	struct pasid_table **pasid_table;
-	int segment;
-	int bus;
-	int devfn;
-};
-
-struct trace_event_raw_dma_map {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	dma_addr_t dev_addr;
-	phys_addr_t phys_addr;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_raw_dma_unmap {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	dma_addr_t dev_addr;
-	size_t size;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dma_map {
-	u32 dev_name;
-};
-
-struct trace_event_data_offsets_dma_unmap {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_map_single)(void *, struct device *, dma_addr_t, phys_addr_t, size_t);
-
-typedef void (*btf_trace_map_sg)(void *, struct device *, dma_addr_t, phys_addr_t, size_t);
-
-typedef void (*btf_trace_bounce_map_single)(void *, struct device *, dma_addr_t, phys_addr_t, size_t);
-
-typedef void (*btf_trace_unmap_single)(void *, struct device *, dma_addr_t, size_t);
-
-typedef void (*btf_trace_unmap_sg)(void *, struct device *, dma_addr_t, size_t);
-
-typedef void (*btf_trace_bounce_unmap_single)(void *, struct device *, dma_addr_t, size_t);
-
-struct i2c_msg {
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	__u8 *buf;
-};
-
-union i2c_smbus_data {
-	__u8 byte;
-	__u16 word;
-	__u8 block[34];
-};
-
-struct i2c_algorithm;
-
-struct i2c_lock_operations;
-
-struct i2c_bus_recovery_info;
-
-struct i2c_adapter_quirks;
-
-struct i2c_adapter {
-	struct module *owner;
-	unsigned int class;
-	const struct i2c_algorithm *algo;
-	void *algo_data;
-	const struct i2c_lock_operations *lock_ops;
-	struct rt_mutex bus_lock;
-	struct rt_mutex mux_lock;
-	int timeout;
-	int retries;
-	struct device dev;
-	long unsigned int locked_flags;
-	int nr;
-	char name[48];
-	struct completion dev_released;
-	struct mutex userspace_clients_lock;
-	struct list_head userspace_clients;
-	struct i2c_bus_recovery_info *bus_recovery_info;
-	const struct i2c_adapter_quirks *quirks;
-	struct irq_domain *host_notify_domain;
-};
-
-struct i2c_algorithm {
-	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	u32 (*functionality)(struct i2c_adapter *);
-};
-
-struct i2c_lock_operations {
-	void (*lock_bus)(struct i2c_adapter *, unsigned int);
-	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
-	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
-};
-
-struct i2c_bus_recovery_info {
-	int (*recover_bus)(struct i2c_adapter *);
-	int (*get_scl)(struct i2c_adapter *);
-	void (*set_scl)(struct i2c_adapter *, int);
-	int (*get_sda)(struct i2c_adapter *);
-	void (*set_sda)(struct i2c_adapter *, int);
-	int (*get_bus_free)(struct i2c_adapter *);
-	void (*prepare_recovery)(struct i2c_adapter *);
-	void (*unprepare_recovery)(struct i2c_adapter *);
-	struct gpio_desc *scl_gpiod;
-	struct gpio_desc *sda_gpiod;
-};
-
-struct i2c_adapter_quirks {
-	u64 flags;
-	int max_num_msgs;
-	u16 max_write_len;
-	u16 max_read_len;
-	u16 max_comb_1st_msg_len;
-	u16 max_comb_2nd_msg_len;
-};
-
-struct hdr_static_metadata {
-	__u8 eotf;
-	__u8 metadata_type;
-	__u16 max_cll;
-	__u16 max_fall;
-	__u16 min_cll;
-};
-
-struct hdr_sink_metadata {
-	__u32 metadata_type;
-	union {
-		struct hdr_static_metadata hdmi_type1;
-	};
-};
-
-typedef unsigned int drm_magic_t;
-
-struct drm_clip_rect {
-	short unsigned int x1;
-	short unsigned int y1;
-	short unsigned int x2;
-	short unsigned int y2;
-};
-
-struct drm_event {
-	__u32 type;
-	__u32 length;
-};
-
-struct drm_event_vblank {
-	struct drm_event base;
-	__u64 user_data;
-	__u32 tv_sec;
-	__u32 tv_usec;
-	__u32 sequence;
-	__u32 crtc_id;
-};
-
-struct drm_event_crtc_sequence {
-	struct drm_event base;
-	__u64 user_data;
-	__s64 time_ns;
-	__u64 sequence;
-};
-
-enum drm_mode_subconnector {
-	DRM_MODE_SUBCONNECTOR_Automatic = 0,
-	DRM_MODE_SUBCONNECTOR_Unknown = 0,
-	DRM_MODE_SUBCONNECTOR_DVID = 3,
-	DRM_MODE_SUBCONNECTOR_DVIA = 4,
-	DRM_MODE_SUBCONNECTOR_Composite = 5,
-	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
-	DRM_MODE_SUBCONNECTOR_Component = 8,
-	DRM_MODE_SUBCONNECTOR_SCART = 9,
-};
-
-struct drm_mode_fb_cmd2 {
-	__u32 fb_id;
-	__u32 width;
-	__u32 height;
-	__u32 pixel_format;
-	__u32 flags;
-	__u32 handles[4];
-	__u32 pitches[4];
-	__u32 offsets[4];
-	__u64 modifier[4];
-};
-
-struct drm_mode_create_dumb {
-	__u32 height;
-	__u32 width;
-	__u32 bpp;
-	__u32 flags;
-	__u32 handle;
-	__u32 pitch;
-	__u64 size;
-};
-
-struct drm_modeset_lock;
-
-struct drm_modeset_acquire_ctx {
-	struct ww_acquire_ctx ww_ctx;
-	struct drm_modeset_lock *contended;
-	struct list_head locked;
-	bool trylock_only;
-	bool interruptible;
-};
-
-struct drm_modeset_lock {
-	struct ww_mutex mutex;
-	struct list_head head;
-};
-
-struct drm_rect {
-	int x1;
-	int y1;
-	int x2;
-	int y2;
-};
-
-struct drm_object_properties;
-
-struct drm_mode_object {
-	uint32_t id;
-	uint32_t type;
-	struct drm_object_properties *properties;
-	struct kref refcount;
-	void (*free_cb)(struct kref *);
-};
-
-struct drm_property;
-
-struct drm_object_properties {
-	int count;
-	struct drm_property *properties[24];
-	uint64_t values[24];
-};
-
-struct drm_device;
-
-struct drm_property {
-	struct list_head head;
-	struct drm_mode_object base;
-	uint32_t flags;
-	char name[32];
-	uint32_t num_values;
-	uint64_t *values;
-	struct drm_device *dev;
-	struct list_head enum_list;
-};
-
-struct drm_framebuffer;
-
-struct drm_file;
-
-struct drm_framebuffer_funcs {
-	void (*destroy)(struct drm_framebuffer *);
-	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
-	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
-};
-
-struct drm_format_info;
-
-struct drm_gem_object;
-
-struct drm_framebuffer {
-	struct drm_device *dev;
-	struct list_head head;
-	struct drm_mode_object base;
-	char comm[16];
-	const struct drm_format_info *format;
-	const struct drm_framebuffer_funcs *funcs;
-	unsigned int pitches[4];
-	unsigned int offsets[4];
-	uint64_t modifier;
-	unsigned int width;
-	unsigned int height;
-	int flags;
-	int hot_x;
-	int hot_y;
-	struct list_head filp_head;
-	struct drm_gem_object *obj[4];
-};
-
-struct drm_prime_file_private {
-	struct mutex lock;
-	struct rb_root dmabufs;
-	struct rb_root handles;
-};
-
-struct drm_master;
-
-struct drm_minor;
-
-struct drm_file {
-	bool authenticated;
-	bool stereo_allowed;
-	bool universal_planes;
-	bool atomic;
-	bool aspect_ratio_allowed;
-	bool writeback_connectors;
-	bool is_master;
-	struct drm_master *master;
-	struct pid *pid;
-	drm_magic_t magic;
-	struct list_head lhead;
-	struct drm_minor *minor;
-	struct idr object_idr;
-	spinlock_t table_lock;
-	struct idr syncobj_idr;
-	spinlock_t syncobj_table_lock;
-	struct file *filp;
-	void *driver_priv;
-	struct list_head fbs;
-	struct mutex fbs_lock;
-	struct list_head blobs;
-	wait_queue_head_t event_wait;
-	struct list_head pending_event_list;
-	struct list_head event_list;
-	int event_space;
-	struct mutex event_read_lock;
-	struct drm_prime_file_private prime;
-};
-
-struct drm_mode_config_funcs;
-
-struct drm_atomic_state;
-
-struct drm_mode_config_helper_funcs;
-
-struct drm_mode_config {
-	struct mutex mutex;
-	struct drm_modeset_lock connection_mutex;
-	struct drm_modeset_acquire_ctx *acquire_ctx;
-	struct mutex idr_mutex;
-	struct idr object_idr;
-	struct idr tile_idr;
-	struct mutex fb_lock;
-	int num_fb;
-	struct list_head fb_list;
-	spinlock_t connector_list_lock;
-	int num_connector;
-	struct ida connector_ida;
-	struct list_head connector_list;
-	struct llist_head connector_free_list;
-	struct work_struct connector_free_work;
-	int num_encoder;
-	struct list_head encoder_list;
-	int num_total_plane;
-	struct list_head plane_list;
-	int num_crtc;
-	struct list_head crtc_list;
-	struct list_head property_list;
-	struct list_head privobj_list;
-	int min_width;
-	int min_height;
-	int max_width;
-	int max_height;
-	const struct drm_mode_config_funcs *funcs;
-	resource_size_t fb_base;
-	bool poll_enabled;
-	bool poll_running;
-	bool delayed_event;
-	struct delayed_work output_poll_work;
-	struct mutex blob_lock;
-	struct list_head property_blob_list;
-	struct drm_property *edid_property;
-	struct drm_property *dpms_property;
-	struct drm_property *path_property;
-	struct drm_property *tile_property;
-	struct drm_property *link_status_property;
-	struct drm_property *plane_type_property;
-	struct drm_property *prop_src_x;
-	struct drm_property *prop_src_y;
-	struct drm_property *prop_src_w;
-	struct drm_property *prop_src_h;
-	struct drm_property *prop_crtc_x;
-	struct drm_property *prop_crtc_y;
-	struct drm_property *prop_crtc_w;
-	struct drm_property *prop_crtc_h;
-	struct drm_property *prop_fb_id;
-	struct drm_property *prop_in_fence_fd;
-	struct drm_property *prop_out_fence_ptr;
-	struct drm_property *prop_crtc_id;
-	struct drm_property *prop_fb_damage_clips;
-	struct drm_property *prop_active;
-	struct drm_property *prop_mode_id;
-	struct drm_property *prop_vrr_enabled;
-	struct drm_property *dvi_i_subconnector_property;
-	struct drm_property *dvi_i_select_subconnector_property;
-	struct drm_property *tv_subconnector_property;
-	struct drm_property *tv_select_subconnector_property;
-	struct drm_property *tv_mode_property;
-	struct drm_property *tv_left_margin_property;
-	struct drm_property *tv_right_margin_property;
-	struct drm_property *tv_top_margin_property;
-	struct drm_property *tv_bottom_margin_property;
-	struct drm_property *tv_brightness_property;
-	struct drm_property *tv_contrast_property;
-	struct drm_property *tv_flicker_reduction_property;
-	struct drm_property *tv_overscan_property;
-	struct drm_property *tv_saturation_property;
-	struct drm_property *tv_hue_property;
-	struct drm_property *scaling_mode_property;
-	struct drm_property *aspect_ratio_property;
-	struct drm_property *content_type_property;
-	struct drm_property *degamma_lut_property;
-	struct drm_property *degamma_lut_size_property;
-	struct drm_property *ctm_property;
-	struct drm_property *gamma_lut_property;
-	struct drm_property *gamma_lut_size_property;
-	struct drm_property *suggested_x_property;
-	struct drm_property *suggested_y_property;
-	struct drm_property *non_desktop_property;
-	struct drm_property *panel_orientation_property;
-	struct drm_property *writeback_fb_id_property;
-	struct drm_property *writeback_pixel_formats_property;
-	struct drm_property *writeback_out_fence_ptr_property;
-	struct drm_property *hdr_output_metadata_property;
-	struct drm_property *content_protection_property;
-	struct drm_property *hdcp_content_type_property;
-	uint32_t preferred_depth;
-	uint32_t prefer_shadow;
-	bool prefer_shadow_fbdev;
-	bool quirk_addfb_prefer_xbgr_30bpp;
-	bool quirk_addfb_prefer_host_byte_order;
-	bool async_page_flip;
-	bool allow_fb_modifiers;
-	bool normalize_zpos;
-	struct drm_property *modifiers_property;
-	uint32_t cursor_width;
-	uint32_t cursor_height;
-	struct drm_atomic_state *suspend_state;
-	const struct drm_mode_config_helper_funcs *helper_private;
-};
-
-struct drm_vram_mm;
-
-enum switch_power_state {
-	DRM_SWITCH_POWER_ON = 0,
-	DRM_SWITCH_POWER_OFF = 1,
-	DRM_SWITCH_POWER_CHANGING = 2,
-	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
-};
-
-struct drm_driver;
-
-struct drm_vblank_crtc;
-
-struct drm_agp_head;
-
-struct drm_vma_offset_manager;
-
-struct drm_fb_helper;
-
-struct drm_device {
-	struct list_head legacy_dev_list;
-	int if_version;
-	struct kref ref;
-	struct device *dev;
-	struct drm_driver *driver;
-	void *dev_private;
-	struct drm_minor *primary;
-	struct drm_minor *render;
-	bool registered;
-	struct drm_master *master;
-	u32 driver_features;
-	bool unplugged;
-	struct inode *anon_inode;
-	char *unique;
-	struct mutex struct_mutex;
-	struct mutex master_mutex;
-	int open_count;
-	struct mutex filelist_mutex;
-	struct list_head filelist;
-	struct list_head filelist_internal;
-	struct mutex clientlist_mutex;
-	struct list_head clientlist;
-	bool irq_enabled;
-	int irq;
-	bool vblank_disable_immediate;
-	struct drm_vblank_crtc *vblank;
-	spinlock_t vblank_time_lock;
-	spinlock_t vbl_lock;
-	u32 max_vblank_count;
-	struct list_head vblank_event_list;
-	spinlock_t event_lock;
-	struct drm_agp_head *agp;
-	struct pci_dev *pdev;
-	unsigned int num_crtcs;
-	struct drm_mode_config mode_config;
-	struct mutex object_name_lock;
-	struct idr object_name_idr;
-	struct drm_vma_offset_manager *vma_offset_manager;
-	struct drm_vram_mm *vram_mm;
-	enum switch_power_state switch_power_state;
-	struct drm_fb_helper *fb_helper;
-};
-
-struct drm_format_info {
-	u32 format;
-	u8 depth;
-	u8 num_planes;
-	union {
-		u8 cpp[3];
-		u8 char_per_block[3];
-	};
-	u8 block_w[3];
-	u8 block_h[3];
-	u8 hsub;
-	u8 vsub;
-	bool has_alpha;
-	bool is_yuv;
-};
-
-struct drm_mm;
-
-struct drm_mm_node {
-	long unsigned int color;
-	u64 start;
-	u64 size;
-	struct drm_mm *mm;
-	struct list_head node_list;
-	struct list_head hole_stack;
-	struct rb_node rb;
-	struct rb_node rb_hole_size;
-	struct rb_node rb_hole_addr;
-	u64 __subtree_last;
-	u64 hole_size;
-	long unsigned int flags;
-};
-
-struct drm_vma_offset_node {
-	rwlock_t vm_lock;
-	struct drm_mm_node vm_node;
-	struct rb_root vm_files;
-	bool readonly: 1;
-};
-
-struct dma_fence;
-
-struct dma_resv_list;
-
-struct dma_resv {
-	struct ww_mutex lock;
-	seqcount_t seq;
-	struct dma_fence *fence_excl;
-	struct dma_resv_list *fence;
-};
-
-struct dma_buf;
-
-struct dma_buf_attachment;
-
-struct drm_gem_object_funcs;
-
-struct drm_gem_object {
-	struct kref refcount;
-	unsigned int handle_count;
-	struct drm_device *dev;
-	struct file *filp;
-	struct drm_vma_offset_node vma_node;
-	size_t size;
-	int name;
-	struct dma_buf *dma_buf;
-	struct dma_buf_attachment *import_attach;
-	struct dma_resv *resv;
-	struct dma_resv _resv;
-	const struct drm_gem_object_funcs *funcs;
-};
-
-enum drm_connector_force {
-	DRM_FORCE_UNSPECIFIED = 0,
-	DRM_FORCE_OFF = 1,
-	DRM_FORCE_ON = 2,
-	DRM_FORCE_ON_DIGITAL = 3,
-};
-
-enum drm_connector_status {
-	connector_status_connected = 1,
-	connector_status_disconnected = 2,
-	connector_status_unknown = 3,
-};
-
-enum drm_connector_registration_state {
-	DRM_CONNECTOR_INITIALIZING = 0,
-	DRM_CONNECTOR_REGISTERED = 1,
-	DRM_CONNECTOR_UNREGISTERED = 2,
-};
-
-enum subpixel_order {
-	SubPixelUnknown = 0,
-	SubPixelHorizontalRGB = 1,
-	SubPixelHorizontalBGR = 2,
-	SubPixelVerticalRGB = 3,
-	SubPixelVerticalBGR = 4,
-	SubPixelNone = 5,
-};
-
-struct drm_scrambling {
-	bool supported;
-	bool low_rates;
-};
-
-struct drm_scdc {
-	bool supported;
-	bool read_request;
-	struct drm_scrambling scrambling;
-};
-
-struct drm_hdmi_info {
-	struct drm_scdc scdc;
-	long unsigned int y420_vdb_modes[2];
-	long unsigned int y420_cmdb_modes[2];
-	u64 y420_cmdb_map;
-	u8 y420_dc_modes;
-};
-
-enum drm_link_status {
-	DRM_LINK_STATUS_GOOD = 0,
-	DRM_LINK_STATUS_BAD = 1,
-};
-
-struct drm_display_info {
-	unsigned int width_mm;
-	unsigned int height_mm;
-	unsigned int bpc;
-	enum subpixel_order subpixel_order;
-	int panel_orientation;
-	u32 color_formats;
-	const u32 *bus_formats;
-	unsigned int num_bus_formats;
-	u32 bus_flags;
-	int max_tmds_clock;
-	bool dvi_dual;
-	bool has_hdmi_infoframe;
-	bool rgb_quant_range_selectable;
-	u8 edid_hdmi_dc_modes;
-	u8 cea_rev;
-	struct drm_hdmi_info hdmi;
-	bool non_desktop;
-};
-
-struct drm_connector_tv_margins {
-	unsigned int bottom;
-	unsigned int left;
-	unsigned int right;
-	unsigned int top;
-};
-
-struct drm_tv_connector_state {
-	enum drm_mode_subconnector subconnector;
-	struct drm_connector_tv_margins margins;
-	unsigned int mode;
-	unsigned int brightness;
-	unsigned int contrast;
-	unsigned int flicker_reduction;
-	unsigned int overscan;
-	unsigned int saturation;
-	unsigned int hue;
-};
-
-struct drm_connector;
-
-struct drm_crtc;
-
-struct drm_encoder;
-
-struct drm_crtc_commit;
-
-struct drm_writeback_job;
-
-struct drm_property_blob;
-
-struct drm_connector_state {
-	struct drm_connector *connector;
-	struct drm_crtc *crtc;
-	struct drm_encoder *best_encoder;
-	enum drm_link_status link_status;
-	struct drm_atomic_state *state;
-	struct drm_crtc_commit *commit;
-	struct drm_tv_connector_state tv;
-	bool self_refresh_aware;
-	enum hdmi_picture_aspect picture_aspect_ratio;
-	unsigned int content_type;
-	unsigned int hdcp_content_type;
-	unsigned int scaling_mode;
-	unsigned int content_protection;
-	u32 colorspace;
-	struct drm_writeback_job *writeback_job;
-	u8 max_requested_bpc;
-	u8 max_bpc;
-	struct drm_property_blob *hdr_output_metadata;
-};
-
-struct drm_cmdline_mode {
-	char name[32];
-	bool specified;
-	bool refresh_specified;
-	bool bpp_specified;
-	int xres;
-	int yres;
-	int bpp;
-	int refresh;
-	bool rb;
-	bool interlace;
-	bool cvt;
-	bool margins;
-	enum drm_connector_force force;
-	unsigned int rotation_reflection;
-	struct drm_connector_tv_margins tv_margins;
-};
-
-struct drm_connector_funcs;
-
-struct drm_connector_helper_funcs;
-
-struct drm_tile_group;
-
-struct drm_connector {
-	struct drm_device *dev;
-	struct device *kdev;
-	struct device_attribute *attr;
-	struct list_head head;
-	struct drm_mode_object base;
-	char *name;
-	struct mutex mutex;
-	unsigned int index;
-	int connector_type;
-	int connector_type_id;
-	bool interlace_allowed;
-	bool doublescan_allowed;
-	bool stereo_allowed;
-	bool ycbcr_420_allowed;
-	enum drm_connector_registration_state registration_state;
-	struct list_head modes;
-	enum drm_connector_status status;
-	struct list_head probed_modes;
-	struct drm_display_info display_info;
-	const struct drm_connector_funcs *funcs;
-	struct drm_property_blob *edid_blob_ptr;
-	struct drm_object_properties properties;
-	struct drm_property *scaling_mode_property;
-	struct drm_property *vrr_capable_property;
-	struct drm_property *colorspace_property;
-	struct drm_property_blob *path_blob_ptr;
-	struct drm_property *max_bpc_property;
-	uint8_t polled;
-	int dpms;
-	const struct drm_connector_helper_funcs *helper_private;
-	struct drm_cmdline_mode cmdline_mode;
-	enum drm_connector_force force;
-	bool override_edid;
-	u32 possible_encoders;
-	struct drm_encoder *encoder;
-	uint8_t eld[128];
-	bool latency_present[2];
-	int video_latency[2];
-	int audio_latency[2];
-	struct i2c_adapter *ddc;
-	int null_edid_counter;
-	unsigned int bad_edid_counter;
-	bool edid_corrupt;
-	struct dentry *debugfs_entry;
-	struct drm_connector_state *state;
-	struct drm_property_blob *tile_blob_ptr;
-	bool has_tile;
-	struct drm_tile_group *tile_group;
-	bool tile_is_single_monitor;
-	uint8_t num_h_tile;
-	uint8_t num_v_tile;
-	uint8_t tile_h_loc;
-	uint8_t tile_v_loc;
-	uint16_t tile_h_size;
-	uint16_t tile_v_size;
-	struct llist_node free_node;
-	struct hdr_sink_metadata hdr_sink_metadata;
-};
-
-enum drm_mode_status {
-	MODE_OK = 0,
-	MODE_HSYNC = 1,
-	MODE_VSYNC = 2,
-	MODE_H_ILLEGAL = 3,
-	MODE_V_ILLEGAL = 4,
-	MODE_BAD_WIDTH = 5,
-	MODE_NOMODE = 6,
-	MODE_NO_INTERLACE = 7,
-	MODE_NO_DBLESCAN = 8,
-	MODE_NO_VSCAN = 9,
-	MODE_MEM = 10,
-	MODE_VIRTUAL_X = 11,
-	MODE_VIRTUAL_Y = 12,
-	MODE_MEM_VIRT = 13,
-	MODE_NOCLOCK = 14,
-	MODE_CLOCK_HIGH = 15,
-	MODE_CLOCK_LOW = 16,
-	MODE_CLOCK_RANGE = 17,
-	MODE_BAD_HVALUE = 18,
-	MODE_BAD_VVALUE = 19,
-	MODE_BAD_VSCAN = 20,
-	MODE_HSYNC_NARROW = 21,
-	MODE_HSYNC_WIDE = 22,
-	MODE_HBLANK_NARROW = 23,
-	MODE_HBLANK_WIDE = 24,
-	MODE_VSYNC_NARROW = 25,
-	MODE_VSYNC_WIDE = 26,
-	MODE_VBLANK_NARROW = 27,
-	MODE_VBLANK_WIDE = 28,
-	MODE_PANEL = 29,
-	MODE_INTERLACE_WIDTH = 30,
-	MODE_ONE_WIDTH = 31,
-	MODE_ONE_HEIGHT = 32,
-	MODE_ONE_SIZE = 33,
-	MODE_NO_REDUCED = 34,
-	MODE_NO_STEREO = 35,
-	MODE_NO_420 = 36,
-	MODE_STALE = 4294967293,
-	MODE_BAD = 4294967294,
-	MODE_ERROR = 4294967295,
-};
-
-struct drm_display_mode {
-	struct list_head head;
-	char name[32];
-	enum drm_mode_status status;
-	unsigned int type;
-	int clock;
-	int hdisplay;
-	int hsync_start;
-	int hsync_end;
-	int htotal;
-	int hskew;
-	int vdisplay;
-	int vsync_start;
-	int vsync_end;
-	int vtotal;
-	int vscan;
-	unsigned int flags;
-	int width_mm;
-	int height_mm;
-	int crtc_clock;
-	int crtc_hdisplay;
-	int crtc_hblank_start;
-	int crtc_hblank_end;
-	int crtc_hsync_start;
-	int crtc_hsync_end;
-	int crtc_htotal;
-	int crtc_hskew;
-	int crtc_vdisplay;
-	int crtc_vblank_start;
-	int crtc_vblank_end;
-	int crtc_vsync_start;
-	int crtc_vsync_end;
-	int crtc_vtotal;
-	int *private;
-	int private_flags;
-	int vrefresh;
-	int hsync;
-	enum hdmi_picture_aspect picture_aspect_ratio;
-	struct list_head export_head;
-};
-
-struct drm_crtc_crc_entry;
-
-struct drm_crtc_crc {
-	spinlock_t lock;
-	const char *source;
-	bool opened;
-	bool overflow;
-	struct drm_crtc_crc_entry *entries;
-	int head;
-	int tail;
-	size_t values_cnt;
-	wait_queue_head_t wq;
-};
-
-struct drm_plane;
-
-struct drm_crtc_funcs;
-
-struct drm_crtc_helper_funcs;
-
-struct drm_crtc_state;
-
-struct drm_self_refresh_data;
-
-struct drm_crtc {
-	struct drm_device *dev;
-	struct device_node *port;
-	struct list_head head;
-	char *name;
-	struct drm_modeset_lock mutex;
-	struct drm_mode_object base;
-	struct drm_plane *primary;
-	struct drm_plane *cursor;
-	unsigned int index;
-	int cursor_x;
-	int cursor_y;
-	bool enabled;
-	struct drm_display_mode mode;
-	struct drm_display_mode hwmode;
-	int x;
-	int y;
-	const struct drm_crtc_funcs *funcs;
-	uint32_t gamma_size;
-	uint16_t *gamma_store;
-	const struct drm_crtc_helper_funcs *helper_private;
-	struct drm_object_properties properties;
-	struct drm_crtc_state *state;
-	struct list_head commit_list;
-	spinlock_t commit_lock;
-	struct dentry *debugfs_entry;
-	struct drm_crtc_crc crc;
-	unsigned int fence_context;
-	spinlock_t fence_lock;
-	long unsigned int fence_seqno;
-	char timeline_name[32];
-	struct drm_self_refresh_data *self_refresh_data;
-};
-
-struct drm_bridge;
-
-struct drm_encoder_funcs;
-
-struct drm_encoder_helper_funcs;
-
-struct drm_encoder {
-	struct drm_device *dev;
-	struct list_head head;
-	struct drm_mode_object base;
-	char *name;
-	int encoder_type;
-	unsigned int index;
-	uint32_t possible_crtcs;
-	uint32_t possible_clones;
-	struct drm_crtc *crtc;
-	struct drm_bridge *bridge;
-	const struct drm_encoder_funcs *funcs;
-	const struct drm_encoder_helper_funcs *helper_private;
-};
-
-struct __drm_planes_state;
-
-struct __drm_crtcs_state;
-
-struct __drm_connnectors_state;
-
-struct __drm_private_objs_state;
-
-struct drm_atomic_state {
-	struct kref ref;
-	struct drm_device *dev;
-	bool allow_modeset: 1;
-	bool legacy_cursor_update: 1;
-	bool async_update: 1;
-	bool duplicated: 1;
-	struct __drm_planes_state *planes;
-	struct __drm_crtcs_state *crtcs;
-	int num_connector;
-	struct __drm_connnectors_state *connectors;
-	int num_private_objs;
-	struct __drm_private_objs_state *private_objs;
-	struct drm_modeset_acquire_ctx *acquire_ctx;
-	struct drm_crtc_commit *fake_commit;
-	struct work_struct commit_work;
-};
-
-struct drm_pending_vblank_event;
-
-struct drm_crtc_commit {
-	struct drm_crtc *crtc;
-	struct kref ref;
-	struct completion flip_done;
-	struct completion hw_done;
-	struct completion cleanup_done;
-	struct list_head commit_entry;
-	struct drm_pending_vblank_event *event;
-	bool abort_completion;
-};
-
-struct drm_property_blob {
-	struct drm_mode_object base;
-	struct drm_device *dev;
-	struct list_head head_global;
-	struct list_head head_file;
-	size_t length;
-	void *data;
-};
-
-struct drm_printer;
-
-struct drm_connector_funcs {
-	int (*dpms)(struct drm_connector *, int);
-	void (*reset)(struct drm_connector *);
-	enum drm_connector_status (*detect)(struct drm_connector *, bool);
-	void (*force)(struct drm_connector *);
-	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
-	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
-	int (*late_register)(struct drm_connector *);
-	void (*early_unregister)(struct drm_connector *);
-	void (*destroy)(struct drm_connector *);
-	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
-	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
-	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
-	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
-	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
-};
-
-struct drm_printer {
-	void (*printfn)(struct drm_printer *, struct va_format *);
-	void (*puts)(struct drm_printer *, const char *);
-	void *arg;
-	const char *prefix;
-};
-
-struct drm_writeback_connector;
-
-struct drm_connector_helper_funcs {
-	int (*get_modes)(struct drm_connector *);
-	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
-	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
-	struct drm_encoder * (*best_encoder)(struct drm_connector *);
-	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_connector_state *);
-	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
-	void (*atomic_commit)(struct drm_connector *, struct drm_connector_state *);
-	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
-	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
-};
-
-struct drm_tile_group {
-	struct kref refcount;
-	struct drm_device *dev;
-	int id;
-	u8 group_data[8];
-};
-
-struct drm_connector_list_iter {
-	struct drm_device *dev;
-	struct drm_connector *conn;
-};
-
-struct drm_mode_config_funcs {
-	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
-	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
-	void (*output_poll_changed)(struct drm_device *);
-	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
-	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
-	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
-	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
-	void (*atomic_state_clear)(struct drm_atomic_state *);
-	void (*atomic_state_free)(struct drm_atomic_state *);
-};
-
-struct drm_mode_config_helper_funcs {
-	void (*atomic_commit_tail)(struct drm_atomic_state *);
-};
-
-struct drm_ioctl_desc;
-
-struct drm_driver {
-	int (*load)(struct drm_device *, long unsigned int);
-	int (*open)(struct drm_device *, struct drm_file *);
-	void (*postclose)(struct drm_device *, struct drm_file *);
-	void (*lastclose)(struct drm_device *);
-	void (*unload)(struct drm_device *);
-	void (*release)(struct drm_device *);
-	u32 (*get_vblank_counter)(struct drm_device *, unsigned int);
-	int (*enable_vblank)(struct drm_device *, unsigned int);
-	void (*disable_vblank)(struct drm_device *, unsigned int);
-	bool (*get_scanout_position)(struct drm_device *, unsigned int, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
-	bool (*get_vblank_timestamp)(struct drm_device *, unsigned int, int *, ktime_t *, bool);
-	irqreturn_t (*irq_handler)(int, void *);
-	void (*irq_preinstall)(struct drm_device *);
-	int (*irq_postinstall)(struct drm_device *);
-	void (*irq_uninstall)(struct drm_device *);
-	int (*master_create)(struct drm_device *, struct drm_master *);
-	void (*master_destroy)(struct drm_device *, struct drm_master *);
-	int (*master_set)(struct drm_device *, struct drm_file *, bool);
-	void (*master_drop)(struct drm_device *, struct drm_file *);
-	int (*debugfs_init)(struct drm_minor *);
-	void (*gem_free_object)(struct drm_gem_object *);
-	void (*gem_free_object_unlocked)(struct drm_gem_object *);
-	int (*gem_open_object)(struct drm_gem_object *, struct drm_file *);
-	void (*gem_close_object)(struct drm_gem_object *, struct drm_file *);
-	void (*gem_print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
-	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
-	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
-	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
-	struct dma_buf * (*gem_prime_export)(struct drm_gem_object *, int);
-	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
-	int (*gem_prime_pin)(struct drm_gem_object *);
-	void (*gem_prime_unpin)(struct drm_gem_object *);
-	struct sg_table * (*gem_prime_get_sg_table)(struct drm_gem_object *);
-	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
-	void * (*gem_prime_vmap)(struct drm_gem_object *);
-	void (*gem_prime_vunmap)(struct drm_gem_object *, void *);
-	int (*gem_prime_mmap)(struct drm_gem_object *, struct vm_area_struct *);
-	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
-	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
-	int (*dumb_destroy)(struct drm_file *, struct drm_device *, uint32_t);
-	const struct vm_operations_struct *gem_vm_ops;
-	int major;
-	int minor;
-	int patchlevel;
-	char *name;
-	char *desc;
-	char *date;
-	u32 driver_features;
-	const struct drm_ioctl_desc *ioctls;
-	int num_ioctls;
-	const struct file_operations *fops;
-	struct list_head legacy_dev_list;
-	int (*firstopen)(struct drm_device *);
-	void (*preclose)(struct drm_device *, struct drm_file *);
-	int (*dma_ioctl)(struct drm_device *, void *, struct drm_file *);
-	int (*dma_quiescent)(struct drm_device *);
-	int (*context_dtor)(struct drm_device *, int);
-	int dev_priv_size;
-};
-
-struct drm_minor {
-	int index;
-	int type;
-	struct device *kdev;
-	struct drm_device *dev;
-	struct dentry *debugfs_root;
-	struct list_head debugfs_list;
-	struct mutex debugfs_lock;
-};
-
-struct drm_vblank_crtc {
-	struct drm_device *dev;
-	wait_queue_head_t queue;
-	struct timer_list disable_timer;
-	seqlock_t seqlock;
-	atomic64_t count;
-	ktime_t time;
-	atomic_t refcount;
-	u32 last;
-	u32 max_vblank_count;
-	unsigned int inmodeset;
-	unsigned int pipe;
-	int framedur_ns;
-	int linedur_ns;
-	struct drm_display_mode hwmode;
-	bool enabled;
-};
-
-struct drm_client_funcs;
-
-struct drm_mode_set;
-
-struct drm_client_dev {
-	struct drm_device *dev;
-	const char *name;
-	struct list_head list;
-	const struct drm_client_funcs *funcs;
-	struct drm_file *file;
-	struct mutex modeset_mutex;
-	struct drm_mode_set *modesets;
-};
-
-struct drm_client_buffer;
-
-struct drm_fb_helper_funcs;
-
-struct drm_fb_helper {
-	struct drm_client_dev client;
-	struct drm_client_buffer *buffer;
-	struct drm_framebuffer *fb;
-	struct drm_device *dev;
-	const struct drm_fb_helper_funcs *funcs;
-	struct fb_info *fbdev;
-	u32 pseudo_palette[17];
-	struct drm_clip_rect dirty_clip;
-	spinlock_t dirty_lock;
-	struct work_struct dirty_work;
-	struct work_struct resume_work;
-	struct mutex lock;
-	struct list_head kernel_fb_list;
-	bool delayed_hotplug;
-	bool deferred_setup;
-	int preferred_bpp;
-};
-
-enum drm_color_encoding {
-	DRM_COLOR_YCBCR_BT601 = 0,
-	DRM_COLOR_YCBCR_BT709 = 1,
-	DRM_COLOR_YCBCR_BT2020 = 2,
-	DRM_COLOR_ENCODING_MAX = 3,
-};
-
-enum drm_color_range {
-	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
-	DRM_COLOR_YCBCR_FULL_RANGE = 1,
-	DRM_COLOR_RANGE_MAX = 2,
-};
-
-struct drm_plane_state {
-	struct drm_plane *plane;
-	struct drm_crtc *crtc;
-	struct drm_framebuffer *fb;
-	struct dma_fence *fence;
-	int32_t crtc_x;
-	int32_t crtc_y;
-	uint32_t crtc_w;
-	uint32_t crtc_h;
-	uint32_t src_x;
-	uint32_t src_y;
-	uint32_t src_h;
-	uint32_t src_w;
-	u16 alpha;
-	uint16_t pixel_blend_mode;
-	unsigned int rotation;
-	unsigned int zpos;
-	unsigned int normalized_zpos;
-	enum drm_color_encoding color_encoding;
-	enum drm_color_range color_range;
-	struct drm_property_blob *fb_damage_clips;
-	struct drm_rect src;
-	struct drm_rect dst;
-	bool visible;
-	struct drm_crtc_commit *commit;
-	struct drm_atomic_state *state;
-};
-
-enum drm_plane_type {
-	DRM_PLANE_TYPE_OVERLAY = 0,
-	DRM_PLANE_TYPE_PRIMARY = 1,
-	DRM_PLANE_TYPE_CURSOR = 2,
-};
-
-struct drm_plane_funcs;
-
-struct drm_plane_helper_funcs;
-
-struct drm_plane {
-	struct drm_device *dev;
-	struct list_head head;
-	char *name;
-	struct drm_modeset_lock mutex;
-	struct drm_mode_object base;
-	uint32_t possible_crtcs;
-	uint32_t *format_types;
-	unsigned int format_count;
-	bool format_default;
-	uint64_t *modifiers;
-	unsigned int modifier_count;
-	struct drm_crtc *crtc;
-	struct drm_framebuffer *fb;
-	struct drm_framebuffer *old_fb;
-	const struct drm_plane_funcs *funcs;
-	struct drm_object_properties properties;
-	enum drm_plane_type type;
-	unsigned int index;
-	const struct drm_plane_helper_funcs *helper_private;
-	struct drm_plane_state *state;
-	struct drm_property *alpha_property;
-	struct drm_property *zpos_property;
-	struct drm_property *rotation_property;
-	struct drm_property *blend_mode_property;
-	struct drm_property *color_encoding_property;
-	struct drm_property *color_range_property;
-};
-
-struct drm_plane_funcs {
-	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
-	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
-	void (*destroy)(struct drm_plane *);
-	void (*reset)(struct drm_plane *);
-	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
-	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
-	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
-	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
-	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
-	int (*late_register)(struct drm_plane *);
-	void (*early_unregister)(struct drm_plane *);
-	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
-	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
-};
-
-struct drm_plane_helper_funcs {
-	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
-	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
-	int (*atomic_check)(struct drm_plane *, struct drm_plane_state *);
-	void (*atomic_update)(struct drm_plane *, struct drm_plane_state *);
-	void (*atomic_disable)(struct drm_plane *, struct drm_plane_state *);
-	int (*atomic_async_check)(struct drm_plane *, struct drm_plane_state *);
-	void (*atomic_async_update)(struct drm_plane *, struct drm_plane_state *);
-};
-
-struct drm_crtc_crc_entry {
-	bool has_frame_counter;
-	uint32_t frame;
-	uint32_t crcs[10];
-};
-
-struct drm_crtc_state {
-	struct drm_crtc *crtc;
-	bool enable;
-	bool active;
-	bool planes_changed: 1;
-	bool mode_changed: 1;
-	bool active_changed: 1;
-	bool connectors_changed: 1;
-	bool zpos_changed: 1;
-	bool color_mgmt_changed: 1;
-	bool no_vblank: 1;
-	u32 plane_mask;
-	u32 connector_mask;
-	u32 encoder_mask;
-	struct drm_display_mode adjusted_mode;
-	struct drm_display_mode mode;
-	struct drm_property_blob *mode_blob;
-	struct drm_property_blob *degamma_lut;
-	struct drm_property_blob *ctm;
-	struct drm_property_blob *gamma_lut;
-	u32 target_vblank;
-	bool async_flip;
-	bool vrr_enabled;
-	bool self_refresh_active;
-	struct drm_pending_vblank_event *event;
-	struct drm_crtc_commit *commit;
-	struct drm_atomic_state *state;
-};
-
-struct drm_pending_event {
-	struct completion *completion;
-	void (*completion_release)(struct completion *);
-	struct drm_event *event;
-	struct dma_fence *fence;
-	struct drm_file *file_priv;
-	struct list_head link;
-	struct list_head pending_link;
-};
-
-struct drm_pending_vblank_event {
-	struct drm_pending_event base;
-	unsigned int pipe;
-	u64 sequence;
-	union {
-		struct drm_event base;
-		struct drm_event_vblank vbl;
-		struct drm_event_crtc_sequence seq;
-	} event;
-};
-
-struct drm_crtc_funcs {
-	void (*reset)(struct drm_crtc *);
-	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
-	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
-	int (*cursor_move)(struct drm_crtc *, int, int);
-	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
-	void (*destroy)(struct drm_crtc *);
-	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
-	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
-	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
-	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
-	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
-	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
-	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
-	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
-	int (*late_register)(struct drm_crtc *);
-	void (*early_unregister)(struct drm_crtc *);
-	int (*set_crc_source)(struct drm_crtc *, const char *);
-	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
-	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
-	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
-	u32 (*get_vblank_counter)(struct drm_crtc *);
-	int (*enable_vblank)(struct drm_crtc *);
-	void (*disable_vblank)(struct drm_crtc *);
-};
-
-struct drm_mode_set {
-	struct drm_framebuffer *fb;
-	struct drm_crtc *crtc;
-	struct drm_display_mode *mode;
-	uint32_t x;
-	uint32_t y;
-	struct drm_connector **connectors;
-	size_t num_connectors;
-};
-
-enum mode_set_atomic {
-	LEAVE_ATOMIC_MODE_SET = 0,
-	ENTER_ATOMIC_MODE_SET = 1,
-};
-
-struct drm_crtc_helper_funcs {
-	void (*dpms)(struct drm_crtc *, int);
-	void (*prepare)(struct drm_crtc *);
-	void (*commit)(struct drm_crtc *);
-	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
-	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
-	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
-	void (*mode_set_nofb)(struct drm_crtc *);
-	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
-	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
-	void (*disable)(struct drm_crtc *);
-	int (*atomic_check)(struct drm_crtc *, struct drm_crtc_state *);
-	void (*atomic_begin)(struct drm_crtc *, struct drm_crtc_state *);
-	void (*atomic_flush)(struct drm_crtc *, struct drm_crtc_state *);
-	void (*atomic_enable)(struct drm_crtc *, struct drm_crtc_state *);
-	void (*atomic_disable)(struct drm_crtc *, struct drm_crtc_state *);
-};
-
-struct __drm_planes_state {
-	struct drm_plane *ptr;
-	struct drm_plane_state *state;
-	struct drm_plane_state *old_state;
-	struct drm_plane_state *new_state;
-};
-
-struct __drm_crtcs_state {
-	struct drm_crtc *ptr;
-	struct drm_crtc_state *state;
-	struct drm_crtc_state *old_state;
-	struct drm_crtc_state *new_state;
-	struct drm_crtc_commit *commit;
-	s32 *out_fence_ptr;
-	u64 last_vblank_count;
-};
-
-struct __drm_connnectors_state {
-	struct drm_connector *ptr;
-	struct drm_connector_state *state;
-	struct drm_connector_state *old_state;
-	struct drm_connector_state *new_state;
-	s32 *out_fence_ptr;
-};
-
-struct drm_private_state;
-
-struct drm_private_obj;
-
-struct drm_private_state_funcs {
-	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
-	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
-};
-
-struct drm_private_state {
-	struct drm_atomic_state *state;
-};
-
-struct drm_private_obj {
-	struct list_head head;
-	struct drm_modeset_lock lock;
-	struct drm_private_state *state;
-	const struct drm_private_state_funcs *funcs;
-};
-
-struct __drm_private_objs_state {
-	struct drm_private_obj *ptr;
-	struct drm_private_state *state;
-	struct drm_private_state *old_state;
-	struct drm_private_state *new_state;
-};
-
-struct drm_encoder_funcs {
-	void (*reset)(struct drm_encoder *);
-	void (*destroy)(struct drm_encoder *);
-	int (*late_register)(struct drm_encoder *);
-	void (*early_unregister)(struct drm_encoder *);
-};
-
-struct drm_bridge_timings;
-
-struct drm_bridge_funcs;
-
-struct drm_bridge {
-	struct drm_device *dev;
-	struct drm_encoder *encoder;
-	struct drm_bridge *next;
-	struct list_head list;
-	const struct drm_bridge_timings *timings;
-	const struct drm_bridge_funcs *funcs;
-	void *driver_private;
-};
-
-struct drm_encoder_helper_funcs {
-	void (*dpms)(struct drm_encoder *, int);
-	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
-	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
-	void (*prepare)(struct drm_encoder *);
-	void (*commit)(struct drm_encoder *);
-	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
-	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
-	struct drm_crtc * (*get_crtc)(struct drm_encoder *);
-	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
-	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
-	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
-	void (*disable)(struct drm_encoder *);
-	void (*enable)(struct drm_encoder *);
-	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
-};
-
-struct drm_bridge_funcs {
-	int (*attach)(struct drm_bridge *);
-	void (*detach)(struct drm_bridge *);
-	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_mode *);
-	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
-	void (*disable)(struct drm_bridge *);
-	void (*post_disable)(struct drm_bridge *);
-	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
-	void (*pre_enable)(struct drm_bridge *);
-	void (*enable)(struct drm_bridge *);
-	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_atomic_state *);
-	void (*atomic_enable)(struct drm_bridge *, struct drm_atomic_state *);
-	void (*atomic_disable)(struct drm_bridge *, struct drm_atomic_state *);
-	void (*atomic_post_disable)(struct drm_bridge *, struct drm_atomic_state *);
-};
-
-struct drm_bridge_timings {
-	u32 input_bus_flags;
-	u32 setup_time_ps;
-	u32 hold_time_ps;
-	bool dual_link;
-};
-
-enum drm_driver_feature {
-	DRIVER_GEM = 1,
-	DRIVER_MODESET = 2,
-	DRIVER_RENDER = 8,
-	DRIVER_ATOMIC = 16,
-	DRIVER_SYNCOBJ = 32,
-	DRIVER_SYNCOBJ_TIMELINE = 64,
-	DRIVER_USE_AGP = 33554432,
-	DRIVER_LEGACY = 67108864,
-	DRIVER_PCI_DMA = 134217728,
-	DRIVER_SG = 268435456,
-	DRIVER_HAVE_DMA = 536870912,
-	DRIVER_HAVE_IRQ = 1073741824,
-	DRIVER_KMS_LEGACY_CONTEXT = 2147483648,
-};
-
-enum drm_ioctl_flags {
-	DRM_AUTH = 1,
-	DRM_MASTER = 2,
-	DRM_ROOT_ONLY = 4,
-	DRM_UNLOCKED = 16,
-	DRM_RENDER_ALLOW = 32,
-};
-
-typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
-
-struct drm_ioctl_desc {
-	unsigned int cmd;
-	enum drm_ioctl_flags flags;
-	drm_ioctl_t *func;
-	const char *name;
-};
-
-struct drm_client_funcs {
-	struct module *owner;
-	void (*unregister)(struct drm_client_dev *);
-	int (*restore)(struct drm_client_dev *);
-	int (*hotplug)(struct drm_client_dev *);
-};
-
-struct drm_client_buffer {
-	struct drm_client_dev *client;
-	u32 handle;
-	u32 pitch;
-	struct drm_gem_object *gem;
-	void *vaddr;
-	struct drm_framebuffer *fb;
-};
-
-struct drm_fb_helper_surface_size {
-	u32 fb_width;
-	u32 fb_height;
-	u32 surface_width;
-	u32 surface_height;
-	u32 surface_bpp;
-	u32 surface_depth;
-};
-
-struct drm_fb_helper_funcs {
-	int (*fb_probe)(struct drm_fb_helper *, struct drm_fb_helper_surface_size *);
-};
-
-struct drm_dp_aux_msg {
-	unsigned int address;
-	u8 request;
-	u8 reply;
-	void *buffer;
-	size_t size;
-};
-
-struct cec_adapter;
-
-struct drm_dp_aux_cec {
-	struct mutex lock;
-	struct cec_adapter *adap;
-	struct drm_connector *connector;
-	struct delayed_work unregister_work;
-};
-
-struct drm_dp_aux {
-	const char *name;
-	struct i2c_adapter ddc;
-	struct device *dev;
-	struct drm_crtc *crtc;
-	struct mutex hw_mutex;
-	struct work_struct crc_work;
-	u8 crc_count;
-	ssize_t (*transfer)(struct drm_dp_aux *, struct drm_dp_aux_msg *);
-	unsigned int i2c_nack_count;
-	unsigned int i2c_defer_count;
-	struct drm_dp_aux_cec cec;
-	bool is_remote;
-};
-
-struct drm_dp_dpcd_ident {
-	u8 oui[3];
-	u8 device_id[6];
-	u8 hw_rev;
-	u8 sw_major_rev;
-	u8 sw_minor_rev;
-};
-
-struct drm_dp_desc {
-	struct drm_dp_dpcd_ident ident;
-	u32 quirks;
-};
-
-enum drm_dp_quirk {
-	DP_DPCD_QUIRK_CONSTANT_N = 0,
-	DP_DPCD_QUIRK_NO_PSR = 1,
-	DP_DPCD_QUIRK_NO_SINK_COUNT = 2,
-};
-
-struct dpcd_quirk {
-	u8 oui[3];
-	u8 device_id[6];
-	bool is_branch;
-	u32 quirks;
-};
-
-struct dp_sdp_header {
-	u8 HB0;
-	u8 HB1;
-	u8 HB2;
-	u8 HB3;
-};
-
-struct drm_dsc_rc_range_parameters {
-	u8 range_min_qp;
-	u8 range_max_qp;
-	u8 range_bpg_offset;
-};
-
-struct drm_dsc_config {
-	u8 line_buf_depth;
-	u8 bits_per_component;
-	bool convert_rgb;
-	u8 slice_count;
-	u16 slice_width;
-	u16 slice_height;
-	bool simple_422;
-	u16 pic_width;
-	u16 pic_height;
-	u8 rc_tgt_offset_high;
-	u8 rc_tgt_offset_low;
-	u16 bits_per_pixel;
-	u8 rc_edge_factor;
-	u8 rc_quant_incr_limit1;
-	u8 rc_quant_incr_limit0;
-	u16 initial_xmit_delay;
-	u16 initial_dec_delay;
-	bool block_pred_enable;
-	u8 first_line_bpg_offset;
-	u16 initial_offset;
-	u16 rc_buf_thresh[14];
-	struct drm_dsc_rc_range_parameters rc_range_params[15];
-	u16 rc_model_size;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	u8 initial_scale_value;
-	u16 scale_decrement_interval;
-	u16 scale_increment_interval;
-	u16 nfl_bpg_offset;
-	u16 slice_bpg_offset;
-	u16 final_offset;
-	bool vbr_enable;
-	u8 mux_word_size;
-	u16 slice_chunk_size;
-	u16 rc_bits;
-	u8 dsc_version_minor;
-	u8 dsc_version_major;
-	bool native_422;
-	bool native_420;
-	u8 second_line_bpg_offset;
-	u16 nsl_bpg_offset;
-	u16 second_line_offset_adj;
-};
-
-struct drm_dsc_picture_parameter_set {
-	u8 dsc_version;
-	u8 pps_identifier;
-	u8 pps_reserved;
-	u8 pps_3;
-	u8 pps_4;
-	u8 bits_per_pixel_low;
-	__be16 pic_height;
-	__be16 pic_width;
-	__be16 slice_height;
-	__be16 slice_width;
-	__be16 chunk_size;
-	u8 initial_xmit_delay_high;
-	u8 initial_xmit_delay_low;
-	__be16 initial_dec_delay;
-	u8 pps20_reserved;
-	u8 initial_scale_value;
-	__be16 scale_increment_interval;
-	u8 scale_decrement_interval_high;
-	u8 scale_decrement_interval_low;
-	u8 pps26_reserved;
-	u8 first_line_bpg_offset;
-	__be16 nfl_bpg_offset;
-	__be16 slice_bpg_offset;
-	__be16 initial_offset;
-	__be16 final_offset;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	__be16 rc_model_size;
-	u8 rc_edge_factor;
-	u8 rc_quant_incr_limit0;
-	u8 rc_quant_incr_limit1;
-	u8 rc_tgt_offset;
-	u8 rc_buf_thresh[14];
-	__be16 rc_range_parameters[15];
-	u8 native_422_420;
-	u8 second_line_bpg_offset;
-	__be16 nsl_bpg_offset;
-	__be16 second_line_offset_adj;
-	u32 pps_long_94_reserved;
-	u32 pps_long_98_reserved;
-	u32 pps_long_102_reserved;
-	u32 pps_long_106_reserved;
-	u32 pps_long_110_reserved;
-	u32 pps_long_114_reserved;
-	u32 pps_long_118_reserved;
-	u32 pps_long_122_reserved;
-	__be16 pps_short_126_reserved;
-} __attribute__((packed));
-
-struct est_timings {
-	u8 t1;
-	u8 t2;
-	u8 mfg_rsvd;
-};
-
-struct std_timing {
-	u8 hsize;
-	u8 vfreq_aspect;
-};
-
-struct detailed_pixel_timing {
-	u8 hactive_lo;
-	u8 hblank_lo;
-	u8 hactive_hblank_hi;
-	u8 vactive_lo;
-	u8 vblank_lo;
-	u8 vactive_vblank_hi;
-	u8 hsync_offset_lo;
-	u8 hsync_pulse_width_lo;
-	u8 vsync_offset_pulse_width_lo;
-	u8 hsync_vsync_offset_pulse_width_hi;
-	u8 width_mm_lo;
-	u8 height_mm_lo;
-	u8 width_height_mm_hi;
-	u8 hborder;
-	u8 vborder;
-	u8 misc;
-};
-
-struct detailed_data_string {
-	u8 str[13];
-};
-
-struct detailed_data_monitor_range {
-	u8 min_vfreq;
-	u8 max_vfreq;
-	u8 min_hfreq_khz;
-	u8 max_hfreq_khz;
-	u8 pixel_clock_mhz;
-	u8 flags;
-	union {
-		struct {
-			u8 reserved;
-			u8 hfreq_start_khz;
-			u8 c;
-			__le16 m;
-			u8 k;
-			u8 j;
-		} __attribute__((packed)) gtf2;
-		struct {
-			u8 version;
-			u8 data1;
-			u8 data2;
-			u8 supported_aspects;
-			u8 flags;
-			u8 supported_scalings;
-			u8 preferred_refresh;
-		} cvt;
-	} formula;
-} __attribute__((packed));
-
-struct detailed_data_wpindex {
-	u8 white_yx_lo;
-	u8 white_x_hi;
-	u8 white_y_hi;
-	u8 gamma;
-};
-
-struct cvt_timing {
-	u8 code[3];
-};
-
-struct detailed_non_pixel {
-	u8 pad1;
-	u8 type;
-	u8 pad2;
-	union {
-		struct detailed_data_string str;
-		struct detailed_data_monitor_range range;
-		struct detailed_data_wpindex color;
-		struct std_timing timings[6];
-		struct cvt_timing cvt[4];
-	} data;
-} __attribute__((packed));
-
-struct detailed_timing {
-	__le16 pixel_clock;
-	union {
-		struct detailed_pixel_timing pixel_data;
-		struct detailed_non_pixel other_data;
-	} data;
-};
-
-struct edid {
-	u8 header[8];
-	u8 mfg_id[2];
-	u8 prod_code[2];
-	u32 serial;
-	u8 mfg_week;
-	u8 mfg_year;
-	u8 version;
-	u8 revision;
-	u8 input;
-	u8 width_cm;
-	u8 height_cm;
-	u8 gamma;
-	u8 features;
-	u8 red_green_lo;
-	u8 black_white_lo;
-	u8 red_x;
-	u8 red_y;
-	u8 green_x;
-	u8 green_y;
-	u8 blue_x;
-	u8 blue_y;
-	u8 white_x;
-	u8 white_y;
-	struct est_timings established_timings;
-	struct std_timing standard_timings[8];
-	struct detailed_timing detailed_timings[4];
-	u8 extensions;
-	u8 checksum;
-};
-
-struct drm_dp_vcpi {
-	int vcpi;
-	int pbn;
-	int aligned_pbn;
-	int num_slots;
-};
-
-struct drm_dp_mst_branch;
-
-struct drm_dp_mst_topology_mgr;
-
-struct drm_dp_mst_port {
-	struct kref topology_kref;
-	struct kref malloc_kref;
-	u8 port_num;
-	bool input;
-	bool mcs;
-	bool ddps;
-	u8 pdt;
-	bool ldps;
-	u8 dpcd_rev;
-	u8 num_sdp_streams;
-	u8 num_sdp_stream_sinks;
-	uint16_t available_pbn;
-	struct list_head next;
-	struct drm_dp_mst_branch *mstb;
-	struct drm_dp_aux aux;
-	struct drm_dp_mst_branch *parent;
-	struct drm_dp_vcpi vcpi;
-	struct drm_connector *connector;
-	struct drm_dp_mst_topology_mgr *mgr;
-	struct edid *cached_edid;
-	bool has_audio;
-};
-
-struct drm_dp_sideband_msg_tx;
-
-struct drm_dp_mst_branch {
-	struct kref topology_kref;
-	struct kref malloc_kref;
-	struct list_head destroy_next;
-	u8 rad[8];
-	u8 lct;
-	int num_ports;
-	int msg_slots;
-	struct list_head ports;
-	struct drm_dp_mst_port *port_parent;
-	struct drm_dp_mst_topology_mgr *mgr;
-	struct drm_dp_sideband_msg_tx *tx_slots[2];
-	int last_seqno;
-	bool link_address_sent;
-	u8 guid[16];
-};
-
-struct drm_dp_sideband_msg_hdr {
-	u8 lct;
-	u8 lcr;
-	u8 rad[8];
-	bool broadcast;
-	bool path_msg;
-	u8 msg_len;
-	bool somt;
-	bool eomt;
-	bool seqno;
-};
-
-struct drm_dp_sideband_msg_rx {
-	u8 chunk[48];
-	u8 msg[256];
-	u8 curchunk_len;
-	u8 curchunk_idx;
-	u8 curchunk_hdrlen;
-	u8 curlen;
-	bool have_somt;
-	bool have_eomt;
-	struct drm_dp_sideband_msg_hdr initial_hdr;
-};
-
-struct drm_dp_mst_topology_cbs;
-
-struct drm_dp_payload;
-
-struct drm_dp_mst_topology_mgr {
-	struct drm_private_obj base;
-	struct drm_device *dev;
-	const struct drm_dp_mst_topology_cbs *cbs;
-	int max_dpcd_transaction_bytes;
-	struct drm_dp_aux *aux;
-	int max_payloads;
-	int conn_base_id;
-	struct drm_dp_sideband_msg_rx down_rep_recv;
-	struct drm_dp_sideband_msg_rx up_req_recv;
-	struct mutex lock;
-	struct mutex probe_lock;
-	bool mst_state;
-	struct drm_dp_mst_branch *mst_primary;
-	u8 dpcd[15];
-	u8 sink_count;
-	int pbn_div;
-	const struct drm_private_state_funcs *funcs;
-	struct mutex qlock;
-	bool is_waiting_for_dwn_reply;
-	struct list_head tx_msg_downq;
-	struct mutex payload_lock;
-	struct drm_dp_vcpi **proposed_vcpis;
-	struct drm_dp_payload *payloads;
-	long unsigned int payload_mask;
-	long unsigned int vcpi_mask;
-	wait_queue_head_t tx_waitq;
-	struct work_struct work;
-	struct work_struct tx_work;
-	struct list_head destroy_port_list;
-	struct list_head destroy_branch_device_list;
-	struct mutex delayed_destroy_lock;
-	struct work_struct delayed_destroy_work;
-	struct list_head up_req_list;
-	struct mutex up_req_lock;
-	struct work_struct up_req_work;
-};
-
-struct drm_dp_nak_reply {
-	u8 guid[16];
-	u8 reason;
-	u8 nak_data;
-};
-
-struct drm_dp_link_addr_reply_port {
-	bool input_port;
-	u8 peer_device_type;
-	u8 port_number;
-	bool mcs;
-	bool ddps;
-	bool legacy_device_plug_status;
-	u8 dpcd_revision;
-	u8 peer_guid[16];
-	u8 num_sdp_streams;
-	u8 num_sdp_stream_sinks;
-};
-
-struct drm_dp_link_address_ack_reply {
-	u8 guid[16];
-	u8 nports;
-	struct drm_dp_link_addr_reply_port ports[16];
-};
-
-struct drm_dp_port_number_rep {
-	u8 port_number;
-};
-
-struct drm_dp_enum_path_resources_ack_reply {
-	u8 port_number;
-	u16 full_payload_bw_number;
-	u16 avail_payload_bw_number;
-};
-
-struct drm_dp_allocate_payload_ack_reply {
-	u8 port_number;
-	u8 vcpi;
-	u16 allocated_pbn;
-};
-
-struct drm_dp_query_payload_ack_reply {
-	u8 port_number;
-	u16 allocated_pbn;
-};
-
-struct drm_dp_remote_dpcd_read_ack_reply {
-	u8 port_number;
-	u8 num_bytes;
-	u8 bytes[255];
-};
-
-struct drm_dp_remote_dpcd_write_ack_reply {
-	u8 port_number;
-};
-
-struct drm_dp_remote_dpcd_write_nak_reply {
-	u8 port_number;
-	u8 reason;
-	u8 bytes_written_before_failure;
-};
-
-struct drm_dp_remote_i2c_read_ack_reply {
-	u8 port_number;
-	u8 num_bytes;
-	u8 bytes[255];
-};
-
-struct drm_dp_remote_i2c_read_nak_reply {
-	u8 port_number;
-	u8 nak_reason;
-	u8 i2c_nak_transaction;
-};
-
-struct drm_dp_remote_i2c_write_ack_reply {
-	u8 port_number;
-};
-
-union ack_replies {
-	struct drm_dp_nak_reply nak;
-	struct drm_dp_link_address_ack_reply link_addr;
-	struct drm_dp_port_number_rep port_number;
-	struct drm_dp_enum_path_resources_ack_reply path_resources;
-	struct drm_dp_allocate_payload_ack_reply allocate_payload;
-	struct drm_dp_query_payload_ack_reply query_payload;
-	struct drm_dp_remote_dpcd_read_ack_reply remote_dpcd_read_ack;
-	struct drm_dp_remote_dpcd_write_ack_reply remote_dpcd_write_ack;
-	struct drm_dp_remote_dpcd_write_nak_reply remote_dpcd_write_nack;
-	struct drm_dp_remote_i2c_read_ack_reply remote_i2c_read_ack;
-	struct drm_dp_remote_i2c_read_nak_reply remote_i2c_read_nack;
-	struct drm_dp_remote_i2c_write_ack_reply remote_i2c_write_ack;
-};
-
-struct drm_dp_sideband_msg_reply_body {
-	u8 reply_type;
-	u8 req_type;
-	union ack_replies u;
-};
-
-struct drm_dp_sideband_msg_tx {
-	u8 msg[256];
-	u8 chunk[48];
-	u8 cur_offset;
-	u8 cur_len;
-	struct drm_dp_mst_branch *dst;
-	struct list_head next;
-	int seqno;
-	int state;
-	bool path_msg;
-	struct drm_dp_sideband_msg_reply_body reply;
-};
-
-struct drm_dp_allocate_payload {
-	u8 port_number;
-	u8 number_sdp_streams;
-	u8 vcpi;
-	u16 pbn;
-	u8 sdp_stream_sink[16];
-};
-
-struct drm_dp_connection_status_notify {
-	u8 guid[16];
-	u8 port_number;
-	bool legacy_device_plug_status;
-	bool displayport_device_plug_status;
-	bool message_capability_status;
-	bool input_port;
-	u8 peer_device_type;
-};
-
-struct drm_dp_remote_dpcd_read {
-	u8 port_number;
-	u32 dpcd_address;
-	u8 num_bytes;
-};
-
-struct drm_dp_remote_dpcd_write {
-	u8 port_number;
-	u32 dpcd_address;
-	u8 num_bytes;
-	u8 *bytes;
-};
-
-struct drm_dp_remote_i2c_read_tx {
-	u8 i2c_dev_id;
-	u8 num_bytes;
-	u8 *bytes;
-	u8 no_stop_bit;
-	u8 i2c_transaction_delay;
-};
-
-struct drm_dp_remote_i2c_read {
-	u8 num_transactions;
-	u8 port_number;
-	struct drm_dp_remote_i2c_read_tx transactions[4];
-	u8 read_i2c_device_id;
-	u8 num_bytes_read;
-};
-
-struct drm_dp_remote_i2c_write {
-	u8 port_number;
-	u8 write_i2c_device_id;
-	u8 num_bytes;
-	u8 *bytes;
-};
-
-struct drm_dp_port_number_req {
-	u8 port_number;
-};
-
-struct drm_dp_query_payload {
-	u8 port_number;
-	u8 vcpi;
-};
-
-struct drm_dp_resource_status_notify {
-	u8 port_number;
-	u8 guid[16];
-	u16 available_pbn;
-};
-
-union ack_req {
-	struct drm_dp_connection_status_notify conn_stat;
-	struct drm_dp_port_number_req port_num;
-	struct drm_dp_resource_status_notify resource_stat;
-	struct drm_dp_query_payload query_payload;
-	struct drm_dp_allocate_payload allocate_payload;
-	struct drm_dp_remote_dpcd_read dpcd_read;
-	struct drm_dp_remote_dpcd_write dpcd_write;
-	struct drm_dp_remote_i2c_read i2c_read;
-	struct drm_dp_remote_i2c_write i2c_write;
-};
-
-struct drm_dp_sideband_msg_req_body {
-	u8 req_type;
-	union ack_req u;
-};
-
-struct drm_dp_mst_topology_cbs {
-	struct drm_connector * (*add_connector)(struct drm_dp_mst_topology_mgr *, struct drm_dp_mst_port *, const char *);
-	void (*register_connector)(struct drm_connector *);
-	void (*destroy_connector)(struct drm_dp_mst_topology_mgr *, struct drm_connector *);
-};
-
-struct drm_dp_payload {
-	int payload_state;
-	int start_slot;
-	int num_slots;
-	int vcpi;
-};
-
-struct drm_dp_vcpi_allocation {
-	struct drm_dp_mst_port *port;
-	int vcpi;
-	struct list_head next;
-};
-
-struct drm_dp_mst_topology_state {
-	struct drm_private_state base;
-	struct list_head vcpis;
-	struct drm_dp_mst_topology_mgr *mgr;
-};
-
-struct drm_dp_pending_up_req {
-	struct drm_dp_sideband_msg_hdr hdr;
-	struct drm_dp_sideband_msg_req_body msg;
-	struct list_head next;
-};
-
-struct dma_fence_ops;
-
-struct dma_fence {
-	spinlock_t *lock;
-	const struct dma_fence_ops *ops;
-	union {
-		struct list_head cb_list;
-		ktime_t timestamp;
-		struct callback_head rcu;
-	};
-	u64 context;
-	u64 seqno;
-	long unsigned int flags;
-	struct kref refcount;
-	int error;
-};
-
-struct dma_fence_ops {
-	bool use_64bit_seqno;
-	const char * (*get_driver_name)(struct dma_fence *);
-	const char * (*get_timeline_name)(struct dma_fence *);
-	bool (*enable_signaling)(struct dma_fence *);
-	bool (*signaled)(struct dma_fence *);
-	long int (*wait)(struct dma_fence *, bool, long int);
-	void (*release)(struct dma_fence *);
-	void (*fence_value_str)(struct dma_fence *, char *, int);
-	void (*timeline_value_str)(struct dma_fence *, char *, int);
-};
-
-struct drm_color_lut {
-	__u16 red;
-	__u16 green;
-	__u16 blue;
-	__u16 reserved;
-};
-
-struct drm_writeback_job {
-	struct drm_writeback_connector *connector;
-	bool prepared;
-	struct work_struct cleanup_work;
-	struct list_head list_entry;
-	struct drm_framebuffer *fb;
-	struct dma_fence *out_fence;
-	void *priv;
-};
-
-struct drm_writeback_connector {
-	struct drm_connector base;
-	struct drm_encoder encoder;
-	struct drm_property_blob *pixel_formats_blob_ptr;
-	spinlock_t job_lock;
-	struct list_head job_queue;
-	unsigned int fence_context;
-	spinlock_t fence_lock;
-	long unsigned int fence_seqno;
-	char timeline_name[32];
-};
-
-enum drm_lspcon_mode {
-	DRM_LSPCON_MODE_INVALID = 0,
-	DRM_LSPCON_MODE_LS = 1,
-	DRM_LSPCON_MODE_PCON = 2,
-};
-
-enum drm_dp_dual_mode_type {
-	DRM_DP_DUAL_MODE_NONE = 0,
-	DRM_DP_DUAL_MODE_UNKNOWN = 1,
-	DRM_DP_DUAL_MODE_TYPE1_DVI = 2,
-	DRM_DP_DUAL_MODE_TYPE1_HDMI = 3,
-	DRM_DP_DUAL_MODE_TYPE2_DVI = 4,
-	DRM_DP_DUAL_MODE_TYPE2_HDMI = 5,
-	DRM_DP_DUAL_MODE_LSPCON = 6,
-};
-
-struct drm_simple_display_pipe;
-
-struct drm_simple_display_pipe_funcs {
-	enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *, const struct drm_display_mode *);
-	void (*enable)(struct drm_simple_display_pipe *, struct drm_crtc_state *, struct drm_plane_state *);
-	void (*disable)(struct drm_simple_display_pipe *);
-	int (*check)(struct drm_simple_display_pipe *, struct drm_plane_state *, struct drm_crtc_state *);
-	void (*update)(struct drm_simple_display_pipe *, struct drm_plane_state *);
-	int (*prepare_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
-	void (*cleanup_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
-	int (*enable_vblank)(struct drm_simple_display_pipe *);
-	void (*disable_vblank)(struct drm_simple_display_pipe *);
-};
-
-struct drm_simple_display_pipe {
-	struct drm_crtc crtc;
-	struct drm_plane plane;
-	struct drm_encoder encoder;
-	struct drm_connector *connector;
-	const struct drm_simple_display_pipe_funcs *funcs;
-};
-
-struct dma_fence_cb;
-
-typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
-
-struct dma_fence_cb {
-	struct list_head node;
-	dma_fence_func_t func;
-};
-
-struct dma_buf_ops {
-	bool cache_sgt_mapping;
-	bool dynamic_mapping;
-	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
-	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
-	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
-	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
-	void (*release)(struct dma_buf *);
-	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
-	void * (*map)(struct dma_buf *, long unsigned int);
-	void (*unmap)(struct dma_buf *, long unsigned int, void *);
-	void * (*vmap)(struct dma_buf *);
-	void (*vunmap)(struct dma_buf *, void *);
-};
-
-struct dma_buf_poll_cb_t {
-	struct dma_fence_cb cb;
-	wait_queue_head_t *poll;
-	__poll_t active;
-};
-
-struct dma_buf {
-	size_t size;
-	struct file *file;
-	struct list_head attachments;
-	const struct dma_buf_ops *ops;
-	struct mutex lock;
-	unsigned int vmapping_counter;
-	void *vmap_ptr;
-	const char *exp_name;
-	const char *name;
-	struct module *owner;
-	struct list_head list_node;
-	void *priv;
-	struct dma_resv *resv;
-	wait_queue_head_t poll;
-	struct dma_buf_poll_cb_t cb_excl;
-	struct dma_buf_poll_cb_t cb_shared;
-};
-
-struct dma_buf_attachment {
-	struct dma_buf *dmabuf;
-	struct device *dev;
-	struct list_head node;
-	struct sg_table *sgt;
-	enum dma_data_direction dir;
-	bool dynamic_mapping;
-	void *priv;
-};
-
-struct ww_class {
-	atomic_long_t stamp;
-	struct lock_class_key acquire_key;
-	struct lock_class_key mutex_key;
-	const char *acquire_name;
-	const char *mutex_name;
-	unsigned int is_wait_die;
-};
-
-struct dma_resv_list {
-	struct callback_head rcu;
-	u32 shared_count;
-	u32 shared_max;
-	struct dma_fence *shared[0];
-};
-
-struct drm_mm {
-	void (*color_adjust)(const struct drm_mm_node *, long unsigned int, u64 *, u64 *);
-	struct list_head hole_stack;
-	struct drm_mm_node head_node;
-	struct rb_root_cached interval_tree;
-	struct rb_root_cached holes_size;
-	struct rb_root holes_addr;
-	long unsigned int scan_active;
-};
-
-struct drm_vma_offset_manager {
-	rwlock_t vm_lock;
-	struct drm_mm vm_addr_space_mm;
-};
-
-struct drm_gem_object_funcs {
-	void (*free)(struct drm_gem_object *);
-	int (*open)(struct drm_gem_object *, struct drm_file *);
-	void (*close)(struct drm_gem_object *, struct drm_file *);
-	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
-	struct dma_buf * (*export)(struct drm_gem_object *, int);
-	int (*pin)(struct drm_gem_object *);
-	void (*unpin)(struct drm_gem_object *);
-	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
-	void * (*vmap)(struct drm_gem_object *);
-	void (*vunmap)(struct drm_gem_object *, void *);
-	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
-	const struct vm_operations_struct *vm_ops;
-};
-
-struct drm_mode_rect {
-	__s32 x1;
-	__s32 y1;
-	__s32 x2;
-	__s32 y2;
-};
-
-struct drm_atomic_helper_damage_iter {
-	struct drm_rect plane_src;
-	const struct drm_rect *clips;
-	uint32_t num_clips;
-	uint32_t curr_clip;
-	bool full_update;
-};
-
-struct ewma_psr_time {
-	long unsigned int internal;
-};
-
-struct drm_self_refresh_data {
-	struct drm_crtc *crtc;
-	struct delayed_work entry_work;
-	struct mutex avg_mutex;
-	struct ewma_psr_time entry_avg_ms;
-	struct ewma_psr_time exit_avg_ms;
-};
-
-struct display_timing;
-
-struct drm_panel;
-
-struct drm_panel_funcs {
-	int (*prepare)(struct drm_panel *);
-	int (*enable)(struct drm_panel *);
-	int (*disable)(struct drm_panel *);
-	int (*unprepare)(struct drm_panel *);
-	int (*get_modes)(struct drm_panel *);
-	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
-};
-
-struct drm_panel {
-	struct drm_device *drm;
-	struct drm_connector *connector;
-	struct device *dev;
-	const struct drm_panel_funcs *funcs;
-	int connector_type;
-	struct list_head list;
-};
-
-struct panel_bridge {
-	struct drm_bridge bridge;
-	struct drm_connector connector;
-	struct drm_panel *panel;
-	u32 connector_type;
-};
-
-struct drm_master {
-	struct kref refcount;
-	struct drm_device *dev;
-	char *unique;
-	int unique_len;
-	struct idr magic_map;
-	void *driver_priv;
-	struct drm_master *lessor;
-	int lessee_id;
-	struct list_head lessee_list;
-	struct list_head lessees;
-	struct idr leases;
-	struct idr lessee_idr;
-};
-
-struct drm_auth {
-	drm_magic_t magic;
-};
-
-enum drm_minor_type {
-	DRM_MINOR_PRIMARY = 0,
-	DRM_MINOR_CONTROL = 1,
-	DRM_MINOR_RENDER = 2,
-};
-
-struct xa_limit {
-	u32 max;
-	u32 min;
-};
-
-struct drm_gem_close {
-	__u32 handle;
-	__u32 pad;
-};
-
-struct drm_gem_flink {
-	__u32 handle;
-	__u32 name;
-};
-
-struct drm_gem_open {
-	__u32 name;
-	__u32 handle;
-	__u64 size;
-};
-
-struct drm_version {
-	int version_major;
-	int version_minor;
-	int version_patchlevel;
-	__kernel_size_t name_len;
-	char *name;
-	__kernel_size_t date_len;
-	char *date;
-	__kernel_size_t desc_len;
-	char *desc;
-};
-
-struct drm_unique {
-	__kernel_size_t unique_len;
-	char *unique;
-};
-
-struct drm_client {
-	int idx;
-	int auth;
-	long unsigned int pid;
-	long unsigned int uid;
-	long unsigned int magic;
-	long unsigned int iocs;
-};
-
-enum drm_stat_type {
-	_DRM_STAT_LOCK = 0,
-	_DRM_STAT_OPENS = 1,
-	_DRM_STAT_CLOSES = 2,
-	_DRM_STAT_IOCTLS = 3,
-	_DRM_STAT_LOCKS = 4,
-	_DRM_STAT_UNLOCKS = 5,
-	_DRM_STAT_VALUE = 6,
-	_DRM_STAT_BYTE = 7,
-	_DRM_STAT_COUNT = 8,
-	_DRM_STAT_IRQ = 9,
-	_DRM_STAT_PRIMARY = 10,
-	_DRM_STAT_SECONDARY = 11,
-	_DRM_STAT_DMA = 12,
-	_DRM_STAT_SPECIAL = 13,
-	_DRM_STAT_MISSED = 14,
-};
-
-struct drm_stats {
-	long unsigned int count;
-	struct {
-		long unsigned int value;
-		enum drm_stat_type type;
-	} data[15];
-};
-
-struct drm_set_version {
-	int drm_di_major;
-	int drm_di_minor;
-	int drm_dd_major;
-	int drm_dd_minor;
-};
-
-struct drm_get_cap {
-	__u64 capability;
-	__u64 value;
-};
-
-struct drm_set_client_cap {
-	__u64 capability;
-	__u64 value;
-};
-
-struct drm_agp_head {
-	struct agp_kern_info agp_info;
-	struct list_head memory;
-	long unsigned int mode;
-	struct agp_bridge_data *bridge;
-	int enabled;
-	int acquired;
-	long unsigned int base;
-	int agp_mtrr;
-	int cant_use_aperture;
-	long unsigned int page_mask;
-};
-
-enum drm_map_type {
-	_DRM_FRAME_BUFFER = 0,
-	_DRM_REGISTERS = 1,
-	_DRM_SHM = 2,
-	_DRM_AGP = 3,
-	_DRM_SCATTER_GATHER = 4,
-	_DRM_CONSISTENT = 5,
-};
-
-enum drm_map_flags {
-	_DRM_RESTRICTED = 1,
-	_DRM_READ_ONLY = 2,
-	_DRM_LOCKED = 4,
-	_DRM_KERNEL = 8,
-	_DRM_WRITE_COMBINING = 16,
-	_DRM_CONTAINS_LOCK = 32,
-	_DRM_REMOVABLE = 64,
-	_DRM_DRIVER = 128,
-};
-
-struct drm_local_map {
-	resource_size_t offset;
-	long unsigned int size;
-	enum drm_map_type type;
-	enum drm_map_flags flags;
-	void *handle;
-	int mtrr;
-};
-
-struct drm_agp_mem {
-	long unsigned int handle;
-	struct agp_memory *memory;
-	long unsigned int bound;
-	int pages;
-	struct list_head head;
-};
-
-struct drm_irq_busid {
-	int irq;
-	int busnum;
-	int devnum;
-	int funcnum;
-};
-
-struct drm_dma_handle {
-	dma_addr_t busaddr;
-	void *vaddr;
-	size_t size;
-};
-
-typedef struct drm_dma_handle drm_dma_handle_t;
-
-struct class_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct class *, struct class_attribute *, char *);
-	ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);
-};
-
-struct class_attribute_string {
-	struct class_attribute attr;
-	char *str;
-};
-
-struct drm_hash_item {
-	struct hlist_node head;
-	long unsigned int key;
-};
-
-struct drm_open_hash {
-	struct hlist_head *table;
-	u8 order;
-};
-
-enum drm_mm_insert_mode {
-	DRM_MM_INSERT_BEST = 0,
-	DRM_MM_INSERT_LOW = 1,
-	DRM_MM_INSERT_HIGH = 2,
-	DRM_MM_INSERT_EVICT = 3,
-	DRM_MM_INSERT_ONCE = 2147483648,
-	DRM_MM_INSERT_HIGHEST = 2147483650,
-	DRM_MM_INSERT_LOWEST = 2147483649,
-};
-
-struct drm_mm_scan {
-	struct drm_mm *mm;
-	u64 size;
-	u64 alignment;
-	u64 remainder_mask;
-	u64 range_start;
-	u64 range_end;
-	u64 hit_start;
-	u64 hit_end;
-	long unsigned int color;
-	enum drm_mm_insert_mode mode;
-};
-
-struct drm_mode_modeinfo {
-	__u32 clock;
-	__u16 hdisplay;
-	__u16 hsync_start;
-	__u16 hsync_end;
-	__u16 htotal;
-	__u16 hskew;
-	__u16 vdisplay;
-	__u16 vsync_start;
-	__u16 vsync_end;
-	__u16 vtotal;
-	__u16 vscan;
-	__u32 vrefresh;
-	__u32 flags;
-	__u32 type;
-	char name[32];
-};
-
-struct drm_mode_crtc {
-	__u64 set_connectors_ptr;
-	__u32 count_connectors;
-	__u32 crtc_id;
-	__u32 fb_id;
-	__u32 x;
-	__u32 y;
-	__u32 gamma_size;
-	__u32 mode_valid;
-	struct drm_mode_modeinfo mode;
-};
-
-struct drm_format_name_buf {
-	char str[32];
-};
-
-struct displayid_hdr {
-	u8 rev;
-	u8 bytes;
-	u8 prod_id;
-	u8 ext_count;
-};
-
-struct displayid_block {
-	u8 tag;
-	u8 rev;
-	u8 num_bytes;
-};
-
-struct displayid_tiled_block {
-	struct displayid_block base;
-	u8 tile_cap;
-	u8 topo[3];
-	u8 tile_size[4];
-	u8 tile_pixel_bezel[5];
-	u8 topology_id[8];
-};
-
-struct displayid_detailed_timings_1 {
-	u8 pixel_clock[3];
-	u8 flags;
-	u8 hactive[2];
-	u8 hblank[2];
-	u8 hsync[2];
-	u8 hsw[2];
-	u8 vactive[2];
-	u8 vblank[2];
-	u8 vsync[2];
-	u8 vsw[2];
-};
-
-struct displayid_detailed_timing_block {
-	struct displayid_block base;
-	struct displayid_detailed_timings_1 timings[0];
-};
-
-struct hdr_metadata_infoframe {
-	__u8 eotf;
-	__u8 metadata_type;
-	struct {
-		__u16 x;
-		__u16 y;
-	} display_primaries[3];
-	struct {
-		__u16 x;
-		__u16 y;
-	} white_point;
-	__u16 max_display_mastering_luminance;
-	__u16 min_display_mastering_luminance;
-	__u16 max_cll;
-	__u16 max_fall;
-};
-
-struct hdr_output_metadata {
-	__u32 metadata_type;
-	union {
-		struct hdr_metadata_infoframe hdmi_metadata_type1;
-	};
-};
-
-struct cea_sad {
-	u8 format;
-	u8 channels;
-	u8 freq;
-	u8 byte2;
-};
-
-struct detailed_mode_closure {
-	struct drm_connector *connector;
-	struct edid *edid;
-	bool preferred;
-	u32 quirks;
-	int modes;
-};
-
-struct edid_quirk {
-	char vendor[4];
-	int product_id;
-	u32 quirks;
-};
-
-struct minimode {
-	short int w;
-	short int h;
-	short int r;
-	short int rb;
-};
-
-typedef void detailed_cb(struct detailed_timing *, void *);
-
-struct stereo_mandatory_mode {
-	int width;
-	int height;
-	int vrefresh;
-	unsigned int flags;
-};
-
-struct i2c_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
-struct i2c_client {
-	short unsigned int flags;
-	short unsigned int addr;
-	char name[20];
-	struct i2c_adapter *adapter;
-	struct device dev;
-	int init_irq;
-	int irq;
-	struct list_head detected;
-};
-
-enum i2c_alert_protocol {
-	I2C_PROTOCOL_SMBUS_ALERT = 0,
-	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
-};
-
-struct i2c_board_info;
-
-struct i2c_driver {
-	unsigned int class;
-	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-	int (*remove)(struct i2c_client *);
-	int (*probe_new)(struct i2c_client *);
-	void (*shutdown)(struct i2c_client *);
-	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
-	int (*command)(struct i2c_client *, unsigned int, void *);
-	struct device_driver driver;
-	const struct i2c_device_id *id_table;
-	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-	const short unsigned int *address_list;
-	struct list_head clients;
-	bool disable_i2c_core_irq_mapping;
-};
-
-struct i2c_board_info {
-	char type[20];
-	short unsigned int flags;
-	short unsigned int addr;
-	const char *dev_name;
-	void *platform_data;
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	const struct property_entry *properties;
-	const struct resource *resources;
-	unsigned int num_resources;
-	int irq;
-};
-
-struct drm_encoder_slave_funcs {
-	void (*set_config)(struct drm_encoder *, void *);
-	void (*destroy)(struct drm_encoder *);
-	void (*dpms)(struct drm_encoder *, int);
-	void (*save)(struct drm_encoder *);
-	void (*restore)(struct drm_encoder *);
-	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
-	int (*mode_valid)(struct drm_encoder *, struct drm_display_mode *);
-	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
-	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
-	int (*get_modes)(struct drm_encoder *, struct drm_connector *);
-	int (*create_resources)(struct drm_encoder *, struct drm_connector *);
-	int (*set_property)(struct drm_encoder *, struct drm_connector *, struct drm_property *, uint64_t);
-};
-
-struct drm_encoder_slave {
-	struct drm_encoder base;
-	const struct drm_encoder_slave_funcs *slave_funcs;
-	void *slave_priv;
-	void *bus_priv;
-};
-
-struct drm_i2c_encoder_driver {
-	struct i2c_driver i2c_driver;
-	int (*encoder_init)(struct i2c_client *, struct drm_device *, struct drm_encoder_slave *);
-};
-
-struct trace_event_raw_drm_vblank_event {
-	struct trace_entry ent;
-	int crtc;
-	unsigned int seq;
-	ktime_t time;
-	bool high_prec;
-	char __data[0];
-};
-
-struct trace_event_raw_drm_vblank_event_queued {
-	struct trace_entry ent;
-	struct drm_file *file;
-	int crtc;
-	unsigned int seq;
-	char __data[0];
-};
-
-struct trace_event_raw_drm_vblank_event_delivered {
-	struct trace_entry ent;
-	struct drm_file *file;
-	int crtc;
-	unsigned int seq;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_drm_vblank_event {};
-
-struct trace_event_data_offsets_drm_vblank_event_queued {};
-
-struct trace_event_data_offsets_drm_vblank_event_delivered {};
-
-typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
-
-typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
-
-typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
-
-struct dma_buf_export_info {
-	const char *exp_name;
-	struct module *owner;
-	const struct dma_buf_ops *ops;
-	size_t size;
-	int flags;
-	struct dma_resv *resv;
-	void *priv;
-};
-
-struct drm_prime_handle {
-	__u32 handle;
-	__u32 flags;
-	__s32 fd;
-};
-
-struct drm_prime_member {
-	struct dma_buf *dma_buf;
-	uint32_t handle;
-	struct rb_node dmabuf_rb;
-	struct rb_node handle_rb;
-};
-
-struct drm_vma_offset_file {
-	struct rb_node vm_rb;
-	struct drm_file *vm_tag;
-	long unsigned int vm_count;
-};
-
-struct drm_flip_work;
-
-typedef void (*drm_flip_func_t)(struct drm_flip_work *, void *);
-
-struct drm_flip_work {
-	const char *name;
-	drm_flip_func_t func;
-	struct work_struct worker;
-	struct list_head queued;
-	struct list_head commited;
-	spinlock_t lock;
-};
-
-struct drm_flip_task {
-	struct list_head node;
-	void *data;
-};
-
-struct drm_info_list {
-	const char *name;
-	int (*show)(struct seq_file *, void *);
-	u32 driver_features;
-	void *data;
-};
-
-struct drm_info_node {
-	struct drm_minor *minor;
-	const struct drm_info_list *info_ent;
-	struct list_head list;
-	struct dentry *dent;
-};
-
-struct drm_mode_fb_cmd {
-	__u32 fb_id;
-	__u32 width;
-	__u32 height;
-	__u32 pitch;
-	__u32 bpp;
-	__u32 depth;
-	__u32 handle;
-};
-
-struct drm_mode_fb_dirty_cmd {
-	__u32 fb_id;
-	__u32 flags;
-	__u32 color;
-	__u32 num_clips;
-	__u64 clips_ptr;
-};
-
-struct drm_mode_rmfb_work {
-	struct work_struct work;
-	struct list_head fbs;
-};
-
-struct drm_mode_get_connector {
-	__u64 encoders_ptr;
-	__u64 modes_ptr;
-	__u64 props_ptr;
-	__u64 prop_values_ptr;
-	__u32 count_modes;
-	__u32 count_props;
-	__u32 count_encoders;
-	__u32 encoder_id;
-	__u32 connector_id;
-	__u32 connector_type;
-	__u32 connector_type_id;
-	__u32 connection;
-	__u32 mm_width;
-	__u32 mm_height;
-	__u32 subpixel;
-	__u32 pad;
-};
-
-struct drm_mode_connector_set_property {
-	__u64 value;
-	__u32 prop_id;
-	__u32 connector_id;
-};
-
-struct drm_mode_obj_set_property {
-	__u64 value;
-	__u32 prop_id;
-	__u32 obj_id;
-	__u32 obj_type;
-};
-
-struct drm_prop_enum_list {
-	int type;
-	const char *name;
-};
-
-struct drm_conn_prop_enum_list {
-	int type;
-	const char *name;
-	struct ida ida;
-};
-
-struct drm_mode_get_encoder {
-	__u32 encoder_id;
-	__u32 encoder_type;
-	__u32 crtc_id;
-	__u32 possible_crtcs;
-	__u32 possible_clones;
-};
-
-struct drm_mode_obj_get_properties {
-	__u64 props_ptr;
-	__u64 prop_values_ptr;
-	__u32 count_props;
-	__u32 obj_id;
-	__u32 obj_type;
-};
-
-struct drm_mode_property_enum {
-	__u64 value;
-	char name[32];
-};
-
-struct drm_mode_get_property {
-	__u64 values_ptr;
-	__u64 enum_blob_ptr;
-	__u32 prop_id;
-	__u32 flags;
-	char name[32];
-	__u32 count_values;
-	__u32 count_enum_blobs;
-};
-
-struct drm_mode_get_blob {
-	__u32 blob_id;
-	__u32 length;
-	__u64 data;
-};
-
-struct drm_mode_create_blob {
-	__u64 data;
-	__u32 length;
-	__u32 blob_id;
-};
-
-struct drm_mode_destroy_blob {
-	__u32 blob_id;
-};
-
-struct drm_property_enum {
-	uint64_t value;
-	struct list_head head;
-	char name[32];
-};
-
-struct drm_mode_set_plane {
-	__u32 plane_id;
-	__u32 crtc_id;
-	__u32 fb_id;
-	__u32 flags;
-	__s32 crtc_x;
-	__s32 crtc_y;
-	__u32 crtc_w;
-	__u32 crtc_h;
-	__u32 src_x;
-	__u32 src_y;
-	__u32 src_h;
-	__u32 src_w;
-};
-
-struct drm_mode_get_plane {
-	__u32 plane_id;
-	__u32 crtc_id;
-	__u32 fb_id;
-	__u32 possible_crtcs;
-	__u32 gamma_size;
-	__u32 count_format_types;
-	__u64 format_type_ptr;
-};
-
-struct drm_mode_get_plane_res {
-	__u64 plane_id_ptr;
-	__u32 count_planes;
-};
-
-struct drm_mode_cursor {
-	__u32 flags;
-	__u32 crtc_id;
-	__s32 x;
-	__s32 y;
-	__u32 width;
-	__u32 height;
-	__u32 handle;
-};
-
-struct drm_mode_cursor2 {
-	__u32 flags;
-	__u32 crtc_id;
-	__s32 x;
-	__s32 y;
-	__u32 width;
-	__u32 height;
-	__u32 handle;
-	__s32 hot_x;
-	__s32 hot_y;
-};
-
-struct drm_mode_crtc_page_flip_target {
-	__u32 crtc_id;
-	__u32 fb_id;
-	__u32 flags;
-	__u32 sequence;
-	__u64 user_data;
-};
-
-struct drm_format_modifier_blob {
-	__u32 version;
-	__u32 flags;
-	__u32 count_formats;
-	__u32 formats_offset;
-	__u32 count_modifiers;
-	__u32 modifiers_offset;
-};
-
-struct drm_format_modifier {
-	__u64 formats;
-	__u32 offset;
-	__u32 pad;
-	__u64 modifier;
-};
-
-struct drm_mode_crtc_lut {
-	__u32 crtc_id;
-	__u32 gamma_size;
-	__u64 red;
-	__u64 green;
-	__u64 blue;
-};
-
-enum drm_color_lut_tests {
-	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
-	DRM_COLOR_LUT_NON_DECREASING = 2,
-};
-
-struct drm_print_iterator {
-	void *data;
-	ssize_t start;
-	ssize_t remain;
-	ssize_t offset;
-};
-
-struct drm_mode_map_dumb {
-	__u32 handle;
-	__u32 pad;
-	__u64 offset;
-};
-
-struct drm_mode_destroy_dumb {
-	__u32 handle;
-};
-
-struct drm_mode_card_res {
-	__u64 fb_id_ptr;
-	__u64 crtc_id_ptr;
-	__u64 connector_id_ptr;
-	__u64 encoder_id_ptr;
-	__u32 count_fbs;
-	__u32 count_crtcs;
-	__u32 count_connectors;
-	__u32 count_encoders;
-	__u32 min_width;
-	__u32 max_width;
-	__u32 min_height;
-	__u32 max_height;
-};
-
-enum drm_vblank_seq_type {
-	_DRM_VBLANK_ABSOLUTE = 0,
-	_DRM_VBLANK_RELATIVE = 1,
-	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
-	_DRM_VBLANK_EVENT = 67108864,
-	_DRM_VBLANK_FLIP = 134217728,
-	_DRM_VBLANK_NEXTONMISS = 268435456,
-	_DRM_VBLANK_SECONDARY = 536870912,
-	_DRM_VBLANK_SIGNAL = 1073741824,
-};
-
-struct drm_wait_vblank_request {
-	enum drm_vblank_seq_type type;
-	unsigned int sequence;
-	long unsigned int signal;
-};
-
-struct drm_wait_vblank_reply {
-	enum drm_vblank_seq_type type;
-	unsigned int sequence;
-	long int tval_sec;
-	long int tval_usec;
-};
-
-union drm_wait_vblank {
-	struct drm_wait_vblank_request request;
-	struct drm_wait_vblank_reply reply;
-};
-
-struct drm_modeset_ctl {
-	__u32 crtc;
-	__u32 cmd;
-};
-
-struct drm_crtc_get_sequence {
-	__u32 crtc_id;
-	__u32 active;
-	__u64 sequence;
-	__s64 sequence_ns;
-};
-
-struct drm_crtc_queue_sequence {
-	__u32 crtc_id;
-	__u32 flags;
-	__u64 sequence;
-	__u64 user_data;
-};
-
-enum dma_fence_flag_bits {
-	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
-	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
-	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
-	DMA_FENCE_FLAG_USER_BITS = 3,
-};
-
-struct sync_file {
-	struct file *file;
-	char user_name[32];
-	struct list_head sync_file_list;
-	wait_queue_head_t wq;
-	long unsigned int flags;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-};
-
-struct drm_syncobj_create {
-	__u32 handle;
-	__u32 flags;
-};
-
-struct drm_syncobj_destroy {
-	__u32 handle;
-	__u32 pad;
-};
-
-struct drm_syncobj_handle {
-	__u32 handle;
-	__u32 flags;
-	__s32 fd;
-	__u32 pad;
-};
-
-struct drm_syncobj_transfer {
-	__u32 src_handle;
-	__u32 dst_handle;
-	__u64 src_point;
-	__u64 dst_point;
-	__u32 flags;
-	__u32 pad;
-};
-
-struct drm_syncobj_wait {
-	__u64 handles;
-	__s64 timeout_nsec;
-	__u32 count_handles;
-	__u32 flags;
-	__u32 first_signaled;
-	__u32 pad;
-};
-
-struct drm_syncobj_timeline_wait {
-	__u64 handles;
-	__u64 points;
-	__s64 timeout_nsec;
-	__u32 count_handles;
-	__u32 flags;
-	__u32 first_signaled;
-	__u32 pad;
-};
-
-struct drm_syncobj_array {
-	__u64 handles;
-	__u32 count_handles;
-	__u32 pad;
-};
-
-struct drm_syncobj_timeline_array {
-	__u64 handles;
-	__u64 points;
-	__u32 count_handles;
-	__u32 flags;
-};
-
-struct dma_fence_chain {
-	struct dma_fence base;
-	spinlock_t lock;
-	struct dma_fence *prev;
-	u64 prev_seqno;
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-	struct irq_work work;
-};
-
-struct drm_syncobj {
-	struct kref refcount;
-	struct dma_fence *fence;
-	struct list_head cb_list;
-	spinlock_t lock;
-	struct file *file;
-};
-
-struct syncobj_wait_entry {
-	struct list_head node;
-	struct task_struct *task;
-	struct dma_fence *fence;
-	struct dma_fence_cb fence_cb;
-	u64 point;
-};
-
-struct drm_mode_create_lease {
-	__u64 object_ids;
-	__u32 object_count;
-	__u32 flags;
-	__u32 lessee_id;
-	__u32 fd;
-};
-
-struct drm_mode_list_lessees {
-	__u32 count_lessees;
-	__u32 pad;
-	__u64 lessees_ptr;
-};
-
-struct drm_mode_get_lease {
-	__u32 count_objects;
-	__u32 pad;
-	__u64 objects_ptr;
-};
-
-struct drm_mode_revoke_lease {
-	__u32 lessee_id;
-};
-
-struct drm_client_offset {
-	int x;
-	int y;
-};
-
-struct drm_mode_atomic {
-	__u32 flags;
-	__u32 count_objs;
-	__u64 objs_ptr;
-	__u64 count_props_ptr;
-	__u64 props_ptr;
-	__u64 prop_values_ptr;
-	__u64 reserved;
-	__u64 user_data;
-};
-
-struct drm_out_fence_state {
-	s32 *out_fence_ptr;
-	struct sync_file *sync_file;
-	int fd;
-};
-
-struct hdcp_srm_header {
-	u8 srm_id;
-	u8 reserved;
-	__be16 srm_version;
-	u8 srm_gen_no;
-} __attribute__((packed));
-
-struct hdcp_srm {
-	u32 revoked_ksv_cnt;
-	u8 *revoked_ksv_list;
-	struct mutex mutex;
-};
-
-typedef unsigned int drm_drawable_t;
-
-struct drm_agp_mode {
-	long unsigned int mode;
-};
-
-struct drm_agp_buffer {
-	long unsigned int size;
-	long unsigned int handle;
-	long unsigned int type;
-	long unsigned int physical;
-};
-
-struct drm_agp_binding {
-	long unsigned int handle;
-	long unsigned int offset;
-};
-
-struct drm_agp_info {
-	int agp_version_major;
-	int agp_version_minor;
-	long unsigned int mode;
-	long unsigned int aperture_base;
-	long unsigned int aperture_size;
-	long unsigned int memory_allowed;
-	long unsigned int memory_used;
-	short unsigned int id_vendor;
-	short unsigned int id_device;
-};
-
-typedef int drm_ioctl_compat_t(struct file *, unsigned int, long unsigned int);
-
-struct drm_version_32 {
-	int version_major;
-	int version_minor;
-	int version_patchlevel;
-	u32 name_len;
-	u32 name;
-	u32 date_len;
-	u32 date;
-	u32 desc_len;
-	u32 desc;
-};
-
-typedef struct drm_version_32 drm_version32_t;
-
-struct drm_unique32 {
-	u32 unique_len;
-	u32 unique;
-};
-
-typedef struct drm_unique32 drm_unique32_t;
-
-struct drm_client32 {
-	int idx;
-	int auth;
-	u32 pid;
-	u32 uid;
-	u32 magic;
-	u32 iocs;
-};
-
-typedef struct drm_client32 drm_client32_t;
-
-struct drm_stats32 {
-	u32 count;
-	struct {
-		u32 value;
-		enum drm_stat_type type;
-	} data[15];
-};
-
-typedef struct drm_stats32 drm_stats32_t;
-
-struct drm_agp_mode32 {
-	u32 mode;
-};
-
-typedef struct drm_agp_mode32 drm_agp_mode32_t;
-
-struct drm_agp_info32 {
-	int agp_version_major;
-	int agp_version_minor;
-	u32 mode;
-	u32 aperture_base;
-	u32 aperture_size;
-	u32 memory_allowed;
-	u32 memory_used;
-	short unsigned int id_vendor;
-	short unsigned int id_device;
-};
-
-typedef struct drm_agp_info32 drm_agp_info32_t;
-
-struct drm_agp_buffer32 {
-	u32 size;
-	u32 handle;
-	u32 type;
-	u32 physical;
-};
-
-typedef struct drm_agp_buffer32 drm_agp_buffer32_t;
-
-struct drm_agp_binding32 {
-	u32 handle;
-	u32 offset;
-};
-
-typedef struct drm_agp_binding32 drm_agp_binding32_t;
-
-struct drm_update_draw32 {
-	drm_drawable_t handle;
-	unsigned int type;
-	unsigned int num;
-	u64 data;
-} __attribute__((packed));
-
-typedef struct drm_update_draw32 drm_update_draw32_t;
-
-struct drm_wait_vblank_request32 {
-	enum drm_vblank_seq_type type;
-	unsigned int sequence;
-	u32 signal;
-};
-
-struct drm_wait_vblank_reply32 {
-	enum drm_vblank_seq_type type;
-	unsigned int sequence;
-	s32 tval_sec;
-	s32 tval_usec;
-};
-
-union drm_wait_vblank32 {
-	struct drm_wait_vblank_request32 request;
-	struct drm_wait_vblank_reply32 reply;
-};
-
-typedef union drm_wait_vblank32 drm_wait_vblank32_t;
-
-struct drm_mode_fb_cmd232 {
-	u32 fb_id;
-	u32 width;
-	u32 height;
-	u32 pixel_format;
-	u32 flags;
-	u32 handles[4];
-	u32 pitches[4];
-	u32 offsets[4];
-	u64 modifier[4];
-} __attribute__((packed));
-
-struct mipi_dsi_msg {
-	u8 channel;
-	u8 type;
-	u16 flags;
-	size_t tx_len;
-	const void *tx_buf;
-	size_t rx_len;
-	void *rx_buf;
-};
-
-struct mipi_dsi_packet {
-	size_t size;
-	u8 header[4];
-	size_t payload_length;
-	const u8 *payload;
-};
-
-struct mipi_dsi_host;
-
-struct mipi_dsi_device;
-
-struct mipi_dsi_host_ops {
-	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
-	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
-};
-
-struct mipi_dsi_host {
-	struct device *dev;
-	const struct mipi_dsi_host_ops *ops;
-	struct list_head list;
-};
-
-enum mipi_dsi_pixel_format {
-	MIPI_DSI_FMT_RGB888 = 0,
-	MIPI_DSI_FMT_RGB666 = 1,
-	MIPI_DSI_FMT_RGB666_PACKED = 2,
-	MIPI_DSI_FMT_RGB565 = 3,
-};
-
-struct mipi_dsi_device {
-	struct mipi_dsi_host *host;
-	struct device dev;
-	char name[20];
-	unsigned int channel;
-	unsigned int lanes;
-	enum mipi_dsi_pixel_format format;
-	long unsigned int mode_flags;
-	long unsigned int hs_rate;
-	long unsigned int lp_rate;
-};
-
-struct mipi_dsi_device_info {
-	char type[20];
-	u32 channel;
-	struct device_node *node;
-};
-
-enum mipi_dsi_dcs_tear_mode {
-	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
-	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
-};
-
-struct mipi_dsi_driver {
-	struct device_driver driver;
-	int (*probe)(struct mipi_dsi_device *);
-	int (*remove)(struct mipi_dsi_device *);
-	void (*shutdown)(struct mipi_dsi_device *);
-};
-
-enum {
-	MIPI_DSI_V_SYNC_START = 1,
-	MIPI_DSI_V_SYNC_END = 17,
-	MIPI_DSI_H_SYNC_START = 33,
-	MIPI_DSI_H_SYNC_END = 49,
-	MIPI_DSI_COLOR_MODE_OFF = 2,
-	MIPI_DSI_COLOR_MODE_ON = 18,
-	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
-	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
-	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
-	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
-	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
-	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
-	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
-	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
-	MIPI_DSI_DCS_SHORT_WRITE = 5,
-	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
-	MIPI_DSI_DCS_READ = 6,
-	MIPI_DSI_DCS_COMPRESSION_MODE = 7,
-	MIPI_DSI_PPS_LONG_WRITE = 10,
-	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
-	MIPI_DSI_END_OF_TRANSMISSION = 8,
-	MIPI_DSI_NULL_PACKET = 9,
-	MIPI_DSI_BLANKING_PACKET = 25,
-	MIPI_DSI_GENERIC_LONG_WRITE = 41,
-	MIPI_DSI_DCS_LONG_WRITE = 57,
-	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
-	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
-	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
-	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
-	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
-	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
-	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
-	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
-};
-
-enum {
-	MIPI_DCS_NOP = 0,
-	MIPI_DCS_SOFT_RESET = 1,
-	MIPI_DCS_GET_DISPLAY_ID = 4,
-	MIPI_DCS_GET_RED_CHANNEL = 6,
-	MIPI_DCS_GET_GREEN_CHANNEL = 7,
-	MIPI_DCS_GET_BLUE_CHANNEL = 8,
-	MIPI_DCS_GET_DISPLAY_STATUS = 9,
-	MIPI_DCS_GET_POWER_MODE = 10,
-	MIPI_DCS_GET_ADDRESS_MODE = 11,
-	MIPI_DCS_GET_PIXEL_FORMAT = 12,
-	MIPI_DCS_GET_DISPLAY_MODE = 13,
-	MIPI_DCS_GET_SIGNAL_MODE = 14,
-	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
-	MIPI_DCS_ENTER_SLEEP_MODE = 16,
-	MIPI_DCS_EXIT_SLEEP_MODE = 17,
-	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
-	MIPI_DCS_ENTER_NORMAL_MODE = 19,
-	MIPI_DCS_EXIT_INVERT_MODE = 32,
-	MIPI_DCS_ENTER_INVERT_MODE = 33,
-	MIPI_DCS_SET_GAMMA_CURVE = 38,
-	MIPI_DCS_SET_DISPLAY_OFF = 40,
-	MIPI_DCS_SET_DISPLAY_ON = 41,
-	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
-	MIPI_DCS_SET_PAGE_ADDRESS = 43,
-	MIPI_DCS_WRITE_MEMORY_START = 44,
-	MIPI_DCS_WRITE_LUT = 45,
-	MIPI_DCS_READ_MEMORY_START = 46,
-	MIPI_DCS_SET_PARTIAL_AREA = 48,
-	MIPI_DCS_SET_SCROLL_AREA = 51,
-	MIPI_DCS_SET_TEAR_OFF = 52,
-	MIPI_DCS_SET_TEAR_ON = 53,
-	MIPI_DCS_SET_ADDRESS_MODE = 54,
-	MIPI_DCS_SET_SCROLL_START = 55,
-	MIPI_DCS_EXIT_IDLE_MODE = 56,
-	MIPI_DCS_ENTER_IDLE_MODE = 57,
-	MIPI_DCS_SET_PIXEL_FORMAT = 58,
-	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
-	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
-	MIPI_DCS_SET_TEAR_SCANLINE = 68,
-	MIPI_DCS_GET_SCANLINE = 69,
-	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
-	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
-	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
-	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
-	MIPI_DCS_WRITE_POWER_SAVE = 85,
-	MIPI_DCS_GET_POWER_SAVE = 86,
-	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
-	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
-	MIPI_DCS_READ_DDB_START = 161,
-	MIPI_DCS_READ_DDB_CONTINUE = 168,
-};
-
-struct drm_dmi_panel_orientation_data {
-	int width;
-	int height;
-	const char * const *bios_dates;
-	int orientation;
-};
-
-typedef u32 depot_stack_handle_t;
-
-enum drm_i915_pmu_engine_sample {
-	I915_SAMPLE_BUSY = 0,
-	I915_SAMPLE_WAIT = 1,
-	I915_SAMPLE_SEMA = 2,
-};
-
-struct drm_i915_gem_pwrite {
-	__u32 handle;
-	__u32 pad;
-	__u64 offset;
-	__u64 size;
-	__u64 data_ptr;
-};
-
-enum pipe {
-	INVALID_PIPE = 4294967295,
-	PIPE_A = 0,
-	PIPE_B = 1,
-	PIPE_C = 2,
-	PIPE_D = 3,
-	_PIPE_EDP = 4,
-	I915_MAX_PIPES = 4,
-};
-
-enum transcoder {
-	INVALID_TRANSCODER = 4294967295,
-	TRANSCODER_A = 0,
-	TRANSCODER_B = 1,
-	TRANSCODER_C = 2,
-	TRANSCODER_D = 3,
-	TRANSCODER_EDP = 4,
-	TRANSCODER_DSI_0 = 5,
-	TRANSCODER_DSI_1 = 6,
-	TRANSCODER_DSI_A = 5,
-	TRANSCODER_DSI_C = 6,
-	I915_MAX_TRANSCODERS = 7,
-};
-
-enum i9xx_plane_id {
-	PLANE_A = 0,
-	PLANE_B = 1,
-	PLANE_C = 2,
-};
-
-enum plane_id {
-	PLANE_PRIMARY = 0,
-	PLANE_SPRITE0 = 1,
-	PLANE_SPRITE1 = 2,
-	PLANE_SPRITE2 = 3,
-	PLANE_SPRITE3 = 4,
-	PLANE_SPRITE4 = 5,
-	PLANE_SPRITE5 = 6,
-	PLANE_CURSOR = 7,
-	I915_MAX_PLANES = 8,
-};
-
-enum port {
-	PORT_NONE = 4294967295,
-	PORT_A = 0,
-	PORT_B = 1,
-	PORT_C = 2,
-	PORT_D = 3,
-	PORT_E = 4,
-	PORT_F = 5,
-	PORT_G = 6,
-	PORT_H = 7,
-	PORT_I = 8,
-	I915_MAX_PORTS = 9,
-};
-
-enum tc_port_mode {
-	TC_PORT_TBT_ALT = 0,
-	TC_PORT_DP_ALT = 1,
-	TC_PORT_LEGACY = 2,
-};
-
-enum dpio_phy {
-	DPIO_PHY0 = 0,
-	DPIO_PHY1 = 1,
-	DPIO_PHY2 = 2,
-};
-
-enum aux_ch {
-	AUX_CH_A = 0,
-	AUX_CH_B = 1,
-	AUX_CH_C = 2,
-	AUX_CH_D = 3,
-	AUX_CH_E = 4,
-	AUX_CH_F = 5,
-	AUX_CH_G = 6,
-};
-
-struct intel_link_m_n {
-	u32 tu;
-	u32 gmch_m;
-	u32 gmch_n;
-	u32 link_m;
-	u32 link_n;
-};
-
-enum phy_fia {
-	FIA1 = 0,
-	FIA2 = 1,
-	FIA3 = 2,
-};
-
-struct intel_cdclk_vals {
-	u16 refclk;
-	u32 cdclk;
-	u8 divider;
-	u8 ratio;
-};
-
-struct cec_devnode {
-	struct device dev;
-	struct cdev cdev;
-	int minor;
-	bool registered;
-	bool unregistered;
-	struct list_head fhs;
-	struct mutex lock;
-};
-
-struct cec_log_addrs {
-	__u8 log_addr[4];
-	__u16 log_addr_mask;
-	__u8 cec_version;
-	__u8 num_log_addrs;
-	__u32 vendor_id;
-	__u32 flags;
-	char osd_name[15];
-	__u8 primary_device_type[4];
-	__u8 log_addr_type[4];
-	__u8 all_device_types[4];
-	__u8 features[48];
-};
-
-struct cec_drm_connector_info {
-	__u32 card_no;
-	__u32 connector_id;
-};
-
-struct cec_connector_info {
-	__u32 type;
-	union {
-		struct cec_drm_connector_info drm;
-		__u32 raw[16];
-	};
-};
-
-struct rc_dev;
-
-struct cec_data;
-
-struct cec_adap_ops;
-
-struct cec_fh;
-
-struct cec_adapter {
-	struct module *owner;
-	char name[32];
-	struct cec_devnode devnode;
-	struct mutex lock;
-	struct rc_dev *rc;
-	struct list_head transmit_queue;
-	unsigned int transmit_queue_sz;
-	struct list_head wait_queue;
-	struct cec_data *transmitting;
-	bool transmit_in_progress;
-	struct task_struct *kthread_config;
-	struct completion config_completion;
-	struct task_struct *kthread;
-	wait_queue_head_t kthread_waitq;
-	wait_queue_head_t waitq;
-	const struct cec_adap_ops *ops;
-	void *priv;
-	u32 capabilities;
-	u8 available_log_addrs;
-	u16 phys_addr;
-	bool needs_hpd;
-	bool is_configuring;
-	bool is_configured;
-	bool cec_pin_is_high;
-	u8 last_initiator;
-	u32 monitor_all_cnt;
-	u32 monitor_pin_cnt;
-	u32 follower_cnt;
-	struct cec_fh *cec_follower;
-	struct cec_fh *cec_initiator;
-	bool passthrough;
-	struct cec_log_addrs log_addrs;
-	struct cec_connector_info conn_info;
-	u32 tx_timeouts;
-	struct dentry *cec_dir;
-	struct dentry *status_file;
-	struct dentry *error_inj_file;
-	u16 phys_addrs[15];
-	u32 sequence;
-	char input_phys[32];
-};
-
-struct hdcp2_cert_rx {
-	u8 receiver_id[5];
-	u8 kpub_rx[131];
-	u8 reserved[2];
-	u8 dcp_signature[384];
-};
-
-struct hdcp2_streamid_type {
-	u8 stream_id;
-	u8 stream_type;
-};
-
-struct hdcp2_tx_caps {
-	u8 version;
-	u8 tx_cap_mask[2];
-};
-
-struct hdcp2_ake_init {
-	u8 msg_id;
-	u8 r_tx[8];
-	struct hdcp2_tx_caps tx_caps;
-};
-
-struct hdcp2_ake_send_cert {
-	u8 msg_id;
-	struct hdcp2_cert_rx cert_rx;
-	u8 r_rx[8];
-	u8 rx_caps[3];
-};
-
-struct hdcp2_ake_no_stored_km {
-	u8 msg_id;
-	u8 e_kpub_km[128];
-};
-
-struct hdcp2_ake_send_hprime {
-	u8 msg_id;
-	u8 h_prime[32];
-};
-
-struct hdcp2_ake_send_pairing_info {
-	u8 msg_id;
-	u8 e_kh_km[16];
-};
-
-struct hdcp2_lc_init {
-	u8 msg_id;
-	u8 r_n[8];
-};
-
-struct hdcp2_lc_send_lprime {
-	u8 msg_id;
-	u8 l_prime[32];
-};
-
-struct hdcp2_ske_send_eks {
-	u8 msg_id;
-	u8 e_dkey_ks[16];
-	u8 riv[8];
-};
-
-struct hdcp2_rep_send_receiverid_list {
-	u8 msg_id;
-	u8 rx_info[2];
-	u8 seq_num_v[3];
-	u8 v_prime[16];
-	u8 receiver_ids[155];
-};
-
-struct hdcp2_rep_send_ack {
-	u8 msg_id;
-	u8 v[16];
-};
-
-struct hdcp2_rep_stream_ready {
-	u8 msg_id;
-	u8 m_prime[32];
-};
-
-enum hdcp_wired_protocol {
-	HDCP_PROTOCOL_INVALID = 0,
-	HDCP_PROTOCOL_HDMI = 1,
-	HDCP_PROTOCOL_DP = 2,
-};
-
-enum mei_fw_ddi {
-	MEI_DDI_INVALID_PORT = 0,
-	MEI_DDI_B = 1,
-	MEI_DDI_C = 2,
-	MEI_DDI_D = 3,
-	MEI_DDI_E = 4,
-	MEI_DDI_F = 5,
-	MEI_DDI_A = 7,
-	MEI_DDI_RANGE_END = 7,
-};
-
-enum mei_fw_tc {
-	MEI_INVALID_TRANSCODER = 0,
-	MEI_TRANSCODER_EDP = 1,
-	MEI_TRANSCODER_DSI0 = 2,
-	MEI_TRANSCODER_DSI1 = 3,
-	MEI_TRANSCODER_A = 16,
-	MEI_TRANSCODER_B = 17,
-	MEI_TRANSCODER_C = 18,
-	MEI_TRANSCODER_D = 19,
-};
-
-struct hdcp_port_data {
-	enum mei_fw_ddi fw_ddi;
-	enum mei_fw_tc fw_tc;
-	u8 port_type;
-	u8 protocol;
-	u16 k;
-	u32 seq_num_m;
-	struct hdcp2_streamid_type *streams;
-};
-
-struct i915_hdcp_component_ops {
-	struct module *owner;
-	int (*initiate_hdcp2_session)(struct device *, struct hdcp_port_data *, struct hdcp2_ake_init *);
-	int (*verify_receiver_cert_prepare_km)(struct device *, struct hdcp_port_data *, struct hdcp2_ake_send_cert *, bool *, struct hdcp2_ake_no_stored_km *, size_t *);
-	int (*verify_hprime)(struct device *, struct hdcp_port_data *, struct hdcp2_ake_send_hprime *);
-	int (*store_pairing_info)(struct device *, struct hdcp_port_data *, struct hdcp2_ake_send_pairing_info *);
-	int (*initiate_locality_check)(struct device *, struct hdcp_port_data *, struct hdcp2_lc_init *);
-	int (*verify_lprime)(struct device *, struct hdcp_port_data *, struct hdcp2_lc_send_lprime *);
-	int (*get_session_key)(struct device *, struct hdcp_port_data *, struct hdcp2_ske_send_eks *);
-	int (*repeater_check_flow_prepare_ack)(struct device *, struct hdcp_port_data *, struct hdcp2_rep_send_receiverid_list *, struct hdcp2_rep_send_ack *);
-	int (*verify_mprime)(struct device *, struct hdcp_port_data *, struct hdcp2_rep_stream_ready *);
-	int (*enable_hdcp_authentication)(struct device *, struct hdcp_port_data *);
-	int (*close_hdcp_session)(struct device *, struct hdcp_port_data *);
-};
-
-struct i915_hdcp_comp_master {
-	struct device *mei_dev;
-	const struct i915_hdcp_component_ops *ops;
-	struct mutex mutex;
-};
-
-struct cec_msg {
-	__u64 tx_ts;
-	__u64 rx_ts;
-	__u32 len;
-	__u32 timeout;
-	__u32 sequence;
-	__u32 flags;
-	__u8 msg[16];
-	__u8 reply;
-	__u8 rx_status;
-	__u8 tx_status;
-	__u8 tx_arb_lost_cnt;
-	__u8 tx_nack_cnt;
-	__u8 tx_low_drive_cnt;
-	__u8 tx_error_cnt;
-};
-
-struct cec_event_state_change {
-	__u16 phys_addr;
-	__u16 log_addr_mask;
-	__u16 have_conn_info;
-};
-
-struct cec_event_lost_msgs {
-	__u32 lost_msgs;
-};
-
-struct cec_event {
-	__u64 ts;
-	__u32 event;
-	__u32 flags;
-	union {
-		struct cec_event_state_change state_change;
-		struct cec_event_lost_msgs lost_msgs;
-		__u32 raw[16];
-	};
-};
-
-enum rc_proto {
-	RC_PROTO_UNKNOWN = 0,
-	RC_PROTO_OTHER = 1,
-	RC_PROTO_RC5 = 2,
-	RC_PROTO_RC5X_20 = 3,
-	RC_PROTO_RC5_SZ = 4,
-	RC_PROTO_JVC = 5,
-	RC_PROTO_SONY12 = 6,
-	RC_PROTO_SONY15 = 7,
-	RC_PROTO_SONY20 = 8,
-	RC_PROTO_NEC = 9,
-	RC_PROTO_NECX = 10,
-	RC_PROTO_NEC32 = 11,
-	RC_PROTO_SANYO = 12,
-	RC_PROTO_MCIR2_KBD = 13,
-	RC_PROTO_MCIR2_MSE = 14,
-	RC_PROTO_RC6_0 = 15,
-	RC_PROTO_RC6_6A_20 = 16,
-	RC_PROTO_RC6_6A_24 = 17,
-	RC_PROTO_RC6_6A_32 = 18,
-	RC_PROTO_RC6_MCE = 19,
-	RC_PROTO_SHARP = 20,
-	RC_PROTO_XMP = 21,
-	RC_PROTO_CEC = 22,
-	RC_PROTO_IMON = 23,
-	RC_PROTO_RCMM12 = 24,
-	RC_PROTO_RCMM24 = 25,
-	RC_PROTO_RCMM32 = 26,
-	RC_PROTO_XBOX_DVD = 27,
-};
-
-struct rc_map_table {
-	u32 scancode;
-	u32 keycode;
-};
-
-struct rc_map {
-	struct rc_map_table *scan;
-	unsigned int size;
-	unsigned int len;
-	unsigned int alloc;
-	enum rc_proto rc_proto;
-	const char *name;
-	spinlock_t lock;
-};
-
-enum rc_driver_type {
-	RC_DRIVER_SCANCODE = 0,
-	RC_DRIVER_IR_RAW = 1,
-	RC_DRIVER_IR_RAW_TX = 2,
-};
-
-struct rc_scancode_filter {
-	u32 data;
-	u32 mask;
-};
-
-struct ir_raw_event_ctrl;
-
-struct rc_dev {
-	struct device dev;
-	bool managed_alloc;
-	const struct attribute_group *sysfs_groups[5];
-	const char *device_name;
-	const char *input_phys;
-	struct input_id input_id;
-	const char *driver_name;
-	const char *map_name;
-	struct rc_map rc_map;
-	struct mutex lock;
-	unsigned int minor;
-	struct ir_raw_event_ctrl *raw;
-	struct input_dev *input_dev;
-	enum rc_driver_type driver_type;
-	bool idle;
-	bool encode_wakeup;
-	u64 allowed_protocols;
-	u64 enabled_protocols;
-	u64 allowed_wakeup_protocols;
-	enum rc_proto wakeup_protocol;
-	struct rc_scancode_filter scancode_filter;
-	struct rc_scancode_filter scancode_wakeup_filter;
-	u32 scancode_mask;
-	u32 users;
-	void *priv;
-	spinlock_t keylock;
-	bool keypressed;
-	long unsigned int keyup_jiffies;
-	struct timer_list timer_keyup;
-	struct timer_list timer_repeat;
-	u32 last_keycode;
-	enum rc_proto last_protocol;
-	u32 last_scancode;
-	u8 last_toggle;
-	u32 timeout;
-	u32 min_timeout;
-	u32 max_timeout;
-	u32 rx_resolution;
-	u32 tx_resolution;
-	bool registered;
-	int (*change_protocol)(struct rc_dev *, u64 *);
-	int (*open)(struct rc_dev *);
-	void (*close)(struct rc_dev *);
-	int (*s_tx_mask)(struct rc_dev *, u32);
-	int (*s_tx_carrier)(struct rc_dev *, u32);
-	int (*s_tx_duty_cycle)(struct rc_dev *, u32);
-	int (*s_rx_carrier_range)(struct rc_dev *, u32, u32);
-	int (*tx_ir)(struct rc_dev *, unsigned int *, unsigned int);
-	void (*s_idle)(struct rc_dev *, bool);
-	int (*s_learning_mode)(struct rc_dev *, int);
-	int (*s_carrier_report)(struct rc_dev *, int);
-	int (*s_filter)(struct rc_dev *, struct rc_scancode_filter *);
-	int (*s_wakeup_filter)(struct rc_dev *, struct rc_scancode_filter *);
-	int (*s_timeout)(struct rc_dev *, unsigned int);
-};
-
-struct cec_data {
-	struct list_head list;
-	struct list_head xfer_list;
-	struct cec_adapter *adap;
-	struct cec_msg msg;
-	struct cec_fh *fh;
-	struct delayed_work work;
-	struct completion c;
-	u8 attempts;
-	bool blocking;
-	bool completed;
-};
-
-struct cec_event_entry {
-	struct list_head list;
-	struct cec_event ev;
-};
-
-struct cec_fh {
-	struct list_head list;
-	struct list_head xfer_list;
-	struct cec_adapter *adap;
-	u8 mode_initiator;
-	u8 mode_follower;
-	wait_queue_head_t wait;
-	struct mutex lock;
-	struct list_head events[8];
-	u16 queued_events[8];
-	unsigned int total_queued_events;
-	struct cec_event_entry core_events[2];
-	struct list_head msgs;
-	unsigned int queued_msgs;
-};
-
-struct cec_adap_ops {
-	int (*adap_enable)(struct cec_adapter *, bool);
-	int (*adap_monitor_all_enable)(struct cec_adapter *, bool);
-	int (*adap_monitor_pin_enable)(struct cec_adapter *, bool);
-	int (*adap_log_addr)(struct cec_adapter *, u8);
-	int (*adap_transmit)(struct cec_adapter *, u8, u32, struct cec_msg *);
-	void (*adap_status)(struct cec_adapter *, struct seq_file *);
-	void (*adap_free)(struct cec_adapter *);
-	int (*error_inj_show)(struct cec_adapter *, struct seq_file *);
-	bool (*error_inj_parse_line)(struct cec_adapter *, char *);
-	int (*received)(struct cec_adapter *, struct cec_msg *);
-};
-
-struct io_mapping {
-	resource_size_t base;
-	long unsigned int size;
-	pgprot_t prot;
-	void *iomem;
-};
-
-struct i2c_algo_bit_data {
-	void *data;
-	void (*setsda)(void *, int);
-	void (*setscl)(void *, int);
-	int (*getsda)(void *);
-	int (*getscl)(void *);
-	int (*pre_xfer)(struct i2c_adapter *);
-	void (*post_xfer)(struct i2c_adapter *);
-	int udelay;
-	int timeout;
-	bool can_do_atomic;
-};
-
-struct i915_params {
-	char *vbt_firmware;
-	int modeset;
-	int lvds_channel_mode;
-	int panel_use_ssc;
-	int vbt_sdvo_panel_type;
-	int enable_dc;
-	int enable_fbc;
-	int enable_psr;
-	int disable_power_well;
-	int enable_ips;
-	int invert_brightness;
-	int enable_guc;
-	int guc_log_level;
-	char *guc_firmware_path;
-	char *huc_firmware_path;
-	char *dmc_firmware_path;
-	int mmio_debug;
-	int edp_vswing;
-	int reset;
-	unsigned int inject_probe_failure;
-	int fastboot;
-	int enable_dpcd_backlight;
-	char *force_probe;
-	long unsigned int fake_lmem_start;
-	bool alpha_support;
-	bool enable_hangcheck;
-	bool prefault_disable;
-	bool load_detect_test;
-	bool force_reset_modeset_test;
-	bool error_capture;
-	bool disable_display;
-	bool verbose_state_checks;
-	bool nuclear_pageflip;
-	bool enable_dp_mst;
-	bool enable_gvt;
-};
-
-typedef struct {
-	u32 reg;
-} i915_reg_t;
-
-enum intel_backlight_type {
-	INTEL_BACKLIGHT_PMIC = 0,
-	INTEL_BACKLIGHT_LPSS = 1,
-	INTEL_BACKLIGHT_DISPLAY_DDI = 2,
-	INTEL_BACKLIGHT_DSI_DCS = 3,
-	INTEL_BACKLIGHT_PANEL_DRIVER_INTERFACE = 4,
-	INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE = 5,
-};
-
-struct edp_power_seq {
-	u16 t1_t3;
-	u16 t8;
-	u16 t9;
-	u16 t10;
-	u16 t11_t12;
-};
-
-enum mipi_seq {
-	MIPI_SEQ_END = 0,
-	MIPI_SEQ_DEASSERT_RESET = 1,
-	MIPI_SEQ_INIT_OTP = 2,
-	MIPI_SEQ_DISPLAY_ON = 3,
-	MIPI_SEQ_DISPLAY_OFF = 4,
-	MIPI_SEQ_ASSERT_RESET = 5,
-	MIPI_SEQ_BACKLIGHT_ON = 6,
-	MIPI_SEQ_BACKLIGHT_OFF = 7,
-	MIPI_SEQ_TEAR_ON = 8,
-	MIPI_SEQ_TEAR_OFF = 9,
-	MIPI_SEQ_POWER_ON = 10,
-	MIPI_SEQ_POWER_OFF = 11,
-	MIPI_SEQ_MAX = 12,
-};
-
-struct mipi_config {
-	u16 panel_id;
-	u32 enable_dithering: 1;
-	u32 rsvd1: 1;
-	u32 is_bridge: 1;
-	u32 panel_arch_type: 2;
-	u32 is_cmd_mode: 1;
-	u32 video_transfer_mode: 2;
-	u32 cabc_supported: 1;
-	u32 pwm_blc: 1;
-	u32 videomode_color_format: 4;
-	u32 rotation: 2;
-	u32 bta_enabled: 1;
-	u32 rsvd2: 15;
-	u16 dual_link: 2;
-	u16 lane_cnt: 2;
-	u16 pixel_overlap: 3;
-	u16 rgb_flip: 1;
-	u16 dl_dcs_cabc_ports: 2;
-	u16 dl_dcs_backlight_ports: 2;
-	u16 rsvd3: 4;
-	u16 rsvd4;
-	u8 rsvd5;
-	u32 target_burst_mode_freq;
-	u32 dsi_ddr_clk;
-	u32 bridge_ref_clk;
-	u8 byte_clk_sel: 2;
-	u8 rsvd6: 6;
-	u16 dphy_param_valid: 1;
-	u16 eot_pkt_disabled: 1;
-	u16 enable_clk_stop: 1;
-	u16 rsvd7: 13;
-	u32 hs_tx_timeout;
-	u32 lp_rx_timeout;
-	u32 turn_around_timeout;
-	u32 device_reset_timer;
-	u32 master_init_timer;
-	u32 dbi_bw_timer;
-	u32 lp_byte_clk_val;
-	u32 prepare_cnt: 6;
-	u32 rsvd8: 2;
-	u32 clk_zero_cnt: 8;
-	u32 trail_cnt: 5;
-	u32 rsvd9: 3;
-	u32 exit_zero_cnt: 6;
-	u32 rsvd10: 2;
-	u32 clk_lane_switch_cnt;
-	u32 hl_switch_cnt;
-	u32 rsvd11[6];
-	u8 tclk_miss;
-	u8 tclk_post;
-	u8 rsvd12;
-	u8 tclk_pre;
-	u8 tclk_prepare;
-	u8 tclk_settle;
-	u8 tclk_term_enable;
-	u8 tclk_trail;
-	u16 tclk_prepare_clkzero;
-	u8 rsvd13;
-	u8 td_term_enable;
-	u8 teot;
-	u8 ths_exit;
-	u8 ths_prepare;
-	u16 ths_prepare_hszero;
-	u8 rsvd14;
-	u8 ths_settle;
-	u8 ths_skip;
-	u8 ths_trail;
-	u8 tinit;
-	u8 tlpx;
-	u8 rsvd15[3];
-	u8 panel_enable;
-	u8 bl_enable;
-	u8 pwm_enable;
-	u8 reset_r_n;
-	u8 pwr_down_r;
-	u8 stdby_r_n;
-} __attribute__((packed));
-
-struct mipi_pps_data {
-	u16 panel_on_delay;
-	u16 bl_enable_delay;
-	u16 bl_disable_delay;
-	u16 panel_off_delay;
-	u16 panel_power_cycle_delay;
-};
-
-typedef depot_stack_handle_t intel_wakeref_t;
-
-struct intel_wakeref;
-
-struct intel_wakeref_ops {
-	int (*get)(struct intel_wakeref *);
-	int (*put)(struct intel_wakeref *);
-};
-
-struct intel_runtime_pm;
-
-struct intel_wakeref {
-	atomic_t count;
-	struct mutex mutex;
-	intel_wakeref_t wakeref;
-	struct intel_runtime_pm *rpm;
-	const struct intel_wakeref_ops *ops;
-	struct work_struct work;
-};
-
-struct intel_runtime_pm {
-	atomic_t wakeref_count;
-	struct device *kdev;
-	bool available;
-	bool suspended;
-	bool irqs_enabled;
-};
-
-struct intel_wakeref_auto {
-	struct intel_runtime_pm *rpm;
-	struct timer_list timer;
-	intel_wakeref_t wakeref;
-	spinlock_t lock;
-	refcount_t count;
-};
-
-enum i915_drm_suspend_mode {
-	I915_DRM_SUSPEND_IDLE = 0,
-	I915_DRM_SUSPEND_MEM = 1,
-	I915_DRM_SUSPEND_HIBERNATE = 2,
-};
-
-enum intel_display_power_domain {
-	POWER_DOMAIN_DISPLAY_CORE = 0,
-	POWER_DOMAIN_PIPE_A = 1,
-	POWER_DOMAIN_PIPE_B = 2,
-	POWER_DOMAIN_PIPE_C = 3,
-	POWER_DOMAIN_PIPE_D = 4,
-	POWER_DOMAIN_PIPE_A_PANEL_FITTER = 5,
-	POWER_DOMAIN_PIPE_B_PANEL_FITTER = 6,
-	POWER_DOMAIN_PIPE_C_PANEL_FITTER = 7,
-	POWER_DOMAIN_PIPE_D_PANEL_FITTER = 8,
-	POWER_DOMAIN_TRANSCODER_A = 9,
-	POWER_DOMAIN_TRANSCODER_B = 10,
-	POWER_DOMAIN_TRANSCODER_C = 11,
-	POWER_DOMAIN_TRANSCODER_D = 12,
-	POWER_DOMAIN_TRANSCODER_EDP = 13,
-	POWER_DOMAIN_TRANSCODER_VDSC_PW2 = 14,
-	POWER_DOMAIN_TRANSCODER_DSI_A = 15,
-	POWER_DOMAIN_TRANSCODER_DSI_C = 16,
-	POWER_DOMAIN_PORT_DDI_A_LANES = 17,
-	POWER_DOMAIN_PORT_DDI_B_LANES = 18,
-	POWER_DOMAIN_PORT_DDI_C_LANES = 19,
-	POWER_DOMAIN_PORT_DDI_D_LANES = 20,
-	POWER_DOMAIN_PORT_DDI_E_LANES = 21,
-	POWER_DOMAIN_PORT_DDI_F_LANES = 22,
-	POWER_DOMAIN_PORT_DDI_G_LANES = 23,
-	POWER_DOMAIN_PORT_DDI_H_LANES = 24,
-	POWER_DOMAIN_PORT_DDI_I_LANES = 25,
-	POWER_DOMAIN_PORT_DDI_A_IO = 26,
-	POWER_DOMAIN_PORT_DDI_B_IO = 27,
-	POWER_DOMAIN_PORT_DDI_C_IO = 28,
-	POWER_DOMAIN_PORT_DDI_D_IO = 29,
-	POWER_DOMAIN_PORT_DDI_E_IO = 30,
-	POWER_DOMAIN_PORT_DDI_F_IO = 31,
-	POWER_DOMAIN_PORT_DDI_G_IO = 32,
-	POWER_DOMAIN_PORT_DDI_H_IO = 33,
-	POWER_DOMAIN_PORT_DDI_I_IO = 34,
-	POWER_DOMAIN_PORT_DSI = 35,
-	POWER_DOMAIN_PORT_CRT = 36,
-	POWER_DOMAIN_PORT_OTHER = 37,
-	POWER_DOMAIN_VGA = 38,
-	POWER_DOMAIN_AUDIO = 39,
-	POWER_DOMAIN_AUX_A = 40,
-	POWER_DOMAIN_AUX_B = 41,
-	POWER_DOMAIN_AUX_C = 42,
-	POWER_DOMAIN_AUX_D = 43,
-	POWER_DOMAIN_AUX_E = 44,
-	POWER_DOMAIN_AUX_F = 45,
-	POWER_DOMAIN_AUX_G = 46,
-	POWER_DOMAIN_AUX_H = 47,
-	POWER_DOMAIN_AUX_I = 48,
-	POWER_DOMAIN_AUX_IO_A = 49,
-	POWER_DOMAIN_AUX_C_TBT = 50,
-	POWER_DOMAIN_AUX_D_TBT = 51,
-	POWER_DOMAIN_AUX_E_TBT = 52,
-	POWER_DOMAIN_AUX_F_TBT = 53,
-	POWER_DOMAIN_AUX_G_TBT = 54,
-	POWER_DOMAIN_AUX_H_TBT = 55,
-	POWER_DOMAIN_AUX_I_TBT = 56,
-	POWER_DOMAIN_GMBUS = 57,
-	POWER_DOMAIN_MODESET = 58,
-	POWER_DOMAIN_GT_IRQ = 59,
-	POWER_DOMAIN_DPLL_DC_OFF = 60,
-	POWER_DOMAIN_INIT = 61,
-	POWER_DOMAIN_NUM = 62,
-};
-
-enum i915_power_well_id {
-	DISP_PW_ID_NONE = 0,
-	VLV_DISP_PW_DISP2D = 1,
-	BXT_DISP_PW_DPIO_CMN_A = 2,
-	VLV_DISP_PW_DPIO_CMN_BC = 3,
-	GLK_DISP_PW_DPIO_CMN_C = 4,
-	CHV_DISP_PW_DPIO_CMN_D = 5,
-	HSW_DISP_PW_GLOBAL = 6,
-	SKL_DISP_PW_MISC_IO = 7,
-	SKL_DISP_PW_1 = 8,
-	SKL_DISP_PW_2 = 9,
-	SKL_DISP_DC_OFF = 10,
-};
-
-struct drm_i915_private;
-
-struct i915_power_well;
-
-struct i915_power_well_ops {
-	void (*sync_hw)(struct drm_i915_private *, struct i915_power_well *);
-	void (*enable)(struct drm_i915_private *, struct i915_power_well *);
-	void (*disable)(struct drm_i915_private *, struct i915_power_well *);
-	bool (*is_enabled)(struct drm_i915_private *, struct i915_power_well *);
-};
-
-typedef u8 intel_engine_mask_t;
-
-enum intel_platform {
-	INTEL_PLATFORM_UNINITIALIZED = 0,
-	INTEL_I830 = 1,
-	INTEL_I845G = 2,
-	INTEL_I85X = 3,
-	INTEL_I865G = 4,
-	INTEL_I915G = 5,
-	INTEL_I915GM = 6,
-	INTEL_I945G = 7,
-	INTEL_I945GM = 8,
-	INTEL_G33 = 9,
-	INTEL_PINEVIEW = 10,
-	INTEL_I965G = 11,
-	INTEL_I965GM = 12,
-	INTEL_G45 = 13,
-	INTEL_GM45 = 14,
-	INTEL_IRONLAKE = 15,
-	INTEL_SANDYBRIDGE = 16,
-	INTEL_IVYBRIDGE = 17,
-	INTEL_VALLEYVIEW = 18,
-	INTEL_HASWELL = 19,
-	INTEL_BROADWELL = 20,
-	INTEL_CHERRYVIEW = 21,
-	INTEL_SKYLAKE = 22,
-	INTEL_BROXTON = 23,
-	INTEL_KABYLAKE = 24,
-	INTEL_GEMINILAKE = 25,
-	INTEL_COFFEELAKE = 26,
-	INTEL_CANNONLAKE = 27,
-	INTEL_ICELAKE = 28,
-	INTEL_ELKHARTLAKE = 29,
-	INTEL_TIGERLAKE = 30,
-	INTEL_MAX_PLATFORMS = 31,
-};
-
-enum intel_ppgtt_type {
-	INTEL_PPGTT_NONE = 0,
-	INTEL_PPGTT_ALIASING = 1,
-	INTEL_PPGTT_FULL = 2,
-};
-
-struct color_luts {
-	u32 degamma_lut_size;
-	u32 gamma_lut_size;
-	u32 degamma_lut_tests;
-	u32 gamma_lut_tests;
-};
-
-struct intel_device_info {
-	u16 gen_mask;
-	u8 gen;
-	u8 gt;
-	intel_engine_mask_t engine_mask;
-	enum intel_platform platform;
-	enum intel_ppgtt_type ppgtt_type;
-	unsigned int ppgtt_size;
-	unsigned int page_sizes;
-	u32 memory_regions;
-	u32 display_mmio_offset;
-	u8 pipe_mask;
-	u8 is_mobile: 1;
-	u8 is_lp: 1;
-	u8 require_force_probe: 1;
-	u8 is_dgfx: 1;
-	u8 has_64bit_reloc: 1;
-	u8 gpu_reset_clobbers_display: 1;
-	u8 has_reset_engine: 1;
-	u8 has_fpga_dbg: 1;
-	u8 has_global_mocs: 1;
-	u8 has_gt_uc: 1;
-	u8 has_l3_dpf: 1;
-	u8 has_llc: 1;
-	u8 has_logical_ring_contexts: 1;
-	u8 has_logical_ring_elsq: 1;
-	u8 has_logical_ring_preemption: 1;
-	u8 has_pooled_eu: 1;
-	u8 has_rc6: 1;
-	u8 has_rc6p: 1;
-	u8 has_rps: 1;
-	u8 has_runtime_pm: 1;
-	u8 has_snoop: 1;
-	u8 has_coherent_ggtt: 1;
-	u8 unfenced_needs_alignment: 1;
-	u8 hws_needs_physical: 1;
-	struct {
-		u8 cursor_needs_physical: 1;
-		u8 has_csr: 1;
-		u8 has_ddi: 1;
-		u8 has_dp_mst: 1;
-		u8 has_dsb: 1;
-		u8 has_dsc: 1;
-		u8 has_fbc: 1;
-		u8 has_gmch: 1;
-		u8 has_hdcp: 1;
-		u8 has_hotplug: 1;
-		u8 has_ipc: 1;
-		u8 has_modular_fia: 1;
-		u8 has_overlay: 1;
-		u8 has_psr: 1;
-		u8 overlay_needs_physical: 1;
-		u8 supports_tv: 1;
-	} display;
-	u16 ddb_size;
-	int pipe_offsets[7];
-	int trans_offsets[7];
-	int cursor_offsets[4];
-	struct color_luts color;
-};
-
-struct sseu_dev_info {
-	u8 slice_mask;
-	u8 subslice_mask[6];
-	u8 eu_mask[96];
-	u16 eu_total;
-	u8 eu_per_subslice;
-	u8 min_eu_in_pool;
-	u8 subslice_7eu[3];
-	u8 has_slice_pg: 1;
-	u8 has_subslice_pg: 1;
-	u8 has_eu_pg: 1;
-	u8 max_slices;
-	u8 max_subslices;
-	u8 max_eus_per_subslice;
-	u8 ss_stride;
-	u8 eu_stride;
-};
-
-struct intel_runtime_info {
-	u32 platform_mask[2];
-	u16 device_id;
-	u8 num_sprites[4];
-	u8 num_scalers[4];
-	u8 num_engines;
-	struct sseu_dev_info sseu;
-	u32 cs_timestamp_frequency_khz;
-	u8 vdbox_sfc_access;
-};
-
-struct intel_driver_caps {
-	unsigned int scheduler;
-	bool has_logical_contexts: 1;
-};
-
-enum forcewake_domains {
-	FORCEWAKE_RENDER = 1,
-	FORCEWAKE_BLITTER = 2,
-	FORCEWAKE_MEDIA = 4,
-	FORCEWAKE_MEDIA_VDBOX0 = 8,
-	FORCEWAKE_MEDIA_VDBOX1 = 16,
-	FORCEWAKE_MEDIA_VDBOX2 = 32,
-	FORCEWAKE_MEDIA_VDBOX3 = 64,
-	FORCEWAKE_MEDIA_VEBOX0 = 128,
-	FORCEWAKE_MEDIA_VEBOX1 = 256,
-	FORCEWAKE_ALL = 511,
-};
-
-struct intel_uncore;
-
-struct intel_uncore_funcs {
-	void (*force_wake_get)(struct intel_uncore *, enum forcewake_domains);
-	void (*force_wake_put)(struct intel_uncore *, enum forcewake_domains);
-	enum forcewake_domains (*read_fw_domains)(struct intel_uncore *, i915_reg_t);
-	enum forcewake_domains (*write_fw_domains)(struct intel_uncore *, i915_reg_t);
-	u8 (*mmio_readb)(struct intel_uncore *, i915_reg_t, bool);
-	u16 (*mmio_readw)(struct intel_uncore *, i915_reg_t, bool);
-	u32 (*mmio_readl)(struct intel_uncore *, i915_reg_t, bool);
-	u64 (*mmio_readq)(struct intel_uncore *, i915_reg_t, bool);
-	void (*mmio_writeb)(struct intel_uncore *, i915_reg_t, u8, bool);
-	void (*mmio_writew)(struct intel_uncore *, i915_reg_t, u16, bool);
-	void (*mmio_writel)(struct intel_uncore *, i915_reg_t, u32, bool);
-};
-
-struct intel_forcewake_range;
-
-struct intel_uncore_forcewake_domain;
-
-struct intel_uncore_mmio_debug;
-
-struct intel_uncore {
-	void *regs;
-	struct drm_i915_private *i915;
-	struct intel_runtime_pm *rpm;
-	spinlock_t lock;
-	unsigned int flags;
-	const struct intel_forcewake_range *fw_domains_table;
-	unsigned int fw_domains_table_entries;
-	struct notifier_block pmic_bus_access_nb;
-	struct intel_uncore_funcs funcs;
-	unsigned int fifo_count;
-	enum forcewake_domains fw_domains;
-	enum forcewake_domains fw_domains_active;
-	enum forcewake_domains fw_domains_timer;
-	enum forcewake_domains fw_domains_saved;
-	struct intel_uncore_forcewake_domain *fw_domain[9];
-	unsigned int user_forcewake_count;
-	struct intel_uncore_mmio_debug *debug;
-};
-
-struct intel_uncore_mmio_debug {
-	spinlock_t lock;
-	int unclaimed_mmio_check;
-	int saved_mmio_check;
-	u32 suspend_count;
-};
-
-struct i915_virtual_gpu {
-	struct mutex lock;
-	bool active;
-	u32 caps;
-};
-
-struct intel_gvt;
-
-struct intel_wopcm {
-	u32 size;
-	struct {
-		u32 base;
-		u32 size;
-	} guc;
-};
-
-struct intel_csr {
-	struct work_struct work;
-	const char *fw_path;
-	u32 required_version;
-	u32 max_fw_size;
-	u32 *dmc_payload;
-	u32 dmc_fw_size;
-	u32 version;
-	u32 mmio_count;
-	i915_reg_t mmioaddr[20];
-	u32 mmiodata[20];
-	u32 dc_state;
-	u32 target_dc_state;
-	u32 allowed_dc_mask;
-	intel_wakeref_t wakeref;
-};
-
-struct intel_gmbus {
-	struct i2c_adapter adapter;
-	u32 force_bit;
-	u32 reg0;
-	i915_reg_t gpio_reg;
-	struct i2c_algo_bit_data bit_algo;
-	struct drm_i915_private *dev_priv;
-};
-
-struct i915_hotplug {
-	struct delayed_work hotplug_work;
-	struct {
-		long unsigned int last_jiffies;
-		int count;
-		enum {
-			HPD_ENABLED = 0,
-			HPD_DISABLED = 1,
-			HPD_MARK_DISABLED = 2,
-		} state;
-	} stats[13];
-	u32 event_bits;
-	u32 retry_bits;
-	struct delayed_work reenable_work;
-	u32 long_port_mask;
-	u32 short_port_mask;
-	struct work_struct dig_port_work;
-	struct work_struct poll_init_work;
-	bool poll_enabled;
-	unsigned int hpd_storm_threshold;
-	u8 hpd_short_storm_enabled;
-	struct workqueue_struct *dp_wq;
-};
-
-struct i915_vma;
-
-struct intel_fbc_state_cache {
-	struct i915_vma *vma;
-	long unsigned int flags;
-	struct {
-		unsigned int mode_flags;
-		u32 hsw_bdw_pixel_rate;
-	} crtc;
-	struct {
-		unsigned int rotation;
-		int src_w;
-		int src_h;
-		bool visible;
-		int adjusted_x;
-		int adjusted_y;
-		int y;
-		u16 pixel_blend_mode;
-	} plane;
-	struct {
-		const struct drm_format_info *format;
-		unsigned int stride;
-	} fb;
-};
-
-struct intel_fbc_reg_params {
-	struct i915_vma *vma;
-	long unsigned int flags;
-	struct {
-		enum pipe pipe;
-		enum i9xx_plane_id i9xx_plane;
-		unsigned int fence_y_offset;
-	} crtc;
-	struct {
-		const struct drm_format_info *format;
-		unsigned int stride;
-	} fb;
-	int cfb_size;
-	unsigned int gen9_wa_cfb_stride;
-};
-
-struct intel_crtc;
-
-struct intel_fbc {
-	struct mutex lock;
-	unsigned int threshold;
-	unsigned int possible_framebuffer_bits;
-	unsigned int busy_bits;
-	unsigned int visible_pipes_mask;
-	struct intel_crtc *crtc;
-	struct drm_mm_node compressed_fb;
-	struct drm_mm_node *compressed_llb;
-	bool false_color;
-	bool enabled;
-	bool active;
-	bool flip_pending;
-	bool underrun_detected;
-	struct work_struct underrun_work;
-	struct intel_fbc_state_cache state_cache;
-	struct intel_fbc_reg_params params;
-	const char *no_fbc_reason;
-};
-
-enum drrs_refresh_rate_type {
-	DRRS_HIGH_RR = 0,
-	DRRS_LOW_RR = 1,
-	DRRS_MAX_RR = 2,
-};
-
-enum drrs_support_type {
-	DRRS_NOT_SUPPORTED = 0,
-	STATIC_DRRS_SUPPORT = 1,
-	SEAMLESS_DRRS_SUPPORT = 2,
-};
-
-struct intel_dp;
-
-struct i915_drrs {
-	struct mutex mutex;
-	struct delayed_work work;
-	struct intel_dp *dp;
-	unsigned int busy_frontbuffer_bits;
-	enum drrs_refresh_rate_type refresh_rate_type;
-	enum drrs_support_type type;
-};
-
-struct opregion_header;
-
-struct opregion_acpi;
-
-struct opregion_swsci;
-
-struct opregion_asle;
-
-struct intel_opregion {
-	struct opregion_header *header;
-	struct opregion_acpi *acpi;
-	struct opregion_swsci *swsci;
-	u32 swsci_gbda_sub_functions;
-	u32 swsci_sbcb_sub_functions;
-	struct opregion_asle *asle;
-	void *rvda;
-	void *vbt_firmware;
-	const void *vbt;
-	u32 vbt_size;
-	u32 *lid_state;
-	struct work_struct asle_work;
-	struct notifier_block acpi_notifier;
-};
-
-enum psr_lines_to_wait {
-	PSR_0_LINES_TO_WAIT = 0,
-	PSR_1_LINE_TO_WAIT = 1,
-	PSR_4_LINES_TO_WAIT = 2,
-	PSR_8_LINES_TO_WAIT = 3,
-};
-
-struct child_device_config;
-
-struct ddi_vbt_port_info {
-	const struct child_device_config *child;
-	int max_tmds_clock;
-	u8 hdmi_level_shift;
-	u8 supports_dvi: 1;
-	u8 supports_hdmi: 1;
-	u8 supports_dp: 1;
-	u8 supports_edp: 1;
-	u8 supports_typec_usb: 1;
-	u8 supports_tbt: 1;
-	u8 alternate_aux_channel;
-	u8 alternate_ddc_pin;
-	u8 dp_boost_level;
-	u8 hdmi_boost_level;
-	int dp_max_link_rate;
-};
-
-struct sdvo_device_mapping {
-	u8 initialized;
-	u8 dvo_port;
-	u8 slave_addr;
-	u8 dvo_wiring;
-	u8 i2c_pin;
-	u8 ddc_pin;
-};
-
-struct intel_vbt_data {
-	struct drm_display_mode *lfp_lvds_vbt_mode;
-	struct drm_display_mode *sdvo_lvds_vbt_mode;
-	unsigned int int_tv_support: 1;
-	unsigned int lvds_dither: 1;
-	unsigned int int_crt_support: 1;
-	unsigned int lvds_use_ssc: 1;
-	unsigned int int_lvds_support: 1;
-	unsigned int display_clock_mode: 1;
-	unsigned int fdi_rx_polarity_inverted: 1;
-	unsigned int panel_type: 4;
-	int lvds_ssc_freq;
-	unsigned int bios_lvds_val;
-	enum drm_panel_orientation orientation;
-	enum drrs_support_type drrs_type;
-	struct {
-		int rate;
-		int lanes;
-		int preemphasis;
-		int vswing;
-		bool low_vswing;
-		bool initialized;
-		int bpp;
-		struct edp_power_seq pps;
-	} edp;
-	struct {
-		bool enable;
-		bool full_link;
-		bool require_aux_wakeup;
-		int idle_frames;
-		enum psr_lines_to_wait lines_to_wait;
-		int tp1_wakeup_time_us;
-		int tp2_tp3_wakeup_time_us;
-		int psr2_tp2_tp3_wakeup_time_us;
-	} psr;
-	struct {
-		u16 pwm_freq_hz;
-		bool present;
-		bool active_low_pwm;
-		u8 min_brightness;
-		u8 controller;
-		enum intel_backlight_type type;
-	} backlight;
-	struct {
-		u16 panel_id;
-		struct mipi_config *config;
-		struct mipi_pps_data *pps;
-		u16 bl_ports;
-		u16 cabc_ports;
-		u8 seq_version;
-		u32 size;
-		u8 *data;
-		const u8 *sequence[12];
-		u8 *deassert_seq;
-		enum drm_panel_orientation orientation;
-	} dsi;
-	int crt_ddc_pin;
-	int child_dev_num;
-	struct child_device_config *child_dev;
-	struct ddi_vbt_port_info ddi_port_info[9];
-	struct sdvo_device_mapping sdvo_mappings[2];
-};
-
-struct intel_cdclk_state {
-	unsigned int cdclk;
-	unsigned int vco;
-	unsigned int ref;
-	unsigned int bypass;
-	u8 voltage_level;
-};
-
-struct intel_crtc_state;
-
-struct intel_atomic_state;
-
-struct intel_initial_plane_config;
-
-struct intel_encoder;
-
-struct drm_i915_display_funcs {
-	void (*get_cdclk)(struct drm_i915_private *, struct intel_cdclk_state *);
-	void (*set_cdclk)(struct drm_i915_private *, const struct intel_cdclk_state *, enum pipe);
-	int (*get_fifo_size)(struct drm_i915_private *, enum i9xx_plane_id);
-	int (*compute_pipe_wm)(struct intel_crtc_state *);
-	int (*compute_intermediate_wm)(struct intel_crtc_state *);
-	void (*initial_watermarks)(struct intel_atomic_state *, struct intel_crtc_state *);
-	void (*atomic_update_watermarks)(struct intel_atomic_state *, struct intel_crtc_state *);
-	void (*optimize_watermarks)(struct intel_atomic_state *, struct intel_crtc_state *);
-	int (*compute_global_watermarks)(struct intel_atomic_state *);
-	void (*update_wm)(struct intel_crtc *);
-	int (*modeset_calc_cdclk)(struct intel_atomic_state *);
-	u8 (*calc_voltage_level)(int);
-	bool (*get_pipe_config)(struct intel_crtc *, struct intel_crtc_state *);
-	void (*get_initial_plane_config)(struct intel_crtc *, struct intel_initial_plane_config *);
-	int (*crtc_compute_clock)(struct intel_crtc *, struct intel_crtc_state *);
-	void (*crtc_enable)(struct intel_crtc_state *, struct intel_atomic_state *);
-	void (*crtc_disable)(struct intel_crtc_state *, struct intel_atomic_state *);
-	void (*commit_modeset_enables)(struct intel_atomic_state *);
-	void (*commit_modeset_disables)(struct intel_atomic_state *);
-	void (*audio_codec_enable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*audio_codec_disable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*fdi_link_train)(struct intel_crtc *, const struct intel_crtc_state *);
-	void (*init_clock_gating)(struct drm_i915_private *);
-	void (*hpd_irq_setup)(struct drm_i915_private *);
-	int (*color_check)(struct intel_crtc_state *);
-	void (*color_commit)(const struct intel_crtc_state *);
-	void (*load_luts)(const struct intel_crtc_state *);
-	void (*read_luts)(struct intel_crtc_state *);
-};
-
-enum intel_pch {
-	PCH_NOP = 4294967295,
-	PCH_NONE = 0,
-	PCH_IBX = 1,
-	PCH_CPT = 2,
-	PCH_LPT = 3,
-	PCH_SPT = 4,
-	PCH_CNP = 5,
-	PCH_ICP = 6,
-	PCH_JSP = 7,
-	PCH_MCC = 8,
-	PCH_TGP = 9,
-};
-
-struct i915_page_dma {
-	struct page *page;
-	union {
-		dma_addr_t daddr;
-		u32 ggtt_offset;
-	};
-};
-
-struct i915_page_scratch {
-	struct i915_page_dma base;
-	u64 encode;
-};
-
-struct pagestash {
-	spinlock_t lock;
-	struct pagevec pvec;
-};
-
-enum i915_cache_level {
-	I915_CACHE_NONE = 0,
-	I915_CACHE_LLC = 1,
-	I915_CACHE_L3_LLC = 2,
-	I915_CACHE_WT = 3,
-};
-
-struct i915_vma_ops {
-	int (*bind_vma)(struct i915_vma *, enum i915_cache_level, u32);
-	void (*unbind_vma)(struct i915_vma *);
-	int (*set_pages)(struct i915_vma *);
-	void (*clear_pages)(struct i915_vma *);
-};
-
-struct intel_gt;
-
-struct drm_i915_file_private;
-
-struct i915_address_space {
-	struct kref ref;
-	struct rcu_work rcu;
-	struct drm_mm mm;
-	struct intel_gt *gt;
-	struct drm_i915_private *i915;
-	struct device *dma;
-	struct drm_i915_file_private *file;
-	u64 total;
-	u64 reserved;
-	unsigned int bind_async_flags;
-	atomic_t open;
-	struct mutex mutex;
-	struct i915_page_scratch scratch[4];
-	unsigned int scratch_order;
-	unsigned int top;
-	struct list_head bound_list;
-	struct pagestash free_pages;
-	bool is_ggtt: 1;
-	bool pt_kmap_wc: 1;
-	bool has_read_only: 1;
-	u64 (*pte_encode)(dma_addr_t, enum i915_cache_level, u32);
-	int (*allocate_va_range)(struct i915_address_space *, u64, u64);
-	void (*clear_range)(struct i915_address_space *, u64, u64);
-	void (*insert_page)(struct i915_address_space *, dma_addr_t, u64, enum i915_cache_level, u32);
-	void (*insert_entries)(struct i915_address_space *, struct i915_vma *, enum i915_cache_level, u32);
-	void (*cleanup)(struct i915_address_space *);
-	struct i915_vma_ops vma_ops;
-};
-
-struct i915_ggtt;
-
-struct i915_fence_reg {
-	struct list_head link;
-	struct i915_ggtt *ggtt;
-	struct i915_vma *vma;
-	atomic_t pin_count;
-	int id;
-	bool dirty;
-};
-
-struct i915_ppgtt;
-
-struct i915_ggtt {
-	struct i915_address_space vm;
-	struct io_mapping iomap;
-	struct resource gmadr;
-	resource_size_t mappable_end;
-	void *gsm;
-	void (*invalidate)(struct i915_ggtt *);
-	struct i915_ppgtt *alias;
-	bool do_idle_maps;
-	int mtrr;
-	u32 bit_6_swizzle_x;
-	u32 bit_6_swizzle_y;
-	u32 pin_bias;
-	unsigned int num_fences;
-	struct i915_fence_reg fence_regs[32];
-	struct list_head fence_list;
-	struct list_head userfault_list;
-	struct intel_wakeref_auto userfault_wakeref;
-	struct drm_mm_node error_capture;
-	struct drm_mm_node uc_fw;
-};
-
-struct intel_memory_region;
-
-struct i915_gem_mm {
-	struct drm_mm stolen;
-	struct mutex stolen_lock;
-	spinlock_t obj_lock;
-	struct list_head purge_list;
-	struct list_head shrink_list;
-	struct llist_head free_list;
-	struct work_struct free_work;
-	atomic_t free_count;
-	struct pagestash wc_stash;
-	struct vfsmount *gemfs;
-	struct intel_memory_region *regions[3];
-	struct notifier_block oom_notifier;
-	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
-	struct workqueue_struct *userptr_wq;
-	u64 shrink_memory;
-	u32 shrink_count;
-};
-
-enum intel_pipe_crc_source {
-	INTEL_PIPE_CRC_SOURCE_NONE = 0,
-	INTEL_PIPE_CRC_SOURCE_PLANE1 = 1,
-	INTEL_PIPE_CRC_SOURCE_PLANE2 = 2,
-	INTEL_PIPE_CRC_SOURCE_PLANE3 = 3,
-	INTEL_PIPE_CRC_SOURCE_PLANE4 = 4,
-	INTEL_PIPE_CRC_SOURCE_PLANE5 = 5,
-	INTEL_PIPE_CRC_SOURCE_PLANE6 = 6,
-	INTEL_PIPE_CRC_SOURCE_PLANE7 = 7,
-	INTEL_PIPE_CRC_SOURCE_PIPE = 8,
-	INTEL_PIPE_CRC_SOURCE_TV = 9,
-	INTEL_PIPE_CRC_SOURCE_DP_B = 10,
-	INTEL_PIPE_CRC_SOURCE_DP_C = 11,
-	INTEL_PIPE_CRC_SOURCE_DP_D = 12,
-	INTEL_PIPE_CRC_SOURCE_AUTO = 13,
-	INTEL_PIPE_CRC_SOURCE_MAX = 14,
-};
-
-struct intel_pipe_crc {
-	spinlock_t lock;
-	int skipped;
-	enum intel_pipe_crc_source source;
-};
-
-struct intel_dpll_hw_state {
-	u32 dpll;
-	u32 dpll_md;
-	u32 fp0;
-	u32 fp1;
-	u32 wrpll;
-	u32 spll;
-	u32 ctrl1;
-	u32 cfgcr1;
-	u32 cfgcr2;
-	u32 cfgcr0;
-	u32 ebb0;
-	u32 ebb4;
-	u32 pll0;
-	u32 pll1;
-	u32 pll2;
-	u32 pll3;
-	u32 pll6;
-	u32 pll8;
-	u32 pll9;
-	u32 pll10;
-	u32 pcsdw12;
-	u32 mg_refclkin_ctl;
-	u32 mg_clktop2_coreclkctl1;
-	u32 mg_clktop2_hsclkctl;
-	u32 mg_pll_div0;
-	u32 mg_pll_div1;
-	u32 mg_pll_lf;
-	u32 mg_pll_frac_lock;
-	u32 mg_pll_ssc;
-	u32 mg_pll_bias;
-	u32 mg_pll_tdc_coldst_bias;
-	u32 mg_pll_bias_mask;
-	u32 mg_pll_tdc_coldst_bias_mask;
-};
-
-struct intel_shared_dpll_state {
-	unsigned int crtc_mask;
-	struct intel_dpll_hw_state hw_state;
-};
-
-struct dpll_info;
-
-struct intel_shared_dpll {
-	struct intel_shared_dpll_state state;
-	unsigned int active_mask;
-	bool on;
-	const struct dpll_info *info;
-	intel_wakeref_t wakeref;
-};
-
-struct i915_wa;
-
-struct i915_wa_list {
-	const char *name;
-	const char *engine_name;
-	struct i915_wa *list;
-	unsigned int count;
-	unsigned int wa_count;
-};
-
-struct i915_frontbuffer_tracking {
-	spinlock_t lock;
-	unsigned int busy_bits;
-	unsigned int flip_bits;
-};
-
-struct intel_atomic_helper {
-	struct llist_head free_list;
-	struct work_struct free_work;
-};
-
-struct intel_l3_parity {
-	u32 *remap_info[2];
-	struct work_struct error_work;
-	int which_slice;
-};
-
-struct i915_power_domains {
-	bool initializing;
-	bool display_core_suspended;
-	int power_well_count;
-	intel_wakeref_t wakeref;
-	struct mutex lock;
-	int domain_use_count[62];
-	struct delayed_work async_put_work;
-	intel_wakeref_t async_put_wakeref;
-	u64 async_put_domains[2];
-	struct i915_power_well *power_wells;
-};
-
-struct i915_psr {
-	struct mutex lock;
-	u32 debug;
-	bool sink_support;
-	bool enabled;
-	struct intel_dp *dp;
-	enum pipe pipe;
-	enum transcoder transcoder;
-	bool active;
-	struct work_struct work;
-	unsigned int busy_frontbuffer_bits;
-	bool sink_psr2_support;
-	bool link_standby;
-	bool colorimetry_support;
-	bool psr2_enabled;
-	u8 sink_sync_latency;
-	ktime_t last_entry_attempt;
-	ktime_t last_exit;
-	bool sink_not_reliable;
-	bool irq_aux_error;
-	u16 su_x_granularity;
-	bool dc3co_enabled;
-	u32 dc3co_exit_delay;
-	struct delayed_work idle_work;
-};
-
-struct i915_gpu_state;
-
-struct i915_gpu_error {
-	spinlock_t lock;
-	struct i915_gpu_state *first_error;
-	atomic_t pending_fb_pin;
-	atomic_t reset_count;
-	atomic_t reset_engine_count[8];
-};
-
-struct i915_suspend_saved_registers {
-	u32 saveDSPARB;
-	u32 saveFBC_CONTROL;
-	u32 saveCACHE_MODE_0;
-	u32 saveMI_ARB_STATE;
-	u32 saveSWF0[16];
-	u32 saveSWF1[16];
-	u32 saveSWF3[3];
-	u64 saveFENCE[32];
-	u32 savePCH_PORT_HOTPLUG;
-	u16 saveGCDGMBUS;
-};
-
-enum intel_ddb_partitioning {
-	INTEL_DDB_PART_1_2 = 0,
-	INTEL_DDB_PART_5_6 = 1,
-};
-
-struct ilk_wm_values {
-	u32 wm_pipe[3];
-	u32 wm_lp[3];
-	u32 wm_lp_spr[3];
-	u32 wm_linetime[3];
-	bool enable_fbc_wm;
-	enum intel_ddb_partitioning partitioning;
-};
-
-struct skl_ddb_allocation {
-	u8 enabled_slices;
-};
-
-struct skl_ddb_values {
-	unsigned int dirty_pipes;
-	struct skl_ddb_allocation ddb;
-};
-
-struct g4x_pipe_wm {
-	u16 plane[8];
-	u16 fbc;
-};
-
-struct g4x_sr_wm {
-	u16 plane;
-	u16 cursor;
-	u16 fbc;
-};
-
-struct vlv_wm_ddl_values {
-	u8 plane[8];
-};
-
-struct vlv_wm_values {
-	struct g4x_pipe_wm pipe[3];
-	struct g4x_sr_wm sr;
-	struct vlv_wm_ddl_values ddl[3];
-	u8 level;
-	bool cxsr;
-};
-
-struct g4x_wm_values {
-	struct g4x_pipe_wm pipe[2];
-	struct g4x_sr_wm sr;
-	struct g4x_sr_wm hpll;
-	bool cxsr;
-	bool hpll_en;
-	bool fbc_en;
-};
-
-enum intel_dram_type {
-	INTEL_DRAM_UNKNOWN = 0,
-	INTEL_DRAM_DDR3 = 1,
-	INTEL_DRAM_DDR4 = 2,
-	INTEL_DRAM_LPDDR3 = 3,
-	INTEL_DRAM_LPDDR4 = 4,
-};
-
-struct dram_info {
-	bool valid;
-	bool is_16gb_dimm;
-	u8 num_channels;
-	u8 ranks;
-	u32 bandwidth_kbps;
-	bool symmetric_memory;
-	enum intel_dram_type type;
-};
-
-struct intel_bw_info {
-	unsigned int deratedbw[3];
-	u8 num_qgv_points;
-	u8 num_planes;
-};
-
-struct i915_perf;
-
-struct i915_oa_reg;
-
-struct i915_oa_config {
-	struct i915_perf *perf;
-	char uuid[37];
-	int id;
-	const struct i915_oa_reg *mux_regs;
-	u32 mux_regs_len;
-	const struct i915_oa_reg *b_counter_regs;
-	u32 b_counter_regs_len;
-	const struct i915_oa_reg *flex_regs;
-	u32 flex_regs_len;
-	struct attribute_group sysfs_metric;
-	struct attribute *attrs[2];
-	struct device_attribute sysfs_metric_id;
-	struct kref ref;
-	struct callback_head rcu;
-};
-
-struct i915_perf_stream;
-
-struct i915_oa_ops {
-	bool (*is_valid_b_counter_reg)(struct i915_perf *, u32);
-	bool (*is_valid_mux_reg)(struct i915_perf *, u32);
-	bool (*is_valid_flex_reg)(struct i915_perf *, u32);
-	int (*enable_metric_set)(struct i915_perf_stream *);
-	void (*disable_metric_set)(struct i915_perf_stream *);
-	void (*oa_enable)(struct i915_perf_stream *);
-	void (*oa_disable)(struct i915_perf_stream *);
-	int (*read)(struct i915_perf_stream *, char *, size_t, size_t *);
-	u32 (*oa_hw_tail_read)(struct i915_perf_stream *);
-};
-
-struct i915_oa_format;
-
-struct i915_perf {
-	struct drm_i915_private *i915;
-	struct kobject *metrics_kobj;
-	struct ctl_table_header *sysctl_header;
-	struct mutex metrics_lock;
-	struct idr metrics_idr;
-	struct mutex lock;
-	struct i915_perf_stream *exclusive_stream;
-	struct ratelimit_state spurious_report_rs;
-	struct i915_oa_config test_config;
-	u32 gen7_latched_oastatus1;
-	u32 ctx_oactxctrl_offset;
-	u32 ctx_flexeu0_offset;
-	u32 gen8_valid_ctx_bit;
-	struct i915_oa_ops ops;
-	const struct i915_oa_format *oa_formats;
-	atomic64_t noa_programming_delay;
-};
-
-enum intel_uc_fw_type {
-	INTEL_UC_FW_TYPE_GUC = 0,
-	INTEL_UC_FW_TYPE_HUC = 1,
-};
-
-enum intel_uc_fw_status {
-	INTEL_UC_FIRMWARE_NOT_SUPPORTED = 4294967295,
-	INTEL_UC_FIRMWARE_UNINITIALIZED = 0,
-	INTEL_UC_FIRMWARE_DISABLED = 1,
-	INTEL_UC_FIRMWARE_SELECTED = 2,
-	INTEL_UC_FIRMWARE_MISSING = 3,
-	INTEL_UC_FIRMWARE_ERROR = 4,
-	INTEL_UC_FIRMWARE_AVAILABLE = 5,
-	INTEL_UC_FIRMWARE_FAIL = 6,
-	INTEL_UC_FIRMWARE_TRANSFERRED = 7,
-	INTEL_UC_FIRMWARE_RUNNING = 8,
-};
-
-struct drm_i915_gem_object;
-
-struct intel_uc_fw {
-	enum intel_uc_fw_type type;
-	union {
-		const enum intel_uc_fw_status status;
-		enum intel_uc_fw_status __status;
-	};
-	const char *path;
-	bool user_overridden;
-	size_t size;
-	struct drm_i915_gem_object *obj;
-	u16 major_ver_wanted;
-	u16 minor_ver_wanted;
-	u16 major_ver_found;
-	u16 minor_ver_found;
-	u32 rsa_size;
-	u32 ucode_size;
-};
-
-struct intel_guc_log {
-	u32 level;
-	struct i915_vma *vma;
-	struct {
-		void *buf_addr;
-		bool started;
-		struct work_struct flush_work;
-		struct rchan *channel;
-		struct mutex lock;
-		u32 full_count;
-	} relay;
-	struct {
-		u32 sampled_overflow;
-		u32 overflow;
-		u32 flush;
-	} stats[3];
-};
-
-struct guc_ct_buffer_desc;
-
-struct intel_guc_ct_buffer {
-	struct guc_ct_buffer_desc *desc;
-	u32 *cmds;
-};
-
-struct intel_guc_ct_channel {
-	struct i915_vma *vma;
-	struct intel_guc_ct_buffer ctbs[2];
-	u32 owner;
-	u32 next_fence;
-	bool enabled;
-};
-
-struct intel_guc_ct {
-	struct intel_guc_ct_channel host_channel;
-	spinlock_t lock;
-	struct list_head pending_requests;
-	struct list_head incoming_requests;
-	struct work_struct worker;
-};
-
-struct __guc_ads_blob;
-
-struct intel_guc_client;
-
-struct intel_guc {
-	struct intel_uc_fw fw;
-	struct intel_guc_log log;
-	struct intel_guc_ct ct;
-	spinlock_t irq_lock;
-	unsigned int msg_enabled_mask;
-	struct {
-		bool enabled;
-		void (*reset)(struct intel_guc *);
-		void (*enable)(struct intel_guc *);
-		void (*disable)(struct intel_guc *);
-	} interrupts;
-	bool submission_supported;
-	struct i915_vma *ads_vma;
-	struct __guc_ads_blob *ads_blob;
-	struct i915_vma *stage_desc_pool;
-	void *stage_desc_pool_vaddr;
-	struct ida stage_ids;
-	struct intel_guc_client *execbuf_client;
-	long unsigned int doorbell_bitmap[4];
-	u32 db_cacheline;
-	u32 params[14];
-	struct {
-		u32 base;
-		unsigned int count;
-		enum forcewake_domains fw_domains;
-	} send_regs;
-	u32 mmio_msg;
-	struct mutex send_mutex;
-	int (*send)(struct intel_guc *, const u32 *, u32, u32 *, u32);
-	void (*handler)(struct intel_guc *);
-	void (*notify)(struct intel_guc *);
-};
-
-struct intel_huc {
-	struct intel_uc_fw fw;
-	struct i915_vma *rsa_data;
-	struct {
-		i915_reg_t reg;
-		u32 mask;
-		u32 value;
-	} status;
-};
-
-struct intel_uc {
-	struct intel_guc guc;
-	struct intel_huc huc;
-	struct drm_i915_gem_object *load_err_log;
-};
-
-struct intel_gt_timelines {
-	spinlock_t lock;
-	struct list_head active_list;
-	spinlock_t hwsp_lock;
-	struct list_head hwsp_free_list;
-};
-
-struct intel_gt_requests {
-	struct delayed_work retire_work;
-};
-
-struct intel_reset {
-	long unsigned int flags;
-	struct mutex mutex;
-	wait_queue_head_t queue;
-	struct srcu_struct backoff_srcu;
-};
-
-struct intel_llc {};
-
-struct intel_rc6 {
-	u64 prev_hw_residency[4];
-	u64 cur_residency[4];
-	struct drm_i915_gem_object *pctx;
-	bool supported: 1;
-	bool enabled: 1;
-	bool wakeref: 1;
-	bool ctx_corrupted: 1;
-};
-
-struct intel_rps_ei {
-	ktime_t ktime;
-	u32 render_c0;
-	u32 media_c0;
-};
-
-struct intel_ips {
-	u64 last_count1;
-	long unsigned int last_time1;
-	long unsigned int chipset_power;
-	u64 last_count2;
-	u64 last_time2;
-	long unsigned int gfx_power;
-	u8 corr;
-	int c;
-	int m;
-};
-
-struct intel_rps {
-	struct mutex lock;
-	struct work_struct work;
-	bool enabled;
-	bool active;
-	u32 pm_iir;
-	u32 pm_intrmsk_mbz;
-	u32 pm_events;
-	u8 cur_freq;
-	u8 last_freq;
-	u8 min_freq_softlimit;
-	u8 max_freq_softlimit;
-	u8 max_freq;
-	u8 min_freq;
-	u8 boost_freq;
-	u8 idle_freq;
-	u8 efficient_freq;
-	u8 rp1_freq;
-	u8 rp0_freq;
-	u16 gpll_ref_freq;
-	int last_adj;
-	struct {
-		struct mutex mutex;
-		enum {
-			LOW_POWER = 0,
-			BETWEEN = 1,
-			HIGH_POWER = 2,
-		} mode;
-		unsigned int interactive;
-		u8 up_threshold;
-		u8 down_threshold;
-	} power;
-	atomic_t num_waiters;
-	atomic_t boosts;
-	struct intel_rps_ei ei;
-	struct intel_ips ips;
-};
-
-struct intel_engine_cs;
-
-struct intel_gt {
-	struct drm_i915_private *i915;
-	struct intel_uncore *uncore;
-	struct i915_ggtt *ggtt;
-	struct intel_uc uc;
-	struct intel_gt_timelines timelines;
-	struct intel_gt_requests requests;
-	struct intel_wakeref wakeref;
-	atomic_t user_wakeref;
-	struct list_head closed_vma;
-	spinlock_t closed_lock;
-	struct intel_reset reset;
-	intel_wakeref_t awake;
-	struct intel_llc llc;
-	struct intel_rc6 rc6;
-	struct intel_rps rps;
-	ktime_t last_init_time;
-	struct i915_vma *scratch;
-	spinlock_t irq_lock;
-	u32 gt_imr;
-	u32 pm_ier;
-	u32 pm_imr;
-	u32 pm_guc_events;
-	struct intel_engine_cs *engine[8];
-	struct intel_engine_cs *engine_class[20];
-};
-
-struct i915_gem_contexts {
-	spinlock_t lock;
-	struct list_head list;
-	struct llist_head free_list;
-	struct work_struct free_work;
-};
-
-struct i915_pmu_sample {
-	u64 cur;
-};
-
-struct i915_pmu {
-	struct hlist_node node;
-	struct pmu base;
-	const char *name;
-	spinlock_t lock;
-	struct hrtimer timer;
-	u64 enable;
-	ktime_t timer_last;
-	unsigned int enable_count[20];
-	bool timer_enabled;
-	struct i915_pmu_sample sample[4];
-	ktime_t sleep_last;
-	void *i915_attr;
-	void *pmu_attr;
-};
-
-struct i915_gem_context;
-
-struct intel_overlay;
-
-struct intel_dpll_mgr;
-
-struct intel_fbdev;
-
-struct i915_audio_component;
-
-struct vlv_s0ix_state;
-
-struct drm_i915_private {
-	struct drm_device drm;
-	const struct intel_device_info __info;
-	struct intel_runtime_info __runtime;
-	struct intel_driver_caps caps;
-	struct resource dsm;
-	struct resource dsm_reserved;
-	resource_size_t stolen_usable_size;
-	struct intel_uncore uncore;
-	struct intel_uncore_mmio_debug mmio_debug;
-	struct i915_virtual_gpu vgpu;
-	struct intel_gvt *gvt;
-	struct intel_wopcm wopcm;
-	struct intel_csr csr;
-	struct intel_gmbus gmbus[15];
-	struct mutex gmbus_mutex;
-	u32 gpio_mmio_base;
-	u32 hsw_psr_mmio_adjust;
-	u32 mipi_mmio_base;
-	u32 pps_mmio_base;
-	wait_queue_head_t gmbus_wait_queue;
-	struct pci_dev *bridge_dev;
-	struct i915_gem_context *kernel_context;
-	struct intel_engine_cs *engine[8];
-	struct rb_root uabi_engines;
-	struct resource mch_res;
-	spinlock_t irq_lock;
-	bool display_irqs_enabled;
-	struct pm_qos_request pm_qos;
-	struct mutex sb_lock;
-	struct pm_qos_request sb_qos;
-	union {
-		u32 irq_mask;
-		u32 de_irq_mask[4];
-	};
-	u32 pipestat_irq_mask[4];
-	struct i915_hotplug hotplug;
-	struct intel_fbc fbc;
-	struct i915_drrs drrs;
-	struct intel_opregion opregion;
-	struct intel_vbt_data vbt;
-	bool preserve_bios_swizzle;
-	struct intel_overlay *overlay;
-	struct mutex backlight_lock;
-	struct mutex pps_mutex;
-	unsigned int fsb_freq;
-	unsigned int mem_freq;
-	unsigned int is_ddr3;
-	unsigned int skl_preferred_vco_freq;
-	unsigned int max_cdclk_freq;
-	unsigned int max_dotclk_freq;
-	unsigned int rawclk_freq;
-	unsigned int hpll_freq;
-	unsigned int fdi_pll_freq;
-	unsigned int czclk_freq;
-	struct {
-		struct intel_cdclk_state logical;
-		struct intel_cdclk_state actual;
-		struct intel_cdclk_state hw;
-		const struct intel_cdclk_vals *table;
-		int force_min_cdclk;
-	} cdclk;
-	struct workqueue_struct *wq;
-	struct workqueue_struct *modeset_wq;
-	struct workqueue_struct *flip_wq;
-	struct drm_i915_display_funcs display;
-	enum intel_pch pch_type;
-	short unsigned int pch_id;
-	long unsigned int quirks;
-	struct drm_atomic_state *modeset_restore_state;
-	struct drm_modeset_acquire_ctx reset_ctx;
-	struct i915_ggtt ggtt;
-	struct i915_gem_mm mm;
-	struct hlist_head mm_structs[128];
-	struct mutex mm_lock;
-	struct intel_crtc *plane_to_crtc_mapping[4];
-	struct intel_crtc *pipe_to_crtc_mapping[4];
-	struct intel_pipe_crc pipe_crc[4];
-	int num_shared_dpll;
-	struct intel_shared_dpll shared_dplls[9];
-	const struct intel_dpll_mgr *dpll_mgr;
-	struct mutex dpll_lock;
-	u8 active_pipes;
-	int min_cdclk[4];
-	u8 min_voltage_level[4];
-	int dpio_phy_iosf_port[2];
-	struct i915_wa_list gt_wa_list;
-	struct i915_frontbuffer_tracking fb_tracking;
-	struct intel_atomic_helper atomic_helper;
-	u16 orig_clock;
-	bool mchbar_need_disable;
-	struct intel_l3_parity l3_parity;
-	u32 edram_size_mb;
-	struct i915_power_domains power_domains;
-	struct i915_psr psr;
-	struct i915_gpu_error gpu_error;
-	struct drm_i915_gem_object *vlv_pctx;
-	struct intel_fbdev *fbdev;
-	struct work_struct fbdev_suspend_work;
-	struct drm_property *broadcast_rgb_property;
-	struct drm_property *force_audio_property;
-	struct i915_audio_component *audio_component;
-	bool audio_component_registered;
-	struct mutex av_mutex;
-	int audio_power_refcount;
-	u32 audio_freq_cntrl;
-	u32 fdi_rx_config;
-	u32 chv_phy_control;
-	u32 chv_dpll_md[4];
-	u32 bxt_phy_grc;
-	u32 suspend_count;
-	bool power_domains_suspended;
-	struct i915_suspend_saved_registers regfile;
-	struct vlv_s0ix_state *vlv_s0ix_state;
-	enum {
-		I915_SAGV_UNKNOWN = 0,
-		I915_SAGV_DISABLED = 1,
-		I915_SAGV_ENABLED = 2,
-		I915_SAGV_NOT_CONTROLLED = 3,
-	} sagv_status;
-	u32 sagv_block_time_us;
-	struct {
-		u16 pri_latency[5];
-		u16 spr_latency[5];
-		u16 cur_latency[5];
-		u16 skl_latency[8];
-		union {
-			struct ilk_wm_values hw;
-			struct skl_ddb_values skl_hw;
-			struct vlv_wm_values vlv;
-			struct g4x_wm_values g4x;
-		};
-		u8 max_level;
-		struct mutex wm_mutex;
-		bool distrust_bios_wm;
-	} wm;
-	struct dram_info dram_info;
-	struct intel_bw_info max_bw[6];
-	struct drm_private_obj bw_obj;
-	struct intel_runtime_pm runtime_pm;
-	struct i915_perf perf;
-	struct intel_gt gt;
-	struct {
-		struct notifier_block pm_notifier;
-		struct i915_gem_contexts contexts;
-	} gem;
-	u8 pch_ssc_use;
-	u8 vblank_enabled;
-	bool chv_phy_assert[2];
-	bool ipc_enabled;
-	struct intel_encoder *av_enc_map[4];
-	struct {
-		struct platform_device *platdev;
-		int irq;
-	} lpe_audio;
-	struct i915_pmu pmu;
-	struct i915_hdcp_comp_master *hdcp_master;
-	bool hdcp_comp_added;
-	struct mutex hdcp_comp_mutex;
-};
-
-struct i915_power_well_desc;
-
-struct i915_power_well {
-	const struct i915_power_well_desc *desc;
-	int count;
-	bool hw_enabled;
-};
-
-struct i915_power_well_regs {
-	i915_reg_t bios;
-	i915_reg_t driver;
-	i915_reg_t kvmr;
-	i915_reg_t debug;
-};
-
-struct i915_power_well_desc {
-	const char *name;
-	bool always_on;
-	u64 domains;
-	enum i915_power_well_id id;
-	union {
-		struct {
-			u8 idx;
-		} vlv;
-		struct {
-			enum dpio_phy phy;
-		} bxt;
-		struct {
-			const struct i915_power_well_regs *regs;
-			u8 idx;
-			u8 irq_pipe_mask;
-			bool has_vga: 1;
-			bool has_fuses: 1;
-			bool is_tc_tbt: 1;
-		} hsw;
-	};
-	const struct i915_power_well_ops *ops;
-};
-
-enum intel_dpll_id {
-	DPLL_ID_PRIVATE = 4294967295,
-	DPLL_ID_PCH_PLL_A = 0,
-	DPLL_ID_PCH_PLL_B = 1,
-	DPLL_ID_WRPLL1 = 0,
-	DPLL_ID_WRPLL2 = 1,
-	DPLL_ID_SPLL = 2,
-	DPLL_ID_LCPLL_810 = 3,
-	DPLL_ID_LCPLL_1350 = 4,
-	DPLL_ID_LCPLL_2700 = 5,
-	DPLL_ID_SKL_DPLL0 = 0,
-	DPLL_ID_SKL_DPLL1 = 1,
-	DPLL_ID_SKL_DPLL2 = 2,
-	DPLL_ID_SKL_DPLL3 = 3,
-	DPLL_ID_ICL_DPLL0 = 0,
-	DPLL_ID_ICL_DPLL1 = 1,
-	DPLL_ID_EHL_DPLL4 = 2,
-	DPLL_ID_ICL_TBTPLL = 2,
-	DPLL_ID_ICL_MGPLL1 = 3,
-	DPLL_ID_ICL_MGPLL2 = 4,
-	DPLL_ID_ICL_MGPLL3 = 5,
-	DPLL_ID_ICL_MGPLL4 = 6,
-	DPLL_ID_TGL_MGPLL5 = 7,
-	DPLL_ID_TGL_MGPLL6 = 8,
-};
-
-enum icl_port_dpll_id {
-	ICL_PORT_DPLL_DEFAULT = 0,
-	ICL_PORT_DPLL_MG_PHY = 1,
-	ICL_PORT_DPLL_COUNT = 2,
-};
-
-struct intel_shared_dpll_funcs {
-	void (*prepare)(struct drm_i915_private *, struct intel_shared_dpll *);
-	void (*enable)(struct drm_i915_private *, struct intel_shared_dpll *);
-	void (*disable)(struct drm_i915_private *, struct intel_shared_dpll *);
-	bool (*get_hw_state)(struct drm_i915_private *, struct intel_shared_dpll *, struct intel_dpll_hw_state *);
-};
-
-struct dpll_info {
-	const char *name;
-	const struct intel_shared_dpll_funcs *funcs;
-	enum intel_dpll_id id;
-	u32 flags;
-};
-
-enum dsb_id {
-	INVALID_DSB = 4294967295,
-	DSB1 = 0,
-	DSB2 = 1,
-	DSB3 = 2,
-	MAX_DSB_PER_PIPE = 3,
-};
-
-struct intel_dsb {
-	atomic_t refcount;
-	enum dsb_id id;
-	u32 *cmd_buf;
-	struct i915_vma *vma;
-	int free_pos;
-	u32 ins_start_offset;
-};
-
-struct i915_page_sizes {
-	unsigned int phys;
-	unsigned int sg;
-	unsigned int gtt;
-};
-
-struct i915_active_fence {
-	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-};
-
-struct active_node;
-
-struct i915_active {
-	atomic_t count;
-	struct mutex mutex;
-	spinlock_t tree_lock;
-	struct active_node *cache;
-	struct rb_root tree;
-	struct i915_active_fence excl;
-	long unsigned int flags;
-	int (*active)(struct i915_active *);
-	void (*retire)(struct i915_active *);
-	struct work_struct work;
-	struct llist_head preallocated_barriers;
-};
-
-enum i915_ggtt_view_type {
-	I915_GGTT_VIEW_NORMAL = 0,
-	I915_GGTT_VIEW_ROTATED = 32,
-	I915_GGTT_VIEW_PARTIAL = 12,
-	I915_GGTT_VIEW_REMAPPED = 36,
-};
-
-struct intel_partial_info {
-	u64 offset;
-	unsigned int size;
-} __attribute__((packed));
-
-struct intel_remapped_plane_info {
-	unsigned int width;
-	unsigned int height;
-	unsigned int stride;
-	unsigned int offset;
-};
-
-struct intel_rotation_info {
-	struct intel_remapped_plane_info plane[2];
-};
-
-struct intel_remapped_info {
-	struct intel_remapped_plane_info plane[2];
-	unsigned int unused_mbz;
-};
-
-struct i915_ggtt_view {
-	enum i915_ggtt_view_type type;
-	union {
-		struct intel_partial_info partial;
-		struct intel_rotation_info rotated;
-		struct intel_remapped_info remapped;
-	};
-} __attribute__((packed));
-
-struct i915_vma {
-	struct drm_mm_node node;
-	struct drm_i915_gem_object *obj;
-	struct i915_address_space *vm;
-	const struct i915_vma_ops *ops;
-	struct i915_fence_reg *fence;
-	struct dma_resv *resv;
-	struct sg_table *pages;
-	void *iomap;
-	void *private;
-	u64 size;
-	u64 display_alignment;
-	struct i915_page_sizes page_sizes;
-	u32 fence_size;
-	u32 fence_alignment;
-	atomic_t open_count;
-	atomic_t flags;
-	struct i915_active active;
-	atomic_t pages_count;
-	struct mutex pages_mutex;
-	struct i915_ggtt_view ggtt_view;
-	struct list_head vm_link;
-	struct list_head obj_link;
-	struct rb_node obj_node;
-	struct hlist_node obj_hash;
-	struct list_head exec_link;
-	struct list_head reloc_link;
-	struct list_head evict_link;
-	struct list_head closed_link;
-	unsigned int *exec_flags;
-	struct hlist_node exec_node;
-	u32 exec_handle;
-};
-
-enum {
-	__I915_SAMPLE_FREQ_ACT = 0,
-	__I915_SAMPLE_FREQ_REQ = 1,
-	__I915_SAMPLE_RC6 = 2,
-	__I915_SAMPLE_RC6_LAST_REPORTED = 3,
-	__I915_NUM_PMU_SAMPLERS = 4,
-};
-
-struct i915_priolist {
-	struct list_head requests[4];
-	struct rb_node node;
-	long unsigned int used;
-	int priority;
-};
-
-struct intel_engine_pool {
-	spinlock_t lock;
-	struct list_head cache_list[4];
-};
-
-struct i915_gem_object_page_iter {
-	struct scatterlist *sg_pos;
-	unsigned int sg_idx;
-	struct xarray radix;
-	struct mutex lock;
-};
-
-struct i915_mm_struct;
-
-struct i915_mmu_object;
-
-struct i915_gem_userptr {
-	uintptr_t ptr;
-	struct i915_mm_struct *mm;
-	struct i915_mmu_object *mmu_object;
-	struct work_struct *work;
-};
-
-struct drm_i915_gem_object_ops;
-
-struct intel_frontbuffer;
-
-struct drm_i915_gem_object {
-	struct drm_gem_object base;
-	const struct drm_i915_gem_object_ops *ops;
-	struct {
-		spinlock_t lock;
-		struct list_head list;
-		struct rb_root tree;
-	} vma;
-	struct list_head lut_list;
-	struct drm_mm_node *stolen;
-	union {
-		struct callback_head rcu;
-		struct llist_node freed;
-	};
-	unsigned int userfault_count;
-	struct list_head userfault_link;
-	long unsigned int flags;
-	unsigned int cache_level: 3;
-	unsigned int cache_coherent: 2;
-	unsigned int cache_dirty: 1;
-	u16 read_domains;
-	u16 write_domain;
-	struct intel_frontbuffer *frontbuffer;
-	unsigned int tiling_and_stride;
-	atomic_t bind_count;
-	struct {
-		struct mutex lock;
-		atomic_t pages_pin_count;
-		atomic_t shrink_pin;
-		struct intel_memory_region *region;
-		struct list_head blocks;
-		struct list_head region_link;
-		struct sg_table *pages;
-		void *mapping;
-		struct i915_page_sizes page_sizes;
-		struct i915_gem_object_page_iter get_page;
-		struct list_head link;
-		unsigned int madv: 2;
-		bool dirty: 1;
-		bool quirked: 1;
-	} mm;
-	long unsigned int *bit_17;
-	union {
-		struct i915_gem_userptr userptr;
-		long unsigned int scratch;
-		void *gvt_info;
-	};
-	struct drm_dma_handle *phys_handle;
-};
-
-struct intel_sseu {
-	u8 slice_mask;
-	u8 subslice_mask;
-	u8 min_eus_per_subslice;
-	u8 max_eus_per_subslice;
-};
-
-struct i915_syncmap;
-
-struct intel_timeline_cacheline;
-
-struct intel_timeline {
-	u64 fence_context;
-	u32 seqno;
-	struct mutex mutex;
-	atomic_t pin_count;
-	atomic_t active_count;
-	const u32 *hwsp_seqno;
-	struct i915_vma *hwsp_ggtt;
-	u32 hwsp_offset;
-	struct intel_timeline_cacheline *hwsp_cacheline;
-	bool has_initial_breadcrumb;
-	struct list_head requests;
-	struct i915_active_fence last_request;
-	struct intel_timeline *retire;
-	struct i915_syncmap *sync;
-	struct list_head link;
-	struct intel_gt *gt;
-	struct kref kref;
-	struct callback_head rcu;
-};
-
-struct i915_wa {
-	i915_reg_t reg;
-	u32 mask;
-	u32 val;
-	u32 read;
-};
-
-struct intel_hw_status_page {
-	struct i915_vma *vma;
-	u32 *addr;
-};
-
-struct intel_instdone {
-	u32 instdone;
-	u32 slice_common;
-	u32 sampler[24];
-	u32 row[24];
-};
-
-struct i915_wa_ctx_bb {
-	u32 offset;
-	u32 size;
-};
-
-struct i915_ctx_workarounds {
-	struct i915_wa_ctx_bb indirect_ctx;
-	struct i915_wa_ctx_bb per_ctx;
-	struct i915_vma *vma;
-};
-
-enum intel_engine_id {
-	RCS0 = 0,
-	BCS0 = 1,
-	VCS0 = 2,
-	VCS1 = 3,
-	VCS2 = 4,
-	VCS3 = 5,
-	VECS0 = 6,
-	VECS1 = 7,
-	I915_NUM_ENGINES = 8,
-};
-
-struct i915_request;
-
-struct intel_engine_execlists {
-	struct tasklet_struct tasklet;
-	struct timer_list timer;
-	struct timer_list preempt;
-	struct i915_priolist default_priolist;
-	bool no_priolist;
-	u32 *submit_reg;
-	u32 *ctrl_reg;
-	struct i915_request * const *active;
-	struct i915_request *inflight[3];
-	struct i915_request *pending[3];
-	unsigned int port_mask;
-	int switch_priority_hint;
-	int queue_priority_hint;
-	struct rb_root_cached queue;
-	struct rb_root_cached virtual;
-	u32 *csb_write;
-	u32 *csb_status;
-	u8 csb_size;
-	u8 csb_head;
-};
-
-struct i915_sw_fence {
-	wait_queue_head_t wait;
-	long unsigned int flags;
-	atomic_t pending;
-	int error;
-};
-
-struct i915_sw_dma_fence_cb {
-	struct dma_fence_cb base;
-	struct i915_sw_fence *fence;
-};
-
-struct i915_sched_attr {
-	int priority;
-};
-
-struct i915_sched_node {
-	struct list_head signalers_list;
-	struct list_head waiters_list;
-	struct list_head link;
-	struct i915_sched_attr attr;
-	unsigned int flags;
-	intel_engine_mask_t semaphores;
-};
-
-struct i915_dependency {
-	struct i915_sched_node *signaler;
-	struct i915_sched_node *waiter;
-	struct list_head signal_link;
-	struct list_head wait_link;
-	struct list_head dfs_link;
-	long unsigned int flags;
-};
-
-struct intel_context;
-
-struct intel_ring;
-
-struct i915_capture_list;
-
-struct i915_request {
-	struct dma_fence fence;
-	spinlock_t lock;
-	struct drm_i915_private *i915;
-	struct i915_gem_context *gem_context;
-	struct intel_engine_cs *engine;
-	struct intel_context *hw_context;
-	struct intel_ring *ring;
-	struct intel_timeline *timeline;
-	struct list_head signal_link;
-	long unsigned int rcustate;
-	struct pin_cookie cookie;
-	struct i915_sw_fence submit;
-	union {
-		wait_queue_entry_t submitq;
-		struct i915_sw_dma_fence_cb dmaq;
-	};
-	struct list_head execute_cb;
-	struct i915_sw_fence semaphore;
-	struct i915_sched_node sched;
-	struct i915_dependency dep;
-	intel_engine_mask_t execution_mask;
-	const u32 *hwsp_seqno;
-	struct intel_timeline_cacheline *hwsp_cacheline;
-	u32 head;
-	u32 infix;
-	u32 postfix;
-	u32 tail;
-	u32 wa_tail;
-	u32 reserved_space;
-	struct i915_vma *batch;
-	struct i915_capture_list *capture_list;
-	long unsigned int emitted_jiffies;
-	long unsigned int flags;
-	struct list_head link;
-	struct drm_i915_file_private *file_priv;
-	struct list_head client_link;
-};
-
-struct intel_ring {
-	struct kref ref;
-	struct i915_vma *vma;
-	void *vaddr;
-	atomic_t pin_count;
-	u32 head;
-	u32 tail;
-	u32 emit;
-	u32 space;
-	u32 size;
-	u32 effective_size;
-};
-
-struct intel_breadcrumbs {
-	spinlock_t irq_lock;
-	struct list_head signalers;
-	struct irq_work irq_work;
-	unsigned int irq_enabled;
-	bool irq_armed;
-};
-
-struct intel_engine_pmu {
-	u32 enable;
-	unsigned int enable_count[3];
-	struct i915_pmu_sample sample[3];
-};
-
-struct intel_context_ops;
-
-struct drm_i915_reg_table;
-
-struct intel_engine_cs {
-	struct drm_i915_private *i915;
-	struct intel_gt *gt;
-	struct intel_uncore *uncore;
-	char name[8];
-	enum intel_engine_id id;
-	enum intel_engine_id legacy_idx;
-	unsigned int hw_id;
-	unsigned int guc_id;
-	intel_engine_mask_t mask;
-	u8 class;
-	u8 instance;
-	u16 uabi_class;
-	u16 uabi_instance;
-	u32 uabi_capabilities;
-	u32 context_size;
-	u32 mmio_base;
-	unsigned int context_tag;
-	struct rb_node uabi_node;
-	struct intel_sseu sseu;
-	struct {
-		spinlock_t lock;
-		struct list_head requests;
-	} active;
-	struct llist_head barrier_tasks;
-	struct intel_context *kernel_context;
-	intel_engine_mask_t saturated;
-	struct {
-		struct delayed_work work;
-		struct i915_request *systole;
-	} heartbeat;
-	long unsigned int serial;
-	long unsigned int wakeref_serial;
-	struct intel_wakeref wakeref;
-	struct drm_i915_gem_object *default_state;
-	void *pinned_default_state;
-	struct {
-		struct intel_ring *ring;
-		struct intel_timeline *timeline;
-	} legacy;
-	struct intel_breadcrumbs breadcrumbs;
-	struct intel_engine_pmu pmu;
-	struct intel_engine_pool pool;
-	struct intel_hw_status_page status_page;
-	struct i915_ctx_workarounds wa_ctx;
-	struct i915_wa_list ctx_wa_list;
-	struct i915_wa_list wa_list;
-	struct i915_wa_list whitelist;
-	u32 irq_keep_mask;
-	u32 irq_enable_mask;
-	void (*irq_enable)(struct intel_engine_cs *);
-	void (*irq_disable)(struct intel_engine_cs *);
-	int (*resume)(struct intel_engine_cs *);
-	struct {
-		void (*prepare)(struct intel_engine_cs *);
-		void (*reset)(struct intel_engine_cs *, bool);
-		void (*finish)(struct intel_engine_cs *);
-	} reset;
-	void (*park)(struct intel_engine_cs *);
-	void (*unpark)(struct intel_engine_cs *);
-	void (*set_default_submission)(struct intel_engine_cs *);
-	const struct intel_context_ops *cops;
-	int (*request_alloc)(struct i915_request *);
-	int (*emit_flush)(struct i915_request *, u32);
-	int (*emit_bb_start)(struct i915_request *, u64, u32, unsigned int);
-	int (*emit_init_breadcrumb)(struct i915_request *);
-	u32 * (*emit_fini_breadcrumb)(struct i915_request *, u32 *);
-	unsigned int emit_fini_breadcrumb_dw;
-	void (*submit_request)(struct i915_request *);
-	void (*bond_execute)(struct i915_request *, struct dma_fence *);
-	void (*schedule)(struct i915_request *, const struct i915_sched_attr *);
-	void (*cancel_requests)(struct intel_engine_cs *);
-	void (*destroy)(struct intel_engine_cs *);
-	struct intel_engine_execlists execlists;
-	struct intel_timeline *retire;
-	struct work_struct retire_work;
-	struct atomic_notifier_head context_status_notifier;
-	unsigned int flags;
-	struct hlist_head cmd_hash[512];
-	const struct drm_i915_reg_table *reg_tables;
-	int reg_table_count;
-	u32 (*get_cmd_length_mask)(u32);
-	struct {
-		seqlock_t lock;
-		unsigned int enabled;
-		unsigned int active;
-		ktime_t enabled_at;
-		ktime_t start;
-		ktime_t total;
-	} stats;
-	struct {
-		long unsigned int heartbeat_interval_ms;
-		long unsigned int preempt_timeout_ms;
-		long unsigned int stop_timeout_ms;
-		long unsigned int timeslice_duration_ms;
-	} props;
-};
-
-struct intel_context {
-	struct kref ref;
-	struct intel_engine_cs *engine;
-	struct intel_engine_cs *inflight;
-	struct i915_address_space *vm;
-	struct i915_gem_context *gem_context;
-	struct list_head signal_link;
-	struct list_head signals;
-	struct i915_vma *state;
-	struct intel_ring *ring;
-	struct intel_timeline *timeline;
-	long unsigned int flags;
-	u32 *lrc_reg_state;
-	u64 lrc_desc;
-	u32 tag;
-	unsigned int active_count;
-	atomic_t pin_count;
-	struct mutex pin_mutex;
-	struct i915_active active;
-	const struct intel_context_ops *ops;
-	struct intel_sseu sseu;
-};
-
-struct intel_context_ops {
-	int (*alloc)(struct intel_context *);
-	int (*pin)(struct intel_context *);
-	void (*unpin)(struct intel_context *);
-	void (*enter)(struct intel_context *);
-	void (*exit)(struct intel_context *);
-	void (*reset)(struct intel_context *);
-	void (*destroy)(struct kref *);
-};
-
-struct drm_i915_reg_descriptor;
-
-struct drm_i915_reg_table {
-	const struct drm_i915_reg_descriptor *regs;
-	int num_regs;
-};
-
-struct i915_gem_engines;
-
-struct i915_gem_context {
-	struct drm_i915_private *i915;
-	struct drm_i915_file_private *file_priv;
-	struct i915_gem_engines *engines;
-	struct mutex engines_mutex;
-	struct intel_timeline *timeline;
-	struct i915_address_space *vm;
-	struct pid *pid;
-	const char *name;
-	struct list_head link;
-	struct llist_node free_link;
-	struct kref ref;
-	struct callback_head rcu;
-	long unsigned int user_flags;
-	long unsigned int flags;
-	struct mutex mutex;
-	struct i915_sched_attr sched;
-	atomic_t guilty_count;
-	atomic_t active_count;
-	long unsigned int hang_timestamp[2];
-	u8 remap_slice;
-	struct xarray handles_vma;
-	long unsigned int *jump_whitelist;
-	u32 jump_whitelist_cmds;
-};
-
-struct i915_capture_list {
-	struct i915_capture_list *next;
-	struct i915_vma *vma;
-};
-
-struct drm_i915_file_private {
-	struct drm_i915_private *dev_priv;
-	union {
-		struct drm_file *file;
-		struct callback_head rcu;
-	};
-	struct {
-		spinlock_t lock;
-		struct list_head request_list;
-	} mm;
-	struct idr context_idr;
-	struct mutex context_idr_lock;
-	struct idr vm_idr;
-	struct mutex vm_idr_lock;
-	unsigned int bsd_engine;
-	atomic_t ban_score;
-	long unsigned int hang_timestamp;
-};
-
-struct drm_i915_gem_object_ops {
-	unsigned int flags;
-	int (*get_pages)(struct drm_i915_gem_object *);
-	void (*put_pages)(struct drm_i915_gem_object *, struct sg_table *);
-	void (*truncate)(struct drm_i915_gem_object *);
-	void (*writeback)(struct drm_i915_gem_object *);
-	int (*pwrite)(struct drm_i915_gem_object *, const struct drm_i915_gem_pwrite *);
-	int (*dmabuf_export)(struct drm_i915_gem_object *);
-	void (*release)(struct drm_i915_gem_object *);
-};
-
-struct i915_buddy_block;
-
-struct i915_buddy_mm {
-	struct list_head *free_list;
-	struct i915_buddy_block **roots;
-	unsigned int n_roots;
-	unsigned int max_order;
-	u64 chunk_size;
-	u64 size;
-};
-
-struct intel_memory_region_ops;
-
-struct intel_memory_region {
-	struct drm_i915_private *i915;
-	const struct intel_memory_region_ops *ops;
-	struct io_mapping iomap;
-	struct resource region;
-	struct drm_mm_node fake_mappable;
-	struct i915_buddy_mm mm;
-	struct mutex mm_lock;
-	struct kref kref;
-	resource_size_t io_start;
-	resource_size_t min_page_size;
-	unsigned int type;
-	unsigned int instance;
-	unsigned int id;
-	dma_addr_t remap_addr;
-	struct {
-		struct mutex lock;
-		struct list_head list;
-		struct list_head purgeable;
-	} objects;
-};
-
-struct intel_frontbuffer {
-	struct kref ref;
-	atomic_t bits;
-	struct i915_active write;
-	struct drm_i915_gem_object *obj;
-	struct callback_head rcu;
-};
-
-struct i915_gem_engines {
-	struct callback_head rcu;
-	unsigned int num_engines;
-	struct intel_context *engines[0];
-};
-
-enum forcewake_domain_id {
-	FW_DOMAIN_ID_RENDER = 0,
-	FW_DOMAIN_ID_BLITTER = 1,
-	FW_DOMAIN_ID_MEDIA = 2,
-	FW_DOMAIN_ID_MEDIA_VDBOX0 = 3,
-	FW_DOMAIN_ID_MEDIA_VDBOX1 = 4,
-	FW_DOMAIN_ID_MEDIA_VDBOX2 = 5,
-	FW_DOMAIN_ID_MEDIA_VDBOX3 = 6,
-	FW_DOMAIN_ID_MEDIA_VEBOX0 = 7,
-	FW_DOMAIN_ID_MEDIA_VEBOX1 = 8,
-	FW_DOMAIN_ID_COUNT = 9,
-};
-
-struct intel_forcewake_range {
-	u32 start;
-	u32 end;
-	enum forcewake_domains domains;
-};
-
-struct intel_uncore_forcewake_domain {
-	struct intel_uncore *uncore;
-	enum forcewake_domain_id id;
-	enum forcewake_domains mask;
-	unsigned int wake_count;
-	bool active;
-	struct hrtimer timer;
-	u32 *reg_set;
-	u32 *reg_ack;
-};
-
-struct guc_ct_buffer_desc {
-	u32 addr;
-	u64 host_private;
-	u32 size;
-	u32 head;
-	u32 tail;
-	u32 is_in_error;
-	u32 fence;
-	u32 status;
-	u32 owner;
-	u32 owner_sub_id;
-	u32 reserved[5];
-} __attribute__((packed));
-
-enum guc_log_buffer_type {
-	GUC_ISR_LOG_BUFFER = 0,
-	GUC_DPC_LOG_BUFFER = 1,
-	GUC_CRASH_DUMP_LOG_BUFFER = 2,
-	GUC_MAX_LOG_BUFFER = 3,
-};
-
-struct i915_page_table {
-	struct i915_page_dma base;
-	atomic_t used;
-};
-
-struct i915_page_directory {
-	struct i915_page_table pt;
-	spinlock_t lock;
-	void *entry[512];
-};
-
-struct i915_ppgtt {
-	struct i915_address_space vm;
-	struct i915_page_directory *pd;
-};
-
-struct i915_buddy_block {
-	u64 header;
-	struct i915_buddy_block *left;
-	struct i915_buddy_block *right;
-	struct i915_buddy_block *parent;
-	void *private;
-	struct list_head link;
-	struct list_head tmp_link;
-};
-
-enum intel_region_id {
-	INTEL_REGION_SMEM = 0,
-	INTEL_REGION_LMEM = 1,
-	INTEL_REGION_STOLEN = 2,
-	INTEL_REGION_UNKNOWN = 3,
-};
-
-struct intel_memory_region_ops {
-	unsigned int flags;
-	int (*init)(struct intel_memory_region *);
-	void (*release)(struct intel_memory_region *);
-	struct drm_i915_gem_object * (*create_object)(struct intel_memory_region *, resource_size_t, unsigned int);
-};
-
-struct drm_i915_error_object;
-
-struct i915_error_uc {
-	struct intel_uc_fw guc_fw;
-	struct intel_uc_fw huc_fw;
-	struct drm_i915_error_object *guc_log;
-};
-
-struct drm_i915_error_object {
-	u64 gtt_offset;
-	u64 gtt_size;
-	u32 gtt_page_sizes;
-	int num_pages;
-	int page_count;
-	int unused;
-	u32 *pages[0];
-};
-
-struct drm_i915_error_context {
-	char comm[16];
-	pid_t pid;
-	int active;
-	int guilty;
-	struct i915_sched_attr sched_attr;
-};
-
-struct drm_i915_error_request {
-	long unsigned int flags;
-	long int jiffies;
-	pid_t pid;
-	u32 context;
-	u32 seqno;
-	u32 start;
-	u32 head;
-	u32 tail;
-	struct i915_sched_attr sched_attr;
-};
-
-struct drm_i915_error_engine {
-	const struct intel_engine_cs *engine;
-	bool idle;
-	int num_requests;
-	u32 reset_count;
-	u32 rq_head;
-	u32 rq_post;
-	u32 rq_tail;
-	u32 cpu_ring_head;
-	u32 cpu_ring_tail;
-	u32 start;
-	u32 tail;
-	u32 head;
-	u32 ctl;
-	u32 mode;
-	u32 hws;
-	u32 ipeir;
-	u32 ipehr;
-	u32 bbstate;
-	u32 instpm;
-	u32 instps;
-	u64 bbaddr;
-	u64 acthd;
-	u32 fault_reg;
-	u64 faddr;
-	u32 rc_psmi;
-	struct intel_instdone instdone;
-	struct drm_i915_error_context context;
-	struct drm_i915_error_object *ringbuffer;
-	struct drm_i915_error_object *batchbuffer;
-	struct drm_i915_error_object *wa_batchbuffer;
-	struct drm_i915_error_object *ctx;
-	struct drm_i915_error_object *hws_page;
-	struct drm_i915_error_object **user_bo;
-	long int user_bo_count;
-	struct drm_i915_error_object *wa_ctx;
-	struct drm_i915_error_object *default_state;
-	struct drm_i915_error_request *requests;
-	struct drm_i915_error_request execlist[2];
-	unsigned int num_ports;
-	struct {
-		u32 gfx_mode;
-		union {
-			u64 pdp[4];
-			u32 pp_dir_base;
-		};
-	} vm_info;
-	struct drm_i915_error_engine *next;
-};
-
-struct intel_overlay_error_state;
-
-struct intel_display_error_state;
-
-struct i915_gpu_state {
-	struct kref ref;
-	ktime_t time;
-	ktime_t boottime;
-	ktime_t uptime;
-	long unsigned int capture;
-	struct drm_i915_private *i915;
-	char error_msg[128];
-	bool simulated;
-	bool awake;
-	bool wakelock;
-	bool suspended;
-	int iommu;
-	u32 reset_count;
-	u32 suspend_count;
-	struct intel_device_info device_info;
-	struct intel_runtime_info runtime_info;
-	struct intel_driver_caps driver_caps;
-	struct i915_params params;
-	struct i915_error_uc uc;
-	u32 eir;
-	u32 pgtbl_er;
-	u32 ier;
-	u32 gtier[6];
-	u32 ngtier;
-	u32 ccid;
-	u32 derrmr;
-	u32 forcewake;
-	u32 error;
-	u32 err_int;
-	u32 fault_data0;
-	u32 fault_data1;
-	u32 done_reg;
-	u32 gac_eco;
-	u32 gam_ecochk;
-	u32 gab_ctl;
-	u32 gfx_mode;
-	u32 gtt_cache;
-	u32 aux_err;
-	u32 sfc_done[4];
-	u32 gam_done;
-	u32 nfence;
-	u64 fence[32];
-	struct intel_overlay_error_state *overlay;
-	struct intel_display_error_state *display;
-	struct drm_i915_error_engine *engine;
-	struct scatterlist *sgl;
-	struct scatterlist *fit;
-};
-
-struct i915_oa_format {
-	u32 format;
-	int size;
-};
-
-struct i915_oa_reg {
-	i915_reg_t addr;
-	u32 value;
-};
-
-struct i915_perf_stream_ops {
-	void (*enable)(struct i915_perf_stream *);
-	void (*disable)(struct i915_perf_stream *);
-	void (*poll_wait)(struct i915_perf_stream *, struct file *, poll_table *);
-	int (*wait_unlocked)(struct i915_perf_stream *);
-	int (*read)(struct i915_perf_stream *, char *, size_t, size_t *);
-	void (*destroy)(struct i915_perf_stream *);
-};
-
-struct i915_perf_stream {
-	struct i915_perf *perf;
-	struct intel_uncore *uncore;
-	struct intel_engine_cs *engine;
-	u32 sample_flags;
-	int sample_size;
-	struct i915_gem_context *ctx;
-	bool enabled;
-	bool hold_preemption;
-	const struct i915_perf_stream_ops *ops;
-	struct i915_oa_config *oa_config;
-	struct llist_head oa_config_bos;
-	struct intel_context *pinned_ctx;
-	u32 specific_ctx_id;
-	u32 specific_ctx_id_mask;
-	struct hrtimer poll_check_timer;
-	wait_queue_head_t poll_wq;
-	bool pollin;
-	bool periodic;
-	int period_exponent;
-	struct {
-		struct i915_vma *vma;
-		u8 *vaddr;
-		u32 last_ctx_id;
-		int format;
-		int format_size;
-		int size_exponent;
-		spinlock_t ptr_lock;
-		struct {
-			u32 offset;
-		} tails[2];
-		unsigned int aged_tail_idx;
-		u64 aging_timestamp;
-		u32 head;
-	} oa_buffer;
-	struct i915_vma *noa_wait;
-};
-
-enum hpd_pin {
-	HPD_NONE = 0,
-	HPD_TV = 0,
-	HPD_CRT = 1,
-	HPD_SDVO_B = 2,
-	HPD_SDVO_C = 3,
-	HPD_PORT_A = 4,
-	HPD_PORT_B = 5,
-	HPD_PORT_C = 6,
-	HPD_PORT_D = 7,
-	HPD_PORT_E = 8,
-	HPD_PORT_F = 9,
-	HPD_PORT_G = 10,
-	HPD_PORT_H = 11,
-	HPD_PORT_I = 12,
-	HPD_NUM_PINS = 13,
-};
-
-struct dpll {
-	int n;
-	int m1;
-	int m2;
-	int p1;
-	int p2;
-	int dot;
-	int vco;
-	int m;
-	int p;
-};
-
-struct icl_port_dpll {
-	struct intel_shared_dpll *pll;
-	struct intel_dpll_hw_state hw_state;
-};
-
-struct intel_scaler {
-	int in_use;
-	u32 mode;
-};
-
-struct intel_crtc_scaler_state {
-	struct intel_scaler scalers[2];
-	unsigned int scaler_users;
-	int scaler_id;
-};
-
-struct intel_wm_level {
-	bool enable;
-	u32 pri_val;
-	u32 spr_val;
-	u32 cur_val;
-	u32 fbc_val;
-};
-
-struct intel_pipe_wm {
-	struct intel_wm_level wm[5];
-	u32 linetime;
-	bool fbc_wm_enabled;
-	bool pipe_enabled;
-	bool sprites_enabled;
-	bool sprites_scaled;
-};
-
-struct skl_wm_level {
-	u16 min_ddb_alloc;
-	u16 plane_res_b;
-	u8 plane_res_l;
-	bool plane_en;
-	bool ignore_lines;
-};
-
-struct skl_plane_wm {
-	struct skl_wm_level wm[8];
-	struct skl_wm_level uv_wm[8];
-	struct skl_wm_level trans_wm;
-	bool is_planar;
-};
-
-struct skl_pipe_wm {
-	struct skl_plane_wm planes[8];
-	u32 linetime;
-};
-
-struct skl_ddb_entry {
-	u16 start;
-	u16 end;
-};
-
-struct vlv_wm_state {
-	struct g4x_pipe_wm wm[3];
-	struct g4x_sr_wm sr[3];
-	u8 num_levels;
-	bool cxsr;
-};
-
-struct vlv_fifo_state {
-	u16 plane[8];
-};
-
-struct g4x_wm_state {
-	struct g4x_pipe_wm wm;
-	struct g4x_sr_wm sr;
-	struct g4x_sr_wm hpll;
-	bool cxsr;
-	bool hpll_en;
-	bool fbc_en;
-};
-
-struct intel_crtc_wm_state {
-	union {
-		struct {
-			struct intel_pipe_wm intermediate;
-			struct intel_pipe_wm optimal;
-		} ilk;
-		struct {
-			struct skl_pipe_wm optimal;
-			struct skl_ddb_entry ddb;
-			struct skl_ddb_entry plane_ddb_y[8];
-			struct skl_ddb_entry plane_ddb_uv[8];
-		} skl;
-		struct {
-			struct g4x_pipe_wm raw[3];
-			struct vlv_wm_state intermediate;
-			struct vlv_wm_state optimal;
-			struct vlv_fifo_state fifo_state;
-		} vlv;
-		struct {
-			struct g4x_pipe_wm raw[3];
-			struct g4x_wm_state intermediate;
-			struct g4x_wm_state optimal;
-		} g4x;
-	};
-	bool need_postvbl_update;
-};
-
-enum intel_output_format {
-	INTEL_OUTPUT_FORMAT_INVALID = 0,
-	INTEL_OUTPUT_FORMAT_RGB = 1,
-	INTEL_OUTPUT_FORMAT_YCBCR420 = 2,
-	INTEL_OUTPUT_FORMAT_YCBCR444 = 3,
-};
-
-struct intel_crtc_state {
-	struct drm_crtc_state base;
-	long unsigned int quirks;
-	unsigned int fb_bits;
-	bool update_pipe;
-	bool disable_cxsr;
-	bool update_wm_pre;
-	bool update_wm_post;
-	bool fifo_changed;
-	bool preload_luts;
-	int pipe_src_w;
-	int pipe_src_h;
-	unsigned int pixel_rate;
-	bool has_pch_encoder;
-	bool has_infoframe;
-	enum transcoder cpu_transcoder;
-	bool limited_color_range;
-	unsigned int output_types;
-	bool has_hdmi_sink;
-	bool has_audio;
-	bool dither;
-	bool dither_force_disable;
-	bool clock_set;
-	bool sdvo_tv_clock;
-	bool bw_constrained;
-	struct dpll dpll;
-	struct intel_shared_dpll *shared_dpll;
-	struct intel_dpll_hw_state dpll_hw_state;
-	struct icl_port_dpll icl_port_dplls[2];
-	struct {
-		u32 ctrl;
-		u32 div;
-	} dsi_pll;
-	int pipe_bpp;
-	struct intel_link_m_n dp_m_n;
-	struct intel_link_m_n dp_m2_n2;
-	bool has_drrs;
-	bool has_psr;
-	bool has_psr2;
-	u32 dc3co_exitline;
-	int port_clock;
-	unsigned int pixel_multiplier;
-	u8 lane_count;
-	u8 lane_lat_optim_mask;
-	u8 min_voltage_level;
-	struct {
-		u32 control;
-		u32 pgm_ratios;
-		u32 lvds_border_bits;
-	} gmch_pfit;
-	struct {
-		u32 pos;
-		u32 size;
-		bool enabled;
-		bool force_thru;
-	} pch_pfit;
-	int fdi_lanes;
-	struct intel_link_m_n fdi_m_n;
-	bool ips_enabled;
-	bool crc_enabled;
-	bool enable_fbc;
-	bool double_wide;
-	int pbn;
-	struct intel_crtc_scaler_state scaler_state;
-	enum pipe hsw_workaround_pipe;
-	bool disable_lp_wm;
-	struct intel_crtc_wm_state wm;
-	int min_cdclk[8];
-	u32 data_rate[8];
-	u32 gamma_mode;
-	union {
-		u32 csc_mode;
-		u32 cgm_mode;
-	};
-	u8 active_planes;
-	u8 nv12_planes;
-	u8 c8_planes;
-	u8 update_planes;
-	struct {
-		u32 enable;
-		u32 gcp;
-		union hdmi_infoframe avi;
-		union hdmi_infoframe spd;
-		union hdmi_infoframe hdmi;
-		union hdmi_infoframe drm;
-	} infoframes;
-	bool hdmi_scrambling;
-	bool hdmi_high_tmds_clock_ratio;
-	enum intel_output_format output_format;
-	bool lspcon_downsampling;
-	bool gamma_enable;
-	bool csc_enable;
-	struct {
-		bool compression_enable;
-		bool dsc_split;
-		u16 compressed_bpp;
-		u8 slice_count;
-		struct drm_dsc_config config;
-	} dsc;
-	bool fec_enable;
-	enum transcoder master_transcoder;
-	u8 sync_mode_slaves_mask;
-};
-
-struct intel_atomic_state {
-	struct drm_atomic_state base;
-	intel_wakeref_t wakeref;
-	struct {
-		struct intel_cdclk_state logical;
-		struct intel_cdclk_state actual;
-		int force_min_cdclk;
-		bool force_min_cdclk_changed;
-		enum pipe pipe;
-	} cdclk;
-	bool dpll_set;
-	bool modeset;
-	u8 active_pipe_changes;
-	u8 active_pipes;
-	int min_cdclk[4];
-	u8 min_voltage_level[4];
-	struct intel_shared_dpll_state shared_dpll[9];
-	bool skip_intermediate_wm;
-	bool rps_interactive;
-	bool global_state_changed;
-	struct skl_ddb_values wm_results;
-	struct i915_sw_fence commit_ready;
-	struct llist_node freed;
-};
-
-struct intel_crtc {
-	struct drm_crtc base;
-	enum pipe pipe;
-	bool active;
-	u8 plane_ids_mask;
-	long long unsigned int enabled_power_domains;
-	struct intel_overlay *overlay;
-	struct intel_crtc_state *config;
-	bool cpu_fifo_underrun_disabled;
-	bool pch_fifo_underrun_disabled;
-	struct {
-		union {
-			struct intel_pipe_wm ilk;
-			struct vlv_wm_state vlv;
-			struct g4x_wm_state g4x;
-		} active;
-	} wm;
-	int scanline_offset;
-	struct {
-		unsigned int start_vbl_count;
-		ktime_t start_vbl_time;
-		int min_vbl;
-		int max_vbl;
-		int scanline_start;
-	} debug;
-	int num_scalers;
-	struct intel_dsb dsb;
-};
-
-struct intel_framebuffer;
-
-struct intel_initial_plane_config {
-	struct intel_framebuffer *fb;
-	unsigned int tiling;
-	int size;
-	u32 base;
-	u8 rotation;
-};
-
-enum intel_output_type {
-	INTEL_OUTPUT_UNUSED = 0,
-	INTEL_OUTPUT_ANALOG = 1,
-	INTEL_OUTPUT_DVO = 2,
-	INTEL_OUTPUT_SDVO = 3,
-	INTEL_OUTPUT_LVDS = 4,
-	INTEL_OUTPUT_TVOUT = 5,
-	INTEL_OUTPUT_HDMI = 6,
-	INTEL_OUTPUT_DP = 7,
-	INTEL_OUTPUT_EDP = 8,
-	INTEL_OUTPUT_DSI = 9,
-	INTEL_OUTPUT_DDI = 10,
-	INTEL_OUTPUT_DP_MST = 11,
-};
-
-enum intel_hotplug_state {
-	INTEL_HOTPLUG_UNCHANGED = 0,
-	INTEL_HOTPLUG_CHANGED = 1,
-	INTEL_HOTPLUG_RETRY = 2,
-};
-
-struct intel_connector;
-
-struct intel_encoder {
-	struct drm_encoder base;
-	enum intel_output_type type;
-	enum port port;
-	u16 cloneable;
-	u8 pipe_mask;
-	enum intel_hotplug_state (*hotplug)(struct intel_encoder *, struct intel_connector *, bool);
-	enum intel_output_type (*compute_output_type)(struct intel_encoder *, struct intel_crtc_state *, struct drm_connector_state *);
-	int (*compute_config)(struct intel_encoder *, struct intel_crtc_state *, struct drm_connector_state *);
-	void (*update_prepare)(struct intel_atomic_state *, struct intel_encoder *, struct intel_crtc *);
-	void (*pre_pll_enable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*pre_enable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*enable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*update_complete)(struct intel_atomic_state *, struct intel_encoder *, struct intel_crtc *);
-	void (*disable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*post_disable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*post_pll_disable)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	void (*update_pipe)(struct intel_encoder *, const struct intel_crtc_state *, const struct drm_connector_state *);
-	bool (*get_hw_state)(struct intel_encoder *, enum pipe *);
-	void (*get_config)(struct intel_encoder *, struct intel_crtc_state *);
-	void (*get_power_domains)(struct intel_encoder *, struct intel_crtc_state *);
-	void (*suspend)(struct intel_encoder *);
-	enum hpd_pin hpd_pin;
-	enum intel_display_power_domain power_domain;
-	const struct drm_connector *audio_connector;
-};
-
-struct intel_dp_compliance_data {
-	long unsigned int edid;
-	u8 video_pattern;
-	u16 hdisplay;
-	u16 vdisplay;
-	u8 bpc;
-};
-
-struct intel_dp_compliance {
-	long unsigned int test_type;
-	struct intel_dp_compliance_data test_data;
-	bool test_active;
-	int test_link_rate;
-	u8 test_lane_count;
-};
-
-struct intel_dp_mst_encoder;
-
-struct intel_dp {
-	i915_reg_t output_reg;
-	u32 DP;
-	int link_rate;
-	u8 lane_count;
-	u8 sink_count;
-	bool link_mst;
-	bool link_trained;
-	bool has_audio;
-	bool reset_link_params;
-	u8 dpcd[15];
-	u8 psr_dpcd[2];
-	u8 downstream_ports[16];
-	u8 edp_dpcd[3];
-	u8 dsc_dpcd[15];
-	u8 fec_capable;
-	short: 16;
-	int num_source_rates;
-	int: 32;
-	const int *source_rates;
-	int num_sink_rates;
-	int sink_rates[8];
-	bool use_rate_select;
-	int: 24;
-	int num_common_rates;
-	int common_rates[8];
-	int max_link_lane_count;
-	int max_link_rate;
-	struct drm_dp_desc desc;
-	int: 32;
-	struct drm_dp_aux aux;
-	u32 aux_busy_last_status;
-	u8 train_set[4];
-	int panel_power_up_delay;
-	int panel_power_down_delay;
-	int panel_power_cycle_delay;
-	int backlight_on_delay;
-	int backlight_off_delay;
-	int: 32;
-	struct delayed_work panel_vdd_work;
-	bool want_panel_vdd;
-	long: 56;
-	long unsigned int last_power_on;
-	long unsigned int last_backlight_off;
-	ktime_t panel_power_off_time;
-	struct notifier_block edp_notifier;
-	enum pipe pps_pipe;
-	enum pipe active_pipe;
-	bool pps_reset;
-	struct edp_power_seq pps_delays;
-	bool can_mst;
-	bool is_mst;
-	int: 24;
-	int active_mst_links;
-	struct {
-		i915_reg_t dp_tp_ctl;
-		i915_reg_t dp_tp_status;
-	} regs;
-	int: 32;
-	struct intel_connector *attached_connector;
-	struct intel_dp_mst_encoder *mst_encoders[4];
-	struct drm_dp_mst_topology_mgr mst_mgr;
-	u32 (*get_aux_clock_divider)(struct intel_dp *, int);
-	u32 (*get_aux_send_ctl)(struct intel_dp *, int, u32);
-	i915_reg_t (*aux_ch_ctl_reg)(struct intel_dp *);
-	i915_reg_t (*aux_ch_data_reg)(struct intel_dp *, int);
-	void (*prepare_link_retrain)(struct intel_dp *);
-	struct intel_dp_compliance compliance;
-	bool force_dsc_en;
-	long: 56;
-} __attribute__((packed));
-
-struct child_device_config {
-	u16 handle;
-	u16 device_type;
-	union {
-		u8 device_id[10];
-		struct {
-			u8 i2c_speed;
-			u8 dp_onboard_redriver;
-			u8 dp_ondock_redriver;
-			u8 hdmi_level_shifter_value: 5;
-			u8 hdmi_max_data_rate: 3;
-			u16 dtd_buf_ptr;
-			u8 edidless_efp: 1;
-			u8 compression_enable: 1;
-			u8 compression_method: 1;
-			u8 ganged_edp: 1;
-			u8 reserved0: 4;
-			u8 compression_structure_index: 4;
-			u8 reserved1: 4;
-			u8 slave_port;
-			u8 reserved2;
-		};
-	};
-	u16 addin_offset;
-	u8 dvo_port;
-	u8 i2c_pin;
-	u8 slave_addr;
-	u8 ddc_pin;
-	u16 edid_ptr;
-	u8 dvo_cfg;
-	union {
-		struct {
-			u8 dvo2_port;
-			u8 i2c2_pin;
-			u8 slave2_addr;
-			u8 ddc2_pin;
-		};
-		struct {
-			u8 efp_routed: 1;
-			u8 lane_reversal: 1;
-			u8 lspcon: 1;
-			u8 iboost: 1;
-			u8 hpd_invert: 1;
-			u8 use_vbt_vswing: 1;
-			u8 flag_reserved: 2;
-			u8 hdmi_support: 1;
-			u8 dp_support: 1;
-			u8 tmds_support: 1;
-			u8 support_reserved: 5;
-			u8 aux_channel;
-			u8 dongle_detect;
-		};
-	};
-	u8 pipe_cap: 2;
-	u8 sdvo_stall: 1;
-	u8 hpd_status: 2;
-	u8 integrated_encoder: 1;
-	u8 capabilities_reserved: 2;
-	u8 dvo_wiring;
-	union {
-		u8 dvo2_wiring;
-		u8 mipi_bridge_type;
-	};
-	u16 extended_type;
-	u8 dvo_function;
-	u8 dp_usb_type_c: 1;
-	u8 tbt: 1;
-	u8 flags2_reserved: 2;
-	u8 dp_port_trace_length: 4;
-	u8 dp_gpio_index;
-	u16 dp_gpio_pin_num;
-	u8 dp_iboost_level: 4;
-	u8 hdmi_iboost_level: 4;
-	u8 dp_max_link_rate: 2;
-	u8 dp_max_link_rate_reserved: 6;
-} __attribute__((packed));
-
-struct intel_dpll_mgr {
-	const struct dpll_info *dpll_info;
-	bool (*get_dplls)(struct intel_atomic_state *, struct intel_crtc *, struct intel_encoder *);
-	void (*put_dplls)(struct intel_atomic_state *, struct intel_crtc *);
-	void (*update_active_dpll)(struct intel_atomic_state *, struct intel_crtc *, struct intel_encoder *);
-	void (*dump_hw_state)(struct drm_i915_private *, const struct intel_dpll_hw_state *);
-};
-
-struct intel_fbdev {
-	struct drm_fb_helper helper;
-	struct intel_framebuffer *fb;
-	struct i915_vma *vma;
-	long unsigned int vma_flags;
-	async_cookie_t cookie;
-	int preferred_bpp;
-	bool hpd_suspended: 1;
-	bool hpd_waiting: 1;
-	struct mutex hpd_lock;
-};
-
-struct vlv_s0ix_state {
-	u32 wr_watermark;
-	u32 gfx_prio_ctrl;
-	u32 arb_mode;
-	u32 gfx_pend_tlb0;
-	u32 gfx_pend_tlb1;
-	u32 lra_limits[13];
-	u32 media_max_req_count;
-	u32 gfx_max_req_count;
-	u32 render_hwsp;
-	u32 ecochk;
-	u32 bsd_hwsp;
-	u32 blt_hwsp;
-	u32 tlb_rd_addr;
-	u32 g3dctl;
-	u32 gsckgctl;
-	u32 mbctl;
-	u32 ucgctl1;
-	u32 ucgctl3;
-	u32 rcgctl1;
-	u32 rcgctl2;
-	u32 rstctl;
-	u32 misccpctl;
-	u32 gfxpause;
-	u32 rpdeuhwtc;
-	u32 rpdeuc;
-	u32 ecobus;
-	u32 pwrdwnupctl;
-	u32 rp_down_timeout;
-	u32 rp_deucsw;
-	u32 rcubmabdtmr;
-	u32 rcedata;
-	u32 spare2gh;
-	u32 gt_imr;
-	u32 gt_ier;
-	u32 pm_imr;
-	u32 pm_ier;
-	u32 gt_scratch[8];
-	u32 tilectl;
-	u32 gt_fifoctl;
-	u32 gtlc_wake_ctrl;
-	u32 gtlc_survive;
-	u32 pmwgicz;
-	u32 gu_ctl0;
-	u32 gu_ctl1;
-	u32 pcbr;
-	u32 clock_gate_dis2;
-};
-
-struct dram_dimm_info {
-	u8 size;
-	u8 width;
-	u8 ranks;
-};
-
-struct dram_channel_info {
-	struct dram_dimm_info dimm_l;
-	struct dram_dimm_info dimm_s;
-	u8 ranks;
-	bool is_16gb_dimm;
-};
-
-struct intel_framebuffer {
-	struct drm_framebuffer base;
-	struct intel_frontbuffer *frontbuffer;
-	struct intel_rotation_info rot_info;
-	struct {
-		unsigned int x;
-		unsigned int y;
-	} normal[2];
-	struct {
-		unsigned int x;
-		unsigned int y;
-		unsigned int pitch;
-	} rotated[2];
-};
-
-struct pwm_device;
-
-struct intel_panel {
-	struct drm_display_mode *fixed_mode;
-	struct drm_display_mode *downclock_mode;
-	struct {
-		bool present;
-		u32 level;
-		u32 min;
-		u32 max;
-		bool enabled;
-		bool combination_mode;
-		bool active_low_pwm;
-		bool alternate_pwm_increment;
-		bool util_pin_active_low;
-		u8 controller;
-		struct pwm_device *pwm;
-		struct backlight_device *device;
-		int (*setup)(struct intel_connector *, enum pipe);
-		u32 (*get)(struct intel_connector *);
-		void (*set)(const struct drm_connector_state *, u32);
-		void (*disable)(const struct drm_connector_state *);
-		void (*enable)(const struct intel_crtc_state *, const struct drm_connector_state *);
-		u32 (*hz_to_pwm)(struct intel_connector *, u32);
-		void (*power)(struct intel_connector *, bool);
-	} backlight;
-};
-
-struct intel_hdcp_shim;
-
-struct intel_hdcp {
-	const struct intel_hdcp_shim *shim;
-	struct mutex mutex;
-	u64 value;
-	struct delayed_work check_work;
-	struct work_struct prop_work;
-	bool hdcp_encrypted;
-	bool hdcp2_supported;
-	bool hdcp2_encrypted;
-	u8 content_type;
-	struct hdcp_port_data port_data;
-	bool is_paired;
-	bool is_repeater;
-	u32 seq_num_v;
-	u32 seq_num_m;
-	wait_queue_head_t cp_irq_queue;
-	atomic_t cp_irq_count;
-	int cp_irq_count_cached;
-	enum transcoder cpu_transcoder;
-};
-
-struct intel_connector {
-	struct drm_connector base;
-	struct intel_encoder *encoder;
-	u32 acpi_device_id;
-	bool (*get_hw_state)(struct intel_connector *);
-	struct intel_panel panel;
-	struct edid *edid;
-	struct edid *detect_edid;
-	u8 polled;
-	void *port;
-	struct intel_dp *mst_port;
-	struct work_struct modeset_retry_work;
-	struct intel_hdcp hdcp;
-};
-
-struct intel_digital_port;
-
-struct intel_hdcp_shim {
-	int (*write_an_aksv)(struct intel_digital_port *, u8 *);
-	int (*read_bksv)(struct intel_digital_port *, u8 *);
-	int (*read_bstatus)(struct intel_digital_port *, u8 *);
-	int (*repeater_present)(struct intel_digital_port *, bool *);
-	int (*read_ri_prime)(struct intel_digital_port *, u8 *);
-	int (*read_ksv_ready)(struct intel_digital_port *, bool *);
-	int (*read_ksv_fifo)(struct intel_digital_port *, int, u8 *);
-	int (*read_v_prime_part)(struct intel_digital_port *, int, u32 *);
-	int (*toggle_signalling)(struct intel_digital_port *, bool);
-	bool (*check_link)(struct intel_digital_port *);
-	int (*hdcp_capable)(struct intel_digital_port *, bool *);
-	enum hdcp_wired_protocol protocol;
-	int (*hdcp_2_2_capable)(struct intel_digital_port *, bool *);
-	int (*write_2_2_msg)(struct intel_digital_port *, void *, size_t);
-	int (*read_2_2_msg)(struct intel_digital_port *, u8, void *, size_t);
-	int (*config_stream_type)(struct intel_digital_port *, bool, u8);
-	int (*check_2_2_link)(struct intel_digital_port *);
-};
-
-struct cec_notifier;
-
-struct intel_hdmi {
-	i915_reg_t hdmi_reg;
-	int ddc_bus;
-	struct {
-		enum drm_dp_dual_mode_type type;
-		int max_tmds_clock;
-	} dp_dual_mode;
-	bool has_hdmi_sink;
-	bool has_audio;
-	struct intel_connector *attached_connector;
-	struct cec_notifier *cec_notifier;
-};
-
-enum lspcon_vendor {
-	LSPCON_VENDOR_MCA = 0,
-	LSPCON_VENDOR_PARADE = 1,
-};
-
-struct intel_lspcon {
-	bool active;
-	enum drm_lspcon_mode mode;
-	enum lspcon_vendor vendor;
-};
-
-struct intel_digital_port {
-	struct intel_encoder base;
-	u32 saved_port_bits;
-	struct intel_dp dp;
-	struct intel_hdmi hdmi;
-	struct intel_lspcon lspcon;
-	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
-	bool release_cl2_override;
-	u8 max_lanes;
-	enum aux_ch aux_ch;
-	enum intel_display_power_domain ddi_io_power_domain;
-	struct mutex tc_lock;
-	intel_wakeref_t tc_lock_wakeref;
-	int tc_link_refcount;
-	bool tc_legacy_port: 1;
-	char tc_port_name[8];
-	enum tc_port_mode tc_mode;
-	enum phy_fia tc_phy_fia;
-	u8 tc_phy_fia_idx;
-	void (*write_infoframe)(struct intel_encoder *, const struct intel_crtc_state *, unsigned int, const void *, ssize_t);
-	void (*read_infoframe)(struct intel_encoder *, const struct intel_crtc_state *, unsigned int, void *, ssize_t);
-	void (*set_infoframes)(struct intel_encoder *, bool, const struct intel_crtc_state *, const struct drm_connector_state *);
-	u32 (*infoframes_enabled)(struct intel_encoder *, const struct intel_crtc_state *);
-};
-
-enum vlv_wm_level {
-	VLV_WM_LEVEL_PM2 = 0,
-	VLV_WM_LEVEL_PM5 = 1,
-	VLV_WM_LEVEL_DDR_DVFS = 2,
-	NUM_VLV_WM_LEVELS = 3,
-};
-
-enum g4x_wm_level {
-	G4X_WM_LEVEL_NORMAL = 0,
-	G4X_WM_LEVEL_SR = 1,
-	G4X_WM_LEVEL_HPLL = 2,
-	NUM_G4X_WM_LEVELS = 3,
-};
-
-struct intel_dp_mst_encoder {
-	struct intel_encoder base;
-	enum pipe pipe;
-	struct intel_digital_port *primary;
-	struct intel_connector *connector;
-};
-
-enum tc_port {
-	PORT_TC_NONE = 4294967295,
-	PORT_TC1 = 0,
-	PORT_TC2 = 1,
-	PORT_TC3 = 2,
-	PORT_TC4 = 3,
-	PORT_TC5 = 4,
-	PORT_TC6 = 5,
-	I915_MAX_TC_PORTS = 6,
-};
-
-typedef bool (*long_pulse_detect_func)(enum hpd_pin, u32);
-
-enum drm_i915_gem_engine_class {
-	I915_ENGINE_CLASS_RENDER = 0,
-	I915_ENGINE_CLASS_COPY = 1,
-	I915_ENGINE_CLASS_VIDEO = 2,
-	I915_ENGINE_CLASS_VIDEO_ENHANCE = 3,
-	I915_ENGINE_CLASS_INVALID = 4294967295,
-};
-
-struct drm_i915_getparam {
-	__s32 param;
-	int *value;
-};
-
-typedef struct drm_i915_getparam drm_i915_getparam_t;
-
-enum vga_switcheroo_state {
-	VGA_SWITCHEROO_OFF = 0,
-	VGA_SWITCHEROO_ON = 1,
-	VGA_SWITCHEROO_NOT_FOUND = 2,
-};
-
-enum vga_switcheroo_client_id {
-	VGA_SWITCHEROO_UNKNOWN_ID = 4096,
-	VGA_SWITCHEROO_IGD = 0,
-	VGA_SWITCHEROO_DIS = 1,
-	VGA_SWITCHEROO_MAX_CLIENTS = 2,
-};
-
-struct vga_switcheroo_client_ops {
-	void (*set_gpu_state)(struct pci_dev *, enum vga_switcheroo_state);
-	void (*reprobe)(struct pci_dev *);
-	bool (*can_switch)(struct pci_dev *);
-	void (*gpu_bound)(struct pci_dev *, enum vga_switcheroo_client_id);
-};
-
-enum {
-	VLV_IOSF_SB_BUNIT = 0,
-	VLV_IOSF_SB_CCK = 1,
-	VLV_IOSF_SB_CCU = 2,
-	VLV_IOSF_SB_DPIO = 3,
-	VLV_IOSF_SB_FLISDSI = 4,
-	VLV_IOSF_SB_GPIO = 5,
-	VLV_IOSF_SB_NC = 6,
-	VLV_IOSF_SB_PUNIT = 7,
-};
-
-struct intel_css_header {
-	u32 module_type;
-	u32 header_len;
-	u32 header_ver;
-	u32 module_id;
-	u32 module_vendor;
-	u32 date;
-	u32 size;
-	u32 key_size;
-	u32 modulus_size;
-	u32 exponent_size;
-	u32 reserved1[12];
-	u32 version;
-	u32 reserved2[8];
-	u32 kernel_header_info;
-};
-
-struct intel_fw_info {
-	u8 reserved1;
-	u8 dmc_id;
-	char stepping;
-	char substepping;
-	u32 offset;
-	u32 reserved2;
-};
-
-struct intel_package_header {
-	u8 header_len;
-	u8 header_ver;
-	u8 reserved[10];
-	u32 num_entries;
-};
-
-struct intel_dmc_header_base {
-	u32 signature;
-	u8 header_len;
-	u8 header_ver;
-	u16 dmcc_ver;
-	u32 project;
-	u32 fw_size;
-	u32 fw_version;
-};
-
-struct intel_dmc_header_v1 {
-	struct intel_dmc_header_base base;
-	u32 mmio_count;
-	u32 mmioaddr[8];
-	u32 mmiodata[8];
-	char dfile[32];
-	u32 reserved1[2];
-};
-
-struct intel_dmc_header_v3 {
-	struct intel_dmc_header_base base;
-	u32 start_mmioaddr;
-	u32 reserved[9];
-	char dfile[32];
-	u32 mmio_count;
-	u32 mmioaddr[20];
-	u32 mmiodata[20];
-};
-
-struct stepping_info {
-	char stepping;
-	char substepping;
-};
-
-enum intel_memory_type {
-	INTEL_MEMORY_SYSTEM = 0,
-	INTEL_MEMORY_LOCAL = 1,
-	INTEL_MEMORY_STOLEN = 2,
-};
-
-struct drm_intel_sprite_colorkey {
-	__u32 plane_id;
-	__u32 min_value;
-	__u32 channel_mask;
-	__u32 max_value;
-	__u32 flags;
-};
-
-typedef struct {
-	u32 val;
-} uint_fixed_16_16_t;
-
-struct skl_wm_params {
-	bool x_tiled;
-	bool y_tiled;
-	bool rc_surface;
-	bool is_planar;
-	u32 width;
-	u8 cpp;
-	u32 plane_pixel_rate;
-	u32 y_min_scanlines;
-	u32 plane_bytes_per_line;
-	uint_fixed_16_16_t plane_blocks_per_line;
-	uint_fixed_16_16_t y_tile_minimum;
-	u32 linetime_us;
-	u32 dbuf_block_size;
-};
-
-struct intel_wm_config {
-	unsigned int num_pipes_active;
-	bool sprites_enabled;
-	bool sprites_scaled;
-};
-
-struct intel_plane;
-
-struct intel_plane_state {
-	struct drm_plane_state base;
-	struct i915_ggtt_view view;
-	struct i915_vma *vma;
-	long unsigned int flags;
-	struct {
-		u32 offset;
-		u32 stride;
-		int x;
-		int y;
-	} color_plane[2];
-	u32 ctl;
-	u32 color_ctl;
-	int scaler_id;
-	struct intel_plane *planar_linked_plane;
-	u32 planar_slave;
-	struct drm_intel_sprite_colorkey ckey;
-};
-
-struct intel_plane {
-	struct drm_plane base;
-	enum i9xx_plane_id i9xx_plane;
-	enum plane_id id;
-	enum pipe pipe;
-	bool has_fbc;
-	bool has_ccs;
-	u32 frontbuffer_bit;
-	struct {
-		u32 base;
-		u32 cntl;
-		u32 size;
-	} cursor;
-	unsigned int (*max_stride)(struct intel_plane *, u32, u64, unsigned int);
-	void (*update_plane)(struct intel_plane *, const struct intel_crtc_state *, const struct intel_plane_state *);
-	void (*update_slave)(struct intel_plane *, const struct intel_crtc_state *, const struct intel_plane_state *);
-	void (*disable_plane)(struct intel_plane *, const struct intel_crtc_state *);
-	bool (*get_hw_state)(struct intel_plane *, enum pipe *);
-	int (*check_plane)(struct intel_crtc_state *, struct intel_plane_state *);
-	int (*min_cdclk)(const struct intel_crtc_state *, const struct intel_plane_state *);
-};
-
-struct intel_watermark_params {
-	u16 fifo_size;
-	u16 max_wm;
-	u8 default_wm;
-	u8 guard_size;
-	u8 cacheline_size;
-};
-
-struct cxsr_latency {
-	bool is_desktop: 1;
-	bool is_ddr3: 1;
-	u16 fsb_freq;
-	u16 mem_freq;
-	u16 display_sr;
-	u16 display_hpll_disable;
-	u16 cursor_sr;
-	u16 cursor_hpll_disable;
-};
-
-struct ilk_wm_maximums {
-	u16 pri;
-	u16 spr;
-	u16 cur;
-	u16 fbc;
-};
-
-enum intel_sbi_destination {
-	SBI_ICLK = 0,
-	SBI_MPHY = 1,
-};
-
-struct drm_i915_reg_read {
-	__u64 offset;
-	__u64 val;
-};
-
-enum ack_type {
-	ACK_CLEAR = 0,
-	ACK_SET = 1,
-};
-
-struct reg_whitelist {
-	i915_reg_t offset_ldw;
-	i915_reg_t offset_udw;
-	u16 gen_mask;
-	u8 size;
-};
-
-struct resource___2;
-
-struct remap_pfn {
-	struct mm_struct *mm;
-	long unsigned int pfn;
-	pgprot_t prot;
-};
-
-enum i915_sw_fence_notify {
-	FENCE_COMPLETE = 0,
-	FENCE_FREE = 1,
-};
-
-typedef int (*i915_sw_fence_notify_t)(struct i915_sw_fence *, enum i915_sw_fence_notify);
-
-enum {
-	DEBUG_FENCE_IDLE = 0,
-	DEBUG_FENCE_NOTIFY = 1,
-};
-
-struct i915_sw_dma_fence_cb_timer {
-	struct i915_sw_dma_fence_cb base;
-	struct dma_fence *dma;
-	struct timer_list timer;
-	struct irq_work work;
-	struct callback_head rcu;
-};
-
-struct dma_fence_work;
-
-struct dma_fence_work_ops {
-	const char *name;
-	int (*work)(struct dma_fence_work *);
-	void (*release)(struct dma_fence_work *);
-};
-
-struct dma_fence_work {
-	struct dma_fence dma;
-	spinlock_t lock;
-	struct i915_sw_fence chain;
-	struct i915_sw_dma_fence_cb cb;
-	struct work_struct work;
-	const struct dma_fence_work_ops *ops;
-};
-
-struct i915_syncmap___2 {
-	u64 prefix;
-	unsigned int height;
-	unsigned int bitmap;
-	struct i915_syncmap___2 *parent;
-};
-
-struct i915_user_extension {
-	__u64 next_extension;
-	__u32 name;
-	__u32 flags;
-	__u32 rsvd[4];
-};
-
-typedef int (*i915_user_extension_fn)(struct i915_user_extension *, void *);
-
-struct drm_i915_getparam32 {
-	s32 param;
-	u32 value;
-};
-
-struct i915_gem_engines_iter {
-	unsigned int idx;
-	const struct i915_gem_engines *engines;
-};
-
-struct guc_execlist_context {
-	u32 context_desc;
-	u32 context_id;
-	u32 ring_status;
-	u32 ring_lrca;
-	u32 ring_begin;
-	u32 ring_end;
-	u32 ring_next_free_location;
-	u32 ring_current_tail_pointer_value;
-	u8 engine_state_submit_value;
-	u8 engine_state_wait_value;
-	u16 pagefault_count;
-	u16 engine_submit_queue_count;
-} __attribute__((packed));
-
-struct guc_stage_desc {
-	u32 sched_common_area;
-	u32 stage_id;
-	u32 pas_id;
-	u8 engines_used;
-	u64 db_trigger_cpu;
-	u32 db_trigger_uk;
-	u64 db_trigger_phy;
-	u16 db_id;
-	struct guc_execlist_context lrc[5];
-	u8 attribute;
-	u32 priority;
-	u32 wq_sampled_tail_offset;
-	u32 wq_total_submit_enqueues;
-	u32 process_desc;
-	u32 wq_addr;
-	u32 wq_size;
-	u32 engine_presence;
-	u8 engine_suspended;
-	u8 reserved0[3];
-	u64 reserved1[1];
-	u64 desc_private;
-} __attribute__((packed));
-
-enum i915_map_type {
-	I915_MAP_WB = 0,
-	I915_MAP_WC = 1,
-	I915_MAP_FORCE_WB = 2147483648,
-	I915_MAP_FORCE_WC = 2147483649,
-};
-
-struct intel_guc_client {
-	struct i915_vma *vma;
-	void *vaddr;
-	struct intel_guc *guc;
-	u32 priority;
-	u32 stage_id;
-	u32 proc_desc_offset;
-	u16 doorbell_id;
-	long unsigned int doorbell_offset;
-	spinlock_t wq_lock;
-};
-
-struct file_stats {
-	struct i915_address_space *vm;
-	long unsigned int count;
-	u64 total;
-	u64 unbound;
-	u64 active;
-	u64 inactive;
-	u64 closed;
-};
-
-struct i915_debugfs_files {
-	const char *name;
-	const struct file_operations *fops;
-};
-
-struct dpcd_block {
-	unsigned int offset;
-	unsigned int end;
-	size_t size;
-	bool edp;
-};
-
-struct i915_str_attribute {
-	struct device_attribute attr;
-	const char *str;
-};
-
-struct i915_ext_attribute {
-	struct device_attribute attr;
-	long unsigned int val;
-};
-
-enum {
-	I915_FENCE_FLAG_ACTIVE = 3,
-	I915_FENCE_FLAG_SIGNAL = 4,
-};
-
-typedef void (*i915_global_func_t)();
-
-struct i915_global {
-	struct list_head link;
-	i915_global_func_t shrink;
-	i915_global_func_t exit;
-};
-
-struct i915_global_context {
-	struct i915_global base;
-	struct kmem_cache *slab_ce;
-};
-
-struct engine_mmio_base {
-	u32 gen: 8;
-	u32 base: 24;
-};
-
-struct engine_info {
-	unsigned int hw_id;
-	u8 class;
-	u8 instance;
-	struct engine_mmio_base mmio_bases[3];
-};
-
-struct measure_breadcrumb {
-	struct i915_request rq;
-	struct intel_timeline timeline;
-	struct intel_ring ring;
-	u32 cs[1024];
-};
-
-enum {
-	I915_PRIORITY_MIN = 4294966272,
-	I915_PRIORITY_NORMAL = 0,
-	I915_PRIORITY_MAX = 1024,
-	I915_PRIORITY_HEARTBEAT = 1025,
-	I915_PRIORITY_DISPLAY = 1026,
-};
-
-struct intel_engine_pool_node {
-	struct i915_active active;
-	struct drm_i915_gem_object *obj;
-	struct list_head link;
-	struct intel_engine_pool *pool;
-};
-
-struct legacy_ring {
-	struct intel_gt *gt;
-	u8 class;
-	u8 instance;
-};
-
-struct ia_constants {
-	unsigned int min_gpu_freq;
-	unsigned int max_gpu_freq;
-	unsigned int min_ring_freq;
-	unsigned int max_ia_freq;
-};
-
-enum {
-	INTEL_ADVANCED_CONTEXT = 0,
-	INTEL_LEGACY_32B_CONTEXT = 1,
-	INTEL_ADVANCED_AD_CONTEXT = 2,
-	INTEL_LEGACY_64B_CONTEXT = 3,
-};
-
-enum {
-	INTEL_CONTEXT_SCHEDULE_IN = 0,
-	INTEL_CONTEXT_SCHEDULE_OUT = 1,
-	INTEL_CONTEXT_SCHEDULE_PREEMPTED = 2,
-};
-
-enum intel_gt_scratch_field {
-	INTEL_GT_SCRATCH_FIELD_DEFAULT = 0,
-	INTEL_GT_SCRATCH_FIELD_RENDER_FLUSH = 128,
-	INTEL_GT_SCRATCH_FIELD_COHERENTL3_WA = 256,
-	INTEL_GT_SCRATCH_FIELD_PERF_CS_GPR = 2048,
-	INTEL_GT_SCRATCH_FIELD_PERF_PREDICATE_RESULT_1 = 2096,
-};
-
-struct ve_node {
-	struct rb_node rb;
-	int prio;
-};
-
-struct ve_bond {
-	const struct intel_engine_cs *master;
-	intel_engine_mask_t sibling_mask;
-};
-
-struct virtual_engine {
-	struct intel_engine_cs base;
-	struct intel_context context;
-	struct i915_request *request;
-	struct ve_node nodes[8];
-	struct ve_bond *bonds;
-	unsigned int num_bonds;
-	unsigned int num_siblings;
-	struct intel_engine_cs *siblings[0];
-};
-
-struct lri {
-	i915_reg_t reg;
-	u32 value;
-};
-
-typedef u32 * (*wa_bb_func_t)(struct intel_engine_cs *, u32 *);
-
-enum i915_mocs_table_index {
-	I915_MOCS_UNCACHED = 0,
-	I915_MOCS_PTE = 1,
-	I915_MOCS_CACHED = 2,
-};
-
-struct drm_i915_mocs_entry {
-	u32 control_value;
-	u16 l3cc_value;
-	u16 used;
-};
-
-struct drm_i915_mocs_table {
-	unsigned int size;
-	unsigned int n_entries;
-	const struct drm_i915_mocs_entry *table;
-};
-
-struct intel_renderstate_rodata {
-	const u32 *reloc;
-	const u32 *batch;
-	const u32 batch_items;
-};
-
-struct intel_renderstate {
-	const struct intel_renderstate_rodata *rodata;
-	struct drm_i915_gem_object *obj;
-	struct i915_vma *vma;
-	u32 batch_offset;
-	u32 batch_size;
-	u32 aux_offset;
-	u32 aux_size;
-};
-
-struct intel_wedge_me {
-	struct delayed_work work;
-	struct intel_gt *gt;
-	const char *name;
-};
-
-typedef int (*reset_func)(struct intel_gt *, intel_engine_mask_t, unsigned int);
-
-struct cparams {
-	u16 i;
-	u16 t;
-	u16 m;
-	u16 c;
-};
-
-struct intel_timeline_hwsp;
-
-struct intel_timeline_cacheline {
-	struct i915_active active;
-	struct intel_timeline_hwsp *hwsp;
-	void *vaddr;
-};
-
-struct intel_timeline_hwsp {
-	struct intel_gt *gt;
-	struct intel_gt_timelines *gt_timelines;
-	struct list_head free_link;
-	struct i915_vma *vma;
-	u64 free_bitmap;
-};
-
-struct drm_i915_gem_busy {
-	__u32 handle;
-	__u32 busy;
-};
-
-enum fb_op_origin {
-	ORIGIN_GTT = 0,
-	ORIGIN_CPU = 1,
-	ORIGIN_CS = 2,
-	ORIGIN_FLIP = 3,
-	ORIGIN_DIRTYFB = 4,
-};
-
-struct clflush {
-	struct dma_fence_work base;
-	struct drm_i915_gem_object *obj;
-};
-
-struct i915_sleeve {
-	struct i915_vma *vma;
-	struct drm_i915_gem_object *obj;
-	struct sg_table *pages;
-	struct i915_page_sizes page_sizes;
-};
-
-struct clear_pages_work {
-	struct dma_fence dma;
-	struct dma_fence_cb cb;
-	struct i915_sw_fence wait;
-	struct work_struct work;
-	struct irq_work irq_work;
-	struct i915_sleeve *sleeve;
-	struct intel_context *ce;
-	u32 value;
-};
-
-struct i915_engine_class_instance {
-	__u16 engine_class;
-	__u16 engine_instance;
-};
-
-struct drm_i915_gem_context_create_ext {
-	__u32 ctx_id;
-	__u32 flags;
-	__u64 extensions;
-};
-
-struct drm_i915_gem_context_param {
-	__u32 ctx_id;
-	__u32 size;
-	__u64 param;
-	__u64 value;
-};
-
-struct drm_i915_gem_context_param_sseu {
-	struct i915_engine_class_instance engine;
-	__u32 flags;
-	__u64 slice_mask;
-	__u64 subslice_mask;
-	__u16 min_eus_per_subslice;
-	__u16 max_eus_per_subslice;
-	__u32 rsvd;
-};
-
-struct i915_context_engines_load_balance {
-	struct i915_user_extension base;
-	__u16 engine_index;
-	__u16 num_siblings;
-	__u32 flags;
-	__u64 mbz64;
-	struct i915_engine_class_instance engines[0];
-};
-
-struct i915_context_engines_bond {
-	struct i915_user_extension base;
-	struct i915_engine_class_instance master;
-	__u16 virtual_index;
-	__u16 num_bonds;
-	__u64 flags;
-	__u64 mbz64[4];
-	struct i915_engine_class_instance engines[0];
-};
-
-struct i915_context_param_engines {
-	__u64 extensions;
-	struct i915_engine_class_instance engines[0];
-};
-
-struct drm_i915_gem_context_create_ext_setparam {
-	struct i915_user_extension base;
-	struct drm_i915_gem_context_param param;
-};
-
-struct drm_i915_gem_context_create_ext_clone {
-	struct i915_user_extension base;
-	__u32 clone_id;
-	__u32 flags;
-	__u64 rsvd;
-};
-
-struct drm_i915_gem_context_destroy {
-	__u32 ctx_id;
-	__u32 pad;
-};
-
-struct drm_i915_gem_vm_control {
-	__u64 extensions;
-	__u32 flags;
-	__u32 vm_id;
-};
-
-struct drm_i915_reset_stats {
-	__u32 ctx_id;
-	__u32 flags;
-	__u32 reset_count;
-	__u32 batch_active;
-	__u32 batch_pending;
-	__u32 pad;
-};
-
-struct radix_tree_iter {
-	long unsigned int index;
-	long unsigned int next_index;
-	long unsigned int tags;
-	struct xa_node *node;
-};
-
-enum {
-	RADIX_TREE_ITER_TAG_MASK = 15,
-	RADIX_TREE_ITER_TAGGED = 16,
-	RADIX_TREE_ITER_CONTIG = 32,
-};
-
-struct i915_lut_handle {
-	struct list_head obj_link;
-	struct i915_gem_context *ctx;
-	u32 handle;
-};
-
-struct i915_global_gem_context {
-	struct i915_global base;
-	struct kmem_cache *slab_luts;
-};
-
-struct context_barrier_task {
-	struct i915_active base;
-	void (*task)(void *);
-	void *data;
-};
-
-struct set_engines {
-	struct i915_gem_context *ctx;
-	struct i915_gem_engines *engines;
-};
-
-struct create_ext {
-	struct i915_gem_context *ctx;
-	struct drm_i915_file_private *fpriv;
-};
-
-struct drm_i915_gem_set_domain {
-	__u32 handle;
-	__u32 read_domains;
-	__u32 write_domain;
-};
-
-struct drm_i915_gem_caching {
-	__u32 handle;
-	__u32 caching;
-};
-
-struct drm_i915_gem_relocation_entry {
-	__u32 target_handle;
-	__u32 delta;
-	__u64 offset;
-	__u64 presumed_offset;
-	__u32 read_domains;
-	__u32 write_domain;
-};
-
-struct drm_i915_gem_exec_object {
-	__u32 handle;
-	__u32 relocation_count;
-	__u64 relocs_ptr;
-	__u64 alignment;
-	__u64 offset;
-};
-
-struct drm_i915_gem_execbuffer {
-	__u64 buffers_ptr;
-	__u32 buffer_count;
-	__u32 batch_start_offset;
-	__u32 batch_len;
-	__u32 DR1;
-	__u32 DR4;
-	__u32 num_cliprects;
-	__u64 cliprects_ptr;
-};
-
-struct drm_i915_gem_exec_object2 {
-	__u32 handle;
-	__u32 relocation_count;
-	__u64 relocs_ptr;
-	__u64 alignment;
-	__u64 offset;
-	__u64 flags;
-	union {
-		__u64 rsvd1;
-		__u64 pad_to_size;
-	};
-	__u64 rsvd2;
-};
-
-struct drm_i915_gem_exec_fence {
-	__u32 handle;
-	__u32 flags;
-};
-
-struct drm_i915_gem_execbuffer2 {
-	__u64 buffers_ptr;
-	__u32 buffer_count;
-	__u32 batch_start_offset;
-	__u32 batch_len;
-	__u32 DR1;
-	__u32 DR4;
-	__u32 num_cliprects;
-	__u64 cliprects_ptr;
-	__u64 flags;
-	__u64 rsvd1;
-	__u64 rsvd2;
-};
-
-enum {
-	FORCE_CPU_RELOC = 1,
-	FORCE_GTT_RELOC = 2,
-	FORCE_GPU_RELOC = 3,
-};
-
-struct reloc_cache {
-	struct drm_mm_node node;
-	long unsigned int vaddr;
-	long unsigned int page;
-	unsigned int gen;
-	bool use_64bit_reloc: 1;
-	bool has_llc: 1;
-	bool has_fence: 1;
-	bool needs_unfenced: 1;
-	struct intel_context *ce;
-	struct i915_request *rq;
-	u32 *rq_cmd;
-	unsigned int rq_size;
-};
-
-struct i915_execbuffer {
-	struct drm_i915_private *i915;
-	struct drm_file *file;
-	struct drm_i915_gem_execbuffer2 *args;
-	struct drm_i915_gem_exec_object2 *exec;
-	struct i915_vma **vma;
-	unsigned int *flags;
-	struct intel_engine_cs *engine;
-	struct intel_context *context;
-	struct i915_gem_context *gem_context;
-	struct i915_request *request;
-	struct i915_vma *batch;
-	unsigned int buffer_count;
-	struct list_head unbound;
-	struct list_head relocs;
-	struct reloc_cache reloc_cache;
-	u64 invalid_flags;
-	u32 context_flags;
-	u32 batch_start_offset;
-	u32 batch_len;
-	u32 batch_flags;
-	int lut_size;
-	struct hlist_head *buckets;
-};
-
-struct stub_fence {
-	struct dma_fence dma;
-	struct i915_sw_fence chain;
-};
-
-enum i915_mm_subclass {
-	I915_MM_NORMAL = 0,
-	I915_MM_SHRINKER = 1,
-};
-
-struct i915_global_object {
-	struct i915_global base;
-	struct kmem_cache *slab_objects;
-};
-
-struct drm_i915_gem_mmap {
-	__u32 handle;
-	__u32 pad;
-	__u64 offset;
-	__u64 size;
-	__u64 addr_ptr;
-	__u64 flags;
-};
-
-struct drm_i915_gem_mmap_gtt {
-	__u32 handle;
-	__u32 pad;
-	__u64 offset;
-};
-
-struct sgt_iter {
-	struct scatterlist *sgp;
-	union {
-		long unsigned int pfn;
-		dma_addr_t dma;
-	};
-	unsigned int curr;
-	unsigned int max;
-};
-
-struct drm_i915_gem_set_tiling {
-	__u32 handle;
-	__u32 tiling_mode;
-	__u32 stride;
-	__u32 swizzle_mode;
-};
-
-struct drm_i915_gem_get_tiling {
-	__u32 handle;
-	__u32 tiling_mode;
-	__u32 swizzle_mode;
-	__u32 phys_swizzle_mode;
-};
-
-struct drm_i915_gem_userptr {
-	__u64 user_ptr;
-	__u64 user_size;
-	__u32 flags;
-	__u32 handle;
-};
-
-struct i915_mmu_notifier;
-
-struct i915_mm_struct {
-	struct mm_struct *mm;
-	struct drm_i915_private *i915;
-	struct i915_mmu_notifier *mn;
-	struct hlist_node node;
-	struct kref kref;
-	struct work_struct work;
-};
-
-struct i915_mmu_object {
-	struct i915_mmu_notifier *mn;
-	struct drm_i915_gem_object *obj;
-	struct interval_tree_node it;
-};
-
-struct i915_mmu_notifier {
-	spinlock_t lock;
-	struct hlist_node node;
-	struct mmu_notifier mn;
-	struct rb_root_cached objects;
-	struct i915_mm_struct *mm;
-};
-
-struct get_pages_work {
-	struct work_struct work;
-	struct drm_i915_gem_object *obj;
-	struct task_struct *task;
-};
-
-struct dma_fence_array {
-	struct dma_fence base;
-	spinlock_t lock;
-	unsigned int num_fences;
-	atomic_t num_pending;
-	struct dma_fence **fences;
-	struct irq_work work;
-};
-
-struct drm_i915_gem_wait {
-	__u32 bo_handle;
-	__u32 flags;
-	__s64 timeout_ns;
-};
-
-struct active_node {
-	struct i915_active_fence base;
-	struct i915_active *ref;
-	struct rb_node node;
-	u64 timeline;
-};
-
-struct i915_global_active {
-	struct i915_global base;
-	struct kmem_cache *slab_cache;
-};
-
-struct i915_global_block {
-	struct i915_global base;
-	struct kmem_cache *slab_blocks;
-};
-
-struct drm_i915_cmd_descriptor {
-	u32 flags;
-	struct {
-		u32 value;
-		u32 mask;
-	} cmd;
-	union {
-		u32 fixed;
-		u32 mask;
-	} length;
-	struct {
-		u32 offset;
-		u32 mask;
-		u32 step;
-	} reg;
-	struct {
-		u32 offset;
-		u32 mask;
-		u32 expected;
-		u32 condition_offset;
-		u32 condition_mask;
-	} bits[3];
-};
-
-struct drm_i915_cmd_table {
-	const struct drm_i915_cmd_descriptor *table;
-	int count;
-};
-
-struct drm_i915_reg_descriptor {
-	i915_reg_t addr;
-	u32 mask;
-	u32 value;
-};
-
-struct cmd_node {
-	const struct drm_i915_cmd_descriptor *desc;
-	struct hlist_node node;
-};
-
-typedef u32 gen6_pte_t;
-
-typedef u64 gen8_pte_t;
-
-struct gen6_ppgtt {
-	struct i915_ppgtt base;
-	struct i915_vma *vma;
-	gen6_pte_t *pd_addr;
-	atomic_t pin_count;
-	struct mutex pin_mutex;
-	bool scan_for_unused_pt;
-};
-
-enum vgt_g2v_type {
-	VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE = 2,
-	VGT_G2V_PPGTT_L3_PAGE_TABLE_DESTROY = 3,
-	VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE = 4,
-	VGT_G2V_PPGTT_L4_PAGE_TABLE_DESTROY = 5,
-	VGT_G2V_EXECLIST_CONTEXT_CREATE = 6,
-	VGT_G2V_EXECLIST_CONTEXT_DESTROY = 7,
-	VGT_G2V_MAX = 8,
-};
-
-struct sgt_dma {
-	struct scatterlist *sg;
-	dma_addr_t dma;
-	dma_addr_t max;
-};
-
-struct insert_page {
-	struct i915_address_space *vm;
-	dma_addr_t addr;
-	u64 offset;
-	enum i915_cache_level level;
-};
-
-struct insert_entries {
-	struct i915_address_space *vm;
-	struct i915_vma *vma;
-	enum i915_cache_level level;
-	u32 flags;
-};
-
-struct clear_range {
-	struct i915_address_space *vm;
-	u64 start;
-	u64 length;
-};
-
-struct drm_i915_gem_create {
-	__u64 size;
-	__u32 handle;
-	__u32 pad;
-};
-
-struct drm_i915_gem_pread {
-	__u32 handle;
-	__u32 pad;
-	__u64 offset;
-	__u64 size;
-	__u64 data_ptr;
-};
-
-struct drm_i915_gem_sw_finish {
-	__u32 handle;
-};
-
-struct drm_i915_gem_get_aperture {
-	__u64 aper_size;
-	__u64 aper_available_size;
-};
-
-struct drm_i915_gem_madvise {
-	__u32 handle;
-	__u32 madv;
-	__u32 retained;
-};
-
-struct park_work {
-	struct rcu_work work;
-	int epoch;
-};
-
-struct drm_i915_perf_oa_config {
-	char uuid[36];
-	__u32 n_mux_regs;
-	__u32 n_boolean_regs;
-	__u32 n_flex_regs;
-	__u64 mux_regs_ptr;
-	__u64 boolean_regs_ptr;
-	__u64 flex_regs_ptr;
-};
-
-struct drm_i915_query_item {
-	__u64 query_id;
-	__s32 length;
-	__u32 flags;
-	__u64 data_ptr;
-};
-
-struct drm_i915_query {
-	__u32 num_items;
-	__u32 flags;
-	__u64 items_ptr;
-};
-
-struct drm_i915_query_topology_info {
-	__u16 flags;
-	__u16 max_slices;
-	__u16 max_subslices;
-	__u16 max_eus_per_subslice;
-	__u16 subslice_offset;
-	__u16 subslice_stride;
-	__u16 eu_offset;
-	__u16 eu_stride;
-	__u8 data[0];
-};
-
-struct drm_i915_engine_info {
-	struct i915_engine_class_instance engine;
-	__u32 rsvd0;
-	__u64 flags;
-	__u64 capabilities;
-	__u64 rsvd1[4];
-};
-
-struct drm_i915_query_engine_info {
-	__u32 num_engines;
-	__u32 rsvd[3];
-	struct drm_i915_engine_info engines[0];
-};
-
-struct drm_i915_query_perf_config {
-	union {
-		__u64 n_configs;
-		__u64 config;
-		char uuid[36];
-	};
-	__u32 flags;
-	__u8 data[0];
-};
-
-struct execute_cb {
-	struct list_head link;
-	struct irq_work work;
-	struct i915_sw_fence *fence;
-	void (*hook)(struct i915_request *, struct dma_fence *);
-	struct i915_request *signal;
-};
-
-struct i915_global_request {
-	struct i915_global base;
-	struct kmem_cache *slab_requests;
-	struct kmem_cache *slab_dependencies;
-	struct kmem_cache *slab_execute_cbs;
-};
-
-struct request_wait {
-	struct dma_fence_cb cb;
-	struct task_struct *tsk;
-};
-
-struct i915_global_scheduler {
-	struct i915_global base;
-	struct kmem_cache *slab_dependencies;
-	struct kmem_cache *slab_priorities;
-};
-
-struct sched_cache {
-	struct list_head *priolist;
-};
-
-struct trace_event_raw_intel_pipe_enable {
-	struct trace_entry ent;
-	u32 frame[3];
-	u32 scanline[3];
-	enum pipe pipe;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_pipe_disable {
-	struct trace_entry ent;
-	u32 frame[3];
-	u32 scanline[3];
-	enum pipe pipe;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_pipe_crc {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 crcs[5];
-	char __data[0];
-};
-
-struct trace_event_raw_intel_cpu_fifo_underrun {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_pch_fifo_underrun {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_memory_cxsr {
-	struct trace_entry ent;
-	u32 frame[3];
-	u32 scanline[3];
-	bool old;
-	bool new;
-	char __data[0];
-};
-
-struct trace_event_raw_g4x_wm {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u16 primary;
-	u16 sprite;
-	u16 cursor;
-	u16 sr_plane;
-	u16 sr_cursor;
-	u16 sr_fbc;
-	u16 hpll_plane;
-	u16 hpll_cursor;
-	u16 hpll_fbc;
-	bool cxsr;
-	bool hpll;
-	bool fbc;
-	char __data[0];
-};
-
-struct trace_event_raw_vlv_wm {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 level;
-	u32 cxsr;
-	u32 primary;
-	u32 sprite0;
-	u32 sprite1;
-	u32 cursor;
-	u32 sr_plane;
-	u32 sr_cursor;
-	char __data[0];
-};
-
-struct trace_event_raw_vlv_fifo_size {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 sprite0_start;
-	u32 sprite1_start;
-	u32 fifo_size;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_update_plane {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	int src[4];
-	int dst[4];
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_disable_plane {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_pipe_update_start {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 min;
-	u32 max;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_pipe_update_vblank_evaded {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	u32 min;
-	u32 max;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_pipe_update_end {
-	struct trace_entry ent;
-	enum pipe pipe;
-	u32 frame;
-	u32 scanline;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_object_create {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	u64 size;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_shrink {
-	struct trace_entry ent;
-	int dev;
-	long unsigned int target;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_vma_bind {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	struct i915_address_space *vm;
-	u64 offset;
-	u64 size;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_vma_unbind {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	struct i915_address_space *vm;
-	u64 offset;
-	u64 size;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_object_pwrite {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	u64 offset;
-	u64 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_object_pread {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	u64 offset;
-	u64 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_object_fault {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	u64 index;
-	bool gtt;
-	bool write;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_object {
-	struct trace_entry ent;
-	struct drm_i915_gem_object *obj;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_evict {
-	struct trace_entry ent;
-	u32 dev;
-	struct i915_address_space *vm;
-	u64 size;
-	u64 align;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_evict_node {
-	struct trace_entry ent;
-	u32 dev;
-	struct i915_address_space *vm;
-	u64 start;
-	u64 size;
-	long unsigned int color;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_gem_evict_vm {
-	struct trace_entry ent;
-	u32 dev;
-	struct i915_address_space *vm;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_request_queue {
-	struct trace_entry ent;
-	u32 dev;
-	u64 ctx;
-	u16 class;
-	u16 instance;
-	u32 seqno;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_request {
-	struct trace_entry ent;
-	u32 dev;
-	u64 ctx;
-	u16 class;
-	u16 instance;
-	u32 seqno;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_request_wait_begin {
-	struct trace_entry ent;
-	u32 dev;
-	u64 ctx;
-	u16 class;
-	u16 instance;
-	u32 seqno;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_reg_rw {
-	struct trace_entry ent;
-	u64 val;
-	u32 reg;
-	u16 write;
-	u16 len;
-	char __data[0];
-};
-
-struct trace_event_raw_intel_gpu_freq_change {
-	struct trace_entry ent;
-	u32 freq;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_ppgtt {
-	struct trace_entry ent;
-	struct i915_address_space *vm;
-	u32 dev;
-	char __data[0];
-};
-
-struct trace_event_raw_i915_context {
-	struct trace_entry ent;
-	u32 dev;
-	struct i915_gem_context *ctx;
-	struct i915_address_space *vm;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_intel_pipe_enable {};
-
-struct trace_event_data_offsets_intel_pipe_disable {};
-
-struct trace_event_data_offsets_intel_pipe_crc {};
-
-struct trace_event_data_offsets_intel_cpu_fifo_underrun {};
-
-struct trace_event_data_offsets_intel_pch_fifo_underrun {};
-
-struct trace_event_data_offsets_intel_memory_cxsr {};
-
-struct trace_event_data_offsets_g4x_wm {};
-
-struct trace_event_data_offsets_vlv_wm {};
-
-struct trace_event_data_offsets_vlv_fifo_size {};
-
-struct trace_event_data_offsets_intel_update_plane {
-	u32 name;
-};
-
-struct trace_event_data_offsets_intel_disable_plane {
-	u32 name;
-};
-
-struct trace_event_data_offsets_i915_pipe_update_start {};
-
-struct trace_event_data_offsets_i915_pipe_update_vblank_evaded {};
-
-struct trace_event_data_offsets_i915_pipe_update_end {};
-
-struct trace_event_data_offsets_i915_gem_object_create {};
-
-struct trace_event_data_offsets_i915_gem_shrink {};
-
-struct trace_event_data_offsets_i915_vma_bind {};
-
-struct trace_event_data_offsets_i915_vma_unbind {};
-
-struct trace_event_data_offsets_i915_gem_object_pwrite {};
-
-struct trace_event_data_offsets_i915_gem_object_pread {};
-
-struct trace_event_data_offsets_i915_gem_object_fault {};
-
-struct trace_event_data_offsets_i915_gem_object {};
-
-struct trace_event_data_offsets_i915_gem_evict {};
-
-struct trace_event_data_offsets_i915_gem_evict_node {};
-
-struct trace_event_data_offsets_i915_gem_evict_vm {};
-
-struct trace_event_data_offsets_i915_request_queue {};
-
-struct trace_event_data_offsets_i915_request {};
-
-struct trace_event_data_offsets_i915_request_wait_begin {};
-
-struct trace_event_data_offsets_i915_reg_rw {};
-
-struct trace_event_data_offsets_intel_gpu_freq_change {};
-
-struct trace_event_data_offsets_i915_ppgtt {};
-
-struct trace_event_data_offsets_i915_context {};
-
-typedef void (*btf_trace_intel_pipe_enable)(void *, struct intel_crtc *);
-
-typedef void (*btf_trace_intel_pipe_disable)(void *, struct intel_crtc *);
-
-typedef void (*btf_trace_intel_pipe_crc)(void *, struct intel_crtc *, const u32 *);
-
-typedef void (*btf_trace_intel_cpu_fifo_underrun)(void *, struct drm_i915_private *, enum pipe);
-
-typedef void (*btf_trace_intel_pch_fifo_underrun)(void *, struct drm_i915_private *, enum pipe);
-
-typedef void (*btf_trace_intel_memory_cxsr)(void *, struct drm_i915_private *, bool, bool);
-
-typedef void (*btf_trace_g4x_wm)(void *, struct intel_crtc *, const struct g4x_wm_values *);
-
-typedef void (*btf_trace_vlv_wm)(void *, struct intel_crtc *, const struct vlv_wm_values *);
-
-typedef void (*btf_trace_vlv_fifo_size)(void *, struct intel_crtc *, u32, u32, u32);
-
-typedef void (*btf_trace_intel_update_plane)(void *, struct drm_plane *, struct intel_crtc *);
-
-typedef void (*btf_trace_intel_disable_plane)(void *, struct drm_plane *, struct intel_crtc *);
-
-typedef void (*btf_trace_i915_pipe_update_start)(void *, struct intel_crtc *);
-
-typedef void (*btf_trace_i915_pipe_update_vblank_evaded)(void *, struct intel_crtc *);
-
-typedef void (*btf_trace_i915_pipe_update_end)(void *, struct intel_crtc *, u32, int);
-
-typedef void (*btf_trace_i915_gem_object_create)(void *, struct drm_i915_gem_object *);
-
-typedef void (*btf_trace_i915_gem_shrink)(void *, struct drm_i915_private *, long unsigned int, unsigned int);
-
-typedef void (*btf_trace_i915_vma_bind)(void *, struct i915_vma *, unsigned int);
-
-typedef void (*btf_trace_i915_vma_unbind)(void *, struct i915_vma *);
-
-typedef void (*btf_trace_i915_gem_object_pwrite)(void *, struct drm_i915_gem_object *, u64, u64);
-
-typedef void (*btf_trace_i915_gem_object_pread)(void *, struct drm_i915_gem_object *, u64, u64);
-
-typedef void (*btf_trace_i915_gem_object_fault)(void *, struct drm_i915_gem_object *, u64, bool, bool);
-
-typedef void (*btf_trace_i915_gem_object_clflush)(void *, struct drm_i915_gem_object *);
-
-typedef void (*btf_trace_i915_gem_object_destroy)(void *, struct drm_i915_gem_object *);
-
-typedef void (*btf_trace_i915_gem_evict)(void *, struct i915_address_space *, u64, u64, unsigned int);
-
-typedef void (*btf_trace_i915_gem_evict_node)(void *, struct i915_address_space *, struct drm_mm_node *, unsigned int);
-
-typedef void (*btf_trace_i915_gem_evict_vm)(void *, struct i915_address_space *);
-
-typedef void (*btf_trace_i915_request_queue)(void *, struct i915_request *, u32);
-
-typedef void (*btf_trace_i915_request_add)(void *, struct i915_request *);
-
-typedef void (*btf_trace_i915_request_retire)(void *, struct i915_request *);
-
-typedef void (*btf_trace_i915_request_wait_begin)(void *, struct i915_request *, unsigned int);
-
-typedef void (*btf_trace_i915_request_wait_end)(void *, struct i915_request *);
-
-typedef void (*btf_trace_i915_reg_rw)(void *, bool, i915_reg_t, u64, int, bool);
-
-typedef void (*btf_trace_intel_gpu_freq_change)(void *, u32);
-
-typedef void (*btf_trace_i915_ppgtt_create)(void *, struct i915_address_space *);
-
-typedef void (*btf_trace_i915_ppgtt_release)(void *, struct i915_address_space *);
-
-typedef void (*btf_trace_i915_context_create)(void *, struct i915_gem_context *);
-
-typedef void (*btf_trace_i915_context_free)(void *, struct i915_gem_context *);
-
-struct i915_global_vma {
-	struct i915_global base;
-	struct kmem_cache *slab_vmas;
-};
-
-struct i915_vma_work {
-	struct dma_fence_work base;
-	struct i915_vma *vma;
-	enum i915_cache_level cache_level;
-	unsigned int flags;
-};
-
-struct uc_css_header {
-	u32 module_type;
-	u32 header_size_dw;
-	u32 header_version;
-	u32 module_id;
-	u32 module_vendor;
-	u32 date;
-	u32 size_dw;
-	u32 key_size_dw;
-	u32 modulus_size_dw;
-	u32 exponent_size_dw;
-	u32 time;
-	char username[8];
-	char buildnumber[12];
-	u32 sw_version;
-	u32 reserved[14];
-	u32 header_info;
-};
-
-struct uc_fw_blob {
-	u8 major;
-	u8 minor;
-	const char *path;
-} __attribute__((packed));
-
-struct uc_fw_platform_requirement {
-	enum intel_platform p;
-	u8 rev;
-	const struct uc_fw_blob blobs[2];
-} __attribute__((packed));
-
-enum intel_guc_msg_type {
-	INTEL_GUC_MSG_TYPE_REQUEST = 0,
-	INTEL_GUC_MSG_TYPE_RESPONSE = 15,
-};
-
-enum intel_guc_action {
-	INTEL_GUC_ACTION_DEFAULT = 0,
-	INTEL_GUC_ACTION_REQUEST_PREEMPTION = 2,
-	INTEL_GUC_ACTION_REQUEST_ENGINE_RESET = 3,
-	INTEL_GUC_ACTION_ALLOCATE_DOORBELL = 16,
-	INTEL_GUC_ACTION_DEALLOCATE_DOORBELL = 32,
-	INTEL_GUC_ACTION_LOG_BUFFER_FILE_FLUSH_COMPLETE = 48,
-	INTEL_GUC_ACTION_UK_LOG_ENABLE_LOGGING = 64,
-	INTEL_GUC_ACTION_FORCE_LOG_BUFFER_FLUSH = 770,
-	INTEL_GUC_ACTION_ENTER_S_STATE = 1281,
-	INTEL_GUC_ACTION_EXIT_S_STATE = 1282,
-	INTEL_GUC_ACTION_SLPC_REQUEST = 12291,
-	INTEL_GUC_ACTION_SAMPLE_FORCEWAKE = 12293,
-	INTEL_GUC_ACTION_AUTHENTICATE_HUC = 16384,
-	INTEL_GUC_ACTION_REGISTER_COMMAND_TRANSPORT_BUFFER = 17669,
-	INTEL_GUC_ACTION_DEREGISTER_COMMAND_TRANSPORT_BUFFER = 17670,
-	INTEL_GUC_ACTION_LIMIT = 17671,
-};
-
-enum intel_guc_sleep_state_status {
-	INTEL_GUC_SLEEP_STATE_SUCCESS = 1,
-	INTEL_GUC_SLEEP_STATE_PREEMPT_TO_IDLE_FAILED = 2,
-	INTEL_GUC_SLEEP_STATE_ENGINE_RESET_FAILED = 3,
-};
-
-enum intel_guc_response_status {
-	INTEL_GUC_RESPONSE_STATUS_SUCCESS = 0,
-	INTEL_GUC_RESPONSE_STATUS_GENERIC_FAIL = 61440,
-};
-
-enum intel_guc_recv_message {
-	INTEL_GUC_RECV_MSG_CRASH_DUMP_POSTED = 2,
-	INTEL_GUC_RECV_MSG_FLUSH_LOG_BUFFER = 8,
-};
-
-struct guc_policy {
-	u32 execution_quantum;
-	u32 preemption_time;
-	u32 fault_time;
-	u32 policy_flags;
-	u32 reserved[8];
-};
-
-struct guc_policies {
-	struct guc_policy policy[20];
-	u32 submission_queue_depth[5];
-	u32 dpc_promote_time;
-	u32 is_valid;
-	u32 max_num_work_items;
-	u32 reserved[4];
-};
-
-struct guc_mmio_reg {
-	u32 offset;
-	u32 value;
-	u32 flags;
-};
-
-struct guc_mmio_regset {
-	struct guc_mmio_reg registers[64];
-	u32 values_valid;
-	u32 number_of_registers;
-};
-
-struct guc_mmio_reg_state {
-	struct guc_mmio_regset engine_reg[80];
-	u32 reserved[98];
-};
-
-struct guc_gt_system_info {
-	u32 slice_enabled;
-	u32 rcs_enabled;
-	u32 reserved0;
-	u32 bcs_enabled;
-	u32 vdbox_enable_mask;
-	u32 vdbox_sfc_support_mask;
-	u32 vebox_enable_mask;
-	u32 reserved[9];
-};
-
-struct guc_ct_pool_entry {
-	struct guc_ct_buffer_desc desc;
-	u32 reserved[7];
-} __attribute__((packed));
-
-struct guc_clients_info {
-	u32 clients_num;
-	u32 reserved0[13];
-	u32 ct_pool_addr;
-	u32 ct_pool_count;
-	u32 reserved[4];
-};
-
-struct guc_ads {
-	u32 reg_state_addr;
-	u32 reg_state_buffer;
-	u32 scheduler_policies;
-	u32 gt_system_info;
-	u32 clients_info;
-	u32 control_data;
-	u32 golden_context_lrca[5];
-	u32 eng_state_size[5];
-	u32 reserved[16];
-};
-
-struct __guc_ads_blob {
-	struct guc_ads ads;
-	struct guc_policies policies;
-	struct guc_mmio_reg_state reg_state;
-	struct guc_gt_system_info system_info;
-	struct guc_clients_info clients_info;
-	struct guc_ct_pool_entry ct_pool[2];
-	u8 reg_state_buffer[40960];
-};
-
-struct ct_request {
-	struct list_head link;
-	u32 fence;
-	u32 status;
-	u32 response_len;
-	u32 *response_buf;
-};
-
-struct ct_incoming_request {
-	struct list_head link;
-	u32 msg[0];
-};
-
-enum {
-	CTB_SEND = 0,
-	CTB_RECV = 1,
-};
-
-enum {
-	CTB_OWNER_HOST = 0,
-};
-
-struct guc_log_buffer_state {
-	u32 marker[2];
-	u32 read_ptr;
-	u32 write_ptr;
-	u32 size;
-	u32 sampled_write_ptr;
-	union {
-		struct {
-			u32 flush_to_file: 1;
-			u32 buffer_full_cnt: 4;
-			u32 reserved: 27;
-		};
-		u32 flags;
-	};
-	u32 version;
-};
-
-struct guc_wq_item {
-	u32 header;
-	u32 context_desc;
-	u32 submit_element_info;
-	u32 fence_id;
-};
-
-struct guc_process_desc {
-	u32 stage_id;
-	u64 db_base_addr;
-	u32 head;
-	u32 tail;
-	u32 error_offset;
-	u64 wq_base_addr;
-	u32 wq_size_bytes;
-	u32 wq_status;
-	u32 engine_presence;
-	u32 priority;
-	u32 reserved[30];
-} __attribute__((packed));
-
-struct guc_doorbell_info {
-	u32 db_status;
-	u32 cookie;
-	u32 reserved[14];
-};
-
-enum hdmi_force_audio {
-	HDMI_AUDIO_OFF_DVI = 4294967294,
-	HDMI_AUDIO_OFF = 4294967295,
-	HDMI_AUDIO_AUTO = 0,
-	HDMI_AUDIO_ON = 1,
-};
-
-struct intel_digital_connector_state {
-	struct drm_connector_state base;
-	enum hdmi_force_audio force_audio;
-	int broadcast_rgb;
-};
-
-struct component_ops {
-	int (*bind)(struct device *, struct device *, void *);
-	void (*unbind)(struct device *, struct device *, void *);
-};
-
-struct drm_audio_component_ops {
-	struct module *owner;
-	long unsigned int (*get_power)(struct device *);
-	void (*put_power)(struct device *, long unsigned int);
-	void (*codec_wake_override)(struct device *, bool);
-	int (*get_cdclk_freq)(struct device *);
-	int (*sync_audio_rate)(struct device *, int, int, int);
-	int (*get_eld)(struct device *, int, int, bool *, unsigned char *, int);
-};
-
-struct drm_audio_component;
-
-struct drm_audio_component_audio_ops {
-	void *audio_ptr;
-	void (*pin_eld_notify)(void *, int, int);
-	int (*pin2port)(void *, int);
-	int (*master_bind)(struct device *, struct drm_audio_component *);
-	void (*master_unbind)(struct device *, struct drm_audio_component *);
-};
-
-struct drm_audio_component {
-	struct device *dev;
-	const struct drm_audio_component_ops *ops;
-	const struct drm_audio_component_audio_ops *audio_ops;
-};
-
-enum i915_component_type {
-	I915_COMPONENT_AUDIO = 1,
-	I915_COMPONENT_HDCP = 2,
-};
-
-struct i915_audio_component {
-	struct drm_audio_component base;
-	int aud_sample_rate[9];
-};
-
-struct dp_aud_n_m {
-	int sample_rate;
-	int clock;
-	u16 m;
-	u16 n;
-};
-
-struct hdmi_aud_ncts {
-	int sample_rate;
-	int clock;
-	int n;
-	int cts;
-};
-
-enum phy {
-	PHY_NONE = 4294967295,
-	PHY_A = 0,
-	PHY_B = 1,
-	PHY_C = 2,
-	PHY_D = 3,
-	PHY_E = 4,
-	PHY_F = 5,
-	PHY_G = 6,
-	PHY_H = 7,
-	PHY_I = 8,
-	I915_MAX_PHYS = 9,
-};
-
-enum mipi_seq_element {
-	MIPI_SEQ_ELEM_END = 0,
-	MIPI_SEQ_ELEM_SEND_PKT = 1,
-	MIPI_SEQ_ELEM_DELAY = 2,
-	MIPI_SEQ_ELEM_GPIO = 3,
-	MIPI_SEQ_ELEM_I2C = 4,
-	MIPI_SEQ_ELEM_SPI = 5,
-	MIPI_SEQ_ELEM_PMIC = 6,
-	MIPI_SEQ_ELEM_MAX = 7,
-};
-
-struct vbt_header {
-	u8 signature[20];
-	u16 version;
-	u16 header_size;
-	u16 vbt_size;
-	u8 vbt_checksum;
-	u8 reserved0;
-	u32 bdb_offset;
-	u32 aim_offset[4];
-};
-
-struct bdb_header {
-	u8 signature[16];
-	u16 version;
-	u16 header_size;
-	u16 bdb_size;
-};
-
-enum bdb_block_id {
-	BDB_GENERAL_FEATURES = 1,
-	BDB_GENERAL_DEFINITIONS = 2,
-	BDB_OLD_TOGGLE_LIST = 3,
-	BDB_MODE_SUPPORT_LIST = 4,
-	BDB_GENERIC_MODE_TABLE = 5,
-	BDB_EXT_MMIO_REGS = 6,
-	BDB_SWF_IO = 7,
-	BDB_SWF_MMIO = 8,
-	BDB_PSR = 9,
-	BDB_MODE_REMOVAL_TABLE = 10,
-	BDB_CHILD_DEVICE_TABLE = 11,
-	BDB_DRIVER_FEATURES = 12,
-	BDB_DRIVER_PERSISTENCE = 13,
-	BDB_EXT_TABLE_PTRS = 14,
-	BDB_DOT_CLOCK_OVERRIDE = 15,
-	BDB_DISPLAY_SELECT = 16,
-	BDB_DRIVER_ROTATION = 18,
-	BDB_DISPLAY_REMOVE = 19,
-	BDB_OEM_CUSTOM = 20,
-	BDB_EFP_LIST = 21,
-	BDB_SDVO_LVDS_OPTIONS = 22,
-	BDB_SDVO_PANEL_DTDS = 23,
-	BDB_SDVO_LVDS_PNP_IDS = 24,
-	BDB_SDVO_LVDS_POWER_SEQ = 25,
-	BDB_TV_OPTIONS = 26,
-	BDB_EDP = 27,
-	BDB_LVDS_OPTIONS = 40,
-	BDB_LVDS_LFP_DATA_PTRS = 41,
-	BDB_LVDS_LFP_DATA = 42,
-	BDB_LVDS_BACKLIGHT = 43,
-	BDB_LVDS_POWER = 44,
-	BDB_MIPI_CONFIG = 52,
-	BDB_MIPI_SEQUENCE = 53,
-	BDB_COMPRESSION_PARAMETERS = 56,
-	BDB_SKIP = 254,
-};
-
-struct bdb_general_features {
-	u8 panel_fitting: 2;
-	u8 flexaim: 1;
-	u8 msg_enable: 1;
-	u8 clear_screen: 3;
-	u8 color_flip: 1;
-	u8 download_ext_vbt: 1;
-	u8 enable_ssc: 1;
-	u8 ssc_freq: 1;
-	u8 enable_lfp_on_override: 1;
-	u8 disable_ssc_ddt: 1;
-	u8 underscan_vga_timings: 1;
-	u8 display_clock_mode: 1;
-	u8 vbios_hotplug_support: 1;
-	u8 disable_smooth_vision: 1;
-	u8 single_dvi: 1;
-	u8 rotate_180: 1;
-	u8 fdi_rx_polarity_inverted: 1;
-	u8 vbios_extended_mode: 1;
-	u8 copy_ilfp_dtd_to_sdvo_lvds_dtd: 1;
-	u8 panel_best_fit_timing: 1;
-	u8 ignore_strap_state: 1;
-	u8 legacy_monitor_detect;
-	u8 int_crt_support: 1;
-	u8 int_tv_support: 1;
-	u8 int_efp_support: 1;
-	u8 dp_ssc_enable: 1;
-	u8 dp_ssc_freq: 1;
-	u8 dp_ssc_dongle_supported: 1;
-	u8 rsvd11: 2;
-};
-
-enum vbt_gmbus_ddi {
-	DDC_BUS_DDI_B = 1,
-	DDC_BUS_DDI_C = 2,
-	DDC_BUS_DDI_D = 3,
-	DDC_BUS_DDI_F = 4,
-	ICL_DDC_BUS_DDI_A = 1,
-	ICL_DDC_BUS_DDI_B = 2,
-	TGL_DDC_BUS_DDI_C = 3,
-	ICL_DDC_BUS_PORT_1 = 4,
-	ICL_DDC_BUS_PORT_2 = 5,
-	ICL_DDC_BUS_PORT_3 = 6,
-	ICL_DDC_BUS_PORT_4 = 7,
-	TGL_DDC_BUS_PORT_5 = 8,
-	TGL_DDC_BUS_PORT_6 = 9,
-};
-
-struct bdb_general_definitions {
-	u8 crt_ddc_gmbus_pin;
-	u8 dpms_acpi: 1;
-	u8 skip_boot_crt_detect: 1;
-	u8 dpms_aim: 1;
-	u8 rsvd1: 5;
-	u8 boot_display[2];
-	u8 child_dev_size;
-	u8 devices[0];
-};
-
-struct psr_table {
-	u8 full_link: 1;
-	u8 require_aux_to_wakeup: 1;
-	u8 feature_bits_rsvd: 6;
-	u8 idle_frames: 4;
-	u8 lines_to_wait: 3;
-	u8 wait_times_rsvd: 1;
-	u16 tp1_wakeup_time;
-	u16 tp2_tp3_wakeup_time;
-};
-
-struct bdb_psr {
-	struct psr_table psr_table[16];
-	u32 psr2_tp2_tp3_wakeup_time;
-};
-
-struct bdb_driver_features {
-	u8 boot_dev_algorithm: 1;
-	u8 block_display_switch: 1;
-	u8 allow_display_switch: 1;
-	u8 hotplug_dvo: 1;
-	u8 dual_view_zoom: 1;
-	u8 int15h_hook: 1;
-	u8 sprite_in_clone: 1;
-	u8 primary_lfp_id: 1;
-	u16 boot_mode_x;
-	u16 boot_mode_y;
-	u8 boot_mode_bpp;
-	u8 boot_mode_refresh;
-	u16 enable_lfp_primary: 1;
-	u16 selective_mode_pruning: 1;
-	u16 dual_frequency: 1;
-	u16 render_clock_freq: 1;
-	u16 nt_clone_support: 1;
-	u16 power_scheme_ui: 1;
-	u16 sprite_display_assign: 1;
-	u16 cui_aspect_scaling: 1;
-	u16 preserve_aspect_ratio: 1;
-	u16 sdvo_device_power_down: 1;
-	u16 crt_hotplug: 1;
-	u16 lvds_config: 2;
-	u16 tv_hotplug: 1;
-	u16 hdmi_config: 2;
-	u8 static_display: 1;
-	u8 reserved2: 7;
-	u16 legacy_crt_max_x;
-	u16 legacy_crt_max_y;
-	u8 legacy_crt_max_refresh;
-	u8 hdmi_termination;
-	u8 custom_vbt_version;
-	u16 rmpm_enabled: 1;
-	u16 s2ddt_enabled: 1;
-	u16 dpst_enabled: 1;
-	u16 bltclt_enabled: 1;
-	u16 adb_enabled: 1;
-	u16 drrs_enabled: 1;
-	u16 grs_enabled: 1;
-	u16 gpmt_enabled: 1;
-	u16 tbt_enabled: 1;
-	u16 psr_enabled: 1;
-	u16 ips_enabled: 1;
-	u16 reserved3: 4;
-	u16 pc_feature_valid: 1;
-} __attribute__((packed));
-
-struct bdb_sdvo_lvds_options {
-	u8 panel_backlight;
-	u8 h40_set_panel_type;
-	u8 panel_type;
-	u8 ssc_clk_freq;
-	u16 als_low_trip;
-	u16 als_high_trip;
-	u8 sclalarcoeff_tab_row_num;
-	u8 sclalarcoeff_tab_row_size;
-	u8 coefficient[8];
-	u8 panel_misc_bits_1;
-	u8 panel_misc_bits_2;
-	u8 panel_misc_bits_3;
-	u8 panel_misc_bits_4;
-};
-
-struct lvds_dvo_timing {
-	u16 clock;
-	u8 hactive_lo;
-	u8 hblank_lo;
-	u8 hblank_hi: 4;
-	u8 hactive_hi: 4;
-	u8 vactive_lo;
-	u8 vblank_lo;
-	u8 vblank_hi: 4;
-	u8 vactive_hi: 4;
-	u8 hsync_off_lo;
-	u8 hsync_pulse_width_lo;
-	u8 vsync_pulse_width_lo: 4;
-	u8 vsync_off_lo: 4;
-	u8 vsync_pulse_width_hi: 2;
-	u8 vsync_off_hi: 2;
-	u8 hsync_pulse_width_hi: 2;
-	u8 hsync_off_hi: 2;
-	u8 himage_lo;
-	u8 vimage_lo;
-	u8 vimage_hi: 4;
-	u8 himage_hi: 4;
-	u8 h_border;
-	u8 v_border;
-	u8 rsvd1: 3;
-	u8 digital: 2;
-	u8 vsync_positive: 1;
-	u8 hsync_positive: 1;
-	u8 non_interlaced: 1;
-};
-
-struct bdb_sdvo_panel_dtds {
-	struct lvds_dvo_timing dtds[4];
-};
-
-struct edp_fast_link_params {
-	u8 rate: 4;
-	u8 lanes: 4;
-	u8 preemphasis: 4;
-	u8 vswing: 4;
-};
-
-struct edp_pwm_delays {
-	u16 pwm_on_to_backlight_enable;
-	u16 backlight_disable_to_pwm_off;
-};
-
-struct edp_full_link_params {
-	u8 preemphasis: 4;
-	u8 vswing: 4;
-};
-
-struct bdb_edp {
-	struct edp_power_seq power_seqs[16];
-	u32 color_depth;
-	struct edp_fast_link_params fast_link_params[16];
-	u32 sdrrs_msa_timing_delay;
-	u16 edp_s3d_feature;
-	u16 edp_t3_optimization;
-	u64 edp_vswing_preemph;
-	u16 fast_link_training;
-	u16 dpcd_600h_write_required;
-	struct edp_pwm_delays pwm_delays[16];
-	u16 full_link_params_provided;
-	struct edp_full_link_params full_link_params[16];
-} __attribute__((packed));
-
-struct bdb_lvds_options {
-	u8 panel_type;
-	u8 panel_type2;
-	u8 pfit_mode: 2;
-	u8 pfit_text_mode_enhanced: 1;
-	u8 pfit_gfx_mode_enhanced: 1;
-	u8 pfit_ratio_auto: 1;
-	u8 pixel_dither: 1;
-	u8 lvds_edid: 1;
-	u8 rsvd2: 1;
-	u8 rsvd4;
-	u32 lvds_panel_channel_bits;
-	u16 ssc_bits;
-	u16 ssc_freq;
-	u16 ssc_ddt;
-	u16 panel_color_depth;
-	u32 dps_panel_type_bits;
-	u32 blt_control_type_bits;
-	u16 lcdvcc_s0_enable;
-	u32 rotation;
-} __attribute__((packed));
-
-struct lvds_lfp_data_ptr {
-	u16 fp_timing_offset;
-	u8 fp_table_size;
-	u16 dvo_timing_offset;
-	u8 dvo_table_size;
-	u16 panel_pnp_id_offset;
-	u8 pnp_table_size;
-} __attribute__((packed));
-
-struct bdb_lvds_lfp_data_ptrs {
-	u8 lvds_entries;
-	struct lvds_lfp_data_ptr ptr[16];
-} __attribute__((packed));
-
-struct lvds_fp_timing {
-	u16 x_res;
-	u16 y_res;
-	u32 lvds_reg;
-	u32 lvds_reg_val;
-	u32 pp_on_reg;
-	u32 pp_on_reg_val;
-	u32 pp_off_reg;
-	u32 pp_off_reg_val;
-	u32 pp_cycle_reg;
-	u32 pp_cycle_reg_val;
-	u32 pfit_reg;
-	u32 pfit_reg_val;
-	u16 terminator;
-} __attribute__((packed));
-
-struct lvds_pnp_id {
-	u16 mfg_name;
-	u16 product_code;
-	u32 serial;
-	u8 mfg_week;
-	u8 mfg_year;
-} __attribute__((packed));
-
-struct lvds_lfp_data_entry {
-	struct lvds_fp_timing fp_timing;
-	struct lvds_dvo_timing dvo_timing;
-	struct lvds_pnp_id pnp_id;
-} __attribute__((packed));
-
-struct bdb_lvds_lfp_data {
-	struct lvds_lfp_data_entry data[16];
-};
-
-struct lfp_backlight_data_entry {
-	u8 type: 2;
-	u8 active_low_pwm: 1;
-	u8 obsolete1: 5;
-	u16 pwm_freq_hz;
-	u8 min_brightness;
-	u8 obsolete2;
-	u8 obsolete3;
-} __attribute__((packed));
-
-struct lfp_backlight_control_method {
-	u8 type: 4;
-	u8 controller: 4;
-};
-
-struct bdb_lfp_backlight_data {
-	u8 entry_size;
-	struct lfp_backlight_data_entry data[16];
-	u8 level[16];
-	struct lfp_backlight_control_method backlight_control[16];
-} __attribute__((packed));
-
-struct bdb_mipi_config {
-	struct mipi_config config[6];
-	struct mipi_pps_data pps[6];
-};
-
-struct bdb_mipi_sequence {
-	u8 version;
-	u8 data[0];
-};
-
-struct intel_bw_state {
-	struct drm_private_state base;
-	unsigned int data_rate[4];
-	u8 num_active_planes[4];
-};
-
-struct intel_qgv_point {
-	u16 dclk;
-	u16 t_rp;
-	u16 t_rdpre;
-	u16 t_rc;
-	u16 t_ras;
-	u16 t_rcd;
-};
-
-struct intel_qgv_info {
-	struct intel_qgv_point points[3];
-	u8 num_points;
-	u8 num_channels;
-	u8 t_bl;
-	enum intel_dram_type dram_type;
-};
-
-struct intel_sa_info {
-	u16 displayrtids;
-	u8 deburst;
-	u8 deprogbwlimit;
-};
-
-struct drm_color_ctm {
-	__u64 matrix[9];
-};
-
-enum {
-	PROCMON_0_85V_DOT_0 = 0,
-	PROCMON_0_95V_DOT_0 = 1,
-	PROCMON_0_95V_DOT_1 = 2,
-	PROCMON_1_05V_DOT_0 = 3,
-	PROCMON_1_05V_DOT_1 = 4,
-};
-
-struct cnl_procmon {
-	u32 dw1;
-	u32 dw9;
-	u32 dw10;
-};
-
-enum intel_broadcast_rgb {
-	INTEL_BROADCAST_RGB_AUTO = 0,
-	INTEL_BROADCAST_RGB_FULL = 1,
-	INTEL_BROADCAST_RGB_LIMITED = 2,
-};
-
-enum hdmi_packet_type {
-	HDMI_PACKET_TYPE_NULL = 0,
-	HDMI_PACKET_TYPE_AUDIO_CLOCK_REGEN = 1,
-	HDMI_PACKET_TYPE_AUDIO_SAMPLE = 2,
-	HDMI_PACKET_TYPE_GENERAL_CONTROL = 3,
-	HDMI_PACKET_TYPE_ACP = 4,
-	HDMI_PACKET_TYPE_ISRC1 = 5,
-	HDMI_PACKET_TYPE_ISRC2 = 6,
-	HDMI_PACKET_TYPE_ONE_BIT_AUDIO_SAMPLE = 7,
-	HDMI_PACKET_TYPE_DST_AUDIO = 8,
-	HDMI_PACKET_TYPE_HBR_AUDIO_STREAM = 9,
-	HDMI_PACKET_TYPE_GAMUT_METADATA = 10,
-};
-
-struct drm_i915_get_pipe_from_crtc_id {
-	__u32 crtc_id;
-	__u32 pipe;
-};
-
-enum dpio_channel {
-	DPIO_CH0 = 0,
-	DPIO_CH1 = 1,
-};
-
-struct intel_cursor_error_state {
-	u32 control;
-	u32 position;
-	u32 base;
-	u32 size;
-};
-
-struct intel_pipe_error_state {
-	bool power_domain_on;
-	u32 source;
-	u32 stat;
-};
-
-struct intel_plane_error_state {
-	u32 control;
-	u32 stride;
-	u32 size;
-	u32 pos;
-	u32 addr;
-	u32 surface;
-	u32 tile_offset;
-};
-
-struct intel_transcoder_error_state {
-	bool available;
-	bool power_domain_on;
-	enum transcoder cpu_transcoder;
-	u32 conf;
-	u32 htotal;
-	u32 hblank;
-	u32 hsync;
-	u32 vtotal;
-	u32 vblank;
-	u32 vsync;
-};
-
-struct intel_display_error_state {
-	u32 power_well_driver;
-	struct intel_cursor_error_state cursor[4];
-	struct intel_pipe_error_state pipe[4];
-	struct intel_plane_error_state plane[4];
-	struct intel_transcoder_error_state transcoder[5];
-};
-
-struct drm_i915_error_state_buf {
-	struct drm_i915_private *i915;
-	struct scatterlist *sgl;
-	struct scatterlist *cur;
-	struct scatterlist *end;
-	char *buf;
-	size_t bytes;
-	size_t size;
-	loff_t iter;
-	int err;
-};
-
-enum link_m_n_set {
-	M1_N1 = 0,
-	M2_N2 = 1,
-};
-
-struct intel_load_detect_pipe {
-	struct drm_atomic_state *restore_state;
-};
-
-struct intel_limit {
-	struct {
-		int min;
-		int max;
-	} dot;
-	struct {
-		int min;
-		int max;
-	} vco;
-	struct {
-		int min;
-		int max;
-	} n;
-	struct {
-		int min;
-		int max;
-	} m;
-	struct {
-		int min;
-		int max;
-	} m1;
-	struct {
-		int min;
-		int max;
-	} m2;
-	struct {
-		int min;
-		int max;
-	} p;
-	struct {
-		int min;
-		int max;
-	} p1;
-	struct {
-		int dot_limit;
-		int p2_slow;
-		int p2_fast;
-	} p2;
-};
-
-struct wait_rps_boost {
-	struct wait_queue_entry wait;
-	struct drm_crtc *crtc;
-	struct i915_request *request;
-};
-
-struct skl_hw_state {
-	struct skl_ddb_entry ddb_y[8];
-	struct skl_ddb_entry ddb_uv[8];
-	struct skl_ddb_allocation ddb;
-	struct skl_pipe_wm wm;
-};
-
-enum skl_power_gate {
-	SKL_PG0 = 0,
-	SKL_PG1 = 1,
-	SKL_PG2 = 2,
-	ICL_PG3 = 3,
-	ICL_PG4 = 4,
-};
-
-struct bxt_ddi_phy_info {
-	bool dual_channel;
-	enum dpio_phy rcomp_phy;
-	int reset_delay;
-	u32 pwron_mask;
-	struct {
-		enum port port;
-	} channel[2];
-};
-
-struct hsw_wrpll_rnp {
-	unsigned int p;
-	unsigned int n2;
-	unsigned int r2;
-};
-
-struct skl_dpll_regs {
-	i915_reg_t ctl;
-	i915_reg_t cfgcr1;
-	i915_reg_t cfgcr2;
-};
-
-struct skl_wrpll_context {
-	u64 min_deviation;
-	u64 central_freq;
-	u64 dco_freq;
-	unsigned int p;
-};
-
-struct skl_wrpll_params {
-	u32 dco_fraction;
-	u32 dco_integer;
-	u32 qdiv_ratio;
-	u32 qdiv_mode;
-	u32 kdiv;
-	u32 pdiv;
-	u32 central_freq;
-};
-
-struct bxt_clk_div {
-	int clock;
-	u32 p1;
-	u32 p2;
-	u32 m2_int;
-	u32 m2_frac;
-	bool m2_frac_en;
-	u32 n;
-	int vco;
-};
-
-struct icl_combo_pll_params {
-	int clock;
-	struct skl_wrpll_params wrpll;
-};
-
-struct hdcp2_rep_stream_manage {
-	u8 msg_id;
-	u8 seq_num_m[3];
-	__be16 k;
-	struct hdcp2_streamid_type streams[1];
-};
-
-enum hdcp_port_type {
-	HDCP_PORT_TYPE_INVALID = 0,
-	HDCP_PORT_TYPE_INTEGRATED = 1,
-	HDCP_PORT_TYPE_LSPCON = 2,
-	HDCP_PORT_TYPE_CPDP = 3,
-};
-
-enum check_link_response {
-	HDCP_LINK_PROTECTED = 0,
-	HDCP_TOPOLOGY_CHANGE = 1,
-	HDCP_LINK_INTEGRITY_FAILURE = 2,
-	HDCP_REAUTH_REQUEST = 3,
-};
-
-struct intel_hdmi_lpe_audio_port_pdata {
-	u8 eld[128];
-	int port;
-	int pipe;
-	int ls_clock;
-	bool dp_output;
-};
-
-struct intel_hdmi_lpe_audio_pdata {
-	struct intel_hdmi_lpe_audio_port_pdata port[3];
-	int num_ports;
-	int num_pipes;
-	void (*notify_audio_lpe)(struct platform_device *, int);
-	spinlock_t lpe_audio_slock;
-};
-
-struct drm_intel_overlay_put_image {
-	__u32 flags;
-	__u32 bo_handle;
-	__u16 stride_Y;
-	__u16 stride_UV;
-	__u32 offset_Y;
-	__u32 offset_U;
-	__u32 offset_V;
-	__u16 src_width;
-	__u16 src_height;
-	__u16 src_scan_width;
-	__u16 src_scan_height;
-	__u32 crtc_id;
-	__u16 dst_x;
-	__u16 dst_y;
-	__u16 dst_width;
-	__u16 dst_height;
-};
-
-struct drm_intel_overlay_attrs {
-	__u32 flags;
-	__u32 color_key;
-	__s32 brightness;
-	__u32 contrast;
-	__u32 saturation;
-	__u32 gamma0;
-	__u32 gamma1;
-	__u32 gamma2;
-	__u32 gamma3;
-	__u32 gamma4;
-	__u32 gamma5;
-};
-
-struct overlay_registers {
-	u32 OBUF_0Y;
-	u32 OBUF_1Y;
-	u32 OBUF_0U;
-	u32 OBUF_0V;
-	u32 OBUF_1U;
-	u32 OBUF_1V;
-	u32 OSTRIDE;
-	u32 YRGB_VPH;
-	u32 UV_VPH;
-	u32 HORZ_PH;
-	u32 INIT_PHS;
-	u32 DWINPOS;
-	u32 DWINSZ;
-	u32 SWIDTH;
-	u32 SWIDTHSW;
-	u32 SHEIGHT;
-	u32 YRGBSCALE;
-	u32 UVSCALE;
-	u32 OCLRC0;
-	u32 OCLRC1;
-	u32 DCLRKV;
-	u32 DCLRKM;
-	u32 SCLRKVH;
-	u32 SCLRKVL;
-	u32 SCLRKEN;
-	u32 OCONFIG;
-	u32 OCMD;
-	u32 RESERVED1;
-	u32 OSTART_0Y;
-	u32 OSTART_1Y;
-	u32 OSTART_0U;
-	u32 OSTART_0V;
-	u32 OSTART_1U;
-	u32 OSTART_1V;
-	u32 OTILEOFF_0Y;
-	u32 OTILEOFF_1Y;
-	u32 OTILEOFF_0U;
-	u32 OTILEOFF_0V;
-	u32 OTILEOFF_1U;
-	u32 OTILEOFF_1V;
-	u32 FASTHSCALE;
-	u32 UVSCALEV;
-	u32 RESERVEDC[86];
-	u16 Y_VCOEFS[51];
-	u16 RESERVEDD[77];
-	u16 Y_HCOEFS[85];
-	u16 RESERVEDE[171];
-	u16 UV_VCOEFS[51];
-	u16 RESERVEDF[77];
-	u16 UV_HCOEFS[51];
-	u16 RESERVEDG[77];
-};
-
-struct intel_overlay_error_state {
-	struct overlay_registers regs;
-	long unsigned int base;
-	u32 dovsta;
-	u32 isr;
-};
-
-struct intel_overlay {
-	struct drm_i915_private *i915;
-	struct intel_context *context;
-	struct intel_crtc *crtc;
-	struct i915_vma *vma;
-	struct i915_vma *old_vma;
-	bool active;
-	bool pfit_active;
-	u32 pfit_vscale_ratio;
-	u32 color_key: 24;
-	u32 color_key_enabled: 1;
-	u32 brightness;
-	u32 contrast;
-	u32 saturation;
-	u32 old_xscale;
-	u32 old_yscale;
-	struct drm_i915_gem_object *reg_bo;
-	struct overlay_registers *regs;
-	u32 flip_addr;
-	struct i915_active last_flip;
-	void (*flip_complete)(struct intel_overlay *);
-};
-
-struct dp_sdp {
-	struct dp_sdp_header sdp_header;
-	u8 db[32];
-};
-
-struct intel_quirk {
-	int device;
-	int subsystem_vendor;
-	int subsystem_device;
-	void (*hook)(struct drm_i915_private *);
-};
-
-struct intel_dmi_quirk {
-	void (*hook)(struct drm_i915_private *);
-	const struct dmi_system_id (*dmi_id_list)[0];
-};
-
-struct opregion_header {
-	u8 signature[16];
-	u32 size;
-	struct {
-		u8 rsvd;
-		u8 revision;
-		u8 minor;
-		u8 major;
-	} over;
-	u8 bios_ver[32];
-	u8 vbios_ver[16];
-	u8 driver_ver[16];
-	u32 mboxes;
-	u32 driver_model;
-	u32 pcon;
-	u8 dver[32];
-	u8 rsvd[124];
-};
-
-struct opregion_acpi {
-	u32 drdy;
-	u32 csts;
-	u32 cevt;
-	u8 rsvd1[20];
-	u32 didl[8];
-	u32 cpdl[8];
-	u32 cadl[8];
-	u32 nadl[8];
-	u32 aslp;
-	u32 tidx;
-	u32 chpd;
-	u32 clid;
-	u32 cdck;
-	u32 sxsw;
-	u32 evts;
-	u32 cnot;
-	u32 nrdy;
-	u32 did2[7];
-	u32 cpd2[7];
-	u8 rsvd2[4];
-};
-
-struct opregion_swsci {
-	u32 scic;
-	u32 parm;
-	u32 dslp;
-	u8 rsvd[244];
-};
-
-struct opregion_asle {
-	u32 ardy;
-	u32 aslc;
-	u32 tche;
-	u32 alsi;
-	u32 bclp;
-	u32 pfit;
-	u32 cblv;
-	u16 bclm[20];
-	u32 cpfm;
-	u32 epfm;
-	u8 plut[74];
-	u32 pfmb;
-	u32 cddv;
-	u32 pcft;
-	u32 srot;
-	u32 iuer;
-	u64 fdss;
-	u32 fdsp;
-	u32 stat;
-	u64 rvda;
-	u32 rvds;
-	u8 rsvd[58];
-} __attribute__((packed));
-
-struct intel_dvo_dev_ops;
-
-struct intel_dvo_device {
-	const char *name;
-	int type;
-	i915_reg_t dvo_reg;
-	i915_reg_t dvo_srcdim_reg;
-	u32 gpio;
-	int slave_addr;
-	const struct intel_dvo_dev_ops *dev_ops;
-	void *dev_priv;
-	struct i2c_adapter *i2c_bus;
-};
-
-struct intel_dvo_dev_ops {
-	bool (*init)(struct intel_dvo_device *, struct i2c_adapter *);
-	void (*create_resources)(struct intel_dvo_device *);
-	void (*dpms)(struct intel_dvo_device *, bool);
-	int (*mode_valid)(struct intel_dvo_device *, struct drm_display_mode *);
-	void (*prepare)(struct intel_dvo_device *);
-	void (*commit)(struct intel_dvo_device *);
-	void (*mode_set)(struct intel_dvo_device *, const struct drm_display_mode *, const struct drm_display_mode *);
-	enum drm_connector_status (*detect)(struct intel_dvo_device *);
-	bool (*get_hw_state)(struct intel_dvo_device *);
-	struct drm_display_mode * (*get_modes)(struct intel_dvo_device *);
-	void (*destroy)(struct intel_dvo_device *);
-	void (*dump_regs)(struct intel_dvo_device *);
-};
-
-struct ch7017_priv {
-	u8 dummy;
-};
-
-struct ch7xxx_id_struct {
-	u8 vid;
-	char *name;
-};
-
-struct ch7xxx_did_struct {
-	u8 did;
-	char *name;
-};
-
-struct ch7xxx_priv {
-	bool quiet;
-};
-
-struct ivch_priv {
-	bool quiet;
-	u16 width;
-	u16 height;
-	u16 reg_backup[24];
-};
-
-enum {
-	MODE_640x480 = 0,
-	MODE_800x600 = 1,
-	MODE_1024x768 = 2,
-};
-
-struct ns2501_reg {
-	u8 offset;
-	u8 value;
-};
-
-struct ns2501_configuration {
-	u8 sync;
-	u8 conf;
-	u8 syncb;
-	u8 dither;
-	u8 pll_a;
-	u16 pll_b;
-	u16 hstart;
-	u16 hstop;
-	u16 vstart;
-	u16 vstop;
-	u16 vsync;
-	u16 vtotal;
-	u16 hpos;
-	u16 vpos;
-	u16 voffs;
-	u16 hscale;
-	u16 vscale;
-};
-
-struct ns2501_priv {
-	bool quiet;
-	const struct ns2501_configuration *conf;
-};
-
-struct sil164_priv {
-	bool quiet;
-};
-
-struct tfp410_priv {
-	bool quiet;
-};
-
-struct intel_dsi_host;
-
-struct intel_dsi {
-	struct intel_encoder base;
-	struct intel_dsi_host *dsi_hosts[9];
-	intel_wakeref_t io_wakeref[9];
-	struct gpio_desc *gpio_panel;
-	struct intel_connector *attached_connector;
-	union {
-		u16 ports;
-		u16 phys;
-	};
-	bool hs;
-	int channel;
-	u16 operation_mode;
-	unsigned int lane_count;
-	enum mipi_dsi_pixel_format pixel_format;
-	u32 video_mode_format;
-	u8 eotp_pkt;
-	u8 clock_stop;
-	u8 escape_clk_div;
-	u8 dual_link;
-	u16 dcs_backlight_ports;
-	u16 dcs_cabc_ports;
-	bool bgr_enabled;
-	u8 pixel_overlap;
-	u32 port_bits;
-	u32 bw_timer;
-	u32 dphy_reg;
-	u32 dphy_data_lane_reg;
-	u32 video_frmt_cfg_bits;
-	u16 lp_byte_clk;
-	u16 hs_tx_timeout;
-	u16 lp_rx_timeout;
-	u16 turn_arnd_val;
-	u16 rst_timer_val;
-	u16 hs_to_lp_count;
-	u16 clk_lp_to_hs_count;
-	u16 clk_hs_to_lp_count;
-	u16 init_count;
-	u32 pclk;
-	u16 burst_mode_ratio;
-	u16 backlight_off_delay;
-	u16 backlight_on_delay;
-	u16 panel_on_delay;
-	u16 panel_off_delay;
-	u16 panel_pwr_cycle_delay;
-};
-
-struct intel_dsi_host {
-	struct mipi_dsi_host base;
-	struct intel_dsi *intel_dsi;
-	enum port port;
-	struct mipi_dsi_device *device;
-};
-
-struct intel_crt {
-	struct intel_encoder base;
-	struct intel_connector *connector;
-	bool force_hotplug_required;
-	i915_reg_t adpa_reg;
-};
-
-struct ddi_buf_trans {
-	u32 trans1;
-	u32 trans2;
-	u8 i_boost;
-};
-
-struct bxt_ddi_buf_trans {
-	u8 margin;
-	u8 scale;
-	u8 enable;
-	u8 deemphasis;
-};
-
-struct cnl_ddi_buf_trans {
-	u8 dw2_swing_sel;
-	u8 dw7_n_scalar;
-	u8 dw4_cursor_coeff;
-	u8 dw4_post_cursor_2;
-	u8 dw4_post_cursor_1;
-};
-
-struct icl_mg_phy_ddi_buf_trans {
-	u32 cri_txdeemph_override_5_0;
-	u32 cri_txdeemph_override_11_6;
-	u32 cri_txdeemph_override_17_12;
-};
-
-struct tgl_dkl_phy_ddi_buf_trans {
-	u32 dkl_vswing_control;
-	u32 dkl_preshoot_control;
-	u32 dkl_de_emphasis_control;
-};
-
-struct link_config_limits {
-	int min_clock;
-	int max_clock;
-	int min_lane_count;
-	int max_lane_count;
-	int min_bpp;
-	int max_bpp;
-};
-
-struct dp_link_dpll {
-	int clock;
-	struct dpll dpll;
-};
-
-typedef bool (*vlv_pipe_check)(struct drm_i915_private *, enum pipe);
-
-struct pps_registers {
-	i915_reg_t pp_ctrl;
-	i915_reg_t pp_stat;
-	i915_reg_t pp_on;
-	i915_reg_t pp_off;
-	i915_reg_t pp_div;
-};
-
-struct hdcp2_dp_errata_stream_type {
-	u8 msg_id;
-	u8 stream_type;
-};
-
-struct hdcp2_dp_msg_data {
-	u8 msg_id;
-	u32 offset;
-	bool msg_detectable;
-	u32 timeout;
-	u32 timeout2;
-};
-
-struct gpio_map {
-	u16 base_offset;
-	bool init;
-};
-
-typedef const u8 * (*fn_mipi_elem_exec)(struct intel_dsi *, const u8 *);
-
-struct intel_dvo {
-	struct intel_encoder base;
-	struct intel_dvo_device dev;
-	struct intel_connector *attached_connector;
-	bool panel_wants_dither;
-};
-
-enum i915_gpio {
-	GPIOA = 0,
-	GPIOB = 1,
-	GPIOC = 2,
-	GPIOD = 3,
-	GPIOE = 4,
-	GPIOF = 5,
-	GPIOG = 6,
-	GPIOH = 7,
-	__GPIOI_UNUSED = 8,
-	GPIOJ = 9,
-	GPIOK = 10,
-	GPIOL = 11,
-	GPIOM = 12,
-	GPION = 13,
-	GPIOO = 14,
-};
-
-struct gmbus_pin {
-	const char *name;
-	enum i915_gpio gpio;
-};
-
-struct hdcp2_hdmi_msg_timeout {
-	u8 msg_id;
-	u16 timeout;
-};
-
-enum vga_switcheroo_handler_flags_t {
-	VGA_SWITCHEROO_CAN_SWITCH_DDC = 1,
-	VGA_SWITCHEROO_NEEDS_EDP_CONFIG = 2,
-};
-
-struct intel_lvds_pps {
-	int t1_t2;
-	int t3;
-	int t4;
-	int t5;
-	int tx;
-	int divider;
-	int port;
-	bool powerdown_on_reset;
-};
-
-struct intel_lvds_encoder {
-	struct intel_encoder base;
-	bool is_dual_link;
-	i915_reg_t reg;
-	u32 a3_power;
-	struct intel_lvds_pps init_pps;
-	u32 init_lvds_val;
-	struct intel_connector *attached_connector;
-};
-
-enum pwm_polarity {
-	PWM_POLARITY_NORMAL = 0,
-	PWM_POLARITY_INVERSED = 1,
-};
-
-struct pwm_args {
-	unsigned int period;
-	enum pwm_polarity polarity;
-};
-
-struct pwm_state {
-	unsigned int period;
-	unsigned int duty_cycle;
-	enum pwm_polarity polarity;
-	bool enabled;
-};
-
-struct pwm_chip;
-
-struct pwm_device {
-	const char *label;
-	long unsigned int flags;
-	unsigned int hwpwm;
-	unsigned int pwm;
-	struct pwm_chip *chip;
-	void *chip_data;
-	struct pwm_args args;
-	struct pwm_state state;
-};
-
-struct pwm_ops;
-
-struct pwm_chip {
-	struct device *dev;
-	const struct pwm_ops *ops;
-	int base;
-	unsigned int npwm;
-	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
-	unsigned int of_pwm_n_cells;
-	struct list_head list;
-	struct pwm_device *pwms;
-};
-
-struct pwm_capture;
-
-struct pwm_ops {
-	int (*request)(struct pwm_chip *, struct pwm_device *);
-	void (*free)(struct pwm_chip *, struct pwm_device *);
-	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);
-	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
-	void (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
-	struct module *owner;
-	int (*config)(struct pwm_chip *, struct pwm_device *, int, int);
-	int (*set_polarity)(struct pwm_chip *, struct pwm_device *, enum pwm_polarity);
-	int (*enable)(struct pwm_chip *, struct pwm_device *);
-	void (*disable)(struct pwm_chip *, struct pwm_device *);
-};
-
-struct pwm_capture {
-	unsigned int period;
-	unsigned int duty_cycle;
-};
-
-struct intel_sdvo_caps {
-	u8 vendor_id;
-	u8 device_id;
-	u8 device_rev_id;
-	u8 sdvo_version_major;
-	u8 sdvo_version_minor;
-	unsigned int sdvo_inputs_mask: 2;
-	unsigned int smooth_scaling: 1;
-	unsigned int sharp_scaling: 1;
-	unsigned int up_scaling: 1;
-	unsigned int down_scaling: 1;
-	unsigned int stall_support: 1;
-	unsigned int pad: 1;
-	u16 output_flags;
-};
-
-struct intel_sdvo_dtd {
-	struct {
-		u16 clock;
-		u8 h_active;
-		u8 h_blank;
-		u8 h_high;
-		u8 v_active;
-		u8 v_blank;
-		u8 v_high;
-	} part1;
-	struct {
-		u8 h_sync_off;
-		u8 h_sync_width;
-		u8 v_sync_off_width;
-		u8 sync_off_width_high;
-		u8 dtd_flags;
-		u8 sdvo_flags;
-		u8 v_sync_off_high;
-		u8 reserved;
-	} part2;
-};
-
-struct intel_sdvo_pixel_clock_range {
-	u16 min;
-	u16 max;
-};
-
-struct intel_sdvo_preferred_input_timing_args {
-	u16 clock;
-	u16 width;
-	u16 height;
-	u8 interlace: 1;
-	u8 scaled: 1;
-	u8 pad: 6;
-} __attribute__((packed));
-
-struct intel_sdvo_get_trained_inputs_response {
-	unsigned int input0_trained: 1;
-	unsigned int input1_trained: 1;
-	unsigned int pad: 6;
-} __attribute__((packed));
-
-struct intel_sdvo_in_out_map {
-	u16 in0;
-	u16 in1;
-};
-
-struct intel_sdvo_set_target_input_args {
-	unsigned int target_1: 1;
-	unsigned int pad: 7;
-} __attribute__((packed));
-
-struct intel_sdvo_tv_format {
-	unsigned int ntsc_m: 1;
-	unsigned int ntsc_j: 1;
-	unsigned int ntsc_443: 1;
-	unsigned int pal_b: 1;
-	unsigned int pal_d: 1;
-	unsigned int pal_g: 1;
-	unsigned int pal_h: 1;
-	unsigned int pal_i: 1;
-	unsigned int pal_m: 1;
-	unsigned int pal_n: 1;
-	unsigned int pal_nc: 1;
-	unsigned int pal_60: 1;
-	unsigned int secam_b: 1;
-	unsigned int secam_d: 1;
-	unsigned int secam_g: 1;
-	unsigned int secam_k: 1;
-	unsigned int secam_k1: 1;
-	unsigned int secam_l: 1;
-	unsigned int secam_60: 1;
-	unsigned int hdtv_std_smpte_240m_1080i_59: 1;
-	unsigned int hdtv_std_smpte_240m_1080i_60: 1;
-	unsigned int hdtv_std_smpte_260m_1080i_59: 1;
-	unsigned int hdtv_std_smpte_260m_1080i_60: 1;
-	unsigned int hdtv_std_smpte_274m_1080i_50: 1;
-	unsigned int hdtv_std_smpte_274m_1080i_59: 1;
-	unsigned int hdtv_std_smpte_274m_1080i_60: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_23: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_24: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_25: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_29: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_30: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_50: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_59: 1;
-	unsigned int hdtv_std_smpte_274m_1080p_60: 1;
-	unsigned int hdtv_std_smpte_295m_1080i_50: 1;
-	unsigned int hdtv_std_smpte_295m_1080p_50: 1;
-	unsigned int hdtv_std_smpte_296m_720p_59: 1;
-	unsigned int hdtv_std_smpte_296m_720p_60: 1;
-	unsigned int hdtv_std_smpte_296m_720p_50: 1;
-	unsigned int hdtv_std_smpte_293m_480p_59: 1;
-	unsigned int hdtv_std_smpte_170m_480i_59: 1;
-	unsigned int hdtv_std_iturbt601_576i_50: 1;
-	unsigned int hdtv_std_iturbt601_576p_50: 1;
-	unsigned int hdtv_std_eia_7702a_480i_60: 1;
-	unsigned int hdtv_std_eia_7702a_480p_60: 1;
-	unsigned int pad: 3;
-} __attribute__((packed));
-
-struct intel_sdvo_sdtv_resolution_request {
-	unsigned int ntsc_m: 1;
-	unsigned int ntsc_j: 1;
-	unsigned int ntsc_443: 1;
-	unsigned int pal_b: 1;
-	unsigned int pal_d: 1;
-	unsigned int pal_g: 1;
-	unsigned int pal_h: 1;
-	unsigned int pal_i: 1;
-	unsigned int pal_m: 1;
-	unsigned int pal_n: 1;
-	unsigned int pal_nc: 1;
-	unsigned int pal_60: 1;
-	unsigned int secam_b: 1;
-	unsigned int secam_d: 1;
-	unsigned int secam_g: 1;
-	unsigned int secam_k: 1;
-	unsigned int secam_k1: 1;
-	unsigned int secam_l: 1;
-	unsigned int secam_60: 1;
-	unsigned int pad: 5;
-} __attribute__((packed));
-
-struct intel_sdvo_enhancements_reply {
-	unsigned int flicker_filter: 1;
-	unsigned int flicker_filter_adaptive: 1;
-	unsigned int flicker_filter_2d: 1;
-	unsigned int saturation: 1;
-	unsigned int hue: 1;
-	unsigned int brightness: 1;
-	unsigned int contrast: 1;
-	unsigned int overscan_h: 1;
-	unsigned int overscan_v: 1;
-	unsigned int hpos: 1;
-	unsigned int vpos: 1;
-	unsigned int sharpness: 1;
-	unsigned int dot_crawl: 1;
-	unsigned int dither: 1;
-	unsigned int tv_chroma_filter: 1;
-	unsigned int tv_luma_filter: 1;
-} __attribute__((packed));
-
-struct intel_sdvo_encode {
-	u8 dvi_rev;
-	u8 hdmi_rev;
-};
-
-struct intel_sdvo {
-	struct intel_encoder base;
-	struct i2c_adapter *i2c;
-	u8 slave_addr;
-	long: 56;
-	struct i2c_adapter ddc;
-	i915_reg_t sdvo_reg;
-	u16 controlled_output;
-	struct intel_sdvo_caps caps;
-	short: 16;
-	int pixel_clock_min;
-	int pixel_clock_max;
-	u16 attached_output;
-	u16 hotplug_active;
-	enum port port;
-	bool has_hdmi_monitor;
-	bool has_hdmi_audio;
-	u8 ddc_bus;
-	u8 dtd_sdvo_flags;
-	int: 32;
-} __attribute__((packed));
-
-struct intel_sdvo_connector {
-	struct intel_connector base;
-	u16 output_flag;
-	u8 tv_format_supported[19];
-	int format_supported_num;
-	struct drm_property *tv_format;
-	struct drm_property *left;
-	struct drm_property *right;
-	struct drm_property *top;
-	struct drm_property *bottom;
-	struct drm_property *hpos;
-	struct drm_property *vpos;
-	struct drm_property *contrast;
-	struct drm_property *saturation;
-	struct drm_property *hue;
-	struct drm_property *sharpness;
-	struct drm_property *flicker_filter;
-	struct drm_property *flicker_filter_adaptive;
-	struct drm_property *flicker_filter_2d;
-	struct drm_property *tv_chroma_filter;
-	struct drm_property *tv_luma_filter;
-	struct drm_property *dot_crawl;
-	struct drm_property *brightness;
-	u32 max_hscan;
-	u32 max_vscan;
-	bool is_hdmi;
-};
-
-struct intel_sdvo_connector_state {
-	struct intel_digital_connector_state base;
-	struct {
-		unsigned int overscan_h;
-		unsigned int overscan_v;
-		unsigned int hpos;
-		unsigned int vpos;
-		unsigned int sharpness;
-		unsigned int flicker_filter;
-		unsigned int flicker_filter_2d;
-		unsigned int flicker_filter_adaptive;
-		unsigned int chroma_filter;
-		unsigned int luma_filter;
-		unsigned int dot_crawl;
-	} tv;
-};
-
-struct intel_tv {
-	struct intel_encoder base;
-	int type;
-};
-
-struct video_levels {
-	u16 blank;
-	u16 black;
-	u8 burst;
-};
-
-struct color_conversion {
-	u16 ry;
-	u16 gy;
-	u16 by;
-	u16 ay;
-	u16 ru;
-	u16 gu;
-	u16 bu;
-	u16 au;
-	u16 rv;
-	u16 gv;
-	u16 bv;
-	u16 av;
-};
-
-struct tv_mode {
-	const char *name;
-	u32 clock;
-	u16 refresh;
-	u8 oversample;
-	u8 hsync_end;
-	u16 hblank_start;
-	u16 hblank_end;
-	u16 htotal;
-	bool progressive: 1;
-	bool trilevel_sync: 1;
-	bool component_only: 1;
-	u8 vsync_start_f1;
-	u8 vsync_start_f2;
-	u8 vsync_len;
-	bool veq_ena: 1;
-	u8 veq_start_f1;
-	u8 veq_start_f2;
-	u8 veq_len;
-	u8 vi_end_f1;
-	u8 vi_end_f2;
-	u16 nbr_end;
-	bool burst_ena: 1;
-	u8 hburst_start;
-	u8 hburst_len;
-	u8 vburst_start_f1;
-	u16 vburst_end_f1;
-	u8 vburst_start_f2;
-	u16 vburst_end_f2;
-	u8 vburst_start_f3;
-	u16 vburst_end_f3;
-	u8 vburst_start_f4;
-	u16 vburst_end_f4;
-	u16 dda2_size;
-	u16 dda3_size;
-	u8 dda1_inc;
-	u16 dda2_inc;
-	u16 dda3_inc;
-	u32 sc_reset;
-	bool pal_burst: 1;
-	const struct video_levels *composite_levels;
-	const struct video_levels *svideo_levels;
-	const struct color_conversion *composite_color;
-	const struct color_conversion *svideo_color;
-	const u32 *filter_table;
-};
-
-struct intel_tv_connector_state {
-	struct drm_connector_state base;
-	struct {
-		u16 top;
-		u16 bottom;
-	} margins;
-	bool bypass_vfilter;
-};
-
-struct input_res {
-	u16 w;
-	u16 h;
-};
-
-struct drm_dsc_pps_infoframe {
-	struct dp_sdp_header pps_header;
-	struct drm_dsc_picture_parameter_set pps_payload;
-};
-
-enum ROW_INDEX_BPP {
-	ROW_INDEX_6BPP = 0,
-	ROW_INDEX_8BPP = 1,
-	ROW_INDEX_10BPP = 2,
-	ROW_INDEX_12BPP = 3,
-	ROW_INDEX_15BPP = 4,
-	MAX_ROW_INDEX = 5,
-};
-
-enum COLUMN_INDEX_BPC {
-	COLUMN_INDEX_8BPC = 0,
-	COLUMN_INDEX_10BPC = 1,
-	COLUMN_INDEX_12BPC = 2,
-	COLUMN_INDEX_14BPC = 3,
-	COLUMN_INDEX_16BPC = 4,
-	MAX_COLUMN_INDEX = 5,
-};
-
-struct rc_parameters {
-	u16 initial_xmit_delay;
-	u8 first_line_bpg_offset;
-	u16 initial_offset;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	u8 rc_quant_incr_limit0;
-	u8 rc_quant_incr_limit1;
-	struct drm_dsc_rc_range_parameters rc_range_params[15];
-};
-
-enum drm_i915_oa_format {
-	I915_OA_FORMAT_A13 = 1,
-	I915_OA_FORMAT_A29 = 2,
-	I915_OA_FORMAT_A13_B8_C8 = 3,
-	I915_OA_FORMAT_B4_C8 = 4,
-	I915_OA_FORMAT_A45_B8_C8 = 5,
-	I915_OA_FORMAT_B4_C8_A16 = 6,
-	I915_OA_FORMAT_C4_B8 = 7,
-	I915_OA_FORMAT_A12 = 8,
-	I915_OA_FORMAT_A12_B8_C8 = 9,
-	I915_OA_FORMAT_A32u40_A4u32_B8_C8 = 10,
-	I915_OA_FORMAT_MAX = 11,
-};
-
-enum drm_i915_perf_property_id {
-	DRM_I915_PERF_PROP_CTX_HANDLE = 1,
-	DRM_I915_PERF_PROP_SAMPLE_OA = 2,
-	DRM_I915_PERF_PROP_OA_METRICS_SET = 3,
-	DRM_I915_PERF_PROP_OA_FORMAT = 4,
-	DRM_I915_PERF_PROP_OA_EXPONENT = 5,
-	DRM_I915_PERF_PROP_HOLD_PREEMPTION = 6,
-	DRM_I915_PERF_PROP_MAX = 7,
-};
-
-struct drm_i915_perf_open_param {
-	__u32 flags;
-	__u32 num_properties;
-	__u64 properties_ptr;
-};
-
-struct drm_i915_perf_record_header {
-	__u32 type;
-	__u16 pad;
-	__u16 size;
-};
-
-enum drm_i915_perf_record_type {
-	DRM_I915_PERF_RECORD_SAMPLE = 1,
-	DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2,
-	DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3,
-	DRM_I915_PERF_RECORD_MAX = 4,
-};
-
-struct perf_open_properties {
-	u32 sample_flags;
-	u64 single_context: 1;
-	u64 hold_preemption: 1;
-	u64 ctx_handle;
-	int metrics_set;
-	int oa_format;
-	bool oa_periodic;
-	int oa_period_exponent;
-	struct intel_engine_cs *engine;
-};
-
-struct i915_oa_config_bo {
-	struct llist_node node;
-	struct i915_oa_config *oa_config;
-	struct i915_vma *vma;
-};
-
-struct flex {
-	i915_reg_t reg;
-	u32 offset;
-	u32 value;
-};
-
-enum {
-	START_TS = 0,
-	NOW_TS = 1,
-	DELTA_TS = 2,
-	JUMP_PREDICATE = 3,
-	DELTA_TARGET = 4,
-	N_CS_GPR = 5,
-};
-
-struct compress {
-	struct pagevec pool;
-	struct z_stream_s zstream;
-	void *tmp;
-	bool wc;
-};
-
-struct capture_vma {
-	struct capture_vma *next;
-	void **slot;
-};
-
-struct _balloon_info_ {
-	struct drm_mm_node space[4];
-};
-
-struct vga_device {
-	struct list_head list;
-	struct pci_dev *pdev;
-	unsigned int decodes;
-	unsigned int owns;
-	unsigned int locks;
-	unsigned int io_lock_cnt;
-	unsigned int mem_lock_cnt;
-	unsigned int io_norm_cnt;
-	unsigned int mem_norm_cnt;
-	bool bridge_has_one_vga;
-	void *cookie;
-	void (*irq_set_state)(void *, bool);
-	unsigned int (*set_vga_decode)(void *, bool);
-};
-
-struct vga_arb_user_card {
-	struct pci_dev *pdev;
-	unsigned int mem_cnt;
-	unsigned int io_cnt;
-};
-
-struct vga_arb_private {
-	struct list_head list;
-	struct pci_dev *target;
-	struct vga_arb_user_card cards[16];
-	spinlock_t lock;
-};
-
-struct cb_id {
-	__u32 idx;
-	__u32 val;
-};
-
-struct cn_msg {
-	struct cb_id id;
-	__u32 seq;
-	__u32 ack;
-	__u16 len;
-	__u16 flags;
-	__u8 data[0];
-};
-
-struct cn_queue_dev {
-	atomic_t refcnt;
-	unsigned char name[32];
-	struct list_head queue_list;
-	spinlock_t queue_lock;
-	struct sock *nls;
-};
-
-struct cn_callback_id {
-	unsigned char name[32];
-	struct cb_id id;
-};
-
-struct cn_callback_entry {
-	struct list_head callback_entry;
-	refcount_t refcnt;
-	struct cn_queue_dev *pdev;
-	struct cn_callback_id id;
-	void (*callback)(struct cn_msg *, struct netlink_skb_parms *);
-	u32 seq;
-	u32 group;
-};
-
-struct cn_dev {
-	struct cb_id id;
-	u32 seq;
-	u32 groups;
-	struct sock *nls;
-	struct cn_queue_dev *cbdev;
-};
-
-enum proc_cn_mcast_op {
-	PROC_CN_MCAST_LISTEN = 1,
-	PROC_CN_MCAST_IGNORE = 2,
-};
-
-struct fork_proc_event {
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-	__kernel_pid_t child_pid;
-	__kernel_pid_t child_tgid;
-};
-
-struct exec_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct id_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	union {
-		__u32 ruid;
-		__u32 rgid;
-	} r;
-	union {
-		__u32 euid;
-		__u32 egid;
-	} e;
-};
-
-struct sid_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-};
-
-struct ptrace_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t tracer_pid;
-	__kernel_pid_t tracer_tgid;
-};
-
-struct comm_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	char comm[16];
-};
-
-struct coredump_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct exit_proc_event {
-	__kernel_pid_t process_pid;
-	__kernel_pid_t process_tgid;
-	__u32 exit_code;
-	__u32 exit_signal;
-	__kernel_pid_t parent_pid;
-	__kernel_pid_t parent_tgid;
-};
-
-struct proc_event {
-	enum what what;
-	__u32 cpu;
-	__u64 timestamp_ns;
-	union {
-		struct {
-			__u32 err;
-		} ack;
-		struct fork_proc_event fork;
-		struct exec_proc_event exec;
-		struct id_proc_event id;
-		struct sid_proc_event sid;
-		struct ptrace_proc_event ptrace;
-		struct comm_proc_event comm;
-		struct coredump_proc_event coredump;
-		struct exit_proc_event exit;
-	} event_data;
-};
-
-struct component_master_ops {
-	int (*bind)(struct device *);
-	void (*unbind)(struct device *);
-};
-
-struct component;
-
-struct component_match_array {
-	void *data;
-	int (*compare)(struct device *, void *);
-	int (*compare_typed)(struct device *, int, void *);
-	void (*release)(struct device *, void *);
-	struct component *component;
-	bool duplicate;
-};
-
-struct master;
-
-struct component {
-	struct list_head node;
-	struct master *master;
-	bool bound;
-	const struct component_ops *ops;
-	int subcomponent;
-	struct device *dev;
-};
-
-struct component_match {
-	size_t alloc;
-	size_t num;
-	struct component_match_array *compare;
-};
-
-struct master {
-	struct list_head node;
-	bool bound;
-	const struct component_master_ops *ops;
-	struct device *dev;
-	struct component_match *match;
-	struct dentry *dentry;
-};
-
-struct wake_irq {
-	struct device *dev;
-	unsigned int status;
-	int irq;
-	const char *name;
-};
-
-enum dpm_order {
-	DPM_ORDER_NONE = 0,
-	DPM_ORDER_DEV_AFTER_PARENT = 1,
-	DPM_ORDER_PARENT_BEFORE_DEV = 2,
-	DPM_ORDER_DEV_LAST = 3,
-};
-
-struct subsys_private {
-	struct kset subsys;
-	struct kset *devices_kset;
-	struct list_head interfaces;
-	struct mutex mutex;
-	struct kset *drivers_kset;
-	struct klist klist_devices;
-	struct klist klist_drivers;
-	struct blocking_notifier_head bus_notifier;
-	unsigned int drivers_autoprobe: 1;
-	struct bus_type *bus;
-	struct kset glue_dirs;
-	struct class *class;
-};
-
-struct driver_private {
-	struct kobject kobj;
-	struct klist klist_devices;
-	struct klist_node knode_bus;
-	struct module_kobject *mkobj;
-	struct device_driver *driver;
-};
-
-struct device_private {
-	struct klist klist_children;
-	struct klist_node knode_parent;
-	struct klist_node knode_driver;
-	struct klist_node knode_bus;
-	struct klist_node knode_class;
-	struct list_head deferred_probe;
-	struct device_driver *async_driver;
-	struct device *device;
-	u8 dead: 1;
-};
-
-union device_attr_group_devres {
-	const struct attribute_group *group;
-	const struct attribute_group **groups;
-};
-
-struct class_dir {
-	struct kobject kobj;
-	struct class *class;
-};
-
-struct root_device {
-	struct device dev;
-	struct module *owner;
-};
-
-struct subsys_dev_iter {
-	struct klist_iter ki;
-	const struct device_type *type;
-};
-
-struct device_attach_data {
-	struct device *dev;
-	bool check_async;
-	bool want_async;
-	bool have_async;
-};
-
-struct class_compat {
-	struct kobject *kobj;
-};
-
-struct platform_object {
-	struct platform_device pdev;
-	char name[0];
-};
-
-struct cpu_attr {
-	struct device_attribute attr;
-	const struct cpumask * const map;
-};
-
-typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
-
-struct probe {
-	struct probe *next;
-	dev_t dev;
-	long unsigned int range;
-	struct module *owner;
-	kobj_probe_t *get;
-	int (*lock)(dev_t, void *);
-	void *data;
-};
-
-struct kobj_map___2 {
-	struct probe *probes[255];
-	struct mutex *lock;
-};
-
-typedef void (*dr_release_t)(struct device *, void *);
-
-typedef int (*dr_match_t)(struct device *, void *, void *);
-
-struct devres_node {
-	struct list_head entry;
-	dr_release_t release;
-	const char *name;
-	size_t size;
-};
-
-struct devres {
-	struct devres_node node;
-	u8 data[0];
-};
-
-struct devres_group {
-	struct devres_node node[2];
-	void *id;
-	int color;
-};
-
-struct action_devres {
-	void *data;
-	void (*action)(void *);
-};
-
-struct pages_devres {
-	long unsigned int addr;
-	unsigned int order;
-};
-
-struct attribute_container {
-	struct list_head node;
-	struct klist containers;
-	struct class *class;
-	const struct attribute_group *grp;
-	struct device_attribute **attrs;
-	int (*match)(struct attribute_container *, struct device *);
-	long unsigned int flags;
-};
-
-struct internal_container {
-	struct klist_node node;
-	struct attribute_container *cont;
-	struct device classdev;
-};
-
-struct transport_container;
-
-struct transport_class {
-	struct class class;
-	int (*setup)(struct transport_container *, struct device *, struct device *);
-	int (*configure)(struct transport_container *, struct device *, struct device *);
-	int (*remove)(struct transport_container *, struct device *, struct device *);
-};
-
-struct transport_container {
-	struct attribute_container ac;
-	const struct attribute_group *statistics;
-};
-
-struct anon_transport_class {
-	struct transport_class tclass;
-	struct attribute_container container;
-};
-
-struct reset_control;
-
-struct mii_bus;
-
-struct mdio_device {
-	struct device dev;
-	struct mii_bus *bus;
-	char modalias[32];
-	int (*bus_match)(struct device *, struct device_driver *);
-	void (*device_free)(struct mdio_device *);
-	void (*device_remove)(struct mdio_device *);
-	int addr;
-	int flags;
-	struct gpio_desc *reset_gpio;
-	struct reset_control *reset_ctrl;
-	unsigned int reset_assert_delay;
-	unsigned int reset_deassert_delay;
-};
-
-struct phy_c45_device_ids {
-	u32 devices_in_package;
-	u32 device_ids[8];
-};
-
-enum phy_state {
-	PHY_DOWN = 0,
-	PHY_READY = 1,
-	PHY_HALTED = 2,
-	PHY_UP = 3,
-	PHY_RUNNING = 4,
-	PHY_NOLINK = 5,
-};
-
-typedef enum {
-	PHY_INTERFACE_MODE_NA = 0,
-	PHY_INTERFACE_MODE_INTERNAL = 1,
-	PHY_INTERFACE_MODE_MII = 2,
-	PHY_INTERFACE_MODE_GMII = 3,
-	PHY_INTERFACE_MODE_SGMII = 4,
-	PHY_INTERFACE_MODE_TBI = 5,
-	PHY_INTERFACE_MODE_REVMII = 6,
-	PHY_INTERFACE_MODE_RMII = 7,
-	PHY_INTERFACE_MODE_RGMII = 8,
-	PHY_INTERFACE_MODE_RGMII_ID = 9,
-	PHY_INTERFACE_MODE_RGMII_RXID = 10,
-	PHY_INTERFACE_MODE_RGMII_TXID = 11,
-	PHY_INTERFACE_MODE_RTBI = 12,
-	PHY_INTERFACE_MODE_SMII = 13,
-	PHY_INTERFACE_MODE_XGMII = 14,
-	PHY_INTERFACE_MODE_MOCA = 15,
-	PHY_INTERFACE_MODE_QSGMII = 16,
-	PHY_INTERFACE_MODE_TRGMII = 17,
-	PHY_INTERFACE_MODE_1000BASEX = 18,
-	PHY_INTERFACE_MODE_2500BASEX = 19,
-	PHY_INTERFACE_MODE_RXAUI = 20,
-	PHY_INTERFACE_MODE_XAUI = 21,
-	PHY_INTERFACE_MODE_10GKR = 22,
-	PHY_INTERFACE_MODE_USXGMII = 23,
-	PHY_INTERFACE_MODE_MAX = 24,
-} phy_interface_t;
-
-struct phylink;
-
-struct phy_driver;
-
-struct phy_device {
-	struct mdio_device mdio;
-	struct phy_driver *drv;
-	u32 phy_id;
-	struct phy_c45_device_ids c45_ids;
-	unsigned int is_c45: 1;
-	unsigned int is_internal: 1;
-	unsigned int is_pseudo_fixed_link: 1;
-	unsigned int is_gigabit_capable: 1;
-	unsigned int has_fixups: 1;
-	unsigned int suspended: 1;
-	unsigned int sysfs_links: 1;
-	unsigned int loopback_enabled: 1;
-	unsigned int autoneg: 1;
-	unsigned int link: 1;
-	unsigned int autoneg_complete: 1;
-	unsigned int interrupts: 1;
-	enum phy_state state;
-	u32 dev_flags;
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-	long unsigned int supported[2];
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	long unsigned int adv_old[2];
-	u32 eee_broken_modes;
-	int irq;
-	void *priv;
-	struct delayed_work state_queue;
-	struct mutex lock;
-	bool sfp_bus_attached;
-	struct sfp_bus *sfp_bus;
-	struct phylink *phylink;
-	struct net_device *attached_dev;
-	u8 mdix;
-	u8 mdix_ctrl;
-	void (*phy_link_change)(struct phy_device *, bool, bool);
-	void (*adjust_link)(struct net_device *);
-};
-
-struct mii_bus {
-	struct module *owner;
-	const char *name;
-	char id[61];
-	void *priv;
-	int (*read)(struct mii_bus *, int, int);
-	int (*write)(struct mii_bus *, int, int, u16);
-	int (*reset)(struct mii_bus *);
-	struct mutex mdio_lock;
-	struct device *parent;
-	enum {
-		MDIOBUS_ALLOCATED = 1,
-		MDIOBUS_REGISTERED = 2,
-		MDIOBUS_UNREGISTERED = 3,
-		MDIOBUS_RELEASED = 4,
-	} state;
-	struct device dev;
-	struct mdio_device *mdio_map[32];
-	u32 phy_mask;
-	u32 phy_ignore_ta_mask;
-	int irq[32];
-	int reset_delay_us;
-	struct gpio_desc *reset_gpiod;
-};
-
-struct mdio_driver_common {
-	struct device_driver driver;
-	int flags;
-};
-
-struct phy_driver {
-	struct mdio_driver_common mdiodrv;
-	u32 phy_id;
-	char *name;
-	u32 phy_id_mask;
-	const long unsigned int * const features;
-	u32 flags;
-	const void *driver_data;
-	int (*soft_reset)(struct phy_device *);
-	int (*config_init)(struct phy_device *);
-	int (*probe)(struct phy_device *);
-	int (*get_features)(struct phy_device *);
-	int (*suspend)(struct phy_device *);
-	int (*resume)(struct phy_device *);
-	int (*config_aneg)(struct phy_device *);
-	int (*aneg_done)(struct phy_device *);
-	int (*read_status)(struct phy_device *);
-	int (*ack_interrupt)(struct phy_device *);
-	int (*config_intr)(struct phy_device *);
-	int (*did_interrupt)(struct phy_device *);
-	int (*handle_interrupt)(struct phy_device *);
-	void (*remove)(struct phy_device *);
-	int (*match_phy_device)(struct phy_device *);
-	int (*ts_info)(struct phy_device *, struct ethtool_ts_info *);
-	int (*hwtstamp)(struct phy_device *, struct ifreq *);
-	bool (*rxtstamp)(struct phy_device *, struct sk_buff *, int);
-	void (*txtstamp)(struct phy_device *, struct sk_buff *, int);
-	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*link_change_notify)(struct phy_device *);
-	int (*read_mmd)(struct phy_device *, int, u16);
-	int (*write_mmd)(struct phy_device *, int, u16, u16);
-	int (*read_page)(struct phy_device *);
-	int (*write_page)(struct phy_device *, int);
-	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_sset_count)(struct phy_device *);
-	void (*get_strings)(struct phy_device *, u8 *);
-	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
-	int (*set_loopback)(struct phy_device *, bool);
-};
-
-struct device_connection {
-	struct fwnode_handle *fwnode;
-	const char *endpoint[2];
-	const char *id;
-	struct list_head list;
-};
-
-typedef void * (*devcon_match_fn_t)(struct device_connection *, int, void *);
-
-struct software_node;
-
-struct software_node_ref_args {
-	const struct software_node *node;
-	unsigned int nargs;
-	u64 args[8];
-};
-
-struct software_node_reference;
-
-struct software_node {
-	const char *name;
-	const struct software_node *parent;
-	const struct property_entry *properties;
-	const struct software_node_reference *references;
-};
-
-struct software_node_reference {
-	const char *name;
-	unsigned int nrefs;
-	const struct software_node_ref_args *refs;
-};
-
-struct swnode {
-	int id;
-	struct kobject kobj;
-	struct fwnode_handle fwnode;
-	const struct software_node *node;
-	struct ida child_ids;
-	struct list_head entry;
-	struct list_head children;
-	struct swnode *parent;
-	unsigned int allocated: 1;
-};
-
-struct req {
-	struct req *next;
-	struct completion done;
-	int err;
-	const char *name;
-	umode_t mode;
-	kuid_t uid;
-	kgid_t gid;
-	struct device *dev;
-};
-
-typedef int (*pm_callback_t)(struct device *);
-
-struct pm_clk_notifier_block {
-	struct notifier_block nb;
-	struct dev_pm_domain *pm_domain;
-	char *con_ids[0];
-};
-
-enum pce_status {
-	PCE_STATUS_NONE = 0,
-	PCE_STATUS_ACQUIRED = 1,
-	PCE_STATUS_ENABLED = 2,
-	PCE_STATUS_ERROR = 3,
-};
-
-struct pm_clock_entry {
-	struct list_head node;
-	char *con_id;
-	struct clk *clk;
-	enum pce_status status;
-};
-
-enum fw_opt {
-	FW_OPT_UEVENT = 1,
-	FW_OPT_NOWAIT = 2,
-	FW_OPT_USERHELPER = 4,
-	FW_OPT_NO_WARN = 8,
-	FW_OPT_NOCACHE = 16,
-	FW_OPT_NOFALLBACK = 32,
-};
-
-enum fw_status {
-	FW_STATUS_UNKNOWN = 0,
-	FW_STATUS_LOADING = 1,
-	FW_STATUS_DONE = 2,
-	FW_STATUS_ABORTED = 3,
-};
-
-struct fw_state {
-	struct completion completion;
-	enum fw_status status;
-};
-
-struct firmware_cache;
-
-struct fw_priv {
-	struct kref ref;
-	struct list_head list;
-	struct firmware_cache *fwc;
-	struct fw_state fw_st;
-	void *data;
-	size_t size;
-	size_t allocated_size;
-	const char *fw_name;
-};
-
-struct firmware_cache {
-	spinlock_t lock;
-	struct list_head head;
-	int state;
-	spinlock_t name_lock;
-	struct list_head fw_names;
-	struct delayed_work work;
-	struct notifier_block pm_notify;
-};
-
-struct fw_cache_entry {
-	struct list_head list;
-	const char *name;
-};
-
-struct fw_name_devm {
-	long unsigned int magic;
-	const char *name;
-};
-
-struct firmware_work {
-	struct work_struct work;
-	struct module *module;
-	const char *name;
-	struct device *device;
-	void *context;
-	void (*cont)(const struct firmware *, void *);
-	enum fw_opt opt_flags;
-};
-
-typedef void (*node_registration_func_t)(struct node *);
-
-struct node_access_nodes {
-	struct device dev;
-	struct list_head list_node;
-	unsigned int access;
-};
-
-struct node_attr {
-	struct device_attribute attr;
-	enum node_states state;
-};
-
-enum regcache_type {
-	REGCACHE_NONE = 0,
-	REGCACHE_RBTREE = 1,
-	REGCACHE_COMPRESSED = 2,
-	REGCACHE_FLAT = 3,
-};
-
-struct reg_default {
-	unsigned int reg;
-	unsigned int def;
-};
-
-struct reg_sequence {
-	unsigned int reg;
-	unsigned int def;
-	unsigned int delay_us;
-};
-
-enum regmap_endian {
-	REGMAP_ENDIAN_DEFAULT = 0,
-	REGMAP_ENDIAN_BIG = 1,
-	REGMAP_ENDIAN_LITTLE = 2,
-	REGMAP_ENDIAN_NATIVE = 3,
-};
-
-struct regmap_range {
-	unsigned int range_min;
-	unsigned int range_max;
-};
-
-struct regmap_access_table {
-	const struct regmap_range *yes_ranges;
-	unsigned int n_yes_ranges;
-	const struct regmap_range *no_ranges;
-	unsigned int n_no_ranges;
-};
-
-typedef void (*regmap_lock)(void *);
-
-typedef void (*regmap_unlock)(void *);
-
-struct regmap_range_cfg;
-
-struct regmap_config {
-	const char *name;
-	int reg_bits;
-	int reg_stride;
-	int pad_bits;
-	int val_bits;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	bool disable_locking;
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	bool fast_io;
-	unsigned int max_register;
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	const struct reg_default *reg_defaults;
-	unsigned int num_reg_defaults;
-	enum regcache_type cache_type;
-	const void *reg_defaults_raw;
-	unsigned int num_reg_defaults_raw;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	bool zero_flag_mask;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	enum regmap_endian reg_format_endian;
-	enum regmap_endian val_format_endian;
-	const struct regmap_range_cfg *ranges;
-	unsigned int num_ranges;
-	bool use_hwlock;
-	unsigned int hwlock_id;
-	unsigned int hwlock_mode;
-};
-
-struct regmap_range_cfg {
-	const char *name;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-typedef int (*regmap_hw_write)(void *, const void *, size_t);
-
-typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
-
-struct regmap_async;
-
-typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
-
-struct regmap;
-
-struct regmap_async {
-	struct list_head list;
-	struct regmap *map;
-	void *work_buf;
-};
-
-typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
-
-typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
-
-typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
-
-typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-
-typedef struct regmap_async * (*regmap_hw_async_alloc)();
-
-typedef void (*regmap_hw_free_context)(void *);
-
-struct regmap_bus {
-	bool fast_io;
-	regmap_hw_write write;
-	regmap_hw_gather_write gather_write;
-	regmap_hw_async_write async_write;
-	regmap_hw_reg_write reg_write;
-	regmap_hw_reg_update_bits reg_update_bits;
-	regmap_hw_read read;
-	regmap_hw_reg_read reg_read;
-	regmap_hw_free_context free_context;
-	regmap_hw_async_alloc async_alloc;
-	u8 read_flag_mask;
-	enum regmap_endian reg_format_endian_default;
-	enum regmap_endian val_format_endian_default;
-	size_t max_raw_read;
-	size_t max_raw_write;
-};
-
-struct reg_field {
-	unsigned int reg;
-	unsigned int lsb;
-	unsigned int msb;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct regmap_format {
-	size_t buf_size;
-	size_t reg_bytes;
-	size_t pad_bytes;
-	size_t val_bytes;
-	void (*format_write)(struct regmap *, unsigned int, unsigned int);
-	void (*format_reg)(void *, unsigned int, unsigned int);
-	void (*format_val)(void *, unsigned int, unsigned int);
-	unsigned int (*parse_val)(const void *);
-	void (*parse_inplace)(void *);
-};
-
-struct hwspinlock;
-
-struct regcache_ops;
-
-struct regmap {
-	union {
-		struct mutex mutex;
-		struct {
-			spinlock_t spinlock;
-			long unsigned int spinlock_flags;
-		};
-	};
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	gfp_t alloc_flags;
-	struct device *dev;
-	void *work_buf;
-	struct regmap_format format;
-	const struct regmap_bus *bus;
-	void *bus_context;
-	const char *name;
-	bool async;
-	spinlock_t async_lock;
-	wait_queue_head_t async_waitq;
-	struct list_head async_list;
-	struct list_head async_free;
-	int async_ret;
-	bool debugfs_disable;
-	struct dentry *debugfs;
-	const char *debugfs_name;
-	unsigned int debugfs_reg_len;
-	unsigned int debugfs_val_len;
-	unsigned int debugfs_tot_len;
-	struct list_head debugfs_off_cache;
-	struct mutex cache_lock;
-	unsigned int max_register;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
-	bool defer_caching;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	int reg_shift;
-	int reg_stride;
-	int reg_stride_order;
-	const struct regcache_ops *cache_ops;
-	enum regcache_type cache_type;
-	unsigned int cache_size_raw;
-	unsigned int cache_word_size;
-	unsigned int num_reg_defaults;
-	unsigned int num_reg_defaults_raw;
-	bool cache_only;
-	bool cache_bypass;
-	bool cache_free;
-	struct reg_default *reg_defaults;
-	const void *reg_defaults_raw;
-	void *cache;
-	bool cache_dirty;
-	bool no_sync_defaults;
-	struct reg_sequence *patch;
-	int patch_regs;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	size_t max_raw_read;
-	size_t max_raw_write;
-	struct rb_root range_tree;
-	void *selector_work_buf;
-	struct hwspinlock *hwlock;
-};
-
-struct regcache_ops {
-	const char *name;
-	enum regcache_type type;
-	int (*init)(struct regmap *);
-	int (*exit)(struct regmap *);
-	void (*debugfs_init)(struct regmap *);
-	int (*read)(struct regmap *, unsigned int, unsigned int *);
-	int (*write)(struct regmap *, unsigned int, unsigned int);
-	int (*sync)(struct regmap *, unsigned int, unsigned int);
-	int (*drop)(struct regmap *, unsigned int, unsigned int);
-};
-
-struct regmap_range_node {
-	struct rb_node node;
-	const char *name;
-	struct regmap *map;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct regmap_field {
-	struct regmap *regmap;
-	unsigned int mask;
-	unsigned int shift;
-	unsigned int reg;
-	unsigned int id_size;
-	unsigned int id_offset;
-};
-
-struct trace_event_raw_regmap_reg {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_block {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int reg;
-	int count;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_sync {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_status;
-	u32 __data_loc_type;
-	int type;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_bool {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int flag;
-	char __data[0];
-};
-
-struct trace_event_raw_regmap_async {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regcache_drop_region {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int from;
-	unsigned int to;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regmap_reg {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_block {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_sync {
-	u32 name;
-	u32 status;
-	u32 type;
-};
-
-struct trace_event_data_offsets_regmap_bool {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regmap_async {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regcache_drop_region {
-	u32 name;
-};
-
-typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
-
-typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
-
-typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
-
-typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
-
-typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
-
-typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
-
-typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
-
-typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
-
-typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
-
-struct regcache_rbtree_node {
-	void *block;
-	long int *cache_present;
-	unsigned int base_reg;
-	unsigned int blklen;
-	struct rb_node node;
-};
-
-struct regcache_rbtree_ctx {
-	struct rb_root root;
-	struct regcache_rbtree_node *cached_rbnode;
-};
-
-struct regmap_debugfs_off_cache {
-	struct list_head list;
-	off_t min;
-	off_t max;
-	unsigned int base_reg;
-	unsigned int max_reg;
-};
-
-struct regmap_debugfs_node {
-	struct regmap *map;
-	const char *name;
-	struct list_head link;
-};
-
-typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
-
-struct platform_msi_priv_data {
-	struct device *dev;
-	void *host_data;
-	msi_alloc_info_t arg;
-	irq_write_msi_msg_t write_msg;
-	int devid;
-};
-
-typedef long unsigned int __kernel_old_dev_t;
-
-enum {
-	LO_FLAGS_READ_ONLY = 1,
-	LO_FLAGS_AUTOCLEAR = 4,
-	LO_FLAGS_PARTSCAN = 8,
-	LO_FLAGS_DIRECT_IO = 16,
-};
-
-struct loop_info {
-	int lo_number;
-	__kernel_old_dev_t lo_device;
-	long unsigned int lo_inode;
-	__kernel_old_dev_t lo_rdevice;
-	int lo_offset;
-	int lo_encrypt_type;
-	int lo_encrypt_key_size;
-	int lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	long unsigned int lo_init[2];
-	char reserved[4];
-};
-
-struct loop_info64 {
-	__u64 lo_device;
-	__u64 lo_inode;
-	__u64 lo_rdevice;
-	__u64 lo_offset;
-	__u64 lo_sizelimit;
-	__u32 lo_number;
-	__u32 lo_encrypt_type;
-	__u32 lo_encrypt_key_size;
-	__u32 lo_flags;
-	__u8 lo_file_name[64];
-	__u8 lo_crypt_name[64];
-	__u8 lo_encrypt_key[32];
-	__u64 lo_init[2];
-};
-
-enum {
-	Lo_unbound = 0,
-	Lo_bound = 1,
-	Lo_rundown = 2,
-};
-
-struct loop_func_table;
-
-struct loop_device {
-	int lo_number;
-	atomic_t lo_refcnt;
-	loff_t lo_offset;
-	loff_t lo_sizelimit;
-	int lo_flags;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	char lo_file_name[64];
-	char lo_crypt_name[64];
-	char lo_encrypt_key[32];
-	int lo_encrypt_key_size;
-	struct loop_func_table *lo_encryption;
-	__u32 lo_init[2];
-	kuid_t lo_key_owner;
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct file *lo_backing_file;
-	struct block_device *lo_device;
-	void *key_data;
-	gfp_t old_gfp_mask;
-	spinlock_t lo_lock;
-	int lo_state;
-	struct kthread_worker worker;
-	struct task_struct *worker_task;
-	bool use_dio;
-	bool sysfs_inited;
-	struct request_queue *lo_queue;
-	struct blk_mq_tag_set tag_set;
-	struct gendisk *lo_disk;
-};
-
-struct loop_func_table {
-	int number;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	int (*init)(struct loop_device *, const struct loop_info64 *);
-	int (*release)(struct loop_device *);
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct module *owner;
-};
-
-struct loop_cmd {
-	struct kthread_work work;
-	bool use_aio;
-	atomic_t ref;
-	long int ret;
-	struct kiocb iocb;
-	struct bio_vec *bvec;
-	struct cgroup_subsys_state *css;
-};
-
-struct compat_loop_info {
-	compat_int_t lo_number;
-	compat_dev_t lo_device;
-	compat_ulong_t lo_inode;
-	compat_dev_t lo_rdevice;
-	compat_int_t lo_offset;
-	compat_int_t lo_encrypt_type;
-	compat_int_t lo_encrypt_key_size;
-	compat_int_t lo_flags;
-	char lo_name[64];
-	unsigned char lo_encrypt_key[32];
-	compat_ulong_t lo_init[2];
-	char reserved[4];
-};
-
-struct dma_buf_sync {
-	__u64 flags;
-};
-
-struct dma_buf_list {
-	struct list_head head;
-	struct mutex lock;
-};
-
-struct trace_event_raw_dma_fence {
-	struct trace_entry ent;
-	u32 __data_loc_driver;
-	u32 __data_loc_timeline;
-	unsigned int context;
-	unsigned int seqno;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_dma_fence {
-	u32 driver;
-	u32 timeline;
-};
-
-typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
-
-typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
-
-struct default_wait_cb {
-	struct dma_fence_cb base;
-	struct task_struct *task;
-};
-
-struct dma_fence_array_cb {
-	struct dma_fence_cb cb;
-	struct dma_fence_array *array;
-};
-
-enum seqno_fence_condition {
-	SEQNO_FENCE_WAIT_GEQUAL = 0,
-	SEQNO_FENCE_WAIT_NONZERO = 1,
-};
-
-struct seqno_fence {
-	struct dma_fence base;
-	const struct dma_fence_ops *ops;
-	struct dma_buf *sync_buf;
-	uint32_t seqno_ofs;
-	enum seqno_fence_condition condition;
-};
-
-struct sync_merge_data {
-	char name[32];
-	__s32 fd2;
-	__s32 fence;
-	__u32 flags;
-	__u32 pad;
-};
-
-struct sync_fence_info {
-	char obj_name[32];
-	char driver_name[32];
-	__s32 status;
-	__u32 flags;
-	__u64 timestamp_ns;
-};
-
-struct sync_file_info {
-	char name[32];
-	__s32 status;
-	__u32 flags;
-	__u32 num_fences;
-	__u32 pad;
-	__u64 sync_fence_info;
-};
-
-struct scsi_sense_hdr {
-	u8 response_code;
-	u8 sense_key;
-	u8 asc;
-	u8 ascq;
-	u8 byte4;
-	u8 byte5;
-	u8 byte6;
-	u8 additional_length;
-};
-
-typedef __u64 blist_flags_t;
-
-enum scsi_device_state {
-	SDEV_CREATED = 1,
-	SDEV_RUNNING = 2,
-	SDEV_CANCEL = 3,
-	SDEV_DEL = 4,
-	SDEV_QUIESCE = 5,
-	SDEV_OFFLINE = 6,
-	SDEV_TRANSPORT_OFFLINE = 7,
-	SDEV_BLOCK = 8,
-	SDEV_CREATED_BLOCK = 9,
-};
-
-struct scsi_vpd {
-	struct callback_head rcu;
-	int len;
-	unsigned char data[0];
-};
-
-struct Scsi_Host;
-
-struct scsi_target;
-
-struct scsi_device_handler;
-
-struct scsi_device {
-	struct Scsi_Host *host;
-	struct request_queue *request_queue;
-	struct list_head siblings;
-	struct list_head same_target_siblings;
-	atomic_t device_busy;
-	atomic_t device_blocked;
-	spinlock_t list_lock;
-	struct list_head cmd_list;
-	struct list_head starved_entry;
-	short unsigned int queue_depth;
-	short unsigned int max_queue_depth;
-	short unsigned int last_queue_full_depth;
-	short unsigned int last_queue_full_count;
-	long unsigned int last_queue_full_time;
-	long unsigned int queue_ramp_up_period;
-	long unsigned int last_queue_ramp_up;
-	unsigned int id;
-	unsigned int channel;
-	u64 lun;
-	unsigned int manufacturer;
-	unsigned int sector_size;
-	void *hostdata;
-	unsigned char type;
-	char scsi_level;
-	char inq_periph_qual;
-	struct mutex inquiry_mutex;
-	unsigned char inquiry_len;
-	unsigned char *inquiry;
-	const char *vendor;
-	const char *model;
-	const char *rev;
-	struct scsi_vpd *vpd_pg0;
-	struct scsi_vpd *vpd_pg83;
-	struct scsi_vpd *vpd_pg80;
-	struct scsi_vpd *vpd_pg89;
-	unsigned char current_tag;
-	struct scsi_target *sdev_target;
-	blist_flags_t sdev_bflags;
-	unsigned int eh_timeout;
-	unsigned int removable: 1;
-	unsigned int changed: 1;
-	unsigned int busy: 1;
-	unsigned int lockable: 1;
-	unsigned int locked: 1;
-	unsigned int borken: 1;
-	unsigned int disconnect: 1;
-	unsigned int soft_reset: 1;
-	unsigned int sdtr: 1;
-	unsigned int wdtr: 1;
-	unsigned int ppr: 1;
-	unsigned int tagged_supported: 1;
-	unsigned int simple_tags: 1;
-	unsigned int was_reset: 1;
-	unsigned int expecting_cc_ua: 1;
-	unsigned int use_10_for_rw: 1;
-	unsigned int use_10_for_ms: 1;
-	unsigned int no_report_opcodes: 1;
-	unsigned int no_write_same: 1;
-	unsigned int use_16_for_rw: 1;
-	unsigned int skip_ms_page_8: 1;
-	unsigned int skip_ms_page_3f: 1;
-	unsigned int skip_vpd_pages: 1;
-	unsigned int try_vpd_pages: 1;
-	unsigned int use_192_bytes_for_3f: 1;
-	unsigned int no_start_on_add: 1;
-	unsigned int allow_restart: 1;
-	unsigned int manage_start_stop: 1;
-	unsigned int start_stop_pwr_cond: 1;
-	unsigned int no_uld_attach: 1;
-	unsigned int select_no_atn: 1;
-	unsigned int fix_capacity: 1;
-	unsigned int guess_capacity: 1;
-	unsigned int retry_hwerror: 1;
-	unsigned int last_sector_bug: 1;
-	unsigned int no_read_disc_info: 1;
-	unsigned int no_read_capacity_16: 1;
-	unsigned int try_rc_10_first: 1;
-	unsigned int security_supported: 1;
-	unsigned int is_visible: 1;
-	unsigned int wce_default_on: 1;
-	unsigned int no_dif: 1;
-	unsigned int broken_fua: 1;
-	unsigned int lun_in_cdb: 1;
-	unsigned int unmap_limit_for_ws: 1;
-	unsigned int rpm_autosuspend: 1;
-	atomic_t disk_events_disable_depth;
-	long unsigned int supported_events[1];
-	long unsigned int pending_events[1];
-	struct list_head event_list;
-	struct work_struct event_work;
-	unsigned int max_device_blocked;
-	atomic_t iorequest_cnt;
-	atomic_t iodone_cnt;
-	atomic_t ioerr_cnt;
-	struct device sdev_gendev;
-	struct device sdev_dev;
-	struct execute_work ew;
-	struct work_struct requeue_work;
-	struct scsi_device_handler *handler;
-	void *handler_data;
-	unsigned char access_state;
-	struct mutex state_mutex;
-	enum scsi_device_state sdev_state;
-	struct task_struct *quiesced_by;
-	long unsigned int sdev_data[0];
-};
-
-enum scsi_host_state {
-	SHOST_CREATED = 1,
-	SHOST_RUNNING = 2,
-	SHOST_CANCEL = 3,
-	SHOST_DEL = 4,
-	SHOST_RECOVERY = 5,
-	SHOST_CANCEL_RECOVERY = 6,
-	SHOST_DEL_RECOVERY = 7,
-};
-
-struct scsi_host_template;
-
-struct scsi_transport_template;
-
-struct Scsi_Host {
-	struct list_head __devices;
-	struct list_head __targets;
-	struct list_head starved_list;
-	spinlock_t default_lock;
-	spinlock_t *host_lock;
-	struct mutex scan_mutex;
-	struct list_head eh_cmd_q;
-	struct task_struct *ehandler;
-	struct completion *eh_action;
-	wait_queue_head_t host_wait;
-	struct scsi_host_template *hostt;
-	struct scsi_transport_template *transportt;
-	struct blk_mq_tag_set tag_set;
-	atomic_t host_blocked;
-	unsigned int host_failed;
-	unsigned int host_eh_scheduled;
-	unsigned int host_no;
-	int eh_deadline;
-	long unsigned int last_reset;
-	unsigned int max_channel;
-	unsigned int max_id;
-	u64 max_lun;
-	unsigned int unique_id;
-	short unsigned int max_cmd_len;
-	int this_id;
-	int can_queue;
-	short int cmd_per_lun;
-	short unsigned int sg_tablesize;
-	short unsigned int sg_prot_tablesize;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	long unsigned int dma_boundary;
-	long unsigned int virt_boundary_mask;
-	unsigned int nr_hw_queues;
-	unsigned int active_mode: 2;
-	unsigned int unchecked_isa_dma: 1;
-	unsigned int host_self_blocked: 1;
-	unsigned int reverse_ordering: 1;
-	unsigned int tmf_in_progress: 1;
-	unsigned int async_scan: 1;
-	unsigned int eh_noresume: 1;
-	unsigned int no_write_same: 1;
-	unsigned int use_cmd_list: 1;
-	unsigned int short_inquiry: 1;
-	unsigned int no_scsi2_lun_in_cdb: 1;
-	char work_q_name[20];
-	struct workqueue_struct *work_q;
-	struct workqueue_struct *tmf_work_q;
-	unsigned int max_host_blocked;
-	unsigned int prot_capabilities;
-	unsigned char prot_guard_type;
-	long unsigned int base;
-	long unsigned int io_port;
-	unsigned char n_io_port;
-	unsigned char dma_channel;
-	unsigned int irq;
-	enum scsi_host_state shost_state;
-	struct device shost_gendev;
-	struct device shost_dev;
-	void *shost_data;
-	struct device *dma_dev;
-	long unsigned int hostdata[0];
-};
-
-enum scsi_target_state {
-	STARGET_CREATED = 1,
-	STARGET_RUNNING = 2,
-	STARGET_REMOVE = 3,
-	STARGET_CREATED_REMOVE = 4,
-	STARGET_DEL = 5,
-};
-
-struct scsi_target {
-	struct scsi_device *starget_sdev_user;
-	struct list_head siblings;
-	struct list_head devices;
-	struct device dev;
-	struct kref reap_ref;
-	unsigned int channel;
-	unsigned int id;
-	unsigned int create: 1;
-	unsigned int single_lun: 1;
-	unsigned int pdt_1f_for_no_lun: 1;
-	unsigned int no_report_luns: 1;
-	unsigned int expecting_lun_change: 1;
-	atomic_t target_busy;
-	atomic_t target_blocked;
-	unsigned int can_queue;
-	unsigned int max_target_blocked;
-	char scsi_level;
-	enum scsi_target_state state;
-	void *hostdata;
-	long unsigned int starget_data[0];
-};
-
-struct scsi_data_buffer {
-	struct sg_table table;
-	unsigned int length;
-};
-
-struct scsi_pointer {
-	char *ptr;
-	int this_residual;
-	struct scatterlist *buffer;
-	int buffers_residual;
-	dma_addr_t dma_handle;
-	volatile int Status;
-	volatile int Message;
-	volatile int have_data_in;
-	volatile int sent_command;
-	volatile int phase;
-};
-
-struct scsi_cmnd {
-	struct scsi_request req;
-	struct scsi_device *device;
-	struct list_head list;
-	struct list_head eh_entry;
-	struct delayed_work abort_work;
-	struct callback_head rcu;
-	int eh_eflags;
-	long unsigned int jiffies_at_alloc;
-	int retries;
-	int allowed;
-	unsigned char prot_op;
-	unsigned char prot_type;
-	unsigned char prot_flags;
-	short unsigned int cmd_len;
-	enum dma_data_direction sc_data_direction;
-	unsigned char *cmnd;
-	struct scsi_data_buffer sdb;
-	struct scsi_data_buffer *prot_sdb;
-	unsigned int underflow;
-	unsigned int transfersize;
-	struct request *request;
-	unsigned char *sense_buffer;
-	void (*scsi_done)(struct scsi_cmnd *);
-	struct scsi_pointer SCp;
-	unsigned char *host_scribble;
-	int result;
-	int flags;
-	long unsigned int state;
-	unsigned char tag;
-};
-
-enum scsi_prot_operations {
-	SCSI_PROT_NORMAL = 0,
-	SCSI_PROT_READ_INSERT = 1,
-	SCSI_PROT_WRITE_STRIP = 2,
-	SCSI_PROT_READ_STRIP = 3,
-	SCSI_PROT_WRITE_INSERT = 4,
-	SCSI_PROT_READ_PASS = 5,
-	SCSI_PROT_WRITE_PASS = 6,
-};
-
-struct scsi_driver {
-	struct device_driver gendrv;
-	void (*rescan)(struct device *);
-	blk_status_t (*init_command)(struct scsi_cmnd *);
-	void (*uninit_command)(struct scsi_cmnd *);
-	int (*done)(struct scsi_cmnd *);
-	int (*eh_action)(struct scsi_cmnd *, int);
-	void (*eh_reset)(struct scsi_cmnd *);
-};
-
-struct scsi_host_cmd_pool;
-
-struct scsi_host_template {
-	struct module *module;
-	const char *name;
-	const char * (*info)(struct Scsi_Host *);
-	int (*ioctl)(struct scsi_device *, unsigned int, void *);
-	int (*compat_ioctl)(struct scsi_device *, unsigned int, void *);
-	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
-	void (*commit_rqs)(struct Scsi_Host *, u16);
-	int (*eh_abort_handler)(struct scsi_cmnd *);
-	int (*eh_device_reset_handler)(struct scsi_cmnd *);
-	int (*eh_target_reset_handler)(struct scsi_cmnd *);
-	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
-	int (*eh_host_reset_handler)(struct scsi_cmnd *);
-	int (*slave_alloc)(struct scsi_device *);
-	int (*slave_configure)(struct scsi_device *);
-	void (*slave_destroy)(struct scsi_device *);
-	int (*target_alloc)(struct scsi_target *);
-	void (*target_destroy)(struct scsi_target *);
-	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
-	void (*scan_start)(struct Scsi_Host *);
-	int (*change_queue_depth)(struct scsi_device *, int);
-	int (*map_queues)(struct Scsi_Host *);
-	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
-	void (*unlock_native_capacity)(struct scsi_device *);
-	int (*show_info)(struct seq_file *, struct Scsi_Host *);
-	int (*write_info)(struct Scsi_Host *, char *, int);
-	enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
-	int (*host_reset)(struct Scsi_Host *, int);
-	const char *proc_name;
-	struct proc_dir_entry *proc_dir;
-	int can_queue;
-	int this_id;
-	short unsigned int sg_tablesize;
-	short unsigned int sg_prot_tablesize;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	long unsigned int dma_boundary;
-	long unsigned int virt_boundary_mask;
-	short int cmd_per_lun;
-	unsigned char present;
-	int tag_alloc_policy;
-	unsigned int track_queue_depth: 1;
-	unsigned int supported_mode: 2;
-	unsigned int unchecked_isa_dma: 1;
-	unsigned int emulated: 1;
-	unsigned int skip_settle_delay: 1;
-	unsigned int no_write_same: 1;
-	unsigned int force_blk_mq: 1;
-	unsigned int max_host_blocked;
-	struct device_attribute **shost_attrs;
-	struct device_attribute **sdev_attrs;
-	const struct attribute_group **sdev_groups;
-	u64 vendor_id;
-	unsigned int cmd_size;
-	struct scsi_host_cmd_pool *cmd_pool;
-	int rpm_autosuspend_delay;
-};
-
-struct trace_event_raw_scsi_dispatch_cmd_start {
-	struct trace_entry ent;
-	unsigned int host_no;
-	unsigned int channel;
-	unsigned int id;
-	unsigned int lun;
-	unsigned int opcode;
-	unsigned int cmd_len;
-	unsigned int data_sglen;
-	unsigned int prot_sglen;
-	unsigned char prot_op;
-	u32 __data_loc_cmnd;
-	char __data[0];
-};
-
-struct trace_event_raw_scsi_dispatch_cmd_error {
-	struct trace_entry ent;
-	unsigned int host_no;
-	unsigned int channel;
-	unsigned int id;
-	unsigned int lun;
-	int rtn;
-	unsigned int opcode;
-	unsigned int cmd_len;
-	unsigned int data_sglen;
-	unsigned int prot_sglen;
-	unsigned char prot_op;
-	u32 __data_loc_cmnd;
-	char __data[0];
-};
-
-struct trace_event_raw_scsi_cmd_done_timeout_template {
-	struct trace_entry ent;
-	unsigned int host_no;
-	unsigned int channel;
-	unsigned int id;
-	unsigned int lun;
-	int result;
-	unsigned int opcode;
-	unsigned int cmd_len;
-	unsigned int data_sglen;
-	unsigned int prot_sglen;
-	unsigned char prot_op;
-	u32 __data_loc_cmnd;
-	char __data[0];
-};
-
-struct trace_event_raw_scsi_eh_wakeup {
-	struct trace_entry ent;
-	unsigned int host_no;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_scsi_dispatch_cmd_start {
-	u32 cmnd;
-};
-
-struct trace_event_data_offsets_scsi_dispatch_cmd_error {
-	u32 cmnd;
-};
-
-struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
-	u32 cmnd;
-};
-
-struct trace_event_data_offsets_scsi_eh_wakeup {};
-
-typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
-
-typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
-
-typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
-
-typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
-
-typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
-
-struct scsi_transport_template {
-	struct transport_container host_attrs;
-	struct transport_container target_attrs;
-	struct transport_container device_attrs;
-	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
-	int device_size;
-	int device_private_offset;
-	int target_size;
-	int target_private_offset;
-	int host_size;
-	unsigned int create_work_queue: 1;
-	void (*eh_strategy_handler)(struct Scsi_Host *);
-};
-
-struct scsi_idlun {
-	__u32 dev_id;
-	__u32 host_unique_id;
-};
-
-typedef void (*activate_complete)(void *, int);
-
-struct scsi_device_handler {
-	struct list_head list;
-	struct module *module;
-	const char *name;
-	int (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
-	int (*attach)(struct scsi_device *);
-	void (*detach)(struct scsi_device *);
-	int (*activate)(struct scsi_device *, activate_complete, void *);
-	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
-	int (*set_params)(struct scsi_device *, const char *);
-	void (*rescan)(struct scsi_device *);
-};
-
-struct scsi_eh_save {
-	int result;
-	unsigned int resid_len;
-	int eh_eflags;
-	enum dma_data_direction data_direction;
-	unsigned int underflow;
-	unsigned char cmd_len;
-	unsigned char prot_op;
-	unsigned char *cmnd;
-	struct scsi_data_buffer sdb;
-	unsigned char eh_cmnd[16];
-	struct scatterlist sense_sgl;
-};
-
-struct scsi_varlen_cdb_hdr {
-	__u8 opcode;
-	__u8 control;
-	__u8 misc[5];
-	__u8 additional_cdb_length;
-	__be16 service_action;
-};
-
-struct scsi_mode_data {
-	__u32 length;
-	__u16 block_descriptor_length;
-	__u8 medium_type;
-	__u8 device_specific;
-	__u8 header_length;
-	__u8 longlba: 1;
-};
-
-struct scsi_event {
-	enum scsi_device_event evt_type;
-	struct list_head node;
-};
-
-enum scsi_host_prot_capabilities {
-	SHOST_DIF_TYPE1_PROTECTION = 1,
-	SHOST_DIF_TYPE2_PROTECTION = 2,
-	SHOST_DIF_TYPE3_PROTECTION = 4,
-	SHOST_DIX_TYPE0_PROTECTION = 8,
-	SHOST_DIX_TYPE1_PROTECTION = 16,
-	SHOST_DIX_TYPE2_PROTECTION = 32,
-	SHOST_DIX_TYPE3_PROTECTION = 64,
-};
-
-enum {
-	ACTION_FAIL = 0,
-	ACTION_REPREP = 1,
-	ACTION_RETRY = 2,
-	ACTION_DELAYED_RETRY = 3,
-};
-
-struct value_name_pair;
-
-struct sa_name_list {
-	int opcode;
-	const struct value_name_pair *arr;
-	int arr_sz;
-};
-
-struct value_name_pair {
-	int value;
-	const char *name;
-};
-
-struct error_info {
-	short unsigned int code12;
-	short unsigned int size;
-};
-
-struct error_info2 {
-	unsigned char code1;
-	unsigned char code2_min;
-	unsigned char code2_max;
-	const char *str;
-	const char *fmt;
-};
-
-struct scsi_lun {
-	__u8 scsi_lun[8];
-};
-
-enum scsi_timeouts {
-	SCSI_DEFAULT_EH_TIMEOUT = 10000,
-};
-
-enum scsi_scan_mode {
-	SCSI_SCAN_INITIAL = 0,
-	SCSI_SCAN_RESCAN = 1,
-	SCSI_SCAN_MANUAL = 2,
-};
-
-struct async_scan_data {
-	struct list_head list;
-	struct Scsi_Host *shost;
-	struct completion prev_finished;
-};
-
-enum scsi_devinfo_key {
-	SCSI_DEVINFO_GLOBAL = 0,
-	SCSI_DEVINFO_SPI = 1,
-};
-
-struct scsi_dev_info_list {
-	struct list_head dev_info_list;
-	char vendor[8];
-	char model[16];
-	blist_flags_t flags;
-	unsigned int compatible;
-};
-
-struct scsi_dev_info_list_table {
-	struct list_head node;
-	struct list_head scsi_dev_info_list;
-	const char *name;
-	int key;
-};
-
-struct double_list {
-	struct list_head *top;
-	struct list_head *bottom;
-};
-
-struct spi_transport_attrs {
-	int period;
-	int min_period;
-	int offset;
-	int max_offset;
-	unsigned int width: 1;
-	unsigned int max_width: 1;
-	unsigned int iu: 1;
-	unsigned int max_iu: 1;
-	unsigned int dt: 1;
-	unsigned int qas: 1;
-	unsigned int max_qas: 1;
-	unsigned int wr_flow: 1;
-	unsigned int rd_strm: 1;
-	unsigned int rti: 1;
-	unsigned int pcomp_en: 1;
-	unsigned int hold_mcs: 1;
-	unsigned int initial_dv: 1;
-	long unsigned int flags;
-	unsigned int support_sync: 1;
-	unsigned int support_wide: 1;
-	unsigned int support_dt: 1;
-	unsigned int support_dt_only;
-	unsigned int support_ius;
-	unsigned int support_qas;
-	unsigned int dv_pending: 1;
-	unsigned int dv_in_progress: 1;
-	struct mutex dv_mutex;
-};
-
-enum spi_signal_type {
-	SPI_SIGNAL_UNKNOWN = 1,
-	SPI_SIGNAL_SE = 2,
-	SPI_SIGNAL_LVD = 3,
-	SPI_SIGNAL_HVD = 4,
-};
-
-struct spi_host_attrs {
-	enum spi_signal_type signalling;
-};
-
-struct spi_function_template {
-	void (*get_period)(struct scsi_target *);
-	void (*set_period)(struct scsi_target *, int);
-	void (*get_offset)(struct scsi_target *);
-	void (*set_offset)(struct scsi_target *, int);
-	void (*get_width)(struct scsi_target *);
-	void (*set_width)(struct scsi_target *, int);
-	void (*get_iu)(struct scsi_target *);
-	void (*set_iu)(struct scsi_target *, int);
-	void (*get_dt)(struct scsi_target *);
-	void (*set_dt)(struct scsi_target *, int);
-	void (*get_qas)(struct scsi_target *);
-	void (*set_qas)(struct scsi_target *, int);
-	void (*get_wr_flow)(struct scsi_target *);
-	void (*set_wr_flow)(struct scsi_target *, int);
-	void (*get_rd_strm)(struct scsi_target *);
-	void (*set_rd_strm)(struct scsi_target *, int);
-	void (*get_rti)(struct scsi_target *);
-	void (*set_rti)(struct scsi_target *, int);
-	void (*get_pcomp_en)(struct scsi_target *);
-	void (*set_pcomp_en)(struct scsi_target *, int);
-	void (*get_hold_mcs)(struct scsi_target *);
-	void (*set_hold_mcs)(struct scsi_target *, int);
-	void (*get_signalling)(struct Scsi_Host *);
-	void (*set_signalling)(struct Scsi_Host *, enum spi_signal_type);
-	int (*deny_binding)(struct scsi_target *);
-	long unsigned int show_period: 1;
-	long unsigned int show_offset: 1;
-	long unsigned int show_width: 1;
-	long unsigned int show_iu: 1;
-	long unsigned int show_dt: 1;
-	long unsigned int show_qas: 1;
-	long unsigned int show_wr_flow: 1;
-	long unsigned int show_rd_strm: 1;
-	long unsigned int show_rti: 1;
-	long unsigned int show_pcomp_en: 1;
-	long unsigned int show_hold_mcs: 1;
-};
-
-enum {
-	SPI_BLIST_NOIUS = 1,
-};
-
-struct spi_internal {
-	struct scsi_transport_template t;
-	struct spi_function_template *f;
-};
-
-enum spi_compare_returns {
-	SPI_COMPARE_SUCCESS = 0,
-	SPI_COMPARE_FAILURE = 1,
-	SPI_COMPARE_SKIP_TEST = 2,
-};
-
-struct work_queue_wrapper {
-	struct work_struct work;
-	struct scsi_device *sdev;
-};
-
-enum bip_flags {
-	BIP_BLOCK_INTEGRITY = 1,
-	BIP_MAPPED_INTEGRITY = 2,
-	BIP_CTRL_NOCHECK = 4,
-	BIP_DISK_NOCHECK = 8,
-	BIP_IP_CHECKSUM = 16,
-};
-
-enum t10_dif_type {
-	T10_PI_TYPE0_PROTECTION = 0,
-	T10_PI_TYPE1_PROTECTION = 1,
-	T10_PI_TYPE2_PROTECTION = 2,
-	T10_PI_TYPE3_PROTECTION = 3,
-};
-
-enum scsi_prot_flags {
-	SCSI_PROT_TRANSFER_PI = 1,
-	SCSI_PROT_GUARD_CHECK = 2,
-	SCSI_PROT_REF_CHECK = 4,
-	SCSI_PROT_REF_INCREMENT = 8,
-	SCSI_PROT_IP_CHECKSUM = 16,
-};
-
-enum {
-	SD_EXT_CDB_SIZE = 32,
-	SD_MEMPOOL_SIZE = 2,
-};
-
-enum {
-	SD_DEF_XFER_BLOCKS = 65535,
-	SD_MAX_XFER_BLOCKS = 4294967295,
-	SD_MAX_WS10_BLOCKS = 65535,
-	SD_MAX_WS16_BLOCKS = 8388607,
-};
-
-enum {
-	SD_LBP_FULL = 0,
-	SD_LBP_UNMAP = 1,
-	SD_LBP_WS16 = 2,
-	SD_LBP_WS10 = 3,
-	SD_LBP_ZERO = 4,
-	SD_LBP_DISABLE = 5,
-};
-
-enum {
-	SD_ZERO_WRITE = 0,
-	SD_ZERO_WS = 1,
-	SD_ZERO_WS16_UNMAP = 2,
-	SD_ZERO_WS10_UNMAP = 3,
-};
-
-struct opal_dev;
-
-struct scsi_disk {
-	struct scsi_driver *driver;
-	struct scsi_device *device;
-	struct device dev;
-	struct gendisk *disk;
-	struct opal_dev *opal_dev;
-	atomic_t openers;
-	sector_t capacity;
-	u32 max_xfer_blocks;
-	u32 opt_xfer_blocks;
-	u32 max_ws_blocks;
-	u32 max_unmap_blocks;
-	u32 unmap_granularity;
-	u32 unmap_alignment;
-	u32 index;
-	unsigned int physical_block_size;
-	unsigned int max_medium_access_timeouts;
-	unsigned int medium_access_timed_out;
-	u8 media_present;
-	u8 write_prot;
-	u8 protection_type;
-	u8 provisioning_mode;
-	u8 zeroing_mode;
-	unsigned int ATO: 1;
-	unsigned int cache_override: 1;
-	unsigned int WCE: 1;
-	unsigned int RCD: 1;
-	unsigned int DPOFUA: 1;
-	unsigned int first_scan: 1;
-	unsigned int lbpme: 1;
-	unsigned int lbprz: 1;
-	unsigned int lbpu: 1;
-	unsigned int lbpws: 1;
-	unsigned int lbpws10: 1;
-	unsigned int lbpvpd: 1;
-	unsigned int ws10: 1;
-	unsigned int ws16: 1;
-	unsigned int rc_basis: 2;
-	unsigned int zoned: 2;
-	unsigned int urswrz: 1;
-	unsigned int security: 1;
-	unsigned int ignore_medium_access_errors: 1;
-};
-
-struct cdrom_mcn {
-	__u8 medium_catalog_number[14];
-};
-
-struct packet_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct scsi_sense_hdr *sshdr;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct cdrom_device_ops;
-
-struct cdrom_device_info {
-	const struct cdrom_device_ops *ops;
-	struct list_head list;
-	struct gendisk *disk;
-	void *handle;
-	int mask;
-	int speed;
-	int capacity;
-	unsigned int options: 30;
-	unsigned int mc_flags: 2;
-	unsigned int vfs_events;
-	unsigned int ioctl_events;
-	int use_count;
-	char name[20];
-	__u8 sanyo_slot: 2;
-	__u8 keeplocked: 1;
-	__u8 reserved: 5;
-	int cdda_method;
-	__u8 last_sense;
-	__u8 media_written;
-	short unsigned int mmc3_profile;
-	int for_data;
-	int (*exit)(struct cdrom_device_info *);
-	int mrw_mode_page;
-};
-
-struct cdrom_device_ops {
-	int (*open)(struct cdrom_device_info *, int);
-	void (*release)(struct cdrom_device_info *);
-	int (*drive_status)(struct cdrom_device_info *, int);
-	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
-	int (*media_changed)(struct cdrom_device_info *, int);
-	int (*tray_move)(struct cdrom_device_info *, int);
-	int (*lock_door)(struct cdrom_device_info *, int);
-	int (*select_speed)(struct cdrom_device_info *, int);
-	int (*select_disc)(struct cdrom_device_info *, int);
-	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
-	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
-	int (*reset)(struct cdrom_device_info *);
-	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
-	const int capability;
-	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
-};
-
-enum {
-	mechtype_caddy = 0,
-	mechtype_tray = 1,
-	mechtype_popup = 2,
-	mechtype_individual_changer = 4,
-	mechtype_cartridge_changer = 5,
-};
-
-struct event_header {
-	__be16 data_len;
-	__u8 notification_class: 3;
-	__u8 reserved1: 4;
-	__u8 nea: 1;
-	__u8 supp_event_class;
-};
-
-struct media_event_desc {
-	__u8 media_event_code: 4;
-	__u8 reserved1: 4;
-	__u8 door_open: 1;
-	__u8 media_present: 1;
-	__u8 reserved2: 6;
-	__u8 start_slot;
-	__u8 end_slot;
-};
-
-struct scsi_cd {
-	struct scsi_driver *driver;
-	unsigned int capacity;
-	struct scsi_device *device;
-	unsigned int vendor;
-	long unsigned int ms_offset;
-	unsigned int writeable: 1;
-	unsigned int use: 1;
-	unsigned int xa_flag: 1;
-	unsigned int readcd_known: 1;
-	unsigned int readcd_cdda: 1;
-	unsigned int media_present: 1;
-	int tur_mismatch;
-	bool tur_changed: 1;
-	bool get_event_changed: 1;
-	bool ignore_get_event: 1;
-	struct cdrom_device_info cdi;
-	struct kref kref;
-	struct gendisk *disk;
-};
-
-struct cdrom_ti {
-	__u8 cdti_trk0;
-	__u8 cdti_ind0;
-	__u8 cdti_trk1;
-	__u8 cdti_ind1;
-};
-
-struct cdrom_tochdr {
-	__u8 cdth_trk0;
-	__u8 cdth_trk1;
-};
-
-typedef struct scsi_cd Scsi_CD;
-
-struct ccs_modesel_head {
-	__u8 _r1;
-	__u8 medium;
-	__u8 _r2;
-	__u8 block_desc_length;
-	__u8 density;
-	__u8 number_blocks_hi;
-	__u8 number_blocks_med;
-	__u8 number_blocks_lo;
-	__u8 _r3;
-	__u8 block_length_hi;
-	__u8 block_length_med;
-	__u8 block_length_lo;
-};
-
-typedef struct sg_io_hdr sg_io_hdr_t;
-
-struct sg_scsi_id {
-	int host_no;
-	int channel;
-	int scsi_id;
-	int lun;
-	int scsi_type;
-	short int h_cmd_per_lun;
-	short int d_queue_depth;
-	int unused[2];
-};
-
-typedef struct sg_scsi_id sg_scsi_id_t;
-
-struct sg_req_info {
-	char req_state;
-	char orphan;
-	char sg_io_owned;
-	char problem;
-	int pack_id;
-	void *usr_ptr;
-	unsigned int duration;
-	int unused;
-};
-
-typedef struct sg_req_info sg_req_info_t;
-
-struct sg_header {
-	int pack_len;
-	int reply_len;
-	int pack_id;
-	int result;
-	unsigned int twelve_byte: 1;
-	unsigned int target_status: 5;
-	unsigned int host_status: 8;
-	unsigned int driver_status: 8;
-	unsigned int other_flags: 10;
-	unsigned char sense_buffer[16];
-};
-
-struct sg_scatter_hold {
-	short unsigned int k_use_sg;
-	unsigned int sglist_len;
-	unsigned int bufflen;
-	struct page **pages;
-	int page_order;
-	char dio_in_use;
-	unsigned char cmd_opcode;
-};
-
-typedef struct sg_scatter_hold Sg_scatter_hold;
-
-struct sg_fd;
-
-struct sg_request {
-	struct list_head entry;
-	struct sg_fd *parentfp;
-	Sg_scatter_hold data;
-	sg_io_hdr_t header;
-	unsigned char sense_b[96];
-	char res_used;
-	char orphan;
-	char sg_io_owned;
-	char done;
-	struct request *rq;
-	struct bio *bio;
-	struct execute_work ew;
-};
-
-typedef struct sg_request Sg_request;
-
-struct sg_device;
-
-struct sg_fd {
-	struct list_head sfd_siblings;
-	struct sg_device *parentdp;
-	wait_queue_head_t read_wait;
-	rwlock_t rq_list_lock;
-	struct mutex f_mutex;
-	int timeout;
-	int timeout_user;
-	Sg_scatter_hold reserve;
-	struct list_head rq_list;
-	struct fasync_struct *async_qp;
-	Sg_request req_arr[16];
-	char force_packid;
-	char cmd_q;
-	unsigned char next_cmd_len;
-	char keep_orphan;
-	char mmap_called;
-	char res_in_use;
-	struct kref f_ref;
-	struct execute_work ew;
-};
-
-struct sg_device {
-	struct scsi_device *device;
-	wait_queue_head_t open_wait;
-	struct mutex open_rel_lock;
-	int sg_tablesize;
-	u32 index;
-	struct list_head sfds;
-	rwlock_t sfd_lock;
-	atomic_t detaching;
-	bool exclude;
-	int open_cnt;
-	char sgdebug;
-	struct gendisk *disk;
-	struct cdev *cdev;
-	struct kref d_ref;
-};
-
-typedef struct sg_fd Sg_fd;
-
-typedef struct sg_device Sg_device;
-
-struct compat_sg_req_info {
-	char req_state;
-	char orphan;
-	char sg_io_owned;
-	char problem;
-	int pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned int duration;
-	int unused;
-};
-
-struct sg_proc_deviter {
-	loff_t index;
-	size_t max;
-};
-
-enum {
-	ATA_MAX_DEVICES = 2,
-	ATA_MAX_PRD = 256,
-	ATA_SECT_SIZE = 512,
-	ATA_MAX_SECTORS_128 = 128,
-	ATA_MAX_SECTORS = 256,
-	ATA_MAX_SECTORS_1024 = 1024,
-	ATA_MAX_SECTORS_LBA48 = 65535,
-	ATA_MAX_SECTORS_TAPE = 65535,
-	ATA_MAX_TRIM_RNUM = 64,
-	ATA_ID_WORDS = 256,
-	ATA_ID_CONFIG = 0,
-	ATA_ID_CYLS = 1,
-	ATA_ID_HEADS = 3,
-	ATA_ID_SECTORS = 6,
-	ATA_ID_SERNO = 10,
-	ATA_ID_BUF_SIZE = 21,
-	ATA_ID_FW_REV = 23,
-	ATA_ID_PROD = 27,
-	ATA_ID_MAX_MULTSECT = 47,
-	ATA_ID_DWORD_IO = 48,
-	ATA_ID_TRUSTED = 48,
-	ATA_ID_CAPABILITY = 49,
-	ATA_ID_OLD_PIO_MODES = 51,
-	ATA_ID_OLD_DMA_MODES = 52,
-	ATA_ID_FIELD_VALID = 53,
-	ATA_ID_CUR_CYLS = 54,
-	ATA_ID_CUR_HEADS = 55,
-	ATA_ID_CUR_SECTORS = 56,
-	ATA_ID_MULTSECT = 59,
-	ATA_ID_LBA_CAPACITY = 60,
-	ATA_ID_SWDMA_MODES = 62,
-	ATA_ID_MWDMA_MODES = 63,
-	ATA_ID_PIO_MODES = 64,
-	ATA_ID_EIDE_DMA_MIN = 65,
-	ATA_ID_EIDE_DMA_TIME = 66,
-	ATA_ID_EIDE_PIO = 67,
-	ATA_ID_EIDE_PIO_IORDY = 68,
-	ATA_ID_ADDITIONAL_SUPP = 69,
-	ATA_ID_QUEUE_DEPTH = 75,
-	ATA_ID_SATA_CAPABILITY = 76,
-	ATA_ID_SATA_CAPABILITY_2 = 77,
-	ATA_ID_FEATURE_SUPP = 78,
-	ATA_ID_MAJOR_VER = 80,
-	ATA_ID_COMMAND_SET_1 = 82,
-	ATA_ID_COMMAND_SET_2 = 83,
-	ATA_ID_CFSSE = 84,
-	ATA_ID_CFS_ENABLE_1 = 85,
-	ATA_ID_CFS_ENABLE_2 = 86,
-	ATA_ID_CSF_DEFAULT = 87,
-	ATA_ID_UDMA_MODES = 88,
-	ATA_ID_HW_CONFIG = 93,
-	ATA_ID_SPG = 98,
-	ATA_ID_LBA_CAPACITY_2 = 100,
-	ATA_ID_SECTOR_SIZE = 106,
-	ATA_ID_WWN = 108,
-	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
-	ATA_ID_COMMAND_SET_3 = 119,
-	ATA_ID_COMMAND_SET_4 = 120,
-	ATA_ID_LAST_LUN = 126,
-	ATA_ID_DLF = 128,
-	ATA_ID_CSFO = 129,
-	ATA_ID_CFA_POWER = 160,
-	ATA_ID_CFA_KEY_MGMT = 162,
-	ATA_ID_CFA_MODES = 163,
-	ATA_ID_DATA_SET_MGMT = 169,
-	ATA_ID_SCT_CMD_XPORT = 206,
-	ATA_ID_ROT_SPEED = 217,
-	ATA_ID_PIO4 = 2,
-	ATA_ID_SERNO_LEN = 20,
-	ATA_ID_FW_REV_LEN = 8,
-	ATA_ID_PROD_LEN = 40,
-	ATA_ID_WWN_LEN = 8,
-	ATA_PCI_CTL_OFS = 2,
-	ATA_PIO0 = 1,
-	ATA_PIO1 = 3,
-	ATA_PIO2 = 7,
-	ATA_PIO3 = 15,
-	ATA_PIO4 = 31,
-	ATA_PIO5 = 63,
-	ATA_PIO6 = 127,
-	ATA_PIO4_ONLY = 16,
-	ATA_SWDMA0 = 1,
-	ATA_SWDMA1 = 3,
-	ATA_SWDMA2 = 7,
-	ATA_SWDMA2_ONLY = 4,
-	ATA_MWDMA0 = 1,
-	ATA_MWDMA1 = 3,
-	ATA_MWDMA2 = 7,
-	ATA_MWDMA3 = 15,
-	ATA_MWDMA4 = 31,
-	ATA_MWDMA12_ONLY = 6,
-	ATA_MWDMA2_ONLY = 4,
-	ATA_UDMA0 = 1,
-	ATA_UDMA1 = 3,
-	ATA_UDMA2 = 7,
-	ATA_UDMA3 = 15,
-	ATA_UDMA4 = 31,
-	ATA_UDMA5 = 63,
-	ATA_UDMA6 = 127,
-	ATA_UDMA7 = 255,
-	ATA_UDMA24_ONLY = 20,
-	ATA_UDMA_MASK_40C = 7,
-	ATA_PRD_SZ = 8,
-	ATA_PRD_TBL_SZ = 2048,
-	ATA_PRD_EOT = 2147483648,
-	ATA_DMA_TABLE_OFS = 4,
-	ATA_DMA_STATUS = 2,
-	ATA_DMA_CMD = 0,
-	ATA_DMA_WR = 8,
-	ATA_DMA_START = 1,
-	ATA_DMA_INTR = 4,
-	ATA_DMA_ERR = 2,
-	ATA_DMA_ACTIVE = 1,
-	ATA_HOB = 128,
-	ATA_NIEN = 2,
-	ATA_LBA = 64,
-	ATA_DEV1 = 16,
-	ATA_DEVICE_OBS = 160,
-	ATA_DEVCTL_OBS = 8,
-	ATA_BUSY = 128,
-	ATA_DRDY = 64,
-	ATA_DF = 32,
-	ATA_DSC = 16,
-	ATA_DRQ = 8,
-	ATA_CORR = 4,
-	ATA_SENSE = 2,
-	ATA_ERR = 1,
-	ATA_SRST = 4,
-	ATA_ICRC = 128,
-	ATA_BBK = 128,
-	ATA_UNC = 64,
-	ATA_MC = 32,
-	ATA_IDNF = 16,
-	ATA_MCR = 8,
-	ATA_ABORTED = 4,
-	ATA_TRK0NF = 2,
-	ATA_AMNF = 1,
-	ATAPI_LFS = 240,
-	ATAPI_EOM = 2,
-	ATAPI_ILI = 1,
-	ATAPI_IO = 2,
-	ATAPI_COD = 1,
-	ATA_REG_DATA = 0,
-	ATA_REG_ERR = 1,
-	ATA_REG_NSECT = 2,
-	ATA_REG_LBAL = 3,
-	ATA_REG_LBAM = 4,
-	ATA_REG_LBAH = 5,
-	ATA_REG_DEVICE = 6,
-	ATA_REG_STATUS = 7,
-	ATA_REG_FEATURE = 1,
-	ATA_REG_CMD = 7,
-	ATA_REG_BYTEL = 4,
-	ATA_REG_BYTEH = 5,
-	ATA_REG_DEVSEL = 6,
-	ATA_REG_IRQ = 2,
-	ATA_CMD_DEV_RESET = 8,
-	ATA_CMD_CHK_POWER = 229,
-	ATA_CMD_STANDBY = 226,
-	ATA_CMD_IDLE = 227,
-	ATA_CMD_EDD = 144,
-	ATA_CMD_DOWNLOAD_MICRO = 146,
-	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
-	ATA_CMD_NOP = 0,
-	ATA_CMD_FLUSH = 231,
-	ATA_CMD_FLUSH_EXT = 234,
-	ATA_CMD_ID_ATA = 236,
-	ATA_CMD_ID_ATAPI = 161,
-	ATA_CMD_SERVICE = 162,
-	ATA_CMD_READ = 200,
-	ATA_CMD_READ_EXT = 37,
-	ATA_CMD_READ_QUEUED = 38,
-	ATA_CMD_READ_STREAM_EXT = 43,
-	ATA_CMD_READ_STREAM_DMA_EXT = 42,
-	ATA_CMD_WRITE = 202,
-	ATA_CMD_WRITE_EXT = 53,
-	ATA_CMD_WRITE_QUEUED = 54,
-	ATA_CMD_WRITE_STREAM_EXT = 59,
-	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
-	ATA_CMD_WRITE_FUA_EXT = 61,
-	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
-	ATA_CMD_FPDMA_READ = 96,
-	ATA_CMD_FPDMA_WRITE = 97,
-	ATA_CMD_NCQ_NON_DATA = 99,
-	ATA_CMD_FPDMA_SEND = 100,
-	ATA_CMD_FPDMA_RECV = 101,
-	ATA_CMD_PIO_READ = 32,
-	ATA_CMD_PIO_READ_EXT = 36,
-	ATA_CMD_PIO_WRITE = 48,
-	ATA_CMD_PIO_WRITE_EXT = 52,
-	ATA_CMD_READ_MULTI = 196,
-	ATA_CMD_READ_MULTI_EXT = 41,
-	ATA_CMD_WRITE_MULTI = 197,
-	ATA_CMD_WRITE_MULTI_EXT = 57,
-	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
-	ATA_CMD_SET_FEATURES = 239,
-	ATA_CMD_SET_MULTI = 198,
-	ATA_CMD_PACKET = 160,
-	ATA_CMD_VERIFY = 64,
-	ATA_CMD_VERIFY_EXT = 66,
-	ATA_CMD_WRITE_UNCORR_EXT = 69,
-	ATA_CMD_STANDBYNOW1 = 224,
-	ATA_CMD_IDLEIMMEDIATE = 225,
-	ATA_CMD_SLEEP = 230,
-	ATA_CMD_INIT_DEV_PARAMS = 145,
-	ATA_CMD_READ_NATIVE_MAX = 248,
-	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
-	ATA_CMD_SET_MAX = 249,
-	ATA_CMD_SET_MAX_EXT = 55,
-	ATA_CMD_READ_LOG_EXT = 47,
-	ATA_CMD_WRITE_LOG_EXT = 63,
-	ATA_CMD_READ_LOG_DMA_EXT = 71,
-	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
-	ATA_CMD_TRUSTED_NONDATA = 91,
-	ATA_CMD_TRUSTED_RCV = 92,
-	ATA_CMD_TRUSTED_RCV_DMA = 93,
-	ATA_CMD_TRUSTED_SND = 94,
-	ATA_CMD_TRUSTED_SND_DMA = 95,
-	ATA_CMD_PMP_READ = 228,
-	ATA_CMD_PMP_READ_DMA = 233,
-	ATA_CMD_PMP_WRITE = 232,
-	ATA_CMD_PMP_WRITE_DMA = 235,
-	ATA_CMD_CONF_OVERLAY = 177,
-	ATA_CMD_SEC_SET_PASS = 241,
-	ATA_CMD_SEC_UNLOCK = 242,
-	ATA_CMD_SEC_ERASE_PREP = 243,
-	ATA_CMD_SEC_ERASE_UNIT = 244,
-	ATA_CMD_SEC_FREEZE_LOCK = 245,
-	ATA_CMD_SEC_DISABLE_PASS = 246,
-	ATA_CMD_CONFIG_STREAM = 81,
-	ATA_CMD_SMART = 176,
-	ATA_CMD_MEDIA_LOCK = 222,
-	ATA_CMD_MEDIA_UNLOCK = 223,
-	ATA_CMD_DSM = 6,
-	ATA_CMD_CHK_MED_CRD_TYP = 209,
-	ATA_CMD_CFA_REQ_EXT_ERR = 3,
-	ATA_CMD_CFA_WRITE_NE = 56,
-	ATA_CMD_CFA_TRANS_SECT = 135,
-	ATA_CMD_CFA_ERASE = 192,
-	ATA_CMD_CFA_WRITE_MULT_NE = 205,
-	ATA_CMD_REQ_SENSE_DATA = 11,
-	ATA_CMD_SANITIZE_DEVICE = 180,
-	ATA_CMD_ZAC_MGMT_IN = 74,
-	ATA_CMD_ZAC_MGMT_OUT = 159,
-	ATA_CMD_RESTORE = 16,
-	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
-	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
-	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
-	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
-	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
-	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
-	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
-	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
-	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
-	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
-	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
-	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
-	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
-	ATA_LOG_DIRECTORY = 0,
-	ATA_LOG_SATA_NCQ = 16,
-	ATA_LOG_NCQ_NON_DATA = 18,
-	ATA_LOG_NCQ_SEND_RECV = 19,
-	ATA_LOG_IDENTIFY_DEVICE = 48,
-	ATA_LOG_SECURITY = 6,
-	ATA_LOG_SATA_SETTINGS = 8,
-	ATA_LOG_ZONED_INFORMATION = 9,
-	ATA_LOG_DEVSLP_OFFSET = 48,
-	ATA_LOG_DEVSLP_SIZE = 8,
-	ATA_LOG_DEVSLP_MDAT = 0,
-	ATA_LOG_DEVSLP_MDAT_MASK = 31,
-	ATA_LOG_DEVSLP_DETO = 1,
-	ATA_LOG_DEVSLP_VALID = 7,
-	ATA_LOG_DEVSLP_VALID_MASK = 128,
-	ATA_LOG_NCQ_PRIO_OFFSET = 9,
-	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
-	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
-	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
-	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
-	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
-	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
-	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
-	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
-	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
-	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
-	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
-	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
-	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
-	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
-	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
-	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
-	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
-	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
-	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
-	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
-	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
-	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
-	ATA_CMD_READ_LONG = 34,
-	ATA_CMD_READ_LONG_ONCE = 35,
-	ATA_CMD_WRITE_LONG = 50,
-	ATA_CMD_WRITE_LONG_ONCE = 51,
-	SETFEATURES_XFER = 3,
-	XFER_UDMA_7 = 71,
-	XFER_UDMA_6 = 70,
-	XFER_UDMA_5 = 69,
-	XFER_UDMA_4 = 68,
-	XFER_UDMA_3 = 67,
-	XFER_UDMA_2 = 66,
-	XFER_UDMA_1 = 65,
-	XFER_UDMA_0 = 64,
-	XFER_MW_DMA_4 = 36,
-	XFER_MW_DMA_3 = 35,
-	XFER_MW_DMA_2 = 34,
-	XFER_MW_DMA_1 = 33,
-	XFER_MW_DMA_0 = 32,
-	XFER_SW_DMA_2 = 18,
-	XFER_SW_DMA_1 = 17,
-	XFER_SW_DMA_0 = 16,
-	XFER_PIO_6 = 14,
-	XFER_PIO_5 = 13,
-	XFER_PIO_4 = 12,
-	XFER_PIO_3 = 11,
-	XFER_PIO_2 = 10,
-	XFER_PIO_1 = 9,
-	XFER_PIO_0 = 8,
-	XFER_PIO_SLOW = 0,
-	SETFEATURES_WC_ON = 2,
-	SETFEATURES_WC_OFF = 130,
-	SETFEATURES_RA_ON = 170,
-	SETFEATURES_RA_OFF = 85,
-	SETFEATURES_AAM_ON = 66,
-	SETFEATURES_AAM_OFF = 194,
-	SETFEATURES_SPINUP = 7,
-	SETFEATURES_SPINUP_TIMEOUT = 30000,
-	SETFEATURES_SATA_ENABLE = 16,
-	SETFEATURES_SATA_DISABLE = 144,
-	SATA_FPDMA_OFFSET = 1,
-	SATA_FPDMA_AA = 2,
-	SATA_DIPM = 3,
-	SATA_FPDMA_IN_ORDER = 4,
-	SATA_AN = 5,
-	SATA_SSP = 6,
-	SATA_DEVSLP = 9,
-	SETFEATURE_SENSE_DATA = 195,
-	ATA_SET_MAX_ADDR = 0,
-	ATA_SET_MAX_PASSWD = 1,
-	ATA_SET_MAX_LOCK = 2,
-	ATA_SET_MAX_UNLOCK = 3,
-	ATA_SET_MAX_FREEZE_LOCK = 4,
-	ATA_SET_MAX_PASSWD_DMA = 5,
-	ATA_SET_MAX_UNLOCK_DMA = 6,
-	ATA_DCO_RESTORE = 192,
-	ATA_DCO_FREEZE_LOCK = 193,
-	ATA_DCO_IDENTIFY = 194,
-	ATA_DCO_SET = 195,
-	ATA_SMART_ENABLE = 216,
-	ATA_SMART_READ_VALUES = 208,
-	ATA_SMART_READ_THRESHOLDS = 209,
-	ATA_DSM_TRIM = 1,
-	ATA_SMART_LBAM_PASS = 79,
-	ATA_SMART_LBAH_PASS = 194,
-	ATAPI_PKT_DMA = 1,
-	ATAPI_DMADIR = 4,
-	ATAPI_CDB_LEN = 16,
-	SATA_PMP_MAX_PORTS = 15,
-	SATA_PMP_CTRL_PORT = 15,
-	SATA_PMP_GSCR_DWORDS = 128,
-	SATA_PMP_GSCR_PROD_ID = 0,
-	SATA_PMP_GSCR_REV = 1,
-	SATA_PMP_GSCR_PORT_INFO = 2,
-	SATA_PMP_GSCR_ERROR = 32,
-	SATA_PMP_GSCR_ERROR_EN = 33,
-	SATA_PMP_GSCR_FEAT = 64,
-	SATA_PMP_GSCR_FEAT_EN = 96,
-	SATA_PMP_PSCR_STATUS = 0,
-	SATA_PMP_PSCR_ERROR = 1,
-	SATA_PMP_PSCR_CONTROL = 2,
-	SATA_PMP_FEAT_BIST = 1,
-	SATA_PMP_FEAT_PMREQ = 2,
-	SATA_PMP_FEAT_DYNSSC = 4,
-	SATA_PMP_FEAT_NOTIFY = 8,
-	ATA_CBL_NONE = 0,
-	ATA_CBL_PATA40 = 1,
-	ATA_CBL_PATA80 = 2,
-	ATA_CBL_PATA40_SHORT = 3,
-	ATA_CBL_PATA_UNK = 4,
-	ATA_CBL_PATA_IGN = 5,
-	ATA_CBL_SATA = 6,
-	SCR_STATUS = 0,
-	SCR_ERROR = 1,
-	SCR_CONTROL = 2,
-	SCR_ACTIVE = 3,
-	SCR_NOTIFICATION = 4,
-	SERR_DATA_RECOVERED = 1,
-	SERR_COMM_RECOVERED = 2,
-	SERR_DATA = 256,
-	SERR_PERSISTENT = 512,
-	SERR_PROTOCOL = 1024,
-	SERR_INTERNAL = 2048,
-	SERR_PHYRDY_CHG = 65536,
-	SERR_PHY_INT_ERR = 131072,
-	SERR_COMM_WAKE = 262144,
-	SERR_10B_8B_ERR = 524288,
-	SERR_DISPARITY = 1048576,
-	SERR_CRC = 2097152,
-	SERR_HANDSHAKE = 4194304,
-	SERR_LINK_SEQ_ERR = 8388608,
-	SERR_TRANS_ST_ERROR = 16777216,
-	SERR_UNRECOG_FIS = 33554432,
-	SERR_DEV_XCHG = 67108864,
-};
-
-enum ata_prot_flags {
-	ATA_PROT_FLAG_PIO = 1,
-	ATA_PROT_FLAG_DMA = 2,
-	ATA_PROT_FLAG_NCQ = 4,
-	ATA_PROT_FLAG_ATAPI = 8,
-	ATA_PROT_UNKNOWN = 255,
-	ATA_PROT_NODATA = 0,
-	ATA_PROT_PIO = 1,
-	ATA_PROT_DMA = 2,
-	ATA_PROT_NCQ_NODATA = 4,
-	ATA_PROT_NCQ = 6,
-	ATAPI_PROT_NODATA = 8,
-	ATAPI_PROT_PIO = 9,
-	ATAPI_PROT_DMA = 10,
-};
-
-struct ata_bmdma_prd {
-	__le32 addr;
-	__le32 flags_len;
-};
-
-enum {
-	ATA_MSG_DRV = 1,
-	ATA_MSG_INFO = 2,
-	ATA_MSG_PROBE = 4,
-	ATA_MSG_WARN = 8,
-	ATA_MSG_MALLOC = 16,
-	ATA_MSG_CTL = 32,
-	ATA_MSG_INTR = 64,
-	ATA_MSG_ERR = 128,
-};
-
-enum {
-	LIBATA_MAX_PRD = 128,
-	LIBATA_DUMB_MAX_PRD = 64,
-	ATA_DEF_QUEUE = 1,
-	ATA_MAX_QUEUE = 32,
-	ATA_TAG_INTERNAL = 32,
-	ATA_SHORT_PAUSE = 16,
-	ATAPI_MAX_DRAIN = 16384,
-	ATA_ALL_DEVICES = 3,
-	ATA_SHT_EMULATED = 1,
-	ATA_SHT_THIS_ID = 4294967295,
-	ATA_TFLAG_LBA48 = 1,
-	ATA_TFLAG_ISADDR = 2,
-	ATA_TFLAG_DEVICE = 4,
-	ATA_TFLAG_WRITE = 8,
-	ATA_TFLAG_LBA = 16,
-	ATA_TFLAG_FUA = 32,
-	ATA_TFLAG_POLLING = 64,
-	ATA_DFLAG_LBA = 1,
-	ATA_DFLAG_LBA48 = 2,
-	ATA_DFLAG_CDB_INTR = 4,
-	ATA_DFLAG_NCQ = 8,
-	ATA_DFLAG_FLUSH_EXT = 16,
-	ATA_DFLAG_ACPI_PENDING = 32,
-	ATA_DFLAG_ACPI_FAILED = 64,
-	ATA_DFLAG_AN = 128,
-	ATA_DFLAG_TRUSTED = 256,
-	ATA_DFLAG_DMADIR = 1024,
-	ATA_DFLAG_CFG_MASK = 4095,
-	ATA_DFLAG_PIO = 4096,
-	ATA_DFLAG_NCQ_OFF = 8192,
-	ATA_DFLAG_SLEEPING = 32768,
-	ATA_DFLAG_DUBIOUS_XFER = 65536,
-	ATA_DFLAG_NO_UNLOAD = 131072,
-	ATA_DFLAG_UNLOCK_HPA = 262144,
-	ATA_DFLAG_NCQ_SEND_RECV = 524288,
-	ATA_DFLAG_NCQ_PRIO = 1048576,
-	ATA_DFLAG_NCQ_PRIO_ENABLE = 2097152,
-	ATA_DFLAG_INIT_MASK = 16777215,
-	ATA_DFLAG_DETACH = 16777216,
-	ATA_DFLAG_DETACHED = 33554432,
-	ATA_DFLAG_DA = 67108864,
-	ATA_DFLAG_DEVSLP = 134217728,
-	ATA_DFLAG_ACPI_DISABLED = 268435456,
-	ATA_DFLAG_D_SENSE = 536870912,
-	ATA_DFLAG_ZAC = 1073741824,
-	ATA_DEV_UNKNOWN = 0,
-	ATA_DEV_ATA = 1,
-	ATA_DEV_ATA_UNSUP = 2,
-	ATA_DEV_ATAPI = 3,
-	ATA_DEV_ATAPI_UNSUP = 4,
-	ATA_DEV_PMP = 5,
-	ATA_DEV_PMP_UNSUP = 6,
-	ATA_DEV_SEMB = 7,
-	ATA_DEV_SEMB_UNSUP = 8,
-	ATA_DEV_ZAC = 9,
-	ATA_DEV_ZAC_UNSUP = 10,
-	ATA_DEV_NONE = 11,
-	ATA_LFLAG_NO_HRST = 2,
-	ATA_LFLAG_NO_SRST = 4,
-	ATA_LFLAG_ASSUME_ATA = 8,
-	ATA_LFLAG_ASSUME_SEMB = 16,
-	ATA_LFLAG_ASSUME_CLASS = 24,
-	ATA_LFLAG_NO_RETRY = 32,
-	ATA_LFLAG_DISABLED = 64,
-	ATA_LFLAG_SW_ACTIVITY = 128,
-	ATA_LFLAG_NO_LPM = 256,
-	ATA_LFLAG_RST_ONCE = 512,
-	ATA_LFLAG_CHANGED = 1024,
-	ATA_LFLAG_NO_DB_DELAY = 2048,
-	ATA_FLAG_SLAVE_POSS = 1,
-	ATA_FLAG_SATA = 2,
-	ATA_FLAG_NO_LPM = 4,
-	ATA_FLAG_NO_LOG_PAGE = 32,
-	ATA_FLAG_NO_ATAPI = 64,
-	ATA_FLAG_PIO_DMA = 128,
-	ATA_FLAG_PIO_LBA48 = 256,
-	ATA_FLAG_PIO_POLLING = 512,
-	ATA_FLAG_NCQ = 1024,
-	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
-	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
-	ATA_FLAG_DEBUGMSG = 8192,
-	ATA_FLAG_FPDMA_AA = 16384,
-	ATA_FLAG_IGN_SIMPLEX = 32768,
-	ATA_FLAG_NO_IORDY = 65536,
-	ATA_FLAG_ACPI_SATA = 131072,
-	ATA_FLAG_AN = 262144,
-	ATA_FLAG_PMP = 524288,
-	ATA_FLAG_FPDMA_AUX = 1048576,
-	ATA_FLAG_EM = 2097152,
-	ATA_FLAG_SW_ACTIVITY = 4194304,
-	ATA_FLAG_NO_DIPM = 8388608,
-	ATA_FLAG_SAS_HOST = 16777216,
-	ATA_PFLAG_EH_PENDING = 1,
-	ATA_PFLAG_EH_IN_PROGRESS = 2,
-	ATA_PFLAG_FROZEN = 4,
-	ATA_PFLAG_RECOVERED = 8,
-	ATA_PFLAG_LOADING = 16,
-	ATA_PFLAG_SCSI_HOTPLUG = 64,
-	ATA_PFLAG_INITIALIZING = 128,
-	ATA_PFLAG_RESETTING = 256,
-	ATA_PFLAG_UNLOADING = 512,
-	ATA_PFLAG_UNLOADED = 1024,
-	ATA_PFLAG_SUSPENDED = 131072,
-	ATA_PFLAG_PM_PENDING = 262144,
-	ATA_PFLAG_INIT_GTM_VALID = 524288,
-	ATA_PFLAG_PIO32 = 1048576,
-	ATA_PFLAG_PIO32CHANGE = 2097152,
-	ATA_PFLAG_EXTERNAL = 4194304,
-	ATA_QCFLAG_ACTIVE = 1,
-	ATA_QCFLAG_DMAMAP = 2,
-	ATA_QCFLAG_IO = 8,
-	ATA_QCFLAG_RESULT_TF = 16,
-	ATA_QCFLAG_CLEAR_EXCL = 32,
-	ATA_QCFLAG_QUIET = 64,
-	ATA_QCFLAG_RETRY = 128,
-	ATA_QCFLAG_FAILED = 65536,
-	ATA_QCFLAG_SENSE_VALID = 131072,
-	ATA_QCFLAG_EH_SCHEDULED = 262144,
-	ATA_HOST_SIMPLEX = 1,
-	ATA_HOST_STARTED = 2,
-	ATA_HOST_PARALLEL_SCAN = 4,
-	ATA_HOST_IGNORE_ATA = 8,
-	ATA_TMOUT_BOOT = 30000,
-	ATA_TMOUT_BOOT_QUICK = 7000,
-	ATA_TMOUT_INTERNAL_QUICK = 5000,
-	ATA_TMOUT_MAX_PARK = 30000,
-	ATA_TMOUT_FF_WAIT_LONG = 2000,
-	ATA_TMOUT_FF_WAIT = 800,
-	ATA_WAIT_AFTER_RESET = 150,
-	ATA_TMOUT_PMP_SRST_WAIT = 5000,
-	ATA_TMOUT_SPURIOUS_PHY = 10000,
-	BUS_UNKNOWN = 0,
-	BUS_DMA = 1,
-	BUS_IDLE = 2,
-	BUS_NOINTR = 3,
-	BUS_NODATA = 4,
-	BUS_TIMER = 5,
-	BUS_PIO = 6,
-	BUS_EDD = 7,
-	BUS_IDENTIFY = 8,
-	BUS_PACKET = 9,
-	PORT_UNKNOWN = 0,
-	PORT_ENABLED = 1,
-	PORT_DISABLED = 2,
-	ATA_NR_PIO_MODES = 7,
-	ATA_NR_MWDMA_MODES = 5,
-	ATA_NR_UDMA_MODES = 8,
-	ATA_SHIFT_PIO = 0,
-	ATA_SHIFT_MWDMA = 7,
-	ATA_SHIFT_UDMA = 12,
-	ATA_SHIFT_PRIO = 6,
-	ATA_PRIO_HIGH = 2,
-	ATA_DMA_PAD_SZ = 4,
-	ATA_ERING_SIZE = 32,
-	ATA_DEFER_LINK = 1,
-	ATA_DEFER_PORT = 2,
-	ATA_EH_DESC_LEN = 80,
-	ATA_EH_REVALIDATE = 1,
-	ATA_EH_SOFTRESET = 2,
-	ATA_EH_HARDRESET = 4,
-	ATA_EH_RESET = 6,
-	ATA_EH_ENABLE_LINK = 8,
-	ATA_EH_PARK = 32,
-	ATA_EH_PERDEV_MASK = 33,
-	ATA_EH_ALL_ACTIONS = 15,
-	ATA_EHI_HOTPLUGGED = 1,
-	ATA_EHI_NO_AUTOPSY = 4,
-	ATA_EHI_QUIET = 8,
-	ATA_EHI_NO_RECOVERY = 16,
-	ATA_EHI_DID_SOFTRESET = 65536,
-	ATA_EHI_DID_HARDRESET = 131072,
-	ATA_EHI_PRINTINFO = 262144,
-	ATA_EHI_SETMODE = 524288,
-	ATA_EHI_POST_SETMODE = 1048576,
-	ATA_EHI_DID_RESET = 196608,
-	ATA_EHI_TO_SLAVE_MASK = 12,
-	ATA_EH_MAX_TRIES = 5,
-	ATA_LINK_RESUME_TRIES = 5,
-	ATA_PROBE_MAX_TRIES = 3,
-	ATA_EH_DEV_TRIES = 3,
-	ATA_EH_PMP_TRIES = 5,
-	ATA_EH_PMP_LINK_TRIES = 3,
-	SATA_PMP_RW_TIMEOUT = 3000,
-	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6,
-	ATA_HORKAGE_DIAGNOSTIC = 1,
-	ATA_HORKAGE_NODMA = 2,
-	ATA_HORKAGE_NONCQ = 4,
-	ATA_HORKAGE_MAX_SEC_128 = 8,
-	ATA_HORKAGE_BROKEN_HPA = 16,
-	ATA_HORKAGE_DISABLE = 32,
-	ATA_HORKAGE_HPA_SIZE = 64,
-	ATA_HORKAGE_IVB = 256,
-	ATA_HORKAGE_STUCK_ERR = 512,
-	ATA_HORKAGE_BRIDGE_OK = 1024,
-	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
-	ATA_HORKAGE_FIRMWARE_WARN = 4096,
-	ATA_HORKAGE_1_5_GBPS = 8192,
-	ATA_HORKAGE_NOSETXFER = 16384,
-	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
-	ATA_HORKAGE_DUMP_ID = 65536,
-	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
-	ATA_HORKAGE_ATAPI_DMADIR = 262144,
-	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
-	ATA_HORKAGE_NOLPM = 1048576,
-	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
-	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
-	ATA_HORKAGE_NO_DMA_LOG = 8388608,
-	ATA_HORKAGE_NOTRIM = 16777216,
-	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
-	ATA_DMA_MASK_ATA = 1,
-	ATA_DMA_MASK_ATAPI = 2,
-	ATA_DMA_MASK_CFA = 4,
-	ATAPI_READ = 0,
-	ATAPI_WRITE = 1,
-	ATAPI_READ_CD = 2,
-	ATAPI_PASS_THRU = 3,
-	ATAPI_MISC = 4,
-	ATA_TIMING_SETUP = 1,
-	ATA_TIMING_ACT8B = 2,
-	ATA_TIMING_REC8B = 4,
-	ATA_TIMING_CYC8B = 8,
-	ATA_TIMING_8BIT = 14,
-	ATA_TIMING_ACTIVE = 16,
-	ATA_TIMING_RECOVER = 32,
-	ATA_TIMING_DMACK_HOLD = 64,
-	ATA_TIMING_CYCLE = 128,
-	ATA_TIMING_UDMA = 256,
-	ATA_TIMING_ALL = 511,
-	ATA_ACPI_FILTER_SETXFER = 1,
-	ATA_ACPI_FILTER_LOCK = 2,
-	ATA_ACPI_FILTER_DIPM = 4,
-	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
-	ATA_ACPI_FILTER_FPDMA_AA = 16,
-	ATA_ACPI_FILTER_DEFAULT = 7,
-};
-
-enum ata_xfer_mask {
-	ATA_MASK_PIO = 127,
-	ATA_MASK_MWDMA = 3968,
-	ATA_MASK_UDMA = 1044480,
-};
-
-enum ata_completion_errors {
-	AC_ERR_OK = 0,
-	AC_ERR_DEV = 1,
-	AC_ERR_HSM = 2,
-	AC_ERR_TIMEOUT = 4,
-	AC_ERR_MEDIA = 8,
-	AC_ERR_ATA_BUS = 16,
-	AC_ERR_HOST_BUS = 32,
-	AC_ERR_SYSTEM = 64,
-	AC_ERR_INVALID = 128,
-	AC_ERR_OTHER = 256,
-	AC_ERR_NODEV_HINT = 512,
-	AC_ERR_NCQ = 1024,
-};
-
-enum ata_lpm_policy {
-	ATA_LPM_UNKNOWN = 0,
-	ATA_LPM_MAX_POWER = 1,
-	ATA_LPM_MED_POWER = 2,
-	ATA_LPM_MED_POWER_WITH_DIPM = 3,
-	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
-	ATA_LPM_MIN_POWER = 5,
-};
-
-struct ata_queued_cmd;
-
-typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
-
-struct ata_taskfile {
-	long unsigned int flags;
-	u8 protocol;
-	u8 ctl;
-	u8 hob_feature;
-	u8 hob_nsect;
-	u8 hob_lbal;
-	u8 hob_lbam;
-	u8 hob_lbah;
-	u8 feature;
-	u8 nsect;
-	u8 lbal;
-	u8 lbam;
-	u8 lbah;
-	u8 device;
-	u8 command;
-	u32 auxiliary;
-};
-
-struct ata_port;
-
-struct ata_device;
-
-struct ata_queued_cmd {
-	struct ata_port *ap;
-	struct ata_device *dev;
-	struct scsi_cmnd *scsicmd;
-	void (*scsidone)(struct scsi_cmnd *);
-	struct ata_taskfile tf;
-	u8 cdb[16];
-	long unsigned int flags;
-	unsigned int tag;
-	unsigned int hw_tag;
-	unsigned int n_elem;
-	unsigned int orig_n_elem;
-	int dma_dir;
-	unsigned int sect_size;
-	unsigned int nbytes;
-	unsigned int extrabytes;
-	unsigned int curbytes;
-	struct scatterlist sgent;
-	struct scatterlist *sg;
-	struct scatterlist *cursg;
-	unsigned int cursg_ofs;
-	unsigned int err_mask;
-	struct ata_taskfile result_tf;
-	ata_qc_cb_t complete_fn;
-	void *private_data;
-	void *lldd_task;
-};
-
-struct ata_link;
-
-typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
-
-struct ata_eh_info {
-	struct ata_device *dev;
-	u32 serror;
-	unsigned int err_mask;
-	unsigned int action;
-	unsigned int dev_action[2];
-	unsigned int flags;
-	unsigned int probe_mask;
-	char desc[80];
-	int desc_len;
-};
-
-struct ata_eh_context {
-	struct ata_eh_info i;
-	int tries[2];
-	int cmd_timeout_idx[12];
-	unsigned int classes[2];
-	unsigned int did_probe_mask;
-	unsigned int unloaded_mask;
-	unsigned int saved_ncq_enabled;
-	u8 saved_xfer_mode[2];
-	long unsigned int last_reset;
-};
-
-struct ata_ering_entry {
-	unsigned int eflags;
-	unsigned int err_mask;
-	u64 timestamp;
-};
-
-struct ata_ering {
-	int cursor;
-	struct ata_ering_entry ring[32];
-};
-
-struct ata_device {
-	struct ata_link *link;
-	unsigned int devno;
-	unsigned int horkage;
-	long unsigned int flags;
-	struct scsi_device *sdev;
-	void *private_data;
-	union acpi_object *gtf_cache;
-	unsigned int gtf_filter;
-	struct device tdev;
-	u64 n_sectors;
-	u64 n_native_sectors;
-	unsigned int class;
-	long unsigned int unpark_deadline;
-	u8 pio_mode;
-	u8 dma_mode;
-	u8 xfer_mode;
-	unsigned int xfer_shift;
-	unsigned int multi_count;
-	unsigned int max_sectors;
-	unsigned int cdb_len;
-	long unsigned int pio_mask;
-	long unsigned int mwdma_mask;
-	long unsigned int udma_mask;
-	u16 cylinders;
-	u16 heads;
-	u16 sectors;
-	long: 16;
-	long: 64;
-	union {
-		u16 id[256];
-		u32 gscr[128];
-	};
-	u8 devslp_timing[8];
-	u8 ncq_send_recv_cmds[20];
-	u8 ncq_non_data_cmds[64];
-	u32 zac_zoned_cap;
-	u32 zac_zones_optimal_open;
-	u32 zac_zones_optimal_nonseq;
-	u32 zac_zones_max_open;
-	int spdn_cnt;
-	struct ata_ering ering;
-	long: 64;
-};
-
-struct ata_link {
-	struct ata_port *ap;
-	int pmp;
-	struct device tdev;
-	unsigned int active_tag;
-	u32 sactive;
-	unsigned int flags;
-	u32 saved_scontrol;
-	unsigned int hw_sata_spd_limit;
-	unsigned int sata_spd_limit;
-	unsigned int sata_spd;
-	enum ata_lpm_policy lpm_policy;
-	struct ata_eh_info eh_info;
-	struct ata_eh_context eh_context;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct ata_device device[2];
-	long unsigned int last_lpm_change;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
-
-typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
-
-enum sw_activity {
-	OFF = 0,
-	BLINK_ON = 1,
-	BLINK_OFF = 2,
-};
-
-struct ata_ioports {
-	void *cmd_addr;
-	void *data_addr;
-	void *error_addr;
-	void *feature_addr;
-	void *nsect_addr;
-	void *lbal_addr;
-	void *lbam_addr;
-	void *lbah_addr;
-	void *device_addr;
-	void *status_addr;
-	void *command_addr;
-	void *altstatus_addr;
-	void *ctl_addr;
-	void *bmdma_addr;
-	void *scr_addr;
-};
-
-struct ata_port_operations;
-
-struct ata_host {
-	spinlock_t lock;
-	struct device *dev;
-	void * const *iomap;
-	unsigned int n_ports;
-	unsigned int n_tags;
-	void *private_data;
-	struct ata_port_operations *ops;
-	long unsigned int flags;
-	struct kref kref;
-	struct mutex eh_mutex;
-	struct task_struct *eh_owner;
-	struct ata_port *simplex_claimed;
-	struct ata_port *ports[0];
-};
-
-struct ata_port_operations {
-	int (*qc_defer)(struct ata_queued_cmd *);
-	int (*check_atapi_dma)(struct ata_queued_cmd *);
-	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
-	unsigned int (*qc_issue)(struct ata_queued_cmd *);
-	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
-	int (*cable_detect)(struct ata_port *);
-	long unsigned int (*mode_filter)(struct ata_device *, long unsigned int);
-	void (*set_piomode)(struct ata_port *, struct ata_device *);
-	void (*set_dmamode)(struct ata_port *, struct ata_device *);
-	int (*set_mode)(struct ata_link *, struct ata_device **);
-	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, u16 *);
-	void (*dev_config)(struct ata_device *);
-	void (*freeze)(struct ata_port *);
-	void (*thaw)(struct ata_port *);
-	ata_prereset_fn_t prereset;
-	ata_reset_fn_t softreset;
-	ata_reset_fn_t hardreset;
-	ata_postreset_fn_t postreset;
-	ata_prereset_fn_t pmp_prereset;
-	ata_reset_fn_t pmp_softreset;
-	ata_reset_fn_t pmp_hardreset;
-	ata_postreset_fn_t pmp_postreset;
-	void (*error_handler)(struct ata_port *);
-	void (*lost_interrupt)(struct ata_port *);
-	void (*post_internal_cmd)(struct ata_queued_cmd *);
-	void (*sched_eh)(struct ata_port *);
-	void (*end_eh)(struct ata_port *);
-	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
-	int (*scr_write)(struct ata_link *, unsigned int, u32);
-	void (*pmp_attach)(struct ata_port *);
-	void (*pmp_detach)(struct ata_port *);
-	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
-	int (*port_suspend)(struct ata_port *, pm_message_t);
-	int (*port_resume)(struct ata_port *);
-	int (*port_start)(struct ata_port *);
-	void (*port_stop)(struct ata_port *);
-	void (*host_stop)(struct ata_host *);
-	void (*sff_dev_select)(struct ata_port *, unsigned int);
-	void (*sff_set_devctl)(struct ata_port *, u8);
-	u8 (*sff_check_status)(struct ata_port *);
-	u8 (*sff_check_altstatus)(struct ata_port *);
-	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
-	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
-	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
-	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
-	void (*sff_irq_on)(struct ata_port *);
-	bool (*sff_irq_check)(struct ata_port *);
-	void (*sff_irq_clear)(struct ata_port *);
-	void (*sff_drain_fifo)(struct ata_queued_cmd *);
-	void (*bmdma_setup)(struct ata_queued_cmd *);
-	void (*bmdma_start)(struct ata_queued_cmd *);
-	void (*bmdma_stop)(struct ata_queued_cmd *);
-	u8 (*bmdma_status)(struct ata_port *);
-	ssize_t (*em_show)(struct ata_port *, char *);
-	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
-	ssize_t (*sw_activity_show)(struct ata_device *, char *);
-	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
-	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
-	void (*phy_reset)(struct ata_port *);
-	void (*eng_timeout)(struct ata_port *);
-	const struct ata_port_operations *inherits;
-};
-
-struct ata_port_stats {
-	long unsigned int unhandled_irq;
-	long unsigned int idle_irq;
-	long unsigned int rw_reqbuf;
-};
-
-struct ata_acpi_drive {
-	u32 pio;
-	u32 dma;
-};
-
-struct ata_acpi_gtm {
-	struct ata_acpi_drive drive[2];
-	u32 flags;
-};
-
-struct ata_port {
-	struct Scsi_Host *scsi_host;
-	struct ata_port_operations *ops;
-	spinlock_t *lock;
-	long unsigned int flags;
-	unsigned int pflags;
-	unsigned int print_id;
-	unsigned int local_port_no;
-	unsigned int port_no;
-	struct ata_ioports ioaddr;
-	u8 ctl;
-	u8 last_ctl;
-	struct ata_link *sff_pio_task_link;
-	struct delayed_work sff_pio_task;
-	struct ata_bmdma_prd *bmdma_prd;
-	dma_addr_t bmdma_prd_dma;
-	unsigned int pio_mask;
-	unsigned int mwdma_mask;
-	unsigned int udma_mask;
-	unsigned int cbl;
-	struct ata_queued_cmd qcmd[33];
-	long unsigned int sas_tag_allocated;
-	u64 qc_active;
-	int nr_active_links;
-	unsigned int sas_last_tag;
-	long: 64;
-	struct ata_link link;
-	struct ata_link *slave_link;
-	int nr_pmp_links;
-	struct ata_link *pmp_link;
-	struct ata_link *excl_link;
-	struct ata_port_stats stats;
-	struct ata_host *host;
-	struct device *dev;
-	struct device tdev;
-	struct mutex scsi_scan_mutex;
-	struct delayed_work hotplug_task;
-	struct work_struct scsi_rescan_task;
-	unsigned int hsm_task_state;
-	u32 msg_enable;
-	struct list_head eh_done_q;
-	wait_queue_head_t eh_wait_q;
-	int eh_tries;
-	struct completion park_req_pending;
-	pm_message_t pm_mesg;
-	enum ata_lpm_policy target_lpm_policy;
-	struct timer_list fastdrain_timer;
-	long unsigned int fastdrain_cnt;
-	int em_message_type;
-	void *private_data;
-	struct ata_acpi_gtm __acpi_init_gtm;
-	int: 32;
-	u8 sector_buf[512];
-};
-
-struct ata_port_info {
-	long unsigned int flags;
-	long unsigned int link_flags;
-	long unsigned int pio_mask;
-	long unsigned int mwdma_mask;
-	long unsigned int udma_mask;
-	struct ata_port_operations *port_ops;
-	void *private_data;
-};
-
-struct ata_timing {
-	short unsigned int mode;
-	short unsigned int setup;
-	short unsigned int act8b;
-	short unsigned int rec8b;
-	short unsigned int cyc8b;
-	short unsigned int active;
-	short unsigned int recover;
-	short unsigned int dmack_hold;
-	short unsigned int cycle;
-	short unsigned int udma;
-};
-
-struct pci_bits {
-	unsigned int reg;
-	unsigned int width;
-	long unsigned int mask;
-	long unsigned int val;
-};
-
-enum ata_link_iter_mode {
-	ATA_LITER_EDGE = 0,
-	ATA_LITER_HOST_FIRST = 1,
-	ATA_LITER_PMP_FIRST = 2,
-};
-
-enum ata_dev_iter_mode {
-	ATA_DITER_ENABLED = 0,
-	ATA_DITER_ENABLED_REVERSE = 1,
-	ATA_DITER_ALL = 2,
-	ATA_DITER_ALL_REVERSE = 3,
-};
-
-struct trace_event_raw_ata_qc_issue {
-	struct trace_entry ent;
-	unsigned int ata_port;
-	unsigned int ata_dev;
-	unsigned int tag;
-	unsigned char cmd;
-	unsigned char dev;
-	unsigned char lbal;
-	unsigned char lbam;
-	unsigned char lbah;
-	unsigned char nsect;
-	unsigned char feature;
-	unsigned char hob_lbal;
-	unsigned char hob_lbam;
-	unsigned char hob_lbah;
-	unsigned char hob_nsect;
-	unsigned char hob_feature;
-	unsigned char ctl;
-	unsigned char proto;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ata_qc_complete_template {
-	struct trace_entry ent;
-	unsigned int ata_port;
-	unsigned int ata_dev;
-	unsigned int tag;
-	unsigned char status;
-	unsigned char dev;
-	unsigned char lbal;
-	unsigned char lbam;
-	unsigned char lbah;
-	unsigned char nsect;
-	unsigned char error;
-	unsigned char hob_lbal;
-	unsigned char hob_lbam;
-	unsigned char hob_lbah;
-	unsigned char hob_nsect;
-	unsigned char hob_feature;
-	unsigned char ctl;
-	long unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_ata_eh_link_autopsy {
-	struct trace_entry ent;
-	unsigned int ata_port;
-	unsigned int ata_dev;
-	unsigned int eh_action;
-	unsigned int eh_err_mask;
-	char __data[0];
-};
-
-struct trace_event_raw_ata_eh_link_autopsy_qc {
-	struct trace_entry ent;
-	unsigned int ata_port;
-	unsigned int ata_dev;
-	unsigned int tag;
-	unsigned int qc_flags;
-	unsigned int eh_err_mask;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_ata_qc_issue {};
-
-struct trace_event_data_offsets_ata_qc_complete_template {};
-
-struct trace_event_data_offsets_ata_eh_link_autopsy {};
-
-struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
-
-typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
-
-typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
-
-typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
-
-typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
-
-typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
-
-enum {
-	ATA_READID_POSTRESET = 1,
-	ATA_DNXFER_PIO = 0,
-	ATA_DNXFER_DMA = 1,
-	ATA_DNXFER_40C = 2,
-	ATA_DNXFER_FORCE_PIO = 3,
-	ATA_DNXFER_FORCE_PIO0 = 4,
-	ATA_DNXFER_QUIET = 2147483648,
-};
-
-struct ata_force_param {
-	const char *name;
-	unsigned int cbl;
-	int spd_limit;
-	long unsigned int xfer_mask;
-	unsigned int horkage_on;
-	unsigned int horkage_off;
-	unsigned int lflags;
-};
-
-struct ata_force_ent {
-	int port;
-	int device;
-	struct ata_force_param param;
-};
-
-struct ata_xfer_ent {
-	int shift;
-	int bits;
-	u8 base;
-};
-
-struct ata_blacklist_entry {
-	const char *model_num;
-	const char *model_rev;
-	long unsigned int horkage;
-};
-
-typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
-
-struct ata_scsi_args {
-	struct ata_device *dev;
-	u16 *id;
-	struct scsi_cmnd *cmd;
-};
-
-enum ata_lpm_hints {
-	ATA_LPM_EMPTY = 1,
-	ATA_LPM_HIPM = 2,
-	ATA_LPM_WAKE_ONLY = 4,
-};
-
-enum {
-	ATA_EH_SPDN_NCQ_OFF = 1,
-	ATA_EH_SPDN_SPEED_DOWN = 2,
-	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
-	ATA_EH_SPDN_KEEP_ERRORS = 8,
-	ATA_EFLAG_IS_IO = 1,
-	ATA_EFLAG_DUBIOUS_XFER = 2,
-	ATA_EFLAG_OLD_ER = 2147483648,
-	ATA_ECAT_NONE = 0,
-	ATA_ECAT_ATA_BUS = 1,
-	ATA_ECAT_TOUT_HSM = 2,
-	ATA_ECAT_UNK_DEV = 3,
-	ATA_ECAT_DUBIOUS_NONE = 4,
-	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
-	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
-	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
-	ATA_ECAT_NR = 8,
-	ATA_EH_CMD_DFL_TIMEOUT = 5000,
-	ATA_EH_RESET_COOL_DOWN = 5000,
-	ATA_EH_PRERESET_TIMEOUT = 10000,
-	ATA_EH_FASTDRAIN_INTERVAL = 3000,
-	ATA_EH_UA_TRIES = 5,
-	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
-	ATA_EH_PROBE_TRIALS = 2,
-};
-
-struct ata_eh_cmd_timeout_ent {
-	const u8 *commands;
-	const long unsigned int *timeouts;
-};
-
-struct speed_down_verdict_arg {
-	u64 since;
-	int xfer_ok;
-	int nr_errors[8];
-};
-
-struct ata_internal {
-	struct scsi_transport_template t;
-	struct device_attribute private_port_attrs[3];
-	struct device_attribute private_link_attrs[3];
-	struct device_attribute private_dev_attrs[9];
-	struct transport_container link_attr_cont;
-	struct transport_container dev_attr_cont;
-	struct device_attribute *link_attrs[4];
-	struct device_attribute *port_attrs[4];
-	struct device_attribute *dev_attrs[10];
-};
-
-struct ata_show_ering_arg {
-	char *buf;
-	int written;
-};
-
-enum hsm_task_states {
-	HSM_ST_IDLE = 0,
-	HSM_ST_FIRST = 1,
-	HSM_ST = 2,
-	HSM_ST_LAST = 3,
-	HSM_ST_ERR = 4,
-};
-
-struct ata_acpi_gtf {
-	u8 tf[7];
-};
-
-struct ata_acpi_hotplug_context {
-	struct acpi_hotplug_context hp;
-	union {
-		struct ata_port *ap;
-		struct ata_device *dev;
-	} data;
-};
-
-struct regulator;
-
-struct phy_configure_opts_mipi_dphy {
-	unsigned int clk_miss;
-	unsigned int clk_post;
-	unsigned int clk_pre;
-	unsigned int clk_prepare;
-	unsigned int clk_settle;
-	unsigned int clk_term_en;
-	unsigned int clk_trail;
-	unsigned int clk_zero;
-	unsigned int d_term_en;
-	unsigned int eot;
-	unsigned int hs_exit;
-	unsigned int hs_prepare;
-	unsigned int hs_settle;
-	unsigned int hs_skip;
-	unsigned int hs_trail;
-	unsigned int hs_zero;
-	unsigned int init;
-	unsigned int lpx;
-	unsigned int ta_get;
-	unsigned int ta_go;
-	unsigned int ta_sure;
-	unsigned int wakeup;
-	long unsigned int hs_clk_rate;
-	long unsigned int lp_clk_rate;
-	unsigned char lanes;
-};
-
-enum phy_mode {
-	PHY_MODE_INVALID = 0,
-	PHY_MODE_USB_HOST = 1,
-	PHY_MODE_USB_HOST_LS = 2,
-	PHY_MODE_USB_HOST_FS = 3,
-	PHY_MODE_USB_HOST_HS = 4,
-	PHY_MODE_USB_HOST_SS = 5,
-	PHY_MODE_USB_DEVICE = 6,
-	PHY_MODE_USB_DEVICE_LS = 7,
-	PHY_MODE_USB_DEVICE_FS = 8,
-	PHY_MODE_USB_DEVICE_HS = 9,
-	PHY_MODE_USB_DEVICE_SS = 10,
-	PHY_MODE_USB_OTG = 11,
-	PHY_MODE_UFS_HS_A = 12,
-	PHY_MODE_UFS_HS_B = 13,
-	PHY_MODE_PCIE = 14,
-	PHY_MODE_ETHERNET = 15,
-	PHY_MODE_MIPI_DPHY = 16,
-	PHY_MODE_SATA = 17,
-	PHY_MODE_LVDS = 18,
-};
-
-union phy_configure_opts {
-	struct phy_configure_opts_mipi_dphy mipi_dphy;
-};
-
-struct phy___2;
-
-struct phy_ops {
-	int (*init)(struct phy___2 *);
-	int (*exit)(struct phy___2 *);
-	int (*power_on)(struct phy___2 *);
-	int (*power_off)(struct phy___2 *);
-	int (*set_mode)(struct phy___2 *, enum phy_mode, int);
-	int (*configure)(struct phy___2 *, union phy_configure_opts *);
-	int (*validate)(struct phy___2 *, enum phy_mode, int, union phy_configure_opts *);
-	int (*reset)(struct phy___2 *);
-	int (*calibrate)(struct phy___2 *);
-	void (*release)(struct phy___2 *);
-	struct module *owner;
-};
-
-struct phy_attrs {
-	u32 bus_width;
-	enum phy_mode mode;
-};
-
-struct phy___2 {
-	struct device dev;
-	int id;
-	const struct phy_ops *ops;
-	struct mutex mutex;
-	int init_count;
-	int power_count;
-	struct phy_attrs attrs;
-	struct regulator *pwr;
-};
-
-enum {
-	AHCI_MAX_PORTS = 32,
-	AHCI_MAX_CLKS = 5,
-	AHCI_MAX_SG = 168,
-	AHCI_DMA_BOUNDARY = 4294967295,
-	AHCI_MAX_CMDS = 32,
-	AHCI_CMD_SZ = 32,
-	AHCI_CMD_SLOT_SZ = 1024,
-	AHCI_RX_FIS_SZ = 256,
-	AHCI_CMD_TBL_CDB = 64,
-	AHCI_CMD_TBL_HDR_SZ = 128,
-	AHCI_CMD_TBL_SZ = 2816,
-	AHCI_CMD_TBL_AR_SZ = 90112,
-	AHCI_PORT_PRIV_DMA_SZ = 91392,
-	AHCI_PORT_PRIV_FBS_DMA_SZ = 95232,
-	AHCI_IRQ_ON_SG = 2147483648,
-	AHCI_CMD_ATAPI = 32,
-	AHCI_CMD_WRITE = 64,
-	AHCI_CMD_PREFETCH = 128,
-	AHCI_CMD_RESET = 256,
-	AHCI_CMD_CLR_BUSY = 1024,
-	RX_FIS_PIO_SETUP = 32,
-	RX_FIS_D2H_REG = 64,
-	RX_FIS_SDB = 88,
-	RX_FIS_UNK = 96,
-	HOST_CAP = 0,
-	HOST_CTL = 4,
-	HOST_IRQ_STAT = 8,
-	HOST_PORTS_IMPL = 12,
-	HOST_VERSION = 16,
-	HOST_EM_LOC = 28,
-	HOST_EM_CTL = 32,
-	HOST_CAP2 = 36,
-	HOST_RESET = 1,
-	HOST_IRQ_EN = 2,
-	HOST_MRSM = 4,
-	HOST_AHCI_EN = 2147483648,
-	HOST_CAP_SXS = 32,
-	HOST_CAP_EMS = 64,
-	HOST_CAP_CCC = 128,
-	HOST_CAP_PART = 8192,
-	HOST_CAP_SSC = 16384,
-	HOST_CAP_PIO_MULTI = 32768,
-	HOST_CAP_FBS = 65536,
-	HOST_CAP_PMP = 131072,
-	HOST_CAP_ONLY = 262144,
-	HOST_CAP_CLO = 16777216,
-	HOST_CAP_LED = 33554432,
-	HOST_CAP_ALPM = 67108864,
-	HOST_CAP_SSS = 134217728,
-	HOST_CAP_MPS = 268435456,
-	HOST_CAP_SNTF = 536870912,
-	HOST_CAP_NCQ = 1073741824,
-	HOST_CAP_64 = 2147483648,
-	HOST_CAP2_BOH = 1,
-	HOST_CAP2_NVMHCI = 2,
-	HOST_CAP2_APST = 4,
-	HOST_CAP2_SDS = 8,
-	HOST_CAP2_SADM = 16,
-	HOST_CAP2_DESO = 32,
-	PORT_LST_ADDR = 0,
-	PORT_LST_ADDR_HI = 4,
-	PORT_FIS_ADDR = 8,
-	PORT_FIS_ADDR_HI = 12,
-	PORT_IRQ_STAT = 16,
-	PORT_IRQ_MASK = 20,
-	PORT_CMD = 24,
-	PORT_TFDATA = 32,
-	PORT_SIG = 36,
-	PORT_CMD_ISSUE = 56,
-	PORT_SCR_STAT = 40,
-	PORT_SCR_CTL = 44,
-	PORT_SCR_ERR = 48,
-	PORT_SCR_ACT = 52,
-	PORT_SCR_NTF = 60,
-	PORT_FBS = 64,
-	PORT_DEVSLP = 68,
-	PORT_IRQ_COLD_PRES = 2147483648,
-	PORT_IRQ_TF_ERR = 1073741824,
-	PORT_IRQ_HBUS_ERR = 536870912,
-	PORT_IRQ_HBUS_DATA_ERR = 268435456,
-	PORT_IRQ_IF_ERR = 134217728,
-	PORT_IRQ_IF_NONFATAL = 67108864,
-	PORT_IRQ_OVERFLOW = 16777216,
-	PORT_IRQ_BAD_PMP = 8388608,
-	PORT_IRQ_PHYRDY = 4194304,
-	PORT_IRQ_DEV_ILCK = 128,
-	PORT_IRQ_CONNECT = 64,
-	PORT_IRQ_SG_DONE = 32,
-	PORT_IRQ_UNK_FIS = 16,
-	PORT_IRQ_SDB_FIS = 8,
-	PORT_IRQ_DMAS_FIS = 4,
-	PORT_IRQ_PIOS_FIS = 2,
-	PORT_IRQ_D2H_REG_FIS = 1,
-	PORT_IRQ_FREEZE = 683671632,
-	PORT_IRQ_ERROR = 2025848912,
-	DEF_PORT_IRQ = 2025848959,
-	PORT_CMD_ASP = 134217728,
-	PORT_CMD_ALPE = 67108864,
-	PORT_CMD_ATAPI = 16777216,
-	PORT_CMD_FBSCP = 4194304,
-	PORT_CMD_ESP = 2097152,
-	PORT_CMD_HPCP = 262144,
-	PORT_CMD_PMP = 131072,
-	PORT_CMD_LIST_ON = 32768,
-	PORT_CMD_FIS_ON = 16384,
-	PORT_CMD_FIS_RX = 16,
-	PORT_CMD_CLO = 8,
-	PORT_CMD_POWER_ON = 4,
-	PORT_CMD_SPIN_UP = 2,
-	PORT_CMD_START = 1,
-	PORT_CMD_ICC_MASK = 4026531840,
-	PORT_CMD_ICC_ACTIVE = 268435456,
-	PORT_CMD_ICC_PARTIAL = 536870912,
-	PORT_CMD_ICC_SLUMBER = 1610612736,
-	PORT_FBS_DWE_OFFSET = 16,
-	PORT_FBS_ADO_OFFSET = 12,
-	PORT_FBS_DEV_OFFSET = 8,
-	PORT_FBS_DEV_MASK = 3840,
-	PORT_FBS_SDE = 4,
-	PORT_FBS_DEC = 2,
-	PORT_FBS_EN = 1,
-	PORT_DEVSLP_DM_OFFSET = 25,
-	PORT_DEVSLP_DM_MASK = 503316480,
-	PORT_DEVSLP_DITO_OFFSET = 15,
-	PORT_DEVSLP_MDAT_OFFSET = 10,
-	PORT_DEVSLP_DETO_OFFSET = 2,
-	PORT_DEVSLP_DSP = 2,
-	PORT_DEVSLP_ADSE = 1,
-	AHCI_HFLAG_NO_NCQ = 1,
-	AHCI_HFLAG_IGN_IRQ_IF_ERR = 2,
-	AHCI_HFLAG_IGN_SERR_INTERNAL = 4,
-	AHCI_HFLAG_32BIT_ONLY = 8,
-	AHCI_HFLAG_MV_PATA = 16,
-	AHCI_HFLAG_NO_MSI = 32,
-	AHCI_HFLAG_NO_PMP = 64,
-	AHCI_HFLAG_SECT255 = 256,
-	AHCI_HFLAG_YES_NCQ = 512,
-	AHCI_HFLAG_NO_SUSPEND = 1024,
-	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,
-	AHCI_HFLAG_NO_SNTF = 4096,
-	AHCI_HFLAG_NO_FPDMA_AA = 8192,
-	AHCI_HFLAG_YES_FBS = 16384,
-	AHCI_HFLAG_DELAY_ENGINE = 32768,
-	AHCI_HFLAG_NO_DEVSLP = 131072,
-	AHCI_HFLAG_NO_FBS = 262144,
-	AHCI_HFLAG_MULTI_MSI = 1048576,
-	AHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,
-	AHCI_HFLAG_YES_ALPM = 8388608,
-	AHCI_HFLAG_NO_WRITE_TO_RO = 16777216,
-	AHCI_HFLAG_IS_MOBILE = 33554432,
-	AHCI_HFLAG_SUSPEND_PHYS = 67108864,
-	AHCI_FLAG_COMMON = 393346,
-	ICH_MAP = 144,
-	PCS_6 = 146,
-	PCS_7 = 148,
-	EM_MAX_SLOTS = 8,
-	EM_MAX_RETRY = 5,
-	EM_CTL_RST = 512,
-	EM_CTL_TM = 256,
-	EM_CTL_MR = 1,
-	EM_CTL_ALHD = 67108864,
-	EM_CTL_XMT = 33554432,
-	EM_CTL_SMB = 16777216,
-	EM_CTL_SGPIO = 524288,
-	EM_CTL_SES = 262144,
-	EM_CTL_SAFTE = 131072,
-	EM_CTL_LED = 65536,
-	EM_MSG_TYPE_LED = 1,
-	EM_MSG_TYPE_SAFTE = 2,
-	EM_MSG_TYPE_SES2 = 4,
-	EM_MSG_TYPE_SGPIO = 8,
-};
-
-struct ahci_cmd_hdr {
-	__le32 opts;
-	__le32 status;
-	__le32 tbl_addr;
-	__le32 tbl_addr_hi;
-	__le32 reserved[4];
-};
-
-struct ahci_em_priv {
-	enum sw_activity blink_policy;
-	struct timer_list timer;
-	long unsigned int saved_activity;
-	long unsigned int activity;
-	long unsigned int led_state;
-	struct ata_link *link;
-};
-
-struct ahci_port_priv {
-	struct ata_link *active_link;
-	struct ahci_cmd_hdr *cmd_slot;
-	dma_addr_t cmd_slot_dma;
-	void *cmd_tbl;
-	dma_addr_t cmd_tbl_dma;
-	void *rx_fis;
-	dma_addr_t rx_fis_dma;
-	unsigned int ncq_saw_d2h: 1;
-	unsigned int ncq_saw_dmas: 1;
-	unsigned int ncq_saw_sdb: 1;
-	spinlock_t lock;
-	u32 intr_mask;
-	bool fbs_supported;
-	bool fbs_enabled;
-	int fbs_last_dev;
-	struct ahci_em_priv em_priv[8];
-	char *irq_desc;
-};
-
-struct ahci_host_priv {
-	unsigned int flags;
-	u32 force_port_map;
-	u32 mask_port_map;
-	void *mmio;
-	u32 cap;
-	u32 cap2;
-	u32 version;
-	u32 port_map;
-	u32 saved_cap;
-	u32 saved_cap2;
-	u32 saved_port_map;
-	u32 em_loc;
-	u32 em_buf_sz;
-	u32 em_msg_type;
-	bool got_runtime_pm;
-	struct clk *clks[5];
-	struct reset_control *rsts;
-	struct regulator **target_pwrs;
-	struct regulator *ahci_regulator;
-	struct regulator *phy_regulator;
-	struct phy___2 **phys;
-	unsigned int nports;
-	void *plat_data;
-	unsigned int irq;
-	void (*start_engine)(struct ata_port *);
-	int (*stop_engine)(struct ata_port *);
-	irqreturn_t (*irq_handler)(int, void *);
-	int (*get_irq_vector)(struct ata_host *, int);
-};
-
-enum {
-	AHCI_PCI_BAR_STA2X11 = 0,
-	AHCI_PCI_BAR_CAVIUM = 0,
-	AHCI_PCI_BAR_ENMOTUS = 2,
-	AHCI_PCI_BAR_CAVIUM_GEN5 = 4,
-	AHCI_PCI_BAR_STANDARD = 5,
-};
-
-enum board_ids {
-	board_ahci = 0,
-	board_ahci_ign_iferr = 1,
-	board_ahci_mobile = 2,
-	board_ahci_nomsi = 3,
-	board_ahci_noncq = 4,
-	board_ahci_nosntf = 5,
-	board_ahci_yes_fbs = 6,
-	board_ahci_al = 7,
-	board_ahci_avn = 8,
-	board_ahci_mcp65 = 9,
-	board_ahci_mcp77 = 10,
-	board_ahci_mcp89 = 11,
-	board_ahci_mv = 12,
-	board_ahci_sb600 = 13,
-	board_ahci_sb700 = 14,
-	board_ahci_vt8251 = 15,
-	board_ahci_pcs7 = 16,
-	board_ahci_mcp_linux = 9,
-	board_ahci_mcp67 = 9,
-	board_ahci_mcp73 = 9,
-	board_ahci_mcp79 = 10,
-};
-
-struct ahci_sg {
-	__le32 addr;
-	__le32 addr_hi;
-	__le32 reserved;
-	__le32 flags_size;
-};
-
-enum {
-	PIIX_IOCFG = 84,
-	ICH5_PMR = 144,
-	ICH5_PCS = 146,
-	PIIX_SIDPR_BAR = 5,
-	PIIX_SIDPR_LEN = 16,
-	PIIX_SIDPR_IDX = 0,
-	PIIX_SIDPR_DATA = 4,
-	PIIX_FLAG_CHECKINTR = 268435456,
-	PIIX_FLAG_SIDPR = 536870912,
-	PIIX_PATA_FLAGS = 1,
-	PIIX_SATA_FLAGS = 268435458,
-	PIIX_FLAG_PIO16 = 1073741824,
-	PIIX_80C_PRI = 48,
-	PIIX_80C_SEC = 192,
-	P0 = 0,
-	P1 = 1,
-	P2 = 2,
-	P3 = 3,
-	IDE = 4294967295,
-	NA = 4294967294,
-	RV = 4294967293,
-	PIIX_AHCI_DEVICE = 6,
-	PIIX_HOST_BROKEN_SUSPEND = 16777216,
-};
-
-enum piix_controller_ids {
-	piix_pata_mwdma = 0,
-	piix_pata_33 = 1,
-	ich_pata_33 = 2,
-	ich_pata_66 = 3,
-	ich_pata_100 = 4,
-	ich_pata_100_nomwdma1 = 5,
-	ich5_sata = 6,
-	ich6_sata = 7,
-	ich6m_sata = 8,
-	ich8_sata = 9,
-	ich8_2port_sata = 10,
-	ich8m_apple_sata = 11,
-	tolapai_sata = 12,
-	piix_pata_vmw = 13,
-	ich8_sata_snb = 14,
-	ich8_2port_sata_snb = 15,
-	ich8_2port_sata_byt = 16,
-};
-
-struct piix_map_db {
-	const u32 mask;
-	const u16 port_enable;
-	const int map[0];
-};
-
-struct piix_host_priv {
-	const int *map;
-	u32 saved_iocfg;
-	void *sidpr;
-};
-
-struct ich_laptop {
-	u16 device;
-	u16 subvendor;
-	u16 subdevice;
-};
-
-enum {
-	D0TIM = 128,
-	D1TIM = 132,
-	PM = 7,
-	MDM = 768,
-	UDM = 458752,
-	PPE = 1073741824,
-	USD = 2147483648,
-};
-
-struct ethtool_cmd {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertising;
-	__u16 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 transceiver;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u32 maxtxpkt;
-	__u32 maxrxpkt;
-	__u16 speed_hi;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__u32 lp_advertising;
-	__u32 reserved[2];
-};
-
-enum netdev_state_t {
-	__LINK_STATE_START = 0,
-	__LINK_STATE_PRESENT = 1,
-	__LINK_STATE_NOCARRIER = 2,
-	__LINK_STATE_LINKWATCH_PENDING = 3,
-	__LINK_STATE_DORMANT = 4,
-};
-
-struct mii_ioctl_data {
-	__u16 phy_id;
-	__u16 reg_num;
-	__u16 val_in;
-	__u16 val_out;
-};
-
-struct mii_if_info {
-	int phy_id;
-	int advertising;
-	int phy_id_mask;
-	int reg_num_mask;
-	unsigned int full_duplex: 1;
-	unsigned int force_media: 1;
-	unsigned int supports_gmii: 1;
-	struct net_device *dev;
-	int (*mdio_read)(struct net_device *, int, int);
-	void (*mdio_write)(struct net_device *, int, int, int);
-};
-
-struct devprobe2 {
-	struct net_device * (*probe)(int);
-	int status;
-};
-
-enum {
-	NETIF_F_SG_BIT = 0,
-	NETIF_F_IP_CSUM_BIT = 1,
-	__UNUSED_NETIF_F_1 = 2,
-	NETIF_F_HW_CSUM_BIT = 3,
-	NETIF_F_IPV6_CSUM_BIT = 4,
-	NETIF_F_HIGHDMA_BIT = 5,
-	NETIF_F_FRAGLIST_BIT = 6,
-	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
-	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
-	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
-	NETIF_F_VLAN_CHALLENGED_BIT = 10,
-	NETIF_F_GSO_BIT = 11,
-	NETIF_F_LLTX_BIT = 12,
-	NETIF_F_NETNS_LOCAL_BIT = 13,
-	NETIF_F_GRO_BIT = 14,
-	NETIF_F_LRO_BIT = 15,
-	NETIF_F_GSO_SHIFT = 16,
-	NETIF_F_TSO_BIT = 16,
-	NETIF_F_GSO_ROBUST_BIT = 17,
-	NETIF_F_TSO_ECN_BIT = 18,
-	NETIF_F_TSO_MANGLEID_BIT = 19,
-	NETIF_F_TSO6_BIT = 20,
-	NETIF_F_FSO_BIT = 21,
-	NETIF_F_GSO_GRE_BIT = 22,
-	NETIF_F_GSO_GRE_CSUM_BIT = 23,
-	NETIF_F_GSO_IPXIP4_BIT = 24,
-	NETIF_F_GSO_IPXIP6_BIT = 25,
-	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
-	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
-	NETIF_F_GSO_PARTIAL_BIT = 28,
-	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
-	NETIF_F_GSO_SCTP_BIT = 30,
-	NETIF_F_GSO_ESP_BIT = 31,
-	NETIF_F_GSO_UDP_BIT = 32,
-	NETIF_F_GSO_UDP_L4_BIT = 33,
-	NETIF_F_GSO_LAST = 33,
-	NETIF_F_FCOE_CRC_BIT = 34,
-	NETIF_F_SCTP_CRC_BIT = 35,
-	NETIF_F_FCOE_MTU_BIT = 36,
-	NETIF_F_NTUPLE_BIT = 37,
-	NETIF_F_RXHASH_BIT = 38,
-	NETIF_F_RXCSUM_BIT = 39,
-	NETIF_F_NOCACHE_COPY_BIT = 40,
-	NETIF_F_LOOPBACK_BIT = 41,
-	NETIF_F_RXFCS_BIT = 42,
-	NETIF_F_RXALL_BIT = 43,
-	NETIF_F_HW_VLAN_STAG_TX_BIT = 44,
-	NETIF_F_HW_VLAN_STAG_RX_BIT = 45,
-	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 46,
-	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 47,
-	NETIF_F_HW_TC_BIT = 48,
-	NETIF_F_HW_ESP_BIT = 49,
-	NETIF_F_HW_ESP_TX_CSUM_BIT = 50,
-	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 51,
-	NETIF_F_HW_TLS_TX_BIT = 52,
-	NETIF_F_HW_TLS_RX_BIT = 53,
-	NETIF_F_GRO_HW_BIT = 54,
-	NETIF_F_HW_TLS_RECORD_BIT = 55,
-	NETDEV_FEATURE_COUNT = 56,
-};
-
-enum {
-	SKBTX_HW_TSTAMP = 1,
-	SKBTX_SW_TSTAMP = 2,
-	SKBTX_IN_PROGRESS = 4,
-	SKBTX_DEV_ZEROCOPY = 8,
-	SKBTX_WIFI_STATUS = 16,
-	SKBTX_SHARED_FRAG = 32,
-	SKBTX_SCHED_TSTAMP = 64,
-};
-
-enum netdev_priv_flags {
-	IFF_802_1Q_VLAN = 1,
-	IFF_EBRIDGE = 2,
-	IFF_BONDING = 4,
-	IFF_ISATAP = 8,
-	IFF_WAN_HDLC = 16,
-	IFF_XMIT_DST_RELEASE = 32,
-	IFF_DONT_BRIDGE = 64,
-	IFF_DISABLE_NETPOLL = 128,
-	IFF_MACVLAN_PORT = 256,
-	IFF_BRIDGE_PORT = 512,
-	IFF_OVS_DATAPATH = 1024,
-	IFF_TX_SKB_SHARING = 2048,
-	IFF_UNICAST_FLT = 4096,
-	IFF_TEAM_PORT = 8192,
-	IFF_SUPP_NOFCS = 16384,
-	IFF_LIVE_ADDR_CHANGE = 32768,
-	IFF_MACVLAN = 65536,
-	IFF_XMIT_DST_RELEASE_PERM = 131072,
-	IFF_L3MDEV_MASTER = 262144,
-	IFF_NO_QUEUE = 524288,
-	IFF_OPENVSWITCH = 1048576,
-	IFF_L3MDEV_SLAVE = 2097152,
-	IFF_TEAM = 4194304,
-	IFF_RXFH_CONFIGURED = 8388608,
-	IFF_PHONY_HEADROOM = 16777216,
-	IFF_MACSEC = 33554432,
-	IFF_NO_RX_HANDLER = 67108864,
-	IFF_FAILOVER = 134217728,
-	IFF_FAILOVER_SLAVE = 268435456,
-	IFF_L3MDEV_RX_HANDLER = 536870912,
-	IFF_LIVE_RENAME_OK = 1073741824,
-};
-
-struct netpoll;
-
-struct netpoll_info {
-	refcount_t refcnt;
-	struct semaphore dev_lock;
-	struct sk_buff_head txq;
-	struct delayed_work tx_work;
-	struct netpoll *netpoll;
-	struct callback_head rcu;
-};
-
-union inet_addr {
-	__u32 all[4];
-	__be32 ip;
-	__be32 ip6[4];
-	struct in_addr in;
-	struct in6_addr in6;
-};
-
-struct netpoll {
-	struct net_device *dev;
-	char dev_name[16];
-	const char *name;
-	union inet_addr local_ip;
-	union inet_addr remote_ip;
-	bool ipv6;
-	u16 local_port;
-	u16 remote_port;
-	u8 remote_mac[6];
-};
-
-struct netconsole_target {
-	struct list_head list;
-	bool enabled;
-	bool extended;
-	struct netpoll np;
-};
-
-struct mdio_board_info {
-	const char *bus_id;
-	char modalias[32];
-	int mdio_addr;
-	const void *platform_data;
-};
-
-struct mdio_board_entry {
-	struct list_head list;
-	struct mdio_board_info board_info;
-};
-
-struct phy_setting {
-	u32 speed;
-	u8 duplex;
-	u8 bit;
-};
-
-struct phy_fixup {
-	struct list_head list;
-	char bus_id[64];
-	u32 phy_uid;
-	u32 phy_uid_mask;
-	int (*run)(struct phy_device *);
-};
-
-struct sfp_eeprom_base {
-	u8 phys_id;
-	u8 phys_ext_id;
-	u8 connector;
-	u8 if_1x_copper_passive: 1;
-	u8 if_1x_copper_active: 1;
-	u8 if_1x_lx: 1;
-	u8 if_1x_sx: 1;
-	u8 e10g_base_sr: 1;
-	u8 e10g_base_lr: 1;
-	u8 e10g_base_lrm: 1;
-	u8 e10g_base_er: 1;
-	u8 sonet_oc3_short_reach: 1;
-	u8 sonet_oc3_smf_intermediate_reach: 1;
-	u8 sonet_oc3_smf_long_reach: 1;
-	u8 unallocated_5_3: 1;
-	u8 sonet_oc12_short_reach: 1;
-	u8 sonet_oc12_smf_intermediate_reach: 1;
-	u8 sonet_oc12_smf_long_reach: 1;
-	u8 unallocated_5_7: 1;
-	u8 sonet_oc48_short_reach: 1;
-	u8 sonet_oc48_intermediate_reach: 1;
-	u8 sonet_oc48_long_reach: 1;
-	u8 sonet_reach_bit2: 1;
-	u8 sonet_reach_bit1: 1;
-	u8 sonet_oc192_short_reach: 1;
-	u8 escon_smf_1310_laser: 1;
-	u8 escon_mmf_1310_led: 1;
-	u8 e1000_base_sx: 1;
-	u8 e1000_base_lx: 1;
-	u8 e1000_base_cx: 1;
-	u8 e1000_base_t: 1;
-	u8 e100_base_lx: 1;
-	u8 e100_base_fx: 1;
-	u8 e_base_bx10: 1;
-	u8 e_base_px: 1;
-	u8 fc_tech_electrical_inter_enclosure: 1;
-	u8 fc_tech_lc: 1;
-	u8 fc_tech_sa: 1;
-	u8 fc_ll_m: 1;
-	u8 fc_ll_l: 1;
-	u8 fc_ll_i: 1;
-	u8 fc_ll_s: 1;
-	u8 fc_ll_v: 1;
-	u8 unallocated_8_0: 1;
-	u8 unallocated_8_1: 1;
-	u8 sfp_ct_passive: 1;
-	u8 sfp_ct_active: 1;
-	u8 fc_tech_ll: 1;
-	u8 fc_tech_sl: 1;
-	u8 fc_tech_sn: 1;
-	u8 fc_tech_electrical_intra_enclosure: 1;
-	u8 fc_media_sm: 1;
-	u8 unallocated_9_1: 1;
-	u8 fc_media_m5: 1;
-	u8 fc_media_m6: 1;
-	u8 fc_media_tv: 1;
-	u8 fc_media_mi: 1;
-	u8 fc_media_tp: 1;
-	u8 fc_media_tw: 1;
-	u8 fc_speed_100: 1;
-	u8 unallocated_10_1: 1;
-	u8 fc_speed_200: 1;
-	u8 fc_speed_3200: 1;
-	u8 fc_speed_400: 1;
-	u8 fc_speed_1600: 1;
-	u8 fc_speed_800: 1;
-	u8 fc_speed_1200: 1;
-	u8 encoding;
-	u8 br_nominal;
-	u8 rate_id;
-	u8 link_len[6];
-	char vendor_name[16];
-	u8 extended_cc;
-	char vendor_oui[3];
-	char vendor_pn[16];
-	char vendor_rev[4];
-	union {
-		__be16 optical_wavelength;
-		__be16 cable_compliance;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 reserved60_2: 6;
-			u8 reserved61: 8;
-		} passive;
-		struct {
-			u8 sff8431_app_e: 1;
-			u8 fc_pi_4_app_h: 1;
-			u8 sff8431_lim: 1;
-			u8 fc_pi_4_lim: 1;
-			u8 reserved60_4: 4;
-			u8 reserved61: 8;
-		} active;
-	};
-	u8 reserved62;
-	u8 cc_base;
-};
-
-struct sfp_eeprom_ext {
-	__be16 options;
-	u8 br_max;
-	u8 br_min;
-	char vendor_sn[16];
-	char datecode[8];
-	u8 diagmon;
-	u8 enhopts;
-	u8 sff8472_compliance;
-	u8 cc_ext;
-};
-
-struct sfp_eeprom_id {
-	struct sfp_eeprom_base base;
-	struct sfp_eeprom_ext ext;
-};
-
-struct sfp_upstream_ops {
-	void (*attach)(void *, struct sfp_bus *);
-	void (*detach)(void *, struct sfp_bus *);
-	int (*module_insert)(void *, const struct sfp_eeprom_id *);
-	void (*module_remove)(void *);
-	void (*link_down)(void *);
-	void (*link_up)(void *);
-	int (*connect_phy)(void *, struct phy_device *);
-	void (*disconnect_phy)(void *);
-};
-
-struct trace_event_raw_mdio_access {
-	struct trace_entry ent;
-	char busid[61];
-	char read;
-	u8 addr;
-	u16 val;
-	unsigned int regnum;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mdio_access {};
-
-typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
-
-struct mdio_driver {
-	struct mdio_driver_common mdiodrv;
-	int (*probe)(struct mdio_device *);
-	void (*remove)(struct mdio_device *);
-};
-
-struct mdio_device_id {
-	__u32 phy_id;
-	__u32 phy_id_mask;
-};
-
-enum {
-	SKB_GSO_TCPV4 = 1,
-	SKB_GSO_DODGY = 2,
-	SKB_GSO_TCP_ECN = 4,
-	SKB_GSO_TCP_FIXEDID = 8,
-	SKB_GSO_TCPV6 = 16,
-	SKB_GSO_FCOE = 32,
-	SKB_GSO_GRE = 64,
-	SKB_GSO_GRE_CSUM = 128,
-	SKB_GSO_IPXIP4 = 256,
-	SKB_GSO_IPXIP6 = 512,
-	SKB_GSO_UDP_TUNNEL = 1024,
-	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
-	SKB_GSO_PARTIAL = 4096,
-	SKB_GSO_TUNNEL_REMCSUM = 8192,
-	SKB_GSO_SCTP = 16384,
-	SKB_GSO_ESP = 32768,
-	SKB_GSO_UDP = 65536,
-	SKB_GSO_UDP_L4 = 131072,
-};
-
-enum ethtool_stringset {
-	ETH_SS_TEST = 0,
-	ETH_SS_STATS = 1,
-	ETH_SS_PRIV_FLAGS = 2,
-	ETH_SS_NTUPLE_FILTERS = 3,
-	ETH_SS_FEATURES = 4,
-	ETH_SS_RSS_HASH_FUNCS = 5,
-	ETH_SS_TUNABLES = 6,
-	ETH_SS_PHY_STATS = 7,
-	ETH_SS_PHY_TUNABLES = 8,
-};
-
-enum ethtool_test_flags {
-	ETH_TEST_FL_OFFLINE = 1,
-	ETH_TEST_FL_FAILED = 2,
-	ETH_TEST_FL_EXTERNAL_LB = 4,
-	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
-};
-
-enum {
-	ETH_RSS_HASH_TOP_BIT = 0,
-	ETH_RSS_HASH_XOR_BIT = 1,
-	ETH_RSS_HASH_CRC32_BIT = 2,
-	ETH_RSS_HASH_FUNCS_COUNT = 3,
-};
-
-struct netdev_hw_addr {
-	struct list_head list;
-	unsigned char addr[32];
-	unsigned char type;
-	bool global_use;
-	int sync_cnt;
-	int refcount;
-	int synced;
-	struct callback_head callback_head;
-};
-
-enum netdev_queue_state_t {
-	__QUEUE_STATE_DRV_XOFF = 0,
-	__QUEUE_STATE_STACK_XOFF = 1,
-	__QUEUE_STATE_FROZEN = 2,
-};
-
-enum skb_free_reason {
-	SKB_REASON_CONSUMED = 0,
-	SKB_REASON_DROPPED = 1,
-};
-
-enum {
-	NETIF_MSG_DRV = 1,
-	NETIF_MSG_PROBE = 2,
-	NETIF_MSG_LINK = 4,
-	NETIF_MSG_TIMER = 8,
-	NETIF_MSG_IFDOWN = 16,
-	NETIF_MSG_IFUP = 32,
-	NETIF_MSG_RX_ERR = 64,
-	NETIF_MSG_TX_ERR = 128,
-	NETIF_MSG_TX_QUEUED = 256,
-	NETIF_MSG_INTR = 512,
-	NETIF_MSG_TX_DONE = 1024,
-	NETIF_MSG_RX_STATUS = 2048,
-	NETIF_MSG_PKTDATA = 4096,
-	NETIF_MSG_HW = 8192,
-	NETIF_MSG_WOL = 16384,
-};
-
-enum {
-	SOF_TIMESTAMPING_TX_HARDWARE = 1,
-	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
-	SOF_TIMESTAMPING_RX_HARDWARE = 4,
-	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
-	SOF_TIMESTAMPING_SOFTWARE = 16,
-	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
-	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
-	SOF_TIMESTAMPING_OPT_ID = 128,
-	SOF_TIMESTAMPING_TX_SCHED = 256,
-	SOF_TIMESTAMPING_TX_ACK = 512,
-	SOF_TIMESTAMPING_OPT_CMSG = 1024,
-	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
-	SOF_TIMESTAMPING_OPT_STATS = 4096,
-	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
-	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
-	SOF_TIMESTAMPING_LAST = 16384,
-	SOF_TIMESTAMPING_MASK = 32767,
-};
-
-struct hwtstamp_config {
-	int flags;
-	int tx_type;
-	int rx_filter;
-};
-
-enum hwtstamp_tx_types {
-	HWTSTAMP_TX_OFF = 0,
-	HWTSTAMP_TX_ON = 1,
-	HWTSTAMP_TX_ONESTEP_SYNC = 2,
-};
-
-enum hwtstamp_rx_filters {
-	HWTSTAMP_FILTER_NONE = 0,
-	HWTSTAMP_FILTER_ALL = 1,
-	HWTSTAMP_FILTER_SOME = 2,
-	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
-	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
-	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
-	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
-	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
-	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
-	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
-	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
-	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
-	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
-	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
-	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
-	HWTSTAMP_FILTER_NTP_ALL = 15,
-};
-
-struct sensor_device_attribute {
-	struct device_attribute dev_attr;
-	int index;
-};
-
-struct ptp_clock_time {
-	__s64 sec;
-	__u32 nsec;
-	__u32 reserved;
-};
-
-struct ptp_extts_request {
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-struct ptp_perout_request {
-	struct ptp_clock_time start;
-	struct ptp_clock_time period;
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[4];
-};
-
-enum ptp_pin_function {
-	PTP_PF_NONE = 0,
-	PTP_PF_EXTTS = 1,
-	PTP_PF_PEROUT = 2,
-	PTP_PF_PHYSYNC = 3,
-};
-
-struct ptp_pin_desc {
-	char name[64];
-	unsigned int index;
-	unsigned int func;
-	unsigned int chan;
-	unsigned int rsv[5];
-};
-
-struct ptp_clock_request {
-	enum {
-		PTP_CLK_REQ_EXTTS = 0,
-		PTP_CLK_REQ_PEROUT = 1,
-		PTP_CLK_REQ_PPS = 2,
-	} type;
-	union {
-		struct ptp_extts_request extts;
-		struct ptp_perout_request perout;
-	};
-};
-
-struct ptp_system_timestamp {
-	struct timespec64 pre_ts;
-	struct timespec64 post_ts;
-};
-
-struct ptp_clock_info {
-	struct module *owner;
-	char name[16];
-	s32 max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int n_pins;
-	int pps;
-	struct ptp_pin_desc *pin_config;
-	int (*adjfine)(struct ptp_clock_info *, long int);
-	int (*adjfreq)(struct ptp_clock_info *, s32);
-	int (*adjtime)(struct ptp_clock_info *, s64);
-	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
-	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
-	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
-	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
-	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
-	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
-	long int (*do_aux_work)(struct ptp_clock_info *);
-};
-
-struct tg3_tx_buffer_desc {
-	u32 addr_hi;
-	u32 addr_lo;
-	u32 len_flags;
-	u32 vlan_tag;
-};
-
-struct tg3_rx_buffer_desc {
-	u32 addr_hi;
-	u32 addr_lo;
-	u32 idx_len;
-	u32 type_flags;
-	u32 ip_tcp_csum;
-	u32 err_vlan;
-	u32 reserved;
-	u32 opaque;
-};
-
-struct tg3_ext_rx_buffer_desc {
-	struct {
-		u32 addr_hi;
-		u32 addr_lo;
-	} addrlist[3];
-	u32 len2_len1;
-	u32 resv_len3;
-	struct tg3_rx_buffer_desc std;
-};
-
-struct tg3_internal_buffer_desc {
-	u32 addr_hi;
-	u32 addr_lo;
-	u32 nic_mbuf;
-	u16 len;
-	u16 cqid_sqid;
-	u32 flags;
-	u32 __cookie1;
-	u32 __cookie2;
-	u32 __cookie3;
-};
-
-struct tg3_hw_status {
-	u32 status;
-	u32 status_tag;
-	u16 rx_jumbo_consumer;
-	u16 rx_consumer;
-	u16 rx_mini_consumer;
-	u16 reserved;
-	struct {
-		u16 rx_producer;
-		u16 tx_consumer;
-	} idx[16];
-};
-
-typedef struct {
-	u32 high;
-	u32 low;
-} tg3_stat64_t;
-
-struct tg3_hw_stats {
-	u8 __reserved0[256];
-	tg3_stat64_t rx_octets;
-	u64 __reserved1;
-	tg3_stat64_t rx_fragments;
-	tg3_stat64_t rx_ucast_packets;
-	tg3_stat64_t rx_mcast_packets;
-	tg3_stat64_t rx_bcast_packets;
-	tg3_stat64_t rx_fcs_errors;
-	tg3_stat64_t rx_align_errors;
-	tg3_stat64_t rx_xon_pause_rcvd;
-	tg3_stat64_t rx_xoff_pause_rcvd;
-	tg3_stat64_t rx_mac_ctrl_rcvd;
-	tg3_stat64_t rx_xoff_entered;
-	tg3_stat64_t rx_frame_too_long_errors;
-	tg3_stat64_t rx_jabbers;
-	tg3_stat64_t rx_undersize_packets;
-	tg3_stat64_t rx_in_length_errors;
-	tg3_stat64_t rx_out_length_errors;
-	tg3_stat64_t rx_64_or_less_octet_packets;
-	tg3_stat64_t rx_65_to_127_octet_packets;
-	tg3_stat64_t rx_128_to_255_octet_packets;
-	tg3_stat64_t rx_256_to_511_octet_packets;
-	tg3_stat64_t rx_512_to_1023_octet_packets;
-	tg3_stat64_t rx_1024_to_1522_octet_packets;
-	tg3_stat64_t rx_1523_to_2047_octet_packets;
-	tg3_stat64_t rx_2048_to_4095_octet_packets;
-	tg3_stat64_t rx_4096_to_8191_octet_packets;
-	tg3_stat64_t rx_8192_to_9022_octet_packets;
-	u64 __unused0[37];
-	tg3_stat64_t tx_octets;
-	u64 __reserved2;
-	tg3_stat64_t tx_collisions;
-	tg3_stat64_t tx_xon_sent;
-	tg3_stat64_t tx_xoff_sent;
-	tg3_stat64_t tx_flow_control;
-	tg3_stat64_t tx_mac_errors;
-	tg3_stat64_t tx_single_collisions;
-	tg3_stat64_t tx_mult_collisions;
-	tg3_stat64_t tx_deferred;
-	u64 __reserved3;
-	tg3_stat64_t tx_excessive_collisions;
-	tg3_stat64_t tx_late_collisions;
-	tg3_stat64_t tx_collide_2times;
-	tg3_stat64_t tx_collide_3times;
-	tg3_stat64_t tx_collide_4times;
-	tg3_stat64_t tx_collide_5times;
-	tg3_stat64_t tx_collide_6times;
-	tg3_stat64_t tx_collide_7times;
-	tg3_stat64_t tx_collide_8times;
-	tg3_stat64_t tx_collide_9times;
-	tg3_stat64_t tx_collide_10times;
-	tg3_stat64_t tx_collide_11times;
-	tg3_stat64_t tx_collide_12times;
-	tg3_stat64_t tx_collide_13times;
-	tg3_stat64_t tx_collide_14times;
-	tg3_stat64_t tx_collide_15times;
-	tg3_stat64_t tx_ucast_packets;
-	tg3_stat64_t tx_mcast_packets;
-	tg3_stat64_t tx_bcast_packets;
-	tg3_stat64_t tx_carrier_sense_errors;
-	tg3_stat64_t tx_discards;
-	tg3_stat64_t tx_errors;
-	u64 __unused1[31];
-	tg3_stat64_t COS_rx_packets[16];
-	tg3_stat64_t COS_rx_filter_dropped;
-	tg3_stat64_t dma_writeq_full;
-	tg3_stat64_t dma_write_prioq_full;
-	tg3_stat64_t rxbds_empty;
-	tg3_stat64_t rx_discards;
-	tg3_stat64_t rx_errors;
-	tg3_stat64_t rx_threshold_hit;
-	u64 __unused2[9];
-	tg3_stat64_t COS_out_packets[16];
-	tg3_stat64_t dma_readq_full;
-	tg3_stat64_t dma_read_prioq_full;
-	tg3_stat64_t tx_comp_queue_full;
-	tg3_stat64_t ring_set_send_prod_index;
-	tg3_stat64_t ring_status_update;
-	tg3_stat64_t nic_irqs;
-	tg3_stat64_t nic_avoided_irqs;
-	tg3_stat64_t nic_tx_threshold_hit;
-	tg3_stat64_t mbuf_lwm_thresh_hit;
-	u8 __reserved4[312];
-};
-
-struct tg3_ocir {
-	u32 signature;
-	u16 version_flags;
-	u16 refresh_int;
-	u32 refresh_tmr;
-	u32 update_tmr;
-	u32 dst_base_addr;
-	u16 src_hdr_offset;
-	u16 src_hdr_length;
-	u16 src_data_offset;
-	u16 src_data_length;
-	u16 dst_hdr_offset;
-	u16 dst_data_offset;
-	u16 dst_reg_upd_offset;
-	u16 dst_sem_offset;
-	u32 reserved1[2];
-	u32 port0_flags;
-	u32 port1_flags;
-	u32 port2_flags;
-	u32 port3_flags;
-	u32 reserved2[1];
-};
-
-struct ring_info {
-	u8 *data;
-	dma_addr_t mapping;
-};
-
-struct tg3_tx_ring_info {
-	struct sk_buff *skb;
-	dma_addr_t mapping;
-	bool fragmented;
-};
-
-struct tg3_link_config {
-	u32 advertising;
-	u32 speed;
-	u8 duplex;
-	u8 autoneg;
-	u8 flowctrl;
-	u8 active_flowctrl;
-	u8 active_duplex;
-	u32 active_speed;
-	u32 rmt_adv;
-};
-
-struct tg3_bufmgr_config {
-	u32 mbuf_read_dma_low_water;
-	u32 mbuf_mac_rx_low_water;
-	u32 mbuf_high_water;
-	u32 mbuf_read_dma_low_water_jumbo;
-	u32 mbuf_mac_rx_low_water_jumbo;
-	u32 mbuf_high_water_jumbo;
-	u32 dma_low_water;
-	u32 dma_high_water;
-};
-
-struct tg3_ethtool_stats {
-	u64 rx_octets;
-	u64 rx_fragments;
-	u64 rx_ucast_packets;
-	u64 rx_mcast_packets;
-	u64 rx_bcast_packets;
-	u64 rx_fcs_errors;
-	u64 rx_align_errors;
-	u64 rx_xon_pause_rcvd;
-	u64 rx_xoff_pause_rcvd;
-	u64 rx_mac_ctrl_rcvd;
-	u64 rx_xoff_entered;
-	u64 rx_frame_too_long_errors;
-	u64 rx_jabbers;
-	u64 rx_undersize_packets;
-	u64 rx_in_length_errors;
-	u64 rx_out_length_errors;
-	u64 rx_64_or_less_octet_packets;
-	u64 rx_65_to_127_octet_packets;
-	u64 rx_128_to_255_octet_packets;
-	u64 rx_256_to_511_octet_packets;
-	u64 rx_512_to_1023_octet_packets;
-	u64 rx_1024_to_1522_octet_packets;
-	u64 rx_1523_to_2047_octet_packets;
-	u64 rx_2048_to_4095_octet_packets;
-	u64 rx_4096_to_8191_octet_packets;
-	u64 rx_8192_to_9022_octet_packets;
-	u64 tx_octets;
-	u64 tx_collisions;
-	u64 tx_xon_sent;
-	u64 tx_xoff_sent;
-	u64 tx_flow_control;
-	u64 tx_mac_errors;
-	u64 tx_single_collisions;
-	u64 tx_mult_collisions;
-	u64 tx_deferred;
-	u64 tx_excessive_collisions;
-	u64 tx_late_collisions;
-	u64 tx_collide_2times;
-	u64 tx_collide_3times;
-	u64 tx_collide_4times;
-	u64 tx_collide_5times;
-	u64 tx_collide_6times;
-	u64 tx_collide_7times;
-	u64 tx_collide_8times;
-	u64 tx_collide_9times;
-	u64 tx_collide_10times;
-	u64 tx_collide_11times;
-	u64 tx_collide_12times;
-	u64 tx_collide_13times;
-	u64 tx_collide_14times;
-	u64 tx_collide_15times;
-	u64 tx_ucast_packets;
-	u64 tx_mcast_packets;
-	u64 tx_bcast_packets;
-	u64 tx_carrier_sense_errors;
-	u64 tx_discards;
-	u64 tx_errors;
-	u64 dma_writeq_full;
-	u64 dma_write_prioq_full;
-	u64 rxbds_empty;
-	u64 rx_discards;
-	u64 rx_errors;
-	u64 rx_threshold_hit;
-	u64 dma_readq_full;
-	u64 dma_read_prioq_full;
-	u64 tx_comp_queue_full;
-	u64 ring_set_send_prod_index;
-	u64 ring_status_update;
-	u64 nic_irqs;
-	u64 nic_avoided_irqs;
-	u64 nic_tx_threshold_hit;
-	u64 mbuf_lwm_thresh_hit;
-};
-
-struct tg3_rx_prodring_set {
-	u32 rx_std_prod_idx;
-	u32 rx_std_cons_idx;
-	u32 rx_jmb_prod_idx;
-	u32 rx_jmb_cons_idx;
-	struct tg3_rx_buffer_desc *rx_std;
-	struct tg3_ext_rx_buffer_desc *rx_jmb;
-	struct ring_info *rx_std_buffers;
-	struct ring_info *rx_jmb_buffers;
-	dma_addr_t rx_std_mapping;
-	dma_addr_t rx_jmb_mapping;
-};
-
-struct tg3;
-
-struct tg3_napi {
-	struct napi_struct napi;
-	struct tg3 *tp;
-	struct tg3_hw_status *hw_status;
-	u32 chk_msi_cnt;
-	u32 last_tag;
-	u32 last_irq_tag;
-	u32 int_mbox;
-	u32 coal_now;
-	long: 32;
-	long: 64;
-	long: 64;
-	u32 consmbox;
-	u32 rx_rcb_ptr;
-	u32 last_rx_cons;
-	u16 *rx_rcb_prod_idx;
-	struct tg3_rx_prodring_set prodring;
-	struct tg3_rx_buffer_desc *rx_rcb;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 tx_prod;
-	u32 tx_cons;
-	u32 tx_pending;
-	u32 last_tx_cons;
-	u32 prodmbox;
-	struct tg3_tx_buffer_desc *tx_ring;
-	struct tg3_tx_ring_info *tx_buffers;
-	dma_addr_t status_mapping;
-	dma_addr_t rx_rcb_mapping;
-	dma_addr_t tx_desc_mapping;
-	char irq_lbl[16];
-	unsigned int irq_vec;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ptp_clock;
-
-struct tg3 {
-	unsigned int irq_sync;
-	spinlock_t lock;
-	spinlock_t indirect_lock;
-	u32 (*read32)(struct tg3 *, u32);
-	void (*write32)(struct tg3 *, u32, u32);
-	u32 (*read32_mbox)(struct tg3 *, u32);
-	void (*write32_mbox)(struct tg3 *, u32, u32);
-	void *regs;
-	void *aperegs;
-	struct net_device *dev;
-	struct pci_dev *pdev;
-	u32 coal_now;
-	u32 msg_enable;
-	struct ptp_clock_info ptp_info;
-	struct ptp_clock *ptp_clock;
-	s64 ptp_adjust;
-	void (*write32_tx_mbox)(struct tg3 *, u32, u32);
-	u32 dma_limit;
-	u32 txq_req;
-	u32 txq_cnt;
-	u32 txq_max;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct tg3_napi napi[5];
-	void (*write32_rx_mbox)(struct tg3 *, u32, u32);
-	u32 rx_copy_thresh;
-	u32 rx_std_ring_mask;
-	u32 rx_jmb_ring_mask;
-	u32 rx_ret_ring_mask;
-	u32 rx_pending;
-	u32 rx_jumbo_pending;
-	u32 rx_std_max_post;
-	u32 rx_offset;
-	u32 rx_pkt_map_sz;
-	u32 rxq_req;
-	u32 rxq_cnt;
-	u32 rxq_max;
-	bool rx_refill;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	struct rtnl_link_stats64 net_stats_prev;
-	struct tg3_ethtool_stats estats_prev;
-	long unsigned int tg3_flags[2];
-	union {
-		long unsigned int phy_crc_errors;
-		long unsigned int last_event_jiffies;
-	};
-	struct timer_list timer;
-	u16 timer_counter;
-	u16 timer_multiplier;
-	u32 timer_offset;
-	u16 asf_counter;
-	u16 asf_multiplier;
-	u32 serdes_counter;
-	struct tg3_link_config link_config;
-	struct tg3_bufmgr_config bufmgr_config;
-	u32 rx_mode;
-	u32 tx_mode;
-	u32 mac_mode;
-	u32 mi_mode;
-	u32 misc_host_ctrl;
-	u32 grc_mode;
-	u32 grc_local_ctrl;
-	u32 dma_rwctrl;
-	u32 coalesce_mode;
-	u32 pwrmgmt_thresh;
-	u32 rxptpctl;
-	u32 pci_chip_rev_id;
-	u16 pci_cmd;
-	u8 pci_cacheline_sz;
-	u8 pci_lat_timer;
-	int pci_fn;
-	int msi_cap;
-	int pcix_cap;
-	int pcie_readrq;
-	struct mii_bus *mdio_bus;
-	int old_link;
-	u8 phy_addr;
-	u8 phy_ape_lock;
-	u32 phy_id;
-	u32 phy_flags;
-	u32 led_ctrl;
-	u32 phy_otp;
-	u32 setlpicnt;
-	u8 rss_ind_tbl[128];
-	char board_part_number[24];
-	char fw_ver[32];
-	u32 nic_sram_data_cfg;
-	u32 pci_clock_ctrl;
-	struct pci_dev *pdev_peer;
-	struct tg3_hw_stats *hw_stats;
-	dma_addr_t stats_mapping;
-	struct work_struct reset_task;
-	int nvram_lock_cnt;
-	u32 nvram_size;
-	u32 nvram_pagesize;
-	u32 nvram_jedecnum;
-	unsigned int irq_max;
-	unsigned int irq_cnt;
-	struct ethtool_coalesce coal;
-	struct ethtool_eee eee;
-	const char *fw_needed;
-	const struct firmware *fw;
-	u32 fw_len;
-	struct device *hwmon_dev;
-	bool link_up;
-	bool pcierr_recovery;
-	u32 ape_hb;
-	long unsigned int ape_hb_interval;
-	long unsigned int ape_hb_jiffies;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum TG3_FLAGS {
-	TG3_FLAG_TAGGED_STATUS = 0,
-	TG3_FLAG_TXD_MBOX_HWBUG = 1,
-	TG3_FLAG_USE_LINKCHG_REG = 2,
-	TG3_FLAG_ERROR_PROCESSED = 3,
-	TG3_FLAG_ENABLE_ASF = 4,
-	TG3_FLAG_ASPM_WORKAROUND = 5,
-	TG3_FLAG_POLL_SERDES = 6,
-	TG3_FLAG_POLL_CPMU_LINK = 7,
-	TG3_FLAG_MBOX_WRITE_REORDER = 8,
-	TG3_FLAG_PCIX_TARGET_HWBUG = 9,
-	TG3_FLAG_WOL_SPEED_100MB = 10,
-	TG3_FLAG_WOL_ENABLE = 11,
-	TG3_FLAG_EEPROM_WRITE_PROT = 12,
-	TG3_FLAG_NVRAM = 13,
-	TG3_FLAG_NVRAM_BUFFERED = 14,
-	TG3_FLAG_SUPPORT_MSI = 15,
-	TG3_FLAG_SUPPORT_MSIX = 16,
-	TG3_FLAG_USING_MSI = 17,
-	TG3_FLAG_USING_MSIX = 18,
-	TG3_FLAG_PCIX_MODE = 19,
-	TG3_FLAG_PCI_HIGH_SPEED = 20,
-	TG3_FLAG_PCI_32BIT = 21,
-	TG3_FLAG_SRAM_USE_CONFIG = 22,
-	TG3_FLAG_TX_RECOVERY_PENDING = 23,
-	TG3_FLAG_WOL_CAP = 24,
-	TG3_FLAG_JUMBO_RING_ENABLE = 25,
-	TG3_FLAG_PAUSE_AUTONEG = 26,
-	TG3_FLAG_CPMU_PRESENT = 27,
-	TG3_FLAG_40BIT_DMA_BUG = 28,
-	TG3_FLAG_BROKEN_CHECKSUMS = 29,
-	TG3_FLAG_JUMBO_CAPABLE = 30,
-	TG3_FLAG_CHIP_RESETTING = 31,
-	TG3_FLAG_INIT_COMPLETE = 32,
-	TG3_FLAG_MAX_RXPEND_64 = 33,
-	TG3_FLAG_PCI_EXPRESS = 34,
-	TG3_FLAG_ASF_NEW_HANDSHAKE = 35,
-	TG3_FLAG_HW_AUTONEG = 36,
-	TG3_FLAG_IS_NIC = 37,
-	TG3_FLAG_FLASH = 38,
-	TG3_FLAG_FW_TSO = 39,
-	TG3_FLAG_HW_TSO_1 = 40,
-	TG3_FLAG_HW_TSO_2 = 41,
-	TG3_FLAG_HW_TSO_3 = 42,
-	TG3_FLAG_TSO_CAPABLE = 43,
-	TG3_FLAG_TSO_BUG = 44,
-	TG3_FLAG_ICH_WORKAROUND = 45,
-	TG3_FLAG_1SHOT_MSI = 46,
-	TG3_FLAG_NO_FWARE_REPORTED = 47,
-	TG3_FLAG_NO_NVRAM_ADDR_TRANS = 48,
-	TG3_FLAG_ENABLE_APE = 49,
-	TG3_FLAG_PROTECTED_NVRAM = 50,
-	TG3_FLAG_5701_DMA_BUG = 51,
-	TG3_FLAG_USE_PHYLIB = 52,
-	TG3_FLAG_MDIOBUS_INITED = 53,
-	TG3_FLAG_LRG_PROD_RING_CAP = 54,
-	TG3_FLAG_RGMII_INBAND_DISABLE = 55,
-	TG3_FLAG_RGMII_EXT_IBND_RX_EN = 56,
-	TG3_FLAG_RGMII_EXT_IBND_TX_EN = 57,
-	TG3_FLAG_CLKREQ_BUG = 58,
-	TG3_FLAG_NO_NVRAM = 59,
-	TG3_FLAG_ENABLE_RSS = 60,
-	TG3_FLAG_ENABLE_TSS = 61,
-	TG3_FLAG_SHORT_DMA_BUG = 62,
-	TG3_FLAG_USE_JUMBO_BDFLAG = 63,
-	TG3_FLAG_L1PLLPD_EN = 64,
-	TG3_FLAG_APE_HAS_NCSI = 65,
-	TG3_FLAG_TX_TSTAMP_EN = 66,
-	TG3_FLAG_4K_FIFO_LIMIT = 67,
-	TG3_FLAG_5719_5720_RDMA_BUG = 68,
-	TG3_FLAG_RESET_TASK_PENDING = 69,
-	TG3_FLAG_PTP_CAPABLE = 70,
-	TG3_FLAG_5705_PLUS = 71,
-	TG3_FLAG_IS_5788 = 72,
-	TG3_FLAG_5750_PLUS = 73,
-	TG3_FLAG_5780_CLASS = 74,
-	TG3_FLAG_5755_PLUS = 75,
-	TG3_FLAG_57765_PLUS = 76,
-	TG3_FLAG_57765_CLASS = 77,
-	TG3_FLAG_5717_PLUS = 78,
-	TG3_FLAG_IS_SSB_CORE = 79,
-	TG3_FLAG_FLUSH_POSTED_WRITES = 80,
-	TG3_FLAG_ROBOSWITCH = 81,
-	TG3_FLAG_ONE_DMA_AT_ONCE = 82,
-	TG3_FLAG_RGMII_MODE = 83,
-	TG3_FLAG_NUMBER_OF_FLAGS = 84,
-};
-
-struct tg3_firmware_hdr {
-	__be32 version;
-	__be32 base_addr;
-	__be32 len;
-};
-
-struct tg3_fiber_aneginfo {
-	int state;
-	u32 flags;
-	long unsigned int link_time;
-	long unsigned int cur_time;
-	u32 ability_match_cfg;
-	int ability_match_count;
-	char ability_match;
-	char idle_match;
-	char ack_match;
-	u32 txconfig;
-	u32 rxconfig;
-};
-
-struct subsys_tbl_ent {
-	u16 subsys_vendor;
-	u16 subsys_devid;
-	u32 phy_id;
-};
-
-struct tg3_dev_id {
-	u32 vendor;
-	u32 device;
-	u32 rev;
-};
-
-struct tg3_dev_id___2 {
-	u32 vendor;
-	u32 device;
-};
-
-struct mem_entry {
-	u32 offset;
-	u32 len;
-};
-
-enum mac {
-	mac_82557_D100_A = 0,
-	mac_82557_D100_B = 1,
-	mac_82557_D100_C = 2,
-	mac_82558_D101_A4 = 4,
-	mac_82558_D101_B0 = 5,
-	mac_82559_D101M = 8,
-	mac_82559_D101S = 9,
-	mac_82550_D102 = 12,
-	mac_82550_D102_C = 13,
-	mac_82551_E = 14,
-	mac_82551_F = 15,
-	mac_82551_10 = 16,
-	mac_unknown = 255,
-};
-
-enum phy___3 {
-	phy_100a = 992,
-	phy_100c = 55575208,
-	phy_82555_tx = 22020776,
-	phy_nsc_tx = 1543512064,
-	phy_82562_et = 53478056,
-	phy_82562_em = 52429480,
-	phy_82562_ek = 51380904,
-	phy_82562_eh = 24117928,
-	phy_82552_v = 3496017997,
-	phy_unknown = 4294967295,
-};
-
-struct csr {
-	struct {
-		u8 status;
-		u8 stat_ack;
-		u8 cmd_lo;
-		u8 cmd_hi;
-		u32 gen_ptr;
-	} scb;
-	u32 port;
-	u16 flash_ctrl;
-	u8 eeprom_ctrl_lo;
-	u8 eeprom_ctrl_hi;
-	u32 mdi_ctrl;
-	u32 rx_dma_count;
-};
-
-enum scb_status {
-	rus_no_res = 8,
-	rus_ready = 16,
-	rus_mask = 60,
-};
-
-enum ru_state {
-	RU_SUSPENDED = 0,
-	RU_RUNNING = 1,
-	RU_UNINITIALIZED = 4294967295,
-};
-
-enum scb_stat_ack {
-	stat_ack_not_ours = 0,
-	stat_ack_sw_gen = 4,
-	stat_ack_rnr = 16,
-	stat_ack_cu_idle = 32,
-	stat_ack_frame_rx = 64,
-	stat_ack_cu_cmd_done = 128,
-	stat_ack_not_present = 255,
-	stat_ack_rx = 84,
-	stat_ack_tx = 160,
-};
-
-enum scb_cmd_hi {
-	irq_mask_none = 0,
-	irq_mask_all = 1,
-	irq_sw_gen = 2,
-};
-
-enum scb_cmd_lo {
-	cuc_nop = 0,
-	ruc_start = 1,
-	ruc_load_base = 6,
-	cuc_start = 16,
-	cuc_resume = 32,
-	cuc_dump_addr = 64,
-	cuc_dump_stats = 80,
-	cuc_load_base = 96,
-	cuc_dump_reset = 112,
-};
-
-enum cuc_dump {
-	cuc_dump_complete = 40965,
-	cuc_dump_reset_complete = 40967,
-};
-
-enum port___2 {
-	software_reset = 0,
-	selftest = 1,
-	selective_reset = 2,
-};
-
-enum eeprom_ctrl_lo {
-	eesk = 1,
-	eecs = 2,
-	eedi = 4,
-	eedo = 8,
-};
-
-enum mdi_ctrl {
-	mdi_write = 67108864,
-	mdi_read = 134217728,
-	mdi_ready = 268435456,
-};
-
-enum eeprom_op {
-	op_write = 5,
-	op_read = 6,
-	op_ewds = 16,
-	op_ewen = 19,
-};
-
-enum eeprom_offsets {
-	eeprom_cnfg_mdix = 3,
-	eeprom_phy_iface = 6,
-	eeprom_id = 10,
-	eeprom_config_asf = 13,
-	eeprom_smbus_addr = 144,
-};
-
-enum eeprom_cnfg_mdix {
-	eeprom_mdix_enabled = 128,
-};
-
-enum eeprom_phy_iface {
-	NoSuchPhy = 0,
-	I82553AB = 1,
-	I82553C = 2,
-	I82503 = 3,
-	DP83840 = 4,
-	S80C240 = 5,
-	S80C24 = 6,
-	I82555 = 7,
-	DP83840A = 10,
-};
-
-enum eeprom_id {
-	eeprom_id_wol = 32,
-};
-
-enum eeprom_config_asf {
-	eeprom_asf = 32768,
-	eeprom_gcl = 16384,
-};
-
-enum cb_status {
-	cb_complete = 32768,
-	cb_ok = 8192,
-};
-
-enum cb_command {
-	cb_nop = 0,
-	cb_iaaddr = 1,
-	cb_config = 2,
-	cb_multi = 3,
-	cb_tx = 4,
-	cb_ucode = 5,
-	cb_dump = 6,
-	cb_tx_sf = 8,
-	cb_tx_nc = 16,
-	cb_cid = 7936,
-	cb_i = 8192,
-	cb_s = 16384,
-	cb_el = 32768,
-};
-
-struct rfd {
-	__le16 status;
-	__le16 command;
-	__le32 link;
-	__le32 rbd;
-	__le16 actual_size;
-	__le16 size;
-};
-
-struct rx {
-	struct rx *next;
-	struct rx *prev;
-	struct sk_buff *skb;
-	dma_addr_t dma_addr;
-};
-
-struct config {
-	u8 byte_count: 6;
-	u8 pad0: 2;
-	u8 rx_fifo_limit: 4;
-	u8 tx_fifo_limit: 3;
-	u8 pad1: 1;
-	u8 adaptive_ifs;
-	u8 mwi_enable: 1;
-	u8 type_enable: 1;
-	u8 read_align_enable: 1;
-	u8 term_write_cache_line: 1;
-	u8 pad3: 4;
-	u8 rx_dma_max_count: 7;
-	u8 pad4: 1;
-	u8 tx_dma_max_count: 7;
-	u8 dma_max_count_enable: 1;
-	u8 late_scb_update: 1;
-	u8 direct_rx_dma: 1;
-	u8 tno_intr: 1;
-	u8 cna_intr: 1;
-	u8 standard_tcb: 1;
-	u8 standard_stat_counter: 1;
-	u8 rx_save_overruns: 1;
-	u8 rx_save_bad_frames: 1;
-	u8 rx_discard_short_frames: 1;
-	u8 tx_underrun_retry: 2;
-	u8 pad7: 2;
-	u8 rx_extended_rfd: 1;
-	u8 tx_two_frames_in_fifo: 1;
-	u8 tx_dynamic_tbd: 1;
-	u8 mii_mode: 1;
-	u8 pad8: 6;
-	u8 csma_disabled: 1;
-	u8 rx_tcpudp_checksum: 1;
-	u8 pad9: 3;
-	u8 vlan_arp_tco: 1;
-	u8 link_status_wake: 1;
-	u8 arp_wake: 1;
-	u8 mcmatch_wake: 1;
-	u8 pad10: 3;
-	u8 no_source_addr_insertion: 1;
-	u8 preamble_length: 2;
-	u8 loopback: 2;
-	u8 linear_priority: 3;
-	u8 pad11: 5;
-	u8 linear_priority_mode: 1;
-	u8 pad12: 3;
-	u8 ifs: 4;
-	u8 ip_addr_lo;
-	u8 ip_addr_hi;
-	u8 promiscuous_mode: 1;
-	u8 broadcast_disabled: 1;
-	u8 wait_after_win: 1;
-	u8 pad15_1: 1;
-	u8 ignore_ul_bit: 1;
-	u8 crc_16_bit: 1;
-	u8 pad15_2: 1;
-	u8 crs_or_cdt: 1;
-	u8 fc_delay_lo;
-	u8 fc_delay_hi;
-	u8 rx_stripping: 1;
-	u8 tx_padding: 1;
-	u8 rx_crc_transfer: 1;
-	u8 rx_long_ok: 1;
-	u8 fc_priority_threshold: 3;
-	u8 pad18: 1;
-	u8 addr_wake: 1;
-	u8 magic_packet_disable: 1;
-	u8 fc_disable: 1;
-	u8 fc_restop: 1;
-	u8 fc_restart: 1;
-	u8 fc_reject: 1;
-	u8 full_duplex_force: 1;
-	u8 full_duplex_pin: 1;
-	u8 pad20_1: 5;
-	u8 fc_priority_location: 1;
-	u8 multi_ia: 1;
-	u8 pad20_2: 1;
-	u8 pad21_1: 3;
-	u8 multicast_all: 1;
-	u8 pad21_2: 4;
-	u8 rx_d102_mode: 1;
-	u8 rx_vlan_drop: 1;
-	u8 pad22: 6;
-	u8 pad_d102[9];
-};
-
-struct multi {
-	__le16 count;
-	u8 addr[386];
-};
-
-struct cb {
-	__le16 status;
-	__le16 command;
-	__le32 link;
-	union {
-		u8 iaaddr[6];
-		__le32 ucode[134];
-		struct config config;
-		struct multi multi;
-		struct {
-			u32 tbd_array;
-			u16 tcb_byte_count;
-			u8 threshold;
-			u8 tbd_count;
-			struct {
-				__le32 buf_addr;
-				__le16 size;
-				u16 eol;
-			} tbd;
-		} tcb;
-		__le32 dump_buffer_addr;
-	} u;
-	struct cb *next;
-	struct cb *prev;
-	dma_addr_t dma_addr;
-	struct sk_buff *skb;
-};
-
-enum loopback {
-	lb_none = 0,
-	lb_mac = 1,
-	lb_phy = 3,
-};
-
-struct stats {
-	__le32 tx_good_frames;
-	__le32 tx_max_collisions;
-	__le32 tx_late_collisions;
-	__le32 tx_underruns;
-	__le32 tx_lost_crs;
-	__le32 tx_deferred;
-	__le32 tx_single_collisions;
-	__le32 tx_multiple_collisions;
-	__le32 tx_total_collisions;
-	__le32 rx_good_frames;
-	__le32 rx_crc_errors;
-	__le32 rx_alignment_errors;
-	__le32 rx_resource_errors;
-	__le32 rx_overrun_errors;
-	__le32 rx_cdt_errors;
-	__le32 rx_short_frame_errors;
-	__le32 fc_xmt_pause;
-	__le32 fc_rcv_pause;
-	__le32 fc_rcv_unsupported;
-	__le16 xmt_tco_frames;
-	__le16 rcv_tco_frames;
-	__le32 complete;
-};
-
-struct mem {
-	struct {
-		u32 signature;
-		u32 result;
-	} selftest;
-	struct stats stats;
-	u8 dump_buf[596];
-};
-
-struct param_range {
-	u32 min;
-	u32 max;
-	u32 count;
-};
-
-struct params {
-	struct param_range rfds;
-	struct param_range cbs;
-};
-
-struct nic {
-	u32 msg_enable;
-	struct net_device *netdev;
-	struct pci_dev *pdev;
-	u16 (*mdio_ctrl)(struct nic *, u32, u32, u32, u16);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct rx *rxs;
-	struct rx *rx_to_use;
-	struct rx *rx_to_clean;
-	struct rfd blank_rfd;
-	enum ru_state ru_running;
-	long: 32;
-	long: 64;
-	long: 64;
-	spinlock_t cb_lock;
-	spinlock_t cmd_lock;
-	struct csr *csr;
-	enum scb_cmd_lo cuc_cmd;
-	unsigned int cbs_avail;
-	struct napi_struct napi;
-	struct cb *cbs;
-	struct cb *cb_to_use;
-	struct cb *cb_to_send;
-	struct cb *cb_to_clean;
-	__le16 tx_command;
-	long: 48;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	enum {
-		ich = 1,
-		promiscuous = 2,
-		multicast_all = 4,
-		wol_magic = 8,
-		ich_10h_workaround = 16,
-	} flags;
-	enum mac mac;
-	enum phy___3 phy;
-	struct params params;
-	struct timer_list watchdog;
-	struct mii_if_info mii;
-	struct work_struct tx_timeout_task;
-	enum loopback loopback;
-	struct mem *mem;
-	dma_addr_t dma_addr;
-	struct dma_pool___2 *cbs_pool;
-	dma_addr_t cbs_dma_addr;
-	u8 adaptive_ifs;
-	u8 tx_threshold;
-	u32 tx_frames;
-	u32 tx_collisions;
-	u32 tx_deferred;
-	u32 tx_single_collisions;
-	u32 tx_multiple_collisions;
-	u32 tx_fc_pause;
-	u32 tx_tco_frames;
-	u32 rx_fc_pause;
-	u32 rx_fc_unsupported;
-	u32 rx_tco_frames;
-	u32 rx_short_frame_errors;
-	u32 rx_over_length_errors;
-	u16 eeprom_wc;
-	__le16 eeprom[256];
-	spinlock_t mdio_lock;
-	const struct firmware *fw;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum led_state {
-	led_on = 1,
-	led_off = 4,
-	led_on_559 = 5,
-	led_on_557 = 7,
-};
-
-struct vlan_hdr {
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-struct qdisc_walker {
-	int stop;
-	int skip;
-	int count;
-	int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);
-};
-
-typedef enum {
-	e1000_undefined = 0,
-	e1000_82542_rev2_0 = 1,
-	e1000_82542_rev2_1 = 2,
-	e1000_82543 = 3,
-	e1000_82544 = 4,
-	e1000_82540 = 5,
-	e1000_82545 = 6,
-	e1000_82545_rev_3 = 7,
-	e1000_82546 = 8,
-	e1000_ce4100 = 9,
-	e1000_82546_rev_3 = 10,
-	e1000_82541 = 11,
-	e1000_82541_rev_2 = 12,
-	e1000_82547 = 13,
-	e1000_82547_rev_2 = 14,
-	e1000_num_macs = 15,
-} e1000_mac_type;
-
-typedef enum {
-	e1000_eeprom_uninitialized = 0,
-	e1000_eeprom_spi = 1,
-	e1000_eeprom_microwire = 2,
-	e1000_eeprom_flash = 3,
-	e1000_eeprom_none = 4,
-	e1000_num_eeprom_types = 5,
-} e1000_eeprom_type;
-
-typedef enum {
-	e1000_media_type_copper = 0,
-	e1000_media_type_fiber = 1,
-	e1000_media_type_internal_serdes = 2,
-	e1000_num_media_types = 3,
-} e1000_media_type;
-
-enum {
-	e1000_10_half = 0,
-	e1000_10_full = 1,
-	e1000_100_half = 2,
-	e1000_100_full = 3,
-};
-
-typedef enum {
-	E1000_FC_NONE = 0,
-	E1000_FC_RX_PAUSE = 1,
-	E1000_FC_TX_PAUSE = 2,
-	E1000_FC_FULL = 3,
-	E1000_FC_DEFAULT = 255,
-} e1000_fc_type;
-
-struct e1000_shadow_ram {
-	u16 eeprom_word;
-	bool modified;
-};
-
-typedef enum {
-	e1000_bus_type_unknown = 0,
-	e1000_bus_type_pci = 1,
-	e1000_bus_type_pcix = 2,
-	e1000_bus_type_reserved = 3,
-} e1000_bus_type;
-
-typedef enum {
-	e1000_bus_speed_unknown = 0,
-	e1000_bus_speed_33 = 1,
-	e1000_bus_speed_66 = 2,
-	e1000_bus_speed_100 = 3,
-	e1000_bus_speed_120 = 4,
-	e1000_bus_speed_133 = 5,
-	e1000_bus_speed_reserved = 6,
-} e1000_bus_speed;
-
-typedef enum {
-	e1000_bus_width_unknown = 0,
-	e1000_bus_width_32 = 1,
-	e1000_bus_width_64 = 2,
-	e1000_bus_width_reserved = 3,
-} e1000_bus_width;
-
-typedef enum {
-	e1000_cable_length_50 = 0,
-	e1000_cable_length_50_80 = 1,
-	e1000_cable_length_80_110 = 2,
-	e1000_cable_length_110_140 = 3,
-	e1000_cable_length_140 = 4,
-	e1000_cable_length_undefined = 255,
-} e1000_cable_length;
-
-typedef enum {
-	e1000_10bt_ext_dist_enable_normal = 0,
-	e1000_10bt_ext_dist_enable_lower = 1,
-	e1000_10bt_ext_dist_enable_undefined = 255,
-} e1000_10bt_ext_dist_enable;
-
-typedef enum {
-	e1000_rev_polarity_normal = 0,
-	e1000_rev_polarity_reversed = 1,
-	e1000_rev_polarity_undefined = 255,
-} e1000_rev_polarity;
-
-typedef enum {
-	e1000_downshift_normal = 0,
-	e1000_downshift_activated = 1,
-	e1000_downshift_undefined = 255,
-} e1000_downshift;
-
-typedef enum {
-	e1000_smart_speed_default = 0,
-	e1000_smart_speed_on = 1,
-	e1000_smart_speed_off = 2,
-} e1000_smart_speed;
-
-typedef enum {
-	e1000_polarity_reversal_enabled = 0,
-	e1000_polarity_reversal_disabled = 1,
-	e1000_polarity_reversal_undefined = 255,
-} e1000_polarity_reversal;
-
-typedef enum {
-	e1000_auto_x_mode_manual_mdi = 0,
-	e1000_auto_x_mode_manual_mdix = 1,
-	e1000_auto_x_mode_auto1 = 2,
-	e1000_auto_x_mode_auto2 = 3,
-	e1000_auto_x_mode_undefined = 255,
-} e1000_auto_x_mode;
-
-typedef enum {
-	e1000_1000t_rx_status_not_ok = 0,
-	e1000_1000t_rx_status_ok = 1,
-	e1000_1000t_rx_status_undefined = 255,
-} e1000_1000t_rx_status;
-
-typedef enum {
-	e1000_phy_m88 = 0,
-	e1000_phy_igp = 1,
-	e1000_phy_8211 = 2,
-	e1000_phy_8201 = 3,
-	e1000_phy_undefined = 255,
-} e1000_phy_type;
-
-typedef enum {
-	e1000_ms_hw_default = 0,
-	e1000_ms_force_master = 1,
-	e1000_ms_force_slave = 2,
-	e1000_ms_auto = 3,
-} e1000_ms_type;
-
-typedef enum {
-	e1000_ffe_config_enabled = 0,
-	e1000_ffe_config_active = 1,
-	e1000_ffe_config_blocked = 2,
-} e1000_ffe_config;
-
-typedef enum {
-	e1000_dsp_config_disabled = 0,
-	e1000_dsp_config_enabled = 1,
-	e1000_dsp_config_activated = 2,
-	e1000_dsp_config_undefined = 255,
-} e1000_dsp_config;
-
-struct e1000_phy_info {
-	e1000_cable_length cable_length;
-	e1000_10bt_ext_dist_enable extended_10bt_distance;
-	e1000_rev_polarity cable_polarity;
-	e1000_downshift downshift;
-	e1000_polarity_reversal polarity_correction;
-	e1000_auto_x_mode mdix_mode;
-	e1000_1000t_rx_status local_rx;
-	e1000_1000t_rx_status remote_rx;
-};
-
-struct e1000_phy_stats {
-	u32 idle_errors;
-	u32 receive_errors;
-};
-
-struct e1000_eeprom_info {
-	e1000_eeprom_type type;
-	u16 word_size;
-	u16 opcode_bits;
-	u16 address_bits;
-	u16 delay_usec;
-	u16 page_size;
-};
-
-struct e1000_host_mng_dhcp_cookie {
-	u32 signature;
-	u8 status;
-	u8 reserved0;
-	u16 vlan_id;
-	u32 reserved1;
-	u16 reserved2;
-	u8 reserved3;
-	u8 checksum;
-};
-
-struct e1000_rx_desc {
-	__le64 buffer_addr;
-	__le16 length;
-	__le16 csum;
-	u8 status;
-	u8 errors;
-	__le16 special;
-};
-
-struct e1000_tx_desc {
-	__le64 buffer_addr;
-	union {
-		__le32 data;
-		struct {
-			__le16 length;
-			u8 cso;
-			u8 cmd;
-		} flags;
-	} lower;
-	union {
-		__le32 data;
-		struct {
-			u8 status;
-			u8 css;
-			__le16 special;
-		} fields;
-	} upper;
-};
-
-struct e1000_context_desc {
-	union {
-		__le32 ip_config;
-		struct {
-			u8 ipcss;
-			u8 ipcso;
-			__le16 ipcse;
-		} ip_fields;
-	} lower_setup;
-	union {
-		__le32 tcp_config;
-		struct {
-			u8 tucss;
-			u8 tucso;
-			__le16 tucse;
-		} tcp_fields;
-	} upper_setup;
-	__le32 cmd_and_length;
-	union {
-		__le32 data;
-		struct {
-			u8 status;
-			u8 hdr_len;
-			__le16 mss;
-		} fields;
-	} tcp_seg_setup;
-};
-
-struct e1000_hw_stats {
-	u64 crcerrs;
-	u64 algnerrc;
-	u64 symerrs;
-	u64 rxerrc;
-	u64 txerrc;
-	u64 mpc;
-	u64 scc;
-	u64 ecol;
-	u64 mcc;
-	u64 latecol;
-	u64 colc;
-	u64 dc;
-	u64 tncrs;
-	u64 sec;
-	u64 cexterr;
-	u64 rlec;
-	u64 xonrxc;
-	u64 xontxc;
-	u64 xoffrxc;
-	u64 xofftxc;
-	u64 fcruc;
-	u64 prc64;
-	u64 prc127;
-	u64 prc255;
-	u64 prc511;
-	u64 prc1023;
-	u64 prc1522;
-	u64 gprc;
-	u64 bprc;
-	u64 mprc;
-	u64 gptc;
-	u64 gorcl;
-	u64 gorch;
-	u64 gotcl;
-	u64 gotch;
-	u64 rnbc;
-	u64 ruc;
-	u64 rfc;
-	u64 roc;
-	u64 rlerrc;
-	u64 rjc;
-	u64 mgprc;
-	u64 mgpdc;
-	u64 mgptc;
-	u64 torl;
-	u64 torh;
-	u64 totl;
-	u64 toth;
-	u64 tpr;
-	u64 tpt;
-	u64 ptc64;
-	u64 ptc127;
-	u64 ptc255;
-	u64 ptc511;
-	u64 ptc1023;
-	u64 ptc1522;
-	u64 mptc;
-	u64 bptc;
-	u64 tsctc;
-	u64 tsctfc;
-	u64 iac;
-	u64 icrxptc;
-	u64 icrxatc;
-	u64 ictxptc;
-	u64 ictxatc;
-	u64 ictxqec;
-	u64 ictxqmtc;
-	u64 icrxdmtc;
-	u64 icrxoc;
-};
-
-struct e1000_hw {
-	u8 *hw_addr;
-	u8 *flash_address;
-	void *ce4100_gbe_mdio_base_virt;
-	e1000_mac_type mac_type;
-	e1000_phy_type phy_type;
-	u32 phy_init_script;
-	e1000_media_type media_type;
-	void *back;
-	struct e1000_shadow_ram *eeprom_shadow_ram;
-	u32 flash_bank_size;
-	u32 flash_base_addr;
-	e1000_fc_type fc;
-	e1000_bus_speed bus_speed;
-	e1000_bus_width bus_width;
-	e1000_bus_type bus_type;
-	struct e1000_eeprom_info eeprom;
-	e1000_ms_type master_slave;
-	e1000_ms_type original_master_slave;
-	e1000_ffe_config ffe_config_state;
-	u32 asf_firmware_present;
-	u32 eeprom_semaphore_present;
-	long unsigned int io_base;
-	u32 phy_id;
-	u32 phy_revision;
-	u32 phy_addr;
-	u32 original_fc;
-	u32 txcw;
-	u32 autoneg_failed;
-	u32 max_frame_size;
-	u32 min_frame_size;
-	u32 mc_filter_type;
-	u32 num_mc_addrs;
-	u32 collision_delta;
-	u32 tx_packet_delta;
-	u32 ledctl_default;
-	u32 ledctl_mode1;
-	u32 ledctl_mode2;
-	bool tx_pkt_filtering;
-	struct e1000_host_mng_dhcp_cookie mng_cookie;
-	u16 phy_spd_default;
-	u16 autoneg_advertised;
-	u16 pci_cmd_word;
-	u16 fc_high_water;
-	u16 fc_low_water;
-	u16 fc_pause_time;
-	u16 current_ifs_val;
-	u16 ifs_min_val;
-	u16 ifs_max_val;
-	u16 ifs_step_size;
-	u16 ifs_ratio;
-	u16 device_id;
-	u16 vendor_id;
-	u16 subsystem_id;
-	u16 subsystem_vendor_id;
-	u8 revision_id;
-	u8 autoneg;
-	u8 mdix;
-	u8 forced_speed_duplex;
-	u8 wait_autoneg_complete;
-	u8 dma_fairness;
-	u8 mac_addr[6];
-	u8 perm_mac_addr[6];
-	bool disable_polarity_correction;
-	bool speed_downgraded;
-	e1000_smart_speed smart_speed;
-	e1000_dsp_config dsp_config_state;
-	bool get_link_status;
-	bool serdes_has_link;
-	bool tbi_compatibility_en;
-	bool tbi_compatibility_on;
-	bool laa_is_present;
-	bool phy_reset_disable;
-	bool initialize_hw_bits_disable;
-	bool fc_send_xon;
-	bool fc_strict_ieee;
-	bool report_tx_early;
-	bool adaptive_ifs;
-	bool ifs_params_forced;
-	bool in_ifs_mode;
-	bool mng_reg_access_disabled;
-	bool leave_av_bit_off;
-	bool bad_tx_carr_stats_fd;
-	bool has_smbus;
-};
-
-struct e1000_tx_buffer {
-	struct sk_buff *skb;
-	dma_addr_t dma;
-	long unsigned int time_stamp;
-	u16 length;
-	u16 next_to_watch;
-	bool mapped_as_page;
-	short unsigned int segs;
-	unsigned int bytecount;
-};
-
-struct e1000_rx_buffer {
-	union {
-		struct page *page;
-		u8 *data;
-	} rxbuf;
-	dma_addr_t dma;
-};
-
-struct e1000_tx_ring {
-	void *desc;
-	dma_addr_t dma;
-	unsigned int size;
-	unsigned int count;
-	unsigned int next_to_use;
-	unsigned int next_to_clean;
-	struct e1000_tx_buffer *buffer_info;
-	u16 tdh;
-	u16 tdt;
-	bool last_tx_tso;
-};
-
-struct e1000_rx_ring {
-	void *desc;
-	dma_addr_t dma;
-	unsigned int size;
-	unsigned int count;
-	unsigned int next_to_use;
-	unsigned int next_to_clean;
-	struct e1000_rx_buffer *buffer_info;
-	struct sk_buff *rx_skb_top;
-	int cpu;
-	u16 rdh;
-	u16 rdt;
-};
-
-struct e1000_adapter {
-	long unsigned int active_vlans[64];
-	u16 mng_vlan_id;
-	u32 bd_number;
-	u32 rx_buffer_len;
-	u32 wol;
-	u32 smartspeed;
-	u32 en_mng_pt;
-	u16 link_speed;
-	u16 link_duplex;
-	spinlock_t stats_lock;
-	unsigned int total_tx_bytes;
-	unsigned int total_tx_packets;
-	unsigned int total_rx_bytes;
-	unsigned int total_rx_packets;
-	u32 itr;
-	u32 itr_setting;
-	u16 tx_itr;
-	u16 rx_itr;
-	u8 fc_autoneg;
-	struct e1000_tx_ring *tx_ring;
-	unsigned int restart_queue;
-	u32 txd_cmd;
-	u32 tx_int_delay;
-	u32 tx_abs_int_delay;
-	u32 gotcl;
-	u64 gotcl_old;
-	u64 tpt_old;
-	u64 colc_old;
-	u32 tx_timeout_count;
-	u32 tx_fifo_head;
-	u32 tx_head_addr;
-	u32 tx_fifo_size;
-	u8 tx_timeout_factor;
-	atomic_t tx_fifo_stall;
-	bool pcix_82544;
-	bool detect_tx_hung;
-	bool dump_buffers;
-	bool (*clean_rx)(struct e1000_adapter *, struct e1000_rx_ring *, int *, int);
-	void (*alloc_rx_buf)(struct e1000_adapter *, struct e1000_rx_ring *, int);
-	struct e1000_rx_ring *rx_ring;
-	struct napi_struct napi;
-	int num_tx_queues;
-	int num_rx_queues;
-	u64 hw_csum_err;
-	u64 hw_csum_good;
-	u32 alloc_rx_buff_failed;
-	u32 rx_int_delay;
-	u32 rx_abs_int_delay;
-	bool rx_csum;
-	u32 gorcl;
-	u64 gorcl_old;
-	struct net_device *netdev;
-	struct pci_dev *pdev;
-	struct e1000_hw hw;
-	struct e1000_hw_stats stats;
-	struct e1000_phy_info phy_info;
-	struct e1000_phy_stats phy_stats;
-	u32 test_icr;
-	struct e1000_tx_ring test_tx_ring;
-	struct e1000_rx_ring test_rx_ring;
-	int msg_enable;
-	bool tso_force;
-	bool smart_power_down;
-	bool quad_port_a;
-	long unsigned int flags;
-	u32 eeprom_wol;
-	int bars;
-	int need_ioport;
-	bool discarding;
-	struct work_struct reset_task;
-	struct delayed_work watchdog_task;
-	struct delayed_work fifo_stall_task;
-	struct delayed_work phy_info_task;
-};
-
-enum e1000_state_t {
-	__E1000_TESTING = 0,
-	__E1000_RESETTING = 1,
-	__E1000_DOWN = 2,
-	__E1000_DISABLED = 3,
-};
-
-enum latency_range {
-	lowest_latency = 0,
-	low_latency = 1,
-	bulk_latency = 2,
-	latency_invalid = 255,
-};
-
-struct my_u {
-	__le64 a;
-	__le64 b;
-};
-
-enum {
-	e1000_igp_cable_length_10 = 10,
-	e1000_igp_cable_length_20 = 20,
-	e1000_igp_cable_length_30 = 30,
-	e1000_igp_cable_length_40 = 40,
-	e1000_igp_cable_length_50 = 50,
-	e1000_igp_cable_length_60 = 60,
-	e1000_igp_cable_length_70 = 70,
-	e1000_igp_cable_length_80 = 80,
-	e1000_igp_cable_length_90 = 90,
-	e1000_igp_cable_length_100 = 100,
-	e1000_igp_cable_length_110 = 110,
-	e1000_igp_cable_length_115 = 115,
-	e1000_igp_cable_length_120 = 120,
-	e1000_igp_cable_length_130 = 130,
-	e1000_igp_cable_length_140 = 140,
-	e1000_igp_cable_length_150 = 150,
-	e1000_igp_cable_length_160 = 160,
-	e1000_igp_cable_length_170 = 170,
-	e1000_igp_cable_length_180 = 180,
-};
-
-enum {
-	NETDEV_STATS = 0,
-	E1000_STATS = 1,
-};
-
-struct e1000_stats {
-	char stat_string[32];
-	int type;
-	int sizeof_stat;
-	int stat_offset;
-};
-
-struct e1000_opt_list {
-	int i;
-	char *str;
-};
-
-struct e1000_option {
-	enum {
-		enable_option = 0,
-		range_option = 1,
-		list_option = 2,
-	} type;
-	const char *name;
-	const char *err;
-	int def;
-	union {
-		struct {
-			int min;
-			int max;
-		} r;
-		struct {
-			int nr;
-			const struct e1000_opt_list *p;
-		} l;
-	} arg;
-};
-
-enum e1000_mac_type {
-	e1000_82571 = 0,
-	e1000_82572 = 1,
-	e1000_82573 = 2,
-	e1000_82574 = 3,
-	e1000_82583 = 4,
-	e1000_80003es2lan = 5,
-	e1000_ich8lan = 6,
-	e1000_ich9lan = 7,
-	e1000_ich10lan = 8,
-	e1000_pchlan = 9,
-	e1000_pch2lan = 10,
-	e1000_pch_lpt = 11,
-	e1000_pch_spt = 12,
-	e1000_pch_cnp = 13,
-	e1000_pch_tgp = 14,
-};
-
-enum e1000_media_type {
-	e1000_media_type_unknown = 0,
-	e1000_media_type_copper___2 = 1,
-	e1000_media_type_fiber___2 = 2,
-	e1000_media_type_internal_serdes___2 = 3,
-	e1000_num_media_types___2 = 4,
-};
-
-enum e1000_nvm_type {
-	e1000_nvm_unknown = 0,
-	e1000_nvm_none = 1,
-	e1000_nvm_eeprom_spi = 2,
-	e1000_nvm_flash_hw = 3,
-	e1000_nvm_flash_sw = 4,
-};
-
-enum e1000_nvm_override {
-	e1000_nvm_override_none = 0,
-	e1000_nvm_override_spi_small = 1,
-	e1000_nvm_override_spi_large = 2,
-};
-
-enum e1000_phy_type {
-	e1000_phy_unknown = 0,
-	e1000_phy_none = 1,
-	e1000_phy_m88___2 = 2,
-	e1000_phy_igp___2 = 3,
-	e1000_phy_igp_2 = 4,
-	e1000_phy_gg82563 = 5,
-	e1000_phy_igp_3 = 6,
-	e1000_phy_ife = 7,
-	e1000_phy_bm = 8,
-	e1000_phy_82578 = 9,
-	e1000_phy_82577 = 10,
-	e1000_phy_82579 = 11,
-	e1000_phy_i217 = 12,
-};
-
-enum e1000_bus_width {
-	e1000_bus_width_unknown___2 = 0,
-	e1000_bus_width_pcie_x1 = 1,
-	e1000_bus_width_pcie_x2 = 2,
-	e1000_bus_width_pcie_x4 = 4,
-	e1000_bus_width_pcie_x8 = 8,
-	e1000_bus_width_32___2 = 9,
-	e1000_bus_width_64___2 = 10,
-	e1000_bus_width_reserved___2 = 11,
-};
-
-enum e1000_1000t_rx_status {
-	e1000_1000t_rx_status_not_ok___2 = 0,
-	e1000_1000t_rx_status_ok___2 = 1,
-	e1000_1000t_rx_status_undefined___2 = 255,
-};
-
-enum e1000_rev_polarity {
-	e1000_rev_polarity_normal___2 = 0,
-	e1000_rev_polarity_reversed___2 = 1,
-	e1000_rev_polarity_undefined___2 = 255,
-};
-
-enum e1000_fc_mode {
-	e1000_fc_none = 0,
-	e1000_fc_rx_pause = 1,
-	e1000_fc_tx_pause = 2,
-	e1000_fc_full = 3,
-	e1000_fc_default = 255,
-};
-
-enum e1000_ms_type {
-	e1000_ms_hw_default___2 = 0,
-	e1000_ms_force_master___2 = 1,
-	e1000_ms_force_slave___2 = 2,
-	e1000_ms_auto___2 = 3,
-};
-
-enum e1000_smart_speed {
-	e1000_smart_speed_default___2 = 0,
-	e1000_smart_speed_on___2 = 1,
-	e1000_smart_speed_off___2 = 2,
-};
-
-enum e1000_serdes_link_state {
-	e1000_serdes_link_down = 0,
-	e1000_serdes_link_autoneg_progress = 1,
-	e1000_serdes_link_autoneg_complete = 2,
-	e1000_serdes_link_forced_up = 3,
-};
-
-struct e1000_hw_stats___2 {
-	u64 crcerrs;
-	u64 algnerrc;
-	u64 symerrs;
-	u64 rxerrc;
-	u64 mpc;
-	u64 scc;
-	u64 ecol;
-	u64 mcc;
-	u64 latecol;
-	u64 colc;
-	u64 dc;
-	u64 tncrs;
-	u64 sec;
-	u64 cexterr;
-	u64 rlec;
-	u64 xonrxc;
-	u64 xontxc;
-	u64 xoffrxc;
-	u64 xofftxc;
-	u64 fcruc;
-	u64 prc64;
-	u64 prc127;
-	u64 prc255;
-	u64 prc511;
-	u64 prc1023;
-	u64 prc1522;
-	u64 gprc;
-	u64 bprc;
-	u64 mprc;
-	u64 gptc;
-	u64 gorc;
-	u64 gotc;
-	u64 rnbc;
-	u64 ruc;
-	u64 rfc;
-	u64 roc;
-	u64 rjc;
-	u64 mgprc;
-	u64 mgpdc;
-	u64 mgptc;
-	u64 tor;
-	u64 tot;
-	u64 tpr;
-	u64 tpt;
-	u64 ptc64;
-	u64 ptc127;
-	u64 ptc255;
-	u64 ptc511;
-	u64 ptc1023;
-	u64 ptc1522;
-	u64 mptc;
-	u64 bptc;
-	u64 tsctc;
-	u64 tsctfc;
-	u64 iac;
-	u64 icrxptc;
-	u64 icrxatc;
-	u64 ictxptc;
-	u64 ictxatc;
-	u64 ictxqec;
-	u64 ictxqmtc;
-	u64 icrxdmtc;
-	u64 icrxoc;
-};
-
-struct e1000_hw___2;
-
-struct e1000_mac_operations {
-	s32 (*id_led_init)(struct e1000_hw___2 *);
-	s32 (*blink_led)(struct e1000_hw___2 *);
-	bool (*check_mng_mode)(struct e1000_hw___2 *);
-	s32 (*check_for_link)(struct e1000_hw___2 *);
-	s32 (*cleanup_led)(struct e1000_hw___2 *);
-	void (*clear_hw_cntrs)(struct e1000_hw___2 *);
-	void (*clear_vfta)(struct e1000_hw___2 *);
-	s32 (*get_bus_info)(struct e1000_hw___2 *);
-	void (*set_lan_id)(struct e1000_hw___2 *);
-	s32 (*get_link_up_info)(struct e1000_hw___2 *, u16 *, u16 *);
-	s32 (*led_on)(struct e1000_hw___2 *);
-	s32 (*led_off)(struct e1000_hw___2 *);
-	void (*update_mc_addr_list)(struct e1000_hw___2 *, u8 *, u32);
-	s32 (*reset_hw)(struct e1000_hw___2 *);
-	s32 (*init_hw)(struct e1000_hw___2 *);
-	s32 (*setup_link)(struct e1000_hw___2 *);
-	s32 (*setup_physical_interface)(struct e1000_hw___2 *);
-	s32 (*setup_led)(struct e1000_hw___2 *);
-	void (*write_vfta)(struct e1000_hw___2 *, u32, u32);
-	void (*config_collision_dist)(struct e1000_hw___2 *);
-	int (*rar_set)(struct e1000_hw___2 *, u8 *, u32);
-	s32 (*read_mac_addr)(struct e1000_hw___2 *);
-	u32 (*rar_get_count)(struct e1000_hw___2 *);
-};
-
-struct e1000_mac_info {
-	struct e1000_mac_operations ops;
-	u8 addr[6];
-	u8 perm_addr[6];
-	enum e1000_mac_type type;
-	u32 collision_delta;
-	u32 ledctl_default;
-	u32 ledctl_mode1;
-	u32 ledctl_mode2;
-	u32 mc_filter_type;
-	u32 tx_packet_delta;
-	u32 txcw;
-	u16 current_ifs_val;
-	u16 ifs_max_val;
-	u16 ifs_min_val;
-	u16 ifs_ratio;
-	u16 ifs_step_size;
-	u16 mta_reg_count;
-	u32 mta_shadow[128];
-	u16 rar_entry_count;
-	u8 forced_speed_duplex;
-	bool adaptive_ifs;
-	bool has_fwsm;
-	bool arc_subsystem_valid;
-	bool autoneg;
-	bool autoneg_failed;
-	bool get_link_status;
-	bool in_ifs_mode;
-	bool serdes_has_link;
-	bool tx_pkt_filtering;
-	enum e1000_serdes_link_state serdes_link_state;
-};
-
-struct e1000_fc_info {
-	u32 high_water;
-	u32 low_water;
-	u16 pause_time;
-	u16 refresh_time;
-	bool send_xon;
-	bool strict_ieee;
-	enum e1000_fc_mode current_mode;
-	enum e1000_fc_mode requested_mode;
-};
-
-struct e1000_phy_operations {
-	s32 (*acquire)(struct e1000_hw___2 *);
-	s32 (*cfg_on_link_up)(struct e1000_hw___2 *);
-	s32 (*check_polarity)(struct e1000_hw___2 *);
-	s32 (*check_reset_block)(struct e1000_hw___2 *);
-	s32 (*commit)(struct e1000_hw___2 *);
-	s32 (*force_speed_duplex)(struct e1000_hw___2 *);
-	s32 (*get_cfg_done)(struct e1000_hw___2 *);
-	s32 (*get_cable_length)(struct e1000_hw___2 *);
-	s32 (*get_info)(struct e1000_hw___2 *);
-	s32 (*set_page)(struct e1000_hw___2 *, u16);
-	s32 (*read_reg)(struct e1000_hw___2 *, u32, u16 *);
-	s32 (*read_reg_locked)(struct e1000_hw___2 *, u32, u16 *);
-	s32 (*read_reg_page)(struct e1000_hw___2 *, u32, u16 *);
-	void (*release)(struct e1000_hw___2 *);
-	s32 (*reset)(struct e1000_hw___2 *);
-	s32 (*set_d0_lplu_state)(struct e1000_hw___2 *, bool);
-	s32 (*set_d3_lplu_state)(struct e1000_hw___2 *, bool);
-	s32 (*write_reg)(struct e1000_hw___2 *, u32, u16);
-	s32 (*write_reg_locked)(struct e1000_hw___2 *, u32, u16);
-	s32 (*write_reg_page)(struct e1000_hw___2 *, u32, u16);
-	void (*power_up)(struct e1000_hw___2 *);
-	void (*power_down)(struct e1000_hw___2 *);
-};
-
-struct e1000_phy_info___2 {
-	struct e1000_phy_operations ops;
-	enum e1000_phy_type type;
-	enum e1000_1000t_rx_status local_rx;
-	enum e1000_1000t_rx_status remote_rx;
-	enum e1000_ms_type ms_type;
-	enum e1000_ms_type original_ms_type;
-	enum e1000_rev_polarity cable_polarity;
-	enum e1000_smart_speed smart_speed;
-	u32 addr;
-	u32 id;
-	u32 reset_delay_us;
-	u32 revision;
-	enum e1000_media_type media_type;
-	u16 autoneg_advertised;
-	u16 autoneg_mask;
-	u16 cable_length;
-	u16 max_cable_length;
-	u16 min_cable_length;
-	u8 mdix;
-	bool disable_polarity_correction;
-	bool is_mdix;
-	bool polarity_correction;
-	bool speed_downgraded;
-	bool autoneg_wait_to_complete;
-};
-
-struct e1000_nvm_operations {
-	s32 (*acquire)(struct e1000_hw___2 *);
-	s32 (*read)(struct e1000_hw___2 *, u16, u16, u16 *);
-	void (*release)(struct e1000_hw___2 *);
-	void (*reload)(struct e1000_hw___2 *);
-	s32 (*update)(struct e1000_hw___2 *);
-	s32 (*valid_led_default)(struct e1000_hw___2 *, u16 *);
-	s32 (*validate)(struct e1000_hw___2 *);
-	s32 (*write)(struct e1000_hw___2 *, u16, u16, u16 *);
-};
-
-struct e1000_nvm_info {
-	struct e1000_nvm_operations ops;
-	enum e1000_nvm_type type;
-	enum e1000_nvm_override override;
-	u32 flash_bank_size;
-	u32 flash_base_addr;
-	u16 word_size;
-	u16 delay_usec;
-	u16 address_bits;
-	u16 opcode_bits;
-	u16 page_size;
-};
-
-struct e1000_bus_info {
-	enum e1000_bus_width width;
-	u16 func;
-};
-
-struct e1000_dev_spec_82571 {
-	bool laa_is_present;
-	u32 smb_counter;
-};
-
-struct e1000_dev_spec_80003es2lan {
-	bool mdic_wa_enable;
-};
-
-struct e1000_shadow_ram___2 {
-	u16 value;
-	bool modified;
-};
-
-enum e1000_ulp_state {
-	e1000_ulp_state_unknown = 0,
-	e1000_ulp_state_off = 1,
-	e1000_ulp_state_on = 2,
-};
-
-struct e1000_dev_spec_ich8lan {
-	bool kmrn_lock_loss_workaround_enabled;
-	struct e1000_shadow_ram___2 shadow_ram[2048];
-	bool nvm_k1_enabled;
-	bool eee_disable;
-	u16 eee_lp_ability;
-	enum e1000_ulp_state ulp_state;
-};
-
-struct e1000_adapter___2;
-
-struct e1000_hw___2 {
-	struct e1000_adapter___2 *adapter;
-	void *hw_addr;
-	void *flash_address;
-	struct e1000_mac_info mac;
-	struct e1000_fc_info fc;
-	struct e1000_phy_info___2 phy;
-	struct e1000_nvm_info nvm;
-	struct e1000_bus_info bus;
-	struct e1000_host_mng_dhcp_cookie mng_cookie;
-	union {
-		struct e1000_dev_spec_82571 e82571;
-		struct e1000_dev_spec_80003es2lan e80003es2lan;
-		struct e1000_dev_spec_ich8lan ich8lan;
-	} dev_spec;
-};
-
-struct e1000_phy_regs {
-	u16 bmcr;
-	u16 bmsr;
-	u16 advertise;
-	u16 lpa;
-	u16 expansion;
-	u16 ctrl1000;
-	u16 stat1000;
-	u16 estatus;
-};
-
-struct e1000_buffer;
-
-struct e1000_ring {
-	struct e1000_adapter___2 *adapter;
-	void *desc;
-	dma_addr_t dma;
-	unsigned int size;
-	unsigned int count;
-	u16 next_to_use;
-	u16 next_to_clean;
-	void *head;
-	void *tail;
-	struct e1000_buffer *buffer_info;
-	char name[21];
-	u32 ims_val;
-	u32 itr_val;
-	void *itr_register;
-	int set_itr;
-	struct sk_buff *rx_skb_top;
-};
-
-struct e1000_info;
-
-struct e1000_adapter___2 {
-	struct timer_list watchdog_timer;
-	struct timer_list phy_info_timer;
-	struct timer_list blink_timer;
-	struct work_struct reset_task;
-	struct work_struct watchdog_task;
-	const struct e1000_info *ei;
-	long unsigned int active_vlans[64];
-	u32 bd_number;
-	u32 rx_buffer_len;
-	u16 mng_vlan_id;
-	u16 link_speed;
-	u16 link_duplex;
-	u16 eeprom_vers;
-	long unsigned int state;
-	u32 itr;
-	u32 itr_setting;
-	u16 tx_itr;
-	u16 rx_itr;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct e1000_ring *tx_ring;
-	u32 tx_fifo_limit;
-	struct napi_struct napi;
-	unsigned int uncorr_errors;
-	unsigned int corr_errors;
-	unsigned int restart_queue;
-	u32 txd_cmd;
-	bool detect_tx_hung;
-	bool tx_hang_recheck;
-	u8 tx_timeout_factor;
-	u32 tx_int_delay;
-	u32 tx_abs_int_delay;
-	unsigned int total_tx_bytes;
-	unsigned int total_tx_packets;
-	unsigned int total_rx_bytes;
-	unsigned int total_rx_packets;
-	u64 tpt_old;
-	u64 colc_old;
-	u32 gotc;
-	u64 gotc_old;
-	u32 tx_timeout_count;
-	u32 tx_fifo_head;
-	u32 tx_head_addr;
-	u32 tx_fifo_size;
-	u32 tx_dma_failed;
-	u32 tx_hwtstamp_timeouts;
-	u32 tx_hwtstamp_skipped;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	bool (*clean_rx)(struct e1000_ring *, int *, int);
-	void (*alloc_rx_buf)(struct e1000_ring *, int, gfp_t);
-	struct e1000_ring *rx_ring;
-	u32 rx_int_delay;
-	u32 rx_abs_int_delay;
-	u64 hw_csum_err;
-	u64 hw_csum_good;
-	u64 rx_hdr_split;
-	u32 gorc;
-	u64 gorc_old;
-	u32 alloc_rx_buff_failed;
-	u32 rx_dma_failed;
-	u32 rx_hwtstamp_cleared;
-	unsigned int rx_ps_pages;
-	u16 rx_ps_bsize0;
-	u32 max_frame_size;
-	u32 min_frame_size;
-	struct net_device *netdev;
-	struct pci_dev *pdev;
-	struct e1000_hw___2 hw;
-	spinlock_t stats64_lock;
-	struct e1000_hw_stats___2 stats;
-	struct e1000_phy_info___2 phy_info;
-	struct e1000_phy_stats phy_stats;
-	struct e1000_phy_regs phy_regs;
-	struct e1000_ring test_tx_ring;
-	struct e1000_ring test_rx_ring;
-	u32 test_icr;
-	u32 msg_enable;
-	unsigned int num_vectors;
-	struct msix_entry *msix_entries;
-	int int_mode;
-	u32 eiac_mask;
-	u32 eeprom_wol;
-	u32 wol;
-	u32 pba;
-	u32 max_hw_frame_size;
-	bool fc_autoneg;
-	unsigned int flags;
-	unsigned int flags2;
-	struct work_struct downshift_task;
-	struct work_struct update_phy_task;
-	struct work_struct print_hang_task;
-	int phy_hang_count;
-	u16 tx_ring_count;
-	u16 rx_ring_count;
-	struct hwtstamp_config hwtstamp_config;
-	struct delayed_work systim_overflow_work;
-	struct sk_buff *tx_hwtstamp_skb;
-	long unsigned int tx_hwtstamp_start;
-	struct work_struct tx_hwtstamp_work;
-	spinlock_t systim_lock;
-	struct cyclecounter cc;
-	struct timecounter tc;
-	struct ptp_clock *ptp_clock;
-	struct ptp_clock_info ptp_clock_info;
-	struct pm_qos_request pm_qos_req;
-	s32 ptp_delta;
-	u16 eee_advert;
-};
-
-struct e1000_ps_page {
-	struct page *page;
-	u64 dma;
-};
-
-struct e1000_buffer {
-	dma_addr_t dma;
-	struct sk_buff *skb;
-	union {
-		struct {
-			long unsigned int time_stamp;
-			u16 length;
-			u16 next_to_watch;
-			unsigned int segs;
-			unsigned int bytecount;
-			u16 mapped_as_page;
-		};
-		struct {
-			struct e1000_ps_page *ps_pages;
-			struct page *page;
-		};
-	};
-};
-
-struct e1000_info {
-	enum e1000_mac_type mac;
-	unsigned int flags;
-	unsigned int flags2;
-	u32 pba;
-	u32 max_hw_frame_size;
-	s32 (*get_variants)(struct e1000_adapter___2 *);
-	const struct e1000_mac_operations *mac_ops;
-	const struct e1000_phy_operations *phy_ops;
-	const struct e1000_nvm_operations *nvm_ops;
-};
-
-enum e1000_state_t___2 {
-	__E1000_TESTING___2 = 0,
-	__E1000_RESETTING___2 = 1,
-	__E1000_ACCESS_SHARED_RESOURCE = 2,
-	__E1000_DOWN___2 = 3,
-};
-
-struct ich8_hsfsts {
-	u16 flcdone: 1;
-	u16 flcerr: 1;
-	u16 dael: 1;
-	u16 berasesz: 2;
-	u16 flcinprog: 1;
-	u16 reserved1: 2;
-	u16 reserved2: 6;
-	u16 fldesvalid: 1;
-	u16 flockdn: 1;
-};
-
-union ich8_hws_flash_status {
-	struct ich8_hsfsts hsf_status;
-	u16 regval;
-};
-
-struct ich8_hsflctl {
-	u16 flcgo: 1;
-	u16 flcycle: 2;
-	u16 reserved: 5;
-	u16 fldbcount: 2;
-	u16 flockdn: 6;
-};
-
-union ich8_hws_flash_ctrl {
-	struct ich8_hsflctl hsf_ctrl;
-	u16 regval;
-};
-
-struct ich8_pr {
-	u32 base: 13;
-	u32 reserved1: 2;
-	u32 rpe: 1;
-	u32 limit: 13;
-	u32 reserved2: 2;
-	u32 wpe: 1;
-};
-
-union ich8_flash_protected_range {
-	struct ich8_pr range;
-	u32 regval;
-};
-
-struct e1000_host_mng_command_header {
-	u8 command_id;
-	u8 checksum;
-	u16 reserved1;
-	u16 reserved2;
-	u16 command_length;
-};
-
-enum e1000_mng_mode {
-	e1000_mng_mode_none = 0,
-	e1000_mng_mode_asf = 1,
-	e1000_mng_mode_pt = 2,
-	e1000_mng_mode_ipmi = 3,
-	e1000_mng_mode_host_if_only = 4,
-};
-
-struct e1000_option___2 {
-	enum {
-		enable_option___2 = 0,
-		range_option___2 = 1,
-		list_option___2 = 2,
-	} type;
-	const char *name;
-	const char *err;
-	int def;
-	union {
-		struct {
-			int min;
-			int max;
-		} r;
-		struct {
-			int nr;
-			struct e1000_opt_list *p;
-		} l;
-	} arg;
-};
-
-union e1000_rx_desc_extended {
-	struct {
-		__le64 buffer_addr;
-		__le64 reserved;
-	} read;
-	struct {
-		struct {
-			__le32 mrq;
-			union {
-				__le32 rss;
-				struct {
-					__le16 ip_id;
-					__le16 csum;
-				} csum_ip;
-			} hi_dword;
-		} lower;
-		struct {
-			__le32 status_error;
-			__le16 length;
-			__le16 vlan;
-		} upper;
-	} wb;
-};
-
-enum pkt_hash_types {
-	PKT_HASH_TYPE_NONE = 0,
-	PKT_HASH_TYPE_L2 = 1,
-	PKT_HASH_TYPE_L3 = 2,
-	PKT_HASH_TYPE_L4 = 3,
-};
-
-union e1000_rx_desc_packet_split {
-	struct {
-		__le64 buffer_addr[4];
-	} read;
-	struct {
-		struct {
-			__le32 mrq;
-			union {
-				__le32 rss;
-				struct {
-					__le16 ip_id;
-					__le16 csum;
-				} csum_ip;
-			} hi_dword;
-		} lower;
-		struct {
-			__le32 status_error;
-			__le16 length0;
-			__le16 vlan;
-		} middle;
-		struct {
-			__le16 header_status;
-			__le16 length[3];
-		} upper;
-		__le64 reserved;
-	} wb;
-};
-
-enum e1000_boards {
-	board_82571 = 0,
-	board_82572 = 1,
-	board_82573 = 2,
-	board_82574 = 3,
-	board_82583 = 4,
-	board_80003es2lan = 5,
-	board_ich8lan = 6,
-	board_ich9lan = 7,
-	board_ich10lan = 8,
-	board_pchlan = 9,
-	board_pch2lan = 10,
-	board_pch_lpt = 11,
-	board_pch_spt = 12,
-	board_pch_cnp = 13,
-};
-
-struct e1000_reg_info {
-	u32 ofs;
-	char *name;
-};
-
-struct my_u0 {
-	__le64 a;
-	__le64 b;
-};
-
-struct my_u1 {
-	__le64 a;
-	__le64 b;
-	__le64 c;
-	__le64 d;
-};
-
-enum {
-	PCI_DEV_REG1 = 64,
-	PCI_DEV_REG2 = 68,
-	PCI_DEV_STATUS = 124,
-	PCI_DEV_REG3 = 128,
-	PCI_DEV_REG4 = 132,
-	PCI_DEV_REG5 = 136,
-	PCI_CFG_REG_0 = 144,
-	PCI_CFG_REG_1 = 148,
-	PSM_CONFIG_REG0 = 152,
-	PSM_CONFIG_REG1 = 156,
-	PSM_CONFIG_REG2 = 352,
-	PSM_CONFIG_REG3 = 356,
-	PSM_CONFIG_REG4 = 360,
-	PCI_LDO_CTRL = 188,
-};
-
-enum pci_dev_reg_1 {
-	PCI_Y2_PIG_ENA = 2147483648,
-	PCI_Y2_DLL_DIS = 1073741824,
-	PCI_SW_PWR_ON_RST = 1073741824,
-	PCI_Y2_PHY2_COMA = 536870912,
-	PCI_Y2_PHY1_COMA = 268435456,
-	PCI_Y2_PHY2_POWD = 134217728,
-	PCI_Y2_PHY1_POWD = 67108864,
-	PCI_Y2_PME_LEGACY = 32768,
-	PCI_PHY_LNK_TIM_MSK = 768,
-	PCI_ENA_L1_EVENT = 128,
-	PCI_ENA_GPHY_LNK = 64,
-	PCI_FORCE_PEX_L1 = 32,
-};
-
-enum pci_dev_reg_2 {
-	PCI_VPD_WR_THR = 4278190080,
-	PCI_DEV_SEL = 16646144,
-	PCI_VPD_ROM_SZ = 114688,
-	PCI_PATCH_DIR = 3840,
-	PCI_EXT_PATCHS = 240,
-	PCI_EN_DUMMY_RD = 8,
-	PCI_REV_DESC = 4,
-	PCI_USEDATA64 = 1,
-};
-
-enum pci_dev_reg_3 {
-	P_CLK_ASF_REGS_DIS = 262144,
-	P_CLK_COR_REGS_D0_DIS = 131072,
-	P_CLK_MACSEC_DIS = 131072,
-	P_CLK_PCI_REGS_D0_DIS = 65536,
-	P_CLK_COR_YTB_ARB_DIS = 32768,
-	P_CLK_MAC_LNK1_D3_DIS = 16384,
-	P_CLK_COR_LNK1_D0_DIS = 8192,
-	P_CLK_MAC_LNK1_D0_DIS = 4096,
-	P_CLK_COR_LNK1_D3_DIS = 2048,
-	P_CLK_PCI_MST_ARB_DIS = 1024,
-	P_CLK_COR_REGS_D3_DIS = 512,
-	P_CLK_PCI_REGS_D3_DIS = 256,
-	P_CLK_REF_LNK1_GM_DIS = 128,
-	P_CLK_COR_LNK1_GM_DIS = 64,
-	P_CLK_PCI_COMMON_DIS = 32,
-	P_CLK_COR_COMMON_DIS = 16,
-	P_CLK_PCI_LNK1_BMU_DIS = 8,
-	P_CLK_COR_LNK1_BMU_DIS = 4,
-	P_CLK_PCI_LNK1_BIU_DIS = 2,
-	P_CLK_COR_LNK1_BIU_DIS = 1,
-	PCIE_OUR3_WOL_D3_COLD_SET = 406548,
-};
-
-enum pci_dev_reg_4 {
-	P_PEX_LTSSM_STAT_MSK = 4261412864,
-	P_PEX_LTSSM_L1_STAT = 52,
-	P_PEX_LTSSM_DET_STAT = 1,
-	P_TIMER_VALUE_MSK = 16711680,
-	P_FORCE_ASPM_REQUEST = 32768,
-	P_ASPM_GPHY_LINK_DOWN = 16384,
-	P_ASPM_INT_FIFO_EMPTY = 8192,
-	P_ASPM_CLKRUN_REQUEST = 4096,
-	P_ASPM_FORCE_CLKREQ_ENA = 16,
-	P_ASPM_CLKREQ_PAD_CTL = 8,
-	P_ASPM_A1_MODE_SELECT = 4,
-	P_CLK_GATE_PEX_UNIT_ENA = 2,
-	P_CLK_GATE_ROOT_COR_ENA = 1,
-	P_ASPM_CONTROL_MSK = 61440,
-};
-
-enum pci_dev_reg_5 {
-	P_CTL_DIV_CORE_CLK_ENA = 2147483648,
-	P_CTL_SRESET_VMAIN_AV = 1073741824,
-	P_CTL_BYPASS_VMAIN_AV = 536870912,
-	P_CTL_TIM_VMAIN_AV_MSK = 402653184,
-	P_REL_PCIE_RST_DE_ASS = 67108864,
-	P_REL_GPHY_REC_PACKET = 33554432,
-	P_REL_INT_FIFO_N_EMPTY = 16777216,
-	P_REL_MAIN_PWR_AVAIL = 8388608,
-	P_REL_CLKRUN_REQ_REL = 4194304,
-	P_REL_PCIE_RESET_ASS = 2097152,
-	P_REL_PME_ASSERTED = 1048576,
-	P_REL_PCIE_EXIT_L1_ST = 524288,
-	P_REL_LOADER_NOT_FIN = 262144,
-	P_REL_PCIE_RX_EX_IDLE = 131072,
-	P_REL_GPHY_LINK_UP = 65536,
-	P_GAT_PCIE_RST_ASSERTED = 1024,
-	P_GAT_GPHY_N_REC_PACKET = 512,
-	P_GAT_INT_FIFO_EMPTY = 256,
-	P_GAT_MAIN_PWR_N_AVAIL = 128,
-	P_GAT_CLKRUN_REQ_REL = 64,
-	P_GAT_PCIE_RESET_ASS = 32,
-	P_GAT_PME_DE_ASSERTED = 16,
-	P_GAT_PCIE_ENTER_L1_ST = 8,
-	P_GAT_LOADER_FINISHED = 4,
-	P_GAT_PCIE_RX_EL_IDLE = 2,
-	P_GAT_GPHY_LINK_DOWN = 1,
-	PCIE_OUR5_EVENT_CLK_D3_SET = 50987786,
-};
-
-enum {
-	PSM_CONFIG_REG4_TIMER_PHY_LINK_DETECT_MSK = 240,
-	PSM_CONFIG_REG4_TIMER_PHY_LINK_DETECT_BASE = 4,
-	PSM_CONFIG_REG4_DEBUG_TIMER = 2,
-	PSM_CONFIG_REG4_RST_PHY_LINK_DETECT = 1,
-};
-
-enum csr_regs {
-	B0_RAP = 0,
-	B0_CTST = 4,
-	B0_POWER_CTRL = 7,
-	B0_ISRC = 8,
-	B0_IMSK = 12,
-	B0_HWE_ISRC = 16,
-	B0_HWE_IMSK = 20,
-	B0_Y2_SP_ISRC2 = 28,
-	B0_Y2_SP_ISRC3 = 32,
-	B0_Y2_SP_EISR = 36,
-	B0_Y2_SP_LISR = 40,
-	B0_Y2_SP_ICR = 44,
-	B2_MAC_1 = 256,
-	B2_MAC_2 = 264,
-	B2_MAC_3 = 272,
-	B2_CONN_TYP = 280,
-	B2_PMD_TYP = 281,
-	B2_MAC_CFG = 282,
-	B2_CHIP_ID = 283,
-	B2_E_0 = 284,
-	B2_Y2_CLK_GATE = 285,
-	B2_Y2_HW_RES = 286,
-	B2_E_3 = 287,
-	B2_Y2_CLK_CTRL = 288,
-	B2_TI_INI = 304,
-	B2_TI_VAL = 308,
-	B2_TI_CTRL = 312,
-	B2_TI_TEST = 313,
-	B2_TST_CTRL1 = 344,
-	B2_TST_CTRL2 = 345,
-	B2_GP_IO = 348,
-	B2_I2C_CTRL = 352,
-	B2_I2C_DATA = 356,
-	B2_I2C_IRQ = 360,
-	B2_I2C_SW = 364,
-	Y2_PEX_PHY_DATA = 368,
-	Y2_PEX_PHY_ADDR = 370,
-	B3_RAM_ADDR = 384,
-	B3_RAM_DATA_LO = 388,
-	B3_RAM_DATA_HI = 392,
-	B3_RI_WTO_R1 = 400,
-	B3_RI_WTO_XA1 = 401,
-	B3_RI_WTO_XS1 = 402,
-	B3_RI_RTO_R1 = 403,
-	B3_RI_RTO_XA1 = 404,
-	B3_RI_RTO_XS1 = 405,
-	B3_RI_WTO_R2 = 406,
-	B3_RI_WTO_XA2 = 407,
-	B3_RI_WTO_XS2 = 408,
-	B3_RI_RTO_R2 = 409,
-	B3_RI_RTO_XA2 = 410,
-	B3_RI_RTO_XS2 = 411,
-	B3_RI_TO_VAL = 412,
-	B3_RI_CTRL = 416,
-	B3_RI_TEST = 418,
-	B3_MA_TOINI_RX1 = 432,
-	B3_MA_TOINI_RX2 = 433,
-	B3_MA_TOINI_TX1 = 434,
-	B3_MA_TOINI_TX2 = 435,
-	B3_MA_TOVAL_RX1 = 436,
-	B3_MA_TOVAL_RX2 = 437,
-	B3_MA_TOVAL_TX1 = 438,
-	B3_MA_TOVAL_TX2 = 439,
-	B3_MA_TO_CTRL = 440,
-	B3_MA_TO_TEST = 442,
-	B3_MA_RCINI_RX1 = 448,
-	B3_MA_RCINI_RX2 = 449,
-	B3_MA_RCINI_TX1 = 450,
-	B3_MA_RCINI_TX2 = 451,
-	B3_MA_RCVAL_RX1 = 452,
-	B3_MA_RCVAL_RX2 = 453,
-	B3_MA_RCVAL_TX1 = 454,
-	B3_MA_RCVAL_TX2 = 455,
-	B3_MA_RC_CTRL = 456,
-	B3_MA_RC_TEST = 458,
-	B3_PA_TOINI_RX1 = 464,
-	B3_PA_TOINI_RX2 = 468,
-	B3_PA_TOINI_TX1 = 472,
-	B3_PA_TOINI_TX2 = 476,
-	B3_PA_TOVAL_RX1 = 480,
-	B3_PA_TOVAL_RX2 = 484,
-	B3_PA_TOVAL_TX1 = 488,
-	B3_PA_TOVAL_TX2 = 492,
-	B3_PA_CTRL = 496,
-	B3_PA_TEST = 498,
-	Y2_CFG_SPC = 7168,
-	Y2_CFG_AER = 7424,
-};
-
-enum {
-	Y2_VMAIN_AVAIL = 131072,
-	Y2_VAUX_AVAIL = 65536,
-	Y2_HW_WOL_ON = 32768,
-	Y2_HW_WOL_OFF = 16384,
-	Y2_ASF_ENABLE = 8192,
-	Y2_ASF_DISABLE = 4096,
-	Y2_CLK_RUN_ENA = 2048,
-	Y2_CLK_RUN_DIS = 1024,
-	Y2_LED_STAT_ON = 512,
-	Y2_LED_STAT_OFF = 256,
-	CS_ST_SW_IRQ = 128,
-	CS_CL_SW_IRQ = 64,
-	CS_STOP_DONE = 32,
-	CS_STOP_MAST = 16,
-	CS_MRST_CLR = 8,
-	CS_MRST_SET = 4,
-	CS_RST_CLR = 2,
-	CS_RST_SET = 1,
-};
-
-enum {
-	PC_VAUX_ENA = 128,
-	PC_VAUX_DIS = 64,
-	PC_VCC_ENA = 32,
-	PC_VCC_DIS = 16,
-	PC_VAUX_ON = 8,
-	PC_VAUX_OFF = 4,
-	PC_VCC_ON = 2,
-	PC_VCC_OFF = 1,
-};
-
-enum {
-	Y2_IS_HW_ERR = 2147483648,
-	Y2_IS_STAT_BMU = 1073741824,
-	Y2_IS_ASF = 536870912,
-	Y2_IS_CPU_TO = 268435456,
-	Y2_IS_POLL_CHK = 134217728,
-	Y2_IS_TWSI_RDY = 67108864,
-	Y2_IS_IRQ_SW = 33554432,
-	Y2_IS_TIMINT = 16777216,
-	Y2_IS_IRQ_PHY2 = 4096,
-	Y2_IS_IRQ_MAC2 = 2048,
-	Y2_IS_CHK_RX2 = 1024,
-	Y2_IS_CHK_TXS2 = 512,
-	Y2_IS_CHK_TXA2 = 256,
-	Y2_IS_PSM_ACK = 128,
-	Y2_IS_PTP_TIST = 64,
-	Y2_IS_PHY_QLNK = 32,
-	Y2_IS_IRQ_PHY1 = 16,
-	Y2_IS_IRQ_MAC1 = 8,
-	Y2_IS_CHK_RX1 = 4,
-	Y2_IS_CHK_TXS1 = 2,
-	Y2_IS_CHK_TXA1 = 1,
-	Y2_IS_BASE = 3221225472,
-	Y2_IS_PORT_1 = 29,
-	Y2_IS_PORT_2 = 7424,
-	Y2_IS_ERROR = 2147486989,
-};
-
-enum {
-	Y2_IS_TIST_OV = 536870912,
-	Y2_IS_SENSOR = 268435456,
-	Y2_IS_MST_ERR = 134217728,
-	Y2_IS_IRQ_STAT = 67108864,
-	Y2_IS_PCI_EXP = 33554432,
-	Y2_IS_PCI_NEXP = 16777216,
-	Y2_IS_PAR_RD2 = 8192,
-	Y2_IS_PAR_WR2 = 4096,
-	Y2_IS_PAR_MAC2 = 2048,
-	Y2_IS_PAR_RX2 = 1024,
-	Y2_IS_TCP_TXS2 = 512,
-	Y2_IS_TCP_TXA2 = 256,
-	Y2_IS_PAR_RD1 = 32,
-	Y2_IS_PAR_WR1 = 16,
-	Y2_IS_PAR_MAC1 = 8,
-	Y2_IS_PAR_RX1 = 4,
-	Y2_IS_TCP_TXS1 = 2,
-	Y2_IS_TCP_TXA1 = 1,
-	Y2_HWE_L1_MASK = 63,
-	Y2_HWE_L2_MASK = 16128,
-	Y2_HWE_ALL_MASK = 738213695,
-};
-
-enum {
-	DPT_START = 2,
-	DPT_STOP = 1,
-};
-
-enum {
-	TST_FRC_DPERR_MR = 128,
-	TST_FRC_DPERR_MW = 64,
-	TST_FRC_DPERR_TR = 32,
-	TST_FRC_DPERR_TW = 16,
-	TST_FRC_APERR_M = 8,
-	TST_FRC_APERR_T = 4,
-	TST_CFG_WRITE_ON = 2,
-	TST_CFG_WRITE_OFF = 1,
-};
-
-enum {
-	GLB_GPIO_CLK_DEB_ENA = 2147483648,
-	GLB_GPIO_CLK_DBG_MSK = 1006632960,
-	GLB_GPIO_INT_RST_D3_DIS = 32768,
-	GLB_GPIO_LED_PAD_SPEED_UP = 16384,
-	GLB_GPIO_STAT_RACE_DIS = 8192,
-	GLB_GPIO_TEST_SEL_MSK = 6144,
-	GLB_GPIO_TEST_SEL_BASE = 2048,
-	GLB_GPIO_RAND_ENA = 1024,
-	GLB_GPIO_RAND_BIT_1 = 512,
-};
-
-enum {
-	CFG_CHIP_R_MSK = 240,
-	CFG_DIS_M2_CLK = 2,
-	CFG_SNG_MAC = 1,
-};
-
-enum {
-	CHIP_ID_YUKON_XL = 179,
-	CHIP_ID_YUKON_EC_U = 180,
-	CHIP_ID_YUKON_EX = 181,
-	CHIP_ID_YUKON_EC = 182,
-	CHIP_ID_YUKON_FE = 183,
-	CHIP_ID_YUKON_FE_P = 184,
-	CHIP_ID_YUKON_SUPR = 185,
-	CHIP_ID_YUKON_UL_2 = 186,
-	CHIP_ID_YUKON_OPT = 188,
-	CHIP_ID_YUKON_PRM = 189,
-	CHIP_ID_YUKON_OP_2 = 190,
-};
-
-enum yukon_xl_rev {
-	CHIP_REV_YU_XL_A0 = 0,
-	CHIP_REV_YU_XL_A1 = 1,
-	CHIP_REV_YU_XL_A2 = 2,
-	CHIP_REV_YU_XL_A3 = 3,
-};
-
-enum yukon_ec_rev {
-	CHIP_REV_YU_EC_A1 = 0,
-	CHIP_REV_YU_EC_A2 = 1,
-	CHIP_REV_YU_EC_A3 = 2,
-};
-
-enum yukon_ec_u_rev {
-	CHIP_REV_YU_EC_U_A0 = 1,
-	CHIP_REV_YU_EC_U_A1 = 2,
-	CHIP_REV_YU_EC_U_B0 = 3,
-	CHIP_REV_YU_EC_U_B1 = 5,
-};
-
-enum yukon_fe_p_rev {
-	CHIP_REV_YU_FE2_A0 = 0,
-};
-
-enum yukon_ex_rev {
-	CHIP_REV_YU_EX_A0 = 1,
-	CHIP_REV_YU_EX_B0 = 2,
-};
-
-enum yukon_supr_rev {
-	CHIP_REV_YU_SU_A0 = 0,
-	CHIP_REV_YU_SU_B0 = 1,
-	CHIP_REV_YU_SU_B1 = 3,
-};
-
-enum yukon_prm_rev {
-	CHIP_REV_YU_PRM_Z1 = 1,
-	CHIP_REV_YU_PRM_A0 = 2,
-};
-
-enum {
-	Y2_STATUS_LNK2_INAC = 128,
-	Y2_CLK_GAT_LNK2_DIS = 64,
-	Y2_COR_CLK_LNK2_DIS = 32,
-	Y2_PCI_CLK_LNK2_DIS = 16,
-	Y2_STATUS_LNK1_INAC = 8,
-	Y2_CLK_GAT_LNK1_DIS = 4,
-	Y2_COR_CLK_LNK1_DIS = 2,
-	Y2_PCI_CLK_LNK1_DIS = 1,
-};
-
-enum {
-	CFG_LED_MODE_MSK = 28,
-	CFG_LINK_2_AVAIL = 2,
-	CFG_LINK_1_AVAIL = 1,
-};
-
-enum {
-	Y2_CLK_DIV_VAL_MSK = 16711680,
-	Y2_CLK_DIV_VAL2_MSK = 14680064,
-	Y2_CLK_SELECT2_MSK = 2031616,
-	Y2_CLK_DIV_ENA = 2,
-	Y2_CLK_DIV_DIS = 1,
-};
-
-enum {
-	TIM_START = 4,
-	TIM_STOP = 2,
-	TIM_CLR_IRQ = 1,
-};
-
-enum {
-	PEX_RD_ACCESS = 2147483648,
-	PEX_DB_ACCESS = 1073741824,
-};
-
-enum {
-	RI_CLR_RD_PERR = 512,
-	RI_CLR_WR_PERR = 256,
-	RI_RST_CLR = 2,
-	RI_RST_SET = 1,
-};
-
-enum {
-	TXA_ENA_FSYNC = 128,
-	TXA_DIS_FSYNC = 64,
-	TXA_ENA_ALLOC = 32,
-	TXA_DIS_ALLOC = 16,
-	TXA_START_RC = 8,
-	TXA_STOP_RC = 4,
-	TXA_ENA_ARB = 2,
-	TXA_DIS_ARB = 1,
-};
-
-enum {
-	TXA_ITI_INI = 512,
-	TXA_ITI_VAL = 516,
-	TXA_LIM_INI = 520,
-	TXA_LIM_VAL = 524,
-	TXA_CTRL = 528,
-	TXA_TEST = 529,
-	TXA_STAT = 530,
-	RSS_KEY = 544,
-	RSS_CFG = 584,
-};
-
-enum {
-	HASH_TCP_IPV6_EX_CTRL = 32,
-	HASH_IPV6_EX_CTRL = 16,
-	HASH_TCP_IPV6_CTRL = 8,
-	HASH_IPV6_CTRL = 4,
-	HASH_TCP_IPV4_CTRL = 2,
-	HASH_IPV4_CTRL = 1,
-	HASH_ALL = 63,
-};
-
-enum {
-	B6_EXT_REG = 768,
-	B7_CFG_SPC = 896,
-	B8_RQ1_REGS = 1024,
-	B8_RQ2_REGS = 1152,
-	B8_TS1_REGS = 1536,
-	B8_TA1_REGS = 1664,
-	B8_TS2_REGS = 1792,
-	B8_TA2_REGS = 1920,
-	B16_RAM_REGS = 2048,
-};
-
-enum {
-	B8_Q_REGS = 1024,
-	Q_D = 0,
-	Q_VLAN = 32,
-	Q_DONE = 36,
-	Q_AC_L = 40,
-	Q_AC_H = 44,
-	Q_BC = 48,
-	Q_CSR = 52,
-	Q_TEST = 56,
-	Q_WM = 64,
-	Q_AL = 66,
-	Q_RSP = 68,
-	Q_RSL = 70,
-	Q_RP = 72,
-	Q_RL = 74,
-	Q_WP = 76,
-	Q_WSP = 77,
-	Q_WL = 78,
-	Q_WSL = 79,
-};
-
-enum {
-	F_TX_CHK_AUTO_OFF = 2147483648,
-	F_TX_CHK_AUTO_ON = 1073741824,
-	F_M_RX_RAM_DIS = 16777216,
-};
-
-enum {
-	Y2_B8_PREF_REGS = 1104,
-	PREF_UNIT_CTRL = 0,
-	PREF_UNIT_LAST_IDX = 4,
-	PREF_UNIT_ADDR_LO = 8,
-	PREF_UNIT_ADDR_HI = 12,
-	PREF_UNIT_GET_IDX = 16,
-	PREF_UNIT_PUT_IDX = 20,
-	PREF_UNIT_FIFO_WP = 32,
-	PREF_UNIT_FIFO_RP = 36,
-	PREF_UNIT_FIFO_WM = 40,
-	PREF_UNIT_FIFO_LEV = 44,
-	PREF_UNIT_MASK_IDX = 4095,
-};
-
-enum {
-	RB_START = 0,
-	RB_END = 4,
-	RB_WP = 8,
-	RB_RP = 12,
-	RB_RX_UTPP = 16,
-	RB_RX_LTPP = 20,
-	RB_RX_UTHP = 24,
-	RB_RX_LTHP = 28,
-	RB_PC = 32,
-	RB_LEV = 36,
-	RB_CTRL = 40,
-	RB_TST1 = 41,
-	RB_TST2 = 42,
-};
-
-enum {
-	Q_R1 = 0,
-	Q_R2 = 128,
-	Q_XS1 = 512,
-	Q_XA1 = 640,
-	Q_XS2 = 768,
-	Q_XA2 = 896,
-};
-
-enum {
-	PHY_ADDR_MARV = 0,
-};
-
-enum {
-	LNK_SYNC_INI = 3120,
-	LNK_SYNC_VAL = 3124,
-	LNK_SYNC_CTRL = 3128,
-	LNK_SYNC_TST = 3129,
-	LNK_LED_REG = 3132,
-	RX_GMF_EA = 3136,
-	RX_GMF_AF_THR = 3140,
-	RX_GMF_CTRL_T = 3144,
-	RX_GMF_FL_MSK = 3148,
-	RX_GMF_FL_THR = 3152,
-	RX_GMF_FL_CTRL = 3154,
-	RX_GMF_TR_THR = 3156,
-	RX_GMF_UP_THR = 3160,
-	RX_GMF_LP_THR = 3162,
-	RX_GMF_VLAN = 3164,
-	RX_GMF_WP = 3168,
-	RX_GMF_WLEV = 3176,
-	RX_GMF_RP = 3184,
-	RX_GMF_RLEV = 3192,
-};
-
-enum {
-	BMU_IDLE = 2147483648,
-	BMU_RX_TCP_PKT = 1073741824,
-	BMU_RX_IP_PKT = 536870912,
-	BMU_ENA_RX_RSS_HASH = 32768,
-	BMU_DIS_RX_RSS_HASH = 16384,
-	BMU_ENA_RX_CHKSUM = 8192,
-	BMU_DIS_RX_CHKSUM = 4096,
-	BMU_CLR_IRQ_PAR = 2048,
-	BMU_CLR_IRQ_TCP = 2048,
-	BMU_CLR_IRQ_CHK = 1024,
-	BMU_STOP = 512,
-	BMU_START = 256,
-	BMU_FIFO_OP_ON = 128,
-	BMU_FIFO_OP_OFF = 64,
-	BMU_FIFO_ENA = 32,
-	BMU_FIFO_RST = 16,
-	BMU_OP_ON = 8,
-	BMU_OP_OFF = 4,
-	BMU_RST_CLR = 2,
-	BMU_RST_SET = 1,
-	BMU_CLR_RESET = 22,
-	BMU_OPER_INIT = 3368,
-	BMU_WM_DEFAULT = 1536,
-	BMU_WM_PEX = 128,
-};
-
-enum {
-	TBMU_TEST_BMU_TX_CHK_AUTO_OFF = 2147483648,
-	TBMU_TEST_BMU_TX_CHK_AUTO_ON = 1073741824,
-	TBMU_TEST_HOME_ADD_PAD_FIX1_EN = 536870912,
-	TBMU_TEST_HOME_ADD_PAD_FIX1_DIS = 268435456,
-	TBMU_TEST_ROUTING_ADD_FIX_EN = 134217728,
-	TBMU_TEST_ROUTING_ADD_FIX_DIS = 67108864,
-	TBMU_TEST_HOME_ADD_FIX_EN = 33554432,
-	TBMU_TEST_HOME_ADD_FIX_DIS = 16777216,
-	TBMU_TEST_TEST_RSPTR_ON = 4194304,
-	TBMU_TEST_TEST_RSPTR_OFF = 2097152,
-	TBMU_TEST_TESTSTEP_RSPTR = 1048576,
-	TBMU_TEST_TEST_RPTR_ON = 262144,
-	TBMU_TEST_TEST_RPTR_OFF = 131072,
-	TBMU_TEST_TESTSTEP_RPTR = 65536,
-	TBMU_TEST_TEST_WSPTR_ON = 16384,
-	TBMU_TEST_TEST_WSPTR_OFF = 8192,
-	TBMU_TEST_TESTSTEP_WSPTR = 4096,
-	TBMU_TEST_TEST_WPTR_ON = 1024,
-	TBMU_TEST_TEST_WPTR_OFF = 512,
-	TBMU_TEST_TESTSTEP_WPTR = 256,
-	TBMU_TEST_TEST_REQ_NB_ON = 64,
-	TBMU_TEST_TEST_REQ_NB_OFF = 32,
-	TBMU_TEST_TESTSTEP_REQ_NB = 16,
-	TBMU_TEST_TEST_DONE_IDX_ON = 4,
-	TBMU_TEST_TEST_DONE_IDX_OFF = 2,
-	TBMU_TEST_TESTSTEP_DONE_IDX = 1,
-};
-
-enum {
-	PREF_UNIT_OP_ON = 8,
-	PREF_UNIT_OP_OFF = 4,
-	PREF_UNIT_RST_CLR = 2,
-	PREF_UNIT_RST_SET = 1,
-};
-
-enum {
-	RB_ENA_STFWD = 32,
-	RB_DIS_STFWD = 16,
-	RB_ENA_OP_MD = 8,
-	RB_DIS_OP_MD = 4,
-	RB_RST_CLR = 2,
-	RB_RST_SET = 1,
-};
-
-enum {
-	TX_GMF_EA = 3392,
-	TX_GMF_AE_THR = 3396,
-	TX_GMF_CTRL_T = 3400,
-	TX_GMF_WP = 3424,
-	TX_GMF_WSP = 3428,
-	TX_GMF_WLEV = 3432,
-	TX_GMF_RP = 3440,
-	TX_GMF_RSTP = 3444,
-	TX_GMF_RLEV = 3448,
-	ECU_AE_THR = 112,
-	ECU_TXFF_LEV = 416,
-	ECU_JUMBO_WM = 128,
-};
-
-enum {
-	B28_DPT_INI = 3584,
-	B28_DPT_VAL = 3588,
-	B28_DPT_CTRL = 3592,
-	B28_DPT_TST = 3594,
-};
-
-enum {
-	GMAC_TI_ST_VAL = 3604,
-	GMAC_TI_ST_CTRL = 3608,
-	GMAC_TI_ST_TST = 3610,
-};
-
-enum {
-	CPU_WDOG = 3656,
-	CPU_CNTR = 3660,
-	CPU_TIM = 3664,
-	CPU_AHB_ADDR = 3668,
-	CPU_AHB_WDATA = 3672,
-	CPU_AHB_RDATA = 3676,
-	HCU_MAP_BASE = 3680,
-	CPU_AHB_CTRL = 3684,
-	HCU_CCSR = 3688,
-	HCU_HCSR = 3692,
-};
-
-enum {
-	B28_Y2_SMB_CONFIG = 3648,
-	B28_Y2_SMB_CSD_REG = 3652,
-	B28_Y2_ASF_IRQ_V_BASE = 3680,
-	B28_Y2_ASF_STAT_CMD = 3688,
-	B28_Y2_ASF_HOST_COM = 3692,
-	B28_Y2_DATA_REG_1 = 3696,
-	B28_Y2_DATA_REG_2 = 3700,
-	B28_Y2_DATA_REG_3 = 3704,
-	B28_Y2_DATA_REG_4 = 3708,
-};
-
-enum {
-	STAT_CTRL = 3712,
-	STAT_LAST_IDX = 3716,
-	STAT_LIST_ADDR_LO = 3720,
-	STAT_LIST_ADDR_HI = 3724,
-	STAT_TXA1_RIDX = 3728,
-	STAT_TXS1_RIDX = 3730,
-	STAT_TXA2_RIDX = 3732,
-	STAT_TXS2_RIDX = 3734,
-	STAT_TX_IDX_TH = 3736,
-	STAT_PUT_IDX = 3740,
-	STAT_FIFO_WP = 3744,
-	STAT_FIFO_RP = 3748,
-	STAT_FIFO_RSP = 3750,
-	STAT_FIFO_LEVEL = 3752,
-	STAT_FIFO_SHLVL = 3754,
-	STAT_FIFO_WM = 3756,
-	STAT_FIFO_ISR_WM = 3757,
-	STAT_LEV_TIMER_INI = 3760,
-	STAT_LEV_TIMER_CNT = 3764,
-	STAT_LEV_TIMER_CTRL = 3768,
-	STAT_LEV_TIMER_TEST = 3769,
-	STAT_TX_TIMER_INI = 3776,
-	STAT_TX_TIMER_CNT = 3780,
-	STAT_TX_TIMER_CTRL = 3784,
-	STAT_TX_TIMER_TEST = 3785,
-	STAT_ISR_TIMER_INI = 3792,
-	STAT_ISR_TIMER_CNT = 3796,
-	STAT_ISR_TIMER_CTRL = 3800,
-	STAT_ISR_TIMER_TEST = 3801,
-};
-
-enum {
-	LINKLED_OFF = 1,
-	LINKLED_ON = 2,
-	LINKLED_LINKSYNC_OFF = 4,
-	LINKLED_LINKSYNC_ON = 8,
-	LINKLED_BLINK_OFF = 16,
-	LINKLED_BLINK_ON = 32,
-};
-
-enum {
-	GMAC_CTRL = 3840,
-	GPHY_CTRL = 3844,
-	GMAC_IRQ_SRC = 3848,
-	GMAC_IRQ_MSK = 3852,
-	GMAC_LINK_CTRL = 3856,
-	WOL_CTRL_STAT = 3872,
-	WOL_MATCH_CTL = 3874,
-	WOL_MATCH_RES = 3875,
-	WOL_MAC_ADDR = 3876,
-	WOL_PATT_RPTR = 3884,
-	WOL_PATT_LEN_LO = 3888,
-	WOL_PATT_LEN_HI = 3892,
-	WOL_PATT_CNT_0 = 3896,
-	WOL_PATT_CNT_4 = 3900,
-};
-
-enum {
-	BASE_GMAC_1 = 10240,
-	BASE_GMAC_2 = 14336,
-};
-
-enum {
-	PHY_MARV_CTRL = 0,
-	PHY_MARV_STAT = 1,
-	PHY_MARV_ID0 = 2,
-	PHY_MARV_ID1 = 3,
-	PHY_MARV_AUNE_ADV = 4,
-	PHY_MARV_AUNE_LP = 5,
-	PHY_MARV_AUNE_EXP = 6,
-	PHY_MARV_NEPG = 7,
-	PHY_MARV_NEPG_LP = 8,
-	PHY_MARV_1000T_CTRL = 9,
-	PHY_MARV_1000T_STAT = 10,
-	PHY_MARV_EXT_STAT = 15,
-	PHY_MARV_PHY_CTRL = 16,
-	PHY_MARV_PHY_STAT = 17,
-	PHY_MARV_INT_MASK = 18,
-	PHY_MARV_INT_STAT = 19,
-	PHY_MARV_EXT_CTRL = 20,
-	PHY_MARV_RXE_CNT = 21,
-	PHY_MARV_EXT_ADR = 22,
-	PHY_MARV_PORT_IRQ = 23,
-	PHY_MARV_LED_CTRL = 24,
-	PHY_MARV_LED_OVER = 25,
-	PHY_MARV_EXT_CTRL_2 = 26,
-	PHY_MARV_EXT_P_STAT = 27,
-	PHY_MARV_CABLE_DIAG = 28,
-	PHY_MARV_PAGE_ADDR = 29,
-	PHY_MARV_PAGE_DATA = 30,
-	PHY_MARV_FE_LED_PAR = 22,
-	PHY_MARV_FE_LED_SER = 23,
-	PHY_MARV_FE_VCT_TX = 26,
-	PHY_MARV_FE_VCT_RX = 27,
-	PHY_MARV_FE_SPEC_2 = 28,
-};
-
-enum {
-	PHY_CT_RESET = 32768,
-	PHY_CT_LOOP = 16384,
-	PHY_CT_SPS_LSB = 8192,
-	PHY_CT_ANE = 4096,
-	PHY_CT_PDOWN = 2048,
-	PHY_CT_ISOL = 1024,
-	PHY_CT_RE_CFG = 512,
-	PHY_CT_DUP_MD = 256,
-	PHY_CT_COL_TST = 128,
-	PHY_CT_SPS_MSB = 64,
-};
-
-enum {
-	PHY_CT_SP1000 = 64,
-	PHY_CT_SP100 = 8192,
-	PHY_CT_SP10 = 0,
-};
-
-enum {
-	PHY_MARV_ID0_VAL = 321,
-	PHY_BCOM_ID1_A1 = 24641,
-	PHY_BCOM_ID1_B2 = 24643,
-	PHY_BCOM_ID1_C0 = 24644,
-	PHY_BCOM_ID1_C5 = 24647,
-	PHY_MARV_ID1_B0 = 3107,
-	PHY_MARV_ID1_B2 = 3109,
-	PHY_MARV_ID1_C2 = 3266,
-	PHY_MARV_ID1_Y2 = 3217,
-	PHY_MARV_ID1_FE = 3203,
-	PHY_MARV_ID1_ECU = 3248,
-};
-
-enum {
-	PHY_AN_NXT_PG = 32768,
-	PHY_AN_ACK = 16384,
-	PHY_AN_RF = 8192,
-	PHY_AN_PAUSE_ASYM = 2048,
-	PHY_AN_PAUSE_CAP = 1024,
-	PHY_AN_100BASE4 = 512,
-	PHY_AN_100FULL = 256,
-	PHY_AN_100HALF = 128,
-	PHY_AN_10FULL = 64,
-	PHY_AN_10HALF = 32,
-	PHY_AN_CSMA = 1,
-	PHY_AN_SEL = 31,
-	PHY_AN_FULL = 321,
-	PHY_AN_ALL = 480,
-};
-
-enum {
-	PHY_M_AN_NXT_PG = 32768,
-	PHY_M_AN_ACK = 16384,
-	PHY_M_AN_RF = 8192,
-	PHY_M_AN_ASP = 2048,
-	PHY_M_AN_PC = 1024,
-	PHY_M_AN_100_T4 = 512,
-	PHY_M_AN_100_FD = 256,
-	PHY_M_AN_100_HD = 128,
-	PHY_M_AN_10_FD = 64,
-	PHY_M_AN_10_HD = 32,
-	PHY_M_AN_SEL_MSK = 496,
-};
-
-enum {
-	PHY_M_AN_ASP_X = 256,
-	PHY_M_AN_PC_X = 128,
-	PHY_M_AN_1000X_AHD = 64,
-	PHY_M_AN_1000X_AFD = 32,
-};
-
-enum {
-	PHY_M_P_NO_PAUSE_X = 0,
-	PHY_M_P_SYM_MD_X = 128,
-	PHY_M_P_ASYM_MD_X = 256,
-	PHY_M_P_BOTH_MD_X = 384,
-};
-
-enum {
-	PHY_M_1000C_TEST = 57344,
-	PHY_M_1000C_MSE = 4096,
-	PHY_M_1000C_MSC = 2048,
-	PHY_M_1000C_MPD = 1024,
-	PHY_M_1000C_AFD = 512,
-	PHY_M_1000C_AHD = 256,
-};
-
-enum {
-	PHY_M_PC_TX_FFD_MSK = 49152,
-	PHY_M_PC_RX_FFD_MSK = 12288,
-	PHY_M_PC_ASS_CRS_TX = 2048,
-	PHY_M_PC_FL_GOOD = 1024,
-	PHY_M_PC_EN_DET_MSK = 768,
-	PHY_M_PC_ENA_EXT_D = 128,
-	PHY_M_PC_MDIX_MSK = 96,
-	PHY_M_PC_DIS_125CLK = 16,
-	PHY_M_PC_MAC_POW_UP = 8,
-	PHY_M_PC_SQE_T_ENA = 4,
-	PHY_M_PC_POL_R_DIS = 2,
-	PHY_M_PC_DIS_JABBER = 1,
-};
-
-enum {
-	PHY_M_PC_MAN_MDI = 0,
-	PHY_M_PC_MAN_MDIX = 1,
-	PHY_M_PC_ENA_AUTO = 3,
-};
-
-enum {
-	PHY_M_PC_COP_TX_DIS = 8,
-	PHY_M_PC_POW_D_ENA = 4,
-};
-
-enum {
-	PHY_M_PC_ENA_DTE_DT = 32768,
-	PHY_M_PC_ENA_ENE_DT = 16384,
-	PHY_M_PC_DIS_NLP_CK = 8192,
-	PHY_M_PC_ENA_LIP_NP = 4096,
-	PHY_M_PC_DIS_NLP_GN = 2048,
-	PHY_M_PC_DIS_SCRAMB = 512,
-	PHY_M_PC_DIS_FEFI = 256,
-	PHY_M_PC_SH_TP_SEL = 64,
-	PHY_M_PC_RX_FD_MSK = 12,
-};
-
-enum {
-	PHY_M_PS_SPEED_MSK = 49152,
-	PHY_M_PS_SPEED_1000 = 32768,
-	PHY_M_PS_SPEED_100 = 16384,
-	PHY_M_PS_SPEED_10 = 0,
-	PHY_M_PS_FULL_DUP = 8192,
-	PHY_M_PS_PAGE_REC = 4096,
-	PHY_M_PS_SPDUP_RES = 2048,
-	PHY_M_PS_LINK_UP = 1024,
-	PHY_M_PS_CABLE_MSK = 896,
-	PHY_M_PS_MDI_X_STAT = 64,
-	PHY_M_PS_DOWNS_STAT = 32,
-	PHY_M_PS_ENDET_STAT = 16,
-	PHY_M_PS_TX_P_EN = 8,
-	PHY_M_PS_RX_P_EN = 4,
-	PHY_M_PS_POL_REV = 2,
-	PHY_M_PS_JABBER = 1,
-};
-
-enum {
-	PHY_M_IS_AN_ERROR = 32768,
-	PHY_M_IS_LSP_CHANGE = 16384,
-	PHY_M_IS_DUP_CHANGE = 8192,
-	PHY_M_IS_AN_PR = 4096,
-	PHY_M_IS_AN_COMPL = 2048,
-	PHY_M_IS_LST_CHANGE = 1024,
-	PHY_M_IS_SYMB_ERROR = 512,
-	PHY_M_IS_FALSE_CARR = 256,
-	PHY_M_IS_FIFO_ERROR = 128,
-	PHY_M_IS_MDI_CHANGE = 64,
-	PHY_M_IS_DOWNSH_DET = 32,
-	PHY_M_IS_END_CHANGE = 16,
-	PHY_M_IS_DTE_CHANGE = 4,
-	PHY_M_IS_POL_CHANGE = 2,
-	PHY_M_IS_JABBER = 1,
-	PHY_M_DEF_MSK = 25600,
-	PHY_M_AN_MSK = 34816,
-};
-
-enum {
-	PHY_M_EC_ENA_BC_EXT = 32768,
-	PHY_M_EC_ENA_LIN_LB = 16384,
-	PHY_M_EC_DIS_LINK_P = 4096,
-	PHY_M_EC_M_DSC_MSK = 3072,
-	PHY_M_EC_S_DSC_MSK = 768,
-	PHY_M_EC_M_DSC_MSK2 = 3584,
-	PHY_M_EC_DOWN_S_ENA = 256,
-	PHY_M_EC_RX_TIM_CT = 128,
-	PHY_M_EC_MAC_S_MSK = 112,
-	PHY_M_EC_FIB_AN_ENA = 8,
-	PHY_M_EC_DTE_D_ENA = 4,
-	PHY_M_EC_TX_TIM_CT = 2,
-	PHY_M_EC_TRANS_DIS = 1,
-	PHY_M_10B_TE_ENABLE = 128,
-};
-
-enum {
-	PHY_M_PC_DIS_LINK_Pa = 32768,
-	PHY_M_PC_DSC_MSK = 28672,
-	PHY_M_PC_DOWN_S_ENA = 2048,
-};
-
-enum {
-	MAC_TX_CLK_0_MHZ = 2,
-	MAC_TX_CLK_2_5_MHZ = 6,
-	MAC_TX_CLK_25_MHZ = 7,
-};
-
-enum {
-	PHY_M_LEDC_DIS_LED = 32768,
-	PHY_M_LEDC_PULS_MSK = 28672,
-	PHY_M_LEDC_F_INT = 2048,
-	PHY_M_LEDC_BL_R_MSK = 1792,
-	PHY_M_LEDC_DP_C_LSB = 128,
-	PHY_M_LEDC_TX_C_LSB = 64,
-	PHY_M_LEDC_LK_C_MSK = 56,
-};
-
-enum {
-	PHY_M_LEDC_LINK_MSK = 24,
-	PHY_M_LEDC_DP_CTRL = 4,
-	PHY_M_LEDC_DP_C_MSB = 4,
-	PHY_M_LEDC_RX_CTRL = 2,
-	PHY_M_LEDC_TX_CTRL = 1,
-	PHY_M_LEDC_TX_C_MSB = 1,
-};
-
-enum {
-	PHY_M_POLC_LS1M_MSK = 61440,
-	PHY_M_POLC_IS0M_MSK = 3840,
-	PHY_M_POLC_LOS_MSK = 192,
-	PHY_M_POLC_INIT_MSK = 48,
-	PHY_M_POLC_STA1_MSK = 12,
-	PHY_M_POLC_STA0_MSK = 3,
-};
-
-enum {
-	PULS_NO_STR = 0,
-	PULS_21MS = 1,
-	PULS_42MS = 2,
-	PULS_84MS = 3,
-	PULS_170MS = 4,
-	PULS_340MS = 5,
-	PULS_670MS = 6,
-	PULS_1300MS = 7,
-};
-
-enum {
-	BLINK_42MS = 0,
-	BLINK_84MS = 1,
-	BLINK_170MS = 2,
-	BLINK_340MS = 3,
-	BLINK_670MS = 4,
-};
-
-enum led_mode {
-	MO_LED_NORM = 0,
-	MO_LED_BLINK = 1,
-	MO_LED_OFF = 2,
-	MO_LED_ON = 3,
-};
-
-enum {
-	PHY_M_FC_AUTO_SEL = 32768,
-	PHY_M_FC_AN_REG_ACC = 16384,
-	PHY_M_FC_RESOLUTION = 8192,
-	PHY_M_SER_IF_AN_BP = 4096,
-	PHY_M_SER_IF_BP_ST = 2048,
-	PHY_M_IRQ_POLARITY = 1024,
-	PHY_M_DIS_AUT_MED = 512,
-	PHY_M_UNDOC1 = 128,
-	PHY_M_DTE_POW_STAT = 16,
-	PHY_M_MODE_MASK = 15,
-};
-
-enum {
-	PHY_M_FELP_LED2_MSK = 3840,
-	PHY_M_FELP_LED1_MSK = 240,
-	PHY_M_FELP_LED0_MSK = 15,
-};
-
-enum {
-	LED_PAR_CTRL_COLX = 0,
-	LED_PAR_CTRL_ERROR = 1,
-	LED_PAR_CTRL_DUPLEX = 2,
-	LED_PAR_CTRL_DP_COL = 3,
-	LED_PAR_CTRL_SPEED = 4,
-	LED_PAR_CTRL_LINK = 5,
-	LED_PAR_CTRL_TX = 6,
-	LED_PAR_CTRL_RX = 7,
-	LED_PAR_CTRL_ACT = 8,
-	LED_PAR_CTRL_LNK_RX = 9,
-	LED_PAR_CTRL_LNK_AC = 10,
-	LED_PAR_CTRL_ACT_BL = 11,
-	LED_PAR_CTRL_TX_BL = 12,
-	LED_PAR_CTRL_RX_BL = 13,
-	LED_PAR_CTRL_COL_BL = 14,
-	LED_PAR_CTRL_INACT = 15,
-};
-
-enum {
-	PHY_M_FESC_DIS_WAIT = 4,
-	PHY_M_FESC_ENA_MCLK = 2,
-	PHY_M_FESC_SEL_CL_A = 1,
-};
-
-enum {
-	PHY_M_FIB_FORCE_LNK = 1024,
-	PHY_M_FIB_SIGD_POL = 512,
-	PHY_M_FIB_TX_DIS = 8,
-};
-
-enum {
-	PHY_M_MAC_MD_MSK = 896,
-	PHY_M_MAC_GMIF_PUP = 8,
-	PHY_M_MAC_MD_AUTO = 3,
-	PHY_M_MAC_MD_COPPER = 5,
-	PHY_M_MAC_MD_1000BX = 7,
-};
-
-enum {
-	PHY_M_LEDC_LOS_MSK = 61440,
-	PHY_M_LEDC_INIT_MSK = 3840,
-	PHY_M_LEDC_STA1_MSK = 240,
-	PHY_M_LEDC_STA0_MSK = 15,
-};
-
-enum {
-	GM_GP_STAT = 0,
-	GM_GP_CTRL = 4,
-	GM_TX_CTRL = 8,
-	GM_RX_CTRL = 12,
-	GM_TX_FLOW_CTRL = 16,
-	GM_TX_PARAM = 20,
-	GM_SERIAL_MODE = 24,
-	GM_SRC_ADDR_1L = 28,
-	GM_SRC_ADDR_1M = 32,
-	GM_SRC_ADDR_1H = 36,
-	GM_SRC_ADDR_2L = 40,
-	GM_SRC_ADDR_2M = 44,
-	GM_SRC_ADDR_2H = 48,
-	GM_MC_ADDR_H1 = 52,
-	GM_MC_ADDR_H2 = 56,
-	GM_MC_ADDR_H3 = 60,
-	GM_MC_ADDR_H4 = 64,
-	GM_TX_IRQ_SRC = 68,
-	GM_RX_IRQ_SRC = 72,
-	GM_TR_IRQ_SRC = 76,
-	GM_TX_IRQ_MSK = 80,
-	GM_RX_IRQ_MSK = 84,
-	GM_TR_IRQ_MSK = 88,
-	GM_SMI_CTRL = 128,
-	GM_SMI_DATA = 132,
-	GM_PHY_ADDR = 136,
-	GM_MIB_CNT_BASE = 256,
-	GM_MIB_CNT_END = 604,
-};
-
-enum {
-	GM_RXF_UC_OK = 256,
-	GM_RXF_BC_OK = 264,
-	GM_RXF_MPAUSE = 272,
-	GM_RXF_MC_OK = 280,
-	GM_RXF_FCS_ERR = 288,
-	GM_RXO_OK_LO = 304,
-	GM_RXO_OK_HI = 312,
-	GM_RXO_ERR_LO = 320,
-	GM_RXO_ERR_HI = 328,
-	GM_RXF_SHT = 336,
-	GM_RXE_FRAG = 344,
-	GM_RXF_64B = 352,
-	GM_RXF_127B = 360,
-	GM_RXF_255B = 368,
-	GM_RXF_511B = 376,
-	GM_RXF_1023B = 384,
-	GM_RXF_1518B = 392,
-	GM_RXF_MAX_SZ = 400,
-	GM_RXF_LNG_ERR = 408,
-	GM_RXF_JAB_PKT = 416,
-	GM_RXE_FIFO_OV = 432,
-	GM_TXF_UC_OK = 448,
-	GM_TXF_BC_OK = 456,
-	GM_TXF_MPAUSE = 464,
-	GM_TXF_MC_OK = 472,
-	GM_TXO_OK_LO = 480,
-	GM_TXO_OK_HI = 488,
-	GM_TXF_64B = 496,
-	GM_TXF_127B = 504,
-	GM_TXF_255B = 512,
-	GM_TXF_511B = 520,
-	GM_TXF_1023B = 528,
-	GM_TXF_1518B = 536,
-	GM_TXF_MAX_SZ = 544,
-	GM_TXF_COL = 560,
-	GM_TXF_LAT_COL = 568,
-	GM_TXF_ABO_COL = 576,
-	GM_TXF_MUL_COL = 584,
-	GM_TXF_SNG_COL = 592,
-	GM_TXE_FIFO_UR = 600,
-};
-
-enum {
-	GM_GPCR_PROM_ENA = 16384,
-	GM_GPCR_FC_TX_DIS = 8192,
-	GM_GPCR_TX_ENA = 4096,
-	GM_GPCR_RX_ENA = 2048,
-	GM_GPCR_BURST_ENA = 1024,
-	GM_GPCR_LOOP_ENA = 512,
-	GM_GPCR_PART_ENA = 256,
-	GM_GPCR_GIGS_ENA = 128,
-	GM_GPCR_FL_PASS = 64,
-	GM_GPCR_DUP_FULL = 32,
-	GM_GPCR_FC_RX_DIS = 16,
-	GM_GPCR_SPEED_100 = 8,
-	GM_GPCR_AU_DUP_DIS = 4,
-	GM_GPCR_AU_FCT_DIS = 2,
-	GM_GPCR_AU_SPD_DIS = 1,
-};
-
-enum {
-	GM_TXCR_FORCE_JAM = 32768,
-	GM_TXCR_CRC_DIS = 16384,
-	GM_TXCR_PAD_DIS = 8192,
-	GM_TXCR_COL_THR_MSK = 7168,
-};
-
-enum {
-	GM_RXCR_UCF_ENA = 32768,
-	GM_RXCR_MCF_ENA = 16384,
-	GM_RXCR_CRC_DIS = 8192,
-	GM_RXCR_PASS_FC = 4096,
-};
-
-enum {
-	GM_TXPA_JAMLEN_MSK = 49152,
-	GM_TXPA_JAMIPG_MSK = 15872,
-	GM_TXPA_JAMDAT_MSK = 496,
-	GM_TXPA_BO_LIM_MSK = 15,
-	TX_JAM_LEN_DEF = 3,
-	TX_JAM_IPG_DEF = 11,
-	TX_IPG_JAM_DEF = 28,
-	TX_BOF_LIM_DEF = 4,
-};
-
-enum {
-	GM_SMOD_DATABL_MSK = 63488,
-	GM_SMOD_LIMIT_4 = 1024,
-	GM_SMOD_VLAN_ENA = 512,
-	GM_SMOD_JUMBO_ENA = 256,
-	GM_NEW_FLOW_CTRL = 64,
-	GM_SMOD_IPG_MSK = 31,
-};
-
-enum {
-	GM_SMI_CT_PHY_A_MSK = 63488,
-	GM_SMI_CT_REG_A_MSK = 1984,
-	GM_SMI_CT_OP_RD = 32,
-	GM_SMI_CT_RD_VAL = 16,
-	GM_SMI_CT_BUSY = 8,
-};
-
-enum {
-	GM_PAR_MIB_CLR = 32,
-	GM_PAR_MIB_TST = 16,
-};
-
-enum {
-	GMR_FS_LEN = 2147418112,
-	GMR_FS_VLAN = 8192,
-	GMR_FS_JABBER = 4096,
-	GMR_FS_UN_SIZE = 2048,
-	GMR_FS_MC = 1024,
-	GMR_FS_BC = 512,
-	GMR_FS_RX_OK = 256,
-	GMR_FS_GOOD_FC = 128,
-	GMR_FS_BAD_FC = 64,
-	GMR_FS_MII_ERR = 32,
-	GMR_FS_LONG_ERR = 16,
-	GMR_FS_FRAGMENT = 8,
-	GMR_FS_CRC_ERR = 2,
-	GMR_FS_RX_FF_OV = 1,
-	GMR_FS_ANY_ERR = 6267,
-};
-
-enum {
-	RX_GCLKMAC_ENA = 2147483648,
-	RX_GCLKMAC_OFF = 1073741824,
-	RX_STFW_DIS = 536870912,
-	RX_STFW_ENA = 268435456,
-	RX_TRUNC_ON = 134217728,
-	RX_TRUNC_OFF = 67108864,
-	RX_VLAN_STRIP_ON = 33554432,
-	RX_VLAN_STRIP_OFF = 16777216,
-	RX_MACSEC_FLUSH_ON = 8388608,
-	RX_MACSEC_FLUSH_OFF = 4194304,
-	RX_MACSEC_ASF_FLUSH_ON = 2097152,
-	RX_MACSEC_ASF_FLUSH_OFF = 1048576,
-	GMF_RX_OVER_ON = 524288,
-	GMF_RX_OVER_OFF = 262144,
-	GMF_ASF_RX_OVER_ON = 131072,
-	GMF_ASF_RX_OVER_OFF = 65536,
-	GMF_WP_TST_ON = 16384,
-	GMF_WP_TST_OFF = 8192,
-	GMF_WP_STEP = 4096,
-	GMF_RP_TST_ON = 1024,
-	GMF_RP_TST_OFF = 512,
-	GMF_RP_STEP = 256,
-	GMF_RX_F_FL_ON = 128,
-	GMF_RX_F_FL_OFF = 64,
-	GMF_CLI_RX_FO = 32,
-	GMF_CLI_RX_C = 16,
-	GMF_OPER_ON = 8,
-	GMF_OPER_OFF = 4,
-	GMF_RST_CLR = 2,
-	GMF_RST_SET = 1,
-	RX_GMF_FL_THR_DEF = 10,
-	GMF_RX_CTRL_DEF = 136,
-};
-
-enum {
-	RX_IPV6_SA_MOB_ENA = 512,
-	RX_IPV6_SA_MOB_DIS = 256,
-	RX_IPV6_DA_MOB_ENA = 128,
-	RX_IPV6_DA_MOB_DIS = 64,
-	RX_PTR_SYNCDLY_ENA = 32,
-	RX_PTR_SYNCDLY_DIS = 16,
-	RX_ASF_NEWFLAG_ENA = 8,
-	RX_ASF_NEWFLAG_DIS = 4,
-	RX_FLSH_MISSPKT_ENA = 2,
-	RX_FLSH_MISSPKT_DIS = 1,
-};
-
-enum {
-	TX_DYN_WM_ENA = 3,
-};
-
-enum {
-	TX_STFW_DIS = 2147483648,
-	TX_STFW_ENA = 1073741824,
-	TX_VLAN_TAG_ON = 33554432,
-	TX_VLAN_TAG_OFF = 16777216,
-	TX_PCI_JUM_ENA = 8388608,
-	TX_PCI_JUM_DIS = 4194304,
-	GMF_WSP_TST_ON = 262144,
-	GMF_WSP_TST_OFF = 131072,
-	GMF_WSP_STEP = 65536,
-	GMF_CLI_TX_FU = 64,
-	GMF_CLI_TX_FC = 32,
-	GMF_CLI_TX_PE = 16,
-};
-
-enum {
-	GMT_ST_START = 4,
-	GMT_ST_STOP = 2,
-	GMT_ST_CLR_IRQ = 1,
-};
-
-enum {
-	Y2_ASF_OS_PRES = 16,
-	Y2_ASF_RESET = 8,
-	Y2_ASF_RUNNING = 4,
-	Y2_ASF_CLR_HSTI = 2,
-	Y2_ASF_IRQ = 1,
-	Y2_ASF_UC_STATE = 12,
-	Y2_ASF_CLK_HALT = 0,
-};
-
-enum {
-	HCU_CCSR_SMBALERT_MONITOR = 134217728,
-	HCU_CCSR_CPU_SLEEP = 67108864,
-	HCU_CCSR_CS_TO = 33554432,
-	HCU_CCSR_WDOG = 16777216,
-	HCU_CCSR_CLR_IRQ_HOST = 131072,
-	HCU_CCSR_SET_IRQ_HCU = 65536,
-	HCU_CCSR_AHB_RST = 512,
-	HCU_CCSR_CPU_RST_MODE = 256,
-	HCU_CCSR_SET_SYNC_CPU = 32,
-	HCU_CCSR_CPU_CLK_DIVIDE_MSK = 24,
-	HCU_CCSR_CPU_CLK_DIVIDE_BASE = 8,
-	HCU_CCSR_OS_PRSNT = 4,
-	HCU_CCSR_UC_STATE_MSK = 3,
-	HCU_CCSR_UC_STATE_BASE = 1,
-	HCU_CCSR_ASF_RESET = 0,
-	HCU_CCSR_ASF_HALTED = 2,
-	HCU_CCSR_ASF_RUNNING = 1,
-};
-
-enum {
-	SC_STAT_CLR_IRQ = 16,
-	SC_STAT_OP_ON = 8,
-	SC_STAT_OP_OFF = 4,
-	SC_STAT_RST_CLR = 2,
-	SC_STAT_RST_SET = 1,
-};
-
-enum {
-	GMC_SET_RST = 32768,
-	GMC_SEC_RST_OFF = 16384,
-	GMC_BYP_MACSECRX_ON = 8192,
-	GMC_BYP_MACSECRX_OFF = 4096,
-	GMC_BYP_MACSECTX_ON = 2048,
-	GMC_BYP_MACSECTX_OFF = 1024,
-	GMC_BYP_RETR_ON = 512,
-	GMC_BYP_RETR_OFF = 256,
-	GMC_H_BURST_ON = 128,
-	GMC_H_BURST_OFF = 64,
-	GMC_F_LOOPB_ON = 32,
-	GMC_F_LOOPB_OFF = 16,
-	GMC_PAUSE_ON = 8,
-	GMC_PAUSE_OFF = 4,
-	GMC_RST_CLR = 2,
-	GMC_RST_SET = 1,
-};
-
-enum {
-	GPC_TX_PAUSE = 1073741824,
-	GPC_RX_PAUSE = 536870912,
-	GPC_SPEED = 402653184,
-	GPC_LINK = 67108864,
-	GPC_DUPLEX = 33554432,
-	GPC_CLOCK = 16777216,
-	GPC_PDOWN = 8388608,
-	GPC_TSTMODE = 4194304,
-	GPC_REG18 = 2097152,
-	GPC_REG12SEL = 1572864,
-	GPC_REG18SEL = 393216,
-	GPC_SPILOCK = 65536,
-	GPC_LEDMUX = 49152,
-	GPC_INTPOL = 8192,
-	GPC_DETECT = 4096,
-	GPC_1000HD = 2048,
-	GPC_SLAVE = 1024,
-	GPC_PAUSE = 512,
-	GPC_LEDCTL = 192,
-	GPC_RST_CLR = 2,
-	GPC_RST_SET = 1,
-};
-
-enum {
-	GM_IS_TX_CO_OV = 32,
-	GM_IS_RX_CO_OV = 16,
-	GM_IS_TX_FF_UR = 8,
-	GM_IS_TX_COMPL = 4,
-	GM_IS_RX_FF_OR = 2,
-	GM_IS_RX_COMPL = 1,
-};
-
-enum {
-	GMLC_RST_CLR = 2,
-	GMLC_RST_SET = 1,
-};
-
-enum {
-	WOL_CTL_LINK_CHG_OCC = 32768,
-	WOL_CTL_MAGIC_PKT_OCC = 16384,
-	WOL_CTL_PATTERN_OCC = 8192,
-	WOL_CTL_CLEAR_RESULT = 4096,
-	WOL_CTL_ENA_PME_ON_LINK_CHG = 2048,
-	WOL_CTL_DIS_PME_ON_LINK_CHG = 1024,
-	WOL_CTL_ENA_PME_ON_MAGIC_PKT = 512,
-	WOL_CTL_DIS_PME_ON_MAGIC_PKT = 256,
-	WOL_CTL_ENA_PME_ON_PATTERN = 128,
-	WOL_CTL_DIS_PME_ON_PATTERN = 64,
-	WOL_CTL_ENA_LINK_CHG_UNIT = 32,
-	WOL_CTL_DIS_LINK_CHG_UNIT = 16,
-	WOL_CTL_ENA_MAGIC_PKT_UNIT = 8,
-	WOL_CTL_DIS_MAGIC_PKT_UNIT = 4,
-	WOL_CTL_ENA_PATTERN_UNIT = 2,
-	WOL_CTL_DIS_PATTERN_UNIT = 1,
-};
-
-enum {
-	UDPTCP = 1,
-	CALSUM = 2,
-	WR_SUM = 4,
-	INIT_SUM = 8,
-	LOCK_SUM = 16,
-	INS_VLAN = 32,
-	EOP = 128,
-};
-
-enum {
-	HW_OWNER = 128,
-	OP_TCPWRITE = 17,
-	OP_TCPSTART = 18,
-	OP_TCPINIT = 20,
-	OP_TCPLCK = 24,
-	OP_TCPCHKSUM = 18,
-	OP_TCPIS = 22,
-	OP_TCPLW = 25,
-	OP_TCPLSW = 27,
-	OP_TCPLISW = 31,
-	OP_ADDR64 = 33,
-	OP_VLAN = 34,
-	OP_ADDR64VLAN = 35,
-	OP_LRGLEN = 36,
-	OP_LRGLENVLAN = 38,
-	OP_MSS = 40,
-	OP_MSSVLAN = 42,
-	OP_BUFFER = 64,
-	OP_PACKET = 65,
-	OP_LARGESEND = 67,
-	OP_LSOV2 = 69,
-	OP_RXSTAT = 96,
-	OP_RXTIMESTAMP = 97,
-	OP_RXVLAN = 98,
-	OP_RXCHKS = 100,
-	OP_RXCHKSVLAN = 102,
-	OP_RXTIMEVLAN = 99,
-	OP_RSS_HASH = 101,
-	OP_TXINDEXLE = 104,
-	OP_MACSEC = 108,
-	OP_PUTIDX = 112,
-};
-
-enum status_css {
-	CSS_TCPUDPCSOK = 128,
-	CSS_ISUDP = 64,
-	CSS_ISTCP = 32,
-	CSS_ISIPFRAG = 16,
-	CSS_ISIPV6 = 8,
-	CSS_IPV4CSUMOK = 4,
-	CSS_ISIPV4 = 2,
-	CSS_LINK_BIT = 1,
-};
-
-struct sky2_tx_le {
-	__le32 addr;
-	__le16 length;
-	u8 ctrl;
-	u8 opcode;
-};
-
-struct sky2_rx_le {
-	__le32 addr;
-	__le16 length;
-	u8 ctrl;
-	u8 opcode;
-};
-
-struct sky2_status_le {
-	__le32 status;
-	__le16 length;
-	u8 css;
-	u8 opcode;
-};
-
-struct tx_ring_info {
-	struct sk_buff *skb;
-	long unsigned int flags;
-	dma_addr_t mapaddr;
-	__u32 maplen;
-};
-
-struct rx_ring_info {
-	struct sk_buff *skb;
-	dma_addr_t data_addr;
-	__u32 data_size;
-	dma_addr_t frag_addr[2];
-};
-
-enum flow_control {
-	FC_NONE = 0,
-	FC_TX = 1,
-	FC_RX = 2,
-	FC_BOTH = 3,
-};
-
-struct sky2_stats {
-	struct u64_stats_sync syncp;
-	u64 packets;
-	u64 bytes;
-};
-
-struct sky2_hw;
-
-struct sky2_port {
-	struct sky2_hw *hw;
-	struct net_device *netdev;
-	unsigned int port;
-	u32 msg_enable;
-	spinlock_t phy_lock;
-	struct tx_ring_info *tx_ring;
-	struct sky2_tx_le *tx_le;
-	struct sky2_stats tx_stats;
-	u16 tx_ring_size;
-	u16 tx_cons;
-	u16 tx_prod;
-	u16 tx_next;
-	u16 tx_pending;
-	u16 tx_last_mss;
-	u32 tx_last_upper;
-	u32 tx_tcpsum;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct rx_ring_info *rx_ring;
-	struct sky2_rx_le *rx_le;
-	struct sky2_stats rx_stats;
-	u16 rx_next;
-	u16 rx_put;
-	u16 rx_pending;
-	u16 rx_data_size;
-	u16 rx_nfrags;
-	long unsigned int last_rx;
-	struct {
-		long unsigned int last;
-		u32 mac_rp;
-		u8 mac_lev;
-		u8 fifo_rp;
-		u8 fifo_lev;
-	} check;
-	dma_addr_t rx_le_map;
-	dma_addr_t tx_le_map;
-	u16 advertising;
-	u16 speed;
-	u8 wol;
-	u8 duplex;
-	u16 flags;
-	enum flow_control flow_mode;
-	enum flow_control flow_status;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sky2_hw {
-	void *regs;
-	struct pci_dev *pdev;
-	struct napi_struct napi;
-	struct net_device *dev[2];
-	long unsigned int flags;
-	u8 chip_id;
-	u8 chip_rev;
-	u8 pmd_type;
-	u8 ports;
-	struct sky2_status_le *st_le;
-	u32 st_size;
-	u32 st_idx;
-	dma_addr_t st_dma;
-	struct timer_list watchdog_timer;
-	struct work_struct restart_work;
-	wait_queue_head_t msi_wait;
-	char irq_name[0];
-};
-
-struct sky2_stat {
-	char name[32];
-	u16 offset;
-};
-
-struct vlan_ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__be16 h_vlan_encapsulated_proto;
-};
-
-enum {
-	NvRegIrqStatus = 0,
-	NvRegIrqMask = 4,
-	NvRegUnknownSetupReg6 = 8,
-	NvRegPollingInterval = 12,
-	NvRegMSIMap0 = 32,
-	NvRegMSIMap1 = 36,
-	NvRegMSIIrqMask = 48,
-	NvRegMisc1 = 128,
-	NvRegMacReset = 52,
-	NvRegTransmitterControl = 132,
-	NvRegTransmitterStatus = 136,
-	NvRegPacketFilterFlags = 140,
-	NvRegOffloadConfig = 144,
-	NvRegReceiverControl = 148,
-	NvRegReceiverStatus = 152,
-	NvRegSlotTime = 156,
-	NvRegTxDeferral = 160,
-	NvRegRxDeferral = 164,
-	NvRegMacAddrA = 168,
-	NvRegMacAddrB = 172,
-	NvRegMulticastAddrA = 176,
-	NvRegMulticastAddrB = 180,
-	NvRegMulticastMaskA = 184,
-	NvRegMulticastMaskB = 188,
-	NvRegPhyInterface = 192,
-	NvRegBackOffControl = 196,
-	NvRegTxRingPhysAddr = 256,
-	NvRegRxRingPhysAddr = 260,
-	NvRegRingSizes = 264,
-	NvRegTransmitPoll = 268,
-	NvRegLinkSpeed = 272,
-	NvRegUnknownSetupReg5 = 304,
-	NvRegTxWatermark = 316,
-	NvRegTxRxControl = 324,
-	NvRegTxRingPhysAddrHigh = 328,
-	NvRegRxRingPhysAddrHigh = 332,
-	NvRegTxPauseFrame = 368,
-	NvRegTxPauseFrameLimit = 372,
-	NvRegMIIStatus = 384,
-	NvRegMIIMask = 388,
-	NvRegAdapterControl = 392,
-	NvRegMIISpeed = 396,
-	NvRegMIIControl = 400,
-	NvRegMIIData = 404,
-	NvRegTxUnicast = 416,
-	NvRegTxMulticast = 420,
-	NvRegTxBroadcast = 424,
-	NvRegWakeUpFlags = 512,
-	NvRegMgmtUnitGetVersion = 516,
-	NvRegMgmtUnitVersion = 520,
-	NvRegPowerCap = 616,
-	NvRegPowerState = 620,
-	NvRegMgmtUnitControl = 632,
-	NvRegTxCnt = 640,
-	NvRegTxZeroReXmt = 644,
-	NvRegTxOneReXmt = 648,
-	NvRegTxManyReXmt = 652,
-	NvRegTxLateCol = 656,
-	NvRegTxUnderflow = 660,
-	NvRegTxLossCarrier = 664,
-	NvRegTxExcessDef = 668,
-	NvRegTxRetryErr = 672,
-	NvRegRxFrameErr = 676,
-	NvRegRxExtraByte = 680,
-	NvRegRxLateCol = 684,
-	NvRegRxRunt = 688,
-	NvRegRxFrameTooLong = 692,
-	NvRegRxOverflow = 696,
-	NvRegRxFCSErr = 700,
-	NvRegRxFrameAlignErr = 704,
-	NvRegRxLenErr = 708,
-	NvRegRxUnicast = 712,
-	NvRegRxMulticast = 716,
-	NvRegRxBroadcast = 720,
-	NvRegTxDef = 724,
-	NvRegTxFrame = 728,
-	NvRegRxCnt = 732,
-	NvRegTxPause = 736,
-	NvRegRxPause = 740,
-	NvRegRxDropFrame = 744,
-	NvRegVlanControl = 768,
-	NvRegMSIXMap0 = 992,
-	NvRegMSIXMap1 = 996,
-	NvRegMSIXIrqStatus = 1008,
-	NvRegPowerState2 = 1536,
-};
-
-struct ring_desc {
-	__le32 buf;
-	__le32 flaglen;
-};
-
-struct ring_desc_ex {
-	__le32 bufhigh;
-	__le32 buflow;
-	__le32 txvlan;
-	__le32 flaglen;
-};
-
-union ring_type {
-	struct ring_desc *orig;
-	struct ring_desc_ex *ex;
-};
-
-struct nv_ethtool_str {
-	char name[32];
-};
-
-struct nv_ethtool_stats {
-	u64 tx_bytes;
-	u64 tx_zero_rexmt;
-	u64 tx_one_rexmt;
-	u64 tx_many_rexmt;
-	u64 tx_late_collision;
-	u64 tx_fifo_errors;
-	u64 tx_carrier_errors;
-	u64 tx_excess_deferral;
-	u64 tx_retry_error;
-	u64 rx_frame_error;
-	u64 rx_extra_byte;
-	u64 rx_late_collision;
-	u64 rx_runt;
-	u64 rx_frame_too_long;
-	u64 rx_over_errors;
-	u64 rx_crc_errors;
-	u64 rx_frame_align_error;
-	u64 rx_length_error;
-	u64 rx_unicast;
-	u64 rx_multicast;
-	u64 rx_broadcast;
-	u64 rx_packets;
-	u64 rx_errors_total;
-	u64 tx_errors_total;
-	u64 tx_deferral;
-	u64 tx_packets;
-	u64 rx_bytes;
-	u64 tx_pause;
-	u64 rx_pause;
-	u64 rx_drop_frame;
-	u64 tx_unicast;
-	u64 tx_multicast;
-	u64 tx_broadcast;
-};
-
-struct register_test {
-	__u32 reg;
-	__u32 mask;
-};
-
-struct nv_skb_map {
-	struct sk_buff *skb;
-	dma_addr_t dma;
-	unsigned int dma_len: 31;
-	unsigned int dma_single: 1;
-	struct ring_desc_ex *first_tx_desc;
-	struct nv_skb_map *next_tx_ctx;
-};
-
-struct nv_txrx_stats {
-	u64 stat_rx_packets;
-	u64 stat_rx_bytes;
-	u64 stat_rx_missed_errors;
-	u64 stat_rx_dropped;
-	u64 stat_tx_packets;
-	u64 stat_tx_bytes;
-	u64 stat_tx_dropped;
-};
-
-struct fe_priv {
-	spinlock_t lock;
-	struct net_device *dev;
-	struct napi_struct napi;
-	spinlock_t hwstats_lock;
-	struct nv_ethtool_stats estats;
-	int in_shutdown;
-	u32 linkspeed;
-	int duplex;
-	int autoneg;
-	int fixed_mode;
-	int phyaddr;
-	int wolenabled;
-	unsigned int phy_oui;
-	unsigned int phy_model;
-	unsigned int phy_rev;
-	u16 gigabit;
-	int intr_test;
-	int recover_error;
-	int quiet_count;
-	dma_addr_t ring_addr;
-	struct pci_dev *pci_dev;
-	u32 orig_mac[2];
-	u32 events;
-	u32 irqmask;
-	u32 desc_ver;
-	u32 txrxctl_bits;
-	u32 vlanctl_bits;
-	u32 driver_data;
-	u32 device_id;
-	u32 register_size;
-	u32 mac_in_use;
-	int mgmt_version;
-	int mgmt_sema;
-	void *base;
-	union ring_type get_rx;
-	union ring_type put_rx;
-	union ring_type last_rx;
-	struct nv_skb_map *get_rx_ctx;
-	struct nv_skb_map *put_rx_ctx;
-	struct nv_skb_map *last_rx_ctx;
-	struct nv_skb_map *rx_skb;
-	union ring_type rx_ring;
-	unsigned int rx_buf_sz;
-	unsigned int pkt_limit;
-	struct timer_list oom_kick;
-	struct timer_list nic_poll;
-	struct timer_list stats_poll;
-	u32 nic_poll_irq;
-	int rx_ring_size;
-	struct u64_stats_sync swstats_rx_syncp;
-	struct nv_txrx_stats *txrx_stats;
-	int need_linktimer;
-	long unsigned int link_timeout;
-	union ring_type get_tx;
-	union ring_type put_tx;
-	union ring_type last_tx;
-	struct nv_skb_map *get_tx_ctx;
-	struct nv_skb_map *put_tx_ctx;
-	struct nv_skb_map *last_tx_ctx;
-	struct nv_skb_map *tx_skb;
-	union ring_type tx_ring;
-	u32 tx_flags;
-	int tx_ring_size;
-	int tx_limit;
-	u32 tx_pkts_in_progress;
-	struct nv_skb_map *tx_change_owner;
-	struct nv_skb_map *tx_end_flip;
-	int tx_stop;
-	struct u64_stats_sync swstats_tx_syncp;
-	u32 msi_flags;
-	struct msix_entry msi_x_entry[8];
-	u32 pause_flags;
-	u32 saved_config_space[385];
-	char name_rx[19];
-	char name_tx[19];
-	char name_other[22];
-};
-
-enum {
-	NV_OPTIMIZATION_MODE_THROUGHPUT = 0,
-	NV_OPTIMIZATION_MODE_CPU = 1,
-	NV_OPTIMIZATION_MODE_DYNAMIC = 2,
-};
-
-enum {
-	NV_MSI_INT_DISABLED = 0,
-	NV_MSI_INT_ENABLED = 1,
-};
-
-enum {
-	NV_MSIX_INT_DISABLED = 0,
-	NV_MSIX_INT_ENABLED = 1,
-};
-
-enum {
-	NV_DMA_64BIT_DISABLED = 0,
-	NV_DMA_64BIT_ENABLED = 1,
-};
-
-enum {
-	NV_CROSSOVER_DETECTION_DISABLED = 0,
-	NV_CROSSOVER_DETECTION_ENABLED = 1,
-};
-
-enum {
-	HAS_MII_XCVR = 65536,
-	HAS_CHIP_XCVR = 131072,
-	HAS_LNK_CHNG = 262144,
-};
-
-enum {
-	RTL8139 = 0,
-	RTL8129 = 1,
-};
-
-enum RTL8139_registers {
-	MAC0 = 0,
-	MAR0 = 8,
-	TxStatus0 = 16,
-	TxAddr0 = 32,
-	RxBuf = 48,
-	ChipCmd = 55,
-	RxBufPtr = 56,
-	RxBufAddr = 58,
-	IntrMask = 60,
-	IntrStatus = 62,
-	TxConfig = 64,
-	RxConfig = 68,
-	Timer = 72,
-	RxMissed = 76,
-	Cfg9346 = 80,
-	Config0 = 81,
-	Config1 = 82,
-	TimerInt = 84,
-	MediaStatus = 88,
-	Config3 = 89,
-	Config4 = 90,
-	HltClk = 91,
-	MultiIntr = 92,
-	TxSummary = 96,
-	BasicModeCtrl = 98,
-	BasicModeStatus = 100,
-	NWayAdvert = 102,
-	NWayLPAR = 104,
-	NWayExpansion = 106,
-	FIFOTMS = 112,
-	CSCR = 116,
-	PARA78 = 120,
-	FlashReg = 212,
-	PARA7c = 124,
-	Config5 = 216,
-};
-
-enum ClearBitMasks {
-	MultiIntrClear = 61440,
-	ChipCmdClear = 226,
-	Config1Clear = 206,
-};
-
-enum ChipCmdBits {
-	CmdReset = 16,
-	CmdRxEnb = 8,
-	CmdTxEnb = 4,
-	RxBufEmpty = 1,
-};
-
-enum IntrStatusBits {
-	PCIErr = 32768,
-	PCSTimeout = 16384,
-	RxFIFOOver = 64,
-	RxUnderrun = 32,
-	RxOverflow = 16,
-	TxErr = 8,
-	TxOK = 4,
-	RxErr = 2,
-	RxOK = 1,
-	RxAckBits = 81,
-};
-
-enum TxStatusBits {
-	TxHostOwns = 8192,
-	TxUnderrun = 16384,
-	TxStatOK = 32768,
-	TxOutOfWindow = 536870912,
-	TxAborted = 1073741824,
-	TxCarrierLost = 2147483648,
-};
-
-enum RxStatusBits {
-	RxMulticast = 32768,
-	RxPhysical = 16384,
-	RxBroadcast = 8192,
-	RxBadSymbol = 32,
-	RxRunt = 16,
-	RxTooLong = 8,
-	RxCRCErr = 4,
-	RxBadAlign = 2,
-	RxStatusOK = 1,
-};
-
-enum rx_mode_bits {
-	AcceptErr = 32,
-	AcceptRunt = 16,
-	AcceptBroadcast = 8,
-	AcceptMulticast = 4,
-	AcceptMyPhys = 2,
-	AcceptAllPhys = 1,
-};
-
-enum tx_config_bits {
-	TxIFGShift = 24,
-	TxIFG84 = 0,
-	TxIFG88 = 16777216,
-	TxIFG92 = 33554432,
-	TxIFG96 = 50331648,
-	TxLoopBack = 393216,
-	TxCRC = 65536,
-	TxClearAbt = 1,
-	TxDMAShift = 8,
-	TxRetryShift = 4,
-	TxVersionMask = 2088763392,
-};
-
-enum Config1Bits {
-	Cfg1_PM_Enable = 1,
-	Cfg1_VPD_Enable = 2,
-	Cfg1_PIO = 4,
-	Cfg1_MMIO = 8,
-	LWAKE = 16,
-	Cfg1_Driver_Load = 32,
-	Cfg1_LED0 = 64,
-	Cfg1_LED1 = 128,
-	SLEEP = 2,
-	PWRDN = 1,
-};
-
-enum Config3Bits {
-	Cfg3_FBtBEn = 1,
-	Cfg3_FuncRegEn = 2,
-	Cfg3_CLKRUN_En = 4,
-	Cfg3_CardB_En = 8,
-	Cfg3_LinkUp = 16,
-	Cfg3_Magic = 32,
-	Cfg3_PARM_En = 64,
-	Cfg3_GNTSel = 128,
-};
-
-enum Config4Bits {
-	LWPTN = 4,
-};
-
-enum Config5Bits {
-	Cfg5_PME_STS = 1,
-	Cfg5_LANWake = 2,
-	Cfg5_LDPS = 4,
-	Cfg5_FIFOAddrPtr = 8,
-	Cfg5_UWF = 16,
-	Cfg5_MWF = 32,
-	Cfg5_BWF = 64,
-};
-
-enum CSCRBits {
-	CSCR_LinkOKBit = 1024,
-	CSCR_LinkChangeBit = 2048,
-	CSCR_LinkStatusBits = 61440,
-	CSCR_LinkDownOffCmd = 960,
-	CSCR_LinkDownCmd = 62400,
-};
-
-enum Cfg9346Bits {
-	Cfg9346_Lock = 0,
-	Cfg9346_Unlock = 192,
-};
-
-typedef enum {
-	CH_8139 = 0,
-	CH_8139_K = 1,
-	CH_8139A = 2,
-	CH_8139A_G = 3,
-	CH_8139B = 4,
-	CH_8130 = 5,
-	CH_8139C = 6,
-	CH_8100 = 7,
-	CH_8100B_8139D = 8,
-	CH_8101 = 9,
-} chip_t;
-
-enum chip_flags {
-	HasHltClk = 1,
-	HasLWake = 2,
-};
-
-struct rtl_extra_stats {
-	long unsigned int early_rx;
-	long unsigned int tx_buf_mapped;
-	long unsigned int tx_timeouts;
-	long unsigned int rx_lost_in_ring;
-};
-
-struct rtl8139_stats {
-	u64 packets;
-	u64 bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct rtl8139_private {
-	void *mmio_addr;
-	int drv_flags;
-	struct pci_dev *pci_dev;
-	u32 msg_enable;
-	struct napi_struct napi;
-	struct net_device *dev;
-	unsigned char *rx_ring;
-	unsigned int cur_rx;
-	struct rtl8139_stats rx_stats;
-	dma_addr_t rx_ring_dma;
-	unsigned int tx_flag;
-	long unsigned int cur_tx;
-	long unsigned int dirty_tx;
-	struct rtl8139_stats tx_stats;
-	unsigned char *tx_buf[4];
-	unsigned char *tx_bufs;
-	dma_addr_t tx_bufs_dma;
-	signed char phys[4];
-	char twistie;
-	char twist_row;
-	char twist_col;
-	unsigned int watchdog_fired: 1;
-	unsigned int default_port: 4;
-	unsigned int have_thread: 1;
-	spinlock_t lock;
-	spinlock_t rx_lock;
-	chip_t chipset;
-	u32 rx_config;
-	struct rtl_extra_stats xstats;
-	struct delayed_work thread;
-	struct mii_if_info mii;
-	unsigned int regs_len;
-	long unsigned int fifo_copy_timeout;
-};
-
-struct rtl8169_private;
-
-typedef void (*rtl_fw_write_t)(struct rtl8169_private *, int, int);
-
-enum mac_version {
-	RTL_GIGA_MAC_VER_02 = 0,
-	RTL_GIGA_MAC_VER_03 = 1,
-	RTL_GIGA_MAC_VER_04 = 2,
-	RTL_GIGA_MAC_VER_05 = 3,
-	RTL_GIGA_MAC_VER_06 = 4,
-	RTL_GIGA_MAC_VER_07 = 5,
-	RTL_GIGA_MAC_VER_08 = 6,
-	RTL_GIGA_MAC_VER_09 = 7,
-	RTL_GIGA_MAC_VER_10 = 8,
-	RTL_GIGA_MAC_VER_11 = 9,
-	RTL_GIGA_MAC_VER_12 = 10,
-	RTL_GIGA_MAC_VER_13 = 11,
-	RTL_GIGA_MAC_VER_14 = 12,
-	RTL_GIGA_MAC_VER_15 = 13,
-	RTL_GIGA_MAC_VER_16 = 14,
-	RTL_GIGA_MAC_VER_17 = 15,
-	RTL_GIGA_MAC_VER_18 = 16,
-	RTL_GIGA_MAC_VER_19 = 17,
-	RTL_GIGA_MAC_VER_20 = 18,
-	RTL_GIGA_MAC_VER_21 = 19,
-	RTL_GIGA_MAC_VER_22 = 20,
-	RTL_GIGA_MAC_VER_23 = 21,
-	RTL_GIGA_MAC_VER_24 = 22,
-	RTL_GIGA_MAC_VER_25 = 23,
-	RTL_GIGA_MAC_VER_26 = 24,
-	RTL_GIGA_MAC_VER_27 = 25,
-	RTL_GIGA_MAC_VER_28 = 26,
-	RTL_GIGA_MAC_VER_29 = 27,
-	RTL_GIGA_MAC_VER_30 = 28,
-	RTL_GIGA_MAC_VER_31 = 29,
-	RTL_GIGA_MAC_VER_32 = 30,
-	RTL_GIGA_MAC_VER_33 = 31,
-	RTL_GIGA_MAC_VER_34 = 32,
-	RTL_GIGA_MAC_VER_35 = 33,
-	RTL_GIGA_MAC_VER_36 = 34,
-	RTL_GIGA_MAC_VER_37 = 35,
-	RTL_GIGA_MAC_VER_38 = 36,
-	RTL_GIGA_MAC_VER_39 = 37,
-	RTL_GIGA_MAC_VER_40 = 38,
-	RTL_GIGA_MAC_VER_41 = 39,
-	RTL_GIGA_MAC_VER_42 = 40,
-	RTL_GIGA_MAC_VER_43 = 41,
-	RTL_GIGA_MAC_VER_44 = 42,
-	RTL_GIGA_MAC_VER_45 = 43,
-	RTL_GIGA_MAC_VER_46 = 44,
-	RTL_GIGA_MAC_VER_47 = 45,
-	RTL_GIGA_MAC_VER_48 = 46,
-	RTL_GIGA_MAC_VER_49 = 47,
-	RTL_GIGA_MAC_VER_50 = 48,
-	RTL_GIGA_MAC_VER_51 = 49,
-	RTL_GIGA_MAC_VER_52 = 50,
-	RTL_GIGA_MAC_VER_60 = 51,
-	RTL_GIGA_MAC_VER_61 = 52,
-	RTL_GIGA_MAC_NONE = 53,
-};
-
-struct rtl8169_stats {
-	u64 packets;
-	u64 bytes;
-	struct u64_stats_sync syncp;
-};
-
-struct ring_info___2 {
-	struct sk_buff *skb;
-	u32 len;
-};
-
-struct rtl8169_tc_offsets {
-	bool inited;
-	__le64 tx_errors;
-	__le32 tx_multi_collision;
-	__le16 tx_aborted;
-};
-
-struct TxDesc;
-
-struct RxDesc;
-
-struct rtl8169_counters;
-
-struct rtl_fw;
-
-struct rtl8169_private {
-	void *mmio_addr;
-	struct pci_dev *pci_dev;
-	struct net_device *dev;
-	struct phy_device *phydev;
-	struct napi_struct napi;
-	u32 msg_enable;
-	enum mac_version mac_version;
-	u32 cur_rx;
-	u32 cur_tx;
-	u32 dirty_tx;
-	struct rtl8169_stats rx_stats;
-	struct rtl8169_stats tx_stats;
-	struct TxDesc *TxDescArray;
-	struct RxDesc *RxDescArray;
-	dma_addr_t TxPhyAddr;
-	dma_addr_t RxPhyAddr;
-	struct page *Rx_databuff[256];
-	struct ring_info___2 tx_skb[64];
-	u16 cp_cmd;
-	u32 irq_mask;
-	struct clk *clk;
-	struct {
-		long unsigned int flags[1];
-		struct mutex mutex;
-		struct work_struct work;
-	} wk;
-	unsigned int irq_enabled: 1;
-	unsigned int supports_gmii: 1;
-	unsigned int aspm_manageable: 1;
-	dma_addr_t counters_phys_addr;
-	struct rtl8169_counters *counters;
-	struct rtl8169_tc_offsets tc_offset;
-	u32 saved_wolopts;
-	int eee_adv;
-	const char *fw_name;
-	struct rtl_fw *rtl_fw;
-	u32 ocp_base;
-};
-
-typedef int (*rtl_fw_read_t)(struct rtl8169_private *, int);
-
-struct rtl_fw_phy_action {
-	__le32 *code;
-	size_t size;
-};
-
-struct rtl_fw {
-	rtl_fw_write_t phy_write;
-	rtl_fw_read_t phy_read;
-	rtl_fw_write_t mac_mcu_write;
-	rtl_fw_read_t mac_mcu_read;
-	const struct firmware *fw;
-	const char *fw_name;
-	struct device *dev;
-	char version[32];
-	struct rtl_fw_phy_action phy_action;
-};
-
-enum rtl_registers {
-	MAC0___2 = 0,
-	MAC4 = 4,
-	MAR0___2 = 8,
-	CounterAddrLow = 16,
-	CounterAddrHigh = 20,
-	TxDescStartAddrLow = 32,
-	TxDescStartAddrHigh = 36,
-	TxHDescStartAddrLow = 40,
-	TxHDescStartAddrHigh = 44,
-	FLASH = 48,
-	ERSR = 54,
-	ChipCmd___2 = 55,
-	TxPoll = 56,
-	IntrMask___2 = 60,
-	IntrStatus___2 = 62,
-	TxConfig___2 = 64,
-	RxConfig___2 = 68,
-	RxMissed___2 = 76,
-	Cfg9346___2 = 80,
-	Config0___2 = 81,
-	Config1___2 = 82,
-	Config2 = 83,
-	Config3___2 = 84,
-	Config4___2 = 85,
-	Config5___2 = 86,
-	PHYAR = 96,
-	PHYstatus = 108,
-	RxMaxSize = 218,
-	CPlusCmd = 224,
-	IntrMitigate = 226,
-	RxDescAddrLow = 228,
-	RxDescAddrHigh = 232,
-	EarlyTxThres = 236,
-	MaxTxPacketSize = 236,
-	FuncEvent = 240,
-	FuncEventMask = 244,
-	FuncPresetState = 248,
-	IBCR0 = 248,
-	IBCR2 = 249,
-	IBIMR0 = 250,
-	IBISR0 = 251,
-	FuncForceEvent = 252,
-};
-
-enum rtl8168_8101_registers {
-	CSIDR = 100,
-	CSIAR = 104,
-	PMCH = 111,
-	EPHYAR = 128,
-	DLLPR = 208,
-	DBG_REG = 209,
-	TWSI = 210,
-	MCU = 211,
-	EFUSEAR = 220,
-	MISC_1 = 242,
-};
-
-enum rtl8168_registers {
-	LED_FREQ = 26,
-	EEE_LED = 27,
-	ERIDR = 112,
-	ERIAR = 116,
-	EPHY_RXER_NUM = 124,
-	OCPDR = 176,
-	OCPAR = 180,
-	GPHY_OCP = 184,
-	RDSAR1 = 208,
-	MISC = 240,
-};
-
-enum rtl8125_registers {
-	IntrMask_8125 = 56,
-	IntrStatus_8125 = 60,
-	TxPoll_8125 = 144,
-	MAC0_BKP = 6624,
-};
-
-enum rtl_register_content {
-	SYSErr = 32768,
-	PCSTimeout___2 = 16384,
-	SWInt = 256,
-	TxDescUnavail = 128,
-	RxFIFOOver___2 = 64,
-	LinkChg = 32,
-	RxOverflow___2 = 16,
-	TxErr___2 = 8,
-	TxOK___2 = 4,
-	RxErr___2 = 2,
-	RxOK___2 = 1,
-	RxRWT = 4194304,
-	RxRES = 2097152,
-	RxRUNT = 1048576,
-	RxCRC = 524288,
-	StopReq = 128,
-	CmdReset___2 = 16,
-	CmdRxEnb___2 = 8,
-	CmdTxEnb___2 = 4,
-	RxBufEmpty___2 = 1,
-	HPQ = 128,
-	NPQ = 64,
-	FSWInt = 1,
-	Cfg9346_Lock___2 = 0,
-	Cfg9346_Unlock___2 = 192,
-	AcceptErr___2 = 32,
-	AcceptRunt___2 = 16,
-	AcceptBroadcast___2 = 8,
-	AcceptMulticast___2 = 4,
-	AcceptMyPhys___2 = 2,
-	AcceptAllPhys___2 = 1,
-	TxInterFrameGapShift = 24,
-	TxDMAShift___2 = 8,
-	LEDS1 = 128,
-	LEDS0 = 64,
-	Speed_down = 16,
-	MEMMAP = 8,
-	IOMAP = 4,
-	VPD = 2,
-	PMEnable = 1,
-	ClkReqEn = 128,
-	MSIEnable = 32,
-	PCI_Clock_66MHz = 1,
-	PCI_Clock_33MHz = 0,
-	MagicPacket = 32,
-	LinkUp = 16,
-	Jumbo_En0 = 4,
-	Rdy_to_L23 = 2,
-	Beacon_en = 1,
-	Jumbo_En1 = 2,
-	BWF = 64,
-	MWF = 32,
-	UWF = 16,
-	Spi_en = 8,
-	LanWake = 2,
-	PMEStatus = 1,
-	ASPM_en = 1,
-	EnableBist = 32768,
-	Mac_dbgo_oe = 16384,
-	Normal_mode = 8192,
-	Force_half_dup = 4096,
-	Force_rxflow_en = 2048,
-	Force_txflow_en = 1024,
-	Cxpl_dbg_sel = 512,
-	ASF = 256,
-	PktCntrDisable = 128,
-	Mac_dbgo_sel = 28,
-	RxVlan = 64,
-	RxChkSum = 32,
-	PCIDAC = 16,
-	PCIMulRW = 8,
-	TBI_Enable = 128,
-	TxFlowCtrl = 64,
-	RxFlowCtrl = 32,
-	_1000bpsF = 16,
-	_100bps = 8,
-	_10bps = 4,
-	LinkStatus = 2,
-	FullDup = 1,
-	CounterReset = 1,
-	CounterDump = 8,
-	MagicPacket_v2 = 65536,
-};
-
-enum rtl_desc_bit {
-	DescOwn = 2147483648,
-	RingEnd = 1073741824,
-	FirstFrag = 536870912,
-	LastFrag = 268435456,
-};
-
-enum rtl_tx_desc_bit {
-	TD_LSO = 134217728,
-	TxVlanTag = 131072,
-};
-
-enum rtl_tx_desc_bit_0 {
-	TD0_TCP_CS = 65536,
-	TD0_UDP_CS = 131072,
-	TD0_IP_CS = 262144,
-};
-
-enum rtl_tx_desc_bit_1 {
-	TD1_GTSENV4 = 67108864,
-	TD1_GTSENV6 = 33554432,
-	TD1_IPv6_CS = 268435456,
-	TD1_IPv4_CS = 536870912,
-	TD1_TCP_CS = 1073741824,
-	TD1_UDP_CS = 2147483648,
-};
-
-enum rtl_rx_desc_bit {
-	PID1 = 262144,
-	PID0 = 131072,
-	IPFail = 65536,
-	UDPFail = 32768,
-	TCPFail = 16384,
-	RxVlanTag = 65536,
-};
-
-struct TxDesc {
-	__le32 opts1;
-	__le32 opts2;
-	__le64 addr;
-};
-
-struct RxDesc {
-	__le32 opts1;
-	__le32 opts2;
-	__le64 addr;
-};
-
-struct rtl8169_counters {
-	__le64 tx_packets;
-	__le64 rx_packets;
-	__le64 tx_errors;
-	__le32 rx_errors;
-	__le16 rx_missed;
-	__le16 align_errors;
-	__le32 tx_one_collision;
-	__le32 tx_multi_collision;
-	__le64 rx_unicast;
-	__le64 rx_broadcast;
-	__le32 rx_multicast;
-	__le16 tx_aborted;
-	__le16 tx_underun;
-};
-
-enum rtl_flag {
-	RTL_FLAG_TASK_ENABLED = 0,
-	RTL_FLAG_TASK_RESET_PENDING = 1,
-	RTL_FLAG_MAX = 2,
-};
-
-typedef void (*rtl_generic_fct)(struct rtl8169_private *);
-
-struct rtl_cond {
-	bool (*check)(struct rtl8169_private *);
-	const char *msg;
-};
-
-struct rtl_coalesce_scale {
-	u32 nsecs[2];
-};
-
-struct rtl_coalesce_info {
-	u32 speed;
-	struct rtl_coalesce_scale scalev[4];
-};
-
-struct phy_reg {
-	u16 reg;
-	u16 val;
-};
-
-struct ephy_info {
-	unsigned int offset;
-	u16 mask;
-	u16 bits;
-};
-
-struct rtl_mac_info {
-	u16 mask;
-	u16 val;
-	u16 mac_version;
-};
-
-enum rtl_fw_opcode {
-	PHY_READ = 0,
-	PHY_DATA_OR = 1,
-	PHY_DATA_AND = 2,
-	PHY_BJMPN = 3,
-	PHY_MDIO_CHG = 4,
-	PHY_CLEAR_READCOUNT = 7,
-	PHY_WRITE = 8,
-	PHY_READCOUNT_EQ_SKIP = 9,
-	PHY_COMP_EQ_SKIPN = 10,
-	PHY_COMP_NEQ_SKIPN = 11,
-	PHY_WRITE_PREVIOUS = 12,
-	PHY_SKIPN = 13,
-	PHY_DELAY_MS = 14,
-};
-
-struct fw_info {
-	u32 magic;
-	char version[32];
-	__le32 fw_start;
-	__le32 fw_len;
-	u8 chksum;
-} __attribute__((packed));
-
-struct ohci {
-	void *registers;
-};
-
-struct cdrom_msf {
-	__u8 cdmsf_min0;
-	__u8 cdmsf_sec0;
-	__u8 cdmsf_frame0;
-	__u8 cdmsf_min1;
-	__u8 cdmsf_sec1;
-	__u8 cdmsf_frame1;
-};
-
-struct cdrom_volctrl {
-	__u8 channel0;
-	__u8 channel1;
-	__u8 channel2;
-	__u8 channel3;
-};
-
-struct cdrom_subchnl {
-	__u8 cdsc_format;
-	__u8 cdsc_audiostatus;
-	__u8 cdsc_adr: 4;
-	__u8 cdsc_ctrl: 4;
-	__u8 cdsc_trk;
-	__u8 cdsc_ind;
-	union cdrom_addr cdsc_absaddr;
-	union cdrom_addr cdsc_reladdr;
-};
-
-struct cdrom_blk {
-	unsigned int from;
-	short unsigned int len;
-};
-
-struct dvd_layer {
-	__u8 book_version: 4;
-	__u8 book_type: 4;
-	__u8 min_rate: 4;
-	__u8 disc_size: 4;
-	__u8 layer_type: 4;
-	__u8 track_path: 1;
-	__u8 nlayers: 2;
-	char: 1;
-	__u8 track_density: 4;
-	__u8 linear_density: 4;
-	__u8 bca: 1;
-	__u32 start_sector;
-	__u32 end_sector;
-	__u32 end_sector_l0;
-};
-
-struct dvd_physical {
-	__u8 type;
-	__u8 layer_num;
-	struct dvd_layer layer[4];
-};
-
-struct dvd_copyright {
-	__u8 type;
-	__u8 layer_num;
-	__u8 cpst;
-	__u8 rmi;
-};
-
-struct dvd_disckey {
-	__u8 type;
-	unsigned int agid: 2;
-	__u8 value[2048];
-};
-
-struct dvd_bca {
-	__u8 type;
-	int len;
-	__u8 value[188];
-};
-
-struct dvd_manufact {
-	__u8 type;
-	__u8 layer_num;
-	int len;
-	__u8 value[2048];
-};
-
-typedef union {
-	__u8 type;
-	struct dvd_physical physical;
-	struct dvd_copyright copyright;
-	struct dvd_disckey disckey;
-	struct dvd_bca bca;
-	struct dvd_manufact manufact;
-} dvd_struct;
-
-typedef __u8 dvd_key[5];
-
-typedef __u8 dvd_challenge[10];
-
-struct dvd_lu_send_agid {
-	__u8 type;
-	unsigned int agid: 2;
-};
-
-struct dvd_host_send_challenge {
-	__u8 type;
-	unsigned int agid: 2;
-	dvd_challenge chal;
-};
-
-struct dvd_send_key {
-	__u8 type;
-	unsigned int agid: 2;
-	dvd_key key;
-};
-
-struct dvd_lu_send_challenge {
-	__u8 type;
-	unsigned int agid: 2;
-	dvd_challenge chal;
-};
-
-struct dvd_lu_send_title_key {
-	__u8 type;
-	unsigned int agid: 2;
-	dvd_key title_key;
-	int lba;
-	unsigned int cpm: 1;
-	unsigned int cp_sec: 1;
-	unsigned int cgms: 2;
-};
-
-struct dvd_lu_send_asf {
-	__u8 type;
-	unsigned int agid: 2;
-	unsigned int asf: 1;
-};
-
-struct dvd_host_send_rpcstate {
-	__u8 type;
-	__u8 pdrc;
-};
-
-struct dvd_lu_send_rpcstate {
-	__u8 type: 2;
-	__u8 vra: 3;
-	__u8 ucca: 3;
-	__u8 region_mask;
-	__u8 rpc_scheme;
-};
-
-typedef union {
-	__u8 type;
-	struct dvd_lu_send_agid lsa;
-	struct dvd_host_send_challenge hsc;
-	struct dvd_send_key lsk;
-	struct dvd_lu_send_challenge lsc;
-	struct dvd_send_key hsk;
-	struct dvd_lu_send_title_key lstk;
-	struct dvd_lu_send_asf lsasf;
-	struct dvd_host_send_rpcstate hrpcs;
-	struct dvd_lu_send_rpcstate lrpcs;
-} dvd_authinfo;
-
-struct mrw_feature_desc {
-	__be16 feature_code;
-	__u8 curr: 1;
-	__u8 persistent: 1;
-	__u8 feature_version: 4;
-	__u8 reserved1: 2;
-	__u8 add_len;
-	__u8 write: 1;
-	__u8 reserved2: 7;
-	__u8 reserved3;
-	__u8 reserved4;
-	__u8 reserved5;
-};
-
-struct rwrt_feature_desc {
-	__be16 feature_code;
-	__u8 curr: 1;
-	__u8 persistent: 1;
-	__u8 feature_version: 4;
-	__u8 reserved1: 2;
-	__u8 add_len;
-	__u32 last_lba;
-	__u32 block_size;
-	__u16 blocking;
-	__u8 page_present: 1;
-	__u8 reserved2: 7;
-	__u8 reserved3;
-};
-
-typedef struct {
-	__be16 disc_information_length;
-	__u8 disc_status: 2;
-	__u8 border_status: 2;
-	__u8 erasable: 1;
-	__u8 reserved1: 3;
-	__u8 n_first_track;
-	__u8 n_sessions_lsb;
-	__u8 first_track_lsb;
-	__u8 last_track_lsb;
-	__u8 mrw_status: 2;
-	__u8 dbit: 1;
-	__u8 reserved2: 2;
-	__u8 uru: 1;
-	__u8 dbc_v: 1;
-	__u8 did_v: 1;
-	__u8 disc_type;
-	__u8 n_sessions_msb;
-	__u8 first_track_msb;
-	__u8 last_track_msb;
-	__u32 disc_id;
-	__u32 lead_in;
-	__u32 lead_out;
-	__u8 disc_bar_code[8];
-	__u8 reserved3;
-	__u8 n_opc;
-} disc_information;
-
-typedef struct {
-	__be16 track_information_length;
-	__u8 track_lsb;
-	__u8 session_lsb;
-	__u8 reserved1;
-	__u8 track_mode: 4;
-	__u8 copy: 1;
-	__u8 damage: 1;
-	__u8 reserved2: 2;
-	__u8 data_mode: 4;
-	__u8 fp: 1;
-	__u8 packet: 1;
-	__u8 blank: 1;
-	__u8 rt: 1;
-	__u8 nwa_v: 1;
-	__u8 lra_v: 1;
-	__u8 reserved3: 6;
-	__be32 track_start;
-	__be32 next_writable;
-	__be32 free_blocks;
-	__be32 fixed_packet_size;
-	__be32 track_size;
-	__be32 last_rec_address;
-} track_information;
-
-struct mode_page_header {
-	__be16 mode_data_length;
-	__u8 medium_type;
-	__u8 reserved1;
-	__u8 reserved2;
-	__u8 reserved3;
-	__be16 desc_length;
-};
-
-typedef struct {
-	int data;
-	int audio;
-	int cdi;
-	int xa;
-	long int error;
-} tracktype;
-
-struct cdrom_mechstat_header {
-	__u8 curslot: 5;
-	__u8 changer_state: 2;
-	__u8 fault: 1;
-	__u8 reserved1: 4;
-	__u8 door_open: 1;
-	__u8 mech_state: 3;
-	__u8 curlba[3];
-	__u8 nslots;
-	__u16 slot_tablelen;
-};
-
-struct cdrom_slot {
-	__u8 change: 1;
-	__u8 reserved1: 6;
-	__u8 disc_present: 1;
-	__u8 reserved2[3];
-};
-
-struct cdrom_changer_info {
-	struct cdrom_mechstat_header hdr;
-	struct cdrom_slot slots[256];
-};
-
-struct modesel_head {
-	__u8 reserved1;
-	__u8 medium;
-	__u8 reserved2;
-	__u8 block_desc_length;
-	__u8 density;
-	__u8 number_of_blocks_hi;
-	__u8 number_of_blocks_med;
-	__u8 number_of_blocks_lo;
-	__u8 reserved3;
-	__u8 block_length_hi;
-	__u8 block_length_med;
-	__u8 block_length_lo;
-};
-
-typedef struct {
-	__u16 report_key_length;
-	__u8 reserved1;
-	__u8 reserved2;
-	__u8 ucca: 3;
-	__u8 vra: 3;
-	__u8 type_code: 2;
-	__u8 region_mask;
-	__u8 rpc_scheme;
-	__u8 reserved3;
-} rpc_state_t;
-
-struct cdrom_sysctl_settings {
-	char info[1000];
-	int autoclose;
-	int autoeject;
-	int debug;
-	int lock;
-	int check;
-};
-
-enum cdrom_print_option {
-	CTL_NAME = 0,
-	CTL_SPEED = 1,
-	CTL_SLOTS = 2,
-	CTL_CAPABILITY = 3,
-};
-
-struct socket_state_t {
-	u_int flags;
-	u_int csc_mask;
-	u_char Vcc;
-	u_char Vpp;
-	u_char io_irq;
-};
-
-typedef struct socket_state_t socket_state_t;
-
-struct pccard_io_map {
-	u_char map;
-	u_char flags;
-	u_short speed;
-	phys_addr_t start;
-	phys_addr_t stop;
-};
-
-struct pccard_mem_map {
-	u_char map;
-	u_char flags;
-	u_short speed;
-	phys_addr_t static_start;
-	u_int card_start;
-	struct resource *res;
-};
-
-typedef struct pccard_mem_map pccard_mem_map;
-
-struct io_window_t {
-	u_int InUse;
-	u_int Config;
-	struct resource *res;
-};
-
-typedef struct io_window_t io_window_t;
-
-struct pcmcia_socket;
-
-struct pccard_operations {
-	int (*init)(struct pcmcia_socket *);
-	int (*suspend)(struct pcmcia_socket *);
-	int (*get_status)(struct pcmcia_socket *, u_int *);
-	int (*set_socket)(struct pcmcia_socket *, socket_state_t *);
-	int (*set_io_map)(struct pcmcia_socket *, struct pccard_io_map *);
-	int (*set_mem_map)(struct pcmcia_socket *, struct pccard_mem_map *);
-};
-
-struct pccard_resource_ops;
-
-struct pcmcia_callback;
-
-struct pcmcia_socket {
-	struct module *owner;
-	socket_state_t socket;
-	u_int state;
-	u_int suspended_state;
-	u_short functions;
-	u_short lock_count;
-	pccard_mem_map cis_mem;
-	void *cis_virt;
-	io_window_t io[2];
-	pccard_mem_map win[4];
-	struct list_head cis_cache;
-	size_t fake_cis_len;
-	u8 *fake_cis;
-	struct list_head socket_list;
-	struct completion socket_released;
-	unsigned int sock;
-	u_int features;
-	u_int irq_mask;
-	u_int map_size;
-	u_int io_offset;
-	u_int pci_irq;
-	struct pci_dev *cb_dev;
-	u8 resource_setup_done;
-	struct pccard_operations *ops;
-	struct pccard_resource_ops *resource_ops;
-	void *resource_data;
-	void (*zoom_video)(struct pcmcia_socket *, int);
-	int (*power_hook)(struct pcmcia_socket *, int);
-	void (*tune_bridge)(struct pcmcia_socket *, struct pci_bus *);
-	struct task_struct *thread;
-	struct completion thread_done;
-	unsigned int thread_events;
-	unsigned int sysfs_events;
-	struct mutex skt_mutex;
-	struct mutex ops_mutex;
-	spinlock_t thread_lock;
-	struct pcmcia_callback *callback;
-	struct list_head devices_list;
-	u8 device_count;
-	u8 pcmcia_pfc;
-	atomic_t present;
-	unsigned int pcmcia_irq;
-	struct device dev;
-	void *driver_data;
-	int resume_status;
-};
-
-struct pccard_resource_ops {
-	int (*validate_mem)(struct pcmcia_socket *);
-	int (*find_io)(struct pcmcia_socket *, unsigned int, unsigned int *, unsigned int, unsigned int, struct resource **);
-	struct resource * (*find_mem)(long unsigned int, long unsigned int, long unsigned int, int, struct pcmcia_socket *);
-	int (*init)(struct pcmcia_socket *);
-	void (*exit)(struct pcmcia_socket *);
-};
-
-struct pcmcia_callback {
-	struct module *owner;
-	int (*add)(struct pcmcia_socket *);
-	int (*remove)(struct pcmcia_socket *);
-	void (*requery)(struct pcmcia_socket *);
-	int (*validate)(struct pcmcia_socket *, unsigned int *);
-	int (*suspend)(struct pcmcia_socket *);
-	int (*early_resume)(struct pcmcia_socket *);
-	int (*resume)(struct pcmcia_socket *);
-};
-
-enum {
-	PCMCIA_IOPORT_0 = 0,
-	PCMCIA_IOPORT_1 = 1,
-	PCMCIA_IOMEM_0 = 2,
-	PCMCIA_IOMEM_1 = 3,
-	PCMCIA_IOMEM_2 = 4,
-	PCMCIA_IOMEM_3 = 5,
-	PCMCIA_NUM_RESOURCES = 6,
-};
-
-struct cistpl_longlink_mfc_t {
-	u_char nfn;
-	struct {
-		u_char space;
-		u_int addr;
-	} fn[8];
-};
-
-typedef struct cistpl_longlink_mfc_t cistpl_longlink_mfc_t;
-
-struct cistpl_vers_1_t {
-	u_char major;
-	u_char minor;
-	u_char ns;
-	u_char ofs[4];
-	char str[254];
-};
-
-typedef struct cistpl_vers_1_t cistpl_vers_1_t;
-
-struct cistpl_manfid_t {
-	u_short manf;
-	u_short card;
-};
-
-typedef struct cistpl_manfid_t cistpl_manfid_t;
-
-struct cistpl_funcid_t {
-	u_char func;
-	u_char sysinit;
-};
-
-typedef struct cistpl_funcid_t cistpl_funcid_t;
-
-struct cistpl_config_t {
-	u_char last_idx;
-	u_int base;
-	u_int rmask[4];
-	u_char subtuples;
-};
-
-typedef struct cistpl_config_t cistpl_config_t;
-
-struct cistpl_device_geo_t {
-	u_char ngeo;
-	struct {
-		u_char buswidth;
-		u_int erase_block;
-		u_int read_block;
-		u_int write_block;
-		u_int partition;
-		u_int interleave;
-	} geo[4];
-};
-
-typedef struct cistpl_device_geo_t cistpl_device_geo_t;
-
-struct pcmcia_device_id {
-	__u16 match_flags;
-	__u16 manf_id;
-	__u16 card_id;
-	__u8 func_id;
-	__u8 function;
-	__u8 device_no;
-	__u32 prod_id_hash[4];
-	const char *prod_id[4];
-	kernel_ulong_t driver_info;
-	char *cisfile;
-};
-
-struct pcmcia_dynids {
-	struct mutex lock;
-	struct list_head list;
-};
-
-struct pcmcia_device;
-
-struct pcmcia_driver {
-	const char *name;
-	int (*probe)(struct pcmcia_device *);
-	void (*remove)(struct pcmcia_device *);
-	int (*suspend)(struct pcmcia_device *);
-	int (*resume)(struct pcmcia_device *);
-	struct module *owner;
-	const struct pcmcia_device_id *id_table;
-	struct device_driver drv;
-	struct pcmcia_dynids dynids;
-};
-
-struct config_t;
-
-struct pcmcia_device {
-	struct pcmcia_socket *socket;
-	char *devname;
-	u8 device_no;
-	u8 func;
-	struct config_t *function_config;
-	struct list_head socket_device_list;
-	unsigned int irq;
-	struct resource *resource[6];
-	resource_size_t card_addr;
-	unsigned int vpp;
-	unsigned int config_flags;
-	unsigned int config_base;
-	unsigned int config_index;
-	unsigned int config_regs;
-	unsigned int io_lines;
-	u16 suspended: 1;
-	u16 _irq: 1;
-	u16 _io: 1;
-	u16 _win: 4;
-	u16 _locked: 1;
-	u16 allow_func_id_match: 1;
-	u16 has_manf_id: 1;
-	u16 has_card_id: 1;
-	u16 has_func_id: 1;
-	u16 reserved: 4;
-	u8 func_id;
-	u16 manf_id;
-	u16 card_id;
-	char *prod_id[4];
-	u64 dma_mask;
-	struct device dev;
-	void *priv;
-	unsigned int open;
-};
-
-struct config_t {
-	struct kref ref;
-	unsigned int state;
-	struct resource io[2];
-	struct resource mem[4];
-};
-
-typedef struct config_t config_t;
-
-struct pcmcia_dynid {
-	struct list_head node;
-	struct pcmcia_device_id id;
-};
-
-typedef long unsigned int u_long;
-
-typedef struct pccard_io_map pccard_io_map;
-
-typedef unsigned char cisdata_t;
-
-struct cistpl_longlink_t {
-	u_int addr;
-};
-
-typedef struct cistpl_longlink_t cistpl_longlink_t;
-
-struct cistpl_checksum_t {
-	u_short addr;
-	u_short len;
-	u_char sum;
-};
-
-typedef struct cistpl_checksum_t cistpl_checksum_t;
-
-struct cistpl_altstr_t {
-	u_char ns;
-	u_char ofs[4];
-	char str[254];
-};
-
-typedef struct cistpl_altstr_t cistpl_altstr_t;
-
-struct cistpl_device_t {
-	u_char ndev;
-	struct {
-		u_char type;
-		u_char wp;
-		u_int speed;
-		u_int size;
-	} dev[4];
-};
-
-typedef struct cistpl_device_t cistpl_device_t;
-
-struct cistpl_jedec_t {
-	u_char nid;
-	struct {
-		u_char mfr;
-		u_char info;
-	} id[4];
-};
-
-typedef struct cistpl_jedec_t cistpl_jedec_t;
-
-struct cistpl_funce_t {
-	u_char type;
-	u_char data[0];
-};
-
-typedef struct cistpl_funce_t cistpl_funce_t;
-
-struct cistpl_bar_t {
-	u_char attr;
-	u_int size;
-};
-
-typedef struct cistpl_bar_t cistpl_bar_t;
-
-struct cistpl_power_t {
-	u_char present;
-	u_char flags;
-	u_int param[7];
-};
-
-typedef struct cistpl_power_t cistpl_power_t;
-
-struct cistpl_timing_t {
-	u_int wait;
-	u_int waitscale;
-	u_int ready;
-	u_int rdyscale;
-	u_int reserved;
-	u_int rsvscale;
-};
-
-typedef struct cistpl_timing_t cistpl_timing_t;
-
-struct cistpl_io_t {
-	u_char flags;
-	u_char nwin;
-	struct {
-		u_int base;
-		u_int len;
-	} win[16];
-};
-
-typedef struct cistpl_io_t cistpl_io_t;
-
-struct cistpl_irq_t {
-	u_int IRQInfo1;
-	u_int IRQInfo2;
-};
-
-typedef struct cistpl_irq_t cistpl_irq_t;
-
-struct cistpl_mem_t {
-	u_char flags;
-	u_char nwin;
-	struct {
-		u_int len;
-		u_int card_addr;
-		u_int host_addr;
-	} win[8];
-};
-
-typedef struct cistpl_mem_t cistpl_mem_t;
-
-struct cistpl_cftable_entry_t {
-	u_char index;
-	u_short flags;
-	u_char interface;
-	cistpl_power_t vcc;
-	cistpl_power_t vpp1;
-	cistpl_power_t vpp2;
-	cistpl_timing_t timing;
-	cistpl_io_t io;
-	cistpl_irq_t irq;
-	cistpl_mem_t mem;
-	u_char subtuples;
-};
-
-typedef struct cistpl_cftable_entry_t cistpl_cftable_entry_t;
-
-struct cistpl_cftable_entry_cb_t {
-	u_char index;
-	u_int flags;
-	cistpl_power_t vcc;
-	cistpl_power_t vpp1;
-	cistpl_power_t vpp2;
-	u_char io;
-	cistpl_irq_t irq;
-	u_char mem;
-	u_char subtuples;
-};
-
-typedef struct cistpl_cftable_entry_cb_t cistpl_cftable_entry_cb_t;
-
-struct cistpl_vers_2_t {
-	u_char vers;
-	u_char comply;
-	u_short dindex;
-	u_char vspec8;
-	u_char vspec9;
-	u_char nhdr;
-	u_char vendor;
-	u_char info;
-	char str[244];
-};
-
-typedef struct cistpl_vers_2_t cistpl_vers_2_t;
-
-struct cistpl_org_t {
-	u_char data_org;
-	char desc[30];
-};
-
-typedef struct cistpl_org_t cistpl_org_t;
-
-struct cistpl_format_t {
-	u_char type;
-	u_char edc;
-	u_int offset;
-	u_int length;
-};
-
-typedef struct cistpl_format_t cistpl_format_t;
-
-union cisparse_t {
-	cistpl_device_t device;
-	cistpl_checksum_t checksum;
-	cistpl_longlink_t longlink;
-	cistpl_longlink_mfc_t longlink_mfc;
-	cistpl_vers_1_t version_1;
-	cistpl_altstr_t altstr;
-	cistpl_jedec_t jedec;
-	cistpl_manfid_t manfid;
-	cistpl_funcid_t funcid;
-	cistpl_funce_t funce;
-	cistpl_bar_t bar;
-	cistpl_config_t config;
-	cistpl_cftable_entry_t cftable_entry;
-	cistpl_cftable_entry_cb_t cftable_entry_cb;
-	cistpl_device_geo_t device_geo;
-	cistpl_vers_2_t vers_2;
-	cistpl_org_t org;
-	cistpl_format_t format;
-};
-
-typedef union cisparse_t cisparse_t;
-
-struct tuple_t {
-	u_int Attributes;
-	cisdata_t DesiredTuple;
-	u_int Flags;
-	u_int LinkOffset;
-	u_int CISOffset;
-	cisdata_t TupleCode;
-	cisdata_t TupleLink;
-	cisdata_t TupleOffset;
-	cisdata_t TupleDataMax;
-	cisdata_t TupleDataLen;
-	cisdata_t *TupleData;
-};
-
-typedef struct tuple_t tuple_t;
-
-struct cis_cache_entry {
-	struct list_head node;
-	unsigned int addr;
-	unsigned int len;
-	unsigned int attr;
-	unsigned char cache[0];
-};
-
-struct tuple_flags {
-	u_int link_space: 4;
-	u_int has_link: 1;
-	u_int mfc_fn: 3;
-	u_int space: 4;
-};
-
-struct pcmcia_cfg_mem {
-	struct pcmcia_device *p_dev;
-	int (*conf_check)(struct pcmcia_device *, void *);
-	void *priv_data;
-	cisparse_t parse;
-	cistpl_cftable_entry_t dflt;
-};
-
-struct pcmcia_loop_mem {
-	struct pcmcia_device *p_dev;
-	void *priv_data;
-	int (*loop_tuple)(struct pcmcia_device *, tuple_t *, void *);
-};
-
-struct pcmcia_loop_get {
-	size_t len;
-	cisdata_t **buf;
-};
-
-struct resource_map {
-	u_long base;
-	u_long num;
-	struct resource_map *next;
-};
-
-struct socket_data {
-	struct resource_map mem_db;
-	struct resource_map mem_db_valid;
-	struct resource_map io_db;
-};
-
-struct pcmcia_align_data {
-	long unsigned int mask;
-	long unsigned int offset;
-	struct resource_map *map;
-};
-
-struct yenta_socket;
-
-struct cardbus_type {
-	int (*override)(struct yenta_socket *);
-	void (*save_state)(struct yenta_socket *);
-	void (*restore_state)(struct yenta_socket *);
-	int (*sock_init)(struct yenta_socket *);
-};
-
-struct yenta_socket {
-	struct pci_dev *dev;
-	int cb_irq;
-	int io_irq;
-	void *base;
-	struct timer_list poll_timer;
-	struct pcmcia_socket socket;
-	struct cardbus_type *type;
-	u32 flags;
-	unsigned int probe_status;
-	unsigned int private[8];
-	u32 saved_state[2];
-};
-
-enum {
-	CARDBUS_TYPE_DEFAULT = 4294967295,
-	CARDBUS_TYPE_TI = 0,
-	CARDBUS_TYPE_TI113X = 1,
-	CARDBUS_TYPE_TI12XX = 2,
-	CARDBUS_TYPE_TI1250 = 3,
-	CARDBUS_TYPE_RICOH = 4,
-	CARDBUS_TYPE_TOPIC95 = 5,
-	CARDBUS_TYPE_TOPIC97 = 6,
-	CARDBUS_TYPE_O2MICRO = 7,
-	CARDBUS_TYPE_ENE = 8,
-};
-
-enum usb_device_speed {
-	USB_SPEED_UNKNOWN = 0,
-	USB_SPEED_LOW = 1,
-	USB_SPEED_FULL = 2,
-	USB_SPEED_HIGH = 3,
-	USB_SPEED_WIRELESS = 4,
-	USB_SPEED_SUPER = 5,
-	USB_SPEED_SUPER_PLUS = 6,
-};
-
-enum usb_device_state {
-	USB_STATE_NOTATTACHED = 0,
-	USB_STATE_ATTACHED = 1,
-	USB_STATE_POWERED = 2,
-	USB_STATE_RECONNECTING = 3,
-	USB_STATE_UNAUTHENTICATED = 4,
-	USB_STATE_DEFAULT = 5,
-	USB_STATE_ADDRESS = 6,
-	USB_STATE_CONFIGURED = 7,
-	USB_STATE_SUSPENDED = 8,
-};
-
-enum usb_otg_state {
-	OTG_STATE_UNDEFINED = 0,
-	OTG_STATE_B_IDLE = 1,
-	OTG_STATE_B_SRP_INIT = 2,
-	OTG_STATE_B_PERIPHERAL = 3,
-	OTG_STATE_B_WAIT_ACON = 4,
-	OTG_STATE_B_HOST = 5,
-	OTG_STATE_A_IDLE = 6,
-	OTG_STATE_A_WAIT_VRISE = 7,
-	OTG_STATE_A_WAIT_BCON = 8,
-	OTG_STATE_A_HOST = 9,
-	OTG_STATE_A_SUSPEND = 10,
-	OTG_STATE_A_PERIPHERAL = 11,
-	OTG_STATE_A_WAIT_VFALL = 12,
-	OTG_STATE_A_VBUS_ERR = 13,
-};
-
-enum usb_dr_mode {
-	USB_DR_MODE_UNKNOWN = 0,
-	USB_DR_MODE_HOST = 1,
-	USB_DR_MODE_PERIPHERAL = 2,
-	USB_DR_MODE_OTG = 3,
-};
-
-struct usb_device_id {
-	__u16 match_flags;
-	__u16 idVendor;
-	__u16 idProduct;
-	__u16 bcdDevice_lo;
-	__u16 bcdDevice_hi;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bInterfaceClass;
-	__u8 bInterfaceSubClass;
-	__u8 bInterfaceProtocol;
-	__u8 bInterfaceNumber;
-	kernel_ulong_t driver_info;
-};
-
-struct usb_descriptor_header {
-	__u8 bLength;
-	__u8 bDescriptorType;
-};
-
-struct usb_device_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdUSB;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bMaxPacketSize0;
-	__le16 idVendor;
-	__le16 idProduct;
-	__le16 bcdDevice;
-	__u8 iManufacturer;
-	__u8 iProduct;
-	__u8 iSerialNumber;
-	__u8 bNumConfigurations;
-};
-
-struct usb_config_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumInterfaces;
-	__u8 bConfigurationValue;
-	__u8 iConfiguration;
-	__u8 bmAttributes;
-	__u8 bMaxPower;
-} __attribute__((packed));
-
-struct usb_interface_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bInterfaceNumber;
-	__u8 bAlternateSetting;
-	__u8 bNumEndpoints;
-	__u8 bInterfaceClass;
-	__u8 bInterfaceSubClass;
-	__u8 bInterfaceProtocol;
-	__u8 iInterface;
-};
-
-struct usb_endpoint_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bEndpointAddress;
-	__u8 bmAttributes;
-	__le16 wMaxPacketSize;
-	__u8 bInterval;
-	__u8 bRefresh;
-	__u8 bSynchAddress;
-} __attribute__((packed));
-
-struct usb_ssp_isoc_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wReseved;
-	__le32 dwBytesPerInterval;
-};
-
-struct usb_ss_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bMaxBurst;
-	__u8 bmAttributes;
-	__le16 wBytesPerInterval;
-};
-
-struct usb_interface_assoc_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bFirstInterface;
-	__u8 bInterfaceCount;
-	__u8 bFunctionClass;
-	__u8 bFunctionSubClass;
-	__u8 bFunctionProtocol;
-	__u8 iFunction;
-};
-
-struct usb_bos_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumDeviceCaps;
-} __attribute__((packed));
-
-struct usb_ext_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__le32 bmAttributes;
-} __attribute__((packed));
-
-struct usb_ss_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bmAttributes;
-	__le16 wSpeedSupported;
-	__u8 bFunctionalitySupport;
-	__u8 bU1devExitLat;
-	__le16 bU2DevExitLat;
-};
-
-struct usb_ss_container_id_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__u8 ContainerID[16];
-};
-
-struct usb_ssp_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__le32 bmAttributes;
-	__le16 wFunctionalitySupport;
-	__le16 wReserved;
-	__le32 bmSublinkSpeedAttr[1];
-};
-
-struct usb_ptm_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-};
-
-enum usb3_link_state {
-	USB3_LPM_U0 = 0,
-	USB3_LPM_U1 = 1,
-	USB3_LPM_U2 = 2,
-	USB3_LPM_U3 = 3,
-};
-
-struct ep_device;
-
-struct usb_host_endpoint {
-	struct usb_endpoint_descriptor desc;
-	struct usb_ss_ep_comp_descriptor ss_ep_comp;
-	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
-	char: 8;
-	struct list_head urb_list;
-	void *hcpriv;
-	struct ep_device *ep_dev;
-	unsigned char *extra;
-	int extralen;
-	int enabled;
-	int streams;
-	int: 32;
-} __attribute__((packed));
-
-struct usb_host_interface {
-	struct usb_interface_descriptor desc;
-	int extralen;
-	unsigned char *extra;
-	struct usb_host_endpoint *endpoint;
-	char *string;
-};
-
-enum usb_interface_condition {
-	USB_INTERFACE_UNBOUND = 0,
-	USB_INTERFACE_BINDING = 1,
-	USB_INTERFACE_BOUND = 2,
-	USB_INTERFACE_UNBINDING = 3,
-};
-
-struct usb_interface {
-	struct usb_host_interface *altsetting;
-	struct usb_host_interface *cur_altsetting;
-	unsigned int num_altsetting;
-	struct usb_interface_assoc_descriptor *intf_assoc;
-	int minor;
-	enum usb_interface_condition condition;
-	unsigned int sysfs_files_created: 1;
-	unsigned int ep_devs_created: 1;
-	unsigned int unregistering: 1;
-	unsigned int needs_remote_wakeup: 1;
-	unsigned int needs_altsetting0: 1;
-	unsigned int needs_binding: 1;
-	unsigned int resetting_device: 1;
-	unsigned int authorized: 1;
-	struct device dev;
-	struct device *usb_dev;
-	struct work_struct reset_ws;
-};
-
-struct usb_interface_cache {
-	unsigned int num_altsetting;
-	struct kref ref;
-	struct usb_host_interface altsetting[0];
-};
-
-struct usb_host_config {
-	struct usb_config_descriptor desc;
-	char *string;
-	struct usb_interface_assoc_descriptor *intf_assoc[16];
-	struct usb_interface *interface[32];
-	struct usb_interface_cache *intf_cache[32];
-	unsigned char *extra;
-	int extralen;
-};
-
-struct usb_host_bos {
-	struct usb_bos_descriptor *desc;
-	struct usb_ext_cap_descriptor *ext_cap;
-	struct usb_ss_cap_descriptor *ss_cap;
-	struct usb_ssp_cap_descriptor *ssp_cap;
-	struct usb_ss_container_id_descriptor *ss_id;
-	struct usb_ptm_cap_descriptor *ptm_cap;
-};
-
-struct usb_devmap {
-	long unsigned int devicemap[2];
-};
-
-struct usb_device;
-
-struct mon_bus;
-
-struct usb_bus {
-	struct device *controller;
-	struct device *sysdev;
-	int busnum;
-	const char *bus_name;
-	u8 uses_pio_for_control;
-	u8 otg_port;
-	unsigned int is_b_host: 1;
-	unsigned int b_hnp_enable: 1;
-	unsigned int no_stop_on_short: 1;
-	unsigned int no_sg_constraint: 1;
-	unsigned int sg_tablesize;
-	int devnum_next;
-	struct mutex devnum_next_mutex;
-	struct usb_devmap devmap;
-	struct usb_device *root_hub;
-	struct usb_bus *hs_companion;
-	int bandwidth_allocated;
-	int bandwidth_int_reqs;
-	int bandwidth_isoc_reqs;
-	unsigned int resuming_ports;
-	struct mon_bus *mon_bus;
-	int monitored;
-};
-
-struct wusb_dev;
-
-enum usb_device_removable {
-	USB_DEVICE_REMOVABLE_UNKNOWN = 0,
-	USB_DEVICE_REMOVABLE = 1,
-	USB_DEVICE_FIXED = 2,
-};
-
-struct usb2_lpm_parameters {
-	unsigned int besl;
-	int timeout;
-};
-
-struct usb3_lpm_parameters {
-	unsigned int mel;
-	unsigned int pel;
-	unsigned int sel;
-	int timeout;
-};
-
-struct usb_tt;
-
-struct usb_device {
-	int devnum;
-	char devpath[16];
-	u32 route;
-	enum usb_device_state state;
-	enum usb_device_speed speed;
-	unsigned int rx_lanes;
-	unsigned int tx_lanes;
-	struct usb_tt *tt;
-	int ttport;
-	unsigned int toggle[2];
-	struct usb_device *parent;
-	struct usb_bus *bus;
-	struct usb_host_endpoint ep0;
-	struct device dev;
-	struct usb_device_descriptor descriptor;
-	struct usb_host_bos *bos;
-	struct usb_host_config *config;
-	struct usb_host_config *actconfig;
-	struct usb_host_endpoint *ep_in[16];
-	struct usb_host_endpoint *ep_out[16];
-	char **rawdescriptors;
-	short unsigned int bus_mA;
-	u8 portnum;
-	u8 level;
-	u8 devaddr;
-	unsigned int can_submit: 1;
-	unsigned int persist_enabled: 1;
-	unsigned int have_langid: 1;
-	unsigned int authorized: 1;
-	unsigned int authenticated: 1;
-	unsigned int wusb: 1;
-	unsigned int lpm_capable: 1;
-	unsigned int usb2_hw_lpm_capable: 1;
-	unsigned int usb2_hw_lpm_besl_capable: 1;
-	unsigned int usb2_hw_lpm_enabled: 1;
-	unsigned int usb2_hw_lpm_allowed: 1;
-	unsigned int usb3_lpm_u1_enabled: 1;
-	unsigned int usb3_lpm_u2_enabled: 1;
-	int string_langid;
-	char *product;
-	char *manufacturer;
-	char *serial;
-	struct list_head filelist;
-	int maxchild;
-	u32 quirks;
-	atomic_t urbnum;
-	long unsigned int active_duration;
-	long unsigned int connect_time;
-	unsigned int do_remote_wakeup: 1;
-	unsigned int reset_resume: 1;
-	unsigned int port_is_suspended: 1;
-	struct wusb_dev *wusb_dev;
-	int slot_id;
-	enum usb_device_removable removable;
-	struct usb2_lpm_parameters l1_params;
-	struct usb3_lpm_parameters u1_params;
-	struct usb3_lpm_parameters u2_params;
-	unsigned int lpm_disable_count;
-	u16 hub_delay;
-};
-
-enum usb_port_connect_type {
-	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
-	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
-	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
-	USB_PORT_NOT_USED = 3,
-};
-
-struct usb_tt {
-	struct usb_device *hub;
-	int multi;
-	unsigned int think_time;
-	void *hcpriv;
-	spinlock_t lock;
-	struct list_head clear_list;
-	struct work_struct clear_work;
-};
-
-struct usb_dynids {
-	spinlock_t lock;
-	struct list_head list;
-};
-
-struct usbdrv_wrap {
-	struct device_driver driver;
-	int for_devices;
-};
-
-struct usb_driver {
-	const char *name;
-	int (*probe)(struct usb_interface *, const struct usb_device_id *);
-	void (*disconnect)(struct usb_interface *);
-	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
-	int (*suspend)(struct usb_interface *, pm_message_t);
-	int (*resume)(struct usb_interface *);
-	int (*reset_resume)(struct usb_interface *);
-	int (*pre_reset)(struct usb_interface *);
-	int (*post_reset)(struct usb_interface *);
-	const struct usb_device_id *id_table;
-	const struct attribute_group **dev_groups;
-	struct usb_dynids dynids;
-	struct usbdrv_wrap drvwrap;
-	unsigned int no_dynamic_id: 1;
-	unsigned int supports_autosuspend: 1;
-	unsigned int disable_hub_initiated_lpm: 1;
-	unsigned int soft_unbind: 1;
-};
-
-struct usb_device_driver {
-	const char *name;
-	int (*probe)(struct usb_device *);
-	void (*disconnect)(struct usb_device *);
-	int (*suspend)(struct usb_device *, pm_message_t);
-	int (*resume)(struct usb_device *, pm_message_t);
-	const struct attribute_group **dev_groups;
-	struct usbdrv_wrap drvwrap;
-	unsigned int supports_autosuspend: 1;
-};
-
-struct usb_iso_packet_descriptor {
-	unsigned int offset;
-	unsigned int length;
-	unsigned int actual_length;
-	int status;
-};
-
-struct usb_anchor {
-	struct list_head urb_list;
-	wait_queue_head_t wait;
-	spinlock_t lock;
-	atomic_t suspend_wakeups;
-	unsigned int poisoned: 1;
-};
-
-struct urb;
-
-typedef void (*usb_complete_t)(struct urb *);
-
-struct urb {
-	struct kref kref;
-	int unlinked;
-	void *hcpriv;
-	atomic_t use_count;
-	atomic_t reject;
-	struct list_head urb_list;
-	struct list_head anchor_list;
-	struct usb_anchor *anchor;
-	struct usb_device *dev;
-	struct usb_host_endpoint *ep;
-	unsigned int pipe;
-	unsigned int stream_id;
-	int status;
-	unsigned int transfer_flags;
-	void *transfer_buffer;
-	dma_addr_t transfer_dma;
-	struct scatterlist *sg;
-	int num_mapped_sgs;
-	int num_sgs;
-	u32 transfer_buffer_length;
-	u32 actual_length;
-	unsigned char *setup_packet;
-	dma_addr_t setup_dma;
-	int start_frame;
-	int number_of_packets;
-	int interval;
-	int error_count;
-	void *context;
-	usb_complete_t complete;
-	struct usb_iso_packet_descriptor iso_frame_desc[0];
-};
-
-struct giveback_urb_bh {
-	bool running;
-	spinlock_t lock;
-	struct list_head head;
-	struct tasklet_struct bh;
-	struct usb_host_endpoint *completing_ep;
-};
-
-enum usb_dev_authorize_policy {
-	USB_DEVICE_AUTHORIZE_NONE = 0,
-	USB_DEVICE_AUTHORIZE_ALL = 1,
-	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
-};
-
-struct usb_phy_roothub;
-
-struct hc_driver;
-
-struct usb_phy;
-
-struct usb_hcd {
-	struct usb_bus self;
-	struct kref kref;
-	const char *product_desc;
-	int speed;
-	char irq_descr[24];
-	struct timer_list rh_timer;
-	struct urb *status_urb;
-	struct work_struct wakeup_work;
-	struct work_struct died_work;
-	const struct hc_driver *driver;
-	struct usb_phy *usb_phy;
-	struct usb_phy_roothub *phy_roothub;
-	long unsigned int flags;
-	enum usb_dev_authorize_policy dev_policy;
-	unsigned int rh_registered: 1;
-	unsigned int rh_pollable: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int msi_enabled: 1;
-	unsigned int skip_phy_initialization: 1;
-	unsigned int uses_new_polling: 1;
-	unsigned int wireless: 1;
-	unsigned int has_tt: 1;
-	unsigned int amd_resume_bug: 1;
-	unsigned int can_do_streams: 1;
-	unsigned int tpl_support: 1;
-	unsigned int cant_recv_wakeups: 1;
-	unsigned int irq;
-	void *regs;
-	resource_size_t rsrc_start;
-	resource_size_t rsrc_len;
-	unsigned int power_budget;
-	struct giveback_urb_bh high_prio_bh;
-	struct giveback_urb_bh low_prio_bh;
-	struct mutex *address0_mutex;
-	struct mutex *bandwidth_mutex;
-	struct usb_hcd *shared_hcd;
-	struct usb_hcd *primary_hcd;
-	struct dma_pool___2 *pool[4];
-	int state;
-	struct gen_pool *localmem_pool;
-	long unsigned int hcd_priv[0];
-};
-
-struct hc_driver {
-	const char *description;
-	const char *product_desc;
-	size_t hcd_priv_size;
-	irqreturn_t (*irq)(struct usb_hcd *);
-	int flags;
-	int (*reset)(struct usb_hcd *);
-	int (*start)(struct usb_hcd *);
-	int (*pci_suspend)(struct usb_hcd *, bool);
-	int (*pci_resume)(struct usb_hcd *, bool);
-	void (*stop)(struct usb_hcd *);
-	void (*shutdown)(struct usb_hcd *);
-	int (*get_frame_number)(struct usb_hcd *);
-	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
-	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
-	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
-	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
-	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
-	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*hub_status_data)(struct usb_hcd *, char *);
-	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
-	int (*bus_suspend)(struct usb_hcd *);
-	int (*bus_resume)(struct usb_hcd *);
-	int (*start_port_reset)(struct usb_hcd *, unsigned int);
-	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
-	void (*relinquish_port)(struct usb_hcd *, int);
-	int (*port_handed_over)(struct usb_hcd *, int);
-	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
-	void (*free_dev)(struct usb_hcd *, struct usb_device *);
-	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
-	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
-	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
-	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
-	int (*address_device)(struct usb_hcd *, struct usb_device *);
-	int (*enable_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
-	int (*reset_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_device)(struct usb_hcd *, struct usb_device *);
-	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
-	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*find_raw_port_number)(struct usb_hcd *, int);
-	int (*port_power)(struct usb_hcd *, int, bool);
-};
-
-enum usb_phy_type {
-	USB_PHY_TYPE_UNDEFINED = 0,
-	USB_PHY_TYPE_USB2 = 1,
-	USB_PHY_TYPE_USB3 = 2,
-};
-
-enum usb_phy_events {
-	USB_EVENT_NONE = 0,
-	USB_EVENT_VBUS = 1,
-	USB_EVENT_ID = 2,
-	USB_EVENT_CHARGER = 3,
-	USB_EVENT_ENUMERATED = 4,
-};
-
-struct extcon_dev;
-
-enum usb_charger_type {
-	UNKNOWN_TYPE = 0,
-	SDP_TYPE = 1,
-	DCP_TYPE = 2,
-	CDP_TYPE = 3,
-	ACA_TYPE = 4,
-};
-
-enum usb_charger_state {
-	USB_CHARGER_DEFAULT = 0,
-	USB_CHARGER_PRESENT = 1,
-	USB_CHARGER_ABSENT = 2,
-};
-
-struct usb_charger_current {
-	unsigned int sdp_min;
-	unsigned int sdp_max;
-	unsigned int dcp_min;
-	unsigned int dcp_max;
-	unsigned int cdp_min;
-	unsigned int cdp_max;
-	unsigned int aca_min;
-	unsigned int aca_max;
-};
-
-struct usb_otg;
-
-struct usb_phy_io_ops;
-
-struct usb_phy {
-	struct device *dev;
-	const char *label;
-	unsigned int flags;
-	enum usb_phy_type type;
-	enum usb_phy_events last_event;
-	struct usb_otg *otg;
-	struct device *io_dev;
-	struct usb_phy_io_ops *io_ops;
-	void *io_priv;
-	struct extcon_dev *edev;
-	struct extcon_dev *id_edev;
-	struct notifier_block vbus_nb;
-	struct notifier_block id_nb;
-	struct notifier_block type_nb;
-	enum usb_charger_type chg_type;
-	enum usb_charger_state chg_state;
-	struct usb_charger_current chg_cur;
-	struct work_struct chg_work;
-	struct atomic_notifier_head notifier;
-	u16 port_status;
-	u16 port_change;
-	struct list_head head;
-	int (*init)(struct usb_phy *);
-	void (*shutdown)(struct usb_phy *);
-	int (*set_vbus)(struct usb_phy *, int);
-	int (*set_power)(struct usb_phy *, unsigned int);
-	int (*set_suspend)(struct usb_phy *, int);
-	int (*set_wakeup)(struct usb_phy *, bool);
-	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
-	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
-	enum usb_charger_type (*charger_detect)(struct usb_phy *);
-};
-
-struct usb_port_status {
-	__le16 wPortStatus;
-	__le16 wPortChange;
-	__le32 dwExtPortStatus;
-};
-
-struct usb_hub_status {
-	__le16 wHubStatus;
-	__le16 wHubChange;
-};
-
-struct usb_hub_descriptor {
-	__u8 bDescLength;
-	__u8 bDescriptorType;
-	__u8 bNbrPorts;
-	__le16 wHubCharacteristics;
-	__u8 bPwrOn2PwrGood;
-	__u8 bHubContrCurrent;
-	union {
-		struct {
-			__u8 DeviceRemovable[4];
-			__u8 PortPwrCtrlMask[4];
-		} hs;
-		struct {
-			__u8 bHubHdrDecLat;
-			__le16 wHubDelay;
-			__le16 DeviceRemovable;
-		} __attribute__((packed)) ss;
-	} u;
-} __attribute__((packed));
-
-struct usb_mon_operations {
-	void (*urb_submit)(struct usb_bus *, struct urb *);
-	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
-	void (*urb_complete)(struct usb_bus *, struct urb *, int);
-};
-
-struct usb_phy_io_ops {
-	int (*read)(struct usb_phy *, u32);
-	int (*write)(struct usb_phy *, u32, u32);
-};
-
-struct usb_gadget;
-
-struct usb_otg {
-	u8 default_a;
-	struct phy___2 *phy;
-	struct usb_phy *usb_phy;
-	struct usb_bus *host;
-	struct usb_gadget *gadget;
-	enum usb_otg_state state;
-	int (*set_host)(struct usb_otg *, struct usb_bus *);
-	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
-	int (*set_vbus)(struct usb_otg *, bool);
-	int (*start_srp)(struct usb_otg *);
-	int (*start_hnp)(struct usb_otg *);
-};
-
-typedef u32 usb_port_location_t;
-
-struct usb_port;
-
-struct usb_hub {
-	struct device *intfdev;
-	struct usb_device *hdev;
-	struct kref kref;
-	struct urb *urb;
-	u8 (*buffer)[8];
-	union {
-		struct usb_hub_status hub;
-		struct usb_port_status port;
-	} *status;
-	struct mutex status_mutex;
-	int error;
-	int nerrors;
-	long unsigned int event_bits[1];
-	long unsigned int change_bits[1];
-	long unsigned int removed_bits[1];
-	long unsigned int wakeup_bits[1];
-	long unsigned int power_bits[1];
-	long unsigned int child_usage_bits[1];
-	long unsigned int warm_reset_bits[1];
-	struct usb_hub_descriptor *descriptor;
-	struct usb_tt tt;
-	unsigned int mA_per_port;
-	unsigned int wakeup_enabled_descendants;
-	unsigned int limited_power: 1;
-	unsigned int quiescing: 1;
-	unsigned int disconnected: 1;
-	unsigned int in_reset: 1;
-	unsigned int quirk_check_port_auto_suspend: 1;
-	unsigned int has_indicators: 1;
-	u8 indicator[31];
-	struct delayed_work leds;
-	struct delayed_work init_work;
-	struct work_struct events;
-	spinlock_t irq_urb_lock;
-	struct timer_list irq_urb_retry;
-	struct usb_port **ports;
-};
-
-struct usb_dev_state;
-
-struct usb_port {
-	struct usb_device *child;
-	struct device dev;
-	struct usb_dev_state *port_owner;
-	struct usb_port *peer;
-	struct dev_pm_qos_request *req;
-	enum usb_port_connect_type connect_type;
-	usb_port_location_t location;
-	struct mutex status_lock;
-	u32 over_current_count;
-	u8 portnum;
-	u32 quirks;
-	unsigned int is_superspeed: 1;
-	unsigned int usb3_lpm_u1_permit: 1;
-	unsigned int usb3_lpm_u2_permit: 1;
-};
-
-struct find_interface_arg {
-	int minor;
-	struct device_driver *drv;
-};
-
-struct each_dev_arg {
-	void *data;
-	int (*fn)(struct usb_device *, void *);
-};
-
-struct usb_qualifier_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdUSB;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bMaxPacketSize0;
-	__u8 bNumConfigurations;
-	__u8 bRESERVED;
-};
-
-struct usb_set_sel_req {
-	__u8 u1_sel;
-	__u8 u1_pel;
-	__le16 u2_sel;
-	__le16 u2_pel;
-};
-
-struct usbdevfs_hub_portinfo {
-	char nports;
-	char port[127];
-};
-
-enum hub_led_mode {
-	INDICATOR_AUTO = 0,
-	INDICATOR_CYCLE = 1,
-	INDICATOR_GREEN_BLINK = 2,
-	INDICATOR_GREEN_BLINK_OFF = 3,
-	INDICATOR_AMBER_BLINK = 4,
-	INDICATOR_AMBER_BLINK_OFF = 5,
-	INDICATOR_ALT_BLINK = 6,
-	INDICATOR_ALT_BLINK_OFF = 7,
-};
-
-struct usb_tt_clear {
-	struct list_head clear_list;
-	unsigned int tt;
-	u16 devinfo;
-	struct usb_hcd *hcd;
-	struct usb_host_endpoint *ep;
-};
-
-enum hub_activation_type {
-	HUB_INIT = 0,
-	HUB_INIT2 = 1,
-	HUB_INIT3 = 2,
-	HUB_POST_RESET = 3,
-	HUB_RESUME = 4,
-	HUB_RESET_RESUME = 5,
-};
-
-enum hub_quiescing_type {
-	HUB_DISCONNECT = 0,
-	HUB_PRE_RESET = 1,
-	HUB_SUSPEND = 2,
-};
-
-struct usb_ctrlrequest {
-	__u8 bRequestType;
-	__u8 bRequest;
-	__le16 wValue;
-	__le16 wIndex;
-	__le16 wLength;
-};
-
-enum usb_led_event {
-	USB_LED_EVENT_HOST = 0,
-	USB_LED_EVENT_GADGET = 1,
-};
-
-struct usb_sg_request {
-	int status;
-	size_t bytes;
-	spinlock_t lock;
-	struct usb_device *dev;
-	int pipe;
-	int entries;
-	struct urb **urbs;
-	int count;
-	struct completion complete;
-};
-
-struct usb_cdc_header_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdCDC;
-} __attribute__((packed));
-
-struct usb_cdc_call_mgmt_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 bmCapabilities;
-	__u8 bDataInterface;
-};
-
-struct usb_cdc_acm_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 bmCapabilities;
-};
-
-struct usb_cdc_union_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 bMasterInterface0;
-	__u8 bSlaveInterface0;
-};
-
-struct usb_cdc_country_functional_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 iCountryCodeRelDate;
-	__le16 wCountyCode0;
-};
-
-struct usb_cdc_network_terminal_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 bEntityId;
-	__u8 iName;
-	__u8 bChannelIndex;
-	__u8 bPhysicalInterface;
-};
-
-struct usb_cdc_ether_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 iMACAddress;
-	__le32 bmEthernetStatistics;
-	__le16 wMaxSegmentSize;
-	__le16 wNumberMCFilters;
-	__u8 bNumberPowerFilters;
-} __attribute__((packed));
-
-struct usb_cdc_dmm_desc {
-	__u8 bFunctionLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubtype;
-	__u16 bcdVersion;
-	__le16 wMaxCommand;
-} __attribute__((packed));
-
-struct usb_cdc_mdlm_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdVersion;
-	__u8 bGUID[16];
-} __attribute__((packed));
-
-struct usb_cdc_mdlm_detail_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__u8 bGuidDescriptorType;
-	__u8 bDetailData[0];
-};
-
-struct usb_cdc_obex_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdVersion;
-} __attribute__((packed));
-
-struct usb_cdc_ncm_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdNcmVersion;
-	__u8 bmNetworkCapabilities;
-} __attribute__((packed));
-
-struct usb_cdc_mbim_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdMBIMVersion;
-	__le16 wMaxControlMessage;
-	__u8 bNumberFilters;
-	__u8 bMaxFilterSize;
-	__le16 wMaxSegmentSize;
-	__u8 bmNetworkCapabilities;
-} __attribute__((packed));
-
-struct usb_cdc_mbim_extended_desc {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDescriptorSubType;
-	__le16 bcdMBIMExtendedVersion;
-	__u8 bMaxOutstandingCommandMessages;
-	__le16 wMTU;
-} __attribute__((packed));
-
-struct usb_cdc_parsed_header {
-	struct usb_cdc_union_desc *usb_cdc_union_desc;
-	struct usb_cdc_header_desc *usb_cdc_header_desc;
-	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
-	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
-	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
-	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
-	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
-	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
-	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
-	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
-	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
-	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
-	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
-	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
-	bool phonet_magic_present;
-};
-
-struct api_context {
-	struct completion done;
-	int status;
-};
-
-struct set_config_request {
-	struct usb_device *udev;
-	int config;
-	struct work_struct work;
-	struct list_head node;
-};
-
-struct usb_dynid {
-	struct list_head node;
-	struct usb_device_id id;
-};
-
-struct usb_dev_cap_header {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-};
-
-struct usb_class_driver {
-	char *name;
-	char * (*devnode)(struct device *, umode_t *);
-	const struct file_operations *fops;
-	int minor_base;
-};
-
-struct usb_class {
-	struct kref kref;
-	struct class *class;
-};
-
-struct ep_device {
-	struct usb_endpoint_descriptor *desc;
-	struct usb_device *udev;
-	struct device dev;
-};
-
-struct usbdevfs_ctrltransfer {
-	__u8 bRequestType;
-	__u8 bRequest;
-	__u16 wValue;
-	__u16 wIndex;
-	__u16 wLength;
-	__u32 timeout;
-	void *data;
-};
-
-struct usbdevfs_bulktransfer {
-	unsigned int ep;
-	unsigned int len;
-	unsigned int timeout;
-	void *data;
-};
-
-struct usbdevfs_setinterface {
-	unsigned int interface;
-	unsigned int altsetting;
-};
-
-struct usbdevfs_disconnectsignal {
-	unsigned int signr;
-	void *context;
-};
-
-struct usbdevfs_getdriver {
-	unsigned int interface;
-	char driver[256];
-};
-
-struct usbdevfs_connectinfo {
-	unsigned int devnum;
-	unsigned char slow;
-};
-
-struct usbdevfs_conninfo_ex {
-	__u32 size;
-	__u32 busnum;
-	__u32 devnum;
-	__u32 speed;
-	__u8 num_ports;
-	__u8 ports[7];
-};
-
-struct usbdevfs_iso_packet_desc {
-	unsigned int length;
-	unsigned int actual_length;
-	unsigned int status;
-};
-
-struct usbdevfs_urb {
-	unsigned char type;
-	unsigned char endpoint;
-	int status;
-	unsigned int flags;
-	void *buffer;
-	int buffer_length;
-	int actual_length;
-	int start_frame;
-	union {
-		int number_of_packets;
-		unsigned int stream_id;
-	};
-	int error_count;
-	unsigned int signr;
-	void *usercontext;
-	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
-};
-
-struct usbdevfs_ioctl {
-	int ifno;
-	int ioctl_code;
-	void *data;
-};
-
-struct usbdevfs_disconnect_claim {
-	unsigned int interface;
-	unsigned int flags;
-	char driver[256];
-};
-
-struct usbdevfs_streams {
-	unsigned int num_streams;
-	unsigned int num_eps;
-	unsigned char eps[0];
-};
-
-struct usbdevfs_ctrltransfer32 {
-	u8 bRequestType;
-	u8 bRequest;
-	u16 wValue;
-	u16 wIndex;
-	u16 wLength;
-	u32 timeout;
-	compat_caddr_t data;
-};
-
-struct usbdevfs_bulktransfer32 {
-	compat_uint_t ep;
-	compat_uint_t len;
-	compat_uint_t timeout;
-	compat_caddr_t data;
-};
-
-struct usbdevfs_disconnectsignal32 {
-	compat_int_t signr;
-	compat_caddr_t context;
-};
-
-struct usbdevfs_urb32 {
-	unsigned char type;
-	unsigned char endpoint;
-	compat_int_t status;
-	compat_uint_t flags;
-	compat_caddr_t buffer;
-	compat_int_t buffer_length;
-	compat_int_t actual_length;
-	compat_int_t start_frame;
-	compat_int_t number_of_packets;
-	compat_int_t error_count;
-	compat_uint_t signr;
-	compat_caddr_t usercontext;
-	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
-};
-
-struct usbdevfs_ioctl32 {
-	s32 ifno;
-	s32 ioctl_code;
-	compat_caddr_t data;
-};
-
-struct usb_dev_state___2 {
-	struct list_head list;
-	struct usb_device *dev;
-	struct file *file;
-	spinlock_t lock;
-	struct list_head async_pending;
-	struct list_head async_completed;
-	struct list_head memory_list;
-	wait_queue_head_t wait;
-	wait_queue_head_t wait_for_resume;
-	unsigned int discsignr;
-	struct pid *disc_pid;
-	const struct cred *cred;
-	sigval_t disccontext;
-	long unsigned int ifclaimed;
-	u32 disabled_bulk_eps;
-	long unsigned int interface_allowed_mask;
-	int not_yet_resumed;
-	bool suspend_allowed;
-	bool privileges_dropped;
-};
-
-struct usb_memory {
-	struct list_head memlist;
-	int vma_use_count;
-	int urb_use_count;
-	u32 size;
-	void *mem;
-	dma_addr_t dma_handle;
-	long unsigned int vm_start;
-	struct usb_dev_state___2 *ps;
-};
-
-struct async {
-	struct list_head asynclist;
-	struct usb_dev_state___2 *ps;
-	struct pid *pid;
-	const struct cred *cred;
-	unsigned int signr;
-	unsigned int ifnum;
-	void *userbuffer;
-	void *userurb;
-	sigval_t userurb_sigval;
-	struct urb *urb;
-	struct usb_memory *usbm;
-	unsigned int mem_usage;
-	int status;
-	u8 bulk_addr;
-	u8 bulk_status;
-};
-
-enum snoop_when {
-	SUBMIT = 0,
-	COMPLETE = 1,
-};
-
-struct quirk_entry {
-	u16 vid;
-	u16 pid;
-	u32 flags;
-};
-
-struct device_connect_event {
-	atomic_t count;
-	wait_queue_head_t wait;
-};
-
-struct class_info {
-	int class;
-	char *class_name;
-};
-
-struct usb_phy_roothub___2 {
-	struct phy___2 *phy;
-	struct list_head list;
-};
-
-typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
-
-struct mon_bus {
-	struct list_head bus_link;
-	spinlock_t lock;
-	struct usb_bus *u_bus;
-	int text_inited;
-	int bin_inited;
-	struct dentry *dent_s;
-	struct dentry *dent_t;
-	struct dentry *dent_u;
-	struct device *classdev;
-	int nreaders;
-	struct list_head r_list;
-	struct kref ref;
-	unsigned int cnt_events;
-	unsigned int cnt_text_lost;
-};
-
-struct mon_reader {
-	struct list_head r_link;
-	struct mon_bus *m_bus;
-	void *r_data;
-	void (*rnf_submit)(void *, struct urb *);
-	void (*rnf_error)(void *, struct urb *, int);
-	void (*rnf_complete)(void *, struct urb *, int);
-};
-
-struct snap {
-	int slen;
-	char str[80];
-};
-
-struct mon_iso_desc {
-	int status;
-	unsigned int offset;
-	unsigned int length;
-};
-
-struct mon_event_text {
-	struct list_head e_link;
-	int type;
-	long unsigned int id;
-	unsigned int tstamp;
-	int busnum;
-	char devnum;
-	char epnum;
-	char is_in;
-	char xfertype;
-	int length;
-	int status;
-	int interval;
-	int start_frame;
-	int error_count;
-	char setup_flag;
-	char data_flag;
-	int numdesc;
-	struct mon_iso_desc isodesc[5];
-	unsigned char setup[8];
-	unsigned char data[32];
-};
-
-struct mon_reader_text {
-	struct kmem_cache *e_slab;
-	int nevents;
-	struct list_head e_list;
-	struct mon_reader r;
-	wait_queue_head_t wait;
-	int printf_size;
-	size_t printf_offset;
-	size_t printf_togo;
-	char *printf_buf;
-	struct mutex printf_lock;
-	char slab_name[30];
-};
-
-struct mon_text_ptr {
-	int cnt;
-	int limit;
-	char *pbuf;
-};
-
-enum {
-	NAMESZ = 10,
-};
-
-struct iso_rec {
-	int error_count;
-	int numdesc;
-};
-
-struct mon_bin_hdr {
-	u64 id;
-	unsigned char type;
-	unsigned char xfer_type;
-	unsigned char epnum;
-	unsigned char devnum;
-	short unsigned int busnum;
-	char flag_setup;
-	char flag_data;
-	s64 ts_sec;
-	s32 ts_usec;
-	int status;
-	unsigned int len_urb;
-	unsigned int len_cap;
-	union {
-		unsigned char setup[8];
-		struct iso_rec iso;
-	} s;
-	int interval;
-	int start_frame;
-	unsigned int xfer_flags;
-	unsigned int ndesc;
-};
-
-struct mon_bin_isodesc {
-	int iso_status;
-	unsigned int iso_off;
-	unsigned int iso_len;
-	u32 _pad;
-};
-
-struct mon_bin_stats {
-	u32 queued;
-	u32 dropped;
-};
-
-struct mon_bin_get {
-	struct mon_bin_hdr *hdr;
-	void *data;
-	size_t alloc;
-};
-
-struct mon_bin_mfetch {
-	u32 *offvec;
-	u32 nfetch;
-	u32 nflush;
-};
-
-struct mon_bin_get32 {
-	u32 hdr32;
-	u32 data32;
-	u32 alloc32;
-};
-
-struct mon_bin_mfetch32 {
-	u32 offvec32;
-	u32 nfetch32;
-	u32 nflush32;
-};
-
-struct mon_pgmap {
-	struct page *pg;
-	unsigned char *ptr;
-};
-
-struct mon_reader_bin {
-	spinlock_t b_lock;
-	unsigned int b_size;
-	unsigned int b_cnt;
-	unsigned int b_in;
-	unsigned int b_out;
-	unsigned int b_read;
-	struct mon_pgmap *b_vec;
-	wait_queue_head_t b_wait;
-	struct mutex fetch_lock;
-	int mmap_active;
-	struct mon_reader r;
-	unsigned int cnt_lost;
-};
-
-enum amd_chipset_gen {
-	NOT_AMD_CHIPSET = 0,
-	AMD_CHIPSET_SB600 = 1,
-	AMD_CHIPSET_SB700 = 2,
-	AMD_CHIPSET_SB800 = 3,
-	AMD_CHIPSET_HUDSON2 = 4,
-	AMD_CHIPSET_BOLTON = 5,
-	AMD_CHIPSET_YANGTZE = 6,
-	AMD_CHIPSET_TAISHAN = 7,
-	AMD_CHIPSET_UNKNOWN = 8,
-};
-
-struct amd_chipset_type {
-	enum amd_chipset_gen gen;
-	u8 rev;
-};
-
-struct amd_chipset_info {
-	struct pci_dev *nb_dev;
-	struct pci_dev *smbus_dev;
-	int nb_type;
-	struct amd_chipset_type sb_type;
-	int isoc_reqs;
-	int probe_count;
-	bool need_pll_quirk;
-};
-
-struct ehci_per_sched {
-	struct usb_device *udev;
-	struct usb_host_endpoint *ep;
-	struct list_head ps_list;
-	u16 tt_usecs;
-	u16 cs_mask;
-	u16 period;
-	u16 phase;
-	u8 bw_phase;
-	u8 phase_uf;
-	u8 usecs;
-	u8 c_usecs;
-	u8 bw_uperiod;
-	u8 bw_period;
-};
-
-enum ehci_rh_state {
-	EHCI_RH_HALTED = 0,
-	EHCI_RH_SUSPENDED = 1,
-	EHCI_RH_RUNNING = 2,
-	EHCI_RH_STOPPING = 3,
-};
-
-enum ehci_hrtimer_event {
-	EHCI_HRTIMER_POLL_ASS = 0,
-	EHCI_HRTIMER_POLL_PSS = 1,
-	EHCI_HRTIMER_POLL_DEAD = 2,
-	EHCI_HRTIMER_UNLINK_INTR = 3,
-	EHCI_HRTIMER_FREE_ITDS = 4,
-	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
-	EHCI_HRTIMER_START_UNLINK_INTR = 6,
-	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
-	EHCI_HRTIMER_IAA_WATCHDOG = 8,
-	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
-	EHCI_HRTIMER_DISABLE_ASYNC = 10,
-	EHCI_HRTIMER_IO_WATCHDOG = 11,
-	EHCI_HRTIMER_NUM_EVENTS = 12,
-};
-
-struct ehci_caps;
-
-struct ehci_regs;
-
-struct ehci_dbg_port;
-
-struct ehci_qh;
-
-union ehci_shadow;
-
-struct ehci_itd;
-
-struct ehci_sitd;
-
-struct ehci_hcd {
-	enum ehci_hrtimer_event next_hrtimer_event;
-	unsigned int enabled_hrtimer_events;
-	ktime_t hr_timeouts[12];
-	struct hrtimer hrtimer;
-	int PSS_poll_count;
-	int ASS_poll_count;
-	int died_poll_count;
-	struct ehci_caps *caps;
-	struct ehci_regs *regs;
-	struct ehci_dbg_port *debug;
-	__u32 hcs_params;
-	spinlock_t lock;
-	enum ehci_rh_state rh_state;
-	bool scanning: 1;
-	bool need_rescan: 1;
-	bool intr_unlinking: 1;
-	bool iaa_in_progress: 1;
-	bool async_unlinking: 1;
-	bool shutdown: 1;
-	struct ehci_qh *qh_scan_next;
-	struct ehci_qh *async;
-	struct ehci_qh *dummy;
-	struct list_head async_unlink;
-	struct list_head async_idle;
-	unsigned int async_unlink_cycle;
-	unsigned int async_count;
-	__le32 old_current;
-	__le32 old_token;
-	unsigned int periodic_size;
-	__le32 *periodic;
-	dma_addr_t periodic_dma;
-	struct list_head intr_qh_list;
-	unsigned int i_thresh;
-	union ehci_shadow *pshadow;
-	struct list_head intr_unlink_wait;
-	struct list_head intr_unlink;
-	unsigned int intr_unlink_wait_cycle;
-	unsigned int intr_unlink_cycle;
-	unsigned int now_frame;
-	unsigned int last_iso_frame;
-	unsigned int intr_count;
-	unsigned int isoc_count;
-	unsigned int periodic_count;
-	unsigned int uframe_periodic_max;
-	struct list_head cached_itd_list;
-	struct ehci_itd *last_itd_to_free;
-	struct list_head cached_sitd_list;
-	struct ehci_sitd *last_sitd_to_free;
-	long unsigned int reset_done[15];
-	long unsigned int bus_suspended;
-	long unsigned int companion_ports;
-	long unsigned int owned_ports;
-	long unsigned int port_c_suspend;
-	long unsigned int suspended_ports;
-	long unsigned int resuming_ports;
-	struct dma_pool___2 *qh_pool;
-	struct dma_pool___2 *qtd_pool;
-	struct dma_pool___2 *itd_pool;
-	struct dma_pool___2 *sitd_pool;
-	unsigned int random_frame;
-	long unsigned int next_statechange;
-	ktime_t last_periodic_enable;
-	u32 command;
-	unsigned int no_selective_suspend: 1;
-	unsigned int has_fsl_port_bug: 1;
-	unsigned int has_fsl_hs_errata: 1;
-	unsigned int has_fsl_susp_errata: 1;
-	unsigned int big_endian_mmio: 1;
-	unsigned int big_endian_desc: 1;
-	unsigned int big_endian_capbase: 1;
-	unsigned int has_amcc_usb23: 1;
-	unsigned int need_io_watchdog: 1;
-	unsigned int amd_pll_fix: 1;
-	unsigned int use_dummy_qh: 1;
-	unsigned int has_synopsys_hc_bug: 1;
-	unsigned int frame_index_bug: 1;
-	unsigned int need_oc_pp_cycle: 1;
-	unsigned int imx28_write_fix: 1;
-	__le32 *ohci_hcctrl_reg;
-	unsigned int has_hostpc: 1;
-	unsigned int has_tdi_phy_lpm: 1;
-	unsigned int has_ppcd: 1;
-	u8 sbrn;
-	u8 bandwidth[64];
-	u8 tt_budget[64];
-	struct list_head tt_list;
-	long unsigned int priv[0];
-};
-
-struct ehci_caps {
-	u32 hc_capbase;
-	u32 hcs_params;
-	u32 hcc_params;
-	u8 portroute[8];
-};
-
-struct ehci_regs {
-	u32 command;
-	u32 status;
-	u32 intr_enable;
-	u32 frame_index;
-	u32 segment;
-	u32 frame_list;
-	u32 async_next;
-	u32 reserved1[2];
-	u32 txfill_tuning;
-	u32 reserved2[6];
-	u32 configured_flag;
-	u32 port_status[0];
-	u32 reserved3[9];
-	u32 usbmode;
-	u32 reserved4[6];
-	u32 hostpc[0];
-	u32 reserved5[17];
-	u32 usbmode_ex;
-};
-
-struct ehci_dbg_port {
-	u32 control;
-	u32 pids;
-	u32 data03;
-	u32 data47;
-	u32 address;
-};
-
-struct ehci_fstn;
-
-union ehci_shadow {
-	struct ehci_qh *qh;
-	struct ehci_itd *itd;
-	struct ehci_sitd *sitd;
-	struct ehci_fstn *fstn;
-	__le32 *hw_next;
-	void *ptr;
-};
-
-struct ehci_qh_hw;
-
-struct ehci_qtd;
-
-struct ehci_qh {
-	struct ehci_qh_hw *hw;
-	dma_addr_t qh_dma;
-	union ehci_shadow qh_next;
-	struct list_head qtd_list;
-	struct list_head intr_node;
-	struct ehci_qtd *dummy;
-	struct list_head unlink_node;
-	struct ehci_per_sched ps;
-	unsigned int unlink_cycle;
-	u8 qh_state;
-	u8 xacterrs;
-	u8 unlink_reason;
-	u8 gap_uf;
-	unsigned int is_out: 1;
-	unsigned int clearing_tt: 1;
-	unsigned int dequeue_during_giveback: 1;
-	unsigned int should_be_inactive: 1;
-};
-
-struct ehci_iso_stream;
-
-struct ehci_itd {
-	__le32 hw_next;
-	__le32 hw_transaction[8];
-	__le32 hw_bufp[7];
-	__le32 hw_bufp_hi[7];
-	dma_addr_t itd_dma;
-	union ehci_shadow itd_next;
-	struct urb *urb;
-	struct ehci_iso_stream *stream;
-	struct list_head itd_list;
-	unsigned int frame;
-	unsigned int pg;
-	unsigned int index[8];
-	long: 64;
-};
-
-struct ehci_sitd {
-	__le32 hw_next;
-	__le32 hw_fullspeed_ep;
-	__le32 hw_uframe;
-	__le32 hw_results;
-	__le32 hw_buf[2];
-	__le32 hw_backpointer;
-	__le32 hw_buf_hi[2];
-	dma_addr_t sitd_dma;
-	union ehci_shadow sitd_next;
-	struct urb *urb;
-	struct ehci_iso_stream *stream;
-	struct list_head sitd_list;
-	unsigned int frame;
-	unsigned int index;
-};
-
-struct ehci_qtd {
-	__le32 hw_next;
-	__le32 hw_alt_next;
-	__le32 hw_token;
-	__le32 hw_buf[5];
-	__le32 hw_buf_hi[5];
-	dma_addr_t qtd_dma;
-	struct list_head qtd_list;
-	struct urb *urb;
-	size_t length;
-};
-
-struct ehci_fstn {
-	__le32 hw_next;
-	__le32 hw_prev;
-	dma_addr_t fstn_dma;
-	union ehci_shadow fstn_next;
-	long: 64;
-};
-
-struct ehci_qh_hw {
-	__le32 hw_next;
-	__le32 hw_info1;
-	__le32 hw_info2;
-	__le32 hw_current;
-	__le32 hw_qtd_next;
-	__le32 hw_alt_next;
-	__le32 hw_token;
-	__le32 hw_buf[5];
-	__le32 hw_buf_hi[5];
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ehci_iso_packet {
-	u64 bufp;
-	__le32 transaction;
-	u8 cross;
-	u32 buf1;
-};
-
-struct ehci_iso_sched {
-	struct list_head td_list;
-	unsigned int span;
-	unsigned int first_packet;
-	struct ehci_iso_packet packet[0];
-};
-
-struct ehci_iso_stream {
-	struct ehci_qh_hw *hw;
-	u8 bEndpointAddress;
-	u8 highspeed;
-	struct list_head td_list;
-	struct list_head free_list;
-	struct ehci_per_sched ps;
-	unsigned int next_uframe;
-	__le32 splits;
-	u16 uperiod;
-	u16 maxp;
-	unsigned int bandwidth;
-	__le32 buf0;
-	__le32 buf1;
-	__le32 buf2;
-	__le32 address;
-};
-
-struct ehci_tt {
-	u16 bandwidth[8];
-	struct list_head tt_list;
-	struct list_head ps_list;
-	struct usb_tt *usb_tt;
-	int tt_port;
-};
-
-struct ehci_driver_overrides {
-	size_t extra_priv_size;
-	int (*reset)(struct usb_hcd *);
-	int (*port_power)(struct usb_hcd *, int, bool);
-};
-
-typedef __u32 __hc32;
-
-typedef __u16 __hc16;
-
-struct td;
-
-struct ed {
-	__hc32 hwINFO;
-	__hc32 hwTailP;
-	__hc32 hwHeadP;
-	__hc32 hwNextED;
-	dma_addr_t dma;
-	struct td *dummy;
-	struct ed *ed_next;
-	struct ed *ed_prev;
-	struct list_head td_list;
-	struct list_head in_use_list;
-	u8 state;
-	u8 type;
-	u8 branch;
-	u16 interval;
-	u16 load;
-	u16 last_iso;
-	u16 tick;
-	unsigned int takeback_wdh_cnt;
-	struct td *pending_td;
-	long: 64;
-};
-
-struct td {
-	__hc32 hwINFO;
-	__hc32 hwCBP;
-	__hc32 hwNextTD;
-	__hc32 hwBE;
-	__hc16 hwPSW[2];
-	__u8 index;
-	struct ed *ed;
-	struct td *td_hash;
-	struct td *next_dl_td;
-	struct urb *urb;
-	dma_addr_t td_dma;
-	dma_addr_t data_dma;
-	struct list_head td_list;
-	long: 64;
-};
-
-struct ohci_hcca {
-	__hc32 int_table[32];
-	__hc32 frame_no;
-	__hc32 done_head;
-	u8 reserved_for_hc[116];
-	u8 what[4];
-};
-
-struct ohci_roothub_regs {
-	__hc32 a;
-	__hc32 b;
-	__hc32 status;
-	__hc32 portstatus[15];
-};
-
-struct ohci_regs {
-	__hc32 revision;
-	__hc32 control;
-	__hc32 cmdstatus;
-	__hc32 intrstatus;
-	__hc32 intrenable;
-	__hc32 intrdisable;
-	__hc32 hcca;
-	__hc32 ed_periodcurrent;
-	__hc32 ed_controlhead;
-	__hc32 ed_controlcurrent;
-	__hc32 ed_bulkhead;
-	__hc32 ed_bulkcurrent;
-	__hc32 donehead;
-	__hc32 fminterval;
-	__hc32 fmremaining;
-	__hc32 fmnumber;
-	__hc32 periodicstart;
-	__hc32 lsthresh;
-	struct ohci_roothub_regs roothub;
-	long: 64;
-	long: 64;
-};
-
-struct urb_priv {
-	struct ed *ed;
-	u16 length;
-	u16 td_cnt;
-	struct list_head pending;
-	struct td *td[0];
-};
-
-typedef struct urb_priv urb_priv_t;
-
-enum ohci_rh_state {
-	OHCI_RH_HALTED = 0,
-	OHCI_RH_SUSPENDED = 1,
-	OHCI_RH_RUNNING = 2,
-};
-
-struct ohci_hcd {
-	spinlock_t lock;
-	struct ohci_regs *regs;
-	struct ohci_hcca *hcca;
-	dma_addr_t hcca_dma;
-	struct ed *ed_rm_list;
-	struct ed *ed_bulktail;
-	struct ed *ed_controltail;
-	struct ed *periodic[32];
-	void (*start_hnp)(struct ohci_hcd *);
-	struct dma_pool___2 *td_cache;
-	struct dma_pool___2 *ed_cache;
-	struct td *td_hash[64];
-	struct td *dl_start;
-	struct td *dl_end;
-	struct list_head pending;
-	struct list_head eds_in_use;
-	enum ohci_rh_state rh_state;
-	int num_ports;
-	int load[32];
-	u32 hc_control;
-	long unsigned int next_statechange;
-	u32 fminterval;
-	unsigned int autostop: 1;
-	unsigned int working: 1;
-	unsigned int restart_work: 1;
-	long unsigned int flags;
-	unsigned int prev_frame_no;
-	unsigned int wdh_cnt;
-	unsigned int prev_wdh_cnt;
-	u32 prev_donehead;
-	struct timer_list io_watchdog;
-	struct work_struct nec_work;
-	struct dentry *debug_dir;
-	long unsigned int priv[0];
-};
-
-struct ohci_driver_overrides {
-	const char *product_desc;
-	size_t extra_priv_size;
-	int (*reset)(struct usb_hcd *);
-};
-
-struct debug_buffer {
-	ssize_t (*fill_func)(struct debug_buffer *);
-	struct ohci_hcd *ohci;
-	struct mutex mutex;
-	size_t count;
-	char *page;
-};
-
-struct uhci_td;
-
-struct uhci_qh {
-	__le32 link;
-	__le32 element;
-	dma_addr_t dma_handle;
-	struct list_head node;
-	struct usb_host_endpoint *hep;
-	struct usb_device *udev;
-	struct list_head queue;
-	struct uhci_td *dummy_td;
-	struct uhci_td *post_td;
-	struct usb_iso_packet_descriptor *iso_packet_desc;
-	long unsigned int advance_jiffies;
-	unsigned int unlink_frame;
-	unsigned int period;
-	short int phase;
-	short int load;
-	unsigned int iso_frame;
-	int state;
-	int type;
-	int skel;
-	unsigned int initial_toggle: 1;
-	unsigned int needs_fixup: 1;
-	unsigned int is_stopped: 1;
-	unsigned int wait_expired: 1;
-	unsigned int bandwidth_reserved: 1;
-};
-
-struct uhci_td {
-	__le32 link;
-	__le32 status;
-	__le32 token;
-	__le32 buffer;
-	dma_addr_t dma_handle;
-	struct list_head list;
-	int frame;
-	struct list_head fl_list;
-};
-
-enum uhci_rh_state {
-	UHCI_RH_RESET = 0,
-	UHCI_RH_SUSPENDED = 1,
-	UHCI_RH_AUTO_STOPPED = 2,
-	UHCI_RH_RESUMING = 3,
-	UHCI_RH_SUSPENDING = 4,
-	UHCI_RH_RUNNING = 5,
-	UHCI_RH_RUNNING_NODEVS = 6,
-};
-
-struct uhci_hcd {
-	struct dentry *dentry;
-	long unsigned int io_addr;
-	void *regs;
-	struct dma_pool___2 *qh_pool;
-	struct dma_pool___2 *td_pool;
-	struct uhci_td *term_td;
-	struct uhci_qh *skelqh[11];
-	struct uhci_qh *next_qh;
-	spinlock_t lock;
-	dma_addr_t frame_dma_handle;
-	__le32 *frame;
-	void **frame_cpu;
-	enum uhci_rh_state rh_state;
-	long unsigned int auto_stop_time;
-	unsigned int frame_number;
-	unsigned int is_stopped;
-	unsigned int last_iso_frame;
-	unsigned int cur_iso_frame;
-	unsigned int scan_in_progress: 1;
-	unsigned int need_rescan: 1;
-	unsigned int dead: 1;
-	unsigned int RD_enable: 1;
-	unsigned int is_initialized: 1;
-	unsigned int fsbr_is_on: 1;
-	unsigned int fsbr_is_wanted: 1;
-	unsigned int fsbr_expiring: 1;
-	struct timer_list fsbr_timer;
-	unsigned int oc_low: 1;
-	unsigned int wait_for_hp: 1;
-	unsigned int big_endian_mmio: 1;
-	unsigned int big_endian_desc: 1;
-	unsigned int is_aspeed: 1;
-	long unsigned int port_c_suspend;
-	long unsigned int resuming_ports;
-	long unsigned int ports_timeout;
-	struct list_head idle_qh_list;
-	int rh_numports;
-	wait_queue_head_t waitqh;
-	int num_waiting;
-	int total_load;
-	short int load[32];
-	struct clk *clk;
-	void (*reset_hc)(struct uhci_hcd *);
-	int (*check_and_reset_hc)(struct uhci_hcd *);
-	void (*configure_hc)(struct uhci_hcd *);
-	int (*resume_detect_interrupts_are_broken)(struct uhci_hcd *);
-	int (*global_suspend_mode_is_broken)(struct uhci_hcd *);
-};
-
-struct urb_priv___2 {
-	struct list_head node;
-	struct urb *urb;
-	struct uhci_qh *qh;
-	struct list_head td_list;
-	unsigned int fsbr: 1;
-};
-
-struct xhci_cap_regs {
-	__le32 hc_capbase;
-	__le32 hcs_params1;
-	__le32 hcs_params2;
-	__le32 hcs_params3;
-	__le32 hcc_params;
-	__le32 db_off;
-	__le32 run_regs_off;
-	__le32 hcc_params2;
-};
-
-struct xhci_op_regs {
-	__le32 command;
-	__le32 status;
-	__le32 page_size;
-	__le32 reserved1;
-	__le32 reserved2;
-	__le32 dev_notification;
-	__le64 cmd_ring;
-	__le32 reserved3[4];
-	__le64 dcbaa_ptr;
-	__le32 config_reg;
-	__le32 reserved4[241];
-	__le32 port_status_base;
-	__le32 port_power_base;
-	__le32 port_link_base;
-	__le32 reserved5;
-	__le32 reserved6[1016];
-};
-
-struct xhci_intr_reg {
-	__le32 irq_pending;
-	__le32 irq_control;
-	__le32 erst_size;
-	__le32 rsvd;
-	__le64 erst_base;
-	__le64 erst_dequeue;
-};
-
-struct xhci_run_regs {
-	__le32 microframe_index;
-	__le32 rsvd[7];
-	struct xhci_intr_reg ir_set[128];
-};
-
-struct xhci_doorbell_array {
-	__le32 doorbell[256];
-};
-
-struct xhci_container_ctx {
-	unsigned int type;
-	int size;
-	u8 *bytes;
-	dma_addr_t dma;
-};
-
-struct xhci_slot_ctx {
-	__le32 dev_info;
-	__le32 dev_info2;
-	__le32 tt_info;
-	__le32 dev_state;
-	__le32 reserved[4];
-};
-
-struct xhci_ep_ctx {
-	__le32 ep_info;
-	__le32 ep_info2;
-	__le64 deq;
-	__le32 tx_info;
-	__le32 reserved[3];
-};
-
-struct xhci_input_control_ctx {
-	__le32 drop_flags;
-	__le32 add_flags;
-	__le32 rsvd2[6];
-};
-
-union xhci_trb;
-
-struct xhci_command {
-	struct xhci_container_ctx *in_ctx;
-	u32 status;
-	int slot_id;
-	struct completion *completion;
-	union xhci_trb *command_trb;
-	struct list_head cmd_list;
-};
-
-struct xhci_link_trb {
-	__le64 segment_ptr;
-	__le32 intr_target;
-	__le32 control;
-};
-
-struct xhci_transfer_event {
-	__le64 buffer;
-	__le32 transfer_len;
-	__le32 flags;
-};
-
-struct xhci_event_cmd {
-	__le64 cmd_trb;
-	__le32 status;
-	__le32 flags;
-};
-
-struct xhci_generic_trb {
-	__le32 field[4];
-};
-
-union xhci_trb {
-	struct xhci_link_trb link;
-	struct xhci_transfer_event trans_event;
-	struct xhci_event_cmd event_cmd;
-	struct xhci_generic_trb generic;
-};
-
-struct xhci_stream_ctx {
-	__le64 stream_ring;
-	__le32 reserved[2];
-};
-
-struct xhci_ring;
-
-struct xhci_stream_info {
-	struct xhci_ring **stream_rings;
-	unsigned int num_streams;
-	struct xhci_stream_ctx *stream_ctx_array;
-	unsigned int num_stream_ctxs;
-	dma_addr_t ctx_array_dma;
-	struct xarray trb_address_map;
-	struct xhci_command *free_streams_command;
-};
-
-enum xhci_ring_type {
-	TYPE_CTRL = 0,
-	TYPE_ISOC = 1,
-	TYPE_BULK = 2,
-	TYPE_INTR = 3,
-	TYPE_STREAM = 4,
-	TYPE_COMMAND = 5,
-	TYPE_EVENT = 6,
-};
-
-struct xhci_segment;
-
-struct xhci_ring {
-	struct xhci_segment *first_seg;
-	struct xhci_segment *last_seg;
-	union xhci_trb *enqueue;
-	struct xhci_segment *enq_seg;
-	union xhci_trb *dequeue;
-	struct xhci_segment *deq_seg;
-	struct list_head td_list;
-	u32 cycle_state;
-	unsigned int err_count;
-	unsigned int stream_id;
-	unsigned int num_segs;
-	unsigned int num_trbs_free;
-	unsigned int num_trbs_free_temp;
-	unsigned int bounce_buf_len;
-	enum xhci_ring_type type;
-	bool last_td_was_short;
-	struct xarray *trb_address_map;
-};
-
-struct xhci_bw_info {
-	unsigned int ep_interval;
-	unsigned int mult;
-	unsigned int num_packets;
-	unsigned int max_packet_size;
-	unsigned int max_esit_payload;
-	unsigned int type;
-};
-
-struct xhci_hcd;
-
-struct xhci_virt_ep {
-	struct xhci_ring *ring;
-	struct xhci_stream_info *stream_info;
-	struct xhci_ring *new_ring;
-	unsigned int ep_state;
-	struct list_head cancelled_td_list;
-	struct timer_list stop_cmd_timer;
-	struct xhci_hcd *xhci;
-	struct xhci_segment *queued_deq_seg;
-	union xhci_trb *queued_deq_ptr;
-	bool skip;
-	struct xhci_bw_info bw_info;
-	struct list_head bw_endpoint_list;
-	int next_frame_id;
-	bool use_extended_tbc;
-};
-
-struct xhci_erst_entry;
-
-struct xhci_erst {
-	struct xhci_erst_entry *entries;
-	unsigned int num_entries;
-	dma_addr_t erst_dma_addr;
-	unsigned int erst_size;
-};
-
-struct s3_save {
-	u32 command;
-	u32 dev_nt;
-	u64 dcbaa_ptr;
-	u32 config_reg;
-	u32 irq_pending;
-	u32 irq_control;
-	u32 erst_size;
-	u64 erst_base;
-	u64 erst_dequeue;
-};
-
-struct xhci_bus_state {
-	long unsigned int bus_suspended;
-	long unsigned int next_statechange;
-	u32 port_c_suspend;
-	u32 suspended_ports;
-	u32 port_remote_wakeup;
-	long unsigned int resume_done[31];
-	long unsigned int resuming_ports;
-	long unsigned int rexit_ports;
-	struct completion rexit_done[31];
-};
-
-struct xhci_port;
-
-struct xhci_hub {
-	struct xhci_port **ports;
-	unsigned int num_ports;
-	struct usb_hcd *hcd;
-	struct xhci_bus_state bus_state;
-	u8 maj_rev;
-	u8 min_rev;
-	u32 *psi;
-	u8 psi_count;
-	u8 psi_uid_count;
-};
-
-struct xhci_device_context_array;
-
-struct xhci_scratchpad;
-
-struct xhci_virt_device;
-
-struct xhci_root_port_bw_info;
-
-struct xhci_hcd {
-	struct usb_hcd *main_hcd;
-	struct usb_hcd *shared_hcd;
-	struct xhci_cap_regs *cap_regs;
-	struct xhci_op_regs *op_regs;
-	struct xhci_run_regs *run_regs;
-	struct xhci_doorbell_array *dba;
-	struct xhci_intr_reg *ir_set;
-	__u32 hcs_params1;
-	__u32 hcs_params2;
-	__u32 hcs_params3;
-	__u32 hcc_params;
-	__u32 hcc_params2;
-	spinlock_t lock;
-	u8 sbrn;
-	u16 hci_version;
-	u8 max_slots;
-	u8 max_interrupters;
-	u8 max_ports;
-	u8 isoc_threshold;
-	u32 imod_interval;
-	int event_ring_max;
-	int page_size;
-	int page_shift;
-	int msix_count;
-	struct clk *clk;
-	struct clk *reg_clk;
-	struct xhci_device_context_array *dcbaa;
-	struct xhci_ring *cmd_ring;
-	unsigned int cmd_ring_state;
-	struct list_head cmd_list;
-	unsigned int cmd_ring_reserved_trbs;
-	struct delayed_work cmd_timer;
-	struct completion cmd_ring_stop_completion;
-	struct xhci_command *current_cmd;
-	struct xhci_ring *event_ring;
-	struct xhci_erst erst;
-	struct xhci_scratchpad *scratchpad;
-	struct list_head lpm_failed_devs;
-	struct mutex mutex;
-	struct xhci_command *lpm_command;
-	struct xhci_virt_device *devs[256];
-	struct xhci_root_port_bw_info *rh_bw;
-	struct dma_pool___2 *device_pool;
-	struct dma_pool___2 *segment_pool;
-	struct dma_pool___2 *small_streams_pool;
-	struct dma_pool___2 *medium_streams_pool;
-	unsigned int xhc_state;
-	u32 command;
-	struct s3_save s3;
-	long long unsigned int quirks;
-	unsigned int num_active_eps;
-	unsigned int limit_active_eps;
-	struct xhci_port *hw_ports;
-	struct xhci_hub usb2_rhub;
-	struct xhci_hub usb3_rhub;
-	unsigned int hw_lpm_support: 1;
-	unsigned int broken_suspend: 1;
-	u32 *ext_caps;
-	unsigned int num_ext_caps;
-	struct timer_list comp_mode_recovery_timer;
-	u32 port_status_u0;
-	u16 test_mode;
-	struct dentry *debugfs_root;
-	struct dentry *debugfs_slots;
-	struct list_head regset_list;
-	void *dbc;
-	long unsigned int priv[0];
-};
-
-struct xhci_segment {
-	union xhci_trb *trbs;
-	struct xhci_segment *next;
-	dma_addr_t dma;
-	dma_addr_t bounce_dma;
-	void *bounce_buf;
-	unsigned int bounce_offs;
-	unsigned int bounce_len;
-};
-
-enum xhci_overhead_type {
-	LS_OVERHEAD_TYPE = 0,
-	FS_OVERHEAD_TYPE = 1,
-	HS_OVERHEAD_TYPE = 2,
-};
-
-struct xhci_interval_bw {
-	unsigned int num_packets;
-	struct list_head endpoints;
-	unsigned int overhead[3];
-};
-
-struct xhci_interval_bw_table {
-	unsigned int interval0_esit_payload;
-	struct xhci_interval_bw interval_bw[16];
-	unsigned int bw_used;
-	unsigned int ss_bw_in;
-	unsigned int ss_bw_out;
-};
-
-struct xhci_tt_bw_info;
-
-struct xhci_virt_device {
-	struct usb_device *udev;
-	struct xhci_container_ctx *out_ctx;
-	struct xhci_container_ctx *in_ctx;
-	struct xhci_virt_ep eps[31];
-	u8 fake_port;
-	u8 real_port;
-	struct xhci_interval_bw_table *bw_table;
-	struct xhci_tt_bw_info *tt_info;
-	long unsigned int flags;
-	u16 current_mel;
-	void *debugfs_private;
-};
-
-struct xhci_tt_bw_info {
-	struct list_head tt_list;
-	int slot_id;
-	int ttport;
-	struct xhci_interval_bw_table bw_table;
-	int active_eps;
-};
-
-struct xhci_root_port_bw_info {
-	struct list_head tts;
-	unsigned int num_active_tts;
-	struct xhci_interval_bw_table bw_table;
-};
-
-struct xhci_device_context_array {
-	__le64 dev_context_ptrs[256];
-	dma_addr_t dma;
-};
-
-enum xhci_setup_dev {
-	SETUP_CONTEXT_ONLY = 0,
-	SETUP_CONTEXT_ADDRESS = 1,
-};
-
-struct xhci_td {
-	struct list_head td_list;
-	struct list_head cancelled_td_list;
-	struct urb *urb;
-	struct xhci_segment *start_seg;
-	union xhci_trb *first_trb;
-	union xhci_trb *last_trb;
-	struct xhci_segment *bounce_seg;
-	bool urb_length_set;
-};
-
-struct xhci_dequeue_state {
-	struct xhci_segment *new_deq_seg;
-	union xhci_trb *new_deq_ptr;
-	int new_cycle_state;
-	unsigned int stream_id;
-};
-
-struct xhci_erst_entry {
-	__le64 seg_addr;
-	__le32 seg_size;
-	__le32 rsvd;
-};
-
-struct xhci_scratchpad {
-	u64 *sp_array;
-	dma_addr_t sp_dma;
-	void **sp_buffers;
-};
-
-struct urb_priv___3 {
-	int num_tds;
-	int num_tds_done;
-	struct xhci_td td[0];
-};
-
-struct xhci_port {
-	__le32 *addr;
-	int hw_portnum;
-	int hcd_portnum;
-	struct xhci_hub *rhub;
-};
-
-struct xhci_driver_overrides {
-	size_t extra_priv_size;
-	int (*reset)(struct usb_hcd *);
-	int (*start)(struct usb_hcd *);
-};
-
-typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
-
-enum xhci_ep_reset_type {
-	EP_HARD_RESET = 0,
-	EP_SOFT_RESET = 1,
-};
-
-struct kfifo {
-	union {
-		struct __kfifo kfifo;
-		unsigned char *type;
-		const unsigned char *const_type;
-		char (*rectype)[0];
-		void *ptr;
-		const void *ptr_const;
-	};
-	unsigned char buf[0];
-};
-
-struct dbc_regs {
-	__le32 capability;
-	__le32 doorbell;
-	__le32 ersts;
-	__le32 __reserved_0;
-	__le64 erstba;
-	__le64 erdp;
-	__le32 control;
-	__le32 status;
-	__le32 portsc;
-	__le32 __reserved_1;
-	__le64 dccp;
-	__le32 devinfo1;
-	__le32 devinfo2;
-};
-
-struct dbc_str_descs {
-	char string0[64];
-	char manufacturer[64];
-	char product[64];
-	char serial[64];
-};
-
-enum dbc_state {
-	DS_DISABLED = 0,
-	DS_INITIALIZED = 1,
-	DS_ENABLED = 2,
-	DS_CONNECTED = 3,
-	DS_CONFIGURED = 4,
-	DS_STALLED = 5,
-};
-
-struct dbc_ep;
-
-struct dbc_request {
-	void *buf;
-	unsigned int length;
-	dma_addr_t dma;
-	void (*complete)(struct xhci_hcd *, struct dbc_request *);
-	struct list_head list_pool;
-	int status;
-	unsigned int actual;
-	struct dbc_ep *dep;
-	struct list_head list_pending;
-	dma_addr_t trb_dma;
-	union xhci_trb *trb;
-	unsigned int direction: 1;
-};
-
-struct xhci_dbc;
-
-struct dbc_ep {
-	struct xhci_dbc *dbc;
-	struct list_head list_pending;
-	struct xhci_ring *ring;
-	unsigned int direction: 1;
-};
-
-struct dbc_port {
-	struct tty_port port;
-	spinlock_t port_lock;
-	struct list_head read_pool;
-	struct list_head read_queue;
-	unsigned int n_read;
-	struct tasklet_struct push;
-	struct list_head write_pool;
-	struct kfifo write_fifo;
-	bool registered;
-	struct dbc_ep *in;
-	struct dbc_ep *out;
-};
-
-struct xhci_dbc {
-	spinlock_t lock;
-	struct xhci_hcd *xhci;
-	struct dbc_regs *regs;
-	struct xhci_ring *ring_evt;
-	struct xhci_ring *ring_in;
-	struct xhci_ring *ring_out;
-	struct xhci_erst erst;
-	struct xhci_container_ctx *ctx;
-	struct dbc_str_descs *string;
-	dma_addr_t string_dma;
-	size_t string_size;
-	enum dbc_state state;
-	struct delayed_work event_work;
-	unsigned int resume_required: 1;
-	struct dbc_ep eps[2];
-	struct dbc_port port;
-};
-
-struct trace_event_raw_xhci_log_msg {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_ctx {
-	struct trace_entry ent;
-	int ctx_64;
-	unsigned int ctx_type;
-	dma_addr_t ctx_dma;
-	u8 *ctx_va;
-	unsigned int ctx_ep_num;
-	int slot_id;
-	u32 __data_loc_ctx_data;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_trb {
-	struct trace_entry ent;
-	u32 type;
-	u32 field0;
-	u32 field1;
-	u32 field2;
-	u32 field3;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_free_virt_dev {
-	struct trace_entry ent;
-	void *vdev;
-	long long unsigned int out_ctx;
-	long long unsigned int in_ctx;
-	u8 fake_port;
-	u8 real_port;
-	u16 current_mel;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_virt_dev {
-	struct trace_entry ent;
-	void *vdev;
-	long long unsigned int out_ctx;
-	long long unsigned int in_ctx;
-	int devnum;
-	int state;
-	int speed;
-	u8 portnum;
-	u8 level;
-	int slot_id;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_urb {
-	struct trace_entry ent;
-	void *urb;
-	unsigned int pipe;
-	unsigned int stream;
-	int status;
-	unsigned int flags;
-	int num_mapped_sgs;
-	int num_sgs;
-	int length;
-	int actual;
-	int epnum;
-	int dir_in;
-	int type;
-	int slot_id;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_ep_ctx {
-	struct trace_entry ent;
-	u32 info;
-	u32 info2;
-	u64 deq;
-	u32 tx_info;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_slot_ctx {
-	struct trace_entry ent;
-	u32 info;
-	u32 info2;
-	u32 tt_info;
-	u32 state;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_ctrl_ctx {
-	struct trace_entry ent;
-	u32 drop;
-	u32 add;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_ring {
-	struct trace_entry ent;
-	u32 type;
-	void *ring;
-	dma_addr_t enq;
-	dma_addr_t deq;
-	dma_addr_t enq_seg;
-	dma_addr_t deq_seg;
-	unsigned int num_segs;
-	unsigned int stream_id;
-	unsigned int cycle_state;
-	unsigned int num_trbs_free;
-	unsigned int bounce_buf_len;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_portsc {
-	struct trace_entry ent;
-	u32 portnum;
-	u32 portsc;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_log_doorbell {
-	struct trace_entry ent;
-	u32 slot;
-	u32 doorbell;
-	char __data[0];
-};
-
-struct trace_event_raw_xhci_dbc_log_request {
-	struct trace_entry ent;
-	struct dbc_request *req;
-	bool dir;
-	unsigned int actual;
-	unsigned int length;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_xhci_log_msg {
-	u32 msg;
-};
-
-struct trace_event_data_offsets_xhci_log_ctx {
-	u32 ctx_data;
-};
-
-struct trace_event_data_offsets_xhci_log_trb {};
-
-struct trace_event_data_offsets_xhci_log_free_virt_dev {};
-
-struct trace_event_data_offsets_xhci_log_virt_dev {};
-
-struct trace_event_data_offsets_xhci_log_urb {};
-
-struct trace_event_data_offsets_xhci_log_ep_ctx {};
-
-struct trace_event_data_offsets_xhci_log_slot_ctx {};
-
-struct trace_event_data_offsets_xhci_log_ctrl_ctx {};
-
-struct trace_event_data_offsets_xhci_log_ring {};
-
-struct trace_event_data_offsets_xhci_log_portsc {};
-
-struct trace_event_data_offsets_xhci_log_doorbell {};
-
-struct trace_event_data_offsets_xhci_dbc_log_request {};
-
-typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
-
-typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
-
-typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
-
-typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
-
-typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
-
-typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
-
-typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
-
-typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
-
-typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
-
-typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
-
-typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
-
-typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
-
-typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
-
-typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
-
-typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
-
-typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
-
-typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
-
-typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
-
-typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
-
-typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
-
-typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
-
-typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
-
-typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
-
-typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
-
-typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
-
-typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
-
-typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
-
-typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
-
-typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
-
-typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
-
-struct xhci_regset {
-	char name[32];
-	struct debugfs_regset32 regset;
-	size_t nregs;
-	struct list_head list;
-};
-
-struct xhci_file_map {
-	const char *name;
-	int (*show)(struct seq_file *, void *);
-};
-
-struct xhci_ep_priv {
-	char name[32];
-	struct dentry *root;
-};
-
-struct xhci_slot_priv {
-	char name[32];
-	struct dentry *root;
-	struct xhci_ep_priv *eps[31];
-	struct xhci_virt_device *dev;
-};
-
-struct usblp {
-	struct usb_device *dev;
-	struct mutex wmut;
-	struct mutex mut;
-	spinlock_t lock;
-	char *readbuf;
-	char *statusbuf;
-	struct usb_anchor urbs;
-	wait_queue_head_t rwait;
-	wait_queue_head_t wwait;
-	int readcount;
-	int ifnum;
-	struct usb_interface *intf;
-	struct {
-		int alt_setting;
-		struct usb_endpoint_descriptor *epwrite;
-		struct usb_endpoint_descriptor *epread;
-	} protocol[4];
-	int current_protocol;
-	int minor;
-	int wcomplete;
-	int rcomplete;
-	int wstatus;
-	int rstatus;
-	unsigned int quirks;
-	unsigned int flags;
-	unsigned char used;
-	unsigned char present;
-	unsigned char bidir;
-	unsigned char no_paper;
-	unsigned char *device_id_string;
-};
-
-struct quirk_printer_struct {
-	__u16 vendorId;
-	__u16 productId;
-	unsigned int quirks;
-};
-
-enum {
-	US_FL_SINGLE_LUN = 1,
-	US_FL_NEED_OVERRIDE = 2,
-	US_FL_SCM_MULT_TARG = 4,
-	US_FL_FIX_INQUIRY = 8,
-	US_FL_FIX_CAPACITY = 16,
-	US_FL_IGNORE_RESIDUE = 32,
-	US_FL_BULK32 = 64,
-	US_FL_NOT_LOCKABLE = 128,
-	US_FL_GO_SLOW = 256,
-	US_FL_NO_WP_DETECT = 512,
-	US_FL_MAX_SECTORS_64 = 1024,
-	US_FL_IGNORE_DEVICE = 2048,
-	US_FL_CAPACITY_HEURISTICS = 4096,
-	US_FL_MAX_SECTORS_MIN = 8192,
-	US_FL_BULK_IGNORE_TAG = 16384,
-	US_FL_SANE_SENSE = 32768,
-	US_FL_CAPACITY_OK = 65536,
-	US_FL_BAD_SENSE = 131072,
-	US_FL_NO_READ_DISC_INFO = 262144,
-	US_FL_NO_READ_CAPACITY_16 = 524288,
-	US_FL_INITIAL_READ10 = 1048576,
-	US_FL_WRITE_CACHE = 2097152,
-	US_FL_NEEDS_CAP16 = 4194304,
-	US_FL_IGNORE_UAS = 8388608,
-	US_FL_BROKEN_FUA = 16777216,
-	US_FL_NO_ATA_1X = 33554432,
-	US_FL_NO_REPORT_OPCODES = 67108864,
-	US_FL_MAX_SECTORS_240 = 134217728,
-	US_FL_NO_REPORT_LUNS = 268435456,
-	US_FL_ALWAYS_SYNC = 536870912,
-};
-
-struct us_data;
-
-struct us_unusual_dev {
-	const char *vendorName;
-	const char *productName;
-	__u8 useProtocol;
-	__u8 useTransport;
-	int (*initFunction)(struct us_data *);
-};
-
-typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *);
-
-typedef int (*trans_reset)(struct us_data *);
-
-typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *);
-
-typedef void (*extra_data_destructor)(void *);
-
-typedef void (*pm_hook)(struct us_data *, int);
-
-struct us_data {
-	struct mutex dev_mutex;
-	struct usb_device *pusb_dev;
-	struct usb_interface *pusb_intf;
-	struct us_unusual_dev *unusual_dev;
-	long unsigned int fflags;
-	long unsigned int dflags;
-	unsigned int send_bulk_pipe;
-	unsigned int recv_bulk_pipe;
-	unsigned int send_ctrl_pipe;
-	unsigned int recv_ctrl_pipe;
-	unsigned int recv_intr_pipe;
-	char *transport_name;
-	char *protocol_name;
-	__le32 bcs_signature;
-	u8 subclass;
-	u8 protocol;
-	u8 max_lun;
-	u8 ifnum;
-	u8 ep_bInterval;
-	trans_cmnd transport;
-	trans_reset transport_reset;
-	proto_cmnd proto_handler;
-	struct scsi_cmnd *srb;
-	unsigned int tag;
-	char scsi_name[32];
-	struct urb *current_urb;
-	struct usb_ctrlrequest *cr;
-	struct usb_sg_request current_sg;
-	unsigned char *iobuf;
-	dma_addr_t iobuf_dma;
-	struct task_struct *ctl_thread;
-	struct completion cmnd_ready;
-	struct completion notify;
-	wait_queue_head_t delay_wait;
-	struct delayed_work scan_dwork;
-	void *extra;
-	extra_data_destructor extra_destructor;
-	pm_hook suspend_resume_hook;
-	int use_last_sector_hacks;
-	int last_sector_retries;
-};
-
-enum xfer_buf_dir {
-	TO_XFER_BUF = 0,
-	FROM_XFER_BUF = 1,
-};
-
-struct bulk_cb_wrap {
-	__le32 Signature;
-	__u32 Tag;
-	__le32 DataTransferLength;
-	__u8 Flags;
-	__u8 Lun;
-	__u8 Length;
-	__u8 CDB[16];
-};
-
-struct bulk_cs_wrap {
-	__le32 Signature;
-	__u32 Tag;
-	__le32 Residue;
-	__u8 Status;
-};
-
-struct swoc_info {
-	__u8 rev;
-	__u8 reserved[8];
-	__u16 LinuxSKU;
-	__u16 LinuxVer;
-	__u8 reserved2[47];
-} __attribute__((packed));
-
-struct ignore_entry {
-	u16 vid;
-	u16 pid;
-	u16 bcdmin;
-	u16 bcdmax;
-};
-
-struct usb_debug_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDebugInEndpoint;
-	__u8 bDebugOutEndpoint;
-};
-
-struct ehci_dev {
-	u32 bus;
-	u32 slot;
-	u32 func;
-};
-
-typedef void (*set_debug_port_t)(int);
-
-struct usb_hcd___2;
-
-struct serio_device_id {
-	__u8 type;
-	__u8 extra;
-	__u8 id;
-	__u8 proto;
-};
-
-struct serio_driver;
-
-struct serio {
-	void *port_data;
-	char name[32];
-	char phys[32];
-	char firmware_id[128];
-	bool manual_bind;
-	struct serio_device_id id;
-	spinlock_t lock;
-	int (*write)(struct serio *, unsigned char);
-	int (*open)(struct serio *);
-	void (*close)(struct serio *);
-	int (*start)(struct serio *);
-	void (*stop)(struct serio *);
-	struct serio *parent;
-	struct list_head child_node;
-	struct list_head children;
-	unsigned int depth;
-	struct serio_driver *drv;
-	struct mutex drv_mutex;
-	struct device dev;
-	struct list_head node;
-	struct mutex *ps2_cmd_mutex;
-};
-
-struct serio_driver {
-	const char *description;
-	const struct serio_device_id *id_table;
-	bool manual_bind;
-	void (*write_wakeup)(struct serio *);
-	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
-	int (*connect)(struct serio *, struct serio_driver *);
-	int (*reconnect)(struct serio *);
-	int (*fast_reconnect)(struct serio *);
-	void (*disconnect)(struct serio *);
-	void (*cleanup)(struct serio *);
-	struct device_driver driver;
-};
-
-enum serio_event_type {
-	SERIO_RESCAN_PORT = 0,
-	SERIO_RECONNECT_PORT = 1,
-	SERIO_RECONNECT_SUBTREE = 2,
-	SERIO_REGISTER_PORT = 3,
-	SERIO_ATTACH_DRIVER = 4,
-};
-
-struct serio_event {
-	enum serio_event_type type;
-	void *object;
-	struct module *owner;
-	struct list_head node;
-};
-
-enum i8042_controller_reset_mode {
-	I8042_RESET_NEVER = 0,
-	I8042_RESET_ALWAYS = 1,
-	I8042_RESET_ON_S2RAM = 2,
-};
-
-struct i8042_port {
-	struct serio *serio;
-	int irq;
-	bool exists;
-	bool driver_bound;
-	signed char mux;
-};
-
-struct serport {
-	struct tty_struct *tty;
-	wait_queue_head_t wait;
-	struct serio *serio;
-	struct serio_device_id id;
-	spinlock_t lock;
-	long unsigned int flags;
-};
-
-struct ps2dev {
-	struct serio *serio;
-	struct mutex cmd_mutex;
-	wait_queue_head_t wait;
-	long unsigned int flags;
-	u8 cmdbuf[8];
-	u8 cmdcnt;
-	u8 nak;
-};
-
-struct input_mt_slot {
-	int abs[14];
-	unsigned int frame;
-	unsigned int key;
-};
-
-struct input_mt {
-	int trkid;
-	int num_slots;
-	int slot;
-	unsigned int flags;
-	unsigned int frame;
-	int *red;
-	struct input_mt_slot slots[0];
-};
-
-union input_seq_state {
-	struct {
-		short unsigned int pos;
-		bool mutex_acquired;
-	};
-	void *p;
-};
-
-struct input_devres {
-	struct input_dev *input;
-};
-
-struct input_event {
-	__kernel_ulong_t __sec;
-	__kernel_ulong_t __usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct input_event_compat {
-	compat_ulong_t sec;
-	compat_ulong_t usec;
-	__u16 type;
-	__u16 code;
-	__s32 value;
-};
-
-struct ff_periodic_effect_compat {
-	__u16 waveform;
-	__u16 period;
-	__s16 magnitude;
-	__s16 offset;
-	__u16 phase;
-	struct ff_envelope envelope;
-	__u32 custom_len;
-	compat_uptr_t custom_data;
-};
-
-struct ff_effect_compat {
-	__u16 type;
-	__s16 id;
-	__u16 direction;
-	struct ff_trigger trigger;
-	struct ff_replay replay;
-	union {
-		struct ff_constant_effect constant;
-		struct ff_ramp_effect ramp;
-		struct ff_periodic_effect_compat periodic;
-		struct ff_condition_effect condition[2];
-		struct ff_rumble_effect rumble;
-	} u;
-};
-
-struct input_mt_pos {
-	s16 x;
-	s16 y;
-};
-
-struct input_dev_poller {
-	void (*poll)(struct input_dev *);
-	unsigned int poll_interval;
-	unsigned int poll_interval_max;
-	unsigned int poll_interval_min;
-	struct input_dev *input;
-	struct delayed_work work;
-};
-
-struct ml_effect_state {
-	struct ff_effect *effect;
-	long unsigned int flags;
-	int count;
-	long unsigned int play_at;
-	long unsigned int stop_at;
-	long unsigned int adj_at;
-};
-
-struct ml_device {
-	void *private;
-	struct ml_effect_state states[16];
-	int gain;
-	struct timer_list timer;
-	struct input_dev *dev;
-	int (*play_effect)(struct input_dev *, void *, struct ff_effect *);
-};
-
-struct input_polled_dev {
-	void *private;
-	void (*open)(struct input_polled_dev *);
-	void (*close)(struct input_polled_dev *);
-	void (*poll)(struct input_polled_dev *);
-	unsigned int poll_interval;
-	unsigned int poll_interval_max;
-	unsigned int poll_interval_min;
-	struct input_dev *input;
-	struct delayed_work work;
-	bool devres_managed;
-};
-
-struct input_polled_devres {
-	struct input_polled_dev *polldev;
-};
-
-struct key_entry {
-	int type;
-	u32 code;
-	union {
-		u16 keycode;
-		struct {
-			u8 code;
-			u8 value;
-		} sw;
-	};
-};
-
-struct input_led {
-	struct led_classdev cdev;
-	struct input_handle *handle;
-	unsigned int code;
-};
-
-struct input_leds {
-	struct input_handle handle;
-	unsigned int num_leds;
-	struct input_led leds[0];
-};
-
-struct input_mask {
-	__u32 type;
-	__u32 codes_size;
-	__u64 codes_ptr;
-};
-
-struct evdev_client;
-
-struct evdev {
-	int open;
-	struct input_handle handle;
-	wait_queue_head_t wait;
-	struct evdev_client *grab;
-	struct list_head client_list;
-	spinlock_t client_lock;
-	struct mutex mutex;
-	struct device dev;
-	struct cdev cdev;
-	bool exist;
-};
-
-struct evdev_client {
-	unsigned int head;
-	unsigned int tail;
-	unsigned int packet_head;
-	spinlock_t buffer_lock;
-	struct fasync_struct *fasync;
-	struct evdev *evdev;
-	struct list_head node;
-	enum input_clock_type clk_type;
-	bool revoked;
-	long unsigned int *evmasks[32];
-	unsigned int bufsize;
-	struct input_event buffer[0];
-};
-
-struct atkbd {
-	struct ps2dev ps2dev;
-	struct input_dev *dev;
-	char name[64];
-	char phys[32];
-	short unsigned int id;
-	short unsigned int keycode[512];
-	long unsigned int force_release_mask[8];
-	unsigned char set;
-	bool translated;
-	bool extra;
-	bool write;
-	bool softrepeat;
-	bool softraw;
-	bool scroll;
-	bool enabled;
-	unsigned char emul;
-	bool resend;
-	bool release;
-	long unsigned int xl_bit;
-	unsigned int last;
-	long unsigned int time;
-	long unsigned int err_count;
-	struct delayed_work event_work;
-	long unsigned int event_jiffies;
-	long unsigned int event_mask;
-	struct mutex mutex;
-};
-
-enum psmouse_state {
-	PSMOUSE_IGNORE = 0,
-	PSMOUSE_INITIALIZING = 1,
-	PSMOUSE_RESYNCING = 2,
-	PSMOUSE_CMD_MODE = 3,
-	PSMOUSE_ACTIVATED = 4,
-};
-
-typedef enum {
-	PSMOUSE_BAD_DATA = 0,
-	PSMOUSE_GOOD_DATA = 1,
-	PSMOUSE_FULL_PACKET = 2,
-} psmouse_ret_t;
-
-enum psmouse_scale {
-	PSMOUSE_SCALE11 = 0,
-	PSMOUSE_SCALE21 = 1,
-};
-
-enum psmouse_type {
-	PSMOUSE_NONE = 0,
-	PSMOUSE_PS2 = 1,
-	PSMOUSE_PS2PP = 2,
-	PSMOUSE_THINKPS = 3,
-	PSMOUSE_GENPS = 4,
-	PSMOUSE_IMPS = 5,
-	PSMOUSE_IMEX = 6,
-	PSMOUSE_SYNAPTICS = 7,
-	PSMOUSE_ALPS = 8,
-	PSMOUSE_LIFEBOOK = 9,
-	PSMOUSE_TRACKPOINT = 10,
-	PSMOUSE_TOUCHKIT_PS2 = 11,
-	PSMOUSE_CORTRON = 12,
-	PSMOUSE_HGPK = 13,
-	PSMOUSE_ELANTECH = 14,
-	PSMOUSE_FSP = 15,
-	PSMOUSE_SYNAPTICS_RELATIVE = 16,
-	PSMOUSE_CYPRESS = 17,
-	PSMOUSE_FOCALTECH = 18,
-	PSMOUSE_VMMOUSE = 19,
-	PSMOUSE_BYD = 20,
-	PSMOUSE_SYNAPTICS_SMBUS = 21,
-	PSMOUSE_ELANTECH_SMBUS = 22,
-	PSMOUSE_AUTO = 23,
-};
-
-struct psmouse;
-
-struct psmouse_protocol {
-	enum psmouse_type type;
-	bool maxproto;
-	bool ignore_parity;
-	bool try_passthru;
-	bool smbus_companion;
-	const char *name;
-	const char *alias;
-	int (*detect)(struct psmouse *, bool);
-	int (*init)(struct psmouse *);
-};
-
-struct psmouse {
-	void *private;
-	struct input_dev *dev;
-	struct ps2dev ps2dev;
-	struct delayed_work resync_work;
-	const char *vendor;
-	const char *name;
-	const struct psmouse_protocol *protocol;
-	unsigned char packet[8];
-	unsigned char badbyte;
-	unsigned char pktcnt;
-	unsigned char pktsize;
-	unsigned char oob_data_type;
-	unsigned char extra_buttons;
-	bool acks_disable_command;
-	unsigned int model;
-	long unsigned int last;
-	long unsigned int out_of_sync_cnt;
-	long unsigned int num_resyncs;
-	enum psmouse_state state;
-	char devname[64];
-	char phys[32];
-	unsigned int rate;
-	unsigned int resolution;
-	unsigned int resetafter;
-	unsigned int resync_time;
-	bool smartscroll;
-	psmouse_ret_t (*protocol_handler)(struct psmouse *);
-	void (*set_rate)(struct psmouse *, unsigned int);
-	void (*set_resolution)(struct psmouse *, unsigned int);
-	void (*set_scale)(struct psmouse *, enum psmouse_scale);
-	int (*reconnect)(struct psmouse *);
-	int (*fast_reconnect)(struct psmouse *);
-	void (*disconnect)(struct psmouse *);
-	void (*cleanup)(struct psmouse *);
-	int (*poll)(struct psmouse *);
-	void (*pt_activate)(struct psmouse *);
-	void (*pt_deactivate)(struct psmouse *);
-};
-
-struct psmouse_attribute {
-	struct device_attribute dattr;
-	void *data;
-	ssize_t (*show)(struct psmouse *, void *, char *);
-	ssize_t (*set)(struct psmouse *, void *, const char *, size_t);
-	bool protect;
-};
-
-struct rmi_2d_axis_alignment {
-	bool swap_axes;
-	bool flip_x;
-	bool flip_y;
-	u16 clip_x_low;
-	u16 clip_y_low;
-	u16 clip_x_high;
-	u16 clip_y_high;
-	u16 offset_x;
-	u16 offset_y;
-	u8 delta_x_threshold;
-	u8 delta_y_threshold;
-};
-
-enum rmi_sensor_type {
-	rmi_sensor_default = 0,
-	rmi_sensor_touchscreen = 1,
-	rmi_sensor_touchpad = 2,
-};
-
-struct rmi_2d_sensor_platform_data {
-	struct rmi_2d_axis_alignment axis_align;
-	enum rmi_sensor_type sensor_type;
-	int x_mm;
-	int y_mm;
-	int disable_report_mask;
-	u16 rezero_wait;
-	bool topbuttonpad;
-	bool kernel_tracking;
-	int dmax;
-	int dribble;
-	int palm_detect;
-};
-
-struct rmi_f30_data {
-	bool buttonpad;
-	bool trackstick_buttons;
-	bool disable;
-};
-
-enum rmi_reg_state {
-	RMI_REG_STATE_DEFAULT = 0,
-	RMI_REG_STATE_OFF = 1,
-	RMI_REG_STATE_ON = 2,
-};
-
-struct rmi_f01_power_management {
-	enum rmi_reg_state nosleep;
-	u8 wakeup_threshold;
-	u8 doze_holdoff;
-	u8 doze_interval;
-};
-
-struct rmi_device_platform_data_spi {
-	u32 block_delay_us;
-	u32 split_read_block_delay_us;
-	u32 read_delay_us;
-	u32 write_delay_us;
-	u32 split_read_byte_delay_us;
-	u32 pre_delay_us;
-	u32 post_delay_us;
-	u8 bits_per_word;
-	u16 mode;
-	void *cs_assert_data;
-	int (*cs_assert)(const void *, const bool);
-};
-
-struct rmi_device_platform_data {
-	int reset_delay_ms;
-	int irq;
-	struct rmi_device_platform_data_spi spi_data;
-	struct rmi_2d_sensor_platform_data sensor_pdata;
-	struct rmi_f01_power_management power_management;
-	struct rmi_f30_data f30_data;
-};
-
-enum synaptics_pkt_type {
-	SYN_NEWABS = 0,
-	SYN_NEWABS_STRICT = 1,
-	SYN_NEWABS_RELAXED = 2,
-	SYN_OLDABS = 3,
-};
-
-struct synaptics_hw_state {
-	int x;
-	int y;
-	int z;
-	int w;
-	unsigned int left: 1;
-	unsigned int right: 1;
-	unsigned int middle: 1;
-	unsigned int up: 1;
-	unsigned int down: 1;
-	u8 ext_buttons;
-	s8 scroll;
-};
-
-struct synaptics_device_info {
-	u32 model_id;
-	u32 firmware_id;
-	u32 board_id;
-	u32 capabilities;
-	u32 ext_cap;
-	u32 ext_cap_0c;
-	u32 ext_cap_10;
-	u32 identity;
-	u32 x_res;
-	u32 y_res;
-	u32 x_max;
-	u32 y_max;
-	u32 x_min;
-	u32 y_min;
-};
-
-struct synaptics_data {
-	struct synaptics_device_info info;
-	enum synaptics_pkt_type pkt_type;
-	u8 mode;
-	int scroll;
-	bool absolute_mode;
-	bool disable_gesture;
-	struct serio *pt_port;
-	struct synaptics_hw_state agm;
-	unsigned int agm_count;
-	long unsigned int press_start;
-	bool press;
-	bool report_press;
-	bool is_forcepad;
-};
-
-struct min_max_quirk {
-	const char * const *pnp_ids;
-	struct {
-		u32 min;
-		u32 max;
-	} board_id;
-	u32 x_min;
-	u32 x_max;
-	u32 y_min;
-	u32 y_max;
-};
-
-enum {
-	SYNAPTICS_INTERTOUCH_NOT_SET = 4294967295,
-	SYNAPTICS_INTERTOUCH_OFF = 0,
-	SYNAPTICS_INTERTOUCH_ON = 1,
-};
-
-struct focaltech_finger_state {
-	bool active;
-	bool valid;
-	unsigned int x;
-	unsigned int y;
-};
-
-struct focaltech_hw_state {
-	struct focaltech_finger_state fingers[5];
-	unsigned int width;
-	bool pressed;
-};
-
-struct focaltech_data {
-	unsigned int x_max;
-	unsigned int y_max;
-	struct focaltech_hw_state state;
-};
-
-enum SS4_PACKET_ID {
-	SS4_PACKET_ID_IDLE = 0,
-	SS4_PACKET_ID_ONE = 1,
-	SS4_PACKET_ID_TWO = 2,
-	SS4_PACKET_ID_MULTI = 3,
-	SS4_PACKET_ID_STICK = 4,
-};
-
-enum V7_PACKET_ID {
-	V7_PACKET_ID_IDLE = 0,
-	V7_PACKET_ID_TWO = 1,
-	V7_PACKET_ID_MULTI = 2,
-	V7_PACKET_ID_NEW = 3,
-	V7_PACKET_ID_UNKNOWN = 4,
-};
-
-struct alps_protocol_info {
-	u16 version;
-	u8 byte0;
-	u8 mask0;
-	unsigned int flags;
-};
-
-struct alps_model_info {
-	u8 signature[3];
-	struct alps_protocol_info protocol_info;
-};
-
-struct alps_nibble_commands {
-	int command;
-	unsigned char data;
-};
-
-struct alps_bitmap_point {
-	int start_bit;
-	int num_bits;
-};
-
-struct alps_fields {
-	unsigned int x_map;
-	unsigned int y_map;
-	unsigned int fingers;
-	int pressure;
-	struct input_mt_pos st;
-	struct input_mt_pos mt[4];
-	unsigned int first_mp: 1;
-	unsigned int is_mp: 1;
-	unsigned int left: 1;
-	unsigned int right: 1;
-	unsigned int middle: 1;
-	unsigned int ts_left: 1;
-	unsigned int ts_right: 1;
-	unsigned int ts_middle: 1;
-};
-
-struct alps_data {
-	struct psmouse *psmouse;
-	struct input_dev *dev2;
-	struct input_dev *dev3;
-	char phys2[32];
-	char phys3[32];
-	struct delayed_work dev3_register_work;
-	const struct alps_nibble_commands *nibble_commands;
-	int addr_command;
-	u16 proto_version;
-	u8 byte0;
-	u8 mask0;
-	u8 dev_id[3];
-	u8 fw_ver[3];
-	int flags;
-	int x_max;
-	int y_max;
-	int x_bits;
-	int y_bits;
-	unsigned int x_res;
-	unsigned int y_res;
-	int (*hw_init)(struct psmouse *);
-	void (*process_packet)(struct psmouse *);
-	int (*decode_fields)(struct alps_fields *, unsigned char *, struct psmouse *);
-	void (*set_abs_params)(struct alps_data *, struct input_dev *);
-	int prev_fin;
-	int multi_packet;
-	int second_touch;
-	unsigned char multi_data[6];
-	struct alps_fields f;
-	u8 quirks;
-	struct timer_list timer;
-};
-
-struct byd_data {
-	struct timer_list timer;
-	struct psmouse *psmouse;
-	s32 abs_x;
-	s32 abs_y;
-	volatile long unsigned int last_touch_time;
-	bool btn_left;
-	bool btn_right;
-	bool touch;
-};
-
-struct ps2pp_info {
-	u8 model;
-	u8 kind;
-	u16 features;
-};
-
-struct lifebook_data {
-	struct input_dev *dev2;
-	char phys[32];
-};
-
-struct trackpoint_data {
-	u8 variant_id;
-	u8 firmware_id;
-	u8 sensitivity;
-	u8 speed;
-	u8 inertia;
-	u8 reach;
-	u8 draghys;
-	u8 mindrag;
-	u8 thresh;
-	u8 upthresh;
-	u8 ztime;
-	u8 jenks;
-	u8 drift_time;
-	bool press_to_select;
-	bool skipback;
-	bool ext_dev;
-};
-
-struct trackpoint_attr_data {
-	size_t field_offset;
-	u8 command;
-	u8 mask;
-	bool inverted;
-	u8 power_on_default;
-};
-
-struct cytp_contact {
-	int x;
-	int y;
-	int z;
-};
-
-struct cytp_report_data {
-	int contact_cnt;
-	struct cytp_contact contacts[2];
-	unsigned int left: 1;
-	unsigned int right: 1;
-	unsigned int middle: 1;
-	unsigned int tap: 1;
-};
-
-struct cytp_data {
-	int fw_version;
-	int pkt_size;
-	int mode;
-	int tp_min_pressure;
-	int tp_max_pressure;
-	int tp_width;
-	int tp_high;
-	int tp_max_abs_x;
-	int tp_max_abs_y;
-	int tp_res_x;
-	int tp_res_y;
-	int tp_metrics_supported;
-};
-
-struct psmouse_smbus_dev {
-	struct i2c_board_info board;
-	struct psmouse *psmouse;
-	struct i2c_client *client;
-	struct list_head node;
-	bool dead;
-	bool need_deactivate;
-};
-
-struct psmouse_smbus_removal_work {
-	struct work_struct work;
-	struct i2c_client *client;
-};
-
-struct touchscreen_properties {
-	unsigned int max_x;
-	unsigned int max_y;
-	bool invert_x;
-	bool invert_y;
-	bool swap_x_y;
-};
-
-struct trace_event_raw_rtc_time_alarm_class {
-	struct trace_entry ent;
-	time64_t secs;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_freq {
-	struct trace_entry ent;
-	int freq;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_irq_set_state {
-	struct trace_entry ent;
-	int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_alarm_irq_enable {
-	struct trace_entry ent;
-	unsigned int enabled;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_offset_class {
-	struct trace_entry ent;
-	long int offset;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_raw_rtc_timer_class {
-	struct trace_entry ent;
-	struct rtc_timer *timer;
-	ktime_t expires;
-	ktime_t period;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rtc_time_alarm_class {};
-
-struct trace_event_data_offsets_rtc_irq_set_freq {};
-
-struct trace_event_data_offsets_rtc_irq_set_state {};
-
-struct trace_event_data_offsets_rtc_alarm_irq_enable {};
-
-struct trace_event_data_offsets_rtc_offset_class {};
-
-struct trace_event_data_offsets_rtc_timer_class {};
-
-typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
-
-typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
-
-typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
-
-typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
-
-typedef void (*btf_trace_rtc_set_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_read_offset)(void *, long int, int);
-
-typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
-
-typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
-
-enum {
-	none = 0,
-	day = 1,
-	month = 2,
-	year = 3,
-};
-
-struct nvmem_cell_info {
-	const char *name;
-	unsigned int offset;
-	unsigned int bytes;
-	unsigned int bit_offset;
-	unsigned int nbits;
-};
-
-typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
-
-typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
-
-enum nvmem_type {
-	NVMEM_TYPE_UNKNOWN = 0,
-	NVMEM_TYPE_EEPROM = 1,
-	NVMEM_TYPE_OTP = 2,
-	NVMEM_TYPE_BATTERY_BACKED = 3,
-};
-
-struct nvmem_config {
-	struct device *dev;
-	const char *name;
-	int id;
-	struct module *owner;
-	const struct nvmem_cell_info *cells;
-	int ncells;
-	enum nvmem_type type;
-	bool read_only;
-	bool root_only;
-	bool no_of_node;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	int size;
-	int word_size;
-	int stride;
-	void *priv;
-	bool compat;
-	struct device *base_dev;
-};
-
-struct nvmem_device;
-
-struct cmos_rtc_board_info {
-	void (*wake_on)(struct device *);
-	void (*wake_off)(struct device *);
-	u32 flags;
-	int address_space;
-	u8 rtc_day_alarm;
-	u8 rtc_mon_alarm;
-	u8 rtc_century;
-};
-
-struct cmos_rtc {
-	struct rtc_device *rtc;
-	struct device *dev;
-	int irq;
-	struct resource *iomem;
-	time64_t alarm_expires;
-	void (*wake_on)(struct device *);
-	void (*wake_off)(struct device *);
-	u8 enabled_wake;
-	u8 suspend_ctrl;
-	u8 day_alrm;
-	u8 mon_alrm;
-	u8 century;
-	struct rtc_wkalrm saved_wkalrm;
-};
-
-struct i2c_devinfo {
-	struct list_head list;
-	int busnum;
-	struct i2c_board_info board_info;
-};
-
-struct i2c_device_identity {
-	u16 manufacturer_id;
-	u16 part_id;
-	u8 die_revision;
-};
-
-struct i2c_timings {
-	u32 bus_freq_hz;
-	u32 scl_rise_ns;
-	u32 scl_fall_ns;
-	u32 scl_int_delay_ns;
-	u32 sda_fall_ns;
-	u32 sda_hold_ns;
-	u32 digital_filter_width_ns;
-	u32 analog_filter_cutoff_freq_hz;
-};
-
-struct trace_event_raw_i2c_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 msg_nr;
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_i2c_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 nr_msgs;
-	__s16 ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_i2c_write {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_read {};
-
-struct trace_event_data_offsets_i2c_reply {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_i2c_result {};
-
-typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
-
-typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
-
-struct i2c_dummy_devres {
-	struct i2c_client *client;
-};
-
-struct class_compat___2;
-
-struct i2c_cmd_arg {
-	unsigned int cmd;
-	void *arg;
-};
-
-struct i2c_smbus_alert_setup {
-	int irq;
-};
-
-struct trace_event_raw_smbus_write {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 command;
-	__u8 len;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_read {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 flags;
-	__u16 addr;
-	__u8 command;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_reply {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 command;
-	__u8 len;
-	__u32 protocol;
-	__u8 buf[34];
-	char __data[0];
-};
-
-struct trace_event_raw_smbus_result {
-	struct trace_entry ent;
-	int adapter_nr;
-	__u16 addr;
-	__u16 flags;
-	__u8 read_write;
-	__u8 command;
-	__s16 res;
-	__u32 protocol;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_smbus_write {};
-
-struct trace_event_data_offsets_smbus_read {};
-
-struct trace_event_data_offsets_smbus_reply {};
-
-struct trace_event_data_offsets_smbus_result {};
-
-typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *);
-
-typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int);
-
-typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *, int);
-
-typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
-
-struct i2c_acpi_handler_data {
-	struct acpi_connection_info info;
-	struct i2c_adapter *adapter;
-};
-
-struct gsb_buffer {
-	u8 status;
-	u8 len;
-	union {
-		u16 wdata;
-		u8 bdata;
-		u8 data[0];
-	};
-};
-
-struct i2c_acpi_lookup {
-	struct i2c_board_info *info;
-	acpi_handle adapter_handle;
-	acpi_handle device_handle;
-	acpi_handle search_handle;
-	int n;
-	int index;
-	u32 speed;
-	u32 min_speed;
-	u32 force_speed;
-};
-
-struct i2c_smbus_alert {
-	struct work_struct alert;
-	struct i2c_client *ara;
-};
-
-struct alert_data {
-	short unsigned int addr;
-	enum i2c_alert_protocol type;
-	unsigned int data;
-};
-
-struct itco_wdt_platform_data {
-	char name[32];
-	unsigned int version;
-	void *no_reboot_priv;
-	int (*update_no_reboot_bit)(void *, bool);
-};
-
-struct i801_priv {
-	struct i2c_adapter adapter;
-	long unsigned int smba;
-	unsigned char original_hstcfg;
-	unsigned char original_slvcmd;
-	struct pci_dev *pci_dev;
-	unsigned int features;
-	wait_queue_head_t waitq;
-	u8 status;
-	u8 cmd;
-	bool is_read;
-	int count;
-	int len;
-	u8 *data;
-	struct platform_device *tco_pdev;
-	bool acpi_reserved;
-	struct mutex acpi_lock;
-};
-
-struct dmi_onboard_device_info {
-	const char *name;
-	u8 type;
-	short unsigned int i2c_addr;
-	const char *i2c_type;
-};
-
-struct pps_ktime {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_ktime_compat {
-	__s64 sec;
-	__s32 nsec;
-	__u32 flags;
-};
-
-struct pps_kinfo {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-};
-
-struct pps_kinfo_compat {
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime_compat assert_tu;
-	struct pps_ktime_compat clear_tu;
-	int current_mode;
-} __attribute__((packed));
-
-struct pps_kparams {
-	int api_version;
-	int mode;
-	struct pps_ktime assert_off_tu;
-	struct pps_ktime clear_off_tu;
-};
-
-struct pps_fdata {
-	struct pps_kinfo info;
-	struct pps_ktime timeout;
-};
-
-struct pps_fdata_compat {
-	struct pps_kinfo_compat info;
-	struct pps_ktime_compat timeout;
-} __attribute__((packed));
-
-struct pps_bind_args {
-	int tsformat;
-	int edge;
-	int consumer;
-};
-
-struct pps_device;
-
-struct pps_source_info {
-	char name[32];
-	char path[32];
-	int mode;
-	void (*echo)(struct pps_device *, int, void *);
-	struct module *owner;
-	struct device *dev;
-};
-
-struct pps_device {
-	struct pps_source_info info;
-	struct pps_kparams params;
-	__u32 assert_sequence;
-	__u32 clear_sequence;
-	struct pps_ktime assert_tu;
-	struct pps_ktime clear_tu;
-	int current_mode;
-	unsigned int last_ev;
-	wait_queue_head_t queue;
-	unsigned int id;
-	const void *lookup_cookie;
-	struct cdev cdev;
-	struct device *dev;
-	struct fasync_struct *async_queue;
-	spinlock_t lock;
-};
-
-struct pps_event_time {
-	struct timespec64 ts_real;
-};
-
-struct ptp_extts_event {
-	struct ptp_clock_time t;
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-enum ptp_clock_events {
-	PTP_CLOCK_ALARM = 0,
-	PTP_CLOCK_EXTTS = 1,
-	PTP_CLOCK_PPS = 2,
-	PTP_CLOCK_PPSUSR = 3,
-};
-
-struct ptp_clock_event {
-	int type;
-	int index;
-	union {
-		u64 timestamp;
-		struct pps_event_time pps_times;
-	};
-};
-
-struct timestamp_event_queue {
-	struct ptp_extts_event buf[128];
-	int head;
-	int tail;
-	spinlock_t lock;
-};
-
-struct ptp_clock___2 {
-	struct posix_clock clock;
-	struct device dev;
-	struct ptp_clock_info *info;
-	dev_t devid;
-	int index;
-	struct pps_device *pps_source;
-	long int dialed_frequency;
-	struct timestamp_event_queue tsevq;
-	struct mutex tsevq_mux;
-	struct mutex pincfg_mux;
-	wait_queue_head_t tsev_wq;
-	int defunct;
-	struct device_attribute *pin_dev_attr;
-	struct attribute **pin_attr;
-	struct attribute_group pin_attr_group;
-	const struct attribute_group *pin_attr_groups[2];
-	struct kthread_worker *kworker;
-	struct kthread_delayed_work aux_work;
-};
-
-struct ptp_clock_caps {
-	int max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int pps;
-	int n_pins;
-	int cross_timestamping;
-	int rsv[13];
-};
-
-struct ptp_sys_offset {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[51];
-};
-
-struct ptp_sys_offset_extended {
-	unsigned int n_samples;
-	unsigned int rsv[3];
-	struct ptp_clock_time ts[75];
-};
-
-struct ptp_sys_offset_precise {
-	struct ptp_clock_time device;
-	struct ptp_clock_time sys_realtime;
-	struct ptp_clock_time sys_monoraw;
-	unsigned int rsv[4];
-};
-
-enum power_supply_notifier_events {
-	PSY_EVENT_PROP_CHANGED = 0,
-};
-
-struct power_supply_battery_ocv_table {
-	int ocv;
-	int capacity;
-};
-
-struct power_supply_battery_info {
-	int energy_full_design_uwh;
-	int charge_full_design_uah;
-	int voltage_min_design_uv;
-	int voltage_max_design_uv;
-	int precharge_current_ua;
-	int charge_term_current_ua;
-	int constant_charge_current_max_ua;
-	int constant_charge_voltage_max_uv;
-	int factory_internal_resistance_uohm;
-	int ocv_temp[20];
-	struct power_supply_battery_ocv_table *ocv_table[20];
-	int ocv_table_size[20];
-};
-
-struct psy_am_i_supplied_data {
-	struct power_supply *psy;
-	unsigned int count;
-};
-
-enum hwmon_sensor_types {
-	hwmon_chip = 0,
-	hwmon_temp = 1,
-	hwmon_in = 2,
-	hwmon_curr = 3,
-	hwmon_power = 4,
-	hwmon_energy = 5,
-	hwmon_humidity = 6,
-	hwmon_fan = 7,
-	hwmon_pwm = 8,
-	hwmon_max = 9,
-};
-
-enum hwmon_temp_attributes {
-	hwmon_temp_input = 0,
-	hwmon_temp_type = 1,
-	hwmon_temp_lcrit = 2,
-	hwmon_temp_lcrit_hyst = 3,
-	hwmon_temp_min = 4,
-	hwmon_temp_min_hyst = 5,
-	hwmon_temp_max = 6,
-	hwmon_temp_max_hyst = 7,
-	hwmon_temp_crit = 8,
-	hwmon_temp_crit_hyst = 9,
-	hwmon_temp_emergency = 10,
-	hwmon_temp_emergency_hyst = 11,
-	hwmon_temp_alarm = 12,
-	hwmon_temp_lcrit_alarm = 13,
-	hwmon_temp_min_alarm = 14,
-	hwmon_temp_max_alarm = 15,
-	hwmon_temp_crit_alarm = 16,
-	hwmon_temp_emergency_alarm = 17,
-	hwmon_temp_fault = 18,
-	hwmon_temp_offset = 19,
-	hwmon_temp_label = 20,
-	hwmon_temp_lowest = 21,
-	hwmon_temp_highest = 22,
-	hwmon_temp_reset_history = 23,
-};
-
-enum hwmon_in_attributes {
-	hwmon_in_input = 0,
-	hwmon_in_min = 1,
-	hwmon_in_max = 2,
-	hwmon_in_lcrit = 3,
-	hwmon_in_crit = 4,
-	hwmon_in_average = 5,
-	hwmon_in_lowest = 6,
-	hwmon_in_highest = 7,
-	hwmon_in_reset_history = 8,
-	hwmon_in_label = 9,
-	hwmon_in_alarm = 10,
-	hwmon_in_min_alarm = 11,
-	hwmon_in_max_alarm = 12,
-	hwmon_in_lcrit_alarm = 13,
-	hwmon_in_crit_alarm = 14,
-	hwmon_in_enable = 15,
-};
-
-enum hwmon_curr_attributes {
-	hwmon_curr_input = 0,
-	hwmon_curr_min = 1,
-	hwmon_curr_max = 2,
-	hwmon_curr_lcrit = 3,
-	hwmon_curr_crit = 4,
-	hwmon_curr_average = 5,
-	hwmon_curr_lowest = 6,
-	hwmon_curr_highest = 7,
-	hwmon_curr_reset_history = 8,
-	hwmon_curr_label = 9,
-	hwmon_curr_alarm = 10,
-	hwmon_curr_min_alarm = 11,
-	hwmon_curr_max_alarm = 12,
-	hwmon_curr_lcrit_alarm = 13,
-	hwmon_curr_crit_alarm = 14,
-};
-
-struct hwmon_ops {
-	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
-	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
-	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
-	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
-};
-
-struct hwmon_channel_info {
-	enum hwmon_sensor_types type;
-	const u32 *config;
-};
-
-struct hwmon_chip_info {
-	const struct hwmon_ops *ops;
-	const struct hwmon_channel_info **info;
-};
-
-struct power_supply_hwmon {
-	struct power_supply *psy;
-	long unsigned int *props;
-};
-
-enum hwmon_chip_attributes {
-	hwmon_chip_temp_reset_history = 0,
-	hwmon_chip_in_reset_history = 1,
-	hwmon_chip_curr_reset_history = 2,
-	hwmon_chip_power_reset_history = 3,
-	hwmon_chip_register_tz = 4,
-	hwmon_chip_update_interval = 5,
-	hwmon_chip_alarms = 6,
-	hwmon_chip_samples = 7,
-	hwmon_chip_curr_samples = 8,
-	hwmon_chip_in_samples = 9,
-	hwmon_chip_power_samples = 10,
-	hwmon_chip_temp_samples = 11,
-};
-
-enum hwmon_power_attributes {
-	hwmon_power_average = 0,
-	hwmon_power_average_interval = 1,
-	hwmon_power_average_interval_max = 2,
-	hwmon_power_average_interval_min = 3,
-	hwmon_power_average_highest = 4,
-	hwmon_power_average_lowest = 5,
-	hwmon_power_average_max = 6,
-	hwmon_power_average_min = 7,
-	hwmon_power_input = 8,
-	hwmon_power_input_highest = 9,
-	hwmon_power_input_lowest = 10,
-	hwmon_power_reset_history = 11,
-	hwmon_power_accuracy = 12,
-	hwmon_power_cap = 13,
-	hwmon_power_cap_hyst = 14,
-	hwmon_power_cap_max = 15,
-	hwmon_power_cap_min = 16,
-	hwmon_power_min = 17,
-	hwmon_power_max = 18,
-	hwmon_power_crit = 19,
-	hwmon_power_lcrit = 20,
-	hwmon_power_label = 21,
-	hwmon_power_alarm = 22,
-	hwmon_power_cap_alarm = 23,
-	hwmon_power_min_alarm = 24,
-	hwmon_power_max_alarm = 25,
-	hwmon_power_lcrit_alarm = 26,
-	hwmon_power_crit_alarm = 27,
-};
-
-enum hwmon_energy_attributes {
-	hwmon_energy_input = 0,
-	hwmon_energy_label = 1,
-};
-
-enum hwmon_humidity_attributes {
-	hwmon_humidity_input = 0,
-	hwmon_humidity_label = 1,
-	hwmon_humidity_min = 2,
-	hwmon_humidity_min_hyst = 3,
-	hwmon_humidity_max = 4,
-	hwmon_humidity_max_hyst = 5,
-	hwmon_humidity_alarm = 6,
-	hwmon_humidity_fault = 7,
-};
-
-enum hwmon_fan_attributes {
-	hwmon_fan_input = 0,
-	hwmon_fan_label = 1,
-	hwmon_fan_min = 2,
-	hwmon_fan_max = 3,
-	hwmon_fan_div = 4,
-	hwmon_fan_pulses = 5,
-	hwmon_fan_target = 6,
-	hwmon_fan_alarm = 7,
-	hwmon_fan_min_alarm = 8,
-	hwmon_fan_max_alarm = 9,
-	hwmon_fan_fault = 10,
-};
-
-enum hwmon_pwm_attributes {
-	hwmon_pwm_input = 0,
-	hwmon_pwm_enable = 1,
-	hwmon_pwm_mode = 2,
-	hwmon_pwm_freq = 3,
-};
-
-struct trace_event_raw_hwmon_attr_class {
-	struct trace_entry ent;
-	int index;
-	u32 __data_loc_attr_name;
-	long int val;
-	char __data[0];
-};
-
-struct trace_event_raw_hwmon_attr_show_string {
-	struct trace_entry ent;
-	int index;
-	u32 __data_loc_attr_name;
-	u32 __data_loc_label;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_hwmon_attr_class {
-	u32 attr_name;
-};
-
-struct trace_event_data_offsets_hwmon_attr_show_string {
-	u32 attr_name;
-	u32 label;
-};
-
-typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
-
-typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
-
-typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
-
-struct hwmon_device {
-	const char *name;
-	struct device dev;
-	const struct hwmon_chip_info *chip;
-	struct attribute_group group;
-	const struct attribute_group **groups;
-};
-
-struct hwmon_device_attribute {
-	struct device_attribute dev_attr;
-	const struct hwmon_ops *ops;
-	enum hwmon_sensor_types type;
-	u32 attr;
-	int index;
-	char name[32];
-};
-
-struct trace_event_raw_thermal_temperature {
-	struct trace_entry ent;
-	u32 __data_loc_thermal_zone;
-	int id;
-	int temp_prev;
-	int temp;
-	char __data[0];
-};
-
-struct trace_event_raw_cdev_update {
-	struct trace_entry ent;
-	u32 __data_loc_type;
-	long unsigned int target;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_zone_trip {
-	struct trace_entry ent;
-	u32 __data_loc_thermal_zone;
-	int id;
-	int trip;
-	enum thermal_trip_type trip_type;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_thermal_temperature {
-	u32 thermal_zone;
-};
-
-struct trace_event_data_offsets_cdev_update {
-	u32 type;
-};
-
-struct trace_event_data_offsets_thermal_zone_trip {
-	u32 thermal_zone;
-};
-
-typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
-
-typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);
-
-typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
-
-struct thermal_instance {
-	int id;
-	char name[20];
-	struct thermal_zone_device *tz;
-	struct thermal_cooling_device *cdev;
-	int trip;
-	bool initialized;
-	long unsigned int upper;
-	long unsigned int lower;
-	long unsigned int target;
-	char attr_name[20];
-	struct device_attribute attr;
-	char weight_attr_name[20];
-	struct device_attribute weight_attr;
-	struct list_head tz_node;
-	struct list_head cdev_node;
-	unsigned int weight;
-};
-
-struct thermal_hwmon_device {
-	char type[20];
-	struct device *device;
-	int count;
-	struct list_head tz_list;
-	struct list_head node;
-};
-
-struct thermal_hwmon_attr {
-	struct device_attribute attr;
-	char name[16];
-};
-
-struct thermal_hwmon_temp {
-	struct list_head hwmon_node;
-	struct thermal_zone_device *tz;
-	struct thermal_hwmon_attr temp_input;
-	struct thermal_hwmon_attr temp_crit;
-};
-
-struct mdp_device_descriptor_s {
-	__u32 number;
-	__u32 major;
-	__u32 minor;
-	__u32 raid_disk;
-	__u32 state;
-	__u32 reserved[27];
-};
-
-typedef struct mdp_device_descriptor_s mdp_disk_t;
-
-struct mdp_superblock_s {
-	__u32 md_magic;
-	__u32 major_version;
-	__u32 minor_version;
-	__u32 patch_version;
-	__u32 gvalid_words;
-	__u32 set_uuid0;
-	__u32 ctime;
-	__u32 level;
-	__u32 size;
-	__u32 nr_disks;
-	__u32 raid_disks;
-	__u32 md_minor;
-	__u32 not_persistent;
-	__u32 set_uuid1;
-	__u32 set_uuid2;
-	__u32 set_uuid3;
-	__u32 gstate_creserved[16];
-	__u32 utime;
-	__u32 state;
-	__u32 active_disks;
-	__u32 working_disks;
-	__u32 failed_disks;
-	__u32 spare_disks;
-	__u32 sb_csum;
-	__u32 events_lo;
-	__u32 events_hi;
-	__u32 cp_events_lo;
-	__u32 cp_events_hi;
-	__u32 recovery_cp;
-	__u64 reshape_position;
-	__u32 new_level;
-	__u32 delta_disks;
-	__u32 new_layout;
-	__u32 new_chunk;
-	__u32 gstate_sreserved[14];
-	__u32 layout;
-	__u32 chunk_size;
-	__u32 root_pv;
-	__u32 root_block;
-	__u32 pstate_reserved[60];
-	mdp_disk_t disks[27];
-	__u32 reserved[0];
-	mdp_disk_t this_disk;
-};
-
-typedef struct mdp_superblock_s mdp_super_t;
-
-struct mdp_superblock_1 {
-	__le32 magic;
-	__le32 major_version;
-	__le32 feature_map;
-	__le32 pad0;
-	__u8 set_uuid[16];
-	char set_name[32];
-	__le64 ctime;
-	__le32 level;
-	__le32 layout;
-	__le64 size;
-	__le32 chunksize;
-	__le32 raid_disks;
-	union {
-		__le32 bitmap_offset;
-		struct {
-			__le16 offset;
-			__le16 size;
-		} ppl;
-	};
-	__le32 new_level;
-	__le64 reshape_position;
-	__le32 delta_disks;
-	__le32 new_layout;
-	__le32 new_chunk;
-	__le32 new_offset;
-	__le64 data_offset;
-	__le64 data_size;
-	__le64 super_offset;
-	union {
-		__le64 recovery_offset;
-		__le64 journal_tail;
-	};
-	__le32 dev_number;
-	__le32 cnt_corrected_read;
-	__u8 device_uuid[16];
-	__u8 devflags;
-	__u8 bblog_shift;
-	__le16 bblog_size;
-	__le32 bblog_offset;
-	__le64 utime;
-	__le64 events;
-	__le64 resync_offset;
-	__le32 sb_csum;
-	__le32 max_dev;
-	__u8 pad3[32];
-	__le16 dev_roles[0];
-};
-
-struct mdu_version_s {
-	int major;
-	int minor;
-	int patchlevel;
-};
-
-typedef struct mdu_version_s mdu_version_t;
-
-struct mdu_bitmap_file_s {
-	char pathname[4096];
-};
-
-typedef struct mdu_bitmap_file_s mdu_bitmap_file_t;
-
-struct mddev;
-
-struct md_rdev;
-
-struct md_cluster_operations {
-	int (*join)(struct mddev *, int);
-	int (*leave)(struct mddev *);
-	int (*slot_number)(struct mddev *);
-	int (*resync_info_update)(struct mddev *, sector_t, sector_t);
-	void (*resync_info_get)(struct mddev *, sector_t *, sector_t *);
-	int (*metadata_update_start)(struct mddev *);
-	int (*metadata_update_finish)(struct mddev *);
-	void (*metadata_update_cancel)(struct mddev *);
-	int (*resync_start)(struct mddev *);
-	int (*resync_finish)(struct mddev *);
-	int (*area_resyncing)(struct mddev *, int, sector_t, sector_t);
-	int (*add_new_disk)(struct mddev *, struct md_rdev *);
-	void (*add_new_disk_cancel)(struct mddev *);
-	int (*new_disk_ack)(struct mddev *, bool);
-	int (*remove_disk)(struct mddev *, struct md_rdev *);
-	void (*load_bitmaps)(struct mddev *, int);
-	int (*gather_bitmaps)(struct md_rdev *);
-	int (*resize_bitmaps)(struct mddev *, sector_t, sector_t);
-	int (*lock_all_bitmaps)(struct mddev *);
-	void (*unlock_all_bitmaps)(struct mddev *);
-	void (*update_size)(struct mddev *, sector_t);
-};
-
-struct md_cluster_info;
-
-struct md_personality;
-
-struct md_thread;
-
-struct bitmap;
-
-struct mddev {
-	void *private;
-	struct md_personality *pers;
-	dev_t unit;
-	int md_minor;
-	struct list_head disks;
-	long unsigned int flags;
-	long unsigned int sb_flags;
-	int suspended;
-	atomic_t active_io;
-	int ro;
-	int sysfs_active;
-	struct gendisk *gendisk;
-	struct kobject kobj;
-	int hold_active;
-	int major_version;
-	int minor_version;
-	int patch_version;
-	int persistent;
-	int external;
-	char metadata_type[17];
-	int chunk_sectors;
-	time64_t ctime;
-	time64_t utime;
-	int level;
-	int layout;
-	char clevel[16];
-	int raid_disks;
-	int max_disks;
-	sector_t dev_sectors;
-	sector_t array_sectors;
-	int external_size;
-	__u64 events;
-	int can_decrease_events;
-	char uuid[16];
-	sector_t reshape_position;
-	int delta_disks;
-	int new_level;
-	int new_layout;
-	int new_chunk_sectors;
-	int reshape_backwards;
-	struct md_thread *thread;
-	struct md_thread *sync_thread;
-	char *last_sync_action;
-	sector_t curr_resync;
-	sector_t curr_resync_completed;
-	long unsigned int resync_mark;
-	sector_t resync_mark_cnt;
-	sector_t curr_mark_cnt;
-	sector_t resync_max_sectors;
-	atomic64_t resync_mismatches;
-	sector_t suspend_lo;
-	sector_t suspend_hi;
-	int sync_speed_min;
-	int sync_speed_max;
-	int parallel_resync;
-	int ok_start_degraded;
-	long unsigned int recovery;
-	int recovery_disabled;
-	int in_sync;
-	struct mutex open_mutex;
-	struct mutex reconfig_mutex;
-	atomic_t active;
-	atomic_t openers;
-	int changed;
-	int degraded;
-	atomic_t recovery_active;
-	wait_queue_head_t recovery_wait;
-	sector_t recovery_cp;
-	sector_t resync_min;
-	sector_t resync_max;
-	struct kernfs_node *sysfs_state;
-	struct kernfs_node *sysfs_action;
-	struct work_struct del_work;
-	spinlock_t lock;
-	wait_queue_head_t sb_wait;
-	atomic_t pending_writes;
-	unsigned int safemode;
-	unsigned int safemode_delay;
-	struct timer_list safemode_timer;
-	struct percpu_ref writes_pending;
-	int sync_checkers;
-	struct request_queue *queue;
-	struct bitmap *bitmap;
-	struct {
-		struct file *file;
-		loff_t offset;
-		long unsigned int space;
-		loff_t default_offset;
-		long unsigned int default_space;
-		struct mutex mutex;
-		long unsigned int chunksize;
-		long unsigned int daemon_sleep;
-		long unsigned int max_write_behind;
-		int external;
-		int nodes;
-		char cluster_name[64];
-	} bitmap_info;
-	atomic_t max_corr_read_errors;
-	struct list_head all_mddevs;
-	struct attribute_group *to_remove;
-	struct bio_set bio_set;
-	struct bio_set sync_set;
-	struct bio *flush_bio;
-	atomic_t flush_pending;
-	ktime_t start_flush;
-	ktime_t last_flush;
-	struct work_struct flush_work;
-	struct work_struct event_work;
-	mempool_t *wb_info_pool;
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	struct md_cluster_info *cluster_info;
-	unsigned int good_device_nr;
-	bool has_superblocks: 1;
-	bool fail_last_dev: 1;
-};
-
-struct md_rdev {
-	struct list_head same_set;
-	sector_t sectors;
-	struct mddev *mddev;
-	int last_events;
-	struct block_device *meta_bdev;
-	struct block_device *bdev;
-	struct page *sb_page;
-	struct page *bb_page;
-	int sb_loaded;
-	__u64 sb_events;
-	sector_t data_offset;
-	sector_t new_data_offset;
-	sector_t sb_start;
-	int sb_size;
-	int preferred_minor;
-	struct kobject kobj;
-	long unsigned int flags;
-	wait_queue_head_t blocked_wait;
-	int desc_nr;
-	int raid_disk;
-	int new_raid_disk;
-	int saved_raid_disk;
-	union {
-		sector_t recovery_offset;
-		sector_t journal_tail;
-	};
-	atomic_t nr_pending;
-	atomic_t read_errors;
-	time64_t last_read_error;
-	atomic_t corrected_errors;
-	struct list_head wb_list;
-	spinlock_t wb_list_lock;
-	wait_queue_head_t wb_io_wait;
-	struct work_struct del_work;
-	struct kernfs_node *sysfs_state;
-	struct badblocks badblocks;
-	struct {
-		short int offset;
-		unsigned int size;
-		sector_t sector;
-	} ppl;
-};
-
-enum flag_bits {
-	Faulty = 0,
-	In_sync = 1,
-	Bitmap_sync = 2,
-	WriteMostly = 3,
-	AutoDetected = 4,
-	Blocked = 5,
-	WriteErrorSeen = 6,
-	FaultRecorded = 7,
-	BlockedBadBlocks = 8,
-	WantReplacement = 9,
-	Replacement = 10,
-	Candidate = 11,
-	Journal = 12,
-	ClusterRemove = 13,
-	RemoveSynchronized = 14,
-	ExternalBbl = 15,
-	FailFast = 16,
-	LastDev = 17,
-	WBCollisionCheck = 18,
-};
-
-enum mddev_flags {
-	MD_ARRAY_FIRST_USE = 0,
-	MD_CLOSING = 1,
-	MD_JOURNAL_CLEAN = 2,
-	MD_HAS_JOURNAL = 3,
-	MD_CLUSTER_RESYNC_LOCKED = 4,
-	MD_FAILFAST_SUPPORTED = 5,
-	MD_HAS_PPL = 6,
-	MD_HAS_MULTIPLE_PPLS = 7,
-	MD_ALLOW_SB_UPDATE = 8,
-	MD_UPDATING_SB = 9,
-	MD_NOT_READY = 10,
-	MD_BROKEN = 11,
-};
-
-enum mddev_sb_flags {
-	MD_SB_CHANGE_DEVS = 0,
-	MD_SB_CHANGE_CLEAN = 1,
-	MD_SB_CHANGE_PENDING = 2,
-	MD_SB_NEED_REWRITE = 3,
-};
-
-struct md_personality {
-	char *name;
-	int level;
-	struct list_head list;
-	struct module *owner;
-	bool (*make_request)(struct mddev *, struct bio *);
-	int (*run)(struct mddev *);
-	int (*start)(struct mddev *);
-	void (*free)(struct mddev *, void *);
-	void (*status)(struct seq_file *, struct mddev *);
-	void (*error_handler)(struct mddev *, struct md_rdev *);
-	int (*hot_add_disk)(struct mddev *, struct md_rdev *);
-	int (*hot_remove_disk)(struct mddev *, struct md_rdev *);
-	int (*spare_active)(struct mddev *);
-	sector_t (*sync_request)(struct mddev *, sector_t, int *);
-	int (*resize)(struct mddev *, sector_t);
-	sector_t (*size)(struct mddev *, sector_t, int);
-	int (*check_reshape)(struct mddev *);
-	int (*start_reshape)(struct mddev *);
-	void (*finish_reshape)(struct mddev *);
-	void (*update_reshape_pos)(struct mddev *);
-	void (*quiesce)(struct mddev *, int);
-	void * (*takeover)(struct mddev *);
-	int (*congested)(struct mddev *, int);
-	int (*change_consistency_policy)(struct mddev *, const char *);
-};
-
-struct md_thread {
-	void (*run)(struct md_thread *);
-	struct mddev *mddev;
-	wait_queue_head_t wqueue;
-	long unsigned int flags;
-	struct task_struct *tsk;
-	long unsigned int timeout;
-	void *private;
-};
-
-struct bitmap_page;
-
-struct bitmap_counts {
-	spinlock_t lock;
-	struct bitmap_page *bp;
-	long unsigned int pages;
-	long unsigned int missing_pages;
-	long unsigned int chunkshift;
-	long unsigned int chunks;
-};
-
-struct bitmap_storage {
-	struct file *file;
-	struct page *sb_page;
-	struct page **filemap;
-	long unsigned int *filemap_attr;
-	long unsigned int file_pages;
-	long unsigned int bytes;
-};
-
-struct bitmap {
-	struct bitmap_counts counts;
-	struct mddev *mddev;
-	__u64 events_cleared;
-	int need_sync;
-	struct bitmap_storage storage;
-	long unsigned int flags;
-	int allclean;
-	atomic_t behind_writes;
-	long unsigned int behind_writes_used;
-	long unsigned int daemon_lastrun;
-	long unsigned int last_end_sync;
-	atomic_t pending_writes;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t overflow_wait;
-	wait_queue_head_t behind_wait;
-	struct kernfs_node *sysfs_can_clear;
-	int cluster_slot;
-};
-
-enum recovery_flags {
-	MD_RECOVERY_RUNNING = 0,
-	MD_RECOVERY_SYNC = 1,
-	MD_RECOVERY_RECOVER = 2,
-	MD_RECOVERY_INTR = 3,
-	MD_RECOVERY_DONE = 4,
-	MD_RECOVERY_NEEDED = 5,
-	MD_RECOVERY_REQUESTED = 6,
-	MD_RECOVERY_CHECK = 7,
-	MD_RECOVERY_RESHAPE = 8,
-	MD_RECOVERY_FROZEN = 9,
-	MD_RECOVERY_ERROR = 10,
-	MD_RECOVERY_WAIT = 11,
-	MD_RESYNCING_REMOTE = 12,
-};
-
-struct md_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct mddev *, char *);
-	ssize_t (*store)(struct mddev *, const char *, size_t);
-};
-
-struct bitmap_page {
-	char *map;
-	unsigned int hijacked: 1;
-	unsigned int pending: 1;
-	unsigned int count: 30;
-};
-
-struct super_type {
-	char *name;
-	struct module *owner;
-	int (*load_super)(struct md_rdev *, struct md_rdev *, int);
-	int (*validate_super)(struct mddev *, struct md_rdev *);
-	void (*sync_super)(struct mddev *, struct md_rdev *);
-	long long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);
-	int (*allow_new_offset)(struct md_rdev *, long long unsigned int);
-};
-
-struct rdev_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct md_rdev *, char *);
-	ssize_t (*store)(struct md_rdev *, const char *, size_t);
-};
-
-enum array_state {
-	clear = 0,
-	inactive = 1,
-	suspended = 2,
-	readonly = 3,
-	read_auto = 4,
-	clean = 5,
-	active = 6,
-	write_pending = 7,
-	active_idle = 8,
-	broken = 9,
-	bad_word = 10,
-};
-
-struct detected_devices_node {
-	struct list_head list;
-	dev_t dev;
-};
-
-typedef __u16 bitmap_counter_t;
-
-enum bitmap_state {
-	BITMAP_STALE = 1,
-	BITMAP_WRITE_ERROR = 2,
-	BITMAP_HOSTENDIAN = 15,
-};
-
-struct bitmap_super_s {
-	__le32 magic;
-	__le32 version;
-	__u8 uuid[16];
-	__le64 events;
-	__le64 events_cleared;
-	__le64 sync_size;
-	__le32 state;
-	__le32 chunksize;
-	__le32 daemon_sleep;
-	__le32 write_behind;
-	__le32 sectors_reserved;
-	__le32 nodes;
-	__u8 cluster_name[64];
-	__u8 pad[120];
-};
-
-typedef struct bitmap_super_s bitmap_super_t;
-
-enum bitmap_page_attr {
-	BITMAP_PAGE_DIRTY = 0,
-	BITMAP_PAGE_PENDING = 1,
-	BITMAP_PAGE_NEEDWRITE = 2,
-};
-
-enum dm_queue_mode {
-	DM_TYPE_NONE = 0,
-	DM_TYPE_BIO_BASED = 1,
-	DM_TYPE_REQUEST_BASED = 2,
-	DM_TYPE_DAX_BIO_BASED = 3,
-	DM_TYPE_NVME_BIO_BASED = 4,
-};
-
-typedef enum {
-	STATUSTYPE_INFO = 0,
-	STATUSTYPE_TABLE = 1,
-} status_type_t;
-
-union map_info___2 {
-	void *ptr;
-};
-
-struct dm_target;
-
-typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
-
-struct dm_table;
-
-struct target_type;
-
-struct dm_target {
-	struct dm_table *table;
-	struct target_type *type;
-	sector_t begin;
-	sector_t len;
-	uint32_t max_io_len;
-	unsigned int num_flush_bios;
-	unsigned int num_discard_bios;
-	unsigned int num_secure_erase_bios;
-	unsigned int num_write_same_bios;
-	unsigned int num_write_zeroes_bios;
-	unsigned int per_io_data_size;
-	void *private;
-	char *error;
-	bool flush_supported: 1;
-	bool discards_supported: 1;
-};
-
-typedef void (*dm_dtr_fn)(struct dm_target *);
-
-typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
-
-typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info___2 *, struct request **);
-
-typedef void (*dm_release_clone_request_fn)(struct request *, union map_info___2 *);
-
-typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
-
-typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info___2 *);
-
-typedef void (*dm_presuspend_fn)(struct dm_target *);
-
-typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
-
-typedef void (*dm_postsuspend_fn)(struct dm_target *);
-
-typedef int (*dm_preresume_fn)(struct dm_target *);
-
-typedef void (*dm_resume_fn)(struct dm_target *);
-
-typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
-
-typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
-
-typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
-
-struct dm_dev;
-
-typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
-
-struct dm_dev {
-	struct block_device *bdev;
-	struct dax_device *dax_dev;
-	fmode_t mode;
-	char name[16];
-};
-
-typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
-
-typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
-
-typedef int (*dm_busy_fn)(struct dm_target *);
-
-typedef long int (*dm_dax_direct_access_fn)(struct dm_target *, long unsigned int, long int, void **, pfn_t *);
-
-typedef size_t (*dm_dax_copy_iter_fn)(struct dm_target *, long unsigned int, void *, size_t, struct iov_iter *);
-
-struct target_type {
-	uint64_t features;
-	const char *name;
-	struct module *module;
-	unsigned int version[3];
-	dm_ctr_fn ctr;
-	dm_dtr_fn dtr;
-	dm_map_fn map;
-	dm_clone_and_map_request_fn clone_and_map_rq;
-	dm_release_clone_request_fn release_clone_rq;
-	dm_endio_fn end_io;
-	dm_request_endio_fn rq_end_io;
-	dm_presuspend_fn presuspend;
-	dm_presuspend_undo_fn presuspend_undo;
-	dm_postsuspend_fn postsuspend;
-	dm_preresume_fn preresume;
-	dm_resume_fn resume;
-	dm_status_fn status;
-	dm_message_fn message;
-	dm_prepare_ioctl_fn prepare_ioctl;
-	dm_busy_fn busy;
-	dm_iterate_devices_fn iterate_devices;
-	dm_io_hints_fn io_hints;
-	dm_dax_direct_access_fn direct_access;
-	dm_dax_copy_iter_fn dax_copy_from_iter;
-	dm_dax_copy_iter_fn dax_copy_to_iter;
-	struct list_head list;
-};
-
-struct dm_stats_last_position;
-
-struct dm_stats {
-	struct mutex mutex;
-	struct list_head list;
-	struct dm_stats_last_position *last;
-	sector_t last_sector;
-	unsigned int last_rw;
-};
-
-struct dm_stats_aux {
-	bool merged;
-	long long unsigned int duration_ns;
-};
-
-struct dm_kobject_holder {
-	struct kobject kobj;
-	struct completion completion;
-};
-
-struct mapped_device {
-	struct mutex suspend_lock;
-	struct mutex table_devices_lock;
-	struct list_head table_devices;
-	void *map;
-	long unsigned int flags;
-	struct mutex type_lock;
-	enum dm_queue_mode type;
-	int numa_node_id;
-	struct request_queue *queue;
-	atomic_t holders;
-	atomic_t open_count;
-	struct dm_target *immutable_target;
-	struct target_type *immutable_target_type;
-	char name[16];
-	struct gendisk *disk;
-	struct dax_device *dax_dev;
-	struct work_struct work;
-	wait_queue_head_t wait;
-	spinlock_t deferred_lock;
-	struct bio_list deferred;
-	void *interface_ptr;
-	wait_queue_head_t eventq;
-	atomic_t event_nr;
-	atomic_t uevent_seq;
-	struct list_head uevent_list;
-	spinlock_t uevent_lock;
-	unsigned int internal_suspend_count;
-	struct bio_set io_bs;
-	struct bio_set bs;
-	struct workqueue_struct *wq;
-	struct super_block *frozen_sb;
-	struct hd_geometry geometry;
-	struct dm_kobject_holder kobj_holder;
-	struct block_device *bdev;
-	struct dm_stats stats;
-	struct blk_mq_tag_set *tag_set;
-	bool init_tio_pdu: 1;
-	struct srcu_struct io_barrier;
-};
-
-struct dax_operations {
-	long int (*direct_access)(struct dax_device *, long unsigned int, long int, void **, pfn_t *);
-	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
-	size_t (*copy_from_iter)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
-	size_t (*copy_to_iter)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
-};
-
-struct dm_io;
-
-struct clone_info {
-	struct dm_table *map;
-	struct bio *bio;
-	struct dm_io *io;
-	sector_t sector;
-	unsigned int sector_count;
-};
-
-struct dm_target_io {
-	unsigned int magic;
-	struct dm_io *io;
-	struct dm_target *ti;
-	unsigned int target_bio_nr;
-	unsigned int *len_ptr;
-	bool inside_dm_io;
-	struct bio clone;
-};
-
-struct dm_io {
-	unsigned int magic;
-	struct mapped_device *md;
-	blk_status_t status;
-	atomic_t io_count;
-	struct bio *orig_bio;
-	long unsigned int start_time;
-	spinlock_t endio_lock;
-	struct dm_stats_aux stats_aux;
-	struct dm_target_io tio;
-};
-
-struct dm_md_mempools {
-	struct bio_set bs;
-	struct bio_set io_bs;
-};
-
-struct table_device {
-	struct list_head list;
-	refcount_t count;
-	struct dm_dev dm_dev;
-};
-
-struct dm_pr {
-	u64 old_key;
-	u64 new_key;
-	u32 flags;
-	bool fail_early;
-};
-
-struct dm_md_mempools___2;
-
-struct dm_table {
-	struct mapped_device *md;
-	enum dm_queue_mode type;
-	unsigned int depth;
-	unsigned int counts[16];
-	sector_t *index[16];
-	unsigned int num_targets;
-	unsigned int num_allocated;
-	sector_t *highs;
-	struct dm_target *targets;
-	struct target_type *immutable_target_type;
-	bool integrity_supported: 1;
-	bool singleton: 1;
-	unsigned int integrity_added: 1;
-	fmode_t mode;
-	struct list_head devices;
-	void (*event_fn)(void *);
-	void *event_context;
-	struct dm_md_mempools___2 *mempools;
-	struct list_head target_callbacks;
-};
-
-struct dm_target_callbacks {
-	struct list_head list;
-	int (*congested_fn)(struct dm_target_callbacks *, int);
-};
-
-struct dm_arg_set {
-	unsigned int argc;
-	char **argv;
-};
-
-struct dm_arg {
-	unsigned int min;
-	unsigned int max;
-	char *error;
-};
-
-struct dm_dev_internal {
-	struct list_head list;
-	refcount_t count;
-	struct dm_dev *dm_dev;
-};
-
-enum suspend_mode {
-	PRESUSPEND = 0,
-	PRESUSPEND_UNDO = 1,
-	POSTSUSPEND = 2,
-};
-
-struct linear_c {
-	struct dm_dev *dev;
-	sector_t start;
-};
-
-struct stripe {
-	struct dm_dev *dev;
-	sector_t physical_start;
-	atomic_t error_count;
-};
-
-struct stripe_c {
-	uint32_t stripes;
-	int stripes_shift;
-	sector_t stripe_width;
-	uint32_t chunk_size;
-	int chunk_size_shift;
-	struct dm_target *ti;
-	struct work_struct trigger_event;
-	struct stripe stripe[0];
-};
-
-struct dm_ioctl {
-	__u32 version[3];
-	__u32 data_size;
-	__u32 data_start;
-	__u32 target_count;
-	__s32 open_count;
-	__u32 flags;
-	__u32 event_nr;
-	__u32 padding;
-	__u64 dev;
-	char name[128];
-	char uuid[129];
-	char data[7];
-};
-
-struct dm_target_spec {
-	__u64 sector_start;
-	__u64 length;
-	__s32 status;
-	__u32 next;
-	char target_type[16];
-};
-
-struct dm_target_deps {
-	__u32 count;
-	__u32 padding;
-	__u64 dev[0];
-};
-
-struct dm_name_list {
-	__u64 dev;
-	__u32 next;
-	char name[0];
-};
-
-struct dm_target_versions {
-	__u32 next;
-	__u32 version[3];
-	char name[0];
-};
-
-struct dm_target_msg {
-	__u64 sector;
-	char message[0];
-};
-
-enum {
-	DM_VERSION_CMD = 0,
-	DM_REMOVE_ALL_CMD = 1,
-	DM_LIST_DEVICES_CMD = 2,
-	DM_DEV_CREATE_CMD = 3,
-	DM_DEV_REMOVE_CMD = 4,
-	DM_DEV_RENAME_CMD = 5,
-	DM_DEV_SUSPEND_CMD = 6,
-	DM_DEV_STATUS_CMD = 7,
-	DM_DEV_WAIT_CMD = 8,
-	DM_TABLE_LOAD_CMD = 9,
-	DM_TABLE_CLEAR_CMD = 10,
-	DM_TABLE_DEPS_CMD = 11,
-	DM_TABLE_STATUS_CMD = 12,
-	DM_LIST_VERSIONS_CMD = 13,
-	DM_TARGET_MSG_CMD = 14,
-	DM_DEV_SET_GEOMETRY_CMD = 15,
-	DM_DEV_ARM_POLL_CMD = 16,
-	DM_GET_TARGET_VERSION_CMD = 17,
-};
-
-struct dm_file {
-	volatile unsigned int global_event_nr;
-};
-
-struct hash_cell {
-	struct list_head name_list;
-	struct list_head uuid_list;
-	char *name;
-	char *uuid;
-	struct mapped_device *md;
-	struct dm_table *new_map;
-};
-
-struct vers_iter {
-	size_t param_size;
-	struct dm_target_versions *vers;
-	struct dm_target_versions *old_vers;
-	char *end;
-	uint32_t flags;
-};
-
-typedef int (*ioctl_fn___2)(struct file *, struct dm_ioctl *, size_t);
-
-struct dm_io_region {
-	struct block_device *bdev;
-	sector_t sector;
-	sector_t count;
-};
-
-struct page_list {
-	struct page_list *next;
-	struct page *page;
-};
-
-typedef void (*io_notify_fn)(long unsigned int, void *);
-
-enum dm_io_mem_type {
-	DM_IO_PAGE_LIST = 0,
-	DM_IO_BIO = 1,
-	DM_IO_VMA = 2,
-	DM_IO_KMEM = 3,
-};
-
-struct dm_io_memory {
-	enum dm_io_mem_type type;
-	unsigned int offset;
-	union {
-		struct page_list *pl;
-		struct bio *bio;
-		void *vma;
-		void *addr;
-	} ptr;
-};
-
-struct dm_io_notify {
-	io_notify_fn fn;
-	void *context;
-};
-
-struct dm_io_client;
-
-struct dm_io_request {
-	int bi_op;
-	int bi_op_flags;
-	struct dm_io_memory mem;
-	struct dm_io_notify notify;
-	struct dm_io_client *client;
-};
-
-struct dm_io_client {
-	mempool_t pool;
-	struct bio_set bios;
-};
-
-struct io {
-	long unsigned int error_bits;
-	atomic_t count;
-	struct dm_io_client *client;
-	io_notify_fn callback;
-	void *context;
-	void *vma_invalidate_address;
-	long unsigned int vma_invalidate_size;
-	long: 64;
-};
-
-struct dpages {
-	void (*get_page)(struct dpages *, struct page **, long unsigned int *, unsigned int *);
-	void (*next_page)(struct dpages *);
-	union {
-		unsigned int context_u;
-		struct bvec_iter context_bi;
-	};
-	void *context_ptr;
-	void *vma_invalidate_address;
-	long unsigned int vma_invalidate_size;
-};
-
-struct sync_io {
-	long unsigned int error_bits;
-	struct completion wait;
-};
-
-struct dm_kcopyd_throttle {
-	unsigned int throttle;
-	unsigned int num_io_jobs;
-	unsigned int io_period;
-	unsigned int total_period;
-	unsigned int last_jiffies;
-};
-
-typedef void (*dm_kcopyd_notify_fn)(int, long unsigned int, void *);
-
-struct dm_kcopyd_client {
-	struct page_list *pages;
-	unsigned int nr_reserved_pages;
-	unsigned int nr_free_pages;
-	unsigned int sub_job_size;
-	struct dm_io_client *io_client;
-	wait_queue_head_t destroyq;
-	mempool_t job_pool;
-	struct workqueue_struct *kcopyd_wq;
-	struct work_struct kcopyd_work;
-	struct dm_kcopyd_throttle *throttle;
-	atomic_t nr_jobs;
-	spinlock_t job_lock;
-	struct list_head callback_jobs;
-	struct list_head complete_jobs;
-	struct list_head io_jobs;
-	struct list_head pages_jobs;
-};
-
-struct kcopyd_job {
-	struct dm_kcopyd_client *kc;
-	struct list_head list;
-	long unsigned int flags;
-	int read_err;
-	long unsigned int write_err;
-	int rw;
-	struct dm_io_region source;
-	unsigned int num_dests;
-	struct dm_io_region dests[8];
-	struct page_list *pages;
-	dm_kcopyd_notify_fn fn;
-	void *context;
-	struct mutex lock;
-	atomic_t sub_jobs;
-	sector_t progress;
-	sector_t write_offset;
-	struct kcopyd_job *master_job;
-};
-
-struct dm_sysfs_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct mapped_device *, char *);
-	ssize_t (*store)(struct mapped_device *, const char *, size_t);
-};
-
-struct dm_stats_last_position {
-	sector_t last_sector;
-	unsigned int last_rw;
-};
-
-struct dm_stat_percpu {
-	long long unsigned int sectors[2];
-	long long unsigned int ios[2];
-	long long unsigned int merges[2];
-	long long unsigned int ticks[2];
-	long long unsigned int io_ticks[2];
-	long long unsigned int io_ticks_total;
-	long long unsigned int time_in_queue;
-	long long unsigned int *histogram;
-};
-
-struct dm_stat_shared {
-	atomic_t in_flight[2];
-	long long unsigned int stamp;
-	struct dm_stat_percpu tmp;
-};
-
-struct dm_stat {
-	struct list_head list_entry;
-	int id;
-	unsigned int stat_flags;
-	size_t n_entries;
-	sector_t start;
-	sector_t end;
-	sector_t step;
-	unsigned int n_histogram_entries;
-	long long unsigned int *histogram_boundaries;
-	const char *program_id;
-	const char *aux_data;
-	struct callback_head callback_head;
-	size_t shared_alloc_size;
-	size_t percpu_alloc_size;
-	size_t histogram_alloc_size;
-	struct dm_stat_percpu *stat_percpu[64];
-	struct dm_stat_shared stat_shared[0];
-};
-
-struct dm_rq_target_io;
-
-struct dm_rq_clone_bio_info {
-	struct bio *orig;
-	struct dm_rq_target_io *tio;
-	struct bio clone;
-};
-
-struct dm_rq_target_io {
-	struct mapped_device *md;
-	struct dm_target *ti;
-	struct request *orig;
-	struct request *clone;
-	struct kthread_work work;
-	blk_status_t error;
-	union map_info___2 info;
-	struct dm_stats_aux stats_aux;
-	long unsigned int duration_jiffies;
-	unsigned int n_sectors;
-	unsigned int completed;
-};
-
-struct dm_bio_details {
-	struct gendisk *bi_disk;
-	u8 bi_partno;
-	long unsigned int bi_flags;
-	struct bvec_iter bi_iter;
-};
-
-typedef sector_t region_t;
-
-struct dm_dirty_log_type;
-
-struct dm_dirty_log {
-	struct dm_dirty_log_type *type;
-	int (*flush_callback_fn)(struct dm_target *);
-	void *context;
-};
-
-struct dm_dirty_log_type {
-	const char *name;
-	struct module *module;
-	struct list_head list;
-	int (*ctr)(struct dm_dirty_log *, struct dm_target *, unsigned int, char **);
-	void (*dtr)(struct dm_dirty_log *);
-	int (*presuspend)(struct dm_dirty_log *);
-	int (*postsuspend)(struct dm_dirty_log *);
-	int (*resume)(struct dm_dirty_log *);
-	uint32_t (*get_region_size)(struct dm_dirty_log *);
-	int (*is_clean)(struct dm_dirty_log *, region_t);
-	int (*in_sync)(struct dm_dirty_log *, region_t, int);
-	int (*flush)(struct dm_dirty_log *);
-	void (*mark_region)(struct dm_dirty_log *, region_t);
-	void (*clear_region)(struct dm_dirty_log *, region_t);
-	int (*get_resync_work)(struct dm_dirty_log *, region_t *);
-	void (*set_region_sync)(struct dm_dirty_log *, region_t, int);
-	region_t (*get_sync_count)(struct dm_dirty_log *);
-	int (*status)(struct dm_dirty_log *, status_type_t, char *, unsigned int);
-	int (*is_remote_recovering)(struct dm_dirty_log *, region_t);
-};
-
-enum dm_rh_region_states {
-	DM_RH_CLEAN = 1,
-	DM_RH_DIRTY = 2,
-	DM_RH_NOSYNC = 4,
-	DM_RH_RECOVERING = 8,
-};
-
-enum dm_raid1_error {
-	DM_RAID1_WRITE_ERROR = 0,
-	DM_RAID1_FLUSH_ERROR = 1,
-	DM_RAID1_SYNC_ERROR = 2,
-	DM_RAID1_READ_ERROR = 3,
-};
-
-struct mirror_set;
-
-struct mirror {
-	struct mirror_set *ms;
-	atomic_t error_count;
-	long unsigned int error_type;
-	struct dm_dev *dev;
-	sector_t offset;
-};
-
-struct dm_region_hash;
-
-struct dm_kcopyd_client___2;
-
-struct mirror_set {
-	struct dm_target *ti;
-	struct list_head list;
-	uint64_t features;
-	spinlock_t lock;
-	struct bio_list reads;
-	struct bio_list writes;
-	struct bio_list failures;
-	struct bio_list holds;
-	struct dm_region_hash *rh;
-	struct dm_kcopyd_client___2 *kcopyd_client;
-	struct dm_io_client *io_client;
-	region_t nr_regions;
-	int in_sync;
-	int log_failure;
-	int leg_failure;
-	atomic_t suspend;
-	atomic_t default_mirror;
-	struct workqueue_struct *kmirrord_wq;
-	struct work_struct kmirrord_work;
-	struct timer_list timer;
-	long unsigned int timer_pending;
-	struct work_struct trigger_event;
-	unsigned int nr_mirrors;
-	struct mirror mirror[0];
-};
-
-struct dm_raid1_bio_record {
-	struct mirror *m;
-	struct dm_bio_details details;
-	region_t write_region;
-};
-
-struct dm_region;
-
-struct log_header_disk {
-	__le32 magic;
-	__le32 version;
-	__le64 nr_regions;
-};
-
-struct log_header_core {
-	uint32_t magic;
-	uint32_t version;
-	uint64_t nr_regions;
-};
-
-enum sync {
-	DEFAULTSYNC = 0,
-	NOSYNC = 1,
-	FORCESYNC = 2,
-};
-
-struct log_c {
-	struct dm_target *ti;
-	int touched_dirtied;
-	int touched_cleaned;
-	int flush_failed;
-	uint32_t region_size;
-	unsigned int region_count;
-	region_t sync_count;
-	unsigned int bitset_uint32_count;
-	uint32_t *clean_bits;
-	uint32_t *sync_bits;
-	uint32_t *recovering_bits;
-	int sync_search;
-	enum sync sync;
-	struct dm_io_request io_req;
-	int log_dev_failed;
-	int log_dev_flush_failed;
-	struct dm_dev *log_dev;
-	struct log_header_core header;
-	struct dm_io_region header_location;
-	struct log_header_disk *disk_header;
-};
-
-struct dm_region_hash___2 {
-	uint32_t region_size;
-	unsigned int region_shift;
-	struct dm_dirty_log *log;
-	rwlock_t hash_lock;
-	unsigned int mask;
-	unsigned int nr_buckets;
-	unsigned int prime;
-	unsigned int shift;
-	struct list_head *buckets;
-	int flush_failure;
-	unsigned int max_recovery;
-	spinlock_t region_lock;
-	atomic_t recovery_in_flight;
-	struct list_head clean_regions;
-	struct list_head quiesced_regions;
-	struct list_head recovered_regions;
-	struct list_head failed_recovered_regions;
-	struct semaphore recovery_count;
-	mempool_t region_pool;
-	void *context;
-	sector_t target_begin;
-	void (*dispatch_bios)(void *, struct bio_list *);
-	void (*wakeup_workers)(void *);
-	void (*wakeup_all_recovery_waiters)(void *);
-};
-
-struct dm_region___2 {
-	struct dm_region_hash___2 *rh;
-	region_t key;
-	int state;
-	struct list_head hash_list;
-	struct list_head list;
-	atomic_t pending;
-	struct bio_list delayed_bios;
-};
-
-enum {
-	EDAC_REPORTING_ENABLED = 0,
-	EDAC_REPORTING_DISABLED = 1,
-	EDAC_REPORTING_FORCE = 2,
-};
-
-enum dev_type {
-	DEV_UNKNOWN = 0,
-	DEV_X1 = 1,
-	DEV_X2 = 2,
-	DEV_X4 = 3,
-	DEV_X8 = 4,
-	DEV_X16 = 5,
-	DEV_X32 = 6,
-	DEV_X64 = 7,
-};
-
-enum hw_event_mc_err_type {
-	HW_EVENT_ERR_CORRECTED = 0,
-	HW_EVENT_ERR_UNCORRECTED = 1,
-	HW_EVENT_ERR_DEFERRED = 2,
-	HW_EVENT_ERR_FATAL = 3,
-	HW_EVENT_ERR_INFO = 4,
-};
-
-enum mem_type {
-	MEM_EMPTY = 0,
-	MEM_RESERVED = 1,
-	MEM_UNKNOWN = 2,
-	MEM_FPM = 3,
-	MEM_EDO = 4,
-	MEM_BEDO = 5,
-	MEM_SDR = 6,
-	MEM_RDR = 7,
-	MEM_DDR = 8,
-	MEM_RDDR = 9,
-	MEM_RMBS = 10,
-	MEM_DDR2 = 11,
-	MEM_FB_DDR2 = 12,
-	MEM_RDDR2 = 13,
-	MEM_XDR = 14,
-	MEM_DDR3 = 15,
-	MEM_RDDR3 = 16,
-	MEM_LRDDR3 = 17,
-	MEM_DDR4 = 18,
-	MEM_RDDR4 = 19,
-	MEM_LRDDR4 = 20,
-	MEM_NVDIMM = 21,
-};
-
-enum edac_type {
-	EDAC_UNKNOWN = 0,
-	EDAC_NONE = 1,
-	EDAC_RESERVED = 2,
-	EDAC_PARITY = 3,
-	EDAC_EC = 4,
-	EDAC_SECDED = 5,
-	EDAC_S2ECD2ED = 6,
-	EDAC_S4ECD4ED = 7,
-	EDAC_S8ECD8ED = 8,
-	EDAC_S16ECD16ED = 9,
-};
-
-enum scrub_type {
-	SCRUB_UNKNOWN = 0,
-	SCRUB_NONE = 1,
-	SCRUB_SW_PROG = 2,
-	SCRUB_SW_SRC = 3,
-	SCRUB_SW_PROG_SRC = 4,
-	SCRUB_SW_TUNABLE = 5,
-	SCRUB_HW_PROG = 6,
-	SCRUB_HW_SRC = 7,
-	SCRUB_HW_PROG_SRC = 8,
-	SCRUB_HW_TUNABLE = 9,
-};
-
-enum edac_mc_layer_type {
-	EDAC_MC_LAYER_BRANCH = 0,
-	EDAC_MC_LAYER_CHANNEL = 1,
-	EDAC_MC_LAYER_SLOT = 2,
-	EDAC_MC_LAYER_CHIP_SELECT = 3,
-	EDAC_MC_LAYER_ALL_MEM = 4,
-};
-
-struct edac_mc_layer {
-	enum edac_mc_layer_type type;
-	unsigned int size;
-	bool is_virt_csrow;
-};
-
-struct mem_ctl_info;
-
-struct dimm_info {
-	struct device dev;
-	char label[32];
-	unsigned int location[3];
-	struct mem_ctl_info *mci;
-	unsigned int idx;
-	u32 grain;
-	enum dev_type dtype;
-	enum mem_type mtype;
-	enum edac_type edac_mode;
-	u32 nr_pages;
-	unsigned int csrow;
-	unsigned int cschannel;
-	u16 smbios_handle;
-};
-
-struct mcidev_sysfs_attribute;
-
-struct edac_raw_error_desc {
-	char location[256];
-	char label[296];
-	long int grain;
-	u16 error_count;
-	int top_layer;
-	int mid_layer;
-	int low_layer;
-	long unsigned int page_frame_number;
-	long unsigned int offset_in_page;
-	long unsigned int syndrome;
-	const char *msg;
-	const char *other_detail;
-	bool enable_per_layer_report;
-};
-
-struct csrow_info;
-
-struct mem_ctl_info {
-	struct device dev;
-	struct bus_type *bus;
-	struct list_head link;
-	struct module *owner;
-	long unsigned int mtype_cap;
-	long unsigned int edac_ctl_cap;
-	long unsigned int edac_cap;
-	long unsigned int scrub_cap;
-	enum scrub_type scrub_mode;
-	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
-	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
-	void (*edac_check)(struct mem_ctl_info *);
-	long unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);
-	int mc_idx;
-	struct csrow_info **csrows;
-	unsigned int nr_csrows;
-	unsigned int num_cschannel;
-	unsigned int n_layers;
-	struct edac_mc_layer *layers;
-	bool csbased;
-	unsigned int tot_dimms;
-	struct dimm_info **dimms;
-	struct device *pdev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	u32 ce_noinfo_count;
-	u32 ue_noinfo_count;
-	u32 ue_mc;
-	u32 ce_mc;
-	u32 *ce_per_layer[3];
-	u32 *ue_per_layer[3];
-	struct completion complete;
-	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
-	struct delayed_work work;
-	struct edac_raw_error_desc error_desc;
-	int op_state;
-	struct dentry *debugfs;
-	u8 fake_inject_layer[3];
-	bool fake_inject_ue;
-	u16 fake_inject_count;
-};
-
-struct rank_info {
-	int chan_idx;
-	struct csrow_info *csrow;
-	struct dimm_info *dimm;
-	u32 ce_count;
-};
-
-struct csrow_info {
-	struct device dev;
-	long unsigned int first_page;
-	long unsigned int last_page;
-	long unsigned int page_mask;
-	int csrow_idx;
-	u32 ue_count;
-	u32 ce_count;
-	struct mem_ctl_info *mci;
-	u32 nr_channels;
-	struct rank_info **channels;
-};
-
-struct edac_device_counter {
-	u32 ue_count;
-	u32 ce_count;
-};
-
-struct edac_device_ctl_info;
-
-struct edac_dev_sysfs_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_ctl_info *, char *);
-	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
-};
-
-struct edac_device_instance;
-
-struct edac_device_ctl_info {
-	struct list_head link;
-	struct module *owner;
-	int dev_idx;
-	int log_ue;
-	int log_ce;
-	int panic_on_ue;
-	unsigned int poll_msec;
-	long unsigned int delay;
-	struct edac_dev_sysfs_attribute *sysfs_attributes;
-	struct bus_type *edac_subsys;
-	int op_state;
-	struct delayed_work work;
-	void (*edac_check)(struct edac_device_ctl_info *);
-	struct device *dev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	struct completion removal_complete;
-	char name[32];
-	u32 nr_instances;
-	struct edac_device_instance *instances;
-	struct edac_device_counter counters;
-	struct kobject kobj;
-};
-
-struct edac_device_block;
-
-struct edac_dev_sysfs_block_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
-	struct edac_device_block *block;
-	unsigned int value;
-};
-
-struct edac_device_block {
-	struct edac_device_instance *instance;
-	char name[32];
-	struct edac_device_counter counters;
-	int nr_attribs;
-	struct edac_dev_sysfs_block_attribute *block_attributes;
-	struct kobject kobj;
-};
-
-struct edac_device_instance {
-	struct edac_device_ctl_info *ctl;
-	char name[35];
-	struct edac_device_counter counters;
-	u32 nr_blocks;
-	struct edac_device_block *blocks;
-	struct kobject kobj;
-};
-
-struct dev_ch_attribute {
-	struct device_attribute attr;
-	unsigned int channel;
-};
-
-struct ctl_info_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_ctl_info *, char *);
-	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
-};
-
-struct instance_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_device_instance *, char *);
-	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
-};
-
-struct edac_pci_counter {
-	atomic_t pe_count;
-	atomic_t npe_count;
-};
-
-struct edac_pci_ctl_info {
-	struct list_head link;
-	int pci_idx;
-	struct bus_type *edac_subsys;
-	int op_state;
-	struct delayed_work work;
-	void (*edac_check)(struct edac_pci_ctl_info *);
-	struct device *dev;
-	const char *mod_name;
-	const char *ctl_name;
-	const char *dev_name;
-	void *pvt_info;
-	long unsigned int start_time;
-	struct completion complete;
-	char name[32];
-	struct edac_pci_counter counters;
-	struct kobject kobj;
-};
-
-struct edac_pci_gen_data {
-	int edac_idx;
-};
-
-struct instance_attribute___2 {
-	struct attribute attr;
-	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
-	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
-};
-
-struct edac_pci_dev_attribute {
-	struct attribute attr;
-	void *value;
-	ssize_t (*show)(void *, char *);
-	ssize_t (*store)(void *, const char *, size_t);
-};
-
-typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
-
-enum tt_ids {
-	TT_INSTR = 0,
-	TT_DATA = 1,
-	TT_GEN = 2,
-	TT_RESV = 3,
-};
-
-enum ll_ids {
-	LL_RESV = 0,
-	LL_L1 = 1,
-	LL_L2 = 2,
-	LL_LG = 3,
-};
-
-enum ii_ids {
-	II_MEM = 0,
-	II_RESV = 1,
-	II_IO = 2,
-	II_GEN = 3,
-};
-
-enum rrrr_ids {
-	R4_GEN = 0,
-	R4_RD = 1,
-	R4_WR = 2,
-	R4_DRD = 3,
-	R4_DWR = 4,
-	R4_IRD = 5,
-	R4_PREF = 6,
-	R4_EVICT = 7,
-	R4_SNOOP = 8,
-};
-
-struct amd_decoder_ops {
-	bool (*mc0_mce)(u16, u8);
-	bool (*mc1_mce)(u16, u8);
-	bool (*mc2_mce)(u16, u8);
-};
-
-struct smca_mce_desc {
-	const char * const *descs;
-	unsigned int num_descs;
-};
-
-struct cpufreq_driver {
-	char name[16];
-	u8 flags;
-	void *driver_data;
-	int (*init)(struct cpufreq_policy *);
-	int (*verify)(struct cpufreq_policy *);
-	int (*setpolicy)(struct cpufreq_policy *);
-	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
-	int (*target_index)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*get)(unsigned int);
-	void (*update_limits)(unsigned int);
-	int (*bios_limit)(int, unsigned int *);
-	int (*online)(struct cpufreq_policy *);
-	int (*offline)(struct cpufreq_policy *);
-	int (*exit)(struct cpufreq_policy *);
-	void (*stop_cpu)(struct cpufreq_policy *);
-	int (*suspend)(struct cpufreq_policy *);
-	int (*resume)(struct cpufreq_policy *);
-	void (*ready)(struct cpufreq_policy *);
-	struct freq_attr **attr;
-	bool boost_enabled;
-	int (*set_boost)(int);
-};
-
-struct gov_attr_set {
-	struct kobject kobj;
-	struct list_head policy_list;
-	struct mutex update_lock;
-	int usage_count;
-};
-
-struct governor_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct gov_attr_set *, char *);
-	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
-};
-
-enum {
-	OD_NORMAL_SAMPLE = 0,
-	OD_SUB_SAMPLE = 1,
-};
-
-struct dbs_data {
-	struct gov_attr_set attr_set;
-	void *tuners;
-	unsigned int ignore_nice_load;
-	unsigned int sampling_rate;
-	unsigned int sampling_down_factor;
-	unsigned int up_threshold;
-	unsigned int io_is_busy;
-};
-
-struct policy_dbs_info {
-	struct cpufreq_policy *policy;
-	struct mutex update_mutex;
-	u64 last_sample_time;
-	s64 sample_delay_ns;
-	atomic_t work_count;
-	struct irq_work irq_work;
-	struct work_struct work;
-	struct dbs_data *dbs_data;
-	struct list_head list;
-	unsigned int rate_mult;
-	unsigned int idle_periods;
-	bool is_shared;
-	bool work_in_progress;
-};
-
-struct dbs_governor {
-	struct cpufreq_governor gov;
-	struct kobj_type kobj_type;
-	struct dbs_data *gdbs_data;
-	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
-	struct policy_dbs_info * (*alloc)();
-	void (*free)(struct policy_dbs_info *);
-	int (*init)(struct dbs_data *);
-	void (*exit)(struct dbs_data *);
-	void (*start)(struct cpufreq_policy *);
-};
-
-struct od_ops {
-	unsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);
-};
-
-struct od_policy_dbs_info {
-	struct policy_dbs_info policy_dbs;
-	unsigned int freq_lo;
-	unsigned int freq_lo_delay_us;
-	unsigned int freq_hi_delay_us;
-	unsigned int sample_type: 1;
-};
-
-struct od_dbs_tuners {
-	unsigned int powersave_bias;
-};
-
-struct cpu_dbs_info {
-	u64 prev_cpu_idle;
-	u64 prev_update_time;
-	u64 prev_cpu_nice;
-	unsigned int prev_load;
-	struct update_util_data update_util;
-	struct policy_dbs_info *policy_dbs;
-};
-
-enum {
-	UNDEFINED_CAPABLE = 0,
-	SYSTEM_INTEL_MSR_CAPABLE = 1,
-	SYSTEM_AMD_MSR_CAPABLE = 2,
-	SYSTEM_IO_CAPABLE = 3,
-};
-
-struct acpi_cpufreq_data {
-	unsigned int resume;
-	unsigned int cpu_feature;
-	unsigned int acpi_perf_cpu;
-	cpumask_var_t freqdomain_cpus;
-	void (*cpu_freq_write)(struct acpi_pct_register *, u32);
-	u32 (*cpu_freq_read)(struct acpi_pct_register *);
-};
-
-struct drv_cmd {
-	struct acpi_pct_register *reg;
-	u32 val;
-	union {
-		void (*write)(struct acpi_pct_register *, u32);
-		u32 (*read)(struct acpi_pct_register *);
-	} func;
-};
-
-enum acpi_preferred_pm_profiles {
-	PM_UNSPECIFIED = 0,
-	PM_DESKTOP = 1,
-	PM_MOBILE = 2,
-	PM_WORKSTATION = 3,
-	PM_ENTERPRISE_SERVER = 4,
-	PM_SOHO_SERVER = 5,
-	PM_APPLIANCE_PC = 6,
-	PM_PERFORMANCE_SERVER = 7,
-	PM_TABLET = 8,
-};
-
-struct sample {
-	int32_t core_avg_perf;
-	int32_t busy_scaled;
-	u64 aperf;
-	u64 mperf;
-	u64 tsc;
-	u64 time;
-};
-
-struct pstate_data {
-	int current_pstate;
-	int min_pstate;
-	int max_pstate;
-	int max_pstate_physical;
-	int scaling;
-	int turbo_pstate;
-	unsigned int max_freq;
-	unsigned int turbo_freq;
-};
-
-struct vid_data {
-	int min;
-	int max;
-	int turbo;
-	int32_t ratio;
-};
-
-struct global_params {
-	bool no_turbo;
-	bool turbo_disabled;
-	bool turbo_disabled_mf;
-	int max_perf_pct;
-	int min_perf_pct;
-};
-
-struct cpudata {
-	int cpu;
-	unsigned int policy;
-	struct update_util_data update_util;
-	bool update_util_set;
-	struct pstate_data pstate;
-	struct vid_data vid;
-	u64 last_update;
-	u64 last_sample_time;
-	u64 aperf_mperf_shift;
-	u64 prev_aperf;
-	u64 prev_mperf;
-	u64 prev_tsc;
-	u64 prev_cummulative_iowait;
-	struct sample sample;
-	int32_t min_perf_ratio;
-	int32_t max_perf_ratio;
-	struct acpi_processor_performance acpi_perf_data;
-	bool valid_pss_table;
-	unsigned int iowait_boost;
-	s16 epp_powersave;
-	s16 epp_policy;
-	s16 epp_default;
-	s16 epp_saved;
-	u64 hwp_req_cached;
-	u64 hwp_cap_cached;
-	u64 last_io_update;
-	unsigned int sched_flags;
-	u32 hwp_boost_min;
-};
-
-struct pstate_funcs {
-	int (*get_max)();
-	int (*get_max_physical)();
-	int (*get_min)();
-	int (*get_turbo)();
-	int (*get_scaling)();
-	int (*get_aperf_mperf_shift)();
-	u64 (*get_val)(struct cpudata *, int);
-	void (*get_vid)(struct cpudata *);
-};
-
-enum {
-	PSS = 0,
-	PPC = 1,
-};
-
-struct cpuidle_governor {
-	char name[16];
-	struct list_head governor_list;
-	unsigned int rating;
-	int (*enable)(struct cpuidle_driver___2 *, struct cpuidle_device *);
-	void (*disable)(struct cpuidle_driver___2 *, struct cpuidle_device *);
-	int (*select)(struct cpuidle_driver___2 *, struct cpuidle_device *, bool *);
-	void (*reflect)(struct cpuidle_device *, int);
-};
-
-struct cpuidle_state_kobj {
-	struct cpuidle_state *state;
-	struct cpuidle_state_usage *state_usage;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-	struct cpuidle_device *device;
-};
-
-struct cpuidle_device_kobj {
-	struct cpuidle_device *dev;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
-struct cpuidle_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_device *, char *);
-	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
-};
-
-struct cpuidle_state_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
-	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
-};
-
-struct menu_device {
-	int needs_update;
-	int tick_wakeup;
-	u64 next_timer_ns;
-	unsigned int bucket;
-	unsigned int correction_factor[12];
-	unsigned int intervals[8];
-	int interval_ptr;
-};
-
-struct led_init_data {
-	struct fwnode_handle *fwnode;
-	const char *default_label;
-	const char *devicename;
-	bool devname_mandatory;
-};
-
-struct led_properties {
-	u32 color;
-	bool color_present;
-	const char *function;
-	u32 func_enum;
-	bool func_enum_present;
-	const char *label;
-};
-
-struct dmi_memdev_info {
-	const char *device;
-	const char *bank;
-	u64 size;
-	u16 handle;
-	u8 type;
-};
-
-struct dmi_device_attribute {
-	struct device_attribute dev_attr;
-	int field;
-};
-
-struct mafield {
-	const char *prefix;
-	int field;
-};
-
-struct firmware_map_entry {
-	u64 start;
-	u64 end;
-	const char *type;
-	struct list_head list;
-	struct kobject kobj;
-};
-
-struct memmap_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct firmware_map_entry *, char *);
-};
-
-struct bmp_header {
-	u16 id;
-	u32 size;
-} __attribute__((packed));
-
-typedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);
-
-typedef struct {
-	efi_guid_t guid;
-	u32 table;
-} efi_config_table_32_t;
-
-typedef struct {
-	u32 version;
-	u32 length;
-	u64 memory_protection_attribute;
-} efi_properties_table_t;
-
-struct efivar_operations {
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_set_variable_t *set_variable_nonblocking;
-	efi_query_variable_store_t *query_variable_store;
-};
-
-struct efivars {
-	struct kset *kset;
-	struct kobject *kobject;
-	const struct efivar_operations *ops;
-};
-
-struct efi_variable {
-	efi_char16_t VariableName[512];
-	efi_guid_t VendorGuid;
-	long unsigned int DataSize;
-	__u8 Data[1024];
-	efi_status_t Status;
-	__u32 Attributes;
-} __attribute__((packed));
-
-struct efivar_entry {
-	struct efi_variable var;
-	struct list_head list;
-	struct kobject kobj;
-	bool scanning;
-	bool deleting;
-};
-
-struct linux_efi_random_seed {
-	u32 size;
-	u8 bits[0];
-};
-
-struct linux_efi_memreserve {
-	int size;
-	atomic_t count;
-	phys_addr_t next;
-	struct {
-		phys_addr_t base;
-		phys_addr_t size;
-	} entry[0];
-};
-
-struct efi_generic_dev_path {
-	u8 type;
-	u8 sub_type;
-	u16 length;
-};
-
-struct variable_validate {
-	efi_guid_t vendor;
-	char *name;
-	bool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);
-};
-
-typedef struct {
-	u32 version;
-	u32 num_entries;
-	u32 desc_size;
-	u32 reserved;
-	efi_memory_desc_t entry[0];
-} efi_memory_attributes_table_t;
-
-typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
-
-struct linux_efi_tpm_eventlog {
-	u32 size;
-	u32 final_events_preboot_size;
-	u8 version;
-	u8 log[0];
-};
-
-struct efi_tcg2_final_events_table {
-	u64 version;
-	u64 nr_events;
-	u8 events[0];
-};
-
-struct tpm_digest {
-	u16 alg_id;
-	u8 digest[64];
-};
-
-enum tpm_duration {
-	TPM_SHORT = 0,
-	TPM_MEDIUM = 1,
-	TPM_LONG = 2,
-	TPM_LONG_LONG = 3,
-	TPM_UNDEFINED = 4,
-	TPM_NUM_DURATIONS = 4,
-};
-
-struct tcg_efi_specid_event_algs {
-	u16 alg_id;
-	u16 digest_size;
-};
-
-struct tcg_efi_specid_event_head {
-	u8 signature[16];
-	u32 platform_class;
-	u8 spec_version_minor;
-	u8 spec_version_major;
-	u8 spec_errata;
-	u8 uintnsize;
-	u32 num_algs;
-	struct tcg_efi_specid_event_algs digest_sizes[0];
-};
-
-struct tcg_pcr_event {
-	u32 pcr_idx;
-	u32 event_type;
-	u8 digest[20];
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_event_field {
-	u32 event_size;
-	u8 event[0];
-};
-
-struct tcg_pcr_event2_head {
-	u32 pcr_idx;
-	u32 event_type;
-	u32 count;
-	struct tpm_digest digests[0];
-};
-
-typedef struct {
-	u64 length;
-	u64 data;
-} efi_capsule_block_desc_t;
-
-struct compat_efi_variable {
-	efi_char16_t VariableName[512];
-	efi_guid_t VendorGuid;
-	__u32 DataSize;
-	__u8 Data[1024];
-	__u32 Status;
-	__u32 Attributes;
-};
-
-struct efivar_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct efivar_entry *, char *);
-	ssize_t (*store)(struct efivar_entry *, const char *, size_t);
-};
-
-struct efi_system_resource_entry_v1 {
-	efi_guid_t fw_class;
-	u32 fw_type;
-	u32 fw_version;
-	u32 lowest_supported_fw_version;
-	u32 capsule_flags;
-	u32 last_attempt_version;
-	u32 last_attempt_status;
-};
-
-struct efi_system_resource_table {
-	u32 fw_resource_count;
-	u32 fw_resource_count_max;
-	u64 fw_resource_version;
-	u8 entries[0];
-};
-
-struct esre_entry {
-	union {
-		struct efi_system_resource_entry_v1 *esre1;
-	} esre;
-	struct kobject kobj;
-	struct list_head list;
-};
-
-struct esre_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct esre_entry *, char *);
-	ssize_t (*store)(struct esre_entry *, const char *, size_t);
-};
-
-struct efi_runtime_map_entry {
-	efi_memory_desc_t md;
-	struct kobject kobj;
-};
-
-struct map_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct efi_runtime_map_entry *, char *);
-};
-
-struct hid_device_id {
-	__u16 bus;
-	__u16 group;
-	__u32 vendor;
-	__u32 product;
-	kernel_ulong_t driver_data;
-};
-
-struct hid_item {
-	unsigned int format;
-	__u8 size;
-	__u8 type;
-	__u8 tag;
-	union {
-		__u8 u8;
-		__s8 s8;
-		__u16 u16;
-		__s16 s16;
-		__u32 u32;
-		__s32 s32;
-		__u8 *longdata;
-	} data;
-};
-
-struct hid_global {
-	unsigned int usage_page;
-	__s32 logical_minimum;
-	__s32 logical_maximum;
-	__s32 physical_minimum;
-	__s32 physical_maximum;
-	__s32 unit_exponent;
-	unsigned int unit;
-	unsigned int report_id;
-	unsigned int report_size;
-	unsigned int report_count;
-};
-
-struct hid_local {
-	unsigned int usage[12288];
-	u8 usage_size[12288];
-	unsigned int collection_index[12288];
-	unsigned int usage_index;
-	unsigned int usage_minimum;
-	unsigned int delimiter_depth;
-	unsigned int delimiter_branch;
-};
-
-struct hid_collection {
-	int parent_idx;
-	unsigned int type;
-	unsigned int usage;
-	unsigned int level;
-};
-
-struct hid_usage {
-	unsigned int hid;
-	unsigned int collection_index;
-	unsigned int usage_index;
-	__s8 resolution_multiplier;
-	__s8 wheel_factor;
-	__u16 code;
-	__u8 type;
-	__s8 hat_min;
-	__s8 hat_max;
-	__s8 hat_dir;
-	__s16 wheel_accumulated;
-};
-
-struct hid_report;
-
-struct hid_input;
-
-struct hid_field {
-	unsigned int physical;
-	unsigned int logical;
-	unsigned int application;
-	struct hid_usage *usage;
-	unsigned int maxusage;
-	unsigned int flags;
-	unsigned int report_offset;
-	unsigned int report_size;
-	unsigned int report_count;
-	unsigned int report_type;
-	__s32 *value;
-	__s32 logical_minimum;
-	__s32 logical_maximum;
-	__s32 physical_minimum;
-	__s32 physical_maximum;
-	__s32 unit_exponent;
-	unsigned int unit;
-	struct hid_report *report;
-	unsigned int index;
-	struct hid_input *hidinput;
-	__u16 dpad;
-};
-
-struct hid_device;
-
-struct hid_report {
-	struct list_head list;
-	struct list_head hidinput_list;
-	unsigned int id;
-	unsigned int type;
-	unsigned int application;
-	struct hid_field *field[256];
-	unsigned int maxfield;
-	unsigned int size;
-	struct hid_device *device;
-};
-
-struct hid_input {
-	struct list_head list;
-	struct hid_report *report;
-	struct input_dev *input;
-	const char *name;
-	bool registered;
-	struct list_head reports;
-	unsigned int application;
-};
-
-enum hid_type {
-	HID_TYPE_OTHER = 0,
-	HID_TYPE_USBMOUSE = 1,
-	HID_TYPE_USBNONE = 2,
-};
-
-struct hid_report_enum {
-	unsigned int numbered;
-	struct list_head report_list;
-	struct hid_report *report_id_hash[256];
-};
-
-struct hid_driver;
-
-struct hid_ll_driver;
-
-struct hid_device {
-	__u8 *dev_rdesc;
-	unsigned int dev_rsize;
-	__u8 *rdesc;
-	unsigned int rsize;
-	struct hid_collection *collection;
-	unsigned int collection_size;
-	unsigned int maxcollection;
-	unsigned int maxapplication;
-	__u16 bus;
-	__u16 group;
-	__u32 vendor;
-	__u32 product;
-	__u32 version;
-	enum hid_type type;
-	unsigned int country;
-	struct hid_report_enum report_enum[3];
-	struct work_struct led_work;
-	struct semaphore driver_input_lock;
-	struct device dev;
-	struct hid_driver *driver;
-	struct hid_ll_driver *ll_driver;
-	struct mutex ll_open_lock;
-	unsigned int ll_open_count;
-	long unsigned int status;
-	unsigned int claimed;
-	unsigned int quirks;
-	bool io_started;
-	struct list_head inputs;
-	void *hiddev;
-	void *hidraw;
-	char name[128];
-	char phys[64];
-	char uniq[64];
-	void *driver_data;
-	int (*ff_init)(struct hid_device *);
-	int (*hiddev_connect)(struct hid_device *, unsigned int);
-	void (*hiddev_disconnect)(struct hid_device *);
-	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
-	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
-	short unsigned int debug;
-	struct dentry *debug_dir;
-	struct dentry *debug_rdesc;
-	struct dentry *debug_events;
-	struct list_head debug_list;
-	spinlock_t debug_list_lock;
-	wait_queue_head_t debug_wait;
-};
-
-struct hid_report_id;
-
-struct hid_usage_id;
-
-struct hid_driver {
-	char *name;
-	const struct hid_device_id *id_table;
-	struct list_head dyn_list;
-	spinlock_t dyn_lock;
-	bool (*match)(struct hid_device *, bool);
-	int (*probe)(struct hid_device *, const struct hid_device_id *);
-	void (*remove)(struct hid_device *);
-	const struct hid_report_id *report_table;
-	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
-	const struct hid_usage_id *usage_table;
-	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
-	void (*report)(struct hid_device *, struct hid_report *);
-	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
-	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
-	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);
-	int (*input_configured)(struct hid_device *, struct hid_input *);
-	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
-	int (*suspend)(struct hid_device *, pm_message_t);
-	int (*resume)(struct hid_device *);
-	int (*reset_resume)(struct hid_device *);
-	struct device_driver driver;
-};
-
-struct hid_ll_driver {
-	int (*start)(struct hid_device *);
-	void (*stop)(struct hid_device *);
-	int (*open)(struct hid_device *);
-	void (*close)(struct hid_device *);
-	int (*power)(struct hid_device *, int);
-	int (*parse)(struct hid_device *);
-	void (*request)(struct hid_device *, struct hid_report *, int);
-	int (*wait)(struct hid_device *);
-	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
-	int (*output_report)(struct hid_device *, __u8 *, size_t);
-	int (*idle)(struct hid_device *, int, int, int);
-};
-
-struct hid_parser {
-	struct hid_global global;
-	struct hid_global global_stack[4];
-	unsigned int global_stack_ptr;
-	struct hid_local local;
-	unsigned int *collection_stack;
-	unsigned int collection_stack_ptr;
-	unsigned int collection_stack_size;
-	struct hid_device *device;
-	unsigned int scan_flags;
-};
-
-struct hid_report_id {
-	__u32 report_type;
-};
-
-struct hid_usage_id {
-	__u32 usage_hid;
-	__u32 usage_type;
-	__u32 usage_code;
-};
-
-struct hiddev {
-	int minor;
-	int exist;
-	int open;
-	struct mutex existancelock;
-	wait_queue_head_t wait;
-	struct hid_device *hid;
-	struct list_head list;
-	spinlock_t list_lock;
-	bool initialized;
-};
-
-struct hidraw {
-	unsigned int minor;
-	int exist;
-	int open;
-	wait_queue_head_t wait;
-	struct hid_device *hid;
-	struct device *dev;
-	spinlock_t list_lock;
-	struct list_head list;
-};
-
-struct hid_dynid {
-	struct list_head list;
-	struct hid_device_id id;
-};
-
-typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
-
-struct quirks_list_struct {
-	struct hid_device_id hid_bl_item;
-	struct list_head node;
-};
-
-struct hid_debug_list {
-	struct {
-		union {
-			struct __kfifo kfifo;
-			char *type;
-			const char *const_type;
-			char (*rectype)[0];
-			char *ptr;
-			const char *ptr_const;
-		};
-		char buf[0];
-	} hid_debug_fifo;
-	struct fasync_struct *fasync;
-	struct hid_device *hdev;
-	struct list_head node;
-	struct mutex read_mutex;
-};
-
-struct hid_usage_entry {
-	unsigned int page;
-	unsigned int usage;
-	const char *description;
-};
-
-struct hidraw_devinfo {
-	__u32 bustype;
-	__s16 vendor;
-	__s16 product;
-};
-
-struct hidraw_report {
-	__u8 *value;
-	int len;
-};
-
-struct hidraw_list {
-	struct hidraw_report buffer[64];
-	int head;
-	int tail;
-	struct fasync_struct *fasync;
-	struct hidraw *hidraw;
-	struct list_head node;
-	struct mutex read_mutex;
-};
-
-struct a4tech_sc {
-	long unsigned int quirks;
-	unsigned int hw_wheel;
-	__s32 delayed_value;
-};
-
-struct apple_sc {
-	long unsigned int quirks;
-	unsigned int fn_on;
-	long unsigned int pressed_numlock[12];
-};
-
-struct apple_key_translation {
-	u16 from;
-	u16 to;
-	u8 flags;
-};
-
-struct lg_drv_data {
-	long unsigned int quirks;
-	void *device_props;
-};
-
-struct dev_type___2 {
-	u16 idVendor;
-	u16 idProduct;
-	const short int *ff;
-};
-
-struct lg4ff_wheel_data {
-	const u32 product_id;
-	u16 combine;
-	u16 range;
-	const u16 min_range;
-	const u16 max_range;
-	u8 led_state;
-	struct led_classdev *led[5];
-	const u32 alternate_modes;
-	const char * const real_tag;
-	const char * const real_name;
-	const u16 real_product_id;
-	void (*set_range)(struct hid_device *, u16);
-};
-
-struct lg4ff_device_entry {
-	spinlock_t report_lock;
-	struct hid_report *report;
-	struct lg4ff_wheel_data wdata;
-};
-
-struct lg4ff_wheel {
-	const u32 product_id;
-	const short int *ff_effects;
-	const u16 min_range;
-	const u16 max_range;
-	void (*set_range)(struct hid_device *, u16);
-};
-
-struct lg4ff_compat_mode_switch {
-	const u8 cmd_count;
-	const u8 cmd[0];
-};
-
-struct lg4ff_wheel_ident_info {
-	const u32 modes;
-	const u16 mask;
-	const u16 result;
-	const u16 real_product_id;
-};
-
-struct lg4ff_multimode_wheel {
-	const u16 product_id;
-	const u32 alternate_modes;
-	const char *real_tag;
-	const char *real_name;
-};
-
-struct lg4ff_alternate_mode {
-	const u16 product_id;
-	const char *tag;
-	const char *name;
-};
-
-enum lg_g15_model {
-	LG_G15 = 0,
-	LG_G15_V2 = 1,
-	LG_G510 = 2,
-	LG_G510_USB_AUDIO = 3,
-};
-
-enum lg_g15_led_type {
-	LG_G15_KBD_BRIGHTNESS = 0,
-	LG_G15_LCD_BRIGHTNESS = 1,
-	LG_G15_BRIGHTNESS_MAX = 2,
-	LG_G15_MACRO_PRESET1 = 2,
-	LG_G15_MACRO_PRESET2 = 3,
-	LG_G15_MACRO_PRESET3 = 4,
-	LG_G15_MACRO_RECORD = 5,
-	LG_G15_LED_MAX = 6,
-};
-
-struct lg_g15_led {
-	struct led_classdev cdev;
-	enum led_brightness brightness;
-	enum lg_g15_led_type led;
-	u8 red;
-	u8 green;
-	u8 blue;
-};
-
-struct lg_g15_data {
-	u8 transfer_buf[20];
-	struct mutex mutex;
-	struct work_struct work;
-	struct input_dev *input;
-	struct hid_device *hdev;
-	enum lg_g15_model model;
-	struct lg_g15_led leds[6];
-	bool game_mode_enabled;
-};
-
-struct ms_data {
-	long unsigned int quirks;
-	struct hid_device *hdev;
-	struct work_struct ff_worker;
-	__u8 strong;
-	__u8 weak;
-	void *output_report_dmabuf;
-};
-
-enum {
-	MAGNITUDE_STRONG = 2,
-	MAGNITUDE_WEAK = 3,
-	MAGNITUDE_NUM = 4,
-};
-
-struct xb1s_ff_report {
-	__u8 report_id;
-	__u8 enable;
-	__u8 magnitude[4];
-	__u8 duration_10ms;
-	__u8 start_delay_10ms;
-	__u8 loop_count;
-};
-
-struct ntrig_data {
-	__u16 x;
-	__u16 y;
-	__u16 w;
-	__u16 h;
-	__u16 id;
-	bool tipswitch;
-	bool confidence;
-	bool first_contact_touch;
-	bool reading_mt;
-	__u8 mt_footer[4];
-	__u8 mt_foot_count;
-	__s8 act_state;
-	__s8 deactivate_slack;
-	__s8 activate_slack;
-	__u16 min_width;
-	__u16 min_height;
-	__u16 activation_width;
-	__u16 activation_height;
-	__u16 sensor_logical_width;
-	__u16 sensor_logical_height;
-	__u16 sensor_physical_width;
-	__u16 sensor_physical_height;
-};
-
-struct plff_device {
-	struct hid_report *report;
-	s32 maxval;
-	s32 *strong;
-	s32 *weak;
-};
-
-enum {
-	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
-	POWER_SUPPLY_SCOPE_SYSTEM = 1,
-	POWER_SUPPLY_SCOPE_DEVICE = 2,
-};
-
-struct sixaxis_led {
-	u8 time_enabled;
-	u8 duty_length;
-	u8 enabled;
-	u8 duty_off;
-	u8 duty_on;
-};
-
-struct sixaxis_rumble {
-	u8 padding;
-	u8 right_duration;
-	u8 right_motor_on;
-	u8 left_duration;
-	u8 left_motor_force;
-};
-
-struct sixaxis_output_report {
-	u8 report_id;
-	struct sixaxis_rumble rumble;
-	u8 padding[4];
-	u8 leds_bitmap;
-	struct sixaxis_led led[4];
-	struct sixaxis_led _reserved;
-};
-
-union sixaxis_output_report_01 {
-	struct sixaxis_output_report data;
-	u8 buf[36];
-};
-
-struct motion_output_report_02 {
-	u8 type;
-	u8 zero;
-	u8 r;
-	u8 g;
-	u8 b;
-	u8 zero2;
-	u8 rumble;
-};
-
-struct ds4_calibration_data {
-	int abs_code;
-	short int bias;
-	int sens_numer;
-	int sens_denom;
-};
-
-enum ds4_dongle_state {
-	DONGLE_DISCONNECTED = 0,
-	DONGLE_CALIBRATING = 1,
-	DONGLE_CONNECTED = 2,
-	DONGLE_DISABLED = 3,
-};
-
-enum sony_worker {
-	SONY_WORKER_STATE = 0,
-	SONY_WORKER_HOTPLUG = 1,
-};
-
-struct sony_sc {
-	spinlock_t lock;
-	struct list_head list_node;
-	struct hid_device *hdev;
-	struct input_dev *touchpad;
-	struct input_dev *sensor_dev;
-	struct led_classdev *leds[4];
-	long unsigned int quirks;
-	struct work_struct hotplug_worker;
-	struct work_struct state_worker;
-	void (*send_output_report)(struct sony_sc *);
-	struct power_supply *battery;
-	struct power_supply_desc battery_desc;
-	int device_id;
-	unsigned int fw_version;
-	unsigned int hw_version;
-	u8 *output_report_dmabuf;
-	u8 mac_address[6];
-	u8 hotplug_worker_initialized;
-	u8 state_worker_initialized;
-	u8 defer_initialization;
-	u8 cable_state;
-	u8 battery_charging;
-	u8 battery_capacity;
-	u8 led_state[4];
-	u8 led_delay_on[4];
-	u8 led_delay_off[4];
-	u8 led_count;
-	bool timestamp_initialized;
-	u16 prev_timestamp;
-	unsigned int timestamp_us;
-	u8 ds4_bt_poll_interval;
-	enum ds4_dongle_state ds4_dongle_state;
-	struct ds4_calibration_data ds4_calib_data[6];
-};
-
-struct hid_control_fifo {
-	unsigned char dir;
-	struct hid_report *report;
-	char *raw_report;
-};
-
-struct hid_output_fifo {
-	struct hid_report *report;
-	char *raw_report;
-};
-
-struct hid_class_descriptor {
-	__u8 bDescriptorType;
-	__le16 wDescriptorLength;
-} __attribute__((packed));
-
-struct hid_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdHID;
-	__u8 bCountryCode;
-	__u8 bNumDescriptors;
-	struct hid_class_descriptor desc[1];
-} __attribute__((packed));
-
-struct usbhid_device {
-	struct hid_device *hid;
-	struct usb_interface *intf;
-	int ifnum;
-	unsigned int bufsize;
-	struct urb *urbin;
-	char *inbuf;
-	dma_addr_t inbuf_dma;
-	struct urb *urbctrl;
-	struct usb_ctrlrequest *cr;
-	struct hid_control_fifo ctrl[256];
-	unsigned char ctrlhead;
-	unsigned char ctrltail;
-	char *ctrlbuf;
-	dma_addr_t ctrlbuf_dma;
-	long unsigned int last_ctrl;
-	struct urb *urbout;
-	struct hid_output_fifo out[256];
-	unsigned char outhead;
-	unsigned char outtail;
-	char *outbuf;
-	dma_addr_t outbuf_dma;
-	long unsigned int last_out;
-	spinlock_t lock;
-	long unsigned int iofl;
-	struct timer_list io_retry;
-	long unsigned int stop_retry;
-	unsigned int retry_delay;
-	struct work_struct reset_work;
-	wait_queue_head_t wait;
-};
-
-struct hiddev_event {
-	unsigned int hid;
-	int value;
-};
-
-struct hiddev_devinfo {
-	__u32 bustype;
-	__u32 busnum;
-	__u32 devnum;
-	__u32 ifnum;
-	__s16 vendor;
-	__s16 product;
-	__s16 version;
-	__u32 num_applications;
-};
-
-struct hiddev_collection_info {
-	__u32 index;
-	__u32 type;
-	__u32 usage;
-	__u32 level;
-};
-
-struct hiddev_report_info {
-	__u32 report_type;
-	__u32 report_id;
-	__u32 num_fields;
-};
-
-struct hiddev_field_info {
-	__u32 report_type;
-	__u32 report_id;
-	__u32 field_index;
-	__u32 maxusage;
-	__u32 flags;
-	__u32 physical;
-	__u32 logical;
-	__u32 application;
-	__s32 logical_minimum;
-	__s32 logical_maximum;
-	__s32 physical_minimum;
-	__s32 physical_maximum;
-	__u32 unit_exponent;
-	__u32 unit;
-};
-
-struct hiddev_usage_ref {
-	__u32 report_type;
-	__u32 report_id;
-	__u32 field_index;
-	__u32 usage_index;
-	__u32 usage_code;
-	__s32 value;
-};
-
-struct hiddev_usage_ref_multi {
-	struct hiddev_usage_ref uref;
-	__u32 num_values;
-	__s32 values[1024];
-};
-
-struct hiddev_list {
-	struct hiddev_usage_ref buffer[2048];
-	int head;
-	int tail;
-	unsigned int flags;
-	struct fasync_struct *fasync;
-	struct hiddev *hiddev;
-	struct list_head node;
-	struct mutex thread_lock;
-};
-
-struct pidff_usage {
-	struct hid_field *field;
-	s32 *value;
-};
-
-struct pidff_device {
-	struct hid_device *hid;
-	struct hid_report *reports[13];
-	struct pidff_usage set_effect[7];
-	struct pidff_usage set_envelope[5];
-	struct pidff_usage set_condition[8];
-	struct pidff_usage set_periodic[5];
-	struct pidff_usage set_constant[2];
-	struct pidff_usage set_ramp[3];
-	struct pidff_usage device_gain[1];
-	struct pidff_usage block_load[2];
-	struct pidff_usage pool[3];
-	struct pidff_usage effect_operation[2];
-	struct pidff_usage block_free[1];
-	struct hid_field *create_new_effect_type;
-	struct hid_field *set_effect_type;
-	struct hid_field *effect_direction;
-	struct hid_field *device_control;
-	struct hid_field *block_load_status;
-	struct hid_field *effect_operation_status;
-	int control_id[2];
-	int type_id[11];
-	int status_id[2];
-	int operation_id[2];
-	int pid_id[64];
-};
-
-enum rfkill_type {
-	RFKILL_TYPE_ALL = 0,
-	RFKILL_TYPE_WLAN = 1,
-	RFKILL_TYPE_BLUETOOTH = 2,
-	RFKILL_TYPE_UWB = 3,
-	RFKILL_TYPE_WIMAX = 4,
-	RFKILL_TYPE_WWAN = 5,
-	RFKILL_TYPE_GPS = 6,
-	RFKILL_TYPE_FM = 7,
-	RFKILL_TYPE_NFC = 8,
-	NUM_RFKILL_TYPES = 9,
-};
-
-struct rfkill;
-
-struct rfkill_ops {
-	void (*poll)(struct rfkill *, void *);
-	void (*query)(struct rfkill *, void *);
-	int (*set_block)(void *, bool);
-};
-
-enum {
-	DISABLE_ASL_WLAN = 1,
-	DISABLE_ASL_BLUETOOTH = 2,
-	DISABLE_ASL_IRDA = 4,
-	DISABLE_ASL_CAMERA = 8,
-	DISABLE_ASL_TV = 16,
-	DISABLE_ASL_GPS = 32,
-	DISABLE_ASL_DISPLAYSWITCH = 64,
-	DISABLE_ASL_MODEM = 128,
-	DISABLE_ASL_CARDREADER = 256,
-	DISABLE_ASL_3G = 512,
-	DISABLE_ASL_WIMAX = 1024,
-	DISABLE_ASL_HWCF = 2048,
-};
-
-enum {
-	CM_ASL_WLAN = 0,
-	CM_ASL_BLUETOOTH = 1,
-	CM_ASL_IRDA = 2,
-	CM_ASL_1394 = 3,
-	CM_ASL_CAMERA = 4,
-	CM_ASL_TV = 5,
-	CM_ASL_GPS = 6,
-	CM_ASL_DVDROM = 7,
-	CM_ASL_DISPLAYSWITCH = 8,
-	CM_ASL_PANELBRIGHT = 9,
-	CM_ASL_BIOSFLASH = 10,
-	CM_ASL_ACPIFLASH = 11,
-	CM_ASL_CPUFV = 12,
-	CM_ASL_CPUTEMPERATURE = 13,
-	CM_ASL_FANCPU = 14,
-	CM_ASL_FANCHASSIS = 15,
-	CM_ASL_USBPORT1 = 16,
-	CM_ASL_USBPORT2 = 17,
-	CM_ASL_USBPORT3 = 18,
-	CM_ASL_MODEM = 19,
-	CM_ASL_CARDREADER = 20,
-	CM_ASL_3G = 21,
-	CM_ASL_WIMAX = 22,
-	CM_ASL_HWCF = 23,
-	CM_ASL_LID = 24,
-	CM_ASL_TYPE = 25,
-	CM_ASL_PANELPOWER = 26,
-	CM_ASL_TPD = 27,
-};
-
-struct eeepc_laptop {
-	acpi_handle handle;
-	u32 cm_supported;
-	bool cpufv_disabled;
-	bool hotplug_disabled;
-	u16 event_count[128];
-	struct platform_device *platform_device;
-	struct acpi_device *device;
-	struct backlight_device *backlight_device;
-	struct input_dev *inputdev;
-	struct rfkill *wlan_rfkill;
-	struct rfkill *bluetooth_rfkill;
-	struct rfkill *wwan3g_rfkill;
-	struct rfkill *wimax_rfkill;
-	struct hotplug_slot hotplug_slot;
-	struct mutex hotplug_lock;
-	struct led_classdev tpd_led;
-	int tpd_led_wk;
-	struct workqueue_struct *led_workqueue;
-	struct work_struct tpd_led_work;
-};
-
-struct eeepc_cpufv {
-	int num;
-	int cur;
-};
-
-struct pmc_bit_map {
-	const char *name;
-	u32 bit_mask;
-};
-
-struct pmc_reg_map {
-	const struct pmc_bit_map *d3_sts_0;
-	const struct pmc_bit_map *d3_sts_1;
-	const struct pmc_bit_map *func_dis;
-	const struct pmc_bit_map *func_dis_2;
-	const struct pmc_bit_map *pss;
-};
-
-struct pmc_data {
-	const struct pmc_reg_map *map;
-	const struct pmc_clk *clks;
-};
-
-struct pmc_dev {
-	u32 base_addr;
-	void *regmap;
-	const struct pmc_reg_map *map;
-	struct dentry *dbgfs_dir;
-	bool init;
-};
-
-struct acpi_table_pcct {
-	struct acpi_table_header header;
-	u32 flags;
-	u64 reserved;
-};
-
-enum acpi_pcct_type {
-	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
-	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
-	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
-	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
-	ACPI_PCCT_TYPE_RESERVED = 5,
-};
-
-struct acpi_pcct_subspace {
-	struct acpi_subtable_header header;
-	u8 reserved[6];
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_hw_reduced_type2 {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-	struct acpi_generic_address platform_ack_register;
-	u64 ack_preserve_mask;
-	u64 ack_write_mask;
-} __attribute__((packed));
-
-struct cper_sec_proc_arm {
-	u32 validation_bits;
-	u16 err_info_num;
-	u16 context_info_num;
-	u32 section_length;
-	u8 affinity_level;
-	u8 reserved[3];
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-};
-
-struct trace_event_raw_mc_event {
-	struct trace_entry ent;
-	unsigned int error_type;
-	u32 __data_loc_msg;
-	u32 __data_loc_label;
-	u16 error_count;
-	u8 mc_index;
-	s8 top_layer;
-	s8 middle_layer;
-	s8 lower_layer;
-	long int address;
-	u8 grain_bits;
-	long int syndrome;
-	u32 __data_loc_driver_detail;
-	char __data[0];
-};
-
-struct trace_event_raw_arm_event {
-	struct trace_entry ent;
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-	u8 affinity;
-	char __data[0];
-};
-
-struct trace_event_raw_non_standard_event {
-	struct trace_entry ent;
-	char sec_type[16];
-	char fru_id[16];
-	u32 __data_loc_fru_text;
-	u8 sev;
-	u32 len;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_aer_event {
-	struct trace_entry ent;
-	u32 __data_loc_dev_name;
-	u32 status;
-	u8 severity;
-	u8 tlp_header_valid;
-	u32 tlp_header[4];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_mc_event {
-	u32 msg;
-	u32 label;
-	u32 driver_detail;
-};
-
-struct trace_event_data_offsets_arm_event {};
-
-struct trace_event_data_offsets_non_standard_event {
-	u32 fru_text;
-	u32 buf;
-};
-
-struct trace_event_data_offsets_aer_event {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
-
-typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
-
-typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
-
-typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
-
-struct nvmem_cell_lookup {
-	const char *nvmem_name;
-	const char *cell_name;
-	const char *dev_id;
-	const char *con_id;
-	struct list_head node;
-};
-
-enum {
-	NVMEM_ADD = 1,
-	NVMEM_REMOVE = 2,
-	NVMEM_CELL_ADD = 3,
-	NVMEM_CELL_REMOVE = 4,
-};
-
-struct nvmem_cell_table {
-	const char *nvmem_name;
-	const struct nvmem_cell_info *cells;
-	size_t ncells;
-	struct list_head node;
-};
-
-struct nvmem_device___2 {
-	struct module *owner;
-	struct device dev;
-	int stride;
-	int word_size;
-	int id;
-	struct kref refcnt;
-	size_t size;
-	bool read_only;
-	int flags;
-	enum nvmem_type type;
-	struct bin_attribute eeprom;
-	struct device *base_dev;
-	struct list_head cells;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	void *priv;
-};
-
-struct nvmem_cell {
-	const char *name;
-	int offset;
-	int bytes;
-	int bit_offset;
-	int nbits;
-	struct device_node *np;
-	struct nvmem_device___2 *nvmem;
-	struct list_head node;
-};
-
-struct snd_shutdown_f_ops;
-
-struct snd_info_entry;
-
-struct snd_card {
-	int number;
-	char id[16];
-	char driver[16];
-	char shortname[32];
-	char longname[80];
-	char irq_descr[32];
-	char mixername[80];
-	char components[128];
-	struct module *module;
-	void *private_data;
-	void (*private_free)(struct snd_card *);
-	struct list_head devices;
-	struct device ctl_dev;
-	unsigned int last_numid;
-	struct rw_semaphore controls_rwsem;
-	rwlock_t ctl_files_rwlock;
-	int controls_count;
-	int user_ctl_count;
-	struct list_head controls;
-	struct list_head ctl_files;
-	struct snd_info_entry *proc_root;
-	struct proc_dir_entry *proc_root_link;
-	struct list_head files_list;
-	struct snd_shutdown_f_ops *s_f_ops;
-	spinlock_t files_lock;
-	int shutdown;
-	struct completion *release_completion;
-	struct device *dev;
-	struct device card_dev;
-	const struct attribute_group *dev_groups[4];
-	bool registered;
-	int sync_irq;
-	wait_queue_head_t remove_sleep;
-	unsigned int power_state;
-	wait_queue_head_t power_sleep;
-};
-
-struct snd_info_buffer;
-
-struct snd_info_entry_text {
-	void (*read)(struct snd_info_entry *, struct snd_info_buffer *);
-	void (*write)(struct snd_info_entry *, struct snd_info_buffer *);
-};
-
-struct snd_info_entry_ops;
-
-struct snd_info_entry {
-	const char *name;
-	umode_t mode;
-	long int size;
-	short unsigned int content;
-	union {
-		struct snd_info_entry_text text;
-		struct snd_info_entry_ops *ops;
-	} c;
-	struct snd_info_entry *parent;
-	struct module *module;
-	void *private_data;
-	void (*private_free)(struct snd_info_entry *);
-	struct proc_dir_entry *p;
-	struct mutex access;
-	struct list_head children;
-	struct list_head list;
-};
-
-struct snd_minor {
-	int type;
-	int card;
-	int device;
-	const struct file_operations *f_ops;
-	void *private_data;
-	struct device *dev;
-	struct snd_card *card_ptr;
-};
-
-struct snd_info_buffer {
-	char *buffer;
-	unsigned int curr;
-	unsigned int size;
-	unsigned int len;
-	int stop;
-	int error;
-};
-
-struct snd_info_entry_ops {
-	int (*open)(struct snd_info_entry *, short unsigned int, void **);
-	int (*release)(struct snd_info_entry *, short unsigned int, void *);
-	ssize_t (*read)(struct snd_info_entry *, void *, struct file *, char *, size_t, loff_t);
-	ssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char *, size_t, loff_t);
-	loff_t (*llseek)(struct snd_info_entry *, void *, struct file *, loff_t, int);
-	__poll_t (*poll)(struct snd_info_entry *, void *, struct file *, poll_table *);
-	int (*ioctl)(struct snd_info_entry *, void *, struct file *, unsigned int, long unsigned int);
-	int (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);
-};
-
-enum {
-	SND_CTL_SUBDEV_PCM = 0,
-	SND_CTL_SUBDEV_RAWMIDI = 1,
-	SND_CTL_SUBDEV_ITEMS = 2,
-};
-
-struct snd_monitor_file {
-	struct file *file;
-	const struct file_operations *disconnected_f_op;
-	struct list_head shutdown_list;
-	struct list_head list;
-};
-
-enum snd_device_type {
-	SNDRV_DEV_LOWLEVEL = 0,
-	SNDRV_DEV_INFO = 1,
-	SNDRV_DEV_BUS = 2,
-	SNDRV_DEV_CODEC = 3,
-	SNDRV_DEV_PCM = 4,
-	SNDRV_DEV_COMPRESS = 5,
-	SNDRV_DEV_RAWMIDI = 6,
-	SNDRV_DEV_TIMER = 7,
-	SNDRV_DEV_SEQUENCER = 8,
-	SNDRV_DEV_HWDEP = 9,
-	SNDRV_DEV_JACK = 10,
-	SNDRV_DEV_CONTROL = 11,
-};
-
-enum snd_device_state {
-	SNDRV_DEV_BUILD = 0,
-	SNDRV_DEV_REGISTERED = 1,
-	SNDRV_DEV_DISCONNECTED = 2,
-};
-
-struct snd_device;
-
-struct snd_device_ops {
-	int (*dev_free)(struct snd_device *);
-	int (*dev_register)(struct snd_device *);
-	int (*dev_disconnect)(struct snd_device *);
-};
-
-struct snd_device {
-	struct list_head list;
-	struct snd_card *card;
-	enum snd_device_state state;
-	enum snd_device_type type;
-	void *device_data;
-	struct snd_device_ops *ops;
-};
-
-struct snd_aes_iec958 {
-	unsigned char status[24];
-	unsigned char subcode[147];
-	unsigned char pad;
-	unsigned char dig_subframe[4];
-};
-
-struct snd_ctl_card_info {
-	int card;
-	int pad;
-	unsigned char id[16];
-	unsigned char driver[16];
-	unsigned char name[32];
-	unsigned char longname[80];
-	unsigned char reserved_[16];
-	unsigned char mixername[80];
-	unsigned char components[128];
-};
-
-typedef int snd_ctl_elem_type_t;
-
-typedef int snd_ctl_elem_iface_t;
-
-struct snd_ctl_elem_id {
-	unsigned int numid;
-	snd_ctl_elem_iface_t iface;
-	unsigned int device;
-	unsigned int subdevice;
-	unsigned char name[44];
-	unsigned int index;
-};
-
-struct snd_ctl_elem_list {
-	unsigned int offset;
-	unsigned int space;
-	unsigned int used;
-	unsigned int count;
-	struct snd_ctl_elem_id *pids;
-	unsigned char reserved[50];
-};
-
-struct snd_ctl_elem_info {
-	struct snd_ctl_elem_id id;
-	snd_ctl_elem_type_t type;
-	unsigned int access;
-	unsigned int count;
-	__kernel_pid_t owner;
-	union {
-		struct {
-			long int min;
-			long int max;
-			long int step;
-		} integer;
-		struct {
-			long long int min;
-			long long int max;
-			long long int step;
-		} integer64;
-		struct {
-			unsigned int items;
-			unsigned int item;
-			char name[64];
-			__u64 names_ptr;
-			unsigned int names_length;
-		} enumerated;
-		unsigned char reserved[128];
-	} value;
-	union {
-		short unsigned int d[4];
-		short unsigned int *d_ptr;
-	} dimen;
-	unsigned char reserved[56];
-};
-
-struct snd_ctl_elem_value {
-	struct snd_ctl_elem_id id;
-	unsigned int indirect: 1;
-	union {
-		union {
-			long int value[128];
-			long int *value_ptr;
-		} integer;
-		union {
-			long long int value[64];
-			long long int *value_ptr;
-		} integer64;
-		union {
-			unsigned int item[128];
-			unsigned int *item_ptr;
-		} enumerated;
-		union {
-			unsigned char data[512];
-			unsigned char *data_ptr;
-		} bytes;
-		struct snd_aes_iec958 iec958;
-	} value;
-	struct timespec tstamp;
-	unsigned char reserved[112];
-};
-
-struct snd_ctl_tlv {
-	unsigned int numid;
-	unsigned int length;
-	unsigned int tlv[0];
-};
-
-enum sndrv_ctl_event_type {
-	SNDRV_CTL_EVENT_ELEM = 0,
-	SNDRV_CTL_EVENT_LAST = 0,
-};
-
-struct snd_ctl_event {
-	int type;
-	union {
-		struct {
-			unsigned int mask;
-			struct snd_ctl_elem_id id;
-		} elem;
-		unsigned char data8[60];
-	} data;
-};
-
-struct snd_kcontrol;
-
-typedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);
-
-typedef int snd_kcontrol_get_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
-
-typedef int snd_kcontrol_put_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
-
-typedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int *);
-
-struct snd_ctl_file;
-
-struct snd_kcontrol_volatile {
-	struct snd_ctl_file *owner;
-	unsigned int access;
-};
-
-struct snd_kcontrol {
-	struct list_head list;
-	struct snd_ctl_elem_id id;
-	unsigned int count;
-	snd_kcontrol_info_t *info;
-	snd_kcontrol_get_t *get;
-	snd_kcontrol_put_t *put;
-	union {
-		snd_kcontrol_tlv_rw_t *c;
-		const unsigned int *p;
-	} tlv;
-	long unsigned int private_value;
-	void *private_data;
-	void (*private_free)(struct snd_kcontrol *);
-	struct snd_kcontrol_volatile vd[0];
-};
-
-enum {
-	SNDRV_CTL_TLV_OP_READ = 0,
-	SNDRV_CTL_TLV_OP_WRITE = 1,
-	SNDRV_CTL_TLV_OP_CMD = 4294967295,
-};
-
-struct snd_kcontrol_new {
-	snd_ctl_elem_iface_t iface;
-	unsigned int device;
-	unsigned int subdevice;
-	const unsigned char *name;
-	unsigned int index;
-	unsigned int access;
-	unsigned int count;
-	snd_kcontrol_info_t *info;
-	snd_kcontrol_get_t *get;
-	snd_kcontrol_put_t *put;
-	union {
-		snd_kcontrol_tlv_rw_t *c;
-		const unsigned int *p;
-	} tlv;
-	long unsigned int private_value;
-};
-
-struct snd_ctl_file {
-	struct list_head list;
-	struct snd_card *card;
-	struct pid *pid;
-	int preferred_subdevice[2];
-	wait_queue_head_t change_sleep;
-	spinlock_t read_lock;
-	struct fasync_struct *fasync;
-	int subscribed;
-	struct list_head events;
-};
-
-struct snd_kctl_event {
-	struct list_head list;
-	struct snd_ctl_elem_id id;
-	unsigned int mask;
-};
-
-typedef int (*snd_kctl_ioctl_func_t)(struct snd_card *, struct snd_ctl_file *, unsigned int, long unsigned int);
-
-struct snd_kctl_ioctl {
-	struct list_head list;
-	snd_kctl_ioctl_func_t fioctl;
-};
-
-enum snd_ctl_add_mode {
-	CTL_ADD_EXCLUSIVE = 0,
-	CTL_REPLACE = 1,
-	CTL_ADD_ON_REPLACE = 2,
-};
-
-struct user_element {
-	struct snd_ctl_elem_info info;
-	struct snd_card *card;
-	char *elem_data;
-	long unsigned int elem_data_size;
-	void *tlv_data;
-	long unsigned int tlv_data_size;
-	void *priv_data;
-};
-
-struct snd_ctl_elem_list32 {
-	u32 offset;
-	u32 space;
-	u32 used;
-	u32 count;
-	u32 pids;
-	unsigned char reserved[50];
-};
-
-struct snd_ctl_elem_info32 {
-	struct snd_ctl_elem_id id;
-	s32 type;
-	u32 access;
-	u32 count;
-	s32 owner;
-	union {
-		struct {
-			s32 min;
-			s32 max;
-			s32 step;
-		} integer;
-		struct {
-			u64 min;
-			u64 max;
-			u64 step;
-		} integer64;
-		struct {
-			u32 items;
-			u32 item;
-			char name[64];
-			u64 names_ptr;
-			u32 names_length;
-		} enumerated;
-		unsigned char reserved[128];
-	} value;
-	unsigned char reserved[64];
-};
-
-struct snd_ctl_elem_value32 {
-	struct snd_ctl_elem_id id;
-	unsigned int indirect;
-	union {
-		s32 integer[128];
-		unsigned char data[512];
-	} value;
-	unsigned char reserved[128];
-};
-
-enum {
-	SNDRV_CTL_IOCTL_ELEM_LIST32 = 3225965840,
-	SNDRV_CTL_IOCTL_ELEM_INFO32 = 3239073041,
-	SNDRV_CTL_IOCTL_ELEM_READ32 = 3267646738,
-	SNDRV_CTL_IOCTL_ELEM_WRITE32 = 3267646739,
-	SNDRV_CTL_IOCTL_ELEM_ADD32 = 3239073047,
-	SNDRV_CTL_IOCTL_ELEM_REPLACE32 = 3239073048,
-};
-
-struct snd_pci_quirk {
-	short unsigned int subvendor;
-	short unsigned int subdevice;
-	short unsigned int subdevice_mask;
-	int value;
-};
-
-struct snd_info_private_data {
-	struct snd_info_buffer *rbuffer;
-	struct snd_info_buffer *wbuffer;
-	struct snd_info_entry *entry;
-	void *file_private_data;
-};
-
-struct link_ctl_info {
-	snd_ctl_elem_type_t type;
-	int count;
-	int min_val;
-	int max_val;
-};
-
-struct link_master {
-	struct list_head slaves;
-	struct link_ctl_info info;
-	int val;
-	unsigned int tlv[4];
-	void (*hook)(void *, int);
-	void *hook_private_data;
-};
-
-struct link_slave {
-	struct list_head list;
-	struct link_master *master;
-	struct link_ctl_info info;
-	int vals[2];
-	unsigned int flags;
-	struct snd_kcontrol *kctl;
-	struct snd_kcontrol slave;
-};
-
-enum snd_jack_types {
-	SND_JACK_HEADPHONE = 1,
-	SND_JACK_MICROPHONE = 2,
-	SND_JACK_HEADSET = 3,
-	SND_JACK_LINEOUT = 4,
-	SND_JACK_MECHANICAL = 8,
-	SND_JACK_VIDEOOUT = 16,
-	SND_JACK_AVOUT = 20,
-	SND_JACK_LINEIN = 32,
-	SND_JACK_BTN_0 = 16384,
-	SND_JACK_BTN_1 = 8192,
-	SND_JACK_BTN_2 = 4096,
-	SND_JACK_BTN_3 = 2048,
-	SND_JACK_BTN_4 = 1024,
-	SND_JACK_BTN_5 = 512,
-};
-
-struct snd_jack {
-	struct list_head kctl_list;
-	struct snd_card *card;
-	const char *id;
-	struct input_dev *input_dev;
-	int registered;
-	int type;
-	char name[100];
-	unsigned int key[6];
-	void *private_data;
-	void (*private_free)(struct snd_jack *);
-};
-
-struct snd_jack_kctl {
-	struct snd_kcontrol *kctl;
-	struct list_head list;
-	unsigned int mask_bits;
-};
-
-struct snd_hwdep_info {
-	unsigned int device;
-	int card;
-	unsigned char id[64];
-	unsigned char name[80];
-	int iface;
-	unsigned char reserved[64];
-};
-
-struct snd_hwdep_dsp_status {
-	unsigned int version;
-	unsigned char id[32];
-	unsigned int num_dsps;
-	unsigned int dsp_loaded;
-	unsigned int chip_ready;
-	unsigned char reserved[16];
-};
-
-struct snd_hwdep_dsp_image {
-	unsigned int index;
-	unsigned char name[64];
-	unsigned char *image;
-	size_t length;
-	long unsigned int driver_data;
-};
-
-struct snd_hwdep;
-
-struct snd_hwdep_ops {
-	long long int (*llseek)(struct snd_hwdep *, struct file *, long long int, int);
-	long int (*read)(struct snd_hwdep *, char *, long int, loff_t *);
-	long int (*write)(struct snd_hwdep *, const char *, long int, loff_t *);
-	int (*open)(struct snd_hwdep *, struct file *);
-	int (*release)(struct snd_hwdep *, struct file *);
-	__poll_t (*poll)(struct snd_hwdep *, struct file *, poll_table *);
-	int (*ioctl)(struct snd_hwdep *, struct file *, unsigned int, long unsigned int);
-	int (*ioctl_compat)(struct snd_hwdep *, struct file *, unsigned int, long unsigned int);
-	int (*mmap)(struct snd_hwdep *, struct file *, struct vm_area_struct *);
-	int (*dsp_status)(struct snd_hwdep *, struct snd_hwdep_dsp_status *);
-	int (*dsp_load)(struct snd_hwdep *, struct snd_hwdep_dsp_image *);
-};
-
-struct snd_hwdep {
-	struct snd_card *card;
-	struct list_head list;
-	int device;
-	char id[32];
-	char name[80];
-	int iface;
-	struct snd_hwdep_ops ops;
-	wait_queue_head_t open_wait;
-	void *private_data;
-	void (*private_free)(struct snd_hwdep *);
-	struct device dev;
-	struct mutex open_mutex;
-	int used;
-	unsigned int dsp_loaded;
-	unsigned int exclusive: 1;
-};
-
-struct snd_hwdep_dsp_image32 {
-	u32 index;
-	unsigned char name[64];
-	u32 image;
-	u32 length;
-	u32 driver_data;
-};
-
-enum {
-	SNDRV_HWDEP_IOCTL_DSP_LOAD32 = 1079003139,
-};
-
-enum {
-	SNDRV_TIMER_CLASS_NONE = 4294967295,
-	SNDRV_TIMER_CLASS_SLAVE = 0,
-	SNDRV_TIMER_CLASS_GLOBAL = 1,
-	SNDRV_TIMER_CLASS_CARD = 2,
-	SNDRV_TIMER_CLASS_PCM = 3,
-	SNDRV_TIMER_CLASS_LAST = 3,
-};
-
-enum {
-	SNDRV_TIMER_SCLASS_NONE = 0,
-	SNDRV_TIMER_SCLASS_APPLICATION = 1,
-	SNDRV_TIMER_SCLASS_SEQUENCER = 2,
-	SNDRV_TIMER_SCLASS_OSS_SEQUENCER = 3,
-	SNDRV_TIMER_SCLASS_LAST = 3,
-};
-
-struct snd_timer_id {
-	int dev_class;
-	int dev_sclass;
-	int card;
-	int device;
-	int subdevice;
-};
-
-struct snd_timer_ginfo {
-	struct snd_timer_id tid;
-	unsigned int flags;
-	int card;
-	unsigned char id[64];
-	unsigned char name[80];
-	long unsigned int reserved0;
-	long unsigned int resolution;
-	long unsigned int resolution_min;
-	long unsigned int resolution_max;
-	unsigned int clients;
-	unsigned char reserved[32];
-};
-
-struct snd_timer_gparams {
-	struct snd_timer_id tid;
-	long unsigned int period_num;
-	long unsigned int period_den;
-	unsigned char reserved[32];
-};
-
-struct snd_timer_gstatus {
-	struct snd_timer_id tid;
-	long unsigned int resolution;
-	long unsigned int resolution_num;
-	long unsigned int resolution_den;
-	unsigned char reserved[32];
-};
-
-struct snd_timer_select {
-	struct snd_timer_id id;
-	unsigned char reserved[32];
-};
-
-struct snd_timer_info {
-	unsigned int flags;
-	int card;
-	unsigned char id[64];
-	unsigned char name[80];
-	long unsigned int reserved0;
-	long unsigned int resolution;
-	unsigned char reserved[64];
-};
-
-struct snd_timer_params {
-	unsigned int flags;
-	unsigned int ticks;
-	unsigned int queue_size;
-	unsigned int reserved0;
-	unsigned int filter;
-	unsigned char reserved[60];
-};
-
-struct snd_timer_status {
-	struct timespec tstamp;
-	unsigned int resolution;
-	unsigned int lost;
-	unsigned int overrun;
-	unsigned int queue;
-	unsigned char reserved[64];
-};
-
-struct snd_timer_read {
-	unsigned int resolution;
-	unsigned int ticks;
-};
-
-enum {
-	SNDRV_TIMER_EVENT_RESOLUTION = 0,
-	SNDRV_TIMER_EVENT_TICK = 1,
-	SNDRV_TIMER_EVENT_START = 2,
-	SNDRV_TIMER_EVENT_STOP = 3,
-	SNDRV_TIMER_EVENT_CONTINUE = 4,
-	SNDRV_TIMER_EVENT_PAUSE = 5,
-	SNDRV_TIMER_EVENT_EARLY = 6,
-	SNDRV_TIMER_EVENT_SUSPEND = 7,
-	SNDRV_TIMER_EVENT_RESUME = 8,
-	SNDRV_TIMER_EVENT_MSTART = 12,
-	SNDRV_TIMER_EVENT_MSTOP = 13,
-	SNDRV_TIMER_EVENT_MCONTINUE = 14,
-	SNDRV_TIMER_EVENT_MPAUSE = 15,
-	SNDRV_TIMER_EVENT_MSUSPEND = 17,
-	SNDRV_TIMER_EVENT_MRESUME = 18,
-};
-
-struct snd_timer_tread {
-	int event;
-	struct timespec tstamp;
-	unsigned int val;
-};
-
-struct snd_timer;
-
-struct snd_timer_hardware {
-	unsigned int flags;
-	long unsigned int resolution;
-	long unsigned int resolution_min;
-	long unsigned int resolution_max;
-	long unsigned int ticks;
-	int (*open)(struct snd_timer *);
-	int (*close)(struct snd_timer *);
-	long unsigned int (*c_resolution)(struct snd_timer *);
-	int (*start)(struct snd_timer *);
-	int (*stop)(struct snd_timer *);
-	int (*set_period)(struct snd_timer *, long unsigned int, long unsigned int);
-	int (*precise_resolution)(struct snd_timer *, long unsigned int *, long unsigned int *);
-};
-
-struct snd_timer {
-	int tmr_class;
-	struct snd_card *card;
-	struct module *module;
-	int tmr_device;
-	int tmr_subdevice;
-	char id[64];
-	char name[80];
-	unsigned int flags;
-	int running;
-	long unsigned int sticks;
-	void *private_data;
-	void (*private_free)(struct snd_timer *);
-	struct snd_timer_hardware hw;
-	spinlock_t lock;
-	struct list_head device_list;
-	struct list_head open_list_head;
-	struct list_head active_list_head;
-	struct list_head ack_list_head;
-	struct list_head sack_list_head;
-	struct tasklet_struct task_queue;
-	int max_instances;
-	int num_instances;
-};
-
-struct snd_timer_instance {
-	struct snd_timer *timer;
-	char *owner;
-	unsigned int flags;
-	void *private_data;
-	void (*private_free)(struct snd_timer_instance *);
-	void (*callback)(struct snd_timer_instance *, long unsigned int, long unsigned int);
-	void (*ccallback)(struct snd_timer_instance *, int, struct timespec *, long unsigned int);
-	void (*disconnect)(struct snd_timer_instance *);
-	void *callback_data;
-	long unsigned int ticks;
-	long unsigned int cticks;
-	long unsigned int pticks;
-	long unsigned int resolution;
-	long unsigned int lost;
-	int slave_class;
-	unsigned int slave_id;
-	struct list_head open_list;
-	struct list_head active_list;
-	struct list_head ack_list;
-	struct list_head slave_list_head;
-	struct list_head slave_active_head;
-	struct snd_timer_instance *master;
-};
-
-struct snd_timer_user {
-	struct snd_timer_instance *timeri;
-	int tread;
-	long unsigned int ticks;
-	long unsigned int overrun;
-	int qhead;
-	int qtail;
-	int qused;
-	int queue_size;
-	bool disconnected;
-	struct snd_timer_read *queue;
-	struct snd_timer_tread *tqueue;
-	spinlock_t qlock;
-	long unsigned int last_resolution;
-	unsigned int filter;
-	struct timespec tstamp;
-	wait_queue_head_t qchange_sleep;
-	struct fasync_struct *fasync;
-	struct mutex ioctl_lock;
-};
-
-struct snd_timer_system_private {
-	struct timer_list tlist;
-	struct snd_timer *snd_timer;
-	long unsigned int last_expires;
-	long unsigned int last_jiffies;
-	long unsigned int correction;
-};
-
-enum {
-	SNDRV_TIMER_IOCTL_START_OLD = 21536,
-	SNDRV_TIMER_IOCTL_STOP_OLD = 21537,
-	SNDRV_TIMER_IOCTL_CONTINUE_OLD = 21538,
-	SNDRV_TIMER_IOCTL_PAUSE_OLD = 21539,
-};
-
-struct snd_timer_gparams32 {
-	struct snd_timer_id tid;
-	u32 period_num;
-	u32 period_den;
-	unsigned char reserved[32];
-};
-
-struct snd_timer_info32 {
-	u32 flags;
-	s32 card;
-	unsigned char id[64];
-	unsigned char name[80];
-	u32 reserved0;
-	u32 resolution;
-	unsigned char reserved[64];
-};
-
-struct snd_timer_status32 {
-	struct old_timespec32 tstamp;
-	u32 resolution;
-	u32 lost;
-	u32 overrun;
-	u32 queue;
-	unsigned char reserved[64];
-};
-
-enum {
-	SNDRV_TIMER_IOCTL_GPARAMS32 = 1077695492,
-	SNDRV_TIMER_IOCTL_INFO32 = 2162185233,
-	SNDRV_TIMER_IOCTL_STATUS32 = 1079530516,
-};
-
-struct snd_hrtimer {
-	struct snd_timer *timer;
-	struct hrtimer hrt;
-	bool in_callback;
-};
-
-typedef long unsigned int snd_pcm_uframes_t;
-
-typedef long int snd_pcm_sframes_t;
-
-enum {
-	SNDRV_PCM_CLASS_GENERIC = 0,
-	SNDRV_PCM_CLASS_MULTI = 1,
-	SNDRV_PCM_CLASS_MODEM = 2,
-	SNDRV_PCM_CLASS_DIGITIZER = 3,
-	SNDRV_PCM_CLASS_LAST = 3,
-};
-
-enum {
-	SNDRV_PCM_STREAM_PLAYBACK = 0,
-	SNDRV_PCM_STREAM_CAPTURE = 1,
-	SNDRV_PCM_STREAM_LAST = 1,
-};
-
-typedef int snd_pcm_access_t;
-
-typedef int snd_pcm_format_t;
-
-typedef int snd_pcm_subformat_t;
-
-typedef int snd_pcm_state_t;
-
-union snd_pcm_sync_id {
-	unsigned char id[16];
-	short unsigned int id16[8];
-	unsigned int id32[4];
-};
-
-struct snd_pcm_info {
-	unsigned int device;
-	unsigned int subdevice;
-	int stream;
-	int card;
-	unsigned char id[64];
-	unsigned char name[80];
-	unsigned char subname[32];
-	int dev_class;
-	int dev_subclass;
-	unsigned int subdevices_count;
-	unsigned int subdevices_avail;
-	union snd_pcm_sync_id sync;
-	unsigned char reserved[64];
-};
-
-struct snd_interval {
-	unsigned int min;
-	unsigned int max;
-	unsigned int openmin: 1;
-	unsigned int openmax: 1;
-	unsigned int integer: 1;
-	unsigned int empty: 1;
-};
-
-struct snd_mask {
-	__u32 bits[8];
-};
-
-struct snd_pcm_hw_params {
-	unsigned int flags;
-	struct snd_mask masks[3];
-	struct snd_mask mres[5];
-	struct snd_interval intervals[12];
-	struct snd_interval ires[9];
-	unsigned int rmask;
-	unsigned int cmask;
-	unsigned int info;
-	unsigned int msbits;
-	unsigned int rate_num;
-	unsigned int rate_den;
-	snd_pcm_uframes_t fifo_size;
-	unsigned char reserved[64];
-};
-
-enum {
-	SNDRV_PCM_TSTAMP_NONE = 0,
-	SNDRV_PCM_TSTAMP_ENABLE = 1,
-	SNDRV_PCM_TSTAMP_LAST = 1,
-};
-
-struct snd_pcm_status {
-	snd_pcm_state_t state;
-	struct timespec trigger_tstamp;
-	struct timespec tstamp;
-	snd_pcm_uframes_t appl_ptr;
-	snd_pcm_uframes_t hw_ptr;
-	snd_pcm_sframes_t delay;
-	snd_pcm_uframes_t avail;
-	snd_pcm_uframes_t avail_max;
-	snd_pcm_uframes_t overrange;
-	snd_pcm_state_t suspended_state;
-	__u32 audio_tstamp_data;
-	struct timespec audio_tstamp;
-	struct timespec driver_tstamp;
-	__u32 audio_tstamp_accuracy;
-	unsigned char reserved[20];
-};
-
-struct snd_pcm_mmap_status {
-	snd_pcm_state_t state;
-	int pad1;
-	snd_pcm_uframes_t hw_ptr;
-	struct timespec tstamp;
-	snd_pcm_state_t suspended_state;
-	struct timespec audio_tstamp;
-};
-
-struct snd_pcm_mmap_control {
-	snd_pcm_uframes_t appl_ptr;
-	snd_pcm_uframes_t avail_min;
-};
-
-struct snd_dma_device {
-	int type;
-	struct device *dev;
-};
-
-struct snd_dma_buffer {
-	struct snd_dma_device dev;
-	unsigned char *area;
-	dma_addr_t addr;
-	size_t bytes;
-	void *private_data;
-};
-
-struct snd_pcm_hardware {
-	unsigned int info;
-	u64 formats;
-	unsigned int rates;
-	unsigned int rate_min;
-	unsigned int rate_max;
-	unsigned int channels_min;
-	unsigned int channels_max;
-	size_t buffer_bytes_max;
-	size_t period_bytes_min;
-	size_t period_bytes_max;
-	unsigned int periods_min;
-	unsigned int periods_max;
-	size_t fifo_size;
-};
-
-struct snd_pcm_substream;
-
-struct snd_pcm_audio_tstamp_config;
-
-struct snd_pcm_audio_tstamp_report;
-
-struct snd_pcm_ops {
-	int (*open)(struct snd_pcm_substream *);
-	int (*close)(struct snd_pcm_substream *);
-	int (*ioctl)(struct snd_pcm_substream *, unsigned int, void *);
-	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
-	int (*hw_free)(struct snd_pcm_substream *);
-	int (*prepare)(struct snd_pcm_substream *);
-	int (*trigger)(struct snd_pcm_substream *, int);
-	int (*sync_stop)(struct snd_pcm_substream *);
-	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);
-	int (*get_time_info)(struct snd_pcm_substream *, struct timespec *, struct timespec *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
-	int (*fill_silence)(struct snd_pcm_substream *, int, long unsigned int, long unsigned int);
-	int (*copy_user)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
-	int (*copy_kernel)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
-	struct page * (*page)(struct snd_pcm_substream *, long unsigned int);
-	int (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);
-	int (*ack)(struct snd_pcm_substream *);
-};
-
-struct snd_pcm_group {
-	spinlock_t lock;
-	struct mutex mutex;
-	struct list_head substreams;
-	refcount_t refs;
-};
-
-struct snd_pcm;
-
-struct snd_pcm_str;
-
-struct snd_pcm_runtime;
-
-struct snd_pcm_substream {
-	struct snd_pcm *pcm;
-	struct snd_pcm_str *pstr;
-	void *private_data;
-	int number;
-	char name[32];
-	int stream;
-	struct pm_qos_request latency_pm_qos_req;
-	size_t buffer_bytes_max;
-	struct snd_dma_buffer dma_buffer;
-	size_t dma_max;
-	const struct snd_pcm_ops *ops;
-	struct snd_pcm_runtime *runtime;
-	struct snd_timer *timer;
-	unsigned int timer_running: 1;
-	long int wait_time;
-	struct snd_pcm_substream *next;
-	struct list_head link_list;
-	struct snd_pcm_group self_group;
-	struct snd_pcm_group *group;
-	int ref_count;
-	atomic_t mmap_count;
-	unsigned int f_flags;
-	void (*pcm_release)(struct snd_pcm_substream *);
-	struct pid *pid;
-	struct snd_info_entry *proc_root;
-	unsigned int hw_opened: 1;
-	unsigned int managed_buffer_alloc: 1;
-};
-
-struct snd_pcm_audio_tstamp_config {
-	u32 type_requested: 4;
-	u32 report_delay: 1;
-};
-
-struct snd_pcm_audio_tstamp_report {
-	u32 valid: 1;
-	u32 actual_type: 4;
-	u32 accuracy_report: 1;
-	u32 accuracy;
-};
-
-struct snd_pcm_hw_rule;
-
-typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *, struct snd_pcm_hw_rule *);
-
-struct snd_pcm_hw_rule {
-	unsigned int cond;
-	int var;
-	int deps[4];
-	snd_pcm_hw_rule_func_t func;
-	void *private;
-};
-
-struct snd_pcm_hw_constraints {
-	struct snd_mask masks[3];
-	struct snd_interval intervals[12];
-	unsigned int rules_num;
-	unsigned int rules_all;
-	struct snd_pcm_hw_rule *rules;
-};
-
-struct snd_pcm_hw_constraint_list {
-	const unsigned int *list;
-	unsigned int count;
-	unsigned int mask;
-};
-
-struct snd_pcm_runtime {
-	struct snd_pcm_substream *trigger_master;
-	struct timespec trigger_tstamp;
-	bool trigger_tstamp_latched;
-	int overrange;
-	snd_pcm_uframes_t avail_max;
-	snd_pcm_uframes_t hw_ptr_base;
-	snd_pcm_uframes_t hw_ptr_interrupt;
-	long unsigned int hw_ptr_jiffies;
-	long unsigned int hw_ptr_buffer_jiffies;
-	snd_pcm_sframes_t delay;
-	u64 hw_ptr_wrap;
-	snd_pcm_access_t access;
-	snd_pcm_format_t format;
-	snd_pcm_subformat_t subformat;
-	unsigned int rate;
-	unsigned int channels;
-	snd_pcm_uframes_t period_size;
-	unsigned int periods;
-	snd_pcm_uframes_t buffer_size;
-	snd_pcm_uframes_t min_align;
-	size_t byte_align;
-	unsigned int frame_bits;
-	unsigned int sample_bits;
-	unsigned int info;
-	unsigned int rate_num;
-	unsigned int rate_den;
-	unsigned int no_period_wakeup: 1;
-	int tstamp_mode;
-	unsigned int period_step;
-	snd_pcm_uframes_t start_threshold;
-	snd_pcm_uframes_t stop_threshold;
-	snd_pcm_uframes_t silence_threshold;
-	snd_pcm_uframes_t silence_size;
-	snd_pcm_uframes_t boundary;
-	snd_pcm_uframes_t silence_start;
-	snd_pcm_uframes_t silence_filled;
-	union snd_pcm_sync_id sync;
-	struct snd_pcm_mmap_status *status;
-	struct snd_pcm_mmap_control *control;
-	snd_pcm_uframes_t twake;
-	wait_queue_head_t sleep;
-	wait_queue_head_t tsleep;
-	struct fasync_struct *fasync;
-	bool stop_operating;
-	void *private_data;
-	void (*private_free)(struct snd_pcm_runtime *);
-	struct snd_pcm_hardware hw;
-	struct snd_pcm_hw_constraints hw_constraints;
-	unsigned int timer_resolution;
-	int tstamp_type;
-	unsigned char *dma_area;
-	dma_addr_t dma_addr;
-	size_t dma_bytes;
-	struct snd_dma_buffer *dma_buffer_p;
-	unsigned int buffer_changed: 1;
-	struct snd_pcm_audio_tstamp_config audio_tstamp_config;
-	struct snd_pcm_audio_tstamp_report audio_tstamp_report;
-	struct timespec driver_tstamp;
-};
-
-struct snd_pcm_str {
-	int stream;
-	struct snd_pcm *pcm;
-	unsigned int substream_count;
-	unsigned int substream_opened;
-	struct snd_pcm_substream *substream;
-	struct snd_info_entry *proc_root;
-	struct snd_kcontrol *chmap_kctl;
-	struct device dev;
-};
-
-struct snd_pcm {
-	struct snd_card *card;
-	struct list_head list;
-	int device;
-	unsigned int info_flags;
-	short unsigned int dev_class;
-	short unsigned int dev_subclass;
-	char id[64];
-	char name[80];
-	struct snd_pcm_str streams[2];
-	struct mutex open_mutex;
-	wait_queue_head_t open_wait;
-	void *private_data;
-	void (*private_free)(struct snd_pcm *);
-	bool internal;
-	bool nonatomic;
-	bool no_device_suspend;
-};
-
-struct snd_pcm_chmap_elem {
-	unsigned char channels;
-	unsigned char map[15];
-};
-
-enum {
-	SNDRV_PCM_MMAP_OFFSET_DATA = 0,
-	SNDRV_PCM_MMAP_OFFSET_STATUS = 2147483648,
-	SNDRV_PCM_MMAP_OFFSET_CONTROL = 2164260864,
-};
-
-typedef int snd_pcm_hw_param_t;
-
-struct snd_pcm_sw_params {
-	int tstamp_mode;
-	unsigned int period_step;
-	unsigned int sleep_min;
-	snd_pcm_uframes_t avail_min;
-	snd_pcm_uframes_t xfer_align;
-	snd_pcm_uframes_t start_threshold;
-	snd_pcm_uframes_t stop_threshold;
-	snd_pcm_uframes_t silence_threshold;
-	snd_pcm_uframes_t silence_size;
-	snd_pcm_uframes_t boundary;
-	unsigned int proto;
-	unsigned int tstamp_type;
-	unsigned char reserved[56];
-};
-
-struct snd_pcm_channel_info {
-	unsigned int channel;
-	__kernel_off_t offset;
-	unsigned int first;
-	unsigned int step;
-};
-
-enum {
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5,
-	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = 5,
-};
-
-struct snd_pcm_sync_ptr {
-	unsigned int flags;
-	union {
-		struct snd_pcm_mmap_status status;
-		unsigned char reserved[64];
-	} s;
-	union {
-		struct snd_pcm_mmap_control control;
-		unsigned char reserved[64];
-	} c;
-};
-
-struct snd_xferi {
-	snd_pcm_sframes_t result;
-	void *buf;
-	snd_pcm_uframes_t frames;
-};
-
-struct snd_xfern {
-	snd_pcm_sframes_t result;
-	void **bufs;
-	snd_pcm_uframes_t frames;
-};
-
-enum {
-	SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,
-	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC = 1,
-	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW = 2,
-	SNDRV_PCM_TSTAMP_TYPE_LAST = 2,
-};
-
-struct snd_pcm_file {
-	struct snd_pcm_substream *substream;
-	int no_compat_mmap;
-	unsigned int user_pversion;
-};
-
-struct snd_pcm_hw_params_old {
-	unsigned int flags;
-	unsigned int masks[3];
-	struct snd_interval intervals[12];
-	unsigned int rmask;
-	unsigned int cmask;
-	unsigned int info;
-	unsigned int msbits;
-	unsigned int rate_num;
-	unsigned int rate_den;
-	snd_pcm_uframes_t fifo_size;
-	unsigned char reserved[64];
-};
-
-struct action_ops {
-	int (*pre_action)(struct snd_pcm_substream *, int);
-	int (*do_action)(struct snd_pcm_substream *, int);
-	void (*undo_action)(struct snd_pcm_substream *, int);
-	void (*post_action)(struct snd_pcm_substream *, int);
-};
-
-struct snd_pcm_hw_params32 {
-	u32 flags;
-	struct snd_mask masks[3];
-	struct snd_mask mres[5];
-	struct snd_interval intervals[12];
-	struct snd_interval ires[9];
-	u32 rmask;
-	u32 cmask;
-	u32 info;
-	u32 msbits;
-	u32 rate_num;
-	u32 rate_den;
-	u32 fifo_size;
-	unsigned char reserved[64];
-};
-
-struct snd_pcm_sw_params32 {
-	s32 tstamp_mode;
-	u32 period_step;
-	u32 sleep_min;
-	u32 avail_min;
-	u32 xfer_align;
-	u32 start_threshold;
-	u32 stop_threshold;
-	u32 silence_threshold;
-	u32 silence_size;
-	u32 boundary;
-	u32 proto;
-	u32 tstamp_type;
-	unsigned char reserved[56];
-};
-
-struct snd_pcm_channel_info32 {
-	u32 channel;
-	u32 offset;
-	u32 first;
-	u32 step;
-};
-
-struct snd_pcm_status32 {
-	s32 state;
-	struct old_timespec32 trigger_tstamp;
-	struct old_timespec32 tstamp;
-	u32 appl_ptr;
-	u32 hw_ptr;
-	s32 delay;
-	u32 avail;
-	u32 avail_max;
-	u32 overrange;
-	s32 suspended_state;
-	u32 audio_tstamp_data;
-	struct old_timespec32 audio_tstamp;
-	struct old_timespec32 driver_tstamp;
-	u32 audio_tstamp_accuracy;
-	unsigned char reserved[36];
-};
-
-struct snd_xferi32 {
-	s32 result;
-	u32 buf;
-	u32 frames;
-};
-
-struct snd_xfern32 {
-	s32 result;
-	u32 bufs;
-	u32 frames;
-};
-
-struct snd_pcm_mmap_status32 {
-	s32 state;
-	s32 pad1;
-	u32 hw_ptr;
-	struct old_timespec32 tstamp;
-	s32 suspended_state;
-	struct old_timespec32 audio_tstamp;
-};
-
-struct snd_pcm_mmap_control32 {
-	u32 appl_ptr;
-	u32 avail_min;
-};
-
-struct snd_pcm_sync_ptr32 {
-	u32 flags;
-	union {
-		struct snd_pcm_mmap_status32 status;
-		unsigned char reserved[64];
-	} s;
-	union {
-		struct snd_pcm_mmap_control32 control;
-		unsigned char reserved[64];
-	} c;
-};
-
-enum {
-	SNDRV_PCM_IOCTL_HW_REFINE32 = 3260825872,
-	SNDRV_PCM_IOCTL_HW_PARAMS32 = 3260825873,
-	SNDRV_PCM_IOCTL_SW_PARAMS32 = 3228057875,
-	SNDRV_PCM_IOCTL_STATUS32 = 2154578208,
-	SNDRV_PCM_IOCTL_STATUS_EXT32 = 3228320036,
-	SNDRV_PCM_IOCTL_DELAY32 = 2147762465,
-	SNDRV_PCM_IOCTL_CHANNEL_INFO32 = 2148548914,
-	SNDRV_PCM_IOCTL_REWIND32 = 1074020678,
-	SNDRV_PCM_IOCTL_FORWARD32 = 1074020681,
-	SNDRV_PCM_IOCTL_WRITEI_FRAMES32 = 1074544976,
-	SNDRV_PCM_IOCTL_READI_FRAMES32 = 2148286801,
-	SNDRV_PCM_IOCTL_WRITEN_FRAMES32 = 1074544978,
-	SNDRV_PCM_IOCTL_READN_FRAMES32 = 2148286803,
-	SNDRV_PCM_IOCTL_SYNC_PTR32 = 3229892899,
-};
-
-enum {
-	SNDRV_CHMAP_UNKNOWN = 0,
-	SNDRV_CHMAP_NA = 1,
-	SNDRV_CHMAP_MONO = 2,
-	SNDRV_CHMAP_FL = 3,
-	SNDRV_CHMAP_FR = 4,
-	SNDRV_CHMAP_RL = 5,
-	SNDRV_CHMAP_RR = 6,
-	SNDRV_CHMAP_FC = 7,
-	SNDRV_CHMAP_LFE = 8,
-	SNDRV_CHMAP_SL = 9,
-	SNDRV_CHMAP_SR = 10,
-	SNDRV_CHMAP_RC = 11,
-	SNDRV_CHMAP_FLC = 12,
-	SNDRV_CHMAP_FRC = 13,
-	SNDRV_CHMAP_RLC = 14,
-	SNDRV_CHMAP_RRC = 15,
-	SNDRV_CHMAP_FLW = 16,
-	SNDRV_CHMAP_FRW = 17,
-	SNDRV_CHMAP_FLH = 18,
-	SNDRV_CHMAP_FCH = 19,
-	SNDRV_CHMAP_FRH = 20,
-	SNDRV_CHMAP_TC = 21,
-	SNDRV_CHMAP_TFL = 22,
-	SNDRV_CHMAP_TFR = 23,
-	SNDRV_CHMAP_TFC = 24,
-	SNDRV_CHMAP_TRL = 25,
-	SNDRV_CHMAP_TRR = 26,
-	SNDRV_CHMAP_TRC = 27,
-	SNDRV_CHMAP_TFLC = 28,
-	SNDRV_CHMAP_TFRC = 29,
-	SNDRV_CHMAP_TSL = 30,
-	SNDRV_CHMAP_TSR = 31,
-	SNDRV_CHMAP_LLFE = 32,
-	SNDRV_CHMAP_RLFE = 33,
-	SNDRV_CHMAP_BC = 34,
-	SNDRV_CHMAP_BLC = 35,
-	SNDRV_CHMAP_BRC = 36,
-	SNDRV_CHMAP_LAST = 36,
-};
-
-struct snd_ratnum {
-	unsigned int num;
-	unsigned int den_min;
-	unsigned int den_max;
-	unsigned int den_step;
-};
-
-struct snd_ratden {
-	unsigned int num_min;
-	unsigned int num_max;
-	unsigned int num_step;
-	unsigned int den;
-};
-
-struct snd_pcm_hw_constraint_ratnums {
-	int nrats;
-	const struct snd_ratnum *rats;
-};
-
-struct snd_pcm_hw_constraint_ratdens {
-	int nrats;
-	const struct snd_ratden *rats;
-};
-
-struct snd_pcm_hw_constraint_ranges {
-	unsigned int count;
-	const struct snd_interval *ranges;
-	unsigned int mask;
-};
-
-struct snd_pcm_chmap {
-	struct snd_pcm *pcm;
-	int stream;
-	struct snd_kcontrol *kctl;
-	const struct snd_pcm_chmap_elem *chmap;
-	unsigned int max_channels;
-	unsigned int channel_mask;
-	void *private_data;
-};
-
-typedef int (*pcm_transfer_f)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);
-
-typedef int (*pcm_copy_f)(struct snd_pcm_substream *, snd_pcm_uframes_t, void *, snd_pcm_uframes_t, snd_pcm_uframes_t, pcm_transfer_f);
-
-struct pcm_format_data {
-	unsigned char width;
-	unsigned char phys;
-	signed char le;
-	signed char signd;
-	unsigned char silence[8];
-};
-
-struct snd_sg_page {
-	void *buf;
-	dma_addr_t addr;
-};
-
-struct snd_sg_buf {
-	int size;
-	int pages;
-	int tblsize;
-	struct snd_sg_page *table;
-	struct page **page_table;
-	struct device *dev;
-};
-
-struct snd_seq_device {
-	struct snd_card *card;
-	int device;
-	const char *id;
-	char name[80];
-	int argsize;
-	void *driver_data;
-	void *private_data;
-	void (*private_free)(struct snd_seq_device *);
-	struct device dev;
-};
-
-struct snd_seq_driver {
-	struct device_driver driver;
-	char *id;
-	int argsize;
-};
-
-typedef atomic_t snd_use_lock_t;
-
-typedef unsigned char snd_seq_event_type_t;
-
-struct snd_seq_addr {
-	unsigned char client;
-	unsigned char port;
-};
-
-struct snd_seq_connect {
-	struct snd_seq_addr sender;
-	struct snd_seq_addr dest;
-};
-
-struct snd_seq_ev_note {
-	unsigned char channel;
-	unsigned char note;
-	unsigned char velocity;
-	unsigned char off_velocity;
-	unsigned int duration;
-};
-
-struct snd_seq_ev_ctrl {
-	unsigned char channel;
-	unsigned char unused1;
-	unsigned char unused2;
-	unsigned char unused3;
-	unsigned int param;
-	int value;
-};
-
-struct snd_seq_ev_raw8 {
-	unsigned char d[12];
-};
-
-struct snd_seq_ev_raw32 {
-	unsigned int d[3];
-};
-
-struct snd_seq_ev_ext {
-	unsigned int len;
-	void *ptr;
-} __attribute__((packed));
-
-struct snd_seq_result {
-	int event;
-	int result;
-};
-
-struct snd_seq_real_time {
-	unsigned int tv_sec;
-	unsigned int tv_nsec;
-};
-
-typedef unsigned int snd_seq_tick_time_t;
-
-union snd_seq_timestamp {
-	snd_seq_tick_time_t tick;
-	struct snd_seq_real_time time;
-};
-
-struct snd_seq_queue_skew {
-	unsigned int value;
-	unsigned int base;
-};
-
-struct snd_seq_ev_queue_control {
-	unsigned char queue;
-	unsigned char pad[3];
-	union {
-		int value;
-		union snd_seq_timestamp time;
-		unsigned int position;
-		struct snd_seq_queue_skew skew;
-		unsigned int d32[2];
-		unsigned char d8[8];
-	} param;
-};
-
-struct snd_seq_event;
-
-struct snd_seq_ev_quote {
-	struct snd_seq_addr origin;
-	short unsigned int value;
-	struct snd_seq_event *event;
-} __attribute__((packed));
-
-struct snd_seq_event {
-	snd_seq_event_type_t type;
-	unsigned char flags;
-	char tag;
-	unsigned char queue;
-	union snd_seq_timestamp time;
-	struct snd_seq_addr source;
-	struct snd_seq_addr dest;
-	union {
-		struct snd_seq_ev_note note;
-		struct snd_seq_ev_ctrl control;
-		struct snd_seq_ev_raw8 raw8;
-		struct snd_seq_ev_raw32 raw32;
-		struct snd_seq_ev_ext ext;
-		struct snd_seq_ev_queue_control queue;
-		union snd_seq_timestamp time;
-		struct snd_seq_addr addr;
-		struct snd_seq_connect connect;
-		struct snd_seq_result result;
-		struct snd_seq_ev_quote quote;
-	} data;
-} __attribute__((packed));
-
-struct snd_seq_system_info {
-	int queues;
-	int clients;
-	int ports;
-	int channels;
-	int cur_clients;
-	int cur_queues;
-	char reserved[24];
-};
-
-struct snd_seq_running_info {
-	unsigned char client;
-	unsigned char big_endian;
-	unsigned char cpu_mode;
-	unsigned char pad;
-	unsigned char reserved[12];
-};
-
-typedef int snd_seq_client_type_t;
-
-struct snd_seq_client_info {
-	int client;
-	snd_seq_client_type_t type;
-	char name[64];
-	unsigned int filter;
-	unsigned char multicast_filter[8];
-	unsigned char event_filter[32];
-	int num_ports;
-	int event_lost;
-	int card;
-	int pid;
-	char reserved[56];
-};
-
-struct snd_seq_client_pool {
-	int client;
-	int output_pool;
-	int input_pool;
-	int output_room;
-	int output_free;
-	int input_free;
-	char reserved[64];
-};
-
-struct snd_seq_remove_events {
-	unsigned int remove_mode;
-	union snd_seq_timestamp time;
-	unsigned char queue;
-	struct snd_seq_addr dest;
-	unsigned char channel;
-	int type;
-	char tag;
-	int reserved[10];
-};
-
-struct snd_seq_port_info {
-	struct snd_seq_addr addr;
-	char name[64];
-	unsigned int capability;
-	unsigned int type;
-	int midi_channels;
-	int midi_voices;
-	int synth_voices;
-	int read_use;
-	int write_use;
-	void *kernel;
-	unsigned int flags;
-	unsigned char time_queue;
-	char reserved[59];
-};
-
-struct snd_seq_queue_info {
-	int queue;
-	int owner;
-	unsigned int locked: 1;
-	char name[64];
-	unsigned int flags;
-	char reserved[60];
-};
-
-struct snd_seq_queue_status {
-	int queue;
-	int events;
-	snd_seq_tick_time_t tick;
-	struct snd_seq_real_time time;
-	int running;
-	int flags;
-	char reserved[64];
-};
-
-struct snd_seq_queue_tempo {
-	int queue;
-	unsigned int tempo;
-	int ppq;
-	unsigned int skew_value;
-	unsigned int skew_base;
-	char reserved[24];
-};
-
-struct snd_seq_queue_timer {
-	int queue;
-	int type;
-	union {
-		struct {
-			struct snd_timer_id id;
-			unsigned int resolution;
-		} alsa;
-	} u;
-	char reserved[64];
-};
-
-struct snd_seq_queue_client {
-	int queue;
-	int client;
-	int used;
-	char reserved[64];
-};
-
-struct snd_seq_port_subscribe {
-	struct snd_seq_addr sender;
-	struct snd_seq_addr dest;
-	unsigned int voices;
-	unsigned int flags;
-	unsigned char queue;
-	unsigned char pad[3];
-	char reserved[64];
-};
-
-struct snd_seq_query_subs {
-	struct snd_seq_addr root;
-	int type;
-	int index;
-	int num_subs;
-	struct snd_seq_addr addr;
-	unsigned char queue;
-	unsigned int flags;
-	char reserved[64];
-};
-
-typedef struct snd_seq_real_time snd_seq_real_time_t;
-
-struct snd_seq_port_callback {
-	struct module *owner;
-	void *private_data;
-	int (*subscribe)(void *, struct snd_seq_port_subscribe *);
-	int (*unsubscribe)(void *, struct snd_seq_port_subscribe *);
-	int (*use)(void *, struct snd_seq_port_subscribe *);
-	int (*unuse)(void *, struct snd_seq_port_subscribe *);
-	int (*event_input)(struct snd_seq_event *, int, void *, int, int);
-	void (*private_free)(void *);
-};
-
-struct snd_seq_pool;
-
-struct snd_seq_event_cell {
-	struct snd_seq_event event;
-	struct snd_seq_pool *pool;
-	struct snd_seq_event_cell *next;
-};
-
-struct snd_seq_pool {
-	struct snd_seq_event_cell *ptr;
-	struct snd_seq_event_cell *free;
-	int total_elements;
-	atomic_t counter;
-	int size;
-	int room;
-	int closing;
-	int max_used;
-	int event_alloc_nopool;
-	int event_alloc_failures;
-	int event_alloc_success;
-	wait_queue_head_t output_sleep;
-	spinlock_t lock;
-};
-
-struct snd_seq_fifo {
-	struct snd_seq_pool *pool;
-	struct snd_seq_event_cell *head;
-	struct snd_seq_event_cell *tail;
-	int cells;
-	spinlock_t lock;
-	snd_use_lock_t use_lock;
-	wait_queue_head_t input_sleep;
-	atomic_t overflow;
-};
-
-struct snd_seq_subscribers {
-	struct snd_seq_port_subscribe info;
-	struct list_head src_list;
-	struct list_head dest_list;
-	atomic_t ref_count;
-};
-
-struct snd_seq_port_subs_info {
-	struct list_head list_head;
-	unsigned int count;
-	unsigned int exclusive: 1;
-	struct rw_semaphore list_mutex;
-	rwlock_t list_lock;
-	int (*open)(void *, struct snd_seq_port_subscribe *);
-	int (*close)(void *, struct snd_seq_port_subscribe *);
-};
-
-struct snd_seq_client_port {
-	struct snd_seq_addr addr;
-	struct module *owner;
-	char name[64];
-	struct list_head list;
-	snd_use_lock_t use_lock;
-	struct snd_seq_port_subs_info c_src;
-	struct snd_seq_port_subs_info c_dest;
-	int (*event_input)(struct snd_seq_event *, int, void *, int, int);
-	void (*private_free)(void *);
-	void *private_data;
-	unsigned int closing: 1;
-	unsigned int timestamping: 1;
-	unsigned int time_real: 1;
-	int time_queue;
-	unsigned int capability;
-	unsigned int type;
-	int midi_channels;
-	int midi_voices;
-	int synth_voices;
-};
-
-struct snd_seq_user_client {
-	struct file *file;
-	struct pid *owner;
-	struct snd_seq_fifo *fifo;
-	int fifo_pool_size;
-};
-
-struct snd_seq_kernel_client {
-	struct snd_card *card;
-};
-
-struct snd_seq_client {
-	snd_seq_client_type_t type;
-	unsigned int accept_input: 1;
-	unsigned int accept_output: 1;
-	char name[64];
-	int number;
-	unsigned int filter;
-	long unsigned int event_filter[4];
-	snd_use_lock_t use_lock;
-	int event_lost;
-	int num_ports;
-	struct list_head ports_list_head;
-	rwlock_t ports_lock;
-	struct mutex ports_mutex;
-	struct mutex ioctl_mutex;
-	int convert32;
-	struct snd_seq_pool *pool;
-	union {
-		struct snd_seq_user_client user;
-		struct snd_seq_kernel_client kernel;
-	} data;
-};
-
-struct snd_seq_usage {
-	int cur;
-	int peak;
-};
-
-struct snd_seq_prioq {
-	struct snd_seq_event_cell *head;
-	struct snd_seq_event_cell *tail;
-	int cells;
-	spinlock_t lock;
-};
-
-struct snd_seq_timer_tick {
-	snd_seq_tick_time_t cur_tick;
-	long unsigned int resolution;
-	long unsigned int fraction;
-};
-
-struct snd_seq_timer {
-	unsigned int running: 1;
-	unsigned int initialized: 1;
-	unsigned int tempo;
-	int ppq;
-	snd_seq_real_time_t cur_time;
-	struct snd_seq_timer_tick tick;
-	int tick_updated;
-	int type;
-	struct snd_timer_id alsa_id;
-	struct snd_timer_instance *timeri;
-	unsigned int ticks;
-	long unsigned int preferred_resolution;
-	unsigned int skew;
-	unsigned int skew_base;
-	struct timespec64 last_update;
-	spinlock_t lock;
-};
-
-struct snd_seq_queue {
-	int queue;
-	char name[64];
-	struct snd_seq_prioq *tickq;
-	struct snd_seq_prioq *timeq;
-	struct snd_seq_timer *timer;
-	int owner;
-	unsigned int locked: 1;
-	unsigned int klocked: 1;
-	unsigned int check_again: 1;
-	unsigned int check_blocked: 1;
-	unsigned int flags;
-	unsigned int info_flags;
-	spinlock_t owner_lock;
-	spinlock_t check_lock;
-	long unsigned int clients_bitmap[3];
-	unsigned int clients;
-	struct mutex timer_mutex;
-	snd_use_lock_t use_lock;
-};
-
-struct ioctl_handler {
-	unsigned int cmd;
-	int (*func)(struct snd_seq_client *, void *);
-};
-
-struct snd_seq_port_info32 {
-	struct snd_seq_addr addr;
-	char name[64];
-	u32 capability;
-	u32 type;
-	s32 midi_channels;
-	s32 midi_voices;
-	s32 synth_voices;
-	s32 read_use;
-	s32 write_use;
-	u32 kernel;
-	u32 flags;
-	unsigned char time_queue;
-	char reserved[59];
-};
-
-enum {
-	SNDRV_SEQ_IOCTL_CREATE_PORT32 = 3231994656,
-	SNDRV_SEQ_IOCTL_DELETE_PORT32 = 1084511009,
-	SNDRV_SEQ_IOCTL_GET_PORT_INFO32 = 3231994658,
-	SNDRV_SEQ_IOCTL_SET_PORT_INFO32 = 1084511011,
-	SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT32 = 3231994706,
-};
-
-typedef int (*snd_seq_dump_func_t)(void *, void *, int);
-
-struct snd_seq_dummy_port {
-	int client;
-	int port;
-	int duplex;
-	int connect;
-};
-
-struct hda_device_id {
-	__u32 vendor_id;
-	__u32 rev_id;
-	__u8 api_version;
-	const char *name;
-	long unsigned int driver_data;
-};
-
-typedef u16 hda_nid_t;
-
-struct snd_array {
-	unsigned int used;
-	unsigned int alloced;
-	unsigned int elem_size;
-	unsigned int alloc_align;
-	void *list;
-};
-
-struct regmap___2;
-
-struct hdac_bus;
-
-struct hdac_widget_tree;
-
-struct hdac_device {
-	struct device dev;
-	int type;
-	struct hdac_bus *bus;
-	unsigned int addr;
-	struct list_head list;
-	hda_nid_t afg;
-	hda_nid_t mfg;
-	unsigned int vendor_id;
-	unsigned int subsystem_id;
-	unsigned int revision_id;
-	unsigned int afg_function_id;
-	unsigned int mfg_function_id;
-	unsigned int afg_unsol: 1;
-	unsigned int mfg_unsol: 1;
-	unsigned int power_caps;
-	const char *vendor_name;
-	const char *chip_name;
-	int (*exec_verb)(struct hdac_device *, unsigned int, unsigned int, unsigned int *);
-	unsigned int num_nodes;
-	hda_nid_t start_nid;
-	hda_nid_t end_nid;
-	atomic_t in_pm;
-	struct mutex widget_lock;
-	struct hdac_widget_tree *widgets;
-	struct regmap___2 *regmap;
-	struct snd_array vendor_verbs;
-	bool lazy_cache: 1;
-	bool caps_overwriting: 1;
-	bool cache_coef: 1;
-};
-
-struct hdac_rb {
-	__le32 *buf;
-	dma_addr_t addr;
-	short unsigned int rp;
-	short unsigned int wp;
-	int cmds[8];
-	u32 res[8];
-};
-
-struct hdac_bus_ops;
-
-struct hdac_ext_bus_ops;
-
-struct hdac_bus {
-	struct device *dev;
-	const struct hdac_bus_ops *ops;
-	const struct hdac_ext_bus_ops *ext_ops;
-	long unsigned int addr;
-	void *remap_addr;
-	int irq;
-	void *ppcap;
-	void *spbcap;
-	void *mlcap;
-	void *gtscap;
-	void *drsmcap;
-	struct list_head codec_list;
-	unsigned int num_codecs;
-	struct hdac_device *caddr_tbl[16];
-	u32 unsol_queue[128];
-	unsigned int unsol_rp;
-	unsigned int unsol_wp;
-	struct work_struct unsol_work;
-	long unsigned int codec_mask;
-	long unsigned int codec_powered;
-	struct hdac_rb corb;
-	struct hdac_rb rirb;
-	unsigned int last_cmd[8];
-	struct snd_dma_buffer rb;
-	struct snd_dma_buffer posbuf;
-	int dma_type;
-	struct list_head stream_list;
-	bool chip_init: 1;
-	bool sync_write: 1;
-	bool use_posbuf: 1;
-	bool snoop: 1;
-	bool align_bdle_4k: 1;
-	bool reverse_assign: 1;
-	bool corbrp_self_clear: 1;
-	bool polling_mode: 1;
-	int poll_count;
-	int bdl_pos_adj;
-	spinlock_t reg_lock;
-	struct mutex cmd_mutex;
-	struct mutex lock;
-	struct drm_audio_component *audio_component;
-	long int display_power_status;
-	long unsigned int display_power_active;
-	int num_streams;
-	int idx;
-	struct list_head hlink_list;
-	bool cmd_dma_state;
-};
-
-enum {
-	HDA_DEV_CORE = 0,
-	HDA_DEV_LEGACY = 1,
-	HDA_DEV_ASOC = 2,
-};
-
-struct hdac_driver {
-	struct device_driver driver;
-	int type;
-	const struct hda_device_id *id_table;
-	int (*match)(struct hdac_device *, struct hdac_driver *);
-	void (*unsol_event)(struct hdac_device *, unsigned int);
-	int (*probe)(struct hdac_device *);
-	int (*remove)(struct hdac_device *);
-	void (*shutdown)(struct hdac_device *);
-};
-
-struct hdac_bus_ops {
-	int (*command)(struct hdac_bus *, unsigned int);
-	int (*get_response)(struct hdac_bus *, unsigned int, unsigned int *);
-};
-
-struct hdac_ext_bus_ops {
-	int (*hdev_attach)(struct hdac_device *);
-	int (*hdev_detach)(struct hdac_device *);
-};
-
-struct hda_bus {
-	struct hdac_bus core;
-	struct snd_card *card;
-	struct pci_dev *pci;
-	const char *modelname;
-	struct mutex prepare_mutex;
-	long unsigned int pcm_dev_bits[1];
-	unsigned int needs_damn_long_delay: 1;
-	unsigned int allow_bus_reset: 1;
-	unsigned int shutdown: 1;
-	unsigned int response_reset: 1;
-	unsigned int in_reset: 1;
-	unsigned int no_response_fallback: 1;
-	unsigned int bus_probing: 1;
-	unsigned int keep_power: 1;
-	int primary_dig_out_type;
-	unsigned int mixer_assigned;
-};
-
-struct hda_codec;
-
-typedef int (*hda_codec_patch_t)(struct hda_codec *);
-
-struct hda_codec_ops {
-	int (*build_controls)(struct hda_codec *);
-	int (*build_pcms)(struct hda_codec *);
-	int (*init)(struct hda_codec *);
-	void (*free)(struct hda_codec *);
-	void (*unsol_event)(struct hda_codec *, unsigned int);
-	void (*set_power_state)(struct hda_codec *, hda_nid_t, unsigned int);
-	int (*suspend)(struct hda_codec *);
-	int (*resume)(struct hda_codec *);
-	int (*check_power_status)(struct hda_codec *, hda_nid_t);
-	void (*reboot_notify)(struct hda_codec *);
-	void (*stream_pm)(struct hda_codec *, hda_nid_t, bool);
-};
-
-struct hda_beep;
-
-struct hda_fixup;
-
-struct hda_codec {
-	struct hdac_device core;
-	struct hda_bus *bus;
-	struct snd_card *card;
-	unsigned int addr;
-	u32 probe_id;
-	const struct hda_device_id *preset;
-	const char *modelname;
-	struct hda_codec_ops patch_ops;
-	struct list_head pcm_list_head;
-	void *spec;
-	struct hda_beep *beep;
-	unsigned int beep_mode;
-	u32 *wcaps;
-	struct snd_array mixers;
-	struct snd_array nids;
-	struct list_head conn_list;
-	struct mutex spdif_mutex;
-	struct mutex control_mutex;
-	struct snd_array spdif_out;
-	unsigned int spdif_in_enable;
-	const hda_nid_t *slave_dig_outs;
-	struct snd_array init_pins;
-	struct snd_array driver_pins;
-	struct snd_array cvt_setups;
-	struct mutex user_mutex;
-	struct snd_hwdep *hwdep;
-	unsigned int in_freeing: 1;
-	unsigned int registered: 1;
-	unsigned int display_power_control: 1;
-	unsigned int spdif_status_reset: 1;
-	unsigned int pin_amp_workaround: 1;
-	unsigned int single_adc_amp: 1;
-	unsigned int no_sticky_stream: 1;
-	unsigned int pins_shutup: 1;
-	unsigned int no_trigger_sense: 1;
-	unsigned int no_jack_detect: 1;
-	unsigned int inv_eapd: 1;
-	unsigned int inv_jack_detect: 1;
-	unsigned int pcm_format_first: 1;
-	unsigned int cached_write: 1;
-	unsigned int dp_mst: 1;
-	unsigned int dump_coef: 1;
-	unsigned int power_save_node: 1;
-	unsigned int auto_runtime_pm: 1;
-	unsigned int force_pin_prefix: 1;
-	unsigned int link_down_at_suspend: 1;
-	unsigned int relaxed_resume: 1;
-	unsigned int mst_no_extra_pcms: 1;
-	long unsigned int power_on_acct;
-	long unsigned int power_off_acct;
-	long unsigned int power_jiffies;
-	unsigned int (*power_filter)(struct hda_codec *, hda_nid_t, unsigned int);
-	void (*proc_widget_hook)(struct snd_info_buffer *, struct hda_codec *, hda_nid_t);
-	struct snd_array jacktbl;
-	long unsigned int jackpoll_interval;
-	struct delayed_work jackpoll_work;
-	int depop_delay;
-	int fixup_id;
-	const struct hda_fixup *fixup_list;
-	const char *fixup_name;
-	struct snd_array verbs;
-};
-
-struct hda_codec_driver {
-	struct hdac_driver core;
-	const struct hda_device_id *id;
-};
-
-struct hda_pintbl;
-
-struct hda_verb;
-
-struct hda_fixup {
-	int type;
-	bool chained: 1;
-	bool chained_before: 1;
-	int chain_id;
-	union {
-		const struct hda_pintbl *pins;
-		const struct hda_verb *verbs;
-		void (*func)(struct hda_codec *, const struct hda_fixup *, int);
-	} v;
-};
-
-struct hda_verb {
-	hda_nid_t nid;
-	u32 verb;
-	u32 param;
-};
-
-struct hda_pintbl {
-	hda_nid_t nid;
-	u32 val;
-};
-
-enum {
-	AC_WID_AUD_OUT = 0,
-	AC_WID_AUD_IN = 1,
-	AC_WID_AUD_MIX = 2,
-	AC_WID_AUD_SEL = 3,
-	AC_WID_PIN = 4,
-	AC_WID_POWER = 5,
-	AC_WID_VOL_KNB = 6,
-	AC_WID_BEEP = 7,
-	AC_WID_VENDOR = 15,
-};
-
-enum {
-	HDA_INPUT = 0,
-	HDA_OUTPUT = 1,
-};
-
-struct hda_pcm_stream;
-
-struct hda_pcm_ops {
-	int (*open)(struct hda_pcm_stream *, struct hda_codec *, struct snd_pcm_substream *);
-	int (*close)(struct hda_pcm_stream *, struct hda_codec *, struct snd_pcm_substream *);
-	int (*prepare)(struct hda_pcm_stream *, struct hda_codec *, unsigned int, unsigned int, struct snd_pcm_substream *);
-	int (*cleanup)(struct hda_pcm_stream *, struct hda_codec *, struct snd_pcm_substream *);
-	unsigned int (*get_delay)(struct hda_pcm_stream *, struct hda_codec *, struct snd_pcm_substream *);
-};
-
-struct hda_pcm_stream {
-	unsigned int substreams;
-	unsigned int channels_min;
-	unsigned int channels_max;
-	hda_nid_t nid;
-	u32 rates;
-	u64 formats;
-	unsigned int maxbps;
-	const struct snd_pcm_chmap_elem *chmap;
-	struct hda_pcm_ops ops;
-};
-
-enum {
-	HDA_PCM_TYPE_AUDIO = 0,
-	HDA_PCM_TYPE_SPDIF = 1,
-	HDA_PCM_TYPE_HDMI = 2,
-	HDA_PCM_TYPE_MODEM = 3,
-	HDA_PCM_NTYPES = 4,
-};
-
-struct hda_pcm {
-	char *name;
-	struct hda_pcm_stream stream[2];
-	unsigned int pcm_type;
-	int device;
-	struct snd_pcm *pcm;
-	bool own_chmap;
-	struct hda_codec *codec;
-	struct kref kref;
-	struct list_head list;
-};
-
-struct hda_beep {
-	struct input_dev *dev;
-	struct hda_codec *codec;
-	char phys[32];
-	int tone;
-	hda_nid_t nid;
-	unsigned int registered: 1;
-	unsigned int enabled: 1;
-	unsigned int linear_tone: 1;
-	unsigned int playing: 1;
-	struct work_struct beep_work;
-	struct mutex mutex;
-	void (*power_hook)(struct hda_beep *, bool);
-};
-
-struct hda_pincfg {
-	hda_nid_t nid;
-	unsigned char ctrl;
-	unsigned char target;
-	unsigned int cfg;
-};
-
-struct hda_spdif_out {
-	hda_nid_t nid;
-	unsigned int status;
-	short unsigned int ctls;
-};
-
-enum {
-	HDA_VMUTE_OFF = 0,
-	HDA_VMUTE_ON = 1,
-	HDA_VMUTE_FOLLOW_MASTER = 2,
-};
-
-struct hda_vmaster_mute_hook {
-	struct snd_kcontrol *sw_kctl;
-	void (*hook)(void *, int);
-	unsigned int mute_mode;
-	struct hda_codec *codec;
-};
-
-struct hda_input_mux_item {
-	char label[32];
-	unsigned int index;
-};
-
-struct hda_input_mux {
-	unsigned int num_items;
-	struct hda_input_mux_item items[16];
-};
-
-enum {
-	HDA_FRONT = 0,
-	HDA_REAR = 1,
-	HDA_CLFE = 2,
-	HDA_SIDE = 3,
-};
-
-enum {
-	HDA_DIG_NONE = 0,
-	HDA_DIG_EXCLUSIVE = 1,
-	HDA_DIG_ANALOG_DUP = 2,
-};
-
-struct hda_multi_out {
-	int num_dacs;
-	const hda_nid_t *dac_nids;
-	hda_nid_t hp_nid;
-	hda_nid_t hp_out_nid[5];
-	hda_nid_t extra_out_nid[5];
-	hda_nid_t dig_out_nid;
-	const hda_nid_t *slave_dig_outs;
-	int max_channels;
-	int dig_out_used;
-	int no_share_stream;
-	int share_spdif;
-	unsigned int analog_rates;
-	unsigned int analog_maxbps;
-	u64 analog_formats;
-	unsigned int spdif_rates;
-	unsigned int spdif_maxbps;
-	u64 spdif_formats;
-};
-
-struct hda_nid_item {
-	struct snd_kcontrol *kctl;
-	unsigned int index;
-	hda_nid_t nid;
-	short unsigned int flags;
-};
-
-struct hda_amp_list {
-	hda_nid_t nid;
-	unsigned char dir;
-	unsigned char idx;
-};
-
-struct hda_loopback_check {
-	const struct hda_amp_list *amplist;
-	int power_on;
-};
-
-struct hda_conn_list {
-	struct list_head list;
-	int len;
-	hda_nid_t nid;
-	hda_nid_t conns[0];
-};
-
-struct hda_cvt_setup {
-	hda_nid_t nid;
-	u8 stream_tag;
-	u8 channel_id;
-	u16 format_id;
-	unsigned char active;
-	unsigned char dirty;
-};
-
-typedef int (*map_slave_func_t)(struct hda_codec *, void *, struct snd_kcontrol *);
-
-struct slave_init_arg {
-	struct hda_codec *codec;
-	int step;
-};
-
-enum {
-	AC_JACK_LINE_OUT = 0,
-	AC_JACK_SPEAKER = 1,
-	AC_JACK_HP_OUT = 2,
-	AC_JACK_CD = 3,
-	AC_JACK_SPDIF_OUT = 4,
-	AC_JACK_DIG_OTHER_OUT = 5,
-	AC_JACK_MODEM_LINE_SIDE = 6,
-	AC_JACK_MODEM_HAND_SIDE = 7,
-	AC_JACK_LINE_IN = 8,
-	AC_JACK_AUX = 9,
-	AC_JACK_MIC_IN = 10,
-	AC_JACK_TELEPHONY = 11,
-	AC_JACK_SPDIF_IN = 12,
-	AC_JACK_DIG_OTHER_IN = 13,
-	AC_JACK_OTHER = 15,
-};
-
-enum {
-	AC_JACK_PORT_COMPLEX = 0,
-	AC_JACK_PORT_NONE = 1,
-	AC_JACK_PORT_FIXED = 2,
-	AC_JACK_PORT_BOTH = 3,
-};
-
-enum {
-	AUTO_PIN_LINE_OUT = 0,
-	AUTO_PIN_SPEAKER_OUT = 1,
-	AUTO_PIN_HP_OUT = 2,
-};
-
-struct auto_pin_cfg_item {
-	hda_nid_t pin;
-	int type;
-	unsigned int is_headset_mic: 1;
-	unsigned int is_headphone_mic: 1;
-	unsigned int has_boost_on_pin: 1;
-};
-
-struct auto_pin_cfg {
-	int line_outs;
-	hda_nid_t line_out_pins[5];
-	int speaker_outs;
-	hda_nid_t speaker_pins[5];
-	int hp_outs;
-	int line_out_type;
-	hda_nid_t hp_pins[5];
-	int num_inputs;
-	struct auto_pin_cfg_item inputs[8];
-	int dig_outs;
-	hda_nid_t dig_out_pins[2];
-	hda_nid_t dig_in_pin;
-	hda_nid_t mono_out_pin;
-	int dig_out_type[2];
-	int dig_in_type;
-};
-
-struct hda_jack_callback;
-
-typedef void (*hda_jack_callback_fn)(struct hda_codec *, struct hda_jack_callback *);
-
-struct hda_jack_tbl;
-
-struct hda_jack_callback {
-	hda_nid_t nid;
-	int dev_id;
-	hda_jack_callback_fn func;
-	unsigned int private_data;
-	unsigned int unsol_res;
-	struct hda_jack_tbl *jack;
-	struct hda_jack_callback *next;
-};
-
-struct hda_jack_tbl {
-	hda_nid_t nid;
-	int dev_id;
-	unsigned char tag;
-	struct hda_jack_callback *callback;
-	unsigned int pin_sense;
-	unsigned int jack_detect: 1;
-	unsigned int jack_dirty: 1;
-	unsigned int phantom_jack: 1;
-	unsigned int block_report: 1;
-	hda_nid_t gating_jack;
-	hda_nid_t gated_jack;
-	int type;
-	int button_state;
-	struct snd_jack *jack;
-};
-
-struct hda_jack_keymap {
-	enum snd_jack_types type;
-	int key;
-};
-
-enum {
-	HDA_JACK_NOT_PRESENT = 0,
-	HDA_JACK_PRESENT = 1,
-	HDA_JACK_PHANTOM = 2,
-};
-
-enum {
-	AC_JACK_LOC_NONE = 0,
-	AC_JACK_LOC_REAR = 1,
-	AC_JACK_LOC_FRONT = 2,
-	AC_JACK_LOC_LEFT = 3,
-	AC_JACK_LOC_RIGHT = 4,
-	AC_JACK_LOC_TOP = 5,
-	AC_JACK_LOC_BOTTOM = 6,
-};
-
-enum {
-	AC_JACK_LOC_EXTERNAL = 0,
-	AC_JACK_LOC_INTERNAL = 16,
-	AC_JACK_LOC_SEPARATE = 32,
-	AC_JACK_LOC_OTHER = 48,
-};
-
-enum {
-	AC_JACK_LOC_REAR_PANEL = 7,
-	AC_JACK_LOC_DRIVE_BAY = 8,
-	AC_JACK_LOC_RISER = 23,
-	AC_JACK_LOC_HDMI = 24,
-	AC_JACK_LOC_ATAPI = 25,
-	AC_JACK_LOC_MOBILE_IN = 55,
-	AC_JACK_LOC_MOBILE_OUT = 56,
-};
-
-struct hda_model_fixup {
-	const int id;
-	const char *name;
-};
-
-struct snd_hda_pin_quirk {
-	unsigned int codec;
-	short unsigned int subvendor;
-	const struct hda_pintbl *pins;
-	int value;
-};
-
-enum {
-	HDA_FIXUP_INVALID = 0,
-	HDA_FIXUP_PINS = 1,
-	HDA_FIXUP_VERBS = 2,
-	HDA_FIXUP_FUNC = 3,
-	HDA_FIXUP_PINCTLS = 4,
-};
-
-enum {
-	HDA_FIXUP_ACT_PRE_PROBE = 0,
-	HDA_FIXUP_ACT_PROBE = 1,
-	HDA_FIXUP_ACT_INIT = 2,
-	HDA_FIXUP_ACT_BUILD = 3,
-	HDA_FIXUP_ACT_FREE = 4,
-};
-
-enum {
-	AUTO_PIN_MIC = 0,
-	AUTO_PIN_LINE_IN = 1,
-	AUTO_PIN_CD = 2,
-	AUTO_PIN_AUX = 3,
-	AUTO_PIN_LAST = 4,
-};
-
-enum {
-	INPUT_PIN_ATTR_UNUSED = 0,
-	INPUT_PIN_ATTR_INT = 1,
-	INPUT_PIN_ATTR_DOCK = 2,
-	INPUT_PIN_ATTR_NORMAL = 3,
-	INPUT_PIN_ATTR_REAR = 4,
-	INPUT_PIN_ATTR_FRONT = 5,
-	INPUT_PIN_ATTR_LAST = 5,
-};
-
-struct auto_out_pin {
-	hda_nid_t pin;
-	short int seq;
-};
-
-struct hdac_stream {
-	struct hdac_bus *bus;
-	struct snd_dma_buffer bdl;
-	__le32 *posbuf;
-	int direction;
-	unsigned int bufsize;
-	unsigned int period_bytes;
-	unsigned int frags;
-	unsigned int fifo_size;
-	void *sd_addr;
-	u32 sd_int_sta_mask;
-	struct snd_pcm_substream *substream;
-	unsigned int format_val;
-	unsigned char stream_tag;
-	unsigned char index;
-	int assigned_key;
-	bool opened: 1;
-	bool running: 1;
-	bool prepared: 1;
-	bool no_period_wakeup: 1;
-	bool locked: 1;
-	bool stripe: 1;
-	long unsigned int start_wallclk;
-	long unsigned int period_wallclk;
-	struct timecounter tc;
-	struct cyclecounter cc;
-	int delay_negative_threshold;
-	struct list_head list;
-};
-
-struct azx_dev {
-	struct hdac_stream core;
-	unsigned int irq_pending: 1;
-	unsigned int insufficient: 1;
-};
-
-struct azx;
-
-struct hda_controller_ops {
-	int (*disable_msi_reset_irq)(struct azx *);
-	void (*pcm_mmap_prepare)(struct snd_pcm_substream *, struct vm_area_struct *);
-	int (*position_check)(struct azx *, struct azx_dev *);
-	int (*link_power)(struct azx *, bool);
-};
-
-typedef unsigned int (*azx_get_pos_callback_t)(struct azx *, struct azx_dev *);
-
-typedef int (*azx_get_delay_callback_t)(struct azx *, struct azx_dev *, unsigned int);
-
-struct azx {
-	struct hda_bus bus;
-	struct snd_card *card;
-	struct pci_dev *pci;
-	int dev_index;
-	int driver_type;
-	unsigned int driver_caps;
-	int playback_streams;
-	int playback_index_offset;
-	int capture_streams;
-	int capture_index_offset;
-	int num_streams;
-	int jackpoll_interval;
-	const struct hda_controller_ops *ops;
-	azx_get_pos_callback_t get_position[2];
-	azx_get_delay_callback_t get_delay[2];
-	struct mutex open_mutex;
-	struct list_head pcm_list;
-	int codec_probe_mask;
-	unsigned int beep_mode;
-	int bdl_pos_adj;
-	unsigned int running: 1;
-	unsigned int fallback_to_single_cmd: 1;
-	unsigned int single_cmd: 1;
-	unsigned int msi: 1;
-	unsigned int probing: 1;
-	unsigned int snoop: 1;
-	unsigned int uc_buffer: 1;
-	unsigned int align_buffer_size: 1;
-	unsigned int region_requested: 1;
-	unsigned int disabled: 1;
-	unsigned int gts_present: 1;
-};
-
-struct azx_pcm {
-	struct azx *chip;
-	struct snd_pcm *pcm;
-	struct hda_codec *codec;
-	struct hda_pcm *info;
-	struct list_head list;
-};
-
-struct trace_event_raw_azx_pcm_trigger {
-	struct trace_entry ent;
-	int card;
-	int idx;
-	int cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_azx_get_position {
-	struct trace_entry ent;
-	int card;
-	int idx;
-	unsigned int pos;
-	unsigned int delay;
-	char __data[0];
-};
-
-struct trace_event_raw_azx_pcm {
-	struct trace_entry ent;
-	unsigned char stream_tag;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_azx_pcm_trigger {};
-
-struct trace_event_data_offsets_azx_get_position {};
-
-struct trace_event_data_offsets_azx_pcm {};
-
-typedef void (*btf_trace_azx_pcm_trigger)(void *, struct azx *, struct azx_dev *, int);
-
-typedef void (*btf_trace_azx_get_position)(void *, struct azx *, struct azx_dev *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_azx_pcm_open)(void *, struct azx *, struct azx_dev *);
-
-typedef void (*btf_trace_azx_pcm_close)(void *, struct azx *, struct azx_dev *);
-
-typedef void (*btf_trace_azx_pcm_hw_params)(void *, struct azx *, struct azx_dev *);
-
-typedef void (*btf_trace_azx_pcm_prepare)(void *, struct azx *, struct azx_dev *);
-
-enum {
-	SNDRV_HWDEP_IFACE_OPL2 = 0,
-	SNDRV_HWDEP_IFACE_OPL3 = 1,
-	SNDRV_HWDEP_IFACE_OPL4 = 2,
-	SNDRV_HWDEP_IFACE_SB16CSP = 3,
-	SNDRV_HWDEP_IFACE_EMU10K1 = 4,
-	SNDRV_HWDEP_IFACE_YSS225 = 5,
-	SNDRV_HWDEP_IFACE_ICS2115 = 6,
-	SNDRV_HWDEP_IFACE_SSCAPE = 7,
-	SNDRV_HWDEP_IFACE_VX = 8,
-	SNDRV_HWDEP_IFACE_MIXART = 9,
-	SNDRV_HWDEP_IFACE_USX2Y = 10,
-	SNDRV_HWDEP_IFACE_EMUX_WAVETABLE = 11,
-	SNDRV_HWDEP_IFACE_BLUETOOTH = 12,
-	SNDRV_HWDEP_IFACE_USX2Y_PCM = 13,
-	SNDRV_HWDEP_IFACE_PCXHR = 14,
-	SNDRV_HWDEP_IFACE_SB_RC = 15,
-	SNDRV_HWDEP_IFACE_HDA = 16,
-	SNDRV_HWDEP_IFACE_USB_STREAM = 17,
-	SNDRV_HWDEP_IFACE_FW_DICE = 18,
-	SNDRV_HWDEP_IFACE_FW_FIREWORKS = 19,
-	SNDRV_HWDEP_IFACE_FW_BEBOB = 20,
-	SNDRV_HWDEP_IFACE_FW_OXFW = 21,
-	SNDRV_HWDEP_IFACE_FW_DIGI00X = 22,
-	SNDRV_HWDEP_IFACE_FW_TASCAM = 23,
-	SNDRV_HWDEP_IFACE_LINE6 = 24,
-	SNDRV_HWDEP_IFACE_FW_MOTU = 25,
-	SNDRV_HWDEP_IFACE_FW_FIREFACE = 26,
-	SNDRV_HWDEP_IFACE_LAST = 26,
-};
-
-struct hda_verb_ioctl {
-	u32 verb;
-	u32 res;
-};
-
-enum {
-	SND_INTEL_DSP_DRIVER_ANY = 0,
-	SND_INTEL_DSP_DRIVER_LEGACY = 1,
-	SND_INTEL_DSP_DRIVER_SST = 2,
-	SND_INTEL_DSP_DRIVER_SOF = 3,
-	SND_INTEL_DSP_DRIVER_LAST = 3,
-};
-
-enum {
-	AZX_SNOOP_TYPE_NONE = 0,
-	AZX_SNOOP_TYPE_SCH = 1,
-	AZX_SNOOP_TYPE_ATI = 2,
-	AZX_SNOOP_TYPE_NVIDIA = 3,
-};
-
-struct hda_intel {
-	struct azx chip;
-	struct work_struct irq_pending_work;
-	struct completion probe_wait;
-	struct work_struct probe_work;
-	struct list_head list;
-	unsigned int irq_pending_warned: 1;
-	unsigned int probe_continued: 1;
-	unsigned int use_vga_switcheroo: 1;
-	unsigned int vga_switcheroo_registered: 1;
-	unsigned int init_failed: 1;
-	bool need_i915_power: 1;
-};
-
-struct trace_event_raw_hda_pm {
-	struct trace_entry ent;
-	int dev_index;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_hda_pm {};
-
-typedef void (*btf_trace_azx_suspend)(void *, struct azx *);
-
-typedef void (*btf_trace_azx_resume)(void *, struct azx *);
-
-typedef void (*btf_trace_azx_runtime_suspend)(void *, struct azx *);
-
-typedef void (*btf_trace_azx_runtime_resume)(void *, struct azx *);
-
-enum {
-	POS_FIX_AUTO = 0,
-	POS_FIX_LPIB = 1,
-	POS_FIX_POSBUF = 2,
-	POS_FIX_VIACOMBO = 3,
-	POS_FIX_COMBO = 4,
-	POS_FIX_SKL = 5,
-	POS_FIX_FIFO = 6,
-};
-
-enum {
-	AZX_DRIVER_ICH = 0,
-	AZX_DRIVER_PCH = 1,
-	AZX_DRIVER_SCH = 2,
-	AZX_DRIVER_SKL = 3,
-	AZX_DRIVER_HDMI = 4,
-	AZX_DRIVER_ATI = 5,
-	AZX_DRIVER_ATIHDMI = 6,
-	AZX_DRIVER_ATIHDMI_NS = 7,
-	AZX_DRIVER_VIA = 8,
-	AZX_DRIVER_SIS = 9,
-	AZX_DRIVER_ULI = 10,
-	AZX_DRIVER_NVIDIA = 11,
-	AZX_DRIVER_TERA = 12,
-	AZX_DRIVER_CTX = 13,
-	AZX_DRIVER_CTHDA = 14,
-	AZX_DRIVER_CMEDIA = 15,
-	AZX_DRIVER_ZHAOXIN = 16,
-	AZX_DRIVER_GENERIC = 17,
-	AZX_NUM_DRIVERS = 18,
-};
-
-enum {
-	AC_GRP_AUDIO_FUNCTION = 1,
-	AC_GRP_MODEM_FUNCTION = 2,
-};
-
-struct hda_vendor_id {
-	unsigned int id;
-	const char *name;
-};
-
-struct hda_rate_tbl {
-	unsigned int hz;
-	unsigned int alsa_bits;
-	unsigned int hda_fmt;
-};
-
-struct hdac_widget_tree {
-	struct kobject *root;
-	struct kobject *afg;
-	struct kobject **nodes;
-};
-
-struct widget_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct hdac_device *, hda_nid_t, struct widget_attribute *, char *);
-	ssize_t (*store)(struct hdac_device *, hda_nid_t, struct widget_attribute *, const char *, size_t);
-};
-
-struct hdac_cea_channel_speaker_allocation {
-	int ca_index;
-	int speakers[8];
-	int channels;
-	int spk_mask;
-};
-
-struct hdac_chmap;
-
-struct hdac_chmap_ops {
-	int (*chmap_cea_alloc_validate_get_type)(struct hdac_chmap *, struct hdac_cea_channel_speaker_allocation *, int);
-	void (*cea_alloc_to_tlv_chmap)(struct hdac_chmap *, struct hdac_cea_channel_speaker_allocation *, unsigned int *, int);
-	int (*chmap_validate)(struct hdac_chmap *, int, int, unsigned char *);
-	int (*get_spk_alloc)(struct hdac_device *, int);
-	void (*get_chmap)(struct hdac_device *, int, unsigned char *);
-	void (*set_chmap)(struct hdac_device *, int, unsigned char *, int);
-	bool (*is_pcm_attached)(struct hdac_device *, int);
-	int (*pin_get_slot_channel)(struct hdac_device *, hda_nid_t, int);
-	int (*pin_set_slot_channel)(struct hdac_device *, hda_nid_t, int, int);
-	void (*set_channel_count)(struct hdac_device *, hda_nid_t, int);
-};
-
-struct hdac_chmap {
-	unsigned int channels_max;
-	struct hdac_chmap_ops ops;
-	struct hdac_device *hdac;
-};
-
-enum cea_speaker_placement {
-	FL = 1,
-	FC = 2,
-	FR = 4,
-	FLC = 8,
-	FRC = 16,
-	RL = 32,
-	RC = 64,
-	RR = 128,
-	RLC = 256,
-	RRC = 512,
-	LFE = 1024,
-	FLW = 2048,
-	FRW = 4096,
-	FLH = 8192,
-	FCH = 16384,
-	FRH = 32768,
-	TC = 65536,
-};
-
-struct channel_map_table {
-	unsigned char map;
-	int spk_mask;
-};
-
-struct trace_event_raw_hda_send_cmd {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_hda_get_response {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_hda_unsol_event {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_hdac_stream {
-	struct trace_entry ent;
-	unsigned char stream_tag;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_hda_send_cmd {
-	u32 msg;
-};
-
-struct trace_event_data_offsets_hda_get_response {
-	u32 msg;
-};
-
-struct trace_event_data_offsets_hda_unsol_event {
-	u32 msg;
-};
-
-struct trace_event_data_offsets_hdac_stream {};
-
-typedef void (*btf_trace_hda_send_cmd)(void *, struct hdac_bus *, unsigned int);
-
-typedef void (*btf_trace_hda_get_response)(void *, struct hdac_bus *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_hda_unsol_event)(void *, struct hdac_bus *, u32, u32);
-
-typedef void (*btf_trace_snd_hdac_stream_start)(void *, struct hdac_bus *, struct hdac_stream *);
-
-typedef void (*btf_trace_snd_hdac_stream_stop)(void *, struct hdac_bus *, struct hdac_stream *);
-
-struct component_match___2;
-
-struct nhlt_specific_cfg {
-	u32 size;
-	u8 caps[0];
-};
-
-struct nhlt_endpoint {
-	u32 length;
-	u8 linktype;
-	u8 instance_id;
-	u16 vendor_id;
-	u16 device_id;
-	u16 revision_id;
-	u32 subsystem_id;
-	u8 device_type;
-	u8 direction;
-	u8 virtual_bus_id;
-	struct nhlt_specific_cfg config;
-} __attribute__((packed));
-
-struct nhlt_acpi_table {
-	struct acpi_table_header header;
-	u8 endpoint_count;
-	struct nhlt_endpoint desc[0];
-} __attribute__((packed));
-
-struct config_entry {
-	u32 flags;
-	u16 device;
-	const struct dmi_system_id *dmi_table;
-};
-
-enum nhlt_link_type {
-	NHLT_LINK_HDA = 0,
-	NHLT_LINK_DSP = 1,
-	NHLT_LINK_DMIC = 2,
-	NHLT_LINK_SSP = 3,
-	NHLT_LINK_INVALID = 4,
-};
-
-struct nhlt_resource_desc {
-	u32 extra;
-	u16 flags;
-	u64 addr_spc_gra;
-	u64 min_addr;
-	u64 max_addr;
-	u64 addr_trans_offset;
-	u64 length;
-} __attribute__((packed));
-
-struct nhlt_device_specific_config {
-	u8 virtual_slot;
-	u8 config_type;
-};
-
-struct nhlt_dmic_array_config {
-	struct nhlt_device_specific_config device_config;
-	u8 array_type;
-};
-
-struct nhlt_vendor_dmic_array_config {
-	struct nhlt_dmic_array_config dmic_config;
-	u8 nb_mics;
-};
-
-enum {
-	NHLT_MIC_ARRAY_2CH_SMALL = 10,
-	NHLT_MIC_ARRAY_2CH_BIG = 11,
-	NHLT_MIC_ARRAY_4CH_1ST_GEOM = 12,
-	NHLT_MIC_ARRAY_4CH_L_SHAPED = 13,
-	NHLT_MIC_ARRAY_4CH_2ND_GEOM = 14,
-	NHLT_MIC_ARRAY_VENDOR_DEFINED = 15,
-};
-
-struct pcibios_fwaddrmap {
-	struct list_head list;
-	struct pci_dev *dev;
-	resource_size_t fw_addr[11];
-};
-
-struct pci_check_idx_range {
-	int start;
-	int end;
-};
-
-struct pci_mmcfg_region {
-	struct list_head list;
-	struct resource res;
-	u64 address;
-	char *virt;
-	u16 segment;
-	u8 start_bus;
-	u8 end_bus;
-	char name[30];
-};
-
-struct acpi_table_mcfg {
-	struct acpi_table_header header;
-	u8 reserved[8];
-};
-
-struct acpi_mcfg_allocation {
-	u64 address;
-	u16 pci_segment;
-	u8 start_bus_number;
-	u8 end_bus_number;
-	u32 reserved;
-};
-
-struct pci_mmcfg_hostbridge_probe {
-	u32 bus;
-	u32 devfn;
-	u32 vendor;
-	u32 device;
-	const char * (*probe)();
-};
-
-typedef bool (*check_reserved_t)(u64, u64, unsigned int);
-
-struct pci_root_info {
-	struct acpi_pci_root_info common;
-	struct pci_sysdata sd;
-	bool mcfg_added;
-	u8 start_bus;
-	u8 end_bus;
-};
-
-struct irq_info___2 {
-	u8 bus;
-	u8 devfn;
-	struct {
-		u8 link;
-		u16 bitmap;
-	} __attribute__((packed)) irq[4];
-	u8 slot;
-	u8 rfu;
-};
-
-struct irq_routing_table {
-	u32 signature;
-	u16 version;
-	u16 size;
-	u8 rtr_bus;
-	u8 rtr_devfn;
-	u16 exclusive_irqs;
-	u16 rtr_vendor;
-	u16 rtr_device;
-	u32 miniport_data;
-	u8 rfu[11];
-	u8 checksum;
-	struct irq_info___2 slots[0];
-};
-
-struct irq_router {
-	char *name;
-	u16 vendor;
-	u16 device;
-	int (*get)(struct pci_dev *, struct pci_dev *, int);
-	int (*set)(struct pci_dev *, struct pci_dev *, int, int);
-};
-
-struct irq_router_handler {
-	u16 vendor;
-	int (*probe)(struct irq_router *, struct pci_dev *, u16);
-};
-
-struct pci_setup_rom {
-	struct setup_data data;
-	uint16_t vendor;
-	uint16_t devid;
-	uint64_t pcilen;
-	long unsigned int segment;
-	long unsigned int bus;
-	long unsigned int device;
-	long unsigned int function;
-	uint8_t romdata[0];
-};
-
-enum pci_bf_sort_state {
-	pci_bf_sort_default = 0,
-	pci_force_nobf = 1,
-	pci_force_bf = 2,
-	pci_dmi_bf = 3,
-};
-
-struct pci_root_res {
-	struct list_head list;
-	struct resource res;
-};
-
-struct pci_root_info___2 {
-	struct list_head list;
-	char name[12];
-	struct list_head resources;
-	struct resource busn;
-	int node;
-	int link;
-};
-
-struct amd_hostbridge {
-	u32 bus;
-	u32 slot;
-	u32 device;
-};
-
-struct saved_msr {
-	bool valid;
-	struct msr_info info;
-};
-
-struct saved_msrs {
-	unsigned int num;
-	struct saved_msr *array;
-};
-
-struct saved_context {
-	struct pt_regs regs;
-	u16 ds;
-	u16 es;
-	u16 fs;
-	u16 gs;
-	long unsigned int kernelmode_gs_base;
-	long unsigned int usermode_gs_base;
-	long unsigned int fs_base;
-	long unsigned int cr0;
-	long unsigned int cr2;
-	long unsigned int cr3;
-	long unsigned int cr4;
-	u64 misc_enable;
-	bool misc_enable_saved;
-	struct saved_msrs saved_msrs;
-	long unsigned int efer;
-	u16 gdt_pad;
-	struct desc_ptr gdt_desc;
-	u16 idt_pad;
-	struct desc_ptr idt;
-	u16 ldt;
-	u16 tss;
-	long unsigned int tr;
-	long unsigned int safety;
-	long unsigned int return_address;
-} __attribute__((packed));
-
-typedef int (*pm_cpu_match_t)(const struct x86_cpu_id *);
-
-struct restore_data_record {
-	long unsigned int jump_address;
-	long unsigned int jump_address_phys;
-	long unsigned int cr3;
-	long unsigned int magic;
-	u8 e820_digest[16];
-};
-
-struct __kernel_old_timespec {
-	__kernel_old_time_t tv_sec;
-	long int tv_nsec;
-};
-
-struct __kernel_sock_timeval {
-	__s64 tv_sec;
-	__s64 tv_usec;
-};
-
-struct mmsghdr {
-	struct user_msghdr msg_hdr;
-	unsigned int msg_len;
-};
-
-struct scm_timestamping_internal {
-	struct timespec64 ts[3];
-};
-
-enum sock_shutdown_cmd {
-	SHUT_RD = 0,
-	SHUT_WR = 1,
-	SHUT_RDWR = 2,
-};
-
-struct net_proto_family {
-	int family;
-	int (*create)(struct net *, struct socket *, int, int);
-	struct module *owner;
-};
-
-enum {
-	SOCK_WAKE_IO = 0,
-	SOCK_WAKE_WAITD = 1,
-	SOCK_WAKE_SPACE = 2,
-	SOCK_WAKE_URG = 3,
-};
-
-struct ifconf {
-	int ifc_len;
-	union {
-		char *ifcu_buf;
-		struct ifreq *ifcu_req;
-	} ifc_ifcu;
-};
-
-struct compat_ifmap {
-	compat_ulong_t mem_start;
-	compat_ulong_t mem_end;
-	short unsigned int base_addr;
-	unsigned char irq;
-	unsigned char dma;
-	unsigned char port;
-};
-
-struct compat_if_settings {
-	unsigned int type;
-	unsigned int size;
-	compat_uptr_t ifs_ifsu;
-};
-
-struct compat_ifreq {
-	union {
-		char ifrn_name[16];
-	} ifr_ifrn;
-	union {
-		struct sockaddr ifru_addr;
-		struct sockaddr ifru_dstaddr;
-		struct sockaddr ifru_broadaddr;
-		struct sockaddr ifru_netmask;
-		struct sockaddr ifru_hwaddr;
-		short int ifru_flags;
-		compat_int_t ifru_ivalue;
-		compat_int_t ifru_mtu;
-		struct compat_ifmap ifru_map;
-		char ifru_slave[16];
-		char ifru_newname[16];
-		compat_caddr_t ifru_data;
-		struct compat_if_settings ifru_settings;
-	} ifr_ifru;
-};
-
-struct compat_ifconf {
-	compat_int_t ifc_len;
-	compat_caddr_t ifcbuf;
-};
-
-struct compat_ethtool_rx_flow_spec {
-	u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	compat_u64 ring_cookie;
-	u32 location;
-} __attribute__((packed));
-
-struct compat_ethtool_rxnfc {
-	u32 cmd;
-	u32 flow_type;
-	compat_u64 data;
-	struct compat_ethtool_rx_flow_spec fs;
-	u32 rule_cnt;
-	u32 rule_locs[0];
-} __attribute__((packed));
-
-struct compat_msghdr {
-	compat_uptr_t msg_name;
-	compat_int_t msg_namelen;
-	compat_uptr_t msg_iov;
-	compat_size_t msg_iovlen;
-	compat_uptr_t msg_control;
-	compat_size_t msg_controllen;
-	compat_uint_t msg_flags;
-};
-
-struct compat_mmsghdr {
-	struct compat_msghdr msg_hdr;
-	compat_uint_t msg_len;
-};
-
-struct scm_ts_pktinfo {
-	__u32 if_index;
-	__u32 pkt_length;
-	__u32 reserved[2];
-};
-
-struct sock_skb_cb {
-	u32 dropcount;
-};
-
-struct in6_rtmsg {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	__u32 rtmsg_type;
-	__u16 rtmsg_dst_len;
-	__u16 rtmsg_src_len;
-	__u32 rtmsg_metric;
-	long unsigned int rtmsg_info;
-	__u32 rtmsg_flags;
-	int rtmsg_ifindex;
-};
-
-struct rtentry {
-	long unsigned int rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	long unsigned int rt_pad3;
-	void *rt_pad4;
-	short int rt_metric;
-	char *rt_dev;
-	long unsigned int rt_mtu;
-	long unsigned int rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct sock_extended_err {
-	__u32 ee_errno;
-	__u8 ee_origin;
-	__u8 ee_type;
-	__u8 ee_code;
-	__u8 ee_pad;
-	__u32 ee_info;
-	__u32 ee_data;
-};
-
-struct sock_exterr_skb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	struct sock_extended_err ee;
-	u16 addr_offset;
-	__be16 port;
-	u8 opt_stats: 1;
-	u8 unused: 7;
-};
-
-struct used_address {
-	struct __kernel_sockaddr_storage name;
-	unsigned int name_len;
-};
-
-struct rtentry32 {
-	u32 rt_pad1;
-	struct sockaddr rt_dst;
-	struct sockaddr rt_gateway;
-	struct sockaddr rt_genmask;
-	short unsigned int rt_flags;
-	short int rt_pad2;
-	u32 rt_pad3;
-	unsigned char rt_tos;
-	unsigned char rt_class;
-	short int rt_pad4;
-	short int rt_metric;
-	u32 rt_dev;
-	u32 rt_mtu;
-	u32 rt_window;
-	short unsigned int rt_irtt;
-};
-
-struct in6_rtmsg32 {
-	struct in6_addr rtmsg_dst;
-	struct in6_addr rtmsg_src;
-	struct in6_addr rtmsg_gateway;
-	u32 rtmsg_type;
-	u16 rtmsg_dst_len;
-	u16 rtmsg_src_len;
-	u32 rtmsg_metric;
-	u32 rtmsg_info;
-	u32 rtmsg_flags;
-	s32 rtmsg_ifindex;
-};
-
-struct linger {
-	int l_onoff;
-	int l_linger;
-};
-
-struct cmsghdr {
-	__kernel_size_t cmsg_len;
-	int cmsg_level;
-	int cmsg_type;
-};
-
-struct ucred {
-	__u32 pid;
-	__u32 uid;
-	__u32 gid;
-};
-
-struct mmpin {
-	struct user_struct *user;
-	unsigned int num_pg;
-};
-
-struct ubuf_info {
-	void (*callback)(struct ubuf_info *, bool);
-	union {
-		struct {
-			long unsigned int desc;
-			void *ctx;
-		};
-		struct {
-			u32 id;
-			u16 len;
-			u16 zerocopy: 1;
-			u32 bytelen;
-		};
-	};
-	refcount_t refcnt;
-	struct mmpin mmp;
-};
-
-struct prot_inuse {
-	int val[64];
-};
-
-struct rt6key {
-	struct in6_addr addr;
-	int plen;
-};
-
-struct rtable;
-
-struct fnhe_hash_bucket;
-
-struct fib_nh_common {
-	struct net_device *nhc_dev;
-	int nhc_oif;
-	unsigned char nhc_scope;
-	u8 nhc_family;
-	u8 nhc_gw_family;
-	unsigned char nhc_flags;
-	struct lwtunnel_state *nhc_lwtstate;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} nhc_gw;
-	int nhc_weight;
-	atomic_t nhc_upper_bound;
-	struct rtable **nhc_pcpu_rth_output;
-	struct rtable *nhc_rth_input;
-	struct fnhe_hash_bucket *nhc_exceptions;
-};
-
-struct rt6_exception_bucket;
-
-struct fib6_nh {
-	struct fib_nh_common nh_common;
-	struct rt6_info **rt6i_pcpu;
-	struct rt6_exception_bucket *rt6i_exception_bucket;
-};
-
-struct fib6_node;
-
-struct nexthop;
-
-struct fib6_info {
-	struct fib6_table *fib6_table;
-	struct fib6_info *fib6_next;
-	struct fib6_node *fib6_node;
-	union {
-		struct list_head fib6_siblings;
-		struct list_head nh_list;
-	};
-	unsigned int fib6_nsiblings;
-	refcount_t fib6_ref;
-	long unsigned int expires;
-	struct dst_metrics *fib6_metrics;
-	struct rt6key fib6_dst;
-	u32 fib6_flags;
-	struct rt6key fib6_src;
-	struct rt6key fib6_prefsrc;
-	u32 fib6_metric;
-	u8 fib6_protocol;
-	u8 fib6_type;
-	u8 should_flush: 1;
-	u8 dst_nocount: 1;
-	u8 dst_nopolicy: 1;
-	u8 dst_host: 1;
-	u8 fib6_destroying: 1;
-	u8 unused: 3;
-	struct callback_head rcu;
-	struct nexthop *nh;
-	struct fib6_nh fib6_nh[0];
-};
-
-struct uncached_list;
-
-struct rt6_info {
-	struct dst_entry dst;
-	struct fib6_info *from;
-	struct rt6key rt6i_dst;
-	struct rt6key rt6i_src;
-	struct in6_addr rt6i_gateway;
-	struct inet6_dev *rt6i_idev;
-	u32 rt6i_flags;
-	struct list_head rt6i_uncached;
-	struct uncached_list *rt6i_uncached_list;
-	short unsigned int rt6i_nfheader_len;
-};
-
-struct rt6_statistics {
-	__u32 fib_nodes;
-	__u32 fib_route_nodes;
-	__u32 fib_rt_entries;
-	__u32 fib_rt_cache;
-	__u32 fib_discarded_routes;
-	atomic_t fib_rt_alloc;
-	atomic_t fib_rt_uncache;
-};
-
-struct fib6_node {
-	struct fib6_node *parent;
-	struct fib6_node *left;
-	struct fib6_node *right;
-	struct fib6_info *leaf;
-	__u16 fn_bit;
-	__u16 fn_flags;
-	int fn_sernum;
-	struct fib6_info *rr_ptr;
-	struct callback_head rcu;
-};
-
-struct fib6_table {
-	struct hlist_node tb6_hlist;
-	u32 tb6_id;
-	spinlock_t tb6_lock;
-	struct fib6_node tb6_root;
-	struct inet_peer_base tb6_peers;
-	unsigned int flags;
-	unsigned int fib_seq;
-};
-
-typedef union {
-	__be32 a4;
-	__be32 a6[4];
-	struct in6_addr in6;
-} xfrm_address_t;
-
-struct xfrm_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u8 proto;
-};
-
-struct xfrm_sec_ctx {
-	__u8 ctx_doi;
-	__u8 ctx_alg;
-	__u16 ctx_len;
-	__u32 ctx_sid;
-	char ctx_str[0];
-};
-
-struct xfrm_selector {
-	xfrm_address_t daddr;
-	xfrm_address_t saddr;
-	__be16 dport;
-	__be16 dport_mask;
-	__be16 sport;
-	__be16 sport_mask;
-	__u16 family;
-	__u8 prefixlen_d;
-	__u8 prefixlen_s;
-	__u8 proto;
-	int ifindex;
-	__kernel_uid32_t user;
-};
-
-struct xfrm_lifetime_cfg {
-	__u64 soft_byte_limit;
-	__u64 hard_byte_limit;
-	__u64 soft_packet_limit;
-	__u64 hard_packet_limit;
-	__u64 soft_add_expires_seconds;
-	__u64 hard_add_expires_seconds;
-	__u64 soft_use_expires_seconds;
-	__u64 hard_use_expires_seconds;
-};
-
-struct xfrm_lifetime_cur {
-	__u64 bytes;
-	__u64 packets;
-	__u64 add_time;
-	__u64 use_time;
-};
-
-struct xfrm_replay_state {
-	__u32 oseq;
-	__u32 seq;
-	__u32 bitmap;
-};
-
-struct xfrm_replay_state_esn {
-	unsigned int bmp_len;
-	__u32 oseq;
-	__u32 seq;
-	__u32 oseq_hi;
-	__u32 seq_hi;
-	__u32 replay_window;
-	__u32 bmp[0];
-};
-
-struct xfrm_algo {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_auth {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_trunc_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_aead {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_icv_len;
-	char alg_key[0];
-};
-
-struct xfrm_stats {
-	__u32 replay_window;
-	__u32 replay;
-	__u32 integrity_failed;
-};
-
-enum {
-	XFRM_POLICY_TYPE_MAIN = 0,
-	XFRM_POLICY_TYPE_SUB = 1,
-	XFRM_POLICY_TYPE_MAX = 2,
-	XFRM_POLICY_TYPE_ANY = 255,
-};
-
-struct xfrm_encap_tmpl {
-	__u16 encap_type;
-	__be16 encap_sport;
-	__be16 encap_dport;
-	xfrm_address_t encap_oa;
-};
-
-struct xfrm_mark {
-	__u32 v;
-	__u32 m;
-};
-
-struct xfrm_address_filter {
-	xfrm_address_t saddr;
-	xfrm_address_t daddr;
-	__u16 family;
-	__u8 splen;
-	__u8 dplen;
-};
-
-struct offload_callbacks {
-	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
-	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sk_buff *, int);
-};
-
-struct xfrm_state_walk {
-	struct list_head all;
-	u8 state;
-	u8 dying;
-	u8 proto;
-	u32 seq;
-	struct xfrm_address_filter *filter;
-};
-
-struct xfrm_state_offload {
-	struct net_device *dev;
-	long unsigned int offload_handle;
-	unsigned int num_exthdrs;
-	u8 flags;
-};
-
-struct xfrm_mode {
-	u8 encap;
-	u8 family;
-	u8 flags;
-};
-
-struct xfrm_replay;
-
-struct xfrm_type;
-
-struct xfrm_type_offload;
-
-struct xfrm_state {
-	possible_net_t xs_net;
-	union {
-		struct hlist_node gclist;
-		struct hlist_node bydst;
-	};
-	struct hlist_node bysrc;
-	struct hlist_node byspi;
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct xfrm_id id;
-	struct xfrm_selector sel;
-	struct xfrm_mark mark;
-	u32 if_id;
-	u32 tfcpad;
-	u32 genid;
-	struct xfrm_state_walk km;
-	struct {
-		u32 reqid;
-		u8 mode;
-		u8 replay_window;
-		u8 aalgo;
-		u8 ealgo;
-		u8 calgo;
-		u8 flags;
-		u16 family;
-		xfrm_address_t saddr;
-		int header_len;
-		int trailer_len;
-		u32 extra_flags;
-		struct xfrm_mark smark;
-	} props;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_algo_auth *aalg;
-	struct xfrm_algo *ealg;
-	struct xfrm_algo *calg;
-	struct xfrm_algo_aead *aead;
-	const char *geniv;
-	struct xfrm_encap_tmpl *encap;
-	xfrm_address_t *coaddr;
-	struct xfrm_state *tunnel;
-	atomic_t tunnel_users;
-	struct xfrm_replay_state replay;
-	struct xfrm_replay_state_esn *replay_esn;
-	struct xfrm_replay_state preplay;
-	struct xfrm_replay_state_esn *preplay_esn;
-	const struct xfrm_replay *repl;
-	u32 xflags;
-	u32 replay_maxage;
-	u32 replay_maxdiff;
-	struct timer_list rtimer;
-	struct xfrm_stats stats;
-	struct xfrm_lifetime_cur curlft;
-	struct hrtimer mtimer;
-	struct xfrm_state_offload xso;
-	long int saved_tmo;
-	time64_t lastused;
-	struct page_frag xfrag;
-	const struct xfrm_type *type;
-	struct xfrm_mode inner_mode;
-	struct xfrm_mode inner_mode_iaf;
-	struct xfrm_mode outer_mode;
-	const struct xfrm_type_offload *type_offload;
-	struct xfrm_sec_ctx *security;
-	void *data;
-};
-
-enum txtime_flags {
-	SOF_TXTIME_DEADLINE_MODE = 1,
-	SOF_TXTIME_REPORT_ERRORS = 2,
-	SOF_TXTIME_FLAGS_LAST = 2,
-	SOF_TXTIME_FLAGS_MASK = 3,
-};
-
-struct sock_txtime {
-	__kernel_clockid_t clockid;
-	__u32 flags;
-};
-
-struct xfrm_policy_walk_entry {
-	struct list_head all;
-	u8 dead;
-};
-
-struct xfrm_policy_queue {
-	struct sk_buff_head hold_queue;
-	struct timer_list hold_timer;
-	long unsigned int timeout;
-};
-
-struct xfrm_tmpl {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	short unsigned int encap_family;
-	u32 reqid;
-	u8 mode;
-	u8 share;
-	u8 optional;
-	u8 allalgs;
-	u32 aalgos;
-	u32 ealgos;
-	u32 calgos;
-};
-
-struct xfrm_policy {
-	possible_net_t xp_net;
-	struct hlist_node bydst;
-	struct hlist_node byidx;
-	rwlock_t lock;
-	refcount_t refcnt;
-	u32 pos;
-	struct timer_list timer;
-	atomic_t genid;
-	u32 priority;
-	u32 index;
-	u32 if_id;
-	struct xfrm_mark mark;
-	struct xfrm_selector selector;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_policy_walk_entry walk;
-	struct xfrm_policy_queue polq;
-	bool bydst_reinsert;
-	u8 type;
-	u8 action;
-	u8 flags;
-	u8 xfrm_nr;
-	u16 family;
-	struct xfrm_sec_ctx *security;
-	struct xfrm_tmpl xfrm_vec[6];
-	struct hlist_node bydst_inexact_list;
-	struct callback_head rcu;
-};
-
-enum sk_pacing {
-	SK_PACING_NONE = 0,
-	SK_PACING_NEEDED = 1,
-	SK_PACING_FQ = 2,
-};
-
-struct sockcm_cookie {
-	u64 transmit_time;
-	u32 mark;
-	u16 tsflags;
-};
-
-struct fastopen_queue {
-	struct request_sock *rskq_rst_head;
-	struct request_sock *rskq_rst_tail;
-	spinlock_t lock;
-	int qlen;
-	int max_qlen;
-	struct tcp_fastopen_context *ctx;
-};
-
-struct request_sock_queue {
-	spinlock_t rskq_lock;
-	u8 rskq_defer_accept;
-	u32 synflood_warned;
-	atomic_t qlen;
-	atomic_t young;
-	struct request_sock *rskq_accept_head;
-	struct request_sock *rskq_accept_tail;
-	struct fastopen_queue fastopenq;
-};
-
-struct minmax_sample {
-	u32 t;
-	u32 v;
-};
-
-struct minmax {
-	struct minmax_sample s[3];
-};
-
-struct inet_connection_sock_af_ops {
-	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
-	void (*send_check)(struct sock *, struct sk_buff *);
-	int (*rebuild_header)(struct sock *);
-	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
-	int (*conn_request)(struct sock *, struct sk_buff *);
-	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
-	u16 net_header_len;
-	u16 net_frag_header_len;
-	u16 sockaddr_len;
-	int (*setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	int (*compat_setsockopt)(struct sock *, int, int, char *, unsigned int);
-	int (*compat_getsockopt)(struct sock *, int, int, char *, int *);
-	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
-	void (*mtu_reduced)(struct sock *);
-};
-
-struct inet_bind_bucket;
-
-struct tcp_ulp_ops;
-
-struct inet_connection_sock {
-	struct inet_sock icsk_inet;
-	struct request_sock_queue icsk_accept_queue;
-	struct inet_bind_bucket *icsk_bind_hash;
-	long unsigned int icsk_timeout;
-	struct timer_list icsk_retransmit_timer;
-	struct timer_list icsk_delack_timer;
-	__u32 icsk_rto;
-	__u32 icsk_pmtu_cookie;
-	const struct tcp_congestion_ops *icsk_ca_ops;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	const struct tcp_ulp_ops *icsk_ulp_ops;
-	void *icsk_ulp_data;
-	void (*icsk_clean_acked)(struct sock *, u32);
-	struct hlist_node icsk_listen_portaddr_node;
-	unsigned int (*icsk_sync_mss)(struct sock *, u32);
-	__u8 icsk_ca_state: 6;
-	__u8 icsk_ca_setsockopt: 1;
-	__u8 icsk_ca_dst_locked: 1;
-	__u8 icsk_retransmits;
-	__u8 icsk_pending;
-	__u8 icsk_backoff;
-	__u8 icsk_syn_retries;
-	__u8 icsk_probes_out;
-	__u16 icsk_ext_hdr_len;
-	struct {
-		__u8 pending;
-		__u8 quick;
-		__u8 pingpong;
-		__u8 blocked;
-		__u32 ato;
-		long unsigned int timeout;
-		__u32 lrcvtime;
-		__u16 last_seg_size;
-		__u16 rcv_mss;
-	} icsk_ack;
-	struct {
-		int enabled;
-		int search_high;
-		int search_low;
-		int probe_size;
-		u32 probe_timestamp;
-	} icsk_mtup;
-	u32 icsk_user_timeout;
-	u64 icsk_ca_priv[13];
-};
-
-struct inet_bind_bucket {
-	possible_net_t ib_net;
-	int l3mdev;
-	short unsigned int port;
-	signed char fastreuse;
-	signed char fastreuseport;
-	kuid_t fastuid;
-	struct in6_addr fast_v6_rcv_saddr;
-	__be32 fast_rcv_saddr;
-	short unsigned int fast_sk_family;
-	bool fast_ipv6_only;
-	struct hlist_node node;
-	struct hlist_head owners;
-};
-
-struct tcp_ulp_ops {
-	struct list_head list;
-	int (*init)(struct sock *);
-	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
-	void (*release)(struct sock *);
-	int (*get_info)(const struct sock *, struct sk_buff *);
-	size_t (*get_info_size)(const struct sock *);
-	char name[16];
-	struct module *owner;
-};
-
-struct tcp_fastopen_cookie {
-	__le64 val[2];
-	s8 len;
-	bool exp;
-};
-
-struct tcp_sack_block {
-	u32 start_seq;
-	u32 end_seq;
-};
-
-struct tcp_options_received {
-	int ts_recent_stamp;
-	u32 ts_recent;
-	u32 rcv_tsval;
-	u32 rcv_tsecr;
-	u16 saw_tstamp: 1;
-	u16 tstamp_ok: 1;
-	u16 dsack: 1;
-	u16 wscale_ok: 1;
-	u16 sack_ok: 3;
-	u16 smc_ok: 1;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u8 num_sacks;
-	u16 user_mss;
-	u16 mss_clamp;
-};
-
-struct tcp_rack {
-	u64 mstamp;
-	u32 rtt_us;
-	u32 end_seq;
-	u32 last_delivered;
-	u8 reo_wnd_steps;
-	u8 reo_wnd_persist: 5;
-	u8 dsack_seen: 1;
-	u8 advanced: 1;
-};
-
-struct tcp_sock_af_ops;
-
-struct tcp_md5sig_info;
-
-struct tcp_fastopen_request;
-
-struct tcp_sock {
-	struct inet_connection_sock inet_conn;
-	u16 tcp_header_len;
-	u16 gso_segs;
-	__be32 pred_flags;
-	u64 bytes_received;
-	u32 segs_in;
-	u32 data_segs_in;
-	u32 rcv_nxt;
-	u32 copied_seq;
-	u32 rcv_wup;
-	u32 snd_nxt;
-	u32 segs_out;
-	u32 data_segs_out;
-	u64 bytes_sent;
-	u64 bytes_acked;
-	u32 dsack_dups;
-	u32 snd_una;
-	u32 snd_sml;
-	u32 rcv_tstamp;
-	u32 lsndtime;
-	u32 last_oow_ack_time;
-	u32 compressed_ack_rcv_nxt;
-	u32 tsoffset;
-	struct list_head tsq_node;
-	struct list_head tsorted_sent_queue;
-	u32 snd_wl1;
-	u32 snd_wnd;
-	u32 max_window;
-	u32 mss_cache;
-	u32 window_clamp;
-	u32 rcv_ssthresh;
-	struct tcp_rack rack;
-	u16 advmss;
-	u8 compressed_ack;
-	u32 chrono_start;
-	u32 chrono_stat[3];
-	u8 chrono_type: 2;
-	u8 rate_app_limited: 1;
-	u8 fastopen_connect: 1;
-	u8 fastopen_no_cookie: 1;
-	u8 is_sack_reneg: 1;
-	u8 fastopen_client_fail: 2;
-	u8 nonagle: 4;
-	u8 thin_lto: 1;
-	u8 recvmsg_inq: 1;
-	u8 repair: 1;
-	u8 frto: 1;
-	u8 repair_queue;
-	u8 syn_data: 1;
-	u8 syn_fastopen: 1;
-	u8 syn_fastopen_exp: 1;
-	u8 syn_fastopen_ch: 1;
-	u8 syn_data_acked: 1;
-	u8 save_syn: 1;
-	u8 is_cwnd_limited: 1;
-	u8 syn_smc: 1;
-	u32 tlp_high_seq;
-	u32 tcp_tx_delay;
-	u64 tcp_wstamp_ns;
-	u64 tcp_clock_cache;
-	u64 tcp_mstamp;
-	u32 srtt_us;
-	u32 mdev_us;
-	u32 mdev_max_us;
-	u32 rttvar_us;
-	u32 rtt_seq;
-	struct minmax rtt_min;
-	u32 packets_out;
-	u32 retrans_out;
-	u32 max_packets_out;
-	u32 max_packets_seq;
-	u16 urg_data;
-	u8 ecn_flags;
-	u8 keepalive_probes;
-	u32 reordering;
-	u32 reord_seen;
-	u32 snd_up;
-	struct tcp_options_received rx_opt;
-	u32 snd_ssthresh;
-	u32 snd_cwnd;
-	u32 snd_cwnd_cnt;
-	u32 snd_cwnd_clamp;
-	u32 snd_cwnd_used;
-	u32 snd_cwnd_stamp;
-	u32 prior_cwnd;
-	u32 prr_delivered;
-	u32 prr_out;
-	u32 delivered;
-	u32 delivered_ce;
-	u32 lost;
-	u32 app_limited;
-	u64 first_tx_mstamp;
-	u64 delivered_mstamp;
-	u32 rate_delivered;
-	u32 rate_interval_us;
-	u32 rcv_wnd;
-	u32 write_seq;
-	u32 notsent_lowat;
-	u32 pushed_seq;
-	u32 lost_out;
-	u32 sacked_out;
-	struct hrtimer pacing_timer;
-	struct hrtimer compressed_ack_timer;
-	struct sk_buff *lost_skb_hint;
-	struct sk_buff *retransmit_skb_hint;
-	struct rb_root out_of_order_queue;
-	struct sk_buff *ooo_last_skb;
-	struct tcp_sack_block duplicate_sack[1];
-	struct tcp_sack_block selective_acks[4];
-	struct tcp_sack_block recv_sack_cache[4];
-	struct sk_buff *highest_sack;
-	int lost_cnt_hint;
-	u32 prior_ssthresh;
-	u32 high_seq;
-	u32 retrans_stamp;
-	u32 undo_marker;
-	int undo_retrans;
-	u64 bytes_retrans;
-	u32 total_retrans;
-	u32 urg_seq;
-	unsigned int keepalive_time;
-	unsigned int keepalive_intvl;
-	int linger2;
-	u8 bpf_sock_ops_cb_flags;
-	u32 rcv_ooopack;
-	u32 rcv_rtt_last_tsecr;
-	struct {
-		u32 rtt_us;
-		u32 seq;
-		u64 time;
-	} rcv_rtt_est;
-	struct {
-		u32 space;
-		u32 seq;
-		u64 time;
-	} rcvq_space;
-	struct {
-		u32 probe_seq_start;
-		u32 probe_seq_end;
-	} mtu_probe;
-	u32 mtu_info;
-	const struct tcp_sock_af_ops *af_specific;
-	struct tcp_md5sig_info *md5sig_info;
-	struct tcp_fastopen_request *fastopen_req;
-	struct request_sock *fastopen_rsk;
-	u32 *saved_syn;
-};
-
-struct tcp_md5sig_key;
-
-struct tcp_sock_af_ops {
-	struct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	int (*md5_parse)(struct sock *, int, char *, int);
-};
-
-struct tcp_md5sig_info {
-	struct hlist_head head;
-	struct callback_head rcu;
-};
-
-struct tcp_fastopen_request {
-	struct tcp_fastopen_cookie cookie;
-	struct msghdr *data;
-	size_t size;
-	int copied;
-	struct ubuf_info *uarg;
-};
-
-union tcp_md5_addr {
-	struct in_addr a4;
-	struct in6_addr a6;
-};
-
-struct tcp_md5sig_key {
-	struct hlist_node node;
-	u8 keylen;
-	u8 family;
-	union tcp_md5_addr addr;
-	u8 prefixlen;
-	u8 key[80];
-	struct callback_head rcu;
-};
-
-struct fib6_config {
-	u32 fc_table;
-	u32 fc_metric;
-	int fc_dst_len;
-	int fc_src_len;
-	int fc_ifindex;
-	u32 fc_flags;
-	u32 fc_protocol;
-	u16 fc_type;
-	u16 fc_delete_all_nh: 1;
-	u16 fc_ignore_dev_down: 1;
-	u16 __unused: 14;
-	u32 fc_nh_id;
-	struct in6_addr fc_dst;
-	struct in6_addr fc_src;
-	struct in6_addr fc_prefsrc;
-	struct in6_addr fc_gateway;
-	long unsigned int fc_expires;
-	struct nlattr *fc_mx;
-	int fc_mx_len;
-	int fc_mp_len;
-	struct nlattr *fc_mp;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-};
-
-struct fib_nh_exception {
-	struct fib_nh_exception *fnhe_next;
-	int fnhe_genid;
-	__be32 fnhe_daddr;
-	u32 fnhe_pmtu;
-	bool fnhe_mtu_locked;
-	__be32 fnhe_gw;
-	long unsigned int fnhe_expires;
-	struct rtable *fnhe_rth_input;
-	struct rtable *fnhe_rth_output;
-	long unsigned int fnhe_stamp;
-	struct callback_head rcu;
-};
-
-struct rtable {
-	struct dst_entry dst;
-	int rt_genid;
-	unsigned int rt_flags;
-	__u16 rt_type;
-	__u8 rt_is_input;
-	__u8 rt_uses_gateway;
-	int rt_iif;
-	u8 rt_gw_family;
-	union {
-		__be32 rt_gw4;
-		struct in6_addr rt_gw6;
-	};
-	u32 rt_mtu_locked: 1;
-	u32 rt_pmtu: 31;
-	struct list_head rt_uncached;
-	struct uncached_list *rt_uncached_list;
-};
-
-struct fnhe_hash_bucket {
-	struct fib_nh_exception *chain;
-};
-
-struct net_protocol {
-	int (*early_demux)(struct sk_buff *);
-	int (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, u32);
-	unsigned int no_policy: 1;
-	unsigned int netns_ok: 1;
-	unsigned int icmp_strict_tag_validation: 1;
-};
-
-struct inet6_protocol {
-	void (*early_demux)(struct sk_buff *);
-	void (*early_demux_handler)(struct sk_buff *);
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	unsigned int flags;
-};
-
-struct net_offload {
-	struct offload_callbacks callbacks;
-	unsigned int flags;
-};
-
-struct rt6_exception_bucket {
-	struct hlist_head chain;
-	int depth;
-};
-
-struct xfrm_replay {
-	void (*advance)(struct xfrm_state *, __be32);
-	int (*check)(struct xfrm_state *, struct sk_buff *, __be32);
-	int (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);
-	void (*notify)(struct xfrm_state *, int);
-	int (*overflow)(struct xfrm_state *, struct sk_buff *);
-};
-
-struct xfrm_type {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	u8 flags;
-	int (*init_state)(struct xfrm_state *);
-	void (*destructor)(struct xfrm_state *);
-	int (*input)(struct xfrm_state *, struct sk_buff *);
-	int (*output)(struct xfrm_state *, struct sk_buff *);
-	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
-	int (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);
-};
-
-struct xfrm_type_offload {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	void (*encap)(struct xfrm_state *, struct sk_buff *);
-	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
-	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
-};
-
-enum {
-	SK_MEMINFO_RMEM_ALLOC = 0,
-	SK_MEMINFO_RCVBUF = 1,
-	SK_MEMINFO_WMEM_ALLOC = 2,
-	SK_MEMINFO_SNDBUF = 3,
-	SK_MEMINFO_FWD_ALLOC = 4,
-	SK_MEMINFO_WMEM_QUEUED = 5,
-	SK_MEMINFO_OPTMEM = 6,
-	SK_MEMINFO_BACKLOG = 7,
-	SK_MEMINFO_DROPS = 8,
-	SK_MEMINFO_VARS = 9,
-};
-
-enum sknetlink_groups {
-	SKNLGRP_NONE = 0,
-	SKNLGRP_INET_TCP_DESTROY = 1,
-	SKNLGRP_INET_UDP_DESTROY = 2,
-	SKNLGRP_INET6_TCP_DESTROY = 3,
-	SKNLGRP_INET6_UDP_DESTROY = 4,
-	__SKNLGRP_MAX = 5,
-};
-
-struct inet_request_sock {
-	struct request_sock req;
-	u16 snd_wscale: 4;
-	u16 rcv_wscale: 4;
-	u16 tstamp_ok: 1;
-	u16 sack_ok: 1;
-	u16 wscale_ok: 1;
-	u16 ecn_ok: 1;
-	u16 acked: 1;
-	u16 no_srccheck: 1;
-	u16 smc_ok: 1;
-	u32 ir_mark;
-	union {
-		struct ip_options_rcu *ireq_opt;
-		struct {
-			struct ipv6_txoptions *ipv6_opt;
-			struct sk_buff *pktopts;
-		};
-	};
-};
-
-struct tcp_request_sock_ops;
-
-struct tcp_request_sock {
-	struct inet_request_sock req;
-	const struct tcp_request_sock_ops *af_specific;
-	u64 snt_synack;
-	bool tfo_listener;
-	u32 txhash;
-	u32 rcv_isn;
-	u32 snt_isn;
-	u32 ts_off;
-	u32 last_oow_ack_time;
-	u32 rcv_nxt;
-};
-
-enum tcp_synack_type {
-	TCP_SYNACK_NORMAL = 0,
-	TCP_SYNACK_FASTOPEN = 1,
-	TCP_SYNACK_COOKIE = 2,
-};
-
-struct tcp_request_sock_ops {
-	u16 mss_clamp;
-	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
-	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	void (*init_req)(struct request_sock *, const struct sock *, struct sk_buff *);
-	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
-	struct dst_entry * (*route_req)(const struct sock *, struct flowi *, const struct request_sock *);
-	u32 (*init_seq)(const struct sk_buff *);
-	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
-	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type);
-};
-
-struct ts_state {
-	unsigned int offset;
-	char cb[40];
-};
-
-struct ts_config;
-
-struct ts_ops {
-	const char *name;
-	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
-	unsigned int (*find)(struct ts_config *, struct ts_state *);
-	void (*destroy)(struct ts_config *);
-	void * (*get_pattern)(struct ts_config *);
-	unsigned int (*get_pattern_len)(struct ts_config *);
-	struct module *owner;
-	struct list_head list;
-};
-
-struct ts_config {
-	struct ts_ops *ops;
-	int flags;
-	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
-	void (*finish)(struct ts_config *, struct ts_state *);
-};
-
-enum {
-	SKB_FCLONE_UNAVAILABLE = 0,
-	SKB_FCLONE_ORIG = 1,
-	SKB_FCLONE_CLONE = 2,
-};
-
-struct sk_buff_fclones {
-	struct sk_buff skb1;
-	struct sk_buff skb2;
-	refcount_t fclone_ref;
-};
-
-struct skb_seq_state {
-	__u32 lower_offset;
-	__u32 upper_offset;
-	__u32 frag_idx;
-	__u32 stepped_offset;
-	struct sk_buff *root_skb;
-	struct sk_buff *cur_skb;
-	__u8 *frag_data;
-};
-
-struct skb_gso_cb {
-	union {
-		int mac_offset;
-		int data_offset;
-	};
-	int encap_level;
-	__wsum csum;
-	__u16 csum_start;
-};
-
-struct napi_gro_cb {
-	void *frag0;
-	unsigned int frag0_len;
-	int data_offset;
-	u16 flush;
-	u16 flush_id;
-	u16 count;
-	u16 gro_remcsum_start;
-	long unsigned int age;
-	u16 proto;
-	u8 same_flow: 1;
-	u8 encap_mark: 1;
-	u8 csum_valid: 1;
-	u8 csum_cnt: 3;
-	u8 free: 2;
-	u8 is_ipv6: 1;
-	u8 is_fou: 1;
-	u8 is_atomic: 1;
-	u8 recursion_counter: 4;
-	__wsum csum;
-	struct sk_buff *last;
-};
-
-struct ip_auth_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__be16 reserved;
-	__be32 spi;
-	__be32 seq_no;
-	__u8 auth_data[0];
-};
-
-struct frag_hdr {
-	__u8 nexthdr;
-	__u8 reserved;
-	__be16 frag_off;
-	__be32 identification;
-};
-
-enum {
-	SCM_TSTAMP_SND = 0,
-	SCM_TSTAMP_SCHED = 1,
-	SCM_TSTAMP_ACK = 2,
-};
-
-struct xfrm_offload {
-	struct {
-		__u32 low;
-		__u32 hi;
-	} seq;
-	__u32 flags;
-	__u32 status;
-	__u8 proto;
-};
-
-struct sec_path {
-	int len;
-	int olen;
-	struct xfrm_state *xvec[6];
-	struct xfrm_offload ovec[1];
-};
-
-struct mpls_shim_hdr {
-	__be32 label_stack_entry;
-};
-
-struct napi_alloc_cache {
-	struct page_frag_cache page;
-	unsigned int skb_count;
-	void *skb_cache[64];
-};
-
-struct scm_cookie {
-	struct pid *pid;
-	struct scm_fp_list *fp;
-	struct scm_creds creds;
-	u32 secid;
-};
-
-struct scm_timestamping {
-	struct __kernel_old_timespec ts[3];
-};
-
-struct scm_timestamping64 {
-	struct __kernel_timespec ts[3];
-};
-
-enum {
-	TCA_STATS_UNSPEC = 0,
-	TCA_STATS_BASIC = 1,
-	TCA_STATS_RATE_EST = 2,
-	TCA_STATS_QUEUE = 3,
-	TCA_STATS_APP = 4,
-	TCA_STATS_RATE_EST64 = 5,
-	TCA_STATS_PAD = 6,
-	TCA_STATS_BASIC_HW = 7,
-	TCA_STATS_PKT64 = 8,
-	__TCA_STATS_MAX = 9,
-};
-
-struct gnet_stats_basic {
-	__u64 bytes;
-	__u32 packets;
-};
-
-struct gnet_stats_rate_est {
-	__u32 bps;
-	__u32 pps;
-};
-
-struct gnet_stats_rate_est64 {
-	__u64 bps;
-	__u64 pps;
-};
-
-struct gnet_estimator {
-	signed char interval;
-	unsigned char ewma_log;
-};
-
-struct net_rate_estimator {
-	struct gnet_stats_basic_packed *bstats;
-	spinlock_t *stats_lock;
-	seqcount_t *running;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	u8 ewma_log;
-	u8 intvl_log;
-	seqcount_t seq;
-	u64 last_packets;
-	u64 last_bytes;
-	u64 avpps;
-	u64 avbps;
-	long unsigned int next_jiffies;
-	struct timer_list timer;
-	struct callback_head rcu;
-};
-
-struct rtgenmsg {
-	unsigned char rtgen_family;
-};
-
-enum rtnetlink_groups {
-	RTNLGRP_NONE = 0,
-	RTNLGRP_LINK = 1,
-	RTNLGRP_NOTIFY = 2,
-	RTNLGRP_NEIGH = 3,
-	RTNLGRP_TC = 4,
-	RTNLGRP_IPV4_IFADDR = 5,
-	RTNLGRP_IPV4_MROUTE = 6,
-	RTNLGRP_IPV4_ROUTE = 7,
-	RTNLGRP_IPV4_RULE = 8,
-	RTNLGRP_IPV6_IFADDR = 9,
-	RTNLGRP_IPV6_MROUTE = 10,
-	RTNLGRP_IPV6_ROUTE = 11,
-	RTNLGRP_IPV6_IFINFO = 12,
-	RTNLGRP_DECnet_IFADDR = 13,
-	RTNLGRP_NOP2 = 14,
-	RTNLGRP_DECnet_ROUTE = 15,
-	RTNLGRP_DECnet_RULE = 16,
-	RTNLGRP_NOP4 = 17,
-	RTNLGRP_IPV6_PREFIX = 18,
-	RTNLGRP_IPV6_RULE = 19,
-	RTNLGRP_ND_USEROPT = 20,
-	RTNLGRP_PHONET_IFADDR = 21,
-	RTNLGRP_PHONET_ROUTE = 22,
-	RTNLGRP_DCB = 23,
-	RTNLGRP_IPV4_NETCONF = 24,
-	RTNLGRP_IPV6_NETCONF = 25,
-	RTNLGRP_MDB = 26,
-	RTNLGRP_MPLS_ROUTE = 27,
-	RTNLGRP_NSID = 28,
-	RTNLGRP_MPLS_NETCONF = 29,
-	RTNLGRP_IPV4_MROUTE_R = 30,
-	RTNLGRP_IPV6_MROUTE_R = 31,
-	RTNLGRP_NEXTHOP = 32,
-	__RTNLGRP_MAX = 33,
-};
-
-enum {
-	NETNSA_NONE = 0,
-	NETNSA_NSID = 1,
-	NETNSA_PID = 2,
-	NETNSA_FD = 3,
-	NETNSA_TARGET_NSID = 4,
-	NETNSA_CURRENT_NSID = 5,
-	__NETNSA_MAX = 6,
-};
-
-enum rtnl_link_flags {
-	RTNL_FLAG_DOIT_UNLOCKED = 1,
-};
-
-struct net_fill_args {
-	u32 portid;
-	u32 seq;
-	int flags;
-	int cmd;
-	int nsid;
-	bool add_ref;
-	int ref_nsid;
-};
-
-struct rtnl_net_dump_cb {
-	struct net *tgt_net;
-	struct net *ref_net;
-	struct sk_buff *skb;
-	struct net_fill_args fillargs;
-	int idx;
-	int s_idx;
-};
-
-struct flow_dissector_key_control {
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
-};
-
-enum flow_dissect_ret {
-	FLOW_DISSECT_RET_OUT_GOOD = 0,
-	FLOW_DISSECT_RET_OUT_BAD = 1,
-	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
-	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
-	FLOW_DISSECT_RET_CONTINUE = 4,
-};
-
-struct flow_dissector_key_basic {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-};
-
-struct flow_dissector_key_tags {
-	u32 flow_label;
-};
-
-struct flow_dissector_key_vlan {
-	union {
-		struct {
-			u16 vlan_id: 12;
-			u16 vlan_dei: 1;
-			u16 vlan_priority: 3;
-		};
-		__be16 vlan_tci;
-	};
-	__be16 vlan_tpid;
-};
-
-struct flow_dissector_key_mpls {
-	u32 mpls_ttl: 8;
-	u32 mpls_bos: 1;
-	u32 mpls_tc: 3;
-	u32 mpls_label: 20;
-};
-
-struct flow_dissector_key_enc_opts {
-	u8 data[255];
-	u8 len;
-	__be16 dst_opt_type;
-};
-
-struct flow_dissector_key_keyid {
-	__be32 keyid;
-};
-
-struct flow_dissector_key_ipv4_addrs {
-	__be32 src;
-	__be32 dst;
-};
-
-struct flow_dissector_key_ipv6_addrs {
-	struct in6_addr src;
-	struct in6_addr dst;
-};
-
-struct flow_dissector_key_tipc {
-	__be32 key;
-};
-
-struct flow_dissector_key_addrs {
-	union {
-		struct flow_dissector_key_ipv4_addrs v4addrs;
-		struct flow_dissector_key_ipv6_addrs v6addrs;
-		struct flow_dissector_key_tipc tipckey;
-	};
-};
-
-struct flow_dissector_key_arp {
-	__u32 sip;
-	__u32 tip;
-	__u8 op;
-	unsigned char sha[6];
-	unsigned char tha[6];
-};
-
-struct flow_dissector_key_ports {
-	union {
-		__be32 ports;
-		struct {
-			__be16 src;
-			__be16 dst;
-		};
-	};
-};
-
-struct flow_dissector_key_icmp {
-	struct {
-		u8 type;
-		u8 code;
-	};
-	u16 id;
-};
-
-struct flow_dissector_key_eth_addrs {
-	unsigned char dst[6];
-	unsigned char src[6];
-};
-
-struct flow_dissector_key_tcp {
-	__be16 flags;
-};
-
-struct flow_dissector_key_ip {
-	__u8 tos;
-	__u8 ttl;
-};
-
-struct flow_dissector_key_meta {
-	int ingress_ifindex;
-	u16 ingress_iftype;
-};
-
-struct flow_dissector_key_ct {
-	u16 ct_state;
-	u16 ct_zone;
-	u32 ct_mark;
-	u32 ct_labels[4];
-};
-
-struct flow_dissector_key {
-	enum flow_dissector_key_id key_id;
-	size_t offset;
-};
-
-struct flow_keys_basic {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-};
-
-struct flow_keys {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-	struct flow_dissector_key_tags tags;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_vlan cvlan;
-	struct flow_dissector_key_keyid keyid;
-	struct flow_dissector_key_ports ports;
-	struct flow_dissector_key_icmp icmp;
-	struct flow_dissector_key_addrs addrs;
-	int: 32;
-};
-
-struct flow_keys_digest {
-	u8 data[16];
-};
-
-struct xt_table_info;
-
-struct xt_table {
-	struct list_head list;
-	unsigned int valid_hooks;
-	struct xt_table_info *private;
-	struct module *me;
-	u_int8_t af;
-	int priority;
-	int (*table_init)(struct net *);
-	const char name[32];
-};
-
-enum bpf_ret_code {
-	BPF_OK = 0,
-	BPF_DROP = 2,
-	BPF_REDIRECT = 7,
-	BPF_LWT_REROUTE = 128,
-};
-
-enum {
-	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,
-	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
-};
-
-enum devlink_port_type {
-	DEVLINK_PORT_TYPE_NOTSET = 0,
-	DEVLINK_PORT_TYPE_AUTO = 1,
-	DEVLINK_PORT_TYPE_ETH = 2,
-	DEVLINK_PORT_TYPE_IB = 3,
-};
-
-enum devlink_port_flavour {
-	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
-	DEVLINK_PORT_FLAVOUR_CPU = 1,
-	DEVLINK_PORT_FLAVOUR_DSA = 2,
-	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
-	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
-};
-
-struct devlink_port_phys_attrs {
-	u32 port_number;
-	u32 split_subport_number;
-};
-
-struct devlink_port_pci_pf_attrs {
-	u16 pf;
-};
-
-struct devlink_port_pci_vf_attrs {
-	u16 pf;
-	u16 vf;
-};
-
-struct devlink_port_attrs {
-	u8 set: 1;
-	u8 split: 1;
-	u8 switch_port: 1;
-	enum devlink_port_flavour flavour;
-	struct netdev_phys_item_id switch_id;
-	union {
-		struct devlink_port_phys_attrs phys;
-		struct devlink_port_pci_pf_attrs pci_pf;
-		struct devlink_port_pci_vf_attrs pci_vf;
-	};
-};
-
-struct devlink;
-
-struct devlink_port {
-	struct list_head list;
-	struct list_head param_list;
-	struct devlink *devlink;
-	unsigned int index;
-	bool registered;
-	spinlock_t type_lock;
-	enum devlink_port_type type;
-	enum devlink_port_type desired_type;
-	void *type_dev;
-	struct devlink_port_attrs attrs;
-	struct delayed_work type_warn_dw;
-};
-
-struct ip_tunnel_key {
-	__be64 tun_id;
-	union {
-		struct {
-			__be32 src;
-			__be32 dst;
-		} ipv4;
-		struct {
-			struct in6_addr src;
-			struct in6_addr dst;
-		} ipv6;
-	} u;
-	__be16 tun_flags;
-	u8 tos;
-	u8 ttl;
-	__be32 label;
-	__be16 tp_src;
-	__be16 tp_dst;
-};
-
-struct dst_cache_pcpu;
-
-struct dst_cache {
-	struct dst_cache_pcpu *cache;
-	long unsigned int reset_ts;
-};
-
-struct ip_tunnel_info {
-	struct ip_tunnel_key key;
-	struct dst_cache dst_cache;
-	u8 options_len;
-	u8 mode;
-};
-
-struct lwtunnel_state {
-	__u16 type;
-	__u16 flags;
-	__u16 headroom;
-	atomic_t refcnt;
-	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
-	int (*orig_input)(struct sk_buff *);
-	struct callback_head rcu;
-	__u8 data[0];
-};
-
-union tcp_word_hdr {
-	struct tcphdr hdr;
-	__be32 words[5];
-};
-
-enum devlink_sb_pool_type {
-	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
-	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
-};
-
-enum devlink_sb_threshold_type {
-	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
-	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
-};
-
-enum devlink_eswitch_encap_mode {
-	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
-	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
-};
-
-enum devlink_trap_action {
-	DEVLINK_TRAP_ACTION_DROP = 0,
-	DEVLINK_TRAP_ACTION_TRAP = 1,
-};
-
-enum devlink_trap_type {
-	DEVLINK_TRAP_TYPE_DROP = 0,
-	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
-};
-
-enum devlink_dpipe_field_mapping_type {
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
-};
-
-struct devlink_dpipe_headers;
-
-struct devlink_ops;
-
-struct devlink {
-	struct list_head list;
-	struct list_head port_list;
-	struct list_head sb_list;
-	struct list_head dpipe_table_list;
-	struct list_head resource_list;
-	struct list_head param_list;
-	struct list_head region_list;
-	u32 snapshot_id;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-	struct devlink_dpipe_headers *dpipe_headers;
-	struct list_head trap_list;
-	struct list_head trap_group_list;
-	const struct devlink_ops *ops;
-	struct device *dev;
-	possible_net_t _net;
-	struct mutex lock;
-	u8 reload_failed: 1;
-	u8 reload_enabled: 1;
-	u8 registered: 1;
-	long: 61;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct devlink_dpipe_header;
-
-struct devlink_dpipe_headers {
-	struct devlink_dpipe_header **headers;
-	unsigned int headers_count;
-};
-
-struct devlink_info_req;
-
-struct devlink_sb_pool_info;
-
-struct devlink_trap;
-
-struct devlink_trap_group;
-
-struct devlink_ops {
-	int (*reload_down)(struct devlink *, bool, struct netlink_ext_ack *);
-	int (*reload_up)(struct devlink *, struct netlink_ext_ack *);
-	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
-	int (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);
-	int (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);
-	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
-	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
-	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
-	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
-	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
-	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
-	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
-	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
-	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
-	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
-	int (*eswitch_mode_get)(struct devlink *, u16 *);
-	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
-	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
-	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
-	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
-	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
-	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*flash_update)(struct devlink *, const char *, const char *, struct netlink_ext_ack *);
-	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
-	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
-	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action);
-	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
-};
-
-struct devlink_sb_pool_info {
-	enum devlink_sb_pool_type pool_type;
-	u32 size;
-	enum devlink_sb_threshold_type threshold_type;
-	u32 cell_size;
-};
-
-struct devlink_dpipe_field {
-	const char *name;
-	unsigned int id;
-	unsigned int bitwidth;
-	enum devlink_dpipe_field_mapping_type mapping_type;
-};
-
-struct devlink_dpipe_header {
-	const char *name;
-	unsigned int id;
-	struct devlink_dpipe_field *fields;
-	unsigned int fields_count;
-	bool global;
-};
-
-struct devlink_trap_group {
-	const char *name;
-	u16 id;
-	bool generic;
-};
-
-struct devlink_trap {
-	enum devlink_trap_type type;
-	enum devlink_trap_action init_action;
-	bool generic;
-	u16 id;
-	const char *name;
-	struct devlink_trap_group group;
-	u32 metadata_cap;
-};
-
-struct arphdr {
-	__be16 ar_hrd;
-	__be16 ar_pro;
-	unsigned char ar_hln;
-	unsigned char ar_pln;
-	__be16 ar_op;
-};
-
-struct fib_info;
-
-struct fib_nh {
-	struct fib_nh_common nh_common;
-	struct hlist_node nh_hash;
-	struct fib_info *nh_parent;
-	__be32 nh_saddr;
-	int nh_saddr_genid;
-};
-
-struct fib_info {
-	struct hlist_node fib_hash;
-	struct hlist_node fib_lhash;
-	struct list_head nh_list;
-	struct net *fib_net;
-	int fib_treeref;
-	refcount_t fib_clntref;
-	unsigned int fib_flags;
-	unsigned char fib_dead;
-	unsigned char fib_protocol;
-	unsigned char fib_scope;
-	unsigned char fib_type;
-	__be32 fib_prefsrc;
-	u32 fib_tb_id;
-	u32 fib_priority;
-	struct dst_metrics *fib_metrics;
-	int fib_nhs;
-	bool fib_nh_is_v6;
-	bool nh_updated;
-	struct nexthop *nh;
-	struct callback_head rcu;
-	struct fib_nh fib_nh[0];
-};
-
-struct nh_info;
-
-struct nh_group;
-
-struct nexthop {
-	struct rb_node rb_node;
-	struct list_head fi_list;
-	struct list_head f6i_list;
-	struct list_head grp_list;
-	struct net *net;
-	u32 id;
-	u8 protocol;
-	u8 nh_flags;
-	bool is_group;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	union {
-		struct nh_info *nh_info;
-		struct nh_group *nh_grp;
-	};
-};
-
-struct nh_info {
-	struct hlist_node dev_hash;
-	struct nexthop *nh_parent;
-	u8 family;
-	bool reject_nh;
-	union {
-		struct fib_nh_common fib_nhc;
-		struct fib_nh fib_nh;
-		struct fib6_nh fib6_nh;
-	};
-};
-
-struct nh_grp_entry {
-	struct nexthop *nh;
-	u8 weight;
-	atomic_t upper_bound;
-	struct list_head nh_list;
-	struct nexthop *nh_parent;
-};
-
-struct nh_group {
-	u16 num_nh;
-	bool mpath;
-	bool has_v4;
-	struct nh_grp_entry nh_entries[0];
-};
-
-struct ip_tunnel_encap {
-	u16 type;
-	u16 flags;
-	__be16 sport;
-	__be16 dport;
-};
-
-struct ip_tunnel_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
-	int (*err_handler)(struct sk_buff *, u32);
-};
-
-enum metadata_type {
-	METADATA_IP_TUNNEL = 0,
-	METADATA_HW_PORT_MUX = 1,
-};
-
-struct hw_port_info {
-	struct net_device *lower_dev;
-	u32 port_id;
-};
-
-struct metadata_dst {
-	struct dst_entry dst;
-	enum metadata_type type;
-	union {
-		struct ip_tunnel_info tun_info;
-		struct hw_port_info port_info;
-	} u;
-};
-
-struct gre_base_hdr {
-	__be16 flags;
-	__be16 protocol;
-};
-
-struct gre_full_hdr {
-	struct gre_base_hdr fixed_header;
-	__be16 csum;
-	__be16 reserved1;
-	__be32 key;
-	__be32 seq;
-};
-
-struct pptp_gre_header {
-	struct gre_base_hdr gre_hd;
-	__be16 payload_len;
-	__be16 call_id;
-	__be32 seq;
-	__be32 ack;
-};
-
-struct tipc_basic_hdr {
-	__be32 w[4];
-};
-
-struct icmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 checksum;
-	union {
-		struct {
-			__be16 id;
-			__be16 sequence;
-		} echo;
-		__be32 gateway;
-		struct {
-			__be16 __unused;
-			__be16 mtu;
-		} frag;
-		__u8 reserved[4];
-	} un;
-};
-
-enum l2tp_debug_flags {
-	L2TP_MSG_DEBUG = 1,
-	L2TP_MSG_CONTROL = 2,
-	L2TP_MSG_SEQ = 4,
-	L2TP_MSG_DATA = 8,
-};
-
-struct pppoe_tag {
-	__be16 tag_type;
-	__be16 tag_len;
-	char tag_data[0];
-};
-
-struct pppoe_hdr {
-	__u8 type: 4;
-	__u8 ver: 4;
-	__u8 code;
-	__be16 sid;
-	__be16 length;
-	struct pppoe_tag tag[0];
-};
-
-struct mpls_label {
-	__be32 entry;
-};
-
-enum batadv_packettype {
-	BATADV_IV_OGM = 0,
-	BATADV_BCAST = 1,
-	BATADV_CODED = 2,
-	BATADV_ELP = 3,
-	BATADV_OGM2 = 4,
-	BATADV_UNICAST = 64,
-	BATADV_UNICAST_FRAG = 65,
-	BATADV_UNICAST_4ADDR = 66,
-	BATADV_ICMP = 67,
-	BATADV_UNICAST_TVLV = 68,
-};
-
-struct batadv_unicast_packet {
-	__u8 packet_type;
-	__u8 version;
-	__u8 ttl;
-	__u8 ttvn;
-	__u8 dest[6];
-};
-
-struct xt_table_info {
-	unsigned int size;
-	unsigned int number;
-	unsigned int initial_entries;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int stacksize;
-	void ***jumpstack;
-	unsigned char entries[0];
-};
-
-struct nf_conntrack_l4proto {
-	u_int8_t l4proto;
-	bool allow_clash;
-	u16 nlattr_size;
-	bool (*can_early_drop)(const struct nf_conn *);
-	int (*to_nlattr)(struct sk_buff *, struct nlattr *, struct nf_conn *);
-	int (*from_nlattr)(struct nlattr **, struct nf_conn *);
-	int (*tuple_to_nlattr)(struct sk_buff *, const struct nf_conntrack_tuple *);
-	unsigned int (*nlattr_tuple_size)();
-	int (*nlattr_to_tuple)(struct nlattr **, struct nf_conntrack_tuple *);
-	const struct nla_policy *nla_policy;
-	struct {
-		int (*nlattr_to_obj)(struct nlattr **, struct net *, void *);
-		int (*obj_to_nlattr)(struct sk_buff *, const void *);
-		u16 obj_size;
-		u16 nlattr_max;
-		const struct nla_policy *nla_policy;
-	} ctnl_timeout;
-	void (*print_conntrack)(struct seq_file *, struct nf_conn *);
-};
-
-struct nf_ct_ext {
-	u8 offset[4];
-	u8 len;
-	char data[0];
-};
-
-enum nf_ct_ext_id {
-	NF_CT_EXT_HELPER = 0,
-	NF_CT_EXT_NAT = 1,
-	NF_CT_EXT_SEQADJ = 2,
-	NF_CT_EXT_ACCT = 3,
-	NF_CT_EXT_NUM = 4,
-};
-
-struct nf_conn_labels {
-	long unsigned int bits[2];
-};
-
-struct _flow_keys_digest_data {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-	__be32 ports;
-	__be32 src;
-	__be32 dst;
-};
-
-enum {
-	IF_OPER_UNKNOWN = 0,
-	IF_OPER_NOTPRESENT = 1,
-	IF_OPER_DOWN = 2,
-	IF_OPER_LOWERLAYERDOWN = 3,
-	IF_OPER_TESTING = 4,
-	IF_OPER_DORMANT = 5,
-	IF_OPER_UP = 6,
-};
-
-enum nf_dev_hooks {
-	NF_NETDEV_INGRESS = 0,
-	NF_NETDEV_NUMHOOKS = 1,
-};
-
-struct ifbond {
-	__s32 bond_mode;
-	__s32 num_slaves;
-	__s32 miimon;
-};
-
-typedef struct ifbond ifbond;
-
-struct ifslave {
-	__s32 slave_id;
-	char slave_name[16];
-	__s8 link;
-	__s8 state;
-	__u32 link_failure_count;
-};
-
-typedef struct ifslave ifslave;
-
-struct netdev_boot_setup {
-	char name[16];
-	struct ifmap map;
-};
-
-enum {
-	NAPIF_STATE_SCHED = 1,
-	NAPIF_STATE_MISSED = 2,
-	NAPIF_STATE_DISABLE = 4,
-	NAPIF_STATE_NPSVC = 8,
-	NAPIF_STATE_HASHED = 16,
-	NAPIF_STATE_NO_BUSY_POLL = 32,
-	NAPIF_STATE_IN_BUSY_POLL = 64,
-};
-
-enum gro_result {
-	GRO_MERGED = 0,
-	GRO_MERGED_FREE = 1,
-	GRO_HELD = 2,
-	GRO_NORMAL = 3,
-	GRO_DROP = 4,
-	GRO_CONSUMED = 5,
-};
-
-typedef enum gro_result gro_result_t;
-
-struct udp_tunnel_info {
-	short unsigned int type;
-	sa_family_t sa_family;
-	__be16 port;
-};
-
-struct packet_type {
-	__be16 type;
-	bool ignore_outgoing;
-	struct net_device *dev;
-	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
-	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
-	bool (*id_match)(struct packet_type *, struct sock *);
-	void *af_packet_priv;
-	struct list_head list;
-};
-
-struct packet_offload {
-	__be16 type;
-	u16 priority;
-	struct offload_callbacks callbacks;
-	struct list_head list;
-};
-
-struct netdev_notifier_info_ext {
-	struct netdev_notifier_info info;
-	union {
-		u32 mtu;
-	} ext;
-};
-
-struct netdev_notifier_change_info {
-	struct netdev_notifier_info info;
-	unsigned int flags_changed;
-};
-
-struct netdev_notifier_changeupper_info {
-	struct netdev_notifier_info info;
-	struct net_device *upper_dev;
-	bool master;
-	bool linking;
-	void *upper_info;
-};
-
-struct netdev_notifier_changelowerstate_info {
-	struct netdev_notifier_info info;
-	void *lower_state_info;
-};
-
-struct netdev_notifier_pre_changeaddr_info {
-	struct netdev_notifier_info info;
-	const unsigned char *dev_addr;
-};
-
-typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
-
-struct netdev_bonding_info {
-	ifslave slave;
-	ifbond master;
-};
-
-struct netdev_notifier_bonding_info {
-	struct netdev_notifier_info info;
-	struct netdev_bonding_info bonding_info;
-};
-
-enum qdisc_state_t {
-	__QDISC_STATE_SCHED = 0,
-	__QDISC_STATE_DEACTIVATED = 1,
-};
-
-struct tcf_walker {
-	int stop;
-	int skip;
-	int count;
-	bool nonempty;
-	long unsigned int cookie;
-	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
-};
-
-struct udp_hslot;
-
-struct udp_table {
-	struct udp_hslot *hash;
-	struct udp_hslot *hash2;
-	unsigned int mask;
-	unsigned int log;
-};
-
-enum {
-	IPV4_DEVCONF_FORWARDING = 1,
-	IPV4_DEVCONF_MC_FORWARDING = 2,
-	IPV4_DEVCONF_PROXY_ARP = 3,
-	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
-	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
-	IPV4_DEVCONF_SEND_REDIRECTS = 6,
-	IPV4_DEVCONF_SHARED_MEDIA = 7,
-	IPV4_DEVCONF_RP_FILTER = 8,
-	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
-	IPV4_DEVCONF_BOOTP_RELAY = 10,
-	IPV4_DEVCONF_LOG_MARTIANS = 11,
-	IPV4_DEVCONF_TAG = 12,
-	IPV4_DEVCONF_ARPFILTER = 13,
-	IPV4_DEVCONF_MEDIUM_ID = 14,
-	IPV4_DEVCONF_NOXFRM = 15,
-	IPV4_DEVCONF_NOPOLICY = 16,
-	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
-	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
-	IPV4_DEVCONF_ARP_IGNORE = 19,
-	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
-	IPV4_DEVCONF_ARP_ACCEPT = 21,
-	IPV4_DEVCONF_ARP_NOTIFY = 22,
-	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
-	IPV4_DEVCONF_SRC_VMARK = 24,
-	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
-	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
-	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
-	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
-	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
-	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
-	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
-	IPV4_DEVCONF_BC_FORWARDING = 32,
-	__IPV4_DEVCONF_MAX = 33,
-};
-
-struct udp_hslot {
-	struct hlist_head head;
-	int count;
-	spinlock_t lock;
-};
-
-struct dev_kfree_skb_cb {
-	enum skb_free_reason reason;
-};
-
-struct netdev_adjacent {
-	struct net_device *dev;
-	bool master;
-	bool ignore;
-	u16 ref_nr;
-	void *private;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-typedef struct sk_buff *pto_T_____23;
-
-typedef __u32 pao_T_____9;
-
-typedef u16 pao_T_____10;
-
-struct ethtool_value {
-	__u32 cmd;
-	__u32 data;
-};
-
-enum tunable_id {
-	ETHTOOL_ID_UNSPEC = 0,
-	ETHTOOL_RX_COPYBREAK = 1,
-	ETHTOOL_TX_COPYBREAK = 2,
-	ETHTOOL_PFC_PREVENTION_TOUT = 3,
-	__ETHTOOL_TUNABLE_COUNT = 4,
-};
-
-enum tunable_type_id {
-	ETHTOOL_TUNABLE_UNSPEC = 0,
-	ETHTOOL_TUNABLE_U8 = 1,
-	ETHTOOL_TUNABLE_U16 = 2,
-	ETHTOOL_TUNABLE_U32 = 3,
-	ETHTOOL_TUNABLE_U64 = 4,
-	ETHTOOL_TUNABLE_STRING = 5,
-	ETHTOOL_TUNABLE_S8 = 6,
-	ETHTOOL_TUNABLE_S16 = 7,
-	ETHTOOL_TUNABLE_S32 = 8,
-	ETHTOOL_TUNABLE_S64 = 9,
-};
-
-enum phy_tunable_id {
-	ETHTOOL_PHY_ID_UNSPEC = 0,
-	ETHTOOL_PHY_DOWNSHIFT = 1,
-	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
-	ETHTOOL_PHY_EDPD = 3,
-	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
-};
-
-struct ethtool_gstrings {
-	__u32 cmd;
-	__u32 string_set;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_sset_info {
-	__u32 cmd;
-	__u32 reserved;
-	__u64 sset_mask;
-	__u32 data[0];
-};
-
-struct ethtool_perm_addr {
-	__u32 cmd;
-	__u32 size;
-	__u8 data[0];
-};
-
-enum ethtool_flags {
-	ETH_FLAG_TXVLAN = 128,
-	ETH_FLAG_RXVLAN = 256,
-	ETH_FLAG_LRO = 32768,
-	ETH_FLAG_NTUPLE = 134217728,
-	ETH_FLAG_RXHASH = 268435456,
-};
-
-struct ethtool_rxfh {
-	__u32 cmd;
-	__u32 rss_context;
-	__u32 indir_size;
-	__u32 key_size;
-	__u8 hfunc;
-	__u8 rsvd8[3];
-	__u32 rsvd32;
-	__u32 rss_config[0];
-};
-
-struct ethtool_get_features_block {
-	__u32 available;
-	__u32 requested;
-	__u32 active;
-	__u32 never_changed;
-};
-
-struct ethtool_gfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_get_features_block features[0];
-};
-
-struct ethtool_set_features_block {
-	__u32 valid;
-	__u32 requested;
-};
-
-struct ethtool_sfeatures {
-	__u32 cmd;
-	__u32 size;
-	struct ethtool_set_features_block features[0];
-};
-
-enum ethtool_sfeatures_retval_bits {
-	ETHTOOL_F_UNSUPPORTED__BIT = 0,
-	ETHTOOL_F_WISH__BIT = 1,
-	ETHTOOL_F_COMPAT__BIT = 2,
-};
-
-struct ethtool_per_queue_op {
-	__u32 cmd;
-	__u32 sub_command;
-	__u32 queue_mask[128];
-	char data[0];
-};
-
-struct flow_rule;
-
-struct ethtool_rx_flow_rule {
-	struct flow_rule *rule;
-	long unsigned int priv[0];
-};
-
-struct flow_match {
-	struct flow_dissector *dissector;
-	void *mask;
-	void *key;
-};
-
-enum flow_action_id {
-	FLOW_ACTION_ACCEPT = 0,
-	FLOW_ACTION_DROP = 1,
-	FLOW_ACTION_TRAP = 2,
-	FLOW_ACTION_GOTO = 3,
-	FLOW_ACTION_REDIRECT = 4,
-	FLOW_ACTION_MIRRED = 5,
-	FLOW_ACTION_REDIRECT_INGRESS = 6,
-	FLOW_ACTION_MIRRED_INGRESS = 7,
-	FLOW_ACTION_VLAN_PUSH = 8,
-	FLOW_ACTION_VLAN_POP = 9,
-	FLOW_ACTION_VLAN_MANGLE = 10,
-	FLOW_ACTION_TUNNEL_ENCAP = 11,
-	FLOW_ACTION_TUNNEL_DECAP = 12,
-	FLOW_ACTION_MANGLE = 13,
-	FLOW_ACTION_ADD = 14,
-	FLOW_ACTION_CSUM = 15,
-	FLOW_ACTION_MARK = 16,
-	FLOW_ACTION_PTYPE = 17,
-	FLOW_ACTION_WAKE = 18,
-	FLOW_ACTION_QUEUE = 19,
-	FLOW_ACTION_SAMPLE = 20,
-	FLOW_ACTION_POLICE = 21,
-	FLOW_ACTION_CT = 22,
-	FLOW_ACTION_MPLS_PUSH = 23,
-	FLOW_ACTION_MPLS_POP = 24,
-	FLOW_ACTION_MPLS_MANGLE = 25,
-	NUM_FLOW_ACTIONS = 26,
-};
-
-typedef void (*action_destr)(void *);
-
-enum flow_action_mangle_base {
-	FLOW_ACT_MANGLE_UNSPEC = 0,
-	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
-	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
-	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
-};
-
-struct psample_group;
-
-struct flow_action_entry {
-	enum flow_action_id id;
-	action_destr destructor;
-	void *destructor_priv;
-	union {
-		u32 chain_index;
-		struct net_device *dev;
-		struct {
-			u16 vid;
-			__be16 proto;
-			u8 prio;
-		} vlan;
-		struct {
-			enum flow_action_mangle_base htype;
-			u32 offset;
-			u32 mask;
-			u32 val;
-		} mangle;
-		struct ip_tunnel_info *tunnel;
-		u32 csum_flags;
-		u32 mark;
-		u16 ptype;
-		struct {
-			u32 ctx;
-			u32 index;
-			u8 vf;
-		} queue;
-		struct {
-			struct psample_group *psample_group;
-			u32 rate;
-			u32 trunc_size;
-			bool truncate;
-		} sample;
-		struct {
-			s64 burst;
-			u64 rate_bytes_ps;
-		} police;
-		struct {
-			int action;
-			u16 zone;
-		} ct;
-		struct {
-			u32 label;
-			__be16 proto;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_push;
-		struct {
-			__be16 proto;
-		} mpls_pop;
-		struct {
-			u32 label;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_mangle;
-	};
-};
-
-struct flow_action {
-	unsigned int num_entries;
-	struct flow_action_entry entries[0];
-};
-
-struct flow_rule {
-	struct flow_match match;
-	struct flow_action action;
-};
-
-struct ethtool_rx_flow_spec_input {
-	const struct ethtool_rx_flow_spec *fs;
-	u32 rss_ctx;
-};
-
-struct ethtool_link_usettings {
-	struct ethtool_link_settings base;
-	struct {
-		__u32 supported[3];
-		__u32 advertising[3];
-		__u32 lp_advertising[3];
-	} link_modes;
-};
-
-struct ethtool_rx_flow_key {
-	struct flow_dissector_key_basic basic;
-	union {
-		struct flow_dissector_key_ipv4_addrs ipv4;
-		struct flow_dissector_key_ipv6_addrs ipv6;
-	};
-	struct flow_dissector_key_ports tp;
-	struct flow_dissector_key_ip ip;
-	struct flow_dissector_key_vlan vlan;
-	struct flow_dissector_key_eth_addrs eth_addrs;
-	long: 48;
-};
-
-struct ethtool_rx_flow_match {
-	struct flow_dissector dissector;
-	int: 32;
-	struct ethtool_rx_flow_key key;
-	struct ethtool_rx_flow_key mask;
-};
-
-struct xfrm_dst {
-	union {
-		struct dst_entry dst;
-		struct rtable rt;
-		struct rt6_info rt6;
-	} u;
-	struct dst_entry *route;
-	struct dst_entry *child;
-	struct dst_entry *path;
-	struct xfrm_policy *pols[2];
-	int num_pols;
-	int num_xfrms;
-	u32 xfrm_genid;
-	u32 policy_genid;
-	u32 route_mtu_cached;
-	u32 child_mtu_cached;
-	u32 route_cookie;
-	u32 path_cookie;
-};
-
-enum {
-	NDA_UNSPEC = 0,
-	NDA_DST = 1,
-	NDA_LLADDR = 2,
-	NDA_CACHEINFO = 3,
-	NDA_PROBES = 4,
-	NDA_VLAN = 5,
-	NDA_PORT = 6,
-	NDA_VNI = 7,
-	NDA_IFINDEX = 8,
-	NDA_MASTER = 9,
-	NDA_LINK_NETNSID = 10,
-	NDA_SRC_VNI = 11,
-	NDA_PROTOCOL = 12,
-	__NDA_MAX = 13,
-};
-
-struct nda_cacheinfo {
-	__u32 ndm_confirmed;
-	__u32 ndm_used;
-	__u32 ndm_updated;
-	__u32 ndm_refcnt;
-};
-
-struct ndt_stats {
-	__u64 ndts_allocs;
-	__u64 ndts_destroys;
-	__u64 ndts_hash_grows;
-	__u64 ndts_res_failed;
-	__u64 ndts_lookups;
-	__u64 ndts_hits;
-	__u64 ndts_rcv_probes_mcast;
-	__u64 ndts_rcv_probes_ucast;
-	__u64 ndts_periodic_gc_runs;
-	__u64 ndts_forced_gc_runs;
-	__u64 ndts_table_fulls;
-};
-
-enum {
-	NDTPA_UNSPEC = 0,
-	NDTPA_IFINDEX = 1,
-	NDTPA_REFCNT = 2,
-	NDTPA_REACHABLE_TIME = 3,
-	NDTPA_BASE_REACHABLE_TIME = 4,
-	NDTPA_RETRANS_TIME = 5,
-	NDTPA_GC_STALETIME = 6,
-	NDTPA_DELAY_PROBE_TIME = 7,
-	NDTPA_QUEUE_LEN = 8,
-	NDTPA_APP_PROBES = 9,
-	NDTPA_UCAST_PROBES = 10,
-	NDTPA_MCAST_PROBES = 11,
-	NDTPA_ANYCAST_DELAY = 12,
-	NDTPA_PROXY_DELAY = 13,
-	NDTPA_PROXY_QLEN = 14,
-	NDTPA_LOCKTIME = 15,
-	NDTPA_QUEUE_LENBYTES = 16,
-	NDTPA_MCAST_REPROBES = 17,
-	NDTPA_PAD = 18,
-	__NDTPA_MAX = 19,
-};
-
-struct ndtmsg {
-	__u8 ndtm_family;
-	__u8 ndtm_pad1;
-	__u16 ndtm_pad2;
-};
-
-struct ndt_config {
-	__u16 ndtc_key_len;
-	__u16 ndtc_entry_size;
-	__u32 ndtc_entries;
-	__u32 ndtc_last_flush;
-	__u32 ndtc_last_rand;
-	__u32 ndtc_hash_rnd;
-	__u32 ndtc_hash_mask;
-	__u32 ndtc_hash_chain_gc;
-	__u32 ndtc_proxy_qlen;
-};
-
-enum {
-	NDTA_UNSPEC = 0,
-	NDTA_NAME = 1,
-	NDTA_THRESH1 = 2,
-	NDTA_THRESH2 = 3,
-	NDTA_THRESH3 = 4,
-	NDTA_CONFIG = 5,
-	NDTA_PARMS = 6,
-	NDTA_STATS = 7,
-	NDTA_GC_INTERVAL = 8,
-	NDTA_PAD = 9,
-	__NDTA_MAX = 10,
-};
-
-enum {
-	RTN_UNSPEC = 0,
-	RTN_UNICAST = 1,
-	RTN_LOCAL = 2,
-	RTN_BROADCAST = 3,
-	RTN_ANYCAST = 4,
-	RTN_MULTICAST = 5,
-	RTN_BLACKHOLE = 6,
-	RTN_UNREACHABLE = 7,
-	RTN_PROHIBIT = 8,
-	RTN_THROW = 9,
-	RTN_NAT = 10,
-	RTN_XRESOLVE = 11,
-	__RTN_MAX = 12,
-};
-
-enum {
-	NEIGH_ARP_TABLE = 0,
-	NEIGH_ND_TABLE = 1,
-	NEIGH_DN_TABLE = 2,
-	NEIGH_NR_TABLES = 3,
-	NEIGH_LINK_TABLE = 3,
-};
-
-struct neigh_seq_state {
-	struct seq_net_private p;
-	struct neigh_table *tbl;
-	struct neigh_hash_table *nht;
-	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
-	unsigned int bucket;
-	unsigned int flags;
-};
-
-struct neighbour_cb {
-	long unsigned int sched_next;
-	unsigned int flags;
-};
-
-enum netevent_notif_type {
-	NETEVENT_NEIGH_UPDATE = 1,
-	NETEVENT_REDIRECT = 2,
-	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
-	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
-	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
-	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
-};
-
-struct neigh_dump_filter {
-	int master_idx;
-	int dev_idx;
-};
-
-struct neigh_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table neigh_vars[21];
-};
-
-struct netlink_dump_control {
-	int (*start)(struct netlink_callback *);
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	void *data;
-	struct module *module;
-	u16 min_dump_alloc;
-};
-
-struct rtnl_link_stats {
-	__u32 rx_packets;
-	__u32 tx_packets;
-	__u32 rx_bytes;
-	__u32 tx_bytes;
-	__u32 rx_errors;
-	__u32 tx_errors;
-	__u32 rx_dropped;
-	__u32 tx_dropped;
-	__u32 multicast;
-	__u32 collisions;
-	__u32 rx_length_errors;
-	__u32 rx_over_errors;
-	__u32 rx_crc_errors;
-	__u32 rx_frame_errors;
-	__u32 rx_fifo_errors;
-	__u32 rx_missed_errors;
-	__u32 tx_aborted_errors;
-	__u32 tx_carrier_errors;
-	__u32 tx_fifo_errors;
-	__u32 tx_heartbeat_errors;
-	__u32 tx_window_errors;
-	__u32 rx_compressed;
-	__u32 tx_compressed;
-	__u32 rx_nohandler;
-};
-
-struct rtnl_link_ifmap {
-	__u64 mem_start;
-	__u64 mem_end;
-	__u64 base_addr;
-	__u16 irq;
-	__u8 dma;
-	__u8 port;
-};
-
-enum {
-	IFLA_UNSPEC = 0,
-	IFLA_ADDRESS = 1,
-	IFLA_BROADCAST = 2,
-	IFLA_IFNAME = 3,
-	IFLA_MTU = 4,
-	IFLA_LINK = 5,
-	IFLA_QDISC = 6,
-	IFLA_STATS = 7,
-	IFLA_COST = 8,
-	IFLA_PRIORITY = 9,
-	IFLA_MASTER = 10,
-	IFLA_WIRELESS = 11,
-	IFLA_PROTINFO = 12,
-	IFLA_TXQLEN = 13,
-	IFLA_MAP = 14,
-	IFLA_WEIGHT = 15,
-	IFLA_OPERSTATE = 16,
-	IFLA_LINKMODE = 17,
-	IFLA_LINKINFO = 18,
-	IFLA_NET_NS_PID = 19,
-	IFLA_IFALIAS = 20,
-	IFLA_NUM_VF = 21,
-	IFLA_VFINFO_LIST = 22,
-	IFLA_STATS64 = 23,
-	IFLA_VF_PORTS = 24,
-	IFLA_PORT_SELF = 25,
-	IFLA_AF_SPEC = 26,
-	IFLA_GROUP = 27,
-	IFLA_NET_NS_FD = 28,
-	IFLA_EXT_MASK = 29,
-	IFLA_PROMISCUITY = 30,
-	IFLA_NUM_TX_QUEUES = 31,
-	IFLA_NUM_RX_QUEUES = 32,
-	IFLA_CARRIER = 33,
-	IFLA_PHYS_PORT_ID = 34,
-	IFLA_CARRIER_CHANGES = 35,
-	IFLA_PHYS_SWITCH_ID = 36,
-	IFLA_LINK_NETNSID = 37,
-	IFLA_PHYS_PORT_NAME = 38,
-	IFLA_PROTO_DOWN = 39,
-	IFLA_GSO_MAX_SEGS = 40,
-	IFLA_GSO_MAX_SIZE = 41,
-	IFLA_PAD = 42,
-	IFLA_XDP = 43,
-	IFLA_EVENT = 44,
-	IFLA_NEW_NETNSID = 45,
-	IFLA_IF_NETNSID = 46,
-	IFLA_TARGET_NETNSID = 46,
-	IFLA_CARRIER_UP_COUNT = 47,
-	IFLA_CARRIER_DOWN_COUNT = 48,
-	IFLA_NEW_IFINDEX = 49,
-	IFLA_MIN_MTU = 50,
-	IFLA_MAX_MTU = 51,
-	IFLA_PROP_LIST = 52,
-	IFLA_ALT_IFNAME = 53,
-	__IFLA_MAX = 54,
-};
-
-enum {
-	IFLA_BRPORT_UNSPEC = 0,
-	IFLA_BRPORT_STATE = 1,
-	IFLA_BRPORT_PRIORITY = 2,
-	IFLA_BRPORT_COST = 3,
-	IFLA_BRPORT_MODE = 4,
-	IFLA_BRPORT_GUARD = 5,
-	IFLA_BRPORT_PROTECT = 6,
-	IFLA_BRPORT_FAST_LEAVE = 7,
-	IFLA_BRPORT_LEARNING = 8,
-	IFLA_BRPORT_UNICAST_FLOOD = 9,
-	IFLA_BRPORT_PROXYARP = 10,
-	IFLA_BRPORT_LEARNING_SYNC = 11,
-	IFLA_BRPORT_PROXYARP_WIFI = 12,
-	IFLA_BRPORT_ROOT_ID = 13,
-	IFLA_BRPORT_BRIDGE_ID = 14,
-	IFLA_BRPORT_DESIGNATED_PORT = 15,
-	IFLA_BRPORT_DESIGNATED_COST = 16,
-	IFLA_BRPORT_ID = 17,
-	IFLA_BRPORT_NO = 18,
-	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
-	IFLA_BRPORT_CONFIG_PENDING = 20,
-	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
-	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
-	IFLA_BRPORT_HOLD_TIMER = 23,
-	IFLA_BRPORT_FLUSH = 24,
-	IFLA_BRPORT_MULTICAST_ROUTER = 25,
-	IFLA_BRPORT_PAD = 26,
-	IFLA_BRPORT_MCAST_FLOOD = 27,
-	IFLA_BRPORT_MCAST_TO_UCAST = 28,
-	IFLA_BRPORT_VLAN_TUNNEL = 29,
-	IFLA_BRPORT_BCAST_FLOOD = 30,
-	IFLA_BRPORT_GROUP_FWD_MASK = 31,
-	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
-	IFLA_BRPORT_ISOLATED = 33,
-	IFLA_BRPORT_BACKUP_PORT = 34,
-	__IFLA_BRPORT_MAX = 35,
-};
-
-enum {
-	IFLA_INFO_UNSPEC = 0,
-	IFLA_INFO_KIND = 1,
-	IFLA_INFO_DATA = 2,
-	IFLA_INFO_XSTATS = 3,
-	IFLA_INFO_SLAVE_KIND = 4,
-	IFLA_INFO_SLAVE_DATA = 5,
-	__IFLA_INFO_MAX = 6,
-};
-
-enum {
-	IFLA_VF_INFO_UNSPEC = 0,
-	IFLA_VF_INFO = 1,
-	__IFLA_VF_INFO_MAX = 2,
-};
-
-enum {
-	IFLA_VF_UNSPEC = 0,
-	IFLA_VF_MAC = 1,
-	IFLA_VF_VLAN = 2,
-	IFLA_VF_TX_RATE = 3,
-	IFLA_VF_SPOOFCHK = 4,
-	IFLA_VF_LINK_STATE = 5,
-	IFLA_VF_RATE = 6,
-	IFLA_VF_RSS_QUERY_EN = 7,
-	IFLA_VF_STATS = 8,
-	IFLA_VF_TRUST = 9,
-	IFLA_VF_IB_NODE_GUID = 10,
-	IFLA_VF_IB_PORT_GUID = 11,
-	IFLA_VF_VLAN_LIST = 12,
-	IFLA_VF_BROADCAST = 13,
-	__IFLA_VF_MAX = 14,
-};
-
-struct ifla_vf_mac {
-	__u32 vf;
-	__u8 mac[32];
-};
-
-struct ifla_vf_broadcast {
-	__u8 broadcast[32];
-};
-
-struct ifla_vf_vlan {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-};
-
-enum {
-	IFLA_VF_VLAN_INFO_UNSPEC = 0,
-	IFLA_VF_VLAN_INFO = 1,
-	__IFLA_VF_VLAN_INFO_MAX = 2,
-};
-
-struct ifla_vf_vlan_info {
-	__u32 vf;
-	__u32 vlan;
-	__u32 qos;
-	__be16 vlan_proto;
-};
-
-struct ifla_vf_tx_rate {
-	__u32 vf;
-	__u32 rate;
-};
-
-struct ifla_vf_rate {
-	__u32 vf;
-	__u32 min_tx_rate;
-	__u32 max_tx_rate;
-};
-
-struct ifla_vf_spoofchk {
-	__u32 vf;
-	__u32 setting;
-};
-
-struct ifla_vf_link_state {
-	__u32 vf;
-	__u32 link_state;
-};
-
-struct ifla_vf_rss_query_en {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_STATS_RX_PACKETS = 0,
-	IFLA_VF_STATS_TX_PACKETS = 1,
-	IFLA_VF_STATS_RX_BYTES = 2,
-	IFLA_VF_STATS_TX_BYTES = 3,
-	IFLA_VF_STATS_BROADCAST = 4,
-	IFLA_VF_STATS_MULTICAST = 5,
-	IFLA_VF_STATS_PAD = 6,
-	IFLA_VF_STATS_RX_DROPPED = 7,
-	IFLA_VF_STATS_TX_DROPPED = 8,
-	__IFLA_VF_STATS_MAX = 9,
-};
-
-struct ifla_vf_trust {
-	__u32 vf;
-	__u32 setting;
-};
-
-enum {
-	IFLA_VF_PORT_UNSPEC = 0,
-	IFLA_VF_PORT = 1,
-	__IFLA_VF_PORT_MAX = 2,
-};
-
-enum {
-	IFLA_PORT_UNSPEC = 0,
-	IFLA_PORT_VF = 1,
-	IFLA_PORT_PROFILE = 2,
-	IFLA_PORT_VSI_TYPE = 3,
-	IFLA_PORT_INSTANCE_UUID = 4,
-	IFLA_PORT_HOST_UUID = 5,
-	IFLA_PORT_REQUEST = 6,
-	IFLA_PORT_RESPONSE = 7,
-	__IFLA_PORT_MAX = 8,
-};
-
-struct if_stats_msg {
-	__u8 family;
-	__u8 pad1;
-	__u16 pad2;
-	__u32 ifindex;
-	__u32 filter_mask;
-};
-
-enum {
-	IFLA_STATS_UNSPEC = 0,
-	IFLA_STATS_LINK_64 = 1,
-	IFLA_STATS_LINK_XSTATS = 2,
-	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
-	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
-	IFLA_STATS_AF_SPEC = 5,
-	__IFLA_STATS_MAX = 6,
-};
-
-enum {
-	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
-	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
-	__IFLA_OFFLOAD_XSTATS_MAX = 2,
-};
-
-enum {
-	XDP_ATTACHED_NONE = 0,
-	XDP_ATTACHED_DRV = 1,
-	XDP_ATTACHED_SKB = 2,
-	XDP_ATTACHED_HW = 3,
-	XDP_ATTACHED_MULTI = 4,
-};
-
-enum {
-	IFLA_XDP_UNSPEC = 0,
-	IFLA_XDP_FD = 1,
-	IFLA_XDP_ATTACHED = 2,
-	IFLA_XDP_FLAGS = 3,
-	IFLA_XDP_PROG_ID = 4,
-	IFLA_XDP_DRV_PROG_ID = 5,
-	IFLA_XDP_SKB_PROG_ID = 6,
-	IFLA_XDP_HW_PROG_ID = 7,
-	__IFLA_XDP_MAX = 8,
-};
-
-enum {
-	IFLA_EVENT_NONE = 0,
-	IFLA_EVENT_REBOOT = 1,
-	IFLA_EVENT_FEATURES = 2,
-	IFLA_EVENT_BONDING_FAILOVER = 3,
-	IFLA_EVENT_NOTIFY_PEERS = 4,
-	IFLA_EVENT_IGMP_RESEND = 5,
-	IFLA_EVENT_BONDING_OPTIONS = 6,
-};
-
-enum {
-	IFLA_BRIDGE_FLAGS = 0,
-	IFLA_BRIDGE_MODE = 1,
-	IFLA_BRIDGE_VLAN_INFO = 2,
-	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
-	__IFLA_BRIDGE_MAX = 4,
-};
-
-enum {
-	BR_MCAST_DIR_RX = 0,
-	BR_MCAST_DIR_TX = 1,
-	BR_MCAST_DIR_SIZE = 2,
-};
-
-enum rtattr_type_t {
-	RTA_UNSPEC = 0,
-	RTA_DST = 1,
-	RTA_SRC = 2,
-	RTA_IIF = 3,
-	RTA_OIF = 4,
-	RTA_GATEWAY = 5,
-	RTA_PRIORITY = 6,
-	RTA_PREFSRC = 7,
-	RTA_METRICS = 8,
-	RTA_MULTIPATH = 9,
-	RTA_PROTOINFO = 10,
-	RTA_FLOW = 11,
-	RTA_CACHEINFO = 12,
-	RTA_SESSION = 13,
-	RTA_MP_ALGO = 14,
-	RTA_TABLE = 15,
-	RTA_MARK = 16,
-	RTA_MFC_STATS = 17,
-	RTA_VIA = 18,
-	RTA_NEWDST = 19,
-	RTA_PREF = 20,
-	RTA_ENCAP_TYPE = 21,
-	RTA_ENCAP = 22,
-	RTA_EXPIRES = 23,
-	RTA_PAD = 24,
-	RTA_UID = 25,
-	RTA_TTL_PROPAGATE = 26,
-	RTA_IP_PROTO = 27,
-	RTA_SPORT = 28,
-	RTA_DPORT = 29,
-	RTA_NH_ID = 30,
-	__RTA_MAX = 31,
-};
-
-struct rta_cacheinfo {
-	__u32 rta_clntref;
-	__u32 rta_lastuse;
-	__s32 rta_expires;
-	__u32 rta_error;
-	__u32 rta_used;
-	__u32 rta_id;
-	__u32 rta_ts;
-	__u32 rta_tsage;
-};
-
-struct ifinfomsg {
-	unsigned char ifi_family;
-	unsigned char __ifi_pad;
-	short unsigned int ifi_type;
-	int ifi_index;
-	unsigned int ifi_flags;
-	unsigned int ifi_change;
-};
-
-typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
-
-typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
-
-struct rtnl_af_ops {
-	struct list_head list;
-	int family;
-	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
-	size_t (*get_link_af_size)(const struct net_device *, u32);
-	int (*validate_link_af)(const struct net_device *, const struct nlattr *);
-	int (*set_link_af)(struct net_device *, const struct nlattr *);
-	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
-	size_t (*get_stats_af_size)(const struct net_device *);
-};
-
-struct rtnl_link {
-	rtnl_doit_func doit;
-	rtnl_dumpit_func dumpit;
-	struct module *owner;
-	unsigned int flags;
-	struct callback_head rcu;
-};
-
-enum {
-	IF_LINK_MODE_DEFAULT = 0,
-	IF_LINK_MODE_DORMANT = 1,
-};
-
-enum lw_bits {
-	LW_URGENT = 0,
-};
-
-struct seg6_pernet_data {
-	struct mutex lock;
-	struct in6_addr *tun_src;
-};
-
-enum {
-	BPF_F_RECOMPUTE_CSUM = 1,
-	BPF_F_INVALIDATE_HASH = 2,
-};
-
-enum {
-	BPF_F_HDR_FIELD_MASK = 15,
-};
-
-enum {
-	BPF_F_PSEUDO_HDR = 16,
-	BPF_F_MARK_MANGLED_0 = 32,
-	BPF_F_MARK_ENFORCE = 64,
-};
-
-enum {
-	BPF_F_INGRESS = 1,
-};
-
-enum {
-	BPF_F_TUNINFO_IPV6 = 1,
-};
-
-enum {
-	BPF_F_ZERO_CSUM_TX = 2,
-	BPF_F_DONT_FRAGMENT = 4,
-	BPF_F_SEQ_NUMBER = 8,
-};
-
-enum {
-	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
-	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
-	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
-	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
-};
-
-enum {
-	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
-	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
-};
-
-enum bpf_adj_room_mode {
-	BPF_ADJ_ROOM_NET = 0,
-	BPF_ADJ_ROOM_MAC = 1,
-};
-
-enum bpf_hdr_start_off {
-	BPF_HDR_START_MAC = 0,
-	BPF_HDR_START_NET = 1,
-};
-
-enum bpf_lwt_encap_mode {
-	BPF_LWT_ENCAP_SEG6 = 0,
-	BPF_LWT_ENCAP_SEG6_INLINE = 1,
-	BPF_LWT_ENCAP_IP = 2,
-};
-
-struct bpf_tunnel_key {
-	__u32 tunnel_id;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-	__u8 tunnel_tos;
-	__u8 tunnel_ttl;
-	__u16 tunnel_ext;
-	__u32 tunnel_label;
-};
-
-struct bpf_xfrm_state {
-	__u32 reqid;
-	__u32 spi;
-	__u16 family;
-	__u16 ext;
-	union {
-		__u32 remote_ipv4;
-		__u32 remote_ipv6[4];
-	};
-};
-
-struct bpf_tcp_sock {
-	__u32 snd_cwnd;
-	__u32 srtt_us;
-	__u32 rtt_min;
-	__u32 snd_ssthresh;
-	__u32 rcv_nxt;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 mss_cache;
-	__u32 ecn_flags;
-	__u32 rate_delivered;
-	__u32 rate_interval_us;
-	__u32 packets_out;
-	__u32 retrans_out;
-	__u32 total_retrans;
-	__u32 segs_in;
-	__u32 data_segs_in;
-	__u32 segs_out;
-	__u32 data_segs_out;
-	__u32 lost_out;
-	__u32 sacked_out;
-	__u64 bytes_received;
-	__u64 bytes_acked;
-	__u32 dsack_dups;
-	__u32 delivered;
-	__u32 delivered_ce;
-	__u32 icsk_retransmits;
-};
-
-struct bpf_sock_tuple {
-	union {
-		struct {
-			__be32 saddr;
-			__be32 daddr;
-			__be16 sport;
-			__be16 dport;
-		} ipv4;
-		struct {
-			__be32 saddr[4];
-			__be32 daddr[4];
-			__be16 sport;
-			__be16 dport;
-		} ipv6;
-	};
-};
-
-struct bpf_xdp_sock {
-	__u32 queue_id;
-};
-
-enum sk_action {
-	SK_DROP = 0,
-	SK_PASS = 1,
-};
-
-enum {
-	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
-	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
-	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
-	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
-	BPF_SOCK_OPS_ALL_CB_FLAGS = 15,
-};
-
-enum {
-	BPF_SOCK_OPS_VOID = 0,
-	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
-	BPF_SOCK_OPS_RWND_INIT = 2,
-	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
-	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
-	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
-	BPF_SOCK_OPS_NEEDS_ECN = 6,
-	BPF_SOCK_OPS_BASE_RTT = 7,
-	BPF_SOCK_OPS_RTO_CB = 8,
-	BPF_SOCK_OPS_RETRANS_CB = 9,
-	BPF_SOCK_OPS_STATE_CB = 10,
-	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
-	BPF_SOCK_OPS_RTT_CB = 12,
-};
-
-enum {
-	TCP_BPF_IW = 1001,
-	TCP_BPF_SNDCWND_CLAMP = 1002,
-};
-
-enum {
-	BPF_FIB_LOOKUP_DIRECT = 1,
-	BPF_FIB_LOOKUP_OUTPUT = 2,
-};
-
-enum {
-	BPF_FIB_LKUP_RET_SUCCESS = 0,
-	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
-	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
-	BPF_FIB_LKUP_RET_PROHIBIT = 3,
-	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
-	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
-	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
-	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
-	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
-};
-
-struct bpf_fib_lookup {
-	__u8 family;
-	__u8 l4_protocol;
-	__be16 sport;
-	__be16 dport;
-	__u16 tot_len;
-	__u32 ifindex;
-	union {
-		__u8 tos;
-		__be32 flowinfo;
-		__u32 rt_metric;
-	};
-	union {
-		__be32 ipv4_src;
-		__u32 ipv6_src[4];
-	};
-	union {
-		__be32 ipv4_dst;
-		__u32 ipv6_dst[4];
-	};
-	__be16 h_vlan_proto;
-	__be16 h_vlan_TCI;
-	__u8 smac[6];
-	__u8 dmac[6];
-};
-
-enum rt_scope_t {
-	RT_SCOPE_UNIVERSE = 0,
-	RT_SCOPE_SITE = 200,
-	RT_SCOPE_LINK = 253,
-	RT_SCOPE_HOST = 254,
-	RT_SCOPE_NOWHERE = 255,
-};
-
-enum rt_class_t {
-	RT_TABLE_UNSPEC = 0,
-	RT_TABLE_COMPAT = 252,
-	RT_TABLE_DEFAULT = 253,
-	RT_TABLE_MAIN = 254,
-	RT_TABLE_LOCAL = 255,
-	RT_TABLE_MAX = 4294967295,
-};
-
-typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
-
-struct fib_result {
-	__be32 prefix;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	u32 tclassid;
-	struct fib_nh_common *nhc;
-	struct fib_info *fi;
-	struct fib_table *table;
-	struct hlist_head *fa_head;
-};
-
-enum {
-	INET_ECN_NOT_ECT = 0,
-	INET_ECN_ECT_1 = 1,
-	INET_ECN_ECT_0 = 2,
-	INET_ECN_CE = 3,
-	INET_ECN_MASK = 3,
-};
-
-struct tcp_skb_cb {
-	__u32 seq;
-	__u32 end_seq;
-	union {
-		__u32 tcp_tw_isn;
-		struct {
-			u16 tcp_gso_segs;
-			u16 tcp_gso_size;
-		};
-	};
-	__u8 tcp_flags;
-	__u8 sacked;
-	__u8 ip_dsfield;
-	__u8 txstamp_ack: 1;
-	__u8 eor: 1;
-	__u8 has_rxtstamp: 1;
-	__u8 unused: 5;
-	__u32 ack_seq;
-	union {
-		struct {
-			__u32 in_flight: 30;
-			__u32 is_app_limited: 1;
-			__u32 unused: 1;
-			__u32 delivered;
-			u64 first_tx_mstamp;
-			u64 delivered_mstamp;
-		} tx;
-		union {
-			struct inet_skb_parm h4;
-			struct inet6_skb_parm h6;
-		} header;
-		struct {
-			__u32 flags;
-			struct sock *sk_redir;
-			void *data_end;
-		} bpf;
-	};
-};
-
-struct _bpf_dtab_netdev {
-	struct net_device *dev;
-};
-
-struct ipv6_sr_hdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 type;
-	__u8 segments_left;
-	__u8 first_segment;
-	__u8 flags;
-	__u16 tag;
-	struct in6_addr segments[0];
-};
-
-enum {
-	SEG6_LOCAL_ACTION_UNSPEC = 0,
-	SEG6_LOCAL_ACTION_END = 1,
-	SEG6_LOCAL_ACTION_END_X = 2,
-	SEG6_LOCAL_ACTION_END_T = 3,
-	SEG6_LOCAL_ACTION_END_DX2 = 4,
-	SEG6_LOCAL_ACTION_END_DX6 = 5,
-	SEG6_LOCAL_ACTION_END_DX4 = 6,
-	SEG6_LOCAL_ACTION_END_DT6 = 7,
-	SEG6_LOCAL_ACTION_END_DT4 = 8,
-	SEG6_LOCAL_ACTION_END_B6 = 9,
-	SEG6_LOCAL_ACTION_END_B6_ENCAP = 10,
-	SEG6_LOCAL_ACTION_END_BM = 11,
-	SEG6_LOCAL_ACTION_END_S = 12,
-	SEG6_LOCAL_ACTION_END_AS = 13,
-	SEG6_LOCAL_ACTION_END_AM = 14,
-	SEG6_LOCAL_ACTION_END_BPF = 15,
-	__SEG6_LOCAL_ACTION_MAX = 16,
-};
-
-struct seg6_bpf_srh_state {
-	struct ipv6_sr_hdr *srh;
-	u16 hdrlen;
-	bool valid;
-};
-
-typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
-
-typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_get_raw_cpu_id)();
-
-struct bpf_scratchpad {
-	union {
-		__be32 diff[128];
-		u8 buff[512];
-	};
-};
-
-typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
-
-typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
-
-typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
-
-typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
-
-typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
-
-typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
-
-typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
-
-typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
-
-typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
-
-typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
-
-typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
-
-typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
-
-typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
-
-typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
-
-typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
-
-typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
-
-typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
-
-typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_sockopt_event_output)(struct bpf_sock_ops_kern *, struct bpf_map *, u64, void *, u64);
-
-typedef u64 (*btf_bpf_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
-
-typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
-
-typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
-
-typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
-
-typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_store_bytes)(struct sk_buff *, u32, const void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_action)(struct sk_buff *, u32, void *, u32);
-
-typedef u64 (*btf_bpf_lwt_seg6_adjust_srh)(struct sk_buff *, u32, s32);
-
-typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sk_release)(struct sock *);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
-
-typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
-
-typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
-
-typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
-
-typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
-
-typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
-
-typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
-
-struct bpf_dtab_netdev___2;
-
-struct bpf_cpu_map_entry___2;
-
-struct sock_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-};
-
-struct sock_diag_handler {
-	__u8 family;
-	int (*dump)(struct sk_buff *, struct nlmsghdr *);
-	int (*get_info)(struct sk_buff *, struct sock *);
-	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
-};
-
-struct broadcast_sk {
-	struct sock *sk;
-	struct work_struct work;
-};
-
-typedef int gifconf_func_t(struct net_device *, char *, int, int);
-
-struct tso_t {
-	int next_frag_idx;
-	void *data;
-	size_t size;
-	u16 ip_id;
-	bool ipv6;
-	u32 tcp_seq;
-};
-
-struct fib_notifier_info {
-	int family;
-	struct netlink_ext_ack *extack;
-};
-
-enum fib_event_type {
-	FIB_EVENT_ENTRY_REPLACE = 0,
-	FIB_EVENT_ENTRY_APPEND = 1,
-	FIB_EVENT_ENTRY_ADD = 2,
-	FIB_EVENT_ENTRY_DEL = 3,
-	FIB_EVENT_RULE_ADD = 4,
-	FIB_EVENT_RULE_DEL = 5,
-	FIB_EVENT_NH_ADD = 6,
-	FIB_EVENT_NH_DEL = 7,
-	FIB_EVENT_VIF_ADD = 8,
-	FIB_EVENT_VIF_DEL = 9,
-};
-
-struct fib_notifier_net {
-	struct list_head fib_notifier_ops;
-	struct atomic_notifier_head fib_chain;
-};
-
-struct xdp_attachment_info {
-	struct bpf_prog *prog;
-	u32 flags;
-};
-
-struct pp_alloc_cache {
-	u32 count;
-	void *cache[128];
-};
-
-struct page_pool_params {
-	unsigned int flags;
-	unsigned int order;
-	unsigned int pool_size;
-	int nid;
-	struct device *dev;
-	enum dma_data_direction dma_dir;
-	unsigned int max_len;
-	unsigned int offset;
-};
-
-struct page_pool {
-	struct page_pool_params p;
-	struct delayed_work release_dw;
-	void (*disconnect)(void *);
-	long unsigned int defer_start;
-	long unsigned int defer_warn;
-	u32 pages_state_hold_cnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct pp_alloc_cache alloc;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct ptr_ring ring;
-	atomic_t pages_state_release_cnt;
-	refcount_t user_cnt;
-	u64 destroy_cnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct flow_match_meta {
-	struct flow_dissector_key_meta *key;
-	struct flow_dissector_key_meta *mask;
-};
-
-struct flow_match_basic {
-	struct flow_dissector_key_basic *key;
-	struct flow_dissector_key_basic *mask;
-};
-
-struct flow_match_control {
-	struct flow_dissector_key_control *key;
-	struct flow_dissector_key_control *mask;
-};
-
-struct flow_match_eth_addrs {
-	struct flow_dissector_key_eth_addrs *key;
-	struct flow_dissector_key_eth_addrs *mask;
-};
-
-struct flow_match_vlan {
-	struct flow_dissector_key_vlan *key;
-	struct flow_dissector_key_vlan *mask;
-};
-
-struct flow_match_ipv4_addrs {
-	struct flow_dissector_key_ipv4_addrs *key;
-	struct flow_dissector_key_ipv4_addrs *mask;
-};
-
-struct flow_match_ipv6_addrs {
-	struct flow_dissector_key_ipv6_addrs *key;
-	struct flow_dissector_key_ipv6_addrs *mask;
-};
-
-struct flow_match_ip {
-	struct flow_dissector_key_ip *key;
-	struct flow_dissector_key_ip *mask;
-};
-
-struct flow_match_ports {
-	struct flow_dissector_key_ports *key;
-	struct flow_dissector_key_ports *mask;
-};
-
-struct flow_match_icmp {
-	struct flow_dissector_key_icmp *key;
-	struct flow_dissector_key_icmp *mask;
-};
-
-struct flow_match_tcp {
-	struct flow_dissector_key_tcp *key;
-	struct flow_dissector_key_tcp *mask;
-};
-
-struct flow_match_mpls {
-	struct flow_dissector_key_mpls *key;
-	struct flow_dissector_key_mpls *mask;
-};
-
-struct flow_match_enc_keyid {
-	struct flow_dissector_key_keyid *key;
-	struct flow_dissector_key_keyid *mask;
-};
-
-struct flow_match_enc_opts {
-	struct flow_dissector_key_enc_opts *key;
-	struct flow_dissector_key_enc_opts *mask;
-};
-
-enum flow_block_command {
-	FLOW_BLOCK_BIND = 0,
-	FLOW_BLOCK_UNBIND = 1,
-};
-
-enum flow_block_binder_type {
-	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
-	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
-};
-
-struct flow_block_offload {
-	enum flow_block_command command;
-	enum flow_block_binder_type binder_type;
-	bool block_shared;
-	bool unlocked_driver_cb;
-	struct net *net;
-	struct flow_block *block;
-	struct list_head cb_list;
-	struct list_head *driver_block_list;
-	struct netlink_ext_ack *extack;
-};
-
-struct flow_block_cb {
-	struct list_head driver_list;
-	struct list_head list;
-	flow_setup_cb_t *cb;
-	void *cb_ident;
-	void *cb_priv;
-	void (*release)(void *);
-	unsigned int refcnt;
-};
-
-typedef int flow_indr_block_bind_cb_t(struct net_device *, void *, enum tc_setup_type, void *);
-
-typedef void flow_indr_block_cmd_t(struct net_device *, flow_indr_block_bind_cb_t *, void *, enum flow_block_command);
-
-struct flow_indr_block_entry {
-	flow_indr_block_cmd_t *cb;
-	struct list_head list;
-};
-
-struct flow_indr_block_cb {
-	struct list_head list;
-	void *cb_priv;
-	flow_indr_block_bind_cb_t *cb;
-	void *cb_ident;
-};
-
-struct flow_indr_block_dev {
-	struct rhash_head ht_node;
-	struct net_device *dev;
-	unsigned int refcnt;
-	struct list_head cb_list;
-};
-
-struct rx_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_rx_queue *, char *);
-	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
-};
-
-struct netdev_queue_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct netdev_queue *, char *);
-	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
-};
-
-struct strp_stats {
-	long long unsigned int msgs;
-	long long unsigned int bytes;
-	unsigned int mem_fail;
-	unsigned int need_more_hdr;
-	unsigned int msg_too_big;
-	unsigned int msg_timeouts;
-	unsigned int bad_hdr_len;
-};
-
-struct strparser;
-
-struct strp_callbacks {
-	int (*parse_msg)(struct strparser *, struct sk_buff *);
-	void (*rcv_msg)(struct strparser *, struct sk_buff *);
-	int (*read_sock_done)(struct strparser *, int);
-	void (*abort_parser)(struct strparser *, int);
-	void (*lock)(struct strparser *);
-	void (*unlock)(struct strparser *);
-};
-
-struct strparser {
-	struct sock *sk;
-	u32 stopped: 1;
-	u32 paused: 1;
-	u32 aborted: 1;
-	u32 interrupted: 1;
-	u32 unrecov_intr: 1;
-	struct sk_buff **skb_nextp;
-	struct sk_buff *skb_head;
-	unsigned int need_bytes;
-	struct delayed_work msg_timer_work;
-	struct work_struct work;
-	struct strp_stats stats;
-	struct strp_callbacks cb;
-};
-
-enum __sk_action {
-	__SK_DROP = 0,
-	__SK_PASS = 1,
-	__SK_REDIRECT = 2,
-	__SK_NONE = 3,
-};
-
-struct sk_psock_progs {
-	struct bpf_prog *msg_parser;
-	struct bpf_prog *skb_parser;
-	struct bpf_prog *skb_verdict;
-};
-
-enum sk_psock_state_bits {
-	SK_PSOCK_TX_ENABLED = 0,
-};
-
-struct sk_psock_link {
-	struct list_head list;
-	struct bpf_map *map;
-	void *link_raw;
-};
-
-struct sk_psock_parser {
-	struct strparser strp;
-	bool enabled;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct sk_psock_work_state {
-	struct sk_buff *skb;
-	u32 len;
-	u32 off;
-};
-
-struct sk_psock {
-	struct sock *sk;
-	struct sock *sk_redir;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 eval;
-	struct sk_msg *cork;
-	struct sk_psock_progs progs;
-	struct sk_psock_parser parser;
-	struct sk_buff_head ingress_skb;
-	struct list_head ingress_msg;
-	long unsigned int state;
-	struct list_head link;
-	spinlock_t link_lock;
-	refcount_t refcnt;
-	void (*saved_unhash)(struct sock *);
-	void (*saved_close)(struct sock *, long int);
-	void (*saved_write_space)(struct sock *);
-	struct proto *sk_proto;
-	struct sk_psock_work_state work_state;
-	struct work_struct work;
-	union {
-		struct callback_head rcu;
-		struct work_struct gc;
-	};
-};
-
-struct fib_rule_uid_range {
-	__u32 start;
-	__u32 end;
-};
-
-enum {
-	FRA_UNSPEC = 0,
-	FRA_DST = 1,
-	FRA_SRC = 2,
-	FRA_IIFNAME = 3,
-	FRA_GOTO = 4,
-	FRA_UNUSED2 = 5,
-	FRA_PRIORITY = 6,
-	FRA_UNUSED3 = 7,
-	FRA_UNUSED4 = 8,
-	FRA_UNUSED5 = 9,
-	FRA_FWMARK = 10,
-	FRA_FLOW = 11,
-	FRA_TUN_ID = 12,
-	FRA_SUPPRESS_IFGROUP = 13,
-	FRA_SUPPRESS_PREFIXLEN = 14,
-	FRA_TABLE = 15,
-	FRA_FWMASK = 16,
-	FRA_OIFNAME = 17,
-	FRA_PAD = 18,
-	FRA_L3MDEV = 19,
-	FRA_UID_RANGE = 20,
-	FRA_PROTOCOL = 21,
-	FRA_IP_PROTO = 22,
-	FRA_SPORT_RANGE = 23,
-	FRA_DPORT_RANGE = 24,
-	__FRA_MAX = 25,
-};
-
-enum {
-	FR_ACT_UNSPEC = 0,
-	FR_ACT_TO_TBL = 1,
-	FR_ACT_GOTO = 2,
-	FR_ACT_NOP = 3,
-	FR_ACT_RES3 = 4,
-	FR_ACT_RES4 = 5,
-	FR_ACT_BLACKHOLE = 6,
-	FR_ACT_UNREACHABLE = 7,
-	FR_ACT_PROHIBIT = 8,
-	__FR_ACT_MAX = 9,
-};
-
-struct fib_rule_notifier_info {
-	struct fib_notifier_info info;
-	struct fib_rule *rule;
-};
-
-struct trace_event_raw_kfree_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	void *location;
-	short unsigned int protocol;
-	char __data[0];
-};
-
-struct trace_event_raw_consume_skb {
-	struct trace_entry ent;
-	void *skbaddr;
-	char __data[0];
-};
-
-struct trace_event_raw_skb_copy_datagram_iovec {
-	struct trace_entry ent;
-	const void *skbaddr;
-	int len;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kfree_skb {};
-
-struct trace_event_data_offsets_consume_skb {};
-
-struct trace_event_data_offsets_skb_copy_datagram_iovec {};
-
-typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);
-
-typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
-
-struct trace_event_raw_net_dev_start_xmit {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	unsigned int len;
-	unsigned int data_len;
-	int network_offset;
-	bool transport_offset_valid;
-	int transport_offset;
-	u8 tx_flags;
-	u16 gso_size;
-	u16 gso_segs;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	int rc;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_xmit_timeout {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_driver;
-	int queue_index;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_template {
-	struct trace_entry ent;
-	void *skbaddr;
-	unsigned int len;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_verbose_template {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int napi_id;
-	u16 queue_mapping;
-	const void *skbaddr;
-	bool vlan_tagged;
-	u16 vlan_proto;
-	u16 vlan_tci;
-	u16 protocol;
-	u8 ip_summed;
-	u32 hash;
-	bool l4_hash;
-	unsigned int len;
-	unsigned int data_len;
-	unsigned int truesize;
-	bool mac_header_valid;
-	int mac_header;
-	unsigned char nr_frags;
-	u16 gso_size;
-	u16 gso_type;
-	char __data[0];
-};
-
-struct trace_event_raw_net_dev_rx_exit_template {
-	struct trace_entry ent;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_net_dev_start_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_xmit_timeout {
-	u32 name;
-	u32 driver;
-};
-
-struct trace_event_data_offsets_net_dev_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_verbose_template {
-	u32 name;
-};
-
-struct trace_event_data_offsets_net_dev_rx_exit_template {};
-
-typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
-
-typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
-
-typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
-
-typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);
-
-typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
-
-typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_exit)(void *, int);
-
-typedef void (*btf_trace_netif_rx_ni_exit)(void *, int);
-
-typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
-
-struct trace_event_raw_napi_poll {
-	struct trace_entry ent;
-	struct napi_struct *napi;
-	u32 __data_loc_dev_name;
-	int work;
-	int budget;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_napi_poll {
-	u32 dev_name;
-};
-
-typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
-
-enum tcp_ca_state {
-	TCP_CA_Open = 0,
-	TCP_CA_Disorder = 1,
-	TCP_CA_CWR = 2,
-	TCP_CA_Recovery = 3,
-	TCP_CA_Loss = 4,
-};
-
-struct trace_event_raw_sock_rcvqueue_full {
-	struct trace_entry ent;
-	int rmem_alloc;
-	unsigned int truesize;
-	int sk_rcvbuf;
-	char __data[0];
-};
-
-struct trace_event_raw_sock_exceed_buf_limit {
-	struct trace_entry ent;
-	char name[32];
-	long int *sysctl_mem;
-	long int allocated;
-	int sysctl_rmem;
-	int rmem_alloc;
-	int sysctl_wmem;
-	int wmem_alloc;
-	int wmem_queued;
-	int kind;
-	char __data[0];
-};
-
-struct trace_event_raw_inet_sock_set_state {
-	struct trace_entry ent;
-	const void *skaddr;
-	int oldstate;
-	int newstate;
-	__u16 sport;
-	__u16 dport;
-	__u16 family;
-	__u8 protocol;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sock_rcvqueue_full {};
-
-struct trace_event_data_offsets_sock_exceed_buf_limit {};
-
-struct trace_event_data_offsets_inet_sock_set_state {};
-
-typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
-
-typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
-
-typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
-
-struct trace_event_raw_udp_fail_queue_rcv_skb {
-	struct trace_entry ent;
-	int rc;
-	__u16 lport;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
-
-typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
-
-struct trace_event_raw_tcp_event_sk_skb {
-	struct trace_entry ent;
-	const void *skbaddr;
-	const void *skaddr;
-	int state;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_event_sk {
-	struct trace_entry ent;
-	const void *skaddr;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_retransmit_synack {
-	struct trace_entry ent;
-	const void *skaddr;
-	const void *req;
-	__u16 sport;
-	__u16 dport;
-	__u8 saddr[4];
-	__u8 daddr[4];
-	__u8 saddr_v6[16];
-	__u8 daddr_v6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_tcp_probe {
-	struct trace_entry ent;
-	__u8 saddr[28];
-	__u8 daddr[28];
-	__u16 sport;
-	__u16 dport;
-	__u32 mark;
-	__u16 data_len;
-	__u32 snd_nxt;
-	__u32 snd_una;
-	__u32 snd_cwnd;
-	__u32 ssthresh;
-	__u32 snd_wnd;
-	__u32 srtt;
-	__u32 rcv_wnd;
-	__u64 sock_cookie;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_tcp_event_sk_skb {};
-
-struct trace_event_data_offsets_tcp_event_sk {};
-
-struct trace_event_data_offsets_tcp_retransmit_synack {};
-
-struct trace_event_data_offsets_tcp_probe {};
-
-typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
-
-typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
-
-typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
-
-typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
-
-struct trace_event_raw_fib_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	u8 proto;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[4];
-	__u8 dst[4];
-	__u8 gw4[4];
-	__u8 gw6[16];
-	u16 sport;
-	u16 dport;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
-
-struct trace_event_raw_qdisc_dequeue {
-	struct trace_entry ent;
-	struct Qdisc *qdisc;
-	const struct netdev_queue *txq;
-	int packets;
-	void *skbaddr;
-	int ifindex;
-	u32 handle;
-	u32 parent;
-	long unsigned int txq_state;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_qdisc_dequeue {};
-
-typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
-
-struct trace_event_raw_neigh_create {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	int entries;
-	u8 created;
-	u8 gc_exempt;
-	u8 primary_key4[4];
-	u8 primary_key6[16];
-	char __data[0];
-};
-
-struct trace_event_raw_neigh_update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u8 new_lladdr[32];
-	u8 new_state;
-	u32 update_flags;
-	u32 pid;
-	char __data[0];
-};
-
-struct trace_event_raw_neigh__update {
-	struct trace_entry ent;
-	u32 family;
-	u32 __data_loc_dev;
-	u8 lladdr[32];
-	u8 lladdr_len;
-	u8 flags;
-	u8 nud_state;
-	u8 type;
-	u8 dead;
-	int refcnt;
-	__u8 primary_key4[4];
-	__u8 primary_key6[16];
-	long unsigned int confirmed;
-	long unsigned int updated;
-	long unsigned int used;
-	u32 err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_neigh_create {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh_update {
-	u32 dev;
-};
-
-struct trace_event_data_offsets_neigh__update {
-	u32 dev;
-};
-
-typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
-
-typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
-
-typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
-
-typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
-
-enum lwtunnel_encap_types {
-	LWTUNNEL_ENCAP_NONE = 0,
-	LWTUNNEL_ENCAP_MPLS = 1,
-	LWTUNNEL_ENCAP_IP = 2,
-	LWTUNNEL_ENCAP_ILA = 3,
-	LWTUNNEL_ENCAP_IP6 = 4,
-	LWTUNNEL_ENCAP_SEG6 = 5,
-	LWTUNNEL_ENCAP_BPF = 6,
-	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
-	__LWTUNNEL_ENCAP_MAX = 8,
-};
-
-struct rtnexthop {
-	short unsigned int rtnh_len;
-	unsigned char rtnh_flags;
-	unsigned char rtnh_hops;
-	int rtnh_ifindex;
-};
-
-struct lwtunnel_encap_ops {
-	int (*build_state)(struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
-	void (*destroy_state)(struct lwtunnel_state *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*input)(struct sk_buff *);
-	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
-	int (*get_encap_size)(struct lwtunnel_state *);
-	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
-	int (*xmit)(struct sk_buff *);
-	struct module *owner;
-};
-
-enum {
-	LWT_BPF_PROG_UNSPEC = 0,
-	LWT_BPF_PROG_FD = 1,
-	LWT_BPF_PROG_NAME = 2,
-	__LWT_BPF_PROG_MAX = 3,
-};
-
-enum {
-	LWT_BPF_UNSPEC = 0,
-	LWT_BPF_IN = 1,
-	LWT_BPF_OUT = 2,
-	LWT_BPF_XMIT = 3,
-	LWT_BPF_XMIT_HEADROOM = 4,
-	__LWT_BPF_MAX = 5,
-};
-
-enum {
-	LWTUNNEL_XMIT_DONE = 0,
-	LWTUNNEL_XMIT_CONTINUE = 1,
-};
-
-struct bpf_lwt_prog {
-	struct bpf_prog *prog;
-	char *name;
-};
-
-struct bpf_lwt {
-	struct bpf_lwt_prog in;
-	struct bpf_lwt_prog out;
-	struct bpf_lwt_prog xmit;
-	int family;
-};
-
-struct bpf_stab {
-	struct bpf_map map;
-	struct sock **sks;
-	struct sk_psock_progs progs;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
-
-struct bpf_htab_elem {
-	struct callback_head rcu;
-	u32 hash;
-	struct sock *sk;
-	struct hlist_node node;
-	u8 key[0];
-};
-
-struct bpf_htab_bucket {
-	struct hlist_head head;
-	raw_spinlock_t lock;
-};
-
-struct bpf_htab___2 {
-	struct bpf_map map;
-	struct bpf_htab_bucket *buckets;
-	u32 buckets_num;
-	u32 elem_size;
-	struct sk_psock_progs progs;
-	atomic_t count;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
-
-struct dst_cache_pcpu {
-	long unsigned int refresh_ts;
-	struct dst_entry *dst;
-	u32 cookie;
-	union {
-		struct in_addr in_saddr;
-		struct in6_addr in6_saddr;
-	};
-};
-
-struct gro_cell;
-
-struct gro_cells {
-	struct gro_cell *cells;
-};
-
-struct gro_cell {
-	struct sk_buff_head napi_skbs;
-	struct napi_struct napi;
-};
-
-enum {
-	BPF_SK_STORAGE_GET_F_CREATE = 1,
-};
-
-struct bpf_sk_storage_data;
-
-struct bpf_sk_storage {
-	struct bpf_sk_storage_data *cache[16];
-	struct hlist_head list;
-	struct sock *sk;
-	struct callback_head rcu;
-	raw_spinlock_t lock;
-};
-
-struct bucket___2 {
-	struct hlist_head list;
-	raw_spinlock_t lock;
-};
-
-struct bpf_sk_storage_map {
-	struct bpf_map map;
-	struct bucket___2 *buckets;
-	u32 bucket_log;
-	u16 elem_size;
-	u16 cache_idx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_sk_storage_data {
-	struct bpf_sk_storage_map *smap;
-	u8 data[0];
-};
-
-struct bpf_sk_storage_elem {
-	struct hlist_node map_node;
-	struct hlist_node snode;
-	struct bpf_sk_storage *sk_storage;
-	struct callback_head rcu;
-	long: 64;
-	struct bpf_sk_storage_data sdata;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
-
-struct group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-};
-
-struct group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-};
-
-struct group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-};
-
-struct compat_cmsghdr {
-	compat_size_t cmsg_len;
-	compat_int_t cmsg_level;
-	compat_int_t cmsg_type;
-};
-
-struct compat_group_req {
-	__u32 gr_interface;
-	struct __kernel_sockaddr_storage gr_group;
-} __attribute__((packed));
-
-struct compat_group_source_req {
-	__u32 gsr_interface;
-	struct __kernel_sockaddr_storage gsr_group;
-	struct __kernel_sockaddr_storage gsr_source;
-} __attribute__((packed));
-
-struct compat_group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
-} __attribute__((packed));
-
-typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
-
-struct nvmem_cell___2;
-
-struct fddi_8022_1_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-};
-
-struct fddi_8022_2_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl_1;
-	__u8 ctrl_2;
-};
-
-struct fddi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct fddihdr {
-	__u8 fc;
-	__u8 daddr[6];
-	__u8 saddr[6];
-	union {
-		struct fddi_8022_1_hdr llc_8022_1;
-		struct fddi_8022_2_hdr llc_8022_2;
-		struct fddi_snap_hdr llc_snap;
-	} hdr;
-} __attribute__((packed));
-
-struct tc_ratespec {
-	unsigned char cell_log;
-	__u8 linklayer;
-	short unsigned int overhead;
-	short int cell_align;
-	short unsigned int mpu;
-	__u32 rate;
-};
-
-struct tc_prio_qopt {
-	int bands;
-	__u8 priomap[16];
-};
-
-enum {
-	TCA_UNSPEC = 0,
-	TCA_KIND = 1,
-	TCA_OPTIONS = 2,
-	TCA_STATS = 3,
-	TCA_XSTATS = 4,
-	TCA_RATE = 5,
-	TCA_FCNT = 6,
-	TCA_STATS2 = 7,
-	TCA_STAB = 8,
-	TCA_PAD = 9,
-	TCA_DUMP_INVISIBLE = 10,
-	TCA_CHAIN = 11,
-	TCA_HW_OFFLOAD = 12,
-	TCA_INGRESS_BLOCK = 13,
-	TCA_EGRESS_BLOCK = 14,
-	__TCA_MAX = 15,
-};
-
-struct skb_array {
-	struct ptr_ring ring;
-};
-
-struct psched_ratecfg {
-	u64 rate_bytes_ps;
-	u32 mult;
-	u16 overhead;
-	u8 linklayer;
-	u8 shift;
-};
-
-struct mini_Qdisc_pair {
-	struct mini_Qdisc miniq1;
-	struct mini_Qdisc miniq2;
-	struct mini_Qdisc **p_miniq;
-};
-
-struct pfifo_fast_priv {
-	struct skb_array q[3];
-};
-
-struct tc_qopt_offload_stats {
-	struct gnet_stats_basic_packed *bstats;
-	struct gnet_stats_queue *qstats;
-};
-
-enum tc_mq_command {
-	TC_MQ_CREATE = 0,
-	TC_MQ_DESTROY = 1,
-	TC_MQ_STATS = 2,
-	TC_MQ_GRAFT = 3,
-};
-
-struct tc_mq_opt_offload_graft_params {
-	long unsigned int queue;
-	u32 child_handle;
-};
-
-struct tc_mq_qopt_offload {
-	enum tc_mq_command command;
-	u32 handle;
-	union {
-		struct tc_qopt_offload_stats stats;
-		struct tc_mq_opt_offload_graft_params graft_params;
-	};
-};
-
-struct mq_sched {
-	struct Qdisc **qdiscs;
-};
-
-enum tc_link_layer {
-	TC_LINKLAYER_UNAWARE = 0,
-	TC_LINKLAYER_ETHERNET = 1,
-	TC_LINKLAYER_ATM = 2,
-};
-
-enum {
-	TCA_STAB_UNSPEC = 0,
-	TCA_STAB_BASE = 1,
-	TCA_STAB_DATA = 2,
-	__TCA_STAB_MAX = 3,
-};
-
-struct qdisc_rate_table {
-	struct tc_ratespec rate;
-	u32 data[256];
-	struct qdisc_rate_table *next;
-	int refcnt;
-};
-
-struct Qdisc_class_common {
-	u32 classid;
-	struct hlist_node hnode;
-};
-
-struct Qdisc_class_hash {
-	struct hlist_head *hash;
-	unsigned int hashsize;
-	unsigned int hashmask;
-	unsigned int hashelems;
-};
-
-struct qdisc_watchdog {
-	u64 last_expires;
-	struct hrtimer timer;
-	struct Qdisc *qdisc;
-};
-
-enum tc_root_command {
-	TC_ROOT_GRAFT = 0,
-};
-
-struct tc_root_qopt_offload {
-	enum tc_root_command command;
-	u32 handle;
-	bool ingress;
-};
-
-struct check_loop_arg {
-	struct qdisc_walker w;
-	struct Qdisc *p;
-	int depth;
-};
-
-struct tcf_bind_args {
-	struct tcf_walker w;
-	u32 classid;
-	long unsigned int cl;
-};
-
-struct qdisc_dump_args {
-	struct qdisc_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-};
-
-enum net_xmit_qdisc_t {
-	__NET_XMIT_STOLEN = 65536,
-	__NET_XMIT_BYPASS = 131072,
-};
-
-enum {
-	TCA_ACT_UNSPEC = 0,
-	TCA_ACT_KIND = 1,
-	TCA_ACT_OPTIONS = 2,
-	TCA_ACT_INDEX = 3,
-	TCA_ACT_STATS = 4,
-	TCA_ACT_PAD = 5,
-	TCA_ACT_COOKIE = 6,
-	TCA_ACT_FLAGS = 7,
-	__TCA_ACT_MAX = 8,
-};
-
-enum tca_id {
-	TCA_ID_UNSPEC = 0,
-	TCA_ID_POLICE = 1,
-	TCA_ID_GACT = 5,
-	TCA_ID_IPT = 6,
-	TCA_ID_PEDIT = 7,
-	TCA_ID_MIRRED = 8,
-	TCA_ID_NAT = 9,
-	TCA_ID_XT = 10,
-	TCA_ID_SKBEDIT = 11,
-	TCA_ID_VLAN = 12,
-	TCA_ID_BPF = 13,
-	TCA_ID_CONNMARK = 14,
-	TCA_ID_SKBMOD = 15,
-	TCA_ID_CSUM = 16,
-	TCA_ID_TUNNEL_KEY = 17,
-	TCA_ID_SIMP = 22,
-	TCA_ID_IFE = 25,
-	TCA_ID_SAMPLE = 26,
-	TCA_ID_CTINFO = 27,
-	TCA_ID_MPLS = 28,
-	TCA_ID_CT = 29,
-	__TCA_ID_MAX = 255,
-};
-
-struct tcf_t {
-	__u64 install;
-	__u64 lastuse;
-	__u64 expires;
-	__u64 firstuse;
-};
-
-struct psample_group {
-	struct list_head list;
-	struct net *net;
-	u32 group_num;
-	u32 refcount;
-	u32 seq;
-	struct callback_head rcu;
-};
-
-enum qdisc_class_ops_flags {
-	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
-};
-
-enum tcf_proto_ops_flags {
-	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
-};
-
-typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
-
-struct tcf_idrinfo {
-	struct mutex lock;
-	struct idr action_idr;
-	struct net *net;
-};
-
-struct tc_action_ops;
-
-struct tc_cookie;
-
-struct tc_action {
-	const struct tc_action_ops *ops;
-	__u32 type;
-	struct tcf_idrinfo *idrinfo;
-	u32 tcfa_index;
-	refcount_t tcfa_refcnt;
-	atomic_t tcfa_bindcnt;
-	int tcfa_action;
-	struct tcf_t tcfa_tm;
-	struct gnet_stats_basic_packed tcfa_bstats;
-	struct gnet_stats_basic_packed tcfa_bstats_hw;
-	struct gnet_stats_queue tcfa_qstats;
-	struct net_rate_estimator *tcfa_rate_est;
-	spinlock_t tcfa_lock;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_basic_cpu *cpu_bstats_hw;
-	struct gnet_stats_queue *cpu_qstats;
-	struct tc_cookie *act_cookie;
-	struct tcf_chain *goto_chain;
-	u32 tcfa_flags;
-};
-
-typedef void (*tc_action_priv_destructor)(void *);
-
-struct tc_action_ops {
-	struct list_head head;
-	char kind[16];
-	enum tca_id id;
-	size_t size;
-	struct module *owner;
-	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
-	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
-	void (*cleanup)(struct tc_action *);
-	int (*lookup)(struct net *, struct tc_action **, u32);
-	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);
-	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
-	void (*stats_update)(struct tc_action *, u64, u32, u64, bool);
-	size_t (*get_fill_size)(const struct tc_action *);
-	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
-	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
-};
-
-struct tc_cookie {
-	u8 *data;
-	u32 len;
-	struct callback_head rcu;
-};
-
-struct tcf_block_ext_info {
-	enum flow_block_binder_type binder_type;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-	u32 block_index;
-};
-
-struct tcf_exts {
-	__u32 type;
-	int nr_actions;
-	struct tc_action **actions;
-	struct net *net;
-	int action;
-	int police;
-};
-
-enum pedit_header_type {
-	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
-	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
-	__PEDIT_HDR_TYPE_MAX = 6,
-};
-
-enum pedit_cmd {
-	TCA_PEDIT_KEY_EX_CMD_SET = 0,
-	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
-	__PEDIT_CMD_MAX = 2,
-};
-
-struct tc_pedit_key {
-	__u32 mask;
-	__u32 val;
-	__u32 off;
-	__u32 at;
-	__u32 offmask;
-	__u32 shift;
-};
-
-struct tcf_pedit_key_ex {
-	enum pedit_header_type htype;
-	enum pedit_cmd cmd;
-};
-
-struct tcf_pedit {
-	struct tc_action common;
-	unsigned char tcfp_nkeys;
-	unsigned char tcfp_flags;
-	struct tc_pedit_key *tcfp_keys;
-	struct tcf_pedit_key_ex *tcfp_keys_ex;
-};
-
-struct tcf_mirred {
-	struct tc_action common;
-	int tcfm_eaction;
-	bool tcfm_mac_header_xmit;
-	struct net_device *tcfm_dev;
-	struct list_head tcfm_list;
-};
-
-struct tcf_vlan_params {
-	int tcfv_action;
-	u16 tcfv_push_vid;
-	__be16 tcfv_push_proto;
-	u8 tcfv_push_prio;
-	struct callback_head rcu;
-};
-
-struct tcf_vlan {
-	struct tc_action common;
-	struct tcf_vlan_params *vlan_p;
-};
-
-struct tcf_tunnel_key_params {
-	struct callback_head rcu;
-	int tcft_action;
-	struct metadata_dst *tcft_enc_metadata;
-};
-
-struct tcf_tunnel_key {
-	struct tc_action common;
-	struct tcf_tunnel_key_params *params;
-};
-
-struct tcf_csum_params {
-	u32 update_flags;
-	struct callback_head rcu;
-};
-
-struct tcf_csum {
-	struct tc_action common;
-	struct tcf_csum_params *params;
-};
-
-struct tcf_gact {
-	struct tc_action common;
-};
-
-struct tcf_police_params {
-	int tcfp_result;
-	u32 tcfp_ewma_rate;
-	s64 tcfp_burst;
-	u32 tcfp_mtu;
-	s64 tcfp_mtu_ptoks;
-	struct psched_ratecfg rate;
-	bool rate_present;
-	struct psched_ratecfg peak;
-	bool peak_present;
-	struct callback_head rcu;
-};
-
-struct tcf_police {
-	struct tc_action common;
-	struct tcf_police_params *params;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t tcfp_lock;
-	s64 tcfp_toks;
-	s64 tcfp_ptoks;
-	s64 tcfp_t_c;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcf_sample {
-	struct tc_action common;
-	u32 rate;
-	bool truncate;
-	u32 trunc_size;
-	struct psample_group *psample_group;
-	u32 psample_group_num;
-	struct list_head tcfm_list;
-};
-
-struct tcf_skbedit_params {
-	u32 flags;
-	u32 priority;
-	u32 mark;
-	u32 mask;
-	u16 queue_mapping;
-	u16 ptype;
-	struct callback_head rcu;
-};
-
-struct tcf_skbedit {
-	struct tc_action common;
-	struct tcf_skbedit_params *params;
-};
-
-struct nf_conntrack_tuple_mask {
-	struct {
-		union nf_inet_addr u3;
-		union nf_conntrack_man_proto u;
-	} src;
-};
-
-struct nf_conntrack_l4proto___2;
-
-struct nf_conntrack_helper;
-
-struct nf_conntrack_expect {
-	struct hlist_node lnode;
-	struct hlist_node hnode;
-	struct nf_conntrack_tuple tuple;
-	struct nf_conntrack_tuple_mask mask;
-	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
-	struct nf_conntrack_helper *helper;
-	struct nf_conn *master;
-	struct timer_list timeout;
-	refcount_t use;
-	unsigned int flags;
-	unsigned int class;
-	union nf_inet_addr saved_addr;
-	union nf_conntrack_man_proto saved_proto;
-	enum ip_conntrack_dir dir;
-	struct callback_head rcu;
-};
-
-struct PptpControlHeader {
-	__be16 messageType;
-	__u16 reserved;
-};
-
-struct PptpStartSessionRequest {
-	__be16 protocolVersion;
-	__u16 reserved1;
-	__be32 framingCapability;
-	__be32 bearerCapability;
-	__be16 maxChannels;
-	__be16 firmwareRevision;
-	__u8 hostName[64];
-	__u8 vendorString[64];
-};
-
-struct PptpStartSessionReply {
-	__be16 protocolVersion;
-	__u8 resultCode;
-	__u8 generalErrorCode;
-	__be32 framingCapability;
-	__be32 bearerCapability;
-	__be16 maxChannels;
-	__be16 firmwareRevision;
-	__u8 hostName[64];
-	__u8 vendorString[64];
-};
-
-struct PptpStopSessionRequest {
-	__u8 reason;
-	__u8 reserved1;
-	__u16 reserved2;
-};
-
-struct PptpStopSessionReply {
-	__u8 resultCode;
-	__u8 generalErrorCode;
-	__u16 reserved1;
-};
-
-struct PptpOutCallRequest {
-	__be16 callID;
-	__be16 callSerialNumber;
-	__be32 minBPS;
-	__be32 maxBPS;
-	__be32 bearerType;
-	__be32 framingType;
-	__be16 packetWindow;
-	__be16 packetProcDelay;
-	__be16 phoneNumberLength;
-	__u16 reserved1;
-	__u8 phoneNumber[64];
-	__u8 subAddress[64];
-};
-
-struct PptpOutCallReply {
-	__be16 callID;
-	__be16 peersCallID;
-	__u8 resultCode;
-	__u8 generalErrorCode;
-	__be16 causeCode;
-	__be32 connectSpeed;
-	__be16 packetWindow;
-	__be16 packetProcDelay;
-	__be32 physChannelID;
-};
-
-struct PptpInCallRequest {
-	__be16 callID;
-	__be16 callSerialNumber;
-	__be32 callBearerType;
-	__be32 physChannelID;
-	__be16 dialedNumberLength;
-	__be16 dialingNumberLength;
-	__u8 dialedNumber[64];
-	__u8 dialingNumber[64];
-	__u8 subAddress[64];
-};
-
-struct PptpInCallReply {
-	__be16 callID;
-	__be16 peersCallID;
-	__u8 resultCode;
-	__u8 generalErrorCode;
-	__be16 packetWindow;
-	__be16 packetProcDelay;
-	__u16 reserved;
-};
-
-struct PptpInCallConnected {
-	__be16 peersCallID;
-	__u16 reserved;
-	__be32 connectSpeed;
-	__be16 packetWindow;
-	__be16 packetProcDelay;
-	__be32 callFramingType;
-};
-
-struct PptpClearCallRequest {
-	__be16 callID;
-	__u16 reserved;
-};
-
-struct PptpCallDisconnectNotify {
-	__be16 callID;
-	__u8 resultCode;
-	__u8 generalErrorCode;
-	__be16 causeCode;
-	__u16 reserved;
-	__u8 callStatistics[128];
-};
-
-struct PptpWanErrorNotify {
-	__be16 peersCallID;
-	__u16 reserved;
-	__be32 crcErrors;
-	__be32 framingErrors;
-	__be32 hardwareOverRuns;
-	__be32 bufferOverRuns;
-	__be32 timeoutErrors;
-	__be32 alignmentErrors;
-};
-
-struct PptpSetLinkInfo {
-	__be16 peersCallID;
-	__u16 reserved;
-	__be32 sendAccm;
-	__be32 recvAccm;
-};
-
-union pptp_ctrl_union {
-	struct PptpStartSessionRequest sreq;
-	struct PptpStartSessionReply srep;
-	struct PptpStopSessionRequest streq;
-	struct PptpStopSessionReply strep;
-	struct PptpOutCallRequest ocreq;
-	struct PptpOutCallReply ocack;
-	struct PptpInCallRequest icreq;
-	struct PptpInCallReply icack;
-	struct PptpInCallConnected iccon;
-	struct PptpClearCallRequest clrreq;
-	struct PptpCallDisconnectNotify disc;
-	struct PptpWanErrorNotify wanerr;
-	struct PptpSetLinkInfo setlink;
-};
-
-struct nf_nat_range2 {
-	unsigned int flags;
-	union nf_inet_addr min_addr;
-	union nf_inet_addr max_addr;
-	union nf_conntrack_man_proto min_proto;
-	union nf_conntrack_man_proto max_proto;
-	union nf_conntrack_man_proto base_proto;
-};
-
-struct tcf_ct_params {
-	struct nf_conn *tmpl;
-	u16 zone;
-	u32 mark;
-	u32 mark_mask;
-	u32 labels[4];
-	u32 labels_mask[4];
-	struct nf_nat_range2 range;
-	bool ipv4_range;
-	u16 ct_action;
-	struct callback_head rcu;
-};
-
-struct tcf_ct {
-	struct tc_action common;
-	struct tcf_ct_params *params;
-};
-
-struct tcf_mpls_params {
-	int tcfm_action;
-	u32 tcfm_label;
-	u8 tcfm_tc;
-	u8 tcfm_ttl;
-	u8 tcfm_bos;
-	__be16 tcfm_proto;
-	struct callback_head rcu;
-};
-
-struct tcf_mpls {
-	struct tc_action common;
-	struct tcf_mpls_params *mpls_p;
-};
-
-struct tcf_filter_chain_list_item {
-	struct list_head list;
-	tcf_chain_head_change_t *chain_head_change;
-	void *chain_head_change_priv;
-};
-
-struct tcf_net {
-	spinlock_t idr_lock;
-	struct idr idr;
-};
-
-struct tcf_block_owner_item {
-	struct list_head list;
-	struct Qdisc *q;
-	enum flow_block_binder_type binder_type;
-};
-
-struct tcf_chain_info {
-	struct tcf_proto **pprev;
-	struct tcf_proto *next;
-};
-
-struct tcf_dump_args {
-	struct tcf_walker w;
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct tcf_block *block;
-	struct Qdisc *q;
-	u32 parent;
-};
-
-struct tcamsg {
-	unsigned char tca_family;
-	unsigned char tca__pad1;
-	short unsigned int tca__pad2;
-};
-
-enum {
-	TCA_ROOT_UNSPEC = 0,
-	TCA_ROOT_TAB = 1,
-	TCA_ROOT_FLAGS = 2,
-	TCA_ROOT_COUNT = 3,
-	TCA_ROOT_TIME_DELTA = 4,
-	__TCA_ROOT_MAX = 5,
-};
-
-struct tc_action_net {
-	struct tcf_idrinfo *idrinfo;
-	const struct tc_action_ops *ops;
-};
-
-struct tc_act_bpf {
-	__u32 index;
-	__u32 capab;
-	int action;
-	int refcnt;
-	int bindcnt;
-};
-
-enum {
-	TCA_ACT_BPF_UNSPEC = 0,
-	TCA_ACT_BPF_TM = 1,
-	TCA_ACT_BPF_PARMS = 2,
-	TCA_ACT_BPF_OPS_LEN = 3,
-	TCA_ACT_BPF_OPS = 4,
-	TCA_ACT_BPF_FD = 5,
-	TCA_ACT_BPF_NAME = 6,
-	TCA_ACT_BPF_PAD = 7,
-	TCA_ACT_BPF_TAG = 8,
-	TCA_ACT_BPF_ID = 9,
-	__TCA_ACT_BPF_MAX = 10,
-};
-
-struct tcf_bpf {
-	struct tc_action common;
-	struct bpf_prog *filter;
-	union {
-		u32 bpf_fd;
-		u16 bpf_num_ops;
-	};
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-};
-
-struct tcf_bpf_cfg {
-	struct bpf_prog *filter;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	u16 bpf_num_ops;
-	bool is_ebpf;
-};
-
-struct tc_fifo_qopt {
-	__u32 limit;
-};
-
-enum {
-	TCA_BPF_UNSPEC = 0,
-	TCA_BPF_ACT = 1,
-	TCA_BPF_POLICE = 2,
-	TCA_BPF_CLASSID = 3,
-	TCA_BPF_OPS_LEN = 4,
-	TCA_BPF_OPS = 5,
-	TCA_BPF_FD = 6,
-	TCA_BPF_NAME = 7,
-	TCA_BPF_FLAGS = 8,
-	TCA_BPF_FLAGS_GEN = 9,
-	TCA_BPF_TAG = 10,
-	TCA_BPF_ID = 11,
-	__TCA_BPF_MAX = 12,
-};
-
-struct flow_cls_common_offload {
-	u32 chain_index;
-	__be16 protocol;
-	u32 prio;
-	struct netlink_ext_ack *extack;
-};
-
-enum tc_clsbpf_command {
-	TC_CLSBPF_OFFLOAD = 0,
-	TC_CLSBPF_STATS = 1,
-};
-
-struct tc_cls_bpf_offload {
-	struct flow_cls_common_offload common;
-	enum tc_clsbpf_command command;
-	struct tcf_exts *exts;
-	struct bpf_prog *prog;
-	struct bpf_prog *oldprog;
-	const char *name;
-	bool exts_integrated;
-};
-
-struct cls_bpf_head {
-	struct list_head plist;
-	struct idr handle_idr;
-	struct callback_head rcu;
-};
-
-struct cls_bpf_prog {
-	struct bpf_prog *filter;
-	struct list_head link;
-	struct tcf_result res;
-	bool exts_integrated;
-	u32 gen_flags;
-	unsigned int in_hw_count;
-	struct tcf_exts exts;
-	u32 handle;
-	u16 bpf_num_ops;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-struct tcf_ematch_tree_hdr {
-	__u16 nmatches;
-	__u16 progid;
-};
-
-enum {
-	TCA_EMATCH_TREE_UNSPEC = 0,
-	TCA_EMATCH_TREE_HDR = 1,
-	TCA_EMATCH_TREE_LIST = 2,
-	__TCA_EMATCH_TREE_MAX = 3,
-};
-
-struct tcf_ematch_hdr {
-	__u16 matchid;
-	__u16 kind;
-	__u16 flags;
-	__u16 pad;
-};
-
-struct tcf_pkt_info {
-	unsigned char *ptr;
-	int nexthdr;
-};
-
-struct tcf_ematch_ops;
-
-struct tcf_ematch {
-	struct tcf_ematch_ops *ops;
-	long unsigned int data;
-	unsigned int datalen;
-	u16 matchid;
-	u16 flags;
-	struct net *net;
-};
-
-struct tcf_ematch_ops {
-	int kind;
-	int datalen;
-	int (*change)(struct net *, void *, int, struct tcf_ematch *);
-	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
-	void (*destroy)(struct tcf_ematch *);
-	int (*dump)(struct sk_buff *, struct tcf_ematch *);
-	struct module *owner;
-	struct list_head link;
-};
-
-struct tcf_ematch_tree {
-	struct tcf_ematch_tree_hdr hdr;
-	struct tcf_ematch *matches;
-};
-
-struct sockaddr_nl {
-	__kernel_sa_family_t nl_family;
-	short unsigned int nl_pad;
-	__u32 nl_pid;
-	__u32 nl_groups;
-};
-
-struct nlmsgerr {
-	int error;
-	struct nlmsghdr msg;
-};
-
-enum nlmsgerr_attrs {
-	NLMSGERR_ATTR_UNUSED = 0,
-	NLMSGERR_ATTR_MSG = 1,
-	NLMSGERR_ATTR_OFFS = 2,
-	NLMSGERR_ATTR_COOKIE = 3,
-	__NLMSGERR_ATTR_MAX = 4,
-	NLMSGERR_ATTR_MAX = 3,
-};
-
-struct nl_pktinfo {
-	__u32 group;
-};
-
-enum {
-	NETLINK_UNCONNECTED = 0,
-	NETLINK_CONNECTED = 1,
-};
-
-enum netlink_skb_flags {
-	NETLINK_SKB_DST = 8,
-};
-
-struct netlink_notify {
-	struct net *net;
-	u32 portid;
-	int protocol;
-};
-
-struct netlink_tap {
-	struct net_device *dev;
-	struct module *module;
-	struct list_head list;
-};
-
-struct netlink_sock {
-	struct sock sk;
-	u32 portid;
-	u32 dst_portid;
-	u32 dst_group;
-	u32 flags;
-	u32 subscriptions;
-	u32 ngroups;
-	long unsigned int *groups;
-	long unsigned int state;
-	size_t max_recvmsg_len;
-	wait_queue_head_t wait;
-	bool bound;
-	bool cb_running;
-	int dump_done_errno;
-	struct netlink_callback cb;
-	struct mutex *cb_mutex;
-	struct mutex cb_def_mutex;
-	void (*netlink_rcv)(struct sk_buff *);
-	int (*netlink_bind)(struct net *, int);
-	void (*netlink_unbind)(struct net *, int);
-	struct module *module;
-	struct rhash_head node;
-	struct callback_head rcu;
-	struct work_struct work;
-};
-
-struct listeners;
-
-struct netlink_table {
-	struct rhashtable hash;
-	struct hlist_head mc_list;
-	struct listeners *listeners;
-	unsigned int flags;
-	unsigned int groups;
-	struct mutex *cb_mutex;
-	struct module *module;
-	int (*bind)(struct net *, int);
-	void (*unbind)(struct net *, int);
-	bool (*compare)(struct net *, struct sock *);
-	int registered;
-};
-
-struct listeners {
-	struct callback_head rcu;
-	long unsigned int masks[0];
-};
-
-struct netlink_tap_net {
-	struct list_head netlink_tap_all;
-	struct mutex netlink_tap_lock;
-};
-
-struct netlink_compare_arg {
-	possible_net_t pnet;
-	u32 portid;
-};
-
-struct netlink_broadcast_data {
-	struct sock *exclude_sk;
-	struct net *net;
-	u32 portid;
-	u32 group;
-	int failure;
-	int delivery_failure;
-	int congested;
-	int delivered;
-	gfp_t allocation;
-	struct sk_buff *skb;
-	struct sk_buff *skb2;
-	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
-	void *tx_data;
-};
-
-struct netlink_set_err_data {
-	struct sock *exclude_sk;
-	u32 portid;
-	u32 group;
-	int code;
-};
-
-struct nl_seq_iter {
-	struct seq_net_private p;
-	struct rhashtable_iter hti;
-	int link;
-};
-
-enum {
-	CTRL_CMD_UNSPEC = 0,
-	CTRL_CMD_NEWFAMILY = 1,
-	CTRL_CMD_DELFAMILY = 2,
-	CTRL_CMD_GETFAMILY = 3,
-	CTRL_CMD_NEWOPS = 4,
-	CTRL_CMD_DELOPS = 5,
-	CTRL_CMD_GETOPS = 6,
-	CTRL_CMD_NEWMCAST_GRP = 7,
-	CTRL_CMD_DELMCAST_GRP = 8,
-	CTRL_CMD_GETMCAST_GRP = 9,
-	__CTRL_CMD_MAX = 10,
-};
-
-enum {
-	CTRL_ATTR_UNSPEC = 0,
-	CTRL_ATTR_FAMILY_ID = 1,
-	CTRL_ATTR_FAMILY_NAME = 2,
-	CTRL_ATTR_VERSION = 3,
-	CTRL_ATTR_HDRSIZE = 4,
-	CTRL_ATTR_MAXATTR = 5,
-	CTRL_ATTR_OPS = 6,
-	CTRL_ATTR_MCAST_GROUPS = 7,
-	__CTRL_ATTR_MAX = 8,
-};
-
-enum {
-	CTRL_ATTR_OP_UNSPEC = 0,
-	CTRL_ATTR_OP_ID = 1,
-	CTRL_ATTR_OP_FLAGS = 2,
-	__CTRL_ATTR_OP_MAX = 3,
-};
-
-enum {
-	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
-	CTRL_ATTR_MCAST_GRP_NAME = 1,
-	CTRL_ATTR_MCAST_GRP_ID = 2,
-	__CTRL_ATTR_MCAST_GRP_MAX = 3,
-};
-
-struct genl_dumpit_info {
-	const struct genl_family *family;
-	const struct genl_ops *ops;
-	struct nlattr **attrs;
-};
-
-struct trace_event_raw_bpf_test_finish {
-	struct trace_entry ent;
-	int err;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_bpf_test_finish {};
-
-typedef void (*btf_trace_bpf_test_finish)(void *, int *);
-
-struct nf_hook_entries_rcu_head {
-	struct callback_head head;
-	void *allocation;
-};
-
-struct nf_loginfo {
-	u_int8_t type;
-	union {
-		struct {
-			u_int32_t copy_len;
-			u_int16_t group;
-			u_int16_t qthreshold;
-			u_int16_t flags;
-		} ulog;
-		struct {
-			u_int8_t level;
-			u_int8_t logflags;
-		} log;
-	} u;
-};
-
-struct nf_log_buf {
-	unsigned int count;
-	char buf[1020];
-};
-
-struct ip_rt_info {
-	__be32 daddr;
-	__be32 saddr;
-	u_int8_t tos;
-	u_int32_t mark;
-};
-
-struct ip6_rt_info {
-	struct in6_addr daddr;
-	struct in6_addr saddr;
-	u_int32_t mark;
-};
-
-struct nf_sockopt_ops {
-	struct list_head list;
-	u_int8_t pf;
-	int set_optmin;
-	int set_optmax;
-	int (*set)(struct sock *, int, void *, unsigned int);
-	int (*compat_set)(struct sock *, int, void *, unsigned int);
-	int get_optmin;
-	int get_optmax;
-	int (*get)(struct sock *, int, void *, int *);
-	int (*compat_get)(struct sock *, int, void *, int *);
-	struct module *owner;
-};
-
-enum nfnetlink_groups {
-	NFNLGRP_NONE = 0,
-	NFNLGRP_CONNTRACK_NEW = 1,
-	NFNLGRP_CONNTRACK_UPDATE = 2,
-	NFNLGRP_CONNTRACK_DESTROY = 3,
-	NFNLGRP_CONNTRACK_EXP_NEW = 4,
-	NFNLGRP_CONNTRACK_EXP_UPDATE = 5,
-	NFNLGRP_CONNTRACK_EXP_DESTROY = 6,
-	NFNLGRP_NFTABLES = 7,
-	NFNLGRP_ACCT_QUOTA = 8,
-	NFNLGRP_NFTRACE = 9,
-	__NFNLGRP_MAX = 10,
-};
-
-struct nfgenmsg {
-	__u8 nfgen_family;
-	__u8 version;
-	__be16 res_id;
-};
-
-enum nfnl_batch_attributes {
-	NFNL_BATCH_UNSPEC = 0,
-	NFNL_BATCH_GENID = 1,
-	__NFNL_BATCH_MAX = 2,
-};
-
-struct nfnl_callback {
-	int (*call)(struct net *, struct sock *, struct sk_buff *, const struct nlmsghdr *, const struct nlattr * const *, struct netlink_ext_ack *);
-	int (*call_rcu)(struct net *, struct sock *, struct sk_buff *, const struct nlmsghdr *, const struct nlattr * const *, struct netlink_ext_ack *);
-	int (*call_batch)(struct net *, struct sock *, struct sk_buff *, const struct nlmsghdr *, const struct nlattr * const *, struct netlink_ext_ack *);
-	const struct nla_policy *policy;
-	const u_int16_t attr_count;
-};
-
-struct nfnetlink_subsystem {
-	const char *name;
-	__u8 subsys_id;
-	__u8 cb_count;
-	const struct nfnl_callback *cb;
-	struct module *owner;
-	int (*commit)(struct net *, struct sk_buff *);
-	int (*abort)(struct net *, struct sk_buff *, bool);
-	void (*cleanup)(struct net *);
-	bool (*valid_genid)(struct net *, u32);
-};
-
-struct nfnl_err {
-	struct list_head head;
-	struct nlmsghdr *nlh;
-	int err;
-	struct netlink_ext_ack extack;
-};
-
-enum {
-	NFNL_BATCH_FAILURE = 1,
-	NFNL_BATCH_DONE = 2,
-	NFNL_BATCH_REPLAY = 4,
-};
-
-enum nfulnl_msg_types {
-	NFULNL_MSG_PACKET = 0,
-	NFULNL_MSG_CONFIG = 1,
-	NFULNL_MSG_MAX = 2,
-};
-
-struct nfulnl_msg_packet_hdr {
-	__be16 hw_protocol;
-	__u8 hook;
-	__u8 _pad;
-};
-
-struct nfulnl_msg_packet_hw {
-	__be16 hw_addrlen;
-	__u16 _pad;
-	__u8 hw_addr[8];
-};
-
-struct nfulnl_msg_packet_timestamp {
-	__be64 sec;
-	__be64 usec;
-};
-
-enum nfulnl_vlan_attr {
-	NFULA_VLAN_UNSPEC = 0,
-	NFULA_VLAN_PROTO = 1,
-	NFULA_VLAN_TCI = 2,
-	__NFULA_VLAN_MAX = 3,
-};
-
-enum nfulnl_attr_type {
-	NFULA_UNSPEC = 0,
-	NFULA_PACKET_HDR = 1,
-	NFULA_MARK = 2,
-	NFULA_TIMESTAMP = 3,
-	NFULA_IFINDEX_INDEV = 4,
-	NFULA_IFINDEX_OUTDEV = 5,
-	NFULA_IFINDEX_PHYSINDEV = 6,
-	NFULA_IFINDEX_PHYSOUTDEV = 7,
-	NFULA_HWADDR = 8,
-	NFULA_PAYLOAD = 9,
-	NFULA_PREFIX = 10,
-	NFULA_UID = 11,
-	NFULA_SEQ = 12,
-	NFULA_SEQ_GLOBAL = 13,
-	NFULA_GID = 14,
-	NFULA_HWTYPE = 15,
-	NFULA_HWHEADER = 16,
-	NFULA_HWLEN = 17,
-	NFULA_CT = 18,
-	NFULA_CT_INFO = 19,
-	NFULA_VLAN = 20,
-	NFULA_L2HDR = 21,
-	__NFULA_MAX = 22,
-};
-
-enum nfulnl_msg_config_cmds {
-	NFULNL_CFG_CMD_NONE = 0,
-	NFULNL_CFG_CMD_BIND = 1,
-	NFULNL_CFG_CMD_UNBIND = 2,
-	NFULNL_CFG_CMD_PF_BIND = 3,
-	NFULNL_CFG_CMD_PF_UNBIND = 4,
-};
-
-struct nfulnl_msg_config_cmd {
-	__u8 command;
-};
-
-struct nfulnl_msg_config_mode {
-	__be32 copy_range;
-	__u8 copy_mode;
-	__u8 _pad;
-} __attribute__((packed));
-
-enum nfulnl_attr_config {
-	NFULA_CFG_UNSPEC = 0,
-	NFULA_CFG_CMD = 1,
-	NFULA_CFG_MODE = 2,
-	NFULA_CFG_NLBUFSIZ = 3,
-	NFULA_CFG_TIMEOUT = 4,
-	NFULA_CFG_QTHRESH = 5,
-	NFULA_CFG_FLAGS = 6,
-	__NFULA_CFG_MAX = 7,
-};
-
-struct nfulnl_instance {
-	struct hlist_node hlist;
-	spinlock_t lock;
-	refcount_t use;
-	unsigned int qlen;
-	struct sk_buff *skb;
-	struct timer_list timer;
-	struct net *net;
-	struct user_namespace *peer_user_ns;
-	u32 peer_portid;
-	unsigned int flushtimeout;
-	unsigned int nlbufsiz;
-	unsigned int qthreshold;
-	u_int32_t copy_range;
-	u_int32_t seq;
-	u_int16_t group_num;
-	u_int16_t flags;
-	u_int8_t copy_mode;
-	struct callback_head rcu;
-};
-
-struct nfnl_log_net {
-	spinlock_t instances_lock;
-	struct hlist_head instance_table[16];
-	atomic_t global_seq;
-};
-
-struct iter_state {
-	struct seq_net_private p;
-	unsigned int bucket;
-};
-
-enum ip_conntrack_status {
-	IPS_EXPECTED_BIT = 0,
-	IPS_EXPECTED = 1,
-	IPS_SEEN_REPLY_BIT = 1,
-	IPS_SEEN_REPLY = 2,
-	IPS_ASSURED_BIT = 2,
-	IPS_ASSURED = 4,
-	IPS_CONFIRMED_BIT = 3,
-	IPS_CONFIRMED = 8,
-	IPS_SRC_NAT_BIT = 4,
-	IPS_SRC_NAT = 16,
-	IPS_DST_NAT_BIT = 5,
-	IPS_DST_NAT = 32,
-	IPS_NAT_MASK = 48,
-	IPS_SEQ_ADJUST_BIT = 6,
-	IPS_SEQ_ADJUST = 64,
-	IPS_SRC_NAT_DONE_BIT = 7,
-	IPS_SRC_NAT_DONE = 128,
-	IPS_DST_NAT_DONE_BIT = 8,
-	IPS_DST_NAT_DONE = 256,
-	IPS_NAT_DONE_MASK = 384,
-	IPS_DYING_BIT = 9,
-	IPS_DYING = 512,
-	IPS_FIXED_TIMEOUT_BIT = 10,
-	IPS_FIXED_TIMEOUT = 1024,
-	IPS_TEMPLATE_BIT = 11,
-	IPS_TEMPLATE = 2048,
-	IPS_UNTRACKED_BIT = 12,
-	IPS_UNTRACKED = 4096,
-	IPS_HELPER_BIT = 13,
-	IPS_HELPER = 8192,
-	IPS_OFFLOAD_BIT = 14,
-	IPS_OFFLOAD = 16384,
-	IPS_UNCHANGEABLE_MASK = 19449,
-	__IPS_MAX_BIT = 15,
-};
-
-enum ip_conntrack_events {
-	IPCT_NEW = 0,
-	IPCT_RELATED = 1,
-	IPCT_DESTROY = 2,
-	IPCT_REPLY = 3,
-	IPCT_ASSURED = 4,
-	IPCT_PROTOINFO = 5,
-	IPCT_HELPER = 6,
-	IPCT_MARK = 7,
-	IPCT_SEQADJ = 8,
-	IPCT_NATSEQADJ = 8,
-	IPCT_SECMARK = 9,
-	IPCT_LABEL = 10,
-	IPCT_SYNPROXY = 11,
-	__IPCT_MAX = 12,
-};
-
-struct nf_conntrack_expect_policy;
-
-struct nf_conntrack_helper {
-	struct hlist_node hnode;
-	char name[16];
-	refcount_t refcnt;
-	struct module *me;
-	const struct nf_conntrack_expect_policy *expect_policy;
-	struct nf_conntrack_tuple tuple;
-	int (*help)(struct sk_buff *, unsigned int, struct nf_conn *, enum ip_conntrack_info);
-	void (*destroy)(struct nf_conn *);
-	int (*from_nlattr)(struct nlattr *, struct nf_conn *);
-	int (*to_nlattr)(struct sk_buff *, const struct nf_conn *);
-	unsigned int expect_class_max;
-	unsigned int flags;
-	unsigned int queue_num;
-	u16 data_len;
-	char nat_mod_name[16];
-};
-
-struct nf_conntrack_expect_policy {
-	unsigned int max_expected;
-	unsigned int timeout;
-	char name[16];
-};
-
-struct nf_conn_help {
-	struct nf_conntrack_helper *helper;
-	struct hlist_head expectations;
-	u8 expecting[4];
-	int: 32;
-	char data[32];
-};
-
-enum nf_ct_ecache_state {
-	NFCT_ECACHE_UNKNOWN = 0,
-	NFCT_ECACHE_DESTROY_FAIL = 1,
-	NFCT_ECACHE_DESTROY_SENT = 2,
-};
-
-struct nf_conntrack_ecache {
-	long unsigned int cache;
-	u16 missed;
-	u16 ctmask;
-	u16 expmask;
-	enum nf_ct_ecache_state state: 8;
-	u32 portid;
-};
-
-struct nf_conn_counter {
-	atomic64_t packets;
-	atomic64_t bytes;
-};
-
-struct nf_conn_acct {
-	struct nf_conn_counter counter[2];
-};
-
-struct nf_conn_tstamp {
-	u_int64_t start;
-	u_int64_t stop;
-};
-
-struct nf_ct_timeout {
-	__u16 l3num;
-	const struct nf_conntrack_l4proto *l4proto;
-	char data[0];
-};
-
-struct nf_conn_timeout {
-	struct nf_ct_timeout *timeout;
-};
-
-struct conntrack_gc_work {
-	struct delayed_work dwork;
-	u32 last_bucket;
-	bool exiting;
-	bool early_drop;
-	long int next_gc_run;
-};
-
-enum ctattr_l4proto {
-	CTA_PROTO_UNSPEC = 0,
-	CTA_PROTO_NUM = 1,
-	CTA_PROTO_SRC_PORT = 2,
-	CTA_PROTO_DST_PORT = 3,
-	CTA_PROTO_ICMP_ID = 4,
-	CTA_PROTO_ICMP_TYPE = 5,
-	CTA_PROTO_ICMP_CODE = 6,
-	CTA_PROTO_ICMPV6_ID = 7,
-	CTA_PROTO_ICMPV6_TYPE = 8,
-	CTA_PROTO_ICMPV6_CODE = 9,
-	__CTA_PROTO_MAX = 10,
-};
-
-struct iter_data {
-	int (*iter)(struct nf_conn *, void *);
-	void *data;
-	struct net *net;
-};
-
-struct ct_iter_state {
-	struct seq_net_private p;
-	struct hlist_nulls_head *hash;
-	unsigned int htable_size;
-	unsigned int bucket;
-	u_int64_t time_now;
-};
-
-enum nf_ct_sysctl_index {
-	NF_SYSCTL_CT_MAX = 0,
-	NF_SYSCTL_CT_COUNT = 1,
-	NF_SYSCTL_CT_BUCKETS = 2,
-	NF_SYSCTL_CT_CHECKSUM = 3,
-	NF_SYSCTL_CT_LOG_INVALID = 4,
-	NF_SYSCTL_CT_EXPECT_MAX = 5,
-	NF_SYSCTL_CT_ACCT = 6,
-	NF_SYSCTL_CT_HELPER = 7,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC = 8,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_SENT = 9,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_RECV = 10,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_ESTABLISHED = 11,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_FIN_WAIT = 12,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE_WAIT = 13,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_LAST_ACK = 14,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_TIME_WAIT = 15,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE = 16,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_RETRANS = 17,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_UNACK = 18,
-	NF_SYSCTL_CT_PROTO_TCP_LOOSE = 19,
-	NF_SYSCTL_CT_PROTO_TCP_LIBERAL = 20,
-	NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS = 21,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP = 22,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM = 23,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP = 24,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6 = 25,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_CLOSED = 26,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_WAIT = 27,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_ECHOED = 28,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_ESTABLISHED = 29,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_SENT = 30,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_RECD = 31,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT = 32,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_HEARTBEAT_SENT = 33,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_HEARTBEAT_ACKED = 34,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_REQUEST = 35,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_RESPOND = 36,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_PARTOPEN = 37,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_OPEN = 38,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSEREQ = 39,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSING = 40,
-	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_TIMEWAIT = 41,
-	NF_SYSCTL_CT_PROTO_DCCP_LOOSE = 42,
-	__NF_SYSCTL_CT_LAST_SYSCTL = 43,
-};
-
-enum ip_conntrack_expect_events {
-	IPEXP_NEW = 0,
-	IPEXP_DESTROY = 1,
-};
-
-struct ct_expect_iter_state {
-	struct seq_net_private p;
-	unsigned int bucket;
-};
-
-struct nf_ct_ext_type {
-	void (*destroy)(struct nf_conn *);
-	enum nf_ct_ext_id id;
-	u8 len;
-	u8 align;
-};
-
-enum nf_ct_helper_flags {
-	NF_CT_HELPER_F_USERSPACE = 1,
-	NF_CT_HELPER_F_CONFIGURED = 2,
-};
-
-struct nf_ct_helper_expectfn {
-	struct list_head head;
-	const char *name;
-	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
-};
-
-struct nf_conntrack_nat_helper {
-	struct list_head list;
-	char mod_name[16];
-	struct module *module;
-};
-
-struct nf_conntrack_net {
-	unsigned int users4;
-	unsigned int users6;
-	unsigned int users_bridge;
-};
-
-struct nf_ct_bridge_info {
-	struct nf_hook_ops *ops;
-	unsigned int ops_size;
-	struct module *me;
-};
-
-struct nf_ct_tcp_flags {
-	__u8 flags;
-	__u8 mask;
-};
-
-enum {
-	TCP_FLAG_CWR = 32768,
-	TCP_FLAG_ECE = 16384,
-	TCP_FLAG_URG = 8192,
-	TCP_FLAG_ACK = 4096,
-	TCP_FLAG_PSH = 2048,
-	TCP_FLAG_RST = 1024,
-	TCP_FLAG_SYN = 512,
-	TCP_FLAG_FIN = 256,
-	TCP_RESERVED_BITS = 15,
-	TCP_DATA_OFFSET = 240,
-};
-
-struct nf_conn_synproxy {
-	u32 isn;
-	u32 its;
-	u32 tsoff;
-};
-
-enum tcp_bit_set {
-	TCP_SYN_SET = 0,
-	TCP_SYNACK_SET = 1,
-	TCP_FIN_SET = 2,
-	TCP_ACK_SET = 3,
-	TCP_RST_SET = 4,
-	TCP_NONE_SET = 5,
-};
-
-enum ctattr_protoinfo {
-	CTA_PROTOINFO_UNSPEC = 0,
-	CTA_PROTOINFO_TCP = 1,
-	CTA_PROTOINFO_DCCP = 2,
-	CTA_PROTOINFO_SCTP = 3,
-	__CTA_PROTOINFO_MAX = 4,
-};
-
-enum ctattr_protoinfo_tcp {
-	CTA_PROTOINFO_TCP_UNSPEC = 0,
-	CTA_PROTOINFO_TCP_STATE = 1,
-	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2,
-	CTA_PROTOINFO_TCP_WSCALE_REPLY = 3,
-	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL = 4,
-	CTA_PROTOINFO_TCP_FLAGS_REPLY = 5,
-	__CTA_PROTOINFO_TCP_MAX = 6,
-};
-
-struct tcp_sack_block_wire {
-	__be32 start_seq;
-	__be32 end_seq;
-};
-
-struct nf_ct_seqadj {
-	u32 correction_pos;
-	s32 offset_before;
-	s32 offset_after;
-};
-
-struct nf_conn_seqadj {
-	struct nf_ct_seqadj seq[2];
-};
-
-struct icmpv6_echo {
-	__be16 identifier;
-	__be16 sequence;
-};
-
-struct icmpv6_nd_advt {
-	__u32 reserved: 5;
-	__u32 override: 1;
-	__u32 solicited: 1;
-	__u32 router: 1;
-	__u32 reserved2: 24;
-};
-
-struct icmpv6_nd_ra {
-	__u8 hop_limit;
-	__u8 reserved: 3;
-	__u8 router_pref: 2;
-	__u8 home_agent: 1;
-	__u8 other: 1;
-	__u8 managed: 1;
-	__be16 rt_lifetime;
-};
-
-struct icmp6hdr {
-	__u8 icmp6_type;
-	__u8 icmp6_code;
-	__sum16 icmp6_cksum;
-	union {
-		__be32 un_data32[1];
-		__be16 un_data16[2];
-		__u8 un_data8[4];
-		struct icmpv6_echo u_echo;
-		struct icmpv6_nd_advt u_nd_advt;
-		struct icmpv6_nd_ra u_nd_ra;
-	} icmp6_dataun;
-};
-
-enum ct_dccp_roles {
-	CT_DCCP_ROLE_CLIENT = 0,
-	CT_DCCP_ROLE_SERVER = 1,
-	__CT_DCCP_ROLE_MAX = 2,
-};
-
-struct dccp_hdr_ext {
-	__be32 dccph_seq_low;
-};
-
-struct dccp_hdr_ack_bits {
-	__be16 dccph_reserved1;
-	__be16 dccph_ack_nr_high;
-	__be32 dccph_ack_nr_low;
-};
-
-enum dccp_pkt_type {
-	DCCP_PKT_REQUEST = 0,
-	DCCP_PKT_RESPONSE = 1,
-	DCCP_PKT_DATA = 2,
-	DCCP_PKT_ACK = 3,
-	DCCP_PKT_DATAACK = 4,
-	DCCP_PKT_CLOSEREQ = 5,
-	DCCP_PKT_CLOSE = 6,
-	DCCP_PKT_RESET = 7,
-	DCCP_PKT_SYNC = 8,
-	DCCP_PKT_SYNCACK = 9,
-	DCCP_PKT_INVALID = 10,
-};
-
-enum ctattr_protoinfo_dccp {
-	CTA_PROTOINFO_DCCP_UNSPEC = 0,
-	CTA_PROTOINFO_DCCP_STATE = 1,
-	CTA_PROTOINFO_DCCP_ROLE = 2,
-	CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ = 3,
-	CTA_PROTOINFO_DCCP_PAD = 4,
-	__CTA_PROTOINFO_DCCP_MAX = 5,
-};
-
-enum {
-	SCTP_CHUNK_FLAG_T = 1,
-};
-
-enum {
-	SCTP_MIB_NUM = 0,
-	SCTP_MIB_CURRESTAB = 1,
-	SCTP_MIB_ACTIVEESTABS = 2,
-	SCTP_MIB_PASSIVEESTABS = 3,
-	SCTP_MIB_ABORTEDS = 4,
-	SCTP_MIB_SHUTDOWNS = 5,
-	SCTP_MIB_OUTOFBLUES = 6,
-	SCTP_MIB_CHECKSUMERRORS = 7,
-	SCTP_MIB_OUTCTRLCHUNKS = 8,
-	SCTP_MIB_OUTORDERCHUNKS = 9,
-	SCTP_MIB_OUTUNORDERCHUNKS = 10,
-	SCTP_MIB_INCTRLCHUNKS = 11,
-	SCTP_MIB_INORDERCHUNKS = 12,
-	SCTP_MIB_INUNORDERCHUNKS = 13,
-	SCTP_MIB_FRAGUSRMSGS = 14,
-	SCTP_MIB_REASMUSRMSGS = 15,
-	SCTP_MIB_OUTSCTPPACKS = 16,
-	SCTP_MIB_INSCTPPACKS = 17,
-	SCTP_MIB_T1_INIT_EXPIREDS = 18,
-	SCTP_MIB_T1_COOKIE_EXPIREDS = 19,
-	SCTP_MIB_T2_SHUTDOWN_EXPIREDS = 20,
-	SCTP_MIB_T3_RTX_EXPIREDS = 21,
-	SCTP_MIB_T4_RTO_EXPIREDS = 22,
-	SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS = 23,
-	SCTP_MIB_DELAY_SACK_EXPIREDS = 24,
-	SCTP_MIB_AUTOCLOSE_EXPIREDS = 25,
-	SCTP_MIB_T1_RETRANSMITS = 26,
-	SCTP_MIB_T3_RETRANSMITS = 27,
-	SCTP_MIB_PMTUD_RETRANSMITS = 28,
-	SCTP_MIB_FAST_RETRANSMITS = 29,
-	SCTP_MIB_IN_PKT_SOFTIRQ = 30,
-	SCTP_MIB_IN_PKT_BACKLOG = 31,
-	SCTP_MIB_IN_PKT_DISCARDS = 32,
-	SCTP_MIB_IN_DATA_CHUNK_DISCARDS = 33,
-	__SCTP_MIB_MAX = 34,
-};
-
-enum ctattr_protoinfo_sctp {
-	CTA_PROTOINFO_SCTP_UNSPEC = 0,
-	CTA_PROTOINFO_SCTP_STATE = 1,
-	CTA_PROTOINFO_SCTP_VTAG_ORIGINAL = 2,
-	CTA_PROTOINFO_SCTP_VTAG_REPLY = 3,
-	__CTA_PROTOINFO_SCTP_MAX = 4,
-};
-
-enum cntl_msg_types {
-	IPCTNL_MSG_CT_NEW = 0,
-	IPCTNL_MSG_CT_GET = 1,
-	IPCTNL_MSG_CT_DELETE = 2,
-	IPCTNL_MSG_CT_GET_CTRZERO = 3,
-	IPCTNL_MSG_CT_GET_STATS_CPU = 4,
-	IPCTNL_MSG_CT_GET_STATS = 5,
-	IPCTNL_MSG_CT_GET_DYING = 6,
-	IPCTNL_MSG_CT_GET_UNCONFIRMED = 7,
-	IPCTNL_MSG_MAX = 8,
-};
-
-enum ctnl_exp_msg_types {
-	IPCTNL_MSG_EXP_NEW = 0,
-	IPCTNL_MSG_EXP_GET = 1,
-	IPCTNL_MSG_EXP_DELETE = 2,
-	IPCTNL_MSG_EXP_GET_STATS_CPU = 3,
-	IPCTNL_MSG_EXP_MAX = 4,
-};
-
-enum ctattr_type {
-	CTA_UNSPEC = 0,
-	CTA_TUPLE_ORIG = 1,
-	CTA_TUPLE_REPLY = 2,
-	CTA_STATUS = 3,
-	CTA_PROTOINFO = 4,
-	CTA_HELP = 5,
-	CTA_NAT_SRC = 6,
-	CTA_TIMEOUT = 7,
-	CTA_MARK = 8,
-	CTA_COUNTERS_ORIG = 9,
-	CTA_COUNTERS_REPLY = 10,
-	CTA_USE = 11,
-	CTA_ID = 12,
-	CTA_NAT_DST = 13,
-	CTA_TUPLE_MASTER = 14,
-	CTA_SEQ_ADJ_ORIG = 15,
-	CTA_NAT_SEQ_ADJ_ORIG = 15,
-	CTA_SEQ_ADJ_REPLY = 16,
-	CTA_NAT_SEQ_ADJ_REPLY = 16,
-	CTA_SECMARK = 17,
-	CTA_ZONE = 18,
-	CTA_SECCTX = 19,
-	CTA_TIMESTAMP = 20,
-	CTA_MARK_MASK = 21,
-	CTA_LABELS = 22,
-	CTA_LABELS_MASK = 23,
-	CTA_SYNPROXY = 24,
-	__CTA_MAX = 25,
-};
-
-enum ctattr_tuple {
-	CTA_TUPLE_UNSPEC = 0,
-	CTA_TUPLE_IP = 1,
-	CTA_TUPLE_PROTO = 2,
-	CTA_TUPLE_ZONE = 3,
-	__CTA_TUPLE_MAX = 4,
-};
-
-enum ctattr_ip {
-	CTA_IP_UNSPEC = 0,
-	CTA_IP_V4_SRC = 1,
-	CTA_IP_V4_DST = 2,
-	CTA_IP_V6_SRC = 3,
-	CTA_IP_V6_DST = 4,
-	__CTA_IP_MAX = 5,
-};
-
-enum ctattr_counters {
-	CTA_COUNTERS_UNSPEC = 0,
-	CTA_COUNTERS_PACKETS = 1,
-	CTA_COUNTERS_BYTES = 2,
-	CTA_COUNTERS32_PACKETS = 3,
-	CTA_COUNTERS32_BYTES = 4,
-	CTA_COUNTERS_PAD = 5,
-	__CTA_COUNTERS_MAX = 6,
-};
-
-enum ctattr_tstamp {
-	CTA_TIMESTAMP_UNSPEC = 0,
-	CTA_TIMESTAMP_START = 1,
-	CTA_TIMESTAMP_STOP = 2,
-	CTA_TIMESTAMP_PAD = 3,
-	__CTA_TIMESTAMP_MAX = 4,
-};
-
-enum ctattr_seqadj {
-	CTA_SEQADJ_UNSPEC = 0,
-	CTA_SEQADJ_CORRECTION_POS = 1,
-	CTA_SEQADJ_OFFSET_BEFORE = 2,
-	CTA_SEQADJ_OFFSET_AFTER = 3,
-	__CTA_SEQADJ_MAX = 4,
-};
-
-enum ctattr_synproxy {
-	CTA_SYNPROXY_UNSPEC = 0,
-	CTA_SYNPROXY_ISN = 1,
-	CTA_SYNPROXY_ITS = 2,
-	CTA_SYNPROXY_TSOFF = 3,
-	__CTA_SYNPROXY_MAX = 4,
-};
-
-enum ctattr_expect {
-	CTA_EXPECT_UNSPEC = 0,
-	CTA_EXPECT_MASTER = 1,
-	CTA_EXPECT_TUPLE = 2,
-	CTA_EXPECT_MASK = 3,
-	CTA_EXPECT_TIMEOUT = 4,
-	CTA_EXPECT_ID = 5,
-	CTA_EXPECT_HELP_NAME = 6,
-	CTA_EXPECT_ZONE = 7,
-	CTA_EXPECT_FLAGS = 8,
-	CTA_EXPECT_CLASS = 9,
-	CTA_EXPECT_NAT = 10,
-	CTA_EXPECT_FN = 11,
-	__CTA_EXPECT_MAX = 12,
-};
-
-enum ctattr_expect_nat {
-	CTA_EXPECT_NAT_UNSPEC = 0,
-	CTA_EXPECT_NAT_DIR = 1,
-	CTA_EXPECT_NAT_TUPLE = 2,
-	__CTA_EXPECT_NAT_MAX = 3,
-};
-
-enum ctattr_help {
-	CTA_HELP_UNSPEC = 0,
-	CTA_HELP_NAME = 1,
-	CTA_HELP_INFO = 2,
-	__CTA_HELP_MAX = 3,
-};
-
-enum ctattr_secctx {
-	CTA_SECCTX_UNSPEC = 0,
-	CTA_SECCTX_NAME = 1,
-	__CTA_SECCTX_MAX = 2,
-};
-
-enum ctattr_stats_cpu {
-	CTA_STATS_UNSPEC = 0,
-	CTA_STATS_SEARCHED = 1,
-	CTA_STATS_FOUND = 2,
-	CTA_STATS_NEW = 3,
-	CTA_STATS_INVALID = 4,
-	CTA_STATS_IGNORE = 5,
-	CTA_STATS_DELETE = 6,
-	CTA_STATS_DELETE_LIST = 7,
-	CTA_STATS_INSERT = 8,
-	CTA_STATS_INSERT_FAILED = 9,
-	CTA_STATS_DROP = 10,
-	CTA_STATS_EARLY_DROP = 11,
-	CTA_STATS_ERROR = 12,
-	CTA_STATS_SEARCH_RESTART = 13,
-	__CTA_STATS_MAX = 14,
-};
-
-enum ctattr_stats_global {
-	CTA_STATS_GLOBAL_UNSPEC = 0,
-	CTA_STATS_GLOBAL_ENTRIES = 1,
-	CTA_STATS_GLOBAL_MAX_ENTRIES = 2,
-	__CTA_STATS_GLOBAL_MAX = 3,
-};
-
-enum ctattr_expect_stats {
-	CTA_STATS_EXP_UNSPEC = 0,
-	CTA_STATS_EXP_NEW = 1,
-	CTA_STATS_EXP_CREATE = 2,
-	CTA_STATS_EXP_DELETE = 3,
-	__CTA_STATS_EXP_MAX = 4,
-};
-
-struct ctnetlink_filter {
-	u8 family;
-	struct {
-		u_int32_t val;
-		u_int32_t mask;
-	} mark;
-};
-
-enum nf_ct_ftp_type {
-	NF_CT_FTP_PORT = 0,
-	NF_CT_FTP_PASV = 1,
-	NF_CT_FTP_EPRT = 2,
-	NF_CT_FTP_EPSV = 3,
-};
-
-struct nf_ct_ftp_master {
-	u_int32_t seq_aft_nl[4];
-	u_int16_t seq_aft_nl_num[2];
-	u_int16_t flags[2];
-};
-
-struct ftp_search {
-	const char *pattern;
-	size_t plen;
-	char skip;
-	char term;
-	enum nf_ct_ftp_type ftptype;
-	int (*getnum)(const char *, size_t, struct nf_conntrack_man *, char, unsigned int *);
-};
-
-struct nf_ct_sip_master {
-	unsigned int register_cseq;
-	unsigned int invite_cseq;
-	__be16 forced_dport;
-};
-
-enum sip_expectation_classes {
-	SIP_EXPECT_SIGNALLING = 0,
-	SIP_EXPECT_AUDIO = 1,
-	SIP_EXPECT_VIDEO = 2,
-	SIP_EXPECT_IMAGE = 3,
-	__SIP_EXPECT_MAX = 4,
-};
-
-struct sdp_media_type {
-	const char *name;
-	unsigned int len;
-	enum sip_expectation_classes class;
-};
-
-struct sip_handler {
-	const char *method;
-	unsigned int len;
-	int (*request)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, unsigned int);
-	int (*response)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, unsigned int, unsigned int);
-};
-
-struct sip_header {
-	const char *name;
-	const char *cname;
-	const char *search;
-	unsigned int len;
-	unsigned int clen;
-	unsigned int slen;
-	int (*match_len)(const struct nf_conn *, const char *, const char *, int *);
-};
-
-enum sip_header_types {
-	SIP_HDR_CSEQ = 0,
-	SIP_HDR_FROM = 1,
-	SIP_HDR_TO = 2,
-	SIP_HDR_CONTACT = 3,
-	SIP_HDR_VIA_UDP = 4,
-	SIP_HDR_VIA_TCP = 5,
-	SIP_HDR_EXPIRES = 6,
-	SIP_HDR_CONTENT_LENGTH = 7,
-	SIP_HDR_CALL_ID = 8,
-};
-
-enum sdp_header_types {
-	SDP_HDR_UNSPEC = 0,
-	SDP_HDR_VERSION = 1,
-	SDP_HDR_OWNER = 2,
-	SDP_HDR_CONNECTION = 3,
-	SDP_HDR_MEDIA = 4,
-};
-
-struct nf_nat_sip_hooks {
-	unsigned int (*msg)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *);
-	void (*seq_adjust)(struct sk_buff *, unsigned int, s16);
-	unsigned int (*expect)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, struct nf_conntrack_expect *, unsigned int, unsigned int);
-	unsigned int (*sdp_addr)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, unsigned int, enum sdp_header_types, enum sdp_header_types, const union nf_inet_addr *);
-	unsigned int (*sdp_port)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, unsigned int, unsigned int, u_int16_t);
-	unsigned int (*sdp_session)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, unsigned int, const union nf_inet_addr *);
-	unsigned int (*sdp_media)(struct sk_buff *, unsigned int, unsigned int, const char **, unsigned int *, struct nf_conntrack_expect *, struct nf_conntrack_expect *, unsigned int, unsigned int, union nf_inet_addr *);
-};
-
-union nf_conntrack_nat_help {};
-
-struct nf_conn_nat {
-	union nf_conntrack_nat_help help;
-	int masq_index;
-};
-
-struct nf_nat_lookup_hook_priv {
-	struct nf_hook_entries *entries;
-	struct callback_head callback_head;
-};
-
-struct nf_nat_hooks_net {
-	struct nf_hook_ops *nat_hook_ops;
-	unsigned int users;
-};
-
-struct nat_net {
-	struct nf_nat_hooks_net nat_proto_net[13];
-};
-
-struct nf_nat_proto_clean {
-	u8 l3proto;
-	u8 l4proto;
-};
-
-enum ctattr_nat {
-	CTA_NAT_UNSPEC = 0,
-	CTA_NAT_V4_MINIP = 1,
-	CTA_NAT_V4_MAXIP = 2,
-	CTA_NAT_PROTO = 3,
-	CTA_NAT_V6_MINIP = 4,
-	CTA_NAT_V6_MAXIP = 5,
-	__CTA_NAT_MAX = 6,
-};
-
-enum ctattr_protonat {
-	CTA_PROTONAT_UNSPEC = 0,
-	CTA_PROTONAT_PORT_MIN = 1,
-	CTA_PROTONAT_PORT_MAX = 2,
-	__CTA_PROTONAT_MAX = 3,
-};
-
-struct masq_dev_work {
-	struct work_struct work;
-	struct net *net;
-	struct in6_addr addr;
-	int ifindex;
-};
-
-struct xt_action_param;
-
-struct xt_mtchk_param;
-
-struct xt_mtdtor_param;
-
-struct xt_match {
-	struct list_head list;
-	const char name[29];
-	u_int8_t revision;
-	bool (*match)(const struct sk_buff *, struct xt_action_param *);
-	int (*checkentry)(const struct xt_mtchk_param *);
-	void (*destroy)(const struct xt_mtdtor_param *);
-	void (*compat_from_user)(void *, const void *);
-	int (*compat_to_user)(void *, const void *);
-	struct module *me;
-	const char *table;
-	unsigned int matchsize;
-	unsigned int usersize;
-	unsigned int compatsize;
-	unsigned int hooks;
-	short unsigned int proto;
-	short unsigned int family;
-};
-
-struct xt_entry_match {
-	union {
-		struct {
-			__u16 match_size;
-			char name[29];
-			__u8 revision;
-		} user;
-		struct {
-			__u16 match_size;
-			struct xt_match *match;
-		} kernel;
-		__u16 match_size;
-	} u;
-	unsigned char data[0];
-};
-
-struct xt_tgchk_param;
-
-struct xt_tgdtor_param;
-
-struct xt_target {
-	struct list_head list;
-	const char name[29];
-	u_int8_t revision;
-	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
-	int (*checkentry)(const struct xt_tgchk_param *);
-	void (*destroy)(const struct xt_tgdtor_param *);
-	void (*compat_from_user)(void *, const void *);
-	int (*compat_to_user)(void *, const void *);
-	struct module *me;
-	const char *table;
-	unsigned int targetsize;
-	unsigned int usersize;
-	unsigned int compatsize;
-	unsigned int hooks;
-	short unsigned int proto;
-	short unsigned int family;
-};
-
-struct xt_entry_target {
-	union {
-		struct {
-			__u16 target_size;
-			char name[29];
-			__u8 revision;
-		} user;
-		struct {
-			__u16 target_size;
-			struct xt_target *target;
-		} kernel;
-		__u16 target_size;
-	} u;
-	unsigned char data[0];
-};
-
-struct xt_standard_target {
-	struct xt_entry_target target;
-	int verdict;
-};
-
-struct xt_error_target {
-	struct xt_entry_target target;
-	char errorname[30];
-};
-
-struct xt_counters {
-	__u64 pcnt;
-	__u64 bcnt;
-};
-
-struct xt_counters_info {
-	char name[32];
-	unsigned int num_counters;
-	struct xt_counters counters[0];
-};
-
-struct xt_action_param {
-	union {
-		const struct xt_match *match;
-		const struct xt_target *target;
-	};
-	union {
-		const void *matchinfo;
-		const void *targinfo;
-	};
-	const struct nf_hook_state *state;
-	int fragoff;
-	unsigned int thoff;
-	bool hotdrop;
-};
-
-struct xt_mtchk_param {
-	struct net *net;
-	const char *table;
-	const void *entryinfo;
-	const struct xt_match *match;
-	void *matchinfo;
-	unsigned int hook_mask;
-	u_int8_t family;
-	bool nft_compat;
-};
-
-struct xt_mtdtor_param {
-	struct net *net;
-	const struct xt_match *match;
-	void *matchinfo;
-	u_int8_t family;
-};
-
-struct xt_tgchk_param {
-	struct net *net;
-	const char *table;
-	const void *entryinfo;
-	const struct xt_target *target;
-	void *targinfo;
-	unsigned int hook_mask;
-	u_int8_t family;
-	bool nft_compat;
-};
-
-struct xt_tgdtor_param {
-	struct net *net;
-	const struct xt_target *target;
-	void *targinfo;
-	u_int8_t family;
-};
-
-struct xt_percpu_counter_alloc_state {
-	unsigned int off;
-	const char *mem;
-};
-
-struct compat_xt_entry_match {
-	union {
-		struct {
-			u_int16_t match_size;
-			char name[29];
-			u_int8_t revision;
-		} user;
-		struct {
-			u_int16_t match_size;
-			compat_uptr_t match;
-		} kernel;
-		u_int16_t match_size;
-	} u;
-	unsigned char data[0];
-};
-
-struct compat_xt_entry_target {
-	union {
-		struct {
-			u_int16_t target_size;
-			char name[29];
-			u_int8_t revision;
-		} user;
-		struct {
-			u_int16_t target_size;
-			compat_uptr_t target;
-		} kernel;
-		u_int16_t target_size;
-	} u;
-	unsigned char data[0];
-};
-
-struct compat_xt_counters {
-	compat_u64 pcnt;
-	compat_u64 bcnt;
-};
-
-struct compat_xt_counters_info {
-	char name[32];
-	compat_uint_t num_counters;
-	struct compat_xt_counters counters[0];
-} __attribute__((packed));
-
-struct compat_delta {
-	unsigned int offset;
-	int delta;
-};
-
-struct xt_af {
-	struct mutex mutex;
-	struct list_head match;
-	struct list_head target;
-	struct mutex compat_mutex;
-	struct compat_delta *compat_tab;
-	unsigned int number;
-	unsigned int cur;
-};
-
-struct compat_xt_standard_target {
-	struct compat_xt_entry_target t;
-	compat_uint_t verdict;
-};
-
-struct compat_xt_error_target {
-	struct compat_xt_entry_target t;
-	char errorname[30];
-};
-
-struct nf_mttg_trav {
-	struct list_head *head;
-	struct list_head *curr;
-	uint8_t class;
-};
-
-enum {
-	MTTG_TRAV_INIT = 0,
-	MTTG_TRAV_NFP_UNSPEC = 1,
-	MTTG_TRAV_NFP_SPEC = 2,
-	MTTG_TRAV_DONE = 3,
-};
-
-struct xt_tcp {
-	__u16 spts[2];
-	__u16 dpts[2];
-	__u8 option;
-	__u8 flg_mask;
-	__u8 flg_cmp;
-	__u8 invflags;
-};
-
-struct xt_udp {
-	__u16 spts[2];
-	__u16 dpts[2];
-	__u8 invflags;
-};
-
-enum {
-	CONNSECMARK_SAVE = 1,
-	CONNSECMARK_RESTORE = 2,
-};
-
-struct xt_connsecmark_target_info {
-	__u8 mode;
-};
-
-struct xt_nflog_info {
-	__u32 len;
-	__u16 group;
-	__u16 threshold;
-	__u16 flags;
-	__u16 pad;
-	char prefix[64];
-};
-
-struct xt_secmark_target_info {
-	__u8 mode;
-	__u32 secid;
-	char secctx[256];
-};
-
-struct ipt_ip {
-	struct in_addr src;
-	struct in_addr dst;
-	struct in_addr smsk;
-	struct in_addr dmsk;
-	char iniface[16];
-	char outiface[16];
-	unsigned char iniface_mask[16];
-	unsigned char outiface_mask[16];
-	__u16 proto;
-	__u8 flags;
-	__u8 invflags;
-};
-
-struct ipt_entry {
-	struct ipt_ip ip;
-	unsigned int nfcache;
-	__u16 target_offset;
-	__u16 next_offset;
-	unsigned int comefrom;
-	struct xt_counters counters;
-	unsigned char elems[0];
-};
-
-struct ip6t_ip6 {
-	struct in6_addr src;
-	struct in6_addr dst;
-	struct in6_addr smsk;
-	struct in6_addr dmsk;
-	char iniface[16];
-	char outiface[16];
-	unsigned char iniface_mask[16];
-	unsigned char outiface_mask[16];
-	__u16 proto;
-	__u8 tos;
-	__u8 flags;
-	__u8 invflags;
-};
-
-struct ip6t_entry {
-	struct ip6t_ip6 ipv6;
-	unsigned int nfcache;
-	__u16 target_offset;
-	__u16 next_offset;
-	unsigned int comefrom;
-	struct xt_counters counters;
-	unsigned char elems[0];
-};
-
-struct xt_tcpmss_info {
-	__u16 mss;
-};
-
-struct xt_bpf_info {
-	__u16 bpf_program_num_elem;
-	struct sock_filter bpf_program[64];
-	struct bpf_prog *filter;
-};
-
-enum xt_bpf_modes {
-	XT_BPF_MODE_BYTECODE = 0,
-	XT_BPF_MODE_FD_PINNED = 1,
-	XT_BPF_MODE_FD_ELF = 2,
-};
-
-struct xt_bpf_info_v1 {
-	__u16 mode;
-	__u16 bpf_program_num_elem;
-	__s32 fd;
-	union {
-		struct sock_filter bpf_program[64];
-		char path[512];
-	};
-	struct bpf_prog *filter;
-};
-
-enum {
-	XT_CONNTRACK_STATE = 1,
-	XT_CONNTRACK_PROTO = 2,
-	XT_CONNTRACK_ORIGSRC = 4,
-	XT_CONNTRACK_ORIGDST = 8,
-	XT_CONNTRACK_REPLSRC = 16,
-	XT_CONNTRACK_REPLDST = 32,
-	XT_CONNTRACK_STATUS = 64,
-	XT_CONNTRACK_EXPIRES = 128,
-	XT_CONNTRACK_ORIGSRC_PORT = 256,
-	XT_CONNTRACK_ORIGDST_PORT = 512,
-	XT_CONNTRACK_REPLSRC_PORT = 1024,
-	XT_CONNTRACK_REPLDST_PORT = 2048,
-	XT_CONNTRACK_DIRECTION = 4096,
-	XT_CONNTRACK_STATE_ALIAS = 8192,
-};
-
-struct xt_conntrack_mtinfo1 {
-	union nf_inet_addr origsrc_addr;
-	union nf_inet_addr origsrc_mask;
-	union nf_inet_addr origdst_addr;
-	union nf_inet_addr origdst_mask;
-	union nf_inet_addr replsrc_addr;
-	union nf_inet_addr replsrc_mask;
-	union nf_inet_addr repldst_addr;
-	union nf_inet_addr repldst_mask;
-	__u32 expires_min;
-	__u32 expires_max;
-	__u16 l4proto;
-	__be16 origsrc_port;
-	__be16 origdst_port;
-	__be16 replsrc_port;
-	__be16 repldst_port;
-	__u16 match_flags;
-	__u16 invert_flags;
-	__u8 state_mask;
-	__u8 status_mask;
-};
-
-struct xt_conntrack_mtinfo2 {
-	union nf_inet_addr origsrc_addr;
-	union nf_inet_addr origsrc_mask;
-	union nf_inet_addr origdst_addr;
-	union nf_inet_addr origdst_mask;
-	union nf_inet_addr replsrc_addr;
-	union nf_inet_addr replsrc_mask;
-	union nf_inet_addr repldst_addr;
-	union nf_inet_addr repldst_mask;
-	__u32 expires_min;
-	__u32 expires_max;
-	__u16 l4proto;
-	__be16 origsrc_port;
-	__be16 origdst_port;
-	__be16 replsrc_port;
-	__be16 repldst_port;
-	__u16 match_flags;
-	__u16 invert_flags;
-	__u16 state_mask;
-	__u16 status_mask;
-};
-
-struct xt_conntrack_mtinfo3 {
-	union nf_inet_addr origsrc_addr;
-	union nf_inet_addr origsrc_mask;
-	union nf_inet_addr origdst_addr;
-	union nf_inet_addr origdst_mask;
-	union nf_inet_addr replsrc_addr;
-	union nf_inet_addr replsrc_mask;
-	union nf_inet_addr repldst_addr;
-	union nf_inet_addr repldst_mask;
-	__u32 expires_min;
-	__u32 expires_max;
-	__u16 l4proto;
-	__u16 origsrc_port;
-	__u16 origdst_port;
-	__u16 replsrc_port;
-	__u16 repldst_port;
-	__u16 match_flags;
-	__u16 invert_flags;
-	__u16 state_mask;
-	__u16 status_mask;
-	__u16 origsrc_port_high;
-	__u16 origdst_port_high;
-	__u16 replsrc_port_high;
-	__u16 repldst_port_high;
-};
-
-enum xt_policy_flags {
-	XT_POLICY_MATCH_IN = 1,
-	XT_POLICY_MATCH_OUT = 2,
-	XT_POLICY_MATCH_NONE = 4,
-	XT_POLICY_MATCH_STRICT = 8,
-};
-
-struct xt_policy_spec {
-	__u8 saddr: 1;
-	__u8 daddr: 1;
-	__u8 proto: 1;
-	__u8 mode: 1;
-	__u8 spi: 1;
-	__u8 reqid: 1;
-};
-
-struct xt_policy_elem {
-	union {
-		struct {
-			union nf_inet_addr saddr;
-			union nf_inet_addr smask;
-			union nf_inet_addr daddr;
-			union nf_inet_addr dmask;
-		};
-	};
-	__be32 spi;
-	__u32 reqid;
-	__u8 proto;
-	__u8 mode;
-	struct xt_policy_spec match;
-	struct xt_policy_spec invert;
-};
-
-struct xt_policy_info {
-	struct xt_policy_elem pol[4];
-	__u16 flags;
-	__u16 len;
-};
-
-struct xt_state_info {
-	unsigned int statemask;
-};
-
-struct ip_mreqn {
-	struct in_addr imr_multiaddr;
-	struct in_addr imr_address;
-	int imr_ifindex;
-};
-
-struct mr_table_ops {
-	const struct rhashtable_params *rht_params;
-	void *cmparg_any;
-};
-
-struct vif_device {
-	struct net_device *dev;
-	long unsigned int bytes_in;
-	long unsigned int bytes_out;
-	long unsigned int pkt_in;
-	long unsigned int pkt_out;
-	long unsigned int rate_limit;
-	unsigned char threshold;
-	short unsigned int flags;
-	int link;
-	struct netdev_phys_item_id dev_parent_id;
-	__be32 local;
-	__be32 remote;
-};
-
-struct mr_table {
-	struct list_head list;
-	possible_net_t net;
-	struct mr_table_ops ops;
-	u32 id;
-	struct sock *mroute_sk;
-	struct timer_list ipmr_expire_timer;
-	struct list_head mfc_unres_queue;
-	struct vif_device vif_table[32];
-	struct rhltable mfc_hash;
-	struct list_head mfc_cache_list;
-	int maxvif;
-	atomic_t cache_resolve_queue_len;
-	bool mroute_do_assert;
-	bool mroute_do_pim;
-	bool mroute_do_wrvifwhole;
-	int mroute_reg_vif_num;
-};
-
-struct rtmsg {
-	unsigned char rtm_family;
-	unsigned char rtm_dst_len;
-	unsigned char rtm_src_len;
-	unsigned char rtm_tos;
-	unsigned char rtm_table;
-	unsigned char rtm_protocol;
-	unsigned char rtm_scope;
-	unsigned char rtm_type;
-	unsigned int rtm_flags;
-};
-
-struct rtvia {
-	__kernel_sa_family_t rtvia_family;
-	__u8 rtvia_addr[0];
-};
-
-struct ip_sf_list;
-
-struct ip_mc_list {
-	struct in_device *interface;
-	__be32 multiaddr;
-	unsigned int sfmode;
-	struct ip_sf_list *sources;
-	struct ip_sf_list *tomb;
-	long unsigned int sfcount[2];
-	union {
-		struct ip_mc_list *next;
-		struct ip_mc_list *next_rcu;
-	};
-	struct ip_mc_list *next_hash;
-	struct timer_list timer;
-	int users;
-	refcount_t refcnt;
-	spinlock_t lock;
-	char tm_running;
-	char reporter;
-	char unsolicit_count;
-	char loaded;
-	unsigned char gsquery;
-	unsigned char crcount;
-	struct callback_head rcu;
-};
-
-struct ip_sf_socklist {
-	unsigned int sl_max;
-	unsigned int sl_count;
-	struct callback_head rcu;
-	__be32 sl_addr[0];
-};
-
-struct ip_mc_socklist {
-	struct ip_mc_socklist *next_rcu;
-	struct ip_mreqn multi;
-	unsigned int sfmode;
-	struct ip_sf_socklist *sflist;
-	struct callback_head rcu;
-};
-
-struct ip_sf_list {
-	struct ip_sf_list *sf_next;
-	long unsigned int sf_count[2];
-	__be32 sf_inaddr;
-	unsigned char sf_gsresp;
-	unsigned char sf_oldin;
-	unsigned char sf_crcount;
-};
-
-struct ipv4_addr_key {
-	__be32 addr;
-	int vif;
-};
-
-struct inetpeer_addr {
-	union {
-		struct ipv4_addr_key a4;
-		struct in6_addr a6;
-		u32 key[4];
-	};
-	__u16 family;
-};
-
-struct inet_peer {
-	struct rb_node rb_node;
-	struct inetpeer_addr daddr;
-	u32 metrics[17];
-	u32 rate_tokens;
-	u32 n_redirects;
-	long unsigned int rate_last;
-	union {
-		struct {
-			atomic_t rid;
-		};
-		struct callback_head rcu;
-	};
-	__u32 dtime;
-	refcount_t refcnt;
-};
-
-struct uncached_list {
-	spinlock_t lock;
-	struct list_head head;
-};
-
-struct rt_cache_stat {
-	unsigned int in_slow_tot;
-	unsigned int in_slow_mc;
-	unsigned int in_no_route;
-	unsigned int in_brd;
-	unsigned int in_martian_dst;
-	unsigned int in_martian_src;
-	unsigned int out_slow_tot;
-	unsigned int out_slow_mc;
-};
-
-struct fib_prop {
-	int error;
-	u8 scope;
-};
-
-struct raw_hashinfo {
-	rwlock_t lock;
-	struct hlist_head ht[256];
-};
-
-enum ip_defrag_users {
-	IP_DEFRAG_LOCAL_DELIVER = 0,
-	IP_DEFRAG_CALL_RA_CHAIN = 1,
-	IP_DEFRAG_CONNTRACK_IN = 2,
-	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
-	IP_DEFRAG_CONNTRACK_OUT = 65538,
-	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
-	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
-	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
-	IP_DEFRAG_VS_IN = 196610,
-	IP_DEFRAG_VS_OUT = 196611,
-	IP_DEFRAG_VS_FWD = 196612,
-	IP_DEFRAG_AF_PACKET = 196613,
-	IP_DEFRAG_MACVLAN = 196614,
-};
-
-enum {
-	INET_FRAG_FIRST_IN = 1,
-	INET_FRAG_LAST_IN = 2,
-	INET_FRAG_COMPLETE = 4,
-	INET_FRAG_HASH_DEAD = 8,
-};
-
-struct ipq {
-	struct inet_frag_queue q;
-	u8 ecn;
-	u16 max_df_size;
-	int iif;
-	unsigned int rid;
-	struct inet_peer *peer;
-};
-
-struct ip_options_data {
-	struct ip_options_rcu opt;
-	char data[40];
-};
-
-struct ipcm_cookie {
-	struct sockcm_cookie sockc;
-	__be32 addr;
-	int oif;
-	struct ip_options_rcu *opt;
-	__u8 ttl;
-	__s16 tos;
-	char priority;
-	__u16 gso_size;
-};
-
-struct ip_fraglist_iter {
-	struct sk_buff *frag;
-	struct iphdr *iph;
-	int offset;
-	unsigned int hlen;
-};
-
-struct ip_frag_state {
-	bool DF;
-	unsigned int hlen;
-	unsigned int ll_rs;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	__be16 not_last_frag;
-};
-
-struct ip_reply_arg {
-	struct kvec iov[1];
-	int flags;
-	__wsum csum;
-	int csumoffset;
-	int bound_dev_if;
-	u8 tos;
-	kuid_t uid;
-};
-
-struct ip_mreq_source {
-	__be32 imr_multiaddr;
-	__be32 imr_interface;
-	__be32 imr_sourceaddr;
-};
-
-struct ip_msfilter {
-	__be32 imsf_multiaddr;
-	__be32 imsf_interface;
-	__u32 imsf_fmode;
-	__u32 imsf_numsrc;
-	__be32 imsf_slist[1];
-};
-
-struct in_pktinfo {
-	int ipi_ifindex;
-	struct in_addr ipi_spec_dst;
-	struct in_addr ipi_addr;
-};
-
-enum {
-	BPFILTER_IPT_SO_SET_REPLACE = 64,
-	BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
-	BPFILTER_IPT_SET_MAX = 66,
-};
-
-enum {
-	BPFILTER_IPT_SO_GET_INFO = 64,
-	BPFILTER_IPT_SO_GET_ENTRIES = 65,
-	BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
-	BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
-	BPFILTER_IPT_GET_MAX = 68,
-};
-
-struct bpfilter_umh_ops {
-	struct umh_info info;
-	struct mutex lock;
-	int (*sockopt)(struct sock *, int, char *, unsigned int, bool);
-	int (*start)();
-	bool stop;
-};
-
-struct inet_timewait_sock {
-	struct sock_common __tw_common;
-	__u32 tw_mark;
-	volatile unsigned char tw_substate;
-	unsigned char tw_rcv_wscale;
-	__be16 tw_sport;
-	unsigned int tw_kill: 1;
-	unsigned int tw_transparent: 1;
-	unsigned int tw_flowlabel: 20;
-	unsigned int tw_pad: 2;
-	unsigned int tw_tos: 8;
-	u32 tw_txhash;
-	u32 tw_priority;
-	struct timer_list tw_timer;
-	struct inet_bind_bucket *tw_tb;
-};
-
-struct tcpvegas_info {
-	__u32 tcpv_enabled;
-	__u32 tcpv_rttcnt;
-	__u32 tcpv_rtt;
-	__u32 tcpv_minrtt;
-};
-
-struct tcp_dctcp_info {
-	__u16 dctcp_enabled;
-	__u16 dctcp_ce_state;
-	__u32 dctcp_alpha;
-	__u32 dctcp_ab_ecn;
-	__u32 dctcp_ab_tot;
-};
-
-struct tcp_bbr_info {
-	__u32 bbr_bw_lo;
-	__u32 bbr_bw_hi;
-	__u32 bbr_min_rtt;
-	__u32 bbr_pacing_gain;
-	__u32 bbr_cwnd_gain;
-};
-
-union tcp_cc_info {
-	struct tcpvegas_info vegas;
-	struct tcp_dctcp_info dctcp;
-	struct tcp_bbr_info bbr;
-};
-
-enum {
-	BPF_TCP_ESTABLISHED = 1,
-	BPF_TCP_SYN_SENT = 2,
-	BPF_TCP_SYN_RECV = 3,
-	BPF_TCP_FIN_WAIT1 = 4,
-	BPF_TCP_FIN_WAIT2 = 5,
-	BPF_TCP_TIME_WAIT = 6,
-	BPF_TCP_CLOSE = 7,
-	BPF_TCP_CLOSE_WAIT = 8,
-	BPF_TCP_LAST_ACK = 9,
-	BPF_TCP_LISTEN = 10,
-	BPF_TCP_CLOSING = 11,
-	BPF_TCP_NEW_SYN_RECV = 12,
-	BPF_TCP_MAX_STATES = 13,
-};
-
-enum inet_csk_ack_state_t {
-	ICSK_ACK_SCHED = 1,
-	ICSK_ACK_TIMER = 2,
-	ICSK_ACK_PUSHED = 4,
-	ICSK_ACK_PUSHED2 = 8,
-	ICSK_ACK_NOW = 16,
-};
-
-struct tcp_repair_opt {
-	__u32 opt_code;
-	__u32 opt_val;
-};
-
-struct tcp_repair_window {
-	__u32 snd_wl1;
-	__u32 snd_wnd;
-	__u32 max_window;
-	__u32 rcv_wnd;
-	__u32 rcv_wup;
-};
-
-enum {
-	TCP_NO_QUEUE = 0,
-	TCP_RECV_QUEUE = 1,
-	TCP_SEND_QUEUE = 2,
-	TCP_QUEUES_NR = 3,
-};
-
-struct tcp_info {
-	__u8 tcpi_state;
-	__u8 tcpi_ca_state;
-	__u8 tcpi_retransmits;
-	__u8 tcpi_probes;
-	__u8 tcpi_backoff;
-	__u8 tcpi_options;
-	__u8 tcpi_snd_wscale: 4;
-	__u8 tcpi_rcv_wscale: 4;
-	__u8 tcpi_delivery_rate_app_limited: 1;
-	__u8 tcpi_fastopen_client_fail: 2;
-	__u32 tcpi_rto;
-	__u32 tcpi_ato;
-	__u32 tcpi_snd_mss;
-	__u32 tcpi_rcv_mss;
-	__u32 tcpi_unacked;
-	__u32 tcpi_sacked;
-	__u32 tcpi_lost;
-	__u32 tcpi_retrans;
-	__u32 tcpi_fackets;
-	__u32 tcpi_last_data_sent;
-	__u32 tcpi_last_ack_sent;
-	__u32 tcpi_last_data_recv;
-	__u32 tcpi_last_ack_recv;
-	__u32 tcpi_pmtu;
-	__u32 tcpi_rcv_ssthresh;
-	__u32 tcpi_rtt;
-	__u32 tcpi_rttvar;
-	__u32 tcpi_snd_ssthresh;
-	__u32 tcpi_snd_cwnd;
-	__u32 tcpi_advmss;
-	__u32 tcpi_reordering;
-	__u32 tcpi_rcv_rtt;
-	__u32 tcpi_rcv_space;
-	__u32 tcpi_total_retrans;
-	__u64 tcpi_pacing_rate;
-	__u64 tcpi_max_pacing_rate;
-	__u64 tcpi_bytes_acked;
-	__u64 tcpi_bytes_received;
-	__u32 tcpi_segs_out;
-	__u32 tcpi_segs_in;
-	__u32 tcpi_notsent_bytes;
-	__u32 tcpi_min_rtt;
-	__u32 tcpi_data_segs_in;
-	__u32 tcpi_data_segs_out;
-	__u64 tcpi_delivery_rate;
-	__u64 tcpi_busy_time;
-	__u64 tcpi_rwnd_limited;
-	__u64 tcpi_sndbuf_limited;
-	__u32 tcpi_delivered;
-	__u32 tcpi_delivered_ce;
-	__u64 tcpi_bytes_sent;
-	__u64 tcpi_bytes_retrans;
-	__u32 tcpi_dsack_dups;
-	__u32 tcpi_reord_seen;
-	__u32 tcpi_rcv_ooopack;
-	__u32 tcpi_snd_wnd;
-};
-
-enum {
-	TCP_NLA_PAD = 0,
-	TCP_NLA_BUSY = 1,
-	TCP_NLA_RWND_LIMITED = 2,
-	TCP_NLA_SNDBUF_LIMITED = 3,
-	TCP_NLA_DATA_SEGS_OUT = 4,
-	TCP_NLA_TOTAL_RETRANS = 5,
-	TCP_NLA_PACING_RATE = 6,
-	TCP_NLA_DELIVERY_RATE = 7,
-	TCP_NLA_SND_CWND = 8,
-	TCP_NLA_REORDERING = 9,
-	TCP_NLA_MIN_RTT = 10,
-	TCP_NLA_RECUR_RETRANS = 11,
-	TCP_NLA_DELIVERY_RATE_APP_LMT = 12,
-	TCP_NLA_SNDQ_SIZE = 13,
-	TCP_NLA_CA_STATE = 14,
-	TCP_NLA_SND_SSTHRESH = 15,
-	TCP_NLA_DELIVERED = 16,
-	TCP_NLA_DELIVERED_CE = 17,
-	TCP_NLA_BYTES_SENT = 18,
-	TCP_NLA_BYTES_RETRANS = 19,
-	TCP_NLA_DSACK_DUPS = 20,
-	TCP_NLA_REORD_SEEN = 21,
-	TCP_NLA_SRTT = 22,
-};
-
-struct tcp_zerocopy_receive {
-	__u64 address;
-	__u32 length;
-	__u32 recv_skip_hint;
-};
-
-struct tcp_md5sig_pool {
-	struct ahash_request *md5_req;
-	void *scratch;
-};
-
-enum tcp_chrono {
-	TCP_CHRONO_UNSPEC = 0,
-	TCP_CHRONO_BUSY = 1,
-	TCP_CHRONO_RWND_LIMITED = 2,
-	TCP_CHRONO_SNDBUF_LIMITED = 3,
-	__TCP_CHRONO_MAX = 4,
-};
-
-struct tcp_splice_state {
-	struct pipe_inode_info *pipe;
-	size_t len;
-	unsigned int flags;
-};
-
-enum tcp_fastopen_client_fail {
-	TFO_STATUS_UNSPEC = 0,
-	TFO_COOKIE_UNAVAILABLE = 1,
-	TFO_DATA_NOT_ACKED = 2,
-	TFO_SYN_RETRANSMITTED = 3,
-};
-
-enum tcp_queue {
-	TCP_FRAG_IN_WRITE_QUEUE = 0,
-	TCP_FRAG_IN_RTX_QUEUE = 1,
-};
-
-enum tcp_ca_ack_event_flags {
-	CA_ACK_SLOWPATH = 1,
-	CA_ACK_WIN_UPDATE = 2,
-	CA_ACK_ECE = 4,
-};
-
-struct tcp_sacktag_state {
-	u32 reord;
-	u64 first_sackt;
-	u64 last_sackt;
-	struct rate_sample *rate;
-	int flag;
-	unsigned int mss_now;
-};
-
-enum tsq_flags {
-	TSQF_THROTTLED = 1,
-	TSQF_QUEUED = 2,
-	TCPF_TSQ_DEFERRED = 4,
-	TCPF_WRITE_TIMER_DEFERRED = 8,
-	TCPF_DELACK_TIMER_DEFERRED = 16,
-	TCPF_MTU_REDUCED_DEFERRED = 32,
-};
-
-struct tcp_out_options {
-	u16 options;
-	u16 mss;
-	u8 ws;
-	u8 num_sack_blocks;
-	u8 hash_size;
-	__u8 *hash_location;
-	__u32 tsval;
-	__u32 tsecr;
-	struct tcp_fastopen_cookie *fastopen_cookie;
-};
-
-struct tsq_tasklet {
-	struct tasklet_struct tasklet;
-	struct list_head head;
-};
-
-struct tcp_md5sig {
-	struct __kernel_sockaddr_storage tcpm_addr;
-	__u8 tcpm_flags;
-	__u8 tcpm_prefixlen;
-	__u16 tcpm_keylen;
-	__u32 __tcpm_pad;
-	__u8 tcpm_key[80];
-};
-
-struct tcp_timewait_sock {
-	struct inet_timewait_sock tw_sk;
-	u32 tw_rcv_wnd;
-	u32 tw_ts_offset;
-	u32 tw_ts_recent;
-	u32 tw_last_oow_ack_time;
-	int tw_ts_recent_stamp;
-	u32 tw_tx_delay;
-	struct tcp_md5sig_key *tw_md5_key;
-};
-
-enum tcp_tw_status {
-	TCP_TW_SUCCESS = 0,
-	TCP_TW_RST = 1,
-	TCP_TW_ACK = 2,
-	TCP_TW_SYN = 3,
-};
-
-struct tcp4_pseudohdr {
-	__be32 saddr;
-	__be32 daddr;
-	__u8 pad;
-	__u8 protocol;
-	__be16 len;
-};
-
-enum tcp_seq_states {
-	TCP_SEQ_STATE_LISTENING = 0,
-	TCP_SEQ_STATE_ESTABLISHED = 1,
-};
-
-struct tcp_seq_afinfo {
-	sa_family_t family;
-};
-
-struct tcp_iter_state {
-	struct seq_net_private p;
-	enum tcp_seq_states state;
-	struct sock *syn_wait_sk;
-	int bucket;
-	int offset;
-	int sbucket;
-	int num;
-	loff_t last_pos;
-};
-
-enum tcp_metric_index {
-	TCP_METRIC_RTT = 0,
-	TCP_METRIC_RTTVAR = 1,
-	TCP_METRIC_SSTHRESH = 2,
-	TCP_METRIC_CWND = 3,
-	TCP_METRIC_REORDERING = 4,
-	TCP_METRIC_RTT_US = 5,
-	TCP_METRIC_RTTVAR_US = 6,
-	__TCP_METRIC_MAX = 7,
-};
-
-enum {
-	TCP_METRICS_ATTR_UNSPEC = 0,
-	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
-	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
-	TCP_METRICS_ATTR_AGE = 3,
-	TCP_METRICS_ATTR_TW_TSVAL = 4,
-	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
-	TCP_METRICS_ATTR_VALS = 6,
-	TCP_METRICS_ATTR_FOPEN_MSS = 7,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
-	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
-	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
-	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
-	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
-	TCP_METRICS_ATTR_PAD = 13,
-	__TCP_METRICS_ATTR_MAX = 14,
-};
-
-enum {
-	TCP_METRICS_CMD_UNSPEC = 0,
-	TCP_METRICS_CMD_GET = 1,
-	TCP_METRICS_CMD_DEL = 2,
-	__TCP_METRICS_CMD_MAX = 3,
-};
-
-struct tcp_fastopen_metrics {
-	u16 mss;
-	u16 syn_loss: 10;
-	u16 try_exp: 2;
-	long unsigned int last_syn_loss;
-	struct tcp_fastopen_cookie cookie;
-};
-
-struct tcp_metrics_block {
-	struct tcp_metrics_block *tcpm_next;
-	possible_net_t tcpm_net;
-	struct inetpeer_addr tcpm_saddr;
-	struct inetpeer_addr tcpm_daddr;
-	long unsigned int tcpm_stamp;
-	u32 tcpm_lock;
-	u32 tcpm_vals[5];
-	struct tcp_fastopen_metrics tcpm_fastopen;
-	struct callback_head callback_head;
-};
-
-struct tcpm_hash_bucket {
-	struct tcp_metrics_block *chain;
-};
-
-struct icmp_filter {
-	__u32 data;
-};
-
-struct raw_iter_state {
-	struct seq_net_private p;
-	int bucket;
-};
-
-struct raw_sock {
-	struct inet_sock inet;
-	struct icmp_filter filter;
-	u32 ipmr_table;
-};
-
-struct raw_frag_vec {
-	struct msghdr *msg;
-	union {
-		struct icmphdr icmph;
-		char c[1];
-	} hdr;
-	int hlen;
-};
-
-struct udp_sock {
-	struct inet_sock inet;
-	int pending;
-	unsigned int corkflag;
-	__u8 encap_type;
-	unsigned char no_check6_tx: 1;
-	unsigned char no_check6_rx: 1;
-	unsigned char encap_enabled: 1;
-	unsigned char gro_enabled: 1;
-	__u16 len;
-	__u16 gso_size;
-	__u16 pcslen;
-	__u16 pcrlen;
-	__u8 pcflag;
-	__u8 unused[3];
-	int (*encap_rcv)(struct sock *, struct sk_buff *);
-	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
-	void (*encap_destroy)(struct sock *);
-	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sock *, struct sk_buff *, int);
-	struct sk_buff_head reader_queue;
-	int forward_deficit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct udp_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	__u16 cscov;
-	__u8 partial_cov;
-};
-
-struct udp_dev_scratch {
-	u32 _tsize_state;
-	u16 len;
-	bool is_linear;
-	bool csum_unnecessary;
-};
-
-struct udp_seq_afinfo {
-	sa_family_t family;
-	struct udp_table *udp_table;
-};
-
-struct udp_iter_state {
-	struct seq_net_private p;
-	int bucket;
-};
-
-struct inet_protosw {
-	struct list_head list;
-	short unsigned int type;
-	short unsigned int protocol;
-	struct proto *prot;
-	const struct proto_ops *ops;
-	unsigned char flags;
-};
-
-typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
-
-typedef struct sock * (*udp_lookup_t)(struct sk_buff *, __be16, __be16);
-
-struct arpreq {
-	struct sockaddr arp_pa;
-	struct sockaddr arp_ha;
-	int arp_flags;
-	struct sockaddr arp_netmask;
-	char arp_dev[16];
-};
-
-typedef struct {
-	char ax25_call[7];
-} ax25_address;
-
-enum {
-	AX25_VALUES_IPDEFMODE = 0,
-	AX25_VALUES_AXDEFMODE = 1,
-	AX25_VALUES_BACKOFF = 2,
-	AX25_VALUES_CONMODE = 3,
-	AX25_VALUES_WINDOW = 4,
-	AX25_VALUES_EWINDOW = 5,
-	AX25_VALUES_T1 = 6,
-	AX25_VALUES_T2 = 7,
-	AX25_VALUES_T3 = 8,
-	AX25_VALUES_IDLE = 9,
-	AX25_VALUES_N2 = 10,
-	AX25_VALUES_PACLEN = 11,
-	AX25_VALUES_PROTOCOL = 12,
-	AX25_VALUES_DS_TIMEOUT = 13,
-	AX25_MAX_VALUES = 14,
-};
-
-struct ax25_dev {
-	struct ax25_dev *next;
-	struct net_device *dev;
-	struct net_device *forward;
-	struct ctl_table_header *sysheader;
-	int values[14];
-};
-
-typedef struct ax25_dev ax25_dev;
-
-enum {
-	XFRM_LOOKUP_ICMP = 1,
-	XFRM_LOOKUP_QUEUE = 2,
-	XFRM_LOOKUP_KEEP_DST_REF = 4,
-};
-
-struct pingv6_ops {
-	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
-	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
-	int (*icmpv6_err_convert)(u8, u8, int *);
-	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
-	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
-};
-
-struct icmp_bxm {
-	struct sk_buff *skb;
-	int offset;
-	int data_len;
-	struct {
-		struct icmphdr icmph;
-		__be32 times[3];
-	} data;
-	int head_len;
-	struct ip_options_data replyopts;
-};
-
-struct icmp_control {
-	bool (*handler)(struct sk_buff *);
-	short int error;
-};
-
-struct ifaddrmsg {
-	__u8 ifa_family;
-	__u8 ifa_prefixlen;
-	__u8 ifa_flags;
-	__u8 ifa_scope;
-	__u32 ifa_index;
-};
-
-enum {
-	IFA_UNSPEC = 0,
-	IFA_ADDRESS = 1,
-	IFA_LOCAL = 2,
-	IFA_LABEL = 3,
-	IFA_BROADCAST = 4,
-	IFA_ANYCAST = 5,
-	IFA_CACHEINFO = 6,
-	IFA_MULTICAST = 7,
-	IFA_FLAGS = 8,
-	IFA_RT_PRIORITY = 9,
-	IFA_TARGET_NETNSID = 10,
-	__IFA_MAX = 11,
-};
-
-struct ifa_cacheinfo {
-	__u32 ifa_prefered;
-	__u32 ifa_valid;
-	__u32 cstamp;
-	__u32 tstamp;
-};
-
-enum {
-	IFLA_INET_UNSPEC = 0,
-	IFLA_INET_CONF = 1,
-	__IFLA_INET_MAX = 2,
-};
-
-struct in_validator_info {
-	__be32 ivi_addr;
-	struct in_device *ivi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct netconfmsg {
-	__u8 ncm_family;
-};
-
-enum {
-	NETCONFA_UNSPEC = 0,
-	NETCONFA_IFINDEX = 1,
-	NETCONFA_FORWARDING = 2,
-	NETCONFA_RP_FILTER = 3,
-	NETCONFA_MC_FORWARDING = 4,
-	NETCONFA_PROXY_NEIGH = 5,
-	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
-	NETCONFA_INPUT = 7,
-	NETCONFA_BC_FORWARDING = 8,
-	__NETCONFA_MAX = 9,
-};
-
-struct inet_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-};
-
-struct devinet_sysctl_table {
-	struct ctl_table_header *sysctl_header;
-	struct ctl_table devinet_vars[33];
-};
-
-struct igmphdr {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-};
-
-struct igmpv3_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	__be32 grec_mca;
-	__be32 grec_src[0];
-};
-
-struct igmpv3_report {
-	__u8 type;
-	__u8 resv1;
-	__sum16 csum;
-	__be16 resv2;
-	__be16 ngrec;
-	struct igmpv3_grec grec[0];
-};
-
-struct igmpv3_query {
-	__u8 type;
-	__u8 code;
-	__sum16 csum;
-	__be32 group;
-	__u8 qrv: 3;
-	__u8 suppress: 1;
-	__u8 resv: 4;
-	__u8 qqic;
-	__be16 nsrcs;
-	__be32 srcs[0];
-};
-
-struct igmp_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *in_dev;
-};
-
-struct igmp_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct in_device *idev;
-	struct ip_mc_list *im;
-};
-
-struct fib_config {
-	u8 fc_dst_len;
-	u8 fc_tos;
-	u8 fc_protocol;
-	u8 fc_scope;
-	u8 fc_type;
-	u8 fc_gw_family;
-	u32 fc_table;
-	__be32 fc_dst;
-	union {
-		__be32 fc_gw4;
-		struct in6_addr fc_gw6;
-	};
-	int fc_oif;
-	u32 fc_flags;
-	u32 fc_priority;
-	__be32 fc_prefsrc;
-	u32 fc_nh_id;
-	struct nlattr *fc_mx;
-	struct rtnexthop *fc_mp;
-	int fc_mx_len;
-	int fc_mp_len;
-	u32 fc_flow;
-	u32 fc_nlflags;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-};
-
-struct fib_result_nl {
-	__be32 fl_addr;
-	u32 fl_mark;
-	unsigned char fl_tos;
-	unsigned char fl_scope;
-	unsigned char tb_id_in;
-	unsigned char tb_id;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	int err;
-};
-
-struct fib_dump_filter {
-	u32 table_id;
-	bool filter_set;
-	bool dump_all_families;
-	bool dump_routes;
-	bool dump_exceptions;
-	unsigned char protocol;
-	unsigned char rt_type;
-	unsigned int flags;
-	struct net_device *dev;
-};
-
-struct fib_nh_notifier_info {
-	struct fib_notifier_info info;
-	struct fib_nh *fib_nh;
-};
-
-struct fib_alias {
-	struct hlist_node fa_list;
-	struct fib_info *fa_info;
-	u8 fa_tos;
-	u8 fa_type;
-	u8 fa_state;
-	u8 fa_slen;
-	u32 tb_id;
-	s16 fa_default;
-	struct callback_head rcu;
-};
-
-struct fib_entry_notifier_info {
-	struct fib_notifier_info info;
-	u32 dst;
-	int dst_len;
-	struct fib_info *fi;
-	u8 tos;
-	u8 type;
-	u32 tb_id;
-};
-
-typedef unsigned int t_key;
-
-struct key_vector {
-	t_key key;
-	unsigned char pos;
-	unsigned char bits;
-	unsigned char slen;
-	union {
-		struct hlist_head leaf;
-		struct key_vector *tnode[0];
-	};
-};
-
-struct tnode {
-	struct callback_head rcu;
-	t_key empty_children;
-	t_key full_children;
-	struct key_vector *parent;
-	struct key_vector kv[1];
-};
-
-struct trie_stat {
-	unsigned int totdepth;
-	unsigned int maxdepth;
-	unsigned int tnodes;
-	unsigned int leaves;
-	unsigned int nullpointers;
-	unsigned int prefixes;
-	unsigned int nodesizes[32];
-};
-
-struct trie {
-	struct key_vector kv[1];
-};
-
-struct fib_trie_iter {
-	struct seq_net_private p;
-	struct fib_table *tb;
-	struct key_vector *tnode;
-	unsigned int index;
-	unsigned int depth;
-};
-
-struct fib_route_iter {
-	struct seq_net_private p;
-	struct fib_table *main_tb;
-	struct key_vector *tnode;
-	loff_t pos;
-	t_key key;
-};
-
-struct ipfrag_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	};
-	struct sk_buff *next_frag;
-	int frag_run_len;
-};
-
-struct ping_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	sa_family_t family;
-};
-
-struct pingfakehdr {
-	struct icmphdr icmph;
-	struct msghdr *msg;
-	sa_family_t family;
-	__wsum wcheck;
-};
-
-struct ping_table {
-	struct hlist_nulls_head hash[64];
-	rwlock_t lock;
-};
-
-enum lwtunnel_ip_t {
-	LWTUNNEL_IP_UNSPEC = 0,
-	LWTUNNEL_IP_ID = 1,
-	LWTUNNEL_IP_DST = 2,
-	LWTUNNEL_IP_SRC = 3,
-	LWTUNNEL_IP_TTL = 4,
-	LWTUNNEL_IP_TOS = 5,
-	LWTUNNEL_IP_FLAGS = 6,
-	LWTUNNEL_IP_PAD = 7,
-	LWTUNNEL_IP_OPTS = 8,
-	__LWTUNNEL_IP_MAX = 9,
-};
-
-enum lwtunnel_ip6_t {
-	LWTUNNEL_IP6_UNSPEC = 0,
-	LWTUNNEL_IP6_ID = 1,
-	LWTUNNEL_IP6_DST = 2,
-	LWTUNNEL_IP6_SRC = 3,
-	LWTUNNEL_IP6_HOPLIMIT = 4,
-	LWTUNNEL_IP6_TC = 5,
-	LWTUNNEL_IP6_FLAGS = 6,
-	LWTUNNEL_IP6_PAD = 7,
-	LWTUNNEL_IP6_OPTS = 8,
-	__LWTUNNEL_IP6_MAX = 9,
-};
-
-enum {
-	LWTUNNEL_IP_OPTS_UNSPEC = 0,
-	LWTUNNEL_IP_OPTS_GENEVE = 1,
-	LWTUNNEL_IP_OPTS_VXLAN = 2,
-	LWTUNNEL_IP_OPTS_ERSPAN = 3,
-	__LWTUNNEL_IP_OPTS_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
-	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
-	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
-	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
-	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
-};
-
-enum {
-	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
-	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
-	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
-	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
-	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
-	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
-};
-
-struct ip6_tnl_encap_ops {
-	size_t (*encap_hlen)(struct ip_tunnel_encap *);
-	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-};
-
-struct geneve_opt {
-	__be16 opt_class;
-	u8 type;
-	u8 length: 5;
-	u8 r3: 1;
-	u8 r2: 1;
-	u8 r1: 1;
-	u8 opt_data[0];
-};
-
-struct vxlan_metadata {
-	u32 gbp;
-};
-
-struct erspan_md2 {
-	__be32 timestamp;
-	__be16 sgt;
-	__u8 hwid_upper: 2;
-	__u8 ft: 5;
-	__u8 p: 1;
-	__u8 o: 1;
-	__u8 gra: 2;
-	__u8 dir: 1;
-	__u8 hwid: 4;
-};
-
-struct erspan_metadata {
-	int version;
-	union {
-		__be32 index;
-		struct erspan_md2 md2;
-	} u;
-};
-
-struct nhmsg {
-	unsigned char nh_family;
-	unsigned char nh_scope;
-	unsigned char nh_protocol;
-	unsigned char resvd;
-	unsigned int nh_flags;
-};
-
-struct nexthop_grp {
-	__u32 id;
-	__u8 weight;
-	__u8 resvd1;
-	__u16 resvd2;
-};
-
-enum {
-	NEXTHOP_GRP_TYPE_MPATH = 0,
-	__NEXTHOP_GRP_TYPE_MAX = 1,
-};
-
-enum {
-	NHA_UNSPEC = 0,
-	NHA_ID = 1,
-	NHA_GROUP = 2,
-	NHA_GROUP_TYPE = 3,
-	NHA_BLACKHOLE = 4,
-	NHA_OIF = 5,
-	NHA_GATEWAY = 6,
-	NHA_ENCAP_TYPE = 7,
-	NHA_ENCAP = 8,
-	NHA_GROUPS = 9,
-	NHA_MASTER = 10,
-	__NHA_MAX = 11,
-};
-
-struct nh_config {
-	u32 nh_id;
-	u8 nh_family;
-	u8 nh_protocol;
-	u8 nh_blackhole;
-	u32 nh_flags;
-	int nh_ifindex;
-	struct net_device *dev;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} gw;
-	struct nlattr *nh_grp;
-	u16 nh_grp_type;
-	struct nlattr *nh_encap;
-	u16 nh_encap_type;
-	u32 nlflags;
-	struct nl_info nlinfo;
-};
-
-struct ip_tunnel_parm {
-	char name[16];
-	int link;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	struct iphdr iph;
-};
-
-enum tunnel_encap_types {
-	TUNNEL_ENCAP_NONE = 0,
-	TUNNEL_ENCAP_FOU = 1,
-	TUNNEL_ENCAP_GUE = 2,
-	TUNNEL_ENCAP_MPLS = 3,
-};
-
-struct ip_tunnel_prl_entry {
-	struct ip_tunnel_prl_entry *next;
-	__be32 addr;
-	u16 flags;
-	struct callback_head callback_head;
-};
-
-struct ip_tunnel {
-	struct ip_tunnel *next;
-	struct hlist_node hash_node;
-	struct net_device *dev;
-	struct net *net;
-	long unsigned int err_time;
-	int err_count;
-	u32 i_seqno;
-	u32 o_seqno;
-	int tun_hlen;
-	u32 index;
-	u8 erspan_ver;
-	u8 dir;
-	u16 hwid;
-	struct dst_cache dst_cache;
-	struct ip_tunnel_parm parms;
-	int mlink;
-	int encap_hlen;
-	int hlen;
-	struct ip_tunnel_encap encap;
-	struct ip_tunnel_prl_entry *prl;
-	unsigned int prl_count;
-	unsigned int ip_tnl_net_id;
-	struct gro_cells gro_cells;
-	__u32 fwmark;
-	bool collect_md;
-	bool ignore_df;
-};
-
-struct tnl_ptk_info {
-	__be16 flags;
-	__be16 proto;
-	__be32 key;
-	__be32 seq;
-	int hdr_len;
-};
-
-struct ip_tunnel_net {
-	struct net_device *fb_tunnel_dev;
-	struct rtnl_link_ops *rtnl_link_ops;
-	struct hlist_head tunnels[128];
-	struct ip_tunnel *collect_md_tun;
-	int type;
-};
-
-struct snmp_mib {
-	const char *name;
-	int entry;
-};
-
-struct fib4_rule {
-	struct fib_rule common;
-	u8 dst_len;
-	u8 src_len;
-	u8 tos;
-	__be32 src;
-	__be32 srcmask;
-	__be32 dst;
-	__be32 dstmask;
-};
-
-enum {
-	PIM_TYPE_HELLO = 0,
-	PIM_TYPE_REGISTER = 1,
-	PIM_TYPE_REGISTER_STOP = 2,
-	PIM_TYPE_JOIN_PRUNE = 3,
-	PIM_TYPE_BOOTSTRAP = 4,
-	PIM_TYPE_ASSERT = 5,
-	PIM_TYPE_GRAFT = 6,
-	PIM_TYPE_GRAFT_ACK = 7,
-	PIM_TYPE_CANDIDATE_RP_ADV = 8,
-};
-
-struct pimreghdr {
-	__u8 type;
-	__u8 reserved;
-	__be16 csum;
-	__be32 flags;
-};
-
-typedef short unsigned int vifi_t;
-
-struct vifctl {
-	vifi_t vifc_vifi;
-	unsigned char vifc_flags;
-	unsigned char vifc_threshold;
-	unsigned int vifc_rate_limit;
-	union {
-		struct in_addr vifc_lcl_addr;
-		int vifc_lcl_ifindex;
-	};
-	struct in_addr vifc_rmt_addr;
-};
-
-struct mfcctl {
-	struct in_addr mfcc_origin;
-	struct in_addr mfcc_mcastgrp;
-	vifi_t mfcc_parent;
-	unsigned char mfcc_ttls[32];
-	unsigned int mfcc_pkt_cnt;
-	unsigned int mfcc_byte_cnt;
-	unsigned int mfcc_wrong_if;
-	int mfcc_expire;
-};
-
-struct sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	long unsigned int pktcnt;
-	long unsigned int bytecnt;
-	long unsigned int wrong_if;
-};
-
-struct sioc_vif_req {
-	vifi_t vifi;
-	long unsigned int icount;
-	long unsigned int ocount;
-	long unsigned int ibytes;
-	long unsigned int obytes;
-};
-
-struct igmpmsg {
-	__u32 unused1;
-	__u32 unused2;
-	unsigned char im_msgtype;
-	unsigned char im_mbz;
-	unsigned char im_vif;
-	unsigned char unused3;
-	struct in_addr im_src;
-	struct in_addr im_dst;
-};
-
-enum {
-	IPMRA_TABLE_UNSPEC = 0,
-	IPMRA_TABLE_ID = 1,
-	IPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,
-	IPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,
-	IPMRA_TABLE_MROUTE_DO_ASSERT = 4,
-	IPMRA_TABLE_MROUTE_DO_PIM = 5,
-	IPMRA_TABLE_VIFS = 6,
-	IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,
-	__IPMRA_TABLE_MAX = 8,
-};
-
-enum {
-	IPMRA_VIF_UNSPEC = 0,
-	IPMRA_VIF = 1,
-	__IPMRA_VIF_MAX = 2,
-};
-
-enum {
-	IPMRA_VIFA_UNSPEC = 0,
-	IPMRA_VIFA_IFINDEX = 1,
-	IPMRA_VIFA_VIF_ID = 2,
-	IPMRA_VIFA_FLAGS = 3,
-	IPMRA_VIFA_BYTES_IN = 4,
-	IPMRA_VIFA_BYTES_OUT = 5,
-	IPMRA_VIFA_PACKETS_IN = 6,
-	IPMRA_VIFA_PACKETS_OUT = 7,
-	IPMRA_VIFA_LOCAL_ADDR = 8,
-	IPMRA_VIFA_REMOTE_ADDR = 9,
-	IPMRA_VIFA_PAD = 10,
-	__IPMRA_VIFA_MAX = 11,
-};
-
-enum {
-	IPMRA_CREPORT_UNSPEC = 0,
-	IPMRA_CREPORT_MSGTYPE = 1,
-	IPMRA_CREPORT_VIF_ID = 2,
-	IPMRA_CREPORT_SRC_ADDR = 3,
-	IPMRA_CREPORT_DST_ADDR = 4,
-	IPMRA_CREPORT_PKT = 5,
-	__IPMRA_CREPORT_MAX = 6,
-};
-
-struct vif_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct net_device *dev;
-	short unsigned int vif_index;
-	short unsigned int vif_flags;
-	u32 tb_id;
-};
-
-enum {
-	MFC_STATIC = 1,
-	MFC_OFFLOAD = 2,
-};
-
-struct mr_mfc {
-	struct rhlist_head mnode;
-	short unsigned int mfc_parent;
-	int mfc_flags;
-	union {
-		struct {
-			long unsigned int expires;
-			struct sk_buff_head unresolved;
-		} unres;
-		struct {
-			long unsigned int last_assert;
-			int minvif;
-			int maxvif;
-			long unsigned int bytes;
-			long unsigned int pkt;
-			long unsigned int wrong_if;
-			long unsigned int lastuse;
-			unsigned char ttls[32];
-			refcount_t refcount;
-		} res;
-	} mfc_un;
-	struct list_head list;
-	struct callback_head rcu;
-	void (*free)(struct callback_head *);
-};
-
-struct mfc_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct mr_mfc *mfc;
-	u32 tb_id;
-};
-
-struct mr_vif_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	int ct;
-};
-
-struct mr_mfc_iter {
-	struct seq_net_private p;
-	struct mr_table *mrt;
-	struct list_head *cache;
-	spinlock_t *lock;
-};
-
-struct mfc_cache_cmp_arg {
-	__be32 mfc_mcastgrp;
-	__be32 mfc_origin;
-};
-
-struct mfc_cache {
-	struct mr_mfc _c;
-	union {
-		struct {
-			__be32 mfc_mcastgrp;
-			__be32 mfc_origin;
-		};
-		struct mfc_cache_cmp_arg cmparg;
-	};
-};
-
-struct compat_sioc_sg_req {
-	struct in_addr src;
-	struct in_addr grp;
-	compat_ulong_t pktcnt;
-	compat_ulong_t bytecnt;
-	compat_ulong_t wrong_if;
-};
-
-struct compat_sioc_vif_req {
-	vifi_t vifi;
-	compat_ulong_t icount;
-	compat_ulong_t ocount;
-	compat_ulong_t ibytes;
-	compat_ulong_t obytes;
-};
-
-struct rta_mfc_stats {
-	__u64 mfcs_packets;
-	__u64 mfcs_bytes;
-	__u64 mfcs_wrong_if;
-};
-
-struct xfrm_tunnel {
-	int (*handler)(struct sk_buff *);
-	int (*err_handler)(struct sk_buff *, u32);
-	struct xfrm_tunnel *next;
-	int priority;
-};
-
-struct ic_device {
-	struct ic_device *next;
-	struct net_device *dev;
-	short unsigned int flags;
-	short int able;
-	__be32 xid;
-};
-
-struct bootp_pkt {
-	struct iphdr iph;
-	struct udphdr udph;
-	u8 op;
-	u8 htype;
-	u8 hlen;
-	u8 hops;
-	__be32 xid;
-	__be16 secs;
-	__be16 flags;
-	__be32 client_ip;
-	__be32 your_ip;
-	__be32 server_ip;
-	__be32 relay_ip;
-	u8 hw_addr[16];
-	u8 serv_name[64];
-	u8 boot_file[128];
-	u8 exten[312];
-};
-
-struct xt_get_revision {
-	char name[29];
-	__u8 revision;
-};
-
-struct ipt_icmp {
-	__u8 type;
-	__u8 code[2];
-	__u8 invflags;
-};
-
-struct ipt_getinfo {
-	char name[32];
-	unsigned int valid_hooks;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int num_entries;
-	unsigned int size;
-};
-
-struct ipt_replace {
-	char name[32];
-	unsigned int valid_hooks;
-	unsigned int num_entries;
-	unsigned int size;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int num_counters;
-	struct xt_counters *counters;
-	struct ipt_entry entries[0];
-};
-
-struct ipt_get_entries {
-	char name[32];
-	unsigned int size;
-	struct ipt_entry entrytable[0];
-};
-
-struct ipt_standard {
-	struct ipt_entry entry;
-	struct xt_standard_target target;
-};
-
-struct ipt_error {
-	struct ipt_entry entry;
-	struct xt_error_target target;
-};
-
-struct compat_ipt_entry {
-	struct ipt_ip ip;
-	compat_uint_t nfcache;
-	__u16 target_offset;
-	__u16 next_offset;
-	compat_uint_t comefrom;
-	struct compat_xt_counters counters;
-	unsigned char elems[0];
-};
-
-struct compat_ipt_replace {
-	char name[32];
-	u32 valid_hooks;
-	u32 num_entries;
-	u32 size;
-	u32 hook_entry[5];
-	u32 underflow[5];
-	u32 num_counters;
-	compat_uptr_t counters;
-	struct compat_ipt_entry entries[0];
-} __attribute__((packed));
-
-struct compat_ipt_get_entries {
-	char name[32];
-	compat_uint_t size;
-	struct compat_ipt_entry entrytable[0];
-} __attribute__((packed));
-
-enum ipt_reject_with {
-	IPT_ICMP_NET_UNREACHABLE = 0,
-	IPT_ICMP_HOST_UNREACHABLE = 1,
-	IPT_ICMP_PROT_UNREACHABLE = 2,
-	IPT_ICMP_PORT_UNREACHABLE = 3,
-	IPT_ICMP_ECHOREPLY = 4,
-	IPT_ICMP_NET_PROHIBITED = 5,
-	IPT_ICMP_HOST_PROHIBITED = 6,
-	IPT_TCP_RESET = 7,
-	IPT_ICMP_ADMIN_PROHIBITED = 8,
-};
-
-struct ipt_reject_info {
-	enum ipt_reject_with with;
-};
-
-struct bictcp {
-	u32 cnt;
-	u32 last_max_cwnd;
-	u32 last_cwnd;
-	u32 last_time;
-	u32 bic_origin_point;
-	u32 bic_K;
-	u32 delay_min;
-	u32 epoch_start;
-	u32 ack_cnt;
-	u32 tcp_cwnd;
-	u16 unused;
-	u8 sample_cnt;
-	u8 found;
-	u32 round_start;
-	u32 end_seq;
-	u32 last_ack;
-	u32 curr_rtt;
-};
-
-struct tls_crypto_info {
-	__u16 version;
-	__u16 cipher_type;
-};
-
-struct tls12_crypto_info_aes_gcm_128 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[16];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls12_crypto_info_aes_gcm_256 {
-	struct tls_crypto_info info;
-	unsigned char iv[8];
-	unsigned char key[32];
-	unsigned char salt[4];
-	unsigned char rec_seq[8];
-};
-
-struct tls_rec {
-	struct list_head list;
-	int tx_ready;
-	int tx_flags;
-	struct sk_msg msg_plaintext;
-	struct sk_msg msg_encrypted;
-	struct scatterlist sg_aead_in[2];
-	struct scatterlist sg_aead_out[2];
-	char content_type;
-	struct scatterlist sg_content_type;
-	char aad_space[13];
-	u8 iv_data[16];
-	struct aead_request aead_req;
-	u8 aead_req_ctx[0];
-};
-
-struct tx_work {
-	struct delayed_work work;
-	struct sock *sk;
-};
-
-struct tls_sw_context_tx {
-	struct crypto_aead *aead_send;
-	struct crypto_wait async_wait;
-	struct tx_work tx_work;
-	struct tls_rec *open_rec;
-	struct list_head tx_list;
-	atomic_t encrypt_pending;
-	int async_notify;
-	u8 async_capable: 1;
-	long unsigned int tx_bitmask;
-};
-
-struct cipher_context {
-	char *iv;
-	char *rec_seq;
-};
-
-union tls_crypto_context {
-	struct tls_crypto_info info;
-	union {
-		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
-		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
-	};
-};
-
-struct tls_prot_info {
-	u16 version;
-	u16 cipher_type;
-	u16 prepend_size;
-	u16 tag_size;
-	u16 overhead_size;
-	u16 iv_size;
-	u16 salt_size;
-	u16 rec_seq_size;
-	u16 aad_size;
-	u16 tail_size;
-};
-
-struct tls_context {
-	struct tls_prot_info prot_info;
-	u8 tx_conf: 3;
-	u8 rx_conf: 3;
-	int (*push_pending_record)(struct sock *, int);
-	void (*sk_write_space)(struct sock *);
-	void *priv_ctx_tx;
-	void *priv_ctx_rx;
-	struct net_device *netdev;
-	struct cipher_context tx;
-	struct cipher_context rx;
-	struct scatterlist *partially_sent_record;
-	u16 partially_sent_offset;
-	bool in_tcp_sendpages;
-	bool pending_open_record_frags;
-	struct mutex tx_lock;
-	long unsigned int flags;
-	struct proto *sk_proto;
-	void (*sk_destruct)(struct sock *);
-	union tls_crypto_context crypto_send;
-	union tls_crypto_context crypto_recv;
-	struct list_head list;
-	refcount_t refcount;
-	struct callback_head rcu;
-};
-
-enum {
-	TCP_BPF_IPV4 = 0,
-	TCP_BPF_IPV6 = 1,
-	TCP_BPF_NUM_PROTS = 2,
-};
-
-enum {
-	TCP_BPF_BASE = 0,
-	TCP_BPF_TX = 1,
-	TCP_BPF_NUM_CFGS = 2,
-};
-
-struct netlbl_audit {
-	u32 secid;
-	kuid_t loginuid;
-	unsigned int sessionid;
-};
-
-struct cipso_v4_std_map_tbl {
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} lvl;
-	struct {
-		u32 *cipso;
-		u32 *local;
-		u32 cipso_size;
-		u32 local_size;
-	} cat;
-};
-
-struct cipso_v4_doi {
-	u32 doi;
-	u32 type;
-	union {
-		struct cipso_v4_std_map_tbl *std;
-	} map;
-	u8 tags[5];
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct cipso_v4_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct cipso_v4_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-struct xfrm_policy_afinfo {
-	struct dst_ops *dst_ops;
-	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
-	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
-	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
-	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
-};
-
-struct xfrm_state_afinfo {
-	u8 family;
-	u8 proto;
-	const struct xfrm_type_offload *type_offload_esp;
-	const struct xfrm_type *type_esp;
-	const struct xfrm_type *type_ipip;
-	const struct xfrm_type *type_ipip6;
-	const struct xfrm_type *type_comp;
-	const struct xfrm_type *type_ah;
-	const struct xfrm_type *type_routing;
-	const struct xfrm_type *type_dstopts;
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	int (*output_finish)(struct sock *, struct sk_buff *);
-	int (*extract_input)(struct xfrm_state *, struct sk_buff *);
-	int (*extract_output)(struct xfrm_state *, struct sk_buff *);
-	int (*transport_finish)(struct sk_buff *, int);
-	void (*local_error)(struct sk_buff *, u32);
-};
-
-struct ip6_tnl;
-
-struct xfrm_tunnel_skb_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	union {
-		struct ip_tunnel *ip4;
-		struct ip6_tnl *ip6;
-	} tunnel;
-};
-
-struct xfrm_mode_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	__be16 id;
-	__be16 frag_off;
-	u8 ihl;
-	u8 tos;
-	u8 ttl;
-	u8 protocol;
-	u8 optlen;
-	u8 flow_lbl[3];
-};
-
-struct xfrm_spi_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	unsigned int daddroff;
-	unsigned int family;
-	__be32 seq;
-};
-
-struct xfrm_input_afinfo {
-	unsigned int family;
-	int (*callback)(struct sk_buff *, u8, int);
-};
-
-struct xfrm4_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*input_handler)(struct sk_buff *, int, __be32, int);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, u32);
-	struct xfrm4_protocol *next;
-	int priority;
-};
-
-enum {
-	XFRM_STATE_VOID = 0,
-	XFRM_STATE_ACQ = 1,
-	XFRM_STATE_VALID = 2,
-	XFRM_STATE_ERROR = 3,
-	XFRM_STATE_EXPIRED = 4,
-	XFRM_STATE_DEAD = 5,
-};
-
-struct xfrm_if;
-
-struct xfrm_if_cb {
-	struct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);
-};
-
-struct xfrm_if_parms {
-	int link;
-	u32 if_id;
-};
-
-struct xfrm_if {
-	struct xfrm_if *next;
-	struct net_device *dev;
-	struct net *net;
-	struct xfrm_if_parms p;
-	struct gro_cells gro_cells;
-};
-
-struct xfrm_policy_walk {
-	struct xfrm_policy_walk_entry walk;
-	u8 type;
-	u32 seq;
-};
-
-struct xfrmk_spdinfo {
-	u32 incnt;
-	u32 outcnt;
-	u32 fwdcnt;
-	u32 inscnt;
-	u32 outscnt;
-	u32 fwdscnt;
-	u32 spdhcnt;
-	u32 spdhmcnt;
-};
-
-struct xfrm_flo {
-	struct dst_entry *dst_orig;
-	u8 flags;
-};
-
-struct xfrm_pol_inexact_node {
-	struct rb_node node;
-	union {
-		xfrm_address_t addr;
-		struct callback_head rcu;
-	};
-	u8 prefixlen;
-	struct rb_root root;
-	struct hlist_head hhead;
-};
-
-struct xfrm_pol_inexact_key {
-	possible_net_t net;
-	u32 if_id;
-	u16 family;
-	u8 dir;
-	u8 type;
-};
-
-struct xfrm_pol_inexact_bin {
-	struct xfrm_pol_inexact_key k;
-	struct rhash_head head;
-	struct hlist_head hhead;
-	seqcount_t count;
-	struct rb_root root_d;
-	struct rb_root root_s;
-	struct list_head inexact_bins;
-	struct callback_head rcu;
-};
-
-enum xfrm_pol_inexact_candidate_type {
-	XFRM_POL_CAND_BOTH = 0,
-	XFRM_POL_CAND_SADDR = 1,
-	XFRM_POL_CAND_DADDR = 2,
-	XFRM_POL_CAND_ANY = 3,
-	XFRM_POL_CAND_MAX = 4,
-};
-
-struct xfrm_pol_inexact_candidates {
-	struct hlist_head *res[4];
-};
-
-enum xfrm_ae_ftype_t {
-	XFRM_AE_UNSPEC = 0,
-	XFRM_AE_RTHR = 1,
-	XFRM_AE_RVAL = 2,
-	XFRM_AE_LVAL = 4,
-	XFRM_AE_ETHR = 8,
-	XFRM_AE_CR = 16,
-	XFRM_AE_CE = 32,
-	XFRM_AE_CU = 64,
-	__XFRM_AE_MAX = 65,
-};
-
-enum xfrm_nlgroups {
-	XFRMNLGRP_NONE = 0,
-	XFRMNLGRP_ACQUIRE = 1,
-	XFRMNLGRP_EXPIRE = 2,
-	XFRMNLGRP_SA = 3,
-	XFRMNLGRP_POLICY = 4,
-	XFRMNLGRP_AEVENTS = 5,
-	XFRMNLGRP_REPORT = 6,
-	XFRMNLGRP_MIGRATE = 7,
-	XFRMNLGRP_MAPPING = 8,
-	__XFRMNLGRP_MAX = 9,
-};
-
-enum {
-	XFRM_MODE_FLAG_TUNNEL = 1,
-};
-
-struct km_event {
-	union {
-		u32 hard;
-		u32 proto;
-		u32 byid;
-		u32 aevent;
-		u32 type;
-	} data;
-	u32 seq;
-	u32 portid;
-	u32 event;
-	struct net *net;
-};
-
-struct xfrm_kmaddress {
-	xfrm_address_t local;
-	xfrm_address_t remote;
-	u32 reserved;
-	u16 family;
-};
-
-struct xfrm_migrate {
-	xfrm_address_t old_daddr;
-	xfrm_address_t old_saddr;
-	xfrm_address_t new_daddr;
-	xfrm_address_t new_saddr;
-	u8 proto;
-	u8 mode;
-	u16 reserved;
-	u32 reqid;
-	u16 old_family;
-	u16 new_family;
-};
-
-struct xfrm_mgr {
-	struct list_head list;
-	int (*notify)(struct xfrm_state *, const struct km_event *);
-	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
-	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
-	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
-	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
-	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
-	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
-	bool (*is_alive)(const struct km_event *);
-};
-
-struct xfrmk_sadinfo {
-	u32 sadhcnt;
-	u32 sadhmcnt;
-	u32 sadcnt;
-};
-
-struct ip_beet_phdr {
-	__u8 nexthdr;
-	__u8 hdrlen;
-	__u8 padlen;
-	__u8 reserved;
-};
-
-struct __ip6_tnl_parm {
-	char name[16];
-	int link;
-	__u8 proto;
-	__u8 encap_limit;
-	__u8 hop_limit;
-	bool collect_md;
-	__be32 flowinfo;
-	__u32 flags;
-	struct in6_addr laddr;
-	struct in6_addr raddr;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	__u32 fwmark;
-	__u32 index;
-	__u8 erspan_ver;
-	__u8 dir;
-	__u16 hwid;
-};
-
-struct ip6_tnl {
-	struct ip6_tnl *next;
-	struct net_device *dev;
-	struct net *net;
-	struct __ip6_tnl_parm parms;
-	struct flowi fl;
-	struct dst_cache dst_cache;
-	struct gro_cells gro_cells;
-	int err_count;
-	long unsigned int err_time;
-	__u32 i_seqno;
-	__u32 o_seqno;
-	int hlen;
-	int tun_hlen;
-	int encap_hlen;
-	struct ip_tunnel_encap encap;
-	int mlink;
-};
-
-struct xfrm_skb_cb {
-	struct xfrm_tunnel_skb_cb header;
-	union {
-		struct {
-			__u32 low;
-			__u32 hi;
-		} output;
-		struct {
-			__be32 low;
-			__be32 hi;
-		} input;
-	} seq;
-};
-
-struct xfrm_trans_tasklet {
-	struct tasklet_struct tasklet;
-	struct sk_buff_head queue;
-};
-
-struct xfrm_trans_cb {
-	union {
-		struct inet_skb_parm h4;
-		struct inet6_skb_parm h6;
-	} header;
-	int (*finish)(struct net *, struct sock *, struct sk_buff *);
-};
-
-struct sadb_alg {
-	__u8 sadb_alg_id;
-	__u8 sadb_alg_ivlen;
-	__u16 sadb_alg_minbits;
-	__u16 sadb_alg_maxbits;
-	__u16 sadb_alg_reserved;
-};
-
-struct xfrm_algo_aead_info {
-	char *geniv;
-	u16 icv_truncbits;
-};
-
-struct xfrm_algo_auth_info {
-	u16 icv_truncbits;
-	u16 icv_fullbits;
-};
-
-struct xfrm_algo_encr_info {
-	char *geniv;
-	u16 blockbits;
-	u16 defkeybits;
-};
-
-struct xfrm_algo_comp_info {
-	u16 threshold;
-};
-
-struct xfrm_algo_desc {
-	char *name;
-	char *compat;
-	u8 available: 1;
-	u8 pfkey_supported: 1;
-	union {
-		struct xfrm_algo_aead_info aead;
-		struct xfrm_algo_auth_info auth;
-		struct xfrm_algo_encr_info encr;
-		struct xfrm_algo_comp_info comp;
-	} uinfo;
-	struct sadb_alg desc;
-};
-
-struct xfrm_algo_list {
-	struct xfrm_algo_desc *algs;
-	int entries;
-	u32 type;
-	u32 mask;
-};
-
-struct xfrm_aead_name {
-	const char *name;
-	int icvbits;
-};
-
-enum {
-	XFRM_SHARE_ANY = 0,
-	XFRM_SHARE_SESSION = 1,
-	XFRM_SHARE_USER = 2,
-	XFRM_SHARE_UNIQUE = 3,
-};
-
-struct xfrm_user_sec_ctx {
-	__u16 len;
-	__u16 exttype;
-	__u8 ctx_alg;
-	__u8 ctx_doi;
-	__u16 ctx_len;
-};
-
-struct xfrm_user_tmpl {
-	struct xfrm_id id;
-	__u16 family;
-	xfrm_address_t saddr;
-	__u32 reqid;
-	__u8 mode;
-	__u8 share;
-	__u8 optional;
-	__u32 aalgos;
-	__u32 ealgos;
-	__u32 calgos;
-};
-
-struct xfrm_userpolicy_type {
-	__u8 type;
-	__u16 reserved1;
-	__u8 reserved2;
-};
-
-enum xfrm_attr_type_t {
-	XFRMA_UNSPEC = 0,
-	XFRMA_ALG_AUTH = 1,
-	XFRMA_ALG_CRYPT = 2,
-	XFRMA_ALG_COMP = 3,
-	XFRMA_ENCAP = 4,
-	XFRMA_TMPL = 5,
-	XFRMA_SA = 6,
-	XFRMA_POLICY = 7,
-	XFRMA_SEC_CTX = 8,
-	XFRMA_LTIME_VAL = 9,
-	XFRMA_REPLAY_VAL = 10,
-	XFRMA_REPLAY_THRESH = 11,
-	XFRMA_ETIMER_THRESH = 12,
-	XFRMA_SRCADDR = 13,
-	XFRMA_COADDR = 14,
-	XFRMA_LASTUSED = 15,
-	XFRMA_POLICY_TYPE = 16,
-	XFRMA_MIGRATE = 17,
-	XFRMA_ALG_AEAD = 18,
-	XFRMA_KMADDRESS = 19,
-	XFRMA_ALG_AUTH_TRUNC = 20,
-	XFRMA_MARK = 21,
-	XFRMA_TFCPAD = 22,
-	XFRMA_REPLAY_ESN_VAL = 23,
-	XFRMA_SA_EXTRA_FLAGS = 24,
-	XFRMA_PROTO = 25,
-	XFRMA_ADDRESS_FILTER = 26,
-	XFRMA_PAD = 27,
-	XFRMA_OFFLOAD_DEV = 28,
-	XFRMA_SET_MARK = 29,
-	XFRMA_SET_MARK_MASK = 30,
-	XFRMA_IF_ID = 31,
-	__XFRMA_MAX = 32,
-};
-
-enum xfrm_sadattr_type_t {
-	XFRMA_SAD_UNSPEC = 0,
-	XFRMA_SAD_CNT = 1,
-	XFRMA_SAD_HINFO = 2,
-	__XFRMA_SAD_MAX = 3,
-};
-
-struct xfrmu_sadhinfo {
-	__u32 sadhcnt;
-	__u32 sadhmcnt;
-};
-
-enum xfrm_spdattr_type_t {
-	XFRMA_SPD_UNSPEC = 0,
-	XFRMA_SPD_INFO = 1,
-	XFRMA_SPD_HINFO = 2,
-	XFRMA_SPD_IPV4_HTHRESH = 3,
-	XFRMA_SPD_IPV6_HTHRESH = 4,
-	__XFRMA_SPD_MAX = 5,
-};
-
-struct xfrmu_spdinfo {
-	__u32 incnt;
-	__u32 outcnt;
-	__u32 fwdcnt;
-	__u32 inscnt;
-	__u32 outscnt;
-	__u32 fwdscnt;
-};
-
-struct xfrmu_spdhinfo {
-	__u32 spdhcnt;
-	__u32 spdhmcnt;
-};
-
-struct xfrmu_spdhthresh {
-	__u8 lbits;
-	__u8 rbits;
-};
-
-struct xfrm_usersa_info {
-	struct xfrm_selector sel;
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_stats stats;
-	__u32 seq;
-	__u32 reqid;
-	__u16 family;
-	__u8 mode;
-	__u8 replay_window;
-	__u8 flags;
-};
-
-struct xfrm_usersa_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u16 family;
-	__u8 proto;
-};
-
-struct xfrm_aevent_id {
-	struct xfrm_usersa_id sa_id;
-	xfrm_address_t saddr;
-	__u32 flags;
-	__u32 reqid;
-};
-
-struct xfrm_userspi_info {
-	struct xfrm_usersa_info info;
-	__u32 min;
-	__u32 max;
-};
-
-struct xfrm_userpolicy_info {
-	struct xfrm_selector sel;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	__u32 priority;
-	__u32 index;
-	__u8 dir;
-	__u8 action;
-	__u8 flags;
-	__u8 share;
-};
-
-struct xfrm_userpolicy_id {
-	struct xfrm_selector sel;
-	__u32 index;
-	__u8 dir;
-};
-
-struct xfrm_user_acquire {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	struct xfrm_selector sel;
-	struct xfrm_userpolicy_info policy;
-	__u32 aalgos;
-	__u32 ealgos;
-	__u32 calgos;
-	__u32 seq;
-};
-
-struct xfrm_user_expire {
-	struct xfrm_usersa_info state;
-	__u8 hard;
-};
-
-struct xfrm_user_polexpire {
-	struct xfrm_userpolicy_info pol;
-	__u8 hard;
-};
-
-struct xfrm_usersa_flush {
-	__u8 proto;
-};
-
-struct xfrm_user_report {
-	__u8 proto;
-	struct xfrm_selector sel;
-};
-
-struct xfrm_user_mapping {
-	struct xfrm_usersa_id id;
-	__u32 reqid;
-	xfrm_address_t old_saddr;
-	xfrm_address_t new_saddr;
-	__be16 old_sport;
-	__be16 new_sport;
-};
-
-struct xfrm_user_offload {
-	int ifindex;
-	__u8 flags;
-};
-
-struct xfrm_dump_info {
-	struct sk_buff *in_skb;
-	struct sk_buff *out_skb;
-	u32 nlmsg_seq;
-	u16 nlmsg_flags;
-};
-
-struct xfrm_link {
-	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);
-	int (*start)(struct netlink_callback *);
-	int (*dump)(struct sk_buff *, struct netlink_callback *);
-	int (*done)(struct netlink_callback *);
-	const struct nla_policy *nla_pol;
-	int nla_max;
-};
-
-struct unix_stream_read_state {
-	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
-	struct socket *socket;
-	struct msghdr *msg;
-	struct pipe_inode_info *pipe;
-	size_t size;
-	int flags;
-	unsigned int splice_flags;
-};
-
-enum flowlabel_reflect {
-	FLOWLABEL_REFLECT_ESTABLISHED = 1,
-	FLOWLABEL_REFLECT_TCP_RESET = 2,
-	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
-};
-
-struct ac6_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct ip6_fraglist_iter {
-	struct ipv6hdr *tmp_hdr;
-	struct sk_buff *frag;
-	int offset;
-	unsigned int hlen;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ip6_frag_state {
-	u8 *prevhdr;
-	unsigned int hlen;
-	unsigned int mtu;
-	unsigned int left;
-	int offset;
-	int ptr;
-	int hroom;
-	int troom;
-	__be32 frag_id;
-	u8 nexthdr;
-};
-
-struct ipcm6_cookie {
-	struct sockcm_cookie sockc;
-	__s16 hlimit;
-	__s16 tclass;
-	__s8 dontfrag;
-	struct ipv6_txoptions *opt;
-	__u16 gso_size;
-};
-
-enum {
-	IFLA_INET6_UNSPEC = 0,
-	IFLA_INET6_FLAGS = 1,
-	IFLA_INET6_CONF = 2,
-	IFLA_INET6_STATS = 3,
-	IFLA_INET6_MCAST = 4,
-	IFLA_INET6_CACHEINFO = 5,
-	IFLA_INET6_ICMP6STATS = 6,
-	IFLA_INET6_TOKEN = 7,
-	IFLA_INET6_ADDR_GEN_MODE = 8,
-	__IFLA_INET6_MAX = 9,
-};
-
-enum in6_addr_gen_mode {
-	IN6_ADDR_GEN_MODE_EUI64 = 0,
-	IN6_ADDR_GEN_MODE_NONE = 1,
-	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
-	IN6_ADDR_GEN_MODE_RANDOM = 3,
-};
-
-struct ifla_cacheinfo {
-	__u32 max_reasm_len;
-	__u32 tstamp;
-	__u32 reachable_time;
-	__u32 retrans_time;
-};
-
-struct wpan_phy;
-
-struct wpan_dev_header_ops;
-
-struct wpan_dev {
-	struct wpan_phy *wpan_phy;
-	int iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	const struct wpan_dev_header_ops *header_ops;
-	struct net_device *lowpan_dev;
-	u32 identifier;
-	__le16 pan_id;
-	__le16 short_addr;
-	__le64 extended_addr;
-	atomic_t bsn;
-	atomic_t dsn;
-	u8 min_be;
-	u8 max_be;
-	u8 csma_retries;
-	s8 frame_retries;
-	bool lbt;
-	bool promiscuous_mode;
-	bool ackreq;
-};
-
-struct prefixmsg {
-	unsigned char prefix_family;
-	unsigned char prefix_pad1;
-	short unsigned int prefix_pad2;
-	int prefix_ifindex;
-	unsigned char prefix_type;
-	unsigned char prefix_len;
-	unsigned char prefix_flags;
-	unsigned char prefix_pad3;
-};
-
-enum {
-	PREFIX_UNSPEC = 0,
-	PREFIX_ADDRESS = 1,
-	PREFIX_CACHEINFO = 2,
-	__PREFIX_MAX = 3,
-};
-
-struct prefix_cacheinfo {
-	__u32 preferred_time;
-	__u32 valid_time;
-};
-
-struct in6_ifreq {
-	struct in6_addr ifr6_addr;
-	__u32 ifr6_prefixlen;
-	int ifr6_ifindex;
-};
-
-enum {
-	DEVCONF_FORWARDING = 0,
-	DEVCONF_HOPLIMIT = 1,
-	DEVCONF_MTU6 = 2,
-	DEVCONF_ACCEPT_RA = 3,
-	DEVCONF_ACCEPT_REDIRECTS = 4,
-	DEVCONF_AUTOCONF = 5,
-	DEVCONF_DAD_TRANSMITS = 6,
-	DEVCONF_RTR_SOLICITS = 7,
-	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
-	DEVCONF_RTR_SOLICIT_DELAY = 9,
-	DEVCONF_USE_TEMPADDR = 10,
-	DEVCONF_TEMP_VALID_LFT = 11,
-	DEVCONF_TEMP_PREFERED_LFT = 12,
-	DEVCONF_REGEN_MAX_RETRY = 13,
-	DEVCONF_MAX_DESYNC_FACTOR = 14,
-	DEVCONF_MAX_ADDRESSES = 15,
-	DEVCONF_FORCE_MLD_VERSION = 16,
-	DEVCONF_ACCEPT_RA_DEFRTR = 17,
-	DEVCONF_ACCEPT_RA_PINFO = 18,
-	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
-	DEVCONF_RTR_PROBE_INTERVAL = 20,
-	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
-	DEVCONF_PROXY_NDP = 22,
-	DEVCONF_OPTIMISTIC_DAD = 23,
-	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
-	DEVCONF_MC_FORWARDING = 25,
-	DEVCONF_DISABLE_IPV6 = 26,
-	DEVCONF_ACCEPT_DAD = 27,
-	DEVCONF_FORCE_TLLAO = 28,
-	DEVCONF_NDISC_NOTIFY = 29,
-	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
-	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
-	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
-	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
-	DEVCONF_USE_OPTIMISTIC = 34,
-	DEVCONF_ACCEPT_RA_MTU = 35,
-	DEVCONF_STABLE_SECRET = 36,
-	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
-	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
-	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
-	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
-	DEVCONF_DROP_UNSOLICITED_NA = 41,
-	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
-	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
-	DEVCONF_SEG6_ENABLED = 44,
-	DEVCONF_SEG6_REQUIRE_HMAC = 45,
-	DEVCONF_ENHANCED_DAD = 46,
-	DEVCONF_ADDR_GEN_MODE = 47,
-	DEVCONF_DISABLE_POLICY = 48,
-	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
-	DEVCONF_NDISC_TCLASS = 50,
-	DEVCONF_MAX = 51,
-};
-
-enum {
-	INET6_IFADDR_STATE_PREDAD = 0,
-	INET6_IFADDR_STATE_DAD = 1,
-	INET6_IFADDR_STATE_POSTDAD = 2,
-	INET6_IFADDR_STATE_ERRDAD = 3,
-	INET6_IFADDR_STATE_DEAD = 4,
-};
-
-enum nl802154_cca_modes {
-	__NL802154_CCA_INVALID = 0,
-	NL802154_CCA_ENERGY = 1,
-	NL802154_CCA_CARRIER = 2,
-	NL802154_CCA_ENERGY_CARRIER = 3,
-	NL802154_CCA_ALOHA = 4,
-	NL802154_CCA_UWB_SHR = 5,
-	NL802154_CCA_UWB_MULTIPLEXED = 6,
-	__NL802154_CCA_ATTR_AFTER_LAST = 7,
-	NL802154_CCA_ATTR_MAX = 6,
-};
-
-enum nl802154_cca_opts {
-	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
-	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
-	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
-	NL802154_CCA_OPT_ATTR_MAX = 1,
-};
-
-enum nl802154_supported_bool_states {
-	NL802154_SUPPORTED_BOOL_FALSE = 0,
-	NL802154_SUPPORTED_BOOL_TRUE = 1,
-	__NL802154_SUPPORTED_BOOL_INVALD = 2,
-	NL802154_SUPPORTED_BOOL_BOTH = 3,
-	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
-	NL802154_SUPPORTED_BOOL_MAX = 3,
-};
-
-struct wpan_phy_supported {
-	u32 channels[32];
-	u32 cca_modes;
-	u32 cca_opts;
-	u32 iftypes;
-	enum nl802154_supported_bool_states lbt;
-	u8 min_minbe;
-	u8 max_minbe;
-	u8 min_maxbe;
-	u8 max_maxbe;
-	u8 min_csma_backoffs;
-	u8 max_csma_backoffs;
-	s8 min_frame_retries;
-	s8 max_frame_retries;
-	size_t tx_powers_size;
-	size_t cca_ed_levels_size;
-	const s32 *tx_powers;
-	const s32 *cca_ed_levels;
-};
-
-struct wpan_phy_cca {
-	enum nl802154_cca_modes mode;
-	enum nl802154_cca_opts opt;
-};
-
-struct wpan_phy {
-	const void *privid;
-	u32 flags;
-	u8 current_channel;
-	u8 current_page;
-	struct wpan_phy_supported supported;
-	s32 transmit_power;
-	struct wpan_phy_cca cca;
-	__le64 perm_extended_addr;
-	s32 cca_ed_level;
-	u8 symbol_duration;
-	u16 lifs_period;
-	u16 sifs_period;
-	struct device dev;
-	possible_net_t _net;
-	char priv[0];
-};
-
-struct ieee802154_addr {
-	u8 mode;
-	__le16 pan_id;
-	union {
-		__le16 short_addr;
-		__le64 extended_addr;
-	};
-};
-
-struct wpan_dev_header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
-};
-
-union fwnet_hwaddr {
-	u8 u[16];
-	struct {
-		__be64 uniq_id;
-		u8 max_rec;
-		u8 sspd;
-		__be16 fifo_hi;
-		__be32 fifo_lo;
-	} uc;
-};
-
-struct in6_validator_info {
-	struct in6_addr i6vi_addr;
-	struct inet6_dev *i6vi_dev;
-	struct netlink_ext_ack *extack;
-};
-
-struct ifa6_config {
-	const struct in6_addr *pfx;
-	unsigned int plen;
-	const struct in6_addr *peer_pfx;
-	u32 rt_priority;
-	u32 ifa_flags;
-	u32 preferred_lft;
-	u32 valid_lft;
-	u16 scope;
-};
-
-enum cleanup_prefix_rt_t {
-	CLEANUP_PREFIX_RT_NOP = 0,
-	CLEANUP_PREFIX_RT_DEL = 1,
-	CLEANUP_PREFIX_RT_EXPIRE = 2,
-};
-
-enum {
-	IPV6_SADDR_RULE_INIT = 0,
-	IPV6_SADDR_RULE_LOCAL = 1,
-	IPV6_SADDR_RULE_SCOPE = 2,
-	IPV6_SADDR_RULE_PREFERRED = 3,
-	IPV6_SADDR_RULE_OIF = 4,
-	IPV6_SADDR_RULE_LABEL = 5,
-	IPV6_SADDR_RULE_PRIVACY = 6,
-	IPV6_SADDR_RULE_ORCHID = 7,
-	IPV6_SADDR_RULE_PREFIX = 8,
-	IPV6_SADDR_RULE_MAX = 9,
-};
-
-struct ipv6_saddr_score {
-	int rule;
-	int addr_type;
-	struct inet6_ifaddr *ifa;
-	long unsigned int scorebits[1];
-	int scopedist;
-	int matchlen;
-};
-
-struct ipv6_saddr_dst {
-	const struct in6_addr *addr;
-	int ifindex;
-	int scope;
-	int label;
-	unsigned int prefs;
-};
-
-struct if6_iter_state {
-	struct seq_net_private p;
-	int bucket;
-	int offset;
-};
-
-enum addr_type_t {
-	UNICAST_ADDR = 0,
-	MULTICAST_ADDR = 1,
-	ANYCAST_ADDR = 2,
-};
-
-struct inet6_fill_args {
-	u32 portid;
-	u32 seq;
-	int event;
-	unsigned int flags;
-	int netnsid;
-	int ifindex;
-	enum addr_type_t type;
-};
-
-enum {
-	DAD_PROCESS = 0,
-	DAD_BEGIN = 1,
-	DAD_ABORT = 2,
-};
-
-struct ifaddrlblmsg {
-	__u8 ifal_family;
-	__u8 __ifal_reserved;
-	__u8 ifal_prefixlen;
-	__u8 ifal_flags;
-	__u32 ifal_index;
-	__u32 ifal_seq;
-};
-
-enum {
-	IFAL_ADDRESS = 1,
-	IFAL_LABEL = 2,
-	__IFAL_MAX = 3,
-};
-
-struct ip6addrlbl_entry {
-	struct in6_addr prefix;
-	int prefixlen;
-	int ifindex;
-	int addrtype;
-	u32 label;
-	struct hlist_node list;
-	struct callback_head rcu;
-};
-
-struct ip6addrlbl_init_table {
-	const struct in6_addr *prefix;
-	int prefixlen;
-	u32 label;
-};
-
-struct rd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	struct in6_addr dest;
-	__u8 opt[0];
-};
-
-struct fib6_gc_args {
-	int timeout;
-	int more;
-};
-
-struct rt6_exception {
-	struct hlist_node hlist;
-	struct rt6_info *rt6i;
-	long unsigned int stamp;
-	struct callback_head rcu;
-};
-
-struct rt6_rtnl_dump_arg {
-	struct sk_buff *skb;
-	struct netlink_callback *cb;
-	struct net *net;
-	struct fib_dump_filter filter;
-};
-
-struct netevent_redirect {
-	struct dst_entry *old;
-	struct dst_entry *new;
-	struct neighbour *neigh;
-	const void *daddr;
-};
-
-struct trace_event_raw_fib6_table_lookup {
-	struct trace_entry ent;
-	u32 tb_id;
-	int err;
-	int oif;
-	int iif;
-	__u8 tos;
-	__u8 scope;
-	__u8 flags;
-	__u8 src[16];
-	__u8 dst[16];
-	u16 sport;
-	u16 dport;
-	u8 proto;
-	u8 rt_type;
-	u32 __data_loc_name;
-	__u8 gw[16];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_fib6_table_lookup {
-	u32 name;
-};
-
-typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
-
-enum rt6_nud_state {
-	RT6_NUD_FAIL_HARD = 4294967293,
-	RT6_NUD_FAIL_PROBE = 4294967294,
-	RT6_NUD_FAIL_DO_RR = 4294967295,
-	RT6_NUD_SUCCEED = 1,
-};
-
-struct fib6_nh_dm_arg {
-	struct net *net;
-	const struct in6_addr *saddr;
-	int oif;
-	int flags;
-	struct fib6_nh *nh;
-};
-
-struct fib6_nh_frl_arg {
-	u32 flags;
-	int oif;
-	int strict;
-	int *mpri;
-	bool *do_rr;
-	struct fib6_nh *nh;
-};
-
-struct fib6_nh_excptn_arg {
-	struct rt6_info *rt;
-	int plen;
-};
-
-struct fib6_nh_match_arg {
-	const struct net_device *dev;
-	const struct in6_addr *gw;
-	struct fib6_nh *match;
-};
-
-struct fib6_nh_age_excptn_arg {
-	struct fib6_gc_args *gc_args;
-	long unsigned int now;
-};
-
-struct fib6_nh_rd_arg {
-	struct fib6_result *res;
-	struct flowi6 *fl6;
-	const struct in6_addr *gw;
-	struct rt6_info **ret;
-};
-
-struct ip6rd_flowi {
-	struct flowi6 fl6;
-	struct in6_addr gateway;
-};
-
-struct fib6_nh_del_cached_rt_arg {
-	struct fib6_config *cfg;
-	struct fib6_info *f6i;
-};
-
-struct arg_dev_net_ip {
-	struct net_device *dev;
-	struct net *net;
-	struct in6_addr *addr;
-};
-
-struct arg_netdev_event {
-	const struct net_device *dev;
-	union {
-		unsigned char nh_flags;
-		long unsigned int event;
-	};
-};
-
-struct rt6_mtu_change_arg {
-	struct net_device *dev;
-	unsigned int mtu;
-	struct fib6_info *f6i;
-};
-
-struct rt6_nh {
-	struct fib6_info *fib6_info;
-	struct fib6_config r_cfg;
-	struct list_head next;
-};
-
-struct fib6_nh_exception_dump_walker {
-	struct rt6_rtnl_dump_arg *dump;
-	struct fib6_info *rt;
-	unsigned int flags;
-	unsigned int skip;
-	unsigned int count;
-};
-
-enum fib6_walk_state {
-	FWS_L = 0,
-	FWS_R = 1,
-	FWS_C = 2,
-	FWS_U = 3,
-};
-
-struct fib6_walker {
-	struct list_head lh;
-	struct fib6_node *root;
-	struct fib6_node *node;
-	struct fib6_info *leaf;
-	enum fib6_walk_state state;
-	unsigned int skip;
-	unsigned int count;
-	unsigned int skip_in_node;
-	int (*func)(struct fib6_walker *);
-	void *args;
-};
-
-struct fib6_entry_notifier_info {
-	struct fib_notifier_info info;
-	struct fib6_info *rt;
-	unsigned int nsiblings;
-};
-
-struct ipv6_route_iter {
-	struct seq_net_private p;
-	struct fib6_walker w;
-	loff_t skip;
-	struct fib6_table *tbl;
-	int sernum;
-};
-
-struct fib6_cleaner {
-	struct fib6_walker w;
-	struct net *net;
-	int (*func)(struct fib6_info *, void *);
-	int sernum;
-	void *arg;
-	bool skip_notify;
-};
-
-enum {
-	FIB6_NO_SERNUM_CHANGE = 0,
-};
-
-struct fib6_dump_arg {
-	struct net *net;
-	struct notifier_block *nb;
-	struct netlink_ext_ack *extack;
-};
-
-struct fib6_nh_pcpu_arg {
-	struct fib6_info *from;
-	const struct fib6_table *table;
-};
-
-struct lookup_args {
-	int offset;
-	const struct in6_addr *addr;
-};
-
-struct ipv6_mreq {
-	struct in6_addr ipv6mr_multiaddr;
-	int ipv6mr_ifindex;
-};
-
-struct in6_flowlabel_req {
-	struct in6_addr flr_dst;
-	__be32 flr_label;
-	__u8 flr_action;
-	__u8 flr_share;
-	__u16 flr_flags;
-	__u16 flr_expires;
-	__u16 flr_linger;
-	__u32 __flr_pad;
-};
-
-struct ip6_mtuinfo {
-	struct sockaddr_in6 ip6m_addr;
-	__u32 ip6m_mtu;
-};
-
-struct nduseroptmsg {
-	unsigned char nduseropt_family;
-	unsigned char nduseropt_pad1;
-	short unsigned int nduseropt_opts_len;
-	int nduseropt_ifindex;
-	__u8 nduseropt_icmp_type;
-	__u8 nduseropt_icmp_code;
-	short unsigned int nduseropt_pad2;
-	unsigned int nduseropt_pad3;
-};
-
-enum {
-	NDUSEROPT_UNSPEC = 0,
-	NDUSEROPT_SRCADDR = 1,
-	__NDUSEROPT_MAX = 2,
-};
-
-struct nd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	__u8 opt[0];
-};
-
-struct rs_msg {
-	struct icmp6hdr icmph;
-	__u8 opt[0];
-};
-
-struct ra_msg {
-	struct icmp6hdr icmph;
-	__be32 reachable_time;
-	__be32 retrans_timer;
-};
-
-struct icmp6_filter {
-	__u32 data[8];
-};
-
-struct raw6_sock {
-	struct inet_sock inet;
-	__u32 checksum;
-	__u32 offset;
-	struct icmp6_filter filter;
-	__u32 ip6mr_table;
-	struct ipv6_pinfo inet6;
-};
-
-struct raw6_frag_vec {
-	struct msghdr *msg;
-	int hlen;
-	char c[4];
-};
-
-struct icmpv6_msg {
-	struct sk_buff *skb;
-	int offset;
-	uint8_t type;
-};
-
-struct icmp6_err {
-	int err;
-	int fatal;
-};
-
-struct mld_msg {
-	struct icmp6hdr mld_hdr;
-	struct in6_addr mld_mca;
-};
-
-struct mld2_grec {
-	__u8 grec_type;
-	__u8 grec_auxwords;
-	__be16 grec_nsrcs;
-	struct in6_addr grec_mca;
-	struct in6_addr grec_src[0];
-};
-
-struct mld2_report {
-	struct icmp6hdr mld2r_hdr;
-	struct mld2_grec mld2r_grec[0];
-};
-
-struct mld2_query {
-	struct icmp6hdr mld2q_hdr;
-	struct in6_addr mld2q_mca;
-	__u8 mld2q_qrv: 3;
-	__u8 mld2q_suppress: 1;
-	__u8 mld2q_resv2: 4;
-	__u8 mld2q_qqic;
-	__be16 mld2q_nsrcs;
-	struct in6_addr mld2q_srcs[0];
-};
-
-struct igmp6_mc_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-};
-
-struct igmp6_mcf_iter_state {
-	struct seq_net_private p;
-	struct net_device *dev;
-	struct inet6_dev *idev;
-	struct ifmcaddr6 *im;
-};
-
-enum ip6_defrag_users {
-	IP6_DEFRAG_LOCAL_DELIVER = 0,
-	IP6_DEFRAG_CONNTRACK_IN = 1,
-	__IP6_DEFRAG_CONNTRACK_IN = 65536,
-	IP6_DEFRAG_CONNTRACK_OUT = 65537,
-	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
-	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
-	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
-};
-
-struct frag_queue {
-	struct inet_frag_queue q;
-	int iif;
-	__u16 nhoffset;
-	u8 ecn;
-};
-
-struct tcp6_pseudohdr {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	__be32 len;
-	__be32 protocol;
-};
-
-struct rt0_hdr {
-	struct ipv6_rt_hdr rt_hdr;
-	__u32 reserved;
-	struct in6_addr addr[0];
-};
-
-struct tlvtype_proc {
-	int type;
-	bool (*func)(struct sk_buff *, int);
-};
-
-struct ip6fl_iter_state {
-	struct seq_net_private p;
-	struct pid_namespace *pid_ns;
-	int bucket;
-};
-
-struct sr6_tlv {
-	__u8 type;
-	__u8 len;
-	__u8 data[0];
-};
-
-enum {
-	SEG6_ATTR_UNSPEC = 0,
-	SEG6_ATTR_DST = 1,
-	SEG6_ATTR_DSTLEN = 2,
-	SEG6_ATTR_HMACKEYID = 3,
-	SEG6_ATTR_SECRET = 4,
-	SEG6_ATTR_SECRETLEN = 5,
-	SEG6_ATTR_ALGID = 6,
-	SEG6_ATTR_HMACINFO = 7,
-	__SEG6_ATTR_MAX = 8,
-};
-
-enum {
-	SEG6_CMD_UNSPEC = 0,
-	SEG6_CMD_SETHMAC = 1,
-	SEG6_CMD_DUMPHMAC = 2,
-	SEG6_CMD_SET_TUNSRC = 3,
-	SEG6_CMD_GET_TUNSRC = 4,
-	__SEG6_CMD_MAX = 5,
-};
-
-struct xfrm6_protocol {
-	int (*handler)(struct sk_buff *);
-	int (*cb_handler)(struct sk_buff *, int);
-	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
-	struct xfrm6_protocol *next;
-	int priority;
-};
-
-struct br_input_skb_cb {
-	struct net_device *brdev;
-	u16 frag_max_size;
-	u8 proxyarp_replied: 1;
-	u8 src_port_isolated: 1;
-};
-
-struct nf_br_ops {
-	int (*br_dev_xmit_hook)(struct sk_buff *);
-};
-
-struct nf_bridge_frag_data;
-
-typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
-
-struct fib6_rule {
-	struct fib_rule common;
-	struct rt6key src;
-	struct rt6key dst;
-	u8 tclass;
-};
-
-struct calipso_doi;
-
-struct netlbl_calipso_ops {
-	int (*doi_add)(struct calipso_doi *, struct netlbl_audit *);
-	void (*doi_free)(struct calipso_doi *);
-	int (*doi_remove)(u32, struct netlbl_audit *);
-	struct calipso_doi * (*doi_getdef)(u32);
-	void (*doi_putdef)(struct calipso_doi *);
-	int (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);
-	int (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);
-	int (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*sock_delattr)(struct sock *);
-	int (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	void (*req_delattr)(struct request_sock *);
-	int (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);
-	unsigned char * (*skbuff_optptr)(const struct sk_buff *);
-	int (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);
-	int (*skbuff_delattr)(struct sk_buff *);
-	void (*cache_invalidate)();
-	int (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);
-};
-
-struct calipso_doi {
-	u32 doi;
-	u32 type;
-	refcount_t refcount;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct calipso_map_cache_bkt {
-	spinlock_t lock;
-	u32 size;
-	struct list_head list;
-};
-
-struct calipso_map_cache_entry {
-	u32 hash;
-	unsigned char *key;
-	size_t key_len;
-	struct netlbl_lsm_cache *lsm_data;
-	u32 activity;
-	struct list_head list;
-};
-
-enum {
-	SEG6_IPTUNNEL_UNSPEC = 0,
-	SEG6_IPTUNNEL_SRH = 1,
-	__SEG6_IPTUNNEL_MAX = 2,
-};
-
-struct seg6_iptunnel_encap {
-	int mode;
-	struct ipv6_sr_hdr srh[0];
-};
-
-enum {
-	SEG6_IPTUN_MODE_INLINE = 0,
-	SEG6_IPTUN_MODE_ENCAP = 1,
-	SEG6_IPTUN_MODE_L2ENCAP = 2,
-};
-
-struct seg6_lwt {
-	struct dst_cache cache;
-	struct seg6_iptunnel_encap tuninfo[0];
-};
-
-enum {
-	SEG6_LOCAL_UNSPEC = 0,
-	SEG6_LOCAL_ACTION = 1,
-	SEG6_LOCAL_SRH = 2,
-	SEG6_LOCAL_TABLE = 3,
-	SEG6_LOCAL_NH4 = 4,
-	SEG6_LOCAL_NH6 = 5,
-	SEG6_LOCAL_IIF = 6,
-	SEG6_LOCAL_OIF = 7,
-	SEG6_LOCAL_BPF = 8,
-	__SEG6_LOCAL_MAX = 9,
-};
-
-enum {
-	SEG6_LOCAL_BPF_PROG_UNSPEC = 0,
-	SEG6_LOCAL_BPF_PROG = 1,
-	SEG6_LOCAL_BPF_PROG_NAME = 2,
-	__SEG6_LOCAL_BPF_PROG_MAX = 3,
-};
-
-struct seg6_local_lwt;
-
-struct seg6_action_desc {
-	int action;
-	long unsigned int attrs;
-	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
-	int static_headroom;
-};
-
-struct seg6_local_lwt {
-	int action;
-	struct ipv6_sr_hdr *srh;
-	int table;
-	struct in_addr nh4;
-	struct in6_addr nh6;
-	int iif;
-	int oif;
-	struct bpf_lwt_prog bpf;
-	int headroom;
-	struct seg6_action_desc *desc;
-};
-
-struct seg6_action_param {
-	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
-	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
-	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
-};
-
-struct ah_data {
-	int icv_full_len;
-	int icv_trunc_len;
-	struct crypto_ahash *ahash;
-};
-
-struct tmp_ext {
-	struct in6_addr daddr;
-	char hdrs[0];
-};
-
-struct ah_skb_cb {
-	struct xfrm_skb_cb xfrm;
-	void *tmp;
-};
-
-struct ip_esp_hdr {
-	__be32 spi;
-	__be32 seq_no;
-	__u8 enc_data[0];
-};
-
-struct esp_info {
-	struct ip_esp_hdr *esph;
-	__be64 seqno;
-	int tfclen;
-	int tailen;
-	int plen;
-	int clen;
-	int len;
-	int nfrags;
-	__u8 proto;
-	bool inplace;
-};
-
-struct esp_skb_cb {
-	struct xfrm_skb_cb xfrm;
-	void *tmp;
-};
-
-struct ip6t_standard {
-	struct ip6t_entry entry;
-	struct xt_standard_target target;
-};
-
-struct ip6t_error {
-	struct ip6t_entry entry;
-	struct xt_error_target target;
-};
-
-struct ip6t_icmp {
-	__u8 type;
-	__u8 code[2];
-	__u8 invflags;
-};
-
-struct ip6t_getinfo {
-	char name[32];
-	unsigned int valid_hooks;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int num_entries;
-	unsigned int size;
-};
-
-struct ip6t_replace {
-	char name[32];
-	unsigned int valid_hooks;
-	unsigned int num_entries;
-	unsigned int size;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int num_counters;
-	struct xt_counters *counters;
-	struct ip6t_entry entries[0];
-};
-
-struct ip6t_get_entries {
-	char name[32];
-	unsigned int size;
-	struct ip6t_entry entrytable[0];
-};
-
-struct compat_ip6t_entry {
-	struct ip6t_ip6 ipv6;
-	compat_uint_t nfcache;
-	__u16 target_offset;
-	__u16 next_offset;
-	compat_uint_t comefrom;
-	struct compat_xt_counters counters;
-	unsigned char elems[0];
-} __attribute__((packed));
-
-struct compat_ip6t_replace {
-	char name[32];
-	u32 valid_hooks;
-	u32 num_entries;
-	u32 size;
-	u32 hook_entry[5];
-	u32 underflow[5];
-	u32 num_counters;
-	compat_uptr_t counters;
-	struct compat_ip6t_entry entries[0];
-} __attribute__((packed));
-
-struct compat_ip6t_get_entries {
-	char name[32];
-	compat_uint_t size;
-	struct compat_ip6t_entry entrytable[0];
-} __attribute__((packed));
-
-struct ip6t_ipv6header_info {
-	__u8 matchflags;
-	__u8 invflags;
-	__u8 modeflag;
-};
-
-enum ip6t_reject_with {
-	IP6T_ICMP6_NO_ROUTE = 0,
-	IP6T_ICMP6_ADM_PROHIBITED = 1,
-	IP6T_ICMP6_NOT_NEIGHBOUR = 2,
-	IP6T_ICMP6_ADDR_UNREACH = 3,
-	IP6T_ICMP6_PORT_UNREACH = 4,
-	IP6T_ICMP6_ECHOREPLY = 5,
-	IP6T_TCP_RESET = 6,
-	IP6T_ICMP6_POLICY_FAIL = 7,
-	IP6T_ICMP6_REJECT_ROUTE = 8,
-};
-
-struct ip6t_reject_info {
-	__u32 with;
-};
-
-enum {
-	IFLA_IPTUN_UNSPEC = 0,
-	IFLA_IPTUN_LINK = 1,
-	IFLA_IPTUN_LOCAL = 2,
-	IFLA_IPTUN_REMOTE = 3,
-	IFLA_IPTUN_TTL = 4,
-	IFLA_IPTUN_TOS = 5,
-	IFLA_IPTUN_ENCAP_LIMIT = 6,
-	IFLA_IPTUN_FLOWINFO = 7,
-	IFLA_IPTUN_FLAGS = 8,
-	IFLA_IPTUN_PROTO = 9,
-	IFLA_IPTUN_PMTUDISC = 10,
-	IFLA_IPTUN_6RD_PREFIX = 11,
-	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
-	IFLA_IPTUN_6RD_PREFIXLEN = 13,
-	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
-	IFLA_IPTUN_ENCAP_TYPE = 15,
-	IFLA_IPTUN_ENCAP_FLAGS = 16,
-	IFLA_IPTUN_ENCAP_SPORT = 17,
-	IFLA_IPTUN_ENCAP_DPORT = 18,
-	IFLA_IPTUN_COLLECT_METADATA = 19,
-	IFLA_IPTUN_FWMARK = 20,
-	__IFLA_IPTUN_MAX = 21,
-};
-
-struct ip_tunnel_prl {
-	__be32 addr;
-	__u16 flags;
-	__u16 __reserved;
-	__u32 datalen;
-	__u32 __reserved2;
-};
-
-struct sit_net {
-	struct ip_tunnel *tunnels_r_l[16];
-	struct ip_tunnel *tunnels_r[16];
-	struct ip_tunnel *tunnels_l[16];
-	struct ip_tunnel *tunnels_wc[1];
-	struct ip_tunnel **tunnels[4];
-	struct net_device *fb_tunnel_dev;
-};
-
-enum {
-	IP6_FH_F_FRAG = 1,
-	IP6_FH_F_AUTH = 2,
-	IP6_FH_F_SKIP_RH = 4,
-};
-
-typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *);
-
-struct sockaddr_pkt {
-	short unsigned int spkt_family;
-	unsigned char spkt_device[14];
-	__be16 spkt_protocol;
-};
-
-struct sockaddr_ll {
-	short unsigned int sll_family;
-	__be16 sll_protocol;
-	int sll_ifindex;
-	short unsigned int sll_hatype;
-	unsigned char sll_pkttype;
-	unsigned char sll_halen;
-	unsigned char sll_addr[8];
-};
-
-struct tpacket_stats {
-	unsigned int tp_packets;
-	unsigned int tp_drops;
-};
-
-struct tpacket_stats_v3 {
-	unsigned int tp_packets;
-	unsigned int tp_drops;
-	unsigned int tp_freeze_q_cnt;
-};
-
-struct tpacket_rollover_stats {
-	__u64 tp_all;
-	__u64 tp_huge;
-	__u64 tp_failed;
-};
-
-union tpacket_stats_u {
-	struct tpacket_stats stats1;
-	struct tpacket_stats_v3 stats3;
-};
-
-struct tpacket_auxdata {
-	__u32 tp_status;
-	__u32 tp_len;
-	__u32 tp_snaplen;
-	__u16 tp_mac;
-	__u16 tp_net;
-	__u16 tp_vlan_tci;
-	__u16 tp_vlan_tpid;
-};
-
-struct tpacket_hdr {
-	long unsigned int tp_status;
-	unsigned int tp_len;
-	unsigned int tp_snaplen;
-	short unsigned int tp_mac;
-	short unsigned int tp_net;
-	unsigned int tp_sec;
-	unsigned int tp_usec;
-};
-
-struct tpacket2_hdr {
-	__u32 tp_status;
-	__u32 tp_len;
-	__u32 tp_snaplen;
-	__u16 tp_mac;
-	__u16 tp_net;
-	__u32 tp_sec;
-	__u32 tp_nsec;
-	__u16 tp_vlan_tci;
-	__u16 tp_vlan_tpid;
-	__u8 tp_padding[4];
-};
-
-struct tpacket_hdr_variant1 {
-	__u32 tp_rxhash;
-	__u32 tp_vlan_tci;
-	__u16 tp_vlan_tpid;
-	__u16 tp_padding;
-};
-
-struct tpacket3_hdr {
-	__u32 tp_next_offset;
-	__u32 tp_sec;
-	__u32 tp_nsec;
-	__u32 tp_snaplen;
-	__u32 tp_len;
-	__u32 tp_status;
-	__u16 tp_mac;
-	__u16 tp_net;
-	union {
-		struct tpacket_hdr_variant1 hv1;
-	};
-	__u8 tp_padding[8];
-};
-
-struct tpacket_bd_ts {
-	unsigned int ts_sec;
-	union {
-		unsigned int ts_usec;
-		unsigned int ts_nsec;
-	};
-};
-
-struct tpacket_hdr_v1 {
-	__u32 block_status;
-	__u32 num_pkts;
-	__u32 offset_to_first_pkt;
-	__u32 blk_len;
-	__u64 seq_num;
-	struct tpacket_bd_ts ts_first_pkt;
-	struct tpacket_bd_ts ts_last_pkt;
-};
-
-union tpacket_bd_header_u {
-	struct tpacket_hdr_v1 bh1;
-};
-
-struct tpacket_block_desc {
-	__u32 version;
-	__u32 offset_to_priv;
-	union tpacket_bd_header_u hdr;
-};
-
-enum tpacket_versions {
-	TPACKET_V1 = 0,
-	TPACKET_V2 = 1,
-	TPACKET_V3 = 2,
-};
-
-struct tpacket_req {
-	unsigned int tp_block_size;
-	unsigned int tp_block_nr;
-	unsigned int tp_frame_size;
-	unsigned int tp_frame_nr;
-};
-
-struct tpacket_req3 {
-	unsigned int tp_block_size;
-	unsigned int tp_block_nr;
-	unsigned int tp_frame_size;
-	unsigned int tp_frame_nr;
-	unsigned int tp_retire_blk_tov;
-	unsigned int tp_sizeof_priv;
-	unsigned int tp_feature_req_word;
-};
-
-union tpacket_req_u {
-	struct tpacket_req req;
-	struct tpacket_req3 req3;
-};
-
-typedef __u16 __virtio16;
-
-struct virtio_net_hdr {
-	__u8 flags;
-	__u8 gso_type;
-	__virtio16 hdr_len;
-	__virtio16 gso_size;
-	__virtio16 csum_start;
-	__virtio16 csum_offset;
-};
-
-struct packet_mclist {
-	struct packet_mclist *next;
-	int ifindex;
-	int count;
-	short unsigned int type;
-	short unsigned int alen;
-	unsigned char addr[32];
-};
-
-struct pgv;
-
-struct tpacket_kbdq_core {
-	struct pgv *pkbdq;
-	unsigned int feature_req_word;
-	unsigned int hdrlen;
-	unsigned char reset_pending_on_curr_blk;
-	unsigned char delete_blk_timer;
-	short unsigned int kactive_blk_num;
-	short unsigned int blk_sizeof_priv;
-	short unsigned int last_kactive_blk_num;
-	char *pkblk_start;
-	char *pkblk_end;
-	int kblk_size;
-	unsigned int max_frame_len;
-	unsigned int knum_blocks;
-	uint64_t knxt_seq_num;
-	char *prev;
-	char *nxt_offset;
-	struct sk_buff *skb;
-	atomic_t blk_fill_in_prog;
-	short unsigned int retire_blk_tov;
-	short unsigned int version;
-	long unsigned int tov_in_jiffies;
-	struct timer_list retire_blk_timer;
-};
-
-struct pgv {
-	char *buffer;
-};
-
-struct packet_ring_buffer {
-	struct pgv *pg_vec;
-	unsigned int head;
-	unsigned int frames_per_block;
-	unsigned int frame_size;
-	unsigned int frame_max;
-	unsigned int pg_vec_order;
-	unsigned int pg_vec_pages;
-	unsigned int pg_vec_len;
-	unsigned int *pending_refcnt;
-	struct tpacket_kbdq_core prb_bdqc;
-};
-
-struct packet_fanout {
-	possible_net_t net;
-	unsigned int num_members;
-	u16 id;
-	u8 type;
-	u8 flags;
-	union {
-		atomic_t rr_cur;
-		struct bpf_prog *bpf_prog;
-	};
-	struct list_head list;
-	struct sock *arr[256];
-	spinlock_t lock;
-	refcount_t sk_ref;
-	long: 64;
-	long: 64;
-	struct packet_type prot_hook;
-};
-
-struct packet_rollover {
-	int sock;
-	atomic_long_t num;
-	atomic_long_t num_huge;
-	atomic_long_t num_failed;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 history[16];
-};
-
-struct packet_sock {
-	struct sock sk;
-	struct packet_fanout *fanout;
-	union tpacket_stats_u stats;
-	struct packet_ring_buffer rx_ring;
-	struct packet_ring_buffer tx_ring;
-	int copy_thresh;
-	spinlock_t bind_lock;
-	struct mutex pg_vec_lock;
-	unsigned int running;
-	unsigned int auxdata: 1;
-	unsigned int origdev: 1;
-	unsigned int has_vnet_hdr: 1;
-	unsigned int tp_loss: 1;
-	unsigned int tp_tx_has_off: 1;
-	int pressure;
-	int ifindex;
-	__be16 num;
-	struct packet_rollover *rollover;
-	struct packet_mclist *mclist;
-	atomic_t mapped;
-	enum tpacket_versions tp_version;
-	unsigned int tp_hdrlen;
-	unsigned int tp_reserve;
-	unsigned int tp_tstamp;
-	struct completion skb_completion;
-	struct net_device *cached_dev;
-	int (*xmit)(struct sk_buff *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct packet_type prot_hook;
-	atomic_t tp_drops;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct packet_mreq_max {
-	int mr_ifindex;
-	short unsigned int mr_type;
-	short unsigned int mr_alen;
-	unsigned char mr_address[32];
-};
-
-union tpacket_uhdr {
-	struct tpacket_hdr *h1;
-	struct tpacket2_hdr *h2;
-	struct tpacket3_hdr *h3;
-	void *raw;
-};
-
-struct packet_skb_cb {
-	union {
-		struct sockaddr_pkt pkt;
-		union {
-			unsigned int origlen;
-			struct sockaddr_ll ll;
-		};
-	} sa;
-};
-
-enum rpc_msg_type {
-	RPC_CALL = 0,
-	RPC_REPLY = 1,
-};
-
-enum rpc_reply_stat {
-	RPC_MSG_ACCEPTED = 0,
-	RPC_MSG_DENIED = 1,
-};
-
-enum rpc_reject_stat {
-	RPC_MISMATCH = 0,
-	RPC_AUTH_ERROR = 1,
-};
-
-enum {
-	SUNRPC_PIPEFS_NFS_PRIO = 0,
-	SUNRPC_PIPEFS_RPC_PRIO = 1,
-};
-
-enum {
-	RPC_PIPEFS_MOUNT = 0,
-	RPC_PIPEFS_UMOUNT = 1,
-};
-
-struct rpc_add_xprt_test {
-	void (*add_xprt_test)(struct rpc_clnt *, struct rpc_xprt *, void *);
-	void *data;
-};
-
-struct sunrpc_net {
-	struct proc_dir_entry *proc_net_rpc;
-	struct cache_detail *ip_map_cache;
-	struct cache_detail *unix_gid_cache;
-	struct cache_detail *rsc_cache;
-	struct cache_detail *rsi_cache;
-	struct super_block *pipefs_sb;
-	struct rpc_pipe *gssd_dummy;
-	struct mutex pipefs_sb_lock;
-	struct list_head all_clients;
-	spinlock_t rpc_client_lock;
-	struct rpc_clnt *rpcb_local_clnt;
-	struct rpc_clnt *rpcb_local_clnt4;
-	spinlock_t rpcb_clnt_lock;
-	unsigned int rpcb_users;
-	unsigned int rpcb_is_af_local: 1;
-	struct mutex gssp_lock;
-	struct rpc_clnt *gssp_clnt;
-	int use_gss_proxy;
-	int pipe_version;
-	atomic_t pipe_users;
-	struct proc_dir_entry *use_gssp_proc;
-};
-
-struct rpc_cb_add_xprt_calldata {
-	struct rpc_xprt_switch *xps;
-	struct rpc_xprt *xprt;
-};
-
-struct connect_timeout_data {
-	long unsigned int connect_timeout;
-	long unsigned int reconnect_timeout;
-};
-
-struct xprt_class {
-	struct list_head list;
-	int ident;
-	struct rpc_xprt * (*setup)(struct xprt_create *);
-	struct module *owner;
-	char name[32];
-};
-
-enum xprt_xid_rb_cmp {
-	XID_RB_EQUAL = 0,
-	XID_RB_LEFT = 1,
-	XID_RB_RIGHT = 2,
-};
-
-struct xdr_skb_reader {
-	struct sk_buff *skb;
-	unsigned int offset;
-	size_t count;
-	__wsum csum;
-};
-
-typedef size_t (*xdr_skb_read_actor)(struct xdr_skb_reader *, void *, size_t);
-
-typedef __be32 rpc_fraghdr;
-
-struct svc_sock {
-	struct svc_xprt sk_xprt;
-	struct socket *sk_sock;
-	struct sock *sk_sk;
-	void (*sk_ostate)(struct sock *);
-	void (*sk_odata)(struct sock *);
-	void (*sk_owspace)(struct sock *);
-	__be32 sk_reclen;
-	u32 sk_tcplen;
-	u32 sk_datalen;
-	struct page *sk_pages[259];
-};
-
-struct sock_xprt {
-	struct rpc_xprt xprt;
-	struct socket *sock;
-	struct sock *inet;
-	struct file *file;
-	struct {
-		struct {
-			__be32 fraghdr;
-			__be32 xid;
-			__be32 calldir;
-		};
-		u32 offset;
-		u32 len;
-		long unsigned int copied;
-	} recv;
-	struct {
-		u32 offset;
-	} xmit;
-	long unsigned int sock_state;
-	struct delayed_work connect_worker;
-	struct work_struct error_worker;
-	struct work_struct recv_worker;
-	struct mutex recv_mutex;
-	struct __kernel_sockaddr_storage srcaddr;
-	short unsigned int srcport;
-	int xprt_err;
-	size_t rcvsize;
-	size_t sndsize;
-	struct rpc_timeout tcp_timeout;
-	void (*old_data_ready)(struct sock *);
-	void (*old_state_change)(struct sock *);
-	void (*old_write_space)(struct sock *);
-	void (*old_error_report)(struct sock *);
-};
-
-struct rpc_buffer {
-	size_t len;
-	char data[0];
-};
-
-typedef void (*rpc_action)(struct rpc_task *);
-
-struct trace_event_raw_rpc_task_status {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_request {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	int version;
-	bool async;
-	u32 __data_loc_progname;
-	u32 __data_loc_procname;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_task_running {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	const void *action;
-	long unsigned int runstate;
-	int status;
-	short unsigned int flags;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_task_queued {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	long unsigned int timeout;
-	long unsigned int runstate;
-	int status;
-	short unsigned int flags;
-	u32 __data_loc_q_name;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_failure {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_reply_event {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 __data_loc_progname;
-	u32 version;
-	u32 __data_loc_procname;
-	u32 __data_loc_servername;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_stats_latency {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	int version;
-	u32 __data_loc_progname;
-	u32 __data_loc_procname;
-	long unsigned int backlog;
-	long unsigned int rtt;
-	long unsigned int execute;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_xdr_overflow {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	int version;
-	size_t requested;
-	const void *end;
-	const void *p;
-	const void *head_base;
-	size_t head_len;
-	const void *tail_base;
-	size_t tail_len;
-	unsigned int page_len;
-	unsigned int len;
-	u32 __data_loc_progname;
-	u32 __data_loc_procedure;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_xdr_alignment {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	int version;
-	size_t offset;
-	unsigned int copied;
-	const void *head_base;
-	size_t head_len;
-	const void *tail_base;
-	size_t tail_len;
-	unsigned int page_len;
-	unsigned int len;
-	u32 __data_loc_progname;
-	u32 __data_loc_procedure;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_reply_pages {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	const void *head_base;
-	size_t head_len;
-	const void *tail_base;
-	size_t tail_len;
-	unsigned int page_len;
-	char __data[0];
-};
-
-struct trace_event_raw_xs_socket_event {
-	struct trace_entry ent;
-	unsigned int socket_state;
-	unsigned int sock_state;
-	long long unsigned int ino;
-	u32 __data_loc_dstaddr;
-	u32 __data_loc_dstport;
-	char __data[0];
-};
-
-struct trace_event_raw_xs_socket_event_done {
-	struct trace_entry ent;
-	int error;
-	unsigned int socket_state;
-	unsigned int sock_state;
-	long long unsigned int ino;
-	u32 __data_loc_dstaddr;
-	u32 __data_loc_dstport;
-	char __data[0];
-};
-
-struct trace_event_raw_rpc_xprt_event {
-	struct trace_entry ent;
-	u32 xid;
-	int status;
-	u32 __data_loc_addr;
-	u32 __data_loc_port;
-	char __data[0];
-};
-
-struct trace_event_raw_xprt_transmit {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 seqno;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_xprt_enq_xmit {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 seqno;
-	int stage;
-	char __data[0];
-};
-
-struct trace_event_raw_xprt_ping {
-	struct trace_entry ent;
-	int status;
-	u32 __data_loc_addr;
-	u32 __data_loc_port;
-	char __data[0];
-};
-
-struct trace_event_raw_xprt_writelock_event {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	unsigned int snd_task_id;
-	char __data[0];
-};
-
-struct trace_event_raw_xprt_cong_event {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	unsigned int snd_task_id;
-	long unsigned int cong;
-	long unsigned int cwnd;
-	bool wait;
-	char __data[0];
-};
-
-struct trace_event_raw_xs_stream_read_data {
-	struct trace_entry ent;
-	ssize_t err;
-	size_t total;
-	u32 __data_loc_addr;
-	u32 __data_loc_port;
-	char __data[0];
-};
-
-struct trace_event_raw_xs_stream_read_request {
-	struct trace_entry ent;
-	u32 __data_loc_addr;
-	u32 __data_loc_port;
-	u32 xid;
-	long unsigned int copied;
-	unsigned int reclen;
-	unsigned int offset;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_recv {
-	struct trace_entry ent;
-	u32 xid;
-	int len;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_authenticate {
-	struct trace_entry ent;
-	u32 xid;
-	long unsigned int svc_status;
-	long unsigned int auth_stat;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_process {
-	struct trace_entry ent;
-	u32 xid;
-	u32 vers;
-	u32 proc;
-	u32 __data_loc_service;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_rqst_event {
-	struct trace_entry ent;
-	u32 xid;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_rqst_status {
-	struct trace_entry ent;
-	u32 xid;
-	int status;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_xprt_do_enqueue {
-	struct trace_entry ent;
-	struct svc_xprt *xprt;
-	int pid;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_xprt_event {
-	struct trace_entry ent;
-	struct svc_xprt *xprt;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_xprt_dequeue {
-	struct trace_entry ent;
-	struct svc_xprt *xprt;
-	long unsigned int flags;
-	long unsigned int wakeup;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_wake_up {
-	struct trace_entry ent;
-	int pid;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_handle_xprt {
-	struct trace_entry ent;
-	struct svc_xprt *xprt;
-	int len;
-	long unsigned int flags;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_stats_latency {
-	struct trace_entry ent;
-	u32 xid;
-	long unsigned int execute;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_raw_svc_deferred_event {
-	struct trace_entry ent;
-	u32 xid;
-	u32 __data_loc_addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rpc_task_status {};
-
-struct trace_event_data_offsets_rpc_request {
-	u32 progname;
-	u32 procname;
-};
-
-struct trace_event_data_offsets_rpc_task_running {};
-
-struct trace_event_data_offsets_rpc_task_queued {
-	u32 q_name;
-};
-
-struct trace_event_data_offsets_rpc_failure {};
-
-struct trace_event_data_offsets_rpc_reply_event {
-	u32 progname;
-	u32 procname;
-	u32 servername;
-};
-
-struct trace_event_data_offsets_rpc_stats_latency {
-	u32 progname;
-	u32 procname;
-};
-
-struct trace_event_data_offsets_rpc_xdr_overflow {
-	u32 progname;
-	u32 procedure;
-};
-
-struct trace_event_data_offsets_rpc_xdr_alignment {
-	u32 progname;
-	u32 procedure;
-};
-
-struct trace_event_data_offsets_rpc_reply_pages {};
-
-struct trace_event_data_offsets_xs_socket_event {
-	u32 dstaddr;
-	u32 dstport;
-};
-
-struct trace_event_data_offsets_xs_socket_event_done {
-	u32 dstaddr;
-	u32 dstport;
-};
-
-struct trace_event_data_offsets_rpc_xprt_event {
-	u32 addr;
-	u32 port;
-};
-
-struct trace_event_data_offsets_xprt_transmit {};
-
-struct trace_event_data_offsets_xprt_enq_xmit {};
-
-struct trace_event_data_offsets_xprt_ping {
-	u32 addr;
-	u32 port;
-};
-
-struct trace_event_data_offsets_xprt_writelock_event {};
-
-struct trace_event_data_offsets_xprt_cong_event {};
-
-struct trace_event_data_offsets_xs_stream_read_data {
-	u32 addr;
-	u32 port;
-};
-
-struct trace_event_data_offsets_xs_stream_read_request {
-	u32 addr;
-	u32 port;
-};
-
-struct trace_event_data_offsets_svc_recv {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_authenticate {};
-
-struct trace_event_data_offsets_svc_process {
-	u32 service;
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_rqst_event {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_rqst_status {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_xprt_do_enqueue {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_xprt_event {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_xprt_dequeue {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_wake_up {};
-
-struct trace_event_data_offsets_svc_handle_xprt {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_stats_latency {
-	u32 addr;
-};
-
-struct trace_event_data_offsets_svc_deferred_event {
-	u32 addr;
-};
-
-typedef void (*btf_trace_rpc_call_status)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_bind_status)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_connect_status)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_request)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_task_begin)(void *, const struct rpc_task *, const void *);
-
-typedef void (*btf_trace_rpc_task_run_action)(void *, const struct rpc_task *, const void *);
-
-typedef void (*btf_trace_rpc_task_complete)(void *, const struct rpc_task *, const void *);
-
-typedef void (*btf_trace_rpc_task_end)(void *, const struct rpc_task *, const void *);
-
-typedef void (*btf_trace_rpc_task_sleep)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
-
-typedef void (*btf_trace_rpc_task_wakeup)(void *, const struct rpc_task *, const struct rpc_wait_queue *);
-
-typedef void (*btf_trace_rpc_bad_callhdr)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_bad_verifier)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__prog_unavail)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__prog_mismatch)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__proc_unavail)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__garbage_args)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__unparsable)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__mismatch)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__stale_creds)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__bad_creds)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc__auth_tooweak)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpc_stats_latency)(void *, const struct rpc_task *, ktime_t, ktime_t, ktime_t);
-
-typedef void (*btf_trace_rpc_xdr_overflow)(void *, const struct xdr_stream *, size_t);
-
-typedef void (*btf_trace_rpc_xdr_alignment)(void *, const struct xdr_stream *, size_t, unsigned int);
-
-typedef void (*btf_trace_rpc_reply_pages)(void *, const struct rpc_rqst *);
-
-typedef void (*btf_trace_rpc_socket_state_change)(void *, struct rpc_xprt *, struct socket *);
-
-typedef void (*btf_trace_rpc_socket_connect)(void *, struct rpc_xprt *, struct socket *, int);
-
-typedef void (*btf_trace_rpc_socket_error)(void *, struct rpc_xprt *, struct socket *, int);
-
-typedef void (*btf_trace_rpc_socket_reset_connection)(void *, struct rpc_xprt *, struct socket *, int);
-
-typedef void (*btf_trace_rpc_socket_close)(void *, struct rpc_xprt *, struct socket *);
-
-typedef void (*btf_trace_rpc_socket_shutdown)(void *, struct rpc_xprt *, struct socket *);
-
-typedef void (*btf_trace_xprt_timer)(void *, const struct rpc_xprt *, __be32, int);
-
-typedef void (*btf_trace_xprt_lookup_rqst)(void *, const struct rpc_xprt *, __be32, int);
-
-typedef void (*btf_trace_xprt_complete_rqst)(void *, const struct rpc_xprt *, __be32, int);
-
-typedef void (*btf_trace_xprt_transmit)(void *, const struct rpc_rqst *, int);
-
-typedef void (*btf_trace_xprt_enq_xmit)(void *, const struct rpc_task *, int);
-
-typedef void (*btf_trace_xprt_ping)(void *, const struct rpc_xprt *, int);
-
-typedef void (*btf_trace_xprt_reserve_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xprt_release_xprt)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xprt_reserve_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xprt_release_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xprt_get_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xprt_put_cong)(void *, const struct rpc_xprt *, const struct rpc_task *);
-
-typedef void (*btf_trace_xs_stream_read_data)(void *, struct rpc_xprt *, ssize_t, size_t);
-
-typedef void (*btf_trace_xs_stream_read_request)(void *, struct sock_xprt *);
-
-typedef void (*btf_trace_svc_recv)(void *, struct svc_rqst *, int);
-
-typedef void (*btf_trace_svc_authenticate)(void *, const struct svc_rqst *, int, __be32);
-
-typedef void (*btf_trace_svc_process)(void *, const struct svc_rqst *, const char *);
-
-typedef void (*btf_trace_svc_defer)(void *, const struct svc_rqst *);
-
-typedef void (*btf_trace_svc_drop)(void *, const struct svc_rqst *);
-
-typedef void (*btf_trace_svc_send)(void *, struct svc_rqst *, int);
-
-typedef void (*btf_trace_svc_xprt_do_enqueue)(void *, struct svc_xprt *, struct svc_rqst *);
-
-typedef void (*btf_trace_svc_xprt_no_write_space)(void *, struct svc_xprt *);
-
-typedef void (*btf_trace_svc_xprt_dequeue)(void *, struct svc_rqst *);
-
-typedef void (*btf_trace_svc_wake_up)(void *, int);
-
-typedef void (*btf_trace_svc_handle_xprt)(void *, struct svc_xprt *, int);
-
-typedef void (*btf_trace_svc_stats_latency)(void *, const struct svc_rqst *);
-
-typedef void (*btf_trace_svc_drop_deferred)(void *, const struct svc_deferred_req *);
-
-typedef void (*btf_trace_svc_revisit_deferred)(void *, const struct svc_deferred_req *);
-
-struct rpc_cred_cache {
-	struct hlist_head *hashtable;
-	unsigned int hashbits;
-	spinlock_t lock;
-};
-
-enum {
-	SVC_POOL_AUTO = 4294967295,
-	SVC_POOL_GLOBAL = 0,
-	SVC_POOL_PERCPU = 1,
-	SVC_POOL_PERNODE = 2,
-};
-
-struct unix_domain {
-	struct auth_domain h;
-};
-
-struct ip_map {
-	struct cache_head h;
-	char m_class[8];
-	struct in6_addr m_addr;
-	struct unix_domain *m_client;
-	struct callback_head m_rcu;
-};
-
-struct unix_gid {
-	struct cache_head h;
-	kuid_t uid;
-	struct group_info *gi;
-	struct callback_head rcu;
-};
-
-enum {
-	RPCBPROC_NULL = 0,
-	RPCBPROC_SET = 1,
-	RPCBPROC_UNSET = 2,
-	RPCBPROC_GETPORT = 3,
-	RPCBPROC_GETADDR = 3,
-	RPCBPROC_DUMP = 4,
-	RPCBPROC_CALLIT = 5,
-	RPCBPROC_BCAST = 5,
-	RPCBPROC_GETTIME = 6,
-	RPCBPROC_UADDR2TADDR = 7,
-	RPCBPROC_TADDR2UADDR = 8,
-	RPCBPROC_GETVERSADDR = 9,
-	RPCBPROC_INDIRECT = 10,
-	RPCBPROC_GETADDRLIST = 11,
-	RPCBPROC_GETSTAT = 12,
-};
-
-struct rpcbind_args {
-	struct rpc_xprt *r_xprt;
-	u32 r_prog;
-	u32 r_vers;
-	u32 r_prot;
-	short unsigned int r_port;
-	const char *r_netid;
-	const char *r_addr;
-	const char *r_owner;
-	int r_status;
-};
-
-struct rpcb_info {
-	u32 rpc_vers;
-	const struct rpc_procinfo *rpc_proc;
-};
-
-struct thread_deferred_req {
-	struct cache_deferred_req handle;
-	struct completion completion;
-};
-
-struct cache_queue {
-	struct list_head list;
-	int reader;
-};
-
-struct cache_request {
-	struct cache_queue q;
-	struct cache_head *item;
-	char *buf;
-	int len;
-	int readers;
-};
-
-struct cache_reader {
-	struct cache_queue q;
-	int offset;
-};
-
-struct rpc_filelist {
-	const char *name;
-	const struct file_operations *i_fop;
-	umode_t mode;
-};
-
-enum {
-	RPCAUTH_info = 0,
-	RPCAUTH_EOF = 1,
-};
-
-enum {
-	RPCAUTH_lockd = 0,
-	RPCAUTH_mount = 1,
-	RPCAUTH_nfs = 2,
-	RPCAUTH_portmap = 3,
-	RPCAUTH_statd = 4,
-	RPCAUTH_nfsd4_cb = 5,
-	RPCAUTH_cache = 6,
-	RPCAUTH_nfsd = 7,
-	RPCAUTH_gssd = 8,
-	RPCAUTH_RootEOF = 9,
-};
-
-struct svc_xpt_user {
-	struct list_head list;
-	void (*callback)(struct svc_xpt_user *);
-};
-
-typedef struct rpc_xprt * (*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *, const struct rpc_xprt *);
-
-enum rpc_gss_proc {
-	RPC_GSS_PROC_DATA = 0,
-	RPC_GSS_PROC_INIT = 1,
-	RPC_GSS_PROC_CONTINUE_INIT = 2,
-	RPC_GSS_PROC_DESTROY = 3,
-};
-
-enum rpc_gss_svc {
-	RPC_GSS_SVC_NONE = 1,
-	RPC_GSS_SVC_INTEGRITY = 2,
-	RPC_GSS_SVC_PRIVACY = 3,
-};
-
-struct gss_cl_ctx {
-	refcount_t count;
-	enum rpc_gss_proc gc_proc;
-	u32 gc_seq;
-	u32 gc_seq_xmit;
-	spinlock_t gc_seq_lock;
-	struct gss_ctx *gc_gss_ctx;
-	struct xdr_netobj gc_wire_ctx;
-	struct xdr_netobj gc_acceptor;
-	u32 gc_win;
-	long unsigned int gc_expiry;
-	struct callback_head gc_rcu;
-};
-
-struct gss_upcall_msg;
-
-struct gss_cred {
-	struct rpc_cred gc_base;
-	enum rpc_gss_svc gc_service;
-	struct gss_cl_ctx *gc_ctx;
-	struct gss_upcall_msg *gc_upcall;
-	const char *gc_principal;
-	long unsigned int gc_upcall_timestamp;
-};
-
-struct gss_auth;
-
-struct gss_upcall_msg {
-	refcount_t count;
-	kuid_t uid;
-	const char *service_name;
-	struct rpc_pipe_msg msg;
-	struct list_head list;
-	struct gss_auth *auth;
-	struct rpc_pipe *pipe;
-	struct rpc_wait_queue rpc_waitqueue;
-	wait_queue_head_t waitqueue;
-	struct gss_cl_ctx *ctx;
-	char databuf[256];
-};
-
-typedef unsigned int OM_uint32;
-
-struct gss_pipe {
-	struct rpc_pipe_dir_object pdo;
-	struct rpc_pipe *pipe;
-	struct rpc_clnt *clnt;
-	const char *name;
-	struct kref kref;
-};
-
-struct gss_auth {
-	struct kref kref;
-	struct hlist_node hash;
-	struct rpc_auth rpc_auth;
-	struct gss_api_mech *mech;
-	enum rpc_gss_svc service;
-	struct rpc_clnt *client;
-	struct net *net;
-	struct gss_pipe *gss_pipe[2];
-	const char *target_name;
-};
-
-struct gss_alloc_pdo {
-	struct rpc_clnt *clnt;
-	const char *name;
-	const struct rpc_pipe_ops *upcall_ops;
-};
-
-struct rpc_gss_wire_cred {
-	u32 gc_v;
-	u32 gc_proc;
-	u32 gc_seq;
-	u32 gc_svc;
-	struct xdr_netobj gc_ctx;
-};
-
-struct gssp_in_token {
-	struct page **pages;
-	unsigned int page_base;
-	unsigned int page_len;
-};
-
-struct gssp_upcall_data {
-	struct xdr_netobj in_handle;
-	struct gssp_in_token in_token;
-	struct xdr_netobj out_handle;
-	struct xdr_netobj out_token;
-	struct rpcsec_gss_oid mech_oid;
-	struct svc_cred creds;
-	int found_creds;
-	int major_status;
-	int minor_status;
-};
-
-struct rsi {
-	struct cache_head h;
-	struct xdr_netobj in_handle;
-	struct xdr_netobj in_token;
-	struct xdr_netobj out_handle;
-	struct xdr_netobj out_token;
-	int major_status;
-	int minor_status;
-	struct callback_head callback_head;
-};
-
-struct gss_svc_seq_data {
-	int sd_max;
-	long unsigned int sd_win[2];
-	spinlock_t sd_lock;
-};
-
-struct rsc {
-	struct cache_head h;
-	struct xdr_netobj handle;
-	struct svc_cred cred;
-	struct gss_svc_seq_data seqdata;
-	struct gss_ctx *mechctx;
-	struct callback_head callback_head;
-};
-
-struct gss_domain {
-	struct auth_domain h;
-	u32 pseudoflavor;
-};
-
-struct gss_svc_data {
-	struct rpc_gss_wire_cred clcred;
-	__be32 *verf_start;
-	struct rsc *rsci;
-};
-
-typedef struct xdr_netobj gssx_buffer;
-
-typedef struct xdr_netobj utf8string;
-
-typedef struct xdr_netobj gssx_OID;
-
-struct gssx_option {
-	gssx_buffer option;
-	gssx_buffer value;
-};
-
-struct gssx_option_array {
-	u32 count;
-	struct gssx_option *data;
-};
-
-struct gssx_status {
-	u64 major_status;
-	gssx_OID mech;
-	u64 minor_status;
-	utf8string major_status_string;
-	utf8string minor_status_string;
-	gssx_buffer server_ctx;
-	struct gssx_option_array options;
-};
-
-struct gssx_call_ctx {
-	utf8string locale;
-	gssx_buffer server_ctx;
-	struct gssx_option_array options;
-};
-
-struct gssx_name {
-	gssx_buffer display_name;
-};
-
-typedef struct gssx_name gssx_name;
-
-struct gssx_cred_element {
-	gssx_name MN;
-	gssx_OID mech;
-	u32 cred_usage;
-	u64 initiator_time_rec;
-	u64 acceptor_time_rec;
-	struct gssx_option_array options;
-};
-
-struct gssx_cred_element_array {
-	u32 count;
-	struct gssx_cred_element *data;
-};
-
-struct gssx_cred {
-	gssx_name desired_name;
-	struct gssx_cred_element_array elements;
-	gssx_buffer cred_handle_reference;
-	u32 needs_release;
-};
-
-struct gssx_ctx {
-	gssx_buffer exported_context_token;
-	gssx_buffer state;
-	u32 need_release;
-	gssx_OID mech;
-	gssx_name src_name;
-	gssx_name targ_name;
-	u64 lifetime;
-	u64 ctx_flags;
-	u32 locally_initiated;
-	u32 open;
-	struct gssx_option_array options;
-};
-
-struct gssx_cb {
-	u64 initiator_addrtype;
-	gssx_buffer initiator_address;
-	u64 acceptor_addrtype;
-	gssx_buffer acceptor_address;
-	gssx_buffer application_data;
-};
-
-struct gssx_arg_accept_sec_context {
-	struct gssx_call_ctx call_ctx;
-	struct gssx_ctx *context_handle;
-	struct gssx_cred *cred_handle;
-	struct gssp_in_token input_token;
-	struct gssx_cb *input_cb;
-	u32 ret_deleg_cred;
-	struct gssx_option_array options;
-	struct page **pages;
-	unsigned int npages;
-};
-
-struct gssx_res_accept_sec_context {
-	struct gssx_status status;
-	struct gssx_ctx *context_handle;
-	gssx_buffer *output_token;
-	struct gssx_option_array options;
-};
-
-enum {
-	GSSX_NULL = 0,
-	GSSX_INDICATE_MECHS = 1,
-	GSSX_GET_CALL_CONTEXT = 2,
-	GSSX_IMPORT_AND_CANON_NAME = 3,
-	GSSX_EXPORT_CRED = 4,
-	GSSX_IMPORT_CRED = 5,
-	GSSX_ACQUIRE_CRED = 6,
-	GSSX_STORE_CRED = 7,
-	GSSX_INIT_SEC_CONTEXT = 8,
-	GSSX_ACCEPT_SEC_CONTEXT = 9,
-	GSSX_RELEASE_HANDLE = 10,
-	GSSX_GET_MIC = 11,
-	GSSX_VERIFY = 12,
-	GSSX_WRAP = 13,
-	GSSX_UNWRAP = 14,
-	GSSX_WRAP_SIZE_LIMIT = 15,
-};
-
-struct gssx_name_attr {
-	gssx_buffer attr;
-	gssx_buffer value;
-	struct gssx_option_array extensions;
-};
-
-struct gssx_name_attr_array {
-	u32 count;
-	struct gssx_name_attr *data;
-};
-
-struct trace_event_raw_rpcgss_gssapi_event {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 maj_stat;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_import_ctx {
-	struct trace_entry ent;
-	int status;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_accept_upcall {
-	struct trace_entry ent;
-	u32 xid;
-	u32 minor_status;
-	long unsigned int major_status;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_unwrap_failed {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_bad_seqno {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 expected;
-	u32 received;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_seqno {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 seqno;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_need_reencode {
-	struct trace_entry ent;
-	unsigned int task_id;
-	unsigned int client_id;
-	u32 xid;
-	u32 seq_xmit;
-	u32 seqno;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_upcall_msg {
-	struct trace_entry ent;
-	u32 __data_loc_msg;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_upcall_result {
-	struct trace_entry ent;
-	u32 uid;
-	int result;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_context {
-	struct trace_entry ent;
-	long unsigned int expiry;
-	long unsigned int now;
-	unsigned int timeout;
-	int len;
-	u32 __data_loc_acceptor;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_createauth {
-	struct trace_entry ent;
-	unsigned int flavor;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_rpcgss_oid_to_mech {
-	struct trace_entry ent;
-	u32 __data_loc_oid;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rpcgss_gssapi_event {};
-
-struct trace_event_data_offsets_rpcgss_import_ctx {};
-
-struct trace_event_data_offsets_rpcgss_accept_upcall {};
-
-struct trace_event_data_offsets_rpcgss_unwrap_failed {};
-
-struct trace_event_data_offsets_rpcgss_bad_seqno {};
-
-struct trace_event_data_offsets_rpcgss_seqno {};
-
-struct trace_event_data_offsets_rpcgss_need_reencode {};
-
-struct trace_event_data_offsets_rpcgss_upcall_msg {
-	u32 msg;
-};
-
-struct trace_event_data_offsets_rpcgss_upcall_result {};
-
-struct trace_event_data_offsets_rpcgss_context {
-	u32 acceptor;
-};
-
-struct trace_event_data_offsets_rpcgss_createauth {};
-
-struct trace_event_data_offsets_rpcgss_oid_to_mech {
-	u32 oid;
-};
-
-typedef void (*btf_trace_rpcgss_import_ctx)(void *, int);
-
-typedef void (*btf_trace_rpcgss_get_mic)(void *, const struct rpc_task *, u32);
-
-typedef void (*btf_trace_rpcgss_verify_mic)(void *, const struct rpc_task *, u32);
-
-typedef void (*btf_trace_rpcgss_wrap)(void *, const struct rpc_task *, u32);
-
-typedef void (*btf_trace_rpcgss_unwrap)(void *, const struct rpc_task *, u32);
-
-typedef void (*btf_trace_rpcgss_accept_upcall)(void *, __be32, u32, u32);
-
-typedef void (*btf_trace_rpcgss_unwrap_failed)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpcgss_bad_seqno)(void *, const struct rpc_task *, u32, u32);
-
-typedef void (*btf_trace_rpcgss_seqno)(void *, const struct rpc_task *);
-
-typedef void (*btf_trace_rpcgss_need_reencode)(void *, const struct rpc_task *, u32, bool);
-
-typedef void (*btf_trace_rpcgss_upcall_msg)(void *, const char *);
-
-typedef void (*btf_trace_rpcgss_upcall_result)(void *, u32, int);
-
-typedef void (*btf_trace_rpcgss_context)(void *, long unsigned int, long unsigned int, unsigned int, unsigned int, const u8 *);
-
-typedef void (*btf_trace_rpcgss_createauth)(void *, unsigned int, int);
-
-typedef void (*btf_trace_rpcgss_oid_to_mech)(void *, const char *);
-
-struct strp_msg {
-	int full_len;
-	int offset;
-};
-
-struct _strp_msg {
-	struct strp_msg strp;
-	int accum_len;
-};
-
-enum nl80211_commands {
-	NL80211_CMD_UNSPEC = 0,
-	NL80211_CMD_GET_WIPHY = 1,
-	NL80211_CMD_SET_WIPHY = 2,
-	NL80211_CMD_NEW_WIPHY = 3,
-	NL80211_CMD_DEL_WIPHY = 4,
-	NL80211_CMD_GET_INTERFACE = 5,
-	NL80211_CMD_SET_INTERFACE = 6,
-	NL80211_CMD_NEW_INTERFACE = 7,
-	NL80211_CMD_DEL_INTERFACE = 8,
-	NL80211_CMD_GET_KEY = 9,
-	NL80211_CMD_SET_KEY = 10,
-	NL80211_CMD_NEW_KEY = 11,
-	NL80211_CMD_DEL_KEY = 12,
-	NL80211_CMD_GET_BEACON = 13,
-	NL80211_CMD_SET_BEACON = 14,
-	NL80211_CMD_START_AP = 15,
-	NL80211_CMD_NEW_BEACON = 15,
-	NL80211_CMD_STOP_AP = 16,
-	NL80211_CMD_DEL_BEACON = 16,
-	NL80211_CMD_GET_STATION = 17,
-	NL80211_CMD_SET_STATION = 18,
-	NL80211_CMD_NEW_STATION = 19,
-	NL80211_CMD_DEL_STATION = 20,
-	NL80211_CMD_GET_MPATH = 21,
-	NL80211_CMD_SET_MPATH = 22,
-	NL80211_CMD_NEW_MPATH = 23,
-	NL80211_CMD_DEL_MPATH = 24,
-	NL80211_CMD_SET_BSS = 25,
-	NL80211_CMD_SET_REG = 26,
-	NL80211_CMD_REQ_SET_REG = 27,
-	NL80211_CMD_GET_MESH_CONFIG = 28,
-	NL80211_CMD_SET_MESH_CONFIG = 29,
-	NL80211_CMD_SET_MGMT_EXTRA_IE = 30,
-	NL80211_CMD_GET_REG = 31,
-	NL80211_CMD_GET_SCAN = 32,
-	NL80211_CMD_TRIGGER_SCAN = 33,
-	NL80211_CMD_NEW_SCAN_RESULTS = 34,
-	NL80211_CMD_SCAN_ABORTED = 35,
-	NL80211_CMD_REG_CHANGE = 36,
-	NL80211_CMD_AUTHENTICATE = 37,
-	NL80211_CMD_ASSOCIATE = 38,
-	NL80211_CMD_DEAUTHENTICATE = 39,
-	NL80211_CMD_DISASSOCIATE = 40,
-	NL80211_CMD_MICHAEL_MIC_FAILURE = 41,
-	NL80211_CMD_REG_BEACON_HINT = 42,
-	NL80211_CMD_JOIN_IBSS = 43,
-	NL80211_CMD_LEAVE_IBSS = 44,
-	NL80211_CMD_TESTMODE = 45,
-	NL80211_CMD_CONNECT = 46,
-	NL80211_CMD_ROAM = 47,
-	NL80211_CMD_DISCONNECT = 48,
-	NL80211_CMD_SET_WIPHY_NETNS = 49,
-	NL80211_CMD_GET_SURVEY = 50,
-	NL80211_CMD_NEW_SURVEY_RESULTS = 51,
-	NL80211_CMD_SET_PMKSA = 52,
-	NL80211_CMD_DEL_PMKSA = 53,
-	NL80211_CMD_FLUSH_PMKSA = 54,
-	NL80211_CMD_REMAIN_ON_CHANNEL = 55,
-	NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 56,
-	NL80211_CMD_SET_TX_BITRATE_MASK = 57,
-	NL80211_CMD_REGISTER_FRAME = 58,
-	NL80211_CMD_REGISTER_ACTION = 58,
-	NL80211_CMD_FRAME = 59,
-	NL80211_CMD_ACTION = 59,
-	NL80211_CMD_FRAME_TX_STATUS = 60,
-	NL80211_CMD_ACTION_TX_STATUS = 60,
-	NL80211_CMD_SET_POWER_SAVE = 61,
-	NL80211_CMD_GET_POWER_SAVE = 62,
-	NL80211_CMD_SET_CQM = 63,
-	NL80211_CMD_NOTIFY_CQM = 64,
-	NL80211_CMD_SET_CHANNEL = 65,
-	NL80211_CMD_SET_WDS_PEER = 66,
-	NL80211_CMD_FRAME_WAIT_CANCEL = 67,
-	NL80211_CMD_JOIN_MESH = 68,
-	NL80211_CMD_LEAVE_MESH = 69,
-	NL80211_CMD_UNPROT_DEAUTHENTICATE = 70,
-	NL80211_CMD_UNPROT_DISASSOCIATE = 71,
-	NL80211_CMD_NEW_PEER_CANDIDATE = 72,
-	NL80211_CMD_GET_WOWLAN = 73,
-	NL80211_CMD_SET_WOWLAN = 74,
-	NL80211_CMD_START_SCHED_SCAN = 75,
-	NL80211_CMD_STOP_SCHED_SCAN = 76,
-	NL80211_CMD_SCHED_SCAN_RESULTS = 77,
-	NL80211_CMD_SCHED_SCAN_STOPPED = 78,
-	NL80211_CMD_SET_REKEY_OFFLOAD = 79,
-	NL80211_CMD_PMKSA_CANDIDATE = 80,
-	NL80211_CMD_TDLS_OPER = 81,
-	NL80211_CMD_TDLS_MGMT = 82,
-	NL80211_CMD_UNEXPECTED_FRAME = 83,
-	NL80211_CMD_PROBE_CLIENT = 84,
-	NL80211_CMD_REGISTER_BEACONS = 85,
-	NL80211_CMD_UNEXPECTED_4ADDR_FRAME = 86,
-	NL80211_CMD_SET_NOACK_MAP = 87,
-	NL80211_CMD_CH_SWITCH_NOTIFY = 88,
-	NL80211_CMD_START_P2P_DEVICE = 89,
-	NL80211_CMD_STOP_P2P_DEVICE = 90,
-	NL80211_CMD_CONN_FAILED = 91,
-	NL80211_CMD_SET_MCAST_RATE = 92,
-	NL80211_CMD_SET_MAC_ACL = 93,
-	NL80211_CMD_RADAR_DETECT = 94,
-	NL80211_CMD_GET_PROTOCOL_FEATURES = 95,
-	NL80211_CMD_UPDATE_FT_IES = 96,
-	NL80211_CMD_FT_EVENT = 97,
-	NL80211_CMD_CRIT_PROTOCOL_START = 98,
-	NL80211_CMD_CRIT_PROTOCOL_STOP = 99,
-	NL80211_CMD_GET_COALESCE = 100,
-	NL80211_CMD_SET_COALESCE = 101,
-	NL80211_CMD_CHANNEL_SWITCH = 102,
-	NL80211_CMD_VENDOR = 103,
-	NL80211_CMD_SET_QOS_MAP = 104,
-	NL80211_CMD_ADD_TX_TS = 105,
-	NL80211_CMD_DEL_TX_TS = 106,
-	NL80211_CMD_GET_MPP = 107,
-	NL80211_CMD_JOIN_OCB = 108,
-	NL80211_CMD_LEAVE_OCB = 109,
-	NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 110,
-	NL80211_CMD_TDLS_CHANNEL_SWITCH = 111,
-	NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 112,
-	NL80211_CMD_WIPHY_REG_CHANGE = 113,
-	NL80211_CMD_ABORT_SCAN = 114,
-	NL80211_CMD_START_NAN = 115,
-	NL80211_CMD_STOP_NAN = 116,
-	NL80211_CMD_ADD_NAN_FUNCTION = 117,
-	NL80211_CMD_DEL_NAN_FUNCTION = 118,
-	NL80211_CMD_CHANGE_NAN_CONFIG = 119,
-	NL80211_CMD_NAN_MATCH = 120,
-	NL80211_CMD_SET_MULTICAST_TO_UNICAST = 121,
-	NL80211_CMD_UPDATE_CONNECT_PARAMS = 122,
-	NL80211_CMD_SET_PMK = 123,
-	NL80211_CMD_DEL_PMK = 124,
-	NL80211_CMD_PORT_AUTHORIZED = 125,
-	NL80211_CMD_RELOAD_REGDB = 126,
-	NL80211_CMD_EXTERNAL_AUTH = 127,
-	NL80211_CMD_STA_OPMODE_CHANGED = 128,
-	NL80211_CMD_CONTROL_PORT_FRAME = 129,
-	NL80211_CMD_GET_FTM_RESPONDER_STATS = 130,
-	NL80211_CMD_PEER_MEASUREMENT_START = 131,
-	NL80211_CMD_PEER_MEASUREMENT_RESULT = 132,
-	NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 133,
-	NL80211_CMD_NOTIFY_RADAR = 134,
-	NL80211_CMD_UPDATE_OWE_INFO = 135,
-	NL80211_CMD_PROBE_MESH_LINK = 136,
-	__NL80211_CMD_AFTER_LAST = 137,
-	NL80211_CMD_MAX = 136,
-};
-
-enum nl80211_attrs {
-	NL80211_ATTR_UNSPEC = 0,
-	NL80211_ATTR_WIPHY = 1,
-	NL80211_ATTR_WIPHY_NAME = 2,
-	NL80211_ATTR_IFINDEX = 3,
-	NL80211_ATTR_IFNAME = 4,
-	NL80211_ATTR_IFTYPE = 5,
-	NL80211_ATTR_MAC = 6,
-	NL80211_ATTR_KEY_DATA = 7,
-	NL80211_ATTR_KEY_IDX = 8,
-	NL80211_ATTR_KEY_CIPHER = 9,
-	NL80211_ATTR_KEY_SEQ = 10,
-	NL80211_ATTR_KEY_DEFAULT = 11,
-	NL80211_ATTR_BEACON_INTERVAL = 12,
-	NL80211_ATTR_DTIM_PERIOD = 13,
-	NL80211_ATTR_BEACON_HEAD = 14,
-	NL80211_ATTR_BEACON_TAIL = 15,
-	NL80211_ATTR_STA_AID = 16,
-	NL80211_ATTR_STA_FLAGS = 17,
-	NL80211_ATTR_STA_LISTEN_INTERVAL = 18,
-	NL80211_ATTR_STA_SUPPORTED_RATES = 19,
-	NL80211_ATTR_STA_VLAN = 20,
-	NL80211_ATTR_STA_INFO = 21,
-	NL80211_ATTR_WIPHY_BANDS = 22,
-	NL80211_ATTR_MNTR_FLAGS = 23,
-	NL80211_ATTR_MESH_ID = 24,
-	NL80211_ATTR_STA_PLINK_ACTION = 25,
-	NL80211_ATTR_MPATH_NEXT_HOP = 26,
-	NL80211_ATTR_MPATH_INFO = 27,
-	NL80211_ATTR_BSS_CTS_PROT = 28,
-	NL80211_ATTR_BSS_SHORT_PREAMBLE = 29,
-	NL80211_ATTR_BSS_SHORT_SLOT_TIME = 30,
-	NL80211_ATTR_HT_CAPABILITY = 31,
-	NL80211_ATTR_SUPPORTED_IFTYPES = 32,
-	NL80211_ATTR_REG_ALPHA2 = 33,
-	NL80211_ATTR_REG_RULES = 34,
-	NL80211_ATTR_MESH_CONFIG = 35,
-	NL80211_ATTR_BSS_BASIC_RATES = 36,
-	NL80211_ATTR_WIPHY_TXQ_PARAMS = 37,
-	NL80211_ATTR_WIPHY_FREQ = 38,
-	NL80211_ATTR_WIPHY_CHANNEL_TYPE = 39,
-	NL80211_ATTR_KEY_DEFAULT_MGMT = 40,
-	NL80211_ATTR_MGMT_SUBTYPE = 41,
-	NL80211_ATTR_IE = 42,
-	NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 43,
-	NL80211_ATTR_SCAN_FREQUENCIES = 44,
-	NL80211_ATTR_SCAN_SSIDS = 45,
-	NL80211_ATTR_GENERATION = 46,
-	NL80211_ATTR_BSS = 47,
-	NL80211_ATTR_REG_INITIATOR = 48,
-	NL80211_ATTR_REG_TYPE = 49,
-	NL80211_ATTR_SUPPORTED_COMMANDS = 50,
-	NL80211_ATTR_FRAME = 51,
-	NL80211_ATTR_SSID = 52,
-	NL80211_ATTR_AUTH_TYPE = 53,
-	NL80211_ATTR_REASON_CODE = 54,
-	NL80211_ATTR_KEY_TYPE = 55,
-	NL80211_ATTR_MAX_SCAN_IE_LEN = 56,
-	NL80211_ATTR_CIPHER_SUITES = 57,
-	NL80211_ATTR_FREQ_BEFORE = 58,
-	NL80211_ATTR_FREQ_AFTER = 59,
-	NL80211_ATTR_FREQ_FIXED = 60,
-	NL80211_ATTR_WIPHY_RETRY_SHORT = 61,
-	NL80211_ATTR_WIPHY_RETRY_LONG = 62,
-	NL80211_ATTR_WIPHY_FRAG_THRESHOLD = 63,
-	NL80211_ATTR_WIPHY_RTS_THRESHOLD = 64,
-	NL80211_ATTR_TIMED_OUT = 65,
-	NL80211_ATTR_USE_MFP = 66,
-	NL80211_ATTR_STA_FLAGS2 = 67,
-	NL80211_ATTR_CONTROL_PORT = 68,
-	NL80211_ATTR_TESTDATA = 69,
-	NL80211_ATTR_PRIVACY = 70,
-	NL80211_ATTR_DISCONNECTED_BY_AP = 71,
-	NL80211_ATTR_STATUS_CODE = 72,
-	NL80211_ATTR_CIPHER_SUITES_PAIRWISE = 73,
-	NL80211_ATTR_CIPHER_SUITE_GROUP = 74,
-	NL80211_ATTR_WPA_VERSIONS = 75,
-	NL80211_ATTR_AKM_SUITES = 76,
-	NL80211_ATTR_REQ_IE = 77,
-	NL80211_ATTR_RESP_IE = 78,
-	NL80211_ATTR_PREV_BSSID = 79,
-	NL80211_ATTR_KEY = 80,
-	NL80211_ATTR_KEYS = 81,
-	NL80211_ATTR_PID = 82,
-	NL80211_ATTR_4ADDR = 83,
-	NL80211_ATTR_SURVEY_INFO = 84,
-	NL80211_ATTR_PMKID = 85,
-	NL80211_ATTR_MAX_NUM_PMKIDS = 86,
-	NL80211_ATTR_DURATION = 87,
-	NL80211_ATTR_COOKIE = 88,
-	NL80211_ATTR_WIPHY_COVERAGE_CLASS = 89,
-	NL80211_ATTR_TX_RATES = 90,
-	NL80211_ATTR_FRAME_MATCH = 91,
-	NL80211_ATTR_ACK = 92,
-	NL80211_ATTR_PS_STATE = 93,
-	NL80211_ATTR_CQM = 94,
-	NL80211_ATTR_LOCAL_STATE_CHANGE = 95,
-	NL80211_ATTR_AP_ISOLATE = 96,
-	NL80211_ATTR_WIPHY_TX_POWER_SETTING = 97,
-	NL80211_ATTR_WIPHY_TX_POWER_LEVEL = 98,
-	NL80211_ATTR_TX_FRAME_TYPES = 99,
-	NL80211_ATTR_RX_FRAME_TYPES = 100,
-	NL80211_ATTR_FRAME_TYPE = 101,
-	NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 102,
-	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT = 103,
-	NL80211_ATTR_SUPPORT_IBSS_RSN = 104,
-	NL80211_ATTR_WIPHY_ANTENNA_TX = 105,
-	NL80211_ATTR_WIPHY_ANTENNA_RX = 106,
-	NL80211_ATTR_MCAST_RATE = 107,
-	NL80211_ATTR_OFFCHANNEL_TX_OK = 108,
-	NL80211_ATTR_BSS_HT_OPMODE = 109,
-	NL80211_ATTR_KEY_DEFAULT_TYPES = 110,
-	NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION = 111,
-	NL80211_ATTR_MESH_SETUP = 112,
-	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX = 113,
-	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX = 114,
-	NL80211_ATTR_SUPPORT_MESH_AUTH = 115,
-	NL80211_ATTR_STA_PLINK_STATE = 116,
-	NL80211_ATTR_WOWLAN_TRIGGERS = 117,
-	NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 118,
-	NL80211_ATTR_SCHED_SCAN_INTERVAL = 119,
-	NL80211_ATTR_INTERFACE_COMBINATIONS = 120,
-	NL80211_ATTR_SOFTWARE_IFTYPES = 121,
-	NL80211_ATTR_REKEY_DATA = 122,
-	NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS = 123,
-	NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 124,
-	NL80211_ATTR_SCAN_SUPP_RATES = 125,
-	NL80211_ATTR_HIDDEN_SSID = 126,
-	NL80211_ATTR_IE_PROBE_RESP = 127,
-	NL80211_ATTR_IE_ASSOC_RESP = 128,
-	NL80211_ATTR_STA_WME = 129,
-	NL80211_ATTR_SUPPORT_AP_UAPSD = 130,
-	NL80211_ATTR_ROAM_SUPPORT = 131,
-	NL80211_ATTR_SCHED_SCAN_MATCH = 132,
-	NL80211_ATTR_MAX_MATCH_SETS = 133,
-	NL80211_ATTR_PMKSA_CANDIDATE = 134,
-	NL80211_ATTR_TX_NO_CCK_RATE = 135,
-	NL80211_ATTR_TDLS_ACTION = 136,
-	NL80211_ATTR_TDLS_DIALOG_TOKEN = 137,
-	NL80211_ATTR_TDLS_OPERATION = 138,
-	NL80211_ATTR_TDLS_SUPPORT = 139,
-	NL80211_ATTR_TDLS_EXTERNAL_SETUP = 140,
-	NL80211_ATTR_DEVICE_AP_SME = 141,
-	NL80211_ATTR_DONT_WAIT_FOR_ACK = 142,
-	NL80211_ATTR_FEATURE_FLAGS = 143,
-	NL80211_ATTR_PROBE_RESP_OFFLOAD = 144,
-	NL80211_ATTR_PROBE_RESP = 145,
-	NL80211_ATTR_DFS_REGION = 146,
-	NL80211_ATTR_DISABLE_HT = 147,
-	NL80211_ATTR_HT_CAPABILITY_MASK = 148,
-	NL80211_ATTR_NOACK_MAP = 149,
-	NL80211_ATTR_INACTIVITY_TIMEOUT = 150,
-	NL80211_ATTR_RX_SIGNAL_DBM = 151,
-	NL80211_ATTR_BG_SCAN_PERIOD = 152,
-	NL80211_ATTR_WDEV = 153,
-	NL80211_ATTR_USER_REG_HINT_TYPE = 154,
-	NL80211_ATTR_CONN_FAILED_REASON = 155,
-	NL80211_ATTR_AUTH_DATA = 156,
-	NL80211_ATTR_VHT_CAPABILITY = 157,
-	NL80211_ATTR_SCAN_FLAGS = 158,
-	NL80211_ATTR_CHANNEL_WIDTH = 159,
-	NL80211_ATTR_CENTER_FREQ1 = 160,
-	NL80211_ATTR_CENTER_FREQ2 = 161,
-	NL80211_ATTR_P2P_CTWINDOW = 162,
-	NL80211_ATTR_P2P_OPPPS = 163,
-	NL80211_ATTR_LOCAL_MESH_POWER_MODE = 164,
-	NL80211_ATTR_ACL_POLICY = 165,
-	NL80211_ATTR_MAC_ADDRS = 166,
-	NL80211_ATTR_MAC_ACL_MAX = 167,
-	NL80211_ATTR_RADAR_EVENT = 168,
-	NL80211_ATTR_EXT_CAPA = 169,
-	NL80211_ATTR_EXT_CAPA_MASK = 170,
-	NL80211_ATTR_STA_CAPABILITY = 171,
-	NL80211_ATTR_STA_EXT_CAPABILITY = 172,
-	NL80211_ATTR_PROTOCOL_FEATURES = 173,
-	NL80211_ATTR_SPLIT_WIPHY_DUMP = 174,
-	NL80211_ATTR_DISABLE_VHT = 175,
-	NL80211_ATTR_VHT_CAPABILITY_MASK = 176,
-	NL80211_ATTR_MDID = 177,
-	NL80211_ATTR_IE_RIC = 178,
-	NL80211_ATTR_CRIT_PROT_ID = 179,
-	NL80211_ATTR_MAX_CRIT_PROT_DURATION = 180,
-	NL80211_ATTR_PEER_AID = 181,
-	NL80211_ATTR_COALESCE_RULE = 182,
-	NL80211_ATTR_CH_SWITCH_COUNT = 183,
-	NL80211_ATTR_CH_SWITCH_BLOCK_TX = 184,
-	NL80211_ATTR_CSA_IES = 185,
-	NL80211_ATTR_CSA_C_OFF_BEACON = 186,
-	NL80211_ATTR_CSA_C_OFF_PRESP = 187,
-	NL80211_ATTR_RXMGMT_FLAGS = 188,
-	NL80211_ATTR_STA_SUPPORTED_CHANNELS = 189,
-	NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES = 190,
-	NL80211_ATTR_HANDLE_DFS = 191,
-	NL80211_ATTR_SUPPORT_5_MHZ = 192,
-	NL80211_ATTR_SUPPORT_10_MHZ = 193,
-	NL80211_ATTR_OPMODE_NOTIF = 194,
-	NL80211_ATTR_VENDOR_ID = 195,
-	NL80211_ATTR_VENDOR_SUBCMD = 196,
-	NL80211_ATTR_VENDOR_DATA = 197,
-	NL80211_ATTR_VENDOR_EVENTS = 198,
-	NL80211_ATTR_QOS_MAP = 199,
-	NL80211_ATTR_MAC_HINT = 200,
-	NL80211_ATTR_WIPHY_FREQ_HINT = 201,
-	NL80211_ATTR_MAX_AP_ASSOC_STA = 202,
-	NL80211_ATTR_TDLS_PEER_CAPABILITY = 203,
-	NL80211_ATTR_SOCKET_OWNER = 204,
-	NL80211_ATTR_CSA_C_OFFSETS_TX = 205,
-	NL80211_ATTR_MAX_CSA_COUNTERS = 206,
-	NL80211_ATTR_TDLS_INITIATOR = 207,
-	NL80211_ATTR_USE_RRM = 208,
-	NL80211_ATTR_WIPHY_DYN_ACK = 209,
-	NL80211_ATTR_TSID = 210,
-	NL80211_ATTR_USER_PRIO = 211,
-	NL80211_ATTR_ADMITTED_TIME = 212,
-	NL80211_ATTR_SMPS_MODE = 213,
-	NL80211_ATTR_OPER_CLASS = 214,
-	NL80211_ATTR_MAC_MASK = 215,
-	NL80211_ATTR_WIPHY_SELF_MANAGED_REG = 216,
-	NL80211_ATTR_EXT_FEATURES = 217,
-	NL80211_ATTR_SURVEY_RADIO_STATS = 218,
-	NL80211_ATTR_NETNS_FD = 219,
-	NL80211_ATTR_SCHED_SCAN_DELAY = 220,
-	NL80211_ATTR_REG_INDOOR = 221,
-	NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 222,
-	NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 223,
-	NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 224,
-	NL80211_ATTR_SCHED_SCAN_PLANS = 225,
-	NL80211_ATTR_PBSS = 226,
-	NL80211_ATTR_BSS_SELECT = 227,
-	NL80211_ATTR_STA_SUPPORT_P2P_PS = 228,
-	NL80211_ATTR_PAD = 229,
-	NL80211_ATTR_IFTYPE_EXT_CAPA = 230,
-	NL80211_ATTR_MU_MIMO_GROUP_DATA = 231,
-	NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR = 232,
-	NL80211_ATTR_SCAN_START_TIME_TSF = 233,
-	NL80211_ATTR_SCAN_START_TIME_TSF_BSSID = 234,
-	NL80211_ATTR_MEASUREMENT_DURATION = 235,
-	NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY = 236,
-	NL80211_ATTR_MESH_PEER_AID = 237,
-	NL80211_ATTR_NAN_MASTER_PREF = 238,
-	NL80211_ATTR_BANDS = 239,
-	NL80211_ATTR_NAN_FUNC = 240,
-	NL80211_ATTR_NAN_MATCH = 241,
-	NL80211_ATTR_FILS_KEK = 242,
-	NL80211_ATTR_FILS_NONCES = 243,
-	NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED = 244,
-	NL80211_ATTR_BSSID = 245,
-	NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI = 246,
-	NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST = 247,
-	NL80211_ATTR_TIMEOUT_REASON = 248,
-	NL80211_ATTR_FILS_ERP_USERNAME = 249,
-	NL80211_ATTR_FILS_ERP_REALM = 250,
-	NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM = 251,
-	NL80211_ATTR_FILS_ERP_RRK = 252,
-	NL80211_ATTR_FILS_CACHE_ID = 253,
-	NL80211_ATTR_PMK = 254,
-	NL80211_ATTR_SCHED_SCAN_MULTI = 255,
-	NL80211_ATTR_SCHED_SCAN_MAX_REQS = 256,
-	NL80211_ATTR_WANT_1X_4WAY_HS = 257,
-	NL80211_ATTR_PMKR0_NAME = 258,
-	NL80211_ATTR_PORT_AUTHORIZED = 259,
-	NL80211_ATTR_EXTERNAL_AUTH_ACTION = 260,
-	NL80211_ATTR_EXTERNAL_AUTH_SUPPORT = 261,
-	NL80211_ATTR_NSS = 262,
-	NL80211_ATTR_ACK_SIGNAL = 263,
-	NL80211_ATTR_CONTROL_PORT_OVER_NL80211 = 264,
-	NL80211_ATTR_TXQ_STATS = 265,
-	NL80211_ATTR_TXQ_LIMIT = 266,
-	NL80211_ATTR_TXQ_MEMORY_LIMIT = 267,
-	NL80211_ATTR_TXQ_QUANTUM = 268,
-	NL80211_ATTR_HE_CAPABILITY = 269,
-	NL80211_ATTR_FTM_RESPONDER = 270,
-	NL80211_ATTR_FTM_RESPONDER_STATS = 271,
-	NL80211_ATTR_TIMEOUT = 272,
-	NL80211_ATTR_PEER_MEASUREMENTS = 273,
-	NL80211_ATTR_AIRTIME_WEIGHT = 274,
-	NL80211_ATTR_STA_TX_POWER_SETTING = 275,
-	NL80211_ATTR_STA_TX_POWER = 276,
-	NL80211_ATTR_SAE_PASSWORD = 277,
-	NL80211_ATTR_TWT_RESPONDER = 278,
-	NL80211_ATTR_HE_OBSS_PD = 279,
-	NL80211_ATTR_WIPHY_EDMG_CHANNELS = 280,
-	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG = 281,
-	NL80211_ATTR_VLAN_ID = 282,
-	__NL80211_ATTR_AFTER_LAST = 283,
-	NUM_NL80211_ATTR = 283,
-	NL80211_ATTR_MAX = 282,
-};
-
-enum nl80211_iftype {
-	NL80211_IFTYPE_UNSPECIFIED = 0,
-	NL80211_IFTYPE_ADHOC = 1,
-	NL80211_IFTYPE_STATION = 2,
-	NL80211_IFTYPE_AP = 3,
-	NL80211_IFTYPE_AP_VLAN = 4,
-	NL80211_IFTYPE_WDS = 5,
-	NL80211_IFTYPE_MONITOR = 6,
-	NL80211_IFTYPE_MESH_POINT = 7,
-	NL80211_IFTYPE_P2P_CLIENT = 8,
-	NL80211_IFTYPE_P2P_GO = 9,
-	NL80211_IFTYPE_P2P_DEVICE = 10,
-	NL80211_IFTYPE_OCB = 11,
-	NL80211_IFTYPE_NAN = 12,
-	NUM_NL80211_IFTYPES = 13,
-	NL80211_IFTYPE_MAX = 12,
-};
-
-struct nl80211_sta_flag_update {
-	__u32 mask;
-	__u32 set;
-};
-
-enum nl80211_reg_initiator {
-	NL80211_REGDOM_SET_BY_CORE = 0,
-	NL80211_REGDOM_SET_BY_USER = 1,
-	NL80211_REGDOM_SET_BY_DRIVER = 2,
-	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
-};
-
-enum nl80211_dfs_regions {
-	NL80211_DFS_UNSET = 0,
-	NL80211_DFS_FCC = 1,
-	NL80211_DFS_ETSI = 2,
-	NL80211_DFS_JP = 3,
-};
-
-enum nl80211_user_reg_hint_type {
-	NL80211_USER_REG_HINT_USER = 0,
-	NL80211_USER_REG_HINT_CELL_BASE = 1,
-	NL80211_USER_REG_HINT_INDOOR = 2,
-};
-
-enum nl80211_mntr_flags {
-	__NL80211_MNTR_FLAG_INVALID = 0,
-	NL80211_MNTR_FLAG_FCSFAIL = 1,
-	NL80211_MNTR_FLAG_PLCPFAIL = 2,
-	NL80211_MNTR_FLAG_CONTROL = 3,
-	NL80211_MNTR_FLAG_OTHER_BSS = 4,
-	NL80211_MNTR_FLAG_COOK_FRAMES = 5,
-	NL80211_MNTR_FLAG_ACTIVE = 6,
-	__NL80211_MNTR_FLAG_AFTER_LAST = 7,
-	NL80211_MNTR_FLAG_MAX = 6,
-};
-
-enum nl80211_mesh_power_mode {
-	NL80211_MESH_POWER_UNKNOWN = 0,
-	NL80211_MESH_POWER_ACTIVE = 1,
-	NL80211_MESH_POWER_LIGHT_SLEEP = 2,
-	NL80211_MESH_POWER_DEEP_SLEEP = 3,
-	__NL80211_MESH_POWER_AFTER_LAST = 4,
-	NL80211_MESH_POWER_MAX = 3,
-};
-
-enum nl80211_ac {
-	NL80211_AC_VO = 0,
-	NL80211_AC_VI = 1,
-	NL80211_AC_BE = 2,
-	NL80211_AC_BK = 3,
-	NL80211_NUM_ACS = 4,
-};
-
-enum nl80211_key_mode {
-	NL80211_KEY_RX_TX = 0,
-	NL80211_KEY_NO_TX = 1,
-	NL80211_KEY_SET_TX = 2,
-};
-
-enum nl80211_chan_width {
-	NL80211_CHAN_WIDTH_20_NOHT = 0,
-	NL80211_CHAN_WIDTH_20 = 1,
-	NL80211_CHAN_WIDTH_40 = 2,
-	NL80211_CHAN_WIDTH_80 = 3,
-	NL80211_CHAN_WIDTH_80P80 = 4,
-	NL80211_CHAN_WIDTH_160 = 5,
-	NL80211_CHAN_WIDTH_5 = 6,
-	NL80211_CHAN_WIDTH_10 = 7,
-};
-
-enum nl80211_bss_scan_width {
-	NL80211_BSS_CHAN_WIDTH_20 = 0,
-	NL80211_BSS_CHAN_WIDTH_10 = 1,
-	NL80211_BSS_CHAN_WIDTH_5 = 2,
-};
-
-enum nl80211_auth_type {
-	NL80211_AUTHTYPE_OPEN_SYSTEM = 0,
-	NL80211_AUTHTYPE_SHARED_KEY = 1,
-	NL80211_AUTHTYPE_FT = 2,
-	NL80211_AUTHTYPE_NETWORK_EAP = 3,
-	NL80211_AUTHTYPE_SAE = 4,
-	NL80211_AUTHTYPE_FILS_SK = 5,
-	NL80211_AUTHTYPE_FILS_SK_PFS = 6,
-	NL80211_AUTHTYPE_FILS_PK = 7,
-	__NL80211_AUTHTYPE_NUM = 8,
-	NL80211_AUTHTYPE_MAX = 7,
-	NL80211_AUTHTYPE_AUTOMATIC = 8,
-};
-
-enum nl80211_mfp {
-	NL80211_MFP_NO = 0,
-	NL80211_MFP_REQUIRED = 1,
-	NL80211_MFP_OPTIONAL = 2,
-};
-
-enum nl80211_txrate_gi {
-	NL80211_TXRATE_DEFAULT_GI = 0,
-	NL80211_TXRATE_FORCE_SGI = 1,
-	NL80211_TXRATE_FORCE_LGI = 2,
-};
-
-enum nl80211_band {
-	NL80211_BAND_2GHZ = 0,
-	NL80211_BAND_5GHZ = 1,
-	NL80211_BAND_60GHZ = 2,
-	NL80211_BAND_6GHZ = 3,
-	NUM_NL80211_BANDS = 4,
-};
-
-enum nl80211_tx_power_setting {
-	NL80211_TX_POWER_AUTOMATIC = 0,
-	NL80211_TX_POWER_LIMITED = 1,
-	NL80211_TX_POWER_FIXED = 2,
-};
-
-struct nl80211_wowlan_tcp_data_seq {
-	__u32 start;
-	__u32 offset;
-	__u32 len;
-};
-
-struct nl80211_wowlan_tcp_data_token {
-	__u32 offset;
-	__u32 len;
-	__u8 token_stream[0];
-};
-
-struct nl80211_wowlan_tcp_data_token_feature {
-	__u32 min_len;
-	__u32 max_len;
-	__u32 bufsize;
-};
-
-enum nl80211_coalesce_condition {
-	NL80211_COALESCE_CONDITION_MATCH = 0,
-	NL80211_COALESCE_CONDITION_NO_MATCH = 1,
-};
-
-enum nl80211_hidden_ssid {
-	NL80211_HIDDEN_SSID_NOT_IN_USE = 0,
-	NL80211_HIDDEN_SSID_ZERO_LEN = 1,
-	NL80211_HIDDEN_SSID_ZERO_CONTENTS = 2,
-};
-
-enum nl80211_tdls_operation {
-	NL80211_TDLS_DISCOVERY_REQ = 0,
-	NL80211_TDLS_SETUP = 1,
-	NL80211_TDLS_TEARDOWN = 2,
-	NL80211_TDLS_ENABLE_LINK = 3,
-	NL80211_TDLS_DISABLE_LINK = 4,
-};
-
-enum nl80211_feature_flags {
-	NL80211_FEATURE_SK_TX_STATUS = 1,
-	NL80211_FEATURE_HT_IBSS = 2,
-	NL80211_FEATURE_INACTIVITY_TIMER = 4,
-	NL80211_FEATURE_CELL_BASE_REG_HINTS = 8,
-	NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 16,
-	NL80211_FEATURE_SAE = 32,
-	NL80211_FEATURE_LOW_PRIORITY_SCAN = 64,
-	NL80211_FEATURE_SCAN_FLUSH = 128,
-	NL80211_FEATURE_AP_SCAN = 256,
-	NL80211_FEATURE_VIF_TXPOWER = 512,
-	NL80211_FEATURE_NEED_OBSS_SCAN = 1024,
-	NL80211_FEATURE_P2P_GO_CTWIN = 2048,
-	NL80211_FEATURE_P2P_GO_OPPPS = 4096,
-	NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 16384,
-	NL80211_FEATURE_FULL_AP_CLIENT_STATE = 32768,
-	NL80211_FEATURE_USERSPACE_MPM = 65536,
-	NL80211_FEATURE_ACTIVE_MONITOR = 131072,
-	NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 262144,
-	NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 524288,
-	NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 1048576,
-	NL80211_FEATURE_QUIET = 2097152,
-	NL80211_FEATURE_TX_POWER_INSERTION = 4194304,
-	NL80211_FEATURE_ACKTO_ESTIMATION = 8388608,
-	NL80211_FEATURE_STATIC_SMPS = 16777216,
-	NL80211_FEATURE_DYNAMIC_SMPS = 33554432,
-	NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 67108864,
-	NL80211_FEATURE_MAC_ON_CREATE = 134217728,
-	NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 268435456,
-	NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 536870912,
-	NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 1073741824,
-	NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 2147483648,
-};
-
-enum nl80211_ext_feature_index {
-	NL80211_EXT_FEATURE_VHT_IBSS = 0,
-	NL80211_EXT_FEATURE_RRM = 1,
-	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,
-	NL80211_EXT_FEATURE_SCAN_START_TIME = 3,
-	NL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,
-	NL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,
-	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,
-	NL80211_EXT_FEATURE_BEACON_RATE_HT = 7,
-	NL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,
-	NL80211_EXT_FEATURE_FILS_STA = 9,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,
-	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,
-	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,
-	NL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,
-	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,
-	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,
-	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,
-	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,
-	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,
-	NL80211_EXT_FEATURE_MFP_OPTIONAL = 21,
-	NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,
-	NL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,
-	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,
-	NL80211_EXT_FEATURE_DFS_OFFLOAD = 25,
-	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,
-	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,
-	NL80211_EXT_FEATURE_TXQS = 28,
-	NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,
-	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,
-	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,
-	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,
-	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,
-	NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,
-	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,
-	NL80211_EXT_FEATURE_EXT_KEY_ID = 36,
-	NL80211_EXT_FEATURE_STA_TX_PWR = 37,
-	NL80211_EXT_FEATURE_SAE_OFFLOAD = 38,
-	NL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,
-	NL80211_EXT_FEATURE_AQL = 40,
-	NUM_NL80211_EXT_FEATURES = 41,
-	MAX_NL80211_EXT_FEATURES = 40,
-};
-
-enum nl80211_timeout_reason {
-	NL80211_TIMEOUT_UNSPECIFIED = 0,
-	NL80211_TIMEOUT_SCAN = 1,
-	NL80211_TIMEOUT_AUTH = 2,
-	NL80211_TIMEOUT_ASSOC = 3,
-};
-
-enum nl80211_acl_policy {
-	NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED = 0,
-	NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 1,
-};
-
-enum nl80211_smps_mode {
-	NL80211_SMPS_OFF = 0,
-	NL80211_SMPS_STATIC = 1,
-	NL80211_SMPS_DYNAMIC = 2,
-	__NL80211_SMPS_AFTER_LAST = 3,
-	NL80211_SMPS_MAX = 2,
-};
-
-enum nl80211_radar_event {
-	NL80211_RADAR_DETECTED = 0,
-	NL80211_RADAR_CAC_FINISHED = 1,
-	NL80211_RADAR_CAC_ABORTED = 2,
-	NL80211_RADAR_NOP_FINISHED = 3,
-	NL80211_RADAR_PRE_CAC_EXPIRED = 4,
-	NL80211_RADAR_CAC_STARTED = 5,
-};
-
-enum nl80211_dfs_state {
-	NL80211_DFS_USABLE = 0,
-	NL80211_DFS_UNAVAILABLE = 1,
-	NL80211_DFS_AVAILABLE = 2,
-};
-
-enum nl80211_crit_proto_id {
-	NL80211_CRIT_PROTO_UNSPEC = 0,
-	NL80211_CRIT_PROTO_DHCP = 1,
-	NL80211_CRIT_PROTO_EAPOL = 2,
-	NL80211_CRIT_PROTO_APIPA = 3,
-	NUM_NL80211_CRIT_PROTO = 4,
-};
-
-struct nl80211_vendor_cmd_info {
-	__u32 vendor_id;
-	__u32 subcmd;
-};
-
-enum nl80211_bss_select_attr {
-	__NL80211_BSS_SELECT_ATTR_INVALID = 0,
-	NL80211_BSS_SELECT_ATTR_RSSI = 1,
-	NL80211_BSS_SELECT_ATTR_BAND_PREF = 2,
-	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,
-	__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,
-	NL80211_BSS_SELECT_ATTR_MAX = 3,
-};
-
-enum nl80211_nan_function_type {
-	NL80211_NAN_FUNC_PUBLISH = 0,
-	NL80211_NAN_FUNC_SUBSCRIBE = 1,
-	NL80211_NAN_FUNC_FOLLOW_UP = 2,
-	__NL80211_NAN_FUNC_TYPE_AFTER_LAST = 3,
-	NL80211_NAN_FUNC_MAX_TYPE = 2,
-};
-
-enum nl80211_external_auth_action {
-	NL80211_EXTERNAL_AUTH_START = 0,
-	NL80211_EXTERNAL_AUTH_ABORT = 1,
-};
-
-enum nl80211_preamble {
-	NL80211_PREAMBLE_LEGACY = 0,
-	NL80211_PREAMBLE_HT = 1,
-	NL80211_PREAMBLE_VHT = 2,
-	NL80211_PREAMBLE_DMG = 3,
-};
-
-typedef int (*sk_read_actor_t___2)(read_descriptor_t *, struct sk_buff___2 *, unsigned int, size_t);
-
-enum ieee80211_bss_type {
-	IEEE80211_BSS_TYPE_ESS = 0,
-	IEEE80211_BSS_TYPE_PBSS = 1,
-	IEEE80211_BSS_TYPE_IBSS = 2,
-	IEEE80211_BSS_TYPE_MBSS = 3,
-	IEEE80211_BSS_TYPE_ANY = 4,
-};
-
-enum ieee80211_edmg_bw_config {
-	IEEE80211_EDMG_BW_CONFIG_4 = 4,
-	IEEE80211_EDMG_BW_CONFIG_5 = 5,
-	IEEE80211_EDMG_BW_CONFIG_6 = 6,
-	IEEE80211_EDMG_BW_CONFIG_7 = 7,
-	IEEE80211_EDMG_BW_CONFIG_8 = 8,
-	IEEE80211_EDMG_BW_CONFIG_9 = 9,
-	IEEE80211_EDMG_BW_CONFIG_10 = 10,
-	IEEE80211_EDMG_BW_CONFIG_11 = 11,
-	IEEE80211_EDMG_BW_CONFIG_12 = 12,
-	IEEE80211_EDMG_BW_CONFIG_13 = 13,
-	IEEE80211_EDMG_BW_CONFIG_14 = 14,
-	IEEE80211_EDMG_BW_CONFIG_15 = 15,
-};
-
-struct ieee80211_edmg {
-	u8 channels;
-	enum ieee80211_edmg_bw_config bw_config;
-};
-
-struct ieee80211_channel;
-
-struct cfg80211_chan_def {
-	struct ieee80211_channel *chan;
-	enum nl80211_chan_width width;
-	u32 center_freq1;
-	u32 center_freq2;
-	struct ieee80211_edmg edmg;
-};
-
-struct wiphy;
-
-struct cfg80211_conn;
-
-struct cfg80211_cached_keys;
-
-struct cfg80211_internal_bss;
-
-struct cfg80211_cqm_config;
-
-struct wireless_dev {
-	struct wiphy *wiphy;
-	enum nl80211_iftype iftype;
-	struct list_head list;
-	struct net_device___2 *netdev;
-	u32 identifier;
-	struct list_head mgmt_registrations;
-	spinlock_t mgmt_registrations_lock;
-	struct mutex mtx;
-	bool use_4addr;
-	bool is_running;
-	u8 address[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 mesh_id_len;
-	u8 mesh_id_up_len;
-	struct cfg80211_conn *conn;
-	struct cfg80211_cached_keys *connect_keys;
-	enum ieee80211_bss_type conn_bss_type;
-	u32 conn_owner_nlportid;
-	struct work_struct disconnect_wk;
-	u8 disconnect_bssid[6];
-	struct list_head event_list;
-	spinlock_t event_lock;
-	struct cfg80211_internal_bss *current_bss;
-	struct cfg80211_chan_def preset_chandef;
-	struct cfg80211_chan_def chandef;
-	bool ibss_fixed;
-	bool ibss_dfs_possible;
-	bool ps;
-	int ps_timeout;
-	int beacon_interval;
-	u32 ap_unexpected_nlportid;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	bool cac_started;
-	long unsigned int cac_start_time;
-	unsigned int cac_time_ms;
-	struct cfg80211_cqm_config *cqm_config;
-	struct list_head pmsr_list;
-	spinlock_t pmsr_lock;
-	struct work_struct pmsr_free_wk;
-};
-
-struct ieee80211_mcs_info {
-	u8 rx_mask[10];
-	__le16 rx_highest;
-	u8 tx_params;
-	u8 reserved[3];
-};
-
-struct ieee80211_ht_cap {
-	__le16 cap_info;
-	u8 ampdu_params_info;
-	struct ieee80211_mcs_info mcs;
-	__le16 extended_ht_cap_info;
-	__le32 tx_BF_cap_info;
-	u8 antenna_selection_info;
-} __attribute__((packed));
-
-struct ieee80211_vht_mcs_info {
-	__le16 rx_mcs_map;
-	__le16 rx_highest;
-	__le16 tx_mcs_map;
-	__le16 tx_highest;
-};
-
-struct ieee80211_vht_cap {
-	__le32 vht_cap_info;
-	struct ieee80211_vht_mcs_info supp_mcs;
-};
-
-struct ieee80211_he_cap_elem {
-	u8 mac_cap_info[6];
-	u8 phy_cap_info[11];
-};
-
-struct ieee80211_he_mcs_nss_supp {
-	__le16 rx_mcs_80;
-	__le16 tx_mcs_80;
-	__le16 rx_mcs_160;
-	__le16 tx_mcs_160;
-	__le16 rx_mcs_80p80;
-	__le16 tx_mcs_80p80;
-};
-
-enum ieee80211_reasoncode {
-	WLAN_REASON_UNSPECIFIED = 1,
-	WLAN_REASON_PREV_AUTH_NOT_VALID = 2,
-	WLAN_REASON_DEAUTH_LEAVING = 3,
-	WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4,
-	WLAN_REASON_DISASSOC_AP_BUSY = 5,
-	WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6,
-	WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7,
-	WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8,
-	WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9,
-	WLAN_REASON_DISASSOC_BAD_POWER = 10,
-	WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11,
-	WLAN_REASON_INVALID_IE = 13,
-	WLAN_REASON_MIC_FAILURE = 14,
-	WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15,
-	WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16,
-	WLAN_REASON_IE_DIFFERENT = 17,
-	WLAN_REASON_INVALID_GROUP_CIPHER = 18,
-	WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19,
-	WLAN_REASON_INVALID_AKMP = 20,
-	WLAN_REASON_UNSUPP_RSN_VERSION = 21,
-	WLAN_REASON_INVALID_RSN_IE_CAP = 22,
-	WLAN_REASON_IEEE8021X_FAILED = 23,
-	WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
-	WLAN_REASON_TDLS_TEARDOWN_UNREACHABLE = 25,
-	WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED = 26,
-	WLAN_REASON_DISASSOC_UNSPECIFIED_QOS = 32,
-	WLAN_REASON_DISASSOC_QAP_NO_BANDWIDTH = 33,
-	WLAN_REASON_DISASSOC_LOW_ACK = 34,
-	WLAN_REASON_DISASSOC_QAP_EXCEED_TXOP = 35,
-	WLAN_REASON_QSTA_LEAVE_QBSS = 36,
-	WLAN_REASON_QSTA_NOT_USE = 37,
-	WLAN_REASON_QSTA_REQUIRE_SETUP = 38,
-	WLAN_REASON_QSTA_TIMEOUT = 39,
-	WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45,
-	WLAN_REASON_MESH_PEER_CANCELED = 52,
-	WLAN_REASON_MESH_MAX_PEERS = 53,
-	WLAN_REASON_MESH_CONFIG = 54,
-	WLAN_REASON_MESH_CLOSE = 55,
-	WLAN_REASON_MESH_MAX_RETRIES = 56,
-	WLAN_REASON_MESH_CONFIRM_TIMEOUT = 57,
-	WLAN_REASON_MESH_INVALID_GTK = 58,
-	WLAN_REASON_MESH_INCONSISTENT_PARAM = 59,
-	WLAN_REASON_MESH_INVALID_SECURITY = 60,
-	WLAN_REASON_MESH_PATH_ERROR = 61,
-	WLAN_REASON_MESH_PATH_NOFORWARD = 62,
-	WLAN_REASON_MESH_PATH_DEST_UNREACHABLE = 63,
-	WLAN_REASON_MAC_EXISTS_IN_MBSS = 64,
-	WLAN_REASON_MESH_CHAN_REGULATORY = 65,
-	WLAN_REASON_MESH_CHAN = 66,
-};
-
-enum ieee80211_key_len {
-	WLAN_KEY_LEN_WEP40 = 5,
-	WLAN_KEY_LEN_WEP104 = 13,
-	WLAN_KEY_LEN_CCMP = 16,
-	WLAN_KEY_LEN_CCMP_256 = 32,
-	WLAN_KEY_LEN_TKIP = 32,
-	WLAN_KEY_LEN_AES_CMAC = 16,
-	WLAN_KEY_LEN_SMS4 = 32,
-	WLAN_KEY_LEN_GCMP = 16,
-	WLAN_KEY_LEN_GCMP_256 = 32,
-	WLAN_KEY_LEN_BIP_CMAC_256 = 32,
-	WLAN_KEY_LEN_BIP_GMAC_128 = 16,
-	WLAN_KEY_LEN_BIP_GMAC_256 = 32,
-};
-
-enum environment_cap {
-	ENVIRON_ANY = 0,
-	ENVIRON_INDOOR = 1,
-	ENVIRON_OUTDOOR = 2,
-};
-
-struct regulatory_request {
-	struct callback_head callback_head;
-	int wiphy_idx;
-	enum nl80211_reg_initiator initiator;
-	enum nl80211_user_reg_hint_type user_reg_hint_type;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	bool intersect;
-	bool processed;
-	enum environment_cap country_ie_env;
-	struct list_head list;
-};
-
-enum ieee80211_regulatory_flags {
-	REGULATORY_CUSTOM_REG = 1,
-	REGULATORY_STRICT_REG = 2,
-	REGULATORY_DISABLE_BEACON_HINTS = 4,
-	REGULATORY_COUNTRY_IE_FOLLOW_POWER = 8,
-	REGULATORY_COUNTRY_IE_IGNORE = 16,
-	REGULATORY_ENABLE_RELAX_NO_IR = 32,
-	REGULATORY_IGNORE_STALE_KICKOFF = 64,
-	REGULATORY_WIPHY_SELF_MANAGED = 128,
-};
-
-struct ieee80211_freq_range {
-	u32 start_freq_khz;
-	u32 end_freq_khz;
-	u32 max_bandwidth_khz;
-};
-
-struct ieee80211_power_rule {
-	u32 max_antenna_gain;
-	u32 max_eirp;
-};
-
-struct ieee80211_wmm_ac {
-	u16 cw_min;
-	u16 cw_max;
-	u16 cot;
-	u8 aifsn;
-};
-
-struct ieee80211_wmm_rule {
-	struct ieee80211_wmm_ac client[4];
-	struct ieee80211_wmm_ac ap[4];
-};
-
-struct ieee80211_reg_rule {
-	struct ieee80211_freq_range freq_range;
-	struct ieee80211_power_rule power_rule;
-	struct ieee80211_wmm_rule wmm_rule;
-	u32 flags;
-	u32 dfs_cac_ms;
-	bool has_wmm;
-};
-
-struct ieee80211_regdomain {
-	struct callback_head callback_head;
-	u32 n_reg_rules;
-	char alpha2[3];
-	enum nl80211_dfs_regions dfs_region;
-	struct ieee80211_reg_rule reg_rules[0];
-};
-
-struct ieee80211_channel {
-	enum nl80211_band band;
-	u32 center_freq;
-	u16 hw_value;
-	u32 flags;
-	int max_antenna_gain;
-	int max_power;
-	int max_reg_power;
-	bool beacon_found;
-	u32 orig_flags;
-	int orig_mag;
-	int orig_mpwr;
-	enum nl80211_dfs_state dfs_state;
-	long unsigned int dfs_state_entered;
-	unsigned int dfs_cac_ms;
-};
-
-struct ieee80211_rate {
-	u32 flags;
-	u16 bitrate;
-	u16 hw_value;
-	u16 hw_value_short;
-};
-
-struct ieee80211_he_obss_pd {
-	bool enable;
-	u8 min_offset;
-	u8 max_offset;
-};
-
-struct ieee80211_sta_ht_cap {
-	u16 cap;
-	bool ht_supported;
-	u8 ampdu_factor;
-	u8 ampdu_density;
-	struct ieee80211_mcs_info mcs;
-	char: 8;
-} __attribute__((packed));
-
-struct ieee80211_sta_vht_cap {
-	bool vht_supported;
-	u32 cap;
-	struct ieee80211_vht_mcs_info vht_mcs;
-};
-
-struct ieee80211_sta_he_cap {
-	bool has_he;
-	struct ieee80211_he_cap_elem he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
-	u8 ppe_thres[25];
-} __attribute__((packed));
-
-struct ieee80211_sband_iftype_data {
-	u16 types_mask;
-	struct ieee80211_sta_he_cap he_cap;
-};
-
-struct ieee80211_supported_band {
-	struct ieee80211_channel *channels;
-	struct ieee80211_rate *bitrates;
-	enum nl80211_band band;
-	int n_channels;
-	int n_bitrates;
-	struct ieee80211_sta_ht_cap ht_cap;
-	struct ieee80211_sta_vht_cap vht_cap;
-	struct ieee80211_edmg edmg_cap;
-	u16 n_iftype_data;
-	const struct ieee80211_sband_iftype_data *iftype_data;
-};
-
-struct vif_params {
-	u32 flags;
-	int use_4addr;
-	u8 macaddr[6];
-	const u8 *vht_mumimo_groups;
-	const u8 *vht_mumimo_follow_addr;
-};
-
-struct key_params {
-	const u8 *key;
-	const u8 *seq;
-	int key_len;
-	int seq_len;
-	u16 vlan_id;
-	u32 cipher;
-	enum nl80211_key_mode mode;
-};
-
-struct survey_info {
-	struct ieee80211_channel *channel;
-	u64 time;
-	u64 time_busy;
-	u64 time_ext_busy;
-	u64 time_rx;
-	u64 time_tx;
-	u64 time_scan;
-	u64 time_bss_rx;
-	u32 filled;
-	s8 noise;
-};
-
-struct cfg80211_crypto_settings {
-	u32 wpa_versions;
-	u32 cipher_group;
-	int n_ciphers_pairwise;
-	u32 ciphers_pairwise[5];
-	int n_akm_suites;
-	u32 akm_suites[2];
-	bool control_port;
-	__be16 control_port_ethertype;
-	bool control_port_no_encrypt;
-	bool control_port_over_nl80211;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	const u8 *psk;
-	const u8 *sae_pwd;
-	u8 sae_pwd_len;
-};
-
-struct cfg80211_beacon_data {
-	const u8 *head;
-	const u8 *tail;
-	const u8 *beacon_ies;
-	const u8 *proberesp_ies;
-	const u8 *assocresp_ies;
-	const u8 *probe_resp;
-	const u8 *lci;
-	const u8 *civicloc;
-	s8 ftm_responder;
-	size_t head_len;
-	size_t tail_len;
-	size_t beacon_ies_len;
-	size_t proberesp_ies_len;
-	size_t assocresp_ies_len;
-	size_t probe_resp_len;
-	size_t lci_len;
-	size_t civicloc_len;
-};
-
-struct mac_address {
-	u8 addr[6];
-};
-
-struct cfg80211_acl_data {
-	enum nl80211_acl_policy acl_policy;
-	int n_acl_entries;
-	struct mac_address mac_addrs[0];
-};
-
-struct cfg80211_bitrate_mask {
-	struct {
-		u32 legacy;
-		u8 ht_mcs[10];
-		u16 vht_mcs[8];
-		enum nl80211_txrate_gi gi;
-	} control[4];
-};
-
-struct cfg80211_ap_settings {
-	struct cfg80211_chan_def chandef;
-	struct cfg80211_beacon_data beacon;
-	int beacon_interval;
-	int dtim_period;
-	const u8 *ssid;
-	size_t ssid_len;
-	enum nl80211_hidden_ssid hidden_ssid;
-	struct cfg80211_crypto_settings crypto;
-	bool privacy;
-	enum nl80211_auth_type auth_type;
-	enum nl80211_smps_mode smps_mode;
-	int inactivity_timeout;
-	u8 p2p_ctwindow;
-	bool p2p_opp_ps;
-	const struct cfg80211_acl_data *acl;
-	bool pbss;
-	struct cfg80211_bitrate_mask beacon_rate;
-	const struct ieee80211_ht_cap *ht_cap;
-	const struct ieee80211_vht_cap *vht_cap;
-	const struct ieee80211_he_cap_elem *he_cap;
-	bool ht_required;
-	bool vht_required;
-	bool twt_responder;
-	u32 flags;
-	struct ieee80211_he_obss_pd he_obss_pd;
-};
-
-struct cfg80211_csa_settings {
-	struct cfg80211_chan_def chandef;
-	struct cfg80211_beacon_data beacon_csa;
-	const u16 *counter_offsets_beacon;
-	const u16 *counter_offsets_presp;
-	unsigned int n_counter_offsets_beacon;
-	unsigned int n_counter_offsets_presp;
-	struct cfg80211_beacon_data beacon_after;
-	bool radar_required;
-	bool block_tx;
-	u8 count;
-};
-
-struct sta_txpwr {
-	s16 power;
-	enum nl80211_tx_power_setting type;
-};
-
-struct station_parameters {
-	const u8 *supported_rates;
-	struct net_device___2 *vlan;
-	u32 sta_flags_mask;
-	u32 sta_flags_set;
-	u32 sta_modify_mask;
-	int listen_interval;
-	u16 aid;
-	u16 vlan_id;
-	u16 peer_aid;
-	u8 supported_rates_len;
-	u8 plink_action;
-	u8 plink_state;
-	const struct ieee80211_ht_cap *ht_capa;
-	const struct ieee80211_vht_cap *vht_capa;
-	u8 uapsd_queues;
-	u8 max_sp;
-	enum nl80211_mesh_power_mode local_pm;
-	u16 capability;
-	const u8 *ext_capab;
-	u8 ext_capab_len;
-	const u8 *supported_channels;
-	u8 supported_channels_len;
-	const u8 *supported_oper_classes;
-	u8 supported_oper_classes_len;
-	u8 opmode_notif;
-	bool opmode_notif_used;
-	int support_p2p_ps;
-	const struct ieee80211_he_cap_elem *he_capa;
-	u8 he_capa_len;
-	u16 airtime_weight;
-	struct sta_txpwr txpwr;
-};
-
-struct station_del_parameters {
-	const u8 *mac;
-	u8 subtype;
-	u16 reason_code;
-};
-
-struct rate_info {
-	u8 flags;
-	u8 mcs;
-	u16 legacy;
-	u8 nss;
-	u8 bw;
-	u8 he_gi;
-	u8 he_dcm;
-	u8 he_ru_alloc;
-	u8 n_bonded_ch;
-};
-
-struct sta_bss_parameters {
-	u8 flags;
-	u8 dtim_period;
-	u16 beacon_interval;
-};
-
-struct cfg80211_txq_stats {
-	u32 filled;
-	u32 backlog_bytes;
-	u32 backlog_packets;
-	u32 flows;
-	u32 drops;
-	u32 ecn_marks;
-	u32 overlimit;
-	u32 overmemory;
-	u32 collisions;
-	u32 tx_bytes;
-	u32 tx_packets;
-	u32 max_flows;
-};
-
-struct cfg80211_tid_stats {
-	u32 filled;
-	u64 rx_msdu;
-	u64 tx_msdu;
-	u64 tx_msdu_retries;
-	u64 tx_msdu_failed;
-	struct cfg80211_txq_stats txq_stats;
-};
-
-struct station_info {
-	u64 filled;
-	u32 connected_time;
-	u32 inactive_time;
-	u64 assoc_at;
-	u64 rx_bytes;
-	u64 tx_bytes;
-	u16 llid;
-	u16 plid;
-	u8 plink_state;
-	s8 signal;
-	s8 signal_avg;
-	u8 chains;
-	s8 chain_signal[4];
-	s8 chain_signal_avg[4];
-	struct rate_info txrate;
-	struct rate_info rxrate;
-	u32 rx_packets;
-	u32 tx_packets;
-	u32 tx_retries;
-	u32 tx_failed;
-	u32 rx_dropped_misc;
-	struct sta_bss_parameters bss_param;
-	struct nl80211_sta_flag_update sta_flags;
-	int generation;
-	const u8 *assoc_req_ies;
-	size_t assoc_req_ies_len;
-	u32 beacon_loss_count;
-	s64 t_offset;
-	enum nl80211_mesh_power_mode local_pm;
-	enum nl80211_mesh_power_mode peer_pm;
-	enum nl80211_mesh_power_mode nonpeer_pm;
-	u32 expected_throughput;
-	u64 tx_duration;
-	u64 rx_duration;
-	u64 rx_beacon;
-	u8 rx_beacon_signal_avg;
-	u8 connected_to_gate;
-	struct cfg80211_tid_stats *pertid;
-	s8 ack_signal;
-	s8 avg_ack_signal;
-	u16 airtime_weight;
-	u32 rx_mpdu_count;
-	u32 fcs_err_count;
-	u32 airtime_link_metric;
-};
-
-struct mpath_info {
-	u32 filled;
-	u32 frame_qlen;
-	u32 sn;
-	u32 metric;
-	u32 exptime;
-	u32 discovery_timeout;
-	u8 discovery_retries;
-	u8 flags;
-	u8 hop_count;
-	u32 path_change_count;
-	int generation;
-};
-
-struct bss_parameters {
-	int use_cts_prot;
-	int use_short_preamble;
-	int use_short_slot_time;
-	const u8 *basic_rates;
-	u8 basic_rates_len;
-	int ap_isolate;
-	int ht_opmode;
-	s8 p2p_ctwindow;
-	s8 p2p_opp_ps;
-};
-
-struct mesh_config {
-	u16 dot11MeshRetryTimeout;
-	u16 dot11MeshConfirmTimeout;
-	u16 dot11MeshHoldingTimeout;
-	u16 dot11MeshMaxPeerLinks;
-	u8 dot11MeshMaxRetries;
-	u8 dot11MeshTTL;
-	u8 element_ttl;
-	bool auto_open_plinks;
-	u32 dot11MeshNbrOffsetMaxNeighbor;
-	u8 dot11MeshHWMPmaxPREQretries;
-	u32 path_refresh_time;
-	u16 min_discovery_timeout;
-	u32 dot11MeshHWMPactivePathTimeout;
-	u16 dot11MeshHWMPpreqMinInterval;
-	u16 dot11MeshHWMPperrMinInterval;
-	u16 dot11MeshHWMPnetDiameterTraversalTime;
-	u8 dot11MeshHWMPRootMode;
-	bool dot11MeshConnectedToMeshGate;
-	u16 dot11MeshHWMPRannInterval;
-	bool dot11MeshGateAnnouncementProtocol;
-	bool dot11MeshForwarding;
-	s32 rssi_threshold;
-	u16 ht_opmode;
-	u32 dot11MeshHWMPactivePathToRootTimeout;
-	u16 dot11MeshHWMProotInterval;
-	u16 dot11MeshHWMPconfirmationInterval;
-	enum nl80211_mesh_power_mode power_mode;
-	u16 dot11MeshAwakeWindowDuration;
-	u32 plink_timeout;
-};
-
-struct mesh_setup {
-	struct cfg80211_chan_def chandef;
-	const u8 *mesh_id;
-	u8 mesh_id_len;
-	u8 sync_method;
-	u8 path_sel_proto;
-	u8 path_metric;
-	u8 auth_id;
-	const u8 *ie;
-	u8 ie_len;
-	bool is_authenticated;
-	bool is_secure;
-	bool user_mpm;
-	u8 dtim_period;
-	u16 beacon_interval;
-	int mcast_rate[4];
-	u32 basic_rates;
-	struct cfg80211_bitrate_mask beacon_rate;
-	bool userspace_handles_dfs;
-	bool control_port_over_nl80211;
-};
-
-struct ocb_setup {
-	struct cfg80211_chan_def chandef;
-};
-
-struct ieee80211_txq_params {
-	enum nl80211_ac ac;
-	u16 txop;
-	u16 cwmin;
-	u16 cwmax;
-	u8 aifs;
-};
-
-struct cfg80211_ssid {
-	u8 ssid[32];
-	u8 ssid_len;
-};
-
-struct cfg80211_scan_info {
-	u64 scan_start_tsf;
-	u8 tsf_bssid[6];
-	bool aborted;
-};
-
-struct cfg80211_scan_request {
-	struct cfg80211_ssid *ssids;
-	int n_ssids;
-	u32 n_channels;
-	enum nl80211_bss_scan_width scan_width;
-	const u8 *ie;
-	size_t ie_len;
-	u16 duration;
-	bool duration_mandatory;
-	u32 flags;
-	u32 rates[4];
-	struct wireless_dev *wdev;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	u8 bssid[6];
-	struct wiphy *wiphy;
-	long unsigned int scan_start;
-	struct cfg80211_scan_info info;
-	bool notified;
-	bool no_cck;
-	struct ieee80211_channel *channels[0];
-};
-
-enum cfg80211_signal_type {
-	CFG80211_SIGNAL_TYPE_NONE = 0,
-	CFG80211_SIGNAL_TYPE_MBM = 1,
-	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
-};
-
-struct ieee80211_txrx_stypes;
-
-struct ieee80211_iface_combination;
-
-struct wiphy_wowlan_support;
-
-struct cfg80211_wowlan;
-
-struct wiphy_iftype_ext_capab;
-
-struct wiphy_coalesce_support;
-
-struct wiphy_vendor_command;
-
-struct cfg80211_pmsr_capabilities;
-
-struct wiphy {
-	u8 perm_addr[6];
-	u8 addr_mask[6];
-	struct mac_address *addresses;
-	const struct ieee80211_txrx_stypes *mgmt_stypes;
-	const struct ieee80211_iface_combination *iface_combinations;
-	int n_iface_combinations;
-	u16 software_iftypes;
-	u16 n_addresses;
-	u16 interface_modes;
-	u16 max_acl_mac_addrs;
-	u32 flags;
-	u32 regulatory_flags;
-	u32 features;
-	u8 ext_features[6];
-	u32 ap_sme_capa;
-	enum cfg80211_signal_type signal_type;
-	int bss_priv_size;
-	u8 max_scan_ssids;
-	u8 max_sched_scan_reqs;
-	u8 max_sched_scan_ssids;
-	u8 max_match_sets;
-	u16 max_scan_ie_len;
-	u16 max_sched_scan_ie_len;
-	u32 max_sched_scan_plans;
-	u32 max_sched_scan_plan_interval;
-	u32 max_sched_scan_plan_iterations;
-	int n_cipher_suites;
-	const u32 *cipher_suites;
-	int n_akm_suites;
-	const u32 *akm_suites;
-	u8 retry_short;
-	u8 retry_long;
-	u32 frag_threshold;
-	u32 rts_threshold;
-	u8 coverage_class;
-	char fw_version[32];
-	u32 hw_version;
-	const struct wiphy_wowlan_support *wowlan;
-	struct cfg80211_wowlan *wowlan_config;
-	u16 max_remain_on_channel_duration;
-	u8 max_num_pmkids;
-	u32 available_antennas_tx;
-	u32 available_antennas_rx;
-	u32 probe_resp_offload;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
-	unsigned int num_iftype_ext_capab;
-	const void *privid;
-	struct ieee80211_supported_band *bands[4];
-	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
-	const struct ieee80211_regdomain *regd;
-	struct device___2 dev;
-	bool registered;
-	struct dentry___2 *debugfsdir;
-	const struct ieee80211_ht_cap *ht_capa_mod_mask;
-	const struct ieee80211_vht_cap *vht_capa_mod_mask;
-	struct list_head wdev_list;
-	possible_net_t___2 _net;
-	const struct wiphy_coalesce_support *coalesce;
-	const struct wiphy_vendor_command *vendor_commands;
-	const struct nl80211_vendor_cmd_info *vendor_events;
-	int n_vendor_commands;
-	int n_vendor_events;
-	u16 max_ap_assoc_sta;
-	u8 max_num_csa_counters;
-	u8 max_adj_channel_rssi_comp;
-	u32 bss_select_support;
-	u8 nan_supported_bands;
-	u32 txq_limit;
-	u32 txq_memory_limit;
-	u32 txq_quantum;
-	u8 support_mbssid: 1;
-	u8 support_only_he_mbssid: 1;
-	const struct cfg80211_pmsr_capabilities *pmsr_capa;
-	long: 64;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct cfg80211_match_set {
-	struct cfg80211_ssid ssid;
-	u8 bssid[6];
-	s32 rssi_thold;
-	s32 per_band_rssi_thold[4];
-};
-
-struct cfg80211_sched_scan_plan {
-	u32 interval;
-	u32 iterations;
-};
-
-struct cfg80211_bss_select_adjust {
-	enum nl80211_band band;
-	s8 delta;
-};
-
-struct cfg80211_sched_scan_request {
-	u64 reqid;
-	struct cfg80211_ssid *ssids;
-	int n_ssids;
-	u32 n_channels;
-	enum nl80211_bss_scan_width scan_width;
-	const u8 *ie;
-	size_t ie_len;
-	u32 flags;
-	struct cfg80211_match_set *match_sets;
-	int n_match_sets;
-	s32 min_rssi_thold;
-	u32 delay;
-	struct cfg80211_sched_scan_plan *scan_plans;
-	int n_scan_plans;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	bool relative_rssi_set;
-	s8 relative_rssi;
-	struct cfg80211_bss_select_adjust rssi_adjust;
-	struct wiphy *wiphy;
-	struct net_device___2 *dev;
-	long unsigned int scan_start;
-	bool report_results;
-	struct callback_head callback_head;
-	u32 owner_nlportid;
-	bool nl_owner_dead;
-	struct list_head list;
-	struct ieee80211_channel *channels[0];
-};
-
-struct cfg80211_bss_ies {
-	u64 tsf;
-	struct callback_head callback_head;
-	int len;
-	bool from_beacon;
-	u8 data[0];
-};
-
-struct cfg80211_bss {
-	struct ieee80211_channel *channel;
-	enum nl80211_bss_scan_width scan_width;
-	const struct cfg80211_bss_ies *ies;
-	const struct cfg80211_bss_ies *beacon_ies;
-	const struct cfg80211_bss_ies *proberesp_ies;
-	struct cfg80211_bss *hidden_beacon_bss;
-	struct cfg80211_bss *transmitted_bss;
-	struct list_head nontrans_list;
-	s32 signal;
-	u16 beacon_interval;
-	u16 capability;
-	u8 bssid[6];
-	u8 chains;
-	s8 chain_signal[4];
-	u8 bssid_index;
-	u8 max_bssid_indicator;
-	int: 24;
-	u8 priv[0];
-};
-
-struct cfg80211_auth_request {
-	struct cfg80211_bss *bss;
-	const u8 *ie;
-	size_t ie_len;
-	enum nl80211_auth_type auth_type;
-	const u8 *key;
-	u8 key_len;
-	u8 key_idx;
-	const u8 *auth_data;
-	size_t auth_data_len;
-};
-
-struct cfg80211_assoc_request {
-	struct cfg80211_bss *bss;
-	const u8 *ie;
-	const u8 *prev_bssid;
-	size_t ie_len;
-	struct cfg80211_crypto_settings crypto;
-	bool use_mfp;
-	int: 24;
-	u32 flags;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	int: 32;
-	const u8 *fils_kek;
-	size_t fils_kek_len;
-	const u8 *fils_nonces;
-} __attribute__((packed));
-
-struct cfg80211_deauth_request {
-	const u8 *bssid;
-	const u8 *ie;
-	size_t ie_len;
-	u16 reason_code;
-	bool local_state_change;
-};
-
-struct cfg80211_disassoc_request {
-	struct cfg80211_bss *bss;
-	const u8 *ie;
-	size_t ie_len;
-	u16 reason_code;
-	bool local_state_change;
-};
-
-struct cfg80211_ibss_params {
-	const u8 *ssid;
-	const u8 *bssid;
-	struct cfg80211_chan_def chandef;
-	const u8 *ie;
-	u8 ssid_len;
-	u8 ie_len;
-	u16 beacon_interval;
-	u32 basic_rates;
-	bool channel_fixed;
-	bool privacy;
-	bool control_port;
-	bool control_port_over_nl80211;
-	bool userspace_handles_dfs;
-	int: 24;
-	int mcast_rate[4];
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	int: 32;
-	struct key_params *wep_keys;
-	int wep_tx_key;
-	int: 32;
-} __attribute__((packed));
-
-struct cfg80211_bss_selection {
-	enum nl80211_bss_select_attr behaviour;
-	union {
-		enum nl80211_band band_pref;
-		struct cfg80211_bss_select_adjust adjust;
-	} param;
-};
-
-struct cfg80211_connect_params {
-	struct ieee80211_channel *channel;
-	struct ieee80211_channel *channel_hint;
-	const u8 *bssid;
-	const u8 *bssid_hint;
-	const u8 *ssid;
-	size_t ssid_len;
-	enum nl80211_auth_type auth_type;
-	int: 32;
-	const u8 *ie;
-	size_t ie_len;
-	bool privacy;
-	int: 24;
-	enum nl80211_mfp mfp;
-	struct cfg80211_crypto_settings crypto;
-	const u8 *key;
-	u8 key_len;
-	u8 key_idx;
-	short: 16;
-	u32 flags;
-	int bg_scan_period;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	bool pbss;
-	int: 24;
-	struct cfg80211_bss_selection bss_select;
-	const u8 *prev_bssid;
-	const u8 *fils_erp_username;
-	size_t fils_erp_username_len;
-	const u8 *fils_erp_realm;
-	size_t fils_erp_realm_len;
-	u16 fils_erp_next_seq_num;
-	long: 48;
-	const u8 *fils_erp_rrk;
-	size_t fils_erp_rrk_len;
-	bool want_1x;
-	int: 24;
-	struct ieee80211_edmg edmg;
-	int: 32;
-} __attribute__((packed));
-
-struct cfg80211_pmksa {
-	const u8 *bssid;
-	const u8 *pmkid;
-	const u8 *pmk;
-	size_t pmk_len;
-	const u8 *ssid;
-	size_t ssid_len;
-	const u8 *cache_id;
-};
-
-struct cfg80211_pkt_pattern {
-	const u8 *mask;
-	const u8 *pattern;
-	int pattern_len;
-	int pkt_offset;
-};
-
-struct cfg80211_wowlan_tcp {
-	struct socket *sock;
-	__be32 src;
-	__be32 dst;
-	u16 src_port;
-	u16 dst_port;
-	u8 dst_mac[6];
-	int payload_len;
-	const u8 *payload;
-	struct nl80211_wowlan_tcp_data_seq payload_seq;
-	u32 data_interval;
-	u32 wake_len;
-	const u8 *wake_data;
-	const u8 *wake_mask;
-	u32 tokens_size;
-	struct nl80211_wowlan_tcp_data_token payload_tok;
-};
-
-struct cfg80211_wowlan {
-	bool any;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	struct cfg80211_pkt_pattern *patterns;
-	struct cfg80211_wowlan_tcp *tcp;
-	int n_patterns;
-	struct cfg80211_sched_scan_request *nd_config;
-};
-
-struct cfg80211_coalesce_rules {
-	int delay;
-	enum nl80211_coalesce_condition condition;
-	struct cfg80211_pkt_pattern *patterns;
-	int n_patterns;
-};
-
-struct cfg80211_coalesce {
-	struct cfg80211_coalesce_rules *rules;
-	int n_rules;
-};
-
-struct cfg80211_gtk_rekey_data {
-	const u8 *kek;
-	const u8 *kck;
-	const u8 *replay_ctr;
-};
-
-struct cfg80211_update_ft_ies_params {
-	u16 md;
-	const u8 *ie;
-	size_t ie_len;
-};
-
-struct cfg80211_mgmt_tx_params {
-	struct ieee80211_channel *chan;
-	bool offchan;
-	unsigned int wait;
-	const u8 *buf;
-	size_t len;
-	bool no_cck;
-	bool dont_wait_for_ack;
-	int n_csa_offsets;
-	const u16 *csa_offsets;
-};
-
-struct cfg80211_dscp_exception {
-	u8 dscp;
-	u8 up;
-};
-
-struct cfg80211_dscp_range {
-	u8 low;
-	u8 high;
-};
-
-struct cfg80211_qos_map {
-	u8 num_des;
-	struct cfg80211_dscp_exception dscp_exception[21];
-	struct cfg80211_dscp_range up[8];
-};
-
-struct cfg80211_nan_conf {
-	u8 master_pref;
-	u8 bands;
-};
-
-struct cfg80211_nan_func_filter {
-	const u8 *filter;
-	u8 len;
-};
-
-struct cfg80211_nan_func {
-	enum nl80211_nan_function_type type;
-	u8 service_id[6];
-	u8 publish_type;
-	bool close_range;
-	bool publish_bcast;
-	bool subscribe_active;
-	u8 followup_id;
-	u8 followup_reqid;
-	struct mac_address followup_dest;
-	u32 ttl;
-	const u8 *serv_spec_info;
-	u8 serv_spec_info_len;
-	bool srf_include;
-	const u8 *srf_bf;
-	u8 srf_bf_len;
-	u8 srf_bf_idx;
-	struct mac_address *srf_macs;
-	int srf_num_macs;
-	struct cfg80211_nan_func_filter *rx_filters;
-	struct cfg80211_nan_func_filter *tx_filters;
-	u8 num_tx_filters;
-	u8 num_rx_filters;
-	u8 instance_id;
-	u64 cookie;
-};
-
-struct cfg80211_pmk_conf {
-	const u8 *aa;
-	u8 pmk_len;
-	const u8 *pmk;
-	const u8 *pmk_r0_name;
-};
-
-struct cfg80211_external_auth_params {
-	enum nl80211_external_auth_action action;
-	u8 bssid[6];
-	struct cfg80211_ssid ssid;
-	unsigned int key_mgmt_suite;
-	u16 status;
-	const u8 *pmkid;
-};
-
-struct cfg80211_ftm_responder_stats {
-	u32 filled;
-	u32 success_num;
-	u32 partial_num;
-	u32 failed_num;
-	u32 asap_num;
-	u32 non_asap_num;
-	u64 total_duration_ms;
-	u32 unknown_triggers_num;
-	u32 reschedule_requests_num;
-	u32 out_of_window_triggers_num;
-};
-
-struct cfg80211_pmsr_ftm_request_peer {
-	enum nl80211_preamble preamble;
-	u16 burst_period;
-	u8 requested: 1;
-	u8 asap: 1;
-	u8 request_lci: 1;
-	u8 request_civicloc: 1;
-	u8 num_bursts_exp;
-	u8 burst_duration;
-	u8 ftms_per_burst;
-	u8 ftmr_retries;
-};
-
-struct cfg80211_pmsr_request_peer {
-	u8 addr[6];
-	struct cfg80211_chan_def chandef;
-	u8 report_ap_tsf: 1;
-	struct cfg80211_pmsr_ftm_request_peer ftm;
-};
-
-struct cfg80211_pmsr_request {
-	u64 cookie;
-	void *drv_data;
-	u32 n_peers;
-	u32 nl_portid;
-	u32 timeout;
-	u8 mac_addr[6];
-	u8 mac_addr_mask[6];
-	struct list_head list;
-	struct cfg80211_pmsr_request_peer peers[0];
-};
-
-struct cfg80211_update_owe_info {
-	u8 peer[6];
-	u16 status;
-	const u8 *ie;
-	size_t ie_len;
-};
-
-struct cfg80211_ops {
-	int (*suspend)(struct wiphy *, struct cfg80211_wowlan *);
-	int (*resume)(struct wiphy *);
-	void (*set_wakeup)(struct wiphy *, bool);
-	struct wireless_dev * (*add_virtual_intf)(struct wiphy *, const char *, unsigned char, enum nl80211_iftype, struct vif_params *);
-	int (*del_virtual_intf)(struct wiphy *, struct wireless_dev *);
-	int (*change_virtual_intf)(struct wiphy *, struct net_device___2 *, enum nl80211_iftype, struct vif_params *);
-	int (*add_key)(struct wiphy *, struct net_device___2 *, u8, bool, const u8 *, struct key_params *);
-	int (*get_key)(struct wiphy *, struct net_device___2 *, u8, bool, const u8 *, void *, void (*)(void *, struct key_params *));
-	int (*del_key)(struct wiphy *, struct net_device___2 *, u8, bool, const u8 *);
-	int (*set_default_key)(struct wiphy *, struct net_device___2 *, u8, bool, bool);
-	int (*set_default_mgmt_key)(struct wiphy *, struct net_device___2 *, u8);
-	int (*start_ap)(struct wiphy *, struct net_device___2 *, struct cfg80211_ap_settings *);
-	int (*change_beacon)(struct wiphy *, struct net_device___2 *, struct cfg80211_beacon_data *);
-	int (*stop_ap)(struct wiphy *, struct net_device___2 *);
-	int (*add_station)(struct wiphy *, struct net_device___2 *, const u8 *, struct station_parameters *);
-	int (*del_station)(struct wiphy *, struct net_device___2 *, struct station_del_parameters *);
-	int (*change_station)(struct wiphy *, struct net_device___2 *, const u8 *, struct station_parameters *);
-	int (*get_station)(struct wiphy *, struct net_device___2 *, const u8 *, struct station_info *);
-	int (*dump_station)(struct wiphy *, struct net_device___2 *, int, u8 *, struct station_info *);
-	int (*add_mpath)(struct wiphy *, struct net_device___2 *, const u8 *, const u8 *);
-	int (*del_mpath)(struct wiphy *, struct net_device___2 *, const u8 *);
-	int (*change_mpath)(struct wiphy *, struct net_device___2 *, const u8 *, const u8 *);
-	int (*get_mpath)(struct wiphy *, struct net_device___2 *, u8 *, u8 *, struct mpath_info *);
-	int (*dump_mpath)(struct wiphy *, struct net_device___2 *, int, u8 *, u8 *, struct mpath_info *);
-	int (*get_mpp)(struct wiphy *, struct net_device___2 *, u8 *, u8 *, struct mpath_info *);
-	int (*dump_mpp)(struct wiphy *, struct net_device___2 *, int, u8 *, u8 *, struct mpath_info *);
-	int (*get_mesh_config)(struct wiphy *, struct net_device___2 *, struct mesh_config *);
-	int (*update_mesh_config)(struct wiphy *, struct net_device___2 *, u32, const struct mesh_config *);
-	int (*join_mesh)(struct wiphy *, struct net_device___2 *, const struct mesh_config *, const struct mesh_setup *);
-	int (*leave_mesh)(struct wiphy *, struct net_device___2 *);
-	int (*join_ocb)(struct wiphy *, struct net_device___2 *, struct ocb_setup *);
-	int (*leave_ocb)(struct wiphy *, struct net_device___2 *);
-	int (*change_bss)(struct wiphy *, struct net_device___2 *, struct bss_parameters *);
-	int (*set_txq_params)(struct wiphy *, struct net_device___2 *, struct ieee80211_txq_params *);
-	int (*libertas_set_mesh_channel)(struct wiphy *, struct net_device___2 *, struct ieee80211_channel *);
-	int (*set_monitor_channel)(struct wiphy *, struct cfg80211_chan_def *);
-	int (*scan)(struct wiphy *, struct cfg80211_scan_request *);
-	void (*abort_scan)(struct wiphy *, struct wireless_dev *);
-	int (*auth)(struct wiphy *, struct net_device___2 *, struct cfg80211_auth_request *);
-	int (*assoc)(struct wiphy *, struct net_device___2 *, struct cfg80211_assoc_request *);
-	int (*deauth)(struct wiphy *, struct net_device___2 *, struct cfg80211_deauth_request *);
-	int (*disassoc)(struct wiphy *, struct net_device___2 *, struct cfg80211_disassoc_request *);
-	int (*connect)(struct wiphy *, struct net_device___2 *, struct cfg80211_connect_params *);
-	int (*update_connect_params)(struct wiphy *, struct net_device___2 *, struct cfg80211_connect_params *, u32);
-	int (*disconnect)(struct wiphy *, struct net_device___2 *, u16);
-	int (*join_ibss)(struct wiphy *, struct net_device___2 *, struct cfg80211_ibss_params *);
-	int (*leave_ibss)(struct wiphy *, struct net_device___2 *);
-	int (*set_mcast_rate)(struct wiphy *, struct net_device___2 *, int *);
-	int (*set_wiphy_params)(struct wiphy *, u32);
-	int (*set_tx_power)(struct wiphy *, struct wireless_dev *, enum nl80211_tx_power_setting, int);
-	int (*get_tx_power)(struct wiphy *, struct wireless_dev *, int *);
-	int (*set_wds_peer)(struct wiphy *, struct net_device___2 *, const u8 *);
-	void (*rfkill_poll)(struct wiphy *);
-	int (*set_bitrate_mask)(struct wiphy *, struct net_device___2 *, const u8 *, const struct cfg80211_bitrate_mask *);
-	int (*dump_survey)(struct wiphy *, struct net_device___2 *, int, struct survey_info *);
-	int (*set_pmksa)(struct wiphy *, struct net_device___2 *, struct cfg80211_pmksa *);
-	int (*del_pmksa)(struct wiphy *, struct net_device___2 *, struct cfg80211_pmksa *);
-	int (*flush_pmksa)(struct wiphy *, struct net_device___2 *);
-	int (*remain_on_channel)(struct wiphy *, struct wireless_dev *, struct ieee80211_channel *, unsigned int, u64 *);
-	int (*cancel_remain_on_channel)(struct wiphy *, struct wireless_dev *, u64);
-	int (*mgmt_tx)(struct wiphy *, struct wireless_dev *, struct cfg80211_mgmt_tx_params *, u64 *);
-	int (*mgmt_tx_cancel_wait)(struct wiphy *, struct wireless_dev *, u64);
-	int (*set_power_mgmt)(struct wiphy *, struct net_device___2 *, bool, int);
-	int (*set_cqm_rssi_config)(struct wiphy *, struct net_device___2 *, s32, u32);
-	int (*set_cqm_rssi_range_config)(struct wiphy *, struct net_device___2 *, s32, s32);
-	int (*set_cqm_txe_config)(struct wiphy *, struct net_device___2 *, u32, u32, u32);
-	void (*mgmt_frame_register)(struct wiphy *, struct wireless_dev *, u16, bool);
-	int (*set_antenna)(struct wiphy *, u32, u32);
-	int (*get_antenna)(struct wiphy *, u32 *, u32 *);
-	int (*sched_scan_start)(struct wiphy *, struct net_device___2 *, struct cfg80211_sched_scan_request *);
-	int (*sched_scan_stop)(struct wiphy *, struct net_device___2 *, u64);
-	int (*set_rekey_data)(struct wiphy *, struct net_device___2 *, struct cfg80211_gtk_rekey_data *);
-	int (*tdls_mgmt)(struct wiphy *, struct net_device___2 *, const u8 *, u8, u8, u16, u32, bool, const u8 *, size_t);
-	int (*tdls_oper)(struct wiphy *, struct net_device___2 *, const u8 *, enum nl80211_tdls_operation);
-	int (*probe_client)(struct wiphy *, struct net_device___2 *, const u8 *, u64 *);
-	int (*set_noack_map)(struct wiphy *, struct net_device___2 *, u16);
-	int (*get_channel)(struct wiphy *, struct wireless_dev *, struct cfg80211_chan_def *);
-	int (*start_p2p_device)(struct wiphy *, struct wireless_dev *);
-	void (*stop_p2p_device)(struct wiphy *, struct wireless_dev *);
-	int (*set_mac_acl)(struct wiphy *, struct net_device___2 *, const struct cfg80211_acl_data *);
-	int (*start_radar_detection)(struct wiphy *, struct net_device___2 *, struct cfg80211_chan_def *, u32);
-	void (*end_cac)(struct wiphy *, struct net_device___2 *);
-	int (*update_ft_ies)(struct wiphy *, struct net_device___2 *, struct cfg80211_update_ft_ies_params *);
-	int (*crit_proto_start)(struct wiphy *, struct wireless_dev *, enum nl80211_crit_proto_id, u16);
-	void (*crit_proto_stop)(struct wiphy *, struct wireless_dev *);
-	int (*set_coalesce)(struct wiphy *, struct cfg80211_coalesce *);
-	int (*channel_switch)(struct wiphy *, struct net_device___2 *, struct cfg80211_csa_settings *);
-	int (*set_qos_map)(struct wiphy *, struct net_device___2 *, struct cfg80211_qos_map *);
-	int (*set_ap_chanwidth)(struct wiphy *, struct net_device___2 *, struct cfg80211_chan_def *);
-	int (*add_tx_ts)(struct wiphy *, struct net_device___2 *, u8, const u8 *, u8, u16);
-	int (*del_tx_ts)(struct wiphy *, struct net_device___2 *, u8, const u8 *);
-	int (*tdls_channel_switch)(struct wiphy *, struct net_device___2 *, const u8 *, u8, struct cfg80211_chan_def *);
-	void (*tdls_cancel_channel_switch)(struct wiphy *, struct net_device___2 *, const u8 *);
-	int (*start_nan)(struct wiphy *, struct wireless_dev *, struct cfg80211_nan_conf *);
-	void (*stop_nan)(struct wiphy *, struct wireless_dev *);
-	int (*add_nan_func)(struct wiphy *, struct wireless_dev *, struct cfg80211_nan_func *);
-	void (*del_nan_func)(struct wiphy *, struct wireless_dev *, u64);
-	int (*nan_change_conf)(struct wiphy *, struct wireless_dev *, struct cfg80211_nan_conf *, u32);
-	int (*set_multicast_to_unicast)(struct wiphy *, struct net_device___2 *, const bool);
-	int (*get_txq_stats)(struct wiphy *, struct wireless_dev *, struct cfg80211_txq_stats *);
-	int (*set_pmk)(struct wiphy *, struct net_device___2 *, const struct cfg80211_pmk_conf *);
-	int (*del_pmk)(struct wiphy *, struct net_device___2 *, const u8 *);
-	int (*external_auth)(struct wiphy *, struct net_device___2 *, struct cfg80211_external_auth_params *);
-	int (*tx_control_port)(struct wiphy *, struct net_device___2 *, const u8 *, size_t, const u8 *, const __be16, const bool);
-	int (*get_ftm_responder_stats)(struct wiphy *, struct net_device___2 *, struct cfg80211_ftm_responder_stats *);
-	int (*start_pmsr)(struct wiphy *, struct wireless_dev *, struct cfg80211_pmsr_request *);
-	void (*abort_pmsr)(struct wiphy *, struct wireless_dev *, struct cfg80211_pmsr_request *);
-	int (*update_owe_info)(struct wiphy *, struct net_device___2 *, struct cfg80211_update_owe_info *);
-	int (*probe_mesh_link)(struct wiphy *, struct net_device___2 *, const u8 *, size_t);
-};
-
-enum wiphy_flags {
-	WIPHY_FLAG_NETNS_OK = 8,
-	WIPHY_FLAG_PS_ON_BY_DEFAULT = 16,
-	WIPHY_FLAG_4ADDR_AP = 32,
-	WIPHY_FLAG_4ADDR_STATION = 64,
-	WIPHY_FLAG_CONTROL_PORT_PROTOCOL = 128,
-	WIPHY_FLAG_IBSS_RSN = 256,
-	WIPHY_FLAG_MESH_AUTH = 1024,
-	WIPHY_FLAG_SUPPORTS_FW_ROAM = 8192,
-	WIPHY_FLAG_AP_UAPSD = 16384,
-	WIPHY_FLAG_SUPPORTS_TDLS = 32768,
-	WIPHY_FLAG_TDLS_EXTERNAL_SETUP = 65536,
-	WIPHY_FLAG_HAVE_AP_SME = 131072,
-	WIPHY_FLAG_REPORTS_OBSS = 262144,
-	WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD = 524288,
-	WIPHY_FLAG_OFFCHAN_TX = 1048576,
-	WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL = 2097152,
-	WIPHY_FLAG_SUPPORTS_5_10_MHZ = 4194304,
-	WIPHY_FLAG_HAS_CHANNEL_SWITCH = 8388608,
-	WIPHY_FLAG_HAS_STATIC_WEP = 16777216,
-};
-
-struct ieee80211_iface_limit {
-	u16 max;
-	u16 types;
-};
-
-struct ieee80211_iface_combination {
-	const struct ieee80211_iface_limit *limits;
-	u32 num_different_channels;
-	u16 max_interfaces;
-	u8 n_limits;
-	bool beacon_int_infra_match;
-	u8 radar_detect_widths;
-	u8 radar_detect_regions;
-	u32 beacon_int_min_gcd;
-};
-
-struct ieee80211_txrx_stypes {
-	u16 tx;
-	u16 rx;
-};
-
-enum wiphy_wowlan_support_flags {
-	WIPHY_WOWLAN_ANY = 1,
-	WIPHY_WOWLAN_MAGIC_PKT = 2,
-	WIPHY_WOWLAN_DISCONNECT = 4,
-	WIPHY_WOWLAN_SUPPORTS_GTK_REKEY = 8,
-	WIPHY_WOWLAN_GTK_REKEY_FAILURE = 16,
-	WIPHY_WOWLAN_EAP_IDENTITY_REQ = 32,
-	WIPHY_WOWLAN_4WAY_HANDSHAKE = 64,
-	WIPHY_WOWLAN_RFKILL_RELEASE = 128,
-	WIPHY_WOWLAN_NET_DETECT = 256,
-};
-
-struct wiphy_wowlan_tcp_support {
-	const struct nl80211_wowlan_tcp_data_token_feature *tok;
-	u32 data_payload_max;
-	u32 data_interval_max;
-	u32 wake_payload_max;
-	bool seq;
-};
-
-struct wiphy_wowlan_support {
-	u32 flags;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-	int max_nd_match_sets;
-	const struct wiphy_wowlan_tcp_support *tcp;
-};
-
-struct wiphy_coalesce_support {
-	int n_rules;
-	int max_delay;
-	int n_patterns;
-	int pattern_max_len;
-	int pattern_min_len;
-	int max_pkt_offset;
-};
-
-struct wiphy_vendor_command {
-	struct nl80211_vendor_cmd_info info;
-	u32 flags;
-	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
-	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff___2 *, const void *, int, long unsigned int *);
-	const struct nla_policy *policy;
-	unsigned int maxattr;
-};
-
-struct wiphy_iftype_ext_capab {
-	enum nl80211_iftype iftype;
-	const u8 *extended_capabilities;
-	const u8 *extended_capabilities_mask;
-	u8 extended_capabilities_len;
-};
-
-struct cfg80211_pmsr_capabilities {
-	unsigned int max_peers;
-	u8 report_ap_tsf: 1;
-	u8 randomize_mac_addr: 1;
-	struct {
-		u32 preambles;
-		u32 bandwidths;
-		s8 max_bursts_exponent;
-		u8 max_ftms_per_burst;
-		u8 supported: 1;
-		u8 asap: 1;
-		u8 non_asap: 1;
-		u8 request_lci: 1;
-		u8 request_civicloc: 1;
-	} ftm;
-};
-
-struct cfg80211_cached_keys {
-	struct key_params params[4];
-	u8 data[52];
-	int def;
-};
-
-struct cfg80211_internal_bss {
-	struct list_head list;
-	struct list_head hidden_list;
-	struct rb_node rbn;
-	u64 ts_boottime;
-	long unsigned int ts;
-	long unsigned int refcount;
-	atomic_t hold;
-	u64 parent_tsf;
-	u8 parent_bssid[6];
-	struct cfg80211_bss pub;
-};
-
-struct cfg80211_cqm_config {
-	u32 rssi_hyst;
-	s32 last_rssi_event_value;
-	int n_rssi_thresholds;
-	s32 rssi_thresholds[0];
-};
-
-struct cfg80211_fils_resp_params {
-	const u8 *kek;
-	size_t kek_len;
-	bool update_erp_next_seq_num;
-	u16 erp_next_seq_num;
-	const u8 *pmk;
-	size_t pmk_len;
-	const u8 *pmkid;
-};
-
-struct cfg80211_connect_resp_params {
-	int status;
-	const u8 *bssid;
-	struct cfg80211_bss *bss;
-	const u8 *req_ie;
-	size_t req_ie_len;
-	const u8 *resp_ie;
-	size_t resp_ie_len;
-	struct cfg80211_fils_resp_params fils;
-	enum nl80211_timeout_reason timeout_reason;
-};
-
-struct cfg80211_roam_info {
-	struct ieee80211_channel *channel;
-	struct cfg80211_bss *bss;
-	const u8 *bssid;
-	const u8 *req_ie;
-	size_t req_ie_len;
-	const u8 *resp_ie;
-	size_t resp_ie_len;
-	struct cfg80211_fils_resp_params fils;
-};
-
-struct cfg80211_registered_device {
-	const struct cfg80211_ops *ops;
-	struct list_head list;
-	struct rfkill_ops rfkill_ops;
-	struct rfkill *rfkill;
-	struct work_struct rfkill_block;
-	char country_ie_alpha2[2];
-	const struct ieee80211_regdomain *requested_regd;
-	enum environment_cap env;
-	int wiphy_idx;
-	int devlist_generation;
-	int wdev_id;
-	int opencount;
-	wait_queue_head_t dev_wait;
-	struct list_head beacon_registrations;
-	spinlock_t beacon_registrations_lock;
-	struct list_head mlme_unreg;
-	spinlock_t mlme_unreg_lock;
-	struct work_struct mlme_unreg_wk;
-	int num_running_ifaces;
-	int num_running_monitor_ifaces;
-	u64 cookie_counter;
-	spinlock_t bss_lock;
-	struct list_head bss_list;
-	struct rb_root bss_tree;
-	u32 bss_generation;
-	u32 bss_entries;
-	struct cfg80211_scan_request *scan_req;
-	struct sk_buff___2 *scan_msg;
-	struct list_head sched_scan_req_list;
-	time64_t suspend_at;
-	struct work_struct scan_done_wk;
-	struct genl_info *cur_cmd_info;
-	struct work_struct conn_work;
-	struct work_struct event_work;
-	struct delayed_work dfs_update_channels_wk;
-	u32 crit_proto_nlportid;
-	struct cfg80211_coalesce *coalesce;
-	struct work_struct destroy_work;
-	struct work_struct sched_scan_stop_wk;
-	struct work_struct sched_scan_res_wk;
-	struct cfg80211_chan_def radar_chandef;
-	struct work_struct propagate_radar_detect_wk;
-	struct cfg80211_chan_def cac_done_chandef;
-	struct work_struct propagate_cac_done_wk;
-	long: 64;
-	struct wiphy wiphy;
-};
-
-enum cfg80211_event_type {
-	EVENT_CONNECT_RESULT = 0,
-	EVENT_ROAMED = 1,
-	EVENT_DISCONNECTED = 2,
-	EVENT_IBSS_JOINED = 3,
-	EVENT_STOPPED = 4,
-	EVENT_PORT_AUTHORIZED = 5,
-};
-
-struct cfg80211_event {
-	struct list_head list;
-	enum cfg80211_event_type type;
-	union {
-		struct cfg80211_connect_resp_params cr;
-		struct cfg80211_roam_info rm;
-		struct {
-			const u8 *ie;
-			size_t ie_len;
-			u16 reason;
-			bool locally_generated;
-		} dc;
-		struct {
-			u8 bssid[6];
-			struct ieee80211_channel *channel;
-		} ij;
-		struct {
-			u8 bssid[6];
-		} pa;
-	};
-};
-
-struct cfg80211_beacon_registration {
-	struct list_head list;
-	u32 nlportid;
-};
-
-struct iw_param {
-	__s32 value;
-	__u8 fixed;
-	__u8 disabled;
-	__u16 flags;
-};
-
-struct iw_point {
-	void *pointer;
-	__u16 length;
-	__u16 flags;
-};
-
-struct iw_freq {
-	__s32 m;
-	__s16 e;
-	__u8 i;
-	__u8 flags;
-};
-
-struct iw_quality {
-	__u8 qual;
-	__u8 level;
-	__u8 noise;
-	__u8 updated;
-};
-
-struct iw_discarded {
-	__u32 nwid;
-	__u32 code;
-	__u32 fragment;
-	__u32 retries;
-	__u32 misc;
-};
-
-struct iw_missed {
-	__u32 beacon;
-};
-
-struct iw_statistics {
-	__u16 status;
-	struct iw_quality qual;
-	struct iw_discarded discard;
-	struct iw_missed miss;
-};
-
-union iwreq_data {
-	char name[16];
-	struct iw_point essid;
-	struct iw_param nwid;
-	struct iw_freq freq;
-	struct iw_param sens;
-	struct iw_param bitrate;
-	struct iw_param txpower;
-	struct iw_param rts;
-	struct iw_param frag;
-	__u32 mode;
-	struct iw_param retry;
-	struct iw_point encoding;
-	struct iw_param power;
-	struct iw_quality qual;
-	struct sockaddr ap_addr;
-	struct sockaddr addr;
-	struct iw_param param;
-	struct iw_point data;
-};
-
-struct iw_request_info {
-	__u16 cmd;
-	__u16 flags;
-};
-
-typedef int (*iw_handler)(struct net_device___2 *, struct iw_request_info *, union iwreq_data *, char *);
-
-struct iw_handler_def {
-	const iw_handler *standard;
-	__u16 num_standard;
-	struct iw_statistics * (*get_wireless_stats)(struct net_device___2 *);
-};
-
-struct radiotap_align_size {
-	uint8_t align: 4;
-	uint8_t size: 4;
-};
-
-struct ieee80211_radiotap_namespace {
-	const struct radiotap_align_size *align_size;
-	int n_bits;
-	uint32_t oui;
-	uint8_t subns;
-};
-
-struct ieee80211_radiotap_vendor_namespaces {
-	const struct ieee80211_radiotap_namespace *ns;
-	int n_ns;
-};
-
-struct ieee80211_radiotap_header;
-
-struct ieee80211_radiotap_iterator {
-	struct ieee80211_radiotap_header *_rtheader;
-	const struct ieee80211_radiotap_vendor_namespaces *_vns;
-	const struct ieee80211_radiotap_namespace *current_namespace;
-	unsigned char *_arg;
-	unsigned char *_next_ns_data;
-	__le32 *_next_bitmap;
-	unsigned char *this_arg;
-	int this_arg_index;
-	int this_arg_size;
-	int is_radiotap_ns;
-	int _max_length;
-	int _arg_index;
-	uint32_t _bitmap_shifter;
-	int _reset_on_ext;
-};
-
-struct ieee80211_radiotap_header {
-	uint8_t it_version;
-	uint8_t it_pad;
-	__le16 it_len;
-	__le32 it_present;
-};
-
-enum ieee80211_radiotap_presence {
-	IEEE80211_RADIOTAP_TSFT = 0,
-	IEEE80211_RADIOTAP_FLAGS = 1,
-	IEEE80211_RADIOTAP_RATE = 2,
-	IEEE80211_RADIOTAP_CHANNEL = 3,
-	IEEE80211_RADIOTAP_FHSS = 4,
-	IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
-	IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
-	IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
-	IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
-	IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
-	IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
-	IEEE80211_RADIOTAP_ANTENNA = 11,
-	IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
-	IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
-	IEEE80211_RADIOTAP_RX_FLAGS = 14,
-	IEEE80211_RADIOTAP_TX_FLAGS = 15,
-	IEEE80211_RADIOTAP_RTS_RETRIES = 16,
-	IEEE80211_RADIOTAP_DATA_RETRIES = 17,
-	IEEE80211_RADIOTAP_MCS = 19,
-	IEEE80211_RADIOTAP_AMPDU_STATUS = 20,
-	IEEE80211_RADIOTAP_VHT = 21,
-	IEEE80211_RADIOTAP_TIMESTAMP = 22,
-	IEEE80211_RADIOTAP_HE = 23,
-	IEEE80211_RADIOTAP_HE_MU = 24,
-	IEEE80211_RADIOTAP_ZERO_LEN_PSDU = 26,
-	IEEE80211_RADIOTAP_LSIG = 27,
-	IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
-	IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
-	IEEE80211_RADIOTAP_EXT = 31,
-};
-
-struct ieee80211_hdr {
-	__le16 frame_control;
-	__le16 duration_id;
-	u8 addr1[6];
-	u8 addr2[6];
-	u8 addr3[6];
-	__le16 seq_ctrl;
-	u8 addr4[6];
-};
-
-struct ieee80211s_hdr {
-	u8 flags;
-	u8 ttl;
-	__le32 seqnum;
-	u8 eaddr1[6];
-	u8 eaddr2[6];
-} __attribute__((packed));
-
-enum ieee80211_p2p_attr_id {
-	IEEE80211_P2P_ATTR_STATUS = 0,
-	IEEE80211_P2P_ATTR_MINOR_REASON = 1,
-	IEEE80211_P2P_ATTR_CAPABILITY = 2,
-	IEEE80211_P2P_ATTR_DEVICE_ID = 3,
-	IEEE80211_P2P_ATTR_GO_INTENT = 4,
-	IEEE80211_P2P_ATTR_GO_CONFIG_TIMEOUT = 5,
-	IEEE80211_P2P_ATTR_LISTEN_CHANNEL = 6,
-	IEEE80211_P2P_ATTR_GROUP_BSSID = 7,
-	IEEE80211_P2P_ATTR_EXT_LISTEN_TIMING = 8,
-	IEEE80211_P2P_ATTR_INTENDED_IFACE_ADDR = 9,
-	IEEE80211_P2P_ATTR_MANAGABILITY = 10,
-	IEEE80211_P2P_ATTR_CHANNEL_LIST = 11,
-	IEEE80211_P2P_ATTR_ABSENCE_NOTICE = 12,
-	IEEE80211_P2P_ATTR_DEVICE_INFO = 13,
-	IEEE80211_P2P_ATTR_GROUP_INFO = 14,
-	IEEE80211_P2P_ATTR_GROUP_ID = 15,
-	IEEE80211_P2P_ATTR_INTERFACE = 16,
-	IEEE80211_P2P_ATTR_OPER_CHANNEL = 17,
-	IEEE80211_P2P_ATTR_INVITE_FLAGS = 18,
-	IEEE80211_P2P_ATTR_VENDOR_SPECIFIC = 221,
-	IEEE80211_P2P_ATTR_MAX = 222,
-};
-
-enum ieee80211_vht_chanwidth {
-	IEEE80211_VHT_CHANWIDTH_USE_HT = 0,
-	IEEE80211_VHT_CHANWIDTH_80MHZ = 1,
-	IEEE80211_VHT_CHANWIDTH_160MHZ = 2,
-	IEEE80211_VHT_CHANWIDTH_80P80MHZ = 3,
-};
-
-enum ieee80211_statuscode {
-	WLAN_STATUS_SUCCESS = 0,
-	WLAN_STATUS_UNSPECIFIED_FAILURE = 1,
-	WLAN_STATUS_CAPS_UNSUPPORTED = 10,
-	WLAN_STATUS_REASSOC_NO_ASSOC = 11,
-	WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12,
-	WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13,
-	WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14,
-	WLAN_STATUS_CHALLENGE_FAIL = 15,
-	WLAN_STATUS_AUTH_TIMEOUT = 16,
-	WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17,
-	WLAN_STATUS_ASSOC_DENIED_RATES = 18,
-	WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19,
-	WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20,
-	WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21,
-	WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22,
-	WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23,
-	WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24,
-	WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
-	WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
-	WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY = 30,
-	WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31,
-	WLAN_STATUS_INVALID_IE = 40,
-	WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
-	WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42,
-	WLAN_STATUS_INVALID_AKMP = 43,
-	WLAN_STATUS_UNSUPP_RSN_VERSION = 44,
-	WLAN_STATUS_INVALID_RSN_IE_CAP = 45,
-	WLAN_STATUS_CIPHER_SUITE_REJECTED = 46,
-	WLAN_STATUS_UNSPECIFIED_QOS = 32,
-	WLAN_STATUS_ASSOC_DENIED_NOBANDWIDTH = 33,
-	WLAN_STATUS_ASSOC_DENIED_LOWACK = 34,
-	WLAN_STATUS_ASSOC_DENIED_UNSUPP_QOS = 35,
-	WLAN_STATUS_REQUEST_DECLINED = 37,
-	WLAN_STATUS_INVALID_QOS_PARAM = 38,
-	WLAN_STATUS_CHANGE_TSPEC = 39,
-	WLAN_STATUS_WAIT_TS_DELAY = 47,
-	WLAN_STATUS_NO_DIRECT_LINK = 48,
-	WLAN_STATUS_STA_NOT_PRESENT = 49,
-	WLAN_STATUS_STA_NOT_QSTA = 50,
-	WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
-	WLAN_STATUS_FCG_NOT_SUPP = 78,
-	WLAN_STATUS_STA_NO_TBTT = 78,
-	WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES = 39,
-	WLAN_STATUS_REJECTED_FOR_DELAY_PERIOD = 47,
-	WLAN_STATUS_REJECT_WITH_SCHEDULE = 83,
-	WLAN_STATUS_PENDING_ADMITTING_FST_SESSION = 86,
-	WLAN_STATUS_PERFORMING_FST_NOW = 87,
-	WLAN_STATUS_PENDING_GAP_IN_BA_WINDOW = 88,
-	WLAN_STATUS_REJECT_U_PID_SETTING = 89,
-	WLAN_STATUS_REJECT_DSE_BAND = 96,
-	WLAN_STATUS_DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL = 99,
-	WLAN_STATUS_DENIED_DUE_TO_SPECTRUM_MANAGEMENT = 103,
-	WLAN_STATUS_FILS_AUTHENTICATION_FAILURE = 108,
-	WLAN_STATUS_UNKNOWN_AUTHENTICATION_SERVER = 109,
-};
-
-enum ieee80211_eid {
-	WLAN_EID_SSID = 0,
-	WLAN_EID_SUPP_RATES = 1,
-	WLAN_EID_FH_PARAMS = 2,
-	WLAN_EID_DS_PARAMS = 3,
-	WLAN_EID_CF_PARAMS = 4,
-	WLAN_EID_TIM = 5,
-	WLAN_EID_IBSS_PARAMS = 6,
-	WLAN_EID_COUNTRY = 7,
-	WLAN_EID_REQUEST = 10,
-	WLAN_EID_QBSS_LOAD = 11,
-	WLAN_EID_EDCA_PARAM_SET = 12,
-	WLAN_EID_TSPEC = 13,
-	WLAN_EID_TCLAS = 14,
-	WLAN_EID_SCHEDULE = 15,
-	WLAN_EID_CHALLENGE = 16,
-	WLAN_EID_PWR_CONSTRAINT = 32,
-	WLAN_EID_PWR_CAPABILITY = 33,
-	WLAN_EID_TPC_REQUEST = 34,
-	WLAN_EID_TPC_REPORT = 35,
-	WLAN_EID_SUPPORTED_CHANNELS = 36,
-	WLAN_EID_CHANNEL_SWITCH = 37,
-	WLAN_EID_MEASURE_REQUEST = 38,
-	WLAN_EID_MEASURE_REPORT = 39,
-	WLAN_EID_QUIET = 40,
-	WLAN_EID_IBSS_DFS = 41,
-	WLAN_EID_ERP_INFO = 42,
-	WLAN_EID_TS_DELAY = 43,
-	WLAN_EID_TCLAS_PROCESSING = 44,
-	WLAN_EID_HT_CAPABILITY = 45,
-	WLAN_EID_QOS_CAPA = 46,
-	WLAN_EID_RSN = 48,
-	WLAN_EID_802_15_COEX = 49,
-	WLAN_EID_EXT_SUPP_RATES = 50,
-	WLAN_EID_AP_CHAN_REPORT = 51,
-	WLAN_EID_NEIGHBOR_REPORT = 52,
-	WLAN_EID_RCPI = 53,
-	WLAN_EID_MOBILITY_DOMAIN = 54,
-	WLAN_EID_FAST_BSS_TRANSITION = 55,
-	WLAN_EID_TIMEOUT_INTERVAL = 56,
-	WLAN_EID_RIC_DATA = 57,
-	WLAN_EID_DSE_REGISTERED_LOCATION = 58,
-	WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
-	WLAN_EID_EXT_CHANSWITCH_ANN = 60,
-	WLAN_EID_HT_OPERATION = 61,
-	WLAN_EID_SECONDARY_CHANNEL_OFFSET = 62,
-	WLAN_EID_BSS_AVG_ACCESS_DELAY = 63,
-	WLAN_EID_ANTENNA_INFO = 64,
-	WLAN_EID_RSNI = 65,
-	WLAN_EID_MEASUREMENT_PILOT_TX_INFO = 66,
-	WLAN_EID_BSS_AVAILABLE_CAPACITY = 67,
-	WLAN_EID_BSS_AC_ACCESS_DELAY = 68,
-	WLAN_EID_TIME_ADVERTISEMENT = 69,
-	WLAN_EID_RRM_ENABLED_CAPABILITIES = 70,
-	WLAN_EID_MULTIPLE_BSSID = 71,
-	WLAN_EID_BSS_COEX_2040 = 72,
-	WLAN_EID_BSS_INTOLERANT_CHL_REPORT = 73,
-	WLAN_EID_OVERLAP_BSS_SCAN_PARAM = 74,
-	WLAN_EID_RIC_DESCRIPTOR = 75,
-	WLAN_EID_MMIE = 76,
-	WLAN_EID_ASSOC_COMEBACK_TIME = 77,
-	WLAN_EID_EVENT_REQUEST = 78,
-	WLAN_EID_EVENT_REPORT = 79,
-	WLAN_EID_DIAGNOSTIC_REQUEST = 80,
-	WLAN_EID_DIAGNOSTIC_REPORT = 81,
-	WLAN_EID_LOCATION_PARAMS = 82,
-	WLAN_EID_NON_TX_BSSID_CAP = 83,
-	WLAN_EID_SSID_LIST = 84,
-	WLAN_EID_MULTI_BSSID_IDX = 85,
-	WLAN_EID_FMS_DESCRIPTOR = 86,
-	WLAN_EID_FMS_REQUEST = 87,
-	WLAN_EID_FMS_RESPONSE = 88,
-	WLAN_EID_QOS_TRAFFIC_CAPA = 89,
-	WLAN_EID_BSS_MAX_IDLE_PERIOD = 90,
-	WLAN_EID_TSF_REQUEST = 91,
-	WLAN_EID_TSF_RESPOSNE = 92,
-	WLAN_EID_WNM_SLEEP_MODE = 93,
-	WLAN_EID_TIM_BCAST_REQ = 94,
-	WLAN_EID_TIM_BCAST_RESP = 95,
-	WLAN_EID_COLL_IF_REPORT = 96,
-	WLAN_EID_CHANNEL_USAGE = 97,
-	WLAN_EID_TIME_ZONE = 98,
-	WLAN_EID_DMS_REQUEST = 99,
-	WLAN_EID_DMS_RESPONSE = 100,
-	WLAN_EID_LINK_ID = 101,
-	WLAN_EID_WAKEUP_SCHEDUL = 102,
-	WLAN_EID_CHAN_SWITCH_TIMING = 104,
-	WLAN_EID_PTI_CONTROL = 105,
-	WLAN_EID_PU_BUFFER_STATUS = 106,
-	WLAN_EID_INTERWORKING = 107,
-	WLAN_EID_ADVERTISEMENT_PROTOCOL = 108,
-	WLAN_EID_EXPEDITED_BW_REQ = 109,
-	WLAN_EID_QOS_MAP_SET = 110,
-	WLAN_EID_ROAMING_CONSORTIUM = 111,
-	WLAN_EID_EMERGENCY_ALERT = 112,
-	WLAN_EID_MESH_CONFIG = 113,
-	WLAN_EID_MESH_ID = 114,
-	WLAN_EID_LINK_METRIC_REPORT = 115,
-	WLAN_EID_CONGESTION_NOTIFICATION = 116,
-	WLAN_EID_PEER_MGMT = 117,
-	WLAN_EID_CHAN_SWITCH_PARAM = 118,
-	WLAN_EID_MESH_AWAKE_WINDOW = 119,
-	WLAN_EID_BEACON_TIMING = 120,
-	WLAN_EID_MCCAOP_SETUP_REQ = 121,
-	WLAN_EID_MCCAOP_SETUP_RESP = 122,
-	WLAN_EID_MCCAOP_ADVERT = 123,
-	WLAN_EID_MCCAOP_TEARDOWN = 124,
-	WLAN_EID_GANN = 125,
-	WLAN_EID_RANN = 126,
-	WLAN_EID_EXT_CAPABILITY = 127,
-	WLAN_EID_PREQ = 130,
-	WLAN_EID_PREP = 131,
-	WLAN_EID_PERR = 132,
-	WLAN_EID_PXU = 137,
-	WLAN_EID_PXUC = 138,
-	WLAN_EID_AUTH_MESH_PEER_EXCH = 139,
-	WLAN_EID_MIC = 140,
-	WLAN_EID_DESTINATION_URI = 141,
-	WLAN_EID_UAPSD_COEX = 142,
-	WLAN_EID_WAKEUP_SCHEDULE = 143,
-	WLAN_EID_EXT_SCHEDULE = 144,
-	WLAN_EID_STA_AVAILABILITY = 145,
-	WLAN_EID_DMG_TSPEC = 146,
-	WLAN_EID_DMG_AT = 147,
-	WLAN_EID_DMG_CAP = 148,
-	WLAN_EID_CISCO_VENDOR_SPECIFIC = 150,
-	WLAN_EID_DMG_OPERATION = 151,
-	WLAN_EID_DMG_BSS_PARAM_CHANGE = 152,
-	WLAN_EID_DMG_BEAM_REFINEMENT = 153,
-	WLAN_EID_CHANNEL_MEASURE_FEEDBACK = 154,
-	WLAN_EID_AWAKE_WINDOW = 157,
-	WLAN_EID_MULTI_BAND = 158,
-	WLAN_EID_ADDBA_EXT = 159,
-	WLAN_EID_NEXT_PCP_LIST = 160,
-	WLAN_EID_PCP_HANDOVER = 161,
-	WLAN_EID_DMG_LINK_MARGIN = 162,
-	WLAN_EID_SWITCHING_STREAM = 163,
-	WLAN_EID_SESSION_TRANSITION = 164,
-	WLAN_EID_DYN_TONE_PAIRING_REPORT = 165,
-	WLAN_EID_CLUSTER_REPORT = 166,
-	WLAN_EID_RELAY_CAP = 167,
-	WLAN_EID_RELAY_XFER_PARAM_SET = 168,
-	WLAN_EID_BEAM_LINK_MAINT = 169,
-	WLAN_EID_MULTIPLE_MAC_ADDR = 170,
-	WLAN_EID_U_PID = 171,
-	WLAN_EID_DMG_LINK_ADAPT_ACK = 172,
-	WLAN_EID_MCCAOP_ADV_OVERVIEW = 174,
-	WLAN_EID_QUIET_PERIOD_REQ = 175,
-	WLAN_EID_QUIET_PERIOD_RESP = 177,
-	WLAN_EID_EPAC_POLICY = 182,
-	WLAN_EID_CLISTER_TIME_OFF = 183,
-	WLAN_EID_INTER_AC_PRIO = 184,
-	WLAN_EID_SCS_DESCRIPTOR = 185,
-	WLAN_EID_QLOAD_REPORT = 186,
-	WLAN_EID_HCCA_TXOP_UPDATE_COUNT = 187,
-	WLAN_EID_HL_STREAM_ID = 188,
-	WLAN_EID_GCR_GROUP_ADDR = 189,
-	WLAN_EID_ANTENNA_SECTOR_ID_PATTERN = 190,
-	WLAN_EID_VHT_CAPABILITY = 191,
-	WLAN_EID_VHT_OPERATION = 192,
-	WLAN_EID_EXTENDED_BSS_LOAD = 193,
-	WLAN_EID_WIDE_BW_CHANNEL_SWITCH = 194,
-	WLAN_EID_VHT_TX_POWER_ENVELOPE = 195,
-	WLAN_EID_CHANNEL_SWITCH_WRAPPER = 196,
-	WLAN_EID_AID = 197,
-	WLAN_EID_QUIET_CHANNEL = 198,
-	WLAN_EID_OPMODE_NOTIF = 199,
-	WLAN_EID_VENDOR_SPECIFIC = 221,
-	WLAN_EID_QOS_PARAMETER = 222,
-	WLAN_EID_CAG_NUMBER = 237,
-	WLAN_EID_AP_CSN = 239,
-	WLAN_EID_FILS_INDICATION = 240,
-	WLAN_EID_DILS = 241,
-	WLAN_EID_FRAGMENT = 242,
-	WLAN_EID_EXTENSION = 255,
-};
-
-struct element {
-	u8 id;
-	u8 datalen;
-	u8 data[0];
-};
-
-enum nl80211_he_gi {
-	NL80211_RATE_INFO_HE_GI_0_8 = 0,
-	NL80211_RATE_INFO_HE_GI_1_6 = 1,
-	NL80211_RATE_INFO_HE_GI_3_2 = 2,
-};
-
-enum nl80211_he_ru_alloc {
-	NL80211_RATE_INFO_HE_RU_ALLOC_26 = 0,
-	NL80211_RATE_INFO_HE_RU_ALLOC_52 = 1,
-	NL80211_RATE_INFO_HE_RU_ALLOC_106 = 2,
-	NL80211_RATE_INFO_HE_RU_ALLOC_242 = 3,
-	NL80211_RATE_INFO_HE_RU_ALLOC_484 = 4,
-	NL80211_RATE_INFO_HE_RU_ALLOC_996 = 5,
-	NL80211_RATE_INFO_HE_RU_ALLOC_2x996 = 6,
-};
-
-enum ieee80211_rate_flags {
-	IEEE80211_RATE_SHORT_PREAMBLE = 1,
-	IEEE80211_RATE_MANDATORY_A = 2,
-	IEEE80211_RATE_MANDATORY_B = 4,
-	IEEE80211_RATE_MANDATORY_G = 8,
-	IEEE80211_RATE_ERP_G = 16,
-	IEEE80211_RATE_SUPPORTS_5MHZ = 32,
-	IEEE80211_RATE_SUPPORTS_10MHZ = 64,
-};
-
-struct iface_combination_params {
-	int num_different_channels;
-	u8 radar_detect;
-	int iftype_num[13];
-	u32 new_beacon_int;
-};
-
-enum rate_info_flags {
-	RATE_INFO_FLAGS_MCS = 1,
-	RATE_INFO_FLAGS_VHT_MCS = 2,
-	RATE_INFO_FLAGS_SHORT_GI = 4,
-	RATE_INFO_FLAGS_DMG = 8,
-	RATE_INFO_FLAGS_HE_MCS = 16,
-	RATE_INFO_FLAGS_EDMG = 32,
-};
-
-enum rate_info_bw {
-	RATE_INFO_BW_20 = 0,
-	RATE_INFO_BW_5 = 1,
-	RATE_INFO_BW_10 = 2,
-	RATE_INFO_BW_40 = 3,
-	RATE_INFO_BW_80 = 4,
-	RATE_INFO_BW_160 = 5,
-	RATE_INFO_BW_HE_RU = 6,
-};
-
-struct iapp_layer2_update {
-	u8 da[6];
-	u8 sa[6];
-	__be16 len;
-	u8 dsap;
-	u8 ssap;
-	u8 control;
-	u8 xid_info[3];
-};
-
-enum nl80211_reg_rule_flags {
-	NL80211_RRF_NO_OFDM = 1,
-	NL80211_RRF_NO_CCK = 2,
-	NL80211_RRF_NO_INDOOR = 4,
-	NL80211_RRF_NO_OUTDOOR = 8,
-	NL80211_RRF_DFS = 16,
-	NL80211_RRF_PTP_ONLY = 32,
-	NL80211_RRF_PTMP_ONLY = 64,
-	NL80211_RRF_NO_IR = 128,
-	__NL80211_RRF_NO_IBSS = 256,
-	NL80211_RRF_AUTO_BW = 2048,
-	NL80211_RRF_IR_CONCURRENT = 4096,
-	NL80211_RRF_NO_HT40MINUS = 8192,
-	NL80211_RRF_NO_HT40PLUS = 16384,
-	NL80211_RRF_NO_80MHZ = 32768,
-	NL80211_RRF_NO_160MHZ = 65536,
-};
-
-enum nl80211_channel_type {
-	NL80211_CHAN_NO_HT = 0,
-	NL80211_CHAN_HT20 = 1,
-	NL80211_CHAN_HT40MINUS = 2,
-	NL80211_CHAN_HT40PLUS = 3,
-};
-
-enum ieee80211_channel_flags {
-	IEEE80211_CHAN_DISABLED = 1,
-	IEEE80211_CHAN_NO_IR = 2,
-	IEEE80211_CHAN_RADAR = 8,
-	IEEE80211_CHAN_NO_HT40PLUS = 16,
-	IEEE80211_CHAN_NO_HT40MINUS = 32,
-	IEEE80211_CHAN_NO_OFDM = 64,
-	IEEE80211_CHAN_NO_80MHZ = 128,
-	IEEE80211_CHAN_NO_160MHZ = 256,
-	IEEE80211_CHAN_INDOOR_ONLY = 512,
-	IEEE80211_CHAN_IR_CONCURRENT = 1024,
-	IEEE80211_CHAN_NO_20MHZ = 2048,
-	IEEE80211_CHAN_NO_10MHZ = 4096,
-};
-
-enum ieee80211_regd_source {
-	REGD_SOURCE_INTERNAL_DB = 0,
-	REGD_SOURCE_CRDA = 1,
-	REGD_SOURCE_CACHED = 2,
-};
-
-enum reg_request_treatment {
-	REG_REQ_OK = 0,
-	REG_REQ_IGNORE = 1,
-	REG_REQ_INTERSECT = 2,
-	REG_REQ_ALREADY_SET = 3,
-};
-
-struct reg_beacon {
-	struct list_head list;
-	struct ieee80211_channel chan;
-};
-
-struct reg_regdb_apply_request {
-	struct list_head list;
-	const struct ieee80211_regdomain *regdom;
-};
-
-struct fwdb_country {
-	u8 alpha2[2];
-	__be16 coll_ptr;
-};
-
-struct fwdb_header {
-	__be32 magic;
-	__be32 version;
-	struct fwdb_country country[0];
-};
-
-struct fwdb_collection {
-	u8 len;
-	u8 n_rules;
-	u8 dfs_region;
-	char: 8;
-};
-
-enum fwdb_flags {
-	FWDB_FLAG_NO_OFDM = 1,
-	FWDB_FLAG_NO_OUTDOOR = 2,
-	FWDB_FLAG_DFS = 4,
-	FWDB_FLAG_NO_IR = 8,
-	FWDB_FLAG_AUTO_BW = 16,
-};
-
-struct fwdb_wmm_ac {
-	u8 ecw;
-	u8 aifsn;
-	__be16 cot;
-};
-
-struct fwdb_wmm_rule {
-	struct fwdb_wmm_ac client[4];
-	struct fwdb_wmm_ac ap[4];
-};
-
-struct fwdb_rule {
-	u8 len;
-	u8 flags;
-	__be16 max_eirp;
-	__be32 start;
-	__be32 end;
-	__be32 max_bw;
-	__be16 cac_timeout;
-	__be16 wmm_ptr;
-};
-
-enum nl80211_scan_flags {
-	NL80211_SCAN_FLAG_LOW_PRIORITY = 1,
-	NL80211_SCAN_FLAG_FLUSH = 2,
-	NL80211_SCAN_FLAG_AP = 4,
-	NL80211_SCAN_FLAG_RANDOM_ADDR = 8,
-	NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME = 16,
-	NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 32,
-	NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 64,
-	NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 128,
-	NL80211_SCAN_FLAG_LOW_SPAN = 256,
-	NL80211_SCAN_FLAG_LOW_POWER = 512,
-	NL80211_SCAN_FLAG_HIGH_ACCURACY = 1024,
-	NL80211_SCAN_FLAG_RANDOM_SN = 2048,
-	NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 4096,
-};
-
-struct ieee80211_msrment_ie {
-	u8 token;
-	u8 mode;
-	u8 type;
-	u8 request[0];
-};
-
-struct ieee80211_ext_chansw_ie {
-	u8 mode;
-	u8 new_operating_class;
-	u8 new_ch_num;
-	u8 count;
-};
-
-struct ieee80211_tpc_report_ie {
-	u8 tx_power;
-	u8 link_margin;
-};
-
-struct ieee80211_mgmt {
-	__le16 frame_control;
-	__le16 duration;
-	u8 da[6];
-	u8 sa[6];
-	u8 bssid[6];
-	__le16 seq_ctrl;
-	union {
-		struct {
-			__le16 auth_alg;
-			__le16 auth_transaction;
-			__le16 status_code;
-			u8 variable[0];
-		} auth;
-		struct {
-			__le16 reason_code;
-		} deauth;
-		struct {
-			__le16 capab_info;
-			__le16 listen_interval;
-			u8 variable[0];
-		} assoc_req;
-		struct {
-			__le16 capab_info;
-			__le16 status_code;
-			__le16 aid;
-			u8 variable[0];
-		} assoc_resp;
-		struct {
-			__le16 capab_info;
-			__le16 status_code;
-			__le16 aid;
-			u8 variable[0];
-		} reassoc_resp;
-		struct {
-			__le16 capab_info;
-			__le16 listen_interval;
-			u8 current_ap[6];
-			u8 variable[0];
-		} reassoc_req;
-		struct {
-			__le16 reason_code;
-		} disassoc;
-		struct {
-			__le64 timestamp;
-			__le16 beacon_int;
-			__le16 capab_info;
-			u8 variable[0];
-		} __attribute__((packed)) beacon;
-		struct {
-			u8 variable[0];
-		} probe_req;
-		struct {
-			__le64 timestamp;
-			__le16 beacon_int;
-			__le16 capab_info;
-			u8 variable[0];
-		} __attribute__((packed)) probe_resp;
-		struct {
-			u8 category;
-			union {
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					u8 status_code;
-					u8 variable[0];
-				} wme_action;
-				struct {
-					u8 action_code;
-					u8 variable[0];
-				} chan_switch;
-				struct {
-					u8 action_code;
-					struct ieee80211_ext_chansw_ie data;
-					u8 variable[0];
-				} ext_chan_switch;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					u8 element_id;
-					u8 length;
-					struct ieee80211_msrment_ie msr_elem;
-				} measurement;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					__le16 capab;
-					__le16 timeout;
-					__le16 start_seq_num;
-					u8 variable[0];
-				} addba_req;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					__le16 status;
-					__le16 capab;
-					__le16 timeout;
-				} addba_resp;
-				struct {
-					u8 action_code;
-					__le16 params;
-					__le16 reason_code;
-				} __attribute__((packed)) delba;
-				struct {
-					u8 action_code;
-					u8 variable[0];
-				} self_prot;
-				struct {
-					u8 action_code;
-					u8 variable[0];
-				} mesh_action;
-				struct {
-					u8 action;
-					u8 trans_id[2];
-				} sa_query;
-				struct {
-					u8 action;
-					u8 smps_control;
-				} ht_smps;
-				struct {
-					u8 action_code;
-					u8 chanwidth;
-				} ht_notify_cw;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					__le16 capability;
-					u8 variable[0];
-				} tdls_discover_resp;
-				struct {
-					u8 action_code;
-					u8 operating_mode;
-				} vht_opmode_notif;
-				struct {
-					u8 action_code;
-					u8 membership[8];
-					u8 position[16];
-				} vht_group_notif;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					u8 tpc_elem_id;
-					u8 tpc_elem_length;
-					struct ieee80211_tpc_report_ie tpc;
-				} tpc_report;
-				struct {
-					u8 action_code;
-					u8 dialog_token;
-					u8 follow_up;
-					u8 tod[6];
-					u8 toa[6];
-					__le16 tod_error;
-					__le16 toa_error;
-					u8 variable[0];
-				} __attribute__((packed)) ftm;
-			} u;
-		} __attribute__((packed)) action;
-	} u;
-} __attribute__((packed));
-
-struct ieee80211_ht_operation {
-	u8 primary_chan;
-	u8 ht_param;
-	__le16 operation_mode;
-	__le16 stbc_param;
-	u8 basic_set[16];
-};
-
-enum ieee80211_eid_ext {
-	WLAN_EID_EXT_ASSOC_DELAY_INFO = 1,
-	WLAN_EID_EXT_FILS_REQ_PARAMS = 2,
-	WLAN_EID_EXT_FILS_KEY_CONFIRM = 3,
-	WLAN_EID_EXT_FILS_SESSION = 4,
-	WLAN_EID_EXT_FILS_HLP_CONTAINER = 5,
-	WLAN_EID_EXT_FILS_IP_ADDR_ASSIGN = 6,
-	WLAN_EID_EXT_KEY_DELIVERY = 7,
-	WLAN_EID_EXT_FILS_WRAPPED_DATA = 8,
-	WLAN_EID_EXT_FILS_PUBLIC_KEY = 12,
-	WLAN_EID_EXT_FILS_NONCE = 13,
-	WLAN_EID_EXT_FUTURE_CHAN_GUIDANCE = 14,
-	WLAN_EID_EXT_HE_CAPABILITY = 35,
-	WLAN_EID_EXT_HE_OPERATION = 36,
-	WLAN_EID_EXT_UORA = 37,
-	WLAN_EID_EXT_HE_MU_EDCA = 38,
-	WLAN_EID_EXT_HE_SPR = 39,
-	WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME = 52,
-	WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION = 55,
-	WLAN_EID_EXT_NON_INHERITANCE = 56,
-};
-
-enum ieee80211_privacy {
-	IEEE80211_PRIVACY_ON = 0,
-	IEEE80211_PRIVACY_OFF = 1,
-	IEEE80211_PRIVACY_ANY = 2,
-};
-
-struct cfg80211_inform_bss {
-	struct ieee80211_channel *chan;
-	enum nl80211_bss_scan_width scan_width;
-	s32 signal;
-	u64 boottime_ns;
-	u64 parent_tsf;
-	u8 parent_bssid[6];
-	u8 chains;
-	s8 chain_signal[4];
-};
-
-enum cfg80211_bss_frame_type {
-	CFG80211_BSS_FTYPE_UNKNOWN = 0,
-	CFG80211_BSS_FTYPE_BEACON = 1,
-	CFG80211_BSS_FTYPE_PRESP = 2,
-};
-
-enum bss_compare_mode {
-	BSS_CMP_REGULAR = 0,
-	BSS_CMP_HIDE_ZLEN = 1,
-	BSS_CMP_HIDE_NUL = 2,
-};
-
-struct cfg80211_non_tx_bss {
-	struct cfg80211_bss *tx_bss;
-	u8 max_bssid_indicator;
-	u8 bssid_index;
-};
-
-enum ieee80211_vht_mcs_support {
-	IEEE80211_VHT_MCS_SUPPORT_0_7 = 0,
-	IEEE80211_VHT_MCS_SUPPORT_0_8 = 1,
-	IEEE80211_VHT_MCS_SUPPORT_0_9 = 2,
-	IEEE80211_VHT_MCS_NOT_SUPPORTED = 3,
-};
-
-enum ieee80211_mesh_sync_method {
-	IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1,
-	IEEE80211_SYNC_METHOD_VENDOR = 255,
-};
-
-enum ieee80211_mesh_path_protocol {
-	IEEE80211_PATH_PROTOCOL_HWMP = 1,
-	IEEE80211_PATH_PROTOCOL_VENDOR = 255,
-};
-
-enum ieee80211_mesh_path_metric {
-	IEEE80211_PATH_METRIC_AIRTIME = 1,
-	IEEE80211_PATH_METRIC_VENDOR = 255,
-};
-
-enum nl80211_sta_flags {
-	__NL80211_STA_FLAG_INVALID = 0,
-	NL80211_STA_FLAG_AUTHORIZED = 1,
-	NL80211_STA_FLAG_SHORT_PREAMBLE = 2,
-	NL80211_STA_FLAG_WME = 3,
-	NL80211_STA_FLAG_MFP = 4,
-	NL80211_STA_FLAG_AUTHENTICATED = 5,
-	NL80211_STA_FLAG_TDLS_PEER = 6,
-	NL80211_STA_FLAG_ASSOCIATED = 7,
-	__NL80211_STA_FLAG_AFTER_LAST = 8,
-	NL80211_STA_FLAG_MAX = 7,
-};
-
-enum nl80211_sta_p2p_ps_status {
-	NL80211_P2P_PS_UNSUPPORTED = 0,
-	NL80211_P2P_PS_SUPPORTED = 1,
-	NUM_NL80211_P2P_PS_STATUS = 2,
-};
-
-enum nl80211_rate_info {
-	__NL80211_RATE_INFO_INVALID = 0,
-	NL80211_RATE_INFO_BITRATE = 1,
-	NL80211_RATE_INFO_MCS = 2,
-	NL80211_RATE_INFO_40_MHZ_WIDTH = 3,
-	NL80211_RATE_INFO_SHORT_GI = 4,
-	NL80211_RATE_INFO_BITRATE32 = 5,
-	NL80211_RATE_INFO_VHT_MCS = 6,
-	NL80211_RATE_INFO_VHT_NSS = 7,
-	NL80211_RATE_INFO_80_MHZ_WIDTH = 8,
-	NL80211_RATE_INFO_80P80_MHZ_WIDTH = 9,
-	NL80211_RATE_INFO_160_MHZ_WIDTH = 10,
-	NL80211_RATE_INFO_10_MHZ_WIDTH = 11,
-	NL80211_RATE_INFO_5_MHZ_WIDTH = 12,
-	NL80211_RATE_INFO_HE_MCS = 13,
-	NL80211_RATE_INFO_HE_NSS = 14,
-	NL80211_RATE_INFO_HE_GI = 15,
-	NL80211_RATE_INFO_HE_DCM = 16,
-	NL80211_RATE_INFO_HE_RU_ALLOC = 17,
-	__NL80211_RATE_INFO_AFTER_LAST = 18,
-	NL80211_RATE_INFO_MAX = 17,
-};
-
-enum nl80211_sta_bss_param {
-	__NL80211_STA_BSS_PARAM_INVALID = 0,
-	NL80211_STA_BSS_PARAM_CTS_PROT = 1,
-	NL80211_STA_BSS_PARAM_SHORT_PREAMBLE = 2,
-	NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME = 3,
-	NL80211_STA_BSS_PARAM_DTIM_PERIOD = 4,
-	NL80211_STA_BSS_PARAM_BEACON_INTERVAL = 5,
-	__NL80211_STA_BSS_PARAM_AFTER_LAST = 6,
-	NL80211_STA_BSS_PARAM_MAX = 5,
-};
-
-enum nl80211_sta_info {
-	__NL80211_STA_INFO_INVALID = 0,
-	NL80211_STA_INFO_INACTIVE_TIME = 1,
-	NL80211_STA_INFO_RX_BYTES = 2,
-	NL80211_STA_INFO_TX_BYTES = 3,
-	NL80211_STA_INFO_LLID = 4,
-	NL80211_STA_INFO_PLID = 5,
-	NL80211_STA_INFO_PLINK_STATE = 6,
-	NL80211_STA_INFO_SIGNAL = 7,
-	NL80211_STA_INFO_TX_BITRATE = 8,
-	NL80211_STA_INFO_RX_PACKETS = 9,
-	NL80211_STA_INFO_TX_PACKETS = 10,
-	NL80211_STA_INFO_TX_RETRIES = 11,
-	NL80211_STA_INFO_TX_FAILED = 12,
-	NL80211_STA_INFO_SIGNAL_AVG = 13,
-	NL80211_STA_INFO_RX_BITRATE = 14,
-	NL80211_STA_INFO_BSS_PARAM = 15,
-	NL80211_STA_INFO_CONNECTED_TIME = 16,
-	NL80211_STA_INFO_STA_FLAGS = 17,
-	NL80211_STA_INFO_BEACON_LOSS = 18,
-	NL80211_STA_INFO_T_OFFSET = 19,
-	NL80211_STA_INFO_LOCAL_PM = 20,
-	NL80211_STA_INFO_PEER_PM = 21,
-	NL80211_STA_INFO_NONPEER_PM = 22,
-	NL80211_STA_INFO_RX_BYTES64 = 23,
-	NL80211_STA_INFO_TX_BYTES64 = 24,
-	NL80211_STA_INFO_CHAIN_SIGNAL = 25,
-	NL80211_STA_INFO_CHAIN_SIGNAL_AVG = 26,
-	NL80211_STA_INFO_EXPECTED_THROUGHPUT = 27,
-	NL80211_STA_INFO_RX_DROP_MISC = 28,
-	NL80211_STA_INFO_BEACON_RX = 29,
-	NL80211_STA_INFO_BEACON_SIGNAL_AVG = 30,
-	NL80211_STA_INFO_TID_STATS = 31,
-	NL80211_STA_INFO_RX_DURATION = 32,
-	NL80211_STA_INFO_PAD = 33,
-	NL80211_STA_INFO_ACK_SIGNAL = 34,
-	NL80211_STA_INFO_ACK_SIGNAL_AVG = 35,
-	NL80211_STA_INFO_RX_MPDUS = 36,
-	NL80211_STA_INFO_FCS_ERROR_COUNT = 37,
-	NL80211_STA_INFO_CONNECTED_TO_GATE = 38,
-	NL80211_STA_INFO_TX_DURATION = 39,
-	NL80211_STA_INFO_AIRTIME_WEIGHT = 40,
-	NL80211_STA_INFO_AIRTIME_LINK_METRIC = 41,
-	NL80211_STA_INFO_ASSOC_AT_BOOTTIME = 42,
-	__NL80211_STA_INFO_AFTER_LAST = 43,
-	NL80211_STA_INFO_MAX = 42,
-};
-
-enum nl80211_tid_stats {
-	__NL80211_TID_STATS_INVALID = 0,
-	NL80211_TID_STATS_RX_MSDU = 1,
-	NL80211_TID_STATS_TX_MSDU = 2,
-	NL80211_TID_STATS_TX_MSDU_RETRIES = 3,
-	NL80211_TID_STATS_TX_MSDU_FAILED = 4,
-	NL80211_TID_STATS_PAD = 5,
-	NL80211_TID_STATS_TXQ_STATS = 6,
-	NUM_NL80211_TID_STATS = 7,
-	NL80211_TID_STATS_MAX = 6,
-};
-
-enum nl80211_txq_stats {
-	__NL80211_TXQ_STATS_INVALID = 0,
-	NL80211_TXQ_STATS_BACKLOG_BYTES = 1,
-	NL80211_TXQ_STATS_BACKLOG_PACKETS = 2,
-	NL80211_TXQ_STATS_FLOWS = 3,
-	NL80211_TXQ_STATS_DROPS = 4,
-	NL80211_TXQ_STATS_ECN_MARKS = 5,
-	NL80211_TXQ_STATS_OVERLIMIT = 6,
-	NL80211_TXQ_STATS_OVERMEMORY = 7,
-	NL80211_TXQ_STATS_COLLISIONS = 8,
-	NL80211_TXQ_STATS_TX_BYTES = 9,
-	NL80211_TXQ_STATS_TX_PACKETS = 10,
-	NL80211_TXQ_STATS_MAX_FLOWS = 11,
-	NUM_NL80211_TXQ_STATS = 12,
-	NL80211_TXQ_STATS_MAX = 11,
-};
-
-enum nl80211_mpath_info {
-	__NL80211_MPATH_INFO_INVALID = 0,
-	NL80211_MPATH_INFO_FRAME_QLEN = 1,
-	NL80211_MPATH_INFO_SN = 2,
-	NL80211_MPATH_INFO_METRIC = 3,
-	NL80211_MPATH_INFO_EXPTIME = 4,
-	NL80211_MPATH_INFO_FLAGS = 5,
-	NL80211_MPATH_INFO_DISCOVERY_TIMEOUT = 6,
-	NL80211_MPATH_INFO_DISCOVERY_RETRIES = 7,
-	NL80211_MPATH_INFO_HOP_COUNT = 8,
-	NL80211_MPATH_INFO_PATH_CHANGE = 9,
-	__NL80211_MPATH_INFO_AFTER_LAST = 10,
-	NL80211_MPATH_INFO_MAX = 9,
-};
-
-enum nl80211_band_iftype_attr {
-	__NL80211_BAND_IFTYPE_ATTR_INVALID = 0,
-	NL80211_BAND_IFTYPE_ATTR_IFTYPES = 1,
-	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 2,
-	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 3,
-	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 4,
-	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 5,
-	__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST = 6,
-	NL80211_BAND_IFTYPE_ATTR_MAX = 5,
-};
-
-enum nl80211_band_attr {
-	__NL80211_BAND_ATTR_INVALID = 0,
-	NL80211_BAND_ATTR_FREQS = 1,
-	NL80211_BAND_ATTR_RATES = 2,
-	NL80211_BAND_ATTR_HT_MCS_SET = 3,
-	NL80211_BAND_ATTR_HT_CAPA = 4,
-	NL80211_BAND_ATTR_HT_AMPDU_FACTOR = 5,
-	NL80211_BAND_ATTR_HT_AMPDU_DENSITY = 6,
-	NL80211_BAND_ATTR_VHT_MCS_SET = 7,
-	NL80211_BAND_ATTR_VHT_CAPA = 8,
-	NL80211_BAND_ATTR_IFTYPE_DATA = 9,
-	NL80211_BAND_ATTR_EDMG_CHANNELS = 10,
-	NL80211_BAND_ATTR_EDMG_BW_CONFIG = 11,
-	__NL80211_BAND_ATTR_AFTER_LAST = 12,
-	NL80211_BAND_ATTR_MAX = 11,
-};
-
-enum nl80211_wmm_rule {
-	__NL80211_WMMR_INVALID = 0,
-	NL80211_WMMR_CW_MIN = 1,
-	NL80211_WMMR_CW_MAX = 2,
-	NL80211_WMMR_AIFSN = 3,
-	NL80211_WMMR_TXOP = 4,
-	__NL80211_WMMR_LAST = 5,
-	NL80211_WMMR_MAX = 4,
-};
-
-enum nl80211_frequency_attr {
-	__NL80211_FREQUENCY_ATTR_INVALID = 0,
-	NL80211_FREQUENCY_ATTR_FREQ = 1,
-	NL80211_FREQUENCY_ATTR_DISABLED = 2,
-	NL80211_FREQUENCY_ATTR_NO_IR = 3,
-	__NL80211_FREQUENCY_ATTR_NO_IBSS = 4,
-	NL80211_FREQUENCY_ATTR_RADAR = 5,
-	NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 6,
-	NL80211_FREQUENCY_ATTR_DFS_STATE = 7,
-	NL80211_FREQUENCY_ATTR_DFS_TIME = 8,
-	NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 9,
-	NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 10,
-	NL80211_FREQUENCY_ATTR_NO_80MHZ = 11,
-	NL80211_FREQUENCY_ATTR_NO_160MHZ = 12,
-	NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 13,
-	NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 14,
-	NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 15,
-	NL80211_FREQUENCY_ATTR_NO_20MHZ = 16,
-	NL80211_FREQUENCY_ATTR_NO_10MHZ = 17,
-	NL80211_FREQUENCY_ATTR_WMM = 18,
-	__NL80211_FREQUENCY_ATTR_AFTER_LAST = 19,
-	NL80211_FREQUENCY_ATTR_MAX = 18,
-};
-
-enum nl80211_bitrate_attr {
-	__NL80211_BITRATE_ATTR_INVALID = 0,
-	NL80211_BITRATE_ATTR_RATE = 1,
-	NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 2,
-	__NL80211_BITRATE_ATTR_AFTER_LAST = 3,
-	NL80211_BITRATE_ATTR_MAX = 2,
-};
-
-enum nl80211_reg_type {
-	NL80211_REGDOM_TYPE_COUNTRY = 0,
-	NL80211_REGDOM_TYPE_WORLD = 1,
-	NL80211_REGDOM_TYPE_CUSTOM_WORLD = 2,
-	NL80211_REGDOM_TYPE_INTERSECTION = 3,
-};
-
-enum nl80211_reg_rule_attr {
-	__NL80211_REG_RULE_ATTR_INVALID = 0,
-	NL80211_ATTR_REG_RULE_FLAGS = 1,
-	NL80211_ATTR_FREQ_RANGE_START = 2,
-	NL80211_ATTR_FREQ_RANGE_END = 3,
-	NL80211_ATTR_FREQ_RANGE_MAX_BW = 4,
-	NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 5,
-	NL80211_ATTR_POWER_RULE_MAX_EIRP = 6,
-	NL80211_ATTR_DFS_CAC_TIME = 7,
-	__NL80211_REG_RULE_ATTR_AFTER_LAST = 8,
-	NL80211_REG_RULE_ATTR_MAX = 7,
-};
-
-enum nl80211_sched_scan_match_attr {
-	__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID = 0,
-	NL80211_SCHED_SCAN_MATCH_ATTR_SSID = 1,
-	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI = 2,
-	NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI = 3,
-	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST = 4,
-	NL80211_SCHED_SCAN_MATCH_ATTR_BSSID = 5,
-	NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI = 6,
-	__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST = 7,
-	NL80211_SCHED_SCAN_MATCH_ATTR_MAX = 6,
-};
-
-enum nl80211_survey_info {
-	__NL80211_SURVEY_INFO_INVALID = 0,
-	NL80211_SURVEY_INFO_FREQUENCY = 1,
-	NL80211_SURVEY_INFO_NOISE = 2,
-	NL80211_SURVEY_INFO_IN_USE = 3,
-	NL80211_SURVEY_INFO_TIME = 4,
-	NL80211_SURVEY_INFO_TIME_BUSY = 5,
-	NL80211_SURVEY_INFO_TIME_EXT_BUSY = 6,
-	NL80211_SURVEY_INFO_TIME_RX = 7,
-	NL80211_SURVEY_INFO_TIME_TX = 8,
-	NL80211_SURVEY_INFO_TIME_SCAN = 9,
-	NL80211_SURVEY_INFO_PAD = 10,
-	NL80211_SURVEY_INFO_TIME_BSS_RX = 11,
-	__NL80211_SURVEY_INFO_AFTER_LAST = 12,
-	NL80211_SURVEY_INFO_MAX = 11,
-};
-
-enum nl80211_meshconf_params {
-	__NL80211_MESHCONF_INVALID = 0,
-	NL80211_MESHCONF_RETRY_TIMEOUT = 1,
-	NL80211_MESHCONF_CONFIRM_TIMEOUT = 2,
-	NL80211_MESHCONF_HOLDING_TIMEOUT = 3,
-	NL80211_MESHCONF_MAX_PEER_LINKS = 4,
-	NL80211_MESHCONF_MAX_RETRIES = 5,
-	NL80211_MESHCONF_TTL = 6,
-	NL80211_MESHCONF_AUTO_OPEN_PLINKS = 7,
-	NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES = 8,
-	NL80211_MESHCONF_PATH_REFRESH_TIME = 9,
-	NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT = 10,
-	NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT = 11,
-	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL = 12,
-	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME = 13,
-	NL80211_MESHCONF_HWMP_ROOTMODE = 14,
-	NL80211_MESHCONF_ELEMENT_TTL = 15,
-	NL80211_MESHCONF_HWMP_RANN_INTERVAL = 16,
-	NL80211_MESHCONF_GATE_ANNOUNCEMENTS = 17,
-	NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL = 18,
-	NL80211_MESHCONF_FORWARDING = 19,
-	NL80211_MESHCONF_RSSI_THRESHOLD = 20,
-	NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR = 21,
-	NL80211_MESHCONF_HT_OPMODE = 22,
-	NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT = 23,
-	NL80211_MESHCONF_HWMP_ROOT_INTERVAL = 24,
-	NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL = 25,
-	NL80211_MESHCONF_POWER_MODE = 26,
-	NL80211_MESHCONF_AWAKE_WINDOW = 27,
-	NL80211_MESHCONF_PLINK_TIMEOUT = 28,
-	NL80211_MESHCONF_CONNECTED_TO_GATE = 29,
-	__NL80211_MESHCONF_ATTR_AFTER_LAST = 30,
-	NL80211_MESHCONF_ATTR_MAX = 29,
-};
-
-enum nl80211_mesh_setup_params {
-	__NL80211_MESH_SETUP_INVALID = 0,
-	NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL = 1,
-	NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC = 2,
-	NL80211_MESH_SETUP_IE = 3,
-	NL80211_MESH_SETUP_USERSPACE_AUTH = 4,
-	NL80211_MESH_SETUP_USERSPACE_AMPE = 5,
-	NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC = 6,
-	NL80211_MESH_SETUP_USERSPACE_MPM = 7,
-	NL80211_MESH_SETUP_AUTH_PROTOCOL = 8,
-	__NL80211_MESH_SETUP_ATTR_AFTER_LAST = 9,
-	NL80211_MESH_SETUP_ATTR_MAX = 8,
-};
-
-enum nl80211_txq_attr {
-	__NL80211_TXQ_ATTR_INVALID = 0,
-	NL80211_TXQ_ATTR_AC = 1,
-	NL80211_TXQ_ATTR_TXOP = 2,
-	NL80211_TXQ_ATTR_CWMIN = 3,
-	NL80211_TXQ_ATTR_CWMAX = 4,
-	NL80211_TXQ_ATTR_AIFS = 5,
-	__NL80211_TXQ_ATTR_AFTER_LAST = 6,
-	NL80211_TXQ_ATTR_MAX = 5,
-};
-
-enum nl80211_bss {
-	__NL80211_BSS_INVALID = 0,
-	NL80211_BSS_BSSID = 1,
-	NL80211_BSS_FREQUENCY = 2,
-	NL80211_BSS_TSF = 3,
-	NL80211_BSS_BEACON_INTERVAL = 4,
-	NL80211_BSS_CAPABILITY = 5,
-	NL80211_BSS_INFORMATION_ELEMENTS = 6,
-	NL80211_BSS_SIGNAL_MBM = 7,
-	NL80211_BSS_SIGNAL_UNSPEC = 8,
-	NL80211_BSS_STATUS = 9,
-	NL80211_BSS_SEEN_MS_AGO = 10,
-	NL80211_BSS_BEACON_IES = 11,
-	NL80211_BSS_CHAN_WIDTH = 12,
-	NL80211_BSS_BEACON_TSF = 13,
-	NL80211_BSS_PRESP_DATA = 14,
-	NL80211_BSS_LAST_SEEN_BOOTTIME = 15,
-	NL80211_BSS_PAD = 16,
-	NL80211_BSS_PARENT_TSF = 17,
-	NL80211_BSS_PARENT_BSSID = 18,
-	NL80211_BSS_CHAIN_SIGNAL = 19,
-	__NL80211_BSS_AFTER_LAST = 20,
-	NL80211_BSS_MAX = 19,
-};
-
-enum nl80211_bss_status {
-	NL80211_BSS_STATUS_AUTHENTICATED = 0,
-	NL80211_BSS_STATUS_ASSOCIATED = 1,
-	NL80211_BSS_STATUS_IBSS_JOINED = 2,
-};
-
-enum nl80211_key_type {
-	NL80211_KEYTYPE_GROUP = 0,
-	NL80211_KEYTYPE_PAIRWISE = 1,
-	NL80211_KEYTYPE_PEERKEY = 2,
-	NUM_NL80211_KEYTYPES = 3,
-};
-
-enum nl80211_wpa_versions {
-	NL80211_WPA_VERSION_1 = 1,
-	NL80211_WPA_VERSION_2 = 2,
-	NL80211_WPA_VERSION_3 = 4,
-};
-
-enum nl80211_key_default_types {
-	__NL80211_KEY_DEFAULT_TYPE_INVALID = 0,
-	NL80211_KEY_DEFAULT_TYPE_UNICAST = 1,
-	NL80211_KEY_DEFAULT_TYPE_MULTICAST = 2,
-	NUM_NL80211_KEY_DEFAULT_TYPES = 3,
-};
-
-enum nl80211_key_attributes {
-	__NL80211_KEY_INVALID = 0,
-	NL80211_KEY_DATA = 1,
-	NL80211_KEY_IDX = 2,
-	NL80211_KEY_CIPHER = 3,
-	NL80211_KEY_SEQ = 4,
-	NL80211_KEY_DEFAULT = 5,
-	NL80211_KEY_DEFAULT_MGMT = 6,
-	NL80211_KEY_TYPE = 7,
-	NL80211_KEY_DEFAULT_TYPES = 8,
-	NL80211_KEY_MODE = 9,
-	__NL80211_KEY_AFTER_LAST = 10,
-	NL80211_KEY_MAX = 9,
-};
-
-enum nl80211_tx_rate_attributes {
-	__NL80211_TXRATE_INVALID = 0,
-	NL80211_TXRATE_LEGACY = 1,
-	NL80211_TXRATE_HT = 2,
-	NL80211_TXRATE_VHT = 3,
-	NL80211_TXRATE_GI = 4,
-	__NL80211_TXRATE_AFTER_LAST = 5,
-	NL80211_TXRATE_MAX = 4,
-};
-
-struct nl80211_txrate_vht {
-	__u16 mcs[8];
-};
-
-enum nl80211_ps_state {
-	NL80211_PS_DISABLED = 0,
-	NL80211_PS_ENABLED = 1,
-};
-
-enum nl80211_attr_cqm {
-	__NL80211_ATTR_CQM_INVALID = 0,
-	NL80211_ATTR_CQM_RSSI_THOLD = 1,
-	NL80211_ATTR_CQM_RSSI_HYST = 2,
-	NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT = 3,
-	NL80211_ATTR_CQM_PKT_LOSS_EVENT = 4,
-	NL80211_ATTR_CQM_TXE_RATE = 5,
-	NL80211_ATTR_CQM_TXE_PKTS = 6,
-	NL80211_ATTR_CQM_TXE_INTVL = 7,
-	NL80211_ATTR_CQM_BEACON_LOSS_EVENT = 8,
-	NL80211_ATTR_CQM_RSSI_LEVEL = 9,
-	__NL80211_ATTR_CQM_AFTER_LAST = 10,
-	NL80211_ATTR_CQM_MAX = 9,
-};
-
-enum nl80211_cqm_rssi_threshold_event {
-	NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW = 0,
-	NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH = 1,
-	NL80211_CQM_RSSI_BEACON_LOSS_EVENT = 2,
-};
-
-enum nl80211_packet_pattern_attr {
-	__NL80211_PKTPAT_INVALID = 0,
-	NL80211_PKTPAT_MASK = 1,
-	NL80211_PKTPAT_PATTERN = 2,
-	NL80211_PKTPAT_OFFSET = 3,
-	NUM_NL80211_PKTPAT = 4,
-	MAX_NL80211_PKTPAT = 3,
-};
-
-struct nl80211_pattern_support {
-	__u32 max_patterns;
-	__u32 min_pattern_len;
-	__u32 max_pattern_len;
-	__u32 max_pkt_offset;
-};
-
-enum nl80211_wowlan_triggers {
-	__NL80211_WOWLAN_TRIG_INVALID = 0,
-	NL80211_WOWLAN_TRIG_ANY = 1,
-	NL80211_WOWLAN_TRIG_DISCONNECT = 2,
-	NL80211_WOWLAN_TRIG_MAGIC_PKT = 3,
-	NL80211_WOWLAN_TRIG_PKT_PATTERN = 4,
-	NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED = 5,
-	NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE = 6,
-	NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST = 7,
-	NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE = 8,
-	NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 9,
-	NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 10,
-	NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 11,
-	NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 12,
-	NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN = 13,
-	NL80211_WOWLAN_TRIG_TCP_CONNECTION = 14,
-	NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH = 15,
-	NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST = 16,
-	NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS = 17,
-	NL80211_WOWLAN_TRIG_NET_DETECT = 18,
-	NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS = 19,
-	NUM_NL80211_WOWLAN_TRIG = 20,
-	MAX_NL80211_WOWLAN_TRIG = 19,
-};
-
-enum nl80211_wowlan_tcp_attrs {
-	__NL80211_WOWLAN_TCP_INVALID = 0,
-	NL80211_WOWLAN_TCP_SRC_IPV4 = 1,
-	NL80211_WOWLAN_TCP_DST_IPV4 = 2,
-	NL80211_WOWLAN_TCP_DST_MAC = 3,
-	NL80211_WOWLAN_TCP_SRC_PORT = 4,
-	NL80211_WOWLAN_TCP_DST_PORT = 5,
-	NL80211_WOWLAN_TCP_DATA_PAYLOAD = 6,
-	NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ = 7,
-	NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN = 8,
-	NL80211_WOWLAN_TCP_DATA_INTERVAL = 9,
-	NL80211_WOWLAN_TCP_WAKE_PAYLOAD = 10,
-	NL80211_WOWLAN_TCP_WAKE_MASK = 11,
-	NUM_NL80211_WOWLAN_TCP = 12,
-	MAX_NL80211_WOWLAN_TCP = 11,
-};
-
-struct nl80211_coalesce_rule_support {
-	__u32 max_rules;
-	struct nl80211_pattern_support pat;
-	__u32 max_delay;
-};
-
-enum nl80211_attr_coalesce_rule {
-	__NL80211_COALESCE_RULE_INVALID = 0,
-	NL80211_ATTR_COALESCE_RULE_DELAY = 1,
-	NL80211_ATTR_COALESCE_RULE_CONDITION = 2,
-	NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 3,
-	NUM_NL80211_ATTR_COALESCE_RULE = 4,
-	NL80211_ATTR_COALESCE_RULE_MAX = 3,
-};
-
-enum nl80211_iface_limit_attrs {
-	NL80211_IFACE_LIMIT_UNSPEC = 0,
-	NL80211_IFACE_LIMIT_MAX = 1,
-	NL80211_IFACE_LIMIT_TYPES = 2,
-	NUM_NL80211_IFACE_LIMIT = 3,
-	MAX_NL80211_IFACE_LIMIT = 2,
-};
-
-enum nl80211_if_combination_attrs {
-	NL80211_IFACE_COMB_UNSPEC = 0,
-	NL80211_IFACE_COMB_LIMITS = 1,
-	NL80211_IFACE_COMB_MAXNUM = 2,
-	NL80211_IFACE_COMB_STA_AP_BI_MATCH = 3,
-	NL80211_IFACE_COMB_NUM_CHANNELS = 4,
-	NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS = 5,
-	NL80211_IFACE_COMB_RADAR_DETECT_REGIONS = 6,
-	NL80211_IFACE_COMB_BI_MIN_GCD = 7,
-	NUM_NL80211_IFACE_COMB = 8,
-	MAX_NL80211_IFACE_COMB = 7,
-};
-
-enum nl80211_plink_state {
-	NL80211_PLINK_LISTEN = 0,
-	NL80211_PLINK_OPN_SNT = 1,
-	NL80211_PLINK_OPN_RCVD = 2,
-	NL80211_PLINK_CNF_RCVD = 3,
-	NL80211_PLINK_ESTAB = 4,
-	NL80211_PLINK_HOLDING = 5,
-	NL80211_PLINK_BLOCKED = 6,
-	NUM_NL80211_PLINK_STATES = 7,
-	MAX_NL80211_PLINK_STATES = 6,
-};
-
-enum plink_actions {
-	NL80211_PLINK_ACTION_NO_ACTION = 0,
-	NL80211_PLINK_ACTION_OPEN = 1,
-	NL80211_PLINK_ACTION_BLOCK = 2,
-	NUM_NL80211_PLINK_ACTIONS = 3,
-};
-
-enum nl80211_rekey_data {
-	__NL80211_REKEY_DATA_INVALID = 0,
-	NL80211_REKEY_DATA_KEK = 1,
-	NL80211_REKEY_DATA_KCK = 2,
-	NL80211_REKEY_DATA_REPLAY_CTR = 3,
-	NUM_NL80211_REKEY_DATA = 4,
-	MAX_NL80211_REKEY_DATA = 3,
-};
-
-enum nl80211_sta_wme_attr {
-	__NL80211_STA_WME_INVALID = 0,
-	NL80211_STA_WME_UAPSD_QUEUES = 1,
-	NL80211_STA_WME_MAX_SP = 2,
-	__NL80211_STA_WME_AFTER_LAST = 3,
-	NL80211_STA_WME_MAX = 2,
-};
-
-enum nl80211_pmksa_candidate_attr {
-	__NL80211_PMKSA_CANDIDATE_INVALID = 0,
-	NL80211_PMKSA_CANDIDATE_INDEX = 1,
-	NL80211_PMKSA_CANDIDATE_BSSID = 2,
-	NL80211_PMKSA_CANDIDATE_PREAUTH = 3,
-	NUM_NL80211_PMKSA_CANDIDATE = 4,
-	MAX_NL80211_PMKSA_CANDIDATE = 3,
-};
-
-enum nl80211_connect_failed_reason {
-	NL80211_CONN_FAIL_MAX_CLIENTS = 0,
-	NL80211_CONN_FAIL_BLOCKED_CLIENT = 1,
-};
-
-enum nl80211_protocol_features {
-	NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 1,
-};
-
-enum nl80211_sched_scan_plan {
-	__NL80211_SCHED_SCAN_PLAN_INVALID = 0,
-	NL80211_SCHED_SCAN_PLAN_INTERVAL = 1,
-	NL80211_SCHED_SCAN_PLAN_ITERATIONS = 2,
-	__NL80211_SCHED_SCAN_PLAN_AFTER_LAST = 3,
-	NL80211_SCHED_SCAN_PLAN_MAX = 2,
-};
-
-struct nl80211_bss_select_rssi_adjust {
-	__u8 band;
-	__s8 delta;
-};
-
-enum nl80211_nan_publish_type {
-	NL80211_NAN_SOLICITED_PUBLISH = 1,
-	NL80211_NAN_UNSOLICITED_PUBLISH = 2,
-};
-
-enum nl80211_nan_func_term_reason {
-	NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0,
-	NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 1,
-	NL80211_NAN_FUNC_TERM_REASON_ERROR = 2,
-};
-
-enum nl80211_nan_func_attributes {
-	__NL80211_NAN_FUNC_INVALID = 0,
-	NL80211_NAN_FUNC_TYPE = 1,
-	NL80211_NAN_FUNC_SERVICE_ID = 2,
-	NL80211_NAN_FUNC_PUBLISH_TYPE = 3,
-	NL80211_NAN_FUNC_PUBLISH_BCAST = 4,
-	NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE = 5,
-	NL80211_NAN_FUNC_FOLLOW_UP_ID = 6,
-	NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID = 7,
-	NL80211_NAN_FUNC_FOLLOW_UP_DEST = 8,
-	NL80211_NAN_FUNC_CLOSE_RANGE = 9,
-	NL80211_NAN_FUNC_TTL = 10,
-	NL80211_NAN_FUNC_SERVICE_INFO = 11,
-	NL80211_NAN_FUNC_SRF = 12,
-	NL80211_NAN_FUNC_RX_MATCH_FILTER = 13,
-	NL80211_NAN_FUNC_TX_MATCH_FILTER = 14,
-	NL80211_NAN_FUNC_INSTANCE_ID = 15,
-	NL80211_NAN_FUNC_TERM_REASON = 16,
-	NUM_NL80211_NAN_FUNC_ATTR = 17,
-	NL80211_NAN_FUNC_ATTR_MAX = 16,
-};
-
-enum nl80211_nan_srf_attributes {
-	__NL80211_NAN_SRF_INVALID = 0,
-	NL80211_NAN_SRF_INCLUDE = 1,
-	NL80211_NAN_SRF_BF = 2,
-	NL80211_NAN_SRF_BF_IDX = 3,
-	NL80211_NAN_SRF_MAC_ADDRS = 4,
-	NUM_NL80211_NAN_SRF_ATTR = 5,
-	NL80211_NAN_SRF_ATTR_MAX = 4,
-};
-
-enum nl80211_nan_match_attributes {
-	__NL80211_NAN_MATCH_INVALID = 0,
-	NL80211_NAN_MATCH_FUNC_LOCAL = 1,
-	NL80211_NAN_MATCH_FUNC_PEER = 2,
-	NUM_NL80211_NAN_MATCH_ATTR = 3,
-	NL80211_NAN_MATCH_ATTR_MAX = 2,
-};
-
-enum nl80211_ftm_responder_attributes {
-	__NL80211_FTM_RESP_ATTR_INVALID = 0,
-	NL80211_FTM_RESP_ATTR_ENABLED = 1,
-	NL80211_FTM_RESP_ATTR_LCI = 2,
-	NL80211_FTM_RESP_ATTR_CIVICLOC = 3,
-	__NL80211_FTM_RESP_ATTR_LAST = 4,
-	NL80211_FTM_RESP_ATTR_MAX = 3,
-};
-
-enum nl80211_ftm_responder_stats {
-	__NL80211_FTM_STATS_INVALID = 0,
-	NL80211_FTM_STATS_SUCCESS_NUM = 1,
-	NL80211_FTM_STATS_PARTIAL_NUM = 2,
-	NL80211_FTM_STATS_FAILED_NUM = 3,
-	NL80211_FTM_STATS_ASAP_NUM = 4,
-	NL80211_FTM_STATS_NON_ASAP_NUM = 5,
-	NL80211_FTM_STATS_TOTAL_DURATION_MSEC = 6,
-	NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM = 7,
-	NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM = 8,
-	NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM = 9,
-	NL80211_FTM_STATS_PAD = 10,
-	__NL80211_FTM_STATS_AFTER_LAST = 11,
-	NL80211_FTM_STATS_MAX = 10,
-};
-
-enum nl80211_peer_measurement_type {
-	NL80211_PMSR_TYPE_INVALID = 0,
-	NL80211_PMSR_TYPE_FTM = 1,
-	NUM_NL80211_PMSR_TYPES = 2,
-	NL80211_PMSR_TYPE_MAX = 1,
-};
-
-enum nl80211_peer_measurement_req {
-	__NL80211_PMSR_REQ_ATTR_INVALID = 0,
-	NL80211_PMSR_REQ_ATTR_DATA = 1,
-	NL80211_PMSR_REQ_ATTR_GET_AP_TSF = 2,
-	NUM_NL80211_PMSR_REQ_ATTRS = 3,
-	NL80211_PMSR_REQ_ATTR_MAX = 2,
-};
-
-enum nl80211_peer_measurement_peer_attrs {
-	__NL80211_PMSR_PEER_ATTR_INVALID = 0,
-	NL80211_PMSR_PEER_ATTR_ADDR = 1,
-	NL80211_PMSR_PEER_ATTR_CHAN = 2,
-	NL80211_PMSR_PEER_ATTR_REQ = 3,
-	NL80211_PMSR_PEER_ATTR_RESP = 4,
-	NUM_NL80211_PMSR_PEER_ATTRS = 5,
-	NL80211_PMSR_PEER_ATTR_MAX = 4,
-};
-
-enum nl80211_peer_measurement_attrs {
-	__NL80211_PMSR_ATTR_INVALID = 0,
-	NL80211_PMSR_ATTR_MAX_PEERS = 1,
-	NL80211_PMSR_ATTR_REPORT_AP_TSF = 2,
-	NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 3,
-	NL80211_PMSR_ATTR_TYPE_CAPA = 4,
-	NL80211_PMSR_ATTR_PEERS = 5,
-	NUM_NL80211_PMSR_ATTR = 6,
-	NL80211_PMSR_ATTR_MAX = 5,
-};
-
-enum nl80211_peer_measurement_ftm_capa {
-	__NL80211_PMSR_FTM_CAPA_ATTR_INVALID = 0,
-	NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 1,
-	NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 2,
-	NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI = 3,
-	NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC = 4,
-	NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES = 5,
-	NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 6,
-	NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 7,
-	NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 8,
-	NUM_NL80211_PMSR_FTM_CAPA_ATTR = 9,
-	NL80211_PMSR_FTM_CAPA_ATTR_MAX = 8,
-};
-
-enum nl80211_peer_measurement_ftm_req {
-	__NL80211_PMSR_FTM_REQ_ATTR_INVALID = 0,
-	NL80211_PMSR_FTM_REQ_ATTR_ASAP = 1,
-	NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE = 2,
-	NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 3,
-	NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 4,
-	NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 5,
-	NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 6,
-	NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 7,
-	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI = 8,
-	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC = 9,
-	NUM_NL80211_PMSR_FTM_REQ_ATTR = 10,
-	NL80211_PMSR_FTM_REQ_ATTR_MAX = 9,
-};
-
-enum nl80211_obss_pd_attributes {
-	__NL80211_HE_OBSS_PD_ATTR_INVALID = 0,
-	NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET = 1,
-	NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET = 2,
-	__NL80211_HE_OBSS_PD_ATTR_LAST = 3,
-	NL80211_HE_OBSS_PD_ATTR_MAX = 2,
-};
-
-enum survey_info_flags {
-	SURVEY_INFO_NOISE_DBM = 1,
-	SURVEY_INFO_IN_USE = 2,
-	SURVEY_INFO_TIME = 4,
-	SURVEY_INFO_TIME_BUSY = 8,
-	SURVEY_INFO_TIME_EXT_BUSY = 16,
-	SURVEY_INFO_TIME_RX = 32,
-	SURVEY_INFO_TIME_TX = 64,
-	SURVEY_INFO_TIME_SCAN = 128,
-	SURVEY_INFO_TIME_BSS_RX = 256,
-};
-
-enum cfg80211_ap_settings_flags {
-	AP_SETTINGS_EXTERNAL_AUTH_SUPPORT = 1,
-};
-
-enum station_parameters_apply_mask {
-	STATION_PARAM_APPLY_UAPSD = 1,
-	STATION_PARAM_APPLY_CAPABILITY = 2,
-	STATION_PARAM_APPLY_PLINK_STATE = 4,
-	STATION_PARAM_APPLY_STA_TXPOWER = 8,
-};
-
-enum cfg80211_station_type {
-	CFG80211_STA_AP_CLIENT = 0,
-	CFG80211_STA_AP_CLIENT_UNASSOC = 1,
-	CFG80211_STA_AP_MLME_CLIENT = 2,
-	CFG80211_STA_AP_STA = 3,
-	CFG80211_STA_IBSS = 4,
-	CFG80211_STA_TDLS_PEER_SETUP = 5,
-	CFG80211_STA_TDLS_PEER_ACTIVE = 6,
-	CFG80211_STA_MESH_PEER_KERNEL = 7,
-	CFG80211_STA_MESH_PEER_USER = 8,
-};
-
-enum bss_param_flags {
-	BSS_PARAM_FLAGS_CTS_PROT = 1,
-	BSS_PARAM_FLAGS_SHORT_PREAMBLE = 2,
-	BSS_PARAM_FLAGS_SHORT_SLOT_TIME = 4,
-};
-
-enum monitor_flags {
-	MONITOR_FLAG_CHANGED = 1,
-	MONITOR_FLAG_FCSFAIL = 2,
-	MONITOR_FLAG_PLCPFAIL = 4,
-	MONITOR_FLAG_CONTROL = 8,
-	MONITOR_FLAG_OTHER_BSS = 16,
-	MONITOR_FLAG_COOK_FRAMES = 32,
-	MONITOR_FLAG_ACTIVE = 64,
-};
-
-enum mpath_info_flags {
-	MPATH_INFO_FRAME_QLEN = 1,
-	MPATH_INFO_SN = 2,
-	MPATH_INFO_METRIC = 4,
-	MPATH_INFO_EXPTIME = 8,
-	MPATH_INFO_DISCOVERY_TIMEOUT = 16,
-	MPATH_INFO_DISCOVERY_RETRIES = 32,
-	MPATH_INFO_FLAGS = 64,
-	MPATH_INFO_HOP_COUNT = 128,
-	MPATH_INFO_PATH_CHANGE = 256,
-};
-
-enum cfg80211_assoc_req_flags {
-	ASSOC_REQ_DISABLE_HT = 1,
-	ASSOC_REQ_DISABLE_VHT = 2,
-	ASSOC_REQ_USE_RRM = 4,
-	CONNECT_REQ_EXTERNAL_AUTH_SUPPORT = 8,
-};
-
-enum cfg80211_connect_params_changed {
-	UPDATE_ASSOC_IES = 1,
-	UPDATE_FILS_ERP_INFO = 2,
-	UPDATE_AUTH_TYPE = 4,
-};
-
-enum wiphy_params_flags {
-	WIPHY_PARAM_RETRY_SHORT = 1,
-	WIPHY_PARAM_RETRY_LONG = 2,
-	WIPHY_PARAM_FRAG_THRESHOLD = 4,
-	WIPHY_PARAM_RTS_THRESHOLD = 8,
-	WIPHY_PARAM_COVERAGE_CLASS = 16,
-	WIPHY_PARAM_DYN_ACK = 32,
-	WIPHY_PARAM_TXQ_LIMIT = 64,
-	WIPHY_PARAM_TXQ_MEMORY_LIMIT = 128,
-	WIPHY_PARAM_TXQ_QUANTUM = 256,
-};
-
-struct cfg80211_wowlan_nd_match {
-	struct cfg80211_ssid ssid;
-	int n_channels;
-	u32 channels[0];
-};
-
-struct cfg80211_wowlan_nd_info {
-	int n_matches;
-	struct cfg80211_wowlan_nd_match *matches[0];
-};
-
-struct cfg80211_wowlan_wakeup {
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	bool packet_80211;
-	bool tcp_match;
-	bool tcp_connlost;
-	bool tcp_nomoretokens;
-	s32 pattern_idx;
-	u32 packet_present_len;
-	u32 packet_len;
-	const void *packet;
-	struct cfg80211_wowlan_nd_info *net_detect;
-};
-
-enum cfg80211_nan_conf_changes {
-	CFG80211_NAN_CONF_CHANGED_PREF = 1,
-	CFG80211_NAN_CONF_CHANGED_BANDS = 2,
-};
-
-enum wiphy_vendor_command_flags {
-	WIPHY_VENDOR_CMD_NEED_WDEV = 1,
-	WIPHY_VENDOR_CMD_NEED_NETDEV = 2,
-	WIPHY_VENDOR_CMD_NEED_RUNNING = 4,
-};
-
-enum wiphy_opmode_flag {
-	STA_OPMODE_MAX_BW_CHANGED = 1,
-	STA_OPMODE_SMPS_MODE_CHANGED = 2,
-	STA_OPMODE_N_SS_CHANGED = 4,
-};
-
-struct sta_opmode_info {
-	u32 changed;
-	enum nl80211_smps_mode smps_mode;
-	enum nl80211_chan_width bw;
-	u8 rx_nss;
-};
-
-struct cfg80211_ft_event_params {
-	const u8 *ies;
-	size_t ies_len;
-	const u8 *target_ap;
-	const u8 *ric_ies;
-	size_t ric_ies_len;
-};
-
-struct cfg80211_nan_match_params {
-	enum nl80211_nan_function_type type;
-	u8 inst_id;
-	u8 peer_inst_id;
-	const u8 *addr;
-	u8 info_len;
-	const u8 *info;
-	u64 cookie;
-};
-
-enum nl80211_multicast_groups {
-	NL80211_MCGRP_CONFIG = 0,
-	NL80211_MCGRP_SCAN = 1,
-	NL80211_MCGRP_REGULATORY = 2,
-	NL80211_MCGRP_MLME = 3,
-	NL80211_MCGRP_VENDOR = 4,
-	NL80211_MCGRP_NAN = 5,
-	NL80211_MCGRP_TESTMODE = 6,
-};
-
-struct key_parse {
-	struct key_params p;
-	int idx;
-	int type;
-	bool def;
-	bool defmgmt;
-	bool def_uni;
-	bool def_multi;
-};
-
-struct nl80211_dump_wiphy_state {
-	s64 filter_wiphy;
-	long int start;
-	long int split_start;
-	long int band_start;
-	long int chan_start;
-	long int capa_start;
-	bool split;
-};
-
-struct get_key_cookie {
-	struct sk_buff *msg;
-	int error;
-	int idx;
-};
-
-enum ieee80211_category {
-	WLAN_CATEGORY_SPECTRUM_MGMT = 0,
-	WLAN_CATEGORY_QOS = 1,
-	WLAN_CATEGORY_DLS = 2,
-	WLAN_CATEGORY_BACK = 3,
-	WLAN_CATEGORY_PUBLIC = 4,
-	WLAN_CATEGORY_RADIO_MEASUREMENT = 5,
-	WLAN_CATEGORY_HT = 7,
-	WLAN_CATEGORY_SA_QUERY = 8,
-	WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
-	WLAN_CATEGORY_WNM = 10,
-	WLAN_CATEGORY_WNM_UNPROTECTED = 11,
-	WLAN_CATEGORY_TDLS = 12,
-	WLAN_CATEGORY_MESH_ACTION = 13,
-	WLAN_CATEGORY_MULTIHOP_ACTION = 14,
-	WLAN_CATEGORY_SELF_PROTECTED = 15,
-	WLAN_CATEGORY_DMG = 16,
-	WLAN_CATEGORY_WMM = 17,
-	WLAN_CATEGORY_FST = 18,
-	WLAN_CATEGORY_UNPROT_DMG = 20,
-	WLAN_CATEGORY_VHT = 21,
-	WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
-	WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
-};
-
-struct cfg80211_mgmt_registration {
-	struct list_head list;
-	struct wireless_dev *wdev;
-	u32 nlportid;
-	int match_len;
-	__le16 frame_type;
-	u8 match[0];
-};
-
-struct cfg80211_conn {
-	struct cfg80211_connect_params params;
-	enum {
-		CFG80211_CONN_SCANNING = 0,
-		CFG80211_CONN_SCAN_AGAIN = 1,
-		CFG80211_CONN_AUTHENTICATE_NEXT = 2,
-		CFG80211_CONN_AUTHENTICATING = 3,
-		CFG80211_CONN_AUTH_FAILED_TIMEOUT = 4,
-		CFG80211_CONN_ASSOCIATE_NEXT = 5,
-		CFG80211_CONN_ASSOCIATING = 6,
-		CFG80211_CONN_ASSOC_FAILED = 7,
-		CFG80211_CONN_ASSOC_FAILED_TIMEOUT = 8,
-		CFG80211_CONN_DEAUTH = 9,
-		CFG80211_CONN_ABANDON = 10,
-		CFG80211_CONN_CONNECTED = 11,
-	} state;
-	u8 bssid[6];
-	u8 prev_bssid[6];
-	const u8 *ie;
-	size_t ie_len;
-	bool auto_auth;
-	bool prev_bssid_valid;
-};
-
-enum cfg80211_chan_mode {
-	CHAN_MODE_UNDEFINED = 0,
-	CHAN_MODE_SHARED = 1,
-	CHAN_MODE_EXCLUSIVE = 2,
-};
-
-struct trace_event_raw_rdev_suspend {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool any;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	bool valid_wow;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_scan {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_only_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_enabled_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool enabled;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_add_virtual_intf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 __data_loc_vir_intf_name;
-	enum nl80211_iftype type;
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_wdev_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_wdev_cookie_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_change_virtual_intf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_iftype type;
-	char __data[0];
-};
-
-struct trace_event_raw_key_handle {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 mac_addr[6];
-	u8 key_index;
-	bool pairwise;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_add_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 mac_addr[6];
-	u8 key_index;
-	bool pairwise;
-	u8 mode;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_default_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 key_index;
-	bool unicast;
-	bool multicast;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_default_mgmt_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 key_index;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_start_ap {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	int beacon_interval;
-	int dtim_period;
-	char ssid[33];
-	enum nl80211_hidden_ssid hidden_ssid;
-	u32 wpa_ver;
-	bool privacy;
-	enum nl80211_auth_type auth_type;
-	int inactivity_timeout;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_change_beacon {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u32 __data_loc_head;
-	u32 __data_loc_tail;
-	u32 __data_loc_beacon_ies;
-	u32 __data_loc_proberesp_ies;
-	u32 __data_loc_assocresp_ies;
-	u32 __data_loc_probe_resp;
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_netdev_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_station_add_change {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 sta_mac[6];
-	u32 sta_flags_mask;
-	u32 sta_flags_set;
-	u32 sta_modify_mask;
-	int listen_interval;
-	u16 capability;
-	u16 aid;
-	u8 plink_action;
-	u8 plink_state;
-	u8 uapsd_queues;
-	u8 max_sp;
-	u8 opmode_notif;
-	bool opmode_notif_used;
-	u8 ht_capa[26];
-	u8 vht_capa[12];
-	char vlan[16];
-	u32 __data_loc_supported_rates;
-	u32 __data_loc_ext_capab;
-	u32 __data_loc_supported_channels;
-	u32 __data_loc_supported_oper_classes;
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_netdev_mac_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 sta_mac[6];
-	char __data[0];
-};
-
-struct trace_event_raw_station_del {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 sta_mac[6];
-	u8 subtype;
-	u16 reason_code;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_dump_station {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 sta_mac[6];
-	int idx;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_station_info {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	int generation;
-	u32 connected_time;
-	u32 inactive_time;
-	u32 rx_bytes;
-	u32 tx_bytes;
-	u32 rx_packets;
-	u32 tx_packets;
-	u32 tx_retries;
-	u32 tx_failed;
-	u32 rx_dropped_misc;
-	u32 beacon_loss_count;
-	u16 llid;
-	u16 plid;
-	u8 plink_state;
-	char __data[0];
-};
-
-struct trace_event_raw_mpath_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dst[6];
-	u8 next_hop[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_dump_mpath {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dst[6];
-	u8 next_hop[6];
-	int idx;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_get_mpp {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dst[6];
-	u8 mpp[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_dump_mpp {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dst[6];
-	u8 mpp[6];
-	int idx;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_mpath_info {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	int generation;
-	u32 filled;
-	u32 frame_qlen;
-	u32 sn;
-	u32 metric;
-	u32 exptime;
-	u32 discovery_timeout;
-	u8 discovery_retries;
-	u8 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_mesh_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u16 dot11MeshRetryTimeout;
-	u16 dot11MeshConfirmTimeout;
-	u16 dot11MeshHoldingTimeout;
-	u16 dot11MeshMaxPeerLinks;
-	u8 dot11MeshMaxRetries;
-	u8 dot11MeshTTL;
-	u8 element_ttl;
-	bool auto_open_plinks;
-	u32 dot11MeshNbrOffsetMaxNeighbor;
-	u8 dot11MeshHWMPmaxPREQretries;
-	u32 path_refresh_time;
-	u32 dot11MeshHWMPactivePathTimeout;
-	u16 min_discovery_timeout;
-	u16 dot11MeshHWMPpreqMinInterval;
-	u16 dot11MeshHWMPperrMinInterval;
-	u16 dot11MeshHWMPnetDiameterTraversalTime;
-	u8 dot11MeshHWMPRootMode;
-	u16 dot11MeshHWMPRannInterval;
-	bool dot11MeshGateAnnouncementProtocol;
-	bool dot11MeshForwarding;
-	s32 rssi_threshold;
-	u16 ht_opmode;
-	u32 dot11MeshHWMPactivePathToRootTimeout;
-	u16 dot11MeshHWMProotInterval;
-	u16 dot11MeshHWMPconfirmationInterval;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_update_mesh_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u16 dot11MeshRetryTimeout;
-	u16 dot11MeshConfirmTimeout;
-	u16 dot11MeshHoldingTimeout;
-	u16 dot11MeshMaxPeerLinks;
-	u8 dot11MeshMaxRetries;
-	u8 dot11MeshTTL;
-	u8 element_ttl;
-	bool auto_open_plinks;
-	u32 dot11MeshNbrOffsetMaxNeighbor;
-	u8 dot11MeshHWMPmaxPREQretries;
-	u32 path_refresh_time;
-	u32 dot11MeshHWMPactivePathTimeout;
-	u16 min_discovery_timeout;
-	u16 dot11MeshHWMPpreqMinInterval;
-	u16 dot11MeshHWMPperrMinInterval;
-	u16 dot11MeshHWMPnetDiameterTraversalTime;
-	u8 dot11MeshHWMPRootMode;
-	u16 dot11MeshHWMPRannInterval;
-	bool dot11MeshGateAnnouncementProtocol;
-	bool dot11MeshForwarding;
-	s32 rssi_threshold;
-	u16 ht_opmode;
-	u32 dot11MeshHWMPactivePathToRootTimeout;
-	u16 dot11MeshHWMProotInterval;
-	u16 dot11MeshHWMPconfirmationInterval;
-	u32 mask;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_join_mesh {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u16 dot11MeshRetryTimeout;
-	u16 dot11MeshConfirmTimeout;
-	u16 dot11MeshHoldingTimeout;
-	u16 dot11MeshMaxPeerLinks;
-	u8 dot11MeshMaxRetries;
-	u8 dot11MeshTTL;
-	u8 element_ttl;
-	bool auto_open_plinks;
-	u32 dot11MeshNbrOffsetMaxNeighbor;
-	u8 dot11MeshHWMPmaxPREQretries;
-	u32 path_refresh_time;
-	u32 dot11MeshHWMPactivePathTimeout;
-	u16 min_discovery_timeout;
-	u16 dot11MeshHWMPpreqMinInterval;
-	u16 dot11MeshHWMPperrMinInterval;
-	u16 dot11MeshHWMPnetDiameterTraversalTime;
-	u8 dot11MeshHWMPRootMode;
-	u16 dot11MeshHWMPRannInterval;
-	bool dot11MeshGateAnnouncementProtocol;
-	bool dot11MeshForwarding;
-	s32 rssi_threshold;
-	u16 ht_opmode;
-	u32 dot11MeshHWMPactivePathToRootTimeout;
-	u16 dot11MeshHWMProotInterval;
-	u16 dot11MeshHWMPconfirmationInterval;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_change_bss {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	int use_cts_prot;
-	int use_short_preamble;
-	int use_short_slot_time;
-	int ap_isolate;
-	int ht_opmode;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_txq_params {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_ac ac;
-	u16 txop;
-	u16 cwmin;
-	u16 cwmax;
-	u8 aifs;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_libertas_set_mesh_channel {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_monitor_channel {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_auth {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	enum nl80211_auth_type auth_type;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_assoc {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	u8 prev_bssid[6];
-	bool use_mfp;
-	u32 flags;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_deauth {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	u16 reason_code;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_disassoc {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	u16 reason_code;
-	bool local_state_change;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_mgmt_tx_cancel_wait {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_power_mgmt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	bool enabled;
-	int timeout;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_connect {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	char ssid[33];
-	enum nl80211_auth_type auth_type;
-	bool privacy;
-	u32 wpa_versions;
-	u32 flags;
-	u8 prev_bssid[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_update_connect_params {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u32 changed;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_cqm_rssi_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	s32 rssi_thold;
-	u32 rssi_hyst;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_cqm_rssi_range_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	s32 rssi_low;
-	s32 rssi_high;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_cqm_txe_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u32 rate;
-	u32 pkts;
-	u32 intvl;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_disconnect {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u16 reason_code;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_join_ibss {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	char ssid[33];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_join_ocb {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_wiphy_params {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 changed;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_tx_power {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	enum nl80211_tx_power_setting type;
-	int mbm;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_int {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int func_ret;
-	int func_fill;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_bitrate_mask {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_mgmt_frame_register {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u16 frame_type;
-	bool reg;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_tx_rx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	u32 tx;
-	u32 rx;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_void_tx_rx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx;
-	u32 tx_max;
-	u32 rx;
-	u32 rx_max;
-	char __data[0];
-};
-
-struct trace_event_raw_tx_rx_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx;
-	u32 rx;
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_netdev_id_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u64 id;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_tdls_mgmt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u8 action_code;
-	u8 dialog_token;
-	u16 status_code;
-	u32 peer_capability;
-	bool initiator;
-	u32 __data_loc_buf;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_dump_survey {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	int idx;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_survey_info {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 center_freq;
-	int ret;
-	u64 time;
-	u64 time_busy;
-	u64 time_ext_busy;
-	u64 time_rx;
-	u64 time_tx;
-	u64 time_scan;
-	u32 filled;
-	s8 noise;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_tdls_oper {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	enum nl80211_tdls_operation oper;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_pmksa {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_probe_client {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_remain_on_channel {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	enum nl80211_band band;
-	u32 center_freq;
-	unsigned int duration;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_int_cookie {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_cancel_remain_on_channel {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_mgmt_tx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	enum nl80211_band band;
-	u32 center_freq;
-	bool offchan;
-	unsigned int wait;
-	bool no_cck;
-	bool dont_wait_for_ack;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_tx_control_port {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dest[6];
-	__be16 proto;
-	bool unencrypted;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_noack_map {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u16 noack_map;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_return_chandef {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_start_nan {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u8 master_pref;
-	u8 bands;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_nan_change_conf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u8 master_pref;
-	u8 bands;
-	u32 changes;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_add_nan_func {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u8 func_type;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_del_nan_func {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_mac_acl {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u32 acl_policy;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_update_ft_ies {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u16 md;
-	u32 __data_loc_ie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_crit_proto_start {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u16 proto;
-	u16 duration;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_crit_proto_stop {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	bool radar_required;
-	bool block_tx;
-	u8 count;
-	u32 __data_loc_bcn_ofs;
-	u32 __data_loc_pres_ofs;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_qos_map {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 num_des;
-	u8 dscp_exception[42];
-	u8 up[16];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_ap_chanwidth {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_add_tx_ts {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u8 tsid;
-	u8 user_prio;
-	u16 admitted_time;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_del_tx_ts {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u8 tsid;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_tdls_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 addr[6];
-	u8 oper_class;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_tdls_cancel_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_pmk {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 aa[6];
-	u8 pmk_len;
-	u8 pmk_r0_name_len;
-	u32 __data_loc_pmk;
-	u32 __data_loc_pmk_r0_name;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_del_pmk {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 aa[6];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_external_auth {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	u8 ssid[33];
-	u16 status;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_start_radar_detection {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u32 cac_time_ms;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_mcast_rate {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	int mcast_rate[4];
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_coalesce {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int n_rules;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_set_multicast_to_unicast {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	bool enabled;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_get_ftm_responder_stats {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u64 timestamp;
-	u32 success_num;
-	u32 partial_num;
-	u32 failed_num;
-	u32 asap_num;
-	u32 non_asap_num;
-	u64 duration;
-	u32 unknown_triggers;
-	u32 reschedule;
-	u32 out_of_window;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_return_bool {
-	struct trace_entry ent;
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_netdev_mac_evt {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 macaddr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_netdev_evt_only {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_send_rx_assoc {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_netdev_frame_event {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u32 __data_loc_frame;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_tx_mlme_mgmt {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u32 __data_loc_frame;
-	char __data[0];
-};
-
-struct trace_event_raw_netdev_mac_evt {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 mac[6];
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_michael_mic_failure {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 addr[6];
-	enum nl80211_key_type key_type;
-	int key_id;
-	u8 tsc[6];
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ready_on_channel {
-	struct trace_entry ent;
-	u32 id;
-	u64 cookie;
-	enum nl80211_band band;
-	u32 center_freq;
-	unsigned int duration;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ready_on_channel_expired {
-	struct trace_entry ent;
-	u32 id;
-	u64 cookie;
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_tx_mgmt_expired {
-	struct trace_entry ent;
-	u32 id;
-	u64 cookie;
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_new_sta {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 mac_addr[6];
-	int generation;
-	u32 connected_time;
-	u32 inactive_time;
-	u32 rx_bytes;
-	u32 tx_bytes;
-	u32 rx_packets;
-	u32 tx_packets;
-	u32 tx_retries;
-	u32 tx_failed;
-	u32 rx_dropped_misc;
-	u32 beacon_loss_count;
-	u16 llid;
-	u16 plid;
-	u8 plink_state;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_rx_mgmt {
-	struct trace_entry ent;
-	u32 id;
-	int freq;
-	int sig_dbm;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_mgmt_tx_status {
-	struct trace_entry ent;
-	u32 id;
-	u64 cookie;
-	bool ack;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_rx_control_port {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	int len;
-	u8 from[6];
-	u16 proto;
-	bool unencrypted;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_cqm_rssi_notify {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	enum nl80211_cqm_rssi_threshold_event rssi_event;
-	s32 rssi_level;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_reg_can_beacon {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	enum nl80211_iftype iftype;
-	bool check_no_ir;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_chandef_dfs_required {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ch_switch_notify {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ch_switch_started_notify {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_radar_event {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 control_freq;
-	u32 width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_cac_event {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	enum nl80211_radar_event evt;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_rx_evt {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ibss_joined {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 bssid[6];
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_probe_status {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 addr[6];
-	u64 cookie;
-	bool acked;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_cqm_pktloss_notify {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u32 num_packets;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_pmksa_candidate_notify {
-	struct trace_entry ent;
-	char name[16];
-	int ifindex;
-	int index;
-	u8 bssid[6];
-	bool preauth;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_report_obss_beacon {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int freq;
-	int sig_dbm;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_tdls_oper_request {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	enum nl80211_tdls_operation oper;
-	u16 reason_code;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_scan_done {
-	struct trace_entry ent;
-	u32 n_channels;
-	u32 __data_loc_ie;
-	u32 rates[4];
-	u32 wdev_id;
-	u8 wiphy_mac[6];
-	bool no_cck;
-	bool aborted;
-	u64 scan_start_tsf;
-	u8 tsf_bssid[6];
-	char __data[0];
-};
-
-struct trace_event_raw_wiphy_id_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u64 id;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_get_bss {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 center_freq;
-	u8 bssid[6];
-	u32 __data_loc_ssid;
-	enum ieee80211_bss_type bss_type;
-	enum ieee80211_privacy privacy;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_inform_bss_frame {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_band band;
-	u32 center_freq;
-	enum nl80211_bss_scan_width scan_width;
-	u32 __data_loc_mgmt;
-	s32 signal;
-	u64 ts_boottime;
-	u64 parent_tsf;
-	u8 parent_bssid[6];
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_bss_evt {
-	struct trace_entry ent;
-	u8 bssid[6];
-	enum nl80211_band band;
-	u32 center_freq;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_return_uint {
-	struct trace_entry ent;
-	unsigned int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_return_u32 {
-	struct trace_entry ent;
-	u32 ret;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_report_wowlan_wakeup {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	bool non_wireless;
-	bool disconnect;
-	bool magic_pkt;
-	bool gtk_rekey_failure;
-	bool eap_identity_req;
-	bool four_way_handshake;
-	bool rfkill_release;
-	s32 pattern_idx;
-	u32 packet_len;
-	u32 __data_loc_packet;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_ft_event {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u32 __data_loc_ies;
-	u8 target_ap[6];
-	u32 __data_loc_ric_ies;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_stop_iface {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_pmsr_report {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	u8 addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_pmsr_complete {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 id;
-	u64 cookie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_update_owe_info {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u16 status;
-	u32 __data_loc_ie;
-	char __data[0];
-};
-
-struct trace_event_raw_cfg80211_update_owe_info_event {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 peer[6];
-	u32 __data_loc_ie;
-	char __data[0];
-};
-
-struct trace_event_raw_rdev_probe_mesh_link {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char name[16];
-	int ifindex;
-	u8 dest[6];
-	char __data[0];
-};
-
-struct trace_event_data_offsets_rdev_suspend {};
-
-struct trace_event_data_offsets_rdev_return_int {};
-
-struct trace_event_data_offsets_rdev_scan {};
-
-struct trace_event_data_offsets_wiphy_only_evt {};
-
-struct trace_event_data_offsets_wiphy_enabled_evt {};
-
-struct trace_event_data_offsets_rdev_add_virtual_intf {
-	u32 vir_intf_name;
-};
-
-struct trace_event_data_offsets_wiphy_wdev_evt {};
-
-struct trace_event_data_offsets_wiphy_wdev_cookie_evt {};
-
-struct trace_event_data_offsets_rdev_change_virtual_intf {};
-
-struct trace_event_data_offsets_key_handle {};
-
-struct trace_event_data_offsets_rdev_add_key {};
-
-struct trace_event_data_offsets_rdev_set_default_key {};
-
-struct trace_event_data_offsets_rdev_set_default_mgmt_key {};
-
-struct trace_event_data_offsets_rdev_start_ap {};
-
-struct trace_event_data_offsets_rdev_change_beacon {
-	u32 head;
-	u32 tail;
-	u32 beacon_ies;
-	u32 proberesp_ies;
-	u32 assocresp_ies;
-	u32 probe_resp;
-};
-
-struct trace_event_data_offsets_wiphy_netdev_evt {};
-
-struct trace_event_data_offsets_station_add_change {
-	u32 supported_rates;
-	u32 ext_capab;
-	u32 supported_channels;
-	u32 supported_oper_classes;
-};
-
-struct trace_event_data_offsets_wiphy_netdev_mac_evt {};
-
-struct trace_event_data_offsets_station_del {};
-
-struct trace_event_data_offsets_rdev_dump_station {};
-
-struct trace_event_data_offsets_rdev_return_int_station_info {};
-
-struct trace_event_data_offsets_mpath_evt {};
-
-struct trace_event_data_offsets_rdev_dump_mpath {};
-
-struct trace_event_data_offsets_rdev_get_mpp {};
-
-struct trace_event_data_offsets_rdev_dump_mpp {};
-
-struct trace_event_data_offsets_rdev_return_int_mpath_info {};
-
-struct trace_event_data_offsets_rdev_return_int_mesh_config {};
-
-struct trace_event_data_offsets_rdev_update_mesh_config {};
-
-struct trace_event_data_offsets_rdev_join_mesh {};
-
-struct trace_event_data_offsets_rdev_change_bss {};
-
-struct trace_event_data_offsets_rdev_set_txq_params {};
-
-struct trace_event_data_offsets_rdev_libertas_set_mesh_channel {};
-
-struct trace_event_data_offsets_rdev_set_monitor_channel {};
-
-struct trace_event_data_offsets_rdev_auth {};
-
-struct trace_event_data_offsets_rdev_assoc {};
-
-struct trace_event_data_offsets_rdev_deauth {};
-
-struct trace_event_data_offsets_rdev_disassoc {};
-
-struct trace_event_data_offsets_rdev_mgmt_tx_cancel_wait {};
-
-struct trace_event_data_offsets_rdev_set_power_mgmt {};
-
-struct trace_event_data_offsets_rdev_connect {};
-
-struct trace_event_data_offsets_rdev_update_connect_params {};
-
-struct trace_event_data_offsets_rdev_set_cqm_rssi_config {};
-
-struct trace_event_data_offsets_rdev_set_cqm_rssi_range_config {};
-
-struct trace_event_data_offsets_rdev_set_cqm_txe_config {};
-
-struct trace_event_data_offsets_rdev_disconnect {};
-
-struct trace_event_data_offsets_rdev_join_ibss {};
-
-struct trace_event_data_offsets_rdev_join_ocb {};
-
-struct trace_event_data_offsets_rdev_set_wiphy_params {};
-
-struct trace_event_data_offsets_rdev_set_tx_power {};
-
-struct trace_event_data_offsets_rdev_return_int_int {};
-
-struct trace_event_data_offsets_rdev_set_bitrate_mask {};
-
-struct trace_event_data_offsets_rdev_mgmt_frame_register {};
-
-struct trace_event_data_offsets_rdev_return_int_tx_rx {};
-
-struct trace_event_data_offsets_rdev_return_void_tx_rx {};
-
-struct trace_event_data_offsets_tx_rx_evt {};
-
-struct trace_event_data_offsets_wiphy_netdev_id_evt {};
-
-struct trace_event_data_offsets_rdev_tdls_mgmt {
-	u32 buf;
-};
-
-struct trace_event_data_offsets_rdev_dump_survey {};
-
-struct trace_event_data_offsets_rdev_return_int_survey_info {};
-
-struct trace_event_data_offsets_rdev_tdls_oper {};
-
-struct trace_event_data_offsets_rdev_pmksa {};
-
-struct trace_event_data_offsets_rdev_probe_client {};
-
-struct trace_event_data_offsets_rdev_remain_on_channel {};
-
-struct trace_event_data_offsets_rdev_return_int_cookie {};
-
-struct trace_event_data_offsets_rdev_cancel_remain_on_channel {};
-
-struct trace_event_data_offsets_rdev_mgmt_tx {};
-
-struct trace_event_data_offsets_rdev_tx_control_port {};
-
-struct trace_event_data_offsets_rdev_set_noack_map {};
-
-struct trace_event_data_offsets_rdev_return_chandef {};
-
-struct trace_event_data_offsets_rdev_start_nan {};
-
-struct trace_event_data_offsets_rdev_nan_change_conf {};
-
-struct trace_event_data_offsets_rdev_add_nan_func {};
-
-struct trace_event_data_offsets_rdev_del_nan_func {};
-
-struct trace_event_data_offsets_rdev_set_mac_acl {};
-
-struct trace_event_data_offsets_rdev_update_ft_ies {
-	u32 ie;
-};
-
-struct trace_event_data_offsets_rdev_crit_proto_start {};
-
-struct trace_event_data_offsets_rdev_crit_proto_stop {};
-
-struct trace_event_data_offsets_rdev_channel_switch {
-	u32 bcn_ofs;
-	u32 pres_ofs;
-};
-
-struct trace_event_data_offsets_rdev_set_qos_map {};
-
-struct trace_event_data_offsets_rdev_set_ap_chanwidth {};
-
-struct trace_event_data_offsets_rdev_add_tx_ts {};
-
-struct trace_event_data_offsets_rdev_del_tx_ts {};
-
-struct trace_event_data_offsets_rdev_tdls_channel_switch {};
-
-struct trace_event_data_offsets_rdev_tdls_cancel_channel_switch {};
-
-struct trace_event_data_offsets_rdev_set_pmk {
-	u32 pmk;
-	u32 pmk_r0_name;
-};
-
-struct trace_event_data_offsets_rdev_del_pmk {};
-
-struct trace_event_data_offsets_rdev_external_auth {};
-
-struct trace_event_data_offsets_rdev_start_radar_detection {};
-
-struct trace_event_data_offsets_rdev_set_mcast_rate {};
-
-struct trace_event_data_offsets_rdev_set_coalesce {};
-
-struct trace_event_data_offsets_rdev_set_multicast_to_unicast {};
-
-struct trace_event_data_offsets_rdev_get_ftm_responder_stats {};
-
-struct trace_event_data_offsets_cfg80211_return_bool {};
-
-struct trace_event_data_offsets_cfg80211_netdev_mac_evt {};
-
-struct trace_event_data_offsets_netdev_evt_only {};
-
-struct trace_event_data_offsets_cfg80211_send_rx_assoc {};
-
-struct trace_event_data_offsets_netdev_frame_event {
-	u32 frame;
-};
-
-struct trace_event_data_offsets_cfg80211_tx_mlme_mgmt {
-	u32 frame;
-};
-
-struct trace_event_data_offsets_netdev_mac_evt {};
-
-struct trace_event_data_offsets_cfg80211_michael_mic_failure {};
-
-struct trace_event_data_offsets_cfg80211_ready_on_channel {};
-
-struct trace_event_data_offsets_cfg80211_ready_on_channel_expired {};
-
-struct trace_event_data_offsets_cfg80211_tx_mgmt_expired {};
-
-struct trace_event_data_offsets_cfg80211_new_sta {};
-
-struct trace_event_data_offsets_cfg80211_rx_mgmt {};
-
-struct trace_event_data_offsets_cfg80211_mgmt_tx_status {};
-
-struct trace_event_data_offsets_cfg80211_rx_control_port {};
-
-struct trace_event_data_offsets_cfg80211_cqm_rssi_notify {};
-
-struct trace_event_data_offsets_cfg80211_reg_can_beacon {};
-
-struct trace_event_data_offsets_cfg80211_chandef_dfs_required {};
-
-struct trace_event_data_offsets_cfg80211_ch_switch_notify {};
-
-struct trace_event_data_offsets_cfg80211_ch_switch_started_notify {};
-
-struct trace_event_data_offsets_cfg80211_radar_event {};
-
-struct trace_event_data_offsets_cfg80211_cac_event {};
-
-struct trace_event_data_offsets_cfg80211_rx_evt {};
-
-struct trace_event_data_offsets_cfg80211_ibss_joined {};
-
-struct trace_event_data_offsets_cfg80211_probe_status {};
-
-struct trace_event_data_offsets_cfg80211_cqm_pktloss_notify {};
-
-struct trace_event_data_offsets_cfg80211_pmksa_candidate_notify {};
-
-struct trace_event_data_offsets_cfg80211_report_obss_beacon {};
-
-struct trace_event_data_offsets_cfg80211_tdls_oper_request {};
-
-struct trace_event_data_offsets_cfg80211_scan_done {
-	u32 ie;
-};
-
-struct trace_event_data_offsets_wiphy_id_evt {};
-
-struct trace_event_data_offsets_cfg80211_get_bss {
-	u32 ssid;
-};
-
-struct trace_event_data_offsets_cfg80211_inform_bss_frame {
-	u32 mgmt;
-};
-
-struct trace_event_data_offsets_cfg80211_bss_evt {};
-
-struct trace_event_data_offsets_cfg80211_return_uint {};
-
-struct trace_event_data_offsets_cfg80211_return_u32 {};
-
-struct trace_event_data_offsets_cfg80211_report_wowlan_wakeup {
-	u32 packet;
-};
-
-struct trace_event_data_offsets_cfg80211_ft_event {
-	u32 ies;
-	u32 ric_ies;
-};
-
-struct trace_event_data_offsets_cfg80211_stop_iface {};
-
-struct trace_event_data_offsets_cfg80211_pmsr_report {};
-
-struct trace_event_data_offsets_cfg80211_pmsr_complete {};
-
-struct trace_event_data_offsets_rdev_update_owe_info {
-	u32 ie;
-};
-
-struct trace_event_data_offsets_cfg80211_update_owe_info_event {
-	u32 ie;
-};
-
-struct trace_event_data_offsets_rdev_probe_mesh_link {};
-
-typedef void (*btf_trace_rdev_suspend)(void *, struct wiphy *, struct cfg80211_wowlan *);
-
-typedef void (*btf_trace_rdev_return_int)(void *, struct wiphy *, int);
-
-typedef void (*btf_trace_rdev_scan)(void *, struct wiphy *, struct cfg80211_scan_request *);
-
-typedef void (*btf_trace_rdev_resume)(void *, struct wiphy *);
-
-typedef void (*btf_trace_rdev_return_void)(void *, struct wiphy *);
-
-typedef void (*btf_trace_rdev_get_antenna)(void *, struct wiphy *);
-
-typedef void (*btf_trace_rdev_rfkill_poll)(void *, struct wiphy *);
-
-typedef void (*btf_trace_rdev_set_wakeup)(void *, struct wiphy *, bool);
-
-typedef void (*btf_trace_rdev_add_virtual_intf)(void *, struct wiphy *, char *, enum nl80211_iftype);
-
-typedef void (*btf_trace_rdev_return_wdev)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_del_virtual_intf)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_change_virtual_intf)(void *, struct wiphy *, struct net_device___2 *, enum nl80211_iftype);
-
-typedef void (*btf_trace_rdev_get_key)(void *, struct wiphy *, struct net_device___2 *, u8, bool, const u8 *);
-
-typedef void (*btf_trace_rdev_del_key)(void *, struct wiphy *, struct net_device___2 *, u8, bool, const u8 *);
-
-typedef void (*btf_trace_rdev_add_key)(void *, struct wiphy *, struct net_device___2 *, u8, bool, const u8 *, u8);
-
-typedef void (*btf_trace_rdev_set_default_key)(void *, struct wiphy *, struct net_device___2 *, u8, bool, bool);
-
-typedef void (*btf_trace_rdev_set_default_mgmt_key)(void *, struct wiphy *, struct net_device___2 *, u8);
-
-typedef void (*btf_trace_rdev_start_ap)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_ap_settings *);
-
-typedef void (*btf_trace_rdev_change_beacon)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_beacon_data *);
-
-typedef void (*btf_trace_rdev_stop_ap)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_set_rekey_data)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_get_mesh_config)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_leave_mesh)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_leave_ibss)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_leave_ocb)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_flush_pmksa)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_end_cac)(void *, struct wiphy *, struct net_device___2 *);
-
-typedef void (*btf_trace_rdev_add_station)(void *, struct wiphy *, struct net_device___2 *, u8 *, struct station_parameters *);
-
-typedef void (*btf_trace_rdev_change_station)(void *, struct wiphy *, struct net_device___2 *, u8 *, struct station_parameters *);
-
-typedef void (*btf_trace_rdev_del_station)(void *, struct wiphy *, struct net_device___2 *, struct station_del_parameters *);
-
-typedef void (*btf_trace_rdev_get_station)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_del_mpath)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_set_wds_peer)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_dump_station)(void *, struct wiphy *, struct net_device___2 *, int, u8 *);
-
-typedef void (*btf_trace_rdev_return_int_station_info)(void *, struct wiphy *, int, struct station_info *);
-
-typedef void (*btf_trace_rdev_add_mpath)(void *, struct wiphy *, struct net_device___2 *, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_change_mpath)(void *, struct wiphy *, struct net_device___2 *, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_get_mpath)(void *, struct wiphy *, struct net_device___2 *, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_dump_mpath)(void *, struct wiphy *, struct net_device___2 *, int, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_get_mpp)(void *, struct wiphy *, struct net_device___2 *, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_dump_mpp)(void *, struct wiphy *, struct net_device___2 *, int, u8 *, u8 *);
-
-typedef void (*btf_trace_rdev_return_int_mpath_info)(void *, struct wiphy *, int, struct mpath_info *);
-
-typedef void (*btf_trace_rdev_return_int_mesh_config)(void *, struct wiphy *, int, struct mesh_config *);
-
-typedef void (*btf_trace_rdev_update_mesh_config)(void *, struct wiphy *, struct net_device___2 *, u32, const struct mesh_config *);
-
-typedef void (*btf_trace_rdev_join_mesh)(void *, struct wiphy *, struct net_device___2 *, const struct mesh_config *, const struct mesh_setup *);
-
-typedef void (*btf_trace_rdev_change_bss)(void *, struct wiphy *, struct net_device___2 *, struct bss_parameters *);
-
-typedef void (*btf_trace_rdev_set_txq_params)(void *, struct wiphy *, struct net_device___2 *, struct ieee80211_txq_params *);
-
-typedef void (*btf_trace_rdev_libertas_set_mesh_channel)(void *, struct wiphy *, struct net_device___2 *, struct ieee80211_channel *);
-
-typedef void (*btf_trace_rdev_set_monitor_channel)(void *, struct wiphy *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_rdev_auth)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_auth_request *);
-
-typedef void (*btf_trace_rdev_assoc)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_assoc_request *);
-
-typedef void (*btf_trace_rdev_deauth)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_deauth_request *);
-
-typedef void (*btf_trace_rdev_disassoc)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_disassoc_request *);
-
-typedef void (*btf_trace_rdev_mgmt_tx_cancel_wait)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_rdev_set_power_mgmt)(void *, struct wiphy *, struct net_device___2 *, bool, int);
-
-typedef void (*btf_trace_rdev_connect)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_connect_params *);
-
-typedef void (*btf_trace_rdev_update_connect_params)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_connect_params *, u32);
-
-typedef void (*btf_trace_rdev_set_cqm_rssi_config)(void *, struct wiphy *, struct net_device___2 *, s32, u32);
-
-typedef void (*btf_trace_rdev_set_cqm_rssi_range_config)(void *, struct wiphy *, struct net_device___2 *, s32, s32);
-
-typedef void (*btf_trace_rdev_set_cqm_txe_config)(void *, struct wiphy *, struct net_device___2 *, u32, u32, u32);
-
-typedef void (*btf_trace_rdev_disconnect)(void *, struct wiphy *, struct net_device___2 *, u16);
-
-typedef void (*btf_trace_rdev_join_ibss)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_ibss_params *);
-
-typedef void (*btf_trace_rdev_join_ocb)(void *, struct wiphy *, struct net_device___2 *, const struct ocb_setup *);
-
-typedef void (*btf_trace_rdev_set_wiphy_params)(void *, struct wiphy *, u32);
-
-typedef void (*btf_trace_rdev_get_tx_power)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_set_tx_power)(void *, struct wiphy *, struct wireless_dev *, enum nl80211_tx_power_setting, int);
-
-typedef void (*btf_trace_rdev_return_int_int)(void *, struct wiphy *, int, int);
-
-typedef void (*btf_trace_rdev_set_bitrate_mask)(void *, struct wiphy *, struct net_device___2 *, const u8 *, const struct cfg80211_bitrate_mask *);
-
-typedef void (*btf_trace_rdev_mgmt_frame_register)(void *, struct wiphy *, struct wireless_dev *, u16, bool);
-
-typedef void (*btf_trace_rdev_return_int_tx_rx)(void *, struct wiphy *, int, u32, u32);
-
-typedef void (*btf_trace_rdev_return_void_tx_rx)(void *, struct wiphy *, u32, u32, u32, u32);
-
-typedef void (*btf_trace_rdev_set_antenna)(void *, struct wiphy *, u32, u32);
-
-typedef void (*btf_trace_rdev_sched_scan_start)(void *, struct wiphy *, struct net_device___2 *, u64);
-
-typedef void (*btf_trace_rdev_sched_scan_stop)(void *, struct wiphy *, struct net_device___2 *, u64);
-
-typedef void (*btf_trace_rdev_tdls_mgmt)(void *, struct wiphy *, struct net_device___2 *, u8 *, u8, u8, u16, u32, bool, const u8 *, size_t);
-
-typedef void (*btf_trace_rdev_dump_survey)(void *, struct wiphy *, struct net_device___2 *, int);
-
-typedef void (*btf_trace_rdev_return_int_survey_info)(void *, struct wiphy *, int, struct survey_info *);
-
-typedef void (*btf_trace_rdev_tdls_oper)(void *, struct wiphy *, struct net_device___2 *, u8 *, enum nl80211_tdls_operation);
-
-typedef void (*btf_trace_rdev_probe_client)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_set_pmksa)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_pmksa *);
-
-typedef void (*btf_trace_rdev_del_pmksa)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_pmksa *);
-
-typedef void (*btf_trace_rdev_remain_on_channel)(void *, struct wiphy *, struct wireless_dev *, struct ieee80211_channel *, unsigned int);
-
-typedef void (*btf_trace_rdev_return_int_cookie)(void *, struct wiphy *, int, u64);
-
-typedef void (*btf_trace_rdev_cancel_remain_on_channel)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_rdev_mgmt_tx)(void *, struct wiphy *, struct wireless_dev *, struct cfg80211_mgmt_tx_params *);
-
-typedef void (*btf_trace_rdev_tx_control_port)(void *, struct wiphy *, struct net_device___2 *, const u8 *, size_t, const u8 *, __be16, bool);
-
-typedef void (*btf_trace_rdev_set_noack_map)(void *, struct wiphy *, struct net_device___2 *, u16);
-
-typedef void (*btf_trace_rdev_get_channel)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_return_chandef)(void *, struct wiphy *, int, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_rdev_start_p2p_device)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_stop_p2p_device)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_start_nan)(void *, struct wiphy *, struct wireless_dev *, struct cfg80211_nan_conf *);
-
-typedef void (*btf_trace_rdev_nan_change_conf)(void *, struct wiphy *, struct wireless_dev *, struct cfg80211_nan_conf *, u32);
-
-typedef void (*btf_trace_rdev_stop_nan)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_add_nan_func)(void *, struct wiphy *, struct wireless_dev *, const struct cfg80211_nan_func *);
-
-typedef void (*btf_trace_rdev_del_nan_func)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_rdev_set_mac_acl)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_acl_data *);
-
-typedef void (*btf_trace_rdev_update_ft_ies)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_update_ft_ies_params *);
-
-typedef void (*btf_trace_rdev_crit_proto_start)(void *, struct wiphy *, struct wireless_dev *, enum nl80211_crit_proto_id, u16);
-
-typedef void (*btf_trace_rdev_crit_proto_stop)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_channel_switch)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_csa_settings *);
-
-typedef void (*btf_trace_rdev_set_qos_map)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_qos_map *);
-
-typedef void (*btf_trace_rdev_set_ap_chanwidth)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_rdev_add_tx_ts)(void *, struct wiphy *, struct net_device___2 *, u8, const u8 *, u8, u16);
-
-typedef void (*btf_trace_rdev_del_tx_ts)(void *, struct wiphy *, struct net_device___2 *, u8, const u8 *);
-
-typedef void (*btf_trace_rdev_tdls_channel_switch)(void *, struct wiphy *, struct net_device___2 *, const u8 *, u8, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_rdev_tdls_cancel_channel_switch)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_set_pmk)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_pmk_conf *);
-
-typedef void (*btf_trace_rdev_del_pmk)(void *, struct wiphy *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_rdev_external_auth)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_external_auth_params *);
-
-typedef void (*btf_trace_rdev_start_radar_detection)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_chan_def *, u32);
-
-typedef void (*btf_trace_rdev_set_mcast_rate)(void *, struct wiphy *, struct net_device___2 *, int *);
-
-typedef void (*btf_trace_rdev_set_coalesce)(void *, struct wiphy *, struct cfg80211_coalesce *);
-
-typedef void (*btf_trace_rdev_abort_scan)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_set_multicast_to_unicast)(void *, struct wiphy *, struct net_device___2 *, const bool);
-
-typedef void (*btf_trace_rdev_get_txq_stats)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_rdev_get_ftm_responder_stats)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_ftm_responder_stats *);
-
-typedef void (*btf_trace_rdev_start_pmsr)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_rdev_abort_pmsr)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_cfg80211_return_bool)(void *, bool);
-
-typedef void (*btf_trace_cfg80211_notify_new_peer_candidate)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_send_rx_auth)(void *, struct net_device___2 *);
-
-typedef void (*btf_trace_cfg80211_send_rx_assoc)(void *, struct net_device___2 *, struct cfg80211_bss *);
-
-typedef void (*btf_trace_cfg80211_rx_unprot_mlme_mgmt)(void *, struct net_device___2 *, const u8 *, int);
-
-typedef void (*btf_trace_cfg80211_rx_mlme_mgmt)(void *, struct net_device___2 *, const u8 *, int);
-
-typedef void (*btf_trace_cfg80211_tx_mlme_mgmt)(void *, struct net_device___2 *, const u8 *, int);
-
-typedef void (*btf_trace_cfg80211_send_auth_timeout)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_send_assoc_timeout)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_michael_mic_failure)(void *, struct net_device___2 *, const u8 *, enum nl80211_key_type, int, const u8 *);
-
-typedef void (*btf_trace_cfg80211_ready_on_channel)(void *, struct wireless_dev *, u64, struct ieee80211_channel *, unsigned int);
-
-typedef void (*btf_trace_cfg80211_ready_on_channel_expired)(void *, struct wireless_dev *, u64, struct ieee80211_channel *);
-
-typedef void (*btf_trace_cfg80211_tx_mgmt_expired)(void *, struct wireless_dev *, u64, struct ieee80211_channel *);
-
-typedef void (*btf_trace_cfg80211_new_sta)(void *, struct net_device___2 *, const u8 *, struct station_info *);
-
-typedef void (*btf_trace_cfg80211_del_sta)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_rx_mgmt)(void *, struct wireless_dev *, int, int);
-
-typedef void (*btf_trace_cfg80211_mgmt_tx_status)(void *, struct wireless_dev *, u64, bool);
-
-typedef void (*btf_trace_cfg80211_rx_control_port)(void *, struct net_device___2 *, struct sk_buff___2 *, bool);
-
-typedef void (*btf_trace_cfg80211_cqm_rssi_notify)(void *, struct net_device___2 *, enum nl80211_cqm_rssi_threshold_event, s32);
-
-typedef void (*btf_trace_cfg80211_reg_can_beacon)(void *, struct wiphy *, struct cfg80211_chan_def *, enum nl80211_iftype, bool);
-
-typedef void (*btf_trace_cfg80211_chandef_dfs_required)(void *, struct wiphy *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_cfg80211_ch_switch_notify)(void *, struct net_device___2 *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_cfg80211_ch_switch_started_notify)(void *, struct net_device___2 *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_cfg80211_radar_event)(void *, struct wiphy *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_cfg80211_cac_event)(void *, struct net_device___2 *, enum nl80211_radar_event);
-
-typedef void (*btf_trace_cfg80211_rx_spurious_frame)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_rx_unexpected_4addr_frame)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_ibss_joined)(void *, struct net_device___2 *, const u8 *, struct ieee80211_channel *);
-
-typedef void (*btf_trace_cfg80211_probe_status)(void *, struct net_device___2 *, const u8 *, u64, bool);
-
-typedef void (*btf_trace_cfg80211_cqm_pktloss_notify)(void *, struct net_device___2 *, const u8 *, u32);
-
-typedef void (*btf_trace_cfg80211_gtk_rekey_notify)(void *, struct net_device___2 *, const u8 *);
-
-typedef void (*btf_trace_cfg80211_pmksa_candidate_notify)(void *, struct net_device___2 *, int, const u8 *, bool);
-
-typedef void (*btf_trace_cfg80211_report_obss_beacon)(void *, struct wiphy *, const u8 *, size_t, int, int);
-
-typedef void (*btf_trace_cfg80211_tdls_oper_request)(void *, struct wiphy *, struct net_device___2 *, const u8 *, enum nl80211_tdls_operation, u16);
-
-typedef void (*btf_trace_cfg80211_scan_done)(void *, struct cfg80211_scan_request *, struct cfg80211_scan_info *);
-
-typedef void (*btf_trace_cfg80211_sched_scan_stopped)(void *, struct wiphy *, u64);
-
-typedef void (*btf_trace_cfg80211_sched_scan_results)(void *, struct wiphy *, u64);
-
-typedef void (*btf_trace_cfg80211_get_bss)(void *, struct wiphy *, struct ieee80211_channel *, const u8 *, const u8 *, size_t, enum ieee80211_bss_type, enum ieee80211_privacy);
-
-typedef void (*btf_trace_cfg80211_inform_bss_frame)(void *, struct wiphy *, struct cfg80211_inform_bss *, struct ieee80211_mgmt *, size_t);
-
-typedef void (*btf_trace_cfg80211_return_bss)(void *, struct cfg80211_bss *);
-
-typedef void (*btf_trace_cfg80211_return_uint)(void *, unsigned int);
-
-typedef void (*btf_trace_cfg80211_return_u32)(void *, u32);
-
-typedef void (*btf_trace_cfg80211_report_wowlan_wakeup)(void *, struct wiphy *, struct wireless_dev *, struct cfg80211_wowlan_wakeup *);
-
-typedef void (*btf_trace_cfg80211_ft_event)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_ft_event_params *);
-
-typedef void (*btf_trace_cfg80211_stop_iface)(void *, struct wiphy *, struct wireless_dev *);
-
-typedef void (*btf_trace_cfg80211_pmsr_report)(void *, struct wiphy *, struct wireless_dev *, u64, const u8 *);
-
-typedef void (*btf_trace_cfg80211_pmsr_complete)(void *, struct wiphy *, struct wireless_dev *, u64);
-
-typedef void (*btf_trace_rdev_update_owe_info)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_update_owe_info *);
-
-typedef void (*btf_trace_cfg80211_update_owe_info_event)(void *, struct wiphy *, struct net_device___2 *, struct cfg80211_update_owe_info *);
-
-typedef void (*btf_trace_rdev_probe_mesh_link)(void *, struct wiphy *, struct net_device___2 *, const u8 *, const u8 *, size_t);
-
-enum nl80211_peer_measurement_status {
-	NL80211_PMSR_STATUS_SUCCESS = 0,
-	NL80211_PMSR_STATUS_REFUSED = 1,
-	NL80211_PMSR_STATUS_TIMEOUT = 2,
-	NL80211_PMSR_STATUS_FAILURE = 3,
-};
-
-enum nl80211_peer_measurement_resp {
-	__NL80211_PMSR_RESP_ATTR_INVALID = 0,
-	NL80211_PMSR_RESP_ATTR_DATA = 1,
-	NL80211_PMSR_RESP_ATTR_STATUS = 2,
-	NL80211_PMSR_RESP_ATTR_HOST_TIME = 3,
-	NL80211_PMSR_RESP_ATTR_AP_TSF = 4,
-	NL80211_PMSR_RESP_ATTR_FINAL = 5,
-	NL80211_PMSR_RESP_ATTR_PAD = 6,
-	NUM_NL80211_PMSR_RESP_ATTRS = 7,
-	NL80211_PMSR_RESP_ATTR_MAX = 6,
-};
-
-enum nl80211_peer_measurement_ftm_failure_reasons {
-	NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0,
-	NL80211_PMSR_FTM_FAILURE_NO_RESPONSE = 1,
-	NL80211_PMSR_FTM_FAILURE_REJECTED = 2,
-	NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 3,
-	NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE = 4,
-	NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP = 5,
-	NL80211_PMSR_FTM_FAILURE_PEER_BUSY = 6,
-	NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS = 7,
-};
-
-enum nl80211_peer_measurement_ftm_resp {
-	__NL80211_PMSR_FTM_RESP_ATTR_INVALID = 0,
-	NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 1,
-	NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX = 2,
-	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 3,
-	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 4,
-	NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME = 5,
-	NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 6,
-	NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION = 7,
-	NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 8,
-	NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG = 9,
-	NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD = 10,
-	NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 11,
-	NL80211_PMSR_FTM_RESP_ATTR_RX_RATE = 12,
-	NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG = 13,
-	NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE = 14,
-	NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD = 15,
-	NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG = 16,
-	NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE = 17,
-	NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD = 18,
-	NL80211_PMSR_FTM_RESP_ATTR_LCI = 19,
-	NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC = 20,
-	NL80211_PMSR_FTM_RESP_ATTR_PAD = 21,
-	NUM_NL80211_PMSR_FTM_RESP_ATTR = 22,
-	NL80211_PMSR_FTM_RESP_ATTR_MAX = 21,
-};
-
-struct cfg80211_pmsr_ftm_result {
-	const u8 *lci;
-	const u8 *civicloc;
-	unsigned int lci_len;
-	unsigned int civicloc_len;
-	enum nl80211_peer_measurement_ftm_failure_reasons failure_reason;
-	u32 num_ftmr_attempts;
-	u32 num_ftmr_successes;
-	s16 burst_index;
-	u8 busy_retry_time;
-	u8 num_bursts_exp;
-	u8 burst_duration;
-	u8 ftms_per_burst;
-	s32 rssi_avg;
-	s32 rssi_spread;
-	struct rate_info tx_rate;
-	struct rate_info rx_rate;
-	s64 rtt_avg;
-	s64 rtt_variance;
-	s64 rtt_spread;
-	s64 dist_avg;
-	s64 dist_variance;
-	s64 dist_spread;
-	u16 num_ftmr_attempts_valid: 1;
-	u16 num_ftmr_successes_valid: 1;
-	u16 rssi_avg_valid: 1;
-	u16 rssi_spread_valid: 1;
-	u16 tx_rate_valid: 1;
-	u16 rx_rate_valid: 1;
-	u16 rtt_avg_valid: 1;
-	u16 rtt_variance_valid: 1;
-	u16 rtt_spread_valid: 1;
-	u16 dist_avg_valid: 1;
-	u16 dist_variance_valid: 1;
-	u16 dist_spread_valid: 1;
-};
-
-struct cfg80211_pmsr_result {
-	u64 host_time;
-	u64 ap_tsf;
-	enum nl80211_peer_measurement_status status;
-	u8 addr[6];
-	u8 final: 1;
-	u8 ap_tsf_valid: 1;
-	enum nl80211_peer_measurement_type type;
-	union {
-		struct cfg80211_pmsr_ftm_result ftm;
-	};
-};
-
-struct ieee80211_channel_sw_ie {
-	u8 mode;
-	u8 new_ch_num;
-	u8 count;
-};
-
-struct ieee80211_sec_chan_offs_ie {
-	u8 sec_chan_offs;
-};
-
-struct ieee80211_mesh_chansw_params_ie {
-	u8 mesh_ttl;
-	u8 mesh_flags;
-	__le16 mesh_reason;
-	__le16 mesh_pre_value;
-};
-
-struct ieee80211_wide_bw_chansw_ie {
-	u8 new_channel_width;
-	u8 new_center_freq_seg0;
-	u8 new_center_freq_seg1;
-};
-
-struct ieee80211_tim_ie {
-	u8 dtim_count;
-	u8 dtim_period;
-	u8 bitmap_ctrl;
-	u8 virtual_map[1];
-};
-
-struct ieee80211_meshconf_ie {
-	u8 meshconf_psel;
-	u8 meshconf_pmetric;
-	u8 meshconf_congest;
-	u8 meshconf_synch;
-	u8 meshconf_auth;
-	u8 meshconf_form;
-	u8 meshconf_cap;
-};
-
-struct ieee80211_rann_ie {
-	u8 rann_flags;
-	u8 rann_hopcount;
-	u8 rann_ttl;
-	u8 rann_addr[6];
-	__le32 rann_seq;
-	__le32 rann_interval;
-	__le32 rann_metric;
-} __attribute__((packed));
-
-struct ieee80211_addba_ext_ie {
-	u8 data;
-};
-
-struct ieee80211_ch_switch_timing {
-	__le16 switch_time;
-	__le16 switch_timeout;
-};
-
-struct ieee80211_tdls_lnkie {
-	u8 ie_type;
-	u8 ie_len;
-	u8 bssid[6];
-	u8 init_sta[6];
-	u8 resp_sta[6];
-};
-
-struct ieee80211_p2p_noa_desc {
-	u8 count;
-	__le32 duration;
-	__le32 interval;
-	__le32 start_time;
-} __attribute__((packed));
-
-struct ieee80211_p2p_noa_attr {
-	u8 index;
-	u8 oppps_ctwindow;
-	struct ieee80211_p2p_noa_desc desc[4];
-} __attribute__((packed));
-
-struct ieee80211_vht_operation {
-	u8 chan_width;
-	u8 center_freq_seg0_idx;
-	u8 center_freq_seg1_idx;
-	__le16 basic_mcs_set;
-} __attribute__((packed));
-
-struct ieee80211_he_operation {
-	__le32 he_oper_params;
-	__le16 he_mcs_nss_set;
-	u8 optional[0];
-} __attribute__((packed));
-
-struct ieee80211_he_spr {
-	u8 he_sr_control;
-	u8 optional[0];
-};
-
-struct ieee80211_he_mu_edca_param_ac_rec {
-	u8 aifsn;
-	u8 ecw_min_max;
-	u8 mu_edca_timer;
-};
-
-struct ieee80211_mu_edca_param_set {
-	u8 mu_qos_info;
-	struct ieee80211_he_mu_edca_param_ac_rec ac_be;
-	struct ieee80211_he_mu_edca_param_ac_rec ac_bk;
-	struct ieee80211_he_mu_edca_param_ac_rec ac_vi;
-	struct ieee80211_he_mu_edca_param_ac_rec ac_vo;
-};
-
-struct ieee80211_timeout_interval_ie {
-	u8 type;
-	__le32 value;
-} __attribute__((packed));
-
-struct ieee80211_bss_max_idle_period_ie {
-	__le16 max_idle_period;
-	u8 idle_options;
-} __attribute__((packed));
-
-struct ieee80211_bssid_index {
-	u8 bssid_index;
-	u8 dtim_period;
-	u8 dtim_count;
-};
-
-struct ieee80211_multiple_bssid_configuration {
-	u8 bssid_count;
-	u8 profile_periodicity;
-};
-
-typedef u32 codel_time_t;
-
-struct codel_params {
-	codel_time_t target;
-	codel_time_t ce_threshold;
-	codel_time_t interval;
-	u32 mtu;
-	bool ecn;
-};
-
-struct codel_vars {
-	u32 count;
-	u32 lastcount;
-	bool dropping;
-	u16 rec_inv_sqrt;
-	codel_time_t first_above_time;
-	codel_time_t drop_next;
-	codel_time_t ldelay;
-};
-
-enum ieee80211_radiotap_mcs_have {
-	IEEE80211_RADIOTAP_MCS_HAVE_BW = 1,
-	IEEE80211_RADIOTAP_MCS_HAVE_MCS = 2,
-	IEEE80211_RADIOTAP_MCS_HAVE_GI = 4,
-	IEEE80211_RADIOTAP_MCS_HAVE_FMT = 8,
-	IEEE80211_RADIOTAP_MCS_HAVE_FEC = 16,
-	IEEE80211_RADIOTAP_MCS_HAVE_STBC = 32,
-};
-
-enum ieee80211_radiotap_vht_known {
-	IEEE80211_RADIOTAP_VHT_KNOWN_STBC = 1,
-	IEEE80211_RADIOTAP_VHT_KNOWN_TXOP_PS_NA = 2,
-	IEEE80211_RADIOTAP_VHT_KNOWN_GI = 4,
-	IEEE80211_RADIOTAP_VHT_KNOWN_SGI_NSYM_DIS = 8,
-	IEEE80211_RADIOTAP_VHT_KNOWN_LDPC_EXTRA_OFDM_SYM = 16,
-	IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED = 32,
-	IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH = 64,
-	IEEE80211_RADIOTAP_VHT_KNOWN_GROUP_ID = 128,
-	IEEE80211_RADIOTAP_VHT_KNOWN_PARTIAL_AID = 256,
-};
-
-enum ieee80211_max_queues {
-	IEEE80211_MAX_QUEUES = 16,
-	IEEE80211_MAX_QUEUE_MAP = 65535,
-};
-
-struct ieee80211_tx_queue_params {
-	u16 txop;
-	u16 cw_min;
-	u16 cw_max;
-	u8 aifs;
-	bool acm;
-	bool uapsd;
-	bool mu_edca;
-	struct ieee80211_he_mu_edca_param_ac_rec mu_edca_param_rec;
-};
-
-struct ieee80211_low_level_stats {
-	unsigned int dot11ACKFailureCount;
-	unsigned int dot11RTSFailureCount;
-	unsigned int dot11FCSErrorCount;
-	unsigned int dot11RTSSuccessCount;
-};
-
-struct ieee80211_chanctx_conf {
-	struct cfg80211_chan_def def;
-	struct cfg80211_chan_def min_def;
-	u8 rx_chains_static;
-	u8 rx_chains_dynamic;
-	bool radar_enabled;
-	long: 40;
-	u8 drv_priv[0];
-};
-
-enum ieee80211_chanctx_switch_mode {
-	CHANCTX_SWMODE_REASSIGN_VIF = 0,
-	CHANCTX_SWMODE_SWAP_CONTEXTS = 1,
-};
-
-struct ieee80211_vif;
-
-struct ieee80211_vif_chanctx_switch {
-	struct ieee80211_vif *vif;
-	struct ieee80211_chanctx_conf *old_ctx;
-	struct ieee80211_chanctx_conf *new_ctx;
-};
-
-struct ieee80211_mu_group_data {
-	u8 membership[8];
-	u8 position[16];
-};
-
-struct ieee80211_ftm_responder_params;
-
-struct ieee80211_bss_conf {
-	const u8 *bssid;
-	u8 bss_color;
-	u8 htc_trig_based_pkt_ext;
-	bool multi_sta_back_32bit;
-	bool uora_exists;
-	bool ack_enabled;
-	u8 uora_ocw_range;
-	u16 frame_time_rts_th;
-	bool he_support;
-	bool twt_requester;
-	bool twt_responder;
-	bool assoc;
-	bool ibss_joined;
-	bool ibss_creator;
-	u16 aid;
-	bool use_cts_prot;
-	bool use_short_preamble;
-	bool use_short_slot;
-	bool enable_beacon;
-	u8 dtim_period;
-	char: 8;
-	u16 beacon_int;
-	u16 assoc_capability;
-	long: 48;
-	u64 sync_tsf;
-	u32 sync_device_ts;
-	u8 sync_dtim_count;
-	int: 24;
-	u32 basic_rates;
-	int: 32;
-	struct ieee80211_rate *beacon_rate;
-	int mcast_rate[4];
-	u16 ht_operation_mode;
-	short: 16;
-	s32 cqm_rssi_thold;
-	u32 cqm_rssi_hyst;
-	s32 cqm_rssi_low;
-	s32 cqm_rssi_high;
-	int: 32;
-	struct cfg80211_chan_def chandef;
-	struct ieee80211_mu_group_data mu_group;
-	__be32 arp_addr_list[4];
-	int arp_addr_cnt;
-	bool qos;
-	bool idle;
-	bool ps;
-	u8 ssid[32];
-	char: 8;
-	size_t ssid_len;
-	bool hidden_ssid;
-	int: 24;
-	int txpower;
-	enum nl80211_tx_power_setting txpower_type;
-	struct ieee80211_p2p_noa_attr p2p_noa_attr;
-	bool allow_p2p_go_ps;
-	char: 8;
-	u16 max_idle_period;
-	bool protected_keep_alive;
-	bool ftm_responder;
-	struct ieee80211_ftm_responder_params *ftmr_params;
-	bool nontransmitted;
-	u8 transmitter_bssid[6];
-	u8 bssid_index;
-	u8 bssid_indicator;
-	bool ema_ap;
-	u8 profile_periodicity;
-	struct ieee80211_he_operation he_operation;
-	struct ieee80211_he_obss_pd he_obss_pd;
-	int: 32;
-} __attribute__((packed));
-
-struct ieee80211_txq;
-
-struct ieee80211_vif {
-	enum nl80211_iftype type;
-	struct ieee80211_bss_conf bss_conf;
-	u8 addr[6];
-	bool p2p;
-	bool csa_active;
-	bool mu_mimo_owner;
-	u8 cab_queue;
-	u8 hw_queue[4];
-	struct ieee80211_txq *txq;
-	struct ieee80211_chanctx_conf *chanctx_conf;
-	u32 driver_flags;
-	unsigned int probe_req_reg;
-	bool txqs_stopped[4];
-	int: 32;
-	u8 drv_priv[0];
-};
-
-enum ieee80211_bss_change {
-	BSS_CHANGED_ASSOC = 1,
-	BSS_CHANGED_ERP_CTS_PROT = 2,
-	BSS_CHANGED_ERP_PREAMBLE = 4,
-	BSS_CHANGED_ERP_SLOT = 8,
-	BSS_CHANGED_HT = 16,
-	BSS_CHANGED_BASIC_RATES = 32,
-	BSS_CHANGED_BEACON_INT = 64,
-	BSS_CHANGED_BSSID = 128,
-	BSS_CHANGED_BEACON = 256,
-	BSS_CHANGED_BEACON_ENABLED = 512,
-	BSS_CHANGED_CQM = 1024,
-	BSS_CHANGED_IBSS = 2048,
-	BSS_CHANGED_ARP_FILTER = 4096,
-	BSS_CHANGED_QOS = 8192,
-	BSS_CHANGED_IDLE = 16384,
-	BSS_CHANGED_SSID = 32768,
-	BSS_CHANGED_AP_PROBE_RESP = 65536,
-	BSS_CHANGED_PS = 131072,
-	BSS_CHANGED_TXPOWER = 262144,
-	BSS_CHANGED_P2P_PS = 524288,
-	BSS_CHANGED_BEACON_INFO = 1048576,
-	BSS_CHANGED_BANDWIDTH = 2097152,
-	BSS_CHANGED_OCB = 4194304,
-	BSS_CHANGED_MU_GROUPS = 8388608,
-	BSS_CHANGED_KEEP_ALIVE = 16777216,
-	BSS_CHANGED_MCAST_RATE = 33554432,
-	BSS_CHANGED_FTM_RESPONDER = 67108864,
-	BSS_CHANGED_TWT = 134217728,
-	BSS_CHANGED_HE_OBSS_PD = 268435456,
-};
-
-enum ieee80211_event_type {
-	RSSI_EVENT = 0,
-	MLME_EVENT = 1,
-	BAR_RX_EVENT = 2,
-	BA_FRAME_TIMEOUT = 3,
-};
-
-enum ieee80211_rssi_event_data {
-	RSSI_EVENT_HIGH = 0,
-	RSSI_EVENT_LOW = 1,
-};
-
-struct ieee80211_rssi_event {
-	enum ieee80211_rssi_event_data data;
-};
-
-enum ieee80211_mlme_event_data {
-	AUTH_EVENT = 0,
-	ASSOC_EVENT = 1,
-	DEAUTH_RX_EVENT = 2,
-	DEAUTH_TX_EVENT = 3,
-};
-
-enum ieee80211_mlme_event_status {
-	MLME_SUCCESS = 0,
-	MLME_DENIED = 1,
-	MLME_TIMEOUT = 2,
-};
-
-struct ieee80211_mlme_event {
-	enum ieee80211_mlme_event_data data;
-	enum ieee80211_mlme_event_status status;
-	u16 reason;
-};
-
-struct ieee80211_sta;
-
-struct ieee80211_ba_event {
-	struct ieee80211_sta *sta;
-	u16 tid;
-	u16 ssn;
-};
-
-enum ieee80211_sta_rx_bandwidth {
-	IEEE80211_STA_RX_BW_20 = 0,
-	IEEE80211_STA_RX_BW_40 = 1,
-	IEEE80211_STA_RX_BW_80 = 2,
-	IEEE80211_STA_RX_BW_160 = 3,
-};
-
-enum ieee80211_smps_mode {
-	IEEE80211_SMPS_AUTOMATIC = 0,
-	IEEE80211_SMPS_OFF = 1,
-	IEEE80211_SMPS_STATIC = 2,
-	IEEE80211_SMPS_DYNAMIC = 3,
-	IEEE80211_SMPS_NUM_MODES = 4,
-};
-
-struct ieee80211_sta_txpwr {
-	s16 power;
-	enum nl80211_tx_power_setting type;
-};
-
-struct ieee80211_sta_rates;
-
-struct ieee80211_sta {
-	u32 supp_rates[4];
-	u8 addr[6];
-	u16 aid;
-	struct ieee80211_sta_ht_cap ht_cap;
-	struct ieee80211_sta_vht_cap vht_cap;
-	struct ieee80211_sta_he_cap he_cap;
-	u16 max_rx_aggregation_subframes;
-	bool wme;
-	u8 uapsd_queues;
-	u8 max_sp;
-	u8 rx_nss;
-	enum ieee80211_sta_rx_bandwidth bandwidth;
-	enum ieee80211_smps_mode smps_mode;
-	struct ieee80211_sta_rates *rates;
-	bool tdls;
-	bool tdls_initiator;
-	bool mfp;
-	u8 max_amsdu_subframes;
-	u16 max_amsdu_len;
-	bool support_p2p_ps;
-	u16 max_rc_amsdu_len;
-	u16 max_tid_amsdu_len[16];
-	struct ieee80211_sta_txpwr txpwr;
-	struct ieee80211_txq *txq[17];
-	u8 drv_priv[0];
-};
-
-struct ieee80211_event {
-	enum ieee80211_event_type type;
-	union {
-		struct ieee80211_rssi_event rssi;
-		struct ieee80211_mlme_event mlme;
-		struct ieee80211_ba_event ba;
-	} u;
-};
-
-struct ieee80211_ftm_responder_params {
-	const u8 *lci;
-	const u8 *civicloc;
-	size_t lci_len;
-	size_t civicloc_len;
-};
-
-struct ieee80211_tx_rate {
-	s8 idx;
-	u16 count: 5;
-	u16 flags: 11;
-} __attribute__((packed));
-
-struct ieee80211_key_conf {
-	atomic64_t tx_pn;
-	u32 cipher;
-	u8 icv_len;
-	u8 iv_len;
-	u8 hw_key_idx;
-	s8 keyidx;
-	u16 flags;
-	u8 keylen;
-	u8 key[0];
-};
-
-struct ieee80211_tx_info {
-	u32 flags;
-	u8 band;
-	u8 hw_queue;
-	u16 ack_frame_id: 6;
-	u16 tx_time_est: 10;
-	union {
-		struct {
-			union {
-				struct {
-					struct ieee80211_tx_rate rates[4];
-					s8 rts_cts_rate_idx;
-					u8 use_rts: 1;
-					u8 use_cts_prot: 1;
-					u8 short_preamble: 1;
-					u8 skip_table: 1;
-				};
-				long unsigned int jiffies;
-			};
-			struct ieee80211_vif *vif;
-			struct ieee80211_key_conf *hw_key;
-			u32 flags;
-			codel_time_t enqueue_time;
-		} control;
-		struct {
-			u64 cookie;
-		} ack;
-		struct {
-			struct ieee80211_tx_rate rates[4];
-			s32 ack_signal;
-			u8 ampdu_ack_len;
-			u8 ampdu_len;
-			u8 antenna;
-			u16 tx_time;
-			bool is_valid_ack_signal;
-			void *status_driver_data[2];
-		} status;
-		struct {
-			struct ieee80211_tx_rate driver_rates[4];
-			u8 pad[4];
-			void *rate_driver_data[3];
-		};
-		void *driver_data[5];
-	};
-};
-
-struct ieee80211_tx_status {
-	struct ieee80211_sta *sta;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb;
-	struct rate_info *rate;
-};
-
-struct ieee80211_scan_ies {
-	const u8 *ies[4];
-	size_t len[4];
-	const u8 *common_ies;
-	size_t common_ie_len;
-};
-
-struct ieee80211_rx_status {
-	u64 mactime;
-	u64 boottime_ns;
-	u32 device_timestamp;
-	u32 ampdu_reference;
-	u32 flag;
-	u16 freq;
-	u8 enc_flags;
-	u8 encoding: 2;
-	u8 bw: 3;
-	u8 he_ru: 3;
-	u8 he_gi: 2;
-	u8 he_dcm: 1;
-	u8 rate_idx;
-	u8 nss;
-	u8 rx_flags;
-	u8 band;
-	u8 antenna;
-	s8 signal;
-	u8 chains;
-	s8 chain_signal[4];
-	u8 ampdu_delimiter_crc;
-	u8 zero_length_psdu_type;
-};
-
-enum ieee80211_conf_flags {
-	IEEE80211_CONF_MONITOR = 1,
-	IEEE80211_CONF_PS = 2,
-	IEEE80211_CONF_IDLE = 4,
-	IEEE80211_CONF_OFFCHANNEL = 8,
-};
-
-enum ieee80211_conf_changed {
-	IEEE80211_CONF_CHANGE_SMPS = 2,
-	IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = 4,
-	IEEE80211_CONF_CHANGE_MONITOR = 8,
-	IEEE80211_CONF_CHANGE_PS = 16,
-	IEEE80211_CONF_CHANGE_POWER = 32,
-	IEEE80211_CONF_CHANGE_CHANNEL = 64,
-	IEEE80211_CONF_CHANGE_RETRY_LIMITS = 128,
-	IEEE80211_CONF_CHANGE_IDLE = 256,
-};
-
-struct ieee80211_conf {
-	u32 flags;
-	int power_level;
-	int dynamic_ps_timeout;
-	u16 listen_interval;
-	u8 ps_dtim_period;
-	u8 long_frame_max_tx_count;
-	u8 short_frame_max_tx_count;
-	struct cfg80211_chan_def chandef;
-	bool radar_enabled;
-	enum ieee80211_smps_mode smps_mode;
-};
-
-struct ieee80211_channel_switch {
-	u64 timestamp;
-	u32 device_timestamp;
-	bool block_tx;
-	struct cfg80211_chan_def chandef;
-	u8 count;
-	u32 delay;
-};
-
-struct ieee80211_txq {
-	struct ieee80211_vif *vif;
-	struct ieee80211_sta *sta;
-	u8 tid;
-	u8 ac;
-	long: 48;
-	u8 drv_priv[0];
-};
-
-struct ieee80211_key_seq {
-	union {
-		struct {
-			u32 iv32;
-			u16 iv16;
-		} tkip;
-		struct {
-			u8 pn[6];
-		} ccmp;
-		struct {
-			u8 pn[6];
-		} aes_cmac;
-		struct {
-			u8 pn[6];
-		} aes_gmac;
-		struct {
-			u8 pn[6];
-		} gcmp;
-		struct {
-			u8 seq[16];
-			u8 seq_len;
-		} hw;
-	};
-};
-
-struct ieee80211_cipher_scheme {
-	u32 cipher;
-	u16 iftype;
-	u8 hdr_len;
-	u8 pn_len;
-	u8 pn_off;
-	u8 key_idx_off;
-	u8 key_idx_mask;
-	u8 key_idx_shift;
-	u8 mic_len;
-};
-
-enum set_key_cmd {
-	SET_KEY = 0,
-	DISABLE_KEY = 1,
-};
-
-enum ieee80211_sta_state {
-	IEEE80211_STA_NOTEXIST = 0,
-	IEEE80211_STA_NONE = 1,
-	IEEE80211_STA_AUTH = 2,
-	IEEE80211_STA_ASSOC = 3,
-	IEEE80211_STA_AUTHORIZED = 4,
-};
-
-struct ieee80211_sta_rates {
-	struct callback_head callback_head;
-	struct {
-		s8 idx;
-		u8 count;
-		u8 count_cts;
-		u8 count_rts;
-		u16 flags;
-	} rate[4];
-};
-
-enum sta_notify_cmd {
-	STA_NOTIFY_SLEEP = 0,
-	STA_NOTIFY_AWAKE = 1,
-};
-
-struct ieee80211_tx_control {
-	struct ieee80211_sta *sta;
-};
-
-enum ieee80211_hw_flags {
-	IEEE80211_HW_HAS_RATE_CONTROL = 0,
-	IEEE80211_HW_RX_INCLUDES_FCS = 1,
-	IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 2,
-	IEEE80211_HW_SIGNAL_UNSPEC = 3,
-	IEEE80211_HW_SIGNAL_DBM = 4,
-	IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC = 5,
-	IEEE80211_HW_SPECTRUM_MGMT = 6,
-	IEEE80211_HW_AMPDU_AGGREGATION = 7,
-	IEEE80211_HW_SUPPORTS_PS = 8,
-	IEEE80211_HW_PS_NULLFUNC_STACK = 9,
-	IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 10,
-	IEEE80211_HW_MFP_CAPABLE = 11,
-	IEEE80211_HW_WANT_MONITOR_VIF = 12,
-	IEEE80211_HW_NO_AUTO_VIF = 13,
-	IEEE80211_HW_SW_CRYPTO_CONTROL = 14,
-	IEEE80211_HW_SUPPORT_FAST_XMIT = 15,
-	IEEE80211_HW_REPORTS_TX_ACK_STATUS = 16,
-	IEEE80211_HW_CONNECTION_MONITOR = 17,
-	IEEE80211_HW_QUEUE_CONTROL = 18,
-	IEEE80211_HW_SUPPORTS_PER_STA_GTK = 19,
-	IEEE80211_HW_AP_LINK_PS = 20,
-	IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 21,
-	IEEE80211_HW_SUPPORTS_RC_TABLE = 22,
-	IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 23,
-	IEEE80211_HW_TIMING_BEACON_ONLY = 24,
-	IEEE80211_HW_SUPPORTS_HT_CCK_RATES = 25,
-	IEEE80211_HW_CHANCTX_STA_CSA = 26,
-	IEEE80211_HW_SUPPORTS_CLONED_SKBS = 27,
-	IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS = 28,
-	IEEE80211_HW_TDLS_WIDER_BW = 29,
-	IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU = 30,
-	IEEE80211_HW_BEACON_TX_STATUS = 31,
-	IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR = 32,
-	IEEE80211_HW_SUPPORTS_REORDERING_BUFFER = 33,
-	IEEE80211_HW_USES_RSS = 34,
-	IEEE80211_HW_TX_AMSDU = 35,
-	IEEE80211_HW_TX_FRAG_LIST = 36,
-	IEEE80211_HW_REPORTS_LOW_ACK = 37,
-	IEEE80211_HW_SUPPORTS_TX_FRAG = 38,
-	IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA = 39,
-	IEEE80211_HW_DEAUTH_NEED_MGD_TX_PREP = 40,
-	IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP = 41,
-	IEEE80211_HW_BUFF_MMPDU_TXQ = 42,
-	IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW = 43,
-	IEEE80211_HW_STA_MMPDU_TXQ = 44,
-	IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN = 45,
-	IEEE80211_HW_SUPPORTS_MULTI_BSSID = 46,
-	IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID = 47,
-	IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT = 48,
-	NUM_IEEE80211_HW_FLAGS = 49,
-};
-
-struct ieee80211_hw {
-	struct ieee80211_conf conf;
-	struct wiphy *wiphy;
-	const char *rate_control_algorithm;
-	void *priv;
-	long unsigned int flags[1];
-	unsigned int extra_tx_headroom;
-	unsigned int extra_beacon_tailroom;
-	int vif_data_size;
-	int sta_data_size;
-	int chanctx_data_size;
-	int txq_data_size;
-	u16 queues;
-	u16 max_listen_interval;
-	s8 max_signal;
-	u8 max_rates;
-	u8 max_report_rates;
-	u8 max_rate_tries;
-	u16 max_rx_aggregation_subframes;
-	u16 max_tx_aggregation_subframes;
-	u8 max_tx_fragments;
-	u8 offchannel_tx_hw_queue;
-	u8 radiotap_mcs_details;
-	u16 radiotap_vht_details;
-	struct {
-		int units_pos;
-		s16 accuracy;
-	} radiotap_timestamp;
-	netdev_features_t netdev_features;
-	u8 uapsd_queues;
-	u8 uapsd_max_sp_len;
-	u8 n_cipher_schemes;
-	const struct ieee80211_cipher_scheme *cipher_schemes;
-	u8 max_nan_de_entries;
-	u8 tx_sk_pacing_shift;
-	u8 weight_multiplier;
-	u32 max_mtu;
-};
-
-struct ieee80211_scan_request {
-	struct ieee80211_scan_ies ies;
-	struct cfg80211_scan_request req;
-};
-
-struct ieee80211_tdls_ch_sw_params {
-	struct ieee80211_sta *sta;
-	struct cfg80211_chan_def *chandef;
-	u8 action_code;
-	u32 status;
-	u32 timestamp;
-	u16 switch_time;
-	u16 switch_timeout;
-	struct sk_buff *tmpl_skb;
-	u32 ch_sw_tm_ie;
-};
-
-enum ieee80211_filter_flags {
-	FIF_ALLMULTI = 2,
-	FIF_FCSFAIL = 4,
-	FIF_PLCPFAIL = 8,
-	FIF_BCN_PRBRESP_PROMISC = 16,
-	FIF_CONTROL = 32,
-	FIF_OTHER_BSS = 64,
-	FIF_PSPOLL = 128,
-	FIF_PROBE_REQ = 256,
-};
-
-enum ieee80211_ampdu_mlme_action {
-	IEEE80211_AMPDU_RX_START = 0,
-	IEEE80211_AMPDU_RX_STOP = 1,
-	IEEE80211_AMPDU_TX_START = 2,
-	IEEE80211_AMPDU_TX_STOP_CONT = 3,
-	IEEE80211_AMPDU_TX_STOP_FLUSH = 4,
-	IEEE80211_AMPDU_TX_STOP_FLUSH_CONT = 5,
-	IEEE80211_AMPDU_TX_OPERATIONAL = 6,
-};
-
-struct ieee80211_ampdu_params {
-	enum ieee80211_ampdu_mlme_action action;
-	struct ieee80211_sta *sta;
-	u16 tid;
-	u16 ssn;
-	u16 buf_size;
-	bool amsdu;
-	u16 timeout;
-};
-
-enum ieee80211_frame_release_type {
-	IEEE80211_FRAME_RELEASE_PSPOLL = 0,
-	IEEE80211_FRAME_RELEASE_UAPSD = 1,
-};
-
-enum ieee80211_roc_type {
-	IEEE80211_ROC_TYPE_NORMAL = 0,
-	IEEE80211_ROC_TYPE_MGMT_TX = 1,
-};
-
-enum ieee80211_reconfig_type {
-	IEEE80211_RECONFIG_TYPE_RESTART = 0,
-	IEEE80211_RECONFIG_TYPE_SUSPEND = 1,
-};
-
-struct ieee80211_ops {
-	void (*tx)(struct ieee80211_hw *, struct ieee80211_tx_control *, struct sk_buff *);
-	int (*start)(struct ieee80211_hw *);
-	void (*stop)(struct ieee80211_hw *);
-	int (*suspend)(struct ieee80211_hw *, struct cfg80211_wowlan *);
-	int (*resume)(struct ieee80211_hw *);
-	void (*set_wakeup)(struct ieee80211_hw *, bool);
-	int (*add_interface)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*change_interface)(struct ieee80211_hw *, struct ieee80211_vif *, enum nl80211_iftype, bool);
-	void (*remove_interface)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*config)(struct ieee80211_hw *, u32);
-	void (*bss_info_changed)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_bss_conf *, u32);
-	int (*start_ap)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*stop_ap)(struct ieee80211_hw *, struct ieee80211_vif *);
-	u64 (*prepare_multicast)(struct ieee80211_hw *, struct netdev_hw_addr_list *);
-	void (*configure_filter)(struct ieee80211_hw *, unsigned int, unsigned int *, u64);
-	void (*config_iface_filter)(struct ieee80211_hw *, struct ieee80211_vif *, unsigned int, unsigned int);
-	int (*set_tim)(struct ieee80211_hw *, struct ieee80211_sta *, bool);
-	int (*set_key)(struct ieee80211_hw *, enum set_key_cmd, struct ieee80211_vif *, struct ieee80211_sta *, struct ieee80211_key_conf *);
-	void (*update_tkip_key)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_key_conf *, struct ieee80211_sta *, u32, u16 *);
-	void (*set_rekey_data)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_gtk_rekey_data *);
-	void (*set_default_unicast_key)(struct ieee80211_hw *, struct ieee80211_vif *, int);
-	int (*hw_scan)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_scan_request *);
-	void (*cancel_hw_scan)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*sched_scan_start)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_sched_scan_request *, struct ieee80211_scan_ies *);
-	int (*sched_scan_stop)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*sw_scan_start)(struct ieee80211_hw *, struct ieee80211_vif *, const u8 *);
-	void (*sw_scan_complete)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*get_stats)(struct ieee80211_hw *, struct ieee80211_low_level_stats *);
-	void (*get_key_seq)(struct ieee80211_hw *, struct ieee80211_key_conf *, struct ieee80211_key_seq *);
-	int (*set_frag_threshold)(struct ieee80211_hw *, u32);
-	int (*set_rts_threshold)(struct ieee80211_hw *, u32);
-	int (*sta_add)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	int (*sta_remove)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	void (*sta_notify)(struct ieee80211_hw *, struct ieee80211_vif *, enum sta_notify_cmd, struct ieee80211_sta *);
-	int (*sta_set_txpwr)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	int (*sta_state)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *, enum ieee80211_sta_state, enum ieee80211_sta_state);
-	void (*sta_pre_rcu_remove)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	void (*sta_rc_update)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *, u32);
-	void (*sta_rate_tbl_update)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	void (*sta_statistics)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *, struct station_info *);
-	int (*conf_tx)(struct ieee80211_hw *, struct ieee80211_vif *, u16, const struct ieee80211_tx_queue_params *);
-	u64 (*get_tsf)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*set_tsf)(struct ieee80211_hw *, struct ieee80211_vif *, u64);
-	void (*offset_tsf)(struct ieee80211_hw *, struct ieee80211_vif *, s64);
-	void (*reset_tsf)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*tx_last_beacon)(struct ieee80211_hw *);
-	int (*ampdu_action)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_ampdu_params *);
-	int (*get_survey)(struct ieee80211_hw *, int, struct survey_info *);
-	void (*rfkill_poll)(struct ieee80211_hw *);
-	void (*set_coverage_class)(struct ieee80211_hw *, s16);
-	void (*flush)(struct ieee80211_hw *, struct ieee80211_vif *, u32, bool);
-	void (*channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_channel_switch *);
-	int (*set_antenna)(struct ieee80211_hw *, u32, u32);
-	int (*get_antenna)(struct ieee80211_hw *, u32 *, u32 *);
-	int (*remain_on_channel)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_channel *, int, enum ieee80211_roc_type);
-	int (*cancel_remain_on_channel)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*set_ringparam)(struct ieee80211_hw *, u32, u32);
-	void (*get_ringparam)(struct ieee80211_hw *, u32 *, u32 *, u32 *, u32 *);
-	bool (*tx_frames_pending)(struct ieee80211_hw *);
-	int (*set_bitrate_mask)(struct ieee80211_hw *, struct ieee80211_vif *, const struct cfg80211_bitrate_mask *);
-	void (*event_callback)(struct ieee80211_hw *, struct ieee80211_vif *, const struct ieee80211_event *);
-	void (*allow_buffered_frames)(struct ieee80211_hw *, struct ieee80211_sta *, u16, int, enum ieee80211_frame_release_type, bool);
-	void (*release_buffered_frames)(struct ieee80211_hw *, struct ieee80211_sta *, u16, int, enum ieee80211_frame_release_type, bool);
-	int (*get_et_sset_count)(struct ieee80211_hw *, struct ieee80211_vif *, int);
-	void (*get_et_stats)(struct ieee80211_hw *, struct ieee80211_vif *, struct ethtool_stats *, u64 *);
-	void (*get_et_strings)(struct ieee80211_hw *, struct ieee80211_vif *, u32, u8 *);
-	void (*mgd_prepare_tx)(struct ieee80211_hw *, struct ieee80211_vif *, u16);
-	void (*mgd_protect_tdls_discover)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*add_chanctx)(struct ieee80211_hw *, struct ieee80211_chanctx_conf *);
-	void (*remove_chanctx)(struct ieee80211_hw *, struct ieee80211_chanctx_conf *);
-	void (*change_chanctx)(struct ieee80211_hw *, struct ieee80211_chanctx_conf *, u32);
-	int (*assign_vif_chanctx)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_chanctx_conf *);
-	void (*unassign_vif_chanctx)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_chanctx_conf *);
-	int (*switch_vif_chanctx)(struct ieee80211_hw *, struct ieee80211_vif_chanctx_switch *, int, enum ieee80211_chanctx_switch_mode);
-	void (*reconfig_complete)(struct ieee80211_hw *, enum ieee80211_reconfig_type);
-	void (*ipv6_addr_change)(struct ieee80211_hw *, struct ieee80211_vif *, struct inet6_dev *);
-	void (*channel_switch_beacon)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_chan_def *);
-	int (*pre_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_channel_switch *);
-	int (*post_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*abort_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*channel_switch_rx_beacon)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_channel_switch *);
-	int (*join_ibss)(struct ieee80211_hw *, struct ieee80211_vif *);
-	void (*leave_ibss)(struct ieee80211_hw *, struct ieee80211_vif *);
-	u32 (*get_expected_throughput)(struct ieee80211_hw *, struct ieee80211_sta *);
-	int (*get_txpower)(struct ieee80211_hw *, struct ieee80211_vif *, int *);
-	int (*tdls_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *, u8, struct cfg80211_chan_def *, struct sk_buff *, u32);
-	void (*tdls_cancel_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_sta *);
-	void (*tdls_recv_channel_switch)(struct ieee80211_hw *, struct ieee80211_vif *, struct ieee80211_tdls_ch_sw_params *);
-	void (*wake_tx_queue)(struct ieee80211_hw *, struct ieee80211_txq *);
-	void (*sync_rx_queues)(struct ieee80211_hw *);
-	int (*start_nan)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_nan_conf *);
-	int (*stop_nan)(struct ieee80211_hw *, struct ieee80211_vif *);
-	int (*nan_change_conf)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_nan_conf *, u32);
-	int (*add_nan_func)(struct ieee80211_hw *, struct ieee80211_vif *, const struct cfg80211_nan_func *);
-	void (*del_nan_func)(struct ieee80211_hw *, struct ieee80211_vif *, u8);
-	bool (*can_aggregate_in_amsdu)(struct ieee80211_hw *, struct sk_buff *, struct sk_buff *);
-	int (*get_ftm_responder_stats)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_ftm_responder_stats *);
-	int (*start_pmsr)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_pmsr_request *);
-	void (*abort_pmsr)(struct ieee80211_hw *, struct ieee80211_vif *, struct cfg80211_pmsr_request *);
-};
-
-struct ieee80211_tpt_blink {
-	int throughput;
-	int blink_time;
-};
-
-struct ieee80211_tx_rate_control {
-	struct ieee80211_hw *hw;
-	struct ieee80211_supported_band *sband;
-	struct ieee80211_bss_conf *bss_conf;
-	struct sk_buff *skb;
-	struct ieee80211_tx_rate reported_rate;
-	bool rts;
-	bool short_preamble;
-	u32 rate_idx_mask;
-	u8 *rate_idx_mcs_mask;
-	bool bss;
-};
-
-enum rate_control_capabilities {
-	RATE_CTRL_CAPA_VHT_EXT_NSS_BW = 1,
-};
-
-struct rate_control_ops {
-	long unsigned int capa;
-	const char *name;
-	void * (*alloc)(struct ieee80211_hw *, struct dentry___2 *);
-	void (*free)(void *);
-	void * (*alloc_sta)(void *, struct ieee80211_sta *, gfp_t);
-	void (*rate_init)(void *, struct ieee80211_supported_band *, struct cfg80211_chan_def *, struct ieee80211_sta *, void *);
-	void (*rate_update)(void *, struct ieee80211_supported_band *, struct cfg80211_chan_def *, struct ieee80211_sta *, void *, u32);
-	void (*free_sta)(void *, struct ieee80211_sta *, void *);
-	void (*tx_status_ext)(void *, struct ieee80211_supported_band *, void *, struct ieee80211_tx_status *);
-	void (*tx_status)(void *, struct ieee80211_supported_band *, struct ieee80211_sta *, void *, struct sk_buff *);
-	void (*get_rate)(void *, struct ieee80211_sta *, void *, struct ieee80211_tx_rate_control *);
-	void (*add_sta_debugfs)(void *, void *, struct dentry___2 *);
-	u32 (*get_expected_throughput)(void *);
-};
-
-struct fq_tin;
-
-struct fq_flow {
-	struct fq_tin *tin;
-	struct list_head flowchain;
-	struct list_head backlogchain;
-	struct sk_buff_head queue;
-	u32 backlog;
-	int deficit;
-};
-
-struct fq_tin {
-	struct list_head new_flows;
-	struct list_head old_flows;
-	u32 backlog_bytes;
-	u32 backlog_packets;
-	u32 overlimit;
-	u32 collisions;
-	u32 flows;
-	u32 tx_bytes;
-	u32 tx_packets;
-};
-
-struct fq {
-	struct fq_flow *flows;
-	struct list_head backlogs;
-	spinlock_t lock;
-	u32 flows_cnt;
-	siphash_key_t perturbation;
-	u32 limit;
-	u32 memory_limit;
-	u32 memory_usage;
-	u32 quantum;
-	u32 backlog;
-	u32 overlimit;
-	u32 overmemory;
-	u32 collisions;
-};
-
-enum ieee80211_internal_tkip_state {
-	TKIP_STATE_NOT_INIT = 0,
-	TKIP_STATE_PHASE1_DONE = 1,
-	TKIP_STATE_PHASE1_HW_UPLOADED = 2,
-};
-
-struct tkip_ctx {
-	u16 p1k[5];
-	u32 p1k_iv32;
-	enum ieee80211_internal_tkip_state state;
-};
-
-struct tkip_ctx_rx {
-	struct tkip_ctx ctx;
-	u32 iv32;
-	u16 iv16;
-};
-
-struct ieee80211_local;
-
-struct ieee80211_sub_if_data;
-
-struct sta_info;
-
-struct ieee80211_key {
-	struct ieee80211_local *local;
-	struct ieee80211_sub_if_data *sdata;
-	struct sta_info *sta;
-	struct list_head list;
-	unsigned int flags;
-	union {
-		struct {
-			spinlock_t txlock;
-			struct tkip_ctx tx;
-			struct tkip_ctx_rx rx[16];
-			u32 mic_failures;
-		} tkip;
-		struct {
-			u8 rx_pn[102];
-			struct crypto_aead *tfm;
-			u32 replays;
-		} ccmp;
-		struct {
-			u8 rx_pn[6];
-			struct crypto_shash *tfm;
-			u32 replays;
-			u32 icverrors;
-		} aes_cmac;
-		struct {
-			u8 rx_pn[6];
-			struct crypto_aead *tfm;
-			u32 replays;
-			u32 icverrors;
-		} aes_gmac;
-		struct {
-			u8 rx_pn[102];
-			struct crypto_aead *tfm;
-			u32 replays;
-		} gcmp;
-		struct {
-			u8 rx_pn[272];
-		} gen;
-	} u;
-	struct ieee80211_key_conf conf;
-};
-
-enum mac80211_scan_state {
-	SCAN_DECISION = 0,
-	SCAN_SET_CHANNEL = 1,
-	SCAN_SEND_PROBE = 2,
-	SCAN_SUSPEND = 3,
-	SCAN_RESUME = 4,
-	SCAN_ABORT = 5,
-};
-
-struct rate_control_ref;
-
-struct tpt_led_trigger;
-
-struct ieee80211_local {
-	struct ieee80211_hw hw;
-	struct fq fq;
-	struct codel_vars *cvars;
-	struct codel_params cparams;
-	spinlock_t active_txq_lock[4];
-	struct list_head active_txqs[4];
-	u16 schedule_round[4];
-	u16 airtime_flags;
-	u32 aql_txq_limit_low[4];
-	u32 aql_txq_limit_high[4];
-	u32 aql_threshold;
-	atomic_t aql_total_pending_airtime;
-	const struct ieee80211_ops *ops;
-	struct workqueue_struct *workqueue;
-	long unsigned int queue_stop_reasons[16];
-	int q_stop_reasons[160];
-	spinlock_t queue_stop_reason_lock;
-	int open_count;
-	int monitors;
-	int cooked_mntrs;
-	int fif_fcsfail;
-	int fif_plcpfail;
-	int fif_control;
-	int fif_other_bss;
-	int fif_pspoll;
-	int fif_probe_req;
-	int probe_req_reg;
-	unsigned int filter_flags;
-	bool wiphy_ciphers_allocated;
-	bool use_chanctx;
-	spinlock_t filter_lock;
-	struct work_struct reconfig_filter;
-	struct netdev_hw_addr_list mc_list;
-	bool tim_in_locked_section;
-	bool suspended;
-	bool resuming;
-	bool quiescing;
-	bool started;
-	bool in_reconfig;
-	bool wowlan;
-	struct work_struct radar_detected_work;
-	u8 rx_chains;
-	u8 sband_allocated;
-	int tx_headroom;
-	struct tasklet_struct tasklet;
-	struct sk_buff_head skb_queue;
-	struct sk_buff_head skb_queue_unreliable;
-	spinlock_t rx_path_lock;
-	struct mutex sta_mtx;
-	spinlock_t tim_lock;
-	long unsigned int num_sta;
-	struct list_head sta_list;
-	struct rhltable sta_hash;
-	struct timer_list sta_cleanup;
-	int sta_generation;
-	struct sk_buff_head pending[16];
-	struct tasklet_struct tx_pending_tasklet;
-	struct tasklet_struct wake_txqs_tasklet;
-	atomic_t agg_queue_stop[16];
-	atomic_t iff_allmultis;
-	struct rate_control_ref *rate_ctrl;
-	struct arc4_ctx wep_tx_ctx;
-	struct arc4_ctx wep_rx_ctx;
-	u32 wep_iv;
-	struct list_head interfaces;
-	struct list_head mon_list;
-	struct mutex iflist_mtx;
-	struct mutex key_mtx;
-	struct mutex mtx;
-	long unsigned int scanning;
-	struct cfg80211_ssid scan_ssid;
-	struct cfg80211_scan_request *int_scan_req;
-	struct cfg80211_scan_request *scan_req;
-	struct ieee80211_scan_request *hw_scan_req;
-	struct cfg80211_chan_def scan_chandef;
-	enum nl80211_band hw_scan_band;
-	int scan_channel_idx;
-	int scan_ies_len;
-	int hw_scan_ies_bufsize;
-	struct cfg80211_scan_info scan_info;
-	struct work_struct sched_scan_stopped_work;
-	struct ieee80211_sub_if_data *sched_scan_sdata;
-	struct cfg80211_sched_scan_request *sched_scan_req;
-	u8 scan_addr[6];
-	long unsigned int leave_oper_channel_time;
-	enum mac80211_scan_state next_scan_state;
-	struct delayed_work scan_work;
-	struct ieee80211_sub_if_data *scan_sdata;
-	struct cfg80211_chan_def _oper_chandef;
-	struct ieee80211_channel *tmp_channel;
-	struct list_head chanctx_list;
-	struct mutex chanctx_mtx;
-	struct led_trigger tx_led;
-	struct led_trigger rx_led;
-	struct led_trigger assoc_led;
-	struct led_trigger radio_led;
-	struct led_trigger tpt_led;
-	atomic_t tx_led_active;
-	atomic_t rx_led_active;
-	atomic_t assoc_led_active;
-	atomic_t radio_led_active;
-	atomic_t tpt_led_active;
-	struct tpt_led_trigger *tpt_led_trigger;
-	int total_ps_buffered;
-	bool pspolling;
-	bool offchannel_ps_enabled;
-	struct ieee80211_sub_if_data *ps_sdata;
-	struct work_struct dynamic_ps_enable_work;
-	struct work_struct dynamic_ps_disable_work;
-	struct timer_list dynamic_ps_timer;
-	struct notifier_block ifa_notifier;
-	struct notifier_block ifa6_notifier;
-	int dynamic_ps_forced_timeout;
-	int user_power_level;
-	enum ieee80211_smps_mode smps_mode;
-	struct work_struct restart_work;
-	struct delayed_work roc_work;
-	struct list_head roc_list;
-	struct work_struct hw_roc_start;
-	struct work_struct hw_roc_done;
-	long unsigned int hw_roc_start_time;
-	u64 roc_cookie_counter;
-	struct idr ack_status_frames;
-	spinlock_t ack_status_lock;
-	struct ieee80211_sub_if_data *p2p_sdata;
-	struct ieee80211_sub_if_data *monitor_sdata;
-	struct cfg80211_chan_def monitor_chandef;
-	u8 ext_capa[8];
-	struct work_struct tdls_chsw_work;
-	struct sk_buff_head skb_queue_tdls_chsw;
-};
-
-struct ieee80211_fragment_entry {
-	struct sk_buff_head skb_list;
-	long unsigned int first_frag_time;
-	u16 seq;
-	u16 extra_len;
-	u16 last_frag;
-	u8 rx_queue;
-	bool check_sequential_pn;
-	u8 last_pn[6];
-};
-
-struct ps_data {
-	u8 tim[256];
-	struct sk_buff_head bc_buf;
-	atomic_t num_sta_ps;
-	int dtim_count;
-	bool dtim_bc_mc;
-};
-
-struct beacon_data;
-
-struct probe_resp;
-
-struct ieee80211_if_ap {
-	struct beacon_data *beacon;
-	struct probe_resp *probe_resp;
-	struct cfg80211_beacon_data *next_beacon;
-	struct list_head vlans;
-	struct ps_data ps;
-	atomic_t num_mcast_sta;
-	enum ieee80211_smps_mode req_smps;
-	enum ieee80211_smps_mode driver_smps_mode;
-	struct work_struct request_smps_work;
-	bool multicast_to_unicast;
-};
-
-struct ieee80211_if_wds {
-	struct sta_info *sta;
-	u8 remote_addr[6];
-};
-
-struct ieee80211_if_vlan {
-	struct list_head list;
-	struct sta_info *sta;
-	atomic_t num_mcast_sta;
-};
-
-struct ewma_beacon_signal {
-	long unsigned int internal;
-};
-
-struct ieee80211_sta_tx_tspec {
-	long unsigned int time_slice_start;
-	u32 admitted_time;
-	u8 tsid;
-	s8 up;
-	u32 consumed_tx_time;
-	enum {
-		TX_TSPEC_ACTION_NONE = 0,
-		TX_TSPEC_ACTION_DOWNGRADE = 1,
-		TX_TSPEC_ACTION_STOP_DOWNGRADE = 2,
-	} action;
-	bool downgraded;
-};
-
-struct ieee80211_mgd_auth_data;
-
-struct ieee80211_mgd_assoc_data;
-
-struct ieee80211_if_managed {
-	struct timer_list timer;
-	struct timer_list conn_mon_timer;
-	struct timer_list bcn_mon_timer;
-	struct timer_list chswitch_timer;
-	struct work_struct monitor_work;
-	struct work_struct chswitch_work;
-	struct work_struct beacon_connection_loss_work;
-	struct work_struct csa_connection_drop_work;
-	long unsigned int beacon_timeout;
-	long unsigned int probe_timeout;
-	int probe_send_count;
-	bool nullfunc_failed;
-	bool connection_loss;
-	short: 16;
-	struct cfg80211_bss *associated;
-	struct ieee80211_mgd_auth_data *auth_data;
-	struct ieee80211_mgd_assoc_data *assoc_data;
-	u8 bssid[6];
-	u16 aid;
-	bool powersave;
-	bool broken_ap;
-	bool have_beacon;
-	u8 dtim_period;
-	enum ieee80211_smps_mode req_smps;
-	enum ieee80211_smps_mode driver_smps_mode;
-	int: 32;
-	struct work_struct request_smps_work;
-	unsigned int flags;
-	bool csa_waiting_bcn;
-	bool csa_ignored_same_chan;
-	bool beacon_crc_valid;
-	char: 8;
-	u32 beacon_crc;
-	bool status_acked;
-	bool status_received;
-	__le16 status_fc;
-	enum {
-		IEEE80211_MFP_DISABLED = 0,
-		IEEE80211_MFP_OPTIONAL = 1,
-		IEEE80211_MFP_REQUIRED = 2,
-	} mfp;
-	unsigned int uapsd_queues;
-	unsigned int uapsd_max_sp_len;
-	int wmm_last_param_set;
-	int mu_edca_last_param_set;
-	u8 use_4addr;
-	char: 8;
-	s16 p2p_noa_index;
-	struct ewma_beacon_signal ave_beacon_signal;
-	unsigned int count_beacon_signal;
-	unsigned int beacon_loss_count;
-	int last_cqm_event_signal;
-	int rssi_min_thold;
-	int rssi_max_thold;
-	int last_ave_beacon_signal;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	struct ieee80211_vht_cap vht_capa;
-	struct ieee80211_vht_cap vht_capa_mask;
-	u8 tdls_peer[6];
-	long: 48;
-	struct delayed_work tdls_peer_del_work;
-	struct sk_buff *orig_teardown_skb;
-	struct sk_buff *teardown_skb;
-	spinlock_t teardown_lock;
-	bool tdls_chan_switch_prohibited;
-	bool tdls_wider_bw_prohibited;
-	short: 16;
-	struct ieee80211_sta_tx_tspec tx_tspec[4];
-	struct delayed_work tx_tspec_wk;
-	u8 *assoc_req_ies;
-	size_t assoc_req_ies_len;
-} __attribute__((packed));
-
-struct ieee80211_if_ibss {
-	struct timer_list timer;
-	struct work_struct csa_connection_drop_work;
-	long unsigned int last_scan_completed;
-	u32 basic_rates;
-	bool fixed_bssid;
-	bool fixed_channel;
-	bool privacy;
-	bool control_port;
-	bool userspace_handles_dfs;
-	char: 8;
-	u8 bssid[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 ie_len;
-	long: 48;
-	u8 *ie;
-	struct cfg80211_chan_def chandef;
-	long unsigned int ibss_join_req;
-	struct beacon_data *presp;
-	struct ieee80211_ht_cap ht_capa;
-	struct ieee80211_ht_cap ht_capa_mask;
-	spinlock_t incomplete_lock;
-	struct list_head incomplete_stations;
-	enum {
-		IEEE80211_IBSS_MLME_SEARCH = 0,
-		IEEE80211_IBSS_MLME_JOINED = 1,
-	} state;
-	int: 32;
-} __attribute__((packed));
-
-struct mesh_preq_queue {
-	struct list_head list;
-	u8 dst[6];
-	u8 flags;
-};
-
-struct mesh_stats {
-	__u32 fwded_mcast;
-	__u32 fwded_unicast;
-	__u32 fwded_frames;
-	__u32 dropped_frames_ttl;
-	__u32 dropped_frames_no_route;
-	__u32 dropped_frames_congestion;
-};
-
-struct mesh_rmc;
-
-struct ieee80211_mesh_sync_ops;
-
-struct mesh_csa_settings;
-
-struct mesh_table;
-
-struct ieee80211_if_mesh {
-	struct timer_list housekeeping_timer;
-	struct timer_list mesh_path_timer;
-	struct timer_list mesh_path_root_timer;
-	long unsigned int wrkq_flags;
-	long unsigned int mbss_changed;
-	bool userspace_handles_dfs;
-	u8 mesh_id[32];
-	size_t mesh_id_len;
-	u8 mesh_pp_id;
-	u8 mesh_pm_id;
-	u8 mesh_cc_id;
-	u8 mesh_sp_id;
-	u8 mesh_auth_id;
-	u32 sn;
-	u32 preq_id;
-	atomic_t mpaths;
-	long unsigned int last_sn_update;
-	long unsigned int next_perr;
-	long unsigned int last_preq;
-	struct mesh_rmc *rmc;
-	spinlock_t mesh_preq_queue_lock;
-	struct mesh_preq_queue preq_queue;
-	int preq_queue_len;
-	struct mesh_stats mshstats;
-	struct mesh_config mshcfg;
-	atomic_t estab_plinks;
-	u32 mesh_seqnum;
-	bool accepting_plinks;
-	int num_gates;
-	struct beacon_data *beacon;
-	const u8 *ie;
-	u8 ie_len;
-	enum {
-		IEEE80211_MESH_SEC_NONE = 0,
-		IEEE80211_MESH_SEC_AUTHED = 1,
-		IEEE80211_MESH_SEC_SECURED = 2,
-	} security;
-	bool user_mpm;
-	const struct ieee80211_mesh_sync_ops *sync_ops;
-	s64 sync_offset_clockdrift_max;
-	spinlock_t sync_offset_lock;
-	enum nl80211_mesh_power_mode nonpeer_pm;
-	int ps_peers_light_sleep;
-	int ps_peers_deep_sleep;
-	struct ps_data ps;
-	struct mesh_csa_settings *csa;
-	enum {
-		IEEE80211_MESH_CSA_ROLE_NONE = 0,
-		IEEE80211_MESH_CSA_ROLE_INIT = 1,
-		IEEE80211_MESH_CSA_ROLE_REPEATER = 2,
-	} csa_role;
-	u8 chsw_ttl;
-	u16 pre_value;
-	int meshconf_offset;
-	struct mesh_table *mesh_paths;
-	struct mesh_table *mpp_paths;
-	int mesh_paths_generation;
-	int mpp_paths_generation;
-};
-
-struct ieee80211_if_ocb {
-	struct timer_list housekeeping_timer;
-	long unsigned int wrkq_flags;
-	spinlock_t incomplete_lock;
-	struct list_head incomplete_stations;
-	bool joined;
-};
-
-struct ieee80211_if_mntr {
-	u32 flags;
-	u8 mu_follow_addr[6];
-	struct list_head list;
-};
-
-struct ieee80211_if_nan {
-	struct cfg80211_nan_conf conf;
-	spinlock_t func_lock;
-	struct idr function_inst_ids;
-};
-
-struct mac80211_qos_map;
-
-struct ieee80211_chanctx;
-
-struct ieee80211_sub_if_data {
-	struct list_head list;
-	struct wireless_dev wdev;
-	struct list_head key_list;
-	int crypto_tx_tailroom_needed_cnt;
-	int crypto_tx_tailroom_pending_dec;
-	struct delayed_work dec_tailroom_needed_wk;
-	struct net_device *dev;
-	struct ieee80211_local *local;
-	unsigned int flags;
-	long unsigned int state;
-	char name[16];
-	struct ieee80211_fragment_entry fragments[4];
-	unsigned int fragment_next;
-	u16 noack_map;
-	u8 wmm_acm;
-	struct ieee80211_key *keys[6];
-	struct ieee80211_key *default_unicast_key;
-	struct ieee80211_key *default_multicast_key;
-	struct ieee80211_key *default_mgmt_key;
-	u16 sequence_number;
-	__be16 control_port_protocol;
-	bool control_port_no_encrypt;
-	bool control_port_over_nl80211;
-	int encrypt_headroom;
-	atomic_t num_tx_queued;
-	struct ieee80211_tx_queue_params tx_conf[4];
-	struct mac80211_qos_map *qos_map;
-	struct work_struct csa_finalize_work;
-	bool csa_block_tx;
-	struct cfg80211_chan_def csa_chandef;
-	struct list_head assigned_chanctx_list;
-	struct list_head reserved_chanctx_list;
-	struct ieee80211_chanctx *reserved_chanctx;
-	struct cfg80211_chan_def reserved_chandef;
-	bool reserved_radar_required;
-	bool reserved_ready;
-	struct work_struct recalc_smps;
-	struct work_struct work;
-	struct sk_buff_head skb_queue;
-	u8 needed_rx_chains;
-	enum ieee80211_smps_mode smps_mode;
-	int user_power_level;
-	int ap_power_level;
-	bool radar_required;
-	struct delayed_work dfs_cac_timer_work;
-	struct ieee80211_if_ap *bss;
-	u32 rc_rateidx_mask[4];
-	bool rc_has_mcs_mask[4];
-	u8 rc_rateidx_mcs_mask[40];
-	bool rc_has_vht_mcs_mask[4];
-	u16 rc_rateidx_vht_mcs_mask[32];
-	union {
-		struct ieee80211_if_ap ap;
-		struct ieee80211_if_wds wds;
-		struct ieee80211_if_vlan vlan;
-		struct ieee80211_if_managed mgd;
-		struct ieee80211_if_ibss ibss;
-		struct ieee80211_if_mesh mesh;
-		struct ieee80211_if_ocb ocb;
-		struct ieee80211_if_mntr mntr;
-		struct ieee80211_if_nan nan;
-	} u;
-	struct ieee80211_vif vif;
-};
-
-struct ieee80211_sta_rx_stats {
-	long unsigned int packets;
-	long unsigned int last_rx;
-	long unsigned int num_duplicates;
-	long unsigned int fragments;
-	long unsigned int dropped;
-	int last_signal;
-	u8 chains;
-	s8 chain_signal_last[4];
-	u32 last_rate;
-	struct u64_stats_sync syncp;
-	u64 bytes;
-	u64 msdu[17];
-};
-
-struct ewma_signal {
-	long unsigned int internal;
-};
-
-struct ewma_avg_signal {
-	long unsigned int internal;
-};
-
-struct airtime_info {
-	u64 rx_airtime;
-	u64 tx_airtime;
-	s64 deficit;
-	atomic_t aql_tx_pending;
-	u32 aql_limit_low;
-	u32 aql_limit_high;
-};
-
-struct tid_ampdu_rx;
-
-struct tid_ampdu_tx;
-
-struct sta_ampdu_mlme {
-	struct mutex mtx;
-	struct tid_ampdu_rx *tid_rx[16];
-	u8 tid_rx_token[16];
-	long unsigned int tid_rx_timer_expired[1];
-	long unsigned int tid_rx_stop_requested[1];
-	long unsigned int tid_rx_manage_offl[1];
-	long unsigned int agg_session_valid[1];
-	long unsigned int unexpected_agg[1];
-	struct work_struct work;
-	struct tid_ampdu_tx *tid_tx[16];
-	struct tid_ampdu_tx *tid_start_tx[16];
-	long unsigned int last_addba_req_time[16];
-	u8 addba_req_num[16];
-	u8 dialog_token_allocator;
-};
-
-struct ieee80211_fast_tx;
-
-struct ieee80211_fast_rx;
-
-struct sta_info {
-	struct list_head list;
-	struct list_head free_list;
-	struct callback_head callback_head;
-	struct rhlist_head hash_node;
-	u8 addr[6];
-	struct ieee80211_local *local;
-	struct ieee80211_sub_if_data *sdata;
-	struct ieee80211_key *gtk[6];
-	struct ieee80211_key *ptk[4];
-	u8 ptk_idx;
-	struct rate_control_ref *rate_ctrl;
-	void *rate_ctrl_priv;
-	spinlock_t rate_ctrl_lock;
-	spinlock_t lock;
-	struct ieee80211_fast_tx *fast_tx;
-	struct ieee80211_fast_rx *fast_rx;
-	struct ieee80211_sta_rx_stats *pcpu_rx_stats;
-	struct work_struct drv_deliver_wk;
-	u16 listen_interval;
-	bool dead;
-	bool removed;
-	bool uploaded;
-	enum ieee80211_sta_state sta_state;
-	long unsigned int _flags;
-	spinlock_t ps_lock;
-	struct sk_buff_head ps_tx_buf[4];
-	struct sk_buff_head tx_filtered[4];
-	long unsigned int driver_buffered_tids;
-	long unsigned int txq_buffered_tids;
-	u64 assoc_at;
-	long int last_connected;
-	struct ieee80211_sta_rx_stats rx_stats;
-	struct {
-		struct ewma_signal signal;
-		struct ewma_signal chain_signal[4];
-	} rx_stats_avg;
-	__le16 last_seq_ctrl[17];
-	struct {
-		long unsigned int filtered;
-		long unsigned int retry_failed;
-		long unsigned int retry_count;
-		unsigned int lost_packets;
-		long unsigned int last_tdls_pkt_time;
-		u64 msdu_retries[17];
-		u64 msdu_failed[17];
-		long unsigned int last_ack;
-		s8 last_ack_signal;
-		bool ack_signal_filled;
-		struct ewma_avg_signal avg_ack_signal;
-	} status_stats;
-	struct {
-		u64 packets[4];
-		u64 bytes[4];
-		struct ieee80211_tx_rate last_rate;
-		u64 msdu[17];
-	} tx_stats;
-	u16 tid_seq[16];
-	struct airtime_info airtime[4];
-	u16 airtime_weight;
-	struct sta_ampdu_mlme ampdu_mlme;
-	enum ieee80211_sta_rx_bandwidth cur_max_bandwidth;
-	enum ieee80211_smps_mode known_smps_mode;
-	const struct ieee80211_cipher_scheme *cipher_scheme;
-	struct codel_params cparams;
-	u8 reserved_tid;
-	struct cfg80211_chan_def tdls_chandef;
-	struct ieee80211_sta sta;
-};
-
-struct tid_ampdu_tx {
-	struct callback_head callback_head;
-	struct timer_list session_timer;
-	struct timer_list addba_resp_timer;
-	struct sk_buff_head pending;
-	struct sta_info *sta;
-	long unsigned int state;
-	long unsigned int last_tx;
-	u16 timeout;
-	u8 dialog_token;
-	u8 stop_initiator;
-	bool tx_stop;
-	u16 buf_size;
-	u16 failed_bar_ssn;
-	bool bar_pending;
-	bool amsdu;
-	u8 tid;
-};
-
-struct tid_ampdu_rx {
-	struct callback_head callback_head;
-	spinlock_t reorder_lock;
-	u64 reorder_buf_filtered;
-	struct sk_buff_head *reorder_buf;
-	long unsigned int *reorder_time;
-	struct sta_info *sta;
-	struct timer_list session_timer;
-	struct timer_list reorder_timer;
-	long unsigned int last_rx;
-	u16 head_seq_num;
-	u16 stored_mpdu_num;
-	u16 ssn;
-	u16 buf_size;
-	u16 timeout;
-	u8 tid;
-	u8 auto_seq: 1;
-	u8 removed: 1;
-	u8 started: 1;
-};
-
-struct ieee80211_fast_tx {
-	struct ieee80211_key *key;
-	u8 hdr_len;
-	u8 sa_offs;
-	u8 da_offs;
-	u8 pn_offs;
-	u8 band;
-	char: 8;
-	u8 hdr[56];
-	struct callback_head callback_head;
-};
-
-struct ieee80211_fast_rx {
-	struct net_device *dev;
-	enum nl80211_iftype vif_type;
-	u8 vif_addr[6];
-	u8 rfc1042_hdr[6];
-	__be16 control_port_protocol;
-	__le16 expected_ds_bits;
-	u8 icv_len;
-	u8 key: 1;
-	u8 sta_notify: 1;
-	u8 internal_forward: 1;
-	u8 uses_rss: 1;
-	u8 da_offs;
-	u8 sa_offs;
-	struct callback_head callback_head;
-};
-
-struct rate_control_ref {
-	const struct rate_control_ops *ops;
-	void *priv;
-};
-
-struct beacon_data {
-	u8 *head;
-	u8 *tail;
-	int head_len;
-	int tail_len;
-	struct ieee80211_meshconf_ie *meshconf;
-	u16 csa_counter_offsets[2];
-	u8 csa_current_counter;
-	struct callback_head callback_head;
-};
-
-struct probe_resp {
-	struct callback_head callback_head;
-	int len;
-	u16 csa_counter_offsets[2];
-	u8 data[0];
-};
-
-struct ieee80211_mgd_auth_data {
-	struct cfg80211_bss *bss;
-	long unsigned int timeout;
-	int tries;
-	u16 algorithm;
-	u16 expected_transaction;
-	u8 key[13];
-	u8 key_len;
-	u8 key_idx;
-	bool done;
-	bool peer_confirmed;
-	bool timeout_started;
-	u16 sae_trans;
-	u16 sae_status;
-	size_t data_len;
-	u8 data[0];
-};
-
-struct ieee80211_mgd_assoc_data {
-	struct cfg80211_bss *bss;
-	const u8 *supp_rates;
-	long unsigned int timeout;
-	int tries;
-	u16 capability;
-	u8 prev_bssid[6];
-	u8 ssid[32];
-	u8 ssid_len;
-	u8 supp_rates_len;
-	bool wmm;
-	bool uapsd;
-	bool need_beacon;
-	bool synced;
-	bool timeout_started;
-	u8 ap_ht_param;
-	struct ieee80211_vht_cap ap_vht_cap;
-	u8 fils_nonces[32];
-	u8 fils_kek[64];
-	size_t fils_kek_len;
-	size_t ie_len;
-	u8 ie[0];
-};
-
-struct ieee802_11_elems;
-
-struct ieee80211_mesh_sync_ops {
-	void (*rx_bcn_presp)(struct ieee80211_sub_if_data *, u16, struct ieee80211_mgmt *, struct ieee802_11_elems *, struct ieee80211_rx_status *);
-	void (*adjust_tsf)(struct ieee80211_sub_if_data *, struct beacon_data *);
-};
-
-struct ieee802_11_elems {
-	const u8 *ie_start;
-	size_t total_len;
-	const struct ieee80211_tdls_lnkie *lnk_id;
-	const struct ieee80211_ch_switch_timing *ch_sw_timing;
-	const u8 *ext_capab;
-	const u8 *ssid;
-	const u8 *supp_rates;
-	const u8 *ds_params;
-	const struct ieee80211_tim_ie *tim;
-	const u8 *challenge;
-	const u8 *rsn;
-	const u8 *erp_info;
-	const u8 *ext_supp_rates;
-	const u8 *wmm_info;
-	const u8 *wmm_param;
-	const struct ieee80211_ht_cap *ht_cap_elem;
-	const struct ieee80211_ht_operation *ht_operation;
-	const struct ieee80211_vht_cap *vht_cap_elem;
-	const struct ieee80211_vht_operation *vht_operation;
-	const struct ieee80211_meshconf_ie *mesh_config;
-	const u8 *he_cap;
-	const struct ieee80211_he_operation *he_operation;
-	const struct ieee80211_he_spr *he_spr;
-	const struct ieee80211_mu_edca_param_set *mu_edca_param_set;
-	const u8 *uora_element;
-	const u8 *mesh_id;
-	const u8 *peering;
-	const __le16 *awake_window;
-	const u8 *preq;
-	const u8 *prep;
-	const u8 *perr;
-	const struct ieee80211_rann_ie *rann;
-	const struct ieee80211_channel_sw_ie *ch_switch_ie;
-	const struct ieee80211_ext_chansw_ie *ext_chansw_ie;
-	const struct ieee80211_wide_bw_chansw_ie *wide_bw_chansw_ie;
-	const u8 *max_channel_switch_time;
-	const u8 *country_elem;
-	const u8 *pwr_constr_elem;
-	const u8 *cisco_dtpc_elem;
-	const struct ieee80211_timeout_interval_ie *timeout_int;
-	const u8 *opmode_notif;
-	const struct ieee80211_sec_chan_offs_ie *sec_chan_offs;
-	struct ieee80211_mesh_chansw_params_ie *mesh_chansw_params_ie;
-	const struct ieee80211_bss_max_idle_period_ie *max_idle_period_ie;
-	const struct ieee80211_multiple_bssid_configuration *mbssid_config_ie;
-	const struct ieee80211_bssid_index *bssid_index;
-	u8 max_bssid_indicator;
-	u8 dtim_count;
-	u8 dtim_period;
-	const struct ieee80211_addba_ext_ie *addba_ext_ie;
-	u8 ext_capab_len;
-	u8 ssid_len;
-	u8 supp_rates_len;
-	u8 tim_len;
-	u8 challenge_len;
-	u8 rsn_len;
-	u8 ext_supp_rates_len;
-	u8 wmm_info_len;
-	u8 wmm_param_len;
-	u8 he_cap_len;
-	u8 mesh_id_len;
-	u8 peering_len;
-	u8 preq_len;
-	u8 prep_len;
-	u8 perr_len;
-	u8 country_elem_len;
-	u8 bssid_index_len;
-	bool parse_error;
-};
-
-struct mesh_csa_settings {
-	struct callback_head callback_head;
-	struct cfg80211_csa_settings settings;
-};
-
-struct mesh_rmc {
-	struct hlist_head bucket[256];
-	u32 idx_mask;
-};
-
-struct mesh_table {
-	struct hlist_head known_gates;
-	spinlock_t gates_lock;
-	struct rhashtable rhead;
-	struct hlist_head walk_head;
-	spinlock_t walk_lock;
-	atomic_t entries;
-};
-
-enum ieee80211_sub_if_data_flags {
-	IEEE80211_SDATA_ALLMULTI = 1,
-	IEEE80211_SDATA_OPERATING_GMODE = 4,
-	IEEE80211_SDATA_DONT_BRIDGE_PACKETS = 8,
-	IEEE80211_SDATA_DISCONNECT_RESUME = 16,
-	IEEE80211_SDATA_IN_DRIVER = 32,
-};
-
-enum ieee80211_chanctx_mode {
-	IEEE80211_CHANCTX_SHARED = 0,
-	IEEE80211_CHANCTX_EXCLUSIVE = 1,
-};
-
-enum ieee80211_chanctx_replace_state {
-	IEEE80211_CHANCTX_REPLACE_NONE = 0,
-	IEEE80211_CHANCTX_WILL_BE_REPLACED = 1,
-	IEEE80211_CHANCTX_REPLACES_OTHER = 2,
-};
-
-struct ieee80211_chanctx {
-	struct list_head list;
-	struct callback_head callback_head;
-	struct list_head assigned_vifs;
-	struct list_head reserved_vifs;
-	enum ieee80211_chanctx_replace_state replace_state;
-	struct ieee80211_chanctx *replace_ctx;
-	enum ieee80211_chanctx_mode mode;
-	bool driver_present;
-	struct ieee80211_chanctx_conf conf;
-};
-
-struct mac80211_qos_map {
-	struct cfg80211_qos_map qos_map;
-	struct callback_head callback_head;
-};
-
-enum {
-	IEEE80211_RX_MSG = 1,
-	IEEE80211_TX_STATUS_MSG = 2,
-};
-
-enum queue_stop_reason {
-	IEEE80211_QUEUE_STOP_REASON_DRIVER = 0,
-	IEEE80211_QUEUE_STOP_REASON_PS = 1,
-	IEEE80211_QUEUE_STOP_REASON_CSA = 2,
-	IEEE80211_QUEUE_STOP_REASON_AGGREGATION = 3,
-	IEEE80211_QUEUE_STOP_REASON_SUSPEND = 4,
-	IEEE80211_QUEUE_STOP_REASON_SKB_ADD = 5,
-	IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL = 6,
-	IEEE80211_QUEUE_STOP_REASON_FLUSH = 7,
-	IEEE80211_QUEUE_STOP_REASON_TDLS_TEARDOWN = 8,
-	IEEE80211_QUEUE_STOP_REASON_RESERVE_TID = 9,
-	IEEE80211_QUEUE_STOP_REASONS = 10,
-};
-
-struct tpt_led_trigger {
-	char name[32];
-	const struct ieee80211_tpt_blink *blink_table;
-	unsigned int blink_table_len;
-	struct timer_list timer;
-	struct ieee80211_local *local;
-	long unsigned int prev_traffic;
-	long unsigned int tx_bytes;
-	long unsigned int rx_bytes;
-	unsigned int active;
-	unsigned int want;
-	bool running;
-};
-
-enum {
-	SCAN_SW_SCANNING = 0,
-	SCAN_HW_SCANNING = 1,
-	SCAN_ONCHANNEL_SCANNING = 2,
-	SCAN_COMPLETED = 3,
-	SCAN_ABORTED = 4,
-	SCAN_HW_CANCELLED = 5,
-};
-
-struct ieee80211_bar {
-	__le16 frame_control;
-	__le16 duration;
-	__u8 ra[6];
-	__u8 ta[6];
-	__le16 control;
-	__le16 start_seq_num;
-};
-
-enum ieee80211_ht_actioncode {
-	WLAN_HT_ACTION_NOTIFY_CHANWIDTH = 0,
-	WLAN_HT_ACTION_SMPS = 1,
-	WLAN_HT_ACTION_PSMP = 2,
-	WLAN_HT_ACTION_PCO_PHASE = 3,
-	WLAN_HT_ACTION_CSI = 4,
-	WLAN_HT_ACTION_NONCOMPRESSED_BF = 5,
-	WLAN_HT_ACTION_COMPRESSED_BF = 6,
-	WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7,
-};
-
-enum ieee80211_tdls_actioncode {
-	WLAN_TDLS_SETUP_REQUEST = 0,
-	WLAN_TDLS_SETUP_RESPONSE = 1,
-	WLAN_TDLS_SETUP_CONFIRM = 2,
-	WLAN_TDLS_TEARDOWN = 3,
-	WLAN_TDLS_PEER_TRAFFIC_INDICATION = 4,
-	WLAN_TDLS_CHANNEL_SWITCH_REQUEST = 5,
-	WLAN_TDLS_CHANNEL_SWITCH_RESPONSE = 6,
-	WLAN_TDLS_PEER_PSM_REQUEST = 7,
-	WLAN_TDLS_PEER_PSM_RESPONSE = 8,
-	WLAN_TDLS_PEER_TRAFFIC_RESPONSE = 9,
-	WLAN_TDLS_DISCOVERY_REQUEST = 10,
-};
-
-enum ieee80211_radiotap_tx_flags {
-	IEEE80211_RADIOTAP_F_TX_FAIL = 1,
-	IEEE80211_RADIOTAP_F_TX_CTS = 2,
-	IEEE80211_RADIOTAP_F_TX_RTS = 4,
-	IEEE80211_RADIOTAP_F_TX_NOACK = 8,
-};
-
-enum ieee80211_radiotap_mcs_flags {
-	IEEE80211_RADIOTAP_MCS_BW_MASK = 3,
-	IEEE80211_RADIOTAP_MCS_BW_20 = 0,
-	IEEE80211_RADIOTAP_MCS_BW_40 = 1,
-	IEEE80211_RADIOTAP_MCS_BW_20L = 2,
-	IEEE80211_RADIOTAP_MCS_BW_20U = 3,
-	IEEE80211_RADIOTAP_MCS_SGI = 4,
-	IEEE80211_RADIOTAP_MCS_FMT_GF = 8,
-	IEEE80211_RADIOTAP_MCS_FEC_LDPC = 16,
-	IEEE80211_RADIOTAP_MCS_STBC_MASK = 96,
-	IEEE80211_RADIOTAP_MCS_STBC_1 = 1,
-	IEEE80211_RADIOTAP_MCS_STBC_2 = 2,
-	IEEE80211_RADIOTAP_MCS_STBC_3 = 3,
-	IEEE80211_RADIOTAP_MCS_STBC_SHIFT = 5,
-};
-
-enum ieee80211_radiotap_vht_flags {
-	IEEE80211_RADIOTAP_VHT_FLAG_STBC = 1,
-	IEEE80211_RADIOTAP_VHT_FLAG_TXOP_PS_NA = 2,
-	IEEE80211_RADIOTAP_VHT_FLAG_SGI = 4,
-	IEEE80211_RADIOTAP_VHT_FLAG_SGI_NSYM_M10_9 = 8,
-	IEEE80211_RADIOTAP_VHT_FLAG_LDPC_EXTRA_OFDM_SYM = 16,
-	IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED = 32,
-};
-
-struct ieee80211_radiotap_he {
-	__le16 data1;
-	__le16 data2;
-	__le16 data3;
-	__le16 data4;
-	__le16 data5;
-	__le16 data6;
-};
-
-enum ieee80211_radiotap_he_bits {
-	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MASK = 3,
-	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU = 0,
-	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_EXT_SU = 1,
-	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MU = 2,
-	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_TRIG = 3,
-	IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN = 4,
-	IEEE80211_RADIOTAP_HE_DATA1_BEAM_CHANGE_KNOWN = 8,
-	IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN = 16,
-	IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN = 32,
-	IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN = 64,
-	IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN = 128,
-	IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN = 256,
-	IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN = 512,
-	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE_KNOWN = 1024,
-	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE2_KNOWN = 2048,
-	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE3_KNOWN = 4096,
-	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE4_KNOWN = 8192,
-	IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN = 16384,
-	IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN = 32768,
-	IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_KNOWN = 1,
-	IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN = 2,
-	IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN = 4,
-	IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN = 8,
-	IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN = 16,
-	IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN = 32,
-	IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN = 64,
-	IEEE80211_RADIOTAP_HE_DATA2_MIDAMBLE_KNOWN = 128,
-	IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET = 16128,
-	IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET_KNOWN = 16384,
-	IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_SEC = 32768,
-	IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR = 63,
-	IEEE80211_RADIOTAP_HE_DATA3_BEAM_CHANGE = 64,
-	IEEE80211_RADIOTAP_HE_DATA3_UL_DL = 128,
-	IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS = 3840,
-	IEEE80211_RADIOTAP_HE_DATA3_DATA_DCM = 4096,
-	IEEE80211_RADIOTAP_HE_DATA3_CODING = 8192,
-	IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG = 16384,
-	IEEE80211_RADIOTAP_HE_DATA3_STBC = 32768,
-	IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE = 15,
-	IEEE80211_RADIOTAP_HE_DATA4_MU_STA_ID = 32752,
-	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE1 = 15,
-	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE2 = 240,
-	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE3 = 3840,
-	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE4 = 61440,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC = 15,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ = 0,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ = 1,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ = 2,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ = 3,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_26T = 4,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_52T = 5,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_106T = 6,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_242T = 7,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_484T = 8,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_996T = 9,
-	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_2x996T = 10,
-	IEEE80211_RADIOTAP_HE_DATA5_GI = 48,
-	IEEE80211_RADIOTAP_HE_DATA5_GI_0_8 = 0,
-	IEEE80211_RADIOTAP_HE_DATA5_GI_1_6 = 1,
-	IEEE80211_RADIOTAP_HE_DATA5_GI_3_2 = 2,
-	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE = 192,
-	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_UNKNOWN = 0,
-	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_1X = 1,
-	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_2X = 2,
-	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_4X = 3,
-	IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS = 1792,
-	IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD = 12288,
-	IEEE80211_RADIOTAP_HE_DATA5_TXBF = 16384,
-	IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG = 32768,
-	IEEE80211_RADIOTAP_HE_DATA6_NSTS = 15,
-	IEEE80211_RADIOTAP_HE_DATA6_DOPPLER = 16,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_KNOWN = 32,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW = 192,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_20MHZ = 0,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_40MHZ = 1,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_80MHZ = 2,
-	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_160MHZ = 3,
-	IEEE80211_RADIOTAP_HE_DATA6_TXOP = 32512,
-	IEEE80211_RADIOTAP_HE_DATA6_MIDAMBLE_PDCTY = 32768,
-};
-
-enum ieee80211_ac_numbers {
-	IEEE80211_AC_VO = 0,
-	IEEE80211_AC_VI = 1,
-	IEEE80211_AC_BE = 2,
-	IEEE80211_AC_BK = 3,
-};
-
-enum mac80211_tx_info_flags {
-	IEEE80211_TX_CTL_REQ_TX_STATUS = 1,
-	IEEE80211_TX_CTL_ASSIGN_SEQ = 2,
-	IEEE80211_TX_CTL_NO_ACK = 4,
-	IEEE80211_TX_CTL_CLEAR_PS_FILT = 8,
-	IEEE80211_TX_CTL_FIRST_FRAGMENT = 16,
-	IEEE80211_TX_CTL_SEND_AFTER_DTIM = 32,
-	IEEE80211_TX_CTL_AMPDU = 64,
-	IEEE80211_TX_CTL_INJECTED = 128,
-	IEEE80211_TX_STAT_TX_FILTERED = 256,
-	IEEE80211_TX_STAT_ACK = 512,
-	IEEE80211_TX_STAT_AMPDU = 1024,
-	IEEE80211_TX_STAT_AMPDU_NO_BACK = 2048,
-	IEEE80211_TX_CTL_RATE_CTRL_PROBE = 4096,
-	IEEE80211_TX_INTFL_OFFCHAN_TX_OK = 8192,
-	IEEE80211_TX_INTFL_NEED_TXPROCESSING = 16384,
-	IEEE80211_TX_INTFL_RETRIED = 32768,
-	IEEE80211_TX_INTFL_DONT_ENCRYPT = 65536,
-	IEEE80211_TX_CTL_NO_PS_BUFFER = 131072,
-	IEEE80211_TX_CTL_MORE_FRAMES = 262144,
-	IEEE80211_TX_INTFL_RETRANSMISSION = 524288,
-	IEEE80211_TX_INTFL_MLME_CONN_TX = 1048576,
-	IEEE80211_TX_INTFL_NL80211_FRAME_TX = 2097152,
-	IEEE80211_TX_CTL_LDPC = 4194304,
-	IEEE80211_TX_CTL_STBC = 25165824,
-	IEEE80211_TX_CTL_TX_OFFCHAN = 33554432,
-	IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = 67108864,
-	IEEE80211_TX_CTL_NO_CCK_RATE = 134217728,
-	IEEE80211_TX_STATUS_EOSP = 268435456,
-	IEEE80211_TX_CTL_USE_MINRATE = 536870912,
-	IEEE80211_TX_CTL_DONTFRAG = 1073741824,
-	IEEE80211_TX_STAT_NOACK_TRANSMITTED = 2147483648,
-};
-
-enum mac80211_rate_control_flags {
-	IEEE80211_TX_RC_USE_RTS_CTS = 1,
-	IEEE80211_TX_RC_USE_CTS_PROTECT = 2,
-	IEEE80211_TX_RC_USE_SHORT_PREAMBLE = 4,
-	IEEE80211_TX_RC_MCS = 8,
-	IEEE80211_TX_RC_GREEN_FIELD = 16,
-	IEEE80211_TX_RC_40_MHZ_WIDTH = 32,
-	IEEE80211_TX_RC_DUP_DATA = 64,
-	IEEE80211_TX_RC_SHORT_GI = 128,
-	IEEE80211_TX_RC_VHT_MCS = 256,
-	IEEE80211_TX_RC_80_MHZ_WIDTH = 512,
-	IEEE80211_TX_RC_160_MHZ_WIDTH = 1024,
-};
-
-enum ieee80211_sta_info_flags {
-	WLAN_STA_AUTH = 0,
-	WLAN_STA_ASSOC = 1,
-	WLAN_STA_PS_STA = 2,
-	WLAN_STA_AUTHORIZED = 3,
-	WLAN_STA_SHORT_PREAMBLE = 4,
-	WLAN_STA_WDS = 5,
-	WLAN_STA_CLEAR_PS_FILT = 6,
-	WLAN_STA_MFP = 7,
-	WLAN_STA_BLOCK_BA = 8,
-	WLAN_STA_PS_DRIVER = 9,
-	WLAN_STA_PSPOLL = 10,
-	WLAN_STA_TDLS_PEER = 11,
-	WLAN_STA_TDLS_PEER_AUTH = 12,
-	WLAN_STA_TDLS_INITIATOR = 13,
-	WLAN_STA_TDLS_CHAN_SWITCH = 14,
-	WLAN_STA_TDLS_OFF_CHANNEL = 15,
-	WLAN_STA_TDLS_WIDER_BW = 16,
-	WLAN_STA_UAPSD = 17,
-	WLAN_STA_SP = 18,
-	WLAN_STA_4ADDR_EVENT = 19,
-	WLAN_STA_INSERTED = 20,
-	WLAN_STA_RATE_CONTROL = 21,
-	WLAN_STA_TOFFSET_KNOWN = 22,
-	WLAN_STA_MPSP_OWNER = 23,
-	WLAN_STA_MPSP_RECIPIENT = 24,
-	WLAN_STA_PS_DELIVER = 25,
-	NUM_WLAN_STA_FLAGS = 26,
-};
-
-enum ieee80211_sta_flags {
-	IEEE80211_STA_CONNECTION_POLL = 2,
-	IEEE80211_STA_CONTROL_PORT = 4,
-	IEEE80211_STA_DISABLE_HT = 16,
-	IEEE80211_STA_MFP_ENABLED = 64,
-	IEEE80211_STA_UAPSD_ENABLED = 128,
-	IEEE80211_STA_NULLFUNC_ACKED = 256,
-	IEEE80211_STA_RESET_SIGNAL_AVE = 512,
-	IEEE80211_STA_DISABLE_40MHZ = 1024,
-	IEEE80211_STA_DISABLE_VHT = 2048,
-	IEEE80211_STA_DISABLE_80P80MHZ = 4096,
-	IEEE80211_STA_DISABLE_160MHZ = 8192,
-	IEEE80211_STA_DISABLE_WMM = 16384,
-	IEEE80211_STA_ENABLE_RRM = 32768,
-	IEEE80211_STA_DISABLE_HE = 65536,
-};
-
-enum ieee80211_sdata_state_bits {
-	SDATA_STATE_RUNNING = 0,
-	SDATA_STATE_OFFCHANNEL = 1,
-	SDATA_STATE_OFFCHANNEL_BEACON_STOPPED = 2,
-};
-
-enum ieee80211_rate_control_changed {
-	IEEE80211_RC_BW_CHANGED = 1,
-	IEEE80211_RC_SMPS_CHANGED = 2,
-	IEEE80211_RC_SUPP_RATES_CHANGED = 4,
-	IEEE80211_RC_NSS_CHANGED = 8,
-};
-
-struct codel_stats {
-	u32 maxpacket;
-	u32 drop_count;
-	u32 drop_len;
-	u32 ecn_mark;
-	u32 ce_mark;
-};
-
-struct ieee80211_qos_hdr {
-	__le16 frame_control;
-	__le16 duration_id;
-	u8 addr1[6];
-	u8 addr2[6];
-	u8 addr3[6];
-	__le16 seq_ctrl;
-	__le16 qos_ctrl;
-};
-
-enum mac80211_tx_control_flags {
-	IEEE80211_TX_CTRL_PORT_CTRL_PROTO = 1,
-	IEEE80211_TX_CTRL_PS_RESPONSE = 2,
-	IEEE80211_TX_CTRL_RATE_INJECT = 4,
-	IEEE80211_TX_CTRL_AMSDU = 8,
-	IEEE80211_TX_CTRL_FAST_XMIT = 16,
-	IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP = 32,
-};
-
-enum ieee80211_vif_flags {
-	IEEE80211_VIF_BEACON_FILTER = 1,
-	IEEE80211_VIF_SUPPORTS_CQM_RSSI = 2,
-	IEEE80211_VIF_SUPPORTS_UAPSD = 4,
-	IEEE80211_VIF_GET_NOA_UPDATE = 8,
-};
-
-enum ieee80211_agg_stop_reason {
-	AGG_STOP_DECLINED = 0,
-	AGG_STOP_LOCAL_REQUEST = 1,
-	AGG_STOP_PEER_REQUEST = 2,
-	AGG_STOP_DESTROY_STA = 3,
-};
-
-enum sta_stats_type {
-	STA_STATS_RATE_TYPE_INVALID = 0,
-	STA_STATS_RATE_TYPE_LEGACY = 1,
-	STA_STATS_RATE_TYPE_HT = 2,
-	STA_STATS_RATE_TYPE_VHT = 3,
-	STA_STATS_RATE_TYPE_HE = 4,
-};
-
-struct txq_info {
-	struct fq_tin tin;
-	struct fq_flow def_flow;
-	struct codel_vars def_cvars;
-	struct codel_stats cstats;
-	struct sk_buff_head frags;
-	struct list_head schedule_order;
-	u16 schedule_round;
-	long unsigned int flags;
-	struct ieee80211_txq txq;
-};
-
-enum mac80211_rx_flags {
-	RX_FLAG_MMIC_ERROR = 1,
-	RX_FLAG_DECRYPTED = 2,
-	RX_FLAG_MACTIME_PLCP_START = 4,
-	RX_FLAG_MMIC_STRIPPED = 8,
-	RX_FLAG_IV_STRIPPED = 16,
-	RX_FLAG_FAILED_FCS_CRC = 32,
-	RX_FLAG_FAILED_PLCP_CRC = 64,
-	RX_FLAG_MACTIME_START = 128,
-	RX_FLAG_NO_SIGNAL_VAL = 256,
-	RX_FLAG_AMPDU_DETAILS = 512,
-	RX_FLAG_PN_VALIDATED = 1024,
-	RX_FLAG_DUP_VALIDATED = 2048,
-	RX_FLAG_AMPDU_LAST_KNOWN = 4096,
-	RX_FLAG_AMPDU_IS_LAST = 8192,
-	RX_FLAG_AMPDU_DELIM_CRC_ERROR = 16384,
-	RX_FLAG_AMPDU_DELIM_CRC_KNOWN = 32768,
-	RX_FLAG_MACTIME_END = 65536,
-	RX_FLAG_ONLY_MONITOR = 131072,
-	RX_FLAG_SKIP_MONITOR = 262144,
-	RX_FLAG_AMSDU_MORE = 524288,
-	RX_FLAG_RADIOTAP_VENDOR_DATA = 1048576,
-	RX_FLAG_MIC_STRIPPED = 2097152,
-	RX_FLAG_ALLOW_SAME_PN = 4194304,
-	RX_FLAG_ICV_STRIPPED = 8388608,
-	RX_FLAG_AMPDU_EOF_BIT = 16777216,
-	RX_FLAG_AMPDU_EOF_BIT_KNOWN = 33554432,
-	RX_FLAG_RADIOTAP_HE = 67108864,
-	RX_FLAG_RADIOTAP_HE_MU = 134217728,
-	RX_FLAG_RADIOTAP_LSIG = 268435456,
-	RX_FLAG_NO_PSDU = 536870912,
-};
-
-enum ieee80211_key_flags {
-	IEEE80211_KEY_FLAG_GENERATE_IV_MGMT = 1,
-	IEEE80211_KEY_FLAG_GENERATE_IV = 2,
-	IEEE80211_KEY_FLAG_GENERATE_MMIC = 4,
-	IEEE80211_KEY_FLAG_PAIRWISE = 8,
-	IEEE80211_KEY_FLAG_SW_MGMT_TX = 16,
-	IEEE80211_KEY_FLAG_PUT_IV_SPACE = 32,
-	IEEE80211_KEY_FLAG_RX_MGMT = 64,
-	IEEE80211_KEY_FLAG_RESERVE_TAILROOM = 128,
-	IEEE80211_KEY_FLAG_PUT_MIC_SPACE = 256,
-	IEEE80211_KEY_FLAG_NO_AUTO_TX = 512,
-	IEEE80211_KEY_FLAG_GENERATE_MMIE = 1024,
-};
-
-typedef unsigned int ieee80211_tx_result;
-
-struct ieee80211_tx_data {
-	struct sk_buff *skb;
-	struct sk_buff_head skbs;
-	struct ieee80211_local *local;
-	struct ieee80211_sub_if_data *sdata;
-	struct sta_info *sta;
-	struct ieee80211_key *key;
-	struct ieee80211_tx_rate rate;
-	unsigned int flags;
-};
-
-typedef unsigned int ieee80211_rx_result;
-
-struct ieee80211_rx_data {
-	struct napi_struct___2 *napi;
-	struct sk_buff *skb;
-	struct ieee80211_local *local;
-	struct ieee80211_sub_if_data *sdata;
-	struct sta_info *sta;
-	struct ieee80211_key *key;
-	unsigned int flags;
-	int seqno_idx;
-	int security_idx;
-	u32 tkip_iv32;
-	u16 tkip_iv16;
-};
-
-struct ieee80211_mmie {
-	u8 element_id;
-	u8 length;
-	__le16 key_id;
-	u8 sequence_number[6];
-	u8 mic[8];
-};
-
-struct ieee80211_mmie_16 {
-	u8 element_id;
-	u8 length;
-	__le16 key_id;
-	u8 sequence_number[6];
-	u8 mic[16];
-};
-
-enum ieee80211_internal_key_flags {
-	KEY_FLAG_UPLOADED_TO_HARDWARE = 1,
-	KEY_FLAG_TAINTED = 2,
-	KEY_FLAG_CIPHER_SCHEME = 4,
-};
-
-enum {
-	TKIP_DECRYPT_OK = 0,
-	TKIP_DECRYPT_NO_EXT_IV = 4294967295,
-	TKIP_DECRYPT_INVALID_KEYIDX = 4294967294,
-	TKIP_DECRYPT_REPLAY = 4294967293,
-};
-
-enum mac80211_rx_encoding {
-	RX_ENC_LEGACY = 0,
-	RX_ENC_HT = 1,
-	RX_ENC_VHT = 2,
-	RX_ENC_HE = 3,
-};
-
-struct ieee80211_bss {
-	u32 device_ts_beacon;
-	u32 device_ts_presp;
-	bool wmm_used;
-	bool uapsd_supported;
-	u8 supp_rates[32];
-	size_t supp_rates_len;
-	struct ieee80211_rate *beacon_rate;
-	bool has_erp_value;
-	u8 erp_value;
-	u8 corrupt_data;
-	u8 valid_data;
-};
-
-enum ieee80211_bss_corrupt_data_flags {
-	IEEE80211_BSS_CORRUPT_BEACON = 1,
-	IEEE80211_BSS_CORRUPT_PROBE_RESP = 2,
-};
-
-enum ieee80211_bss_valid_data_flags {
-	IEEE80211_BSS_VALID_WMM = 2,
-	IEEE80211_BSS_VALID_RATES = 4,
-	IEEE80211_BSS_VALID_ERP = 8,
-};
-
-enum {
-	IEEE80211_PROBE_FLAG_DIRECTED = 1,
-	IEEE80211_PROBE_FLAG_MIN_CONTENT = 2,
-	IEEE80211_PROBE_FLAG_RANDOM_SN = 4,
-};
-
-struct ieee80211_roc_work {
-	struct list_head list;
-	struct ieee80211_sub_if_data *sdata;
-	struct ieee80211_channel *chan;
-	bool started;
-	bool abort;
-	bool hw_begun;
-	bool notified;
-	bool on_channel;
-	long unsigned int start_time;
-	u32 duration;
-	u32 req_duration;
-	struct sk_buff *frame;
-	u64 cookie;
-	u64 mgmt_tx_cookie;
-	enum ieee80211_roc_type type;
-};
-
-enum ieee80211_back_actioncode {
-	WLAN_ACTION_ADDBA_REQ = 0,
-	WLAN_ACTION_ADDBA_RESP = 1,
-	WLAN_ACTION_DELBA = 2,
-};
-
-enum ieee80211_back_parties {
-	WLAN_BACK_RECIPIENT = 0,
-	WLAN_BACK_INITIATOR = 1,
-};
-
-enum txq_info_flags {
-	IEEE80211_TXQ_STOP = 0,
-	IEEE80211_TXQ_AMPDU = 1,
-	IEEE80211_TXQ_NO_AMSDU = 2,
-	IEEE80211_TXQ_STOP_NETIF_TX = 3,
-};
-
-enum ieee80211_vht_opmode_bits {
-	IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK = 3,
-	IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ = 0,
-	IEEE80211_OPMODE_NOTIF_CHANWIDTH_40MHZ = 1,
-	IEEE80211_OPMODE_NOTIF_CHANWIDTH_80MHZ = 2,
-	IEEE80211_OPMODE_NOTIF_CHANWIDTH_160MHZ = 3,
-	IEEE80211_OPMODE_NOTIF_RX_NSS_MASK = 112,
-	IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT = 4,
-	IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF = 128,
-};
-
-enum ieee80211_spectrum_mgmt_actioncode {
-	WLAN_ACTION_SPCT_MSR_REQ = 0,
-	WLAN_ACTION_SPCT_MSR_RPRT = 1,
-	WLAN_ACTION_SPCT_TPC_REQ = 2,
-	WLAN_ACTION_SPCT_TPC_RPRT = 3,
-	WLAN_ACTION_SPCT_CHL_SWITCH = 4,
-};
-
-struct ieee80211_csa_ie {
-	struct cfg80211_chan_def chandef;
-	u8 mode;
-	u8 count;
-	u8 ttl;
-	u16 pre_value;
-	u16 reason_code;
-	u32 max_switch_time;
-};
-
-enum ieee80211_vht_actioncode {
-	WLAN_VHT_ACTION_COMPRESSED_BF = 0,
-	WLAN_VHT_ACTION_GROUPID_MGMT = 1,
-	WLAN_VHT_ACTION_OPMODE_NOTIF = 2,
-};
-
-enum ieee80211_tpt_led_trigger_flags {
-	IEEE80211_TPT_LEDTRIG_FL_RADIO = 1,
-	IEEE80211_TPT_LEDTRIG_FL_WORK = 2,
-	IEEE80211_TPT_LEDTRIG_FL_CONNECTED = 4,
-};
-
-struct rate_control_alg {
-	struct list_head list;
-	const struct rate_control_ops *ops;
-};
-
-struct michael_mic_ctx {
-	u32 l;
-	u32 r;
-};
-
-struct ieee80211_csa_settings {
-	const u16 *counter_offsets_beacon;
-	const u16 *counter_offsets_presp;
-	int n_counter_offsets_beacon;
-	int n_counter_offsets_presp;
-	u8 count;
-};
-
-struct ieee80211_hdr_3addr {
-	__le16 frame_control;
-	__le16 duration_id;
-	u8 addr1[6];
-	u8 addr2[6];
-	u8 addr3[6];
-	__le16 seq_ctrl;
-};
-
-enum ieee80211_ht_chanwidth_values {
-	IEEE80211_HT_CHANWIDTH_20MHZ = 0,
-	IEEE80211_HT_CHANWIDTH_ANY = 1,
-};
-
-struct ieee80211_tdls_data {
-	u8 da[6];
-	u8 sa[6];
-	__be16 ether_type;
-	u8 payload_type;
-	u8 category;
-	u8 action_code;
-	union {
-		struct {
-			u8 dialog_token;
-			__le16 capability;
-			u8 variable[0];
-		} __attribute__((packed)) setup_req;
-		struct {
-			__le16 status_code;
-			u8 dialog_token;
-			__le16 capability;
-			u8 variable[0];
-		} __attribute__((packed)) setup_resp;
-		struct {
-			__le16 status_code;
-			u8 dialog_token;
-			u8 variable[0];
-		} __attribute__((packed)) setup_cfm;
-		struct {
-			__le16 reason_code;
-			u8 variable[0];
-		} teardown;
-		struct {
-			u8 dialog_token;
-			u8 variable[0];
-		} discover_req;
-		struct {
-			u8 target_channel;
-			u8 oper_class;
-			u8 variable[0];
-		} chan_switch_req;
-		struct {
-			__le16 status_code;
-			u8 variable[0];
-		} chan_switch_resp;
-	} u;
-} __attribute__((packed));
-
-enum ieee80211_self_protected_actioncode {
-	WLAN_SP_RESERVED = 0,
-	WLAN_SP_MESH_PEERING_OPEN = 1,
-	WLAN_SP_MESH_PEERING_CONFIRM = 2,
-	WLAN_SP_MESH_PEERING_CLOSE = 3,
-	WLAN_SP_MGK_INFORM = 4,
-	WLAN_SP_MGK_ACK = 5,
-};
-
-enum ieee80211_pub_actioncode {
-	WLAN_PUB_ACTION_20_40_BSS_COEX = 0,
-	WLAN_PUB_ACTION_DSE_ENABLEMENT = 1,
-	WLAN_PUB_ACTION_DSE_DEENABLEMENT = 2,
-	WLAN_PUB_ACTION_DSE_REG_LOC_ANN = 3,
-	WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
-	WLAN_PUB_ACTION_DSE_MSMT_REQ = 5,
-	WLAN_PUB_ACTION_DSE_MSMT_RESP = 6,
-	WLAN_PUB_ACTION_MSMT_PILOT = 7,
-	WLAN_PUB_ACTION_DSE_PC = 8,
-	WLAN_PUB_ACTION_VENDOR_SPECIFIC = 9,
-	WLAN_PUB_ACTION_GAS_INITIAL_REQ = 10,
-	WLAN_PUB_ACTION_GAS_INITIAL_RESP = 11,
-	WLAN_PUB_ACTION_GAS_COMEBACK_REQ = 12,
-	WLAN_PUB_ACTION_GAS_COMEBACK_RESP = 13,
-	WLAN_PUB_ACTION_TDLS_DISCOVER_RES = 14,
-	WLAN_PUB_ACTION_LOC_TRACK_NOTI = 15,
-	WLAN_PUB_ACTION_QAB_REQUEST_FRAME = 16,
-	WLAN_PUB_ACTION_QAB_RESPONSE_FRAME = 17,
-	WLAN_PUB_ACTION_QMF_POLICY = 18,
-	WLAN_PUB_ACTION_QMF_POLICY_CHANGE = 19,
-	WLAN_PUB_ACTION_QLOAD_REQUEST = 20,
-	WLAN_PUB_ACTION_QLOAD_REPORT = 21,
-	WLAN_PUB_ACTION_HCCA_TXOP_ADVERT = 22,
-	WLAN_PUB_ACTION_HCCA_TXOP_RESPONSE = 23,
-	WLAN_PUB_ACTION_PUBLIC_KEY = 24,
-	WLAN_PUB_ACTION_CHANNEL_AVAIL_QUERY = 25,
-	WLAN_PUB_ACTION_CHANNEL_SCHEDULE_MGMT = 26,
-	WLAN_PUB_ACTION_CONTACT_VERI_SIGNAL = 27,
-	WLAN_PUB_ACTION_GDD_ENABLEMENT_REQ = 28,
-	WLAN_PUB_ACTION_GDD_ENABLEMENT_RESP = 29,
-	WLAN_PUB_ACTION_NETWORK_CHANNEL_CONTROL = 30,
-	WLAN_PUB_ACTION_WHITE_SPACE_MAP_ANN = 31,
-	WLAN_PUB_ACTION_FTM_REQUEST = 32,
-	WLAN_PUB_ACTION_FTM = 33,
-	WLAN_PUB_ACTION_FILS_DISCOVERY = 34,
-};
-
-enum ieee80211_sa_query_action {
-	WLAN_ACTION_SA_QUERY_REQUEST = 0,
-	WLAN_ACTION_SA_QUERY_RESPONSE = 1,
-};
-
-enum ieee80211_radiotap_flags {
-	IEEE80211_RADIOTAP_F_CFP = 1,
-	IEEE80211_RADIOTAP_F_SHORTPRE = 2,
-	IEEE80211_RADIOTAP_F_WEP = 4,
-	IEEE80211_RADIOTAP_F_FRAG = 8,
-	IEEE80211_RADIOTAP_F_FCS = 16,
-	IEEE80211_RADIOTAP_F_DATAPAD = 32,
-	IEEE80211_RADIOTAP_F_BADFCS = 64,
-};
-
-enum ieee80211_radiotap_channel_flags {
-	IEEE80211_CHAN_CCK = 32,
-	IEEE80211_CHAN_OFDM = 64,
-	IEEE80211_CHAN_2GHZ = 128,
-	IEEE80211_CHAN_5GHZ = 256,
-	IEEE80211_CHAN_DYN = 1024,
-	IEEE80211_CHAN_HALF = 16384,
-	IEEE80211_CHAN_QUARTER = 32768,
-};
-
-enum ieee80211_radiotap_rx_flags {
-	IEEE80211_RADIOTAP_F_RX_BADPLCP = 2,
-};
-
-enum ieee80211_radiotap_ampdu_flags {
-	IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN = 1,
-	IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN = 2,
-	IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN = 4,
-	IEEE80211_RADIOTAP_AMPDU_IS_LAST = 8,
-	IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR = 16,
-	IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN = 32,
-	IEEE80211_RADIOTAP_AMPDU_EOF = 64,
-	IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN = 128,
-};
-
-enum ieee80211_radiotap_vht_coding {
-	IEEE80211_RADIOTAP_CODING_LDPC_USER0 = 1,
-	IEEE80211_RADIOTAP_CODING_LDPC_USER1 = 2,
-	IEEE80211_RADIOTAP_CODING_LDPC_USER2 = 4,
-	IEEE80211_RADIOTAP_CODING_LDPC_USER3 = 8,
-};
-
-enum ieee80211_radiotap_timestamp_flags {
-	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_64BIT = 0,
-	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_32BIT = 1,
-	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_ACCURACY = 2,
-};
-
-struct ieee80211_radiotap_he_mu {
-	__le16 flags1;
-	__le16 flags2;
-	u8 ru_ch1[4];
-	u8 ru_ch2[4];
-};
-
-struct ieee80211_radiotap_lsig {
-	__le16 data1;
-	__le16 data2;
-};
-
-enum mac80211_rx_encoding_flags {
-	RX_ENC_FLAG_SHORTPRE = 1,
-	RX_ENC_FLAG_SHORT_GI = 4,
-	RX_ENC_FLAG_HT_GF = 8,
-	RX_ENC_FLAG_STBC_MASK = 48,
-	RX_ENC_FLAG_LDPC = 64,
-	RX_ENC_FLAG_BF = 128,
-};
-
-struct ieee80211_vendor_radiotap {
-	u32 present;
-	u8 align;
-	u8 oui[3];
-	u8 subns;
-	u8 pad;
-	u16 len;
-	u8 data[0];
-};
-
-enum ieee80211_packet_rx_flags {
-	IEEE80211_RX_AMSDU = 8,
-	IEEE80211_RX_MALFORMED_ACTION_FRM = 16,
-	IEEE80211_RX_DEFERRED_RELEASE = 32,
-};
-
-enum ieee80211_rx_flags {
-	IEEE80211_RX_CMNTR = 1,
-	IEEE80211_RX_BEACON_REPORTED = 2,
-};
-
-struct ieee80211_rts {
-	__le16 frame_control;
-	__le16 duration;
-	u8 ra[6];
-	u8 ta[6];
-};
-
-struct ieee80211_cts {
-	__le16 frame_control;
-	__le16 duration;
-	u8 ra[6];
-};
-
-struct ieee80211_pspoll {
-	__le16 frame_control;
-	__le16 aid;
-	u8 bssid[6];
-	u8 ta[6];
-};
-
-typedef u32 (*codel_skb_len_t)(const struct sk_buff *);
-
-typedef codel_time_t (*codel_skb_time_t)(const struct sk_buff *);
-
-typedef void (*codel_skb_drop_t)(struct sk_buff *, void *);
-
-typedef struct sk_buff * (*codel_skb_dequeue_t)(struct codel_vars *, void *);
-
-struct ieee80211_mutable_offsets {
-	u16 tim_offset;
-	u16 tim_length;
-	u16 csa_counter_offs[2];
-};
-
-typedef struct sk_buff *fq_tin_dequeue_t(struct fq *, struct fq_tin *, struct fq_flow *);
-
-typedef void fq_skb_free_t(struct fq *, struct fq_tin *, struct fq_flow *, struct sk_buff *);
-
-typedef bool fq_skb_filter_t(struct fq *, struct fq_tin *, struct fq_flow *, struct sk_buff *, void *);
-
-typedef struct fq_flow *fq_flow_get_default_t(struct fq *, struct fq_tin *, int, struct sk_buff *);
-
-enum mesh_path_flags {
-	MESH_PATH_ACTIVE = 1,
-	MESH_PATH_RESOLVING = 2,
-	MESH_PATH_SN_VALID = 4,
-	MESH_PATH_FIXED = 8,
-	MESH_PATH_RESOLVED = 16,
-	MESH_PATH_REQ_QUEUED = 32,
-	MESH_PATH_DELETED = 64,
-};
-
-struct mesh_path {
-	u8 dst[6];
-	u8 mpp[6];
-	struct rhash_head rhash;
-	struct hlist_node walk_list;
-	struct hlist_node gate_list;
-	struct ieee80211_sub_if_data *sdata;
-	struct sta_info *next_hop;
-	struct timer_list timer;
-	struct sk_buff_head frame_queue;
-	struct callback_head rcu;
-	u32 sn;
-	u32 metric;
-	u8 hop_count;
-	long unsigned int exp_time;
-	u32 discovery_timeout;
-	u8 discovery_retries;
-	enum mesh_path_flags flags;
-	spinlock_t state_lock;
-	u8 rann_snd_addr[6];
-	u32 rann_metric;
-	long unsigned int last_preq_to_root;
-	bool is_root;
-	bool is_gate;
-	u32 path_change_count;
-};
-
-enum ieee80211_interface_iteration_flags {
-	IEEE80211_IFACE_ITER_NORMAL = 0,
-	IEEE80211_IFACE_ITER_RESUME_ALL = 1,
-	IEEE80211_IFACE_ITER_ACTIVE = 2,
-};
-
-struct ieee80211_noa_data {
-	u32 next_tsf;
-	bool has_next_tsf;
-	u8 absent;
-	u8 count[4];
-	struct {
-		u32 start;
-		u32 duration;
-		u32 interval;
-	} desc[4];
-};
-
-enum ieee80211_chanctx_change {
-	IEEE80211_CHANCTX_CHANGE_WIDTH = 1,
-	IEEE80211_CHANCTX_CHANGE_RX_CHAINS = 2,
-	IEEE80211_CHANCTX_CHANGE_RADAR = 4,
-	IEEE80211_CHANCTX_CHANGE_CHANNEL = 8,
-	IEEE80211_CHANCTX_CHANGE_MIN_WIDTH = 16,
-};
-
-struct trace_vif_entry {
-	enum nl80211_iftype vif_type;
-	bool p2p;
-	char vif_name[16];
-} __attribute__((packed));
-
-struct trace_chandef_entry {
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-};
-
-struct trace_switch_entry {
-	struct trace_vif_entry vif;
-	struct trace_chandef_entry old_chandef;
-	struct trace_chandef_entry new_chandef;
-} __attribute__((packed));
-
-struct trace_event_raw_local_only_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_local_sdata_addr_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_local_u32_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 value;
-	char __data[0];
-};
-
-struct trace_event_raw_local_sdata_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_return_int {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_return_bool {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_return_u32 {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_return_u64 {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u64 ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_wakeup {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool enabled;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_change_interface {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 new_type;
-	bool new_p2p;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_config {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 changed;
-	u32 flags;
-	int power_level;
-	int dynamic_ps_timeout;
-	u16 listen_interval;
-	u8 long_frame_max_tx_count;
-	u8 short_frame_max_tx_count;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	int smps;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_bss_info_changed {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 changed;
-	bool assoc;
-	bool ibss_joined;
-	bool ibss_creator;
-	u16 aid;
-	bool cts;
-	bool shortpre;
-	bool shortslot;
-	bool enable_beacon;
-	u8 dtimper;
-	u16 bcnint;
-	u16 assoc_cap;
-	u64 sync_tsf;
-	u32 sync_device_ts;
-	u8 sync_dtim_count;
-	u32 basic_rates;
-	int mcast_rate[4];
-	u16 ht_operation_mode;
-	s32 cqm_rssi_thold;
-	s32 cqm_rssi_hyst;
-	u32 channel_width;
-	u32 channel_cfreq1;
-	u32 __data_loc_arp_addr_list;
-	int arp_addr_cnt;
-	bool qos;
-	bool idle;
-	bool ps;
-	u32 __data_loc_ssid;
-	bool hidden_ssid;
-	int txpower;
-	u8 p2p_oppps_ctwindow;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_prepare_multicast {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int mc_count;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_configure_filter {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	unsigned int changed;
-	unsigned int total;
-	u64 multicast;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_config_iface_filter {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	unsigned int filter_flags;
-	unsigned int changed_flags;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_tim {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	bool set;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u32 cipher;
-	u8 hw_key_idx;
-	u8 flags;
-	s8 keyidx;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_update_tkip_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u32 iv32;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_sw_scan_start {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char mac_addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_stats {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int ret;
-	unsigned int ackfail;
-	unsigned int rtsfail;
-	unsigned int fcserr;
-	unsigned int rtssucc;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_key_seq {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 cipher;
-	u8 hw_key_idx;
-	u8 flags;
-	s8 keyidx;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_coverage_class {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	s16 value;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_sta_notify {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u32 cmd;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_sta_state {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u32 old_state;
-	u32 new_state;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_sta_set_txpwr {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	s16 txpwr;
-	u8 type;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_sta_rc_update {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u32 changed;
-	char __data[0];
-};
-
-struct trace_event_raw_sta_event {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_conf_tx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u16 ac;
-	u16 txop;
-	u16 cw_min;
-	u16 cw_max;
-	u8 aifs;
-	bool uapsd;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_tsf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u64 tsf;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_offset_tsf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	s64 tsf_offset;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_ampdu_action {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	enum ieee80211_ampdu_mlme_action ieee80211_ampdu_mlme_action;
-	char sta_addr[6];
-	u16 tid;
-	u16 ssn;
-	u16 buf_size;
-	bool amsdu;
-	u16 timeout;
-	u16 action;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_survey {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int idx;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_flush {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool drop;
-	u32 queues;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u64 timestamp;
-	u32 device_timestamp;
-	bool block_tx;
-	u8 count;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_antenna {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx_ant;
-	u32 rx_ant;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_antenna {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx_ant;
-	u32 rx_ant;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_remain_on_channel {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	int center_freq;
-	unsigned int duration;
-	u32 type;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_ringparam {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx;
-	u32 rx;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_ringparam {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 tx;
-	u32 tx_max;
-	u32 rx;
-	u32 rx_max;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_bitrate_mask {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 legacy_2g;
-	u32 legacy_5g;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_rekey_data {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 kek[16];
-	u8 kck[16];
-	u8 replay_ctr[8];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_event_callback {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 type;
-	char __data[0];
-};
-
-struct trace_event_raw_release_evt {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	u16 tids;
-	int num_frames;
-	int reason;
-	bool more_data;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_mgd_prepare_tx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 duration;
-	char __data[0];
-};
-
-struct trace_event_raw_local_chanctx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u32 min_control_freq;
-	u32 min_chan_width;
-	u32 min_center_freq1;
-	u32 min_center_freq2;
-	u8 rx_chains_static;
-	u8 rx_chains_dynamic;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_change_chanctx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u32 min_control_freq;
-	u32 min_chan_width;
-	u32 min_center_freq1;
-	u32 min_center_freq2;
-	u8 rx_chains_static;
-	u8 rx_chains_dynamic;
-	u32 changed;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_switch_vif_chanctx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	int n_vifs;
-	u32 mode;
-	u32 __data_loc_vifs;
-	char __data[0];
-};
-
-struct trace_event_raw_local_sdata_chanctx {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u32 min_control_freq;
-	u32 min_chan_width;
-	u32 min_center_freq1;
-	u32 min_center_freq2;
-	u8 rx_chains_static;
-	u8 rx_chains_dynamic;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_start_ap {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 dtimper;
-	u16 bcnint;
-	u32 __data_loc_ssid;
-	bool hidden_ssid;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_reconfig_complete {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u8 reconfig_type;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_join_ibss {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 dtimper;
-	u16 bcnint;
-	u32 __data_loc_ssid;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_expected_throughput {
-	struct trace_entry ent;
-	char sta_addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_start_nan {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 master_pref;
-	u8 bands;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_stop_nan {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_nan_change_conf {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 master_pref;
-	u8 bands;
-	u32 changes;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_add_nan_func {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 type;
-	u8 inst_id;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_del_nan_func {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 instance_id;
-	char __data[0];
-};
-
-struct trace_event_raw_api_start_tx_ba_session {
-	struct trace_entry ent;
-	char sta_addr[6];
-	u16 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_api_start_tx_ba_cb {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 ra[6];
-	u16 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_api_stop_tx_ba_session {
-	struct trace_entry ent;
-	char sta_addr[6];
-	u16 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_api_stop_tx_ba_cb {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 ra[6];
-	u16 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_api_beacon_loss {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char __data[0];
-};
-
-struct trace_event_raw_api_connection_loss {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char __data[0];
-};
-
-struct trace_event_raw_api_cqm_rssi_notify {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 rssi_event;
-	s32 rssi_level;
-	char __data[0];
-};
-
-struct trace_event_raw_api_scan_completed {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	bool aborted;
-	char __data[0];
-};
-
-struct trace_event_raw_api_sched_scan_results {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_api_sched_scan_stopped {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_api_sta_block_awake {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	bool block;
-	char __data[0];
-};
-
-struct trace_event_raw_api_chswitch_done {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	bool success;
-	char __data[0];
-};
-
-struct trace_event_raw_api_gtk_rekey_notify {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 bssid[6];
-	u8 replay_ctr[8];
-	char __data[0];
-};
-
-struct trace_event_raw_api_enable_rssi_reports {
-	struct trace_entry ent;
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	int rssi_min_thold;
-	int rssi_max_thold;
-	char __data[0];
-};
-
-struct trace_event_raw_api_eosp {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_api_send_eosp_nullfunc {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	u8 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_api_sta_set_buffered {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char sta_addr[6];
-	u8 tid;
-	bool buffered;
-	char __data[0];
-};
-
-struct trace_event_raw_wake_queue {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u16 queue;
-	u32 reason;
-	char __data[0];
-};
-
-struct trace_event_raw_stop_queue {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	u16 queue;
-	u32 reason;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_set_default_unicast_key {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	int key_idx;
-	char __data[0];
-};
-
-struct trace_event_raw_api_radar_detected {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_channel_switch_beacon {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_pre_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u64 timestamp;
-	u32 device_timestamp;
-	bool block_tx;
-	u8 count;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_channel_switch_rx_beacon {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u64 timestamp;
-	u32 device_timestamp;
-	bool block_tx;
-	u8 count;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_txpower {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	int dbm;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_tdls_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u8 oper_class;
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_tdls_cancel_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	char __data[0];
-};
-
-struct trace_event_raw_drv_tdls_recv_channel_switch {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	u8 action_code;
-	char sta_addr[6];
-	u32 control_freq;
-	u32 chan_width;
-	u32 center_freq1;
-	u32 center_freq2;
-	u32 status;
-	bool peer_initiator;
-	u32 timestamp;
-	u16 switch_time;
-	u16 switch_timeout;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_wake_tx_queue {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char sta_addr[6];
-	u8 ac;
-	u8 tid;
-	char __data[0];
-};
-
-struct trace_event_raw_drv_get_ftm_responder_stats {
-	struct trace_entry ent;
-	char wiphy_name[32];
-	enum nl80211_iftype vif_type;
-	void *sdata;
-	bool p2p;
-	u32 __data_loc_vif_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_local_only_evt {};
-
-struct trace_event_data_offsets_local_sdata_addr_evt {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_local_u32_evt {};
-
-struct trace_event_data_offsets_local_sdata_evt {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_return_int {};
-
-struct trace_event_data_offsets_drv_return_bool {};
-
-struct trace_event_data_offsets_drv_return_u32 {};
-
-struct trace_event_data_offsets_drv_return_u64 {};
-
-struct trace_event_data_offsets_drv_set_wakeup {};
-
-struct trace_event_data_offsets_drv_change_interface {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_config {};
-
-struct trace_event_data_offsets_drv_bss_info_changed {
-	u32 vif_name;
-	u32 arp_addr_list;
-	u32 ssid;
-};
-
-struct trace_event_data_offsets_drv_prepare_multicast {};
-
-struct trace_event_data_offsets_drv_configure_filter {};
-
-struct trace_event_data_offsets_drv_config_iface_filter {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_set_tim {};
-
-struct trace_event_data_offsets_drv_set_key {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_update_tkip_key {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_sw_scan_start {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_get_stats {};
-
-struct trace_event_data_offsets_drv_get_key_seq {};
-
-struct trace_event_data_offsets_drv_set_coverage_class {};
-
-struct trace_event_data_offsets_drv_sta_notify {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_sta_state {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_sta_set_txpwr {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_sta_rc_update {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_sta_event {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_conf_tx {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_set_tsf {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_offset_tsf {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_ampdu_action {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_get_survey {};
-
-struct trace_event_data_offsets_drv_flush {};
-
-struct trace_event_data_offsets_drv_channel_switch {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_set_antenna {};
-
-struct trace_event_data_offsets_drv_get_antenna {};
-
-struct trace_event_data_offsets_drv_remain_on_channel {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_set_ringparam {};
-
-struct trace_event_data_offsets_drv_get_ringparam {};
-
-struct trace_event_data_offsets_drv_set_bitrate_mask {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_set_rekey_data {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_event_callback {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_release_evt {};
-
-struct trace_event_data_offsets_drv_mgd_prepare_tx {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_local_chanctx {};
-
-struct trace_event_data_offsets_drv_change_chanctx {};
-
-struct trace_event_data_offsets_drv_switch_vif_chanctx {
-	u32 vifs;
-};
-
-struct trace_event_data_offsets_local_sdata_chanctx {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_start_ap {
-	u32 vif_name;
-	u32 ssid;
-};
-
-struct trace_event_data_offsets_drv_reconfig_complete {};
-
-struct trace_event_data_offsets_drv_join_ibss {
-	u32 vif_name;
-	u32 ssid;
-};
-
-struct trace_event_data_offsets_drv_get_expected_throughput {};
-
-struct trace_event_data_offsets_drv_start_nan {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_stop_nan {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_nan_change_conf {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_add_nan_func {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_del_nan_func {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_start_tx_ba_session {};
-
-struct trace_event_data_offsets_api_start_tx_ba_cb {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_stop_tx_ba_session {};
-
-struct trace_event_data_offsets_api_stop_tx_ba_cb {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_beacon_loss {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_connection_loss {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_cqm_rssi_notify {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_scan_completed {};
-
-struct trace_event_data_offsets_api_sched_scan_results {};
-
-struct trace_event_data_offsets_api_sched_scan_stopped {};
-
-struct trace_event_data_offsets_api_sta_block_awake {};
-
-struct trace_event_data_offsets_api_chswitch_done {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_gtk_rekey_notify {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_enable_rssi_reports {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_eosp {};
-
-struct trace_event_data_offsets_api_send_eosp_nullfunc {};
-
-struct trace_event_data_offsets_api_sta_set_buffered {};
-
-struct trace_event_data_offsets_wake_queue {};
-
-struct trace_event_data_offsets_stop_queue {};
-
-struct trace_event_data_offsets_drv_set_default_unicast_key {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_api_radar_detected {};
-
-struct trace_event_data_offsets_drv_channel_switch_beacon {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_pre_channel_switch {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_channel_switch_rx_beacon {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_get_txpower {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_tdls_channel_switch {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_tdls_cancel_channel_switch {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_tdls_recv_channel_switch {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_wake_tx_queue {
-	u32 vif_name;
-};
-
-struct trace_event_data_offsets_drv_get_ftm_responder_stats {
-	u32 vif_name;
-};
-
-typedef void (*btf_trace_drv_return_void)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_return_int)(void *, struct ieee80211_local *, int);
-
-typedef void (*btf_trace_drv_return_bool)(void *, struct ieee80211_local *, bool);
-
-typedef void (*btf_trace_drv_return_u32)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_return_u64)(void *, struct ieee80211_local *, u64);
-
-typedef void (*btf_trace_drv_start)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_get_et_strings)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_get_et_sset_count)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_get_et_stats)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_suspend)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_resume)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_set_wakeup)(void *, struct ieee80211_local *, bool);
-
-typedef void (*btf_trace_drv_stop)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_add_interface)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_change_interface)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, enum nl80211_iftype, bool);
-
-typedef void (*btf_trace_drv_remove_interface)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_config)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_bss_info_changed)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_bss_conf *, u32);
-
-typedef void (*btf_trace_drv_prepare_multicast)(void *, struct ieee80211_local *, int);
-
-typedef void (*btf_trace_drv_configure_filter)(void *, struct ieee80211_local *, unsigned int, unsigned int *, u64);
-
-typedef void (*btf_trace_drv_config_iface_filter)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_drv_set_tim)(void *, struct ieee80211_local *, struct ieee80211_sta *, bool);
-
-typedef void (*btf_trace_drv_set_key)(void *, struct ieee80211_local *, enum set_key_cmd, struct ieee80211_sub_if_data *, struct ieee80211_sta *, struct ieee80211_key_conf *);
-
-typedef void (*btf_trace_drv_update_tkip_key)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_key_conf *, struct ieee80211_sta *, u32);
-
-typedef void (*btf_trace_drv_hw_scan)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_cancel_hw_scan)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_sched_scan_start)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_sched_scan_stop)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_sw_scan_start)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, const u8 *);
-
-typedef void (*btf_trace_drv_sw_scan_complete)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_get_stats)(void *, struct ieee80211_local *, struct ieee80211_low_level_stats *, int);
-
-typedef void (*btf_trace_drv_get_key_seq)(void *, struct ieee80211_local *, struct ieee80211_key_conf *);
-
-typedef void (*btf_trace_drv_set_frag_threshold)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_set_rts_threshold)(void *, struct ieee80211_local *, u32);
-
-typedef void (*btf_trace_drv_set_coverage_class)(void *, struct ieee80211_local *, s16);
-
-typedef void (*btf_trace_drv_sta_notify)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, enum sta_notify_cmd, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_state)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *, enum ieee80211_sta_state, enum ieee80211_sta_state);
-
-typedef void (*btf_trace_drv_sta_set_txpwr)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_rc_update)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *, u32);
-
-typedef void (*btf_trace_drv_sta_statistics)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_add)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_remove)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_pre_rcu_remove)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sync_rx_queues)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_sta_rate_tbl_update)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_conf_tx)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, u16, const struct ieee80211_tx_queue_params *);
-
-typedef void (*btf_trace_drv_get_tsf)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_set_tsf)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, u64);
-
-typedef void (*btf_trace_drv_offset_tsf)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, s64);
-
-typedef void (*btf_trace_drv_reset_tsf)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_tx_last_beacon)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_ampdu_action)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_ampdu_params *);
-
-typedef void (*btf_trace_drv_get_survey)(void *, struct ieee80211_local *, int, struct survey_info *);
-
-typedef void (*btf_trace_drv_flush)(void *, struct ieee80211_local *, u32, bool);
-
-typedef void (*btf_trace_drv_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_channel_switch *);
-
-typedef void (*btf_trace_drv_set_antenna)(void *, struct ieee80211_local *, u32, u32, int);
-
-typedef void (*btf_trace_drv_get_antenna)(void *, struct ieee80211_local *, u32, u32, int);
-
-typedef void (*btf_trace_drv_remain_on_channel)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_channel *, unsigned int, enum ieee80211_roc_type);
-
-typedef void (*btf_trace_drv_cancel_remain_on_channel)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_set_ringparam)(void *, struct ieee80211_local *, u32, u32);
-
-typedef void (*btf_trace_drv_get_ringparam)(void *, struct ieee80211_local *, u32 *, u32 *, u32 *, u32 *);
-
-typedef void (*btf_trace_drv_tx_frames_pending)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_offchannel_tx_cancel_wait)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_set_bitrate_mask)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, const struct cfg80211_bitrate_mask *);
-
-typedef void (*btf_trace_drv_set_rekey_data)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct cfg80211_gtk_rekey_data *);
-
-typedef void (*btf_trace_drv_event_callback)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, const struct ieee80211_event *);
-
-typedef void (*btf_trace_drv_release_buffered_frames)(void *, struct ieee80211_local *, struct ieee80211_sta *, u16, int, enum ieee80211_frame_release_type, bool);
-
-typedef void (*btf_trace_drv_allow_buffered_frames)(void *, struct ieee80211_local *, struct ieee80211_sta *, u16, int, enum ieee80211_frame_release_type, bool);
-
-typedef void (*btf_trace_drv_mgd_prepare_tx)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, u16);
-
-typedef void (*btf_trace_drv_mgd_protect_tdls_discover)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_add_chanctx)(void *, struct ieee80211_local *, struct ieee80211_chanctx *);
-
-typedef void (*btf_trace_drv_remove_chanctx)(void *, struct ieee80211_local *, struct ieee80211_chanctx *);
-
-typedef void (*btf_trace_drv_change_chanctx)(void *, struct ieee80211_local *, struct ieee80211_chanctx *, u32);
-
-typedef void (*btf_trace_drv_switch_vif_chanctx)(void *, struct ieee80211_local *, struct ieee80211_vif_chanctx_switch *, int, enum ieee80211_chanctx_switch_mode);
-
-typedef void (*btf_trace_drv_assign_vif_chanctx)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_chanctx *);
-
-typedef void (*btf_trace_drv_unassign_vif_chanctx)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_chanctx *);
-
-typedef void (*btf_trace_drv_start_ap)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_bss_conf *);
-
-typedef void (*btf_trace_drv_stop_ap)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_reconfig_complete)(void *, struct ieee80211_local *, enum ieee80211_reconfig_type);
-
-typedef void (*btf_trace_drv_ipv6_addr_change)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_join_ibss)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_bss_conf *);
-
-typedef void (*btf_trace_drv_leave_ibss)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_get_expected_throughput)(void *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_start_nan)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct cfg80211_nan_conf *);
-
-typedef void (*btf_trace_drv_stop_nan)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_nan_change_conf)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct cfg80211_nan_conf *, u32);
-
-typedef void (*btf_trace_drv_add_nan_func)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, const struct cfg80211_nan_func *);
-
-typedef void (*btf_trace_drv_del_nan_func)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, u8);
-
-typedef void (*btf_trace_drv_start_pmsr)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_abort_pmsr)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_api_start_tx_ba_session)(void *, struct ieee80211_sta *, u16);
-
-typedef void (*btf_trace_api_start_tx_ba_cb)(void *, struct ieee80211_sub_if_data *, const u8 *, u16);
-
-typedef void (*btf_trace_api_stop_tx_ba_session)(void *, struct ieee80211_sta *, u16);
-
-typedef void (*btf_trace_api_stop_tx_ba_cb)(void *, struct ieee80211_sub_if_data *, const u8 *, u16);
-
-typedef void (*btf_trace_api_restart_hw)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_api_beacon_loss)(void *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_api_connection_loss)(void *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_api_cqm_rssi_notify)(void *, struct ieee80211_sub_if_data *, enum nl80211_cqm_rssi_threshold_event, s32);
-
-typedef void (*btf_trace_api_cqm_beacon_loss_notify)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_api_scan_completed)(void *, struct ieee80211_local *, bool);
-
-typedef void (*btf_trace_api_sched_scan_results)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_api_sched_scan_stopped)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_api_sta_block_awake)(void *, struct ieee80211_local *, struct ieee80211_sta *, bool);
-
-typedef void (*btf_trace_api_chswitch_done)(void *, struct ieee80211_sub_if_data *, bool);
-
-typedef void (*btf_trace_api_ready_on_channel)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_api_remain_on_channel_expired)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_api_gtk_rekey_notify)(void *, struct ieee80211_sub_if_data *, const u8 *, const u8 *);
-
-typedef void (*btf_trace_api_enable_rssi_reports)(void *, struct ieee80211_sub_if_data *, int, int);
-
-typedef void (*btf_trace_api_eosp)(void *, struct ieee80211_local *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_api_send_eosp_nullfunc)(void *, struct ieee80211_local *, struct ieee80211_sta *, u8);
-
-typedef void (*btf_trace_api_sta_set_buffered)(void *, struct ieee80211_local *, struct ieee80211_sta *, u8, bool);
-
-typedef void (*btf_trace_wake_queue)(void *, struct ieee80211_local *, u16, enum queue_stop_reason);
-
-typedef void (*btf_trace_stop_queue)(void *, struct ieee80211_local *, u16, enum queue_stop_reason);
-
-typedef void (*btf_trace_drv_set_default_unicast_key)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, int);
-
-typedef void (*btf_trace_api_radar_detected)(void *, struct ieee80211_local *);
-
-typedef void (*btf_trace_drv_channel_switch_beacon)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_drv_pre_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_channel_switch *);
-
-typedef void (*btf_trace_drv_post_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_abort_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *);
-
-typedef void (*btf_trace_drv_channel_switch_rx_beacon)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_channel_switch *);
-
-typedef void (*btf_trace_drv_get_txpower)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, int, int);
-
-typedef void (*btf_trace_drv_tdls_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *, u8, struct cfg80211_chan_def *);
-
-typedef void (*btf_trace_drv_tdls_cancel_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_sta *);
-
-typedef void (*btf_trace_drv_tdls_recv_channel_switch)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct ieee80211_tdls_ch_sw_params *);
-
-typedef void (*btf_trace_drv_wake_tx_queue)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct txq_info *);
-
-typedef void (*btf_trace_drv_get_ftm_responder_stats)(void *, struct ieee80211_local *, struct ieee80211_sub_if_data *, struct cfg80211_ftm_responder_stats *);
-
-enum ieee80211_he_mcs_support {
-	IEEE80211_HE_MCS_SUPPORT_0_7 = 0,
-	IEEE80211_HE_MCS_SUPPORT_0_9 = 1,
-	IEEE80211_HE_MCS_SUPPORT_0_11 = 2,
-	IEEE80211_HE_MCS_NOT_SUPPORTED = 3,
-};
-
-struct ieee80211_country_ie_triplet {
-	union {
-		struct {
-			u8 first_channel;
-			u8 num_channels;
-			s8 max_power;
-		} chans;
-		struct {
-			u8 reg_extension_id;
-			u8 reg_class;
-			u8 coverage_class;
-		} ext;
-	};
-};
-
-enum ieee80211_timeout_interval_type {
-	WLAN_TIMEOUT_REASSOC_DEADLINE = 1,
-	WLAN_TIMEOUT_KEY_LIFETIME = 2,
-	WLAN_TIMEOUT_ASSOC_COMEBACK = 3,
-};
-
-enum ieee80211_idle_options {
-	WLAN_IDLE_OPTIONS_PROTECTED_KEEP_ALIVE = 1,
-};
-
-struct ieee80211_wmm_ac_param {
-	u8 aci_aifsn;
-	u8 cw;
-	__le16 txop_limit;
-};
-
-struct ieee80211_wmm_param_ie {
-	u8 element_id;
-	u8 len;
-	u8 oui[3];
-	u8 oui_type;
-	u8 oui_subtype;
-	u8 version;
-	u8 qos_info;
-	u8 reserved;
-	struct ieee80211_wmm_ac_param ac[4];
-};
-
-enum ocb_deferred_task_flags {
-	OCB_WORK_HOUSEKEEPING = 0,
-};
-
-struct mcs_group {
-	u8 shift;
-	u16 duration[12];
-};
-
-struct minstrel_rate_stats {
-	u16 attempts;
-	u16 last_attempts;
-	u16 success;
-	u16 last_success;
-	u32 att_hist;
-	u32 succ_hist;
-	u16 prob_avg;
-	u16 prob_avg_1;
-	u8 retry_count;
-	u8 retry_count_rtscts;
-	u8 sample_skipped;
-	bool retry_updated;
-};
-
-struct minstrel_rate {
-	int bitrate;
-	s8 rix;
-	u8 retry_count_cts;
-	u8 adjusted_retry_count;
-	unsigned int perfect_tx_time;
-	unsigned int ack_time;
-	int sample_limit;
-	struct minstrel_rate_stats stats;
-};
-
-struct minstrel_sta_info {
-	struct ieee80211_sta *sta;
-	long unsigned int last_stats_update;
-	unsigned int sp_ack_dur;
-	unsigned int rate_avg;
-	unsigned int lowest_rix;
-	u8 max_tp_rate[4];
-	u8 max_prob_rate;
-	unsigned int total_packets;
-	unsigned int sample_packets;
-	int sample_deferred;
-	unsigned int sample_row;
-	unsigned int sample_column;
-	int n_rates;
-	struct minstrel_rate *r;
-	bool prev_sample;
-	u8 *sample_table;
-};
-
-struct minstrel_priv {
-	struct ieee80211_hw *hw;
-	bool has_mrr;
-	bool new_avg;
-	u32 sample_switch;
-	unsigned int cw_min;
-	unsigned int cw_max;
-	unsigned int max_retry;
-	unsigned int segment_size;
-	unsigned int update_interval;
-	unsigned int lookaround_rate;
-	unsigned int lookaround_rate_mrr;
-	u8 cck_rates[4];
-};
-
-struct mcs_group___2 {
-	u16 flags;
-	u8 streams;
-	u8 shift;
-	u8 bw;
-	u16 duration[10];
-};
-
-struct minstrel_mcs_group_data {
-	u8 index;
-	u8 column;
-	u16 max_group_tp_rate[4];
-	u16 max_group_prob_rate;
-	struct minstrel_rate_stats rates[10];
-};
-
-enum minstrel_sample_mode {
-	MINSTREL_SAMPLE_IDLE = 0,
-	MINSTREL_SAMPLE_ACTIVE = 1,
-	MINSTREL_SAMPLE_PENDING = 2,
-};
-
-struct minstrel_ht_sta {
-	struct ieee80211_sta *sta;
-	unsigned int ampdu_len;
-	unsigned int ampdu_packets;
-	unsigned int avg_ampdu_len;
-	u16 max_tp_rate[4];
-	u16 max_prob_rate;
-	long unsigned int last_stats_update;
-	unsigned int overhead;
-	unsigned int overhead_rtscts;
-	unsigned int total_packets_last;
-	unsigned int total_packets_cur;
-	unsigned int total_packets;
-	unsigned int sample_packets;
-	u32 tx_flags;
-	u8 sample_wait;
-	u8 sample_tries;
-	u8 sample_count;
-	u8 sample_slow;
-	enum minstrel_sample_mode sample_mode;
-	u16 sample_rate;
-	u8 sample_group;
-	u8 cck_supported;
-	u8 cck_supported_short;
-	u16 supported[41];
-	struct minstrel_mcs_group_data groups[41];
-};
-
-struct minstrel_ht_sta_priv {
-	union {
-		struct minstrel_ht_sta ht;
-		struct minstrel_sta_info legacy;
-	};
-	void *ratelist;
-	void *sample_table;
-	bool is_ht;
-};
-
-struct netlbl_af4list {
-	__be32 addr;
-	__be32 mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_af6list {
-	struct in6_addr addr;
-	struct in6_addr mask;
-	u32 valid;
-	struct list_head list;
-};
-
-struct netlbl_domaddr_map {
-	struct list_head list4;
-	struct list_head list6;
-};
-
-struct netlbl_dommap_def {
-	u32 type;
-	union {
-		struct netlbl_domaddr_map *addrsel;
-		struct cipso_v4_doi *cipso;
-		struct calipso_doi *calipso;
-	};
-};
-
-struct netlbl_domaddr4_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af4list list;
-};
-
-struct netlbl_domaddr6_map {
-	struct netlbl_dommap_def def;
-	struct netlbl_af6list list;
-};
-
-struct netlbl_dom_map {
-	char *domain;
-	u16 family;
-	struct netlbl_dommap_def def;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_domhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-enum {
-	NLBL_MGMT_C_UNSPEC = 0,
-	NLBL_MGMT_C_ADD = 1,
-	NLBL_MGMT_C_REMOVE = 2,
-	NLBL_MGMT_C_LISTALL = 3,
-	NLBL_MGMT_C_ADDDEF = 4,
-	NLBL_MGMT_C_REMOVEDEF = 5,
-	NLBL_MGMT_C_LISTDEF = 6,
-	NLBL_MGMT_C_PROTOCOLS = 7,
-	NLBL_MGMT_C_VERSION = 8,
-	__NLBL_MGMT_C_MAX = 9,
-};
-
-enum {
-	NLBL_MGMT_A_UNSPEC = 0,
-	NLBL_MGMT_A_DOMAIN = 1,
-	NLBL_MGMT_A_PROTOCOL = 2,
-	NLBL_MGMT_A_VERSION = 3,
-	NLBL_MGMT_A_CV4DOI = 4,
-	NLBL_MGMT_A_IPV6ADDR = 5,
-	NLBL_MGMT_A_IPV6MASK = 6,
-	NLBL_MGMT_A_IPV4ADDR = 7,
-	NLBL_MGMT_A_IPV4MASK = 8,
-	NLBL_MGMT_A_ADDRSELECTOR = 9,
-	NLBL_MGMT_A_SELECTORLIST = 10,
-	NLBL_MGMT_A_FAMILY = 11,
-	NLBL_MGMT_A_CLPDOI = 12,
-	__NLBL_MGMT_A_MAX = 13,
-};
-
-struct netlbl_domhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_UNLABEL_C_UNSPEC = 0,
-	NLBL_UNLABEL_C_ACCEPT = 1,
-	NLBL_UNLABEL_C_LIST = 2,
-	NLBL_UNLABEL_C_STATICADD = 3,
-	NLBL_UNLABEL_C_STATICREMOVE = 4,
-	NLBL_UNLABEL_C_STATICLIST = 5,
-	NLBL_UNLABEL_C_STATICADDDEF = 6,
-	NLBL_UNLABEL_C_STATICREMOVEDEF = 7,
-	NLBL_UNLABEL_C_STATICLISTDEF = 8,
-	__NLBL_UNLABEL_C_MAX = 9,
-};
-
-enum {
-	NLBL_UNLABEL_A_UNSPEC = 0,
-	NLBL_UNLABEL_A_ACPTFLG = 1,
-	NLBL_UNLABEL_A_IPV6ADDR = 2,
-	NLBL_UNLABEL_A_IPV6MASK = 3,
-	NLBL_UNLABEL_A_IPV4ADDR = 4,
-	NLBL_UNLABEL_A_IPV4MASK = 5,
-	NLBL_UNLABEL_A_IFACE = 6,
-	NLBL_UNLABEL_A_SECCTX = 7,
-	__NLBL_UNLABEL_A_MAX = 8,
-};
-
-struct netlbl_unlhsh_tbl {
-	struct list_head *tbl;
-	u32 size;
-};
-
-struct netlbl_unlhsh_addr4 {
-	u32 secid;
-	struct netlbl_af4list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_addr6 {
-	u32 secid;
-	struct netlbl_af6list list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_iface {
-	int ifindex;
-	struct list_head addr4_list;
-	struct list_head addr6_list;
-	u32 valid;
-	struct list_head list;
-	struct callback_head rcu;
-};
-
-struct netlbl_unlhsh_walk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum {
-	NLBL_CIPSOV4_C_UNSPEC = 0,
-	NLBL_CIPSOV4_C_ADD = 1,
-	NLBL_CIPSOV4_C_REMOVE = 2,
-	NLBL_CIPSOV4_C_LIST = 3,
-	NLBL_CIPSOV4_C_LISTALL = 4,
-	__NLBL_CIPSOV4_C_MAX = 5,
-};
-
-enum {
-	NLBL_CIPSOV4_A_UNSPEC = 0,
-	NLBL_CIPSOV4_A_DOI = 1,
-	NLBL_CIPSOV4_A_MTYPE = 2,
-	NLBL_CIPSOV4_A_TAG = 3,
-	NLBL_CIPSOV4_A_TAGLST = 4,
-	NLBL_CIPSOV4_A_MLSLVLLOC = 5,
-	NLBL_CIPSOV4_A_MLSLVLREM = 6,
-	NLBL_CIPSOV4_A_MLSLVL = 7,
-	NLBL_CIPSOV4_A_MLSLVLLST = 8,
-	NLBL_CIPSOV4_A_MLSCATLOC = 9,
-	NLBL_CIPSOV4_A_MLSCATREM = 10,
-	NLBL_CIPSOV4_A_MLSCAT = 11,
-	NLBL_CIPSOV4_A_MLSCATLST = 12,
-	__NLBL_CIPSOV4_A_MAX = 13,
-};
-
-struct netlbl_cipsov4_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-struct netlbl_domhsh_walk_arg___2 {
-	struct netlbl_audit *audit_info;
-	u32 doi;
-};
-
-enum {
-	NLBL_CALIPSO_C_UNSPEC = 0,
-	NLBL_CALIPSO_C_ADD = 1,
-	NLBL_CALIPSO_C_REMOVE = 2,
-	NLBL_CALIPSO_C_LIST = 3,
-	NLBL_CALIPSO_C_LISTALL = 4,
-	__NLBL_CALIPSO_C_MAX = 5,
-};
-
-enum {
-	NLBL_CALIPSO_A_UNSPEC = 0,
-	NLBL_CALIPSO_A_DOI = 1,
-	NLBL_CALIPSO_A_MTYPE = 2,
-	__NLBL_CALIPSO_A_MAX = 3,
-};
-
-struct netlbl_calipso_doiwalk_arg {
-	struct netlink_callback *nl_cb;
-	struct sk_buff *skb;
-	u32 seq;
-};
-
-enum rfkill_operation {
-	RFKILL_OP_ADD = 0,
-	RFKILL_OP_DEL = 1,
-	RFKILL_OP_CHANGE = 2,
-	RFKILL_OP_CHANGE_ALL = 3,
-};
-
-struct rfkill_event {
-	__u32 idx;
-	__u8 type;
-	__u8 op;
-	__u8 soft;
-	__u8 hard;
-};
-
-enum rfkill_user_states {
-	RFKILL_USER_STATE_SOFT_BLOCKED = 0,
-	RFKILL_USER_STATE_UNBLOCKED = 1,
-	RFKILL_USER_STATE_HARD_BLOCKED = 2,
-};
-
-struct rfkill {
-	spinlock_t lock;
-	enum rfkill_type type;
-	long unsigned int state;
-	u32 idx;
-	bool registered;
-	bool persistent;
-	bool polling_paused;
-	bool suspended;
-	const struct rfkill_ops *ops;
-	void *data;
-	struct led_trigger led_trigger;
-	const char *ledtrigname;
-	struct device___2 dev;
-	struct list_head node;
-	struct delayed_work poll_work;
-	struct work_struct uevent_work;
-	struct work_struct sync_work;
-	char name[0];
-};
-
-struct rfkill_int_event {
-	struct list_head list;
-	struct rfkill_event ev;
-};
-
-struct rfkill_data {
-	struct list_head list;
-	struct list_head events;
-	struct mutex mtx;
-	wait_queue_head_t read_wait;
-	bool input_handler;
-};
-
-enum rfkill_input_master_mode {
-	RFKILL_INPUT_MASTER_UNLOCK = 0,
-	RFKILL_INPUT_MASTER_RESTORE = 1,
-	RFKILL_INPUT_MASTER_UNBLOCKALL = 2,
-	NUM_RFKILL_INPUT_MASTER_MODES = 3,
-};
-
-enum rfkill_sched_op {
-	RFKILL_GLOBAL_OP_EPO = 0,
-	RFKILL_GLOBAL_OP_RESTORE = 1,
-	RFKILL_GLOBAL_OP_UNLOCK = 2,
-	RFKILL_GLOBAL_OP_UNBLOCK = 3,
-};
-
-enum dns_payload_content_type {
-	DNS_PAYLOAD_IS_SERVER_LIST = 0,
-};
-
-struct dns_payload_header {
-	__u8 zero;
-	__u8 content;
-	__u8 version;
-};
-
-enum {
-	dns_key_data = 0,
-	dns_key_error = 1,
-};
-
-struct sockaddr_xdp {
-	__u16 sxdp_family;
-	__u16 sxdp_flags;
-	__u32 sxdp_ifindex;
-	__u32 sxdp_queue_id;
-	__u32 sxdp_shared_umem_fd;
-};
-
-struct xdp_ring_offset {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
-	__u64 flags;
-};
-
-struct xdp_mmap_offsets {
-	struct xdp_ring_offset rx;
-	struct xdp_ring_offset tx;
-	struct xdp_ring_offset fr;
-	struct xdp_ring_offset cr;
-};
-
-struct xdp_umem_reg {
-	__u64 addr;
-	__u64 len;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 flags;
-};
-
-struct xdp_statistics {
-	__u64 rx_dropped;
-	__u64 rx_invalid_descs;
-	__u64 tx_invalid_descs;
-};
-
-struct xdp_options {
-	__u32 flags;
-};
-
-struct xdp_desc {
-	__u64 addr;
-	__u32 len;
-	__u32 options;
-};
-
-struct xdp_ring;
-
-struct xsk_queue {
-	u64 chunk_mask;
-	u64 size;
-	u32 ring_mask;
-	u32 nentries;
-	u32 prod_head;
-	u32 prod_tail;
-	u32 cons_head;
-	u32 cons_tail;
-	struct xdp_ring *ring;
-	u64 invalid_descs;
-};
-
-struct xdp_ring {
-	u32 producer;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 consumer;
-	u32 flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct xdp_rxtx_ring {
-	struct xdp_ring ptrs;
-	struct xdp_desc desc[0];
-};
-
-struct xdp_umem_ring {
-	struct xdp_ring ptrs;
-	u64 desc[0];
-};
-
-struct xdp_ring_offset_v1 {
-	__u64 producer;
-	__u64 consumer;
-	__u64 desc;
-};
-
-struct xdp_mmap_offsets_v1 {
-	struct xdp_ring_offset_v1 rx;
-	struct xdp_ring_offset_v1 tx;
-	struct xdp_ring_offset_v1 fr;
-	struct xdp_ring_offset_v1 cr;
-};
-
-struct xdp_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_show;
-	__u32 xdiag_cookie[2];
-};
-
-struct xdp_diag_msg {
-	__u8 xdiag_family;
-	__u8 xdiag_type;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_cookie[2];
-};
-
-enum {
-	XDP_DIAG_NONE = 0,
-	XDP_DIAG_INFO = 1,
-	XDP_DIAG_UID = 2,
-	XDP_DIAG_RX_RING = 3,
-	XDP_DIAG_TX_RING = 4,
-	XDP_DIAG_UMEM = 5,
-	XDP_DIAG_UMEM_FILL_RING = 6,
-	XDP_DIAG_UMEM_COMPLETION_RING = 7,
-	XDP_DIAG_MEMINFO = 8,
-	__XDP_DIAG_MAX = 9,
-};
-
-struct xdp_diag_info {
-	__u32 ifindex;
-	__u32 queue_id;
-};
-
-struct xdp_diag_ring {
-	__u32 entries;
-};
-
-struct xdp_diag_umem {
-	__u64 size;
-	__u32 id;
-	__u32 num_pages;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 ifindex;
-	__u32 queue_id;
-	__u32 flags;
-	__u32 refs;
-};
-
-struct compress_format {
-	unsigned char magic[2];
-	const char *name;
-	decompress_fn decompressor;
-};
-
-struct group_data {
-	int limit[21];
-	int base[20];
-	int permute[258];
-	int minLen;
-	int maxLen;
-};
-
-struct bunzip_data {
-	int writeCopies;
-	int writePos;
-	int writeRunCountdown;
-	int writeCount;
-	int writeCurrent;
-	long int (*fill)(void *, long unsigned int);
-	long int inbufCount;
-	long int inbufPos;
-	unsigned char *inbuf;
-	unsigned int inbufBitCount;
-	unsigned int inbufBits;
-	unsigned int crc32Table[256];
-	unsigned int headerCRC;
-	unsigned int totalCRC;
-	unsigned int writeCRC;
-	unsigned int *dbuf;
-	unsigned int dbufSize;
-	unsigned char selectors[32768];
-	struct group_data groups[6];
-	int io_error;
-	int byteCount[256];
-	unsigned char symToByte[256];
-	unsigned char mtfSymbol[256];
-};
-
-struct rc {
-	long int (*fill)(void *, long unsigned int);
-	uint8_t *ptr;
-	uint8_t *buffer;
-	uint8_t *buffer_end;
-	long int buffer_size;
-	uint32_t code;
-	uint32_t range;
-	uint32_t bound;
-	void (*error)(char *);
-};
-
-struct lzma_header {
-	uint8_t pos;
-	uint32_t dict_size;
-	uint64_t dst_size;
-} __attribute__((packed));
-
-struct writer {
-	uint8_t *buffer;
-	uint8_t previous_byte;
-	size_t buffer_pos;
-	int bufsize;
-	size_t global_pos;
-	long int (*flush)(void *, long unsigned int);
-	struct lzma_header *header;
-};
-
-struct cstate {
-	int state;
-	uint32_t rep0;
-	uint32_t rep1;
-	uint32_t rep2;
-	uint32_t rep3;
-};
-
-struct xz_dec___2;
-
-enum cpio_fields {
-	C_MAGIC = 0,
-	C_INO = 1,
-	C_MODE = 2,
-	C_UID = 3,
-	C_GID = 4,
-	C_NLINK = 5,
-	C_MTIME = 6,
-	C_FILESIZE = 7,
-	C_MAJ = 8,
-	C_MIN = 9,
-	C_RMAJ = 10,
-	C_RMIN = 11,
-	C_NAMESIZE = 12,
-	C_CHKSUM = 13,
-	C_NFIELDS = 14,
-};
-
-struct fprop_local_single {
-	long unsigned int events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-struct ida_bitmap {
-	long unsigned int bitmap[16];
-};
-
-struct klist_waiter {
-	struct list_head list;
-	struct klist_node *node;
-	struct task_struct___2 *process;
-	int woken;
-};
-
-struct uevent_sock {
-	struct list_head list;
-	struct sock *sk;
-};
-
-struct radix_tree_preload {
-	unsigned int nr;
-	struct xa_node *nodes;
-};
-
-typedef struct {
-	long unsigned int key[2];
-} hsiphash_key_t;
-
-enum format_type {
-	FORMAT_TYPE_NONE = 0,
-	FORMAT_TYPE_WIDTH = 1,
-	FORMAT_TYPE_PRECISION = 2,
-	FORMAT_TYPE_CHAR = 3,
-	FORMAT_TYPE_STR = 4,
-	FORMAT_TYPE_PTR = 5,
-	FORMAT_TYPE_PERCENT_CHAR = 6,
-	FORMAT_TYPE_INVALID = 7,
-	FORMAT_TYPE_LONG_LONG = 8,
-	FORMAT_TYPE_ULONG = 9,
-	FORMAT_TYPE_LONG = 10,
-	FORMAT_TYPE_UBYTE = 11,
-	FORMAT_TYPE_BYTE = 12,
-	FORMAT_TYPE_USHORT = 13,
-	FORMAT_TYPE_SHORT = 14,
-	FORMAT_TYPE_UINT = 15,
-	FORMAT_TYPE_INT = 16,
-	FORMAT_TYPE_SIZE_T = 17,
-	FORMAT_TYPE_PTRDIFF = 18,
-};
-
-struct printf_spec {
-	unsigned int type: 8;
-	int field_width: 24;
-	unsigned int flags: 8;
-	unsigned int base: 8;
-	int precision: 16;
-};
-
-enum {
-	st_wordstart = 0,
-	st_wordcmp = 1,
-	st_wordskip = 2,
-	st_bufcpy = 3,
-};
-
-enum {
-	st_wordstart___2 = 0,
-	st_wordcmp___2 = 1,
-	st_wordskip___2 = 2,
-};
-
-struct in6_addr___2;
-
-enum reg_type {
-	REG_TYPE_RM = 0,
-	REG_TYPE_INDEX = 1,
-	REG_TYPE_BASE = 2,
-};
-
-#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
-#pragma clang attribute pop
-#endif
-
-#endif /* __VMLINUX_H__ */
diff --git a/libbpf-tools/arm64/vmlinux_510.h b/libbpf-tools/x86/vmlinux_518.h
similarity index 65%
rename from libbpf-tools/arm64/vmlinux_510.h
rename to libbpf-tools/x86/vmlinux_518.h
index f84b134..f850853 100644
--- a/libbpf-tools/arm64/vmlinux_510.h
+++ b/libbpf-tools/x86/vmlinux_518.h
@@ -9,6 +9,8 @@
 
 typedef unsigned char __u8;
 
+typedef short int __s16;
+
 typedef short unsigned int __u16;
 
 typedef int __s32;
@@ -23,6 +25,8 @@
 
 typedef __u8 u8;
 
+typedef __s16 s16;
+
 typedef __u16 u16;
 
 typedef __s32 s32;
@@ -62,8 +66,6 @@
 
 typedef int __kernel_clockid_t;
 
-typedef __u32 __le32;
-
 typedef unsigned int __poll_t;
 
 typedef u32 __kernel_dev_t;
@@ -96,16 +98,12 @@
 
 typedef u64 blkcnt_t;
 
-typedef u64 dma_addr_t;
-
 typedef unsigned int gfp_t;
 
 typedef unsigned int fmode_t;
 
 typedef u64 phys_addr_t;
 
-typedef long unsigned int irq_hw_number_t;
-
 typedef struct {
 	int counter;
 } atomic_t;
@@ -135,37 +133,6 @@
 	void (*func)(struct callback_head *);
 };
 
-struct kernel_symbol {
-	int value_offset;
-	int name_offset;
-	int namespace_offset;
-};
-
-struct jump_entry {
-	s32 code;
-	s32 target;
-	long int key;
-};
-
-struct static_key_mod;
-
-struct static_key {
-	atomic_t enabled;
-	union {
-		long unsigned int type;
-		struct jump_entry *entries;
-		struct static_key_mod *next;
-	};
-};
-
-struct static_key_false {
-	struct static_key key;
-};
-
-typedef int (*initcall_t)();
-
-typedef int initcall_entry_t;
-
 struct lock_class_key {};
 
 struct fs_context;
@@ -194,17 +161,16 @@
 	struct lock_class_key s_writers_key[3];
 	struct lock_class_key i_lock_key;
 	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
 	struct lock_class_key i_mutex_dir_key;
 };
 
-struct obs_kernel_param {
-	const char *str;
-	int (*setup_func)(char *);
-	int early;
+struct kernel_symbol {
+	int value_offset;
+	int name_offset;
+	int namespace_offset;
 };
 
-typedef atomic64_t atomic_long_t;
-
 struct qspinlock {
 	union {
 		atomic_t val;
@@ -242,18 +208,6 @@
 
 typedef struct raw_spinlock raw_spinlock_t;
 
-struct spinlock {
-	union {
-		struct raw_spinlock rlock;
-	};
-};
-
-typedef struct spinlock spinlock_t;
-
-typedef struct {
-	arch_rwlock_t raw_lock;
-} rwlock_t;
-
 struct ratelimit_state {
 	raw_spinlock_t lock;
 	int interval;
@@ -264,6 +218,23 @@
 	long unsigned int flags;
 };
 
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long int key;
+};
+
+struct static_key_mod;
+
+struct static_key {
+	atomic_t enabled;
+	union {
+		long unsigned int type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
+	};
+};
+
 typedef void *fl_owner_t;
 
 struct file;
@@ -272,6 +243,8 @@
 
 struct iov_iter;
 
+struct io_comp_batch;
+
 struct dir_context;
 
 struct poll_table_struct;
@@ -288,6 +261,8 @@
 
 struct seq_file;
 
+struct io_uring_cmd;
+
 struct file_operations {
 	struct module *owner;
 	loff_t (*llseek)(struct file *, loff_t, int);
@@ -295,7 +270,7 @@
 	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
 	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
 	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
-	int (*iopoll)(struct kiocb *, bool);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
 	int (*iterate)(struct file *, struct dir_context *);
 	int (*iterate_shared)(struct file *, struct dir_context *);
 	__poll_t (*poll)(struct file *, struct poll_table_struct *);
@@ -321,16 +296,30 @@
 	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
 	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
 	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
 };
 
-enum system_states {
-	SYSTEM_BOOTING = 0,
-	SYSTEM_SCHEDULING = 1,
-	SYSTEM_RUNNING = 2,
-	SYSTEM_HALT = 3,
-	SYSTEM_POWER_OFF = 4,
-	SYSTEM_RESTART = 5,
-	SYSTEM_SUSPEND = 6,
+struct static_call_site {
+	s32 addr;
+	s32 key;
+};
+
+struct static_call_mod;
+
+struct static_call_key {
+	void *func;
+	union {
+		long unsigned int type;
+		struct static_call_mod *mods;
+		struct static_call_site *sites;
+	};
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	short unsigned int line;
+	short unsigned int flags;
 };
 
 typedef __s64 time64_t;
@@ -345,51 +334,6 @@
 	long int tv_nsec;
 };
 
-struct bug_entry {
-	int bug_addr_disp;
-	int file_disp;
-	short unsigned int line;
-	short unsigned int flags;
-};
-
-struct cpumask {
-	long unsigned int bits[2];
-};
-
-typedef struct cpumask cpumask_t;
-
-typedef struct cpumask cpumask_var_t[1];
-
-struct llist_node {
-	struct llist_node *next;
-};
-
-struct __call_single_node {
-	struct llist_node llist;
-	union {
-		unsigned int u_flags;
-		atomic_t a_flags;
-	};
-	u16 src;
-	u16 dst;
-};
-
-typedef void (*smp_call_func_t)(void *);
-
-struct __call_single_data {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llist;
-			unsigned int flags;
-			u16 src;
-			u16 dst;
-		};
-	};
-	smp_call_func_t func;
-	void *info;
-};
-
 enum timespec_type {
 	TT_NONE = 0,
 	TT_NATIVE = 1,
@@ -403,13 +347,10 @@
 	s32 tv_nsec;
 };
 
-struct pollfd {
-	int fd;
-	short int events;
-	short int revents;
-};
+struct pollfd;
 
 struct restart_block {
+	long unsigned int arch_data;
 	long int (*fn)(struct restart_block *);
 	union {
 		struct {
@@ -439,19 +380,11 @@
 	};
 };
 
-typedef long unsigned int mm_segment_t;
-
 struct thread_info {
 	long unsigned int flags;
-	mm_segment_t addr_limit;
-	u64 ttbr0;
-	union {
-		u64 preempt_count;
-		struct {
-			u32 count;
-			u32 need_resched;
-		} preempt;
-	};
+	long unsigned int syscall_work;
+	u32 status;
+	u32 cpu;
 };
 
 struct refcount_struct {
@@ -460,6 +393,20 @@
 
 typedef struct refcount_struct refcount_t;
 
+struct llist_node {
+	struct llist_node *next;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
+	union {
+		unsigned int u_flags;
+		atomic_t a_flags;
+	};
+	u16 src;
+	u16 dst;
+};
+
 struct load_weight {
 	long unsigned int weight;
 	u32 inv_weight;
@@ -471,36 +418,6 @@
 	struct rb_node *rb_left;
 };
 
-struct sched_statistics {
-	u64 wait_start;
-	u64 wait_max;
-	u64 wait_count;
-	u64 wait_sum;
-	u64 iowait_count;
-	u64 iowait_sum;
-	u64 sleep_start;
-	u64 sleep_max;
-	s64 sum_sleep_runtime;
-	u64 block_start;
-	u64 block_max;
-	u64 exec_max;
-	u64 slice_max;
-	u64 nr_migrations_cold;
-	u64 nr_failed_migrations_affine;
-	u64 nr_failed_migrations_running;
-	u64 nr_failed_migrations_hot;
-	u64 nr_forced_migrations;
-	u64 nr_wakeups;
-	u64 nr_wakeups_sync;
-	u64 nr_wakeups_migrate;
-	u64 nr_wakeups_local;
-	u64 nr_wakeups_remote;
-	u64 nr_wakeups_affine;
-	u64 nr_wakeups_affine_attempts;
-	u64 nr_wakeups_passive;
-	u64 nr_wakeups_idle;
-};
-
 struct util_est {
 	unsigned int enqueued;
 	unsigned int ewma;
@@ -530,7 +447,6 @@
 	u64 vruntime;
 	u64 prev_sum_exec_runtime;
 	u64 nr_migrations;
-	struct sched_statistics statistics;
 	int depth;
 	struct sched_entity *parent;
 	struct cfs_rq *cfs_rq;
@@ -539,6 +455,9 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct sched_avg avg;
 };
 
@@ -603,6 +522,47 @@
 	unsigned int user_defined: 1;
 };
 
+struct sched_statistics {
+	u64 wait_start;
+	u64 wait_max;
+	u64 wait_count;
+	u64 wait_sum;
+	u64 iowait_count;
+	u64 iowait_sum;
+	u64 sleep_start;
+	u64 sleep_max;
+	s64 sum_sleep_runtime;
+	u64 block_start;
+	u64 block_max;
+	s64 sum_block_runtime;
+	u64 exec_max;
+	u64 slice_max;
+	u64 nr_migrations_cold;
+	u64 nr_failed_migrations_affine;
+	u64 nr_failed_migrations_running;
+	u64 nr_failed_migrations_hot;
+	u64 nr_forced_migrations;
+	u64 nr_wakeups;
+	u64 nr_wakeups_sync;
+	u64 nr_wakeups_migrate;
+	u64 nr_wakeups_local;
+	u64 nr_wakeups_remote;
+	u64 nr_wakeups_affine;
+	u64 nr_wakeups_affine_attempts;
+	u64 nr_wakeups_passive;
+	u64 nr_wakeups_idle;
+	u64 core_forceidle_sum;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cpumask {
+	long unsigned int bits[128];
+};
+
+typedef struct cpumask cpumask_t;
+
 union rcu_special {
 	struct {
 		u8 blocked;
@@ -666,6 +626,11 @@
 	unsigned int expiry_active;
 };
 
+struct posix_cputimers_work {
+	struct callback_head work;
+	unsigned int scheduled;
+};
+
 struct sem_undo_list;
 
 struct sysv_sem {
@@ -697,6 +662,21 @@
 	struct seccomp_filter *filter;
 };
 
+struct syscall_user_dispatch {
+	char *selector;
+	long unsigned int offset;
+	long unsigned int len;
+	bool on_dispatch;
+};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
 struct wake_q_node {
 	struct wake_q_node *next;
 };
@@ -712,7 +692,7 @@
 };
 
 typedef struct {
-	long unsigned int bits[2];
+	long unsigned int bits[16];
 } nodemask_t;
 
 struct seqcount {
@@ -727,18 +707,28 @@
 
 typedef struct seqcount_spinlock seqcount_spinlock_t;
 
+typedef atomic64_t atomic_long_t;
+
 struct optimistic_spin_queue {
 	atomic_t tail;
 };
 
 struct mutex {
 	atomic_long_t owner;
-	spinlock_t wait_lock;
+	raw_spinlock_t wait_lock;
 	struct optimistic_spin_queue osq;
 	struct list_head wait_list;
 };
 
-struct tlbflush_unmap_batch {};
+struct arch_tlbflush_unmap_batch {
+	struct cpumask cpumask;
+};
+
+struct tlbflush_unmap_batch {
+	struct arch_tlbflush_unmap_batch arch;
+	bool flush_required;
+	bool writable;
+};
 
 struct page_frag {
 	struct page *page;
@@ -746,89 +736,187 @@
 	__u32 size;
 };
 
-struct latency_record {
-	long unsigned int backtrace[12];
-	unsigned int count;
-	long unsigned int time;
-	long unsigned int max;
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	long unsigned int expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
 };
 
-struct cpu_context {
-	long unsigned int x19;
-	long unsigned int x20;
-	long unsigned int x21;
-	long unsigned int x22;
-	long unsigned int x23;
-	long unsigned int x24;
-	long unsigned int x25;
-	long unsigned int x26;
-	long unsigned int x27;
-	long unsigned int x28;
-	long unsigned int fp;
-	long unsigned int sp;
-	long unsigned int pc;
+struct llist_head {
+	struct llist_node *first;
 };
 
-struct user_fpsimd_state {
-	__int128 unsigned vregs[32];
-	__u32 fpsr;
-	__u32 fpcr;
-	__u32 __reserved[2];
+struct desc_struct {
+	u16 limit0;
+	u16 base0;
+	u16 base1: 8;
+	u16 type: 4;
+	u16 s: 1;
+	u16 dpl: 2;
+	u16 p: 1;
+	u16 limit1: 4;
+	u16 avl: 1;
+	u16 l: 1;
+	u16 d: 1;
+	u16 g: 1;
+	u16 base2: 8;
+};
+
+struct fpu_state_perm {
+	u64 __state_perm;
+	unsigned int __state_size;
+	unsigned int __user_state_size;
+};
+
+struct fregs_state {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+	u32 status;
+};
+
+struct fxregs_state {
+	u16 cwd;
+	u16 swd;
+	u16 twd;
+	u16 fop;
+	union {
+		struct {
+			u64 rip;
+			u64 rdp;
+		};
+		struct {
+			u32 fip;
+			u32 fcs;
+			u32 foo;
+			u32 fos;
+		};
+	};
+	u32 mxcsr;
+	u32 mxcsr_mask;
+	u32 st_space[32];
+	u32 xmm_space[64];
+	u32 padding[12];
+	union {
+		u32 padding1[12];
+		u32 sw_reserved[12];
+	};
+};
+
+struct math_emu_info;
+
+struct swregs_state {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+	u8 ftop;
+	u8 changed;
+	u8 lookahead;
+	u8 no_update;
+	u8 rm;
+	u8 alimit;
+	struct math_emu_info *info;
+	u32 entry_eip;
+};
+
+struct xstate_header {
+	u64 xfeatures;
+	u64 xcomp_bv;
+	u64 reserved[6];
+};
+
+struct xregs_state {
+	struct fxregs_state i387;
+	struct xstate_header header;
+	u8 extended_state_area[0];
+};
+
+union fpregs_state {
+	struct fregs_state fsave;
+	struct fxregs_state fxsave;
+	struct swregs_state soft;
+	struct xregs_state xsave;
+	u8 __padding[4096];
+};
+
+struct fpstate {
+	unsigned int size;
+	unsigned int user_size;
+	u64 xfeatures;
+	u64 user_xfeatures;
+	u64 xfd;
+	unsigned int is_valloc: 1;
+	unsigned int is_guest: 1;
+	unsigned int is_confidential: 1;
+	unsigned int in_use: 1;
+	long: 60;
+	long: 64;
+	long: 64;
+	long: 64;
+	union fpregs_state regs;
+};
+
+struct fpu {
+	unsigned int last_cpu;
+	long unsigned int avx512_timestamp;
+	struct fpstate *fpstate;
+	struct fpstate *__task_fpstate;
+	struct fpu_state_perm perm;
+	struct fpu_state_perm guest_perm;
+	struct fpstate __fpstate;
 };
 
 struct perf_event;
 
-struct debug_info {
-	int suspended_step;
-	int bps_disabled;
-	int wps_disabled;
-	struct perf_event *hbp_break[16];
-	struct perf_event *hbp_watch[16];
-};
-
-struct ptrauth_key {
-	long unsigned int lo;
-	long unsigned int hi;
-};
-
-struct ptrauth_keys_user {
-	struct ptrauth_key apia;
-	struct ptrauth_key apib;
-	struct ptrauth_key apda;
-	struct ptrauth_key apdb;
-	struct ptrauth_key apga;
-};
-
-struct ptrauth_keys_kernel {
-	struct ptrauth_key apia;
-};
+struct io_bitmap;
 
 struct thread_struct {
-	struct cpu_context cpu_context;
+	struct desc_struct tls_array[3];
+	long unsigned int sp;
+	short unsigned int es;
+	short unsigned int ds;
+	short unsigned int fsindex;
+	short unsigned int gsindex;
+	long unsigned int fsbase;
+	long unsigned int gsbase;
+	struct perf_event *ptrace_bps[4];
+	long unsigned int virtual_dr6;
+	long unsigned int ptrace_dr7;
+	long unsigned int cr2;
+	long unsigned int trap_nr;
+	long unsigned int error_code;
+	struct io_bitmap *io_bitmap;
+	long unsigned int iopl_emul;
+	unsigned int iopl_warn: 1;
+	unsigned int sig_on_uaccess_err: 1;
+	u32 pkru;
 	long: 64;
-	struct {
-		long unsigned int tp_value;
-		long unsigned int tp2_value;
-		struct user_fpsimd_state fpsimd_state;
-	} uw;
-	unsigned int fpsimd_cpu;
-	void *sve_state;
-	unsigned int sve_vl;
-	unsigned int sve_vl_onexec;
-	long unsigned int fault_address;
-	long unsigned int fault_code;
-	struct debug_info debug;
-	struct ptrauth_keys_user keys_user;
-	struct ptrauth_keys_kernel keys_kernel;
-	u64 sctlr_tcf0;
-	u64 gcr_user_incl;
 	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct fpu fpu;
 };
 
 struct sched_class;
 
 struct task_group;
 
+struct rcu_node;
+
 struct mm_struct;
 
 struct pid;
@@ -901,16 +989,19 @@
 
 struct vm_struct;
 
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
 struct task_struct {
 	struct thread_info thread_info;
-	volatile long int state;
+	unsigned int __state;
 	void *stack;
 	refcount_t usage;
 	unsigned int flags;
 	unsigned int ptrace;
 	int on_cpu;
 	struct __call_single_node wake_entry;
-	unsigned int cpu;
 	unsigned int wakee_flips;
 	long unsigned int wakee_flip_decay_ts;
 	struct task_struct *last_wakee;
@@ -921,25 +1012,36 @@
 	int static_prio;
 	int normal_prio;
 	unsigned int rt_priority;
-	const struct sched_class *sched_class;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct sched_entity se;
 	struct sched_rt_entity rt;
-	struct task_group *sched_task_group;
 	struct sched_dl_entity dl;
+	const struct sched_class *sched_class;
+	struct rb_node core_node;
+	long unsigned int core_cookie;
+	unsigned int core_occupation;
+	struct task_group *sched_task_group;
 	struct uclamp_se uclamp_req[2];
 	struct uclamp_se uclamp[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_statistics stats;
 	struct hlist_head preempt_notifiers;
 	unsigned int btrace_seq;
 	unsigned int policy;
 	int nr_cpus_allowed;
 	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
 	cpumask_t cpus_mask;
+	void *migration_pending;
+	short unsigned int migration_disabled;
+	short unsigned int migration_flags;
+	int rcu_read_lock_nesting;
+	union rcu_special rcu_read_unlock_special;
+	struct list_head rcu_node_entry;
+	struct rcu_node *rcu_blocked_node;
 	long unsigned int rcu_tasks_nvcsw;
 	u8 rcu_tasks_holdout;
 	u8 rcu_tasks_idx;
@@ -972,11 +1074,15 @@
 	unsigned int sched_remote_wakeup: 1;
 	unsigned int in_execve: 1;
 	unsigned int in_iowait: 1;
+	unsigned int restore_sigmask: 1;
 	unsigned int in_user_fault: 1;
 	unsigned int no_cgroup_migration: 1;
 	unsigned int frozen: 1;
 	unsigned int use_memdelay: 1;
 	unsigned int in_memstall: 1;
+	unsigned int in_eventfd_signal: 1;
+	unsigned int pasid_activated: 1;
+	unsigned int reported_split_lock: 1;
 	long unsigned int atomic_flags;
 	struct restart_block restart_block;
 	pid_t pid;
@@ -996,6 +1102,7 @@
 	struct completion *vfork_done;
 	int *set_child_tid;
 	int *clear_child_tid;
+	void *worker_private;
 	u64 utime;
 	u64 stime;
 	u64 gtime;
@@ -1007,6 +1114,7 @@
 	long unsigned int min_flt;
 	long unsigned int maj_flt;
 	struct posix_cputimers posix_cputimers;
+	struct posix_cputimers_work posix_cputimers_work;
 	const struct cred *ptracer_cred;
 	const struct cred *real_cred;
 	const struct cred *cred;
@@ -1035,6 +1143,7 @@
 	kuid_t loginuid;
 	unsigned int sessionid;
 	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
 	u64 parent_exec_id;
 	u64 self_exec_id;
 	spinlock_t alloc_lock;
@@ -1063,6 +1172,8 @@
 	int cpuset_slab_spread_rotor;
 	struct css_set *cgroups;
 	struct list_head cg_list;
+	u32 closid;
+	u32 rmid;
 	struct robust_list_head *robust_list;
 	struct compat_robust_list_head *compat_robust_list;
 	struct list_head pi_state_list;
@@ -1072,6 +1183,7 @@
 	struct perf_event_context *perf_event_ctxp[2];
 	struct mutex perf_event_mutex;
 	struct list_head perf_event_list;
+	long unsigned int preempt_disable_ip;
 	struct mempolicy *mempolicy;
 	short int il_prev;
 	short int pref_node_fork;
@@ -1103,8 +1215,6 @@
 	int nr_dirtied;
 	int nr_dirtied_pause;
 	long unsigned int dirty_paused_when;
-	int latency_record_count;
-	struct latency_record latency_record[32];
 	u64 timer_slack_ns;
 	u64 default_timer_slack_ns;
 	int curr_ret_stack;
@@ -1124,825 +1234,456 @@
 	struct uprobe_task *utask;
 	unsigned int sequential_io;
 	unsigned int sequential_io_avg;
+	struct kmap_ctrl kmap_ctrl;
 	int pagefault_disabled;
 	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
 	struct vm_struct *stack_vm_area;
 	refcount_t stack_refcount;
+	int patch_state;
 	void *security;
+	struct bpf_local_storage *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	void *mce_vaddr;
+	__u64 mce_kflags;
+	u64 mce_addr;
+	__u64 mce_ripv: 1;
+	__u64 mce_whole_page: 1;
+	__u64 __mce_reserved: 62;
+	struct callback_head mce_kill_me;
+	int mce_count;
+	struct llist_head kretprobe_instances;
+	struct llist_head rethooks;
+	struct callback_head l1d_flush_kill;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct thread_struct thread;
 };
 
-typedef s32 compat_long_t;
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
 
-typedef u32 compat_uptr_t;
+struct apm_bios_info {
+	__u16 version;
+	__u16 cseg;
+	__u32 offset;
+	__u16 cseg_16;
+	__u16 dseg;
+	__u16 flags;
+	__u16 cseg_len;
+	__u16 cseg_16_len;
+	__u16 dseg_len;
+};
 
-struct user_pt_regs {
-	__u64 regs[31];
-	__u64 sp;
-	__u64 pc;
-	__u64 pstate;
+struct edd_device_params {
+	__u16 length;
+	__u16 info_flags;
+	__u32 num_default_cylinders;
+	__u32 num_default_heads;
+	__u32 sectors_per_track;
+	__u64 number_of_sectors;
+	__u16 bytes_per_sector;
+	__u32 dpte_ptr;
+	__u16 key;
+	__u8 device_path_info_length;
+	__u8 reserved2;
+	__u16 reserved3;
+	__u8 host_bus_type[4];
+	__u8 interface_type[8];
+	union {
+		struct {
+			__u16 base_address;
+			__u16 reserved1;
+			__u32 reserved2;
+		} isa;
+		struct {
+			__u8 bus;
+			__u8 slot;
+			__u8 function;
+			__u8 channel;
+			__u32 reserved;
+		} pci;
+		struct {
+			__u64 reserved;
+		} ibnd;
+		struct {
+			__u64 reserved;
+		} xprs;
+		struct {
+			__u64 reserved;
+		} htpt;
+		struct {
+			__u64 reserved;
+		} unknown;
+	} interface_path;
+	union {
+		struct {
+			__u8 device;
+			__u8 reserved1;
+			__u16 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} ata;
+		struct {
+			__u8 device;
+			__u8 lun;
+			__u8 reserved1;
+			__u8 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} atapi;
+		struct {
+			__u16 id;
+			__u64 lun;
+			__u16 reserved1;
+			__u32 reserved2;
+		} __attribute__((packed)) scsi;
+		struct {
+			__u64 serial_number;
+			__u64 reserved;
+		} usb;
+		struct {
+			__u64 eui;
+			__u64 reserved;
+		} i1394;
+		struct {
+			__u64 wwid;
+			__u64 lun;
+		} fibre;
+		struct {
+			__u64 identity_tag;
+			__u64 reserved;
+		} i2o;
+		struct {
+			__u32 array_number;
+			__u32 reserved1;
+			__u64 reserved2;
+		} raid;
+		struct {
+			__u8 device;
+			__u8 reserved1;
+			__u16 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} sata;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+		} unknown;
+	} device_path;
+	__u8 reserved4;
+	__u8 checksum;
+} __attribute__((packed));
+
+struct edd_info {
+	__u8 device;
+	__u8 version;
+	__u16 interface_support;
+	__u16 legacy_max_cylinder;
+	__u8 legacy_max_head;
+	__u8 legacy_sectors_per_track;
+	struct edd_device_params params;
+} __attribute__((packed));
+
+struct ist_info {
+	__u32 signature;
+	__u32 command;
+	__u32 event;
+	__u32 perf_level;
+};
+
+struct edid_info {
+	unsigned char dummy[128];
+};
+
+struct setup_header {
+	__u8 setup_sects;
+	__u16 root_flags;
+	__u32 syssize;
+	__u16 ram_size;
+	__u16 vid_mode;
+	__u16 root_dev;
+	__u16 boot_flag;
+	__u16 jump;
+	__u32 header;
+	__u16 version;
+	__u32 realmode_swtch;
+	__u16 start_sys_seg;
+	__u16 kernel_version;
+	__u8 type_of_loader;
+	__u8 loadflags;
+	__u16 setup_move_size;
+	__u32 code32_start;
+	__u32 ramdisk_image;
+	__u32 ramdisk_size;
+	__u32 bootsect_kludge;
+	__u16 heap_end_ptr;
+	__u8 ext_loader_ver;
+	__u8 ext_loader_type;
+	__u32 cmd_line_ptr;
+	__u32 initrd_addr_max;
+	__u32 kernel_alignment;
+	__u8 relocatable_kernel;
+	__u8 min_alignment;
+	__u16 xloadflags;
+	__u32 cmdline_size;
+	__u32 hardware_subarch;
+	__u64 hardware_subarch_data;
+	__u32 payload_offset;
+	__u32 payload_length;
+	__u64 setup_data;
+	__u64 pref_address;
+	__u32 init_size;
+	__u32 handover_offset;
+	__u32 kernel_info_offset;
+} __attribute__((packed));
+
+struct sys_desc_table {
+	__u16 length;
+	__u8 table[14];
+};
+
+struct olpc_ofw_header {
+	__u32 ofw_magic;
+	__u32 ofw_version;
+	__u32 cif_handler;
+	__u32 irq_desc_table;
+};
+
+struct efi_info {
+	__u32 efi_loader_signature;
+	__u32 efi_systab;
+	__u32 efi_memdesc_size;
+	__u32 efi_memdesc_version;
+	__u32 efi_memmap;
+	__u32 efi_memmap_size;
+	__u32 efi_systab_hi;
+	__u32 efi_memmap_hi;
+};
+
+struct boot_e820_entry {
+	__u64 addr;
+	__u64 size;
+	__u32 type;
+} __attribute__((packed));
+
+struct boot_params {
+	struct screen_info screen_info;
+	struct apm_bios_info apm_bios_info;
+	__u8 _pad2[4];
+	__u64 tboot_addr;
+	struct ist_info ist_info;
+	__u64 acpi_rsdp_addr;
+	__u8 _pad3[8];
+	__u8 hd0_info[16];
+	__u8 hd1_info[16];
+	struct sys_desc_table sys_desc_table;
+	struct olpc_ofw_header olpc_ofw_header;
+	__u32 ext_ramdisk_image;
+	__u32 ext_ramdisk_size;
+	__u32 ext_cmd_line_ptr;
+	__u8 _pad4[112];
+	__u32 cc_blob_address;
+	struct edid_info edid_info;
+	struct efi_info efi_info;
+	__u32 alt_mem_k;
+	__u32 scratch;
+	__u8 e820_entries;
+	__u8 eddbuf_entries;
+	__u8 edd_mbr_sig_buf_entries;
+	__u8 kbd_status;
+	__u8 secure_boot;
+	__u8 _pad5[2];
+	__u8 sentinel;
+	__u8 _pad6[1];
+	struct setup_header hdr;
+	__u8 _pad7[36];
+	__u32 edd_mbr_sig_buffer[16];
+	struct boot_e820_entry e820_table[128];
+	__u8 _pad8[48];
+	struct edd_info eddbuf[6];
+	__u8 _pad9[276];
+} __attribute__((packed));
+
+enum x86_hardware_subarch {
+	X86_SUBARCH_PC = 0,
+	X86_SUBARCH_LGUEST = 1,
+	X86_SUBARCH_XEN = 2,
+	X86_SUBARCH_INTEL_MID = 3,
+	X86_SUBARCH_CE4100 = 4,
+	X86_NR_SUBARCHS = 5,
 };
 
 struct pt_regs {
-	union {
-		struct user_pt_regs user_regs;
-		struct {
-			u64 regs[31];
-			u64 sp;
-			u64 pc;
-			u64 pstate;
-		};
-	};
-	u64 orig_x0;
-	s32 syscallno;
-	u32 unused2;
-	u64 orig_addr_limit;
-	u64 pmr_save;
-	u64 stackframe[2];
-	u64 lockdep_hardirqs;
-	u64 exit_rcu;
+	long unsigned int r15;
+	long unsigned int r14;
+	long unsigned int r13;
+	long unsigned int r12;
+	long unsigned int bp;
+	long unsigned int bx;
+	long unsigned int r11;
+	long unsigned int r10;
+	long unsigned int r9;
+	long unsigned int r8;
+	long unsigned int ax;
+	long unsigned int cx;
+	long unsigned int dx;
+	long unsigned int si;
+	long unsigned int di;
+	long unsigned int orig_ax;
+	long unsigned int ip;
+	long unsigned int cs;
+	long unsigned int flags;
+	long unsigned int sp;
+	long unsigned int ss;
 };
 
-struct arch_hw_breakpoint_ctrl {
-	u32 __reserved: 19;
-	u32 len: 8;
-	u32 type: 2;
-	u32 privilege: 2;
-	u32 enabled: 1;
+enum {
+	GATE_INTERRUPT = 14,
+	GATE_TRAP = 15,
+	GATE_CALL = 12,
+	GATE_TASK = 5,
 };
 
-struct arch_hw_breakpoint {
-	u64 address;
-	u64 trigger;
-	struct arch_hw_breakpoint_ctrl ctrl;
+struct idt_bits {
+	u16 ist: 3;
+	u16 zero: 5;
+	u16 type: 5;
+	u16 dpl: 2;
+	u16 p: 1;
 };
 
-typedef u64 pteval_t;
+struct idt_data {
+	unsigned int vector;
+	unsigned int segment;
+	struct idt_bits bits;
+	const void *addr;
+};
 
-typedef u64 pmdval_t;
+struct gate_struct {
+	u16 offset_low;
+	u16 segment;
+	struct idt_bits bits;
+	u16 offset_middle;
+	u32 offset_high;
+	u32 reserved;
+};
 
-typedef u64 pudval_t;
+typedef struct gate_struct gate_desc;
 
-typedef u64 pgdval_t;
+struct desc_ptr {
+	short unsigned int size;
+	long unsigned int address;
+} __attribute__((packed));
+
+typedef long unsigned int pteval_t;
+
+typedef long unsigned int pmdval_t;
+
+typedef long unsigned int pudval_t;
+
+typedef long unsigned int p4dval_t;
+
+typedef long unsigned int pgdval_t;
+
+typedef long unsigned int pgprotval_t;
 
 typedef struct {
 	pteval_t pte;
 } pte_t;
 
-typedef struct {
-	pmdval_t pmd;
-} pmd_t;
+struct pgprot {
+	pgprotval_t pgprot;
+};
 
-typedef struct {
-	pudval_t pud;
-} pud_t;
+typedef struct pgprot pgprot_t;
 
 typedef struct {
 	pgdval_t pgd;
 } pgd_t;
 
 typedef struct {
-	pteval_t pgprot;
-} pgprot_t;
-
-enum module_state {
-	MODULE_STATE_LIVE = 0,
-	MODULE_STATE_COMING = 1,
-	MODULE_STATE_GOING = 2,
-	MODULE_STATE_UNFORMED = 3,
-};
-
-struct kref {
-	refcount_t refcount;
-};
-
-struct kset;
-
-struct kobj_type;
-
-struct kernfs_node;
-
-struct kobject {
-	const char *name;
-	struct list_head entry;
-	struct kobject *parent;
-	struct kset *kset;
-	struct kobj_type *ktype;
-	struct kernfs_node *sd;
-	struct kref kref;
-	unsigned int state_initialized: 1;
-	unsigned int state_in_sysfs: 1;
-	unsigned int state_add_uevent_sent: 1;
-	unsigned int state_remove_uevent_sent: 1;
-	unsigned int uevent_suppress: 1;
-};
-
-struct module_param_attrs;
-
-struct module_kobject {
-	struct kobject kobj;
-	struct module *mod;
-	struct kobject *drivers_dir;
-	struct module_param_attrs *mp;
-	struct completion *kobj_completion;
-};
-
-struct latch_tree_node {
-	struct rb_node node[2];
-};
-
-struct mod_tree_node {
-	struct module *mod;
-	struct latch_tree_node node;
-};
-
-struct module_layout {
-	void *base;
-	unsigned int size;
-	unsigned int text_size;
-	unsigned int ro_size;
-	unsigned int ro_after_init_size;
-	struct mod_tree_node mtn;
-};
-
-struct mod_plt_sec {
-	int plt_shndx;
-	int plt_num_entries;
-	int plt_max_entries;
-};
-
-struct plt_entry;
-
-struct mod_arch_specific {
-	struct mod_plt_sec core;
-	struct mod_plt_sec init;
-	struct plt_entry *ftrace_trampolines;
-};
-
-struct elf64_sym;
-
-typedef struct elf64_sym Elf64_Sym;
-
-struct mod_kallsyms {
-	Elf64_Sym *symtab;
-	unsigned int num_symtab;
-	char *strtab;
-	char *typetab;
-};
-
-typedef const int tracepoint_ptr_t;
-
-struct module_attribute;
-
-struct kernel_param;
-
-struct exception_table_entry;
-
-struct module_sect_attrs;
-
-struct module_notes_attrs;
-
-struct srcu_struct;
-
-struct bpf_raw_event_map;
-
-struct trace_event_call;
-
-struct trace_eval_map;
-
-struct error_injection_entry;
-
-struct module {
-	enum module_state state;
-	struct list_head list;
-	char name[56];
-	struct module_kobject mkobj;
-	struct module_attribute *modinfo_attrs;
-	const char *version;
-	const char *srcversion;
-	struct kobject *holders_dir;
-	const struct kernel_symbol *syms;
-	const s32 *crcs;
-	unsigned int num_syms;
-	struct mutex param_lock;
-	struct kernel_param *kp;
-	unsigned int num_kp;
-	unsigned int num_gpl_syms;
-	const struct kernel_symbol *gpl_syms;
-	const s32 *gpl_crcs;
-	bool using_gplonly_symbols;
-	const struct kernel_symbol *unused_syms;
-	const s32 *unused_crcs;
-	unsigned int num_unused_syms;
-	unsigned int num_unused_gpl_syms;
-	const struct kernel_symbol *unused_gpl_syms;
-	const s32 *unused_gpl_crcs;
-	bool sig_ok;
-	bool async_probe_requested;
-	const struct kernel_symbol *gpl_future_syms;
-	const s32 *gpl_future_crcs;
-	unsigned int num_gpl_future_syms;
-	unsigned int num_exentries;
-	struct exception_table_entry *extable;
-	int (*init)();
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct module_layout core_layout;
-	struct module_layout init_layout;
-	struct mod_arch_specific arch;
-	long unsigned int taints;
-	unsigned int num_bugs;
-	struct list_head bug_list;
-	struct bug_entry *bug_table;
-	struct mod_kallsyms *kallsyms;
-	struct mod_kallsyms core_kallsyms;
-	struct module_sect_attrs *sect_attrs;
-	struct module_notes_attrs *notes_attrs;
-	char *args;
-	void *percpu;
-	unsigned int percpu_size;
-	void *noinstr_text_start;
-	unsigned int noinstr_text_size;
-	unsigned int num_tracepoints;
-	tracepoint_ptr_t *tracepoints_ptrs;
-	unsigned int num_srcu_structs;
-	struct srcu_struct **srcu_struct_ptrs;
-	unsigned int num_bpf_raw_events;
-	struct bpf_raw_event_map *bpf_raw_events;
-	struct jump_entry *jump_entries;
-	unsigned int num_jump_entries;
-	unsigned int num_trace_bprintk_fmt;
-	const char **trace_bprintk_fmt_start;
-	struct trace_event_call **trace_events;
-	unsigned int num_trace_events;
-	struct trace_eval_map **trace_evals;
-	unsigned int num_trace_evals;
-	unsigned int num_ftrace_callsites;
-	long unsigned int *ftrace_callsites;
-	void *kprobes_text_start;
-	unsigned int kprobes_text_size;
-	long unsigned int *kprobe_blacklist;
-	unsigned int num_kprobe_blacklist;
-	struct list_head source_list;
-	struct list_head target_list;
-	void (*exit)();
-	atomic_t refcnt;
-	struct error_injection_entry *ei_funcs;
-	unsigned int num_ei_funcs;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum perf_event_state {
-	PERF_EVENT_STATE_DEAD = 4294967292,
-	PERF_EVENT_STATE_EXIT = 4294967293,
-	PERF_EVENT_STATE_ERROR = 4294967294,
-	PERF_EVENT_STATE_OFF = 4294967295,
-	PERF_EVENT_STATE_INACTIVE = 0,
-	PERF_EVENT_STATE_ACTIVE = 1,
-};
+	p4dval_t p4d;
+} p4d_t;
 
 typedef struct {
-	atomic_long_t a;
-} local_t;
+	pudval_t pud;
+} pud_t;
 
 typedef struct {
-	local_t a;
-} local64_t;
-
-struct perf_event_attr {
-	__u32 type;
-	__u32 size;
-	__u64 config;
-	union {
-		__u64 sample_period;
-		__u64 sample_freq;
-	};
-	__u64 sample_type;
-	__u64 read_format;
-	__u64 disabled: 1;
-	__u64 inherit: 1;
-	__u64 pinned: 1;
-	__u64 exclusive: 1;
-	__u64 exclude_user: 1;
-	__u64 exclude_kernel: 1;
-	__u64 exclude_hv: 1;
-	__u64 exclude_idle: 1;
-	__u64 mmap: 1;
-	__u64 comm: 1;
-	__u64 freq: 1;
-	__u64 inherit_stat: 1;
-	__u64 enable_on_exec: 1;
-	__u64 task: 1;
-	__u64 watermark: 1;
-	__u64 precise_ip: 2;
-	__u64 mmap_data: 1;
-	__u64 sample_id_all: 1;
-	__u64 exclude_host: 1;
-	__u64 exclude_guest: 1;
-	__u64 exclude_callchain_kernel: 1;
-	__u64 exclude_callchain_user: 1;
-	__u64 mmap2: 1;
-	__u64 comm_exec: 1;
-	__u64 use_clockid: 1;
-	__u64 context_switch: 1;
-	__u64 write_backward: 1;
-	__u64 namespaces: 1;
-	__u64 ksymbol: 1;
-	__u64 bpf_event: 1;
-	__u64 aux_output: 1;
-	__u64 cgroup: 1;
-	__u64 text_poke: 1;
-	__u64 __reserved_1: 30;
-	union {
-		__u32 wakeup_events;
-		__u32 wakeup_watermark;
-	};
-	__u32 bp_type;
-	union {
-		__u64 bp_addr;
-		__u64 kprobe_func;
-		__u64 uprobe_path;
-		__u64 config1;
-	};
-	union {
-		__u64 bp_len;
-		__u64 kprobe_addr;
-		__u64 probe_offset;
-		__u64 config2;
-	};
-	__u64 branch_sample_type;
-	__u64 sample_regs_user;
-	__u32 sample_stack_user;
-	__s32 clockid;
-	__u64 sample_regs_intr;
-	__u32 aux_watermark;
-	__u16 sample_max_stack;
-	__u16 __reserved_2;
-	__u32 aux_sample_size;
-	__u32 __reserved_3;
-};
-
-struct hw_perf_event_extra {
-	u64 config;
-	unsigned int reg;
-	int alloc;
-	int idx;
-};
-
-struct hw_perf_event {
-	union {
-		struct {
-			u64 config;
-			u64 last_tag;
-			long unsigned int config_base;
-			long unsigned int event_base;
-			int event_base_rdpmc;
-			int idx;
-			int last_cpu;
-			int flags;
-			struct hw_perf_event_extra extra_reg;
-			struct hw_perf_event_extra branch_reg;
-		};
-		struct {
-			struct hrtimer hrtimer;
-		};
-		struct {
-			struct list_head tp_list;
-		};
-		struct {
-			u64 pwr_acc;
-			u64 ptsc;
-		};
-		struct {
-			struct arch_hw_breakpoint info;
-			struct list_head bp_list;
-		};
-		struct {
-			u8 iommu_bank;
-			u8 iommu_cntr;
-			u16 padding;
-			u64 conf;
-			u64 conf1;
-		};
-	};
-	struct task_struct *target;
-	void *addr_filters;
-	long unsigned int addr_filters_gen;
-	int state;
-	local64_t prev_count;
-	u64 sample_period;
-	union {
-		struct {
-			u64 last_period;
-			local64_t period_left;
-		};
-		struct {
-			u64 saved_metric;
-			u64 saved_slots;
-		};
-	};
-	u64 interrupts_seq;
-	u64 interrupts;
-	u64 freq_time_stamp;
-	u64 freq_count_stamp;
-};
-
-struct wait_queue_head {
-	spinlock_t lock;
-	struct list_head head;
-};
-
-typedef struct wait_queue_head wait_queue_head_t;
-
-struct irq_work {
-	union {
-		struct __call_single_node node;
-		struct {
-			struct llist_node llnode;
-			atomic_t flags;
-		};
-	};
-	void (*func)(struct irq_work *);
-};
-
-struct perf_addr_filters_head {
-	struct list_head list;
-	raw_spinlock_t lock;
-	unsigned int nr_file_filters;
-};
-
-struct perf_sample_data;
-
-typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
-
-struct ftrace_ops;
-
-typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct pt_regs *);
-
-struct ftrace_hash;
-
-struct ftrace_ops_hash {
-	struct ftrace_hash *notrace_hash;
-	struct ftrace_hash *filter_hash;
-	struct mutex regex_lock;
-};
-
-struct ftrace_ops {
-	ftrace_func_t func;
-	struct ftrace_ops *next;
-	long unsigned int flags;
-	void *private;
-	ftrace_func_t saved_func;
-	struct ftrace_ops_hash local_hash;
-	struct ftrace_ops_hash *func_hash;
-	struct ftrace_ops_hash old_hash;
-	long unsigned int trampoline;
-	long unsigned int trampoline_size;
-	struct list_head list;
-};
-
-struct pmu;
-
-struct perf_buffer;
-
-struct fasync_struct;
-
-struct perf_addr_filter_range;
-
-struct pid_namespace;
-
-struct bpf_prog;
-
-struct event_filter;
-
-struct perf_cgroup;
-
-struct perf_event {
-	struct list_head event_entry;
-	struct list_head sibling_list;
-	struct list_head active_list;
-	struct rb_node group_node;
-	u64 group_index;
-	struct list_head migrate_entry;
-	struct hlist_node hlist_entry;
-	struct list_head active_entry;
-	int nr_siblings;
-	int event_caps;
-	int group_caps;
-	struct perf_event *group_leader;
-	struct pmu *pmu;
-	void *pmu_private;
-	enum perf_event_state state;
-	unsigned int attach_state;
-	local64_t count;
-	atomic64_t child_count;
-	u64 total_time_enabled;
-	u64 total_time_running;
-	u64 tstamp;
-	u64 shadow_ctx_time;
-	struct perf_event_attr attr;
-	u16 header_size;
-	u16 id_header_size;
-	u16 read_size;
-	struct hw_perf_event hw;
-	struct perf_event_context *ctx;
-	atomic_long_t refcount;
-	atomic64_t child_total_time_enabled;
-	atomic64_t child_total_time_running;
-	struct mutex child_mutex;
-	struct list_head child_list;
-	struct perf_event *parent;
-	int oncpu;
-	int cpu;
-	struct list_head owner_entry;
-	struct task_struct *owner;
-	struct mutex mmap_mutex;
-	atomic_t mmap_count;
-	struct perf_buffer *rb;
-	struct list_head rb_entry;
-	long unsigned int rcu_batches;
-	int rcu_pending;
-	wait_queue_head_t waitq;
-	struct fasync_struct *fasync;
-	int pending_wakeup;
-	int pending_kill;
-	int pending_disable;
-	struct irq_work pending;
-	atomic_t event_limit;
-	struct perf_addr_filters_head addr_filters;
-	struct perf_addr_filter_range *addr_filter_ranges;
-	long unsigned int addr_filters_gen;
-	struct perf_event *aux_event;
-	void (*destroy)(struct perf_event *);
-	struct callback_head callback_head;
-	struct pid_namespace *ns;
-	u64 id;
-	u64 (*clock)();
-	perf_overflow_handler_t overflow_handler;
-	void *overflow_handler_context;
-	perf_overflow_handler_t orig_overflow_handler;
-	struct bpf_prog *prog;
-	struct trace_event_call *tp_event;
-	struct event_filter *filter;
-	struct ftrace_ops ftrace_ops;
-	struct perf_cgroup *cgrp;
-	void *security;
-	struct list_head sb_list;
-};
-
-struct wait_queue_entry;
-
-typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
-
-struct wait_queue_entry {
-	unsigned int flags;
-	void *private;
-	wait_queue_func_t func;
-	struct list_head entry;
-};
-
-typedef struct wait_queue_entry wait_queue_entry_t;
-
-enum pid_type {
-	PIDTYPE_PID = 0,
-	PIDTYPE_TGID = 1,
-	PIDTYPE_PGID = 2,
-	PIDTYPE_SID = 3,
-	PIDTYPE_MAX = 4,
-};
-
-struct upid {
-	int nr;
-	struct pid_namespace *ns;
-};
-
-struct xarray {
-	spinlock_t xa_lock;
-	gfp_t xa_flags;
-	void *xa_head;
-};
-
-struct idr {
-	struct xarray idr_rt;
-	unsigned int idr_base;
-	unsigned int idr_next;
-};
-
-struct proc_ns_operations;
-
-struct ns_common {
-	atomic_long_t stashed;
-	const struct proc_ns_operations *ops;
-	unsigned int inum;
-};
-
-struct kmem_cache;
-
-struct fs_pin;
-
-struct user_namespace;
-
-struct ucounts;
-
-struct pid_namespace {
-	struct kref kref;
-	struct idr idr;
-	struct callback_head rcu;
-	unsigned int pid_allocated;
-	struct task_struct *child_reaper;
-	struct kmem_cache *pid_cachep;
-	unsigned int level;
-	struct pid_namespace *parent;
-	struct fs_pin *bacct;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	int reboot;
-	struct ns_common ns;
-};
-
-struct pid {
-	refcount_t count;
-	unsigned int level;
-	spinlock_t lock;
-	struct hlist_head tasks[4];
-	struct hlist_head inodes;
-	wait_queue_head_t wait_pidfd;
-	struct callback_head rcu;
-	struct upid numbers[1];
-};
-
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map {
-	u32 nr_extents;
-	union {
-		struct uid_gid_extent extent[5];
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
-
-typedef struct {
-	gid_t val;
-} kgid_t;
-
-struct rw_semaphore {
-	atomic_long_t count;
-	atomic_long_t owner;
-	struct optimistic_spin_queue osq;
-	raw_spinlock_t wait_lock;
-	struct list_head wait_list;
-};
-
-struct work_struct;
-
-typedef void (*work_func_t)(struct work_struct *);
-
-struct work_struct {
-	atomic_long_t data;
-	struct list_head entry;
-	work_func_t func;
-};
-
-struct ctl_table;
-
-struct ctl_table_root;
-
-struct ctl_table_set;
-
-struct ctl_dir;
-
-struct ctl_node;
-
-struct ctl_table_header {
-	union {
-		struct {
-			struct ctl_table *ctl_table;
-			int used;
-			int count;
-			int nreg;
-		};
-		struct callback_head rcu;
-	};
-	struct completion *unregistering;
-	struct ctl_table *ctl_table_arg;
-	struct ctl_table_root *root;
-	struct ctl_table_set *set;
-	struct ctl_dir *parent;
-	struct ctl_node *node;
-	struct hlist_head inodes;
-};
-
-struct ctl_dir {
-	struct ctl_table_header header;
-	struct rb_root root;
-};
-
-struct ctl_table_set {
-	int (*is_seen)(struct ctl_table_set *);
-	struct ctl_dir dir;
-};
-
-struct user_namespace {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	struct uid_gid_map projid_map;
-	atomic_t count;
-	struct user_namespace *parent;
-	int level;
-	kuid_t owner;
-	kgid_t group;
-	struct ns_common ns;
-	long unsigned int flags;
-	struct list_head keyring_name_list;
-	struct key *user_keyring_register;
-	struct rw_semaphore keyring_sem;
-	struct key *persistent_keyring_register;
-	struct work_struct work;
-	struct ctl_table_set set;
-	struct ctl_table_header *sysctls;
-	struct ucounts *ucounts;
-	int ucount_max[10];
-};
-
-struct timer_list {
-	struct hlist_node entry;
-	long unsigned int expires;
-	void (*function)(struct timer_list *);
-	u32 flags;
-};
-
-struct workqueue_struct;
-
-struct delayed_work {
-	struct work_struct work;
-	struct timer_list timer;
-	struct workqueue_struct *wq;
-	int cpu;
-};
-
-struct rcu_work {
-	struct work_struct work;
-	struct callback_head rcu;
-	struct workqueue_struct *wq;
-};
+	pmdval_t pmd;
+} pmd_t;
 
 typedef struct page *pgtable_t;
 
 struct address_space;
 
-struct dev_pagemap;
+struct page_pool;
 
-struct obj_cgroup;
+struct dev_pagemap;
 
 struct page {
 	long unsigned int flags;
 	union {
 		struct {
-			struct list_head lru;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
 			struct address_space *mapping;
 			long unsigned int index;
 			long unsigned int private;
 		};
 		struct {
-			dma_addr_t dma_addr;
-		};
-		struct {
+			long unsigned int pp_magic;
+			struct page_pool *pp;
+			long unsigned int _pp_mapping_pad;
+			long unsigned int dma_addr;
 			union {
-				struct list_head slab_list;
-				struct {
-					struct page *next;
-					int pages;
-					int pobjects;
-				};
-			};
-			struct kmem_cache *slab_cache;
-			void *freelist;
-			union {
-				void *s_mem;
-				long unsigned int counters;
-				struct {
-					unsigned int inuse: 16;
-					unsigned int objects: 15;
-					unsigned int frozen: 1;
-				};
+				long unsigned int dma_addr_upper;
+				atomic_long_t pp_frag_count;
 			};
 		};
 		struct {
@@ -1950,11 +1691,12 @@
 			unsigned char compound_dtor;
 			unsigned char compound_order;
 			atomic_t compound_mapcount;
+			atomic_t compound_pincount;
 			unsigned int compound_nr;
 		};
 		struct {
 			long unsigned int _compound_pad_1;
-			atomic_t hpage_pinned_refcount;
+			long unsigned int _compound_pad_2;
 			struct list_head deferred_list;
 		};
 		struct {
@@ -1976,14 +1718,391 @@
 	union {
 		atomic_t _mapcount;
 		unsigned int page_type;
-		unsigned int active;
-		int units;
 	};
 	atomic_t _refcount;
-	union {
-		struct mem_cgroup *mem_cgroup;
-		struct obj_cgroup **obj_cgroups;
+	long unsigned int memcg_data;
+};
+
+struct paravirt_callee_save {
+	void *func;
+};
+
+struct pv_lazy_ops {
+	void (*enter)();
+	void (*leave)();
+	void (*flush)();
+};
+
+struct pv_cpu_ops {
+	void (*io_delay)();
+	long unsigned int (*get_debugreg)(int);
+	void (*set_debugreg)(int, long unsigned int);
+	long unsigned int (*read_cr0)();
+	void (*write_cr0)(long unsigned int);
+	void (*write_cr4)(long unsigned int);
+	void (*load_tr_desc)();
+	void (*load_gdt)(const struct desc_ptr *);
+	void (*load_idt)(const struct desc_ptr *);
+	void (*set_ldt)(const void *, unsigned int);
+	long unsigned int (*store_tr)();
+	void (*load_tls)(struct thread_struct *, unsigned int);
+	void (*load_gs_index)(unsigned int);
+	void (*write_ldt_entry)(struct desc_struct *, int, const void *);
+	void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
+	void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
+	void (*alloc_ldt)(struct desc_struct *, unsigned int);
+	void (*free_ldt)(struct desc_struct *, unsigned int);
+	void (*load_sp0)(long unsigned int);
+	void (*invalidate_io_bitmap)();
+	void (*update_io_bitmap)();
+	void (*wbinvd)();
+	void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
+	u64 (*read_msr)(unsigned int);
+	void (*write_msr)(unsigned int, unsigned int, unsigned int);
+	u64 (*read_msr_safe)(unsigned int, int *);
+	int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
+	u64 (*read_pmc)(int);
+	void (*start_context_switch)(struct task_struct *);
+	void (*end_context_switch)(struct task_struct *);
+};
+
+struct pv_irq_ops {
+	struct paravirt_callee_save save_fl;
+	struct paravirt_callee_save irq_disable;
+	struct paravirt_callee_save irq_enable;
+	void (*safe_halt)();
+	void (*halt)();
+};
+
+struct flush_tlb_info;
+
+struct mmu_gather;
+
+struct pv_mmu_ops {
+	void (*flush_tlb_user)();
+	void (*flush_tlb_kernel)();
+	void (*flush_tlb_one_user)(long unsigned int);
+	void (*flush_tlb_multi)(const struct cpumask *, const struct flush_tlb_info *);
+	void (*tlb_remove_table)(struct mmu_gather *, void *);
+	void (*exit_mmap)(struct mm_struct *);
+	void (*notify_page_enc_status_changed)(long unsigned int, int, bool);
+	struct paravirt_callee_save read_cr2;
+	void (*write_cr2)(long unsigned int);
+	long unsigned int (*read_cr3)();
+	void (*write_cr3)(long unsigned int);
+	void (*activate_mm)(struct mm_struct *, struct mm_struct *);
+	void (*dup_mmap)(struct mm_struct *, struct mm_struct *);
+	int (*pgd_alloc)(struct mm_struct *);
+	void (*pgd_free)(struct mm_struct *, pgd_t *);
+	void (*alloc_pte)(struct mm_struct *, long unsigned int);
+	void (*alloc_pmd)(struct mm_struct *, long unsigned int);
+	void (*alloc_pud)(struct mm_struct *, long unsigned int);
+	void (*alloc_p4d)(struct mm_struct *, long unsigned int);
+	void (*release_pte)(long unsigned int);
+	void (*release_pmd)(long unsigned int);
+	void (*release_pud)(long unsigned int);
+	void (*release_p4d)(long unsigned int);
+	void (*set_pte)(pte_t *, pte_t);
+	void (*set_pmd)(pmd_t *, pmd_t);
+	pte_t (*ptep_modify_prot_start)(struct vm_area_struct *, long unsigned int, pte_t *);
+	void (*ptep_modify_prot_commit)(struct vm_area_struct *, long unsigned int, pte_t *, pte_t);
+	struct paravirt_callee_save pte_val;
+	struct paravirt_callee_save make_pte;
+	struct paravirt_callee_save pgd_val;
+	struct paravirt_callee_save make_pgd;
+	void (*set_pud)(pud_t *, pud_t);
+	struct paravirt_callee_save pmd_val;
+	struct paravirt_callee_save make_pmd;
+	struct paravirt_callee_save pud_val;
+	struct paravirt_callee_save make_pud;
+	void (*set_p4d)(p4d_t *, p4d_t);
+	struct paravirt_callee_save p4d_val;
+	struct paravirt_callee_save make_p4d;
+	void (*set_pgd)(pgd_t *, pgd_t);
+	struct pv_lazy_ops lazy_mode;
+	void (*set_fixmap)(unsigned int, phys_addr_t, pgprot_t);
+};
+
+struct flush_tlb_info {
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	u64 new_tlb_gen;
+	unsigned int initiating_cpu;
+	u8 stride_shift;
+	u8 freed_tables;
+};
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+};
+
+struct mm_rss_stat {
+	atomic_long_t count[4];
+};
+
+struct ldt_struct;
+
+struct vdso_image;
+
+typedef struct {
+	u64 ctx_id;
+	atomic64_t tlb_gen;
+	struct rw_semaphore ldt_usr_sem;
+	struct ldt_struct *ldt;
+	short unsigned int flags;
+	struct mutex lock;
+	void *vdso;
+	const struct vdso_image *vdso_image;
+	atomic_t perf_rdpmc_allowed;
+	u16 pkey_allocation_map;
+	s16 execute_only_pkey;
+} mm_context_t;
+
+struct xol_area;
+
+struct uprobes_state {
+	struct xol_area *xol_area;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
+};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct user_namespace;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct vm_area_struct *mmap;
+		struct rb_root mm_rb;
+		u64 vmacache_seqnum;
+		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+		long unsigned int mmap_base;
+		long unsigned int mmap_legacy_base;
+		long unsigned int mmap_compat_base;
+		long unsigned int mmap_compat_legacy_base;
+		long unsigned int task_size;
+		long unsigned int highest_vm_end;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_t mm_count;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		long unsigned int hiwater_rss;
+		long unsigned int hiwater_vm;
+		long unsigned int total_vm;
+		long unsigned int locked_vm;
+		atomic64_t pinned_vm;
+		long unsigned int data_vm;
+		long unsigned int exec_vm;
+		long unsigned int stack_vm;
+		long unsigned int def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		long unsigned int start_code;
+		long unsigned int end_code;
+		long unsigned int start_data;
+		long unsigned int end_data;
+		long unsigned int start_brk;
+		long unsigned int brk;
+		long unsigned int start_stack;
+		long unsigned int arg_start;
+		long unsigned int arg_end;
+		long unsigned int env_start;
+		long unsigned int env_end;
+		long unsigned int saved_auxv[48];
+		struct mm_rss_stat rss_stat;
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		long unsigned int flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table *ioctx_table;
+		struct task_struct *owner;
+		struct user_namespace *user_ns;
+		struct file *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		long unsigned int numa_next_scan;
+		long unsigned int numa_scan_offset;
+		int numa_scan_seq;
+		atomic_t tlb_flush_pending;
+		atomic_t tlb_flush_batched;
+		struct uprobes_state uprobes_state;
+		atomic_long_t hugetlb_usage;
+		struct work_struct async_put_work;
+		u32 pasid;
+		long unsigned int ksm_merging_pages;
 	};
+	long unsigned int cpu_bitmap[0];
+};
+
+struct userfaultfd_ctx;
+
+struct vm_userfaultfd_ctx {
+	struct userfaultfd_ctx *ctx;
+};
+
+struct anon_vma_name;
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct vm_area_struct {
+	long unsigned int vm_start;
+	long unsigned int vm_end;
+	struct vm_area_struct *vm_next;
+	struct vm_area_struct *vm_prev;
+	struct rb_node vm_rb;
+	long unsigned int rb_subtree_gap;
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	long unsigned int vm_flags;
+	union {
+		struct {
+			struct rb_node rb;
+			long unsigned int rb_subtree_last;
+		} shared;
+		struct anon_vma_name *anon_name;
+	};
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	long unsigned int vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	atomic_long_t swap_readahead_info;
+	struct mempolicy *vm_policy;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+};
+
+struct pv_lock_ops {
+	void (*queued_spin_lock_slowpath)(struct qspinlock *, u32);
+	struct paravirt_callee_save queued_spin_unlock;
+	void (*wait)(u8 *, u8);
+	void (*kick)(int);
+	struct paravirt_callee_save vcpu_is_preempted;
+};
+
+struct paravirt_patch_template {
+	struct pv_cpu_ops cpu;
+	struct pv_irq_ops irq;
+	struct pv_mmu_ops mmu;
+	struct pv_lock_ops lock;
+};
+
+struct math_emu_info {
+	long int ___orig_eip;
+	struct pt_regs *regs;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func *funcs;
+};
+
+typedef const int tracepoint_ptr_t;
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
+};
+
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
+};
+
+enum tlb_infos {
+	ENTRIES = 0,
+	NR_INFO = 1,
+};
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+typedef struct {
+	arch_rwlock_t raw_lock;
+} rwlock_t;
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	long unsigned int size;
+	long unsigned int flags;
+	struct page **pages;
+	unsigned int page_order;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+};
+
+struct wait_queue_head {
+	spinlock_t lock;
+	struct list_head head;
+};
+
+typedef struct wait_queue_head wait_queue_head_t;
+
+struct kobject;
+
+struct attribute;
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
 };
 
 struct seqcount_raw_spinlock {
@@ -1997,6 +2116,536 @@
 	spinlock_t lock;
 } seqlock_t;
 
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
+};
+
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
+struct kref {
+	refcount_t refcount;
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
+};
+
+struct workqueue_struct;
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	long unsigned int gp_seq[4];
+	long int len;
+	long int seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_struct;
+
+struct srcu_data {
+	long unsigned int srcu_lock_count[2];
+	long unsigned int srcu_unlock_count[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	long unsigned int grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	long unsigned int srcu_have_cbs[4];
+	long unsigned int srcu_data_have_cbs[4];
+	long unsigned int srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_struct {
+	struct srcu_node *node;
+	struct srcu_node *level[4];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned int srcu_idx;
+	long unsigned int srcu_gp_seq;
+	long unsigned int srcu_gp_seq_needed;
+	long unsigned int srcu_gp_seq_needed_exp;
+	long unsigned int srcu_gp_start;
+	long unsigned int srcu_last_gp_end;
+	long unsigned int srcu_size_jiffies;
+	long unsigned int srcu_n_lock_retries;
+	long unsigned int srcu_n_exp_nodelay;
+	struct srcu_data *sda;
+	bool sda_is_static;
+	long unsigned int srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	long unsigned int reschedule_jiffies;
+	long unsigned int reschedule_count;
+	struct delayed_work work;
+	struct lockdep_map dep_map;
+};
+
+struct arch_uprobe_task {
+	long unsigned int saved_scratch_register;
+	unsigned int saved_trap_nr;
+	unsigned int saved_tf;
+};
+
+enum uprobe_task_state {
+	UTASK_RUNNING = 0,
+	UTASK_SSTEP = 1,
+	UTASK_SSTEP_ACK = 2,
+	UTASK_SSTEP_TRAPPED = 3,
+};
+
+struct uprobe;
+
+struct return_instance;
+
+struct uprobe_task {
+	enum uprobe_task_state state;
+	union {
+		struct {
+			struct arch_uprobe_task autask;
+			long unsigned int vaddr;
+		};
+		struct {
+			struct callback_head dup_xol_work;
+			long unsigned int dup_xol_addr;
+		};
+	};
+	struct uprobe *active_uprobe;
+	long unsigned int xol_vaddr;
+	struct return_instance *return_instances;
+	unsigned int depth;
+};
+
+struct return_instance {
+	struct uprobe *uprobe;
+	long unsigned int func;
+	long unsigned int stack;
+	long unsigned int orig_ret_vaddr;
+	bool chained;
+	struct return_instance *next;
+};
+
+struct vdso_image {
+	void *data;
+	long unsigned int size;
+	long unsigned int alt;
+	long unsigned int alt_len;
+	long unsigned int extable_base;
+	long unsigned int extable_len;
+	const void *extable;
+	long int sym_vvar_start;
+	long int sym_vvar_page;
+	long int sym_pvclock_page;
+	long int sym_hvclock_page;
+	long int sym_timens_page;
+	long int sym_VDSO32_NOTE_MASK;
+	long int sym___kernel_sigreturn;
+	long int sym___kernel_rt_sigreturn;
+	long int sym___kernel_vsyscall;
+	long int sym_int80_landing_pad;
+	long int sym_vdso32_sigreturn_landing_pad;
+	long int sym_vdso32_rt_sigreturn_landing_pad;
+};
+
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void *xa_head;
+};
+
+typedef u32 errseq_t;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	struct rw_semaphore i_mmap_rwsem;
+	long unsigned int nrpages;
+	long unsigned int writeback_index;
+	const struct address_space_operations *a_ops;
+	long unsigned int flags;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
+struct folio {
+	union {
+		struct {
+			long unsigned int flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			long unsigned int index;
+			void *private;
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			long unsigned int memcg_data;
+		};
+		struct page page;
+	};
+};
+
+struct vfsmount;
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+enum pid_type {
+	PIDTYPE_PID = 0,
+	PIDTYPE_TGID = 1,
+	PIDTYPE_PGID = 2,
+	PIDTYPE_SID = 3,
+	PIDTYPE_MAX = 4,
+};
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	long unsigned int start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct file {
+	union {
+		struct llist_node fu_llist;
+		struct callback_head fu_rcuhead;
+	} f_u;
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	spinlock_t f_lock;
+	atomic_long_t f_count;
+	unsigned int f_flags;
+	fmode_t f_mode;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	u64 f_version;
+	void *f_security;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+typedef unsigned int vm_fault_t;
+
+enum page_entry_size {
+	PE_SIZE_PTE = 0,
+	PE_SIZE_PMD = 1,
+	PE_SIZE_PUD = 2,
+};
+
+struct vm_fault;
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, long unsigned int);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
+	vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
+	long unsigned int (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
+	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
+	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
+};
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+};
+
+struct vm_fault {
+	const struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		long unsigned int pgoff;
+		long unsigned int address;
+		long unsigned int real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_PCPTYPES = 3,
+	MIGRATE_HIGHATOMIC = 3,
+	MIGRATE_ISOLATE = 4,
+	MIGRATE_TYPES = 5,
+};
+
+enum numa_stat_item {
+	NUMA_HIT = 0,
+	NUMA_MISS = 1,
+	NUMA_FOREIGN = 2,
+	NUMA_INTERLEAVE_HIT = 3,
+	NUMA_LOCAL = 4,
+	NUMA_OTHER = 5,
+	NR_VM_NUMA_EVENT_ITEMS = 6,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
+};
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SWAPCACHE = 39,
+	PGPROMOTE_SUCCESS = 40,
+	NR_VM_NODE_STAT_ITEMS = 41,
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+typedef unsigned int isolate_mode_t;
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	ZONELIST_NOFALLBACK = 1,
+	MAX_ZONELISTS = 2,
+};
+
+struct shrink_control {
+	gfp_t gfp_mask;
+	int nid;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_scanned;
+	struct mem_cgroup *memcg;
+};
+
+struct shrinker {
+	long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);
+	long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);
+	long int batch;
+	int seeks;
+	unsigned int flags;
+	struct list_head list;
+	int id;
+	atomic_long_t *nr_deferred;
+};
+
+struct rlimit {
+	__kernel_ulong_t rlim_cur;
+	__kernel_ulong_t rlim_max;
+};
+
+struct pid_namespace;
+
+struct upid {
+	int nr;
+	struct pid_namespace *ns;
+};
+
+struct pid {
+	refcount_t count;
+	unsigned int level;
+	spinlock_t lock;
+	struct hlist_head tasks[4];
+	struct hlist_head inodes;
+	wait_queue_head_t wait_pidfd;
+	struct callback_head rcu;
+	struct upid numbers[1];
+};
+
+typedef struct {
+	gid_t val;
+} kgid_t;
+
 struct hrtimer_cpu_base;
 
 struct hrtimer_clock_base {
@@ -2030,26 +2679,16 @@
 	struct hrtimer_clock_base clock_base[8];
 };
 
-enum node_states {
-	N_POSSIBLE = 0,
-	N_ONLINE = 1,
-	N_NORMAL_MEMORY = 2,
-	N_HIGH_MEMORY = 2,
-	N_MEMORY = 3,
-	N_CPU = 4,
-	N_GENERIC_INITIATOR = 5,
-	NR_NODE_STATES = 6,
-};
-
-struct rlimit {
-	__kernel_ulong_t rlim_cur;
-	__kernel_ulong_t rlim_max;
-};
-
-struct task_cputime {
-	u64 stime;
-	u64 utime;
-	long long unsigned int sum_exec_runtime;
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
 };
 
 typedef void __signalfn_t(int);
@@ -2093,6 +2732,7 @@
 	struct {
 		void *_addr;
 		union {
+			int _trapno;
 			short int _addr_lsb;
 			struct {
 				char _dummy_bnd[8];
@@ -2103,6 +2743,11 @@
 				char _dummy_pkey[8];
 				__u32 _pkey;
 			} _addr_pkey;
+			struct {
+				long unsigned int _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
 		};
 	} _sigfault;
 	struct {
@@ -2125,23 +2770,6 @@
 	};
 };
 
-struct user_struct {
-	refcount_t __count;
-	atomic_t processes;
-	atomic_t sigpending;
-	atomic_t fanotify_listeners;
-	atomic_long_t epoll_watches;
-	long unsigned int mq_bytes;
-	long unsigned int locked_shm;
-	long unsigned int unix_inflight;
-	atomic_long_t pipe_bufs;
-	struct hlist_node uidhash_node;
-	kuid_t uid;
-	atomic_long_t locked_vm;
-	atomic_t nr_watches;
-	struct ratelimit_state ratelimit;
-};
-
 struct sigaction {
 	__sighandler_t sa_handler;
 	long unsigned int sa_flags;
@@ -2153,45 +2781,6 @@
 	struct sigaction sa;
 };
 
-struct userfaultfd_ctx;
-
-struct vm_userfaultfd_ctx {
-	struct userfaultfd_ctx *ctx;
-};
-
-struct anon_vma;
-
-struct vm_operations_struct;
-
-struct vm_area_struct {
-	long unsigned int vm_start;
-	long unsigned int vm_end;
-	struct vm_area_struct *vm_next;
-	struct vm_area_struct *vm_prev;
-	struct rb_node vm_rb;
-	long unsigned int rb_subtree_gap;
-	struct mm_struct *vm_mm;
-	pgprot_t vm_page_prot;
-	long unsigned int vm_flags;
-	struct {
-		struct rb_node rb;
-		long unsigned int rb_subtree_last;
-	} shared;
-	struct list_head anon_vma_chain;
-	struct anon_vma *anon_vma;
-	const struct vm_operations_struct *vm_ops;
-	long unsigned int vm_pgoff;
-	struct file *vm_file;
-	void *vm_private_data;
-	atomic_long_t swap_readahead_info;
-	struct mempolicy *vm_policy;
-	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
-};
-
-struct mm_rss_stat {
-	atomic_long_t count[4];
-};
-
 struct cpu_itimer {
 	u64 expires;
 	u64 incr;
@@ -2217,6 +2806,8 @@
 	long unsigned int ac_majflt;
 };
 
+struct core_state;
+
 struct tty_struct;
 
 struct autogroup;
@@ -2236,9 +2827,10 @@
 	struct hlist_head multiprocess;
 	int group_exit_code;
 	int notify_count;
-	struct task_struct *group_exit_task;
+	struct task_struct *group_exec_task;
 	int group_stop_count;
 	unsigned int flags;
+	struct core_state *core_state;
 	unsigned int is_child_subreaper: 1;
 	unsigned int has_child_subreaper: 1;
 	int posix_timer_id;
@@ -2290,18 +2882,38 @@
 	struct rw_semaphore exec_update_lock;
 };
 
+enum rseq_cs_flags_bit {
+	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+
 struct rseq {
 	__u32 cpu_id_start;
 	__u32 cpu_id;
-	union {
-		__u64 ptr64;
-		__u64 ptr;
-	} rseq_cs;
+	__u64 rseq_cs;
 	__u32 flags;
 	long: 32;
 	long: 64;
 };
 
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+enum uclamp_id {
+	UCLAMP_MIN = 0,
+	UCLAMP_MAX = 1,
+	UCLAMP_CNT = 2,
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = 4294967295,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
 struct rq;
 
 struct rq_flags;
@@ -2317,12 +2929,14 @@
 	void (*put_prev_task)(struct rq *, struct task_struct *);
 	void (*set_next_task)(struct rq *, struct task_struct *, bool);
 	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
-	int (*select_task_rq)(struct task_struct *, int, int, int);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
 	void (*migrate_task_rq)(struct task_struct *, int);
 	void (*task_woken)(struct rq *, struct task_struct *);
-	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *);
+	void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *, u32);
 	void (*rq_online)(struct rq *);
 	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
 	void (*task_tick)(struct rq *, struct task_struct *, int);
 	void (*task_fork)(struct task_struct *);
 	void (*task_dead)(struct task_struct *);
@@ -2332,107 +2946,6 @@
 	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
 	void (*update_curr)(struct rq *);
 	void (*task_change_group)(struct task_struct *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef struct {
-	atomic64_t id;
-	void *sigpage;
-	refcount_t pinned;
-	void *vdso;
-	long unsigned int flags;
-} mm_context_t;
-
-struct xol_area;
-
-struct uprobes_state {
-	struct xol_area *xol_area;
-};
-
-struct linux_binfmt;
-
-struct core_state;
-
-struct kioctx_table;
-
-struct mmu_notifier_subscriptions;
-
-struct mm_struct {
-	struct {
-		struct vm_area_struct *mmap;
-		struct rb_root mm_rb;
-		u64 vmacache_seqnum;
-		long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-		long unsigned int mmap_base;
-		long unsigned int mmap_legacy_base;
-		long unsigned int task_size;
-		long unsigned int highest_vm_end;
-		pgd_t *pgd;
-		atomic_t membarrier_state;
-		atomic_t mm_users;
-		atomic_t mm_count;
-		atomic_t has_pinned;
-		seqcount_t write_protect_seq;
-		atomic_long_t pgtables_bytes;
-		int map_count;
-		spinlock_t page_table_lock;
-		struct rw_semaphore mmap_lock;
-		struct list_head mmlist;
-		long unsigned int hiwater_rss;
-		long unsigned int hiwater_vm;
-		long unsigned int total_vm;
-		long unsigned int locked_vm;
-		atomic64_t pinned_vm;
-		long unsigned int data_vm;
-		long unsigned int exec_vm;
-		long unsigned int stack_vm;
-		long unsigned int def_flags;
-		spinlock_t arg_lock;
-		long unsigned int start_code;
-		long unsigned int end_code;
-		long unsigned int start_data;
-		long unsigned int end_data;
-		long unsigned int start_brk;
-		long unsigned int brk;
-		long unsigned int start_stack;
-		long unsigned int arg_start;
-		long unsigned int arg_end;
-		long unsigned int env_start;
-		long unsigned int env_end;
-		long unsigned int saved_auxv[46];
-		struct mm_rss_stat rss_stat;
-		struct linux_binfmt *binfmt;
-		mm_context_t context;
-		long unsigned int flags;
-		struct core_state *core_state;
-		spinlock_t ioctx_lock;
-		struct kioctx_table *ioctx_table;
-		struct task_struct *owner;
-		struct user_namespace *user_ns;
-		struct file *exe_file;
-		struct mmu_notifier_subscriptions *notifier_subscriptions;
-		long unsigned int numa_next_scan;
-		long unsigned int numa_scan_offset;
-		int numa_scan_seq;
-		atomic_t tlb_flush_pending;
-		struct uprobes_state uprobes_state;
-		atomic_long_t hugetlb_usage;
-		struct work_struct async_put_work;
-		u32 pasid;
-	};
-	long unsigned int cpu_bitmap[0];
-};
-
-struct swait_queue_head {
-	raw_spinlock_t lock;
-	struct list_head task_list;
-};
-
-struct completion {
-	unsigned int done;
-	struct swait_queue_head wait;
 };
 
 struct kernel_cap_struct {
@@ -2441,6 +2954,10 @@
 
 typedef struct kernel_cap_struct kernel_cap_t;
 
+struct user_struct;
+
+struct ucounts;
+
 struct group_info;
 
 struct cred {
@@ -2467,6 +2984,7 @@
 	void *security;
 	struct user_struct *user;
 	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
 	struct group_info *group_info;
 	union {
 		int non_rcu;
@@ -2557,30 +3075,6 @@
 	struct key_restriction *restrict_link;
 };
 
-struct uts_namespace;
-
-struct ipc_namespace;
-
-struct mnt_namespace;
-
-struct net;
-
-struct time_namespace;
-
-struct cgroup_namespace;
-
-struct nsproxy {
-	atomic_t count;
-	struct uts_namespace *uts_ns;
-	struct ipc_namespace *ipc_ns;
-	struct mnt_namespace *mnt_ns;
-	struct pid_namespace *pid_ns_for_children;
-	struct net *net_ns;
-	struct time_namespace *time_ns;
-	struct time_namespace *time_ns_for_children;
-	struct cgroup_namespace *cgroup_ns;
-};
-
 struct sighand_struct {
 	spinlock_t siglock;
 	refcount_t count;
@@ -2588,1238 +3082,40 @@
 	struct k_sigaction action[64];
 };
 
-struct bio;
-
-struct bio_list {
-	struct bio *head;
-	struct bio *tail;
-};
-
-struct blk_plug {
-	struct list_head mq_list;
-	struct list_head cb_list;
-	short unsigned int rq_count;
-	bool multiple_queues;
-	bool nowait;
-};
-
-struct reclaim_state {
-	long unsigned int reclaimed_slab;
-};
-
-struct percpu_counter {
-	raw_spinlock_t lock;
-	s64 count;
-	struct list_head list;
-	s32 *counters;
-};
-
-struct fprop_local_percpu {
-	struct percpu_counter events;
-	unsigned int period;
-	raw_spinlock_t lock;
-};
-
-enum wb_reason {
-	WB_REASON_BACKGROUND = 0,
-	WB_REASON_VMSCAN = 1,
-	WB_REASON_SYNC = 2,
-	WB_REASON_PERIODIC = 3,
-	WB_REASON_LAPTOP_TIMER = 4,
-	WB_REASON_FS_FREE_SPACE = 5,
-	WB_REASON_FORKER_THREAD = 6,
-	WB_REASON_FOREIGN_FLUSH = 7,
-	WB_REASON_MAX = 8,
-};
-
-struct percpu_ref_data;
-
-struct percpu_ref {
-	long unsigned int percpu_count_ptr;
-	struct percpu_ref_data *data;
-};
-
-struct cgroup_subsys_state;
-
-struct bdi_writeback {
-	struct backing_dev_info *bdi;
-	long unsigned int state;
-	long unsigned int last_old_flush;
-	struct list_head b_dirty;
-	struct list_head b_io;
-	struct list_head b_more_io;
-	struct list_head b_dirty_time;
-	spinlock_t list_lock;
-	struct percpu_counter stat[4];
-	long unsigned int congested;
-	long unsigned int bw_time_stamp;
-	long unsigned int dirtied_stamp;
-	long unsigned int written_stamp;
-	long unsigned int write_bandwidth;
-	long unsigned int avg_write_bandwidth;
-	long unsigned int dirty_ratelimit;
-	long unsigned int balanced_dirty_ratelimit;
-	struct fprop_local_percpu completions;
-	int dirty_exceeded;
-	enum wb_reason start_all_reason;
-	spinlock_t work_lock;
-	struct list_head work_list;
-	struct delayed_work dwork;
-	long unsigned int dirty_sleep;
-	struct list_head bdi_node;
-	struct percpu_ref refcnt;
-	struct fprop_local_percpu memcg_completions;
-	struct cgroup_subsys_state *memcg_css;
-	struct cgroup_subsys_state *blkcg_css;
-	struct list_head memcg_node;
-	struct list_head blkcg_node;
-	union {
-		struct work_struct release_work;
-		struct callback_head rcu;
-	};
-};
-
-struct device;
-
-struct backing_dev_info {
-	u64 id;
-	struct rb_node rb_node;
-	struct list_head bdi_list;
-	long unsigned int ra_pages;
-	long unsigned int io_pages;
-	struct kref refcnt;
-	unsigned int capabilities;
-	unsigned int min_ratio;
-	unsigned int max_ratio;
-	unsigned int max_prop_frac;
-	atomic_long_t tot_write_bandwidth;
-	struct bdi_writeback wb;
-	struct list_head wb_list;
-	struct xarray cgwb_tree;
-	struct mutex cgwb_release_mutex;
-	struct rw_semaphore wb_switch_rwsem;
-	wait_queue_head_t wb_waitq;
-	struct device *dev;
-	char dev_name[64];
-	struct device *owner;
-	struct timer_list laptop_mode_wb_timer;
-	struct dentry *debug_dir;
-};
-
 struct io_cq;
 
 struct io_context {
 	atomic_long_t refcount;
 	atomic_t active_ref;
-	atomic_t nr_tasks;
-	spinlock_t lock;
 	short unsigned int ioprio;
+	spinlock_t lock;
 	struct xarray icq_tree;
 	struct io_cq *icq_hint;
 	struct hlist_head icq_list;
 	struct work_struct release_work;
 };
 
-struct cgroup;
-
-struct css_set {
-	struct cgroup_subsys_state *subsys[12];
-	refcount_t refcount;
-	struct css_set *dom_cset;
-	struct cgroup *dfl_cgrp;
-	int nr_tasks;
-	struct list_head tasks;
-	struct list_head mg_tasks;
-	struct list_head dying_tasks;
-	struct list_head task_iters;
-	struct list_head e_cset_node[12];
-	struct list_head threaded_csets;
-	struct list_head threaded_csets_node;
-	struct hlist_node hlist;
-	struct list_head cgrp_links;
-	struct list_head mg_preload_node;
-	struct list_head mg_node;
-	struct cgroup *mg_src_cgrp;
-	struct cgroup *mg_dst_cgrp;
-	struct css_set *mg_dst_cset;
-	bool dead;
-	struct callback_head callback_head;
+enum rseq_event_mask_bits {
+	RSEQ_EVENT_PREEMPT_BIT = 0,
+	RSEQ_EVENT_SIGNAL_BIT = 1,
+	RSEQ_EVENT_MIGRATE_BIT = 2,
 };
 
-struct compat_robust_list {
-	compat_uptr_t next;
-};
-
-struct compat_robust_list_head {
-	struct compat_robust_list list;
-	compat_long_t futex_offset;
-	compat_uptr_t list_op_pending;
-};
-
-struct perf_event_groups {
-	struct rb_root tree;
-	u64 index;
-};
-
-struct perf_event_context {
-	struct pmu *pmu;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	struct list_head active_ctx_list;
-	struct perf_event_groups pinned_groups;
-	struct perf_event_groups flexible_groups;
-	struct list_head event_list;
-	struct list_head pinned_active;
-	struct list_head flexible_active;
-	int nr_events;
-	int nr_active;
-	int is_active;
-	int nr_stat;
-	int nr_freq;
-	int rotate_disable;
-	int rotate_necessary;
-	refcount_t refcount;
-	struct task_struct *task;
-	u64 time;
-	u64 timestamp;
-	struct perf_event_context *parent_ctx;
-	u64 parent_gen;
-	u64 generation;
-	int pin_count;
-	int nr_cgroups;
-	void *task_ctx_data;
-	struct callback_head callback_head;
-};
-
-struct mempolicy {
-	atomic_t refcnt;
-	short unsigned int mode;
-	short unsigned int flags;
-	union {
-		short int preferred_node;
-		nodemask_t nodes;
-	} v;
-	union {
-		nodemask_t cpuset_mems_allowed;
-		nodemask_t user_nodemask;
-	} w;
-};
-
-struct task_delay_info {
-	raw_spinlock_t lock;
-	unsigned int flags;
-	u64 blkio_start;
-	u64 blkio_delay;
-	u64 swapin_delay;
-	u32 blkio_count;
-	u32 swapin_count;
-	u64 freepages_start;
-	u64 freepages_delay;
-	u64 thrashing_start;
-	u64 thrashing_delay;
-	u32 freepages_count;
-	u32 thrashing_count;
-};
-
-struct ftrace_ret_stack {
-	long unsigned int ret;
-	long unsigned int func;
-	long long unsigned int calltime;
-	long unsigned int fp;
-};
-
-struct cgroup_subsys;
-
-struct cgroup_subsys_state {
-	struct cgroup *cgroup;
-	struct cgroup_subsys *ss;
-	struct percpu_ref refcnt;
-	struct list_head sibling;
-	struct list_head children;
-	struct list_head rstat_css_node;
-	int id;
-	unsigned int flags;
-	u64 serial_nr;
-	atomic_t online_cnt;
-	struct work_struct destroy_work;
-	struct rcu_work destroy_rwork;
-	struct cgroup_subsys_state *parent;
-};
-
-struct mem_cgroup_id {
-	int id;
-	refcount_t ref;
-};
-
-struct page_counter {
-	atomic_long_t usage;
-	long unsigned int min;
-	long unsigned int low;
-	long unsigned int high;
-	long unsigned int max;
-	struct page_counter *parent;
-	long unsigned int emin;
-	atomic_long_t min_usage;
-	atomic_long_t children_min_usage;
-	long unsigned int elow;
-	atomic_long_t low_usage;
-	atomic_long_t children_low_usage;
-	long unsigned int watermark;
-	long unsigned int failcnt;
-};
-
-struct vmpressure {
-	long unsigned int scanned;
-	long unsigned int reclaimed;
-	long unsigned int tree_scanned;
-	long unsigned int tree_reclaimed;
-	spinlock_t sr_lock;
-	struct list_head events;
-	struct mutex events_lock;
-	struct work_struct work;
-};
-
-struct cgroup_file {
-	struct kernfs_node *kn;
-	long unsigned int notified_at;
-	struct timer_list notify_timer;
-};
-
-struct mem_cgroup_threshold_ary;
-
-struct mem_cgroup_thresholds {
-	struct mem_cgroup_threshold_ary *primary;
-	struct mem_cgroup_threshold_ary *spare;
-};
-
-struct memcg_padding {
-	char x[0];
-};
-
-enum memcg_kmem_state {
-	KMEM_NONE = 0,
-	KMEM_ALLOCATED = 1,
-	KMEM_ONLINE = 2,
-};
-
-struct fprop_global {
-	struct percpu_counter events;
-	unsigned int period;
-	seqcount_t sequence;
-};
-
-struct wb_domain {
-	spinlock_t lock;
-	struct fprop_global completions;
-	struct timer_list period_timer;
-	long unsigned int period_time;
-	long unsigned int dirty_limit_tstamp;
-	long unsigned int dirty_limit;
-};
-
-struct wb_completion {
-	atomic_t cnt;
-	wait_queue_head_t *waitq;
-};
-
-struct memcg_cgwb_frn {
-	u64 bdi_id;
-	int memcg_id;
-	u64 at;
-	struct wb_completion done;
-};
-
-struct deferred_split {
-	spinlock_t split_queue_lock;
-	struct list_head split_queue;
-	long unsigned int split_queue_len;
-};
-
-struct memcg_vmstats_percpu;
-
-struct mem_cgroup_per_node;
-
-struct mem_cgroup {
-	struct cgroup_subsys_state css;
-	struct mem_cgroup_id id;
-	struct page_counter memory;
-	union {
-		struct page_counter swap;
-		struct page_counter memsw;
-	};
-	struct page_counter kmem;
-	struct page_counter tcpmem;
-	struct work_struct high_work;
-	long unsigned int soft_limit;
-	struct vmpressure vmpressure;
-	bool use_hierarchy;
-	bool oom_group;
-	bool oom_lock;
-	int under_oom;
-	int swappiness;
-	int oom_kill_disable;
-	struct cgroup_file events_file;
-	struct cgroup_file events_local_file;
-	struct cgroup_file swap_events_file;
-	struct mutex thresholds_lock;
-	struct mem_cgroup_thresholds thresholds;
-	struct mem_cgroup_thresholds memsw_thresholds;
-	struct list_head oom_notify;
-	long unsigned int move_charge_at_immigrate;
-	spinlock_t move_lock;
-	long unsigned int move_lock_flags;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad1_;
-	atomic_long_t vmstats[40];
-	atomic_long_t vmevents[95];
-	atomic_long_t memory_events[8];
-	atomic_long_t memory_events_local[8];
-	long unsigned int socket_pressure;
-	bool tcpmem_active;
-	int tcpmem_pressure;
-	int kmemcg_id;
-	enum memcg_kmem_state kmem_state;
-	struct obj_cgroup *objcg;
-	struct list_head objcg_list;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct memcg_padding _pad2_;
-	atomic_t moving_account;
-	struct task_struct *move_lock_task;
-	struct memcg_vmstats_percpu *vmstats_local;
-	struct memcg_vmstats_percpu *vmstats_percpu;
-	struct list_head cgwb_list;
-	struct wb_domain cgwb_domain;
-	struct memcg_cgwb_frn cgwb_frn[4];
-	struct list_head event_list;
-	spinlock_t event_list_lock;
-	struct deferred_split deferred_split_queue;
-	struct mem_cgroup_per_node *nodeinfo[0];
-};
-
-struct blk_integrity_profile;
-
-struct blk_integrity {
-	const struct blk_integrity_profile *profile;
-	unsigned char flags;
-	unsigned char tuple_size;
-	unsigned char interval_exp;
-	unsigned char tag_size;
-};
-
-enum rpm_status {
-	RPM_ACTIVE = 0,
-	RPM_RESUMING = 1,
-	RPM_SUSPENDED = 2,
-	RPM_SUSPENDING = 3,
-};
-
-struct blk_rq_stat {
-	u64 mean;
-	u64 min;
-	u64 max;
-	u32 nr_samples;
-	u64 batch;
-};
-
-enum blk_zoned_model {
-	BLK_ZONED_NONE = 0,
-	BLK_ZONED_HA = 1,
-	BLK_ZONED_HM = 2,
-};
-
-struct queue_limits {
-	long unsigned int bounce_pfn;
-	long unsigned int seg_boundary_mask;
-	long unsigned int virt_boundary_mask;
-	unsigned int max_hw_sectors;
-	unsigned int max_dev_sectors;
-	unsigned int chunk_sectors;
-	unsigned int max_sectors;
-	unsigned int max_segment_size;
-	unsigned int physical_block_size;
-	unsigned int logical_block_size;
-	unsigned int alignment_offset;
-	unsigned int io_min;
-	unsigned int io_opt;
-	unsigned int max_discard_sectors;
-	unsigned int max_hw_discard_sectors;
-	unsigned int max_write_same_sectors;
-	unsigned int max_write_zeroes_sectors;
-	unsigned int max_zone_append_sectors;
-	unsigned int discard_granularity;
-	unsigned int discard_alignment;
-	short unsigned int max_segments;
-	short unsigned int max_integrity_segments;
-	short unsigned int max_discard_segments;
-	unsigned char misaligned;
-	unsigned char discard_misaligned;
-	unsigned char raid_partial_stripes_expensive;
-	enum blk_zoned_model zoned;
-};
-
-struct bsg_ops;
-
-struct bsg_class_device {
-	struct device *class_dev;
-	int minor;
-	struct request_queue *queue;
-	const struct bsg_ops *ops;
-};
-
-typedef void *mempool_alloc_t(gfp_t, void *);
-
-typedef void mempool_free_t(void *, void *);
-
-struct mempool_s {
-	spinlock_t lock;
-	int min_nr;
-	int curr_nr;
-	void **elements;
-	void *pool_data;
-	mempool_alloc_t *alloc;
-	mempool_free_t *free;
-	wait_queue_head_t wait;
-};
-
-typedef struct mempool_s mempool_t;
-
-struct bio_set {
-	struct kmem_cache *bio_slab;
-	unsigned int front_pad;
-	mempool_t bio_pool;
-	mempool_t bvec_pool;
-	mempool_t bio_integrity_pool;
-	mempool_t bvec_integrity_pool;
-	spinlock_t rescue_lock;
-	struct bio_list rescue_list;
-	struct work_struct rescue_work;
-	struct workqueue_struct *rescue_workqueue;
-};
-
-struct request;
-
-struct elevator_queue;
-
-struct blk_queue_stats;
-
-struct rq_qos;
-
-struct blk_mq_ops;
-
-struct blk_mq_ctx;
-
-struct blk_mq_hw_ctx;
-
-struct blk_keyslot_manager;
-
-struct blk_stat_callback;
-
-struct blkcg_gq;
-
-struct blk_trace;
-
-struct blk_flush_queue;
-
-struct throtl_data;
-
-struct blk_mq_tag_set;
-
-struct request_queue {
-	struct request *last_merge;
-	struct elevator_queue *elevator;
-	struct percpu_ref q_usage_counter;
-	struct blk_queue_stats *stats;
-	struct rq_qos *rq_qos;
-	const struct blk_mq_ops *mq_ops;
-	struct blk_mq_ctx *queue_ctx;
-	unsigned int queue_depth;
-	struct blk_mq_hw_ctx **queue_hw_ctx;
-	unsigned int nr_hw_queues;
-	struct backing_dev_info *backing_dev_info;
-	void *queuedata;
-	long unsigned int queue_flags;
-	atomic_t pm_only;
-	int id;
-	gfp_t bounce_gfp;
-	spinlock_t queue_lock;
-	struct kobject kobj;
-	struct kobject *mq_kobj;
-	struct blk_integrity integrity;
-	struct device *dev;
-	enum rpm_status rpm_status;
-	unsigned int nr_pending;
-	long unsigned int nr_requests;
-	unsigned int dma_pad_mask;
-	unsigned int dma_alignment;
-	struct blk_keyslot_manager *ksm;
-	unsigned int rq_timeout;
-	int poll_nsec;
-	struct blk_stat_callback *poll_cb;
-	struct blk_rq_stat poll_stat[16];
-	struct timer_list timeout;
-	struct work_struct timeout_work;
-	atomic_t nr_active_requests_shared_sbitmap;
-	struct list_head icq_list;
-	long unsigned int blkcg_pols[1];
-	struct blkcg_gq *root_blkg;
-	struct list_head blkg_list;
-	struct queue_limits limits;
-	unsigned int required_elevator_features;
-	unsigned int nr_zones;
-	long unsigned int *conv_zones_bitmap;
-	long unsigned int *seq_zones_wlock;
-	unsigned int max_open_zones;
-	unsigned int max_active_zones;
-	unsigned int sg_timeout;
-	unsigned int sg_reserved_size;
-	int node;
-	struct mutex debugfs_mutex;
-	struct blk_trace *blk_trace;
-	struct blk_flush_queue *fq;
-	struct list_head requeue_list;
-	spinlock_t requeue_lock;
-	struct delayed_work requeue_work;
-	struct mutex sysfs_lock;
-	struct mutex sysfs_dir_lock;
-	struct list_head unused_hctx_list;
-	spinlock_t unused_hctx_lock;
-	int mq_freeze_depth;
-	struct bsg_class_device bsg_dev;
-	struct throtl_data *td;
-	struct callback_head callback_head;
-	wait_queue_head_t mq_freeze_wq;
-	struct mutex mq_freeze_lock;
-	struct blk_mq_tag_set *tag_set;
-	struct list_head tag_set_list;
-	struct bio_set bio_split;
-	struct dentry *debugfs_dir;
-	bool mq_sysfs_init_done;
-	size_t cmd_size;
-	u64 write_hints[5];
-};
-
-enum uprobe_task_state {
-	UTASK_RUNNING = 0,
-	UTASK_SSTEP = 1,
-	UTASK_SSTEP_ACK = 2,
-	UTASK_SSTEP_TRAPPED = 3,
-};
-
-struct arch_uprobe_task {};
-
-struct uprobe;
-
-struct return_instance;
-
-struct uprobe_task {
-	enum uprobe_task_state state;
-	union {
-		struct {
-			struct arch_uprobe_task autask;
-			long unsigned int vaddr;
-		};
-		struct {
-			struct callback_head dup_xol_work;
-			long unsigned int dup_xol_addr;
-		};
-	};
-	struct uprobe *active_uprobe;
-	long unsigned int xol_vaddr;
-	struct return_instance *return_instances;
-	unsigned int depth;
-};
-
-struct vm_struct {
-	struct vm_struct *next;
-	void *addr;
-	long unsigned int size;
-	long unsigned int flags;
-	struct page **pages;
-	unsigned int nr_pages;
-	phys_addr_t phys_addr;
-	const void *caller;
-};
-
-struct kstat {
-	u32 result_mask;
-	umode_t mode;
-	unsigned int nlink;
-	uint32_t blksize;
-	u64 attributes;
-	u64 attributes_mask;
-	u64 ino;
-	dev_t dev;
-	dev_t rdev;
-	kuid_t uid;
-	kgid_t gid;
-	loff_t size;
-	struct timespec64 atime;
-	struct timespec64 mtime;
-	struct timespec64 ctime;
-	struct timespec64 btime;
-	u64 blocks;
-	u64 mnt_id;
-};
-
-struct return_instance {
-	struct uprobe *uprobe;
-	long unsigned int func;
-	long unsigned int stack;
-	long unsigned int orig_ret_vaddr;
-	bool chained;
-	struct return_instance *next;
-};
-
-typedef u32 errseq_t;
-
-struct address_space_operations;
-
-struct address_space {
-	struct inode *host;
-	struct xarray i_pages;
-	gfp_t gfp_mask;
-	atomic_t i_mmap_writable;
-	atomic_t nr_thps;
-	struct rb_root_cached i_mmap;
-	struct rw_semaphore i_mmap_rwsem;
-	long unsigned int nrpages;
-	long unsigned int nrexceptional;
-	long unsigned int writeback_index;
-	const struct address_space_operations *a_ops;
-	long unsigned int flags;
-	errseq_t wb_err;
-	spinlock_t private_lock;
-	struct list_head private_list;
-	void *private_data;
-};
-
-struct vmem_altmap {
-	const long unsigned int base_pfn;
-	const long unsigned int end_pfn;
-	const long unsigned int reserve;
-	long unsigned int free;
-	long unsigned int align;
-	long unsigned int alloc;
-};
-
-enum memory_type {
-	MEMORY_DEVICE_PRIVATE = 1,
-	MEMORY_DEVICE_FS_DAX = 2,
-	MEMORY_DEVICE_GENERIC = 3,
-	MEMORY_DEVICE_PCI_P2PDMA = 4,
-};
-
-struct range {
-	u64 start;
-	u64 end;
-};
-
-struct dev_pagemap_ops;
-
-struct dev_pagemap {
-	struct vmem_altmap altmap;
-	struct percpu_ref *ref;
-	struct percpu_ref internal_ref;
-	struct completion done;
-	enum memory_type type;
-	unsigned int flags;
-	const struct dev_pagemap_ops *ops;
-	void *owner;
-	int nr_range;
-	union {
-		struct range range;
-		struct range ranges[0];
-	};
-};
-
-struct obj_cgroup {
-	struct percpu_ref refcnt;
-	struct mem_cgroup *memcg;
-	atomic_t nr_charged_bytes;
-	union {
-		struct list_head list;
-		struct callback_head rcu;
-	};
-};
-
-struct vfsmount;
-
-struct path {
-	struct vfsmount *mnt;
-	struct dentry *dentry;
-};
-
-enum rw_hint {
-	WRITE_LIFE_NOT_SET = 0,
-	WRITE_LIFE_NONE = 1,
-	WRITE_LIFE_SHORT = 2,
-	WRITE_LIFE_MEDIUM = 3,
-	WRITE_LIFE_LONG = 4,
-	WRITE_LIFE_EXTREME = 5,
-};
-
-struct fown_struct {
-	rwlock_t lock;
-	struct pid *pid;
-	enum pid_type pid_type;
-	kuid_t uid;
-	kuid_t euid;
-	int signum;
-};
-
-struct file_ra_state {
-	long unsigned int start;
-	unsigned int size;
-	unsigned int async_size;
-	unsigned int ra_pages;
-	unsigned int mmap_miss;
-	loff_t prev_pos;
-};
-
-struct file {
-	union {
-		struct llist_node fu_llist;
-		struct callback_head fu_rcuhead;
-	} f_u;
-	struct path f_path;
-	struct inode *f_inode;
-	const struct file_operations *f_op;
-	spinlock_t f_lock;
-	enum rw_hint f_write_hint;
-	atomic_long_t f_count;
-	unsigned int f_flags;
-	fmode_t f_mode;
-	struct mutex f_pos_lock;
-	loff_t f_pos;
-	struct fown_struct f_owner;
-	const struct cred *f_cred;
-	struct file_ra_state f_ra;
-	u64 f_version;
-	void *f_security;
-	void *private_data;
-	struct list_head f_ep_links;
-	struct list_head f_tfile_llink;
-	struct address_space *f_mapping;
-	errseq_t f_wb_err;
-	errseq_t f_sb_err;
-};
-
-struct anon_vma {
-	struct anon_vma *root;
-	struct rw_semaphore rwsem;
-	atomic_t refcount;
-	unsigned int degree;
-	struct anon_vma *parent;
-	struct rb_root_cached rb_root;
-};
-
-typedef unsigned int vm_fault_t;
-
-enum page_entry_size {
-	PE_SIZE_PTE = 0,
-	PE_SIZE_PMD = 1,
-	PE_SIZE_PUD = 2,
-};
-
-struct vm_fault;
-
-struct vm_operations_struct {
-	void (*open)(struct vm_area_struct *);
-	void (*close)(struct vm_area_struct *);
-	int (*split)(struct vm_area_struct *, long unsigned int);
-	int (*mremap)(struct vm_area_struct *);
-	vm_fault_t (*fault)(struct vm_fault *);
-	vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);
-	void (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);
-	long unsigned int (*pagesize)(struct vm_area_struct *);
-	vm_fault_t (*page_mkwrite)(struct vm_fault *);
-	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
-	int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);
-	const char * (*name)(struct vm_area_struct *);
-	int (*set_policy)(struct vm_area_struct *, struct mempolicy *);
-	struct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);
-	struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);
-};
-
-struct core_thread {
-	struct task_struct *task;
-	struct core_thread *next;
-};
-
-struct core_state {
-	atomic_t nr_threads;
-	struct core_thread dumper;
-	struct completion startup;
-};
-
-struct linux_binprm;
-
-struct coredump_params;
-
-struct linux_binfmt {
-	struct list_head lh;
-	struct module *module;
-	int (*load_binary)(struct linux_binprm *);
-	int (*load_shlib)(struct file *);
-	int (*core_dump)(struct coredump_params *);
-	long unsigned int min_coredump;
-};
-
-struct vm_fault {
-	struct vm_area_struct *vma;
-	unsigned int flags;
-	gfp_t gfp_mask;
-	long unsigned int pgoff;
-	long unsigned int address;
-	pmd_t *pmd;
-	pud_t *pud;
-	pte_t orig_pte;
-	struct page *cow_page;
-	struct page *page;
-	pte_t *pte;
-	spinlock_t *ptl;
-	pgtable_t prealloc_pte;
-};
-
-struct free_area {
-	struct list_head free_list[6];
-	long unsigned int nr_free;
-};
-
-struct zone_padding {
-	char x[0];
-};
-
-enum node_stat_item {
-	NR_LRU_BASE = 0,
-	NR_INACTIVE_ANON = 0,
-	NR_ACTIVE_ANON = 1,
-	NR_INACTIVE_FILE = 2,
-	NR_ACTIVE_FILE = 3,
-	NR_UNEVICTABLE = 4,
-	NR_SLAB_RECLAIMABLE_B = 5,
-	NR_SLAB_UNRECLAIMABLE_B = 6,
-	NR_ISOLATED_ANON = 7,
-	NR_ISOLATED_FILE = 8,
-	WORKINGSET_NODES = 9,
-	WORKINGSET_REFAULT_BASE = 10,
-	WORKINGSET_REFAULT_ANON = 10,
-	WORKINGSET_REFAULT_FILE = 11,
-	WORKINGSET_ACTIVATE_BASE = 12,
-	WORKINGSET_ACTIVATE_ANON = 12,
-	WORKINGSET_ACTIVATE_FILE = 13,
-	WORKINGSET_RESTORE_BASE = 14,
-	WORKINGSET_RESTORE_ANON = 14,
-	WORKINGSET_RESTORE_FILE = 15,
-	WORKINGSET_NODERECLAIM = 16,
-	NR_ANON_MAPPED = 17,
-	NR_FILE_MAPPED = 18,
-	NR_FILE_PAGES = 19,
-	NR_FILE_DIRTY = 20,
-	NR_WRITEBACK = 21,
-	NR_WRITEBACK_TEMP = 22,
-	NR_SHMEM = 23,
-	NR_SHMEM_THPS = 24,
-	NR_SHMEM_PMDMAPPED = 25,
-	NR_FILE_THPS = 26,
-	NR_FILE_PMDMAPPED = 27,
-	NR_ANON_THPS = 28,
-	NR_VMSCAN_WRITE = 29,
-	NR_VMSCAN_IMMEDIATE = 30,
-	NR_DIRTIED = 31,
-	NR_WRITTEN = 32,
-	NR_KERNEL_MISC_RECLAIMABLE = 33,
-	NR_FOLL_PIN_ACQUIRED = 34,
-	NR_FOLL_PIN_RELEASED = 35,
-	NR_KERNEL_STACK_KB = 36,
-	NR_VM_NODE_STAT_ITEMS = 37,
-};
-
-enum lru_list {
-	LRU_INACTIVE_ANON = 0,
-	LRU_ACTIVE_ANON = 1,
-	LRU_INACTIVE_FILE = 2,
-	LRU_ACTIVE_FILE = 3,
-	LRU_UNEVICTABLE = 4,
-	NR_LRU_LISTS = 5,
-};
-
-struct pglist_data;
-
-struct lruvec {
-	struct list_head lists[5];
-	long unsigned int anon_cost;
-	long unsigned int file_cost;
-	atomic_long_t nonresident_age;
-	long unsigned int refaults[2];
-	long unsigned int flags;
-	struct pglist_data *pgdat;
-};
-
-struct per_cpu_pageset;
-
-struct zone {
-	long unsigned int _watermark[3];
-	long unsigned int watermark_boost;
-	long unsigned int nr_reserved_highatomic;
-	long int lowmem_reserve[4];
-	int node;
-	struct pglist_data *zone_pgdat;
-	struct per_cpu_pageset *pageset;
-	long unsigned int zone_start_pfn;
-	atomic_long_t managed_pages;
-	long unsigned int spanned_pages;
-	long unsigned int present_pages;
-	const char *name;
-	long unsigned int nr_isolate_pageblock;
-	seqlock_t span_seqlock;
-	int initialized;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	struct free_area free_area[11];
-	long unsigned int flags;
-	spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad2_;
-	long unsigned int percpu_drift_mark;
-	long unsigned int compact_cached_free_pfn;
-	long unsigned int compact_cached_migrate_pfn[2];
-	long unsigned int compact_init_migrate_pfn;
-	long unsigned int compact_init_free_pfn;
-	unsigned int compact_considered;
-	unsigned int compact_defer_shift;
-	int compact_order_failed;
-	bool compact_blockskip_flush;
-	bool contiguous;
-	short: 16;
-	struct zone_padding _pad3_;
-	atomic_long_t vm_stat[12];
-	atomic_long_t vm_numa_stat[6];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct zoneref {
-	struct zone *zone;
-	int zone_idx;
-};
-
-struct zonelist {
-	struct zoneref _zonerefs[513];
-};
-
-enum zone_type {
-	ZONE_DMA = 0,
-	ZONE_DMA32 = 1,
-	ZONE_NORMAL = 2,
-	ZONE_MOVABLE = 3,
-	__MAX_NR_ZONES = 4,
-};
-
-struct per_cpu_nodestat;
-
-struct pglist_data {
-	struct zone node_zones[4];
-	struct zonelist node_zonelists[2];
-	int nr_zones;
-	spinlock_t node_size_lock;
-	long unsigned int node_start_pfn;
-	long unsigned int node_present_pages;
-	long unsigned int node_spanned_pages;
-	int node_id;
-	wait_queue_head_t kswapd_wait;
-	wait_queue_head_t pfmemalloc_wait;
-	struct task_struct *kswapd;
-	int kswapd_order;
-	enum zone_type kswapd_highest_zoneidx;
-	int kswapd_failures;
-	int kcompactd_max_order;
-	enum zone_type kcompactd_highest_zoneidx;
-	wait_queue_head_t kcompactd_wait;
-	struct task_struct *kcompactd;
-	long unsigned int totalreserve_pages;
-	long unsigned int min_unmapped_pages;
-	long unsigned int min_slab_pages;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct zone_padding _pad1_;
-	spinlock_t lru_lock;
-	struct deferred_split deferred_split_queue;
-	struct lruvec __lruvec;
-	long unsigned int flags;
-	long: 64;
-	struct zone_padding _pad2_;
-	struct per_cpu_nodestat *per_cpu_nodestats;
-	atomic_long_t vm_stat[37];
-	long: 64;
-	long: 64;
-};
-
-typedef unsigned int isolate_mode_t;
-
-struct per_cpu_pages {
-	int count;
-	int high;
-	int batch;
-	struct list_head lists[3];
-};
-
-struct per_cpu_pageset {
-	struct per_cpu_pages pcp;
-	s8 expire;
-	u16 vm_numa_stat_diff[6];
-	s8 stat_threshold;
-	s8 vm_stat_diff[12];
-};
-
-struct per_cpu_nodestat {
-	s8 stat_threshold;
-	s8 vm_node_stat_diff[37];
-};
-
-struct rcu_segcblist {
-	struct callback_head *head;
-	struct callback_head **tails[4];
-	long unsigned int gp_seq[4];
-	long int len;
-	u8 enabled;
-	u8 offloaded;
-};
-
-struct srcu_node;
-
-struct srcu_data {
-	long unsigned int srcu_lock_count[2];
-	long unsigned int srcu_unlock_count[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t lock;
-	struct rcu_segcblist srcu_cblist;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	bool srcu_cblist_invoking;
-	struct timer_list delay_work;
-	struct work_struct work;
-	struct callback_head srcu_barrier_head;
-	struct srcu_node *mynode;
-	long unsigned int grpmask;
-	int cpu;
-	struct srcu_struct *ssp;
-	long: 64;
-	long: 64;
-};
-
-struct srcu_node {
-	spinlock_t lock;
-	long unsigned int srcu_have_cbs[4];
-	long unsigned int srcu_data_have_cbs[4];
-	long unsigned int srcu_gp_seq_needed_exp;
-	struct srcu_node *srcu_parent;
-	int grplo;
-	int grphi;
-};
-
-struct srcu_struct {
-	struct srcu_node node[9];
-	struct srcu_node *level[3];
-	struct mutex srcu_cb_mutex;
-	spinlock_t lock;
-	struct mutex srcu_gp_mutex;
-	unsigned int srcu_idx;
-	long unsigned int srcu_gp_seq;
-	long unsigned int srcu_gp_seq_needed;
-	long unsigned int srcu_gp_seq_needed_exp;
-	long unsigned int srcu_last_gp_end;
-	struct srcu_data *sda;
-	long unsigned int srcu_barrier_seq;
-	struct mutex srcu_barrier_mutex;
-	struct completion srcu_barrier_completion;
-	atomic_t srcu_barrier_cpu_cnt;
-	struct delayed_work work;
-};
-
-typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
-
-struct ctl_table_poll;
-
-struct ctl_table {
-	const char *procname;
-	void *data;
-	int maxlen;
-	umode_t mode;
-	struct ctl_table *child;
-	proc_handler *proc_handler;
-	struct ctl_table_poll *poll;
-	void *extra1;
-	void *extra2;
-};
-
-struct ctl_table_poll {
-	atomic_t event;
-	wait_queue_head_t wait;
-};
-
-struct ctl_node {
-	struct rb_node node;
-	struct ctl_table_header *header;
-};
-
-struct ctl_table_root {
-	struct ctl_table_set default_set;
-	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
-	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
-	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
-};
-
-enum umh_disable_depth {
-	UMH_ENABLED = 0,
-	UMH_FREEZING = 1,
-	UMH_DISABLED = 2,
-};
-
-typedef __u64 Elf64_Addr;
-
-typedef __u16 Elf64_Half;
-
-typedef __u32 Elf64_Word;
-
-typedef __u64 Elf64_Xword;
-
-struct elf64_sym {
-	Elf64_Word st_name;
-	unsigned char st_info;
-	unsigned char st_other;
-	Elf64_Half st_shndx;
-	Elf64_Addr st_value;
-	Elf64_Xword st_size;
+enum fixed_addresses {
+	VSYSCALL_PAGE = 511,
+	FIX_DBGP_BASE = 512,
+	FIX_EARLYCON_MEM_BASE = 513,
+	FIX_APIC_BASE = 514,
+	FIX_IO_APIC_BASE_0 = 515,
+	FIX_IO_APIC_BASE_END = 642,
+	FIX_PARAVIRT_BOOTMAP = 643,
+	FIX_APEI_GHES_IRQ = 644,
+	FIX_APEI_GHES_NMI = 645,
+	__end_of_permanent_fixed_addresses = 646,
+	FIX_BTMAP_END = 1024,
+	FIX_BTMAP_BEGIN = 1535,
+	FIX_TBOOT_BASE = 1536,
+	__end_of_fixed_addresses = 1537,
 };
 
 struct hlist_bl_node;
@@ -3886,9 +3182,9 @@
 
 struct inode_operations;
 
-struct file_lock_context;
+struct bdi_writeback;
 
-struct block_device;
+struct file_lock_context;
 
 struct cdev;
 
@@ -3957,7 +3253,6 @@
 	struct list_head i_devices;
 	union {
 		struct pipe_inode_info *i_pipe;
-		struct block_device *i_bdev;
 		struct cdev *i_cdev;
 		char *i_link;
 		unsigned int i_dir_seq;
@@ -4046,19 +3341,6 @@
 	__u8 b[16];
 } uuid_t;
 
-struct shrink_control;
-
-struct shrinker {
-	long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);
-	long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);
-	long int batch;
-	int seeks;
-	unsigned int flags;
-	struct list_head list;
-	int id;
-	atomic_long_t *nr_deferred;
-};
-
 struct list_lru_node;
 
 struct list_lru {
@@ -4066,6 +3348,7 @@
 	struct list_head list;
 	int shrinker_id;
 	bool memcg_aware;
+	struct xarray xa;
 };
 
 struct super_operations;
@@ -4084,6 +3367,8 @@
 
 struct unicode_map;
 
+struct block_device;
+
 struct super_block {
 	struct list_head s_list;
 	dev_t s_dev;
@@ -4131,10 +3416,9 @@
 	struct mutex s_vfs_rename_mutex;
 	const char *s_subtype;
 	const struct dentry_operations *s_d_op;
-	int cleancache_poolid;
 	struct shrinker s_shrink;
 	atomic_long_t s_remove_count;
-	atomic_long_t s_fsnotify_inode_refs;
+	atomic_long_t s_fsnotify_connectors;
 	int s_readonly_remount;
 	errseq_t s_wb_err;
 	struct workqueue_struct *s_dio_done_wq;
@@ -4146,7 +3430,12 @@
 	struct work_struct destroy_work;
 	struct mutex s_sync_lock;
 	int s_stack_depth;
-	int: 32;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	spinlock_t s_inode_list_lock;
 	struct list_head s_inodes;
 	spinlock_t s_inode_wblist_lock;
@@ -4155,12 +3444,32 @@
 	long: 64;
 };
 
-struct shrink_control {
-	gfp_t gfp_mask;
-	int nid;
-	long unsigned int nr_to_scan;
-	long unsigned int nr_scanned;
-	struct mem_cgroup *memcg;
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct user_namespace *mnt_userns;
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
 };
 
 struct list_lru_one {
@@ -4168,18 +3477,13 @@
 	long int nr_items;
 };
 
-struct list_lru_memcg {
-	struct callback_head rcu;
-	struct list_lru_one *lru[0];
-};
-
 struct list_lru_node {
 	spinlock_t lock;
 	struct list_lru_one lru;
-	struct list_lru_memcg *memcg_lrus;
 	long int nr_items;
 	long: 64;
 	long: 64;
+	long: 64;
 };
 
 enum migrate_mode {
@@ -4192,99 +3496,7 @@
 struct exception_table_entry {
 	int insn;
 	int fixup;
-};
-
-struct cgroup_base_stat {
-	struct task_cputime cputime;
-};
-
-struct psi_group_cpu;
-
-struct psi_group {
-	struct mutex avgs_lock;
-	struct psi_group_cpu *pcpu;
-	u64 avg_total[5];
-	u64 avg_last_update;
-	u64 avg_next_update;
-	struct delayed_work avgs_work;
-	u64 total[10];
-	long unsigned int avg[15];
-	struct task_struct *poll_task;
-	struct timer_list poll_timer;
-	wait_queue_head_t poll_wait;
-	atomic_t poll_wakeup;
-	struct mutex trigger_lock;
-	struct list_head triggers;
-	u32 nr_triggers[5];
-	u32 poll_states;
-	u64 poll_min_period;
-	u64 polling_total[5];
-	u64 polling_next_update;
-	u64 polling_until;
-};
-
-struct bpf_prog_array;
-
-struct cgroup_bpf {
-	struct bpf_prog_array *effective[38];
-	struct list_head progs[38];
-	u32 flags[38];
-	struct list_head storages;
-	struct bpf_prog_array *inactive;
-	struct percpu_ref refcnt;
-	struct work_struct release_work;
-};
-
-struct cgroup_freezer_state {
-	bool freeze;
-	int e_freeze;
-	int nr_frozen_descendants;
-	int nr_frozen_tasks;
-};
-
-struct cgroup_root;
-
-struct cgroup_rstat_cpu;
-
-struct cgroup {
-	struct cgroup_subsys_state self;
-	long unsigned int flags;
-	int level;
-	int max_depth;
-	int nr_descendants;
-	int nr_dying_descendants;
-	int max_descendants;
-	int nr_populated_csets;
-	int nr_populated_domain_children;
-	int nr_populated_threaded_children;
-	int nr_threaded_children;
-	struct kernfs_node *kn;
-	struct cgroup_file procs_file;
-	struct cgroup_file events_file;
-	u16 subtree_control;
-	u16 subtree_ss_mask;
-	u16 old_subtree_control;
-	u16 old_subtree_ss_mask;
-	struct cgroup_subsys_state *subsys[12];
-	struct cgroup_root *root;
-	struct list_head cset_links;
-	struct list_head e_csets[12];
-	struct cgroup *dom_cgrp;
-	struct cgroup *old_dom_cgrp;
-	struct cgroup_rstat_cpu *rstat_cpu;
-	struct list_head rstat_css_list;
-	struct cgroup_base_stat last_bstat;
-	struct cgroup_base_stat bstat;
-	struct prev_cputime prev_cputime;
-	struct list_head pidlists;
-	struct mutex pidlist_mutex;
-	wait_queue_head_t offline_waitq;
-	struct work_struct release_agent_work;
-	struct psi_group psi;
-	struct cgroup_bpf bpf;
-	atomic_t congestion_count;
-	struct cgroup_freezer_state freezer;
-	u64 ancestor_ids[0];
+	int data;
 };
 
 struct key_tag {
@@ -4335,60 +3547,40 @@
 	struct key_type *keytype;
 };
 
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 *counters;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	long unsigned int unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	atomic_t nr_watches;
+	struct ratelimit_state ratelimit;
+};
+
 struct group_info {
 	atomic_t usage;
 	int ngroups;
 	kgid_t gid[0];
 };
 
-struct taskstats {
-	__u16 version;
-	__u32 ac_exitcode;
-	__u8 ac_flag;
-	__u8 ac_nice;
-	__u64 cpu_count;
-	__u64 cpu_delay_total;
-	__u64 blkio_count;
-	__u64 blkio_delay_total;
-	__u64 swapin_count;
-	__u64 swapin_delay_total;
-	__u64 cpu_run_real_total;
-	__u64 cpu_run_virtual_total;
-	char ac_comm[32];
-	__u8 ac_sched;
-	__u8 ac_pad[3];
-	int: 32;
-	__u32 ac_uid;
-	__u32 ac_gid;
-	__u32 ac_pid;
-	__u32 ac_ppid;
-	__u32 ac_btime;
-	__u64 ac_etime;
-	__u64 ac_utime;
-	__u64 ac_stime;
-	__u64 ac_minflt;
-	__u64 ac_majflt;
-	__u64 coremem;
-	__u64 virtmem;
-	__u64 hiwater_rss;
-	__u64 hiwater_vm;
-	__u64 read_char;
-	__u64 write_char;
-	__u64 read_syscalls;
-	__u64 write_syscalls;
-	__u64 read_bytes;
-	__u64 write_bytes;
-	__u64 cancelled_write_bytes;
-	__u64 nvcsw;
-	__u64 nivcsw;
-	__u64 ac_utimescaled;
-	__u64 ac_stimescaled;
-	__u64 cpu_scaled_run_real_total;
-	__u64 freepages_count;
-	__u64 freepages_delay_total;
-	__u64 thrashing_count;
-	__u64 thrashing_delay_total;
-	__u64 ac_btime64;
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
 };
 
 struct delayed_call {
@@ -4396,6 +3588,8 @@
 	void *arg;
 };
 
+struct kmem_cache;
+
 struct io_cq {
 	struct request_queue *q;
 	struct io_context *ioc;
@@ -4410,20 +3604,24 @@
 	unsigned int flags;
 };
 
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_CGROUP = 1,
+	KMALLOC_RECLAIM = 2,
+	KMALLOC_DMA = 3,
+	NR_KMALLOC_TYPES = 4,
+};
+
 struct wait_page_queue;
 
 struct kiocb {
 	struct file *ki_filp;
 	loff_t ki_pos;
-	void (*ki_complete)(struct kiocb *, long int, long int);
+	void (*ki_complete)(struct kiocb *, long int);
 	void *private;
 	int ki_flags;
-	u16 ki_hint;
 	u16 ki_ioprio;
-	union {
-		unsigned int ki_cookie;
-		struct wait_page_queue *ki_waitq;
-	};
+	struct wait_page_queue *ki_waitq;
 };
 
 struct iattr {
@@ -4486,6 +3684,12 @@
 	struct mem_dqblk dq_dqb;
 };
 
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
 struct quota_format_type {
 	int qf_fmt_id;
 	const struct quota_format_ops *qf_ops;
@@ -4493,6 +3697,18 @@
 	struct quota_format_type *qf_next;
 };
 
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
 struct quota_format_ops {
 	int (*check_quota_file)(struct super_block *, int);
 	int (*read_file_info)(struct super_block *, int);
@@ -4580,10 +3796,170 @@
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
 
-struct wait_page_queue {
-	struct page *page;
-	int bit_nr;
-	wait_queue_entry_t wait;
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kernfs_node;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+};
+
+struct module_param_attrs;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_layout {
+	void *base;
+	unsigned int size;
+	unsigned int text_size;
+	unsigned int ro_size;
+	unsigned int ro_after_init_size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_arch_specific {};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+struct module_attribute;
+
+struct kernel_param;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct trace_event_call;
+
+struct trace_eval_map;
+
+struct klp_modinfo;
+
+struct error_injection_entry;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool sig_ok;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	struct module_layout core_layout;
+	struct module_layout init_layout;
+	struct mod_arch_specific arch;
+	long unsigned int taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	unsigned int num_ftrace_callsites;
+	long unsigned int *ftrace_callsites;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	long unsigned int *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	int num_static_call_sites;
+	struct static_call_site *static_call_sites;
+	bool klp;
+	bool klp_alive;
+	struct klp_modinfo *klp_info;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct error_injection_entry *ei_funcs;
+	unsigned int num_ei_funcs;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct writeback_control;
@@ -4594,195 +3970,57 @@
 
 struct address_space_operations {
 	int (*writepage)(struct page *, struct writeback_control *);
-	int (*readpage)(struct file *, struct page *);
+	int (*read_folio)(struct file *, struct folio *);
 	int (*writepages)(struct address_space *, struct writeback_control *);
-	int (*set_page_dirty)(struct page *);
-	int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
 	void (*readahead)(struct readahead_control *);
-	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
 	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
 	sector_t (*bmap)(struct address_space *, sector_t);
-	void (*invalidatepage)(struct page *, unsigned int, unsigned int);
-	int (*releasepage)(struct page *, gfp_t);
-	void (*freepage)(struct page *);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
 	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
 	int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);
 	bool (*isolate_page)(struct page *, isolate_mode_t);
 	void (*putback_page)(struct page *);
-	int (*launder_page)(struct page *);
-	int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);
-	void (*is_dirty_writeback)(struct page *, bool *, bool *);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
 	int (*error_remove_page)(struct address_space *, struct page *);
 	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
 	void (*swap_deactivate)(struct file *);
-};
-
-enum writeback_sync_modes {
-	WB_SYNC_NONE = 0,
-	WB_SYNC_ALL = 1,
-};
-
-struct writeback_control {
-	long int nr_to_write;
-	long int pages_skipped;
-	loff_t range_start;
-	loff_t range_end;
-	enum writeback_sync_modes sync_mode;
-	unsigned int for_kupdate: 1;
-	unsigned int for_background: 1;
-	unsigned int tagged_writepages: 1;
-	unsigned int for_reclaim: 1;
-	unsigned int range_cyclic: 1;
-	unsigned int for_sync: 1;
-	unsigned int no_cgroup_owner: 1;
-	unsigned int punt_to_cgroup: 1;
-	struct bdi_writeback *wb;
-	struct inode *inode;
-	int wb_id;
-	int wb_lcand_id;
-	int wb_tcand_id;
-	size_t wb_bytes;
-	size_t wb_lcand_bytes;
-	size_t wb_tcand_bytes;
-};
-
-struct readahead_control {
-	struct file *file;
-	struct address_space *mapping;
-	long unsigned int _index;
-	unsigned int _nr_pages;
-	unsigned int _batch_count;
-};
-
-struct iovec;
-
-struct kvec;
-
-struct bio_vec;
-
-struct iov_iter {
-	unsigned int type;
-	size_t iov_offset;
-	size_t count;
-	union {
-		const struct iovec *iov;
-		const struct kvec *kvec;
-		const struct bio_vec *bvec;
-		struct pipe_inode_info *pipe;
-	};
-	union {
-		long unsigned int nr_segs;
-		struct {
-			unsigned int head;
-			unsigned int start_head;
-		};
-	};
-};
-
-struct swap_cluster_info {
-	spinlock_t lock;
-	unsigned int data: 24;
-	unsigned int flags: 8;
-};
-
-struct swap_cluster_list {
-	struct swap_cluster_info head;
-	struct swap_cluster_info tail;
-};
-
-struct percpu_cluster;
-
-struct swap_info_struct {
-	long unsigned int flags;
-	short int prio;
-	struct plist_node list;
-	signed char type;
-	unsigned int max;
-	unsigned char *swap_map;
-	struct swap_cluster_info *cluster_info;
-	struct swap_cluster_list free_clusters;
-	unsigned int lowest_bit;
-	unsigned int highest_bit;
-	unsigned int pages;
-	unsigned int inuse_pages;
-	unsigned int cluster_next;
-	unsigned int cluster_nr;
-	unsigned int *cluster_next_cpu;
-	struct percpu_cluster *percpu_cluster;
-	struct rb_root swap_extent_root;
-	struct block_device *bdev;
-	struct file *swap_file;
-	unsigned int old_block_size;
-	long unsigned int *frontswap_map;
-	atomic_t frontswap_pages;
-	spinlock_t lock;
-	spinlock_t cont_lock;
-	struct work_struct discard_work;
-	struct swap_cluster_list discard_clusters;
-	struct plist_node avail_lists[0];
-};
-
-struct hd_struct;
-
-struct gendisk;
-
-struct block_device {
-	dev_t bd_dev;
-	int bd_openers;
-	struct inode *bd_inode;
-	struct super_block *bd_super;
-	struct mutex bd_mutex;
-	void *bd_claiming;
-	void *bd_holder;
-	int bd_holders;
-	bool bd_write_holder;
-	struct list_head bd_holder_disks;
-	struct block_device *bd_contains;
-	u8 bd_partno;
-	struct hd_struct *bd_part;
-	unsigned int bd_part_count;
-	spinlock_t bd_size_lock;
-	struct gendisk *bd_disk;
-	struct backing_dev_info *bd_bdi;
-	int bd_fsfreeze_count;
-	struct mutex bd_fsfreeze_mutex;
-};
-
-struct cdev {
-	struct kobject kobj;
-	struct module *owner;
-	const struct file_operations *ops;
-	struct list_head list;
-	dev_t dev;
-	unsigned int count;
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
 };
 
 struct fiemap_extent_info;
 
+struct fileattr;
+
 struct inode_operations {
 	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
 	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
-	int (*permission)(struct inode *, int);
-	struct posix_acl * (*get_acl)(struct inode *, int);
+	int (*permission)(struct user_namespace *, struct inode *, int);
+	struct posix_acl * (*get_acl)(struct inode *, int, bool);
 	int (*readlink)(struct dentry *, char *, int);
-	int (*create)(struct inode *, struct dentry *, umode_t, bool);
+	int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool);
 	int (*link)(struct dentry *, struct inode *, struct dentry *);
 	int (*unlink)(struct inode *, struct dentry *);
-	int (*symlink)(struct inode *, struct dentry *, const char *);
-	int (*mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
 	int (*rmdir)(struct inode *, struct dentry *);
-	int (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);
-	int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
-	int (*setattr)(struct dentry *, struct iattr *);
-	int (*getattr)(const struct path *, struct kstat *, u32, unsigned int);
+	int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *);
+	int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int);
 	ssize_t (*listxattr)(struct dentry *, char *, size_t);
 	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
 	int (*update_time)(struct inode *, struct timespec64 *, int);
 	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
-	int (*tmpfile)(struct inode *, struct dentry *, umode_t);
-	int (*set_acl)(struct inode *, struct posix_acl *, int);
-	long: 64;
-	long: 64;
+	int (*tmpfile)(struct user_namespace *, struct inode *, struct dentry *, umode_t);
+	int (*set_acl)(struct user_namespace *, struct inode *, struct posix_acl *, int);
+	int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
 	long: 64;
 };
 
@@ -4812,6 +4050,8 @@
 	struct nfs4_lock_state *owner;
 };
 
+struct fasync_struct;
+
 struct lock_manager_operations;
 
 struct file_lock {
@@ -4846,6 +4086,7 @@
 };
 
 struct lock_manager_operations {
+	void *lm_mod_owner;
 	fl_owner_t (*lm_get_owner)(fl_owner_t);
 	void (*lm_put_owner)(fl_owner_t);
 	void (*lm_notify)(struct file_lock *);
@@ -4854,6 +4095,8 @@
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
 	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
 };
 
 struct fasync_struct {
@@ -4865,6 +4108,14 @@
 	struct callback_head fa_rcu;
 };
 
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
 struct kstatfs;
 
 struct super_operations {
@@ -4891,7 +4142,6 @@
 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
 	struct dquot ** (*get_dquots)(struct inode *);
-	int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);
 	long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);
 	long int (*free_cached_objects)(struct super_block *, struct shrink_control *);
 };
@@ -4910,6 +4160,8 @@
 	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
 	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
 	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	u64 (*fetch_iversion)(struct inode *);
+	long unsigned int flags;
 };
 
 struct xattr_handler {
@@ -4918,7 +4170,7 @@
 	int flags;
 	bool (*list)(struct dentry *);
 	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
-	int (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+	int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
 };
 
 union fscrypt_policy;
@@ -4930,7 +4182,6 @@
 	int (*set_context)(struct inode *, const void *, size_t, void *);
 	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
 	bool (*empty_dir)(struct inode *);
-	unsigned int max_namelen;
 	bool (*has_stable_inodes)(struct super_block *);
 	void (*get_ino_and_lblk_bits)(struct super_block *, int *, int *);
 	int (*get_num_devices)(struct super_block *);
@@ -4952,79 +4203,7 @@
 	loff_t pos;
 };
 
-typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
-
-struct poll_table_struct {
-	poll_queue_proc _qproc;
-	__poll_t _key;
-};
-
-struct seq_operations;
-
-struct seq_file {
-	char *buf;
-	size_t size;
-	size_t from;
-	size_t count;
-	size_t pad_until;
-	loff_t index;
-	loff_t read_pos;
-	struct mutex lock;
-	const struct seq_operations *op;
-	int poll_event;
-	const struct file *file;
-	void *private;
-};
-
-struct fc_log;
-
-struct p_log {
-	const char *prefix;
-	struct fc_log *log;
-};
-
-enum fs_context_purpose {
-	FS_CONTEXT_FOR_MOUNT = 0,
-	FS_CONTEXT_FOR_SUBMOUNT = 1,
-	FS_CONTEXT_FOR_RECONFIGURE = 2,
-};
-
-enum fs_context_phase {
-	FS_CONTEXT_CREATE_PARAMS = 0,
-	FS_CONTEXT_CREATING = 1,
-	FS_CONTEXT_AWAITING_MOUNT = 2,
-	FS_CONTEXT_AWAITING_RECONF = 3,
-	FS_CONTEXT_RECONF_PARAMS = 4,
-	FS_CONTEXT_RECONFIGURING = 5,
-	FS_CONTEXT_FAILED = 6,
-};
-
-struct fs_context_operations;
-
-struct fs_context {
-	const struct fs_context_operations *ops;
-	struct mutex uapi_mutex;
-	struct file_system_type *fs_type;
-	void *fs_private;
-	void *sget_key;
-	struct dentry *root;
-	struct user_namespace *user_ns;
-	struct net *net_ns;
-	const struct cred *cred;
-	struct p_log log;
-	const char *source;
-	void *security;
-	void *s_fs_info;
-	unsigned int sb_flags;
-	unsigned int sb_flags_mask;
-	unsigned int s_iflags;
-	unsigned int lsm_flags;
-	enum fs_context_purpose purpose: 8;
-	enum fs_context_phase phase: 8;
-	bool need_free: 1;
-	bool global: 1;
-	bool oldapi: 1;
-};
+struct p_log;
 
 struct fs_parameter;
 
@@ -5040,67 +4219,147 @@
 	const void *data;
 };
 
-struct audit_names;
-
-struct filename {
-	const char *name;
-	const char *uptr;
-	int refcnt;
-	struct audit_names *aname;
-	const char iname[0];
+enum compound_dtor_id {
+	NULL_COMPOUND_DTOR = 0,
+	COMPOUND_PAGE_DTOR = 1,
+	HUGETLB_PAGE_DTOR = 2,
+	TRANSHUGE_PAGE_DTOR = 3,
+	NR_COMPOUND_DTORS = 4,
 };
 
-typedef u8 blk_status_t;
-
-struct bvec_iter {
-	sector_t bi_sector;
-	unsigned int bi_size;
-	unsigned int bi_idx;
-	unsigned int bi_bvec_done;
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA = 4,
+	PGALLOC_DMA32 = 5,
+	PGALLOC_NORMAL = 6,
+	PGALLOC_MOVABLE = 7,
+	ALLOCSTALL_DMA = 8,
+	ALLOCSTALL_DMA32 = 9,
+	ALLOCSTALL_NORMAL = 10,
+	ALLOCSTALL_MOVABLE = 11,
+	PGSCAN_SKIP_DMA = 12,
+	PGSCAN_SKIP_DMA32 = 13,
+	PGSCAN_SKIP_NORMAL = 14,
+	PGSCAN_SKIP_MOVABLE = 15,
+	PGFREE = 16,
+	PGACTIVATE = 17,
+	PGDEACTIVATE = 18,
+	PGLAZYFREE = 19,
+	PGFAULT = 20,
+	PGMAJFAULT = 21,
+	PGLAZYFREED = 22,
+	PGREFILL = 23,
+	PGREUSE = 24,
+	PGSTEAL_KSWAPD = 25,
+	PGSTEAL_DIRECT = 26,
+	PGDEMOTE_KSWAPD = 27,
+	PGDEMOTE_DIRECT = 28,
+	PGSCAN_KSWAPD = 29,
+	PGSCAN_DIRECT = 30,
+	PGSCAN_DIRECT_THROTTLE = 31,
+	PGSCAN_ANON = 32,
+	PGSCAN_FILE = 33,
+	PGSTEAL_ANON = 34,
+	PGSTEAL_FILE = 35,
+	PGSCAN_ZONE_RECLAIM_FAILED = 36,
+	PGINODESTEAL = 37,
+	SLABS_SCANNED = 38,
+	KSWAPD_INODESTEAL = 39,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 40,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 41,
+	PAGEOUTRUN = 42,
+	PGROTATED = 43,
+	DROP_PAGECACHE = 44,
+	DROP_SLAB = 45,
+	OOM_KILL = 46,
+	NUMA_PTE_UPDATES = 47,
+	NUMA_HUGE_PTE_UPDATES = 48,
+	NUMA_HINT_FAULTS = 49,
+	NUMA_HINT_FAULTS_LOCAL = 50,
+	NUMA_PAGE_MIGRATE = 51,
+	PGMIGRATE_SUCCESS = 52,
+	PGMIGRATE_FAIL = 53,
+	THP_MIGRATION_SUCCESS = 54,
+	THP_MIGRATION_FAIL = 55,
+	THP_MIGRATION_SPLIT = 56,
+	COMPACTMIGRATE_SCANNED = 57,
+	COMPACTFREE_SCANNED = 58,
+	COMPACTISOLATED = 59,
+	COMPACTSTALL = 60,
+	COMPACTFAIL = 61,
+	COMPACTSUCCESS = 62,
+	KCOMPACTD_WAKE = 63,
+	KCOMPACTD_MIGRATE_SCANNED = 64,
+	KCOMPACTD_FREE_SCANNED = 65,
+	HTLB_BUDDY_PGALLOC = 66,
+	HTLB_BUDDY_PGALLOC_FAIL = 67,
+	UNEVICTABLE_PGCULLED = 68,
+	UNEVICTABLE_PGSCANNED = 69,
+	UNEVICTABLE_PGRESCUED = 70,
+	UNEVICTABLE_PGMLOCKED = 71,
+	UNEVICTABLE_PGMUNLOCKED = 72,
+	UNEVICTABLE_PGCLEARED = 73,
+	UNEVICTABLE_PGSTRANDED = 74,
+	THP_FAULT_ALLOC = 75,
+	THP_FAULT_FALLBACK = 76,
+	THP_FAULT_FALLBACK_CHARGE = 77,
+	THP_COLLAPSE_ALLOC = 78,
+	THP_COLLAPSE_ALLOC_FAILED = 79,
+	THP_FILE_ALLOC = 80,
+	THP_FILE_FALLBACK = 81,
+	THP_FILE_FALLBACK_CHARGE = 82,
+	THP_FILE_MAPPED = 83,
+	THP_SPLIT_PAGE = 84,
+	THP_SPLIT_PAGE_FAILED = 85,
+	THP_DEFERRED_SPLIT_PAGE = 86,
+	THP_SPLIT_PMD = 87,
+	THP_SCAN_EXCEED_NONE_PTE = 88,
+	THP_SCAN_EXCEED_SWAP_PTE = 89,
+	THP_SCAN_EXCEED_SHARED_PTE = 90,
+	THP_SPLIT_PUD = 91,
+	THP_ZERO_PAGE_ALLOC = 92,
+	THP_ZERO_PAGE_ALLOC_FAILED = 93,
+	THP_SWPOUT = 94,
+	THP_SWPOUT_FALLBACK = 95,
+	BALLOON_INFLATE = 96,
+	BALLOON_DEFLATE = 97,
+	BALLOON_MIGRATE = 98,
+	SWAP_RA = 99,
+	SWAP_RA_HIT = 100,
+	KSM_SWPIN_COPY = 101,
+	COW_KSM = 102,
+	ZSWPIN = 103,
+	ZSWPOUT = 104,
+	DIRECT_MAP_LEVEL2_SPLIT = 105,
+	DIRECT_MAP_LEVEL3_SPLIT = 106,
+	NR_VM_EVENT_ITEMS = 107,
 };
 
-typedef void bio_end_io_t(struct bio *);
-
-struct bio_issue {
-	u64 value;
+struct tlb_context {
+	u64 ctx_id;
+	u64 tlb_gen;
 };
 
-struct bio_vec {
-	struct page *bv_page;
-	unsigned int bv_len;
-	unsigned int bv_offset;
-};
-
-struct bio_crypt_ctx;
-
-struct bio_integrity_payload;
-
-struct bio {
-	struct bio *bi_next;
-	struct gendisk *bi_disk;
-	unsigned int bi_opf;
-	short unsigned int bi_flags;
-	short unsigned int bi_ioprio;
-	short unsigned int bi_write_hint;
-	blk_status_t bi_status;
-	u8 bi_partno;
-	atomic_t __bi_remaining;
-	struct bvec_iter bi_iter;
-	bio_end_io_t *bi_end_io;
-	void *bi_private;
-	struct blkcg_gq *bi_blkg;
-	struct bio_issue bi_issue;
-	u64 bi_iocost_cost;
-	struct bio_crypt_ctx *bi_crypt_context;
+struct tlb_state {
+	struct mm_struct *loaded_mm;
 	union {
-		struct bio_integrity_payload *bi_integrity;
+		struct mm_struct *last_user_mm;
+		long unsigned int last_user_mm_spec;
 	};
-	short unsigned int bi_vcnt;
-	short unsigned int bi_max_vecs;
-	atomic_t __bi_cnt;
-	struct bio_vec *bi_io_vec;
-	struct bio_set *bi_pool;
-	struct bio_vec bi_inline_vecs[0];
+	u16 loaded_mm_asid;
+	u16 next_asid;
+	bool invalidate_other;
+	short unsigned int user_pcid_flush_mask;
+	long unsigned int cr4;
+	struct tlb_context ctxs[6];
+};
+
+struct boot_params_to_save {
+	unsigned int start;
+	unsigned int len;
 };
 
 struct kernfs_root;
@@ -5109,19 +4368,7 @@
 	long unsigned int subdirs;
 	struct rb_root children;
 	struct kernfs_root *root;
-};
-
-struct kernfs_syscall_ops;
-
-struct kernfs_root {
-	struct kernfs_node *kn;
-	unsigned int flags;
-	struct idr ino_idr;
-	u32 last_id_lowbits;
-	u32 id_highbits;
-	struct kernfs_syscall_ops *syscall_ops;
-	struct list_head supers;
-	wait_queue_head_t deactivate_waitq;
+	long unsigned int rev;
 };
 
 struct kernfs_elem_symlink {
@@ -5178,14 +4425,6 @@
 	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
 };
 
-struct kernfs_syscall_ops {
-	int (*show_options)(struct seq_file *, struct kernfs_root *);
-	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
-	int (*rmdir)(struct kernfs_node *);
-	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
-	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
-};
-
 struct kernfs_open_file {
 	struct kernfs_node *kn;
 	struct file *file;
@@ -5224,20 +4463,11 @@
 	umode_t mode;
 };
 
-struct bin_attribute;
-
-struct attribute_group {
-	const char *name;
-	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
-	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
-	struct attribute **attrs;
-	struct bin_attribute **bin_attrs;
-};
-
 struct bin_attribute {
 	struct attribute attr;
 	size_t size;
 	void *private;
+	struct address_space * (*f_mapping)();
 	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
 	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
 	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
@@ -5260,7 +4490,6 @@
 struct kobj_type {
 	void (*release)(struct kobject *);
 	const struct sysfs_ops *sysfs_ops;
-	struct attribute **default_attrs;
 	const struct attribute_group **default_groups;
 	const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);
 	const void * (*namespace)(struct kobject *);
@@ -5276,11 +4505,89 @@
 };
 
 struct kset_uevent_ops {
-	int (* const filter)(struct kset *, struct kobject *);
-	const char * (* const name)(struct kset *, struct kobject *);
-	int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);
+	int (* const filter)(struct kobject *);
+	const char * (* const name)(struct kobject *);
+	int (* const uevent)(struct kobject *, struct kobj_uevent_env *);
 };
 
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+typedef __u64 Elf64_Addr;
+
+typedef __u16 Elf64_Half;
+
+typedef __u64 Elf64_Off;
+
+typedef __u32 Elf64_Word;
+
+typedef __u64 Elf64_Xword;
+
+struct elf64_sym {
+	Elf64_Word st_name;
+	unsigned char st_info;
+	unsigned char st_other;
+	Elf64_Half st_shndx;
+	Elf64_Addr st_value;
+	Elf64_Xword st_size;
+};
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
 struct kernel_param_ops {
 	unsigned int flags;
 	int (*set)(const char *, const struct kernel_param *);
@@ -5324,43 +4631,6 @@
 	int etype;
 };
 
-struct tracepoint_func {
-	void *func;
-	void *data;
-	int prio;
-};
-
-struct static_call_key;
-
-struct tracepoint {
-	const char *name;
-	struct static_key key;
-	struct static_call_key *static_call_key;
-	void *static_call_tramp;
-	void *iterator;
-	int (*regfunc)();
-	void (*unregfunc)();
-	struct tracepoint_func *funcs;
-};
-
-struct static_call_key {
-	void *func;
-};
-
-struct bpf_raw_event_map {
-	struct tracepoint *tp;
-	void *bpf_func;
-	u32 num_args;
-	u32 writable_size;
-	long: 64;
-};
-
-struct plt_entry {
-	__le32 adrp;
-	__le32 add;
-	__le32 br;
-};
-
 struct module_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
@@ -5370,6 +4640,1058 @@
 	void (*free)(struct module *);
 };
 
+struct klp_modinfo {
+	Elf64_Ehdr hdr;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	unsigned int symndx;
+};
+
+struct x86_guest {
+	void (*enc_status_change_prepare)(long unsigned int, int, bool);
+	bool (*enc_status_change_finish)(long unsigned int, int, bool);
+	bool (*enc_tlb_flush_required)(bool);
+	bool (*enc_cache_flush_required)();
+};
+
+struct x86_legacy_devices {
+	int pnpbios;
+};
+
+enum x86_legacy_i8042_state {
+	X86_LEGACY_I8042_PLATFORM_ABSENT = 0,
+	X86_LEGACY_I8042_FIRMWARE_ABSENT = 1,
+	X86_LEGACY_I8042_EXPECTED_PRESENT = 2,
+};
+
+struct x86_legacy_features {
+	enum x86_legacy_i8042_state i8042;
+	int rtc;
+	int warm_reset;
+	int no_vga;
+	int reserve_bios_regions;
+	struct x86_legacy_devices devices;
+};
+
+struct ghcb;
+
+struct x86_hyper_runtime {
+	void (*pin_vcpu)(int);
+	void (*sev_es_hcall_prepare)(struct ghcb *, struct pt_regs *);
+	bool (*sev_es_hcall_finish)(struct ghcb *, struct pt_regs *);
+};
+
+struct x86_platform_ops {
+	long unsigned int (*calibrate_cpu)();
+	long unsigned int (*calibrate_tsc)();
+	void (*get_wallclock)(struct timespec64 *);
+	int (*set_wallclock)(const struct timespec64 *);
+	void (*iommu_shutdown)();
+	bool (*is_untracked_pat_range)(u64, u64);
+	void (*nmi_init)();
+	unsigned char (*get_nmi_reason)();
+	void (*save_sched_clock_state)();
+	void (*restore_sched_clock_state)();
+	void (*apic_post_init)();
+	struct x86_legacy_features legacy;
+	void (*set_legacy_features)();
+	struct x86_hyper_runtime hyper;
+	struct x86_guest guest;
+};
+
+typedef __u16 __be16;
+
+typedef __u32 __le32;
+
+typedef __u32 __be32;
+
+typedef __u32 __wsum;
+
+typedef u16 uint16_t;
+
+typedef long unsigned int irq_hw_number_t;
+
+typedef int (*initcall_t)();
+
+typedef int initcall_entry_t;
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+struct static_call_mod {
+	struct static_call_mod *next;
+	struct module *mod;
+	struct static_call_site *sites;
+};
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+typedef struct cpumask *cpumask_var_t;
+
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
+};
+
+struct fixed_percpu_data {
+	char gs_base[40];
+	long unsigned int stack_canary;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = 4294967292,
+	PERF_EVENT_STATE_EXIT = 4294967293,
+	PERF_EVENT_STATE_ERROR = 4294967294,
+	PERF_EVENT_STATE_OFF = 4294967295,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct arch_hw_breakpoint {
+	long unsigned int address;
+	long unsigned int mask;
+	u8 len;
+	u8 type;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			long unsigned int config_base;
+			long unsigned int event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			struct arch_hw_breakpoint info;
+			struct list_head bp_list;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	long unsigned int addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct ftrace_ops;
+
+struct ftrace_regs;
+
+typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);
+
+struct ftrace_hash;
+
+struct ftrace_ops_hash {
+	struct ftrace_hash *notrace_hash;
+	struct ftrace_hash *filter_hash;
+	struct mutex regex_lock;
+};
+
+struct ftrace_ops {
+	ftrace_func_t func;
+	struct ftrace_ops *next;
+	long unsigned int flags;
+	void *private;
+	ftrace_func_t saved_func;
+	struct ftrace_ops_hash local_hash;
+	struct ftrace_ops_hash *func_hash;
+	struct ftrace_ops_hash old_hash;
+	long unsigned int trampoline;
+	long unsigned int trampoline_size;
+	struct list_head list;
+};
+
+struct pmu;
+
+struct perf_buffer;
+
+struct perf_addr_filter_range;
+
+struct bpf_prog;
+
+struct event_filter;
+
+struct perf_cgroup;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	long unsigned int rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	int pending_wakeup;
+	int pending_kill;
+	int pending_disable;
+	long unsigned int pending_addr;
+	struct irq_work pending;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	long unsigned int addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	struct ftrace_ops ftrace_ops;
+	struct perf_cgroup *cgrp;
+	void *security;
+	struct list_head sb_list;
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	long unsigned int flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct key *persistent_keyring_register;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long int ucount_max[16];
+};
+
+struct pollfd {
+	int fd;
+	short int events;
+	short int revents;
+};
+
+struct smp_ops {
+	void (*smp_prepare_boot_cpu)();
+	void (*smp_prepare_cpus)(unsigned int);
+	void (*smp_cpus_done)(unsigned int);
+	void (*stop_other_cpus)(int);
+	void (*crash_stop_other_cpus)();
+	void (*smp_send_reschedule)(int);
+	int (*cpu_up)(unsigned int, struct task_struct *);
+	int (*cpu_disable)();
+	void (*cpu_die)(unsigned int);
+	void (*play_dead)();
+	void (*send_call_func_ipi)(const struct cpumask *);
+	void (*send_call_func_single_ipi)(int);
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct notifier_block;
+
+typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block *next;
+	int priority;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block *head;
+};
+
+struct raw_notifier_head {
+	struct notifier_block *head;
+};
+
+struct ldt_struct {
+	struct desc_struct *entries;
+	unsigned int nr_entries;
+	int slot;
+};
+
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
+
+struct device;
+
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	long unsigned int defer_start;
+	long unsigned int defer_warn;
+	u32 pages_state_hold_cnt;
+	unsigned int frag_offset;
+	struct page *frag_page;
+	long int frag_users;
+	u32 xdp_mem_id;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vmem_altmap {
+	long unsigned int base_pfn;
+	const long unsigned int end_pfn;
+	const long unsigned int reserve;
+	long unsigned int free;
+	long unsigned int align;
+	long unsigned int alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	long unsigned int percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_FS_DAX = 2,
+	MEMORY_DEVICE_GENERIC = 3,
+	MEMORY_DEVICE_PCI_P2PDMA = 4,
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	long unsigned int vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct range ranges[0];
+	};
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	unsigned int degree;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+struct mempolicy {
+	atomic_t refcnt;
+	short unsigned int mode;
+	short unsigned int flags;
+	nodemask_t nodes;
+	int home_node;
+	union {
+		nodemask_t cpuset_mems_allowed;
+		nodemask_t user_nodemask;
+	} w;
+};
+
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	long unsigned int min_coredump;
+};
+
+struct free_area {
+	struct list_head free_list[5];
+	long unsigned int nr_free;
+};
+
+struct zone_padding {
+	char x[0];
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	long unsigned int anon_cost;
+	long unsigned int file_cost;
+	atomic_long_t nonresident_age;
+	long unsigned int refaults[2];
+	long unsigned int flags;
+	struct pglist_data *pgdat;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	long unsigned int _watermark[4];
+	long unsigned int watermark_boost;
+	long unsigned int nr_reserved_highatomic;
+	long int lowmem_reserve[5];
+	int node;
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages *per_cpu_pageset;
+	struct per_cpu_zonestat *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	long unsigned int zone_start_pfn;
+	atomic_long_t managed_pages;
+	long unsigned int spanned_pages;
+	long unsigned int present_pages;
+	long unsigned int present_early_pages;
+	const char *name;
+	long unsigned int nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int initialized;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct free_area free_area[11];
+	long unsigned int flags;
+	spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad2_;
+	long unsigned int percpu_drift_mark;
+	long unsigned int compact_cached_free_pfn;
+	long unsigned int compact_cached_migrate_pfn[2];
+	long unsigned int compact_init_migrate_pfn;
+	long unsigned int compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	short: 16;
+	struct zone_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[6];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[5121];
+};
+
+enum zone_type {
+	ZONE_DMA = 0,
+	ZONE_DMA32 = 1,
+	ZONE_NORMAL = 2,
+	ZONE_MOVABLE = 3,
+	ZONE_DEVICE = 4,
+	__MAX_NR_ZONES = 5,
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	long unsigned int split_queue_len;
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[5];
+	struct zonelist node_zonelists[2];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	long unsigned int node_start_pfn;
+	long unsigned int node_present_pages;
+	long unsigned int node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	long unsigned int nr_reclaim_start;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	long unsigned int totalreserve_pages;
+	long unsigned int min_unmapped_pages;
+	long unsigned int min_slab_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct zone_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	long unsigned int flags;
+	long: 64;
+	struct zone_padding _pad2_;
+	struct per_cpu_nodestat *per_cpu_nodestats;
+	atomic_long_t vm_stat[41];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	int count;
+	int high;
+	int batch;
+	short int free_factor;
+	short int expire;
+	struct list_head lists[15];
+};
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+	long unsigned int vm_numa_event[6];
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[41];
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+};
+
+struct irq_domain_ops;
+
+struct fwnode_handle;
+
+struct irq_domain_chip_generic;
+
+struct irq_data;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct irq_domain *parent;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct mutex revmap_mutex;
+	struct irq_data *revmap[0];
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	struct ctl_table *child;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
 struct trace_event_functions;
 
 struct trace_event {
@@ -5381,6 +5703,8 @@
 
 struct trace_event_class;
 
+struct bpf_prog_array;
+
 struct trace_event_call {
 	struct list_head list;
 	struct trace_event_class *class;
@@ -5391,7 +5715,10 @@
 	struct trace_event event;
 	char *print_fmt;
 	struct event_filter *filter;
-	void *mod;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
 	void *data;
 	int flags;
 	int perf_refcount;
@@ -5406,55 +5733,1012 @@
 	long unsigned int eval_value;
 };
 
-struct linux_binprm {
-	struct vm_area_struct *vma;
-	long unsigned int vma_pages;
-	struct mm_struct *mm;
-	long unsigned int p;
-	long unsigned int argmin;
-	unsigned int have_execfd: 1;
-	unsigned int execfd_creds: 1;
-	unsigned int secureexec: 1;
-	unsigned int point_of_no_return: 1;
-	struct file *executable;
-	struct file *interpreter;
+struct cgroup;
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long unsigned int min;
+	long unsigned int low;
+	long unsigned int high;
+	long unsigned int max;
+	long unsigned int emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	long unsigned int elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	long unsigned int watermark;
+	long unsigned int failcnt;
+	struct page_counter *parent;
+};
+
+struct vmpressure {
+	long unsigned int scanned;
+	long unsigned int reclaimed;
+	long unsigned int tree_scanned;
+	long unsigned int tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	long unsigned int notified_at;
+	struct timer_list notify_timer;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct memcg_padding {
+	char x[0];
+};
+
+struct memcg_vmstats {
+	long int state[48];
+	long unsigned int events[107];
+	long int state_pending[48];
+	long unsigned int events_pending[107];
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	long unsigned int period_time;
+	long unsigned int dirty_limit_tstamp;
+	long unsigned int dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	long unsigned int zswap_max;
+	long unsigned int soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	long unsigned int move_charge_at_immigrate;
+	spinlock_t move_lock;
+	long unsigned int move_lock_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad1_;
+	struct memcg_vmstats vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	long unsigned int socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	struct memcg_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct mem_cgroup_per_node *nodeinfo[0];
+	long: 64;
+};
+
+struct fs_pin;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct fs_pin *bacct;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+};
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[16];
+};
+
+struct rhash_head {
+	struct rhash_head *next;
+};
+
+struct rhashtable;
+
+struct rhashtable_compare_arg {
+	struct rhashtable *ht;
+	const void *key;
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
+
+struct rhashtable_params {
+	u16 nelem_hint;
+	u16 key_len;
+	u16 key_offset;
+	u16 head_offset;
+	unsigned int max_size;
+	u16 min_size;
+	bool automatic_shrinking;
+	rht_hashfn_t hashfn;
+	rht_obj_hashfn_t obj_hashfn;
+	rht_obj_cmpfn_t obj_cmpfn;
+};
+
+struct bucket_table;
+
+struct rhashtable {
+	struct bucket_table *tbl;
+	unsigned int key_len;
+	unsigned int max_elems;
+	struct rhashtable_params p;
+	bool rhlist;
+	struct work_struct run_work;
+	struct mutex mutex;
+	spinlock_t lock;
+	atomic_t nelems;
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	long long unsigned int sum_exec_runtime;
+};
+
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct net;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	atomic_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+struct request;
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	short unsigned int nr_ios;
+	short unsigned int rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	bool nowait;
+	struct list_head cb_list;
+};
+
+struct reclaim_state {
+	long unsigned int reclaimed_slab;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	long unsigned int state;
+	long unsigned int last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	long unsigned int congested;
+	long unsigned int bw_time_stamp;
+	long unsigned int dirtied_stamp;
+	long unsigned int written_stamp;
+	long unsigned int write_bandwidth;
+	long unsigned int avg_write_bandwidth;
+	long unsigned int dirty_ratelimit;
+	long unsigned int balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	long unsigned int dirty_sleep;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	long unsigned int ra_pages;
+	long unsigned int io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+};
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[14];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[14];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+typedef u32 compat_uptr_t;
+
+struct compat_robust_list {
+	compat_uptr_t next;
+};
+
+typedef s32 compat_long_t;
+
+struct compat_robust_list_head {
+	struct compat_robust_list list;
+	compat_long_t futex_offset;
+	compat_uptr_t list_op_pending;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+struct perf_event_context {
+	struct pmu *pmu;
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head active_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	int nr_events;
+	int nr_active;
+	int nr_user;
+	int is_active;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	int rotate_necessary;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	int nr_cgroups;
+	void *task_ctx_data;
+	struct callback_head callback_head;
+};
+
+struct pipe_buffer;
+
+struct watch_queue;
+
+struct pipe_inode_info {
+	struct mutex mutex;
+	wait_queue_head_t rd_wait;
+	wait_queue_head_t wr_wait;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int max_usage;
+	unsigned int ring_size;
+	bool note_loss;
+	unsigned int nr_accounted;
+	unsigned int readers;
+	unsigned int writers;
+	unsigned int files;
+	unsigned int r_counter;
+	unsigned int w_counter;
+	bool poll_usage;
+	struct page *tmp_page;
+	struct fasync_struct *fasync_readers;
+	struct fasync_struct *fasync_writers;
+	struct pipe_buffer *bufs;
+	struct user_struct *user;
+	struct watch_queue *watch_queue;
+};
+
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
+};
+
+struct ftrace_ret_stack {
+	long unsigned int ret;
+	long unsigned int func;
+	long long unsigned int calltime;
+	long long unsigned int subtime;
+	long unsigned int *retp;
+};
+
+struct blk_integrity_profile;
+
+struct blk_integrity {
+	const struct blk_integrity_profile *profile;
+	unsigned char flags;
+	unsigned char tuple_size;
+	unsigned char interval_exp;
+	unsigned char tag_size;
+};
+
+enum rpm_status {
+	RPM_INVALID = 4294967295,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	long unsigned int seg_boundary_mask;
+	long unsigned int virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	short unsigned int max_segments;
+	short unsigned int max_integrity_segments;
+	short unsigned int max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	enum blk_zoned_model zoned;
+};
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	mempool_t bio_integrity_pool;
+	mempool_t bvec_integrity_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct gendisk;
+
+struct blk_crypto_profile;
+
+struct blk_stat_callback;
+
+struct blk_rq_stat;
+
+struct blk_mq_tags;
+
+struct blkcg_gq;
+
+struct blk_trace;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct blk_independent_access_ranges;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	long unsigned int queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	struct kobject kobj;
+	struct kobject *mq_kobj;
+	struct blk_integrity integrity;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	long unsigned int nr_requests;
+	unsigned int dma_pad_mask;
+	unsigned int dma_alignment;
+	struct blk_crypto_profile *crypto_profile;
+	struct kobject *crypto_kobject;
+	unsigned int rq_timeout;
+	int poll_nsec;
+	struct blk_stat_callback *poll_cb;
+	struct blk_rq_stat *poll_stat;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	long unsigned int blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	unsigned int nr_zones;
+	long unsigned int *conv_zones_bitmap;
+	long unsigned int *seq_zones_wlock;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	int node;
+	struct mutex debugfs_mutex;
+	struct blk_trace *blk_trace;
+	struct blk_flush_queue *fq;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct bio_set bio_split;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	bool mq_sysfs_init_done;
+	struct blk_independent_access_ranges *ia_ranges;
+	struct srcu_struct srcu[0];
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+};
+
+struct psi_group_cpu;
+
+struct psi_group {
+	struct mutex avgs_lock;
+	struct psi_group_cpu *pcpu;
+	u64 avg_total[6];
+	u64 avg_last_update;
+	u64 avg_next_update;
+	struct delayed_work avgs_work;
+	u64 total[12];
+	long unsigned int avg[18];
+	struct task_struct *poll_task;
+	struct timer_list poll_timer;
+	wait_queue_head_t poll_wait;
+	atomic_t poll_wakeup;
+	struct mutex trigger_lock;
+	struct list_head triggers;
+	u32 nr_triggers[6];
+	u32 poll_states;
+	u64 poll_min_period;
+	u64 polling_total[6];
+	u64 polling_next_update;
+	u64 polling_until;
+};
+
+struct cgroup_bpf {
+	struct bpf_prog_array *effective[23];
+	struct list_head progs[23];
+	u32 flags[23];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	long unsigned int flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state *subsys[14];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[14];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	u64 ancestor_ids[0];
+};
+
+struct taskstats {
+	__u16 version;
+	__u32 ac_exitcode;
+	__u8 ac_flag;
+	__u8 ac_nice;
+	__u64 cpu_count;
+	__u64 cpu_delay_total;
+	__u64 blkio_count;
+	__u64 blkio_delay_total;
+	__u64 swapin_count;
+	__u64 swapin_delay_total;
+	__u64 cpu_run_real_total;
+	__u64 cpu_run_virtual_total;
+	char ac_comm[32];
+	__u8 ac_sched;
+	__u8 ac_pad[3];
+	int: 32;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u64 ac_etime;
+	__u64 ac_utime;
+	__u64 ac_stime;
+	__u64 ac_minflt;
+	__u64 ac_majflt;
+	__u64 coremem;
+	__u64 virtmem;
+	__u64 hiwater_rss;
+	__u64 hiwater_vm;
+	__u64 read_char;
+	__u64 write_char;
+	__u64 read_syscalls;
+	__u64 write_syscalls;
+	__u64 read_bytes;
+	__u64 write_bytes;
+	__u64 cancelled_write_bytes;
+	__u64 nvcsw;
+	__u64 nivcsw;
+	__u64 ac_utimescaled;
+	__u64 ac_stimescaled;
+	__u64 cpu_scaled_run_real_total;
+	__u64 freepages_count;
+	__u64 freepages_delay_total;
+	__u64 thrashing_count;
+	__u64 thrashing_delay_total;
+	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long int nr_to_write;
+	long int pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	unsigned int punt_to_cgroup: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+struct readahead_control {
 	struct file *file;
-	struct cred *cred;
-	int unsafe;
-	unsigned int per_clear;
-	int argc;
-	int envc;
-	const char *filename;
-	const char *interp;
-	const char *fdpath;
-	unsigned int interp_flags;
-	int execfd;
-	long unsigned int loader;
-	long unsigned int exec;
-	struct rlimit rlim_stack;
-	char buf[256];
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	long unsigned int _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
 };
 
-struct coredump_params {
-	const kernel_siginfo_t *siginfo;
-	struct pt_regs *regs;
-	struct file *file;
-	long unsigned int limit;
-	long unsigned int mm_flags;
-	loff_t written;
-	loff_t pos;
+struct iovec;
+
+struct kvec;
+
+struct bio_vec;
+
+struct iov_iter {
+	u8 iter_type;
+	bool nofault;
+	bool data_source;
+	size_t iov_offset;
+	size_t count;
+	union {
+		const struct iovec *iov;
+		const struct kvec *kvec;
+		const struct bio_vec *bvec;
+		struct xarray *xarray;
+		struct pipe_inode_info *pipe;
+	};
+	union {
+		long unsigned int nr_segs;
+		struct {
+			unsigned int head;
+			unsigned int start_head;
+		};
+		loff_t xarray_start;
+	};
 };
 
-struct em_perf_state {
-	long unsigned int frequency;
-	long unsigned int power;
-	long unsigned int cost;
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int data: 24;
+	unsigned int flags: 8;
 };
 
-struct em_perf_domain {
-	struct em_perf_state *table;
-	int nr_perf_states;
-	long unsigned int cpus[0];
+struct swap_cluster_list {
+	struct swap_cluster_info head;
+	struct swap_cluster_info tail;
+};
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	long unsigned int flags;
+	short int prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct swap_cluster_list free_clusters;
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int *cluster_next_cpu;
+	struct percpu_cluster *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	long unsigned int *frontswap_map;
+	atomic_t frontswap_pages;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct swap_cluster_list discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
 };
 
 enum dl_dev_state {
@@ -5467,9 +6751,7 @@
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
-	struct list_head needs_suppliers;
-	struct list_head defer_hook;
-	bool need_for_probe;
+	struct list_head defer_sync;
 	enum dl_dev_state status;
 };
 
@@ -5528,6 +6810,7 @@
 	unsigned int idle_notification: 1;
 	unsigned int request_pending: 1;
 	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
 	unsigned int runtime_auto: 1;
 	bool ignore_children: 1;
 	unsigned int no_callbacks: 1;
@@ -5538,6 +6821,7 @@
 	unsigned int links_count;
 	enum rpm_request request;
 	enum rpm_status runtime_status;
+	enum rpm_status last_status;
 	int runtime_error;
 	int autosuspend_delay;
 	u64 last_busy;
@@ -5549,8 +6833,22 @@
 	struct dev_pm_qos *qos;
 };
 
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
 struct dev_archdata {};
 
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
 struct device_private;
 
 struct device_type;
@@ -5561,7 +6859,7 @@
 
 struct dev_pm_domain;
 
-struct irq_domain;
+struct em_perf_domain;
 
 struct dev_pin_info;
 
@@ -5571,20 +6869,18 @@
 
 struct device_dma_parameters;
 
-struct dma_coherent_mem;
-
-struct cma;
+struct io_tlb_mem;
 
 struct device_node;
 
-struct fwnode_handle;
-
 struct class;
 
 struct iommu_group;
 
 struct dev_iommu;
 
+struct device_physical_location;
+
 struct device {
 	struct kobject kobj;
 	struct device *parent;
@@ -5600,9 +6896,8 @@
 	struct dev_pm_info power;
 	struct dev_pm_domain *pm_domain;
 	struct em_perf_domain *em_pd;
-	struct irq_domain *msi_domain;
 	struct dev_pin_info *pins;
-	struct list_head msi_list;
+	struct dev_msi_info msi;
 	const struct dma_map_ops *dma_ops;
 	u64 *dma_mask;
 	u64 coherent_dma_mask;
@@ -5610,8 +6905,7 @@
 	const struct bus_dma_region *dma_range_map;
 	struct device_dma_parameters *dma_parms;
 	struct list_head dma_pools;
-	struct dma_coherent_mem *dma_mem;
-	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
 	struct dev_archdata archdata;
 	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
@@ -5625,11 +6919,206 @@
 	void (*release)(struct device *);
 	struct iommu_group *iommu_group;
 	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
 	bool offline_disabled: 1;
 	bool offline: 1;
 	bool of_node_reused: 1;
 	bool state_synced: 1;
-	bool dma_coherent: 1;
+	bool can_match: 1;
+};
+
+struct disk_stats;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct disk_stats *bd_stats;
+	long unsigned int bd_stamp;
+	bool bd_read_only;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	struct inode *bd_inode;
+	struct super_block *bd_super;
+	void *bd_claiming;
+	struct device bd_device;
+	void *bd_holder;
+	int bd_holders;
+	bool bd_write_holder;
+	struct kobject *bd_holder_dir;
+	u8 bd_partno;
+	spinlock_t bd_size_lock;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	int bd_fsfreeze_count;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+};
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	unsigned int lsm_flags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char *uptr;
+	int refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+typedef u8 blk_status_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct bio_crypt_ctx;
+
+struct bio_integrity_payload;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	unsigned int bi_opf;
+	short unsigned int bi_flags;
+	short unsigned int bi_ioprio;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	struct bio_crypt_ctx *bi_crypt_context;
+	union {
+		struct bio_integrity_payload *bi_integrity;
+	};
+	short unsigned int bi_vcnt;
+	short unsigned int bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	long unsigned int vma_pages;
+	struct mm_struct *mm;
+	long unsigned int p;
+	long unsigned int argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	long unsigned int loader;
+	long unsigned int exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+struct em_perf_state {
+	long unsigned int frequency;
+	long unsigned int power;
+	long unsigned int cost;
+	long unsigned int flags;
+};
+
+struct em_perf_domain {
+	struct em_perf_state *table;
+	int nr_perf_states;
+	long unsigned int flags;
+	long unsigned int cpus[0];
 };
 
 struct dev_pm_ops {
@@ -5663,6 +7152,8 @@
 struct pm_subsys_data {
 	spinlock_t lock;
 	unsigned int refcount;
+	unsigned int clock_op_might_sleep;
+	struct mutex clock_mutex;
 	struct list_head clock_list;
 	struct pm_domain_data *domain_data;
 };
@@ -5714,7 +7205,7 @@
 	int (*uevent)(struct device *, struct kobj_uevent_env *);
 	int (*probe)(struct device *);
 	void (*sync_state)(struct device *);
-	int (*remove)(struct device *);
+	void (*remove)(struct device *);
 	void (*shutdown)(struct device *);
 	int (*online)(struct device *);
 	int (*offline)(struct device *);
@@ -5722,6 +7213,7 @@
 	int (*resume)(struct device *);
 	int (*num_vf)(struct device *);
 	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
 	const struct dev_pm_ops *pm;
 	const struct iommu_ops *iommu_ops;
 	struct subsys_private *p;
@@ -5767,33 +7259,18 @@
 	IOMMU_CAP_CACHE_COHERENCY = 0,
 	IOMMU_CAP_INTR_REMAP = 1,
 	IOMMU_CAP_NOEXEC = 2,
-};
-
-enum iommu_attr {
-	DOMAIN_ATTR_GEOMETRY = 0,
-	DOMAIN_ATTR_PAGING = 1,
-	DOMAIN_ATTR_WINDOWS = 2,
-	DOMAIN_ATTR_FSL_PAMU_STASH = 3,
-	DOMAIN_ATTR_FSL_PAMU_ENABLE = 4,
-	DOMAIN_ATTR_FSL_PAMUV1 = 5,
-	DOMAIN_ATTR_NESTING = 6,
-	DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,
-	DOMAIN_ATTR_MAX = 8,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 3,
 };
 
 enum iommu_dev_features {
-	IOMMU_DEV_FEAT_AUX = 0,
-	IOMMU_DEV_FEAT_SVA = 1,
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
 };
 
 struct iommu_domain;
 
-struct iommu_iotlb_gather;
-
 struct iommu_device;
 
-struct iommu_resv_region;
-
 struct of_phandle_args;
 
 struct iommu_sva;
@@ -5802,50 +7279,29 @@
 
 struct iommu_page_response;
 
-struct iommu_cache_invalidate_info;
-
-struct iommu_gpasid_bind_data;
+struct iommu_domain_ops;
 
 struct iommu_ops {
 	bool (*capable)(enum iommu_cap);
 	struct iommu_domain * (*domain_alloc)(unsigned int);
-	void (*domain_free)(struct iommu_domain *);
-	int (*attach_dev)(struct iommu_domain *, struct device *);
-	void (*detach_dev)(struct iommu_domain *, struct device *);
-	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
-	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
-	void (*flush_iotlb_all)(struct iommu_domain *);
-	void (*iotlb_sync_map)(struct iommu_domain *);
-	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
-	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
 	struct iommu_device * (*probe_device)(struct device *);
 	void (*release_device)(struct device *);
 	void (*probe_finalize)(struct device *);
 	struct iommu_group * (*device_group)(struct device *);
-	int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
-	int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
 	void (*get_resv_regions)(struct device *, struct list_head *);
 	void (*put_resv_regions)(struct device *, struct list_head *);
-	void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
-	int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
-	void (*domain_window_disable)(struct iommu_domain *, u32);
 	int (*of_xlate)(struct device *, struct of_phandle_args *);
-	bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
+	bool (*is_attach_deferred)(struct device *);
 	bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
 	bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
 	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
 	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
-	int (*aux_attach_dev)(struct iommu_domain *, struct device *);
-	void (*aux_detach_dev)(struct iommu_domain *, struct device *);
-	int (*aux_get_pasid)(struct iommu_domain *, struct device *);
 	struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
 	void (*sva_unbind)(struct iommu_sva *);
 	u32 (*sva_get_pasid)(struct iommu_sva *);
 	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
-	int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
-	int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
-	int (*sva_unbind_gpasid)(struct device *, u32);
 	int (*def_domain_type)(struct device *);
+	const struct iommu_domain_ops *default_domain_ops;
 	long unsigned int pgsize_bitmap;
 	struct module *owner;
 };
@@ -5887,7 +7343,7 @@
 typedef long unsigned int kernel_ulong_t;
 
 struct acpi_device_id {
-	__u8 id[9];
+	__u8 id[16];
 	kernel_ulong_t driver_data;
 	__u32 cls;
 	__u32 cls_msk;
@@ -5895,53 +7351,42 @@
 
 struct device_dma_parameters {
 	unsigned int max_segment_size;
+	unsigned int min_align_mask;
 	long unsigned int segment_boundary_mask;
 };
 
-enum irq_domain_bus_token {
-	DOMAIN_BUS_ANY = 0,
-	DOMAIN_BUS_WIRED = 1,
-	DOMAIN_BUS_GENERIC_MSI = 2,
-	DOMAIN_BUS_PCI_MSI = 3,
-	DOMAIN_BUS_PLATFORM_MSI = 4,
-	DOMAIN_BUS_NEXUS = 5,
-	DOMAIN_BUS_IPI = 6,
-	DOMAIN_BUS_FSL_MC_MSI = 7,
-	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
-	DOMAIN_BUS_WAKEUP = 9,
-	DOMAIN_BUS_VMD_MSI = 10,
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
 };
 
-struct irq_domain_ops;
-
-struct irq_domain_chip_generic;
-
-struct irq_domain {
-	struct list_head link;
-	const char *name;
-	const struct irq_domain_ops *ops;
-	void *host_data;
-	unsigned int flags;
-	unsigned int mapcount;
-	struct fwnode_handle *fwnode;
-	enum irq_domain_bus_token bus_token;
-	struct irq_domain_chip_generic *gc;
-	struct irq_domain *parent;
-	irq_hw_number_t hwirq_max;
-	unsigned int revmap_direct_max_irq;
-	unsigned int revmap_size;
-	struct xarray revmap_tree;
-	struct mutex revmap_tree_mutex;
-	unsigned int linear_revmap[0];
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
 };
 
-enum dma_data_direction {
-	DMA_BIDIRECTIONAL = 0,
-	DMA_TO_DEVICE = 1,
-	DMA_FROM_DEVICE = 2,
-	DMA_NONE = 3,
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
 };
 
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
+};
+
+typedef u64 dma_addr_t;
+
 struct sg_table;
 
 struct scatterlist;
@@ -5951,8 +7396,8 @@
 	void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);
 	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
 	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
-	void * (*alloc_noncoherent)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
-	void (*free_noncoherent)(struct device *, size_t, void *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
 	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);
 	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);
 	dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);
@@ -5987,6 +7432,9 @@
 	struct fwnode_handle *secondary;
 	const struct fwnode_operations *ops;
 	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
 };
 
 struct property;
@@ -6001,7 +7449,6 @@
 	struct device_node *parent;
 	struct device_node *child;
 	struct device_node *sibling;
-	struct kobject kobj;
 	long unsigned int _flags;
 	void *data;
 };
@@ -6022,286 +7469,180 @@
 	CPUHP_SLUB_DEAD = 11,
 	CPUHP_DEBUG_OBJ_DEAD = 12,
 	CPUHP_MM_WRITEBACK_DEAD = 13,
-	CPUHP_MM_VMSTAT_DEAD = 14,
-	CPUHP_SOFTIRQ_DEAD = 15,
-	CPUHP_NET_MVNETA_DEAD = 16,
-	CPUHP_CPUIDLE_DEAD = 17,
-	CPUHP_ARM64_FPSIMD_DEAD = 18,
-	CPUHP_ARM_OMAP_WAKE_DEAD = 19,
-	CPUHP_IRQ_POLL_DEAD = 20,
-	CPUHP_BLOCK_SOFTIRQ_DEAD = 21,
-	CPUHP_ACPI_CPUDRV_DEAD = 22,
-	CPUHP_S390_PFAULT_DEAD = 23,
-	CPUHP_BLK_MQ_DEAD = 24,
-	CPUHP_FS_BUFF_DEAD = 25,
-	CPUHP_PRINTK_DEAD = 26,
-	CPUHP_MM_MEMCQ_DEAD = 27,
-	CPUHP_PERCPU_CNT_DEAD = 28,
-	CPUHP_RADIX_DEAD = 29,
-	CPUHP_PAGE_ALLOC_DEAD = 30,
-	CPUHP_NET_DEV_DEAD = 31,
-	CPUHP_PCI_XGENE_DEAD = 32,
-	CPUHP_IOMMU_INTEL_DEAD = 33,
-	CPUHP_LUSTRE_CFS_DEAD = 34,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,
-	CPUHP_PADATA_DEAD = 36,
-	CPUHP_WORKQUEUE_PREP = 37,
-	CPUHP_POWER_NUMA_PREPARE = 38,
-	CPUHP_HRTIMERS_PREPARE = 39,
-	CPUHP_PROFILE_PREPARE = 40,
-	CPUHP_X2APIC_PREPARE = 41,
-	CPUHP_SMPCFD_PREPARE = 42,
-	CPUHP_RELAY_PREPARE = 43,
-	CPUHP_SLAB_PREPARE = 44,
-	CPUHP_MD_RAID5_PREPARE = 45,
-	CPUHP_RCUTREE_PREP = 46,
-	CPUHP_CPUIDLE_COUPLED_PREPARE = 47,
-	CPUHP_POWERPC_PMAC_PREPARE = 48,
-	CPUHP_POWERPC_MMU_CTX_PREPARE = 49,
-	CPUHP_XEN_PREPARE = 50,
-	CPUHP_XEN_EVTCHN_PREPARE = 51,
-	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,
-	CPUHP_SH_SH3X_PREPARE = 53,
-	CPUHP_NET_FLOW_PREPARE = 54,
-	CPUHP_TOPOLOGY_PREPARE = 55,
-	CPUHP_NET_IUCV_PREPARE = 56,
-	CPUHP_ARM_BL_PREPARE = 57,
-	CPUHP_TRACE_RB_PREPARE = 58,
-	CPUHP_MM_ZS_PREPARE = 59,
-	CPUHP_MM_ZSWP_MEM_PREPARE = 60,
-	CPUHP_MM_ZSWP_POOL_PREPARE = 61,
-	CPUHP_KVM_PPC_BOOK3S_PREPARE = 62,
-	CPUHP_ZCOMP_PREPARE = 63,
-	CPUHP_TIMERS_PREPARE = 64,
-	CPUHP_MIPS_SOC_PREPARE = 65,
-	CPUHP_BP_PREPARE_DYN = 66,
-	CPUHP_BP_PREPARE_DYN_END = 86,
-	CPUHP_BRINGUP_CPU = 87,
-	CPUHP_AP_IDLE_DEAD = 88,
-	CPUHP_AP_OFFLINE = 89,
-	CPUHP_AP_SCHED_STARTING = 90,
-	CPUHP_AP_RCUTREE_DYING = 91,
-	CPUHP_AP_CPU_PM_STARTING = 92,
-	CPUHP_AP_IRQ_GIC_STARTING = 93,
-	CPUHP_AP_IRQ_HIP04_STARTING = 94,
-	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 95,
-	CPUHP_AP_IRQ_BCM2836_STARTING = 96,
-	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 97,
-	CPUHP_AP_IRQ_RISCV_STARTING = 98,
-	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 99,
-	CPUHP_AP_ARM_MVEBU_COHERENCY = 100,
-	CPUHP_AP_MICROCODE_LOADER = 101,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 102,
-	CPUHP_AP_PERF_X86_STARTING = 103,
-	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 104,
-	CPUHP_AP_PERF_X86_CQM_STARTING = 105,
-	CPUHP_AP_PERF_X86_CSTATE_STARTING = 106,
-	CPUHP_AP_PERF_XTENSA_STARTING = 107,
-	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 108,
-	CPUHP_AP_ARM_SDEI_STARTING = 109,
-	CPUHP_AP_ARM_VFP_STARTING = 110,
-	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,
-	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,
-	CPUHP_AP_PERF_ARM_ACPI_STARTING = 113,
-	CPUHP_AP_PERF_ARM_STARTING = 114,
-	CPUHP_AP_ARM_L2X0_STARTING = 115,
-	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 116,
-	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 117,
-	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 118,
-	CPUHP_AP_JCORE_TIMER_STARTING = 119,
-	CPUHP_AP_ARM_TWD_STARTING = 120,
-	CPUHP_AP_QCOM_TIMER_STARTING = 121,
-	CPUHP_AP_TEGRA_TIMER_STARTING = 122,
-	CPUHP_AP_ARMADA_TIMER_STARTING = 123,
-	CPUHP_AP_MARCO_TIMER_STARTING = 124,
-	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 125,
-	CPUHP_AP_ARC_TIMER_STARTING = 126,
-	CPUHP_AP_RISCV_TIMER_STARTING = 127,
-	CPUHP_AP_CLINT_TIMER_STARTING = 128,
-	CPUHP_AP_CSKY_TIMER_STARTING = 129,
-	CPUHP_AP_HYPERV_TIMER_STARTING = 130,
-	CPUHP_AP_KVM_STARTING = 131,
-	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 132,
-	CPUHP_AP_KVM_ARM_VGIC_STARTING = 133,
-	CPUHP_AP_KVM_ARM_TIMER_STARTING = 134,
-	CPUHP_AP_DUMMY_TIMER_STARTING = 135,
-	CPUHP_AP_ARM_XEN_STARTING = 136,
-	CPUHP_AP_ARM_CORESIGHT_STARTING = 137,
-	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,
-	CPUHP_AP_ARM64_ISNDEP_STARTING = 139,
-	CPUHP_AP_SMPCFD_DYING = 140,
-	CPUHP_AP_X86_TBOOT_DYING = 141,
-	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 142,
-	CPUHP_AP_ONLINE = 143,
-	CPUHP_TEARDOWN_CPU = 144,
-	CPUHP_AP_ONLINE_IDLE = 145,
-	CPUHP_AP_SMPBOOT_THREADS = 146,
-	CPUHP_AP_X86_VDSO_VMA_ONLINE = 147,
-	CPUHP_AP_IRQ_AFFINITY_ONLINE = 148,
-	CPUHP_AP_BLK_MQ_ONLINE = 149,
-	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 150,
-	CPUHP_AP_X86_INTEL_EPB_ONLINE = 151,
-	CPUHP_AP_PERF_ONLINE = 152,
-	CPUHP_AP_PERF_X86_ONLINE = 153,
-	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 154,
-	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 155,
-	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 156,
-	CPUHP_AP_PERF_X86_RAPL_ONLINE = 157,
-	CPUHP_AP_PERF_X86_CQM_ONLINE = 158,
-	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 159,
-	CPUHP_AP_PERF_S390_CF_ONLINE = 160,
-	CPUHP_AP_PERF_S390_SF_ONLINE = 161,
-	CPUHP_AP_PERF_ARM_CCI_ONLINE = 162,
-	CPUHP_AP_PERF_ARM_CCN_ONLINE = 163,
-	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 164,
-	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 165,
-	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 166,
-	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 167,
-	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 168,
-	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 169,
-	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 170,
-	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 171,
-	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 172,
-	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 173,
-	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 174,
-	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 175,
-	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 176,
-	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 177,
-	CPUHP_AP_WATCHDOG_ONLINE = 178,
-	CPUHP_AP_WORKQUEUE_ONLINE = 179,
-	CPUHP_AP_RCUTREE_ONLINE = 180,
-	CPUHP_AP_BASE_CACHEINFO_ONLINE = 181,
-	CPUHP_AP_ONLINE_DYN = 182,
-	CPUHP_AP_ONLINE_DYN_END = 212,
-	CPUHP_AP_X86_HPET_ONLINE = 213,
-	CPUHP_AP_X86_KVM_CLK_ONLINE = 214,
-	CPUHP_AP_ACTIVE = 215,
-	CPUHP_ONLINE = 216,
-};
-
-typedef void percpu_ref_func_t(struct percpu_ref *);
-
-struct percpu_ref_data {
-	atomic_long_t count;
-	percpu_ref_func_t *release;
-	percpu_ref_func_t *confirm_switch;
-	bool force_atomic: 1;
-	bool allow_reinit: 1;
-	struct callback_head rcu;
-	struct percpu_ref *ref;
-};
-
-struct dev_pagemap_ops {
-	void (*page_free)(struct page *);
-	void (*kill)(struct dev_pagemap *);
-	void (*cleanup)(struct dev_pagemap *);
-	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
-};
-
-enum vm_event_item {
-	PGPGIN = 0,
-	PGPGOUT = 1,
-	PSWPIN = 2,
-	PSWPOUT = 3,
-	PGALLOC_DMA = 4,
-	PGALLOC_DMA32 = 5,
-	PGALLOC_NORMAL = 6,
-	PGALLOC_MOVABLE = 7,
-	ALLOCSTALL_DMA = 8,
-	ALLOCSTALL_DMA32 = 9,
-	ALLOCSTALL_NORMAL = 10,
-	ALLOCSTALL_MOVABLE = 11,
-	PGSCAN_SKIP_DMA = 12,
-	PGSCAN_SKIP_DMA32 = 13,
-	PGSCAN_SKIP_NORMAL = 14,
-	PGSCAN_SKIP_MOVABLE = 15,
-	PGFREE = 16,
-	PGACTIVATE = 17,
-	PGDEACTIVATE = 18,
-	PGLAZYFREE = 19,
-	PGFAULT = 20,
-	PGMAJFAULT = 21,
-	PGLAZYFREED = 22,
-	PGREFILL = 23,
-	PGREUSE = 24,
-	PGSTEAL_KSWAPD = 25,
-	PGSTEAL_DIRECT = 26,
-	PGSCAN_KSWAPD = 27,
-	PGSCAN_DIRECT = 28,
-	PGSCAN_DIRECT_THROTTLE = 29,
-	PGSCAN_ANON = 30,
-	PGSCAN_FILE = 31,
-	PGSTEAL_ANON = 32,
-	PGSTEAL_FILE = 33,
-	PGSCAN_ZONE_RECLAIM_FAILED = 34,
-	PGINODESTEAL = 35,
-	SLABS_SCANNED = 36,
-	KSWAPD_INODESTEAL = 37,
-	KSWAPD_LOW_WMARK_HIT_QUICKLY = 38,
-	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 39,
-	PAGEOUTRUN = 40,
-	PGROTATED = 41,
-	DROP_PAGECACHE = 42,
-	DROP_SLAB = 43,
-	OOM_KILL = 44,
-	NUMA_PTE_UPDATES = 45,
-	NUMA_HUGE_PTE_UPDATES = 46,
-	NUMA_HINT_FAULTS = 47,
-	NUMA_HINT_FAULTS_LOCAL = 48,
-	NUMA_PAGE_MIGRATE = 49,
-	PGMIGRATE_SUCCESS = 50,
-	PGMIGRATE_FAIL = 51,
-	THP_MIGRATION_SUCCESS = 52,
-	THP_MIGRATION_FAIL = 53,
-	THP_MIGRATION_SPLIT = 54,
-	COMPACTMIGRATE_SCANNED = 55,
-	COMPACTFREE_SCANNED = 56,
-	COMPACTISOLATED = 57,
-	COMPACTSTALL = 58,
-	COMPACTFAIL = 59,
-	COMPACTSUCCESS = 60,
-	KCOMPACTD_WAKE = 61,
-	KCOMPACTD_MIGRATE_SCANNED = 62,
-	KCOMPACTD_FREE_SCANNED = 63,
-	HTLB_BUDDY_PGALLOC = 64,
-	HTLB_BUDDY_PGALLOC_FAIL = 65,
-	UNEVICTABLE_PGCULLED = 66,
-	UNEVICTABLE_PGSCANNED = 67,
-	UNEVICTABLE_PGRESCUED = 68,
-	UNEVICTABLE_PGMLOCKED = 69,
-	UNEVICTABLE_PGMUNLOCKED = 70,
-	UNEVICTABLE_PGCLEARED = 71,
-	UNEVICTABLE_PGSTRANDED = 72,
-	THP_FAULT_ALLOC = 73,
-	THP_FAULT_FALLBACK = 74,
-	THP_FAULT_FALLBACK_CHARGE = 75,
-	THP_COLLAPSE_ALLOC = 76,
-	THP_COLLAPSE_ALLOC_FAILED = 77,
-	THP_FILE_ALLOC = 78,
-	THP_FILE_FALLBACK = 79,
-	THP_FILE_FALLBACK_CHARGE = 80,
-	THP_FILE_MAPPED = 81,
-	THP_SPLIT_PAGE = 82,
-	THP_SPLIT_PAGE_FAILED = 83,
-	THP_DEFERRED_SPLIT_PAGE = 84,
-	THP_SPLIT_PMD = 85,
-	THP_ZERO_PAGE_ALLOC = 86,
-	THP_ZERO_PAGE_ALLOC_FAILED = 87,
-	THP_SWPOUT = 88,
-	THP_SWPOUT_FALLBACK = 89,
-	BALLOON_INFLATE = 90,
-	BALLOON_DEFLATE = 91,
-	BALLOON_MIGRATE = 92,
-	SWAP_RA = 93,
-	SWAP_RA_HIT = 94,
-	NR_VM_EVENT_ITEMS = 95,
-};
-
-struct seq_operations {
-	void * (*start)(struct seq_file *, loff_t *);
-	void (*stop)(struct seq_file *, void *);
-	void * (*next)(struct seq_file *, void *, loff_t *);
-	int (*show)(struct seq_file *, void *);
+	CPUHP_MM_DEMOTION_DEAD = 14,
+	CPUHP_MM_VMSTAT_DEAD = 15,
+	CPUHP_SOFTIRQ_DEAD = 16,
+	CPUHP_NET_MVNETA_DEAD = 17,
+	CPUHP_CPUIDLE_DEAD = 18,
+	CPUHP_ARM64_FPSIMD_DEAD = 19,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 20,
+	CPUHP_IRQ_POLL_DEAD = 21,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 22,
+	CPUHP_BIO_DEAD = 23,
+	CPUHP_ACPI_CPUDRV_DEAD = 24,
+	CPUHP_S390_PFAULT_DEAD = 25,
+	CPUHP_BLK_MQ_DEAD = 26,
+	CPUHP_FS_BUFF_DEAD = 27,
+	CPUHP_PRINTK_DEAD = 28,
+	CPUHP_MM_MEMCQ_DEAD = 29,
+	CPUHP_XFS_DEAD = 30,
+	CPUHP_PERCPU_CNT_DEAD = 31,
+	CPUHP_RADIX_DEAD = 32,
+	CPUHP_PAGE_ALLOC = 33,
+	CPUHP_NET_DEV_DEAD = 34,
+	CPUHP_PCI_XGENE_DEAD = 35,
+	CPUHP_IOMMU_IOVA_DEAD = 36,
+	CPUHP_LUSTRE_CFS_DEAD = 37,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38,
+	CPUHP_PADATA_DEAD = 39,
+	CPUHP_AP_DTPM_CPU_DEAD = 40,
+	CPUHP_RANDOM_PREPARE = 41,
+	CPUHP_WORKQUEUE_PREP = 42,
+	CPUHP_POWER_NUMA_PREPARE = 43,
+	CPUHP_HRTIMERS_PREPARE = 44,
+	CPUHP_PROFILE_PREPARE = 45,
+	CPUHP_X2APIC_PREPARE = 46,
+	CPUHP_SMPCFD_PREPARE = 47,
+	CPUHP_RELAY_PREPARE = 48,
+	CPUHP_SLAB_PREPARE = 49,
+	CPUHP_MD_RAID5_PREPARE = 50,
+	CPUHP_RCUTREE_PREP = 51,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 52,
+	CPUHP_POWERPC_PMAC_PREPARE = 53,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 54,
+	CPUHP_XEN_PREPARE = 55,
+	CPUHP_XEN_EVTCHN_PREPARE = 56,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 57,
+	CPUHP_SH_SH3X_PREPARE = 58,
+	CPUHP_NET_FLOW_PREPARE = 59,
+	CPUHP_TOPOLOGY_PREPARE = 60,
+	CPUHP_NET_IUCV_PREPARE = 61,
+	CPUHP_ARM_BL_PREPARE = 62,
+	CPUHP_TRACE_RB_PREPARE = 63,
+	CPUHP_MM_ZS_PREPARE = 64,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 65,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 66,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 67,
+	CPUHP_ZCOMP_PREPARE = 68,
+	CPUHP_TIMERS_PREPARE = 69,
+	CPUHP_MIPS_SOC_PREPARE = 70,
+	CPUHP_LOONGARCH_SOC_PREPARE = 71,
+	CPUHP_BP_PREPARE_DYN = 72,
+	CPUHP_BP_PREPARE_DYN_END = 92,
+	CPUHP_BRINGUP_CPU = 93,
+	CPUHP_AP_IDLE_DEAD = 94,
+	CPUHP_AP_OFFLINE = 95,
+	CPUHP_AP_SCHED_STARTING = 96,
+	CPUHP_AP_RCUTREE_DYING = 97,
+	CPUHP_AP_CPU_PM_STARTING = 98,
+	CPUHP_AP_IRQ_GIC_STARTING = 99,
+	CPUHP_AP_IRQ_HIP04_STARTING = 100,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 101,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 102,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 103,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 104,
+	CPUHP_AP_IRQ_RISCV_STARTING = 105,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 106,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 107,
+	CPUHP_AP_MICROCODE_LOADER = 108,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 109,
+	CPUHP_AP_PERF_X86_STARTING = 110,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 111,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 112,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 113,
+	CPUHP_AP_PERF_XTENSA_STARTING = 114,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 115,
+	CPUHP_AP_ARM_SDEI_STARTING = 116,
+	CPUHP_AP_ARM_VFP_STARTING = 117,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 118,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 119,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 120,
+	CPUHP_AP_PERF_ARM_STARTING = 121,
+	CPUHP_AP_PERF_RISCV_STARTING = 122,
+	CPUHP_AP_ARM_L2X0_STARTING = 123,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 124,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 125,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 126,
+	CPUHP_AP_JCORE_TIMER_STARTING = 127,
+	CPUHP_AP_ARM_TWD_STARTING = 128,
+	CPUHP_AP_QCOM_TIMER_STARTING = 129,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 130,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 131,
+	CPUHP_AP_MARCO_TIMER_STARTING = 132,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 133,
+	CPUHP_AP_ARC_TIMER_STARTING = 134,
+	CPUHP_AP_RISCV_TIMER_STARTING = 135,
+	CPUHP_AP_CLINT_TIMER_STARTING = 136,
+	CPUHP_AP_CSKY_TIMER_STARTING = 137,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 138,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 139,
+	CPUHP_AP_KVM_STARTING = 140,
+	CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 141,
+	CPUHP_AP_KVM_ARM_VGIC_STARTING = 142,
+	CPUHP_AP_KVM_ARM_TIMER_STARTING = 143,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 144,
+	CPUHP_AP_ARM_XEN_STARTING = 145,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 146,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 147,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 148,
+	CPUHP_AP_SMPCFD_DYING = 149,
+	CPUHP_AP_X86_TBOOT_DYING = 150,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 151,
+	CPUHP_AP_ONLINE = 152,
+	CPUHP_TEARDOWN_CPU = 153,
+	CPUHP_AP_ONLINE_IDLE = 154,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 155,
+	CPUHP_AP_SMPBOOT_THREADS = 156,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 157,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 158,
+	CPUHP_AP_BLK_MQ_ONLINE = 159,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 160,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 161,
+	CPUHP_AP_PERF_ONLINE = 162,
+	CPUHP_AP_PERF_X86_ONLINE = 163,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 164,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 165,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 166,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 167,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 168,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 169,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 170,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 171,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 172,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 173,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 187,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 188,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 189,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 193,
+	CPUHP_AP_PERF_CSKY_ONLINE = 194,
+	CPUHP_AP_WATCHDOG_ONLINE = 195,
+	CPUHP_AP_WORKQUEUE_ONLINE = 196,
+	CPUHP_AP_RANDOM_ONLINE = 197,
+	CPUHP_AP_RCUTREE_ONLINE = 198,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 199,
+	CPUHP_AP_ONLINE_DYN = 200,
+	CPUHP_AP_ONLINE_DYN_END = 230,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 231,
+	CPUHP_AP_X86_HPET_ONLINE = 232,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 233,
+	CPUHP_AP_ACTIVE = 234,
+	CPUHP_ONLINE = 235,
 };
 
 struct ring_buffer_event {
@@ -6335,7 +7676,8 @@
 	PERF_COUNT_SW_EMULATION_FAULTS = 8,
 	PERF_COUNT_SW_DUMMY = 9,
 	PERF_COUNT_SW_BPF_OUTPUT = 10,
-	PERF_COUNT_SW_MAX = 11,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
 };
 
 union perf_mem_data_src {
@@ -6349,7 +7691,9 @@
 		__u64 mem_lvl_num: 4;
 		__u64 mem_remote: 1;
 		__u64 mem_snoopx: 2;
-		__u64 mem_rsvd: 24;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
 	};
 };
 
@@ -6365,6 +7709,15 @@
 	__u64 reserved: 40;
 };
 
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
+};
+
 struct new_utsname {
 	char sysname[65];
 	char nodename[65];
@@ -6375,15 +7728,758 @@
 };
 
 struct uts_namespace {
-	struct kref kref;
 	struct new_utsname name;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct ns_common ns;
 };
 
+struct ref_tracker_dir {};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse *prot_inuse;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_xfrm_mib;
+
+struct linux_tls_mib;
+
+struct mptcp_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct proc_dir_entry;
+
+struct netns_mib {
+	struct ipstats_mib *ip_statistics;
+	struct ipstats_mib *ipv6_statistics;
+	struct tcp_mib *tcp_statistics;
+	struct linux_mib *net_statistics;
+	struct udp_mib *udp_statistics;
+	struct udp_mib *udp_stats_in6;
+	struct linux_xfrm_mib *xfrm_statistics;
+	struct linux_tls_mib *tls_statistics;
+	struct mptcp_mib *mptcp_statistics;
+	struct udp_mib *udplite_statistics;
+	struct udp_mib *udplite_stats_in6;
+	struct icmp_mib *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct netns_unix {
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct inet_timewait_death_row;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row *tcp_death_row;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table *fib_main;
+	struct fib_table *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	atomic_t fib_num_tclassid_users;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_raw_l3mdev_accept;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_l3mdev_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	long unsigned int sysctl_tcp_comp_sack_delay_ns;
+	long unsigned int sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops *tcp_congestion_control;
+	struct tcp_fastopen_context *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	long unsigned int tfo_active_disable_stamp;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_udp_l3mdev_accept;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	long unsigned int *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct list_head mr_tables;
+	struct fib_rules_ops *mr_rules_ops;
+	u32 sysctl_fib_multipath_hash_fields;
+	u8 sysctl_fib_multipath_use_neigh;
+	u8 sysctl_fib_multipath_hash_policy;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+};
+
+struct dst_entry;
+
+struct net_device;
+
+struct sk_buff;
+
+struct neighbour;
+
+struct dst_ops {
+	short unsigned int family;
+	unsigned int gc_thresh;
+	int (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *, int);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	long unsigned int icmpv6_ratemask[4];
+	long unsigned int *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	bool skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	long unsigned int ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	bool fib6_has_custom_rules;
+	unsigned int fib6_rules_require_fldissect;
+	unsigned int fib6_routes_require_src;
+	struct rt6_info *ip6_prohibit_entry;
+	struct rt6_info *ip6_blk_hole_entry;
+	struct fib6_table *fib6_local_tbl;
+	struct fib_rules_ops *fib6_rules_ops;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	struct list_head mr6_tables;
+	struct fib_rules_ops *mr6_rules_ops;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_lowpan {
+	struct ctl_table_header *frags_hdr;
+};
+
+struct netns_ieee802154_lowpan {
+	struct netns_sysctl_lowpan sysctl;
+	struct fqdir *fqdir;
+};
+
+struct sctp_mib;
+
+struct netns_sctp {
+	struct sctp_mib *sctp_statistics;
+	struct proc_dir_entry *proc_net_sctp;
+	struct ctl_table_header *sysctl_header;
+	struct sock *ctl_sock;
+	struct sock *udp4_sock;
+	struct sock *udp6_sock;
+	int udp_port;
+	int encap_port;
+	struct list_head local_addr_list;
+	struct list_head addr_waitq;
+	struct timer_list addr_wq_timer;
+	struct list_head auto_asconf_splist;
+	spinlock_t addr_wq_lock;
+	spinlock_t local_addr_lock;
+	unsigned int rto_initial;
+	unsigned int rto_min;
+	unsigned int rto_max;
+	int rto_alpha;
+	int rto_beta;
+	int max_burst;
+	int cookie_preserve_enable;
+	char *sctp_hmac_alg;
+	unsigned int valid_cookie_life;
+	unsigned int sack_timeout;
+	unsigned int hb_interval;
+	unsigned int probe_interval;
+	int max_retrans_association;
+	int max_retrans_path;
+	int max_retrans_init;
+	int pf_retrans;
+	int ps_retrans;
+	int pf_enable;
+	int pf_expose;
+	int sndbuf_policy;
+	int rcvbuf_policy;
+	int default_auto_asconf;
+	int addip_enable;
+	int addip_noauth;
+	int prsctp_enable;
+	int reconf_enable;
+	int auth_enable;
+	int intl_enable;
+	int ecn_enable;
+	int scope_policy;
+	int rwnd_upd_shift;
+	long unsigned int max_autoclose;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger *nf_loggers[13];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries *hooks_ipv4[5];
+	struct nf_hook_entries *hooks_ipv6[5];
+	struct nf_hook_entries *hooks_arp[3];
+	struct nf_hook_entries *hooks_bridge[5];
+	struct nf_hook_entries *hooks_decnet[7];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+};
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+	unsigned int offload_timeout;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+	unsigned int offload_timeout;
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct nf_ct_event_notifier;
+
+struct netns_ct {
+	bool ctnetlink_has_listener;
+	bool ecache_dwork_pending;
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_auto_assign_helper;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat *stat;
+	struct nf_ct_event_notifier *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+	unsigned int labels_used;
+};
+
+struct netns_nftables {
+	u8 gencursor;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head *state_bydst;
+	struct hlist_head *state_bysrc;
+	struct hlist_head *state_byspi;
+	struct hlist_head *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	long: 64;
+	long: 64;
+};
+
+struct netns_ipvs;
+
+struct mpls_route;
+
+struct netns_mpls {
+	int ip_ttl_propagate;
+	int default_ttl;
+	size_t platform_labels;
+	struct mpls_route **platform_label;
+	struct ctl_table_header *ctl;
+};
+
+struct can_dev_rcv_lists;
+
+struct can_pkg_stats;
+
+struct can_rcv_lists_stats;
+
+struct netns_can {
+	struct proc_dir_entry *proc_dir;
+	struct proc_dir_entry *pde_stats;
+	struct proc_dir_entry *pde_reset_stats;
+	struct proc_dir_entry *pde_rcvlist_all;
+	struct proc_dir_entry *pde_rcvlist_fil;
+	struct proc_dir_entry *pde_rcvlist_inv;
+	struct proc_dir_entry *pde_rcvlist_sff;
+	struct proc_dir_entry *pde_rcvlist_eff;
+	struct proc_dir_entry *pde_rcvlist_err;
+	struct proc_dir_entry *bcmproc_dir;
+	struct can_dev_rcv_lists *rx_alldev_list;
+	spinlock_t rcvlists_lock;
+	struct timer_list stattimer;
+	struct can_pkg_stats *pkg_stats;
+	struct can_rcv_lists_stats *rcv_lists_stats;
+	struct hlist_head cgw_list;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct smc_stats;
+
+struct smc_stats_rsn;
+
+struct netns_smc {
+	struct smc_stats *smc_stats;
+	struct mutex mutex_fback_rsn;
+	struct smc_stats_rsn *fback_rsn;
+	bool limit_smc_hs;
+	struct ctl_table_header *smc_hdr;
+	unsigned int sysctl_autocorking_size;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	int ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	struct netns_ipv4 ipv4;
+	struct netns_ipv6 ipv6;
+	struct netns_ieee802154_lowpan ieee802154_lowpan;
+	struct netns_sctp sctp;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct netns_nftables nft;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_ipvs *ipvs;
+	struct netns_mpls mpls;
+	struct netns_can can;
+	struct netns_xdp xdp;
+	struct sock *crypto_nlsk;
+	struct sock *diag_nlsk;
+	struct netns_smc smc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct cgroup_namespace {
-	refcount_t count;
 	struct ns_common ns;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
@@ -6408,12 +8504,54 @@
 	struct ns_common * (*get_parent)(struct ns_common *);
 };
 
-struct ucounts {
-	struct hlist_node node;
-	struct user_namespace *ns;
-	kuid_t uid;
-	int count;
-	atomic_t ucount[10];
+struct perf_cpu_context;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int *pmu_disable_count;
+	struct perf_cpu_context *pmu_cpu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	int (*filter_match)(struct perf_event *);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+struct ftrace_regs {
+	struct pt_regs regs;
 };
 
 struct iovec {
@@ -6433,54 +8571,13 @@
 
 struct u64_stats_sync {};
 
-struct bpf_cgroup_storage_key {
-	__u64 cgroup_inode_id;
-	__u32 attach_type;
-};
-
-struct bpf_cgroup_storage;
-
-struct bpf_prog_array_item {
-	struct bpf_prog *prog;
-	struct bpf_cgroup_storage *cgroup_storage[2];
-};
-
-struct bpf_storage_buffer;
-
-struct bpf_cgroup_storage_map;
-
-struct bpf_cgroup_storage {
-	union {
-		struct bpf_storage_buffer *buf;
-		void *percpu_buf;
-	};
-	struct bpf_cgroup_storage_map *map;
-	struct bpf_cgroup_storage_key key;
-	struct list_head list_map;
-	struct list_head list_cg;
-	struct rb_node node;
-	struct callback_head rcu;
-};
-
-struct bpf_prog_array {
-	struct callback_head rcu;
-	struct bpf_prog_array_item items[0];
-};
-
-struct bpf_storage_buffer {
-	struct callback_head rcu;
-	char data[0];
-};
-
 struct psi_group_cpu {
 	seqcount_t seq;
-	unsigned int tasks[4];
+	unsigned int tasks[5];
 	u32 state_mask;
-	u32 times[6];
+	u32 times[7];
 	u64 state_start;
-	long: 64;
-	u32 times_prev[12];
-	long: 64;
+	u32 times_prev[14];
 	long: 64;
 };
 
@@ -6510,8 +8607,6 @@
 	bool early_init: 1;
 	bool implicit_on_dfl: 1;
 	bool threaded: 1;
-	bool broken_hierarchy: 1;
-	bool warned_broken_hierarchy: 1;
 	int id;
 	const char *name;
 	const char *legacy_name;
@@ -6567,13 +8662,6 @@
 	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
 };
 
-enum kmalloc_cache_type {
-	KMALLOC_NORMAL = 0,
-	KMALLOC_RECLAIM = 1,
-	KMALLOC_DMA = 2,
-	NR_KMALLOC_TYPES = 3,
-};
-
 struct perf_callchain_entry {
 	__u64 nr;
 	__u64 ip[0];
@@ -6602,52 +8690,6 @@
 	struct perf_branch_entry entries[0];
 };
 
-struct perf_cpu_context;
-
-struct perf_output_handle;
-
-struct pmu {
-	struct list_head entry;
-	struct module *module;
-	struct device *dev;
-	const struct attribute_group **attr_groups;
-	const struct attribute_group **attr_update;
-	const char *name;
-	int type;
-	int capabilities;
-	int *pmu_disable_count;
-	struct perf_cpu_context *pmu_cpu_context;
-	atomic_t exclusive_cnt;
-	int task_ctx_nr;
-	int hrtimer_interval_ms;
-	unsigned int nr_addr_filters;
-	void (*pmu_enable)(struct pmu *);
-	void (*pmu_disable)(struct pmu *);
-	int (*event_init)(struct perf_event *);
-	void (*event_mapped)(struct perf_event *, struct mm_struct *);
-	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
-	int (*add)(struct perf_event *, int);
-	void (*del)(struct perf_event *, int);
-	void (*start)(struct perf_event *, int);
-	void (*stop)(struct perf_event *, int);
-	void (*read)(struct perf_event *);
-	void (*start_txn)(struct pmu *, unsigned int);
-	int (*commit_txn)(struct pmu *);
-	void (*cancel_txn)(struct pmu *);
-	int (*event_idx)(struct perf_event *);
-	void (*sched_task)(struct perf_event_context *, bool);
-	struct kmem_cache *task_ctx_cache;
-	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
-	void * (*setup_aux)(struct perf_event *, void **, int, bool);
-	void (*free_aux)(void *);
-	long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);
-	int (*addr_filters_validate)(struct list_head *);
-	void (*addr_filters_sync)(struct perf_event *);
-	int (*aux_output_match)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int (*check_period)(struct perf_event *, u64);
-};
-
 struct perf_cpu_context {
 	struct perf_event_context ctx;
 	struct perf_event_context *task_ctx;
@@ -6659,6 +8701,7 @@
 	unsigned int hrtimer_active;
 	struct perf_cgroup *cgrp;
 	struct list_head cgrp_cpuctx_entry;
+	struct list_head sched_cb_entry;
 	int sched_cb_usage;
 	int online;
 	int heap_size;
@@ -6689,7 +8732,7 @@
 	struct perf_raw_record *raw;
 	struct perf_branch_stack *br_stack;
 	u64 period;
-	u64 weight;
+	union perf_sample_weight weight;
 	u64 txn;
 	union perf_mem_data_src data_src;
 	u64 type;
@@ -6712,6 +8755,14 @@
 	u64 stack_user_size;
 	u64 phys_addr;
 	u64 cgroup;
+	u64 data_page_size;
+	u64 code_page_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 };
 
@@ -6725,6 +8776,8 @@
 struct perf_cgroup_info {
 	u64 time;
 	u64 timestamp;
+	u64 timeoffset;
+	int active;
 };
 
 struct trace_entry {
@@ -6753,6 +8806,8 @@
 	long unsigned int iter_flags;
 	void *temp;
 	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
 	struct trace_seq tmp_seq;
 	cpumask_var_t started;
 	bool snapshot;
@@ -6828,8 +8883,7 @@
 	struct ring_buffer_event *event;
 	struct trace_event_file *trace_file;
 	void *entry;
-	long unsigned int flags;
-	int pc;
+	unsigned int trace_ctx;
 	struct pt_regs *regs;
 };
 
@@ -6854,8 +8908,11 @@
 	TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,
 	TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,
 	TRACE_EVENT_FL_TRACEPOINT_BIT = 4,
-	TRACE_EVENT_FL_KPROBE_BIT = 5,
-	TRACE_EVENT_FL_UPROBE_BIT = 6,
+	TRACE_EVENT_FL_DYNAMIC_BIT = 5,
+	TRACE_EVENT_FL_KPROBE_BIT = 6,
+	TRACE_EVENT_FL_UPROBE_BIT = 7,
+	TRACE_EVENT_FL_EPROBE_BIT = 8,
+	TRACE_EVENT_FL_CUSTOM_BIT = 9,
 };
 
 enum {
@@ -6864,8 +8921,11 @@
 	TRACE_EVENT_FL_NO_SET_FILTER = 4,
 	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
 	TRACE_EVENT_FL_TRACEPOINT = 16,
-	TRACE_EVENT_FL_KPROBE = 32,
-	TRACE_EVENT_FL_UPROBE = 64,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_CUSTOM = 512,
 };
 
 enum {
@@ -6900,10 +8960,17 @@
 	FILTER_OTHER = 0,
 	FILTER_STATIC_STRING = 1,
 	FILTER_DYN_STRING = 2,
-	FILTER_PTR_STRING = 3,
-	FILTER_TRACE_FN = 4,
-	FILTER_COMM = 5,
-	FILTER_CPU = 6,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_COMM = 6,
+	FILTER_CPU = 7,
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
 };
 
 struct fwnode_reference_args;
@@ -6915,6 +8982,8 @@
 	void (*put)(struct fwnode_handle *);
 	bool (*device_is_available)(const struct fwnode_handle *);
 	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
 	bool (*property_present)(const struct fwnode_handle *, const char *);
 	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
 	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
@@ -6928,7 +8997,9 @@
 	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
 	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
 	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
-	int (*add_links)(const struct fwnode_handle *, struct device *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
 };
 
 struct fwnode_endpoint {
@@ -6948,8 +9019,6 @@
 	int length;
 	void *value;
 	struct property *next;
-	long unsigned int _flags;
-	struct bin_attribute attr;
 };
 
 struct irq_fwspec {
@@ -6958,8 +9027,6 @@
 	u32 param[16];
 };
 
-struct irq_data;
-
 struct irq_domain_ops {
 	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
 	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
@@ -6974,10 +9041,10 @@
 };
 
 struct xbc_node {
-	u16 next;
-	u16 child;
-	u16 parent;
-	u16 data;
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
 };
 
 enum wb_stat_item {
@@ -6988,26 +9055,6 @@
 	NR_WB_STAT_ITEMS = 4,
 };
 
-struct disk_stats;
-
-struct partition_meta_info;
-
-struct hd_struct {
-	sector_t start_sect;
-	sector_t nr_sects;
-	long unsigned int stamp;
-	struct disk_stats *dkstats;
-	struct percpu_ref ref;
-	struct device __dev;
-	struct kobject *holder_dir;
-	int policy;
-	int partno;
-	struct partition_meta_info *info;
-	struct rcu_work rcu_work;
-};
-
-struct disk_part_tbl;
-
 struct block_device_operations;
 
 struct timer_rand_state;
@@ -7025,15 +9072,18 @@
 	char disk_name[32];
 	short unsigned int events;
 	short unsigned int event_flags;
-	struct disk_part_tbl *part_tbl;
-	struct hd_struct part0;
+	struct xarray part_tbl;
+	struct block_device *part0;
 	const struct block_device_operations *fops;
 	struct request_queue *queue;
 	void *private_data;
 	int flags;
 	long unsigned int state;
-	struct rw_semaphore lookup_sem;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
 	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
 	struct timer_rand_state *random;
 	atomic_t sync_io;
 	struct disk_events *ev;
@@ -7042,395 +9092,200 @@
 	int node_id;
 	struct badblocks *bb;
 	struct lockdep_map lockdep_map;
+	u64 diskseq;
 };
 
-struct bio_integrity_payload {
-	struct bio *bip_bio;
-	struct bvec_iter bip_iter;
-	short unsigned int bip_slab;
-	short unsigned int bip_vcnt;
-	short unsigned int bip_max_vcnt;
-	short unsigned int bip_flags;
-	struct bvec_iter bio_iter;
-	struct work_struct bip_work;
-	struct bio_vec *bip_vec;
-	struct bio_vec bip_inline_vecs[0];
-};
-
-struct blkg_iostat {
-	u64 bytes[3];
-	u64 ios[3];
-};
-
-struct blkg_iostat_set {
-	struct u64_stats_sync sync;
-	struct blkg_iostat cur;
-	struct blkg_iostat last;
-};
-
-struct blkcg;
-
-struct blkg_policy_data;
-
-struct blkcg_gq {
-	struct request_queue *q;
-	struct list_head q_node;
-	struct hlist_node blkcg_node;
-	struct blkcg *blkcg;
-	struct blkcg_gq *parent;
-	struct percpu_ref refcnt;
-	bool online;
-	struct blkg_iostat_set *iostat_cpu;
-	struct blkg_iostat_set iostat;
-	struct blkg_policy_data *pd[5];
-	spinlock_t async_bio_lock;
-	struct bio_list async_bios;
-	struct work_struct async_bio_work;
-	atomic_t use_delay;
-	atomic64_t delay_nsec;
-	atomic64_t delay_start;
-	u64 last_delay;
-	int last_use;
-	struct callback_head callback_head;
-};
-
-typedef unsigned int blk_qc_t;
-
 struct partition_meta_info {
 	char uuid[37];
 	u8 volname[64];
 };
 
-struct disk_part_tbl {
-	struct callback_head callback_head;
-	int len;
-	struct hd_struct *last_lookup;
-	struct hd_struct *part[0];
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	short unsigned int bip_vcnt;
+	short unsigned int bip_max_vcnt;
+	short unsigned int bip_flags;
+	struct bvec_iter bio_iter;
+	short: 16;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+} __attribute__((packed));
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
 };
 
-struct blk_integrity_iter;
+typedef long unsigned int efi_status_t;
 
-typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+typedef u8 efi_bool_t;
 
-typedef void integrity_prepare_fn(struct request *);
+typedef u16 efi_char16_t;
 
-typedef void integrity_complete_fn(struct request *, unsigned int);
+typedef guid_t efi_guid_t;
 
-struct blk_integrity_profile {
-	integrity_processing_fn *generate_fn;
-	integrity_processing_fn *verify_fn;
-	integrity_prepare_fn *prepare_fn;
-	integrity_complete_fn *complete_fn;
-	const char *name;
-};
+typedef struct {
+	u64 signature;
+	u32 revision;
+	u32 headersize;
+	u32 crc32;
+	u32 reserved;
+} efi_table_hdr_t;
 
-struct blk_zone;
+typedef struct {
+	u32 type;
+	u32 pad;
+	u64 phys_addr;
+	u64 virt_addr;
+	u64 num_pages;
+	u64 attribute;
+} efi_memory_desc_t;
 
-typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+typedef struct {
+	efi_guid_t guid;
+	u32 headersize;
+	u32 flags;
+	u32 imagesize;
+} efi_capsule_header_t;
 
-struct hd_geometry;
+typedef struct {
+	u16 year;
+	u8 month;
+	u8 day;
+	u8 hour;
+	u8 minute;
+	u8 second;
+	u8 pad1;
+	u32 nanosecond;
+	s16 timezone;
+	u8 daylight;
+	u8 pad2;
+} efi_time_t;
 
-struct pr_ops;
+typedef struct {
+	u32 resolution;
+	u32 accuracy;
+	u8 sets_to_zero;
+} efi_time_cap_t;
 
-struct block_device_operations {
-	blk_qc_t (*submit_bio)(struct bio *);
-	int (*open)(struct block_device *, fmode_t);
-	void (*release)(struct gendisk *, fmode_t);
-	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
-	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
-	unsigned int (*check_events)(struct gendisk *, unsigned int);
-	void (*unlock_native_capacity)(struct gendisk *);
-	int (*revalidate_disk)(struct gendisk *);
-	int (*getgeo)(struct block_device *, struct hd_geometry *);
-	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
-	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
-	char * (*devnode)(struct gendisk *, umode_t *);
-	struct module *owner;
-	const struct pr_ops *pr_ops;
-};
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 get_time;
+	u32 set_time;
+	u32 get_wakeup_time;
+	u32 set_wakeup_time;
+	u32 set_virtual_address_map;
+	u32 convert_pointer;
+	u32 get_variable;
+	u32 get_next_variable;
+	u32 set_variable;
+	u32 get_next_high_mono_count;
+	u32 reset_system;
+	u32 update_capsule;
+	u32 query_capsule_caps;
+	u32 query_variable_info;
+} efi_runtime_services_32_t;
 
-struct sg_io_v4 {
-	__s32 guard;
-	__u32 protocol;
-	__u32 subprotocol;
-	__u32 request_len;
-	__u64 request;
-	__u64 request_tag;
-	__u32 request_attr;
-	__u32 request_priority;
-	__u32 request_extra;
-	__u32 max_response_len;
-	__u64 response;
-	__u32 dout_iovec_count;
-	__u32 dout_xfer_len;
-	__u32 din_iovec_count;
-	__u32 din_xfer_len;
-	__u64 dout_xferp;
-	__u64 din_xferp;
-	__u32 timeout;
-	__u32 flags;
-	__u64 usr_ptr;
-	__u32 spare_in;
-	__u32 driver_status;
-	__u32 transport_status;
-	__u32 device_status;
-	__u32 retry_delay;
-	__u32 info;
-	__u32 duration;
-	__u32 response_len;
-	__s32 din_resid;
-	__s32 dout_resid;
-	__u64 generated_tag;
-	__u32 spare_out;
-	__u32 padding;
-};
+typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
 
-struct bsg_ops {
-	int (*check_proto)(struct sg_io_v4 *);
-	int (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);
-	int (*complete_rq)(struct request *, struct sg_io_v4 *);
-	void (*free_rq)(struct request *);
-};
+typedef efi_status_t efi_set_time_t(efi_time_t *);
 
-typedef __u32 req_flags_t;
+typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
 
-typedef void rq_end_io_fn(struct request *, blk_status_t);
+typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
 
-enum mq_rq_state {
-	MQ_RQ_IDLE = 0,
-	MQ_RQ_IN_FLIGHT = 1,
-	MQ_RQ_COMPLETE = 2,
-};
+typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);
 
-struct blk_ksm_keyslot;
+typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);
 
-struct request {
-	struct request_queue *q;
-	struct blk_mq_ctx *mq_ctx;
-	struct blk_mq_hw_ctx *mq_hctx;
-	unsigned int cmd_flags;
-	req_flags_t rq_flags;
-	int tag;
-	int internal_tag;
-	unsigned int __data_len;
-	sector_t __sector;
-	struct bio *bio;
-	struct bio *biotail;
-	struct list_head queuelist;
-	union {
-		struct hlist_node hash;
-		struct list_head ipi_list;
+typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
+
+typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
+
+typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);
+
+typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
+
+typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int);
+
+typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		efi_status_t (*get_time)(efi_time_t *, efi_time_cap_t *);
+		efi_status_t (*set_time)(efi_time_t *);
+		efi_status_t (*get_wakeup_time)(efi_bool_t *, efi_bool_t *, efi_time_t *);
+		efi_status_t (*set_wakeup_time)(efi_bool_t, efi_time_t *);
+		efi_status_t (*set_virtual_address_map)(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);
+		void *convert_pointer;
+		efi_status_t (*get_variable)(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);
+		efi_status_t (*get_next_variable)(long unsigned int *, efi_char16_t *, efi_guid_t *);
+		efi_status_t (*set_variable)(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
+		efi_status_t (*get_next_high_mono_count)(u32 *);
+		void (*reset_system)(int, efi_status_t, long unsigned int, efi_char16_t *);
+		efi_status_t (*update_capsule)(efi_capsule_header_t **, long unsigned int, long unsigned int);
+		efi_status_t (*query_capsule_caps)(efi_capsule_header_t **, long unsigned int, u64 *, int *);
+		efi_status_t (*query_variable_info)(u32, u64 *, u64 *, u64 *);
 	};
-	union {
-		struct rb_node rb_node;
-		struct bio_vec special_vec;
-		void *completion_data;
-		int error_count;
-	};
-	union {
-		struct {
-			struct io_cq *icq;
-			void *priv[2];
-		} elv;
-		struct {
-			unsigned int seq;
-			struct list_head list;
-			rq_end_io_fn *saved_end_io;
-		} flush;
-	};
-	struct gendisk *rq_disk;
-	struct hd_struct *part;
-	u64 alloc_time_ns;
-	u64 start_time_ns;
-	u64 io_start_time_ns;
-	short unsigned int wbt_flags;
-	short unsigned int stats_sectors;
-	short unsigned int nr_phys_segments;
-	short unsigned int nr_integrity_segments;
-	struct bio_crypt_ctx *crypt_ctx;
-	struct blk_ksm_keyslot *crypt_keyslot;
-	short unsigned int write_hint;
-	short unsigned int ioprio;
-	enum mq_rq_state state;
-	refcount_t ref;
-	unsigned int timeout;
-	long unsigned int deadline;
-	union {
-		struct __call_single_data csd;
-		u64 fifo_time;
-	};
-	rq_end_io_fn *end_io;
-	void *end_io_data;
+	efi_runtime_services_32_t mixed_mode;
+} efi_runtime_services_t;
+
+struct efi_memory_map {
+	phys_addr_t phys_map;
+	void *map;
+	void *map_end;
+	int nr_map;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
 };
 
-struct blk_zone {
-	__u64 start;
-	__u64 len;
-	__u64 wp;
-	__u8 type;
-	__u8 cond;
-	__u8 non_seq;
-	__u8 reset;
-	__u8 resv[4];
-	__u64 capacity;
-	__u8 reserved[24];
-};
-
-enum elv_merge {
-	ELEVATOR_NO_MERGE = 0,
-	ELEVATOR_FRONT_MERGE = 1,
-	ELEVATOR_BACK_MERGE = 2,
-	ELEVATOR_DISCARD_MERGE = 3,
-};
-
-struct elevator_type;
-
-struct blk_mq_alloc_data;
-
-struct elevator_mq_ops {
-	int (*init_sched)(struct request_queue *, struct elevator_type *);
-	void (*exit_sched)(struct elevator_queue *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	void (*depth_updated)(struct blk_mq_hw_ctx *);
-	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-	bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);
-	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
-	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-	void (*prepare_request)(struct request *);
-	void (*finish_request)(struct request *);
-	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
-	bool (*has_work)(struct blk_mq_hw_ctx *);
-	void (*completed_request)(struct request *, u64);
-	void (*requeue_request)(struct request *);
-	struct request * (*former_request)(struct request_queue *, struct request *);
-	struct request * (*next_request)(struct request_queue *, struct request *);
-	void (*init_icq)(struct io_cq *);
-	void (*exit_icq)(struct io_cq *);
-};
-
-struct elv_fs_entry;
-
-struct elevator_type {
-	struct kmem_cache *icq_cache;
-	struct elevator_mq_ops ops;
-	size_t icq_size;
-	size_t icq_align;
-	struct elv_fs_entry *elevator_attrs;
-	const char *elevator_name;
-	const char *elevator_alias;
-	const unsigned int elevator_features;
-	struct module *elevator_owner;
-	char icq_cache_name[22];
-	struct list_head list;
-};
-
-struct elevator_queue {
-	struct elevator_type *type;
-	void *elevator_data;
-	struct kobject kobj;
-	struct mutex sysfs_lock;
-	unsigned int registered: 1;
-	struct hlist_head hash[64];
-};
-
-struct elv_fs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct elevator_queue *, char *);
-	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-enum blk_eh_timer_return {
-	BLK_EH_DONE = 0,
-	BLK_EH_RESET_TIMER = 1,
-};
-
-struct blk_mq_queue_data;
-
-struct blk_mq_ops {
-	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
-	void (*commit_rqs)(struct blk_mq_hw_ctx *);
-	bool (*get_budget)(struct request_queue *);
-	void (*put_budget)(struct request_queue *);
-	enum blk_eh_timer_return (*timeout)(struct request *, bool);
-	int (*poll)(struct blk_mq_hw_ctx *);
-	void (*complete)(struct request *);
-	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
-	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
-	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
-	void (*initialize_rq_fn)(struct request *);
-	void (*cleanup_rq)(struct request *);
-	bool (*busy)(struct request_queue *);
-	int (*map_queues)(struct blk_mq_tag_set *);
-};
-
-struct blk_integrity_iter {
-	void *prot_buf;
-	void *data_buf;
-	sector_t seed;
-	unsigned int data_size;
-	short unsigned int interval;
-	const char *disk_name;
-};
-
-enum pr_type {
-	PR_WRITE_EXCLUSIVE = 1,
-	PR_EXCLUSIVE_ACCESS = 2,
-	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
-	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
-	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
-	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
-};
-
-struct pr_ops {
-	int (*pr_register)(struct block_device *, u64, u64, u32);
-	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
-	int (*pr_release)(struct block_device *, u64, enum pr_type);
-	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
-	int (*pr_clear)(struct block_device *, u64);
-};
-
-enum blkg_iostat_type {
-	BLKG_IOSTAT_READ = 0,
-	BLKG_IOSTAT_WRITE = 1,
-	BLKG_IOSTAT_DISCARD = 2,
-	BLKG_IOSTAT_NR = 3,
-};
-
-struct blkcg_policy_data;
-
-struct blkcg {
-	struct cgroup_subsys_state css;
-	spinlock_t lock;
-	refcount_t online_pin;
-	struct xarray blkg_tree;
-	struct blkcg_gq *blkg_hint;
-	struct hlist_head blkg_list;
-	struct blkcg_policy_data *cpd[5];
-	struct list_head all_blkcgs_node;
-	struct list_head cgwb_list;
-};
-
-struct blkcg_policy_data {
-	struct blkcg *blkcg;
-	int plid;
-};
-
-struct blkg_policy_data {
-	struct blkcg_gq *blkg;
-	int plid;
+struct efi {
+	const efi_runtime_services_t *runtime;
+	unsigned int runtime_version;
+	unsigned int runtime_supported_mask;
+	long unsigned int acpi;
+	long unsigned int acpi20;
+	long unsigned int smbios;
+	long unsigned int smbios3;
+	long unsigned int esrt;
+	long unsigned int tpm_log;
+	long unsigned int tpm_final_log;
+	long unsigned int mokvar_table;
+	long unsigned int coco_secret;
+	efi_get_time_t *get_time;
+	efi_set_time_t *set_time;
+	efi_get_wakeup_time_t *get_wakeup_time;
+	efi_set_wakeup_time_t *set_wakeup_time;
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_info_t *query_variable_info;
+	efi_query_variable_info_t *query_variable_info_nonblocking;
+	efi_update_capsule_t *update_capsule;
+	efi_query_capsule_caps_t *query_capsule_caps;
+	efi_get_next_high_mono_count_t *get_next_high_mono_count;
+	efi_reset_system_t *reset_system;
+	struct efi_memory_map memmap;
+	long unsigned int flags;
 };
 
 enum memcg_stat_item {
-	MEMCG_SWAP = 37,
-	MEMCG_SOCK = 38,
-	MEMCG_PERCPU_B = 39,
-	MEMCG_NR_STAT = 40,
+	MEMCG_SWAP = 41,
+	MEMCG_SOCK = 42,
+	MEMCG_PERCPU_B = 43,
+	MEMCG_VMALLOC = 44,
+	MEMCG_KMEM = 45,
+	MEMCG_ZSWAP_B = 46,
+	MEMCG_ZSWAPPED = 47,
+	MEMCG_NR_STAT = 48,
 };
 
 enum memcg_memory_event {
@@ -7439,10 +9294,11 @@
 	MEMCG_MAX = 2,
 	MEMCG_OOM = 3,
 	MEMCG_OOM_KILL = 4,
-	MEMCG_SWAP_HIGH = 5,
-	MEMCG_SWAP_MAX = 6,
-	MEMCG_SWAP_FAIL = 7,
-	MEMCG_NR_MEMORY_EVENTS = 8,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
 };
 
 enum mem_cgroup_events_target {
@@ -7452,8 +9308,10 @@
 };
 
 struct memcg_vmstats_percpu {
-	long int stat[40];
-	long unsigned int events[95];
+	long int state[48];
+	long unsigned int events[107];
+	long int state_prev[48];
+	long unsigned int events_prev[107];
 	long unsigned int nr_page_events;
 	long unsigned int targets[2];
 };
@@ -7463,23 +9321,29 @@
 	unsigned int generation;
 };
 
-struct lruvec_stat {
-	long int count[37];
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	long unsigned int *map;
 };
 
-struct memcg_shrinker_map {
-	struct callback_head rcu;
-	long unsigned int map[0];
+struct lruvec_stats_percpu {
+	long int state[41];
+	long int state_prev[41];
+};
+
+struct lruvec_stats {
+	long int state[41];
+	long int state_pending[41];
 };
 
 struct mem_cgroup_per_node {
 	struct lruvec lruvec;
-	struct lruvec_stat *lruvec_stat_local;
-	struct lruvec_stat *lruvec_stat_cpu;
-	atomic_long_t lruvec_stat[37];
-	long unsigned int lru_zone_size[20];
+	struct lruvec_stats_percpu *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	long unsigned int lru_zone_size[25];
 	struct mem_cgroup_reclaim_iter iter;
-	struct memcg_shrinker_map *shrinker_map;
+	struct shrinker_info *shrinker_info;
 	struct rb_node tree_node;
 	long unsigned int usage_in_excess;
 	bool on_tree;
@@ -7499,6 +9363,21 @@
 	struct mem_cgroup_threshold entries[0];
 };
 
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+};
+
 struct percpu_cluster {
 	struct swap_cluster_info index;
 	unsigned int next;
@@ -7554,6 +9433,1052 @@
 	};
 };
 
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+struct blk_integrity_iter;
+
+typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);
+
+typedef void integrity_prepare_fn(struct request *);
+
+typedef void integrity_complete_fn(struct request *, unsigned int);
+
+struct blk_integrity_profile {
+	integrity_processing_fn *generate_fn;
+	integrity_processing_fn *verify_fn;
+	integrity_prepare_fn *prepare_fn;
+	integrity_complete_fn *complete_fn;
+	const char *name;
+};
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct block_device *, fmode_t);
+	void (*release)(struct gendisk *, fmode_t);
+	int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
+	int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, long unsigned int);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	struct request_queue *queue;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *, bool);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	int (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_MAX = 29,
+};
+
+typedef unsigned int sk_buff_data_t;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				long unsigned int dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	union {
+		struct sock *sk;
+		int ip_defrag_offset;
+	};
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			long unsigned int _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		long unsigned int _sk_redir;
+	};
+	long unsigned int _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 nf_trace: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 __pkt_vlan_present_offset[0];
+			__u8 vlan_present: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 dst_pending_confirm: 1;
+			__u8 mono_delivery_time: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 ipvs_property: 1;
+			__u8 inner_protocol_type: 1;
+			__u8 remcsum_offload: 1;
+			__u8 offload_fwd_mark: 1;
+			__u8 offload_l3_fwd_mark: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 decrypted: 1;
+			__u8 slow_gro: 1;
+			__u8 csum_not_inet: 1;
+			__u16 tc_index;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			__be16 vlan_proto;
+			__u16 vlan_tci;
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			u16 alloc_cpu;
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTPKTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	__IPSTATS_MIB_MAX = 37,
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	__ICMP_MIB_MAX = 28,
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	__ICMP6_MIB_MAX = 6,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	__LINUX_MIB_MAX = 126,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+enum {
+	LINUX_MIB_TLSNUM = 0,
+	LINUX_MIB_TLSCURRTXSW = 1,
+	LINUX_MIB_TLSCURRRXSW = 2,
+	LINUX_MIB_TLSCURRTXDEVICE = 3,
+	LINUX_MIB_TLSCURRRXDEVICE = 4,
+	LINUX_MIB_TLSTXSW = 5,
+	LINUX_MIB_TLSRXSW = 6,
+	LINUX_MIB_TLSTXDEVICE = 7,
+	LINUX_MIB_TLSRXDEVICE = 8,
+	LINUX_MIB_TLSDECRYPTERROR = 9,
+	LINUX_MIB_TLSRXDEVICERESYNC = 10,
+	__LINUX_MIB_TLSMAX = 11,
+};
+
+struct ipstats_mib {
+	u64 mibs[37];
+	struct u64_stats_sync syncp;
+};
+
+struct icmp_mib {
+	long unsigned int mibs[28];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	long unsigned int mibs[6];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct tcp_mib {
+	long unsigned int mibs[16];
+};
+
+struct udp_mib {
+	long unsigned int mibs[10];
+};
+
+struct linux_mib {
+	long unsigned int mibs[126];
+};
+
+struct linux_xfrm_mib {
+	long unsigned int mibs[29];
+};
+
+struct linux_tls_mib {
+	long unsigned int mibs[11];
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long int high_thresh;
+	long int low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 56;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+	long: 64;
+	long: 64;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	long unsigned int _metrics;
+	long unsigned int expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	short unsigned int flags;
+	short int obsolete;
+	short unsigned int header_len;
+	short unsigned int trailer_len;
+	atomic_t __refcnt;
+	int __use;
+	long unsigned int lastuse;
+	struct lwtunnel_state *lwtstate;
+	struct callback_head callback_head;
+	short int error;
+	short int __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_DECNET = 12,
+	NFPROTO_NUMPROTO = 13,
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = 4294967295,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	long unsigned int private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[4];
+	u8 chunks;
+	long: 56;
+	char data[0];
+};
+
+enum skb_ext_id {
+	SKB_EXT_BRIDGE_NF = 0,
+	SKB_EXT_SEC_PATH = 1,
+	TC_SKB_EXT = 2,
+	SKB_EXT_MPTCP = 3,
+	SKB_EXT_NUM = 4,
+};
+
 struct trace_event_raw_initcall_level {
 	struct trace_entry ent;
 	u32 __data_loc_level;
@@ -7600,72 +10525,6 @@
 	Elf32_Word n_type;
 };
 
-enum pcpu_fc {
-	PCPU_FC_AUTO = 0,
-	PCPU_FC_EMBED = 1,
-	PCPU_FC_PAGE = 2,
-	PCPU_FC_NR = 3,
-};
-
-enum {
-	UNAME26 = 131072,
-	ADDR_NO_RANDOMIZE = 262144,
-	FDPIC_FUNCPTRS = 524288,
-	MMAP_PAGE_ZERO = 1048576,
-	ADDR_COMPAT_LAYOUT = 2097152,
-	READ_IMPLIES_EXEC = 4194304,
-	ADDR_LIMIT_32BIT = 8388608,
-	SHORT_INODE = 16777216,
-	WHOLE_SECONDS = 33554432,
-	STICKY_TIMEOUTS = 67108864,
-	ADDR_LIMIT_3GB = 134217728,
-};
-
-enum hrtimer_base_type {
-	HRTIMER_BASE_MONOTONIC = 0,
-	HRTIMER_BASE_REALTIME = 1,
-	HRTIMER_BASE_BOOTTIME = 2,
-	HRTIMER_BASE_TAI = 3,
-	HRTIMER_BASE_MONOTONIC_SOFT = 4,
-	HRTIMER_BASE_REALTIME_SOFT = 5,
-	HRTIMER_BASE_BOOTTIME_SOFT = 6,
-	HRTIMER_BASE_TAI_SOFT = 7,
-	HRTIMER_MAX_CLOCK_BASES = 8,
-};
-
-enum {
-	MM_FILEPAGES = 0,
-	MM_ANONPAGES = 1,
-	MM_SWAPENTS = 2,
-	MM_SHMEMPAGES = 3,
-	NR_MM_COUNTERS = 4,
-};
-
-enum rseq_cs_flags_bit {
-	RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
-	RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
-	RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
-};
-
-enum uclamp_id {
-	UCLAMP_MIN = 0,
-	UCLAMP_MAX = 1,
-	UCLAMP_CNT = 2,
-};
-
-enum perf_event_task_context {
-	perf_invalid_context = 4294967295,
-	perf_hw_context = 0,
-	perf_sw_context = 1,
-	perf_nr_task_contexts = 2,
-};
-
-enum rseq_event_mask_bits {
-	RSEQ_EVENT_PREEMPT_BIT = 0,
-	RSEQ_EVENT_SIGNAL_BIT = 1,
-	RSEQ_EVENT_MIGRATE_BIT = 2,
-};
-
 enum {
 	PROC_ROOT_INO = 1,
 	PROC_IPC_INIT_INO = 4026531839,
@@ -7676,250 +10535,55 @@
 	PROC_TIME_INIT_INO = 4026531834,
 };
 
-typedef short int __s16;
-
-typedef __s16 s16;
-
 typedef __u16 __le16;
 
-typedef __u16 __be16;
-
-typedef __u32 __be32;
-
 typedef __u64 __be64;
 
-typedef __u32 __wsum;
-
 typedef unsigned int slab_flags_t;
 
-struct llist_head {
-	struct llist_node *first;
-};
-
-struct rhash_head {
-	struct rhash_head *next;
-};
-
-struct rhashtable;
-
-struct rhashtable_compare_arg {
-	struct rhashtable *ht;
-	const void *key;
-};
-
-typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
-
-typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
-
-typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
-
-struct rhashtable_params {
-	u16 nelem_hint;
-	u16 key_len;
-	u16 key_offset;
-	u16 head_offset;
-	unsigned int max_size;
-	u16 min_size;
-	bool automatic_shrinking;
-	rht_hashfn_t hashfn;
-	rht_obj_hashfn_t obj_hashfn;
-	rht_obj_cmpfn_t obj_cmpfn;
-};
-
-struct bucket_table;
-
-struct rhashtable {
-	struct bucket_table *tbl;
-	unsigned int key_len;
-	unsigned int max_elems;
-	struct rhashtable_params p;
-	bool rhlist;
-	struct work_struct run_work;
-	struct mutex mutex;
-	spinlock_t lock;
-	atomic_t nelems;
-};
-
-struct fs_struct {
-	int users;
-	spinlock_t lock;
-	seqcount_spinlock_t seq;
-	int umask;
-	int in_exec;
-	struct path root;
-	struct path pwd;
-};
-
-struct pipe_buffer;
-
-struct watch_queue;
-
-struct pipe_inode_info {
-	struct mutex mutex;
-	wait_queue_head_t rd_wait;
-	wait_queue_head_t wr_wait;
-	unsigned int head;
-	unsigned int tail;
-	unsigned int max_usage;
-	unsigned int ring_size;
-	bool note_loss;
-	unsigned int nr_accounted;
-	unsigned int readers;
-	unsigned int writers;
-	unsigned int files;
-	unsigned int r_counter;
-	unsigned int w_counter;
-	struct page *tmp_page;
-	struct fasync_struct *fasync_readers;
-	struct fasync_struct *fasync_writers;
-	struct pipe_buffer *bufs;
-	struct user_struct *user;
-	struct watch_queue *watch_queue;
-};
-
-struct notifier_block;
-
-typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);
-
-struct notifier_block {
-	notifier_fn_t notifier_call;
-	struct notifier_block *next;
-	int priority;
-};
-
-struct blocking_notifier_head {
-	struct rw_semaphore rwsem;
-	struct notifier_block *head;
-};
-
-struct raw_notifier_head {
-	struct notifier_block *head;
-};
-
-struct vfsmount {
-	struct dentry *mnt_root;
-	struct super_block *mnt_sb;
-	int mnt_flags;
-};
-
-struct ld_semaphore {
-	atomic_long_t count;
-	raw_spinlock_t wait_lock;
-	unsigned int wait_readers;
-	struct list_head read_wait;
-	struct list_head write_wait;
-};
-
-typedef unsigned int tcflag_t;
-
-typedef unsigned char cc_t;
-
-typedef unsigned int speed_t;
-
-struct ktermios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct winsize {
-	short unsigned int ws_row;
-	short unsigned int ws_col;
-	short unsigned int ws_xpixel;
-	short unsigned int ws_ypixel;
-};
-
-struct tty_driver;
-
-struct tty_operations;
-
-struct tty_ldisc;
-
-struct termiox;
-
-struct tty_port;
-
-struct tty_struct {
-	int magic;
-	struct kref kref;
-	struct device *dev;
-	struct tty_driver *driver;
-	const struct tty_operations *ops;
-	int index;
-	struct ld_semaphore ldisc_sem;
-	struct tty_ldisc *ldisc;
-	struct mutex atomic_write_lock;
-	struct mutex legacy_mutex;
-	struct mutex throttle_mutex;
-	struct rw_semaphore termios_rwsem;
-	struct mutex winsize_mutex;
-	spinlock_t ctrl_lock;
-	spinlock_t flow_lock;
-	struct ktermios termios;
-	struct ktermios termios_locked;
-	struct termiox *termiox;
-	char name[64];
-	struct pid *pgrp;
-	struct pid *session;
-	long unsigned int flags;
-	int count;
-	struct winsize winsize;
-	long unsigned int stopped: 1;
-	long unsigned int flow_stopped: 1;
-	int: 30;
-	long unsigned int unused: 62;
-	int hw_stopped;
-	long unsigned int ctrl_status: 8;
-	long unsigned int packet: 1;
-	int: 23;
-	long unsigned int unused_ctrl: 55;
-	unsigned int receive_room;
-	int flow_change;
-	struct tty_struct *link;
-	struct fasync_struct *fasync;
-	wait_queue_head_t write_wait;
-	wait_queue_head_t read_wait;
-	struct work_struct hangup_work;
-	void *disc_data;
-	void *driver_data;
-	spinlock_t files_lock;
-	struct list_head tty_files;
-	int closing;
-	unsigned char *write_buf;
-	int write_cnt;
-	struct work_struct SAK_work;
-	struct tty_port *port;
-};
-
-typedef struct {
-	size_t written;
-	size_t count;
-	union {
-		char *buf;
-		void *data;
-	} arg;
-	int error;
-} read_descriptor_t;
-
-struct posix_acl_entry {
-	short int e_tag;
-	short unsigned int e_perm;
-	union {
-		kuid_t e_uid;
-		kgid_t e_gid;
-	};
-};
-
-struct posix_acl {
-	refcount_t a_refcount;
-	struct callback_head a_rcu;
-	unsigned int a_count;
-	struct posix_acl_entry a_entries[0];
+enum pageflags {
+	PG_locked = 0,
+	PG_referenced = 1,
+	PG_uptodate = 2,
+	PG_dirty = 3,
+	PG_lru = 4,
+	PG_active = 5,
+	PG_workingset = 6,
+	PG_waiters = 7,
+	PG_error = 8,
+	PG_slab = 9,
+	PG_owner_priv_1 = 10,
+	PG_arch_1 = 11,
+	PG_reserved = 12,
+	PG_private = 13,
+	PG_private_2 = 14,
+	PG_writeback = 15,
+	PG_head = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_uncached = 22,
+	PG_hwpoison = 23,
+	PG_young = 24,
+	PG_idle = 25,
+	PG_arch_2 = 26,
+	__NR_PAGEFLAGS = 27,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 10,
+	PG_swapcache = 10,
+	PG_fscache = 14,
+	PG_pinned = 10,
+	PG_savepinned = 3,
+	PG_foreign = 10,
+	PG_xen_remapped = 10,
+	PG_slob_free = 13,
+	PG_double_map = 6,
+	PG_has_hwpoisoned = 8,
+	PG_isolated = 18,
+	PG_reported = 2,
 };
 
 typedef __u64 __addrpair;
@@ -7930,14 +10594,6 @@
 	struct net *net;
 } possible_net_t;
 
-struct in6_addr {
-	union {
-		__u8 u6_addr8[16];
-		__be16 u6_addr16[8];
-		__be32 u6_addr32[4];
-	} in6_u;
-};
-
 struct hlist_nulls_node {
 	struct hlist_nulls_node *next;
 	struct hlist_nulls_node **pprev;
@@ -7945,8 +10601,6 @@
 
 struct proto;
 
-struct inet_timewait_death_row;
-
 struct sock_common {
 	union {
 		__addrpair skc_addrpair;
@@ -8014,54 +10668,35 @@
 	wait_queue_head_t wq;
 } socket_lock_t;
 
-struct sk_buff;
-
-struct sk_buff_head {
-	struct sk_buff *next;
-	struct sk_buff *prev;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
 typedef u64 netdev_features_t;
 
 struct sock_cgroup_data {
-	union {
-		struct {
-			u8 is_data: 1;
-			u8 no_refcnt: 1;
-			u8 unused: 6;
-			u8 padding;
-			u16 prioidx;
-			u32 classid;
-		};
-		u64 val;
-	};
+	struct cgroup *cgroup;
+	u32 classid;
+	u16 prioidx;
 };
 
+typedef struct {} netns_tracker;
+
 struct sk_filter;
 
 struct socket_wq;
 
 struct xfrm_policy;
 
-struct dst_entry;
-
 struct socket;
 
-struct net_device;
-
 struct sock_reuseport;
 
-struct bpf_local_storage;
-
 struct sock {
 	struct sock_common __sk_common;
+	struct dst_entry *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
 	socket_lock_t sk_lock;
 	atomic_t sk_drops;
 	int sk_rcvlowat;
 	struct sk_buff_head sk_error_queue;
-	struct sk_buff *sk_rx_skb_cache;
 	struct sk_buff_head sk_receive_queue;
 	struct {
 		atomic_t rmem_alloc;
@@ -8070,6 +10705,7 @@
 		struct sk_buff *tail;
 	} sk_backlog;
 	int sk_forward_alloc;
+	u32 sk_reserved_mem;
 	unsigned int sk_ll_usec;
 	unsigned int sk_napi_id;
 	int sk_rcvbuf;
@@ -8079,7 +10715,6 @@
 		struct socket_wq *sk_wq_raw;
 	};
 	struct xfrm_policy *sk_policy[2];
-	struct dst_entry *sk_rx_dst;
 	struct dst_entry *sk_dst_cache;
 	atomic_t sk_omem_alloc;
 	int sk_sndbuf;
@@ -8090,7 +10725,6 @@
 		struct sk_buff *sk_send_head;
 		struct rb_root tcp_rtx_queue;
 	};
-	struct sk_buff *sk_tx_skb_cache;
 	struct sk_buff_head sk_write_queue;
 	__s32 sk_peek_off;
 	int sk_write_pending;
@@ -8104,13 +10738,11 @@
 	long unsigned int sk_max_pacing_rate;
 	struct page_frag sk_frag;
 	netdev_features_t sk_route_caps;
-	netdev_features_t sk_route_nocaps;
-	netdev_features_t sk_route_forced_caps;
 	int sk_gso_type;
 	unsigned int sk_gso_max_size;
 	gfp_t sk_allocation;
 	__u32 sk_txhash;
-	u8 sk_padding: 1;
+	u8 sk_gso_disabled: 1;
 	u8 sk_kern_sock: 1;
 	u8 sk_no_check_tx: 1;
 	u8 sk_no_check_rx: 1;
@@ -8127,13 +10759,18 @@
 	u32 sk_ack_backlog;
 	u32 sk_max_ack_backlog;
 	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
 	struct pid *sk_peer_pid;
 	const struct cred *sk_peer_cred;
 	long int sk_rcvtimeo;
 	ktime_t sk_stamp;
 	u16 sk_tsflags;
 	u8 sk_shutdown;
-	u32 sk_tskey;
+	atomic_t sk_tskey;
 	atomic_t sk_zckey;
 	u8 sk_clockid;
 	u8 sk_txtime_deadline_mode: 1;
@@ -8154,6 +10791,17 @@
 	struct sock_reuseport *sk_reuseport_cb;
 	struct bpf_local_storage *sk_bpf_storage;
 	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
 };
 
 typedef short unsigned int __kernel_sa_family_t;
@@ -8168,14 +10816,16 @@
 struct msghdr {
 	void *msg_name;
 	int msg_namelen;
+	int msg_inq;
 	struct iov_iter msg_iter;
 	union {
 		void *msg_control;
 		void *msg_control_user;
 	};
 	bool msg_control_is_user: 1;
-	__kernel_size_t msg_controllen;
+	bool msg_get_inq: 1;
 	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
 	struct kiocb *msg_iocb;
 };
 
@@ -8275,82 +10925,113 @@
 	} ifr_ifru;
 };
 
-struct termiox {
-	__u16 x_hflag;
-	__u16 x_cflag;
-	__u16 x_rflag[5];
-	__u16 x_sflag;
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
 };
 
-struct serial_icounter_struct;
+typedef unsigned int tcflag_t;
 
-struct serial_struct;
+typedef unsigned char cc_t;
 
-struct tty_operations {
-	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
-	int (*install)(struct tty_driver *, struct tty_struct *);
-	void (*remove)(struct tty_driver *, struct tty_struct *);
-	int (*open)(struct tty_struct *, struct file *);
-	void (*close)(struct tty_struct *, struct file *);
-	void (*shutdown)(struct tty_struct *);
-	void (*cleanup)(struct tty_struct *);
-	int (*write)(struct tty_struct *, const unsigned char *, int);
-	int (*put_char)(struct tty_struct *, unsigned char);
-	void (*flush_chars)(struct tty_struct *);
-	int (*write_room)(struct tty_struct *);
-	int (*chars_in_buffer)(struct tty_struct *);
-	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
-	void (*set_termios)(struct tty_struct *, struct ktermios *);
-	void (*throttle)(struct tty_struct *);
-	void (*unthrottle)(struct tty_struct *);
-	void (*stop)(struct tty_struct *);
-	void (*start)(struct tty_struct *);
-	void (*hangup)(struct tty_struct *);
-	int (*break_ctl)(struct tty_struct *, int);
-	void (*flush_buffer)(struct tty_struct *);
-	void (*set_ldisc)(struct tty_struct *);
-	void (*wait_until_sent)(struct tty_struct *, int);
-	void (*send_xchar)(struct tty_struct *, char);
-	int (*tiocmget)(struct tty_struct *);
-	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
-	int (*resize)(struct tty_struct *, struct winsize *);
-	int (*set_termiox)(struct tty_struct *, struct termiox *);
-	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
-	int (*get_serial)(struct tty_struct *, struct serial_struct *);
-	int (*set_serial)(struct tty_struct *, struct serial_struct *);
-	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
-	int (*poll_init)(struct tty_driver *, int, char *);
-	int (*poll_get_char)(struct tty_driver *, int);
-	void (*poll_put_char)(struct tty_driver *, int, char);
-	int (*proc_show)(struct seq_file *, void *);
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
 };
 
-struct proc_dir_entry;
+struct winsize {
+	short unsigned int ws_row;
+	short unsigned int ws_col;
+	short unsigned int ws_xpixel;
+	short unsigned int ws_ypixel;
+};
 
-struct tty_driver {
+struct tty_driver;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct tty_port;
+
+struct tty_struct {
 	int magic;
 	struct kref kref;
-	struct cdev **cdevs;
-	struct module *owner;
-	const char *driver_name;
-	const char *name;
-	int name_base;
-	int major;
-	int minor_start;
-	unsigned int num;
-	short int type;
-	short int subtype;
-	struct ktermios init_termios;
-	long unsigned int flags;
-	struct proc_dir_entry *proc_entry;
-	struct tty_driver *other;
-	struct tty_struct **ttys;
-	struct tty_port **ports;
-	struct ktermios **termios;
-	void *driver_state;
+	struct device *dev;
+	struct tty_driver *driver;
 	const struct tty_operations *ops;
-	struct list_head tty_drivers;
+	int index;
+	struct ld_semaphore ldisc_sem;
+	struct tty_ldisc *ldisc;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	long unsigned int flags;
+	int count;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		long unsigned int unused[0];
+	} flow;
+	struct {
+		spinlock_t lock;
+		struct pid *pgrp;
+		struct pid *session;
+		unsigned char pktstatus;
+		bool packet;
+		long unsigned int unused[0];
+	} ctrl;
+	int hw_stopped;
+	unsigned int receive_room;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	struct list_head tty_files;
+	int closing;
+	unsigned char *write_buf;
+	int write_cnt;
+	struct work_struct SAK_work;
+	struct tty_port *port;
+};
+
+struct posix_acl_entry {
+	short int e_tag;
+	short unsigned int e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
 };
 
 struct tty_buffer {
@@ -8378,6 +11059,82 @@
 	struct tty_buffer *tail;
 };
 
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	int (*write)(struct tty_struct *, const unsigned char *, int);
+	int (*put_char)(struct tty_struct *, unsigned char);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	void (*set_termios)(struct tty_struct *, struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*poll_init)(struct tty_driver *, int, char *);
+	int (*poll_get_char)(struct tty_driver *, int);
+	void (*poll_put_char)(struct tty_driver *, int, char);
+	int (*proc_show)(struct seq_file *, void *);
+};
+
+struct tty_driver {
+	int magic;
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short int type;
+	short int subtype;
+	struct ktermios init_termios;
+	long unsigned int flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
 struct tty_port_operations;
 
 struct tty_port_client_operations;
@@ -8396,10 +11153,20 @@
 	long unsigned int flags;
 	long unsigned int iflags;
 	unsigned char console: 1;
-	unsigned char low_latency: 1;
 	struct mutex mutex;
 	struct mutex buf_mutex;
 	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
 	unsigned int close_delay;
 	unsigned int closing_wait;
 	int drain_delay;
@@ -8408,26 +11175,23 @@
 };
 
 struct tty_ldisc_ops {
-	int magic;
 	char *name;
 	int num;
-	int flags;
 	int (*open)(struct tty_struct *);
 	void (*close)(struct tty_struct *);
 	void (*flush_buffer)(struct tty_struct *);
-	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t);
+	ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);
 	ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);
-	int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
-	int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);
+	int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);
 	void (*set_termios)(struct tty_struct *, struct ktermios *);
 	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
-	int (*hangup)(struct tty_struct *);
-	void (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int);
 	void (*write_wakeup)(struct tty_struct *);
 	void (*dcd_change)(struct tty_struct *, unsigned int);
-	int (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);
+	int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int);
 	struct module *owner;
-	int refcount;
 };
 
 struct tty_ldisc {
@@ -8435,6 +11199,14 @@
 	struct tty_struct *tty;
 };
 
+struct scatterlist {
+	long unsigned int page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+	unsigned int dma_length;
+};
+
 struct tty_port_operations {
 	int (*carrier_raised)(struct tty_port *);
 	void (*dtr_rts)(struct tty_port *, int);
@@ -8448,1918 +11220,10 @@
 	void (*write_wakeup)(struct tty_port *);
 };
 
-struct prot_inuse;
-
-struct netns_core {
-	struct ctl_table_header *sysctl_hdr;
-	int sysctl_somaxconn;
-	int *sock_inuse;
-	struct prot_inuse *prot_inuse;
-};
-
-struct tcp_mib;
-
-struct ipstats_mib;
-
-struct linux_mib;
-
-struct udp_mib;
-
-struct icmp_mib;
-
-struct icmpmsg_mib;
-
-struct icmpv6_mib;
-
-struct icmpv6msg_mib;
-
-struct linux_tls_mib;
-
-struct mptcp_mib;
-
-struct netns_mib {
-	struct tcp_mib *tcp_statistics;
-	struct ipstats_mib *ip_statistics;
-	struct linux_mib *net_statistics;
-	struct udp_mib *udp_statistics;
-	struct udp_mib *udplite_statistics;
-	struct icmp_mib *icmp_statistics;
-	struct icmpmsg_mib *icmpmsg_statistics;
-	struct proc_dir_entry *proc_net_devsnmp6;
-	struct udp_mib *udp_stats_in6;
-	struct udp_mib *udplite_stats_in6;
-	struct ipstats_mib *ipv6_statistics;
-	struct icmpv6_mib *icmpv6_statistics;
-	struct icmpv6msg_mib *icmpv6msg_statistics;
-	struct linux_tls_mib *tls_statistics;
-	struct mptcp_mib *mptcp_statistics;
-};
-
-struct netns_packet {
-	struct mutex sklist_lock;
-	struct hlist_head sklist;
-};
-
-struct netns_unix {
-	int sysctl_max_dgram_qlen;
-	struct ctl_table_header *ctl;
-};
-
-struct netns_nexthop {
-	struct rb_root rb_root;
-	struct hlist_head *devhash;
-	unsigned int seq;
-	u32 last_id_allocated;
-	struct blocking_notifier_head notifier_chain;
-};
-
-struct local_ports {
-	seqlock_t lock;
-	int range[2];
-	bool warned;
-};
-
-struct inet_hashinfo;
-
-struct inet_timewait_death_row {
-	atomic_t tw_count;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_hashinfo *hashinfo;
-	int sysctl_max_tw_buckets;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ping_group_range {
-	seqlock_t lock;
-	kgid_t range[2];
-};
-
-typedef struct {
-	u64 key[2];
-} siphash_key_t;
-
-struct ipv4_devconf;
-
-struct ip_ra_chain;
-
-struct fib_rules_ops;
-
-struct fib_table;
-
-struct inet_peer_base;
-
-struct fqdir;
-
-struct xt_table;
-
-struct tcp_congestion_ops;
-
-struct tcp_fastopen_context;
-
-struct fib_notifier_ops;
-
-struct netns_ipv4 {
-	struct ctl_table_header *forw_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *ipv4_hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *xfrm4_hdr;
-	struct ipv4_devconf *devconf_all;
-	struct ipv4_devconf *devconf_dflt;
-	struct ip_ra_chain *ra_chain;
-	struct mutex ra_mutex;
-	struct fib_rules_ops *rules_ops;
-	bool fib_has_custom_rules;
-	unsigned int fib_rules_require_fldissect;
-	struct fib_table *fib_main;
-	struct fib_table *fib_default;
-	bool fib_has_custom_local_routes;
-	int fib_num_tclassid_users;
-	struct hlist_head *fib_table_hash;
-	bool fib_offload_disabled;
-	struct sock *fibnl;
-	struct sock **icmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct inet_peer_base *peers;
-	struct sock **tcp_sk;
-	struct fqdir *fqdir;
-	struct xt_table *iptable_filter;
-	struct xt_table *iptable_mangle;
-	struct xt_table *iptable_raw;
-	struct xt_table *arptable_filter;
-	struct xt_table *iptable_security;
-	struct xt_table *nat_table;
-	int sysctl_icmp_echo_ignore_all;
-	int sysctl_icmp_echo_ignore_broadcasts;
-	int sysctl_icmp_ignore_bogus_error_responses;
-	int sysctl_icmp_ratelimit;
-	int sysctl_icmp_ratemask;
-	int sysctl_icmp_errors_use_inbound_ifaddr;
-	struct local_ports ip_local_ports;
-	int sysctl_tcp_ecn;
-	int sysctl_tcp_ecn_fallback;
-	int sysctl_ip_default_ttl;
-	int sysctl_ip_no_pmtu_disc;
-	int sysctl_ip_fwd_use_pmtu;
-	int sysctl_ip_fwd_update_priority;
-	int sysctl_ip_nonlocal_bind;
-	int sysctl_ip_autobind_reuse;
-	int sysctl_ip_dynaddr;
-	int sysctl_ip_early_demux;
-	int sysctl_raw_l3mdev_accept;
-	int sysctl_tcp_early_demux;
-	int sysctl_udp_early_demux;
-	int sysctl_nexthop_compat_mode;
-	int sysctl_fwmark_reflect;
-	int sysctl_tcp_fwmark_accept;
-	int sysctl_tcp_l3mdev_accept;
-	int sysctl_tcp_mtu_probing;
-	int sysctl_tcp_mtu_probe_floor;
-	int sysctl_tcp_base_mss;
-	int sysctl_tcp_min_snd_mss;
-	int sysctl_tcp_probe_threshold;
-	u32 sysctl_tcp_probe_interval;
-	int sysctl_tcp_keepalive_time;
-	int sysctl_tcp_keepalive_probes;
-	int sysctl_tcp_keepalive_intvl;
-	int sysctl_tcp_syn_retries;
-	int sysctl_tcp_synack_retries;
-	int sysctl_tcp_syncookies;
-	int sysctl_tcp_reordering;
-	int sysctl_tcp_retries1;
-	int sysctl_tcp_retries2;
-	int sysctl_tcp_orphan_retries;
-	int sysctl_tcp_fin_timeout;
-	unsigned int sysctl_tcp_notsent_lowat;
-	int sysctl_tcp_tw_reuse;
-	int sysctl_tcp_sack;
-	int sysctl_tcp_window_scaling;
-	int sysctl_tcp_timestamps;
-	int sysctl_tcp_early_retrans;
-	int sysctl_tcp_recovery;
-	int sysctl_tcp_thin_linear_timeouts;
-	int sysctl_tcp_slow_start_after_idle;
-	int sysctl_tcp_retrans_collapse;
-	int sysctl_tcp_stdurg;
-	int sysctl_tcp_rfc1337;
-	int sysctl_tcp_abort_on_overflow;
-	int sysctl_tcp_fack;
-	int sysctl_tcp_max_reordering;
-	int sysctl_tcp_dsack;
-	int sysctl_tcp_app_win;
-	int sysctl_tcp_adv_win_scale;
-	int sysctl_tcp_frto;
-	int sysctl_tcp_nometrics_save;
-	int sysctl_tcp_no_ssthresh_metrics_save;
-	int sysctl_tcp_moderate_rcvbuf;
-	int sysctl_tcp_tso_win_divisor;
-	int sysctl_tcp_workaround_signed_windows;
-	int sysctl_tcp_limit_output_bytes;
-	int sysctl_tcp_challenge_ack_limit;
-	int sysctl_tcp_min_tso_segs;
-	int sysctl_tcp_min_rtt_wlen;
-	int sysctl_tcp_autocorking;
-	int sysctl_tcp_invalid_ratelimit;
-	int sysctl_tcp_pacing_ss_ratio;
-	int sysctl_tcp_pacing_ca_ratio;
-	int sysctl_tcp_wmem[3];
-	int sysctl_tcp_rmem[3];
-	int sysctl_tcp_comp_sack_nr;
-	long unsigned int sysctl_tcp_comp_sack_delay_ns;
-	long unsigned int sysctl_tcp_comp_sack_slack_ns;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct inet_timewait_death_row tcp_death_row;
-	int sysctl_max_syn_backlog;
-	int sysctl_tcp_fastopen;
-	const struct tcp_congestion_ops *tcp_congestion_control;
-	struct tcp_fastopen_context *tcp_fastopen_ctx;
-	spinlock_t tcp_fastopen_ctx_lock;
-	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
-	atomic_t tfo_active_disable_times;
-	long unsigned int tfo_active_disable_stamp;
-	int sysctl_tcp_reflect_tos;
-	int sysctl_udp_wmem_min;
-	int sysctl_udp_rmem_min;
-	int sysctl_udp_l3mdev_accept;
-	int sysctl_igmp_max_memberships;
-	int sysctl_igmp_max_msf;
-	int sysctl_igmp_llm_reports;
-	int sysctl_igmp_qrv;
-	struct ping_group_range ping_group_range;
-	atomic_t dev_addr_genid;
-	long unsigned int *sysctl_local_reserved_ports;
-	int sysctl_ip_prot_sock;
-	struct list_head mr_tables;
-	struct fib_rules_ops *mr_rules_ops;
-	int sysctl_fib_multipath_use_neigh;
-	int sysctl_fib_multipath_hash_policy;
-	struct fib_notifier_ops *notifier_ops;
-	unsigned int fib_seq;
-	struct fib_notifier_ops *ipmr_notifier_ops;
-	unsigned int ipmr_seq;
-	atomic_t rt_genid;
-	siphash_key_t ip_id_key;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_sysctl_ipv6 {
-	struct ctl_table_header *hdr;
-	struct ctl_table_header *route_hdr;
-	struct ctl_table_header *icmp_hdr;
-	struct ctl_table_header *frags_hdr;
-	struct ctl_table_header *xfrm6_hdr;
-	int bindv6only;
-	int flush_delay;
-	int ip6_rt_max_size;
-	int ip6_rt_gc_min_interval;
-	int ip6_rt_gc_timeout;
-	int ip6_rt_gc_interval;
-	int ip6_rt_gc_elasticity;
-	int ip6_rt_mtu_expires;
-	int ip6_rt_min_advmss;
-	int multipath_hash_policy;
-	int flowlabel_consistency;
-	int auto_flowlabels;
-	int icmpv6_time;
-	int icmpv6_echo_ignore_all;
-	int icmpv6_echo_ignore_multicast;
-	int icmpv6_echo_ignore_anycast;
-	long unsigned int icmpv6_ratemask[4];
-	long unsigned int *icmpv6_ratemask_ptr;
-	int anycast_src_echo_reply;
-	int ip_nonlocal_bind;
-	int fwmark_reflect;
-	int idgen_retries;
-	int idgen_delay;
-	int flowlabel_state_ranges;
-	int flowlabel_reflect;
-	int max_dst_opts_cnt;
-	int max_hbh_opts_cnt;
-	int max_dst_opts_len;
-	int max_hbh_opts_len;
-	int seg6_flowlabel;
-	bool skip_notify_on_dev_down;
-};
-
-struct neighbour;
-
-struct dst_ops {
-	short unsigned int family;
-	unsigned int gc_thresh;
-	int (*gc)(struct dst_ops *);
-	struct dst_entry * (*check)(struct dst_entry *, __u32);
-	unsigned int (*default_advmss)(const struct dst_entry *);
-	unsigned int (*mtu)(const struct dst_entry *);
-	u32 * (*cow_metrics)(struct dst_entry *, long unsigned int);
-	void (*destroy)(struct dst_entry *);
-	void (*ifdown)(struct dst_entry *, struct net_device *, int);
-	struct dst_entry * (*negative_advice)(struct dst_entry *);
-	void (*link_failure)(struct sk_buff *);
-	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
-	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
-	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
-	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
-	void (*confirm_neigh)(const struct dst_entry *, const void *);
-	struct kmem_cache *kmem_cachep;
-	struct percpu_counter pcpuc_entries;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct ipv6_devconf;
-
-struct fib6_info;
-
-struct rt6_info;
-
-struct rt6_statistics;
-
-struct fib6_table;
-
-struct seg6_pernet_data;
-
-struct netns_ipv6 {
-	struct netns_sysctl_ipv6 sysctl;
-	struct ipv6_devconf *devconf_all;
-	struct ipv6_devconf *devconf_dflt;
-	struct inet_peer_base *peers;
-	struct fqdir *fqdir;
-	struct xt_table *ip6table_filter;
-	struct xt_table *ip6table_mangle;
-	struct xt_table *ip6table_raw;
-	struct xt_table *ip6table_security;
-	struct xt_table *ip6table_nat;
-	struct fib6_info *fib6_null_entry;
-	struct rt6_info *ip6_null_entry;
-	struct rt6_statistics *rt6_stats;
-	struct timer_list ip6_fib_timer;
-	struct hlist_head *fib_table_hash;
-	struct fib6_table *fib6_main_tbl;
-	struct list_head fib6_walkers;
-	long: 64;
-	long: 64;
-	struct dst_ops ip6_dst_ops;
-	rwlock_t fib6_walker_lock;
-	spinlock_t fib6_gc_lock;
-	unsigned int ip6_rt_gc_expire;
-	long unsigned int ip6_rt_last_gc;
-	unsigned int fib6_rules_require_fldissect;
-	bool fib6_has_custom_rules;
-	unsigned int fib6_routes_require_src;
-	struct rt6_info *ip6_prohibit_entry;
-	struct rt6_info *ip6_blk_hole_entry;
-	struct fib6_table *fib6_local_tbl;
-	struct fib_rules_ops *fib6_rules_ops;
-	struct sock **icmp_sk;
-	struct sock *ndisc_sk;
-	struct sock *tcp_sk;
-	struct sock *igmp_sk;
-	struct sock *mc_autojoin_sk;
-	struct list_head mr6_tables;
-	struct fib_rules_ops *mr6_rules_ops;
-	atomic_t dev_addr_genid;
-	atomic_t fib6_sernum;
-	struct seg6_pernet_data *seg6_data;
-	struct fib_notifier_ops *notifier_ops;
-	struct fib_notifier_ops *ip6mr_notifier_ops;
-	unsigned int ipmr_seq;
-	struct {
-		struct hlist_head head;
-		spinlock_t lock;
-		u32 seq;
-	} ip6addrlbl_table;
-};
-
-struct netns_sysctl_lowpan {
-	struct ctl_table_header *frags_hdr;
-};
-
-struct netns_ieee802154_lowpan {
-	struct netns_sysctl_lowpan sysctl;
-	struct fqdir *fqdir;
-};
-
-struct sctp_mib;
-
-struct netns_sctp {
-	struct sctp_mib *sctp_statistics;
-	struct proc_dir_entry *proc_net_sctp;
-	struct ctl_table_header *sysctl_header;
-	struct sock *ctl_sock;
-	struct list_head local_addr_list;
-	struct list_head addr_waitq;
-	struct timer_list addr_wq_timer;
-	struct list_head auto_asconf_splist;
-	spinlock_t addr_wq_lock;
-	spinlock_t local_addr_lock;
-	unsigned int rto_initial;
-	unsigned int rto_min;
-	unsigned int rto_max;
-	int rto_alpha;
-	int rto_beta;
-	int max_burst;
-	int cookie_preserve_enable;
-	char *sctp_hmac_alg;
-	unsigned int valid_cookie_life;
-	unsigned int sack_timeout;
-	unsigned int hb_interval;
-	int max_retrans_association;
-	int max_retrans_path;
-	int max_retrans_init;
-	int pf_retrans;
-	int ps_retrans;
-	int pf_enable;
-	int pf_expose;
-	int sndbuf_policy;
-	int rcvbuf_policy;
-	int default_auto_asconf;
-	int addip_enable;
-	int addip_noauth;
-	int prsctp_enable;
-	int reconf_enable;
-	int auth_enable;
-	int intl_enable;
-	int ecn_enable;
-	int scope_policy;
-	int rwnd_upd_shift;
-	long unsigned int max_autoclose;
-};
-
-struct netns_dccp {
-	struct sock *v4_ctl_sk;
-	struct sock *v6_ctl_sk;
-};
-
-struct nf_queue_handler;
-
-struct nf_logger;
-
-struct nf_hook_entries;
-
-struct netns_nf {
-	struct proc_dir_entry *proc_netfilter;
-	const struct nf_queue_handler *queue_handler;
-	const struct nf_logger *nf_loggers[13];
-	struct ctl_table_header *nf_log_dir_header;
-	struct nf_hook_entries *hooks_ipv4[5];
-	struct nf_hook_entries *hooks_ipv6[5];
-	struct nf_hook_entries *hooks_arp[3];
-	struct nf_hook_entries *hooks_bridge[5];
-	struct nf_hook_entries *hooks_decnet[7];
-	bool defrag_ipv4;
-	bool defrag_ipv6;
-};
-
-struct ebt_table;
-
-struct netns_xt {
-	struct list_head tables[13];
-	bool notrack_deprecated_warning;
-	bool clusterip_deprecated_warning;
-	struct ebt_table *broute_table;
-	struct ebt_table *frame_filter;
-	struct ebt_table *frame_nat;
-};
-
-struct nf_generic_net {
-	unsigned int timeout;
-};
-
-struct nf_tcp_net {
-	unsigned int timeouts[14];
-	int tcp_loose;
-	int tcp_be_liberal;
-	int tcp_max_retrans;
-};
-
-struct nf_udp_net {
-	unsigned int timeouts[2];
-};
-
-struct nf_icmp_net {
-	unsigned int timeout;
-};
-
-struct nf_dccp_net {
-	int dccp_loose;
-	unsigned int dccp_timeout[10];
-};
-
-struct nf_sctp_net {
-	unsigned int timeouts[10];
-};
-
-struct nf_gre_net {
-	struct list_head keymap_list;
-	unsigned int timeouts[2];
-};
-
-struct nf_ip_net {
-	struct nf_generic_net generic;
-	struct nf_tcp_net tcp;
-	struct nf_udp_net udp;
-	struct nf_icmp_net icmp;
-	struct nf_icmp_net icmpv6;
-	struct nf_dccp_net dccp;
-	struct nf_sctp_net sctp;
-	struct nf_gre_net gre;
-};
-
-struct ct_pcpu;
-
-struct ip_conntrack_stat;
-
-struct nf_ct_event_notifier;
-
-struct nf_exp_event_notifier;
-
-struct netns_ct {
-	atomic_t count;
-	unsigned int expect_count;
-	struct delayed_work ecache_dwork;
-	bool ecache_dwork_pending;
-	bool auto_assign_helper_warned;
-	struct ctl_table_header *sysctl_header;
-	unsigned int sysctl_log_invalid;
-	int sysctl_events;
-	int sysctl_acct;
-	int sysctl_auto_assign_helper;
-	int sysctl_tstamp;
-	int sysctl_checksum;
-	struct ct_pcpu *pcpu_lists;
-	struct ip_conntrack_stat *stat;
-	struct nf_ct_event_notifier *nf_conntrack_event_cb;
-	struct nf_exp_event_notifier *nf_expect_event_cb;
-	struct nf_ip_net nf_ct_proto;
-	unsigned int labels_used;
-};
-
-struct netns_nftables {
-	struct list_head tables;
-	struct list_head commit_list;
-	struct list_head module_list;
-	struct list_head notify_list;
-	struct mutex commit_mutex;
-	unsigned int base_seq;
-	u8 gencursor;
-	u8 validate_state;
-};
-
-struct netns_nf_frag {
-	struct fqdir *fqdir;
-};
-
-struct netns_bpf {
-	struct bpf_prog_array *run_array[2];
-	struct bpf_prog *progs[2];
-	struct list_head links[2];
-};
-
-struct xfrm_policy_hash {
-	struct hlist_head *table;
-	unsigned int hmask;
-	u8 dbits4;
-	u8 sbits4;
-	u8 dbits6;
-	u8 sbits6;
-};
-
-struct xfrm_policy_hthresh {
-	struct work_struct work;
-	seqlock_t lock;
-	u8 lbits4;
-	u8 rbits4;
-	u8 lbits6;
-	u8 rbits6;
-};
-
-struct netns_xfrm {
-	struct list_head state_all;
-	struct hlist_head *state_bydst;
-	struct hlist_head *state_bysrc;
-	struct hlist_head *state_byspi;
-	unsigned int state_hmask;
-	unsigned int state_num;
-	struct work_struct state_hash_work;
-	struct list_head policy_all;
-	struct hlist_head *policy_byidx;
-	unsigned int policy_idx_hmask;
-	struct hlist_head policy_inexact[3];
-	struct xfrm_policy_hash policy_bydst[3];
-	unsigned int policy_count[6];
-	struct work_struct policy_hash_work;
-	struct xfrm_policy_hthresh policy_hthresh;
-	struct list_head inexact_bins;
-	struct sock *nlsk;
-	struct sock *nlsk_stash;
-	u32 sysctl_aevent_etime;
-	u32 sysctl_aevent_rseqth;
-	int sysctl_larval_drop;
-	u32 sysctl_acq_expires;
-	struct ctl_table_header *sysctl_hdr;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct dst_ops xfrm4_dst_ops;
-	struct dst_ops xfrm6_dst_ops;
-	spinlock_t xfrm_state_lock;
-	spinlock_t xfrm_policy_lock;
-	struct mutex xfrm_cfg_mutex;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct netns_ipvs;
-
-struct mpls_route;
-
-struct netns_mpls {
-	int ip_ttl_propagate;
-	int default_ttl;
-	size_t platform_labels;
-	struct mpls_route **platform_label;
-	struct ctl_table_header *ctl;
-};
-
-struct can_dev_rcv_lists;
-
-struct can_pkg_stats;
-
-struct can_rcv_lists_stats;
-
-struct netns_can {
-	struct proc_dir_entry *proc_dir;
-	struct proc_dir_entry *pde_stats;
-	struct proc_dir_entry *pde_reset_stats;
-	struct proc_dir_entry *pde_rcvlist_all;
-	struct proc_dir_entry *pde_rcvlist_fil;
-	struct proc_dir_entry *pde_rcvlist_inv;
-	struct proc_dir_entry *pde_rcvlist_sff;
-	struct proc_dir_entry *pde_rcvlist_eff;
-	struct proc_dir_entry *pde_rcvlist_err;
-	struct proc_dir_entry *bcmproc_dir;
-	struct can_dev_rcv_lists *rx_alldev_list;
-	spinlock_t rcvlists_lock;
-	struct timer_list stattimer;
-	struct can_pkg_stats *pkg_stats;
-	struct can_rcv_lists_stats *rcv_lists_stats;
-	struct hlist_head cgw_list;
-};
-
-struct netns_xdp {
-	struct mutex lock;
-	struct hlist_head list;
-};
-
-struct uevent_sock;
-
-struct net_generic;
-
-struct net {
-	refcount_t passive;
-	refcount_t count;
-	spinlock_t rules_mod_lock;
-	unsigned int dev_unreg_count;
-	unsigned int dev_base_seq;
-	int ifindex;
-	spinlock_t nsid_lock;
-	atomic_t fnhe_genid;
-	struct list_head list;
-	struct list_head exit_list;
-	struct llist_node cleanup_list;
-	struct key_tag *key_domain;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct idr netns_ids;
-	struct ns_common ns;
-	struct list_head dev_base_head;
-	struct proc_dir_entry *proc_net;
-	struct proc_dir_entry *proc_net_stat;
-	struct ctl_table_set sysctls;
-	struct sock *rtnl;
-	struct sock *genl_sock;
-	struct uevent_sock *uevent_sock;
-	struct hlist_head *dev_name_head;
-	struct hlist_head *dev_index_head;
-	struct raw_notifier_head netdev_chain;
-	u32 hash_mix;
-	struct net_device *loopback_dev;
-	struct list_head rules_ops;
-	struct netns_core core;
-	struct netns_mib mib;
-	struct netns_packet packet;
-	struct netns_unix unx;
-	struct netns_nexthop nexthop;
-	long: 64;
-	struct netns_ipv4 ipv4;
-	struct netns_ipv6 ipv6;
-	struct netns_ieee802154_lowpan ieee802154_lowpan;
-	struct netns_sctp sctp;
-	struct netns_dccp dccp;
-	struct netns_nf nf;
-	struct netns_xt xt;
-	struct netns_ct ct;
-	struct netns_nftables nft;
-	struct netns_nf_frag nf_frag;
-	struct ctl_table_header *nf_frag_frags_hdr;
-	struct sock *nfnl;
-	struct sock *nfnl_stash;
-	struct list_head nfnl_acct_list;
-	struct list_head nfct_timeout_list;
-	struct sk_buff_head wext_nlevents;
-	struct net_generic *gen;
-	struct netns_bpf bpf;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netns_xfrm xfrm;
-	atomic64_t net_cookie;
-	struct netns_ipvs *ipvs;
-	struct netns_mpls mpls;
-	struct netns_can can;
-	struct netns_xdp xdp;
-	struct sock *crypto_nlsk;
-	struct sock *diag_nlsk;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 typedef struct {
 	local64_t v;
 } u64_stats_t;
 
-struct bpf_insn {
-	__u8 code;
-	__u8 dst_reg: 4;
-	__u8 src_reg: 4;
-	__s16 off;
-	__s32 imm;
-};
-
-enum bpf_map_type {
-	BPF_MAP_TYPE_UNSPEC = 0,
-	BPF_MAP_TYPE_HASH = 1,
-	BPF_MAP_TYPE_ARRAY = 2,
-	BPF_MAP_TYPE_PROG_ARRAY = 3,
-	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
-	BPF_MAP_TYPE_PERCPU_HASH = 5,
-	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
-	BPF_MAP_TYPE_STACK_TRACE = 7,
-	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
-	BPF_MAP_TYPE_LRU_HASH = 9,
-	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
-	BPF_MAP_TYPE_LPM_TRIE = 11,
-	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
-	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
-	BPF_MAP_TYPE_DEVMAP = 14,
-	BPF_MAP_TYPE_SOCKMAP = 15,
-	BPF_MAP_TYPE_CPUMAP = 16,
-	BPF_MAP_TYPE_XSKMAP = 17,
-	BPF_MAP_TYPE_SOCKHASH = 18,
-	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
-	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
-	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
-	BPF_MAP_TYPE_QUEUE = 22,
-	BPF_MAP_TYPE_STACK = 23,
-	BPF_MAP_TYPE_SK_STORAGE = 24,
-	BPF_MAP_TYPE_DEVMAP_HASH = 25,
-	BPF_MAP_TYPE_STRUCT_OPS = 26,
-	BPF_MAP_TYPE_RINGBUF = 27,
-	BPF_MAP_TYPE_INODE_STORAGE = 28,
-};
-
-enum bpf_prog_type {
-	BPF_PROG_TYPE_UNSPEC = 0,
-	BPF_PROG_TYPE_SOCKET_FILTER = 1,
-	BPF_PROG_TYPE_KPROBE = 2,
-	BPF_PROG_TYPE_SCHED_CLS = 3,
-	BPF_PROG_TYPE_SCHED_ACT = 4,
-	BPF_PROG_TYPE_TRACEPOINT = 5,
-	BPF_PROG_TYPE_XDP = 6,
-	BPF_PROG_TYPE_PERF_EVENT = 7,
-	BPF_PROG_TYPE_CGROUP_SKB = 8,
-	BPF_PROG_TYPE_CGROUP_SOCK = 9,
-	BPF_PROG_TYPE_LWT_IN = 10,
-	BPF_PROG_TYPE_LWT_OUT = 11,
-	BPF_PROG_TYPE_LWT_XMIT = 12,
-	BPF_PROG_TYPE_SOCK_OPS = 13,
-	BPF_PROG_TYPE_SK_SKB = 14,
-	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
-	BPF_PROG_TYPE_SK_MSG = 16,
-	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
-	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
-	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
-	BPF_PROG_TYPE_LIRC_MODE2 = 20,
-	BPF_PROG_TYPE_SK_REUSEPORT = 21,
-	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
-	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
-	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
-	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
-	BPF_PROG_TYPE_TRACING = 26,
-	BPF_PROG_TYPE_STRUCT_OPS = 27,
-	BPF_PROG_TYPE_EXT = 28,
-	BPF_PROG_TYPE_LSM = 29,
-	BPF_PROG_TYPE_SK_LOOKUP = 30,
-};
-
-enum bpf_attach_type {
-	BPF_CGROUP_INET_INGRESS = 0,
-	BPF_CGROUP_INET_EGRESS = 1,
-	BPF_CGROUP_INET_SOCK_CREATE = 2,
-	BPF_CGROUP_SOCK_OPS = 3,
-	BPF_SK_SKB_STREAM_PARSER = 4,
-	BPF_SK_SKB_STREAM_VERDICT = 5,
-	BPF_CGROUP_DEVICE = 6,
-	BPF_SK_MSG_VERDICT = 7,
-	BPF_CGROUP_INET4_BIND = 8,
-	BPF_CGROUP_INET6_BIND = 9,
-	BPF_CGROUP_INET4_CONNECT = 10,
-	BPF_CGROUP_INET6_CONNECT = 11,
-	BPF_CGROUP_INET4_POST_BIND = 12,
-	BPF_CGROUP_INET6_POST_BIND = 13,
-	BPF_CGROUP_UDP4_SENDMSG = 14,
-	BPF_CGROUP_UDP6_SENDMSG = 15,
-	BPF_LIRC_MODE2 = 16,
-	BPF_FLOW_DISSECTOR = 17,
-	BPF_CGROUP_SYSCTL = 18,
-	BPF_CGROUP_UDP4_RECVMSG = 19,
-	BPF_CGROUP_UDP6_RECVMSG = 20,
-	BPF_CGROUP_GETSOCKOPT = 21,
-	BPF_CGROUP_SETSOCKOPT = 22,
-	BPF_TRACE_RAW_TP = 23,
-	BPF_TRACE_FENTRY = 24,
-	BPF_TRACE_FEXIT = 25,
-	BPF_MODIFY_RETURN = 26,
-	BPF_LSM_MAC = 27,
-	BPF_TRACE_ITER = 28,
-	BPF_CGROUP_INET4_GETPEERNAME = 29,
-	BPF_CGROUP_INET6_GETPEERNAME = 30,
-	BPF_CGROUP_INET4_GETSOCKNAME = 31,
-	BPF_CGROUP_INET6_GETSOCKNAME = 32,
-	BPF_XDP_DEVMAP = 33,
-	BPF_CGROUP_INET_SOCK_RELEASE = 34,
-	BPF_XDP_CPUMAP = 35,
-	BPF_SK_LOOKUP = 36,
-	BPF_XDP = 37,
-	__MAX_BPF_ATTACH_TYPE = 38,
-};
-
-union bpf_attr {
-	struct {
-		__u32 map_type;
-		__u32 key_size;
-		__u32 value_size;
-		__u32 max_entries;
-		__u32 map_flags;
-		__u32 inner_map_fd;
-		__u32 numa_node;
-		char map_name[16];
-		__u32 map_ifindex;
-		__u32 btf_fd;
-		__u32 btf_key_type_id;
-		__u32 btf_value_type_id;
-		__u32 btf_vmlinux_value_type_id;
-	};
-	struct {
-		__u32 map_fd;
-		__u64 key;
-		union {
-			__u64 value;
-			__u64 next_key;
-		};
-		__u64 flags;
-	};
-	struct {
-		__u64 in_batch;
-		__u64 out_batch;
-		__u64 keys;
-		__u64 values;
-		__u32 count;
-		__u32 map_fd;
-		__u64 elem_flags;
-		__u64 flags;
-	} batch;
-	struct {
-		__u32 prog_type;
-		__u32 insn_cnt;
-		__u64 insns;
-		__u64 license;
-		__u32 log_level;
-		__u32 log_size;
-		__u64 log_buf;
-		__u32 kern_version;
-		__u32 prog_flags;
-		char prog_name[16];
-		__u32 prog_ifindex;
-		__u32 expected_attach_type;
-		__u32 prog_btf_fd;
-		__u32 func_info_rec_size;
-		__u64 func_info;
-		__u32 func_info_cnt;
-		__u32 line_info_rec_size;
-		__u64 line_info;
-		__u32 line_info_cnt;
-		__u32 attach_btf_id;
-		__u32 attach_prog_fd;
-	};
-	struct {
-		__u64 pathname;
-		__u32 bpf_fd;
-		__u32 file_flags;
-	};
-	struct {
-		__u32 target_fd;
-		__u32 attach_bpf_fd;
-		__u32 attach_type;
-		__u32 attach_flags;
-		__u32 replace_bpf_fd;
-	};
-	struct {
-		__u32 prog_fd;
-		__u32 retval;
-		__u32 data_size_in;
-		__u32 data_size_out;
-		__u64 data_in;
-		__u64 data_out;
-		__u32 repeat;
-		__u32 duration;
-		__u32 ctx_size_in;
-		__u32 ctx_size_out;
-		__u64 ctx_in;
-		__u64 ctx_out;
-		__u32 flags;
-		__u32 cpu;
-	} test;
-	struct {
-		union {
-			__u32 start_id;
-			__u32 prog_id;
-			__u32 map_id;
-			__u32 btf_id;
-			__u32 link_id;
-		};
-		__u32 next_id;
-		__u32 open_flags;
-	};
-	struct {
-		__u32 bpf_fd;
-		__u32 info_len;
-		__u64 info;
-	} info;
-	struct {
-		__u32 target_fd;
-		__u32 attach_type;
-		__u32 query_flags;
-		__u32 attach_flags;
-		__u64 prog_ids;
-		__u32 prog_cnt;
-	} query;
-	struct {
-		__u64 name;
-		__u32 prog_fd;
-	} raw_tracepoint;
-	struct {
-		__u64 btf;
-		__u64 btf_log_buf;
-		__u32 btf_size;
-		__u32 btf_log_size;
-		__u32 btf_log_level;
-	};
-	struct {
-		__u32 pid;
-		__u32 fd;
-		__u32 flags;
-		__u32 buf_len;
-		__u64 buf;
-		__u32 prog_id;
-		__u32 fd_type;
-		__u64 probe_offset;
-		__u64 probe_addr;
-	} task_fd_query;
-	struct {
-		__u32 prog_fd;
-		union {
-			__u32 target_fd;
-			__u32 target_ifindex;
-		};
-		__u32 attach_type;
-		__u32 flags;
-		union {
-			__u32 target_btf_id;
-			struct {
-				__u64 iter_info;
-				__u32 iter_info_len;
-			};
-		};
-	} link_create;
-	struct {
-		__u32 link_fd;
-		__u32 new_prog_fd;
-		__u32 flags;
-		__u32 old_prog_fd;
-	} link_update;
-	struct {
-		__u32 link_fd;
-	} link_detach;
-	struct {
-		__u32 type;
-	} enable_stats;
-	struct {
-		__u32 link_fd;
-		__u32 flags;
-	} iter_create;
-	struct {
-		__u32 prog_fd;
-		__u32 map_fd;
-		__u32 flags;
-	} prog_bind_map;
-};
-
-struct bpf_func_info {
-	__u32 insn_off;
-	__u32 type_id;
-};
-
-struct bpf_line_info {
-	__u32 insn_off;
-	__u32 file_name_off;
-	__u32 line_off;
-	__u32 line_col;
-};
-
-struct bpf_iter_aux_info;
-
-typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
-
-struct bpf_map;
-
-struct bpf_iter_aux_info {
-	struct bpf_map *map;
-};
-
-typedef void (*bpf_iter_fini_seq_priv_t)(void *);
-
-struct bpf_iter_seq_info {
-	const struct seq_operations *seq_ops;
-	bpf_iter_init_seq_priv_t init_seq_private;
-	bpf_iter_fini_seq_priv_t fini_seq_private;
-	u32 seq_priv_size;
-};
-
-struct btf;
-
-struct btf_type;
-
-struct bpf_prog_aux;
-
-struct bpf_local_storage_map;
-
-struct bpf_map_ops {
-	int (*map_alloc_check)(union bpf_attr *);
-	struct bpf_map * (*map_alloc)(union bpf_attr *);
-	void (*map_release)(struct bpf_map *, struct file *);
-	void (*map_free)(struct bpf_map *);
-	int (*map_get_next_key)(struct bpf_map *, void *, void *);
-	void (*map_release_uref)(struct bpf_map *);
-	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
-	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
-	void * (*map_lookup_elem)(struct bpf_map *, void *);
-	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_map *, void *);
-	int (*map_push_elem)(struct bpf_map *, void *, u64);
-	int (*map_pop_elem)(struct bpf_map *, void *);
-	int (*map_peek_elem)(struct bpf_map *, void *);
-	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
-	void (*map_fd_put_ptr)(void *);
-	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
-	u32 (*map_fd_sys_lookup_elem)(void *);
-	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
-	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
-	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
-	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
-	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
-	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
-	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
-	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
-	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
-	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
-	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
-	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
-	const char * const map_btf_name;
-	int *map_btf_id;
-	const struct bpf_iter_seq_info *iter_seq_info;
-};
-
-struct bpf_map_memory {
-	u32 pages;
-	struct user_struct *user;
-};
-
-struct bpf_map {
-	const struct bpf_map_ops *ops;
-	struct bpf_map *inner_map_meta;
-	void *security;
-	enum bpf_map_type map_type;
-	u32 key_size;
-	u32 value_size;
-	u32 max_entries;
-	u32 map_flags;
-	int spin_lock_off;
-	u32 id;
-	int numa_node;
-	u32 btf_key_type_id;
-	u32 btf_value_type_id;
-	struct btf *btf;
-	struct bpf_map_memory memory;
-	char name[16];
-	u32 btf_vmlinux_value_type_id;
-	bool bypass_spec_v1;
-	bool frozen;
-	long: 16;
-	long: 64;
-	long: 64;
-	atomic64_t refcnt;
-	atomic64_t usercnt;
-	struct work_struct work;
-	struct mutex freeze_mutex;
-	u64 writecnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct btf_header {
-	__u16 magic;
-	__u8 version;
-	__u8 flags;
-	__u32 hdr_len;
-	__u32 type_off;
-	__u32 type_len;
-	__u32 str_off;
-	__u32 str_len;
-};
-
-struct btf {
-	void *data;
-	struct btf_type **types;
-	u32 *resolved_ids;
-	u32 *resolved_sizes;
-	const char *strings;
-	void *nohdr_data;
-	struct btf_header hdr;
-	u32 nr_types;
-	u32 types_size;
-	u32 data_size;
-	refcount_t refcnt;
-	u32 id;
-	struct callback_head rcu;
-};
-
-struct btf_type {
-	__u32 name_off;
-	__u32 info;
-	union {
-		__u32 size;
-		__u32 type;
-	};
-};
-
-enum bpf_tramp_prog_type {
-	BPF_TRAMP_FENTRY = 0,
-	BPF_TRAMP_FEXIT = 1,
-	BPF_TRAMP_MODIFY_RETURN = 2,
-	BPF_TRAMP_MAX = 3,
-	BPF_TRAMP_REPLACE = 4,
-};
-
-struct bpf_ksym {
-	long unsigned int start;
-	long unsigned int end;
-	char name[128];
-	struct list_head lnode;
-	struct latch_tree_node tnode;
-	bool prog;
-};
-
-struct bpf_ctx_arg_aux;
-
-struct bpf_trampoline;
-
-struct bpf_jit_poke_descriptor;
-
-struct bpf_prog_ops;
-
-struct bpf_prog_offload;
-
-struct bpf_func_info_aux;
-
-struct bpf_prog_stats;
-
-struct bpf_prog_aux {
-	atomic64_t refcnt;
-	u32 used_map_cnt;
-	u32 max_ctx_offset;
-	u32 max_pkt_offset;
-	u32 max_tp_access;
-	u32 stack_depth;
-	u32 id;
-	u32 func_cnt;
-	u32 func_idx;
-	u32 attach_btf_id;
-	u32 ctx_arg_info_size;
-	u32 max_rdonly_access;
-	u32 max_rdwr_access;
-	const struct bpf_ctx_arg_aux *ctx_arg_info;
-	struct mutex dst_mutex;
-	struct bpf_prog *dst_prog;
-	struct bpf_trampoline *dst_trampoline;
-	enum bpf_prog_type saved_dst_prog_type;
-	enum bpf_attach_type saved_dst_attach_type;
-	bool verifier_zext;
-	bool offload_requested;
-	bool attach_btf_trace;
-	bool func_proto_unreliable;
-	bool sleepable;
-	bool tail_call_reachable;
-	enum bpf_tramp_prog_type trampoline_prog_type;
-	struct hlist_node tramp_hlist;
-	const struct btf_type *attach_func_proto;
-	const char *attach_func_name;
-	struct bpf_prog **func;
-	void *jit_data;
-	struct bpf_jit_poke_descriptor *poke_tab;
-	u32 size_poke_tab;
-	struct bpf_ksym ksym;
-	const struct bpf_prog_ops *ops;
-	struct bpf_map **used_maps;
-	struct mutex used_maps_mutex;
-	struct bpf_prog *prog;
-	struct user_struct *user;
-	u64 load_time;
-	struct bpf_map *cgroup_storage[2];
-	char name[16];
-	void *security;
-	struct bpf_prog_offload *offload;
-	struct btf *btf;
-	struct bpf_func_info *func_info;
-	struct bpf_func_info_aux *func_info_aux;
-	struct bpf_line_info *linfo;
-	void **jited_linfo;
-	u32 func_info_cnt;
-	u32 nr_linfo;
-	u32 linfo_idx;
-	u32 num_exentries;
-	struct exception_table_entry *extable;
-	struct bpf_prog_stats *stats;
-	union {
-		struct work_struct work;
-		struct callback_head rcu;
-	};
-};
-
-struct sock_filter {
-	__u16 code;
-	__u8 jt;
-	__u8 jf;
-	__u32 k;
-};
-
-struct sock_fprog_kern;
-
-struct bpf_prog {
-	u16 pages;
-	u16 jited: 1;
-	u16 jit_requested: 1;
-	u16 gpl_compatible: 1;
-	u16 cb_access: 1;
-	u16 dst_needed: 1;
-	u16 blinded: 1;
-	u16 is_func: 1;
-	u16 kprobe_override: 1;
-	u16 has_callchain_buf: 1;
-	u16 enforce_expected_attach_type: 1;
-	u16 call_get_stack: 1;
-	enum bpf_prog_type type;
-	enum bpf_attach_type expected_attach_type;
-	u32 len;
-	u32 jited_len;
-	u8 tag[8];
-	struct bpf_prog_aux *aux;
-	struct sock_fprog_kern *orig_prog;
-	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
-	struct sock_filter insns[0];
-	struct bpf_insn insnsi[0];
-};
-
-struct bpf_offloaded_map;
-
-struct bpf_map_dev_ops {
-	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
-	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
-	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
-};
-
-struct bpf_offloaded_map {
-	struct bpf_map map;
-	struct net_device *netdev;
-	const struct bpf_map_dev_ops *dev_ops;
-	void *dev_priv;
-	struct list_head offloads;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct net_device_stats {
-	long unsigned int rx_packets;
-	long unsigned int tx_packets;
-	long unsigned int rx_bytes;
-	long unsigned int tx_bytes;
-	long unsigned int rx_errors;
-	long unsigned int tx_errors;
-	long unsigned int rx_dropped;
-	long unsigned int tx_dropped;
-	long unsigned int multicast;
-	long unsigned int collisions;
-	long unsigned int rx_length_errors;
-	long unsigned int rx_over_errors;
-	long unsigned int rx_crc_errors;
-	long unsigned int rx_frame_errors;
-	long unsigned int rx_fifo_errors;
-	long unsigned int rx_missed_errors;
-	long unsigned int tx_aborted_errors;
-	long unsigned int tx_carrier_errors;
-	long unsigned int tx_fifo_errors;
-	long unsigned int tx_heartbeat_errors;
-	long unsigned int tx_window_errors;
-	long unsigned int rx_compressed;
-	long unsigned int tx_compressed;
-};
-
-struct netdev_hw_addr_list {
-	struct list_head list;
-	int count;
-};
-
-struct tipc_bearer;
-
-struct dn_dev;
-
-struct mpls_dev;
-
-enum rx_handler_result {
-	RX_HANDLER_CONSUMED = 0,
-	RX_HANDLER_ANOTHER = 1,
-	RX_HANDLER_EXACT = 2,
-	RX_HANDLER_PASS = 3,
-};
-
-typedef enum rx_handler_result rx_handler_result_t;
-
-typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
-
-struct pcpu_dstats;
-
-struct garp_port;
-
-struct mrp_port;
-
-struct netdev_tc_txq {
-	u16 count;
-	u16 offset;
-};
-
-struct macsec_ops;
-
-struct udp_tunnel_nic;
-
-struct bpf_xdp_link;
-
-struct bpf_xdp_entity {
-	struct bpf_prog *prog;
-	struct bpf_xdp_link *link;
-};
-
-struct netdev_name_node;
-
-struct dev_ifalias;
-
-struct iw_handler_def;
-
-struct iw_public_data;
-
-struct net_device_ops;
-
-struct ethtool_ops;
-
-struct l3mdev_ops;
-
-struct ndisc_ops;
-
-struct xfrmdev_ops;
-
-struct tlsdev_ops;
-
-struct header_ops;
-
-struct vlan_info;
-
-struct dsa_port;
-
-struct in_device;
-
-struct inet6_dev;
-
-struct wireless_dev;
-
-struct wpan_dev;
-
-struct netdev_rx_queue;
-
-struct mini_Qdisc;
-
-struct netdev_queue;
-
-struct cpu_rmap;
-
-struct Qdisc;
-
-struct xdp_dev_bulk_queue;
-
-struct xps_dev_maps;
-
-struct netpoll_info;
-
-struct pcpu_lstats;
-
-struct pcpu_sw_netstats;
-
-struct rtnl_link_ops;
-
-struct dcbnl_rtnl_ops;
-
-struct netprio_map;
-
-struct phy_device;
-
-struct sfp_bus;
-
-struct udp_tunnel_nic_info;
-
-struct net_device {
-	char name[16];
-	struct netdev_name_node *name_node;
-	struct dev_ifalias *ifalias;
-	long unsigned int mem_end;
-	long unsigned int mem_start;
-	long unsigned int base_addr;
-	int irq;
-	long unsigned int state;
-	struct list_head dev_list;
-	struct list_head napi_list;
-	struct list_head unreg_list;
-	struct list_head close_list;
-	struct list_head ptype_all;
-	struct list_head ptype_specific;
-	struct {
-		struct list_head upper;
-		struct list_head lower;
-	} adj_list;
-	netdev_features_t features;
-	netdev_features_t hw_features;
-	netdev_features_t wanted_features;
-	netdev_features_t vlan_features;
-	netdev_features_t hw_enc_features;
-	netdev_features_t mpls_features;
-	netdev_features_t gso_partial_features;
-	int ifindex;
-	int group;
-	struct net_device_stats stats;
-	atomic_long_t rx_dropped;
-	atomic_long_t tx_dropped;
-	atomic_long_t rx_nohandler;
-	atomic_t carrier_up_count;
-	atomic_t carrier_down_count;
-	const struct iw_handler_def *wireless_handlers;
-	struct iw_public_data *wireless_data;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops *ethtool_ops;
-	const struct l3mdev_ops *l3mdev_ops;
-	const struct ndisc_ops *ndisc_ops;
-	const struct xfrmdev_ops *xfrmdev_ops;
-	const struct tlsdev_ops *tlsdev_ops;
-	const struct header_ops *header_ops;
-	unsigned int flags;
-	unsigned int priv_flags;
-	short unsigned int gflags;
-	short unsigned int padded;
-	unsigned char operstate;
-	unsigned char link_mode;
-	unsigned char if_port;
-	unsigned char dma;
-	unsigned int mtu;
-	unsigned int min_mtu;
-	unsigned int max_mtu;
-	short unsigned int type;
-	short unsigned int hard_header_len;
-	unsigned char min_header_len;
-	unsigned char name_assign_type;
-	short unsigned int needed_headroom;
-	short unsigned int needed_tailroom;
-	unsigned char perm_addr[32];
-	unsigned char addr_assign_type;
-	unsigned char addr_len;
-	unsigned char upper_level;
-	unsigned char lower_level;
-	short unsigned int neigh_priv_len;
-	short unsigned int dev_id;
-	short unsigned int dev_port;
-	spinlock_t addr_list_lock;
-	struct netdev_hw_addr_list uc;
-	struct netdev_hw_addr_list mc;
-	struct netdev_hw_addr_list dev_addrs;
-	struct kset *queues_kset;
-	unsigned int promiscuity;
-	unsigned int allmulti;
-	bool uc_promisc;
-	struct vlan_info *vlan_info;
-	struct dsa_port *dsa_ptr;
-	struct tipc_bearer *tipc_ptr;
-	void *atalk_ptr;
-	struct in_device *ip_ptr;
-	struct dn_dev *dn_ptr;
-	struct inet6_dev *ip6_ptr;
-	void *ax25_ptr;
-	struct wireless_dev *ieee80211_ptr;
-	struct wpan_dev *ieee802154_ptr;
-	struct mpls_dev *mpls_ptr;
-	unsigned char *dev_addr;
-	struct netdev_rx_queue *_rx;
-	unsigned int num_rx_queues;
-	unsigned int real_num_rx_queues;
-	struct bpf_prog *xdp_prog;
-	long unsigned int gro_flush_timeout;
-	int napi_defer_hard_irqs;
-	rx_handler_func_t *rx_handler;
-	void *rx_handler_data;
-	struct mini_Qdisc *miniq_ingress;
-	struct netdev_queue *ingress_queue;
-	struct nf_hook_entries *nf_hooks_ingress;
-	unsigned char broadcast[32];
-	struct cpu_rmap *rx_cpu_rmap;
-	struct hlist_node index_hlist;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct netdev_queue *_tx;
-	unsigned int num_tx_queues;
-	unsigned int real_num_tx_queues;
-	struct Qdisc *qdisc;
-	unsigned int tx_queue_len;
-	spinlock_t tx_global_lock;
-	struct xdp_dev_bulk_queue *xdp_bulkq;
-	struct xps_dev_maps *xps_cpus_map;
-	struct xps_dev_maps *xps_rxqs_map;
-	struct mini_Qdisc *miniq_egress;
-	struct hlist_head qdisc_hash[16];
-	struct timer_list watchdog_timer;
-	int watchdog_timeo;
-	u32 proto_down_reason;
-	struct list_head todo_list;
-	int *pcpu_refcnt;
-	struct list_head link_watch_list;
-	enum {
-		NETREG_UNINITIALIZED = 0,
-		NETREG_REGISTERED = 1,
-		NETREG_UNREGISTERING = 2,
-		NETREG_UNREGISTERED = 3,
-		NETREG_RELEASED = 4,
-		NETREG_DUMMY = 5,
-	} reg_state: 8;
-	bool dismantle;
-	enum {
-		RTNL_LINK_INITIALIZED = 0,
-		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state: 16;
-	bool needs_free_netdev;
-	void (*priv_destructor)(struct net_device *);
-	struct netpoll_info *npinfo;
-	possible_net_t nd_net;
-	union {
-		void *ml_priv;
-		struct pcpu_lstats *lstats;
-		struct pcpu_sw_netstats *tstats;
-		struct pcpu_dstats *dstats;
-	};
-	struct garp_port *garp_port;
-	struct mrp_port *mrp_port;
-	struct device dev;
-	const struct attribute_group *sysfs_groups[4];
-	const struct attribute_group *sysfs_rx_queue_group;
-	const struct rtnl_link_ops *rtnl_link_ops;
-	unsigned int gso_max_size;
-	u16 gso_max_segs;
-	const struct dcbnl_rtnl_ops *dcbnl_ops;
-	s16 num_tc;
-	struct netdev_tc_txq tc_to_txq[16];
-	u8 prio_tc_map[16];
-	unsigned int fcoe_ddp_xid;
-	struct netprio_map *priomap;
-	struct phy_device *phydev;
-	struct sfp_bus *sfp_bus;
-	struct lock_class_key *qdisc_tx_busylock;
-	struct lock_class_key *qdisc_running_key;
-	bool proto_down;
-	unsigned int wol_enabled: 1;
-	struct list_head net_notifier_list;
-	const struct macsec_ops *macsec_ops;
-	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
-	struct udp_tunnel_nic *udp_tunnel_nic;
-	struct bpf_xdp_entity xdp_state[3];
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum bpf_reg_type {
-	NOT_INIT = 0,
-	SCALAR_VALUE = 1,
-	PTR_TO_CTX = 2,
-	CONST_PTR_TO_MAP = 3,
-	PTR_TO_MAP_VALUE = 4,
-	PTR_TO_MAP_VALUE_OR_NULL = 5,
-	PTR_TO_STACK = 6,
-	PTR_TO_PACKET_META = 7,
-	PTR_TO_PACKET = 8,
-	PTR_TO_PACKET_END = 9,
-	PTR_TO_FLOW_KEYS = 10,
-	PTR_TO_SOCKET = 11,
-	PTR_TO_SOCKET_OR_NULL = 12,
-	PTR_TO_SOCK_COMMON = 13,
-	PTR_TO_SOCK_COMMON_OR_NULL = 14,
-	PTR_TO_TCP_SOCK = 15,
-	PTR_TO_TCP_SOCK_OR_NULL = 16,
-	PTR_TO_TP_BUFFER = 17,
-	PTR_TO_XDP_SOCK = 18,
-	PTR_TO_BTF_ID = 19,
-	PTR_TO_BTF_ID_OR_NULL = 20,
-	PTR_TO_MEM = 21,
-	PTR_TO_MEM_OR_NULL = 22,
-	PTR_TO_RDONLY_BUF = 23,
-	PTR_TO_RDONLY_BUF_OR_NULL = 24,
-	PTR_TO_RDWR_BUF = 25,
-	PTR_TO_RDWR_BUF_OR_NULL = 26,
-	PTR_TO_PERCPU_BTF_ID = 27,
-};
-
-struct bpf_prog_ops {
-	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
-};
-
-struct bpf_offload_dev;
-
-struct bpf_prog_offload {
-	struct bpf_prog *prog;
-	struct net_device *netdev;
-	struct bpf_offload_dev *offdev;
-	void *dev_priv;
-	struct list_head offloads;
-	bool dev_state;
-	bool opt_failed;
-	void *jited_image;
-	u32 jited_len;
-};
-
-struct bpf_prog_stats {
-	u64 cnt;
-	u64 nsecs;
-	struct u64_stats_sync syncp;
-};
-
-struct btf_func_model {
-	u8 ret_size;
-	u8 nr_args;
-	u8 arg_size[12];
-};
-
-struct bpf_trampoline {
-	struct hlist_node hlist;
-	struct mutex mutex;
-	refcount_t refcnt;
-	u64 key;
-	struct {
-		struct btf_func_model model;
-		void *addr;
-		bool ftrace_managed;
-	} func;
-	struct bpf_prog *extension_prog;
-	struct hlist_head progs_hlist[3];
-	int progs_cnt[3];
-	void *image;
-	u64 selector;
-	struct bpf_ksym ksym;
-};
-
-struct bpf_func_info_aux {
-	u16 linkage;
-	bool unreliable;
-};
-
-struct bpf_jit_poke_descriptor {
-	void *tailcall_target;
-	void *tailcall_bypass;
-	void *bypass_addr;
-	union {
-		struct {
-			struct bpf_map *map;
-			u32 key;
-		} tail_call;
-	};
-	bool tailcall_target_stable;
-	u8 adj_off;
-	u16 reason;
-	u32 insn_idx;
-};
-
-struct bpf_ctx_arg_aux {
-	u32 offset;
-	enum bpf_reg_type reg_type;
-	u32 btf_id;
-};
-
-typedef unsigned int sk_buff_data_t;
-
-struct skb_ext;
-
-struct sk_buff {
-	union {
-		struct {
-			struct sk_buff *next;
-			struct sk_buff *prev;
-			union {
-				struct net_device *dev;
-				long unsigned int dev_scratch;
-			};
-		};
-		struct rb_node rbnode;
-		struct list_head list;
-	};
-	union {
-		struct sock *sk;
-		int ip_defrag_offset;
-	};
-	union {
-		ktime_t tstamp;
-		u64 skb_mstamp_ns;
-	};
-	char cb[48];
-	union {
-		struct {
-			long unsigned int _skb_refdst;
-			void (*destructor)(struct sk_buff *);
-		};
-		struct list_head tcp_tsorted_anchor;
-	};
-	long unsigned int _nfct;
-	unsigned int len;
-	unsigned int data_len;
-	__u16 mac_len;
-	__u16 hdr_len;
-	__u16 queue_mapping;
-	__u8 __cloned_offset[0];
-	__u8 cloned: 1;
-	__u8 nohdr: 1;
-	__u8 fclone: 2;
-	__u8 peeked: 1;
-	__u8 head_frag: 1;
-	__u8 pfmemalloc: 1;
-	__u8 active_extensions;
-	__u32 headers_start[0];
-	__u8 __pkt_type_offset[0];
-	__u8 pkt_type: 3;
-	__u8 ignore_df: 1;
-	__u8 nf_trace: 1;
-	__u8 ip_summed: 2;
-	__u8 ooo_okay: 1;
-	__u8 l4_hash: 1;
-	__u8 sw_hash: 1;
-	__u8 wifi_acked_valid: 1;
-	__u8 wifi_acked: 1;
-	__u8 no_fcs: 1;
-	__u8 encapsulation: 1;
-	__u8 encap_hdr_csum: 1;
-	__u8 csum_valid: 1;
-	__u8 __pkt_vlan_present_offset[0];
-	__u8 vlan_present: 1;
-	__u8 csum_complete_sw: 1;
-	__u8 csum_level: 2;
-	__u8 csum_not_inet: 1;
-	__u8 dst_pending_confirm: 1;
-	__u8 ndisc_nodetype: 2;
-	__u8 ipvs_property: 1;
-	__u8 inner_protocol_type: 1;
-	__u8 remcsum_offload: 1;
-	__u8 offload_fwd_mark: 1;
-	__u8 offload_l3_fwd_mark: 1;
-	__u8 tc_skip_classify: 1;
-	__u8 tc_at_ingress: 1;
-	__u8 redirected: 1;
-	__u8 from_ingress: 1;
-	__u8 decrypted: 1;
-	__u16 tc_index;
-	union {
-		__wsum csum;
-		struct {
-			__u16 csum_start;
-			__u16 csum_offset;
-		};
-	};
-	__u32 priority;
-	int skb_iif;
-	__u32 hash;
-	__be16 vlan_proto;
-	__u16 vlan_tci;
-	union {
-		unsigned int napi_id;
-		unsigned int sender_cpu;
-	};
-	__u32 secmark;
-	union {
-		__u32 mark;
-		__u32 reserved_tailroom;
-	};
-	union {
-		__be16 inner_protocol;
-		__u8 inner_ipproto;
-	};
-	__u16 inner_transport_header;
-	__u16 inner_network_header;
-	__u16 inner_mac_header;
-	__be16 protocol;
-	__u16 transport_header;
-	__u16 network_header;
-	__u16 mac_header;
-	__u32 headers_end[0];
-	sk_buff_data_t tail;
-	sk_buff_data_t end;
-	unsigned char *head;
-	unsigned char *data;
-	unsigned int truesize;
-	refcount_t users;
-	struct skb_ext *extensions;
-};
-
-struct scatterlist {
-	long unsigned int page_link;
-	unsigned int offset;
-	unsigned int length;
-	dma_addr_t dma_address;
-	unsigned int dma_length;
-};
-
 enum {
 	Root_NFS = 255,
 	Root_CIFS = 254,
@@ -10374,10 +11238,35 @@
 	Root_SR0 = 11534336,
 };
 
-struct ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
-	__be16 h_proto;
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
 };
 
 struct flowi_tunnel {
@@ -10387,6 +11276,7 @@
 struct flowi_common {
 	int flowic_oif;
 	int flowic_iif;
+	int flowic_l3mdev;
 	__u32 flowic_mark;
 	__u8 flowic_tos;
 	__u8 flowic_scope;
@@ -10411,7 +11301,6 @@
 		__le16 dport;
 		__le16 sport;
 	} dnports;
-	__be32 spi;
 	__be32 gre_key;
 	struct {
 		__u8 type;
@@ -10450,131 +11339,19 @@
 	} u;
 };
 
-struct ipstats_mib {
-	u64 mibs[37];
-	struct u64_stats_sync syncp;
-};
-
-struct icmp_mib {
-	long unsigned int mibs[28];
-};
-
-struct icmpmsg_mib {
-	atomic_long_t mibs[512];
-};
-
-struct icmpv6_mib {
-	long unsigned int mibs[6];
+struct prot_inuse {
+	int all;
+	int val[64];
 };
 
 struct icmpv6_mib_device {
 	atomic_long_t mibs[6];
 };
 
-struct icmpv6msg_mib {
-	atomic_long_t mibs[512];
-};
-
 struct icmpv6msg_mib_device {
 	atomic_long_t mibs[512];
 };
 
-struct tcp_mib {
-	long unsigned int mibs[16];
-};
-
-struct udp_mib {
-	long unsigned int mibs[9];
-};
-
-struct linux_mib {
-	long unsigned int mibs[124];
-};
-
-struct linux_tls_mib {
-	long unsigned int mibs[11];
-};
-
-struct inet_frags;
-
-struct fqdir {
-	long int high_thresh;
-	long int low_thresh;
-	int timeout;
-	int max_dist;
-	struct inet_frags *f;
-	struct net *net;
-	bool dead;
-	long: 56;
-	long: 64;
-	long: 64;
-	struct rhashtable rhashtable;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_long_t mem;
-	struct work_struct destroy_work;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct inet_frag_queue;
-
-struct inet_frags {
-	unsigned int qsize;
-	void (*constructor)(struct inet_frag_queue *, const void *);
-	void (*destructor)(struct inet_frag_queue *);
-	void (*frag_expire)(struct timer_list *);
-	struct kmem_cache *frags_cachep;
-	const char *frags_cache_name;
-	struct rhashtable_params rhash_params;
-	refcount_t refcnt;
-	struct completion completion;
-};
-
-struct frag_v4_compare_key {
-	__be32 saddr;
-	__be32 daddr;
-	u32 user;
-	u32 vif;
-	__be16 id;
-	u16 protocol;
-};
-
-struct frag_v6_compare_key {
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-	u32 user;
-	__be32 id;
-	u32 iif;
-};
-
-struct inet_frag_queue {
-	struct rhash_head node;
-	union {
-		struct frag_v4_compare_key v4;
-		struct frag_v6_compare_key v6;
-	} key;
-	struct timer_list timer;
-	spinlock_t lock;
-	refcount_t refcnt;
-	struct rb_root rb_fragments;
-	struct sk_buff *fragments_tail;
-	struct sk_buff *last_run_head;
-	ktime_t stamp;
-	int len;
-	int meat;
-	__u8 flags;
-	u16 max_size;
-	struct fqdir *fqdir;
-	struct callback_head rcu;
-};
-
 struct fib_rule;
 
 struct fib_lookup_arg;
@@ -10585,8 +11362,6 @@
 
 struct netlink_ext_ack;
 
-struct nla_policy;
-
 struct fib_rules_ops {
 	int family;
 	struct list_head list;
@@ -10596,7 +11371,7 @@
 	int nr_goto_rules;
 	unsigned int fib_rules_seq;
 	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
-	bool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
 	int (*match)(struct fib_rule *, struct flowi *, int);
 	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
 	int (*delete)(struct fib_rule *);
@@ -10605,49 +11380,12 @@
 	size_t (*nlmsg_payload)(struct fib_rule *);
 	void (*flush_cache)(struct fib_rules_ops *);
 	int nlgroup;
-	const struct nla_policy *policy;
 	struct list_head rules_list;
 	struct module *owner;
 	struct net *fro_net;
 	struct callback_head rcu;
 };
 
-enum tcp_ca_event {
-	CA_EVENT_TX_START = 0,
-	CA_EVENT_CWND_RESTART = 1,
-	CA_EVENT_COMPLETE_CWR = 2,
-	CA_EVENT_LOSS = 3,
-	CA_EVENT_ECN_NO_CE = 4,
-	CA_EVENT_ECN_IS_CE = 5,
-};
-
-struct ack_sample;
-
-struct rate_sample;
-
-union tcp_cc_info;
-
-struct tcp_congestion_ops {
-	struct list_head list;
-	u32 key;
-	u32 flags;
-	void (*init)(struct sock *);
-	void (*release)(struct sock *);
-	u32 (*ssthresh)(struct sock *);
-	void (*cong_avoid)(struct sock *, u32, u32);
-	void (*set_state)(struct sock *, u8);
-	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
-	void (*in_ack_event)(struct sock *, u32);
-	u32 (*undo_cwnd)(struct sock *);
-	void (*pkts_acked)(struct sock *, const struct ack_sample *);
-	u32 (*min_tso_segs)(struct sock *);
-	u32 (*sndbuf_expand)(struct sock *);
-	void (*cong_control)(struct sock *, const struct rate_sample *);
-	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
-	char name[16];
-	struct module *owner;
-};
-
 struct fib_notifier_ops {
 	int family;
 	struct list_head list;
@@ -10657,30 +11395,340 @@
 	struct callback_head rcu;
 };
 
-struct xfrm_state;
+struct net_device_stats {
+	long unsigned int rx_packets;
+	long unsigned int tx_packets;
+	long unsigned int rx_bytes;
+	long unsigned int tx_bytes;
+	long unsigned int rx_errors;
+	long unsigned int tx_errors;
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int multicast;
+	long unsigned int collisions;
+	long unsigned int rx_length_errors;
+	long unsigned int rx_over_errors;
+	long unsigned int rx_crc_errors;
+	long unsigned int rx_frame_errors;
+	long unsigned int rx_fifo_errors;
+	long unsigned int rx_missed_errors;
+	long unsigned int tx_aborted_errors;
+	long unsigned int tx_carrier_errors;
+	long unsigned int tx_fifo_errors;
+	long unsigned int tx_heartbeat_errors;
+	long unsigned int tx_window_errors;
+	long unsigned int rx_compressed;
+	long unsigned int tx_compressed;
+};
 
-struct lwtunnel_state;
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
 
-struct dst_entry {
-	struct net_device *dev;
-	struct dst_ops *ops;
-	long unsigned int _metrics;
-	long unsigned int expires;
-	struct xfrm_state *xfrm;
-	int (*input)(struct sk_buff *);
-	int (*output)(struct net *, struct sock *, struct sk_buff *);
-	short unsigned int flags;
-	short int obsolete;
-	short unsigned int header_len;
-	short unsigned int trailer_len;
-	atomic_t __refcnt;
-	int __use;
-	long unsigned int lastuse;
-	struct lwtunnel_state *lwtstate;
-	struct callback_head callback_head;
-	short int error;
-	short int __pad;
-	__u32 tclassid;
+struct tipc_bearer;
+
+struct dn_dev;
+
+struct mpls_dev;
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+struct pcpu_dstats;
+
+struct garp_port;
+
+struct mrp_port;
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct macsec_ops;
+
+struct udp_tunnel_nic;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct l3mdev_ops;
+
+struct ndisc_ops;
+
+struct xfrmdev_ops;
+
+struct tlsdev_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct dsa_port;
+
+struct wireless_dev;
+
+struct wpan_dev;
+
+struct netdev_rx_queue;
+
+struct mini_Qdisc;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct netpoll_info;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct dm_hw_stat_delta;
+
+struct rtnl_link_ops;
+
+struct dcbnl_rtnl_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct sfp_bus;
+
+struct udp_tunnel_nic_info;
+
+struct rtnl_hw_stats64;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias *ifalias;
+	long unsigned int mem_end;
+	long unsigned int mem_start;
+	long unsigned int base_addr;
+	long unsigned int state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	long long unsigned int priv_flags;
+	const struct net_device_ops *netdev_ops;
+	int ifindex;
+	short unsigned int gflags;
+	short unsigned int hard_header_len;
+	unsigned int mtu;
+	short unsigned int needed_headroom;
+	short unsigned int needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	short unsigned int type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct l3mdev_ops *l3mdev_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct xfrmdev_ops *xfrmdev_ops;
+	const struct tlsdev_ops *tlsdev_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	short unsigned int neigh_priv_len;
+	short unsigned int dev_id;
+	short unsigned int dev_port;
+	short unsigned int padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device *ip_ptr;
+	struct inet6_dev *ip6_ptr;
+	struct vlan_info *vlan_info;
+	struct dsa_port *dsa_ptr;
+	struct tipc_bearer *tipc_ptr;
+	void *atalk_ptr;
+	struct dn_dev *dn_ptr;
+	void *ax25_ptr;
+	struct wireless_dev *ieee80211_ptr;
+	struct wpan_dev *ieee802154_ptr;
+	struct mpls_dev *mpls_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog *xdp_prog;
+	long unsigned int gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	rx_handler_func_t *rx_handler;
+	void *rx_handler_data;
+	struct mini_Qdisc *miniq_ingress;
+	struct netdev_queue *ingress_queue;
+	struct nf_hook_entries *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue *xdp_bulkq;
+	struct xps_dev_maps *xps_maps[2];
+	struct mini_Qdisc *miniq_egress;
+	struct nf_hook_entries *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	struct netpoll_info *npinfo;
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	union {
+		struct pcpu_lstats *lstats;
+		struct pcpu_sw_netstats *tstats;
+		struct pcpu_dstats *dstats;
+	};
+	struct garp_port *garp_port;
+	struct mrp_port *mrp_port;
+	struct dm_hw_stat_delta *dm_private;
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	const struct dcbnl_rtnl_ops *dcbnl_ops;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	unsigned int fcoe_ddp_xid;
+	struct netprio_map *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct macsec_ops *macsec_ops;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct hh_cache {
@@ -10708,11 +11756,11 @@
 	struct timer_list timer;
 	long unsigned int used;
 	atomic_t probes;
-	__u8 flags;
-	__u8 nud_state;
-	__u8 type;
-	__u8 dead;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
 	u8 protocol;
+	u32 flags;
 	seqlock_t ha_lock;
 	int: 32;
 	unsigned char ha[32];
@@ -10720,8 +11768,10 @@
 	int (*output)(struct neighbour *, struct sk_buff *);
 	const struct neigh_ops *ops;
 	struct list_head gc_list;
+	struct list_head managed_list;
 	struct callback_head rcu;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	u8 primary_key[0];
 };
 
@@ -10752,6 +11802,7 @@
 	__s32 max_desync_factor;
 	__s32 max_addresses;
 	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
 	__s32 accept_ra_min_hop_limit;
 	__s32 accept_ra_pinfo;
 	__s32 ignore_routes_with_linkdown;
@@ -10762,7 +11813,7 @@
 	__s32 proxy_ndp;
 	__s32 accept_source_route;
 	__s32 accept_ra_from_local;
-	__s32 mc_forwarding;
+	atomic_t mc_forwarding;
 	__s32 disable_ipv6;
 	__s32 drop_unicast_in_l2_multicast;
 	__s32 accept_dad;
@@ -10771,69 +11822,24 @@
 	__s32 suppress_frag_ndisc;
 	__s32 accept_ra_mtu;
 	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
 	struct ipv6_stable_secret stable_secret;
 	__s32 use_oif_addrs_only;
 	__s32 keep_addr_on_down;
 	__s32 seg6_enabled;
+	__s32 seg6_require_hmac;
 	__u32 enhanced_dad;
 	__u32 addr_gen_mode;
 	__s32 disable_policy;
 	__s32 ndisc_tclass;
 	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
 	struct ctl_table_header *sysctl_header;
 };
 
-struct nf_queue_entry;
-
-struct nf_queue_handler {
-	int (*outfn)(struct nf_queue_entry *, unsigned int);
-	void (*nf_hook_drop)(struct net *);
-};
-
-enum nf_log_type {
-	NF_LOG_TYPE_LOG = 0,
-	NF_LOG_TYPE_ULOG = 1,
-	NF_LOG_TYPE_MAX = 2,
-};
-
-typedef u8 u_int8_t;
-
-struct nf_loginfo;
-
-typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
-
-struct nf_logger {
-	char *name;
-	enum nf_log_type type;
-	nf_logfn *logfn;
-	struct module *me;
-};
-
-struct hlist_nulls_head {
-	struct hlist_nulls_node *first;
-};
-
-struct ip_conntrack_stat {
-	unsigned int found;
-	unsigned int invalid;
-	unsigned int insert;
-	unsigned int insert_failed;
-	unsigned int clash_resolve;
-	unsigned int drop;
-	unsigned int early_drop;
-	unsigned int error;
-	unsigned int expect_new;
-	unsigned int expect_create;
-	unsigned int expect_delete;
-	unsigned int search_restart;
-};
-
-struct ct_pcpu {
-	spinlock_t lock;
-	struct hlist_nulls_head unconfirmed;
-	struct hlist_nulls_head dying;
-};
-
 typedef struct {
 	union {
 		void *kernel;
@@ -10873,11 +11879,22 @@
 	struct socket_wq wq;
 };
 
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
 typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
 
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
 struct proto_ops {
 	int family;
-	unsigned int flags;
 	struct module *owner;
 	int (*release)(struct socket *);
 	int (*bind)(struct socket *, struct sockaddr *, int);
@@ -10902,35 +11919,27 @@
 	int (*set_peek_off)(struct sock *, int);
 	int (*peek_len)(struct socket *);
 	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
 	int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);
 	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
 	int (*set_rcvlowat)(struct sock *, int);
 };
 
-struct pipe_buf_operations;
-
-struct pipe_buffer {
-	struct page *page;
-	unsigned int offset;
-	unsigned int len;
-	const struct pipe_buf_operations *ops;
-	unsigned int flags;
-	long unsigned int private;
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
 };
 
-struct pipe_buf_operations {
-	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
-	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
-	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
-};
-
-struct skb_ext {
-	refcount_t refcnt;
-	u8 offset[4];
-	u8 chunks;
-	long: 56;
-	char data[0];
+enum rpc_display_format_t {
+	RPC_DISPLAY_ADDR = 0,
+	RPC_DISPLAY_PORT = 1,
+	RPC_DISPLAY_PROTO = 2,
+	RPC_DISPLAY_HEX_ADDR = 3,
+	RPC_DISPLAY_HEX_PORT = 4,
+	RPC_DISPLAY_NETID = 5,
+	RPC_DISPLAY_MAX = 6,
 };
 
 struct dql {
@@ -10959,437 +11968,6 @@
 	long: 64;
 };
 
-struct ethtool_drvinfo {
-	__u32 cmd;
-	char driver[32];
-	char version[32];
-	char fw_version[32];
-	char bus_info[32];
-	char erom_version[32];
-	char reserved2[12];
-	__u32 n_priv_flags;
-	__u32 n_stats;
-	__u32 testinfo_len;
-	__u32 eedump_len;
-	__u32 regdump_len;
-};
-
-struct ethtool_wolinfo {
-	__u32 cmd;
-	__u32 supported;
-	__u32 wolopts;
-	__u8 sopass[6];
-};
-
-struct ethtool_tunable {
-	__u32 cmd;
-	__u32 id;
-	__u32 type_id;
-	__u32 len;
-	void *data[0];
-};
-
-struct ethtool_regs {
-	__u32 cmd;
-	__u32 version;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eeprom {
-	__u32 cmd;
-	__u32 magic;
-	__u32 offset;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_eee {
-	__u32 cmd;
-	__u32 supported;
-	__u32 advertised;
-	__u32 lp_advertised;
-	__u32 eee_active;
-	__u32 eee_enabled;
-	__u32 tx_lpi_enabled;
-	__u32 tx_lpi_timer;
-	__u32 reserved[2];
-};
-
-struct ethtool_modinfo {
-	__u32 cmd;
-	__u32 type;
-	__u32 eeprom_len;
-	__u32 reserved[8];
-};
-
-struct ethtool_coalesce {
-	__u32 cmd;
-	__u32 rx_coalesce_usecs;
-	__u32 rx_max_coalesced_frames;
-	__u32 rx_coalesce_usecs_irq;
-	__u32 rx_max_coalesced_frames_irq;
-	__u32 tx_coalesce_usecs;
-	__u32 tx_max_coalesced_frames;
-	__u32 tx_coalesce_usecs_irq;
-	__u32 tx_max_coalesced_frames_irq;
-	__u32 stats_block_coalesce_usecs;
-	__u32 use_adaptive_rx_coalesce;
-	__u32 use_adaptive_tx_coalesce;
-	__u32 pkt_rate_low;
-	__u32 rx_coalesce_usecs_low;
-	__u32 rx_max_coalesced_frames_low;
-	__u32 tx_coalesce_usecs_low;
-	__u32 tx_max_coalesced_frames_low;
-	__u32 pkt_rate_high;
-	__u32 rx_coalesce_usecs_high;
-	__u32 rx_max_coalesced_frames_high;
-	__u32 tx_coalesce_usecs_high;
-	__u32 tx_max_coalesced_frames_high;
-	__u32 rate_sample_interval;
-};
-
-struct ethtool_ringparam {
-	__u32 cmd;
-	__u32 rx_max_pending;
-	__u32 rx_mini_max_pending;
-	__u32 rx_jumbo_max_pending;
-	__u32 tx_max_pending;
-	__u32 rx_pending;
-	__u32 rx_mini_pending;
-	__u32 rx_jumbo_pending;
-	__u32 tx_pending;
-};
-
-struct ethtool_channels {
-	__u32 cmd;
-	__u32 max_rx;
-	__u32 max_tx;
-	__u32 max_other;
-	__u32 max_combined;
-	__u32 rx_count;
-	__u32 tx_count;
-	__u32 other_count;
-	__u32 combined_count;
-};
-
-struct ethtool_pauseparam {
-	__u32 cmd;
-	__u32 autoneg;
-	__u32 rx_pause;
-	__u32 tx_pause;
-};
-
-enum ethtool_link_ext_state {
-	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
-	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
-	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
-	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
-	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
-	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
-	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
-	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
-	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
-	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
-};
-
-enum ethtool_link_ext_substate_autoneg {
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
-	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
-};
-
-enum ethtool_link_ext_substate_link_training {
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
-};
-
-enum ethtool_link_ext_substate_link_logical_mismatch {
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
-	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
-};
-
-enum ethtool_link_ext_substate_bad_signal_integrity {
-	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
-};
-
-enum ethtool_link_ext_substate_cable_issue {
-	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
-	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
-};
-
-struct ethtool_test {
-	__u32 cmd;
-	__u32 flags;
-	__u32 reserved;
-	__u32 len;
-	__u64 data[0];
-};
-
-struct ethtool_stats {
-	__u32 cmd;
-	__u32 n_stats;
-	__u64 data[0];
-};
-
-struct ethtool_tcpip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tos;
-};
-
-struct ethtool_ah_espip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 spi;
-	__u8 tos;
-};
-
-struct ethtool_usrip4_spec {
-	__be32 ip4src;
-	__be32 ip4dst;
-	__be32 l4_4_bytes;
-	__u8 tos;
-	__u8 ip_ver;
-	__u8 proto;
-};
-
-struct ethtool_tcpip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be16 psrc;
-	__be16 pdst;
-	__u8 tclass;
-};
-
-struct ethtool_ah_espip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 spi;
-	__u8 tclass;
-};
-
-struct ethtool_usrip6_spec {
-	__be32 ip6src[4];
-	__be32 ip6dst[4];
-	__be32 l4_4_bytes;
-	__u8 tclass;
-	__u8 l4_proto;
-};
-
-union ethtool_flow_union {
-	struct ethtool_tcpip4_spec tcp_ip4_spec;
-	struct ethtool_tcpip4_spec udp_ip4_spec;
-	struct ethtool_tcpip4_spec sctp_ip4_spec;
-	struct ethtool_ah_espip4_spec ah_ip4_spec;
-	struct ethtool_ah_espip4_spec esp_ip4_spec;
-	struct ethtool_usrip4_spec usr_ip4_spec;
-	struct ethtool_tcpip6_spec tcp_ip6_spec;
-	struct ethtool_tcpip6_spec udp_ip6_spec;
-	struct ethtool_tcpip6_spec sctp_ip6_spec;
-	struct ethtool_ah_espip6_spec ah_ip6_spec;
-	struct ethtool_ah_espip6_spec esp_ip6_spec;
-	struct ethtool_usrip6_spec usr_ip6_spec;
-	struct ethhdr ether_spec;
-	__u8 hdata[52];
-};
-
-struct ethtool_flow_ext {
-	__u8 padding[2];
-	unsigned char h_dest[6];
-	__be16 vlan_etype;
-	__be16 vlan_tci;
-	__be32 data[2];
-};
-
-struct ethtool_rx_flow_spec {
-	__u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	__u64 ring_cookie;
-	__u32 location;
-};
-
-struct ethtool_rxnfc {
-	__u32 cmd;
-	__u32 flow_type;
-	__u64 data;
-	struct ethtool_rx_flow_spec fs;
-	union {
-		__u32 rule_cnt;
-		__u32 rss_context;
-	};
-	__u32 rule_locs[0];
-};
-
-struct ethtool_flash {
-	__u32 cmd;
-	__u32 region;
-	char data[128];
-};
-
-struct ethtool_dump {
-	__u32 cmd;
-	__u32 version;
-	__u32 flag;
-	__u32 len;
-	__u8 data[0];
-};
-
-struct ethtool_ts_info {
-	__u32 cmd;
-	__u32 so_timestamping;
-	__s32 phc_index;
-	__u32 tx_types;
-	__u32 tx_reserved[3];
-	__u32 rx_filters;
-	__u32 rx_reserved[3];
-};
-
-struct ethtool_fecparam {
-	__u32 cmd;
-	__u32 active_fec;
-	__u32 fec;
-	__u32 reserved;
-};
-
-struct ethtool_link_settings {
-	__u32 cmd;
-	__u32 speed;
-	__u8 duplex;
-	__u8 port;
-	__u8 phy_address;
-	__u8 autoneg;
-	__u8 mdio_support;
-	__u8 eth_tp_mdix;
-	__u8 eth_tp_mdix_ctrl;
-	__s8 link_mode_masks_nwords;
-	__u8 transceiver;
-	__u8 master_slave_cfg;
-	__u8 master_slave_state;
-	__u8 reserved1[1];
-	__u32 reserved[7];
-	__u32 link_mode_masks[0];
-};
-
-enum ethtool_phys_id_state {
-	ETHTOOL_ID_INACTIVE = 0,
-	ETHTOOL_ID_ACTIVE = 1,
-	ETHTOOL_ID_ON = 2,
-	ETHTOOL_ID_OFF = 3,
-};
-
-struct ethtool_link_ext_state_info {
-	enum ethtool_link_ext_state link_ext_state;
-	union {
-		enum ethtool_link_ext_substate_autoneg autoneg;
-		enum ethtool_link_ext_substate_link_training link_training;
-		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
-		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
-		enum ethtool_link_ext_substate_cable_issue cable_issue;
-		u8 __link_ext_substate;
-	};
-};
-
-struct ethtool_link_ksettings {
-	struct ethtool_link_settings base;
-	struct {
-		long unsigned int supported[2];
-		long unsigned int advertising[2];
-		long unsigned int lp_advertising[2];
-	} link_modes;
-};
-
-struct ethtool_pause_stats {
-	u64 tx_pause_frames;
-	u64 rx_pause_frames;
-};
-
-struct ethtool_ops {
-	u32 supported_coalesce_params;
-	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
-	int (*get_regs_len)(struct net_device *);
-	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
-	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
-	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
-	u32 (*get_msglevel)(struct net_device *);
-	void (*set_msglevel)(struct net_device *, u32);
-	int (*nway_reset)(struct net_device *);
-	u32 (*get_link)(struct net_device *);
-	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
-	int (*get_eeprom_len)(struct net_device *);
-	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
-	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
-	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
-	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
-	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
-	void (*get_strings)(struct net_device *, u32, u8 *);
-	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
-	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*begin)(struct net_device *);
-	void (*complete)(struct net_device *);
-	u32 (*get_priv_flags)(struct net_device *);
-	int (*set_priv_flags)(struct net_device *, u32);
-	int (*get_sset_count)(struct net_device *, int);
-	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
-	int (*flash_device)(struct net_device *, struct ethtool_flash *);
-	int (*reset)(struct net_device *, u32 *);
-	u32 (*get_rxfh_key_size)(struct net_device *);
-	u32 (*get_rxfh_indir_size)(struct net_device *);
-	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
-	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
-	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
-	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
-	void (*get_channels)(struct net_device *, struct ethtool_channels *);
-	int (*set_channels)(struct net_device *, struct ethtool_channels *);
-	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
-	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
-	int (*set_dump)(struct net_device *, struct ethtool_dump *);
-	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
-	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
-	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
-	int (*get_eee)(struct net_device *, struct ethtool_eee *);
-	int (*set_eee)(struct net_device *, struct ethtool_eee *);
-	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
-	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
-	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
-	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
-	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
-	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
-	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
-};
-
-struct netlink_ext_ack {
-	const char *_msg;
-	const struct nlattr *bad_attr;
-	const struct nla_policy *policy;
-	u8 cookie[20];
-	u8 cookie_len;
-};
-
 struct ieee_ets {
 	__u8 willing;
 	__u8 ets_cap;
@@ -11537,11 +12115,27 @@
 	u32 queue_index;
 	u32 reg_state;
 	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
 };
 
 struct xdp_frame {
@@ -11552,6 +12146,7 @@
 	u32 frame_sz: 24;
 	struct xdp_mem_info mem;
 	struct net_device *dev_rx;
+	u32 flags;
 };
 
 struct nlmsghdr {
@@ -11567,6 +12162,16 @@
 	__u16 nla_type;
 };
 
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	u8 cookie[20];
+	u8 cookie_len;
+};
+
 struct netlink_range_validation;
 
 struct netlink_range_validation_signed;
@@ -11646,6 +12251,19 @@
 	__u64 rx_compressed;
 	__u64 tx_compressed;
 	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
 };
 
 struct ifla_vf_guid {
@@ -11678,28 +12296,6 @@
 	__be16 vlan_proto;
 };
 
-struct tc_stats {
-	__u64 bytes;
-	__u32 packets;
-	__u32 drops;
-	__u32 overlimits;
-	__u32 bps;
-	__u32 pps;
-	__u32 qlen;
-	__u32 backlog;
-};
-
-struct tc_sizespec {
-	unsigned char cell_log;
-	unsigned char size_log;
-	short int cell_align;
-	int overhead;
-	unsigned int linklayer;
-	unsigned int mpu;
-	unsigned int mtu;
-	unsigned int tsize;
-};
-
 enum netdev_tx {
 	__NETDEV_TX_MIN = 2147483648,
 	NETDEV_TX_OK = 0,
@@ -11708,6 +12304,13 @@
 
 typedef enum netdev_tx netdev_tx_t;
 
+struct net_device_core_stats {
+	long unsigned int rx_dropped;
+	long unsigned int tx_dropped;
+	long unsigned int rx_nohandler;
+	long unsigned int rx_otherhost_dropped;
+};
+
 struct header_ops {
 	int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);
 	int (*parse)(const struct sk_buff *, unsigned char *);
@@ -11717,16 +12320,30 @@
 	__be16 (*parse_protocol)(const struct sk_buff *);
 };
 
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
 struct xsk_buff_pool;
 
 struct netdev_queue {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct Qdisc *qdisc;
 	struct Qdisc *qdisc_sleeping;
 	struct kobject kobj;
 	int numa_node;
 	long unsigned int tx_maxrate;
-	long unsigned int trans_timeout;
+	atomic_long_t trans_timeout;
 	struct net_device *sb_dev;
 	struct xsk_buff_pool *pool;
 	spinlock_t _xmit_lock;
@@ -11741,72 +12358,6 @@
 	struct dql dql;
 };
 
-struct qdisc_skb_head {
-	struct sk_buff *head;
-	struct sk_buff *tail;
-	__u32 qlen;
-	spinlock_t lock;
-};
-
-struct gnet_stats_basic_packed {
-	__u64 bytes;
-	__u64 packets;
-};
-
-struct gnet_stats_queue {
-	__u32 qlen;
-	__u32 backlog;
-	__u32 drops;
-	__u32 requeues;
-	__u32 overlimits;
-};
-
-struct Qdisc_ops;
-
-struct qdisc_size_table;
-
-struct net_rate_estimator;
-
-struct gnet_stats_basic_cpu;
-
-struct Qdisc {
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	unsigned int flags;
-	u32 limit;
-	const struct Qdisc_ops *ops;
-	struct qdisc_size_table *stab;
-	struct hlist_node hash;
-	u32 handle;
-	u32 parent;
-	struct netdev_queue *dev_queue;
-	struct net_rate_estimator *rate_est;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	int pad;
-	refcount_t refcnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head gso_skb;
-	struct qdisc_skb_head q;
-	struct gnet_stats_basic_packed bstats;
-	seqcount_t running;
-	struct gnet_stats_queue qstats;
-	long unsigned int state;
-	struct Qdisc *next_sched;
-	struct sk_buff_head skb_bad_txq;
-	spinlock_t busylock;
-	spinlock_t seqlock;
-	bool empty;
-	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long int privdata[0];
-};
-
 struct rps_map {
 	unsigned int len;
 	struct callback_head rcu;
@@ -11826,24 +12377,23 @@
 };
 
 struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
 	struct rps_map *rps_map;
 	struct rps_dev_flow_table *rps_flow_table;
 	struct kobject kobj;
 	struct net_device *dev;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct xdp_rxq_info xdp_rxq;
+	netdevice_tracker dev_tracker;
 	struct xsk_buff_pool *pool;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
 };
 
 struct xps_map {
@@ -11855,6 +12405,8 @@
 
 struct xps_dev_maps {
 	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
 	struct xps_map *attr_map[0];
 };
 
@@ -11874,6 +12426,57 @@
 	unsigned char id_len;
 };
 
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
 enum tc_setup_type {
 	TC_SETUP_QDISC_MQPRIO = 0,
 	TC_SETUP_CLSU32 = 1,
@@ -11893,6 +12496,8 @@
 	TC_SETUP_QDISC_ETS = 15,
 	TC_SETUP_QDISC_TBF = 16,
 	TC_SETUP_QDISC_FIFO = 17,
+	TC_SETUP_QDISC_HTB = 18,
+	TC_SETUP_ACT = 19,
 };
 
 enum bpf_netdev_command {
@@ -11903,6 +12508,15 @@
 	XDP_SETUP_XSK_POOL = 4,
 };
 
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+struct bpf_offloaded_map;
+
 struct netdev_bpf {
 	enum bpf_netdev_command command;
 	union {
@@ -11934,15 +12548,6 @@
 	char ifalias[0];
 };
 
-struct netdev_name_node {
-	struct hlist_node hlist;
-	struct list_head list;
-	struct net_device *dev;
-	const char *name;
-};
-
-struct udp_tunnel_info;
-
 struct devlink_port;
 
 struct ip_tunnel_parm;
@@ -11960,6 +12565,10 @@
 	int (*ndo_set_mac_address)(struct net_device *, void *);
 	int (*ndo_validate_addr)(struct net_device *);
 	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int);
 	int (*ndo_set_config)(struct net_device *, struct ifmap *);
 	int (*ndo_change_mtu)(struct net_device *, int);
 	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
@@ -11998,12 +12607,14 @@
 	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
 	int (*ndo_del_slave)(struct net_device *, struct net_device *);
 	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
 	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
 	int (*ndo_set_features)(struct net_device *, netdev_features_t);
 	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
 	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
 	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
-	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
 	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
 	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
 	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
@@ -12013,26 +12624,27 @@
 	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
 	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
 	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
-	void (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);
-	void (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);
 	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
 	void (*ndo_dfwd_del_station)(struct net_device *, void *);
 	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
 	int (*ndo_get_iflink)(const struct net_device *);
-	int (*ndo_change_proto_down)(struct net_device *, bool);
 	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
 	void (*ndo_set_rx_headroom)(struct net_device *, int);
 	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
 	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
 	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
 	struct devlink_port * (*ndo_get_devlink_port)(struct net_device *);
 	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
 	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
 };
 
 struct neigh_parms {
 	possible_net_t net;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct list_head list;
 	int (*neigh_setup)(struct neighbour *);
 	struct neigh_table *tbl;
@@ -12052,10 +12664,10 @@
 };
 
 struct pcpu_sw_netstats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 tx_packets;
-	u64 tx_bytes;
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
 	struct u64_stats_sync syncp;
 };
 
@@ -12079,6 +12691,149 @@
 	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
 };
 
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+};
+
 struct l3mdev_ops {
 	u32 (*l3mdev_fib_table)(const struct net_device *);
 	struct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);
@@ -12129,10 +12884,10 @@
 
 struct inet6_dev {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct list_head addr_list;
 	struct ifmcaddr6 *mc_list;
 	struct ifmcaddr6 *mc_tomb;
-	spinlock_t mc_lock;
 	unsigned char mc_qrv;
 	unsigned char mc_gq_running;
 	unsigned char mc_ifc_count;
@@ -12141,9 +12896,16 @@
 	long unsigned int mc_qi;
 	long unsigned int mc_qri;
 	long unsigned int mc_maxdelay;
-	struct timer_list mc_gq_timer;
-	struct timer_list mc_ifc_timer;
-	struct timer_list mc_dad_timer;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
 	struct ifacaddr6 *ac_list;
 	rwlock_t lock;
 	refcount_t refcnt;
@@ -12160,25 +12922,16 @@
 	__u8 rs_probes;
 	long unsigned int tstamp;
 	struct callback_head rcu;
-};
-
-struct tcf_proto;
-
-struct tcf_block;
-
-struct mini_Qdisc {
-	struct tcf_proto *filter_list;
-	struct tcf_block *block;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_queue *cpu_qstats;
-	struct callback_head rcu;
+	unsigned int ra_mtu;
 };
 
 struct rtnl_link_ops {
 	struct list_head list;
 	const char *kind;
 	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
 	void (*setup)(struct net_device *);
+	bool netns_refund;
 	unsigned int maxtype;
 	const struct nla_policy *policy;
 	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
@@ -12206,6 +12959,8 @@
 	unsigned int tunnel_types;
 };
 
+struct udp_tunnel_info;
+
 struct udp_tunnel_nic_shared;
 
 struct udp_tunnel_nic_info {
@@ -12218,6 +12973,25 @@
 };
 
 enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
 	RTAX_UNSPEC = 0,
 	RTAX_LOCK = 1,
 	RTAX_MTU = 2,
@@ -12239,33 +13013,6 @@
 	__RTAX_MAX = 18,
 };
 
-struct tcmsg {
-	unsigned char tcm_family;
-	unsigned char tcm__pad1;
-	short unsigned int tcm__pad2;
-	int tcm_ifindex;
-	__u32 tcm_handle;
-	__u32 tcm_parent;
-	__u32 tcm_info;
-};
-
-struct gnet_stats_basic_cpu {
-	struct gnet_stats_basic_packed bstats;
-	struct u64_stats_sync syncp;
-};
-
-struct gnet_dump {
-	spinlock_t *lock;
-	struct sk_buff *skb;
-	struct nlattr *tail;
-	int compat_tc_stats;
-	int compat_xstats;
-	int padattr;
-	void *xstats;
-	int xstats_len;
-	struct tc_stats tc_stats;
-};
-
 struct netlink_range_validation {
 	u64 min;
 	u64 max;
@@ -12276,185 +13023,6 @@
 	s64 max;
 };
 
-enum flow_action_hw_stats_bit {
-	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
-	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
-	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
-	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
-};
-
-struct flow_block {
-	struct list_head cb_list;
-};
-
-typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
-
-struct qdisc_size_table {
-	struct callback_head rcu;
-	struct list_head list;
-	struct tc_sizespec szopts;
-	int refcnt;
-	u16 data[0];
-};
-
-struct Qdisc_class_ops;
-
-struct Qdisc_ops {
-	struct Qdisc_ops *next;
-	const struct Qdisc_class_ops *cl_ops;
-	char id[16];
-	int priv_size;
-	unsigned int static_flags;
-	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
-	struct sk_buff * (*dequeue)(struct Qdisc *);
-	struct sk_buff * (*peek)(struct Qdisc *);
-	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*reset)(struct Qdisc *);
-	void (*destroy)(struct Qdisc *);
-	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
-	void (*attach)(struct Qdisc *);
-	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	int (*dump)(struct Qdisc *, struct sk_buff *);
-	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
-	void (*ingress_block_set)(struct Qdisc *, u32);
-	void (*egress_block_set)(struct Qdisc *, u32);
-	u32 (*ingress_block_get)(struct Qdisc *);
-	u32 (*egress_block_get)(struct Qdisc *);
-	struct module *owner;
-};
-
-struct qdisc_walker;
-
-struct Qdisc_class_ops {
-	unsigned int flags;
-	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
-	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
-	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
-	void (*qlen_notify)(struct Qdisc *, long unsigned int);
-	long unsigned int (*find)(struct Qdisc *, u32);
-	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
-	int (*delete)(struct Qdisc *, long unsigned int);
-	void (*walk)(struct Qdisc *, struct qdisc_walker *);
-	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
-	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
-	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
-	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
-	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
-};
-
-struct tcf_chain;
-
-struct tcf_block {
-	struct mutex lock;
-	struct list_head chain_list;
-	u32 index;
-	u32 classid;
-	refcount_t refcnt;
-	struct net *net;
-	struct Qdisc *q;
-	struct rw_semaphore cb_lock;
-	struct flow_block flow_block;
-	struct list_head owner_list;
-	bool keep_dst;
-	atomic_t offloadcnt;
-	unsigned int nooffloaddevcnt;
-	unsigned int lockeddevcnt;
-	struct {
-		struct tcf_chain *chain;
-		struct list_head filter_chain_list;
-	} chain0;
-	struct callback_head rcu;
-	struct hlist_head proto_destroy_ht[128];
-	struct mutex proto_destroy_lock;
-};
-
-struct tcf_result;
-
-struct tcf_proto_ops;
-
-struct tcf_proto {
-	struct tcf_proto *next;
-	void *root;
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	__be16 protocol;
-	u32 prio;
-	void *data;
-	const struct tcf_proto_ops *ops;
-	struct tcf_chain *chain;
-	spinlock_t lock;
-	bool deleting;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct hlist_node destroy_ht_node;
-};
-
-struct tcf_result {
-	union {
-		struct {
-			long unsigned int class;
-			u32 classid;
-		};
-		const struct tcf_proto *goto_tp;
-		struct {
-			bool ingress;
-			struct gnet_stats_queue *qstats;
-		};
-	};
-};
-
-struct tcf_walker;
-
-struct tcf_proto_ops {
-	struct list_head head;
-	char kind[16];
-	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
-	int (*init)(struct tcf_proto *);
-	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
-	void * (*get)(struct tcf_proto *, u32);
-	void (*put)(struct tcf_proto *, void *);
-	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);
-	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
-	bool (*delete_empty)(struct tcf_proto *);
-	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
-	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
-	void (*hw_add)(struct tcf_proto *, void *);
-	void (*hw_del)(struct tcf_proto *, void *);
-	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
-	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
-	void (*tmplt_destroy)(void *);
-	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
-	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
-	struct module *owner;
-	int flags;
-};
-
-struct tcf_chain {
-	struct mutex filter_chain_lock;
-	struct tcf_proto *filter_chain;
-	struct list_head list;
-	struct tcf_block *block;
-	u32 index;
-	unsigned int refcnt;
-	unsigned int action_refcnt;
-	bool explicitly_created;
-	bool flushing;
-	const struct tcf_proto_ops *tmplt_ops;
-	void *tmplt_priv;
-	struct callback_head rcu;
-};
-
-struct sock_fprog_kern {
-	u16 len;
-	struct sock_filter *filter;
-};
-
-struct sk_filter {
-	refcount_t refcnt;
-	struct callback_head rcu;
-	struct bpf_prog *prog;
-};
-
 enum {
 	NEIGH_VAR_MCAST_PROBES = 0,
 	NEIGH_VAR_UCAST_PROBES = 1,
@@ -12507,11 +13075,13 @@
 	int gc_thresh3;
 	long unsigned int last_flush;
 	struct delayed_work gc_work;
+	struct delayed_work managed_work;
 	struct timer_list proxy_timer;
 	struct sk_buff_head proxy_queue;
 	atomic_t entries;
 	atomic_t gc_entries;
 	struct list_head gc_list;
+	struct list_head managed_list;
 	rwlock_t lock;
 	long unsigned int last_rand;
 	struct neigh_statistics *stats;
@@ -12546,7 +13116,8 @@
 	struct pneigh_entry *next;
 	possible_net_t net;
 	struct net_device *dev;
-	u8 flags;
+	netdevice_tracker dev_tracker;
+	u32 flags;
 	u8 protocol;
 	u8 key[0];
 };
@@ -12635,6 +13206,8 @@
 
 struct smc_hashinfo;
 
+struct sk_psock;
+
 struct request_sock_ops;
 
 struct timewait_sock_ops;
@@ -12658,22 +13231,27 @@
 	void (*keepalive)(struct sock *, int);
 	int (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);
 	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
-	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
 	int (*sendpage)(struct sock *, struct page *, int, size_t, int);
 	int (*bind)(struct sock *, struct sockaddr *, int);
 	int (*bind_add)(struct sock *, struct sockaddr *, int);
 	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
 	void (*release_cb)(struct sock *);
 	int (*hash)(struct sock *);
 	void (*unhash)(struct sock *);
 	void (*rehash)(struct sock *);
 	int (*get_port)(struct sock *, short unsigned int);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
 	unsigned int inuse_idx;
+	int (*forward_alloc_get)(const struct sock *);
 	bool (*stream_memory_free)(const struct sock *, int);
-	bool (*stream_memory_read)(const struct sock *);
+	bool (*sock_is_readable)(struct sock *);
 	void (*enter_memory_pressure)(struct sock *);
 	void (*leave_memory_pressure)(struct sock *);
 	atomic_long_t *memory_allocated;
+	int *per_cpu_fw_alloc;
 	struct percpu_counter *sockets_allocated;
 	long unsigned int *memory_pressure;
 	long int *sysctl_mem;
@@ -12688,7 +13266,7 @@
 	slab_flags_t slab_flags;
 	unsigned int useroffset;
 	unsigned int usersize;
-	struct percpu_counter *orphan_count;
+	unsigned int *orphan_count;
 	struct request_sock_ops *rsk_prot;
 	struct timewait_sock_ops *twsk_prot;
 	union {
@@ -12741,6 +13319,7 @@
 	struct saved_syn *saved_syn;
 	u32 secid;
 	u32 peer_secid;
+	u32 timeout;
 };
 
 struct saved_syn {
@@ -12766,6 +13345,7 @@
 	unsigned char sf_gsresp;
 	unsigned char sf_oldin;
 	unsigned char sf_crcount;
+	struct callback_head rcu;
 };
 
 struct ifmcaddr6 {
@@ -12777,13 +13357,13 @@
 	unsigned int mca_sfmode;
 	unsigned char mca_crcount;
 	long unsigned int mca_sfcount[2];
-	struct timer_list mca_timer;
+	struct delayed_work mca_work;
 	unsigned int mca_flags;
 	int mca_users;
 	refcount_t mca_refcnt;
-	spinlock_t mca_lock;
 	long unsigned int mca_cstamp;
 	long unsigned int mca_tstamp;
+	struct callback_head rcu;
 };
 
 struct ifacaddr6 {
@@ -12798,51 +13378,6 @@
 	struct callback_head rcu;
 };
 
-enum {
-	__ND_OPT_PREFIX_INFO_END = 0,
-	ND_OPT_SOURCE_LL_ADDR = 1,
-	ND_OPT_TARGET_LL_ADDR = 2,
-	ND_OPT_PREFIX_INFO = 3,
-	ND_OPT_REDIRECT_HDR = 4,
-	ND_OPT_MTU = 5,
-	ND_OPT_NONCE = 14,
-	__ND_OPT_ARRAY_MAX = 15,
-	ND_OPT_ROUTE_INFO = 24,
-	ND_OPT_RDNSS = 25,
-	ND_OPT_DNSSL = 31,
-	ND_OPT_6CO = 34,
-	ND_OPT_CAPTIVE_PORTAL = 37,
-	ND_OPT_PREF64 = 38,
-	__ND_OPT_MAX = 39,
-};
-
-struct nd_opt_hdr {
-	__u8 nd_opt_type;
-	__u8 nd_opt_len;
-};
-
-struct ndisc_options {
-	struct nd_opt_hdr *nd_opt_array[15];
-	struct nd_opt_hdr *nd_opts_ri;
-	struct nd_opt_hdr *nd_opts_ri_end;
-	struct nd_opt_hdr *nd_useropts;
-	struct nd_opt_hdr *nd_useropts_end;
-	struct nd_opt_hdr *nd_802154_opt_array[3];
-};
-
-struct prefix_info {
-	__u8 type;
-	__u8 length;
-	__u8 prefix_len;
-	__u8 reserved: 6;
-	__u8 autoconf: 1;
-	__u8 onlink: 1;
-	__be32 valid;
-	__be32 prefered;
-	__be32 reserved2;
-	struct in6_addr prefix;
-};
-
 enum nfs_opnum4 {
 	OP_ACCESS = 3,
 	OP_CLOSE = 4,
@@ -12942,85 +13477,26 @@
 	PERF_SAMPLE_BRANCH_MAX_SHIFT = 18,
 };
 
+enum exception_stack_ordering {
+	ESTACK_DF = 0,
+	ESTACK_NMI = 1,
+	ESTACK_DB = 2,
+	ESTACK_MCE = 3,
+	ESTACK_VC = 4,
+	ESTACK_VC2 = 5,
+	N_EXCEPTION_STACKS = 6,
+};
+
+enum {
+	TSK_TRACE_FL_TRACE_BIT = 0,
+	TSK_TRACE_FL_GRAPH_BIT = 1,
+};
+
 struct uuidcmp {
 	const char *uuid;
 	int len;
 };
 
-typedef __u64 __le64;
-
-struct minix_super_block {
-	__u16 s_ninodes;
-	__u16 s_nzones;
-	__u16 s_imap_blocks;
-	__u16 s_zmap_blocks;
-	__u16 s_firstdatazone;
-	__u16 s_log_zone_size;
-	__u32 s_max_size;
-	__u16 s_magic;
-	__u16 s_state;
-	__u32 s_zones;
-};
-
-struct romfs_super_block {
-	__be32 word0;
-	__be32 word1;
-	__be32 size;
-	__be32 checksum;
-	char name[0];
-};
-
-struct cramfs_inode {
-	__u32 mode: 16;
-	__u32 uid: 16;
-	__u32 size: 24;
-	__u32 gid: 8;
-	__u32 namelen: 6;
-	__u32 offset: 26;
-};
-
-struct cramfs_info {
-	__u32 crc;
-	__u32 edition;
-	__u32 blocks;
-	__u32 files;
-};
-
-struct cramfs_super {
-	__u32 magic;
-	__u32 size;
-	__u32 flags;
-	__u32 future;
-	__u8 signature[16];
-	struct cramfs_info fsid;
-	__u8 name[16];
-	struct cramfs_inode root;
-};
-
-struct squashfs_super_block {
-	__le32 s_magic;
-	__le32 inodes;
-	__le32 mkfs_time;
-	__le32 block_size;
-	__le32 fragments;
-	__le16 compression;
-	__le16 block_log;
-	__le16 flags;
-	__le16 no_ids;
-	__le16 s_major;
-	__le16 s_minor;
-	__le64 root_inode;
-	__le64 bytes_used;
-	__le64 id_table_start;
-	__le64 xattr_id_table_start;
-	__le64 inode_table_start;
-	__le64 directory_table_start;
-	__le64 fragment_table_start;
-	__le64 lookup_table_start;
-};
-
-typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
-
 struct subprocess_info {
 	struct work_struct work;
 	struct completion *complete;
@@ -13036,6 +13512,15 @@
 
 typedef phys_addr_t resource_size_t;
 
+struct __va_list_tag {
+	unsigned int gp_offset;
+	unsigned int fp_offset;
+	void *overflow_arg_area;
+	void *reg_save_area;
+};
+
+typedef __builtin_va_list va_list;
+
 struct resource {
 	resource_size_t start;
 	resource_size_t end;
@@ -13047,6 +13532,21 @@
 	struct resource *child;
 };
 
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+typedef u64 async_cookie_t;
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
 struct hash {
 	int ino;
 	int minor;
@@ -13058,8 +13558,8 @@
 
 struct dir_entry {
 	struct list_head list;
-	char *name;
 	time64_t mtime;
+	char name[0];
 };
 
 enum state {
@@ -13073,600 +13573,7 @@
 	Reset = 7,
 };
 
-enum migratetype {
-	MIGRATE_UNMOVABLE = 0,
-	MIGRATE_MOVABLE = 1,
-	MIGRATE_RECLAIMABLE = 2,
-	MIGRATE_PCPTYPES = 3,
-	MIGRATE_HIGHATOMIC = 3,
-	MIGRATE_CMA = 4,
-	MIGRATE_ISOLATE = 5,
-	MIGRATE_TYPES = 6,
-};
-
-enum numa_stat_item {
-	NUMA_HIT = 0,
-	NUMA_MISS = 1,
-	NUMA_FOREIGN = 2,
-	NUMA_INTERLEAVE_HIT = 3,
-	NUMA_LOCAL = 4,
-	NUMA_OTHER = 5,
-	NR_VM_NUMA_STAT_ITEMS = 6,
-};
-
-enum zone_stat_item {
-	NR_FREE_PAGES = 0,
-	NR_ZONE_LRU_BASE = 1,
-	NR_ZONE_INACTIVE_ANON = 1,
-	NR_ZONE_ACTIVE_ANON = 2,
-	NR_ZONE_INACTIVE_FILE = 3,
-	NR_ZONE_ACTIVE_FILE = 4,
-	NR_ZONE_UNEVICTABLE = 5,
-	NR_ZONE_WRITE_PENDING = 6,
-	NR_MLOCK = 7,
-	NR_PAGETABLE = 8,
-	NR_BOUNCE = 9,
-	NR_ZSPAGES = 10,
-	NR_FREE_CMA_PAGES = 11,
-	NR_VM_ZONE_STAT_ITEMS = 12,
-};
-
-enum zone_watermarks {
-	WMARK_MIN = 0,
-	WMARK_LOW = 1,
-	WMARK_HIGH = 2,
-	NR_WMARK = 3,
-};
-
-enum {
-	ZONELIST_FALLBACK = 0,
-	ZONELIST_NOFALLBACK = 1,
-	MAX_ZONELISTS = 2,
-};
-
-enum {
-	DQF_ROOT_SQUASH_B = 0,
-	DQF_SYS_FILE_B = 16,
-	DQF_PRIVATE = 17,
-};
-
-enum {
-	DQST_LOOKUPS = 0,
-	DQST_DROPS = 1,
-	DQST_READS = 2,
-	DQST_WRITES = 3,
-	DQST_CACHE_HITS = 4,
-	DQST_ALLOC_DQUOTS = 5,
-	DQST_FREE_DQUOTS = 6,
-	DQST_SYNCS = 7,
-	_DQST_DQSTAT_LAST = 8,
-};
-
-enum {
-	SB_UNFROZEN = 0,
-	SB_FREEZE_WRITE = 1,
-	SB_FREEZE_PAGEFAULT = 2,
-	SB_FREEZE_FS = 3,
-	SB_FREEZE_COMPLETE = 4,
-};
-
-enum compound_dtor_id {
-	NULL_COMPOUND_DTOR = 0,
-	COMPOUND_PAGE_DTOR = 1,
-	HUGETLB_PAGE_DTOR = 2,
-	TRANSHUGE_PAGE_DTOR = 3,
-	NR_COMPOUND_DTORS = 4,
-};
-
-enum {
-	TSK_TRACE_FL_TRACE_BIT = 0,
-	TSK_TRACE_FL_GRAPH_BIT = 1,
-};
-
-enum ucount_type {
-	UCOUNT_USER_NAMESPACES = 0,
-	UCOUNT_PID_NAMESPACES = 1,
-	UCOUNT_UTS_NAMESPACES = 2,
-	UCOUNT_IPC_NAMESPACES = 3,
-	UCOUNT_NET_NAMESPACES = 4,
-	UCOUNT_MNT_NAMESPACES = 5,
-	UCOUNT_CGROUP_NAMESPACES = 6,
-	UCOUNT_TIME_NAMESPACES = 7,
-	UCOUNT_INOTIFY_INSTANCES = 8,
-	UCOUNT_INOTIFY_WATCHES = 9,
-	UCOUNT_COUNTS = 10,
-};
-
-enum flow_dissector_key_id {
-	FLOW_DISSECTOR_KEY_CONTROL = 0,
-	FLOW_DISSECTOR_KEY_BASIC = 1,
-	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
-	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
-	FLOW_DISSECTOR_KEY_PORTS = 4,
-	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
-	FLOW_DISSECTOR_KEY_ICMP = 6,
-	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
-	FLOW_DISSECTOR_KEY_TIPC = 8,
-	FLOW_DISSECTOR_KEY_ARP = 9,
-	FLOW_DISSECTOR_KEY_VLAN = 10,
-	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
-	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
-	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
-	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
-	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
-	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
-	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
-	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
-	FLOW_DISSECTOR_KEY_MPLS = 19,
-	FLOW_DISSECTOR_KEY_TCP = 20,
-	FLOW_DISSECTOR_KEY_IP = 21,
-	FLOW_DISSECTOR_KEY_CVLAN = 22,
-	FLOW_DISSECTOR_KEY_ENC_IP = 23,
-	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
-	FLOW_DISSECTOR_KEY_META = 25,
-	FLOW_DISSECTOR_KEY_CT = 26,
-	FLOW_DISSECTOR_KEY_HASH = 27,
-	FLOW_DISSECTOR_KEY_MAX = 28,
-};
-
-enum {
-	IPSTATS_MIB_NUM = 0,
-	IPSTATS_MIB_INPKTS = 1,
-	IPSTATS_MIB_INOCTETS = 2,
-	IPSTATS_MIB_INDELIVERS = 3,
-	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
-	IPSTATS_MIB_OUTPKTS = 5,
-	IPSTATS_MIB_OUTOCTETS = 6,
-	IPSTATS_MIB_INHDRERRORS = 7,
-	IPSTATS_MIB_INTOOBIGERRORS = 8,
-	IPSTATS_MIB_INNOROUTES = 9,
-	IPSTATS_MIB_INADDRERRORS = 10,
-	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
-	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
-	IPSTATS_MIB_INDISCARDS = 13,
-	IPSTATS_MIB_OUTDISCARDS = 14,
-	IPSTATS_MIB_OUTNOROUTES = 15,
-	IPSTATS_MIB_REASMTIMEOUT = 16,
-	IPSTATS_MIB_REASMREQDS = 17,
-	IPSTATS_MIB_REASMOKS = 18,
-	IPSTATS_MIB_REASMFAILS = 19,
-	IPSTATS_MIB_FRAGOKS = 20,
-	IPSTATS_MIB_FRAGFAILS = 21,
-	IPSTATS_MIB_FRAGCREATES = 22,
-	IPSTATS_MIB_INMCASTPKTS = 23,
-	IPSTATS_MIB_OUTMCASTPKTS = 24,
-	IPSTATS_MIB_INBCASTPKTS = 25,
-	IPSTATS_MIB_OUTBCASTPKTS = 26,
-	IPSTATS_MIB_INMCASTOCTETS = 27,
-	IPSTATS_MIB_OUTMCASTOCTETS = 28,
-	IPSTATS_MIB_INBCASTOCTETS = 29,
-	IPSTATS_MIB_OUTBCASTOCTETS = 30,
-	IPSTATS_MIB_CSUMERRORS = 31,
-	IPSTATS_MIB_NOECTPKTS = 32,
-	IPSTATS_MIB_ECT1PKTS = 33,
-	IPSTATS_MIB_ECT0PKTS = 34,
-	IPSTATS_MIB_CEPKTS = 35,
-	IPSTATS_MIB_REASM_OVERLAPS = 36,
-	__IPSTATS_MIB_MAX = 37,
-};
-
-enum {
-	ICMP_MIB_NUM = 0,
-	ICMP_MIB_INMSGS = 1,
-	ICMP_MIB_INERRORS = 2,
-	ICMP_MIB_INDESTUNREACHS = 3,
-	ICMP_MIB_INTIMEEXCDS = 4,
-	ICMP_MIB_INPARMPROBS = 5,
-	ICMP_MIB_INSRCQUENCHS = 6,
-	ICMP_MIB_INREDIRECTS = 7,
-	ICMP_MIB_INECHOS = 8,
-	ICMP_MIB_INECHOREPS = 9,
-	ICMP_MIB_INTIMESTAMPS = 10,
-	ICMP_MIB_INTIMESTAMPREPS = 11,
-	ICMP_MIB_INADDRMASKS = 12,
-	ICMP_MIB_INADDRMASKREPS = 13,
-	ICMP_MIB_OUTMSGS = 14,
-	ICMP_MIB_OUTERRORS = 15,
-	ICMP_MIB_OUTDESTUNREACHS = 16,
-	ICMP_MIB_OUTTIMEEXCDS = 17,
-	ICMP_MIB_OUTPARMPROBS = 18,
-	ICMP_MIB_OUTSRCQUENCHS = 19,
-	ICMP_MIB_OUTREDIRECTS = 20,
-	ICMP_MIB_OUTECHOS = 21,
-	ICMP_MIB_OUTECHOREPS = 22,
-	ICMP_MIB_OUTTIMESTAMPS = 23,
-	ICMP_MIB_OUTTIMESTAMPREPS = 24,
-	ICMP_MIB_OUTADDRMASKS = 25,
-	ICMP_MIB_OUTADDRMASKREPS = 26,
-	ICMP_MIB_CSUMERRORS = 27,
-	__ICMP_MIB_MAX = 28,
-};
-
-enum {
-	ICMP6_MIB_NUM = 0,
-	ICMP6_MIB_INMSGS = 1,
-	ICMP6_MIB_INERRORS = 2,
-	ICMP6_MIB_OUTMSGS = 3,
-	ICMP6_MIB_OUTERRORS = 4,
-	ICMP6_MIB_CSUMERRORS = 5,
-	__ICMP6_MIB_MAX = 6,
-};
-
-enum {
-	TCP_MIB_NUM = 0,
-	TCP_MIB_RTOALGORITHM = 1,
-	TCP_MIB_RTOMIN = 2,
-	TCP_MIB_RTOMAX = 3,
-	TCP_MIB_MAXCONN = 4,
-	TCP_MIB_ACTIVEOPENS = 5,
-	TCP_MIB_PASSIVEOPENS = 6,
-	TCP_MIB_ATTEMPTFAILS = 7,
-	TCP_MIB_ESTABRESETS = 8,
-	TCP_MIB_CURRESTAB = 9,
-	TCP_MIB_INSEGS = 10,
-	TCP_MIB_OUTSEGS = 11,
-	TCP_MIB_RETRANSSEGS = 12,
-	TCP_MIB_INERRS = 13,
-	TCP_MIB_OUTRSTS = 14,
-	TCP_MIB_CSUMERRORS = 15,
-	__TCP_MIB_MAX = 16,
-};
-
-enum {
-	UDP_MIB_NUM = 0,
-	UDP_MIB_INDATAGRAMS = 1,
-	UDP_MIB_NOPORTS = 2,
-	UDP_MIB_INERRORS = 3,
-	UDP_MIB_OUTDATAGRAMS = 4,
-	UDP_MIB_RCVBUFERRORS = 5,
-	UDP_MIB_SNDBUFERRORS = 6,
-	UDP_MIB_CSUMERRORS = 7,
-	UDP_MIB_IGNOREDMULTI = 8,
-	__UDP_MIB_MAX = 9,
-};
-
-enum {
-	LINUX_MIB_NUM = 0,
-	LINUX_MIB_SYNCOOKIESSENT = 1,
-	LINUX_MIB_SYNCOOKIESRECV = 2,
-	LINUX_MIB_SYNCOOKIESFAILED = 3,
-	LINUX_MIB_EMBRYONICRSTS = 4,
-	LINUX_MIB_PRUNECALLED = 5,
-	LINUX_MIB_RCVPRUNED = 6,
-	LINUX_MIB_OFOPRUNED = 7,
-	LINUX_MIB_OUTOFWINDOWICMPS = 8,
-	LINUX_MIB_LOCKDROPPEDICMPS = 9,
-	LINUX_MIB_ARPFILTER = 10,
-	LINUX_MIB_TIMEWAITED = 11,
-	LINUX_MIB_TIMEWAITRECYCLED = 12,
-	LINUX_MIB_TIMEWAITKILLED = 13,
-	LINUX_MIB_PAWSACTIVEREJECTED = 14,
-	LINUX_MIB_PAWSESTABREJECTED = 15,
-	LINUX_MIB_DELAYEDACKS = 16,
-	LINUX_MIB_DELAYEDACKLOCKED = 17,
-	LINUX_MIB_DELAYEDACKLOST = 18,
-	LINUX_MIB_LISTENOVERFLOWS = 19,
-	LINUX_MIB_LISTENDROPS = 20,
-	LINUX_MIB_TCPHPHITS = 21,
-	LINUX_MIB_TCPPUREACKS = 22,
-	LINUX_MIB_TCPHPACKS = 23,
-	LINUX_MIB_TCPRENORECOVERY = 24,
-	LINUX_MIB_TCPSACKRECOVERY = 25,
-	LINUX_MIB_TCPSACKRENEGING = 26,
-	LINUX_MIB_TCPSACKREORDER = 27,
-	LINUX_MIB_TCPRENOREORDER = 28,
-	LINUX_MIB_TCPTSREORDER = 29,
-	LINUX_MIB_TCPFULLUNDO = 30,
-	LINUX_MIB_TCPPARTIALUNDO = 31,
-	LINUX_MIB_TCPDSACKUNDO = 32,
-	LINUX_MIB_TCPLOSSUNDO = 33,
-	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
-	LINUX_MIB_TCPRENOFAILURES = 35,
-	LINUX_MIB_TCPSACKFAILURES = 36,
-	LINUX_MIB_TCPLOSSFAILURES = 37,
-	LINUX_MIB_TCPFASTRETRANS = 38,
-	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
-	LINUX_MIB_TCPTIMEOUTS = 40,
-	LINUX_MIB_TCPLOSSPROBES = 41,
-	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
-	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
-	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
-	LINUX_MIB_TCPRCVCOLLAPSED = 45,
-	LINUX_MIB_TCPDSACKOLDSENT = 46,
-	LINUX_MIB_TCPDSACKOFOSENT = 47,
-	LINUX_MIB_TCPDSACKRECV = 48,
-	LINUX_MIB_TCPDSACKOFORECV = 49,
-	LINUX_MIB_TCPABORTONDATA = 50,
-	LINUX_MIB_TCPABORTONCLOSE = 51,
-	LINUX_MIB_TCPABORTONMEMORY = 52,
-	LINUX_MIB_TCPABORTONTIMEOUT = 53,
-	LINUX_MIB_TCPABORTONLINGER = 54,
-	LINUX_MIB_TCPABORTFAILED = 55,
-	LINUX_MIB_TCPMEMORYPRESSURES = 56,
-	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
-	LINUX_MIB_TCPSACKDISCARD = 58,
-	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
-	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
-	LINUX_MIB_TCPSPURIOUSRTOS = 61,
-	LINUX_MIB_TCPMD5NOTFOUND = 62,
-	LINUX_MIB_TCPMD5UNEXPECTED = 63,
-	LINUX_MIB_TCPMD5FAILURE = 64,
-	LINUX_MIB_SACKSHIFTED = 65,
-	LINUX_MIB_SACKMERGED = 66,
-	LINUX_MIB_SACKSHIFTFALLBACK = 67,
-	LINUX_MIB_TCPBACKLOGDROP = 68,
-	LINUX_MIB_PFMEMALLOCDROP = 69,
-	LINUX_MIB_TCPMINTTLDROP = 70,
-	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
-	LINUX_MIB_IPRPFILTER = 72,
-	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
-	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
-	LINUX_MIB_TCPREQQFULLDROP = 75,
-	LINUX_MIB_TCPRETRANSFAIL = 76,
-	LINUX_MIB_TCPRCVCOALESCE = 77,
-	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
-	LINUX_MIB_TCPOFOQUEUE = 79,
-	LINUX_MIB_TCPOFODROP = 80,
-	LINUX_MIB_TCPOFOMERGE = 81,
-	LINUX_MIB_TCPCHALLENGEACK = 82,
-	LINUX_MIB_TCPSYNCHALLENGE = 83,
-	LINUX_MIB_TCPFASTOPENACTIVE = 84,
-	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
-	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
-	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
-	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
-	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
-	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
-	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
-	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
-	LINUX_MIB_TCPAUTOCORKING = 93,
-	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
-	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
-	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
-	LINUX_MIB_TCPSYNRETRANS = 97,
-	LINUX_MIB_TCPORIGDATASENT = 98,
-	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
-	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
-	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
-	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
-	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
-	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
-	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
-	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
-	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
-	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
-	LINUX_MIB_TCPWINPROBE = 109,
-	LINUX_MIB_TCPKEEPALIVE = 110,
-	LINUX_MIB_TCPMTUPFAIL = 111,
-	LINUX_MIB_TCPMTUPSUCCESS = 112,
-	LINUX_MIB_TCPDELIVERED = 113,
-	LINUX_MIB_TCPDELIVEREDCE = 114,
-	LINUX_MIB_TCPACKCOMPRESSED = 115,
-	LINUX_MIB_TCPZEROWINDOWDROP = 116,
-	LINUX_MIB_TCPRCVQDROP = 117,
-	LINUX_MIB_TCPWQUEUETOOBIG = 118,
-	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
-	LINUX_MIB_TCPTIMEOUTREHASH = 120,
-	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
-	LINUX_MIB_TCPDSACKRECVSEGS = 122,
-	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
-	__LINUX_MIB_MAX = 124,
-};
-
-enum {
-	LINUX_MIB_XFRMNUM = 0,
-	LINUX_MIB_XFRMINERROR = 1,
-	LINUX_MIB_XFRMINBUFFERERROR = 2,
-	LINUX_MIB_XFRMINHDRERROR = 3,
-	LINUX_MIB_XFRMINNOSTATES = 4,
-	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
-	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
-	LINUX_MIB_XFRMINSTATESEQERROR = 7,
-	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
-	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
-	LINUX_MIB_XFRMINSTATEINVALID = 10,
-	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
-	LINUX_MIB_XFRMINNOPOLS = 12,
-	LINUX_MIB_XFRMINPOLBLOCK = 13,
-	LINUX_MIB_XFRMINPOLERROR = 14,
-	LINUX_MIB_XFRMOUTERROR = 15,
-	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
-	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
-	LINUX_MIB_XFRMOUTNOSTATES = 18,
-	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
-	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
-	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
-	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
-	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
-	LINUX_MIB_XFRMOUTPOLDEAD = 24,
-	LINUX_MIB_XFRMOUTPOLERROR = 25,
-	LINUX_MIB_XFRMFWDHDRERROR = 26,
-	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
-	LINUX_MIB_XFRMACQUIREERROR = 28,
-	__LINUX_MIB_XFRMMAX = 29,
-};
-
-enum {
-	LINUX_MIB_TLSNUM = 0,
-	LINUX_MIB_TLSCURRTXSW = 1,
-	LINUX_MIB_TLSCURRRXSW = 2,
-	LINUX_MIB_TLSCURRTXDEVICE = 3,
-	LINUX_MIB_TLSCURRRXDEVICE = 4,
-	LINUX_MIB_TLSTXSW = 5,
-	LINUX_MIB_TLSRXSW = 6,
-	LINUX_MIB_TLSTXDEVICE = 7,
-	LINUX_MIB_TLSRXDEVICE = 8,
-	LINUX_MIB_TLSDECRYPTERROR = 9,
-	LINUX_MIB_TLSRXDEVICERESYNC = 10,
-	__LINUX_MIB_TLSMAX = 11,
-};
-
-enum nf_inet_hooks {
-	NF_INET_PRE_ROUTING = 0,
-	NF_INET_LOCAL_IN = 1,
-	NF_INET_FORWARD = 2,
-	NF_INET_LOCAL_OUT = 3,
-	NF_INET_POST_ROUTING = 4,
-	NF_INET_NUMHOOKS = 5,
-	NF_INET_INGRESS = 5,
-};
-
-enum {
-	NFPROTO_UNSPEC = 0,
-	NFPROTO_INET = 1,
-	NFPROTO_IPV4 = 2,
-	NFPROTO_ARP = 3,
-	NFPROTO_NETDEV = 5,
-	NFPROTO_BRIDGE = 7,
-	NFPROTO_IPV6 = 10,
-	NFPROTO_DECNET = 12,
-	NFPROTO_NUMPROTO = 13,
-};
-
-enum tcp_conntrack {
-	TCP_CONNTRACK_NONE = 0,
-	TCP_CONNTRACK_SYN_SENT = 1,
-	TCP_CONNTRACK_SYN_RECV = 2,
-	TCP_CONNTRACK_ESTABLISHED = 3,
-	TCP_CONNTRACK_FIN_WAIT = 4,
-	TCP_CONNTRACK_CLOSE_WAIT = 5,
-	TCP_CONNTRACK_LAST_ACK = 6,
-	TCP_CONNTRACK_TIME_WAIT = 7,
-	TCP_CONNTRACK_CLOSE = 8,
-	TCP_CONNTRACK_LISTEN = 9,
-	TCP_CONNTRACK_MAX = 10,
-	TCP_CONNTRACK_IGNORE = 11,
-	TCP_CONNTRACK_RETRANS = 12,
-	TCP_CONNTRACK_UNACK = 13,
-	TCP_CONNTRACK_TIMEOUT_MAX = 14,
-};
-
-enum ct_dccp_states {
-	CT_DCCP_NONE = 0,
-	CT_DCCP_REQUEST = 1,
-	CT_DCCP_RESPOND = 2,
-	CT_DCCP_PARTOPEN = 3,
-	CT_DCCP_OPEN = 4,
-	CT_DCCP_CLOSEREQ = 5,
-	CT_DCCP_CLOSING = 6,
-	CT_DCCP_TIMEWAIT = 7,
-	CT_DCCP_IGNORE = 8,
-	CT_DCCP_INVALID = 9,
-	__CT_DCCP_MAX = 10,
-};
-
-enum ip_conntrack_dir {
-	IP_CT_DIR_ORIGINAL = 0,
-	IP_CT_DIR_REPLY = 1,
-	IP_CT_DIR_MAX = 2,
-};
-
-enum sctp_conntrack {
-	SCTP_CONNTRACK_NONE = 0,
-	SCTP_CONNTRACK_CLOSED = 1,
-	SCTP_CONNTRACK_COOKIE_WAIT = 2,
-	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
-	SCTP_CONNTRACK_ESTABLISHED = 4,
-	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
-	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
-	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
-	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
-	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
-	SCTP_CONNTRACK_MAX = 10,
-};
-
-enum udp_conntrack {
-	UDP_CT_UNREPLIED = 0,
-	UDP_CT_REPLIED = 1,
-	UDP_CT_MAX = 2,
-};
-
-enum gre_conntrack {
-	GRE_CT_UNREPLIED = 0,
-	GRE_CT_REPLIED = 1,
-	GRE_CT_MAX = 2,
-};
-
-enum {
-	XFRM_POLICY_IN = 0,
-	XFRM_POLICY_OUT = 1,
-	XFRM_POLICY_FWD = 2,
-	XFRM_POLICY_MASK = 3,
-	XFRM_POLICY_MAX = 3,
-};
-
-enum netns_bpf_attach_type {
-	NETNS_BPF_INVALID = 4294967295,
-	NETNS_BPF_FLOW_DISSECTOR = 0,
-	NETNS_BPF_SK_LOOKUP = 1,
-	MAX_NETNS_BPF_ATTACH_TYPE = 2,
-};
-
-enum cpu_idle_type {
-	CPU_IDLE = 0,
-	CPU_NOT_IDLE = 1,
-	CPU_NEWLY_IDLE = 2,
-	CPU_MAX_IDLE_TYPES = 3,
-};
-
-enum {
-	__SD_BALANCE_NEWIDLE = 0,
-	__SD_BALANCE_EXEC = 1,
-	__SD_BALANCE_FORK = 2,
-	__SD_BALANCE_WAKE = 3,
-	__SD_WAKE_AFFINE = 4,
-	__SD_ASYM_CPUCAPACITY = 5,
-	__SD_SHARE_CPUCAPACITY = 6,
-	__SD_SHARE_PKG_RESOURCES = 7,
-	__SD_SERIALIZE = 8,
-	__SD_ASYM_PACKING = 9,
-	__SD_PREFER_SIBLING = 10,
-	__SD_OVERLAP = 11,
-	__SD_NUMA = 12,
-	__SD_FLAG_CNT = 13,
-};
-
-enum skb_ext_id {
-	SKB_EXT_BRIDGE_NF = 0,
-	SKB_EXT_SEC_PATH = 1,
-	TC_SKB_EXT = 2,
-	SKB_EXT_MPTCP = 3,
-	SKB_EXT_NUM = 4,
-};
-
-enum audit_ntp_type {
-	AUDIT_NTP_OFFSET = 0,
-	AUDIT_NTP_FREQ = 1,
-	AUDIT_NTP_STATUS = 2,
-	AUDIT_NTP_TAI = 3,
-	AUDIT_NTP_TICK = 4,
-	AUDIT_NTP_ADJUST = 5,
-	AUDIT_NTP_NVALS = 6,
-};
-
-typedef long unsigned int uintptr_t;
-
-struct step_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-};
-
-struct break_hook {
-	struct list_head node;
-	int (*fn)(struct pt_regs *, unsigned int);
-	u16 imm;
-	u16 mask;
-};
-
-enum dbg_active_el {
-	DBG_ACTIVE_EL0 = 0,
-	DBG_ACTIVE_EL1 = 1,
-};
-
-struct nmi_ctx {
-	u64 hcr;
-	unsigned int cnt;
-};
+typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));
 
 enum {
 	HI_SOFTIRQ = 0,
@@ -13682,744 +13589,60 @@
 	NR_SOFTIRQS = 10,
 };
 
-struct midr_range {
-	u32 model;
-	u32 rv_min;
-	u32 rv_max;
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_FANOTIFY_GROUPS = 10,
+	UCOUNT_FANOTIFY_MARKS = 11,
+	UCOUNT_RLIMIT_NPROC = 12,
+	UCOUNT_RLIMIT_MSGQUEUE = 13,
+	UCOUNT_RLIMIT_SIGPENDING = 14,
+	UCOUNT_RLIMIT_MEMLOCK = 15,
+	UCOUNT_COUNTS = 16,
 };
 
-struct arm64_midr_revidr {
-	u32 midr_rv;
-	u32 revidr_mask;
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
 };
 
-struct arm64_cpu_capabilities {
-	const char *desc;
-	u16 capability;
-	u16 type;
-	bool (*matches)(const struct arm64_cpu_capabilities *, int);
-	void (*cpu_enable)(const struct arm64_cpu_capabilities *);
-	union {
-		struct {
-			struct midr_range midr_range;
-			const struct arm64_midr_revidr * const fixed_revs;
-		};
-		const struct midr_range *midr_range_list;
-		struct {
-			u32 sys_reg;
-			u8 field_pos;
-			u8 min_field_value;
-			u8 hwcap_type;
-			bool sign;
-			long unsigned int hwcap;
-		};
-	};
-	const struct arm64_cpu_capabilities *match_list;
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
 };
 
-enum cpu_pm_event {
-	CPU_PM_ENTER = 0,
-	CPU_PM_ENTER_FAILED = 1,
-	CPU_PM_EXIT = 2,
-	CPU_CLUSTER_PM_ENTER = 3,
-	CPU_CLUSTER_PM_ENTER_FAILED = 4,
-	CPU_CLUSTER_PM_EXIT = 5,
+enum cc_vendor {
+	CC_VENDOR_NONE = 0,
+	CC_VENDOR_AMD = 1,
+	CC_VENDOR_HYPERV = 2,
+	CC_VENDOR_INTEL = 3,
 };
 
-struct fpsimd_last_state_struct {
-	struct user_fpsimd_state *st;
-	void *sve_state;
-	unsigned int sve_vl;
-};
+typedef long int (*sys_call_ptr_t)(const struct pt_regs *);
 
-enum ctx_state {
-	CONTEXT_DISABLED = 4294967295,
-	CONTEXT_KERNEL = 0,
-	CONTEXT_USER = 1,
-	CONTEXT_GUEST = 2,
-};
-
-typedef void (*bp_hardening_cb_t)();
-
-struct bp_hardening_data {
-	int hyp_vectors_slot;
-	bp_hardening_cb_t fn;
-};
-
-enum refcount_saturation_type {
-	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
-	REFCOUNT_ADD_OVF = 1,
-	REFCOUNT_ADD_UAF = 2,
-	REFCOUNT_SUB_UAF = 3,
-	REFCOUNT_DEC_LEAK = 4,
-};
-
-struct plist_head {
-	struct list_head node_list;
-};
-
-typedef struct {
-	__u8 b[16];
-} guid_t;
-
-enum pm_qos_type {
-	PM_QOS_UNITIALIZED = 0,
-	PM_QOS_MAX = 1,
-	PM_QOS_MIN = 2,
-};
-
-struct pm_qos_constraints {
-	struct plist_head list;
-	s32 target_value;
-	s32 default_value;
-	s32 no_constraint_value;
-	enum pm_qos_type type;
-	struct blocking_notifier_head *notifiers;
-};
-
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
-};
-
-struct pm_qos_flags {
-	struct list_head list;
-	s32 effective_flags;
-};
-
-struct dev_pm_qos_request;
-
-struct dev_pm_qos {
-	struct pm_qos_constraints resume_latency;
-	struct pm_qos_constraints latency_tolerance;
-	struct freq_constraints freq;
-	struct pm_qos_flags flags;
-	struct dev_pm_qos_request *resume_latency_req;
-	struct dev_pm_qos_request *latency_tolerance_req;
-	struct dev_pm_qos_request *flags_req;
-};
-
-enum reboot_mode {
-	REBOOT_UNDEFINED = 4294967295,
-	REBOOT_COLD = 0,
-	REBOOT_WARM = 1,
-	REBOOT_HARD = 2,
-	REBOOT_SOFT = 3,
-	REBOOT_GPIO = 4,
-};
-
-typedef long unsigned int efi_status_t;
-
-typedef u8 efi_bool_t;
-
-typedef u16 efi_char16_t;
-
-typedef guid_t efi_guid_t;
-
-typedef struct {
-	u64 signature;
-	u32 revision;
-	u32 headersize;
-	u32 crc32;
-	u32 reserved;
-} efi_table_hdr_t;
-
-typedef struct {
-	u32 type;
-	u32 pad;
-	u64 phys_addr;
-	u64 virt_addr;
-	u64 num_pages;
-	u64 attribute;
-} efi_memory_desc_t;
-
-typedef struct {
-	efi_guid_t guid;
-	u32 headersize;
-	u32 flags;
-	u32 imagesize;
-} efi_capsule_header_t;
-
-typedef struct {
-	u16 year;
-	u8 month;
-	u8 day;
-	u8 hour;
-	u8 minute;
-	u8 second;
-	u8 pad1;
-	u32 nanosecond;
-	s16 timezone;
-	u8 daylight;
-	u8 pad2;
-} efi_time_t;
-
-typedef struct {
-	u32 resolution;
-	u32 accuracy;
-	u8 sets_to_zero;
-} efi_time_cap_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 get_time;
-	u32 set_time;
-	u32 get_wakeup_time;
-	u32 set_wakeup_time;
-	u32 set_virtual_address_map;
-	u32 convert_pointer;
-	u32 get_variable;
-	u32 get_next_variable;
-	u32 set_variable;
-	u32 get_next_high_mono_count;
-	u32 reset_system;
-	u32 update_capsule;
-	u32 query_capsule_caps;
-	u32 query_variable_info;
-} efi_runtime_services_32_t;
-
-typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
-
-typedef efi_status_t efi_set_time_t(efi_time_t *);
-
-typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
-
-typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
-
-typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);
-
-typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);
-
-typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);
-
-typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
-
-typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);
-
-typedef efi_status_t efi_set_virtual_address_map_t(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);
-
-typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
-
-typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int);
-
-typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);
-
-typedef union {
-	struct {
-		efi_table_hdr_t hdr;
-		efi_get_time_t *get_time;
-		efi_set_time_t *set_time;
-		efi_get_wakeup_time_t *get_wakeup_time;
-		efi_set_wakeup_time_t *set_wakeup_time;
-		efi_set_virtual_address_map_t *set_virtual_address_map;
-		void *convert_pointer;
-		efi_get_variable_t *get_variable;
-		efi_get_next_variable_t *get_next_variable;
-		efi_set_variable_t *set_variable;
-		efi_get_next_high_mono_count_t *get_next_high_mono_count;
-		efi_reset_system_t *reset_system;
-		efi_update_capsule_t *update_capsule;
-		efi_query_capsule_caps_t *query_capsule_caps;
-		efi_query_variable_info_t *query_variable_info;
-	};
-	efi_runtime_services_32_t mixed_mode;
-} efi_runtime_services_t;
-
-struct efi_memory_map {
-	phys_addr_t phys_map;
-	void *map;
-	void *map_end;
-	int nr_map;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-	long unsigned int flags;
-};
-
-struct efi {
-	const efi_runtime_services_t *runtime;
-	unsigned int runtime_version;
-	unsigned int runtime_supported_mask;
-	long unsigned int acpi;
-	long unsigned int acpi20;
-	long unsigned int smbios;
-	long unsigned int smbios3;
-	long unsigned int esrt;
-	long unsigned int tpm_log;
-	long unsigned int tpm_final_log;
-	long unsigned int mokvar_table;
-	efi_get_time_t *get_time;
-	efi_set_time_t *set_time;
-	efi_get_wakeup_time_t *get_wakeup_time;
-	efi_set_wakeup_time_t *set_wakeup_time;
-	efi_get_variable_t *get_variable;
-	efi_get_next_variable_t *get_next_variable;
-	efi_set_variable_t *set_variable;
-	efi_set_variable_t *set_variable_nonblocking;
-	efi_query_variable_info_t *query_variable_info;
-	efi_query_variable_info_t *query_variable_info_nonblocking;
-	efi_update_capsule_t *update_capsule;
-	efi_query_capsule_caps_t *query_capsule_caps;
-	efi_get_next_high_mono_count_t *get_next_high_mono_count;
-	efi_reset_system_t *reset_system;
-	struct efi_memory_map memmap;
-	long unsigned int flags;
-};
-
-struct arch_elf_state {
-	int flags;
-};
-
-struct pm_qos_flags_request {
-	struct list_head node;
-	s32 flags;
-};
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX = 2,
-};
-
-struct freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
-	DEV_PM_QOS_MIN_FREQUENCY = 3,
-	DEV_PM_QOS_MAX_FREQUENCY = 4,
-	DEV_PM_QOS_FLAGS = 5,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-		struct freq_qos_request freq;
-	} data;
-	struct device *dev;
-};
-
-enum stack_type {
-	STACK_TYPE_UNKNOWN = 0,
-	STACK_TYPE_TASK = 1,
-	STACK_TYPE_IRQ = 2,
-	STACK_TYPE_OVERFLOW = 3,
-	STACK_TYPE_SDEI_NORMAL = 4,
-	STACK_TYPE_SDEI_CRITICAL = 5,
-	__NR_STACK_TYPES = 6,
-};
-
-struct stackframe {
-	long unsigned int fp;
-	long unsigned int pc;
-	long unsigned int stacks_done[1];
-	long unsigned int prev_fp;
-	enum stack_type prev_type;
-	int graph;
-};
-
-struct user_sve_header {
-	__u32 size;
-	__u32 max_size;
-	__u16 vl;
-	__u16 max_vl;
-	__u16 flags;
-	__u16 __reserved;
-};
-
-struct user_pac_mask {
-	__u64 data_mask;
-	__u64 insn_mask;
-};
-
-struct user_pac_address_keys {
-	__int128 unsigned apiakey;
-	__int128 unsigned apibkey;
-	__int128 unsigned apdakey;
-	__int128 unsigned apdbkey;
-};
-
-struct user_pac_generic_keys {
-	__int128 unsigned apgakey;
-};
-
-typedef u32 compat_ulong_t;
-
-enum perf_type_id {
-	PERF_TYPE_HARDWARE = 0,
-	PERF_TYPE_SOFTWARE = 1,
-	PERF_TYPE_TRACEPOINT = 2,
-	PERF_TYPE_HW_CACHE = 3,
-	PERF_TYPE_RAW = 4,
-	PERF_TYPE_BREAKPOINT = 5,
-	PERF_TYPE_MAX = 6,
-};
-
-enum {
-	TASKSTATS_CMD_UNSPEC = 0,
-	TASKSTATS_CMD_GET = 1,
-	TASKSTATS_CMD_NEW = 2,
-	__TASKSTATS_CMD_MAX = 3,
-};
-
-enum cpu_usage_stat {
-	CPUTIME_USER = 0,
-	CPUTIME_NICE = 1,
-	CPUTIME_SYSTEM = 2,
-	CPUTIME_SOFTIRQ = 3,
-	CPUTIME_IRQ = 4,
-	CPUTIME_IDLE = 5,
-	CPUTIME_IOWAIT = 6,
-	CPUTIME_STEAL = 7,
-	CPUTIME_GUEST = 8,
-	CPUTIME_GUEST_NICE = 9,
-	NR_STATS = 10,
-};
-
-enum bpf_cgroup_storage_type {
-	BPF_CGROUP_STORAGE_SHARED = 0,
-	BPF_CGROUP_STORAGE_PERCPU = 1,
-	__BPF_CGROUP_STORAGE_MAX = 2,
-};
-
-enum psi_task_count {
-	NR_IOWAIT = 0,
-	NR_MEMSTALL = 1,
-	NR_RUNNING = 2,
-	NR_ONCPU = 3,
-	NR_PSI_TASK_COUNTS = 4,
-};
-
-enum psi_states {
-	PSI_IO_SOME = 0,
-	PSI_IO_FULL = 1,
-	PSI_MEM_SOME = 2,
-	PSI_MEM_FULL = 3,
-	PSI_CPU_SOME = 4,
-	PSI_NONIDLE = 5,
-	NR_PSI_STATES = 6,
-};
-
-enum psi_aggregators {
-	PSI_AVGS = 0,
-	PSI_POLL = 1,
-	NR_PSI_AGGREGATORS = 2,
-};
-
-enum cgroup_subsys_id {
-	cpuset_cgrp_id = 0,
-	cpu_cgrp_id = 1,
-	cpuacct_cgrp_id = 2,
-	io_cgrp_id = 3,
-	memory_cgrp_id = 4,
-	devices_cgrp_id = 5,
-	freezer_cgrp_id = 6,
-	net_cls_cgrp_id = 7,
-	perf_event_cgrp_id = 8,
-	net_prio_cgrp_id = 9,
-	hugetlb_cgrp_id = 10,
-	pids_cgrp_id = 11,
-	CGROUP_SUBSYS_COUNT = 12,
-};
-
-enum {
-	HW_BREAKPOINT_LEN_1 = 1,
-	HW_BREAKPOINT_LEN_2 = 2,
-	HW_BREAKPOINT_LEN_3 = 3,
-	HW_BREAKPOINT_LEN_4 = 4,
-	HW_BREAKPOINT_LEN_5 = 5,
-	HW_BREAKPOINT_LEN_6 = 6,
-	HW_BREAKPOINT_LEN_7 = 7,
-	HW_BREAKPOINT_LEN_8 = 8,
-};
-
-enum {
-	HW_BREAKPOINT_EMPTY = 0,
-	HW_BREAKPOINT_R = 1,
-	HW_BREAKPOINT_W = 2,
-	HW_BREAKPOINT_RW = 3,
-	HW_BREAKPOINT_X = 4,
-	HW_BREAKPOINT_INVALID = 7,
-};
-
-enum bp_type_idx {
-	TYPE_INST = 0,
-	TYPE_DATA = 1,
-	TYPE_MAX = 2,
-};
-
-struct membuf {
-	void *p;
-	size_t left;
-};
-
-struct user_regset;
-
-typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
-
-typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
-
-typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
-
-typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
-
-struct user_regset {
-	user_regset_get2_fn *regset_get;
-	user_regset_set_fn *set;
-	user_regset_active_fn *active;
-	user_regset_writeback_fn *writeback;
-	unsigned int n;
-	unsigned int size;
-	unsigned int align;
-	unsigned int bias;
-	unsigned int core_note_type;
-};
-
-struct user_regset_view {
-	const char *name;
-	const struct user_regset *regsets;
-	unsigned int n;
-	u32 e_flags;
-	u16 e_machine;
-	u8 ei_osabi;
-};
-
-struct stack_info {
-	long unsigned int low;
-	long unsigned int high;
-	enum stack_type type;
-};
-
-struct trace_event_raw_sys_enter {
-	struct trace_entry ent;
-	long int id;
-	long unsigned int args[6];
-	char __data[0];
-};
-
-struct trace_event_raw_sys_exit {
-	struct trace_entry ent;
-	long int id;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_sys_enter {};
-
-struct trace_event_data_offsets_sys_exit {};
-
-typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
-
-typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
-
-struct pt_regs_offset {
-	const char *name;
-	int offset;
-};
-
-enum aarch64_regset {
-	REGSET_GPR = 0,
-	REGSET_FPR = 1,
-	REGSET_TLS = 2,
-	REGSET_HW_BREAK = 3,
-	REGSET_HW_WATCH = 4,
-	REGSET_SYSTEM_CALL = 5,
-	REGSET_SVE = 6,
-	REGSET_PAC_MASK = 7,
-	REGSET_PACA_KEYS = 8,
-	REGSET_PACG_KEYS = 9,
-	REGSET_TAGGED_ADDR_CTRL = 10,
-};
-
-enum compat_regset {
-	REGSET_COMPAT_GPR = 0,
-	REGSET_COMPAT_VFP = 1,
-};
-
-enum ptrace_syscall_dir {
-	PTRACE_SYSCALL_ENTER = 0,
-	PTRACE_SYSCALL_EXIT = 1,
-};
-
-struct atomic_notifier_head {
-	spinlock_t lock;
-	struct notifier_block *head;
-};
-
-typedef struct pglist_data pg_data_t;
-
-enum meminit_context {
-	MEMINIT_EARLY = 0,
-	MEMINIT_HOTPLUG = 1,
-};
-
-enum memblock_flags {
-	MEMBLOCK_NONE = 0,
-	MEMBLOCK_HOTPLUG = 1,
-	MEMBLOCK_MIRROR = 2,
-	MEMBLOCK_NOMAP = 4,
-};
-
-struct memblock_region {
-	phys_addr_t base;
-	phys_addr_t size;
-	enum memblock_flags flags;
-	int nid;
-};
-
-struct memblock_type {
-	long unsigned int cnt;
-	long unsigned int max;
-	phys_addr_t total_size;
-	struct memblock_region *regions;
-	char *name;
-};
-
-struct memblock {
-	bool bottom_up;
-	phys_addr_t current_limit;
-	struct memblock_type memory;
-	struct memblock_type reserved;
-};
-
-struct mpidr_hash {
-	u64 mask;
-	u32 shift_aff[4];
-	u32 bits;
-};
-
-struct cpu {
-	int node_id;
-	int hotpluggable;
-	struct device dev;
-};
-
-struct cpuinfo_arm64 {
-	struct cpu cpu;
-	struct kobject kobj;
-	u32 reg_ctr;
-	u32 reg_cntfrq;
-	u32 reg_dczid;
-	u32 reg_midr;
-	u32 reg_revidr;
-	u64 reg_id_aa64dfr0;
-	u64 reg_id_aa64dfr1;
-	u64 reg_id_aa64isar0;
-	u64 reg_id_aa64isar1;
-	u64 reg_id_aa64mmfr0;
-	u64 reg_id_aa64mmfr1;
-	u64 reg_id_aa64mmfr2;
-	u64 reg_id_aa64pfr0;
-	u64 reg_id_aa64pfr1;
-	u64 reg_id_aa64zfr0;
-	u32 reg_id_dfr0;
-	u32 reg_id_dfr1;
-	u32 reg_id_isar0;
-	u32 reg_id_isar1;
-	u32 reg_id_isar2;
-	u32 reg_id_isar3;
-	u32 reg_id_isar4;
-	u32 reg_id_isar5;
-	u32 reg_id_isar6;
-	u32 reg_id_mmfr0;
-	u32 reg_id_mmfr1;
-	u32 reg_id_mmfr2;
-	u32 reg_id_mmfr3;
-	u32 reg_id_mmfr4;
-	u32 reg_id_mmfr5;
-	u32 reg_id_pfr0;
-	u32 reg_id_pfr1;
-	u32 reg_id_pfr2;
-	u32 reg_mvfr0;
-	u32 reg_mvfr1;
-	u32 reg_mvfr2;
-	u64 reg_zcr;
-};
-
-struct cpu_operations {
-	const char *name;
-	int (*cpu_init)(unsigned int);
-	int (*cpu_prepare)(unsigned int);
-	int (*cpu_boot)(unsigned int);
-	void (*cpu_postboot)();
-	bool (*cpu_can_disable)(unsigned int);
-	int (*cpu_disable)(unsigned int);
-	void (*cpu_die)(unsigned int);
-	int (*cpu_kill)(unsigned int);
-	int (*cpu_init_idle)(unsigned int);
-	int (*cpu_suspend)(long unsigned int);
-};
-
-struct sigcontext {
-	__u64 fault_address;
-	__u64 regs[31];
-	__u64 sp;
-	__u64 pc;
-	__u64 pstate;
-	long: 64;
-	__u8 __reserved[4096];
-};
-
-struct _aarch64_ctx {
-	__u32 magic;
-	__u32 size;
-};
-
-struct fpsimd_context {
-	struct _aarch64_ctx head;
-	__u32 fpsr;
-	__u32 fpcr;
-	__int128 unsigned vregs[32];
-};
-
-struct esr_context {
-	struct _aarch64_ctx head;
-	__u64 esr;
-};
-
-struct extra_context {
-	struct _aarch64_ctx head;
-	__u64 datap;
-	__u32 size;
-	__u32 __reserved[3];
-};
-
-struct sve_context {
-	struct _aarch64_ctx head;
-	__u16 vl;
-	__u16 __reserved[3];
-};
-
-struct sigaltstack {
-	void *ss_sp;
-	int ss_flags;
-	size_t ss_size;
-};
-
-typedef struct sigaltstack stack_t;
-
-struct siginfo {
-	union {
-		struct {
-			int si_signo;
-			int si_errno;
-			int si_code;
-			union __sifields _sifields;
-		};
-		int _si_pad[32];
-	};
-};
-
-struct ksignal {
-	struct k_sigaction ka;
-	kernel_siginfo_t info;
-	int sig;
+struct io_bitmap {
+	u64 sequence;
+	refcount_t refcnt;
+	unsigned int max;
+	long unsigned int bitmap[1024];
 };
 
 enum {
@@ -14430,742 +13653,51 @@
 	EI_ETYPE_TRUE = 4,
 };
 
-struct syscall_metadata {
-	const char *name;
-	int syscall_nr;
-	int nb_args;
-	const char **types;
-	const char **args;
-	struct list_head enter_fields;
-	struct trace_event_call *enter_event;
-	struct trace_event_call *exit_event;
-};
-
-struct ucontext {
-	long unsigned int uc_flags;
-	struct ucontext *uc_link;
-	stack_t uc_stack;
-	sigset_t uc_sigmask;
-	__u8 __unused[120];
-	long: 64;
-	struct sigcontext uc_mcontext;
-};
-
-struct rt_sigframe {
-	struct siginfo info;
-	struct ucontext uc;
-};
-
-struct frame_record {
-	u64 fp;
-	u64 lr;
-};
-
-struct rt_sigframe_user_layout {
-	struct rt_sigframe *sigframe;
-	struct frame_record *next_frame;
-	long unsigned int size;
-	long unsigned int limit;
-	long unsigned int fpsimd_offset;
-	long unsigned int esr_offset;
-	long unsigned int sve_offset;
-	long unsigned int extra_offset;
-	long unsigned int end_offset;
-};
-
-struct user_ctxs {
-	struct fpsimd_context *fpsimd;
-	struct sve_context *sve;
-};
-
-enum {
-	PER_LINUX = 0,
-	PER_LINUX_32BIT = 8388608,
-	PER_LINUX_FDPIC = 524288,
-	PER_SVR4 = 68157441,
-	PER_SVR3 = 83886082,
-	PER_SCOSVR3 = 117440515,
-	PER_OSR5 = 100663299,
-	PER_WYSEV386 = 83886084,
-	PER_ISCR4 = 67108869,
-	PER_BSD = 6,
-	PER_SUNOS = 67108870,
-	PER_XENIX = 83886087,
-	PER_LINUX32 = 8,
-	PER_LINUX32_3GB = 134217736,
-	PER_IRIX32 = 67108873,
-	PER_IRIXN32 = 67108874,
-	PER_IRIX64 = 67108875,
-	PER_RISCOS = 12,
-	PER_SOLARIS = 67108877,
-	PER_UW7 = 68157454,
-	PER_OSF4 = 15,
-	PER_HPUX = 16,
-	PER_MASK = 255,
-};
-
-typedef long int (*syscall_fn_t)(const struct pt_regs *);
-
-typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
-
-typedef bool pstate_check_t(long unsigned int);
-
-enum lockdep_ok {
-	LOCKDEP_STILL_OK = 0,
-	LOCKDEP_NOW_UNRELIABLE = 1,
-};
-
-enum bug_trap_type {
-	BUG_TRAP_TYPE_NONE = 0,
-	BUG_TRAP_TYPE_WARN = 1,
-	BUG_TRAP_TYPE_BUG = 2,
-};
-
-enum ftr_type {
-	FTR_EXACT = 0,
-	FTR_LOWER_SAFE = 1,
-	FTR_HIGHER_SAFE = 2,
-	FTR_HIGHER_OR_ZERO_SAFE = 3,
-};
-
-struct arm64_ftr_bits {
-	bool sign;
-	bool visible;
-	bool strict;
-	enum ftr_type type;
-	u8 shift;
-	u8 width;
-	s64 safe_val;
-};
-
-struct arm64_ftr_reg {
-	const char *name;
-	u64 strict_mask;
-	u64 user_mask;
-	u64 sys_val;
-	u64 user_val;
-	const struct arm64_ftr_bits *ftr_bits;
-};
-
-enum siginfo_layout {
-	SIL_KILL = 0,
-	SIL_TIMER = 1,
-	SIL_POLL = 2,
-	SIL_FAULT = 3,
-	SIL_FAULT_MCEERR = 4,
-	SIL_FAULT_BNDERR = 5,
-	SIL_FAULT_PKUERR = 6,
-	SIL_CHLD = 7,
-	SIL_RT = 8,
-	SIL_SYS = 9,
-};
-
-enum die_val {
-	DIE_UNUSED = 0,
-	DIE_OOPS = 1,
-};
-
-struct undef_hook {
-	struct list_head node;
-	u32 instr_mask;
-	u32 instr_val;
-	u64 pstate_mask;
-	u64 pstate_val;
-	int (*fn)(struct pt_regs *, u32);
-};
-
-struct sys64_hook {
-	unsigned int esr_mask;
-	unsigned int esr_val;
-	void (*handler)(unsigned int, struct pt_regs *);
-};
-
-struct timens_offset {
-	s64 sec;
-	u64 nsec;
-};
-
-enum vm_fault_reason {
-	VM_FAULT_OOM = 1,
-	VM_FAULT_SIGBUS = 2,
-	VM_FAULT_MAJOR = 4,
-	VM_FAULT_WRITE = 8,
-	VM_FAULT_HWPOISON = 16,
-	VM_FAULT_HWPOISON_LARGE = 32,
-	VM_FAULT_SIGSEGV = 64,
-	VM_FAULT_NOPAGE = 256,
-	VM_FAULT_LOCKED = 512,
-	VM_FAULT_RETRY = 1024,
-	VM_FAULT_FALLBACK = 2048,
-	VM_FAULT_DONE_COW = 4096,
-	VM_FAULT_NEEDDSYNC = 8192,
-	VM_FAULT_HINDEX_MASK = 983040,
-};
-
-struct vm_special_mapping {
-	const char *name;
-	struct page **pages;
-	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
-	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
-};
-
-struct timens_offsets {
-	struct timespec64 monotonic;
-	struct timespec64 boottime;
-};
-
-struct time_namespace {
-	struct kref kref;
-	struct user_namespace *user_ns;
-	struct ucounts *ucounts;
-	struct ns_common ns;
-	struct timens_offsets offsets;
-	struct page *vvar_page;
-	bool frozen_offsets;
-};
-
-struct arch_vdso_data {};
-
-struct vdso_timestamp {
-	u64 sec;
-	u64 nsec;
-};
-
-struct vdso_data {
-	u32 seq;
-	s32 clock_mode;
-	u64 cycle_last;
-	u64 mask;
-	u32 mult;
-	u32 shift;
-	union {
-		struct vdso_timestamp basetime[12];
-		struct timens_offset offset[12];
-	};
-	s32 tz_minuteswest;
-	s32 tz_dsttime;
-	u32 hrtimer_res;
-	u32 __unused;
-	struct arch_vdso_data arch_data;
-};
-
-enum vdso_abi {
-	VDSO_ABI_AA64 = 0,
-	VDSO_ABI_AA32 = 1,
-};
-
-enum vvar_pages {
-	VVAR_DATA_PAGE_OFFSET = 0,
-	VVAR_TIMENS_PAGE_OFFSET = 1,
-	VVAR_NR_PAGES = 2,
-};
-
-struct vdso_abi_info {
-	const char *name;
-	const char *vdso_code_start;
-	const char *vdso_code_end;
-	long unsigned int vdso_pages;
-	struct vm_special_mapping *dm;
-	struct vm_special_mapping *cm;
-};
-
-enum aarch32_map {
-	AA32_MAP_VECTORS = 0,
-	AA32_MAP_SIGPAGE = 1,
-	AA32_MAP_VVAR = 2,
-	AA32_MAP_VDSO = 3,
-};
-
-enum aarch64_map {
-	AA64_MAP_VVAR = 0,
-	AA64_MAP_VDSO = 1,
-};
-
-struct psci_operations {
-	u32 (*get_version)();
-	int (*cpu_suspend)(u32, long unsigned int);
-	int (*cpu_off)(u32);
-	int (*cpu_on)(long unsigned int, long unsigned int);
-	int (*migrate)(long unsigned int);
-	int (*affinity_info)(long unsigned int, long unsigned int);
-	int (*migrate_info_type)();
-};
-
-enum aarch64_insn_encoding_class {
-	AARCH64_INSN_CLS_UNKNOWN = 0,
-	AARCH64_INSN_CLS_DP_IMM = 1,
-	AARCH64_INSN_CLS_DP_REG = 2,
-	AARCH64_INSN_CLS_DP_FPSIMD = 3,
-	AARCH64_INSN_CLS_LDST = 4,
-	AARCH64_INSN_CLS_BR_SYS = 5,
-};
-
-enum aarch64_insn_hint_cr_op {
-	AARCH64_INSN_HINT_NOP = 0,
-	AARCH64_INSN_HINT_YIELD = 32,
-	AARCH64_INSN_HINT_WFE = 64,
-	AARCH64_INSN_HINT_WFI = 96,
-	AARCH64_INSN_HINT_SEV = 128,
-	AARCH64_INSN_HINT_SEVL = 160,
-	AARCH64_INSN_HINT_XPACLRI = 224,
-	AARCH64_INSN_HINT_PACIA_1716 = 256,
-	AARCH64_INSN_HINT_PACIB_1716 = 320,
-	AARCH64_INSN_HINT_AUTIA_1716 = 384,
-	AARCH64_INSN_HINT_AUTIB_1716 = 448,
-	AARCH64_INSN_HINT_PACIAZ = 768,
-	AARCH64_INSN_HINT_PACIASP = 800,
-	AARCH64_INSN_HINT_PACIBZ = 832,
-	AARCH64_INSN_HINT_PACIBSP = 864,
-	AARCH64_INSN_HINT_AUTIAZ = 896,
-	AARCH64_INSN_HINT_AUTIASP = 928,
-	AARCH64_INSN_HINT_AUTIBZ = 960,
-	AARCH64_INSN_HINT_AUTIBSP = 992,
-	AARCH64_INSN_HINT_ESB = 512,
-	AARCH64_INSN_HINT_PSB = 544,
-	AARCH64_INSN_HINT_TSB = 576,
-	AARCH64_INSN_HINT_CSDB = 640,
-	AARCH64_INSN_HINT_BTI = 1024,
-	AARCH64_INSN_HINT_BTIC = 1088,
-	AARCH64_INSN_HINT_BTIJ = 1152,
-	AARCH64_INSN_HINT_BTIJC = 1216,
-};
-
-enum aarch64_insn_imm_type {
-	AARCH64_INSN_IMM_ADR = 0,
-	AARCH64_INSN_IMM_26 = 1,
-	AARCH64_INSN_IMM_19 = 2,
-	AARCH64_INSN_IMM_16 = 3,
-	AARCH64_INSN_IMM_14 = 4,
-	AARCH64_INSN_IMM_12 = 5,
-	AARCH64_INSN_IMM_9 = 6,
-	AARCH64_INSN_IMM_7 = 7,
-	AARCH64_INSN_IMM_6 = 8,
-	AARCH64_INSN_IMM_S = 9,
-	AARCH64_INSN_IMM_R = 10,
-	AARCH64_INSN_IMM_N = 11,
-	AARCH64_INSN_IMM_MAX = 12,
-};
-
-enum aarch64_insn_register_type {
-	AARCH64_INSN_REGTYPE_RT = 0,
-	AARCH64_INSN_REGTYPE_RN = 1,
-	AARCH64_INSN_REGTYPE_RT2 = 2,
-	AARCH64_INSN_REGTYPE_RM = 3,
-	AARCH64_INSN_REGTYPE_RD = 4,
-	AARCH64_INSN_REGTYPE_RA = 5,
-	AARCH64_INSN_REGTYPE_RS = 6,
-};
-
-enum aarch64_insn_register {
-	AARCH64_INSN_REG_0 = 0,
-	AARCH64_INSN_REG_1 = 1,
-	AARCH64_INSN_REG_2 = 2,
-	AARCH64_INSN_REG_3 = 3,
-	AARCH64_INSN_REG_4 = 4,
-	AARCH64_INSN_REG_5 = 5,
-	AARCH64_INSN_REG_6 = 6,
-	AARCH64_INSN_REG_7 = 7,
-	AARCH64_INSN_REG_8 = 8,
-	AARCH64_INSN_REG_9 = 9,
-	AARCH64_INSN_REG_10 = 10,
-	AARCH64_INSN_REG_11 = 11,
-	AARCH64_INSN_REG_12 = 12,
-	AARCH64_INSN_REG_13 = 13,
-	AARCH64_INSN_REG_14 = 14,
-	AARCH64_INSN_REG_15 = 15,
-	AARCH64_INSN_REG_16 = 16,
-	AARCH64_INSN_REG_17 = 17,
-	AARCH64_INSN_REG_18 = 18,
-	AARCH64_INSN_REG_19 = 19,
-	AARCH64_INSN_REG_20 = 20,
-	AARCH64_INSN_REG_21 = 21,
-	AARCH64_INSN_REG_22 = 22,
-	AARCH64_INSN_REG_23 = 23,
-	AARCH64_INSN_REG_24 = 24,
-	AARCH64_INSN_REG_25 = 25,
-	AARCH64_INSN_REG_26 = 26,
-	AARCH64_INSN_REG_27 = 27,
-	AARCH64_INSN_REG_28 = 28,
-	AARCH64_INSN_REG_29 = 29,
-	AARCH64_INSN_REG_FP = 29,
-	AARCH64_INSN_REG_30 = 30,
-	AARCH64_INSN_REG_LR = 30,
-	AARCH64_INSN_REG_ZR = 31,
-	AARCH64_INSN_REG_SP = 31,
-};
-
-enum aarch64_insn_variant {
-	AARCH64_INSN_VARIANT_32BIT = 0,
-	AARCH64_INSN_VARIANT_64BIT = 1,
-};
-
-enum aarch64_insn_condition {
-	AARCH64_INSN_COND_EQ = 0,
-	AARCH64_INSN_COND_NE = 1,
-	AARCH64_INSN_COND_CS = 2,
-	AARCH64_INSN_COND_CC = 3,
-	AARCH64_INSN_COND_MI = 4,
-	AARCH64_INSN_COND_PL = 5,
-	AARCH64_INSN_COND_VS = 6,
-	AARCH64_INSN_COND_VC = 7,
-	AARCH64_INSN_COND_HI = 8,
-	AARCH64_INSN_COND_LS = 9,
-	AARCH64_INSN_COND_GE = 10,
-	AARCH64_INSN_COND_LT = 11,
-	AARCH64_INSN_COND_GT = 12,
-	AARCH64_INSN_COND_LE = 13,
-	AARCH64_INSN_COND_AL = 14,
-};
-
-enum aarch64_insn_branch_type {
-	AARCH64_INSN_BRANCH_NOLINK = 0,
-	AARCH64_INSN_BRANCH_LINK = 1,
-	AARCH64_INSN_BRANCH_RETURN = 2,
-	AARCH64_INSN_BRANCH_COMP_ZERO = 3,
-	AARCH64_INSN_BRANCH_COMP_NONZERO = 4,
-};
-
-enum aarch64_insn_size_type {
-	AARCH64_INSN_SIZE_8 = 0,
-	AARCH64_INSN_SIZE_16 = 1,
-	AARCH64_INSN_SIZE_32 = 2,
-	AARCH64_INSN_SIZE_64 = 3,
-};
-
-enum aarch64_insn_ldst_type {
-	AARCH64_INSN_LDST_LOAD_REG_OFFSET = 0,
-	AARCH64_INSN_LDST_STORE_REG_OFFSET = 1,
-	AARCH64_INSN_LDST_LOAD_PAIR_PRE_INDEX = 2,
-	AARCH64_INSN_LDST_STORE_PAIR_PRE_INDEX = 3,
-	AARCH64_INSN_LDST_LOAD_PAIR_POST_INDEX = 4,
-	AARCH64_INSN_LDST_STORE_PAIR_POST_INDEX = 5,
-	AARCH64_INSN_LDST_LOAD_EX = 6,
-	AARCH64_INSN_LDST_STORE_EX = 7,
-};
-
-enum aarch64_insn_adsb_type {
-	AARCH64_INSN_ADSB_ADD = 0,
-	AARCH64_INSN_ADSB_SUB = 1,
-	AARCH64_INSN_ADSB_ADD_SETFLAGS = 2,
-	AARCH64_INSN_ADSB_SUB_SETFLAGS = 3,
-};
-
-enum aarch64_insn_movewide_type {
-	AARCH64_INSN_MOVEWIDE_ZERO = 0,
-	AARCH64_INSN_MOVEWIDE_KEEP = 1,
-	AARCH64_INSN_MOVEWIDE_INVERSE = 2,
-};
-
-enum aarch64_insn_bitfield_type {
-	AARCH64_INSN_BITFIELD_MOVE = 0,
-	AARCH64_INSN_BITFIELD_MOVE_UNSIGNED = 1,
-	AARCH64_INSN_BITFIELD_MOVE_SIGNED = 2,
-};
-
-enum aarch64_insn_data1_type {
-	AARCH64_INSN_DATA1_REVERSE_16 = 0,
-	AARCH64_INSN_DATA1_REVERSE_32 = 1,
-	AARCH64_INSN_DATA1_REVERSE_64 = 2,
-};
-
-enum aarch64_insn_data2_type {
-	AARCH64_INSN_DATA2_UDIV = 0,
-	AARCH64_INSN_DATA2_SDIV = 1,
-	AARCH64_INSN_DATA2_LSLV = 2,
-	AARCH64_INSN_DATA2_LSRV = 3,
-	AARCH64_INSN_DATA2_ASRV = 4,
-	AARCH64_INSN_DATA2_RORV = 5,
-};
-
-enum aarch64_insn_data3_type {
-	AARCH64_INSN_DATA3_MADD = 0,
-	AARCH64_INSN_DATA3_MSUB = 1,
-};
-
-enum aarch64_insn_logic_type {
-	AARCH64_INSN_LOGIC_AND = 0,
-	AARCH64_INSN_LOGIC_BIC = 1,
-	AARCH64_INSN_LOGIC_ORR = 2,
-	AARCH64_INSN_LOGIC_ORN = 3,
-	AARCH64_INSN_LOGIC_EOR = 4,
-	AARCH64_INSN_LOGIC_EON = 5,
-	AARCH64_INSN_LOGIC_AND_SETFLAGS = 6,
-	AARCH64_INSN_LOGIC_BIC_SETFLAGS = 7,
-};
-
-enum aarch64_insn_prfm_type {
-	AARCH64_INSN_PRFM_TYPE_PLD = 0,
-	AARCH64_INSN_PRFM_TYPE_PLI = 1,
-	AARCH64_INSN_PRFM_TYPE_PST = 2,
-};
-
-enum aarch64_insn_prfm_target {
-	AARCH64_INSN_PRFM_TARGET_L1 = 0,
-	AARCH64_INSN_PRFM_TARGET_L2 = 1,
-	AARCH64_INSN_PRFM_TARGET_L3 = 2,
-};
-
-enum aarch64_insn_prfm_policy {
-	AARCH64_INSN_PRFM_POLICY_KEEP = 0,
-	AARCH64_INSN_PRFM_POLICY_STRM = 1,
-};
-
-enum aarch64_insn_adr_type {
-	AARCH64_INSN_ADR_TYPE_ADRP = 0,
-	AARCH64_INSN_ADR_TYPE_ADR = 1,
-};
-
-enum fixed_addresses {
-	FIX_HOLE = 0,
-	FIX_FDT_END = 1,
-	FIX_FDT = 1024,
-	FIX_EARLYCON_MEM_BASE = 1025,
-	FIX_TEXT_POKE0 = 1026,
-	FIX_ENTRY_TRAMP_DATA = 1027,
-	FIX_ENTRY_TRAMP_TEXT = 1028,
-	__end_of_permanent_fixed_addresses = 1029,
-	FIX_BTMAP_END = 1029,
-	FIX_BTMAP_BEGIN = 1476,
-	FIX_PTE = 1477,
-	FIX_PMD = 1478,
-	FIX_PUD = 1479,
-	FIX_PGD = 1480,
-	__end_of_fixed_addresses = 1481,
-};
-
-struct aarch64_insn_patch {
-	void **text_addrs;
-	u32 *new_insns;
-	int insn_cnt;
-	atomic_t cpu_count;
-};
-
-struct return_address_data {
-	unsigned int level;
-	void *addr;
-};
-
-struct kobj_attribute {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
-};
-
-enum {
-	CAP_HWCAP = 1,
-	CAP_COMPAT_HWCAP = 2,
-	CAP_COMPAT_HWCAP2 = 3,
-};
-
-struct secondary_data {
-	void *stack;
-	struct task_struct *task;
-	long int status;
-};
-
 struct device_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct device *, struct device_attribute *, char *);
 	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
 };
 
-struct __ftr_reg_entry {
-	u32 sys_id;
-	struct arm64_ftr_reg *reg;
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	long unsigned int properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct xarray __store;
+	long unsigned int __iter_idx;
 };
 
-typedef void kpti_remap_fn(int, int, phys_addr_t);
-
-typedef void ttbr_replace_func(phys_addr_t);
-
-struct alt_instr {
-	s32 orig_offset;
-	s32 alt_offset;
-	u16 cpufeature;
-	u8 orig_len;
-	u8 alt_len;
-};
-
-typedef void (*alternative_cb_t)(struct alt_instr *, __le32 *, __le32 *, int);
-
-struct alt_region {
-	struct alt_instr *begin;
-	struct alt_instr *end;
-};
-
-enum cache_type {
-	CACHE_TYPE_NOCACHE = 0,
-	CACHE_TYPE_INST = 1,
-	CACHE_TYPE_DATA = 2,
-	CACHE_TYPE_SEPARATE = 3,
-	CACHE_TYPE_UNIFIED = 4,
-};
-
-struct cacheinfo {
-	unsigned int id;
-	enum cache_type type;
-	unsigned int level;
-	unsigned int coherency_line_size;
-	unsigned int number_of_sets;
-	unsigned int ways_of_associativity;
-	unsigned int physical_line_partition;
-	unsigned int size;
-	cpumask_t shared_cpu_map;
-	unsigned int attributes;
-	void *fw_token;
-	bool disable_sysfs;
-	void *priv;
-};
-
-struct cpu_cacheinfo {
-	struct cacheinfo *info_list;
-	unsigned int num_levels;
-	unsigned int num_leaves;
-	bool cpu_map_populated;
-};
-
-struct irq_desc;
-
-typedef void (*irq_flow_handler_t)(struct irq_desc *);
-
-struct msi_desc;
-
-struct irq_common_data {
-	unsigned int state_use_accessors;
-	unsigned int node;
-	void *handler_data;
-	struct msi_desc *msi_desc;
-	cpumask_var_t affinity;
-	cpumask_var_t effective_affinity;
-	unsigned int ipi_offset;
-};
-
-struct irq_chip;
-
-struct irq_data {
-	u32 mask;
-	unsigned int irq;
-	long unsigned int hwirq;
-	struct irq_common_data *common;
-	struct irq_chip *chip;
-	struct irq_domain *domain;
-	struct irq_data *parent_data;
-	void *chip_data;
-};
-
-struct irqaction;
-
-struct irq_affinity_notify;
-
-struct irq_desc {
-	struct irq_common_data irq_common_data;
-	struct irq_data irq_data;
-	unsigned int *kstat_irqs;
-	irq_flow_handler_t handle_irq;
-	struct irqaction *action;
-	unsigned int status_use_accessors;
-	unsigned int core_internal_state__do_not_mess_with_it;
-	unsigned int depth;
-	unsigned int wake_depth;
-	unsigned int tot_count;
-	unsigned int irq_count;
-	long unsigned int last_unhandled;
-	unsigned int irqs_unhandled;
-	atomic_t threads_handled;
-	int threads_handled_last;
-	raw_spinlock_t lock;
-	struct cpumask *percpu_enabled;
-	const struct cpumask *percpu_affinity;
-	const struct cpumask *affinity_hint;
-	struct irq_affinity_notify *affinity_notify;
-	long unsigned int threads_oneshot;
-	atomic_t threads_active;
-	wait_queue_head_t wait_for_threads;
-	unsigned int nr_actions;
-	unsigned int no_suspend_depth;
-	unsigned int cond_suspend_depth;
-	unsigned int force_resume_depth;
-	struct proc_dir_entry *dir;
-	struct callback_head rcu;
-	struct kobject kobj;
-	struct mutex request_mutex;
-	int parent_irq;
-	struct module *owner;
-	const char *name;
+typedef struct {
+	u16 __softirq_pending;
+	u8 kvm_cpu_l1tf_flush_l1d;
+	unsigned int __nmi_count;
+	unsigned int apic_timer_irqs;
+	unsigned int irq_spurious_count;
+	unsigned int icr_read_retry_count;
+	unsigned int kvm_posted_intr_ipis;
+	unsigned int kvm_posted_intr_wakeup_ipis;
+	unsigned int kvm_posted_intr_nested_ipis;
+	unsigned int x86_platform_ipis;
+	unsigned int apic_perf_irqs;
+	unsigned int apic_irq_work_irqs;
+	unsigned int irq_resched_count;
+	unsigned int irq_call_count;
+	unsigned int irq_tlb_count;
+	unsigned int irq_thermal_count;
+	unsigned int irq_threshold_count;
+	unsigned int irq_deferred_error_count;
+	unsigned int irq_hv_callback_count;
+	unsigned int irq_hv_reenlightenment_count;
+	unsigned int hyperv_stimer0_count;
 	long: 64;
 	long: 64;
 	long: 64;
-};
-
-enum irq_gc_flags {
-	IRQ_GC_INIT_MASK_CACHE = 1,
-	IRQ_GC_INIT_NESTED_LOCK = 2,
-	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
-	IRQ_GC_NO_MASK = 8,
-	IRQ_GC_BE_IO = 16,
-};
-
-struct irq_chip_generic;
-
-struct irq_domain_chip_generic {
-	unsigned int irqs_per_chip;
-	unsigned int num_chips;
-	unsigned int irq_flags_to_clear;
-	unsigned int irq_flags_to_set;
-	enum irq_gc_flags gc_flags;
-	struct irq_chip_generic *gc[0];
-};
-
-struct acpi_subtable_header {
-	u8 type;
-	u8 length;
-};
-
-struct acpi_hmat_structure {
-	u16 type;
-	u16 reserved;
-	u32 length;
-};
-
-enum acpi_madt_type {
-	ACPI_MADT_TYPE_LOCAL_APIC = 0,
-	ACPI_MADT_TYPE_IO_APIC = 1,
-	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
-	ACPI_MADT_TYPE_NMI_SOURCE = 3,
-	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
-	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
-	ACPI_MADT_TYPE_IO_SAPIC = 6,
-	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
-	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
-	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
-	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
-	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
-	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
-	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
-	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
-	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
-	ACPI_MADT_TYPE_RESERVED = 16,
-};
-
-struct acpi_madt_generic_interrupt {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 cpu_interface_number;
-	u32 uid;
-	u32 flags;
-	u32 parking_version;
-	u32 performance_interrupt;
-	u64 parked_address;
-	u64 base_address;
-	u64 gicv_base_address;
-	u64 gich_base_address;
-	u32 vgic_interrupt;
-	u64 gicr_base_address;
-	u64 arm_mpidr;
-	u8 efficiency_class;
-	u8 reserved2[1];
-	u16 spe_interrupt;
-} __attribute__((packed));
+	long: 64;
+	long: 64;
+	long: 64;
+} irq_cpustat_t;
 
 enum irqreturn {
 	IRQ_NONE = 0,
@@ -15217,94 +13749,194 @@
 	IRQCHIP_STATE_LINE_LEVEL = 3,
 };
 
-union acpi_subtable_headers {
-	struct acpi_subtable_header common;
-	struct acpi_hmat_structure hmat;
+struct syscall_metadata {
+	const char *name;
+	int syscall_nr;
+	int nb_args;
+	const char **types;
+	const char **args;
+	struct list_head enter_fields;
+	struct trace_event_call *enter_event;
+	struct trace_event_call *exit_event;
 };
 
-enum {
-	IRQ_TYPE_NONE = 0,
-	IRQ_TYPE_EDGE_RISING = 1,
-	IRQ_TYPE_EDGE_FALLING = 2,
-	IRQ_TYPE_EDGE_BOTH = 3,
-	IRQ_TYPE_LEVEL_HIGH = 4,
-	IRQ_TYPE_LEVEL_LOW = 8,
-	IRQ_TYPE_LEVEL_MASK = 12,
-	IRQ_TYPE_SENSE_MASK = 15,
-	IRQ_TYPE_DEFAULT = 15,
-	IRQ_TYPE_PROBE = 16,
-	IRQ_LEVEL = 256,
-	IRQ_PER_CPU = 512,
-	IRQ_NOPROBE = 1024,
-	IRQ_NOREQUEST = 2048,
-	IRQ_NOAUTOEN = 4096,
-	IRQ_NO_BALANCING = 8192,
-	IRQ_MOVE_PCNTXT = 16384,
-	IRQ_NESTED_THREAD = 32768,
-	IRQ_NOTHREAD = 65536,
-	IRQ_PER_CPU_DEVID = 131072,
-	IRQ_IS_POLLED = 262144,
-	IRQ_DISABLE_UNLAZY = 524288,
-	IRQ_HIDDEN = 1048576,
+struct irqentry_state {
+	union {
+		bool exit_rcu;
+		bool lockdep;
+	};
 };
 
+typedef struct irqentry_state irqentry_state_t;
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	unsigned int node;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	long unsigned int hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	long unsigned int last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	cpumask_var_t pending_mask;
+	long unsigned int threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct x86_msi_addr_lo {
+	union {
+		struct {
+			u32 reserved_0: 2;
+			u32 dest_mode_logical: 1;
+			u32 redirect_hint: 1;
+			u32 reserved_1: 1;
+			u32 virt_destid_8_14: 7;
+			u32 destid_0_7: 8;
+			u32 base_address: 12;
+		};
+		struct {
+			u32 dmar_reserved_0: 2;
+			u32 dmar_index_15: 1;
+			u32 dmar_subhandle_valid: 1;
+			u32 dmar_format: 1;
+			u32 dmar_index_0_14: 15;
+			u32 dmar_base_address: 12;
+		};
+	};
+};
+
+typedef struct x86_msi_addr_lo arch_msi_msg_addr_lo_t;
+
+struct x86_msi_addr_hi {
+	u32 reserved: 8;
+	u32 destid_8_31: 24;
+};
+
+typedef struct x86_msi_addr_hi arch_msi_msg_addr_hi_t;
+
+struct x86_msi_data {
+	union {
+		struct {
+			u32 vector: 8;
+			u32 delivery_mode: 3;
+			u32 dest_mode_logical: 1;
+			u32 reserved: 2;
+			u32 active_low: 1;
+			u32 is_level: 1;
+		};
+		u32 dmar_subhandle;
+	};
+};
+
+typedef struct x86_msi_data arch_msi_msg_data_t;
+
 struct msi_msg {
-	u32 address_lo;
-	u32 address_hi;
-	u32 data;
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
 };
 
-struct platform_msi_priv_data;
-
-struct platform_msi_desc {
-	struct platform_msi_priv_data *msi_priv_data;
-	u16 msi_index;
-};
-
-struct fsl_mc_msi_desc {
-	u16 msi_index;
-};
-
-struct ti_sci_inta_msi_desc {
-	u16 dev_index;
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
 };
 
 struct msi_desc {
-	struct list_head list;
 	unsigned int irq;
 	unsigned int nvec_used;
 	struct device *dev;
 	struct msi_msg msg;
 	struct irq_affinity_desc *affinity;
 	const void *iommu_cookie;
+	struct device_attribute *sysfs_attrs;
 	void (*write_msi_msg)(struct msi_desc *, void *);
 	void *write_msi_msg_data;
-	union {
-		struct {
-			u32 masked;
-			struct {
-				u8 is_msix: 1;
-				u8 multiple: 3;
-				u8 multi_cap: 3;
-				u8 maskbit: 1;
-				u8 is_64: 1;
-				u8 is_virtual: 1;
-				u16 entry_nr;
-				unsigned int default_irq;
-			} msi_attrib;
-			union {
-				u8 mask_pos;
-				void *mask_base;
-			};
-		};
-		struct platform_msi_desc platform;
-		struct fsl_mc_msi_desc fsl_mc;
-		struct ti_sci_inta_msi_desc inta;
-	};
+	u16 msi_index;
+	struct pci_msi_desc pci;
 };
 
 struct irq_chip {
-	struct device *parent_device;
 	const char *name;
 	unsigned int (*irq_startup)(struct irq_data *);
 	void (*irq_shutdown)(struct irq_data *);
@@ -15321,8 +13953,6 @@
 	int (*irq_set_wake)(struct irq_data *, unsigned int);
 	void (*irq_bus_lock)(struct irq_data *);
 	void (*irq_bus_sync_unlock)(struct irq_data *);
-	void (*irq_cpu_online)(struct irq_data *);
-	void (*irq_cpu_offline)(struct irq_data *);
 	void (*irq_suspend)(struct irq_data *);
 	void (*irq_resume)(struct irq_data *);
 	void (*irq_pm_shutdown)(struct irq_data *);
@@ -15384,559 +14014,321 @@
 	struct irq_chip_type chip_types[0];
 };
 
-enum vcpu_sysreg {
-	__INVALID_SYSREG__ = 0,
-	MPIDR_EL1 = 1,
-	CSSELR_EL1 = 2,
-	SCTLR_EL1 = 3,
-	ACTLR_EL1 = 4,
-	CPACR_EL1 = 5,
-	ZCR_EL1 = 6,
-	TTBR0_EL1 = 7,
-	TTBR1_EL1 = 8,
-	TCR_EL1 = 9,
-	ESR_EL1 = 10,
-	AFSR0_EL1 = 11,
-	AFSR1_EL1 = 12,
-	FAR_EL1 = 13,
-	MAIR_EL1 = 14,
-	VBAR_EL1 = 15,
-	CONTEXTIDR_EL1 = 16,
-	TPIDR_EL0 = 17,
-	TPIDRRO_EL0 = 18,
-	TPIDR_EL1 = 19,
-	AMAIR_EL1 = 20,
-	CNTKCTL_EL1 = 21,
-	PAR_EL1 = 22,
-	MDSCR_EL1 = 23,
-	MDCCINT_EL1 = 24,
-	DISR_EL1 = 25,
-	PMCR_EL0 = 26,
-	PMSELR_EL0 = 27,
-	PMEVCNTR0_EL0 = 28,
-	PMEVCNTR30_EL0 = 58,
-	PMCCNTR_EL0 = 59,
-	PMEVTYPER0_EL0 = 60,
-	PMEVTYPER30_EL0 = 90,
-	PMCCFILTR_EL0 = 91,
-	PMCNTENSET_EL0 = 92,
-	PMINTENSET_EL1 = 93,
-	PMOVSSET_EL0 = 94,
-	PMSWINC_EL0 = 95,
-	PMUSERENR_EL0 = 96,
-	APIAKEYLO_EL1 = 97,
-	APIAKEYHI_EL1 = 98,
-	APIBKEYLO_EL1 = 99,
-	APIBKEYHI_EL1 = 100,
-	APDAKEYLO_EL1 = 101,
-	APDAKEYHI_EL1 = 102,
-	APDBKEYLO_EL1 = 103,
-	APDBKEYHI_EL1 = 104,
-	APGAKEYLO_EL1 = 105,
-	APGAKEYHI_EL1 = 106,
-	ELR_EL1 = 107,
-	SP_EL1 = 108,
-	SPSR_EL1 = 109,
-	CNTVOFF_EL2 = 110,
-	CNTV_CVAL_EL0 = 111,
-	CNTV_CTL_EL0 = 112,
-	CNTP_CVAL_EL0 = 113,
-	CNTP_CTL_EL0 = 114,
-	DACR32_EL2 = 115,
-	IFSR32_EL2 = 116,
-	FPEXC32_EL2 = 117,
-	DBGVCR32_EL2 = 118,
-	NR_SYS_REGS = 119,
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
 };
 
-enum kvm_bus {
-	KVM_MMIO_BUS = 0,
-	KVM_PIO_BUS = 1,
-	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
-	KVM_FAST_MMIO_BUS = 3,
-	KVM_NR_BUSES = 4,
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
 };
 
-struct trace_event_raw_ipi_raise {
-	struct trace_entry ent;
-	u32 __data_loc_target_cpus;
-	const char *reason;
-	char __data[0];
+struct alt_instr {
+	s32 instr_offset;
+	s32 repl_offset;
+	u16 cpuid;
+	u8 instrlen;
+	u8 replacementlen;
 };
 
-struct trace_event_raw_ipi_handler {
-	struct trace_entry ent;
-	const char *reason;
-	char __data[0];
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
 };
 
-struct trace_event_data_offsets_ipi_raise {
-	u32 target_cpus;
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_WRITE = 8,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_HINDEX_MASK = 983040,
 };
 
-struct trace_event_data_offsets_ipi_handler {};
-
-typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
-
-typedef void (*btf_trace_ipi_entry)(void *, const char *);
-
-typedef void (*btf_trace_ipi_exit)(void *, const char *);
-
-enum ipi_msg_type {
-	IPI_RESCHEDULE = 0,
-	IPI_CALL_FUNC = 1,
-	IPI_CPU_STOP = 2,
-	IPI_CPU_CRASH_STOP = 3,
-	IPI_TIMER = 4,
-	IPI_IRQ_WORK = 5,
-	IPI_WAKEUP = 6,
-	NR_IPI = 7,
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
 };
 
-struct cpu_topology {
-	int thread_id;
-	int core_id;
-	int package_id;
-	int llc_id;
-	cpumask_t thread_sibling;
-	cpumask_t core_sibling;
-	cpumask_t llc_sibling;
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
 };
 
-enum cpufreq_table_sorting {
-	CPUFREQ_TABLE_UNSORTED = 0,
-	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
-	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+struct time_namespace {
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
 };
 
-struct cpufreq_cpuinfo {
-	unsigned int max_freq;
-	unsigned int min_freq;
-	unsigned int transition_latency;
-};
-
-struct clk;
-
-struct cpufreq_governor;
-
-struct cpufreq_frequency_table;
-
-struct cpufreq_stats;
-
-struct thermal_cooling_device;
-
-struct cpufreq_policy {
-	cpumask_var_t cpus;
-	cpumask_var_t related_cpus;
-	cpumask_var_t real_cpus;
-	unsigned int shared_type;
-	unsigned int cpu;
-	struct clk *clk;
-	struct cpufreq_cpuinfo cpuinfo;
-	unsigned int min;
-	unsigned int max;
-	unsigned int cur;
-	unsigned int restore_freq;
-	unsigned int suspend_freq;
-	unsigned int policy;
-	unsigned int last_policy;
-	struct cpufreq_governor *governor;
-	void *governor_data;
-	char last_governor[16];
-	struct work_struct update;
-	struct freq_constraints constraints;
-	struct freq_qos_request *min_freq_req;
-	struct freq_qos_request *max_freq_req;
-	struct cpufreq_frequency_table *freq_table;
-	enum cpufreq_table_sorting freq_table_sorted;
-	struct list_head policy_list;
-	struct kobject kobj;
-	struct completion kobj_unregister;
-	struct rw_semaphore rwsem;
-	bool fast_switch_possible;
-	bool fast_switch_enabled;
-	bool strict_target;
-	unsigned int transition_delay_us;
-	bool dvfs_possible_from_any_cpu;
-	unsigned int cached_target_freq;
-	unsigned int cached_resolved_idx;
-	bool transition_ongoing;
-	spinlock_t transition_lock;
-	wait_queue_head_t transition_wait;
-	struct task_struct *transition_task;
-	struct cpufreq_stats *stats;
-	void *driver_data;
-	struct thermal_cooling_device *cdev;
-	struct notifier_block nb_min;
-	struct notifier_block nb_max;
-};
-
-struct cpufreq_governor {
-	char name[16];
-	int (*init)(struct cpufreq_policy *);
-	void (*exit)(struct cpufreq_policy *);
-	int (*start)(struct cpufreq_policy *);
-	void (*stop)(struct cpufreq_policy *);
-	void (*limits)(struct cpufreq_policy *);
-	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
-	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
-	struct list_head governor_list;
-	struct module *owner;
+struct pvclock_vcpu_time_info {
+	u32 version;
+	u32 pad0;
+	u64 tsc_timestamp;
+	u64 system_time;
+	u32 tsc_to_system_mul;
+	s8 tsc_shift;
 	u8 flags;
+	u8 pad[2];
 };
 
-struct cpufreq_frequency_table {
-	unsigned int flags;
-	unsigned int driver_data;
-	unsigned int frequency;
+struct pvclock_vsyscall_time_info {
+	struct pvclock_vcpu_time_info pvti;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-enum arm_smccc_conduit {
-	SMCCC_CONDUIT_NONE = 0,
-	SMCCC_CONDUIT_SMC = 1,
-	SMCCC_CONDUIT_HVC = 2,
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_TSC = 1,
+	VDSO_CLOCKMODE_PVCLOCK = 2,
+	VDSO_CLOCKMODE_HVCLOCK = 3,
+	VDSO_CLOCKMODE_MAX = 4,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
 };
 
-struct arm_smccc_res {
-	long unsigned int a0;
-	long unsigned int a1;
-	long unsigned int a2;
-	long unsigned int a3;
+struct arch_vdso_data {};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
 };
 
-enum mitigation_state {
-	SPECTRE_UNAFFECTED = 0,
-	SPECTRE_MITIGATED = 1,
-	SPECTRE_VULNERABLE = 2,
-};
-
-enum spectre_v4_policy {
-	SPECTRE_V4_POLICY_MITIGATION_DYNAMIC = 0,
-	SPECTRE_V4_POLICY_MITIGATION_ENABLED = 1,
-	SPECTRE_V4_POLICY_MITIGATION_DISABLED = 2,
-};
-
-struct spectre_v4_param {
-	const char *str;
-	enum spectre_v4_policy policy;
-};
-
-typedef u32 compat_size_t;
-
-struct compat_statfs64;
-
-typedef s32 compat_clock_t;
-
-typedef s32 compat_pid_t;
-
-typedef s32 compat_timer_t;
-
-typedef s32 compat_int_t;
-
-typedef u64 compat_u64;
-
-typedef u32 __compat_uid32_t;
-
-typedef u32 compat_sigset_word;
-
-struct compat_sigaltstack {
-	compat_uptr_t ss_sp;
-	int ss_flags;
-	compat_size_t ss_size;
-};
-
-typedef struct compat_sigaltstack compat_stack_t;
-
-typedef struct {
-	compat_sigset_word sig[2];
-} compat_sigset_t;
-
-union compat_sigval {
-	compat_int_t sival_int;
-	compat_uptr_t sival_ptr;
-};
-
-typedef union compat_sigval compat_sigval_t;
-
-struct compat_siginfo {
-	int si_signo;
-	int si_errno;
-	int si_code;
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
 	union {
-		int _pad[29];
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-		} _kill;
-		struct {
-			compat_timer_t _tid;
-			int _overrun;
-			compat_sigval_t _sigval;
-		} _timer;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			compat_sigval_t _sigval;
-		} _rt;
-		struct {
-			compat_pid_t _pid;
-			__compat_uid32_t _uid;
-			int _status;
-			compat_clock_t _utime;
-			compat_clock_t _stime;
-		} _sigchld;
-		struct {
-			compat_uptr_t _addr;
-			union {
-				short int _addr_lsb;
-				struct {
-					char _dummy_bnd[4];
-					compat_uptr_t _lower;
-					compat_uptr_t _upper;
-				} _addr_bnd;
-				struct {
-					char _dummy_pkey[4];
-					u32 _pkey;
-				} _addr_pkey;
-			};
-		} _sigfault;
-		struct {
-			compat_long_t _band;
-			int _fd;
-		} _sigpoll;
-		struct {
-			compat_uptr_t _call_addr;
-			int _syscall;
-			unsigned int _arch;
-		} _sigsys;
-	} _sifields;
-};
-
-struct compat_sigcontext {
-	compat_ulong_t trap_no;
-	compat_ulong_t error_code;
-	compat_ulong_t oldmask;
-	compat_ulong_t arm_r0;
-	compat_ulong_t arm_r1;
-	compat_ulong_t arm_r2;
-	compat_ulong_t arm_r3;
-	compat_ulong_t arm_r4;
-	compat_ulong_t arm_r5;
-	compat_ulong_t arm_r6;
-	compat_ulong_t arm_r7;
-	compat_ulong_t arm_r8;
-	compat_ulong_t arm_r9;
-	compat_ulong_t arm_r10;
-	compat_ulong_t arm_fp;
-	compat_ulong_t arm_ip;
-	compat_ulong_t arm_sp;
-	compat_ulong_t arm_lr;
-	compat_ulong_t arm_pc;
-	compat_ulong_t arm_cpsr;
-	compat_ulong_t fault_address;
-};
-
-struct compat_ucontext {
-	compat_ulong_t uc_flags;
-	compat_uptr_t uc_link;
-	compat_stack_t uc_stack;
-	struct compat_sigcontext uc_mcontext;
-	compat_sigset_t uc_sigmask;
-	int __unused[30];
-	compat_ulong_t uc_regspace[128];
-};
-
-struct compat_sigframe {
-	struct compat_ucontext uc;
-	compat_ulong_t retcode[2];
-};
-
-struct compat_rt_sigframe {
-	struct compat_siginfo info;
-	struct compat_sigframe sig;
-};
-
-struct compat_user_vfp {
-	compat_u64 fpregs[32];
-	compat_ulong_t fpscr;
-};
-
-struct compat_user_vfp_exc {
-	compat_ulong_t fpexc;
-	compat_ulong_t fpinst;
-	compat_ulong_t fpinst2;
-};
-
-struct compat_vfp_sigframe {
-	compat_ulong_t magic;
-	compat_ulong_t size;
-	struct compat_user_vfp ufp;
-	struct compat_user_vfp_exc ufp_exc;
-};
-
-struct compat_aux_sigframe {
-	struct compat_vfp_sigframe vfp;
-	long unsigned int end_magic;
-};
-
-union __fpsimd_vreg {
-	__int128 unsigned raw;
-	struct {
-		u64 lo;
-		u64 hi;
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
 	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
 };
 
-struct dyn_arch_ftrace {};
-
-struct dyn_ftrace {
-	long unsigned int ip;
-	long unsigned int flags;
-	struct dyn_arch_ftrace arch;
+struct ms_hyperv_tsc_page {
+	volatile u32 tsc_sequence;
+	u32 reserved1;
+	volatile u64 tsc_scale;
+	volatile s64 tsc_offset;
 };
 
 enum {
-	FTRACE_UPDATE_CALLS = 1,
-	FTRACE_DISABLE_CALLS = 2,
-	FTRACE_UPDATE_TRACE_FUNC = 4,
-	FTRACE_START_FUNC_RET = 8,
-	FTRACE_STOP_FUNC_RET = 16,
-	FTRACE_MAY_SLEEP = 32,
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
 };
 
-typedef __u64 Elf64_Off;
-
-typedef __s64 Elf64_Sxword;
-
-struct elf64_rela {
-	Elf64_Addr r_offset;
-	Elf64_Xword r_info;
-	Elf64_Sxword r_addend;
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
 };
 
-typedef struct elf64_rela Elf64_Rela;
-
-struct elf64_hdr {
-	unsigned char e_ident[16];
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;
-	Elf64_Off e_phoff;
-	Elf64_Off e_shoff;
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = 4294967295,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 23,
 };
 
-typedef struct elf64_hdr Elf64_Ehdr;
-
-struct elf64_shdr {
-	Elf64_Word sh_name;
-	Elf64_Word sh_type;
-	Elf64_Xword sh_flags;
-	Elf64_Addr sh_addr;
-	Elf64_Off sh_offset;
-	Elf64_Xword sh_size;
-	Elf64_Word sh_link;
-	Elf64_Word sh_info;
-	Elf64_Xword sh_addralign;
-	Elf64_Xword sh_entsize;
+enum psi_task_count {
+	NR_IOWAIT = 0,
+	NR_MEMSTALL = 1,
+	NR_RUNNING = 2,
+	NR_ONCPU = 3,
+	NR_MEMSTALL_RUNNING = 4,
+	NR_PSI_TASK_COUNTS = 5,
 };
 
-typedef struct elf64_shdr Elf64_Shdr;
-
-enum aarch64_reloc_op {
-	RELOC_OP_NONE = 0,
-	RELOC_OP_ABS = 1,
-	RELOC_OP_PREL = 2,
-	RELOC_OP_PAGE = 3,
+enum psi_states {
+	PSI_IO_SOME = 0,
+	PSI_IO_FULL = 1,
+	PSI_MEM_SOME = 2,
+	PSI_MEM_FULL = 3,
+	PSI_CPU_SOME = 4,
+	PSI_CPU_FULL = 5,
+	PSI_NONIDLE = 6,
+	NR_PSI_STATES = 7,
 };
 
-enum aarch64_insn_movw_imm_type {
-	AARCH64_INSN_IMM_MOVNZ = 0,
-	AARCH64_INSN_IMM_MOVKZ = 1,
+enum psi_aggregators {
+	PSI_AVGS = 0,
+	PSI_POLL = 1,
+	NR_PSI_AGGREGATORS = 2,
 };
 
-enum perf_sample_regs_abi {
-	PERF_SAMPLE_REGS_ABI_NONE = 0,
-	PERF_SAMPLE_REGS_ABI_32 = 1,
-	PERF_SAMPLE_REGS_ABI_64 = 2,
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	devices_cgrp_id = 5,
+	freezer_cgrp_id = 6,
+	net_cls_cgrp_id = 7,
+	perf_event_cgrp_id = 8,
+	net_prio_cgrp_id = 9,
+	hugetlb_cgrp_id = 10,
+	pids_cgrp_id = 11,
+	rdma_cgrp_id = 12,
+	misc_cgrp_id = 13,
+	CGROUP_SUBSYS_COUNT = 14,
 };
 
-enum perf_event_arm_regs {
-	PERF_REG_ARM64_X0 = 0,
-	PERF_REG_ARM64_X1 = 1,
-	PERF_REG_ARM64_X2 = 2,
-	PERF_REG_ARM64_X3 = 3,
-	PERF_REG_ARM64_X4 = 4,
-	PERF_REG_ARM64_X5 = 5,
-	PERF_REG_ARM64_X6 = 6,
-	PERF_REG_ARM64_X7 = 7,
-	PERF_REG_ARM64_X8 = 8,
-	PERF_REG_ARM64_X9 = 9,
-	PERF_REG_ARM64_X10 = 10,
-	PERF_REG_ARM64_X11 = 11,
-	PERF_REG_ARM64_X12 = 12,
-	PERF_REG_ARM64_X13 = 13,
-	PERF_REG_ARM64_X14 = 14,
-	PERF_REG_ARM64_X15 = 15,
-	PERF_REG_ARM64_X16 = 16,
-	PERF_REG_ARM64_X17 = 17,
-	PERF_REG_ARM64_X18 = 18,
-	PERF_REG_ARM64_X19 = 19,
-	PERF_REG_ARM64_X20 = 20,
-	PERF_REG_ARM64_X21 = 21,
-	PERF_REG_ARM64_X22 = 22,
-	PERF_REG_ARM64_X23 = 23,
-	PERF_REG_ARM64_X24 = 24,
-	PERF_REG_ARM64_X25 = 25,
-	PERF_REG_ARM64_X26 = 26,
-	PERF_REG_ARM64_X27 = 27,
-	PERF_REG_ARM64_X28 = 28,
-	PERF_REG_ARM64_X29 = 29,
-	PERF_REG_ARM64_LR = 30,
-	PERF_REG_ARM64_SP = 31,
-	PERF_REG_ARM64_PC = 32,
-	PERF_REG_ARM64_MAX = 33,
+struct vdso_exception_table_entry {
+	int insn;
+	int fixup;
 };
 
-struct perf_guest_info_callbacks {
-	int (*is_in_guest)();
-	int (*is_user_mode)();
-	long unsigned int (*get_guest_ip)();
-	void (*handle_intel_pt_intr)();
+struct cpuinfo_x86 {
+	__u8 x86;
+	__u8 x86_vendor;
+	__u8 x86_model;
+	__u8 x86_stepping;
+	int x86_tlbsize;
+	__u32 vmx_capability[3];
+	__u8 x86_virt_bits;
+	__u8 x86_phys_bits;
+	__u8 x86_coreid_bits;
+	__u8 cu_id;
+	__u32 extended_cpuid_level;
+	int cpuid_level;
+	union {
+		__u32 x86_capability[21];
+		long unsigned int x86_capability_alignment;
+	};
+	char x86_vendor_id[16];
+	char x86_model_id[64];
+	unsigned int x86_cache_size;
+	int x86_cache_alignment;
+	int x86_cache_max_rmid;
+	int x86_cache_occ_scale;
+	int x86_cache_mbm_width_offset;
+	int x86_power;
+	long unsigned int loops_per_jiffy;
+	u64 ppin;
+	u16 x86_max_cores;
+	u16 apicid;
+	u16 initial_apicid;
+	u16 x86_clflush_size;
+	u16 booted_cores;
+	u16 phys_proc_id;
+	u16 logical_proc_id;
+	u16 cpu_core_id;
+	u16 cpu_die_id;
+	u16 logical_die_id;
+	u16 cpu_index;
+	bool smt_active;
+	u32 microcode;
+	u8 x86_cache_bits;
+	unsigned int initialized: 1;
 };
 
-struct perf_callchain_entry_ctx {
-	struct perf_callchain_entry *entry;
-	u32 max_stack;
-	u32 nr;
-	short int contexts;
-	bool contexts_maxed;
+enum syscall_work_bit {
+	SYSCALL_WORK_BIT_SECCOMP = 0,
+	SYSCALL_WORK_BIT_SYSCALL_TRACEPOINT = 1,
+	SYSCALL_WORK_BIT_SYSCALL_TRACE = 2,
+	SYSCALL_WORK_BIT_SYSCALL_EMU = 3,
+	SYSCALL_WORK_BIT_SYSCALL_AUDIT = 4,
+	SYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH = 5,
+	SYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP = 6,
 };
 
-struct frame_tail {
-	struct frame_tail *fp;
-	long unsigned int lr;
+enum x86_pf_error_code {
+	X86_PF_PROT = 1,
+	X86_PF_WRITE = 2,
+	X86_PF_USER = 4,
+	X86_PF_RSVD = 8,
+	X86_PF_INSTR = 16,
+	X86_PF_PK = 32,
+	X86_PF_SGX = 32768,
 };
 
-struct compat_frame_tail {
-	compat_uptr_t fp;
-	u32 sp;
-	u32 lr;
+struct trace_event_raw_emulate_vsyscall {
+	struct trace_entry ent;
+	int nr;
+	char __data[0];
 };
 
-struct platform_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
+struct trace_event_data_offsets_emulate_vsyscall {};
+
+typedef void (*btf_trace_emulate_vsyscall)(void *, int);
+
+enum {
+	EMULATE = 0,
+	XONLY = 1,
+	NONE = 2,
 };
 
-struct pdev_archdata {};
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
 
 enum perf_hw_id {
 	PERF_COUNT_HW_CPU_CYCLES = 0,
@@ -15976,6 +14368,58 @@
 	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
 };
 
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_MAX = 262144,
+};
+
 struct perf_event_mmap_page {
 	__u32 version;
 	__u32 compat_version;
@@ -16016,407 +14460,1543 @@
 	__u64 aux_size;
 };
 
+struct pv_info {
+	u16 extra_user_64bit_cs;
+	const char *name;
+};
+
+typedef void (*smp_call_func_t)(void *);
+
+enum apic_delivery_modes {
+	APIC_DELIVERY_MODE_FIXED = 0,
+	APIC_DELIVERY_MODE_LOWESTPRIO = 1,
+	APIC_DELIVERY_MODE_SMI = 2,
+	APIC_DELIVERY_MODE_NMI = 4,
+	APIC_DELIVERY_MODE_INIT = 5,
+	APIC_DELIVERY_MODE_EXTINT = 7,
+};
+
+struct physid_mask {
+	long unsigned int mask[512];
+};
+
+typedef struct physid_mask physid_mask_t;
+
+struct x86_pmu_capability {
+	int version;
+	int num_counters_gp;
+	int num_counters_fixed;
+	int bit_width_gp;
+	int bit_width_fixed;
+	unsigned int events_mask;
+	int events_mask_len;
+};
+
+struct debug_store {
+	u64 bts_buffer_base;
+	u64 bts_index;
+	u64 bts_absolute_maximum;
+	u64 bts_interrupt_threshold;
+	u64 pebs_buffer_base;
+	u64 pebs_index;
+	u64 pebs_absolute_maximum;
+	u64 pebs_interrupt_threshold;
+	u64 pebs_event_reset[48];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum stack_type {
+	STACK_TYPE_UNKNOWN = 0,
+	STACK_TYPE_TASK = 1,
+	STACK_TYPE_IRQ = 2,
+	STACK_TYPE_SOFTIRQ = 3,
+	STACK_TYPE_ENTRY = 4,
+	STACK_TYPE_EXCEPTION = 5,
+	STACK_TYPE_EXCEPTION_LAST = 10,
+};
+
+struct stack_info {
+	enum stack_type type;
+	long unsigned int *begin;
+	long unsigned int *end;
+	long unsigned int *next_sp;
+};
+
+struct stack_frame {
+	struct stack_frame *next_frame;
+	long unsigned int return_address;
+};
+
+struct stack_frame_ia32 {
+	u32 next_frame;
+	u32 return_address;
+};
+
+struct perf_guest_switch_msr {
+	unsigned int msr;
+	u64 host;
+	u64 guest;
+};
+
+enum perf_event_x86_regs {
+	PERF_REG_X86_AX = 0,
+	PERF_REG_X86_BX = 1,
+	PERF_REG_X86_CX = 2,
+	PERF_REG_X86_DX = 3,
+	PERF_REG_X86_SI = 4,
+	PERF_REG_X86_DI = 5,
+	PERF_REG_X86_BP = 6,
+	PERF_REG_X86_SP = 7,
+	PERF_REG_X86_IP = 8,
+	PERF_REG_X86_FLAGS = 9,
+	PERF_REG_X86_CS = 10,
+	PERF_REG_X86_SS = 11,
+	PERF_REG_X86_DS = 12,
+	PERF_REG_X86_ES = 13,
+	PERF_REG_X86_FS = 14,
+	PERF_REG_X86_GS = 15,
+	PERF_REG_X86_R8 = 16,
+	PERF_REG_X86_R9 = 17,
+	PERF_REG_X86_R10 = 18,
+	PERF_REG_X86_R11 = 19,
+	PERF_REG_X86_R12 = 20,
+	PERF_REG_X86_R13 = 21,
+	PERF_REG_X86_R14 = 22,
+	PERF_REG_X86_R15 = 23,
+	PERF_REG_X86_32_MAX = 16,
+	PERF_REG_X86_64_MAX = 24,
+	PERF_REG_X86_XMM0 = 32,
+	PERF_REG_X86_XMM1 = 34,
+	PERF_REG_X86_XMM2 = 36,
+	PERF_REG_X86_XMM3 = 38,
+	PERF_REG_X86_XMM4 = 40,
+	PERF_REG_X86_XMM5 = 42,
+	PERF_REG_X86_XMM6 = 44,
+	PERF_REG_X86_XMM7 = 46,
+	PERF_REG_X86_XMM8 = 48,
+	PERF_REG_X86_XMM9 = 50,
+	PERF_REG_X86_XMM10 = 52,
+	PERF_REG_X86_XMM11 = 54,
+	PERF_REG_X86_XMM12 = 56,
+	PERF_REG_X86_XMM13 = 58,
+	PERF_REG_X86_XMM14 = 60,
+	PERF_REG_X86_XMM15 = 62,
+	PERF_REG_X86_XMM_MAX = 64,
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short int contexts;
+	bool contexts_maxed;
+};
+
 struct perf_pmu_events_attr {
 	struct device_attribute attr;
 	u64 id;
 	const char *event_str;
 };
 
-struct mfd_cell;
-
-struct platform_device {
-	const char *name;
-	int id;
-	bool id_auto;
-	struct device dev;
-	u64 platform_dma_mask;
-	struct device_dma_parameters dma_parms;
-	u32 num_resources;
-	struct resource *resource;
-	const struct platform_device_id *id_entry;
-	char *driver_override;
-	struct mfd_cell *mfd_cell;
-	struct pdev_archdata archdata;
+struct perf_pmu_events_ht_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str_ht;
+	const char *event_str_noht;
 };
 
-struct platform_driver {
-	int (*probe)(struct platform_device *);
-	int (*remove)(struct platform_device *);
-	void (*shutdown)(struct platform_device *);
-	int (*suspend)(struct platform_device *, pm_message_t);
-	int (*resume)(struct platform_device *);
-	struct device_driver driver;
-	const struct platform_device_id *id_table;
-	bool prevent_deferred_probe;
+struct perf_pmu_events_hybrid_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+	u64 pmu_type;
 };
 
-struct arm_pmu;
-
-struct pmu_hw_events {
-	struct perf_event *events[32];
-	long unsigned int used_mask[1];
-	raw_spinlock_t pmu_lock;
-	struct arm_pmu *percpu_pmu;
-	int irq;
-};
-
-struct arm_pmu {
-	struct pmu pmu;
-	cpumask_t supported_cpus;
+struct apic {
+	void (*eoi_write)(u32, u32);
+	void (*native_eoi_write)(u32, u32);
+	void (*write)(u32, u32);
+	u32 (*read)(u32);
+	void (*wait_icr_idle)();
+	u32 (*safe_wait_icr_idle)();
+	void (*send_IPI)(int, int);
+	void (*send_IPI_mask)(const struct cpumask *, int);
+	void (*send_IPI_mask_allbutself)(const struct cpumask *, int);
+	void (*send_IPI_allbutself)(int);
+	void (*send_IPI_all)(int);
+	void (*send_IPI_self)(int);
+	u32 disable_esr;
+	enum apic_delivery_modes delivery_mode;
+	bool dest_mode_logical;
+	u32 (*calc_dest_apicid)(unsigned int);
+	u64 (*icr_read)();
+	void (*icr_write)(u32, u32);
+	int (*probe)();
+	int (*acpi_madt_oem_check)(char *, char *);
+	int (*apic_id_valid)(u32);
+	int (*apic_id_registered)();
+	bool (*check_apicid_used)(physid_mask_t *, int);
+	void (*init_apic_ldr)();
+	void (*ioapic_phys_id_map)(physid_mask_t *, physid_mask_t *);
+	void (*setup_apic_routing)();
+	int (*cpu_present_to_apicid)(int);
+	void (*apicid_to_cpu_present)(int, physid_mask_t *);
+	int (*check_phys_apicid_present)(int);
+	int (*phys_pkg_id)(int, int);
+	u32 (*get_apic_id)(long unsigned int);
+	u32 (*set_apic_id)(unsigned int);
+	int (*wakeup_secondary_cpu)(int, long unsigned int);
+	int (*wakeup_secondary_cpu_64)(int, long unsigned int);
+	void (*inquire_remote_apic)(int);
 	char *name;
-	int pmuver;
-	irqreturn_t (*handle_irq)(struct arm_pmu *);
+};
+
+enum {
+	NMI_LOCAL = 0,
+	NMI_UNKNOWN = 1,
+	NMI_SERR = 2,
+	NMI_IO_CHECK = 3,
+	NMI_MAX = 4,
+};
+
+typedef int (*nmi_handler_t)(unsigned int, struct pt_regs *);
+
+struct nmiaction {
+	struct list_head list;
+	nmi_handler_t handler;
+	u64 max_duration;
+	long unsigned int flags;
+	const char *name;
+};
+
+struct gdt_page {
+	struct desc_struct gdt[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cyc2ns_data {
+	u32 cyc2ns_mul;
+	u32 cyc2ns_shift;
+	u64 cyc2ns_offset;
+};
+
+struct unwind_state {
+	struct stack_info stack_info;
+	long unsigned int stack_mask;
+	struct task_struct *task;
+	int graph_idx;
+	struct llist_node *kr_cur;
+	bool error;
+	bool got_irq;
+	long unsigned int *bp;
+	long unsigned int *orig_sp;
+	long unsigned int ip;
+	long unsigned int *next_bp;
+	struct pt_regs *regs;
+};
+
+enum extra_reg_type {
+	EXTRA_REG_NONE = 4294967295,
+	EXTRA_REG_RSP_0 = 0,
+	EXTRA_REG_RSP_1 = 1,
+	EXTRA_REG_LBR = 2,
+	EXTRA_REG_LDLAT = 3,
+	EXTRA_REG_FE = 4,
+	EXTRA_REG_MAX = 5,
+};
+
+struct event_constraint {
+	union {
+		long unsigned int idxmsk[1];
+		u64 idxmsk64;
+	};
+	u64 code;
+	u64 cmask;
+	int weight;
+	int overlap;
+	int flags;
+	unsigned int size;
+};
+
+struct amd_nb {
+	int nb_id;
+	int refcnt;
+	struct perf_event *owners[64];
+	struct event_constraint event_constraints[64];
+};
+
+struct er_account {
+	raw_spinlock_t lock;
+	u64 config;
+	u64 reg;
+	atomic_t ref;
+};
+
+struct intel_shared_regs {
+	struct er_account regs[5];
+	int refcnt;
+	unsigned int core_id;
+};
+
+enum intel_excl_state_type {
+	INTEL_EXCL_UNUSED = 0,
+	INTEL_EXCL_SHARED = 1,
+	INTEL_EXCL_EXCLUSIVE = 2,
+};
+
+struct intel_excl_states {
+	enum intel_excl_state_type state[64];
+	bool sched_started;
+};
+
+struct intel_excl_cntrs {
+	raw_spinlock_t lock;
+	struct intel_excl_states states[2];
+	union {
+		u16 has_exclusive[2];
+		u32 exclusive_present;
+	};
+	int refcnt;
+	unsigned int core_id;
+};
+
+enum {
+	X86_PERF_KFREE_SHARED = 0,
+	X86_PERF_KFREE_EXCL = 1,
+	X86_PERF_KFREE_MAX = 2,
+};
+
+struct cpu_hw_events {
+	struct perf_event *events[64];
+	long unsigned int active_mask[1];
+	long unsigned int dirty[1];
+	int enabled;
+	int n_events;
+	int n_added;
+	int n_txn;
+	int n_txn_pair;
+	int n_txn_metric;
+	int assign[64];
+	u64 tags[64];
+	struct perf_event *event_list[64];
+	struct event_constraint *event_constraint[64];
+	int n_excl;
+	unsigned int txn_flags;
+	int is_fake;
+	struct debug_store *ds;
+	void *ds_pebs_vaddr;
+	void *ds_bts_vaddr;
+	u64 pebs_enabled;
+	int n_pebs;
+	int n_large_pebs;
+	int n_pebs_via_pt;
+	int pebs_output;
+	u64 pebs_data_cfg;
+	u64 active_pebs_data_cfg;
+	int pebs_record_size;
+	int lbr_users;
+	int lbr_pebs_users;
+	struct perf_branch_stack lbr_stack;
+	struct perf_branch_entry lbr_entries[32];
+	union {
+		struct er_account *lbr_sel;
+		struct er_account *lbr_ctl;
+	};
+	u64 br_sel;
+	void *last_task_ctx;
+	int last_log_id;
+	int lbr_select;
+	void *lbr_xsave;
+	u64 intel_ctrl_guest_mask;
+	u64 intel_ctrl_host_mask;
+	struct perf_guest_switch_msr guest_switch_msrs[64];
+	u64 intel_cp_status;
+	struct intel_shared_regs *shared_regs;
+	struct event_constraint *constraint_list;
+	struct intel_excl_cntrs *excl_cntrs;
+	int excl_thread_id;
+	u64 tfa_shadow;
+	int n_metric;
+	struct amd_nb *amd_nb;
+	int brs_active;
+	u64 perf_ctr_virt_mask;
+	int n_pair;
+	void *kfree_on_online[2];
+	struct pmu *pmu;
+};
+
+struct extra_reg {
+	unsigned int event;
+	unsigned int msr;
+	u64 config_mask;
+	u64 valid_mask;
+	int idx;
+	bool extra_msr_access;
+};
+
+union perf_capabilities {
+	struct {
+		u64 lbr_format: 6;
+		u64 pebs_trap: 1;
+		u64 pebs_arch_reg: 1;
+		u64 pebs_format: 4;
+		u64 smm_freeze: 1;
+		u64 full_width_write: 1;
+		u64 pebs_baseline: 1;
+		u64 perf_metrics: 1;
+		u64 pebs_output_pt_available: 1;
+		u64 anythread_deprecated: 1;
+	};
+	u64 capabilities;
+};
+
+struct x86_pmu_quirk {
+	struct x86_pmu_quirk *next;
+	void (*func)();
+};
+
+enum {
+	x86_lbr_exclusive_lbr = 0,
+	x86_lbr_exclusive_bts = 1,
+	x86_lbr_exclusive_pt = 2,
+	x86_lbr_exclusive_max = 3,
+};
+
+struct x86_hybrid_pmu {
+	struct pmu pmu;
+	const char *name;
+	u8 cpu_type;
+	cpumask_t supported_cpus;
+	union perf_capabilities intel_cap;
+	u64 intel_ctrl;
+	int max_pebs_events;
+	int num_counters;
+	int num_counters_fixed;
+	struct event_constraint unconstrained;
+	u64 hw_cache_event_ids[42];
+	u64 hw_cache_extra_regs[42];
+	struct event_constraint *event_constraints;
+	struct event_constraint *pebs_constraints;
+	struct extra_reg *extra_regs;
+	unsigned int late_ack: 1;
+	unsigned int mid_ack: 1;
+	unsigned int enabled_ack: 1;
+};
+
+enum hybrid_pmu_type {
+	hybrid_big = 64,
+	hybrid_small = 32,
+	hybrid_big_small = 96,
+};
+
+struct x86_pmu {
+	const char *name;
+	int version;
+	int (*handle_irq)(struct pt_regs *);
+	void (*disable_all)();
+	void (*enable_all)(int);
 	void (*enable)(struct perf_event *);
 	void (*disable)(struct perf_event *);
-	int (*get_event_idx)(struct pmu_hw_events *, struct perf_event *);
-	void (*clear_event_idx)(struct pmu_hw_events *, struct perf_event *);
-	int (*set_event_filter)(struct hw_perf_event *, struct perf_event_attr *);
-	u64 (*read_counter)(struct perf_event *);
-	void (*write_counter)(struct perf_event *, u64);
-	void (*start)(struct arm_pmu *);
-	void (*stop)(struct arm_pmu *);
-	void (*reset)(void *);
-	int (*map_event)(struct perf_event *);
-	int (*filter_match)(struct perf_event *);
-	int num_events;
-	bool secure_access;
-	long unsigned int pmceid_bitmap[1];
-	long unsigned int pmceid_ext_bitmap[1];
-	struct platform_device *plat_device;
-	struct pmu_hw_events *hw_events;
-	struct hlist_node node;
-	struct notifier_block cpu_pm_nb;
-	const struct attribute_group *attr_groups[5];
-	u64 reg_pmmir;
-	long unsigned int acpi_cpuid;
-};
-
-enum armpmu_attr_groups {
-	ARMPMU_ATTR_GROUP_COMMON = 0,
-	ARMPMU_ATTR_GROUP_EVENTS = 1,
-	ARMPMU_ATTR_GROUP_FORMATS = 2,
-	ARMPMU_ATTR_GROUP_CAPS = 3,
-	ARMPMU_NR_ATTR_GROUPS = 4,
-};
-
-struct clock_read_data {
-	u64 epoch_ns;
-	u64 epoch_cyc;
-	u64 sched_clock_mask;
-	u64 (*read_sched_clock)();
-	u32 mult;
-	u32 shift;
-};
-
-struct armv8pmu_probe_info {
-	struct arm_pmu *pmu;
-	bool present;
-};
-
-enum hw_breakpoint_ops {
-	HW_BREAKPOINT_INSTALL = 0,
-	HW_BREAKPOINT_UNINSTALL = 1,
-	HW_BREAKPOINT_RESTORE = 2,
-};
-
-struct cpu_suspend_ctx {
-	u64 ctx_regs[13];
-	u64 sp;
-};
-
-struct sleep_stack_data {
-	struct cpu_suspend_ctx system_regs;
-	long unsigned int callee_saved_regs[12];
-};
-
-typedef void *acpi_handle;
-
-typedef u64 phys_cpuid_t;
-
-struct thermal_cooling_device_ops;
-
-struct thermal_cooling_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct device_node *np;
-	void *devdata;
-	void *stats;
-	const struct thermal_cooling_device_ops *ops;
-	bool updated;
-	struct mutex lock;
-	struct list_head thermal_instances;
-	struct list_head node;
-};
-
-struct thermal_cooling_device_ops {
-	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
-	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
-	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
-	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
-	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
-};
-
-struct acpi_processor_cx {
-	u8 valid;
-	u8 type;
-	u32 address;
-	u8 entry_method;
-	u8 index;
-	u32 latency;
-	u8 bm_sts_skip;
-	char desc[32];
-};
-
-struct acpi_lpi_state {
-	u32 min_residency;
-	u32 wake_latency;
-	u32 flags;
-	u32 arch_flags;
-	u32 res_cnt_freq;
-	u32 enable_parent_state;
-	u64 address;
-	u8 index;
-	u8 entry_method;
-	char desc[32];
-};
-
-struct acpi_processor_power {
-	int count;
+	void (*assign)(struct perf_event *, int);
+	void (*add)(struct perf_event *);
+	void (*del)(struct perf_event *);
+	void (*read)(struct perf_event *);
+	int (*hw_config)(struct perf_event *);
+	int (*schedule_events)(struct cpu_hw_events *, int, int *);
+	unsigned int eventsel;
+	unsigned int perfctr;
+	int (*addr_offset)(int, bool);
+	int (*rdpmc_index)(int);
+	u64 (*event_map)(int);
+	int max_events;
+	int num_counters;
+	int num_counters_fixed;
+	int cntval_bits;
+	u64 cntval_mask;
 	union {
-		struct acpi_processor_cx states[8];
-		struct acpi_lpi_state lpi_states[8];
+		long unsigned int events_maskl;
+		long unsigned int events_mask[1];
 	};
-	int timer_broadcast_on_state;
+	int events_mask_len;
+	int apic;
+	u64 max_period;
+	struct event_constraint * (*get_event_constraints)(struct cpu_hw_events *, int, struct perf_event *);
+	void (*put_event_constraints)(struct cpu_hw_events *, struct perf_event *);
+	void (*start_scheduling)(struct cpu_hw_events *);
+	void (*commit_scheduling)(struct cpu_hw_events *, int, int);
+	void (*stop_scheduling)(struct cpu_hw_events *);
+	struct event_constraint *event_constraints;
+	struct x86_pmu_quirk *quirks;
+	int perfctr_second_write;
+	u64 (*limit_period)(struct perf_event *, u64);
+	unsigned int late_ack: 1;
+	unsigned int mid_ack: 1;
+	unsigned int enabled_ack: 1;
+	int attr_rdpmc_broken;
+	int attr_rdpmc;
+	struct attribute **format_attrs;
+	ssize_t (*events_sysfs_show)(char *, u64);
+	const struct attribute_group **attr_update;
+	long unsigned int attr_freeze_on_smi;
+	int (*cpu_prepare)(int);
+	void (*cpu_starting)(int);
+	void (*cpu_dying)(int);
+	void (*cpu_dead)(int);
+	void (*check_microcode)();
+	void (*sched_task)(struct perf_event_context *, bool);
+	u64 intel_ctrl;
+	union perf_capabilities intel_cap;
+	unsigned int bts: 1;
+	unsigned int bts_active: 1;
+	unsigned int pebs: 1;
+	unsigned int pebs_active: 1;
+	unsigned int pebs_broken: 1;
+	unsigned int pebs_prec_dist: 1;
+	unsigned int pebs_no_tlb: 1;
+	unsigned int pebs_no_isolation: 1;
+	unsigned int pebs_block: 1;
+	int pebs_record_size;
+	int pebs_buffer_size;
+	int max_pebs_events;
+	void (*drain_pebs)(struct pt_regs *, struct perf_sample_data *);
+	struct event_constraint *pebs_constraints;
+	void (*pebs_aliases)(struct perf_event *);
+	long unsigned int large_pebs_flags;
+	u64 rtm_abort_event;
+	unsigned int lbr_tos;
+	unsigned int lbr_from;
+	unsigned int lbr_to;
+	unsigned int lbr_info;
+	unsigned int lbr_nr;
+	union {
+		u64 lbr_sel_mask;
+		u64 lbr_ctl_mask;
+	};
+	union {
+		const int *lbr_sel_map;
+		int *lbr_ctl_map;
+	};
+	bool lbr_double_abort;
+	bool lbr_pt_coexist;
+	unsigned int lbr_has_info: 1;
+	unsigned int lbr_has_tsx: 1;
+	unsigned int lbr_from_flags: 1;
+	unsigned int lbr_to_cycles: 1;
+	unsigned int lbr_depth_mask: 8;
+	unsigned int lbr_deep_c_reset: 1;
+	unsigned int lbr_lip: 1;
+	unsigned int lbr_cpl: 1;
+	unsigned int lbr_filter: 1;
+	unsigned int lbr_call_stack: 1;
+	unsigned int lbr_mispred: 1;
+	unsigned int lbr_timed_lbr: 1;
+	unsigned int lbr_br_type: 1;
+	void (*lbr_reset)();
+	void (*lbr_read)(struct cpu_hw_events *);
+	void (*lbr_save)(void *);
+	void (*lbr_restore)(void *);
+	atomic_t lbr_exclusive[3];
+	int num_topdown_events;
+	u64 (*update_topdown_event)(struct perf_event *);
+	int (*set_topdown_event_period)(struct perf_event *);
+	void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);
+	unsigned int amd_nb_constraints: 1;
+	u64 perf_ctr_pair_en;
+	struct extra_reg *extra_regs;
+	unsigned int flags;
+	struct perf_guest_switch_msr * (*guest_get_msrs)(int *);
+	int (*check_period)(struct perf_event *, u64);
+	int (*aux_output_match)(struct perf_event *);
+	int (*filter_match)(struct perf_event *);
+	int num_hybrid_pmus;
+	struct x86_hybrid_pmu *hybrid_pmu;
+	u8 (*get_hybrid_cpu_type)();
 };
 
-struct acpi_psd_package {
-	u64 num_entries;
-	u64 revision;
-	u64 domain;
-	u64 coord_type;
-	u64 num_processors;
+struct sched_state {
+	int weight;
+	int event;
+	int counter;
+	int unassigned;
+	int nr_gp;
+	u64 used;
 };
 
-struct acpi_pct_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 reserved;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_processor_px {
-	u64 core_frequency;
-	u64 power;
-	u64 transition_latency;
-	u64 bus_master_latency;
-	u64 control;
-	u64 status;
+struct perf_sched {
+	int max_weight;
+	int max_events;
+	int max_gp;
+	int saved_states;
+	struct event_constraint **constraints;
+	struct sched_state state;
+	struct sched_state saved[2];
 };
 
-struct acpi_processor_performance {
-	unsigned int state;
-	unsigned int platform_limit;
-	struct acpi_pct_register control_register;
-	struct acpi_pct_register status_register;
-	short: 16;
-	unsigned int state_count;
-	int: 32;
-	struct acpi_processor_px *states;
-	struct acpi_psd_package domain_info;
-	cpumask_var_t shared_cpu_map;
-	unsigned int shared_type;
-	int: 32;
-} __attribute__((packed));
-
-struct acpi_tsd_package {
-	u64 num_entries;
-	u64 revision;
-	u64 domain;
-	u64 coord_type;
-	u64 num_processors;
+struct perf_msr {
+	u64 msr;
+	struct attribute_group *grp;
+	bool (*test)(int, void *);
+	bool no_check;
+	u64 mask;
 };
 
-struct acpi_processor_tx_tss {
-	u64 freqpercentage;
-	u64 power;
-	u64 transition_latency;
-	u64 control;
-	u64 status;
+union cpuid_0x80000022_ebx {
+	struct {
+		unsigned int num_core_pmc: 4;
+	} split;
+	unsigned int full;
 };
 
-struct acpi_processor_tx {
-	u16 power;
-	u16 performance;
-};
-
-struct acpi_processor;
-
-struct acpi_processor_throttling {
-	unsigned int state;
-	unsigned int platform_limit;
-	struct acpi_pct_register control_register;
-	struct acpi_pct_register status_register;
-	short: 16;
-	unsigned int state_count;
-	int: 32;
-	struct acpi_processor_tx_tss *states_tss;
-	struct acpi_tsd_package domain_info;
-	cpumask_var_t shared_cpu_map;
-	int (*acpi_processor_get_throttling)(struct acpi_processor *);
-	int (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool);
-	u32 address;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 tsd_valid_flag;
-	char: 8;
-	unsigned int shared_type;
-	struct acpi_processor_tx states[16];
-	int: 32;
-} __attribute__((packed));
-
-struct acpi_processor_flags {
-	u8 power: 1;
-	u8 performance: 1;
-	u8 throttling: 1;
-	u8 limit: 1;
-	u8 bm_control: 1;
-	u8 bm_check: 1;
-	u8 has_cst: 1;
-	u8 has_lpi: 1;
-	u8 power_setup_done: 1;
-	u8 bm_rld_set: 1;
-	u8 need_hotplug_init: 1;
-};
-
-struct acpi_processor_lx {
-	int px;
-	int tx;
-};
-
-struct acpi_processor_limit {
-	struct acpi_processor_lx state;
-	struct acpi_processor_lx thermal;
-	struct acpi_processor_lx user;
-};
-
-struct acpi_processor {
-	acpi_handle handle;
-	u32 acpi_id;
-	phys_cpuid_t phys_id;
-	u32 id;
-	u32 pblk;
-	int performance_platform_limit;
-	int throttling_platform_limit;
-	struct acpi_processor_flags flags;
-	struct acpi_processor_power power;
-	struct acpi_processor_performance *performance;
-	struct acpi_processor_throttling throttling;
-	struct acpi_processor_limit limit;
-	struct thermal_cooling_device *cdev;
-	struct device *dev;
-	struct freq_qos_request perflib_req;
-	struct freq_qos_request thermal_req;
-};
-
-enum jump_label_type {
-	JUMP_LABEL_NOP = 0,
-	JUMP_LABEL_JMP = 1,
-};
-
-struct die_args {
-	struct pt_regs *regs;
-	const char *str;
-	long int err;
-	int trapnr;
-	int signr;
-};
-
-enum kgdb_bptype {
-	BP_BREAKPOINT = 0,
-	BP_HARDWARE_BREAKPOINT = 1,
-	BP_WRITE_WATCHPOINT = 2,
-	BP_READ_WATCHPOINT = 3,
-	BP_ACCESS_WATCHPOINT = 4,
-	BP_POKE_BREAKPOINT = 5,
-};
-
-enum kgdb_bpstate {
-	BP_UNDEFINED = 0,
-	BP_REMOVED = 1,
-	BP_SET = 2,
-	BP_ACTIVE = 3,
-};
-
-struct kgdb_bkpt {
-	long unsigned int bpt_addr;
-	unsigned char saved_instr[4];
-	enum kgdb_bptype type;
-	enum kgdb_bpstate state;
-};
-
-struct dbg_reg_def_t {
-	char *name;
-	int size;
-	int offset;
-};
-
-struct kgdb_arch {
-	unsigned char gdb_bpt_instr[4];
-	long unsigned int flags;
-	int (*set_breakpoint)(long unsigned int, char *);
-	int (*remove_breakpoint)(long unsigned int, char *);
-	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
-	void (*disable_hw_break)(struct pt_regs *);
-	void (*remove_all_hw_break)();
-	void (*correct_hw_break)();
-	void (*enable_nmi)(bool);
-};
-
-struct screen_info {
-	__u8 orig_x;
-	__u8 orig_y;
-	__u16 ext_mem_k;
-	__u16 orig_video_page;
-	__u8 orig_video_mode;
-	__u8 orig_video_cols;
-	__u8 flags;
-	__u8 unused2;
-	__u16 orig_video_ega_bx;
-	__u16 unused3;
-	__u8 orig_video_lines;
-	__u8 orig_video_isVGA;
-	__u16 orig_video_points;
-	__u16 lfb_width;
-	__u16 lfb_height;
-	__u16 lfb_depth;
-	__u32 lfb_base;
-	__u32 lfb_size;
-	__u16 cl_magic;
-	__u16 cl_offset;
-	__u16 lfb_linelength;
-	__u8 red_size;
-	__u8 red_pos;
-	__u8 green_size;
-	__u8 green_pos;
-	__u8 blue_size;
-	__u8 blue_pos;
-	__u8 rsvd_size;
-	__u8 rsvd_pos;
-	__u16 vesapm_seg;
-	__u16 vesapm_off;
-	__u16 pages;
-	__u16 vesa_attributes;
-	__u32 capabilities;
-	__u32 ext_lfb_base;
-	__u8 _reserved[2];
-} __attribute__((packed));
-
 struct pci_device_id {
 	__u32 vendor;
 	__u32 device;
@@ -16425,300 +16005,19 @@
 	__u32 class;
 	__u32 class_mask;
 	kernel_ulong_t driver_data;
-};
-
-struct resource_entry {
-	struct list_head node;
-	struct resource *res;
-	resource_size_t offset;
-	struct resource __res;
-};
-
-typedef u64 acpi_io_address;
-
-typedef u32 acpi_object_type;
-
-union acpi_object {
-	acpi_object_type type;
-	struct {
-		acpi_object_type type;
-		u64 value;
-	} integer;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		char *pointer;
-	} string;
-	struct {
-		acpi_object_type type;
-		u32 length;
-		u8 *pointer;
-	} buffer;
-	struct {
-		acpi_object_type type;
-		u32 count;
-		union acpi_object *elements;
-	} package;
-	struct {
-		acpi_object_type type;
-		acpi_object_type actual_type;
-		acpi_handle handle;
-	} reference;
-	struct {
-		acpi_object_type type;
-		u32 proc_id;
-		acpi_io_address pblk_address;
-		u32 pblk_length;
-	} processor;
-	struct {
-		acpi_object_type type;
-		u32 system_level;
-		u32 resource_order;
-	} power_resource;
-};
-
-struct acpi_device;
-
-struct acpi_hotplug_profile {
-	struct kobject kobj;
-	int (*scan_dependent)(struct acpi_device *);
-	void (*notify_online)(struct acpi_device *);
-	bool enabled: 1;
-	bool demand_offline: 1;
-};
-
-struct acpi_device_status {
-	u32 present: 1;
-	u32 enabled: 1;
-	u32 show_in_ui: 1;
-	u32 functional: 1;
-	u32 battery_present: 1;
-	u32 reserved: 27;
-};
-
-struct acpi_device_flags {
-	u32 dynamic_status: 1;
-	u32 removable: 1;
-	u32 ejectable: 1;
-	u32 power_manageable: 1;
-	u32 match_driver: 1;
-	u32 initialized: 1;
-	u32 visited: 1;
-	u32 hotplug_notify: 1;
-	u32 is_dock_station: 1;
-	u32 of_compatible_ok: 1;
-	u32 coherent_dma: 1;
-	u32 cca_seen: 1;
-	u32 enumeration_by_parent: 1;
-	u32 reserved: 19;
-};
-
-typedef char acpi_bus_id[8];
-
-struct acpi_pnp_type {
-	u32 hardware_id: 1;
-	u32 bus_address: 1;
-	u32 platform_id: 1;
-	u32 reserved: 29;
-};
-
-typedef u64 acpi_bus_address;
-
-typedef char acpi_device_name[40];
-
-typedef char acpi_device_class[20];
-
-struct acpi_device_pnp {
-	acpi_bus_id bus_id;
-	struct acpi_pnp_type type;
-	acpi_bus_address bus_address;
-	char *unique_id;
-	struct list_head ids;
-	acpi_device_name device_name;
-	acpi_device_class device_class;
-	union acpi_object *str_obj;
-};
-
-struct acpi_device_power_flags {
-	u32 explicit_get: 1;
-	u32 power_resources: 1;
-	u32 inrush_current: 1;
-	u32 power_removed: 1;
-	u32 ignore_parent: 1;
-	u32 dsw_present: 1;
-	u32 reserved: 26;
-};
-
-struct acpi_device_power_state {
-	struct {
-		u8 valid: 1;
-		u8 explicit_set: 1;
-		u8 reserved: 6;
-	} flags;
-	int power;
-	int latency;
-	struct list_head resources;
-};
-
-struct acpi_device_power {
-	int state;
-	struct acpi_device_power_flags flags;
-	struct acpi_device_power_state states[5];
-};
-
-struct acpi_device_wakeup_flags {
-	u8 valid: 1;
-	u8 notifier_present: 1;
-};
-
-struct acpi_device_wakeup_context {
-	void (*func)(struct acpi_device_wakeup_context *);
-	struct device *dev;
-};
-
-struct acpi_device_wakeup {
-	acpi_handle gpe_device;
-	u64 gpe_number;
-	u64 sleep_state;
-	struct list_head resources;
-	struct acpi_device_wakeup_flags flags;
-	struct acpi_device_wakeup_context context;
-	struct wakeup_source *ws;
-	int prepare_count;
-	int enable_count;
-};
-
-struct acpi_device_perf_flags {
-	u8 reserved: 8;
-};
-
-struct acpi_device_perf_state;
-
-struct acpi_device_perf {
-	int state;
-	struct acpi_device_perf_flags flags;
-	int state_count;
-	struct acpi_device_perf_state *states;
-};
-
-struct acpi_device_dir {
-	struct proc_dir_entry *entry;
-};
-
-struct acpi_device_data {
-	const union acpi_object *pointer;
-	struct list_head properties;
-	const union acpi_object *of_compatible;
-	struct list_head subnodes;
-};
-
-struct acpi_scan_handler;
-
-struct acpi_hotplug_context;
-
-struct acpi_driver;
-
-struct acpi_gpio_mapping;
-
-struct acpi_device {
-	int device_type;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct acpi_device *parent;
-	struct list_head children;
-	struct list_head node;
-	struct list_head wakeup_list;
-	struct list_head del_list;
-	struct acpi_device_status status;
-	struct acpi_device_flags flags;
-	struct acpi_device_pnp pnp;
-	struct acpi_device_power power;
-	struct acpi_device_wakeup wakeup;
-	struct acpi_device_perf performance;
-	struct acpi_device_dir dir;
-	struct acpi_device_data data;
-	struct acpi_scan_handler *handler;
-	struct acpi_hotplug_context *hp;
-	struct acpi_driver *driver;
-	const struct acpi_gpio_mapping *driver_gpios;
-	void *driver_data;
-	struct device dev;
-	unsigned int physical_node_count;
-	unsigned int dep_unmet;
-	struct list_head physical_node_list;
-	struct mutex physical_node_lock;
-	void (*remove)(struct acpi_device *);
-};
-
-struct acpi_scan_handler {
-	const struct acpi_device_id *ids;
-	struct list_head list_node;
-	bool (*match)(const char *, const struct acpi_device_id **);
-	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
-	void (*detach)(struct acpi_device *);
-	void (*bind)(struct device *);
-	void (*unbind)(struct device *);
-	struct acpi_hotplug_profile hotplug;
-};
-
-struct acpi_hotplug_context {
-	struct acpi_device *self;
-	int (*notify)(struct acpi_device *, u32);
-	void (*uevent)(struct acpi_device *, u32);
-	void (*fixup)(struct acpi_device *);
-};
-
-typedef int (*acpi_op_add)(struct acpi_device *);
-
-typedef int (*acpi_op_remove)(struct acpi_device *);
-
-typedef void (*acpi_op_notify)(struct acpi_device *, u32);
-
-struct acpi_device_ops {
-	acpi_op_add add;
-	acpi_op_remove remove;
-	acpi_op_notify notify;
-};
-
-struct acpi_driver {
-	char name[80];
-	char class[80];
-	const struct acpi_device_id *ids;
-	unsigned int flags;
-	struct acpi_device_ops ops;
-	struct device_driver drv;
-	struct module *owner;
-};
-
-struct acpi_device_perf_state {
-	struct {
-		u8 valid: 1;
-		u8 reserved: 7;
-	} flags;
-	u8 power;
-	u8 performance;
-	int latency;
-};
-
-struct acpi_gpio_params;
-
-struct acpi_gpio_mapping {
-	const char *name;
-	const struct acpi_gpio_params *data;
-	unsigned int size;
-	unsigned int quirks;
+	__u32 override_only;
 };
 
 struct pci_bus;
 
-struct acpi_pci_root {
-	struct acpi_device *device;
+struct hotplug_slot;
+
+struct pci_slot {
 	struct pci_bus *bus;
-	u16 segment;
-	struct resource secondary;
-	u32 osc_support_set;
-	u32 osc_control_set;
-	phys_addr_t mcfg_addr;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
 };
 
 typedef short unsigned int pci_bus_flags_t;
@@ -16727,8 +16026,6 @@
 
 struct pci_ops;
 
-struct msi_controller;
-
 struct pci_bus {
 	struct list_head node;
 	struct pci_bus *parent;
@@ -16740,14 +16037,12 @@
 	struct list_head resources;
 	struct resource busn_res;
 	struct pci_ops *ops;
-	struct msi_controller *msi;
 	void *sysdata;
 	struct proc_dir_entry *procdir;
 	unsigned char number;
 	unsigned char primary;
 	unsigned char max_bus_speed;
 	unsigned char cur_bus_speed;
-	int domain_nr;
 	char name[48];
 	short unsigned int bridge_ctl;
 	pci_bus_flags_t bus_flags;
@@ -16756,22 +16051,7 @@
 	struct bin_attribute *legacy_io;
 	struct bin_attribute *legacy_mem;
 	unsigned int is_added: 1;
-};
-
-struct acpi_gpio_params {
-	unsigned int crs_entry_index;
-	unsigned int line_index;
-	bool active_low;
-};
-
-struct hotplug_slot;
-
-struct pci_slot {
-	struct pci_bus *bus;
-	struct list_head list;
-	struct hotplug_slot *hotplug;
-	unsigned char number;
-	struct kobject kobj;
+	unsigned int unsafe_warn: 1;
 };
 
 enum {
@@ -16794,14 +16074,20 @@
 
 typedef short unsigned int pci_dev_flags_t;
 
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
 struct aer_stats;
 
+struct rcec_ea;
+
 struct pci_driver;
 
 struct pcie_link_state;
 
-struct pci_vpd;
-
 struct pci_sriov;
 
 struct pci_dev {
@@ -16821,6 +16107,9 @@
 	u8 hdr_type;
 	u16 aer_cap;
 	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
 	u8 pcie_cap;
 	u8 msi_cap;
 	u8 msix_cap;
@@ -16845,7 +16134,6 @@
 	unsigned int d3cold_allowed: 1;
 	unsigned int mmio_always_on: 1;
 	unsigned int wakeup_prepared: 1;
-	unsigned int runtime_d3cold: 1;
 	unsigned int skip_bus_pm: 1;
 	unsigned int ignore_hotplug: 1;
 	unsigned int hotplug_user_indicators: 1;
@@ -16854,7 +16142,8 @@
 	unsigned int d3cold_delay;
 	struct pcie_link_state *link_state;
 	unsigned int ltr_path: 1;
-	int l1ss;
+	u16 l1ss;
+	unsigned int pasid_no_tlp: 1;
 	unsigned int eetlp_prefix_path: 1;
 	pci_channel_state_t error_state;
 	struct device dev;
@@ -16880,11 +16169,11 @@
 	unsigned int pasid_enabled: 1;
 	unsigned int pri_enabled: 1;
 	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
 	unsigned int needs_freset: 1;
 	unsigned int state_saved: 1;
 	unsigned int is_physfn: 1;
 	unsigned int is_virtfn: 1;
-	unsigned int reset_fn: 1;
 	unsigned int is_hotplug_bridge: 1;
 	unsigned int shpc_managed: 1;
 	unsigned int is_thunderbolt: 1;
@@ -16898,11 +16187,11 @@
 	unsigned int link_active_reporting: 1;
 	unsigned int no_vf_scan: 1;
 	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
 	pci_dev_flags_t dev_flags;
 	atomic_t enable_cnt;
 	u32 saved_config_space[16];
 	struct hlist_head saved_cap_space;
-	struct bin_attribute *rom_attr;
 	int rom_attr_enabled;
 	struct bin_attribute *res_attr[17];
 	struct bin_attribute *res_attr_wc[17];
@@ -16910,8 +16199,9 @@
 	unsigned int ptm_root: 1;
 	unsigned int ptm_enabled: 1;
 	u8 ptm_granularity;
-	const struct attribute_group **msi_irq_groups;
-	struct pci_vpd *vpd;
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
 	u16 dpc_cap;
 	unsigned int dpc_rp_extensions: 1;
 	u8 dpc_rp_log_size;
@@ -16929,8 +16219,9 @@
 	u16 acs_cap;
 	phys_addr_t rom;
 	size_t romlen;
-	char *driver_override;
+	const char *driver_override;
 	long unsigned int priv_flags;
+	u8 reset_methods[7];
 };
 
 struct pci_dynids {
@@ -16950,39 +16241,14 @@
 	int (*resume)(struct pci_dev *);
 	void (*shutdown)(struct pci_dev *);
 	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
 	const struct pci_error_handlers *err_handler;
 	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
 	struct device_driver driver;
 	struct pci_dynids dynids;
-};
-
-struct pci_host_bridge {
-	struct device dev;
-	struct pci_bus *bus;
-	struct pci_ops *ops;
-	struct pci_ops *child_ops;
-	void *sysdata;
-	int busnr;
-	struct list_head windows;
-	struct list_head dma_ranges;
-	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
-	int (*map_irq)(const struct pci_dev *, u8, u8);
-	void (*release_fn)(struct pci_host_bridge *);
-	void *release_data;
-	struct msi_controller *msi;
-	unsigned int ignore_reset_delay: 1;
-	unsigned int no_ext_tags: 1;
-	unsigned int native_aer: 1;
-	unsigned int native_pcie_hotplug: 1;
-	unsigned int native_shpc_hotplug: 1;
-	unsigned int native_pme: 1;
-	unsigned int native_ltr: 1;
-	unsigned int native_dpc: 1;
-	unsigned int preserve_config: 1;
-	unsigned int size_windows: 1;
-	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
-	long: 64;
-	long unsigned int private[0];
+	bool driver_managed_dma;
 };
 
 struct pci_ops {
@@ -17004,2029 +16270,6 @@
 	void (*resume)(struct pci_dev *);
 };
 
-struct acpi_pci_root_ops;
-
-struct acpi_pci_root_info {
-	struct acpi_pci_root *root;
-	struct acpi_device *bridge;
-	struct acpi_pci_root_ops *ops;
-	struct list_head resources;
-	char name[16];
-};
-
-struct acpi_pci_root_ops {
-	struct pci_ops *pci_ops;
-	int (*init_info)(struct acpi_pci_root_info *);
-	void (*release_info)(struct acpi_pci_root_info *);
-	int (*prepare_resources)(struct acpi_pci_root_info *);
-};
-
-struct pci_config_window;
-
-struct pci_ecam_ops {
-	unsigned int bus_shift;
-	struct pci_ops pci_ops;
-	int (*init)(struct pci_config_window *);
-};
-
-struct pci_config_window {
-	struct resource res;
-	struct resource busr;
-	void *priv;
-	const struct pci_ecam_ops *ops;
-	union {
-		void *win;
-		void **winp;
-	};
-	struct device *parent;
-};
-
-struct acpi_pci_generic_root_info {
-	struct acpi_pci_root_info common;
-	struct pci_config_window *cfg;
-};
-
-struct trace_event_raw_instruction_emulation {
-	struct trace_entry ent;
-	u32 __data_loc_instr;
-	u64 addr;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_instruction_emulation {
-	u32 instr;
-};
-
-typedef void (*btf_trace_instruction_emulation)(void *, const char *, u64);
-
-enum insn_emulation_mode {
-	INSN_UNDEF = 0,
-	INSN_EMULATE = 1,
-	INSN_HW = 2,
-};
-
-enum legacy_insn_status {
-	INSN_DEPRECATED = 0,
-	INSN_OBSOLETE = 1,
-};
-
-struct insn_emulation_ops {
-	const char *name;
-	enum legacy_insn_status status;
-	struct undef_hook *hooks;
-	int (*set_hw_mode)(bool);
-};
-
-struct insn_emulation {
-	struct list_head node;
-	struct insn_emulation_ops *ops;
-	int current_mode;
-	int min;
-	int max;
-};
-
-typedef u64 acpi_size;
-
-typedef u64 acpi_physical_address;
-
-typedef u32 acpi_status;
-
-struct acpi_table_header {
-	char signature[4];
-	u32 length;
-	u8 revision;
-	u8 checksum;
-	char oem_id[6];
-	char oem_table_id[8];
-	u32 oem_revision;
-	char asl_compiler_id[4];
-	u32 asl_compiler_revision;
-};
-
-struct acpi_generic_address {
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_table_fadt {
-	struct acpi_table_header header;
-	u32 facs;
-	u32 dsdt;
-	u8 model;
-	u8 preferred_profile;
-	u16 sci_interrupt;
-	u32 smi_command;
-	u8 acpi_enable;
-	u8 acpi_disable;
-	u8 s4_bios_request;
-	u8 pstate_control;
-	u32 pm1a_event_block;
-	u32 pm1b_event_block;
-	u32 pm1a_control_block;
-	u32 pm1b_control_block;
-	u32 pm2_control_block;
-	u32 pm_timer_block;
-	u32 gpe0_block;
-	u32 gpe1_block;
-	u8 pm1_event_length;
-	u8 pm1_control_length;
-	u8 pm2_control_length;
-	u8 pm_timer_length;
-	u8 gpe0_block_length;
-	u8 gpe1_block_length;
-	u8 gpe1_base;
-	u8 cst_control;
-	u16 c2_latency;
-	u16 c3_latency;
-	u16 flush_size;
-	u16 flush_stride;
-	u8 duty_offset;
-	u8 duty_width;
-	u8 day_alarm;
-	u8 month_alarm;
-	u8 century;
-	u16 boot_flags;
-	u8 reserved;
-	u32 flags;
-	struct acpi_generic_address reset_register;
-	u8 reset_value;
-	u16 arm_boot_flags;
-	u8 minor_revision;
-	u64 Xfacs;
-	u64 Xdsdt;
-	struct acpi_generic_address xpm1a_event_block;
-	struct acpi_generic_address xpm1b_event_block;
-	struct acpi_generic_address xpm1a_control_block;
-	struct acpi_generic_address xpm1b_control_block;
-	struct acpi_generic_address xpm2_control_block;
-	struct acpi_generic_address xpm_timer_block;
-	struct acpi_generic_address xgpe0_block;
-	struct acpi_generic_address xgpe1_block;
-	struct acpi_generic_address sleep_control;
-	struct acpi_generic_address sleep_status;
-	u64 hypervisor_id;
-} __attribute__((packed));
-
-enum acpi_srat_type {
-	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
-	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
-	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
-	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
-	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
-	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
-	ACPI_SRAT_TYPE_RESERVED = 6,
-};
-
-struct acpi_srat_gicc_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u32 acpi_processor_uid;
-	u32 flags;
-	u32 clock_domain;
-} __attribute__((packed));
-
-struct parking_protocol_mailbox {
-	__le32 cpu_id;
-	__le32 reserved;
-	__le64 entry_point;
-};
-
-struct cpu_mailbox_entry {
-	struct parking_protocol_mailbox *mailbox;
-	phys_addr_t mailbox_addr;
-	u8 version;
-	u8 gic_cpu_id;
-};
-
-enum {
-	MEMREMAP_WB = 1,
-	MEMREMAP_WT = 2,
-	MEMREMAP_WC = 4,
-	MEMREMAP_ENC = 8,
-	MEMREMAP_DEC = 16,
-};
-
-struct pv_time_ops {
-	long long unsigned int (*steal_clock)(int);
-};
-
-struct paravirt_patch_template {
-	struct pv_time_ops time;
-};
-
-struct pvclock_vcpu_stolen_time {
-	__le32 revision;
-	__le32 attributes;
-	__le64 stolen_time;
-	u8 padding[48];
-};
-
-struct pv_time_stolen_time_region {
-	struct pvclock_vcpu_stolen_time *kaddr;
-};
-
-typedef u64 p4dval_t;
-
-typedef struct {
-	pgd_t pgd;
-} p4d_t;
-
-enum pageflags {
-	PG_locked = 0,
-	PG_referenced = 1,
-	PG_uptodate = 2,
-	PG_dirty = 3,
-	PG_lru = 4,
-	PG_active = 5,
-	PG_workingset = 6,
-	PG_waiters = 7,
-	PG_error = 8,
-	PG_slab = 9,
-	PG_owner_priv_1 = 10,
-	PG_arch_1 = 11,
-	PG_reserved = 12,
-	PG_private = 13,
-	PG_private_2 = 14,
-	PG_writeback = 15,
-	PG_head = 16,
-	PG_mappedtodisk = 17,
-	PG_reclaim = 18,
-	PG_swapbacked = 19,
-	PG_unevictable = 20,
-	PG_mlocked = 21,
-	PG_hwpoison = 22,
-	PG_young = 23,
-	PG_idle = 24,
-	PG_arch_2 = 25,
-	__NR_PAGEFLAGS = 26,
-	PG_checked = 10,
-	PG_swapcache = 10,
-	PG_fscache = 14,
-	PG_pinned = 10,
-	PG_savepinned = 3,
-	PG_foreign = 10,
-	PG_xen_remapped = 10,
-	PG_slob_free = 13,
-	PG_double_map = 6,
-	PG_isolated = 18,
-	PG_reported = 2,
-};
-
-struct mem_section_usage {
-	long unsigned int subsection_map[8];
-	long unsigned int pageblock_flags[0];
-};
-
-struct page_ext;
-
-struct mem_section {
-	long unsigned int section_mem_map;
-	struct mem_section_usage *usage;
-	struct page_ext *page_ext;
-	long unsigned int pad;
-};
-
-struct page_ext {
-	long unsigned int flags;
-};
-
-struct xa_node {
-	unsigned char shift;
-	unsigned char offset;
-	unsigned char count;
-	unsigned char nr_values;
-	struct xa_node *parent;
-	struct xarray *array;
-	union {
-		struct list_head private_list;
-		struct callback_head callback_head;
-	};
-	void *slots[64];
-	union {
-		long unsigned int tags[3];
-		long unsigned int marks[3];
-	};
-};
-
-typedef void (*xa_update_node_t)(struct xa_node *);
-
-struct xa_state {
-	struct xarray *xa;
-	long unsigned int xa_index;
-	unsigned char xa_shift;
-	unsigned char xa_sibs;
-	unsigned char xa_offset;
-	unsigned char xa_pad;
-	struct xa_node *xa_node;
-	struct xa_node *xa_alloc;
-	xa_update_node_t xa_update;
-};
-
-struct pbe {
-	void *address;
-	void *orig_address;
-	struct pbe *next;
-};
-
-struct arch_hibernate_hdr_invariants {
-	char uts_version[65];
-};
-
-struct arch_hibernate_hdr {
-	struct arch_hibernate_hdr_invariants invariants;
-	phys_addr_t ttbr1_el1;
-	void (*reenter_kernel)();
-	phys_addr_t __hyp_stub_vectors;
-	u64 sleep_cpu_mpidr;
-};
-
-enum {
-	IRQD_TRIGGER_MASK = 15,
-	IRQD_SETAFFINITY_PENDING = 256,
-	IRQD_ACTIVATED = 512,
-	IRQD_NO_BALANCING = 1024,
-	IRQD_PER_CPU = 2048,
-	IRQD_AFFINITY_SET = 4096,
-	IRQD_LEVEL = 8192,
-	IRQD_WAKEUP_STATE = 16384,
-	IRQD_MOVE_PCNTXT = 32768,
-	IRQD_IRQ_DISABLED = 65536,
-	IRQD_IRQ_MASKED = 131072,
-	IRQD_IRQ_INPROGRESS = 262144,
-	IRQD_WAKEUP_ARMED = 524288,
-	IRQD_FORWARDED_TO_VCPU = 1048576,
-	IRQD_AFFINITY_MANAGED = 2097152,
-	IRQD_IRQ_STARTED = 4194304,
-	IRQD_MANAGED_SHUTDOWN = 8388608,
-	IRQD_SINGLE_TARGET = 16777216,
-	IRQD_DEFAULT_TRIGGER_SET = 33554432,
-	IRQD_CAN_RESERVE = 67108864,
-	IRQD_MSI_NOMASK_QUIRK = 134217728,
-	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
-	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
-	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
-};
-
-struct kimage_arch {
-	void *dtb;
-	long unsigned int dtb_mem;
-	void *elf_headers;
-	long unsigned int elf_headers_mem;
-	long unsigned int elf_headers_sz;
-};
-
-typedef int kexec_probe_t(const char *, long unsigned int);
-
-struct kimage;
-
-typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
-
-typedef int kexec_cleanup_t(void *);
-
-struct kexec_file_ops {
-	kexec_probe_t *probe;
-	kexec_load_t *load;
-	kexec_cleanup_t *cleanup;
-};
-
-typedef long unsigned int kimage_entry_t;
-
-struct kexec_segment {
-	union {
-		void *buf;
-		void *kbuf;
-	};
-	size_t bufsz;
-	long unsigned int mem;
-	size_t memsz;
-};
-
-struct purgatory_info {
-	const Elf64_Ehdr *ehdr;
-	Elf64_Shdr *sechdrs;
-	void *purgatory_buf;
-};
-
-struct kimage {
-	kimage_entry_t head;
-	kimage_entry_t *entry;
-	kimage_entry_t *last_entry;
-	long unsigned int start;
-	struct page *control_code_page;
-	struct page *swap_page;
-	void *vmcoreinfo_data_copy;
-	long unsigned int nr_segments;
-	struct kexec_segment segment[16];
-	struct list_head control_pages;
-	struct list_head dest_pages;
-	struct list_head unusable_pages;
-	long unsigned int control_page;
-	unsigned int type: 1;
-	unsigned int preserve_context: 1;
-	unsigned int file_mode: 1;
-	struct kimage_arch arch;
-	void *kernel_buf;
-	long unsigned int kernel_buf_len;
-	void *initrd_buf;
-	long unsigned int initrd_buf_len;
-	char *cmdline_buf;
-	long unsigned int cmdline_buf_len;
-	const struct kexec_file_ops *fops;
-	void *image_loader_data;
-	struct purgatory_info purgatory_info;
-};
-
-typedef u8 uint8_t;
-
-typedef u64 uint64_t;
-
-struct kexec_buf {
-	struct kimage *image;
-	void *buffer;
-	long unsigned int bufsz;
-	long unsigned int mem;
-	long unsigned int memsz;
-	long unsigned int buf_align;
-	long unsigned int buf_min;
-	long unsigned int buf_max;
-	bool top_down;
-};
-
-struct crash_mem_range {
-	u64 start;
-	u64 end;
-};
-
-struct crash_mem {
-	unsigned int max_nr_ranges;
-	unsigned int nr_ranges;
-	struct crash_mem_range ranges[0];
-};
-
-typedef __be32 fdt32_t;
-
-typedef __be64 fdt64_t;
-
-struct fdt_header {
-	fdt32_t magic;
-	fdt32_t totalsize;
-	fdt32_t off_dt_struct;
-	fdt32_t off_dt_strings;
-	fdt32_t off_mem_rsvmap;
-	fdt32_t version;
-	fdt32_t last_comp_version;
-	fdt32_t boot_cpuid_phys;
-	fdt32_t size_dt_strings;
-	fdt32_t size_dt_struct;
-};
-
-enum key_being_used_for {
-	VERIFYING_MODULE_SIGNATURE = 0,
-	VERIFYING_FIRMWARE_SIGNATURE = 1,
-	VERIFYING_KEXEC_PE_SIGNATURE = 2,
-	VERIFYING_KEY_SIGNATURE = 3,
-	VERIFYING_KEY_SELF_SIGNATURE = 4,
-	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
-	NR__KEY_BEING_USED_FOR = 6,
-};
-
-struct arm64_image_header {
-	__le32 code0;
-	__le32 code1;
-	__le64 text_offset;
-	__le64 image_size;
-	__le64 flags;
-	__le64 res2;
-	__le64 res3;
-	__le64 res4;
-	__le32 magic;
-	__le32 res5;
-};
-
-typedef struct {
-	long unsigned int val;
-} swp_entry_t;
-
-typedef u32 probe_opcode_t;
-
-typedef void probes_handler_t(u32, long int, struct pt_regs *);
-
-struct arch_probe_insn {
-	probe_opcode_t *insn;
-	pstate_check_t *pstate_cc;
-	probes_handler_t *handler;
-	long unsigned int restore;
-};
-
-typedef u32 kprobe_opcode_t;
-
-struct arch_specific_insn {
-	struct arch_probe_insn api;
-};
-
-struct kprobe;
-
-struct prev_kprobe {
-	struct kprobe *kp;
-	unsigned int status;
-};
-
-typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
-
-typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
-
-typedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);
-
-struct kprobe {
-	struct hlist_node hlist;
-	struct list_head list;
-	long unsigned int nmissed;
-	kprobe_opcode_t *addr;
-	const char *symbol_name;
-	unsigned int offset;
-	kprobe_pre_handler_t pre_handler;
-	kprobe_post_handler_t post_handler;
-	kprobe_fault_handler_t fault_handler;
-	kprobe_opcode_t opcode;
-	struct arch_specific_insn ainsn;
-	u32 flags;
-};
-
-struct kprobe_step_ctx {
-	long unsigned int ss_pending;
-	long unsigned int match_addr;
-};
-
-struct kprobe_ctlblk {
-	unsigned int kprobe_status;
-	long unsigned int saved_irqflag;
-	struct prev_kprobe prev_kprobe;
-	struct kprobe_step_ctx ss_ctx;
-};
-
-struct kretprobe_instance;
-
-typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
-
-struct kretprobe;
-
-struct kretprobe_instance {
-	union {
-		struct hlist_node hlist;
-		struct callback_head rcu;
-	};
-	struct kretprobe *rp;
-	kprobe_opcode_t *ret_addr;
-	struct task_struct *task;
-	void *fp;
-	char data[0];
-};
-
-struct kretprobe {
-	struct kprobe kp;
-	kretprobe_handler_t handler;
-	kretprobe_handler_t entry_handler;
-	int maxactive;
-	int nmissed;
-	size_t data_size;
-	struct hlist_head free_instances;
-	raw_spinlock_t lock;
-};
-
-struct kprobe_insn_cache {
-	struct mutex mutex;
-	void * (*alloc)();
-	void (*free)(void *);
-	const char *sym;
-	struct list_head pages;
-	size_t insn_size;
-	int nr_garbage;
-};
-
-enum probe_insn {
-	INSN_REJECTED = 0,
-	INSN_GOOD_NO_SLOT = 1,
-	INSN_GOOD = 2,
-};
-
-enum aarch64_insn_special_register {
-	AARCH64_INSN_SPCLREG_SPSR_EL1 = 49664,
-	AARCH64_INSN_SPCLREG_ELR_EL1 = 49665,
-	AARCH64_INSN_SPCLREG_SP_EL0 = 49672,
-	AARCH64_INSN_SPCLREG_SPSEL = 49680,
-	AARCH64_INSN_SPCLREG_CURRENTEL = 49682,
-	AARCH64_INSN_SPCLREG_DAIF = 55825,
-	AARCH64_INSN_SPCLREG_NZCV = 55824,
-	AARCH64_INSN_SPCLREG_FPCR = 55840,
-	AARCH64_INSN_SPCLREG_DSPSR_EL0 = 55848,
-	AARCH64_INSN_SPCLREG_DLR_EL0 = 55849,
-	AARCH64_INSN_SPCLREG_SPSR_EL2 = 57856,
-	AARCH64_INSN_SPCLREG_ELR_EL2 = 57857,
-	AARCH64_INSN_SPCLREG_SP_EL1 = 57864,
-	AARCH64_INSN_SPCLREG_SPSR_INQ = 57880,
-	AARCH64_INSN_SPCLREG_SPSR_ABT = 57881,
-	AARCH64_INSN_SPCLREG_SPSR_UND = 57882,
-	AARCH64_INSN_SPCLREG_SPSR_FIQ = 57883,
-	AARCH64_INSN_SPCLREG_SPSR_EL3 = 61952,
-	AARCH64_INSN_SPCLREG_ELR_EL3 = 61953,
-	AARCH64_INSN_SPCLREG_SP_EL2 = 61968,
-};
-
-struct arch_uprobe {
-	union {
-		u8 insn[4];
-		u8 ixol[4];
-	};
-	struct arch_probe_insn api;
-	bool simulate;
-};
-
-enum rp_check {
-	RP_CHECK_CALL = 0,
-	RP_CHECK_CHAIN_CALL = 1,
-	RP_CHECK_RET = 2,
-};
-
-struct iommu_fault_param;
-
-struct iommu_fwspec;
-
-struct dev_iommu {
-	struct mutex lock;
-	struct iommu_fault_param *fault_param;
-	struct iommu_fwspec *fwspec;
-	struct iommu_device *iommu_dev;
-	void *priv;
-};
-
-struct sg_table {
-	struct scatterlist *sgl;
-	unsigned int nents;
-	unsigned int orig_nents;
-};
-
-struct of_phandle_args {
-	struct device_node *np;
-	int args_count;
-	uint32_t args[16];
-};
-
-struct iommu_fault_unrecoverable {
-	__u32 reason;
-	__u32 flags;
-	__u32 pasid;
-	__u32 perm;
-	__u64 addr;
-	__u64 fetch_addr;
-};
-
-struct iommu_fault_page_request {
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 perm;
-	__u64 addr;
-	__u64 private_data[2];
-};
-
-struct iommu_fault {
-	__u32 type;
-	__u32 padding;
-	union {
-		struct iommu_fault_unrecoverable event;
-		struct iommu_fault_page_request prm;
-		__u8 padding2[56];
-	};
-};
-
-struct iommu_page_response {
-	__u32 argsz;
-	__u32 version;
-	__u32 flags;
-	__u32 pasid;
-	__u32 grpid;
-	__u32 code;
-};
-
-struct iommu_inv_addr_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-	__u64 addr;
-	__u64 granule_size;
-	__u64 nb_granules;
-};
-
-struct iommu_inv_pasid_info {
-	__u32 flags;
-	__u32 archid;
-	__u64 pasid;
-};
-
-struct iommu_cache_invalidate_info {
-	__u32 argsz;
-	__u32 version;
-	__u8 cache;
-	__u8 granularity;
-	__u8 padding[6];
-	union {
-		struct iommu_inv_pasid_info pasid_info;
-		struct iommu_inv_addr_info addr_info;
-	} granu;
-};
-
-struct iommu_gpasid_bind_data_vtd {
-	__u64 flags;
-	__u32 pat;
-	__u32 emt;
-};
-
-struct iommu_gpasid_bind_data {
-	__u32 argsz;
-	__u32 version;
-	__u32 format;
-	__u32 addr_width;
-	__u64 flags;
-	__u64 gpgd;
-	__u64 hpasid;
-	__u64 gpasid;
-	__u8 padding[8];
-	union {
-		struct iommu_gpasid_bind_data_vtd vtd;
-	} vendor;
-};
-
-typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
-
-struct iommu_domain_geometry {
-	dma_addr_t aperture_start;
-	dma_addr_t aperture_end;
-	bool force_aperture;
-};
-
-struct iommu_domain {
-	unsigned int type;
-	const struct iommu_ops *ops;
-	long unsigned int pgsize_bitmap;
-	iommu_fault_handler_t handler;
-	void *handler_token;
-	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
-};
-
-typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
-
-enum iommu_resv_type {
-	IOMMU_RESV_DIRECT = 0,
-	IOMMU_RESV_DIRECT_RELAXABLE = 1,
-	IOMMU_RESV_RESERVED = 2,
-	IOMMU_RESV_MSI = 3,
-	IOMMU_RESV_SW_MSI = 4,
-};
-
-struct iommu_resv_region {
-	struct list_head list;
-	phys_addr_t start;
-	size_t length;
-	int prot;
-	enum iommu_resv_type type;
-};
-
-struct iommu_iotlb_gather {
-	long unsigned int start;
-	long unsigned int end;
-	size_t pgsize;
-};
-
-struct iommu_device {
-	struct list_head list;
-	const struct iommu_ops *ops;
-	struct fwnode_handle *fwnode;
-	struct device *dev;
-};
-
-struct iommu_sva {
-	struct device *dev;
-};
-
-struct iommu_fault_event {
-	struct iommu_fault fault;
-	struct list_head list;
-};
-
-struct iommu_fault_param {
-	iommu_dev_fault_handler_t handler;
-	void *data;
-	struct list_head faults;
-	struct mutex lock;
-};
-
-struct iommu_fwspec {
-	const struct iommu_ops *ops;
-	struct fwnode_handle *iommu_fwnode;
-	u32 flags;
-	u32 num_pasid_bits;
-	unsigned int num_ids;
-	u32 ids[0];
-};
-
-enum xen_domain_type {
-	XEN_NATIVE = 0,
-	XEN_PV_DOMAIN = 1,
-	XEN_HVM_DOMAIN = 2,
-};
-
-struct hstate {
-	int next_nid_to_alloc;
-	int next_nid_to_free;
-	unsigned int order;
-	long unsigned int mask;
-	long unsigned int max_huge_pages;
-	long unsigned int nr_huge_pages;
-	long unsigned int free_huge_pages;
-	long unsigned int resv_huge_pages;
-	long unsigned int surplus_huge_pages;
-	long unsigned int nr_overcommit_huge_pages;
-	struct list_head hugepage_activelist;
-	struct list_head hugepage_freelists[128];
-	unsigned int nr_huge_pages_node[128];
-	unsigned int free_huge_pages_node[128];
-	unsigned int surplus_huge_pages_node[128];
-	struct cftype cgroup_files_dfl[7];
-	struct cftype cgroup_files_legacy[9];
-	char name[32];
-};
-
-struct fault_info {
-	int (*fn)(long unsigned int, unsigned int, struct pt_regs *);
-	int sig;
-	int code;
-	const char *name;
-};
-
-enum swiotlb_force {
-	SWIOTLB_NORMAL = 0,
-	SWIOTLB_FORCE = 1,
-	SWIOTLB_NO_FORCE = 2,
-};
-
-struct mhp_params {
-	struct vmem_altmap *altmap;
-	pgprot_t pgprot;
-};
-
-struct memory_notify {
-	long unsigned int start_pfn;
-	long unsigned int nr_pages;
-	int status_change_nid_normal;
-	int status_change_nid_high;
-	int status_change_nid;
-};
-
-struct page_change_data {
-	pgprot_t set_mask;
-	pgprot_t clear_mask;
-};
-
-struct hugepage_subpool {
-	spinlock_t lock;
-	long int count;
-	long int max_hpages;
-	long int used_hpages;
-	struct hstate *hstate;
-	long int min_hpages;
-	long int rsv_hpages;
-};
-
-struct hugetlbfs_sb_info {
-	long int max_inodes;
-	long int free_inodes;
-	spinlock_t stat_lock;
-	struct hstate *hstate;
-	struct hugepage_subpool *spool;
-	kuid_t uid;
-	kgid_t gid;
-	umode_t mode;
-};
-
-typedef __kernel_long_t __kernel_off_t;
-
-typedef __kernel_off_t off_t;
-
-enum {
-	BPF_REG_0 = 0,
-	BPF_REG_1 = 1,
-	BPF_REG_2 = 2,
-	BPF_REG_3 = 3,
-	BPF_REG_4 = 4,
-	BPF_REG_5 = 5,
-	BPF_REG_6 = 6,
-	BPF_REG_7 = 7,
-	BPF_REG_8 = 8,
-	BPF_REG_9 = 9,
-	BPF_REG_10 = 10,
-	__MAX_BPF_REG = 11,
-};
-
-enum {
-	DUMP_PREFIX_NONE = 0,
-	DUMP_PREFIX_ADDRESS = 1,
-	DUMP_PREFIX_OFFSET = 2,
-};
-
-struct bpf_binary_header {
-	u32 pages;
-	int: 32;
-	u8 image[0];
-};
-
-struct jit_ctx {
-	const struct bpf_prog *prog;
-	int idx;
-	int epilogue_offset;
-	int *offset;
-	int exentry_idx;
-	__le32 *image;
-	u32 stack_size;
-};
-
-struct arm64_jit_data {
-	struct bpf_binary_header *header;
-	u8 *image;
-	struct jit_ctx ctx;
-};
-
-typedef long unsigned int ulong;
-
-typedef u64 gpa_t;
-
-typedef u64 gfn_t;
-
-typedef u64 hpa_t;
-
-typedef u64 hfn_t;
-
-typedef hfn_t kvm_pfn_t;
-
-struct kvm_memory_slot;
-
-struct gfn_to_hva_cache {
-	u64 generation;
-	gpa_t gpa;
-	long unsigned int hva;
-	long unsigned int len;
-	struct kvm_memory_slot *memslot;
-};
-
-struct kvm_arch_memory_slot {};
-
-struct kvm_memory_slot {
-	gfn_t base_gfn;
-	long unsigned int npages;
-	long unsigned int *dirty_bitmap;
-	struct kvm_arch_memory_slot arch;
-	long unsigned int userspace_addr;
-	u32 flags;
-	short int id;
-	u16 as_id;
-};
-
-struct gfn_to_pfn_cache {
-	u64 generation;
-	gfn_t gfn;
-	kvm_pfn_t pfn;
-	bool dirty;
-};
-
-struct kvm_mmu_memory_cache {
-	int nobjs;
-	gfp_t gfp_zero;
-	struct kmem_cache *kmem_cache;
-	void *objects[40];
-};
-
-struct kvm_vcpu;
-
-struct kvm_io_device;
-
-struct kvm_io_device_ops {
-	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
-	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
-	void (*destructor)(struct kvm_io_device *);
-};
-
-struct preempt_ops;
-
-struct preempt_notifier {
-	struct hlist_node link;
-	struct preempt_ops *ops;
-};
-
-struct kvm_vcpu_stat {
-	u64 halt_successful_poll;
-	u64 halt_attempted_poll;
-	u64 halt_poll_success_ns;
-	u64 halt_poll_fail_ns;
-	u64 halt_poll_invalid;
-	u64 halt_wakeup;
-	u64 hvc_exit_stat;
-	u64 wfe_exit_stat;
-	u64 wfi_exit_stat;
-	u64 mmio_exit_user;
-	u64 mmio_exit_kernel;
-	u64 exits;
-};
-
-struct kvm_mmio_fragment {
-	gpa_t gpa;
-	void *data;
-	unsigned int len;
-};
-
-struct kvm_cpu_context {
-	struct user_pt_regs regs;
-	u64 spsr_abt;
-	u64 spsr_und;
-	u64 spsr_irq;
-	u64 spsr_fiq;
-	struct user_fpsimd_state fp_regs;
-	union {
-		u64 sys_regs[119];
-		u32 copro[238];
-	};
-	struct kvm_vcpu *__hyp_running_vcpu;
-};
-
-struct kvm_vcpu_fault_info {
-	u32 esr_el2;
-	u64 far_el2;
-	u64 hpfar_el2;
-	u64 disr_el1;
-};
-
-struct kvm_guest_debug_arch {
-	__u64 dbg_bcr[16];
-	__u64 dbg_bvr[16];
-	__u64 dbg_wcr[16];
-	__u64 dbg_wvr[16];
-};
-
-struct vgic_v2_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_apr;
-	u32 vgic_lr[64];
-	unsigned int used_lrs;
-};
-
-struct its_vm;
-
-struct its_vpe {
-	struct page *vpt_page;
-	struct its_vm *its_vm;
-	atomic_t vlpi_count;
-	int irq;
-	irq_hw_number_t vpe_db_lpi;
-	bool resident;
-	union {
-		struct {
-			int vpe_proxy_event;
-			bool idai;
-		};
-		struct {
-			struct fwnode_handle *fwnode;
-			struct irq_domain *sgi_domain;
-			struct {
-				u8 priority;
-				bool enabled;
-				bool group;
-			} sgi_config[16];
-			atomic_t vmapp_count;
-		};
-	};
-	raw_spinlock_t vpe_lock;
-	u16 col_idx;
-	u16 vpe_id;
-	bool pending_last;
-};
-
-struct vgic_v3_cpu_if {
-	u32 vgic_hcr;
-	u32 vgic_vmcr;
-	u32 vgic_sre;
-	u32 vgic_ap0r[4];
-	u32 vgic_ap1r[4];
-	u64 vgic_lr[16];
-	struct its_vpe its_vpe;
-	unsigned int used_lrs;
-};
-
-enum vgic_irq_config {
-	VGIC_CONFIG_EDGE = 0,
-	VGIC_CONFIG_LEVEL = 1,
-};
-
-struct vgic_irq {
-	raw_spinlock_t irq_lock;
-	struct list_head lpi_list;
-	struct list_head ap_list;
-	struct kvm_vcpu *vcpu;
-	struct kvm_vcpu *target_vcpu;
-	u32 intid;
-	bool line_level;
-	bool pending_latch;
-	bool active;
-	bool enabled;
-	bool hw;
-	struct kref refcount;
-	u32 hwintid;
-	unsigned int host_irq;
-	union {
-		u8 targets;
-		u32 mpidr;
-	};
-	u8 source;
-	u8 active_source;
-	u8 priority;
-	u8 group;
-	enum vgic_irq_config config;
-	bool (*get_input_level)(int);
-	void *owner;
-};
-
-enum iodev_type {
-	IODEV_CPUIF = 0,
-	IODEV_DIST = 1,
-	IODEV_REDIST = 2,
-	IODEV_ITS = 3,
-};
-
-struct kvm_io_device {
-	const struct kvm_io_device_ops *ops;
-};
-
-struct vgic_its;
-
-struct vgic_register_region;
-
-struct vgic_io_device {
-	gpa_t base_addr;
-	union {
-		struct kvm_vcpu *redist_vcpu;
-		struct vgic_its *its;
-	};
-	const struct vgic_register_region *regions;
-	enum iodev_type iodev_type;
-	int nr_regions;
-	struct kvm_io_device dev;
-};
-
-struct vgic_redist_region;
-
-struct vgic_cpu {
-	union {
-		struct vgic_v2_cpu_if vgic_v2;
-		struct vgic_v3_cpu_if vgic_v3;
-	};
-	struct vgic_irq private_irqs[32];
-	raw_spinlock_t ap_list_lock;
-	struct list_head ap_list_head;
-	struct vgic_io_device rd_iodev;
-	struct vgic_redist_region *rdreg;
-	u64 pendbaser;
-	bool lpis_enabled;
-	u32 num_pri_bits;
-	u32 num_id_bits;
-};
-
-struct kvm_irq_level {
-	union {
-		__u32 irq;
-		__s32 status;
-	};
-	__u32 level;
-};
-
-struct arch_timer_context {
-	struct kvm_vcpu *vcpu;
-	struct kvm_irq_level irq;
-	struct hrtimer hrtimer;
-	bool loaded;
-	u32 host_timer_irq;
-	u32 host_timer_irq_flags;
-};
-
-struct arch_timer_cpu {
-	struct arch_timer_context timers[2];
-	struct hrtimer bg_timer;
-	bool enabled;
-};
-
-struct kvm_pmc {
-	u8 idx;
-	struct perf_event *perf_event;
-};
-
-struct kvm_pmu {
-	int irq_num;
-	struct kvm_pmc pmc[32];
-	long unsigned int chained[1];
-	bool ready;
-	bool created;
-	bool irq_level;
-	struct irq_work overflow_work;
-};
-
-struct vcpu_reset_state {
-	long unsigned int pc;
-	long unsigned int r0;
-	bool be;
-	bool reset;
-};
-
-struct kvm_s2_mmu;
-
-struct kvm_vcpu_arch {
-	struct kvm_cpu_context ctxt;
-	void *sve_state;
-	unsigned int sve_max_vl;
-	struct kvm_s2_mmu *hw_mmu;
-	u64 hcr_el2;
-	u32 mdcr_el2;
-	struct kvm_vcpu_fault_info fault;
-	u64 workaround_flags;
-	u64 flags;
-	struct kvm_guest_debug_arch *debug_ptr;
-	struct kvm_guest_debug_arch vcpu_debug_state;
-	struct kvm_guest_debug_arch external_debug_state;
-	struct thread_info *host_thread_info;
-	struct user_fpsimd_state *host_fpsimd_state;
-	struct {
-		struct kvm_guest_debug_arch regs;
-		u64 pmscr_el1;
-	} host_debug_state;
-	struct vgic_cpu vgic_cpu;
-	struct arch_timer_cpu timer_cpu;
-	struct kvm_pmu pmu;
-	struct {
-		u32 mdscr_el1;
-	} guest_debug_preserved;
-	bool power_off;
-	bool pause;
-	struct kvm_mmu_memory_cache mmu_page_cache;
-	int target;
-	long unsigned int features[1];
-	bool has_run_once;
-	u64 vsesr_el2;
-	struct vcpu_reset_state reset_state;
-	bool sysregs_loaded_on_cpu;
-	struct {
-		u64 last_steal;
-		gpa_t base;
-	} steal;
-};
-
-struct kvm;
-
-struct kvm_run;
-
-struct kvm_vcpu {
-	struct kvm *kvm;
-	struct preempt_notifier preempt_notifier;
-	int cpu;
-	int vcpu_id;
-	int vcpu_idx;
-	int srcu_idx;
-	int mode;
-	u64 requests;
-	long unsigned int guest_debug;
-	int pre_pcpu;
-	struct list_head blocked_vcpu_list;
-	struct mutex mutex;
-	struct kvm_run *run;
-	struct rcuwait wait;
-	struct pid *pid;
-	int sigset_active;
-	sigset_t sigset;
-	struct kvm_vcpu_stat stat;
-	unsigned int halt_poll_ns;
-	bool valid_wakeup;
-	int mmio_needed;
-	int mmio_read_completed;
-	int mmio_is_write;
-	int mmio_cur_fragment;
-	int mmio_nr_fragments;
-	struct kvm_mmio_fragment mmio_fragments[2];
-	struct {
-		bool in_spin_loop;
-		bool dy_eligible;
-	} spin_loop;
-	bool preempted;
-	bool ready;
-	struct kvm_vcpu_arch arch;
-};
-
-struct preempt_ops {
-	void (*sched_in)(struct preempt_notifier *, int);
-	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
-};
-
-struct trace_print_flags {
-	long unsigned int mask;
-	const char *name;
-};
-
-enum mmu_notifier_event {
-	MMU_NOTIFY_UNMAP = 0,
-	MMU_NOTIFY_CLEAR = 1,
-	MMU_NOTIFY_PROTECTION_VMA = 2,
-	MMU_NOTIFY_PROTECTION_PAGE = 3,
-	MMU_NOTIFY_SOFT_DIRTY = 4,
-	MMU_NOTIFY_RELEASE = 5,
-	MMU_NOTIFY_MIGRATE = 6,
-};
-
-struct mmu_notifier;
-
-struct mmu_notifier_range;
-
-struct mmu_notifier_ops {
-	void (*release)(struct mmu_notifier *, struct mm_struct *);
-	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
-	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
-	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
-	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
-	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
-	void (*free_notifier)(struct mmu_notifier *);
-};
-
-struct mmu_notifier {
-	struct hlist_node hlist;
-	const struct mmu_notifier_ops *ops;
-	struct mm_struct *mm;
-	struct callback_head rcu;
-	unsigned int users;
-};
-
-struct mmu_notifier_range {
-	struct vm_area_struct *vma;
-	struct mm_struct *mm;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int flags;
-	enum mmu_notifier_event event;
-	void *migrate_pgmap_owner;
-};
-
-enum kobject_action {
-	KOBJ_ADD = 0,
-	KOBJ_REMOVE = 1,
-	KOBJ_CHANGE = 2,
-	KOBJ_MOVE = 3,
-	KOBJ_ONLINE = 4,
-	KOBJ_OFFLINE = 5,
-	KOBJ_BIND = 6,
-	KOBJ_UNBIND = 7,
-};
-
-struct kvm_regs {
-	struct user_pt_regs regs;
-	__u64 sp_el1;
-	__u64 elr_el1;
-	__u64 spsr[5];
-	long: 64;
-	struct user_fpsimd_state fp_regs;
-};
-
-struct kvm_sregs {};
-
-struct kvm_fpu {};
-
-struct kvm_debug_exit_arch {
-	__u32 hsr;
-	__u64 far;
-};
-
-struct kvm_sync_regs {
-	__u64 device_irq_level;
-};
-
-struct kvm_userspace_memory_region {
-	__u32 slot;
-	__u32 flags;
-	__u64 guest_phys_addr;
-	__u64 memory_size;
-	__u64 userspace_addr;
-};
-
-struct kvm_hyperv_exit {
-	__u32 type;
-	__u32 pad1;
-	union {
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 evt_page;
-			__u64 msg_page;
-		} synic;
-		struct {
-			__u64 input;
-			__u64 result;
-			__u64 params[2];
-		} hcall;
-		struct {
-			__u32 msr;
-			__u32 pad2;
-			__u64 control;
-			__u64 status;
-			__u64 send_page;
-			__u64 recv_page;
-			__u64 pending_page;
-		} syndbg;
-	} u;
-};
-
-struct kvm_run {
-	__u8 request_interrupt_window;
-	__u8 immediate_exit;
-	__u8 padding1[6];
-	__u32 exit_reason;
-	__u8 ready_for_interrupt_injection;
-	__u8 if_flag;
-	__u16 flags;
-	__u64 cr8;
-	__u64 apic_base;
-	union {
-		struct {
-			__u64 hardware_exit_reason;
-		} hw;
-		struct {
-			__u64 hardware_entry_failure_reason;
-			__u32 cpu;
-		} fail_entry;
-		struct {
-			__u32 exception;
-			__u32 error_code;
-		} ex;
-		struct {
-			__u8 direction;
-			__u8 size;
-			__u16 port;
-			__u32 count;
-			__u64 data_offset;
-		} io;
-		struct {
-			struct kvm_debug_exit_arch arch;
-		} debug;
-		struct {
-			__u64 phys_addr;
-			__u8 data[8];
-			__u32 len;
-			__u8 is_write;
-		} mmio;
-		struct {
-			__u64 nr;
-			__u64 args[6];
-			__u64 ret;
-			__u32 longmode;
-			__u32 pad;
-		} hypercall;
-		struct {
-			__u64 rip;
-			__u32 is_write;
-			__u32 pad;
-		} tpr_access;
-		struct {
-			__u8 icptcode;
-			__u16 ipa;
-			__u32 ipb;
-		} s390_sieic;
-		__u64 s390_reset_flags;
-		struct {
-			__u64 trans_exc_code;
-			__u32 pgm_code;
-		} s390_ucontrol;
-		struct {
-			__u32 dcrn;
-			__u32 data;
-			__u8 is_write;
-		} dcr;
-		struct {
-			__u32 suberror;
-			__u32 ndata;
-			__u64 data[16];
-		} internal;
-		struct {
-			__u64 gprs[32];
-		} osi;
-		struct {
-			__u64 nr;
-			__u64 ret;
-			__u64 args[9];
-		} papr_hcall;
-		struct {
-			__u16 subchannel_id;
-			__u16 subchannel_nr;
-			__u32 io_int_parm;
-			__u32 io_int_word;
-			__u32 ipb;
-			__u8 dequeued;
-		} s390_tsch;
-		struct {
-			__u32 epr;
-		} epr;
-		struct {
-			__u32 type;
-			__u64 flags;
-		} system_event;
-		struct {
-			__u64 addr;
-			__u8 ar;
-			__u8 reserved;
-			__u8 fc;
-			__u8 sel1;
-			__u16 sel2;
-		} s390_stsi;
-		struct {
-			__u8 vector;
-		} eoi;
-		struct kvm_hyperv_exit hyperv;
-		struct {
-			__u64 esr_iss;
-			__u64 fault_ipa;
-		} arm_nisv;
-		struct {
-			__u8 error;
-			__u8 pad[7];
-			__u32 reason;
-			__u32 index;
-			__u64 data;
-		} msr;
-		char padding[256];
-	};
-	__u64 kvm_valid_regs;
-	__u64 kvm_dirty_regs;
-	union {
-		struct kvm_sync_regs regs;
-		char padding[2048];
-	} s;
-};
-
-struct kvm_coalesced_mmio_zone {
-	__u64 addr;
-	__u32 size;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-};
-
-struct kvm_coalesced_mmio {
-	__u64 phys_addr;
-	__u32 len;
-	union {
-		__u32 pad;
-		__u32 pio;
-	};
-	__u8 data[8];
-};
-
-struct kvm_coalesced_mmio_ring {
-	__u32 first;
-	__u32 last;
-	struct kvm_coalesced_mmio coalesced_mmio[0];
-};
-
-struct kvm_translation {
-	__u64 linear_address;
-	__u64 physical_address;
-	__u8 valid;
-	__u8 writeable;
-	__u8 usermode;
-	__u8 pad[5];
-};
-
-struct kvm_dirty_log {
-	__u32 slot;
-	__u32 padding1;
-	union {
-		void *dirty_bitmap;
-		__u64 padding2;
-	};
-};
-
-struct kvm_clear_dirty_log {
-	__u32 slot;
-	__u32 num_pages;
-	__u64 first_page;
-	union {
-		void *dirty_bitmap;
-		__u64 padding2;
-	};
-};
-
-struct kvm_signal_mask {
-	__u32 len;
-	__u8 sigset[0];
-};
-
-struct kvm_mp_state {
-	__u32 mp_state;
-};
-
-struct kvm_guest_debug {
-	__u32 control;
-	__u32 pad;
-	struct kvm_guest_debug_arch arch;
-};
-
-struct kvm_ioeventfd {
-	__u64 datamatch;
-	__u64 addr;
-	__u32 len;
-	__s32 fd;
-	__u32 flags;
-	__u8 pad[36];
-};
-
-struct kvm_enable_cap {
-	__u32 cap;
-	__u32 flags;
-	__u64 args[4];
-	__u8 pad[64];
-};
-
-struct kvm_irq_routing_irqchip {
-	__u32 irqchip;
-	__u32 pin;
-};
-
-struct kvm_irq_routing_msi {
-	__u32 address_lo;
-	__u32 address_hi;
-	__u32 data;
-	union {
-		__u32 pad;
-		__u32 devid;
-	};
-};
-
-struct kvm_irq_routing_s390_adapter {
-	__u64 ind_addr;
-	__u64 summary_addr;
-	__u64 ind_offset;
-	__u32 summary_offset;
-	__u32 adapter_id;
-};
-
-struct kvm_irq_routing_hv_sint {
-	__u32 vcpu;
-	__u32 sint;
-};
-
-struct kvm_irq_routing_entry {
-	__u32 gsi;
-	__u32 type;
-	__u32 flags;
-	__u32 pad;
-	union {
-		struct kvm_irq_routing_irqchip irqchip;
-		struct kvm_irq_routing_msi msi;
-		struct kvm_irq_routing_s390_adapter adapter;
-		struct kvm_irq_routing_hv_sint hv_sint;
-		__u32 pad[8];
-	} u;
-};
-
-struct kvm_irq_routing {
-	__u32 nr;
-	__u32 flags;
-	struct kvm_irq_routing_entry entries[0];
-};
-
-struct kvm_irqfd {
-	__u32 fd;
-	__u32 gsi;
-	__u32 flags;
-	__u32 resamplefd;
-	__u8 pad[16];
-};
-
-struct kvm_msi {
-	__u32 address_lo;
-	__u32 address_hi;
-	__u32 data;
-	__u32 flags;
-	__u32 devid;
-	__u8 pad[12];
-};
-
-struct kvm_create_device {
-	__u32 type;
-	__u32 fd;
-	__u32 flags;
-};
-
-struct kvm_device_attr {
-	__u32 flags;
-	__u32 group;
-	__u64 attr;
-	__u64 addr;
-};
-
-enum kvm_device_type {
-	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
-	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
-	KVM_DEV_TYPE_XICS = 3,
-	KVM_DEV_TYPE_VFIO = 4,
-	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
-	KVM_DEV_TYPE_FLIC = 6,
-	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
-	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
-	KVM_DEV_TYPE_XIVE = 9,
-	KVM_DEV_TYPE_ARM_PV_TIME = 10,
-	KVM_DEV_TYPE_MAX = 11,
-};
-
-struct its_vm {
-	struct fwnode_handle *fwnode;
-	struct irq_domain *domain;
-	struct page *vprop_page;
-	struct its_vpe **vpes;
-	int nr_vpes;
-	irq_hw_number_t db_lpi_base;
-	long unsigned int *db_bitmap;
-	int nr_db_lpis;
-	u32 vlpi_count[16];
-};
-
-struct kvm_device;
-
-struct vgic_its {
-	gpa_t vgic_its_base;
-	bool enabled;
-	struct vgic_io_device iodev;
-	struct kvm_device *dev;
-	u64 baser_device_table;
-	u64 baser_coll_table;
-	struct mutex cmd_lock;
-	u64 cbaser;
-	u32 creadr;
-	u32 cwriter;
-	u32 abi_rev;
-	struct mutex its_lock;
-	struct list_head device_list;
-	struct list_head collection_list;
-};
-
-struct vgic_register_region {
-	unsigned int reg_offset;
-	unsigned int len;
-	unsigned int bits_per_irq;
-	unsigned int access_flags;
-	union {
-		long unsigned int (*read)(struct kvm_vcpu *, gpa_t, unsigned int);
-		long unsigned int (*its_read)(struct kvm *, struct vgic_its *, gpa_t, unsigned int);
-	};
-	union {
-		void (*write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		void (*its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-	long unsigned int (*uaccess_read)(struct kvm_vcpu *, gpa_t, unsigned int);
-	union {
-		int (*uaccess_write)(struct kvm_vcpu *, gpa_t, unsigned int, long unsigned int);
-		int (*uaccess_its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, long unsigned int);
-	};
-};
-
-struct kvm_device_ops;
-
-struct kvm_device {
-	const struct kvm_device_ops *ops;
-	struct kvm *kvm;
-	void *private;
-	struct list_head vm_node;
-};
-
-struct vgic_redist_region {
-	u32 index;
-	gpa_t base;
-	u32 count;
-	u32 free_index;
-	struct list_head list;
-};
-
-struct vgic_state_iter;
-
-struct vgic_dist {
-	bool in_kernel;
-	bool ready;
-	bool initialized;
-	u32 vgic_model;
-	u32 implementation_rev;
-	bool v2_groups_user_writable;
-	bool msis_require_devid;
-	int nr_spis;
-	gpa_t vgic_dist_base;
-	union {
-		gpa_t vgic_cpu_base;
-		struct list_head rd_regions;
-	};
-	bool enabled;
-	bool nassgireq;
-	struct vgic_irq *spis;
-	struct vgic_io_device dist_iodev;
-	bool has_its;
-	u64 propbaser;
-	raw_spinlock_t lpi_list_lock;
-	struct list_head lpi_list_head;
-	int lpi_list_count;
-	struct list_head lpi_translation_cache;
-	struct vgic_state_iter *iter;
-	struct its_vm its_vm;
-};
-
-struct kvm_vmid {
-	u64 vmid_gen;
-	u32 vmid;
-};
-
-struct kvm_pgtable;
-
-struct kvm_s2_mmu {
-	struct kvm_vmid vmid;
-	phys_addr_t pgd_phys;
-	struct kvm_pgtable *pgt;
-	int *last_vcpu_ran;
-	struct kvm *kvm;
-};
-
-struct kvm_vm_stat {
-	ulong remote_tlb_flush;
-};
-
-struct kvm_arch {
-	struct kvm_s2_mmu mmu;
-	u64 vtcr;
-	int max_vcpus;
-	struct vgic_dist vgic;
-	u32 psci_version;
-	bool return_nisv_io_abort_to_user;
-	long unsigned int *pmu_filter;
-	unsigned int pmuver;
-	u8 pfr0_csv2;
-};
-
-struct kvm_memslots;
-
-struct kvm_io_bus;
-
-struct kvm_irq_routing_table;
-
-struct kvm_stat_data;
-
-struct kvm {
-	spinlock_t mmu_lock;
-	struct mutex slots_lock;
-	struct mm_struct *mm;
-	struct kvm_memslots *memslots[1];
-	struct kvm_vcpu *vcpus[512];
-	atomic_t online_vcpus;
-	int created_vcpus;
-	int last_boosted_vcpu;
-	struct list_head vm_list;
-	struct mutex lock;
-	struct kvm_io_bus *buses[4];
-	struct {
-		spinlock_t lock;
-		struct list_head items;
-		struct list_head resampler_list;
-		struct mutex resampler_lock;
-	} irqfds;
-	struct list_head ioeventfds;
-	struct kvm_vm_stat stat;
-	struct kvm_arch arch;
-	refcount_t users_count;
-	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
-	spinlock_t ring_lock;
-	struct list_head coalesced_zones;
-	struct mutex irq_lock;
-	struct kvm_irq_routing_table *irq_routing;
-	struct hlist_head irq_ack_notifier_list;
-	struct mmu_notifier mmu_notifier;
-	long unsigned int mmu_notifier_seq;
-	long int mmu_notifier_count;
-	long int tlbs_dirty;
-	struct list_head devices;
-	u64 manual_dirty_log_protect;
-	struct dentry *debugfs_dentry;
-	struct kvm_stat_data **debugfs_stat_data;
-	struct srcu_struct srcu;
-	struct srcu_struct irq_srcu;
-	pid_t userspace_pid;
-	unsigned int max_halt_poll_ns;
-};
-
-struct kvm_io_range {
-	gpa_t addr;
-	int len;
-	struct kvm_io_device *dev;
-};
-
-struct kvm_io_bus {
-	int dev_count;
-	int ioeventfd_count;
-	struct kvm_io_range range[0];
-};
-
-enum {
-	OUTSIDE_GUEST_MODE = 0,
-	IN_GUEST_MODE = 1,
-	EXITING_GUEST_MODE = 2,
-	READING_SHADOW_PAGE_TABLES = 3,
-};
-
-struct kvm_host_map {
-	struct page *page;
-	void *hva;
-	kvm_pfn_t pfn;
-	kvm_pfn_t gfn;
-};
-
-struct kvm_irq_routing_table {
-	int chip[988];
-	u32 nr_rt_entries;
-	struct hlist_head map[0];
-};
-
-struct kvm_memslots {
-	u64 generation;
-	short int id_to_index[512];
-	atomic_t lru_slot;
-	int used_slots;
-	struct kvm_memory_slot memslots[0];
-};
-
-struct kvm_stats_debugfs_item;
-
-struct kvm_stat_data {
-	struct kvm *kvm;
-	struct kvm_stats_debugfs_item *dbgfs_item;
-};
-
-enum kvm_mr_change {
-	KVM_MR_CREATE = 0,
-	KVM_MR_DELETE = 1,
-	KVM_MR_MOVE = 2,
-	KVM_MR_FLAGS_ONLY = 3,
-};
-
-enum kvm_stat_kind {
-	KVM_STAT_VM = 0,
-	KVM_STAT_VCPU = 1,
-};
-
-struct kvm_stats_debugfs_item {
-	const char *name;
-	int offset;
-	enum kvm_stat_kind kind;
-	int mode;
-};
-
-struct kvm_device_ops {
-	const char *name;
-	int (*create)(struct kvm_device *, u32);
-	void (*init)(struct kvm_device *);
-	void (*destroy)(struct kvm_device *);
-	void (*release)(struct kvm_device *);
-	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
-	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
-	long int (*ioctl)(struct kvm_device *, unsigned int, long unsigned int);
-	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
-};
-
-typedef int (*kvm_vm_thread_fn_t)(struct kvm *, uintptr_t);
-
-struct miscdevice {
-	int minor;
-	const char *name;
-	const struct file_operations *fops;
-	struct list_head list;
-	struct device *parent;
-	struct device *this_device;
-	const struct attribute_group **groups;
-	const char *nodename;
-	umode_t mode;
-};
-
 struct syscore_ops {
 	struct list_head node;
 	int (*suspend)();
@@ -19034,799 +16277,2075 @@
 	void (*shutdown)();
 };
 
-struct trace_event_raw_kvm_userspace_exit {
-	struct trace_entry ent;
-	__u32 reason;
-	int errno;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_vcpu_wakeup {
-	struct trace_entry ent;
-	__u64 ns;
-	bool waited;
-	bool valid;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_irq {
-	struct trace_entry ent;
-	unsigned int gsi;
-	int level;
-	int irq_source_id;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_ack_irq {
-	struct trace_entry ent;
-	unsigned int irqchip;
-	unsigned int pin;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_mmio {
-	struct trace_entry ent;
-	u32 type;
-	u32 len;
-	u64 gpa;
-	u64 val;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_fpu {
-	struct trace_entry ent;
-	u32 load;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_age_page {
-	struct trace_entry ent;
-	u64 hva;
-	u64 gfn;
-	u8 level;
-	u8 referenced;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_halt_poll_ns {
-	struct trace_entry ent;
-	bool grow;
-	unsigned int vcpu_id;
-	unsigned int new;
-	unsigned int old;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_userspace_exit {};
-
-struct trace_event_data_offsets_kvm_vcpu_wakeup {};
-
-struct trace_event_data_offsets_kvm_set_irq {};
-
-struct trace_event_data_offsets_kvm_ack_irq {};
-
-struct trace_event_data_offsets_kvm_mmio {};
-
-struct trace_event_data_offsets_kvm_fpu {};
-
-struct trace_event_data_offsets_kvm_age_page {};
-
-struct trace_event_data_offsets_kvm_halt_poll_ns {};
-
-typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
-
-typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
-
-typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
-
-typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
-
-typedef void (*btf_trace_kvm_fpu)(void *, int);
-
-typedef void (*btf_trace_kvm_age_page)(void *, ulong, int, struct kvm_memory_slot *, int);
-
-typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
-
-struct kvm_cpu_compat_check {
-	void *opaque;
-	int *ret;
-};
-
-struct kvm_vm_worker_thread_context {
-	struct kvm *kvm;
-	struct task_struct *parent;
-	struct completion init_done;
-	kvm_vm_thread_fn_t thread_fn;
-	uintptr_t data;
-	int err;
-};
-
-struct kvm_coalesced_mmio_dev {
-	struct list_head list;
-	struct kvm_io_device dev;
-	struct kvm *kvm;
-	struct kvm_coalesced_mmio_zone zone;
-};
-
-enum {
-	WORK_STRUCT_PENDING_BIT = 0,
-	WORK_STRUCT_DELAYED_BIT = 1,
-	WORK_STRUCT_PWQ_BIT = 2,
-	WORK_STRUCT_LINKED_BIT = 3,
-	WORK_STRUCT_COLOR_SHIFT = 4,
-	WORK_STRUCT_COLOR_BITS = 4,
-	WORK_STRUCT_PENDING = 1,
-	WORK_STRUCT_DELAYED = 2,
-	WORK_STRUCT_PWQ = 4,
-	WORK_STRUCT_LINKED = 8,
-	WORK_STRUCT_STATIC = 0,
-	WORK_NR_COLORS = 15,
-	WORK_NO_COLOR = 15,
-	WORK_CPU_UNBOUND = 128,
-	WORK_STRUCT_FLAG_BITS = 8,
-	WORK_OFFQ_FLAG_BASE = 4,
-	__WORK_OFFQ_CANCELING = 4,
-	WORK_OFFQ_CANCELING = 16,
-	WORK_OFFQ_FLAG_BITS = 1,
-	WORK_OFFQ_POOL_SHIFT = 5,
-	WORK_OFFQ_LEFT = 59,
-	WORK_OFFQ_POOL_BITS = 31,
-	WORK_OFFQ_POOL_NONE = 2147483647,
-	WORK_STRUCT_FLAG_MASK = 255,
-	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
-	WORK_STRUCT_NO_POOL = 4294967264,
-	WORK_BUSY_PENDING = 1,
-	WORK_BUSY_RUNNING = 2,
-	WORKER_DESC_LEN = 24,
-};
-
-struct irq_bypass_consumer;
-
-struct irq_bypass_producer {
-	struct list_head node;
-	void *token;
-	int irq;
-	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
-	void (*stop)(struct irq_bypass_producer *);
-	void (*start)(struct irq_bypass_producer *);
-};
-
-struct irq_bypass_consumer {
-	struct list_head node;
-	void *token;
-	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
-	void (*stop)(struct irq_bypass_consumer *);
-	void (*start)(struct irq_bypass_consumer *);
-};
-
-enum {
-	kvm_ioeventfd_flag_nr_datamatch = 0,
-	kvm_ioeventfd_flag_nr_pio = 1,
-	kvm_ioeventfd_flag_nr_deassign = 2,
-	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
-	kvm_ioeventfd_flag_nr_fast_mmio = 4,
-	kvm_ioeventfd_flag_nr_max = 5,
-};
-
-struct fd {
-	struct file *file;
-	unsigned int flags;
-};
-
-struct kvm_s390_adapter_int {
-	u64 ind_addr;
-	u64 summary_addr;
-	u64 ind_offset;
-	u32 summary_offset;
-	u32 adapter_id;
-};
-
-struct kvm_hv_sint {
-	u32 vcpu;
-	u32 sint;
-};
-
-struct kvm_kernel_irq_routing_entry {
-	u32 gsi;
-	u32 type;
-	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
-	union {
-		struct {
-			unsigned int irqchip;
-			unsigned int pin;
-		} irqchip;
-		struct {
-			u32 address_lo;
-			u32 address_hi;
-			u32 data;
-			u32 flags;
-			u32 devid;
-		} msi;
-		struct kvm_s390_adapter_int adapter;
-		struct kvm_hv_sint hv_sint;
-	};
-	struct hlist_node link;
-};
-
-struct kvm_irq_ack_notifier {
-	struct hlist_node link;
-	unsigned int gsi;
-	void (*irq_acked)(struct kvm_irq_ack_notifier *);
-};
-
-typedef struct poll_table_struct poll_table;
-
-struct kvm_kernel_irqfd_resampler {
-	struct kvm *kvm;
-	struct list_head list;
-	struct kvm_irq_ack_notifier notifier;
-	struct list_head link;
-};
-
-struct kvm_kernel_irqfd {
-	struct kvm *kvm;
-	wait_queue_entry_t wait;
-	struct kvm_kernel_irq_routing_entry irq_entry;
-	seqcount_spinlock_t irq_entry_sc;
-	int gsi;
-	struct work_struct inject;
-	struct kvm_kernel_irqfd_resampler *resampler;
-	struct eventfd_ctx *resamplefd;
-	struct list_head resampler_link;
-	struct eventfd_ctx *eventfd;
-	struct list_head list;
-	poll_table pt;
-	struct work_struct shutdown;
-	struct irq_bypass_consumer consumer;
-	struct irq_bypass_producer *producer;
-};
-
-struct _ioeventfd {
-	struct list_head list;
-	u64 addr;
-	int length;
-	struct eventfd_ctx *eventfd;
-	u64 datamatch;
-	struct kvm_io_device dev;
-	u8 bus_idx;
-	bool wildcard;
-};
-
-struct vfio_group;
-
-struct kvm_vfio_group {
-	struct list_head node;
-	struct vfio_group *vfio_group;
-};
-
-struct kvm_vfio {
-	struct list_head group_list;
-	struct mutex lock;
-	bool noncoherent;
-};
-
-struct kvm_vcpu_init {
-	__u32 target;
-	__u32 features[7];
-};
-
-struct kvm_vcpu_events {
+union ibs_fetch_ctl {
+	__u64 val;
 	struct {
-		__u8 serror_pending;
-		__u8 serror_has_esr;
-		__u8 ext_dabt_pending;
-		__u8 pad[5];
-		__u64 serror_esr;
-	} exception;
-	__u32 reserved[12];
+		__u64 fetch_maxcnt: 16;
+		__u64 fetch_cnt: 16;
+		__u64 fetch_lat: 16;
+		__u64 fetch_en: 1;
+		__u64 fetch_val: 1;
+		__u64 fetch_comp: 1;
+		__u64 ic_miss: 1;
+		__u64 phy_addr_valid: 1;
+		__u64 l1tlb_pgsz: 2;
+		__u64 l1tlb_miss: 1;
+		__u64 l2tlb_miss: 1;
+		__u64 rand_en: 1;
+		__u64 fetch_l2_miss: 1;
+		__u64 reserved: 5;
+	};
 };
 
-struct kvm_reg_list {
-	__u64 n;
-	__u64 reg[0];
+union ibs_op_ctl {
+	__u64 val;
+	struct {
+		__u64 opmaxcnt: 16;
+		__u64 reserved0: 1;
+		__u64 op_en: 1;
+		__u64 op_val: 1;
+		__u64 cnt_ctl: 1;
+		__u64 opmaxcnt_ext: 7;
+		__u64 reserved1: 5;
+		__u64 opcurcnt: 27;
+		__u64 reserved2: 5;
+	};
 };
 
-struct kvm_one_reg {
-	__u64 id;
-	__u64 addr;
+struct perf_ibs_data {
+	u32 size;
+	union {
+		u32 data[0];
+		u32 caps;
+	};
+	u64 regs[8];
 };
 
-struct kvm_arm_device_addr {
-	__u64 id;
-	__u64 addr;
+enum ibs_states {
+	IBS_ENABLED = 0,
+	IBS_STARTED = 1,
+	IBS_STOPPING = 2,
+	IBS_STOPPED = 3,
+	IBS_MAX_STATES = 4,
 };
 
-enum vgic_type {
-	VGIC_V2 = 0,
-	VGIC_V3 = 1,
+struct cpu_perf_ibs {
+	struct perf_event *event;
+	long unsigned int state[1];
 };
 
-struct vgic_global {
-	enum vgic_type type;
-	phys_addr_t vcpu_base;
-	void *vcpu_base_va;
-	void *vcpu_hyp_va;
-	void *vctrl_base;
-	void *vctrl_hyp;
-	int nr_lr;
-	unsigned int maint_irq;
-	int max_gic_vcpus;
-	bool can_emulate_gicv2;
-	bool has_gicv4;
-	bool has_gicv4_1;
-	struct static_key_false gicv3_cpuif;
-	u32 ich_vtr_el2;
+struct perf_ibs {
+	struct pmu pmu;
+	unsigned int msr;
+	u64 config_mask;
+	u64 cnt_mask;
+	u64 enable_mask;
+	u64 valid_mask;
+	u64 max_period;
+	long unsigned int offset_mask[1];
+	int offset_max;
+	unsigned int fetch_count_reset_broken: 1;
+	unsigned int fetch_ignore_if_zero_rip: 1;
+	struct cpu_perf_ibs *pcpu;
+	u64 (*get_count)(u64);
 };
 
-struct timer_map {
-	struct arch_timer_context *direct_vtimer;
-	struct arch_timer_context *direct_ptimer;
-	struct arch_timer_context *emul_ptimer;
+typedef void (*exitcall_t)();
+
+struct amd_uncore {
+	int id;
+	int refcnt;
+	int cpu;
+	int num_counters;
+	int rdpmc_base;
+	u32 msr_base;
+	cpumask_t *active_mask;
+	struct pmu *pmu;
+	struct perf_event *events[6];
+	struct hlist_node node;
 };
 
-typedef u64 kvm_pte_t;
+struct amd_iommu;
 
-struct kvm_pgtable {
-	u32 ia_bits;
-	u32 start_level;
-	kvm_pte_t *pgd;
-	struct kvm_s2_mmu *mmu;
+struct perf_amd_iommu {
+	struct list_head list;
+	struct pmu pmu;
+	struct amd_iommu *iommu;
+	char name[16];
+	u8 max_banks;
+	u8 max_counters;
+	u64 cntr_assign_mask;
+	raw_spinlock_t lock;
 };
 
-struct kvm_pmu_events {
-	u32 events_host;
-	u32 events_guest;
+struct amd_iommu_event_desc {
+	struct device_attribute attr;
+	const char *event;
 };
 
-struct kvm_host_data {
-	struct kvm_cpu_context host_ctxt;
-	struct kvm_pmu_events pmu_events;
+enum perf_msr_id {
+	PERF_MSR_TSC = 0,
+	PERF_MSR_APERF = 1,
+	PERF_MSR_MPERF = 2,
+	PERF_MSR_PPERF = 3,
+	PERF_MSR_SMI = 4,
+	PERF_MSR_PTSC = 5,
+	PERF_MSR_IRPERF = 6,
+	PERF_MSR_THERM = 7,
+	PERF_MSR_EVENT_MAX = 8,
+};
+
+struct x86_cpu_desc {
+	u8 x86_family;
+	u8 x86_vendor;
+	u8 x86_model;
+	u8 x86_stepping;
+	u32 x86_microcode_rev;
+};
+
+union cpuid10_eax {
+	struct {
+		unsigned int version_id: 8;
+		unsigned int num_counters: 8;
+		unsigned int bit_width: 8;
+		unsigned int mask_length: 8;
+	} split;
+	unsigned int full;
+};
+
+union cpuid10_ebx {
+	struct {
+		unsigned int no_unhalted_core_cycles: 1;
+		unsigned int no_instructions_retired: 1;
+		unsigned int no_unhalted_reference_cycles: 1;
+		unsigned int no_llc_reference: 1;
+		unsigned int no_llc_misses: 1;
+		unsigned int no_branch_instruction_retired: 1;
+		unsigned int no_branch_misses_retired: 1;
+	} split;
+	unsigned int full;
+};
+
+union cpuid10_edx {
+	struct {
+		unsigned int num_counters_fixed: 5;
+		unsigned int bit_width_fixed: 8;
+		unsigned int reserved1: 2;
+		unsigned int anythread_deprecated: 1;
+		unsigned int reserved2: 16;
+	} split;
+	unsigned int full;
+};
+
+struct perf_pmu_format_hybrid_attr {
+	struct device_attribute attr;
+	u64 pmu_type;
+};
+
+typedef int perf_snapshot_branch_stack_t(struct perf_branch_entry *, unsigned int);
+
+enum {
+	LBR_FORMAT_32 = 0,
+	LBR_FORMAT_LIP = 1,
+	LBR_FORMAT_EIP = 2,
+	LBR_FORMAT_EIP_FLAGS = 3,
+	LBR_FORMAT_EIP_FLAGS2 = 4,
+	LBR_FORMAT_INFO = 5,
+	LBR_FORMAT_TIME = 6,
+	LBR_FORMAT_INFO2 = 7,
+	LBR_FORMAT_MAX_KNOWN = 7,
+};
+
+union x86_pmu_config {
+	struct {
+		u64 event: 8;
+		u64 umask: 8;
+		u64 usr: 1;
+		u64 os: 1;
+		u64 edge: 1;
+		u64 pc: 1;
+		u64 interrupt: 1;
+		u64 __reserved1: 1;
+		u64 en: 1;
+		u64 inv: 1;
+		u64 cmask: 8;
+		u64 event2: 4;
+		u64 __reserved2: 4;
+		u64 go: 1;
+		u64 ho: 1;
+	} bits;
+	u64 value;
+};
+
+struct bts_ctx {
+	struct perf_output_handle handle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct debug_store ds_back;
+	int state;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 };
 
-struct trace_event_raw_kvm_entry {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	char __data[0];
+enum {
+	BTS_STATE_STOPPED = 0,
+	BTS_STATE_INACTIVE = 1,
+	BTS_STATE_ACTIVE = 2,
 };
 
-struct trace_event_raw_kvm_exit {
-	struct trace_entry ent;
-	int ret;
-	unsigned int esr_ec;
-	long unsigned int vcpu_pc;
-	char __data[0];
+struct bts_phys {
+	struct page *page;
+	long unsigned int size;
+	long unsigned int offset;
+	long unsigned int displacement;
 };
 
-struct trace_event_raw_kvm_guest_fault {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int hsr;
-	long unsigned int hxfar;
-	long long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_access_fault {
-	struct trace_entry ent;
-	long unsigned int ipa;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_irq_line {
-	struct trace_entry ent;
-	unsigned int type;
-	int vcpu_idx;
-	int irq_num;
-	int level;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_mmio_emulate {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int instr;
-	long unsigned int cpsr;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_unmap_hva_range {
-	struct trace_entry ent;
-	long unsigned int start;
+struct bts_buffer {
+	size_t real_size;
+	unsigned int nr_pages;
+	unsigned int nr_bufs;
+	unsigned int cur_buf;
+	bool snapshot;
+	local_t data_size;
+	local_t head;
 	long unsigned int end;
-	char __data[0];
+	void **data_pages;
+	struct bts_phys buf[0];
 };
 
-struct trace_event_raw_kvm_set_spte_hva {
-	struct trace_entry ent;
-	long unsigned int hva;
-	char __data[0];
+struct lbr_entry {
+	u64 from;
+	u64 to;
+	u64 info;
 };
 
-struct trace_event_raw_kvm_age_hva {
-	struct trace_entry ent;
-	long unsigned int start;
-	long unsigned int end;
-	char __data[0];
+struct pebs_basic {
+	u64 format_size;
+	u64 ip;
+	u64 applicable_counters;
+	u64 tsc;
 };
 
-struct trace_event_raw_kvm_test_age_hva {
-	struct trace_entry ent;
-	long unsigned int hva;
-	char __data[0];
+struct pebs_meminfo {
+	u64 address;
+	u64 aux;
+	u64 latency;
+	u64 tsx_tuning;
 };
 
-struct trace_event_raw_kvm_set_way_flush {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool cache;
-	char __data[0];
+struct pebs_gprs {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 cx;
+	u64 dx;
+	u64 bx;
+	u64 sp;
+	u64 bp;
+	u64 si;
+	u64 di;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
 };
 
-struct trace_event_raw_kvm_toggle_cache {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool was;
-	bool now;
-	char __data[0];
+struct pebs_xmm {
+	u64 xmm[32];
 };
 
-struct trace_event_raw_kvm_timer_update_irq {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	int level;
-	char __data[0];
+struct x86_perf_regs {
+	struct pt_regs regs;
+	u64 *xmm_regs;
 };
 
-struct trace_event_raw_kvm_get_timer_map {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	int direct_vtimer;
-	int direct_ptimer;
-	int emul_ptimer;
-	char __data[0];
+typedef unsigned int insn_attr_t;
+
+typedef unsigned char insn_byte_t;
+
+typedef int insn_value_t;
+
+struct insn_field {
+	union {
+		insn_value_t value;
+		insn_byte_t bytes[4];
+	};
+	unsigned char got;
+	unsigned char nbytes;
 };
 
-struct trace_event_raw_kvm_timer_save_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
+struct insn {
+	struct insn_field prefixes;
+	struct insn_field rex_prefix;
+	struct insn_field vex_prefix;
+	struct insn_field opcode;
+	struct insn_field modrm;
+	struct insn_field sib;
+	struct insn_field displacement;
+	union {
+		struct insn_field immediate;
+		struct insn_field moffset1;
+		struct insn_field immediate1;
+	};
+	union {
+		struct insn_field moffset2;
+		struct insn_field immediate2;
+	};
+	int emulate_prefix_size;
+	insn_attr_t attr;
+	unsigned char opnd_bytes;
+	unsigned char addr_bytes;
+	unsigned char length;
+	unsigned char x86_64;
+	const insn_byte_t *kaddr;
+	const insn_byte_t *end_kaddr;
+	const insn_byte_t *next_byte;
 };
 
-struct trace_event_raw_kvm_timer_restore_state {
-	struct trace_entry ent;
-	long unsigned int ctl;
-	long long unsigned int cval;
-	int timer_idx;
-	char __data[0];
+enum {
+	PERF_TXN_ELISION = 1,
+	PERF_TXN_TRANSACTION = 2,
+	PERF_TXN_SYNC = 4,
+	PERF_TXN_ASYNC = 8,
+	PERF_TXN_RETRY = 16,
+	PERF_TXN_CONFLICT = 32,
+	PERF_TXN_CAPACITY_WRITE = 64,
+	PERF_TXN_CAPACITY_READ = 128,
+	PERF_TXN_MAX = 256,
+	PERF_TXN_ABORT_MASK = 0,
+	PERF_TXN_ABORT_SHIFT = 32,
 };
 
-struct trace_event_raw_kvm_timer_hrtimer_expire {
-	struct trace_entry ent;
-	int timer_idx;
-	char __data[0];
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
 };
 
-struct trace_event_raw_kvm_timer_emulate {
-	struct trace_entry ent;
-	int timer_idx;
-	bool should_fire;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_entry {};
-
-struct trace_event_data_offsets_kvm_exit {};
-
-struct trace_event_data_offsets_kvm_guest_fault {};
-
-struct trace_event_data_offsets_kvm_access_fault {};
-
-struct trace_event_data_offsets_kvm_irq_line {};
-
-struct trace_event_data_offsets_kvm_mmio_emulate {};
-
-struct trace_event_data_offsets_kvm_unmap_hva_range {};
-
-struct trace_event_data_offsets_kvm_set_spte_hva {};
-
-struct trace_event_data_offsets_kvm_age_hva {};
-
-struct trace_event_data_offsets_kvm_test_age_hva {};
-
-struct trace_event_data_offsets_kvm_set_way_flush {};
-
-struct trace_event_data_offsets_kvm_toggle_cache {};
-
-struct trace_event_data_offsets_kvm_timer_update_irq {};
-
-struct trace_event_data_offsets_kvm_get_timer_map {};
-
-struct trace_event_data_offsets_kvm_timer_save_state {};
-
-struct trace_event_data_offsets_kvm_timer_restore_state {};
-
-struct trace_event_data_offsets_kvm_timer_hrtimer_expire {};
-
-struct trace_event_data_offsets_kvm_timer_emulate {};
-
-typedef void (*btf_trace_kvm_entry)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_exit)(void *, int, unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_guest_fault)(void *, long unsigned int, long unsigned int, long unsigned int, long long unsigned int);
-
-typedef void (*btf_trace_kvm_access_fault)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_irq_line)(void *, unsigned int, int, int, int);
-
-typedef void (*btf_trace_kvm_mmio_emulate)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_unmap_hva_range)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_set_spte_hva)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_age_hva)(void *, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_test_age_hva)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_set_way_flush)(void *, long unsigned int, bool);
-
-typedef void (*btf_trace_kvm_toggle_cache)(void *, long unsigned int, bool, bool);
-
-typedef void (*btf_trace_kvm_timer_update_irq)(void *, long unsigned int, __u32, int);
-
-typedef void (*btf_trace_kvm_get_timer_map)(void *, long unsigned int, struct timer_map *);
-
-typedef void (*btf_trace_kvm_timer_save_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_restore_state)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_hrtimer_expire)(void *, struct arch_timer_context *);
-
-typedef void (*btf_trace_kvm_timer_emulate)(void *, struct arch_timer_context *, bool);
-
-enum kvm_pgtable_prot {
-	KVM_PGTABLE_PROT_X = 1,
-	KVM_PGTABLE_PROT_W = 2,
-	KVM_PGTABLE_PROT_R = 4,
-	KVM_PGTABLE_PROT_DEVICE = 8,
-};
-
-typedef long unsigned int hva_t;
-
-enum kvm_arch_timers {
-	TIMER_PTIMER = 0,
-	TIMER_VTIMER = 1,
-	NR_KVM_TIMERS = 2,
-};
-
-enum exception_type {
-	except_type_sync = 0,
-	except_type_irq = 128,
-	except_type_fiq = 256,
-	except_type_serror = 384,
-};
-
-struct sys_reg_params;
-
-struct sys_reg_desc {
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	bool (*access)(struct kvm_vcpu *, struct sys_reg_params *, const struct sys_reg_desc *);
-	void (*reset)(struct kvm_vcpu *, const struct sys_reg_desc *);
-	int reg;
+union intel_x86_pebs_dse {
 	u64 val;
-	int (*__get_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	int (*set_user)(struct kvm_vcpu *, const struct sys_reg_desc *, const struct kvm_one_reg *, void *);
-	unsigned int (*visibility)(const struct kvm_vcpu *, const struct sys_reg_desc *);
+	struct {
+		unsigned int ld_dse: 4;
+		unsigned int ld_stlb_miss: 1;
+		unsigned int ld_locked: 1;
+		unsigned int ld_data_blk: 1;
+		unsigned int ld_addr_blk: 1;
+		unsigned int ld_reserved: 24;
+	};
+	struct {
+		unsigned int st_l1d_hit: 1;
+		unsigned int st_reserved1: 3;
+		unsigned int st_stlb_miss: 1;
+		unsigned int st_locked: 1;
+		unsigned int st_reserved2: 26;
+	};
+	struct {
+		unsigned int st_lat_dse: 4;
+		unsigned int st_lat_stlb_miss: 1;
+		unsigned int st_lat_locked: 1;
+		unsigned int ld_reserved3: 26;
+	};
 };
 
-struct sys_reg_params {
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	u64 regval;
-	bool is_write;
-	bool is_aarch32;
-	bool is_32bit;
+struct pebs_record_core {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
 };
 
-struct trace_event_raw_kvm_wfx_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_wfe;
-	char __data[0];
+struct pebs_record_nhm {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u64 status;
+	u64 dla;
+	u64 dse;
+	u64 lat;
 };
 
-struct trace_event_raw_kvm_hvc_arm64 {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	long unsigned int r0;
-	long unsigned int imm;
-	char __data[0];
+union hsw_tsx_tuning {
+	struct {
+		u32 cycles_last_block: 32;
+		u32 hle_abort: 1;
+		u32 rtm_abort: 1;
+		u32 instruction_abort: 1;
+		u32 non_instruction_abort: 1;
+		u32 retry: 1;
+		u32 data_conflict: 1;
+		u32 capacity_writes: 1;
+		u32 capacity_reads: 1;
+	};
+	u64 value;
 };
 
-struct trace_event_raw_kvm_arm_setup_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
+struct pebs_record_skl {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u64 status;
+	u64 dla;
+	u64 dse;
+	u64 lat;
+	u64 real_ip;
+	u64 tsx_tuning;
+	u64 tsc;
 };
 
-struct trace_event_raw_kvm_arm_clear_debug {
-	struct trace_entry ent;
-	__u32 guest_debug;
-	char __data[0];
+struct bts_record {
+	u64 from;
+	u64 to;
+	u64 flags;
 };
 
-struct trace_event_raw_kvm_arm_set_dreg32 {
-	struct trace_entry ent;
+enum {
+	PERF_BR_UNKNOWN = 0,
+	PERF_BR_COND = 1,
+	PERF_BR_UNCOND = 2,
+	PERF_BR_IND = 3,
+	PERF_BR_CALL = 4,
+	PERF_BR_IND_CALL = 5,
+	PERF_BR_RET = 6,
+	PERF_BR_SYSCALL = 7,
+	PERF_BR_SYSRET = 8,
+	PERF_BR_COND_CALL = 9,
+	PERF_BR_COND_RET = 10,
+	PERF_BR_ERET = 11,
+	PERF_BR_IRQ = 12,
+	PERF_BR_MAX = 13,
+};
+
+enum xfeature {
+	XFEATURE_FP = 0,
+	XFEATURE_SSE = 1,
+	XFEATURE_YMM = 2,
+	XFEATURE_BNDREGS = 3,
+	XFEATURE_BNDCSR = 4,
+	XFEATURE_OPMASK = 5,
+	XFEATURE_ZMM_Hi256 = 6,
+	XFEATURE_Hi16_ZMM = 7,
+	XFEATURE_PT_UNIMPLEMENTED_SO_FAR = 8,
+	XFEATURE_PKRU = 9,
+	XFEATURE_PASID = 10,
+	XFEATURE_RSRVD_COMP_11 = 11,
+	XFEATURE_RSRVD_COMP_12 = 12,
+	XFEATURE_RSRVD_COMP_13 = 13,
+	XFEATURE_RSRVD_COMP_14 = 14,
+	XFEATURE_LBR = 15,
+	XFEATURE_RSRVD_COMP_16 = 16,
+	XFEATURE_XTILE_CFG = 17,
+	XFEATURE_XTILE_DATA = 18,
+	XFEATURE_MAX = 19,
+};
+
+struct arch_lbr_state {
+	u64 lbr_ctl;
+	u64 lbr_depth;
+	u64 ler_from;
+	u64 ler_to;
+	u64 ler_info;
+	struct lbr_entry entries[0];
+};
+
+union cpuid28_eax {
+	struct {
+		unsigned int lbr_depth_mask: 8;
+		unsigned int reserved: 22;
+		unsigned int lbr_deep_c_reset: 1;
+		unsigned int lbr_lip: 1;
+	} split;
+	unsigned int full;
+};
+
+union cpuid28_ebx {
+	struct {
+		unsigned int lbr_cpl: 1;
+		unsigned int lbr_filter: 1;
+		unsigned int lbr_call_stack: 1;
+	} split;
+	unsigned int full;
+};
+
+union cpuid28_ecx {
+	struct {
+		unsigned int lbr_mispred: 1;
+		unsigned int lbr_timed_lbr: 1;
+		unsigned int lbr_br_type: 1;
+	} split;
+	unsigned int full;
+};
+
+struct x86_pmu_lbr {
+	unsigned int nr;
+	unsigned int from;
+	unsigned int to;
+	unsigned int info;
+};
+
+struct x86_perf_task_context_opt {
+	int lbr_callstack_users;
+	int lbr_stack_state;
+	int log_id;
+};
+
+struct x86_perf_task_context {
+	u64 lbr_sel;
+	int tos;
+	int valid_lbrs;
+	struct x86_perf_task_context_opt opt;
+	struct lbr_entry lbr[32];
+};
+
+struct x86_perf_task_context_arch_lbr {
+	struct x86_perf_task_context_opt opt;
+	struct lbr_entry entries[0];
+};
+
+struct x86_perf_task_context_arch_lbr_xsave {
+	struct x86_perf_task_context_opt opt;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct xregs_state xsave;
+		struct {
+			struct fxregs_state i387;
+			struct xstate_header header;
+			struct arch_lbr_state lbr;
+			long: 64;
+			long: 64;
+			long: 64;
+		};
+	};
+};
+
+enum {
+	X86_BR_NONE = 0,
+	X86_BR_USER = 1,
+	X86_BR_KERNEL = 2,
+	X86_BR_CALL = 4,
+	X86_BR_RET = 8,
+	X86_BR_SYSCALL = 16,
+	X86_BR_SYSRET = 32,
+	X86_BR_INT = 64,
+	X86_BR_IRET = 128,
+	X86_BR_JCC = 256,
+	X86_BR_JMP = 512,
+	X86_BR_IRQ = 1024,
+	X86_BR_IND_CALL = 2048,
+	X86_BR_ABORT = 4096,
+	X86_BR_IN_TX = 8192,
+	X86_BR_NO_TX = 16384,
+	X86_BR_ZERO_CALL = 32768,
+	X86_BR_CALL_STACK = 65536,
+	X86_BR_IND_JMP = 131072,
+	X86_BR_TYPE_SAVE = 262144,
+};
+
+enum {
+	LBR_NONE = 0,
+	LBR_VALID = 1,
+};
+
+enum {
+	ARCH_LBR_BR_TYPE_JCC = 0,
+	ARCH_LBR_BR_TYPE_NEAR_IND_JMP = 1,
+	ARCH_LBR_BR_TYPE_NEAR_REL_JMP = 2,
+	ARCH_LBR_BR_TYPE_NEAR_IND_CALL = 3,
+	ARCH_LBR_BR_TYPE_NEAR_REL_CALL = 4,
+	ARCH_LBR_BR_TYPE_NEAR_RET = 5,
+	ARCH_LBR_BR_TYPE_KNOWN_MAX = 5,
+	ARCH_LBR_BR_TYPE_MAP_MAX = 16,
+};
+
+enum P4_EVENTS {
+	P4_EVENT_TC_DELIVER_MODE = 0,
+	P4_EVENT_BPU_FETCH_REQUEST = 1,
+	P4_EVENT_ITLB_REFERENCE = 2,
+	P4_EVENT_MEMORY_CANCEL = 3,
+	P4_EVENT_MEMORY_COMPLETE = 4,
+	P4_EVENT_LOAD_PORT_REPLAY = 5,
+	P4_EVENT_STORE_PORT_REPLAY = 6,
+	P4_EVENT_MOB_LOAD_REPLAY = 7,
+	P4_EVENT_PAGE_WALK_TYPE = 8,
+	P4_EVENT_BSQ_CACHE_REFERENCE = 9,
+	P4_EVENT_IOQ_ALLOCATION = 10,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES = 11,
+	P4_EVENT_FSB_DATA_ACTIVITY = 12,
+	P4_EVENT_BSQ_ALLOCATION = 13,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES = 14,
+	P4_EVENT_SSE_INPUT_ASSIST = 15,
+	P4_EVENT_PACKED_SP_UOP = 16,
+	P4_EVENT_PACKED_DP_UOP = 17,
+	P4_EVENT_SCALAR_SP_UOP = 18,
+	P4_EVENT_SCALAR_DP_UOP = 19,
+	P4_EVENT_64BIT_MMX_UOP = 20,
+	P4_EVENT_128BIT_MMX_UOP = 21,
+	P4_EVENT_X87_FP_UOP = 22,
+	P4_EVENT_TC_MISC = 23,
+	P4_EVENT_GLOBAL_POWER_EVENTS = 24,
+	P4_EVENT_TC_MS_XFER = 25,
+	P4_EVENT_UOP_QUEUE_WRITES = 26,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE = 27,
+	P4_EVENT_RETIRED_BRANCH_TYPE = 28,
+	P4_EVENT_RESOURCE_STALL = 29,
+	P4_EVENT_WC_BUFFER = 30,
+	P4_EVENT_B2B_CYCLES = 31,
+	P4_EVENT_BNR = 32,
+	P4_EVENT_SNOOP = 33,
+	P4_EVENT_RESPONSE = 34,
+	P4_EVENT_FRONT_END_EVENT = 35,
+	P4_EVENT_EXECUTION_EVENT = 36,
+	P4_EVENT_REPLAY_EVENT = 37,
+	P4_EVENT_INSTR_RETIRED = 38,
+	P4_EVENT_UOPS_RETIRED = 39,
+	P4_EVENT_UOP_TYPE = 40,
+	P4_EVENT_BRANCH_RETIRED = 41,
+	P4_EVENT_MISPRED_BRANCH_RETIRED = 42,
+	P4_EVENT_X87_ASSIST = 43,
+	P4_EVENT_MACHINE_CLEAR = 44,
+	P4_EVENT_INSTR_COMPLETED = 45,
+};
+
+enum P4_EVENT_OPCODES {
+	P4_EVENT_TC_DELIVER_MODE_OPCODE = 257,
+	P4_EVENT_BPU_FETCH_REQUEST_OPCODE = 768,
+	P4_EVENT_ITLB_REFERENCE_OPCODE = 6147,
+	P4_EVENT_MEMORY_CANCEL_OPCODE = 517,
+	P4_EVENT_MEMORY_COMPLETE_OPCODE = 2050,
+	P4_EVENT_LOAD_PORT_REPLAY_OPCODE = 1026,
+	P4_EVENT_STORE_PORT_REPLAY_OPCODE = 1282,
+	P4_EVENT_MOB_LOAD_REPLAY_OPCODE = 770,
+	P4_EVENT_PAGE_WALK_TYPE_OPCODE = 260,
+	P4_EVENT_BSQ_CACHE_REFERENCE_OPCODE = 3079,
+	P4_EVENT_IOQ_ALLOCATION_OPCODE = 774,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES_OPCODE = 6662,
+	P4_EVENT_FSB_DATA_ACTIVITY_OPCODE = 5894,
+	P4_EVENT_BSQ_ALLOCATION_OPCODE = 1287,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES_OPCODE = 1543,
+	P4_EVENT_SSE_INPUT_ASSIST_OPCODE = 13313,
+	P4_EVENT_PACKED_SP_UOP_OPCODE = 2049,
+	P4_EVENT_PACKED_DP_UOP_OPCODE = 3073,
+	P4_EVENT_SCALAR_SP_UOP_OPCODE = 2561,
+	P4_EVENT_SCALAR_DP_UOP_OPCODE = 3585,
+	P4_EVENT_64BIT_MMX_UOP_OPCODE = 513,
+	P4_EVENT_128BIT_MMX_UOP_OPCODE = 6657,
+	P4_EVENT_X87_FP_UOP_OPCODE = 1025,
+	P4_EVENT_TC_MISC_OPCODE = 1537,
+	P4_EVENT_GLOBAL_POWER_EVENTS_OPCODE = 4870,
+	P4_EVENT_TC_MS_XFER_OPCODE = 1280,
+	P4_EVENT_UOP_QUEUE_WRITES_OPCODE = 2304,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE_OPCODE = 1282,
+	P4_EVENT_RETIRED_BRANCH_TYPE_OPCODE = 1026,
+	P4_EVENT_RESOURCE_STALL_OPCODE = 257,
+	P4_EVENT_WC_BUFFER_OPCODE = 1285,
+	P4_EVENT_B2B_CYCLES_OPCODE = 5635,
+	P4_EVENT_BNR_OPCODE = 2051,
+	P4_EVENT_SNOOP_OPCODE = 1539,
+	P4_EVENT_RESPONSE_OPCODE = 1027,
+	P4_EVENT_FRONT_END_EVENT_OPCODE = 2053,
+	P4_EVENT_EXECUTION_EVENT_OPCODE = 3077,
+	P4_EVENT_REPLAY_EVENT_OPCODE = 2309,
+	P4_EVENT_INSTR_RETIRED_OPCODE = 516,
+	P4_EVENT_UOPS_RETIRED_OPCODE = 260,
+	P4_EVENT_UOP_TYPE_OPCODE = 514,
+	P4_EVENT_BRANCH_RETIRED_OPCODE = 1541,
+	P4_EVENT_MISPRED_BRANCH_RETIRED_OPCODE = 772,
+	P4_EVENT_X87_ASSIST_OPCODE = 773,
+	P4_EVENT_MACHINE_CLEAR_OPCODE = 517,
+	P4_EVENT_INSTR_COMPLETED_OPCODE = 1796,
+};
+
+enum P4_ESCR_EMASKS {
+	P4_EVENT_TC_DELIVER_MODE__DD = 512,
+	P4_EVENT_TC_DELIVER_MODE__DB = 1024,
+	P4_EVENT_TC_DELIVER_MODE__DI = 2048,
+	P4_EVENT_TC_DELIVER_MODE__BD = 4096,
+	P4_EVENT_TC_DELIVER_MODE__BB = 8192,
+	P4_EVENT_TC_DELIVER_MODE__BI = 16384,
+	P4_EVENT_TC_DELIVER_MODE__ID = 32768,
+	P4_EVENT_BPU_FETCH_REQUEST__TCMISS = 512,
+	P4_EVENT_ITLB_REFERENCE__HIT = 512,
+	P4_EVENT_ITLB_REFERENCE__MISS = 1024,
+	P4_EVENT_ITLB_REFERENCE__HIT_UK = 2048,
+	P4_EVENT_MEMORY_CANCEL__ST_RB_FULL = 2048,
+	P4_EVENT_MEMORY_CANCEL__64K_CONF = 4096,
+	P4_EVENT_MEMORY_COMPLETE__LSC = 512,
+	P4_EVENT_MEMORY_COMPLETE__SSC = 1024,
+	P4_EVENT_LOAD_PORT_REPLAY__SPLIT_LD = 1024,
+	P4_EVENT_STORE_PORT_REPLAY__SPLIT_ST = 1024,
+	P4_EVENT_MOB_LOAD_REPLAY__NO_STA = 1024,
+	P4_EVENT_MOB_LOAD_REPLAY__NO_STD = 4096,
+	P4_EVENT_MOB_LOAD_REPLAY__PARTIAL_DATA = 8192,
+	P4_EVENT_MOB_LOAD_REPLAY__UNALGN_ADDR = 16384,
+	P4_EVENT_PAGE_WALK_TYPE__DTMISS = 512,
+	P4_EVENT_PAGE_WALK_TYPE__ITMISS = 1024,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITS = 512,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITE = 1024,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITM = 2048,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITS = 4096,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITE = 8192,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITM = 16384,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_MISS = 131072,
+	P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_MISS = 262144,
+	P4_EVENT_BSQ_CACHE_REFERENCE__WR_2ndL_MISS = 524288,
+	P4_EVENT_IOQ_ALLOCATION__DEFAULT = 512,
+	P4_EVENT_IOQ_ALLOCATION__ALL_READ = 16384,
+	P4_EVENT_IOQ_ALLOCATION__ALL_WRITE = 32768,
+	P4_EVENT_IOQ_ALLOCATION__MEM_UC = 65536,
+	P4_EVENT_IOQ_ALLOCATION__MEM_WC = 131072,
+	P4_EVENT_IOQ_ALLOCATION__MEM_WT = 262144,
+	P4_EVENT_IOQ_ALLOCATION__MEM_WP = 524288,
+	P4_EVENT_IOQ_ALLOCATION__MEM_WB = 1048576,
+	P4_EVENT_IOQ_ALLOCATION__OWN = 4194304,
+	P4_EVENT_IOQ_ALLOCATION__OTHER = 8388608,
+	P4_EVENT_IOQ_ALLOCATION__PREFETCH = 16777216,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__DEFAULT = 512,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_READ = 16384,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_WRITE = 32768,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_UC = 65536,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WC = 131072,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WT = 262144,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WP = 524288,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WB = 1048576,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__OWN = 4194304,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__OTHER = 8388608,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES__PREFETCH = 16777216,
+	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_DRV = 512,
+	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OWN = 1024,
+	P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OTHER = 2048,
+	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_DRV = 4096,
+	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OWN = 8192,
+	P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OTHER = 16384,
+	P4_EVENT_BSQ_ALLOCATION__REQ_TYPE0 = 512,
+	P4_EVENT_BSQ_ALLOCATION__REQ_TYPE1 = 1024,
+	P4_EVENT_BSQ_ALLOCATION__REQ_LEN0 = 2048,
+	P4_EVENT_BSQ_ALLOCATION__REQ_LEN1 = 4096,
+	P4_EVENT_BSQ_ALLOCATION__REQ_IO_TYPE = 16384,
+	P4_EVENT_BSQ_ALLOCATION__REQ_LOCK_TYPE = 32768,
+	P4_EVENT_BSQ_ALLOCATION__REQ_CACHE_TYPE = 65536,
+	P4_EVENT_BSQ_ALLOCATION__REQ_SPLIT_TYPE = 131072,
+	P4_EVENT_BSQ_ALLOCATION__REQ_DEM_TYPE = 262144,
+	P4_EVENT_BSQ_ALLOCATION__REQ_ORD_TYPE = 524288,
+	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE0 = 1048576,
+	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE1 = 2097152,
+	P4_EVENT_BSQ_ALLOCATION__MEM_TYPE2 = 4194304,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE0 = 512,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE1 = 1024,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN0 = 2048,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN1 = 4096,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_IO_TYPE = 16384,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LOCK_TYPE = 32768,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_CACHE_TYPE = 65536,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_SPLIT_TYPE = 131072,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_DEM_TYPE = 262144,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_ORD_TYPE = 524288,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE0 = 1048576,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE1 = 2097152,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE2 = 4194304,
+	P4_EVENT_SSE_INPUT_ASSIST__ALL = 16777216,
+	P4_EVENT_PACKED_SP_UOP__ALL = 16777216,
+	P4_EVENT_PACKED_DP_UOP__ALL = 16777216,
+	P4_EVENT_SCALAR_SP_UOP__ALL = 16777216,
+	P4_EVENT_SCALAR_DP_UOP__ALL = 16777216,
+	P4_EVENT_64BIT_MMX_UOP__ALL = 16777216,
+	P4_EVENT_128BIT_MMX_UOP__ALL = 16777216,
+	P4_EVENT_X87_FP_UOP__ALL = 16777216,
+	P4_EVENT_TC_MISC__FLUSH = 8192,
+	P4_EVENT_GLOBAL_POWER_EVENTS__RUNNING = 512,
+	P4_EVENT_TC_MS_XFER__CISC = 512,
+	P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_BUILD = 512,
+	P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_DELIVER = 1024,
+	P4_EVENT_UOP_QUEUE_WRITES__FROM_ROM = 2048,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CONDITIONAL = 1024,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CALL = 2048,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__RETURN = 4096,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__INDIRECT = 8192,
+	P4_EVENT_RETIRED_BRANCH_TYPE__CONDITIONAL = 1024,
+	P4_EVENT_RETIRED_BRANCH_TYPE__CALL = 2048,
+	P4_EVENT_RETIRED_BRANCH_TYPE__RETURN = 4096,
+	P4_EVENT_RETIRED_BRANCH_TYPE__INDIRECT = 8192,
+	P4_EVENT_RESOURCE_STALL__SBFULL = 16384,
+	P4_EVENT_WC_BUFFER__WCB_EVICTS = 512,
+	P4_EVENT_WC_BUFFER__WCB_FULL_EVICTS = 1024,
+	P4_EVENT_FRONT_END_EVENT__NBOGUS = 512,
+	P4_EVENT_FRONT_END_EVENT__BOGUS = 1024,
+	P4_EVENT_EXECUTION_EVENT__NBOGUS0 = 512,
+	P4_EVENT_EXECUTION_EVENT__NBOGUS1 = 1024,
+	P4_EVENT_EXECUTION_EVENT__NBOGUS2 = 2048,
+	P4_EVENT_EXECUTION_EVENT__NBOGUS3 = 4096,
+	P4_EVENT_EXECUTION_EVENT__BOGUS0 = 8192,
+	P4_EVENT_EXECUTION_EVENT__BOGUS1 = 16384,
+	P4_EVENT_EXECUTION_EVENT__BOGUS2 = 32768,
+	P4_EVENT_EXECUTION_EVENT__BOGUS3 = 65536,
+	P4_EVENT_REPLAY_EVENT__NBOGUS = 512,
+	P4_EVENT_REPLAY_EVENT__BOGUS = 1024,
+	P4_EVENT_INSTR_RETIRED__NBOGUSNTAG = 512,
+	P4_EVENT_INSTR_RETIRED__NBOGUSTAG = 1024,
+	P4_EVENT_INSTR_RETIRED__BOGUSNTAG = 2048,
+	P4_EVENT_INSTR_RETIRED__BOGUSTAG = 4096,
+	P4_EVENT_UOPS_RETIRED__NBOGUS = 512,
+	P4_EVENT_UOPS_RETIRED__BOGUS = 1024,
+	P4_EVENT_UOP_TYPE__TAGLOADS = 1024,
+	P4_EVENT_UOP_TYPE__TAGSTORES = 2048,
+	P4_EVENT_BRANCH_RETIRED__MMNP = 512,
+	P4_EVENT_BRANCH_RETIRED__MMNM = 1024,
+	P4_EVENT_BRANCH_RETIRED__MMTP = 2048,
+	P4_EVENT_BRANCH_RETIRED__MMTM = 4096,
+	P4_EVENT_MISPRED_BRANCH_RETIRED__NBOGUS = 512,
+	P4_EVENT_X87_ASSIST__FPSU = 512,
+	P4_EVENT_X87_ASSIST__FPSO = 1024,
+	P4_EVENT_X87_ASSIST__POAO = 2048,
+	P4_EVENT_X87_ASSIST__POAU = 4096,
+	P4_EVENT_X87_ASSIST__PREA = 8192,
+	P4_EVENT_MACHINE_CLEAR__CLEAR = 512,
+	P4_EVENT_MACHINE_CLEAR__MOCLEAR = 1024,
+	P4_EVENT_MACHINE_CLEAR__SMCLEAR = 2048,
+	P4_EVENT_INSTR_COMPLETED__NBOGUS = 512,
+	P4_EVENT_INSTR_COMPLETED__BOGUS = 1024,
+};
+
+enum P4_PEBS_METRIC {
+	P4_PEBS_METRIC__none = 0,
+	P4_PEBS_METRIC__1stl_cache_load_miss_retired = 1,
+	P4_PEBS_METRIC__2ndl_cache_load_miss_retired = 2,
+	P4_PEBS_METRIC__dtlb_load_miss_retired = 3,
+	P4_PEBS_METRIC__dtlb_store_miss_retired = 4,
+	P4_PEBS_METRIC__dtlb_all_miss_retired = 5,
+	P4_PEBS_METRIC__tagged_mispred_branch = 6,
+	P4_PEBS_METRIC__mob_load_replay_retired = 7,
+	P4_PEBS_METRIC__split_load_retired = 8,
+	P4_PEBS_METRIC__split_store_retired = 9,
+	P4_PEBS_METRIC__max = 10,
+};
+
+struct p4_event_bind {
+	unsigned int opcode;
+	unsigned int escr_msr[2];
+	unsigned int escr_emask;
+	unsigned int shared;
+	char cntr[6];
+};
+
+struct p4_pebs_bind {
+	unsigned int metric_pebs;
+	unsigned int metric_vert;
+};
+
+struct p4_event_alias {
+	u64 original;
+	u64 alternative;
+};
+
+enum cpuid_regs_idx {
+	CPUID_EAX = 0,
+	CPUID_EBX = 1,
+	CPUID_ECX = 2,
+	CPUID_EDX = 3,
+};
+
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
+};
+
+enum pt_capabilities {
+	PT_CAP_max_subleaf = 0,
+	PT_CAP_cr3_filtering = 1,
+	PT_CAP_psb_cyc = 2,
+	PT_CAP_ip_filtering = 3,
+	PT_CAP_mtc = 4,
+	PT_CAP_ptwrite = 5,
+	PT_CAP_power_event_trace = 6,
+	PT_CAP_event_trace = 7,
+	PT_CAP_tnt_disable = 8,
+	PT_CAP_topa_output = 9,
+	PT_CAP_topa_multiple_entries = 10,
+	PT_CAP_single_range_output = 11,
+	PT_CAP_output_subsys = 12,
+	PT_CAP_payloads_lip = 13,
+	PT_CAP_num_address_ranges = 14,
+	PT_CAP_mtc_periods = 15,
+	PT_CAP_cycle_thresholds = 16,
+	PT_CAP_psb_periods = 17,
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	long unsigned int offset;
+	long unsigned int size;
+	enum perf_addr_filter_action_t action;
+};
+
+struct topa_entry {
+	u64 end: 1;
+	u64 rsvd0: 1;
+	u64 intr: 1;
+	u64 rsvd1: 1;
+	u64 stop: 1;
+	u64 rsvd2: 1;
+	u64 size: 4;
+	u64 rsvd3: 2;
+	u64 base: 36;
+	u64 rsvd4: 16;
+};
+
+struct pt_pmu {
+	struct pmu pmu;
+	u32 caps[8];
+	bool vmx;
+	bool branch_en_always_on;
+	long unsigned int max_nonturbo_ratio;
+	unsigned int tsc_art_num;
+	unsigned int tsc_art_den;
+};
+
+struct topa;
+
+struct pt_buffer {
+	struct list_head tables;
+	struct topa *first;
+	struct topa *last;
+	struct topa *cur;
+	unsigned int cur_idx;
+	size_t output_off;
+	long unsigned int nr_pages;
+	local_t data_size;
+	local64_t head;
+	bool snapshot;
+	bool single;
+	long int stop_pos;
+	long int intr_pos;
+	struct topa_entry *stop_te;
+	struct topa_entry *intr_te;
+	void **data_pages;
+};
+
+struct topa {
+	struct list_head list;
+	u64 offset;
+	size_t size;
+	int last;
+	unsigned int z_count;
+};
+
+struct pt_filter {
+	long unsigned int msr_a;
+	long unsigned int msr_b;
+	long unsigned int config;
+};
+
+struct pt_filters {
+	struct pt_filter filter[4];
+	unsigned int nr_filters;
+};
+
+struct pt {
+	struct perf_output_handle handle;
+	struct pt_filters filters;
+	int handle_nmi;
+	int vmx_on;
+	u64 output_base;
+	u64 output_mask;
+};
+
+struct pt_cap_desc {
 	const char *name;
-	__u32 value;
-	char __data[0];
+	u32 leaf;
+	u8 reg;
+	u32 mask;
 };
 
-struct trace_event_raw_kvm_arm_set_regset {
-	struct trace_entry ent;
-	const char *name;
-	int len;
-	u64 ctrls[16];
-	u64 values[16];
-	char __data[0];
+struct pt_address_range {
+	long unsigned int msr_a;
+	long unsigned int msr_b;
+	unsigned int reg_off;
 };
 
-struct trace_event_raw_trap_reg {
-	struct trace_entry ent;
-	const char *fn;
-	int reg;
-	bool is_write;
-	u64 write_value;
-	char __data[0];
+struct topa_page {
+	struct topa_entry table[507];
+	struct topa topa;
 };
 
-struct trace_event_raw_kvm_handle_sys_reg {
-	struct trace_entry ent;
-	long unsigned int hsr;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_sys_access {
-	struct trace_entry ent;
-	long unsigned int vcpu_pc;
-	bool is_write;
-	const char *name;
-	u8 Op0;
-	u8 Op1;
-	u8 CRn;
-	u8 CRm;
-	u8 Op2;
-	char __data[0];
-};
-
-struct trace_event_raw_kvm_set_guest_debug {
-	struct trace_entry ent;
-	struct kvm_vcpu *vcpu;
-	__u32 guest_debug;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_kvm_wfx_arm64 {};
-
-struct trace_event_data_offsets_kvm_hvc_arm64 {};
-
-struct trace_event_data_offsets_kvm_arm_setup_debug {};
-
-struct trace_event_data_offsets_kvm_arm_clear_debug {};
-
-struct trace_event_data_offsets_kvm_arm_set_dreg32 {};
-
-struct trace_event_data_offsets_kvm_arm_set_regset {};
-
-struct trace_event_data_offsets_trap_reg {};
-
-struct trace_event_data_offsets_kvm_handle_sys_reg {};
-
-struct trace_event_data_offsets_kvm_sys_access {};
-
-struct trace_event_data_offsets_kvm_set_guest_debug {};
-
-typedef void (*btf_trace_kvm_wfx_arm64)(void *, long unsigned int, bool);
-
-typedef void (*btf_trace_kvm_hvc_arm64)(void *, long unsigned int, long unsigned int, long unsigned int);
-
-typedef void (*btf_trace_kvm_arm_setup_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef void (*btf_trace_kvm_arm_clear_debug)(void *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_dreg32)(void *, const char *, __u32);
-
-typedef void (*btf_trace_kvm_arm_set_regset)(void *, const char *, int, __u64 *, __u64 *);
-
-typedef void (*btf_trace_trap_reg)(void *, const char *, int, bool, u64);
-
-typedef void (*btf_trace_kvm_handle_sys_reg)(void *, long unsigned int);
-
-typedef void (*btf_trace_kvm_sys_access)(void *, long unsigned int, struct sys_reg_params *, const struct sys_reg_desc *);
-
-typedef void (*btf_trace_kvm_set_guest_debug)(void *, struct kvm_vcpu *, __u32);
-
-typedef int (*exit_handle_fn)(struct kvm_vcpu *);
-
-struct sve_state_reg_region {
-	unsigned int koffset;
-	unsigned int klen;
-	unsigned int upad;
-};
-
-struct __va_list {
-	void *__stack;
-	void *__gr_top;
-	void *__vr_top;
-	int __gr_offs;
-	int __vr_offs;
-};
-
-typedef struct __va_list __gnuc_va_list;
-
-typedef __gnuc_va_list va_list;
-
-struct va_format {
-	const char *fmt;
-	va_list *va;
-};
-
-enum kvm_arch_timer_regs {
-	TIMER_REG_CNT = 0,
-	TIMER_REG_CVAL = 1,
-	TIMER_REG_TVAL = 2,
-	TIMER_REG_CTL = 3,
-};
-
-struct vgic_vmcr {
-	u32 grpen0;
-	u32 grpen1;
-	u32 ackctl;
-	u32 fiqen;
-	u32 cbpr;
-	u32 eoim;
-	u32 abpr;
-	u32 bpr;
-	u32 pmr;
-};
-
-struct cyclecounter {
-	u64 (*read)(const struct cyclecounter *);
-	u64 mask;
-	u32 mult;
-	u32 shift;
-};
-
-struct timecounter {
-	const struct cyclecounter *cc;
-	u64 cycle_last;
-	u64 nsec;
-	u64 mask;
-	u64 frac;
-};
-
-struct arch_timer_kvm_info {
-	struct timecounter timecounter;
-	int virtual_irq;
-	int physical_irq;
+struct x86_cpu_id {
+	__u16 vendor;
+	__u16 family;
+	__u16 model;
+	__u16 steppings;
+	__u16 feature;
+	kernel_ulong_t driver_data;
 };
 
 enum hrtimer_mode {
@@ -19847,223 +18366,447 @@
 	HRTIMER_MODE_REL_PINNED_HARD = 11,
 };
 
-struct trace_event_raw_vgic_update_irq_pending {
-	struct trace_entry ent;
-	long unsigned int vcpu_id;
-	__u32 irq;
-	bool level;
-	char __data[0];
+struct acpi_device;
+
+struct pci_sysdata {
+	int domain;
+	int node;
+	struct acpi_device *companion;
+	void *iommu;
+	void *fwnode;
+	struct pci_dev *vmd_dev;
 };
 
-struct trace_event_data_offsets_vgic_update_irq_pending {};
-
-typedef void (*btf_trace_vgic_update_irq_pending)(void *, long unsigned int, __u32, bool);
-
-enum gic_type {
-	GIC_V2 = 0,
-	GIC_V3 = 1,
+struct pci_extra_dev {
+	struct pci_dev *dev[4];
 };
 
-struct gic_kvm_info {
-	enum gic_type type;
-	struct resource vcpu;
-	unsigned int maint_irq;
-	struct resource vctrl;
-	bool has_v4;
-	bool has_v4_1;
+struct intel_uncore_pmu;
+
+struct intel_uncore_ops;
+
+struct uncore_event_desc;
+
+struct freerunning_counters;
+
+struct intel_uncore_topology;
+
+struct intel_uncore_type {
+	const char *name;
+	int num_counters;
+	int num_boxes;
+	int perf_ctr_bits;
+	int fixed_ctr_bits;
+	int num_freerunning_types;
+	int type_id;
+	unsigned int perf_ctr;
+	unsigned int event_ctl;
+	unsigned int event_mask;
+	unsigned int event_mask_ext;
+	unsigned int fixed_ctr;
+	unsigned int fixed_ctl;
+	unsigned int box_ctl;
+	u64 *box_ctls;
+	union {
+		unsigned int msr_offset;
+		unsigned int mmio_offset;
+	};
+	unsigned int mmio_map_size;
+	unsigned int num_shared_regs: 8;
+	unsigned int single_fixed: 1;
+	unsigned int pair_ctr_ctl: 1;
+	union {
+		unsigned int *msr_offsets;
+		unsigned int *pci_offsets;
+		unsigned int *mmio_offsets;
+	};
+	unsigned int *box_ids;
+	struct event_constraint unconstrainted;
+	struct event_constraint *constraints;
+	struct intel_uncore_pmu *pmus;
+	struct intel_uncore_ops *ops;
+	struct uncore_event_desc *event_descs;
+	struct freerunning_counters *freerunning;
+	const struct attribute_group *attr_groups[4];
+	const struct attribute_group **attr_update;
+	struct pmu *pmu;
+	struct intel_uncore_topology *topology;
+	int (*get_topology)(struct intel_uncore_type *);
+	int (*set_mapping)(struct intel_uncore_type *);
+	void (*cleanup_mapping)(struct intel_uncore_type *);
 };
 
-struct its_vlpi_map {
-	struct its_vm *vm;
-	struct its_vpe *vpe;
-	u32 vintid;
-	u8 properties;
-	bool db_enabled;
+struct intel_uncore_box;
+
+struct intel_uncore_pmu {
+	struct pmu pmu;
+	char name[32];
+	int pmu_idx;
+	int func_id;
+	bool registered;
+	atomic_t activeboxes;
+	struct intel_uncore_type *type;
+	struct intel_uncore_box **boxes;
 };
 
-struct vgic_reg_attr {
-	struct kvm_vcpu *vcpu;
-	gpa_t addr;
+struct intel_uncore_ops {
+	void (*init_box)(struct intel_uncore_box *);
+	void (*exit_box)(struct intel_uncore_box *);
+	void (*disable_box)(struct intel_uncore_box *);
+	void (*enable_box)(struct intel_uncore_box *);
+	void (*disable_event)(struct intel_uncore_box *, struct perf_event *);
+	void (*enable_event)(struct intel_uncore_box *, struct perf_event *);
+	u64 (*read_counter)(struct intel_uncore_box *, struct perf_event *);
+	int (*hw_config)(struct intel_uncore_box *, struct perf_event *);
+	struct event_constraint * (*get_constraint)(struct intel_uncore_box *, struct perf_event *);
+	void (*put_constraint)(struct intel_uncore_box *, struct perf_event *);
 };
 
-struct its_device {
-	struct list_head dev_list;
-	struct list_head itt_head;
-	u32 num_eventid_bits;
-	gpa_t itt_addr;
-	u32 device_id;
+struct uncore_event_desc {
+	struct device_attribute attr;
+	const char *config;
 };
 
-struct its_collection {
-	struct list_head coll_list;
-	u32 collection_id;
-	u32 target_addr;
+struct freerunning_counters {
+	unsigned int counter_base;
+	unsigned int counter_offset;
+	unsigned int box_offset;
+	unsigned int num_counters;
+	unsigned int bits;
+	unsigned int *box_offsets;
 };
 
-struct its_ite {
-	struct list_head ite_list;
-	struct vgic_irq *irq;
-	struct its_collection *collection;
-	u32 event_id;
+struct intel_uncore_topology {
+	u64 configuration;
+	int segment;
 };
 
-struct vgic_translation_cache_entry {
-	struct list_head entry;
-	phys_addr_t db;
-	u32 devid;
-	u32 eventid;
-	struct vgic_irq *irq;
+struct intel_uncore_extra_reg {
+	raw_spinlock_t lock;
+	u64 config;
+	u64 config1;
+	u64 config2;
+	atomic_t ref;
 };
 
-struct vgic_its_abi {
-	int cte_esz;
-	int dte_esz;
-	int ite_esz;
-	int (*save_tables)(struct vgic_its *);
-	int (*restore_tables)(struct vgic_its *);
-	int (*commit)(struct vgic_its *);
-};
-
-typedef int (*entry_fn_t)(struct vgic_its *, u32, void *, void *);
-
-struct vgic_state_iter {
-	int nr_cpus;
-	int nr_spis;
-	int nr_lpis;
-	int dist_id;
-	int vcpu_id;
-	int intid;
-	int lpi_idx;
-	u32 *lpi_array;
-};
-
-struct kvm_pmu_event_filter {
-	__u16 base_event;
-	__u16 nevents;
-	__u8 action;
-	__u8 pad[3];
-};
-
-struct tlb_inv_context {
+struct intel_uncore_box {
+	int dieid;
+	int n_active;
+	int n_events;
+	int cpu;
 	long unsigned int flags;
-	u64 tcr;
-	u64 sctlr;
+	atomic_t refcnt;
+	struct perf_event *events[10];
+	struct perf_event *event_list[10];
+	struct event_constraint *event_constraint[10];
+	long unsigned int active_mask[1];
+	u64 tags[10];
+	struct pci_dev *pci_dev;
+	struct intel_uncore_pmu *pmu;
+	u64 hrtimer_duration;
+	struct hrtimer hrtimer;
+	struct list_head list;
+	struct list_head active_list;
+	void *io_addr;
+	struct intel_uncore_extra_reg shared_regs[0];
 };
 
-struct tlb_inv_context___2 {
-	u64 tcr;
+struct pci2phy_map {
+	struct list_head list;
+	int segment;
+	int pbus_to_dieid[256];
 };
 
-enum kvm_pgtable_walk_flags {
-	KVM_PGTABLE_WALK_LEAF = 1,
-	KVM_PGTABLE_WALK_TABLE_PRE = 2,
-	KVM_PGTABLE_WALK_TABLE_POST = 4,
+struct intel_uncore_init_fun {
+	void (*cpu_init)();
+	int (*pci_init)();
+	void (*mmio_init)();
+	bool use_discovery;
 };
 
-typedef int (*kvm_pgtable_visitor_fn_t)(u64, u64, u32, kvm_pte_t *, enum kvm_pgtable_walk_flags, void * const);
-
-struct kvm_pgtable_walker {
-	const kvm_pgtable_visitor_fn_t cb;
-	void * const arg;
-	const enum kvm_pgtable_walk_flags flags;
+enum {
+	EXTRA_REG_NHMEX_M_FILTER = 0,
+	EXTRA_REG_NHMEX_M_DSP = 1,
+	EXTRA_REG_NHMEX_M_ISS = 2,
+	EXTRA_REG_NHMEX_M_MAP = 3,
+	EXTRA_REG_NHMEX_M_MSC_THR = 4,
+	EXTRA_REG_NHMEX_M_PGT = 5,
+	EXTRA_REG_NHMEX_M_PLD = 6,
+	EXTRA_REG_NHMEX_M_ZDP_CTL_FVC = 7,
 };
 
-struct kvm_pgtable_walk_data {
-	struct kvm_pgtable *pgt;
-	struct kvm_pgtable_walker *walker;
-	u64 addr;
-	u64 end;
+enum {
+	SNB_PCI_UNCORE_IMC = 0,
 };
 
-struct hyp_map_data {
-	u64 phys;
-	kvm_pte_t attr;
+enum perf_snb_uncore_imc_freerunning_types {
+	SNB_PCI_UNCORE_IMC_DATA_READS = 0,
+	SNB_PCI_UNCORE_IMC_DATA_WRITES = 1,
+	SNB_PCI_UNCORE_IMC_GT_REQUESTS = 2,
+	SNB_PCI_UNCORE_IMC_IA_REQUESTS = 3,
+	SNB_PCI_UNCORE_IMC_IO_REQUESTS = 4,
+	SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX = 5,
 };
 
-struct stage2_map_data {
-	u64 phys;
-	kvm_pte_t attr;
-	kvm_pte_t *anchor;
-	struct kvm_s2_mmu *mmu;
-	struct kvm_mmu_memory_cache *memcache;
+struct imc_uncore_pci_dev {
+	__u32 pci_id;
+	struct pci_driver *driver;
 };
 
-struct stage2_attr_data {
-	kvm_pte_t attr_set;
-	kvm_pte_t attr_clr;
-	kvm_pte_t pte;
-	u32 level;
+enum perf_tgl_uncore_imc_freerunning_types {
+	TGL_MMIO_UNCORE_IMC_DATA_TOTAL = 0,
+	TGL_MMIO_UNCORE_IMC_DATA_READ = 1,
+	TGL_MMIO_UNCORE_IMC_DATA_WRITE = 2,
+	TGL_MMIO_UNCORE_IMC_FREERUNNING_TYPE_MAX = 3,
+};
+
+enum perf_adl_uncore_imc_freerunning_types {
+	ADL_MMIO_UNCORE_IMC_DATA_TOTAL = 0,
+	ADL_MMIO_UNCORE_IMC_DATA_READ = 1,
+	ADL_MMIO_UNCORE_IMC_DATA_WRITE = 2,
+	ADL_MMIO_UNCORE_IMC_FREERUNNING_TYPE_MAX = 3,
+};
+
+enum uncore_access_type {
+	UNCORE_ACCESS_MSR = 0,
+	UNCORE_ACCESS_MMIO = 1,
+	UNCORE_ACCESS_PCI = 2,
+	UNCORE_ACCESS_MAX = 3,
+};
+
+enum {
+	SNBEP_PCI_QPI_PORT0_FILTER = 0,
+	SNBEP_PCI_QPI_PORT1_FILTER = 1,
+	BDX_PCI_QPI_PORT2_FILTER = 2,
+};
+
+enum {
+	SNBEP_PCI_UNCORE_HA = 0,
+	SNBEP_PCI_UNCORE_IMC = 1,
+	SNBEP_PCI_UNCORE_QPI = 2,
+	SNBEP_PCI_UNCORE_R2PCIE = 3,
+	SNBEP_PCI_UNCORE_R3QPI = 4,
+};
+
+enum {
+	IVBEP_PCI_UNCORE_HA = 0,
+	IVBEP_PCI_UNCORE_IMC = 1,
+	IVBEP_PCI_UNCORE_IRP = 2,
+	IVBEP_PCI_UNCORE_QPI = 3,
+	IVBEP_PCI_UNCORE_R2PCIE = 4,
+	IVBEP_PCI_UNCORE_R3QPI = 5,
+};
+
+enum {
+	KNL_PCI_UNCORE_MC_UCLK = 0,
+	KNL_PCI_UNCORE_MC_DCLK = 1,
+	KNL_PCI_UNCORE_EDC_UCLK = 2,
+	KNL_PCI_UNCORE_EDC_ECLK = 3,
+	KNL_PCI_UNCORE_M2PCIE = 4,
+	KNL_PCI_UNCORE_IRP = 5,
+};
+
+enum {
+	HSWEP_PCI_UNCORE_HA = 0,
+	HSWEP_PCI_UNCORE_IMC = 1,
+	HSWEP_PCI_UNCORE_IRP = 2,
+	HSWEP_PCI_UNCORE_QPI = 3,
+	HSWEP_PCI_UNCORE_R2PCIE = 4,
+	HSWEP_PCI_UNCORE_R3QPI = 5,
+};
+
+enum {
+	BDX_PCI_UNCORE_HA = 0,
+	BDX_PCI_UNCORE_IMC = 1,
+	BDX_PCI_UNCORE_IRP = 2,
+	BDX_PCI_UNCORE_QPI = 3,
+	BDX_PCI_UNCORE_R2PCIE = 4,
+	BDX_PCI_UNCORE_R3QPI = 5,
+};
+
+enum perf_uncore_iio_freerunning_type_id {
+	SKX_IIO_MSR_IOCLK = 0,
+	SKX_IIO_MSR_BW = 1,
+	SKX_IIO_MSR_UTIL = 2,
+	SKX_IIO_FREERUNNING_TYPE_MAX = 3,
+};
+
+enum {
+	SKX_PCI_UNCORE_IMC = 0,
+	SKX_PCI_UNCORE_M2M = 1,
+	SKX_PCI_UNCORE_UPI = 2,
+	SKX_PCI_UNCORE_M2PCIE = 3,
+	SKX_PCI_UNCORE_M3UPI = 4,
+};
+
+enum {
+	SNR_QAT_PMON_ID = 0,
+	SNR_CBDMA_DMI_PMON_ID = 1,
+	SNR_NIS_PMON_ID = 2,
+	SNR_DLB_PMON_ID = 3,
+	SNR_PCIE_GEN3_PMON_ID = 4,
+};
+
+enum perf_uncore_snr_iio_freerunning_type_id {
+	SNR_IIO_MSR_IOCLK = 0,
+	SNR_IIO_MSR_BW_IN = 1,
+	SNR_IIO_FREERUNNING_TYPE_MAX = 2,
+};
+
+enum {
+	SNR_PCI_UNCORE_M2M = 0,
+	SNR_PCI_UNCORE_PCIE3 = 1,
+};
+
+enum perf_uncore_snr_imc_freerunning_type_id {
+	SNR_IMC_DCLK = 0,
+	SNR_IMC_DDR = 1,
+	SNR_IMC_FREERUNNING_TYPE_MAX = 2,
+};
+
+enum {
+	ICX_PCIE1_PMON_ID = 0,
+	ICX_PCIE2_PMON_ID = 1,
+	ICX_PCIE3_PMON_ID = 2,
+	ICX_PCIE4_PMON_ID = 3,
+	ICX_PCIE5_PMON_ID = 4,
+	ICX_CBDMA_DMI_PMON_ID = 5,
+};
+
+enum perf_uncore_icx_iio_freerunning_type_id {
+	ICX_IIO_MSR_IOCLK = 0,
+	ICX_IIO_MSR_BW_IN = 1,
+	ICX_IIO_FREERUNNING_TYPE_MAX = 2,
+};
+
+enum {
+	ICX_PCI_UNCORE_M2M = 0,
+	ICX_PCI_UNCORE_UPI = 1,
+	ICX_PCI_UNCORE_M3UPI = 2,
+};
+
+enum perf_uncore_icx_imc_freerunning_type_id {
+	ICX_IMC_DCLK = 0,
+	ICX_IMC_DDR = 1,
+	ICX_IMC_DDRT = 2,
+	ICX_IMC_FREERUNNING_TYPE_MAX = 3,
+};
+
+enum perf_uncore_spr_iio_freerunning_type_id {
+	SPR_IIO_MSR_IOCLK = 0,
+	SPR_IIO_MSR_BW_IN = 1,
+	SPR_IIO_MSR_BW_OUT = 2,
+	SPR_IIO_FREERUNNING_TYPE_MAX = 3,
+};
+
+enum perf_uncore_spr_imc_freerunning_type_id {
+	SPR_IMC_DCLK = 0,
+	SPR_IMC_PQ_CYCLES = 1,
+	SPR_IMC_FREERUNNING_TYPE_MAX = 2,
+};
+
+struct uncore_global_discovery {
+	union {
+		u64 table1;
+		struct {
+			u64 type: 8;
+			u64 stride: 8;
+			u64 max_units: 10;
+			u64 __reserved_1: 36;
+			u64 access_type: 2;
+		};
+	};
+	u64 ctl;
+	union {
+		u64 table3;
+		struct {
+			u64 status_offset: 8;
+			u64 num_status: 16;
+			u64 __reserved_2: 40;
+		};
+	};
+};
+
+struct uncore_unit_discovery {
+	union {
+		u64 table1;
+		struct {
+			u64 num_regs: 8;
+			u64 ctl_offset: 8;
+			u64 bit_width: 8;
+			u64 ctr_offset: 8;
+			u64 status_offset: 8;
+			u64 __reserved_1: 22;
+			u64 access_type: 2;
+		};
+	};
+	u64 ctl;
+	union {
+		u64 table3;
+		struct {
+			u64 box_type: 16;
+			u64 box_id: 16;
+			u64 __reserved_2: 32;
+		};
+	};
+};
+
+struct intel_uncore_discovery_type {
+	struct rb_node node;
+	enum uncore_access_type access_type;
+	u64 box_ctrl;
+	u64 *box_ctrl_die;
+	u16 type;
+	u8 num_counters;
+	u8 counter_width;
+	u8 ctl_offset;
+	u8 ctr_offset;
+	u16 num_boxes;
+	unsigned int *ids;
+	unsigned int *box_offset;
 };
 
 typedef s8 int8_t;
 
-typedef s16 int16_t;
+typedef u8 uint8_t;
 
-typedef u16 uint16_t;
+typedef u64 uint64_t;
 
-typedef uint64_t xen_pfn_t;
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block *head;
+};
 
-typedef uint64_t xen_ulong_t;
+enum xen_domain_type {
+	XEN_NATIVE = 0,
+	XEN_PV_DOMAIN = 1,
+	XEN_HVM_DOMAIN = 2,
+};
 
-typedef struct {
-	union {
-		unsigned char *p;
-		uint64_t q;
-	};
-} __guest_handle_uchar;
+typedef long unsigned int xen_pfn_t;
 
-typedef struct {
-	union {
-		char *p;
-		uint64_t q;
-	};
-} __guest_handle_char;
+typedef long unsigned int xen_ulong_t;
 
-typedef struct {
-	union {
-		void *p;
-		uint64_t q;
-	};
-} __guest_handle_void;
+struct arch_shared_info {
+	long unsigned int max_pfn;
+	xen_pfn_t pfn_to_mfn_frame_list_list;
+	long unsigned int nmi_reason;
+	long unsigned int p2m_cr3;
+	long unsigned int p2m_vaddr;
+	long unsigned int p2m_generation;
+};
 
-typedef struct {
-	union {
-		uint64_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint64_t;
-
-typedef struct {
-	union {
-		uint32_t *p;
-		uint64_t q;
-	};
-} __guest_handle_uint32_t;
-
-struct arch_vcpu_info {};
-
-struct arch_shared_info {};
-
-struct pvclock_vcpu_time_info {
-	u32 version;
-	u32 pad0;
-	u64 tsc_timestamp;
-	u64 system_time;
-	u32 tsc_to_system_mul;
-	s8 tsc_shift;
-	u8 flags;
-	u8 pad[2];
+struct arch_vcpu_info {
+	long unsigned int cr2;
+	long unsigned int pad;
 };
 
 struct pvclock_wall_clock {
 	u32 version;
 	u32 sec;
 	u32 nsec;
-	u32 sec_hi;
 };
 
-typedef uint16_t domid_t;
-
 struct vcpu_info {
 	uint8_t evtchn_upcall_pending;
 	uint8_t evtchn_upcall_mask;
@@ -20073,10 +18816,11 @@
 };
 
 struct shared_info {
-	struct vcpu_info vcpu_info[1];
+	struct vcpu_info vcpu_info[32];
 	xen_ulong_t evtchn_pending[64];
 	xen_ulong_t evtchn_mask[64];
 	struct pvclock_wall_clock wc;
+	uint32_t wc_sec_hi;
 	struct arch_shared_info arch;
 };
 
@@ -20107,12 +18851,42 @@
 	long unsigned int nr_p2m_frames;
 };
 
-enum vdso_clock_mode {
-	VDSO_CLOCKMODE_NONE = 0,
-	VDSO_CLOCKMODE_ARCHTIMER = 1,
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = 2,
-	VDSO_CLOCKMODE_MAX = 3,
-	VDSO_CLOCKMODE_TIMENS = 2147483647,
+struct sched_shutdown {
+	unsigned int reason;
+};
+
+struct sched_pin_override {
+	int32_t pcpu;
+};
+
+struct xen_extraversion {
+	char extraversion[16];
+};
+
+struct vcpu_register_vcpu_info {
+	uint64_t mfn;
+	uint32_t offset;
+	uint32_t rsvd;
+};
+
+struct xmaddr {
+	phys_addr_t maddr;
+};
+
+typedef struct xmaddr xmaddr_t;
+
+struct xpaddr {
+	phys_addr_t paddr;
+};
+
+typedef struct xpaddr xpaddr_t;
+
+typedef s16 int16_t;
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
 };
 
 struct clocksource {
@@ -20122,10 +18896,12 @@
 	u32 shift;
 	u64 max_idle_ns;
 	u32 maxadj;
+	u32 uncertainty_margin;
 	u64 max_cycles;
 	const char *name;
 	struct list_head list;
 	int rating;
+	enum clocksource_ids id;
 	enum vdso_clock_mode vdso_clock_mode;
 	long unsigned int flags;
 	int (*enable)(struct clocksource *);
@@ -20134,11 +18910,192 @@
 	void (*resume)(struct clocksource *);
 	void (*mark_unstable)(struct clocksource *);
 	void (*tick_stable)(struct clocksource *);
+	struct list_head wd_list;
+	u64 cs_last;
+	u64 wd_last;
 	struct module *owner;
 };
 
-struct sched_shutdown {
-	unsigned int reason;
+struct x86_init_mpparse {
+	void (*setup_ioapic_ids)();
+	void (*find_smp_config)();
+	void (*get_smp_config)(unsigned int);
+};
+
+struct x86_init_resources {
+	void (*probe_roms)();
+	void (*reserve_resources)();
+	char * (*memory_setup)();
+};
+
+struct x86_init_irqs {
+	void (*pre_vector_init)();
+	void (*intr_init)();
+	void (*intr_mode_select)();
+	void (*intr_mode_init)();
+	struct irq_domain * (*create_pci_msi_domain)();
+};
+
+struct x86_init_oem {
+	void (*arch_setup)();
+	void (*banner)();
+};
+
+struct x86_init_paging {
+	void (*pagetable_init)();
+};
+
+struct x86_init_timers {
+	void (*setup_percpu_clockev)();
+	void (*timer_init)();
+	void (*wallclock_init)();
+};
+
+struct x86_init_iommu {
+	int (*iommu_init)();
+};
+
+struct x86_init_pci {
+	int (*arch_init)();
+	int (*init)();
+	void (*init_irq)();
+	void (*fixup_irqs)();
+};
+
+struct x86_hyper_init {
+	void (*init_platform)();
+	void (*guest_late_init)();
+	bool (*x2apic_available)();
+	bool (*msi_ext_dest_id)();
+	void (*init_mem_mapping)();
+	void (*init_after_bootmem)();
+};
+
+struct x86_init_acpi {
+	void (*set_root_pointer)(u64);
+	u64 (*get_root_pointer)();
+	void (*reduced_hw_early_init)();
+};
+
+struct x86_init_ops {
+	struct x86_init_resources resources;
+	struct x86_init_mpparse mpparse;
+	struct x86_init_irqs irqs;
+	struct x86_init_oem oem;
+	struct x86_init_paging paging;
+	struct x86_init_timers timers;
+	struct x86_init_iommu iommu;
+	struct x86_init_pci pci;
+	struct x86_hyper_init hyper;
+	struct x86_init_acpi acpi;
+};
+
+struct x86_cpuinit_ops {
+	void (*setup_percpu_clockev)();
+	void (*early_percpu_clock_init)();
+	void (*fixup_cpu_id)(struct cpuinfo_x86 *, int);
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(long unsigned int, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	long unsigned int retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	long unsigned int min_delta_ticks;
+	long unsigned int max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	long unsigned int ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+typedef unsigned char *__guest_handle_uchar;
+
+typedef char *__guest_handle_char;
+
+typedef void *__guest_handle_void;
+
+typedef uint64_t *__guest_handle_uint64_t;
+
+typedef uint32_t *__guest_handle_uint32_t;
+
+struct vcpu_time_info {
+	uint32_t version;
+	uint32_t pad0;
+	uint64_t tsc_timestamp;
+	uint64_t system_time;
+	uint32_t tsc_to_system_mul;
+	int8_t tsc_shift;
+	int8_t pad1[3];
 };
 
 struct xenpf_settime32 {
@@ -20332,12 +19289,7 @@
 	uint32_t num;
 };
 
-typedef struct {
-	union {
-		struct xen_processor_csd *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_csd;
+typedef struct xen_processor_csd *__guest_handle_xen_processor_csd;
 
 struct xen_processor_cx {
 	struct xen_power_register reg;
@@ -20348,12 +19300,7 @@
 	__guest_handle_xen_processor_csd dp;
 };
 
-typedef struct {
-	union {
-		struct xen_processor_cx *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_cx;
+typedef struct xen_processor_cx *__guest_handle_xen_processor_cx;
 
 struct xen_processor_flags {
 	uint32_t bm_control: 1;
@@ -20388,12 +19335,7 @@
 	uint64_t status;
 };
 
-typedef struct {
-	union {
-		struct xen_processor_px *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_processor_px;
+typedef struct xen_processor_px *__guest_handle_xen_processor_px;
 
 struct xen_psd_package {
 	uint64_t num_entries;
@@ -20489,29 +19431,57 @@
 	} u;
 };
 
-struct xen_memory_region {
-	long unsigned int start_pfn;
-	long unsigned int n_pfns;
+struct vcpu_set_singleshot_timer {
+	uint64_t timeout_abs_ns;
+	uint32_t flags;
 };
 
+typedef struct vcpu_time_info *__guest_handle_vcpu_time_info;
+
+struct vcpu_register_time_memory_area {
+	union {
+		__guest_handle_vcpu_time_info h;
+		struct pvclock_vcpu_time_info *v;
+		uint64_t p;
+	} addr;
+};
+
+struct xen_clock_event_device {
+	struct clock_event_device evt;
+	char name[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef uint16_t grant_status_t;
+
 struct grant_frames {
 	xen_pfn_t *pfn;
 	unsigned int count;
 	void *vaddr;
 };
 
-struct xen_hvm_param {
-	domid_t domid;
-	uint32_t index;
-	uint64_t value;
+struct gnttab_vm_area {
+	struct vm_struct *area;
+	pte_t **ptes;
+	int idx;
 };
 
-struct vcpu_register_vcpu_info {
-	uint64_t mfn;
-	uint32_t offset;
-	uint32_t rsvd;
+enum acpi_irq_model_id {
+	ACPI_IRQ_MODEL_PIC = 0,
+	ACPI_IRQ_MODEL_IOAPIC = 1,
+	ACPI_IRQ_MODEL_IOSAPIC = 2,
+	ACPI_IRQ_MODEL_PLATFORM = 3,
+	ACPI_IRQ_MODEL_GIC = 4,
+	ACPI_IRQ_MODEL_COUNT = 5,
 };
 
+typedef uint16_t domid_t;
+
 struct xen_add_to_physmap {
 	domid_t domid;
 	uint16_t size;
@@ -20520,49 +19490,215 @@
 	xen_pfn_t gpfn;
 };
 
-struct xsd_errors {
-	int errnum;
-	const char *errstring;
+struct machine_ops {
+	void (*restart)(char *);
+	void (*halt)();
+	void (*power_off)();
+	void (*shutdown)();
+	void (*crash_shutdown)(struct pt_regs *);
+	void (*emergency_restart)();
 };
 
-struct tk_read_base {
-	struct clocksource *clock;
-	u64 mask;
-	u64 cycle_last;
-	u32 mult;
-	u32 shift;
-	u64 xtime_nsec;
-	ktime_t base;
-	u64 base_real;
+enum x86_hypervisor_type {
+	X86_HYPER_NATIVE = 0,
+	X86_HYPER_VMWARE = 1,
+	X86_HYPER_MS_HYPERV = 2,
+	X86_HYPER_XEN_PV = 3,
+	X86_HYPER_XEN_HVM = 4,
+	X86_HYPER_KVM = 5,
+	X86_HYPER_JAILHOUSE = 6,
+	X86_HYPER_ACRN = 7,
 };
 
-struct timekeeper {
-	struct tk_read_base tkr_mono;
-	struct tk_read_base tkr_raw;
-	u64 xtime_sec;
-	long unsigned int ktime_sec;
-	struct timespec64 wall_to_monotonic;
-	ktime_t offs_real;
-	ktime_t offs_boot;
-	ktime_t offs_tai;
-	s32 tai_offset;
-	unsigned int clock_was_set_seq;
-	u8 cs_was_changed_seq;
-	ktime_t next_leap_ktime;
-	u64 raw_sec;
-	struct timespec64 monotonic_to_boot;
-	u64 cycle_interval;
-	u64 xtime_interval;
-	s64 xtime_remainder;
-	u64 raw_interval;
-	u64 ntp_tick;
-	s64 ntp_error;
-	u32 ntp_error_shift;
-	u32 ntp_err_mult;
-	u32 skip_second_overflow;
+struct hypervisor_x86 {
+	const char *name;
+	uint32_t (*detect)();
+	enum x86_hypervisor_type type;
+	struct x86_hyper_init init;
+	struct x86_hyper_runtime runtime;
+	bool ignore_nopv;
 };
 
-typedef uint16_t grant_status_t;
+enum e820_type {
+	E820_TYPE_RAM = 1,
+	E820_TYPE_RESERVED = 2,
+	E820_TYPE_ACPI = 3,
+	E820_TYPE_NVS = 4,
+	E820_TYPE_UNUSABLE = 5,
+	E820_TYPE_PMEM = 7,
+	E820_TYPE_PRAM = 12,
+	E820_TYPE_SOFT_RESERVED = 4026531839,
+	E820_TYPE_RESERVED_KERN = 128,
+};
+
+struct vmcore_cb {
+	bool (*pfn_is_ram)(struct vmcore_cb *, long unsigned int);
+	struct list_head next;
+};
+
+struct xen_hvm_pagetable_dying {
+	domid_t domid;
+	__u64 gpa;
+};
+
+enum hvmmem_type_t {
+	HVMMEM_ram_rw = 0,
+	HVMMEM_ram_ro = 1,
+	HVMMEM_mmio_dm = 2,
+};
+
+struct xen_hvm_get_mem_type {
+	domid_t domid;
+	uint16_t mem_type;
+	uint16_t pad[2];
+	uint64_t pfn;
+};
+
+struct e820_entry {
+	u64 addr;
+	u64 size;
+	enum e820_type type;
+} __attribute__((packed));
+
+struct e820_table {
+	__u32 nr_entries;
+	struct e820_entry entries[3200];
+} __attribute__((packed));
+
+typedef xen_pfn_t *__guest_handle_xen_pfn_t;
+
+typedef long unsigned int xen_callback_t;
+
+struct mmu_update {
+	uint64_t ptr;
+	uint64_t val;
+};
+
+struct xen_memory_region {
+	long unsigned int start_pfn;
+	long unsigned int n_pfns;
+};
+
+struct callback_register {
+	uint16_t type;
+	uint16_t flags;
+	xen_callback_t address;
+};
+
+struct xen_memory_reservation {
+	__guest_handle_xen_pfn_t extent_start;
+	xen_ulong_t nr_extents;
+	unsigned int extent_order;
+	unsigned int address_bits;
+	domid_t domid;
+};
+
+struct xen_memory_map {
+	unsigned int nr_entries;
+	__guest_handle_void buffer;
+};
+
+struct x86_apic_ops {
+	unsigned int (*io_apic_read)(unsigned int, unsigned int);
+	void (*restore)();
+};
+
+struct physdev_apic {
+	long unsigned int apic_physbase;
+	uint32_t reg;
+	uint32_t value;
+};
+
+typedef long unsigned int uintptr_t;
+
+struct xen_pmu_amd_ctxt {
+	uint32_t counters;
+	uint32_t ctrls;
+	uint64_t regs[0];
+};
+
+struct xen_pmu_cntr_pair {
+	uint64_t counter;
+	uint64_t control;
+};
+
+struct xen_pmu_intel_ctxt {
+	uint32_t fixed_counters;
+	uint32_t arch_counters;
+	uint64_t global_ctrl;
+	uint64_t global_ovf_ctrl;
+	uint64_t global_status;
+	uint64_t fixed_ctrl;
+	uint64_t ds_area;
+	uint64_t pebs_enable;
+	uint64_t debugctl;
+	uint64_t regs[0];
+};
+
+struct xen_pmu_regs {
+	uint64_t ip;
+	uint64_t sp;
+	uint64_t flags;
+	uint16_t cs;
+	uint16_t ss;
+	uint8_t cpl;
+	uint8_t pad[3];
+};
+
+struct xen_pmu_arch {
+	union {
+		struct xen_pmu_regs regs;
+		uint8_t pad[64];
+	} r;
+	uint64_t pmu_flags;
+	union {
+		uint32_t lapic_lvtpc;
+		uint64_t pad;
+	} l;
+	union {
+		struct xen_pmu_amd_ctxt amd;
+		struct xen_pmu_intel_ctxt intel;
+		uint8_t pad[128];
+	} c;
+};
+
+struct xen_pmu_params {
+	struct {
+		uint32_t maj;
+		uint32_t min;
+	} version;
+	uint64_t val;
+	uint32_t vcpu;
+	uint32_t pad;
+};
+
+struct xen_pmu_data {
+	uint32_t vcpu_id;
+	uint32_t pcpu_id;
+	domid_t domain_id;
+	uint8_t pad[6];
+	struct xen_pmu_arch pmu;
+};
+
+struct perf_guest_info_callbacks {
+	unsigned int (*state)();
+	long unsigned int (*get_ip)();
+	unsigned int (*handle_intel_pt_intr)();
+};
+
+struct xenpmu {
+	struct xen_pmu_data *xenpmu_data;
+	uint8_t flags;
+};
+
+enum pg_level {
+	PG_LEVEL_NONE = 0,
+	PG_LEVEL_4K = 1,
+	PG_LEVEL_2M = 2,
+	PG_LEVEL_1G = 3,
+	PG_LEVEL_512G = 4,
+	PG_LEVEL_NUM = 5,
+};
 
 typedef uint32_t grant_ref_t;
 
@@ -20585,25 +19721,10916 @@
 	int16_t status;
 };
 
-struct xen_p2m_entry {
-	long unsigned int pfn;
-	long unsigned int mfn;
-	long unsigned int nr_pages;
-	struct rb_node rbnode_phys;
+enum {
+	DESC_TSS = 9,
+	DESC_LDT = 2,
+	DESCTYPE_S = 16,
 };
 
-struct gnttab_cache_flush {
+enum paravirt_lazy_mode {
+	PARAVIRT_LAZY_NONE = 0,
+	PARAVIRT_LAZY_MMU = 1,
+	PARAVIRT_LAZY_CPU = 2,
+};
+
+struct x86_hw_tss {
+	u32 reserved1;
+	u64 sp0;
+	u64 sp1;
+	u64 sp2;
+	u64 reserved2;
+	u64 ist[7];
+	u32 reserved3;
+	u32 reserved4;
+	u16 reserved5;
+	u16 io_bitmap_base;
+} __attribute__((packed));
+
+struct x86_io_bitmap {
+	u64 prev_sequence;
+	unsigned int prev_max;
+	long unsigned int bitmap[1025];
+	long unsigned int mapall[1025];
+};
+
+struct tss_struct {
+	struct x86_hw_tss x86_tss;
+	struct x86_io_bitmap io_bitmap;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
+union text_poke_insn {
+	u8 text[5];
+	struct {
+		u8 opcode;
+		s32 disp;
+	} __attribute__((packed));
+};
+
+typedef long int xen_long_t;
+
+struct trap_info {
+	uint8_t vector;
+	uint8_t flags;
+	uint16_t cs;
+	long unsigned int address;
+};
+
+struct mmuext_op {
+	unsigned int cmd;
 	union {
-		uint64_t dev_bus_addr;
-		grant_ref_t ref;
-	} a;
-	uint16_t offset;
-	uint16_t length;
-	uint32_t op;
+		xen_pfn_t mfn;
+		long unsigned int linear_addr;
+	} arg1;
+	union {
+		unsigned int nr_ents;
+		void *vcpumask;
+		xen_pfn_t src_mfn;
+	} arg2;
 };
 
-struct static_key_true {
-	struct static_key key;
+struct multicall_entry {
+	xen_ulong_t op;
+	xen_long_t result;
+	xen_ulong_t args[6];
+};
+
+struct dom0_vga_console_info {
+	uint8_t video_type;
+	union {
+		struct {
+			uint16_t font_height;
+			uint16_t cursor_x;
+			uint16_t cursor_y;
+			uint16_t rows;
+			uint16_t columns;
+		} text_mode_3;
+		struct {
+			uint16_t width;
+			uint16_t height;
+			uint16_t bytes_per_line;
+			uint16_t bits_per_pixel;
+			uint32_t lfb_base;
+			uint32_t lfb_size;
+			uint8_t red_pos;
+			uint8_t red_size;
+			uint8_t green_pos;
+			uint8_t green_size;
+			uint8_t blue_pos;
+			uint8_t blue_size;
+			uint8_t rsvd_pos;
+			uint8_t rsvd_size;
+			uint32_t gbl_caps;
+			uint16_t mode_attrs;
+			uint16_t pad;
+			uint32_t ext_lfb_base;
+		} vesa_lfb;
+	} u;
+};
+
+struct physdev_set_iopl {
+	uint32_t iopl;
+};
+
+struct physdev_set_iobitmap {
+	uint8_t *bitmap;
+	uint32_t nr_ports;
+};
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
+struct multicall_space {
+	struct multicall_entry *mc;
+	void *args;
+};
+
+struct tls_descs {
+	struct desc_struct desc[3];
+};
+
+struct trap_array_entry {
+	void (*orig)();
+	void (*xen)();
+	bool ist_okay;
+};
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct page *pages[0];
+};
+
+struct mmu_table_batch;
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	struct mmu_table_batch *batch;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+struct io_tlb_slot;
+
+struct io_tlb_mem {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	long unsigned int nslabs;
+	long unsigned int used;
+	unsigned int index;
+	spinlock_t lock;
+	struct dentry *debugfs;
+	bool late_alloc;
+	bool force_bounce;
+	bool for_alloc;
+	struct io_tlb_slot *slots;
+};
+
+struct mmu_table_batch {
+	struct callback_head rcu;
+	unsigned int nr;
+	void *tables[0];
+};
+
+struct xen_memory_exchange {
+	struct xen_memory_reservation in;
+	struct xen_memory_reservation out;
+	xen_ulong_t nr_exchanged;
+};
+
+struct xen_machphys_mapping {
+	xen_ulong_t v_start;
+	xen_ulong_t v_end;
+	xen_ulong_t max_mfn;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+enum pt_level {
+	PT_PGD = 0,
+	PT_P4D = 1,
+	PT_PUD = 2,
+	PT_PMD = 3,
+	PT_PTE = 4,
+};
+
+struct remap_data {
+	xen_pfn_t *pfn;
+	bool contiguous;
+	bool no_translate;
+	pgprot_t prot;
+	struct mmu_update *mmu_update;
+};
+
+enum xen_mc_flush_reason {
+	XEN_MC_FL_NONE = 0,
+	XEN_MC_FL_BATCH = 1,
+	XEN_MC_FL_ARGS = 2,
+	XEN_MC_FL_CALLBACK = 3,
+};
+
+enum xen_mc_extend_args {
+	XEN_MC_XE_OK = 0,
+	XEN_MC_XE_BAD_OP = 1,
+	XEN_MC_XE_NO_SPACE = 2,
+};
+
+typedef void (*xen_mc_callback_fn_t)(void *);
+
+struct callback {
+	void (*fn)(void *);
+	void *data;
+};
+
+struct mc_buffer {
+	unsigned int mcidx;
+	unsigned int argidx;
+	unsigned int cbidx;
+	struct multicall_entry entries[32];
+	unsigned char args[512];
+	struct callback callbacks[32];
+};
+
+struct hvm_start_info {
+	uint32_t magic;
+	uint32_t version;
+	uint32_t flags;
+	uint32_t nr_modules;
+	uint64_t modlist_paddr;
+	uint64_t cmdline_paddr;
+	uint64_t rsdp_paddr;
+	uint64_t memmap_paddr;
+	uint32_t memmap_entries;
+	uint32_t reserved;
+};
+
+struct trace_event_raw_xen_mc__batch {
+	struct trace_entry ent;
+	enum paravirt_lazy_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_entry {
+	struct trace_entry ent;
+	unsigned int op;
+	unsigned int nargs;
+	long unsigned int args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_entry_alloc {
+	struct trace_entry ent;
+	size_t args;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_callback {
+	struct trace_entry ent;
+	xen_mc_callback_fn_t fn;
+	void *data;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_flush_reason {
+	struct trace_entry ent;
+	enum xen_mc_flush_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_flush {
+	struct trace_entry ent;
+	unsigned int mcidx;
+	unsigned int argidx;
+	unsigned int cbidx;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mc_extend_args {
+	struct trace_entry ent;
+	unsigned int op;
+	size_t args;
+	enum xen_mc_extend_args res;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu__set_pte {
+	struct trace_entry ent;
+	pte_t *ptep;
+	pteval_t pteval;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_set_pmd {
+	struct trace_entry ent;
+	pmd_t *pmdp;
+	pmdval_t pmdval;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_set_pud {
+	struct trace_entry ent;
+	pud_t *pudp;
+	pudval_t pudval;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_set_p4d {
+	struct trace_entry ent;
+	p4d_t *p4dp;
+	p4d_t *user_p4dp;
+	p4dval_t p4dval;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_ptep_modify_prot {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int addr;
+	pte_t *ptep;
+	pteval_t pteval;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_alloc_ptpage {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	long unsigned int pfn;
+	unsigned int level;
+	bool pinned;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_release_ptpage {
+	struct trace_entry ent;
+	long unsigned int pfn;
+	unsigned int level;
+	bool pinned;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_pgd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_flush_tlb_one_user {
+	struct trace_entry ent;
+	long unsigned int addr;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_flush_tlb_multi {
+	struct trace_entry ent;
+	unsigned int ncpus;
+	struct mm_struct *mm;
+	long unsigned int addr;
+	long unsigned int end;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_mmu_write_cr3 {
+	struct trace_entry ent;
+	bool kernel;
+	long unsigned int cr3;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_cpu_write_ldt_entry {
+	struct trace_entry ent;
+	struct desc_struct *dt;
+	int entrynum;
+	u64 desc;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_cpu_write_idt_entry {
+	struct trace_entry ent;
+	gate_desc *dt;
+	int entrynum;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_cpu_load_idt {
+	struct trace_entry ent;
+	long unsigned int addr;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_cpu_write_gdt_entry {
+	struct trace_entry ent;
+	u64 desc;
+	struct desc_struct *dt;
+	int entrynum;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_xen_cpu_set_ldt {
+	struct trace_entry ent;
+	const void *addr;
+	unsigned int entries;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xen_mc__batch {};
+
+struct trace_event_data_offsets_xen_mc_entry {};
+
+struct trace_event_data_offsets_xen_mc_entry_alloc {};
+
+struct trace_event_data_offsets_xen_mc_callback {};
+
+struct trace_event_data_offsets_xen_mc_flush_reason {};
+
+struct trace_event_data_offsets_xen_mc_flush {};
+
+struct trace_event_data_offsets_xen_mc_extend_args {};
+
+struct trace_event_data_offsets_xen_mmu__set_pte {};
+
+struct trace_event_data_offsets_xen_mmu_set_pmd {};
+
+struct trace_event_data_offsets_xen_mmu_set_pud {};
+
+struct trace_event_data_offsets_xen_mmu_set_p4d {};
+
+struct trace_event_data_offsets_xen_mmu_ptep_modify_prot {};
+
+struct trace_event_data_offsets_xen_mmu_alloc_ptpage {};
+
+struct trace_event_data_offsets_xen_mmu_release_ptpage {};
+
+struct trace_event_data_offsets_xen_mmu_pgd {};
+
+struct trace_event_data_offsets_xen_mmu_flush_tlb_one_user {};
+
+struct trace_event_data_offsets_xen_mmu_flush_tlb_multi {};
+
+struct trace_event_data_offsets_xen_mmu_write_cr3 {};
+
+struct trace_event_data_offsets_xen_cpu_write_ldt_entry {};
+
+struct trace_event_data_offsets_xen_cpu_write_idt_entry {};
+
+struct trace_event_data_offsets_xen_cpu_load_idt {};
+
+struct trace_event_data_offsets_xen_cpu_write_gdt_entry {};
+
+struct trace_event_data_offsets_xen_cpu_set_ldt {};
+
+typedef void (*btf_trace_xen_mc_batch)(void *, enum paravirt_lazy_mode);
+
+typedef void (*btf_trace_xen_mc_issue)(void *, enum paravirt_lazy_mode);
+
+typedef void (*btf_trace_xen_mc_entry)(void *, struct multicall_entry *, unsigned int);
+
+typedef void (*btf_trace_xen_mc_entry_alloc)(void *, size_t);
+
+typedef void (*btf_trace_xen_mc_callback)(void *, xen_mc_callback_fn_t, void *);
+
+typedef void (*btf_trace_xen_mc_flush_reason)(void *, enum xen_mc_flush_reason);
+
+typedef void (*btf_trace_xen_mc_flush)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_xen_mc_extend_args)(void *, long unsigned int, size_t, enum xen_mc_extend_args);
+
+typedef void (*btf_trace_xen_mmu_set_pte)(void *, pte_t *, pte_t);
+
+typedef void (*btf_trace_xen_mmu_set_pmd)(void *, pmd_t *, pmd_t);
+
+typedef void (*btf_trace_xen_mmu_set_pud)(void *, pud_t *, pud_t);
+
+typedef void (*btf_trace_xen_mmu_set_p4d)(void *, p4d_t *, p4d_t *, p4d_t);
+
+typedef void (*btf_trace_xen_mmu_ptep_modify_prot_start)(void *, struct mm_struct *, long unsigned int, pte_t *, pte_t);
+
+typedef void (*btf_trace_xen_mmu_ptep_modify_prot_commit)(void *, struct mm_struct *, long unsigned int, pte_t *, pte_t);
+
+typedef void (*btf_trace_xen_mmu_alloc_ptpage)(void *, struct mm_struct *, long unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_xen_mmu_release_ptpage)(void *, long unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_xen_mmu_pgd_pin)(void *, struct mm_struct *, pgd_t *);
+
+typedef void (*btf_trace_xen_mmu_pgd_unpin)(void *, struct mm_struct *, pgd_t *);
+
+typedef void (*btf_trace_xen_mmu_flush_tlb_one_user)(void *, long unsigned int);
+
+typedef void (*btf_trace_xen_mmu_flush_tlb_multi)(void *, const struct cpumask *, struct mm_struct *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_xen_mmu_write_cr3)(void *, bool, long unsigned int);
+
+typedef void (*btf_trace_xen_cpu_write_ldt_entry)(void *, struct desc_struct *, int, u64);
+
+typedef void (*btf_trace_xen_cpu_write_idt_entry)(void *, gate_desc *, int, const gate_desc *);
+
+typedef void (*btf_trace_xen_cpu_load_idt)(void *, const struct desc_ptr *);
+
+typedef void (*btf_trace_xen_cpu_write_gdt_entry)(void *, struct desc_struct *, int, const void *, int);
+
+typedef void (*btf_trace_xen_cpu_set_ldt)(void *, const void *, unsigned int);
+
+enum ipi_vector {
+	XEN_RESCHEDULE_VECTOR = 0,
+	XEN_CALL_FUNCTION_VECTOR = 1,
+	XEN_CALL_FUNCTION_SINGLE_VECTOR = 2,
+	XEN_SPIN_UNLOCK_VECTOR = 3,
+	XEN_IRQ_WORK_VECTOR = 4,
+	XEN_NMI_VECTOR = 5,
+	XEN_NR_IPIS = 6,
+};
+
+struct xen_common_irq {
+	int irq;
+	char *name;
+};
+
+struct cpu_user_regs {
+	uint64_t r15;
+	uint64_t r14;
+	uint64_t r13;
+	uint64_t r12;
+	union {
+		uint64_t rbp;
+		uint64_t ebp;
+		uint32_t _ebp;
+	};
+	union {
+		uint64_t rbx;
+		uint64_t ebx;
+		uint32_t _ebx;
+	};
+	uint64_t r11;
+	uint64_t r10;
+	uint64_t r9;
+	uint64_t r8;
+	union {
+		uint64_t rax;
+		uint64_t eax;
+		uint32_t _eax;
+	};
+	union {
+		uint64_t rcx;
+		uint64_t ecx;
+		uint32_t _ecx;
+	};
+	union {
+		uint64_t rdx;
+		uint64_t edx;
+		uint32_t _edx;
+	};
+	union {
+		uint64_t rsi;
+		uint64_t esi;
+		uint32_t _esi;
+	};
+	union {
+		uint64_t rdi;
+		uint64_t edi;
+		uint32_t _edi;
+	};
+	uint32_t error_code;
+	uint32_t entry_vector;
+	union {
+		uint64_t rip;
+		uint64_t eip;
+		uint32_t _eip;
+	};
+	uint16_t cs;
+	uint16_t _pad0[1];
+	uint8_t saved_upcall_mask;
+	uint8_t _pad1[3];
+	union {
+		uint64_t rflags;
+		uint64_t eflags;
+		uint32_t _eflags;
+	};
+	union {
+		uint64_t rsp;
+		uint64_t esp;
+		uint32_t _esp;
+	};
+	uint16_t ss;
+	uint16_t _pad2[3];
+	uint16_t es;
+	uint16_t _pad3[3];
+	uint16_t ds;
+	uint16_t _pad4[3];
+	uint16_t fs;
+	uint16_t _pad5[3];
+	uint16_t gs;
+	uint16_t _pad6[3];
+};
+
+struct vcpu_guest_context {
+	struct {
+		char x[512];
+	} fpu_ctxt;
+	long unsigned int flags;
+	struct cpu_user_regs user_regs;
+	struct trap_info trap_ctxt[256];
+	long unsigned int ldt_base;
+	long unsigned int ldt_ents;
+	long unsigned int gdt_frames[16];
+	long unsigned int gdt_ents;
+	long unsigned int kernel_ss;
+	long unsigned int kernel_sp;
+	long unsigned int ctrlreg[8];
+	long unsigned int debugreg[8];
+	long unsigned int event_callback_eip;
+	long unsigned int failsafe_callback_eip;
+	long unsigned int syscall_callback_eip;
+	long unsigned int vm_assist;
+	uint64_t fs_base;
+	uint64_t gs_base_kernel;
+	uint64_t gs_base_user;
+};
+
+union efi_boot_services;
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		long unsigned int fw_vendor;
+		u32 fw_revision;
+		long unsigned int con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		long unsigned int con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		long unsigned int stderr_handle;
+		long unsigned int stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		long unsigned int nr_tables;
+		long unsigned int tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+enum efi_secureboot_mode {
+	efi_secureboot_mode_unset = 0,
+	efi_secureboot_mode_unknown = 1,
+	efi_secureboot_mode_disabled = 2,
+	efi_secureboot_mode_enabled = 3,
+};
+
+struct hvm_modlist_entry {
+	uint64_t paddr;
+	uint64_t size;
+	uint64_t cmdline_paddr;
+	uint64_t reserved;
+};
+
+struct hvm_memmap_table_entry {
+	uint64_t addr;
+	uint64_t size;
+	uint32_t type;
+	uint32_t reserved;
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0,
+	WORK_STRUCT_INACTIVE_BIT = 1,
+	WORK_STRUCT_PWQ_BIT = 2,
+	WORK_STRUCT_LINKED_BIT = 3,
+	WORK_STRUCT_COLOR_SHIFT = 4,
+	WORK_STRUCT_COLOR_BITS = 4,
+	WORK_STRUCT_PENDING = 1,
+	WORK_STRUCT_INACTIVE = 2,
+	WORK_STRUCT_PWQ = 4,
+	WORK_STRUCT_LINKED = 8,
+	WORK_STRUCT_STATIC = 0,
+	WORK_NR_COLORS = 16,
+	WORK_CPU_UNBOUND = 8192,
+	WORK_STRUCT_FLAG_BITS = 8,
+	WORK_OFFQ_FLAG_BASE = 4,
+	__WORK_OFFQ_CANCELING = 4,
+	WORK_OFFQ_CANCELING = 16,
+	WORK_OFFQ_FLAG_BITS = 1,
+	WORK_OFFQ_POOL_SHIFT = 5,
+	WORK_OFFQ_LEFT = 59,
+	WORK_OFFQ_POOL_BITS = 31,
+	WORK_OFFQ_POOL_NONE = 2147483647,
+	WORK_STRUCT_FLAG_MASK = 255,
+	WORK_STRUCT_WQ_DATA_MASK = 4294967040,
+	WORK_STRUCT_NO_POOL = 4294967264,
+	WORK_BUSY_PENDING = 1,
+	WORK_BUSY_RUNNING = 2,
+	WORKER_DESC_LEN = 24,
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+union hv_x64_msr_hypercall_contents {
+	u64 as_uint64;
+	struct {
+		u64 enable: 1;
+		u64 reserved: 11;
+		u64 guest_physical_address: 52;
+	};
+};
+
+union hv_vp_assist_msr_contents {
+	u64 as_uint64;
+	struct {
+		u64 enable: 1;
+		u64 reserved: 11;
+		u64 pfn: 52;
+	};
+};
+
+struct hv_reenlightenment_control {
+	__u64 vector: 8;
+	__u64 reserved1: 8;
+	__u64 enabled: 1;
+	__u64 reserved2: 15;
+	__u64 target_vp: 32;
+};
+
+struct hv_tsc_emulation_control {
+	__u64 enabled: 1;
+	__u64 reserved: 63;
+};
+
+struct hv_tsc_emulation_status {
+	__u64 inprogress: 1;
+	__u64 reserved: 63;
+};
+
+struct hv_nested_enlightenments_control {
+	struct {
+		__u32 directhypercall: 1;
+		__u32 reserved: 31;
+	} features;
+	struct {
+		__u32 reserved;
+	} hypercallControls;
+};
+
+struct hv_vp_assist_page {
+	__u32 apic_assist;
+	__u32 reserved1;
+	__u64 vtl_control[3];
+	struct hv_nested_enlightenments_control nested_control;
+	__u8 enlighten_vmentry;
+	__u8 reserved2[7];
+	__u64 current_nested_vmcs;
+};
+
+struct hv_get_partition_id {
+	u64 partition_id;
+};
+
+union hv_ghcb;
+
+struct ms_hyperv_info {
+	u32 features;
+	u32 priv_high;
+	u32 misc_features;
+	u32 hints;
+	u32 nested_features;
+	u32 max_vp_index;
+	u32 max_lp_index;
+	u32 isolation_config_a;
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type: 4;
+			u32 reserved1: 1;
+			u32 shared_gpa_boundary_active: 1;
+			u32 shared_gpa_boundary_bits: 6;
+			u32 reserved2: 20;
+		};
+	};
+	u64 shared_gpa_boundary;
+};
+
+enum HV_GENERIC_SET_FORMAT {
+	HV_GENERIC_SET_SPARSE_4K = 0,
+	HV_GENERIC_SET_ALL = 1,
+};
+
+struct hv_vpset {
+	u64 format;
+	u64 valid_bank_mask;
+	u64 bank_contents[0];
+};
+
+struct hv_tlb_flush {
+	u64 address_space;
+	u64 flags;
+	u64 processor_mask;
+	u64 gva_list[0];
+};
+
+struct hv_tlb_flush_ex {
+	u64 address_space;
+	u64 flags;
+	struct hv_vpset hv_vp_set;
+	u64 gva_list[0];
+};
+
+struct trace_event_raw_hyperv_mmu_flush_tlb_multi {
+	struct trace_entry ent;
+	unsigned int ncpus;
+	struct mm_struct *mm;
+	long unsigned int addr;
+	long unsigned int end;
+	char __data[0];
+};
+
+struct trace_event_raw_hyperv_nested_flush_guest_mapping {
+	struct trace_entry ent;
+	u64 as;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_hyperv_nested_flush_guest_mapping_range {
+	struct trace_entry ent;
+	u64 as;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_hyperv_send_ipi_mask {
+	struct trace_entry ent;
+	unsigned int ncpus;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_hyperv_send_ipi_one {
+	struct trace_entry ent;
+	int cpu;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hyperv_mmu_flush_tlb_multi {};
+
+struct trace_event_data_offsets_hyperv_nested_flush_guest_mapping {};
+
+struct trace_event_data_offsets_hyperv_nested_flush_guest_mapping_range {};
+
+struct trace_event_data_offsets_hyperv_send_ipi_mask {};
+
+struct trace_event_data_offsets_hyperv_send_ipi_one {};
+
+typedef void (*btf_trace_hyperv_mmu_flush_tlb_multi)(void *, const struct cpumask *, const struct flush_tlb_info *);
+
+typedef void (*btf_trace_hyperv_nested_flush_guest_mapping)(void *, u64, int);
+
+typedef void (*btf_trace_hyperv_nested_flush_guest_mapping_range)(void *, u64, int);
+
+typedef void (*btf_trace_hyperv_send_ipi_mask)(void *, const struct cpumask *, int);
+
+typedef void (*btf_trace_hyperv_send_ipi_one)(void *, int, int);
+
+struct hv_guest_mapping_flush {
+	u64 address_space;
+	u64 flags;
+};
+
+union hv_gpa_page_range {
+	u64 address_space;
+	struct {
+		u64 additional_pages: 11;
+		u64 largepage: 1;
+		u64 basepfn: 52;
+	} page;
+	struct {
+		u64 reserved: 12;
+		u64 page_size: 1;
+		u64 reserved1: 8;
+		u64 base_large_pfn: 43;
+	};
+};
+
+struct hv_guest_mapping_flush_list {
+	u64 address_space;
+	u64 flags;
+	union hv_gpa_page_range gpa_list[510];
+};
+
+typedef int (*hyperv_fill_flush_list_func)(struct hv_guest_mapping_flush_list *, void *);
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+enum irq_alloc_type {
+	X86_IRQ_ALLOC_TYPE_IOAPIC = 1,
+	X86_IRQ_ALLOC_TYPE_HPET = 2,
+	X86_IRQ_ALLOC_TYPE_PCI_MSI = 3,
+	X86_IRQ_ALLOC_TYPE_PCI_MSIX = 4,
+	X86_IRQ_ALLOC_TYPE_DMAR = 5,
+	X86_IRQ_ALLOC_TYPE_AMDVI = 6,
+	X86_IRQ_ALLOC_TYPE_UV = 7,
+};
+
+struct ioapic_alloc_info {
+	int pin;
+	int node;
+	u32 is_level: 1;
+	u32 active_low: 1;
+	u32 valid: 1;
+};
+
+struct uv_alloc_info {
+	int limit;
+	int blade;
+	long unsigned int offset;
+	char *name;
+};
+
+struct irq_alloc_info {
+	enum irq_alloc_type type;
+	u32 flags;
+	u32 devid;
+	irq_hw_number_t hwirq;
+	const struct cpumask *mask;
+	struct msi_desc *desc;
+	void *data;
+	union {
+		struct ioapic_alloc_info ioapic;
+		struct uv_alloc_info uv;
+	};
+};
+
+struct irq_cfg {
+	unsigned int dest_apicid;
+	unsigned int vector;
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+typedef struct irq_alloc_info msi_alloc_info_t;
+
+struct msi_domain_info;
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+};
+
+struct msi_domain_info {
+	u32 flags;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_MULTI_PCI_MSI = 4,
+	MSI_FLAG_PCI_MSIX = 8,
+	MSI_FLAG_ACTIVATE_EARLY = 16,
+	MSI_FLAG_MUST_REACTIVATE = 32,
+	MSI_FLAG_LEVEL_CAPABLE = 64,
+	MSI_FLAG_DEV_SYSFS = 128,
+	MSI_FLAG_MSIX_CONTIGUOUS = 256,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 512,
+	MSI_FLAG_FREE_MSI_DESCS = 1024,
+};
+
+enum hv_interrupt_type {
+	HV_X64_INTERRUPT_TYPE_FIXED = 0,
+	HV_X64_INTERRUPT_TYPE_LOWESTPRIORITY = 1,
+	HV_X64_INTERRUPT_TYPE_SMI = 2,
+	HV_X64_INTERRUPT_TYPE_REMOTEREAD = 3,
+	HV_X64_INTERRUPT_TYPE_NMI = 4,
+	HV_X64_INTERRUPT_TYPE_INIT = 5,
+	HV_X64_INTERRUPT_TYPE_SIPI = 6,
+	HV_X64_INTERRUPT_TYPE_EXTINT = 7,
+	HV_X64_INTERRUPT_TYPE_LOCALINT0 = 8,
+	HV_X64_INTERRUPT_TYPE_LOCALINT1 = 9,
+	HV_X64_INTERRUPT_TYPE_MAXIMUM = 10,
+};
+
+union hv_msi_address_register {
+	u32 as_uint32;
+	struct {
+		u32 reserved1: 2;
+		u32 destination_mode: 1;
+		u32 redirection_hint: 1;
+		u32 reserved2: 8;
+		u32 destination_id: 8;
+		u32 msi_base: 12;
+	};
+};
+
+union hv_msi_data_register {
+	u32 as_uint32;
+	struct {
+		u32 vector: 8;
+		u32 delivery_mode: 3;
+		u32 reserved1: 3;
+		u32 level_assert: 1;
+		u32 trigger_mode: 1;
+		u32 reserved2: 16;
+	};
+};
+
+union hv_msi_entry {
+	u64 as_uint64;
+	struct {
+		union hv_msi_address_register address;
+		union hv_msi_data_register data;
+	};
+};
+
+union hv_ioapic_rte {
+	u64 as_uint64;
+	struct {
+		u32 vector: 8;
+		u32 delivery_mode: 3;
+		u32 destination_mode: 1;
+		u32 delivery_status: 1;
+		u32 interrupt_polarity: 1;
+		u32 remote_irr: 1;
+		u32 trigger_mode: 1;
+		u32 interrupt_mask: 1;
+		u32 reserved1: 15;
+		u32 reserved2: 24;
+		u32 destination_id: 8;
+	};
+	struct {
+		u32 low_uint32;
+		u32 high_uint32;
+	};
+};
+
+struct hv_interrupt_entry {
+	u32 source;
+	u32 reserved1;
+	union {
+		union hv_msi_entry msi_entry;
+		union hv_ioapic_rte ioapic_rte;
+	};
+};
+
+struct hv_device_interrupt_target {
+	u32 vector;
+	u32 flags;
+	union {
+		u64 vp_mask;
+		struct hv_vpset vp_set;
+	};
+};
+
+enum hv_device_type {
+	HV_DEVICE_TYPE_LOGICAL = 0,
+	HV_DEVICE_TYPE_PCI = 1,
+	HV_DEVICE_TYPE_IOAPIC = 2,
+	HV_DEVICE_TYPE_ACPI = 3,
+};
+
+typedef u16 hv_pci_rid;
+
+typedef u16 hv_pci_segment;
+
+union hv_pci_bdf {
+	u16 as_uint16;
+	struct {
+		u8 function: 3;
+		u8 device: 5;
+		u8 bus;
+	};
+};
+
+union hv_pci_bus_range {
+	u16 as_uint16;
+	struct {
+		u8 subordinate_bus;
+		u8 secondary_bus;
+	};
+};
+
+union hv_device_id {
+	u64 as_uint64;
+	struct {
+		u64 reserved0: 62;
+		u64 device_type: 2;
+	};
+	struct {
+		u64 id: 62;
+		u64 device_type: 2;
+	} logical;
+	struct {
+		union {
+			hv_pci_rid rid;
+			union hv_pci_bdf bdf;
+		};
+		hv_pci_segment segment;
+		union hv_pci_bus_range shadow_bus_range;
+		u16 phantom_function_bits: 2;
+		u16 source_shadow: 1;
+		u16 rsvdz0: 11;
+		u16 device_type: 2;
+	} pci;
+	struct {
+		u8 ioapic_id;
+		u8 rsvdz0;
+		u16 rsvdz1;
+		u16 rsvdz2;
+		u16 rsvdz3: 14;
+		u16 device_type: 2;
+	} ioapic;
+	struct {
+		u32 input_mapping_base;
+		u32 input_mapping_count: 30;
+		u32 device_type: 2;
+	} acpi;
+};
+
+enum hv_interrupt_trigger_mode {
+	HV_INTERRUPT_TRIGGER_MODE_EDGE = 0,
+	HV_INTERRUPT_TRIGGER_MODE_LEVEL = 1,
+};
+
+struct hv_device_interrupt_descriptor {
+	u32 interrupt_type;
+	u32 trigger_mode;
+	u32 vector_count;
+	u32 reserved;
+	struct hv_device_interrupt_target target;
+};
+
+struct hv_input_map_device_interrupt {
+	u64 partition_id;
+	u64 device_id;
+	u64 flags;
+	struct hv_interrupt_entry logical_interrupt_entry;
+	struct hv_device_interrupt_descriptor interrupt_descriptor;
+};
+
+struct hv_output_map_device_interrupt {
+	struct hv_interrupt_entry interrupt_entry;
+};
+
+struct hv_input_unmap_device_interrupt {
+	u64 partition_id;
+	u64 device_id;
+	struct hv_interrupt_entry interrupt_entry;
+};
+
+struct rid_data {
+	struct pci_dev *bridge;
+	u32 rid;
+};
+
+struct ghcb_save_area {
+	u8 reserved_1[203];
+	u8 cpl;
+	u8 reserved_2[116];
+	u64 xss;
+	u8 reserved_3[24];
+	u64 dr7;
+	u8 reserved_4[16];
+	u64 rip;
+	u8 reserved_5[88];
+	u64 rsp;
+	u8 reserved_6[24];
+	u64 rax;
+	u8 reserved_7[264];
+	u64 rcx;
+	u64 rdx;
+	u64 rbx;
+	u8 reserved_8[8];
+	u64 rbp;
+	u64 rsi;
+	u64 rdi;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u8 reserved_9[16];
+	u64 sw_exit_code;
+	u64 sw_exit_info_1;
+	u64 sw_exit_info_2;
+	u64 sw_scratch;
+	u8 reserved_10[56];
+	u64 xcr0;
+	u8 valid_bitmap[16];
+	u64 x87_state_gpa;
+};
+
+struct ghcb {
+	struct ghcb_save_area save;
+	u8 reserved_save[1016];
+	u8 shared_buffer[2032];
+	u8 reserved_1[10];
+	u16 protocol_version;
+	u32 ghcb_usage;
+};
+
+enum hv_isolation_type {
+	HV_ISOLATION_TYPE_NONE = 0,
+	HV_ISOLATION_TYPE_VBS = 1,
+	HV_ISOLATION_TYPE_SNP = 2,
+};
+
+enum hv_mem_host_visibility {
+	VMBUS_PAGE_NOT_VISIBLE = 0,
+	VMBUS_PAGE_VISIBLE_READ_ONLY = 1,
+	VMBUS_PAGE_VISIBLE_READ_WRITE = 3,
+};
+
+struct hv_gpa_range_for_visibility {
+	u64 partition_id;
+	u32 host_visibility: 2;
+	u32 reserved0: 30;
+	u32 reserved1;
+	u64 gpa_page_list[510];
+};
+
+enum intercept_words {
+	INTERCEPT_CR = 0,
+	INTERCEPT_DR = 1,
+	INTERCEPT_EXCEPTION = 2,
+	INTERCEPT_WORD3 = 3,
+	INTERCEPT_WORD4 = 4,
+	INTERCEPT_WORD5 = 5,
+	MAX_INTERCEPT = 6,
+};
+
+struct es_fault_info {
+	long unsigned int vector;
+	long unsigned int error_code;
+	long unsigned int cr2;
+};
+
+struct es_em_ctxt {
+	struct pt_regs *regs;
+	struct insn insn;
+	struct es_fault_info fi;
+};
+
+union hv_ghcb___2 {
+	struct ghcb ghcb;
+	struct {
+		u64 hypercalldata[509];
+		u64 outputgpa;
+		union {
+			union {
+				struct {
+					u32 callcode: 16;
+					u32 isfast: 1;
+					u32 reserved1: 14;
+					u32 isnested: 1;
+					u32 countofelements: 12;
+					u32 reserved2: 4;
+					u32 repstartindex: 12;
+					u32 reserved3: 4;
+				};
+				u64 asuint64;
+			} hypercallinput;
+			union {
+				struct {
+					u16 callstatus;
+					u16 reserved1;
+					u32 elementsprocessed: 12;
+					u32 reserved2: 20;
+				};
+				u64 asunit64;
+			} hypercalloutput;
+		};
+		u64 reserved2;
+	} hypercall;
+};
+
+struct hv_send_ipi {
+	u32 vector;
+	u32 reserved;
+	u64 cpu_mask;
+};
+
+struct hv_send_ipi_ex {
+	u32 vector;
+	u32 reserved;
+	struct hv_vpset vp_set;
+};
+
+struct hv_deposit_memory {
+	u64 partition_id;
+	u64 gpa_page_list[0];
+};
+
+struct hv_proximity_domain_flags {
+	u32 proximity_preferred: 1;
+	u32 reserved: 30;
+	u32 proximity_info_valid: 1;
+};
+
+union hv_proximity_domain_info {
+	struct {
+		u32 domain_id;
+		struct hv_proximity_domain_flags flags;
+	};
+	u64 as_uint64;
+};
+
+struct hv_lp_startup_status {
+	u64 hv_status;
+	u64 substatus1;
+	u64 substatus2;
+	u64 substatus3;
+	u64 substatus4;
+	u64 substatus5;
+	u64 substatus6;
+};
+
+struct hv_add_logical_processor_in {
+	u32 lp_index;
+	u32 apic_id;
+	union hv_proximity_domain_info proximity_domain_info;
+	u64 flags;
+};
+
+struct hv_add_logical_processor_out {
+	struct hv_lp_startup_status startup_status;
+};
+
+enum HV_SUBNODE_TYPE {
+	HvSubnodeAny = 0,
+	HvSubnodeSocket = 1,
+	HvSubnodeAmdNode = 2,
+	HvSubnodeL3 = 3,
+	HvSubnodeCount = 4,
+	HvSubnodeInvalid = 4294967295,
+};
+
+struct hv_create_vp {
+	u64 partition_id;
+	u32 vp_index;
+	u8 padding[3];
+	u8 subnode_type;
+	u64 subnode_id;
+	union hv_proximity_domain_info proximity_domain_info;
+	u64 flags;
+};
+
+struct real_mode_header {
+	u32 text_start;
+	u32 ro_end;
+	u32 trampoline_start;
+	u32 trampoline_header;
+	u32 sev_es_trampoline_start;
+	u32 trampoline_start64;
+	u32 trampoline_pgd;
+	u32 wakeup_start;
+	u32 wakeup_header;
+	u32 machine_real_restart_asm;
+	u32 machine_real_restart_seg;
+};
+
+struct trampoline_header {
+	u64 start;
+	u64 efer;
+	u32 cr4;
+	u32 flags;
+};
+
+enum show_regs_mode {
+	SHOW_REGS_SHORT = 0,
+	SHOW_REGS_USER = 1,
+	SHOW_REGS_ALL = 2,
+};
+
+struct resctrl_pqr_state {
+	u32 cur_rmid;
+	u32 cur_closid;
+	u32 default_rmid;
+	u32 default_closid;
+};
+
+enum which_selector {
+	FS = 0,
+	GS = 1,
+};
+
+struct sigcontext_64 {
+	__u64 r8;
+	__u64 r9;
+	__u64 r10;
+	__u64 r11;
+	__u64 r12;
+	__u64 r13;
+	__u64 r14;
+	__u64 r15;
+	__u64 di;
+	__u64 si;
+	__u64 bp;
+	__u64 bx;
+	__u64 dx;
+	__u64 ax;
+	__u64 cx;
+	__u64 sp;
+	__u64 ip;
+	__u64 flags;
+	__u16 cs;
+	__u16 gs;
+	__u16 fs;
+	__u16 ss;
+	__u64 err;
+	__u64 trapno;
+	__u64 oldmask;
+	__u64 cr2;
+	__u64 fpstate;
+	__u64 reserved1[8];
+};
+
+struct sigaltstack {
+	void *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
+	};
+};
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+struct __large_struct {
+	long unsigned int buf[100];
+};
+
+typedef u32 compat_sigset_word;
+
+typedef struct {
+	compat_sigset_word sig[2];
+} compat_sigset_t;
+
+struct ucontext {
+	long unsigned int uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	struct sigcontext_64 uc_mcontext;
+	sigset_t uc_sigmask;
+};
+
+struct kernel_vm86_regs {
+	struct pt_regs pt;
+	short unsigned int es;
+	short unsigned int __esh;
+	short unsigned int ds;
+	short unsigned int __dsh;
+	short unsigned int fs;
+	short unsigned int __fsh;
+	short unsigned int gs;
+	short unsigned int __gsh;
+};
+
+struct rt_sigframe {
+	char *pretcode;
+	struct ucontext uc;
+	struct siginfo info;
+};
+
+typedef struct siginfo siginfo_t;
+
+typedef s32 compat_clock_t;
+
+typedef s32 compat_pid_t;
+
+typedef s32 compat_timer_t;
+
+typedef s32 compat_int_t;
+
+typedef u32 compat_ulong_t;
+
+typedef u32 __compat_uid32_t;
+
+union compat_sigval {
+	compat_int_t sival_int;
+	compat_uptr_t sival_ptr;
+};
+
+typedef union compat_sigval compat_sigval_t;
+
+struct compat_siginfo {
+	int si_signo;
+	int si_errno;
+	int si_code;
+	union {
+		int _pad[29];
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+		} _kill;
+		struct {
+			compat_timer_t _tid;
+			int _overrun;
+			compat_sigval_t _sigval;
+		} _timer;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			compat_sigval_t _sigval;
+		} _rt;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			int _status;
+			compat_clock_t _utime;
+			compat_clock_t _stime;
+		} _sigchld;
+		struct {
+			compat_uptr_t _addr;
+			union {
+				int _trapno;
+				short int _addr_lsb;
+				struct {
+					char _dummy_bnd[4];
+					compat_uptr_t _lower;
+					compat_uptr_t _upper;
+				} _addr_bnd;
+				struct {
+					char _dummy_pkey[4];
+					u32 _pkey;
+				} _addr_pkey;
+				struct {
+					compat_ulong_t _data;
+					u32 _type;
+					u32 _flags;
+				} _perf;
+			};
+		} _sigfault;
+		struct {
+			compat_long_t _band;
+			int _fd;
+		} _sigpoll;
+		struct {
+			compat_uptr_t _call_addr;
+			int _syscall;
+			unsigned int _arch;
+		} _sigsys;
+	} _sifields;
+};
+
+typedef struct compat_siginfo compat_siginfo_t;
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+enum insn_mode {
+	INSN_MODE_32 = 0,
+	INSN_MODE_64 = 1,
+	INSN_MODE_KERN = 2,
+	INSN_NUM_MODES = 3,
+};
+
+typedef u8 kprobe_opcode_t;
+
+struct kprobe;
+
+struct arch_specific_insn {
+	kprobe_opcode_t *insn;
+	unsigned int boostable: 1;
+	unsigned char size;
+	union {
+		unsigned char opcode;
+		struct {
+			unsigned char type;
+		} jcc;
+		struct {
+			unsigned char type;
+			unsigned char asize;
+		} loop;
+		struct {
+			unsigned char reg;
+		} indirect;
+	};
+	s32 rel32;
+	void (*emulate_op)(struct kprobe *, struct pt_regs *);
+	int tp_len;
+};
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	long unsigned int nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+enum die_val {
+	DIE_OOPS = 1,
+	DIE_INT3 = 2,
+	DIE_DEBUG = 3,
+	DIE_PANIC = 4,
+	DIE_NMI = 5,
+	DIE_DIE = 6,
+	DIE_KERNELDEBUG = 7,
+	DIE_TRAP = 8,
+	DIE_GPF = 9,
+	DIE_CALL = 10,
+	DIE_PAGE_FAULT = 11,
+	DIE_NMIUNKNOWN = 12,
+};
+
+typedef unsigned int ioasid_t;
+
+struct cea_exception_stacks {
+	char DF_stack_guard[4096];
+	char DF_stack[8192];
+	char NMI_stack_guard[4096];
+	char NMI_stack[8192];
+	char DB_stack_guard[4096];
+	char DB_stack[8192];
+	char MCE_stack_guard[4096];
+	char MCE_stack[8192];
+	char VC_stack_guard[4096];
+	char VC_stack[8192];
+	char VC2_stack_guard[4096];
+	char VC2_stack[8192];
+	char IST_top_guard[4096];
+};
+
+enum kernel_gp_hint {
+	GP_NO_HINT = 0,
+	GP_NON_CANONICAL = 1,
+	GP_CANONICAL = 2,
+};
+
+typedef struct irq_desc *vector_irq_t[256];
+
+struct trace_event_raw_x86_irq_vector {
+	struct trace_entry ent;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_config {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	unsigned int cpu;
+	unsigned int apicdest;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_mod {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	unsigned int cpu;
+	unsigned int prev_vector;
+	unsigned int prev_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_reserve {
+	struct trace_entry ent;
+	unsigned int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_alloc {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	bool reserved;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_alloc_managed {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_activate {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_managed;
+	bool can_reserve;
+	bool reserve;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_teardown {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_managed;
+	bool has_reserved;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_setup {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_legacy;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_free_moved {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int cpu;
+	unsigned int vector;
+	bool is_managed;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_x86_irq_vector {};
+
+struct trace_event_data_offsets_vector_config {};
+
+struct trace_event_data_offsets_vector_mod {};
+
+struct trace_event_data_offsets_vector_reserve {};
+
+struct trace_event_data_offsets_vector_alloc {};
+
+struct trace_event_data_offsets_vector_alloc_managed {};
+
+struct trace_event_data_offsets_vector_activate {};
+
+struct trace_event_data_offsets_vector_teardown {};
+
+struct trace_event_data_offsets_vector_setup {};
+
+struct trace_event_data_offsets_vector_free_moved {};
+
+typedef void (*btf_trace_local_timer_entry)(void *, int);
+
+typedef void (*btf_trace_local_timer_exit)(void *, int);
+
+typedef void (*btf_trace_spurious_apic_entry)(void *, int);
+
+typedef void (*btf_trace_spurious_apic_exit)(void *, int);
+
+typedef void (*btf_trace_error_apic_entry)(void *, int);
+
+typedef void (*btf_trace_error_apic_exit)(void *, int);
+
+typedef void (*btf_trace_x86_platform_ipi_entry)(void *, int);
+
+typedef void (*btf_trace_x86_platform_ipi_exit)(void *, int);
+
+typedef void (*btf_trace_irq_work_entry)(void *, int);
+
+typedef void (*btf_trace_irq_work_exit)(void *, int);
+
+typedef void (*btf_trace_reschedule_entry)(void *, int);
+
+typedef void (*btf_trace_reschedule_exit)(void *, int);
+
+typedef void (*btf_trace_call_function_entry)(void *, int);
+
+typedef void (*btf_trace_call_function_exit)(void *, int);
+
+typedef void (*btf_trace_call_function_single_entry)(void *, int);
+
+typedef void (*btf_trace_call_function_single_exit)(void *, int);
+
+typedef void (*btf_trace_threshold_apic_entry)(void *, int);
+
+typedef void (*btf_trace_threshold_apic_exit)(void *, int);
+
+typedef void (*btf_trace_deferred_error_apic_entry)(void *, int);
+
+typedef void (*btf_trace_deferred_error_apic_exit)(void *, int);
+
+typedef void (*btf_trace_thermal_apic_entry)(void *, int);
+
+typedef void (*btf_trace_thermal_apic_exit)(void *, int);
+
+typedef void (*btf_trace_vector_config)(void *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_clear)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_reserve_managed)(void *, unsigned int, int);
+
+typedef void (*btf_trace_vector_reserve)(void *, unsigned int, int);
+
+typedef void (*btf_trace_vector_alloc)(void *, unsigned int, unsigned int, bool, int);
+
+typedef void (*btf_trace_vector_alloc_managed)(void *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_vector_activate)(void *, unsigned int, bool, bool, bool);
+
+typedef void (*btf_trace_vector_deactivate)(void *, unsigned int, bool, bool, bool);
+
+typedef void (*btf_trace_vector_teardown)(void *, unsigned int, bool, bool);
+
+typedef void (*btf_trace_vector_setup)(void *, unsigned int, bool, int);
+
+typedef void (*btf_trace_vector_free_moved)(void *, unsigned int, unsigned int, unsigned int, bool);
+
+struct irq_stack {
+	char stack[16384];
+};
+
+struct estack_pages {
+	u32 offs;
+	u16 size;
+	u16 type;
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_PCMCIA_CIS = 10,
+	LOCKDOWN_TIOCSSERIAL = 11,
+	LOCKDOWN_MODULE_PARAMETERS = 12,
+	LOCKDOWN_MMIOTRACE = 13,
+	LOCKDOWN_DEBUGFS = 14,
+	LOCKDOWN_XMON_WR = 15,
+	LOCKDOWN_BPF_WRITE_USER = 16,
+	LOCKDOWN_DBG_WRITE_KERNEL = 17,
+	LOCKDOWN_INTEGRITY_MAX = 18,
+	LOCKDOWN_KCORE = 19,
+	LOCKDOWN_KPROBES = 20,
+	LOCKDOWN_BPF_READ_KERNEL = 21,
+	LOCKDOWN_DBG_READ_KERNEL = 22,
+	LOCKDOWN_PERF = 23,
+	LOCKDOWN_TRACEFS = 24,
+	LOCKDOWN_XMON_RW = 25,
+	LOCKDOWN_XFRM_SECRET = 26,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 27,
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+struct entry_stack {
+	char stack[4096];
+};
+
+struct trace_event_raw_nmi_handler {
+	struct trace_entry ent;
+	void *handler;
+	s64 delta_ns;
+	int handled;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nmi_handler {};
+
+typedef void (*btf_trace_nmi_handler)(void *, void *, s64, int);
+
+struct nmi_desc {
+	raw_spinlock_t lock;
+	struct list_head head;
+};
+
+struct nmi_stats {
+	unsigned int normal;
+	unsigned int unknown;
+	unsigned int external;
+	unsigned int swallow;
+};
+
+enum nmi_states {
+	NMI_NOT_RUNNING = 0,
+	NMI_EXECUTING = 1,
+	NMI_LATCHED = 2,
+};
+
+struct user_desc {
+	unsigned int entry_number;
+	unsigned int base_addr;
+	unsigned int limit;
+	unsigned int seg_32bit: 1;
+	unsigned int contents: 2;
+	unsigned int read_exec_only: 1;
+	unsigned int limit_in_pages: 1;
+	unsigned int seg_not_present: 1;
+	unsigned int useable: 1;
+	unsigned int lm: 1;
+};
+
+struct edd {
+	unsigned int mbr_signature[16];
+	struct edd_info edd_info[6];
+	unsigned char mbr_signature_nr;
+	unsigned char edd_info_nr;
+};
+
+struct setup_data {
+	__u64 next;
+	__u32 type;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct setup_indirect {
+	__u32 type;
+	__u32 reserved;
+	__u64 len;
+	__u64 addr;
+};
+
+enum con_scroll {
+	SM_UP = 0,
+	SM_DOWN = 1,
+};
+
+enum vc_intensity {
+	VCI_HALF_BRIGHT = 0,
+	VCI_NORMAL = 1,
+	VCI_BOLD = 2,
+	VCI_MASK = 3,
+};
+
+struct vc_data;
+
+struct console_font;
+
+struct consw {
+	struct module *owner;
+	const char * (*con_startup)();
+	void (*con_init)(struct vc_data *, int);
+	void (*con_deinit)(struct vc_data *);
+	void (*con_clear)(struct vc_data *, int, int, int, int);
+	void (*con_putc)(struct vc_data *, int, int, int);
+	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
+	void (*con_cursor)(struct vc_data *, int);
+	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
+	int (*con_switch)(struct vc_data *);
+	int (*con_blank)(struct vc_data *, int, int);
+	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
+	int (*con_font_get)(struct vc_data *, struct console_font *);
+	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
+	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
+	void (*con_set_palette)(struct vc_data *, const unsigned char *);
+	void (*con_scrolldelta)(struct vc_data *, int);
+	int (*con_set_origin)(struct vc_data *);
+	void (*con_save_screen)(struct vc_data *);
+	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
+	void (*con_invert_region)(struct vc_data *, u16 *, int);
+	u16 * (*con_screen_pos)(const struct vc_data *, int);
+	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
+	void (*con_flush_scrollback)(struct vc_data *);
+	int (*con_debug_enter)(struct vc_data *);
+	int (*con_debug_leave)(struct vc_data *);
+};
+
+struct vc_state {
+	unsigned int x;
+	unsigned int y;
+	unsigned char color;
+	unsigned char Gx_charset[2];
+	unsigned int charset: 1;
+	enum vc_intensity intensity;
+	bool italic;
+	bool underline;
+	bool blink;
+	bool reverse;
+};
+
+struct console_font {
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	unsigned char *data;
+};
+
+struct vt_mode {
+	char mode;
+	char waitv;
+	short int relsig;
+	short int acqsig;
+	short int frsig;
+};
+
+struct uni_pagedir;
+
+struct uni_screen;
+
+struct vc_data {
+	struct tty_port port;
+	struct vc_state state;
+	struct vc_state saved_state;
+	short unsigned int vc_num;
+	unsigned int vc_cols;
+	unsigned int vc_rows;
+	unsigned int vc_size_row;
+	unsigned int vc_scan_lines;
+	unsigned int vc_cell_height;
+	long unsigned int vc_origin;
+	long unsigned int vc_scr_end;
+	long unsigned int vc_visible_origin;
+	unsigned int vc_top;
+	unsigned int vc_bottom;
+	const struct consw *vc_sw;
+	short unsigned int *vc_screenbuf;
+	unsigned int vc_screenbuf_size;
+	unsigned char vc_mode;
+	unsigned char vc_attr;
+	unsigned char vc_def_color;
+	unsigned char vc_ulcolor;
+	unsigned char vc_itcolor;
+	unsigned char vc_halfcolor;
+	unsigned int vc_cursor_type;
+	short unsigned int vc_complement_mask;
+	short unsigned int vc_s_complement_mask;
+	long unsigned int vc_pos;
+	short unsigned int vc_hi_font_mask;
+	struct console_font vc_font;
+	short unsigned int vc_video_erase_char;
+	unsigned int vc_state;
+	unsigned int vc_npar;
+	unsigned int vc_par[16];
+	struct vt_mode vt_mode;
+	struct pid *vt_pid;
+	int vt_newvt;
+	wait_queue_head_t paste_wait;
+	unsigned int vc_disp_ctrl: 1;
+	unsigned int vc_toggle_meta: 1;
+	unsigned int vc_decscnm: 1;
+	unsigned int vc_decom: 1;
+	unsigned int vc_decawm: 1;
+	unsigned int vc_deccm: 1;
+	unsigned int vc_decim: 1;
+	unsigned int vc_priv: 3;
+	unsigned int vc_need_wrap: 1;
+	unsigned int vc_can_do_color: 1;
+	unsigned int vc_report_mouse: 2;
+	unsigned char vc_utf: 1;
+	unsigned char vc_utf_count;
+	int vc_utf_char;
+	long unsigned int vc_tab_stop[4];
+	unsigned char vc_palette[48];
+	short unsigned int *vc_translate;
+	unsigned int vc_resize_user;
+	unsigned int vc_bell_pitch;
+	unsigned int vc_bell_duration;
+	short unsigned int vc_cur_blink_ms;
+	struct vc_data **vc_display_fg;
+	struct uni_pagedir *vc_uni_pagedir;
+	struct uni_pagedir **vc_uni_pagedir_loc;
+	struct uni_screen *vc_uni_screen;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+	int nid;
+};
+
+struct memblock_type {
+	long unsigned int cnt;
+	long unsigned int max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+struct legacy_pic {
+	int nr_legacy_irqs;
+	struct irq_chip *chip;
+	void (*mask)(unsigned int);
+	void (*unmask)(unsigned int);
+	void (*mask_all)();
+	void (*restore_mask)();
+	void (*init)(int);
+	int (*probe)();
+	int (*irq_pending)(unsigned int);
+	void (*make_irq)(unsigned int);
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+struct jump_label_patch {
+	const void *code;
+	int size;
+};
+
+enum {
+	JL_STATE_START = 0,
+	JL_STATE_NO_UPDATE = 1,
+	JL_STATE_UPDATE = 2,
+};
+
+enum psc_op {
+	SNP_PAGE_STATE_PRIVATE = 1,
+	SNP_PAGE_STATE_SHARED = 2,
+};
+
+typedef short unsigned int __kernel_old_uid_t;
+
+typedef short unsigned int __kernel_old_gid_t;
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef __kernel_old_uid_t old_uid_t;
+
+typedef __kernel_old_gid_t old_gid_t;
+
+struct kernel_clone_args {
+	u64 flags;
+	int *pidfd;
+	int *child_tid;
+	int *parent_tid;
+	int exit_signal;
+	long unsigned int stack;
+	long unsigned int stack_size;
+	long unsigned int tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int io_thread;
+	int kthread;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct kstatfs {
+	long int f_type;
+	long int f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long int f_namelen;
+	long int f_frsize;
+	long int f_flags;
+	long int f_spare[4];
+};
+
+struct stat64 {
+	long long unsigned int st_dev;
+	unsigned char __pad0[4];
+	unsigned int __st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	long long unsigned int st_rdev;
+	unsigned char __pad3[4];
+	long long int st_size;
+	unsigned int st_blksize;
+	long long int st_blocks;
+	unsigned int st_atime;
+	unsigned int st_atime_nsec;
+	unsigned int st_mtime;
+	unsigned int st_mtime_nsec;
+	unsigned int st_ctime;
+	unsigned int st_ctime_nsec;
+	long long unsigned int st_ino;
+} __attribute__((packed));
+
+struct mmap_arg_struct32 {
+	unsigned int addr;
+	unsigned int len;
+	unsigned int prot;
+	unsigned int flags;
+	unsigned int fd;
+	unsigned int offset;
+};
+
+enum align_flags {
+	ALIGN_VA_32 = 1,
+	ALIGN_VA_64 = 2,
+};
+
+struct va_alignment {
+	int flags;
+	long unsigned int mask;
+	long unsigned int bits;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vm_unmapped_area_info {
+	long unsigned int flags;
+	long unsigned int length;
+	long unsigned int low_limit;
+	long unsigned int high_limit;
+	long unsigned int align_mask;
+	long unsigned int align_offset;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+};
+
+struct change_member {
+	struct e820_entry *entry;
+	long long unsigned int addr;
+};
+
+struct iommu_fault_param;
+
+struct iopf_device_param;
+
+struct iommu_fwspec;
+
+struct dev_iommu {
+	struct mutex lock;
+	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
+	struct iommu_fwspec *fwspec;
+	struct iommu_device *iommu_dev;
+	void *priv;
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+struct iommu_fault_unrecoverable {
+	__u32 reason;
+	__u32 flags;
+	__u32 pasid;
+	__u32 perm;
+	__u64 addr;
+	__u64 fetch_addr;
+};
+
+struct iommu_fault_page_request {
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 perm;
+	__u64 addr;
+	__u64 private_data[2];
+};
+
+struct iommu_fault {
+	__u32 type;
+	__u32 padding;
+	union {
+		struct iommu_fault_unrecoverable event;
+		struct iommu_fault_page_request prm;
+		__u8 padding2[56];
+	};
+};
+
+struct iommu_page_response {
+	__u32 argsz;
+	__u32 version;
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 code;
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);
+
+struct iommu_domain_geometry {
+	dma_addr_t aperture_start;
+	dma_addr_t aperture_end;
+	bool force_aperture;
+};
+
+struct iommu_dma_cookie;
+
+struct iommu_domain {
+	unsigned int type;
+	const struct iommu_domain_ops *ops;
+	long unsigned int pgsize_bitmap;
+	iommu_fault_handler_t handler;
+	void *handler_token;
+	struct iommu_domain_geometry geometry;
+	struct iommu_dma_cookie *iova_cookie;
+};
+
+typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
+
+struct iommu_iotlb_gather;
+
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	void (*detach_dev)(struct iommu_domain *, struct device *);
+	int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
+	void (*free)(struct iommu_domain *);
+};
+
+struct iommu_iotlb_gather {
+	long unsigned int start;
+	long unsigned int end;
+	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
+};
+
+struct iommu_device {
+	struct list_head list;
+	const struct iommu_ops *ops;
+	struct fwnode_handle *fwnode;
+	struct device *dev;
+};
+
+struct iommu_sva {
+	struct device *dev;
+};
+
+struct iommu_fault_event {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iommu_fault_param {
+	iommu_dev_fault_handler_t handler;
+	void *data;
+	struct list_head faults;
+	struct mutex lock;
+};
+
+struct iommu_fwspec {
+	const struct iommu_ops *ops;
+	struct fwnode_handle *iommu_fwnode;
+	u32 flags;
+	unsigned int num_ids;
+	u32 ids[0];
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+enum {
+	NONE_FORCE_HPET_RESUME = 0,
+	OLD_ICH_FORCE_HPET_RESUME = 1,
+	ICH_FORCE_HPET_RESUME = 2,
+	VT8237_FORCE_HPET_RESUME = 3,
+	NVIDIA_FORCE_HPET_RESUME = 4,
+	ATI_FORCE_HPET_RESUME = 5,
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+struct x86_cpu {
+	struct cpu cpu;
+};
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+typedef u8 retpoline_thunk_t[32];
+
+struct paravirt_patch_site {
+	u8 *instr;
+	u8 type;
+	u8 len;
+};
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long int err;
+	int trapnr;
+	int signr;
+};
+
+struct tlb_state_shared {
+	bool is_lazy;
+};
+
+struct smp_alt_module {
+	struct module *mod;
+	char *name;
+	const s32 *locks;
+	const s32 *locks_end;
+	u8 *text;
+	u8 *text_end;
+	struct list_head next;
+};
+
+typedef struct {
+	struct mm_struct *mm;
+} temp_mm_state_t;
+
+typedef void text_poke_f(void *, const void *, size_t);
+
+struct text_poke_loc {
+	s32 rel_addr;
+	s32 disp;
+	u8 len;
+	u8 opcode;
+	const u8 text[5];
+	u8 old;
+};
+
+struct bp_patching_desc {
+	struct text_poke_loc *vec;
+	int nr_entries;
+	atomic_t refs;
+};
+
+enum {
+	HW_BREAKPOINT_LEN_1 = 1,
+	HW_BREAKPOINT_LEN_2 = 2,
+	HW_BREAKPOINT_LEN_3 = 3,
+	HW_BREAKPOINT_LEN_4 = 4,
+	HW_BREAKPOINT_LEN_5 = 5,
+	HW_BREAKPOINT_LEN_6 = 6,
+	HW_BREAKPOINT_LEN_7 = 7,
+	HW_BREAKPOINT_LEN_8 = 8,
+};
+
+enum {
+	HW_BREAKPOINT_EMPTY = 0,
+	HW_BREAKPOINT_R = 1,
+	HW_BREAKPOINT_W = 2,
+	HW_BREAKPOINT_RW = 3,
+	HW_BREAKPOINT_X = 4,
+	HW_BREAKPOINT_INVALID = 7,
+};
+
+typedef unsigned int u_int;
+
+typedef long long unsigned int cycles_t;
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+};
+
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
+};
+
+struct clk;
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_stats;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+struct cpufreq_freqs {
+	struct cpufreq_policy *policy;
+	unsigned int old;
+	unsigned int new;
+	u8 flags;
+};
+
+struct cyc2ns {
+	struct cyc2ns_data data[2];
+	seqcount_latch_t seq;
+};
+
+struct muldiv {
+	u32 multiplier;
+	u32 divider;
+};
+
+struct freq_desc {
+	bool use_msr_plat;
+	struct muldiv muldiv[16];
+	u32 freqs[16];
+	u32 mask;
+};
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct pdev_archdata {};
+
+struct platform_device_id;
+
+struct mfd_cell;
+
+struct platform_device {
+	const char *name;
+	int id;
+	bool id_auto;
+	struct device dev;
+	u64 platform_dma_mask;
+	struct device_dma_parameters dma_parms;
+	u32 num_resources;
+	struct resource *resource;
+	const struct platform_device_id *id_entry;
+	const char *driver_override;
+	struct mfd_cell *mfd_cell;
+	struct pdev_archdata archdata;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct pnp_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+};
+
+struct pnp_card_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+	struct {
+		__u8 id[8];
+	} devs[8];
+};
+
+struct acpi_table_header {
+	char signature[4];
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	char oem_id[6];
+	char oem_table_id[8];
+	u32 oem_revision;
+	char asl_compiler_id[4];
+	u32 asl_compiler_revision;
+};
+
+struct acpi_generic_address {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_table_fadt {
+	struct acpi_table_header header;
+	u32 facs;
+	u32 dsdt;
+	u8 model;
+	u8 preferred_profile;
+	u16 sci_interrupt;
+	u32 smi_command;
+	u8 acpi_enable;
+	u8 acpi_disable;
+	u8 s4_bios_request;
+	u8 pstate_control;
+	u32 pm1a_event_block;
+	u32 pm1b_event_block;
+	u32 pm1a_control_block;
+	u32 pm1b_control_block;
+	u32 pm2_control_block;
+	u32 pm_timer_block;
+	u32 gpe0_block;
+	u32 gpe1_block;
+	u8 pm1_event_length;
+	u8 pm1_control_length;
+	u8 pm2_control_length;
+	u8 pm_timer_length;
+	u8 gpe0_block_length;
+	u8 gpe1_block_length;
+	u8 gpe1_base;
+	u8 cst_control;
+	u16 c2_latency;
+	u16 c3_latency;
+	u16 flush_size;
+	u16 flush_stride;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 day_alarm;
+	u8 month_alarm;
+	u8 century;
+	u16 boot_flags;
+	u8 reserved;
+	u32 flags;
+	struct acpi_generic_address reset_register;
+	u8 reset_value;
+	u16 arm_boot_flags;
+	u8 minor_revision;
+	u64 Xfacs;
+	u64 Xdsdt;
+	struct acpi_generic_address xpm1a_event_block;
+	struct acpi_generic_address xpm1b_event_block;
+	struct acpi_generic_address xpm1a_control_block;
+	struct acpi_generic_address xpm1b_control_block;
+	struct acpi_generic_address xpm2_control_block;
+	struct acpi_generic_address xpm_timer_block;
+	struct acpi_generic_address xgpe0_block;
+	struct acpi_generic_address xgpe1_block;
+	struct acpi_generic_address sleep_control;
+	struct acpi_generic_address sleep_status;
+	u64 hypervisor_id;
+} __attribute__((packed));
+
+struct pnp_protocol;
+
+struct pnp_id;
+
+struct pnp_card {
+	struct device dev;
+	unsigned char number;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head devices;
+	struct pnp_protocol *protocol;
+	struct pnp_id *id;
+	char name[50];
+	unsigned char pnpver;
+	unsigned char productver;
+	unsigned int serial;
+	unsigned char checksum;
+	struct proc_dir_entry *procdir;
+};
+
+struct pnp_dev;
+
+struct pnp_protocol {
+	struct list_head protocol_list;
+	char *name;
+	int (*get)(struct pnp_dev *);
+	int (*set)(struct pnp_dev *);
+	int (*disable)(struct pnp_dev *);
+	bool (*can_wakeup)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	unsigned char number;
+	struct device dev;
+	struct list_head cards;
+	struct list_head devices;
+};
+
+struct pnp_id {
+	char id[8];
+	struct pnp_id *next;
+};
+
+struct pnp_card_driver;
+
+struct pnp_card_link {
+	struct pnp_card *card;
+	struct pnp_card_driver *driver;
+	void *driver_data;
+	pm_message_t pm_state;
+};
+
+struct pnp_driver {
+	const char *name;
+	const struct pnp_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
+	void (*remove)(struct pnp_dev *);
+	void (*shutdown)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	struct device_driver driver;
+};
+
+struct pnp_card_driver {
+	struct list_head global_list;
+	char *name;
+	const struct pnp_card_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
+	void (*remove)(struct pnp_card_link *);
+	int (*suspend)(struct pnp_card_link *, pm_message_t);
+	int (*resume)(struct pnp_card_link *);
+	struct pnp_driver link;
+};
+
+struct pnp_dev {
+	struct device dev;
+	u64 dma_mask;
+	unsigned int number;
+	int status;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head card_list;
+	struct list_head rdev_list;
+	struct pnp_protocol *protocol;
+	struct pnp_card *card;
+	struct pnp_driver *driver;
+	struct pnp_card_link *card_link;
+	struct pnp_id *id;
+	int active;
+	int capabilities;
+	unsigned int num_dependent_sets;
+	struct list_head resources;
+	struct list_head options;
+	char name[50];
+	int flags;
+	struct proc_dir_entry *procent;
+	void *data;
+};
+
+enum insn_type {
+	CALL = 0,
+	NOP = 1,
+	JMP = 2,
+	RET = 3,
+};
+
+struct ldttss_desc {
+	u16 limit0;
+	u16 base0;
+	u16 base1: 8;
+	u16 type: 5;
+	u16 dpl: 2;
+	u16 p: 1;
+	u16 limit1: 4;
+	u16 zero0: 3;
+	u16 g: 1;
+	u16 base2: 8;
+	u32 base3;
+	u32 zero1;
+};
+
+typedef struct ldttss_desc tss_desc;
+
+enum idle_boot_override {
+	IDLE_NO_OVERRIDE = 0,
+	IDLE_HALT = 1,
+	IDLE_NOMWAIT = 2,
+	IDLE_POLL = 3,
+};
+
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
+};
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+struct inactive_task_frame {
+	long unsigned int r15;
+	long unsigned int r14;
+	long unsigned int r13;
+	long unsigned int r12;
+	long unsigned int bx;
+	long unsigned int bp;
+	long unsigned int ret_addr;
+};
+
+struct fork_frame {
+	struct inactive_task_frame frame;
+	struct pt_regs regs;
+};
+
+struct ssb_state {
+	struct ssb_state *shared_state;
+	raw_spinlock_t lock;
+	unsigned int disable_state;
+	long unsigned int local_state;
+};
+
+struct fpu_state_config {
+	unsigned int max_size;
+	unsigned int default_size;
+	u64 max_features;
+	u64 default_features;
+	u64 legacy_features;
+};
+
+struct pkru_state {
+	u32 pkru;
+	u32 pad;
+};
+
+struct fpu_guest {
+	u64 xfeatures;
+	u64 perm;
+	u64 xfd_err;
+	unsigned int uabi_size;
+	struct fpstate *fpstate;
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+enum xstate_copy_mode {
+	XSTATE_COPY_FP = 0,
+	XSTATE_COPY_FX = 1,
+	XSTATE_COPY_XSAVE = 2,
+};
+
+struct trace_event_raw_x86_fpu {
+	struct trace_entry ent;
+	struct fpu *fpu;
+	bool load_fpu;
+	u64 xfeatures;
+	u64 xcomp_bv;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_x86_fpu {};
+
+typedef void (*btf_trace_x86_fpu_before_save)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_after_save)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_before_restore)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_after_restore)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_regs_activated)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_regs_deactivated)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_init_state)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_dropped)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_copy_src)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_copy_dst)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_xstate_check_failed)(void *, struct fpu *);
+
+struct _fpreg {
+	__u16 significand[4];
+	__u16 exponent;
+};
+
+struct _fpxreg {
+	__u16 significand[4];
+	__u16 exponent;
+	__u16 padding[3];
+};
+
+struct user_i387_ia32_struct {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+};
+
+struct user_regset;
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct _fpx_sw_bytes {
+	__u32 magic1;
+	__u32 extended_size;
+	__u64 xfeatures;
+	__u32 xstate_size;
+	__u32 padding[7];
+};
+
+struct _xmmreg {
+	__u32 element[4];
+};
+
+struct _fpstate_32 {
+	__u32 cw;
+	__u32 sw;
+	__u32 tag;
+	__u32 ipoff;
+	__u32 cssel;
+	__u32 dataoff;
+	__u32 datasel;
+	struct _fpreg _st[8];
+	__u16 status;
+	__u16 magic;
+	__u32 _fxsr_env[6];
+	__u32 mxcsr;
+	__u32 reserved;
+	struct _fpxreg _fxsr_st[8];
+	struct _xmmreg _xmm[8];
+	union {
+		__u32 padding1[44];
+		__u32 padding[44];
+	};
+	union {
+		__u32 padding2[12];
+		struct _fpx_sw_bytes sw_reserved;
+	};
+};
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+enum x86_regset {
+	REGSET_GENERAL = 0,
+	REGSET_FP = 1,
+	REGSET_XFP = 2,
+	REGSET_IOPERM64 = 2,
+	REGSET_XSTATE = 3,
+	REGSET_TLS = 4,
+	REGSET_IOPERM32 = 5,
+};
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+enum {
+	TB_SHUTDOWN_REBOOT = 0,
+	TB_SHUTDOWN_S5 = 1,
+	TB_SHUTDOWN_S4 = 2,
+	TB_SHUTDOWN_S3 = 3,
+	TB_SHUTDOWN_HALT = 4,
+	TB_SHUTDOWN_WFS = 5,
+};
+
+struct tboot_mac_region {
+	u64 start;
+	u32 size;
+} __attribute__((packed));
+
+struct tboot_acpi_generic_address {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct tboot_acpi_sleep_info {
+	struct tboot_acpi_generic_address pm1a_cnt_blk;
+	struct tboot_acpi_generic_address pm1b_cnt_blk;
+	struct tboot_acpi_generic_address pm1a_evt_blk;
+	struct tboot_acpi_generic_address pm1b_evt_blk;
+	u16 pm1a_cnt_val;
+	u16 pm1b_cnt_val;
+	u64 wakeup_vector;
+	u32 vector_width;
+	u64 kernel_s3_resume_vector;
+} __attribute__((packed));
+
+struct tboot {
+	u8 uuid[16];
+	u32 version;
+	u32 log_addr;
+	u32 shutdown_entry;
+	u32 shutdown_type;
+	struct tboot_acpi_sleep_info acpi_sinfo;
+	u32 tboot_base;
+	u32 tboot_size;
+	u8 num_mac_regions;
+	struct tboot_mac_region mac_regions[32];
+	u8 s3_key[64];
+	u8 reserved_align[3];
+	u32 num_in_wfs;
+} __attribute__((packed));
+
+struct sha1_hash {
+	u8 hash[20];
+};
+
+struct sinit_mle_data {
+	u32 version;
+	struct sha1_hash bios_acm_id;
+	u32 edx_senter_flags;
+	u64 mseg_valid;
+	struct sha1_hash sinit_hash;
+	struct sha1_hash mle_hash;
+	struct sha1_hash stm_hash;
+	struct sha1_hash lcp_policy_hash;
+	u32 lcp_policy_control;
+	u32 rlp_wakeup_addr;
+	u32 reserved;
+	u32 num_mdrs;
+	u32 mdrs_off;
+	u32 num_vtd_dmars;
+	u32 vtd_dmars_off;
+} __attribute__((packed));
+
+typedef bool (*stack_trace_consume_fn)(void *, long unsigned int);
+
+struct stack_frame_user {
+	const void *next_fp;
+	long unsigned int ret_addr;
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+};
+
+struct amd_l3_cache {
+	unsigned int indices;
+	u8 subcaches[4];
+};
+
+struct threshold_block {
+	unsigned int block;
+	unsigned int bank;
+	unsigned int cpu;
+	u32 address;
+	u16 interrupt_enable;
+	bool interrupt_capable;
+	u16 threshold_limit;
+	struct kobject kobj;
+	struct list_head miscj;
+};
+
+struct threshold_bank {
+	struct kobject *kobj;
+	struct threshold_block *blocks;
+	refcount_t cpus;
+	unsigned int shared;
+};
+
+struct amd_northbridge {
+	struct pci_dev *root;
+	struct pci_dev *misc;
+	struct pci_dev *link;
+	struct amd_l3_cache l3_cache;
+	struct threshold_bank *bank4;
+};
+
+struct _cache_table {
+	unsigned char descriptor;
+	char cache_type;
+	short int size;
+};
+
+enum _cache_type {
+	CTYPE_NULL = 0,
+	CTYPE_DATA = 1,
+	CTYPE_INST = 2,
+	CTYPE_UNIFIED = 3,
+};
+
+union _cpuid4_leaf_eax {
+	struct {
+		enum _cache_type type: 5;
+		unsigned int level: 3;
+		unsigned int is_self_initializing: 1;
+		unsigned int is_fully_associative: 1;
+		unsigned int reserved: 4;
+		unsigned int num_threads_sharing: 12;
+		unsigned int num_cores_on_die: 6;
+	} split;
+	u32 full;
+};
+
+union _cpuid4_leaf_ebx {
+	struct {
+		unsigned int coherency_line_size: 12;
+		unsigned int physical_line_partition: 10;
+		unsigned int ways_of_associativity: 10;
+	} split;
+	u32 full;
+};
+
+union _cpuid4_leaf_ecx {
+	struct {
+		unsigned int number_of_sets: 32;
+	} split;
+	u32 full;
+};
+
+struct _cpuid4_info_regs {
+	union _cpuid4_leaf_eax eax;
+	union _cpuid4_leaf_ebx ebx;
+	union _cpuid4_leaf_ecx ecx;
+	unsigned int id;
+	long unsigned int size;
+	struct amd_northbridge *nb;
+};
+
+union l1_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 8;
+		unsigned int assoc: 8;
+		unsigned int size_in_kb: 8;
+	};
+	unsigned int val;
+};
+
+union l2_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 4;
+		unsigned int assoc: 4;
+		unsigned int size_in_kb: 16;
+	};
+	unsigned int val;
+};
+
+union l3_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 4;
+		unsigned int assoc: 4;
+		unsigned int res: 2;
+		unsigned int size_encoded: 14;
+	};
+	unsigned int val;
+};
+
+struct cpuid_bit {
+	u16 feature;
+	u8 reg;
+	u8 bit;
+	u32 level;
+	u32 sub_leaf;
+};
+
+enum cpuid_leafs {
+	CPUID_1_EDX = 0,
+	CPUID_8000_0001_EDX = 1,
+	CPUID_8086_0001_EDX = 2,
+	CPUID_LNX_1 = 3,
+	CPUID_1_ECX = 4,
+	CPUID_C000_0001_EDX = 5,
+	CPUID_8000_0001_ECX = 6,
+	CPUID_LNX_2 = 7,
+	CPUID_LNX_3 = 8,
+	CPUID_7_0_EBX = 9,
+	CPUID_D_1_EAX = 10,
+	CPUID_LNX_4 = 11,
+	CPUID_7_1_EAX = 12,
+	CPUID_8000_0008_EBX = 13,
+	CPUID_6_EAX = 14,
+	CPUID_8000_000A_EDX = 15,
+	CPUID_7_ECX = 16,
+	CPUID_8000_0007_EBX = 17,
+	CPUID_7_EDX = 18,
+	CPUID_8000_001F_EAX = 19,
+};
+
+enum kgdb_bptype {
+	BP_BREAKPOINT = 0,
+	BP_HARDWARE_BREAKPOINT = 1,
+	BP_WRITE_WATCHPOINT = 2,
+	BP_READ_WATCHPOINT = 3,
+	BP_ACCESS_WATCHPOINT = 4,
+	BP_POKE_BREAKPOINT = 5,
+};
+
+struct kgdb_arch {
+	unsigned char gdb_bpt_instr[1];
+	long unsigned int flags;
+	int (*set_breakpoint)(long unsigned int, char *);
+	int (*remove_breakpoint)(long unsigned int, char *);
+	int (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
+	int (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);
+	void (*disable_hw_break)(struct pt_regs *);
+	void (*remove_all_hw_break)();
+	void (*correct_hw_break)();
+	void (*enable_nmi)(bool);
+};
+
+struct cpu_dev {
+	const char *c_vendor;
+	const char *c_ident[2];
+	void (*c_early_init)(struct cpuinfo_x86 *);
+	void (*c_bsp_init)(struct cpuinfo_x86 *);
+	void (*c_init)(struct cpuinfo_x86 *);
+	void (*c_identify)(struct cpuinfo_x86 *);
+	void (*c_detect_tlb)(struct cpuinfo_x86 *);
+	int c_x86_vendor;
+};
+
+struct ppin_info {
+	int feature;
+	int msr_ppin_ctl;
+	int msr_ppin;
+};
+
+struct cpuid_dependent_feature {
+	u32 feature;
+	u32 level;
+};
+
+enum spectre_v2_mitigation {
+	SPECTRE_V2_NONE = 0,
+	SPECTRE_V2_RETPOLINE = 1,
+	SPECTRE_V2_LFENCE = 2,
+	SPECTRE_V2_EIBRS = 3,
+	SPECTRE_V2_EIBRS_RETPOLINE = 4,
+	SPECTRE_V2_EIBRS_LFENCE = 5,
+};
+
+enum spectre_v2_user_mitigation {
+	SPECTRE_V2_USER_NONE = 0,
+	SPECTRE_V2_USER_STRICT = 1,
+	SPECTRE_V2_USER_STRICT_PREFERRED = 2,
+	SPECTRE_V2_USER_PRCTL = 3,
+	SPECTRE_V2_USER_SECCOMP = 4,
+};
+
+enum ssb_mitigation {
+	SPEC_STORE_BYPASS_NONE = 0,
+	SPEC_STORE_BYPASS_DISABLE = 1,
+	SPEC_STORE_BYPASS_PRCTL = 2,
+	SPEC_STORE_BYPASS_SECCOMP = 3,
+};
+
+enum l1tf_mitigations {
+	L1TF_MITIGATION_OFF = 0,
+	L1TF_MITIGATION_FLUSH_NOWARN = 1,
+	L1TF_MITIGATION_FLUSH = 2,
+	L1TF_MITIGATION_FLUSH_NOSMT = 3,
+	L1TF_MITIGATION_FULL = 4,
+	L1TF_MITIGATION_FULL_FORCE = 5,
+};
+
+enum mds_mitigations {
+	MDS_MITIGATION_OFF = 0,
+	MDS_MITIGATION_FULL = 1,
+	MDS_MITIGATION_VMWERV = 2,
+};
+
+struct bpf_run_ctx {};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+enum btf_kfunc_type {
+	BTF_KFUNC_TYPE_CHECK = 0,
+	BTF_KFUNC_TYPE_ACQUIRE = 1,
+	BTF_KFUNC_TYPE_RELEASE = 2,
+	BTF_KFUNC_TYPE_RET_NULL = 3,
+	BTF_KFUNC_TYPE_KPTR_ACQUIRE = 4,
+	BTF_KFUNC_TYPE_MAX = 5,
+};
+
+enum {
+	BPF_MAP_VALUE_OFF_MAX = 8,
+	BPF_MAP_OFF_ARR_MAX = 10,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_ALLOC = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	__BPF_TYPE_FLAG_MAX = 262145,
+	__BPF_TYPE_LAST_FLAG = 262144,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_ALLOC_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 271,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 524287,
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_ALLOC_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_ALLOC_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	__BPF_RET_TYPE_LIMIT = 524287,
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	__BPF_REG_TYPE_MAX = 20,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 524287,
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+enum vmx_l1d_flush_state {
+	VMENTER_L1D_FLUSH_AUTO = 0,
+	VMENTER_L1D_FLUSH_NEVER = 1,
+	VMENTER_L1D_FLUSH_COND = 2,
+	VMENTER_L1D_FLUSH_ALWAYS = 3,
+	VMENTER_L1D_FLUSH_EPT_DISABLED = 4,
+	VMENTER_L1D_FLUSH_NOT_REQUIRED = 5,
+};
+
+enum taa_mitigations {
+	TAA_MITIGATION_OFF = 0,
+	TAA_MITIGATION_UCODE_NEEDED = 1,
+	TAA_MITIGATION_VERW = 2,
+	TAA_MITIGATION_TSX_DISABLED = 3,
+};
+
+enum mmio_mitigations {
+	MMIO_MITIGATION_OFF = 0,
+	MMIO_MITIGATION_UCODE_NEEDED = 1,
+	MMIO_MITIGATION_VERW = 2,
+};
+
+enum srbds_mitigations {
+	SRBDS_MITIGATION_OFF = 0,
+	SRBDS_MITIGATION_UCODE_NEEDED = 1,
+	SRBDS_MITIGATION_FULL = 2,
+	SRBDS_MITIGATION_TSX_OFF = 3,
+	SRBDS_MITIGATION_HYPERVISOR = 4,
+};
+
+enum l1d_flush_mitigations {
+	L1D_FLUSH_OFF = 0,
+	L1D_FLUSH_ON = 1,
+};
+
+enum spectre_v1_mitigation {
+	SPECTRE_V1_MITIGATION_NONE = 0,
+	SPECTRE_V1_MITIGATION_AUTO = 1,
+};
+
+enum spectre_v2_mitigation_cmd {
+	SPECTRE_V2_CMD_NONE = 0,
+	SPECTRE_V2_CMD_AUTO = 1,
+	SPECTRE_V2_CMD_FORCE = 2,
+	SPECTRE_V2_CMD_RETPOLINE = 3,
+	SPECTRE_V2_CMD_RETPOLINE_GENERIC = 4,
+	SPECTRE_V2_CMD_RETPOLINE_LFENCE = 5,
+	SPECTRE_V2_CMD_EIBRS = 6,
+	SPECTRE_V2_CMD_EIBRS_RETPOLINE = 7,
+	SPECTRE_V2_CMD_EIBRS_LFENCE = 8,
+};
+
+enum spectre_v2_user_cmd {
+	SPECTRE_V2_USER_CMD_NONE = 0,
+	SPECTRE_V2_USER_CMD_AUTO = 1,
+	SPECTRE_V2_USER_CMD_FORCE = 2,
+	SPECTRE_V2_USER_CMD_PRCTL = 3,
+	SPECTRE_V2_USER_CMD_PRCTL_IBPB = 4,
+	SPECTRE_V2_USER_CMD_SECCOMP = 5,
+	SPECTRE_V2_USER_CMD_SECCOMP_IBPB = 6,
+};
+
+enum ssb_mitigation_cmd {
+	SPEC_STORE_BYPASS_CMD_NONE = 0,
+	SPEC_STORE_BYPASS_CMD_AUTO = 1,
+	SPEC_STORE_BYPASS_CMD_ON = 2,
+	SPEC_STORE_BYPASS_CMD_PRCTL = 3,
+	SPEC_STORE_BYPASS_CMD_SECCOMP = 4,
+};
+
+struct aperfmperf {
+	seqcount_t seq;
+	long unsigned int last_update;
+	u64 acnt;
+	u64 mcnt;
+	u64 aperf;
+	u64 mperf;
+};
+
+struct cpuid_dep {
+	unsigned int feature;
+	unsigned int depends;
+};
+
+enum vmx_feature_leafs {
+	MISC_FEATURES = 0,
+	PRIMARY_CTLS = 1,
+	SECONDARY_CTLS = 2,
+	NR_VMX_FEATURE_WORDS = 3,
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+struct cpu_signature {
+	unsigned int sig;
+	unsigned int pf;
+	unsigned int rev;
+};
+
+struct ucode_cpu_info {
+	struct cpu_signature cpu_sig;
+	int valid;
+	void *mc;
+};
+
+struct _tlb_table {
+	unsigned char descriptor;
+	char tlb_type;
+	unsigned int entries;
+	char info[128];
+};
+
+enum split_lock_detect_state {
+	sld_off = 0,
+	sld_warn = 1,
+	sld_fatal = 2,
+	sld_ratelimit = 3,
+};
+
+struct sku_microcode {
+	u8 model;
+	u8 stepping;
+	u32 microcode;
+};
+
+struct cpuid_regs {
+	u32 eax;
+	u32 ebx;
+	u32 ecx;
+	u32 edx;
+};
+
+enum pconfig_target {
+	INVALID_TARGET = 0,
+	MKTME_TARGET = 1,
+	PCONFIG_TARGET_NR = 2,
+};
+
+enum {
+	PCONFIG_CPUID_SUBLEAF_INVALID = 0,
+	PCONFIG_CPUID_SUBLEAF_TARGETID = 1,
+};
+
+enum tsx_ctrl_states {
+	TSX_CTRL_ENABLE = 0,
+	TSX_CTRL_DISABLE = 1,
+	TSX_CTRL_RTM_ALWAYS_ABORT = 2,
+	TSX_CTRL_NOT_SUPPORTED = 3,
+};
+
+enum energy_perf_value_index {
+	EPB_INDEX_PERFORMANCE = 0,
+	EPB_INDEX_BALANCE_PERFORMANCE = 1,
+	EPB_INDEX_NORMAL = 2,
+	EPB_INDEX_BALANCE_POWERSAVE = 3,
+	EPB_INDEX_POWERSAVE = 4,
+};
+
+enum mf_flags {
+	MF_COUNT_INCREASED = 1,
+	MF_ACTION_REQUIRED = 2,
+	MF_MUST_KILL = 4,
+	MF_SOFT_OFFLINE = 8,
+	MF_UNPOISON = 16,
+};
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct mce {
+	__u64 status;
+	__u64 misc;
+	__u64 addr;
+	__u64 mcgstatus;
+	__u64 ip;
+	__u64 tsc;
+	__u64 time;
+	__u8 cpuvendor;
+	__u8 inject_flags;
+	__u8 severity;
+	__u8 pad;
+	__u32 cpuid;
+	__u8 cs;
+	__u8 bank;
+	__u8 cpu;
+	__u8 finished;
+	__u32 extcpu;
+	__u32 socketid;
+	__u32 apicid;
+	__u64 mcgcap;
+	__u64 synd;
+	__u64 ipid;
+	__u64 ppin;
+	__u32 microcode;
+	__u64 kflags;
+};
+
+enum mce_notifier_prios {
+	MCE_PRIO_LOWEST = 0,
+	MCE_PRIO_MCELOG = 1,
+	MCE_PRIO_EDAC = 2,
+	MCE_PRIO_NFIT = 3,
+	MCE_PRIO_EXTLOG = 4,
+	MCE_PRIO_UC = 5,
+	MCE_PRIO_EARLY = 6,
+	MCE_PRIO_CEC = 7,
+	MCE_PRIO_HIGHEST = 7,
+};
+
+typedef long unsigned int mce_banks_t[1];
+
+enum mcp_flags {
+	MCP_TIMESTAMP = 1,
+	MCP_UC = 2,
+	MCP_DONTLOG = 4,
+	MCP_QUEUE_LOG = 8,
+};
+
+enum severity_level {
+	MCE_NO_SEVERITY = 0,
+	MCE_DEFERRED_SEVERITY = 1,
+	MCE_UCNA_SEVERITY = 1,
+	MCE_KEEP_SEVERITY = 2,
+	MCE_SOME_SEVERITY = 3,
+	MCE_AO_SEVERITY = 4,
+	MCE_UC_SEVERITY = 5,
+	MCE_AR_SEVERITY = 6,
+	MCE_PANIC_SEVERITY = 7,
+};
+
+struct mce_evt_llist {
+	struct llist_node llnode;
+	struct mce mce;
+};
+
+struct mca_config {
+	__u64 lmce_disabled: 1;
+	__u64 disabled: 1;
+	__u64 ser: 1;
+	__u64 recovery: 1;
+	__u64 bios_cmci_threshold: 1;
+	__u64 initialized: 1;
+	__u64 __reserved: 58;
+	bool dont_log_ce;
+	bool cmci_disabled;
+	bool ignore_ce;
+	bool print_all;
+	int monarch_timeout;
+	int panic_timeout;
+	u32 rip_msr;
+	s8 bootlog;
+};
+
+struct mce_vendor_flags {
+	__u64 overflow_recov: 1;
+	__u64 succor: 1;
+	__u64 smca: 1;
+	__u64 amd_threshold: 1;
+	__u64 p5: 1;
+	__u64 winchip: 1;
+	__u64 snb_ifu_quirk: 1;
+	__u64 skx_repmov_quirk: 1;
+	__u64 __reserved_0: 56;
+};
+
+enum mca_msr {
+	MCA_CTL = 0,
+	MCA_STATUS = 1,
+	MCA_ADDR = 2,
+	MCA_MISC = 3,
+};
+
+struct trace_event_raw_mce_record {
+	struct trace_entry ent;
+	u64 mcgcap;
+	u64 mcgstatus;
+	u64 status;
+	u64 addr;
+	u64 misc;
+	u64 synd;
+	u64 ipid;
+	u64 ip;
+	u64 tsc;
+	u64 walltime;
+	u32 cpu;
+	u32 cpuid;
+	u32 apicid;
+	u32 socketid;
+	u8 cs;
+	u8 bank;
+	u8 cpuvendor;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mce_record {};
+
+typedef void (*btf_trace_mce_record)(void *, struct mce *);
+
+struct mce_bank {
+	u64 ctl;
+	__u64 init: 1;
+	__u64 __reserved_1: 63;
+};
+
+struct mce_bank_dev {
+	struct device_attribute attr;
+	char attrname[16];
+	u8 bank;
+};
+
+enum context {
+	IN_KERNEL = 1,
+	IN_USER = 2,
+	IN_KERNEL_RECOV = 3,
+};
+
+enum ser {
+	SER_REQUIRED = 1,
+	NO_SER = 2,
+};
+
+enum exception {
+	EXCP_CONTEXT = 1,
+	NO_EXCP = 2,
+};
+
+struct severity {
+	u64 mask;
+	u64 result;
+	unsigned char sev;
+	unsigned char mcgmask;
+	unsigned char mcgres;
+	unsigned char ser;
+	unsigned char context;
+	unsigned char excp;
+	unsigned char covered;
+	unsigned char cpu_model;
+	unsigned char cpu_minstepping;
+	unsigned char bank_lo;
+	unsigned char bank_hi;
+	char *msg;
+};
+
+struct gen_pool;
+
+typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+enum {
+	CMCI_STORM_NONE = 0,
+	CMCI_STORM_ACTIVE = 1,
+	CMCI_STORM_SUBSIDED = 2,
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+enum smca_bank_types {
+	SMCA_LS = 0,
+	SMCA_LS_V2 = 1,
+	SMCA_IF = 2,
+	SMCA_L2_CACHE = 3,
+	SMCA_DE = 4,
+	SMCA_RESERVED = 5,
+	SMCA_EX = 6,
+	SMCA_FP = 7,
+	SMCA_L3_CACHE = 8,
+	SMCA_CS = 9,
+	SMCA_CS_V2 = 10,
+	SMCA_PIE = 11,
+	SMCA_UMC = 12,
+	SMCA_UMC_V2 = 13,
+	SMCA_PB = 14,
+	SMCA_PSP = 15,
+	SMCA_PSP_V2 = 16,
+	SMCA_SMU = 17,
+	SMCA_SMU_V2 = 18,
+	SMCA_MP5 = 19,
+	SMCA_MPDMA = 20,
+	SMCA_NBIO = 21,
+	SMCA_PCIE = 22,
+	SMCA_PCIE_V2 = 23,
+	SMCA_XGMI_PCS = 24,
+	SMCA_NBIF = 25,
+	SMCA_SHUB = 26,
+	SMCA_SATA = 27,
+	SMCA_USB = 28,
+	SMCA_GMI_PCS = 29,
+	SMCA_XGMI_PHY = 30,
+	SMCA_WAFL_PHY = 31,
+	SMCA_GMI_PHY = 32,
+	N_SMCA_BANK_TYPES = 33,
+};
+
+struct smca_hwid {
+	unsigned int bank_type;
+	u32 hwid_mcatype;
+};
+
+struct smca_bank {
+	const struct smca_hwid *hwid;
+	u32 id;
+	u8 sysfs_id;
+};
+
+struct smca_bank_name {
+	const char *name;
+	const char *long_name;
+};
+
+struct thresh_restart {
+	struct threshold_block *b;
+	int reset;
+	int set_lvt_off;
+	int lvt_off;
+	u16 old_limit;
+};
+
+struct threshold_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct threshold_block *, char *);
+	ssize_t (*store)(struct threshold_block *, const char *, size_t);
+};
+
+enum {
+	CPER_SEV_RECOVERABLE = 0,
+	CPER_SEV_FATAL = 1,
+	CPER_SEV_CORRECTED = 2,
+	CPER_SEV_INFORMATIONAL = 3,
+};
+
+struct cper_record_header {
+	char signature[4];
+	u16 revision;
+	u32 signature_end;
+	u16 section_count;
+	u32 error_severity;
+	u32 validation_bits;
+	u32 record_length;
+	u64 timestamp;
+	guid_t platform_id;
+	guid_t partition_id;
+	guid_t creator_id;
+	guid_t notification_type;
+	u64 record_id;
+	u32 flags;
+	u64 persistence_information;
+	u8 reserved[12];
+} __attribute__((packed));
+
+struct cper_section_descriptor {
+	u32 section_offset;
+	u32 section_length;
+	u16 revision;
+	u8 validation_bits;
+	u8 reserved;
+	u32 flags;
+	guid_t section_type;
+	guid_t fru_id;
+	u32 section_severity;
+	u8 fru_text[20];
+};
+
+struct cper_ia_proc_ctx {
+	u16 reg_ctx_type;
+	u16 reg_arr_size;
+	u32 msr_addr;
+	u64 mm_reg_addr;
+};
+
+struct cper_sec_mem_err {
+	u64 validation_bits;
+	u64 error_status;
+	u64 physical_addr;
+	u64 physical_addr_mask;
+	u16 node;
+	u16 card;
+	u16 module;
+	u16 bank;
+	u16 device;
+	u16 row;
+	u16 column;
+	u16 bit_pos;
+	u64 requestor_id;
+	u64 responder_id;
+	u64 target_id;
+	u8 error_type;
+	u8 extended;
+	u16 rank;
+	u16 mem_array_handle;
+	u16 mem_dev_handle;
+};
+
+enum {
+	GHES_SEV_NO = 0,
+	GHES_SEV_CORRECTED = 1,
+	GHES_SEV_RECOVERABLE = 2,
+	GHES_SEV_PANIC = 3,
+};
+
+struct cper_mce_record {
+	struct cper_record_header hdr;
+	struct cper_section_descriptor sec_hdr;
+	struct mce mce;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+typedef struct poll_table_struct poll_table;
+
+struct mce_log_buffer {
+	char signature[12];
+	unsigned int len;
+	unsigned int next;
+	unsigned int flags;
+	unsigned int recordlen;
+	struct mce entry[0];
+};
+
+typedef __u8 mtrr_type;
+
+struct mtrr_ops {
+	u32 vendor;
+	u32 use_intel_if;
+	void (*set)(unsigned int, long unsigned int, long unsigned int, mtrr_type);
+	void (*set_all)();
+	void (*get)(unsigned int, long unsigned int *, long unsigned int *, mtrr_type *);
+	int (*get_free_region)(long unsigned int, long unsigned int, int);
+	int (*validate_add_page)(long unsigned int, long unsigned int, unsigned int);
+	int (*have_wrcomb)();
+};
+
+struct set_mtrr_data {
+	long unsigned int smp_base;
+	long unsigned int smp_size;
+	unsigned int smp_reg;
+	mtrr_type smp_type;
+};
+
+struct mtrr_value {
+	mtrr_type ltype;
+	long unsigned int lbase;
+	long unsigned int lsize;
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
+	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct mtrr_sentry {
+	__u64 base;
+	__u32 size;
+	__u32 type;
+};
+
+struct mtrr_gentry {
+	__u64 base;
+	__u32 size;
+	__u32 regnum;
+	__u32 type;
+	__u32 _pad;
+};
+
+typedef u32 compat_uint_t;
+
+struct mtrr_sentry32 {
+	compat_ulong_t base;
+	compat_uint_t size;
+	compat_uint_t type;
+};
+
+struct mtrr_gentry32 {
+	compat_ulong_t regnum;
+	compat_uint_t base;
+	compat_uint_t size;
+	compat_uint_t type;
+};
+
+struct mtrr_var_range {
+	__u32 base_lo;
+	__u32 base_hi;
+	__u32 mask_lo;
+	__u32 mask_hi;
+};
+
+struct mtrr_state_type {
+	struct mtrr_var_range var_ranges[256];
+	mtrr_type fixed_ranges[88];
+	unsigned char enabled;
+	unsigned char have_fixed;
+	mtrr_type def_type;
+};
+
+struct fixed_range_block {
+	int base_msr;
+	int ranges;
+};
+
+struct var_mtrr_range_state {
+	long unsigned int base_pfn;
+	long unsigned int size_pfn;
+	mtrr_type type;
+};
+
+struct var_mtrr_state {
+	long unsigned int range_startk;
+	long unsigned int range_sizek;
+	long unsigned int chunk_sizek;
+	long unsigned int gran_sizek;
+	unsigned int reg;
+};
+
+struct mtrr_cleanup_result {
+	long unsigned int gran_sizek;
+	long unsigned int chunk_sizek;
+	long unsigned int lose_cover_sizek;
+	unsigned int num_reg;
+	int bad;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct property_entry;
+
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
+};
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
+};
+
+enum ucode_state {
+	UCODE_OK = 0,
+	UCODE_NEW = 1,
+	UCODE_UPDATED = 2,
+	UCODE_NFOUND = 3,
+	UCODE_ERROR = 4,
+};
+
+struct microcode_ops {
+	enum ucode_state (*request_microcode_user)(int, const void *, size_t);
+	enum ucode_state (*request_microcode_fw)(int, struct device *, bool);
+	void (*microcode_fini_cpu)(int);
+	enum ucode_state (*apply_microcode)(int);
+	int (*collect_cpu_info)(int, struct cpu_signature *);
+};
+
+struct cpu_info_ctx {
+	struct cpu_signature *cpu_sig;
+	int err;
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct ucode_patch {
+	struct list_head plist;
+	void *data;
+	u32 patch_id;
+	u16 equiv_cpu;
+};
+
+struct microcode_header_intel {
+	unsigned int hdrver;
+	unsigned int rev;
+	unsigned int date;
+	unsigned int sig;
+	unsigned int cksum;
+	unsigned int ldrver;
+	unsigned int pf;
+	unsigned int datasize;
+	unsigned int totalsize;
+	unsigned int reserved[3];
+};
+
+struct microcode_intel {
+	struct microcode_header_intel hdr;
+	unsigned int bits[0];
+};
+
+struct extended_signature {
+	unsigned int sig;
+	unsigned int pf;
+	unsigned int cksum;
+};
+
+struct extended_sigtable {
+	unsigned int count;
+	unsigned int cksum;
+	unsigned int reserved[3];
+	struct extended_signature sigs[0];
+};
+
+struct equiv_cpu_entry {
+	u32 installed_cpu;
+	u32 fixed_errata_mask;
+	u32 fixed_errata_compare;
+	u16 equiv_cpu;
+	u16 res;
+};
+
+struct microcode_header_amd {
+	u32 data_code;
+	u32 patch_id;
+	u16 mc_patch_data_id;
+	u8 mc_patch_data_len;
+	u8 init_flag;
+	u32 mc_patch_data_checksum;
+	u32 nb_dev_id;
+	u32 sb_dev_id;
+	u16 processor_rev_id;
+	u8 nb_rev_id;
+	u8 sb_rev_id;
+	u8 bios_api_rev;
+	u8 reserved1[3];
+	u32 match_reg[8];
+};
+
+struct microcode_amd {
+	struct microcode_header_amd hdr;
+	unsigned int mpb[0];
+};
+
+struct equiv_cpu_table {
+	unsigned int num_entries;
+	struct equiv_cpu_entry *entry;
+};
+
+struct cont_desc {
+	struct microcode_amd *mc;
+	u32 cpuid_1_eax;
+	u32 psize;
+	u8 *data;
+	size_t size;
+};
+
+enum resctrl_conf_type {
+	CDP_NONE = 0,
+	CDP_CODE = 1,
+	CDP_DATA = 2,
+};
+
+struct resctrl_staged_config {
+	u32 new_ctrl;
+	bool have_new_ctrl;
+};
+
+struct mbm_state;
+
+struct pseudo_lock_region;
+
+struct rdt_domain {
+	struct list_head list;
+	int id;
+	struct cpumask cpu_mask;
+	long unsigned int *rmid_busy_llc;
+	struct mbm_state *mbm_total;
+	struct mbm_state *mbm_local;
+	struct delayed_work mbm_over;
+	struct delayed_work cqm_limbo;
+	int mbm_work_cpu;
+	int cqm_work_cpu;
+	struct pseudo_lock_region *plr;
+	struct resctrl_staged_config staged_config[3];
+};
+
+struct mbm_state {
+	u64 chunks;
+	u64 prev_msr;
+	u64 prev_bw_msr;
+	u32 prev_bw;
+	u32 delta_bw;
+	bool delta_comp;
+};
+
+struct resctrl_schema;
+
+struct pseudo_lock_region {
+	struct resctrl_schema *s;
+	struct rdt_domain *d;
+	u32 cbm;
+	wait_queue_head_t lock_thread_wq;
+	int thread_done;
+	int cpu;
+	unsigned int line_size;
+	unsigned int size;
+	void *kmem;
+	unsigned int minor;
+	struct dentry *debugfs_dir;
+	struct list_head pm_reqs;
+};
+
+struct resctrl_cache {
+	unsigned int cbm_len;
+	unsigned int min_cbm_bits;
+	unsigned int shareable_bits;
+	bool arch_has_sparse_bitmaps;
+	bool arch_has_empty_bitmaps;
+	bool arch_has_per_cpu_cfg;
+};
+
+enum membw_throttle_mode {
+	THREAD_THROTTLE_UNDEFINED = 0,
+	THREAD_THROTTLE_MAX = 1,
+	THREAD_THROTTLE_PER_THREAD = 2,
+};
+
+struct resctrl_membw {
+	u32 min_bw;
+	u32 bw_gran;
+	u32 delay_linear;
+	bool arch_needs_linear;
+	enum membw_throttle_mode throttle_mode;
+	bool mba_sc;
+	u32 *mb_map;
+};
+
+struct rdt_parse_data;
+
+struct rdt_resource {
+	int rid;
+	bool alloc_enabled;
+	bool mon_enabled;
+	bool alloc_capable;
+	bool mon_capable;
+	int num_rmid;
+	int cache_level;
+	struct resctrl_cache cache;
+	struct resctrl_membw membw;
+	struct list_head domains;
+	char *name;
+	int data_width;
+	u32 default_ctrl;
+	const char *format_str;
+	int (*parse_ctrlval)(struct rdt_parse_data *, struct resctrl_schema *, struct rdt_domain *);
+	struct list_head evt_list;
+	long unsigned int fflags;
+	bool cdp_capable;
+};
+
+struct rdtgroup;
+
+struct rdt_parse_data {
+	struct rdtgroup *rdtgrp;
+	char *buf;
+};
+
+struct resctrl_schema {
+	struct list_head list;
+	char name[8];
+	enum resctrl_conf_type conf_type;
+	struct rdt_resource *res;
+	u32 num_closid;
+};
+
+enum rdt_group_type {
+	RDTCTRL_GROUP = 0,
+	RDTMON_GROUP = 1,
+	RDT_NUM_GROUP = 2,
+};
+
+struct mongroup {
+	struct kernfs_node *mon_data_kn;
+	struct rdtgroup *parent;
+	struct list_head crdtgrp_list;
+	u32 rmid;
+};
+
+enum rdtgrp_mode {
+	RDT_MODE_SHAREABLE = 0,
+	RDT_MODE_EXCLUSIVE = 1,
+	RDT_MODE_PSEUDO_LOCKSETUP = 2,
+	RDT_MODE_PSEUDO_LOCKED = 3,
+	RDT_NUM_MODES = 4,
+};
+
+struct rdtgroup {
+	struct kernfs_node *kn;
+	struct list_head rdtgroup_list;
+	u32 closid;
+	struct cpumask cpu_mask;
+	int flags;
+	atomic_t waitcount;
+	enum rdt_group_type type;
+	struct mongroup mon;
+	enum rdtgrp_mode mode;
+	struct pseudo_lock_region *plr;
+};
+
+struct rdt_hw_domain {
+	struct rdt_domain d_resctrl;
+	u32 *ctrl_val;
+	u32 *mbps_val;
+};
+
+struct msr_param {
+	struct rdt_resource *res;
+	u32 low;
+	u32 high;
+};
+
+struct rdt_hw_resource {
+	struct rdt_resource r_resctrl;
+	u32 num_closid;
+	unsigned int msr_base;
+	void (*msr_update)(struct rdt_domain *, struct msr_param *, struct rdt_resource *);
+	unsigned int mon_scale;
+	unsigned int mbm_width;
+	bool cdp_enabled;
+};
+
+enum resctrl_res_level {
+	RDT_RESOURCE_L3 = 0,
+	RDT_RESOURCE_L2 = 1,
+	RDT_RESOURCE_MBA = 2,
+	RDT_NUM_RESOURCES = 3,
+};
+
+union cpuid_0x10_1_eax {
+	struct {
+		unsigned int cbm_len: 5;
+	} split;
+	unsigned int full;
+};
+
+union cpuid_0x10_3_eax {
+	struct {
+		unsigned int max_delay: 12;
+	} split;
+	unsigned int full;
+};
+
+union cpuid_0x10_x_edx {
+	struct {
+		unsigned int cos_max: 16;
+	} split;
+	unsigned int full;
+};
+
+enum {
+	RDT_FLAG_CMT = 0,
+	RDT_FLAG_MBM_TOTAL = 1,
+	RDT_FLAG_MBM_LOCAL = 2,
+	RDT_FLAG_L3_CAT = 3,
+	RDT_FLAG_L3_CDP = 4,
+	RDT_FLAG_L2_CAT = 5,
+	RDT_FLAG_L2_CDP = 6,
+	RDT_FLAG_MBA = 7,
+};
+
+struct rdt_options {
+	char *name;
+	int flag;
+	bool force_off;
+	bool force_on;
+};
+
+typedef unsigned int uint;
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+};
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	long unsigned int magic;
+	bool new_sb_created;
+};
+
+struct rdt_fs_context {
+	struct kernfs_fs_context kfc;
+	bool enable_cdpl2;
+	bool enable_cdpl3;
+	bool enable_mba_mbps;
+};
+
+struct mon_evt {
+	u32 evtid;
+	char *name;
+	struct list_head list;
+};
+
+union mon_data_bits {
+	void *priv;
+	struct {
+		unsigned int rid: 10;
+		unsigned int evtid: 8;
+		unsigned int domid: 14;
+	} u;
+};
+
+struct rmid_read {
+	struct rdtgroup *rgrp;
+	struct rdt_resource *r;
+	struct rdt_domain *d;
+	int evtid;
+	bool first;
+	u64 val;
+};
+
+struct rftype {
+	char *name;
+	umode_t mode;
+	const struct kernfs_ops *kf_ops;
+	long unsigned int flags;
+	long unsigned int fflags;
+	int (*seq_show)(struct kernfs_open_file *, struct seq_file *, void *);
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+};
+
+enum rdt_param {
+	Opt_cdp = 0,
+	Opt_cdpl2 = 1,
+	Opt_mba_mbps = 2,
+	nr__rdt_params = 3,
+};
+
+struct rmid_entry {
+	u32 rmid;
+	int busy;
+	struct list_head list;
+};
+
+struct mbm_correction_factor_table {
+	u32 rmidthreshold;
+	u64 cf;
+};
+
+struct trace_event_raw_pseudo_lock_mem_latency {
+	struct trace_entry ent;
+	u32 latency;
+	char __data[0];
+};
+
+struct trace_event_raw_pseudo_lock_l2 {
+	struct trace_entry ent;
+	u64 l2_hits;
+	u64 l2_miss;
+	char __data[0];
+};
+
+struct trace_event_raw_pseudo_lock_l3 {
+	struct trace_entry ent;
+	u64 l3_hits;
+	u64 l3_miss;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_pseudo_lock_mem_latency {};
+
+struct trace_event_data_offsets_pseudo_lock_l2 {};
+
+struct trace_event_data_offsets_pseudo_lock_l3 {};
+
+typedef void (*btf_trace_pseudo_lock_mem_latency)(void *, u32);
+
+typedef void (*btf_trace_pseudo_lock_l2)(void *, u64, u64);
+
+typedef void (*btf_trace_pseudo_lock_l3)(void *, u64, u64);
+
+struct pseudo_lock_pm_req {
+	struct list_head list;
+	struct dev_pm_qos_request req;
+};
+
+struct residency_counts {
+	u64 miss_before;
+	u64 hits_before;
+	u64 miss_after;
+	u64 hits_after;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier;
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+};
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+};
+
+struct mmu_notifier_range {
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+enum sgx_page_type {
+	SGX_PAGE_TYPE_SECS = 0,
+	SGX_PAGE_TYPE_TCS = 1,
+	SGX_PAGE_TYPE_REG = 2,
+	SGX_PAGE_TYPE_VA = 3,
+	SGX_PAGE_TYPE_TRIM = 4,
+};
+
+struct sgx_encl_page;
+
+struct sgx_epc_page {
+	unsigned int section;
+	u16 flags;
+	u16 poison;
+	struct sgx_encl_page *owner;
+	struct list_head list;
+};
+
+struct sgx_encl;
+
+struct sgx_va_page;
+
+struct sgx_encl_page {
+	long unsigned int desc;
+	long unsigned int vm_max_prot_bits;
+	struct sgx_epc_page *epc_page;
+	struct sgx_encl *encl;
+	struct sgx_va_page *va_page;
+};
+
+struct sgx_encl {
+	long unsigned int base;
+	long unsigned int size;
+	long unsigned int flags;
+	unsigned int page_cnt;
+	unsigned int secs_child_cnt;
+	struct mutex lock;
+	struct xarray page_array;
+	struct sgx_encl_page secs;
+	long unsigned int attributes;
+	long unsigned int attributes_mask;
+	cpumask_t cpumask;
+	struct file *backing;
+	struct kref refcount;
+	struct list_head va_pages;
+	long unsigned int mm_list_version;
+	struct list_head mm_list;
+	spinlock_t mm_lock;
+	struct srcu_struct srcu;
+};
+
+struct sgx_va_page {
+	struct sgx_epc_page *epc_page;
+	long unsigned int slots[8];
+	struct list_head list;
+};
+
+struct sgx_encl_mm {
+	struct sgx_encl *encl;
+	struct mm_struct *mm;
+	struct list_head list;
+	struct mmu_notifier mmu_notifier;
+};
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+typedef unsigned int xa_mark_t;
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void *slots[64];
+	union {
+		long unsigned int tags[3];
+		long unsigned int marks[3];
+	};
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	long unsigned int xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum sgx_encls_function {
+	ECREATE = 0,
+	EADD = 1,
+	EINIT = 2,
+	EREMOVE = 3,
+	EDGBRD = 4,
+	EDGBWR = 5,
+	EEXTEND = 6,
+	ELDU = 8,
+	EBLOCK = 9,
+	EPA = 10,
+	EWB = 11,
+	ETRACK = 12,
+	EAUG = 13,
+	EMODPR = 14,
+	EMODT = 15,
+};
+
+struct sgx_pageinfo {
+	u64 addr;
+	u64 contents;
+	u64 metadata;
+	u64 secs;
+};
+
+struct sgx_numa_node {
+	struct list_head free_page_list;
+	struct list_head sgx_poison_page_list;
+	long unsigned int size;
+	spinlock_t lock;
+};
+
+struct sgx_epc_section {
+	long unsigned int phys_addr;
+	void *virt_addr;
+	struct sgx_epc_page *pages;
+	struct sgx_numa_node *node;
+};
+
+enum sgx_encl_flags {
+	SGX_ENCL_IOCTL = 1,
+	SGX_ENCL_DEBUG = 2,
+	SGX_ENCL_CREATED = 4,
+	SGX_ENCL_INITIALIZED = 8,
+};
+
+struct sgx_backing {
+	long unsigned int page_index;
+	struct page *contents;
+	struct page *pcmd;
+	long unsigned int pcmd_offset;
+};
+
+enum sgx_return_code {
+	SGX_NOT_TRACKED = 11,
+	SGX_CHILD_PRESENT = 13,
+	SGX_INVALID_EINITTOKEN = 16,
+	SGX_UNMASKED_EVENT = 128,
+};
+
+enum sgx_attribute {
+	SGX_ATTR_INIT = 1,
+	SGX_ATTR_DEBUG = 2,
+	SGX_ATTR_MODE64BIT = 4,
+	SGX_ATTR_PROVISIONKEY = 16,
+	SGX_ATTR_EINITTOKENKEY = 32,
+	SGX_ATTR_KSS = 128,
+};
+
+struct sgx_secs {
+	u64 size;
+	u64 base;
+	u32 ssa_frame_size;
+	u32 miscselect;
+	u8 reserved1[24];
+	u64 attributes;
+	u64 xfrm;
+	u32 mrenclave[8];
+	u8 reserved2[32];
+	u32 mrsigner[8];
+	u8 reserved3[32];
+	u32 config_id[16];
+	u16 isv_prod_id;
+	u16 isv_svn;
+	u16 config_svn;
+	u8 reserved4[3834];
+};
+
+enum sgx_secinfo_flags {
+	SGX_SECINFO_R = 1,
+	SGX_SECINFO_W = 2,
+	SGX_SECINFO_X = 4,
+	SGX_SECINFO_SECS = 0,
+	SGX_SECINFO_TCS = 256,
+	SGX_SECINFO_REG = 512,
+	SGX_SECINFO_VA = 768,
+	SGX_SECINFO_TRIM = 1024,
+};
+
+struct sgx_secinfo {
+	u64 flags;
+	u8 reserved[56];
+};
+
+struct sgx_sigstruct_header {
+	u64 header1[2];
+	u32 vendor;
+	u32 date;
+	u64 header2[2];
+	u32 swdefined;
+	u8 reserved1[84];
+};
+
+struct sgx_sigstruct_body {
+	u32 miscselect;
+	u32 misc_mask;
+	u8 reserved2[20];
+	u64 attributes;
+	u64 xfrm;
+	u64 attributes_mask;
+	u64 xfrm_mask;
+	u8 mrenclave[32];
+	u8 reserved3[32];
+	u16 isvprodid;
+	u16 isvsvn;
+} __attribute__((packed));
+
+struct sgx_sigstruct {
+	struct sgx_sigstruct_header header;
+	u8 modulus[384];
+	u32 exponent;
+	u8 signature[384];
+	struct sgx_sigstruct_body body;
+	u8 reserved4[12];
+	u8 q1[384];
+	u8 q2[384];
+} __attribute__((packed));
+
+struct crypto_alg;
+
+struct crypto_tfm {
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	void *__crt_ctx[0];
+};
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_istat_aead {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_akcipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t verify_cnt;
+	atomic64_t sign_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_cipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_compress {
+	atomic64_t compress_cnt;
+	atomic64_t compress_tlen;
+	atomic64_t decompress_cnt;
+	atomic64_t decompress_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_hash {
+	atomic64_t hash_cnt;
+	atomic64_t hash_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_kpp {
+	atomic64_t setsecret_cnt;
+	atomic64_t generate_public_key_cnt;
+	atomic64_t compute_shared_secret_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_istat_rng {
+	atomic64_t generate_cnt;
+	atomic64_t generate_tlen;
+	atomic64_t seed_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+	union {
+		struct crypto_istat_aead aead;
+		struct crypto_istat_akcipher akcipher;
+		struct crypto_istat_cipher cipher;
+		struct crypto_istat_compress compress;
+		struct crypto_istat_hash hash;
+		struct crypto_istat_rng rng;
+		struct crypto_istat_kpp kpp;
+	} stats;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init)(struct crypto_tfm *, u32, u32);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_shash;
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	struct crypto_tfm base;
+};
+
+enum sgx_page_flags {
+	SGX_PAGE_MEASURE = 1,
+};
+
+struct sgx_enclave_create {
+	__u64 src;
+};
+
+struct sgx_enclave_add_pages {
+	__u64 src;
+	__u64 offset;
+	__u64 length;
+	__u64 secinfo;
+	__u64 flags;
+	__u64 count;
+};
+
+struct sgx_enclave_init {
+	__u64 sigstruct;
+};
+
+struct sgx_enclave_provision {
+	__u64 fd;
+};
+
+struct node {
+	struct device dev;
+	struct list_head access_list;
+	struct work_struct node_work;
+	struct list_head cache_attrs;
+	struct device *cache_dev;
+};
+
+struct sgx_vepc {
+	struct xarray page_array;
+	struct mutex lock;
+};
+
+struct vmware_steal_time {
+	union {
+		uint64_t clock;
+		struct {
+			uint32_t clock_low;
+			uint32_t clock_high;
+		};
+	};
+	uint64_t reserved[7];
+};
+
+struct mpc_intsrc {
+	unsigned char type;
+	unsigned char irqtype;
+	short unsigned int irqflag;
+	unsigned char srcbus;
+	unsigned char srcbusirq;
+	unsigned char dstapic;
+	unsigned char dstirq;
+};
+
+enum mp_irq_source_types {
+	mp_INT = 0,
+	mp_NMI = 1,
+	mp_SMI = 2,
+	mp_ExtINT = 3,
+};
+
+enum mp_bustype {
+	MP_BUS_ISA = 1,
+	MP_BUS_EISA = 2,
+	MP_BUS_PCI = 3,
+};
+
+typedef u64 acpi_physical_address;
+
+typedef u32 acpi_status;
+
+typedef void *acpi_handle;
+
+typedef u8 acpi_adr_space_type;
+
+struct acpi_subtable_header {
+	u8 type;
+	u8 length;
+};
+
+struct acpi_table_boot {
+	struct acpi_table_header header;
+	u8 cmos_index;
+	u8 reserved[3];
+};
+
+struct acpi_cedt_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+struct acpi_hmat_structure {
+	u16 type;
+	u16 reserved;
+	u32 length;
+};
+
+struct acpi_table_hpet {
+	struct acpi_table_header header;
+	u32 id;
+	struct acpi_generic_address address;
+	u8 sequence;
+	u16 minimum_tick;
+	u8 flags;
+} __attribute__((packed));
+
+struct acpi_table_madt {
+	struct acpi_table_header header;
+	u32 address;
+	u32 flags;
+};
+
+enum acpi_madt_type {
+	ACPI_MADT_TYPE_LOCAL_APIC = 0,
+	ACPI_MADT_TYPE_IO_APIC = 1,
+	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
+	ACPI_MADT_TYPE_NMI_SOURCE = 3,
+	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
+	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
+	ACPI_MADT_TYPE_IO_SAPIC = 6,
+	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
+	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
+	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
+	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
+	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
+	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
+	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
+	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
+	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
+	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
+	ACPI_MADT_TYPE_RESERVED = 17,
+	ACPI_MADT_TYPE_OEM_RESERVED = 128,
+};
+
+struct acpi_madt_local_apic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u32 lapic_flags;
+};
+
+struct acpi_madt_io_apic {
+	struct acpi_subtable_header header;
+	u8 id;
+	u8 reserved;
+	u32 address;
+	u32 global_irq_base;
+};
+
+struct acpi_madt_interrupt_override {
+	struct acpi_subtable_header header;
+	u8 bus;
+	u8 source_irq;
+	u32 global_irq;
+	u16 inti_flags;
+} __attribute__((packed));
+
+struct acpi_madt_nmi_source {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 global_irq;
+};
+
+struct acpi_madt_local_apic_nmi {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u16 inti_flags;
+	u8 lint;
+} __attribute__((packed));
+
+struct acpi_madt_local_apic_override {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_madt_local_sapic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u8 eid;
+	u8 reserved[3];
+	u32 lapic_flags;
+	u32 uid;
+	char uid_string[1];
+} __attribute__((packed));
+
+struct acpi_madt_local_x2apic {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 local_apic_id;
+	u32 lapic_flags;
+	u32 uid;
+};
+
+struct acpi_madt_local_x2apic_nmi {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 uid;
+	u8 lint;
+	u8 reserved[3];
+};
+
+struct acpi_madt_multiproc_wakeup {
+	struct acpi_subtable_header header;
+	u16 mailbox_version;
+	u32 reserved;
+	u64 base_address;
+};
+
+struct acpi_madt_multiproc_wakeup_mailbox {
+	u16 command;
+	u16 reserved;
+	u32 apic_id;
+	u64 wakeup_vector;
+	u8 reserved_os[2032];
+	u8 reserved_firmware[2048];
+};
+
+struct acpi_prmt_module_header {
+	u16 revision;
+	u16 length;
+};
+
+union acpi_subtable_headers {
+	struct acpi_subtable_header common;
+	struct acpi_hmat_structure hmat;
+	struct acpi_prmt_module_header prmt;
+	struct acpi_cedt_header cedt;
+};
+
+typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
+
+typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, void *, const long unsigned int);
+
+struct acpi_subtable_proc {
+	int id;
+	acpi_tbl_entry_handler handler;
+	acpi_tbl_entry_handler_arg handler_arg;
+	void *arg;
+	int count;
+};
+
+typedef u32 phys_cpuid_t;
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	unsigned char *iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	long unsigned int iomap_base;
+};
+
+enum ioapic_domain_type {
+	IOAPIC_DOMAIN_INVALID = 0,
+	IOAPIC_DOMAIN_LEGACY = 1,
+	IOAPIC_DOMAIN_STRICT = 2,
+	IOAPIC_DOMAIN_DYNAMIC = 3,
+};
+
+struct ioapic_domain_cfg {
+	enum ioapic_domain_type type;
+	const struct irq_domain_ops *ops;
+	struct device_node *dev;
+};
+
+struct wakeup_header {
+	u16 video_mode;
+	u32 pmode_entry;
+	u16 pmode_cs;
+	u32 pmode_cr0;
+	u32 pmode_cr3;
+	u32 pmode_cr4;
+	u32 pmode_efer_low;
+	u32 pmode_efer_high;
+	u64 pmode_gdt;
+	u32 pmode_misc_en_low;
+	u32 pmode_misc_en_high;
+	u32 pmode_behavior;
+	u32 realmode_flags;
+	u32 real_magic;
+	u32 signature;
+} __attribute__((packed));
+
+struct acpi_hest_header {
+	u16 type;
+	u16 source_id;
+};
+
+struct acpi_hest_ia_error_bank {
+	u8 bank_number;
+	u8 clear_status_on_init;
+	u8 status_format;
+	u8 reserved;
+	u32 control_register;
+	u64 control_data;
+	u32 status_register;
+	u32 address_register;
+	u32 misc_register;
+} __attribute__((packed));
+
+struct acpi_hest_notify {
+	u8 type;
+	u8 length;
+	u16 config_write_enable;
+	u32 poll_interval;
+	u32 vector;
+	u32 polling_threshold_value;
+	u32 polling_threshold_window;
+	u32 error_threshold_value;
+	u32 error_threshold_window;
+};
+
+struct acpi_hest_ia_corrected {
+	struct acpi_hest_header header;
+	u16 reserved1;
+	u8 flags;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	struct acpi_hest_notify notify;
+	u8 num_hardware_banks;
+	u8 reserved2[3];
+};
+
+struct cpc_reg {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct cppc_perf_caps {
+	u32 guaranteed_perf;
+	u32 highest_perf;
+	u32 nominal_perf;
+	u32 lowest_perf;
+	u32 lowest_nonlinear_perf;
+	u32 lowest_freq;
+	u32 nominal_freq;
+};
+
+struct acpi_power_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_processor_cx {
+	u8 valid;
+	u8 type;
+	u32 address;
+	u8 entry_method;
+	u8 index;
+	u32 latency;
+	u8 bm_sts_skip;
+	char desc[32];
+};
+
+struct acpi_processor_flags {
+	u8 power: 1;
+	u8 performance: 1;
+	u8 throttling: 1;
+	u8 limit: 1;
+	u8 bm_control: 1;
+	u8 bm_check: 1;
+	u8 has_cst: 1;
+	u8 has_lpi: 1;
+	u8 power_setup_done: 1;
+	u8 bm_rld_set: 1;
+	u8 need_hotplug_init: 1;
+};
+
+struct cstate_entry {
+	struct {
+		unsigned int eax;
+		unsigned int ecx;
+	} states[8];
+};
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = 4294967295,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+typedef void (*nmi_shootdown_cb)(int, struct pt_regs *);
+
+struct intel_early_ops {
+	resource_size_t (*stolen_size)(int, int, int);
+	resource_size_t (*stolen_base)(int, int, int, resource_size_t);
+};
+
+struct chipset {
+	u32 vendor;
+	u32 device;
+	u32 class;
+	u32 class_mask;
+	u32 flags;
+	void (*f)(int, int, int);
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+};
+
+struct sched_group;
+
+struct sched_domain {
+	struct sched_domain *parent;
+	struct sched_domain *child;
+	struct sched_group *groups;
+	long unsigned int min_interval;
+	long unsigned int max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	long unsigned int last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	long unsigned int last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	unsigned int lb_count[3];
+	unsigned int lb_failed[3];
+	unsigned int lb_balanced[3];
+	unsigned int lb_imbalance[3];
+	unsigned int lb_gained[3];
+	unsigned int lb_hot_gained[3];
+	unsigned int lb_nobusyg[3];
+	unsigned int lb_nobusyq[3];
+	unsigned int alb_count;
+	unsigned int alb_failed;
+	unsigned int alb_pushed;
+	unsigned int sbe_count;
+	unsigned int sbe_balanced;
+	unsigned int sbe_pushed;
+	unsigned int sbf_count;
+	unsigned int sbf_balanced;
+	unsigned int sbf_pushed;
+	unsigned int ttwu_wake_remote;
+	unsigned int ttwu_move_affine;
+	unsigned int ttwu_move_balance;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	long unsigned int span[0];
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sched_group_capacity;
+
+struct sd_data {
+	struct sched_domain **sd;
+	struct sched_domain_shared **sds;
+	struct sched_group **sg;
+	struct sched_group_capacity **sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+enum apic_intr_mode_id {
+	APIC_PIC = 0,
+	APIC_VIRTUAL_WIRE = 1,
+	APIC_VIRTUAL_WIRE_NO_CONFIG = 2,
+	APIC_SYMMETRIC_IO = 3,
+	APIC_SYMMETRIC_IO_NO_ROUTING = 4,
+};
+
+struct tsc_adjust {
+	s64 bootval;
+	s64 adjusted;
+	long unsigned int nextcheck;
+	bool warned;
+};
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+struct mpf_intel {
+	char signature[4];
+	unsigned int physptr;
+	unsigned char length;
+	unsigned char specification;
+	unsigned char checksum;
+	unsigned char feature1;
+	unsigned char feature2;
+	unsigned char feature3;
+	unsigned char feature4;
+	unsigned char feature5;
+};
+
+struct mpc_table {
+	char signature[4];
+	short unsigned int length;
+	char spec;
+	char checksum;
+	char oem[8];
+	char productid[12];
+	unsigned int oemptr;
+	short unsigned int oemsize;
+	short unsigned int oemcount;
+	unsigned int lapic;
+	unsigned int reserved;
+};
+
+struct mpc_cpu {
+	unsigned char type;
+	unsigned char apicid;
+	unsigned char apicver;
+	unsigned char cpuflag;
+	unsigned int cpufeature;
+	unsigned int featureflag;
+	unsigned int reserved[2];
+};
+
+struct mpc_bus {
+	unsigned char type;
+	unsigned char busid;
+	unsigned char bustype[6];
+};
+
+struct mpc_ioapic {
+	unsigned char type;
+	unsigned char apicid;
+	unsigned char apicver;
+	unsigned char flags;
+	unsigned int apicaddr;
+};
+
+struct mpc_lintsrc {
+	unsigned char type;
+	unsigned char irqtype;
+	short unsigned int irqflag;
+	unsigned char srcbusid;
+	unsigned char srcbusirq;
+	unsigned char destapic;
+	unsigned char destapiclint;
+};
+
+enum page_cache_mode {
+	_PAGE_CACHE_MODE_WB = 0,
+	_PAGE_CACHE_MODE_WC = 1,
+	_PAGE_CACHE_MODE_UC_MINUS = 2,
+	_PAGE_CACHE_MODE_UC = 3,
+	_PAGE_CACHE_MODE_WT = 4,
+	_PAGE_CACHE_MODE_WP = 5,
+	_PAGE_CACHE_MODE_NUM = 8,
+};
+
+enum {
+	IRQ_REMAP_XAPIC_MODE = 0,
+	IRQ_REMAP_X2APIC_MODE = 1,
+};
+
+typedef int (*wakeup_cpu_handler)(int, long unsigned int);
+
+union apic_ir {
+	long unsigned int map[4];
+	u32 regs[8];
+};
+
+enum {
+	X2APIC_OFF = 0,
+	X2APIC_ON = 1,
+	X2APIC_DISABLED = 2,
+};
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_MSI_NOMASK_QUIRK = 134217728,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 268435456,
+	IRQD_AFFINITY_ON_ACTIVATE = 536870912,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,
+};
+
+enum {
+	X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 1,
+	X86_IRQ_ALLOC_LEGACY = 2,
+};
+
+struct apic_chip_data {
+	struct irq_cfg hw_irq_cfg;
+	unsigned int vector;
+	unsigned int prev_vector;
+	unsigned int cpu;
+	unsigned int prev_cpu;
+	unsigned int irq;
+	struct hlist_node clist;
+	unsigned int move_in_progress: 1;
+	unsigned int is_managed: 1;
+	unsigned int can_reserve: 1;
+	unsigned int has_reserved: 1;
+};
+
+struct irq_matrix;
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+struct clock_event_device___2;
+
+union IO_APIC_reg_00 {
+	u32 raw;
+	struct {
+		u32 __reserved_2: 14;
+		u32 LTS: 1;
+		u32 delivery_type: 1;
+		u32 __reserved_1: 8;
+		u32 ID: 8;
+	} bits;
+};
+
+union IO_APIC_reg_01 {
+	u32 raw;
+	struct {
+		u32 version: 8;
+		u32 __reserved_2: 7;
+		u32 PRQ: 1;
+		u32 entries: 8;
+		u32 __reserved_1: 8;
+	} bits;
+};
+
+union IO_APIC_reg_02 {
+	u32 raw;
+	struct {
+		u32 __reserved_2: 24;
+		u32 arbitration: 4;
+		u32 __reserved_1: 4;
+	} bits;
+};
+
+union IO_APIC_reg_03 {
+	u32 raw;
+	struct {
+		u32 boot_DT: 1;
+		u32 __reserved_1: 31;
+	} bits;
+};
+
+struct IO_APIC_route_entry {
+	union {
+		struct {
+			u64 vector: 8;
+			u64 delivery_mode: 3;
+			u64 dest_mode_logical: 1;
+			u64 delivery_status: 1;
+			u64 active_low: 1;
+			u64 irr: 1;
+			u64 is_level: 1;
+			u64 masked: 1;
+			u64 reserved_0: 15;
+			u64 reserved_1: 17;
+			u64 virt_destid_8_14: 7;
+			u64 destid_0_7: 8;
+		};
+		struct {
+			u64 ir_shared_0: 8;
+			u64 ir_zero: 3;
+			u64 ir_index_15: 1;
+			u64 ir_shared_1: 5;
+			u64 ir_reserved_0: 31;
+			u64 ir_format: 1;
+			u64 ir_index_0_14: 15;
+		};
+		struct {
+			u64 w1: 32;
+			u64 w2: 32;
+		};
+	};
+};
+
+struct irq_pin_list {
+	struct list_head list;
+	int apic;
+	int pin;
+};
+
+struct mp_chip_data {
+	struct list_head irq_2_pin;
+	struct IO_APIC_route_entry entry;
+	bool is_level;
+	bool active_low;
+	bool isa_irq;
+	u32 count;
+};
+
+struct mp_ioapic_gsi {
+	u32 gsi_base;
+	u32 gsi_end;
+};
+
+struct ioapic {
+	int nr_registers;
+	struct IO_APIC_route_entry *saved_registers;
+	struct mpc_ioapic mp_config;
+	struct mp_ioapic_gsi gsi_config;
+	struct ioapic_domain_cfg irqdomain_cfg;
+	struct irq_domain *irqdomain;
+	struct resource *iomem_res;
+};
+
+struct io_apic {
+	unsigned int index;
+	unsigned int unused[3];
+	unsigned int data;
+	unsigned int unused2[11];
+	unsigned int eoi;
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
+	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
+	IRQ_DOMAIN_FLAG_NO_MAP = 128,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct acpi_device_status {
+	u32 present: 1;
+	u32 enabled: 1;
+	u32 show_in_ui: 1;
+	u32 functional: 1;
+	u32 battery_present: 1;
+	u32 reserved: 27;
+};
+
+struct acpi_device_flags {
+	u32 dynamic_status: 1;
+	u32 removable: 1;
+	u32 ejectable: 1;
+	u32 power_manageable: 1;
+	u32 match_driver: 1;
+	u32 initialized: 1;
+	u32 visited: 1;
+	u32 hotplug_notify: 1;
+	u32 is_dock_station: 1;
+	u32 of_compatible_ok: 1;
+	u32 coherent_dma: 1;
+	u32 cca_seen: 1;
+	u32 enumeration_by_parent: 1;
+	u32 honor_deps: 1;
+	u32 reserved: 18;
+};
+
+typedef char acpi_bus_id[8];
+
+struct acpi_pnp_type {
+	u32 hardware_id: 1;
+	u32 bus_address: 1;
+	u32 platform_id: 1;
+	u32 reserved: 29;
+};
+
+typedef u64 acpi_bus_address;
+
+typedef char acpi_device_name[40];
+
+typedef char acpi_device_class[20];
+
+union acpi_object;
+
+struct acpi_device_pnp {
+	acpi_bus_id bus_id;
+	int instance_no;
+	struct acpi_pnp_type type;
+	acpi_bus_address bus_address;
+	char *unique_id;
+	struct list_head ids;
+	acpi_device_name device_name;
+	acpi_device_class device_class;
+	union acpi_object *str_obj;
+};
+
+struct acpi_device_power_flags {
+	u32 explicit_get: 1;
+	u32 power_resources: 1;
+	u32 inrush_current: 1;
+	u32 power_removed: 1;
+	u32 ignore_parent: 1;
+	u32 dsw_present: 1;
+	u32 reserved: 26;
+};
+
+struct acpi_device_power_state {
+	struct {
+		u8 valid: 1;
+		u8 explicit_set: 1;
+		u8 reserved: 6;
+	} flags;
+	int power;
+	int latency;
+	struct list_head resources;
+};
+
+struct acpi_device_power {
+	int state;
+	struct acpi_device_power_flags flags;
+	struct acpi_device_power_state states[5];
+	u8 state_for_enumeration;
+};
+
+struct acpi_device_wakeup_flags {
+	u8 valid: 1;
+	u8 notifier_present: 1;
+};
+
+struct acpi_device_wakeup_context {
+	void (*func)(struct acpi_device_wakeup_context *);
+	struct device *dev;
+};
+
+struct acpi_device_wakeup {
+	acpi_handle gpe_device;
+	u64 gpe_number;
+	u64 sleep_state;
+	struct list_head resources;
+	struct acpi_device_wakeup_flags flags;
+	struct acpi_device_wakeup_context context;
+	struct wakeup_source *ws;
+	int prepare_count;
+	int enable_count;
+};
+
+struct acpi_device_perf_flags {
+	u8 reserved: 8;
+};
+
+struct acpi_device_perf_state;
+
+struct acpi_device_perf {
+	int state;
+	struct acpi_device_perf_flags flags;
+	int state_count;
+	struct acpi_device_perf_state *states;
+};
+
+struct acpi_device_dir {
+	struct proc_dir_entry *entry;
+};
+
+struct acpi_device_data {
+	const union acpi_object *pointer;
+	struct list_head properties;
+	const union acpi_object *of_compatible;
+	struct list_head subnodes;
+};
+
+struct acpi_scan_handler;
+
+struct acpi_hotplug_context;
+
+struct acpi_driver;
+
+struct acpi_gpio_mapping;
+
+struct acpi_device {
+	u32 pld_crc;
+	int device_type;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct acpi_device *parent;
+	struct list_head children;
+	struct list_head node;
+	struct list_head wakeup_list;
+	struct list_head del_list;
+	struct acpi_device_status status;
+	struct acpi_device_flags flags;
+	struct acpi_device_pnp pnp;
+	struct acpi_device_power power;
+	struct acpi_device_wakeup wakeup;
+	struct acpi_device_perf performance;
+	struct acpi_device_dir dir;
+	struct acpi_device_data data;
+	struct acpi_scan_handler *handler;
+	struct acpi_hotplug_context *hp;
+	struct acpi_driver *driver;
+	const struct acpi_gpio_mapping *driver_gpios;
+	void *driver_data;
+	struct device dev;
+	unsigned int physical_node_count;
+	unsigned int dep_unmet;
+	struct list_head physical_node_list;
+	struct mutex physical_node_lock;
+	void (*remove)(struct acpi_device *);
+};
+
+typedef u64 acpi_io_address;
+
+typedef u32 acpi_object_type;
+
+union acpi_object {
+	acpi_object_type type;
+	struct {
+		acpi_object_type type;
+		u64 value;
+	} integer;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		char *pointer;
+	} string;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		u8 *pointer;
+	} buffer;
+	struct {
+		acpi_object_type type;
+		u32 count;
+		union acpi_object *elements;
+	} package;
+	struct {
+		acpi_object_type type;
+		acpi_object_type actual_type;
+		acpi_handle handle;
+	} reference;
+	struct {
+		acpi_object_type type;
+		u32 proc_id;
+		acpi_io_address pblk_address;
+		u32 pblk_length;
+	} processor;
+	struct {
+		acpi_object_type type;
+		u32 system_level;
+		u32 resource_order;
+	} power_resource;
+};
+
+struct acpi_hotplug_profile {
+	struct kobject kobj;
+	int (*scan_dependent)(struct acpi_device *);
+	void (*notify_online)(struct acpi_device *);
+	bool enabled: 1;
+	bool demand_offline: 1;
+};
+
+struct acpi_scan_handler {
+	const struct acpi_device_id *ids;
+	struct list_head list_node;
+	bool (*match)(const char *, const struct acpi_device_id **);
+	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
+	void (*detach)(struct acpi_device *);
+	void (*bind)(struct device *);
+	void (*unbind)(struct device *);
+	struct acpi_hotplug_profile hotplug;
+};
+
+struct acpi_hotplug_context {
+	struct acpi_device *self;
+	int (*notify)(struct acpi_device *, u32);
+	void (*uevent)(struct acpi_device *, u32);
+	void (*fixup)(struct acpi_device *);
+};
+
+typedef int (*acpi_op_add)(struct acpi_device *);
+
+typedef int (*acpi_op_remove)(struct acpi_device *);
+
+typedef void (*acpi_op_notify)(struct acpi_device *, u32);
+
+struct acpi_device_ops {
+	acpi_op_add add;
+	acpi_op_remove remove;
+	acpi_op_notify notify;
+};
+
+struct acpi_driver {
+	char name[80];
+	char class[80];
+	const struct acpi_device_id *ids;
+	unsigned int flags;
+	struct acpi_device_ops ops;
+	struct device_driver drv;
+	struct module *owner;
+};
+
+struct acpi_device_perf_state {
+	struct {
+		u8 valid: 1;
+		u8 reserved: 7;
+	} flags;
+	u8 power;
+	u8 performance;
+	int latency;
+};
+
+struct acpi_gpio_params;
+
+struct acpi_gpio_mapping {
+	const char *name;
+	const struct acpi_gpio_params *data;
+	unsigned int size;
+	unsigned int quirks;
+};
+
+struct acpi_gpio_params {
+	unsigned int crs_entry_index;
+	unsigned int line_index;
+	bool active_low;
+};
+
+struct uvyh_gr0_gam_gr_config_s {
+	long unsigned int rsvd_0_9: 10;
+	long unsigned int subspace: 1;
+	long unsigned int rsvd_11_63: 53;
+};
+
+struct uv5h_gr0_gam_gr_config_s {
+	long unsigned int rsvd_0_9: 10;
+	long unsigned int subspace: 1;
+	long unsigned int rsvd_11_63: 53;
+};
+
+struct uv4h_gr0_gam_gr_config_s {
+	long unsigned int rsvd_0_9: 10;
+	long unsigned int subspace: 1;
+	long unsigned int rsvd_11_63: 53;
+};
+
+struct uv3h_gr0_gam_gr_config_s {
+	long unsigned int m_skt: 6;
+	long unsigned int undef_6_9: 4;
+	long unsigned int subspace: 1;
+	long unsigned int reserved: 53;
+};
+
+struct uv2h_gr0_gam_gr_config_s {
+	long unsigned int n_gr: 4;
+	long unsigned int reserved: 60;
+};
+
+union uvyh_gr0_gam_gr_config_u {
+	long unsigned int v;
+	struct uvyh_gr0_gam_gr_config_s sy;
+	struct uv5h_gr0_gam_gr_config_s s5;
+	struct uv4h_gr0_gam_gr_config_s s4;
+	struct uv3h_gr0_gam_gr_config_s s3;
+	struct uv2h_gr0_gam_gr_config_s s2;
+};
+
+struct uvh_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int rsvd_32_63: 32;
+};
+
+struct uvxh_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 15;
+	long unsigned int rsvd_47_49: 3;
+	long unsigned int nodes_per_bit: 7;
+	long unsigned int ni_port: 5;
+	long unsigned int rsvd_62_63: 2;
+};
+
+struct uvyh_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 7;
+	long unsigned int rsvd_39_56: 18;
+	long unsigned int ni_port: 6;
+	long unsigned int rsvd_63: 1;
+};
+
+struct uv5h_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 7;
+	long unsigned int rsvd_39_56: 18;
+	long unsigned int ni_port: 6;
+	long unsigned int rsvd_63: 1;
+};
+
+struct uv4h_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 15;
+	long unsigned int rsvd_47: 1;
+	long unsigned int router_select: 1;
+	long unsigned int rsvd_49: 1;
+	long unsigned int nodes_per_bit: 7;
+	long unsigned int ni_port: 5;
+	long unsigned int rsvd_62_63: 2;
+};
+
+struct uv3h_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 15;
+	long unsigned int rsvd_47: 1;
+	long unsigned int router_select: 1;
+	long unsigned int rsvd_49: 1;
+	long unsigned int nodes_per_bit: 7;
+	long unsigned int ni_port: 5;
+	long unsigned int rsvd_62_63: 2;
+};
+
+struct uv2h_node_id_s {
+	long unsigned int force1: 1;
+	long unsigned int manufacturer: 11;
+	long unsigned int part_number: 16;
+	long unsigned int revision: 4;
+	long unsigned int node_id: 15;
+	long unsigned int rsvd_47_49: 3;
+	long unsigned int nodes_per_bit: 7;
+	long unsigned int ni_port: 5;
+	long unsigned int rsvd_62_63: 2;
+};
+
+union uvh_node_id_u {
+	long unsigned int v;
+	struct uvh_node_id_s s;
+	struct uvxh_node_id_s sx;
+	struct uvyh_node_id_s sy;
+	struct uv5h_node_id_s s5;
+	struct uv4h_node_id_s s4;
+	struct uv3h_node_id_s s3;
+	struct uv2h_node_id_s s2;
+};
+
+struct uvh_rh10_gam_addr_map_config_s {
+	long unsigned int undef_0_5: 6;
+	long unsigned int n_skt: 3;
+	long unsigned int undef_9_11: 3;
+	long unsigned int ls_enable: 1;
+	long unsigned int undef_13_15: 3;
+	long unsigned int mk_tme_keyid_bits: 4;
+	long unsigned int rsvd_20_63: 44;
+};
+
+struct uvyh_rh10_gam_addr_map_config_s {
+	long unsigned int undef_0_5: 6;
+	long unsigned int n_skt: 3;
+	long unsigned int undef_9_11: 3;
+	long unsigned int ls_enable: 1;
+	long unsigned int undef_13_15: 3;
+	long unsigned int mk_tme_keyid_bits: 4;
+	long unsigned int rsvd_20_63: 44;
+};
+
+struct uv5h_rh10_gam_addr_map_config_s {
+	long unsigned int undef_0_5: 6;
+	long unsigned int n_skt: 3;
+	long unsigned int undef_9_11: 3;
+	long unsigned int ls_enable: 1;
+	long unsigned int undef_13_15: 3;
+	long unsigned int mk_tme_keyid_bits: 4;
+};
+
+union uvh_rh10_gam_addr_map_config_u {
+	long unsigned int v;
+	struct uvh_rh10_gam_addr_map_config_s s;
+	struct uvyh_rh10_gam_addr_map_config_s sy;
+	struct uv5h_rh10_gam_addr_map_config_s s5;
+};
+
+struct uvh_rh10_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uvyh_rh10_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uv5h_rh10_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh10_gam_mmioh_overlay_config0_u {
+	long unsigned int v;
+	struct uvh_rh10_gam_mmioh_overlay_config0_s s;
+	struct uvyh_rh10_gam_mmioh_overlay_config0_s sy;
+	struct uv5h_rh10_gam_mmioh_overlay_config0_s s5;
+};
+
+struct uvh_rh10_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uvyh_rh10_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uv5h_rh10_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh10_gam_mmioh_overlay_config1_u {
+	long unsigned int v;
+	struct uvh_rh10_gam_mmioh_overlay_config1_s s;
+	struct uvyh_rh10_gam_mmioh_overlay_config1_s sy;
+	struct uv5h_rh10_gam_mmioh_overlay_config1_s s5;
+};
+
+struct uvh_rh10_gam_mmr_overlay_config_s {
+	long unsigned int undef_0_24: 25;
+	long unsigned int base: 27;
+	long unsigned int undef_52_62: 11;
+	long unsigned int enable: 1;
+};
+
+struct uvyh_rh10_gam_mmr_overlay_config_s {
+	long unsigned int undef_0_24: 25;
+	long unsigned int base: 27;
+	long unsigned int undef_52_62: 11;
+	long unsigned int enable: 1;
+};
+
+struct uv5h_rh10_gam_mmr_overlay_config_s {
+	long unsigned int undef_0_24: 25;
+	long unsigned int base: 27;
+	long unsigned int undef_52_62: 11;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh10_gam_mmr_overlay_config_u {
+	long unsigned int v;
+	struct uvh_rh10_gam_mmr_overlay_config_s s;
+	struct uvyh_rh10_gam_mmr_overlay_config_s sy;
+	struct uv5h_rh10_gam_mmr_overlay_config_s s5;
+};
+
+struct uvh_rh_gam_addr_map_config_s {
+	long unsigned int rsvd_0_5: 6;
+	long unsigned int n_skt: 4;
+	long unsigned int rsvd_10_63: 54;
+};
+
+struct uvxh_rh_gam_addr_map_config_s {
+	long unsigned int rsvd_0_5: 6;
+	long unsigned int n_skt: 4;
+	long unsigned int rsvd_10_63: 54;
+};
+
+struct uv4h_rh_gam_addr_map_config_s {
+	long unsigned int rsvd_0_5: 6;
+	long unsigned int n_skt: 4;
+	long unsigned int rsvd_10_63: 54;
+};
+
+struct uv3h_rh_gam_addr_map_config_s {
+	long unsigned int m_skt: 6;
+	long unsigned int n_skt: 4;
+	long unsigned int rsvd_10_63: 54;
+};
+
+struct uv2h_rh_gam_addr_map_config_s {
+	long unsigned int m_skt: 6;
+	long unsigned int n_skt: 4;
+	long unsigned int rsvd_10_63: 54;
+};
+
+union uvh_rh_gam_addr_map_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_addr_map_config_s s;
+	struct uvxh_rh_gam_addr_map_config_s sx;
+	struct uv4h_rh_gam_addr_map_config_s s4;
+	struct uv3h_rh_gam_addr_map_config_s s3;
+	struct uv2h_rh_gam_addr_map_config_s s2;
+};
+
+struct uvh_rh_gam_alias_2_overlay_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int base: 8;
+	long unsigned int rsvd_32_47: 16;
+	long unsigned int m_alias: 5;
+	long unsigned int rsvd_53_62: 10;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_alias_2_overlay_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int base: 8;
+	long unsigned int rsvd_32_47: 16;
+	long unsigned int m_alias: 5;
+	long unsigned int rsvd_53_62: 10;
+	long unsigned int enable: 1;
+};
+
+struct uv4h_rh_gam_alias_2_overlay_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int base: 8;
+	long unsigned int rsvd_32_47: 16;
+	long unsigned int m_alias: 5;
+	long unsigned int rsvd_53_62: 10;
+	long unsigned int enable: 1;
+};
+
+struct uv3h_rh_gam_alias_2_overlay_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int base: 8;
+	long unsigned int rsvd_32_47: 16;
+	long unsigned int m_alias: 5;
+	long unsigned int rsvd_53_62: 10;
+	long unsigned int enable: 1;
+};
+
+struct uv2h_rh_gam_alias_2_overlay_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int base: 8;
+	long unsigned int rsvd_32_47: 16;
+	long unsigned int m_alias: 5;
+	long unsigned int rsvd_53_62: 10;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_alias_2_overlay_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_alias_2_overlay_config_s s;
+	struct uvxh_rh_gam_alias_2_overlay_config_s sx;
+	struct uv4h_rh_gam_alias_2_overlay_config_s s4;
+	struct uv3h_rh_gam_alias_2_overlay_config_s s3;
+	struct uv2h_rh_gam_alias_2_overlay_config_s s2;
+};
+
+struct uvh_rh_gam_alias_2_redirect_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int dest_base: 22;
+	long unsigned int rsvd_46_63: 18;
+};
+
+struct uvxh_rh_gam_alias_2_redirect_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int dest_base: 22;
+	long unsigned int rsvd_46_63: 18;
+};
+
+struct uv4h_rh_gam_alias_2_redirect_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int dest_base: 22;
+	long unsigned int rsvd_46_63: 18;
+};
+
+struct uv3h_rh_gam_alias_2_redirect_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int dest_base: 22;
+	long unsigned int rsvd_46_63: 18;
+};
+
+struct uv2h_rh_gam_alias_2_redirect_config_s {
+	long unsigned int rsvd_0_23: 24;
+	long unsigned int dest_base: 22;
+	long unsigned int rsvd_46_63: 18;
+};
+
+union uvh_rh_gam_alias_2_redirect_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_alias_2_redirect_config_s s;
+	struct uvxh_rh_gam_alias_2_redirect_config_s sx;
+	struct uv4h_rh_gam_alias_2_redirect_config_s s4;
+	struct uv3h_rh_gam_alias_2_redirect_config_s s3;
+	struct uv2h_rh_gam_alias_2_redirect_config_s s2;
+};
+
+struct uvh_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_45: 46;
+	long unsigned int rsvd_46_51: 6;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_45: 46;
+	long unsigned int rsvd_46_51: 6;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv4ah_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_24: 25;
+	long unsigned int undef_25: 1;
+	long unsigned int base: 26;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv4h_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_24: 25;
+	long unsigned int undef_25: 1;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_51: 6;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv3h_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_27: 28;
+	long unsigned int base: 18;
+	long unsigned int rsvd_46_51: 6;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_61: 6;
+	long unsigned int mode: 1;
+	long unsigned int enable: 1;
+};
+
+struct uv2h_rh_gam_gru_overlay_config_s {
+	long unsigned int rsvd_0_27: 28;
+	long unsigned int base: 18;
+	long unsigned int rsvd_46_51: 6;
+	long unsigned int n_gru: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_gru_overlay_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_gru_overlay_config_s s;
+	struct uvxh_rh_gam_gru_overlay_config_s sx;
+	struct uv4ah_rh_gam_gru_overlay_config_s s4a;
+	struct uv4h_rh_gam_gru_overlay_config_s s4;
+	struct uv3h_rh_gam_gru_overlay_config_s s3;
+	struct uv2h_rh_gam_gru_overlay_config_s s2;
+};
+
+struct uvh_rh_gam_mmioh_overlay_config_s {
+	long unsigned int rsvd_0_26: 27;
+	long unsigned int base: 19;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_mmioh_overlay_config_s {
+	long unsigned int rsvd_0_26: 27;
+	long unsigned int base: 19;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv2h_rh_gam_mmioh_overlay_config_s {
+	long unsigned int rsvd_0_26: 27;
+	long unsigned int base: 19;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_mmioh_overlay_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_mmioh_overlay_config_s s;
+	struct uvxh_rh_gam_mmioh_overlay_config_s sx;
+	struct uv2h_rh_gam_mmioh_overlay_config_s s2;
+};
+
+struct uvh_rh_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv4ah_rh_gam_mmioh_overlay_config0_mmr_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uv4h_rh_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv3h_rh_gam_mmioh_overlay_config0_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_mmioh_overlay_config0_u {
+	long unsigned int v;
+	struct uvh_rh_gam_mmioh_overlay_config0_s s;
+	struct uvxh_rh_gam_mmioh_overlay_config0_s sx;
+	struct uv4ah_rh_gam_mmioh_overlay_config0_mmr_s s4a;
+	struct uv4h_rh_gam_mmioh_overlay_config0_s s4;
+	struct uv3h_rh_gam_mmioh_overlay_config0_s s3;
+};
+
+struct uvh_rh_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv4ah_rh_gam_mmioh_overlay_config1_mmr_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 26;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int undef_62: 1;
+	long unsigned int enable: 1;
+};
+
+struct uv4h_rh_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+struct uv3h_rh_gam_mmioh_overlay_config1_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int m_io: 6;
+	long unsigned int n_io: 4;
+	long unsigned int rsvd_56_62: 7;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_mmioh_overlay_config1_u {
+	long unsigned int v;
+	struct uvh_rh_gam_mmioh_overlay_config1_s s;
+	struct uvxh_rh_gam_mmioh_overlay_config1_s sx;
+	struct uv4ah_rh_gam_mmioh_overlay_config1_mmr_s s4a;
+	struct uv4h_rh_gam_mmioh_overlay_config1_s s4;
+	struct uv3h_rh_gam_mmioh_overlay_config1_s s3;
+};
+
+struct uvh_rh_gam_mmr_overlay_config_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_62: 17;
+	long unsigned int enable: 1;
+};
+
+struct uvxh_rh_gam_mmr_overlay_config_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_62: 17;
+	long unsigned int enable: 1;
+};
+
+struct uv4h_rh_gam_mmr_overlay_config_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_62: 17;
+	long unsigned int enable: 1;
+};
+
+struct uv3h_rh_gam_mmr_overlay_config_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_62: 17;
+	long unsigned int enable: 1;
+};
+
+struct uv2h_rh_gam_mmr_overlay_config_s {
+	long unsigned int rsvd_0_25: 26;
+	long unsigned int base: 20;
+	long unsigned int rsvd_46_62: 17;
+	long unsigned int enable: 1;
+};
+
+union uvh_rh_gam_mmr_overlay_config_u {
+	long unsigned int v;
+	struct uvh_rh_gam_mmr_overlay_config_s s;
+	struct uvxh_rh_gam_mmr_overlay_config_s sx;
+	struct uv4h_rh_gam_mmr_overlay_config_s s4;
+	struct uv3h_rh_gam_mmr_overlay_config_s s3;
+	struct uv2h_rh_gam_mmr_overlay_config_s s2;
+};
+
+enum uv_system_type {
+	UV_NONE = 0,
+	UV_LEGACY_APIC = 1,
+	UV_X2APIC = 2,
+};
+
+enum {
+	BIOS_STATUS_MORE_PASSES = 1,
+	BIOS_STATUS_SUCCESS = 0,
+	BIOS_STATUS_UNIMPLEMENTED = 4294967258,
+	BIOS_STATUS_EINVAL = 4294967274,
+	BIOS_STATUS_UNAVAIL = 4294967280,
+	BIOS_STATUS_ABORT = 4294967292,
+};
+
+struct uv_gam_parameters {
+	u64 mmr_base;
+	u64 gru_base;
+	u8 mmr_shift;
+	u8 gru_shift;
+	u8 gpa_shift;
+	u8 unused1;
+};
+
+struct uv_gam_range_entry {
+	char type;
+	char unused1;
+	u16 nasid;
+	u16 sockid;
+	u16 pnode;
+	u32 unused2;
+	u32 limit;
+};
+
+struct uv_arch_type_entry {
+	char archtype[8];
+};
+
+struct uv_systab {
+	char signature[4];
+	u32 revision;
+	u64 function;
+	u32 size;
+	struct {
+		u32 type: 8;
+		u32 offset: 24;
+	} entry[1];
+};
+
+enum {
+	BIOS_FREQ_BASE_PLATFORM = 0,
+	BIOS_FREQ_BASE_INTERVAL_TIMER = 1,
+	BIOS_FREQ_BASE_REALTIME_CLOCK = 2,
+};
+
+struct uv_gam_range_s {
+	u32 limit;
+	u16 nasid;
+	s8 base;
+	u8 reserved;
+};
+
+struct uv_hub_info_s {
+	unsigned int hub_type;
+	unsigned char hub_revision;
+	long unsigned int global_mmr_base;
+	long unsigned int global_mmr_shift;
+	long unsigned int gpa_mask;
+	short unsigned int *socket_to_node;
+	short unsigned int *socket_to_pnode;
+	short unsigned int *pnode_to_socket;
+	struct uv_gam_range_s *gr_table;
+	short unsigned int min_socket;
+	short unsigned int min_pnode;
+	unsigned char m_val;
+	unsigned char n_val;
+	unsigned char gr_table_len;
+	unsigned char apic_pnode_shift;
+	unsigned char gpa_shift;
+	unsigned char nasid_shift;
+	unsigned char m_shift;
+	unsigned char n_lshift;
+	unsigned int gnode_extra;
+	long unsigned int gnode_upper;
+	long unsigned int lowmem_remap_top;
+	long unsigned int lowmem_remap_base;
+	long unsigned int global_gru_base;
+	long unsigned int global_gru_shift;
+	short unsigned int pnode;
+	short unsigned int pnode_mask;
+	short unsigned int coherency_domain_number;
+	short unsigned int numa_blade_id;
+	short unsigned int nr_possible_cpus;
+	short unsigned int nr_online_cpus;
+	short int memory_nid;
+};
+
+struct uv_cpu_info_s {
+	void *p_uv_hub_info;
+	unsigned char blade_cpu_id;
+	void *reserved;
+};
+
+struct uvh_apicid_s {
+	long unsigned int local_apic_mask: 24;
+	long unsigned int local_apic_shift: 5;
+	long unsigned int unused1: 3;
+	long unsigned int pnode_mask: 24;
+	long unsigned int pnode_shift: 5;
+	long unsigned int unused2: 3;
+};
+
+union uvh_apicid {
+	long unsigned int v;
+	struct uvh_apicid_s s;
+};
+
+enum map_type {
+	map_wb = 0,
+	map_uc = 1,
+};
+
+enum mmioh_arch {
+	UV2_MMIOH = 4294967295,
+	UVY_MMIOH0 = 0,
+	UVY_MMIOH1 = 1,
+	UVX_MMIOH0 = 2,
+	UVX_MMIOH1 = 3,
+};
+
+struct mn {
+	unsigned char m_val;
+	unsigned char n_val;
+	unsigned char m_shift;
+	unsigned char n_lshift;
+};
+
+struct cluster_mask {
+	unsigned int clusterid;
+	int node;
+	struct cpumask mask;
+};
+
+enum {
+	TRACE_FTRACE_BIT = 0,
+	TRACE_FTRACE_NMI_BIT = 1,
+	TRACE_FTRACE_IRQ_BIT = 2,
+	TRACE_FTRACE_SIRQ_BIT = 3,
+	TRACE_FTRACE_TRANSITION_BIT = 4,
+	TRACE_INTERNAL_BIT = 5,
+	TRACE_INTERNAL_NMI_BIT = 6,
+	TRACE_INTERNAL_IRQ_BIT = 7,
+	TRACE_INTERNAL_SIRQ_BIT = 8,
+	TRACE_INTERNAL_TRANSITION_BIT = 9,
+	TRACE_BRANCH_BIT = 10,
+	TRACE_IRQ_BIT = 11,
+	TRACE_GRAPH_BIT = 12,
+	TRACE_GRAPH_DEPTH_START_BIT = 13,
+	TRACE_GRAPH_DEPTH_END_BIT = 14,
+	TRACE_GRAPH_NOTRACE_BIT = 15,
+	TRACE_RECORD_RECURSION_BIT = 16,
+};
+
+enum {
+	TRACE_CTX_NMI = 0,
+	TRACE_CTX_IRQ = 1,
+	TRACE_CTX_SOFTIRQ = 2,
+	TRACE_CTX_NORMAL = 3,
+	TRACE_CTX_TRANSITION = 4,
+};
+
+struct dyn_arch_ftrace {};
+
+enum {
+	FTRACE_OPS_FL_ENABLED = 1,
+	FTRACE_OPS_FL_DYNAMIC = 2,
+	FTRACE_OPS_FL_SAVE_REGS = 4,
+	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
+	FTRACE_OPS_FL_RECURSION = 16,
+	FTRACE_OPS_FL_STUB = 32,
+	FTRACE_OPS_FL_INITIALIZED = 64,
+	FTRACE_OPS_FL_DELETED = 128,
+	FTRACE_OPS_FL_ADDING = 256,
+	FTRACE_OPS_FL_REMOVING = 512,
+	FTRACE_OPS_FL_MODIFYING = 1024,
+	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
+	FTRACE_OPS_FL_IPMODIFY = 4096,
+	FTRACE_OPS_FL_PID = 8192,
+	FTRACE_OPS_FL_RCU = 16384,
+	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
+	FTRACE_OPS_FL_PERMANENT = 65536,
+	FTRACE_OPS_FL_DIRECT = 131072,
+};
+
+enum {
+	FTRACE_FL_ENABLED = 2147483648,
+	FTRACE_FL_REGS = 1073741824,
+	FTRACE_FL_REGS_EN = 536870912,
+	FTRACE_FL_TRAMP = 268435456,
+	FTRACE_FL_TRAMP_EN = 134217728,
+	FTRACE_FL_IPMODIFY = 67108864,
+	FTRACE_FL_DISABLED = 33554432,
+	FTRACE_FL_DIRECT = 16777216,
+	FTRACE_FL_DIRECT_EN = 8388608,
+};
+
+struct dyn_ftrace {
+	long unsigned int ip;
+	long unsigned int flags;
+	struct dyn_arch_ftrace arch;
+};
+
+enum {
+	FTRACE_UPDATE_IGNORE = 0,
+	FTRACE_UPDATE_MAKE_CALL = 1,
+	FTRACE_UPDATE_MODIFY_CALL = 2,
+	FTRACE_UPDATE_MAKE_NOP = 3,
+};
+
+union ftrace_op_code_union {
+	char code[7];
+	struct {
+		char op[3];
+		int offset;
+	} __attribute__((packed));
+};
+
+struct ftrace_rec_iter;
+
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
+};
+
+struct freelist_head {
+	struct freelist_node *head;
+};
+
+struct rethook_node;
+
+typedef void (*rethook_handler_t)(struct rethook_node *, void *, struct pt_regs *);
+
+struct rethook;
+
+struct rethook_node {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct rethook *rethook;
+	long unsigned int ret_addr;
+	long unsigned int frame;
+};
+
+struct rethook {
+	void *data;
+	rethook_handler_t handler;
+	struct freelist_head pool;
+	refcount_t ref;
+	struct callback_head rcu;
+};
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+struct kimage_arch {
+	p4d_t *p4d;
+	pud_t *pud;
+	pmd_t *pmd;
+	pte_t *pte;
+};
+
+typedef long unsigned int kimage_entry_t;
+
+struct kexec_segment {
+	union {
+		void *buf;
+		void *kbuf;
+	};
+	size_t bufsz;
+	long unsigned int mem;
+	size_t memsz;
+};
+
+struct purgatory_info {
+	const Elf64_Ehdr *ehdr;
+	Elf64_Shdr *sechdrs;
+	void *purgatory_buf;
+};
+
+typedef int kexec_probe_t(const char *, long unsigned int);
+
+struct kimage;
+
+typedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);
+
+struct kexec_file_ops;
+
+struct kimage {
+	kimage_entry_t head;
+	kimage_entry_t *entry;
+	kimage_entry_t *last_entry;
+	long unsigned int start;
+	struct page *control_code_page;
+	struct page *swap_page;
+	void *vmcoreinfo_data_copy;
+	long unsigned int nr_segments;
+	struct kexec_segment segment[16];
+	struct list_head control_pages;
+	struct list_head dest_pages;
+	struct list_head unusable_pages;
+	long unsigned int control_page;
+	unsigned int type: 1;
+	unsigned int preserve_context: 1;
+	unsigned int file_mode: 1;
+	struct kimage_arch arch;
+	void *kernel_buf;
+	long unsigned int kernel_buf_len;
+	void *initrd_buf;
+	long unsigned int initrd_buf_len;
+	char *cmdline_buf;
+	long unsigned int cmdline_buf_len;
+	const struct kexec_file_ops *fops;
+	void *image_loader_data;
+	struct purgatory_info purgatory_info;
+	void *elf_headers;
+	long unsigned int elf_headers_sz;
+	long unsigned int elf_load_addr;
+};
+
+typedef int kexec_cleanup_t(void *);
+
+typedef int kexec_verify_sig_t(const char *, long unsigned int);
+
+struct kexec_file_ops {
+	kexec_probe_t *probe;
+	kexec_load_t *load;
+	kexec_cleanup_t *cleanup;
+	kexec_verify_sig_t *verify_sig;
+};
+
+struct x86_mapping_info {
+	void * (*alloc_pgt_page)(void *);
+	void *context;
+	long unsigned int page_flag;
+	long unsigned int offset;
+	bool direct_gbpages;
+	long unsigned int kernpg_flag;
+};
+
+struct init_pgtable_data {
+	struct x86_mapping_info *info;
+	pgd_t *level4p;
+};
+
+typedef void crash_vmclear_fn();
+
+struct kexec_buf {
+	struct kimage *image;
+	void *buffer;
+	long unsigned int bufsz;
+	long unsigned int mem;
+	long unsigned int memsz;
+	long unsigned int buf_align;
+	long unsigned int buf_min;
+	long unsigned int buf_max;
+	bool top_down;
+};
+
+struct crash_mem_range {
+	u64 start;
+	u64 end;
+};
+
+struct crash_mem {
+	unsigned int max_nr_ranges;
+	unsigned int nr_ranges;
+	struct crash_mem_range ranges[0];
+};
+
+struct crash_memmap_data {
+	struct boot_params *params;
+	unsigned int type;
+};
+
+struct kexec_entry64_regs {
+	uint64_t rax;
+	uint64_t rcx;
+	uint64_t rdx;
+	uint64_t rbx;
+	uint64_t rsp;
+	uint64_t rbp;
+	uint64_t rsi;
+	uint64_t rdi;
+	uint64_t r8;
+	uint64_t r9;
+	uint64_t r10;
+	uint64_t r11;
+	uint64_t r12;
+	uint64_t r13;
+	uint64_t r14;
+	uint64_t r15;
+	uint64_t rip;
+};
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+struct efi_setup_data {
+	u64 fw_vendor;
+	u64 __unused;
+	u64 tables;
+	u64 smbios;
+	u64 reserved[8];
+};
+
+struct bzimage64_data {
+	void *bootparams_buf;
+};
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	long unsigned int status;
+	long unsigned int old_flags;
+	long unsigned int saved_flags;
+};
+
+struct kprobe_ctlblk {
+	long unsigned int kprobe_status;
+	long unsigned int kprobe_old_flags;
+	long unsigned int kprobe_saved_flags;
+	struct prev_kprobe prev_kprobe;
+};
+
+struct kretprobe_blackpoint {
+	const char *name;
+	void *addr;
+};
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+struct __arch_relative_insn {
+	u8 op;
+	s32 raddr;
+} __attribute__((packed));
+
+struct arch_optimized_insn {
+	kprobe_opcode_t copied_insn[4];
+	kprobe_opcode_t *insn;
+	size_t size;
+};
+
+struct optimized_kprobe {
+	struct kprobe kp;
+	struct list_head list;
+	struct arch_optimized_insn optinsn;
+};
+
+enum regnames {
+	GDB_AX = 0,
+	GDB_BX = 1,
+	GDB_CX = 2,
+	GDB_DX = 3,
+	GDB_SI = 4,
+	GDB_DI = 5,
+	GDB_BP = 6,
+	GDB_SP = 7,
+	GDB_R8 = 8,
+	GDB_R9 = 9,
+	GDB_R10 = 10,
+	GDB_R11 = 11,
+	GDB_R12 = 12,
+	GDB_R13 = 13,
+	GDB_R14 = 14,
+	GDB_R15 = 15,
+	GDB_PC = 16,
+	GDB_PS = 17,
+	GDB_CS = 18,
+	GDB_SS = 19,
+	GDB_DS = 20,
+	GDB_ES = 21,
+	GDB_FS = 22,
+	GDB_GS = 23,
+};
+
+enum kgdb_bpstate {
+	BP_UNDEFINED = 0,
+	BP_REMOVED = 1,
+	BP_SET = 2,
+	BP_ACTIVE = 3,
+};
+
+struct kgdb_bkpt {
+	long unsigned int bpt_addr;
+	unsigned char saved_instr[1];
+	enum kgdb_bptype type;
+	enum kgdb_bpstate state;
+};
+
+struct dbg_reg_def_t {
+	char *name;
+	int size;
+	int offset;
+};
+
+struct hw_breakpoint {
+	unsigned int enabled;
+	long unsigned int addr;
+	int len;
+	int type;
+	struct perf_event **pev;
+};
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short int flags;
+	short int index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	long unsigned int dropped;
+	struct task_struct *thread;
+	bool blocked;
+	struct mutex lock;
+	void *data;
+	struct console *next;
+};
+
+struct hpet_data {
+	long unsigned int hd_phys_address;
+	void *hd_address;
+	short unsigned int hd_nirqs;
+	unsigned int hd_state;
+	unsigned int hd_irq[32];
+};
+
+typedef irqreturn_t (*rtc_irq_handler)(int, void *);
+
+enum hpet_mode {
+	HPET_MODE_UNUSED = 0,
+	HPET_MODE_LEGACY = 1,
+	HPET_MODE_CLOCKEVT = 2,
+	HPET_MODE_DEVICE = 3,
+};
+
+struct hpet_channel {
+	struct clock_event_device evt;
+	unsigned int num;
+	unsigned int cpu;
+	unsigned int irq;
+	unsigned int in_use;
+	enum hpet_mode mode;
+	unsigned int boot_cfg;
+	char name[10];
+	long: 48;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hpet_base {
+	unsigned int nr_channels;
+	unsigned int nr_clockevents;
+	unsigned int boot_cfg;
+	struct hpet_channel *channels;
+};
+
+union hpet_lock {
+	struct {
+		arch_spinlock_t lock;
+		u32 value;
+	};
+	u64 lockval;
+};
+
+struct amd_nb_bus_dev_range {
+	u8 bus;
+	u8 dev_base;
+	u8 dev_limit;
+};
+
+struct amd_northbridge_info {
+	u16 num;
+	u64 flags;
+	struct amd_northbridge *nb;
+};
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+struct kvm_steal_time {
+	__u64 steal;
+	__u32 version;
+	__u32 flags;
+	__u8 preempted;
+	__u8 u8_pad[3];
+	__u32 pad[11];
+};
+
+struct kvm_vcpu_pv_apf_data {
+	__u32 flags;
+	__u32 token;
+	__u8 pad[56];
+	__u32 enabled;
+};
+
+struct kvm_task_sleep_node {
+	struct hlist_node link;
+	struct swait_queue_head wq;
+	u32 token;
+	int cpu;
+};
+
+struct kvm_task_sleep_head {
+	raw_spinlock_t lock;
+	struct hlist_head list;
+};
+
+typedef struct ldttss_desc ldt_desc;
+
+typedef long unsigned int ulong;
+
+struct jailhouse_setup_data {
+	struct {
+		__u16 version;
+		__u16 compatible_version;
+	} hdr;
+	struct {
+		__u16 pm_timer_address;
+		__u16 num_cpus;
+		__u64 pci_mmconfig_base;
+		__u32 tsc_khz;
+		__u32 apic_khz;
+		__u8 standard_ioapic;
+		__u8 cpu_ids[255];
+	} __attribute__((packed)) v1;
+	struct {
+		__u32 flags;
+	} v2;
+} __attribute__((packed));
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	__u32 padding[5];
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct uart_port;
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
+	int (*poll_init)(struct uart_port *);
+	void (*poll_put_char)(struct uart_port *, unsigned char);
+	int (*poll_get_char)(struct uart_port *);
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+typedef unsigned int upf_t;
+
+typedef unsigned int upstat_t;
+
+struct gpio_desc;
+
+struct uart_state;
+
+struct uart_port {
+	spinlock_t lock;
+	long unsigned int iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	int hw_stopped;
+	unsigned int mctrl;
+	unsigned int timeout;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	long unsigned int sysrq;
+	unsigned int sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct gpio_desc *rs485_term_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct scan_area {
+	u64 addr;
+	u64 size;
+};
+
+struct uprobe_xol_ops;
+
+struct arch_uprobe {
+	union {
+		u8 insn[16];
+		u8 ixol[16];
+	};
+	const struct uprobe_xol_ops *ops;
+	union {
+		struct {
+			s32 offs;
+			u8 ilen;
+			u8 opc1;
+		} branch;
+		struct {
+			u8 fixups;
+			u8 ilen;
+		} defparam;
+		struct {
+			u8 reg_offset;
+			u8 ilen;
+		} push;
+	};
+};
+
+struct uprobe_xol_ops {
+	bool (*emulate)(struct arch_uprobe *, struct pt_regs *);
+	int (*pre_xol)(struct arch_uprobe *, struct pt_regs *);
+	int (*post_xol)(struct arch_uprobe *, struct pt_regs *);
+	void (*abort)(struct arch_uprobe *, struct pt_regs *);
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct psc_hdr {
+	u16 cur_entry;
+	u16 end_entry;
+	u32 reserved;
+};
+
+struct psc_entry {
+	u64 cur_page: 12;
+	u64 gfn: 40;
+	u64 operation: 4;
+	u64 pagesize: 1;
+	u64 reserved: 7;
+};
+
+struct snp_psc_desc {
+	struct psc_hdr hdr;
+	struct psc_entry entries[253];
+};
+
+enum es_result {
+	ES_OK = 0,
+	ES_UNSUPPORTED = 1,
+	ES_VMM_ERROR = 2,
+	ES_DECODE_FAILED = 3,
+	ES_EXCEPTION = 4,
+	ES_RETRY = 5,
+};
+
+struct cc_blob_sev_info {
+	u32 magic;
+	u16 version;
+	u16 reserved;
+	u64 secrets_phys;
+	u32 secrets_len;
+	u32 rsvd1;
+	u64 cpuid_phys;
+	u32 cpuid_len;
+	u32 rsvd2;
+};
+
+struct snp_req_data {
+	long unsigned int req_gpa;
+	long unsigned int resp_gpa;
+	long unsigned int data_gpa;
+	unsigned int data_npages;
+};
+
+struct sev_guest_platform_data {
+	u64 secrets_gpa;
+};
+
+struct secrets_os_area {
+	u32 msg_seqno_0;
+	u32 msg_seqno_1;
+	u32 msg_seqno_2;
+	u32 msg_seqno_3;
+	u64 ap_jump_table_pa;
+	u8 rsvd[40];
+	u8 guest_usage[32];
+};
+
+struct snp_secrets_page_layout {
+	u32 version;
+	u32 imien: 1;
+	u32 rsvd1: 31;
+	u32 fms;
+	u32 rsvd2;
+	u8 gosvw[16];
+	u8 vmpck0[32];
+	u8 vmpck1[32];
+	u8 vmpck2[32];
+	u8 vmpck3[32];
+	struct secrets_os_area os_area;
+	u8 rsvd3[3840];
+};
+
+enum mmio_type {
+	MMIO_DECODE_FAILED = 0,
+	MMIO_WRITE = 1,
+	MMIO_WRITE_IMM = 2,
+	MMIO_READ = 3,
+	MMIO_READ_ZERO_EXTEND = 4,
+	MMIO_READ_SIGN_EXTEND = 5,
+	MMIO_MOVS = 6,
+};
+
+struct vmcb_seg {
+	u16 selector;
+	u16 attrib;
+	u32 limit;
+	u64 base;
+};
+
+struct sev_es_save_area {
+	struct vmcb_seg es;
+	struct vmcb_seg cs;
+	struct vmcb_seg ss;
+	struct vmcb_seg ds;
+	struct vmcb_seg fs;
+	struct vmcb_seg gs;
+	struct vmcb_seg gdtr;
+	struct vmcb_seg ldtr;
+	struct vmcb_seg idtr;
+	struct vmcb_seg tr;
+	u64 vmpl0_ssp;
+	u64 vmpl1_ssp;
+	u64 vmpl2_ssp;
+	u64 vmpl3_ssp;
+	u64 u_cet;
+	u8 reserved_1[2];
+	u8 vmpl;
+	u8 cpl;
+	u8 reserved_2[4];
+	u64 efer;
+	u8 reserved_3[104];
+	u64 xss;
+	u64 cr4;
+	u64 cr3;
+	u64 cr0;
+	u64 dr7;
+	u64 dr6;
+	u64 rflags;
+	u64 rip;
+	u64 dr0;
+	u64 dr1;
+	u64 dr2;
+	u64 dr3;
+	u64 dr0_addr_mask;
+	u64 dr1_addr_mask;
+	u64 dr2_addr_mask;
+	u64 dr3_addr_mask;
+	u8 reserved_4[24];
+	u64 rsp;
+	u64 s_cet;
+	u64 ssp;
+	u64 isst_addr;
+	u64 rax;
+	u64 star;
+	u64 lstar;
+	u64 cstar;
+	u64 sfmask;
+	u64 kernel_gs_base;
+	u64 sysenter_cs;
+	u64 sysenter_esp;
+	u64 sysenter_eip;
+	u64 cr2;
+	u8 reserved_5[32];
+	u64 g_pat;
+	u64 dbgctl;
+	u64 br_from;
+	u64 br_to;
+	u64 last_excp_from;
+	u64 last_excp_to;
+	u8 reserved_7[80];
+	u32 pkru;
+	u8 reserved_8[20];
+	u64 reserved_9;
+	u64 rcx;
+	u64 rdx;
+	u64 rbx;
+	u64 reserved_10;
+	u64 rbp;
+	u64 rsi;
+	u64 rdi;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u8 reserved_11[16];
+	u64 guest_exit_info_1;
+	u64 guest_exit_info_2;
+	u64 guest_exit_int_info;
+	u64 guest_nrip;
+	u64 sev_features;
+	u64 vintr_ctrl;
+	u64 guest_exit_code;
+	u64 virtual_tom;
+	u64 tlb_id;
+	u64 pcpu_id;
+	u64 event_inj;
+	u64 xcr0;
+	u8 reserved_12[16];
+	u64 x87_dp;
+	u32 mxcsr;
+	u16 x87_ftw;
+	u16 x87_fsw;
+	u16 x87_fcw;
+	u16 x87_fop;
+	u16 x87_ds;
+	u16 x87_cs;
+	u64 x87_rip;
+	u8 fpreg_x87[80];
+	u8 fpreg_xmm[256];
+	u8 fpreg_ymm[256];
+};
+
+struct sev_es_runtime_data {
+	struct ghcb ghcb_page;
+	struct ghcb backup_ghcb;
+	bool ghcb_active;
+	bool backup_ghcb_active;
+	long unsigned int dr7;
+};
+
+struct ghcb_state {
+	struct ghcb *ghcb;
+};
+
+struct sev_config {
+	__u64 debug: 1;
+	__u64 __reserved: 63;
+};
+
+struct cpuid_leaf {
+	u32 fn;
+	u32 subfn;
+	u32 eax;
+	u32 ebx;
+	u32 ecx;
+	u32 edx;
+};
+
+struct snp_cpuid_fn {
+	u32 eax_in;
+	u32 ecx_in;
+	u64 xcr0_in;
+	u64 xss_in;
+	u32 eax;
+	u32 ebx;
+	u32 ecx;
+	u32 edx;
+	u64 __reserved;
+};
+
+struct snp_cpuid_table {
+	u32 count;
+	u32 __reserved1;
+	u64 __reserved2;
+	struct snp_cpuid_fn fn[64];
+};
+
+struct cc_setup_data {
+	struct setup_data header;
+	u32 cc_blob_address;
+};
+
+enum auditsc_class_t {
+	AUDITSC_NATIVE = 0,
+	AUDITSC_COMPAT = 1,
+	AUDITSC_OPEN = 2,
+	AUDITSC_OPENAT = 3,
+	AUDITSC_SOCKETCALL = 4,
+	AUDITSC_EXECVE = 5,
+	AUDITSC_OPENAT2 = 6,
+	AUDITSC_NVALS = 7,
+};
+
+enum chipset_type {
+	NOT_SUPPORTED = 0,
+	SUPPORTED = 1,
+};
+
+struct agp_version {
+	u16 major;
+	u16 minor;
+};
+
+struct agp_kern_info {
+	struct agp_version version;
+	struct pci_dev *device;
+	enum chipset_type chipset;
+	long unsigned int mode;
+	long unsigned int aper_base;
+	size_t aper_size;
+	int max_memory;
+	int current_memory;
+	bool cant_use_aperture;
+	long unsigned int page_mask;
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct agp_bridge_data;
+
+struct pci_hostbridge_probe {
+	u32 bus;
+	u32 slot;
+	u32 vendor;
+	u32 device;
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+struct map_range {
+	long unsigned int start;
+	long unsigned int end;
+	unsigned int page_size_mask;
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+struct mem_section_usage {
+	long unsigned int subsection_map[1];
+	long unsigned int pageblock_flags[0];
+};
+
+struct mem_section {
+	long unsigned int section_mem_map;
+	struct mem_section_usage *usage;
+};
+
+enum kcore_type {
+	KCORE_TEXT = 0,
+	KCORE_VMALLOC = 1,
+	KCORE_RAM = 2,
+	KCORE_VMEMMAP = 3,
+	KCORE_USER = 4,
+};
+
+struct kcore_list {
+	struct list_head list;
+	long unsigned int addr;
+	size_t size;
+	int type;
+};
+
+enum {
+	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
+	SECTION_INFO = 12,
+	MIX_SECTION_INFO = 13,
+	NODE_INFO = 14,
+	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
+};
+
+struct hstate {
+	struct mutex resize_lock;
+	int next_nid_to_alloc;
+	int next_nid_to_free;
+	unsigned int order;
+	unsigned int demote_order;
+	long unsigned int mask;
+	long unsigned int max_huge_pages;
+	long unsigned int nr_huge_pages;
+	long unsigned int free_huge_pages;
+	long unsigned int resv_huge_pages;
+	long unsigned int surplus_huge_pages;
+	long unsigned int nr_overcommit_huge_pages;
+	struct list_head hugepage_activelist;
+	struct list_head hugepage_freelists[1024];
+	unsigned int max_huge_pages_node[1024];
+	unsigned int nr_huge_pages_node[1024];
+	unsigned int free_huge_pages_node[1024];
+	unsigned int surplus_huge_pages_node[1024];
+	unsigned int optimize_vmemmap_pages;
+	struct cftype cgroup_files_dfl[8];
+	struct cftype cgroup_files_legacy[10];
+	char name[32];
+};
+
+struct trace_event_raw_x86_exceptions {
+	struct trace_entry ent;
+	long unsigned int address;
+	long unsigned int ip;
+	long unsigned int error_code;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_x86_exceptions {};
+
+typedef void (*btf_trace_page_fault_user)(void *, long unsigned int, struct pt_regs *, long unsigned int);
+
+typedef void (*btf_trace_page_fault_kernel)(void *, long unsigned int, struct pt_regs *, long unsigned int);
+
+enum {
+	IORES_MAP_SYSTEM_RAM = 1,
+	IORES_MAP_ENCRYPTED = 2,
+};
+
+struct ioremap_desc {
+	unsigned int flags;
+};
+
+struct hugepage_subpool {
+	spinlock_t lock;
+	long int count;
+	long int max_hpages;
+	long int used_hpages;
+	struct hstate *hstate;
+	long int min_hpages;
+	long int rsv_hpages;
+};
+
+struct hugetlbfs_sb_info {
+	long int max_inodes;
+	long int free_inodes;
+	spinlock_t stat_lock;
+	struct hstate *hstate;
+	struct hugepage_subpool *spool;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+};
+
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
+};
+
+struct entry_stack_page {
+	struct entry_stack stack;
+};
+
+struct debug_store_buffers {
+	char bts_buffer[65536];
+	char pebs_buffer[65536];
+};
+
+struct exception_stacks {
+	char DF_stack_guard[0];
+	char DF_stack[8192];
+	char NMI_stack_guard[0];
+	char NMI_stack[8192];
+	char DB_stack_guard[0];
+	char DB_stack[8192];
+	char MCE_stack_guard[0];
+	char MCE_stack[8192];
+	char VC_stack_guard[0];
+	char VC_stack[8192];
+	char VC2_stack_guard[0];
+	char VC2_stack[8192];
+	char IST_top_guard[0];
+};
+
+struct cpu_entry_area {
+	char gdt[4096];
+	struct entry_stack_page entry_stack_page;
+	struct tss_struct tss;
+	struct cea_exception_stacks estacks;
+	struct debug_store cpu_debug_store;
+	struct debug_store_buffers cpu_debug_buffers;
+};
+
+struct vm_event_state {
+	long unsigned int event[107];
+};
+
+struct cpa_data {
+	long unsigned int *vaddr;
+	pgd_t *pgd;
+	pgprot_t mask_set;
+	pgprot_t mask_clr;
+	long unsigned int numpages;
+	long unsigned int curpage;
+	long unsigned int pfn;
+	unsigned int flags;
+	unsigned int force_split: 1;
+	unsigned int force_static_prot: 1;
+	unsigned int force_flush_all: 1;
+	struct page **pages;
+};
+
+enum cpa_warn {
+	CPA_CONFLICT = 0,
+	CPA_PROTECT = 1,
+	CPA_DETECT = 2,
+};
+
+typedef struct {
+	u64 val;
+} pfn_t;
+
+struct memtype {
+	u64 start;
+	u64 end;
+	u64 subtree_max_end;
+	enum page_cache_mode type;
+	struct rb_node rb;
+};
+
+enum {
+	PAT_UC = 0,
+	PAT_WC = 1,
+	PAT_WT = 4,
+	PAT_WP = 5,
+	PAT_WB = 6,
+	PAT_UC_MINUS = 7,
+};
+
+struct pagerange_state {
+	long unsigned int cur_pfn;
+	int ram;
+	int not_ram;
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+enum {
+	MEMTYPE_EXACT_MATCH = 0,
+	MEMTYPE_END_MATCH = 1,
+};
+
+struct ptdump_range {
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct ptdump_state {
+	void (*note_page)(struct ptdump_state *, long unsigned int, int, u64);
+	void (*effective_prot)(struct ptdump_state *, int, u64);
+	const struct ptdump_range *range;
+};
+
+struct addr_marker;
+
+struct pg_state {
+	struct ptdump_state ptdump;
+	int level;
+	pgprotval_t current_prot;
+	pgprotval_t effective_prot;
+	pgprotval_t prot_levels[5];
+	long unsigned int start_address;
+	const struct addr_marker *marker;
+	long unsigned int lines;
+	bool to_dmesg;
+	bool check_wx;
+	long unsigned int wx_pages;
+	struct seq_file *seq;
+};
+
+struct addr_marker {
+	long unsigned int start_address;
+	const char *name;
+	long unsigned int max_lines;
+};
+
+enum address_markers_idx {
+	USER_SPACE_NR = 0,
+	KERNEL_SPACE_NR = 1,
+	LDT_NR = 2,
+	LOW_KERNEL_NR = 3,
+	VMALLOC_START_NR = 4,
+	VMEMMAP_START_NR = 5,
+	CPU_ENTRY_AREA_NR = 6,
+	ESPFIX_START_NR = 7,
+	EFI_END_NR = 8,
+	HIGH_KERNEL_NR = 9,
+	MODULES_VADDR_NR = 10,
+	MODULES_END_NR = 11,
+	FIXADDR_START_NR = 12,
+	END_OF_SPACE_NR = 13,
+};
+
+struct kmmio_probe;
+
+typedef void (*kmmio_pre_handler_t)(struct kmmio_probe *, struct pt_regs *, long unsigned int);
+
+typedef void (*kmmio_post_handler_t)(struct kmmio_probe *, long unsigned int, struct pt_regs *);
+
+struct kmmio_probe {
+	struct list_head list;
+	long unsigned int addr;
+	long unsigned int len;
+	kmmio_pre_handler_t pre_handler;
+	kmmio_post_handler_t post_handler;
+	void *private;
+};
+
+struct kmmio_fault_page {
+	struct list_head list;
+	struct kmmio_fault_page *release_next;
+	long unsigned int addr;
+	pteval_t old_presence;
+	bool armed;
+	int count;
+	bool scheduled_for_release;
+};
+
+struct kmmio_delayed_release {
+	struct callback_head rcu;
+	struct kmmio_fault_page *release_list;
+};
+
+struct kmmio_context {
+	struct kmmio_fault_page *fpage;
+	struct kmmio_probe *probe;
+	long unsigned int saved_flags;
+	long unsigned int addr;
+	int active;
+};
+
+enum reason_type {
+	NOT_ME = 0,
+	NOTHING = 1,
+	REG_READ = 2,
+	REG_WRITE = 3,
+	IMM_WRITE = 4,
+	OTHERS = 5,
+};
+
+struct prefix_bits {
+	unsigned int shorted: 1;
+	unsigned int enlarged: 1;
+	unsigned int rexr: 1;
+	unsigned int rex: 1;
+};
+
+enum {
+	arg_AL = 0,
+	arg_CL = 1,
+	arg_DL = 2,
+	arg_BL = 3,
+	arg_AH = 4,
+	arg_CH = 5,
+	arg_DH = 6,
+	arg_BH = 7,
+	arg_AX = 0,
+	arg_CX = 1,
+	arg_DX = 2,
+	arg_BX = 3,
+	arg_SP = 4,
+	arg_BP = 5,
+	arg_SI = 6,
+	arg_DI = 7,
+	arg_R8 = 8,
+	arg_R9 = 9,
+	arg_R10 = 10,
+	arg_R11 = 11,
+	arg_R12 = 12,
+	arg_R13 = 13,
+	arg_R14 = 14,
+	arg_R15 = 15,
+};
+
+enum mm_io_opcode {
+	MMIO_READ___2 = 1,
+	MMIO_WRITE___2 = 2,
+	MMIO_PROBE = 3,
+	MMIO_UNPROBE = 4,
+	MMIO_UNKNOWN_OP = 5,
+};
+
+struct mmiotrace_rw {
+	resource_size_t phys;
+	long unsigned int value;
+	long unsigned int pc;
+	int map_id;
+	unsigned char opcode;
+	unsigned char width;
+};
+
+struct mmiotrace_map {
+	resource_size_t phys;
+	long unsigned int virt;
+	long unsigned int len;
+	int map_id;
+	unsigned char opcode;
+};
+
+struct trap_reason {
+	long unsigned int addr;
+	long unsigned int ip;
+	enum reason_type type;
+	int active_traces;
+};
+
+struct remap_trace {
+	struct list_head list;
+	struct kmmio_probe probe;
+	resource_size_t phys;
+	long unsigned int id;
+};
+
+struct numa_memblk {
+	u64 start;
+	u64 end;
+	int nid;
+};
+
+struct numa_meminfo {
+	int nr_blks;
+	struct numa_memblk blk[2048];
+};
+
+struct acpi_srat_cpu_affinity {
+	struct acpi_subtable_header header;
+	u8 proximity_domain_lo;
+	u8 apic_id;
+	u32 flags;
+	u8 local_sapic_eid;
+	u8 proximity_domain_hi[3];
+	u32 clock_domain;
+};
+
+struct acpi_srat_x2apic_cpu_affinity {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 proximity_domain;
+	u32 apic_id;
+	u32 flags;
+	u32 clock_domain;
+	u32 reserved2;
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct kaslr_memory_region {
+	long unsigned int *base;
+	long unsigned int size_tb;
+};
+
+enum pti_mode {
+	PTI_AUTO = 0,
+	PTI_FORCE_OFF = 1,
+	PTI_FORCE_ON = 2,
+};
+
+enum pti_clone_level {
+	PTI_CLONE_PMD = 0,
+	PTI_CLONE_PTE = 1,
+};
+
+struct sme_populate_pgd_data {
+	void *pgtable_area;
+	pgd_t *pgd;
+	pmdval_t pmd_flags;
+	pteval_t pte_flags;
+	long unsigned int paddr;
+	long unsigned int vaddr;
+	long unsigned int vaddr_end;
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	void *__ctx[0];
+};
+
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
+};
+
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	unsigned int descsize;
+	int: 32;
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct sigcontext_32 {
+	__u16 gs;
+	__u16 __gsh;
+	__u16 fs;
+	__u16 __fsh;
+	__u16 es;
+	__u16 __esh;
+	__u16 ds;
+	__u16 __dsh;
+	__u32 di;
+	__u32 si;
+	__u32 bp;
+	__u32 sp;
+	__u32 bx;
+	__u32 dx;
+	__u32 cx;
+	__u32 ax;
+	__u32 trapno;
+	__u32 err;
+	__u32 ip;
+	__u16 cs;
+	__u16 __csh;
+	__u32 flags;
+	__u32 sp_at_signal;
+	__u16 ss;
+	__u16 __ssh;
+	__u32 fpstate;
+	__u32 oldmask;
+	__u32 cr2;
+};
+
+typedef u32 compat_size_t;
+
+struct compat_sigaltstack {
+	compat_uptr_t ss_sp;
+	int ss_flags;
+	compat_size_t ss_size;
+};
+
+typedef struct compat_sigaltstack compat_stack_t;
+
+struct ucontext_ia32 {
+	unsigned int uc_flags;
+	unsigned int uc_link;
+	compat_stack_t uc_stack;
+	struct sigcontext_32 uc_mcontext;
+	compat_sigset_t uc_sigmask;
+};
+
+struct sigframe_ia32 {
+	u32 pretcode;
+	int sig;
+	struct sigcontext_32 sc;
+	struct _fpstate_32 fpstate_unused;
+	unsigned int extramask[1];
+	char retcode[8];
+};
+
+struct rt_sigframe_ia32 {
+	u32 pretcode;
+	int sig;
+	u32 pinfo;
+	u32 puc;
+	compat_siginfo_t info;
+	struct ucontext_ia32 uc;
+	char retcode[8];
+};
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	long unsigned int size;
+	long unsigned int desc_version;
+	long unsigned int desc_size;
+	long unsigned int flags;
+};
+
+struct efi_mem_range {
+	struct range range;
+	u64 attribute;
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+};
+
+struct efi_runtime_work {
+	void *arg1;
+	void *arg2;
+	void *arg3;
+	void *arg4;
+	void *arg5;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+};
+
+typedef struct {
+	efi_guid_t guid;
+	long unsigned int *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u64 fw_vendor;
+	u32 fw_revision;
+	u32 __pad1;
+	u64 con_in_handle;
+	u64 con_in;
+	u64 con_out_handle;
+	u64 con_out;
+	u64 stderr_handle;
+	u64 stderr;
+	u64 runtime;
+	u64 boottime;
+	u32 nr_tables;
+	u32 __pad2;
+	u64 tables;
+} efi_system_table_64_t;
+
+typedef struct {
+	u32 version;
+	u32 length;
+	u64 memory_protection_attribute;
+} efi_properties_table_t;
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum uv_bios_cmd {
+	UV_BIOS_COMMON = 0,
+	UV_BIOS_GET_SN_INFO = 1,
+	UV_BIOS_FREQ_BASE = 2,
+	UV_BIOS_WATCHLIST_ALLOC = 3,
+	UV_BIOS_WATCHLIST_FREE = 4,
+	UV_BIOS_MEMPROTECT = 5,
+	UV_BIOS_GET_PARTITION_ADDR = 6,
+	UV_BIOS_SET_LEGACY_VGA_TARGET = 7,
+};
+
+union partition_info_u {
+	u64 val;
+	struct {
+		u64 hub_version: 8;
+		u64 partition_id: 16;
+		u64 coherence_id: 16;
+		u64 region_size: 24;
+	};
+};
+
+enum uv_memprotect {
+	UV_MEMPROT_RESTRICT_ACCESS = 0,
+	UV_MEMPROT_ALLOW_AMO = 1,
+	UV_MEMPROT_ALLOW_RW = 2,
+};
+
+struct uv_IO_APIC_route_entry {
+	__u64 vector: 8;
+	__u64 delivery_mode: 3;
+	__u64 dest_mode: 1;
+	__u64 delivery_status: 1;
+	__u64 polarity: 1;
+	__u64 __reserved_1: 1;
+	__u64 trigger: 1;
+	__u64 mask: 1;
+	__u64 __reserved_2: 15;
+	__u64 dest: 32;
+};
+
+enum {
+	UV_AFFINITY_ALL = 0,
+	UV_AFFINITY_NODE = 1,
+	UV_AFFINITY_CPU = 2,
+};
+
+struct uv_irq_2_mmr_pnode {
+	long unsigned int offset;
+	int pnode;
+};
+
+struct uv_rtc_timer_head {
+	spinlock_t lock;
+	int next_cpu;
+	int ncpus;
+	struct {
+		int lcpu;
+		u64 expires;
+	} cpu[0];
+};
+
+struct uv_hub_nmi_s {
+	raw_spinlock_t nmi_lock;
+	atomic_t in_nmi;
+	atomic_t cpu_owner;
+	atomic_t read_mmr_count;
+	atomic_t nmi_count;
+	long unsigned int nmi_value;
+	bool hub_present;
+	bool pch_owner;
+};
+
+struct uv_cpu_nmi_s {
+	struct uv_hub_nmi_s *hub;
+	int state;
+	int pinging;
+	int queries;
+	int pings;
+};
+
+struct nmi_action {
+	char *action;
+	char *desc;
+};
+
+typedef char action_t[16];
+
+struct init_nmi {
+	unsigned int offset;
+	unsigned int mask;
+	unsigned int data;
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	__MAX_BPF_ATTACH_TYPE = 43,
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+struct bpf_prog_stats;
+
+struct bpf_prog_aux;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats *stats;
+	int *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	union {
+		struct {
+			struct {			} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {			} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short int cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+struct net_rate_estimator;
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator *rate_est;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	long unsigned int state;
+	long unsigned int state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long int privdata[0];
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+};
+
+struct bpf_map_ops;
+
+struct bpf_map_value_off;
+
+struct btf;
+
+struct bpf_map_off_arr;
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	void *security;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	int spin_lock_off;
+	struct bpf_map_value_off *kptr_off_tab;
+	int timer_off;
+	u32 id;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct mem_cgroup *memcg;
+	char name[16];
+	struct bpf_map_off_arr *off_arr;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	struct work_struct work;
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	long: 16;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_map_dev_ops;
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcf_proto;
+
+struct tcf_block;
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_queue *cpu_qstats;
+	long unsigned int rcu_state;
+};
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	MAX_BPF_LINK_TYPE = 10,
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+	};
+	struct {
+		__u32 target_fd;
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		__u32 target_fd;
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		__u32 prog_cnt;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		__u32 prog_fd;
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		__u32 new_prog_fd;
+		__u32 flags;
+		__u32 old_prog_fd;
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+	};
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+};
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct bpf_local_storage_map;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	int (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_map *, void *);
+	int (*map_push_elem)(struct bpf_map *, void *, u64);
+	int (*map_pop_elem)(struct bpf_map *, void *);
+	int (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(void *);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage ** (*map_owner_storage_ptr)(void *);
+	int (*map_redirect)(struct bpf_map *, u32, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+};
+
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
+};
+
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
+};
+
+struct bpf_ksym {
+	long unsigned int start;
+	long unsigned int end;
+	char name[128];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
+};
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info_aux;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	bool use_bpf_prog_pack;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	void *security;
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+};
+
+enum bpf_kptr_type {
+	BPF_KPTR_UNREF = 0,
+	BPF_KPTR_REF = 1,
+};
+
+struct bpf_map_value_off_desc {
+	u32 offset;
+	enum bpf_kptr_type type;
+	struct {
+		struct btf *btf;
+		struct module *module;
+		btf_dtor_kfunc_t dtor;
+		u32 btf_id;
+	} kptr;
+};
+
+struct bpf_map_value_off {
+	u32 nr_off;
+	struct bpf_map_value_off_desc off[0];
+};
+
+struct bpf_map_off_arr {
+	u32 cnt;
+	u32 field_off[10];
+	u8 field_sz[10];
+};
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 nr_args;
+	u8 arg_size[12];
+};
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	struct work_struct work;
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	u64 selector;
+	struct module *mod;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+};
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		char value[0];
+		void *ptrs[0];
+		void *pptrs[0];
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	short unsigned int tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+enum flow_action_hw_stats_bit {
+	FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,
+	FLOW_ACTION_HW_STATS_DELAYED_BIT = 1,
+	FLOW_ACTION_HW_STATS_DISABLED_BIT = 2,
+	FLOW_ACTION_HW_STATS_NUM_BITS = 3,
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct Qdisc_class_ops;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+};
+
+struct qdisc_walker;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);
+	void (*qlen_notify)(struct Qdisc *, long unsigned int);
+	long unsigned int (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);
+	long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);
+	void (*unbind_tcf)(struct Qdisc *, long unsigned int);
+	int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_result;
+
+struct tcf_proto_ops;
+
+struct tcf_proto {
+	struct tcf_proto *next;
+	void *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			long unsigned int class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+		struct {
+			bool ingress;
+			struct gnet_stats_queue *qstats;
+		};
+	};
+};
+
+struct tcf_walker;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	int: 32;
+	u8 image[0];
+};
+
+struct jit_context {
+	int cleanup_addr;
+	int tail_call_direct_label;
+	int tail_call_indirect_label;
+};
+
+struct x64_jit_data {
+	struct bpf_binary_header *rw_header;
+	struct bpf_binary_header *header;
+	int *addrs;
+	u8 *image;
+	int proglen;
+	struct jit_context ctx;
 };
 
 enum tk_offsets {
@@ -20658,30 +30685,6 @@
 	long: 64;
 };
 
-struct io_identity {
-	struct files_struct *files;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *creds;
-	struct nsproxy *nsproxy;
-	struct fs_struct *fs;
-	long unsigned int fsize;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	refcount_t count;
-};
-
-struct io_uring_task {
-	struct xarray xa;
-	struct wait_queue_head wait;
-	struct file *last;
-	struct percpu_counter inflight;
-	struct io_identity __identity;
-	struct io_identity *identity;
-	atomic_t in_idle;
-	bool sqpoll;
-};
-
 struct robust_list {
 	struct robust_list *next;
 };
@@ -20692,22 +30695,6 @@
 	struct robust_list *list_op_pending;
 };
 
-struct kernel_clone_args {
-	u64 flags;
-	int *pidfd;
-	int *child_tid;
-	int *parent_tid;
-	int exit_signal;
-	long unsigned int stack;
-	long unsigned int stack_size;
-	long unsigned int tls;
-	pid_t *set_tid;
-	size_t set_tid_size;
-	int cgroup;
-	struct cgroup *cgrp;
-	struct css_set *cset;
-};
-
 struct multiprocess_signals {
 	sigset_t signal;
 	struct hlist_node node;
@@ -20715,11 +30702,13 @@
 
 typedef int (*proc_visitor)(struct task_struct *, void *);
 
-enum {
-	IOPRIO_CLASS_NONE = 0,
-	IOPRIO_CLASS_RT = 1,
-	IOPRIO_CLASS_BE = 2,
-	IOPRIO_CLASS_IDLE = 3,
+struct io_uring_cmd {
+	struct file *file;
+	const void *cmd;
+	void (*task_work_cb)(struct io_uring_cmd *);
+	u32 cmd_op;
+	u32 pad;
+	u8 pdu[32];
 };
 
 enum {
@@ -20775,6 +30764,11 @@
 
 typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
 
+struct vm_stack {
+	struct callback_head rcu;
+	struct vm_struct *stack_vm_area;
+};
+
 struct taint_flag {
 	char c_true;
 	char c_false;
@@ -20801,29 +30795,28 @@
 	CONSOLE_REPLAY_ALL = 1,
 };
 
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
 struct warn_args {
 	const char *fmt;
 	va_list args;
 };
 
-enum hk_flags {
-	HK_FLAG_TIMER = 1,
-	HK_FLAG_RCU = 2,
-	HK_FLAG_MISC = 4,
-	HK_FLAG_SCHED = 8,
-	HK_FLAG_TICK = 16,
-	HK_FLAG_DOMAIN = 32,
-	HK_FLAG_WQ = 64,
-	HK_FLAG_MANAGED_IRQ = 128,
-	HK_FLAG_KTHREAD = 256,
-};
-
-enum cpuhp_smt_control {
-	CPU_SMT_ENABLED = 0,
-	CPU_SMT_DISABLED = 1,
-	CPU_SMT_FORCE_DISABLED = 2,
-	CPU_SMT_NOT_SUPPORTED = 3,
-	CPU_SMT_NOT_IMPLEMENTED = 4,
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
 };
 
 struct smp_hotplug_thread {
@@ -20946,8 +30939,6 @@
 	__kernel_long_t ru_nivcsw;
 };
 
-typedef u32 compat_uint_t;
-
 struct compat_rusage {
 	struct old_timeval32 ru_utime;
 	struct old_timeval32 ru_stime;
@@ -20985,17 +30976,10 @@
 	int notask_error;
 };
 
-typedef struct {
-	unsigned int __softirq_pending;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-} irq_cpustat_t;
+struct trace_print_flags {
+	long unsigned int mask;
+	const char *name;
+};
 
 struct softirq_action {
 	void (*action)(struct softirq_action *);
@@ -21023,6 +31007,17 @@
 	unsigned int softirqs[10];
 };
 
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	long unsigned int timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
 struct trace_event_raw_irq_handler_entry {
 	struct trace_entry ent;
 	int irq;
@@ -21066,24 +31061,11 @@
 	struct tasklet_struct **tail;
 };
 
-enum {
-	IORES_DESC_NONE = 0,
-	IORES_DESC_CRASH_KERNEL = 1,
-	IORES_DESC_ACPI_TABLES = 2,
-	IORES_DESC_ACPI_NV_STORAGE = 3,
-	IORES_DESC_PERSISTENT_MEMORY = 4,
-	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
-	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
-	IORES_DESC_RESERVED = 7,
-	IORES_DESC_SOFT_RESERVED = 8,
-};
-
-typedef void (*dr_release_t)(struct device *, void *);
-
-enum {
-	REGION_INTERSECTS = 0,
-	REGION_DISJOINT = 1,
-	REGION_MIXED = 2,
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
 };
 
 struct resource_constraint {
@@ -21104,32 +31086,10 @@
 	resource_size_t n;
 };
 
-struct dentry_stat_t {
-	long int nr_dentry;
-	long int nr_unused;
-	long int age_limit;
-	long int want_pages;
-	long int nr_negative;
-	long int dummy;
-};
-
-struct files_stat_struct {
-	long unsigned int nr_files;
-	long unsigned int nr_free_files;
-	long unsigned int max_files;
-};
-
-struct inodes_stat_t {
-	long int nr_inodes;
-	long int nr_unused;
-	long int dummy[5];
-};
-
-enum sched_tunable_scaling {
-	SCHED_TUNABLESCALING_NONE = 0,
-	SCHED_TUNABLESCALING_LOG = 1,
-	SCHED_TUNABLESCALING_LINEAR = 2,
-	SCHED_TUNABLESCALING_END = 3,
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
 };
 
 enum sysctl_writes_mode {
@@ -21163,13 +31123,11 @@
 
 typedef struct __user_cap_data_struct *cap_user_data_t;
 
-typedef struct siginfo siginfo_t;
-
 struct sigqueue {
 	struct list_head list;
 	int flags;
 	kernel_siginfo_t info;
-	struct user_struct *user;
+	struct ucounts *ucounts;
 };
 
 struct ptrace_peeksiginfo_args {
@@ -21201,15 +31159,66 @@
 	};
 };
 
+struct ptrace_rseq_configuration {
+	__u64 rseq_abi_pointer;
+	__u32 rseq_abi_size;
+	__u32 signature;
+	__u32 flags;
+	__u32 pad;
+};
+
 struct compat_iovec {
 	compat_uptr_t iov_base;
 	compat_size_t iov_len;
 };
 
-typedef struct compat_siginfo compat_siginfo_t;
-
 typedef long unsigned int old_sigset_t;
 
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+struct core_vma_metadata;
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct pt_regs *regs;
+	struct file *file;
+	long unsigned int limit;
+	long unsigned int mm_flags;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct core_vma_metadata {
+	long unsigned int start;
+	long unsigned int end;
+	long unsigned int flags;
+	long unsigned int dump_size;
+	long unsigned int pgoff;
+	struct file *file;
+};
+
 typedef u32 compat_old_sigset_t;
 
 struct compat_sigaction {
@@ -21264,6 +31273,12 @@
 
 typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
 
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
 typedef __kernel_clock_t clock_t;
 
 struct sysinfo {
@@ -21283,11 +31298,53 @@
 	char _f[0];
 };
 
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
 struct rlimit64 {
 	__u64 rlim_cur;
 	__u64 rlim_max;
 };
 
+struct oldold_utsname {
+	char sysname[9];
+	char nodename[9];
+	char release[9];
+	char version[9];
+	char machine[9];
+};
+
+struct old_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+};
+
 enum uts_proc {
 	UTS_PROC_OSTYPE = 0,
 	UTS_PROC_OSRELEASE = 1,
@@ -21425,8 +31482,6 @@
 	WQ_DFL_ACTIVE = 256,
 };
 
-typedef unsigned int xa_mark_t;
-
 enum xa_lock_type {
 	XA_LOCK_IRQ = 1,
 	XA_LOCK_BH = 2,
@@ -21450,6 +31505,7 @@
 	struct work_struct *current_work;
 	work_func_t current_func;
 	struct pool_workqueue *current_pwq;
+	unsigned int current_color;
 	struct list_head scheduled;
 	struct task_struct *task;
 	struct worker_pool *pool;
@@ -21469,10 +31525,10 @@
 	int work_color;
 	int flush_color;
 	int refcnt;
-	int nr_in_flight[15];
+	int nr_in_flight[16];
 	int nr_active;
 	int max_active;
-	struct list_head delayed_works;
+	struct list_head inactive_works;
 	struct list_head pwqs_node;
 	struct list_head mayday_node;
 	struct work_struct unbound_release_work;
@@ -21484,7 +31540,6 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
 };
 
 struct worker_pool {
@@ -21494,6 +31549,7 @@
 	int id;
 	unsigned int flags;
 	long unsigned int watchdog_ts;
+	int nr_running;
 	struct list_head worklist;
 	int nr_workers;
 	int nr_idle;
@@ -21508,17 +31564,7 @@
 	struct workqueue_attrs *attrs;
 	struct hlist_node hash_node;
 	int refcnt;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	atomic_t nr_running;
 	struct callback_head rcu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 };
 
 enum {
@@ -21535,10 +31581,10 @@
 	UNBOUND_POOL_HASH_ORDER = 6,
 	BUSY_WORKER_HASH_ORDER = 6,
 	MAX_IDLE_WORKERS_RATIO = 4,
-	IDLE_WORKER_TIMEOUT = 300000,
-	MAYDAY_INITIAL_TIMEOUT = 10,
-	MAYDAY_INTERVAL = 100,
-	CREATE_COOLDOWN = 1000,
+	IDLE_WORKER_TIMEOUT = 75000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 25,
+	CREATE_COOLDOWN = 250,
 	RESCUER_NICE_LEVEL = 4294967276,
 	HIGHPRI_NICE_LEVEL = 4294967276,
 	WQ_NAME_LEN = 24,
@@ -21559,9 +31605,9 @@
 	struct trace_entry ent;
 	void *work;
 	void *function;
-	void *workqueue;
-	unsigned int req_cpu;
-	unsigned int cpu;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
 	char __data[0];
 };
 
@@ -21585,7 +31631,9 @@
 	char __data[0];
 };
 
-struct trace_event_data_offsets_workqueue_queue_work {};
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
 
 struct trace_event_data_offsets_workqueue_activate_work {};
 
@@ -21593,7 +31641,7 @@
 
 struct trace_event_data_offsets_workqueue_execute_end {};
 
-typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
 
 typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
 
@@ -21627,14 +31675,16 @@
 	long int ret;
 };
 
-typedef void (*task_work_func_t)(struct callback_head *);
+typedef struct {} local_lock_t;
 
-enum task_work_notify_mode {
-	TWA_NONE = 0,
-	TWA_RESUME = 1,
-	TWA_SIGNAL = 2,
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
 };
 
+typedef void (*task_work_func_t)(struct callback_head *);
+
 enum {
 	KERNEL_PARAM_OPS_FL_NOARG = 1,
 };
@@ -21661,33 +31711,6 @@
 	const char *version;
 };
 
-enum lockdown_reason {
-	LOCKDOWN_NONE = 0,
-	LOCKDOWN_MODULE_SIGNATURE = 1,
-	LOCKDOWN_DEV_MEM = 2,
-	LOCKDOWN_EFI_TEST = 3,
-	LOCKDOWN_KEXEC = 4,
-	LOCKDOWN_HIBERNATION = 5,
-	LOCKDOWN_PCI_ACCESS = 6,
-	LOCKDOWN_IOPORT = 7,
-	LOCKDOWN_MSR = 8,
-	LOCKDOWN_ACPI_TABLES = 9,
-	LOCKDOWN_PCMCIA_CIS = 10,
-	LOCKDOWN_TIOCSSERIAL = 11,
-	LOCKDOWN_MODULE_PARAMETERS = 12,
-	LOCKDOWN_MMIOTRACE = 13,
-	LOCKDOWN_DEBUGFS = 14,
-	LOCKDOWN_XMON_WR = 15,
-	LOCKDOWN_INTEGRITY_MAX = 16,
-	LOCKDOWN_KCORE = 17,
-	LOCKDOWN_KPROBES = 18,
-	LOCKDOWN_BPF_READ = 19,
-	LOCKDOWN_PERF = 20,
-	LOCKDOWN_TRACEFS = 21,
-	LOCKDOWN_XMON_RW = 22,
-	LOCKDOWN_CONFIDENTIALITY_MAX = 23,
-};
-
 struct kmalloced_param {
 	struct list_head list;
 	char val[0];
@@ -21697,13 +31720,6 @@
 	int sched_priority;
 };
 
-enum {
-	__PERCPU_REF_ATOMIC = 1,
-	__PERCPU_REF_DEAD = 2,
-	__PERCPU_REF_ATOMIC_DEAD = 3,
-	__PERCPU_REF_FLAG_BITS = 2,
-};
-
 struct kthread_work;
 
 typedef void (*kthread_work_func_t)(struct kthread_work *);
@@ -21735,14 +31751,6 @@
 	struct timer_list timer;
 };
 
-enum {
-	CSS_NO_REF = 1,
-	CSS_ONLINE = 2,
-	CSS_RELEASED = 4,
-	CSS_VISIBLE = 8,
-	CSS_DYING = 16,
-};
-
 struct kthread_create_info {
 	int (*threadfn)(void *);
 	void *data;
@@ -21755,12 +31763,13 @@
 struct kthread {
 	long unsigned int flags;
 	unsigned int cpu;
+	int result;
 	int (*threadfn)(void *);
 	void *data;
-	mm_segment_t oldfs;
 	struct completion parked;
 	struct completion exited;
 	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
 };
 
 enum KTHREAD_BITS {
@@ -21788,7 +31797,6 @@
 };
 
 struct ipc_namespace {
-	refcount_t count;
 	struct ipc_ids ids[3];
 	int sem_ctls[4];
 	int used_sems;
@@ -21810,6 +31818,10 @@
 	unsigned int mq_msgsize_max;
 	unsigned int mq_msg_default;
 	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
 	struct user_namespace *user_ns;
 	struct ucounts *ucounts;
 	struct llist_node mnt_llist;
@@ -21835,23 +31847,25 @@
 	PROC_EVENT_EXIT = 2147483648,
 };
 
-enum reboot_type {
-	BOOT_TRIPLE = 116,
-	BOOT_KBD = 107,
-	BOOT_BIOS = 98,
-	BOOT_ACPI = 97,
-	BOOT_EFI = 101,
-	BOOT_CF9_FORCE = 112,
-	BOOT_CF9_SAFE = 113,
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART = 2,
 };
 
-typedef u64 async_cookie_t;
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
 
-typedef void (*async_func_t)(void *, async_cookie_t);
-
-struct async_domain {
-	struct list_head pending;
-	unsigned int registered: 1;
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
 };
 
 struct async_entry {
@@ -21886,6 +31900,18 @@
 
 struct pin_cookie {};
 
+struct preempt_notifier;
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
 enum {
 	CSD_FLAG_LOCK = 1,
 	IRQ_WORK_PENDING = 1,
@@ -21900,8 +31926,16 @@
 	CSD_FLAG_TYPE_MASK = 240,
 };
 
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
 typedef struct __call_single_data call_single_data_t;
 
+typedef int (*task_call_f)(struct task_struct *, void *);
+
 struct dl_bw {
 	raw_spinlock_t lock;
 	u64 bw;
@@ -21923,7 +31957,7 @@
 };
 
 struct cpupri {
-	struct cpupri_vec pri_to_cpu[102];
+	struct cpupri_vec pri_to_cpu[101];
 	int *cpu_to_pri;
 };
 
@@ -21941,6 +31975,7 @@
 	atomic_t dlo_count;
 	struct dl_bw dl_bw;
 	struct cpudl cpudl;
+	u64 visit_gen;
 	struct irq_work rto_push_work;
 	raw_spinlock_t rto_lock;
 	int rto_loop;
@@ -21957,9 +31992,12 @@
 	struct load_weight load;
 	unsigned int nr_running;
 	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
 	unsigned int idle_h_nr_running;
 	u64 exec_clock;
 	u64 min_vruntime;
+	unsigned int forceidle_seq;
+	u64 min_vruntime_fi;
 	struct rb_root_cached tasks_timeline;
 	struct sched_entity *curr;
 	struct sched_entity *next;
@@ -21968,8 +32006,6 @@
 	unsigned int nr_spread_over;
 	long: 32;
 	long: 64;
-	long: 64;
-	long: 64;
 	struct sched_avg avg;
 	struct {
 		raw_spinlock_t lock;
@@ -21992,11 +32028,12 @@
 	int on_list;
 	struct list_head leaf_cfs_rq_list;
 	struct task_group *tg;
+	int idle;
 	int runtime_enabled;
 	s64 runtime_remaining;
 	u64 throttled_clock;
-	u64 throttled_clock_task;
-	u64 throttled_clock_task_time;
+	u64 throttled_clock_pelt;
+	u64 throttled_clock_pelt_time;
 	int throttled;
 	int throttle_count;
 	struct list_head throttled_list;
@@ -22012,6 +32049,8 @@
 	ktime_t period;
 	u64 quota;
 	u64 runtime;
+	u64 burst;
+	u64 runtime_snap;
 	s64 hierarchical_quota;
 	u8 idle;
 	u8 period_active;
@@ -22021,7 +32060,9 @@
 	struct list_head throttled_cfs_rq;
 	int nr_periods;
 	int nr_throttled;
+	int nr_burst;
 	u64 throttled_time;
+	u64 burst_time;
 };
 
 struct task_group {
@@ -22029,7 +32070,8 @@
 	struct sched_entity **se;
 	struct cfs_rq **cfs_rq;
 	long unsigned int shares;
-	long: 64;
+	int idle;
+	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -22044,88 +32086,34 @@
 	unsigned int uclamp_pct[2];
 	struct uclamp_se uclamp_req[2];
 	struct uclamp_se uclamp[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
-enum {
-	SD_BALANCE_NEWIDLE = 1,
-	SD_BALANCE_EXEC = 2,
-	SD_BALANCE_FORK = 4,
-	SD_BALANCE_WAKE = 8,
-	SD_WAKE_AFFINE = 16,
-	SD_ASYM_CPUCAPACITY = 32,
-	SD_SHARE_CPUCAPACITY = 64,
-	SD_SHARE_PKG_RESOURCES = 128,
-	SD_SERIALIZE = 256,
-	SD_ASYM_PACKING = 512,
-	SD_PREFER_SIBLING = 1024,
-	SD_OVERLAP = 2048,
-	SD_NUMA = 4096,
+struct autogroup {
+	struct kref kref;
+	struct task_group *tg;
+	struct rw_semaphore lock;
+	long unsigned int id;
+	int nice;
 };
 
-struct sched_domain_shared {
-	atomic_t ref;
-	atomic_t nr_busy_cpus;
-	int has_idle_cores;
+enum ctx_state {
+	CONTEXT_DISABLED = 4294967295,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_USER = 1,
+	CONTEXT_GUEST = 2,
 };
 
-struct sched_group;
-
-struct sched_domain {
-	struct sched_domain *parent;
-	struct sched_domain *child;
-	struct sched_group *groups;
-	long unsigned int min_interval;
-	long unsigned int max_interval;
-	unsigned int busy_factor;
-	unsigned int imbalance_pct;
-	unsigned int cache_nice_tries;
-	int nohz_idle;
-	int flags;
-	int level;
-	long unsigned int last_balance;
-	unsigned int balance_interval;
-	unsigned int nr_balance_failed;
-	u64 max_newidle_lb_cost;
-	long unsigned int next_decay_max_lb_cost;
-	u64 avg_scan_cost;
-	unsigned int lb_count[3];
-	unsigned int lb_failed[3];
-	unsigned int lb_balanced[3];
-	unsigned int lb_imbalance[3];
-	unsigned int lb_gained[3];
-	unsigned int lb_hot_gained[3];
-	unsigned int lb_nobusyg[3];
-	unsigned int lb_nobusyq[3];
-	unsigned int alb_count;
-	unsigned int alb_failed;
-	unsigned int alb_pushed;
-	unsigned int sbe_count;
-	unsigned int sbe_balanced;
-	unsigned int sbe_pushed;
-	unsigned int sbf_count;
-	unsigned int sbf_balanced;
-	unsigned int sbf_pushed;
-	unsigned int ttwu_wake_remote;
-	unsigned int ttwu_move_affine;
-	unsigned int ttwu_move_balance;
-	char *name;
-	union {
-		void *private;
-		struct callback_head rcu;
-	};
-	struct sched_domain_shared *shared;
-	unsigned int span_weight;
-	long unsigned int span[0];
-};
-
-struct sched_group_capacity;
-
 struct sched_group {
 	struct sched_group *next;
 	atomic_t ref;
 	unsigned int group_weight;
 	struct sched_group_capacity *sgc;
 	int asym_prefer_cpu;
+	int flags;
 	long unsigned int cpumask[0];
 };
 
@@ -22140,14 +32128,6 @@
 	long unsigned int cpumask[0];
 };
 
-struct autogroup {
-	struct kref kref;
-	struct task_group *tg;
-	struct rw_semaphore lock;
-	long unsigned int id;
-	int nice;
-};
-
 struct kernel_cpustat {
 	u64 cpustat[10];
 };
@@ -22159,6 +32139,7 @@
 	CFTYPE_NO_PREFIX = 8,
 	CFTYPE_WORLD_WRITABLE = 16,
 	CFTYPE_DEBUG = 32,
+	CFTYPE_PRESSURE = 64,
 	__CFTYPE_ONLY_ON_DFL = 65536,
 	__CFTYPE_NOT_ON_DFL = 131072,
 };
@@ -22178,6 +32159,35 @@
 	struct list_head iters_node;
 };
 
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
 struct trace_event_raw_sched_kthread_stop {
 	struct trace_entry ent;
 	char comm[16];
@@ -22191,12 +32201,33 @@
 	char __data[0];
 };
 
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
 struct trace_event_raw_sched_wakeup_template {
 	struct trace_entry ent;
 	char comm[16];
 	pid_t pid;
 	int prio;
-	int success;
 	int target_cpu;
 	char __data[0];
 };
@@ -22326,6 +32357,12 @@
 
 struct trace_event_data_offsets_sched_kthread_stop_ret {};
 
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
 struct trace_event_data_offsets_sched_wakeup_template {};
 
 struct trace_event_data_offsets_sched_switch {};
@@ -22360,13 +32397,19 @@
 
 typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
 
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
 typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
 
 typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
 
 typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
 
-typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
 
 typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
 
@@ -22404,33 +32447,335 @@
 
 typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
 
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+struct uclamp_bucket {
+	long unsigned int value: 11;
+	long unsigned int tasks: 53;
+};
+
+struct uclamp_rq {
+	unsigned int value;
+	struct uclamp_bucket bucket[5];
+};
+
+struct rt_prio_array {
+	long unsigned int bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+};
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 bw_ratio;
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	long unsigned int caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+struct cpuidle_state;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned int nr_numa_running;
+	unsigned int nr_preferred_running;
+	unsigned int numa_migrate_on;
+	long unsigned int last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	struct uclamp_rq uclamp[2];
+	unsigned int uclamp_flags;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	long unsigned int next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_pelt;
+	long unsigned int lost_idle_time;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain *sd;
+	long unsigned int cpu_capacity;
+	long unsigned int cpu_capacity_orig;
+	struct callback_head *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	long unsigned int misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	u64 idle_stamp;
+	u64 avg_idle;
+	long unsigned int wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	u64 prev_steal_time;
+	long unsigned int calc_load_update;
+	long int calc_load_active;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct sched_info rq_sched_info;
+	long long unsigned int rq_cpu_time;
+	unsigned int yld_count;
+	unsigned int sched_count;
+	unsigned int sched_goidle;
+	unsigned int ttwu_count;
+	unsigned int ttwu_local;
+	struct cpuidle_state *idle_state;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	struct rq *core;
+	struct task_struct *core_pick;
+	unsigned int core_enabled;
+	unsigned int core_sched_seq;
+	struct rb_root core_tree;
+	unsigned int core_task_seq;
+	unsigned int core_pick_seq;
+	long unsigned int core_cookie;
+	unsigned int core_forceidle_count;
+	unsigned int core_forceidle_seq;
+	unsigned int core_forceidle_occupation;
+	u64 core_forceidle_start;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct rq_flags {
+	long unsigned int flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+struct sched_entity_stats {
+	struct sched_entity se;
+	struct sched_statistics stats;
+};
+
 enum {
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
-	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
-	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
+	__SCHED_FEAT_START_DEBIT = 1,
+	__SCHED_FEAT_NEXT_BUDDY = 2,
+	__SCHED_FEAT_LAST_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
+	__SCHED_FEAT_RT_PUSH_IPI = 13,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
+	__SCHED_FEAT_LB_MIN = 15,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
+	__SCHED_FEAT_WA_IDLE = 17,
+	__SCHED_FEAT_WA_WEIGHT = 18,
+	__SCHED_FEAT_WA_BIAS = 19,
+	__SCHED_FEAT_UTIL_EST = 20,
+	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
+	__SCHED_FEAT_LATENCY_WARN = 22,
+	__SCHED_FEAT_ALT_PERIOD = 23,
+	__SCHED_FEAT_BASE_SLICE = 24,
+	__SCHED_FEAT_NR = 25,
 };
 
-struct wake_q_head {
-	struct wake_q_node *first;
-	struct wake_q_node **lastp;
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
 };
 
-struct sched_attr {
-	__u32 size;
-	__u32 sched_policy;
-	__u64 sched_flags;
-	__s32 sched_nice;
-	__u32 sched_priority;
-	__u64 sched_runtime;
-	__u64 sched_deadline;
-	__u64 sched_period;
-	__u32 sched_util_min;
-	__u32 sched_util_max;
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+enum {
+	preempt_dynamic_undefined = 4294967295,
+	preempt_dynamic_none = 0,
+	preempt_dynamic_voluntary = 1,
+	preempt_dynamic_full = 2,
+};
+
+struct uclamp_request {
+	s64 percent;
+	u64 util;
+	int ret;
+};
+
+struct cfs_schedulable_data {
+	struct task_group *tg;
+	u64 period;
+	u64 quota;
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+struct numa_group {
+	refcount_t refcount;
+	spinlock_t lock;
+	int nr_tasks;
+	pid_t gid;
+	int active_nodes;
+	struct callback_head rcu;
+	long unsigned int total_faults;
+	long unsigned int max_faults_cpu;
+	long unsigned int faults[0];
+};
+
+struct update_util_data {
+	void (*func)(struct update_util_data *, u64, unsigned int);
 };
 
 struct cpuidle_state_usage {
@@ -22451,8 +32796,8 @@
 struct cpuidle_state {
 	char name[16];
 	char desc[32];
-	u64 exit_latency_ns;
-	u64 target_residency_ns;
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
 	unsigned int flags;
 	unsigned int exit_latency;
 	int power_usage;
@@ -22462,10 +32807,10 @@
 	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
 };
 
-struct cpuidle_state_kobj;
-
 struct cpuidle_driver_kobj;
 
+struct cpuidle_state_kobj;
+
 struct cpuidle_device_kobj;
 
 struct cpuidle_device {
@@ -22496,275 +32841,11 @@
 	const char *governor;
 };
 
-typedef int (*cpu_stop_fn_t)(void *);
-
-struct cpu_stop_done;
-
-struct cpu_stop_work {
-	struct list_head list;
-	cpu_stop_fn_t fn;
-	void *arg;
-	struct cpu_stop_done *done;
-};
-
-struct cpudl_item {
-	u64 dl;
-	int cpu;
-	int idx;
-};
-
-struct rt_prio_array {
-	long unsigned int bitmap[2];
-	struct list_head queue[100];
-};
-
-struct rt_bandwidth {
-	raw_spinlock_t rt_runtime_lock;
-	ktime_t rt_period;
-	u64 rt_runtime;
-	struct hrtimer rt_period_timer;
-	unsigned int rt_period_active;
-};
-
-struct dl_bandwidth {
-	raw_spinlock_t dl_runtime_lock;
-	u64 dl_runtime;
-	u64 dl_period;
-};
-
-typedef int (*tg_visitor)(struct task_group *, void *);
-
-struct uclamp_bucket {
-	long unsigned int value: 11;
-	long unsigned int tasks: 53;
-};
-
-struct uclamp_rq {
-	unsigned int value;
-	struct uclamp_bucket bucket[5];
-};
-
-struct rt_rq {
-	struct rt_prio_array active;
-	unsigned int rt_nr_running;
-	unsigned int rr_nr_running;
-	struct {
-		int curr;
-		int next;
-	} highest_prio;
-	long unsigned int rt_nr_migratory;
-	long unsigned int rt_nr_total;
-	int overloaded;
-	struct plist_head pushable_tasks;
-	int rt_queued;
-	int rt_throttled;
-	u64 rt_time;
-	u64 rt_runtime;
-	raw_spinlock_t rt_runtime_lock;
-};
-
-struct dl_rq {
-	struct rb_root_cached root;
-	long unsigned int dl_nr_running;
-	struct {
-		u64 curr;
-		u64 next;
-	} earliest_dl;
-	long unsigned int dl_nr_migratory;
-	int overloaded;
-	struct rb_root_cached pushable_dl_tasks_root;
-	u64 running_bw;
-	u64 this_bw;
-	u64 extra_bw;
-	u64 bw_ratio;
-};
-
-struct rq {
-	raw_spinlock_t lock;
-	unsigned int nr_running;
-	unsigned int nr_numa_running;
-	unsigned int nr_preferred_running;
-	unsigned int numa_migrate_on;
-	long unsigned int last_blocked_load_update_tick;
-	unsigned int has_blocked_load;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	call_single_data_t nohz_csd;
-	unsigned int nohz_tick_stopped;
-	atomic_t nohz_flags;
-	unsigned int ttwu_pending;
-	u64 nr_switches;
-	long: 64;
-	struct uclamp_rq uclamp[2];
-	unsigned int uclamp_flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct cfs_rq cfs;
-	struct rt_rq rt;
-	struct dl_rq dl;
-	struct list_head leaf_cfs_rq_list;
-	struct list_head *tmp_alone_branch;
-	long unsigned int nr_uninterruptible;
-	struct task_struct *curr;
-	struct task_struct *idle;
-	struct task_struct *stop;
-	long unsigned int next_balance;
-	struct mm_struct *prev_mm;
-	unsigned int clock_update_flags;
-	u64 clock;
-	long: 64;
-	long: 64;
-	long: 64;
-	u64 clock_task;
-	u64 clock_pelt;
-	long unsigned int lost_idle_time;
-	atomic_t nr_iowait;
-	int membarrier_state;
-	struct root_domain *rd;
-	struct sched_domain *sd;
-	long unsigned int cpu_capacity;
-	long unsigned int cpu_capacity_orig;
-	struct callback_head *balance_callback;
-	unsigned char nohz_idle_balance;
-	unsigned char idle_balance;
-	long unsigned int misfit_task_load;
-	int active_balance;
-	int push_cpu;
-	struct cpu_stop_work active_balance_work;
-	int cpu;
-	int online;
-	struct list_head cfs_tasks;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sched_avg avg_rt;
-	struct sched_avg avg_dl;
-	struct sched_avg avg_irq;
-	struct sched_avg avg_thermal;
-	u64 idle_stamp;
-	u64 avg_idle;
-	u64 max_idle_balance_cost;
-	u64 prev_steal_time;
-	u64 prev_steal_time_rq;
-	long unsigned int calc_load_update;
-	long int calc_load_active;
-	long: 64;
-	call_single_data_t hrtick_csd;
-	struct hrtimer hrtick_timer;
-	struct sched_info rq_sched_info;
-	long long unsigned int rq_cpu_time;
-	unsigned int yld_count;
-	unsigned int sched_count;
-	unsigned int sched_goidle;
-	unsigned int ttwu_count;
-	unsigned int ttwu_local;
-	struct cpuidle_state *idle_state;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct perf_domain {
-	struct em_perf_domain *em_pd;
-	struct perf_domain *next;
-	struct callback_head rcu;
-};
-
-struct rq_flags {
-	long unsigned int flags;
-	struct pin_cookie cookie;
-	unsigned int clock_update_flags;
-};
-
-enum {
-	__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,
-	__SCHED_FEAT_START_DEBIT = 1,
-	__SCHED_FEAT_NEXT_BUDDY = 2,
-	__SCHED_FEAT_LAST_BUDDY = 3,
-	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
-	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
-	__SCHED_FEAT_HRTICK = 6,
-	__SCHED_FEAT_DOUBLE_TICK = 7,
-	__SCHED_FEAT_NONTASK_CAPACITY = 8,
-	__SCHED_FEAT_TTWU_QUEUE = 9,
-	__SCHED_FEAT_SIS_AVG_CPU = 10,
-	__SCHED_FEAT_SIS_PROP = 11,
-	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,
-	__SCHED_FEAT_RT_PUSH_IPI = 13,
-	__SCHED_FEAT_RT_RUNTIME_SHARE = 14,
-	__SCHED_FEAT_LB_MIN = 15,
-	__SCHED_FEAT_ATTACH_AGE_LOAD = 16,
-	__SCHED_FEAT_WA_IDLE = 17,
-	__SCHED_FEAT_WA_WEIGHT = 18,
-	__SCHED_FEAT_WA_BIAS = 19,
-	__SCHED_FEAT_UTIL_EST = 20,
-	__SCHED_FEAT_UTIL_EST_FASTUP = 21,
-	__SCHED_FEAT_NR = 22,
-};
-
-struct migration_arg {
-	struct task_struct *task;
-	int dest_cpu;
-};
-
-struct migration_swap_arg {
-	struct task_struct *src_task;
-	struct task_struct *dst_task;
-	int src_cpu;
-	int dst_cpu;
-};
-
-struct uclamp_request {
-	s64 percent;
-	u64 util;
-	int ret;
-};
-
-struct cfs_schedulable_data {
-	struct task_group *tg;
-	u64 period;
-	u64 quota;
-};
-
-enum {
-	cpuset = 0,
-	possible = 1,
-	fail = 2,
-};
-
-enum s2idle_states {
-	S2IDLE_STATE_NONE = 0,
-	S2IDLE_STATE_ENTER = 1,
-	S2IDLE_STATE_WAKE = 2,
-};
-
-struct idle_timer {
-	struct hrtimer timer;
-	int done;
-};
-
-typedef void (*rcu_callback_t)(struct callback_head *);
-
-struct numa_group {
-	refcount_t refcount;
-	spinlock_t lock;
-	int nr_tasks;
-	pid_t gid;
-	int active_nodes;
-	struct callback_head rcu;
-	long unsigned int total_faults;
-	long unsigned int max_faults_cpu;
-	long unsigned int *faults_cpu;
-	long unsigned int faults[0];
-};
-
-struct update_util_data {
-	void (*func)(struct update_util_data *, u64, unsigned int);
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
 };
 
 enum numa_topology_type {
@@ -22780,11 +32861,6 @@
 	NUMA_CPUBUF = 3,
 };
 
-enum schedutil_type {
-	FREQUENCY_UTIL = 0,
-	ENERGY_UTIL = 1,
-};
-
 enum numa_type {
 	node_has_spare = 0,
 	node_fully_busy = 1,
@@ -22808,6 +32884,7 @@
 	int src_nid;
 	int dst_cpu;
 	int dst_nid;
+	int imb_numa_nr;
 	struct numa_stats src_stats;
 	struct numa_stats dst_stats;
 	int imbalance_pct;
@@ -22887,24 +32964,37 @@
 	struct sg_lb_stats local_stat;
 };
 
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
+};
+
+struct dl_bandwidth {
+	raw_spinlock_t dl_runtime_lock;
+	u64 dl_runtime;
+	u64 dl_period;
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
 typedef struct rt_rq *rt_rq_iter_t;
 
-struct wait_bit_key {
-	void *flags;
-	int bit_nr;
-	long unsigned int timeout;
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
 };
 
-struct wait_bit_queue_entry {
-	struct wait_bit_key key;
-	struct wait_queue_entry wq_entry;
-};
-
-typedef int wait_bit_action_f(struct wait_bit_key *, int);
-
-struct swait_queue {
-	struct task_struct *task;
-	struct list_head task_list;
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
 };
 
 struct sd_flag_debug {
@@ -22916,54 +33006,6 @@
 	int relax_domain_level;
 };
 
-typedef const struct cpumask * (*sched_domain_mask_f)(int);
-
-typedef int (*sched_domain_flags_f)();
-
-struct sd_data {
-	struct sched_domain **sd;
-	struct sched_domain_shared **sds;
-	struct sched_group **sg;
-	struct sched_group_capacity **sgc;
-};
-
-struct sched_domain_topology_level {
-	sched_domain_mask_f mask;
-	sched_domain_flags_f sd_flags;
-	int flags;
-	int numa_level;
-	struct sd_data data;
-	char *name;
-};
-
-struct s_data {
-	struct sched_domain **sd;
-	struct root_domain *rd;
-};
-
-enum s_alloc {
-	sa_rootdomain = 0,
-	sa_sd = 1,
-	sa_sd_storage = 2,
-	sa_none = 3,
-};
-
-enum cpuacct_stat_index {
-	CPUACCT_STAT_USER = 0,
-	CPUACCT_STAT_SYSTEM = 1,
-	CPUACCT_STAT_NSTATS = 2,
-};
-
-struct cpuacct_usage {
-	u64 usages[2];
-};
-
-struct cpuacct {
-	struct cgroup_subsys_state css;
-	struct cpuacct_usage *cpuusage;
-	struct kernel_cpustat *cpustat;
-};
-
 struct gov_attr_set {
 	struct kobject kobj;
 	struct list_head policy_list;
@@ -22977,6 +33019,70 @@
 	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
 };
 
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_SHARED = 1,
+};
+
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
+};
+
+enum psi_res {
+	PSI_IO = 0,
+	PSI_MEM = 1,
+	PSI_CPU = 2,
+	NR_PSI_RESOURCES = 3,
+};
+
+struct psi_window {
+	u64 size;
+	u64 start_time;
+	u64 start_value;
+	u64 prev_growth;
+};
+
+struct psi_trigger {
+	enum psi_states state;
+	u64 threshold;
+	struct list_head node;
+	struct psi_group *group;
+	wait_queue_head_t event_wait;
+	int event;
+	struct psi_window win;
+	u64 last_event_time;
+	bool pending_event;
+};
+
+struct sched_clock_data {
+	u64 tick_raw;
+	u64 tick_gtod;
+	u64 clock;
+};
+
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
+};
+
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 *cpuusage;
+	struct kernel_cpustat *cpustat;
+};
+
 struct sugov_tunables {
 	struct gov_attr_set attr_set;
 	unsigned int rate_limit_us;
@@ -23008,73 +33114,49 @@
 	bool iowait_boost_pending;
 	unsigned int iowait_boost;
 	u64 last_update;
+	long unsigned int util;
 	long unsigned int bw_dl;
 	long unsigned int max;
 	long unsigned int saved_idle_calls;
 };
 
-enum {
-	MEMBARRIER_FLAG_SYNC_CORE = 1,
-	MEMBARRIER_FLAG_RSEQ = 2,
+struct s_data {
+	struct sched_domain **sd;
+	struct root_domain *rd;
 };
 
-enum membarrier_cmd {
-	MEMBARRIER_CMD_QUERY = 0,
-	MEMBARRIER_CMD_GLOBAL = 1,
-	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
-	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
-	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
-	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
-	MEMBARRIER_CMD_SHARED = 1,
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
 };
 
-enum membarrier_cmd_flag {
-	MEMBARRIER_CMD_FLAG_CPU = 1,
+struct asym_cap_data {
+	struct list_head link;
+	long unsigned int capacity;
+	long unsigned int cpus[0];
 };
 
-struct proc_ops {
-	unsigned int proc_flags;
-	int (*proc_open)(struct inode *, struct file *);
-	ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);
-	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
-	ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);
-	loff_t (*proc_lseek)(struct file *, loff_t, int);
-	int (*proc_release)(struct inode *, struct file *);
-	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
-	long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);
-	long int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);
-	int (*proc_mmap)(struct file *, struct vm_area_struct *);
-	long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+struct sched_core_cookie {
+	refcount_t refcnt;
 };
 
-enum psi_res {
-	PSI_IO = 0,
-	PSI_MEM = 1,
-	PSI_CPU = 2,
-	NR_PSI_RESOURCES = 3,
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
 };
 
-struct psi_window {
-	u64 size;
-	u64 start_time;
-	u64 start_value;
-	u64 prev_growth;
-};
-
-struct psi_trigger {
-	enum psi_states state;
-	u64 threshold;
-	struct list_head node;
-	struct psi_group *group;
-	wait_queue_head_t event_wait;
-	int event;
-	struct psi_window win;
-	u64 last_event_time;
-	struct kref refcount;
+struct housekeeping {
+	cpumask_var_t cpumasks[9];
+	long unsigned int flags;
 };
 
 struct ww_acquire_ctx;
@@ -23092,24 +33174,34 @@
 	short unsigned int is_wait_die;
 };
 
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
 struct mutex_waiter {
 	struct list_head list;
 	struct task_struct *task;
 	struct ww_acquire_ctx *ww_ctx;
 };
 
-enum mutex_trylock_recursive_enum {
-	MUTEX_TRYLOCK_FAILED = 0,
-	MUTEX_TRYLOCK_SUCCESS = 1,
-	MUTEX_TRYLOCK_RECURSIVE = 2,
-};
-
-struct semaphore {
-	raw_spinlock_t lock;
-	unsigned int count;
-	struct list_head wait_list;
-};
-
 struct semaphore_waiter {
 	struct list_head list;
 	struct task_struct *task;
@@ -23126,7 +33218,7 @@
 	struct task_struct *task;
 	enum rwsem_waiter_type type;
 	long unsigned int timeout;
-	long unsigned int last_rowner;
+	bool handoff_set;
 };
 
 enum rwsem_wake_type {
@@ -23135,12 +33227,6 @@
 	RWSEM_WAKE_READ_OWNED = 2,
 };
 
-enum writer_wait_state {
-	WRITER_NOT_FIRST = 0,
-	WRITER_FIRST = 1,
-	WRITER_HANDOFF = 2,
-};
-
 enum owner_state {
 	OWNER_NULL = 1,
 	OWNER_WRITER = 2,
@@ -23163,6 +33249,24 @@
 
 struct qnode {
 	struct mcs_spinlock mcs;
+	long int reserved[2];
+};
+
+enum vcpu_state {
+	vcpu_running = 0,
+	vcpu_halted = 1,
+	vcpu_hashed = 2,
+};
+
+struct pv_node {
+	struct mcs_spinlock mcs;
+	int cpu;
+	u8 state;
+};
+
+struct pv_hash_entry {
+	struct qspinlock *lock;
+	struct pv_node *node;
 };
 
 struct hrtimer_sleeper {
@@ -23170,35 +33274,39 @@
 	struct task_struct *task;
 };
 
-struct rt_mutex;
+struct rt_mutex_base;
 
 struct rt_mutex_waiter {
 	struct rb_node tree_entry;
 	struct rb_node pi_tree_entry;
 	struct task_struct *task;
-	struct rt_mutex *lock;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
 	int prio;
 	u64 deadline;
+	struct ww_acquire_ctx *ww_ctx;
 };
 
-struct rt_mutex {
+struct rt_mutex_base {
 	raw_spinlock_t wait_lock;
 	struct rb_root_cached waiters;
 	struct task_struct *owner;
 };
 
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
 enum rtmutex_chainwalk {
 	RT_MUTEX_MIN_CHAINWALK = 0,
 	RT_MUTEX_FULL_CHAINWALK = 1,
 };
 
-struct task_struct___2;
-
-struct pm_qos_request {
-	struct plist_node node;
-	struct pm_qos_constraints *qos;
-};
-
 enum pm_qos_req_action {
 	PM_QOS_ADD_REQ = 0,
 	PM_QOS_UPDATE_REQ = 1,
@@ -23299,6 +33407,12 @@
 	__HIBERNATION_AFTER_LAST = 6,
 };
 
+struct pbe {
+	void *address;
+	void *orig_address;
+	struct pbe *next;
+};
+
 struct swsusp_info {
 	struct new_utsname uts;
 	u32 version_code;
@@ -23825,6 +33939,10 @@
 	long unsigned int end_pfn;
 };
 
+typedef struct {
+	long unsigned int val;
+} swp_entry_t;
+
 enum {
 	BIO_NO_PAGE_REF = 0,
 	BIO_CLONED = 1,
@@ -23836,8 +33954,11 @@
 	BIO_THROTTLED = 7,
 	BIO_TRACE_COMPLETION = 8,
 	BIO_CGROUP_ACCT = 9,
-	BIO_TRACKED = 10,
-	BIO_FLAG_LAST = 11,
+	BIO_QOS_THROTTLED = 10,
+	BIO_QOS_MERGED = 11,
+	BIO_REMAPPED = 12,
+	BIO_ZONE_WRITE_LOCKED = 13,
+	BIO_FLAG_LAST = 14,
 };
 
 enum req_opf {
@@ -23846,7 +33967,6 @@
 	REQ_OP_FLUSH = 2,
 	REQ_OP_DISCARD = 3,
 	REQ_OP_SECURE_ERASE = 5,
-	REQ_OP_WRITE_SAME = 7,
 	REQ_OP_WRITE_ZEROES = 9,
 	REQ_OP_ZONE_OPEN = 10,
 	REQ_OP_ZONE_CLOSE = 11,
@@ -23854,8 +33974,6 @@
 	REQ_OP_ZONE_APPEND = 13,
 	REQ_OP_ZONE_RESET = 15,
 	REQ_OP_ZONE_RESET_ALL = 17,
-	REQ_OP_SCSI_IN = 32,
-	REQ_OP_SCSI_OUT = 33,
 	REQ_OP_DRV_IN = 34,
 	REQ_OP_DRV_OUT = 35,
 	REQ_OP_LAST = 36,
@@ -23877,11 +33995,12 @@
 	__REQ_BACKGROUND = 20,
 	__REQ_NOWAIT = 21,
 	__REQ_CGROUP_PUNT = 22,
-	__REQ_NOUNMAP = 23,
-	__REQ_HIPRI = 24,
-	__REQ_DRV = 25,
-	__REQ_SWAP = 26,
-	__REQ_NR_BITS = 27,
+	__REQ_POLLED = 23,
+	__REQ_ALLOC_CACHE = 24,
+	__REQ_SWAP = 25,
+	__REQ_DRV = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
 };
 
 struct swap_map_page {
@@ -23905,7 +34024,8 @@
 };
 
 struct swsusp_header {
-	char reserved[4060];
+	char reserved[4056];
+	u32 hw_sig;
 	u32 crc32;
 	sector_t image;
 	unsigned int flags;
@@ -23988,6 +34108,13 @@
 	u32 dev;
 } __attribute__((packed));
 
+struct wakelock {
+	char *name;
+	struct rb_node node;
+	struct wakeup_source *ws;
+	struct list_head lru;
+};
+
 struct sysrq_key_op {
 	void (* const handler)(int);
 	const char * const help_msg;
@@ -23996,7 +34123,8 @@
 };
 
 struct em_data_callback {
-	int (*active_power)(long unsigned int *, long unsigned int *, struct device *);
+	int (*active_power)(struct device *, long unsigned int *, long unsigned int *);
+	int (*get_cost)(struct device *, long unsigned int, long unsigned int *);
 };
 
 struct dev_printk_info {
@@ -24004,32 +34132,16 @@
 	char device[48];
 };
 
-struct console {
-	char name[16];
-	void (*write)(struct console *, const char *, unsigned int);
-	int (*read)(struct console *, char *, unsigned int);
-	struct tty_driver * (*device)(struct console *, int *);
-	void (*unblank)();
-	int (*setup)(struct console *, char *);
-	int (*exit)(struct console *);
-	int (*match)(struct console *, char *, int, char *);
-	short int flags;
-	short int index;
-	int cflag;
-	void *data;
-	struct console *next;
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
 };
 
 struct kmsg_dumper {
 	struct list_head list;
 	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
 	enum kmsg_dump_reason max_reason;
-	bool active;
 	bool registered;
-	u32 cur_idx;
-	u32 next_idx;
-	u64 cur_seq;
-	u64 next_seq;
 };
 
 struct trace_event_raw_console {
@@ -24084,6 +34196,7 @@
 	struct printk_info *infos;
 	atomic_long_t head_id;
 	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
 };
 
 struct printk_ringbuffer {
@@ -24112,7 +34225,11 @@
 	int index;
 	bool user_specified;
 	char *options;
-	char *brl_options;
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
 };
 
 enum devkmsg_log_bits {
@@ -24132,13 +34249,13 @@
 	MSG_FORMAT_SYSLOG = 1,
 };
 
-enum log_flags {
-	LOG_NEWLINE = 2,
-	LOG_CONT = 8,
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
 };
 
 struct devkmsg_user {
-	u64 seq;
+	atomic64_t seq;
 	struct ratelimit_state rs;
 	struct mutex lock;
 	char buf[8192];
@@ -24147,11 +34264,9 @@
 	struct printk_record record;
 };
 
-struct printk_safe_seq_buf {
-	atomic_t len;
-	atomic_t message_lost;
-	struct irq_work work;
-	unsigned char buffer[8160];
+enum kdb_msgsrc {
+	KDB_MSGSRC_INTERNAL = 0,
+	KDB_MSGSRC_PRINTK = 1,
 };
 
 struct prb_data_block {
@@ -24187,6 +34302,7 @@
 	_IRQ_IS_POLLED = 262144,
 	_IRQ_DISABLE_UNLAZY = 524288,
 	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
 	_IRQF_MODIFY_MASK = 2096911,
 };
 
@@ -24195,25 +34311,7 @@
 	IRQTF_WARNED = 1,
 	IRQTF_AFFINITY = 2,
 	IRQTF_FORCED_THREAD = 3,
-};
-
-enum {
-	IRQ_SET_MASK_OK = 0,
-	IRQ_SET_MASK_OK_NOCOPY = 1,
-	IRQ_SET_MASK_OK_DONE = 2,
-};
-
-enum {
-	IRQCHIP_SET_TYPE_MASKED = 1,
-	IRQCHIP_EOI_IF_HANDLED = 2,
-	IRQCHIP_MASK_ON_SUSPEND = 4,
-	IRQCHIP_ONOFFLINE_ENABLED = 8,
-	IRQCHIP_SKIP_SET_WAKE = 16,
-	IRQCHIP_ONESHOT_SAFE = 32,
-	IRQCHIP_EOI_THREADED = 64,
-	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
-	IRQCHIP_SUPPORTS_NMI = 256,
-	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQTF_READY = 4,
 };
 
 enum {
@@ -24244,23 +34342,6 @@
 	unsigned int set;
 };
 
-enum {
-	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
-	IRQ_DOMAIN_NAME_ALLOCATED = 2,
-	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
-	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
-	IRQ_DOMAIN_FLAG_MSI = 16,
-	IRQ_DOMAIN_FLAG_MSI_REMAP = 32,
-	IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,
-	IRQ_DOMAIN_FLAG_NONCORE = 65536,
-};
-
-enum {
-	IRQCHIP_FWNODE_REAL = 0,
-	IRQCHIP_FWNODE_NAMED = 1,
-	IRQCHIP_FWNODE_NAMED_ID = 2,
-};
-
 struct irqchip_fwid {
 	struct fwnode_handle fwnode;
 	unsigned int type;
@@ -24275,51 +34356,10 @@
 	EFFECTIVE_LIST = 3,
 };
 
-struct msi_alloc_info {
-	struct msi_desc *desc;
-	irq_hw_number_t hwirq;
-	union {
-		long unsigned int ul;
-		void *ptr;
-	} scratchpad[2];
-};
-
-typedef struct msi_alloc_info msi_alloc_info_t;
-
-struct msi_domain_info;
-
-struct msi_domain_ops {
-	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
-	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
-	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
-	int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);
-	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
-	void (*msi_finish)(msi_alloc_info_t *, int);
-	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
-	int (*handle_error)(struct irq_domain *, struct msi_desc *, int);
-	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
-	void (*domain_free_irqs)(struct irq_domain *, struct device *);
-};
-
-struct msi_domain_info {
-	u32 flags;
-	struct msi_domain_ops *ops;
-	struct irq_chip *chip;
-	void *chip_data;
-	irq_flow_handler_t handler;
-	void *handler_data;
-	const char *handler_name;
-	void *data;
-};
-
-enum {
-	MSI_FLAG_USE_DEF_DOM_OPS = 1,
-	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
-	MSI_FLAG_MULTI_PCI_MSI = 4,
-	MSI_FLAG_PCI_MSIX = 8,
-	MSI_FLAG_ACTIVATE_EARLY = 16,
-	MSI_FLAG_MUST_REACTIVATE = 32,
-	MSI_FLAG_LEVEL_CAPABLE = 64,
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
 };
 
 struct irq_affinity {
@@ -24339,8 +34379,104 @@
 	};
 };
 
+struct cpumap {
+	unsigned int available;
+	unsigned int allocated;
+	unsigned int managed;
+	unsigned int managed_allocated;
+	bool initialized;
+	bool online;
+	long unsigned int alloc_map[4];
+	long unsigned int managed_map[4];
+};
+
+struct irq_matrix___2 {
+	unsigned int matrix_bits;
+	unsigned int alloc_start;
+	unsigned int alloc_end;
+	unsigned int alloc_size;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int systembits_inalloc;
+	unsigned int total_allocated;
+	unsigned int online_maps;
+	struct cpumap *maps;
+	long unsigned int scratch_map[4];
+	long unsigned int system_map[4];
+};
+
+struct trace_event_raw_irq_matrix_global {
+	struct trace_entry ent;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_matrix_global_update {
+	struct trace_entry ent;
+	int bit;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_matrix_cpu {
+	struct trace_entry ent;
+	int bit;
+	unsigned int cpu;
+	bool online;
+	unsigned int available;
+	unsigned int allocated;
+	unsigned int managed;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_matrix_global {};
+
+struct trace_event_data_offsets_irq_matrix_global_update {};
+
+struct trace_event_data_offsets_irq_matrix_cpu {};
+
+typedef void (*btf_trace_irq_matrix_online)(void *, struct irq_matrix___2 *);
+
+typedef void (*btf_trace_irq_matrix_offline)(void *, struct irq_matrix___2 *);
+
+typedef void (*btf_trace_irq_matrix_reserve)(void *, struct irq_matrix___2 *);
+
+typedef void (*btf_trace_irq_matrix_remove_reserved)(void *, struct irq_matrix___2 *);
+
+typedef void (*btf_trace_irq_matrix_assign_system)(void *, int, struct irq_matrix___2 *);
+
+typedef void (*btf_trace_irq_matrix_alloc_reserved)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_reserve_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_remove_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_alloc_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_assign)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_alloc)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_free)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);
+
 typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
 
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long int len;
+};
+
 struct rcu_synchronize {
 	struct callback_head head;
 	struct completion completion;
@@ -24352,10 +34488,21 @@
 	char __data[0];
 };
 
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_rcu_utilization {};
 
+struct trace_event_data_offsets_rcu_stall_warning {};
+
 typedef void (*btf_trace_rcu_utilization)(void *, const char *);
 
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
 struct rcu_tasks;
 
 typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
@@ -24370,17 +34517,17 @@
 
 typedef void (*postgp_func_t)(struct rcu_tasks *);
 
+struct rcu_tasks_percpu;
+
 struct rcu_tasks {
-	struct callback_head *cbs_head;
-	struct callback_head **cbs_tail;
-	struct wait_queue_head cbs_wq;
-	raw_spinlock_t cbs_lock;
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
 	int gp_state;
 	int gp_sleep;
 	int init_fract;
 	long unsigned int gp_jiffies;
 	long unsigned int gp_start;
-	long unsigned int n_gps;
+	long unsigned int tasks_gp_seq;
 	long unsigned int n_ipis;
 	long unsigned int n_ipis_fails;
 	struct task_struct *kthread_ptr;
@@ -24391,10 +34538,37 @@
 	holdouts_func_t holdouts_func;
 	postgp_func_t postgp_func;
 	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	long unsigned int percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	long unsigned int barrier_q_seq;
 	char *name;
 	char *kname;
 };
 
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	long unsigned int rtp_jiffies;
+	long unsigned int rtp_n_lock_retries;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
 enum {
 	GP_IDLE = 0,
 	GP_ENTER = 1,
@@ -24403,12 +34577,6 @@
 	GP_REPLAY = 4,
 };
 
-struct rcu_cblist {
-	struct callback_head *head;
-	struct callback_head **tail;
-	long int len;
-};
-
 enum rcutorture_type {
 	RCU_FLAVOR = 0,
 	RCU_TASKS_FLAVOR = 1,
@@ -24419,15 +34587,6 @@
 	INVALID_RCU_FLAVOR = 6,
 };
 
-enum tick_dep_bits {
-	TICK_DEP_BIT_POSIX_TIMER = 0,
-	TICK_DEP_BIT_PERF_EVENTS = 1,
-	TICK_DEP_BIT_SCHED = 2,
-	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
-	TICK_DEP_BIT_RCU = 4,
-	TICK_DEP_BIT_RCU_EXP = 5,
-};
-
 struct rcu_exp_work {
 	long unsigned int rew_s;
 	struct work_struct rew_work;
@@ -24460,9 +34619,13 @@
 	struct list_head *boost_tasks;
 	struct rt_mutex boost_mtx;
 	long unsigned int boost_time;
+	struct mutex boost_kthread_mutex;
 	struct task_struct *boost_kthread_task;
 	unsigned int boost_kthread_status;
-	long: 32;
+	long unsigned int n_boosts;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -24502,7 +34665,6 @@
 	bool core_needs_qs;
 	bool beenonline;
 	bool gpwrap;
-	bool exp_deferred_qs;
 	bool cpu_started;
 	struct rcu_node *mynode;
 	long unsigned int grpmask;
@@ -24523,11 +34685,13 @@
 	bool rcu_urgent_qs;
 	bool rcu_forced_tick;
 	bool rcu_forced_tick_exp;
+	long unsigned int barrier_seq_snap;
 	struct callback_head barrier_head;
 	int exp_dynticks_snap;
 	struct task_struct *rcu_cpu_kthread_task;
 	unsigned int rcu_cpu_kthread_status;
 	char rcu_cpu_has_work;
+	long unsigned int rcuc_activity;
 	unsigned int softirq_snap;
 	struct irq_work rcu_iw;
 	bool rcu_iw_pending;
@@ -24537,19 +34701,18 @@
 	long unsigned int rcu_onl_gp_seq;
 	short int rcu_onl_gp_flags;
 	long unsigned int last_fqs_resched;
+	long unsigned int last_sched_clock;
 	int cpu;
 };
 
 struct rcu_state {
-	struct rcu_node node[9];
-	struct rcu_node *level[3];
+	struct rcu_node node[521];
+	struct rcu_node *level[4];
 	int ncpus;
-	long: 32;
+	int n_online_cpus;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
-	u8 boost;
 	long unsigned int gp_seq;
 	long unsigned int gp_max;
 	struct task_struct *gp_kthread;
@@ -24562,6 +34725,7 @@
 	atomic_t barrier_cpu_count;
 	struct completion barrier_completion;
 	long unsigned int barrier_sequence;
+	raw_spinlock_t barrier_lock;
 	struct mutex exp_mutex;
 	struct mutex exp_wake_mutex;
 	long unsigned int expedited_sequence;
@@ -24585,8 +34749,8 @@
 	long: 56;
 	long: 64;
 	long: 64;
-	raw_spinlock_t ofl_lock;
-	long: 32;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -24620,16 +34784,106 @@
 	bool monitor_todo;
 	bool initialized;
 	int count;
-	struct work_struct page_cache_work;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
 	atomic_t work_in_progress;
 	struct hrtimer hrtimer;
 	struct llist_head bkvcache;
 	int nr_bkv_objs;
 };
 
-enum dma_sync_target {
-	SYNC_FOR_CPU = 0,
-	SYNC_FOR_DEVICE = 1,
+struct rcu_stall_chk_rdr {
+	int nesting;
+	union rcu_special rs;
+	bool on_blkd_list;
+};
+
+struct klp_func {
+	const char *old_name;
+	void *new_func;
+	long unsigned int old_sympos;
+	void *old_func;
+	struct kobject kobj;
+	struct list_head node;
+	struct list_head stack_node;
+	long unsigned int old_size;
+	long unsigned int new_size;
+	bool nop;
+	bool patched;
+	bool transition;
+};
+
+struct klp_object;
+
+struct klp_callbacks {
+	int (*pre_patch)(struct klp_object *);
+	void (*post_patch)(struct klp_object *);
+	void (*pre_unpatch)(struct klp_object *);
+	void (*post_unpatch)(struct klp_object *);
+	bool post_unpatch_enabled;
+};
+
+struct klp_object {
+	const char *name;
+	struct klp_func *funcs;
+	struct klp_callbacks callbacks;
+	struct kobject kobj;
+	struct list_head func_list;
+	struct list_head node;
+	struct module *mod;
+	bool dynamic;
+	bool patched;
+};
+
+struct klp_state {
+	long unsigned int id;
+	unsigned int version;
+	void *data;
+};
+
+struct klp_patch {
+	struct module *mod;
+	struct klp_object *objs;
+	struct klp_state *states;
+	bool replace;
+	struct list_head list;
+	struct kobject kobj;
+	struct list_head obj_list;
+	bool enabled;
+	bool forced;
+	struct work_struct free_work;
+	struct completion finish;
+};
+
+struct klp_find_arg {
+	const char *objname;
+	const char *name;
+	long unsigned int addr;
+	long unsigned int count;
+	long unsigned int pos;
+};
+
+struct klp_ops {
+	struct list_head node;
+	struct list_head func_stack;
+	struct ftrace_ops fops;
+};
+
+typedef int (*klp_shadow_ctor_t)(void *, void *, void *);
+
+typedef void (*klp_shadow_dtor_t)(void *, void *);
+
+struct klp_shadow {
+	struct hlist_node node;
+	struct callback_head callback_head;
+	void *obj;
+	long unsigned int id;
+	char data[0];
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
 };
 
 struct dma_devres {
@@ -24639,42 +34893,13 @@
 	long unsigned int attrs;
 };
 
-struct reserved_mem_ops;
-
-struct reserved_mem {
-	const char *name;
-	long unsigned int fdt_node;
-	long unsigned int phandle;
-	const struct reserved_mem_ops *ops;
-	phys_addr_t base;
-	phys_addr_t size;
-	void *priv;
-};
-
-struct reserved_mem_ops {
-	int (*device_init)(struct reserved_mem *, struct device *);
-	void (*device_release)(struct reserved_mem *, struct device *);
-};
-
-typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
-
-struct dma_coherent_mem {
-	void *virt_base;
-	dma_addr_t device_base;
-	long unsigned int pfn_base;
-	int size;
-	long unsigned int *bitmap;
-	spinlock_t spinlock;
-	bool use_dev_dma_pfn_offset;
-};
-
 struct trace_event_raw_swiotlb_bounced {
 	struct trace_entry ent;
 	u32 __data_loc_dev_name;
 	u64 dma_mask;
 	dma_addr_t dev_addr;
 	size_t size;
-	enum swiotlb_force swiotlb_force;
+	bool force;
 	char __data[0];
 };
 
@@ -24682,19 +34907,1815 @@
 	u32 dev_name;
 };
 
-typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
 
-struct gen_pool;
+struct cma;
 
-typedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long int id;
+	long unsigned int args[6];
+	char __data[0];
+};
 
-struct gen_pool {
-	spinlock_t lock;
-	struct list_head chunks;
-	int min_alloc_order;
-	genpool_algo_t algo;
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long int id;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);
+
+struct interval_tree_node {
+	struct rb_node rb;
+	long unsigned int start;
+	long unsigned int last;
+	long unsigned int __subtree_last;
+};
+
+struct kvm_regs {
+	__u64 rax;
+	__u64 rbx;
+	__u64 rcx;
+	__u64 rdx;
+	__u64 rsi;
+	__u64 rdi;
+	__u64 rsp;
+	__u64 rbp;
+	__u64 r8;
+	__u64 r9;
+	__u64 r10;
+	__u64 r11;
+	__u64 r12;
+	__u64 r13;
+	__u64 r14;
+	__u64 r15;
+	__u64 rip;
+	__u64 rflags;
+};
+
+struct kvm_segment {
+	__u64 base;
+	__u32 limit;
+	__u16 selector;
+	__u8 type;
+	__u8 present;
+	__u8 dpl;
+	__u8 db;
+	__u8 s;
+	__u8 l;
+	__u8 g;
+	__u8 avl;
+	__u8 unusable;
+	__u8 padding;
+};
+
+struct kvm_dtable {
+	__u64 base;
+	__u16 limit;
+	__u16 padding[3];
+};
+
+struct kvm_sregs {
+	struct kvm_segment cs;
+	struct kvm_segment ds;
+	struct kvm_segment es;
+	struct kvm_segment fs;
+	struct kvm_segment gs;
+	struct kvm_segment ss;
+	struct kvm_segment tr;
+	struct kvm_segment ldt;
+	struct kvm_dtable gdt;
+	struct kvm_dtable idt;
+	__u64 cr0;
+	__u64 cr2;
+	__u64 cr3;
+	__u64 cr4;
+	__u64 cr8;
+	__u64 efer;
+	__u64 apic_base;
+	__u64 interrupt_bitmap[4];
+};
+
+struct kvm_msr_entry {
+	__u32 index;
+	__u32 reserved;
+	__u64 data;
+};
+
+struct kvm_cpuid_entry2 {
+	__u32 function;
+	__u32 index;
+	__u32 flags;
+	__u32 eax;
+	__u32 ebx;
+	__u32 ecx;
+	__u32 edx;
+	__u32 padding[3];
+};
+
+struct kvm_debug_exit_arch {
+	__u32 exception;
+	__u32 pad;
+	__u64 pc;
+	__u64 dr6;
+	__u64 dr7;
+};
+
+struct kvm_vcpu_events {
+	struct {
+		__u8 injected;
+		__u8 nr;
+		__u8 has_error_code;
+		__u8 pending;
+		__u32 error_code;
+	} exception;
+	struct {
+		__u8 injected;
+		__u8 nr;
+		__u8 soft;
+		__u8 shadow;
+	} interrupt;
+	struct {
+		__u8 injected;
+		__u8 pending;
+		__u8 masked;
+		__u8 pad;
+	} nmi;
+	__u32 sipi_vector;
+	__u32 flags;
+	struct {
+		__u8 smm;
+		__u8 pending;
+		__u8 smm_inside_nmi;
+		__u8 latched_init;
+	} smi;
+	__u8 reserved[27];
+	__u8 exception_has_payload;
+	__u64 exception_payload;
+};
+
+struct kvm_sync_regs {
+	struct kvm_regs regs;
+	struct kvm_sregs sregs;
+	struct kvm_vcpu_events events;
+};
+
+struct kvm_vmx_nested_state_data {
+	__u8 vmcs12[4096];
+	__u8 shadow_vmcs12[4096];
+};
+
+struct kvm_vmx_nested_state_hdr {
+	__u64 vmxon_pa;
+	__u64 vmcs12_pa;
+	struct {
+		__u16 flags;
+	} smm;
+	__u16 pad;
+	__u32 flags;
+	__u64 preemption_timer_deadline;
+};
+
+struct kvm_svm_nested_state_data {
+	__u8 vmcb12[4096];
+};
+
+struct kvm_svm_nested_state_hdr {
+	__u64 vmcb_pa;
+};
+
+struct kvm_nested_state {
+	__u16 flags;
+	__u16 format;
+	__u32 size;
+	union {
+		struct kvm_vmx_nested_state_hdr vmx;
+		struct kvm_svm_nested_state_hdr svm;
+		__u8 pad[120];
+	} hdr;
+	union {
+		struct kvm_vmx_nested_state_data vmx[0];
+		struct kvm_svm_nested_state_data svm[0];
+	} data;
+};
+
+struct kvm_pmu_event_filter {
+	__u32 action;
+	__u32 nevents;
+	__u32 fixed_counter_bitmap;
+	__u32 flags;
+	__u32 pad[4];
+	__u64 events[0];
+};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
+	union {
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			__u32 longmode;
+			__u32 pad;
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
+			union {
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
+			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			long unsigned int extension_id;
+			long unsigned int function_id;
+			long unsigned int args[6];
+			long unsigned int ret[2];
+		} riscv_sbi;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct kvm_coalesced_mmio {
+	__u64 phys_addr;
+	__u32 len;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+	__u8 data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+	__u32 first;
+	__u32 last;
+	struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+struct kvm_xen_hvm_config {
+	__u32 flags;
+	__u32 msr;
+	__u64 blob_addr_32;
+	__u64 blob_addr_64;
+	__u8 blob_size_32;
+	__u8 blob_size_64;
+	__u8 pad2[30];
+};
+
+struct kvm_enc_region {
+	__u64 addr;
+	__u64 size;
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+typedef long unsigned int gva_t;
+
+typedef u64 gpa_t;
+
+typedef u64 gfn_t;
+
+typedef u64 hpa_t;
+
+typedef u64 hfn_t;
+
+typedef hfn_t kvm_pfn_t;
+
+enum pfn_cache_usage {
+	KVM_GUEST_USES_PFN = 1,
+	KVM_HOST_USES_PFN = 2,
+	KVM_GUEST_AND_HOST_USE_PFN = 3,
+};
+
+struct kvm_memory_slot;
+
+struct gfn_to_hva_cache {
+	u64 generation;
+	gpa_t gpa;
+	long unsigned int hva;
+	long unsigned int len;
+	struct kvm_memory_slot *memslot;
+};
+
+struct kvm_rmap_head;
+
+struct kvm_lpage_info;
+
+struct kvm_arch_memory_slot {
+	struct kvm_rmap_head *rmap[3];
+	struct kvm_lpage_info *lpage_info[2];
+	short unsigned int *gfn_track[1];
+};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	long unsigned int npages;
+	long unsigned int *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	long unsigned int userspace_addr;
+	u32 flags;
+	short int id;
+	u16 as_id;
+};
+
+struct kvm_vcpu;
+
+struct gfn_to_pfn_cache {
+	u64 generation;
+	gpa_t gpa;
+	long unsigned int uhva;
+	struct kvm_memory_slot *memslot;
+	struct kvm_vcpu *vcpu;
+	struct list_head list;
+	rwlock_t lock;
+	void *khva;
+	kvm_pfn_t pfn;
+	enum pfn_cache_usage usage;
+	bool active;
+	bool valid;
+};
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
 	void *data;
+	unsigned int len;
+};
+
+struct kvm_lapic;
+
+struct kvm_page_fault;
+
+struct x86_exception;
+
+struct kvm_mmu_page;
+
+struct kvm_mmu_root_info {
+	gpa_t pgd;
+	hpa_t hpa;
+};
+
+union kvm_mmu_page_role {
+	u32 word;
+	struct {
+		unsigned int level: 4;
+		unsigned int has_4_byte_gpte: 1;
+		unsigned int quadrant: 2;
+		unsigned int direct: 1;
+		unsigned int access: 3;
+		unsigned int invalid: 1;
+		unsigned int efer_nx: 1;
+		unsigned int cr0_wp: 1;
+		unsigned int smep_andnot_wp: 1;
+		unsigned int smap_andnot_wp: 1;
+		unsigned int ad_disabled: 1;
+		unsigned int guest_mode: 1;
+		unsigned int passthrough: 1;
+		char: 5;
+		unsigned int smm: 8;
+	};
+};
+
+union kvm_mmu_extended_role {
+	u32 word;
+	struct {
+		unsigned int valid: 1;
+		unsigned int execonly: 1;
+		unsigned int cr4_pse: 1;
+		unsigned int cr4_pke: 1;
+		unsigned int cr4_smap: 1;
+		unsigned int cr4_smep: 1;
+		unsigned int cr4_la57: 1;
+		unsigned int efer_lma: 1;
+	};
+};
+
+union kvm_cpu_role {
+	u64 as_u64;
+	struct {
+		union kvm_mmu_page_role base;
+		union kvm_mmu_extended_role ext;
+	};
+};
+
+struct rsvd_bits_validate {
+	u64 rsvd_bits_mask[10];
+	u64 bad_mt_xwr;
+};
+
+struct kvm_mmu {
+	long unsigned int (*get_guest_pgd)(struct kvm_vcpu *);
+	u64 (*get_pdptr)(struct kvm_vcpu *, int);
+	int (*page_fault)(struct kvm_vcpu *, struct kvm_page_fault *);
+	void (*inject_page_fault)(struct kvm_vcpu *, struct x86_exception *);
+	gpa_t (*gva_to_gpa)(struct kvm_vcpu *, struct kvm_mmu *, gpa_t, u64, struct x86_exception *);
+	int (*sync_page)(struct kvm_vcpu *, struct kvm_mmu_page *);
+	void (*invlpg)(struct kvm_vcpu *, gva_t, hpa_t);
+	struct kvm_mmu_root_info root;
+	union kvm_cpu_role cpu_role;
+	union kvm_mmu_page_role root_role;
+	u32 pkru_mask;
+	struct kvm_mmu_root_info prev_roots[3];
+	u8 permissions[16];
+	u64 *pae_root;
+	u64 *pml4_root;
+	u64 *pml5_root;
+	struct rsvd_bits_validate shadow_zero_check;
+	struct rsvd_bits_validate guest_rsvd_check;
+	u64 pdptrs[4];
+};
+
+struct kvm_mmu_memory_cache {
+	int nobjs;
+	gfp_t gfp_zero;
+	struct kmem_cache *kmem_cache;
+	void *objects[40];
+};
+
+struct kvm_pio_request {
+	long unsigned int linear_rip;
+	long unsigned int count;
+	int in;
+	int port;
+	int size;
+};
+
+struct kvm_queued_exception {
+	bool pending;
+	bool injected;
+	bool has_error_code;
+	u8 nr;
+	u32 error_code;
+	long unsigned int payload;
+	bool has_payload;
+	u8 nested_apf;
+};
+
+struct kvm_queued_interrupt {
+	bool injected;
+	bool soft;
+	u8 nr;
+};
+
+struct x86_emulate_ctxt;
+
+struct kvm_mtrr_range {
+	u64 base;
+	u64 mask;
+	struct list_head node;
+};
+
+struct kvm_mtrr {
+	struct kvm_mtrr_range var_ranges[8];
+	mtrr_type fixed_ranges[88];
+	u64 deftype;
+	struct list_head head;
+};
+
+enum pmc_type {
+	KVM_PMC_GP = 0,
+	KVM_PMC_FIXED = 1,
+};
+
+struct kvm_pmc {
+	enum pmc_type type;
+	u8 idx;
+	u64 counter;
+	u64 eventsel;
+	struct perf_event *perf_event;
+	struct kvm_vcpu *vcpu;
+	u64 current_config;
+	bool is_paused;
+	bool intr;
+};
+
+struct kvm_pmu {
+	unsigned int nr_arch_gp_counters;
+	unsigned int nr_arch_fixed_counters;
+	unsigned int available_event_types;
+	u64 fixed_ctr_ctrl;
+	u64 global_ctrl;
+	u64 global_status;
+	u64 counter_bitmask[2];
+	u64 global_ctrl_mask;
+	u64 global_ovf_ctrl_mask;
+	u64 reserved_bits;
+	u64 raw_event_mask;
+	u8 version;
+	struct kvm_pmc gp_counters[32];
+	struct kvm_pmc fixed_counters[3];
+	struct irq_work irq_work;
+	long unsigned int reprogram_pmi[1];
+	long unsigned int all_valid_pmc_idx[1];
+	long unsigned int pmc_in_use[1];
+	bool need_cleanup;
+	u8 event_count;
+};
+
+struct kvm_vcpu_xen {
+	u64 hypercall_rip;
+	u32 current_runstate;
+	u8 upcall_vector;
+	struct gfn_to_pfn_cache vcpu_info_cache;
+	struct gfn_to_pfn_cache vcpu_time_info_cache;
+	struct gfn_to_pfn_cache runstate_cache;
+	u64 last_steal;
+	u64 runstate_entry_time;
+	u64 runstate_times[4];
+	long unsigned int evtchn_pending_sel;
+	u32 vcpu_id;
+	u32 timer_virq;
+	u64 timer_expires;
+	atomic_t timer_pending;
+	struct hrtimer timer;
+	int poll_evtchn;
+	struct timer_list poll_timer;
+};
+
+struct kvm_vcpu_hv;
+
+struct kvm_vcpu_arch {
+	long unsigned int regs[17];
+	u32 regs_avail;
+	u32 regs_dirty;
+	long unsigned int cr0;
+	long unsigned int cr0_guest_owned_bits;
+	long unsigned int cr2;
+	long unsigned int cr3;
+	long unsigned int cr4;
+	long unsigned int cr4_guest_owned_bits;
+	long unsigned int cr4_guest_rsvd_bits;
+	long unsigned int cr8;
+	u32 host_pkru;
+	u32 pkru;
+	u32 hflags;
+	u64 efer;
+	u64 apic_base;
+	struct kvm_lapic *apic;
+	bool apicv_active;
+	bool load_eoi_exitmap_pending;
+	long unsigned int ioapic_handled_vectors[4];
+	long unsigned int apic_attention;
+	int32_t apic_arb_prio;
+	int mp_state;
+	u64 ia32_misc_enable_msr;
+	u64 smbase;
+	u64 smi_count;
+	bool at_instruction_boundary;
+	bool tpr_access_reporting;
+	bool xsaves_enabled;
+	bool xfd_no_write_intercept;
+	u64 ia32_xss;
+	u64 microcode_version;
+	u64 arch_capabilities;
+	u64 perf_capabilities;
+	struct kvm_mmu *mmu;
+	struct kvm_mmu root_mmu;
+	struct kvm_mmu guest_mmu;
+	struct kvm_mmu nested_mmu;
+	struct kvm_mmu *walk_mmu;
+	struct kvm_mmu_memory_cache mmu_pte_list_desc_cache;
+	struct kvm_mmu_memory_cache mmu_shadow_page_cache;
+	struct kvm_mmu_memory_cache mmu_gfn_array_cache;
+	struct kvm_mmu_memory_cache mmu_page_header_cache;
+	struct fpu_guest guest_fpu;
+	u64 xcr0;
+	struct kvm_pio_request pio;
+	void *pio_data;
+	void *sev_pio_data;
+	unsigned int sev_pio_count;
+	u8 event_exit_inst_len;
+	struct kvm_queued_exception exception;
+	struct kvm_queued_interrupt interrupt;
+	int halt_request;
+	int cpuid_nent;
+	struct kvm_cpuid_entry2 *cpuid_entries;
+	u32 kvm_cpuid_base;
+	u64 reserved_gpa_bits;
+	int maxphyaddr;
+	struct x86_emulate_ctxt *emulate_ctxt;
+	bool emulate_regs_need_sync_to_vcpu;
+	bool emulate_regs_need_sync_from_vcpu;
+	int (*complete_userspace_io)(struct kvm_vcpu *);
+	gpa_t time;
+	struct pvclock_vcpu_time_info hv_clock;
+	unsigned int hw_tsc_khz;
+	struct gfn_to_pfn_cache pv_time;
+	bool pvclock_set_guest_stopped_request;
+	struct {
+		u8 preempted;
+		u64 msr_val;
+		u64 last_steal;
+		struct gfn_to_hva_cache cache;
+	} st;
+	u64 l1_tsc_offset;
+	u64 tsc_offset;
+	u64 last_guest_tsc;
+	u64 last_host_tsc;
+	u64 tsc_offset_adjustment;
+	u64 this_tsc_nsec;
+	u64 this_tsc_write;
+	u64 this_tsc_generation;
+	bool tsc_catchup;
+	bool tsc_always_catchup;
+	s8 virtual_tsc_shift;
+	u32 virtual_tsc_mult;
+	u32 virtual_tsc_khz;
+	s64 ia32_tsc_adjust_msr;
+	u64 msr_ia32_power_ctl;
+	u64 l1_tsc_scaling_ratio;
+	u64 tsc_scaling_ratio;
+	atomic_t nmi_queued;
+	unsigned int nmi_pending;
+	bool nmi_injected;
+	bool smi_pending;
+	u8 handling_intr_from_guest;
+	struct kvm_mtrr mtrr_state;
+	u64 pat;
+	unsigned int switch_db_regs;
+	long unsigned int db[4];
+	long unsigned int dr6;
+	long unsigned int dr7;
+	long unsigned int eff_db[4];
+	long unsigned int guest_debug_dr7;
+	u64 msr_platform_info;
+	u64 msr_misc_features_enables;
+	u64 mcg_cap;
+	u64 mcg_status;
+	u64 mcg_ctl;
+	u64 mcg_ext_ctl;
+	u64 *mce_banks;
+	u64 mmio_gva;
+	unsigned int mmio_access;
+	gfn_t mmio_gfn;
+	u64 mmio_gen;
+	struct kvm_pmu pmu;
+	long unsigned int singlestep_rip;
+	bool hyperv_enabled;
+	struct kvm_vcpu_hv *hyperv;
+	struct kvm_vcpu_xen xen;
+	cpumask_var_t wbinvd_dirty_mask;
+	long unsigned int last_retry_eip;
+	long unsigned int last_retry_addr;
+	struct {
+		bool halted;
+		gfn_t gfns[64];
+		struct gfn_to_hva_cache data;
+		u64 msr_en_val;
+		u64 msr_int_val;
+		u16 vec;
+		u32 id;
+		bool send_user_only;
+		u32 host_apf_flags;
+		long unsigned int nested_apf_token;
+		bool delivery_as_pf_vmexit;
+		bool pageready_pending;
+	} apf;
+	struct {
+		u64 length;
+		u64 status;
+	} osvw;
+	struct {
+		u64 msr_val;
+		struct gfn_to_hva_cache data;
+	} pv_eoi;
+	u64 msr_kvm_poll_control;
+	bool write_fault_to_shadow_pgtable;
+	long unsigned int exit_qualification;
+	struct {
+		bool pv_unhalted;
+	} pv;
+	int pending_ioapic_eoi;
+	int pending_external_vector;
+	bool preempted_in_kernel;
+	bool l1tf_flush_l1d;
+	int last_vmentry_cpu;
+	u64 msr_hwcr;
+	struct {
+		u32 features;
+		bool enforce;
+	} pv_cpuid;
+	bool guest_state_protected;
+	bool pdptrs_from_userspace;
+	hpa_t hv_root_tdp;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 pf_taken;
+	u64 pf_fixed;
+	u64 pf_emulate;
+	u64 pf_spurious;
+	u64 pf_fast;
+	u64 pf_mmio_spte_created;
+	u64 pf_guest;
+	u64 tlb_flush;
+	u64 invlpg;
+	u64 exits;
+	u64 io_exits;
+	u64 mmio_exits;
+	u64 signal_exits;
+	u64 irq_window_exits;
+	u64 nmi_window_exits;
+	u64 l1d_flush;
+	u64 halt_exits;
+	u64 request_irq_exits;
+	u64 irq_exits;
+	u64 host_state_reload;
+	u64 fpu_reload;
+	u64 insn_emulation;
+	u64 insn_emulation_fail;
+	u64 hypercalls;
+	u64 irq_injections;
+	u64 nmi_injections;
+	u64 req_event;
+	u64 nested_run;
+	u64 directed_yield_attempted;
+	u64 directed_yield_successful;
+	u64 preemption_reported;
+	u64 preemption_other;
+	u64 guest_mode;
+};
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm;
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	long unsigned int guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	struct {
+		u32 queued;
+		struct list_head queue;
+		struct list_head done;
+		spinlock_t lock;
+	} async_pf;
+	struct {
+		bool in_spin_loop;
+		bool dy_eligible;
+	} spin_loop;
+	bool preempted;
+	bool ready;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+struct hv_partition_assist_pg {
+	u32 tlb_lock_count;
+};
+
+union hv_message_flags {
+	__u8 asu8;
+	struct {
+		__u8 msg_pending: 1;
+		__u8 reserved: 7;
+	};
+};
+
+union hv_port_id {
+	__u32 asu32;
+	struct {
+		__u32 id: 24;
+		__u32 reserved: 8;
+	} u;
+};
+
+struct hv_message_header {
+	__u32 message_type;
+	__u8 payload_size;
+	union hv_message_flags message_flags;
+	__u8 reserved[2];
+	union {
+		__u64 sender;
+		union hv_port_id port;
+	};
+};
+
+struct hv_message {
+	struct hv_message_header header;
+	union {
+		__u64 payload[30];
+	} u;
+};
+
+union hv_stimer_config {
+	u64 as_uint64;
+	struct {
+		u64 enable: 1;
+		u64 periodic: 1;
+		u64 lazy: 1;
+		u64 auto_enable: 1;
+		u64 apic_vector: 8;
+		u64 direct_mode: 1;
+		u64 reserved_z0: 3;
+		u64 sintx: 4;
+		u64 reserved_z1: 44;
+	};
+};
+
+enum kvm_page_track_mode {
+	KVM_PAGE_TRACK_WRITE = 0,
+	KVM_PAGE_TRACK_MAX = 1,
+};
+
+struct kvm_page_track_notifier_head {
+	struct srcu_struct track_srcu;
+	struct hlist_head track_notifier_list;
+};
+
+struct kvm_page_track_notifier_node {
+	struct hlist_node node;
+	void (*track_write)(struct kvm_vcpu *, gpa_t, const u8 *, int, struct kvm_page_track_notifier_node *);
+	void (*track_flush_slot)(struct kvm *, struct kvm_memory_slot *, struct kvm_page_track_notifier_node *);
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+	u64 mmu_shadow_zapped;
+	u64 mmu_pte_write;
+	u64 mmu_pde_zapped;
+	u64 mmu_flooded;
+	u64 mmu_recycled;
+	u64 mmu_cache_miss;
+	u64 mmu_unsync;
+	union {
+		struct {
+			atomic64_t pages_4k;
+			atomic64_t pages_2m;
+			atomic64_t pages_1g;
+		};
+		atomic64_t pages[3];
+	};
+	u64 nx_lpage_splits;
+	u64 max_mmu_page_hash_collisions;
+	u64 max_mmu_rmap_size;
+};
+
+struct kvm_pic;
+
+struct kvm_ioapic;
+
+struct kvm_pit;
+
+enum hv_tsc_page_status {
+	HV_TSC_PAGE_UNSET = 0,
+	HV_TSC_PAGE_GUEST_CHANGED = 1,
+	HV_TSC_PAGE_HOST_CHANGED = 2,
+	HV_TSC_PAGE_SET = 3,
+	HV_TSC_PAGE_BROKEN = 4,
+};
+
+struct kvm_hv_syndbg {
+	struct {
+		u64 control;
+		u64 status;
+		u64 send_page;
+		u64 recv_page;
+		u64 pending_page;
+	} control;
+	u64 options;
+};
+
+struct kvm_hv {
+	struct mutex hv_lock;
+	u64 hv_guest_os_id;
+	u64 hv_hypercall;
+	u64 hv_tsc_page;
+	enum hv_tsc_page_status hv_tsc_page_status;
+	u64 hv_crash_param[5];
+	u64 hv_crash_ctl;
+	struct ms_hyperv_tsc_page tsc_ref;
+	struct idr conn_to_evt;
+	u64 hv_reenlightenment_control;
+	u64 hv_tsc_emulation_control;
+	u64 hv_tsc_emulation_status;
+	atomic_t num_mismatched_vp_indexes;
+	unsigned int synic_auto_eoi_used;
+	struct hv_partition_assist_pg *hv_pa_pg;
+	struct kvm_hv_syndbg hv_syndbg;
+};
+
+struct kvm_xen {
+	u32 xen_version;
+	bool long_mode;
+	u8 upcall_vector;
+	struct gfn_to_pfn_cache shinfo_cache;
+	struct idr evtchn_ports;
+	long unsigned int poll_mask[16];
+};
+
+enum kvm_irqchip_mode {
+	KVM_IRQCHIP_NONE = 0,
+	KVM_IRQCHIP_KERNEL = 1,
+	KVM_IRQCHIP_SPLIT = 2,
+};
+
+struct kvm_apic_map;
+
+struct kvm_x86_msr_filter;
+
+struct kvm_arch {
+	long unsigned int n_used_mmu_pages;
+	long unsigned int n_requested_mmu_pages;
+	long unsigned int n_max_mmu_pages;
+	unsigned int indirect_shadow_pages;
+	u8 mmu_valid_gen;
+	struct hlist_head mmu_page_hash[4096];
+	struct list_head active_mmu_pages;
+	struct list_head zapped_obsolete_pages;
+	struct list_head lpage_disallowed_mmu_pages;
+	struct kvm_page_track_notifier_node mmu_sp_tracker;
+	struct kvm_page_track_notifier_head track_notifier_head;
+	spinlock_t mmu_unsync_pages_lock;
+	struct list_head assigned_dev_head;
+	struct iommu_domain *iommu_domain;
+	bool iommu_noncoherent;
+	atomic_t noncoherent_dma_count;
+	atomic_t assigned_device_count;
+	struct kvm_pic *vpic;
+	struct kvm_ioapic *vioapic;
+	struct kvm_pit *vpit;
+	atomic_t vapics_in_nmi_mode;
+	struct mutex apic_map_lock;
+	struct kvm_apic_map *apic_map;
+	atomic_t apic_map_dirty;
+	struct rw_semaphore apicv_update_lock;
+	bool apic_access_memslot_enabled;
+	long unsigned int apicv_inhibit_reasons;
+	gpa_t wall_clock;
+	bool mwait_in_guest;
+	bool hlt_in_guest;
+	bool pause_in_guest;
+	bool cstate_in_guest;
+	long unsigned int irq_sources_bitmap;
+	s64 kvmclock_offset;
+	raw_spinlock_t tsc_write_lock;
+	u64 last_tsc_nsec;
+	u64 last_tsc_write;
+	u32 last_tsc_khz;
+	u64 last_tsc_offset;
+	u64 cur_tsc_nsec;
+	u64 cur_tsc_write;
+	u64 cur_tsc_offset;
+	u64 cur_tsc_generation;
+	int nr_vcpus_matched_tsc;
+	u32 default_tsc_khz;
+	seqcount_raw_spinlock_t pvclock_sc;
+	bool use_master_clock;
+	u64 master_kernel_ns;
+	u64 master_cycle_now;
+	struct delayed_work kvmclock_update_work;
+	struct delayed_work kvmclock_sync_work;
+	struct kvm_xen_hvm_config xen_hvm_config;
+	struct hlist_head mask_notifier_list;
+	struct kvm_hv hyperv;
+	struct kvm_xen xen;
+	bool backwards_tsc_observed;
+	bool boot_vcpu_runs_old_kvmclock;
+	u32 bsp_vcpu_id;
+	u64 disabled_quirks;
+	int cpu_dirty_logging_count;
+	enum kvm_irqchip_mode irqchip_mode;
+	u8 nr_reserved_ioapic_pins;
+	bool disabled_lapic_found;
+	bool x2apic_format;
+	bool x2apic_broadcast_quirk_disabled;
+	bool guest_can_read_msr_platform_info;
+	bool exception_payload_enabled;
+	bool bus_lock_detection_enabled;
+	bool enable_pmu;
+	bool exit_on_emulation_error;
+	u32 user_space_msr_mask;
+	struct kvm_x86_msr_filter *msr_filter;
+	u32 hypercall_exit_enabled;
+	bool sgx_provisioning_allowed;
+	struct kvm_pmu_event_filter *pmu_event_filter;
+	struct task_struct *nx_lpage_recovery_thread;
+	bool tdp_mmu_enabled;
+	struct list_head tdp_mmu_roots;
+	struct list_head tdp_mmu_pages;
+	spinlock_t tdp_mmu_pages_lock;
+	struct workqueue_struct *tdp_mmu_zap_wq;
+	bool shadow_root_allocated;
+	hpa_t hv_root_tdp;
+	spinlock_t hv_root_tdp_lock;
+};
+
+struct kvm_io_bus;
+
+struct kvm_irq_routing_table;
+
+struct kvm_stat_data;
+
+struct kvm {
+	rwlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	long unsigned int nr_memslot_pages;
+	struct kvm_memslots __memslots[4];
+	struct kvm_memslots *memslots[2];
+	struct xarray vcpu_array;
+	spinlock_t mn_invalidate_lock;
+	long unsigned int mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	long unsigned int mmu_notifier_seq;
+	long int mmu_notifier_count;
+	long unsigned int mmu_notifier_range_start;
+	long unsigned int mmu_notifier_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool vm_bugged;
+	bool vm_dead;
+	struct notifier_block pm_notifier;
+	char stats_id[48];
+};
+
+enum kvm_reg {
+	VCPU_REGS_RAX = 0,
+	VCPU_REGS_RCX = 1,
+	VCPU_REGS_RDX = 2,
+	VCPU_REGS_RBX = 3,
+	VCPU_REGS_RSP = 4,
+	VCPU_REGS_RBP = 5,
+	VCPU_REGS_RSI = 6,
+	VCPU_REGS_RDI = 7,
+	VCPU_REGS_R8 = 8,
+	VCPU_REGS_R9 = 9,
+	VCPU_REGS_R10 = 10,
+	VCPU_REGS_R11 = 11,
+	VCPU_REGS_R12 = 12,
+	VCPU_REGS_R13 = 13,
+	VCPU_REGS_R14 = 14,
+	VCPU_REGS_R15 = 15,
+	VCPU_REGS_RIP = 16,
+	NR_VCPU_REGS = 17,
+	VCPU_EXREG_PDPTR = 17,
+	VCPU_EXREG_CR0 = 18,
+	VCPU_EXREG_CR3 = 19,
+	VCPU_EXREG_CR4 = 20,
+	VCPU_EXREG_RFLAGS = 21,
+	VCPU_EXREG_SEGMENTS = 22,
+	VCPU_EXREG_EXIT_INFO_1 = 23,
+	VCPU_EXREG_EXIT_INFO_2 = 24,
+};
+
+enum exit_fastpath_completion {
+	EXIT_FASTPATH_NONE = 0,
+	EXIT_FASTPATH_REENTER_GUEST = 1,
+	EXIT_FASTPATH_EXIT_HANDLED = 2,
+};
+
+struct kvm_rmap_head {
+	long unsigned int val;
+};
+
+struct kvm_tlb_range {
+	u64 start_gfn;
+	u64 pages;
+};
+
+struct kvm_vcpu_hv_stimer {
+	struct hrtimer timer;
+	int index;
+	union hv_stimer_config config;
+	u64 count;
+	u64 exp_time;
+	struct hv_message msg;
+	bool msg_pending;
+};
+
+struct kvm_vcpu_hv_synic {
+	u64 version;
+	u64 control;
+	u64 msg_page;
+	u64 evt_page;
+	atomic64_t sint[16];
+	atomic_t sint_to_gsi[16];
+	long unsigned int auto_eoi_bitmap[4];
+	long unsigned int vec_bitmap[4];
+	bool active;
+	bool dont_zero_synic_pages;
+};
+
+struct kvm_vcpu_hv {
+	struct kvm_vcpu *vcpu;
+	u32 vp_index;
+	u64 hv_vapic;
+	s64 runtime_offset;
+	struct kvm_vcpu_hv_synic synic;
+	struct kvm_hyperv_exit exit;
+	struct kvm_vcpu_hv_stimer stimer[4];
+	long unsigned int stimer_pending_bitmap[1];
+	bool enforce_cpuid;
+	struct {
+		u32 features_eax;
+		u32 features_ebx;
+		u32 features_edx;
+		u32 enlightenments_eax;
+		u32 enlightenments_ebx;
+		u32 syndbg_cap_eax;
+	} cpuid_cache;
+};
+
+struct kvm_lpage_info {
+	int disallow_lpage;
+};
+
+struct kvm_apic_map {
+	struct callback_head rcu;
+	u8 mode;
+	u32 max_apic_id;
+	union {
+		struct kvm_lapic *xapic_flat_map[8];
+		struct kvm_lapic *xapic_cluster_map[64];
+	};
+	struct kvm_lapic *phys_map[0];
+};
+
+struct msr_bitmap_range {
+	u32 flags;
+	u32 nmsrs;
+	u32 base;
+	long unsigned int *bitmap;
+};
+
+struct kvm_x86_msr_filter {
+	u8 count;
+	bool default_allow: 1;
+	struct msr_bitmap_range ranges[16];
+};
+
+enum kvm_apicv_inhibit {
+	APICV_INHIBIT_REASON_DISABLE = 0,
+	APICV_INHIBIT_REASON_HYPERV = 1,
+	APICV_INHIBIT_REASON_ABSENT = 2,
+	APICV_INHIBIT_REASON_BLOCKIRQ = 3,
+	APICV_INHIBIT_REASON_APIC_ID_MODIFIED = 4,
+	APICV_INHIBIT_REASON_APIC_BASE_MODIFIED = 5,
+	APICV_INHIBIT_REASON_NESTED = 6,
+	APICV_INHIBIT_REASON_IRQWIN = 7,
+	APICV_INHIBIT_REASON_PIT_REINJ = 8,
+	APICV_INHIBIT_REASON_X2APIC = 9,
+	APICV_INHIBIT_REASON_SEV = 10,
+};
+
+struct msr_data {
+	bool host_initiated;
+	u32 index;
+	u64 data;
+};
+
+struct x86_instruction_info;
+
+enum x86_intercept_stage;
+
+struct kvm_x86_nested_ops;
+
+struct kvm_x86_ops {
 	const char *name;
+	int (*hardware_enable)();
+	void (*hardware_disable)();
+	void (*hardware_unsetup)();
+	bool (*has_emulated_msr)(struct kvm *, u32);
+	void (*vcpu_after_set_cpuid)(struct kvm_vcpu *);
+	unsigned int vm_size;
+	int (*vm_init)(struct kvm *);
+	void (*vm_destroy)(struct kvm *);
+	int (*vcpu_create)(struct kvm_vcpu *);
+	void (*vcpu_free)(struct kvm_vcpu *);
+	void (*vcpu_reset)(struct kvm_vcpu *, bool);
+	void (*prepare_switch_to_guest)(struct kvm_vcpu *);
+	void (*vcpu_load)(struct kvm_vcpu *, int);
+	void (*vcpu_put)(struct kvm_vcpu *);
+	void (*update_exception_bitmap)(struct kvm_vcpu *);
+	int (*get_msr)(struct kvm_vcpu *, struct msr_data *);
+	int (*set_msr)(struct kvm_vcpu *, struct msr_data *);
+	u64 (*get_segment_base)(struct kvm_vcpu *, int);
+	void (*get_segment)(struct kvm_vcpu *, struct kvm_segment *, int);
+	int (*get_cpl)(struct kvm_vcpu *);
+	void (*set_segment)(struct kvm_vcpu *, struct kvm_segment *, int);
+	void (*get_cs_db_l_bits)(struct kvm_vcpu *, int *, int *);
+	void (*set_cr0)(struct kvm_vcpu *, long unsigned int);
+	void (*post_set_cr3)(struct kvm_vcpu *, long unsigned int);
+	bool (*is_valid_cr4)(struct kvm_vcpu *, long unsigned int);
+	void (*set_cr4)(struct kvm_vcpu *, long unsigned int);
+	int (*set_efer)(struct kvm_vcpu *, u64);
+	void (*get_idt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*set_idt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*get_gdt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*set_gdt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*sync_dirty_debug_regs)(struct kvm_vcpu *);
+	void (*set_dr7)(struct kvm_vcpu *, long unsigned int);
+	void (*cache_reg)(struct kvm_vcpu *, enum kvm_reg);
+	long unsigned int (*get_rflags)(struct kvm_vcpu *);
+	void (*set_rflags)(struct kvm_vcpu *, long unsigned int);
+	bool (*get_if_flag)(struct kvm_vcpu *);
+	void (*flush_tlb_all)(struct kvm_vcpu *);
+	void (*flush_tlb_current)(struct kvm_vcpu *);
+	int (*tlb_remote_flush)(struct kvm *);
+	int (*tlb_remote_flush_with_range)(struct kvm *, struct kvm_tlb_range *);
+	void (*flush_tlb_gva)(struct kvm_vcpu *, gva_t);
+	void (*flush_tlb_guest)(struct kvm_vcpu *);
+	int (*vcpu_pre_run)(struct kvm_vcpu *);
+	enum exit_fastpath_completion (*vcpu_run)(struct kvm_vcpu *);
+	int (*handle_exit)(struct kvm_vcpu *, enum exit_fastpath_completion);
+	int (*skip_emulated_instruction)(struct kvm_vcpu *);
+	void (*update_emulated_instruction)(struct kvm_vcpu *);
+	void (*set_interrupt_shadow)(struct kvm_vcpu *, int);
+	u32 (*get_interrupt_shadow)(struct kvm_vcpu *);
+	void (*patch_hypercall)(struct kvm_vcpu *, unsigned char *);
+	void (*inject_irq)(struct kvm_vcpu *);
+	void (*inject_nmi)(struct kvm_vcpu *);
+	void (*queue_exception)(struct kvm_vcpu *);
+	void (*cancel_injection)(struct kvm_vcpu *);
+	int (*interrupt_allowed)(struct kvm_vcpu *, bool);
+	int (*nmi_allowed)(struct kvm_vcpu *, bool);
+	bool (*get_nmi_mask)(struct kvm_vcpu *);
+	void (*set_nmi_mask)(struct kvm_vcpu *, bool);
+	void (*enable_nmi_window)(struct kvm_vcpu *);
+	void (*enable_irq_window)(struct kvm_vcpu *);
+	void (*update_cr8_intercept)(struct kvm_vcpu *, int, int);
+	bool (*check_apicv_inhibit_reasons)(enum kvm_apicv_inhibit);
+	void (*refresh_apicv_exec_ctrl)(struct kvm_vcpu *);
+	void (*hwapic_irr_update)(struct kvm_vcpu *, int);
+	void (*hwapic_isr_update)(struct kvm_vcpu *, int);
+	bool (*guest_apic_has_interrupt)(struct kvm_vcpu *);
+	void (*load_eoi_exitmap)(struct kvm_vcpu *, u64 *);
+	void (*set_virtual_apic_mode)(struct kvm_vcpu *);
+	void (*set_apic_access_page_addr)(struct kvm_vcpu *);
+	void (*deliver_interrupt)(struct kvm_lapic *, int, int, int);
+	int (*sync_pir_to_irr)(struct kvm_vcpu *);
+	int (*set_tss_addr)(struct kvm *, unsigned int);
+	int (*set_identity_map_addr)(struct kvm *, u64);
+	u64 (*get_mt_mask)(struct kvm_vcpu *, gfn_t, bool);
+	void (*load_mmu_pgd)(struct kvm_vcpu *, hpa_t, int);
+	bool (*has_wbinvd_exit)();
+	u64 (*get_l2_tsc_offset)(struct kvm_vcpu *);
+	u64 (*get_l2_tsc_multiplier)(struct kvm_vcpu *);
+	void (*write_tsc_offset)(struct kvm_vcpu *, u64);
+	void (*write_tsc_multiplier)(struct kvm_vcpu *, u64);
+	void (*get_exit_info)(struct kvm_vcpu *, u32 *, u64 *, u64 *, u32 *, u32 *);
+	int (*check_intercept)(struct kvm_vcpu *, struct x86_instruction_info *, enum x86_intercept_stage, struct x86_exception *);
+	void (*handle_exit_irqoff)(struct kvm_vcpu *);
+	void (*request_immediate_exit)(struct kvm_vcpu *);
+	void (*sched_in)(struct kvm_vcpu *, int);
+	int cpu_dirty_log_size;
+	void (*update_cpu_dirty_logging)(struct kvm_vcpu *);
+	const struct kvm_x86_nested_ops *nested_ops;
+	void (*vcpu_blocking)(struct kvm_vcpu *);
+	void (*vcpu_unblocking)(struct kvm_vcpu *);
+	int (*pi_update_irte)(struct kvm *, unsigned int, uint32_t, bool);
+	void (*pi_start_assignment)(struct kvm *);
+	void (*apicv_post_state_restore)(struct kvm_vcpu *);
+	bool (*dy_apicv_has_pending_interrupt)(struct kvm_vcpu *);
+	int (*set_hv_timer)(struct kvm_vcpu *, u64, bool *);
+	void (*cancel_hv_timer)(struct kvm_vcpu *);
+	void (*setup_mce)(struct kvm_vcpu *);
+	int (*smi_allowed)(struct kvm_vcpu *, bool);
+	int (*enter_smm)(struct kvm_vcpu *, char *);
+	int (*leave_smm)(struct kvm_vcpu *, const char *);
+	void (*enable_smi_window)(struct kvm_vcpu *);
+	int (*mem_enc_ioctl)(struct kvm *, void *);
+	int (*mem_enc_register_region)(struct kvm *, struct kvm_enc_region *);
+	int (*mem_enc_unregister_region)(struct kvm *, struct kvm_enc_region *);
+	int (*vm_copy_enc_context_from)(struct kvm *, unsigned int);
+	int (*vm_move_enc_context_from)(struct kvm *, unsigned int);
+	void (*guest_memory_reclaimed)(struct kvm *);
+	int (*get_msr_feature)(struct kvm_msr_entry *);
+	bool (*can_emulate_instruction)(struct kvm_vcpu *, int, void *, int);
+	bool (*apic_init_signal_blocked)(struct kvm_vcpu *);
+	int (*enable_direct_tlbflush)(struct kvm_vcpu *);
+	void (*migrate_timers)(struct kvm_vcpu *);
+	void (*msr_filter_changed)(struct kvm_vcpu *);
+	int (*complete_emulated_msr)(struct kvm_vcpu *, int);
+	void (*vcpu_deliver_sipi_vector)(struct kvm_vcpu *, u8);
+	long unsigned int (*vcpu_get_apicv_inhibit_reasons)(struct kvm_vcpu *);
+};
+
+struct kvm_x86_nested_ops {
+	void (*leave_nested)(struct kvm_vcpu *);
+	int (*check_events)(struct kvm_vcpu *);
+	bool (*handle_page_fault_workaround)(struct kvm_vcpu *, struct x86_exception *);
+	bool (*hv_timer_pending)(struct kvm_vcpu *);
+	void (*triple_fault)(struct kvm_vcpu *);
+	int (*get_state)(struct kvm_vcpu *, struct kvm_nested_state *, unsigned int);
+	int (*set_state)(struct kvm_vcpu *, struct kvm_nested_state *, struct kvm_nested_state *);
+	bool (*get_nested_state_pages)(struct kvm_vcpu *);
+	int (*write_log_dirty)(struct kvm_vcpu *, gpa_t);
+	int (*enable_evmcs)(struct kvm_vcpu *, uint16_t *);
+	uint16_t (*get_evmcs_version)(struct kvm_vcpu *);
+};
+
+struct kvm_io_device;
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+enum kvm_bus {
+	KVM_MMIO_BUS = 0,
+	KVM_PIO_BUS = 1,
+	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
+	KVM_FAST_MMIO_BUS = 3,
+	KVM_NR_BUSES = 4,
+};
+
+struct kvm_irq_routing_table {
+	int chip[72];
+	u32 nr_rt_entries;
+	struct hlist_head map[0];
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	long unsigned int len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	long unsigned int symoffs;
+	long unsigned int stroffs;
+	long unsigned int init_typeoffs;
+	long unsigned int core_typeoffs;
+	struct _ddebug *debug;
+	unsigned int num_debug;
+	bool sig_ok;
+	long unsigned int mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	long unsigned int addr_min;
+	long unsigned int addr_max;
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	long unsigned int ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	long unsigned int ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *module_init;
+};
+
+struct module_signature {
+	u8 algo;
+	u8 hash;
+	u8 id_type;
+	u8 signer_len;
+	u8 key_id_len;
+	u8 __pad[3];
+	__be32 sig_len;
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	long unsigned int address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct modversion_info {
+	long unsigned int crc;
+	char name[56];
 };
 
 enum kcmp_type {
@@ -24715,11 +36736,6 @@
 	__u32 toff;
 };
 
-enum profile_type {
-	PROFILE_TASK_EXIT = 0,
-	PROFILE_MUNMAP = 1,
-};
-
 struct profile_hit {
 	u32 pc;
 	u32 hits;
@@ -24734,6 +36750,8 @@
 
 typedef __kernel_long_t __kernel_suseconds_t;
 
+typedef __kernel_long_t __kernel_old_time_t;
+
 typedef __kernel_suseconds_t suseconds_t;
 
 typedef __u64 timeu64_t;
@@ -24958,6 +36976,7 @@
 	unsigned int cpu;
 	bool next_expiry_recalc;
 	bool is_idle;
+	bool timers_pending;
 	long unsigned int pending_map[9];
 	struct hlist_head vectors[576];
 	long: 64;
@@ -24969,51 +36988,6 @@
 	struct task_struct *task;
 };
 
-enum clock_event_state {
-	CLOCK_EVT_STATE_DETACHED = 0,
-	CLOCK_EVT_STATE_SHUTDOWN = 1,
-	CLOCK_EVT_STATE_PERIODIC = 2,
-	CLOCK_EVT_STATE_ONESHOT = 3,
-	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
-};
-
-struct clock_event_device {
-	void (*event_handler)(struct clock_event_device *);
-	int (*set_next_event)(long unsigned int, struct clock_event_device *);
-	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
-	ktime_t next_event;
-	u64 max_delta_ns;
-	u64 min_delta_ns;
-	u32 mult;
-	u32 shift;
-	enum clock_event_state state_use_accessors;
-	unsigned int features;
-	long unsigned int retries;
-	int (*set_state_periodic)(struct clock_event_device *);
-	int (*set_state_oneshot)(struct clock_event_device *);
-	int (*set_state_oneshot_stopped)(struct clock_event_device *);
-	int (*set_state_shutdown)(struct clock_event_device *);
-	int (*tick_resume)(struct clock_event_device *);
-	void (*broadcast)(const struct cpumask *);
-	void (*suspend)(struct clock_event_device *);
-	void (*resume)(struct clock_event_device *);
-	long unsigned int min_delta_ticks;
-	long unsigned int max_delta_ticks;
-	const char *name;
-	int rating;
-	int irq;
-	int bound_on;
-	const struct cpumask *cpumask;
-	struct list_head list;
-	struct module *owner;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 enum tick_device_mode {
 	TICKDEV_MODE_PERIODIC = 0,
 	TICKDEV_MODE_ONESHOT = 1,
@@ -25034,6 +37008,7 @@
 	u64 cycles;
 	ktime_t real;
 	ktime_t raw;
+	enum clocksource_ids cs_id;
 	unsigned int clock_was_set_seq;
 	u8 cs_was_changed_seq;
 };
@@ -25044,15 +37019,6 @@
 	ktime_t sys_monoraw;
 };
 
-struct system_counterval_t {
-	u64 cycles;
-	struct clocksource *cs;
-};
-
-typedef struct {
-	seqcount_t seqcount;
-} seqcount_latch_t;
-
 struct audit_ntp_val {
 	long long int oldval;
 	long long int newval;
@@ -25072,6 +37038,84 @@
 	struct tk_read_base base[2];
 };
 
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, long unsigned int);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long int *);
+	int (*set_offset)(struct device *, long int);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	long unsigned int flags;
+	long unsigned int irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	long unsigned int set_offset_nsec;
+	long unsigned int features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+};
+
+typedef s64 int64_t;
+
+enum wd_read_status {
+	WD_READ_SUCCESS = 0,
+	WD_READ_UNSTABLE = 1,
+	WD_READ_SKIP = 2,
+};
+
 enum tick_nohz_mode {
 	NOHZ_MODE_INACTIVE = 0,
 	NOHZ_MODE_LOWRES = 1,
@@ -25103,6 +37147,8 @@
 	u64 next_timer;
 	ktime_t idle_expires;
 	atomic_t tick_dep_mask;
+	long unsigned int last_tick_jiffies;
+	unsigned int stalled_jiffies;
 };
 
 struct timer_list_iter {
@@ -25122,26 +37168,23 @@
 	int tm_yday;
 };
 
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+};
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
 typedef __kernel_timer_t timer_t;
 
-struct rtc_time {
-	int tm_sec;
-	int tm_min;
-	int tm_hour;
-	int tm_mday;
-	int tm_mon;
-	int tm_year;
-	int tm_wday;
-	int tm_yday;
-	int tm_isdst;
-};
-
-struct rtc_wkalrm {
-	unsigned char enabled;
-	unsigned char pending;
-	struct rtc_time time;
-};
-
 enum alarmtimer_type {
 	ALARM_REALTIME = 0,
 	ALARM_BOOTTIME = 1,
@@ -25231,107 +37274,16 @@
 	void (*remove_dev)(struct device *, struct class_interface *);
 };
 
-struct rtc_class_ops {
-	int (*ioctl)(struct device *, unsigned int, long unsigned int);
-	int (*read_time)(struct device *, struct rtc_time *);
-	int (*set_time)(struct device *, struct rtc_time *);
-	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-	int (*proc)(struct device *, struct seq_file *);
-	int (*alarm_irq_enable)(struct device *, unsigned int);
-	int (*read_offset)(struct device *, long int *);
-	int (*set_offset)(struct device *, long int);
-};
-
-struct rtc_device;
-
-struct rtc_timer {
-	struct timerqueue_node node;
-	ktime_t period;
-	void (*func)(struct rtc_device *);
-	struct rtc_device *rtc;
-	int enabled;
-};
-
-struct rtc_device {
-	struct device dev;
-	struct module *owner;
-	int id;
-	const struct rtc_class_ops *ops;
-	struct mutex ops_lock;
-	struct cdev char_dev;
-	long unsigned int flags;
-	long unsigned int irq_data;
-	spinlock_t irq_lock;
-	wait_queue_head_t irq_queue;
-	struct fasync_struct *async_queue;
-	int irq_freq;
-	int max_user_freq;
-	struct timerqueue_head timerqueue;
-	struct rtc_timer aie_timer;
-	struct rtc_timer uie_rtctimer;
-	struct hrtimer pie_timer;
-	int pie_enabled;
-	struct work_struct irqwork;
-	int uie_unsupported;
-	long int set_offset_nsec;
-	bool registered;
-	bool nvram_old_abi;
-	struct bin_attribute *nvram;
-	time64_t range_min;
-	timeu64_t range_max;
-	time64_t start_secs;
-	time64_t offset_secs;
-	bool set_start_time;
-	struct work_struct uie_task;
-	struct timer_list uie_timer;
-	unsigned int oldsecs;
-	unsigned int uie_irq_active: 1;
-	unsigned int stop_uie_polling: 1;
-	unsigned int uie_task_active: 1;
-	unsigned int uie_timer_active: 1;
-};
-
-struct property_entry;
-
-struct platform_device_info {
-	struct device *parent;
-	struct fwnode_handle *fwnode;
-	bool of_node_reused;
-	const char *name;
-	int id;
-	const struct resource *res;
-	unsigned int num_res;
-	const void *data;
-	size_t size_data;
-	u64 dma_mask;
-	const struct property_entry *properties;
-};
-
-enum dev_prop_type {
-	DEV_PROP_U8 = 0,
-	DEV_PROP_U16 = 1,
-	DEV_PROP_U32 = 2,
-	DEV_PROP_U64 = 3,
-	DEV_PROP_STRING = 4,
-	DEV_PROP_REF = 5,
-};
-
-struct property_entry {
-	const char *name;
-	size_t length;
-	bool is_inline;
-	enum dev_prop_type type;
-	union {
-		const void *pointer;
-		union {
-			u8 u8_data[8];
-			u16 u16_data[4];
-			u32 u32_data[2];
-			u64 u64_data[1];
-			const char *str[1];
-		} value;
-	};
+struct platform_driver {
+	int (*probe)(struct platform_device *);
+	int (*remove)(struct platform_device *);
+	void (*shutdown)(struct platform_device *);
+	int (*suspend)(struct platform_device *, pm_message_t);
+	int (*resume)(struct platform_device *);
+	struct device_driver driver;
+	const struct platform_device_id *id_table;
+	bool prevent_deferred_probe;
+	bool driver_managed_dma;
 };
 
 struct trace_event_raw_alarmtimer_suspend {
@@ -25400,8 +37352,6 @@
 	} _sigev_un;
 };
 
-typedef unsigned int uint;
-
 struct posix_clock;
 
 struct posix_clock_operations {
@@ -25440,32 +37390,11 @@
 	struct old_timeval32 it_value;
 };
 
-typedef s64 int64_t;
-
 struct ce_unbind {
 	struct clock_event_device *ce;
 	int res;
 };
 
-enum tick_broadcast_state {
-	TICK_BROADCAST_EXIT = 0,
-	TICK_BROADCAST_ENTER = 1,
-};
-
-enum tick_broadcast_mode {
-	TICK_BROADCAST_OFF = 0,
-	TICK_BROADCAST_ON = 1,
-	TICK_BROADCAST_FORCE = 2,
-};
-
-struct clock_data {
-	seqcount_latch_t seq;
-	struct clock_read_data read_data[2];
-	ktime_t wrap_kt;
-	long unsigned int rate;
-	u64 (*actual_read_sched_clock)();
-};
-
 struct proc_timens_offset {
 	int clockid;
 	struct timespec64 val;
@@ -25494,23 +37423,12 @@
 
 struct futex_pi_state {
 	struct list_head list;
-	struct rt_mutex pi_mutex;
+	struct rt_mutex_base pi_mutex;
 	struct task_struct *owner;
 	refcount_t refcount;
 	union futex_key key;
 };
 
-struct futex_q {
-	struct plist_node list;
-	struct task_struct *task;
-	spinlock_t *lock_ptr;
-	union futex_key key;
-	struct futex_pi_state *pi_state;
-	struct rt_mutex_waiter *rt_waiter;
-	union futex_key *requeue_pi_key;
-	u32 bitset;
-};
-
 struct futex_hash_bucket {
 	atomic_t waiters;
 	spinlock_t lock;
@@ -25522,15 +37440,57 @@
 	long: 64;
 };
 
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
 enum futex_access {
 	FUTEX_READ = 0,
 	FUTEX_WRITE = 1,
 };
 
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+struct dma_chan {
+	int lock;
+	const char *device_id;
+};
+
 typedef bool (*smp_cond_func_t)(int, void *);
 
+struct cfd_percpu {
+	call_single_data_t csd;
+};
+
 struct call_function_data {
-	call_single_data_t *csd;
+	struct cfd_percpu *pcpu;
 	cpumask_var_t cpumask;
 	cpumask_var_t cpumask_ipi;
 };
@@ -25544,218 +37504,6 @@
 	int cpu;
 };
 
-typedef short unsigned int __kernel_old_uid_t;
-
-typedef short unsigned int __kernel_old_gid_t;
-
-typedef __kernel_old_uid_t old_uid_t;
-
-typedef __kernel_old_gid_t old_gid_t;
-
-struct latch_tree_root {
-	seqcount_latch_t seq;
-	struct rb_root tree[2];
-};
-
-struct latch_tree_ops {
-	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
-	int (*comp)(void *, struct latch_tree_node *);
-};
-
-struct modversion_info {
-	long unsigned int crc;
-	char name[56];
-};
-
-struct module_use {
-	struct list_head source_list;
-	struct list_head target_list;
-	struct module *source;
-	struct module *target;
-};
-
-struct module_sect_attr {
-	struct bin_attribute battr;
-	long unsigned int address;
-};
-
-struct module_sect_attrs {
-	struct attribute_group grp;
-	unsigned int nsections;
-	struct module_sect_attr attrs[0];
-};
-
-struct module_notes_attrs {
-	struct kobject *dir;
-	unsigned int notes;
-	struct bin_attribute attrs[0];
-};
-
-enum mod_license {
-	NOT_GPL_ONLY = 0,
-	GPL_ONLY = 1,
-	WILL_BE_GPL_ONLY = 2,
-};
-
-struct symsearch {
-	const struct kernel_symbol *start;
-	const struct kernel_symbol *stop;
-	const s32 *crcs;
-	enum mod_license license;
-	bool unused;
-};
-
-enum kernel_read_file_id {
-	READING_UNKNOWN = 0,
-	READING_FIRMWARE = 1,
-	READING_MODULE = 2,
-	READING_KEXEC_IMAGE = 3,
-	READING_KEXEC_INITRAMFS = 4,
-	READING_POLICY = 5,
-	READING_X509_CERTIFICATE = 6,
-	READING_MAX_ID = 7,
-};
-
-enum kernel_load_data_id {
-	LOADING_UNKNOWN = 0,
-	LOADING_FIRMWARE = 1,
-	LOADING_MODULE = 2,
-	LOADING_KEXEC_IMAGE = 3,
-	LOADING_KEXEC_INITRAMFS = 4,
-	LOADING_POLICY = 5,
-	LOADING_X509_CERTIFICATE = 6,
-	LOADING_MAX_ID = 7,
-};
-
-enum {
-	PROC_ENTRY_PERMANENT = 1,
-};
-
-struct _ddebug {
-	const char *modname;
-	const char *function;
-	const char *filename;
-	const char *format;
-	unsigned int lineno: 18;
-	unsigned int flags: 8;
-	union {
-		struct static_key_true dd_key_true;
-		struct static_key_false dd_key_false;
-	} key;
-};
-
-struct load_info {
-	const char *name;
-	struct module *mod;
-	Elf64_Ehdr *hdr;
-	long unsigned int len;
-	Elf64_Shdr *sechdrs;
-	char *secstrings;
-	char *strtab;
-	long unsigned int symoffs;
-	long unsigned int stroffs;
-	long unsigned int init_typeoffs;
-	long unsigned int core_typeoffs;
-	struct _ddebug *debug;
-	unsigned int num_debug;
-	bool sig_ok;
-	long unsigned int mod_kallsyms_init_off;
-	struct {
-		unsigned int sym;
-		unsigned int str;
-		unsigned int mod;
-		unsigned int vers;
-		unsigned int info;
-		unsigned int pcpu;
-	} index;
-};
-
-struct trace_event_raw_module_load {
-	struct trace_entry ent;
-	unsigned int taints;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_free {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_refcnt {
-	struct trace_entry ent;
-	long unsigned int ip;
-	int refcnt;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_module_request {
-	struct trace_entry ent;
-	long unsigned int ip;
-	bool wait;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_module_load {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_free {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_refcnt {
-	u32 name;
-};
-
-struct trace_event_data_offsets_module_request {
-	u32 name;
-};
-
-typedef void (*btf_trace_module_load)(void *, struct module *);
-
-typedef void (*btf_trace_module_free)(void *, struct module *);
-
-typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);
-
-typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);
-
-struct mod_tree_root {
-	struct latch_tree_root root;
-	long unsigned int addr_min;
-	long unsigned int addr_max;
-};
-
-struct find_symbol_arg {
-	const char *name;
-	bool gplok;
-	bool warn;
-	struct module *owner;
-	const s32 *crc;
-	const struct kernel_symbol *sym;
-	enum mod_license license;
-};
-
-struct mod_initfree {
-	struct llist_node node;
-	void *module_init;
-};
-
-struct module_signature {
-	u8 algo;
-	u8 hash;
-	u8 id_type;
-	u8 signer_len;
-	u8 key_id_len;
-	u8 __pad[3];
-	__be32 sig_len;
-};
-
 enum pkey_id_type {
 	PKEY_ID_PGP = 0,
 	PKEY_ID_X509 = 1,
@@ -25777,25 +37525,6 @@
 	int show_value;
 };
 
-typedef struct {
-	int val[2];
-} __kernel_fsid_t;
-
-struct kstatfs {
-	long int f_type;
-	long int f_bsize;
-	u64 f_blocks;
-	u64 f_bfree;
-	u64 f_bavail;
-	u64 f_files;
-	u64 f_ffree;
-	__kernel_fsid_t f_fsid;
-	long int f_namelen;
-	long int f_frsize;
-	long int f_flags;
-	long int f_spare[4];
-};
-
 typedef __u16 comp_t;
 
 struct acct_v3 {
@@ -25849,14 +37578,9 @@
 	Elf64_Word n_type;
 };
 
-struct elf_note_section {
-	struct elf64_note n_hdr;
-	u8 n_data[0];
-};
-
 typedef long unsigned int elf_greg_t;
 
-typedef elf_greg_t elf_gregset_t[34];
+typedef elf_greg_t elf_gregset_t[27];
 
 struct elf_siginfo {
 	int si_signo;
@@ -25864,7 +37588,7 @@
 	int si_errno;
 };
 
-struct elf_prstatus {
+struct elf_prstatus_common {
 	struct elf_siginfo pr_info;
 	short int pr_cursig;
 	long unsigned int pr_sigpend;
@@ -25877,11 +37601,15 @@
 	struct __kernel_old_timeval pr_stime;
 	struct __kernel_old_timeval pr_cutime;
 	struct __kernel_old_timeval pr_cstime;
+};
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
 	elf_gregset_t pr_reg;
 	int pr_fpvalid;
 };
 
-typedef u32 note_buf_t[106];
+typedef u32 note_buf_t[92];
 
 struct compat_kexec_segment {
 	compat_uptr_t buf;
@@ -25903,123 +37631,28 @@
 
 typedef struct elf64_phdr Elf64_Phdr;
 
-struct crypto_alg;
-
-struct crypto_tfm {
-	u32 crt_flags;
-	int node;
-	void (*exit)(struct crypto_tfm *);
-	struct crypto_alg *__crt_alg;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__crt_ctx[0];
-};
-
-struct cipher_alg {
-	unsigned int cia_min_keysize;
-	unsigned int cia_max_keysize;
-	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
-	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
-	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
-};
-
-struct compress_alg {
-	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
-};
-
-struct crypto_type;
-
-struct crypto_alg {
-	struct list_head cra_list;
-	struct list_head cra_users;
-	u32 cra_flags;
-	unsigned int cra_blocksize;
-	unsigned int cra_ctxsize;
-	unsigned int cra_alignmask;
-	int cra_priority;
-	refcount_t cra_refcnt;
-	char cra_name[128];
-	char cra_driver_name[128];
-	const struct crypto_type *cra_type;
-	union {
-		struct cipher_alg cipher;
-		struct compress_alg compress;
-	} cra_u;
-	int (*cra_init)(struct crypto_tfm *);
-	void (*cra_exit)(struct crypto_tfm *);
-	void (*cra_destroy)(struct crypto_alg *);
-	struct module *cra_module;
-};
-
-struct crypto_instance;
-
-struct crypto_type {
-	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
-	unsigned int (*extsize)(struct crypto_alg *);
-	int (*init)(struct crypto_tfm *, u32, u32);
-	int (*init_tfm)(struct crypto_tfm *);
-	void (*show)(struct seq_file *, struct crypto_alg *);
-	int (*report)(struct sk_buff *, struct crypto_alg *);
-	void (*free)(struct crypto_instance *);
-	unsigned int type;
-	unsigned int maskclear;
-	unsigned int maskset;
-	unsigned int tfmsize;
-};
-
-struct crypto_shash;
-
-struct shash_desc {
-	struct crypto_shash *tfm;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_shash {
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
 };
 
 struct kexec_sha_region {
@@ -26035,110 +37668,19 @@
 	MR_MEMPOLICY_MBIND = 4,
 	MR_NUMA_MISPLACED = 5,
 	MR_CONTIG_RANGE = 6,
-	MR_TYPES = 7,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
 };
 
-typedef __kernel_ulong_t __kernel_ino_t;
-
-typedef __kernel_ino_t ino_t;
-
-enum kernfs_node_type {
-	KERNFS_DIR = 1,
-	KERNFS_FILE = 2,
-	KERNFS_LINK = 4,
-};
-
-enum kernfs_root_flag {
-	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
-	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
-	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
-	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
-};
-
-struct kernfs_fs_context {
-	struct kernfs_root *root;
-	void *ns_tag;
-	long unsigned int magic;
-	bool new_sb_created;
-};
-
-enum bpf_link_type {
-	BPF_LINK_TYPE_UNSPEC = 0,
-	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
-	BPF_LINK_TYPE_TRACING = 2,
-	BPF_LINK_TYPE_CGROUP = 3,
-	BPF_LINK_TYPE_ITER = 4,
-	BPF_LINK_TYPE_NETNS = 5,
-	BPF_LINK_TYPE_XDP = 6,
-	MAX_BPF_LINK_TYPE = 7,
-};
-
-struct bpf_link_info {
-	__u32 type;
-	__u32 id;
-	__u32 prog_id;
-	union {
-		struct {
-			__u64 tp_name;
-			__u32 tp_name_len;
-		} raw_tracepoint;
-		struct {
-			__u32 attach_type;
-		} tracing;
-		struct {
-			__u64 cgroup_id;
-			__u32 attach_type;
-		} cgroup;
-		struct {
-			__u64 target_name;
-			__u32 target_name_len;
-			union {
-				struct {
-					__u32 map_id;
-				} map;
-			};
-		} iter;
-		struct {
-			__u32 netns_ino;
-			__u32 attach_type;
-		} netns;
-		struct {
-			__u32 ifindex;
-		} xdp;
-	};
-};
-
-struct bpf_link_ops;
-
-struct bpf_link {
-	atomic64_t refcnt;
-	u32 id;
-	enum bpf_link_type type;
-	const struct bpf_link_ops *ops;
-	struct bpf_prog *prog;
-	struct work_struct work;
-};
-
-struct bpf_link_ops {
-	void (*release)(struct bpf_link *);
-	void (*dealloc)(struct bpf_link *);
-	int (*detach)(struct bpf_link *);
-	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
-	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
-	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
-};
-
-struct bpf_cgroup_link {
-	struct bpf_link link;
-	struct cgroup *cgroup;
-	enum bpf_attach_type type;
-};
+typedef __kernel_ulong_t ino_t;
 
 enum {
 	CGRP_NOTIFY_ON_RELEASE = 0,
 	CGRP_CPUSET_CLONE_CHILDREN = 1,
 	CGRP_FREEZE = 2,
 	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
 };
 
 enum {
@@ -26173,6 +37715,22 @@
 	char *release_agent;
 };
 
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
 struct cgrp_cset_link {
 	struct cgroup *cgrp;
 	struct css_set *cset;
@@ -26187,6 +37745,33 @@
 	u16 ss_mask;
 };
 
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
 struct trace_event_raw_cgroup_root {
 	struct trace_entry ent;
 	int root;
@@ -26198,8 +37783,8 @@
 struct trace_event_raw_cgroup {
 	struct trace_entry ent;
 	int root;
-	int id;
 	int level;
+	u64 id;
 	u32 __data_loc_path;
 	char __data[0];
 };
@@ -26207,8 +37792,8 @@
 struct trace_event_raw_cgroup_migrate {
 	struct trace_entry ent;
 	int dst_root;
-	int dst_id;
 	int dst_level;
+	u64 dst_id;
 	int pid;
 	u32 __data_loc_dst_path;
 	u32 __data_loc_comm;
@@ -26218,8 +37803,8 @@
 struct trace_event_raw_cgroup_event {
 	struct trace_entry ent;
 	int root;
-	int id;
 	int level;
+	u64 id;
 	u32 __data_loc_path;
 	int val;
 	char __data[0];
@@ -26268,6 +37853,11 @@
 
 typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
 
+enum cgroup_opt_features {
+	OPT_FEATURE_PRESSURE = 0,
+	OPT_FEATURE_COUNT = 1,
+};
+
 enum cgroup2_param {
 	Opt_nsdelegate = 0,
 	Opt_memory_localevents = 1,
@@ -26332,6 +37922,47 @@
 	atomic64_t events_limit;
 };
 
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+enum rdmacg_resource_type {
+	RDMACG_RESOURCE_HCA_HANDLE = 0,
+	RDMACG_RESOURCE_HCA_OBJECT = 1,
+	RDMACG_RESOURCE_MAX = 2,
+};
+
+struct rdma_cgroup {
+	struct cgroup_subsys_state css;
+	struct list_head rpools;
+};
+
+struct rdmacg_device {
+	struct list_head dev_node;
+	struct list_head rpools;
+	char *name;
+};
+
+enum rdmacg_file_type {
+	RDMACG_RESOURCE_TYPE_MAX = 0,
+	RDMACG_RESOURCE_TYPE_STAT = 1,
+};
+
+struct rdmacg_resource {
+	int max;
+	int usage;
+};
+
+struct rdmacg_resource_pool {
+	struct rdmacg_device *device;
+	struct rdmacg_resource resources[2];
+	struct list_head cg_node;
+	struct list_head dev_node;
+	u64 usage_sum;
+	int num_max_cnt;
+};
+
 struct root_domain___2;
 
 struct fmeter {
@@ -26358,6 +37989,7 @@
 	int partition_root_state;
 	int use_parent_ecpus;
 	int child_ecpus_count;
+	struct cgroup_file partition_file;
 };
 
 struct tmpmasks {
@@ -26409,6 +38041,24 @@
 	FILE_SPREAD_SLAB = 15,
 } cpuset_filetype_t;
 
+enum misc_res_type {
+	MISC_CG_RES_SEV = 0,
+	MISC_CG_RES_SEV_ES = 1,
+	MISC_CG_RES_TYPES = 2,
+};
+
+struct misc_res {
+	long unsigned int max;
+	atomic_long_t usage;
+	atomic_long_t events;
+};
+
+struct misc_cg {
+	struct cgroup_subsys_state css;
+	struct cgroup_file events_file;
+	struct misc_res res[2];
+};
+
 struct kernel_pkey_query {
 	__u32 supported_ops;
 	__u32 key_size;
@@ -26439,6 +38089,7 @@
 };
 
 struct key_preparsed_payload {
+	const char *orig_description;
 	char *description;
 	union key_payload payload;
 	const void *data;
@@ -26464,8 +38115,6 @@
 	const char *procname;
 };
 
-typedef void (*exitcall_t)();
-
 struct cpu_stop_done {
 	atomic_t nr_todo;
 	int ret;
@@ -26478,6 +38127,8 @@
 	bool enabled;
 	struct list_head works;
 	struct cpu_stop_work stop_work;
+	long unsigned int caller;
+	cpu_stop_fn_t fn;
 };
 
 enum multi_stop_state {
@@ -26502,9 +38153,9 @@
 typedef __kernel_mqd_t mqd_t;
 
 enum audit_state {
-	AUDIT_DISABLED = 0,
-	AUDIT_BUILD_CONTEXT = 1,
-	AUDIT_RECORD_CONTEXT = 2,
+	AUDIT_STATE_DISABLED = 0,
+	AUDIT_STATE_BUILD = 1,
+	AUDIT_STATE_RECORD = 2,
 };
 
 struct audit_cap_data {
@@ -26544,6 +38195,12 @@
 	__kernel_long_t __reserved[4];
 };
 
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
 struct audit_proctitle {
 	int len;
 	char *value;
@@ -26557,11 +38214,16 @@
 
 struct audit_context {
 	int dummy;
-	int in_syscall;
+	enum {
+		AUDIT_CTX_UNUSED = 0,
+		AUDIT_CTX_SYSCALL = 1,
+		AUDIT_CTX_URING = 2,
+	} context;
 	enum audit_state state;
 	enum audit_state current_state;
 	unsigned int serial;
 	int major;
+	int uring_op;
 	struct timespec64 ctime;
 	long unsigned int argv[4];
 	long int return_code;
@@ -26642,12 +38304,17 @@
 			int fd;
 			int flags;
 		} mmap;
+		struct open_how openat2;
 		struct {
 			int argc;
 		} execve;
 		struct {
 			char *name;
 		} module;
+		struct {
+			struct audit_ntp_data ntp_data;
+			struct timespec64 tk_injoffset;
+		} time;
 	};
 	int fds[2];
 	struct audit_proctitle proctitle;
@@ -26704,6 +38371,75 @@
 	char ctx[0];
 };
 
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_DROP_REASON_NOT_SPECIFIED = 1,
+	SKB_DROP_REASON_NO_SOCKET = 2,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 3,
+	SKB_DROP_REASON_TCP_CSUM = 4,
+	SKB_DROP_REASON_SOCKET_FILTER = 5,
+	SKB_DROP_REASON_UDP_CSUM = 6,
+	SKB_DROP_REASON_NETFILTER_DROP = 7,
+	SKB_DROP_REASON_OTHERHOST = 8,
+	SKB_DROP_REASON_IP_CSUM = 9,
+	SKB_DROP_REASON_IP_INHDR = 10,
+	SKB_DROP_REASON_IP_RPFILTER = 11,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 12,
+	SKB_DROP_REASON_XFRM_POLICY = 13,
+	SKB_DROP_REASON_IP_NOPROTO = 14,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 15,
+	SKB_DROP_REASON_PROTO_MEM = 16,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 17,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 18,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 19,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 20,
+	SKB_DROP_REASON_TCP_FLAGS = 21,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 22,
+	SKB_DROP_REASON_TCP_OLD_DATA = 23,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 24,
+	SKB_DROP_REASON_TCP_OFOMERGE = 25,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 26,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 27,
+	SKB_DROP_REASON_TCP_RESET = 28,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 29,
+	SKB_DROP_REASON_TCP_CLOSE = 30,
+	SKB_DROP_REASON_TCP_FASTOPEN = 31,
+	SKB_DROP_REASON_TCP_OLD_ACK = 32,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 33,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 34,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 35,
+	SKB_DROP_REASON_TCP_OFO_DROP = 36,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 37,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 38,
+	SKB_DROP_REASON_IPV6DISABLED = 39,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 40,
+	SKB_DROP_REASON_NEIGH_FAILED = 41,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 42,
+	SKB_DROP_REASON_NEIGH_DEAD = 43,
+	SKB_DROP_REASON_TC_EGRESS = 44,
+	SKB_DROP_REASON_QDISC_DROP = 45,
+	SKB_DROP_REASON_CPU_BACKLOG = 46,
+	SKB_DROP_REASON_XDP = 47,
+	SKB_DROP_REASON_TC_INGRESS = 48,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 49,
+	SKB_DROP_REASON_SKB_CSUM = 50,
+	SKB_DROP_REASON_SKB_GSO_SEG = 51,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 52,
+	SKB_DROP_REASON_DEV_HDR = 53,
+	SKB_DROP_REASON_DEV_READY = 54,
+	SKB_DROP_REASON_FULL_RING = 55,
+	SKB_DROP_REASON_NOMEM = 56,
+	SKB_DROP_REASON_HDR_TRUNC = 57,
+	SKB_DROP_REASON_TAP_FILTER = 58,
+	SKB_DROP_REASON_TAP_TXFILTER = 59,
+	SKB_DROP_REASON_ICMP_CSUM = 60,
+	SKB_DROP_REASON_INVALID_PROTO = 61,
+	SKB_DROP_REASON_IP_INADDRERRORS = 62,
+	SKB_DROP_REASON_IP_INNOROUTES = 63,
+	SKB_DROP_REASON_PKT_TOO_BIG = 64,
+	SKB_DROP_REASON_MAX = 65,
+};
+
 struct net_generic {
 	union {
 		struct {
@@ -26862,6 +38598,13 @@
 
 typedef __kernel_key_t key_t;
 
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	kuid_t rootid;
+};
+
 struct kern_ipc_perm {
 	spinlock_t lock;
 	bool deleted;
@@ -26885,13 +38628,6 @@
 	long: 64;
 };
 
-struct cpu_vfs_cap_data {
-	__u32 magic_etc;
-	kernel_cap_t permitted;
-	kernel_cap_t inheritable;
-	kuid_t rootid;
-};
-
 typedef struct fsnotify_mark_connector *fsnotify_connp_t;
 
 struct fsnotify_mark_connector {
@@ -26929,13 +38665,13 @@
 	AUDIT_NFT_OP_INVALID = 19,
 };
 
-enum fsnotify_obj_type {
-	FSNOTIFY_OBJ_TYPE_INODE = 0,
-	FSNOTIFY_OBJ_TYPE_PARENT = 1,
-	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 2,
-	FSNOTIFY_OBJ_TYPE_SB = 3,
-	FSNOTIFY_OBJ_TYPE_COUNT = 4,
-	FSNOTIFY_OBJ_TYPE_DETACHED = 4,
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
 };
 
 struct audit_aux_data {
@@ -26999,7 +38735,7 @@
 	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
 	void (*free_group_priv)(struct fsnotify_group *);
 	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
-	void (*free_event)(struct fsnotify_event *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
 	void (*free_mark)(struct fsnotify_mark *);
 };
 
@@ -27010,12 +38746,13 @@
 };
 
 struct fanotify_group_private_data {
+	struct hlist_head *merge_hash;
 	struct list_head access_list;
 	wait_queue_head_t access_waitq;
 	int flags;
 	int f_flags;
-	unsigned int max_marks;
-	struct user_struct *user;
+	struct ucounts *ucounts;
+	mempool_t error_events_pool;
 };
 
 struct fsnotify_group {
@@ -27028,8 +38765,9 @@
 	unsigned int max_events;
 	unsigned int priority;
 	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
 	struct mutex mark_mutex;
-	atomic_t num_marks;
 	atomic_t user_waits;
 	struct list_head marks_list;
 	struct fasync_struct *fsn_fa;
@@ -27043,7 +38781,8 @@
 };
 
 struct fsnotify_iter_info {
-	struct fsnotify_mark *marks[4];
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
 	unsigned int report_mask;
 	int srcu_idx;
 };
@@ -27062,7 +38801,15 @@
 
 struct fsnotify_event {
 	struct list_head list;
-	long unsigned int objectid;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = 4294967295,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
 };
 
 struct audit_parent {
@@ -27092,7 +38839,7 @@
 	char pathname[0];
 };
 
-struct node {
+struct audit_node {
 	struct list_head list;
 	struct audit_tree *owner;
 	unsigned int index;
@@ -27106,7 +38853,7 @@
 	int count;
 	atomic_long_t refs;
 	struct callback_head head;
-	struct node owners[0];
+	struct audit_node owners[0];
 };
 
 struct audit_tree_mark {
@@ -27118,6 +38865,25 @@
 	HASH_SIZE = 128,
 };
 
+struct kretprobe_instance;
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct kretprobe_instance {
+	struct rethook_node node;
+	char data[0];
+};
+
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct rethook *rh;
+};
+
 struct kprobe_blacklist_entry {
 	struct list_head list;
 	long unsigned int start_addr;
@@ -27146,42 +38912,6 @@
 	SLOT_USED = 2,
 };
 
-struct serial_icounter_struct {
-	int cts;
-	int dsr;
-	int rng;
-	int dcd;
-	int rx;
-	int tx;
-	int frame;
-	int overrun;
-	int parity;
-	int brk;
-	int buf_overrun;
-	int reserved[9];
-};
-
-struct serial_struct {
-	int type;
-	int line;
-	unsigned int port;
-	int irq;
-	int flags;
-	int xmit_fifo_size;
-	int custom_divisor;
-	int baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char[1];
-	int hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	unsigned char *iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	long unsigned int iomap_base;
-};
-
 struct kgdb_io {
 	const char *name;
 	int (*read_char)();
@@ -27223,6 +38953,117 @@
 	bool rounding_up;
 };
 
+typedef int (*get_char_func)();
+
+typedef enum {
+	KDB_ENABLE_ALL = 1,
+	KDB_ENABLE_MEM_READ = 2,
+	KDB_ENABLE_MEM_WRITE = 4,
+	KDB_ENABLE_REG_READ = 8,
+	KDB_ENABLE_REG_WRITE = 16,
+	KDB_ENABLE_INSPECT = 32,
+	KDB_ENABLE_FLOW_CTRL = 64,
+	KDB_ENABLE_SIGNAL = 128,
+	KDB_ENABLE_REBOOT = 256,
+	KDB_ENABLE_ALWAYS_SAFE = 512,
+	KDB_ENABLE_MASK = 1023,
+	KDB_ENABLE_ALL_NO_ARGS = 1024,
+	KDB_ENABLE_MEM_READ_NO_ARGS = 2048,
+	KDB_ENABLE_MEM_WRITE_NO_ARGS = 4096,
+	KDB_ENABLE_REG_READ_NO_ARGS = 8192,
+	KDB_ENABLE_REG_WRITE_NO_ARGS = 16384,
+	KDB_ENABLE_INSPECT_NO_ARGS = 32768,
+	KDB_ENABLE_FLOW_CTRL_NO_ARGS = 65536,
+	KDB_ENABLE_SIGNAL_NO_ARGS = 131072,
+	KDB_ENABLE_REBOOT_NO_ARGS = 262144,
+	KDB_ENABLE_ALWAYS_SAFE_NO_ARGS = 524288,
+	KDB_ENABLE_MASK_NO_ARGS = 1047552,
+	KDB_REPEAT_NO_ARGS = 1073741824,
+	KDB_REPEAT_WITH_ARGS = 2147483648,
+} kdb_cmdflags_t;
+
+typedef int (*kdb_func_t)(int, const char **);
+
+struct _kdbtab {
+	char *name;
+	kdb_func_t func;
+	char *usage;
+	char *help;
+	short int minlen;
+	kdb_cmdflags_t flags;
+	struct list_head list_node;
+};
+
+typedef struct _kdbtab kdbtab_t;
+
+typedef enum {
+	KDB_REASON_ENTER = 1,
+	KDB_REASON_ENTER_SLAVE = 2,
+	KDB_REASON_BREAK = 3,
+	KDB_REASON_DEBUG = 4,
+	KDB_REASON_OOPS = 5,
+	KDB_REASON_SWITCH = 6,
+	KDB_REASON_KEYBOARD = 7,
+	KDB_REASON_NMI = 8,
+	KDB_REASON_RECURSE = 9,
+	KDB_REASON_SSTEP = 10,
+	KDB_REASON_SYSTEM_NMI = 11,
+} kdb_reason_t;
+
+struct __ksymtab {
+	long unsigned int value;
+	const char *mod_name;
+	long unsigned int mod_start;
+	long unsigned int mod_end;
+	const char *sec_name;
+	long unsigned int sec_start;
+	long unsigned int sec_end;
+	const char *sym_name;
+	long unsigned int sym_start;
+	long unsigned int sym_end;
+};
+
+typedef struct __ksymtab kdb_symtab_t;
+
+typedef enum {
+	KDB_DB_BPT = 0,
+	KDB_DB_SS = 1,
+	KDB_DB_SSBPT = 2,
+	KDB_DB_NOBPT = 3,
+} kdb_dbtrap_t;
+
+struct _kdbmsg {
+	int km_diag;
+	char *km_msg;
+};
+
+typedef struct _kdbmsg kdbmsg_t;
+
+struct kdb_macro {
+	kdbtab_t cmd;
+	struct list_head statements;
+};
+
+struct kdb_macro_statement {
+	char *statement;
+	struct list_head list_node;
+};
+
+struct _kdb_bp {
+	long unsigned int bp_addr;
+	unsigned int bp_free: 1;
+	unsigned int bp_enabled: 1;
+	unsigned int bp_type: 4;
+	unsigned int bp_installed: 1;
+	unsigned int bp_delay: 1;
+	unsigned int bp_delayed: 1;
+	unsigned int bph_length;
+};
+
+typedef struct _kdb_bp kdb_bp_t;
+
+typedef short unsigned int u_short;
+
 struct seccomp_data {
 	int nr;
 	__u32 arch;
@@ -27258,12 +39099,19 @@
 	__u32 newfd_flags;
 };
 
+struct action_cache {
+	long unsigned int allow_native[8];
+	long unsigned int allow_compat[8];
+};
+
 struct notification;
 
 struct seccomp_filter {
 	refcount_t refs;
 	refcount_t users;
 	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
 	struct seccomp_filter *prev;
 	struct bpf_prog *prog;
 	struct notification *notif;
@@ -27286,6 +39134,8 @@
 	compat_uptr_t filter;
 };
 
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
 enum notify_state {
 	SECCOMP_NOTIFY_INIT = 0,
 	SECCOMP_NOTIFY_SENT = 1,
@@ -27309,7 +39159,11 @@
 	struct file *file;
 	int fd;
 	unsigned int flags;
-	int ret;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
 	struct completion completion;
 	struct list_head list;
 };
@@ -27349,7 +39203,6 @@
 	long: 32;
 	long: 64;
 	long: 64;
-	long: 64;
 };
 
 struct rchan_callbacks;
@@ -27359,7 +39212,7 @@
 	size_t subbuf_size;
 	size_t n_subbufs;
 	size_t alloc_size;
-	struct rchan_callbacks *cb;
+	const struct rchan_callbacks *cb;
 	struct kref kref;
 	void *private_data;
 	size_t last_toobig;
@@ -27373,8 +39226,6 @@
 
 struct rchan_callbacks {
 	int (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);
-	void (*buf_mapped)(struct rchan_buf *, struct file *);
-	void (*buf_unmapped)(struct rchan_buf *, struct file *);
 	struct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);
 	int (*remove_buf_file)(struct dentry *);
 };
@@ -27468,6 +39319,7 @@
 
 struct genl_multicast_group {
 	char name[16];
+	u8 flags;
 };
 
 struct genl_ops;
@@ -27559,32 +39411,30 @@
 	struct module *mod;
 };
 
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_transition_snapshot {
+	long unsigned int rcu;
+	long unsigned int srcu;
+	bool ongoing;
+};
+
 struct tp_probes {
 	struct callback_head rcu;
 	struct tracepoint_func probes[0];
 };
 
-enum {
-	FTRACE_OPS_FL_ENABLED = 1,
-	FTRACE_OPS_FL_DYNAMIC = 2,
-	FTRACE_OPS_FL_SAVE_REGS = 4,
-	FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,
-	FTRACE_OPS_FL_RECURSION_SAFE = 16,
-	FTRACE_OPS_FL_STUB = 32,
-	FTRACE_OPS_FL_INITIALIZED = 64,
-	FTRACE_OPS_FL_DELETED = 128,
-	FTRACE_OPS_FL_ADDING = 256,
-	FTRACE_OPS_FL_REMOVING = 512,
-	FTRACE_OPS_FL_MODIFYING = 1024,
-	FTRACE_OPS_FL_ALLOC_TRAMP = 2048,
-	FTRACE_OPS_FL_IPMODIFY = 4096,
-	FTRACE_OPS_FL_PID = 8192,
-	FTRACE_OPS_FL_RCU = 16384,
-	FTRACE_OPS_FL_TRACE_ARRAY = 32768,
-	FTRACE_OPS_FL_PERMANENT = 65536,
-	FTRACE_OPS_FL_DIRECT = 131072,
-};
-
 struct ftrace_hash {
 	long unsigned int size_bits;
 	struct hlist_head *buckets;
@@ -27608,22 +39458,12 @@
 };
 
 enum {
-	FTRACE_FL_ENABLED = 2147483648,
-	FTRACE_FL_REGS = 1073741824,
-	FTRACE_FL_REGS_EN = 536870912,
-	FTRACE_FL_TRAMP = 268435456,
-	FTRACE_FL_TRAMP_EN = 134217728,
-	FTRACE_FL_IPMODIFY = 67108864,
-	FTRACE_FL_DISABLED = 33554432,
-	FTRACE_FL_DIRECT = 16777216,
-	FTRACE_FL_DIRECT_EN = 8388608,
-};
-
-enum {
-	FTRACE_UPDATE_IGNORE = 0,
-	FTRACE_UPDATE_MAKE_CALL = 1,
-	FTRACE_UPDATE_MODIFY_CALL = 2,
-	FTRACE_UPDATE_MAKE_NOP = 3,
+	FTRACE_UPDATE_CALLS = 1,
+	FTRACE_DISABLE_CALLS = 2,
+	FTRACE_UPDATE_TRACE_FUNC = 4,
+	FTRACE_START_FUNC_RET = 8,
+	FTRACE_STOP_FUNC_RET = 16,
+	FTRACE_MAY_SLEEP = 32,
 };
 
 enum {
@@ -27636,6 +39476,28 @@
 	FTRACE_ITER_ENABLED = 64,
 };
 
+struct ftrace_graph_ent {
+	long unsigned int func;
+	int depth;
+} __attribute__((packed));
+
+struct ftrace_graph_ret {
+	long unsigned int func;
+	int depth;
+	unsigned int overrun;
+	long long unsigned int calltime;
+	long long unsigned int rettime;
+};
+
+typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
+
+typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
+
+struct fgraph_ops {
+	trace_func_graph_ent_t entryfunc;
+	trace_func_graph_ret_t retfunc;
+};
+
 struct prog_entry;
 
 struct event_filter {
@@ -27657,18 +39519,28 @@
 
 struct trace_options;
 
+struct cond_snapshot;
+
+struct trace_func_repeats;
+
 struct trace_array {
 	struct list_head list;
 	char *name;
 	struct array_buffer array_buffer;
+	struct array_buffer max_buffer;
+	bool allocated_snapshot;
+	long unsigned int max_latency;
+	struct dentry *d_max_latency;
+	struct work_struct fsnotify_work;
+	struct irq_work fsnotify_irqwork;
 	struct trace_pid_list *filtered_pids;
 	struct trace_pid_list *filtered_no_pids;
 	arch_spinlock_t max_lock;
 	int buffer_disabled;
 	int sys_refcount_enter;
 	int sys_refcount_exit;
-	struct trace_event_file *enter_syscall_files[441];
-	struct trace_event_file *exit_syscall_files[441];
+	struct trace_event_file *enter_syscall_files[451];
+	struct trace_event_file *exit_syscall_files[451];
 	int stop_count;
 	int clock_id;
 	int nr_topts;
@@ -27699,8 +39571,10 @@
 	struct list_head mod_trace;
 	struct list_head mod_notrace;
 	int function_enabled;
-	int time_stamp_abs_ref;
+	int no_filter_buffering_ref;
 	struct list_head hist_vars;
+	struct cond_snapshot *cond_snapshot;
+	struct trace_func_repeats *last_func_repeats;
 };
 
 struct tracer_flags;
@@ -27727,6 +39601,7 @@
 	int enabled;
 	bool print_max;
 	bool allow_instances;
+	bool use_max_tr;
 	bool noboot;
 };
 
@@ -27741,6 +39616,26 @@
 	int nr_events;
 };
 
+union lower_chunk {
+	union lower_chunk *next;
+	long unsigned int data[256];
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
 struct trace_array_cpu {
 	atomic_t disabled;
 	void *buffer_page;
@@ -27777,16 +39672,25 @@
 	struct dentry *entry;
 };
 
-struct trace_pid_list {
-	int pid_max;
-	long unsigned int *pids;
-};
-
 enum {
 	TRACE_PIDS = 1,
 	TRACE_NO_PIDS = 2,
 };
 
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct cond_snapshot {
+	void *cond_data;
+	cond_update_fn_t update;
+};
+
+struct trace_func_repeats {
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	long unsigned int count;
+	u64 ts_last_call;
+};
+
 enum {
 	TRACE_ARRAY_FL_GLOBAL = 1,
 };
@@ -27802,24 +39706,6 @@
 	struct tracer *trace;
 };
 
-enum {
-	TRACE_FTRACE_BIT = 0,
-	TRACE_FTRACE_NMI_BIT = 1,
-	TRACE_FTRACE_IRQ_BIT = 2,
-	TRACE_FTRACE_SIRQ_BIT = 3,
-	TRACE_INTERNAL_BIT = 4,
-	TRACE_INTERNAL_NMI_BIT = 5,
-	TRACE_INTERNAL_IRQ_BIT = 6,
-	TRACE_INTERNAL_SIRQ_BIT = 7,
-	TRACE_BRANCH_BIT = 8,
-	TRACE_IRQ_BIT = 9,
-	TRACE_GRAPH_BIT = 10,
-	TRACE_GRAPH_DEPTH_START_BIT = 11,
-	TRACE_GRAPH_DEPTH_END_BIT = 12,
-	TRACE_GRAPH_NOTRACE_BIT = 13,
-	TRACE_TRANSITION_BIT = 14,
-};
-
 struct ftrace_mod_load {
 	struct list_head list;
 	char *func;
@@ -27877,11 +39763,12 @@
 	TRACE_ITER_MARKERS_BIT = 20,
 	TRACE_ITER_EVENT_FORK_BIT = 21,
 	TRACE_ITER_PAUSE_ON_TRACE_BIT = 22,
-	TRACE_ITER_FUNCTION_BIT = 23,
-	TRACE_ITER_FUNC_FORK_BIT = 24,
-	TRACE_ITER_DISPLAY_GRAPH_BIT = 25,
-	TRACE_ITER_STACKTRACE_BIT = 26,
-	TRACE_ITER_LAST_BIT = 27,
+	TRACE_ITER_HASH_PTR_BIT = 23,
+	TRACE_ITER_FUNCTION_BIT = 24,
+	TRACE_ITER_FUNC_FORK_BIT = 25,
+	TRACE_ITER_DISPLAY_GRAPH_BIT = 26,
+	TRACE_ITER_STACKTRACE_BIT = 27,
+	TRACE_ITER_LAST_BIT = 28,
 };
 
 struct event_subsystem {
@@ -27900,11 +39787,43 @@
 	MATCH_INDEX = 5,
 };
 
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
 enum {
 	FTRACE_MODIFY_ENABLE_FL = 1,
 	FTRACE_MODIFY_MAY_SLEEP_FL = 2,
 };
 
+struct ftrace_profile {
+	struct hlist_node node;
+	long unsigned int ip;
+	long unsigned int counter;
+	long long unsigned int time;
+	long long unsigned int time_squared;
+};
+
+struct ftrace_profile_page {
+	struct ftrace_profile_page *next;
+	long unsigned int index;
+	struct ftrace_profile records[0];
+};
+
+struct ftrace_profile_stat {
+	atomic_t disabled;
+	struct hlist_head *hash;
+	struct ftrace_profile_page *pages;
+	struct ftrace_profile_page *start;
+	struct tracer_stat stat;
+};
+
 struct ftrace_func_probe {
 	struct ftrace_probe_ops *probe_ops;
 	struct ftrace_ops ops;
@@ -27918,10 +39837,10 @@
 	struct ftrace_page *next;
 	struct dyn_ftrace *records;
 	int index;
-	int size;
+	int order;
 };
 
-struct ftrace_rec_iter {
+struct ftrace_rec_iter___2 {
 	struct ftrace_page *pg;
 	int index;
 };
@@ -27959,6 +39878,12 @@
 	struct ftrace_hash hash;
 };
 
+struct ftrace_direct_func {
+	struct list_head next;
+	long unsigned int addr;
+	int count;
+};
+
 enum graph_filter_type {
 	GRAPH_FILTER_NOTRACE = 0,
 	GRAPH_FILTER_FUNCTION = 1,
@@ -27996,6 +39921,13 @@
 	long unsigned int ip;
 };
 
+struct kallsyms_data {
+	long unsigned int *addrs;
+	const char **syms;
+	size_t cnt;
+	size_t found;
+};
+
 enum ring_buffer_type {
 	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
 	RINGBUF_TYPE_PADDING = 29,
@@ -28133,6 +40065,7 @@
 	long unsigned int read_bytes;
 	rb_time_t write_stamp;
 	rb_time_t before_stamp;
+	u64 event_stamp[5];
 	u64 read_stamp;
 	long int nr_pages_to_update;
 	struct list_head new_pages;
@@ -28147,12 +40080,31 @@
 	int flags;
 };
 
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
 enum trace_iter_flags {
 	TRACE_FILE_LAT_FMT = 1,
 	TRACE_FILE_ANNOTATE = 2,
 	TRACE_FILE_TIME_IN_NS = 4,
 };
 
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
 enum event_trigger_type {
 	ETT_NONE = 0,
 	ETT_TRACE_ONOFF = 1,
@@ -28161,6 +40113,7 @@
 	ETT_EVENT_ENABLE = 8,
 	ETT_EVENT_HIST = 16,
 	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
 };
 
 enum trace_type {
@@ -28180,8 +40133,11 @@
 	TRACE_BLK = 13,
 	TRACE_BPUTS = 14,
 	TRACE_HWLAT = 15,
-	TRACE_RAW_DATA = 16,
-	__TRACE_LAST_TYPE = 17,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
 };
 
 struct ftrace_entry {
@@ -28196,6 +40152,12 @@
 	long unsigned int caller[8];
 };
 
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	long unsigned int caller[8];
+};
+
 struct bprint_entry {
 	struct trace_entry ent;
 	long unsigned int ip;
@@ -28221,18 +40183,15 @@
 	const char *str;
 };
 
-enum trace_flag_type {
-	TRACE_FLAG_IRQS_OFF = 1,
-	TRACE_FLAG_IRQS_NOSUPPORT = 2,
-	TRACE_FLAG_NEED_RESCHED = 4,
-	TRACE_FLAG_HARDIRQ = 8,
-	TRACE_FLAG_SOFTIRQ = 16,
-	TRACE_FLAG_PREEMPT_RESCHED = 32,
-	TRACE_FLAG_NMI = 64,
+struct func_repeats_entry {
+	struct trace_entry ent;
+	long unsigned int ip;
+	long unsigned int parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
 };
 
-typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
-
 enum trace_iterator_flags {
 	TRACE_ITER_PRINT_PARENT = 1,
 	TRACE_ITER_SYM_OFFSET = 2,
@@ -28257,10 +40216,18 @@
 	TRACE_ITER_MARKERS = 1048576,
 	TRACE_ITER_EVENT_FORK = 2097152,
 	TRACE_ITER_PAUSE_ON_TRACE = 4194304,
-	TRACE_ITER_FUNCTION = 8388608,
-	TRACE_ITER_FUNC_FORK = 16777216,
-	TRACE_ITER_DISPLAY_GRAPH = 33554432,
-	TRACE_ITER_STACKTRACE = 67108864,
+	TRACE_ITER_HASH_PTR = 8388608,
+	TRACE_ITER_FUNCTION = 16777216,
+	TRACE_ITER_FUNC_FORK = 33554432,
+	TRACE_ITER_DISPLAY_GRAPH = 67108864,
+	TRACE_ITER_STACKTRACE = 134217728,
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
 };
 
 struct saved_cmdlines_buffer {
@@ -28294,7 +40261,7 @@
 struct err_info {
 	const char **errs;
 	u8 type;
-	u8 pos;
+	u16 pos;
 	u64 ts;
 };
 
@@ -28302,7 +40269,7 @@
 	struct list_head list;
 	struct err_info info;
 	char loc[128];
-	char cmd[256];
+	char *cmd;
 };
 
 struct buffer_ref {
@@ -28312,6 +40279,8 @@
 	refcount_t refcount;
 };
 
+struct ftrace_func_mapper___2;
+
 struct ctx_switch_entry {
 	struct trace_entry ent;
 	unsigned int prev_pid;
@@ -28323,12 +40292,6 @@
 	unsigned char next_state;
 };
 
-struct userstack_entry {
-	struct trace_entry ent;
-	unsigned int tgid;
-	long unsigned int caller[8];
-};
-
 struct hwlat_entry {
 	struct trace_entry ent;
 	u64 duration;
@@ -28340,23 +40303,30 @@
 	unsigned int count;
 };
 
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
 struct trace_mark {
 	long long unsigned int val;
 	char sym;
 };
 
-typedef int (*cmp_func_t)(const void *, const void *);
-
-struct tracer_stat {
-	const char *name;
-	void * (*stat_start)(struct tracer_stat *);
-	void * (*stat_next)(void *, int);
-	cmp_func_t stat_cmp;
-	int (*stat_show)(struct seq_file *, void *);
-	void (*stat_release)(void *);
-	int (*stat_headers)(struct seq_file *);
-};
-
 struct stat_node {
 	struct rb_node node;
 	void *stat;
@@ -28375,37 +40345,141 @@
 	const char *fmt;
 };
 
-enum {
-	TRACE_FUNC_OPT_STACK = 1,
+typedef int (*tracing_map_cmp_fn_t)(void *, void *);
+
+struct tracing_map_field {
+	tracing_map_cmp_fn_t cmp_fn;
+	union {
+		atomic64_t sum;
+		unsigned int offset;
+	};
 };
 
-struct ftrace_func_mapper___2;
+struct tracing_map;
+
+struct tracing_map_elt {
+	struct tracing_map *map;
+	struct tracing_map_field *fields;
+	atomic64_t *vars;
+	bool *var_set;
+	void *key;
+	void *private_data;
+};
+
+struct tracing_map_sort_key {
+	unsigned int field_idx;
+	bool descending;
+};
+
+struct tracing_map_array;
+
+struct tracing_map_ops;
+
+struct tracing_map {
+	unsigned int key_size;
+	unsigned int map_bits;
+	unsigned int map_size;
+	unsigned int max_elts;
+	atomic_t next_elt;
+	struct tracing_map_array *elts;
+	struct tracing_map_array *map;
+	const struct tracing_map_ops *ops;
+	void *private_data;
+	struct tracing_map_field fields[6];
+	unsigned int n_fields;
+	int key_idx[3];
+	unsigned int n_keys;
+	struct tracing_map_sort_key sort_key;
+	unsigned int n_vars;
+	atomic64_t hits;
+	atomic64_t drops;
+};
+
+struct tracing_map_entry {
+	u32 key;
+	struct tracing_map_elt *val;
+};
+
+struct tracing_map_sort_entry {
+	void *key;
+	struct tracing_map_elt *elt;
+	bool elt_copied;
+	bool dup;
+};
+
+struct tracing_map_array {
+	unsigned int entries_per_page;
+	unsigned int entry_size_shift;
+	unsigned int entry_shift;
+	unsigned int entry_mask;
+	unsigned int n_pages;
+	void **pages;
+};
+
+struct tracing_map_ops {
+	int (*elt_alloc)(struct tracing_map_elt *);
+	void (*elt_free)(struct tracing_map_elt *);
+	void (*elt_clear)(struct tracing_map_elt *);
+	void (*elt_init)(struct tracing_map_elt *);
+};
+
+enum {
+	TRACE_FUNC_NO_OPTS = 0,
+	TRACE_FUNC_OPT_STACK = 1,
+	TRACE_FUNC_OPT_NO_REPEATS = 2,
+	TRACE_FUNC_OPT_HIGHEST_BIT = 4,
+};
+
+enum {
+	MODE_NONE = 0,
+	MODE_ROUND_ROBIN = 1,
+	MODE_PER_CPU = 2,
+	MODE_MAX = 3,
+};
+
+struct hwlat_kthread_data {
+	struct task_struct *kthread;
+	u64 nmi_ts_start;
+	u64 nmi_total_ts;
+	int nmi_count;
+	int nmi_cpu;
+};
+
+struct hwlat_sample {
+	u64 seqnum;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	int nmi_count;
+	int count;
+};
+
+struct hwlat_data {
+	struct mutex lock;
+	u64 count;
+	u64 sample_window;
+	u64 sample_width;
+	int thread_mode;
+};
 
 enum {
 	TRACE_NOP_OPT_ACCEPT = 1,
 	TRACE_NOP_OPT_REFUSE = 2,
 };
 
-struct ftrace_graph_ent {
-	long unsigned int func;
-	int depth;
-} __attribute__((packed));
+struct trace_mmiotrace_rw {
+	struct trace_entry ent;
+	struct mmiotrace_rw rw;
+};
 
-struct ftrace_graph_ret {
-	long unsigned int func;
-	long unsigned int overrun;
-	long long unsigned int calltime;
-	long long unsigned int rettime;
-	int depth;
-} __attribute__((packed));
+struct trace_mmiotrace_map {
+	struct trace_entry ent;
+	struct mmiotrace_map map;
+};
 
-typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);
-
-typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);
-
-struct fgraph_ops {
-	trace_func_graph_ent_t entryfunc;
-	trace_func_graph_ret_t retfunc;
+struct header_iter {
+	struct pci_dev *dev;
 };
 
 struct ftrace_graph_ent_entry {
@@ -28416,7 +40490,7 @@
 struct ftrace_graph_ret_entry {
 	struct trace_entry ent;
 	struct ftrace_graph_ret ret;
-} __attribute__((packed));
+};
 
 struct fgraph_cpu_data {
 	pid_t last_pid;
@@ -28432,6 +40506,7 @@
 	struct ftrace_graph_ret_entry ret;
 	int failed;
 	int cpu;
+	int: 32;
 } __attribute__((packed));
 
 enum {
@@ -28447,50 +40522,185 @@
 	u64 bc_dun[4];
 };
 
-typedef __u32 blk_mq_req_flags_t;
-
-struct disk_stats {
-	u64 nsecs[4];
-	long unsigned int sectors[4];
-	long unsigned int ios[4];
-	long unsigned int merges[4];
-	long unsigned int io_ticks;
-	local_t in_flight[2];
-};
-
-struct blk_mq_ctxs;
-
-struct blk_mq_ctx {
-	struct {
-		spinlock_t lock;
-		struct list_head rq_lists[3];
-		long: 64;
-	};
-	unsigned int cpu;
-	short unsigned int index_hw[3];
-	struct blk_mq_hw_ctx *hctxs[3];
-	long unsigned int rq_dispatched[2];
-	long unsigned int rq_merged;
-	long unsigned int rq_completed[2];
-	struct request_queue *queue;
-	struct blk_mq_ctxs *ctxs;
-	struct kobject kobj;
+struct sbitmap_word {
+	long unsigned int word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int cleared;
+	long: 64;
+	long: 64;
+	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 };
 
-struct sbitmap_word;
-
 struct sbitmap {
 	unsigned int depth;
 	unsigned int shift;
 	unsigned int map_nr;
+	bool round_robin;
 	struct sbitmap_word *map;
+	unsigned int *alloc_hint;
 };
 
-struct blk_mq_tags;
+struct sbq_wait_state {
+	atomic_t wait_cnt;
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+};
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+typedef void rq_end_io_fn(struct request *, blk_status_t);
+
+struct blk_crypto_keyslot;
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	unsigned int cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	short unsigned int wbt_flags;
+	short unsigned int stats_sectors;
+	short unsigned int nr_phys_segments;
+	short unsigned int nr_integrity_segments;
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_crypto_keyslot *crypt_keyslot;
+	short unsigned int write_hint;
+	short unsigned int ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	long unsigned int deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+		void *completion_data;
+	};
+	union {
+		struct {
+			struct io_cq *icq;
+			void *priv[2];
+		} elv;
+		struct {
+			unsigned int seq;
+			struct list_head list;
+			rq_end_io_fn *saved_end_io;
+		} flush;
+	};
+	union {
+		struct __call_single_data csd;
+		u64 fifo_time;
+	};
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	atomic_t active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+};
+
+struct blk_trace {
+	int trace_state;
+	struct rchan *rchan;
+	long unsigned int *sequence;
+	unsigned char *msg_data;
+	u16 act_mask;
+	u64 start_lba;
+	u64 end_lba;
+	u32 pid;
+	u32 dev;
+	struct dentry *dir;
+	struct list_head running_list;
+	atomic_t dropped;
+};
+
+struct blk_flush_queue {
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	long unsigned int flush_pending_since;
+	struct list_head flush_queue[2];
+	struct list_head flush_data_in_flight;
+	struct request *flush_rq;
+	spinlock_t mq_flush_lock;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	const struct blk_mq_ops *ops;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+};
 
 struct blk_mq_hw_ctx {
 	struct {
@@ -28524,111 +40734,25 @@
 	struct blk_mq_tags *sched_tags;
 	long unsigned int queued;
 	long unsigned int run;
-	long unsigned int dispatched[7];
 	unsigned int numa_node;
 	unsigned int queue_num;
 	atomic_t nr_active;
-	atomic_t elevator_queued;
 	struct hlist_node cpuhp_online;
 	struct hlist_node cpuhp_dead;
 	struct kobject kobj;
-	long unsigned int poll_considered;
-	long unsigned int poll_invoked;
-	long unsigned int poll_success;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
 	struct list_head hctx_list;
-	struct srcu_struct srcu[0];
 	long: 64;
 	long: 64;
 };
 
-struct blk_mq_alloc_data {
-	struct request_queue *q;
-	blk_mq_req_flags_t flags;
-	unsigned int shallow_depth;
-	unsigned int cmd_flags;
-	struct blk_mq_ctx *ctx;
-	struct blk_mq_hw_ctx *hctx;
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
 };
 
-struct blk_stat_callback {
-	struct list_head list;
-	struct timer_list timer;
-	struct blk_rq_stat *cpu_stat;
-	int (*bucket_fn)(const struct request *);
-	unsigned int buckets;
-	struct blk_rq_stat *stat;
-	void (*timer_fn)(struct blk_stat_callback *);
-	void *data;
-	struct callback_head rcu;
-};
-
-struct blk_trace {
-	int trace_state;
-	struct rchan *rchan;
-	long unsigned int *sequence;
-	unsigned char *msg_data;
-	u16 act_mask;
-	u64 start_lba;
-	u64 end_lba;
-	u32 pid;
-	u32 dev;
-	struct dentry *dir;
-	struct dentry *dropped_file;
-	struct dentry *msg_file;
-	struct list_head running_list;
-	atomic_t dropped;
-};
-
-struct blk_flush_queue {
-	unsigned int flush_pending_idx: 1;
-	unsigned int flush_running_idx: 1;
-	blk_status_t rq_status;
-	long unsigned int flush_pending_since;
-	struct list_head flush_queue[2];
-	struct list_head flush_data_in_flight;
-	struct request *flush_rq;
-	struct lock_class_key key;
-	spinlock_t mq_flush_lock;
-};
-
-struct blk_mq_queue_map {
-	unsigned int *mq_map;
-	unsigned int nr_queues;
-	unsigned int queue_offset;
-};
-
-struct sbq_wait_state;
-
-struct sbitmap_queue {
-	struct sbitmap sb;
-	unsigned int *alloc_hint;
-	unsigned int wake_batch;
-	atomic_t wake_index;
-	struct sbq_wait_state *ws;
-	atomic_t ws_active;
-	bool round_robin;
-	unsigned int min_shallow_depth;
-};
-
-struct blk_mq_tag_set {
-	struct blk_mq_queue_map map[3];
-	unsigned int nr_maps;
-	const struct blk_mq_ops *ops;
-	unsigned int nr_hw_queues;
-	unsigned int queue_depth;
-	unsigned int reserved_tags;
-	unsigned int cmd_size;
-	int numa_node;
-	unsigned int timeout;
-	unsigned int flags;
-	void *driver_data;
-	atomic_t active_queues_shared_sbitmap;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct blk_mq_tags **tags;
-	struct mutex tag_list_lock;
-	struct list_head tag_list;
-};
+typedef u64 compat_u64;
 
 enum blktrace_cat {
 	BLK_TC_READ = 1,
@@ -28715,60 +40839,16 @@
 	__u32 pid;
 };
 
-struct sbitmap_word {
-	long unsigned int depth;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int word;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long unsigned int cleared;
-	spinlock_t swap_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct sbq_wait_state {
-	atomic_t wait_cnt;
-	wait_queue_head_t wait;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct blk_mq_tags {
-	unsigned int nr_tags;
-	unsigned int nr_reserved_tags;
-	atomic_t active_queues;
-	struct sbitmap_queue *bitmap_tags;
-	struct sbitmap_queue *breserved_tags;
-	struct sbitmap_queue __bitmap_tags;
-	struct sbitmap_queue __breserved_tags;
-	struct request **rqs;
-	struct request **static_rqs;
-	struct list_head page_list;
-};
-
-struct blk_mq_queue_data {
-	struct request *rq;
-	bool last;
-};
+struct compat_blk_user_trace_setup {
+	char name[32];
+	u16 act_mask;
+	short: 16;
+	u32 buf_size;
+	u32 buf_nr;
+	compat_u64 start_lba;
+	compat_u64 end_lba;
+	u32 pid;
+} __attribute__((packed));
 
 enum blk_crypto_mode_num {
 	BLK_ENCRYPTION_MODE_INVALID = 0,
@@ -28791,11 +40871,6 @@
 	u8 raw[64];
 };
 
-struct blk_mq_ctxs {
-	struct kobject kobj;
-	struct blk_mq_ctx *queue_ctx;
-};
-
 typedef void blk_log_action_t(struct trace_iterator *, const char *, bool);
 
 struct ftrace_event_field {
@@ -28808,6 +40883,12 @@
 	int is_signed;
 };
 
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
 enum {
 	FORMAT_HEADER = 1,
 	FORMAT_FIELD_SEPERATOR = 2,
@@ -28845,34 +40926,7 @@
 	long unsigned int args[6];
 };
 
-enum perf_event_sample_format {
-	PERF_SAMPLE_IP = 1,
-	PERF_SAMPLE_TID = 2,
-	PERF_SAMPLE_TIME = 4,
-	PERF_SAMPLE_ADDR = 8,
-	PERF_SAMPLE_READ = 16,
-	PERF_SAMPLE_CALLCHAIN = 32,
-	PERF_SAMPLE_ID = 64,
-	PERF_SAMPLE_CPU = 128,
-	PERF_SAMPLE_PERIOD = 256,
-	PERF_SAMPLE_STREAM_ID = 512,
-	PERF_SAMPLE_RAW = 1024,
-	PERF_SAMPLE_BRANCH_STACK = 2048,
-	PERF_SAMPLE_REGS_USER = 4096,
-	PERF_SAMPLE_STACK_USER = 8192,
-	PERF_SAMPLE_WEIGHT = 16384,
-	PERF_SAMPLE_DATA_SRC = 32768,
-	PERF_SAMPLE_IDENTIFIER = 65536,
-	PERF_SAMPLE_TRANSACTION = 131072,
-	PERF_SAMPLE_REGS_INTR = 262144,
-	PERF_SAMPLE_PHYS_ADDR = 524288,
-	PERF_SAMPLE_AUX = 1048576,
-	PERF_SAMPLE_CGROUP = 2097152,
-	PERF_SAMPLE_MAX = 4194304,
-	__PERF_SAMPLE_CALLCHAIN_EARLY = 0,
-};
-
-typedef long unsigned int perf_trace_t[256];
+typedef long unsigned int perf_trace_t[1024];
 
 struct filter_pred;
 
@@ -28952,6 +41006,10 @@
 	PROCESS_OR = 4,
 };
 
+struct ustring_buffer {
+	char buffer[1024];
+};
+
 enum {
 	TOO_MANY_CLOSE = 4294967295,
 	TOO_MANY_OPEN = 4294967294,
@@ -28969,6 +41027,10 @@
 	int first_notrace;
 };
 
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
 struct event_trigger_ops;
 
 struct event_command;
@@ -28976,6 +41038,7 @@
 struct event_trigger_data {
 	long unsigned int count;
 	int ref;
+	int flags;
 	struct event_trigger_ops *ops;
 	struct event_command *cmd_ops;
 	struct event_filter *filter;
@@ -28990,10 +41053,10 @@
 };
 
 struct event_trigger_ops {
-	void (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);
-	int (*init)(struct event_trigger_ops *, struct event_trigger_data *);
-	void (*free)(struct event_trigger_ops *, struct event_trigger_data *);
-	int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
 };
 
 struct event_command {
@@ -29001,9 +41064,9 @@
 	char *name;
 	enum event_trigger_type trigger_type;
 	int flags;
-	int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);
-	int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
-	void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
 	void (*unreg_all)(struct trace_event_file *);
 	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
 	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
@@ -29020,6 +41083,547 @@
 	EVENT_CMD_FL_NEEDS_REC = 2,
 };
 
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_MOD_BF = 17,
+	FETCH_OP_LP_ARRAY = 18,
+	FETCH_OP_TP_ARG = 19,
+	FETCH_OP_END = 20,
+	FETCH_NOP_SYMBOL = 21,
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		long unsigned int immediate;
+		void *data;
+	};
+};
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	int is_signed;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_MAXACT_NO_KPROBE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_BAD_RETPROBE = 10,
+	TP_ERR_BAD_ADDR_SUFFIX = 11,
+	TP_ERR_NO_GROUP_NAME = 12,
+	TP_ERR_GROUP_TOO_LONG = 13,
+	TP_ERR_BAD_GROUP_NAME = 14,
+	TP_ERR_NO_EVENT_NAME = 15,
+	TP_ERR_EVENT_TOO_LONG = 16,
+	TP_ERR_BAD_EVENT_NAME = 17,
+	TP_ERR_EVENT_EXIST = 18,
+	TP_ERR_RETVAL_ON_PROBE = 19,
+	TP_ERR_BAD_STACK_NUM = 20,
+	TP_ERR_BAD_ARG_NUM = 21,
+	TP_ERR_BAD_VAR = 22,
+	TP_ERR_BAD_REG_NAME = 23,
+	TP_ERR_BAD_MEM_ADDR = 24,
+	TP_ERR_BAD_IMM = 25,
+	TP_ERR_IMMSTR_NO_CLOSE = 26,
+	TP_ERR_FILE_ON_KPROBE = 27,
+	TP_ERR_BAD_FILE_OFFS = 28,
+	TP_ERR_SYM_ON_UPROBE = 29,
+	TP_ERR_TOO_MANY_OPS = 30,
+	TP_ERR_DEREF_NEED_BRACE = 31,
+	TP_ERR_BAD_DEREF_OFFS = 32,
+	TP_ERR_DEREF_OPEN_BRACE = 33,
+	TP_ERR_COMM_CANT_DEREF = 34,
+	TP_ERR_BAD_FETCH_ARG = 35,
+	TP_ERR_ARRAY_NO_CLOSE = 36,
+	TP_ERR_BAD_ARRAY_SUFFIX = 37,
+	TP_ERR_BAD_ARRAY_NUM = 38,
+	TP_ERR_ARRAY_TOO_BIG = 39,
+	TP_ERR_BAD_TYPE = 40,
+	TP_ERR_BAD_STRING = 41,
+	TP_ERR_BAD_BITFIELD = 42,
+	TP_ERR_ARG_NAME_TOO_LONG = 43,
+	TP_ERR_NO_ARG_NAME = 44,
+	TP_ERR_BAD_ARG_NAME = 45,
+	TP_ERR_USED_ARG_NAME = 46,
+	TP_ERR_ARG_TOO_LONG = 47,
+	TP_ERR_NO_ARG_BODY = 48,
+	TP_ERR_BAD_INSN_BNDRY = 49,
+	TP_ERR_FAIL_REG_PROBE = 50,
+	TP_ERR_DIFF_PROBE_TYPE = 51,
+	TP_ERR_DIFF_ARG_TYPE = 52,
+	TP_ERR_SAME_PROBE = 53,
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+struct synth_field_desc {
+	const char *type;
+	const char *name;
+};
+
+struct synth_trace_event;
+
+struct synth_event;
+
+struct synth_event_trace_state {
+	struct trace_event_buffer fbuffer;
+	struct synth_trace_event *entry;
+	struct trace_buffer *buffer;
+	struct synth_event *event;
+	unsigned int cur_field;
+	unsigned int n_u64;
+	bool disabled;
+	bool add_next;
+	bool add_name;
+};
+
+struct synth_trace_event {
+	struct trace_entry ent;
+	u64 fields[0];
+};
+
+struct synth_field;
+
+struct synth_event {
+	struct dyn_event devent;
+	int ref;
+	char *name;
+	struct synth_field **fields;
+	unsigned int n_fields;
+	struct synth_field **dynamic_fields;
+	unsigned int n_dynamic_fields;
+	unsigned int n_u64;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct tracepoint *tp;
+	struct module *mod;
+};
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+struct synth_field {
+	char *type;
+	char *name;
+	size_t size;
+	unsigned int offset;
+	unsigned int field_pos;
+	bool is_signed;
+	bool is_string;
+	bool is_dynamic;
+};
+
+enum {
+	SYNTH_ERR_BAD_NAME = 0,
+	SYNTH_ERR_INVALID_CMD = 1,
+	SYNTH_ERR_INVALID_DYN_CMD = 2,
+	SYNTH_ERR_EVENT_EXISTS = 3,
+	SYNTH_ERR_TOO_MANY_FIELDS = 4,
+	SYNTH_ERR_INCOMPLETE_TYPE = 5,
+	SYNTH_ERR_INVALID_TYPE = 6,
+	SYNTH_ERR_INVALID_FIELD = 7,
+	SYNTH_ERR_INVALID_ARRAY_SPEC = 8,
+};
+
+enum {
+	HIST_ERR_NONE = 0,
+	HIST_ERR_DUPLICATE_VAR = 1,
+	HIST_ERR_VAR_NOT_UNIQUE = 2,
+	HIST_ERR_TOO_MANY_VARS = 3,
+	HIST_ERR_MALFORMED_ASSIGNMENT = 4,
+	HIST_ERR_NAMED_MISMATCH = 5,
+	HIST_ERR_TRIGGER_EEXIST = 6,
+	HIST_ERR_TRIGGER_ENOENT_CLEAR = 7,
+	HIST_ERR_SET_CLOCK_FAIL = 8,
+	HIST_ERR_BAD_FIELD_MODIFIER = 9,
+	HIST_ERR_TOO_MANY_SUBEXPR = 10,
+	HIST_ERR_TIMESTAMP_MISMATCH = 11,
+	HIST_ERR_TOO_MANY_FIELD_VARS = 12,
+	HIST_ERR_EVENT_FILE_NOT_FOUND = 13,
+	HIST_ERR_HIST_NOT_FOUND = 14,
+	HIST_ERR_HIST_CREATE_FAIL = 15,
+	HIST_ERR_SYNTH_VAR_NOT_FOUND = 16,
+	HIST_ERR_SYNTH_EVENT_NOT_FOUND = 17,
+	HIST_ERR_SYNTH_TYPE_MISMATCH = 18,
+	HIST_ERR_SYNTH_COUNT_MISMATCH = 19,
+	HIST_ERR_FIELD_VAR_PARSE_FAIL = 20,
+	HIST_ERR_VAR_CREATE_FIND_FAIL = 21,
+	HIST_ERR_ONX_NOT_VAR = 22,
+	HIST_ERR_ONX_VAR_NOT_FOUND = 23,
+	HIST_ERR_ONX_VAR_CREATE_FAIL = 24,
+	HIST_ERR_FIELD_VAR_CREATE_FAIL = 25,
+	HIST_ERR_TOO_MANY_PARAMS = 26,
+	HIST_ERR_PARAM_NOT_FOUND = 27,
+	HIST_ERR_INVALID_PARAM = 28,
+	HIST_ERR_ACTION_NOT_FOUND = 29,
+	HIST_ERR_NO_SAVE_PARAMS = 30,
+	HIST_ERR_TOO_MANY_SAVE_ACTIONS = 31,
+	HIST_ERR_ACTION_MISMATCH = 32,
+	HIST_ERR_NO_CLOSING_PAREN = 33,
+	HIST_ERR_SUBSYS_NOT_FOUND = 34,
+	HIST_ERR_INVALID_SUBSYS_EVENT = 35,
+	HIST_ERR_INVALID_REF_KEY = 36,
+	HIST_ERR_VAR_NOT_FOUND = 37,
+	HIST_ERR_FIELD_NOT_FOUND = 38,
+	HIST_ERR_EMPTY_ASSIGNMENT = 39,
+	HIST_ERR_INVALID_SORT_MODIFIER = 40,
+	HIST_ERR_EMPTY_SORT_FIELD = 41,
+	HIST_ERR_TOO_MANY_SORT_FIELDS = 42,
+	HIST_ERR_INVALID_SORT_FIELD = 43,
+	HIST_ERR_INVALID_STR_OPERAND = 44,
+	HIST_ERR_EXPECT_NUMBER = 45,
+	HIST_ERR_UNARY_MINUS_SUBEXPR = 46,
+	HIST_ERR_DIVISION_BY_ZERO = 47,
+};
+
+struct hist_field;
+
+typedef u64 (*hist_field_fn_t)(struct hist_field *, struct tracing_map_elt *, struct trace_buffer *, struct ring_buffer_event *, void *);
+
+struct hist_trigger_data;
+
+struct hist_var {
+	char *name;
+	struct hist_trigger_data *hist_data;
+	unsigned int idx;
+};
+
+enum field_op_id {
+	FIELD_OP_NONE = 0,
+	FIELD_OP_PLUS = 1,
+	FIELD_OP_MINUS = 2,
+	FIELD_OP_UNARY_MINUS = 3,
+	FIELD_OP_DIV = 4,
+	FIELD_OP_MULT = 5,
+};
+
+struct hist_field {
+	struct ftrace_event_field *field;
+	long unsigned int flags;
+	hist_field_fn_t fn;
+	unsigned int ref;
+	unsigned int size;
+	unsigned int offset;
+	unsigned int is_signed;
+	long unsigned int buckets;
+	const char *type;
+	struct hist_field *operands[2];
+	struct hist_trigger_data *hist_data;
+	struct hist_var var;
+	enum field_op_id operator;
+	char *system;
+	char *event_name;
+	char *name;
+	unsigned int var_ref_idx;
+	bool read_once;
+	unsigned int var_str_idx;
+	u64 constant;
+	u64 div_multiplier;
+};
+
+struct hist_trigger_attrs;
+
+struct action_data;
+
+struct field_var;
+
+struct field_var_hist;
+
+struct hist_trigger_data {
+	struct hist_field *fields[22];
+	unsigned int n_vals;
+	unsigned int n_keys;
+	unsigned int n_fields;
+	unsigned int n_vars;
+	unsigned int n_var_str;
+	unsigned int key_size;
+	struct tracing_map_sort_key sort_keys[2];
+	unsigned int n_sort_keys;
+	struct trace_event_file *event_file;
+	struct hist_trigger_attrs *attrs;
+	struct tracing_map *map;
+	bool enable_timestamps;
+	bool remove;
+	struct hist_field *var_refs[16];
+	unsigned int n_var_refs;
+	struct action_data *actions[8];
+	unsigned int n_actions;
+	struct field_var *field_vars[64];
+	unsigned int n_field_vars;
+	unsigned int n_field_var_str;
+	struct field_var_hist *field_var_hists[64];
+	unsigned int n_field_var_hists;
+	struct field_var *save_vars[64];
+	unsigned int n_save_vars;
+	unsigned int n_save_var_str;
+};
+
+enum hist_field_flags {
+	HIST_FIELD_FL_HITCOUNT = 1,
+	HIST_FIELD_FL_KEY = 2,
+	HIST_FIELD_FL_STRING = 4,
+	HIST_FIELD_FL_HEX = 8,
+	HIST_FIELD_FL_SYM = 16,
+	HIST_FIELD_FL_SYM_OFFSET = 32,
+	HIST_FIELD_FL_EXECNAME = 64,
+	HIST_FIELD_FL_SYSCALL = 128,
+	HIST_FIELD_FL_STACKTRACE = 256,
+	HIST_FIELD_FL_LOG2 = 512,
+	HIST_FIELD_FL_TIMESTAMP = 1024,
+	HIST_FIELD_FL_TIMESTAMP_USECS = 2048,
+	HIST_FIELD_FL_VAR = 4096,
+	HIST_FIELD_FL_EXPR = 8192,
+	HIST_FIELD_FL_VAR_REF = 16384,
+	HIST_FIELD_FL_CPU = 32768,
+	HIST_FIELD_FL_ALIAS = 65536,
+	HIST_FIELD_FL_BUCKET = 131072,
+	HIST_FIELD_FL_CONST = 262144,
+};
+
+struct var_defs {
+	unsigned int n_vars;
+	char *name[16];
+	char *expr[16];
+};
+
+struct hist_trigger_attrs {
+	char *keys_str;
+	char *vals_str;
+	char *sort_key_str;
+	char *name;
+	char *clock;
+	bool pause;
+	bool cont;
+	bool clear;
+	bool ts_in_usecs;
+	unsigned int map_bits;
+	char *assignment_str[16];
+	unsigned int n_assignments;
+	char *action_str[8];
+	unsigned int n_actions;
+	struct var_defs var_defs;
+};
+
+struct field_var {
+	struct hist_field *var;
+	struct hist_field *val;
+};
+
+struct field_var_hist {
+	struct hist_trigger_data *hist_data;
+	char *cmd;
+};
+
+enum handler_id {
+	HANDLER_ONMATCH = 1,
+	HANDLER_ONMAX = 2,
+	HANDLER_ONCHANGE = 3,
+};
+
+enum action_id {
+	ACTION_SAVE = 1,
+	ACTION_TRACE = 2,
+	ACTION_SNAPSHOT = 3,
+};
+
+typedef void (*action_fn_t)(struct hist_trigger_data *, struct tracing_map_elt *, struct trace_buffer *, void *, struct ring_buffer_event *, void *, struct action_data *, u64 *);
+
+typedef bool (*check_track_val_fn_t)(u64, u64);
+
+struct action_data {
+	enum handler_id handler;
+	enum action_id action;
+	char *action_name;
+	action_fn_t fn;
+	unsigned int n_params;
+	char *params[64];
+	unsigned int var_ref_idx[16];
+	struct synth_event *synth_event;
+	bool use_trace_keyword;
+	char *synth_event_name;
+	union {
+		struct {
+			char *event;
+			char *event_system;
+		} match_data;
+		struct {
+			char *var_str;
+			struct hist_field *var_ref;
+			struct hist_field *track_var;
+			check_track_val_fn_t check_val;
+			action_fn_t save_data;
+		} track_data;
+	};
+};
+
+struct track_data {
+	u64 track_val;
+	bool updated;
+	unsigned int key_len;
+	void *key;
+	struct tracing_map_elt elt;
+	struct action_data *action_data;
+	struct hist_trigger_data *hist_data;
+};
+
+struct hist_elt_data {
+	char *comm;
+	u64 *var_ref_vals;
+	char **field_var_str;
+	int n_field_var_str;
+};
+
+struct snapshot_context {
+	struct tracing_map_elt *elt;
+	void *key;
+};
+
+typedef void (*synth_probe_func_t)(void *, u64 *, unsigned int *);
+
+struct hist_var_data {
+	struct list_head list;
+	struct hist_trigger_data *hist_data;
+};
+
 enum bpf_func_id {
 	BPF_FUNC_unspec = 0,
 	BPF_FUNC_map_lookup_elem = 1,
@@ -29177,7 +41781,59 @@
 	BPF_FUNC_per_cpu_ptr = 153,
 	BPF_FUNC_this_cpu_ptr = 154,
 	BPF_FUNC_redirect_peer = 155,
-	__BPF_FUNC_MAX_ID = 156,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	__BPF_FUNC_MAX_ID = 208,
 };
 
 enum {
@@ -29186,6 +41842,10 @@
 	BPF_F_CTXLEN_MASK = 0,
 };
 
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
 struct bpf_perf_event_value {
 	__u64 counter;
 	__u64 enabled;
@@ -29218,48 +41878,35 @@
 	BTF_F_ZERO = 8,
 };
 
-enum bpf_arg_type {
-	ARG_DONTCARE = 0,
-	ARG_CONST_MAP_PTR = 1,
-	ARG_PTR_TO_MAP_KEY = 2,
-	ARG_PTR_TO_MAP_VALUE = 3,
-	ARG_PTR_TO_UNINIT_MAP_VALUE = 4,
-	ARG_PTR_TO_MAP_VALUE_OR_NULL = 5,
-	ARG_PTR_TO_MEM = 6,
-	ARG_PTR_TO_MEM_OR_NULL = 7,
-	ARG_PTR_TO_UNINIT_MEM = 8,
-	ARG_CONST_SIZE = 9,
-	ARG_CONST_SIZE_OR_ZERO = 10,
-	ARG_PTR_TO_CTX = 11,
-	ARG_PTR_TO_CTX_OR_NULL = 12,
-	ARG_ANYTHING = 13,
-	ARG_PTR_TO_SPIN_LOCK = 14,
-	ARG_PTR_TO_SOCK_COMMON = 15,
-	ARG_PTR_TO_INT = 16,
-	ARG_PTR_TO_LONG = 17,
-	ARG_PTR_TO_SOCKET = 18,
-	ARG_PTR_TO_SOCKET_OR_NULL = 19,
-	ARG_PTR_TO_BTF_ID = 20,
-	ARG_PTR_TO_ALLOC_MEM = 21,
-	ARG_PTR_TO_ALLOC_MEM_OR_NULL = 22,
-	ARG_CONST_ALLOC_SIZE_OR_ZERO = 23,
-	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 24,
-	ARG_PTR_TO_PERCPU_BTF_ID = 25,
-	__BPF_ARG_TYPE_MAX = 26,
+struct bpf_local_storage_data;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data *cache[16];
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
 };
 
-enum bpf_return_type {
-	RET_INTEGER = 0,
-	RET_VOID = 1,
-	RET_PTR_TO_MAP_VALUE = 2,
-	RET_PTR_TO_MAP_VALUE_OR_NULL = 3,
-	RET_PTR_TO_SOCKET_OR_NULL = 4,
-	RET_PTR_TO_TCP_SOCK_OR_NULL = 5,
-	RET_PTR_TO_SOCK_COMMON_OR_NULL = 6,
-	RET_PTR_TO_ALLOC_MEM_OR_NULL = 7,
-	RET_PTR_TO_BTF_ID_OR_NULL = 8,
-	RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9,
-	RET_PTR_TO_MEM_OR_BTF_ID = 10,
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct bpf_func_proto {
@@ -29286,6 +41933,14 @@
 			u32 *arg5_btf_id;
 		};
 		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
 	};
 	int *ret_btf_id;
 	bool (*allowed)(const struct bpf_prog *);
@@ -29302,7 +41957,10 @@
 	enum bpf_reg_type reg_type;
 	union {
 		int ctx_field_size;
-		u32 btf_id;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
 	};
 	struct bpf_verifier_log *log;
 };
@@ -29313,34 +41971,7 @@
 	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
 	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
 	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
-	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
-};
-
-struct bpf_array_aux {
-	enum bpf_prog_type type;
-	bool jited;
-	struct list_head poke_progs;
-	struct bpf_map *map;
-	struct mutex poke_mutex;
-	struct work_struct work;
-};
-
-struct bpf_array {
-	struct bpf_map map;
-	u32 elem_size;
-	u32 index_mask;
-	struct bpf_array_aux *aux;
-	union {
-		char value[0];
-		void *ptrs[0];
-		void *pptrs[0];
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
 };
 
 struct bpf_event_entry {
@@ -29352,7 +41983,14 @@
 
 typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);
 
-typedef struct user_pt_regs bpf_user_pt_regs_t;
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+typedef struct pt_regs bpf_user_pt_regs_t;
 
 struct bpf_perf_event_data {
 	bpf_user_pt_regs_t regs;
@@ -29372,9 +42010,21 @@
 	struct perf_event *event;
 };
 
-struct btf_id_set {
-	u32 cnt;
-	u32 ids[0];
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map *smap;
+	u8 data[0];
 };
 
 struct trace_event_raw_bpf_trace_printk {
@@ -29412,9 +42062,7 @@
 
 typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
 
-struct bpf_seq_printf_buf {
-	char buf[768];
-};
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
 
 typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
 
@@ -29438,6 +42086,10 @@
 
 typedef u64 (*btf_bpf_get_current_task)();
 
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
 typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
 
 struct send_signal_irq_work {
@@ -29455,6 +42107,28 @@
 
 typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
 
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
 typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
 
 typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
@@ -29475,25 +42149,6 @@
 
 typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
 
-enum dynevent_type {
-	DYNEVENT_TYPE_SYNTH = 1,
-	DYNEVENT_TYPE_KPROBE = 2,
-	DYNEVENT_TYPE_NONE = 3,
-};
-
-struct dynevent_cmd;
-
-typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
-
-struct dynevent_cmd {
-	struct seq_buf seq;
-	const char *event_name;
-	unsigned int n_fields;
-	enum dynevent_type type;
-	dynevent_create_fn_t run_command;
-	void *private_data;
-};
-
 struct kprobe_trace_entry_head {
 	struct trace_entry ent;
 	long unsigned int ip;
@@ -29505,175 +42160,11 @@
 	long unsigned int ret_ip;
 };
 
-struct dyn_event;
-
-struct dyn_event_operations {
-	struct list_head list;
-	int (*create)(int, const char **);
-	int (*show)(struct seq_file *, struct dyn_event *);
-	bool (*is_busy)(struct dyn_event *);
-	int (*free)(struct dyn_event *);
-	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
-};
-
-struct dyn_event {
-	struct list_head list;
-	struct dyn_event_operations *ops;
-};
-
-struct dynevent_arg {
-	const char *str;
-	char separator;
-};
-
-typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
-
-enum fetch_op {
-	FETCH_OP_NOP = 0,
-	FETCH_OP_REG = 1,
-	FETCH_OP_STACK = 2,
-	FETCH_OP_STACKP = 3,
-	FETCH_OP_RETVAL = 4,
-	FETCH_OP_IMM = 5,
-	FETCH_OP_COMM = 6,
-	FETCH_OP_ARG = 7,
-	FETCH_OP_FOFFS = 8,
-	FETCH_OP_DATA = 9,
-	FETCH_OP_DEREF = 10,
-	FETCH_OP_UDEREF = 11,
-	FETCH_OP_ST_RAW = 12,
-	FETCH_OP_ST_MEM = 13,
-	FETCH_OP_ST_UMEM = 14,
-	FETCH_OP_ST_STRING = 15,
-	FETCH_OP_ST_USTRING = 16,
-	FETCH_OP_MOD_BF = 17,
-	FETCH_OP_LP_ARRAY = 18,
-	FETCH_OP_END = 19,
-	FETCH_NOP_SYMBOL = 20,
-};
-
-struct fetch_insn {
-	enum fetch_op op;
-	union {
-		unsigned int param;
-		struct {
-			unsigned int size;
-			int offset;
-		};
-		struct {
-			unsigned char basesize;
-			unsigned char lshift;
-			unsigned char rshift;
-		};
-		long unsigned int immediate;
-		void *data;
-	};
-};
-
-struct fetch_type {
-	const char *name;
-	size_t size;
-	int is_signed;
-	print_type_func_t print;
-	const char *fmt;
-	const char *fmttype;
-};
-
-struct probe_arg {
-	struct fetch_insn *code;
-	bool dynamic;
-	unsigned int offset;
-	unsigned int count;
-	const char *name;
-	const char *comm;
-	char *fmt;
-	const struct fetch_type *type;
-};
-
-struct trace_uprobe_filter {
-	rwlock_t rwlock;
-	int nr_systemwide;
-	struct list_head perf_events;
-};
-
-struct trace_probe_event {
-	unsigned int flags;
-	struct trace_event_class class;
-	struct trace_event_call call;
-	struct list_head files;
-	struct list_head probes;
-	struct trace_uprobe_filter filter[0];
-};
-
-struct trace_probe {
-	struct list_head list;
-	struct trace_probe_event *event;
-	ssize_t size;
-	unsigned int nr_args;
-	struct probe_arg args[0];
-};
-
 struct event_file_link {
 	struct trace_event_file *file;
 	struct list_head list;
 };
 
-enum {
-	TP_ERR_FILE_NOT_FOUND = 0,
-	TP_ERR_NO_REGULAR_FILE = 1,
-	TP_ERR_BAD_REFCNT = 2,
-	TP_ERR_REFCNT_OPEN_BRACE = 3,
-	TP_ERR_BAD_REFCNT_SUFFIX = 4,
-	TP_ERR_BAD_UPROBE_OFFS = 5,
-	TP_ERR_MAXACT_NO_KPROBE = 6,
-	TP_ERR_BAD_MAXACT = 7,
-	TP_ERR_MAXACT_TOO_BIG = 8,
-	TP_ERR_BAD_PROBE_ADDR = 9,
-	TP_ERR_BAD_RETPROBE = 10,
-	TP_ERR_BAD_ADDR_SUFFIX = 11,
-	TP_ERR_NO_GROUP_NAME = 12,
-	TP_ERR_GROUP_TOO_LONG = 13,
-	TP_ERR_BAD_GROUP_NAME = 14,
-	TP_ERR_NO_EVENT_NAME = 15,
-	TP_ERR_EVENT_TOO_LONG = 16,
-	TP_ERR_BAD_EVENT_NAME = 17,
-	TP_ERR_RETVAL_ON_PROBE = 18,
-	TP_ERR_BAD_STACK_NUM = 19,
-	TP_ERR_BAD_ARG_NUM = 20,
-	TP_ERR_BAD_VAR = 21,
-	TP_ERR_BAD_REG_NAME = 22,
-	TP_ERR_BAD_MEM_ADDR = 23,
-	TP_ERR_BAD_IMM = 24,
-	TP_ERR_IMMSTR_NO_CLOSE = 25,
-	TP_ERR_FILE_ON_KPROBE = 26,
-	TP_ERR_BAD_FILE_OFFS = 27,
-	TP_ERR_SYM_ON_UPROBE = 28,
-	TP_ERR_TOO_MANY_OPS = 29,
-	TP_ERR_DEREF_NEED_BRACE = 30,
-	TP_ERR_BAD_DEREF_OFFS = 31,
-	TP_ERR_DEREF_OPEN_BRACE = 32,
-	TP_ERR_COMM_CANT_DEREF = 33,
-	TP_ERR_BAD_FETCH_ARG = 34,
-	TP_ERR_ARRAY_NO_CLOSE = 35,
-	TP_ERR_BAD_ARRAY_SUFFIX = 36,
-	TP_ERR_BAD_ARRAY_NUM = 37,
-	TP_ERR_ARRAY_TOO_BIG = 38,
-	TP_ERR_BAD_TYPE = 39,
-	TP_ERR_BAD_STRING = 40,
-	TP_ERR_BAD_BITFIELD = 41,
-	TP_ERR_ARG_NAME_TOO_LONG = 42,
-	TP_ERR_NO_ARG_NAME = 43,
-	TP_ERR_BAD_ARG_NAME = 44,
-	TP_ERR_USED_ARG_NAME = 45,
-	TP_ERR_ARG_TOO_LONG = 46,
-	TP_ERR_NO_ARG_BODY = 47,
-	TP_ERR_BAD_INSN_BNDRY = 48,
-	TP_ERR_FAIL_REG_PROBE = 49,
-	TP_ERR_DIFF_PROBE_TYPE = 50,
-	TP_ERR_DIFF_ARG_TYPE = 51,
-	TP_ERR_SAME_PROBE = 52,
-};
-
 struct trace_kprobe {
 	struct dyn_event devent;
 	struct kretprobe rp;
@@ -29682,6 +42173,17 @@
 	struct trace_probe tp;
 };
 
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	long unsigned int id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int);
+
 struct trace_event_raw_cpu {
 	struct trace_entry ent;
 	u32 state;
@@ -29919,13 +42421,6 @@
 
 typedef int (*dynevent_check_arg_fn_t)(void *);
 
-struct dynevent_arg_pair {
-	const char *lhs;
-	const char *rhs;
-	char operator;
-	char separator;
-};
-
 struct trace_probe_log {
 	const char *subsystem;
 	const char **argv;
@@ -29975,11 +42470,12 @@
 
 typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
 
-struct rnd_state {
-	__u32 s1;
-	__u32 s2;
-	__u32 s3;
-	__u32 s4;
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
 };
 
 struct rhash_lock_head;
@@ -29996,21 +42492,176 @@
 	struct rhash_lock_head *buckets[0];
 };
 
-enum xdp_action {
-	XDP_ABORTED = 0,
-	XDP_DROP = 1,
-	XDP_PASS = 2,
-	XDP_TX = 3,
-	XDP_REDIRECT = 4,
+typedef sockptr_t bpfptr_t;
+
+struct bpf_verifier_log {
+	u32 level;
+	char kbuf[1024];
+	char *ubuf;
+	u32 len_used;
+	u32 len_total;
 };
 
-enum bpf_jit_poke_reason {
-	BPF_POKE_REASON_TAIL_CALL = 0,
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
 };
 
-enum bpf_text_poke_type {
-	BPF_MOD_CALL = 0,
-	BPF_MOD_JUMP = 1,
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool allow_ptr_to_map_access;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	struct bpf_id_pair idmap_scratch[75];
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u32 prev_log_len;
+	u32 prev_insn_print_len;
+	char type_str_buf[64];
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		u32 mem_size;
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			long unsigned int raw1;
+			long unsigned int raw2;
+		} raw;
+		u32 subprogno;
+	};
+	u32 id;
+	u32 ref_obj_id;
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	bool in_async_callback_fn;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
 };
 
 enum xdp_mem_type {
@@ -30029,6 +42680,86 @@
 
 typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
 
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	u32 active_spin_lock;
+	bool speculative;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	int initialized: 1;
+	int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		long unsigned int map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool prune_point;
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	long unsigned int bitmap[0];
+};
+
 struct bpf_prog_dummy {
 	struct bpf_prog prog;
 };
@@ -30043,16 +42774,11 @@
 
 struct rhash_lock_head {};
 
-struct zero_copy_allocator;
-
-struct page_pool;
-
 struct xdp_mem_allocator {
 	struct xdp_mem_info mem;
 	union {
 		void *allocator;
 		struct page_pool *page_pool;
-		struct zero_copy_allocator *zc_alloc;
 	};
 	struct rhash_head node;
 	struct callback_head rcu;
@@ -30174,13 +42900,13 @@
 
 typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
 
-typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
 
-typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
 
-typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
 
-typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
 
 typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
 
@@ -30206,6 +42932,7 @@
 	BPF_PROG_ATTACH = 8,
 	BPF_PROG_DETACH = 9,
 	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
 	BPF_PROG_GET_NEXT_ID = 11,
 	BPF_MAP_GET_NEXT_ID = 12,
 	BPF_PROG_GET_FD_BY_ID = 13,
@@ -30295,6 +43022,8 @@
 	__u64 prog_tags;
 	__u64 run_time_ns;
 	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
 };
 
 struct bpf_map_info {
@@ -30312,16 +43041,16 @@
 	__u32 btf_id;
 	__u32 btf_key_type_id;
 	__u32 btf_value_type_id;
+	__u64 map_extra;
 };
 
 struct bpf_btf_info {
 	__u64 btf;
 	__u32 btf_size;
 	__u32 id;
-};
-
-struct bpf_spin_lock {
-	__u32 val;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
 };
 
 struct bpf_attach_target_info {
@@ -30331,6 +43060,13 @@
 	const struct btf_type *tgt_type;
 };
 
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
 struct bpf_link_primer {
 	struct bpf_link *link;
 	struct file *file;
@@ -30338,6 +43074,12 @@
 	u32 id;
 };
 
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
 enum perf_bpf_event_type {
 	PERF_BPF_EVENT_UNKNOWN = 0,
 	PERF_BPF_EVENT_PROG_LOAD = 1,
@@ -30351,11 +43093,10 @@
 	BPF_AUDIT_MAX = 2,
 };
 
-struct bpf_tracing_link {
-	struct bpf_link link;
-	enum bpf_attach_type attach_type;
-	struct bpf_trampoline *trampoline;
-	struct bpf_prog *tgt_prog;
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
 };
 
 struct bpf_raw_tp_link {
@@ -30363,12 +43104,53 @@
 	struct bpf_raw_event_map *btp;
 };
 
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
 struct btf_member {
 	__u32 name_off;
 	__u32 type;
 	__u32 offset;
 };
 
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
 enum btf_func_linkage {
 	BTF_FUNC_STATIC = 0,
 	BTF_FUNC_GLOBAL = 1,
@@ -30386,72 +43168,49 @@
 	SK_PASS = 1,
 };
 
-struct bpf_verifier_log {
-	u32 level;
-	char kbuf[1024];
-	char *ubuf;
-	u32 len_used;
-	u32 len_total;
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
 };
 
-struct bpf_subprog_info {
-	u32 start;
-	u32 linfo_idx;
-	u16 stack_depth;
-	bool has_tail_call;
-	bool tail_call_reachable;
-	bool has_ld_abs;
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
 };
 
-struct bpf_verifier_stack_elem;
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+};
 
-struct bpf_verifier_state;
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
 
-struct bpf_verifier_state_list;
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
 
-struct bpf_insn_aux_data;
-
-struct bpf_verifier_env {
-	u32 insn_idx;
-	u32 prev_insn_idx;
-	struct bpf_prog *prog;
-	const struct bpf_verifier_ops *ops;
-	struct bpf_verifier_stack_elem *head;
-	int stack_size;
-	bool strict_alignment;
-	bool test_state_freq;
-	struct bpf_verifier_state *cur_state;
-	struct bpf_verifier_state_list **explored_states;
-	struct bpf_verifier_state_list *free_list;
-	struct bpf_map *used_maps[64];
-	u32 used_map_cnt;
-	u32 id_gen;
-	bool allow_ptr_leaks;
-	bool allow_ptr_to_map_access;
-	bool bpf_capable;
-	bool bypass_spec_v1;
-	bool bypass_spec_v4;
-	bool seen_direct_write;
-	struct bpf_insn_aux_data *insn_aux_data;
-	const struct bpf_line_info *prev_linfo;
-	struct bpf_verifier_log log;
-	struct bpf_subprog_info subprog_info[257];
-	struct {
-		int *insn_state;
-		int *insn_stack;
-		int cur_stack;
-	} cfg;
-	u32 pass_cnt;
-	u32 subprog_cnt;
-	u32 prev_insn_processed;
-	u32 insn_processed;
-	u32 prev_jmps_processed;
-	u32 jmps_processed;
-	u64 verification_time;
-	u32 max_states_per_insn;
-	u32 total_states;
-	u32 peak_states;
-	u32 longest_mark_read_walk;
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
 };
 
 struct bpf_struct_ops {
@@ -30471,46 +43230,9 @@
 
 typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
 
-struct tnum {
-	u64 value;
-	u64 mask;
-};
-
-enum bpf_reg_liveness {
-	REG_LIVE_NONE = 0,
-	REG_LIVE_READ32 = 1,
-	REG_LIVE_READ64 = 2,
-	REG_LIVE_READ = 3,
-	REG_LIVE_WRITTEN = 4,
-	REG_LIVE_DONE = 8,
-};
-
-struct bpf_reg_state {
-	enum bpf_reg_type type;
-	union {
-		u16 range;
-		struct bpf_map *map_ptr;
-		u32 btf_id;
-		u32 mem_size;
-		long unsigned int raw;
-	};
-	s32 off;
-	u32 id;
-	u32 ref_obj_id;
-	struct tnum var_off;
-	s64 smin_value;
-	s64 smax_value;
-	u64 umin_value;
-	u64 umax_value;
-	s32 s32_min_value;
-	s32 s32_max_value;
-	u32 u32_min_value;
-	u32 u32_max_value;
-	struct bpf_reg_state *parent;
-	u32 frameno;
-	s32 subreg_def;
-	enum bpf_reg_liveness live;
-	bool precise;
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
 };
 
 enum bpf_stack_slot_type {
@@ -30518,81 +43240,7 @@
 	STACK_SPILL = 1,
 	STACK_MISC = 2,
 	STACK_ZERO = 3,
-};
-
-struct bpf_stack_state {
-	struct bpf_reg_state spilled_ptr;
-	u8 slot_type[8];
-};
-
-struct bpf_reference_state {
-	int id;
-	int insn_idx;
-};
-
-struct bpf_func_state {
-	struct bpf_reg_state regs[11];
-	int callsite;
-	u32 frameno;
-	u32 subprogno;
-	int acquired_refs;
-	struct bpf_reference_state *refs;
-	int allocated_stack;
-	struct bpf_stack_state *stack;
-};
-
-struct bpf_idx_pair {
-	u32 prev_idx;
-	u32 idx;
-};
-
-struct bpf_verifier_state {
-	struct bpf_func_state *frame[8];
-	struct bpf_verifier_state *parent;
-	u32 branches;
-	u32 insn_idx;
-	u32 curframe;
-	u32 active_spin_lock;
-	bool speculative;
-	u32 first_insn_idx;
-	u32 last_insn_idx;
-	struct bpf_idx_pair *jmp_history;
-	u32 jmp_history_cnt;
-};
-
-struct bpf_verifier_state_list {
-	struct bpf_verifier_state state;
-	struct bpf_verifier_state_list *next;
-	int miss_cnt;
-	int hit_cnt;
-};
-
-struct bpf_insn_aux_data {
-	union {
-		enum bpf_reg_type ptr_type;
-		long unsigned int map_ptr_state;
-		s32 call_imm;
-		u32 alu_limit;
-		struct {
-			u32 map_index;
-			u32 map_off;
-		};
-		struct {
-			enum bpf_reg_type reg_type;
-			union {
-				u32 btf_id;
-				u32 mem_size;
-			};
-		} btf_var;
-	};
-	u64 map_key_state;
-	int ctx_field_size;
-	int sanitize_stack_off;
-	u32 seen;
-	bool zext_dst;
-	u8 alu_state;
-	unsigned int orig_idx;
-	bool prune_point;
+	STACK_DYNPTR = 4,
 };
 
 struct bpf_verifier_stack_elem {
@@ -30617,7 +43265,9 @@
 	BTF_SOCK_TYPE_TCP6 = 10,
 	BTF_SOCK_TYPE_UDP = 11,
 	BTF_SOCK_TYPE_UDP6 = 12,
-	MAX_BTF_SOCK_TYPE = 13,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	MAX_BTF_SOCK_TYPE = 15,
 };
 
 typedef void (*bpf_insn_print_t)(void *, const char *, ...);
@@ -30637,14 +43287,21 @@
 	struct bpf_map *map_ptr;
 	bool raw_mode;
 	bool pkt_access;
+	u8 release_regno;
 	int regno;
 	int access_size;
 	int mem_size;
 	u64 msize_max_value;
 	int ref_obj_id;
+	int map_uid;
 	int func_id;
+	struct btf *btf;
 	u32 btf_id;
+	struct btf *ret_btf;
 	u32 ret_btf_id;
+	u32 subprogno;
+	struct bpf_map_value_off_desc *kptr_off_desc;
+	u8 uninit_dynptr_regno;
 };
 
 enum reg_arg_type {
@@ -30653,21 +43310,46 @@
 	DST_OP_NO_MARK = 2,
 };
 
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
 struct bpf_reg_types {
 	const enum bpf_reg_type types[10];
 	u32 *btf_id;
 };
 
 enum {
+	AT_PKT_END = 4294967295,
+	BEYOND_PKT_END = 4294967294,
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+enum {
+	REASON_BOUNDS = 4294967295,
+	REASON_TYPE = 4294967294,
+	REASON_PATHS = 4294967293,
+	REASON_LIMIT = 4294967292,
+	REASON_STACK = 4294967291,
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+enum {
 	DISCOVERED = 16,
 	EXPLORED = 32,
 	FALLTHROUGH = 1,
 	BRANCH = 2,
 };
 
-struct idpair {
-	u32 old;
-	u32 cur;
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
 };
 
 struct tree_descr {
@@ -30678,13 +43360,11 @@
 
 struct bpf_preload_info {
 	char link_name[16];
-	int link_id;
+	struct bpf_link *link;
 };
 
 struct bpf_preload_ops {
-	struct umd_info info;
 	int (*preload)(struct bpf_preload_info *);
-	int (*finish)();
 	struct module *owner;
 };
 
@@ -30708,11 +43388,31 @@
 	umode_t mode;
 };
 
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;};
+
 struct bpf_pidns_info {
 	__u32 pid;
 	__u32 tgid;
 };
 
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
 typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
 
 typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
@@ -30725,6 +43425,8 @@
 
 typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
 
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
 typedef u64 (*btf_bpf_get_smp_processor_id)();
 
 typedef u64 (*btf_bpf_get_numa_node_id)();
@@ -30733,6 +43435,8 @@
 
 typedef u64 (*btf_bpf_ktime_get_boot_ns)();
 
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
 typedef u64 (*btf_bpf_get_current_pid_tgid)();
 
 typedef u64 (*btf_bpf_get_current_uid_gid)();
@@ -30755,16 +43459,57 @@
 
 typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);
 
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
 typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
 
 typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
 
 typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);
 
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void *, struct task_struct *, u64);
+
 typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
 
 typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
 
+struct bpf_bprintf_buffers {
+	char tmp_bufs[1536];
+};
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void *callback_fn;
+	void *value;
+};
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, struct bpf_dynptr_kern *, u32);
+
+typedef u64 (*btf_bpf_dynptr_write)(struct bpf_dynptr_kern *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_dynptr_data)(struct bpf_dynptr_kern *, u32, u32);
+
 union bpf_iter_link_info {
 	struct {
 		__u32 map_fd;
@@ -30779,13 +43524,21 @@
 
 typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
 
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
 struct bpf_iter_reg {
 	const char *target;
 	bpf_iter_attach_target_t attach_target;
 	bpf_iter_detach_target_t detach_target;
 	bpf_iter_show_fdinfo_t show_fdinfo;
 	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
 	u32 ctx_arg_info_size;
+	u32 feature;
 	struct bpf_ctx_arg_aux ctx_arg_info[2];
 	const struct bpf_iter_seq_info *seq_info;
 };
@@ -30821,6 +43574,10 @@
 	u8 target_private[0];
 };
 
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
 struct bpf_iter_seq_map_info {
 	u32 map_id;
 };
@@ -30834,6 +43591,11 @@
 	};
 };
 
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
 struct bpf_iter_seq_task_common {
 	struct pid_namespace *ns;
 };
@@ -30855,7 +43617,6 @@
 struct bpf_iter_seq_task_file_info {
 	struct bpf_iter_seq_task_common common;
 	struct task_struct *task;
-	struct files_struct *files;
 	u32 tid;
 	u32 fd;
 };
@@ -30873,6 +43634,35 @@
 	};
 };
 
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct vm_area_struct *vma;
+	u32 tid;
+	long unsigned int prev_vm_start;
+	long unsigned int prev_vm_end;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
 struct bpf_iter_seq_prog_info {
 	u32 prog_id;
 };
@@ -30886,6 +43676,19 @@
 	};
 };
 
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
 struct bpf_iter__bpf_map_elem {
 	union {
 		struct bpf_iter_meta *meta;
@@ -30901,6 +43704,10 @@
 	};
 };
 
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
 struct pcpu_freelist_node;
 
 struct pcpu_freelist_head {
@@ -31005,6 +43812,8 @@
 	u32 n_buckets;
 	u32 elem_size;
 	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int *map_locked[8];
 	long: 64;
 	long: 64;
 	long: 64;
@@ -31086,6 +43895,21 @@
 	long: 64;
 };
 
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 aligned_u32_count;
+	u32 nr_hash_funcs;
+	long unsigned int bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct bpf_cgroup_storage_map {
 	struct bpf_map map;
 	spinlock_t lock;
@@ -31143,7 +43967,6 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
 	spinlock_t spinlock;
 	long: 32;
 	long: 64;
@@ -32670,13 +45493,14 @@
 
 struct bpf_ringbuf_map {
 	struct bpf_map map;
-	struct bpf_map_memory memory;
 	struct bpf_ringbuf *rb;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct bpf_ringbuf_hdr {
@@ -32694,46 +45518,11 @@
 
 typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
 
-enum {
-	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
-	BPF_SK_STORAGE_GET_F_CREATE = 1,
-};
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
 
-struct bpf_local_storage_map_bucket;
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
 
-struct bpf_local_storage_map {
-	struct bpf_map map;
-	struct bpf_local_storage_map_bucket *buckets;
-	u32 bucket_log;
-	u16 elem_size;
-	u16 cache_idx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct bpf_local_storage_data;
-
-struct bpf_local_storage {
-	struct bpf_local_storage_data *cache[16];
-	struct hlist_head list;
-	void *owner;
-	struct callback_head rcu;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_map_bucket {
-	struct hlist_head list;
-	raw_spinlock_t lock;
-};
-
-struct bpf_local_storage_data {
-	struct bpf_local_storage_map *smap;
-	u8 data[0];
-};
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
 
 struct bpf_local_storage_elem {
 	struct hlist_node map_node;
@@ -32756,10 +45545,20 @@
 	u64 idx_usage_counts[16];
 };
 
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
 struct lsm_blob_sizes {
 	int lbs_cred;
 	int lbs_file;
 	int lbs_inode;
+	int lbs_superblock;
 	int lbs_ipc;
 	int lbs_msg_msg;
 	int lbs_task;
@@ -32769,15 +45568,10 @@
 	struct bpf_local_storage *storage;
 };
 
-typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64);
+typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64, gfp_t);
 
 typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
 
-struct bpf_tramp_progs {
-	struct bpf_prog *progs[40];
-	int nr_progs;
-};
-
 struct btf_enum {
 	__u32 name_off;
 	__s32 val;
@@ -32789,11 +45583,6 @@
 	__u32 nelems;
 };
 
-struct btf_param {
-	__u32 name_off;
-	__u32 type;
-};
-
 enum {
 	BTF_VAR_STATIC = 0,
 	BTF_VAR_GLOBAL_ALLOCATED = 1,
@@ -32804,6 +45593,16 @@
 	__u32 linkage;
 };
 
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
 struct bpf_flow_keys {
 	__u16 nhoff;
 	__u16 thoff;
@@ -32839,7 +45638,7 @@
 	__u32 src_ip4;
 	__u32 src_ip6[4];
 	__u32 src_port;
-	__u32 dst_port;
+	__be16 dst_port;
 	__u32 dst_ip4;
 	__u32 dst_ip6[4];
 	__u32 state;
@@ -32883,6 +45682,8 @@
 		struct bpf_sock *sk;
 	};
 	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
 };
 
 struct xdp_md {
@@ -32926,6 +45727,12 @@
 	__u32 ip_protocol;
 	__u32 bind_inany;
 	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
 };
 
 struct bpf_sock_addr {
@@ -33025,22 +45832,46 @@
 
 struct bpf_sk_lookup {
 	union {
-		struct bpf_sock *sk;
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
 	};
 	__u32 family;
 	__u32 protocol;
 	__u32 remote_ip4;
 	__u32 remote_ip6[4];
-	__u32 remote_port;
+	__be16 remote_port;
 	__u32 local_ip4;
 	__u32 local_ip6[4];
 	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	union {
+		struct {
+			struct btf_id_set *check_set;
+			struct btf_id_set *acquire_set;
+			struct btf_id_set *release_set;
+			struct btf_id_set *ret_null_set;
+			struct btf_id_set *kptr_acquire_set;
+		};
+		struct btf_id_set *sets[5];
+	};
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
 };
 
 struct sk_reuseport_kern {
 	struct sk_buff *skb;
 	struct sock *sk;
 	struct sock *selected_sk;
+	struct sock *migrating_sk;
 	void *data_end;
 	u32 hash;
 	u32 reuseport_id;
@@ -33050,23 +45881,16 @@
 struct bpf_flow_dissector {
 	struct bpf_flow_keys *flow_keys;
 	const struct sk_buff *skb;
-	void *data;
-	void *data_end;
-};
-
-struct inet_listen_hashbucket {
-	spinlock_t lock;
-	unsigned int count;
-	union {
-		struct hlist_head head;
-		struct hlist_nulls_head nulls_head;
-	};
+	const void *data;
+	const void *data_end;
 };
 
 struct inet_ehash_bucket;
 
 struct inet_bind_hashbucket;
 
+struct inet_listen_hashbucket;
+
 struct inet_hashinfo {
 	struct inet_ehash_bucket *ehash;
 	spinlock_t *ehash_locks;
@@ -33077,8 +45901,6 @@
 	unsigned int bhash_size;
 	unsigned int lhash2_mask;
 	struct inet_listen_hashbucket *lhash2;
-	long: 64;
-	struct inet_listen_hashbucket listening_hash[32];
 };
 
 struct ip_ra_chain {
@@ -33112,20 +45934,6 @@
 	struct callback_head rcu;
 };
 
-struct xdp_txq_info {
-	struct net_device *dev;
-};
-
-struct xdp_buff {
-	void *data;
-	void *data_end;
-	void *data_meta;
-	void *data_hard_start;
-	struct xdp_rxq_info *rxq;
-	struct xdp_txq_info *txq;
-	u32 frame_sz;
-};
-
 struct bpf_sock_addr_kern {
 	struct sock *sk;
 	struct sockaddr *uaddr;
@@ -33169,7 +45977,8 @@
 	s32 level;
 	s32 optname;
 	s32 optlen;
-	s32 retval;
+	struct task_struct *current_task;
+	u64 tmp_reg;
 };
 
 struct bpf_sk_lookup_kern {
@@ -33186,13 +45995,26 @@
 		const struct in6_addr *daddr;
 	} v6;
 	struct sock *selected_sk;
+	u32 ingress_ifindex;
 	bool no_reuseport;
 };
 
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
 struct sock_reuseport {
 	struct callback_head rcu;
 	u16 max_socks;
 	u16 num_socks;
+	u16 num_closed_socks;
 	unsigned int synq_overflow_ts;
 	unsigned int reuseport_id;
 	unsigned int bind_inany: 1;
@@ -33201,6 +46023,132 @@
 	struct sock *socks[0];
 };
 
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct strp_stats {
+	long long unsigned int msgs;
+	long long unsigned int bytes;
+	unsigned int mem_fail;
+	unsigned int need_more_hdr;
+	unsigned int msg_too_big;
+	unsigned int msg_timeouts;
+	unsigned int bad_hdr_len;
+};
+
+struct strparser;
+
+struct strp_callbacks {
+	int (*parse_msg)(struct strparser *, struct sk_buff *);
+	void (*rcv_msg)(struct strparser *, struct sk_buff *);
+	int (*read_sock_done)(struct strparser *, int);
+	void (*abort_parser)(struct strparser *, int);
+	void (*lock)(struct strparser *);
+	void (*unlock)(struct strparser *);
+};
+
+struct strparser {
+	struct sock *sk;
+	u32 stopped: 1;
+	u32 paused: 1;
+	u32 aborted: 1;
+	u32 interrupted: 1;
+	u32 unrecov_intr: 1;
+	struct sk_buff **skb_nextp;
+	struct sk_buff *skb_head;
+	unsigned int need_bytes;
+	struct delayed_work msg_timer_work;
+	struct work_struct work;
+	struct strp_stats stats;
+	struct strp_callbacks cb;
+};
+
+struct sk_psock_work_state {
+	struct sk_buff *skb;
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct strparser strp;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	long unsigned int state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long int);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct work_struct work;
+	struct rcu_work rwork;
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_opts_ri;
+	struct nd_opt_hdr *nd_opts_ri_end;
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+	struct nd_opt_hdr *nd_802154_opt_array[3];
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved: 6;
+	__u8 autoconf: 1;
+	__u8 onlink: 1;
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
 struct inet_ehash_bucket {
 	struct hlist_nulls_head chain;
 };
@@ -33210,6 +46158,11 @@
 	struct hlist_head chain;
 };
 
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
 struct ack_sample {
 	u32 pkts_acked;
 	s32 rtt_us;
@@ -33219,7 +46172,9 @@
 struct rate_sample {
 	u64 prior_mstamp;
 	u32 prior_delivered;
+	u32 prior_delivered_ce;
 	s32 delivered;
+	s32 delivered_ce;
 	long int interval_us;
 	u32 snd_interval_us;
 	u32 rcv_interval_us;
@@ -33227,6 +46182,7 @@
 	int losses;
 	u32 acked_sacked;
 	u32 prior_in_flight;
+	u32 last_end_seq;
 	bool is_app_limited;
 	bool is_retrans;
 	bool is_ack_delayed;
@@ -33238,7 +46194,7 @@
 	u32 end;
 	u32 size;
 	u32 copybreak;
-	long unsigned int copy;
+	long unsigned int copy[1];
 	struct scatterlist data[19];
 };
 
@@ -33255,6 +46211,68 @@
 	struct list_head list;
 };
 
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_XDP = 0,
+	BTF_KFUNC_HOOK_TC = 1,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 2,
+	BTF_KFUNC_HOOK_TRACING = 3,
+	BTF_KFUNC_HOOK_SYSCALL = 4,
+	BTF_KFUNC_HOOK_MAX = 5,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 32,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set *sets[25];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
 enum verifier_phase {
 	CHECK_META = 0,
 	CHECK_TYPE = 1,
@@ -33297,7 +46315,7 @@
 struct btf_show {
 	u64 flags;
 	void *target;
-	void (*showfn)(struct btf_show *, const char *, va_list);
+	void (*showfn)(struct btf_show *, const char *, struct __va_list_tag *);
 	const struct btf *btf;
 	struct {
 		u8 depth;
@@ -33329,6 +46347,23 @@
 	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
 };
 
+enum btf_field_type {
+	BTF_FIELD_SPIN_LOCK = 0,
+	BTF_FIELD_TIMER = 1,
+	BTF_FIELD_KPTR = 2,
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+struct btf_field_info {
+	u32 type_id;
+	u32 off;
+	enum bpf_kptr_type type;
+};
+
 struct bpf_ctx_convert {
 	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
 	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
@@ -33388,6 +46423,8 @@
 	void *BPF_PROG_TYPE_EXT_kern;
 	void *BPF_PROG_TYPE_LSM_prog;
 	void *BPF_PROG_TYPE_LSM_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
 };
 
 enum {
@@ -33420,7 +46457,8 @@
 	__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26,
 	__ctx_convertBPF_PROG_TYPE_EXT = 27,
 	__ctx_convertBPF_PROG_TYPE_LSM = 28,
-	__ctx_convert_unused = 29,
+	__ctx_convertBPF_PROG_TYPE_SYSCALL = 29,
+	__ctx_convert_unused = 30,
 };
 
 enum bpf_struct_walk_result {
@@ -33435,6 +46473,31 @@
 	int len;
 };
 
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
 struct bpf_dispatcher_prog {
 	struct bpf_prog *prog;
 	refcount_t users;
@@ -33450,6 +46513,11 @@
 	struct bpf_ksym ksym;
 };
 
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
 struct bpf_devmap_val {
 	__u32 ifindex;
 	union {
@@ -33480,11 +46548,48 @@
 	IFF_ECHO = 262144,
 };
 
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1,
+	IFF_EBRIDGE = 2,
+	IFF_BONDING = 4,
+	IFF_ISATAP = 8,
+	IFF_WAN_HDLC = 16,
+	IFF_XMIT_DST_RELEASE = 32,
+	IFF_DONT_BRIDGE = 64,
+	IFF_DISABLE_NETPOLL = 128,
+	IFF_MACVLAN_PORT = 256,
+	IFF_BRIDGE_PORT = 512,
+	IFF_OVS_DATAPATH = 1024,
+	IFF_TX_SKB_SHARING = 2048,
+	IFF_UNICAST_FLT = 4096,
+	IFF_TEAM_PORT = 8192,
+	IFF_SUPP_NOFCS = 16384,
+	IFF_LIVE_ADDR_CHANGE = 32768,
+	IFF_MACVLAN = 65536,
+	IFF_XMIT_DST_RELEASE_PERM = 131072,
+	IFF_L3MDEV_MASTER = 262144,
+	IFF_NO_QUEUE = 524288,
+	IFF_OPENVSWITCH = 1048576,
+	IFF_L3MDEV_SLAVE = 2097152,
+	IFF_TEAM = 4194304,
+	IFF_RXFH_CONFIGURED = 8388608,
+	IFF_PHONY_HEADROOM = 16777216,
+	IFF_MACSEC = 33554432,
+	IFF_NO_RX_HANDLER = 67108864,
+	IFF_FAILOVER = 134217728,
+	IFF_FAILOVER_SLAVE = 268435456,
+	IFF_L3MDEV_RX_HANDLER = 536870912,
+	IFF_LIVE_RENAME_OK = 1073741824,
+	IFF_TX_SKB_NO_LINEAR = 2147483648,
+	IFF_CHANGE_PROTO_DOWN = 0,
+};
+
 struct xdp_dev_bulk_queue {
 	struct xdp_frame *q[16];
 	struct list_head flush_node;
 	struct net_device *dev;
 	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
 	unsigned int count;
 };
 
@@ -33523,6 +46628,10 @@
 	NETDEV_CVLAN_FILTER_DROP_INFO = 32,
 	NETDEV_SVLAN_FILTER_PUSH_INFO = 33,
 	NETDEV_SVLAN_FILTER_DROP_INFO = 34,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 35,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 38,
 };
 
 struct netdev_notifier_info {
@@ -33530,6 +46639,25 @@
 	struct netlink_ext_ack *extack;
 };
 
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u32 flags;
+	u32 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	u32 kern_flags;
+	struct bpf_nh_params nh;
+};
+
 struct bpf_dtab;
 
 struct bpf_dtab_netdev {
@@ -33563,76 +46691,6 @@
 	} bpf_prog;
 };
 
-typedef struct bio_vec skb_frag_t;
-
-struct skb_shared_hwtstamps {
-	ktime_t hwtstamp;
-};
-
-struct skb_shared_info {
-	__u8 __unused;
-	__u8 meta_len;
-	__u8 nr_frags;
-	__u8 tx_flags;
-	short unsigned int gso_size;
-	short unsigned int gso_segs;
-	struct sk_buff *frag_list;
-	struct skb_shared_hwtstamps hwtstamps;
-	unsigned int gso_type;
-	u32 tskey;
-	atomic_t dataref;
-	void *destructor_arg;
-	skb_frag_t frags[17];
-};
-
-struct bpf_nh_params {
-	u32 nh_family;
-	union {
-		u32 ipv4_nh;
-		struct in6_addr ipv6_nh;
-	};
-};
-
-struct bpf_redirect_info {
-	u32 flags;
-	u32 tgt_index;
-	void *tgt_value;
-	struct bpf_map *map;
-	u32 kern_flags;
-	struct bpf_nh_params nh;
-};
-
-struct ptr_ring {
-	int producer;
-	spinlock_t producer_lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int consumer_head;
-	int consumer_tail;
-	spinlock_t consumer_lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	int size;
-	int batch;
-	void **queue;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct bpf_cpu_map_entry;
 
 struct xdp_bulk_queue {
@@ -33741,46 +46799,6 @@
 	BPF_F_USER_BUILD_ID = 2048,
 };
 
-typedef __u32 Elf32_Addr;
-
-typedef __u16 Elf32_Half;
-
-typedef __u32 Elf32_Off;
-
-struct elf32_hdr {
-	unsigned char e_ident[16];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-};
-
-typedef struct elf32_hdr Elf32_Ehdr;
-
-struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-};
-
-typedef struct elf32_phdr Elf32_Phdr;
-
-typedef struct elf32_note Elf32_Nhdr;
-
 enum perf_callchain_context {
 	PERF_CONTEXT_HV = 4294967264,
 	PERF_CONTEXT_KERNEL = 4294967168,
@@ -33809,11 +46827,6 @@
 	long: 64;
 };
 
-struct stack_map_irq_work {
-	struct irq_work irq_work;
-	struct mm_struct *mm;
-};
-
 typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
 
 typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
@@ -33828,13 +46841,6 @@
 	BPF_F_SYSCTL_BASE_NAME = 1,
 };
 
-struct bpf_prog_list {
-	struct list_head node;
-	struct bpf_prog *prog;
-	struct bpf_cgroup_link *link;
-	struct bpf_cgroup_storage *storage[2];
-};
-
 struct qdisc_skb_cb {
 	struct {
 		unsigned int pkt_len;
@@ -33842,7 +46848,6 @@
 		u16 tc_classid;
 	};
 	unsigned char data[20];
-	u16 mru;
 };
 
 struct bpf_skb_data_end {
@@ -33851,6 +46856,10 @@
 	void *data_end;
 };
 
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
 enum {
 	TCPF_ESTABLISHED = 2,
 	TCPF_SYN_SENT = 4,
@@ -33866,6 +46875,23 @@
 	TCPF_NEW_SYN_RECV = 4096,
 };
 
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct bpf_prog_list {
+	struct list_head node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
 typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
 
 typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
@@ -33874,6 +46900,8 @@
 
 typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
 
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
 enum sock_type {
 	SOCK_STREAM = 1,
 	SOCK_DGRAM = 2,
@@ -33884,37 +46912,6 @@
 	SOCK_PACKET = 10,
 };
 
-enum {
-	IPPROTO_IP = 0,
-	IPPROTO_ICMP = 1,
-	IPPROTO_IGMP = 2,
-	IPPROTO_IPIP = 4,
-	IPPROTO_TCP = 6,
-	IPPROTO_EGP = 8,
-	IPPROTO_PUP = 12,
-	IPPROTO_UDP = 17,
-	IPPROTO_IDP = 22,
-	IPPROTO_TP = 29,
-	IPPROTO_DCCP = 33,
-	IPPROTO_IPV6 = 41,
-	IPPROTO_RSVP = 46,
-	IPPROTO_GRE = 47,
-	IPPROTO_ESP = 50,
-	IPPROTO_AH = 51,
-	IPPROTO_MTP = 92,
-	IPPROTO_BEETPH = 94,
-	IPPROTO_ENCAP = 98,
-	IPPROTO_PIM = 103,
-	IPPROTO_COMP = 108,
-	IPPROTO_SCTP = 132,
-	IPPROTO_UDPLITE = 136,
-	IPPROTO_MPLS = 137,
-	IPPROTO_ETHERNET = 143,
-	IPPROTO_RAW = 255,
-	IPPROTO_MPTCP = 262,
-	IPPROTO_MAX = 263,
-};
-
 enum sock_flags {
 	SOCK_DEAD = 0,
 	SOCK_DONE = 1,
@@ -33943,6 +46940,7 @@
 	SOCK_TXTIME = 24,
 	SOCK_XDP = 25,
 	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
 };
 
 struct reuseport_array {
@@ -33950,6 +46948,15 @@
 	struct sock *ptrs[0];
 };
 
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int);
+};
+
 enum bpf_struct_ops_state {
 	BPF_STRUCT_OPS_STATE_INIT = 0,
 	BPF_STRUCT_OPS_STATE_INUSE = 1,
@@ -33971,14 +46978,40 @@
 
 struct bpf_struct_ops_map {
 	struct bpf_map map;
+	struct callback_head rcu;
 	const struct bpf_struct_ops *st_ops;
 	struct mutex lock;
-	struct bpf_prog **progs;
+	struct bpf_link **links;
 	void *image;
 	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 	struct bpf_struct_ops_value kvalue;
 };
 
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
 struct bpf_struct_ops_tcp_congestion_ops {
 	refcount_t refcnt;
 	enum bpf_struct_ops_state state;
@@ -33990,11 +47023,16 @@
 	long: 64;
 	long: 64;
 	struct tcp_congestion_ops data;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+};
+
+enum {
+	BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0,
+	BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1,
+	__NR_BPF_STRUCT_OPS_TYPE = 2,
+};
+
+enum {
+	BPF_F_BPRM_SECUREEXEC = 1,
 };
 
 struct sembuf {
@@ -34037,26 +47075,17 @@
 	__u16 ctx_len;
 };
 
-enum perf_branch_sample_type {
-	PERF_SAMPLE_BRANCH_USER = 1,
-	PERF_SAMPLE_BRANCH_KERNEL = 2,
-	PERF_SAMPLE_BRANCH_HV = 4,
-	PERF_SAMPLE_BRANCH_ANY = 8,
-	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
-	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
-	PERF_SAMPLE_BRANCH_IND_CALL = 64,
-	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
-	PERF_SAMPLE_BRANCH_IN_TX = 256,
-	PERF_SAMPLE_BRANCH_NO_TX = 512,
-	PERF_SAMPLE_BRANCH_COND = 1024,
-	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
-	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
-	PERF_SAMPLE_BRANCH_CALL = 8192,
-	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
-	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
-	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
-	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
-	PERF_SAMPLE_BRANCH_MAX = 262144,
+typedef u64 (*btf_bpf_bprm_opts_set)(struct linux_binprm *, u64);
+
+typedef u64 (*btf_bpf_ima_inode_hash)(struct inode *, void *, u32);
+
+typedef u64 (*btf_bpf_ima_file_hash)(struct file *, void *, u32);
+
+typedef u64 (*btf_bpf_get_attach_cookie)(void *);
+
+struct static_call_tramp_key {
+	s32 tramp;
+	s32 key;
 };
 
 enum perf_event_read_format {
@@ -34071,12 +47100,6 @@
 	PERF_IOC_FLAG_GROUP = 1,
 };
 
-struct perf_event_header {
-	__u32 type;
-	__u16 misc;
-	__u16 size;
-};
-
 struct perf_ns_link_info {
 	__u64 dev;
 	__u64 ino;
@@ -34114,21 +47137,8 @@
 	PERF_RECORD_BPF_EVENT = 18,
 	PERF_RECORD_CGROUP = 19,
 	PERF_RECORD_TEXT_POKE = 20,
-	PERF_RECORD_MAX = 21,
-};
-
-enum perf_addr_filter_action_t {
-	PERF_ADDR_FILTER_ACTION_STOP = 0,
-	PERF_ADDR_FILTER_ACTION_START = 1,
-	PERF_ADDR_FILTER_ACTION_FILTER = 2,
-};
-
-struct perf_addr_filter {
-	struct list_head entry;
-	struct path path;
-	long unsigned int offset;
-	long unsigned int size;
-	enum perf_addr_filter_action_t action;
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
 };
 
 struct swevent_hlist {
@@ -34186,11 +47196,6 @@
 	MAX_OPT_ARGS = 3,
 };
 
-typedef struct {
-	char *from;
-	char *to;
-} substring_t;
-
 struct min_heap {
 	void *data;
 	int nr;
@@ -34228,6 +47233,11 @@
 	EVENT_ALL = 3,
 };
 
+struct __group_key {
+	int cpu;
+	struct cgroup *cgroup;
+};
+
 struct stop_event_data {
 	struct perf_event *event;
 	unsigned int restart;
@@ -34307,6 +47317,8 @@
 	u64 ino_generation;
 	u32 prot;
 	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
 	struct {
 		struct perf_event_header header;
 		u32 pid;
@@ -34394,11 +47406,16 @@
 
 struct perf_aux_event {
 	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
 	u32 pid;
 	u32 tid;
 };
 
-struct perf_aux_event___2 {
+struct perf_aux_event___3 {
 	struct perf_event_header header;
 	u64 offset;
 	u64 size;
@@ -34410,6 +47427,12 @@
 	struct perf_callchain_entry *cpu_entries[0];
 };
 
+enum bp_type_idx {
+	TYPE_INST = 0,
+	TYPE_DATA = 0,
+	TYPE_MAX = 1,
+};
+
 struct bp_cpuinfo {
 	unsigned int cpu_pinned;
 	unsigned int *tsk_pinned;
@@ -34421,14 +47444,7 @@
 	unsigned int flexible;
 };
 
-struct compact_control;
-
-struct capture_control {
-	struct compact_control *cc;
-	struct page *page;
-};
-
-typedef u32 uprobe_opcode_t;
+typedef u8 uprobe_opcode_t;
 
 struct uprobe {
 	struct rb_node rb_node;
@@ -34455,8 +47471,17 @@
 
 typedef long unsigned int vm_flags_t;
 
-struct page_vma_mapped_walk {
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
 	struct page *page;
+};
+
+struct page_vma_mapped_walk {
+	long unsigned int pfn;
+	long unsigned int nr_pages;
+	long unsigned int pgoff;
 	struct vm_area_struct *vma;
 	long unsigned int address;
 	pmd_t *pmd;
@@ -34501,12 +47526,22 @@
 	struct mm_struct *mm;
 };
 
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
 struct map_info {
 	struct map_info *next;
 	struct mm_struct *mm;
 	long unsigned int vaddr;
 };
 
+struct user_return_notifier {
+	void (*on_user_return)(struct user_return_notifier *);
+	struct hlist_node link;
+};
+
 struct parallel_data;
 
 struct padata_priv {
@@ -34534,7 +47569,7 @@
 	struct padata_shell *ps;
 	struct padata_list *reorder_list;
 	struct padata_serial_queue *squeue;
-	atomic_t refcnt;
+	refcount_t refcnt;
 	unsigned int seq_nr;
 	unsigned int processed;
 	int cpu;
@@ -34543,6 +47578,8 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 	spinlock_t lock;
 	long: 32;
 	long: 64;
@@ -34729,7 +47766,7 @@
 struct watch_filter {
 	union {
 		struct callback_head rcu;
-		long unsigned int type_filter[2];
+		long unsigned int type_filter[1];
 	};
 	u32 nr_filters;
 	struct watch_type_filter filters[0];
@@ -34766,6 +47803,11 @@
 
 struct pkcs7_message;
 
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
+};
+
 typedef int __kernel_rwf_t;
 
 enum positive_aop_returns {
@@ -34773,16 +47815,13 @@
 	AOP_TRUNCATED_PAGE = 524289,
 };
 
-struct vm_event_state {
-	long unsigned int event[95];
-};
-
 enum iter_type {
-	ITER_IOVEC = 4,
-	ITER_KVEC = 8,
-	ITER_BVEC = 16,
-	ITER_PIPE = 32,
-	ITER_DISCARD = 64,
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_PIPE = 3,
+	ITER_XARRAY = 4,
+	ITER_DISCARD = 5,
 };
 
 enum mapping_flags {
@@ -34792,11 +47831,13 @@
 	AS_UNEVICTABLE = 3,
 	AS_EXITING = 4,
 	AS_NO_WRITEBACK_TAGS = 5,
-	AS_THP_SUPPORT = 6,
+	AS_LARGE_FOLIO_SUPPORT = 6,
 };
 
+typedef int filler_t(struct file *, struct folio *);
+
 struct wait_page_key {
-	struct page *page;
+	struct folio *folio;
 	int bit_nr;
 	int page_match;
 };
@@ -34807,24 +47848,10 @@
 	struct page *pages[15];
 };
 
-struct fid {
-	union {
-		struct {
-			u32 ino;
-			u32 gen;
-			u32 parent_ino;
-			u32 parent_gen;
-		} i32;
-		struct {
-			u32 block;
-			u16 partref;
-			u16 parent_partref;
-			u32 generation;
-			u32 parent_block;
-			u32 parent_generation;
-		} udf;
-		__u32 raw[0];
-	};
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
 };
 
 struct trace_event_raw_mm_filemap_op_page_cache {
@@ -34833,6 +47860,7 @@
 	long unsigned int i_ino;
 	long unsigned int index;
 	dev_t s_dev;
+	unsigned char order;
 	char __data[0];
 };
 
@@ -34860,9 +47888,9 @@
 
 struct trace_event_data_offsets_file_check_and_advance_wb_err {};
 
-typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *);
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
 
-typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *);
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
 
 typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
 
@@ -34880,52 +47908,83 @@
 	u8 sh2;
 };
 
-struct array_cache;
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
 
 struct kmem_cache_node;
 
 struct kmem_cache {
-	struct array_cache *cpu_cache;
-	unsigned int batchcount;
-	unsigned int limit;
-	unsigned int shared;
-	unsigned int size;
-	struct reciprocal_value reciprocal_buffer_size;
+	struct kmem_cache_cpu *cpu_slab;
 	slab_flags_t flags;
-	unsigned int num;
-	unsigned int gfporder;
+	long unsigned int min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
 	gfp_t allocflags;
-	size_t colour;
-	unsigned int colour_off;
-	struct kmem_cache *freelist_cache;
-	unsigned int freelist_size;
+	int refcount;
 	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
 	const char *name;
 	struct list_head list;
-	int refcount;
-	int object_size;
-	int align;
+	struct kobject kobj;
+	long unsigned int random;
+	unsigned int remote_node_defrag_ratio;
+	unsigned int *random_seq;
 	unsigned int useroffset;
 	unsigned int usersize;
-	struct kmem_cache_node *node[128];
+	struct kmem_cache_node *node[1024];
 };
 
-struct alien_cache;
+struct slab {
+	long unsigned int __page_flags;
+	union {
+		struct list_head slab_list;
+		struct callback_head callback_head;
+		struct {
+			struct slab *next;
+			int slabs;
+		};
+	};
+	struct kmem_cache *slab_cache;
+	void *freelist;
+	union {
+		long unsigned int counters;
+		struct {
+			unsigned int inuse: 16;
+			unsigned int objects: 15;
+			unsigned int frozen: 1;
+		};
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	long unsigned int memcg_data;
+};
+
+struct kmem_cache_cpu {
+	void **freelist;
+	long unsigned int tid;
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
 
 struct kmem_cache_node {
 	spinlock_t list_lock;
-	struct list_head slabs_partial;
-	struct list_head slabs_full;
-	struct list_head slabs_free;
-	long unsigned int total_slabs;
-	long unsigned int free_slabs;
-	long unsigned int free_objects;
-	unsigned int free_limit;
-	unsigned int colour_next;
-	struct array_cache *shared;
-	struct alien_cache **alien;
-	long unsigned int next_reap;
-	int free_touched;
+	long unsigned int nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
 };
 
 enum oom_constraint {
@@ -34947,39 +48006,6 @@
 	enum oom_constraint constraint;
 };
 
-struct mmu_table_batch {
-	struct callback_head rcu;
-	unsigned int nr;
-	void *tables[0];
-};
-
-struct mmu_gather_batch {
-	struct mmu_gather_batch *next;
-	unsigned int nr;
-	unsigned int max;
-	struct page *pages[0];
-};
-
-struct mmu_gather {
-	struct mm_struct *mm;
-	struct mmu_table_batch *batch;
-	long unsigned int start;
-	long unsigned int end;
-	unsigned int fullmm: 1;
-	unsigned int need_flush_all: 1;
-	unsigned int freed_tables: 1;
-	unsigned int cleared_ptes: 1;
-	unsigned int cleared_pmds: 1;
-	unsigned int cleared_puds: 1;
-	unsigned int cleared_p4ds: 1;
-	unsigned int vma_exec: 1;
-	unsigned int vma_huge: 1;
-	unsigned int batch_count;
-	struct mmu_gather_batch *active;
-	struct mmu_gather_batch local;
-	struct page *__pages[8];
-};
-
 enum compact_priority {
 	COMPACT_PRIO_SYNC_FULL = 0,
 	MIN_COMPACT_PRIORITY = 0,
@@ -35096,15 +48122,6 @@
 
 typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
 
-enum wb_congested_state {
-	WB_async_congested = 0,
-	WB_sync_congested = 1,
-};
-
-enum {
-	XA_CHECK_SCHED = 4096,
-};
-
 enum wb_state {
 	WB_registered = 0,
 	WB_writeback_running = 1,
@@ -35112,11 +48129,6 @@
 	WB_start_all = 3,
 };
 
-enum {
-	BLK_RW_ASYNC = 0,
-	BLK_RW_SYNC = 1,
-};
-
 struct wb_lock_cookie {
 	bool locked;
 	long unsigned int flags;
@@ -35124,6 +48136,12 @@
 
 typedef int (*writepage_t)(struct page *, struct writeback_control *, void *);
 
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
 struct dirty_throttle_control {
 	struct wb_domain *dom;
 	struct dirty_throttle_control *gdtc;
@@ -35141,20 +48159,18 @@
 
 typedef void compound_page_dtor(struct page *);
 
-typedef struct {} local_lock_t;
-
 struct trace_event_raw_mm_lru_insertion {
 	struct trace_entry ent;
-	struct page *page;
+	struct folio *folio;
 	long unsigned int pfn;
-	int lru;
+	enum lru_list lru;
 	long unsigned int flags;
 	char __data[0];
 };
 
 struct trace_event_raw_mm_lru_activate {
 	struct trace_entry ent;
-	struct page *page;
+	struct folio *folio;
 	long unsigned int pfn;
 	char __data[0];
 };
@@ -35163,9 +48179,9 @@
 
 struct trace_event_data_offsets_mm_lru_activate {};
 
-typedef void (*btf_trace_mm_lru_insertion)(void *, struct page *, int);
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
 
-typedef void (*btf_trace_mm_lru_activate)(void *, struct page *);
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
 
 struct lru_rotate {
 	local_lock_t lock;
@@ -35191,6 +48207,11 @@
 	PGDAT_RECLAIM_LOCKED = 2,
 };
 
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
 struct reclaim_stat {
 	unsigned int nr_dirty;
 	unsigned int nr_unqueued_dirty;
@@ -35204,15 +48225,36 @@
 	unsigned int nr_lazyfree_fail;
 };
 
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
 enum ttu_flags {
-	TTU_MIGRATION = 1,
-	TTU_MUNLOCK = 2,
 	TTU_SPLIT_HUGE_PMD = 4,
 	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
 	TTU_IGNORE_HWPOISON = 32,
 	TTU_BATCH_FLUSH = 64,
 	TTU_RMAP_LOCKED = 128,
-	TTU_SPLIT_FREEZE = 256,
+};
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
 };
 
 struct trace_event_raw_mm_vmscan_kswapd_sleep {
@@ -35234,14 +48276,14 @@
 	int nid;
 	int zid;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
 struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
 	struct trace_entry ent;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
@@ -35257,7 +48299,7 @@
 	void *shrink;
 	int nid;
 	long int nr_objects_to_shrink;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	long unsigned int cache_items;
 	long long unsigned int delta;
 	long unsigned int total_scan;
@@ -35285,12 +48327,12 @@
 	long unsigned int nr_scanned;
 	long unsigned int nr_skipped;
 	long unsigned int nr_taken;
-	isolate_mode_t isolate_mode;
+	unsigned int isolate_mode;
 	int lru;
 	char __data[0];
 };
 
-struct trace_event_raw_mm_vmscan_writepage {
+struct trace_event_raw_mm_vmscan_write_folio {
 	struct trace_entry ent;
 	long unsigned int pfn;
 	int reclaim_flags;
@@ -35327,24 +48369,20 @@
 	char __data[0];
 };
 
-struct trace_event_raw_mm_vmscan_inactive_list_is_low {
-	struct trace_entry ent;
-	int nid;
-	int reclaim_idx;
-	long unsigned int total_inactive;
-	long unsigned int inactive;
-	long unsigned int total_active;
-	long unsigned int active;
-	long unsigned int ratio;
-	int reclaim_flags;
-	char __data[0];
-};
-
 struct trace_event_raw_mm_vmscan_node_reclaim_begin {
 	struct trace_entry ent;
 	int nid;
 	int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
 	char __data[0];
 };
 
@@ -35364,16 +48402,16 @@
 
 struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
 
-struct trace_event_data_offsets_mm_vmscan_writepage {};
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
 
 struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
 
 struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
 
-struct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};
-
 struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
 
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
 typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
 
 typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
@@ -35398,18 +48436,18 @@
 
 typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);
 
-typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *);
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
 
 typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);
 
 typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);
 
-typedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);
-
 typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
 
 typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);
 
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
 struct scan_control {
 	long unsigned int nr_to_reclaim;
 	nodemask_t *nodemask;
@@ -35428,6 +48466,7 @@
 	unsigned int compaction_ready: 1;
 	unsigned int cache_trim_mode: 1;
 	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
 	s8 order;
 	s8 priority;
 	s8 reclaim_idx;
@@ -35467,16 +48506,7 @@
 	SCAN_FILE = 3,
 };
 
-enum transparent_hugepage_flag {
-	TRANSPARENT_HUGEPAGE_FLAG = 0,
-	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 1,
-	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 2,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 3,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 4,
-	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 5,
-	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 6,
-	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 7,
-};
+typedef __u64 __le64;
 
 struct xattr {
 	const char *name;
@@ -35495,7 +48525,8 @@
 	MPOL_BIND = 2,
 	MPOL_INTERLEAVE = 3,
 	MPOL_LOCAL = 4,
-	MPOL_MAX = 5,
+	MPOL_PREFERRED_MANY = 5,
+	MPOL_MAX = 6,
 };
 
 struct shared_policy {
@@ -35533,17 +48564,39 @@
 	FILEID_INVALID = 255,
 };
 
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		__u32 raw[0];
+	};
+};
+
 struct shmem_inode_info {
 	spinlock_t lock;
 	unsigned int seals;
 	long unsigned int flags;
 	long unsigned int alloced;
 	long unsigned int swapped;
+	long unsigned int fallocend;
 	struct list_head shrinklist;
 	struct list_head swaplist;
 	struct shared_policy policy;
 	struct simple_xattrs xattrs;
 	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
 	struct inode vfs_inode;
 };
 
@@ -35552,7 +48605,7 @@
 	struct percpu_counter used_blocks;
 	long unsigned int max_inodes;
 	long unsigned int free_inodes;
-	spinlock_t stat_lock;
+	raw_spinlock_t stat_lock;
 	umode_t mode;
 	unsigned char huge;
 	kuid_t uid;
@@ -35568,11 +48621,10 @@
 
 enum sgp_type {
 	SGP_READ = 0,
-	SGP_CACHE = 1,
-	SGP_NOHUGE = 2,
-	SGP_HUGE = 3,
-	SGP_WRITE = 4,
-	SGP_FALLOC = 5,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
 };
 
 struct shmem_falloc {
@@ -35633,12 +48685,6 @@
 	RADIX_TREE_ITER_CONTIG = 32,
 };
 
-enum mminit_level {
-	MMINIT_WARNING = 0,
-	MMINIT_VERIFY = 1,
-	MMINIT_TRACE = 2,
-};
-
 struct pcpu_group_info {
 	int nr_units;
 	long unsigned int base_offset;
@@ -35657,14 +48703,13 @@
 	struct pcpu_group_info groups[0];
 };
 
-typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);
-
-typedef void (*pcpu_fc_free_fn_t)(void *, size_t);
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
 
 typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
 
 struct trace_event_raw_percpu_alloc_percpu {
 	struct trace_entry ent;
+	long unsigned int call_site;
 	bool reserved;
 	bool is_atomic;
 	size_t size;
@@ -35672,6 +48717,8 @@
 	void *base_addr;
 	int off;
 	void *ptr;
+	size_t bytes_alloc;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
@@ -35714,7 +48761,7 @@
 
 struct trace_event_data_offsets_percpu_destroy_chunk {};
 
-typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, long unsigned int, bool, bool, size_t, size_t, void *, int, void *, size_t, gfp_t);
 
 typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);
 
@@ -35724,13 +48771,6 @@
 
 typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
 
-enum pcpu_chunk_type {
-	PCPU_CHUNK_ROOT = 0,
-	PCPU_CHUNK_MEMCG = 1,
-	PCPU_NR_CHUNK_TYPES = 2,
-	PCPU_FAIL_ALLOC = 2,
-};
-
 struct pcpu_block_md {
 	int scan_hint;
 	int scan_hint_start;
@@ -35752,6 +48792,7 @@
 	struct pcpu_block_md *md_blocks;
 	void *data;
 	bool immutable;
+	bool isolated;
 	int start_offset;
 	int end_offset;
 	struct obj_cgroup **obj_cgroups;
@@ -35767,7 +48808,7 @@
 	const void *ptr;
 	size_t bytes_req;
 	size_t bytes_alloc;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	char __data[0];
 };
 
@@ -35777,18 +48818,26 @@
 	const void *ptr;
 	size_t bytes_req;
 	size_t bytes_alloc;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	int node;
 	char __data[0];
 };
 
-struct trace_event_raw_kmem_free {
+struct trace_event_raw_kfree {
 	struct trace_entry ent;
 	long unsigned int call_site;
 	const void *ptr;
 	char __data[0];
 };
 
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	long unsigned int call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
 struct trace_event_raw_mm_page_free {
 	struct trace_entry ent;
 	long unsigned int pfn;
@@ -35806,7 +48855,7 @@
 	struct trace_entry ent;
 	long unsigned int pfn;
 	unsigned int order;
-	gfp_t gfp_flags;
+	long unsigned int gfp_flags;
 	int migratetype;
 	char __data[0];
 };
@@ -35816,6 +48865,7 @@
 	long unsigned int pfn;
 	unsigned int order;
 	int migratetype;
+	int percpu_refill;
 	char __data[0];
 };
 
@@ -35851,7 +48901,11 @@
 
 struct trace_event_data_offsets_kmem_alloc_node {};
 
-struct trace_event_data_offsets_kmem_free {};
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
 
 struct trace_event_data_offsets_mm_page_free {};
 
@@ -35877,7 +48931,7 @@
 
 typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);
 
-typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);
+typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const char *);
 
 typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
 
@@ -35885,7 +48939,7 @@
 
 typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
 
-typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int);
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
 
 typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
 
@@ -35902,7 +48956,7 @@
 };
 
 struct kmalloc_info_struct {
-	const char *name[3];
+	const char *name[4];
 	unsigned int size;
 };
 
@@ -35919,6 +48973,17 @@
 	unsigned int cache_order;
 };
 
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	long unsigned int kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
 enum pageblock_bits {
 	PB_migrate = 0,
 	PB_migrate_end = 2,
@@ -35926,14 +48991,6 @@
 	NR_PAGEBLOCK_BITS = 4,
 };
 
-struct node___2 {
-	struct device dev;
-	struct list_head access_list;
-	struct work_struct node_work;
-	struct list_head cache_attrs;
-	struct device *cache_dev;
-};
-
 struct alloc_context {
 	struct zonelist *zonelist;
 	nodemask_t *nodemask;
@@ -35983,7 +49040,7 @@
 struct trace_event_raw_mm_compaction_try_to_compact_pages {
 	struct trace_entry ent;
 	int order;
-	gfp_t gfp_mask;
+	long unsigned int gfp_mask;
 	int prio;
 	char __data[0];
 };
@@ -36044,11 +49101,11 @@
 
 typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
 
-typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
 
-typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, long unsigned int, long unsigned int, bool);
 
-typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, long unsigned int, long unsigned int, bool, int);
 
 typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
 
@@ -36082,12 +49139,6 @@
 	long unsigned int rb_subtree_last;
 };
 
-struct rb_augment_callbacks {
-	void (*propagate)(struct rb_node *, struct rb_node *);
-	void (*copy)(struct rb_node *, struct rb_node *);
-	void (*rotate)(struct rb_node *, struct rb_node *);
-};
-
 enum lru_status {
 	LRU_REMOVED = 0,
 	LRU_REMOVED_RETRY = 1,
@@ -36096,53 +49147,90 @@
 	LRU_RETRY = 4,
 };
 
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
 typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
 
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
 typedef struct {
 	long unsigned int pd;
 } hugepd_t;
 
-struct migration_target_control {
-	int nid;
-	nodemask_t *nmask;
-	gfp_t gfp_mask;
-};
-
 struct follow_page_context {
 	struct dev_pagemap *pgmap;
 	unsigned int page_mask;
 };
 
-typedef struct {
-	u64 val;
-} pfn_t;
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char *buf;
+	local_t buf_idx;
+};
+
+typedef unsigned int zap_flags_t;
 
 typedef unsigned int pgtbl_mod_mask;
 
-struct zap_details {
-	struct address_space *check_mapping;
-	long unsigned int first_index;
-	long unsigned int last_index;
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_NEVER_DAX = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
 };
 
 typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);
 
-enum {
-	SWP_USED = 1,
-	SWP_WRITEOK = 2,
-	SWP_DISCARDABLE = 4,
-	SWP_DISCARDING = 8,
-	SWP_SOLIDSTATE = 16,
-	SWP_CONTINUED = 32,
-	SWP_BLKDEV = 64,
-	SWP_ACTIVATED = 128,
-	SWP_FS_OPS = 256,
-	SWP_AREA_DISCARD = 512,
-	SWP_PAGE_DISCARD = 1024,
-	SWP_STABLE_WRITES = 2048,
-	SWP_SYNCHRONOUS_IO = 4096,
-	SWP_VALID = 8192,
-	SWP_SCANNING = 16384,
+typedef long unsigned int pte_marker;
+
+typedef int rmap_t;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
 };
 
 struct copy_subpage_arg {
@@ -36182,13 +49270,9 @@
 	void *private;
 };
 
-struct vm_unmapped_area_info {
-	long unsigned int flags;
-	long unsigned int length;
-	long unsigned int low_limit;
-	long unsigned int high_limit;
-	long unsigned int align_mask;
-	long unsigned int align_offset;
+struct mlock_pvec {
+	local_lock_t lock;
+	struct pagevec vec;
 };
 
 enum {
@@ -36213,21 +49297,89 @@
 
 typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);
 
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
+};
+
 struct rmap_walk_control {
 	void *arg;
-	bool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *);
-	int (*done)(struct page *);
-	struct anon_vma * (*anon_lock)(struct page *);
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, long unsigned int, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
 	bool (*invalid_vma)(struct vm_area_struct *, void *);
 };
 
-struct page_referenced_arg {
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	long unsigned int pages;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	long unsigned int succeeded;
+	long unsigned int failed;
+	long unsigned int thp_succeeded;
+	long unsigned int thp_failed;
+	long unsigned int thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, long unsigned int, long unsigned int, int);
+
+struct folio_referenced_arg {
 	int mapcount;
 	int referenced;
 	long unsigned int vm_flags;
 	struct mem_cgroup *memcg;
 };
 
+struct make_exclusive_args {
+	struct mm_struct *mm;
+	long unsigned int address;
+	void *owner;
+	bool valid;
+};
+
 struct vmap_area {
 	long unsigned int va_start;
 	long unsigned int va_end;
@@ -36236,10 +49388,11 @@
 	union {
 		long unsigned int subtree_max_size;
 		struct vm_struct *vm;
-		struct llist_node purge_list;
 	};
 };
 
+typedef unsigned int kasan_vmalloc_flags_t;
+
 struct vfree_deferred {
 	struct llist_head list;
 	struct work_struct wq;
@@ -36270,6 +49423,12 @@
 	struct list_head purge;
 };
 
+struct vmap_pfn_data {
+	long unsigned int *pfns;
+	pgprot_t prot;
+	unsigned int idx;
+};
+
 struct page_frag_cache {
 	void *va;
 	__u16 offset;
@@ -36278,8 +49437,26 @@
 	bool pfmemalloc;
 };
 
-enum zone_flags {
-	ZONE_BOOSTED_WATERMARK = 0,
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+typedef int fpi_t;
+
+struct pagesets {
+	local_lock_t lock;
+};
+
+struct pcpu_drain {
+	struct zone *zone;
+	struct work_struct work;
 };
 
 struct mminit_pfnnid_cache {
@@ -36288,18 +49465,74 @@
 	int last_nid;
 };
 
-typedef int fpi_t;
-
-struct pcpu_drain {
-	struct zone *zone;
-	struct work_struct work;
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
 };
 
-enum mf_flags {
-	MF_COUNT_INCREASED = 1,
-	MF_ACTION_REQUIRED = 2,
-	MF_MUST_KILL = 4,
-	MF_SOFT_OFFLINE = 8,
+typedef int mhp_t;
+
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	long unsigned int present_kernel_pages;
+	long unsigned int present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			long unsigned int max_pages;
+		} s;
+		struct {
+			long unsigned int unit_pages;
+		} d;
+	};
+};
+
+struct memory_block {
+	long unsigned int start_section_nr;
+	long unsigned int state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	long unsigned int nr_vmemmap_pages;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+struct memory_notify {
+	long unsigned int start_pfn;
+	long unsigned int nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+enum hugetlb_page_flags {
+	HPG_restore_reserve = 0,
+	HPG_migratable = 1,
+	HPG_temporary = 2,
+	HPG_freed = 3,
+	HPG_vmemmap_optimized = 4,
+	__NR_HPAGEFLAGS = 5,
+};
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
+};
+
+struct auto_movable_stats {
+	long unsigned int kernel_early_pages;
+	long unsigned int movable_pages;
+};
+
+struct auto_movable_group_stats {
+	long unsigned int movable_pages;
+	long unsigned int req_kernel_early_pages;
 };
 
 struct madvise_walk_private {
@@ -36307,6 +49540,20 @@
 	bool pageout;
 };
 
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+};
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
 struct vma_swap_readahead {
 	short unsigned int win;
 	short unsigned int offset;
@@ -36314,6 +49561,12 @@
 	pte_t *ptes;
 };
 
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
 union swap_header {
 	struct {
 		char reserved[4086];
@@ -36355,11 +49608,23 @@
 	int (*load)(unsigned int, long unsigned int, struct page *);
 	void (*invalidate_page)(unsigned int, long unsigned int);
 	void (*invalidate_area)(unsigned int);
-	struct frontswap_ops *next;
 };
 
-struct crypto_comp {
-	struct crypto_tfm base;
+struct crypto_async_request;
+
+typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
 };
 
 struct zpool;
@@ -36375,9 +49640,35 @@
 	ZPOOL_MM_DEFAULT = 0,
 };
 
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	void *__ctx[0];
+};
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_acomp_ctx {
+	struct crypto_acomp *acomp;
+	struct acomp_req *req;
+	struct crypto_wait wait;
+	u8 *dstmem;
+	struct mutex *mutex;
+};
+
 struct zswap_pool {
 	struct zpool *zpool;
-	struct crypto_comp **tfm;
+	struct crypto_acomp_ctx *acomp_ctx;
 	struct kref kref;
 	struct list_head list;
 	struct work_struct release_work;
@@ -36396,6 +49687,7 @@
 		long unsigned int handle;
 		long unsigned int value;
 	};
+	struct obj_cgroup *objcg;
 };
 
 struct zswap_header {
@@ -36437,6 +49729,20 @@
 	STRING_UNITS_2 = 1,
 };
 
+enum mcopy_atomic_mode {
+	MCOPY_ATOMIC_NORMAL = 0,
+	MCOPY_ATOMIC_ZEROPAGE = 1,
+	MCOPY_ATOMIC_CONTINUE = 2,
+};
+
+enum {
+	SUBPAGE_INDEX_SUBPOOL = 1,
+	SUBPAGE_INDEX_CGROUP = 2,
+	SUBPAGE_INDEX_CGROUP_RSVD = 3,
+	__MAX_CGROUP_SUBPAGE_INDEX = 3,
+	__NR_USED_SUBPAGE = 4,
+};
+
 struct resv_map {
 	struct kref refs;
 	spinlock_t lock;
@@ -36467,14 +49773,19 @@
 	HUGETLB_NR_MEMORY_EVENTS = 1,
 };
 
+struct hugetlb_cgroup_per_node {
+	long unsigned int usage[2];
+};
+
 struct hugetlb_cgroup {
 	struct cgroup_subsys_state css;
-	struct page_counter hugepage[4];
-	struct page_counter rsvd_hugepage[4];
-	atomic_long_t events[4];
-	atomic_long_t events_local[4];
-	struct cgroup_file events_file[4];
-	struct cgroup_file events_local_file[4];
+	struct page_counter hugepage[2];
+	struct page_counter rsvd_hugepage[2];
+	atomic_long_t events[2];
+	atomic_long_t events_local[2];
+	struct cgroup_file events_file[2];
+	struct cgroup_file events_local_file[2];
+	struct hugetlb_cgroup_per_node *nodeinfo[0];
 };
 
 enum vma_resv_mode {
@@ -36482,11 +49793,17 @@
 	VMA_COMMIT_RESV = 1,
 	VMA_END_RESV = 2,
 	VMA_ADD_RESV = 3,
+	VMA_DEL_RESV = 4,
 };
 
 struct node_hstate {
 	struct kobject *hugepages_kobj;
-	struct kobject *hstate_kobjs[4];
+	struct kobject *hstate_kobjs[2];
+};
+
+enum vmemmap_optimize_mode {
+	VMEMMAP_OPTIMIZE_OFF = 0,
+	VMEMMAP_OPTIMIZE_ON = 1,
 };
 
 struct nodemask_scratch {
@@ -36515,6 +49832,14 @@
 	struct vm_area_struct *first;
 };
 
+struct vmemmap_remap_walk {
+	void (*remap_pte)(pte_t *, long unsigned int, struct vmemmap_remap_walk *);
+	long unsigned int nr_walked;
+	struct page *reuse_page;
+	long unsigned int reuse_addr;
+	struct list_head *vmemmap_pages;
+};
+
 struct mmu_notifier_subscriptions {
 	struct hlist_head list;
 	bool has_itree;
@@ -36526,13 +49851,6 @@
 	struct hlist_head deferred_list;
 };
 
-struct interval_tree_node {
-	struct rb_node rb;
-	long unsigned int start;
-	long unsigned int last;
-	long unsigned int __subtree_last;
-};
-
 struct mmu_interval_notifier;
 
 struct mmu_interval_notifier_ops {
@@ -36609,49 +49927,168 @@
 	GET_KSM_PAGE_TRYLOCK = 2,
 };
 
-struct array_cache {
-	unsigned int avail;
-	unsigned int limit;
-	unsigned int batchcount;
-	unsigned int touched;
-	void *entry[0];
+typedef u32 depot_stack_handle_t;
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
 };
 
-struct alien_cache {
-	spinlock_t lock;
-	struct array_cache ac;
+struct track {
+	long unsigned int addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	long unsigned int when;
 };
 
-typedef unsigned char freelist_idx_t;
-
-enum {
-	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
-	SECTION_INFO = 12,
-	MIX_SECTION_INFO = 13,
-	NODE_INFO = 14,
-	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
 };
 
-enum {
-	MMOP_OFFLINE = 0,
-	MMOP_ONLINE = 1,
-	MMOP_ONLINE_KERNEL = 2,
-	MMOP_ONLINE_MOVABLE = 3,
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
 };
 
-typedef int mhp_t;
-
-typedef void (*online_page_callback_t)(struct page *, unsigned int);
-
-struct memory_block {
-	long unsigned int start_section_nr;
-	long unsigned int state;
-	int online_type;
-	int phys_device;
-	struct device dev;
-	int nid;
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
 };
 
+struct location {
+	depot_stack_handle_t handle;
+	long unsigned int count;
+	long unsigned int addr;
+	long long int sum_time;
+	long int min_time;
+	long int max_time;
+	long int min_pid;
+	long int max_pid;
+	long unsigned int cpus[128];
+	nodemask_t nodes;
+};
+
+struct loc_track {
+	long unsigned int max;
+	long unsigned int count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FULL = 2,
+	M_FREE = 3,
+	M_FULL_NOLIST = 4,
+};
+
+struct kcsan_scoped_access {};
+
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED = 0,
+	KFENCE_OBJECT_ALLOCATED = 1,
+	KFENCE_OBJECT_FREED = 2,
+};
+
+struct kfence_track {
+	pid_t pid;
+	int cpu;
+	u64 ts_nsec;
+	int num_stack_entries;
+	long unsigned int stack_entries[64];
+};
+
+struct kfence_metadata {
+	struct list_head list;
+	struct callback_head callback_head;
+	raw_spinlock_t lock;
+	enum kfence_object_state state;
+	long unsigned int addr;
+	size_t size;
+	struct kmem_cache *cache;
+	long unsigned int unprotected_page;
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+	u32 alloc_stack_hash;
+	struct obj_cgroup *objcg;
+};
+
+enum kfence_error_type {
+	KFENCE_ERROR_OOB = 0,
+	KFENCE_ERROR_UAF = 1,
+	KFENCE_ERROR_CORRUPTION = 2,
+	KFENCE_ERROR_INVALID = 3,
+	KFENCE_ERROR_INVALID_FREE = 4,
+};
+
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED = 0,
+	KFENCE_COUNTER_ALLOCS = 1,
+	KFENCE_COUNTER_FREES = 2,
+	KFENCE_COUNTER_ZOMBIES = 3,
+	KFENCE_COUNTER_BUGS = 4,
+	KFENCE_COUNTER_SKIP_INCOMPAT = 5,
+	KFENCE_COUNTER_SKIP_CAPACITY = 6,
+	KFENCE_COUNTER_SKIP_COVERED = 7,
+	KFENCE_COUNTER_COUNT = 8,
+};
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
 struct buffer_head;
 
 typedef void bh_end_io_t(struct buffer_head *, int);
@@ -36696,21 +50133,64 @@
 	BH_PrivateStart = 16,
 };
 
-struct trace_event_raw_mm_migrate_pages {
+struct demotion_nodes {
+	short unsigned int nr;
+	short int nodes[15];
+};
+
+enum migrate_vma_direction {
+	MIGRATE_VMA_SELECT_SYSTEM = 1,
+	MIGRATE_VMA_SELECT_DEVICE_PRIVATE = 2,
+};
+
+struct migrate_vma {
+	struct vm_area_struct *vma;
+	long unsigned int *dst;
+	long unsigned int *src;
+	long unsigned int cpages;
+	long unsigned int npages;
+	long unsigned int start;
+	long unsigned int end;
+	void *pgmap_owner;
+	long unsigned int flags;
+};
+
+struct trace_event_raw_hugepage_set_pmd {
 	struct trace_entry ent;
-	long unsigned int succeeded;
-	long unsigned int failed;
-	long unsigned int thp_succeeded;
-	long unsigned int thp_failed;
-	long unsigned int thp_split;
-	enum migrate_mode mode;
-	int reason;
+	long unsigned int addr;
+	long unsigned int pmd;
 	char __data[0];
 };
 
-struct trace_event_data_offsets_mm_migrate_pages {};
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pte;
+	long unsigned int clr;
+	long unsigned int set;
+	char __data[0];
+};
 
-typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	long unsigned int addr;
+	long unsigned int pmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hugepage_set_pmd {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_hugepage_update)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, long unsigned int, long unsigned int);
 
 enum scan_result {
 	SCAN_FAIL = 0,
@@ -36734,12 +50214,11 @@
 	SCAN_VMA_NULL = 18,
 	SCAN_VMA_CHECK = 19,
 	SCAN_ADDRESS_RANGE = 20,
-	SCAN_SWAP_CACHE_PAGE = 21,
-	SCAN_DEL_PAGE_LRU = 22,
-	SCAN_ALLOC_HUGE_PAGE_FAIL = 23,
-	SCAN_CGROUP_CHARGE_FAIL = 24,
-	SCAN_TRUNCATED = 25,
-	SCAN_PAGE_HAS_PRIVATE = 26,
+	SCAN_DEL_PAGE_LRU = 21,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 22,
+	SCAN_CGROUP_CHARGE_FAIL = 23,
+	SCAN_TRUNCATED = 24,
+	SCAN_PAGE_HAS_PRIVATE = 25,
 };
 
 struct trace_event_raw_mm_khugepaged_scan_pmd {
@@ -36823,7 +50302,7 @@
 };
 
 struct mem_cgroup_tree {
-	struct mem_cgroup_tree_per_node *rb_tree_per_node[128];
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[1024];
 };
 
 struct mem_cgroup_eventfd_list {
@@ -36859,14 +50338,12 @@
 enum res_type {
 	_MEM = 0,
 	_MEMSWAP = 1,
-	_OOM_TYPE = 2,
-	_KMEM = 3,
-	_TCP = 4,
+	_KMEM = 2,
+	_TCP = 3,
 };
 
 struct memory_stat {
 	const char *name;
-	unsigned int ratio;
 	unsigned int idx;
 };
 
@@ -36875,18 +50352,15 @@
 	wait_queue_entry_t wait;
 };
 
-enum oom_status {
-	OOM_SUCCESS = 0,
-	OOM_FAILED = 1,
-	OOM_ASYNC = 2,
-	OOM_SKIPPED = 3,
-};
-
 struct memcg_stock_pcp {
+	local_lock_t stock_lock;
 	struct mem_cgroup *cached;
 	unsigned int nr_pages;
 	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
 	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
 	struct work_struct work;
 	long unsigned int flags;
 };
@@ -36913,10 +50387,10 @@
 
 struct uncharge_gather {
 	struct mem_cgroup *memcg;
-	long unsigned int nr_pages;
+	long unsigned int nr_memory;
 	long unsigned int pgpgout;
 	long unsigned int nr_kmem;
-	struct page *dummy_page;
+	int nid;
 };
 
 struct numa_stat {
@@ -36978,37 +50452,27 @@
 	MF_MSG_KERNEL_HIGH_ORDER = 1,
 	MF_MSG_SLAB = 2,
 	MF_MSG_DIFFERENT_COMPOUND = 3,
-	MF_MSG_POISONED_HUGE = 4,
-	MF_MSG_HUGE = 5,
-	MF_MSG_FREE_HUGE = 6,
-	MF_MSG_NON_PMD_HUGE = 7,
-	MF_MSG_UNMAP_FAILED = 8,
-	MF_MSG_DIRTY_SWAPCACHE = 9,
-	MF_MSG_CLEAN_SWAPCACHE = 10,
-	MF_MSG_DIRTY_MLOCKED_LRU = 11,
-	MF_MSG_CLEAN_MLOCKED_LRU = 12,
-	MF_MSG_DIRTY_UNEVICTABLE_LRU = 13,
-	MF_MSG_CLEAN_UNEVICTABLE_LRU = 14,
-	MF_MSG_DIRTY_LRU = 15,
-	MF_MSG_CLEAN_LRU = 16,
-	MF_MSG_TRUNCATED_LRU = 17,
-	MF_MSG_BUDDY = 18,
-	MF_MSG_BUDDY_2ND = 19,
-	MF_MSG_DAX = 20,
-	MF_MSG_UNSPLIT_THP = 21,
-	MF_MSG_UNKNOWN = 22,
+	MF_MSG_HUGE = 4,
+	MF_MSG_FREE_HUGE = 5,
+	MF_MSG_NON_PMD_HUGE = 6,
+	MF_MSG_UNMAP_FAILED = 7,
+	MF_MSG_DIRTY_SWAPCACHE = 8,
+	MF_MSG_CLEAN_SWAPCACHE = 9,
+	MF_MSG_DIRTY_MLOCKED_LRU = 10,
+	MF_MSG_CLEAN_MLOCKED_LRU = 11,
+	MF_MSG_DIRTY_UNEVICTABLE_LRU = 12,
+	MF_MSG_CLEAN_UNEVICTABLE_LRU = 13,
+	MF_MSG_DIRTY_LRU = 14,
+	MF_MSG_CLEAN_LRU = 15,
+	MF_MSG_TRUNCATED_LRU = 16,
+	MF_MSG_BUDDY = 17,
+	MF_MSG_DAX = 18,
+	MF_MSG_UNSPLIT_THP = 19,
+	MF_MSG_UNKNOWN = 20,
 };
 
 typedef long unsigned int dax_entry_t;
 
-struct __kfifo {
-	unsigned int in;
-	unsigned int out;
-	unsigned int mask;
-	unsigned int esize;
-	void *data;
-};
-
 struct to_kill {
 	struct list_head nd;
 	struct task_struct *tsk;
@@ -37016,11 +50480,17 @@
 	short int size_shift;
 };
 
+struct hwp_walk {
+	struct to_kill tk;
+	long unsigned int pfn;
+	int flags;
+};
+
 struct page_state {
 	long unsigned int mask;
 	long unsigned int res;
 	enum mf_action_page_type type;
-	int (*action)(struct page *, long unsigned int);
+	int (*action)(struct page_state *, struct page *);
 };
 
 struct memory_failure_entry {
@@ -37044,24 +50514,6 @@
 	struct work_struct work;
 };
 
-struct cleancache_filekey {
-	union {
-		ino_t ino;
-		__u32 fh[6];
-		u32 key[6];
-	} u;
-};
-
-struct cleancache_ops {
-	int (*init_fs)(size_t);
-	int (*init_shared_fs)(uuid_t *, size_t);
-	int (*get_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*put_page)(int, struct cleancache_filekey, long unsigned int, struct page *);
-	void (*invalidate_page)(int, struct cleancache_filekey, long unsigned int);
-	void (*invalidate_inode)(int, struct cleancache_filekey);
-	void (*invalidate_fs)(int);
-};
-
 struct trace_event_raw_test_pages_isolated {
 	struct trace_entry ent;
 	long unsigned int start_pfn;
@@ -37081,7 +50533,7 @@
 	void *pool;
 	const struct zpool_ops *ops;
 	bool evictable;
-	struct list_head list;
+	bool can_sleep_mapped;
 };
 
 struct zpool_driver {
@@ -37095,6 +50547,7 @@
 	int (*malloc)(void *, size_t, gfp_t, long unsigned int *);
 	void (*free)(void *, long unsigned int);
 	int (*shrink)(void *, unsigned int, unsigned int *);
+	bool sleep_mapped;
 	void * (*map)(void *, long unsigned int, enum zpool_mapmode);
 	void (*unmap)(void *, long unsigned int);
 	u64 (*total_size)(void *);
@@ -37108,8 +50561,10 @@
 
 struct zbud_pool {
 	spinlock_t lock;
-	struct list_head unbuddied[63];
-	struct list_head buddied;
+	union {
+		struct list_head buddied;
+		struct list_head unbuddied[63];
+	};
 	struct list_head lru;
 	u64 pages_nr;
 	const struct zbud_ops *ops;
@@ -37137,7 +50592,7 @@
 };
 
 struct zs_pool_stats {
-	long unsigned int pages_compacted;
+	atomic_long_t pages_compacted;
 };
 
 enum fullness_group {
@@ -37148,7 +50603,7 @@
 	NR_ZS_FULLNESS = 4,
 };
 
-enum zs_stat_type {
+enum class_stat_type {
 	CLASS_EMPTY = 0,
 	CLASS_ALMOST_EMPTY = 1,
 	CLASS_ALMOST_FULL = 2,
@@ -37189,13 +50644,12 @@
 	struct shrinker shrinker;
 	struct inode *inode;
 	struct work_struct free_work;
-	struct wait_queue_head migration_wait;
-	atomic_long_t isolated_pages;
-	bool destroying;
+	rwlock_t migrate_lock;
 };
 
 struct zspage {
 	struct {
+		unsigned int huge: 1;
 		unsigned int fullness: 2;
 		unsigned int class: 9;
 		unsigned int isolated: 3;
@@ -37209,6 +50663,7 @@
 };
 
 struct mapping_area {
+	local_lock_t lock;
 	char *vm_buf;
 	char *vm_addr;
 	enum zs_mapmode vm_mm;
@@ -37220,40 +50675,6 @@
 	int obj_idx;
 };
 
-struct cma {
-	long unsigned int base_pfn;
-	long unsigned int count;
-	long unsigned int *bitmap;
-	unsigned int order_per_bit;
-	struct mutex lock;
-	char name[64];
-};
-
-struct trace_event_raw_cma_alloc {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	const struct page *page;
-	unsigned int count;
-	unsigned int align;
-	char __data[0];
-};
-
-struct trace_event_raw_cma_release {
-	struct trace_entry ent;
-	long unsigned int pfn;
-	const struct page *page;
-	unsigned int count;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_cma_alloc {};
-
-struct trace_event_data_offsets_cma_release {};
-
-typedef void (*btf_trace_cma_alloc)(void *, long unsigned int, const struct page *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_cma_release)(void *, long unsigned int, const struct page *, unsigned int);
-
 struct balloon_dev_info {
 	long unsigned int isolated_pages;
 	spinlock_t pages_lock;
@@ -37262,21 +50683,6 @@
 	struct inode *inode;
 };
 
-struct page_ext_operations {
-	size_t offset;
-	size_t size;
-	bool (*need)();
-	void (*init)();
-};
-
-struct frame_vector {
-	unsigned int nr_allocated;
-	unsigned int nr_frames;
-	bool got_ref;
-	bool is_pfns;
-	void *ptrs[0];
-};
-
 enum {
 	BAD_STACK = 4294967295,
 	NOT_STACK = 0,
@@ -37322,10 +50728,26 @@
 	unsigned int seals;
 };
 
+struct wp_walk {
+	struct mmu_notifier_range range;
+	long unsigned int tlbflush_start;
+	long unsigned int tlbflush_end;
+	long unsigned int total;
+};
+
+struct clean_walk {
+	struct wp_walk base;
+	long unsigned int bitmap_pgoff;
+	long unsigned int *bitmap;
+	long unsigned int start;
+	long unsigned int end;
+};
+
 struct page_reporting_dev_info {
 	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
 	struct delayed_work work;
 	atomic_t state;
+	unsigned int order;
 };
 
 enum {
@@ -37336,18 +50758,6 @@
 
 typedef s32 compat_off_t;
 
-struct open_how {
-	__u64 flags;
-	__u64 mode;
-	__u64 resolve;
-};
-
-enum fsnotify_data_type {
-	FSNOTIFY_EVENT_NONE = 0,
-	FSNOTIFY_EVENT_PATH = 1,
-	FSNOTIFY_EVENT_INODE = 2,
-};
-
 struct open_flags {
 	int open_flag;
 	umode_t mode;
@@ -37356,8 +50766,18 @@
 	int lookup_flags;
 };
 
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
 typedef __kernel_rwf_t rwf_t;
 
+struct files_stat_struct {
+	long unsigned int nr_files;
+	long unsigned int nr_free_files;
+	long unsigned int max_files;
+};
+
 struct fscrypt_policy_v1 {
 	__u8 version;
 	__u8 contents_encryption_mode;
@@ -37400,82 +50820,38 @@
 };
 
 struct stat {
-	long unsigned int st_dev;
-	long unsigned int st_ino;
+	__kernel_ulong_t st_dev;
+	__kernel_ulong_t st_ino;
+	__kernel_ulong_t st_nlink;
 	unsigned int st_mode;
-	unsigned int st_nlink;
 	unsigned int st_uid;
 	unsigned int st_gid;
-	long unsigned int st_rdev;
-	long unsigned int __pad1;
-	long int st_size;
-	int st_blksize;
-	int __pad2;
-	long int st_blocks;
-	long int st_atime;
-	long unsigned int st_atime_nsec;
-	long int st_mtime;
-	long unsigned int st_mtime_nsec;
-	long int st_ctime;
-	long unsigned int st_ctime_nsec;
-	unsigned int __unused4;
-	unsigned int __unused5;
+	unsigned int __pad0;
+	__kernel_ulong_t st_rdev;
+	__kernel_long_t st_size;
+	__kernel_long_t st_blksize;
+	__kernel_long_t st_blocks;
+	__kernel_ulong_t st_atime;
+	__kernel_ulong_t st_atime_nsec;
+	__kernel_ulong_t st_mtime;
+	__kernel_ulong_t st_mtime_nsec;
+	__kernel_ulong_t st_ctime;
+	__kernel_ulong_t st_ctime_nsec;
+	__kernel_long_t __unused[3];
 };
 
-typedef u32 compat_ino_t;
-
-typedef u16 compat_ushort_t;
-
-typedef s64 compat_s64;
-
-typedef u16 __compat_uid16_t;
-
-typedef u16 __compat_gid16_t;
-
-typedef u16 compat_mode_t;
-
-typedef u32 compat_dev_t;
-
-struct compat_stat {
-	compat_dev_t st_dev;
-	compat_ino_t st_ino;
-	compat_mode_t st_mode;
-	compat_ushort_t st_nlink;
-	__compat_uid16_t st_uid;
-	__compat_gid16_t st_gid;
-	compat_dev_t st_rdev;
-	compat_off_t st_size;
-	compat_off_t st_blksize;
-	compat_off_t st_blocks;
-	old_time32_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	old_time32_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	old_time32_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_ulong_t __unused4[2];
-};
-
-struct stat64 {
-	compat_u64 st_dev;
-	unsigned char __pad0[4];
-	compat_ulong_t __st_ino;
-	compat_uint_t st_mode;
-	compat_uint_t st_nlink;
-	compat_ulong_t st_uid;
-	compat_ulong_t st_gid;
-	compat_u64 st_rdev;
-	unsigned char __pad3[4];
-	compat_s64 st_size;
-	compat_ulong_t st_blksize;
-	compat_u64 st_blocks;
-	compat_ulong_t st_atime;
-	compat_ulong_t st_atime_nsec;
-	compat_ulong_t st_mtime;
-	compat_ulong_t st_mtime_nsec;
-	compat_ulong_t st_ctime;
-	compat_ulong_t st_ctime_nsec;
-	compat_u64 st_ino;
+struct __old_kernel_stat {
+	short unsigned int st_dev;
+	short unsigned int st_ino;
+	short unsigned int st_mode;
+	short unsigned int st_nlink;
+	short unsigned int st_uid;
+	short unsigned int st_gid;
+	short unsigned int st_rdev;
+	unsigned int st_size;
+	unsigned int st_atime;
+	unsigned int st_mtime;
+	unsigned int st_ctime;
 };
 
 struct statx_timestamp {
@@ -37513,7 +50889,6 @@
 struct mount;
 
 struct mnt_namespace {
-	atomic_t count;
 	struct ns_common ns;
 	struct mount *root;
 	struct list_head list;
@@ -37527,6 +50902,37 @@
 	unsigned int pending_mounts;
 };
 
+typedef u16 compat_mode_t;
+
+typedef u16 __compat_uid_t;
+
+typedef u16 __compat_gid_t;
+
+typedef u32 compat_ino_t;
+
+typedef u16 compat_nlink_t;
+
+struct compat_stat {
+	u32 st_dev;
+	compat_ino_t st_ino;
+	compat_mode_t st_mode;
+	compat_nlink_t st_nlink;
+	__compat_uid_t st_uid;
+	__compat_gid_t st_gid;
+	u32 st_rdev;
+	u32 st_size;
+	u32 st_blksize;
+	u32 st_blocks;
+	u32 st_atime;
+	u32 st_atime_nsec;
+	u32 st_mtime;
+	u32 st_mtime_nsec;
+	u32 st_ctime;
+	u32 st_ctime_nsec;
+	u32 __unused4;
+	u32 __unused5;
+};
+
 struct mnt_pcp;
 
 struct mountpoint;
@@ -37623,6 +51029,7 @@
 	struct path root;
 	struct inode *inode;
 	unsigned int flags;
+	unsigned int state;
 	unsigned int seq;
 	unsigned int m_seq;
 	unsigned int r_seq;
@@ -37639,6 +51046,17 @@
 	umode_t dir_mode;
 };
 
+struct renamedata {
+	struct user_namespace *old_mnt_userns;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct user_namespace *new_mnt_userns;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
 enum {
 	LAST_NORM = 0,
 	LAST_ROOT = 1,
@@ -37657,6 +51075,28 @@
 	const long unsigned int high_bits;
 };
 
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short int l_type;
+	short int l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+};
+
 struct compat_flock {
 	short int l_type;
 	short int l_whence;
@@ -37671,20 +51111,7 @@
 	compat_loff_t l_start;
 	compat_loff_t l_len;
 	compat_pid_t l_pid;
-};
-
-struct f_owner_ex {
-	int type;
-	__kernel_pid_t pid;
-};
-
-struct flock {
-	short int l_type;
-	short int l_whence;
-	__kernel_off_t l_start;
-	__kernel_off_t l_len;
-	__kernel_pid_t l_pid;
-};
+} __attribute__((packed));
 
 struct file_clone_range {
 	__s64 src_fd;
@@ -37710,7 +51137,14 @@
 	struct file_dedupe_range_info info[0];
 };
 
-typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
 
 struct fiemap_extent;
 
@@ -37721,6 +51155,17 @@
 	struct fiemap_extent *fi_extents_start;
 };
 
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
 struct space_resv {
 	__s16 l_type;
 	__s16 l_whence;
@@ -37731,6 +51176,16 @@
 	__s32 l_pad[4];
 };
 
+struct space_resv_32 {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+} __attribute__((packed));
+
 struct fiemap_extent {
 	__u64 fe_logical;
 	__u64 fe_physical;
@@ -37758,6 +51213,19 @@
 	char d_name[0];
 };
 
+struct old_linux_dirent {
+	long unsigned int d_ino;
+	long unsigned int d_offset;
+	short unsigned int d_namlen;
+	char d_name[1];
+};
+
+struct readdir_callback {
+	struct dir_context ctx;
+	struct old_linux_dirent *dirent;
+	int result;
+};
+
 struct linux_dirent {
 	long unsigned int d_ino;
 	long unsigned int d_off;
@@ -37885,6 +51353,15 @@
 	DENTRY_D_LOCK_NESTED = 1,
 };
 
+struct dentry_stat_t {
+	long int nr_dentry;
+	long int nr_unused;
+	long int age_limit;
+	long int want_pages;
+	long int nr_negative;
+	long int dummy;
+};
+
 struct external_name {
 	union {
 		atomic_t count;
@@ -37914,13 +51391,10 @@
 	struct list_head dispose;
 };
 
-struct fsxattr {
-	__u32 fsx_xflags;
-	__u32 fsx_extsize;
-	__u32 fsx_nextents;
-	__u32 fsx_projid;
-	__u32 fsx_cowextsize;
-	unsigned char fsx_pad[8];
+struct inodes_stat_t {
+	long int nr_inodes;
+	long int nr_unused;
+	long int dummy[5];
 };
 
 enum file_time_flags {
@@ -37930,6 +51404,13 @@
 	S_VERSION = 8,
 };
 
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
 struct proc_mounts {
 	struct mnt_namespace *ns;
 	struct path root;
@@ -37937,15 +51418,44 @@
 	struct mount cursor;
 };
 
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+};
+
 enum umount_tree_flags {
 	UMOUNT_SYNC = 1,
 	UMOUNT_PROPAGATE = 2,
 	UMOUNT_CONNECTED = 4,
 };
 
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
+	union {
+		const void *cvalue;
+		void *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+struct utf8data;
+
+struct utf8data_table;
+
 struct unicode_map {
-	const char *charset;
-	int version;
+	unsigned int version;
+	const struct utf8data *ntab[2];
+	const struct utf8data_table *tables;
 };
 
 struct simple_transaction_argresp {
@@ -37953,6 +51463,27 @@
 	char data[0];
 };
 
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+struct utf8data_table {
+	const unsigned int *utf8agetab;
+	int utf8agetab_size;
+	const struct utf8data *utf8nfdicfdata;
+	int utf8nfdicfdata_size;
+	const struct utf8data *utf8nfdidata;
+	int utf8nfdidata_size;
+	const unsigned char *utf8data;
+};
+
 struct simple_attr {
 	int (*get)(void *, u64 *);
 	int (*set)(void *, u64);
@@ -37978,7 +51509,7 @@
 	struct wb_completion *done;
 };
 
-struct trace_event_raw_writeback_page_template {
+struct trace_event_raw_writeback_folio_template {
 	struct trace_entry ent;
 	char name[32];
 	ino_t ino;
@@ -38157,13 +51688,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_writeback_congest_waited_template {
-	struct trace_entry ent;
-	unsigned int usec_timeout;
-	unsigned int usec_delayed;
-	char __data[0];
-};
-
 struct trace_event_raw_writeback_single_inode_template {
 	struct trace_entry ent;
 	char name[32];
@@ -38187,7 +51711,7 @@
 	char __data[0];
 };
 
-struct trace_event_data_offsets_writeback_page_template {};
+struct trace_event_data_offsets_writeback_folio_template {};
 
 struct trace_event_data_offsets_writeback_dirty_inode_template {};
 
@@ -38221,15 +51745,13 @@
 
 struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
 
-struct trace_event_data_offsets_writeback_congest_waited_template {};
-
 struct trace_event_data_offsets_writeback_single_inode_template {};
 
 struct trace_event_data_offsets_writeback_inode_template {};
 
-typedef void (*btf_trace_writeback_dirty_page)(void *, struct page *, struct address_space *);
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
 
-typedef void (*btf_trace_wait_on_page_writeback)(void *, struct page *, struct address_space *);
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
 
 typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
 
@@ -38241,7 +51763,7 @@
 
 typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
 
-typedef void (*btf_trace_track_foreign_dirty)(void *, struct page *, struct bdi_writeback *);
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
 
 typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
 
@@ -38277,10 +51799,6 @@
 
 typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
 
-typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);
-
-typedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);
-
 typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);
 
 typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);
@@ -38296,10 +51814,9 @@
 typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
 
 struct inode_switch_wbs_context {
-	struct inode *inode;
+	struct rcu_work work;
 	struct bdi_writeback *new_wb;
-	struct callback_head callback_head;
-	struct work_struct work;
+	struct inode *inodes[0];
 };
 
 struct splice_desc {
@@ -38326,11 +51843,21 @@
 	old_time32_t modtime;
 };
 
+struct utimbuf {
+	__kernel_old_time_t actime;
+	__kernel_old_time_t modtime;
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
 typedef int __kernel_daddr_t;
 
 struct ustat {
 	__kernel_daddr_t f_tfree;
-	__kernel_ino_t f_tinode;
+	long unsigned int f_tinode;
 	char f_fname[6];
 	char f_fpack[6];
 };
@@ -38391,7 +51918,7 @@
 	__kernel_long_t f_spare[4];
 };
 
-struct compat_statfs64___2 {
+struct compat_statfs64 {
 	__u32 f_type;
 	__u32 f_bsize;
 	__u64 f_blocks;
@@ -38436,6 +51963,10 @@
 	FSCONFIG_CMD_RECONFIGURE = 7,
 };
 
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+typedef __u32 blk_mq_req_flags_t;
+
 struct dax_device;
 
 struct iomap_page_ops;
@@ -38454,8 +51985,15 @@
 };
 
 struct iomap_page_ops {
-	int (*page_prepare)(struct inode *, loff_t, unsigned int, struct iomap___2 *);
-	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *, struct iomap___2 *);
+	int (*page_prepare)(struct inode *, loff_t, unsigned int);
+	void (*page_done)(struct inode *, loff_t, unsigned int, struct page *);
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
 };
 
 struct decrypt_bh_ctx {
@@ -38472,40 +52010,6 @@
 	int ratelimit;
 };
 
-enum {
-	DISK_EVENT_MEDIA_CHANGE = 1,
-	DISK_EVENT_EJECT_REQUEST = 2,
-};
-
-enum {
-	BIOSET_NEED_BVECS = 1,
-	BIOSET_NEED_RESCUER = 2,
-};
-
-struct bdev_inode {
-	struct block_device bdev;
-	struct inode vfs_inode;
-};
-
-struct blkdev_dio {
-	union {
-		struct kiocb *iocb;
-		struct task_struct *waiter;
-	};
-	size_t size;
-	atomic_t ref;
-	bool multi_bio: 1;
-	bool should_dirty: 1;
-	bool is_sync: 1;
-	struct bio bio;
-};
-
-struct bd_holder_disk {
-	struct list_head list;
-	struct gendisk *disk;
-	int refcnt;
-};
-
 typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
 
 typedef void dio_submit_t(struct bio *, struct inode *, loff_t);
@@ -38547,7 +52051,6 @@
 	int flags;
 	int op;
 	int op_flags;
-	blk_qc_t bio_cookie;
 	struct gendisk *bio_disk;
 	struct inode *inode;
 	loff_t i_size;
@@ -38656,6 +52159,12 @@
 	const char *str;
 };
 
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
 struct file_handle {
 	__u32 handle_bytes;
 	int handle_type;
@@ -38714,9 +52223,11 @@
 
 struct fanotify_info {
 	u8 dir_fh_totlen;
+	u8 dir2_fh_totlen;
 	u8 file_fh_totlen;
 	u8 name_len;
-	u8 pad;
+	u8 name2_len;
+	u8 pad[3];
 	unsigned char buf[0];
 };
 
@@ -38726,20 +52237,28 @@
 	FANOTIFY_EVENT_TYPE_PATH = 2,
 	FANOTIFY_EVENT_TYPE_PATH_PERM = 3,
 	FANOTIFY_EVENT_TYPE_OVERFLOW = 4,
+	FANOTIFY_EVENT_TYPE_FS_ERROR = 5,
+	__FANOTIFY_EVENT_TYPE_NUM = 6,
 };
 
 struct fanotify_event {
 	struct fsnotify_event fse;
+	struct hlist_node merge_list;
 	u32 mask;
-	enum fanotify_event_type type;
+	struct {
+		unsigned int type: 3;
+		unsigned int hash: 29;
+	};
 	struct pid *pid;
 };
 
 struct fanotify_fid_event {
 	struct fanotify_event fae;
 	__kernel_fsid_t fsid;
-	struct fanotify_fh object_fh;
-	unsigned char _inline_fh_buf[12];
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[12];
+	};
 };
 
 struct fanotify_name_event {
@@ -38748,6 +52267,17 @@
 	struct fanotify_info info;
 };
 
+struct fanotify_error_event {
+	struct fanotify_event fae;
+	s32 error;
+	u32 err_count;
+	__kernel_fsid_t fsid;
+	struct {
+		struct fanotify_fh object_fh;
+		unsigned char _inline_fh_buf[128];
+	};
+};
+
 struct fanotify_path_event {
 	struct fanotify_event fae;
 	struct path path;
@@ -38783,6 +52313,17 @@
 	unsigned char handle[0];
 };
 
+struct fanotify_event_info_pidfd {
+	struct fanotify_event_info_header hdr;
+	__s32 pidfd;
+};
+
+struct fanotify_event_info_error {
+	struct fanotify_event_info_header hdr;
+	__s32 error;
+	__u32 error_count;
+};
+
 struct fanotify_response {
 	__s32 fd;
 	__u32 response;
@@ -38791,22 +52332,20 @@
 struct epoll_event {
 	__poll_t events;
 	__u64 data;
-};
+} __attribute__((packed));
 
 struct epoll_filefd {
 	struct file *file;
 	int fd;
 } __attribute__((packed));
 
-struct nested_call_node {
-	struct list_head llink;
-	void *cookie;
-	void *ctx;
-};
+struct epitem;
 
-struct nested_calls {
-	struct list_head tasks_call_list;
-	spinlock_t lock;
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
 };
 
 struct eventpoll;
@@ -38819,10 +52358,9 @@
 	struct list_head rdllink;
 	struct epitem *next;
 	struct epoll_filefd ffd;
-	int nwait;
-	struct list_head pwqlist;
+	struct eppoll_entry *pwqlist;
 	struct eventpoll *ep;
-	struct list_head fllink;
+	struct hlist_node fllink;
 	struct wakeup_source *ws;
 	struct epoll_event event;
 };
@@ -38839,25 +52377,18 @@
 	struct user_struct *user;
 	struct file *file;
 	u64 gen;
+	struct hlist_head refs;
 	unsigned int napi_id;
 };
 
-struct eppoll_entry {
-	struct list_head llink;
-	struct epitem *base;
-	wait_queue_entry_t wait;
-	wait_queue_head_t *whead;
-};
-
 struct ep_pqueue {
 	poll_table pt;
 	struct epitem *epi;
 };
 
-struct ep_send_events_data {
-	int maxevents;
-	struct epoll_event *events;
-	int res;
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
 };
 
 struct signalfd_siginfo {
@@ -38915,11 +52446,6 @@
 	int id;
 };
 
-enum userfaultfd_state {
-	UFFD_STATE_WAIT_API = 0,
-	UFFD_STATE_RUNNING = 1,
-};
-
 struct userfaultfd_ctx {
 	wait_queue_head_t fault_pending_wqh;
 	wait_queue_head_t fault_wqh;
@@ -38929,9 +52455,8 @@
 	refcount_t refcount;
 	unsigned int flags;
 	unsigned int features;
-	enum userfaultfd_state state;
 	bool released;
-	bool mmap_changing;
+	atomic_t mmap_changing;
 	struct mm_struct *mm;
 };
 
@@ -39004,6 +52529,12 @@
 	__u64 mode;
 };
 
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
 struct userfaultfd_fork_ctx {
 	struct userfaultfd_ctx *orig;
 	struct userfaultfd_ctx *new;
@@ -39029,8 +52560,6 @@
 	long unsigned int len;
 };
 
-typedef u32 compat_aio_context_t;
-
 struct kioctx;
 
 struct kioctx_table {
@@ -39074,6 +52603,8 @@
 	__u32 aio_resfd;
 };
 
+typedef u32 compat_aio_context_t;
+
 typedef int kiocb_cancel_fn(struct kiocb *);
 
 struct aio_ring {
@@ -39179,8 +52710,9 @@
 	struct file *file;
 	struct wait_queue_head *head;
 	__poll_t events;
-	bool done;
 	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
 	struct wait_queue_entry wait;
 	struct work_struct work;
 };
@@ -39203,6 +52735,7 @@
 struct aio_poll_table {
 	struct poll_table_struct pt;
 	struct aio_kiocb *iocb;
+	bool queued;
 	int error;
 };
 
@@ -39216,12 +52749,43 @@
 	compat_size_t sigsetsize;
 };
 
-typedef s32 compat_ssize_t;
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
 
-enum {
-	PERCPU_REF_INIT_ATOMIC = 1,
-	PERCPU_REF_INIT_DEAD = 2,
-	PERCPU_REF_ALLOW_REINIT = 4,
+struct io_wq;
+
+struct io_wq_work_node;
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_ring_ctx;
+
+struct io_uring_task {
+	int cached_refs;
+	struct xarray xa;
+	struct wait_queue_head wait;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct percpu_counter inflight;
+	atomic_t inflight_tracked;
+	atomic_t in_idle;
+	spinlock_t task_lock;
+	struct io_wq_work_list task_list;
+	struct io_wq_work_list prio_task_list;
+	struct callback_head task_work;
+	struct file **registered_rings;
+	bool task_running;
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	long unsigned int nr_segs;
 };
 
 struct user_msghdr {
@@ -39234,6 +52798,8 @@
 	unsigned int msg_flags;
 };
 
+typedef s32 compat_ssize_t;
+
 struct compat_msghdr {
 	compat_uptr_t msg_name;
 	compat_int_t msg_namelen;
@@ -39260,196 +52826,15 @@
 	u32 consumed;
 };
 
-struct trace_event_raw_io_uring_create {
-	struct trace_entry ent;
-	int fd;
-	void *ctx;
-	u32 sq_entries;
-	u32 cq_entries;
-	u32 flags;
-	char __data[0];
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_NONBLOCK = 2147483648,
+	IO_URING_F_SQE128 = 4,
+	IO_URING_F_CQE32 = 8,
+	IO_URING_F_IOPOLL = 16,
 };
 
-struct trace_event_raw_io_uring_register {
-	struct trace_entry ent;
-	void *ctx;
-	unsigned int opcode;
-	unsigned int nr_files;
-	unsigned int nr_bufs;
-	bool eventfd;
-	long int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_file_get {
-	struct trace_entry ent;
-	void *ctx;
-	int fd;
-	char __data[0];
-};
-
-struct io_wq_work;
-
-struct trace_event_raw_io_uring_queue_async_work {
-	struct trace_entry ent;
-	void *ctx;
-	int rw;
-	void *req;
-	struct io_wq_work *work;
-	unsigned int flags;
-	char __data[0];
-};
-
-struct io_wq_work_node {
-	struct io_wq_work_node *next;
-};
-
-struct io_wq_work {
-	struct io_wq_work_node list;
-	struct io_identity *identity;
-	unsigned int flags;
-};
-
-struct trace_event_raw_io_uring_defer {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	long long unsigned int data;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_link {
-	struct trace_entry ent;
-	void *ctx;
-	void *req;
-	void *target_req;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_cqring_wait {
-	struct trace_entry ent;
-	void *ctx;
-	int min_events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_fail_link {
-	struct trace_entry ent;
-	void *req;
-	void *link;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_complete {
-	struct trace_entry ent;
-	void *ctx;
-	u64 user_data;
-	long int res;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_submit_sqe {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	bool force_nonblock;
-	bool sq_thread;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_arm {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	int events;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_poll_wake {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_add {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	int mask;
-	char __data[0];
-};
-
-struct trace_event_raw_io_uring_task_run {
-	struct trace_entry ent;
-	void *ctx;
-	u8 opcode;
-	u64 user_data;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_io_uring_create {};
-
-struct trace_event_data_offsets_io_uring_register {};
-
-struct trace_event_data_offsets_io_uring_file_get {};
-
-struct trace_event_data_offsets_io_uring_queue_async_work {};
-
-struct trace_event_data_offsets_io_uring_defer {};
-
-struct trace_event_data_offsets_io_uring_link {};
-
-struct trace_event_data_offsets_io_uring_cqring_wait {};
-
-struct trace_event_data_offsets_io_uring_fail_link {};
-
-struct trace_event_data_offsets_io_uring_complete {};
-
-struct trace_event_data_offsets_io_uring_submit_sqe {};
-
-struct trace_event_data_offsets_io_uring_poll_arm {};
-
-struct trace_event_data_offsets_io_uring_poll_wake {};
-
-struct trace_event_data_offsets_io_uring_task_add {};
-
-struct trace_event_data_offsets_io_uring_task_run {};
-
-typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
-
-typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);
-
-typedef void (*btf_trace_io_uring_file_get)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);
-
-typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);
-
-typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
-
-typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);
-
-typedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);
-
-typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u8, u64, bool, bool);
-
-typedef void (*btf_trace_io_uring_poll_arm)(void *, void *, u8, u64, int, int);
-
-typedef void (*btf_trace_io_uring_poll_wake)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_add)(void *, void *, u8, u64, int);
-
-typedef void (*btf_trace_io_uring_task_run)(void *, void *, u8, u64);
-
 struct io_uring_sqe {
 	__u8 opcode;
 	__u8 flags;
@@ -39458,6 +52843,7 @@
 	union {
 		__u64 off;
 		__u64 addr2;
+		__u32 cmd_op;
 	};
 	union {
 		__u64 addr;
@@ -39478,18 +52864,28 @@
 		__u32 statx_flags;
 		__u32 fadvise_advice;
 		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 close_flags;
 	};
 	__u64 user_data;
 	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+	};
+	union {
 		struct {
-			union {
-				__u16 buf_index;
-				__u16 buf_group;
-			};
-			__u16 personality;
-			__s32 splice_fd_in;
+			__u64 addr3;
+			__u64 __pad2[1];
 		};
-		__u64 __pad2[3];
+		__u8 cmd[0];
 	};
 };
 
@@ -39500,9 +52896,10 @@
 	IOSQE_IO_HARDLINK_BIT = 3,
 	IOSQE_ASYNC_BIT = 4,
 	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
 };
 
-enum {
+enum io_uring_op {
 	IORING_OP_NOP = 0,
 	IORING_OP_READV = 1,
 	IORING_OP_WRITEV = 2,
@@ -39537,13 +52934,27 @@
 	IORING_OP_PROVIDE_BUFFERS = 31,
 	IORING_OP_REMOVE_BUFFERS = 32,
 	IORING_OP_TEE = 33,
-	IORING_OP_LAST = 34,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_LAST = 47,
 };
 
 struct io_uring_cqe {
 	__u64 user_data;
 	__s32 res;
 	__u32 flags;
+	__u64 big_cqe[0];
 };
 
 enum {
@@ -39601,13 +53012,41 @@
 	IORING_UNREGISTER_PERSONALITY = 10,
 	IORING_REGISTER_RESTRICTIONS = 11,
 	IORING_REGISTER_ENABLE_RINGS = 12,
-	IORING_REGISTER_LAST = 13,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_LAST = 24,
 };
 
-struct io_uring_files_update {
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_uring_rsrc_update {
 	__u32 offset;
 	__u32 resv;
-	__u64 fds;
+	__u64 data;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
 };
 
 struct io_uring_probe_op {
@@ -39636,6 +53075,33 @@
 	__u32 resv2[3];
 };
 
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct io_uring_buf bufs[0];
+	};
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 pad;
+	__u64 resv[3];
+};
+
 enum {
 	IORING_RESTRICTION_REGISTER_OP = 0,
 	IORING_RESTRICTION_SQE_OP = 1,
@@ -39644,18 +53110,237 @@
 	IORING_RESTRICTION_LAST = 4,
 };
 
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct io_wq_work;
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	char __data[0];
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int data;
+	u8 opcode;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	void *link;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_sqe {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u32 flags;
+	bool force_nonblock;
+	bool sq_thread;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	int mask;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	long long unsigned int user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	long long unsigned int user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {};
+
+struct trace_event_data_offsets_io_uring_defer {};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_fail_link {};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_submit_sqe {};
+
+struct trace_event_data_offsets_io_uring_poll_arm {};
+
+struct trace_event_data_offsets_io_uring_task_add {};
+
+struct trace_event_data_offsets_io_uring_req_failed {};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long int);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, void *, void *, long long unsigned int, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, void *, long long unsigned int, u8, unsigned int, struct io_wq_work *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int, u8);
+
+typedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *, long long unsigned int, u8, void *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, void *, long long unsigned int, u8, u32, bool, bool);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, void *, void *, u64, u8, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, void *, void *, long long unsigned int, u8, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, void *, void *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, long long unsigned int, s32, u32, void *);
+
 enum {
 	IO_WQ_WORK_CANCEL = 1,
 	IO_WQ_WORK_HASHED = 2,
 	IO_WQ_WORK_UNBOUND = 4,
-	IO_WQ_WORK_NO_CANCEL = 8,
 	IO_WQ_WORK_CONCURRENT = 16,
-	IO_WQ_WORK_FILES = 32,
-	IO_WQ_WORK_FS = 64,
-	IO_WQ_WORK_MM = 128,
-	IO_WQ_WORK_CREDS = 256,
-	IO_WQ_WORK_BLKCG = 512,
-	IO_WQ_WORK_FSIZE = 1024,
 	IO_WQ_HASH_SHIFT = 24,
 };
 
@@ -39665,12 +53350,19 @@
 	IO_WQ_CANCEL_NOTFOUND = 2,
 };
 
-typedef void free_work_fn(struct io_wq_work *);
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
 
-typedef struct io_wq_work *io_wq_work_fn(struct io_wq_work *);
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+struct io_wq_hash {
+	refcount_t refs;
+	long unsigned int map;
+	struct wait_queue_head wait;
+};
 
 struct io_wq_data {
-	struct user_struct *user;
+	struct io_wq_hash *hash;
+	struct task_struct *task;
 	io_wq_work_fn *do_work;
 	free_work_fn *free_work;
 };
@@ -39704,7 +53396,7 @@
 	u32 sq_ring_entries;
 	u32 cq_ring_entries;
 	u32 sq_dropped;
-	u32 sq_flags;
+	atomic_t sq_flags;
 	u32 cq_flags;
 	u32 cq_overflow;
 	long: 64;
@@ -39716,40 +53408,77 @@
 
 struct io_mapped_ubuf {
 	u64 ubuf;
-	size_t len;
-	struct bio_vec *bvec;
+	u64 ubuf_end;
 	unsigned int nr_bvecs;
 	long unsigned int acct_pages;
+	struct bio_vec bvec[0];
 };
 
-struct fixed_file_table {
-	struct file **files;
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
 };
 
-struct fixed_file_data;
+struct io_fixed_file {
+	long unsigned int file_ptr;
+};
 
-struct fixed_file_ref_node {
+struct io_rsrc_put {
+	struct list_head list;
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	long unsigned int *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_rsrc_data;
+
+struct io_rsrc_node {
 	struct percpu_ref refs;
 	struct list_head node;
-	struct list_head file_list;
-	struct fixed_file_data *file_data;
+	struct list_head rsrc_list;
+	struct io_rsrc_data *rsrc_data;
 	struct llist_node llist;
 	bool done;
 };
 
-struct io_ring_ctx;
+typedef void rsrc_put_fn(struct io_ring_ctx *, struct io_rsrc_put *);
 
-struct fixed_file_data {
-	struct fixed_file_table *table;
+struct io_rsrc_data {
 	struct io_ring_ctx *ctx;
-	struct fixed_file_ref_node *node;
-	struct percpu_ref refs;
+	u64 **tags;
+	unsigned int nr;
+	rsrc_put_fn *do_put;
+	atomic_t refs;
 	struct completion done;
-	struct list_head ref_list;
-	spinlock_t lock;
+	bool quiesce;
 };
 
-struct io_wq;
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	bool flush_cqes;
+	short unsigned int submit_nr;
+	struct blk_plug plug;
+};
 
 struct io_restriction {
 	long unsigned int register_op[1];
@@ -39759,151 +53488,206 @@
 	bool registered;
 };
 
+struct io_buffer_list;
+
 struct io_sq_data;
 
-struct io_kiocb;
+struct io_ev_fd;
 
 struct io_ring_ctx {
 	struct {
 		struct percpu_ref refs;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	struct {
+		struct io_rings *rings;
 		unsigned int flags;
+		enum task_work_notify_mode notify_method;
 		unsigned int compat: 1;
-		unsigned int limit_mem: 1;
-		unsigned int cq_overflow_flushed: 1;
 		unsigned int drain_next: 1;
-		unsigned int eventfd_async: 1;
 		unsigned int restricted: 1;
-		unsigned int sqo_dead: 1;
-		u32 *sq_array;
-		unsigned int cached_sq_head;
-		unsigned int sq_entries;
-		unsigned int sq_mask;
-		unsigned int sq_thread_idle;
-		unsigned int cached_sq_dropped;
-		unsigned int cached_cq_overflow;
-		long unsigned int sq_check_overflow;
-		struct list_head defer_list;
-		struct list_head timeout_list;
-		struct list_head cq_overflow_list;
-		wait_queue_head_t inflight_wait;
-		struct io_uring_sqe *sq_sqes;
-	};
-	struct io_rings *rings;
-	struct io_wq *io_wq;
-	struct task_struct *sqo_task;
-	struct mm_struct *mm_account;
-	struct cgroup_subsys_state *sqo_blkcg_css;
-	struct io_sq_data *sq_data;
-	struct wait_queue_head sqo_sq_wait;
-	struct wait_queue_entry sqo_wait_entry;
-	struct list_head sqd_list;
-	struct fixed_file_data *file_data;
-	unsigned int nr_user_files;
-	unsigned int nr_user_bufs;
-	struct io_mapped_ubuf *user_bufs;
-	struct user_struct *user;
-	const struct cred *creds;
-	kuid_t loginuid;
-	unsigned int sessionid;
-	struct completion ref_comp;
-	struct completion sq_thread_comp;
-	struct io_kiocb *fallback_req;
-	struct socket *ring_sock;
-	struct idr io_buffer_idr;
-	struct idr personality_idr;
-	long: 64;
-	long: 64;
-	struct {
-		unsigned int cached_cq_tail;
-		unsigned int cq_entries;
-		unsigned int cq_mask;
-		atomic_t cq_timeouts;
-		unsigned int cq_last_tm_flush;
-		long unsigned int cq_check_overflow;
-		struct wait_queue_head cq_wait;
-		struct fasync_struct *cq_fasync;
-		struct eventfd_ctx *cq_ev_fd;
-		long: 64;
-		long: 64;
-		long: 64;
-		long: 64;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int has_evfd: 1;
+		unsigned int syscall_iopoll: 1;
+		long: 56;
 		long: 64;
 		long: 64;
 		long: 64;
 	};
 	struct {
 		struct mutex uring_lock;
-		wait_queue_head_t wait;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct list_head defer_list;
+		struct io_rsrc_node *rsrc_node;
+		int rsrc_cached_refs;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_submit_state submit_state;
+		struct io_buffer_list *io_bl;
+		struct xarray io_bl_xa;
+		struct list_head io_buffers_cache;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		struct list_head cq_overflow_list;
+		struct list_head apoll_cache;
+		struct xarray personalities;
+		u32 pers_next;
+		unsigned int sq_thread_idle;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	long unsigned int check_cq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd *io_ev_fd;
+		struct wait_queue_head cq_wait;
+		unsigned int cq_extra;
+		atomic_t cq_timeouts;
+		unsigned int cq_last_tm_flush;
+		long: 32;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
 		long: 64;
 	};
 	struct {
 		spinlock_t completion_lock;
-		struct list_head iopoll_list;
+		spinlock_t timeout_lock;
+		struct io_wq_work_list iopoll_list;
 		struct hlist_head *cancel_hash;
 		unsigned int cancel_hash_bits;
-		bool poll_multi_file;
-		spinlock_t inflight_lock;
-		struct list_head inflight_list;
+		bool poll_multi_queue;
+		struct list_head io_buffers_comp;
+		long: 64;
 	};
-	struct delayed_work file_put_work;
-	struct llist_head file_put_llist;
-	struct work_struct exit_work;
 	struct io_restriction restrictions;
+	struct {
+		struct io_rsrc_node *rsrc_backup_node;
+		struct io_mapped_ubuf *dummy_ubuf;
+		struct io_rsrc_data *file_data;
+		struct io_rsrc_data *buf_data;
+		struct delayed_work rsrc_put_work;
+		struct llist_head rsrc_put_llist;
+		struct list_head rsrc_ref_list;
+		spinlock_t rsrc_ref_lock;
+		struct list_head io_buffers_pages;
+	};
+	struct {
+		struct socket *ring_sock;
+		struct io_wq_hash *hash_map;
+		struct user_struct *user;
+		struct mm_struct *mm_account;
+		struct llist_head fallback_llist;
+		struct delayed_work fallback_work;
+		struct work_struct exit_work;
+		struct list_head tctx_list;
+		struct completion ref_comp;
+		u32 iowq_limits[2];
+		bool iowq_limits_set;
+	};
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
+};
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u32 head;
+	__u32 mask;
 };
 
 struct io_buffer {
 	struct list_head list;
 	__u64 addr;
-	__s32 len;
+	__u32 len;
 	__u16 bid;
+	__u16 bgid;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
 };
 
 struct io_sq_data {
 	refcount_t refs;
+	atomic_t park_pending;
 	struct mutex lock;
 	struct list_head ctx_list;
-	struct list_head ctx_new_list;
-	struct mutex ctx_lock;
 	struct task_struct *thread;
 	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	long unsigned int state;
+	struct completion exited;
 };
 
 struct io_rw {
 	struct kiocb kiocb;
 	u64 addr;
-	u64 len;
+	u32 len;
+	rwf_t flags;
 };
 
 struct io_poll_iocb {
 	struct file *file;
-	union {
-		struct wait_queue_head *head;
-		u64 addr;
-	};
+	struct wait_queue_head *head;
 	__poll_t events;
-	bool done;
-	bool canceled;
 	struct wait_queue_entry wait;
 };
 
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
 struct io_accept {
 	struct file *file;
 	struct sockaddr *addr;
 	int *addr_len;
 	int flags;
+	u32 file_slot;
 	long unsigned int nofile;
 };
 
@@ -39918,6 +53702,8 @@
 struct io_cancel {
 	struct file *file;
 	u64 addr;
+	u32 flags;
+	s32 fd;
 };
 
 struct io_timeout {
@@ -39925,11 +53711,16 @@
 	u32 off;
 	u32 target_seq;
 	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
 };
 
 struct io_timeout_rem {
 	struct file *file;
 	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
 };
 
 struct io_connect {
@@ -39941,19 +53732,20 @@
 struct io_sr_msg {
 	struct file *file;
 	union {
+		struct compat_msghdr *umsg_compat;
 		struct user_msghdr *umsg;
 		void *buf;
 	};
 	int msg_flags;
-	int bgid;
 	size_t len;
-	struct io_buffer *kbuf;
+	size_t done_io;
+	unsigned int flags;
 };
 
 struct io_open {
 	struct file *file;
 	int dfd;
-	bool ignore_nonblock;
+	u32 file_slot;
 	struct filename *filename;
 	struct open_how how;
 	long unsigned int nofile;
@@ -39961,11 +53753,12 @@
 
 struct io_close {
 	struct file *file;
-	struct file *put_file;
 	int fd;
+	u32 file_slot;
+	u32 flags;
 };
 
-struct io_files_update {
+struct io_rsrc_update {
 	struct file *file;
 	u64 arg;
 	u32 nr_args;
@@ -39992,21 +53785,21 @@
 	int op;
 	int fd;
 	struct epoll_event event;
-};
+} __attribute__((packed));
 
 struct io_splice {
 	struct file *file_out;
-	struct file *file_in;
 	loff_t off_out;
 	loff_t off_in;
 	u64 len;
+	int splice_fd_in;
 	unsigned int flags;
 };
 
 struct io_provide_buf {
 	struct file *file;
 	__u64 addr;
-	__s32 len;
+	__u32 len;
 	__u32 bgid;
 	__u16 nbufs;
 	__u16 bid;
@@ -40017,14 +53810,99 @@
 	int dfd;
 	unsigned int mask;
 	unsigned int flags;
-	const char *filename;
+	struct filename *filename;
 	struct statx *buffer;
 };
 
-struct io_completion {
+struct io_shutdown {
 	struct file *file;
-	struct list_head list;
-	int cflags;
+	int how;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_symlink {
+	struct file *file;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+};
+
+struct io_hardlink {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_msg {
+	struct file *file;
+	u64 user_data;
+	u32 len;
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	long unsigned int nofile;
+};
+
+struct io_nop {
+	struct file *file;
+	u64 extra1;
+	u64 extra2;
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, bool *);
+
+struct io_task_work {
+	union {
+		struct io_wq_work_node node;
+		struct llist_node fallback_node;
+	};
+	io_req_tw_func_t func;
 };
 
 struct async_poll;
@@ -40034,6 +53912,7 @@
 		struct file *file;
 		struct io_rw rw;
 		struct io_poll_iocb poll;
+		struct io_poll_update poll_update;
 		struct io_accept accept;
 		struct io_sync sync;
 		struct io_cancel cancel;
@@ -40043,39 +53922,71 @@
 		struct io_sr_msg sr_msg;
 		struct io_open open;
 		struct io_close close;
-		struct io_files_update files_update;
+		struct io_rsrc_update rsrc_update;
 		struct io_fadvise fadvise;
 		struct io_madvise madvise;
 		struct io_epoll epoll;
 		struct io_splice splice;
 		struct io_provide_buf pbuf;
 		struct io_statx statx;
-		struct io_completion compl;
+		struct io_shutdown shutdown;
+		struct io_rename rename;
+		struct io_unlink unlink;
+		struct io_mkdir mkdir;
+		struct io_symlink symlink;
+		struct io_hardlink hardlink;
+		struct io_msg msg;
+		struct io_xattr xattr;
+		struct io_socket sock;
+		struct io_nop nop;
+		struct io_uring_cmd uring_cmd;
 	};
-	void *async_data;
 	u8 opcode;
 	u8 iopoll_completed;
 	u16 buf_index;
-	u32 result;
-	struct io_ring_ctx *ctx;
 	unsigned int flags;
-	refcount_t refs;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
 	struct task_struct *task;
-	u64 user_data;
-	struct list_head link_list;
-	struct list_head inflight_entry;
-	struct percpu_ref *fixed_file_refs;
-	struct callback_head task_work;
-	struct hlist_node hash_node;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	union {
+		struct hlist_node hash_node;
+		struct {
+			u64 extra1;
+			u64 extra2;
+		};
+	};
 	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
 	struct io_wq_work work;
 };
 
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+};
+
 struct io_timeout_data {
 	struct io_kiocb *req;
 	struct hrtimer timer;
 	struct timespec64 ts;
 	enum hrtimer_mode mode;
+	u32 flags;
 };
 
 struct io_async_connect {
@@ -40084,16 +53995,21 @@
 
 struct io_async_msghdr {
 	struct iovec fast_iov[8];
-	struct iovec *iov;
+	struct iovec *free_iov;
 	struct sockaddr *uaddr;
 	struct msghdr msg;
 	struct __kernel_sockaddr_storage addr;
 };
 
-struct io_async_rw {
-	struct iovec fast_iov[8];
-	const struct iovec *free_iovec;
+struct io_rw_state {
 	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
 	size_t bytes_done;
 	struct wait_page_queue wpq;
 };
@@ -40105,20 +54021,30 @@
 	REQ_F_HARDLINK_BIT = 3,
 	REQ_F_FORCE_ASYNC_BIT = 4,
 	REQ_F_BUFFER_SELECT_BIT = 5,
-	REQ_F_LINK_HEAD_BIT = 6,
-	REQ_F_FAIL_LINK_BIT = 7,
-	REQ_F_INFLIGHT_BIT = 8,
-	REQ_F_CUR_POS_BIT = 9,
-	REQ_F_NOWAIT_BIT = 10,
-	REQ_F_LINK_TIMEOUT_BIT = 11,
-	REQ_F_ISREG_BIT = 12,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
 	REQ_F_NEED_CLEANUP_BIT = 13,
 	REQ_F_POLLED_BIT = 14,
 	REQ_F_BUFFER_SELECTED_BIT = 15,
-	REQ_F_NO_FILE_TABLE_BIT = 16,
-	REQ_F_WORK_INITIALIZED_BIT = 17,
-	REQ_F_LTIMEOUT_ACTIVE_BIT = 18,
-	__REQ_F_LAST_BIT = 19,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_COMPLETE_INLINE_BIT = 17,
+	REQ_F_REISSUE_BIT = 18,
+	REQ_F_CREDS_BIT = 19,
+	REQ_F_REFCOUNT_BIT = 20,
+	REQ_F_ARM_LTIMEOUT_BIT = 21,
+	REQ_F_ASYNC_DATA_BIT = 22,
+	REQ_F_SKIP_LINK_CQES_BIT = 23,
+	REQ_F_SINGLE_POLL_BIT = 24,
+	REQ_F_DOUBLE_POLL_BIT = 25,
+	REQ_F_PARTIAL_IO_BIT = 26,
+	REQ_F_APOLL_MULTISHOT_BIT = 27,
+	REQ_F_SUPPORT_NOWAIT_BIT = 28,
+	REQ_F_ISREG_BIT = 29,
+	__REQ_F_LAST_BIT = 30,
 };
 
 enum {
@@ -40128,19 +54054,29 @@
 	REQ_F_HARDLINK = 8,
 	REQ_F_FORCE_ASYNC = 16,
 	REQ_F_BUFFER_SELECT = 32,
-	REQ_F_LINK_HEAD = 64,
-	REQ_F_FAIL_LINK = 128,
-	REQ_F_INFLIGHT = 256,
-	REQ_F_CUR_POS = 512,
-	REQ_F_NOWAIT = 1024,
-	REQ_F_LINK_TIMEOUT = 2048,
-	REQ_F_ISREG = 4096,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
 	REQ_F_NEED_CLEANUP = 8192,
 	REQ_F_POLLED = 16384,
 	REQ_F_BUFFER_SELECTED = 32768,
-	REQ_F_NO_FILE_TABLE = 65536,
-	REQ_F_WORK_INITIALIZED = 131072,
-	REQ_F_LTIMEOUT_ACTIVE = 262144,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_COMPLETE_INLINE = 131072,
+	REQ_F_REISSUE = 262144,
+	REQ_F_SUPPORT_NOWAIT = 268435456,
+	REQ_F_ISREG = 536870912,
+	REQ_F_CREDS = 524288,
+	REQ_F_REFCOUNT = 1048576,
+	REQ_F_ARM_LTIMEOUT = 2097152,
+	REQ_F_ASYNC_DATA = 4194304,
+	REQ_F_SKIP_LINK_CQES = 8388608,
+	REQ_F_SINGLE_POLL = 16777216,
+	REQ_F_DOUBLE_POLL = 33554432,
+	REQ_F_PARTIAL_IO = 67108864,
+	REQ_F_APOLL_MULTISHOT = 134217728,
 };
 
 struct async_poll {
@@ -40148,82 +54084,91 @@
 	struct io_poll_iocb *double_poll;
 };
 
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
 struct io_defer_entry {
 	struct list_head list;
 	struct io_kiocb *req;
 	u32 seq;
 };
 
-struct io_comp_state {
-	unsigned int nr;
-	struct list_head list;
+struct io_cancel_data {
 	struct io_ring_ctx *ctx;
-};
-
-struct io_submit_state {
-	struct blk_plug plug;
-	void *reqs[8];
-	unsigned int free_reqs;
-	struct io_comp_state comp;
-	struct file *file;
-	unsigned int fd;
-	unsigned int has_refs;
-	unsigned int ios_left;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u32 flags;
+	int seq;
 };
 
 struct io_op_def {
 	unsigned int needs_file: 1;
-	unsigned int needs_file_no_error: 1;
+	unsigned int plug: 1;
 	unsigned int hash_reg_file: 1;
 	unsigned int unbound_nonreg_file: 1;
-	unsigned int not_supported: 1;
 	unsigned int pollin: 1;
 	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
 	unsigned int buffer_select: 1;
-	unsigned int needs_async_data: 1;
+	unsigned int needs_async_setup: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
 	short unsigned int async_size;
-	unsigned int work_flags;
-};
-
-enum io_mem_account {
-	ACCT_LOCKED = 0,
-	ACCT_PINNED = 1,
-};
-
-struct req_batch {
-	void *reqs[8];
-	int to_free;
-	struct task_struct *task;
-	int task_refs;
 };
 
 struct io_poll_table {
 	struct poll_table_struct pt;
 	struct io_kiocb *req;
+	int nr_entries;
 	int error;
 };
 
-enum sq_ret {
-	SQT_IDLE = 1,
-	SQT_SPIN = 2,
-	SQT_DID_WORK = 4,
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
 };
 
 struct io_wait_queue {
 	struct wait_queue_entry wq;
 	struct io_ring_ctx *ctx;
-	unsigned int to_wait;
+	unsigned int cq_tail;
 	unsigned int nr_timeouts;
 };
 
-struct io_file_put {
-	struct list_head list;
-	struct file *file;
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
 };
 
-struct io_wq_work_list {
-	struct io_wq_work_node *first;
-	struct io_wq_work_node *last;
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct creds;
+
+enum {
+	IO_WQ_BOUND = 0,
+	IO_WQ_UNBOUND = 1,
 };
 
 typedef bool work_cancel_fn(struct io_wq_work *, void *);
@@ -40232,18 +54177,15 @@
 	IO_WORKER_F_UP = 1,
 	IO_WORKER_F_RUNNING = 2,
 	IO_WORKER_F_FREE = 4,
-	IO_WORKER_F_FIXED = 8,
-	IO_WORKER_F_BOUND = 16,
+	IO_WORKER_F_BOUND = 8,
 };
 
 enum {
 	IO_WQ_BIT_EXIT = 0,
-	IO_WQ_BIT_CANCEL = 1,
-	IO_WQ_BIT_ERROR = 2,
 };
 
 enum {
-	IO_WQE_FLAG_STALLED = 1,
+	IO_ACCT_STALLED_BIT = 0,
 };
 
 struct io_wqe;
@@ -40256,60 +54198,58 @@
 	struct task_struct *task;
 	struct io_wqe *wqe;
 	struct io_wq_work *cur_work;
-	spinlock_t lock;
-	struct callback_head rcu;
-	struct mm_struct *mm;
-	struct cgroup_subsys_state *blkcg_css;
-	const struct cred *cur_creds;
-	const struct cred *saved_creds;
-	struct files_struct *restore_files;
-	struct nsproxy *restore_nsproxy;
-	struct fs_struct *restore_fs;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	long unsigned int create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
 };
 
 struct io_wqe_acct {
 	unsigned int nr_workers;
 	unsigned int max_workers;
+	int index;
 	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	long unsigned int flags;
 };
 
 struct io_wq___2;
 
 struct io_wqe {
-	struct {
-		raw_spinlock_t lock;
-		struct io_wq_work_list work_list;
-		long unsigned int hash_map;
-		unsigned int flags;
-		long: 32;
-		long: 64;
-		long: 64;
-		long: 64;
-	};
-	int node;
+	raw_spinlock_t lock;
 	struct io_wqe_acct acct[2];
+	int node;
 	struct hlist_nulls_head free_list;
 	struct list_head all_list;
+	struct wait_queue_entry wait;
 	struct io_wq___2 *wq;
 	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
 };
 
 enum {
 	IO_WQ_ACCT_BOUND = 0,
 	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
 };
 
 struct io_wq___2 {
-	struct io_wqe **wqes;
 	long unsigned int state;
 	free_work_fn *free_work;
 	io_wq_work_fn *do_work;
-	struct task_struct *manager;
-	struct user_struct *user;
-	refcount_t refs;
-	struct completion done;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
 	struct hlist_node cpuhp_node;
-	refcount_t use_refs;
+	struct task_struct *task;
+	struct io_wqe *wqes[0];
 };
 
 struct io_cb_cancel_data {
@@ -40320,11 +54260,32 @@
 	bool cancel_all;
 };
 
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+enum dax_access_mode {
+	DAX_ACCESS = 0,
+	DAX_RECOVERY_WRITE = 1,
+};
+
 struct iomap_ops {
 	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap___2 *, struct iomap___2 *);
 	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap___2 *);
 };
 
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap___2 iomap;
+	struct iomap___2 srcmap;
+	void *private;
+};
+
 struct trace_event_raw_dax_pmd_fault_class {
 	struct trace_entry ent;
 	long unsigned int ino;
@@ -40457,6 +54418,11 @@
 	struct exceptional_entry_key key;
 };
 
+enum dax_wake_mode {
+	WAKE_ALL = 0,
+	WAKE_NEXT = 1,
+};
+
 struct crypto_skcipher;
 
 struct fscrypt_blk_crypto_key;
@@ -40486,56 +54452,17 @@
 	u32 ci_hashed_ino;
 };
 
-struct crypto_async_request;
-
-typedef void (*crypto_completion_t)(struct crypto_async_request *, int);
-
-struct crypto_async_request {
-	struct list_head list;
-	crypto_completion_t complete;
-	void *data;
-	struct crypto_tfm *tfm;
-	u32 flags;
-};
-
-struct crypto_wait {
-	struct completion completion;
-	int err;
-};
-
 struct skcipher_request {
 	unsigned int cryptlen;
 	u8 *iv;
 	struct scatterlist *src;
 	struct scatterlist *dst;
 	struct crypto_async_request base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *__ctx[0];
 };
 
 struct crypto_skcipher {
 	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_tfm base;
 };
 
@@ -40543,8 +54470,11 @@
 	const char *friendly_name;
 	const char *cipher_str;
 	int keysize;
+	int security_strength;
 	int ivsize;
-	int logged_impl_name;
+	int logged_cryptoapi_impl;
+	int logged_blk_crypto_native;
+	int logged_blk_crypto_fallback;
 	enum blk_crypto_mode_num blk_crypto_mode;
 };
 
@@ -40582,44 +54512,6 @@
 	u8 sha256[32];
 };
 
-struct shash_alg {
-	int (*init)(struct shash_desc *);
-	int (*update)(struct shash_desc *, const u8 *, unsigned int);
-	int (*final)(struct shash_desc *, u8 *);
-	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
-	int (*export)(struct shash_desc *, void *);
-	int (*import)(struct shash_desc *, const void *);
-	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
-	int (*init_tfm)(struct crypto_shash *);
-	void (*exit_tfm)(struct crypto_shash *);
-	unsigned int descsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	unsigned int digestsize;
-	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
-};
-
 struct fscrypt_hkdf {
 	struct crypto_shash *hmac_tfm;
 };
@@ -40647,7 +54539,6 @@
 
 struct fscrypt_master_key {
 	struct fscrypt_master_key_secret mk_secret;
-	struct rw_semaphore mk_secret_sem;
 	struct fscrypt_key_specifier mk_spec;
 	struct key *mk_users;
 	refcount_t mk_refcount;
@@ -40694,6 +54585,10 @@
 	__u32 __out_reserved[13];
 };
 
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
 struct skcipher_alg {
 	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
 	int (*encrypt)(struct skcipher_request *);
@@ -40705,15 +54600,6 @@
 	unsigned int ivsize;
 	unsigned int chunksize;
 	unsigned int walksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
@@ -40742,56 +54628,6 @@
 	struct fscrypt_context_v2 v2;
 };
 
-struct crypto_template;
-
-struct crypto_spawn;
-
-struct crypto_instance {
-	struct crypto_alg alg;
-	struct crypto_template *tmpl;
-	union {
-		struct hlist_node list;
-		struct crypto_spawn *spawns;
-	};
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_spawn {
-	struct list_head list;
-	struct crypto_alg *alg;
-	union {
-		struct crypto_instance *inst;
-		struct crypto_spawn *next;
-	};
-	const struct crypto_type *frontend;
-	u32 mask;
-	bool dead;
-	bool registered;
-};
-
-struct rtattr;
-
-struct crypto_template {
-	struct list_head list;
-	struct hlist_head instances;
-	struct module *module;
-	int (*create)(struct crypto_template *, struct rtattr **);
-	char name[128];
-};
-
 struct user_key_payload {
 	struct callback_head rcu;
 	short unsigned int datalen;
@@ -40823,8 +54659,24 @@
 	} policy;
 };
 
-struct fscrypt_dummy_policy {
-	const union fscrypt_policy *policy;
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+};
+
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int modes_supported[4];
+	struct device *dev;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
 };
 
 struct fscrypt_blk_crypto_key {
@@ -40852,7 +54704,7 @@
 struct fsverity_info {
 	struct merkle_tree_params tree_params;
 	u8 root_hash[64];
-	u8 measurement[64];
+	u8 file_digest[64];
 	const struct inode *inode;
 };
 
@@ -40868,6 +54720,19 @@
 	__u64 __reserved2[11];
 };
 
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
 struct crypto_ahash;
 
 struct fsverity_hash_alg {
@@ -40890,63 +54755,21 @@
 	int (*import)(struct ahash_request *, const void *);
 	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
 	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_tfm base;
 };
 
-struct fsverity_descriptor {
-	__u8 version;
-	__u8 hash_algorithm;
-	__u8 log_blocksize;
-	__u8 salt_size;
-	__le32 sig_size;
-	__le64 data_size;
-	__u8 root_hash[64];
-	__u8 salt[32];
-	__u8 __reserved[144];
-	__u8 signature[0];
-};
-
 struct ahash_request {
 	struct crypto_async_request base;
 	unsigned int nbytes;
 	struct scatterlist *src;
 	u8 *result;
 	void *priv;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *__ctx[0];
 };
 
 struct hash_alg_common {
 	unsigned int digestsize;
 	unsigned int statesize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
@@ -40956,6 +54779,21 @@
 	__u8 digest[0];
 };
 
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
+};
+
+struct fsverity_formatted_digest {
+	char magic[8];
+	__le16 digest_algorithm;
+	__le16 digest_size;
+	__u8 digest[0];
+};
+
 struct flock64 {
 	short int l_type;
 	short int l_whence;
@@ -41076,11 +54914,6 @@
 
 typedef unsigned int __kernel_gid_t;
 
-struct gnu_property {
-	u32 pr_type;
-	u32 pr_datasz;
-};
-
 struct elf_prpsinfo {
 	char pr_state;
 	char pr_sname;
@@ -41097,12 +54930,7 @@
 	char pr_psargs[80];
 };
 
-struct core_vma_metadata {
-	long unsigned int start;
-	long unsigned int end;
-	long unsigned int flags;
-	long unsigned int dump_size;
-};
+struct arch_elf_state {};
 
 struct memelfnote {
 	const char *name;
@@ -41129,6 +54957,70 @@
 	int thread_notes;
 };
 
+struct user_regs_struct {
+	long unsigned int r15;
+	long unsigned int r14;
+	long unsigned int r13;
+	long unsigned int r12;
+	long unsigned int bp;
+	long unsigned int bx;
+	long unsigned int r11;
+	long unsigned int r10;
+	long unsigned int r9;
+	long unsigned int r8;
+	long unsigned int ax;
+	long unsigned int cx;
+	long unsigned int dx;
+	long unsigned int si;
+	long unsigned int di;
+	long unsigned int orig_ax;
+	long unsigned int ip;
+	long unsigned int cs;
+	long unsigned int flags;
+	long unsigned int sp;
+	long unsigned int ss;
+	long unsigned int fs_base;
+	long unsigned int gs_base;
+	long unsigned int ds;
+	long unsigned int es;
+	long unsigned int fs;
+	long unsigned int gs;
+};
+
+typedef __u32 Elf32_Addr;
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
 struct elf32_shdr {
 	Elf32_Word sh_name;
 	Elf32_Word sh_type;
@@ -41142,13 +55034,31 @@
 	Elf32_Word sh_entsize;
 };
 
-typedef u16 __compat_uid_t;
-
-typedef u16 __compat_gid_t;
-
-typedef unsigned int compat_elf_greg_t;
-
-typedef compat_elf_greg_t compat_elf_gregset_t[18];
+struct user_regs_struct32 {
+	__u32 ebx;
+	__u32 ecx;
+	__u32 edx;
+	__u32 esi;
+	__u32 edi;
+	__u32 ebp;
+	__u32 eax;
+	short unsigned int ds;
+	short unsigned int __ds;
+	short unsigned int es;
+	short unsigned int __es;
+	short unsigned int fs;
+	short unsigned int __fs;
+	short unsigned int gs;
+	short unsigned int __gs;
+	__u32 orig_eax;
+	__u32 eip;
+	short unsigned int cs;
+	short unsigned int __cs;
+	__u32 eflags;
+	__u32 esp;
+	short unsigned int ss;
+	short unsigned int __ss;
+};
 
 struct compat_elf_siginfo {
 	compat_int_t si_signo;
@@ -41156,7 +55066,7 @@
 	compat_int_t si_errno;
 };
 
-struct compat_elf_prstatus {
+struct compat_elf_prstatus_common {
 	struct compat_elf_siginfo pr_info;
 	short int pr_cursig;
 	compat_ulong_t pr_sigpend;
@@ -41169,8 +55079,6 @@
 	struct old_timeval32 pr_stime;
 	struct old_timeval32 pr_cutime;
 	struct old_timeval32 pr_cstime;
-	compat_elf_gregset_t pr_reg;
-	compat_int_t pr_fpvalid;
 };
 
 struct compat_elf_prpsinfo {
@@ -41189,6 +55097,20 @@
 	char pr_psargs[80];
 };
 
+typedef struct user_regs_struct compat_elf_gregset_t;
+
+struct i386_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	struct user_regs_struct32 pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct compat_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	compat_elf_gregset_t pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
 struct elf_thread_core_info___2 {
 	struct elf_thread_core_info___2 *next;
 	struct task_struct *task;
@@ -41238,6 +55160,1671 @@
 	__le32 a_version;
 };
 
+struct rpc_timer {
+	struct list_head list;
+	long unsigned int expires;
+	struct delayed_work dwork;
+};
+
+struct rpc_wait_queue {
+	spinlock_t lock;
+	struct list_head tasks[4];
+	unsigned char maxpriority;
+	unsigned char priority;
+	unsigned char nr;
+	short unsigned int qlen;
+	struct rpc_timer timer_list;
+	const char *name;
+};
+
+struct nfs_seqid_counter {
+	ktime_t create_time;
+	int owner_id;
+	int flags;
+	u32 counter;
+	spinlock_t lock;
+	struct list_head list;
+	struct rpc_wait_queue wait;
+};
+
+struct nfs4_stateid_struct {
+	union {
+		char data[16];
+		struct {
+			__be32 seqid;
+			char other[12];
+		};
+	};
+	enum {
+		NFS4_INVALID_STATEID_TYPE = 0,
+		NFS4_SPECIAL_STATEID_TYPE = 1,
+		NFS4_OPEN_STATEID_TYPE = 2,
+		NFS4_LOCK_STATEID_TYPE = 3,
+		NFS4_DELEGATION_STATEID_TYPE = 4,
+		NFS4_LAYOUT_STATEID_TYPE = 5,
+		NFS4_PNFS_DS_STATEID_TYPE = 6,
+		NFS4_REVOKED_STATEID_TYPE = 7,
+	} type;
+};
+
+typedef struct nfs4_stateid_struct nfs4_stateid;
+
+struct nfs4_state;
+
+struct nfs4_lock_state {
+	struct list_head ls_locks;
+	struct nfs4_state *ls_state;
+	long unsigned int ls_flags;
+	struct nfs_seqid_counter ls_seqid;
+	nfs4_stateid ls_stateid;
+	refcount_t ls_count;
+	fl_owner_t ls_owner;
+};
+
+struct xdr_netobj {
+	unsigned int len;
+	u8 *data;
+};
+
+struct xdr_buf {
+	struct kvec head[1];
+	struct kvec tail[1];
+	struct bio_vec *bvec;
+	struct page **pages;
+	unsigned int page_base;
+	unsigned int page_len;
+	unsigned int flags;
+	unsigned int buflen;
+	unsigned int len;
+};
+
+struct rpc_rqst;
+
+struct xdr_stream {
+	__be32 *p;
+	struct xdr_buf *buf;
+	__be32 *end;
+	struct kvec *iov;
+	struct kvec scratch;
+	struct page **page_ptr;
+	unsigned int nwords;
+	struct rpc_rqst *rqst;
+};
+
+struct rpc_xprt;
+
+struct rpc_task;
+
+struct rpc_cred;
+
+struct rpc_rqst {
+	struct rpc_xprt *rq_xprt;
+	struct xdr_buf rq_snd_buf;
+	struct xdr_buf rq_rcv_buf;
+	struct rpc_task *rq_task;
+	struct rpc_cred *rq_cred;
+	__be32 rq_xid;
+	int rq_cong;
+	u32 rq_seqno;
+	int rq_enc_pages_num;
+	struct page **rq_enc_pages;
+	void (*rq_release_snd_buf)(struct rpc_rqst *);
+	union {
+		struct list_head rq_list;
+		struct rb_node rq_recv;
+	};
+	struct list_head rq_xmit;
+	struct list_head rq_xmit2;
+	void *rq_buffer;
+	size_t rq_callsize;
+	void *rq_rbuffer;
+	size_t rq_rcvsize;
+	size_t rq_xmit_bytes_sent;
+	size_t rq_reply_bytes_recvd;
+	struct xdr_buf rq_private_buf;
+	long unsigned int rq_majortimeo;
+	long unsigned int rq_minortimeo;
+	long unsigned int rq_timeout;
+	ktime_t rq_rtt;
+	unsigned int rq_retries;
+	unsigned int rq_connect_cookie;
+	atomic_t rq_pin;
+	u32 rq_bytes_sent;
+	ktime_t rq_xtime;
+	int rq_ntrans;
+	struct list_head rq_bc_list;
+	long unsigned int rq_bc_pa_state;
+	struct list_head rq_bc_pa_list;
+};
+
+typedef void (*kxdreproc_t)(struct rpc_rqst *, struct xdr_stream *, const void *);
+
+typedef int (*kxdrdproc_t)(struct rpc_rqst *, struct xdr_stream *, void *);
+
+struct rpc_procinfo;
+
+struct rpc_message {
+	const struct rpc_procinfo *rpc_proc;
+	void *rpc_argp;
+	void *rpc_resp;
+	const struct cred *rpc_cred;
+};
+
+struct rpc_procinfo {
+	u32 p_proc;
+	kxdreproc_t p_encode;
+	kxdrdproc_t p_decode;
+	unsigned int p_arglen;
+	unsigned int p_replen;
+	unsigned int p_timer;
+	u32 p_statidx;
+	const char *p_name;
+};
+
+struct rpc_wait {
+	struct list_head list;
+	struct list_head links;
+	struct list_head timer_list;
+};
+
+struct rpc_call_ops;
+
+struct rpc_clnt;
+
+struct rpc_task {
+	atomic_t tk_count;
+	int tk_status;
+	struct list_head tk_task;
+	void (*tk_callback)(struct rpc_task *);
+	void (*tk_action)(struct rpc_task *);
+	long unsigned int tk_timeout;
+	long unsigned int tk_runstate;
+	struct rpc_wait_queue *tk_waitqueue;
+	union {
+		struct work_struct tk_work;
+		struct rpc_wait tk_wait;
+	} u;
+	int tk_rpc_status;
+	struct rpc_message tk_msg;
+	void *tk_calldata;
+	const struct rpc_call_ops *tk_ops;
+	struct rpc_clnt *tk_client;
+	struct rpc_xprt *tk_xprt;
+	struct rpc_cred *tk_op_cred;
+	struct rpc_rqst *tk_rqstp;
+	struct workqueue_struct *tk_workqueue;
+	ktime_t tk_start;
+	pid_t tk_owner;
+	short unsigned int tk_flags;
+	short unsigned int tk_timeouts;
+	short unsigned int tk_pid;
+	unsigned char tk_priority: 2;
+	unsigned char tk_garb_retry: 2;
+	unsigned char tk_cred_retry: 2;
+	unsigned char tk_rebind_retry: 2;
+};
+
+struct rpc_call_ops {
+	void (*rpc_call_prepare)(struct rpc_task *, void *);
+	void (*rpc_call_done)(struct rpc_task *, void *);
+	void (*rpc_count_stats)(struct rpc_task *, void *);
+	void (*rpc_release)(void *);
+};
+
+struct rpc_iostats;
+
+struct rpc_pipe_dir_head {
+	struct list_head pdh_entries;
+	struct dentry *pdh_dentry;
+};
+
+struct rpc_rtt {
+	long unsigned int timeo;
+	long unsigned int srtt[5];
+	long unsigned int sdrtt[5];
+	int ntimeouts[5];
+};
+
+struct rpc_timeout {
+	long unsigned int to_initval;
+	long unsigned int to_maxval;
+	long unsigned int to_increment;
+	unsigned int to_retries;
+	unsigned char to_exponential;
+};
+
+struct rpc_sysfs_client;
+
+struct rpc_xprt_switch;
+
+struct rpc_xprt_iter_ops;
+
+struct rpc_xprt_iter {
+	struct rpc_xprt_switch *xpi_xpswitch;
+	struct rpc_xprt *xpi_cursor;
+	const struct rpc_xprt_iter_ops *xpi_ops;
+};
+
+struct rpc_auth;
+
+struct rpc_stat;
+
+struct rpc_program;
+
+struct rpc_clnt {
+	refcount_t cl_count;
+	unsigned int cl_clid;
+	struct list_head cl_clients;
+	struct list_head cl_tasks;
+	atomic_t cl_pid;
+	spinlock_t cl_lock;
+	struct rpc_xprt *cl_xprt;
+	const struct rpc_procinfo *cl_procinfo;
+	u32 cl_prog;
+	u32 cl_vers;
+	u32 cl_maxproc;
+	struct rpc_auth *cl_auth;
+	struct rpc_stat *cl_stats;
+	struct rpc_iostats *cl_metrics;
+	unsigned int cl_softrtry: 1;
+	unsigned int cl_softerr: 1;
+	unsigned int cl_discrtry: 1;
+	unsigned int cl_noretranstimeo: 1;
+	unsigned int cl_autobind: 1;
+	unsigned int cl_chatty: 1;
+	struct rpc_rtt *cl_rtt;
+	const struct rpc_timeout *cl_timeout;
+	atomic_t cl_swapper;
+	int cl_nodelen;
+	char cl_nodename[65];
+	struct rpc_pipe_dir_head cl_pipedir_objects;
+	struct rpc_clnt *cl_parent;
+	struct rpc_rtt cl_rtt_default;
+	struct rpc_timeout cl_timeout_default;
+	const struct rpc_program *cl_program;
+	const char *cl_principal;
+	struct dentry *cl_debugfs;
+	struct rpc_sysfs_client *cl_sysfs;
+	union {
+		struct rpc_xprt_iter cl_xpi;
+		struct work_struct cl_work;
+	};
+	const struct cred *cl_cred;
+	unsigned int cl_max_connect;
+};
+
+struct svc_xprt;
+
+struct rpc_sysfs_xprt;
+
+struct rpc_xprt_ops;
+
+struct svc_serv;
+
+struct xprt_class;
+
+struct rpc_xprt {
+	struct kref kref;
+	const struct rpc_xprt_ops *ops;
+	unsigned int id;
+	const struct rpc_timeout *timeout;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	int prot;
+	long unsigned int cong;
+	long unsigned int cwnd;
+	size_t max_payload;
+	struct rpc_wait_queue binding;
+	struct rpc_wait_queue sending;
+	struct rpc_wait_queue pending;
+	struct rpc_wait_queue backlog;
+	struct list_head free;
+	unsigned int max_reqs;
+	unsigned int min_reqs;
+	unsigned int num_reqs;
+	long unsigned int state;
+	unsigned char resvport: 1;
+	unsigned char reuseport: 1;
+	atomic_t swapper;
+	unsigned int bind_index;
+	struct list_head xprt_switch;
+	long unsigned int bind_timeout;
+	long unsigned int reestablish_timeout;
+	unsigned int connect_cookie;
+	struct work_struct task_cleanup;
+	struct timer_list timer;
+	long unsigned int last_used;
+	long unsigned int idle_timeout;
+	long unsigned int connect_timeout;
+	long unsigned int max_reconnect_timeout;
+	atomic_long_t queuelen;
+	spinlock_t transport_lock;
+	spinlock_t reserve_lock;
+	spinlock_t queue_lock;
+	u32 xid;
+	struct rpc_task *snd_task;
+	struct list_head xmit_queue;
+	atomic_long_t xmit_queuelen;
+	struct svc_xprt *bc_xprt;
+	struct svc_serv *bc_serv;
+	unsigned int bc_alloc_max;
+	unsigned int bc_alloc_count;
+	atomic_t bc_slot_count;
+	spinlock_t bc_pa_lock;
+	struct list_head bc_pa_list;
+	struct rb_root recv_queue;
+	struct {
+		long unsigned int bind_count;
+		long unsigned int connect_count;
+		long unsigned int connect_start;
+		long unsigned int connect_time;
+		long unsigned int sends;
+		long unsigned int recvs;
+		long unsigned int bad_xids;
+		long unsigned int max_slots;
+		long long unsigned int req_u;
+		long long unsigned int bklog_u;
+		long long unsigned int sending_u;
+		long long unsigned int pending_u;
+	} stat;
+	struct net *xprt_net;
+	netns_tracker ns_tracker;
+	const char *servername;
+	const char *address_strings[6];
+	struct dentry *debugfs;
+	struct callback_head rcu;
+	const struct xprt_class *xprt_class;
+	struct rpc_sysfs_xprt *xprt_sysfs;
+	bool main;
+};
+
+struct rpc_credops;
+
+struct rpc_cred {
+	struct hlist_node cr_hash;
+	struct list_head cr_lru;
+	struct callback_head cr_rcu;
+	struct rpc_auth *cr_auth;
+	const struct rpc_credops *cr_ops;
+	long unsigned int cr_expire;
+	long unsigned int cr_flags;
+	refcount_t cr_count;
+	const struct cred *cr_cred;
+};
+
+typedef u32 rpc_authflavor_t;
+
+struct auth_cred {
+	const struct cred *cred;
+	const char *principal;
+};
+
+struct rpc_cred_cache;
+
+struct rpc_authops;
+
+struct rpc_auth {
+	unsigned int au_cslack;
+	unsigned int au_rslack;
+	unsigned int au_verfsize;
+	unsigned int au_ralign;
+	long unsigned int au_flags;
+	const struct rpc_authops *au_ops;
+	rpc_authflavor_t au_flavor;
+	refcount_t au_count;
+	struct rpc_cred_cache *au_credcache;
+};
+
+struct rpc_credops {
+	const char *cr_name;
+	int (*cr_init)(struct rpc_auth *, struct rpc_cred *);
+	void (*crdestroy)(struct rpc_cred *);
+	int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
+	int (*crmarshal)(struct rpc_task *, struct xdr_stream *);
+	int (*crrefresh)(struct rpc_task *);
+	int (*crvalidate)(struct rpc_task *, struct xdr_stream *);
+	int (*crwrap_req)(struct rpc_task *, struct xdr_stream *);
+	int (*crunwrap_resp)(struct rpc_task *, struct xdr_stream *);
+	int (*crkey_timeout)(struct rpc_cred *);
+	char * (*crstringify_acceptor)(struct rpc_cred *);
+	bool (*crneed_reencode)(struct rpc_task *);
+};
+
+struct rpc_auth_create_args;
+
+struct rpcsec_gss_info;
+
+struct rpc_authops {
+	struct module *owner;
+	rpc_authflavor_t au_flavor;
+	char *au_name;
+	struct rpc_auth * (*create)(const struct rpc_auth_create_args *, struct rpc_clnt *);
+	void (*destroy)(struct rpc_auth *);
+	int (*hash_cred)(struct auth_cred *, unsigned int);
+	struct rpc_cred * (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
+	struct rpc_cred * (*crcreate)(struct rpc_auth *, struct auth_cred *, int, gfp_t);
+	rpc_authflavor_t (*info2flavor)(struct rpcsec_gss_info *);
+	int (*flavor2info)(rpc_authflavor_t, struct rpcsec_gss_info *);
+	int (*key_timeout)(struct rpc_auth *, struct rpc_cred *);
+};
+
+struct rpc_auth_create_args {
+	rpc_authflavor_t pseudoflavor;
+	const char *target_name;
+};
+
+struct rpcsec_gss_oid {
+	unsigned int len;
+	u8 data[32];
+};
+
+struct rpcsec_gss_info {
+	struct rpcsec_gss_oid oid;
+	u32 qop;
+	u32 service;
+};
+
+struct rpc_xprt_ops {
+	void (*set_buffer_size)(struct rpc_xprt *, size_t, size_t);
+	int (*reserve_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_xprt)(struct rpc_xprt *, struct rpc_task *);
+	void (*alloc_slot)(struct rpc_xprt *, struct rpc_task *);
+	void (*free_slot)(struct rpc_xprt *, struct rpc_rqst *);
+	void (*rpcbind)(struct rpc_task *);
+	void (*set_port)(struct rpc_xprt *, short unsigned int);
+	void (*connect)(struct rpc_xprt *, struct rpc_task *);
+	int (*get_srcaddr)(struct rpc_xprt *, char *, size_t);
+	short unsigned int (*get_srcport)(struct rpc_xprt *);
+	int (*buf_alloc)(struct rpc_task *);
+	void (*buf_free)(struct rpc_task *);
+	int (*prepare_request)(struct rpc_rqst *);
+	int (*send_request)(struct rpc_rqst *);
+	void (*wait_for_reply_request)(struct rpc_task *);
+	void (*timer)(struct rpc_xprt *, struct rpc_task *);
+	void (*release_request)(struct rpc_task *);
+	void (*close)(struct rpc_xprt *);
+	void (*destroy)(struct rpc_xprt *);
+	void (*set_connect_timeout)(struct rpc_xprt *, long unsigned int, long unsigned int);
+	void (*print_stats)(struct rpc_xprt *, struct seq_file *);
+	int (*enable_swap)(struct rpc_xprt *);
+	void (*disable_swap)(struct rpc_xprt *);
+	void (*inject_disconnect)(struct rpc_xprt *);
+	int (*bc_setup)(struct rpc_xprt *, unsigned int);
+	size_t (*bc_maxpayload)(struct rpc_xprt *);
+	unsigned int (*bc_num_slots)(struct rpc_xprt *);
+	void (*bc_free_rqst)(struct rpc_rqst *);
+	void (*bc_destroy)(struct rpc_xprt *, unsigned int);
+};
+
+struct svc_program;
+
+struct svc_stat;
+
+struct svc_pool;
+
+struct svc_serv {
+	struct svc_program *sv_program;
+	struct svc_stat *sv_stats;
+	spinlock_t sv_lock;
+	struct kref sv_refcnt;
+	unsigned int sv_nrthreads;
+	unsigned int sv_maxconn;
+	unsigned int sv_max_payload;
+	unsigned int sv_max_mesg;
+	unsigned int sv_xdrsize;
+	struct list_head sv_permsocks;
+	struct list_head sv_tempsocks;
+	int sv_tmpcnt;
+	struct timer_list sv_temptimer;
+	char *sv_name;
+	unsigned int sv_nrpools;
+	struct svc_pool *sv_pools;
+	int (*sv_threadfn)(void *);
+	struct list_head sv_cb_list;
+	spinlock_t sv_cb_lock;
+	wait_queue_head_t sv_cb_waitq;
+	bool sv_bc_enabled;
+};
+
+struct xprt_create;
+
+struct xprt_class {
+	struct list_head list;
+	int ident;
+	struct rpc_xprt * (*setup)(struct xprt_create *);
+	struct module *owner;
+	char name[32];
+	const char *netid[0];
+};
+
+struct xprt_create {
+	int ident;
+	struct net *net;
+	struct sockaddr *srcaddr;
+	struct sockaddr *dstaddr;
+	size_t addrlen;
+	const char *servername;
+	struct svc_xprt *bc_xprt;
+	struct rpc_xprt_switch *bc_xps;
+	unsigned int flags;
+};
+
+struct rpc_sysfs_xprt_switch;
+
+struct rpc_xprt_switch {
+	spinlock_t xps_lock;
+	struct kref xps_kref;
+	unsigned int xps_id;
+	unsigned int xps_nxprts;
+	unsigned int xps_nactive;
+	unsigned int xps_nunique_destaddr_xprts;
+	atomic_long_t xps_queuelen;
+	struct list_head xps_xprt_list;
+	struct net *xps_net;
+	const struct rpc_xprt_iter_ops *xps_iter_ops;
+	struct rpc_sysfs_xprt_switch *xps_sysfs;
+	struct callback_head xps_rcu;
+};
+
+struct rpc_stat {
+	const struct rpc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int netreconn;
+	unsigned int rpccnt;
+	unsigned int rpcretrans;
+	unsigned int rpcauthrefresh;
+	unsigned int rpcgarbage;
+};
+
+struct rpc_version;
+
+struct rpc_program {
+	const char *name;
+	u32 number;
+	unsigned int nrvers;
+	const struct rpc_version **version;
+	struct rpc_stat *stats;
+	const char *pipe_dir_name;
+};
+
+struct svc_stat {
+	struct svc_program *program;
+	unsigned int netcnt;
+	unsigned int netudpcnt;
+	unsigned int nettcpcnt;
+	unsigned int nettcpconn;
+	unsigned int rpccnt;
+	unsigned int rpcbadfmt;
+	unsigned int rpcbadauth;
+	unsigned int rpcbadclnt;
+};
+
+struct svc_version;
+
+struct svc_rqst;
+
+struct svc_process_info;
+
+struct svc_program {
+	struct svc_program *pg_next;
+	u32 pg_prog;
+	unsigned int pg_lovers;
+	unsigned int pg_hivers;
+	unsigned int pg_nvers;
+	const struct svc_version **pg_vers;
+	char *pg_name;
+	char *pg_class;
+	struct svc_stat *pg_stats;
+	int (*pg_authenticate)(struct svc_rqst *);
+	__be32 (*pg_init_request)(struct svc_rqst *, const struct svc_program *, struct svc_process_info *);
+	int (*pg_rpcbind_set)(struct net *, const struct svc_program *, u32, int, short unsigned int, short unsigned int);
+};
+
+struct rpc_xprt_iter_ops {
+	void (*xpi_rewind)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_xprt)(struct rpc_xprt_iter *);
+	struct rpc_xprt * (*xpi_next)(struct rpc_xprt_iter *);
+};
+
+struct rpc_version {
+	u32 number;
+	unsigned int nrprocs;
+	const struct rpc_procinfo *procs;
+	unsigned int *counts;
+};
+
+struct nfs_fh {
+	short unsigned int size;
+	unsigned char data[128];
+};
+
+enum nfs3_stable_how {
+	NFS_UNSTABLE = 0,
+	NFS_DATA_SYNC = 1,
+	NFS_FILE_SYNC = 2,
+	NFS_INVALID_STABLE_HOW = 4294967295,
+};
+
+struct nfs4_label {
+	uint32_t lfs;
+	uint32_t pi;
+	u32 len;
+	char *label;
+};
+
+typedef struct {
+	char data[8];
+} nfs4_verifier;
+
+enum nfs4_change_attr_type {
+	NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1,
+	NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2,
+	NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3,
+	NFS4_CHANGE_TYPE_IS_UNDEFINED = 4,
+};
+
+struct gss_api_mech;
+
+struct gss_ctx {
+	struct gss_api_mech *mech_type;
+	void *internal_ctx_id;
+	unsigned int slack;
+	unsigned int align;
+};
+
+struct gss_api_ops;
+
+struct pf_desc;
+
+struct gss_api_mech {
+	struct list_head gm_list;
+	struct module *gm_owner;
+	struct rpcsec_gss_oid gm_oid;
+	char *gm_name;
+	const struct gss_api_ops *gm_ops;
+	int gm_pf_num;
+	struct pf_desc *gm_pfs;
+	const char *gm_upcall_enctypes;
+};
+
+struct auth_domain;
+
+struct pf_desc {
+	u32 pseudoflavor;
+	u32 qop;
+	u32 service;
+	char *name;
+	char *auth_domain_name;
+	struct auth_domain *domain;
+	bool datatouch;
+};
+
+struct auth_ops;
+
+struct auth_domain {
+	struct kref ref;
+	struct hlist_node hash;
+	char *name;
+	struct auth_ops *flavour;
+	struct callback_head callback_head;
+};
+
+struct gss_api_ops {
+	int (*gss_import_sec_context)(const void *, size_t, struct gss_ctx *, time64_t *, gfp_t);
+	u32 (*gss_get_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_verify_mic)(struct gss_ctx *, struct xdr_buf *, struct xdr_netobj *);
+	u32 (*gss_wrap)(struct gss_ctx *, int, struct xdr_buf *, struct page **);
+	u32 (*gss_unwrap)(struct gss_ctx *, int, int, struct xdr_buf *);
+	void (*gss_delete_sec_context)(void *);
+};
+
+struct nfs4_string {
+	unsigned int len;
+	char *data;
+};
+
+struct nfs_fsid {
+	uint64_t major;
+	uint64_t minor;
+};
+
+struct nfs4_threshold {
+	__u32 bm;
+	__u32 l_type;
+	__u64 rd_sz;
+	__u64 wr_sz;
+	__u64 rd_io_sz;
+	__u64 wr_io_sz;
+};
+
+struct nfs_fattr {
+	unsigned int valid;
+	umode_t mode;
+	__u32 nlink;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	__u64 size;
+	union {
+		struct {
+			__u32 blocksize;
+			__u32 blocks;
+		} nfs2;
+		struct {
+			__u64 used;
+		} nfs3;
+	} du;
+	struct nfs_fsid fsid;
+	__u64 fileid;
+	__u64 mounted_on_fileid;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	__u64 change_attr;
+	__u64 pre_change_attr;
+	__u64 pre_size;
+	struct timespec64 pre_mtime;
+	struct timespec64 pre_ctime;
+	long unsigned int time_start;
+	long unsigned int gencount;
+	struct nfs4_string *owner_name;
+	struct nfs4_string *group_name;
+	struct nfs4_threshold *mdsthreshold;
+	struct nfs4_label *label;
+};
+
+struct nfs_fsinfo {
+	struct nfs_fattr *fattr;
+	__u32 rtmax;
+	__u32 rtpref;
+	__u32 rtmult;
+	__u32 wtmax;
+	__u32 wtpref;
+	__u32 wtmult;
+	__u32 dtpref;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	__u32 lease_time;
+	__u32 nlayouttypes;
+	__u32 layouttype[8];
+	__u32 blksize;
+	__u32 clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	__u32 xattr_support;
+};
+
+struct nfs_fsstat {
+	struct nfs_fattr *fattr;
+	__u64 tbytes;
+	__u64 fbytes;
+	__u64 abytes;
+	__u64 tfiles;
+	__u64 ffiles;
+	__u64 afiles;
+};
+
+struct nfs_pathconf {
+	struct nfs_fattr *fattr;
+	__u32 max_link;
+	__u32 max_namelen;
+};
+
+struct nfs4_change_info {
+	u32 atomic;
+	u64 before;
+	u64 after;
+};
+
+struct nfs4_slot;
+
+struct nfs4_sequence_args {
+	struct nfs4_slot *sa_slot;
+	u8 sa_cache_this: 1;
+	u8 sa_privileged: 1;
+};
+
+struct nfs4_sequence_res {
+	struct nfs4_slot *sr_slot;
+	long unsigned int sr_timestamp;
+	int sr_status;
+	u32 sr_status_flags;
+	u32 sr_highest_slotid;
+	u32 sr_target_highest_slotid;
+};
+
+struct nfs_open_context;
+
+struct nfs_lock_context {
+	refcount_t count;
+	struct list_head list;
+	struct nfs_open_context *open_context;
+	fl_owner_t lockowner;
+	atomic_t io_count;
+	struct callback_head callback_head;
+};
+
+struct nfs_open_context {
+	struct nfs_lock_context lock_context;
+	fl_owner_t flock_owner;
+	struct dentry *dentry;
+	const struct cred *cred;
+	struct rpc_cred *ll_cred;
+	struct nfs4_state *state;
+	fmode_t mode;
+	long unsigned int flags;
+	int error;
+	struct list_head list;
+	struct nfs4_threshold *mdsthreshold;
+	struct callback_head callback_head;
+};
+
+struct nlm_host;
+
+struct nfs_iostats;
+
+struct nfs_auth_info {
+	unsigned int flavor_len;
+	rpc_authflavor_t flavors[12];
+};
+
+struct fscache_volume;
+
+struct pnfs_layoutdriver_type;
+
+struct nfs_client;
+
+struct nfs_server {
+	struct nfs_client *nfs_client;
+	struct list_head client_link;
+	struct list_head master_link;
+	struct rpc_clnt *client;
+	struct rpc_clnt *client_acl;
+	struct nlm_host *nlm_host;
+	struct nfs_iostats *io_stats;
+	atomic_long_t writeback;
+	unsigned int write_congested;
+	unsigned int flags;
+	unsigned int fattr_valid;
+	unsigned int caps;
+	unsigned int rsize;
+	unsigned int rpages;
+	unsigned int wsize;
+	unsigned int wpages;
+	unsigned int wtmult;
+	unsigned int dtsize;
+	short unsigned int port;
+	unsigned int bsize;
+	unsigned int gxasize;
+	unsigned int sxasize;
+	unsigned int lxasize;
+	unsigned int acregmin;
+	unsigned int acregmax;
+	unsigned int acdirmin;
+	unsigned int acdirmax;
+	unsigned int namelen;
+	unsigned int options;
+	unsigned int clone_blksize;
+	enum nfs4_change_attr_type change_attr_type;
+	struct nfs_fsid fsid;
+	__u64 maxfilesize;
+	struct timespec64 time_delta;
+	long unsigned int mount_time;
+	struct super_block *super;
+	dev_t s_dev;
+	struct nfs_auth_info auth_info;
+	struct fscache_volume *fscache;
+	char *fscache_uniq;
+	u32 pnfs_blksize;
+	u32 attr_bitmask[3];
+	u32 attr_bitmask_nl[3];
+	u32 exclcreat_bitmask[3];
+	u32 cache_consistency_bitmask[3];
+	u32 acl_bitmask;
+	u32 fh_expire_type;
+	struct pnfs_layoutdriver_type *pnfs_curr_ld;
+	struct rpc_wait_queue roc_rpcwaitq;
+	void *pnfs_ld_data;
+	struct rb_root state_owners;
+	struct ida openowner_id;
+	struct ida lockowner_id;
+	struct list_head state_owners_lru;
+	struct list_head layouts;
+	struct list_head delegations;
+	struct list_head ss_copies;
+	long unsigned int mig_gen;
+	long unsigned int mig_status;
+	void (*destroy)(struct nfs_server *);
+	atomic_t active;
+	struct __kernel_sockaddr_storage mountd_address;
+	size_t mountd_addrlen;
+	u32 mountd_version;
+	short unsigned int mountd_port;
+	short unsigned int mountd_protocol;
+	struct rpc_wait_queue uoc_rpcwaitq;
+	unsigned int read_hdrsize;
+	const struct cred *cred;
+	bool has_sec_mnt_opts;
+};
+
+struct nfs_subversion;
+
+struct idmap;
+
+struct nfs4_slot_table;
+
+struct nfs4_session;
+
+struct nfs_rpc_ops;
+
+struct nfs4_minor_version_ops;
+
+struct nfs41_server_owner;
+
+struct nfs41_server_scope;
+
+struct nfs41_impl_id;
+
+struct nfs_client {
+	refcount_t cl_count;
+	atomic_t cl_mds_count;
+	int cl_cons_state;
+	long unsigned int cl_res_state;
+	long unsigned int cl_flags;
+	struct __kernel_sockaddr_storage cl_addr;
+	size_t cl_addrlen;
+	char *cl_hostname;
+	char *cl_acceptor;
+	struct list_head cl_share_link;
+	struct list_head cl_superblocks;
+	struct rpc_clnt *cl_rpcclient;
+	const struct nfs_rpc_ops *rpc_ops;
+	int cl_proto;
+	struct nfs_subversion *cl_nfs_mod;
+	u32 cl_minorversion;
+	unsigned int cl_nconnect;
+	unsigned int cl_max_connect;
+	const char *cl_principal;
+	struct list_head cl_ds_clients;
+	u64 cl_clientid;
+	nfs4_verifier cl_confirm;
+	long unsigned int cl_state;
+	spinlock_t cl_lock;
+	long unsigned int cl_lease_time;
+	long unsigned int cl_last_renewal;
+	struct delayed_work cl_renewd;
+	struct rpc_wait_queue cl_rpcwaitq;
+	struct idmap *cl_idmap;
+	const char *cl_owner_id;
+	u32 cl_cb_ident;
+	const struct nfs4_minor_version_ops *cl_mvops;
+	long unsigned int cl_mig_gen;
+	struct nfs4_slot_table *cl_slot_tbl;
+	u32 cl_seqid;
+	u32 cl_exchange_flags;
+	struct nfs4_session *cl_session;
+	bool cl_preserve_clid;
+	struct nfs41_server_owner *cl_serverowner;
+	struct nfs41_server_scope *cl_serverscope;
+	struct nfs41_impl_id *cl_implid;
+	long unsigned int cl_sp4_flags;
+	wait_queue_head_t cl_lock_waitq;
+	char cl_ipaddr[48];
+	struct net *cl_net;
+	struct list_head pending_cb_stateids;
+};
+
+struct pnfs_layout_segment;
+
+struct nfs_seqid {
+	struct nfs_seqid_counter *sequence;
+	struct list_head list;
+	struct rpc_task *task;
+};
+
+struct nfs_write_verifier {
+	char data[8];
+};
+
+struct nfs_writeverf {
+	struct nfs_write_verifier verifier;
+	enum nfs3_stable_how committed;
+};
+
+struct nfs_pgio_args {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	struct nfs_open_context *context;
+	struct nfs_lock_context *lock_context;
+	nfs4_stateid stateid;
+	__u64 offset;
+	__u32 count;
+	unsigned int pgbase;
+	struct page **pages;
+	union {
+		unsigned int replen;
+		struct {
+			const u32 *bitmask;
+			u32 bitmask_store[3];
+			enum nfs3_stable_how stable;
+		};
+	};
+};
+
+struct nfs_pgio_res {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_fattr *fattr;
+	__u64 count;
+	__u32 op_status;
+	union {
+		struct {
+			unsigned int replen;
+			int eof;
+		};
+		struct {
+			struct nfs_writeverf *verf;
+			const struct nfs_server *server;
+		};
+	};
+};
+
+struct nfs_commitargs {
+	struct nfs4_sequence_args seq_args;
+	struct nfs_fh *fh;
+	__u64 offset;
+	__u32 count;
+	const u32 *bitmask;
+};
+
+struct nfs_commitres {
+	struct nfs4_sequence_res seq_res;
+	__u32 op_status;
+	struct nfs_fattr *fattr;
+	struct nfs_writeverf *verf;
+	const struct nfs_server *server;
+};
+
+struct nfs_removeargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *fh;
+	struct qstr name;
+};
+
+struct nfs_removeres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs_fattr *dir_attr;
+	struct nfs4_change_info cinfo;
+};
+
+struct nfs_renameargs {
+	struct nfs4_sequence_args seq_args;
+	const struct nfs_fh *old_dir;
+	const struct nfs_fh *new_dir;
+	const struct qstr *old_name;
+	const struct qstr *new_name;
+};
+
+struct nfs_renameres {
+	struct nfs4_sequence_res seq_res;
+	struct nfs_server *server;
+	struct nfs4_change_info old_cinfo;
+	struct nfs_fattr *old_fattr;
+	struct nfs4_change_info new_cinfo;
+	struct nfs_fattr *new_fattr;
+};
+
+struct nfs_entry {
+	__u64 ino;
+	__u64 cookie;
+	const char *name;
+	unsigned int len;
+	int eof;
+	struct nfs_fh *fh;
+	struct nfs_fattr *fattr;
+	unsigned char d_type;
+	struct nfs_server *server;
+};
+
+struct nfs_readdir_arg {
+	struct dentry *dentry;
+	const struct cred *cred;
+	__be32 *verf;
+	u64 cookie;
+	struct page **pages;
+	unsigned int page_len;
+	bool plus;
+};
+
+struct nfs_readdir_res {
+	__be32 *verf;
+};
+
+struct nfs4_pathname {
+	unsigned int ncomponents;
+	struct nfs4_string components[512];
+};
+
+struct nfs4_fs_location {
+	unsigned int nservers;
+	struct nfs4_string servers[10];
+	struct nfs4_pathname rootpath;
+};
+
+struct nfs4_fs_locations {
+	struct nfs_fattr *fattr;
+	const struct nfs_server *server;
+	struct nfs4_pathname fs_path;
+	int nlocations;
+	struct nfs4_fs_location locations[10];
+};
+
+struct nfstime4 {
+	u64 seconds;
+	u32 nseconds;
+};
+
+struct pnfs_commit_ops;
+
+struct pnfs_ds_commit_info {
+	struct list_head commits;
+	unsigned int nwritten;
+	unsigned int ncommitting;
+	const struct pnfs_commit_ops *ops;
+};
+
+struct nfs41_server_owner {
+	uint64_t minor_id;
+	uint32_t major_id_sz;
+	char major_id[1024];
+};
+
+struct nfs41_server_scope {
+	uint32_t server_scope_sz;
+	char server_scope[1024];
+};
+
+struct nfs41_impl_id {
+	char domain[1025];
+	char name[1025];
+	struct nfstime4 date;
+};
+
+struct nfs_page_array {
+	struct page **pagevec;
+	unsigned int npages;
+	struct page *page_array[8];
+};
+
+struct nfs_page;
+
+struct nfs_rw_ops;
+
+struct nfs_io_completion;
+
+struct nfs_direct_req;
+
+struct nfs_pgio_completion_ops;
+
+struct nfs_pgio_header {
+	struct inode *inode;
+	const struct cred *cred;
+	struct list_head pages;
+	struct nfs_page *req;
+	struct nfs_writeverf verf;
+	fmode_t rw_mode;
+	struct pnfs_layout_segment *lseg;
+	loff_t io_start;
+	const struct rpc_call_ops *mds_ops;
+	void (*release)(struct nfs_pgio_header *);
+	const struct nfs_pgio_completion_ops *completion_ops;
+	const struct nfs_rw_ops *rw_ops;
+	struct nfs_io_completion *io_completion;
+	struct nfs_direct_req *dreq;
+	int pnfs_error;
+	int error;
+	unsigned int good_bytes;
+	long unsigned int flags;
+	struct rpc_task task;
+	struct nfs_fattr fattr;
+	struct nfs_pgio_args args;
+	struct nfs_pgio_res res;
+	long unsigned int timestamp;
+	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
+	__u64 mds_offset;
+	struct nfs_page_array page_array;
+	struct nfs_client *ds_clp;
+	u32 ds_commit_idx;
+	u32 pgio_mirror_idx;
+};
+
+struct nfs_pgio_completion_ops {
+	void (*error_cleanup)(struct list_head *, int);
+	void (*init_hdr)(struct nfs_pgio_header *);
+	void (*completion)(struct nfs_pgio_header *);
+	void (*reschedule_io)(struct nfs_pgio_header *);
+};
+
+struct nfs_mds_commit_info {
+	atomic_t rpcs_out;
+	atomic_long_t ncommit;
+	struct list_head list;
+};
+
+struct nfs_commit_data;
+
+struct nfs_commit_info;
+
+struct nfs_commit_completion_ops {
+	void (*completion)(struct nfs_commit_data *);
+	void (*resched_write)(struct nfs_commit_info *, struct nfs_page *);
+};
+
+struct nfs_commit_data {
+	struct rpc_task task;
+	struct inode *inode;
+	const struct cred *cred;
+	struct nfs_fattr fattr;
+	struct nfs_writeverf verf;
+	struct list_head pages;
+	struct list_head list;
+	struct nfs_direct_req *dreq;
+	struct nfs_commitargs args;
+	struct nfs_commitres res;
+	struct nfs_open_context *context;
+	struct pnfs_layout_segment *lseg;
+	struct nfs_client *ds_clp;
+	int ds_commit_index;
+	loff_t lwb;
+	const struct rpc_call_ops *mds_ops;
+	const struct nfs_commit_completion_ops *completion_ops;
+	int (*commit_done_cb)(struct rpc_task *, struct nfs_commit_data *);
+	long unsigned int flags;
+};
+
+struct nfs_commit_info {
+	struct inode *inode;
+	struct nfs_mds_commit_info *mds;
+	struct pnfs_ds_commit_info *ds;
+	struct nfs_direct_req *dreq;
+	const struct nfs_commit_completion_ops *completion_ops;
+};
+
+struct nfs_unlinkdata {
+	struct nfs_removeargs args;
+	struct nfs_removeres res;
+	struct dentry *dentry;
+	wait_queue_head_t wq;
+	const struct cred *cred;
+	struct nfs_fattr dir_attr;
+	long int timeout;
+};
+
+struct nfs_renamedata {
+	struct nfs_renameargs args;
+	struct nfs_renameres res;
+	struct rpc_task task;
+	const struct cred *cred;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct nfs_fattr old_fattr;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct nfs_fattr new_fattr;
+	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
+	long int timeout;
+	bool cancelled;
+};
+
+struct nlmclnt_operations;
+
+struct nfs_client_initdata;
+
+struct nfs_access_entry;
+
+struct nfs_rpc_ops {
+	u32 version;
+	const struct dentry_operations *dentry_ops;
+	const struct inode_operations *dir_inode_ops;
+	const struct inode_operations *file_inode_ops;
+	const struct file_operations *file_ops;
+	const struct nlmclnt_operations *nlmclnt_ops;
+	int (*getroot)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*submount)(struct fs_context *, struct nfs_server *);
+	int (*try_get_tree)(struct fs_context *);
+	int (*getattr)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct inode *);
+	int (*setattr)(struct dentry *, struct nfs_fattr *, struct iattr *);
+	int (*lookup)(struct inode *, struct dentry *, struct nfs_fh *, struct nfs_fattr *);
+	int (*lookupp)(struct inode *, struct nfs_fh *, struct nfs_fattr *);
+	int (*access)(struct inode *, struct nfs_access_entry *, const struct cred *);
+	int (*readlink)(struct inode *, struct page *, unsigned int, unsigned int);
+	int (*create)(struct inode *, struct dentry *, struct iattr *, int);
+	int (*remove)(struct inode *, struct dentry *);
+	void (*unlink_setup)(struct rpc_message *, struct dentry *, struct inode *);
+	void (*unlink_rpc_prepare)(struct rpc_task *, struct nfs_unlinkdata *);
+	int (*unlink_done)(struct rpc_task *, struct inode *);
+	void (*rename_setup)(struct rpc_message *, struct dentry *, struct dentry *);
+	void (*rename_rpc_prepare)(struct rpc_task *, struct nfs_renamedata *);
+	int (*rename_done)(struct rpc_task *, struct inode *, struct inode *);
+	int (*link)(struct inode *, struct inode *, const struct qstr *);
+	int (*symlink)(struct inode *, struct dentry *, struct page *, unsigned int, struct iattr *);
+	int (*mkdir)(struct inode *, struct dentry *, struct iattr *);
+	int (*rmdir)(struct inode *, const struct qstr *);
+	int (*readdir)(struct nfs_readdir_arg *, struct nfs_readdir_res *);
+	int (*mknod)(struct inode *, struct dentry *, struct iattr *, dev_t);
+	int (*statfs)(struct nfs_server *, struct nfs_fh *, struct nfs_fsstat *);
+	int (*fsinfo)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	int (*pathconf)(struct nfs_server *, struct nfs_fh *, struct nfs_pathconf *);
+	int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
+	int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
+	int (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
+	int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *, struct rpc_clnt **);
+	int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);
+	void (*commit_setup)(struct nfs_commit_data *, struct rpc_message *, struct rpc_clnt **);
+	void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
+	int (*commit_done)(struct rpc_task *, struct nfs_commit_data *);
+	int (*lock)(struct file *, int, struct file_lock *);
+	int (*lock_check_bounds)(const struct file_lock *);
+	void (*clear_acl_cache)(struct inode *);
+	void (*close_context)(struct nfs_open_context *, int);
+	struct inode * (*open_context)(struct inode *, struct nfs_open_context *, int, struct iattr *, int *);
+	int (*have_delegation)(struct inode *, fmode_t);
+	struct nfs_client * (*alloc_client)(const struct nfs_client_initdata *);
+	struct nfs_client * (*init_client)(struct nfs_client *, const struct nfs_client_initdata *);
+	void (*free_client)(struct nfs_client *);
+	struct nfs_server * (*create_server)(struct fs_context *);
+	struct nfs_server * (*clone_server)(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, rpc_authflavor_t);
+	int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+	void (*enable_swap)(struct inode *);
+	void (*disable_swap)(struct inode *);
+};
+
+struct nfs_access_entry {
+	struct rb_node rb_node;
+	struct list_head lru;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	struct group_info *group_info;
+	__u32 mask;
+	struct callback_head callback_head;
+};
+
+struct nfs4_state_recovery_ops;
+
+struct nfs4_state_maintenance_ops;
+
+struct nfs4_mig_recovery_ops;
+
+struct nfs4_minor_version_ops {
+	u32 minor_version;
+	unsigned int init_caps;
+	int (*init_client)(struct nfs_client *);
+	void (*shutdown_client)(struct nfs_client *);
+	bool (*match_stateid)(const nfs4_stateid *, const nfs4_stateid *);
+	int (*find_root_sec)(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
+	void (*free_lock_state)(struct nfs_server *, struct nfs4_lock_state *);
+	int (*test_and_free_expired)(struct nfs_server *, nfs4_stateid *, const struct cred *);
+	struct nfs_seqid * (*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
+	void (*session_trunk)(struct rpc_clnt *, struct rpc_xprt *, void *);
+	const struct rpc_call_ops *call_sync_ops;
+	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
+	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
+	const struct nfs4_state_maintenance_ops *state_renewal_ops;
+	const struct nfs4_mig_recovery_ops *mig_recovery_ops;
+};
+
+struct nfs4_state_owner;
+
+struct nfs4_state {
+	struct list_head open_states;
+	struct list_head inode_states;
+	struct list_head lock_states;
+	struct nfs4_state_owner *owner;
+	struct inode *inode;
+	long unsigned int flags;
+	spinlock_t state_lock;
+	seqlock_t seqlock;
+	nfs4_stateid stateid;
+	nfs4_stateid open_stateid;
+	unsigned int n_rdonly;
+	unsigned int n_wronly;
+	unsigned int n_rdwr;
+	fmode_t state;
+	refcount_t count;
+	wait_queue_head_t waitq;
+	struct callback_head callback_head;
+};
+
+struct cache_head {
+	struct hlist_node cache_list;
+	time64_t expiry_time;
+	time64_t last_refresh;
+	struct kref ref;
+	long unsigned int flags;
+};
+
+struct cache_deferred_req;
+
+struct cache_req {
+	struct cache_deferred_req * (*defer)(struct cache_req *);
+	long unsigned int thread_wait;
+};
+
+struct cache_deferred_req {
+	struct hlist_node hash;
+	struct list_head recent;
+	struct cache_head *item;
+	void *owner;
+	void (*revisit)(struct cache_deferred_req *, int);
+};
+
+struct svc_cred {
+	kuid_t cr_uid;
+	kgid_t cr_gid;
+	struct group_info *cr_group_info;
+	u32 cr_flavor;
+	char *cr_raw_principal;
+	char *cr_principal;
+	char *cr_targ_princ;
+	struct gss_api_mech *cr_gss_mech;
+};
+
+struct auth_ops {
+	char *name;
+	struct module *owner;
+	int flavour;
+	int (*accept)(struct svc_rqst *);
+	int (*release)(struct svc_rqst *);
+	void (*domain_release)(struct auth_domain *);
+	int (*set_client)(struct svc_rqst *);
+};
+
+struct svc_cacherep;
+
+struct svc_procedure;
+
+struct svc_deferred_req;
+
+struct svc_rqst {
+	struct list_head rq_all;
+	struct callback_head rq_rcu_head;
+	struct svc_xprt *rq_xprt;
+	struct __kernel_sockaddr_storage rq_addr;
+	size_t rq_addrlen;
+	struct __kernel_sockaddr_storage rq_daddr;
+	size_t rq_daddrlen;
+	struct svc_serv *rq_server;
+	struct svc_pool *rq_pool;
+	const struct svc_procedure *rq_procinfo;
+	struct auth_ops *rq_authop;
+	struct svc_cred rq_cred;
+	void *rq_xprt_ctxt;
+	struct svc_deferred_req *rq_deferred;
+	struct xdr_buf rq_arg;
+	struct xdr_stream rq_arg_stream;
+	struct xdr_stream rq_res_stream;
+	struct page *rq_scratch_page;
+	struct xdr_buf rq_res;
+	struct page *rq_pages[260];
+	struct page **rq_respages;
+	struct page **rq_next_page;
+	struct page **rq_page_end;
+	struct pagevec rq_pvec;
+	struct kvec rq_vec[259];
+	struct bio_vec rq_bvec[259];
+	__be32 rq_xid;
+	u32 rq_prog;
+	u32 rq_vers;
+	u32 rq_proc;
+	u32 rq_prot;
+	int rq_cachetype;
+	long unsigned int rq_flags;
+	ktime_t rq_qtime;
+	void *rq_argp;
+	void *rq_resp;
+	void *rq_auth_data;
+	__be32 rq_auth_stat;
+	int rq_auth_slack;
+	int rq_reserved;
+	ktime_t rq_stime;
+	struct cache_req rq_chandle;
+	struct auth_domain *rq_client;
+	struct auth_domain *rq_gssclient;
+	struct svc_cacherep *rq_cacherep;
+	struct task_struct *rq_task;
+	spinlock_t rq_lock;
+	struct net *rq_bc_net;
+	void **rq_lease_breaker;
+};
+
+struct svc_pool_stats {
+	atomic_long_t packets;
+	long unsigned int sockets_queued;
+	atomic_long_t threads_woken;
+	atomic_long_t threads_timedout;
+};
+
+struct svc_pool {
+	unsigned int sp_id;
+	spinlock_t sp_lock;
+	struct list_head sp_sockets;
+	unsigned int sp_nrthreads;
+	struct list_head sp_all_threads;
+	struct svc_pool_stats sp_stats;
+	long unsigned int sp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct svc_procedure {
+	__be32 (*pc_func)(struct svc_rqst *);
+	bool (*pc_decode)(struct svc_rqst *, struct xdr_stream *);
+	bool (*pc_encode)(struct svc_rqst *, struct xdr_stream *);
+	void (*pc_release)(struct svc_rqst *);
+	unsigned int pc_argsize;
+	unsigned int pc_ressize;
+	unsigned int pc_cachetype;
+	unsigned int pc_xdrressize;
+	const char *pc_name;
+};
+
+struct svc_deferred_req {
+	u32 prot;
+	struct svc_xprt *xprt;
+	struct __kernel_sockaddr_storage addr;
+	size_t addrlen;
+	struct __kernel_sockaddr_storage daddr;
+	size_t daddrlen;
+	void *xprt_ctxt;
+	struct cache_deferred_req handle;
+	int argslen;
+	__be32 args[0];
+};
+
+struct svc_process_info {
+	union {
+		int (*dispatch)(struct svc_rqst *, __be32 *);
+		struct {
+			unsigned int lovers;
+			unsigned int hivers;
+		} mismatch;
+	};
+};
+
+struct svc_version {
+	u32 vs_vers;
+	u32 vs_nproc;
+	const struct svc_procedure *vs_proc;
+	unsigned int *vs_count;
+	u32 vs_xdrsize;
+	bool vs_hidden;
+	bool vs_rpcb_optnl;
+	bool vs_need_cong_ctrl;
+	int (*vs_dispatch)(struct svc_rqst *, __be32 *);
+};
+
+struct nfs4_ssc_client_ops;
+
+struct nfs_ssc_client_ops;
+
+struct nfs_ssc_client_ops_tbl {
+	const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
+	const struct nfs_ssc_client_ops *ssc_nfs_ops;
+};
+
+struct nfs4_ssc_client_ops {
+	struct file * (*sco_open)(struct vfsmount *, struct nfs_fh *, nfs4_stateid *);
+	void (*sco_close)(struct file *);
+};
+
+struct nfs_ssc_client_ops {
+	void (*sco_sb_deactive)(struct super_block *);
+};
+
+struct nfs4_state_recovery_ops {
+	int owner_flag_bit;
+	int state_flag_bit;
+	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
+	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
+	int (*establish_clid)(struct nfs_client *, const struct cred *);
+	int (*reclaim_complete)(struct nfs_client *, const struct cred *);
+	int (*detect_trunking)(struct nfs_client *, struct nfs_client **, const struct cred *);
+};
+
+struct nfs4_state_maintenance_ops {
+	int (*sched_state_renewal)(struct nfs_client *, const struct cred *, unsigned int);
+	const struct cred * (*get_state_renewal_cred)(struct nfs_client *);
+	int (*renew_lease)(struct nfs_client *, const struct cred *);
+};
+
+struct nfs4_mig_recovery_ops {
+	int (*get_locations)(struct nfs_server *, struct nfs_fh *, struct nfs4_fs_locations *, struct page *, const struct cred *);
+	int (*fsid_present)(struct inode *, const struct cred *);
+};
+
+struct nfs4_state_owner {
+	struct nfs_server *so_server;
+	struct list_head so_lru;
+	long unsigned int so_expires;
+	struct rb_node so_server_node;
+	const struct cred *so_cred;
+	spinlock_t so_lock;
+	atomic_t so_count;
+	long unsigned int so_flags;
+	struct list_head so_states;
+	struct nfs_seqid_counter so_seqid;
+	seqcount_spinlock_t so_reclaim_seqcount;
+	struct mutex so_delegreturn_mutex;
+};
+
 struct core_name {
 	char *corename;
 	int used;
@@ -41257,8 +56844,8 @@
 	dev_t dev;
 	u64 ino;
 	loff_t size;
-	long unsigned int offset;
-	unsigned int length;
+	loff_t offset;
+	u64 length;
 	char __data[0];
 };
 
@@ -41275,15 +56862,14 @@
 	char __data[0];
 };
 
-struct trace_event_raw_iomap_apply {
+struct trace_event_raw_iomap_iter {
 	struct trace_entry ent;
 	dev_t dev;
 	u64 ino;
 	loff_t pos;
-	loff_t length;
+	u64 length;
 	unsigned int flags;
 	const void *ops;
-	void *actor;
 	long unsigned int caller;
 	char __data[0];
 };
@@ -41294,36 +56880,50 @@
 
 struct trace_event_data_offsets_iomap_class {};
 
-struct trace_event_data_offsets_iomap_apply {};
+struct trace_event_data_offsets_iomap_iter {};
 
 typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
 
 typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
 
-typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, long unsigned int, unsigned int);
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
 
-typedef void (*btf_trace_iomap_releasepage)(void *, struct inode *, long unsigned int, unsigned int);
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
 
-typedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode *, long unsigned int, unsigned int);
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
 
-typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, long unsigned int, unsigned int);
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
 
-typedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode *, struct iomap___2 *);
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap___2 *);
 
-typedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode *, struct iomap___2 *);
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap___2 *);
 
-typedef void (*btf_trace_iomap_apply)(void *, struct inode *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, long unsigned int);
 
-typedef loff_t (*iomap_actor_t)(struct inode *, loff_t, loff_t, void *, struct iomap___2 *, struct iomap___2 *);
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
 
 struct iomap_ioend {
 	struct list_head io_list;
 	u16 io_type;
 	u16 io_flags;
+	u32 io_folios;
 	struct inode *io_inode;
 	size_t io_size;
 	loff_t io_offset;
-	void *io_private;
+	sector_t io_sector;
 	struct bio *io_bio;
 	struct bio io_inline_bio;
 };
@@ -41333,7 +56933,7 @@
 struct iomap_writeback_ops {
 	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
 	int (*prepare_ioend)(struct iomap_ioend *, int);
-	void (*discard_page)(struct page *, loff_t);
+	void (*discard_folio)(struct folio *, loff_t);
 };
 
 struct iomap_writepage_ctx {
@@ -41350,19 +56950,16 @@
 };
 
 struct iomap_readpage_ctx {
-	struct page *cur_page;
-	bool cur_page_in_bio;
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
 	struct bio *bio;
 	struct readahead_control *rac;
 };
 
-enum {
-	IOMAP_WRITE_F_UNSHARE = 1,
-};
-
 struct iomap_dio_ops {
 	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
-	blk_qc_t (*submit_io)(struct inode *, struct iomap___2 *, struct bio *, loff_t);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
 };
 
 struct iomap_dio {
@@ -41373,13 +56970,13 @@
 	atomic_t ref;
 	unsigned int flags;
 	int error;
+	size_t done_before;
 	bool wait_for_completion;
 	union {
 		struct {
 			struct iov_iter *iter;
 			struct task_struct *waiter;
-			struct request_queue *last_queue;
-			blk_qc_t cookie;
+			struct bio *poll_bio;
 		} submit;
 		struct {
 			struct work_struct work;
@@ -41387,11 +56984,6 @@
 	};
 };
 
-struct fiemap_ctx {
-	struct fiemap_extent_info *fi;
-	struct iomap___2 prev;
-};
-
 struct iomap_swapfile_info {
 	struct iomap___2 iomap;
 	struct swap_info_struct *sis;
@@ -41399,6 +56991,7 @@
 	uint64_t highest_ppage;
 	long unsigned int nr_pages;
 	int nr_extents;
+	struct file *file;
 };
 
 enum {
@@ -41509,7 +57102,10 @@
 	__s32 qs_rtbtimelimit;
 	__u16 qs_bwarnlimit;
 	__u16 qs_iwarnlimit;
-	__u64 qs_pad2[8];
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
 };
 
 struct if_dqblk {
@@ -41554,7 +57150,29 @@
 	compat_u64 dqb_btime;
 	compat_u64 dqb_itime;
 	compat_uint_t dqb_valid;
-};
+} __attribute__((packed));
+
+struct compat_fs_qfilestat {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 qfs_nblks;
+	compat_uint_t qfs_nextents;
+} __attribute__((packed));
+
+struct compat_fs_quota_stat {
+	__s8 qs_version;
+	char: 8;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	int: 24;
+	struct compat_fs_qfilestat qs_uquota;
+	struct compat_fs_qfilestat qs_gquota;
+	compat_uint_t qs_incoredqs;
+	compat_int_t qs_btimelimit;
+	compat_int_t qs_itimelimit;
+	compat_int_t qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+} __attribute__((packed));
 
 enum {
 	QUOTA_NL_C_UNSPEC = 0,
@@ -41603,7 +57221,6 @@
 	u64 pss_shmem;
 	u64 pss_locked;
 	u64 swap_pss;
-	bool check_shmem_swap;
 };
 
 enum clear_refs_types {
@@ -41638,7 +57255,7 @@
 	long unsigned int mapcount_max;
 	long unsigned int dirty;
 	long unsigned int swapcache;
-	long unsigned int node[128];
+	long unsigned int node[1024];
 };
 
 struct numa_maps_private {
@@ -41729,26 +57346,56 @@
 
 struct seq_net_private {
 	struct net *net;
+	netns_tracker ns_tracker;
 };
 
 struct bpf_iter_aux_info___2;
 
-enum kcore_type {
-	KCORE_TEXT = 0,
-	KCORE_VMALLOC = 1,
-	KCORE_RAM = 2,
-	KCORE_VMEMMAP = 3,
-	KCORE_USER = 4,
-	KCORE_OTHER = 5,
-	KCORE_REMAP = 6,
+struct vmcore {
+	struct list_head list;
+	long long unsigned int paddr;
+	long long unsigned int size;
+	loff_t offset;
 };
 
-struct kcore_list {
+struct vmcoredd_node {
 	struct list_head list;
-	long unsigned int addr;
-	long unsigned int vaddr;
-	size_t size;
-	int type;
+	void *buf;
+	unsigned int size;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+typedef struct elf64_note Elf64_Nhdr;
+
+struct vmcoredd_header {
+	__u32 n_namesz;
+	__u32 n_descsz;
+	__u32 n_type;
+	__u8 name[8];
+	__u8 dump_name[44];
+};
+
+struct vmcoredd_data {
+	char dump_name[44];
+	unsigned int size;
+	int (*vmcoredd_callback)(struct vmcoredd_data *, void *);
+};
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
 };
 
 struct kernfs_iattrs {
@@ -41782,7 +57429,6 @@
 };
 
 struct kernfs_open_node {
-	atomic_t refcnt;
 	atomic_t event;
 	wait_queue_head_t poll;
 	struct list_head files;
@@ -41932,15 +57578,6 @@
 	struct dentry *ptmx_dentry;
 };
 
-struct dcookie_struct {
-	struct path path;
-	struct list_head hash_list;
-};
-
-struct dcookie_user {
-	struct list_head next;
-};
-
 typedef unsigned int tid_t;
 
 struct transaction_chp_stats_s {
@@ -42087,6 +57724,7 @@
 
 struct journal_s {
 	long unsigned int j_flags;
+	long unsigned int j_atomic_flags;
 	int j_errno;
 	struct mutex j_abort_mutex;
 	struct buffer_head *j_sb_buffer;
@@ -42106,6 +57744,9 @@
 	wait_queue_head_t j_fc_wait;
 	struct mutex j_checkpoint_mutex;
 	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
 	long unsigned int j_head;
 	long unsigned int j_tail;
 	long unsigned int j_free;
@@ -42154,7 +57795,7 @@
 	void *j_private;
 	struct crypto_shash *j_chksum_driver;
 	__u32 j_csum_seed;
-	void (*j_fc_cleanup_callback)(struct journal_s *, int);
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
 	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
 };
 
@@ -42313,10 +57954,13 @@
 };
 
 struct ext4_fc_stats {
-	unsigned int fc_ineligible_reason_count[10];
+	unsigned int fc_ineligible_reason_count[9];
 	long unsigned int fc_num_commits;
 	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_failed_commits;
+	long unsigned int fc_skipped_commits;
 	long unsigned int fc_numblks;
+	u64 s_fc_avg_commit_time;
 };
 
 struct ext4_fc_alloc_region {
@@ -42349,7 +57993,11 @@
 	ext4_lblk_t i_dir_start_lookup;
 	long unsigned int i_flags;
 	struct rw_semaphore xattr_sem;
-	struct list_head i_orphan;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
 	struct list_head i_fc_list;
 	ext4_lblk_t i_fc_lblk_start;
 	ext4_lblk_t i_fc_lblk_len;
@@ -42358,7 +58006,6 @@
 	struct mutex i_fc_lock;
 	loff_t i_disksize;
 	struct rw_semaphore i_data_sem;
-	struct rw_semaphore i_mmap_sem;
 	struct inode vfs_inode;
 	struct jbd2_inode *jinode;
 	spinlock_t i_raw_lock;
@@ -42492,10 +58139,27 @@
 	__u8 s_last_error_errcode;
 	__le16 s_encoding;
 	__le16 s_encoding_flags;
-	__le32 s_reserved[95];
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
 	__le32 s_checksum;
 };
 
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
 struct mb_cache___2;
 
 struct ext4_group_info;
@@ -42545,15 +58209,18 @@
 	struct percpu_counter s_freeinodes_counter;
 	struct percpu_counter s_dirs_counter;
 	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
 	struct blockgroup_lock *s_blockgroup_lock;
 	struct proc_dir_entry *s_proc;
 	struct kobject s_kobj;
 	struct completion s_kobj_unregister;
 	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
 	struct journal_s *s_journal;
-	struct list_head s_orphan;
-	struct mutex s_orphan_lock;
 	long unsigned int s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
 	long unsigned int s_commit_interval;
 	u32 s_max_batch_time;
 	u32 s_min_batch_time;
@@ -42570,7 +58237,15 @@
 	unsigned int s_group_info_size;
 	unsigned int s_mb_free_pending;
 	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct rb_root s_mb_avg_fragment_size_root;
+	rwlock_t s_mb_rb_lock;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
 	long unsigned int s_stripe;
+	unsigned int s_mb_max_linear_groups;
 	unsigned int s_mb_stream_request;
 	unsigned int s_mb_max_to_scan;
 	unsigned int s_mb_min_to_scan;
@@ -42587,12 +58262,17 @@
 	atomic_t s_bal_success;
 	atomic_t s_bal_allocated;
 	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_groups_scanned;
 	atomic_t s_bal_goals;
 	atomic_t s_bal_breaks;
 	atomic_t s_bal_2orders;
-	spinlock_t s_bal_lock;
-	long unsigned int s_mb_buddies_generated;
-	long long unsigned int s_mb_generation_time;
+	atomic_t s_bal_cr0_bad_suggestions;
+	atomic_t s_bal_cr1_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[4];
+	atomic64_t s_bal_cX_hits[4];
+	atomic64_t s_bal_cX_failed[4];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
 	atomic_t s_mb_lost_chunks;
 	atomic_t s_mb_preallocated;
 	atomic_t s_mb_discarded;
@@ -42609,7 +58289,7 @@
 	struct ext4_li_request *s_li_request;
 	unsigned int s_li_wait_mult;
 	struct task_struct *s_mmp_tsk;
-	atomic_t s_last_trim_minblks;
+	long unsigned int s_last_trim_minblks;
 	struct crypto_shash *s_chksum_driver;
 	__u32 s_csum_seed;
 	struct shrinker s_es_shrinker;
@@ -42620,8 +58300,8 @@
 	struct mb_cache___2 *s_ea_inode_cache;
 	long: 64;
 	long: 64;
-	long: 64;
 	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
 	struct ratelimit_state s_err_ratelimit_state;
 	struct ratelimit_state s_warning_ratelimit_state;
 	struct ratelimit_state s_msg_ratelimit_state;
@@ -42630,22 +58310,39 @@
 	struct fscrypt_dummy_policy s_dummy_enc_policy;
 	struct percpu_rw_semaphore s_writepages_rwsem;
 	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
 	errseq_t s_bdev_wb_err;
 	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_error_work;
 	atomic_t s_fc_subtid;
-	atomic_t s_fc_ineligible_updates;
 	struct list_head s_fc_q[2];
 	struct list_head s_fc_dentry_q[2];
 	unsigned int s_fc_bytes;
 	spinlock_t s_fc_lock;
 	struct buffer_head *s_fc_bh;
 	struct ext4_fc_stats s_fc_stats;
-	u64 s_fc_avg_commit_time;
+	tid_t s_fc_ineligible_tid;
 	struct ext4_fc_replay_state s_fc_replay_state;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct ext4_group_info {
@@ -42655,8 +58352,11 @@
 	ext4_grpblk_t bb_free;
 	ext4_grpblk_t bb_fragments;
 	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
 	struct list_head bb_prealloc_list;
 	struct rw_semaphore alloc_sem;
+	struct rb_node bb_avg_fragment_size_rb;
+	struct list_head bb_largest_free_order_node;
 	ext4_grpblk_t bb_counters[0];
 };
 
@@ -42726,11 +58426,6 @@
 };
 
 enum {
-	EXT4_FC_REASON_OK = 0,
-	EXT4_FC_REASON_INELIGIBLE = 1,
-	EXT4_FC_REASON_ALREADY_COMMITTED = 2,
-	EXT4_FC_REASON_FC_START_FAILED = 3,
-	EXT4_FC_REASON_FC_FAILED = 4,
 	EXT4_FC_REASON_XATTR = 0,
 	EXT4_FC_REASON_CROSS_RENAME = 1,
 	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
@@ -42740,8 +58435,17 @@
 	EXT4_FC_REASON_RENAME_DIR = 6,
 	EXT4_FC_REASON_FALLOC_RANGE = 7,
 	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
-	EXT4_FC_COMMIT_FAILED = 9,
-	EXT4_FC_REASON_MAX = 10,
+	EXT4_FC_REASON_MAX = 9,
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
 };
 
 struct ext4_dir_entry_2 {
@@ -42792,7 +58496,7 @@
 	struct inode *inode;
 	struct bio *bio;
 	unsigned int flag;
-	atomic_t count;
+	refcount_t count;
 	struct list_head list_vec;
 };
 
@@ -42820,6 +58524,7 @@
 	EXT4_STATE_LUSTRE_EA_INODE = 9,
 	EXT4_STATE_VERITY_IN_PROGRESS = 10,
 	EXT4_STATE_FC_COMMITTING = 11,
+	EXT4_STATE_ORPHAN_FILE = 12,
 };
 
 struct ext4_iloc {
@@ -42893,7 +58598,6 @@
 	EXT4_MF_MNTDIR_SAMPLED = 0,
 	EXT4_MF_FS_ABORTED = 1,
 	EXT4_MF_FC_INELIGIBLE = 2,
-	EXT4_MF_FC_COMMITTING = 3,
 };
 
 struct fsmap {
@@ -43133,7 +58837,7 @@
 	u32 blocks_count;
 	u16 reserved_blocks;
 	u16 unused;
-};
+} __attribute__((packed));
 
 struct ext4_new_group_data {
 	__u32 group;
@@ -43165,6 +58869,8 @@
 	struct fsmap fmh_recs[0];
 };
 
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
 struct getfsmap_info {
 	struct super_block *gi_sb;
 	struct fsmap_head *gi_data;
@@ -43227,11 +58933,14 @@
 	struct ext4_free_extent ac_g_ex;
 	struct ext4_free_extent ac_b_ex;
 	struct ext4_free_extent ac_f_ex;
+	ext4_group_t ac_last_optimal_group;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
 	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
 	__u16 ac_found;
 	__u16 ac_tail;
 	__u16 ac_buddy;
-	__u16 ac_flags;
 	__u8 ac_status;
 	__u8 ac_criteria;
 	__u8 ac_2order;
@@ -43280,11 +58989,6 @@
 	__le32 mmp_checksum;
 };
 
-struct mmpd_data {
-	struct buffer_head *bh;
-	struct super_block *sb;
-};
-
 struct ext4_dir_entry {
 	__le32 inode;
 	__le16 rec_len;
@@ -43409,6 +59113,15 @@
 	ext4_group_t count;
 };
 
+struct disk_stats {
+	u64 nsecs[4];
+	long unsigned int sectors[4];
+	long unsigned int ios[4];
+	long unsigned int merges[4];
+	long unsigned int io_ticks;
+	local_t in_flight[2];
+};
+
 enum stat_group {
 	STAT_READ = 0,
 	STAT_WRITE = 1,
@@ -43518,7 +59231,6 @@
 	ino_t ino;
 	loff_t pos;
 	unsigned int len;
-	unsigned int flags;
 	char __data[0];
 };
 
@@ -43587,13 +59299,13 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_invalidatepage_op {
+struct trace_event_raw_ext4_invalidate_folio_op {
 	struct trace_entry ent;
 	dev_t dev;
 	ino_t ino;
 	long unsigned int index;
-	unsigned int offset;
-	unsigned int length;
+	size_t offset;
+	size_t length;
 	char __data[0];
 };
 
@@ -43830,27 +59542,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_direct_IO_enter {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_direct_IO_exit {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	loff_t pos;
-	long unsigned int len;
-	int rw;
-	int ret;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4__fallocate_mode {
 	struct trace_entry ent;
 	dev_t dev;
@@ -44014,46 +59705,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_ext_put_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	ext4_fsblk_t start;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_ext_in_cache {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	int ret;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_find_delalloc_range {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t from;
-	ext4_lblk_t to;
-	int reverse;
-	int found;
-	ext4_lblk_t found_blk;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_get_reserved_cluster_alloc {
-	struct trace_entry ent;
-	dev_t dev;
-	ino_t ino;
-	ext4_lblk_t lblk;
-	unsigned int len;
-	char __data[0];
-};
-
 struct trace_event_raw_ext4_ext_show_extent {
 	struct trace_entry ent;
 	dev_t dev;
@@ -44314,6 +59965,7 @@
 struct trace_event_raw_ext4_fc_commit_start {
 	struct trace_entry ent;
 	dev_t dev;
+	tid_t tid;
 	char __data[0];
 };
 
@@ -44325,37 +59977,26 @@
 	int num_fc;
 	int num_fc_ineligible;
 	int nblks_agg;
+	tid_t tid;
 	char __data[0];
 };
 
 struct trace_event_raw_ext4_fc_stats {
 	struct trace_entry ent;
 	dev_t dev;
-	struct ext4_sb_info *sbi;
-	int count;
+	unsigned int fc_ineligible_rc[9];
+	long unsigned int fc_commits;
+	long unsigned int fc_ineligible_commits;
+	long unsigned int fc_numblks;
 	char __data[0];
 };
 
-struct trace_event_raw_ext4_fc_track_create {
+struct trace_event_raw_ext4_fc_track_dentry {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_link {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
-	int error;
-	char __data[0];
-};
-
-struct trace_event_raw_ext4_fc_track_unlink {
-	struct trace_entry ent;
-	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -44363,7 +60004,9 @@
 struct trace_event_raw_ext4_fc_track_inode {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	int error;
 	char __data[0];
 };
@@ -44371,13 +60014,32 @@
 struct trace_event_raw_ext4_fc_track_range {
 	struct trace_entry ent;
 	dev_t dev;
-	int ino;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
 	long int start;
 	long int end;
 	int error;
 	char __data[0];
 };
 
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_ext4_other_inode_update_time {};
 
 struct trace_event_data_offsets_ext4_free_inode {};
@@ -44410,7 +60072,7 @@
 
 struct trace_event_data_offsets_ext4__page_op {};
 
-struct trace_event_data_offsets_ext4_invalidatepage_op {};
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
 
 struct trace_event_data_offsets_ext4_discard_blocks {};
 
@@ -44456,10 +60118,6 @@
 
 struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
 
-struct trace_event_data_offsets_ext4_direct_IO_enter {};
-
-struct trace_event_data_offsets_ext4_direct_IO_exit {};
-
 struct trace_event_data_offsets_ext4__fallocate_mode {};
 
 struct trace_event_data_offsets_ext4_fallocate_exit {};
@@ -44492,14 +60150,6 @@
 
 struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
 
-struct trace_event_data_offsets_ext4_ext_put_in_cache {};
-
-struct trace_event_data_offsets_ext4_ext_in_cache {};
-
-struct trace_event_data_offsets_ext4_find_delalloc_range {};
-
-struct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};
-
 struct trace_event_data_offsets_ext4_ext_show_extent {};
 
 struct trace_event_data_offsets_ext4_remove_blocks {};
@@ -44558,16 +60208,16 @@
 
 struct trace_event_data_offsets_ext4_fc_stats {};
 
-struct trace_event_data_offsets_ext4_fc_track_create {};
-
-struct trace_event_data_offsets_ext4_fc_track_link {};
-
-struct trace_event_data_offsets_ext4_fc_track_unlink {};
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
 
 struct trace_event_data_offsets_ext4_fc_track_inode {};
 
 struct trace_event_data_offsets_ext4_fc_track_range {};
 
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
 typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
 
 typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
@@ -44586,9 +60236,9 @@
 
 typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
 
-typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
-typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
 
 typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
 
@@ -44610,9 +60260,9 @@
 
 typedef void (*btf_trace_ext4_releasepage)(void *, struct page *);
 
-typedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
-typedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
 
 typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);
 
@@ -44666,10 +60316,6 @@
 
 typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);
 
-typedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);
-
-typedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);
-
 typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
 
 typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
@@ -44714,14 +60360,6 @@
 
 typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
 
-typedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);
-
-typedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);
-
-typedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);
-
-typedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);
-
 typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);
 
 typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
@@ -44786,21 +60424,30 @@
 
 typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
 
-typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *);
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
 
-typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int);
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
 
 typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
 
-typedef void (*btf_trace_ext4_fc_track_create)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_link)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_unlink)(void *, struct inode *, struct dentry *, int);
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
 
-typedef void (*btf_trace_ext4_fc_track_inode)(void *, struct inode *, int);
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
 
-typedef void (*btf_trace_ext4_fc_track_range)(void *, struct inode *, long int, long int, int);
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long int, long int, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
 
 enum {
 	Opt_bsd_df = 0,
@@ -44810,78 +60457,74 @@
 	Opt_resgid = 4,
 	Opt_resuid = 5,
 	Opt_sb = 6,
-	Opt_err_cont = 7,
-	Opt_err_panic = 8,
-	Opt_err_ro = 9,
-	Opt_nouid32 = 10,
-	Opt_debug = 11,
-	Opt_removed = 12,
-	Opt_user_xattr = 13,
-	Opt_nouser_xattr = 14,
-	Opt_acl = 15,
-	Opt_noacl = 16,
-	Opt_auto_da_alloc = 17,
-	Opt_noauto_da_alloc = 18,
-	Opt_noload = 19,
-	Opt_commit = 20,
-	Opt_min_batch_time = 21,
-	Opt_max_batch_time = 22,
-	Opt_journal_dev = 23,
-	Opt_journal_path = 24,
-	Opt_journal_checksum = 25,
-	Opt_journal_async_commit = 26,
-	Opt_abort = 27,
-	Opt_data_journal = 28,
-	Opt_data_ordered = 29,
-	Opt_data_writeback = 30,
-	Opt_data_err_abort = 31,
-	Opt_data_err_ignore = 32,
-	Opt_test_dummy_encryption = 33,
-	Opt_inlinecrypt = 34,
-	Opt_usrjquota = 35,
-	Opt_grpjquota = 36,
-	Opt_offusrjquota = 37,
-	Opt_offgrpjquota = 38,
-	Opt_jqfmt_vfsold = 39,
-	Opt_jqfmt_vfsv0 = 40,
-	Opt_jqfmt_vfsv1 = 41,
-	Opt_quota = 42,
-	Opt_noquota = 43,
-	Opt_barrier = 44,
-	Opt_nobarrier = 45,
-	Opt_err___2 = 46,
-	Opt_usrquota = 47,
-	Opt_grpquota = 48,
-	Opt_prjquota = 49,
-	Opt_i_version = 50,
-	Opt_dax = 51,
-	Opt_dax_always = 52,
-	Opt_dax_inode = 53,
-	Opt_dax_never = 54,
-	Opt_stripe = 55,
-	Opt_delalloc = 56,
-	Opt_nodelalloc = 57,
-	Opt_warn_on_error = 58,
-	Opt_nowarn_on_error = 59,
-	Opt_mblk_io_submit = 60,
-	Opt_lazytime = 61,
-	Opt_nolazytime = 62,
-	Opt_debug_want_extra_isize = 63,
-	Opt_nomblk_io_submit = 64,
-	Opt_block_validity = 65,
-	Opt_noblock_validity = 66,
-	Opt_inode_readahead_blks = 67,
-	Opt_journal_ioprio = 68,
-	Opt_dioread_nolock = 69,
-	Opt_dioread_lock = 70,
-	Opt_discard = 71,
-	Opt_nodiscard = 72,
-	Opt_init_itable = 73,
-	Opt_noinit_itable = 74,
-	Opt_max_dir_size_kb = 75,
-	Opt_nojournal_checksum = 76,
-	Opt_nombcache = 77,
-	Opt_prefetch_block_bitmaps = 78,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_nouser_xattr = 11,
+	Opt_acl = 12,
+	Opt_noacl = 13,
+	Opt_auto_da_alloc = 14,
+	Opt_noauto_da_alloc = 15,
+	Opt_noload = 16,
+	Opt_commit = 17,
+	Opt_min_batch_time = 18,
+	Opt_max_batch_time = 19,
+	Opt_journal_dev = 20,
+	Opt_journal_path = 21,
+	Opt_journal_checksum = 22,
+	Opt_journal_async_commit = 23,
+	Opt_abort = 24,
+	Opt_data_journal = 25,
+	Opt_data_ordered = 26,
+	Opt_data_writeback = 27,
+	Opt_data_err_abort = 28,
+	Opt_data_err_ignore = 29,
+	Opt_test_dummy_encryption = 30,
+	Opt_inlinecrypt = 31,
+	Opt_usrjquota = 32,
+	Opt_grpjquota = 33,
+	Opt_quota = 34,
+	Opt_noquota = 35,
+	Opt_barrier = 36,
+	Opt_nobarrier = 37,
+	Opt_err___2 = 38,
+	Opt_usrquota = 39,
+	Opt_grpquota = 40,
+	Opt_prjquota = 41,
+	Opt_i_version = 42,
+	Opt_dax = 43,
+	Opt_dax_always = 44,
+	Opt_dax_inode = 45,
+	Opt_dax_never = 46,
+	Opt_stripe = 47,
+	Opt_delalloc = 48,
+	Opt_nodelalloc = 49,
+	Opt_warn_on_error = 50,
+	Opt_nowarn_on_error = 51,
+	Opt_mblk_io_submit = 52,
+	Opt_debug_want_extra_isize = 53,
+	Opt_nomblk_io_submit = 54,
+	Opt_block_validity = 55,
+	Opt_noblock_validity = 56,
+	Opt_inode_readahead_blks = 57,
+	Opt_journal_ioprio = 58,
+	Opt_dioread_nolock = 59,
+	Opt_dioread_lock = 60,
+	Opt_discard = 61,
+	Opt_nodiscard = 62,
+	Opt_init_itable = 63,
+	Opt_noinit_itable = 64,
+	Opt_max_dir_size_kb = 65,
+	Opt_nojournal_checksum = 66,
+	Opt_nombcache = 67,
+	Opt_no_prefetch_block_bitmaps = 68,
+	Opt_mb_optimize_scan = 69,
+	Opt_errors = 70,
+	Opt_data = 71,
+	Opt_data_err = 72,
+	Opt_jqfmt = 73,
+	Opt_dax_type = 74,
 };
 
 struct mount_opts {
@@ -44893,7 +60536,37 @@
 struct ext4_sb_encodings {
 	__u16 magic;
 	char *name;
-	char *version;
+	unsigned int version;
+};
+
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	char *test_dummy_enc_arg;
+	int s_jquota_fmt;
+	short unsigned int qname_spec;
+	long unsigned int vals_s_flags;
+	long unsigned int mask_s_flags;
+	long unsigned int journal_devnum;
+	long unsigned int s_commit_interval;
+	long unsigned int s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	long unsigned int vals_s_mount_flags;
+	long unsigned int mask_s_mount_flags;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
 };
 
 struct ext4_mount_options {
@@ -44914,18 +60587,19 @@
 	attr_session_write_kbytes = 2,
 	attr_lifetime_write_kbytes = 3,
 	attr_reserved_clusters = 4,
-	attr_inode_readahead = 5,
-	attr_trigger_test_error = 6,
-	attr_first_error_time = 7,
-	attr_last_error_time = 8,
-	attr_feature = 9,
-	attr_pointer_ui = 10,
-	attr_pointer_ul = 11,
-	attr_pointer_u64 = 12,
-	attr_pointer_u8 = 13,
-	attr_pointer_string = 14,
-	attr_pointer_atomic = 15,
-	attr_journal_task = 16,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
 };
 
 enum {
@@ -44983,7 +60657,7 @@
 struct ext4_fc_dentry_info {
 	__le32 fc_parent_ino;
 	__le32 fc_ino;
-	u8 fc_dname[0];
+	__u8 fc_dname[0];
 };
 
 struct ext4_fc_inode {
@@ -44996,6 +60670,13 @@
 	__le32 fc_crc;
 };
 
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
 struct ext4_fc_dentry_update {
 	int fcd_op;
 	int fcd_parent;
@@ -45003,6 +60684,7 @@
 	struct qstr fcd_name;
 	unsigned char fcd_iname[32];
 	struct list_head fcd_list;
+	struct list_head fcd_dilist;
 };
 
 struct __track_dentry_update_args {
@@ -45023,6 +60705,11 @@
 	char *dname;
 };
 
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
 typedef struct {
 	__le16 e_tag;
 	__le16 e_perm;
@@ -45210,6 +60897,35 @@
 	char __data[0];
 };
 
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	long unsigned int nr_to_scan;
+	long unsigned int nr_shrunk;
+	long unsigned int count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	long unsigned int nr_freed;
+	long unsigned int nr_scanned;
+	tid_t next_tid;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_jbd2_checkpoint {};
 
 struct trace_event_data_offsets_jbd2_commit {};
@@ -45234,6 +60950,12 @@
 
 struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
 
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
 typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
 
 typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
@@ -45268,6 +60990,14 @@
 
 typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);
 
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, long unsigned int, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, long unsigned int, long unsigned int, tid_t);
+
 struct jbd2_stats_proc_session {
 	journal_t *journal;
 	struct transaction_stats_s *stats;
@@ -45275,6 +61005,493 @@
 	int max;
 };
 
+struct meta_entry {
+	u64 data_block;
+	unsigned int index_block;
+	short unsigned int offset;
+	short unsigned int pad;
+};
+
+struct meta_index {
+	unsigned int inode_number;
+	unsigned int offset;
+	short unsigned int entries;
+	short unsigned int skip;
+	short unsigned int locked;
+	short unsigned int pad;
+	struct meta_entry meta_entry[127];
+};
+
+struct squashfs_cache_entry;
+
+struct squashfs_cache {
+	char *name;
+	int entries;
+	int curr_blk;
+	int next_blk;
+	int num_waiters;
+	int unused;
+	int block_size;
+	int pages;
+	spinlock_t lock;
+	wait_queue_head_t wait_queue;
+	struct squashfs_cache_entry *entry;
+};
+
+struct squashfs_page_actor;
+
+struct squashfs_cache_entry {
+	u64 block;
+	int length;
+	int refcount;
+	u64 next_index;
+	int pending;
+	int error;
+	int num_waiters;
+	wait_queue_head_t wait_queue;
+	struct squashfs_cache *cache;
+	void **data;
+	struct squashfs_page_actor *actor;
+};
+
+struct squashfs_page_actor {
+	union {
+		void **buffer;
+		struct page **page;
+	};
+	void *pageaddr;
+	void * (*squashfs_first_page)(struct squashfs_page_actor *);
+	void * (*squashfs_next_page)(struct squashfs_page_actor *);
+	void (*squashfs_finish_page)(struct squashfs_page_actor *);
+	int pages;
+	int length;
+	int next_page;
+};
+
+struct squashfs_decompressor;
+
+struct squashfs_stream;
+
+struct squashfs_sb_info {
+	const struct squashfs_decompressor *decompressor;
+	int devblksize;
+	int devblksize_log2;
+	struct squashfs_cache *block_cache;
+	struct squashfs_cache *fragment_cache;
+	struct squashfs_cache *read_page;
+	int next_meta_index;
+	__le64 *id_table;
+	__le64 *fragment_index;
+	__le64 *xattr_id_table;
+	struct mutex meta_index_mutex;
+	struct meta_index *meta_index;
+	struct squashfs_stream *stream;
+	__le64 *inode_lookup_table;
+	u64 inode_table;
+	u64 directory_table;
+	u64 xattr_table;
+	unsigned int block_size;
+	short unsigned int block_log;
+	long long int bytes_used;
+	unsigned int inodes;
+	unsigned int fragments;
+	int xattr_ids;
+	unsigned int ids;
+	bool panic_on_errors;
+};
+
+struct squashfs_decompressor {
+	void * (*init)(struct squashfs_sb_info *, void *);
+	void * (*comp_opts)(struct squashfs_sb_info *, void *, int);
+	void (*free)(void *);
+	int (*decompress)(struct squashfs_sb_info *, void *, struct bio *, int, int, struct squashfs_page_actor *);
+	int id;
+	char *name;
+	int supported;
+};
+
+struct squashfs_dir_index {
+	__le32 index;
+	__le32 start_block;
+	__le32 size;
+	unsigned char name[0];
+};
+
+struct squashfs_dir_entry {
+	__le16 offset;
+	__le16 inode_number;
+	__le16 type;
+	__le16 size;
+	char name[0];
+};
+
+struct squashfs_dir_header {
+	__le32 count;
+	__le32 start_block;
+	__le32 inode_number;
+};
+
+struct squashfs_inode_info {
+	u64 start;
+	int offset;
+	u64 xattr;
+	unsigned int xattr_size;
+	int xattr_count;
+	union {
+		struct {
+			u64 fragment_block;
+			int fragment_size;
+			int fragment_offset;
+			u64 block_list_start;
+		};
+		struct {
+			u64 dir_idx_start;
+			int dir_idx_offset;
+			int dir_idx_cnt;
+			int parent;
+		};
+	};
+	struct inode vfs_inode;
+};
+
+struct squashfs_fragment_entry {
+	__le64 start_block;
+	__le32 size;
+	unsigned int unused;
+};
+
+struct squashfs_base_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+};
+
+struct squashfs_ipc_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+};
+
+struct squashfs_lipc_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 xattr;
+};
+
+struct squashfs_dev_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 rdev;
+};
+
+struct squashfs_ldev_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 rdev;
+	__le32 xattr;
+};
+
+struct squashfs_symlink_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 symlink_size;
+	char symlink[0];
+};
+
+struct squashfs_reg_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 start_block;
+	__le32 fragment;
+	__le32 offset;
+	__le32 file_size;
+	__le16 block_list[0];
+};
+
+struct squashfs_lreg_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le64 start_block;
+	__le64 file_size;
+	__le64 sparse;
+	__le32 nlink;
+	__le32 fragment;
+	__le32 offset;
+	__le32 xattr;
+	__le16 block_list[0];
+};
+
+struct squashfs_dir_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 start_block;
+	__le32 nlink;
+	__le16 file_size;
+	__le16 offset;
+	__le32 parent_inode;
+};
+
+struct squashfs_ldir_inode {
+	__le16 inode_type;
+	__le16 mode;
+	__le16 uid;
+	__le16 guid;
+	__le32 mtime;
+	__le32 inode_number;
+	__le32 nlink;
+	__le32 file_size;
+	__le32 start_block;
+	__le32 parent_inode;
+	__le16 i_count;
+	__le16 offset;
+	__le32 xattr;
+	struct squashfs_dir_index index[0];
+};
+
+union squashfs_inode {
+	struct squashfs_base_inode base;
+	struct squashfs_dev_inode dev;
+	struct squashfs_ldev_inode ldev;
+	struct squashfs_symlink_inode symlink;
+	struct squashfs_reg_inode reg;
+	struct squashfs_lreg_inode lreg;
+	struct squashfs_dir_inode dir;
+	struct squashfs_ldir_inode ldir;
+	struct squashfs_ipc_inode ipc;
+	struct squashfs_lipc_inode lipc;
+};
+
+struct squashfs_super_block {
+	__le32 s_magic;
+	__le32 inodes;
+	__le32 mkfs_time;
+	__le32 block_size;
+	__le32 fragments;
+	__le16 compression;
+	__le16 block_log;
+	__le16 flags;
+	__le16 no_ids;
+	__le16 s_major;
+	__le16 s_minor;
+	__le64 root_inode;
+	__le64 bytes_used;
+	__le64 id_table_start;
+	__le64 xattr_id_table_start;
+	__le64 inode_table_start;
+	__le64 directory_table_start;
+	__le64 fragment_table_start;
+	__le64 lookup_table_start;
+};
+
+enum Opt_errors {
+	Opt_errors_continue = 0,
+	Opt_errors_panic = 1,
+};
+
+enum squashfs_param {
+	Opt_errors___2 = 0,
+};
+
+struct squashfs_mount_opts {
+	enum Opt_errors errors;
+};
+
+struct squashfs_stream {
+	void *stream;
+	struct mutex mutex;
+};
+
+struct squashfs_xattr_entry {
+	__le16 type;
+	__le16 size;
+	char data[0];
+};
+
+struct squashfs_xattr_val {
+	__le32 vsize;
+	char value[0];
+};
+
+struct squashfs_xattr_id {
+	__le64 xattr;
+	__le32 count;
+	__le32 size;
+};
+
+struct squashfs_xattr_id_table {
+	__le64 xattr_table_start;
+	__le32 xattr_ids;
+	__le32 unused;
+};
+
+struct lz4_comp_opts {
+	__le32 version;
+	__le32 flags;
+};
+
+struct squashfs_lz4 {
+	void *input;
+	void *output;
+};
+
+struct squashfs_lzo {
+	void *input;
+	void *output;
+};
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+struct xz_dec;
+
+struct squashfs_xz {
+	struct xz_dec *state;
+	struct xz_buf buf;
+};
+
+struct disk_comp_opts {
+	__le32 dictionary_size;
+	__le32 flags;
+};
+
+struct comp_opts {
+	int dict_size;
+};
+
+typedef unsigned char Byte;
+
+typedef long unsigned int uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef struct z_stream_s z_stream;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+struct workspace {
+	void *mem;
+	size_t mem_size;
+	size_t window_size;
+};
+
 struct ramfs_mount_opts {
 	umode_t mode;
 };
@@ -45317,18 +61534,8 @@
 	Opt_uid___3 = 6,
 };
 
-struct getdents_callback___2 {
-	struct dir_context ctx;
-	char *name;
-	u64 ino;
-	int found;
-	int sequence;
-};
-
 typedef u16 wchar_t;
 
-typedef u32 unicode_t;
-
 struct nls_table {
 	const char *charset;
 	const char *alias;
@@ -45340,12 +61547,658 @@
 	struct nls_table *next;
 };
 
+struct fat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	short unsigned int fs_fmask;
+	short unsigned int fs_dmask;
+	short unsigned int codepage;
+	int time_offset;
+	char *iocharset;
+	short unsigned int shortname;
+	unsigned char name_check;
+	unsigned char errors;
+	unsigned char nfs;
+	short unsigned int allow_utime;
+	unsigned int quiet: 1;
+	unsigned int showexec: 1;
+	unsigned int sys_immutable: 1;
+	unsigned int dotsOK: 1;
+	unsigned int isvfat: 1;
+	unsigned int utf8: 1;
+	unsigned int unicode_xlate: 1;
+	unsigned int numtail: 1;
+	unsigned int flush: 1;
+	unsigned int nocase: 1;
+	unsigned int usefree: 1;
+	unsigned int tz_set: 1;
+	unsigned int rodir: 1;
+	unsigned int discard: 1;
+	unsigned int dos1xfloppy: 1;
+};
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+	short unsigned int sec_per_clus;
+	short unsigned int cluster_bits;
+	unsigned int cluster_size;
+	unsigned char fats;
+	unsigned char fat_bits;
+	short unsigned int fat_start;
+	long unsigned int fat_length;
+	long unsigned int dir_start;
+	short unsigned int dir_entries;
+	long unsigned int data_start;
+	long unsigned int max_cluster;
+	long unsigned int root_cluster;
+	long unsigned int fsinfo_sector;
+	struct mutex fat_lock;
+	struct mutex nfs_build_inode_lock;
+	struct mutex s_lock;
+	unsigned int prev_free;
+	unsigned int free_clusters;
+	unsigned int free_clus_valid;
+	struct fat_mount_options options;
+	struct nls_table *nls_disk;
+	struct nls_table *nls_io;
+	const void *dir_ops;
+	int dir_per_block;
+	int dir_per_block_bits;
+	unsigned int vol_id;
+	int fatent_shift;
+	const struct fatent_operations *fatent_ops;
+	struct inode *fat_inode;
+	struct inode *fsinfo_inode;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+	spinlock_t dir_hash_lock;
+	struct hlist_head dir_hashtable[256];
+	unsigned int dirty;
+	struct callback_head rcu;
+};
+
+struct fat_entry;
+
+struct fatent_operations {
+	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
+	void (*ent_set_ptr)(struct fat_entry *, int);
+	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
+	int (*ent_get)(struct fat_entry *);
+	void (*ent_put)(struct fat_entry *, int);
+	int (*ent_next)(struct fat_entry *);
+};
+
+struct msdos_inode_info {
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t mmu_private;
+	int i_start;
+	int i_logstart;
+	int i_attrs;
+	loff_t i_pos;
+	struct hlist_node i_fat_hash;
+	struct hlist_node i_dir_hash;
+	struct rw_semaphore truncate_lock;
+	struct timespec64 i_crtime;
+	struct inode vfs_inode;
+};
+
+struct fat_entry {
+	int entry;
+	union {
+		u8 *ent12_p[2];
+		__le16 *ent16_p;
+		__le32 *ent32_p;
+	} u;
+	int nr_bhs;
+	struct buffer_head *bhs[2];
+	struct inode *fat_inode;
+};
+
+struct fat_cache {
+	struct list_head cache_list;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct fat_cache_id {
+	unsigned int id;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct compat_dirent {
+	u32 d_ino;
+	compat_off_t d_off;
+	u16 d_reclen;
+	char d_name[256];
+};
+
 enum utf16_endian {
 	UTF16_HOST_ENDIAN = 0,
 	UTF16_LITTLE_ENDIAN = 1,
 	UTF16_BIG_ENDIAN = 2,
 };
 
+struct __fat_dirent {
+	long int d_ino;
+	__kernel_off_t d_off;
+	short unsigned int d_reclen;
+	char d_name[256];
+};
+
+struct msdos_dir_entry {
+	__u8 name[11];
+	__u8 attr;
+	__u8 lcase;
+	__u8 ctime_cs;
+	__le16 ctime;
+	__le16 cdate;
+	__le16 adate;
+	__le16 starthi;
+	__le16 time;
+	__le16 date;
+	__le16 start;
+	__le32 size;
+};
+
+struct msdos_dir_slot {
+	__u8 id;
+	__u8 name0_4[10];
+	__u8 attr;
+	__u8 reserved;
+	__u8 alias_checksum;
+	__u8 name5_10[12];
+	__le16 start;
+	__u8 name11_12[4];
+};
+
+struct fat_slot_info {
+	loff_t i_pos;
+	loff_t slot_off;
+	int nr_slots;
+	struct msdos_dir_entry *de;
+	struct buffer_head *bh;
+};
+
+typedef long long unsigned int llu;
+
+enum {
+	PARSE_INVALID = 1,
+	PARSE_NOT_LONGNAME = 2,
+	PARSE_EOF = 3,
+};
+
+struct fat_ioctl_filldir_callback {
+	struct dir_context ctx;
+	void *dirent;
+	int result;
+	const char *longname;
+	int long_len;
+	const char *shortname;
+	int short_len;
+};
+
+struct fatent_ra {
+	sector_t cur;
+	sector_t limit;
+	unsigned int ra_blocks;
+	sector_t ra_advance;
+	sector_t ra_next;
+	sector_t ra_limit;
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct fat_boot_fsinfo {
+	__le32 signature1;
+	__le32 reserved1[120];
+	__le32 signature2;
+	__le32 free_clusters;
+	__le32 next_cluster;
+	__le32 reserved2[4];
+};
+
+struct fat_bios_param_block {
+	u16 fat_sector_size;
+	u8 fat_sec_per_clus;
+	u16 fat_reserved;
+	u8 fat_fats;
+	u16 fat_dir_entries;
+	u16 fat_sectors;
+	u16 fat_fat_length;
+	u32 fat_total_sect;
+	u8 fat16_state;
+	u32 fat16_vol_id;
+	u32 fat32_length;
+	u32 fat32_root_cluster;
+	u16 fat32_info_sector;
+	u8 fat32_state;
+	u32 fat32_vol_id;
+};
+
+struct fat_floppy_defaults {
+	unsigned int nr_sectors;
+	unsigned int sec_per_clus;
+	unsigned int dir_entries;
+	unsigned int media;
+	unsigned int fat_length;
+};
+
+enum {
+	Opt_check_n = 0,
+	Opt_check_r = 1,
+	Opt_check_s = 2,
+	Opt_uid___4 = 3,
+	Opt_gid___5 = 4,
+	Opt_umask = 5,
+	Opt_dmask = 6,
+	Opt_fmask = 7,
+	Opt_allow_utime = 8,
+	Opt_codepage = 9,
+	Opt_usefree = 10,
+	Opt_nocase = 11,
+	Opt_quiet = 12,
+	Opt_showexec = 13,
+	Opt_debug___2 = 14,
+	Opt_immutable = 15,
+	Opt_dots = 16,
+	Opt_nodots = 17,
+	Opt_charset = 18,
+	Opt_shortname_lower = 19,
+	Opt_shortname_win95 = 20,
+	Opt_shortname_winnt = 21,
+	Opt_shortname_mixed = 22,
+	Opt_utf8_no = 23,
+	Opt_utf8_yes = 24,
+	Opt_uni_xl_no = 25,
+	Opt_uni_xl_yes = 26,
+	Opt_nonumtail_no = 27,
+	Opt_nonumtail_yes = 28,
+	Opt_obsolete = 29,
+	Opt_flush = 30,
+	Opt_tz_utc = 31,
+	Opt_rodir = 32,
+	Opt_err_cont = 33,
+	Opt_err_panic = 34,
+	Opt_err_ro = 35,
+	Opt_discard___2 = 36,
+	Opt_nfs = 37,
+	Opt_time_offset = 38,
+	Opt_nfs_stale_rw = 39,
+	Opt_nfs_nostale_ro = 40,
+	Opt_err___3 = 41,
+	Opt_dos1xfloppy = 42,
+};
+
+struct fat_fid {
+	u32 i_gen;
+	u32 i_pos_low;
+	u16 i_pos_hi;
+	u16 parent_i_pos_hi;
+	u32 parent_i_pos_low;
+	u32 parent_i_gen;
+};
+
+struct shortname_info {
+	unsigned char lower: 1;
+	unsigned char upper: 1;
+	unsigned char valid: 1;
+};
+
+struct ecryptfs_mount_crypt_stat;
+
+struct ecryptfs_crypt_stat {
+	u32 flags;
+	unsigned int file_version;
+	size_t iv_bytes;
+	size_t metadata_size;
+	size_t extent_size;
+	size_t key_size;
+	size_t extent_shift;
+	unsigned int extent_mask;
+	struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
+	struct crypto_skcipher *tfm;
+	struct crypto_shash *hash_tfm;
+	unsigned char cipher[32];
+	unsigned char key[64];
+	unsigned char root_iv[16];
+	struct list_head keysig_list;
+	struct mutex keysig_list_mutex;
+	struct mutex cs_tfm_mutex;
+	struct mutex cs_mutex;
+};
+
+struct ecryptfs_mount_crypt_stat {
+	u32 flags;
+	struct list_head global_auth_tok_list;
+	struct mutex global_auth_tok_list_mutex;
+	size_t global_default_cipher_key_size;
+	size_t global_default_fn_cipher_key_bytes;
+	unsigned char global_default_cipher_name[32];
+	unsigned char global_default_fn_cipher_name[32];
+	char global_default_fnek_sig[17];
+};
+
+struct ecryptfs_inode_info {
+	struct inode vfs_inode;
+	struct inode *wii_inode;
+	struct mutex lower_file_mutex;
+	atomic_t lower_file_count;
+	struct file *lower_file;
+	struct ecryptfs_crypt_stat crypt_stat;
+};
+
+struct ecryptfs_dentry_info {
+	struct path lower_path;
+	struct callback_head rcu;
+};
+
+struct ecryptfs_sb_info {
+	struct super_block *wsi_sb;
+	struct ecryptfs_mount_crypt_stat mount_crypt_stat;
+};
+
+struct ecryptfs_file_info {
+	struct file *wfi_file;
+	struct ecryptfs_crypt_stat *crypt_stat;
+};
+
+struct ecryptfs_getdents_callback {
+	struct dir_context ctx;
+	struct dir_context *caller;
+	struct super_block *sb;
+	int filldir_called;
+	int entries_written;
+};
+
+struct ecryptfs_session_key {
+	u32 flags;
+	u32 encrypted_key_size;
+	u32 decrypted_key_size;
+	u8 encrypted_key[512];
+	u8 decrypted_key[64];
+};
+
+struct ecryptfs_password {
+	u32 password_bytes;
+	s32 hash_algo;
+	u32 hash_iterations;
+	u32 session_key_encryption_key_bytes;
+	u32 flags;
+	u8 session_key_encryption_key[64];
+	u8 signature[17];
+	u8 salt[8];
+};
+
+struct ecryptfs_private_key {
+	u32 key_size;
+	u32 data_len;
+	u8 signature[17];
+	char pki_type[17];
+	u8 data[0];
+};
+
+struct ecryptfs_auth_tok {
+	u16 version;
+	u16 token_type;
+	u32 flags;
+	struct ecryptfs_session_key session_key;
+	u8 reserved[32];
+	union {
+		struct ecryptfs_password password;
+		struct ecryptfs_private_key private_key;
+	} token;
+};
+
+struct ecryptfs_global_auth_tok {
+	u32 flags;
+	struct list_head mount_crypt_stat_list;
+	struct key *global_auth_tok_key;
+	unsigned char sig[17];
+};
+
+enum {
+	ecryptfs_opt_sig = 0,
+	ecryptfs_opt_ecryptfs_sig = 1,
+	ecryptfs_opt_cipher = 2,
+	ecryptfs_opt_ecryptfs_cipher = 3,
+	ecryptfs_opt_ecryptfs_key_bytes = 4,
+	ecryptfs_opt_passthrough = 5,
+	ecryptfs_opt_xattr_metadata = 6,
+	ecryptfs_opt_encrypted_view = 7,
+	ecryptfs_opt_fnek_sig = 8,
+	ecryptfs_opt_fn_cipher = 9,
+	ecryptfs_opt_fn_cipher_key_bytes = 10,
+	ecryptfs_opt_unlink_sigs = 11,
+	ecryptfs_opt_mount_auth_tok_only = 12,
+	ecryptfs_opt_check_dev_ruid = 13,
+	ecryptfs_opt_err = 14,
+};
+
+struct ecryptfs_cache_info {
+	struct kmem_cache **cache;
+	const char *name;
+	size_t size;
+	slab_flags_t flags;
+	void (*ctor)(void *);
+};
+
+struct ecryptfs_key_sig {
+	struct list_head crypt_stat_list;
+	char keysig[17];
+};
+
+struct ecryptfs_filename {
+	struct list_head crypt_stat_list;
+	u32 flags;
+	u32 seq_no;
+	char *filename;
+	char *encrypted_filename;
+	size_t filename_size;
+	size_t encrypted_filename_size;
+	char fnek_sig[16];
+	char dentry_name[57];
+};
+
+struct ecryptfs_key_tfm {
+	struct crypto_skcipher *key_tfm;
+	size_t key_size;
+	struct mutex key_tfm_mutex;
+	struct list_head key_tfm_list;
+	unsigned char cipher_name[32];
+};
+
+struct extent_crypt_result {
+	struct completion completion;
+	int rc;
+};
+
+struct ecryptfs_flag_map_elem {
+	u32 file_flag;
+	u32 local_flag;
+};
+
+struct ecryptfs_cipher_code_str_map_elem {
+	char cipher_str[16];
+	u8 cipher_code;
+};
+
+struct encrypted_key_payload {
+	struct callback_head rcu;
+	char *format;
+	char *master_desc;
+	char *datalen;
+	u8 *iv;
+	u8 *encrypted_data;
+	short unsigned int datablob_len;
+	short unsigned int decrypted_datalen;
+	short unsigned int payload_datalen;
+	short unsigned int encrypted_key_format;
+	u8 *decrypted_data;
+	u8 payload_data[0];
+};
+
+enum ecryptfs_token_types {
+	ECRYPTFS_PASSWORD = 0,
+	ECRYPTFS_PRIVATE_KEY = 1,
+};
+
+struct ecryptfs_key_record {
+	unsigned char type;
+	size_t enc_key_size;
+	unsigned char sig[8];
+	unsigned char enc_key[512];
+};
+
+struct ecryptfs_auth_tok_list_item {
+	unsigned char encrypted_session_key[64];
+	struct list_head list;
+	struct ecryptfs_auth_tok auth_tok;
+};
+
+struct ecryptfs_message {
+	u32 index;
+	u32 data_len;
+	u8 data[0];
+};
+
+struct ecryptfs_msg_ctx {
+	u8 state;
+	u8 type;
+	u32 index;
+	u32 counter;
+	size_t msg_size;
+	struct ecryptfs_message *msg;
+	struct task_struct *task;
+	struct list_head node;
+	struct list_head daemon_out_list;
+	struct mutex mux;
+};
+
+struct ecryptfs_write_tag_70_packet_silly_stack {
+	u8 cipher_code;
+	size_t max_packet_size;
+	size_t packet_size_len;
+	size_t block_aligned_filename_size;
+	size_t block_size;
+	size_t i;
+	size_t j;
+	size_t num_rand_bytes;
+	struct mutex *tfm_mutex;
+	char *block_aligned_filename;
+	struct ecryptfs_auth_tok *auth_tok;
+	struct scatterlist src_sg[2];
+	struct scatterlist dst_sg[2];
+	struct crypto_skcipher *skcipher_tfm;
+	struct skcipher_request *skcipher_req;
+	char iv[16];
+	char hash[16];
+	char tmp_hash[16];
+	struct crypto_shash *hash_tfm;
+	struct shash_desc *hash_desc;
+};
+
+struct ecryptfs_parse_tag_70_packet_silly_stack {
+	u8 cipher_code;
+	size_t max_packet_size;
+	size_t packet_size_len;
+	size_t parsed_tag_70_packet_size;
+	size_t block_aligned_filename_size;
+	size_t block_size;
+	size_t i;
+	struct mutex *tfm_mutex;
+	char *decrypted_filename;
+	struct ecryptfs_auth_tok *auth_tok;
+	struct scatterlist src_sg[2];
+	struct scatterlist dst_sg[2];
+	struct crypto_skcipher *skcipher_tfm;
+	struct skcipher_request *skcipher_req;
+	char fnek_sig_hex[17];
+	char iv[16];
+	char cipher_string[32];
+};
+
+struct ecryptfs_open_req {
+	struct file **lower_file;
+	struct path path;
+	struct completion done;
+	struct list_head kthread_ctl_list;
+};
+
+struct ecryptfs_kthread_ctl {
+	u32 flags;
+	struct mutex mux;
+	struct list_head req_list;
+	wait_queue_head_t wait;
+};
+
+struct ecryptfs_daemon {
+	u32 flags;
+	u32 num_queued_msg_ctx;
+	struct file *file;
+	struct mutex mux;
+	struct list_head msg_ctx_out_queue;
+	wait_queue_head_t wait;
+	struct hlist_node euid_chain;
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+typedef u32 unicode_t;
+
 struct utf8_table {
 	int cmask;
 	int cval;
@@ -45354,10 +62207,9 @@
 	long int lval;
 };
 
-struct utf8data;
-
 struct utf8cursor {
-	const struct utf8data *data;
+	const struct unicode_map *um;
+	enum utf8_normalization n;
 	const char *s;
 	const char *p;
 	const char *ss;
@@ -45369,15 +62221,964 @@
 	unsigned char hangul[12];
 };
 
-struct utf8data {
-	unsigned int maxage;
-	unsigned int offset;
-};
-
 typedef const unsigned char utf8trie_t;
 
 typedef const unsigned char utf8leaf_t;
 
+enum fuse_opcode {
+	FUSE_LOOKUP = 1,
+	FUSE_FORGET = 2,
+	FUSE_GETATTR = 3,
+	FUSE_SETATTR = 4,
+	FUSE_READLINK = 5,
+	FUSE_SYMLINK = 6,
+	FUSE_MKNOD = 8,
+	FUSE_MKDIR = 9,
+	FUSE_UNLINK = 10,
+	FUSE_RMDIR = 11,
+	FUSE_RENAME = 12,
+	FUSE_LINK = 13,
+	FUSE_OPEN = 14,
+	FUSE_READ = 15,
+	FUSE_WRITE = 16,
+	FUSE_STATFS = 17,
+	FUSE_RELEASE = 18,
+	FUSE_FSYNC = 20,
+	FUSE_SETXATTR = 21,
+	FUSE_GETXATTR = 22,
+	FUSE_LISTXATTR = 23,
+	FUSE_REMOVEXATTR = 24,
+	FUSE_FLUSH = 25,
+	FUSE_INIT = 26,
+	FUSE_OPENDIR = 27,
+	FUSE_READDIR = 28,
+	FUSE_RELEASEDIR = 29,
+	FUSE_FSYNCDIR = 30,
+	FUSE_GETLK = 31,
+	FUSE_SETLK = 32,
+	FUSE_SETLKW = 33,
+	FUSE_ACCESS = 34,
+	FUSE_CREATE = 35,
+	FUSE_INTERRUPT = 36,
+	FUSE_BMAP = 37,
+	FUSE_DESTROY = 38,
+	FUSE_IOCTL = 39,
+	FUSE_POLL = 40,
+	FUSE_NOTIFY_REPLY = 41,
+	FUSE_BATCH_FORGET = 42,
+	FUSE_FALLOCATE = 43,
+	FUSE_READDIRPLUS = 44,
+	FUSE_RENAME2 = 45,
+	FUSE_LSEEK = 46,
+	FUSE_COPY_FILE_RANGE = 47,
+	FUSE_SETUPMAPPING = 48,
+	FUSE_REMOVEMAPPING = 49,
+	FUSE_SYNCFS = 50,
+	CUSE_INIT = 4096,
+	CUSE_INIT_BSWAP_RESERVED = 1048576,
+	FUSE_INIT_BSWAP_RESERVED = 436207616,
+};
+
+enum fuse_notify_code {
+	FUSE_NOTIFY_POLL = 1,
+	FUSE_NOTIFY_INVAL_INODE = 2,
+	FUSE_NOTIFY_INVAL_ENTRY = 3,
+	FUSE_NOTIFY_STORE = 4,
+	FUSE_NOTIFY_RETRIEVE = 5,
+	FUSE_NOTIFY_DELETE = 6,
+	FUSE_NOTIFY_CODE_MAX = 7,
+};
+
+struct fuse_forget_in {
+	uint64_t nlookup;
+};
+
+struct fuse_forget_one {
+	uint64_t nodeid;
+	uint64_t nlookup;
+};
+
+struct fuse_batch_forget_in {
+	uint32_t count;
+	uint32_t dummy;
+};
+
+struct fuse_interrupt_in {
+	uint64_t unique;
+};
+
+struct fuse_notify_poll_wakeup_out {
+	uint64_t kh;
+};
+
+struct fuse_in_header {
+	uint32_t len;
+	uint32_t opcode;
+	uint64_t unique;
+	uint64_t nodeid;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t pid;
+	uint32_t padding;
+};
+
+struct fuse_out_header {
+	uint32_t len;
+	int32_t error;
+	uint64_t unique;
+};
+
+struct fuse_notify_inval_inode_out {
+	uint64_t ino;
+	int64_t off;
+	int64_t len;
+};
+
+struct fuse_notify_inval_entry_out {
+	uint64_t parent;
+	uint32_t namelen;
+	uint32_t padding;
+};
+
+struct fuse_notify_delete_out {
+	uint64_t parent;
+	uint64_t child;
+	uint32_t namelen;
+	uint32_t padding;
+};
+
+struct fuse_notify_store_out {
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_notify_retrieve_out {
+	uint64_t notify_unique;
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_notify_retrieve_in {
+	uint64_t dummy1;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t dummy2;
+	uint64_t dummy3;
+	uint64_t dummy4;
+};
+
+struct fuse_forget_link {
+	struct fuse_forget_one forget_one;
+	struct fuse_forget_link *next;
+};
+
+struct fuse_mount;
+
+struct fuse_release_args;
+
+struct fuse_file {
+	struct fuse_mount *fm;
+	struct fuse_release_args *release_args;
+	u64 kh;
+	u64 fh;
+	u64 nodeid;
+	refcount_t count;
+	u32 open_flags;
+	struct list_head write_entry;
+	struct {
+		struct mutex lock;
+		loff_t pos;
+		loff_t cache_off;
+		u64 version;
+	} readdir;
+	struct rb_node polled_node;
+	wait_queue_head_t poll_wait;
+	bool flock: 1;
+};
+
+struct fuse_conn;
+
+struct fuse_mount {
+	struct fuse_conn *fc;
+	struct super_block *sb;
+	struct list_head fc_entry;
+};
+
+struct fuse_in_arg {
+	unsigned int size;
+	const void *value;
+};
+
+struct fuse_arg {
+	unsigned int size;
+	void *value;
+};
+
+struct fuse_page_desc {
+	unsigned int length;
+	unsigned int offset;
+};
+
+struct fuse_args {
+	uint64_t nodeid;
+	uint32_t opcode;
+	short unsigned int in_numargs;
+	short unsigned int out_numargs;
+	bool force: 1;
+	bool noreply: 1;
+	bool nocreds: 1;
+	bool in_pages: 1;
+	bool out_pages: 1;
+	bool user_pages: 1;
+	bool out_argvar: 1;
+	bool page_zeroing: 1;
+	bool page_replace: 1;
+	bool may_block: 1;
+	struct fuse_in_arg in_args[3];
+	struct fuse_arg out_args[2];
+	void (*end)(struct fuse_mount *, struct fuse_args *, int);
+};
+
+struct fuse_args_pages {
+	struct fuse_args args;
+	struct page **pages;
+	struct fuse_page_desc *descs;
+	unsigned int num_pages;
+};
+
+enum fuse_req_flag {
+	FR_ISREPLY = 0,
+	FR_FORCE = 1,
+	FR_BACKGROUND = 2,
+	FR_WAITING = 3,
+	FR_ABORTED = 4,
+	FR_INTERRUPTED = 5,
+	FR_LOCKED = 6,
+	FR_PENDING = 7,
+	FR_SENT = 8,
+	FR_FINISHED = 9,
+	FR_PRIVATE = 10,
+	FR_ASYNC = 11,
+};
+
+struct fuse_req {
+	struct list_head list;
+	struct list_head intr_entry;
+	struct fuse_args *args;
+	refcount_t count;
+	long unsigned int flags;
+	struct {
+		struct fuse_in_header h;
+	} in;
+	struct {
+		struct fuse_out_header h;
+	} out;
+	wait_queue_head_t waitq;
+	void *argbuf;
+	struct fuse_mount *fm;
+};
+
+struct fuse_iqueue;
+
+struct fuse_iqueue_ops {
+	void (*wake_forget_and_unlock)(struct fuse_iqueue *);
+	void (*wake_interrupt_and_unlock)(struct fuse_iqueue *);
+	void (*wake_pending_and_unlock)(struct fuse_iqueue *);
+	void (*release)(struct fuse_iqueue *);
+};
+
+struct fuse_iqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	wait_queue_head_t waitq;
+	u64 reqctr;
+	struct list_head pending;
+	struct list_head interrupts;
+	struct fuse_forget_link forget_list_head;
+	struct fuse_forget_link *forget_list_tail;
+	int forget_batch;
+	struct fasync_struct *fasync;
+	const struct fuse_iqueue_ops *ops;
+	void *priv;
+};
+
+struct fuse_pqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	struct list_head *processing;
+	struct list_head io;
+};
+
+struct fuse_dev {
+	struct fuse_conn *fc;
+	struct fuse_pqueue pq;
+	struct list_head entry;
+};
+
+enum fuse_dax_mode {
+	FUSE_DAX_INODE_DEFAULT = 0,
+	FUSE_DAX_ALWAYS = 1,
+	FUSE_DAX_NEVER = 2,
+	FUSE_DAX_INODE_USER = 3,
+};
+
+struct fuse_conn_dax;
+
+struct fuse_sync_bucket;
+
+struct fuse_conn {
+	spinlock_t lock;
+	refcount_t count;
+	atomic_t dev_count;
+	struct callback_head rcu;
+	kuid_t user_id;
+	kgid_t group_id;
+	struct pid_namespace *pid_ns;
+	struct user_namespace *user_ns;
+	unsigned int max_read;
+	unsigned int max_write;
+	unsigned int max_pages;
+	unsigned int max_pages_limit;
+	struct fuse_iqueue iq;
+	atomic64_t khctr;
+	struct rb_root polled_files;
+	unsigned int max_background;
+	unsigned int congestion_threshold;
+	unsigned int num_background;
+	unsigned int active_background;
+	struct list_head bg_queue;
+	spinlock_t bg_lock;
+	int initialized;
+	int blocked;
+	wait_queue_head_t blocked_waitq;
+	unsigned int connected;
+	bool aborted;
+	unsigned int conn_error: 1;
+	unsigned int conn_init: 1;
+	unsigned int async_read: 1;
+	unsigned int abort_err: 1;
+	unsigned int atomic_o_trunc: 1;
+	unsigned int export_support: 1;
+	unsigned int writeback_cache: 1;
+	unsigned int parallel_dirops: 1;
+	unsigned int handle_killpriv: 1;
+	unsigned int cache_symlinks: 1;
+	unsigned int legacy_opts_show: 1;
+	unsigned int handle_killpriv_v2: 1;
+	unsigned int no_open: 1;
+	unsigned int no_opendir: 1;
+	unsigned int no_fsync: 1;
+	unsigned int no_fsyncdir: 1;
+	unsigned int no_flush: 1;
+	unsigned int no_setxattr: 1;
+	unsigned int setxattr_ext: 1;
+	unsigned int no_getxattr: 1;
+	unsigned int no_listxattr: 1;
+	unsigned int no_removexattr: 1;
+	unsigned int no_lock: 1;
+	unsigned int no_access: 1;
+	unsigned int no_create: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int no_bmap: 1;
+	unsigned int no_poll: 1;
+	unsigned int big_writes: 1;
+	unsigned int dont_mask: 1;
+	unsigned int no_flock: 1;
+	unsigned int no_fallocate: 1;
+	unsigned int no_rename2: 1;
+	unsigned int auto_inval_data: 1;
+	unsigned int explicit_inval_data: 1;
+	unsigned int do_readdirplus: 1;
+	unsigned int readdirplus_auto: 1;
+	unsigned int async_dio: 1;
+	unsigned int no_lseek: 1;
+	unsigned int posix_acl: 1;
+	unsigned int default_permissions: 1;
+	unsigned int allow_other: 1;
+	unsigned int no_copy_file_range: 1;
+	unsigned int destroy: 1;
+	unsigned int delete_stale: 1;
+	unsigned int no_control: 1;
+	unsigned int no_force_umount: 1;
+	unsigned int auto_submounts: 1;
+	unsigned int sync_fs: 1;
+	unsigned int init_security: 1;
+	unsigned int inode_dax: 1;
+	atomic_t num_waiting;
+	unsigned int minor;
+	struct list_head entry;
+	dev_t dev;
+	struct dentry *ctl_dentry[5];
+	int ctl_ndents;
+	u32 scramble_key[4];
+	atomic64_t attr_version;
+	void (*release)(struct fuse_conn *);
+	struct rw_semaphore killsb;
+	struct list_head devices;
+	enum fuse_dax_mode dax_mode;
+	struct fuse_conn_dax *dax;
+	struct list_head mounts;
+	struct fuse_sync_bucket *curr_bucket;
+};
+
+struct fuse_sync_bucket {
+	atomic_t count;
+	wait_queue_head_t waitq;
+	struct callback_head rcu;
+};
+
+struct fuse_copy_state {
+	int write;
+	struct fuse_req *req;
+	struct iov_iter *iter;
+	struct pipe_buffer *pipebufs;
+	struct pipe_buffer *currbuf;
+	struct pipe_inode_info *pipe;
+	long unsigned int nr_segs;
+	struct page *pg;
+	unsigned int len;
+	unsigned int offset;
+	unsigned int move_pages: 1;
+};
+
+struct fuse_retrieve_args {
+	struct fuse_args_pages ap;
+	struct fuse_notify_retrieve_in inarg;
+};
+
+struct fuse_attr {
+	uint64_t ino;
+	uint64_t size;
+	uint64_t blocks;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t nlink;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t rdev;
+	uint32_t blksize;
+	uint32_t flags;
+};
+
+struct fuse_entry_out {
+	uint64_t nodeid;
+	uint64_t generation;
+	uint64_t entry_valid;
+	uint64_t attr_valid;
+	uint32_t entry_valid_nsec;
+	uint32_t attr_valid_nsec;
+	struct fuse_attr attr;
+};
+
+struct fuse_getattr_in {
+	uint32_t getattr_flags;
+	uint32_t dummy;
+	uint64_t fh;
+};
+
+struct fuse_attr_out {
+	uint64_t attr_valid;
+	uint32_t attr_valid_nsec;
+	uint32_t dummy;
+	struct fuse_attr attr;
+};
+
+struct fuse_mknod_in {
+	uint32_t mode;
+	uint32_t rdev;
+	uint32_t umask;
+	uint32_t padding;
+};
+
+struct fuse_mkdir_in {
+	uint32_t mode;
+	uint32_t umask;
+};
+
+struct fuse_rename2_in {
+	uint64_t newdir;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_link_in {
+	uint64_t oldnodeid;
+};
+
+struct fuse_setattr_in {
+	uint32_t valid;
+	uint32_t padding;
+	uint64_t fh;
+	uint64_t size;
+	uint64_t lock_owner;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t unused4;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t unused5;
+};
+
+struct fuse_create_in {
+	uint32_t flags;
+	uint32_t mode;
+	uint32_t umask;
+	uint32_t open_flags;
+};
+
+struct fuse_open_out {
+	uint64_t fh;
+	uint32_t open_flags;
+	uint32_t padding;
+};
+
+struct fuse_access_in {
+	uint32_t mask;
+	uint32_t padding;
+};
+
+struct fuse_secctx {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_secctx_header {
+	uint32_t size;
+	uint32_t nr_secctx;
+};
+
+struct fuse_inode_dax;
+
+struct fuse_inode {
+	struct inode inode;
+	u64 nodeid;
+	u64 nlookup;
+	struct fuse_forget_link *forget;
+	u64 i_time;
+	u32 inval_mask;
+	umode_t orig_i_mode;
+	u64 orig_ino;
+	u64 attr_version;
+	union {
+		struct {
+			struct list_head write_files;
+			struct list_head queued_writes;
+			int writectr;
+			wait_queue_head_t page_waitq;
+			struct rb_root writepages;
+		};
+		struct {
+			bool cached;
+			loff_t size;
+			loff_t pos;
+			u64 version;
+			struct timespec64 mtime;
+			u64 iversion;
+			spinlock_t lock;
+		} rdc;
+	};
+	long unsigned int state;
+	struct mutex mutex;
+	spinlock_t lock;
+	struct fuse_inode_dax *dax;
+};
+
+enum {
+	FUSE_I_ADVISE_RDPLUS = 0,
+	FUSE_I_INIT_RDPLUS = 1,
+	FUSE_I_SIZE_UNSTABLE = 2,
+	FUSE_I_BAD = 3,
+};
+
+struct fuse_file_lock {
+	uint64_t start;
+	uint64_t end;
+	uint32_t type;
+	uint32_t pid;
+};
+
+struct fuse_open_in {
+	uint32_t flags;
+	uint32_t open_flags;
+};
+
+struct fuse_release_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t release_flags;
+	uint64_t lock_owner;
+};
+
+struct fuse_flush_in {
+	uint64_t fh;
+	uint32_t unused;
+	uint32_t padding;
+	uint64_t lock_owner;
+};
+
+struct fuse_read_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t read_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t write_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_fsync_in {
+	uint64_t fh;
+	uint32_t fsync_flags;
+	uint32_t padding;
+};
+
+struct fuse_lk_in {
+	uint64_t fh;
+	uint64_t owner;
+	struct fuse_file_lock lk;
+	uint32_t lk_flags;
+	uint32_t padding;
+};
+
+struct fuse_lk_out {
+	struct fuse_file_lock lk;
+};
+
+struct fuse_bmap_in {
+	uint64_t block;
+	uint32_t blocksize;
+	uint32_t padding;
+};
+
+struct fuse_bmap_out {
+	uint64_t block;
+};
+
+struct fuse_poll_in {
+	uint64_t fh;
+	uint64_t kh;
+	uint32_t flags;
+	uint32_t events;
+};
+
+struct fuse_poll_out {
+	uint32_t revents;
+	uint32_t padding;
+};
+
+struct fuse_fallocate_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint64_t length;
+	uint32_t mode;
+	uint32_t padding;
+};
+
+struct fuse_lseek_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t whence;
+	uint32_t padding;
+};
+
+struct fuse_lseek_out {
+	uint64_t offset;
+};
+
+struct fuse_copy_file_range_in {
+	uint64_t fh_in;
+	uint64_t off_in;
+	uint64_t nodeid_out;
+	uint64_t fh_out;
+	uint64_t off_out;
+	uint64_t len;
+	uint64_t flags;
+};
+
+struct fuse_release_args {
+	struct fuse_args args;
+	struct fuse_release_in inarg;
+	struct inode *inode;
+};
+
+struct fuse_io_priv {
+	struct kref refcnt;
+	int async;
+	spinlock_t lock;
+	unsigned int reqs;
+	ssize_t bytes;
+	size_t size;
+	__u64 offset;
+	bool write;
+	bool should_dirty;
+	int err;
+	struct kiocb *iocb;
+	struct completion *done;
+	bool blocking;
+};
+
+struct fuse_io_args {
+	union {
+		struct {
+			struct fuse_read_in in;
+			u64 attr_ver;
+		} read;
+		struct {
+			struct fuse_write_in in;
+			struct fuse_write_out out;
+			bool page_locked;
+		} write;
+	};
+	struct fuse_args_pages ap;
+	struct fuse_io_priv *io;
+	struct fuse_file *ff;
+};
+
+struct fuse_writepage_args {
+	struct fuse_io_args ia;
+	struct rb_node writepages_entry;
+	struct list_head queue_entry;
+	struct fuse_writepage_args *next;
+	struct inode *inode;
+	struct fuse_sync_bucket *bucket;
+};
+
+struct fuse_fill_wb_data {
+	struct fuse_writepage_args *wpa;
+	struct fuse_file *ff;
+	struct inode *inode;
+	struct page **orig_pages;
+	unsigned int max_pages;
+};
+
+struct fuse_kstatfs {
+	uint64_t blocks;
+	uint64_t bfree;
+	uint64_t bavail;
+	uint64_t files;
+	uint64_t ffree;
+	uint32_t bsize;
+	uint32_t namelen;
+	uint32_t frsize;
+	uint32_t padding;
+	uint32_t spare[6];
+};
+
+struct fuse_statfs_out {
+	struct fuse_kstatfs st;
+};
+
+struct fuse_init_in {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint32_t flags2;
+	uint32_t unused[11];
+};
+
+struct fuse_init_out {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint16_t max_background;
+	uint16_t congestion_threshold;
+	uint32_t max_write;
+	uint32_t time_gran;
+	uint16_t max_pages;
+	uint16_t map_alignment;
+	uint32_t flags2;
+	uint32_t unused[7];
+};
+
+struct fuse_syncfs_in {
+	uint64_t padding;
+};
+
+struct fuse_fs_context {
+	int fd;
+	struct file *file;
+	unsigned int rootmode;
+	kuid_t user_id;
+	kgid_t group_id;
+	bool is_bdev: 1;
+	bool fd_present: 1;
+	bool rootmode_present: 1;
+	bool user_id_present: 1;
+	bool group_id_present: 1;
+	bool default_permissions: 1;
+	bool allow_other: 1;
+	bool destroy: 1;
+	bool no_control: 1;
+	bool no_force_umount: 1;
+	bool legacy_opts_show: 1;
+	enum fuse_dax_mode dax_mode;
+	unsigned int max_read;
+	unsigned int blksize;
+	const char *subtype;
+	struct dax_device *dax_dev;
+	void **fudptr;
+};
+
+enum {
+	OPT_SOURCE = 0,
+	OPT_SUBTYPE = 1,
+	OPT_FD = 2,
+	OPT_ROOTMODE = 3,
+	OPT_USER_ID = 4,
+	OPT_GROUP_ID = 5,
+	OPT_DEFAULT_PERMISSIONS = 6,
+	OPT_ALLOW_OTHER = 7,
+	OPT_MAX_READ = 8,
+	OPT_BLKSIZE = 9,
+	OPT_ERR = 10,
+};
+
+struct fuse_inode_handle {
+	u64 nodeid;
+	u32 generation;
+};
+
+struct fuse_init_args {
+	struct fuse_args args;
+	struct fuse_init_in in;
+	struct fuse_init_out out;
+};
+
+struct fuse_setxattr_in {
+	uint32_t size;
+	uint32_t flags;
+	uint32_t setxattr_flags;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_in {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_dirent {
+	uint64_t ino;
+	uint64_t off;
+	uint32_t namelen;
+	uint32_t type;
+	char name[0];
+};
+
+struct fuse_direntplus {
+	struct fuse_entry_out entry_out;
+	struct fuse_dirent dirent;
+};
+
+enum fuse_parse_result {
+	FOUND_ERR = 4294967295,
+	FOUND_NONE = 0,
+	FOUND_SOME = 1,
+	FOUND_ALL = 2,
+};
+
+struct fuse_ioctl_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t cmd;
+	uint64_t arg;
+	uint32_t in_size;
+	uint32_t out_size;
+};
+
+struct fuse_ioctl_iovec {
+	uint64_t base;
+	uint64_t len;
+};
+
+struct fuse_ioctl_out {
+	int32_t result;
+	uint32_t flags;
+	uint32_t in_iovs;
+	uint32_t out_iovs;
+};
+
+struct fuse_setupmapping_in {
+	uint64_t fh;
+	uint64_t foffset;
+	uint64_t len;
+	uint64_t flags;
+	uint64_t moffset;
+};
+
+struct fuse_removemapping_in {
+	uint32_t count;
+};
+
+struct fuse_removemapping_one {
+	uint64_t moffset;
+	uint64_t len;
+};
+
+struct fuse_inode_dax {
+	struct rw_semaphore sem;
+	struct rb_root_cached tree;
+	long unsigned int nr;
+};
+
+struct fuse_conn_dax {
+	struct dax_device *dev;
+	spinlock_t lock;
+	long unsigned int nr_busy_ranges;
+	struct list_head busy_ranges;
+	struct delayed_work free_work;
+	wait_queue_head_t range_waitq;
+	long int nr_free_ranges;
+	struct list_head free_ranges;
+	long unsigned int nr_ranges;
+};
+
+struct fuse_dax_mapping {
+	struct inode *inode;
+	struct list_head list;
+	struct interval_tree_node itn;
+	struct list_head busy_list;
+	u64 window_offset;
+	loff_t length;
+	bool writable;
+	refcount_t refcnt;
+};
+
 typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
 
 struct debugfs_fsdata {
@@ -45393,10 +63194,10 @@
 };
 
 enum {
-	Opt_uid___4 = 0,
-	Opt_gid___5 = 1,
+	Opt_uid___5 = 0,
+	Opt_gid___6 = 1,
 	Opt_mode___5 = 2,
-	Opt_err___3 = 3,
+	Opt_err___4 = 3,
 };
 
 struct debugfs_fs_info {
@@ -45477,7 +63278,7 @@
 struct pstore_info {
 	struct module *owner;
 	const char *name;
-	struct semaphore buf_lock;
+	spinlock_t buf_lock;
 	char *buf;
 	size_t bufsize;
 	struct mutex read_mutex;
@@ -45513,7 +63314,11 @@
 
 enum {
 	Opt_kmsg_bytes = 0,
-	Opt_err___4 = 1,
+	Opt_err___5 = 1,
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
 };
 
 struct pstore_zbackend {
@@ -45521,7 +63326,22 @@
 	const char *name;
 };
 
-typedef s32 compat_key_t;
+struct efi_variable {
+	efi_char16_t VariableName[512];
+	efi_guid_t VendorGuid;
+	long unsigned int DataSize;
+	__u8 Data[1024];
+	efi_status_t Status;
+	__u32 Attributes;
+} __attribute__((packed));
+
+struct efivar_entry {
+	struct efi_variable var;
+	struct list_head list;
+	struct kobject kobj;
+	bool scanning;
+	bool deleting;
+};
 
 struct ipc64_perm {
 	__kernel_key_t key;
@@ -45537,6 +63357,10 @@
 	__kernel_ulong_t __unused2;
 };
 
+typedef s32 compat_key_t;
+
+typedef u16 compat_ushort_t;
+
 typedef u32 __compat_gid32_t;
 
 struct compat_ipc64_perm {
@@ -45545,10 +63369,10 @@
 	__compat_gid32_t gid;
 	__compat_uid32_t cuid;
 	__compat_gid32_t cgid;
-	short unsigned int mode;
-	short unsigned int __pad1;
-	short unsigned int seq;
-	short unsigned int __pad2;
+	compat_mode_t mode;
+	unsigned char __pad1[2];
+	compat_ushort_t seq;
+	compat_ushort_t __pad2;
 	compat_ulong_t unused1;
 	compat_ulong_t unused2;
 };
@@ -45617,8 +63441,6 @@
 
 typedef int __kernel_ipc_pid_t;
 
-typedef __kernel_long_t __kernel_old_time_t;
-
 struct msgbuf {
 	__kernel_long_t mtype;
 	char mtext[1];
@@ -45789,11 +63611,13 @@
 
 struct semid64_ds {
 	struct ipc64_perm sem_perm;
-	long int sem_otime;
-	long int sem_ctime;
-	long unsigned int sem_nsems;
-	long unsigned int __unused3;
-	long unsigned int __unused4;
+	__kernel_long_t sem_otime;
+	__kernel_ulong_t __unused1;
+	__kernel_long_t sem_ctime;
+	__kernel_ulong_t __unused2;
+	__kernel_ulong_t sem_nsems;
+	__kernel_ulong_t __unused3;
+	__kernel_ulong_t __unused4;
 };
 
 struct seminfo {
@@ -45873,7 +63697,7 @@
 
 struct shmid64_ds {
 	struct ipc64_perm shm_perm;
-	size_t shm_segsz;
+	__kernel_size_t shm_segsz;
 	long int shm_atime;
 	long int shm_dtime;
 	long int shm_ctime;
@@ -45939,10 +63763,10 @@
 	time64_t shm_ctim;
 	struct pid *shm_cprid;
 	struct pid *shm_lprid;
-	struct user_struct *mlock_user;
+	struct ucounts *mlock_ucounts;
 	struct task_struct *shm_creator;
 	struct list_head shm_clist;
-	long: 64;
+	struct ipc_namespace *ns;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -45990,8 +63814,14 @@
 	compat_ulong_t swap_successes;
 };
 
+struct compat_ipc_kludge {
+	compat_uptr_t msgp;
+	compat_long_t msgtyp;
+};
+
 struct mqueue_fs_context {
 	struct ipc_namespace *ipc_ns;
+	bool newns;
 };
 
 struct posix_msg_tree_node {
@@ -46019,7 +63849,7 @@
 	struct pid *notify_owner;
 	u32 notify_self_exec_id;
 	struct user_namespace *notify_user_ns;
-	struct user_struct *user;
+	struct ucounts *ucounts;
 	struct sock *notify_sock;
 	struct sk_buff *notify_cookie;
 	struct ext_wait_queue e_wait_q[2];
@@ -46179,34 +64009,55 @@
 	char op[8];
 };
 
-enum {
-	Opt_err___5 = 0,
-	Opt_enc = 1,
-	Opt_hash = 2,
+struct compat_keyctl_kdf_params {
+	compat_uptr_t hashname;
+	compat_uptr_t otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
 };
 
-enum hash_algo {
-	HASH_ALGO_MD4 = 0,
-	HASH_ALGO_MD5 = 1,
-	HASH_ALGO_SHA1 = 2,
-	HASH_ALGO_RIPE_MD_160 = 3,
-	HASH_ALGO_SHA256 = 4,
-	HASH_ALGO_SHA384 = 5,
-	HASH_ALGO_SHA512 = 6,
-	HASH_ALGO_SHA224 = 7,
-	HASH_ALGO_RIPE_MD_128 = 8,
-	HASH_ALGO_RIPE_MD_256 = 9,
-	HASH_ALGO_RIPE_MD_320 = 10,
-	HASH_ALGO_WP_256 = 11,
-	HASH_ALGO_WP_384 = 12,
-	HASH_ALGO_WP_512 = 13,
-	HASH_ALGO_TGR_128 = 14,
-	HASH_ALGO_TGR_160 = 15,
-	HASH_ALGO_TGR_192 = 16,
-	HASH_ALGO_SM3_256 = 17,
-	HASH_ALGO_STREEBOG_256 = 18,
-	HASH_ALGO_STREEBOG_512 = 19,
-	HASH_ALGO__LAST = 20,
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_kpp {
+	struct crypto_tfm base;
+};
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	unsigned int reqsize;
+	struct crypto_alg base;
+};
+
+struct dh {
+	const void *key;
+	const void *p;
+	const void *g;
+	unsigned int key_size;
+	unsigned int p_size;
+	unsigned int g_size;
+};
+
+struct dh_completion {
+	struct completion completion;
+	int err;
+};
+
+enum {
+	Opt_err___6 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
 };
 
 enum tpm_duration {
@@ -46218,65 +64069,494 @@
 	TPM_NUM_DURATIONS = 4,
 };
 
-struct encrypted_key_payload {
+struct trusted_key_payload {
 	struct callback_head rcu;
-	char *format;
-	char *master_desc;
-	char *datalen;
-	u8 *iv;
-	u8 *encrypted_data;
-	short unsigned int datablob_len;
-	short unsigned int decrypted_datalen;
-	short unsigned int payload_datalen;
-	short unsigned int encrypted_key_format;
-	u8 *decrypted_data;
-	u8 payload_data[0];
+	unsigned int key_len;
+	unsigned int blob_len;
+	unsigned char migratable;
+	unsigned char old_format;
+	unsigned char key[129];
+	unsigned char blob[512];
 };
 
-struct ecryptfs_session_key {
-	u32 flags;
-	u32 encrypted_key_size;
-	u32 decrypted_key_size;
-	u8 encrypted_key[512];
-	u8 decrypted_key[64];
+struct trusted_key_ops {
+	unsigned char migratable;
+	int (*init)();
+	int (*seal)(struct trusted_key_payload *, char *);
+	int (*unseal)(struct trusted_key_payload *, char *);
+	int (*get_random)(unsigned char *, size_t);
+	void (*exit)();
 };
 
-struct ecryptfs_password {
-	u32 password_bytes;
-	s32 hash_algo;
-	u32 hash_iterations;
-	u32 session_key_encryption_key_bytes;
-	u32 flags;
-	u8 session_key_encryption_key[64];
-	u8 signature[17];
-	u8 salt[8];
-};
-
-struct ecryptfs_private_key {
-	u32 key_size;
-	u32 data_len;
-	u8 signature[17];
-	char pki_type[17];
-	u8 data[0];
-};
-
-struct ecryptfs_auth_tok {
-	u16 version;
-	u16 token_type;
-	u32 flags;
-	struct ecryptfs_session_key session_key;
-	u8 reserved[32];
-	union {
-		struct ecryptfs_password password;
-		struct ecryptfs_private_key private_key;
-	} token;
+struct trusted_key_source {
+	char *name;
+	struct trusted_key_ops *ops;
 };
 
 enum {
-	Opt_new = 0,
-	Opt_load = 1,
-	Opt_update = 2,
-	Opt_err___6 = 3,
+	Opt_err___7 = 0,
+	Opt_new = 1,
+	Opt_load = 2,
+	Opt_update = 3,
+};
+
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	long unsigned int priv;
+	short unsigned int quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+};
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+struct tpm_bank_info {
+	u16 alg_id;
+	u16 digest_size;
+	u16 crypto_id;
+};
+
+struct tpm_chip;
+
+struct tpm_class_ops {
+	unsigned int flags;
+	const u8 req_complete_mask;
+	const u8 req_complete_val;
+	bool (*req_canceled)(struct tpm_chip *, u8);
+	int (*recv)(struct tpm_chip *, u8 *, size_t);
+	int (*send)(struct tpm_chip *, u8 *, size_t);
+	void (*cancel)(struct tpm_chip *);
+	u8 (*status)(struct tpm_chip *);
+	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
+	void (*update_durations)(struct tpm_chip *, long unsigned int *);
+	int (*go_idle)(struct tpm_chip *);
+	int (*cmd_ready)(struct tpm_chip *);
+	int (*request_locality)(struct tpm_chip *, int);
+	int (*relinquish_locality)(struct tpm_chip *, int);
+	void (*clk_enable)(struct tpm_chip *, bool);
+};
+
+struct tpm_bios_log {
+	void *bios_event_log;
+	void *bios_event_log_end;
+};
+
+struct tpm_chip_seqops {
+	struct tpm_chip *chip;
+	const struct seq_operations *seqops;
+};
+
+struct tpm_space {
+	u32 context_tbl[3];
+	u8 *context_buf;
+	u32 session_tbl[3];
+	u8 *session_buf;
+	u32 buf_size;
+};
+
+struct tpm_chip {
+	struct device dev;
+	struct device devs;
+	struct cdev cdev;
+	struct cdev cdevs;
+	struct rw_semaphore ops_sem;
+	const struct tpm_class_ops *ops;
+	struct tpm_bios_log log;
+	struct tpm_chip_seqops bin_log_seqops;
+	struct tpm_chip_seqops ascii_log_seqops;
+	unsigned int flags;
+	int dev_num;
+	long unsigned int is_open;
+	char hwrng_name[64];
+	struct hwrng hwrng;
+	struct mutex tpm_mutex;
+	long unsigned int timeout_a;
+	long unsigned int timeout_b;
+	long unsigned int timeout_c;
+	long unsigned int timeout_d;
+	bool timeout_adjusted;
+	long unsigned int duration[4];
+	bool duration_adjusted;
+	struct dentry *bios_dir[3];
+	const struct attribute_group *groups[8];
+	unsigned int groups_cnt;
+	u32 nr_allocated_banks;
+	struct tpm_bank_info *allocated_banks;
+	acpi_handle acpi_dev_handle;
+	char ppi_version[4];
+	struct tpm_space work_space;
+	u32 last_cc;
+	u32 nr_commands;
+	u32 *cc_attrs_tbl;
+	int locality;
+};
+
+struct tpm_header {
+	__be16 tag;
+	__be32 length;
+	union {
+		__be32 ordinal;
+		__be32 return_code;
+	};
+} __attribute__((packed));
+
+enum tpm_buf_flags {
+	TPM_BUF_OVERFLOW = 1,
+};
+
+struct tpm_buf {
+	unsigned int flags;
+	u8 *data;
+};
+
+struct trusted_key_options {
+	uint16_t keytype;
+	uint32_t keyhandle;
+	unsigned char keyauth[20];
+	uint32_t blobauth_len;
+	unsigned char blobauth[20];
+	uint32_t pcrinfo_len;
+	unsigned char pcrinfo[64];
+	int pcrlock;
+	uint32_t hash;
+	uint32_t policydigest_len;
+	unsigned char policydigest[64];
+	uint32_t policyhandle;
+};
+
+struct osapsess {
+	uint32_t handle;
+	unsigned char secret[20];
+	unsigned char enonce[20];
+};
+
+enum {
+	SEAL_keytype = 1,
+	SRK_keytype = 4,
+};
+
+struct sdesc {
+	struct shash_desc shash;
+	char ctx[0];
+};
+
+struct tpm_digests {
+	unsigned char encauth[20];
+	unsigned char pubauth[20];
+	unsigned char xorwork[40];
+	unsigned char xorhash[20];
+	unsigned char nonceodd[20];
+};
+
+enum {
+	Opt_err___8 = 0,
+	Opt_keyhandle = 1,
+	Opt_keyauth = 2,
+	Opt_blobauth = 3,
+	Opt_pcrinfo = 4,
+	Opt_pcrlock = 5,
+	Opt_migratable = 6,
+	Opt_hash___2 = 7,
+	Opt_policydigest = 8,
+	Opt_policyhandle = 9,
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_spnego = 40,
+	OID_IAKerb = 41,
+	OID_PKU2U = 42,
+	OID_Scram = 43,
+	OID_certAuthInfoAccess = 44,
+	OID_sha1 = 45,
+	OID_id_ansip384r1 = 46,
+	OID_sha256 = 47,
+	OID_sha384 = 48,
+	OID_sha512 = 49,
+	OID_sha224 = 50,
+	OID_commonName = 51,
+	OID_surname = 52,
+	OID_countryName = 53,
+	OID_locality = 54,
+	OID_stateOrProvinceName = 55,
+	OID_organizationName = 56,
+	OID_organizationUnitName = 57,
+	OID_title = 58,
+	OID_description = 59,
+	OID_name = 60,
+	OID_givenName = 61,
+	OID_initials = 62,
+	OID_generationalQualifier = 63,
+	OID_subjectKeyIdentifier = 64,
+	OID_keyUsage = 65,
+	OID_subjectAltName = 66,
+	OID_issuerAltName = 67,
+	OID_basicConstraints = 68,
+	OID_crlDistributionPoints = 69,
+	OID_certPolicies = 70,
+	OID_authorityKeyIdentifier = 71,
+	OID_extKeyUsage = 72,
+	OID_NetlogonMechanism = 73,
+	OID_appleLocalKdcSupported = 74,
+	OID_gostCPSignA = 75,
+	OID_gostCPSignB = 76,
+	OID_gostCPSignC = 77,
+	OID_gost2012PKey256 = 78,
+	OID_gost2012PKey512 = 79,
+	OID_gost2012Digest256 = 80,
+	OID_gost2012Digest512 = 81,
+	OID_gost2012Signature256 = 82,
+	OID_gost2012Signature512 = 83,
+	OID_gostTC26Sign256A = 84,
+	OID_gostTC26Sign256B = 85,
+	OID_gostTC26Sign256C = 86,
+	OID_gostTC26Sign256D = 87,
+	OID_gostTC26Sign512A = 88,
+	OID_gostTC26Sign512B = 89,
+	OID_gostTC26Sign512C = 90,
+	OID_sm2 = 91,
+	OID_sm3 = 92,
+	OID_SM2_with_SM3 = 93,
+	OID_sm3WithRSAEncryption = 94,
+	OID_TPMLoadableKey = 95,
+	OID_TPMImportableKey = 96,
+	OID_TPMSealedData = 97,
+	OID__NR = 98,
+};
+
+enum tpm_algorithms {
+	TPM_ALG_ERROR = 0,
+	TPM_ALG_SHA1 = 4,
+	TPM_ALG_KEYEDHASH = 8,
+	TPM_ALG_SHA256 = 11,
+	TPM_ALG_SHA384 = 12,
+	TPM_ALG_SHA512 = 13,
+	TPM_ALG_NULL = 16,
+	TPM_ALG_SM3_256 = 18,
+};
+
+enum tpm2_structures {
+	TPM2_ST_NO_SESSIONS = 32769,
+	TPM2_ST_SESSIONS = 32770,
+};
+
+enum tpm2_return_codes {
+	TPM2_RC_SUCCESS = 0,
+	TPM2_RC_HASH = 131,
+	TPM2_RC_HANDLE = 139,
+	TPM2_RC_INITIALIZE = 256,
+	TPM2_RC_FAILURE = 257,
+	TPM2_RC_DISABLED = 288,
+	TPM2_RC_UPGRADE = 301,
+	TPM2_RC_COMMAND_CODE = 323,
+	TPM2_RC_TESTING = 2314,
+	TPM2_RC_REFERENCE_H0 = 2320,
+	TPM2_RC_RETRY = 2338,
+};
+
+enum tpm2_command_codes {
+	TPM2_CC_FIRST = 287,
+	TPM2_CC_HIERARCHY_CONTROL = 289,
+	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
+	TPM2_CC_CREATE_PRIMARY = 305,
+	TPM2_CC_SEQUENCE_COMPLETE = 318,
+	TPM2_CC_SELF_TEST = 323,
+	TPM2_CC_STARTUP = 324,
+	TPM2_CC_SHUTDOWN = 325,
+	TPM2_CC_NV_READ = 334,
+	TPM2_CC_CREATE = 339,
+	TPM2_CC_LOAD = 343,
+	TPM2_CC_SEQUENCE_UPDATE = 348,
+	TPM2_CC_UNSEAL = 350,
+	TPM2_CC_CONTEXT_LOAD = 353,
+	TPM2_CC_CONTEXT_SAVE = 354,
+	TPM2_CC_FLUSH_CONTEXT = 357,
+	TPM2_CC_VERIFY_SIGNATURE = 375,
+	TPM2_CC_GET_CAPABILITY = 378,
+	TPM2_CC_GET_RANDOM = 379,
+	TPM2_CC_PCR_READ = 382,
+	TPM2_CC_PCR_EXTEND = 386,
+	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
+	TPM2_CC_HASH_SEQUENCE_START = 390,
+	TPM2_CC_CREATE_LOADED = 401,
+	TPM2_CC_LAST = 403,
+};
+
+enum tpm2_permanent_handles {
+	TPM2_RS_PW = 1073741833,
+};
+
+enum tpm2_object_attributes {
+	TPM2_OA_FIXED_TPM = 2,
+	TPM2_OA_FIXED_PARENT = 16,
+	TPM2_OA_USER_WITH_AUTH = 64,
+};
+
+enum tpm2_session_attributes {
+	TPM2_SA_CONTINUE_SESSION = 1,
+};
+
+struct tpm2_hash {
+	unsigned int crypto_id;
+	unsigned int tpm_id;
+};
+
+struct tpm2_key_context {
+	u32 parent;
+	const u8 *pub;
+	u32 pub_len;
+	const u8 *priv;
+	u32 priv_len;
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum tpm2key_actions {
+	ACT_tpm2_key_parent = 0,
+	ACT_tpm2_key_priv = 1,
+	ACT_tpm2_key_pub = 2,
+	ACT_tpm2_key_type = 3,
+	NR__tpm2key_actions = 4,
+};
+
+enum {
+	Opt_new___2 = 0,
+	Opt_load___2 = 1,
+	Opt_update___2 = 2,
+	Opt_err___9 = 3,
 };
 
 enum {
@@ -46291,11 +64571,6 @@
 	AUTH_KEY = 1,
 };
 
-enum ecryptfs_token_types {
-	ECRYPTFS_PASSWORD = 0,
-	ECRYPTFS_PRIVATE_KEY = 1,
-};
-
 struct vfs_cap_data {
 	__le32 magic_etc;
 	struct {
@@ -46313,13 +64588,13 @@
 	__le32 rootid;
 };
 
-struct sctp_endpoint;
+struct sctp_association;
 
 union security_list_options {
-	int (*binder_set_context_mgr)(struct task_struct *);
-	int (*binder_transaction)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_binder)(struct task_struct *, struct task_struct *);
-	int (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);
+	int (*binder_set_context_mgr)(const struct cred *);
+	int (*binder_transaction)(const struct cred *, const struct cred *);
+	int (*binder_transfer_binder)(const struct cred *, const struct cred *);
+	int (*binder_transfer_file)(const struct cred *, const struct cred *, struct file *);
 	int (*ptrace_access_check)(struct task_struct *, unsigned int);
 	int (*ptrace_traceme)(struct task_struct *);
 	int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
@@ -46338,9 +64613,11 @@
 	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
 	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
 	int (*sb_alloc_security)(struct super_block *);
+	void (*sb_delete)(struct super_block *);
 	void (*sb_free_security)(struct super_block *);
 	void (*sb_free_mnt_opts)(void *);
 	int (*sb_eat_lsm_opts)(char *, void **);
+	int (*sb_mnt_opts_compat)(struct super_block *, void *);
 	int (*sb_remount)(struct super_block *, void *);
 	int (*sb_kern_mount)(struct super_block *);
 	int (*sb_show_options)(struct seq_file *, struct super_block *);
@@ -46350,9 +64627,8 @@
 	int (*sb_pivotroot)(const struct path *, const struct path *);
 	int (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);
 	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);
-	int (*sb_add_mnt_opt)(const char *, const char *, int, void **);
 	int (*move_mount)(const struct path *, const struct path *);
-	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);
+	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, const char **, void **, u32 *);
 	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
 	int (*path_unlink)(const struct path *, struct dentry *);
 	int (*path_mkdir)(const struct path *, struct dentry *, umode_t);
@@ -46361,7 +64637,7 @@
 	int (*path_truncate)(const struct path *);
 	int (*path_symlink)(const struct path *, struct dentry *, const char *);
 	int (*path_link)(struct dentry *, const struct path *, struct dentry *);
-	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *);
+	int (*path_rename)(const struct path *, struct dentry *, const struct path *, struct dentry *, unsigned int);
 	int (*path_chmod)(const struct path *, umode_t);
 	int (*path_chown)(const struct path *, kuid_t, kgid_t);
 	int (*path_chroot)(const struct path *);
@@ -46369,6 +64645,7 @@
 	int (*inode_alloc_security)(struct inode *);
 	void (*inode_free_security)(struct inode *);
 	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);
+	int (*inode_init_security_anon)(struct inode *, const struct qstr *, const struct inode *);
 	int (*inode_create)(struct inode *, struct dentry *, umode_t);
 	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
 	int (*inode_unlink)(struct inode *, struct dentry *);
@@ -46382,14 +64659,14 @@
 	int (*inode_permission)(struct inode *, int);
 	int (*inode_setattr)(struct dentry *, struct iattr *);
 	int (*inode_getattr)(const struct path *);
-	int (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);
+	int (*inode_setxattr)(struct user_namespace *, struct dentry *, const char *, const void *, size_t, int);
 	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
 	int (*inode_getxattr)(struct dentry *, const char *);
 	int (*inode_listxattr)(struct dentry *);
-	int (*inode_removexattr)(struct dentry *, const char *);
+	int (*inode_removexattr)(struct user_namespace *, struct dentry *, const char *);
 	int (*inode_need_killpriv)(struct dentry *);
-	int (*inode_killpriv)(struct dentry *);
-	int (*inode_getsecurity)(struct inode *, const char *, void **, bool);
+	int (*inode_killpriv)(struct user_namespace *, struct dentry *);
+	int (*inode_getsecurity)(struct user_namespace *, struct inode *, const char *, void **, bool);
 	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
 	int (*inode_listsecurity)(struct inode *, char *, size_t);
 	void (*inode_getsecid)(struct inode *, u32 *);
@@ -46428,7 +64705,8 @@
 	int (*task_setpgid)(struct task_struct *, pid_t);
 	int (*task_getpgid)(struct task_struct *);
 	int (*task_getsid)(struct task_struct *);
-	void (*task_getsecid)(struct task_struct *, u32 *);
+	void (*current_getsecid_subj)(u32 *);
+	void (*task_getsecid_obj)(struct task_struct *, u32 *);
 	int (*task_setnice)(struct task_struct *, int);
 	int (*task_setioprio)(struct task_struct *, int);
 	int (*task_getioprio)(struct task_struct *);
@@ -46498,22 +64776,27 @@
 	void (*sk_clone_security)(const struct sock *, struct sock *);
 	void (*sk_getsecid)(struct sock *, u32 *);
 	void (*sock_graft)(struct sock *, struct socket *);
-	int (*inet_conn_request)(struct sock *, struct sk_buff *, struct request_sock *);
+	int (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);
 	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
 	void (*inet_conn_established)(struct sock *, struct sk_buff *);
 	int (*secmark_relabel_packet)(u32);
 	void (*secmark_refcount_inc)();
 	void (*secmark_refcount_dec)();
-	void (*req_classify_flow)(const struct request_sock *, struct flowi *);
+	void (*req_classify_flow)(const struct request_sock *, struct flowi_common *);
 	int (*tun_dev_alloc_security)(void **);
 	void (*tun_dev_free_security)(void *);
 	int (*tun_dev_create)();
 	int (*tun_dev_attach_queue)(void *);
 	int (*tun_dev_attach)(struct sock *, void *);
 	int (*tun_dev_open)(void *);
-	int (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);
+	int (*sctp_assoc_request)(struct sctp_association *, struct sk_buff *);
 	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
-	void (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);
+	void (*sctp_sk_clone)(struct sctp_association *, struct sock *, struct sock *);
+	int (*sctp_assoc_established)(struct sctp_association *, struct sk_buff *);
+	int (*ib_pkey_access)(void *, u64, u16);
+	int (*ib_endport_manage_subnet)(void *, const char *, u8);
+	int (*ib_alloc_security)(void **);
+	void (*ib_free_security)(void *);
 	int (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);
 	int (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);
 	void (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);
@@ -46522,8 +64805,8 @@
 	int (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);
 	void (*xfrm_state_free_security)(struct xfrm_state *);
 	int (*xfrm_state_delete_security)(struct xfrm_state *);
-	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32, u8);
-	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi *);
+	int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32);
+	int (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi_common *);
 	int (*xfrm_decode_session)(struct sk_buff *, u32 *, int);
 	int (*key_alloc)(struct key *, const struct cred *, long unsigned int);
 	void (*key_free)(struct key *);
@@ -46546,6 +64829,8 @@
 	void (*perf_event_free)(struct perf_event *);
 	int (*perf_event_read)(struct perf_event *);
 	int (*perf_event_write)(struct perf_event *);
+	int (*uring_override_creds)(const struct cred *);
+	int (*uring_sqpoll)();
 };
 
 struct security_hook_heads {
@@ -46571,9 +64856,11 @@
 	struct hlist_head fs_context_dup;
 	struct hlist_head fs_context_parse_param;
 	struct hlist_head sb_alloc_security;
+	struct hlist_head sb_delete;
 	struct hlist_head sb_free_security;
 	struct hlist_head sb_free_mnt_opts;
 	struct hlist_head sb_eat_lsm_opts;
+	struct hlist_head sb_mnt_opts_compat;
 	struct hlist_head sb_remount;
 	struct hlist_head sb_kern_mount;
 	struct hlist_head sb_show_options;
@@ -46583,7 +64870,6 @@
 	struct hlist_head sb_pivotroot;
 	struct hlist_head sb_set_mnt_opts;
 	struct hlist_head sb_clone_mnt_opts;
-	struct hlist_head sb_add_mnt_opt;
 	struct hlist_head move_mount;
 	struct hlist_head dentry_init_security;
 	struct hlist_head dentry_create_files_as;
@@ -46602,6 +64888,7 @@
 	struct hlist_head inode_alloc_security;
 	struct hlist_head inode_free_security;
 	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
 	struct hlist_head inode_create;
 	struct hlist_head inode_link;
 	struct hlist_head inode_unlink;
@@ -46661,7 +64948,8 @@
 	struct hlist_head task_setpgid;
 	struct hlist_head task_getpgid;
 	struct hlist_head task_getsid;
-	struct hlist_head task_getsecid;
+	struct hlist_head current_getsecid_subj;
+	struct hlist_head task_getsecid_obj;
 	struct hlist_head task_setnice;
 	struct hlist_head task_setioprio;
 	struct hlist_head task_getioprio;
@@ -46747,6 +65035,11 @@
 	struct hlist_head sctp_assoc_request;
 	struct hlist_head sctp_bind_connect;
 	struct hlist_head sctp_sk_clone;
+	struct hlist_head sctp_assoc_established;
+	struct hlist_head ib_pkey_access;
+	struct hlist_head ib_endport_manage_subnet;
+	struct hlist_head ib_alloc_security;
+	struct hlist_head ib_free_security;
 	struct hlist_head xfrm_policy_alloc_security;
 	struct hlist_head xfrm_policy_clone_security;
 	struct hlist_head xfrm_policy_free_security;
@@ -46779,13 +65072,15 @@
 	struct hlist_head perf_event_free;
 	struct hlist_head perf_event_read;
 	struct hlist_head perf_event_write;
+	struct hlist_head uring_override_creds;
+	struct hlist_head uring_sqpoll;
 };
 
 struct security_hook_list {
 	struct hlist_node list;
 	struct hlist_head *head;
 	union security_list_options hook;
-	char *lsm;
+	const char *lsm;
 };
 
 enum lsm_order {
@@ -46808,6 +65103,566 @@
 
 typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
 
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+struct ethtool_drvinfo {
+	__u32 cmd;
+	char driver[32];
+	char version[32];
+	char fw_version[32];
+	char bus_info[32];
+	char erom_version[32];
+	char reserved2[12];
+	__u32 n_priv_flags;
+	__u32 n_stats;
+	__u32 testinfo_len;
+	__u32 eedump_len;
+	__u32 regdump_len;
+};
+
+struct ethtool_wolinfo {
+	__u32 cmd;
+	__u32 supported;
+	__u32 wolopts;
+	__u8 sopass[6];
+};
+
+struct ethtool_tunable {
+	__u32 cmd;
+	__u32 id;
+	__u32 type_id;
+	__u32 len;
+	void *data[0];
+};
+
+struct ethtool_regs {
+	__u32 cmd;
+	__u32 version;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eeprom {
+	__u32 cmd;
+	__u32 magic;
+	__u32 offset;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_eee {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertised;
+	__u32 lp_advertised;
+	__u32 eee_active;
+	__u32 eee_enabled;
+	__u32 tx_lpi_enabled;
+	__u32 tx_lpi_timer;
+	__u32 reserved[2];
+};
+
+struct ethtool_modinfo {
+	__u32 cmd;
+	__u32 type;
+	__u32 eeprom_len;
+	__u32 reserved[8];
+};
+
+struct ethtool_coalesce {
+	__u32 cmd;
+	__u32 rx_coalesce_usecs;
+	__u32 rx_max_coalesced_frames;
+	__u32 rx_coalesce_usecs_irq;
+	__u32 rx_max_coalesced_frames_irq;
+	__u32 tx_coalesce_usecs;
+	__u32 tx_max_coalesced_frames;
+	__u32 tx_coalesce_usecs_irq;
+	__u32 tx_max_coalesced_frames_irq;
+	__u32 stats_block_coalesce_usecs;
+	__u32 use_adaptive_rx_coalesce;
+	__u32 use_adaptive_tx_coalesce;
+	__u32 pkt_rate_low;
+	__u32 rx_coalesce_usecs_low;
+	__u32 rx_max_coalesced_frames_low;
+	__u32 tx_coalesce_usecs_low;
+	__u32 tx_max_coalesced_frames_low;
+	__u32 pkt_rate_high;
+	__u32 rx_coalesce_usecs_high;
+	__u32 rx_max_coalesced_frames_high;
+	__u32 tx_coalesce_usecs_high;
+	__u32 tx_max_coalesced_frames_high;
+	__u32 rate_sample_interval;
+};
+
+struct ethtool_ringparam {
+	__u32 cmd;
+	__u32 rx_max_pending;
+	__u32 rx_mini_max_pending;
+	__u32 rx_jumbo_max_pending;
+	__u32 tx_max_pending;
+	__u32 rx_pending;
+	__u32 rx_mini_pending;
+	__u32 rx_jumbo_pending;
+	__u32 tx_pending;
+};
+
+struct ethtool_channels {
+	__u32 cmd;
+	__u32 max_rx;
+	__u32 max_tx;
+	__u32 max_other;
+	__u32 max_combined;
+	__u32 rx_count;
+	__u32 tx_count;
+	__u32 other_count;
+	__u32 combined_count;
+};
+
+struct ethtool_pauseparam {
+	__u32 cmd;
+	__u32 autoneg;
+	__u32 rx_pause;
+	__u32 tx_pause;
+};
+
+enum ethtool_link_ext_state {
+	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
+	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
+	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
+	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
+	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
+	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
+	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
+	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
+	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
+	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
+};
+
+enum ethtool_link_ext_substate_autoneg {
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
+};
+
+enum ethtool_link_ext_substate_link_training {
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
+};
+
+enum ethtool_link_ext_substate_link_logical_mismatch {
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
+};
+
+enum ethtool_link_ext_substate_bad_signal_integrity {
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
+};
+
+enum ethtool_link_ext_substate_cable_issue {
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
+};
+
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+struct ethtool_test {
+	__u32 cmd;
+	__u32 flags;
+	__u32 reserved;
+	__u32 len;
+	__u64 data[0];
+};
+
+struct ethtool_stats {
+	__u32 cmd;
+	__u32 n_stats;
+	__u64 data[0];
+};
+
+struct ethtool_tcpip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 spi;
+	__u8 tos;
+};
+
+struct ethtool_usrip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 l4_4_bytes;
+	__u8 tos;
+	__u8 ip_ver;
+	__u8 proto;
+};
+
+struct ethtool_tcpip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tclass;
+};
+
+struct ethtool_ah_espip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 spi;
+	__u8 tclass;
+};
+
+struct ethtool_usrip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 l4_4_bytes;
+	__u8 tclass;
+	__u8 l4_proto;
+};
+
+union ethtool_flow_union {
+	struct ethtool_tcpip4_spec tcp_ip4_spec;
+	struct ethtool_tcpip4_spec udp_ip4_spec;
+	struct ethtool_tcpip4_spec sctp_ip4_spec;
+	struct ethtool_ah_espip4_spec ah_ip4_spec;
+	struct ethtool_ah_espip4_spec esp_ip4_spec;
+	struct ethtool_usrip4_spec usr_ip4_spec;
+	struct ethtool_tcpip6_spec tcp_ip6_spec;
+	struct ethtool_tcpip6_spec udp_ip6_spec;
+	struct ethtool_tcpip6_spec sctp_ip6_spec;
+	struct ethtool_ah_espip6_spec ah_ip6_spec;
+	struct ethtool_ah_espip6_spec esp_ip6_spec;
+	struct ethtool_usrip6_spec usr_ip6_spec;
+	struct ethhdr ether_spec;
+	__u8 hdata[52];
+};
+
+struct ethtool_flow_ext {
+	__u8 padding[2];
+	unsigned char h_dest[6];
+	__be16 vlan_etype;
+	__be16 vlan_tci;
+	__be32 data[2];
+};
+
+struct ethtool_rx_flow_spec {
+	__u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	__u64 ring_cookie;
+	__u32 location;
+};
+
+struct ethtool_rxnfc {
+	__u32 cmd;
+	__u32 flow_type;
+	__u64 data;
+	struct ethtool_rx_flow_spec fs;
+	union {
+		__u32 rule_cnt;
+		__u32 rss_context;
+	};
+	__u32 rule_locs[0];
+};
+
+struct ethtool_flash {
+	__u32 cmd;
+	__u32 region;
+	char data[128];
+};
+
+struct ethtool_dump {
+	__u32 cmd;
+	__u32 version;
+	__u32 flag;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_ts_info {
+	__u32 cmd;
+	__u32 so_timestamping;
+	__s32 phc_index;
+	__u32 tx_types;
+	__u32 tx_reserved[3];
+	__u32 rx_filters;
+	__u32 rx_reserved[3];
+};
+
+struct ethtool_fecparam {
+	__u32 cmd;
+	__u32 active_fec;
+	__u32 fec;
+	__u32 reserved;
+};
+
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 93,
+};
+
+struct ethtool_link_settings {
+	__u32 cmd;
+	__u32 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__s8 link_mode_masks_nwords;
+	__u8 transceiver;
+	__u8 master_slave_cfg;
+	__u8 master_slave_state;
+	__u8 reserved1[1];
+	__u32 reserved[7];
+	__u32 link_mode_masks[0];
+};
+
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u32 cqe_size;
+};
+
+struct ethtool_link_ext_state_info {
+	enum ethtool_link_ext_state link_ext_state;
+	union {
+		enum ethtool_link_ext_substate_autoneg autoneg;
+		enum ethtool_link_ext_substate_link_training link_training;
+		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
+		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
+		enum ethtool_link_ext_substate_cable_issue cable_issue;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
+	};
+};
+
+struct ethtool_link_ksettings {
+	struct ethtool_link_settings base;
+	struct {
+		long unsigned int supported[2];
+		long unsigned int advertising[2];
+		long unsigned int lp_advertising[2];
+	} link_modes;
+	u32 lanes;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+};
+
+struct ethtool_eth_mac_stats {
+	u64 FramesTransmittedOK;
+	u64 SingleCollisionFrames;
+	u64 MultipleCollisionFrames;
+	u64 FramesReceivedOK;
+	u64 FrameCheckSequenceErrors;
+	u64 AlignmentErrors;
+	u64 OctetsTransmittedOK;
+	u64 FramesWithDeferredXmissions;
+	u64 LateCollisions;
+	u64 FramesAbortedDueToXSColls;
+	u64 FramesLostDueToIntMACXmitError;
+	u64 CarrierSenseErrors;
+	u64 OctetsReceivedOK;
+	u64 FramesLostDueToIntMACRcvError;
+	u64 MulticastFramesXmittedOK;
+	u64 BroadcastFramesXmittedOK;
+	u64 FramesWithExcessiveDeferral;
+	u64 MulticastFramesReceivedOK;
+	u64 BroadcastFramesReceivedOK;
+	u64 InRangeLengthErrors;
+	u64 OutOfRangeLengthField;
+	u64 FrameTooLongErrors;
+};
+
+struct ethtool_eth_phy_stats {
+	u64 SymbolErrorDuringCarrier;
+};
+
+struct ethtool_eth_ctrl_stats {
+	u64 MACControlFramesTransmitted;
+	u64 MACControlFramesReceived;
+	u64 UnsupportedOpcodesReceived;
+};
+
+struct ethtool_pause_stats {
+	u64 tx_pause_frames;
+	u64 rx_pause_frames;
+};
+
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
+};
+
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
+};
+
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
+};
+
+struct ethtool_rmon_stats {
+	u64 undersize_pkts;
+	u64 oversize_pkts;
+	u64 fragments;
+	u64 jabbers;
+	u64 hist[10];
+	u64 hist_tx[10];
+};
+
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
+};
+
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
+};
+
 enum ib_uverbs_write_cmds {
 	IB_USER_VERBS_CMD_GET_CONTEXT = 0,
 	IB_USER_VERBS_CMD_QUERY_DEVICE = 1,
@@ -46884,6 +65739,41 @@
 	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
 };
 
+enum ib_uverbs_device_cap_flags {
+	IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1,
+	IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 2,
+	IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 4,
+	IB_UVERBS_DEVICE_RAW_MULTI = 8,
+	IB_UVERBS_DEVICE_AUTO_PATH_MIG = 16,
+	IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 32,
+	IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 64,
+	IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 128,
+	IB_UVERBS_DEVICE_SHUTDOWN_PORT = 256,
+	IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1024,
+	IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 2048,
+	IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 4096,
+	IB_UVERBS_DEVICE_SRQ_RESIZE = 8192,
+	IB_UVERBS_DEVICE_N_NOTIFY_CQ = 16384,
+	IB_UVERBS_DEVICE_MEM_WINDOW = 131072,
+	IB_UVERBS_DEVICE_UD_IP_CSUM = 262144,
+	IB_UVERBS_DEVICE_XRC = 1048576,
+	IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 2097152,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 8388608,
+	IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 16777216,
+	IB_UVERBS_DEVICE_RC_IP_CSUM = 33554432,
+	IB_UVERBS_DEVICE_RAW_IP_CSUM = 67108864,
+	IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 536870912,
+	IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 0,
+	IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 0,
+};
+
+enum ib_uverbs_raw_packet_caps {
+	IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1,
+	IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 2,
+	IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 4,
+	IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 8,
+};
+
 enum ib_uverbs_access_flags {
 	IB_UVERBS_ACCESS_LOCAL_WRITE = 1,
 	IB_UVERBS_ACCESS_REMOTE_WRITE = 2,
@@ -46948,7 +65838,7 @@
 
 struct lsm_network_audit {
 	int netif;
-	struct sock *sk;
+	const struct sock *sk;
 	u16 family;
 	__be16 dport;
 	__be16 sport;
@@ -46975,7 +65865,7 @@
 };
 
 struct lsm_ibendport_audit {
-	char dev_name[64];
+	const char *dev_name;
 	u8 port;
 };
 
@@ -47016,6 +65906,7 @@
 		struct lsm_ibpkey_audit *ibpkey;
 		struct lsm_ibendport_audit *ibendport;
 		int reason;
+		const char *anonclass;
 	} u;
 	union {
 		struct smack_audit_data *smack_audit_data;
@@ -47025,14 +65916,15 @@
 };
 
 enum {
-	POLICYDB_CAPABILITY_NETPEER = 0,
-	POLICYDB_CAPABILITY_OPENPERM = 1,
-	POLICYDB_CAPABILITY_EXTSOCKCLASS = 2,
-	POLICYDB_CAPABILITY_ALWAYSNETWORK = 3,
-	POLICYDB_CAPABILITY_CGROUPSECLABEL = 4,
-	POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,
-	POLICYDB_CAPABILITY_GENFS_SECLABEL_SYMLINKS = 6,
-	__POLICYDB_CAPABILITY_MAX = 7,
+	POLICYDB_CAP_NETPEER = 0,
+	POLICYDB_CAP_OPENPERM = 1,
+	POLICYDB_CAP_EXTSOCKCLASS = 2,
+	POLICYDB_CAP_ALWAYSNETWORK = 3,
+	POLICYDB_CAP_CGROUPSECLABEL = 4,
+	POLICYDB_CAP_NNP_NOSUID_TRANSITION = 5,
+	POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS = 6,
+	POLICYDB_CAP_IOCTL_SKIP_CLOEXEC = 7,
+	__POLICYDB_CAP_MAX = 8,
 };
 
 struct selinux_avc;
@@ -47040,11 +65932,10 @@
 struct selinux_policy;
 
 struct selinux_state {
-	bool disabled;
 	bool enforcing;
 	bool checkreqprot;
 	bool initialized;
-	bool policycap[7];
+	bool policycap[8];
 	struct page *status_page;
 	struct mutex status_lock;
 	struct selinux_avc *avc;
@@ -47176,8 +66067,6 @@
 };
 
 struct sctp_ep_common {
-	struct hlist_node node;
-	int hashent;
 	enum sctp_endpoint_type type;
 	refcount_t refcnt;
 	bool dead;
@@ -47187,42 +66076,7 @@
 	struct sctp_bind_addr bind_addr;
 };
 
-struct crypto_shash___2;
-
-struct sctp_hmac_algo_param;
-
-struct sctp_chunks_param;
-
-struct sctp_endpoint {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	__u8 secret_key[32];
-	__u8 *digest;
-	__u32 sndbuf_policy;
-	__u32 rcvbuf_policy;
-	struct crypto_shash___2 **auth_hmacs;
-	struct sctp_hmac_algo_param *auth_hmacs_list;
-	struct sctp_chunks_param *auth_chunk_list;
-	struct list_head endpoint_shared_keys;
-	__u16 active_key_id;
-	__u8 ecn_enable: 1;
-	__u8 auth_enable: 1;
-	__u8 intl_enable: 1;
-	__u8 prsctp_enable: 1;
-	__u8 asconf_enable: 1;
-	__u8 reconf_enable: 1;
-	__u8 strreset_enable;
-	u32 secid;
-	u32 peer_secid;
-};
-
-struct sockaddr_in6 {
-	short unsigned int sin6_family;
-	__be16 sin6_port;
-	__be32 sin6_flowinfo;
-	struct in6_addr sin6_addr;
-	__u32 sin6_scope_id;
-};
+typedef __s32 sctp_assoc_t;
 
 struct in_addr {
 	__be32 s_addr;
@@ -47235,6 +66089,690 @@
 	unsigned char __pad[8];
 };
 
+struct sockaddr_in6 {
+	short unsigned int sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+union sctp_addr {
+	struct sockaddr_in v4;
+	struct sockaddr_in6 v6;
+	struct sockaddr sa;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+	__u8 params[0];
+};
+
+struct sctp_init_chunk {
+	struct sctp_chunkhdr chunk_hdr;
+	struct sctp_inithdr init_hdr;
+};
+
+struct sctp_cookie {
+	__u32 my_vtag;
+	__u32 peer_vtag;
+	__u32 my_ttag;
+	__u32 peer_ttag;
+	ktime_t expiration;
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u32 initial_tsn;
+	union sctp_addr peer_addr;
+	__u16 my_port;
+	__u8 prsctp_capable;
+	__u8 padding;
+	__u32 adaptation_ind;
+	__u8 auth_random[36];
+	__u8 auth_hmacs[10];
+	__u8 auth_chunks[20];
+	__u32 raw_addr_list_len;
+	struct sctp_init_chunk peer_init[0];
+};
+
+struct sctp_tsnmap {
+	long unsigned int *tsn_map;
+	__u32 base_tsn;
+	__u32 cumulative_tsn_ack_point;
+	__u32 max_tsn_seen;
+	__u16 len;
+	__u16 pending_data;
+	__u16 num_dup_tsns;
+	__be32 dup_tsns[16];
+};
+
+struct sctp_inithdr_host {
+	__u32 init_tag;
+	__u32 a_rwnd;
+	__u16 num_outbound_streams;
+	__u16 num_inbound_streams;
+	__u32 initial_tsn;
+};
+
+enum sctp_state {
+	SCTP_STATE_CLOSED = 0,
+	SCTP_STATE_COOKIE_WAIT = 1,
+	SCTP_STATE_COOKIE_ECHOED = 2,
+	SCTP_STATE_ESTABLISHED = 3,
+	SCTP_STATE_SHUTDOWN_PENDING = 4,
+	SCTP_STATE_SHUTDOWN_SENT = 5,
+	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
+	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
+};
+
+struct sctp_stream_out_ext;
+
+struct sctp_stream_out {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	struct sctp_stream_out_ext *ext;
+	__u8 state;
+};
+
+struct sctp_stream_in {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	__u32 fsn;
+	__u32 fsn_uo;
+	char pd_mode;
+	char pd_mode_uo;
+};
+
+struct sctp_stream_interleave;
+
+struct sctp_stream {
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_out type[0];
+	} out;
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_in type[0];
+	} in;
+	__u16 outcnt;
+	__u16 incnt;
+	struct sctp_stream_out *out_curr;
+	union {
+		struct {
+			struct list_head prio_list;
+		};
+		struct {
+			struct list_head rr_list;
+			struct sctp_stream_out_ext *rr_next;
+		};
+	};
+	struct sctp_stream_interleave *si;
+};
+
+struct sctp_sched_ops;
+
+struct sctp_outq {
+	struct sctp_association *asoc;
+	struct list_head out_chunk_list;
+	struct sctp_sched_ops *sched;
+	unsigned int out_qlen;
+	unsigned int error;
+	struct list_head control_chunk_list;
+	struct list_head sacked;
+	struct list_head retransmit;
+	struct list_head abandoned;
+	__u32 outstanding_bytes;
+	char fast_rtx;
+	char cork;
+};
+
+struct sctp_ulpq {
+	char pd_mode;
+	struct sctp_association *asoc;
+	struct sk_buff_head reasm;
+	struct sk_buff_head reasm_uo;
+	struct sk_buff_head lobby;
+};
+
+struct sctp_priv_assoc_stats {
+	struct __kernel_sockaddr_storage obs_rto_ipaddr;
+	__u64 max_obs_rto;
+	__u64 isacks;
+	__u64 osacks;
+	__u64 opackets;
+	__u64 ipackets;
+	__u64 rtxchunks;
+	__u64 outofseqtsns;
+	__u64 idupchunks;
+	__u64 gapcnt;
+	__u64 ouodchunks;
+	__u64 iuodchunks;
+	__u64 oodchunks;
+	__u64 iodchunks;
+	__u64 octrlchunks;
+	__u64 ictrlchunks;
+};
+
+struct sctp_endpoint;
+
+struct sctp_transport;
+
+struct sctp_random_param;
+
+struct sctp_chunks_param;
+
+struct sctp_hmac_algo_param;
+
+struct sctp_auth_bytes;
+
+struct sctp_shared_key;
+
+struct sctp_association {
+	struct sctp_ep_common base;
+	struct list_head asocs;
+	sctp_assoc_t assoc_id;
+	struct sctp_endpoint *ep;
+	struct sctp_cookie c;
+	struct {
+		struct list_head transport_addr_list;
+		__u32 rwnd;
+		__u16 transport_count;
+		__u16 port;
+		struct sctp_transport *primary_path;
+		union sctp_addr primary_addr;
+		struct sctp_transport *active_path;
+		struct sctp_transport *retran_path;
+		struct sctp_transport *last_sent_to;
+		struct sctp_transport *last_data_from;
+		struct sctp_tsnmap tsn_map;
+		__be16 addip_disabled_mask;
+		__u16 ecn_capable: 1;
+		__u16 ipv4_address: 1;
+		__u16 ipv6_address: 1;
+		__u16 hostname_address: 1;
+		__u16 asconf_capable: 1;
+		__u16 prsctp_capable: 1;
+		__u16 reconf_capable: 1;
+		__u16 intl_capable: 1;
+		__u16 auth_capable: 1;
+		__u16 sack_needed: 1;
+		__u16 sack_generation: 1;
+		__u16 zero_window_announced: 1;
+		__u32 sack_cnt;
+		__u32 adaptation_ind;
+		struct sctp_inithdr_host i;
+		void *cookie;
+		int cookie_len;
+		__u32 addip_serial;
+		struct sctp_random_param *peer_random;
+		struct sctp_chunks_param *peer_chunks;
+		struct sctp_hmac_algo_param *peer_hmacs;
+	} peer;
+	enum sctp_state state;
+	int overall_error_count;
+	ktime_t cookie_life;
+	long unsigned int rto_initial;
+	long unsigned int rto_max;
+	long unsigned int rto_min;
+	int max_burst;
+	int max_retrans;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u16 max_init_attempts;
+	__u16 init_retries;
+	long unsigned int max_init_timeo;
+	long unsigned int hbinterval;
+	long unsigned int probe_interval;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u8 pmtu_pending;
+	__u32 pathmtu;
+	__u32 param_flags;
+	__u32 sackfreq;
+	long unsigned int sackdelay;
+	long unsigned int timeouts[12];
+	struct timer_list timers[12];
+	struct sctp_transport *shutdown_last_sent_to;
+	struct sctp_transport *init_last_sent_to;
+	int shutdown_retries;
+	__u32 next_tsn;
+	__u32 ctsn_ack_point;
+	__u32 adv_peer_ack_point;
+	__u32 highest_sacked;
+	__u32 fast_recovery_exit;
+	__u8 fast_recovery;
+	__u16 unack_data;
+	__u32 rtx_data_chunks;
+	__u32 rwnd;
+	__u32 a_rwnd;
+	__u32 rwnd_over;
+	__u32 rwnd_press;
+	int sndbuf_used;
+	atomic_t rmem_alloc;
+	wait_queue_head_t wait;
+	__u32 frag_point;
+	__u32 user_frag;
+	int init_err_counter;
+	int init_cycle;
+	__u16 default_stream;
+	__u16 default_flags;
+	__u32 default_ppid;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	struct sctp_stream stream;
+	struct sctp_outq outqueue;
+	struct sctp_ulpq ulpq;
+	__u32 last_ecne_tsn;
+	__u32 last_cwr_tsn;
+	int numduptsns;
+	struct sctp_chunk *addip_last_asconf;
+	struct list_head asconf_ack_list;
+	struct list_head addip_chunk_list;
+	__u32 addip_serial;
+	int src_out_of_asoc_ok;
+	union sctp_addr *asconf_addr_del_pending;
+	struct sctp_transport *new_transport;
+	struct list_head endpoint_shared_keys;
+	struct sctp_auth_bytes *asoc_shared_key;
+	struct sctp_shared_key *shkey;
+	__u16 default_hmac_id;
+	__u16 active_key_id;
+	__u8 need_ecne: 1;
+	__u8 temp: 1;
+	__u8 pf_expose: 2;
+	__u8 force_delay: 1;
+	__u8 strreset_enable;
+	__u8 strreset_outstanding;
+	__u32 strreset_outseq;
+	__u32 strreset_inseq;
+	__u32 strreset_result[2];
+	struct sctp_chunk *strreset_chunk;
+	struct sctp_priv_assoc_stats stats;
+	int sent_cnt_removable;
+	__u16 subscribe;
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	u32 secid;
+	u32 peer_secid;
+	struct callback_head rcu;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+struct xfrm_address_filter;
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	long unsigned int offload_handle;
+	u8 dir: 2;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_algo_auth;
+
+struct xfrm_algo;
+
+struct xfrm_algo_aead;
+
+struct xfrm_encap_tmpl;
+
+struct xfrm_replay_state_esn;
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long int saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	long unsigned int timeout;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	short unsigned int encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable **nhc_pcpu_rth_output;
+	struct rtable *nhc_rth_input;
+	struct fnhe_hash_bucket *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	long unsigned int last_probe;
+	struct rt6_info **rt6i_pcpu;
+	struct rt6_exception_bucket *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info *fib6_next;
+	struct fib6_node *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	long unsigned int expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct uncached_list;
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	struct list_head rt6i_uncached;
+	struct uncached_list *rt6i_uncached_list;
+	short unsigned int rt6i_nfheader_len;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct fib6_node {
+	struct fib6_node *parent;
+	struct fib6_node *left;
+	struct fib6_node *right;
+	struct fib6_node *subtree;
+	struct fib6_info *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info *rr_ptr;
+	struct callback_head rcu;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
 struct nf_hook_state;
 
 typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
@@ -47249,9 +66787,128 @@
 	struct nf_hook_entry hooks[0];
 };
 
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
 struct nf_hook_state {
-	unsigned int hook;
-	u_int8_t pf;
+	u8 hook;
+	u8 pf;
 	struct net_device *in;
 	struct net_device *out;
 	struct sock *sk;
@@ -47259,11 +66916,17 @@
 	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
 };
 
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+};
+
 struct nf_hook_ops {
 	nf_hookfn *hook;
 	struct net_device *dev;
 	void *priv;
-	u_int8_t pf;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
 	unsigned int hooknum;
 	int priority;
 };
@@ -47303,13 +66966,15 @@
 	NF_IP6_PRI_LAST = 2147483647,
 };
 
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
 struct socket_alloc {
 	struct socket socket;
 	struct inode vfs_inode;
 	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 };
 
 struct ip_options {
@@ -47383,10 +67048,9 @@
 	__be32 inet_saddr;
 	__s16 uc_ttl;
 	__u16 cmsg_flags;
+	struct ip_options_rcu *inet_opt;
 	__be16 inet_sport;
 	__u16 inet_id;
-	struct ip_options_rcu *inet_opt;
-	int rx_dst_ifindex;
 	__u8 tos;
 	__u8 min_ttl;
 	__u8 mc_ttl;
@@ -47478,7 +67142,6 @@
 	__u8 tclass;
 	__be32 rcv_flowinfo;
 	__u32 dst_cookie;
-	__u32 rx_dst_cookie;
 	struct ipv6_mc_socklist *ipv6_mc_list;
 	struct ipv6_ac_socklist *ipv6_ac_list;
 	struct ipv6_fl_socklist *ipv6_fl_list;
@@ -47563,6 +67226,7 @@
 	__u16 flags;
 	__u16 dsthao;
 	__u16 frag_max_size;
+	__u16 srhoff;
 };
 
 struct ip6_sf_socklist;
@@ -47572,7 +67236,6 @@
 	int ifindex;
 	unsigned int sfmode;
 	struct ipv6_mc_socklist *next;
-	rwlock_t sflock;
 	struct ip6_sf_socklist *sflist;
 	struct callback_head rcu;
 };
@@ -47594,6 +67257,7 @@
 struct ip6_sf_socklist {
 	unsigned int sl_max;
 	unsigned int sl_count;
+	struct callback_head rcu;
 	struct in6_addr sl_addr[0];
 };
 
@@ -47615,6 +67279,43 @@
 	struct net *fl_net;
 };
 
+struct fib_nh_exception {
+	struct fib_nh_exception *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	long unsigned int fnhe_expires;
+	struct rtable *fnhe_rth_input;
+	struct rtable *fnhe_rth_output;
+	long unsigned int fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+};
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception *chain;
+};
+
 struct inet_skb_parm {
 	int iif;
 	struct ip_options opt;
@@ -47684,8 +67385,6 @@
 	DCCP_MAX_STATES = 15,
 };
 
-typedef __s32 sctp_assoc_t;
-
 enum sctp_msg_flags {
 	MSG_NOTIFICATION = 32768,
 };
@@ -47745,12 +67444,6 @@
 	__le32 checksum;
 };
 
-struct sctp_chunkhdr {
-	__u8 type;
-	__u8 flags;
-	__be16 length;
-};
-
 enum sctp_cid {
 	SCTP_CID_DATA = 0,
 	SCTP_CID_INIT = 1,
@@ -47774,6 +67467,7 @@
 	SCTP_CID_I_FWD_TSN = 194,
 	SCTP_CID_ASCONF_ACK = 128,
 	SCTP_CID_RECONF = 130,
+	SCTP_CID_PAD = 132,
 };
 
 struct sctp_paramhdr {
@@ -47830,20 +67524,6 @@
 	__u8 payload[0];
 };
 
-struct sctp_inithdr {
-	__be32 init_tag;
-	__be32 a_rwnd;
-	__be16 num_outbound_streams;
-	__be16 num_inbound_streams;
-	__be32 initial_tsn;
-	__u8 params[0];
-};
-
-struct sctp_init_chunk {
-	struct sctp_chunkhdr chunk_hdr;
-	struct sctp_inithdr init_hdr;
-};
-
 struct sctp_ipv4addr_param {
 	struct sctp_paramhdr param_hdr;
 	struct in_addr addr;
@@ -47977,294 +67657,6 @@
 	__u8 hmac[0];
 };
 
-union sctp_addr {
-	struct sockaddr_in v4;
-	struct sockaddr_in6 v6;
-	struct sockaddr sa;
-};
-
-struct sctp_cookie {
-	__u32 my_vtag;
-	__u32 peer_vtag;
-	__u32 my_ttag;
-	__u32 peer_ttag;
-	ktime_t expiration;
-	__u16 sinit_num_ostreams;
-	__u16 sinit_max_instreams;
-	__u32 initial_tsn;
-	union sctp_addr peer_addr;
-	__u16 my_port;
-	__u8 prsctp_capable;
-	__u8 padding;
-	__u32 adaptation_ind;
-	__u8 auth_random[36];
-	__u8 auth_hmacs[10];
-	__u8 auth_chunks[20];
-	__u32 raw_addr_list_len;
-	struct sctp_init_chunk peer_init[0];
-};
-
-struct sctp_tsnmap {
-	long unsigned int *tsn_map;
-	__u32 base_tsn;
-	__u32 cumulative_tsn_ack_point;
-	__u32 max_tsn_seen;
-	__u16 len;
-	__u16 pending_data;
-	__u16 num_dup_tsns;
-	__be32 dup_tsns[16];
-};
-
-struct sctp_inithdr_host {
-	__u32 init_tag;
-	__u32 a_rwnd;
-	__u16 num_outbound_streams;
-	__u16 num_inbound_streams;
-	__u32 initial_tsn;
-};
-
-enum sctp_state {
-	SCTP_STATE_CLOSED = 0,
-	SCTP_STATE_COOKIE_WAIT = 1,
-	SCTP_STATE_COOKIE_ECHOED = 2,
-	SCTP_STATE_ESTABLISHED = 3,
-	SCTP_STATE_SHUTDOWN_PENDING = 4,
-	SCTP_STATE_SHUTDOWN_SENT = 5,
-	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
-	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
-};
-
-struct sctp_stream_out_ext;
-
-struct sctp_stream_out {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	struct sctp_stream_out_ext *ext;
-	__u8 state;
-};
-
-struct sctp_stream_in {
-	union {
-		__u32 mid;
-		__u16 ssn;
-	};
-	__u32 mid_uo;
-	__u32 fsn;
-	__u32 fsn_uo;
-	char pd_mode;
-	char pd_mode_uo;
-};
-
-struct sctp_stream_interleave;
-
-struct sctp_stream {
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_out type[0];
-	} out;
-	struct {
-		struct __genradix tree;
-		struct sctp_stream_in type[0];
-	} in;
-	__u16 outcnt;
-	__u16 incnt;
-	struct sctp_stream_out *out_curr;
-	union {
-		struct {
-			struct list_head prio_list;
-		};
-		struct {
-			struct list_head rr_list;
-			struct sctp_stream_out_ext *rr_next;
-		};
-	};
-	struct sctp_stream_interleave *si;
-};
-
-struct sctp_sched_ops;
-
-struct sctp_association;
-
-struct sctp_outq {
-	struct sctp_association *asoc;
-	struct list_head out_chunk_list;
-	struct sctp_sched_ops *sched;
-	unsigned int out_qlen;
-	unsigned int error;
-	struct list_head control_chunk_list;
-	struct list_head sacked;
-	struct list_head retransmit;
-	struct list_head abandoned;
-	__u32 outstanding_bytes;
-	char fast_rtx;
-	char cork;
-};
-
-struct sctp_ulpq {
-	char pd_mode;
-	struct sctp_association *asoc;
-	struct sk_buff_head reasm;
-	struct sk_buff_head reasm_uo;
-	struct sk_buff_head lobby;
-};
-
-struct sctp_priv_assoc_stats {
-	struct __kernel_sockaddr_storage obs_rto_ipaddr;
-	__u64 max_obs_rto;
-	__u64 isacks;
-	__u64 osacks;
-	__u64 opackets;
-	__u64 ipackets;
-	__u64 rtxchunks;
-	__u64 outofseqtsns;
-	__u64 idupchunks;
-	__u64 gapcnt;
-	__u64 ouodchunks;
-	__u64 iuodchunks;
-	__u64 oodchunks;
-	__u64 iodchunks;
-	__u64 octrlchunks;
-	__u64 ictrlchunks;
-};
-
-struct sctp_transport;
-
-struct sctp_auth_bytes;
-
-struct sctp_shared_key;
-
-struct sctp_association {
-	struct sctp_ep_common base;
-	struct list_head asocs;
-	sctp_assoc_t assoc_id;
-	struct sctp_endpoint *ep;
-	struct sctp_cookie c;
-	struct {
-		struct list_head transport_addr_list;
-		__u32 rwnd;
-		__u16 transport_count;
-		__u16 port;
-		struct sctp_transport *primary_path;
-		union sctp_addr primary_addr;
-		struct sctp_transport *active_path;
-		struct sctp_transport *retran_path;
-		struct sctp_transport *last_sent_to;
-		struct sctp_transport *last_data_from;
-		struct sctp_tsnmap tsn_map;
-		__be16 addip_disabled_mask;
-		__u16 ecn_capable: 1;
-		__u16 ipv4_address: 1;
-		__u16 ipv6_address: 1;
-		__u16 hostname_address: 1;
-		__u16 asconf_capable: 1;
-		__u16 prsctp_capable: 1;
-		__u16 reconf_capable: 1;
-		__u16 intl_capable: 1;
-		__u16 auth_capable: 1;
-		__u16 sack_needed: 1;
-		__u16 sack_generation: 1;
-		__u16 zero_window_announced: 1;
-		__u32 sack_cnt;
-		__u32 adaptation_ind;
-		struct sctp_inithdr_host i;
-		void *cookie;
-		int cookie_len;
-		__u32 addip_serial;
-		struct sctp_random_param *peer_random;
-		struct sctp_chunks_param *peer_chunks;
-		struct sctp_hmac_algo_param *peer_hmacs;
-	} peer;
-	enum sctp_state state;
-	int overall_error_count;
-	ktime_t cookie_life;
-	long unsigned int rto_initial;
-	long unsigned int rto_max;
-	long unsigned int rto_min;
-	int max_burst;
-	int max_retrans;
-	__u16 pf_retrans;
-	__u16 ps_retrans;
-	__u16 max_init_attempts;
-	__u16 init_retries;
-	long unsigned int max_init_timeo;
-	long unsigned int hbinterval;
-	__u16 pathmaxrxt;
-	__u32 flowlabel;
-	__u8 dscp;
-	__u8 pmtu_pending;
-	__u32 pathmtu;
-	__u32 param_flags;
-	__u32 sackfreq;
-	long unsigned int sackdelay;
-	long unsigned int timeouts[11];
-	struct timer_list timers[11];
-	struct sctp_transport *shutdown_last_sent_to;
-	struct sctp_transport *init_last_sent_to;
-	int shutdown_retries;
-	__u32 next_tsn;
-	__u32 ctsn_ack_point;
-	__u32 adv_peer_ack_point;
-	__u32 highest_sacked;
-	__u32 fast_recovery_exit;
-	__u8 fast_recovery;
-	__u16 unack_data;
-	__u32 rtx_data_chunks;
-	__u32 rwnd;
-	__u32 a_rwnd;
-	__u32 rwnd_over;
-	__u32 rwnd_press;
-	int sndbuf_used;
-	atomic_t rmem_alloc;
-	wait_queue_head_t wait;
-	__u32 frag_point;
-	__u32 user_frag;
-	int init_err_counter;
-	int init_cycle;
-	__u16 default_stream;
-	__u16 default_flags;
-	__u32 default_ppid;
-	__u32 default_context;
-	__u32 default_timetolive;
-	__u32 default_rcv_context;
-	struct sctp_stream stream;
-	struct sctp_outq outqueue;
-	struct sctp_ulpq ulpq;
-	__u32 last_ecne_tsn;
-	__u32 last_cwr_tsn;
-	int numduptsns;
-	struct sctp_chunk *addip_last_asconf;
-	struct list_head asconf_ack_list;
-	struct list_head addip_chunk_list;
-	__u32 addip_serial;
-	int src_out_of_asoc_ok;
-	union sctp_addr *asconf_addr_del_pending;
-	struct sctp_transport *new_transport;
-	struct list_head endpoint_shared_keys;
-	struct sctp_auth_bytes *asoc_shared_key;
-	struct sctp_shared_key *shkey;
-	__u16 default_hmac_id;
-	__u16 active_key_id;
-	__u8 need_ecne: 1;
-	__u8 temp: 1;
-	__u8 pf_expose: 2;
-	__u8 force_delay: 1;
-	__u8 strreset_enable;
-	__u8 strreset_outstanding;
-	__u32 strreset_outseq;
-	__u32 strreset_inseq;
-	__u32 strreset_result[2];
-	struct sctp_chunk *strreset_chunk;
-	struct sctp_priv_assoc_stats stats;
-	int sent_cnt_removable;
-	__u16 subscribe;
-	__u64 abandoned_unsent[3];
-	__u64 abandoned_sent[3];
-	struct callback_head rcu;
-};
-
 struct sctp_auth_bytes {
 	refcount_t refcnt;
 	__u32 len;
@@ -48293,8 +67685,9 @@
 	SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,
 	SCTP_EVENT_TIMEOUT_HEARTBEAT = 7,
 	SCTP_EVENT_TIMEOUT_RECONF = 8,
-	SCTP_EVENT_TIMEOUT_SACK = 9,
-	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,
+	SCTP_EVENT_TIMEOUT_PROBE = 9,
+	SCTP_EVENT_TIMEOUT_SACK = 10,
+	SCTP_EVENT_TIMEOUT_AUTOCLOSE = 11,
 };
 
 enum {
@@ -48418,6 +67811,7 @@
 	__u16 data_accepted: 1;
 	__u16 auth: 1;
 	__u16 has_asconf: 1;
+	__u16 pmtu_probe: 1;
 	__u16 tsn_missing_report: 2;
 	__u16 fast_retransmit: 2;
 };
@@ -48462,7 +67856,7 @@
 	enum sctp_socket_type type;
 	int: 32;
 	struct sctp_pf *pf;
-	struct crypto_shash___2 *hmac;
+	struct crypto_shash *hmac;
 	char *sctp_hmac_alg;
 	struct sctp_endpoint *ep;
 	struct sctp_bind_bucket *bind_hash;
@@ -48476,6 +67870,9 @@
 	__u32 default_rcv_context;
 	int max_burst;
 	__u32 hbinterval;
+	__u32 probe_interval;
+	__be16 udp_port;
+	__be16 encap_port;
 	__u16 pathmaxrxt;
 	short: 16;
 	__u32 flowlabel;
@@ -48534,6 +67931,30 @@
 	struct sctp_af *af;
 };
 
+struct sctp_endpoint {
+	struct sctp_ep_common base;
+	struct hlist_node node;
+	int hashent;
+	struct list_head asocs;
+	__u8 secret_key[32];
+	__u8 *digest;
+	__u32 sndbuf_policy;
+	__u32 rcvbuf_policy;
+	struct crypto_shash **auth_hmacs;
+	struct sctp_hmac_algo_param *auth_hmacs_list;
+	struct sctp_chunks_param *auth_chunk_list;
+	struct list_head endpoint_shared_keys;
+	__u16 active_key_id;
+	__u8 ecn_enable: 1;
+	__u8 auth_enable: 1;
+	__u8 intl_enable: 1;
+	__u8 prsctp_enable: 1;
+	__u8 asconf_enable: 1;
+	__u8 reconf_enable: 1;
+	__u8 strreset_enable;
+	struct callback_head rcu;
+};
+
 struct sctp_signed_cookie {
 	__u8 signature[32];
 	__u32 __pad;
@@ -48551,6 +67972,7 @@
 	union sctp_addr daddr;
 	long unsigned int sent_at;
 	__u64 hb_nonce;
+	__u32 probe_size;
 };
 
 struct sctp_af {
@@ -48564,7 +67986,7 @@
 	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
 	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
 	void (*from_sk)(union sctp_addr *, struct sock *);
-	void (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
+	bool (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
 	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
 	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
 	enum sctp_scope (*scope)(union sctp_addr *);
@@ -48625,12 +68047,14 @@
 	struct dst_entry *dst;
 	union sctp_addr saddr;
 	long unsigned int hbinterval;
+	long unsigned int probe_interval;
 	long unsigned int sackdelay;
 	__u32 sackfreq;
 	atomic_t mtu_info;
 	ktime_t last_time_heard;
 	long unsigned int last_time_sent;
 	long unsigned int last_time_ecne_reduced;
+	__be16 encap_port;
 	__u16 pathmaxrxt;
 	__u32 flowlabel;
 	__u8 dscp;
@@ -48645,6 +68069,7 @@
 	struct timer_list hb_timer;
 	struct timer_list proto_unreach_timer;
 	struct timer_list reconf_timer;
+	struct timer_list probe_timer;
 	struct list_head transmitted;
 	struct sctp_packet packet;
 	struct list_head send_ready;
@@ -48654,6 +68079,13 @@
 		char cycling_changeover;
 		char cacc_saw_newack;
 	} cacc;
+	struct {
+		__u16 pmtu;
+		__u16 probe_size;
+		__u16 probe_high;
+		__u8 probe_count;
+		__u8 state;
+	} pl;
 	__u64 hb_nonce;
 	struct callback_head rcu;
 };
@@ -48723,7 +68155,6 @@
 };
 
 struct superblock_security_struct {
-	struct super_block *sb;
 	u32 sid;
 	u32 def_sid;
 	u32 mntpoint_sid;
@@ -48769,6 +68200,10 @@
 	u32 sid;
 };
 
+struct ib_security_struct {
+	u32 sid;
+};
+
 struct bpf_security_struct {
 	u32 sid;
 };
@@ -48777,11 +68212,35 @@
 	u32 sid;
 };
 
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
 struct selinux_mnt_opts {
-	const char *fscontext;
-	const char *context;
-	const char *rootcontext;
-	const char *defcontext;
+	u32 fscontext_sid;
+	u32 context_sid;
+	u32 rootcontext_sid;
+	u32 defcontext_sid;
 };
 
 enum {
@@ -48793,6 +68252,13 @@
 	Opt_seclabel = 4,
 };
 
+struct selinux_policy_convert_data;
+
+struct selinux_load_state {
+	struct selinux_policy *policy;
+	struct selinux_policy_convert_data *convert_data;
+};
+
 enum sel_inos {
 	SEL_ROOT_INO = 2,
 	SEL_LOAD = 3,
@@ -48857,34 +68323,6 @@
 };
 
 enum {
-	XFRM_MSG_BASE = 16,
-	XFRM_MSG_NEWSA = 16,
-	XFRM_MSG_DELSA = 17,
-	XFRM_MSG_GETSA = 18,
-	XFRM_MSG_NEWPOLICY = 19,
-	XFRM_MSG_DELPOLICY = 20,
-	XFRM_MSG_GETPOLICY = 21,
-	XFRM_MSG_ALLOCSPI = 22,
-	XFRM_MSG_ACQUIRE = 23,
-	XFRM_MSG_EXPIRE = 24,
-	XFRM_MSG_UPDPOLICY = 25,
-	XFRM_MSG_UPDSA = 26,
-	XFRM_MSG_POLEXPIRE = 27,
-	XFRM_MSG_FLUSHSA = 28,
-	XFRM_MSG_FLUSHPOLICY = 29,
-	XFRM_MSG_NEWAE = 30,
-	XFRM_MSG_GETAE = 31,
-	XFRM_MSG_REPORT = 32,
-	XFRM_MSG_MIGRATE = 33,
-	XFRM_MSG_NEWSADINFO = 34,
-	XFRM_MSG_GETSADINFO = 35,
-	XFRM_MSG_NEWSPDINFO = 36,
-	XFRM_MSG_GETSPDINFO = 37,
-	XFRM_MSG_MAPPING = 38,
-	__XFRM_MSG_MAX = 39,
-};
-
-enum {
 	RTM_BASE = 16,
 	RTM_NEWLINK = 16,
 	RTM_DELLINK = 17,
@@ -48937,6 +68375,7 @@
 	RTM_GETNSID = 90,
 	RTM_NEWSTATS = 92,
 	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
 	RTM_NEWCACHEREPORT = 96,
 	RTM_NEWCHAIN = 100,
 	RTM_DELCHAIN = 101,
@@ -48950,7 +68389,21 @@
 	RTM_NEWVLAN = 112,
 	RTM_DELVLAN = 113,
 	RTM_GETVLAN = 114,
-	__RTM_MAX = 115,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
 };
 
 struct nlmsg_perm {
@@ -49067,7 +68520,7 @@
 	struct mls_level level[2];
 };
 
-struct context {
+struct context___2 {
 	u32 user;
 	u32 role;
 	u32 type;
@@ -49081,7 +68534,7 @@
 struct sidtab_entry {
 	u32 sid;
 	u32 hash;
-	struct context context;
+	struct context___2 context;
 	struct sidtab_str_cache *cache;
 	struct hlist_node list;
 };
@@ -49119,7 +68572,7 @@
 struct sidtab;
 
 struct sidtab_convert_params {
-	int (*func)(struct context *, struct context *, void *);
+	int (*func)(struct context___2 *, struct context___2 *, void *);
 	void *args;
 	struct sidtab *target;
 };
@@ -49128,6 +68581,7 @@
 	union sidtab_entry_inner roots[4];
 	u32 count;
 	struct sidtab_convert_params *convert;
+	bool frozen;
 	spinlock_t lock;
 	u32 cache_free_slots;
 	struct list_head cache_lru_list;
@@ -49273,7 +68727,7 @@
 		u32 sclass;
 		u32 behavior;
 	} v;
-	struct context context[2];
+	struct context___2 context[2];
 	u32 sid[2];
 	struct ocontext *next;
 };
@@ -49409,21 +68863,26 @@
 	u32 latest_granting;
 };
 
-struct selinux_mapping {
-	u16 value;
-	unsigned int num_perms;
-	u32 perms[32];
-};
-
 struct convert_context_args {
 	struct selinux_state *state;
 	struct policydb *oldp;
 	struct policydb *newp;
 };
 
+struct selinux_policy_convert_data {
+	struct convert_context_args args;
+	struct sidtab_convert_params sidtab_params;
+};
+
+struct selinux_mapping {
+	u16 value;
+	unsigned int num_perms;
+	u32 perms[32];
+};
+
 struct selinux_audit_rule {
 	u32 au_seqno;
-	struct context au_ctxt;
+	struct context___2 au_ctxt;
 };
 
 struct cond_insertf_data {
@@ -49432,436 +68891,6 @@
 	struct cond_av_list *other;
 };
 
-struct rt6key {
-	struct in6_addr addr;
-	int plen;
-};
-
-struct rtable;
-
-struct fnhe_hash_bucket;
-
-struct fib_nh_common {
-	struct net_device *nhc_dev;
-	int nhc_oif;
-	unsigned char nhc_scope;
-	u8 nhc_family;
-	u8 nhc_gw_family;
-	unsigned char nhc_flags;
-	struct lwtunnel_state *nhc_lwtstate;
-	union {
-		__be32 ipv4;
-		struct in6_addr ipv6;
-	} nhc_gw;
-	int nhc_weight;
-	atomic_t nhc_upper_bound;
-	struct rtable **nhc_pcpu_rth_output;
-	struct rtable *nhc_rth_input;
-	struct fnhe_hash_bucket *nhc_exceptions;
-};
-
-struct rt6_exception_bucket;
-
-struct fib6_nh {
-	struct fib_nh_common nh_common;
-	long unsigned int last_probe;
-	struct rt6_info **rt6i_pcpu;
-	struct rt6_exception_bucket *rt6i_exception_bucket;
-};
-
-struct fib6_node;
-
-struct dst_metrics;
-
-struct nexthop;
-
-struct fib6_info {
-	struct fib6_table *fib6_table;
-	struct fib6_info *fib6_next;
-	struct fib6_node *fib6_node;
-	union {
-		struct list_head fib6_siblings;
-		struct list_head nh_list;
-	};
-	unsigned int fib6_nsiblings;
-	refcount_t fib6_ref;
-	long unsigned int expires;
-	struct dst_metrics *fib6_metrics;
-	struct rt6key fib6_dst;
-	u32 fib6_flags;
-	struct rt6key fib6_src;
-	struct rt6key fib6_prefsrc;
-	u32 fib6_metric;
-	u8 fib6_protocol;
-	u8 fib6_type;
-	u8 should_flush: 1;
-	u8 dst_nocount: 1;
-	u8 dst_nopolicy: 1;
-	u8 fib6_destroying: 1;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 2;
-	struct callback_head rcu;
-	struct nexthop *nh;
-	struct fib6_nh fib6_nh[0];
-};
-
-struct uncached_list;
-
-struct rt6_info {
-	struct dst_entry dst;
-	struct fib6_info *from;
-	int sernum;
-	struct rt6key rt6i_dst;
-	struct rt6key rt6i_src;
-	struct in6_addr rt6i_gateway;
-	struct inet6_dev *rt6i_idev;
-	u32 rt6i_flags;
-	struct list_head rt6i_uncached;
-	struct uncached_list *rt6i_uncached_list;
-	short unsigned int rt6i_nfheader_len;
-};
-
-struct rt6_statistics {
-	__u32 fib_nodes;
-	__u32 fib_route_nodes;
-	__u32 fib_rt_entries;
-	__u32 fib_rt_cache;
-	__u32 fib_discarded_routes;
-	atomic_t fib_rt_alloc;
-	atomic_t fib_rt_uncache;
-};
-
-struct fib6_node {
-	struct fib6_node *parent;
-	struct fib6_node *left;
-	struct fib6_node *right;
-	struct fib6_node *subtree;
-	struct fib6_info *leaf;
-	__u16 fn_bit;
-	__u16 fn_flags;
-	int fn_sernum;
-	struct fib6_info *rr_ptr;
-	struct callback_head rcu;
-};
-
-struct fib6_table {
-	struct hlist_node tb6_hlist;
-	u32 tb6_id;
-	spinlock_t tb6_lock;
-	struct fib6_node tb6_root;
-	struct inet_peer_base tb6_peers;
-	unsigned int flags;
-	unsigned int fib_seq;
-};
-
-typedef union {
-	__be32 a4;
-	__be32 a6[4];
-	struct in6_addr in6;
-} xfrm_address_t;
-
-struct xfrm_id {
-	xfrm_address_t daddr;
-	__be32 spi;
-	__u8 proto;
-};
-
-struct xfrm_selector {
-	xfrm_address_t daddr;
-	xfrm_address_t saddr;
-	__be16 dport;
-	__be16 dport_mask;
-	__be16 sport;
-	__be16 sport_mask;
-	__u16 family;
-	__u8 prefixlen_d;
-	__u8 prefixlen_s;
-	__u8 proto;
-	int ifindex;
-	__kernel_uid32_t user;
-};
-
-struct xfrm_lifetime_cfg {
-	__u64 soft_byte_limit;
-	__u64 hard_byte_limit;
-	__u64 soft_packet_limit;
-	__u64 hard_packet_limit;
-	__u64 soft_add_expires_seconds;
-	__u64 hard_add_expires_seconds;
-	__u64 soft_use_expires_seconds;
-	__u64 hard_use_expires_seconds;
-};
-
-struct xfrm_lifetime_cur {
-	__u64 bytes;
-	__u64 packets;
-	__u64 add_time;
-	__u64 use_time;
-};
-
-struct xfrm_replay_state {
-	__u32 oseq;
-	__u32 seq;
-	__u32 bitmap;
-};
-
-struct xfrm_replay_state_esn {
-	unsigned int bmp_len;
-	__u32 oseq;
-	__u32 seq;
-	__u32 oseq_hi;
-	__u32 seq_hi;
-	__u32 replay_window;
-	__u32 bmp[0];
-};
-
-struct xfrm_algo {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_auth {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_trunc_len;
-	char alg_key[0];
-};
-
-struct xfrm_algo_aead {
-	char alg_name[64];
-	unsigned int alg_key_len;
-	unsigned int alg_icv_len;
-	char alg_key[0];
-};
-
-struct xfrm_stats {
-	__u32 replay_window;
-	__u32 replay;
-	__u32 integrity_failed;
-};
-
-enum {
-	XFRM_POLICY_TYPE_MAIN = 0,
-	XFRM_POLICY_TYPE_SUB = 1,
-	XFRM_POLICY_TYPE_MAX = 2,
-	XFRM_POLICY_TYPE_ANY = 255,
-};
-
-struct xfrm_encap_tmpl {
-	__u16 encap_type;
-	__be16 encap_sport;
-	__be16 encap_dport;
-	xfrm_address_t encap_oa;
-};
-
-enum xfrm_attr_type_t {
-	XFRMA_UNSPEC = 0,
-	XFRMA_ALG_AUTH = 1,
-	XFRMA_ALG_CRYPT = 2,
-	XFRMA_ALG_COMP = 3,
-	XFRMA_ENCAP = 4,
-	XFRMA_TMPL = 5,
-	XFRMA_SA = 6,
-	XFRMA_POLICY = 7,
-	XFRMA_SEC_CTX = 8,
-	XFRMA_LTIME_VAL = 9,
-	XFRMA_REPLAY_VAL = 10,
-	XFRMA_REPLAY_THRESH = 11,
-	XFRMA_ETIMER_THRESH = 12,
-	XFRMA_SRCADDR = 13,
-	XFRMA_COADDR = 14,
-	XFRMA_LASTUSED = 15,
-	XFRMA_POLICY_TYPE = 16,
-	XFRMA_MIGRATE = 17,
-	XFRMA_ALG_AEAD = 18,
-	XFRMA_KMADDRESS = 19,
-	XFRMA_ALG_AUTH_TRUNC = 20,
-	XFRMA_MARK = 21,
-	XFRMA_TFCPAD = 22,
-	XFRMA_REPLAY_ESN_VAL = 23,
-	XFRMA_SA_EXTRA_FLAGS = 24,
-	XFRMA_PROTO = 25,
-	XFRMA_ADDRESS_FILTER = 26,
-	XFRMA_PAD = 27,
-	XFRMA_OFFLOAD_DEV = 28,
-	XFRMA_SET_MARK = 29,
-	XFRMA_SET_MARK_MASK = 30,
-	XFRMA_IF_ID = 31,
-	__XFRMA_MAX = 32,
-};
-
-struct xfrm_mark {
-	__u32 v;
-	__u32 m;
-};
-
-struct xfrm_address_filter {
-	xfrm_address_t saddr;
-	xfrm_address_t daddr;
-	__u16 family;
-	__u8 splen;
-	__u8 dplen;
-};
-
-struct xfrm_state_walk {
-	struct list_head all;
-	u8 state;
-	u8 dying;
-	u8 proto;
-	u32 seq;
-	struct xfrm_address_filter *filter;
-};
-
-struct xfrm_state_offload {
-	struct net_device *dev;
-	struct net_device *real_dev;
-	long unsigned int offload_handle;
-	unsigned int num_exthdrs;
-	u8 flags;
-};
-
-struct xfrm_mode {
-	u8 encap;
-	u8 family;
-	u8 flags;
-};
-
-struct xfrm_replay;
-
-struct xfrm_type;
-
-struct xfrm_type_offload;
-
-struct xfrm_state {
-	possible_net_t xs_net;
-	union {
-		struct hlist_node gclist;
-		struct hlist_node bydst;
-	};
-	struct hlist_node bysrc;
-	struct hlist_node byspi;
-	refcount_t refcnt;
-	spinlock_t lock;
-	struct xfrm_id id;
-	struct xfrm_selector sel;
-	struct xfrm_mark mark;
-	u32 if_id;
-	u32 tfcpad;
-	u32 genid;
-	struct xfrm_state_walk km;
-	struct {
-		u32 reqid;
-		u8 mode;
-		u8 replay_window;
-		u8 aalgo;
-		u8 ealgo;
-		u8 calgo;
-		u8 flags;
-		u16 family;
-		xfrm_address_t saddr;
-		int header_len;
-		int trailer_len;
-		u32 extra_flags;
-		struct xfrm_mark smark;
-	} props;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_algo_auth *aalg;
-	struct xfrm_algo *ealg;
-	struct xfrm_algo *calg;
-	struct xfrm_algo_aead *aead;
-	const char *geniv;
-	struct xfrm_encap_tmpl *encap;
-	struct sock *encap_sk;
-	xfrm_address_t *coaddr;
-	struct xfrm_state *tunnel;
-	atomic_t tunnel_users;
-	struct xfrm_replay_state replay;
-	struct xfrm_replay_state_esn *replay_esn;
-	struct xfrm_replay_state preplay;
-	struct xfrm_replay_state_esn *preplay_esn;
-	const struct xfrm_replay *repl;
-	u32 xflags;
-	u32 replay_maxage;
-	u32 replay_maxdiff;
-	struct timer_list rtimer;
-	struct xfrm_stats stats;
-	struct xfrm_lifetime_cur curlft;
-	struct hrtimer mtimer;
-	struct xfrm_state_offload xso;
-	long int saved_tmo;
-	time64_t lastused;
-	struct page_frag xfrag;
-	const struct xfrm_type *type;
-	struct xfrm_mode inner_mode;
-	struct xfrm_mode inner_mode_iaf;
-	struct xfrm_mode outer_mode;
-	const struct xfrm_type_offload *type_offload;
-	struct xfrm_sec_ctx *security;
-	void *data;
-};
-
-struct dst_metrics {
-	u32 metrics[17];
-	refcount_t refcnt;
-};
-
-struct xfrm_policy_walk_entry {
-	struct list_head all;
-	u8 dead;
-};
-
-struct xfrm_policy_queue {
-	struct sk_buff_head hold_queue;
-	struct timer_list hold_timer;
-	long unsigned int timeout;
-};
-
-struct xfrm_tmpl {
-	struct xfrm_id id;
-	xfrm_address_t saddr;
-	short unsigned int encap_family;
-	u32 reqid;
-	u8 mode;
-	u8 share;
-	u8 optional;
-	u8 allalgs;
-	u32 aalgos;
-	u32 ealgos;
-	u32 calgos;
-};
-
-struct xfrm_policy {
-	possible_net_t xp_net;
-	struct hlist_node bydst;
-	struct hlist_node byidx;
-	rwlock_t lock;
-	refcount_t refcnt;
-	u32 pos;
-	struct timer_list timer;
-	atomic_t genid;
-	u32 priority;
-	u32 index;
-	u32 if_id;
-	struct xfrm_mark mark;
-	struct xfrm_selector selector;
-	struct xfrm_lifetime_cfg lft;
-	struct xfrm_lifetime_cur curlft;
-	struct xfrm_policy_walk_entry walk;
-	struct xfrm_policy_queue polq;
-	bool bydst_reinsert;
-	u8 type;
-	u8 action;
-	u8 flags;
-	u8 xfrm_nr;
-	u16 family;
-	struct xfrm_sec_ctx *security;
-	struct xfrm_tmpl xfrm_vec[6];
-	struct hlist_node bydst_inexact_list;
-	struct callback_head rcu;
-};
-
 struct udp_hslot;
 
 struct udp_table {
@@ -49871,78 +68900,6 @@
 	unsigned int log;
 };
 
-struct fib_nh_exception {
-	struct fib_nh_exception *fnhe_next;
-	int fnhe_genid;
-	__be32 fnhe_daddr;
-	u32 fnhe_pmtu;
-	bool fnhe_mtu_locked;
-	__be32 fnhe_gw;
-	long unsigned int fnhe_expires;
-	struct rtable *fnhe_rth_input;
-	struct rtable *fnhe_rth_output;
-	long unsigned int fnhe_stamp;
-	struct callback_head rcu;
-};
-
-struct rtable {
-	struct dst_entry dst;
-	int rt_genid;
-	unsigned int rt_flags;
-	__u16 rt_type;
-	__u8 rt_is_input;
-	__u8 rt_uses_gateway;
-	int rt_iif;
-	u8 rt_gw_family;
-	union {
-		__be32 rt_gw4;
-		struct in6_addr rt_gw6;
-	};
-	u32 rt_mtu_locked: 1;
-	u32 rt_pmtu: 31;
-	struct list_head rt_uncached;
-	struct uncached_list *rt_uncached_list;
-};
-
-struct fnhe_hash_bucket {
-	struct fib_nh_exception *chain;
-};
-
-struct rt6_exception_bucket {
-	struct hlist_head chain;
-	int depth;
-};
-
-struct xfrm_replay {
-	void (*advance)(struct xfrm_state *, __be32);
-	int (*check)(struct xfrm_state *, struct sk_buff *, __be32);
-	int (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);
-	void (*notify)(struct xfrm_state *, int);
-	int (*overflow)(struct xfrm_state *, struct sk_buff *);
-};
-
-struct xfrm_type {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	u8 flags;
-	int (*init_state)(struct xfrm_state *);
-	void (*destructor)(struct xfrm_state *);
-	int (*input)(struct xfrm_state *, struct sk_buff *);
-	int (*output)(struct xfrm_state *, struct sk_buff *);
-	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
-	int (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);
-};
-
-struct xfrm_type_offload {
-	char *description;
-	struct module *owner;
-	u8 proto;
-	void (*encap)(struct xfrm_state *, struct sk_buff *);
-	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
-	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
-};
-
 struct xfrm_dst {
 	union {
 		struct dst_entry dst;
@@ -49971,6 +68928,7 @@
 	__u32 flags;
 	__u32 status;
 	__u8 proto;
+	__u8 inner_ipproto;
 };
 
 struct sec_path {
@@ -49986,6 +68944,23 @@
 	spinlock_t lock;
 };
 
+struct pkey_security_struct {
+	u64 subnet_prefix;
+	u16 pkey;
+	u32 sid;
+};
+
+struct sel_ib_pkey_bkt {
+	int size;
+	struct list_head list;
+};
+
+struct sel_ib_pkey {
+	struct pkey_security_struct psec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
 struct smack_audit_data {
 	const char *function;
 	char *subject;
@@ -50157,7 +69132,6 @@
 struct unix_address {
 	refcount_t refcnt;
 	int len;
-	unsigned int hash;
 	struct sockaddr_un name[0];
 };
 
@@ -50179,34 +69153,726 @@
 	struct socket_wq peer_wq;
 	wait_queue_entry_t peer_wake;
 	struct scm_stat scm_stat;
-	long: 32;
-	long: 64;
+	struct sk_buff *oob_skb;
 	long: 64;
 };
 
-typedef unsigned char Byte;
-
-typedef long unsigned int uLong;
-
-struct internal_state;
-
-struct z_stream_s {
-	const Byte *next_in;
-	uLong avail_in;
-	uLong total_in;
-	Byte *next_out;
-	uLong avail_out;
-	uLong total_out;
-	char *msg;
-	struct internal_state *state;
-	void *workspace;
-	int data_type;
-	uLong adler;
-	uLong reserved;
+enum tomoyo_conditions_index {
+	TOMOYO_TASK_UID = 0,
+	TOMOYO_TASK_EUID = 1,
+	TOMOYO_TASK_SUID = 2,
+	TOMOYO_TASK_FSUID = 3,
+	TOMOYO_TASK_GID = 4,
+	TOMOYO_TASK_EGID = 5,
+	TOMOYO_TASK_SGID = 6,
+	TOMOYO_TASK_FSGID = 7,
+	TOMOYO_TASK_PID = 8,
+	TOMOYO_TASK_PPID = 9,
+	TOMOYO_EXEC_ARGC = 10,
+	TOMOYO_EXEC_ENVC = 11,
+	TOMOYO_TYPE_IS_SOCKET = 12,
+	TOMOYO_TYPE_IS_SYMLINK = 13,
+	TOMOYO_TYPE_IS_FILE = 14,
+	TOMOYO_TYPE_IS_BLOCK_DEV = 15,
+	TOMOYO_TYPE_IS_DIRECTORY = 16,
+	TOMOYO_TYPE_IS_CHAR_DEV = 17,
+	TOMOYO_TYPE_IS_FIFO = 18,
+	TOMOYO_MODE_SETUID = 19,
+	TOMOYO_MODE_SETGID = 20,
+	TOMOYO_MODE_STICKY = 21,
+	TOMOYO_MODE_OWNER_READ = 22,
+	TOMOYO_MODE_OWNER_WRITE = 23,
+	TOMOYO_MODE_OWNER_EXECUTE = 24,
+	TOMOYO_MODE_GROUP_READ = 25,
+	TOMOYO_MODE_GROUP_WRITE = 26,
+	TOMOYO_MODE_GROUP_EXECUTE = 27,
+	TOMOYO_MODE_OTHERS_READ = 28,
+	TOMOYO_MODE_OTHERS_WRITE = 29,
+	TOMOYO_MODE_OTHERS_EXECUTE = 30,
+	TOMOYO_EXEC_REALPATH = 31,
+	TOMOYO_SYMLINK_TARGET = 32,
+	TOMOYO_PATH1_UID = 33,
+	TOMOYO_PATH1_GID = 34,
+	TOMOYO_PATH1_INO = 35,
+	TOMOYO_PATH1_MAJOR = 36,
+	TOMOYO_PATH1_MINOR = 37,
+	TOMOYO_PATH1_PERM = 38,
+	TOMOYO_PATH1_TYPE = 39,
+	TOMOYO_PATH1_DEV_MAJOR = 40,
+	TOMOYO_PATH1_DEV_MINOR = 41,
+	TOMOYO_PATH2_UID = 42,
+	TOMOYO_PATH2_GID = 43,
+	TOMOYO_PATH2_INO = 44,
+	TOMOYO_PATH2_MAJOR = 45,
+	TOMOYO_PATH2_MINOR = 46,
+	TOMOYO_PATH2_PERM = 47,
+	TOMOYO_PATH2_TYPE = 48,
+	TOMOYO_PATH2_DEV_MAJOR = 49,
+	TOMOYO_PATH2_DEV_MINOR = 50,
+	TOMOYO_PATH1_PARENT_UID = 51,
+	TOMOYO_PATH1_PARENT_GID = 52,
+	TOMOYO_PATH1_PARENT_INO = 53,
+	TOMOYO_PATH1_PARENT_PERM = 54,
+	TOMOYO_PATH2_PARENT_UID = 55,
+	TOMOYO_PATH2_PARENT_GID = 56,
+	TOMOYO_PATH2_PARENT_INO = 57,
+	TOMOYO_PATH2_PARENT_PERM = 58,
+	TOMOYO_MAX_CONDITION_KEYWORD = 59,
+	TOMOYO_NUMBER_UNION = 60,
+	TOMOYO_NAME_UNION = 61,
+	TOMOYO_ARGV_ENTRY = 62,
+	TOMOYO_ENVP_ENTRY = 63,
 };
 
-struct internal_state {
-	int dummy;
+enum tomoyo_path_stat_index {
+	TOMOYO_PATH1 = 0,
+	TOMOYO_PATH1_PARENT = 1,
+	TOMOYO_PATH2 = 2,
+	TOMOYO_PATH2_PARENT = 3,
+	TOMOYO_MAX_PATH_STAT = 4,
+};
+
+enum tomoyo_mode_index {
+	TOMOYO_CONFIG_DISABLED = 0,
+	TOMOYO_CONFIG_LEARNING = 1,
+	TOMOYO_CONFIG_PERMISSIVE = 2,
+	TOMOYO_CONFIG_ENFORCING = 3,
+	TOMOYO_CONFIG_MAX_MODE = 4,
+	TOMOYO_CONFIG_WANT_REJECT_LOG = 64,
+	TOMOYO_CONFIG_WANT_GRANT_LOG = 128,
+	TOMOYO_CONFIG_USE_DEFAULT = 255,
+};
+
+enum tomoyo_policy_id {
+	TOMOYO_ID_GROUP = 0,
+	TOMOYO_ID_ADDRESS_GROUP = 1,
+	TOMOYO_ID_PATH_GROUP = 2,
+	TOMOYO_ID_NUMBER_GROUP = 3,
+	TOMOYO_ID_TRANSITION_CONTROL = 4,
+	TOMOYO_ID_AGGREGATOR = 5,
+	TOMOYO_ID_MANAGER = 6,
+	TOMOYO_ID_CONDITION = 7,
+	TOMOYO_ID_NAME = 8,
+	TOMOYO_ID_ACL = 9,
+	TOMOYO_ID_DOMAIN = 10,
+	TOMOYO_MAX_POLICY = 11,
+};
+
+enum tomoyo_domain_info_flags_index {
+	TOMOYO_DIF_QUOTA_WARNED = 0,
+	TOMOYO_DIF_TRANSITION_FAILED = 1,
+	TOMOYO_MAX_DOMAIN_INFO_FLAGS = 2,
+};
+
+enum tomoyo_grant_log {
+	TOMOYO_GRANTLOG_AUTO = 0,
+	TOMOYO_GRANTLOG_NO = 1,
+	TOMOYO_GRANTLOG_YES = 2,
+};
+
+enum tomoyo_group_id {
+	TOMOYO_PATH_GROUP = 0,
+	TOMOYO_NUMBER_GROUP = 1,
+	TOMOYO_ADDRESS_GROUP = 2,
+	TOMOYO_MAX_GROUP = 3,
+};
+
+enum tomoyo_path_acl_index {
+	TOMOYO_TYPE_EXECUTE = 0,
+	TOMOYO_TYPE_READ = 1,
+	TOMOYO_TYPE_WRITE = 2,
+	TOMOYO_TYPE_APPEND = 3,
+	TOMOYO_TYPE_UNLINK = 4,
+	TOMOYO_TYPE_GETATTR = 5,
+	TOMOYO_TYPE_RMDIR = 6,
+	TOMOYO_TYPE_TRUNCATE = 7,
+	TOMOYO_TYPE_SYMLINK = 8,
+	TOMOYO_TYPE_CHROOT = 9,
+	TOMOYO_TYPE_UMOUNT = 10,
+	TOMOYO_MAX_PATH_OPERATION = 11,
+};
+
+enum tomoyo_memory_stat_type {
+	TOMOYO_MEMORY_POLICY = 0,
+	TOMOYO_MEMORY_AUDIT = 1,
+	TOMOYO_MEMORY_QUERY = 2,
+	TOMOYO_MAX_MEMORY_STAT = 3,
+};
+
+enum tomoyo_mkdev_acl_index {
+	TOMOYO_TYPE_MKBLOCK = 0,
+	TOMOYO_TYPE_MKCHAR = 1,
+	TOMOYO_MAX_MKDEV_OPERATION = 2,
+};
+
+enum tomoyo_network_acl_index {
+	TOMOYO_NETWORK_BIND = 0,
+	TOMOYO_NETWORK_LISTEN = 1,
+	TOMOYO_NETWORK_CONNECT = 2,
+	TOMOYO_NETWORK_SEND = 3,
+	TOMOYO_MAX_NETWORK_OPERATION = 4,
+};
+
+enum tomoyo_path2_acl_index {
+	TOMOYO_TYPE_LINK = 0,
+	TOMOYO_TYPE_RENAME = 1,
+	TOMOYO_TYPE_PIVOT_ROOT = 2,
+	TOMOYO_MAX_PATH2_OPERATION = 3,
+};
+
+enum tomoyo_path_number_acl_index {
+	TOMOYO_TYPE_CREATE = 0,
+	TOMOYO_TYPE_MKDIR = 1,
+	TOMOYO_TYPE_MKFIFO = 2,
+	TOMOYO_TYPE_MKSOCK = 3,
+	TOMOYO_TYPE_IOCTL = 4,
+	TOMOYO_TYPE_CHMOD = 5,
+	TOMOYO_TYPE_CHOWN = 6,
+	TOMOYO_TYPE_CHGRP = 7,
+	TOMOYO_MAX_PATH_NUMBER_OPERATION = 8,
+};
+
+enum tomoyo_securityfs_interface_index {
+	TOMOYO_DOMAINPOLICY = 0,
+	TOMOYO_EXCEPTIONPOLICY = 1,
+	TOMOYO_PROCESS_STATUS = 2,
+	TOMOYO_STAT = 3,
+	TOMOYO_AUDIT = 4,
+	TOMOYO_VERSION = 5,
+	TOMOYO_PROFILE = 6,
+	TOMOYO_QUERY = 7,
+	TOMOYO_MANAGER = 8,
+};
+
+enum tomoyo_mac_index {
+	TOMOYO_MAC_FILE_EXECUTE = 0,
+	TOMOYO_MAC_FILE_OPEN = 1,
+	TOMOYO_MAC_FILE_CREATE = 2,
+	TOMOYO_MAC_FILE_UNLINK = 3,
+	TOMOYO_MAC_FILE_GETATTR = 4,
+	TOMOYO_MAC_FILE_MKDIR = 5,
+	TOMOYO_MAC_FILE_RMDIR = 6,
+	TOMOYO_MAC_FILE_MKFIFO = 7,
+	TOMOYO_MAC_FILE_MKSOCK = 8,
+	TOMOYO_MAC_FILE_TRUNCATE = 9,
+	TOMOYO_MAC_FILE_SYMLINK = 10,
+	TOMOYO_MAC_FILE_MKBLOCK = 11,
+	TOMOYO_MAC_FILE_MKCHAR = 12,
+	TOMOYO_MAC_FILE_LINK = 13,
+	TOMOYO_MAC_FILE_RENAME = 14,
+	TOMOYO_MAC_FILE_CHMOD = 15,
+	TOMOYO_MAC_FILE_CHOWN = 16,
+	TOMOYO_MAC_FILE_CHGRP = 17,
+	TOMOYO_MAC_FILE_IOCTL = 18,
+	TOMOYO_MAC_FILE_CHROOT = 19,
+	TOMOYO_MAC_FILE_MOUNT = 20,
+	TOMOYO_MAC_FILE_UMOUNT = 21,
+	TOMOYO_MAC_FILE_PIVOT_ROOT = 22,
+	TOMOYO_MAC_NETWORK_INET_STREAM_BIND = 23,
+	TOMOYO_MAC_NETWORK_INET_STREAM_LISTEN = 24,
+	TOMOYO_MAC_NETWORK_INET_STREAM_CONNECT = 25,
+	TOMOYO_MAC_NETWORK_INET_DGRAM_BIND = 26,
+	TOMOYO_MAC_NETWORK_INET_DGRAM_SEND = 27,
+	TOMOYO_MAC_NETWORK_INET_RAW_BIND = 28,
+	TOMOYO_MAC_NETWORK_INET_RAW_SEND = 29,
+	TOMOYO_MAC_NETWORK_UNIX_STREAM_BIND = 30,
+	TOMOYO_MAC_NETWORK_UNIX_STREAM_LISTEN = 31,
+	TOMOYO_MAC_NETWORK_UNIX_STREAM_CONNECT = 32,
+	TOMOYO_MAC_NETWORK_UNIX_DGRAM_BIND = 33,
+	TOMOYO_MAC_NETWORK_UNIX_DGRAM_SEND = 34,
+	TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_BIND = 35,
+	TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_LISTEN = 36,
+	TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_CONNECT = 37,
+	TOMOYO_MAC_ENVIRON = 38,
+	TOMOYO_MAX_MAC_INDEX = 39,
+};
+
+enum tomoyo_mac_category_index {
+	TOMOYO_MAC_CATEGORY_FILE = 0,
+	TOMOYO_MAC_CATEGORY_NETWORK = 1,
+	TOMOYO_MAC_CATEGORY_MISC = 2,
+	TOMOYO_MAX_MAC_CATEGORY_INDEX = 3,
+};
+
+enum tomoyo_pref_index {
+	TOMOYO_PREF_MAX_AUDIT_LOG = 0,
+	TOMOYO_PREF_MAX_LEARNING_ENTRY = 1,
+	TOMOYO_MAX_PREF = 2,
+};
+
+struct tomoyo_shared_acl_head {
+	struct list_head list;
+	atomic_t users;
+} __attribute__((packed));
+
+struct tomoyo_path_info {
+	const char *name;
+	u32 hash;
+	u16 const_len;
+	bool is_dir;
+	bool is_patterned;
+};
+
+struct tomoyo_obj_info;
+
+struct tomoyo_execve;
+
+struct tomoyo_domain_info;
+
+struct tomoyo_acl_info;
+
+struct tomoyo_request_info {
+	struct tomoyo_obj_info *obj;
+	struct tomoyo_execve *ee;
+	struct tomoyo_domain_info *domain;
+	union {
+		struct {
+			const struct tomoyo_path_info *filename;
+			const struct tomoyo_path_info *matched_path;
+			u8 operation;
+		} path;
+		struct {
+			const struct tomoyo_path_info *filename1;
+			const struct tomoyo_path_info *filename2;
+			u8 operation;
+		} path2;
+		struct {
+			const struct tomoyo_path_info *filename;
+			unsigned int mode;
+			unsigned int major;
+			unsigned int minor;
+			u8 operation;
+		} mkdev;
+		struct {
+			const struct tomoyo_path_info *filename;
+			long unsigned int number;
+			u8 operation;
+		} path_number;
+		struct {
+			const struct tomoyo_path_info *name;
+		} environ;
+		struct {
+			const __be32 *address;
+			u16 port;
+			u8 protocol;
+			u8 operation;
+			bool is_ipv6;
+		} inet_network;
+		struct {
+			const struct tomoyo_path_info *address;
+			u8 protocol;
+			u8 operation;
+		} unix_network;
+		struct {
+			const struct tomoyo_path_info *type;
+			const struct tomoyo_path_info *dir;
+			const struct tomoyo_path_info *dev;
+			long unsigned int flags;
+			int need_dev;
+		} mount;
+		struct {
+			const struct tomoyo_path_info *domainname;
+		} task;
+	} param;
+	struct tomoyo_acl_info *matched_acl;
+	u8 param_type;
+	bool granted;
+	u8 retry;
+	u8 profile;
+	u8 mode;
+	u8 type;
+};
+
+struct tomoyo_mini_stat {
+	kuid_t uid;
+	kgid_t gid;
+	ino_t ino;
+	umode_t mode;
+	dev_t dev;
+	dev_t rdev;
+};
+
+struct tomoyo_obj_info {
+	bool validate_done;
+	bool stat_valid[4];
+	struct path path1;
+	struct path path2;
+	struct tomoyo_mini_stat stat[4];
+	struct tomoyo_path_info *symlink_target;
+};
+
+struct tomoyo_page_dump {
+	struct page *page;
+	char *data;
+};
+
+struct tomoyo_execve {
+	struct tomoyo_request_info r;
+	struct tomoyo_obj_info obj;
+	struct linux_binprm *bprm;
+	const struct tomoyo_path_info *transition;
+	struct tomoyo_page_dump dump;
+	char *tmp;
+};
+
+struct tomoyo_policy_namespace;
+
+struct tomoyo_domain_info {
+	struct list_head list;
+	struct list_head acl_info_list;
+	const struct tomoyo_path_info *domainname;
+	struct tomoyo_policy_namespace *ns;
+	long unsigned int group[4];
+	u8 profile;
+	bool is_deleted;
+	bool flags[2];
+	atomic_t users;
+};
+
+struct tomoyo_condition;
+
+struct tomoyo_acl_info {
+	struct list_head list;
+	struct tomoyo_condition *cond;
+	s8 is_deleted;
+	u8 type;
+} __attribute__((packed));
+
+struct tomoyo_condition {
+	struct tomoyo_shared_acl_head head;
+	u32 size;
+	u16 condc;
+	u16 numbers_count;
+	u16 names_count;
+	u16 argc;
+	u16 envc;
+	u8 grant_log;
+	const struct tomoyo_path_info *transit;
+};
+
+struct tomoyo_profile;
+
+struct tomoyo_policy_namespace {
+	struct tomoyo_profile *profile_ptr[256];
+	struct list_head group_list[3];
+	struct list_head policy_list[11];
+	struct list_head acl_group[256];
+	struct list_head namespace_list;
+	unsigned int profile_version;
+	const char *name;
+};
+
+struct tomoyo_io_buffer {
+	void (*read)(struct tomoyo_io_buffer *);
+	int (*write)(struct tomoyo_io_buffer *);
+	__poll_t (*poll)(struct file *, poll_table *);
+	struct mutex io_sem;
+	char *read_user_buf;
+	size_t read_user_buf_avail;
+	struct {
+		struct list_head *ns;
+		struct list_head *domain;
+		struct list_head *group;
+		struct list_head *acl;
+		size_t avail;
+		unsigned int step;
+		unsigned int query_index;
+		u16 index;
+		u16 cond_index;
+		u8 acl_group_index;
+		u8 cond_step;
+		u8 bit;
+		u8 w_pos;
+		bool eof;
+		bool print_this_domain_only;
+		bool print_transition_related_only;
+		bool print_cond_part;
+		const char *w[64];
+	} r;
+	struct {
+		struct tomoyo_policy_namespace *ns;
+		struct tomoyo_domain_info *domain;
+		size_t avail;
+		bool is_delete;
+	} w;
+	char *read_buf;
+	size_t readbuf_size;
+	char *write_buf;
+	size_t writebuf_size;
+	enum tomoyo_securityfs_interface_index type;
+	u8 users;
+	struct list_head list;
+};
+
+struct tomoyo_preference {
+	unsigned int learning_max_entry;
+	bool enforcing_verbose;
+	bool learning_verbose;
+	bool permissive_verbose;
+};
+
+struct tomoyo_profile {
+	const struct tomoyo_path_info *comment;
+	struct tomoyo_preference *learning;
+	struct tomoyo_preference *permissive;
+	struct tomoyo_preference *enforcing;
+	struct tomoyo_preference preference;
+	u8 default_config;
+	u8 config[42];
+	unsigned int pref[2];
+};
+
+struct tomoyo_time {
+	u16 year;
+	u8 month;
+	u8 day;
+	u8 hour;
+	u8 min;
+	u8 sec;
+};
+
+struct tomoyo_log {
+	struct list_head list;
+	char *log;
+	int size;
+};
+
+enum tomoyo_value_type {
+	TOMOYO_VALUE_TYPE_INVALID = 0,
+	TOMOYO_VALUE_TYPE_DECIMAL = 1,
+	TOMOYO_VALUE_TYPE_OCTAL = 2,
+	TOMOYO_VALUE_TYPE_HEXADECIMAL = 3,
+};
+
+enum tomoyo_transition_type {
+	TOMOYO_TRANSITION_CONTROL_NO_RESET = 0,
+	TOMOYO_TRANSITION_CONTROL_RESET = 1,
+	TOMOYO_TRANSITION_CONTROL_NO_INITIALIZE = 2,
+	TOMOYO_TRANSITION_CONTROL_INITIALIZE = 3,
+	TOMOYO_TRANSITION_CONTROL_NO_KEEP = 4,
+	TOMOYO_TRANSITION_CONTROL_KEEP = 5,
+	TOMOYO_MAX_TRANSITION_TYPE = 6,
+};
+
+enum tomoyo_acl_entry_type_index {
+	TOMOYO_TYPE_PATH_ACL = 0,
+	TOMOYO_TYPE_PATH2_ACL = 1,
+	TOMOYO_TYPE_PATH_NUMBER_ACL = 2,
+	TOMOYO_TYPE_MKDEV_ACL = 3,
+	TOMOYO_TYPE_MOUNT_ACL = 4,
+	TOMOYO_TYPE_INET_ACL = 5,
+	TOMOYO_TYPE_UNIX_ACL = 6,
+	TOMOYO_TYPE_ENV_ACL = 7,
+	TOMOYO_TYPE_MANUAL_TASK_ACL = 8,
+};
+
+enum tomoyo_policy_stat_type {
+	TOMOYO_STAT_POLICY_UPDATES = 0,
+	TOMOYO_STAT_POLICY_LEARNING = 1,
+	TOMOYO_STAT_POLICY_PERMISSIVE = 2,
+	TOMOYO_STAT_POLICY_ENFORCING = 3,
+	TOMOYO_MAX_POLICY_STAT = 4,
+};
+
+struct tomoyo_acl_head {
+	struct list_head list;
+	s8 is_deleted;
+} __attribute__((packed));
+
+struct tomoyo_name {
+	struct tomoyo_shared_acl_head head;
+	struct tomoyo_path_info entry;
+};
+
+struct tomoyo_group;
+
+struct tomoyo_name_union {
+	const struct tomoyo_path_info *filename;
+	struct tomoyo_group *group;
+};
+
+struct tomoyo_group {
+	struct tomoyo_shared_acl_head head;
+	const struct tomoyo_path_info *group_name;
+	struct list_head member_list;
+};
+
+struct tomoyo_number_union {
+	long unsigned int values[2];
+	struct tomoyo_group *group;
+	u8 value_type[2];
+};
+
+struct tomoyo_ipaddr_union {
+	struct in6_addr ip[2];
+	struct tomoyo_group *group;
+	bool is_ipv6;
+};
+
+struct tomoyo_path_group {
+	struct tomoyo_acl_head head;
+	const struct tomoyo_path_info *member_name;
+};
+
+struct tomoyo_number_group {
+	struct tomoyo_acl_head head;
+	struct tomoyo_number_union number;
+};
+
+struct tomoyo_address_group {
+	struct tomoyo_acl_head head;
+	struct tomoyo_ipaddr_union address;
+};
+
+struct tomoyo_argv {
+	long unsigned int index;
+	const struct tomoyo_path_info *value;
+	bool is_not;
+};
+
+struct tomoyo_envp {
+	const struct tomoyo_path_info *name;
+	const struct tomoyo_path_info *value;
+	bool is_not;
+};
+
+struct tomoyo_condition_element {
+	u8 left;
+	u8 right;
+	bool equals;
+};
+
+struct tomoyo_task_acl {
+	struct tomoyo_acl_info head;
+	const struct tomoyo_path_info *domainname;
+};
+
+struct tomoyo_path_acl {
+	struct tomoyo_acl_info head;
+	u16 perm;
+	struct tomoyo_name_union name;
+};
+
+struct tomoyo_path_number_acl {
+	struct tomoyo_acl_info head;
+	u8 perm;
+	struct tomoyo_name_union name;
+	struct tomoyo_number_union number;
+};
+
+struct tomoyo_mkdev_acl {
+	struct tomoyo_acl_info head;
+	u8 perm;
+	struct tomoyo_name_union name;
+	struct tomoyo_number_union mode;
+	struct tomoyo_number_union major;
+	struct tomoyo_number_union minor;
+};
+
+struct tomoyo_path2_acl {
+	struct tomoyo_acl_info head;
+	u8 perm;
+	struct tomoyo_name_union name1;
+	struct tomoyo_name_union name2;
+};
+
+struct tomoyo_mount_acl {
+	struct tomoyo_acl_info head;
+	struct tomoyo_name_union dev_name;
+	struct tomoyo_name_union dir_name;
+	struct tomoyo_name_union fs_type;
+	struct tomoyo_number_union flags;
+};
+
+struct tomoyo_env_acl {
+	struct tomoyo_acl_info head;
+	const struct tomoyo_path_info *env;
+};
+
+struct tomoyo_inet_acl {
+	struct tomoyo_acl_info head;
+	u8 protocol;
+	u8 perm;
+	struct tomoyo_ipaddr_union address;
+	struct tomoyo_number_union port;
+};
+
+struct tomoyo_unix_acl {
+	struct tomoyo_acl_info head;
+	u8 protocol;
+	u8 perm;
+	struct tomoyo_name_union name;
+};
+
+struct tomoyo_acl_param {
+	char *data;
+	struct list_head *list;
+	struct tomoyo_policy_namespace *ns;
+	bool is_delete;
+};
+
+struct tomoyo_transition_control {
+	struct tomoyo_acl_head head;
+	u8 type;
+	bool is_last_name;
+	const struct tomoyo_path_info *domainname;
+	const struct tomoyo_path_info *program;
+};
+
+struct tomoyo_aggregator {
+	struct tomoyo_acl_head head;
+	const struct tomoyo_path_info *original_name;
+	const struct tomoyo_path_info *aggregated_name;
+};
+
+struct tomoyo_manager {
+	struct tomoyo_acl_head head;
+	const struct tomoyo_path_info *manager;
+};
+
+struct tomoyo_task {
+	struct tomoyo_domain_info *domain_info;
+	struct tomoyo_domain_info *old_domain_info;
+};
+
+struct tomoyo_query {
+	struct list_head list;
+	struct tomoyo_domain_info *domain;
+	char *query;
+	size_t query_len;
+	unsigned int serial;
+	u8 timer;
+	u8 answer;
+	u8 retry;
+};
+
+enum tomoyo_special_mount {
+	TOMOYO_MOUNT_BIND = 0,
+	TOMOYO_MOUNT_MOVE = 1,
+	TOMOYO_MOUNT_REMOUNT = 2,
+	TOMOYO_MOUNT_MAKE_UNBINDABLE = 3,
+	TOMOYO_MOUNT_MAKE_PRIVATE = 4,
+	TOMOYO_MOUNT_MAKE_SLAVE = 5,
+	TOMOYO_MOUNT_MAKE_SHARED = 6,
+	TOMOYO_MAX_SPECIAL_MOUNT = 7,
+};
+
+struct tomoyo_inet_addr_info {
+	__be16 port;
+	const __be32 *address;
+	bool is_ipv6;
+};
+
+struct tomoyo_unix_addr_info {
+	u8 *addr;
+	unsigned int addr_len;
+};
+
+struct tomoyo_addr_info {
+	u8 protocol;
+	u8 operation;
+	struct tomoyo_inet_addr_info inet;
+	struct tomoyo_unix_addr_info unix0;
 };
 
 enum audit_mode {
@@ -50719,52 +70385,91 @@
 	enum devcg_behavior behavior;
 };
 
-struct altha_list_struct {
-	struct path path;
-	char *spath;
-	char *spath_p;
-	struct list_head list;
+struct landlock_ruleset_attr {
+	__u64 handled_access_fs;
 };
 
-struct kiosk_list_struct {
-	struct path path;
-	struct list_head list;
+enum landlock_rule_type {
+	LANDLOCK_RULE_PATH_BENEATH = 1,
 };
 
-enum kiosk_cmd {
-	KIOSK_UNSPEC = 0,
-	KIOSK_REQUEST = 1,
-	KIOSK_REPLY = 2,
-	KIOSK_CMD_LAST = 3,
+struct landlock_path_beneath_attr {
+	__u64 allowed_access;
+	__s32 parent_fd;
+} __attribute__((packed));
+
+typedef u16 access_mask_t;
+
+struct landlock_hierarchy {
+	struct landlock_hierarchy *parent;
+	refcount_t usage;
 };
 
-enum kiosk_mode {
-	KIOSK_PERMISSIVE = 0,
-	KIOSK_NONSYSTEM = 1,
-	KIOSK_MODE_LAST = 2,
+struct landlock_ruleset {
+	struct rb_root root;
+	struct landlock_hierarchy *hierarchy;
+	union {
+		struct work_struct work_free;
+		struct {
+			struct mutex lock;
+			refcount_t usage;
+			u32 num_rules;
+			u32 num_layers;
+			access_mask_t fs_access_masks[0];
+		};
+	};
 };
 
-enum kiosk_action {
-	KIOSK_SET_MODE = 0,
-	KIOSK_USERLIST_ADD = 1,
-	KIOSK_USERLIST_DEL = 2,
-	KIOSK_USER_LIST = 3,
+struct landlock_cred_security {
+	struct landlock_ruleset *domain;
 };
 
-enum kiosk_attrs {
-	KIOSK_NOATTR = 0,
-	KIOSK_ACTION = 1,
-	KIOSK_DATA = 2,
-	KIOSK_MAX_ATTR = 3,
+struct landlock_object;
+
+struct landlock_object_underops {
+	void (*release)(struct landlock_object * const);
+};
+
+struct landlock_object {
+	refcount_t usage;
+	spinlock_t lock;
+	void *underobj;
+	union {
+		struct callback_head rcu_free;
+		const struct landlock_object_underops *underops;
+	};
+};
+
+struct landlock_layer {
+	u16 level;
+	access_mask_t access;
+};
+
+struct landlock_rule {
+	struct rb_node node;
+	struct landlock_object *object;
+	u32 num_layers;
+	struct landlock_layer layers[0];
+};
+
+typedef u16 layer_mask_t;
+
+struct landlock_inode_security {
+	struct landlock_object *object;
+};
+
+struct landlock_superblock_security {
+	atomic_long_t inode_refs;
 };
 
 enum integrity_status {
 	INTEGRITY_PASS = 0,
 	INTEGRITY_PASS_IMMUTABLE = 1,
 	INTEGRITY_FAIL = 2,
-	INTEGRITY_NOLABEL = 3,
-	INTEGRITY_NOXATTRS = 4,
-	INTEGRITY_UNKNOWN = 5,
+	INTEGRITY_FAIL_IMMUTABLE = 3,
+	INTEGRITY_NOLABEL = 4,
+	INTEGRITY_NOXATTRS = 5,
+	INTEGRITY_UNKNOWN = 6,
 };
 
 struct ima_digest_data {
@@ -50803,14 +70508,25 @@
 
 struct modsig;
 
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+};
+
 struct asymmetric_key_id;
 
 struct public_key_signature {
-	struct asymmetric_key_id *auth_ids[2];
+	struct asymmetric_key_id *auth_ids[3];
 	u8 *s;
-	u32 s_size;
 	u8 *digest;
-	u8 digest_size;
+	u32 s_size;
+	u32 digest_size;
 	const char *pkey_algo;
 	const char *hash_algo;
 	const char *encoding;
@@ -50823,6 +70539,13 @@
 	unsigned char data[0];
 };
 
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
 struct signature_v2_hdr {
 	uint8_t type;
 	uint8_t version;
@@ -50832,9 +70555,25 @@
 	uint8_t sig[0];
 } __attribute__((packed));
 
-struct tpm_digest {
-	u16 alg_id;
-	u8 digest[64];
+typedef struct {
+	efi_guid_t signature_owner;
+	u8 signature_data[0];
+} efi_signature_data_t;
+
+typedef struct {
+	efi_guid_t signature_type;
+	u32 signature_list_size;
+	u32 signature_header_size;
+	u32 signature_size;
+	u8 signature_header[0];
+} efi_signature_list_t;
+
+typedef void (*efi_element_handler_t)(const char *, const void *, size_t);
+
+struct efi_mokvar_table_entry {
+	char name[256];
+	u64 data_size;
+	u8 data[0];
 };
 
 struct evm_ima_xattr_data {
@@ -50904,99 +70643,9 @@
 	IMA_FS_BUSY = 0,
 };
 
-struct hwrng {
-	const char *name;
-	int (*init)(struct hwrng *);
-	void (*cleanup)(struct hwrng *);
-	int (*data_present)(struct hwrng *, int);
-	int (*data_read)(struct hwrng *, u32 *);
-	int (*read)(struct hwrng *, void *, size_t, bool);
-	long unsigned int priv;
-	short unsigned int quality;
-	struct list_head list;
-	struct kref ref;
-	struct completion cleanup_done;
-};
-
-struct tpm_bank_info {
-	u16 alg_id;
-	u16 digest_size;
-	u16 crypto_id;
-};
-
-struct tpm_chip;
-
-struct tpm_class_ops {
-	unsigned int flags;
-	const u8 req_complete_mask;
-	const u8 req_complete_val;
-	bool (*req_canceled)(struct tpm_chip *, u8);
-	int (*recv)(struct tpm_chip *, u8 *, size_t);
-	int (*send)(struct tpm_chip *, u8 *, size_t);
-	void (*cancel)(struct tpm_chip *);
-	u8 (*status)(struct tpm_chip *);
-	void (*update_timeouts)(struct tpm_chip *, long unsigned int *);
-	void (*update_durations)(struct tpm_chip *, long unsigned int *);
-	int (*go_idle)(struct tpm_chip *);
-	int (*cmd_ready)(struct tpm_chip *);
-	int (*request_locality)(struct tpm_chip *, int);
-	int (*relinquish_locality)(struct tpm_chip *, int);
-	void (*clk_enable)(struct tpm_chip *, bool);
-};
-
-struct tpm_bios_log {
-	void *bios_event_log;
-	void *bios_event_log_end;
-};
-
-struct tpm_chip_seqops {
-	struct tpm_chip *chip;
-	const struct seq_operations *seqops;
-};
-
-struct tpm_space {
-	u32 context_tbl[3];
-	u8 *context_buf;
-	u32 session_tbl[3];
-	u8 *session_buf;
-	u32 buf_size;
-};
-
-struct tpm_chip {
-	struct device dev;
-	struct device devs;
-	struct cdev cdev;
-	struct cdev cdevs;
-	struct rw_semaphore ops_sem;
-	const struct tpm_class_ops *ops;
-	struct tpm_bios_log log;
-	struct tpm_chip_seqops bin_log_seqops;
-	struct tpm_chip_seqops ascii_log_seqops;
-	unsigned int flags;
-	int dev_num;
-	long unsigned int is_open;
-	char hwrng_name[64];
-	struct hwrng hwrng;
-	struct mutex tpm_mutex;
-	long unsigned int timeout_a;
-	long unsigned int timeout_b;
-	long unsigned int timeout_c;
-	long unsigned int timeout_d;
-	bool timeout_adjusted;
-	long unsigned int duration[4];
-	bool duration_adjusted;
-	struct dentry *bios_dir[3];
-	const struct attribute_group *groups[3];
-	unsigned int groups_cnt;
-	u32 nr_allocated_banks;
-	struct tpm_bank_info *allocated_banks;
-	acpi_handle acpi_dev_handle;
-	char ppi_version[4];
-	struct tpm_space work_space;
-	u32 last_cc;
-	u32 nr_commands;
-	u32 *cc_attrs_tbl;
-	int locality;
+struct ima_max_digest_data {
+	struct ima_digest_data hdr;
+	u8 digest[64];
 };
 
 enum evm_ima_xattr_type {
@@ -51005,11 +70654,12 @@
 	EVM_IMA_XATTR_DIGSIG = 3,
 	IMA_XATTR_DIGEST_NG = 4,
 	EVM_XATTR_PORTABLE_DIGSIG = 5,
-	IMA_XATTR_LAST = 6,
+	IMA_VERITY_DIGSIG = 6,
+	IMA_XATTR_LAST = 7,
 };
 
 enum ima_hooks {
-	NONE = 0,
+	NONE___2 = 0,
 	FILE_CHECK = 1,
 	MMAP_CHECK = 2,
 	BPRM_CHECK = 3,
@@ -51022,18 +70672,9 @@
 	POLICY_CHECK = 10,
 	KEXEC_CMDLINE = 11,
 	KEY_CHECK = 12,
-	MAX_CHECK = 13,
-};
-
-enum tpm_algorithms {
-	TPM_ALG_ERROR = 0,
-	TPM_ALG_SHA1 = 4,
-	TPM_ALG_KEYEDHASH = 8,
-	TPM_ALG_SHA256 = 11,
-	TPM_ALG_SHA384 = 12,
-	TPM_ALG_SHA512 = 13,
-	TPM_ALG_NULL = 16,
-	TPM_ALG_SM3_256 = 18,
+	CRITICAL_DATA = 13,
+	SETXATTR_CHECK = 14,
+	MAX_CHECK = 15,
 };
 
 enum tpm_pcrs {
@@ -51080,10 +70721,15 @@
 	long unsigned int fsmagic;
 	uuid_t fsuuid;
 	kuid_t uid;
+	kgid_t gid;
 	kuid_t fowner;
+	kgid_t fgroup;
 	bool (*uid_op)(kuid_t, kuid_t);
+	bool (*gid_op)(kgid_t, kgid_t);
 	bool (*fowner_op)(kuid_t, kuid_t);
+	bool (*fgroup_op)(kgid_t, kgid_t);
 	int pcr;
+	unsigned int allowed_algos;
 	struct {
 		void *rule;
 		char *args_p;
@@ -51091,16 +70737,17 @@
 	} lsm[6];
 	char *fsname;
 	struct ima_rule_opt_list *keyrings;
+	struct ima_rule_opt_list *label;
 	struct ima_template_desc *template;
 };
 
-enum {
+enum policy_opt {
 	Opt_measure = 0,
 	Opt_dont_measure = 1,
 	Opt_appraise = 2,
 	Opt_dont_appraise = 3,
 	Opt_audit = 4,
-	Opt_hash___2 = 5,
+	Opt_hash___3 = 5,
 	Opt_dont_hash = 6,
 	Opt_obj_user = 7,
 	Opt_obj_role = 8,
@@ -51115,27 +70762,32 @@
 	Opt_fsuuid = 17,
 	Opt_uid_eq = 18,
 	Opt_euid_eq = 19,
-	Opt_fowner_eq = 20,
-	Opt_uid_gt = 21,
-	Opt_euid_gt = 22,
-	Opt_fowner_gt = 23,
-	Opt_uid_lt = 24,
-	Opt_euid_lt = 25,
-	Opt_fowner_lt = 26,
-	Opt_appraise_type = 27,
-	Opt_appraise_flag = 28,
-	Opt_permit_directio = 29,
-	Opt_pcr = 30,
-	Opt_template = 31,
-	Opt_keyrings = 32,
-	Opt_err___7 = 33,
-};
-
-enum {
-	mask_exec = 0,
-	mask_write = 1,
-	mask_read = 2,
-	mask_append = 3,
+	Opt_gid_eq = 20,
+	Opt_egid_eq = 21,
+	Opt_fowner_eq = 22,
+	Opt_fgroup_eq = 23,
+	Opt_uid_gt = 24,
+	Opt_euid_gt = 25,
+	Opt_gid_gt = 26,
+	Opt_egid_gt = 27,
+	Opt_fowner_gt = 28,
+	Opt_fgroup_gt = 29,
+	Opt_uid_lt = 30,
+	Opt_euid_lt = 31,
+	Opt_gid_lt = 32,
+	Opt_egid_lt = 33,
+	Opt_fowner_lt = 34,
+	Opt_fgroup_lt = 35,
+	Opt_digest_type = 36,
+	Opt_appraise_type = 37,
+	Opt_appraise_flag = 38,
+	Opt_appraise_algos = 39,
+	Opt_permit_directio = 40,
+	Opt_pcr = 41,
+	Opt_template = 42,
+	Opt_keyrings = 43,
+	Opt_label = 44,
+	Opt_err___10 = 45,
 };
 
 struct ima_kexec_hdr {
@@ -51157,8 +70809,31 @@
 enum data_formats {
 	DATA_FMT_DIGEST = 0,
 	DATA_FMT_DIGEST_WITH_ALGO = 1,
-	DATA_FMT_STRING = 2,
-	DATA_FMT_HEX = 3,
+	DATA_FMT_DIGEST_WITH_TYPE_AND_ALGO = 2,
+	DATA_FMT_STRING = 3,
+	DATA_FMT_HEX = 4,
+	DATA_FMT_UINT = 5,
+};
+
+enum digest_type {
+	DIGEST_TYPE_IMA = 0,
+	DIGEST_TYPE_VERITY = 1,
+	DIGEST_TYPE__LAST = 2,
+};
+
+struct ima_file_id {
+	__u8 hash_type;
+	__u8 hash_algorithm;
+	__u8 hash[64];
+};
+
+struct modsig___2 {
+	struct pkcs7_message *pkcs7_msg;
+	enum hash_algo hash_algo;
+	const u8 *digest;
+	u32 digest_size;
+	int raw_pkcs7_len;
+	u8 raw_pkcs7[0];
 };
 
 struct ima_key_entry {
@@ -51176,6 +70851,7 @@
 struct xattr_list {
 	struct list_head list;
 	char *name;
+	bool enabled;
 };
 
 struct evm_digest {
@@ -51202,44 +70878,13 @@
 	struct crypto_alg *adult;
 	struct completion completion;
 	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	bool test_started;
 };
 
 struct crypto_cipher {
 	struct crypto_tfm base;
 };
 
-enum {
-	CRYPTOA_UNSPEC = 0,
-	CRYPTOA_ALG = 1,
-	CRYPTOA_TYPE = 2,
-	CRYPTOA_U32 = 3,
-	__CRYPTOA_MAX = 4,
-};
-
-struct crypto_attr_alg {
-	char name[128];
-};
-
-struct crypto_attr_type {
-	u32 type;
-	u32 mask;
-};
-
-struct crypto_attr_u32 {
-	u32 num;
-};
-
 struct rtattr {
 	short unsigned int rta_len;
 	short unsigned int rta_type;
@@ -51252,40 +70897,20 @@
 	unsigned int max_qlen;
 };
 
-enum {
-	NAPI_STATE_SCHED = 0,
-	NAPI_STATE_MISSED = 1,
-	NAPI_STATE_DISABLE = 2,
-	NAPI_STATE_NPSVC = 3,
-	NAPI_STATE_LISTED = 4,
-	NAPI_STATE_NO_BUSY_POLL = 5,
-	NAPI_STATE_IN_BUSY_POLL = 6,
+struct crypto_attr_alg {
+	char name[128];
 };
 
-enum bpf_xdp_mode {
-	XDP_MODE_SKB = 0,
-	XDP_MODE_DRV = 1,
-	XDP_MODE_HW = 2,
-	__MAX_XDP_MODE = 3,
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
 };
 
 enum {
-	NETIF_MSG_DRV_BIT = 0,
-	NETIF_MSG_PROBE_BIT = 1,
-	NETIF_MSG_LINK_BIT = 2,
-	NETIF_MSG_TIMER_BIT = 3,
-	NETIF_MSG_IFDOWN_BIT = 4,
-	NETIF_MSG_IFUP_BIT = 5,
-	NETIF_MSG_RX_ERR_BIT = 6,
-	NETIF_MSG_TX_ERR_BIT = 7,
-	NETIF_MSG_TX_QUEUED_BIT = 8,
-	NETIF_MSG_INTR_BIT = 9,
-	NETIF_MSG_TX_DONE_BIT = 10,
-	NETIF_MSG_RX_STATUS_BIT = 11,
-	NETIF_MSG_PKTDATA_BIT = 12,
-	NETIF_MSG_HW_BIT = 13,
-	NETIF_MSG_WOL_BIT = 14,
-	NETIF_MSG_CLASS_COUNT = 15,
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
 };
 
 struct scatter_walk {
@@ -51300,12 +70925,6 @@
 	u8 *iv;
 	struct scatterlist *src;
 	struct scatterlist *dst;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *__ctx[0];
 };
 
@@ -51321,59 +70940,20 @@
 	unsigned int ivsize;
 	unsigned int maxauthsize;
 	unsigned int chunksize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
 struct crypto_aead {
 	unsigned int authsize;
 	unsigned int reqsize;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_tfm base;
 };
 
 struct aead_instance {
 	void (*free)(struct aead_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[128];
+			char head[64];
 			struct crypto_instance base;
 		} s;
 		struct aead_alg alg;
@@ -51434,19 +71014,6 @@
 	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
 	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
 	unsigned int seedsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
@@ -51464,24 +71031,9 @@
 
 struct skcipher_instance {
 	void (*free)(struct skcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[128];
+			char head[64];
 			struct crypto_instance base;
 		} s;
 		struct skcipher_alg alg;
@@ -51569,12 +71121,6 @@
 	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
 	int (*init_tfm)(struct crypto_ahash *);
 	void (*exit_tfm)(struct crypto_ahash *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct hash_alg_common halg;
 };
 
@@ -51591,24 +71137,9 @@
 
 struct ahash_instance {
 	void (*free)(struct ahash_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[256];
+			char head[88];
 			struct crypto_instance base;
 		} s;
 		struct ahash_alg alg;
@@ -51630,42 +71161,14 @@
 	void *data;
 	u8 *result;
 	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *ubuf[0];
 };
 
 struct shash_instance {
 	void (*free)(struct shash_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[256];
+			char head[96];
 			struct crypto_instance base;
 		} s;
 		struct shash_alg alg;
@@ -51686,13 +71189,6 @@
 	struct scatterlist *dst;
 	unsigned int src_len;
 	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	void *__ctx[0];
 };
 
@@ -51711,36 +71207,14 @@
 	int (*init)(struct crypto_akcipher *);
 	void (*exit)(struct crypto_akcipher *);
 	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
 struct akcipher_instance {
 	void (*free)(struct akcipher_instance *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct {
-			char head[128];
+			char head[80];
 			struct crypto_instance base;
 		} s;
 		struct akcipher_alg alg;
@@ -51755,132 +71229,49 @@
 	char type[64];
 };
 
-struct kpp_request {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int src_len;
-	unsigned int dst_len;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	union {
+		struct {
+			char head[56];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
 };
 
-struct crypto_kpp {
-	struct crypto_tfm base;
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
 };
 
-struct kpp_alg {
-	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
-	int (*generate_public_key)(struct kpp_request *);
-	int (*compute_shared_secret)(struct kpp_request *);
-	unsigned int (*max_size)(struct crypto_kpp *);
-	int (*init)(struct crypto_kpp *);
-	void (*exit)(struct crypto_kpp *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_alg base;
+typedef long unsigned int mpi_limb_t;
+
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
 };
 
-enum asn1_class {
-	ASN1_UNIV = 0,
-	ASN1_APPL = 1,
-	ASN1_CONT = 2,
-	ASN1_PRIV = 3,
+typedef struct gcry_mpi *MPI;
+
+struct dh_ctx {
+	MPI p;
+	MPI g;
+	MPI xa;
 };
 
-enum asn1_method {
-	ASN1_PRIM = 0,
-	ASN1_CONS = 1,
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
 };
 
-enum asn1_tag {
-	ASN1_EOC = 0,
-	ASN1_BOOL = 1,
-	ASN1_INT = 2,
-	ASN1_BTS = 3,
-	ASN1_OTS = 4,
-	ASN1_NULL = 5,
-	ASN1_OID = 6,
-	ASN1_ODE = 7,
-	ASN1_EXT = 8,
-	ASN1_REAL = 9,
-	ASN1_ENUM = 10,
-	ASN1_EPDV = 11,
-	ASN1_UTF8STR = 12,
-	ASN1_RELOID = 13,
-	ASN1_SEQ = 16,
-	ASN1_SET = 17,
-	ASN1_NUMSTR = 18,
-	ASN1_PRNSTR = 19,
-	ASN1_TEXSTR = 20,
-	ASN1_VIDSTR = 21,
-	ASN1_IA5STR = 22,
-	ASN1_UNITIM = 23,
-	ASN1_GENTIM = 24,
-	ASN1_GRASTR = 25,
-	ASN1_VISSTR = 26,
-	ASN1_GENSTR = 27,
-	ASN1_UNISTR = 28,
-	ASN1_CHRSTR = 29,
-	ASN1_BMPSTR = 30,
-	ASN1_LONG_TAG = 31,
-};
-
-typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
-
-struct asn1_decoder {
-	const unsigned char *machine;
-	size_t machlen;
-	const asn1_action_t *actions;
-};
-
-enum asn1_opcode {
-	ASN1_OP_MATCH = 0,
-	ASN1_OP_MATCH_OR_SKIP = 1,
-	ASN1_OP_MATCH_ACT = 2,
-	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
-	ASN1_OP_MATCH_JUMP = 4,
-	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
-	ASN1_OP_MATCH_ANY = 8,
-	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
-	ASN1_OP_MATCH_ANY_ACT = 10,
-	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
-	ASN1_OP_COND_MATCH_OR_SKIP = 17,
-	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
-	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
-	ASN1_OP_COND_MATCH_ANY = 24,
-	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
-	ASN1_OP_COND_MATCH_ANY_ACT = 26,
-	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
-	ASN1_OP_COND_FAIL = 28,
-	ASN1_OP_COMPLETE = 29,
-	ASN1_OP_ACT = 30,
-	ASN1_OP_MAYBE_ACT = 31,
-	ASN1_OP_END_SEQ = 32,
-	ASN1_OP_END_SET = 33,
-	ASN1_OP_END_SEQ_OF = 34,
-	ASN1_OP_END_SET_OF = 35,
-	ASN1_OP_END_SEQ_ACT = 36,
-	ASN1_OP_END_SET_ACT = 37,
-	ASN1_OP_END_SEQ_OF_ACT = 38,
-	ASN1_OP_END_SET_OF_ACT = 39,
-	ASN1_OP_RETURN = 40,
-	ASN1_OP__NR = 41,
+struct kpp_secret {
+	short unsigned int type;
+	short unsigned int len;
 };
 
 enum rsapubkey_actions {
@@ -51901,19 +71292,6 @@
 	NR__rsaprivkey_actions = 8,
 };
 
-typedef long unsigned int mpi_limb_t;
-
-struct gcry_mpi {
-	int alloced;
-	int nlimbs;
-	int nbits;
-	int sign;
-	unsigned int flags;
-	mpi_limb_t *d;
-};
-
-typedef struct gcry_mpi *MPI;
-
 struct rsa_key {
 	const u8 *n;
 	const u8 *e;
@@ -51962,8 +71340,6 @@
 	struct scatterlist out_sg[1];
 	uint8_t *in_buf;
 	uint8_t *out_buf;
-	long: 64;
-	long: 64;
 	struct akcipher_request child_req;
 };
 
@@ -51971,44 +71347,6 @@
 	char type[64];
 };
 
-struct acomp_req {
-	struct crypto_async_request base;
-	struct scatterlist *src;
-	struct scatterlist *dst;
-	unsigned int slen;
-	unsigned int dlen;
-	u32 flags;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	void *__ctx[0];
-};
-
-struct crypto_acomp {
-	int (*compress)(struct acomp_req *);
-	int (*decompress)(struct acomp_req *);
-	void (*dst_free)(struct scatterlist *);
-	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct crypto_tfm base;
-};
-
 struct acomp_alg {
 	int (*compress)(struct acomp_req *);
 	int (*decompress)(struct acomp_req *);
@@ -52016,17 +71354,6 @@
 	int (*init)(struct crypto_acomp *);
 	void (*exit)(struct crypto_acomp *);
 	unsigned int reqsize;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
@@ -52043,18 +71370,6 @@
 	void (*free_ctx)(struct crypto_scomp *, void *);
 	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
 	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct crypto_alg base;
 };
 
@@ -52070,16 +71385,9 @@
 		struct rtattr attr;
 		struct crypto_attr_type data;
 	} type;
-	union {
+	struct {
 		struct rtattr attr;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_alg data;
-		} alg;
-		struct {
-			struct rtattr attr;
-			struct crypto_attr_u32 data;
-		} nu32;
+		struct crypto_attr_alg data;
 	} attrs[32];
 	char template[128];
 	struct crypto_larval *larval;
@@ -52155,14 +71463,6 @@
 struct crypto_cts_reqctx {
 	struct scatterlist sg[2];
 	unsigned int offset;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct skcipher_request subreq;
 };
 
@@ -52180,11 +71480,6 @@
 	le128 t;
 	struct scatterlist *tail;
 	struct scatterlist sg[2];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct skcipher_request subreq;
 };
 
@@ -52195,20 +71490,6 @@
 
 struct crypto_rfc3686_req_ctx {
 	u8 iv[16];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct skcipher_request subreq;
 };
 
@@ -52230,14 +71511,6 @@
 struct crypto_rfc4106_req_ctx {
 	struct scatterlist src[3];
 	struct scatterlist dst[3];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	struct aead_request subreq;
 };
 
@@ -52269,17 +71542,6 @@
 	struct scatterlist dst[3];
 	struct scatterlist sg;
 	struct crypto_gcm_ghash_ctx ghash_ctx;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	union {
 		struct ahash_request ahreq;
 		struct skcipher_request skreq;
@@ -52292,6 +71554,11 @@
 	u32 key_length;
 };
 
+struct deflate_ctx {
+	struct z_stream_s comp_stream;
+	struct z_stream_s decomp_stream;
+};
+
 struct chksum_ctx {
 	u32 key;
 };
@@ -52317,12 +71584,6 @@
 	unsigned int seedsize;
 };
 
-struct random_ready_callback {
-	struct list_head list;
-	void (*func)(struct random_ready_callback *);
-	struct module *owner;
-};
-
 struct drbg_string {
 	const unsigned char *buf;
 	size_t len;
@@ -52348,6 +71609,12 @@
 	int (*crypto_fini)(struct drbg_state *);
 };
 
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
 struct drbg_state {
 	struct mutex drbg_mutex;
 	unsigned char *V;
@@ -52366,16 +71633,15 @@
 	struct crypto_wait ctr_wait;
 	struct scatterlist sg_in;
 	struct scatterlist sg_out;
-	bool seeded;
+	enum drbg_seed_state seeded;
+	long unsigned int last_seed_time;
 	bool pr;
 	bool fips_primed;
 	unsigned char *prev;
-	struct work_struct seed_work;
 	struct crypto_rng *jent;
 	const struct drbg_state_ops *d_ops;
 	const struct drbg_core *core;
 	struct drbg_string test_data;
-	struct random_ready_callback random_ready;
 };
 
 enum drbg_prefixes {
@@ -52385,11 +71651,6 @@
 	DRBG_PREFIX3 = 3,
 };
 
-struct sdesc {
-	struct shash_desc shash;
-	char ctx[0];
-};
-
 struct s {
 	__be32 conv;
 };
@@ -52431,62 +71692,8 @@
 	u32 bytes;
 };
 
-typedef enum {
-	ZSTD_fast = 0,
-	ZSTD_dfast = 1,
-	ZSTD_greedy = 2,
-	ZSTD_lazy = 3,
-	ZSTD_lazy2 = 4,
-	ZSTD_btlazy2 = 5,
-	ZSTD_btopt = 6,
-	ZSTD_btopt2 = 7,
-} ZSTD_strategy;
-
-typedef struct {
-	unsigned int windowLog;
-	unsigned int chainLog;
-	unsigned int hashLog;
-	unsigned int searchLog;
-	unsigned int searchLength;
-	unsigned int targetLength;
-	ZSTD_strategy strategy;
-} ZSTD_compressionParameters;
-
-typedef struct {
-	unsigned int contentSizeFlag;
-	unsigned int checksumFlag;
-	unsigned int noDictIDFlag;
-} ZSTD_frameParameters;
-
-typedef struct {
-	ZSTD_compressionParameters cParams;
-	ZSTD_frameParameters fParams;
-} ZSTD_parameters;
-
-struct ZSTD_CCtx_s;
-
-typedef struct ZSTD_CCtx_s ZSTD_CCtx;
-
-struct ZSTD_DCtx_s;
-
-typedef struct ZSTD_DCtx_s ZSTD_DCtx;
-
-struct zstd_ctx {
-	ZSTD_CCtx *cctx;
-	ZSTD_DCtx *dctx;
-	void *cwksp;
-	void *dwksp;
-};
-
-enum asymmetric_payload_bits {
-	asym_crypto = 0,
-	asym_subtype = 1,
-	asym_key_ids = 2,
-	asym_auth = 3,
-};
-
 struct asymmetric_key_ids {
-	void *id[2];
+	void *id[3];
 };
 
 struct asymmetric_key_subtype {
@@ -52507,99 +71714,6 @@
 	int (*parse)(struct key_preparsed_payload *);
 };
 
-enum OID {
-	OID_id_dsa_with_sha1 = 0,
-	OID_id_dsa = 1,
-	OID_id_ecdsa_with_sha1 = 2,
-	OID_id_ecPublicKey = 3,
-	OID_rsaEncryption = 4,
-	OID_md2WithRSAEncryption = 5,
-	OID_md3WithRSAEncryption = 6,
-	OID_md4WithRSAEncryption = 7,
-	OID_sha1WithRSAEncryption = 8,
-	OID_sha256WithRSAEncryption = 9,
-	OID_sha384WithRSAEncryption = 10,
-	OID_sha512WithRSAEncryption = 11,
-	OID_sha224WithRSAEncryption = 12,
-	OID_data = 13,
-	OID_signed_data = 14,
-	OID_email_address = 15,
-	OID_contentType = 16,
-	OID_messageDigest = 17,
-	OID_signingTime = 18,
-	OID_smimeCapabilites = 19,
-	OID_smimeAuthenticatedAttrs = 20,
-	OID_md2 = 21,
-	OID_md4 = 22,
-	OID_md5 = 23,
-	OID_msIndirectData = 24,
-	OID_msStatementType = 25,
-	OID_msSpOpusInfo = 26,
-	OID_msPeImageDataObjId = 27,
-	OID_msIndividualSPKeyPurpose = 28,
-	OID_msOutlookExpress = 29,
-	OID_certAuthInfoAccess = 30,
-	OID_sha1 = 31,
-	OID_sha256 = 32,
-	OID_sha384 = 33,
-	OID_sha512 = 34,
-	OID_sha224 = 35,
-	OID_commonName = 36,
-	OID_surname = 37,
-	OID_countryName = 38,
-	OID_locality = 39,
-	OID_stateOrProvinceName = 40,
-	OID_organizationName = 41,
-	OID_organizationUnitName = 42,
-	OID_title = 43,
-	OID_description = 44,
-	OID_name = 45,
-	OID_givenName = 46,
-	OID_initials = 47,
-	OID_generationalQualifier = 48,
-	OID_subjectKeyIdentifier = 49,
-	OID_keyUsage = 50,
-	OID_subjectAltName = 51,
-	OID_issuerAltName = 52,
-	OID_basicConstraints = 53,
-	OID_crlDistributionPoints = 54,
-	OID_certPolicies = 55,
-	OID_authorityKeyIdentifier = 56,
-	OID_extKeyUsage = 57,
-	OID_gostCPSignA = 58,
-	OID_gostCPSignB = 59,
-	OID_gostCPSignC = 60,
-	OID_gost2012PKey256 = 61,
-	OID_gost2012PKey512 = 62,
-	OID_gost2012Digest256 = 63,
-	OID_gost2012Digest512 = 64,
-	OID_gost2012Signature256 = 65,
-	OID_gost2012Signature512 = 66,
-	OID_gostTC26Sign256A = 67,
-	OID_gostTC26Sign256B = 68,
-	OID_gostTC26Sign256C = 69,
-	OID_gostTC26Sign256D = 70,
-	OID_gostTC26Sign512A = 71,
-	OID_gostTC26Sign512B = 72,
-	OID_gostTC26Sign512C = 73,
-	OID_sm2 = 74,
-	OID_sm3 = 75,
-	OID_SM2_with_SM3 = 76,
-	OID_sm3WithRSAEncryption = 77,
-	OID__NR = 78,
-};
-
-struct public_key {
-	void *key;
-	u32 keylen;
-	enum OID algo;
-	void *params;
-	u32 paramlen;
-	bool key_is_private;
-	const char *id_type;
-	const char *pkey_algo;
-};
-
 enum x509_actions {
 	ACT_x509_extract_key_data = 0,
 	ACT_x509_extract_name_segment = 1,
@@ -52608,8 +71722,8 @@
 	ACT_x509_note_not_after = 4,
 	ACT_x509_note_not_before = 5,
 	ACT_x509_note_params = 6,
-	ACT_x509_note_pkey_algo = 7,
-	ACT_x509_note_serial = 8,
+	ACT_x509_note_serial = 7,
+	ACT_x509_note_sig_algo = 8,
 	ACT_x509_note_signature = 9,
 	ACT_x509_note_subject = 10,
 	ACT_x509_note_tbs_certificate = 11,
@@ -52653,7 +71767,6 @@
 	bool seen;
 	bool verified;
 	bool self_signed;
-	bool unsupported_key;
 	bool unsupported_sig;
 	bool blacklisted;
 };
@@ -52661,15 +71774,13 @@
 struct x509_parse_context {
 	struct x509_certificate *cert;
 	long unsigned int data;
-	const void *cert_start;
 	const void *key;
 	size_t key_size;
 	const void *params;
 	size_t params_size;
 	enum OID key_algo;
 	enum OID last_oid;
-	enum OID algo_oid;
-	unsigned char nr_mpi;
+	enum OID sig_algo;
 	u8 o_size;
 	u8 cn_size;
 	u8 email_size;
@@ -52749,16 +71860,284 @@
 	bool expect_skid;
 };
 
-struct biovec_slab {
-	int nr_vecs;
-	char *name;
-	struct kmem_cache *slab;
+struct mz_hdr {
+	uint16_t magic;
+	uint16_t lbsize;
+	uint16_t blocks;
+	uint16_t relocs;
+	uint16_t hdrsize;
+	uint16_t min_extra_pps;
+	uint16_t max_extra_pps;
+	uint16_t ss;
+	uint16_t sp;
+	uint16_t checksum;
+	uint16_t ip;
+	uint16_t cs;
+	uint16_t reloc_table_offset;
+	uint16_t overlay_num;
+	uint16_t reserved0[4];
+	uint16_t oem_id;
+	uint16_t oem_info;
+	uint16_t reserved1[10];
+	uint32_t peaddr;
+	char message[0];
+};
+
+struct pe_hdr {
+	uint32_t magic;
+	uint16_t machine;
+	uint16_t sections;
+	uint32_t timestamp;
+	uint32_t symbol_table;
+	uint32_t symbols;
+	uint16_t opt_hdr_size;
+	uint16_t flags;
+};
+
+struct pe32_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint32_t data_base;
+	uint32_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint32_t stack_size_req;
+	uint32_t stack_size;
+	uint32_t heap_size_req;
+	uint32_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct pe32plus_opt_hdr {
+	uint16_t magic;
+	uint8_t ld_major;
+	uint8_t ld_minor;
+	uint32_t text_size;
+	uint32_t data_size;
+	uint32_t bss_size;
+	uint32_t entry_point;
+	uint32_t code_base;
+	uint64_t image_base;
+	uint32_t section_align;
+	uint32_t file_align;
+	uint16_t os_major;
+	uint16_t os_minor;
+	uint16_t image_major;
+	uint16_t image_minor;
+	uint16_t subsys_major;
+	uint16_t subsys_minor;
+	uint32_t win32_version;
+	uint32_t image_size;
+	uint32_t header_size;
+	uint32_t csum;
+	uint16_t subsys;
+	uint16_t dll_flags;
+	uint64_t stack_size_req;
+	uint64_t stack_size;
+	uint64_t heap_size_req;
+	uint64_t heap_size;
+	uint32_t loader_flags;
+	uint32_t data_dirs;
+};
+
+struct data_dirent {
+	uint32_t virtual_address;
+	uint32_t size;
+};
+
+struct data_directory {
+	struct data_dirent exports;
+	struct data_dirent imports;
+	struct data_dirent resources;
+	struct data_dirent exceptions;
+	struct data_dirent certs;
+	struct data_dirent base_relocations;
+	struct data_dirent debug;
+	struct data_dirent arch;
+	struct data_dirent global_ptr;
+	struct data_dirent tls;
+	struct data_dirent load_config;
+	struct data_dirent bound_imports;
+	struct data_dirent import_addrs;
+	struct data_dirent delay_imports;
+	struct data_dirent clr_runtime_hdr;
+	struct data_dirent reserved;
+};
+
+struct section_header {
+	char name[8];
+	uint32_t virtual_size;
+	uint32_t virtual_address;
+	uint32_t raw_data_size;
+	uint32_t data_addr;
+	uint32_t relocs;
+	uint32_t line_numbers;
+	uint16_t num_relocs;
+	uint16_t num_lin_numbers;
+	uint32_t flags;
+};
+
+struct win_certificate {
+	uint32_t length;
+	uint16_t revision;
+	uint16_t cert_type;
+};
+
+struct pefile_context {
+	unsigned int header_size;
+	unsigned int image_checksum_offset;
+	unsigned int cert_dirent_offset;
+	unsigned int n_data_dirents;
+	unsigned int n_sections;
+	unsigned int certs_size;
+	unsigned int sig_offset;
+	unsigned int sig_len;
+	const struct section_header *secs;
+	const void *digest;
+	unsigned int digest_len;
+	const char *digest_algo;
+};
+
+enum mscode_actions {
+	ACT_mscode_note_content_type = 0,
+	ACT_mscode_note_digest = 1,
+	ACT_mscode_note_digest_algo = 2,
+	NR__mscode_actions = 3,
+};
+
+struct kdf_testvec {
+	unsigned char *key;
+	size_t keylen;
+	unsigned char *ikm;
+	size_t ikmlen;
+	struct kvec info;
+	unsigned char *expected;
+	size_t expectedlen;
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+struct blk_integrity_iter {
+	void *prot_buf;
+	void *data_buf;
+	sector_t seed;
+	unsigned int data_size;
+	short unsigned int interval;
+	unsigned char tuple_size;
+	const char *disk_name;
+};
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
+};
+
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	spinlock_t async_bio_lock;
+	struct bio_list async_bios;
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	unsigned int nr;
 };
 
 enum rq_qos_id {
 	RQ_QOS_WBT = 0,
 	RQ_QOS_LATENCY = 1,
 	RQ_QOS_COST = 2,
+	RQ_QOS_IOPRIO = 3,
 };
 
 struct rq_qos_ops;
@@ -52768,17 +72147,17 @@
 	struct request_queue *q;
 	enum rq_qos_id id;
 	struct rq_qos *next;
+	struct dentry *debugfs_dir;
 };
 
-enum hctx_type {
-	HCTX_TYPE_DEFAULT = 0,
-	HCTX_TYPE_READ = 1,
-	HCTX_TYPE_POLL = 2,
-	HCTX_MAX_TYPES = 3,
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
 };
 
-struct blk_mq_debugfs_attr;
-
 struct rq_qos_ops {
 	void (*throttle)(struct rq_qos *, struct bio *);
 	void (*track)(struct rq_qos *, struct request *, struct bio *);
@@ -52793,6 +72172,44 @@
 	const struct blk_mq_debugfs_attr *debugfs_attrs;
 };
 
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	char fc_app_id[129];
+	struct list_head cgwb_list;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
 struct bio_slab {
 	struct kmem_cache *slab;
 	unsigned int slab_ref;
@@ -52800,6 +72217,46 @@
 	char name[8];
 };
 
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	unsigned int registered: 1;
+	struct hlist_head hash[64];
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	short unsigned int index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+};
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
 enum {
 	BLK_MQ_F_SHOULD_MERGE = 1,
 	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
@@ -52807,6 +72264,7 @@
 	BLK_MQ_F_TAG_HCTX_SHARED = 8,
 	BLK_MQ_F_BLOCKING = 32,
 	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
 	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
 	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
 	BLK_MQ_S_STOPPED = 0,
@@ -52817,6 +72275,81 @@
 	BLK_MQ_CPU_WORK_BATCH = 8,
 };
 
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+struct blk_mq_alloc_data;
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+};
+
+struct elv_fs_entry;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+};
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	unsigned int cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx *queue_ctx;
+};
+
 enum {
 	WBT_RWQ_BG = 0,
 	WBT_RWQ_KSWAPD = 1,
@@ -52824,11 +72357,6 @@
 	WBT_NUM_RWQ = 3,
 };
 
-struct req_iterator {
-	struct bvec_iter iter;
-	struct bio *bio;
-};
-
 struct blk_plug_cb;
 
 typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
@@ -52863,7 +72391,7 @@
 	char __data[0];
 };
 
-struct trace_event_raw_block_rq_complete {
+struct trace_event_raw_block_rq_completion {
 	struct trace_entry ent;
 	dev_t dev;
 	sector_t sector;
@@ -52886,16 +72414,6 @@
 	char __data[0];
 };
 
-struct trace_event_raw_block_bio_bounce {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
 struct trace_event_raw_block_bio_complete {
 	struct trace_entry ent;
 	dev_t dev;
@@ -52906,27 +72424,7 @@
 	char __data[0];
 };
 
-struct trace_event_raw_block_bio_merge {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_bio_queue {
-	struct trace_entry ent;
-	dev_t dev;
-	sector_t sector;
-	unsigned int nr_sector;
-	char rwbs[8];
-	char comm[16];
-	char __data[0];
-};
-
-struct trace_event_raw_block_get_rq {
+struct trace_event_raw_block_bio {
 	struct trace_entry ent;
 	dev_t dev;
 	sector_t sector;
@@ -52988,7 +72486,7 @@
 	u32 cmd;
 };
 
-struct trace_event_data_offsets_block_rq_complete {
+struct trace_event_data_offsets_block_rq_completion {
 	u32 cmd;
 };
 
@@ -52996,15 +72494,9 @@
 	u32 cmd;
 };
 
-struct trace_event_data_offsets_block_bio_bounce {};
-
 struct trace_event_data_offsets_block_bio_complete {};
 
-struct trace_event_data_offsets_block_bio_merge {};
-
-struct trace_event_data_offsets_block_bio_queue {};
-
-struct trace_event_data_offsets_block_get_rq {};
+struct trace_event_data_offsets_block_bio {};
 
 struct trace_event_data_offsets_block_plug {};
 
@@ -53020,44 +72512,159 @@
 
 typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
 
-typedef void (*btf_trace_block_rq_requeue)(void *, struct request_queue *, struct request *);
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
 
-typedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
 
-typedef void (*btf_trace_block_rq_insert)(void *, struct request_queue *, struct request *);
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
 
-typedef void (*btf_trace_block_rq_issue)(void *, struct request_queue *, struct request *);
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
 
-typedef void (*btf_trace_block_rq_merge)(void *, struct request_queue *, struct request *);
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
 
-typedef void (*btf_trace_block_bio_bounce)(void *, struct request_queue *, struct bio *);
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
 
 typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
 
-typedef void (*btf_trace_block_bio_backmerge)(void *, struct request_queue *, struct request *, struct bio *);
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
 
-typedef void (*btf_trace_block_bio_frontmerge)(void *, struct request_queue *, struct request *, struct bio *);
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
 
-typedef void (*btf_trace_block_bio_queue)(void *, struct request_queue *, struct bio *);
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
 
-typedef void (*btf_trace_block_getrq)(void *, struct request_queue *, struct bio *, int);
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
 
-typedef void (*btf_trace_block_sleeprq)(void *, struct request_queue *, struct bio *, int);
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
 
 typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
 
 typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
 
-typedef void (*btf_trace_block_split)(void *, struct request_queue *, struct bio *, unsigned int);
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
 
-typedef void (*btf_trace_block_bio_remap)(void *, struct request_queue *, struct bio *, dev_t, sector_t);
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
 
-typedef void (*btf_trace_block_rq_remap)(void *, struct request_queue *, struct request *, dev_t, sector_t);
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_init_cpd_fn *cpd_init_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	long unsigned int first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	long unsigned int disptime;
+	unsigned int flags;
+	bool has_rules[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	long unsigned int last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	long unsigned int last_check_time;
+	long unsigned int latency_target;
+	long unsigned int latency_target_conf;
+	long unsigned int slice_start[2];
+	long unsigned int slice_end[2];
+	long unsigned int last_finish_time;
+	long unsigned int checked_last_finish_time;
+	long unsigned int avg_idletime;
+	long unsigned int idletime_threshold;
+	long unsigned int idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	long unsigned int bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_HAS_IOPS_LIMIT = 4,
+	THROTL_TG_CANCELING = 8,
+};
 
 enum {
-	BLK_MQ_NO_TAG = 4294967295,
-	BLK_MQ_TAG_MIN = 1,
-	BLK_MQ_TAG_MAX = 4294967294,
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
 };
 
 struct queue_sysfs_entry {
@@ -53067,12 +72674,18 @@
 };
 
 enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+enum {
 	REQ_FSEQ_PREFLUSH = 1,
 	REQ_FSEQ_DATA = 2,
 	REQ_FSEQ_POSTFLUSH = 4,
 	REQ_FSEQ_DONE = 8,
 	REQ_FSEQ_ACTIONS = 7,
-	FLUSH_PENDING_TIMEOUT = 5000,
+	FLUSH_PENDING_TIMEOUT = 1250,
 };
 
 enum {
@@ -53096,6 +72709,11 @@
 	struct iovec iov[0];
 };
 
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
 enum bio_merge_status {
 	BIO_MERGE_OK = 0,
 	BIO_MERGE_NONE = 1,
@@ -53110,10 +72728,15 @@
 };
 
 struct mq_inflight {
-	struct hd_struct *part;
+	struct block_device *part;
 	unsigned int inflight[2];
 };
 
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
 struct flush_busy_ctx_data {
 	struct blk_mq_hw_ctx *hctx;
 	struct list_head *list;
@@ -53146,13 +72769,12 @@
 	struct wait_queue_entry wait;
 };
 
-typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);
-
 typedef bool busy_tag_iter_fn(struct request *, void *, bool);
 
 struct bt_iter_data {
 	struct blk_mq_hw_ctx *hctx;
-	busy_iter_fn *fn;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
 	void *data;
 	bool reserved;
 };
@@ -53167,13 +72789,7 @@
 struct blk_queue_stats {
 	struct list_head callbacks;
 	spinlock_t lock;
-	bool enable_accounting;
-};
-
-struct blk_mq_ctx_sysfs_entry {
-	struct attribute attr;
-	ssize_t (*show)(struct blk_mq_ctx *, char *);
-	ssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);
+	int accounting;
 };
 
 struct blk_mq_hw_ctx_sysfs_entry {
@@ -53272,20 +72888,9 @@
 };
 
 enum {
-	DISK_EVENT_FLAG_POLL = 1,
-	DISK_EVENT_FLAG_UEVENT = 2,
-};
-
-struct disk_events {
-	struct list_head node;
-	struct gendisk *disk;
-	spinlock_t lock;
-	struct mutex block_mutex;
-	int block;
-	unsigned int pending;
-	unsigned int clearing;
-	long int poll_msecs;
-	struct delayed_work dwork;
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
 };
 
 struct badblocks {
@@ -53300,17 +72905,11 @@
 	sector_t size;
 };
 
-struct disk_part_iter {
-	struct gendisk *disk;
-	struct hd_struct *part;
-	int idx;
-	unsigned int flags;
-};
-
 struct blk_major_name {
 	struct blk_major_name *next;
 	int major;
 	char name[16];
+	void (*probe)(dev_t);
 };
 
 enum {
@@ -53320,7 +72919,7 @@
 };
 
 struct parsed_partitions {
-	struct block_device *bdev;
+	struct gendisk *disk;
 	char name[32];
 	struct {
 		sector_t from;
@@ -53411,6 +73010,84 @@
 	u16 checksum;
 } __attribute__((packed));
 
+struct lvm_rec {
+	char lvm_id[4];
+	char reserved4[16];
+	__be32 lvmarea_len;
+	__be32 vgda_len;
+	__be32 vgda_psn[2];
+	char reserved36[10];
+	__be16 pp_size;
+	char reserved46[12];
+	__be16 version;
+};
+
+struct vgda {
+	__be32 secs;
+	__be32 usec;
+	char reserved8[16];
+	__be16 numlvs;
+	__be16 maxlvs;
+	__be16 pp_size;
+	__be16 numpvs;
+	__be16 total_vgdas;
+	__be16 vgda_size;
+};
+
+struct lvd {
+	__be16 lv_ix;
+	__be16 res2;
+	__be16 res4;
+	__be16 maxsize;
+	__be16 lv_state;
+	__be16 mirror;
+	__be16 mirror_policy;
+	__be16 num_lps;
+	__be16 res10[8];
+};
+
+struct lvname {
+	char name[64];
+};
+
+struct ppe {
+	__be16 lv_ix;
+	short unsigned int res2;
+	short unsigned int res4;
+	__be16 lp_ix;
+	short unsigned int res8[12];
+};
+
+struct pvd {
+	char reserved0[16];
+	__be16 pp_count;
+	char reserved18[2];
+	__be32 psn_part1;
+	char reserved24[8];
+	struct ppe ppe[1016];
+};
+
+struct lv_info {
+	short unsigned int pps_per_lv;
+	short unsigned int pps_found;
+	unsigned char lv_is_contiguous;
+};
+
+struct cmdline_subpart {
+	char name[32];
+	sector_t from;
+	sector_t size;
+	int flags;
+	struct cmdline_subpart *next_subpart;
+};
+
+struct cmdline_parts {
+	char name[32];
+	unsigned int nr_subparts;
+	struct cmdline_subpart *subpart;
+	struct cmdline_parts *next_parts;
+};
+
 struct mac_partition {
 	__be16 signature;
 	__be16 res1;
@@ -53549,48 +73226,6 @@
 	struct list_head v_part;
 };
 
-struct fat_boot_sector {
-	__u8 ignored[3];
-	__u8 system_id[8];
-	__u8 sector_size[2];
-	__u8 sec_per_clus;
-	__le16 reserved;
-	__u8 fats;
-	__u8 dir_entries[2];
-	__u8 sectors[2];
-	__u8 media;
-	__le16 fat_length;
-	__le16 secs_track;
-	__le16 heads;
-	__le32 hidden;
-	__le32 total_sect;
-	union {
-		struct {
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat16;
-		struct {
-			__le32 length;
-			__le16 flags;
-			__u8 version[2];
-			__le32 root_cluster;
-			__le16 info_sector;
-			__le16 backup_boot;
-			__le16 reserved2[6];
-			__u8 drive_number;
-			__u8 state;
-			__u8 signature;
-			__u8 vol_id[4];
-			__u8 vol_label[11];
-			__u8 fs_type[8];
-		} fat32;
-	};
-};
-
 enum msdos_sys_ind {
 	DOS_EXTENDED_PARTITION = 5,
 	LINUX_EXTENDED_PARTITION = 133,
@@ -53969,240 +73604,69 @@
 	bool got_token;
 };
 
-struct cdrom_device_ops;
-
-struct cdrom_device_info {
-	const struct cdrom_device_ops *ops;
-	struct list_head list;
+struct disk_events {
+	struct list_head node;
 	struct gendisk *disk;
-	void *handle;
-	int mask;
-	int speed;
-	int capacity;
-	unsigned int options: 30;
-	unsigned int mc_flags: 2;
-	unsigned int vfs_events;
-	unsigned int ioctl_events;
-	int use_count;
-	char name[20];
-	__u8 sanyo_slot: 2;
-	__u8 keeplocked: 1;
-	__u8 reserved: 5;
-	int cdda_method;
-	__u8 last_sense;
-	__u8 media_written;
-	short unsigned int mmc3_profile;
-	int for_data;
-	int (*exit)(struct cdrom_device_info *);
-	int mrw_mode_page;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long int poll_msecs;
+	struct delayed_work dwork;
 };
 
-struct scsi_sense_hdr {
-	u8 response_code;
-	u8 sense_key;
-	u8 asc;
-	u8 ascq;
-	u8 byte4;
-	u8 byte5;
-	u8 byte6;
-	u8 additional_length;
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
 };
 
-struct cdrom_msf0 {
-	__u8 minute;
-	__u8 second;
-	__u8 frame;
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
 };
 
-union cdrom_addr {
-	struct cdrom_msf0 msf;
-	int lba;
-};
-
-struct cdrom_multisession {
-	union cdrom_addr addr;
-	__u8 xa_flag;
-	__u8 addr_format;
-};
-
-struct cdrom_mcn {
-	__u8 medium_catalog_number[14];
-};
-
-struct request_sense;
-
-struct cdrom_generic_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct request_sense *sense;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	union {
-		void *reserved[1];
-		void *unused;
-	};
-};
-
-struct request_sense {
-	__u8 error_code: 7;
-	__u8 valid: 1;
-	__u8 segment_number;
-	__u8 sense_key: 4;
-	__u8 reserved2: 1;
-	__u8 ili: 1;
-	__u8 reserved1: 2;
-	__u8 information[4];
-	__u8 add_sense_len;
-	__u8 command_info[4];
-	__u8 asc;
-	__u8 ascq;
-	__u8 fruc;
-	__u8 sks[3];
-	__u8 asb[46];
-};
-
-struct packet_command {
-	unsigned char cmd[12];
-	unsigned char *buffer;
-	unsigned int buflen;
-	int stat;
-	struct scsi_sense_hdr *sshdr;
-	unsigned char data_direction;
-	int quiet;
-	int timeout;
-	void *reserved[1];
-};
-
-struct cdrom_device_ops {
-	int (*open)(struct cdrom_device_info *, int);
-	void (*release)(struct cdrom_device_info *);
-	int (*drive_status)(struct cdrom_device_info *, int);
-	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
-	int (*tray_move)(struct cdrom_device_info *, int);
-	int (*lock_door)(struct cdrom_device_info *, int);
-	int (*select_speed)(struct cdrom_device_info *, int);
-	int (*select_disc)(struct cdrom_device_info *, int);
-	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
-	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
-	int (*reset)(struct cdrom_device_info *);
-	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
-	const int capability;
-	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
-};
-
-struct scsi_ioctl_command {
-	unsigned int inlen;
-	unsigned int outlen;
-	unsigned char data[0];
-};
-
-enum scsi_device_event {
-	SDEV_EVT_MEDIA_CHANGE = 1,
-	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
-	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
-	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
-	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
-	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
-	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
-	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
-	SDEV_EVT_FIRST = 1,
-	SDEV_EVT_LAST = 8,
-	SDEV_EVT_MAXBITS = 9,
-};
-
-struct scsi_request {
-	unsigned char __cmd[16];
-	unsigned char *cmd;
-	short unsigned int cmd_len;
-	int result;
-	unsigned int sense_len;
-	unsigned int resid_len;
-	int retries;
-	void *sense;
-};
-
-struct sg_io_hdr {
-	int interface_id;
-	int dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	unsigned int dxfer_len;
-	void *dxferp;
-	unsigned char *cmdp;
-	void *sbp;
-	unsigned int timeout;
-	unsigned int flags;
-	int pack_id;
-	void *usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	int resid;
-	unsigned int duration;
-	unsigned int info;
-};
-
-struct compat_sg_io_hdr {
-	compat_int_t interface_id;
-	compat_int_t dxfer_direction;
-	unsigned char cmd_len;
-	unsigned char mx_sb_len;
-	short unsigned int iovec_count;
-	compat_uint_t dxfer_len;
-	compat_uint_t dxferp;
-	compat_uptr_t cmdp;
-	compat_uptr_t sbp;
-	compat_uint_t timeout;
-	compat_uint_t flags;
-	compat_int_t pack_id;
-	compat_uptr_t usr_ptr;
-	unsigned char status;
-	unsigned char masked_status;
-	unsigned char msg_status;
-	unsigned char sb_len_wr;
-	short unsigned int host_status;
-	short unsigned int driver_status;
-	compat_int_t resid;
-	compat_uint_t duration;
-	compat_uint_t info;
-};
-
-struct blk_cmd_filter {
-	long unsigned int read_ok[4];
-	long unsigned int write_ok[4];
-};
-
-struct compat_cdrom_generic_command {
-	unsigned char cmd[12];
-	compat_caddr_t buffer;
-	compat_uint_t buflen;
-	compat_int_t stat;
-	compat_caddr_t sense;
-	unsigned char data_direction;
-	unsigned char pad[3];
-	compat_int_t quiet;
-	compat_int_t timeout;
-	compat_caddr_t unused;
-};
-
-enum {
-	OMAX_SB_LEN = 16,
-};
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, fmode_t, unsigned int);
 
 struct bsg_device {
 	struct request_queue *queue;
-	spinlock_t lock;
-	struct hlist_node dev_list;
-	refcount_t ref_count;
-	char name[20];
+	struct device device;
+	struct cdev cdev;
 	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
 };
 
 struct bsg_job;
@@ -54234,86 +73698,39 @@
 
 typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
 
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+struct bsg_device___2;
+
 struct bsg_set {
 	struct blk_mq_tag_set tag_set;
+	struct bsg_device___2 *bd;
 	bsg_job_fn *job_fn;
 	bsg_timeout_fn *timeout_fn;
 };
 
-typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
-
-typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
-
-typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);
-
-typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);
-
-typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
-
-typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
-
-typedef size_t blkcg_pol_stat_pd_fn(struct blkg_policy_data *, char *, size_t);
-
-struct blkcg_policy {
-	int plid;
-	struct cftype *dfl_cftypes;
-	struct cftype *legacy_cftypes;
-	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
-	blkcg_pol_init_cpd_fn *cpd_init_fn;
-	blkcg_pol_free_cpd_fn *cpd_free_fn;
-	blkcg_pol_bind_cpd_fn *cpd_bind_fn;
-	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
-	blkcg_pol_init_pd_fn *pd_init_fn;
-	blkcg_pol_online_pd_fn *pd_online_fn;
-	blkcg_pol_offline_pd_fn *pd_offline_fn;
-	blkcg_pol_free_pd_fn *pd_free_fn;
-	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
-	blkcg_pol_stat_pd_fn *pd_stat_fn;
-};
-
 struct blkg_conf_ctx {
-	struct gendisk *disk;
+	struct block_device *bdev;
 	struct blkcg_gq *blkg;
 	char *body;
 };
 
-enum blkg_rwstat_type {
-	BLKG_RWSTAT_READ = 0,
-	BLKG_RWSTAT_WRITE = 1,
-	BLKG_RWSTAT_SYNC = 2,
-	BLKG_RWSTAT_ASYNC = 3,
-	BLKG_RWSTAT_DISCARD = 4,
-	BLKG_RWSTAT_NR = 5,
-	BLKG_RWSTAT_TOTAL = 5,
-};
-
-struct blkg_rwstat {
-	struct percpu_counter cpu_cnt[5];
-	atomic64_t aux_cnt[5];
-};
-
 struct blkg_rwstat_sample {
 	u64 cnt[5];
 };
 
-struct throtl_service_queue {
-	struct throtl_service_queue *parent_sq;
-	struct list_head queued[2];
-	unsigned int nr_queued[2];
-	struct rb_root_cached pending_tree;
-	unsigned int nr_pending;
-	long unsigned int first_pending_disptime;
-	struct timer_list pending_timer;
-};
-
 struct latency_bucket {
 	long unsigned int total_latency;
 	int samples;
@@ -54343,105 +73760,25 @@
 	bool track_bio_latency;
 };
 
-struct throtl_grp;
-
-struct throtl_qnode {
-	struct list_head node;
-	struct bio_list bios;
-	struct throtl_grp *tg;
+enum prio_policy {
+	POLICY_NO_CHANGE = 0,
+	POLICY_NONE_TO_RT = 1,
+	POLICY_RESTRICT_TO_BE = 2,
+	POLICY_ALL_TO_IDLE = 3,
 };
 
-struct throtl_grp {
+struct ioprio_blkg {
 	struct blkg_policy_data pd;
-	struct rb_node rb_node;
-	struct throtl_data *td;
-	struct throtl_service_queue service_queue;
-	struct throtl_qnode qnode_on_self[2];
-	struct throtl_qnode qnode_on_parent[2];
-	long unsigned int disptime;
-	unsigned int flags;
-	bool has_rules[2];
-	uint64_t bps[4];
-	uint64_t bps_conf[4];
-	unsigned int iops[4];
-	unsigned int iops_conf[4];
-	uint64_t bytes_disp[2];
-	unsigned int io_disp[2];
-	long unsigned int last_low_overflow_time[2];
-	uint64_t last_bytes_disp[2];
-	unsigned int last_io_disp[2];
-	long unsigned int last_check_time;
-	long unsigned int latency_target;
-	long unsigned int latency_target_conf;
-	long unsigned int slice_start[2];
-	long unsigned int slice_end[2];
-	long unsigned int last_finish_time;
-	long unsigned int checked_last_finish_time;
-	long unsigned int avg_idletime;
-	long unsigned int idletime_threshold;
-	long unsigned int idletime_threshold_conf;
-	unsigned int bio_cnt;
-	unsigned int bad_bio_cnt;
-	long unsigned int bio_cnt_reset_time;
-	struct blkg_rwstat stat_bytes;
-	struct blkg_rwstat stat_ios;
 };
 
-enum tg_state_flags {
-	THROTL_TG_PENDING = 1,
-	THROTL_TG_WAS_EMPTY = 2,
+struct ioprio_blkcg {
+	struct blkcg_policy_data cpd;
+	enum prio_policy prio_policy;
+	bool prio_set;
 };
 
-enum {
-	LIMIT_LOW = 0,
-	LIMIT_MAX = 1,
-	LIMIT_CNT = 2,
-};
-
-struct blk_iolatency {
+struct blk_ioprio {
 	struct rq_qos rqos;
-	struct timer_list timer;
-	atomic_t enabled;
-};
-
-struct iolatency_grp;
-
-struct child_latency_info {
-	spinlock_t lock;
-	u64 last_scale_event;
-	u64 scale_lat;
-	u64 nr_samples;
-	struct iolatency_grp *scale_grp;
-	atomic_t scale_cookie;
-};
-
-struct percentile_stats {
-	u64 total;
-	u64 missed;
-};
-
-struct latency_stat {
-	union {
-		struct percentile_stats ps;
-		struct blk_rq_stat rqs;
-	};
-};
-
-struct iolatency_grp {
-	struct blkg_policy_data pd;
-	struct latency_stat *stats;
-	struct latency_stat cur_stat;
-	struct blk_iolatency *blkiolat;
-	struct rq_depth rq_depth;
-	struct rq_wait rq_wait;
-	atomic64_t window_start;
-	atomic_t scale_cookie;
-	u64 min_lat_nsec;
-	u64 cur_win_nsec;
-	u64 lat_avg;
-	u64 nr_samples;
-	bool ssd;
-	struct child_latency_info child_lat;
 };
 
 enum {
@@ -54637,8 +73974,7 @@
 	struct hrtimer waitq_timer;
 	u64 activated_at;
 	struct iocg_pcpu_stat *pcpu_stat;
-	struct iocg_stat local_stat;
-	struct iocg_stat desc_stat;
+	struct iocg_stat stat;
 	struct iocg_stat last_stat;
 	u64 last_stat_abs_vusage;
 	u64 usage_delta_us;
@@ -54674,7 +74010,7 @@
 	s64 vbudget;
 };
 
-struct trace_event_raw_iocost_iocg_activate {
+struct trace_event_raw_iocost_iocg_state {
 	struct trace_entry ent;
 	u32 __data_loc_devname;
 	u32 __data_loc_cgroup;
@@ -54731,7 +74067,7 @@
 	char __data[0];
 };
 
-struct trace_event_data_offsets_iocost_iocg_activate {
+struct trace_event_data_offsets_iocost_iocg_state {
 	u32 devname;
 	u32 cgroup;
 };
@@ -54752,6 +74088,8 @@
 
 typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
 
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
 typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
 
 typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
@@ -54762,262 +74100,54 @@
 
 typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
 
-struct deadline_data {
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+enum {
+	DD_DIR_COUNT = 2,
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum {
+	DD_PRIO_COUNT = 3,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
 	struct rb_root sort_list[2];
 	struct list_head fifo_list[2];
 	struct request *next_rq[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
 	unsigned int batching;
 	unsigned int starved;
 	int fifo_expire[2];
 	int fifo_batch;
 	int writes_starved;
 	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
 	spinlock_t lock;
 	spinlock_t zone_lock;
-	struct list_head dispatch;
-};
-
-struct bfq_entity;
-
-struct bfq_service_tree {
-	struct rb_root active;
-	struct rb_root idle;
-	struct bfq_entity *first_idle;
-	struct bfq_entity *last_idle;
-	u64 vtime;
-	long unsigned int wsum;
-};
-
-struct bfq_sched_data;
-
-struct bfq_entity {
-	struct rb_node rb_node;
-	bool on_st_or_in_serv;
-	u64 start;
-	u64 finish;
-	struct rb_root *tree;
-	u64 min_start;
-	int service;
-	int budget;
-	int dev_weight;
-	int weight;
-	int new_weight;
-	int orig_weight;
-	struct bfq_entity *parent;
-	struct bfq_sched_data *my_sched_data;
-	struct bfq_sched_data *sched_data;
-	int prio_changed;
-	bool in_groups_with_pending_reqs;
-};
-
-struct bfq_sched_data {
-	struct bfq_entity *in_service_entity;
-	struct bfq_entity *next_in_service;
-	struct bfq_service_tree service_tree[3];
-	long unsigned int bfq_class_idle_last_service;
-};
-
-struct bfq_weight_counter {
-	unsigned int weight;
-	unsigned int num_active;
-	struct rb_node weights_node;
-};
-
-struct bfq_ttime {
-	u64 last_end_request;
-	u64 ttime_total;
-	long unsigned int ttime_samples;
-	u64 ttime_mean;
-};
-
-struct bfq_data;
-
-struct bfq_io_cq;
-
-struct bfq_queue {
-	int ref;
-	struct bfq_data *bfqd;
-	short unsigned int ioprio;
-	short unsigned int ioprio_class;
-	short unsigned int new_ioprio;
-	short unsigned int new_ioprio_class;
-	u64 last_serv_time_ns;
-	unsigned int inject_limit;
-	long unsigned int decrease_time_jif;
-	struct bfq_queue *new_bfqq;
-	struct rb_node pos_node;
-	struct rb_root *pos_root;
-	struct rb_root sort_list;
-	struct request *next_rq;
-	int queued[2];
-	int allocated;
-	int meta_pending;
-	struct list_head fifo;
-	struct bfq_entity entity;
-	struct bfq_weight_counter *weight_counter;
-	int max_budget;
-	long unsigned int budget_timeout;
-	int dispatched;
-	long unsigned int flags;
-	struct list_head bfqq_list;
-	struct bfq_ttime ttime;
-	u32 seek_history;
-	struct hlist_node burst_list_node;
-	sector_t last_request_pos;
-	unsigned int requests_within_timer;
-	pid_t pid;
-	struct bfq_io_cq *bic;
-	long unsigned int wr_cur_max_time;
-	long unsigned int soft_rt_next_start;
-	long unsigned int last_wr_start_finish;
-	unsigned int wr_coeff;
-	long unsigned int last_idle_bklogged;
-	long unsigned int service_from_backlogged;
-	long unsigned int service_from_wr;
-	long unsigned int wr_start_at_switch_to_srt;
-	long unsigned int split_time;
-	long unsigned int first_IO_time;
-	u32 max_service_rate;
-	struct bfq_queue *waker_bfqq;
-	struct hlist_node woken_list_node;
-	struct hlist_head woken_list;
-};
-
-struct bfq_group;
-
-struct bfq_data {
-	struct request_queue *queue;
-	struct list_head dispatch;
-	struct bfq_group *root_group;
-	struct rb_root_cached queue_weights_tree;
-	unsigned int num_groups_with_pending_reqs;
-	unsigned int busy_queues[3];
-	int wr_busy_queues;
-	int queued;
-	int rq_in_driver;
-	bool nonrot_with_queueing;
-	int max_rq_in_driver;
-	int hw_tag_samples;
-	int hw_tag;
-	int budgets_assigned;
-	struct hrtimer idle_slice_timer;
-	struct bfq_queue *in_service_queue;
-	sector_t last_position;
-	sector_t in_serv_last_pos;
-	u64 last_completion;
-	struct bfq_queue *last_completed_rq_bfqq;
-	u64 last_empty_occupied_ns;
-	bool wait_dispatch;
-	struct request *waited_rq;
-	bool rqs_injected;
-	u64 first_dispatch;
-	u64 last_dispatch;
-	ktime_t last_budget_start;
-	ktime_t last_idling_start;
-	long unsigned int last_idling_start_jiffies;
-	int peak_rate_samples;
-	u32 sequential_samples;
-	u64 tot_sectors_dispatched;
-	u32 last_rq_max_size;
-	u64 delta_from_first;
-	u32 peak_rate;
-	int bfq_max_budget;
-	struct list_head active_list;
-	struct list_head idle_list;
-	u64 bfq_fifo_expire[2];
-	unsigned int bfq_back_penalty;
-	unsigned int bfq_back_max;
-	u32 bfq_slice_idle;
-	int bfq_user_max_budget;
-	unsigned int bfq_timeout;
-	unsigned int bfq_requests_within_timer;
-	bool strict_guarantees;
-	long unsigned int last_ins_in_burst;
-	long unsigned int bfq_burst_interval;
-	int burst_size;
-	struct bfq_entity *burst_parent_entity;
-	long unsigned int bfq_large_burst_thresh;
-	bool large_burst;
-	struct hlist_head burst_list;
-	bool low_latency;
-	unsigned int bfq_wr_coeff;
-	unsigned int bfq_wr_max_time;
-	unsigned int bfq_wr_rt_max_time;
-	unsigned int bfq_wr_min_idle_time;
-	long unsigned int bfq_wr_min_inter_arr_async;
-	unsigned int bfq_wr_max_softrt_rate;
-	u64 rate_dur_prod;
-	struct bfq_queue oom_bfqq;
-	spinlock_t lock;
-	struct bfq_io_cq *bio_bic;
-	struct bfq_queue *bio_bfqq;
-	unsigned int word_depths[4];
-};
-
-struct bfq_io_cq {
-	struct io_cq icq;
-	struct bfq_queue *bfqq[2];
-	int ioprio;
-	uint64_t blkcg_serial_nr;
-	bool saved_has_short_ttime;
-	bool saved_IO_bound;
-	bool saved_in_large_burst;
-	bool was_in_burst_list;
-	unsigned int saved_weight;
-	long unsigned int saved_wr_coeff;
-	long unsigned int saved_last_wr_start_finish;
-	long unsigned int saved_wr_start_at_switch_to_srt;
-	unsigned int saved_wr_cur_max_time;
-	struct bfq_ttime saved_ttime;
-};
-
-struct bfqg_stats {
-	struct blkg_rwstat bytes;
-	struct blkg_rwstat ios;
-};
-
-struct bfq_group {
-	struct blkg_policy_data pd;
-	char blkg_path[128];
-	int ref;
-	struct bfq_entity entity;
-	struct bfq_sched_data sched_data;
-	void *bfqd;
-	struct bfq_queue *async_bfqq[16];
-	struct bfq_queue *async_idle_bfqq;
-	struct bfq_entity *my_entity;
-	int active_entities;
-	struct rb_root rq_pos_tree;
-	struct bfqg_stats stats;
-};
-
-enum bfqq_state_flags {
-	BFQQF_just_created = 0,
-	BFQQF_busy = 1,
-	BFQQF_wait_request = 2,
-	BFQQF_non_blocking_wait_rq = 3,
-	BFQQF_fifo_expire = 4,
-	BFQQF_has_short_ttime = 5,
-	BFQQF_sync = 6,
-	BFQQF_IO_bound = 7,
-	BFQQF_in_large_burst = 8,
-	BFQQF_softrt_update = 9,
-	BFQQF_coop = 10,
-	BFQQF_split_coop = 11,
-	BFQQF_has_waker = 12,
-};
-
-enum bfqq_expiration {
-	BFQQE_TOO_IDLE = 0,
-	BFQQE_BUDGET_TIMEOUT = 1,
-	BFQQE_BUDGET_EXHAUSTED = 2,
-	BFQQE_NO_MORE_REQUESTS = 3,
-	BFQQE_PREEMPTED = 4,
-};
-
-struct bfq_group_data {
-	struct blkcg_policy_data pd;
-	unsigned int weight;
 };
 
 enum bip_flags {
@@ -55054,6 +74184,12 @@
 	__be32 ref_tag;
 };
 
+struct crc64_pi_tuple {
+	__be64 guard_tag;
+	__be16 app_tag;
+	__u8 ref_tag[6];
+};
+
 typedef __be16 csum_fn(void *, unsigned int);
 
 struct virtio_device_id {
@@ -55083,6 +74219,7 @@
 	bool config_enabled;
 	bool config_change_pending;
 	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
 	struct device dev;
 	struct virtio_device_id id;
 	const struct virtio_config_ops *config;
@@ -55094,8 +74231,6 @@
 
 typedef void vq_callback_t(struct virtqueue *);
 
-struct irq_affinity___2;
-
 struct virtio_shm_region;
 
 struct virtio_config_ops {
@@ -55105,8 +74240,9 @@
 	u8 (*get_status)(struct virtio_device *);
 	void (*set_status)(struct virtio_device *, u8);
 	void (*reset)(struct virtio_device *);
-	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity___2 *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
 	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
 	u64 (*get_features)(struct virtio_device *);
 	int (*finalize_features)(struct virtio_device *);
 	const char * (*bus_name)(struct virtio_device *);
@@ -55182,11 +74318,13 @@
 	RDMA_RESTRACK_MR = 4,
 	RDMA_RESTRACK_CTX = 5,
 	RDMA_RESTRACK_COUNTER = 6,
-	RDMA_RESTRACK_MAX = 7,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
 };
 
 struct rdma_restrack_entry {
 	bool valid;
+	u8 no_track: 1;
 	struct kref kref;
 	struct completion comp;
 	struct task_struct *task;
@@ -55221,11 +74359,14 @@
 	struct mutex lock;
 };
 
+struct rdma_stat_desc;
+
 struct rdma_hw_stats {
 	struct mutex lock;
 	long unsigned int timestamp;
 	long unsigned int lifespan;
-	const char * const *names;
+	const struct rdma_stat_desc *descs;
+	long unsigned int *is_disabled;
 	int num_counters;
 	u64 value[0];
 };
@@ -55240,7 +74381,7 @@
 	struct rdma_counter_mode mode;
 	struct mutex lock;
 	struct rdma_hw_stats *stats;
-	u8 port;
+	u32 port;
 };
 
 enum rdma_driver_id {
@@ -55254,6 +74395,7 @@
 	RDMA_DRIVER_OCRDMA = 7,
 	RDMA_DRIVER_NES = 8,
 	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
 	RDMA_DRIVER_VMW_PVRDMA = 10,
 	RDMA_DRIVER_QEDR = 11,
 	RDMA_DRIVER_HNS = 12,
@@ -55383,8 +74525,6 @@
 
 struct ib_flow_action;
 
-struct ib_flow_action_attrs_esp;
-
 struct ib_wq;
 
 struct ib_wq_init_attr;
@@ -55410,6 +74550,8 @@
 	enum rdma_driver_id driver_id;
 	u32 uverbs_abi_ver;
 	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
 	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
 	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
 	void (*drain_rq)(struct ib_qp *);
@@ -55417,24 +74559,23 @@
 	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
 	int (*peek_cq)(struct ib_cq *, int);
 	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
-	int (*req_ncomp_notif)(struct ib_cq *, int);
 	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
-	int (*process_mad)(struct ib_device *, int, u8, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
 	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
 	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
 	void (*get_dev_fw_str)(struct ib_device *, char *);
 	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
-	int (*query_port)(struct ib_device *, u8, struct ib_port_attr *);
-	int (*modify_port)(struct ib_device *, u8, int, struct ib_port_modify *);
-	int (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);
-	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u8);
-	struct net_device * (*get_netdev)(struct ib_device *, u8);
-	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u8, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
-	int (*rdma_netdev_get_params)(struct ib_device *, u8, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
-	int (*query_gid)(struct ib_device *, u8, int, union ib_gid *);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
 	int (*add_gid)(const struct ib_gid_attr *, void **);
 	int (*del_gid)(const struct ib_gid_attr *, void **);
-	int (*query_pkey)(struct ib_device *, u8, u16, u16 *);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
 	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
 	void (*dealloc_ucontext)(struct ib_ucontext *);
 	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
@@ -55443,6 +74584,7 @@
 	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
 	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
 	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
 	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
 	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
 	int (*destroy_ah)(struct ib_ah *, u32);
@@ -55450,7 +74592,7 @@
 	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
 	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
 	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
-	struct ib_qp * (*create_qp)(struct ib_pd *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
 	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
 	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
 	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
@@ -55460,7 +74602,8 @@
 	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
 	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
 	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
-	int (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
 	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
 	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
 	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
@@ -55475,14 +74618,12 @@
 	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
 	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
 	int (*destroy_flow)(struct ib_flow *);
-	struct ib_flow_action * (*create_flow_action_esp)(struct ib_device *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
 	int (*destroy_flow_action)(struct ib_flow_action *);
-	int (*modify_flow_action_esp)(struct ib_flow_action *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);
-	int (*set_vf_link_state)(struct ib_device *, int, u8, int);
-	int (*get_vf_config)(struct ib_device *, int, u8, struct ifla_vf_info *);
-	int (*get_vf_stats)(struct ib_device *, int, u8, struct ifla_vf_stats *);
-	int (*get_vf_guid)(struct ib_device *, int, u8, struct ifla_vf_guid *, struct ifla_vf_guid *);
-	int (*set_vf_guid)(struct ib_device *, int, u8, u64, int);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
 	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
 	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
 	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
@@ -55495,9 +74636,10 @@
 	int (*destroy_counters)(struct ib_counters *);
 	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
 	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
-	struct rdma_hw_stats * (*alloc_hw_stats)(struct ib_device *, u8);
-	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u8, int);
-	int (*init_port)(struct ib_device *, u8, struct kobject *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
 	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
 	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
 	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
@@ -55522,11 +74664,13 @@
 	int (*counter_update_stats)(struct rdma_counter *);
 	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
 	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
 	size_t size_ib_ah;
 	size_t size_ib_counters;
 	size_t size_ib_cq;
 	size_t size_ib_mw;
 	size_t size_ib_pd;
+	size_t size_ib_qp;
 	size_t size_ib_rwq_ind_table;
 	size_t size_ib_srq;
 	size_t size_ib_ucontext;
@@ -55587,6 +74731,7 @@
 	int max_qp;
 	int max_qp_wr;
 	u64 device_cap_flags;
+	u64 kernel_cap_flags;
 	int max_send_sge;
 	int max_recv_sge;
 	int max_sge_rd;
@@ -55631,6 +74776,8 @@
 	u32 max_sgl_rd;
 };
 
+struct hw_stats_device_data;
+
 struct rdma_restrack_root;
 
 struct uapi_definition;
@@ -55655,9 +74802,8 @@
 		struct device dev;
 		struct ib_core_device coredev;
 	};
-	const struct attribute_group *groups[3];
+	const struct attribute_group *groups[4];
 	u64 uverbs_cmd_mask;
-	u64 uverbs_ex_cmd_mask;
 	char node_desc[64];
 	__be64 node_guid;
 	u32 local_dma_lkey;
@@ -55665,10 +74811,10 @@
 	u16 kverbs_provider: 1;
 	u16 use_cq_dim: 1;
 	u8 node_type;
-	u8 phys_port_cnt;
+	u32 phys_port_cnt;
 	struct ib_device_attr attrs;
-	struct attribute_group *hw_stats_ag;
-	struct rdma_hw_stats *hw_stats;
+	struct hw_stats_device_data *hw_stats_data;
+	struct rdmacg_device cg_device;
 	u32 index;
 	spinlock_t cq_pools_lock;
 	struct list_head cq_pools[3];
@@ -55735,28 +74881,6 @@
 	u32 key;
 };
 
-enum ib_uverbs_flow_action_esp_keymat {
-	IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM = 0,
-};
-
-struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
-	__u64 iv;
-	__u32 iv_algo;
-	__u32 salt;
-	__u32 icv_len;
-	__u32 key_len;
-	__u32 aes_key[8];
-};
-
-enum ib_uverbs_flow_action_esp_replay {
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE = 0,
-	IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP = 1,
-};
-
-struct ib_uverbs_flow_action_esp_replay_bmp {
-	__u32 size;
-};
-
 union ib_gid {
 	u8 raw[16];
 	struct {
@@ -55778,7 +74902,7 @@
 	union ib_gid gid;
 	enum ib_gid_type gid_type;
 	u16 index;
-	u8 port_num;
+	u32 port_num;
 };
 
 struct ib_cq_init_attr {
@@ -55816,6 +74940,12 @@
 	IB_PORT_ACTIVE_DEFER = 5,
 };
 
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
 struct ib_port_attr {
 	u64 subnet_prefix;
 	enum ib_port_state state;
@@ -55962,7 +75092,7 @@
 	enum ib_qp_type qp_type;
 	struct ib_rwq_ind_table *rwq_ind_tbl;
 	struct ib_qp_security *qp_sec;
-	u8 port;
+	u32 port;
 	bool integrity_en;
 	struct rdma_restrack_entry res;
 	struct rdma_counter *counter;
@@ -55993,6 +75123,7 @@
 			} xrc;
 		};
 	} ext;
+	struct rdma_restrack_entry res;
 };
 
 struct ib_uwq_object;
@@ -56027,7 +75158,7 @@
 		struct ib_qp *qp;
 		struct ib_srq *srq;
 		struct ib_wq *wq;
-		u8 port_num;
+		u32 port_num;
 	} element;
 	enum ib_event_type event;
 };
@@ -56087,7 +75218,7 @@
 	struct ib_global_route grh;
 	u8 sl;
 	u8 static_rate;
-	u8 port_num;
+	u32 port_num;
 	u8 ah_flags;
 	enum rdma_ah_attr_type type;
 	union {
@@ -56162,7 +75293,7 @@
 	u16 pkey_index;
 	u8 sl;
 	u8 dlid_path_bits;
-	u8 port_num;
+	u32 port_num;
 	u8 smac[6];
 	u16 vlan_id;
 	u8 network_hdr_type;
@@ -56225,7 +75356,7 @@
 	enum ib_sig_type sq_sig_type;
 	enum ib_qp_type qp_type;
 	u32 create_flags;
-	u8 port_num;
+	u32 port_num;
 	struct ib_rwq_ind_table *rwq_ind_tbl;
 	u32 source_qpn;
 };
@@ -56282,11 +75413,11 @@
 	u8 max_rd_atomic;
 	u8 max_dest_rd_atomic;
 	u8 min_rnr_timer;
-	u8 port_num;
+	u32 port_num;
 	u8 timeout;
 	u8 retry_cnt;
 	u8 rnr_retry;
-	u8 alt_port_num;
+	u32 alt_port_num;
 	u8 alt_timeout;
 	u32 rate_limit;
 	struct net_device *xmit_slave;
@@ -56380,14 +75511,15 @@
 	int num_sge;
 };
 
-struct ib_rdmacg_object {};
+struct ib_rdmacg_object {
+	struct rdma_cgroup *cg;
+};
 
 struct ib_uverbs_file;
 
 struct ib_ucontext {
 	struct ib_device *device;
 	struct ib_uverbs_file *ufile;
-	bool cleanup_retryable;
 	struct ib_rdmacg_object cg_obj;
 	struct rdma_restrack_entry res;
 	struct xarray mmap_xa;
@@ -56458,7 +75590,7 @@
 struct ib_port_pkey {
 	enum port_pkey_state state;
 	u16 pkey_index;
-	u8 port_num;
+	u32 port_num;
 	struct list_head qp_list;
 	struct list_head to_error_list;
 	struct ib_qp_security *sec;
@@ -56718,7 +75850,7 @@
 	u16 priority;
 	u32 flags;
 	u8 num_of_specs;
-	u8 port;
+	u32 port;
 	union ib_flow_spec flows[0];
 };
 
@@ -56728,37 +75860,6 @@
 	struct ib_uobject *uobject;
 };
 
-struct ib_flow_action_attrs_esp_keymats {
-	enum ib_uverbs_flow_action_esp_keymat protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;
-	} keymat;
-};
-
-struct ib_flow_action_attrs_esp_replays {
-	enum ib_uverbs_flow_action_esp_replay protocol;
-	union {
-		struct ib_uverbs_flow_action_esp_replay_bmp bmp;
-	} replay;
-};
-
-struct ib_flow_spec_list {
-	struct ib_flow_spec_list *next;
-	union ib_flow_spec spec;
-};
-
-struct ib_flow_action_attrs_esp {
-	struct ib_flow_action_attrs_esp_keymats *keymat;
-	struct ib_flow_action_attrs_esp_replays *replay;
-	struct ib_flow_spec_list *encap;
-	u32 esn;
-	u32 spi;
-	u32 seq;
-	u32 tfc_pad;
-	u64 flags;
-	u64 hard_limit_pkts;
-};
-
 struct ib_pkey_cache;
 
 struct ib_gid_table;
@@ -56778,17 +75879,19 @@
 	u32 max_mad_size;
 };
 
+struct ib_port;
+
 struct ib_port_data {
 	struct ib_device *ib_dev;
 	struct ib_port_immutable immutable;
 	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
 	struct list_head pkey_list;
 	struct ib_port_cache cache;
-	spinlock_t netdev_lock;
 	struct net_device *netdev;
 	struct hlist_node ndev_hash_link;
 	struct rdma_port_counter port_counter;
-	struct rdma_hw_stats *hw_stats;
+	struct ib_port *sysfs;
 };
 
 struct rdma_netdev_alloc_params {
@@ -56796,7 +75899,7 @@
 	unsigned int txqs;
 	unsigned int rxqs;
 	void *param;
-	int (*initialize_rdma_netdev)(struct ib_device *, u8, struct net_device *, void *);
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
 };
 
 struct ib_counters_read_attr {
@@ -56870,6 +75973,7 @@
 enum {
 	WBT_STATE_ON_DEFAULT = 1,
 	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
 };
 
 struct rq_wb {
@@ -56971,38 +76075,409 @@
 	long unsigned int rw;
 };
 
-struct blk_ksm_keyslot {
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+enum opal_mbr {
+	OPAL_MBR_ENABLE = 0,
+	OPAL_MBR_DISABLE = 1,
+};
+
+enum opal_mbr_done_flag {
+	OPAL_MBR_NOT_DONE = 0,
+	OPAL_MBR_DONE = 1,
+};
+
+enum opal_user {
+	OPAL_ADMIN1 = 0,
+	OPAL_USER1 = 1,
+	OPAL_USER2 = 2,
+	OPAL_USER3 = 3,
+	OPAL_USER4 = 4,
+	OPAL_USER5 = 5,
+	OPAL_USER6 = 6,
+	OPAL_USER7 = 7,
+	OPAL_USER8 = 8,
+	OPAL_USER9 = 9,
+};
+
+enum opal_lock_state {
+	OPAL_RO = 1,
+	OPAL_RW = 2,
+	OPAL_LK = 4,
+};
+
+struct opal_key {
+	__u8 lr;
+	__u8 key_len;
+	__u8 __align[6];
+	__u8 key[256];
+};
+
+struct opal_lr_act {
+	struct opal_key key;
+	__u32 sum;
+	__u8 num_lrs;
+	__u8 lr[9];
+	__u8 align[2];
+};
+
+struct opal_session_info {
+	__u32 sum;
+	__u32 who;
+	struct opal_key opal_key;
+};
+
+struct opal_user_lr_setup {
+	__u64 range_start;
+	__u64 range_length;
+	__u32 RLE;
+	__u32 WLE;
+	struct opal_session_info session;
+};
+
+struct opal_lock_unlock {
+	struct opal_session_info session;
+	__u32 l_state;
+	__u8 __align[4];
+};
+
+struct opal_new_pw {
+	struct opal_session_info session;
+	struct opal_session_info new_user_pw;
+};
+
+struct opal_mbr_data {
+	struct opal_key key;
+	__u8 enable_disable;
+	__u8 __align[7];
+};
+
+struct opal_mbr_done {
+	struct opal_key key;
+	__u8 done_flag;
+	__u8 __align[7];
+};
+
+struct opal_shadow_mbr {
+	struct opal_key key;
+	const __u64 data;
+	__u64 offset;
+	__u64 size;
+};
+
+enum opal_table_ops {
+	OPAL_READ_TABLE = 0,
+	OPAL_WRITE_TABLE = 1,
+};
+
+struct opal_read_write_table {
+	struct opal_key key;
+	const __u64 data;
+	const __u8 table_uid[8];
+	__u64 offset;
+	__u64 size;
+	__u64 flags;
+	__u64 priv;
+};
+
+typedef int sec_send_recv(void *, u16, u8, void *, size_t, bool);
+
+enum {
+	TCG_SECP_00 = 0,
+	TCG_SECP_01 = 1,
+};
+
+enum opal_response_token {
+	OPAL_DTA_TOKENID_BYTESTRING = 224,
+	OPAL_DTA_TOKENID_SINT = 225,
+	OPAL_DTA_TOKENID_UINT = 226,
+	OPAL_DTA_TOKENID_TOKEN = 227,
+	OPAL_DTA_TOKENID_INVALID = 0,
+};
+
+enum opal_uid {
+	OPAL_SMUID_UID = 0,
+	OPAL_THISSP_UID = 1,
+	OPAL_ADMINSP_UID = 2,
+	OPAL_LOCKINGSP_UID = 3,
+	OPAL_ENTERPRISE_LOCKINGSP_UID = 4,
+	OPAL_ANYBODY_UID = 5,
+	OPAL_SID_UID = 6,
+	OPAL_ADMIN1_UID = 7,
+	OPAL_USER1_UID = 8,
+	OPAL_USER2_UID = 9,
+	OPAL_PSID_UID = 10,
+	OPAL_ENTERPRISE_BANDMASTER0_UID = 11,
+	OPAL_ENTERPRISE_ERASEMASTER_UID = 12,
+	OPAL_TABLE_TABLE = 13,
+	OPAL_LOCKINGRANGE_GLOBAL = 14,
+	OPAL_LOCKINGRANGE_ACE_RDLOCKED = 15,
+	OPAL_LOCKINGRANGE_ACE_WRLOCKED = 16,
+	OPAL_MBRCONTROL = 17,
+	OPAL_MBR = 18,
+	OPAL_AUTHORITY_TABLE = 19,
+	OPAL_C_PIN_TABLE = 20,
+	OPAL_LOCKING_INFO_TABLE = 21,
+	OPAL_ENTERPRISE_LOCKING_INFO_TABLE = 22,
+	OPAL_DATASTORE = 23,
+	OPAL_C_PIN_MSID = 24,
+	OPAL_C_PIN_SID = 25,
+	OPAL_C_PIN_ADMIN1 = 26,
+	OPAL_HALF_UID_AUTHORITY_OBJ_REF = 27,
+	OPAL_HALF_UID_BOOLEAN_ACE = 28,
+	OPAL_UID_HEXFF = 29,
+};
+
+enum opal_method {
+	OPAL_PROPERTIES = 0,
+	OPAL_STARTSESSION = 1,
+	OPAL_REVERT = 2,
+	OPAL_ACTIVATE = 3,
+	OPAL_EGET = 4,
+	OPAL_ESET = 5,
+	OPAL_NEXT = 6,
+	OPAL_EAUTHENTICATE = 7,
+	OPAL_GETACL = 8,
+	OPAL_GENKEY = 9,
+	OPAL_REVERTSP = 10,
+	OPAL_GET = 11,
+	OPAL_SET = 12,
+	OPAL_AUTHENTICATE = 13,
+	OPAL_RANDOM = 14,
+	OPAL_ERASE = 15,
+};
+
+enum opal_token {
+	OPAL_TRUE = 1,
+	OPAL_FALSE = 0,
+	OPAL_BOOLEAN_EXPR = 3,
+	OPAL_TABLE = 0,
+	OPAL_STARTROW = 1,
+	OPAL_ENDROW = 2,
+	OPAL_STARTCOLUMN = 3,
+	OPAL_ENDCOLUMN = 4,
+	OPAL_VALUES = 1,
+	OPAL_TABLE_UID = 0,
+	OPAL_TABLE_NAME = 1,
+	OPAL_TABLE_COMMON = 2,
+	OPAL_TABLE_TEMPLATE = 3,
+	OPAL_TABLE_KIND = 4,
+	OPAL_TABLE_COLUMN = 5,
+	OPAL_TABLE_COLUMNS = 6,
+	OPAL_TABLE_ROWS = 7,
+	OPAL_TABLE_ROWS_FREE = 8,
+	OPAL_TABLE_ROW_BYTES = 9,
+	OPAL_TABLE_LASTID = 10,
+	OPAL_TABLE_MIN = 11,
+	OPAL_TABLE_MAX = 12,
+	OPAL_PIN = 3,
+	OPAL_RANGESTART = 3,
+	OPAL_RANGELENGTH = 4,
+	OPAL_READLOCKENABLED = 5,
+	OPAL_WRITELOCKENABLED = 6,
+	OPAL_READLOCKED = 7,
+	OPAL_WRITELOCKED = 8,
+	OPAL_ACTIVEKEY = 10,
+	OPAL_LIFECYCLE = 6,
+	OPAL_MAXRANGES = 4,
+	OPAL_MBRENABLE = 1,
+	OPAL_MBRDONE = 2,
+	OPAL_HOSTPROPERTIES = 0,
+	OPAL_STARTLIST = 240,
+	OPAL_ENDLIST = 241,
+	OPAL_STARTNAME = 242,
+	OPAL_ENDNAME = 243,
+	OPAL_CALL = 248,
+	OPAL_ENDOFDATA = 249,
+	OPAL_ENDOFSESSION = 250,
+	OPAL_STARTTRANSACTON = 251,
+	OPAL_ENDTRANSACTON = 252,
+	OPAL_EMPTYATOM = 255,
+	OPAL_WHERE = 0,
+};
+
+enum opal_parameter {
+	OPAL_SUM_SET_LIST = 393216,
+};
+
+struct opal_compacket {
+	__be32 reserved0;
+	u8 extendedComID[4];
+	__be32 outstandingData;
+	__be32 minTransfer;
+	__be32 length;
+};
+
+struct opal_packet {
+	__be32 tsn;
+	__be32 hsn;
+	__be32 seq_number;
+	__be16 reserved0;
+	__be16 ack_type;
+	__be32 acknowledgment;
+	__be32 length;
+};
+
+struct opal_data_subpacket {
+	u8 reserved0[6];
+	__be16 kind;
+	__be32 length;
+};
+
+struct opal_header {
+	struct opal_compacket cp;
+	struct opal_packet pkt;
+	struct opal_data_subpacket subpkt;
+};
+
+struct d0_header {
+	__be32 length;
+	__be32 revision;
+	__be32 reserved01;
+	__be32 reserved02;
+	u8 ignored[32];
+};
+
+struct d0_tper_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_locking_features {
+	u8 supported_features;
+	u8 reserved01[3];
+	__be32 reserved02;
+	__be32 reserved03;
+};
+
+struct d0_geometry_features {
+	u8 header[4];
+	u8 reserved01;
+	u8 reserved02[7];
+	__be32 logical_block_size;
+	__be64 alignment_granularity;
+	__be64 lowest_aligned_lba;
+};
+
+struct d0_opal_v100 {
+	__be16 baseComID;
+	__be16 numComIDs;
+};
+
+struct d0_single_user_mode {
+	__be32 num_locking_objects;
+	u8 reserved01;
+	u8 reserved02;
+	__be16 reserved03;
+	__be32 reserved04;
+};
+
+struct d0_opal_v200 {
+	__be16 baseComID;
+	__be16 numComIDs;
+	u8 range_crossing;
+	u8 num_locking_admin_auth[2];
+	u8 num_locking_user_auth[2];
+	u8 initialPIN;
+	u8 revertedPIN;
+	u8 reserved01;
+	__be32 reserved02;
+};
+
+struct d0_features {
+	__be16 code;
+	u8 r_version;
+	u8 length;
+	u8 features[0];
+};
+
+struct opal_dev;
+
+struct opal_step {
+	int (*fn)(struct opal_dev *, void *);
+	void *data;
+};
+
+enum opal_atom_width {
+	OPAL_WIDTH_TINY = 0,
+	OPAL_WIDTH_SHORT = 1,
+	OPAL_WIDTH_MEDIUM = 2,
+	OPAL_WIDTH_LONG = 3,
+	OPAL_WIDTH_TOKEN = 4,
+};
+
+struct opal_resp_tok {
+	const u8 *pos;
+	size_t len;
+	enum opal_response_token type;
+	enum opal_atom_width width;
+	union {
+		u64 u;
+		s64 s;
+	} stored;
+};
+
+struct parsed_resp {
+	int num;
+	struct opal_resp_tok toks[64];
+};
+
+struct opal_dev {
+	bool supported;
+	bool mbr_enabled;
+	void *data;
+	sec_send_recv *send_recv;
+	struct mutex dev_lock;
+	u16 comid;
+	u32 hsn;
+	u32 tsn;
+	u64 align;
+	u64 lowest_lba;
+	size_t pos;
+	u8 cmd[2048];
+	u8 resp[2048];
+	struct parsed_resp parsed;
+	size_t prev_d_len;
+	void *prev_data;
+	struct list_head unlk_lst;
+};
+
+typedef int cont_fn(struct opal_dev *);
+
+struct opal_suspend_data {
+	struct opal_lock_unlock unlk;
+	u8 lr;
+	struct list_head node;
+};
+
+struct blk_crypto_mode {
+	const char *name;
+	const char *cipher_str;
+	unsigned int keysize;
+	unsigned int ivsize;
+};
+
+struct blk_crypto_keyslot {
 	atomic_t slot_refs;
 	struct list_head idle_slot_node;
 	struct hlist_node hash_node;
 	const struct blk_crypto_key *key;
-	struct blk_keyslot_manager *ksm;
+	struct blk_crypto_profile *profile;
 };
 
-struct blk_ksm_ll_ops {
-	int (*keyslot_program)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
-	int (*keyslot_evict)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);
+struct blk_crypto_kobj {
+	struct kobject kobj;
+	struct blk_crypto_profile *profile;
 };
 
-struct blk_keyslot_manager {
-	struct blk_ksm_ll_ops ksm_ll_ops;
-	unsigned int max_dun_bytes_supported;
-	unsigned int crypto_modes_supported[4];
-	struct device *dev;
-	unsigned int num_slots;
-	struct rw_semaphore lock;
-	wait_queue_head_t idle_slots_wait_queue;
-	struct list_head idle_slots;
-	spinlock_t idle_slots_lock;
-	struct hlist_head *slot_hashtable;
-	unsigned int log_slot_ht_size;
-	struct blk_ksm_keyslot *slots;
-};
-
-struct blk_crypto_mode {
-	const char *cipher_str;
-	unsigned int keysize;
-	unsigned int ivsize;
+struct blk_crypto_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_crypto_profile *, struct blk_crypto_attr *, char *);
 };
 
 struct bio_fallback_crypt_ctx {
@@ -57020,7 +76495,7 @@
 	};
 };
 
-struct blk_crypto_keyslot {
+struct blk_crypto_fallback_keyslot {
 	enum blk_crypto_mode_num crypto_mode;
 	struct crypto_skcipher *tfms[4];
 };
@@ -57030,26 +76505,29 @@
 	u8 bytes[32];
 };
 
+struct bd_holder_disk {
+	struct list_head list;
+	struct block_device *bdev;
+	int refcnt;
+};
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
 typedef void (*swap_func_t)(void *, void *, int);
 
 typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
 
-struct siprand_state {
-	long unsigned int v0;
-	long unsigned int v1;
-	long unsigned int v2;
-	long unsigned int v3;
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
 };
 
-typedef __kernel_long_t __kernel_ptrdiff_t;
-
-typedef __kernel_ptrdiff_t ptrdiff_t;
-
 struct region {
 	unsigned int start;
 	unsigned int off;
 	unsigned int group_len;
 	unsigned int end;
+	unsigned int nbits;
 };
 
 enum {
@@ -57058,6 +76536,12 @@
 	REG_OP_RELEASE = 2,
 };
 
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
 typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
 
 typedef void sg_free_fn(struct scatterlist *, unsigned int);
@@ -57084,7 +76568,12 @@
 	unsigned int __flags;
 };
 
-typedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
 
 struct rhltable {
 	struct rhashtable ht;
@@ -57113,6 +76602,7 @@
 struct once_work {
 	struct work_struct work;
 	struct static_key_true *key;
+	struct module *module;
 };
 
 struct genradix_iter {
@@ -57127,6 +76617,11 @@
 	};
 };
 
+struct strarray {
+	char **array;
+	size_t n;
+};
+
 struct reciprocal_value_adv {
 	u32 m;
 	u8 sh;
@@ -57134,16 +76629,33 @@
 	bool is_wide_m;
 };
 
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
 enum devm_ioremap_type {
 	DEVM_IOREMAP = 0,
 	DEVM_IOREMAP_UC = 1,
 	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
 };
 
 struct pcim_iomap_devres {
 	void *table[6];
 };
 
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
 struct btree_head {
 	long unsigned int *node;
 	mempool_t *mempool;
@@ -57203,15 +76715,6 @@
 	UNPACK = 1,
 };
 
-struct crc_test {
-	u32 crc;
-	u32 start;
-	u32 length;
-	u32 crc_le;
-	u32 crc_be;
-	u32 crc32c_le;
-};
-
 struct xxh32_state {
 	uint32_t total_len_32;
 	uint32_t large_len;
@@ -57251,8 +76754,6 @@
 	long unsigned int offset;
 };
 
-typedef struct z_stream_s z_stream;
-
 typedef z_stream *z_streamp;
 
 typedef struct {
@@ -57479,18 +76980,16 @@
 typedef struct tree_desc_s tree_desc;
 
 typedef struct {
-	uint32_t hashTable[4096];
-	uint32_t currentOffset;
-	uint32_t initCheck;
-	const uint8_t *dictionary;
-	uint8_t *bufferStart;
-	uint32_t dictSize;
-} LZ4_stream_t_internal;
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
 
 typedef union {
-	long long unsigned int table[2052];
-	LZ4_stream_t_internal internal_donotuse;
-} LZ4_stream_t;
+	long long unsigned int table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
 
 typedef uint8_t BYTE;
 
@@ -57503,40 +77002,12 @@
 typedef uintptr_t uptrval;
 
 typedef enum {
-	noLimit = 0,
-	limitedOutput = 1,
-} limitedOutput_directive;
-
-typedef enum {
-	byPtr = 0,
-	byU32 = 1,
-	byU16 = 2,
-} tableType_t;
-
-typedef enum {
 	noDict = 0,
 	withPrefix64k = 1,
 	usingExtDict = 2,
 } dict_directive;
 
 typedef enum {
-	noDictIssue = 0,
-	dictSmall = 1,
-} dictIssue_directive;
-
-typedef struct {
-	const uint8_t *externalDict;
-	size_t extDictSize;
-	const uint8_t *prefixEnd;
-	size_t prefixSize;
-} LZ4_streamDecode_t_internal;
-
-typedef union {
-	long long unsigned int table[4];
-	LZ4_streamDecode_t_internal internal_donotuse;
-} LZ4_streamDecode_t;
-
-typedef enum {
 	endOnOutputSize = 0,
 	endOnInputSize = 1,
 } endCondition_directive;
@@ -57546,259 +77017,68 @@
 	partial_decode = 1,
 } earlyEnd_directive;
 
-typedef struct {
-	size_t bitContainer;
-	int bitPos;
-	char *startPtr;
-	char *ptr;
-	char *endPtr;
-} BIT_CStream_t;
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
 
-typedef unsigned int FSE_CTable;
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
 
 typedef struct {
-	ptrdiff_t value;
-	const void *stateTable;
-	const void *symbolTT;
-	unsigned int stateLog;
-} FSE_CState_t;
+	long long unsigned int frameContentSize;
+	long long unsigned int windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
 
-typedef struct {
-	int deltaFindState;
-	U32 deltaNbBits;
-} FSE_symbolCompressionTransform;
+typedef ZSTD_ErrorCode zstd_error_code;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef ZSTD_ErrorCode ERR_enum;
 
 typedef int16_t S16;
 
-struct HUF_CElt_s {
-	U16 val;
-	BYTE nbBits;
-};
-
-typedef struct HUF_CElt_s HUF_CElt;
-
-typedef enum {
-	HUF_repeat_none = 0,
-	HUF_repeat_check = 1,
-	HUF_repeat_valid = 2,
-} HUF_repeat;
-
-struct nodeElt_s {
-	U32 count;
-	U16 parent;
-	BYTE byte;
-	BYTE nbBits;
-};
-
-typedef struct nodeElt_s nodeElt;
-
-typedef struct {
-	U32 base;
-	U32 curr;
-} rankPos;
-
-typedef enum {
-	ZSTDcs_created = 0,
-	ZSTDcs_init = 1,
-	ZSTDcs_ongoing = 2,
-	ZSTDcs_ending = 3,
-} ZSTD_compressionStage_e;
-
-typedef void * (*ZSTD_allocFunction)(void *, size_t);
-
-typedef void (*ZSTD_freeFunction)(void *, void *);
-
-typedef struct {
-	ZSTD_allocFunction customAlloc;
-	ZSTD_freeFunction customFree;
-	void *opaque;
-} ZSTD_customMem;
-
-typedef struct {
-	U32 price;
-	U32 off;
-	U32 mlen;
-	U32 litlen;
-	U32 rep[3];
-} ZSTD_optimal_t;
-
-typedef struct {
-	U32 off;
-	U32 len;
-} ZSTD_match_t;
-
-struct seqDef_s;
-
-typedef struct seqDef_s seqDef;
-
-typedef struct {
-	seqDef *sequencesStart;
-	seqDef *sequences;
-	BYTE *litStart;
-	BYTE *lit;
-	BYTE *llCode;
-	BYTE *mlCode;
-	BYTE *ofCode;
-	U32 longLengthID;
-	U32 longLengthPos;
-	ZSTD_optimal_t *priceTable;
-	ZSTD_match_t *matchTable;
-	U32 *matchLengthFreq;
-	U32 *litLengthFreq;
-	U32 *litFreq;
-	U32 *offCodeFreq;
-	U32 matchLengthSum;
-	U32 matchSum;
-	U32 litLengthSum;
-	U32 litSum;
-	U32 offCodeSum;
-	U32 log2matchLengthSum;
-	U32 log2matchSum;
-	U32 log2litLengthSum;
-	U32 log2litSum;
-	U32 log2offCodeSum;
-	U32 factor;
-	U32 staticPrices;
-	U32 cachedPrice;
-	U32 cachedLitLength;
-	const BYTE *cachedLiterals;
-} seqStore_t;
-
-struct HUF_CElt_s___2;
-
-typedef struct HUF_CElt_s___2 HUF_CElt___2;
-
-struct ZSTD_CCtx_s___2 {
-	const BYTE *nextSrc;
-	const BYTE *base;
-	const BYTE *dictBase;
-	U32 dictLimit;
-	U32 lowLimit;
-	U32 nextToUpdate;
-	U32 nextToUpdate3;
-	U32 hashLog3;
-	U32 loadedDictEnd;
-	U32 forceWindow;
-	U32 forceRawDict;
-	ZSTD_compressionStage_e stage;
-	U32 rep[3];
-	U32 repToConfirm[3];
-	U32 dictID;
-	ZSTD_parameters params;
-	void *workSpace;
-	size_t workSpaceSize;
-	size_t blockSize;
-	U64 frameContentSize;
-	struct xxh64_state xxhState;
-	ZSTD_customMem customMem;
-	seqStore_t seqStore;
-	U32 *hashTable;
-	U32 *hashTable3;
-	U32 *chainTable;
-	HUF_CElt___2 *hufTable;
-	U32 flagStaticTables;
-	HUF_repeat flagStaticHufTable;
-	FSE_CTable offcodeCTable[187];
-	FSE_CTable matchlengthCTable[363];
-	FSE_CTable litlengthCTable[329];
-	unsigned int tmpCounters[1536];
-};
-
-typedef struct ZSTD_CCtx_s___2 ZSTD_CCtx___2;
-
-struct ZSTD_CDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictContentSize;
-	ZSTD_CCtx___2 *refContext;
-};
-
-typedef struct ZSTD_CDict_s ZSTD_CDict;
-
-struct ZSTD_inBuffer_s {
-	const void *src;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
-
-struct ZSTD_outBuffer_s {
-	void *dst;
-	size_t size;
-	size_t pos;
-};
-
-typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
-
-typedef enum {
-	zcss_init = 0,
-	zcss_load = 1,
-	zcss_flush = 2,
-	zcss_final = 3,
-} ZSTD_cStreamStage;
-
-struct ZSTD_CStream_s {
-	ZSTD_CCtx___2 *cctx;
-	ZSTD_CDict *cdictLocal;
-	const ZSTD_CDict *cdict;
-	char *inBuff;
-	size_t inBuffSize;
-	size_t inToCompress;
-	size_t inBuffPos;
-	size_t inBuffTarget;
-	size_t blockSize;
-	char *outBuff;
-	size_t outBuffSize;
-	size_t outBuffContentSize;
-	size_t outBuffFlushedSize;
-	ZSTD_cStreamStage stage;
-	U32 checksum;
-	U32 frameEnded;
-	U64 pledgedSrcSize;
-	U64 inputProcessed;
-	ZSTD_parameters params;
-	ZSTD_customMem customMem;
-};
-
-typedef struct ZSTD_CStream_s ZSTD_CStream;
-
-typedef int32_t S32;
-
-typedef enum {
-	set_basic = 0,
-	set_rle = 1,
-	set_compressed = 2,
-	set_repeat = 3,
-} symbolEncodingType_e;
-
-struct seqDef_s {
-	U32 offset;
-	U16 litLength;
-	U16 matchLength;
-};
-
-typedef enum {
-	ZSTDcrp_continue = 0,
-	ZSTDcrp_noMemset = 1,
-	ZSTDcrp_fullReset = 2,
-} ZSTD_compResetPolicy_e;
-
-typedef void (*ZSTD_blockCompressor)(ZSTD_CCtx___2 *, const void *, size_t);
-
-typedef enum {
-	zsf_gather = 0,
-	zsf_flush = 1,
-	zsf_end = 2,
-} ZSTD_flush_e;
-
-typedef size_t (*searchMax_f)(ZSTD_CCtx___2 *, const BYTE *, const BYTE *, size_t *, U32, U32);
-
 typedef struct {
 	size_t bitContainer;
 	unsigned int bitsConsumed;
 	const char *ptr;
 	const char *start;
+	const char *limitPtr;
 } BIT_DStream_t;
 
 typedef enum {
@@ -57827,9 +77107,9 @@
 } FSE_decode_t;
 
 typedef struct {
-	void *ptr;
-	const void *end;
-} ZSTD_stack;
+	short int ncount[256];
+	FSE_DTable dtable[1];
+} FSE_DecompressWksp;
 
 typedef U32 HUF_DTable;
 
@@ -57843,13 +77123,21 @@
 typedef struct {
 	BYTE byte;
 	BYTE nbBits;
-} HUF_DEltX2;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[16];
+	U32 rankStart[16];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
 
 typedef struct {
 	U16 sequence;
 	BYTE nbBits;
 	BYTE length;
-} HUF_DEltX4;
+} HUF_DEltX2;
 
 typedef struct {
 	BYTE symbol;
@@ -57859,25 +77147,34 @@
 typedef U32 rankValCol_t[13];
 
 typedef struct {
+	U32 rankVal[156];
+	U32 rankStats[13];
+	U32 rankStart0[14];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
 	U32 tableTime;
 	U32 decode256Time;
 } algo_time_t;
 
 typedef struct {
-	FSE_DTable LLTable[513];
-	FSE_DTable OFTable[257];
-	FSE_DTable MLTable[513];
-	HUF_DTable hufTable[4097];
-	U64 workspace[384];
-	U32 rep[3];
-} ZSTD_entropyTables_t;
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
 
 typedef struct {
-	long long unsigned int frameContentSize;
-	unsigned int windowSize;
-	unsigned int dictID;
-	unsigned int checksumFlag;
-} ZSTD_frameParams;
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
 
 typedef enum {
 	bt_raw = 0,
@@ -57897,47 +77194,37 @@
 	ZSTDds_skipFrame = 7,
 } ZSTD_dStage;
 
-struct ZSTD_DCtx_s___2 {
-	const FSE_DTable *LLTptr;
-	const FSE_DTable *MLTptr;
-	const FSE_DTable *OFTptr;
-	const HUF_DTable *HUFptr;
-	ZSTD_entropyTables_t entropy;
-	const void *previousDstEnd;
-	const void *base;
-	const void *vBase;
-	const void *dictEnd;
-	size_t expected;
-	ZSTD_frameParams fParams;
-	blockType_e bType;
-	ZSTD_dStage stage;
-	U32 litEntropy;
-	U32 fseEntropy;
-	struct xxh64_state xxhState;
-	size_t headerSize;
-	U32 dictID;
-	const BYTE *litPtr;
-	ZSTD_customMem customMem;
-	size_t litSize;
-	size_t rleSize;
-	BYTE litBuffer[131080];
-	BYTE headerBuffer[18];
-};
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
 
-typedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
 
-struct ZSTD_DDict_s {
-	void *dictBuffer;
-	const void *dictContent;
-	size_t dictSize;
-	ZSTD_entropyTables_t entropy;
-	U32 dictID;
-	U32 entropyPresent;
-	ZSTD_customMem cMem;
-};
+typedef enum {
+	ZSTD_use_indefinitely = 4294967295,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
 
 typedef struct ZSTD_DDict_s ZSTD_DDict;
 
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
 typedef enum {
 	zdss_init = 0,
 	zdss_loadHeader = 1,
@@ -57946,12 +77233,49 @@
 	zdss_flush = 4,
 } ZSTD_dStreamStage;
 
-struct ZSTD_DStream_s {
-	ZSTD_DCtx___2 *dctx;
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+struct ZSTD_DCtx_s___2 {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	int bmi2;
 	ZSTD_DDict *ddictLocal;
 	const ZSTD_DDict *ddict;
-	ZSTD_frameParams fParams;
-	ZSTD_dStreamStage stage;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
 	char *inBuff;
 	size_t inBuffSize;
 	size_t inPos;
@@ -57960,17 +77284,70 @@
 	size_t outBuffSize;
 	size_t outStart;
 	size_t outEnd;
-	size_t blockSize;
-	BYTE headerBuffer[18];
 	size_t lhSize;
-	ZSTD_customMem customMem;
 	void *legacyContext;
 	U32 previousLegacyVersion;
 	U32 legacyVersion;
 	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE litBuffer[131104];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
 };
 
-typedef struct ZSTD_DStream_s ZSTD_DStream;
+typedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef struct {
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef ZSTD_DCtx___2 ZSTD_DStream___2;
 
 typedef enum {
 	ZSTDnit_frameHeader = 0,
@@ -57981,7 +77358,10 @@
 	ZSTDnit_skippableFrame = 5,
 } ZSTD_nextInputType_e;
 
-typedef uintptr_t uPtrDiff;
+typedef struct {
+	size_t compressedSize;
+	long long unsigned int decompressedBound;
+} ZSTD_frameSizeInfo;
 
 typedef struct {
 	blockType_e blockType;
@@ -57989,10 +77369,22 @@
 	U32 origSize;
 } blockProperties_t;
 
-typedef union {
-	FSE_decode_t realData;
-	U32 alignedBy4;
-} FSE_decode_t4;
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
 
 typedef struct {
 	size_t litLength;
@@ -58002,42 +77394,30 @@
 } seq_t;
 
 typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
 	BIT_DStream_t DStream;
-	FSE_DState_t stateLL;
-	FSE_DState_t stateOffb;
-	FSE_DState_t stateML;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
 	size_t prevOffset[3];
-	const BYTE *base;
+	const BYTE *prefixStart;
+	const BYTE *dictEnd;
 	size_t pos;
-	uPtrDiff gotoDict;
 } seqState_t;
 
-enum xz_mode {
-	XZ_SINGLE = 0,
-	XZ_PREALLOC = 1,
-	XZ_DYNALLOC = 2,
-};
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
 
-enum xz_ret {
-	XZ_OK = 0,
-	XZ_STREAM_END = 1,
-	XZ_UNSUPPORTED_CHECK = 2,
-	XZ_MEM_ERROR = 3,
-	XZ_MEMLIMIT_ERROR = 4,
-	XZ_FORMAT_ERROR = 5,
-	XZ_OPTIONS_ERROR = 6,
-	XZ_DATA_ERROR = 7,
-	XZ_BUF_ERROR = 8,
-};
-
-struct xz_buf {
-	const uint8_t *in;
-	size_t in_pos;
-	size_t in_size;
-	uint8_t *out;
-	size_t out_pos;
-	size_t out_size;
-};
+typedef enum {
+	ZSTD_p_noPrefetch = 0,
+	ZSTD_p_prefetch = 1,
+} ZSTD_prefetch_e;
 
 typedef uint64_t vli_type;
 
@@ -58058,7 +77438,7 @@
 
 struct xz_dec_bcj;
 
-struct xz_dec {
+struct xz_dec___2 {
 	enum {
 		SEQ_STREAM_HEADER = 0,
 		SEQ_BLOCK_START = 1,
@@ -58236,7 +77616,7 @@
 
 struct ts_state {
 	unsigned int offset;
-	char cb[40];
+	char cb[48];
 };
 
 struct ts_config;
@@ -58272,6 +77652,36 @@
 	void *priv;
 };
 
+struct ddebug_table {
+	struct list_head link;
+	const char *mod_name;
+	unsigned int num_ddebugs;
+	struct _ddebug *ddebugs;
+};
+
+struct ddebug_query {
+	const char *filename;
+	const char *module;
+	const char *function;
+	const char *format;
+	unsigned int first_lineno;
+	unsigned int last_lineno;
+};
+
+struct ddebug_iter {
+	struct ddebug_table *table;
+	unsigned int idx;
+};
+
+struct flag_settings {
+	unsigned int flags;
+	unsigned int mask;
+};
+
+struct flagsbuf {
+	char buf[7];
+};
+
 struct nla_bitfield32 {
 	__u32 value;
 	__u32 selector;
@@ -58490,14 +77900,6 @@
 	char mpi[0];
 } __attribute__((packed));
 
-struct sg_splitter {
-	struct scatterlist *in_sg0;
-	int nents;
-	off_t skip_sg0;
-	unsigned int length_last_sg;
-	struct scatterlist *out_sg;
-};
-
 struct sg_pool {
 	size_t size;
 	char *name;
@@ -58510,11 +77912,29 @@
 	IRQ_POLL_F_DISABLE = 1,
 };
 
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 slabindex: 21;
+		u32 offset: 10;
+		u32 valid: 1;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	long unsigned int entries[0];
+};
+
 struct font_desc {
 	int idx;
 	const char *name;
-	int width;
-	int height;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
 	const void *data;
 	int pref;
 };
@@ -58526,12 +77946,6 @@
 
 typedef u16 ucs2_char_t;
 
-struct firmware {
-	size_t size;
-	const u8 *data;
-	void *priv;
-};
-
 struct pldmfw_record {
 	struct list_head entry;
 	struct list_head descs;
@@ -58661,7 +78075,48 @@
 	int subsystem_device;
 };
 
-typedef long unsigned int cycles_t;
+struct msr {
+	union {
+		struct {
+			u32 l;
+			u32 h;
+		};
+		u64 q;
+	};
+};
+
+struct msr_info {
+	u32 msr_no;
+	struct msr reg;
+	struct msr *msrs;
+	int err;
+};
+
+struct msr_regs_info {
+	u32 *regs;
+	int err;
+};
+
+struct msr_info_completion {
+	struct msr_info msr;
+	struct completion done;
+};
+
+struct trace_event_raw_msr_trace_class {
+	struct trace_entry ent;
+	unsigned int msr;
+	u64 val;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_msr_trace_class {};
+
+typedef void (*btf_trace_read_msr)(void *, unsigned int, u64, int);
+
+typedef void (*btf_trace_write_msr)(void *, unsigned int, u64, int);
+
+typedef void (*btf_trace_rdpmc)(void *, unsigned int, u64, int);
 
 struct compress_format {
 	unsigned char magic[2];
@@ -58739,44 +78194,6 @@
 	uint32_t rep3;
 };
 
-struct xz_dec___2;
-
-typedef enum {
-	ZSTD_error_no_error = 0,
-	ZSTD_error_GENERIC = 1,
-	ZSTD_error_prefix_unknown = 2,
-	ZSTD_error_version_unsupported = 3,
-	ZSTD_error_parameter_unknown = 4,
-	ZSTD_error_frameParameter_unsupported = 5,
-	ZSTD_error_frameParameter_unsupportedBy32bits = 6,
-	ZSTD_error_frameParameter_windowTooLarge = 7,
-	ZSTD_error_compressionParameter_unsupported = 8,
-	ZSTD_error_init_missing = 9,
-	ZSTD_error_memory_allocation = 10,
-	ZSTD_error_stage_wrong = 11,
-	ZSTD_error_dstSize_tooSmall = 12,
-	ZSTD_error_srcSize_wrong = 13,
-	ZSTD_error_corruption_detected = 14,
-	ZSTD_error_checksum_wrong = 15,
-	ZSTD_error_tableLog_tooLarge = 16,
-	ZSTD_error_maxSymbolValue_tooLarge = 17,
-	ZSTD_error_maxSymbolValue_tooSmall = 18,
-	ZSTD_error_dictionary_corrupted = 19,
-	ZSTD_error_dictionary_wrong = 20,
-	ZSTD_error_dictionaryCreation_failed = 21,
-	ZSTD_error_maxCode = 22,
-} ZSTD_ErrorCode;
-
-struct ZSTD_DStream_s___2;
-
-typedef struct ZSTD_DStream_s___2 ZSTD_DStream___2;
-
-struct cpio_data {
-	void *data;
-	size_t size;
-	char name[18];
-};
-
 enum cpio_fields {
 	C_MAGIC = 0,
 	C_INO = 1,
@@ -58795,37 +78212,6 @@
 	C_NFIELDS = 14,
 };
 
-enum {
-	ASSUME_PERFECT = 255,
-	ASSUME_VALID_DTB = 1,
-	ASSUME_VALID_INPUT = 2,
-	ASSUME_LATEST = 4,
-	ASSUME_NO_ROLLBACK = 8,
-	ASSUME_LIBFDT_ORDER = 16,
-	ASSUME_LIBFDT_FLAWLESS = 32,
-};
-
-struct fdt_reserve_entry {
-	fdt64_t address;
-	fdt64_t size;
-};
-
-struct fdt_node_header {
-	fdt32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	fdt32_t tag;
-	fdt32_t len;
-	fdt32_t nameoff;
-	char data[0];
-};
-
-struct fdt_errtabent {
-	const char *str;
-};
-
 struct fprop_local_single {
 	long unsigned int events;
 	unsigned int period;
@@ -58873,11 +78259,6 @@
 	void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);
 };
 
-struct radix_tree_preload {
-	unsigned int nr;
-	struct xa_node *nodes;
-};
-
 typedef struct {
 	long unsigned int key[2];
 } hsiphash_key_t;
@@ -58912,6 +78293,14 @@
 	int precision: 16;
 };
 
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
 struct minmax_sample {
 	u32 t;
 	u32 v;
@@ -58921,1175 +78310,26 @@
 	struct minmax_sample s[3];
 };
 
-struct xa_limit {
-	u32 max;
-	u32 min;
-};
-
-typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
-
-typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);
-
-struct acpi_probe_entry;
-
-typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
-
-struct acpi_probe_entry {
-	__u8 id[5];
-	__u8 type;
-	acpi_probe_entry_validate_subtbl subtable_valid;
-	union {
-		acpi_tbl_table_handler probe_table;
-		acpi_tbl_entry_handler probe_subtbl;
-	};
-	kernel_ulong_t driver_data;
-};
-
-typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
-
-typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
-
-struct armctrl_ic {
-	void *base;
-	void *pending[3];
-	void *enable[3];
-	void *disable[3];
-	struct irq_domain *domain;
-};
-
-struct bcm2836_arm_irqchip_intc {
-	struct irq_domain *domain;
-	void *base;
-};
-
-struct tegra_ictlr_soc {
-	unsigned int num_ictlrs;
-};
-
-struct tegra_ictlr_info {
-	void *base[6];
-	u32 cop_ier[6];
-	u32 cop_iep[6];
-	u32 cpu_ier[6];
-	u32 cpu_iep[6];
-	u32 ictlr_wake_mask[6];
-};
-
-struct sun4i_irq_chip_data {
-	void *irq_base;
-	struct irq_domain *irq_domain;
-	u32 enable_reg_offset;
-	u32 mask_reg_offset;
+enum {
+	st_wordstart = 0,
+	st_wordcmp = 1,
+	st_wordskip = 2,
+	st_bufcpy = 3,
 };
 
 enum {
-	SUNXI_SRC_TYPE_LEVEL_LOW = 0,
-	SUNXI_SRC_TYPE_EDGE_FALLING = 1,
-	SUNXI_SRC_TYPE_LEVEL_HIGH = 2,
-	SUNXI_SRC_TYPE_EDGE_RISING = 3,
+	st_wordstart___2 = 0,
+	st_wordcmp___2 = 1,
+	st_wordskip___2 = 2,
 };
 
-struct sunxi_sc_nmi_reg_offs {
-	u32 ctrl;
-	u32 pend;
-	u32 enable;
-};
+struct in6_addr___2;
 
-struct acpi_madt_generic_distributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 gic_id;
-	u64 base_address;
-	u32 global_irq_base;
-	u8 version;
-	u8 reserved2[3];
-};
-
-enum acpi_madt_gic_version {
-	ACPI_MADT_GIC_VERSION_NONE = 0,
-	ACPI_MADT_GIC_VERSION_V1 = 1,
-	ACPI_MADT_GIC_VERSION_V2 = 2,
-	ACPI_MADT_GIC_VERSION_V3 = 3,
-	ACPI_MADT_GIC_VERSION_V4 = 4,
-	ACPI_MADT_GIC_VERSION_RESERVED = 5,
-};
-
-enum acpi_irq_model_id {
-	ACPI_IRQ_MODEL_PIC = 0,
-	ACPI_IRQ_MODEL_IOAPIC = 1,
-	ACPI_IRQ_MODEL_IOSAPIC = 2,
-	ACPI_IRQ_MODEL_PLATFORM = 3,
-	ACPI_IRQ_MODEL_GIC = 4,
-	ACPI_IRQ_MODEL_COUNT = 5,
-};
-
-union gic_base {
-	void *common_base;
-	void **percpu_base;
-};
-
-struct gic_chip_data {
-	struct irq_chip chip;
-	union gic_base dist_base;
-	union gic_base cpu_base;
-	void *raw_dist_base;
-	void *raw_cpu_base;
-	u32 percpu_offset;
-	u32 saved_spi_enable[32];
-	u32 saved_spi_active[32];
-	u32 saved_spi_conf[64];
-	u32 saved_spi_target[255];
-	u32 *saved_ppi_enable;
-	u32 *saved_ppi_active;
-	u32 *saved_ppi_conf;
-	struct irq_domain *domain;
-	unsigned int gic_irqs;
-};
-
-struct gic_quirk {
-	const char *desc;
-	const char *compatible;
-	bool (*init)(void *);
-	u32 iidr;
-	u32 mask;
-};
-
-struct clk_bulk_data {
-	const char *id;
-	struct clk *clk;
-};
-
-struct gic_clk_data {
-	unsigned int num_clocks;
-	const char * const *clocks;
-};
-
-struct gic_chip_data___2;
-
-struct gic_chip_pm {
-	struct gic_chip_data___2 *chip_data;
-	const struct gic_clk_data *clk_data;
-	struct clk_bulk_data *clks;
-};
-
-struct acpi_table_madt {
-	struct acpi_table_header header;
-	u32 address;
-	u32 flags;
-};
-
-struct acpi_madt_generic_msi_frame {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 msi_frame_id;
-	u64 base_address;
-	u32 flags;
-	u16 spi_count;
-	u16 spi_base;
-};
-
-struct v2m_data {
-	struct list_head entry;
-	struct fwnode_handle *fwnode;
-	struct resource res;
-	void *base;
-	u32 spi_start;
-	u32 nr_spis;
-	u32 spi_offset;
-	long unsigned int *bm;
-	u32 flags;
-};
-
-struct acpi_madt_generic_redistributor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 base_address;
-	u32 length;
-} __attribute__((packed));
-
-struct rdists {
-	struct {
-		raw_spinlock_t rd_lock;
-		void *rd_base;
-		struct page *pend_page;
-		phys_addr_t phys_base;
-		bool lpi_enabled;
-		cpumask_t *vpe_table_mask;
-		void *vpe_l1_base;
-	} *rdist;
-	phys_addr_t prop_table_pa;
-	void *prop_table_va;
-	u64 flags;
-	u32 gicd_typer;
-	u32 gicd_typer2;
-	bool has_vlpis;
-	bool has_rvpeid;
-	bool has_direct_lpi;
-	bool has_vpend_valid_dirty;
-};
-
-struct partition_affinity {
-	cpumask_t mask;
-	void *partition_id;
-};
-
-struct redist_region {
-	void *redist_base;
-	phys_addr_t phys_base;
-	bool single_redist;
-};
-
-struct partition_desc;
-
-struct gic_chip_data___3 {
-	struct fwnode_handle *fwnode;
-	void *dist_base;
-	struct redist_region *redist_regions;
-	struct rdists rdists;
-	struct irq_domain *domain;
-	u64 redist_stride;
-	u32 nr_redist_regions;
-	u64 flags;
-	bool has_rss;
-	unsigned int ppi_nr;
-	struct partition_desc **ppi_descs;
-};
-
-enum gic_intid_range {
-	SGI_RANGE = 0,
-	PPI_RANGE = 1,
-	SPI_RANGE = 2,
-	EPPI_RANGE = 3,
-	ESPI_RANGE = 4,
-	LPI_RANGE = 5,
-	__INVALID_RANGE__ = 6,
-};
-
-struct mbi_range {
-	u32 spi_start;
-	u32 nr_spis;
-	long unsigned int *bm;
-};
-
-struct acpi_madt_generic_translator {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 translation_id;
-	u64 base_address;
-	u32 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_gic_its_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u32 its_id;
-} __attribute__((packed));
-
-enum its_vcpu_info_cmd_type {
-	MAP_VLPI = 0,
-	GET_VLPI = 1,
-	PROP_UPDATE_VLPI = 2,
-	PROP_UPDATE_AND_INV_VLPI = 3,
-	SCHEDULE_VPE = 4,
-	DESCHEDULE_VPE = 5,
-	INVALL_VPE = 6,
-	PROP_UPDATE_VSGI = 7,
-};
-
-struct its_cmd_info {
-	enum its_vcpu_info_cmd_type cmd_type;
-	union {
-		struct its_vlpi_map *map;
-		u8 config;
-		bool req_db;
-		struct {
-			bool g0en;
-			bool g1en;
-		};
-		struct {
-			u8 priority;
-			bool group;
-		};
-	};
-};
-
-struct its_collection___2 {
-	u64 target_address;
-	u16 col_id;
-};
-
-struct its_baser {
-	void *base;
-	u64 val;
-	u32 order;
-	u32 psz;
-};
-
-struct its_cmd_block;
-
-struct its_device___2;
-
-struct its_node {
-	raw_spinlock_t lock;
-	struct mutex dev_alloc_lock;
-	struct list_head entry;
-	void *base;
-	void *sgir_base;
-	phys_addr_t phys_base;
-	struct its_cmd_block *cmd_base;
-	struct its_cmd_block *cmd_write;
-	struct its_baser tables[8];
-	struct its_collection___2 *collections;
-	struct fwnode_handle *fwnode_handle;
-	u64 (*get_msi_base)(struct its_device___2 *);
-	u64 typer;
-	u64 cbaser_save;
-	u32 ctlr_save;
-	u32 mpidr;
-	struct list_head its_device_list;
-	u64 flags;
-	long unsigned int list_nr;
-	int numa_node;
-	unsigned int msi_domain_flags;
-	u32 pre_its_base;
-	int vlpi_redist_offset;
-};
-
-struct its_cmd_block {
-	union {
-		u64 raw_cmd[4];
-		__le64 raw_cmd_le[4];
-	};
-};
-
-struct event_lpi_map {
-	long unsigned int *lpi_map;
-	u16 *col_map;
-	irq_hw_number_t lpi_base;
-	int nr_lpis;
-	raw_spinlock_t vlpi_lock;
-	struct its_vm *vm;
-	struct its_vlpi_map *vlpi_maps;
-	int nr_vlpis;
-};
-
-struct its_device___2 {
-	struct list_head entry;
-	struct its_node *its;
-	struct event_lpi_map event_map;
-	void *itt;
-	u32 nr_ites;
-	u32 device_id;
-	bool shared;
-};
-
-struct cpu_lpi_count {
-	atomic_t managed;
-	atomic_t unmanaged;
-};
-
-struct its_cmd_desc {
-	union {
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_inv_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_clear_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_int_cmd;
-		struct {
-			struct its_device___2 *dev;
-			int valid;
-		} its_mapd_cmd;
-		struct {
-			struct its_collection___2 *col;
-			int valid;
-		} its_mapc_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 phys_id;
-			u32 event_id;
-		} its_mapti_cmd;
-		struct {
-			struct its_device___2 *dev;
-			struct its_collection___2 *col;
-			u32 event_id;
-		} its_movi_cmd;
-		struct {
-			struct its_device___2 *dev;
-			u32 event_id;
-		} its_discard_cmd;
-		struct {
-			struct its_collection___2 *col;
-		} its_invall_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_vinvall_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			bool valid;
-		} its_vmapp_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 virt_id;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmapti_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_device___2 *dev;
-			u32 event_id;
-			bool db_enabled;
-		} its_vmovi_cmd;
-		struct {
-			struct its_vpe *vpe;
-			struct its_collection___2 *col;
-			u16 seq_num;
-			u16 its_list;
-		} its_vmovp_cmd;
-		struct {
-			struct its_vpe *vpe;
-		} its_invdb_cmd;
-		struct {
-			struct its_vpe *vpe;
-			u8 sgi;
-			u8 priority;
-			bool enable;
-			bool group;
-			bool clear;
-		} its_vsgi_cmd;
-	};
-};
-
-typedef struct its_collection___2 * (*its_cmd_builder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-typedef struct its_vpe * (*its_cmd_vbuilder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
-
-struct lpi_range {
-	struct list_head entry;
-	u32 base_id;
-	u32 span;
-};
-
-struct its_srat_map {
-	u32 numa_node;
-	u32 its_id;
-};
-
-struct msi_controller {
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct list_head list;
-	int (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);
-	int (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);
-	void (*teardown_irq)(struct msi_controller *, unsigned int);
-};
-
-struct partition_desc___2 {
-	int nr_parts;
-	struct partition_affinity *parts;
-	struct irq_domain *domain;
-	struct irq_desc *chained_desc;
-	long unsigned int *bitmap;
-	struct irq_domain_ops ops;
-};
-
-struct mbigen_device {
-	struct platform_device *pdev;
-	void *base;
-};
-
-struct mtk_sysirq_chip_data {
-	raw_spinlock_t lock;
-	u32 nr_intpol_bases;
-	void **intpol_bases;
-	u32 *intpol_words;
-	u8 *intpol_idx;
-	u16 *which_word;
-};
-
-struct mtk_cirq_chip_data {
-	void *base;
-	unsigned int ext_irq_start;
-	unsigned int ext_irq_end;
-	struct irq_domain *domain;
-};
-
-struct mvebu_gicp_spi_range {
-	unsigned int start;
-	unsigned int count;
-};
-
-struct mvebu_gicp {
-	struct mvebu_gicp_spi_range *spi_ranges;
-	unsigned int spi_ranges_cnt;
-	unsigned int spi_cnt;
-	long unsigned int *spi_bitmap;
-	spinlock_t spi_lock;
-	struct resource *res;
-	struct device *dev;
-};
-
-struct mvebu_icu_subset_data {
-	unsigned int icu_group;
-	unsigned int offset_set_ah;
-	unsigned int offset_set_al;
-	unsigned int offset_clr_ah;
-	unsigned int offset_clr_al;
-};
-
-struct mvebu_icu {
-	void *base;
-	struct device *dev;
-};
-
-struct mvebu_icu_msi_data {
-	struct mvebu_icu *icu;
-	atomic_t initialized;
-	const struct mvebu_icu_subset_data *subset_data;
-};
-
-struct mvebu_icu_irq_data {
-	struct mvebu_icu *icu;
-	unsigned int icu_group;
-	unsigned int type;
-};
-
-struct odmi_data {
-	struct resource res;
-	void *base;
-	unsigned int spi_base;
-};
-
-struct mvebu_pic {
-	void *base;
-	u32 parent_irq;
-	struct irq_domain *domain;
-	struct irq_chip irq_chip;
-};
-
-struct mvebu_sei_interrupt_range {
-	u32 first;
-	u32 size;
-};
-
-struct mvebu_sei_caps {
-	struct mvebu_sei_interrupt_range ap_range;
-	struct mvebu_sei_interrupt_range cp_range;
-};
-
-struct mvebu_sei {
-	struct device *dev;
-	void *base;
-	struct resource *res;
-	struct irq_domain *sei_domain;
-	struct irq_domain *ap_domain;
-	struct irq_domain *cp_domain;
-	const struct mvebu_sei_caps *caps;
-	struct mutex cp_msi_lock;
-	long unsigned int cp_msi_bitmap[1];
-	raw_spinlock_t mask_lock;
-};
-
-struct meson_gpio_irq_controller;
-
-struct irq_ctl_ops {
-	void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *, unsigned int, long unsigned int);
-	void (*gpio_irq_init)(struct meson_gpio_irq_controller *);
-};
-
-struct meson_gpio_irq_params;
-
-struct meson_gpio_irq_controller {
-	const struct meson_gpio_irq_params *params;
-	void *base;
-	u32 channel_irqs[8];
-	long unsigned int channel_map[1];
-	spinlock_t lock;
-};
-
-struct meson_gpio_irq_params {
-	unsigned int nr_hwirq;
-	bool support_edge_both;
-	unsigned int edge_both_offset;
-	unsigned int edge_single_offset;
-	unsigned int pol_low_offset;
-	unsigned int pin_sel_mask;
-	struct irq_ctl_ops ops;
-};
-
-struct regmap_irq_type {
-	unsigned int type_reg_offset;
-	unsigned int type_reg_mask;
-	unsigned int type_rising_val;
-	unsigned int type_falling_val;
-	unsigned int type_level_low_val;
-	unsigned int type_level_high_val;
-	unsigned int types_supported;
-};
-
-struct regmap_irq {
-	unsigned int reg_offset;
-	unsigned int mask;
-	struct regmap_irq_type type;
-};
-
-struct regmap_irq_sub_irq_map {
-	unsigned int num_regs;
-	unsigned int *offset;
-};
-
-struct regmap_irq_chip {
-	const char *name;
-	unsigned int main_status;
-	unsigned int num_main_status_bits;
-	struct regmap_irq_sub_irq_map *sub_reg_offsets;
-	int num_main_regs;
-	unsigned int status_base;
-	unsigned int mask_base;
-	unsigned int unmask_base;
-	unsigned int ack_base;
-	unsigned int wake_base;
-	unsigned int type_base;
-	unsigned int irq_reg_stride;
-	bool mask_writeonly: 1;
-	bool init_ack_masked: 1;
-	bool mask_invert: 1;
-	bool use_ack: 1;
-	bool ack_invert: 1;
-	bool clear_ack: 1;
-	bool wake_invert: 1;
-	bool runtime_pm: 1;
-	bool type_invert: 1;
-	bool type_in_mask: 1;
-	bool clear_on_unmask: 1;
-	int num_regs;
-	const struct regmap_irq *irqs;
-	int num_irqs;
-	int num_type_reg;
-	unsigned int type_reg_stride;
-	int (*handle_pre_irq)(void *);
-	int (*handle_post_irq)(void *);
-	void *irq_drv_data;
-};
-
-struct gpio_desc;
-
-struct regulator_init_data;
-
-struct arizona_ldo1_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator_state {
-	int uV;
-	int min_uV;
-	int max_uV;
-	unsigned int mode;
-	int enabled;
-	bool changeable;
-};
-
-struct regulation_constraints {
-	const char *name;
-	int min_uV;
-	int max_uV;
-	int uV_offset;
-	int min_uA;
-	int max_uA;
-	int ilim_uA;
-	int system_load;
-	u32 *max_spread;
-	int max_uV_step;
-	unsigned int valid_modes_mask;
-	unsigned int valid_ops_mask;
-	int input_uV;
-	struct regulator_state state_disk;
-	struct regulator_state state_mem;
-	struct regulator_state state_standby;
-	suspend_state_t initial_state;
-	unsigned int initial_mode;
-	unsigned int ramp_delay;
-	unsigned int settling_time;
-	unsigned int settling_time_up;
-	unsigned int settling_time_down;
-	unsigned int enable_time;
-	unsigned int active_discharge;
-	unsigned int always_on: 1;
-	unsigned int boot_on: 1;
-	unsigned int apply_uV: 1;
-	unsigned int ramp_disable: 1;
-	unsigned int soft_start: 1;
-	unsigned int pull_down: 1;
-	unsigned int over_current_protection: 1;
-};
-
-struct regulator_consumer_supply;
-
-struct regulator_init_data {
-	const char *supply_regulator;
-	struct regulation_constraints constraints;
-	int num_consumer_supplies;
-	struct regulator_consumer_supply *consumer_supplies;
-	int (*regulator_init)(void *);
-	void *driver_data;
-};
-
-struct arizona_micsupp_pdata {
-	const struct regulator_init_data *init_data;
-};
-
-struct regulator;
-
-struct regulator_bulk_data {
-	const char *supply;
-	struct regulator *consumer;
-	int ret;
-};
-
-struct regulator_consumer_supply {
-	const char *dev_name;
-	const char *supply;
-};
-
-struct madera_codec_pdata {
-	u32 max_channels_clocked[4];
-	u32 dmic_ref[6];
-	u32 inmode[24];
-	bool out_mono[6];
-	u32 pdm_fmt[2];
-	u32 pdm_mute[2];
-};
-
-struct pinctrl_map;
-
-struct madera_pdata {
-	struct gpio_desc *reset;
-	struct arizona_ldo1_pdata ldo1;
-	struct arizona_micsupp_pdata micvdd;
-	unsigned int irq_flags;
-	int gpio_base;
-	const struct pinctrl_map *gpio_configs;
-	int n_gpio_configs;
-	u32 gpsw[2];
-	struct madera_codec_pdata codec;
-};
-
-enum pinctrl_map_type {
-	PIN_MAP_TYPE_INVALID = 0,
-	PIN_MAP_TYPE_DUMMY_STATE = 1,
-	PIN_MAP_TYPE_MUX_GROUP = 2,
-	PIN_MAP_TYPE_CONFIGS_PIN = 3,
-	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
-};
-
-struct pinctrl_map_mux {
-	const char *group;
-	const char *function;
-};
-
-struct pinctrl_map_configs {
-	const char *group_or_pin;
-	long unsigned int *configs;
-	unsigned int num_configs;
-};
-
-struct pinctrl_map {
-	const char *dev_name;
-	const char *name;
-	enum pinctrl_map_type type;
-	const char *ctrl_dev_name;
-	union {
-		struct pinctrl_map_mux mux;
-		struct pinctrl_map_configs configs;
-	} data;
-};
-
-enum madera_type {
-	CS47L35 = 1,
-	CS47L85 = 2,
-	CS47L90 = 3,
-	CS47L91 = 4,
-	CS47L92 = 5,
-	CS47L93 = 6,
-	WM1840 = 7,
-	CS47L15 = 8,
-	CS42L92 = 9,
-};
-
-enum {
-	MADERA_MCLK1 = 0,
-	MADERA_MCLK2 = 1,
-	MADERA_MCLK3 = 2,
-	MADERA_NUM_MCLK = 3,
-};
-
-struct regmap;
-
-struct regmap_irq_chip_data;
-
-struct snd_soc_dapm_context;
-
-struct madera {
-	struct regmap *regmap;
-	struct regmap *regmap_32bit;
-	struct device *dev;
-	enum madera_type type;
-	unsigned int rev;
-	const char *type_name;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool internal_dcvdd;
-	struct madera_pdata pdata;
-	struct device *irq_dev;
-	struct regmap_irq_chip_data *irq_data;
-	int irq;
-	struct clk_bulk_data mclk[3];
-	unsigned int num_micbias;
-	unsigned int num_childbias[4];
-	struct snd_soc_dapm_context *dapm;
-	struct mutex dapm_ptr_lock;
-	unsigned int hp_ena;
-	bool out_clamp[3];
-	bool out_shorted[3];
-	struct blocking_notifier_head notifier;
-};
-
-struct mst_intc_chip_data {
-	raw_spinlock_t lock;
-	unsigned int irq_start;
-	unsigned int nr_irqs;
-	void *base;
-	bool no_eoi;
-};
-
-struct of_dev_auxdata {
-	char *compatible;
-	resource_size_t phys_addr;
-	char *name;
-	void *platform_data;
-};
-
-struct circ_buf {
-	char *buf;
-	int head;
-	int tail;
-};
-
-struct serial_rs485 {
-	__u32 flags;
-	__u32 delay_rts_before_send;
-	__u32 delay_rts_after_send;
-	__u32 padding[5];
-};
-
-struct serial_iso7816 {
-	__u32 flags;
-	__u32 tg;
-	__u32 sc_fi;
-	__u32 sc_di;
-	__u32 clk;
-	__u32 reserved[5];
-};
-
-struct uart_port;
-
-struct uart_ops {
-	unsigned int (*tx_empty)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*stop_tx)(struct uart_port *);
-	void (*start_tx)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	void (*send_xchar)(struct uart_port *, char);
-	void (*stop_rx)(struct uart_port *);
-	void (*enable_ms)(struct uart_port *);
-	void (*break_ctl)(struct uart_port *, int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*flush_buffer)(struct uart_port *);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	const char * (*type)(struct uart_port *);
-	void (*release_port)(struct uart_port *);
-	int (*request_port)(struct uart_port *);
-	void (*config_port)(struct uart_port *, int);
-	int (*verify_port)(struct uart_port *, struct serial_struct *);
-	int (*ioctl)(struct uart_port *, unsigned int, long unsigned int);
-	int (*poll_init)(struct uart_port *);
-	void (*poll_put_char)(struct uart_port *, unsigned char);
-	int (*poll_get_char)(struct uart_port *);
-};
-
-struct uart_icount {
-	__u32 cts;
-	__u32 dsr;
-	__u32 rng;
-	__u32 dcd;
-	__u32 rx;
-	__u32 tx;
-	__u32 frame;
-	__u32 overrun;
-	__u32 parity;
-	__u32 brk;
-	__u32 buf_overrun;
-};
-
-typedef unsigned int upf_t;
-
-typedef unsigned int upstat_t;
-
-struct uart_state;
-
-struct uart_port {
-	spinlock_t lock;
-	long unsigned int iobase;
-	unsigned char *membase;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	void (*set_mctrl)(struct uart_port *, unsigned int);
-	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
-	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
-	int (*startup)(struct uart_port *);
-	void (*shutdown)(struct uart_port *);
-	void (*throttle)(struct uart_port *);
-	void (*unthrottle)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	unsigned int fifosize;
-	unsigned char x_char;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char quirks;
-	unsigned int read_status_mask;
-	unsigned int ignore_status_mask;
-	struct uart_state *state;
-	struct uart_icount icount;
-	struct console *cons;
-	upf_t flags;
-	upstat_t status;
-	int hw_stopped;
-	unsigned int mctrl;
-	unsigned int timeout;
-	unsigned int type;
-	const struct uart_ops *ops;
-	unsigned int custom_divisor;
-	unsigned int line;
-	unsigned int minor;
-	resource_size_t mapbase;
-	resource_size_t mapsize;
-	struct device *dev;
-	long unsigned int sysrq;
-	unsigned int sysrq_ch;
-	unsigned char has_sysrq;
-	unsigned char sysrq_seq;
-	unsigned char hub6;
-	unsigned char suspended;
-	unsigned char console_reinit;
-	const char *name;
-	struct attribute_group *attr_group;
-	const struct attribute_group **tty_groups;
-	struct serial_rs485 rs485;
-	struct gpio_desc *rs485_term_gpio;
-	struct serial_iso7816 iso7816;
-	void *private_data;
-};
-
-enum uart_pm_state {
-	UART_PM_STATE_ON = 0,
-	UART_PM_STATE_OFF = 3,
-	UART_PM_STATE_UNDEFINED = 4,
-};
-
-struct uart_state {
-	struct tty_port port;
-	enum uart_pm_state pm_state;
-	struct circ_buf xmit;
-	atomic_t refcount;
-	wait_queue_head_t remove_wait;
-	struct uart_port *uart_port;
-};
-
-struct plat_serial8250_port {
-	long unsigned int iobase;
-	void *membase;
-	resource_size_t mapbase;
-	unsigned int irq;
-	long unsigned int irqflags;
-	unsigned int uartclk;
-	void *private_data;
-	unsigned char regshift;
-	unsigned char iotype;
-	unsigned char hub6;
-	unsigned char has_sysrq;
-	upf_t flags;
-	unsigned int type;
-	unsigned int (*serial_in)(struct uart_port *, int);
-	void (*serial_out)(struct uart_port *, int, int);
-	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
-	void (*set_ldisc)(struct uart_port *, struct ktermios *);
-	unsigned int (*get_mctrl)(struct uart_port *);
-	int (*handle_irq)(struct uart_port *);
-	void (*pm)(struct uart_port *, unsigned int, unsigned int);
-	void (*handle_break)(struct uart_port *);
-};
-
-struct lpc_cycle_para {
-	unsigned int opflags;
-	unsigned int csize;
-};
-
-struct hisi_lpc_dev {
-	spinlock_t cycle_lock;
-	void *membase;
-	struct logic_pio_hwaddr *io_host;
-};
-
-struct hisi_lpc_acpi_cell {
-	const char *hid;
-	const char *name;
-	void *pdata;
-	size_t pdata_size;
-};
-
-enum regcache_type {
-	REGCACHE_NONE = 0,
-	REGCACHE_RBTREE = 1,
-	REGCACHE_COMPRESSED = 2,
-	REGCACHE_FLAT = 3,
-};
-
-struct reg_default {
-	unsigned int reg;
-	unsigned int def;
-};
-
-enum regmap_endian {
-	REGMAP_ENDIAN_DEFAULT = 0,
-	REGMAP_ENDIAN_BIG = 1,
-	REGMAP_ENDIAN_LITTLE = 2,
-	REGMAP_ENDIAN_NATIVE = 3,
-};
-
-struct regmap_range {
-	unsigned int range_min;
-	unsigned int range_max;
-};
-
-struct regmap_access_table {
-	const struct regmap_range *yes_ranges;
-	unsigned int n_yes_ranges;
-	const struct regmap_range *no_ranges;
-	unsigned int n_no_ranges;
-};
-
-typedef void (*regmap_lock)(void *);
-
-typedef void (*regmap_unlock)(void *);
-
-struct regmap_range_cfg;
-
-struct regmap_config {
-	const char *name;
-	int reg_bits;
-	int reg_stride;
-	int pad_bits;
-	int val_bits;
-	bool (*writeable_reg)(struct device *, unsigned int);
-	bool (*readable_reg)(struct device *, unsigned int);
-	bool (*volatile_reg)(struct device *, unsigned int);
-	bool (*precious_reg)(struct device *, unsigned int);
-	bool (*writeable_noinc_reg)(struct device *, unsigned int);
-	bool (*readable_noinc_reg)(struct device *, unsigned int);
-	bool disable_locking;
-	regmap_lock lock;
-	regmap_unlock unlock;
-	void *lock_arg;
-	int (*reg_read)(void *, unsigned int, unsigned int *);
-	int (*reg_write)(void *, unsigned int, unsigned int);
-	bool fast_io;
-	unsigned int max_register;
-	const struct regmap_access_table *wr_table;
-	const struct regmap_access_table *rd_table;
-	const struct regmap_access_table *volatile_table;
-	const struct regmap_access_table *precious_table;
-	const struct regmap_access_table *wr_noinc_table;
-	const struct regmap_access_table *rd_noinc_table;
-	const struct reg_default *reg_defaults;
-	unsigned int num_reg_defaults;
-	enum regcache_type cache_type;
-	const void *reg_defaults_raw;
-	unsigned int num_reg_defaults_raw;
-	long unsigned int read_flag_mask;
-	long unsigned int write_flag_mask;
-	bool zero_flag_mask;
-	bool use_single_read;
-	bool use_single_write;
-	bool can_multi_write;
-	enum regmap_endian reg_format_endian;
-	enum regmap_endian val_format_endian;
-	const struct regmap_range_cfg *ranges;
-	unsigned int num_ranges;
-	bool use_hwlock;
-	unsigned int hwlock_id;
-	unsigned int hwlock_mode;
-	bool can_sleep;
-};
-
-struct regmap_range_cfg {
-	const char *name;
-	unsigned int range_min;
-	unsigned int range_max;
-	unsigned int selector_reg;
-	unsigned int selector_mask;
-	int selector_shift;
-	unsigned int window_start;
-	unsigned int window_len;
-};
-
-struct vexpress_syscfg {
-	struct device *dev;
-	void *base;
-	struct list_head funcs;
-};
-
-struct vexpress_syscfg_func {
-	struct list_head list;
-	struct vexpress_syscfg *syscfg;
-	struct regmap *regmap;
-	int num_templates;
-	u32 template[0];
-};
-
-struct vexpress_config_bridge_ops {
-	struct regmap * (*regmap_init)(struct device *, void *);
-	void (*regmap_exit)(struct regmap *, void *);
-};
-
-struct vexpress_config_bridge {
-	struct vexpress_config_bridge_ops *ops;
-	void *context;
+enum reg_type {
+	REG_TYPE_RM = 0,
+	REG_TYPE_REG = 1,
+	REG_TYPE_INDEX = 2,
+	REG_TYPE_BASE = 3,
 };
 
 enum device_link_state {
@@ -60111,7 +78351,7 @@
 	u32 flags;
 	refcount_t rpm_active;
 	struct kref kref;
-	struct callback_head callback_head;
+	struct work_struct rm_work;
 	bool supplier_preactivated;
 };
 
@@ -60126,6 +78366,13 @@
 	u8 set_voltages: 1;
 };
 
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	long unsigned int differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
 struct phy_configure_opts_mipi_dphy {
 	unsigned int clk_miss;
 	unsigned int clk_post;
@@ -60177,9 +78424,16 @@
 	PHY_MODE_DP = 19,
 };
 
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
 union phy_configure_opts {
 	struct phy_configure_opts_mipi_dphy mipi_dphy;
 	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
 };
 
 struct phy;
@@ -60190,6 +78444,8 @@
 	int (*power_on)(struct phy *);
 	int (*power_off)(struct phy *);
 	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
 	int (*configure)(struct phy *, union phy_configure_opts *);
 	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
 	int (*reset)(struct phy *);
@@ -60204,6 +78460,8 @@
 	enum phy_mode mode;
 };
 
+struct regulator;
+
 struct phy {
 	struct device dev;
 	int id;
@@ -60230,252 +78488,6 @@
 	struct phy *phy;
 };
 
-enum usb_dr_mode {
-	USB_DR_MODE_UNKNOWN = 0,
-	USB_DR_MODE_HOST = 1,
-	USB_DR_MODE_PERIPHERAL = 2,
-	USB_DR_MODE_OTG = 3,
-};
-
-struct phy_meson8b_usb2_match_data {
-	bool host_enable_aca;
-};
-
-struct reset_control;
-
-struct phy_meson8b_usb2_priv {
-	struct regmap *regmap;
-	enum usb_dr_mode dr_mode;
-	struct clk *clk_usb_general;
-	struct clk *clk_usb;
-	struct reset_control *reset;
-	const struct phy_meson8b_usb2_match_data *match;
-};
-
-struct phy_meson_gxl_usb2_priv {
-	struct regmap *regmap;
-	enum phy_mode mode;
-	int is_enabled;
-	struct clk *clk;
-	struct reset_control *reset;
-};
-
-enum meson_soc_id {
-	MESON_SOC_G12A = 0,
-	MESON_SOC_A1 = 1,
-};
-
-struct phy_meson_g12a_usb2_priv {
-	struct device *dev;
-	struct regmap *regmap;
-	struct clk *clk;
-	struct reset_control *reset;
-	int soc_id;
-};
-
-struct phy_g12a_usb3_pcie_priv {
-	struct regmap *regmap;
-	struct regmap *regmap_cr;
-	struct clk *clk_ref;
-	struct reset_control *reset;
-	struct phy *phy;
-	unsigned int mode;
-};
-
-struct phy_axg_pcie_priv {
-	struct phy *phy;
-	struct phy *analog;
-	struct regmap *regmap;
-	struct reset_control *reset;
-};
-
-struct phy_axg_mipi_pcie_analog_priv {
-	struct phy *phy;
-	unsigned int mode;
-	struct regmap *regmap;
-};
-
-enum ethtool_link_mode_bit_indices {
-	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
-	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
-	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
-	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
-	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
-	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
-	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
-	ETHTOOL_LINK_MODE_TP_BIT = 7,
-	ETHTOOL_LINK_MODE_AUI_BIT = 8,
-	ETHTOOL_LINK_MODE_MII_BIT = 9,
-	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
-	ETHTOOL_LINK_MODE_BNC_BIT = 11,
-	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
-	ETHTOOL_LINK_MODE_Pause_BIT = 13,
-	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
-	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
-	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
-	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
-	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
-	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
-	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
-	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
-	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
-	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
-	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
-	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
-	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
-	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
-	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
-	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
-	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
-	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
-	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
-	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
-	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
-	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
-	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
-	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
-	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
-	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
-	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
-	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
-	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
-	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
-	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
-	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
-	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
-	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
-	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
-	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
-	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
-	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
-	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
-	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
-	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
-	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
-	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
-	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
-	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
-	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
-	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
-	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
-	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
-	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
-	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
-	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
-	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
-	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
-	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
-	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
-	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
-	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
-	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
-	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
-	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
-	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
-	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
-	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
-	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
-	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
-	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
-	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
-	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
-	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
-	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
-	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
-	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
-	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
-	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
-	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
-	__ETHTOOL_LINK_MODE_MASK_NBITS = 92,
-};
-
-struct mvebu_a3700_comphy_conf {
-	unsigned int lane;
-	enum phy_mode mode;
-	int submode;
-	unsigned int port;
-	u32 fw_mode;
-};
-
-struct mvebu_a3700_comphy_lane {
-	struct device *dev;
-	unsigned int id;
-	enum phy_mode mode;
-	int submode;
-	int port;
-};
-
-struct mvebu_a3700_utmi_caps {
-	int usb32;
-	const struct phy_ops *ops;
-};
-
-struct mvebu_a3700_utmi {
-	void *regs;
-	struct regmap *usb_misc;
-	const struct mvebu_a3700_utmi_caps *caps;
-	struct phy *phy;
-};
-
-struct exynos_dp_video_phy_drvdata {
-	u32 phy_ctrl_offset;
-};
-
-struct exynos_dp_video_phy {
-	struct regmap *regs;
-	const struct exynos_dp_video_phy_drvdata *drvdata;
-};
-
-enum exynos_mipi_phy_id {
-	EXYNOS_MIPI_PHY_ID_NONE = 4294967295,
-	EXYNOS_MIPI_PHY_ID_CSIS0 = 0,
-	EXYNOS_MIPI_PHY_ID_DSIM0 = 1,
-	EXYNOS_MIPI_PHY_ID_CSIS1 = 2,
-	EXYNOS_MIPI_PHY_ID_DSIM1 = 3,
-	EXYNOS_MIPI_PHY_ID_CSIS2 = 4,
-	EXYNOS_MIPI_PHYS_NUM = 5,
-};
-
-enum exynos_mipi_phy_regmap_id {
-	EXYNOS_MIPI_REGMAP_PMU = 0,
-	EXYNOS_MIPI_REGMAP_DISP = 1,
-	EXYNOS_MIPI_REGMAP_CAM0 = 2,
-	EXYNOS_MIPI_REGMAP_CAM1 = 3,
-	EXYNOS_MIPI_REGMAPS_NUM = 4,
-};
-
-struct exynos_mipi_phy_desc {
-	enum exynos_mipi_phy_id coupled_phy_id;
-	u32 enable_val;
-	unsigned int enable_reg;
-	enum exynos_mipi_phy_regmap_id enable_map;
-	u32 resetn_val;
-	unsigned int resetn_reg;
-	enum exynos_mipi_phy_regmap_id resetn_map;
-};
-
-struct mipi_phy_device_desc {
-	int num_phys;
-	int num_regmaps;
-	const char *regmap_names[4];
-	struct exynos_mipi_phy_desc phys[5];
-};
-
-struct video_phy_desc {
-	struct phy *phy;
-	unsigned int index;
-	const struct exynos_mipi_phy_desc *data;
-};
-
-struct exynos_mipi_video_phy {
-	struct regmap *regmaps[4];
-	int num_phys;
-	struct video_phy_desc phys[5];
-	spinlock_t slock;
-};
-
 struct pinctrl;
 
 struct pinctrl_state;
@@ -60517,8 +78529,8 @@
 	unsigned int id;
 	unsigned int base;
 	unsigned int pin_base;
-	const unsigned int *pins;
 	unsigned int npins;
+	const unsigned int *pins;
 	struct gpio_chip *gc;
 };
 
@@ -60537,11 +78549,16 @@
 	struct lock_class_key *lock_key;
 	struct lock_class_key *request_key;
 	irq_flow_handler_t parent_handler;
-	void *parent_handler_data;
+	union {
+		void *parent_handler_data;
+		void **parent_handler_data_array;
+	};
 	unsigned int num_parents;
 	unsigned int *parents;
 	unsigned int *map;
 	bool threaded;
+	bool per_parent_data;
+	bool initialized;
 	int (*init_hw)(struct gpio_chip *);
 	void (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
 	long unsigned int *valid_mask;
@@ -60558,6 +78575,7 @@
 	const char *label;
 	struct gpio_device *gpiodev;
 	struct device *parent;
+	struct fwnode_handle *fwnode;
 	struct module *owner;
 	int (*request)(struct gpio_chip *, unsigned int);
 	void (*free)(struct gpio_chip *, unsigned int);
@@ -60573,8 +78591,11 @@
 	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
 	int (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);
 	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, long unsigned int);
 	int base;
 	u16 ngpio;
+	u16 offset;
 	const char * const *names;
 	bool can_sleep;
 	long unsigned int (*read_reg)(void *);
@@ -60587,18 +78608,17 @@
 	void *reg_dir_in;
 	bool bgpio_dir_unreadable;
 	int bgpio_bits;
-	spinlock_t bgpio_lock;
+	raw_spinlock_t bgpio_lock;
 	long unsigned int bgpio_data;
 	long unsigned int bgpio_dir;
 	struct gpio_irq_chip irq;
 	long unsigned int *valid_mask;
-	struct device_node *of_node;
-	unsigned int of_gpio_n_cells;
-	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
 };
 
 struct pinctrl_dev;
 
+struct pinctrl_map;
+
 struct pinctrl_ops {
 	int (*get_groups_count)(struct pinctrl_dev *);
 	const char * (*get_group_name)(struct pinctrl_dev *, unsigned int);
@@ -60614,10 +78634,6 @@
 	struct list_head node;
 	struct pinctrl_desc *desc;
 	struct xarray pin_desc_tree;
-	struct xarray pin_group_tree;
-	unsigned int num_groups;
-	struct xarray pin_function_tree;
-	unsigned int num_functions;
 	struct list_head gpio_ranges;
 	struct device *dev;
 	struct module *owner;
@@ -60629,6 +78645,36 @@
 	struct dentry *device_root;
 };
 
+enum pinctrl_map_type {
+	PIN_MAP_TYPE_INVALID = 0,
+	PIN_MAP_TYPE_DUMMY_STATE = 1,
+	PIN_MAP_TYPE_MUX_GROUP = 2,
+	PIN_MAP_TYPE_CONFIGS_PIN = 3,
+	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
+};
+
+struct pinctrl_map_mux {
+	const char *group;
+	const char *function;
+};
+
+struct pinctrl_map_configs {
+	const char *group_or_pin;
+	long unsigned int *configs;
+	unsigned int num_configs;
+};
+
+struct pinctrl_map {
+	const char *dev_name;
+	const char *name;
+	enum pinctrl_map_type type;
+	const char *ctrl_dev_name;
+	union {
+		struct pinctrl_map_mux mux;
+		struct pinctrl_map_configs configs;
+	} data;
+};
+
 struct pinmux_ops;
 
 struct pinconf_ops;
@@ -60691,14 +78737,16 @@
 	PIN_CONFIG_INPUT_ENABLE = 12,
 	PIN_CONFIG_INPUT_SCHMITT = 13,
 	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
-	PIN_CONFIG_LOW_POWER_MODE = 15,
-	PIN_CONFIG_OUTPUT_ENABLE = 16,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
 	PIN_CONFIG_OUTPUT = 17,
-	PIN_CONFIG_POWER_SOURCE = 18,
-	PIN_CONFIG_SLEEP_HARDWARE_STATE = 19,
-	PIN_CONFIG_SLEW_RATE = 20,
-	PIN_CONFIG_SKEW_DELAY = 21,
-	PIN_CONFIG_PERSIST_STATE = 22,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
 	PIN_CONFIG_END = 127,
 	PIN_CONFIG_MAX = 255,
 };
@@ -60740,7 +78788,6 @@
 	long unsigned int flags;
 	const char *label;
 	const char *name;
-	struct device_node *hog;
 	unsigned int debounce_period_us;
 };
 
@@ -60783,29 +78830,8 @@
 	unsigned int num_maps;
 };
 
-struct group_desc {
-	const char *name;
-	int *pins;
-	int num_pins;
-	void *data;
-};
-
 struct pctldev;
 
-struct function_desc {
-	const char *name;
-	const char **group_names;
-	int num_group_names;
-	void *data;
-};
-
-struct pinctrl_dt_map {
-	struct list_head node;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_map *map;
-	unsigned int num_maps;
-};
-
 struct amd_pingroup {
 	const char *name;
 	const unsigned int *pins;
@@ -60823,1957 +78849,497 @@
 	struct resource *res;
 	struct platform_device *pdev;
 	u32 *saved_regs;
+	int irq;
 };
 
-struct meson_pmx_group {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int num_pins;
-	const void *data;
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_COMPRESSED = 2,
+	REGCACHE_FLAT = 3,
 };
 
-struct meson_pmx_func {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct meson_reg_desc {
+struct reg_default {
 	unsigned int reg;
-	unsigned int bit;
+	unsigned int def;
 };
 
-enum meson_reg_type {
-	REG_PULLEN = 0,
-	REG_PULL = 1,
-	REG_DIR = 2,
-	REG_OUT = 3,
-	REG_IN = 4,
-	REG_DS = 5,
-	NUM_REG = 6,
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
 };
 
-enum meson_pinconf_drv {
-	MESON_PINCONF_DRV_500UA = 0,
-	MESON_PINCONF_DRV_2500UA = 1,
-	MESON_PINCONF_DRV_3000UA = 2,
-	MESON_PINCONF_DRV_4000UA = 3,
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
 };
 
-struct meson_bank {
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_range_cfg;
+
+struct regmap_config {
 	const char *name;
-	unsigned int first;
-	unsigned int last;
-	int irq_first;
-	int irq_last;
-	struct meson_reg_desc regs[6];
+	int reg_bits;
+	int reg_stride;
+	int reg_downshift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	long unsigned int read_flag_mask;
+	long unsigned int write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
 };
 
-struct meson_pinctrl;
-
-struct meson_pinctrl_data {
+struct regmap_range_cfg {
 	const char *name;
-	const struct pinctrl_pin_desc *pins;
-	struct meson_pmx_group *groups;
-	struct meson_pmx_func *funcs;
-	unsigned int num_pins;
-	unsigned int num_groups;
-	unsigned int num_funcs;
-	struct meson_bank *banks;
-	unsigned int num_banks;
-	const struct pinmux_ops *pmx_ops;
-	void *pmx_data;
-	int (*parse_dt)(struct meson_pinctrl *);
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
 };
 
-struct meson_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pcdev;
-	struct pinctrl_desc desc;
-	struct meson_pinctrl_data *data;
-	struct regmap *reg_mux;
-	struct regmap *reg_pullen;
-	struct regmap *reg_pull;
-	struct regmap *reg_gpio;
-	struct regmap *reg_ds;
-	struct gpio_chip chip;
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_adapter;
+
+struct i2c_client {
+	short unsigned int flags;
+	short unsigned int addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_board_info;
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
+	int (*remove)(struct i2c_client *);
+	int (*probe_new)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const short unsigned int *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_board_info {
+	char type[20];
+	short unsigned int flags;
+	short unsigned int addr;
+	const char *dev_name;
+	void *platform_data;
 	struct device_node *of_node;
-};
-
-struct meson8_pmx_data {
-	bool is_gpio;
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct meson_pmx_bank {
-	const char *name;
-	unsigned int first;
-	unsigned int last;
-	unsigned int reg;
-	unsigned int offset;
-};
-
-struct meson_axg_pmx_data {
-	struct meson_pmx_bank *pmx_banks;
-	unsigned int num_pmx_banks;
-};
-
-struct meson_pmx_axg_data {
-	unsigned int func;
-};
-
-enum rockchip_pinctrl_type {
-	PX30 = 0,
-	RV1108 = 1,
-	RK2928 = 2,
-	RK3066B = 3,
-	RK3128 = 4,
-	RK3188 = 5,
-	RK3288 = 6,
-	RK3308 = 7,
-	RK3368 = 8,
-	RK3399 = 9,
-};
-
-struct rockchip_iomux {
-	int type;
-	int offset;
-};
-
-enum rockchip_pin_drv_type {
-	DRV_TYPE_IO_DEFAULT = 0,
-	DRV_TYPE_IO_1V8_OR_3V0 = 1,
-	DRV_TYPE_IO_1V8_ONLY = 2,
-	DRV_TYPE_IO_1V8_3V0_AUTO = 3,
-	DRV_TYPE_IO_3V3_ONLY = 4,
-	DRV_TYPE_MAX = 5,
-};
-
-enum rockchip_pin_pull_type {
-	PULL_TYPE_IO_DEFAULT = 0,
-	PULL_TYPE_IO_1V8_ONLY = 1,
-	PULL_TYPE_MAX = 2,
-};
-
-struct rockchip_drv {
-	enum rockchip_pin_drv_type drv_type;
-	int offset;
-};
-
-struct rockchip_pinctrl;
-
-struct rockchip_pin_bank {
-	void *reg_base;
-	struct regmap *regmap_pull;
-	struct clk *clk;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
 	int irq;
-	u32 saved_masks;
-	u32 pin_base;
-	u8 nr_pins;
-	char *name;
-	u8 bank_num;
-	struct rockchip_iomux iomux[4];
-	struct rockchip_drv drv[4];
-	enum rockchip_pin_pull_type pull_type[4];
-	bool valid;
-	struct device_node *of_node;
-	struct rockchip_pinctrl *drvdata;
-	struct irq_domain *domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	raw_spinlock_t slock;
-	u32 toggle_edge_mode;
-	u32 recalced_mask;
-	u32 route_mask;
 };
 
-struct rockchip_pin_ctrl;
+struct i2c_algorithm;
 
-struct rockchip_pin_group;
+struct i2c_lock_operations;
 
-struct rockchip_pmx_func;
+struct i2c_bus_recovery_info;
 
-struct rockchip_pinctrl {
-	struct regmap *regmap_base;
-	int reg_size;
-	struct regmap *regmap_pull;
-	struct regmap *regmap_pmu;
-	struct device *dev;
-	struct rockchip_pin_ctrl *ctrl;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct rockchip_pin_group *groups;
-	unsigned int ngroups;
-	struct rockchip_pmx_func *functions;
-	unsigned int nfunctions;
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	long unsigned int locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
 };
 
-struct rockchip_mux_recalced_data {
-	u8 num;
-	u8 pin;
-	u32 reg;
-	u8 bit;
-	u8 mask;
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
 };
 
-enum rockchip_mux_route_location {
-	ROCKCHIP_ROUTE_SAME = 0,
-	ROCKCHIP_ROUTE_PMU = 1,
-	ROCKCHIP_ROUTE_GRF = 2,
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
 };
 
-struct rockchip_mux_route_data {
-	u8 bank_num;
-	u8 pin;
-	u8 func;
-	enum rockchip_mux_route_location route_location;
-	u32 route_offset;
-	u32 route_val;
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
 };
 
-struct rockchip_pin_ctrl {
-	struct rockchip_pin_bank *pin_banks;
-	u32 nr_banks;
-	u32 nr_pins;
-	char *label;
-	enum rockchip_pinctrl_type type;
-	int grf_mux_offset;
-	int pmu_mux_offset;
-	int grf_drv_offset;
-	int pmu_drv_offset;
-	struct rockchip_mux_recalced_data *iomux_recalced;
-	u32 niomux_recalced;
-	struct rockchip_mux_route_data *iomux_routes;
-	u32 niomux_routes;
-	void (*pull_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	void (*drv_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-	int (*schmitt_calc_reg)(struct rockchip_pin_bank *, int, struct regmap **, int *, u8 *);
-};
-
-struct rockchip_pin_config {
-	unsigned int func;
-	long unsigned int *configs;
-	unsigned int nconfigs;
-};
-
-struct rockchip_pin_group {
-	const char *name;
-	unsigned int npins;
-	unsigned int *pins;
-	struct rockchip_pin_config *data;
-};
-
-struct rockchip_pmx_func {
-	const char *name;
-	const char **groups;
-	u8 ngroups;
-};
-
-struct pcs_pdata {
-	int irq;
-	void (*rearm)();
-};
-
-struct pcs_func_vals {
-	void *reg;
-	unsigned int val;
-	unsigned int mask;
-};
-
-struct pcs_conf_vals {
-	enum pin_config_param param;
-	unsigned int val;
-	unsigned int enable;
-	unsigned int disable;
-	unsigned int mask;
-};
-
-struct pcs_conf_type {
-	const char *name;
-	enum pin_config_param param;
-};
-
-struct pcs_function {
-	const char *name;
-	struct pcs_func_vals *vals;
-	unsigned int nvals;
-	const char **pgnames;
-	int npgnames;
-	struct pcs_conf_vals *conf;
-	int nconfs;
-	struct list_head node;
-};
-
-struct pcs_gpiofunc_range {
-	unsigned int offset;
-	unsigned int npins;
-	unsigned int gpiofunc;
-	struct list_head node;
-};
-
-struct pcs_data {
-	struct pinctrl_pin_desc *pa;
-	int cur;
-};
-
-struct pcs_soc_data {
-	unsigned int flags;
-	int irq;
-	unsigned int irq_enable_mask;
-	unsigned int irq_status_mask;
-	void (*rearm)();
-};
-
-struct pcs_device {
-	struct resource *res;
-	void *base;
-	void *saved_vals;
-	unsigned int size;
-	struct device *dev;
-	struct device_node *np;
-	struct pinctrl_dev *pctl;
-	unsigned int flags;
-	struct property *missing_nr_pinctrl_cells;
-	struct pcs_soc_data socdata;
-	raw_spinlock_t lock;
-	struct mutex mutex;
-	unsigned int width;
-	unsigned int fmask;
-	unsigned int fshift;
-	unsigned int foff;
-	unsigned int fmax;
-	bool bits_per_mux;
-	unsigned int bits_per_pin;
-	struct pcs_data pins;
-	struct list_head gpiofuncs;
-	struct list_head irqs;
-	struct irq_chip chip;
-	struct irq_domain *domain;
-	struct pinctrl_desc desc;
-	unsigned int (*read)(void *);
-	void (*write)(unsigned int, void *);
-};
-
-struct pcs_interrupt {
-	void *reg;
-	irq_hw_number_t hwirq;
-	unsigned int irq;
-	struct list_head node;
-};
-
-struct tegra_pinctrl_soc_data;
-
-struct tegra_pmx {
-	struct device *dev;
-	struct pinctrl_dev *pctl;
-	const struct tegra_pinctrl_soc_data *soc;
-	const char **group_pins;
-	int nbanks;
-	void **regs;
-	u32 *backup_regs;
-};
-
-struct tegra_function;
-
-struct tegra_pingroup;
-
-struct tegra_pinctrl_soc_data {
-	unsigned int ngpios;
-	const char *gpio_compatible;
-	const struct pinctrl_pin_desc *pins;
-	unsigned int npins;
-	struct tegra_function *functions;
-	unsigned int nfunctions;
-	const struct tegra_pingroup *groups;
-	unsigned int ngroups;
-	bool hsm_in_mux;
-	bool schmitt_in_mux;
-	bool drvtype_in_mux;
-	bool sfsel_in_mux;
-};
-
-enum tegra_pinconf_param {
-	TEGRA_PINCONF_PARAM_PULL = 0,
-	TEGRA_PINCONF_PARAM_TRISTATE = 1,
-	TEGRA_PINCONF_PARAM_ENABLE_INPUT = 2,
-	TEGRA_PINCONF_PARAM_OPEN_DRAIN = 3,
-	TEGRA_PINCONF_PARAM_LOCK = 4,
-	TEGRA_PINCONF_PARAM_IORESET = 5,
-	TEGRA_PINCONF_PARAM_RCV_SEL = 6,
-	TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE = 7,
-	TEGRA_PINCONF_PARAM_SCHMITT = 8,
-	TEGRA_PINCONF_PARAM_LOW_POWER_MODE = 9,
-	TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH = 10,
-	TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH = 11,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING = 12,
-	TEGRA_PINCONF_PARAM_SLEW_RATE_RISING = 13,
-	TEGRA_PINCONF_PARAM_DRIVE_TYPE = 14,
-};
-
-struct tegra_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct tegra_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	u8 npins;
-	u8 funcs[4];
-	s32 mux_reg;
-	s32 pupd_reg;
-	s32 tri_reg;
-	s32 drv_reg;
-	u32 mux_bank: 2;
-	u32 pupd_bank: 2;
-	u32 tri_bank: 2;
-	u32 drv_bank: 2;
-	s32 mux_bit: 6;
-	s32 pupd_bit: 6;
-	s32 tri_bit: 6;
-	s32 einput_bit: 6;
-	s32 odrain_bit: 6;
-	s32 lock_bit: 6;
-	s32 ioreset_bit: 6;
-	s32 rcv_sel_bit: 6;
-	s32 hsm_bit: 6;
-	char: 2;
-	s32 sfsel_bit: 6;
-	s32 schmitt_bit: 6;
-	s32 lpmd_bit: 6;
-	s32 drvdn_bit: 6;
-	s32 drvup_bit: 6;
-	char: 2;
-	s32 slwr_bit: 6;
-	s32 slwf_bit: 6;
-	s32 drvtype_bit: 6;
-	s32 drvdn_width: 6;
-	s32 drvup_width: 6;
-	char: 2;
-	s32 slwr_width: 6;
-	s32 slwf_width: 6;
-	u32 parked_bitmask;
-};
-
-struct cfg_param {
-	const char *property;
-	enum tegra_pinconf_param param;
-};
-
-enum tegra_mux {
-	TEGRA_MUX_BLINK = 0,
-	TEGRA_MUX_CCLA = 1,
-	TEGRA_MUX_CEC = 2,
-	TEGRA_MUX_CLDVFS = 3,
-	TEGRA_MUX_CLK = 4,
-	TEGRA_MUX_CLK12 = 5,
-	TEGRA_MUX_CPU = 6,
-	TEGRA_MUX_CSI = 7,
-	TEGRA_MUX_DAP = 8,
-	TEGRA_MUX_DAP1 = 9,
-	TEGRA_MUX_DAP2 = 10,
-	TEGRA_MUX_DEV3 = 11,
-	TEGRA_MUX_DISPLAYA = 12,
-	TEGRA_MUX_DISPLAYA_ALT = 13,
-	TEGRA_MUX_DISPLAYB = 14,
-	TEGRA_MUX_DP = 15,
-	TEGRA_MUX_DSI_B = 16,
-	TEGRA_MUX_DTV = 17,
-	TEGRA_MUX_EXTPERIPH1 = 18,
-	TEGRA_MUX_EXTPERIPH2 = 19,
-	TEGRA_MUX_EXTPERIPH3 = 20,
-	TEGRA_MUX_GMI = 21,
-	TEGRA_MUX_GMI_ALT = 22,
-	TEGRA_MUX_HDA = 23,
-	TEGRA_MUX_HSI = 24,
-	TEGRA_MUX_I2C1 = 25,
-	TEGRA_MUX_I2C2 = 26,
-	TEGRA_MUX_I2C3 = 27,
-	TEGRA_MUX_I2C4 = 28,
-	TEGRA_MUX_I2CPWR = 29,
-	TEGRA_MUX_I2S0 = 30,
-	TEGRA_MUX_I2S1 = 31,
-	TEGRA_MUX_I2S2 = 32,
-	TEGRA_MUX_I2S3 = 33,
-	TEGRA_MUX_I2S4 = 34,
-	TEGRA_MUX_IRDA = 35,
-	TEGRA_MUX_KBC = 36,
-	TEGRA_MUX_OWR = 37,
-	TEGRA_MUX_PE = 38,
-	TEGRA_MUX_PE0 = 39,
-	TEGRA_MUX_PE1 = 40,
-	TEGRA_MUX_PMI = 41,
-	TEGRA_MUX_PWM0 = 42,
-	TEGRA_MUX_PWM1 = 43,
-	TEGRA_MUX_PWM2 = 44,
-	TEGRA_MUX_PWM3 = 45,
-	TEGRA_MUX_PWRON = 46,
-	TEGRA_MUX_RESET_OUT_N = 47,
-	TEGRA_MUX_RSVD1 = 48,
-	TEGRA_MUX_RSVD2 = 49,
-	TEGRA_MUX_RSVD3 = 50,
-	TEGRA_MUX_RSVD4 = 51,
-	TEGRA_MUX_RTCK = 52,
-	TEGRA_MUX_SATA = 53,
-	TEGRA_MUX_SDMMC1 = 54,
-	TEGRA_MUX_SDMMC2 = 55,
-	TEGRA_MUX_SDMMC3 = 56,
-	TEGRA_MUX_SDMMC4 = 57,
-	TEGRA_MUX_SOC = 58,
-	TEGRA_MUX_SPDIF = 59,
-	TEGRA_MUX_SPI1 = 60,
-	TEGRA_MUX_SPI2 = 61,
-	TEGRA_MUX_SPI3 = 62,
-	TEGRA_MUX_SPI4 = 63,
-	TEGRA_MUX_SPI5 = 64,
-	TEGRA_MUX_SPI6 = 65,
-	TEGRA_MUX_SYS = 66,
-	TEGRA_MUX_TMDS = 67,
-	TEGRA_MUX_TRACE = 68,
-	TEGRA_MUX_UARTA = 69,
-	TEGRA_MUX_UARTB = 70,
-	TEGRA_MUX_UARTC = 71,
-	TEGRA_MUX_UARTD = 72,
-	TEGRA_MUX_ULPI = 73,
-	TEGRA_MUX_USB = 74,
-	TEGRA_MUX_VGP1 = 75,
-	TEGRA_MUX_VGP2 = 76,
-	TEGRA_MUX_VGP3 = 77,
-	TEGRA_MUX_VGP4 = 78,
-	TEGRA_MUX_VGP5 = 79,
-	TEGRA_MUX_VGP6 = 80,
-	TEGRA_MUX_VI = 81,
-	TEGRA_MUX_VI_ALT1 = 82,
-	TEGRA_MUX_VI_ALT3 = 83,
-	TEGRA_MUX_VIMCLK2 = 84,
-	TEGRA_MUX_VIMCLK2_ALT = 85,
-};
-
-enum tegra_mux___2 {
-	TEGRA_MUX_AUD = 0,
-	TEGRA_MUX_BCL = 1,
-	TEGRA_MUX_BLINK___2 = 2,
-	TEGRA_MUX_CCLA___2 = 3,
-	TEGRA_MUX_CEC___2 = 4,
-	TEGRA_MUX_CLDVFS___2 = 5,
-	TEGRA_MUX_CLK___2 = 6,
-	TEGRA_MUX_CORE = 7,
-	TEGRA_MUX_CPU___2 = 8,
-	TEGRA_MUX_DISPLAYA___2 = 9,
-	TEGRA_MUX_DISPLAYB___2 = 10,
-	TEGRA_MUX_DMIC1 = 11,
-	TEGRA_MUX_DMIC2 = 12,
-	TEGRA_MUX_DMIC3 = 13,
-	TEGRA_MUX_DP___2 = 14,
-	TEGRA_MUX_DTV___2 = 15,
-	TEGRA_MUX_EXTPERIPH3___2 = 16,
-	TEGRA_MUX_I2C1___2 = 17,
-	TEGRA_MUX_I2C2___2 = 18,
-	TEGRA_MUX_I2C3___2 = 19,
-	TEGRA_MUX_I2CPMU = 20,
-	TEGRA_MUX_I2CVI = 21,
-	TEGRA_MUX_I2S1___2 = 22,
-	TEGRA_MUX_I2S2___2 = 23,
-	TEGRA_MUX_I2S3___2 = 24,
-	TEGRA_MUX_I2S4A = 25,
-	TEGRA_MUX_I2S4B = 26,
-	TEGRA_MUX_I2S5A = 27,
-	TEGRA_MUX_I2S5B = 28,
-	TEGRA_MUX_IQC0 = 29,
-	TEGRA_MUX_IQC1 = 30,
-	TEGRA_MUX_JTAG = 31,
-	TEGRA_MUX_PE___2 = 32,
-	TEGRA_MUX_PE0___2 = 33,
-	TEGRA_MUX_PE1___2 = 34,
-	TEGRA_MUX_PMI___2 = 35,
-	TEGRA_MUX_PWM0___2 = 36,
-	TEGRA_MUX_PWM1___2 = 37,
-	TEGRA_MUX_PWM2___2 = 38,
-	TEGRA_MUX_PWM3___2 = 39,
-	TEGRA_MUX_QSPI = 40,
-	TEGRA_MUX_RSVD0 = 41,
-	TEGRA_MUX_RSVD1___2 = 42,
-	TEGRA_MUX_RSVD2___2 = 43,
-	TEGRA_MUX_RSVD3___2 = 44,
-	TEGRA_MUX_SATA___2 = 45,
-	TEGRA_MUX_SDMMC1___2 = 46,
-	TEGRA_MUX_SDMMC3___2 = 47,
-	TEGRA_MUX_SHUTDOWN = 48,
-	TEGRA_MUX_SOC___2 = 49,
-	TEGRA_MUX_SOR0 = 50,
-	TEGRA_MUX_SOR1 = 51,
-	TEGRA_MUX_SPDIF___2 = 52,
-	TEGRA_MUX_SPI1___2 = 53,
-	TEGRA_MUX_SPI2___2 = 54,
-	TEGRA_MUX_SPI3___2 = 55,
-	TEGRA_MUX_SPI4___2 = 56,
-	TEGRA_MUX_SYS___2 = 57,
-	TEGRA_MUX_TOUCH = 58,
-	TEGRA_MUX_UART = 59,
-	TEGRA_MUX_UARTA___2 = 60,
-	TEGRA_MUX_UARTB___2 = 61,
-	TEGRA_MUX_UARTC___2 = 62,
-	TEGRA_MUX_UARTD___2 = 63,
-	TEGRA_MUX_USB___2 = 64,
-	TEGRA_MUX_VGP1___2 = 65,
-	TEGRA_MUX_VGP2___2 = 66,
-	TEGRA_MUX_VGP3___2 = 67,
-	TEGRA_MUX_VGP4___2 = 68,
-	TEGRA_MUX_VGP5___2 = 69,
-	TEGRA_MUX_VGP6___2 = 70,
-	TEGRA_MUX_VIMCLK = 71,
-	TEGRA_MUX_VIMCLK2___2 = 72,
-};
-
-struct tegra_xusb_padctl_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int num_groups;
-};
-
-struct tegra_xusb_padctl_lane;
-
-struct tegra_xusb_padctl_soc {
-	const struct pinctrl_pin_desc *pins;
-	unsigned int num_pins;
-	const struct tegra_xusb_padctl_function *functions;
-	unsigned int num_functions;
-	const struct tegra_xusb_padctl_lane *lanes;
-	unsigned int num_lanes;
-};
-
-struct tegra_xusb_padctl_lane {
-	const char *name;
-	unsigned int offset;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int iddq;
-	const unsigned int *funcs;
-	unsigned int num_funcs;
-};
-
-struct tegra_xusb_padctl {
-	struct device *dev;
-	void *regs;
-	struct mutex lock;
-	struct reset_control *rst;
-	const struct tegra_xusb_padctl_soc *soc;
-	struct pinctrl_dev *pinctrl;
-	struct pinctrl_desc desc;
-	struct phy_provider *provider;
-	struct phy *phys[2];
-	unsigned int enable;
-};
-
-enum tegra_xusb_padctl_param {
-	TEGRA_XUSB_PADCTL_IDDQ = 0,
-};
-
-struct tegra_xusb_padctl_property {
-	const char *name;
-	enum tegra_xusb_padctl_param param;
-};
-
-enum tegra124_function {
-	TEGRA124_FUNC_SNPS = 0,
-	TEGRA124_FUNC_XUSB = 1,
-	TEGRA124_FUNC_UART = 2,
-	TEGRA124_FUNC_PCIE = 3,
-	TEGRA124_FUNC_USB3 = 4,
-	TEGRA124_FUNC_SATA = 5,
-	TEGRA124_FUNC_RSVD = 6,
-};
-
-struct bcm2835_pinctrl {
-	struct device *dev;
-	void *base;
-	int *wake_irq;
-	long unsigned int enabled_irq_map[2];
-	unsigned int irq_type[58];
-	struct pinctrl_dev *pctl_dev;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_desc pctl_desc;
-	struct pinctrl_gpio_range gpio_range;
-	raw_spinlock_t irq_lock[2];
-};
-
-enum bcm2835_fsel {
-	BCM2835_FSEL_COUNT = 8,
-	BCM2835_FSEL_MASK = 7,
-};
-
-struct bcm_plat_data {
-	const struct gpio_chip *gpio_chip;
-	const struct pinctrl_desc *pctl_desc;
-	const struct pinctrl_gpio_range *gpio_range;
-};
-
-struct mvebu_mpp_ctrl_data {
-	union {
-		void *base;
-		struct {
-			struct regmap *map;
-			u32 offset;
-		} regmap;
-	};
-};
-
-struct mvebu_mpp_ctrl {
-	const char *name;
-	u8 pid;
-	u8 npins;
-	unsigned int *pins;
-	int (*mpp_get)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int *);
-	int (*mpp_set)(struct mvebu_mpp_ctrl_data *, unsigned int, long unsigned int);
-	int (*mpp_gpio_req)(struct mvebu_mpp_ctrl_data *, unsigned int);
-	int (*mpp_gpio_dir)(struct mvebu_mpp_ctrl_data *, unsigned int, bool);
-};
-
-struct mvebu_mpp_ctrl_setting {
-	u8 val;
-	const char *name;
-	const char *subname;
-	u8 variant;
-	u8 flags;
-};
-
-struct mvebu_mpp_mode {
-	u8 pid;
-	struct mvebu_mpp_ctrl_setting *settings;
-};
-
-struct mvebu_pinctrl_soc_info {
-	u8 variant;
-	const struct mvebu_mpp_ctrl *controls;
-	struct mvebu_mpp_ctrl_data *control_data;
-	int ncontrols;
-	struct mvebu_mpp_mode *modes;
-	int nmodes;
-	struct pinctrl_gpio_range *gpioranges;
-	int ngpioranges;
-};
-
-struct mvebu_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int num_groups;
-};
-
-struct mvebu_pinctrl_group {
-	const char *name;
-	const struct mvebu_mpp_ctrl *ctrl;
-	struct mvebu_mpp_ctrl_data *data;
-	struct mvebu_mpp_ctrl_setting *settings;
-	unsigned int num_settings;
-	unsigned int gid;
-	unsigned int *pins;
-	unsigned int npins;
-};
-
-struct mvebu_pinctrl {
-	struct device *dev;
-	struct pinctrl_dev *pctldev;
-	struct pinctrl_desc desc;
-	struct mvebu_pinctrl_group *groups;
-	unsigned int num_groups;
-	struct mvebu_pinctrl_function *functions;
-	unsigned int num_functions;
-	u8 variant;
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
 };
 
 enum {
-	V_ARMADA_7K = 1,
-	V_ARMADA_8K_CPM = 2,
-	V_ARMADA_8K_CPS = 4,
-	V_CP115_STANDALONE = 8,
-	V_ARMADA_7K_8K_CPM = 3,
-	V_ARMADA_7K_8K_CPS = 5,
+	SX150X_123 = 0,
+	SX150X_456 = 1,
+	SX150X_789 = 2,
 };
 
-struct armada_37xx_pin_group {
-	const char *name;
-	unsigned int start_pin;
-	unsigned int npins;
-	u32 reg_mask;
-	u32 val[3];
-	unsigned int extra_pin;
-	unsigned int extra_npins;
-	const char *funcs[3];
-	unsigned int *pins;
+enum {
+	SX150X_789_REG_MISC_AUTOCLEAR_OFF = 1,
+	SX150X_MAX_REGISTER = 173,
+	SX150X_IRQ_TYPE_EDGE_RISING = 1,
+	SX150X_IRQ_TYPE_EDGE_FALLING = 2,
+	SX150X_789_RESET_KEY1 = 18,
+	SX150X_789_RESET_KEY2 = 52,
 };
 
-struct armada_37xx_pin_data {
-	u8 nr_pins;
-	char *name;
-	struct armada_37xx_pin_group *groups;
-	int ngroups;
+struct sx150x_123_pri {
+	u8 reg_pld_mode;
+	u8 reg_pld_table0;
+	u8 reg_pld_table1;
+	u8 reg_pld_table2;
+	u8 reg_pld_table3;
+	u8 reg_pld_table4;
+	u8 reg_advanced;
 };
 
-struct armada_37xx_pmx_func {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
+struct sx150x_456_pri {
+	u8 reg_pld_mode;
+	u8 reg_pld_table0;
+	u8 reg_pld_table1;
+	u8 reg_pld_table2;
+	u8 reg_pld_table3;
+	u8 reg_pld_table4;
+	u8 reg_advanced;
 };
 
-struct armada_37xx_pm_state {
-	u32 out_en_l;
-	u32 out_en_h;
-	u32 out_val_l;
-	u32 out_val_h;
-	u32 irq_en_l;
-	u32 irq_en_h;
-	u32 irq_pol_l;
-	u32 irq_pol_h;
-	u32 selection;
+struct sx150x_789_pri {
+	u8 reg_drain;
+	u8 reg_polarity;
+	u8 reg_clock;
+	u8 reg_misc;
+	u8 reg_reset;
+	u8 ngpios;
 };
 
-struct armada_37xx_pinctrl {
-	struct regmap *regmap;
-	void *base;
-	const struct armada_37xx_pin_data *data;
-	struct device *dev;
-	struct gpio_chip gpio_chip;
-	struct irq_chip irq_chip;
-	spinlock_t irq_lock;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	struct armada_37xx_pin_group *groups;
-	unsigned int ngroups;
-	struct armada_37xx_pmx_func *funcs;
-	unsigned int nfuncs;
-	struct armada_37xx_pm_state pm;
-};
-
-struct msm_function {
-	const char *name;
-	const char * const *groups;
-	unsigned int ngroups;
-};
-
-struct msm_pingroup {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int npins;
-	unsigned int *funcs;
-	unsigned int nfuncs;
-	u32 ctl_reg;
-	u32 io_reg;
-	u32 intr_cfg_reg;
-	u32 intr_status_reg;
-	u32 intr_target_reg;
-	unsigned int tile: 2;
-	unsigned int mux_bit: 5;
-	unsigned int pull_bit: 5;
-	unsigned int drv_bit: 5;
-	unsigned int od_bit: 5;
-	unsigned int oe_bit: 5;
-	unsigned int in_bit: 5;
-	unsigned int out_bit: 5;
-	unsigned int intr_enable_bit: 5;
-	unsigned int intr_status_bit: 5;
-	unsigned int intr_ack_high: 1;
-	unsigned int intr_target_bit: 5;
-	unsigned int intr_target_kpss_val: 5;
-	unsigned int intr_raw_status_bit: 5;
-	char: 1;
-	unsigned int intr_polarity_bit: 5;
-	unsigned int intr_detection_bit: 5;
-	unsigned int intr_detection_width: 5;
-};
-
-struct msm_gpio_wakeirq_map {
-	unsigned int gpio;
-	unsigned int wakeirq;
-};
-
-struct msm_pinctrl_soc_data {
+struct sx150x_device_data {
+	u8 model;
+	u8 reg_pullup;
+	u8 reg_pulldn;
+	u8 reg_dir;
+	u8 reg_data;
+	u8 reg_irq_mask;
+	u8 reg_irq_src;
+	u8 reg_sense;
+	u8 ngpios;
+	union {
+		struct sx150x_123_pri x123;
+		struct sx150x_456_pri x456;
+		struct sx150x_789_pri x789;
+	} pri;
 	const struct pinctrl_pin_desc *pins;
 	unsigned int npins;
-	const struct msm_function *functions;
-	unsigned int nfunctions;
-	const struct msm_pingroup *groups;
-	unsigned int ngroups;
-	unsigned int ngpios;
-	bool pull_no_keeper;
-	const char * const *tiles;
-	unsigned int ntiles;
-	const int *reserved_gpios;
-	const struct msm_gpio_wakeirq_map *wakeirq_map;
-	unsigned int nwakeirq_map;
-	bool wakeirq_dual_edge_errata;
-	unsigned int gpio_func;
 };
 
-struct msm_pinctrl {
+struct regmap;
+
+struct sx150x_pinctrl {
 	struct device *dev;
-	struct pinctrl_dev *pctrl;
-	struct gpio_chip chip;
-	struct pinctrl_desc desc;
-	struct notifier_block restart_nb;
+	struct i2c_client *client;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_desc pinctrl_desc;
+	struct gpio_chip gpio;
 	struct irq_chip irq_chip;
-	int irq;
-	bool intr_target_use_scm;
-	raw_spinlock_t lock;
-	long unsigned int dual_edge_irqs[5];
-	long unsigned int enabled_irqs[5];
-	long unsigned int skip_wake_irqs[5];
-	long unsigned int disabled_for_mux[5];
-	const struct msm_pinctrl_soc_data *soc;
-	void *regs[4];
-	u32 phys_base[4];
+	struct regmap *regmap;
+	struct {
+		u32 sense;
+		u32 masked;
+	} irq;
+	struct mutex lock;
+	const struct sx150x_device_data *data;
 };
 
-enum msm8916_functions {
-	MSM_MUX_adsp_ext = 0,
-	MSM_MUX_alsp_int = 1,
-	MSM_MUX_atest_bbrx0 = 2,
-	MSM_MUX_atest_bbrx1 = 3,
-	MSM_MUX_atest_char = 4,
-	MSM_MUX_atest_char0 = 5,
-	MSM_MUX_atest_char1 = 6,
-	MSM_MUX_atest_char2 = 7,
-	MSM_MUX_atest_char3 = 8,
-	MSM_MUX_atest_combodac = 9,
-	MSM_MUX_atest_gpsadc0 = 10,
-	MSM_MUX_atest_gpsadc1 = 11,
-	MSM_MUX_atest_tsens = 12,
-	MSM_MUX_atest_wlan0 = 13,
-	MSM_MUX_atest_wlan1 = 14,
-	MSM_MUX_backlight_en = 15,
-	MSM_MUX_bimc_dte0 = 16,
-	MSM_MUX_bimc_dte1 = 17,
-	MSM_MUX_blsp_i2c1 = 18,
-	MSM_MUX_blsp_i2c2 = 19,
-	MSM_MUX_blsp_i2c3 = 20,
-	MSM_MUX_blsp_i2c4 = 21,
-	MSM_MUX_blsp_i2c5 = 22,
-	MSM_MUX_blsp_i2c6 = 23,
-	MSM_MUX_blsp_spi1 = 24,
-	MSM_MUX_blsp_spi1_cs1 = 25,
-	MSM_MUX_blsp_spi1_cs2 = 26,
-	MSM_MUX_blsp_spi1_cs3 = 27,
-	MSM_MUX_blsp_spi2 = 28,
-	MSM_MUX_blsp_spi2_cs1 = 29,
-	MSM_MUX_blsp_spi2_cs2 = 30,
-	MSM_MUX_blsp_spi2_cs3 = 31,
-	MSM_MUX_blsp_spi3 = 32,
-	MSM_MUX_blsp_spi3_cs1 = 33,
-	MSM_MUX_blsp_spi3_cs2 = 34,
-	MSM_MUX_blsp_spi3_cs3 = 35,
-	MSM_MUX_blsp_spi4 = 36,
-	MSM_MUX_blsp_spi5 = 37,
-	MSM_MUX_blsp_spi6 = 38,
-	MSM_MUX_blsp_uart1 = 39,
-	MSM_MUX_blsp_uart2 = 40,
-	MSM_MUX_blsp_uim1 = 41,
-	MSM_MUX_blsp_uim2 = 42,
-	MSM_MUX_cam1_rst = 43,
-	MSM_MUX_cam1_standby = 44,
-	MSM_MUX_cam_mclk0 = 45,
-	MSM_MUX_cam_mclk1 = 46,
-	MSM_MUX_cci_async = 47,
-	MSM_MUX_cci_i2c = 48,
-	MSM_MUX_cci_timer0 = 49,
-	MSM_MUX_cci_timer1 = 50,
-	MSM_MUX_cci_timer2 = 51,
-	MSM_MUX_cdc_pdm0 = 52,
-	MSM_MUX_codec_mad = 53,
-	MSM_MUX_dbg_out = 54,
-	MSM_MUX_display_5v = 55,
-	MSM_MUX_dmic0_clk = 56,
-	MSM_MUX_dmic0_data = 57,
-	MSM_MUX_dsi_rst = 58,
-	MSM_MUX_ebi0_wrcdc = 59,
-	MSM_MUX_euro_us = 60,
-	MSM_MUX_ext_lpass = 61,
-	MSM_MUX_flash_strobe = 62,
-	MSM_MUX_gcc_gp1_clk_a = 63,
-	MSM_MUX_gcc_gp1_clk_b = 64,
-	MSM_MUX_gcc_gp2_clk_a = 65,
-	MSM_MUX_gcc_gp2_clk_b = 66,
-	MSM_MUX_gcc_gp3_clk_a = 67,
-	MSM_MUX_gcc_gp3_clk_b = 68,
-	MSM_MUX_gpio = 69,
-	MSM_MUX_gsm0_tx0 = 70,
-	MSM_MUX_gsm0_tx1 = 71,
-	MSM_MUX_gsm1_tx0 = 72,
-	MSM_MUX_gsm1_tx1 = 73,
-	MSM_MUX_gyro_accl = 74,
-	MSM_MUX_kpsns0 = 75,
-	MSM_MUX_kpsns1 = 76,
-	MSM_MUX_kpsns2 = 77,
-	MSM_MUX_ldo_en = 78,
-	MSM_MUX_ldo_update = 79,
-	MSM_MUX_mag_int = 80,
-	MSM_MUX_mdp_vsync = 81,
-	MSM_MUX_modem_tsync = 82,
-	MSM_MUX_m_voc = 83,
-	MSM_MUX_nav_pps = 84,
-	MSM_MUX_nav_tsync = 85,
-	MSM_MUX_pa_indicator = 86,
-	MSM_MUX_pbs0 = 87,
-	MSM_MUX_pbs1 = 88,
-	MSM_MUX_pbs2 = 89,
-	MSM_MUX_pri_mi2s = 90,
-	MSM_MUX_pri_mi2s_ws = 91,
-	MSM_MUX_prng_rosc = 92,
-	MSM_MUX_pwr_crypto_enabled_a = 93,
-	MSM_MUX_pwr_crypto_enabled_b = 94,
-	MSM_MUX_pwr_modem_enabled_a = 95,
-	MSM_MUX_pwr_modem_enabled_b = 96,
-	MSM_MUX_pwr_nav_enabled_a = 97,
-	MSM_MUX_pwr_nav_enabled_b = 98,
-	MSM_MUX_qdss_ctitrig_in_a0 = 99,
-	MSM_MUX_qdss_ctitrig_in_a1 = 100,
-	MSM_MUX_qdss_ctitrig_in_b0 = 101,
-	MSM_MUX_qdss_ctitrig_in_b1 = 102,
-	MSM_MUX_qdss_ctitrig_out_a0 = 103,
-	MSM_MUX_qdss_ctitrig_out_a1 = 104,
-	MSM_MUX_qdss_ctitrig_out_b0 = 105,
-	MSM_MUX_qdss_ctitrig_out_b1 = 106,
-	MSM_MUX_qdss_traceclk_a = 107,
-	MSM_MUX_qdss_traceclk_b = 108,
-	MSM_MUX_qdss_tracectl_a = 109,
-	MSM_MUX_qdss_tracectl_b = 110,
-	MSM_MUX_qdss_tracedata_a = 111,
-	MSM_MUX_qdss_tracedata_b = 112,
-	MSM_MUX_reset_n = 113,
-	MSM_MUX_sd_card = 114,
-	MSM_MUX_sd_write = 115,
-	MSM_MUX_sec_mi2s = 116,
-	MSM_MUX_smb_int = 117,
-	MSM_MUX_ssbi_wtr0 = 118,
-	MSM_MUX_ssbi_wtr1 = 119,
-	MSM_MUX_uim1 = 120,
-	MSM_MUX_uim2 = 121,
-	MSM_MUX_uim3 = 122,
-	MSM_MUX_uim_batt = 123,
-	MSM_MUX_wcss_bt = 124,
-	MSM_MUX_wcss_fm = 125,
-	MSM_MUX_wcss_wlan = 126,
-	MSM_MUX_webcam1_rst = 127,
-	MSM_MUX_NA = 128,
-};
-
-enum msm8994_functions {
-	MSM_MUX_audio_ref_clk = 0,
-	MSM_MUX_blsp_i2c1___2 = 1,
-	MSM_MUX_blsp_i2c2___2 = 2,
-	MSM_MUX_blsp_i2c3___2 = 3,
-	MSM_MUX_blsp_i2c4___2 = 4,
-	MSM_MUX_blsp_i2c5___2 = 5,
-	MSM_MUX_blsp_i2c6___2 = 6,
-	MSM_MUX_blsp_i2c7 = 7,
-	MSM_MUX_blsp_i2c8 = 8,
-	MSM_MUX_blsp_i2c9 = 9,
-	MSM_MUX_blsp_i2c10 = 10,
-	MSM_MUX_blsp_i2c11 = 11,
-	MSM_MUX_blsp_i2c12 = 12,
-	MSM_MUX_blsp_spi1___2 = 13,
-	MSM_MUX_blsp_spi1_cs1___2 = 14,
-	MSM_MUX_blsp_spi1_cs2___2 = 15,
-	MSM_MUX_blsp_spi1_cs3___2 = 16,
-	MSM_MUX_blsp_spi2___2 = 17,
-	MSM_MUX_blsp_spi2_cs1___2 = 18,
-	MSM_MUX_blsp_spi2_cs2___2 = 19,
-	MSM_MUX_blsp_spi2_cs3___2 = 20,
-	MSM_MUX_blsp_spi3___2 = 21,
-	MSM_MUX_blsp_spi4___2 = 22,
-	MSM_MUX_blsp_spi5___2 = 23,
-	MSM_MUX_blsp_spi6___2 = 24,
-	MSM_MUX_blsp_spi7 = 25,
-	MSM_MUX_blsp_spi8 = 26,
-	MSM_MUX_blsp_spi9 = 27,
-	MSM_MUX_blsp_spi10 = 28,
-	MSM_MUX_blsp_spi10_cs1 = 29,
-	MSM_MUX_blsp_spi10_cs2 = 30,
-	MSM_MUX_blsp_spi10_cs3 = 31,
-	MSM_MUX_blsp_spi11 = 32,
-	MSM_MUX_blsp_spi12 = 33,
-	MSM_MUX_blsp_uart1___2 = 34,
-	MSM_MUX_blsp_uart2___2 = 35,
-	MSM_MUX_blsp_uart3 = 36,
-	MSM_MUX_blsp_uart4 = 37,
-	MSM_MUX_blsp_uart5 = 38,
-	MSM_MUX_blsp_uart6 = 39,
-	MSM_MUX_blsp_uart7 = 40,
-	MSM_MUX_blsp_uart8 = 41,
-	MSM_MUX_blsp_uart9 = 42,
-	MSM_MUX_blsp_uart10 = 43,
-	MSM_MUX_blsp_uart11 = 44,
-	MSM_MUX_blsp_uart12 = 45,
-	MSM_MUX_blsp_uim1___2 = 46,
-	MSM_MUX_blsp_uim2___2 = 47,
-	MSM_MUX_blsp_uim3 = 48,
-	MSM_MUX_blsp_uim4 = 49,
-	MSM_MUX_blsp_uim5 = 50,
-	MSM_MUX_blsp_uim6 = 51,
-	MSM_MUX_blsp_uim7 = 52,
-	MSM_MUX_blsp_uim8 = 53,
-	MSM_MUX_blsp_uim9 = 54,
-	MSM_MUX_blsp_uim10 = 55,
-	MSM_MUX_blsp_uim11 = 56,
-	MSM_MUX_blsp_uim12 = 57,
-	MSM_MUX_blsp11_i2c_scl_b = 58,
-	MSM_MUX_blsp11_i2c_sda_b = 59,
-	MSM_MUX_blsp11_uart_rx_b = 60,
-	MSM_MUX_blsp11_uart_tx_b = 61,
-	MSM_MUX_cam_mclk0___2 = 62,
-	MSM_MUX_cam_mclk1___2 = 63,
-	MSM_MUX_cam_mclk2 = 64,
-	MSM_MUX_cam_mclk3 = 65,
-	MSM_MUX_cci_async_in0 = 66,
-	MSM_MUX_cci_async_in1 = 67,
-	MSM_MUX_cci_async_in2 = 68,
-	MSM_MUX_cci_i2c0 = 69,
-	MSM_MUX_cci_i2c1 = 70,
-	MSM_MUX_cci_timer0___2 = 71,
-	MSM_MUX_cci_timer1___2 = 72,
-	MSM_MUX_cci_timer2___2 = 73,
-	MSM_MUX_cci_timer3 = 74,
-	MSM_MUX_cci_timer4 = 75,
-	MSM_MUX_gcc_gp1_clk_a___2 = 76,
-	MSM_MUX_gcc_gp1_clk_b___2 = 77,
-	MSM_MUX_gcc_gp2_clk_a___2 = 78,
-	MSM_MUX_gcc_gp2_clk_b___2 = 79,
-	MSM_MUX_gcc_gp3_clk_a___2 = 80,
-	MSM_MUX_gcc_gp3_clk_b___2 = 81,
-	MSM_MUX_gp_mn = 82,
-	MSM_MUX_gp_pdm0 = 83,
-	MSM_MUX_gp_pdm1 = 84,
-	MSM_MUX_gp_pdm2 = 85,
-	MSM_MUX_gp0_clk = 86,
-	MSM_MUX_gp1_clk = 87,
-	MSM_MUX_gps_tx = 88,
-	MSM_MUX_gsm_tx = 89,
-	MSM_MUX_hdmi_cec = 90,
-	MSM_MUX_hdmi_ddc = 91,
-	MSM_MUX_hdmi_hpd = 92,
-	MSM_MUX_hdmi_rcv = 93,
-	MSM_MUX_mdp_vsync___2 = 94,
-	MSM_MUX_mss_lte = 95,
-	MSM_MUX_nav_pps___2 = 96,
-	MSM_MUX_nav_tsync___2 = 97,
-	MSM_MUX_qdss_cti_trig_in_a = 98,
-	MSM_MUX_qdss_cti_trig_in_b = 99,
-	MSM_MUX_qdss_cti_trig_in_c = 100,
-	MSM_MUX_qdss_cti_trig_in_d = 101,
-	MSM_MUX_qdss_cti_trig_out_a = 102,
-	MSM_MUX_qdss_cti_trig_out_b = 103,
-	MSM_MUX_qdss_cti_trig_out_c = 104,
-	MSM_MUX_qdss_cti_trig_out_d = 105,
-	MSM_MUX_qdss_traceclk_a___2 = 106,
-	MSM_MUX_qdss_traceclk_b___2 = 107,
-	MSM_MUX_qdss_tracectl_a___2 = 108,
-	MSM_MUX_qdss_tracectl_b___2 = 109,
-	MSM_MUX_qdss_tracedata_a___2 = 110,
-	MSM_MUX_qdss_tracedata_b___2 = 111,
-	MSM_MUX_qua_mi2s = 112,
-	MSM_MUX_pci_e0 = 113,
-	MSM_MUX_pci_e1 = 114,
-	MSM_MUX_pri_mi2s___2 = 115,
-	MSM_MUX_sdc4 = 116,
-	MSM_MUX_sec_mi2s___2 = 117,
-	MSM_MUX_slimbus = 118,
-	MSM_MUX_spkr_i2s = 119,
-	MSM_MUX_ter_mi2s = 120,
-	MSM_MUX_tsif1 = 121,
-	MSM_MUX_tsif2 = 122,
-	MSM_MUX_uim1___2 = 123,
-	MSM_MUX_uim2___2 = 124,
-	MSM_MUX_uim3___2 = 125,
-	MSM_MUX_uim4 = 126,
-	MSM_MUX_uim_batt_alarm = 127,
-	MSM_MUX_gpio___2 = 128,
-	MSM_MUX_NA___2 = 129,
-};
-
-enum msm8996_functions {
-	msm_mux_adsp_ext = 0,
-	msm_mux_atest_bbrx0 = 1,
-	msm_mux_atest_bbrx1 = 2,
-	msm_mux_atest_char = 3,
-	msm_mux_atest_char0 = 4,
-	msm_mux_atest_char1 = 5,
-	msm_mux_atest_char2 = 6,
-	msm_mux_atest_char3 = 7,
-	msm_mux_atest_gpsadc0 = 8,
-	msm_mux_atest_gpsadc1 = 9,
-	msm_mux_atest_tsens = 10,
-	msm_mux_atest_tsens2 = 11,
-	msm_mux_atest_usb1 = 12,
-	msm_mux_atest_usb10 = 13,
-	msm_mux_atest_usb11 = 14,
-	msm_mux_atest_usb12 = 15,
-	msm_mux_atest_usb13 = 16,
-	msm_mux_atest_usb2 = 17,
-	msm_mux_atest_usb20 = 18,
-	msm_mux_atest_usb21 = 19,
-	msm_mux_atest_usb22 = 20,
-	msm_mux_atest_usb23 = 21,
-	msm_mux_audio_ref = 22,
-	msm_mux_bimc_dte0 = 23,
-	msm_mux_bimc_dte1 = 24,
-	msm_mux_blsp10_spi = 25,
-	msm_mux_blsp11_i2c_scl_b = 26,
-	msm_mux_blsp11_i2c_sda_b = 27,
-	msm_mux_blsp11_uart_rx_b = 28,
-	msm_mux_blsp11_uart_tx_b = 29,
-	msm_mux_blsp1_spi = 30,
-	msm_mux_blsp2_spi = 31,
-	msm_mux_blsp_i2c1 = 32,
-	msm_mux_blsp_i2c10 = 33,
-	msm_mux_blsp_i2c11 = 34,
-	msm_mux_blsp_i2c12 = 35,
-	msm_mux_blsp_i2c2 = 36,
-	msm_mux_blsp_i2c3 = 37,
-	msm_mux_blsp_i2c4 = 38,
-	msm_mux_blsp_i2c5 = 39,
-	msm_mux_blsp_i2c6 = 40,
-	msm_mux_blsp_i2c7 = 41,
-	msm_mux_blsp_i2c8 = 42,
-	msm_mux_blsp_i2c9 = 43,
-	msm_mux_blsp_spi1 = 44,
-	msm_mux_blsp_spi10 = 45,
-	msm_mux_blsp_spi11 = 46,
-	msm_mux_blsp_spi12 = 47,
-	msm_mux_blsp_spi2 = 48,
-	msm_mux_blsp_spi3 = 49,
-	msm_mux_blsp_spi4 = 50,
-	msm_mux_blsp_spi5 = 51,
-	msm_mux_blsp_spi6 = 52,
-	msm_mux_blsp_spi7 = 53,
-	msm_mux_blsp_spi8 = 54,
-	msm_mux_blsp_spi9 = 55,
-	msm_mux_blsp_uart1 = 56,
-	msm_mux_blsp_uart10 = 57,
-	msm_mux_blsp_uart11 = 58,
-	msm_mux_blsp_uart12 = 59,
-	msm_mux_blsp_uart2 = 60,
-	msm_mux_blsp_uart3 = 61,
-	msm_mux_blsp_uart4 = 62,
-	msm_mux_blsp_uart5 = 63,
-	msm_mux_blsp_uart6 = 64,
-	msm_mux_blsp_uart7 = 65,
-	msm_mux_blsp_uart8 = 66,
-	msm_mux_blsp_uart9 = 67,
-	msm_mux_blsp_uim1 = 68,
-	msm_mux_blsp_uim10 = 69,
-	msm_mux_blsp_uim11 = 70,
-	msm_mux_blsp_uim12 = 71,
-	msm_mux_blsp_uim2 = 72,
-	msm_mux_blsp_uim3 = 73,
-	msm_mux_blsp_uim4 = 74,
-	msm_mux_blsp_uim5 = 75,
-	msm_mux_blsp_uim6 = 76,
-	msm_mux_blsp_uim7 = 77,
-	msm_mux_blsp_uim8 = 78,
-	msm_mux_blsp_uim9 = 79,
-	msm_mux_btfm_slimbus = 80,
-	msm_mux_cam_mclk = 81,
-	msm_mux_cci_async = 82,
-	msm_mux_cci_i2c = 83,
-	msm_mux_cci_timer0 = 84,
-	msm_mux_cci_timer1 = 85,
-	msm_mux_cci_timer2 = 86,
-	msm_mux_cci_timer3 = 87,
-	msm_mux_cci_timer4 = 88,
-	msm_mux_cri_trng = 89,
-	msm_mux_cri_trng0 = 90,
-	msm_mux_cri_trng1 = 91,
-	msm_mux_dac_calib0 = 92,
-	msm_mux_dac_calib1 = 93,
-	msm_mux_dac_calib10 = 94,
-	msm_mux_dac_calib11 = 95,
-	msm_mux_dac_calib12 = 96,
-	msm_mux_dac_calib13 = 97,
-	msm_mux_dac_calib14 = 98,
-	msm_mux_dac_calib15 = 99,
-	msm_mux_dac_calib16 = 100,
-	msm_mux_dac_calib17 = 101,
-	msm_mux_dac_calib18 = 102,
-	msm_mux_dac_calib19 = 103,
-	msm_mux_dac_calib2 = 104,
-	msm_mux_dac_calib20 = 105,
-	msm_mux_dac_calib21 = 106,
-	msm_mux_dac_calib22 = 107,
-	msm_mux_dac_calib23 = 108,
-	msm_mux_dac_calib24 = 109,
-	msm_mux_dac_calib25 = 110,
-	msm_mux_dac_calib26 = 111,
-	msm_mux_dac_calib3 = 112,
-	msm_mux_dac_calib4 = 113,
-	msm_mux_dac_calib5 = 114,
-	msm_mux_dac_calib6 = 115,
-	msm_mux_dac_calib7 = 116,
-	msm_mux_dac_calib8 = 117,
-	msm_mux_dac_calib9 = 118,
-	msm_mux_dac_gpio = 119,
-	msm_mux_dbg_out = 120,
-	msm_mux_ddr_bist = 121,
-	msm_mux_edp_hot = 122,
-	msm_mux_edp_lcd = 123,
-	msm_mux_gcc_gp1_clk_a = 124,
-	msm_mux_gcc_gp1_clk_b = 125,
-	msm_mux_gcc_gp2_clk_a = 126,
-	msm_mux_gcc_gp2_clk_b = 127,
-	msm_mux_gcc_gp3_clk_a = 128,
-	msm_mux_gcc_gp3_clk_b = 129,
-	msm_mux_gsm_tx = 130,
-	msm_mux_hdmi_cec = 131,
-	msm_mux_hdmi_ddc = 132,
-	msm_mux_hdmi_hot = 133,
-	msm_mux_hdmi_rcv = 134,
-	msm_mux_isense_dbg = 135,
-	msm_mux_ldo_en = 136,
-	msm_mux_ldo_update = 137,
-	msm_mux_lpass_slimbus = 138,
-	msm_mux_m_voc = 139,
-	msm_mux_mdp_vsync = 140,
-	msm_mux_mdp_vsync_p_b = 141,
-	msm_mux_mdp_vsync_s_b = 142,
-	msm_mux_modem_tsync = 143,
-	msm_mux_mss_lte = 144,
-	msm_mux_nav_dr = 145,
-	msm_mux_nav_pps = 146,
-	msm_mux_pa_indicator = 147,
-	msm_mux_pci_e0 = 148,
-	msm_mux_pci_e1 = 149,
-	msm_mux_pci_e2 = 150,
-	msm_mux_pll_bypassnl = 151,
-	msm_mux_pll_reset = 152,
-	msm_mux_pri_mi2s = 153,
-	msm_mux_prng_rosc = 154,
-	msm_mux_pwr_crypto = 155,
-	msm_mux_pwr_modem = 156,
-	msm_mux_pwr_nav = 157,
-	msm_mux_qdss_cti = 158,
-	msm_mux_qdss_cti_trig_in_a = 159,
-	msm_mux_qdss_cti_trig_in_b = 160,
-	msm_mux_qdss_cti_trig_out_a = 161,
-	msm_mux_qdss_cti_trig_out_b = 162,
-	msm_mux_qdss_stm0 = 163,
-	msm_mux_qdss_stm1 = 164,
-	msm_mux_qdss_stm10 = 165,
-	msm_mux_qdss_stm11 = 166,
-	msm_mux_qdss_stm12 = 167,
-	msm_mux_qdss_stm13 = 168,
-	msm_mux_qdss_stm14 = 169,
-	msm_mux_qdss_stm15 = 170,
-	msm_mux_qdss_stm16 = 171,
-	msm_mux_qdss_stm17 = 172,
-	msm_mux_qdss_stm18 = 173,
-	msm_mux_qdss_stm19 = 174,
-	msm_mux_qdss_stm2 = 175,
-	msm_mux_qdss_stm20 = 176,
-	msm_mux_qdss_stm21 = 177,
-	msm_mux_qdss_stm22 = 178,
-	msm_mux_qdss_stm23 = 179,
-	msm_mux_qdss_stm24 = 180,
-	msm_mux_qdss_stm25 = 181,
-	msm_mux_qdss_stm26 = 182,
-	msm_mux_qdss_stm27 = 183,
-	msm_mux_qdss_stm28 = 184,
-	msm_mux_qdss_stm29 = 185,
-	msm_mux_qdss_stm3 = 186,
-	msm_mux_qdss_stm30 = 187,
-	msm_mux_qdss_stm31 = 188,
-	msm_mux_qdss_stm4 = 189,
-	msm_mux_qdss_stm5 = 190,
-	msm_mux_qdss_stm6 = 191,
-	msm_mux_qdss_stm7 = 192,
-	msm_mux_qdss_stm8 = 193,
-	msm_mux_qdss_stm9 = 194,
-	msm_mux_qdss_traceclk_a = 195,
-	msm_mux_qdss_traceclk_b = 196,
-	msm_mux_qdss_tracectl_a = 197,
-	msm_mux_qdss_tracectl_b = 198,
-	msm_mux_qdss_tracedata_11 = 199,
-	msm_mux_qdss_tracedata_12 = 200,
-	msm_mux_qdss_tracedata_a = 201,
-	msm_mux_qdss_tracedata_b = 202,
-	msm_mux_qspi0 = 203,
-	msm_mux_qspi1 = 204,
-	msm_mux_qspi2 = 205,
-	msm_mux_qspi3 = 206,
-	msm_mux_qspi_clk = 207,
-	msm_mux_qspi_cs = 208,
-	msm_mux_qua_mi2s = 209,
-	msm_mux_sd_card = 210,
-	msm_mux_sd_write = 211,
-	msm_mux_sdc40 = 212,
-	msm_mux_sdc41 = 213,
-	msm_mux_sdc42 = 214,
-	msm_mux_sdc43 = 215,
-	msm_mux_sdc4_clk = 216,
-	msm_mux_sdc4_cmd = 217,
-	msm_mux_sec_mi2s = 218,
-	msm_mux_spkr_i2s = 219,
-	msm_mux_ssbi1 = 220,
-	msm_mux_ssbi2 = 221,
-	msm_mux_ssc_irq = 222,
-	msm_mux_ter_mi2s = 223,
-	msm_mux_tsense_pwm1 = 224,
-	msm_mux_tsense_pwm2 = 225,
-	msm_mux_tsif1_clk = 226,
-	msm_mux_tsif1_data = 227,
-	msm_mux_tsif1_en = 228,
-	msm_mux_tsif1_error = 229,
-	msm_mux_tsif1_sync = 230,
-	msm_mux_tsif2_clk = 231,
-	msm_mux_tsif2_data = 232,
-	msm_mux_tsif2_en = 233,
-	msm_mux_tsif2_error = 234,
-	msm_mux_tsif2_sync = 235,
-	msm_mux_uim1 = 236,
-	msm_mux_uim2 = 237,
-	msm_mux_uim3 = 238,
-	msm_mux_uim4 = 239,
-	msm_mux_uim_batt = 240,
-	msm_mux_vfr_1 = 241,
-	msm_mux_gpio = 242,
-	msm_mux_NA = 243,
-};
-
-enum pincfg_type {
-	PINCFG_TYPE_FUNC = 0,
-	PINCFG_TYPE_DAT = 1,
-	PINCFG_TYPE_PUD = 2,
-	PINCFG_TYPE_DRV = 3,
-	PINCFG_TYPE_CON_PDN = 4,
-	PINCFG_TYPE_PUD_PDN = 5,
-	PINCFG_TYPE_NUM = 6,
-};
-
-enum eint_type {
-	EINT_TYPE_NONE = 0,
-	EINT_TYPE_GPIO = 1,
-	EINT_TYPE_WKUP = 2,
-	EINT_TYPE_WKUP_MUX = 3,
-};
-
-struct samsung_pin_bank_type {
-	u8 fld_width[6];
-	u8 reg_offset[6];
-};
-
-struct samsung_pin_bank_data {
-	const struct samsung_pin_bank_type *type;
-	u32 pctl_offset;
-	u8 pctl_res_idx;
-	u8 nr_pins;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-};
-
-struct samsung_pinctrl_drv_data;
-
-struct exynos_irq_chip;
-
-struct samsung_pin_bank {
-	const struct samsung_pin_bank_type *type;
-	void *pctl_base;
-	u32 pctl_offset;
-	u8 nr_pins;
-	void *eint_base;
-	u8 eint_func;
-	enum eint_type eint_type;
-	u32 eint_mask;
-	u32 eint_offset;
-	const char *name;
-	u32 pin_base;
-	void *soc_priv;
-	struct device_node *of_node;
-	struct samsung_pinctrl_drv_data *drvdata;
-	struct irq_domain *irq_domain;
-	struct gpio_chip gpio_chip;
-	struct pinctrl_gpio_range grange;
-	struct exynos_irq_chip *irq_chip;
-	spinlock_t slock;
-	u32 pm_save[7];
-};
-
-struct samsung_pin_group;
-
-struct samsung_pmx_func;
-
-struct samsung_retention_ctrl;
-
-struct samsung_pinctrl_drv_data {
-	struct list_head node;
-	void *virt_base;
-	struct device *dev;
-	int irq;
-	struct pinctrl_desc pctl;
-	struct pinctrl_dev *pctl_dev;
-	const struct samsung_pin_group *pin_groups;
-	unsigned int nr_groups;
-	const struct samsung_pmx_func *pmx_functions;
-	unsigned int nr_functions;
-	struct samsung_pin_bank *pin_banks;
-	unsigned int nr_banks;
-	unsigned int pin_base;
-	unsigned int nr_pins;
-	struct samsung_retention_ctrl *retention_ctrl;
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_ctrl {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	void *priv;
-	void (*enable)(struct samsung_pinctrl_drv_data *);
-	void (*disable)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_retention_data {
-	const u32 *regs;
-	int nr_regs;
-	u32 value;
-	atomic_t *refcnt;
-	struct samsung_retention_ctrl * (*init)(struct samsung_pinctrl_drv_data *, const struct samsung_retention_data *);
-};
-
-struct samsung_pin_ctrl {
-	const struct samsung_pin_bank_data *pin_banks;
-	unsigned int nr_banks;
-	unsigned int nr_ext_resources;
-	const struct samsung_retention_data *retention_data;
-	int (*eint_gpio_init)(struct samsung_pinctrl_drv_data *);
-	int (*eint_wkup_init)(struct samsung_pinctrl_drv_data *);
-	void (*suspend)(struct samsung_pinctrl_drv_data *);
-	void (*resume)(struct samsung_pinctrl_drv_data *);
-};
-
-struct samsung_pin_group {
+struct intel_pingroup {
 	const char *name;
 	const unsigned int *pins;
-	u8 num_pins;
-	u8 func;
+	size_t npins;
+	short unsigned int mode;
+	const unsigned int *modes;
 };
 
-struct samsung_pmx_func {
+struct intel_function {
 	const char *name;
-	const char **groups;
-	u8 num_groups;
+	const char * const *groups;
+	size_t ngroups;
+};
+
+struct intel_padgroup {
+	unsigned int reg_num;
+	unsigned int base;
+	unsigned int size;
+	int gpio_base;
+	unsigned int padown_num;
+};
+
+struct intel_community {
+	unsigned int barno;
+	unsigned int padown_offset;
+	unsigned int padcfglock_offset;
+	unsigned int hostown_offset;
+	unsigned int is_offset;
+	unsigned int ie_offset;
+	unsigned int features;
+	unsigned int pin_base;
+	size_t npins;
+	unsigned int gpp_size;
+	unsigned int gpp_num_padown_regs;
+	const struct intel_padgroup *gpps;
+	size_t ngpps;
+	const unsigned int *pad_map;
+	short unsigned int nirqs;
+	short unsigned int acpi_space_id;
+	void *regs;
+	void *pad_regs;
+};
+
+struct intel_pinctrl_soc_data {
+	const char *uid;
+	const struct pinctrl_pin_desc *pins;
+	size_t npins;
+	const struct intel_pingroup *groups;
+	size_t ngroups;
+	const struct intel_function *functions;
+	size_t nfunctions;
+	const struct intel_community *communities;
+	size_t ncommunities;
+};
+
+struct intel_community_context;
+
+struct intel_pad_context;
+
+struct intel_pinctrl_context {
+	struct intel_pad_context *pads;
+	struct intel_community_context *communities;
+};
+
+struct intel_pad_context {
+	u32 conf0;
 	u32 val;
 };
 
-struct samsung_pinctrl_of_match_data {
-	const struct samsung_pin_ctrl *ctrl;
-	unsigned int num_ctrl;
-};
-
-struct pin_config {
-	const char *property;
-	enum pincfg_type param;
-};
-
-struct exynos_irq_chip {
-	struct irq_chip chip;
-	u32 eint_con;
-	u32 eint_mask;
-	u32 eint_pend;
-	u32 *eint_wake_mask_value;
-	u32 eint_wake_mask_reg;
-	void (*set_eint_wakeup_mask)(struct samsung_pinctrl_drv_data *, struct exynos_irq_chip *);
-};
-
-struct exynos_weint_data {
-	unsigned int irq;
-	struct samsung_pin_bank *bank;
-};
-
-struct exynos_muxed_weint_data {
-	unsigned int nr_banks;
-	struct samsung_pin_bank *banks[0];
-};
-
-struct exynos_eint_gpio_save {
-	u32 eint_con;
-	u32 eint_fltcon0;
-	u32 eint_fltcon1;
-	u32 eint_mask;
-};
-
-enum sunxi_desc_bias_voltage {
-	BIAS_VOLTAGE_NONE = 0,
-	BIAS_VOLTAGE_GRP_CONFIG = 1,
-	BIAS_VOLTAGE_PIO_POW_MODE_SEL = 2,
-};
-
-struct sunxi_desc_function {
-	long unsigned int variant;
-	const char *name;
-	u8 muxval;
-	u8 irqbank;
-	u8 irqnum;
-};
-
-struct sunxi_desc_pin {
-	struct pinctrl_pin_desc pin;
-	long unsigned int variant;
-	struct sunxi_desc_function *functions;
-};
-
-struct sunxi_pinctrl_desc {
-	const struct sunxi_desc_pin *pins;
-	int npins;
-	unsigned int pin_base;
-	unsigned int irq_banks;
-	const unsigned int *irq_bank_map;
-	bool irq_read_needs_mux;
-	bool disable_strict_mode;
-	enum sunxi_desc_bias_voltage io_bias_cfg_variant;
-};
-
-struct sunxi_pinctrl_function {
-	const char *name;
-	const char **groups;
-	unsigned int ngroups;
-};
-
-struct sunxi_pinctrl_group {
-	const char *name;
-	unsigned int pin;
-};
-
-struct sunxi_pinctrl_regulator {
-	struct regulator *regulator;
-	refcount_t refcount;
-};
-
-struct sunxi_pinctrl {
-	void *membase;
-	struct gpio_chip *chip;
-	const struct sunxi_pinctrl_desc *desc;
+struct intel_pinctrl {
 	struct device *dev;
-	struct sunxi_pinctrl_regulator regulators[9];
-	struct irq_domain *domain;
-	struct sunxi_pinctrl_function *functions;
-	unsigned int nfunctions;
-	struct sunxi_pinctrl_group *groups;
-	unsigned int ngroups;
-	int *irq;
-	unsigned int *irq_array;
 	raw_spinlock_t lock;
-	struct pinctrl_dev *pctl_dev;
-	long unsigned int variant;
-};
-
-struct mtk_eint_regs {
-	unsigned int stat;
-	unsigned int ack;
-	unsigned int mask;
-	unsigned int mask_set;
-	unsigned int mask_clr;
-	unsigned int sens;
-	unsigned int sens_set;
-	unsigned int sens_clr;
-	unsigned int soft;
-	unsigned int soft_set;
-	unsigned int soft_clr;
-	unsigned int pol;
-	unsigned int pol_set;
-	unsigned int pol_clr;
-	unsigned int dom_en;
-	unsigned int dbnc_ctrl;
-	unsigned int dbnc_set;
-	unsigned int dbnc_clr;
-};
-
-struct mtk_eint_hw {
-	u8 port_mask;
-	u8 ports;
-	unsigned int ap_num;
-	unsigned int db_cnt;
-};
-
-struct mtk_eint_xt {
-	int (*get_gpio_n)(void *, long unsigned int, unsigned int *, struct gpio_chip **);
-	int (*get_gpio_state)(void *, long unsigned int);
-	int (*set_gpio_as_eint)(void *, long unsigned int);
-};
-
-struct mtk_eint {
-	struct device *dev;
-	void *base;
-	struct irq_domain *domain;
-	int irq;
-	int *dual_edge;
-	u32 *wake_mask;
-	u32 *cur_mask;
-	const struct mtk_eint_hw *hw;
-	const struct mtk_eint_regs *regs;
-	void *pctl;
-	const struct mtk_eint_xt *gpio_xlate;
-};
-
-struct mtk_desc_function {
-	const char *name;
-	unsigned char muxval;
-};
-
-struct mtk_desc_eint {
-	unsigned char eintmux;
-	unsigned char eintnum;
-};
-
-struct mtk_desc_pin {
-	struct pinctrl_pin_desc pin;
-	const struct mtk_desc_eint eint;
-	const struct mtk_desc_function *functions;
-};
-
-struct mtk_pinctrl_group {
-	const char *name;
-	long unsigned int config;
-	unsigned int pin;
-};
-
-struct mtk_drv_group_desc {
-	unsigned char min_drv;
-	unsigned char max_drv;
-	unsigned char low_bit;
-	unsigned char high_bit;
-	unsigned char step;
-};
-
-struct mtk_pin_drv_grp {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char bit;
-	unsigned char grp;
-};
-
-struct mtk_pin_spec_pupd_set_samereg {
-	short unsigned int pin;
-	short unsigned int offset;
-	unsigned char pupd_bit;
-	unsigned char r1_bit;
-	unsigned char r0_bit;
-};
-
-struct mtk_pin_ies_smt_set {
-	short unsigned int start;
-	short unsigned int end;
-	short unsigned int offset;
-	unsigned char bit;
-};
-
-struct mtk_pinctrl_devdata {
-	const struct mtk_desc_pin *pins;
-	unsigned int npins;
-	const struct mtk_drv_group_desc *grp_desc;
-	unsigned int n_grp_cls;
-	const struct mtk_pin_drv_grp *pin_drv_grp;
-	unsigned int n_pin_drv_grps;
-	int (*spec_pull_set)(struct regmap *, unsigned int, unsigned char, bool, unsigned int);
-	int (*spec_ies_smt_set)(struct regmap *, unsigned int, unsigned char, int, enum pin_config_param);
-	void (*spec_pinmux_set)(struct regmap *, unsigned int, unsigned int);
-	void (*spec_dir_set)(unsigned int *, unsigned int);
-	unsigned int dir_offset;
-	unsigned int ies_offset;
-	unsigned int smt_offset;
-	unsigned int pullen_offset;
-	unsigned int pullsel_offset;
-	unsigned int drv_offset;
-	unsigned int dout_offset;
-	unsigned int din_offset;
-	unsigned int pinmux_offset;
-	short unsigned int type1_start;
-	short unsigned int type1_end;
-	unsigned char port_shf;
-	unsigned char port_mask;
-	unsigned char port_align;
-	struct mtk_eint_hw eint_hw;
-	struct mtk_eint_regs *eint_regs;
-};
-
-struct mtk_pinctrl {
-	struct regmap *regmap1;
-	struct regmap *regmap2;
-	struct pinctrl_desc pctl_desc;
-	struct device *dev;
-	struct gpio_chip *chip;
-	struct mtk_pinctrl_group *groups;
-	unsigned int ngroups;
-	const char **grp_names;
-	struct pinctrl_dev *pctl_dev;
-	const struct mtk_pinctrl_devdata *devdata;
-	struct mtk_eint *eint;
-};
-
-enum {
-	PINCTRL_PIN_REG_MODE = 0,
-	PINCTRL_PIN_REG_DIR = 1,
-	PINCTRL_PIN_REG_DI = 2,
-	PINCTRL_PIN_REG_DO = 3,
-	PINCTRL_PIN_REG_SR = 4,
-	PINCTRL_PIN_REG_SMT = 5,
-	PINCTRL_PIN_REG_PD = 6,
-	PINCTRL_PIN_REG_PU = 7,
-	PINCTRL_PIN_REG_E4 = 8,
-	PINCTRL_PIN_REG_E8 = 9,
-	PINCTRL_PIN_REG_TDSEL = 10,
-	PINCTRL_PIN_REG_RDSEL = 11,
-	PINCTRL_PIN_REG_DRV = 12,
-	PINCTRL_PIN_REG_PUPD = 13,
-	PINCTRL_PIN_REG_R0 = 14,
-	PINCTRL_PIN_REG_R1 = 15,
-	PINCTRL_PIN_REG_IES = 16,
-	PINCTRL_PIN_REG_PULLEN = 17,
-	PINCTRL_PIN_REG_PULLSEL = 18,
-	PINCTRL_PIN_REG_DRV_EN = 19,
-	PINCTRL_PIN_REG_DRV_E0 = 20,
-	PINCTRL_PIN_REG_DRV_E1 = 21,
-	PINCTRL_PIN_REG_MAX = 22,
-};
-
-enum {
-	DRV_FIXED = 0,
-	DRV_GRP0 = 1,
-	DRV_GRP1 = 2,
-	DRV_GRP2 = 3,
-	DRV_GRP3 = 4,
-	DRV_GRP4 = 5,
-	DRV_GRP_MAX = 6,
-};
-
-struct mtk_pin_field {
-	u8 index;
-	u32 offset;
-	u32 mask;
-	u8 bitpos;
-	u8 next;
-};
-
-struct mtk_pin_field_calc {
-	u16 s_pin;
-	u16 e_pin;
-	u8 i_base;
-	u32 s_addr;
-	u8 x_addrs;
-	u8 s_bit;
-	u8 x_bits;
-	u8 sz_reg;
-	u8 fixed;
-};
-
-struct mtk_pin_reg_calc {
-	const struct mtk_pin_field_calc *range;
-	unsigned int nranges;
-};
-
-struct mtk_func_desc {
-	const char *name;
-	u8 muxval;
-};
-
-struct mtk_eint_desc {
-	u16 eint_m;
-	u16 eint_n;
-};
-
-struct mtk_pin_desc {
-	unsigned int number;
-	const char *name;
-	struct mtk_eint_desc eint;
-	u8 drv_n;
-	struct mtk_func_desc *funcs;
-};
-
-struct mtk_pinctrl___2;
-
-struct mtk_pin_soc {
-	const struct mtk_pin_reg_calc *reg_cal;
-	const struct mtk_pin_desc *pins;
-	unsigned int npins;
-	const struct group_desc *grps;
-	unsigned int ngrps;
-	const struct function_desc *funcs;
-	unsigned int nfuncs;
-	const struct mtk_eint_regs *eint_regs;
-	const struct mtk_eint_hw *eint_hw;
-	u8 gpio_m;
-	bool ies_present;
-	const char * const *base_names;
-	unsigned int nbase_names;
-	int (*bias_disable_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *);
-	int (*bias_disable_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*bias_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool);
-	int (*bias_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, int *);
-	int (*bias_set_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32, u32);
-	int (*bias_get_combo)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *, u32 *);
-	int (*drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, int *);
-	int (*adv_pull_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32);
-	int (*adv_pull_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, bool, u32 *);
-	int (*adv_drive_set)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32);
-	int (*adv_drive_get)(struct mtk_pinctrl___2 *, const struct mtk_pin_desc *, u32 *);
-	void *driver_data;
-};
-
-struct mtk_pinctrl___2 {
-	struct pinctrl_dev *pctrl;
-	void **base;
-	u8 nbase;
-	struct device *dev;
+	struct pinctrl_desc pctldesc;
+	struct pinctrl_dev *pctldev;
 	struct gpio_chip chip;
-	const struct mtk_pin_soc *soc;
-	struct mtk_eint *eint;
-	struct mtk_pinctrl_group *groups;
-	const char **grp_names;
-};
-
-struct mtk_drive_desc {
-	u8 min;
-	u8 max;
-	u8 step;
-	u8 scal;
-};
-
-struct mt6397_chip {
-	struct device *dev;
-	struct regmap *regmap;
-	struct notifier_block pm_nb;
+	const struct intel_pinctrl_soc_data *soc;
+	struct intel_community *communities;
+	size_t ncommunities;
+	struct intel_pinctrl_context context;
 	int irq;
-	struct irq_domain *irq_domain;
-	struct mutex irqlock;
-	u16 wake_mask[2];
-	u16 irq_masks_cur[2];
-	u16 irq_masks_cache[2];
-	u16 int_con[2];
-	u16 int_status[2];
-	u16 chip_id;
-	void *irq_data;
 };
 
-struct madera_pin_groups {
-	const char *name;
-	const unsigned int *pins;
-	unsigned int n_pins;
+struct intel_pad_context___2;
+
+struct intel_community_context___2;
+
+struct intel_pinctrl_context___2 {
+	struct intel_pad_context___2 *pads;
+	struct intel_community_context___2 *communities;
 };
 
-struct madera_pin_chip {
-	unsigned int n_pins;
-	const struct madera_pin_groups *pin_groups;
-	unsigned int n_pin_groups;
+struct intel_pad_context___2 {
+	u32 padctrl0;
+	u32 padctrl1;
 };
 
-struct madera_pin_private {
-	struct madera *madera;
-	const struct madera_pin_chip *chip;
+struct intel_community_context___2 {
+	unsigned int intr_lines[16];
+	u32 saved_intmask;
+};
+
+struct intel_pinctrl___2 {
 	struct device *dev;
-	struct pinctrl_dev *pctl;
+	raw_spinlock_t lock;
+	struct pinctrl_desc pctldesc;
+	struct pinctrl_dev *pctldev;
+	struct gpio_chip chip;
+	const struct intel_pinctrl_soc_data *soc;
+	struct intel_community *communities;
+	size_t ncommunities;
+	struct intel_pinctrl_context___2 context;
+	int irq;
+};
+
+enum {
+	INTEL_GPIO_BASE_ZERO = 4294967294,
+	INTEL_GPIO_BASE_NOMAP = 4294967295,
+	INTEL_GPIO_BASE_MATCH = 0,
+};
+
+struct intel_pad_context___3;
+
+struct intel_community_context___3;
+
+struct intel_pinctrl_context___3 {
+	struct intel_pad_context___3 *pads;
+	struct intel_community_context___3 *communities;
+};
+
+struct intel_pad_context___3 {
+	u32 padcfg0;
+	u32 padcfg1;
+	u32 padcfg2;
+};
+
+struct intel_community_context___3 {
+	u32 *intmask;
+	u32 *hostown;
+};
+
+struct intel_pinctrl___3 {
+	struct device *dev;
+	raw_spinlock_t lock;
+	struct pinctrl_desc pctldesc;
+	struct pinctrl_dev *pctldev;
+	struct gpio_chip chip;
+	const struct intel_pinctrl_soc_data *soc;
+	struct intel_community *communities;
+	size_t ncommunities;
+	struct intel_pinctrl_context___3 context;
+	int irq;
+};
+
+enum {
+	PAD_UNLOCKED = 0,
+	PAD_LOCKED = 1,
+	PAD_LOCKED_TX = 2,
+	PAD_LOCKED_FULL = 3,
 };
 
 struct gpio_pin_range {
@@ -62856,6 +79422,7 @@
 	int pin_config;
 	int polarity;
 	int triggering;
+	unsigned int debounce;
 	unsigned int quirks;
 };
 
@@ -62891,31 +79458,37 @@
 	const char *label;
 };
 
-struct of_reconfig_data {
-	struct device_node *dn;
-	struct property *prop;
-	struct property *old_prop;
+enum hte_edge {
+	HTE_EDGE_NO_SETUP = 1,
+	HTE_RISING_EDGE_TS = 2,
+	HTE_FALLING_EDGE_TS = 4,
 };
 
-enum of_reconfig_change {
-	OF_RECONFIG_NO_CHANGE = 0,
-	OF_RECONFIG_CHANGE_ADD = 1,
-	OF_RECONFIG_CHANGE_REMOVE = 2,
+enum hte_return {
+	HTE_CB_HANDLED = 0,
+	HTE_RUN_SECOND_CB = 1,
 };
 
-enum of_gpio_flags {
-	OF_GPIO_ACTIVE_LOW = 1,
-	OF_GPIO_SINGLE_ENDED = 2,
-	OF_GPIO_OPEN_DRAIN = 4,
-	OF_GPIO_TRANSITORY = 8,
-	OF_GPIO_PULL_UP = 16,
-	OF_GPIO_PULL_DOWN = 32,
+struct hte_ts_data {
+	u64 tsc;
+	u64 seq;
+	int raw_level;
 };
 
-struct of_mm_gpio_chip {
-	struct gpio_chip gc;
-	void (*save_regs)(struct of_mm_gpio_chip *);
-	void *regs;
+typedef enum hte_return (*hte_ts_cb_t)(struct hte_ts_data *, void *);
+
+typedef enum hte_return (*hte_ts_sec_cb_t)(void *);
+
+struct hte_line_attr {
+	u32 line_id;
+	void *line_data;
+	long unsigned int edge_flags;
+	const char *name;
+};
+
+struct hte_ts_desc {
+	struct hte_line_attr attr;
+	void *hte_data;
 };
 
 struct gpiochip_info {
@@ -62936,6 +79509,8 @@
 	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
 	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
 	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
 };
 
 struct gpio_v2_line_values {
@@ -63018,59 +79593,6 @@
 	__u32 padding[6];
 };
 
-struct gpioline_info {
-	__u32 line_offset;
-	__u32 flags;
-	char name[32];
-	char consumer[32];
-};
-
-struct gpioline_info_changed {
-	struct gpioline_info info;
-	__u64 timestamp;
-	__u32 event_type;
-	__u32 padding[5];
-};
-
-struct gpiohandle_request {
-	__u32 lineoffsets[64];
-	__u32 flags;
-	__u8 default_values[64];
-	char consumer_label[32];
-	__u32 lines;
-	int fd;
-};
-
-struct gpiohandle_config {
-	__u32 flags;
-	__u8 default_values[64];
-	__u32 padding[4];
-};
-
-struct gpiohandle_data {
-	__u8 values[64];
-};
-
-struct gpioevent_request {
-	__u32 lineoffset;
-	__u32 handleflags;
-	__u32 eventflags;
-	char consumer_label[32];
-	int fd;
-};
-
-struct gpioevent_data {
-	__u64 timestamp;
-	__u32 id;
-};
-
-struct linehandle_state {
-	struct gpio_device *gdev;
-	const char *label;
-	struct gpio_desc___2 *descs[64];
-	u32 num_descs;
-};
-
 struct linereq;
 
 struct line {
@@ -63084,6 +79606,10 @@
 	struct delayed_work work;
 	unsigned int sw_debounced;
 	unsigned int level;
+	struct hte_ts_desc hdesc;
+	int raw_level;
+	u32 total_discard_seq;
+	u32 last_seqno;
 };
 
 struct linereq {
@@ -63108,27 +79634,6 @@
 	struct line lines[0];
 };
 
-struct lineevent_state {
-	struct gpio_device *gdev;
-	const char *label;
-	struct gpio_desc___2 *desc;
-	u32 eflags;
-	int irq;
-	wait_queue_head_t wait;
-	struct {
-		union {
-			struct __kfifo kfifo;
-			struct gpioevent_data *type;
-			const struct gpioevent_data *const_type;
-			char (*rectype)[0];
-			struct gpioevent_data *ptr;
-			const struct gpioevent_data *ptr_const;
-		};
-		struct gpioevent_data buf[16];
-	} events;
-	u64 timestamp;
-};
-
 struct gpio_chardev_data {
 	struct gpio_device *gdev;
 	wait_queue_head_t wait;
@@ -63145,7 +79650,6 @@
 	} events;
 	struct notifier_block lineinfo_changed_nb;
 	long unsigned int *watched_lines;
-	atomic_t watch_abi_version;
 };
 
 struct class_attribute {
@@ -63163,49 +79667,6 @@
 	bool direction_can_change;
 };
 
-enum dmi_field {
-	DMI_NONE = 0,
-	DMI_BIOS_VENDOR = 1,
-	DMI_BIOS_VERSION = 2,
-	DMI_BIOS_DATE = 3,
-	DMI_BIOS_RELEASE = 4,
-	DMI_EC_FIRMWARE_RELEASE = 5,
-	DMI_SYS_VENDOR = 6,
-	DMI_PRODUCT_NAME = 7,
-	DMI_PRODUCT_VERSION = 8,
-	DMI_PRODUCT_SERIAL = 9,
-	DMI_PRODUCT_UUID = 10,
-	DMI_PRODUCT_SKU = 11,
-	DMI_PRODUCT_FAMILY = 12,
-	DMI_BOARD_VENDOR = 13,
-	DMI_BOARD_NAME = 14,
-	DMI_BOARD_VERSION = 15,
-	DMI_BOARD_SERIAL = 16,
-	DMI_BOARD_ASSET_TAG = 17,
-	DMI_CHASSIS_VENDOR = 18,
-	DMI_CHASSIS_TYPE = 19,
-	DMI_CHASSIS_VERSION = 20,
-	DMI_CHASSIS_SERIAL = 21,
-	DMI_CHASSIS_ASSET_TAG = 22,
-	DMI_STRING_MAX = 23,
-	DMI_OEM_STRING = 24,
-};
-
-struct dmi_strmatch {
-	unsigned char slot: 7;
-	unsigned char exact_match: 1;
-	char substr[79];
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-typedef u8 acpi_adr_space_type;
-
 struct acpi_connection_info {
 	u8 *connection;
 	u16 length;
@@ -63511,6 +79972,21 @@
 	u32 default_baud_rate;
 } __attribute__((packed));
 
+struct acpi_resource_csi2_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 local_port_instance;
+	u8 phy_type;
+} __attribute__((packed));
+
 struct acpi_resource_pin_function {
 	u8 revision_id;
 	u8 pin_config;
@@ -63592,6 +80068,7 @@
 	struct acpi_resource_i2c_serialbus i2c_serial_bus;
 	struct acpi_resource_spi_serialbus spi_serial_bus;
 	struct acpi_resource_uart_serialbus uart_serial_bus;
+	struct acpi_resource_csi2_serialbus csi2_serial_bus;
 	struct acpi_resource_common_serialbus common_serial_bus;
 	struct acpi_resource_pin_function pin_function;
 	struct acpi_resource_pin_config pin_config;
@@ -63642,18 +80119,761 @@
 struct acpi_gpio_lookup {
 	struct acpi_gpio_info info;
 	int index;
-	int pin_index;
+	u16 pin_index;
 	bool active_low;
 	struct gpio_desc___2 *desc;
 	int n;
 };
 
-struct bgpio_pdata {
-	const char *label;
-	int base;
+enum intel_cht_wc_models {
+	INTEL_CHT_WC_UNKNOWN = 0,
+	INTEL_CHT_WC_GPD_WIN_POCKET = 1,
+	INTEL_CHT_WC_XIAOMI_MIPAD2 = 2,
+	INTEL_CHT_WC_LENOVO_YOGABOOK1 = 3,
+};
+
+struct regmap_irq_chip_data;
+
+struct intel_scu_ipc_dev;
+
+struct intel_soc_pmic {
+	int irq;
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *irq_chip_data;
+	struct regmap_irq_chip_data *irq_chip_data_pwrbtn;
+	struct regmap_irq_chip_data *irq_chip_data_tmu;
+	struct regmap_irq_chip_data *irq_chip_data_bcu;
+	struct regmap_irq_chip_data *irq_chip_data_adc;
+	struct regmap_irq_chip_data *irq_chip_data_chgr;
+	struct regmap_irq_chip_data *irq_chip_data_crit;
+	struct device *dev;
+	struct intel_scu_ipc_dev *scu;
+	enum intel_cht_wc_models cht_wc_model;
+};
+
+enum ctrl_register {
+	CTRL_IN = 0,
+	CTRL_OUT = 1,
+};
+
+struct crystalcove_gpio {
+	struct mutex buslock;
+	struct gpio_chip chip;
+	struct regmap *regmap;
+	int update;
+	int intcnt_value;
+	bool set_irq_mask;
+};
+
+struct extcon_dev;
+
+struct regulator_dev;
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+};
+
+struct regulator_coupler;
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+};
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+enum palmas_usb_state {
+	PALMAS_USB_STATE_DISCONNECT = 0,
+	PALMAS_USB_STATE_VBUS = 1,
+	PALMAS_USB_STATE_ID = 2,
+};
+
+struct palmas_gpadc;
+
+struct palmas_pmic_driver_data;
+
+struct palmas_pmic;
+
+struct palmas_resource;
+
+struct palmas_usb;
+
+struct palmas {
+	struct device *dev;
+	struct i2c_client *i2c_clients[3];
+	struct regmap *regmap[3];
+	int id;
+	unsigned int features;
+	int irq;
+	u32 irq_mask;
+	struct mutex irq_lock;
+	struct regmap_irq_chip_data *irq_data;
+	struct palmas_pmic_driver_data *pmic_ddata;
+	struct palmas_pmic *pmic;
+	struct palmas_gpadc *gpadc;
+	struct palmas_resource *resource;
+	struct palmas_usb *usb;
+	u8 gpio_muxed;
+	u8 led_muxed;
+	u8 pwm_muxed;
+};
+
+struct of_regulator_match;
+
+struct palmas_regs_info;
+
+struct palmas_sleep_requestor_info;
+
+struct palmas_pmic_platform_data;
+
+struct palmas_pmic_driver_data {
+	int smps_start;
+	int smps_end;
+	int ldo_begin;
+	int ldo_end;
+	int max_reg;
+	bool has_regen3;
+	struct palmas_regs_info *palmas_regs_info;
+	struct of_regulator_match *palmas_matches;
+	struct palmas_sleep_requestor_info *sleep_req_info;
+	int (*smps_register)(struct palmas_pmic *, struct palmas_pmic_driver_data *, struct palmas_pmic_platform_data *, const char *, struct regulator_config);
+	int (*ldo_register)(struct palmas_pmic *, struct palmas_pmic_driver_data *, struct palmas_pmic_platform_data *, const char *, struct regulator_config);
+};
+
+struct palmas_pmic {
+	struct palmas *palmas;
+	struct device *dev;
+	struct regulator_desc desc[27];
+	struct mutex mutex;
+	int smps123;
+	int smps457;
+	int smps12;
+	int range[10];
+	unsigned int ramp_delay[10];
+	unsigned int current_reg_mode[10];
+};
+
+struct palmas_resource {
+	struct palmas *palmas;
+	struct device *dev;
+};
+
+struct palmas_usb {
+	struct palmas *palmas;
+	struct device *dev;
+	struct extcon_dev *edev;
+	int id_otg_irq;
+	int id_irq;
+	int vbus_otg_irq;
+	int vbus_irq;
+	int gpio_id_irq;
+	int gpio_vbus_irq;
+	struct gpio_desc *id_gpiod;
+	struct gpio_desc *vbus_gpiod;
+	long unsigned int sw_debounce_jiffies;
+	struct delayed_work wq_detectid;
+	enum palmas_usb_state linkstat;
+	int wakeup;
+	bool enable_vbus_detection;
+	bool enable_id_detection;
+	bool enable_gpio_id_detection;
+	bool enable_gpio_vbus_detection;
+};
+
+struct palmas_sleep_requestor_info {
+	int id;
+	int reg_offset;
+	int bit_pos;
+};
+
+struct palmas_regs_info {
+	char *name;
+	char *sname;
+	u8 vsel_addr;
+	u8 ctrl_addr;
+	u8 tstep_addr;
+	int sleep_id;
+};
+
+struct palmas_reg_init;
+
+struct palmas_pmic_platform_data {
+	struct regulator_init_data *reg_data[27];
+	struct palmas_reg_init *reg_init[27];
+	int ldo6_vibrator;
+	bool enable_ldo8_tracking;
+};
+
+struct palmas_adc_wakeup_property {
+	int adc_channel_number;
+	int adc_high_threshold;
+	int adc_low_threshold;
+};
+
+struct palmas_gpadc_platform_data {
+	int ch3_current;
+	int ch0_current;
+	bool extended_delay;
+	int bat_removal;
+	int start_polarity;
+	int auto_conversion_period_ms;
+	struct palmas_adc_wakeup_property *adc_wakeup1_data;
+	struct palmas_adc_wakeup_property *adc_wakeup2_data;
+};
+
+struct palmas_reg_init {
+	int warm_reset;
+	int roof_floor;
+	int mode_sleep;
+	u8 vsel;
+};
+
+enum palmas_regulators {
+	PALMAS_REG_SMPS12 = 0,
+	PALMAS_REG_SMPS123 = 1,
+	PALMAS_REG_SMPS3 = 2,
+	PALMAS_REG_SMPS45 = 3,
+	PALMAS_REG_SMPS457 = 4,
+	PALMAS_REG_SMPS6 = 5,
+	PALMAS_REG_SMPS7 = 6,
+	PALMAS_REG_SMPS8 = 7,
+	PALMAS_REG_SMPS9 = 8,
+	PALMAS_REG_SMPS10_OUT2 = 9,
+	PALMAS_REG_SMPS10_OUT1 = 10,
+	PALMAS_REG_LDO1 = 11,
+	PALMAS_REG_LDO2 = 12,
+	PALMAS_REG_LDO3 = 13,
+	PALMAS_REG_LDO4 = 14,
+	PALMAS_REG_LDO5 = 15,
+	PALMAS_REG_LDO6 = 16,
+	PALMAS_REG_LDO7 = 17,
+	PALMAS_REG_LDO8 = 18,
+	PALMAS_REG_LDO9 = 19,
+	PALMAS_REG_LDOLN = 20,
+	PALMAS_REG_LDOUSB = 21,
+	PALMAS_REG_REGEN1 = 22,
+	PALMAS_REG_REGEN2 = 23,
+	PALMAS_REG_REGEN3 = 24,
+	PALMAS_REG_SYSEN1 = 25,
+	PALMAS_REG_SYSEN2 = 26,
+	PALMAS_NUM_REGS = 27,
+};
+
+struct palmas_usb_platform_data {
+	int wakeup;
+};
+
+struct palmas_resource_platform_data {
+	int regen1_mode_sleep;
+	int regen2_mode_sleep;
+	int sysen1_mode_sleep;
+	int sysen2_mode_sleep;
+	u8 nsleep_res;
+	u8 nsleep_smps;
+	u8 nsleep_ldo1;
+	u8 nsleep_ldo2;
+	u8 enable1_res;
+	u8 enable1_smps;
+	u8 enable1_ldo1;
+	u8 enable1_ldo2;
+	u8 enable2_res;
+	u8 enable2_smps;
+	u8 enable2_ldo1;
+	u8 enable2_ldo2;
+};
+
+struct palmas_clk_platform_data {
+	int clk32kg_mode_sleep;
+	int clk32kgaudio_mode_sleep;
+};
+
+struct palmas_platform_data {
+	int irq_flags;
+	int gpio_base;
+	u8 power_ctrl;
+	int mux_from_pdata;
+	u8 pad1;
+	u8 pad2;
+	bool pm_off;
+	struct palmas_pmic_platform_data *pmic_pdata;
+	struct palmas_gpadc_platform_data *gpadc_pdata;
+	struct palmas_usb_platform_data *usb_pdata;
+	struct palmas_resource_platform_data *resource_pdata;
+	struct palmas_clk_platform_data *clk_pdata;
+};
+
+enum palmas_irqs {
+	PALMAS_CHARG_DET_N_VBUS_OVV_IRQ = 0,
+	PALMAS_PWRON_IRQ = 1,
+	PALMAS_LONG_PRESS_KEY_IRQ = 2,
+	PALMAS_RPWRON_IRQ = 3,
+	PALMAS_PWRDOWN_IRQ = 4,
+	PALMAS_HOTDIE_IRQ = 5,
+	PALMAS_VSYS_MON_IRQ = 6,
+	PALMAS_VBAT_MON_IRQ = 7,
+	PALMAS_RTC_ALARM_IRQ = 8,
+	PALMAS_RTC_TIMER_IRQ = 9,
+	PALMAS_WDT_IRQ = 10,
+	PALMAS_BATREMOVAL_IRQ = 11,
+	PALMAS_RESET_IN_IRQ = 12,
+	PALMAS_FBI_BB_IRQ = 13,
+	PALMAS_SHORT_IRQ = 14,
+	PALMAS_VAC_ACOK_IRQ = 15,
+	PALMAS_GPADC_AUTO_0_IRQ = 16,
+	PALMAS_GPADC_AUTO_1_IRQ = 17,
+	PALMAS_GPADC_EOC_SW_IRQ = 18,
+	PALMAS_GPADC_EOC_RT_IRQ = 19,
+	PALMAS_ID_OTG_IRQ = 20,
+	PALMAS_ID_IRQ = 21,
+	PALMAS_VBUS_OTG_IRQ = 22,
+	PALMAS_VBUS_IRQ = 23,
+	PALMAS_GPIO_0_IRQ = 24,
+	PALMAS_GPIO_1_IRQ = 25,
+	PALMAS_GPIO_2_IRQ = 26,
+	PALMAS_GPIO_3_IRQ = 27,
+	PALMAS_GPIO_4_IRQ = 28,
+	PALMAS_GPIO_5_IRQ = 29,
+	PALMAS_GPIO_6_IRQ = 30,
+	PALMAS_GPIO_7_IRQ = 31,
+	PALMAS_NUM_IRQ = 32,
+};
+
+struct palmas_gpio {
+	struct gpio_chip gpio_chip;
+	struct palmas *palmas;
+};
+
+struct palmas_device_data {
 	int ngpio;
 };
 
+enum {
+	RC5T583_IRQ_ONKEY = 0,
+	RC5T583_IRQ_ACOK = 1,
+	RC5T583_IRQ_LIDOPEN = 2,
+	RC5T583_IRQ_PREOT = 3,
+	RC5T583_IRQ_CLKSTP = 4,
+	RC5T583_IRQ_ONKEY_OFF = 5,
+	RC5T583_IRQ_WD = 6,
+	RC5T583_IRQ_EN_PWRREQ1 = 7,
+	RC5T583_IRQ_EN_PWRREQ2 = 8,
+	RC5T583_IRQ_PRE_VINDET = 9,
+	RC5T583_IRQ_DC0LIM = 10,
+	RC5T583_IRQ_DC1LIM = 11,
+	RC5T583_IRQ_DC2LIM = 12,
+	RC5T583_IRQ_DC3LIM = 13,
+	RC5T583_IRQ_CTC = 14,
+	RC5T583_IRQ_YALE = 15,
+	RC5T583_IRQ_DALE = 16,
+	RC5T583_IRQ_WALE = 17,
+	RC5T583_IRQ_AIN1L = 18,
+	RC5T583_IRQ_AIN2L = 19,
+	RC5T583_IRQ_AIN3L = 20,
+	RC5T583_IRQ_VBATL = 21,
+	RC5T583_IRQ_VIN3L = 22,
+	RC5T583_IRQ_VIN8L = 23,
+	RC5T583_IRQ_AIN1H = 24,
+	RC5T583_IRQ_AIN2H = 25,
+	RC5T583_IRQ_AIN3H = 26,
+	RC5T583_IRQ_VBATH = 27,
+	RC5T583_IRQ_VIN3H = 28,
+	RC5T583_IRQ_VIN8H = 29,
+	RC5T583_IRQ_ADCEND = 30,
+	RC5T583_IRQ_GPIO0 = 31,
+	RC5T583_IRQ_GPIO1 = 32,
+	RC5T583_IRQ_GPIO2 = 33,
+	RC5T583_IRQ_GPIO3 = 34,
+	RC5T583_IRQ_GPIO4 = 35,
+	RC5T583_IRQ_GPIO5 = 36,
+	RC5T583_IRQ_GPIO6 = 37,
+	RC5T583_IRQ_GPIO7 = 38,
+	RC5T583_MAX_IRQS = 39,
+};
+
+enum {
+	RC5T583_GPIO0 = 0,
+	RC5T583_GPIO1 = 1,
+	RC5T583_GPIO2 = 2,
+	RC5T583_GPIO3 = 3,
+	RC5T583_GPIO4 = 4,
+	RC5T583_GPIO5 = 5,
+	RC5T583_GPIO6 = 6,
+	RC5T583_GPIO7 = 7,
+	RC5T583_MAX_GPIO = 8,
+};
+
+enum {
+	RC5T583_REGULATOR_DC0 = 0,
+	RC5T583_REGULATOR_DC1 = 1,
+	RC5T583_REGULATOR_DC2 = 2,
+	RC5T583_REGULATOR_DC3 = 3,
+	RC5T583_REGULATOR_LDO0 = 4,
+	RC5T583_REGULATOR_LDO1 = 5,
+	RC5T583_REGULATOR_LDO2 = 6,
+	RC5T583_REGULATOR_LDO3 = 7,
+	RC5T583_REGULATOR_LDO4 = 8,
+	RC5T583_REGULATOR_LDO5 = 9,
+	RC5T583_REGULATOR_LDO6 = 10,
+	RC5T583_REGULATOR_LDO7 = 11,
+	RC5T583_REGULATOR_LDO8 = 12,
+	RC5T583_REGULATOR_LDO9 = 13,
+	RC5T583_REGULATOR_MAX = 14,
+};
+
+struct rc5t583 {
+	struct device *dev;
+	struct regmap *regmap;
+	int chip_irq;
+	int irq_base;
+	struct mutex irq_lock;
+	long unsigned int group_irq_en[5];
+	uint8_t intc_inten_reg;
+	uint8_t irq_en_reg[8];
+	uint8_t gpedge_reg[2];
+};
+
+struct rc5t583_platform_data {
+	int irq_base;
+	int gpio_base;
+	bool enable_shutdown;
+	int regulator_deepsleep_slot[14];
+	long unsigned int regulator_ext_pwr_control[14];
+	struct regulator_init_data *reg_init_data[14];
+};
+
+struct rc5t583_gpio {
+	struct gpio_chip gpio_chip;
+	struct rc5t583 *rc5t583;
+};
+
+enum {
+	TPS6586X_ID_SYS = 0,
+	TPS6586X_ID_SM_0 = 1,
+	TPS6586X_ID_SM_1 = 2,
+	TPS6586X_ID_SM_2 = 3,
+	TPS6586X_ID_LDO_0 = 4,
+	TPS6586X_ID_LDO_1 = 5,
+	TPS6586X_ID_LDO_2 = 6,
+	TPS6586X_ID_LDO_3 = 7,
+	TPS6586X_ID_LDO_4 = 8,
+	TPS6586X_ID_LDO_5 = 9,
+	TPS6586X_ID_LDO_6 = 10,
+	TPS6586X_ID_LDO_7 = 11,
+	TPS6586X_ID_LDO_8 = 12,
+	TPS6586X_ID_LDO_9 = 13,
+	TPS6586X_ID_LDO_RTC = 14,
+	TPS6586X_ID_MAX_REGULATOR = 15,
+};
+
+enum {
+	TPS6586X_INT_PLDO_0 = 0,
+	TPS6586X_INT_PLDO_1 = 1,
+	TPS6586X_INT_PLDO_2 = 2,
+	TPS6586X_INT_PLDO_3 = 3,
+	TPS6586X_INT_PLDO_4 = 4,
+	TPS6586X_INT_PLDO_5 = 5,
+	TPS6586X_INT_PLDO_6 = 6,
+	TPS6586X_INT_PLDO_7 = 7,
+	TPS6586X_INT_COMP_DET = 8,
+	TPS6586X_INT_ADC = 9,
+	TPS6586X_INT_PLDO_8 = 10,
+	TPS6586X_INT_PLDO_9 = 11,
+	TPS6586X_INT_PSM_0 = 12,
+	TPS6586X_INT_PSM_1 = 13,
+	TPS6586X_INT_PSM_2 = 14,
+	TPS6586X_INT_PSM_3 = 15,
+	TPS6586X_INT_RTC_ALM1 = 16,
+	TPS6586X_INT_ACUSB_OVP = 17,
+	TPS6586X_INT_USB_DET = 18,
+	TPS6586X_INT_AC_DET = 19,
+	TPS6586X_INT_BAT_DET = 20,
+	TPS6586X_INT_CHG_STAT = 21,
+	TPS6586X_INT_CHG_TEMP = 22,
+	TPS6586X_INT_PP = 23,
+	TPS6586X_INT_RESUME = 24,
+	TPS6586X_INT_LOW_SYS = 25,
+	TPS6586X_INT_RTC_ALM2 = 26,
+};
+
+struct tps6586x_subdev_info {
+	int id;
+	const char *name;
+	void *platform_data;
+	struct device_node *of_node;
+};
+
+struct tps6586x_platform_data {
+	int num_subdevs;
+	struct tps6586x_subdev_info *subdevs;
+	int gpio_base;
+	int irq_base;
+	bool pm_off;
+	struct regulator_init_data *reg_init_data[15];
+};
+
+struct tps6586x_gpio {
+	struct gpio_chip gpio_chip;
+	struct device *parent;
+};
+
+struct tps65910_sleep_keepon_data {
+	unsigned int therm_keepon: 1;
+	unsigned int clkout32k_keepon: 1;
+	unsigned int i2chs_keepon: 1;
+};
+
+struct tps65910_board {
+	int gpio_base;
+	int irq;
+	int irq_base;
+	int vmbch_threshold;
+	int vmbch2_threshold;
+	bool en_ck32k_xtal;
+	bool en_dev_slp;
+	bool pm_off;
+	struct tps65910_sleep_keepon_data slp_keepon;
+	bool en_gpio_sleep[9];
+	long unsigned int regulator_ext_sleep_control[14];
+	struct regulator_init_data *tps65910_pmic_init_data[14];
+};
+
+struct tps65910 {
+	struct device *dev;
+	struct i2c_client *i2c_client;
+	struct regmap *regmap;
+	long unsigned int id;
+	struct tps65910_board *of_plat_data;
+	int chip_irq;
+	struct regmap_irq_chip_data *irq_data;
+};
+
+struct tps65910_gpio {
+	struct gpio_chip gpio_chip;
+	struct tps65910 *tps65910;
+};
+
 enum pwm_polarity {
 	PWM_POLARITY_NORMAL = 0,
 	PWM_POLARITY_INVERSED = 1,
@@ -63664,11 +80884,17 @@
 	enum pwm_polarity polarity;
 };
 
+enum {
+	PWMF_REQUESTED = 1,
+	PWMF_EXPORTED = 2,
+};
+
 struct pwm_state {
 	u64 period;
 	u64 duty_cycle;
 	enum pwm_polarity polarity;
 	bool enabled;
+	bool usage_power;
 };
 
 struct pwm_chip;
@@ -63718,319 +80944,6 @@
 	unsigned int duty_cycle;
 };
 
-struct mvebu_gpio_chip;
-
-struct mvebu_pwm {
-	void *membase;
-	long unsigned int clk_rate;
-	struct gpio_desc *gpiod;
-	struct pwm_chip chip;
-	spinlock_t lock;
-	struct mvebu_gpio_chip *mvchip;
-	u32 blink_select;
-	u32 blink_on_duration;
-	u32 blink_off_duration;
-};
-
-struct mvebu_gpio_chip {
-	struct gpio_chip chip;
-	struct regmap *regs;
-	u32 offset;
-	struct regmap *percpu_regs;
-	int irqbase;
-	struct irq_domain *domain;
-	int soc_variant;
-	struct clk *clk;
-	struct mvebu_pwm *mvpwm;
-	u32 out_reg;
-	u32 io_conf_reg;
-	u32 blink_en_reg;
-	u32 in_pol_reg;
-	u32 edge_mask_regs[4];
-	u32 level_mask_regs[4];
-};
-
-struct amba_id {
-	unsigned int id;
-	unsigned int mask;
-	void *data;
-};
-
-struct amba_cs_uci_id {
-	unsigned int devarch;
-	unsigned int devarch_mask;
-	unsigned int devtype;
-	void *data;
-};
-
-struct amba_device {
-	struct device dev;
-	struct resource res;
-	struct clk *pclk;
-	struct device_dma_parameters dma_parms;
-	unsigned int periphid;
-	unsigned int cid;
-	struct amba_cs_uci_id uci;
-	unsigned int irq[9];
-	char *driver_override;
-};
-
-struct amba_driver {
-	struct device_driver drv;
-	int (*probe)(struct amba_device *, const struct amba_id *);
-	int (*remove)(struct amba_device *);
-	void (*shutdown)(struct amba_device *);
-	const struct amba_id *id_table;
-};
-
-struct pl061_context_save_regs {
-	u8 gpio_data;
-	u8 gpio_dir;
-	u8 gpio_is;
-	u8 gpio_ibe;
-	u8 gpio_iev;
-	u8 gpio_ie;
-};
-
-struct pl061 {
-	raw_spinlock_t lock;
-	void *base;
-	struct gpio_chip gc;
-	struct irq_chip irq_chip;
-	int parent_irq;
-	struct pl061_context_save_regs csave_regs;
-};
-
-enum rpi_firmware_property_tag {
-	RPI_FIRMWARE_PROPERTY_END = 0,
-	RPI_FIRMWARE_GET_FIRMWARE_REVISION = 1,
-	RPI_FIRMWARE_SET_CURSOR_INFO = 32784,
-	RPI_FIRMWARE_SET_CURSOR_STATE = 32785,
-	RPI_FIRMWARE_GET_BOARD_MODEL = 65537,
-	RPI_FIRMWARE_GET_BOARD_REVISION = 65538,
-	RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 65539,
-	RPI_FIRMWARE_GET_BOARD_SERIAL = 65540,
-	RPI_FIRMWARE_GET_ARM_MEMORY = 65541,
-	RPI_FIRMWARE_GET_VC_MEMORY = 65542,
-	RPI_FIRMWARE_GET_CLOCKS = 65543,
-	RPI_FIRMWARE_GET_POWER_STATE = 131073,
-	RPI_FIRMWARE_GET_TIMING = 131074,
-	RPI_FIRMWARE_SET_POWER_STATE = 163841,
-	RPI_FIRMWARE_GET_CLOCK_STATE = 196609,
-	RPI_FIRMWARE_GET_CLOCK_RATE = 196610,
-	RPI_FIRMWARE_GET_VOLTAGE = 196611,
-	RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 196612,
-	RPI_FIRMWARE_GET_MAX_VOLTAGE = 196613,
-	RPI_FIRMWARE_GET_TEMPERATURE = 196614,
-	RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 196615,
-	RPI_FIRMWARE_GET_MIN_VOLTAGE = 196616,
-	RPI_FIRMWARE_GET_TURBO = 196617,
-	RPI_FIRMWARE_GET_MAX_TEMPERATURE = 196618,
-	RPI_FIRMWARE_GET_STC = 196619,
-	RPI_FIRMWARE_ALLOCATE_MEMORY = 196620,
-	RPI_FIRMWARE_LOCK_MEMORY = 196621,
-	RPI_FIRMWARE_UNLOCK_MEMORY = 196622,
-	RPI_FIRMWARE_RELEASE_MEMORY = 196623,
-	RPI_FIRMWARE_EXECUTE_CODE = 196624,
-	RPI_FIRMWARE_EXECUTE_QPU = 196625,
-	RPI_FIRMWARE_SET_ENABLE_QPU = 196626,
-	RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 196628,
-	RPI_FIRMWARE_GET_EDID_BLOCK = 196640,
-	RPI_FIRMWARE_GET_CUSTOMER_OTP = 196641,
-	RPI_FIRMWARE_GET_DOMAIN_STATE = 196656,
-	RPI_FIRMWARE_GET_THROTTLED = 196678,
-	RPI_FIRMWARE_GET_CLOCK_MEASURED = 196679,
-	RPI_FIRMWARE_NOTIFY_REBOOT = 196680,
-	RPI_FIRMWARE_SET_CLOCK_STATE = 229377,
-	RPI_FIRMWARE_SET_CLOCK_RATE = 229378,
-	RPI_FIRMWARE_SET_VOLTAGE = 229379,
-	RPI_FIRMWARE_SET_TURBO = 229385,
-	RPI_FIRMWARE_SET_CUSTOMER_OTP = 229409,
-	RPI_FIRMWARE_SET_DOMAIN_STATE = 229424,
-	RPI_FIRMWARE_GET_GPIO_STATE = 196673,
-	RPI_FIRMWARE_SET_GPIO_STATE = 229441,
-	RPI_FIRMWARE_SET_SDHOST_CLOCK = 229442,
-	RPI_FIRMWARE_GET_GPIO_CONFIG = 196675,
-	RPI_FIRMWARE_SET_GPIO_CONFIG = 229443,
-	RPI_FIRMWARE_GET_PERIPH_REG = 196677,
-	RPI_FIRMWARE_SET_PERIPH_REG = 229445,
-	RPI_FIRMWARE_GET_POE_HAT_VAL = 196681,
-	RPI_FIRMWARE_SET_POE_HAT_VAL = 196688,
-	RPI_FIRMWARE_NOTIFY_XHCI_RESET = 196696,
-	RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 262145,
-	RPI_FIRMWARE_FRAMEBUFFER_BLANK = 262146,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 262147,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 262148,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 262149,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 262150,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 262151,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 262152,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 262153,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 262154,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 262155,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 262159,
-	RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 262160,
-	RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 294913,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 278531,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 278532,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 278533,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 278534,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 278535,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 278537,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 278538,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 278539,
-	RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 278542,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 294915,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 294916,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 294917,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 294918,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 294919,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 294921,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 294922,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 294923,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 294943,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 294944,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 294926,
-	RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 294927,
-	RPI_FIRMWARE_VCHIQ_INIT = 294928,
-	RPI_FIRMWARE_GET_COMMAND_LINE = 327681,
-	RPI_FIRMWARE_GET_DMA_CHANNELS = 393217,
-};
-
-struct rpi_firmware;
-
-struct rpi_exp_gpio {
-	struct gpio_chip gc;
-	struct rpi_firmware *fw;
-};
-
-struct gpio_set_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-	u32 state;
-};
-
-struct gpio_get_config {
-	u32 gpio;
-	u32 direction;
-	u32 polarity;
-	u32 term_en;
-	u32 term_pull_up;
-};
-
-struct gpio_get_set_state {
-	u32 gpio;
-	u32 state;
-};
-
-struct tegra_gpio_port {
-	const char *name;
-	unsigned int bank;
-	unsigned int port;
-	unsigned int pins;
-};
-
-struct tegra186_pin_range {
-	unsigned int offset;
-	const char *group;
-};
-
-struct tegra_gpio_soc {
-	const struct tegra_gpio_port *ports;
-	unsigned int num_ports;
-	const char *name;
-	unsigned int instance;
-	const struct tegra186_pin_range *pin_ranges;
-	unsigned int num_pin_ranges;
-	const char *pinmux;
-};
-
-struct tegra_gpio {
-	struct gpio_chip gpio;
-	struct irq_chip intc;
-	unsigned int num_irq;
-	unsigned int *irq;
-	const struct tegra_gpio_soc *soc;
-	void *secure;
-	void *base;
-};
-
-struct tegra_gpio_info;
-
-struct tegra_gpio_bank {
-	unsigned int bank;
-	unsigned int irq;
-	spinlock_t lvl_lock[4];
-	spinlock_t dbc_lock[4];
-	u32 cnf[4];
-	u32 out[4];
-	u32 oe[4];
-	u32 int_enb[4];
-	u32 int_lvl[4];
-	u32 wake_enb[4];
-	u32 dbc_enb[4];
-	u32 dbc_cnt[4];
-	struct tegra_gpio_info *tgi;
-};
-
-struct tegra_gpio_soc_config;
-
-struct tegra_gpio_info {
-	struct device *dev;
-	void *regs;
-	struct irq_domain *irq_domain;
-	struct tegra_gpio_bank *bank_info;
-	const struct tegra_gpio_soc_config *soc;
-	struct gpio_chip gc;
-	struct irq_chip ic;
-	u32 bank_count;
-};
-
-struct tegra_gpio_soc_config {
-	bool debounce_supported;
-	u32 bank_stride;
-	u32 upper_offset;
-};
-
-struct msix_entry {
-	u32 vector;
-	u16 entry;
-};
-
-struct thunderx_gpio;
-
-struct thunderx_line {
-	struct thunderx_gpio *txgpio;
-	unsigned int line;
-	unsigned int fil_bits;
-};
-
-struct thunderx_gpio {
-	struct gpio_chip chip;
-	u8 *register_base;
-	struct msix_entry *msix_entries;
-	struct thunderx_line *line_entries;
-	raw_spinlock_t lock;
-	long unsigned int invert_mask[2];
-	long unsigned int od_mask[2];
-	int base_msi;
-};
-
-struct xgene_gpio {
-	struct gpio_chip chip;
-	void *base;
-	spinlock_t lock;
-	u32 set_dr_val[3];
-};
-
-enum {
-	PWMF_REQUESTED = 1,
-	PWMF_EXPORTED = 2,
-};
-
 struct pwm_lookup {
 	struct list_head list;
 	const char *provider;
@@ -64065,6 +80978,27 @@
 	struct pwm_state suspend;
 };
 
+struct crystalcove_pwm {
+	struct pwm_chip chip;
+	struct regmap *regmap;
+};
+
+struct pwm_lpss_boardinfo;
+
+struct pwm_lpss_chip {
+	struct pwm_chip chip;
+	void *regs;
+	const struct pwm_lpss_boardinfo *info;
+};
+
+struct pwm_lpss_boardinfo {
+	long unsigned int clk_rate;
+	unsigned int npwm;
+	long unsigned int base_unit_bits;
+	bool bypass;
+	bool other_devices_aml_touches_pwm_regs;
+};
+
 enum {
 	pci_channel_io_normal = 1,
 	pci_channel_io_frozen = 2,
@@ -64096,6 +81030,12 @@
 	bool drivers_autoprobe;
 };
 
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
 struct pci_bus_resource {
 	struct list_head list;
 	struct resource *res;
@@ -64142,6 +81082,7 @@
 	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
 	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
 	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
 };
 
 enum pci_bus_flags {
@@ -64176,9 +81117,43 @@
 	PCIE_SPEED_8_0GT = 22,
 	PCIE_SPEED_16_0GT = 23,
 	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
 	PCI_SPEED_UNKNOWN = 255,
 };
 
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long unsigned int private[0];
+};
+
 enum {
 	PCI_REASSIGN_ALL_RSRC = 1,
 	PCI_REASSIGN_ALL_BUS = 2,
@@ -64206,7 +81181,7 @@
 	int (*get_attention_status)(struct hotplug_slot *, u8 *);
 	int (*get_latch_status)(struct hotplug_slot *, u8 *);
 	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
-	int (*reset_slot)(struct hotplug_slot *, int);
+	int (*reset_slot)(struct hotplug_slot *, bool);
 };
 
 enum pci_bar_type {
@@ -64246,6 +81221,8 @@
 	PCIE_LNK_WIDTH_UNKNOWN = 255,
 };
 
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
 struct pci_cap_saved_data {
 	u16 cap_nr;
 	bool cap_extended;
@@ -64258,17 +81235,9 @@
 	struct pci_cap_saved_data cap;
 };
 
-typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
-
-struct pci_platform_pm_ops {
-	bool (*bridge_d3)(struct pci_dev *);
-	bool (*is_manageable)(struct pci_dev *);
-	int (*set_state)(struct pci_dev *, pci_power_t);
-	pci_power_t (*get_state)(struct pci_dev *);
-	void (*refresh_state)(struct pci_dev *);
-	pci_power_t (*choose_state)(struct pci_dev *);
-	int (*set_wakeup)(struct pci_dev *, bool);
-	bool (*need_resume)(struct pci_dev *);
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
 };
 
 struct pci_pme_device {
@@ -64305,12 +81274,6 @@
 	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
 };
 
-enum dev_dma_attr {
-	DEV_DMA_NOT_SUPPORTED = 0,
-	DEV_DMA_NON_COHERENT = 1,
-	DEV_DMA_COHERENT = 2,
-};
-
 struct pcie_device {
 	int irq;
 	struct pci_dev *port;
@@ -64328,7 +81291,7 @@
 	int (*resume)(struct pcie_device *);
 	int (*runtime_suspend)(struct pcie_device *);
 	int (*runtime_resume)(struct pcie_device *);
-	void (*error_resume)(struct pci_dev *);
+	int (*slot_reset)(struct pcie_device *);
 	int port_type;
 	u32 service;
 	struct device_driver driver;
@@ -64355,25 +81318,6 @@
 	PCI_MMAP_PROCFS = 1,
 };
 
-struct pci_vpd_ops;
-
-struct pci_vpd {
-	const struct pci_vpd_ops *ops;
-	struct bin_attribute *attr;
-	struct mutex lock;
-	unsigned int len;
-	u16 flag;
-	u8 cap;
-	unsigned int busy: 1;
-	unsigned int valid: 1;
-};
-
-struct pci_vpd_ops {
-	ssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);
-	ssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);
-	int (*set_size)(struct pci_dev *, size_t);
-};
-
 struct pci_dev_resource {
 	struct list_head list;
 	struct resource *res;
@@ -64398,17 +81342,23 @@
 	auto_enabled = 3,
 };
 
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
 struct portdrv_service_data {
 	struct pcie_port_service_driver *drv;
 	struct device *dev;
 	u32 service;
 };
 
-typedef int (*pcie_pm_callback_t)(struct pcie_device *);
+typedef int (*pcie_callback_t)(struct pcie_device *);
 
-struct aspm_latency {
-	u32 l0s;
-	u32 l1;
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
 };
 
 struct pcie_link_state {
@@ -64427,16 +81377,6 @@
 	u32 clkpm_enabled: 1;
 	u32 clkpm_default: 1;
 	u32 clkpm_disable: 1;
-	struct aspm_latency latency_up;
-	struct aspm_latency latency_dw;
-	struct aspm_latency acceptable[8];
-};
-
-enum {
-	CPER_SEV_RECOVERABLE = 0,
-	CPER_SEV_FATAL = 1,
-	CPER_SEV_CORRECTED = 2,
-	CPER_SEV_INFORMATIONAL = 3,
 };
 
 struct aer_stats {
@@ -64523,24 +81463,35 @@
 	bool noirq;
 };
 
+struct pci_filp_private {
+	enum pci_mmap_state mmap_state;
+	int write_combine;
+};
+
 struct pci_slot_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct pci_slot *, char *);
 	ssize_t (*store)(struct pci_slot *, const char *, size_t);
 };
 
+typedef u64 acpi_size;
+
 struct acpi_buffer {
 	acpi_size length;
 	void *pointer;
 };
 
-struct acpi_bus_type {
-	struct list_head list;
-	const char *name;
-	bool (*match)(struct device *);
-	struct acpi_device * (*find_companion)(struct device *);
-	void (*setup)(struct device *);
-	void (*cleanup)(struct device *);
+struct acpi_pci_root {
+	struct acpi_device *device;
+	struct pci_bus *bus;
+	u16 segment;
+	int bridge_type;
+	struct resource secondary;
+	u32 osc_support_set;
+	u32 osc_control_set;
+	u32 osc_ext_support_set;
+	u32 osc_ext_control_set;
+	phys_addr_t mcfg_addr;
 };
 
 enum pm_qos_flags_status {
@@ -64629,27 +81580,9 @@
 	HPX_CFG_MAX = 5,
 };
 
-struct of_bus;
-
-struct of_pci_range_parser {
-	struct device_node *node;
-	struct of_bus *bus;
-	const __be32 *range;
-	const __be32 *end;
-	int na;
-	int ns;
-	int pna;
-	bool dma;
-};
-
-struct of_pci_range {
-	union {
-		u64 pci_addr;
-		u64 bus_addr;
-	};
-	u64 cpu_addr;
-	u64 size;
-	u32 flags;
+enum pci_irq_reroute_variant {
+	INTEL_IRQ_REROUTE_VARIANT = 1,
+	MAX_IRQ_REROUTE_VARIANTS = 3,
 };
 
 struct pci_fixup {
@@ -64676,6 +81609,8 @@
 	NVME_REG_BPINFO = 64,
 	NVME_REG_BPRSEL = 68,
 	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
 	NVME_REG_PMRCAP = 3584,
 	NVME_REG_PMRCTL = 3588,
 	NVME_REG_PMRSTS = 3592,
@@ -64705,8 +81640,10 @@
 	NVME_CC_SHN_MASK = 49152,
 	NVME_CC_IOSQES = 393216,
 	NVME_CC_IOCQES = 4194304,
-	NVME_CAP_CSS_NVM = 1,
-	NVME_CAP_CSS_CSI = 64,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
 	NVME_CSTS_RDY = 1,
 	NVME_CSTS_CFS = 2,
 	NVME_CSTS_NSSRO = 16,
@@ -64790,12 +81727,7 @@
 struct pci_dev_reset_methods {
 	u16 vendor;
 	u16 device;
-	int (*reset)(struct pci_dev *, int);
-};
-
-struct acs_on_id {
-	short unsigned int vendor;
-	short unsigned int device;
+	int (*reset)(struct pci_dev *, bool);
 };
 
 struct pci_dev_acs_enabled {
@@ -64860,14 +81792,107 @@
 	struct delayed_work button_work;
 	struct hotplug_slot hotplug_slot;
 	struct rw_semaphore reset_lock;
+	unsigned int depth;
 	unsigned int ist_running;
 	int request_result;
 	wait_queue_head_t requester;
 };
 
-struct acpiphp_slot;
+struct controller___2;
+
+struct hpc_ops;
 
 struct slot___2 {
+	u8 bus;
+	u8 device;
+	u16 status;
+	u32 number;
+	u8 is_a_board;
+	u8 state;
+	u8 attention_save;
+	u8 presence_save;
+	u8 latch_save;
+	u8 pwr_save;
+	struct controller___2 *ctrl;
+	const struct hpc_ops *hpc_ops;
+	struct hotplug_slot hotplug_slot;
+	struct list_head slot_list;
+	struct delayed_work work;
+	struct mutex lock;
+	struct workqueue_struct *wq;
+	u8 hp_slot;
+};
+
+struct controller___2 {
+	struct mutex crit_sect;
+	struct mutex cmd_lock;
+	int num_slots;
+	int slot_num_inc;
+	struct pci_dev *pci_dev;
+	struct list_head slot_list;
+	const struct hpc_ops *hpc_ops;
+	wait_queue_head_t queue;
+	u8 slot_device_offset;
+	u32 pcix_misc2_reg;
+	u32 first_slot;
+	u32 cap_offset;
+	long unsigned int mmio_base;
+	long unsigned int mmio_size;
+	void *creg;
+	struct timer_list poll_timer;
+};
+
+struct hpc_ops {
+	int (*power_on_slot)(struct slot___2 *);
+	int (*slot_enable)(struct slot___2 *);
+	int (*slot_disable)(struct slot___2 *);
+	int (*set_bus_speed_mode)(struct slot___2 *, enum pci_bus_speed);
+	int (*get_power_status)(struct slot___2 *, u8 *);
+	int (*get_attention_status)(struct slot___2 *, u8 *);
+	int (*set_attention_status)(struct slot___2 *, u8);
+	int (*get_latch_status)(struct slot___2 *, u8 *);
+	int (*get_adapter_status)(struct slot___2 *, u8 *);
+	int (*get_adapter_speed)(struct slot___2 *, enum pci_bus_speed *);
+	int (*get_mode1_ECC_cap)(struct slot___2 *, u8 *);
+	int (*get_prog_int)(struct slot___2 *, u8 *);
+	int (*query_power_fault)(struct slot___2 *);
+	void (*green_led_on)(struct slot___2 *);
+	void (*green_led_off)(struct slot___2 *);
+	void (*green_led_blink)(struct slot___2 *);
+	void (*release_ctlr)(struct controller___2 *);
+	int (*check_cmd_status)(struct controller___2 *);
+};
+
+struct event_info {
+	u32 event_type;
+	struct slot___2 *p_slot;
+	struct work_struct work;
+};
+
+struct pushbutton_work_info {
+	struct slot___2 *p_slot;
+	struct work_struct work;
+};
+
+enum ctrl_offsets {
+	BASE_OFFSET = 0,
+	SLOT_AVAIL1 = 4,
+	SLOT_AVAIL2 = 8,
+	SLOT_CONFIG = 12,
+	SEC_BUS_CONFIG = 16,
+	MSI_CTRL = 18,
+	PROG_INTERFACE = 19,
+	CMD = 20,
+	CMD_STATUS = 22,
+	INTR_LOC = 24,
+	SERR_LOC = 28,
+	SERR_INTR_ENABLE = 32,
+	SLOT1 = 36,
+};
+
+struct acpiphp_slot;
+
+struct slot___3 {
 	struct hotplug_slot hotplug_slot;
 	struct acpiphp_slot *acpi_slot;
 	unsigned int sun;
@@ -64877,7 +81902,7 @@
 	struct list_head node;
 	struct pci_bus *bus;
 	struct list_head funcs;
-	struct slot___2 *slot;
+	struct slot___3 *slot;
 	u8 device;
 	u32 flags;
 };
@@ -64921,103 +81946,6 @@
 	struct acpiphp_bridge *root_bridge;
 };
 
-struct pci_bridge_emul_conf {
-	__le16 vendor;
-	__le16 device;
-	__le16 command;
-	__le16 status;
-	__le32 class_revision;
-	u8 cache_line_size;
-	u8 latency_timer;
-	u8 header_type;
-	u8 bist;
-	__le32 bar[2];
-	u8 primary_bus;
-	u8 secondary_bus;
-	u8 subordinate_bus;
-	u8 secondary_latency_timer;
-	u8 iobase;
-	u8 iolimit;
-	__le16 secondary_status;
-	__le16 membase;
-	__le16 memlimit;
-	__le16 pref_mem_base;
-	__le16 pref_mem_limit;
-	__le32 prefbaseupper;
-	__le32 preflimitupper;
-	__le16 iobaseupper;
-	__le16 iolimitupper;
-	u8 capabilities_pointer;
-	u8 reserve[3];
-	__le32 romaddr;
-	u8 intline;
-	u8 intpin;
-	__le16 bridgectrl;
-};
-
-struct pci_bridge_emul_pcie_conf {
-	u8 cap_id;
-	u8 next;
-	__le16 cap;
-	__le32 devcap;
-	__le16 devctl;
-	__le16 devsta;
-	__le32 lnkcap;
-	__le16 lnkctl;
-	__le16 lnksta;
-	__le32 slotcap;
-	__le16 slotctl;
-	__le16 slotsta;
-	__le16 rootctl;
-	__le16 rsvd;
-	__le32 rootsta;
-	__le32 devcap2;
-	__le16 devctl2;
-	__le16 devsta2;
-	__le32 lnkcap2;
-	__le16 lnkctl2;
-	__le16 lnksta2;
-	__le32 slotcap2;
-	__le16 slotctl2;
-	__le16 slotsta2;
-};
-
-typedef enum {
-	PCI_BRIDGE_EMUL_HANDLED = 0,
-	PCI_BRIDGE_EMUL_NOT_HANDLED = 1,
-} pci_bridge_emul_read_status_t;
-
-struct pci_bridge_emul;
-
-struct pci_bridge_emul_ops {
-	pci_bridge_emul_read_status_t (*read_base)(struct pci_bridge_emul *, int, u32 *);
-	pci_bridge_emul_read_status_t (*read_pcie)(struct pci_bridge_emul *, int, u32 *);
-	void (*write_base)(struct pci_bridge_emul *, int, u32, u32, u32);
-	void (*write_pcie)(struct pci_bridge_emul *, int, u32, u32, u32);
-};
-
-struct pci_bridge_reg_behavior;
-
-struct pci_bridge_emul {
-	struct pci_bridge_emul_conf conf;
-	struct pci_bridge_emul_pcie_conf pcie_conf;
-	struct pci_bridge_emul_ops *ops;
-	struct pci_bridge_reg_behavior *pci_regs_behavior;
-	struct pci_bridge_reg_behavior *pcie_cap_regs_behavior;
-	void *data;
-	bool has_pcie;
-};
-
-struct pci_bridge_reg_behavior {
-	u32 ro;
-	u32 rw;
-	u32 w1c;
-};
-
-enum {
-	PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR = 1,
-};
-
 enum dmi_device_type {
 	DMI_DEV_TYPE_ANY = 0,
 	DMI_DEV_TYPE_OTHER = 1,
@@ -65062,6 +81990,34 @@
 	ACPI_ATTR_INDEX_SHOW = 1,
 };
 
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
 struct pci_epf_device_id {
 	char name[20];
 	kernel_ulong_t driver_data;
@@ -65076,6 +82032,7 @@
 };
 
 enum pci_barno {
+	NO_BAR = 4294967295,
 	BAR_0 = 0,
 	BAR_1 = 1,
 	BAR_2 = 2,
@@ -65102,6 +82059,7 @@
 struct pci_epf_ops {
 	int (*bind)(struct pci_epf *);
 	void (*unbind)(struct pci_epf *);
+	struct config_group * (*add_cfs)(struct pci_epf *, struct config_group *);
 };
 
 struct pci_epf_bar {
@@ -65124,16 +82082,27 @@
 	u8 msi_interrupts;
 	u16 msix_interrupts;
 	u8 func_no;
+	u8 vfunc_no;
 	struct pci_epc *epc;
+	struct pci_epf *epf_pf;
 	struct pci_epf_driver *driver;
 	struct list_head list;
 	struct notifier_block nb;
 	struct mutex lock;
+	struct pci_epc *sec_epc;
+	struct list_head sec_epc_list;
+	struct pci_epf_bar sec_epc_bar[6];
+	u8 sec_epc_func_no;
+	struct config_group *group;
+	unsigned int is_bound;
+	unsigned int is_vf;
+	long unsigned int vfunction_num_map;
+	struct list_head pci_vepf;
 };
 
 struct pci_epf_driver {
 	int (*probe)(struct pci_epf *);
-	int (*remove)(struct pci_epf *);
+	void (*remove)(struct pci_epf *);
 	struct device_driver driver;
 	struct pci_epf_ops *ops;
 	struct module *owner;
@@ -65153,12 +82122,19 @@
 	struct pci_epc_mem *mem;
 	unsigned int num_windows;
 	u8 max_functions;
+	u8 *max_vfs;
 	struct config_group *group;
 	struct mutex lock;
 	long unsigned int function_num_map;
 	struct atomic_notifier_head notifier;
 };
 
+enum pci_epc_interface_type {
+	UNKNOWN_INTERFACE = 4294967295,
+	PRIMARY_INTERFACE = 0,
+	SECONDARY_INTERFACE = 1,
+};
+
 enum pci_epc_irq_type {
 	PCI_EPC_IRQ_UNKNOWN = 0,
 	PCI_EPC_IRQ_LEGACY = 1,
@@ -65169,19 +82145,20 @@
 struct pci_epc_features;
 
 struct pci_epc_ops {
-	int (*write_header)(struct pci_epc *, u8, struct pci_epf_header *);
-	int (*set_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	void (*clear_bar)(struct pci_epc *, u8, struct pci_epf_bar *);
-	int (*map_addr)(struct pci_epc *, u8, phys_addr_t, u64, size_t);
-	void (*unmap_addr)(struct pci_epc *, u8, phys_addr_t);
-	int (*set_msi)(struct pci_epc *, u8, u8);
-	int (*get_msi)(struct pci_epc *, u8);
-	int (*set_msix)(struct pci_epc *, u8, u16, enum pci_barno, u32);
-	int (*get_msix)(struct pci_epc *, u8);
-	int (*raise_irq)(struct pci_epc *, u8, enum pci_epc_irq_type, u16);
+	int (*write_header)(struct pci_epc *, u8, u8, struct pci_epf_header *);
+	int (*set_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	void (*clear_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	int (*map_addr)(struct pci_epc *, u8, u8, phys_addr_t, u64, size_t);
+	void (*unmap_addr)(struct pci_epc *, u8, u8, phys_addr_t);
+	int (*set_msi)(struct pci_epc *, u8, u8, u8);
+	int (*get_msi)(struct pci_epc *, u8, u8);
+	int (*set_msix)(struct pci_epc *, u8, u8, u16, enum pci_barno, u32);
+	int (*get_msix)(struct pci_epc *, u8, u8);
+	int (*raise_irq)(struct pci_epc *, u8, u8, enum pci_epc_irq_type, u16);
+	int (*map_msi_irq)(struct pci_epc *, u8, u8, phys_addr_t, u8, u32, u32 *, u32 *);
 	int (*start)(struct pci_epc *);
 	void (*stop)(struct pci_epc *);
-	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8);
+	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8, u8);
 	struct module *owner;
 };
 
@@ -65211,6 +82188,9 @@
 
 struct pci_epf_group {
 	struct config_group group;
+	struct config_group primary_epc_group;
+	struct config_group secondary_epc_group;
+	struct delayed_work cfs_work;
 	struct pci_epf *epf;
 	int index;
 };
@@ -65226,281 +82206,6 @@
 	LINK_UP = 1,
 };
 
-struct advk_pcie {
-	struct platform_device *pdev;
-	void *base;
-	struct irq_domain *irq_domain;
-	struct irq_chip irq_chip;
-	struct irq_domain *msi_domain;
-	struct irq_domain *msi_inner_domain;
-	struct irq_chip msi_bottom_irq_chip;
-	struct irq_chip msi_irq_chip;
-	struct msi_domain_info msi_domain_info;
-	long unsigned int msi_used[1];
-	struct mutex msi_used_lock;
-	u16 msi_msg;
-	int link_gen;
-	struct pci_bridge_emul bridge;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
-};
-
-struct tegra_msi {
-	struct msi_controller chip;
-	long unsigned int used[4];
-	struct irq_domain *domain;
-	struct mutex lock;
-	void *virt;
-	dma_addr_t phys;
-	int irq;
-};
-
-struct tegra_pcie_port_soc {
-	struct {
-		u8 turnoff_bit;
-		u8 ack_bit;
-	} pme;
-};
-
-struct tegra_pcie_soc {
-	unsigned int num_ports;
-	const struct tegra_pcie_port_soc *ports;
-	unsigned int msi_base_shift;
-	long unsigned int afi_pex2_ctrl;
-	u32 pads_pll_ctl;
-	u32 tx_ref_sel;
-	u32 pads_refclk_cfg0;
-	u32 pads_refclk_cfg1;
-	u32 update_fc_threshold;
-	bool has_pex_clkreq_en;
-	bool has_pex_bias_ctrl;
-	bool has_intr_prsnt_sense;
-	bool has_cml_clk;
-	bool has_gen2;
-	bool force_pca_enable;
-	bool program_uphy;
-	bool update_clamp_threshold;
-	bool program_deskew_time;
-	bool update_fc_timer;
-	bool has_cache_bars;
-	struct {
-		struct {
-			u32 rp_ectl_2_r1;
-			u32 rp_ectl_4_r1;
-			u32 rp_ectl_5_r1;
-			u32 rp_ectl_6_r1;
-			u32 rp_ectl_2_r2;
-			u32 rp_ectl_4_r2;
-			u32 rp_ectl_5_r2;
-			u32 rp_ectl_6_r2;
-		} regs;
-		bool enable;
-	} ectl;
-};
-
-struct tegra_pcie {
-	struct device *dev;
-	void *pads;
-	void *afi;
-	void *cfg;
-	int irq;
-	struct resource cs;
-	struct clk *pex_clk;
-	struct clk *afi_clk;
-	struct clk *pll_e;
-	struct clk *cml_clk;
-	struct reset_control *pex_rst;
-	struct reset_control *afi_rst;
-	struct reset_control *pcie_xrst;
-	bool legacy_phy;
-	struct phy *phy;
-	struct tegra_msi msi;
-	struct list_head ports;
-	u32 xbar_config;
-	struct regulator_bulk_data *supplies;
-	unsigned int num_supplies;
-	const struct tegra_pcie_soc *soc;
-	struct dentry *debugfs;
-};
-
-struct tegra_pcie_port {
-	struct tegra_pcie *pcie;
-	struct device_node *np;
-	struct list_head list;
-	struct resource regs;
-	void *base;
-	unsigned int index;
-	unsigned int lanes;
-	struct phy **phys;
-	struct gpio_desc *reset_gpio;
-};
-
-struct xgene_msi;
-
-struct xgene_msi_group {
-	struct xgene_msi *msi;
-	int gic_irq;
-	u32 msi_grp;
-};
-
-struct xgene_msi {
-	struct device_node *node;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	u64 msi_addr;
-	void *msi_regs;
-	long unsigned int *bitmap;
-	struct mutex bitmap_lock;
-	struct xgene_msi_group *msi_groups;
-	int num_cpus;
-};
-
-struct rockchip_pcie {
-	void *reg_base;
-	void *apb_base;
-	bool legacy_phy;
-	struct phy *phys[4];
-	struct reset_control *core_rst;
-	struct reset_control *mgmt_rst;
-	struct reset_control *mgmt_sticky_rst;
-	struct reset_control *pipe_rst;
-	struct reset_control *pm_rst;
-	struct reset_control *aclk_rst;
-	struct reset_control *pclk_rst;
-	struct clk *aclk_pcie;
-	struct clk *aclk_perf_pcie;
-	struct clk *hclk_pcie;
-	struct clk *clk_pcie_pm;
-	struct regulator *vpcie12v;
-	struct regulator *vpcie3v3;
-	struct regulator *vpcie1v8;
-	struct regulator *vpcie0v9;
-	struct gpio_desc *ep_gpio;
-	u32 lanes;
-	u8 lanes_map;
-	int link_gen;
-	struct device *dev;
-	struct irq_domain *irq_domain;
-	int offset;
-	void *msg_region;
-	phys_addr_t msg_bus_addr;
-	bool is_rc;
-	struct resource *mem_res;
-};
-
-struct rockchip_pcie_ep {
-	struct rockchip_pcie rockchip;
-	struct pci_epc *epc;
-	u32 max_regions;
-	long unsigned int ob_region_map;
-	phys_addr_t *ob_addr;
-	phys_addr_t irq_phys_addr;
-	void *irq_cpu_addr;
-	u64 irq_pci_addr;
-	u8 irq_pci_fn;
-	u8 irq_pending;
-};
-
-struct mtk_pcie_port;
-
-struct mtk_pcie_soc {
-	bool need_fix_class_id;
-	bool need_fix_device_id;
-	unsigned int device_id;
-	struct pci_ops *ops;
-	int (*startup)(struct mtk_pcie_port *);
-	int (*setup_irq)(struct mtk_pcie_port *, struct device_node *);
-};
-
-struct mtk_pcie;
-
-struct mtk_pcie_port {
-	void *base;
-	struct list_head list;
-	struct mtk_pcie *pcie;
-	struct reset_control *reset;
-	struct clk *sys_ck;
-	struct clk *ahb_ck;
-	struct clk *axi_ck;
-	struct clk *aux_ck;
-	struct clk *obff_ck;
-	struct clk *pipe_ck;
-	struct phy *phy;
-	u32 slot;
-	int irq;
-	struct irq_domain *irq_domain;
-	struct irq_domain *inner_domain;
-	struct irq_domain *msi_domain;
-	struct mutex lock;
-	long unsigned int msi_irq_in_use[1];
-};
-
-struct mtk_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *free_ck;
-	struct list_head ports;
-	const struct mtk_pcie_soc *soc;
-};
-
-enum {
-	RGR1_SW_INIT_1 = 0,
-	EXT_CFG_INDEX = 1,
-	EXT_CFG_DATA = 2,
-};
-
-enum pcie_type {
-	GENERIC = 0,
-	BCM7278 = 1,
-	BCM2711 = 2,
-};
-
-struct brcm_pcie;
-
-struct pcie_cfg_data {
-	const int *offsets;
-	const enum pcie_type type;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi;
-
-struct brcm_pcie {
-	struct device *dev;
-	void *base;
-	struct clk *clk;
-	struct device_node *np;
-	bool ssc;
-	int gen;
-	u64 msi_target_addr;
-	struct brcm_msi *msi;
-	const int *reg_offsets;
-	enum pcie_type type;
-	struct reset_control *rescal;
-	int num_memc;
-	u64 memc_size[3];
-	u32 hw_rev;
-	void (*perst_set)(struct brcm_pcie *, u32);
-	void (*bridge_sw_init_set)(struct brcm_pcie *, u32);
-};
-
-struct brcm_msi {
-	struct device *dev;
-	void *base;
-	struct device_node *np;
-	struct irq_domain *msi_domain;
-	struct irq_domain *inner_domain;
-	struct mutex lock;
-	u64 target_addr;
-	int irq;
-	long unsigned int used;
-	bool legacy;
-	int legacy_shift;
-	int nr;
-	void *intr_base;
-};
-
 enum dw_pcie_region_type {
 	DW_PCIE_REGION_UNKNOWN = 0,
 	DW_PCIE_REGION_INBOUND = 1,
@@ -65511,11 +82216,11 @@
 
 struct dw_pcie_host_ops {
 	int (*host_init)(struct pcie_port *);
-	void (*set_num_vectors)(struct pcie_port *);
 	int (*msi_host_init)(struct pcie_port *);
 };
 
 struct pcie_port {
+	bool has_msi_ctrl: 1;
 	u64 cfg0_base;
 	void *va_cfg0_base;
 	u32 cfg0_size;
@@ -65563,8 +82268,6 @@
 	phys_addr_t *outbound_addr;
 	long unsigned int *ib_window_map;
 	long unsigned int *ob_window_map;
-	u32 num_ib_windows;
-	u32 num_ob_windows;
 	void *msi_mem;
 	phys_addr_t msi_mem_phys;
 	struct pci_epf_bar *epf_bar[6];
@@ -65587,8 +82290,9 @@
 	void *dbi_base;
 	void *dbi_base2;
 	void *atu_base;
-	u32 num_viewport;
-	u8 iatu_unroll_enabled;
+	size_t atu_size;
+	u32 num_ib_windows;
+	u32 num_ob_windows;
 	struct pcie_port pp;
 	struct dw_pcie_ep ep;
 	const struct dw_pcie_ops *ops;
@@ -65596,6 +82300,8 @@
 	int num_lanes;
 	int link_gen;
 	u8 n_fts[2];
+	bool iatu_unroll_enabled: 1;
+	bool io_cfg_atu_shared: 1;
 };
 
 struct pci_epf_msix_tbl {
@@ -65628,182 +82334,6 @@
 	enum dw_pcie_device_mode mode;
 };
 
-struct qcom_pcie_resources_2_1_0 {
-	struct clk_bulk_data clks[5];
-	struct reset_control *pci_reset;
-	struct reset_control *axi_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *por_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *ext_reset;
-	struct regulator_bulk_data supplies[3];
-};
-
-struct qcom_pcie_resources_1_0_0 {
-	struct clk *iface;
-	struct clk *aux;
-	struct clk *master_bus;
-	struct clk *slave_bus;
-	struct reset_control *core;
-	struct regulator *vdda;
-};
-
-struct qcom_pcie_resources_2_3_2 {
-	struct clk *aux_clk;
-	struct clk *master_clk;
-	struct clk *slave_clk;
-	struct clk *cfg_clk;
-	struct clk *pipe_clk;
-	struct regulator_bulk_data supplies[2];
-};
-
-struct qcom_pcie_resources_2_4_0 {
-	struct clk_bulk_data clks[4];
-	int num_clks;
-	struct reset_control *axi_m_reset;
-	struct reset_control *axi_s_reset;
-	struct reset_control *pipe_reset;
-	struct reset_control *axi_m_vmid_reset;
-	struct reset_control *axi_s_xpu_reset;
-	struct reset_control *parf_reset;
-	struct reset_control *phy_reset;
-	struct reset_control *axi_m_sticky_reset;
-	struct reset_control *pipe_sticky_reset;
-	struct reset_control *pwr_reset;
-	struct reset_control *ahb_reset;
-	struct reset_control *phy_ahb_reset;
-};
-
-struct qcom_pcie_resources_2_3_3 {
-	struct clk *iface;
-	struct clk *axi_m_clk;
-	struct clk *axi_s_clk;
-	struct clk *ahb_clk;
-	struct clk *aux_clk;
-	struct reset_control *rst[7];
-};
-
-struct qcom_pcie_resources_2_7_0 {
-	struct clk_bulk_data clks[6];
-	struct regulator_bulk_data supplies[2];
-	struct reset_control *pci_reset;
-	struct clk *pipe_clk;
-};
-
-union qcom_pcie_resources {
-	struct qcom_pcie_resources_1_0_0 v1_0_0;
-	struct qcom_pcie_resources_2_1_0 v2_1_0;
-	struct qcom_pcie_resources_2_3_2 v2_3_2;
-	struct qcom_pcie_resources_2_3_3 v2_3_3;
-	struct qcom_pcie_resources_2_4_0 v2_4_0;
-	struct qcom_pcie_resources_2_7_0 v2_7_0;
-};
-
-struct qcom_pcie;
-
-struct qcom_pcie_ops {
-	int (*get_resources)(struct qcom_pcie *);
-	int (*init)(struct qcom_pcie *);
-	int (*post_init)(struct qcom_pcie *);
-	void (*deinit)(struct qcom_pcie *);
-	void (*post_deinit)(struct qcom_pcie *);
-	void (*ltssm_enable)(struct qcom_pcie *);
-};
-
-struct qcom_pcie {
-	struct dw_pcie *pci;
-	void *parf;
-	void *elbi;
-	union qcom_pcie_resources res;
-	struct phy *phy;
-	struct gpio_desc *reset;
-	const struct qcom_pcie_ops *ops;
-};
-
-struct armada8k_pcie {
-	struct dw_pcie *pci;
-	struct clk *clk;
-	struct clk *clk_reg;
-	struct phy *phy[4];
-	unsigned int phy_count;
-};
-
-struct kirin_pcie {
-	struct dw_pcie *pci;
-	void *apb_base;
-	void *phy_base;
-	struct regmap *crgctrl;
-	struct regmap *sysctrl;
-	struct clk *apb_sys_clk;
-	struct clk *apb_phy_clk;
-	struct clk *phy_ref_clk;
-	struct clk *pcie_aclk;
-	struct clk *pcie_aux_clk;
-	int gpio_id_reset;
-};
-
-struct histb_pcie {
-	struct dw_pcie *pci;
-	struct clk *aux_clk;
-	struct clk *pipe_clk;
-	struct clk *sys_clk;
-	struct clk *bus_clk;
-	struct phy *phy;
-	struct reset_control *soft_reset;
-	struct reset_control *sys_reset;
-	struct reset_control *bus_reset;
-	void *ctrl;
-	int reset_gpio;
-	struct regulator *vpcie;
-};
-
-enum pcie_data_rate {
-	PCIE_GEN1 = 0,
-	PCIE_GEN2 = 1,
-	PCIE_GEN3 = 2,
-	PCIE_GEN4 = 3,
-};
-
-struct meson_pcie_clk_res {
-	struct clk *clk;
-	struct clk *port_clk;
-	struct clk *general_clk;
-};
-
-struct meson_pcie_rc_reset {
-	struct reset_control *port;
-	struct reset_control *apb;
-};
-
-struct meson_pcie {
-	struct dw_pcie pci;
-	void *cfg_base;
-	struct meson_pcie_clk_res clk_res;
-	struct meson_pcie_rc_reset mrst;
-	struct gpio_desc *reset_gpio;
-	struct phy *phy;
-};
-
-struct al_pcie_acpi {
-	void *dbi_base;
-};
-
-struct thunder_pem_pci {
-	u32 ea_entry[3];
-	void *pem_reg_base;
-};
-
-struct xgene_pcie_port {
-	struct device_node *node;
-	struct device *dev;
-	struct clk *clk;
-	void *csr_base;
-	void *cfg_base;
-	long unsigned int cfg_addr;
-	bool link_up;
-	u32 version;
-};
-
 struct rio_device_id {
 	__u16 did;
 	__u16 vid;
@@ -65823,22 +82353,23 @@
 
 enum dma_transaction_type {
 	DMA_MEMCPY = 0,
-	DMA_XOR = 1,
-	DMA_PQ = 2,
-	DMA_XOR_VAL = 3,
-	DMA_PQ_VAL = 4,
-	DMA_MEMSET = 5,
-	DMA_MEMSET_SG = 6,
-	DMA_INTERRUPT = 7,
-	DMA_PRIVATE = 8,
-	DMA_ASYNC_TX = 9,
-	DMA_SLAVE = 10,
-	DMA_CYCLIC = 11,
-	DMA_INTERLEAVE = 12,
-	DMA_COMPLETION_NO_ORDER = 13,
-	DMA_REPEAT = 14,
-	DMA_LOAD_EOT = 15,
-	DMA_TX_TYPE_END = 16,
+	DMA_MEMCPY_SG = 1,
+	DMA_XOR = 2,
+	DMA_PQ = 3,
+	DMA_XOR_VAL = 4,
+	DMA_PQ_VAL = 5,
+	DMA_MEMSET = 6,
+	DMA_MEMSET_SG = 7,
+	DMA_INTERRUPT = 8,
+	DMA_PRIVATE = 9,
+	DMA_ASYNC_TX = 10,
+	DMA_SLAVE = 11,
+	DMA_CYCLIC = 12,
+	DMA_INTERLEAVE = 13,
+	DMA_COMPLETION_NO_ORDER = 14,
+	DMA_REPEAT = 15,
+	DMA_LOAD_EOT = 16,
+	DMA_TX_TYPE_END = 17,
 };
 
 enum dma_transfer_direction {
@@ -65916,7 +82447,7 @@
 
 struct dma_chan_dev;
 
-struct dma_chan {
+struct dma_chan___2 {
 	struct dma_device *device;
 	struct device *slave;
 	dma_cookie_t cookie;
@@ -65934,7 +82465,7 @@
 	void *private;
 };
 
-typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+typedef bool (*dma_filter_fn)(struct dma_chan___2 *, void *);
 
 struct dma_slave_map;
 
@@ -65952,6 +82483,8 @@
 	DMAENGINE_ALIGN_16_BYTES = 4,
 	DMAENGINE_ALIGN_32_BYTES = 5,
 	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
 };
 
 enum dma_residue_granularity {
@@ -65987,7 +82520,6 @@
 	struct device *dev;
 	struct module *owner;
 	struct ida chan_ida;
-	struct mutex chan_mutex;
 	u32 src_addr_widths;
 	u32 dst_addr_widths;
 	u32 directions;
@@ -65996,37 +82528,40 @@
 	u32 max_sg_burst;
 	bool descriptor_reuse;
 	enum dma_residue_granularity residue_granularity;
-	int (*device_alloc_chan_resources)(struct dma_chan *);
-	void (*device_free_chan_resources)(struct dma_chan *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
-	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, long unsigned int);
-	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, long unsigned int);
-	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
-	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
-	int (*device_pause)(struct dma_chan *);
-	int (*device_resume)(struct dma_chan *);
-	int (*device_terminate_all)(struct dma_chan *);
-	void (*device_synchronize)(struct dma_chan *);
-	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
-	void (*device_issue_pending)(struct dma_chan *);
+	int (*device_alloc_chan_resources)(struct dma_chan___2 *);
+	int (*device_router_config)(struct dma_chan___2 *);
+	void (*device_free_chan_resources)(struct dma_chan___2 *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan___2 *, dma_addr_t, dma_addr_t, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, struct scatterlist *, unsigned int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan___2 *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan___2 *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan___2 *, dma_addr_t, int, size_t, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, int, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan___2 *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan___2 *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan___2 *, struct dma_interleaved_template *, long unsigned int);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan___2 *, dma_addr_t, u64, long unsigned int);
+	void (*device_caps)(struct dma_chan___2 *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan___2 *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan___2 *);
+	int (*device_resume)(struct dma_chan___2 *);
+	int (*device_terminate_all)(struct dma_chan___2 *);
+	void (*device_synchronize)(struct dma_chan___2 *);
+	enum dma_status (*device_tx_status)(struct dma_chan___2 *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan___2 *);
 	void (*device_release)(struct dma_device *);
 	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
 	struct dentry *dbg_dev_root;
 };
 
 struct dma_chan_dev {
-	struct dma_chan *chan;
+	struct dma_chan___2 *chan;
 	struct device device;
 	int dev_id;
+	bool chan_dma_dev;
 };
 
 enum dma_slave_buswidth {
@@ -66039,6 +82574,7 @@
 	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
 	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
 	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
 };
 
 struct dma_slave_config {
@@ -66052,7 +82588,8 @@
 	u32 src_port_window_size;
 	u32 dst_port_window_size;
 	bool device_fc;
-	unsigned int slave_id;
+	void *peripheral_config;
+	size_t peripheral_size;
 };
 
 struct dma_slave_caps {
@@ -66106,7 +82643,7 @@
 	dma_cookie_t cookie;
 	enum dma_ctrl_flags flags;
 	dma_addr_t phys;
-	struct dma_chan *chan;
+	struct dma_chan___2 *chan;
 	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
 	int (*desc_free)(struct dma_async_tx_descriptor *);
 	dma_async_tx_callback callback;
@@ -66115,9 +82652,6 @@
 	struct dmaengine_unmap_data *unmap;
 	enum dma_desc_metadata_mode desc_metadata_mode;
 	struct dma_descriptor_metadata_ops *metadata_ops;
-	struct dma_async_tx_descriptor *next;
-	struct dma_async_tx_descriptor *parent;
-	spinlock_t lock;
 };
 
 struct dma_tx_state {
@@ -66360,294 +82894,6 @@
 	struct rio_mport *mport;
 };
 
-enum rio_link_speed {
-	RIO_LINK_DOWN = 0,
-	RIO_LINK_125 = 1,
-	RIO_LINK_250 = 2,
-	RIO_LINK_312 = 3,
-	RIO_LINK_500 = 4,
-	RIO_LINK_625 = 5,
-};
-
-enum rio_mport_flags {
-	RIO_MPORT_DMA = 1,
-	RIO_MPORT_DMA_SG = 2,
-	RIO_MPORT_IBSG = 4,
-};
-
-struct kfifo {
-	union {
-		struct __kfifo kfifo;
-		unsigned char *type;
-		const unsigned char *const_type;
-		char (*rectype)[0];
-		void *ptr;
-		const void *ptr_const;
-	};
-	unsigned char buf[0];
-};
-
-enum {
-	DBG_NONE = 0,
-	DBG_INIT = 1,
-	DBG_EXIT = 2,
-	DBG_MPORT = 4,
-	DBG_MAINT = 8,
-	DBG_DMA = 16,
-	DBG_DMAV = 32,
-	DBG_IBW = 64,
-	DBG_EVENT = 128,
-	DBG_OBW = 256,
-	DBG_DBELL = 512,
-	DBG_OMSG = 1024,
-	DBG_IMSG = 2048,
-	DBG_ALL = 4294967295,
-};
-
-struct tsi721_dma_desc {
-	__le32 type_id;
-	__le32 bcount;
-	union {
-		__le32 raddr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 raddr_hi;
-		__le32 next_hi;
-	};
-	union {
-		struct {
-			__le32 bufptr_lo;
-			__le32 bufptr_hi;
-			__le32 s_dist;
-			__le32 s_size;
-		} t1;
-		__le32 data[4];
-		u32 reserved[4];
-	};
-};
-
-struct tsi721_imsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	__le32 bufptr_lo;
-	__le32 bufptr_hi;
-	u32 reserved[12];
-};
-
-struct tsi721_omsg_desc {
-	__le32 type_id;
-	__le32 msg_info;
-	union {
-		__le32 bufptr_lo;
-		__le32 next_lo;
-	};
-	union {
-		__le32 bufptr_hi;
-		__le32 next_hi;
-	};
-};
-
-enum dma_dtype {
-	DTYPE1 = 1,
-	DTYPE2 = 2,
-	DTYPE3 = 3,
-	DTYPE4 = 4,
-	DTYPE5 = 5,
-	DTYPE6 = 6,
-};
-
-enum dma_rtype {
-	NREAD = 0,
-	LAST_NWRITE_R = 1,
-	ALL_NWRITE = 2,
-	ALL_NWRITE_R = 3,
-	MAINT_RD = 4,
-	MAINT_WR = 5,
-};
-
-struct tsi721_tx_desc {
-	struct dma_async_tx_descriptor txd;
-	u16 destid;
-	u64 rio_addr;
-	u8 rio_addr_u;
-	enum dma_rtype rtype;
-	struct list_head desc_node;
-	struct scatterlist *sg;
-	unsigned int sg_len;
-	enum dma_status status;
-};
-
-struct tsi721_bdma_chan {
-	int id;
-	void *regs;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-	u32 sts_rdptr;
-	u32 wr_count;
-	u32 wr_count_next;
-	struct dma_chan dchan;
-	struct tsi721_tx_desc *tx_desc;
-	spinlock_t lock;
-	struct tsi721_tx_desc *active_tx;
-	struct list_head queue;
-	struct list_head free_list;
-	struct tasklet_struct tasklet;
-	bool active;
-};
-
-struct tsi721_bdma_maint {
-	int ch_id;
-	int bd_num;
-	void *bd_base;
-	dma_addr_t bd_phys;
-	void *sts_base;
-	dma_addr_t sts_phys;
-	int sts_size;
-};
-
-struct tsi721_imsg_ring {
-	u32 size;
-	void *buf_base;
-	dma_addr_t buf_phys;
-	void *imfq_base;
-	dma_addr_t imfq_phys;
-	void *imd_base;
-	dma_addr_t imd_phys;
-	void *imq_base[512];
-	u32 rx_slot;
-	void *dev_id;
-	u32 fq_wrptr;
-	u32 desc_rdptr;
-	spinlock_t lock;
-};
-
-struct tsi721_omsg_ring {
-	u32 size;
-	void *omd_base;
-	dma_addr_t omd_phys;
-	void *omq_base[512];
-	dma_addr_t omq_phys[512];
-	void *sts_base;
-	dma_addr_t sts_phys;
-	u32 sts_size;
-	u32 sts_rdptr;
-	u32 tx_slot;
-	void *dev_id;
-	u32 wr_count;
-	spinlock_t lock;
-};
-
-enum tsi721_flags {
-	TSI721_USING_MSI = 1,
-	TSI721_USING_MSIX = 2,
-	TSI721_IMSGID_SET = 4,
-};
-
-enum tsi721_msix_vect {
-	TSI721_VECT_IDB = 0,
-	TSI721_VECT_PWRX = 1,
-	TSI721_VECT_OMB0_DONE = 2,
-	TSI721_VECT_OMB1_DONE = 3,
-	TSI721_VECT_OMB2_DONE = 4,
-	TSI721_VECT_OMB3_DONE = 5,
-	TSI721_VECT_OMB0_INT = 6,
-	TSI721_VECT_OMB1_INT = 7,
-	TSI721_VECT_OMB2_INT = 8,
-	TSI721_VECT_OMB3_INT = 9,
-	TSI721_VECT_IMB0_RCV = 10,
-	TSI721_VECT_IMB1_RCV = 11,
-	TSI721_VECT_IMB2_RCV = 12,
-	TSI721_VECT_IMB3_RCV = 13,
-	TSI721_VECT_IMB0_INT = 14,
-	TSI721_VECT_IMB1_INT = 15,
-	TSI721_VECT_IMB2_INT = 16,
-	TSI721_VECT_IMB3_INT = 17,
-	TSI721_VECT_DMA0_DONE = 18,
-	TSI721_VECT_DMA1_DONE = 19,
-	TSI721_VECT_DMA2_DONE = 20,
-	TSI721_VECT_DMA3_DONE = 21,
-	TSI721_VECT_DMA4_DONE = 22,
-	TSI721_VECT_DMA5_DONE = 23,
-	TSI721_VECT_DMA6_DONE = 24,
-	TSI721_VECT_DMA7_DONE = 25,
-	TSI721_VECT_DMA0_INT = 26,
-	TSI721_VECT_DMA1_INT = 27,
-	TSI721_VECT_DMA2_INT = 28,
-	TSI721_VECT_DMA3_INT = 29,
-	TSI721_VECT_DMA4_INT = 30,
-	TSI721_VECT_DMA5_INT = 31,
-	TSI721_VECT_DMA6_INT = 32,
-	TSI721_VECT_DMA7_INT = 33,
-	TSI721_VECT_MAX = 34,
-};
-
-struct msix_irq {
-	u16 vector;
-	char irq_name[64];
-};
-
-struct tsi721_ib_win_mapping {
-	struct list_head node;
-	dma_addr_t lstart;
-};
-
-struct tsi721_ib_win {
-	u64 rstart;
-	u32 size;
-	dma_addr_t lstart;
-	bool active;
-	bool xlat;
-	struct list_head mappings;
-};
-
-struct tsi721_obw_bar {
-	u64 base;
-	u64 size;
-	u64 free;
-};
-
-struct tsi721_ob_win {
-	u64 base;
-	u32 size;
-	u16 destid;
-	u64 rstart;
-	bool active;
-	struct tsi721_obw_bar *pbar;
-};
-
-struct tsi721_device {
-	struct pci_dev *pdev;
-	struct rio_mport mport;
-	u32 flags;
-	void *regs;
-	struct msix_irq msix[34];
-	void *odb_base;
-	void *idb_base;
-	dma_addr_t idb_dma;
-	struct work_struct idb_work;
-	u32 db_discard_count;
-	struct work_struct pw_work;
-	struct kfifo pw_fifo;
-	spinlock_t pw_fifo_lock;
-	u32 pw_discard_count;
-	struct tsi721_bdma_maint mdma;
-	struct tsi721_bdma_chan bdma[8];
-	int imsg_init[8];
-	struct tsi721_imsg_ring imsg_ring[8];
-	int omsg_init[4];
-	struct tsi721_omsg_ring omsg_ring[4];
-	struct tsi721_ib_win ib_win[8];
-	int ibwin_cnt;
-	struct tsi721_obw_bar p2r_bar[2];
-	struct tsi721_ob_win ob_win[8];
-	int obwin_cnt;
-};
-
 enum hdmi_infoframe_type {
 	HDMI_INFOFRAME_TYPE_VENDOR = 129,
 	HDMI_INFOFRAME_TYPE_AVI = 130,
@@ -66747,7 +82993,7 @@
 };
 
 enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
+	HDMI_STATIC_METADATA_TYPE1 = 0,
 };
 
 enum hdmi_eotf {
@@ -66931,155 +83177,22 @@
 	struct hdmi_drm_infoframe drm;
 };
 
-enum con_scroll {
-	SM_UP = 0,
-	SM_DOWN = 1,
+struct vc {
+	struct vc_data *d;
+	struct work_struct SAK_work;
 };
 
-enum vc_intensity {
-	VCI_HALF_BRIGHT = 0,
-	VCI_NORMAL = 1,
-	VCI_BOLD = 2,
-	VCI_MASK = 3,
-};
-
-struct vc_data;
-
-struct console_font;
-
-struct consw {
-	struct module *owner;
-	const char * (*con_startup)();
-	void (*con_init)(struct vc_data *, int);
-	void (*con_deinit)(struct vc_data *);
-	void (*con_clear)(struct vc_data *, int, int, int, int);
-	void (*con_putc)(struct vc_data *, int, int, int);
-	void (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);
-	void (*con_cursor)(struct vc_data *, int);
-	bool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);
-	int (*con_switch)(struct vc_data *);
-	int (*con_blank)(struct vc_data *, int, int);
-	int (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);
-	int (*con_font_get)(struct vc_data *, struct console_font *);
-	int (*con_font_default)(struct vc_data *, struct console_font *, char *);
-	int (*con_font_copy)(struct vc_data *, int);
-	int (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);
-	void (*con_set_palette)(struct vc_data *, const unsigned char *);
-	void (*con_scrolldelta)(struct vc_data *, int);
-	int (*con_set_origin)(struct vc_data *);
-	void (*con_save_screen)(struct vc_data *);
-	u8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);
-	void (*con_invert_region)(struct vc_data *, u16 *, int);
-	u16 * (*con_screen_pos)(const struct vc_data *, int);
-	long unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);
-	void (*con_flush_scrollback)(struct vc_data *);
-	int (*con_debug_enter)(struct vc_data *);
-	int (*con_debug_leave)(struct vc_data *);
-};
-
-struct vc_state {
-	unsigned int x;
-	unsigned int y;
-	unsigned char color;
-	unsigned char Gx_charset[2];
-	unsigned int charset: 1;
-	enum vc_intensity intensity;
-	bool italic;
-	bool underline;
-	bool blink;
-	bool reverse;
-};
-
-struct console_font {
-	unsigned int width;
-	unsigned int height;
-	unsigned int charcount;
-	unsigned char *data;
-};
-
-struct vt_mode {
-	char mode;
-	char waitv;
-	short int relsig;
-	short int acqsig;
-	short int frsig;
-};
-
-struct uni_pagedir;
-
-struct uni_screen;
-
-struct vc_data {
-	struct tty_port port;
-	struct vc_state state;
-	struct vc_state saved_state;
-	short unsigned int vc_num;
-	unsigned int vc_cols;
-	unsigned int vc_rows;
-	unsigned int vc_size_row;
-	unsigned int vc_scan_lines;
-	long unsigned int vc_origin;
-	long unsigned int vc_scr_end;
-	long unsigned int vc_visible_origin;
-	unsigned int vc_top;
-	unsigned int vc_bottom;
-	const struct consw *vc_sw;
-	short unsigned int *vc_screenbuf;
-	unsigned int vc_screenbuf_size;
-	unsigned char vc_mode;
-	unsigned char vc_attr;
-	unsigned char vc_def_color;
-	unsigned char vc_ulcolor;
-	unsigned char vc_itcolor;
-	unsigned char vc_halfcolor;
-	unsigned int vc_cursor_type;
-	short unsigned int vc_complement_mask;
-	short unsigned int vc_s_complement_mask;
-	long unsigned int vc_pos;
-	short unsigned int vc_hi_font_mask;
-	struct console_font vc_font;
-	short unsigned int vc_video_erase_char;
-	unsigned int vc_state;
-	unsigned int vc_npar;
-	unsigned int vc_par[16];
-	struct vt_mode vt_mode;
-	struct pid *vt_pid;
-	int vt_newvt;
-	wait_queue_head_t paste_wait;
-	unsigned int vc_disp_ctrl: 1;
-	unsigned int vc_toggle_meta: 1;
-	unsigned int vc_decscnm: 1;
-	unsigned int vc_decom: 1;
-	unsigned int vc_decawm: 1;
-	unsigned int vc_deccm: 1;
-	unsigned int vc_decim: 1;
-	unsigned int vc_priv: 3;
-	unsigned int vc_need_wrap: 1;
-	unsigned int vc_can_do_color: 1;
-	unsigned int vc_report_mouse: 2;
-	unsigned char vc_utf: 1;
-	unsigned char vc_utf_count;
-	int vc_utf_char;
-	long unsigned int vc_tab_stop[4];
-	unsigned char vc_palette[48];
-	short unsigned int *vc_translate;
-	unsigned int vc_resize_user;
-	unsigned int vc_bell_pitch;
-	unsigned int vc_bell_duration;
-	short unsigned int vc_cur_blink_ms;
-	struct vc_data **vc_display_fg;
-	struct uni_pagedir *vc_uni_pagedir;
-	struct uni_pagedir **vc_uni_pagedir_loc;
-	struct uni_screen *vc_uni_screen;
-};
-
-struct linux_logo {
-	int type;
-	unsigned int width;
-	unsigned int height;
-	unsigned int clutsize;
-	const unsigned char *clut;
-	const unsigned char *data;
+struct vgastate {
+	void *vgabase;
+	long unsigned int membase;
+	__u32 memsize;
+	__u32 flags;
+	__u32 depth;
+	__u32 num_attr;
+	__u32 num_crtc;
+	__u32 num_gfx;
+	__u32 num_seq;
+	void *vidstate;
 };
 
 struct fb_fix_screeninfo {
@@ -67282,6 +83395,8 @@
 
 struct backlight_device;
 
+struct fb_deferred_io_pageref;
+
 struct fb_deferred_io;
 
 struct fb_ops;
@@ -67291,7 +83406,7 @@
 struct apertures_struct;
 
 struct fb_info {
-	atomic_t count;
+	refcount_t count;
 	int node;
 	int flags;
 	int fbcon_rotate_hint;
@@ -67300,7 +83415,6 @@
 	struct fb_var_screeninfo var;
 	struct fb_fix_screeninfo fix;
 	struct fb_monspecs monspecs;
-	struct work_struct queue;
 	struct fb_pixmap pixmap;
 	struct fb_pixmap sprite;
 	struct fb_cmap cmap;
@@ -67310,6 +83424,8 @@
 	struct mutex bl_curve_mutex;
 	u8 bl_curve[128];
 	struct delayed_work deferred_work;
+	long unsigned int npagerefs;
+	struct fb_deferred_io_pageref *pagerefs;
 	struct fb_deferred_io *fbdefio;
 	const struct fb_ops *fbops;
 	struct device *device;
@@ -67327,6 +83443,7 @@
 	void *par;
 	struct apertures_struct *apertures;
 	bool skip_vt_switch;
+	bool forced_out;
 };
 
 struct fb_blit_caps {
@@ -67336,10 +83453,17 @@
 	u32 flags;
 };
 
+struct fb_deferred_io_pageref {
+	struct page *page;
+	long unsigned int offset;
+	struct list_head list;
+};
+
 struct fb_deferred_io {
 	long unsigned int delay;
+	bool sort_pagereflist;
 	struct mutex lock;
-	struct list_head pagelist;
+	struct list_head pagereflist;
 	void (*first_io)(struct fb_info *);
 	void (*deferred_io)(struct fb_info *, struct list_head *);
 };
@@ -67505,14 +83629,6 @@
 	struct fb_videomode mode;
 };
 
-struct logo_data {
-	int depth;
-	int needs_directpalette;
-	int needs_truepalette;
-	int needs_cmapreset;
-	const struct linux_logo *logo;
-};
-
 struct fb_fix_screeninfo32 {
 	char id[16];
 	compat_caddr_t smem_start;
@@ -67593,8 +83709,6 @@
 	u32 vtotal;
 };
 
-typedef unsigned int u_int;
-
 struct fb_cvt_data {
 	u32 xres;
 	u32 yres;
@@ -67623,22 +83737,14 @@
 
 typedef unsigned char u_char;
 
-typedef short unsigned int u_short;
-
 struct fb_con2fbmap {
 	__u32 console;
 	__u32 framebuffer;
 };
 
-struct vc {
-	struct vc_data *d;
-	struct work_struct SAK_work;
-};
-
 struct fbcon_display {
 	const u_char *fontdata;
 	int userfont;
-	u_short scrollmode;
 	u_short inverse;
 	short int yscroll;
 	int vrows;
@@ -67669,7 +83775,7 @@
 	int (*update_start)(struct fb_info *);
 	int (*rotate_font)(struct fb_info *, struct vc_data *);
 	struct fb_var_screeninfo var;
-	struct timer_list cursor_timer;
+	struct delayed_work cursor_work;
 	struct fb_cursor cursor_state;
 	struct fbcon_display *p;
 	struct fb_info *info;
@@ -67680,7 +83786,7 @@
 	int blank_state;
 	int graphics;
 	int save_graphics;
-	int flags;
+	bool initialized;
 	int rotate;
 	int cur_rotate;
 	char *cursor_data;
@@ -67697,216 +83803,205 @@
 	FBCON_LOGO_DONTSHOW = 4294967293,
 };
 
+typedef long unsigned int u_long;
+
 enum {
-	CLCD_CAP_RGB444 = 1,
-	CLCD_CAP_RGB5551 = 2,
-	CLCD_CAP_RGB565 = 4,
-	CLCD_CAP_RGB888 = 8,
-	CLCD_CAP_BGR444 = 16,
-	CLCD_CAP_BGR5551 = 32,
-	CLCD_CAP_BGR565 = 64,
-	CLCD_CAP_BGR888 = 128,
-	CLCD_CAP_444 = 17,
-	CLCD_CAP_5551 = 34,
-	CLCD_CAP_565 = 68,
-	CLCD_CAP_888 = 136,
-	CLCD_CAP_RGB = 15,
-	CLCD_CAP_BGR = 240,
-	CLCD_CAP_ALL = 255,
-};
-
-struct clcd_panel {
-	struct fb_videomode mode;
-	short int width;
-	short int height;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	u32 caps;
-	unsigned int bpp: 8;
-	unsigned int fixedtimings: 1;
-	unsigned int grayscale: 1;
-	unsigned int connector;
-	struct backlight_device *backlight;
-	bool bgr_connection;
-};
-
-struct clcd_regs {
-	u32 tim0;
-	u32 tim1;
-	u32 tim2;
-	u32 tim3;
-	u32 cntl;
-	long unsigned int pixclock;
-};
-
-struct clcd_fb;
-
-struct clcd_board {
-	const char *name;
-	u32 caps;
-	int (*check)(struct clcd_fb *, struct fb_var_screeninfo *);
-	void (*decode)(struct clcd_fb *, struct clcd_regs *);
-	void (*disable)(struct clcd_fb *);
-	void (*enable)(struct clcd_fb *);
-	int (*setup)(struct clcd_fb *);
-	int (*mmap)(struct clcd_fb *, struct vm_area_struct *);
-	void (*remove)(struct clcd_fb *);
-};
-
-struct clcd_fb {
-	struct fb_info fb;
-	struct amba_device *dev;
-	struct clk *clk;
-	struct clcd_panel *panel;
-	struct clcd_board *board;
-	void *board_data;
-	void *regs;
-	u16 off_ienb;
-	u16 off_cntl;
-	u32 clcd_cntl;
-	u32 cmap[16];
-	bool clk_enabled;
-};
-
-struct timing_entry {
-	u32 min;
-	u32 typ;
-	u32 max;
-};
-
-struct display_timing {
-	struct timing_entry pixelclock;
-	struct timing_entry hactive;
-	struct timing_entry hfront_porch;
-	struct timing_entry hback_porch;
-	struct timing_entry hsync_len;
-	struct timing_entry vactive;
-	struct timing_entry vfront_porch;
-	struct timing_entry vback_porch;
-	struct timing_entry vsync_len;
-	enum display_flags flags;
-};
-
-struct xenfb_update {
-	uint8_t type;
-	int32_t x;
-	int32_t y;
-	int32_t width;
-	int32_t height;
-};
-
-struct xenfb_resize {
-	uint8_t type;
-	int32_t width;
-	int32_t height;
-	int32_t stride;
-	int32_t depth;
-	int32_t offset;
-};
-
-union xenfb_out_event {
-	uint8_t type;
-	struct xenfb_update update;
-	struct xenfb_resize resize;
-	char pad[40];
-};
-
-struct xenfb_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-	int32_t width;
-	int32_t height;
-	uint32_t line_length;
-	uint32_t mem_length;
-	uint8_t depth;
-	long unsigned int pd[256];
-};
-
-enum xenbus_state {
-	XenbusStateUnknown = 0,
-	XenbusStateInitialising = 1,
-	XenbusStateInitWait = 2,
-	XenbusStateInitialised = 3,
-	XenbusStateConnected = 4,
-	XenbusStateClosing = 5,
-	XenbusStateClosed = 6,
-	XenbusStateReconfiguring = 7,
-	XenbusStateReconfigured = 8,
-};
-
-struct xenbus_watch {
-	struct list_head list;
-	const char *node;
-	unsigned int nr_pending;
-	bool (*will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*callback)(struct xenbus_watch *, const char *, const char *);
-};
-
-struct xenbus_device {
-	const char *devicetype;
-	const char *nodename;
-	const char *otherend;
-	int otherend_id;
-	struct xenbus_watch otherend_watch;
-	struct device dev;
-	enum xenbus_state state;
-	struct completion down;
-	struct work_struct work;
-	struct semaphore reclaim_sem;
-};
-
-struct xenbus_device_id {
-	char devicetype[32];
-};
-
-struct xenbus_driver {
-	const char *name;
-	const struct xenbus_device_id *ids;
-	bool allow_rebind;
-	int (*probe)(struct xenbus_device *, const struct xenbus_device_id *);
-	void (*otherend_changed)(struct xenbus_device *, enum xenbus_state);
-	int (*remove)(struct xenbus_device *);
-	int (*suspend)(struct xenbus_device *);
-	int (*resume)(struct xenbus_device *);
-	int (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);
-	struct device_driver driver;
-	int (*read_otherend_details)(struct xenbus_device *);
-	int (*is_ready)(struct xenbus_device *);
-	void (*reclaim_memory)(struct xenbus_device *);
-};
-
-struct xenbus_transaction {
-	u32 id;
-};
-
-struct xenfb_info {
-	unsigned char *fb;
-	struct fb_info *fb_info;
-	int x1;
-	int y1;
-	int x2;
-	int y2;
-	spinlock_t dirty_lock;
-	int nr_pages;
-	int irq;
-	struct xenfb_page *page;
-	long unsigned int *gfns;
-	int update_wanted;
-	int feature_resize;
-	struct xenfb_resize resize;
-	int resize_dpy;
-	spinlock_t resize_lock;
-	struct xenbus_device *xbdev;
+	S1SA = 0,
+	S2SA = 1,
+	SP = 2,
+	DSA = 3,
+	CNT = 4,
+	DP_OCTL = 5,
+	CLR = 6,
+	BI = 8,
+	MBC = 9,
+	BLTCTL = 10,
+	HES = 12,
+	HEB = 13,
+	HSB = 14,
+	HT = 15,
+	VES = 16,
+	VEB = 17,
+	VSB = 18,
+	VT = 19,
+	HCIV = 20,
+	VCIV = 21,
+	TCDR = 22,
+	VIL = 23,
+	STGCTL = 24,
+	SSR = 25,
+	HRIR = 26,
+	SPR = 27,
+	CMR = 28,
+	SRGCTL = 29,
+	RRCIV = 30,
+	RRSC = 31,
+	RRCR = 34,
+	GIOE = 32,
+	GIO = 33,
+	SCR = 35,
+	SSTATUS = 36,
+	PRC = 37,
 };
 
 enum {
-	KPARAM_MEM = 0,
-	KPARAM_WIDTH = 1,
-	KPARAM_HEIGHT = 2,
-	KPARAM_CNT = 3,
+	PADDRW = 0,
+	PDATA = 4,
+	PPMASK = 8,
+	PADDRR = 12,
+	PIDXLO = 16,
+	PIDXHI = 20,
+	PIDXDATA = 24,
+	PIDXCTL = 28,
+};
+
+enum {
+	CLKCTL = 2,
+	SYNCCTL = 3,
+	HSYNCPOS = 4,
+	PWRMNGMT = 5,
+	DACOP = 6,
+	PALETCTL = 7,
+	SYSCLKCTL = 8,
+	PIXFMT = 10,
+	BPP8 = 11,
+	BPP16 = 12,
+	BPP24 = 13,
+	BPP32 = 14,
+	PIXCTL1 = 16,
+	PIXCTL2 = 17,
+	SYSCLKN = 21,
+	SYSCLKM = 22,
+	SYSCLKP = 23,
+	SYSCLKC = 24,
+	PIXM0 = 32,
+	PIXN0 = 33,
+	PIXP0 = 34,
+	PIXC0 = 35,
+	CURSCTL = 48,
+	CURSXLO = 49,
+	CURSXHI = 50,
+	CURSYLO = 51,
+	CURSYHI = 52,
+	CURSHOTX = 53,
+	CURSHOTY = 54,
+	CURSACCTL = 55,
+	CURSACATTR = 56,
+	CURS1R = 64,
+	CURS1G = 65,
+	CURS1B = 66,
+	CURS2R = 67,
+	CURS2G = 68,
+	CURS2B = 69,
+	CURS3R = 70,
+	CURS3G = 71,
+	CURS3B = 72,
+	BORDR = 96,
+	BORDG = 97,
+	BORDB = 98,
+	MISCTL1 = 112,
+	MISCTL2 = 113,
+	MISCTL3 = 114,
+	KEYCTL = 120,
+};
+
+enum {
+	TVPADDRW = 0,
+	TVPPDATA = 4,
+	TVPPMASK = 8,
+	TVPPADRR = 12,
+	TVPCADRW = 16,
+	TVPCDATA = 20,
+	TVPCADRR = 28,
+	TVPDCCTL = 36,
+	TVPIDATA = 40,
+	TVPCRDAT = 44,
+	TVPCXPOL = 48,
+	TVPCXPOH = 52,
+	TVPCYPOL = 56,
+	TVPCYPOH = 60,
+};
+
+enum {
+	TVPIRREV = 1,
+	TVPIRICC = 6,
+	TVPIRBRC = 7,
+	TVPIRLAC = 15,
+	TVPIRTCC = 24,
+	TVPIRMXC = 25,
+	TVPIRCLS = 26,
+	TVPIRPPG = 28,
+	TVPIRGEC = 29,
+	TVPIRMIC = 30,
+	TVPIRPLA = 44,
+	TVPIRPPD = 45,
+	TVPIRMPD = 46,
+	TVPIRLPD = 47,
+	TVPIRCKL = 48,
+	TVPIRCKH = 49,
+	TVPIRCRL = 50,
+	TVPIRCRH = 51,
+	TVPIRCGL = 52,
+	TVPIRCGH = 53,
+	TVPIRCBL = 54,
+	TVPIRCBH = 55,
+	TVPIRCKC = 56,
+	TVPIRMLC = 57,
+	TVPIRSEN = 58,
+	TVPIRTMD = 59,
+	TVPIRRML = 60,
+	TVPIRRMM = 61,
+	TVPIRRMS = 62,
+	TVPIRDID = 63,
+	TVPIRRES = 255,
+};
+
+struct initvalues {
+	__u8 addr;
+	__u8 value;
+};
+
+struct imstt_regvals {
+	__u32 pitch;
+	__u16 hes;
+	__u16 heb;
+	__u16 hsb;
+	__u16 ht;
+	__u16 ves;
+	__u16 veb;
+	__u16 vsb;
+	__u16 vt;
+	__u16 vil;
+	__u8 pclk_m;
+	__u8 pclk_n;
+	__u8 pclk_p;
+	__u8 mlc[3];
+	__u8 lckl_p[3];
+};
+
+struct imstt_par {
+	struct imstt_regvals init;
+	__u32 *dc_regs;
+	long unsigned int cmap_regs_phys;
+	__u8 *cmap_regs;
+	__u32 ramdac;
+	__u32 palette[16];
+};
+
+enum {
+	IBM = 0,
+	TVP = 1,
+};
+
+struct chips_init_reg {
+	unsigned char addr;
+	unsigned char data;
+};
+
+struct vesafb_par {
+	u32 pseudo_palette[256];
+	int wc_cookie;
+	struct resource *region;
 };
 
 struct acpi_table_bgrt {
@@ -67948,38 +84043,23 @@
 	u32 colors_important;
 };
 
-struct simplefb_format {
-	const char *name;
-	u32 bits_per_pixel;
-	struct fb_bitfield red;
-	struct fb_bitfield green;
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;
-	u32 fourcc;
+struct timing_entry {
+	u32 min;
+	u32 typ;
+	u32 max;
 };
 
-struct simplefb_platform_data {
-	u32 width;
-	u32 height;
-	u32 stride;
-	const char *format;
-};
-
-struct simplefb_params {
-	u32 width;
-	u32 height;
-	u32 stride;
-	struct simplefb_format *format;
-};
-
-struct simplefb_par {
-	u32 palette[16];
-	bool clks_enabled;
-	unsigned int clk_count;
-	struct clk **clks;
-	bool regulators_enabled;
-	u32 regulator_count;
-	struct regulator **regulators;
+struct display_timing {
+	struct timing_entry pixelclock;
+	struct timing_entry hactive;
+	struct timing_entry hfront_porch;
+	struct timing_entry hback_porch;
+	struct timing_entry hsync_len;
+	struct timing_entry vactive;
+	struct timing_entry vfront_porch;
+	struct timing_entry vback_porch;
+	struct timing_entry vsync_len;
+	enum display_flags flags;
 };
 
 struct display_timings {
@@ -67988,6 +84068,185 @@
 	struct display_timing **timings;
 };
 
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+};
+
+enum {
+	C1E_PROMOTION_PRESERVE = 0,
+	C1E_PROMOTION_ENABLE = 1,
+	C1E_PROMOTION_DISABLE = 2,
+};
+
+struct idle_cpu {
+	struct cpuidle_state *state_table;
+	long unsigned int auto_demotion_disable_flags;
+	bool byt_auto_demotion_disable_flag;
+	bool disable_promotion_to_c1e;
+	bool use_acpi;
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);
+	int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);
+};
+
+struct acpi_lpi_state {
+	u32 min_residency;
+	u32 wake_latency;
+	u32 flags;
+	u32 arch_flags;
+	u32 res_cnt_freq;
+	u32 enable_parent_state;
+	u64 address;
+	u8 index;
+	u8 entry_method;
+	char desc[32];
+};
+
+struct acpi_processor_power {
+	int count;
+	union {
+		struct acpi_processor_cx states[8];
+		struct acpi_lpi_state lpi_states[8];
+	};
+	int timer_broadcast_on_state;
+};
+
+struct acpi_psd_package {
+	u64 num_entries;
+	u64 revision;
+	u64 domain;
+	u64 coord_type;
+	u64 num_processors;
+};
+
+struct acpi_pct_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 reserved;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_processor_px {
+	u64 core_frequency;
+	u64 power;
+	u64 transition_latency;
+	u64 bus_master_latency;
+	u64 control;
+	u64 status;
+};
+
+struct acpi_processor_performance {
+	unsigned int state;
+	unsigned int platform_limit;
+	struct acpi_pct_register control_register;
+	struct acpi_pct_register status_register;
+	short: 16;
+	unsigned int state_count;
+	int: 32;
+	struct acpi_processor_px *states;
+	struct acpi_psd_package domain_info;
+	cpumask_var_t shared_cpu_map;
+	unsigned int shared_type;
+	int: 32;
+} __attribute__((packed));
+
+struct acpi_tsd_package {
+	u64 num_entries;
+	u64 revision;
+	u64 domain;
+	u64 coord_type;
+	u64 num_processors;
+};
+
+struct acpi_processor_tx_tss {
+	u64 freqpercentage;
+	u64 power;
+	u64 transition_latency;
+	u64 control;
+	u64 status;
+};
+
+struct acpi_processor_tx {
+	u16 power;
+	u16 performance;
+};
+
+struct acpi_processor;
+
+struct acpi_processor_throttling {
+	unsigned int state;
+	unsigned int platform_limit;
+	struct acpi_pct_register control_register;
+	struct acpi_pct_register status_register;
+	short: 16;
+	unsigned int state_count;
+	int: 32;
+	struct acpi_processor_tx_tss *states_tss;
+	struct acpi_tsd_package domain_info;
+	cpumask_var_t shared_cpu_map;
+	int (*acpi_processor_get_throttling)(struct acpi_processor *);
+	int (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool);
+	u32 address;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 tsd_valid_flag;
+	char: 8;
+	unsigned int shared_type;
+	struct acpi_processor_tx states[16];
+	int: 32;
+} __attribute__((packed));
+
+struct acpi_processor_lx {
+	int px;
+	int tx;
+};
+
+struct acpi_processor_limit {
+	struct acpi_processor_lx state;
+	struct acpi_processor_lx thermal;
+	struct acpi_processor_lx user;
+};
+
+struct acpi_processor {
+	acpi_handle handle;
+	u32 acpi_id;
+	phys_cpuid_t phys_id;
+	u32 id;
+	u32 pblk;
+	int performance_platform_limit;
+	int throttling_platform_limit;
+	struct acpi_processor_flags flags;
+	struct acpi_processor_power power;
+	struct acpi_processor_performance *performance;
+	struct acpi_processor_throttling throttling;
+	struct acpi_processor_limit limit;
+	struct thermal_cooling_device *cdev;
+	struct device *dev;
+	struct freq_qos_request perflib_req;
+	struct freq_qos_request thermal_req;
+};
+
 enum ipmi_addr_src {
 	SI_INVALID = 0,
 	SI_HOTMOD = 1,
@@ -68012,6 +84271,7 @@
 	SI_KCS = 1,
 	SI_SMIC = 2,
 	SI_BT = 3,
+	SI_TYPE_MAX = 4,
 };
 
 enum ipmi_addr_space {
@@ -68062,48 +84322,12 @@
 	u16 validation_count;
 };
 
-struct acpi_madt_local_apic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u32 lapic_flags;
+enum acpi_cedt_type {
+	ACPI_CEDT_TYPE_CHBS = 0,
+	ACPI_CEDT_TYPE_CFMWS = 1,
+	ACPI_CEDT_TYPE_RESERVED = 2,
 };
 
-struct acpi_madt_io_apic {
-	struct acpi_subtable_header header;
-	u8 id;
-	u8 reserved;
-	u32 address;
-	u32 global_irq_base;
-};
-
-struct acpi_madt_interrupt_override {
-	struct acpi_subtable_header header;
-	u8 bus;
-	u8 source_irq;
-	u32 global_irq;
-	u16 inti_flags;
-} __attribute__((packed));
-
-struct acpi_madt_nmi_source {
-	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 global_irq;
-};
-
-struct acpi_madt_local_apic_nmi {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u16 inti_flags;
-	u8 lint;
-} __attribute__((packed));
-
-struct acpi_madt_local_apic_override {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u64 address;
-} __attribute__((packed));
-
 struct acpi_madt_io_sapic {
 	struct acpi_subtable_header header;
 	u8 id;
@@ -68112,17 +84336,6 @@
 	u64 address;
 };
 
-struct acpi_madt_local_sapic {
-	struct acpi_subtable_header header;
-	u8 processor_id;
-	u8 id;
-	u8 eid;
-	u8 reserved[3];
-	u32 lapic_flags;
-	u32 uid;
-	char uid_string[1];
-} __attribute__((packed));
-
 struct acpi_madt_interrupt_source {
 	struct acpi_subtable_header header;
 	u16 inti_flags;
@@ -68134,31 +84347,43 @@
 	u32 flags;
 };
 
-struct acpi_madt_local_x2apic {
+struct acpi_madt_generic_interrupt {
 	struct acpi_subtable_header header;
 	u16 reserved;
-	u32 local_apic_id;
-	u32 lapic_flags;
+	u32 cpu_interface_number;
 	u32 uid;
-};
+	u32 flags;
+	u32 parking_version;
+	u32 performance_interrupt;
+	u64 parked_address;
+	u64 base_address;
+	u64 gicv_base_address;
+	u64 gich_base_address;
+	u32 vgic_interrupt;
+	u64 gicr_base_address;
+	u64 arm_mpidr;
+	u8 efficiency_class;
+	u8 reserved2[1];
+	u16 spe_interrupt;
+} __attribute__((packed));
 
-struct acpi_madt_local_x2apic_nmi {
+struct acpi_madt_generic_distributor {
 	struct acpi_subtable_header header;
-	u16 inti_flags;
-	u32 uid;
-	u8 lint;
-	u8 reserved[3];
+	u16 reserved;
+	u32 gic_id;
+	u64 base_address;
+	u32 global_irq_base;
+	u8 version;
+	u8 reserved2[3];
 };
 
-struct acpi_subtable_proc {
-	int id;
-	acpi_tbl_entry_handler handler;
-	int count;
-};
+typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
 
 enum acpi_subtable_type {
 	ACPI_SUBTABLE_COMMON = 0,
 	ACPI_SUBTABLE_HMAT = 1,
+	ACPI_SUBTABLE_PRMT = 2,
+	ACPI_SUBTABLE_CEDT = 3,
 };
 
 struct acpi_subtable_entry {
@@ -68166,6 +84391,23 @@
 	enum acpi_subtable_type type;
 };
 
+enum acpi_predicate {
+	all_versions = 0,
+	less_than_or_equal = 1,
+	equal = 2,
+	greater_than_or_equal = 3,
+};
+
+struct acpi_platform_list {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	char *table;
+	enum acpi_predicate pred;
+	char *reason;
+	u32 data;
+};
+
 typedef char *acpi_string;
 
 struct acpi_osi_entry {
@@ -68193,16 +84435,6 @@
 
 typedef void (*acpi_osd_exec_callback)(void *);
 
-typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
-
-typedef void (*acpi_object_handler)(acpi_handle, void *);
-
-typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
-
-typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
-
 struct acpi_pci_id {
 	u16 segment;
 	u16 bus;
@@ -68210,20 +84442,6 @@
 	u16 function;
 };
 
-struct acpi_mem_mapping {
-	acpi_physical_address physical_address;
-	u8 *logical_address;
-	acpi_size length;
-	struct acpi_mem_mapping *next_mm;
-};
-
-struct acpi_mem_space_context {
-	u32 length;
-	acpi_physical_address address;
-	struct acpi_mem_mapping *cur_mm;
-	struct acpi_mem_mapping *first_mm;
-};
-
 typedef enum {
 	OSL_GLOBAL_LOCK_HANDLER = 0,
 	OSL_NOTIFY_HANDLER = 1,
@@ -68234,6 +84452,994 @@
 	OSL_EC_BURST_HANDLER = 6,
 } acpi_execute_type;
 
+struct acpi_debugger_ops {
+	int (*create_thread)(acpi_osd_exec_callback, void *);
+	ssize_t (*write_log)(const char *);
+	ssize_t (*read_cmd)(char *, size_t);
+	int (*wait_command_ready)(bool, char *, size_t);
+	int (*notify_command_complete)();
+};
+
+struct acpi_debugger {
+	const struct acpi_debugger_ops *ops;
+	struct module *owner;
+	struct mutex lock;
+};
+
+struct acpi_os_dpc {
+	acpi_osd_exec_callback function;
+	void *context;
+	struct work_struct work;
+};
+
+struct acpi_ioremap {
+	struct list_head list;
+	void *virt;
+	acpi_physical_address phys;
+	acpi_size size;
+	union {
+		long unsigned int refcount;
+		struct rcu_work rwork;
+	} track;
+};
+
+struct acpi_hp_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+	u32 src;
+};
+
+struct acpi_object_list {
+	u32 count;
+	union acpi_object *pointer;
+};
+
+struct acpi_pld_info {
+	u8 revision;
+	u8 ignore_color;
+	u8 red;
+	u8 green;
+	u8 blue;
+	u16 width;
+	u16 height;
+	u8 user_visible;
+	u8 dock;
+	u8 lid;
+	u8 panel;
+	u8 vertical_position;
+	u8 horizontal_position;
+	u8 shape;
+	u8 group_orientation;
+	u8 group_token;
+	u8 group_position;
+	u8 bay;
+	u8 ejectable;
+	u8 ospm_eject_required;
+	u8 cabinet_number;
+	u8 card_cage_number;
+	u8 reference;
+	u8 rotation;
+	u8 order;
+	u8 reserved;
+	u16 vertical_offset;
+	u16 horizontal_offset;
+};
+
+struct acpi_handle_list {
+	u32 count;
+	acpi_handle handles[10];
+};
+
+struct acpi_device_bus_id {
+	const char *bus_id;
+	struct ida instance_ida;
+	struct list_head node;
+};
+
+struct acpi_dev_match_info {
+	struct acpi_device_id hid[2];
+	const char *uid;
+	s64 hrv;
+};
+
+struct nvs_region {
+	__u64 phys_start;
+	__u64 size;
+	struct list_head node;
+};
+
+struct nvs_page {
+	long unsigned int phys_start;
+	unsigned int size;
+	void *kaddr;
+	void *data;
+	bool unmap;
+	struct list_head node;
+};
+
+struct acpi_wakeup_handler {
+	struct list_head list_node;
+	bool (*wakeup)(void *);
+	void *context;
+};
+
+typedef u32 acpi_event_status;
+
+struct acpi_table_facs {
+	char signature[4];
+	u32 length;
+	u32 hardware_signature;
+	u32 firmware_waking_vector;
+	u32 global_lock;
+	u32 flags;
+	u64 xfirmware_waking_vector;
+	u8 version;
+	u8 reserved[3];
+	u32 ospm_flags;
+	u8 reserved1[24];
+};
+
+struct acpi_hardware_id {
+	struct list_head list;
+	const char *id;
+};
+
+struct acpi_data_node {
+	const char *name;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct fwnode_handle *parent;
+	struct acpi_device_data data;
+	struct list_head sibling;
+	struct kobject kobj;
+	struct completion kobj_done;
+};
+
+struct acpi_data_node_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct acpi_data_node *, char *);
+	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
+};
+
+struct pm_domain_data {
+	struct list_head list_node;
+	struct device *dev;
+};
+
+struct acpi_device_physical_node {
+	unsigned int node_id;
+	struct list_head node;
+	struct device *dev;
+	bool put_online: 1;
+};
+
+enum acpi_bus_device_type {
+	ACPI_BUS_TYPE_DEVICE = 0,
+	ACPI_BUS_TYPE_POWER = 1,
+	ACPI_BUS_TYPE_PROCESSOR = 2,
+	ACPI_BUS_TYPE_THERMAL = 3,
+	ACPI_BUS_TYPE_POWER_BUTTON = 4,
+	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
+	ACPI_BUS_TYPE_ECDT_EC = 6,
+	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
+};
+
+struct acpi_osc_context {
+	char *uuid_str;
+	int rev;
+	struct acpi_buffer cap;
+	struct acpi_buffer ret;
+};
+
+struct acpi_dev_walk_context {
+	int (*fn)(struct acpi_device *, void *);
+	void *data;
+};
+
+struct acpi_bus_type {
+	struct list_head list;
+	const char *name;
+	bool (*match)(struct device *);
+	struct acpi_device * (*find_companion)(struct device *);
+	void (*setup)(struct device *);
+};
+
+struct acpi_pnp_device_id {
+	u32 length;
+	char *string;
+};
+
+struct acpi_pnp_device_id_list {
+	u32 count;
+	u32 list_size;
+	struct acpi_pnp_device_id ids[0];
+};
+
+struct acpi_device_info {
+	u32 info_size;
+	u32 name;
+	acpi_object_type type;
+	u8 param_count;
+	u16 valid;
+	u8 flags;
+	u8 highest_dstates[4];
+	u8 lowest_dstates[5];
+	u64 address;
+	struct acpi_pnp_device_id hardware_id;
+	struct acpi_pnp_device_id unique_id;
+	struct acpi_pnp_device_id class_code;
+	struct acpi_pnp_device_id_list compatible_id_list;
+};
+
+struct acpi_table_spcr {
+	struct acpi_table_header header;
+	u8 interface_type;
+	u8 reserved[3];
+	struct acpi_generic_address serial_port;
+	u8 interrupt_type;
+	u8 pc_interrupt;
+	u32 interrupt;
+	u8 baud_rate;
+	u8 parity;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 terminal_type;
+	u8 reserved1;
+	u16 pci_device_id;
+	u16 pci_vendor_id;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u32 pci_flags;
+	u8 pci_segment;
+	u32 reserved2;
+} __attribute__((packed));
+
+struct acpi_table_stao {
+	struct acpi_table_header header;
+	u8 ignore_uart;
+} __attribute__((packed));
+
+struct acpi_dep_data {
+	struct list_head node;
+	acpi_handle supplier;
+	acpi_handle consumer;
+	bool honor_dep;
+};
+
+enum acpi_reconfig_event {
+	ACPI_RECONFIG_DEVICE_ADD = 0,
+	ACPI_RECONFIG_DEVICE_REMOVE = 1,
+};
+
+struct acpi_probe_entry;
+
+typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
+
+struct acpi_probe_entry {
+	__u8 id[5];
+	__u8 type;
+	acpi_probe_entry_validate_subtbl subtable_valid;
+	union {
+		acpi_tbl_table_handler probe_table;
+		acpi_tbl_entry_handler probe_subtbl;
+	};
+	kernel_ulong_t driver_data;
+};
+
+struct acpi_scan_clear_dep_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+};
+
+struct resource_win {
+	struct resource res;
+	resource_size_t offset;
+};
+
+struct irq_override_cmp {
+	const struct dmi_system_id *system;
+	unsigned char irq;
+	unsigned char triggering;
+	unsigned char polarity;
+	unsigned char shareable;
+};
+
+struct res_proc_context {
+	struct list_head *list;
+	int (*preproc)(struct acpi_resource *, void *);
+	void *preproc_data;
+	int count;
+	int error;
+};
+
+struct acpi_processor_errata {
+	u8 smp;
+	struct {
+		u8 throttle: 1;
+		u8 fdma: 1;
+		u8 reserved: 6;
+		u32 bmisx;
+	} piix4;
+};
+
+struct acpi_table_ecdt {
+	struct acpi_table_header header;
+	struct acpi_generic_address control;
+	struct acpi_generic_address data;
+	u32 uid;
+	u8 gpe;
+	u8 id[1];
+} __attribute__((packed));
+
+enum acpi_ec_event_state {
+	EC_EVENT_READY = 0,
+	EC_EVENT_IN_PROGRESS = 1,
+	EC_EVENT_COMPLETE = 2,
+};
+
+struct transaction;
+
+struct acpi_ec {
+	acpi_handle handle;
+	int gpe;
+	int irq;
+	long unsigned int command_addr;
+	long unsigned int data_addr;
+	bool global_lock;
+	long unsigned int flags;
+	long unsigned int reference_count;
+	struct mutex mutex;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct transaction *curr;
+	spinlock_t lock;
+	struct work_struct work;
+	long unsigned int timestamp;
+	enum acpi_ec_event_state event_state;
+	unsigned int events_to_process;
+	unsigned int events_in_progress;
+	unsigned int queries_in_progress;
+	bool busy_polling;
+	unsigned int polling_guard;
+};
+
+struct transaction {
+	const u8 *wdata;
+	u8 *rdata;
+	short unsigned int irq_count;
+	u8 command;
+	u8 wi;
+	u8 ri;
+	u8 wlen;
+	u8 rlen;
+	u8 flags;
+};
+
+typedef int (*acpi_ec_query_func)(void *);
+
+enum ec_command {
+	ACPI_EC_COMMAND_READ = 128,
+	ACPI_EC_COMMAND_WRITE = 129,
+	ACPI_EC_BURST_ENABLE = 130,
+	ACPI_EC_BURST_DISABLE = 131,
+	ACPI_EC_COMMAND_QUERY = 132,
+};
+
+enum {
+	EC_FLAGS_QUERY_ENABLED = 0,
+	EC_FLAGS_EVENT_HANDLER_INSTALLED = 1,
+	EC_FLAGS_EC_HANDLER_INSTALLED = 2,
+	EC_FLAGS_QUERY_METHODS_INSTALLED = 3,
+	EC_FLAGS_STARTED = 4,
+	EC_FLAGS_STOPPED = 5,
+	EC_FLAGS_EVENTS_MASKED = 6,
+};
+
+struct acpi_ec_query_handler {
+	struct list_head node;
+	acpi_ec_query_func func;
+	acpi_handle handle;
+	void *data;
+	u8 query_bit;
+	struct kref kref;
+};
+
+struct acpi_ec_query {
+	struct transaction transaction;
+	struct work_struct work;
+	struct acpi_ec_query_handler *handler;
+	struct acpi_ec *ec;
+};
+
+struct dock_station {
+	acpi_handle handle;
+	long unsigned int last_dock_time;
+	u32 flags;
+	struct list_head dependent_devices;
+	struct list_head sibling;
+	struct platform_device *dock_device;
+};
+
+struct dock_dependent_device {
+	struct list_head list;
+	struct acpi_device *adev;
+};
+
+enum dock_callback_type {
+	DOCK_CALL_HANDLER = 0,
+	DOCK_CALL_FIXUP = 1,
+	DOCK_CALL_UEVENT = 2,
+};
+
+enum acpi_bridge_type {
+	ACPI_BRIDGE_TYPE_PCIE = 1,
+	ACPI_BRIDGE_TYPE_CXL = 2,
+};
+
+struct acpi_pci_root_ops;
+
+struct acpi_pci_root_info {
+	struct acpi_pci_root *root;
+	struct acpi_device *bridge;
+	struct acpi_pci_root_ops *ops;
+	struct list_head resources;
+	char name[16];
+};
+
+struct acpi_pci_root_ops {
+	struct pci_ops *pci_ops;
+	int (*init_info)(struct acpi_pci_root_info *);
+	void (*release_info)(struct acpi_pci_root_info *);
+	int (*prepare_resources)(struct acpi_pci_root_info *);
+};
+
+struct pci_osc_bit_struct {
+	u32 bit;
+	char *desc;
+};
+
+struct acpi_handle_node {
+	struct list_head node;
+	acpi_handle handle;
+};
+
+struct acpi_pci_link_irq {
+	u32 active;
+	u8 triggering;
+	u8 polarity;
+	u8 resource_type;
+	u8 possible_count;
+	u32 possible[16];
+	u8 initialized: 1;
+	u8 reserved: 7;
+};
+
+struct acpi_pci_link {
+	struct list_head list;
+	struct acpi_device *device;
+	struct acpi_pci_link_irq irq;
+	int refcnt;
+};
+
+struct acpi_pci_routing_table {
+	u32 length;
+	u32 pin;
+	u64 address;
+	u32 source_index;
+	char source[4];
+};
+
+struct acpi_prt_entry {
+	struct acpi_pci_id id;
+	u8 pin;
+	acpi_handle link;
+	u32 index;
+};
+
+struct prt_quirk {
+	const struct dmi_system_id *system;
+	unsigned int segment;
+	unsigned int bus;
+	unsigned int device;
+	unsigned char pin;
+	const char *source;
+	const char *actual_source;
+};
+
+struct lpss_clk_data {
+	const char *name;
+	struct clk *clk;
+};
+
+enum pxa_ssp_type {
+	SSP_UNDEFINED = 0,
+	PXA25x_SSP = 1,
+	PXA25x_NSSP = 2,
+	PXA27x_SSP = 3,
+	PXA3xx_SSP = 4,
+	PXA168_SSP = 5,
+	MMP2_SSP = 6,
+	PXA910_SSP = 7,
+	CE4100_SSP = 8,
+	MRFLD_SSP = 9,
+	QUARK_X1000_SSP = 10,
+	LPSS_LPT_SSP = 11,
+	LPSS_BYT_SSP = 12,
+	LPSS_BSW_SSP = 13,
+	LPSS_SPT_SSP = 14,
+	LPSS_BXT_SSP = 15,
+	LPSS_CNL_SSP = 16,
+};
+
+struct lpss_private_data;
+
+struct lpss_device_desc {
+	unsigned int flags;
+	const char *clk_con_id;
+	unsigned int prv_offset;
+	size_t prv_size_override;
+	const struct property_entry *properties;
+	void (*setup)(struct lpss_private_data *);
+	bool resume_from_noirq;
+};
+
+struct lpss_private_data {
+	struct acpi_device *adev;
+	void *mmio_base;
+	resource_size_t mmio_size;
+	unsigned int fixed_clk_rate;
+	struct clk *clk;
+	const struct lpss_device_desc *dev_desc;
+	u32 prv_reg_ctx[9];
+};
+
+struct lpss_device_links {
+	const char *supplier_hid;
+	const char *supplier_uid;
+	const char *consumer_hid;
+	const char *consumer_uid;
+	u32 flags;
+	const struct dmi_system_id *dep_missing_ids;
+};
+
+struct hid_uid {
+	const char *hid;
+	const char *uid;
+};
+
+struct fch_clk_data {
+	void *base;
+	char *name;
+};
+
+struct apd_private_data;
+
+struct apd_device_desc {
+	unsigned int fixed_clk_rate;
+	struct property_entry *properties;
+	int (*setup)(struct apd_private_data *);
+};
+
+struct apd_private_data {
+	struct clk *clk;
+	struct acpi_device *adev;
+	const struct apd_device_desc *dev_desc;
+};
+
+struct acpi_power_dependent_device {
+	struct device *dev;
+	struct list_head node;
+};
+
+struct acpi_power_resource {
+	struct acpi_device device;
+	struct list_head list_node;
+	u32 system_level;
+	u32 order;
+	unsigned int ref_count;
+	u8 state;
+	struct mutex resource_lock;
+	struct list_head dependents;
+};
+
+struct acpi_power_resource_entry {
+	struct list_head node;
+	struct acpi_power_resource *resource;
+};
+
+struct acpi_bus_event {
+	struct list_head node;
+	acpi_device_class device_class;
+	acpi_bus_id bus_id;
+	u32 type;
+	u32 data;
+};
+
+struct acpi_genl_event {
+	acpi_device_class device_class;
+	char bus_id[15];
+	u32 type;
+	u32 data;
+};
+
+enum {
+	ACPI_GENL_ATTR_UNSPEC = 0,
+	ACPI_GENL_ATTR_EVENT = 1,
+	__ACPI_GENL_ATTR_MAX = 2,
+};
+
+enum {
+	ACPI_GENL_CMD_UNSPEC = 0,
+	ACPI_GENL_CMD_EVENT = 1,
+	__ACPI_GENL_CMD_MAX = 2,
+};
+
+struct acpi_ged_device {
+	struct device *dev;
+	struct list_head event_list;
+};
+
+struct acpi_ged_event {
+	struct list_head node;
+	struct device *dev;
+	unsigned int gsi;
+	unsigned int irq;
+	acpi_handle handle;
+};
+
+struct acpi_table_bert {
+	struct acpi_table_header header;
+	u32 region_length;
+	u64 address;
+};
+
+struct acpi_dlayer {
+	const char *name;
+	long unsigned int value;
+};
+
+struct acpi_dlevel {
+	const char *name;
+	long unsigned int value;
+};
+
+struct acpi_table_attr {
+	struct bin_attribute attr;
+	char name[4];
+	int instance;
+	char filename[8];
+	struct list_head node;
+};
+
+struct acpi_data_attr {
+	struct bin_attribute attr;
+	u64 addr;
+};
+
+struct acpi_data_obj {
+	char *name;
+	int (*fn)(void *, struct acpi_data_attr *);
+};
+
+struct event_counter {
+	u32 count;
+	u32 flags;
+};
+
+struct acpi_device_properties {
+	const guid_t *guid;
+	const union acpi_object *properties;
+	struct list_head list;
+};
+
+struct override_status_id {
+	struct acpi_device_id hid[2];
+	struct x86_cpu_id cpu_ids[2];
+	struct dmi_system_id dmi_ids[2];
+	const char *uid;
+	const char *path;
+	long long unsigned int status;
+};
+
+struct acpi_s2idle_dev_ops {
+	struct list_head list_node;
+	void (*prepare)();
+	void (*restore)();
+};
+
+struct lpi_device_info {
+	char *name;
+	int enabled;
+	union acpi_object *package;
+};
+
+struct lpi_device_constraint {
+	int uid;
+	int min_dstate;
+	int function_states;
+};
+
+struct lpi_constraints {
+	acpi_handle handle;
+	int min_dstate;
+};
+
+struct lpi_device_constraint_amd {
+	char *name;
+	int enabled;
+	int function_states;
+	int min_dstate;
+};
+
+struct acpi_lpat {
+	int temp;
+	int raw;
+};
+
+struct acpi_lpat_conversion_table {
+	struct acpi_lpat *lpat;
+	int lpat_count;
+};
+
+enum fpdt_subtable_type {
+	SUBTABLE_FBPT = 0,
+	SUBTABLE_S3PT = 1,
+};
+
+struct fpdt_subtable_entry {
+	u16 type;
+	u8 length;
+	u8 revision;
+	u32 reserved;
+	u64 address;
+};
+
+struct fpdt_subtable_header {
+	u32 signature;
+	u32 length;
+};
+
+enum fpdt_record_type {
+	RECORD_S3_RESUME = 0,
+	RECORD_S3_SUSPEND = 1,
+	RECORD_BOOT = 2,
+};
+
+struct fpdt_record_header {
+	u16 type;
+	u8 length;
+	u8 revision;
+};
+
+struct resume_performance_record {
+	struct fpdt_record_header header;
+	u32 resume_count;
+	u64 resume_prev;
+	u64 resume_avg;
+};
+
+struct boot_performance_record {
+	struct fpdt_record_header header;
+	u32 reserved;
+	u64 firmware_start;
+	u64 bootloader_load;
+	u64 bootloader_launch;
+	u64 exitbootservice_start;
+	u64 exitbootservice_end;
+};
+
+struct suspend_performance_record {
+	struct fpdt_record_header header;
+	u64 suspend_start;
+	u64 suspend_end;
+} __attribute__((packed));
+
+struct acpi_table_lpit {
+	struct acpi_table_header header;
+};
+
+struct acpi_lpit_header {
+	u32 type;
+	u32 length;
+	u16 unique_id;
+	u16 reserved;
+	u32 flags;
+};
+
+struct acpi_lpit_native {
+	struct acpi_lpit_header header;
+	struct acpi_generic_address entry_trigger;
+	u32 residency;
+	u32 latency;
+	struct acpi_generic_address residency_counter;
+	u64 counter_frequency;
+} __attribute__((packed));
+
+struct lpit_residency_info {
+	struct acpi_generic_address gaddr;
+	u64 frequency;
+	void *iomem_addr;
+};
+
+struct acpi_table_wdat {
+	struct acpi_table_header header;
+	u32 header_length;
+	u16 pci_segment;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u8 reserved[3];
+	u32 timer_period;
+	u32 max_count;
+	u32 min_count;
+	u8 flags;
+	u8 reserved2[3];
+	u32 entries;
+};
+
+struct acpi_wdat_entry {
+	u8 action;
+	u8 instruction;
+	u16 reserved;
+	struct acpi_generic_address register_region;
+	u32 value;
+	u32 mask;
+} __attribute__((packed));
+
+typedef u64 acpi_integer;
+
+struct acpi_prmt_module_info {
+	u16 revision;
+	u16 length;
+	u8 module_guid[16];
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_info_count;
+	u32 handler_info_offset;
+	u64 mmio_list_pointer;
+} __attribute__((packed));
+
+struct acpi_prmt_handler_info {
+	u16 revision;
+	u16 length;
+	u8 handler_guid[16];
+	u64 handler_address;
+	u64 static_data_buffer_address;
+	u64 acpi_param_buffer_address;
+} __attribute__((packed));
+
+struct prm_mmio_addr_range {
+	u64 phys_addr;
+	u64 virt_addr;
+	u32 length;
+} __attribute__((packed));
+
+struct prm_mmio_info {
+	u64 mmio_count;
+	struct prm_mmio_addr_range addr_ranges[0];
+};
+
+struct prm_buffer {
+	u8 prm_status;
+	u64 efi_status;
+	u8 prm_cmd;
+	guid_t handler_guid;
+} __attribute__((packed));
+
+struct prm_context_buffer {
+	char signature[4];
+	u16 revision;
+	u16 reserved;
+	guid_t identifier;
+	u64 static_data_buffer;
+	struct prm_mmio_info *mmio_ranges;
+};
+
+struct prm_handler_info {
+	guid_t guid;
+	u64 handler_addr;
+	u64 static_data_buffer_addr;
+	u64 acpi_param_buffer_addr;
+	struct list_head handler_list;
+};
+
+struct prm_module_info {
+	guid_t guid;
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_count;
+	struct prm_mmio_info *mmio_info;
+	bool updatable;
+	struct list_head module_list;
+	struct prm_handler_info handlers[0];
+};
+
+struct acpi_pcc_info {
+	u8 subspace_id;
+	u16 length;
+	u8 *internal_buffer;
+};
+
+struct mbox_chan;
+
+struct mbox_chan_ops {
+	int (*send_data)(struct mbox_chan *, void *);
+	int (*flush)(struct mbox_chan *, long unsigned int);
+	int (*startup)(struct mbox_chan *);
+	void (*shutdown)(struct mbox_chan *);
+	bool (*last_tx_done)(struct mbox_chan *);
+	bool (*peek_data)(struct mbox_chan *);
+};
+
+struct mbox_controller;
+
+struct mbox_client;
+
+struct mbox_chan {
+	struct mbox_controller *mbox;
+	unsigned int txdone_method;
+	struct mbox_client *cl;
+	struct completion tx_complete;
+	void *active_req;
+	unsigned int msg_count;
+	unsigned int msg_free;
+	void *msg_data[20];
+	spinlock_t lock;
+	void *con_priv;
+};
+
+struct mbox_controller {
+	struct device *dev;
+	const struct mbox_chan_ops *ops;
+	struct mbox_chan *chans;
+	int num_chans;
+	bool txdone_irq;
+	bool txdone_poll;
+	unsigned int txpoll_period;
+	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
+	struct hrtimer poll_hrt;
+	spinlock_t poll_hrt_lock;
+	struct list_head node;
+};
+
+struct mbox_client {
+	struct device *dev;
+	bool tx_block;
+	long unsigned int tx_tout;
+	bool knows_txdone;
+	void (*rx_callback)(struct mbox_client *, void *);
+	void (*tx_prepare)(struct mbox_client *, void *);
+	void (*tx_done)(struct mbox_client *, void *, int);
+};
+
+struct pcc_mbox_chan {
+	struct mbox_chan *mchan;
+	u64 shmem_base_addr;
+	u64 shmem_size;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+};
+
+struct pcc_data {
+	struct pcc_mbox_chan *pcc_chan;
+	void *pcc_comm_addr;
+	struct completion done;
+	struct mbox_client cl;
+	struct acpi_pcc_info ctx;
+};
+
+typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
+
+typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
+
+typedef void (*acpi_object_handler)(acpi_handle, void *);
+
+typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
+
+typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
+
 union acpi_operand_object;
 
 struct acpi_namespace_node {
@@ -68367,6 +85573,7 @@
 	union acpi_operand_object *next;
 	acpi_physical_address address;
 	u32 length;
+	void *pointer;
 };
 
 struct acpi_object_notify_common {
@@ -68548,6 +85755,7 @@
 	acpi_adr_space_handler handler;
 	struct acpi_namespace_node *node;
 	void *context;
+	void *context_mutex;
 	acpi_adr_space_setup setup;
 	union acpi_operand_object *region_list;
 	union acpi_operand_object *next;
@@ -68841,6 +86049,10 @@
 	struct acpi_namespace_node *node;
 	union acpi_parse_value value;
 	u8 arg_list_length;
+	u16 disasm_flags;
+	u8 disasm_opcode;
+	char *operator_symbol;
+	char aml_op_name[16];
 };
 
 struct acpi_parse_obj_named {
@@ -68853,6 +86065,10 @@
 	struct acpi_namespace_node *node;
 	union acpi_parse_value value;
 	u8 arg_list_length;
+	u16 disasm_flags;
+	u8 disasm_opcode;
+	char *operator_symbol;
+	char aml_op_name[16];
 	char *path;
 	u8 *data;
 	u32 length;
@@ -68869,6 +86085,10 @@
 	struct acpi_namespace_node *node;
 	union acpi_parse_value value;
 	u8 arg_list_length;
+	u16 disasm_flags;
+	u8 disasm_opcode;
+	char *operator_symbol;
+	char aml_op_name[16];
 	union acpi_parse_object *child;
 	union acpi_parse_object *parent_method;
 	char *filename;
@@ -68976,6 +86196,7 @@
 };
 
 struct acpi_opcode_info {
+	char *name;
 	u32 parse_args;
 	u32 runtime_args;
 	u16 flags;
@@ -68984,547 +86205,6 @@
 	u8 type;
 };
 
-struct acpi_os_dpc {
-	acpi_osd_exec_callback function;
-	void *context;
-	struct work_struct work;
-};
-
-struct acpi_ioremap {
-	struct list_head list;
-	void *virt;
-	acpi_physical_address phys;
-	acpi_size size;
-	union {
-		long unsigned int refcount;
-		struct rcu_work rwork;
-	} track;
-};
-
-struct acpi_hp_work {
-	struct work_struct work;
-	struct acpi_device *adev;
-	u32 src;
-};
-
-struct acpi_object_list {
-	u32 count;
-	union acpi_object *pointer;
-};
-
-struct acpi_pld_info {
-	u8 revision;
-	u8 ignore_color;
-	u8 red;
-	u8 green;
-	u8 blue;
-	u16 width;
-	u16 height;
-	u8 user_visible;
-	u8 dock;
-	u8 lid;
-	u8 panel;
-	u8 vertical_position;
-	u8 horizontal_position;
-	u8 shape;
-	u8 group_orientation;
-	u8 group_token;
-	u8 group_position;
-	u8 bay;
-	u8 ejectable;
-	u8 ospm_eject_required;
-	u8 cabinet_number;
-	u8 card_cage_number;
-	u8 reference;
-	u8 rotation;
-	u8 order;
-	u8 reserved;
-	u16 vertical_offset;
-	u16 horizontal_offset;
-};
-
-struct acpi_handle_list {
-	u32 count;
-	acpi_handle handles[10];
-};
-
-enum acpi_predicate {
-	all_versions = 0,
-	less_than_or_equal = 1,
-	equal = 2,
-	greater_than_or_equal = 3,
-};
-
-struct acpi_platform_list {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	char *table;
-	enum acpi_predicate pred;
-	char *reason;
-	u32 data;
-};
-
-struct acpi_device_bus_id {
-	const char *bus_id;
-	unsigned int instance_no;
-	struct list_head node;
-};
-
-struct acpi_dev_match_info {
-	struct acpi_device_id hid[2];
-	const char *uid;
-	s64 hrv;
-};
-
-struct nvs_region {
-	__u64 phys_start;
-	__u64 size;
-	struct list_head node;
-};
-
-struct acpi_wakeup_handler {
-	struct list_head list_node;
-	bool (*wakeup)(void *);
-	void *context;
-};
-
-struct acpi_hardware_id {
-	struct list_head list;
-	const char *id;
-};
-
-struct acpi_data_node {
-	const char *name;
-	acpi_handle handle;
-	struct fwnode_handle fwnode;
-	struct fwnode_handle *parent;
-	struct acpi_device_data data;
-	struct list_head sibling;
-	struct kobject kobj;
-	struct completion kobj_done;
-};
-
-struct acpi_data_node_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct acpi_data_node *, char *);
-	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
-};
-
-struct pm_domain_data {
-	struct list_head list_node;
-	struct device *dev;
-};
-
-typedef u32 (*acpi_event_handler)(void *);
-
-enum acpi_bus_device_type {
-	ACPI_BUS_TYPE_DEVICE = 0,
-	ACPI_BUS_TYPE_POWER = 1,
-	ACPI_BUS_TYPE_PROCESSOR = 2,
-	ACPI_BUS_TYPE_THERMAL = 3,
-	ACPI_BUS_TYPE_POWER_BUTTON = 4,
-	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
-	ACPI_BUS_TYPE_ECDT_EC = 6,
-	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
-};
-
-struct acpi_device_physical_node {
-	unsigned int node_id;
-	struct list_head node;
-	struct device *dev;
-	bool put_online: 1;
-};
-
-struct acpi_osc_context {
-	char *uuid_str;
-	int rev;
-	struct acpi_buffer cap;
-	struct acpi_buffer ret;
-};
-
-struct acpi_pnp_device_id {
-	u32 length;
-	char *string;
-};
-
-struct acpi_pnp_device_id_list {
-	u32 count;
-	u32 list_size;
-	struct acpi_pnp_device_id ids[0];
-};
-
-struct acpi_device_info {
-	u32 info_size;
-	u32 name;
-	acpi_object_type type;
-	u8 param_count;
-	u16 valid;
-	u8 flags;
-	u8 highest_dstates[4];
-	u8 lowest_dstates[5];
-	u64 address;
-	struct acpi_pnp_device_id hardware_id;
-	struct acpi_pnp_device_id unique_id;
-	struct acpi_pnp_device_id class_code;
-	struct acpi_pnp_device_id_list compatible_id_list;
-};
-
-struct acpi_table_spcr {
-	struct acpi_table_header header;
-	u8 interface_type;
-	u8 reserved[3];
-	struct acpi_generic_address serial_port;
-	u8 interrupt_type;
-	u8 pc_interrupt;
-	u32 interrupt;
-	u8 baud_rate;
-	u8 parity;
-	u8 stop_bits;
-	u8 flow_control;
-	u8 terminal_type;
-	u8 reserved1;
-	u16 pci_device_id;
-	u16 pci_vendor_id;
-	u8 pci_bus;
-	u8 pci_device;
-	u8 pci_function;
-	u32 pci_flags;
-	u8 pci_segment;
-	u32 reserved2;
-} __attribute__((packed));
-
-struct acpi_table_stao {
-	struct acpi_table_header header;
-	u8 ignore_uart;
-} __attribute__((packed));
-
-enum acpi_reconfig_event {
-	ACPI_RECONFIG_DEVICE_ADD = 0,
-	ACPI_RECONFIG_DEVICE_REMOVE = 1,
-};
-
-struct acpi_dep_data {
-	struct list_head node;
-	acpi_handle master;
-	acpi_handle slave;
-};
-
-struct acpi_table_events_work {
-	struct work_struct work;
-	void *table;
-	u32 event;
-};
-
-struct resource_win {
-	struct resource res;
-	resource_size_t offset;
-};
-
-struct res_proc_context {
-	struct list_head *list;
-	int (*preproc)(struct acpi_resource *, void *);
-	void *preproc_data;
-	int count;
-	int error;
-};
-
-struct acpi_processor_errata {
-	u8 smp;
-	struct {
-		u8 throttle: 1;
-		u8 fdma: 1;
-		u8 reserved: 6;
-		u32 bmisx;
-	} piix4;
-};
-
-typedef u32 acpi_event_status;
-
-struct acpi_table_ecdt {
-	struct acpi_table_header header;
-	struct acpi_generic_address control;
-	struct acpi_generic_address data;
-	u32 uid;
-	u8 gpe;
-	u8 id[1];
-} __attribute__((packed));
-
-struct transaction;
-
-struct acpi_ec {
-	acpi_handle handle;
-	int gpe;
-	int irq;
-	long unsigned int command_addr;
-	long unsigned int data_addr;
-	bool global_lock;
-	long unsigned int flags;
-	long unsigned int reference_count;
-	struct mutex mutex;
-	wait_queue_head_t wait;
-	struct list_head list;
-	struct transaction *curr;
-	spinlock_t lock;
-	struct work_struct work;
-	long unsigned int timestamp;
-	long unsigned int nr_pending_queries;
-	bool busy_polling;
-	unsigned int polling_guard;
-};
-
-struct transaction {
-	const u8 *wdata;
-	u8 *rdata;
-	short unsigned int irq_count;
-	u8 command;
-	u8 wi;
-	u8 ri;
-	u8 wlen;
-	u8 rlen;
-	u8 flags;
-};
-
-typedef int (*acpi_ec_query_func)(void *);
-
-enum ec_command {
-	ACPI_EC_COMMAND_READ = 128,
-	ACPI_EC_COMMAND_WRITE = 129,
-	ACPI_EC_BURST_ENABLE = 130,
-	ACPI_EC_BURST_DISABLE = 131,
-	ACPI_EC_COMMAND_QUERY = 132,
-};
-
-enum {
-	EC_FLAGS_QUERY_ENABLED = 0,
-	EC_FLAGS_QUERY_PENDING = 1,
-	EC_FLAGS_QUERY_GUARDING = 2,
-	EC_FLAGS_EVENT_HANDLER_INSTALLED = 3,
-	EC_FLAGS_EC_HANDLER_INSTALLED = 4,
-	EC_FLAGS_QUERY_METHODS_INSTALLED = 5,
-	EC_FLAGS_STARTED = 6,
-	EC_FLAGS_STOPPED = 7,
-	EC_FLAGS_EVENTS_MASKED = 8,
-};
-
-struct acpi_ec_query_handler {
-	struct list_head node;
-	acpi_ec_query_func func;
-	acpi_handle handle;
-	void *data;
-	u8 query_bit;
-	struct kref kref;
-};
-
-struct acpi_ec_query {
-	struct transaction transaction;
-	struct work_struct work;
-	struct acpi_ec_query_handler *handler;
-};
-
-struct dock_station {
-	acpi_handle handle;
-	long unsigned int last_dock_time;
-	u32 flags;
-	struct list_head dependent_devices;
-	struct list_head sibling;
-	struct platform_device *dock_device;
-};
-
-struct dock_dependent_device {
-	struct list_head list;
-	struct acpi_device *adev;
-};
-
-enum dock_callback_type {
-	DOCK_CALL_HANDLER = 0,
-	DOCK_CALL_FIXUP = 1,
-	DOCK_CALL_UEVENT = 2,
-};
-
-struct pci_osc_bit_struct {
-	u32 bit;
-	char *desc;
-};
-
-struct acpi_handle_node {
-	struct list_head node;
-	acpi_handle handle;
-};
-
-struct acpi_pci_link_irq {
-	u32 active;
-	u8 triggering;
-	u8 polarity;
-	u8 resource_type;
-	u8 possible_count;
-	u32 possible[16];
-	u8 initialized: 1;
-	u8 reserved: 7;
-};
-
-struct acpi_pci_link {
-	struct list_head list;
-	struct acpi_device *device;
-	struct acpi_pci_link_irq irq;
-	int refcnt;
-};
-
-struct acpi_pci_routing_table {
-	u32 length;
-	u32 pin;
-	u64 address;
-	u32 source_index;
-	char source[4];
-};
-
-struct acpi_prt_entry {
-	struct acpi_pci_id id;
-	u8 pin;
-	acpi_handle link;
-	u32 index;
-};
-
-struct prt_quirk {
-	const struct dmi_system_id *system;
-	unsigned int segment;
-	unsigned int bus;
-	unsigned int device;
-	unsigned char pin;
-	const char *source;
-	const char *actual_source;
-};
-
-struct apd_private_data;
-
-struct apd_device_desc {
-	unsigned int fixed_clk_rate;
-	struct property_entry *properties;
-	int (*setup)(struct apd_private_data *);
-};
-
-struct apd_private_data {
-	struct clk *clk;
-	struct acpi_device *adev;
-	const struct apd_device_desc *dev_desc;
-};
-
-struct acpi_power_dependent_device {
-	struct device *dev;
-	struct list_head node;
-};
-
-struct acpi_power_resource {
-	struct acpi_device device;
-	struct list_head list_node;
-	char *name;
-	u32 system_level;
-	u32 order;
-	unsigned int ref_count;
-	bool wakeup_enabled;
-	struct mutex resource_lock;
-	struct list_head dependents;
-};
-
-struct acpi_power_resource_entry {
-	struct list_head node;
-	struct acpi_power_resource *resource;
-};
-
-struct acpi_bus_event {
-	struct list_head node;
-	acpi_device_class device_class;
-	acpi_bus_id bus_id;
-	u32 type;
-	u32 data;
-};
-
-struct acpi_genl_event {
-	acpi_device_class device_class;
-	char bus_id[15];
-	u32 type;
-	u32 data;
-};
-
-enum {
-	ACPI_GENL_ATTR_UNSPEC = 0,
-	ACPI_GENL_ATTR_EVENT = 1,
-	__ACPI_GENL_ATTR_MAX = 2,
-};
-
-enum {
-	ACPI_GENL_CMD_UNSPEC = 0,
-	ACPI_GENL_CMD_EVENT = 1,
-	__ACPI_GENL_CMD_MAX = 2,
-};
-
-struct acpi_ged_device {
-	struct device *dev;
-	struct list_head event_list;
-};
-
-struct acpi_ged_event {
-	struct list_head node;
-	struct device *dev;
-	unsigned int gsi;
-	unsigned int irq;
-	acpi_handle handle;
-};
-
-typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
-
-struct acpi_table_bert {
-	struct acpi_table_header header;
-	u32 region_length;
-	u64 address;
-};
-
-struct acpi_table_attr {
-	struct bin_attribute attr;
-	char name[4];
-	int instance;
-	char filename[8];
-	struct list_head node;
-};
-
-struct acpi_data_attr {
-	struct bin_attribute attr;
-	u64 addr;
-};
-
-struct acpi_data_obj {
-	char *name;
-	int (*fn)(void *, struct acpi_data_attr *);
-};
-
-struct event_counter {
-	u32 count;
-	u32 flags;
-};
-
-struct acpi_device_properties {
-	const guid_t *guid;
-	const union acpi_object *properties;
-	struct list_head list;
-};
-
-struct acpi_lpat {
-	int temp;
-	int raw;
-};
-
-struct acpi_lpat_conversion_table {
-	struct acpi_lpat *lpat;
-	int lpat_count;
-};
-
-struct acpi_irq_parse_one_ctx {
-	int rc;
-	unsigned int index;
-	long unsigned int *res_flags;
-	struct irq_fwspec *fwspec;
-};
-
 enum {
 	ACPI_REFCLASS_LOCAL = 0,
 	ACPI_REFCLASS_ARG = 1,
@@ -69672,12 +86352,77 @@
 
 typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
 
+typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
+
+typedef u32 (*acpi_event_handler)(void *);
+
+struct acpi_fixed_event_handler {
+	acpi_event_handler handler;
+	void *context;
+};
+
+struct acpi_fixed_event_info {
+	u8 status_register_id;
+	u8 enable_register_id;
+	u16 status_bit_mask;
+	u16 enable_bit_mask;
+};
+
+struct acpi_gpe_walk_info {
+	struct acpi_namespace_node *gpe_device;
+	struct acpi_gpe_block_info *gpe_block;
+	u16 count;
+	acpi_owner_id owner_id;
+	u8 execute_by_owner_id;
+};
+
+struct acpi_gpe_device_info {
+	u32 index;
+	u32 next_block_base_index;
+	acpi_status status;
+	struct acpi_namespace_node *gpe_device;
+};
+
+typedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *);
+
 struct acpi_reg_walk_info {
 	u32 function;
 	u32 reg_run_count;
 	acpi_adr_space_type space_id;
 };
 
+struct acpi_mem_mapping {
+	acpi_physical_address physical_address;
+	u8 *logical_address;
+	acpi_size length;
+	struct acpi_mem_mapping *next_mm;
+};
+
+struct acpi_mem_space_context {
+	u32 length;
+	acpi_physical_address address;
+	struct acpi_mem_mapping *cur_mm;
+	struct acpi_mem_mapping *first_mm;
+};
+
+struct acpi_data_table_space_context {
+	void *pointer;
+};
+
+typedef u32 (*acpi_sci_handler)(void *);
+
+struct acpi_sci_handler_info {
+	struct acpi_sci_handler_info *next;
+	acpi_sci_handler address;
+	void *context;
+};
+
+struct acpi_exdump_info {
+	u8 opcode;
+	u8 offset;
+	const char *name;
+} __attribute__((packed));
+
 enum {
 	AML_FIELD_UPDATE_PRESERVE = 0,
 	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
@@ -69718,6 +86463,18 @@
 	ACPI_TRACE_AML_REGION = 2,
 } acpi_trace_event_type;
 
+struct acpi_gpe_block_status_context {
+	struct acpi_gpe_register_info *gpe_skip_register_info;
+	u8 gpe_skip_mask;
+	u8 retval;
+};
+
+struct acpi_bit_register_info {
+	u8 parent_register;
+	u8 bit_position;
+	u16 access_bit_mask;
+};
+
 struct acpi_port_info {
 	char *name;
 	u16 start;
@@ -69730,6 +86487,13 @@
 	struct acpi_pci_device *next;
 };
 
+struct acpi_walk_info {
+	u32 debug_level;
+	u32 count;
+	acpi_owner_id owner_id;
+	u8 display_type;
+};
+
 typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
 
 struct acpi_device_walk_info {
@@ -70007,6 +86771,18 @@
 	u16 type_data_length;
 } __attribute__((packed));
 
+struct aml_resource_csi2_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
 struct aml_resource_i2c_serialbus {
 	u8 descriptor_type;
 	u16 resource_length;
@@ -70148,6 +86924,7 @@
 	struct aml_resource_i2c_serialbus i2c_serial_bus;
 	struct aml_resource_spi_serialbus spi_serial_bus;
 	struct aml_resource_uart_serialbus uart_serial_bus;
+	struct aml_resource_csi2_serialbus csi2_serial_bus;
 	struct aml_resource_common_serialbus common_serial_bus;
 	struct aml_resource_pin_function pin_function;
 	struct aml_resource_pin_config pin_config;
@@ -70174,36 +86951,67 @@
 	ACPI_RSC_1BITFLAG = 3,
 	ACPI_RSC_2BITFLAG = 4,
 	ACPI_RSC_3BITFLAG = 5,
-	ACPI_RSC_ADDRESS = 6,
-	ACPI_RSC_BITMASK = 7,
-	ACPI_RSC_BITMASK16 = 8,
-	ACPI_RSC_COUNT = 9,
-	ACPI_RSC_COUNT16 = 10,
-	ACPI_RSC_COUNT_GPIO_PIN = 11,
-	ACPI_RSC_COUNT_GPIO_RES = 12,
-	ACPI_RSC_COUNT_GPIO_VEN = 13,
-	ACPI_RSC_COUNT_SERIAL_RES = 14,
-	ACPI_RSC_COUNT_SERIAL_VEN = 15,
-	ACPI_RSC_DATA8 = 16,
-	ACPI_RSC_EXIT_EQ = 17,
-	ACPI_RSC_EXIT_LE = 18,
-	ACPI_RSC_EXIT_NE = 19,
-	ACPI_RSC_LENGTH = 20,
-	ACPI_RSC_MOVE_GPIO_PIN = 21,
-	ACPI_RSC_MOVE_GPIO_RES = 22,
-	ACPI_RSC_MOVE_SERIAL_RES = 23,
-	ACPI_RSC_MOVE_SERIAL_VEN = 24,
-	ACPI_RSC_MOVE8 = 25,
-	ACPI_RSC_MOVE16 = 26,
-	ACPI_RSC_MOVE32 = 27,
-	ACPI_RSC_MOVE64 = 28,
-	ACPI_RSC_SET8 = 29,
-	ACPI_RSC_SOURCE = 30,
-	ACPI_RSC_SOURCEX = 31,
+	ACPI_RSC_6BITFLAG = 6,
+	ACPI_RSC_ADDRESS = 7,
+	ACPI_RSC_BITMASK = 8,
+	ACPI_RSC_BITMASK16 = 9,
+	ACPI_RSC_COUNT = 10,
+	ACPI_RSC_COUNT16 = 11,
+	ACPI_RSC_COUNT_GPIO_PIN = 12,
+	ACPI_RSC_COUNT_GPIO_RES = 13,
+	ACPI_RSC_COUNT_GPIO_VEN = 14,
+	ACPI_RSC_COUNT_SERIAL_RES = 15,
+	ACPI_RSC_COUNT_SERIAL_VEN = 16,
+	ACPI_RSC_DATA8 = 17,
+	ACPI_RSC_EXIT_EQ = 18,
+	ACPI_RSC_EXIT_LE = 19,
+	ACPI_RSC_EXIT_NE = 20,
+	ACPI_RSC_LENGTH = 21,
+	ACPI_RSC_MOVE_GPIO_PIN = 22,
+	ACPI_RSC_MOVE_GPIO_RES = 23,
+	ACPI_RSC_MOVE_SERIAL_RES = 24,
+	ACPI_RSC_MOVE_SERIAL_VEN = 25,
+	ACPI_RSC_MOVE8 = 26,
+	ACPI_RSC_MOVE16 = 27,
+	ACPI_RSC_MOVE32 = 28,
+	ACPI_RSC_MOVE64 = 29,
+	ACPI_RSC_SET8 = 30,
+	ACPI_RSC_SOURCE = 31,
+	ACPI_RSC_SOURCEX = 32,
 };
 
 typedef u16 acpi_rs_length;
 
+struct acpi_rsdump_info {
+	u8 opcode;
+	u8 offset;
+	const char *name;
+	const char **pointer;
+} __attribute__((packed));
+
+enum {
+	ACPI_RSD_TITLE = 0,
+	ACPI_RSD_1BITFLAG = 1,
+	ACPI_RSD_2BITFLAG = 2,
+	ACPI_RSD_3BITFLAG = 3,
+	ACPI_RSD_6BITFLAG = 4,
+	ACPI_RSD_ADDRESS = 5,
+	ACPI_RSD_DWORDLIST = 6,
+	ACPI_RSD_LITERAL = 7,
+	ACPI_RSD_LONGLIST = 8,
+	ACPI_RSD_SHORTLIST = 9,
+	ACPI_RSD_SHORTLISTX = 10,
+	ACPI_RSD_SOURCE = 11,
+	ACPI_RSD_STRING = 12,
+	ACPI_RSD_UINT8 = 13,
+	ACPI_RSD_UINT16 = 14,
+	ACPI_RSD_UINT32 = 15,
+	ACPI_RSD_UINT64 = 16,
+	ACPI_RSD_WORDLIST = 17,
+	ACPI_RSD_LABEL = 18,
+	ACPI_RSD_SOURCE_LABEL = 19,
+};
+
 typedef u32 acpi_rsdesc_size;
 
 struct acpi_vendor_uuid {
@@ -70266,8 +87074,6 @@
 	char *name;
 };
 
-typedef u32 (*acpi_sci_handler)(void *);
-
 typedef u32 (*acpi_interface_handler)(acpi_string, u32);
 
 struct acpi_mutex_info {
@@ -70276,12 +87082,6 @@
 	u64 thread_id;
 };
 
-struct acpi_sci_handler_info {
-	struct acpi_sci_handler_info *next;
-	acpi_sci_handler address;
-	void *context;
-};
-
 struct acpi_comment_node {
 	char *comment;
 	struct acpi_comment_node *next;
@@ -70300,8253 +87100,379 @@
 
 typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
 
-struct acpi_table_mcfg {
-	struct acpi_table_header header;
-	u8 reserved[8];
+struct acpi_handler_info {
+	void *handler;
+	char *name;
 };
 
-struct acpi_mcfg_allocation {
-	u64 address;
-	u16 pci_segment;
-	u8 start_bus_number;
-	u8 end_bus_number;
-	u32 reserved;
+struct acpi_db_method_info {
+	acpi_handle method;
+	acpi_handle main_thread_gate;
+	acpi_handle thread_complete_gate;
+	acpi_handle info_gate;
+	u64 *threads;
+	u32 num_threads;
+	u32 num_created;
+	u32 num_completed;
+	char *name;
+	u32 flags;
+	u32 num_loops;
+	char pathname[512];
+	char **args;
+	acpi_object_type *types;
+	char init_args;
+	acpi_object_type arg_types[7];
+	char *arguments[7];
+	char num_threads_str[11];
+	char id_of_thread_str[11];
+	char index_of_thread_str[11];
 };
 
-struct mcfg_entry {
-	struct list_head list;
-	phys_addr_t addr;
-	u16 segment;
-	u8 bus_start;
-	u8 bus_end;
+struct history_info {
+	char *command;
+	u32 cmd_num;
 };
 
-struct mcfg_fixup {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-	u16 segment;
-	struct resource bus_range;
-	const struct pci_ecam_ops *ops;
-	struct resource cfgres;
+typedef struct history_info HISTORY_INFO;
+
+struct acpi_db_command_info {
+	const char *name;
+	u8 min_args;
 };
 
-struct acpi_pci_slot {
-	struct pci_slot *pci_slot;
-	struct list_head list;
+struct acpi_db_command_help {
+	u8 line_count;
+	char *invocation;
+	char *description;
 };
 
-struct acpi_power_register {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_size;
-	u64 address;
-} __attribute__((packed));
-
-struct acpi_lpi_states_array {
-	unsigned int size;
-	unsigned int composite_states_size;
-	struct acpi_lpi_state *entries;
-	struct acpi_lpi_state *composite_states[8];
+enum acpi_ex_debugger_commands {
+	CMD_NOT_FOUND = 0,
+	CMD_NULL = 1,
+	CMD_ALL = 2,
+	CMD_ALLOCATIONS = 3,
+	CMD_ARGS = 4,
+	CMD_ARGUMENTS = 5,
+	CMD_BREAKPOINT = 6,
+	CMD_BUSINFO = 7,
+	CMD_CALL = 8,
+	CMD_DEBUG = 9,
+	CMD_DISASSEMBLE = 10,
+	CMD_DISASM = 11,
+	CMD_DUMP = 12,
+	CMD_EVALUATE = 13,
+	CMD_EXECUTE = 14,
+	CMD_EXIT = 15,
+	CMD_FIELDS = 16,
+	CMD_FIND = 17,
+	CMD_GO = 18,
+	CMD_HANDLERS = 19,
+	CMD_HELP = 20,
+	CMD_HELP2 = 21,
+	CMD_HISTORY = 22,
+	CMD_HISTORY_EXE = 23,
+	CMD_HISTORY_LAST = 24,
+	CMD_INFORMATION = 25,
+	CMD_INTEGRITY = 26,
+	CMD_INTO = 27,
+	CMD_LEVEL = 28,
+	CMD_LIST = 29,
+	CMD_LOCALS = 30,
+	CMD_LOCKS = 31,
+	CMD_METHODS = 32,
+	CMD_NAMESPACE = 33,
+	CMD_NOTIFY = 34,
+	CMD_OBJECTS = 35,
+	CMD_OSI = 36,
+	CMD_OWNER = 37,
+	CMD_PATHS = 38,
+	CMD_PREDEFINED = 39,
+	CMD_PREFIX = 40,
+	CMD_QUIT = 41,
+	CMD_REFERENCES = 42,
+	CMD_RESOURCES = 43,
+	CMD_RESULTS = 44,
+	CMD_SET = 45,
+	CMD_STATS = 46,
+	CMD_STOP = 47,
+	CMD_TABLES = 48,
+	CMD_TEMPLATE = 49,
+	CMD_TRACE = 50,
+	CMD_TREE = 51,
+	CMD_TYPE = 52,
 };
 
-struct container_dev {
+struct acpi_db_execute_walk {
+	u32 count;
+	u32 max_count;
+	char name_seg[5];
+};
+
+struct acpi_integrity_info {
+	u32 nodes;
+	u32 objects;
+};
+
+struct acpi_object_info {
+	u32 types[28];
+};
+
+struct acpi_region_walk_info {
+	u32 debug_level;
+	u32 count;
+	acpi_owner_id owner_id;
+	u8 display_type;
+	u32 address_space_id;
+};
+
+struct acpi_db_argument_info {
+	const char *name;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+struct led_pattern;
+
+struct led_trigger;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	int flags;
+	long unsigned int work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	long unsigned int blink_delay_on;
+	long unsigned int blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	int brightness_hw_changed;
+	struct kernfs_node *brightness_hw_changed_kn;
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+};
+
+struct power_supply;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+};
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
 	struct device dev;
-	int (*offline)(struct container_dev *);
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
 };
 
-struct acpi_table_slit {
-	struct acpi_table_header header;
-	u64 locality_count;
-	u8 entry[1];
-} __attribute__((packed));
-
-struct acpi_table_srat {
-	struct acpi_table_header header;
-	u32 table_revision;
-	u64 reserved;
-};
-
-struct acpi_srat_cpu_affinity {
-	struct acpi_subtable_header header;
-	u8 proximity_domain_lo;
-	u8 apic_id;
-	u32 flags;
-	u8 local_sapic_eid;
-	u8 proximity_domain_hi[3];
-	u32 clock_domain;
-};
-
-struct acpi_srat_mem_affinity {
-	struct acpi_subtable_header header;
-	u32 proximity_domain;
-	u16 reserved;
-	u64 base_address;
-	u64 length;
-	u32 reserved1;
-	u32 flags;
-	u64 reserved2;
-} __attribute__((packed));
-
-struct acpi_srat_x2apic_cpu_affinity {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 proximity_domain;
-	u32 apic_id;
-	u32 flags;
-	u32 clock_domain;
-	u32 reserved2;
-};
-
-struct acpi_srat_generic_affinity {
-	struct acpi_subtable_header header;
-	u8 reserved;
-	u8 device_handle_type;
-	u32 proximity_domain;
-	u8 device_handle[16];
-	u32 flags;
-	u32 reserved1;
-};
-
-enum acpi_hmat_type {
-	ACPI_HMAT_TYPE_PROXIMITY = 0,
-	ACPI_HMAT_TYPE_LOCALITY = 1,
-	ACPI_HMAT_TYPE_CACHE = 2,
-	ACPI_HMAT_TYPE_RESERVED = 3,
-};
-
-struct acpi_hmat_proximity_domain {
-	struct acpi_hmat_structure header;
-	u16 flags;
-	u16 reserved1;
-	u32 processor_PD;
-	u32 memory_PD;
-	u32 reserved2;
-	u64 reserved3;
-	u64 reserved4;
-};
-
-struct acpi_hmat_locality {
-	struct acpi_hmat_structure header;
-	u8 flags;
-	u8 data_type;
-	u16 reserved1;
-	u32 number_of_initiator_Pds;
-	u32 number_of_target_Pds;
-	u32 reserved2;
-	u64 entry_base_unit;
-};
-
-struct acpi_hmat_cache {
-	struct acpi_hmat_structure header;
-	u32 memory_PD;
-	u32 reserved1;
-	u64 cache_size;
-	u32 cache_attributes;
-	u16 reserved2;
-	u16 number_of_SMBIOShandles;
-};
-
-struct node_hmem_attrs {
-	unsigned int read_bandwidth;
-	unsigned int write_bandwidth;
-	unsigned int read_latency;
-	unsigned int write_latency;
-};
-
-enum cache_indexing {
-	NODE_CACHE_DIRECT_MAP = 0,
-	NODE_CACHE_INDEXED = 1,
-	NODE_CACHE_OTHER = 2,
-};
-
-enum cache_write_policy {
-	NODE_CACHE_WRITE_BACK = 0,
-	NODE_CACHE_WRITE_THROUGH = 1,
-	NODE_CACHE_WRITE_OTHER = 2,
-};
-
-struct node_cache_attrs {
-	enum cache_indexing indexing;
-	enum cache_write_policy write_policy;
-	u64 size;
-	u16 line_size;
-	u8 level;
-};
-
-enum locality_types {
-	WRITE_LATENCY = 0,
-	READ_LATENCY = 1,
-	WRITE_BANDWIDTH = 2,
-	READ_BANDWIDTH = 3,
-};
-
-struct memory_locality {
-	struct list_head node;
-	struct acpi_hmat_locality *hmat_loc;
-};
-
-struct target_cache {
-	struct list_head node;
-	struct node_cache_attrs cache_attrs;
-};
-
-struct memory_target {
-	struct list_head node;
-	unsigned int memory_pxm;
-	unsigned int processor_pxm;
-	struct resource memregions;
-	struct node_hmem_attrs hmem_attrs[2];
-	struct list_head caches;
-	struct node_cache_attrs cache_attrs;
-	bool registered;
-};
-
-struct memory_initiator {
-	struct list_head node;
-	unsigned int processor_pxm;
-	bool has_cpu;
-};
-
-struct acpi_memory_info {
-	struct list_head list;
-	u64 start_addr;
-	u64 length;
-	short unsigned int caching;
-	short unsigned int write_protect;
-	unsigned int enabled: 1;
-};
-
-struct acpi_memory_device {
+struct acpi_ac {
+	struct power_supply *charger;
+	struct power_supply_desc charger_desc;
 	struct acpi_device *device;
-	struct list_head res_list;
-};
-
-struct acpi_pcct_hw_reduced {
-	struct acpi_subtable_header header;
-	u32 platform_interrupt;
-	u8 flags;
-	u8 reserved;
-	u64 base_address;
-	u64 length;
-	struct acpi_generic_address doorbell_register;
-	u64 preserve_mask;
-	u64 write_mask;
-	u32 latency;
-	u32 max_access_rate;
-	u16 min_turnaround_time;
-} __attribute__((packed));
-
-struct acpi_pcct_shared_memory {
-	u32 signature;
-	u16 command;
-	u16 status;
-};
-
-struct mbox_chan;
-
-struct mbox_chan_ops {
-	int (*send_data)(struct mbox_chan *, void *);
-	int (*flush)(struct mbox_chan *, long unsigned int);
-	int (*startup)(struct mbox_chan *);
-	void (*shutdown)(struct mbox_chan *);
-	bool (*last_tx_done)(struct mbox_chan *);
-	bool (*peek_data)(struct mbox_chan *);
-};
-
-struct mbox_controller;
-
-struct mbox_client;
-
-struct mbox_chan {
-	struct mbox_controller *mbox;
-	unsigned int txdone_method;
-	struct mbox_client *cl;
-	struct completion tx_complete;
-	void *active_req;
-	unsigned int msg_count;
-	unsigned int msg_free;
-	void *msg_data[20];
-	spinlock_t lock;
-	void *con_priv;
-};
-
-struct mbox_controller {
-	struct device *dev;
-	const struct mbox_chan_ops *ops;
-	struct mbox_chan *chans;
-	int num_chans;
-	bool txdone_irq;
-	bool txdone_poll;
-	unsigned int txpoll_period;
-	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
-	struct hrtimer poll_hrt;
-	struct list_head node;
-};
-
-struct mbox_client {
-	struct device *dev;
-	bool tx_block;
-	long unsigned int tx_tout;
-	bool knows_txdone;
-	void (*rx_callback)(struct mbox_client *, void *);
-	void (*tx_prepare)(struct mbox_client *, void *);
-	void (*tx_done)(struct mbox_client *, void *, int);
-};
-
-struct cpc_reg {
-	u8 descriptor;
-	u16 length;
-	u8 space_id;
-	u8 bit_width;
-	u8 bit_offset;
-	u8 access_width;
-	u64 address;
-} __attribute__((packed));
-
-struct cpc_register_resource {
-	acpi_object_type type;
-	u64 *sys_mem_vaddr;
-	union {
-		struct cpc_reg reg;
-		u64 int_value;
-	} cpc_entry;
-};
-
-struct cpc_desc {
-	int num_entries;
-	int version;
-	int cpu_id;
-	int write_cmd_status;
-	int write_cmd_id;
-	struct cpc_register_resource cpc_regs[21];
-	struct acpi_psd_package domain_info;
-	struct kobject kobj;
-};
-
-enum cppc_regs {
-	HIGHEST_PERF = 0,
-	NOMINAL_PERF = 1,
-	LOW_NON_LINEAR_PERF = 2,
-	LOWEST_PERF = 3,
-	GUARANTEED_PERF = 4,
-	DESIRED_PERF = 5,
-	MIN_PERF = 6,
-	MAX_PERF = 7,
-	PERF_REDUC_TOLERANCE = 8,
-	TIME_WINDOW = 9,
-	CTR_WRAP_TIME = 10,
-	REFERENCE_CTR = 11,
-	DELIVERED_CTR = 12,
-	PERF_LIMITED = 13,
-	ENABLE = 14,
-	AUTO_SEL_ENABLE = 15,
-	AUTO_ACT_WINDOW = 16,
-	ENERGY_PERF = 17,
-	REFERENCE_PERF = 18,
-	LOWEST_FREQ = 19,
-	NOMINAL_FREQ = 20,
-};
-
-struct cppc_perf_caps {
-	u32 guaranteed_perf;
-	u32 highest_perf;
-	u32 nominal_perf;
-	u32 lowest_perf;
-	u32 lowest_nonlinear_perf;
-	u32 lowest_freq;
-	u32 nominal_freq;
-};
-
-struct cppc_perf_ctrls {
-	u32 max_perf;
-	u32 min_perf;
-	u32 desired_perf;
-};
-
-struct cppc_perf_fb_ctrs {
-	u64 reference;
-	u64 delivered;
-	u64 reference_perf;
-	u64 wraparound_time;
-};
-
-struct cppc_cpudata {
-	int cpu;
-	struct cppc_perf_caps perf_caps;
-	struct cppc_perf_ctrls perf_ctrls;
-	struct cppc_perf_fb_ctrs perf_fb_ctrs;
-	struct cpufreq_policy *cur_policy;
-	unsigned int shared_type;
-	cpumask_var_t shared_cpu_map;
-};
-
-struct cppc_pcc_data {
-	struct mbox_chan *pcc_channel;
-	void *pcc_comm_addr;
-	bool pcc_channel_acquired;
-	unsigned int deadline_us;
-	unsigned int pcc_mpar;
-	unsigned int pcc_mrtt;
-	unsigned int pcc_nominal;
-	bool pending_pcc_write_cmd;
-	bool platform_owns_pcc;
-	unsigned int pcc_write_cnt;
-	struct rw_semaphore pcc_lock;
-	wait_queue_head_t pcc_write_wait_q;
-	ktime_t last_cmd_cmpl_time;
-	ktime_t last_mpar_reset;
-	int mpar_count;
-	int refcount;
-};
-
-struct cppc_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct kobject *, struct attribute *, char *);
-	ssize_t (*store)(struct kobject *, struct attribute *, const char *, ssize_t);
-};
-
-enum acpi_pptt_type {
-	ACPI_PPTT_TYPE_PROCESSOR = 0,
-	ACPI_PPTT_TYPE_CACHE = 1,
-	ACPI_PPTT_TYPE_ID = 2,
-	ACPI_PPTT_TYPE_RESERVED = 3,
-};
-
-struct acpi_pptt_processor {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 parent;
-	u32 acpi_processor_id;
-	u32 number_of_priv_resources;
-};
-
-struct acpi_pptt_cache {
-	struct acpi_subtable_header header;
-	u16 reserved;
-	u32 flags;
-	u32 next_level_of_cache;
-	u32 size;
-	u32 number_of_sets;
-	u8 associativity;
-	u8 attributes;
-	u16 line_size;
-};
-
-struct acpi_whea_header {
-	u8 action;
-	u8 instruction;
-	u8 flags;
-	u8 reserved;
-	struct acpi_generic_address register_region;
-	u64 value;
-	u64 mask;
-} __attribute__((packed));
-
-struct acpi_hest_header {
-	u16 type;
-	u16 source_id;
-};
-
-struct cper_sec_mem_err {
-	u64 validation_bits;
-	u64 error_status;
-	u64 physical_addr;
-	u64 physical_addr_mask;
-	u16 node;
-	u16 card;
-	u16 module;
-	u16 bank;
-	u16 device;
-	u16 row;
-	u16 column;
-	u16 bit_pos;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 target_id;
-	u8 error_type;
-	u8 extended;
-	u16 rank;
-	u16 mem_array_handle;
-	u16 mem_dev_handle;
-};
-
-struct apei_exec_context;
-
-typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);
-
-struct apei_exec_ins_type;
-
-struct apei_exec_context {
-	u32 ip;
-	u64 value;
-	u64 var1;
-	u64 var2;
-	u64 src_base;
-	u64 dst_base;
-	struct apei_exec_ins_type *ins_table;
-	u32 instructions;
-	struct acpi_whea_header *action_table;
-	u32 entries;
-};
-
-struct apei_exec_ins_type {
-	u32 flags;
-	apei_exec_ins_func_t run;
-};
-
-struct apei_resources {
-	struct list_head iomem;
-	struct list_head ioport;
-};
-
-typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);
-
-struct apei_res {
-	struct list_head list;
-	long unsigned int start;
-	long unsigned int end;
-};
-
-struct acpi_table_hest {
-	struct acpi_table_header header;
-	u32 error_source_count;
-};
-
-enum acpi_hest_types {
-	ACPI_HEST_TYPE_IA32_CHECK = 0,
-	ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
-	ACPI_HEST_TYPE_IA32_NMI = 2,
-	ACPI_HEST_TYPE_NOT_USED3 = 3,
-	ACPI_HEST_TYPE_NOT_USED4 = 4,
-	ACPI_HEST_TYPE_NOT_USED5 = 5,
-	ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
-	ACPI_HEST_TYPE_AER_ENDPOINT = 7,
-	ACPI_HEST_TYPE_AER_BRIDGE = 8,
-	ACPI_HEST_TYPE_GENERIC_ERROR = 9,
-	ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
-	ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
-	ACPI_HEST_TYPE_RESERVED = 12,
-};
-
-struct acpi_hest_notify {
-	u8 type;
-	u8 length;
-	u16 config_write_enable;
-	u32 poll_interval;
-	u32 vector;
-	u32 polling_threshold_value;
-	u32 polling_threshold_window;
-	u32 error_threshold_value;
-	u32 error_threshold_window;
-};
-
-struct acpi_hest_ia_machine_check {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	u64 global_capability_data;
-	u64 global_control_data;
-	u8 num_hardware_banks;
-	u8 reserved3[7];
-};
-
-struct acpi_hest_ia_corrected {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	struct acpi_hest_notify notify;
-	u8 num_hardware_banks;
-	u8 reserved2[3];
-};
-
-struct acpi_hest_ia_deferred_check {
-	struct acpi_hest_header header;
-	u16 reserved1;
-	u8 flags;
-	u8 enabled;
-	u32 records_to_preallocate;
-	u32 max_sections_per_record;
-	struct acpi_hest_notify notify;
-	u8 num_hardware_banks;
-	u8 reserved2[3];
-};
-
-enum hest_status {
-	HEST_ENABLED = 0,
-	HEST_DISABLED = 1,
-	HEST_NOT_FOUND = 2,
-};
-
-typedef int (*apei_hest_func_t)(struct acpi_hest_header *, void *);
-
-struct acpi_table_erst {
-	struct acpi_table_header header;
-	u32 header_length;
-	u32 reserved;
-	u32 entries;
-};
-
-enum acpi_erst_actions {
-	ACPI_ERST_BEGIN_WRITE = 0,
-	ACPI_ERST_BEGIN_READ = 1,
-	ACPI_ERST_BEGIN_CLEAR = 2,
-	ACPI_ERST_END = 3,
-	ACPI_ERST_SET_RECORD_OFFSET = 4,
-	ACPI_ERST_EXECUTE_OPERATION = 5,
-	ACPI_ERST_CHECK_BUSY_STATUS = 6,
-	ACPI_ERST_GET_COMMAND_STATUS = 7,
-	ACPI_ERST_GET_RECORD_ID = 8,
-	ACPI_ERST_SET_RECORD_ID = 9,
-	ACPI_ERST_GET_RECORD_COUNT = 10,
-	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
-	ACPI_ERST_NOT_USED = 12,
-	ACPI_ERST_GET_ERROR_RANGE = 13,
-	ACPI_ERST_GET_ERROR_LENGTH = 14,
-	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
-	ACPI_ERST_EXECUTE_TIMINGS = 16,
-	ACPI_ERST_ACTION_RESERVED = 17,
-};
-
-enum acpi_erst_instructions {
-	ACPI_ERST_READ_REGISTER = 0,
-	ACPI_ERST_READ_REGISTER_VALUE = 1,
-	ACPI_ERST_WRITE_REGISTER = 2,
-	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
-	ACPI_ERST_NOOP = 4,
-	ACPI_ERST_LOAD_VAR1 = 5,
-	ACPI_ERST_LOAD_VAR2 = 6,
-	ACPI_ERST_STORE_VAR1 = 7,
-	ACPI_ERST_ADD = 8,
-	ACPI_ERST_SUBTRACT = 9,
-	ACPI_ERST_ADD_VALUE = 10,
-	ACPI_ERST_SUBTRACT_VALUE = 11,
-	ACPI_ERST_STALL = 12,
-	ACPI_ERST_STALL_WHILE_TRUE = 13,
-	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
-	ACPI_ERST_GOTO = 15,
-	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
-	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
-	ACPI_ERST_MOVE_DATA = 18,
-	ACPI_ERST_INSTRUCTION_RESERVED = 19,
-};
-
-struct cper_record_header {
-	char signature[4];
-	u16 revision;
-	u32 signature_end;
-	u16 section_count;
-	u32 error_severity;
-	u32 validation_bits;
-	u32 record_length;
-	u64 timestamp;
-	guid_t platform_id;
-	guid_t partition_id;
-	guid_t creator_id;
-	guid_t notification_type;
-	u64 record_id;
-	u32 flags;
-	u64 persistence_information;
-	u8 reserved[12];
-} __attribute__((packed));
-
-struct cper_section_descriptor {
-	u32 section_offset;
-	u32 section_length;
-	u16 revision;
-	u8 validation_bits;
-	u8 reserved;
-	u32 flags;
-	guid_t section_type;
-	guid_t fru_id;
-	u32 section_severity;
-	u8 fru_text[20];
-};
-
-struct erst_erange {
-	u64 base;
-	u64 size;
-	void *vaddr;
-	u32 attr;
-};
-
-struct erst_record_id_cache {
-	struct mutex lock;
-	u64 *entries;
-	int len;
-	int size;
-	int refcount;
-};
-
-struct cper_pstore_record {
-	struct cper_record_header hdr;
-	struct cper_section_descriptor sec_hdr;
-	char data[0];
-};
-
-struct acpi_bert_region {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct acpi_hest_generic_status {
-	u32 block_status;
-	u32 raw_data_offset;
-	u32 raw_data_length;
-	u32 data_length;
-	u32 error_severity;
-};
-
-struct pmic_table {
-	int address;
-	int reg;
-	int bit;
-};
-
-struct intel_pmic_opregion_data {
-	int (*get_power)(struct regmap *, int, int, u64 *);
-	int (*update_power)(struct regmap *, int, int, bool);
-	int (*get_raw_temp)(struct regmap *, int);
-	int (*update_aux)(struct regmap *, int, int);
-	int (*get_policy)(struct regmap *, int, int, u64 *);
-	int (*update_policy)(struct regmap *, int, int, int);
-	int (*exec_mipi_pmic_seq_element)(struct regmap *, u16, u32, u32, u32);
-	struct pmic_table *power_table;
-	int power_table_count;
-	struct pmic_table *thermal_table;
-	int thermal_table_count;
-	int pmic_i2c_address;
-};
-
-struct intel_pmic_regs_handler_ctx {
-	unsigned int val;
-	u16 addr;
-};
-
-struct intel_pmic_opregion {
-	struct mutex lock;
-	struct acpi_lpat_conversion_table *lpat_table;
-	struct regmap *regmap;
-	struct intel_pmic_opregion_data *data;
-	struct intel_pmic_regs_handler_ctx ctx;
-};
-
-struct acpi_table_iort {
-	struct acpi_table_header header;
-	u32 node_count;
-	u32 node_offset;
-	u32 reserved;
-};
-
-struct acpi_iort_node {
-	u8 type;
-	u16 length;
-	u8 revision;
-	u32 reserved;
-	u32 mapping_count;
-	u32 mapping_offset;
-	char node_data[1];
-} __attribute__((packed));
-
-enum acpi_iort_node_type {
-	ACPI_IORT_NODE_ITS_GROUP = 0,
-	ACPI_IORT_NODE_NAMED_COMPONENT = 1,
-	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 2,
-	ACPI_IORT_NODE_SMMU = 3,
-	ACPI_IORT_NODE_SMMU_V3 = 4,
-	ACPI_IORT_NODE_PMCG = 5,
-};
-
-struct acpi_iort_id_mapping {
-	u32 input_base;
-	u32 id_count;
-	u32 output_base;
-	u32 output_reference;
-	u32 flags;
-};
-
-struct acpi_iort_its_group {
-	u32 its_count;
-	u32 identifiers[1];
-};
-
-struct acpi_iort_named_component {
-	u32 node_flags;
-	u64 memory_properties;
-	u8 memory_address_limit;
-	char device_name[1];
-} __attribute__((packed));
-
-struct acpi_iort_root_complex {
-	u64 memory_properties;
-	u32 ats_attribute;
-	u32 pci_segment_number;
-	u8 memory_address_limit;
-	u8 reserved[3];
-} __attribute__((packed));
-
-struct acpi_iort_smmu {
-	u64 base_address;
-	u64 span;
-	u32 model;
-	u32 flags;
-	u32 global_interrupt_offset;
-	u32 context_interrupt_count;
-	u32 context_interrupt_offset;
-	u32 pmu_interrupt_count;
-	u32 pmu_interrupt_offset;
-	u64 interrupts[1];
-} __attribute__((packed));
-
-struct acpi_iort_smmu_v3 {
-	u64 base_address;
-	u32 flags;
-	u32 reserved;
-	u64 vatos_address;
-	u32 model;
-	u32 event_gsiv;
-	u32 pri_gsiv;
-	u32 gerr_gsiv;
-	u32 sync_gsiv;
-	u32 pxm;
-	u32 id_mapping_index;
-} __attribute__((packed));
-
-struct acpi_iort_pmcg {
-	u64 page0_base_address;
-	u32 overflow_gsiv;
-	u32 node_reference;
-	u64 page1_base_address;
-};
-
-struct iort_its_msi_chip {
-	struct list_head list;
-	struct fwnode_handle *fw_node;
-	phys_addr_t base_addr;
-	u32 translation_id;
-};
-
-struct iort_fwnode {
-	struct list_head list;
-	struct acpi_iort_node *iort_node;
-	struct fwnode_handle *fwnode;
-};
-
-typedef acpi_status (*iort_find_node_callback)(struct acpi_iort_node *, void *);
-
-struct iort_pci_alias_info {
-	struct device *dev;
-	struct acpi_iort_node *node;
-};
-
-struct iort_dev_config {
-	const char *name;
-	int (*dev_init)(struct acpi_iort_node *);
-	void (*dev_dma_configure)(struct device *, struct acpi_iort_node *);
-	int (*dev_count_resources)(struct acpi_iort_node *);
-	void (*dev_init_resources)(struct resource *, struct acpi_iort_node *);
-	int (*dev_set_proximity)(struct device *, struct acpi_iort_node *);
-	int (*dev_add_platdata)(struct platform_device *);
-};
-
-enum arch_timer_ppi_nr {
-	ARCH_TIMER_PHYS_SECURE_PPI = 0,
-	ARCH_TIMER_PHYS_NONSECURE_PPI = 1,
-	ARCH_TIMER_VIRT_PPI = 2,
-	ARCH_TIMER_HYP_PPI = 3,
-	ARCH_TIMER_MAX_TIMER_PPI = 4,
-};
-
-struct arch_timer_mem_frame {
-	bool valid;
-	phys_addr_t cntbase;
-	size_t size;
-	int phys_irq;
-	int virt_irq;
-};
-
-struct arch_timer_mem {
-	phys_addr_t cntctlbase;
-	size_t size;
-	struct arch_timer_mem_frame frame[8];
-};
-
-struct acpi_table_gtdt {
-	struct acpi_table_header header;
-	u64 counter_block_addresss;
-	u32 reserved;
-	u32 secure_el1_interrupt;
-	u32 secure_el1_flags;
-	u32 non_secure_el1_interrupt;
-	u32 non_secure_el1_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 non_secure_el2_interrupt;
-	u32 non_secure_el2_flags;
-	u64 counter_read_block_address;
-	u32 platform_timer_count;
-	u32 platform_timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_header {
-	u8 type;
-	u16 length;
-} __attribute__((packed));
-
-enum acpi_gtdt_type {
-	ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
-	ACPI_GTDT_TYPE_WATCHDOG = 1,
-	ACPI_GTDT_TYPE_RESERVED = 2,
-};
-
-struct acpi_gtdt_timer_block {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 block_address;
-	u32 timer_count;
-	u32 timer_offset;
-} __attribute__((packed));
-
-struct acpi_gtdt_timer_entry {
-	u8 frame_number;
-	u8 reserved[3];
-	u64 base_address;
-	u64 el0_base_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-	u32 virtual_timer_interrupt;
-	u32 virtual_timer_flags;
-	u32 common_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_watchdog {
-	struct acpi_gtdt_header header;
-	u8 reserved;
-	u64 refresh_frame_address;
-	u64 control_frame_address;
-	u32 timer_interrupt;
-	u32 timer_flags;
-} __attribute__((packed));
-
-struct acpi_gtdt_descriptor {
-	struct acpi_table_gtdt *gtdt;
-	void *gtdt_end;
-	void *platform_timer;
-};
-
-struct pnp_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-};
-
-struct pnp_card_device_id {
-	__u8 id[8];
-	kernel_ulong_t driver_data;
-	struct {
-		__u8 id[8];
-	} devs[8];
-};
-
-struct pnp_protocol;
-
-struct pnp_id;
-
-struct pnp_card {
-	struct device dev;
-	unsigned char number;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head devices;
-	struct pnp_protocol *protocol;
-	struct pnp_id *id;
-	char name[50];
-	unsigned char pnpver;
-	unsigned char productver;
-	unsigned int serial;
-	unsigned char checksum;
-	struct proc_dir_entry *procdir;
-};
-
-struct pnp_dev;
-
-struct pnp_protocol {
-	struct list_head protocol_list;
-	char *name;
-	int (*get)(struct pnp_dev *);
-	int (*set)(struct pnp_dev *);
-	int (*disable)(struct pnp_dev *);
-	bool (*can_wakeup)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	unsigned char number;
-	struct device dev;
-	struct list_head cards;
-	struct list_head devices;
-};
-
-struct pnp_id {
-	char id[8];
-	struct pnp_id *next;
-};
-
-struct pnp_card_driver;
-
-struct pnp_card_link {
-	struct pnp_card *card;
-	struct pnp_card_driver *driver;
-	void *driver_data;
-	pm_message_t pm_state;
-};
-
-struct pnp_driver {
-	const char *name;
-	const struct pnp_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
-	void (*remove)(struct pnp_dev *);
-	void (*shutdown)(struct pnp_dev *);
-	int (*suspend)(struct pnp_dev *, pm_message_t);
-	int (*resume)(struct pnp_dev *);
-	struct device_driver driver;
-};
-
-struct pnp_card_driver {
-	struct list_head global_list;
-	char *name;
-	const struct pnp_card_device_id *id_table;
-	unsigned int flags;
-	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
-	void (*remove)(struct pnp_card_link *);
-	int (*suspend)(struct pnp_card_link *, pm_message_t);
-	int (*resume)(struct pnp_card_link *);
-	struct pnp_driver link;
-};
-
-struct pnp_dev {
-	struct device dev;
-	u64 dma_mask;
-	unsigned int number;
-	int status;
-	struct list_head global_list;
-	struct list_head protocol_list;
-	struct list_head card_list;
-	struct list_head rdev_list;
-	struct pnp_protocol *protocol;
-	struct pnp_card *card;
-	struct pnp_driver *driver;
-	struct pnp_card_link *card_link;
-	struct pnp_id *id;
-	int active;
-	int capabilities;
-	unsigned int num_dependent_sets;
-	struct list_head resources;
-	struct list_head options;
-	char name[50];
-	int flags;
-	struct proc_dir_entry *procent;
-	void *data;
-};
-
-struct pnp_resource {
-	struct list_head list;
-	struct resource res;
-};
-
-struct pnp_port {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-typedef struct {
-	long unsigned int bits[4];
-} pnp_irq_mask_t;
-
-struct pnp_irq {
-	pnp_irq_mask_t map;
-	unsigned char flags;
-};
-
-struct pnp_dma {
-	unsigned char map;
-	unsigned char flags;
-};
-
-struct pnp_mem {
-	resource_size_t min;
-	resource_size_t max;
-	resource_size_t align;
-	resource_size_t size;
-	unsigned char flags;
-};
-
-struct pnp_option {
-	struct list_head list;
-	unsigned int flags;
-	long unsigned int type;
-	union {
-		struct pnp_port port;
-		struct pnp_irq irq;
-		struct pnp_dma dma;
-		struct pnp_mem mem;
-	} u;
-};
-
-struct pnp_info_buffer {
-	char *buffer;
-	char *curr;
-	long unsigned int size;
-	long unsigned int len;
-	int stop;
-	int error;
-};
-
-typedef struct pnp_info_buffer pnp_info_buffer_t;
-
-struct pnp_fixup {
-	char id[7];
-	void (*quirk_function)(struct pnp_dev *);
-};
-
-struct acpipnp_parse_option_s {
-	struct pnp_dev *dev;
-	unsigned int option_flags;
-};
-
-struct deferred_device {
-	struct amba_device *dev;
-	struct resource *parent;
-	struct list_head node;
-};
-
-struct find_data {
-	struct amba_device *dev;
-	struct device *parent;
-	const char *busid;
-	unsigned int id;
-	unsigned int mask;
-};
-
-struct tegra_ahb {
-	void *regs;
-	struct device *dev;
-	u32 ctx[0];
-};
-
-struct clk_bulk_devres {
-	struct clk_bulk_data *clks;
-	int num_clks;
-};
-
-struct clk_hw;
-
-struct clk_lookup {
-	struct list_head node;
-	const char *dev_id;
-	const char *con_id;
-	struct clk *clk;
-	struct clk_hw *clk_hw;
-};
-
-struct clk_core;
-
-struct clk_init_data;
-
-struct clk_hw {
-	struct clk_core *core;
-	struct clk *clk;
-	const struct clk_init_data *init;
-};
-
-struct clk_rate_request {
-	long unsigned int rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int best_parent_rate;
-	struct clk_hw *best_parent_hw;
-};
-
-struct clk_duty {
-	unsigned int num;
-	unsigned int den;
-};
-
-struct clk_ops {
-	int (*prepare)(struct clk_hw *);
-	void (*unprepare)(struct clk_hw *);
-	int (*is_prepared)(struct clk_hw *);
-	void (*unprepare_unused)(struct clk_hw *);
-	int (*enable)(struct clk_hw *);
-	void (*disable)(struct clk_hw *);
-	int (*is_enabled)(struct clk_hw *);
-	void (*disable_unused)(struct clk_hw *);
-	int (*save_context)(struct clk_hw *);
-	void (*restore_context)(struct clk_hw *);
-	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
-	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
-	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
-	int (*set_parent)(struct clk_hw *, u8);
-	u8 (*get_parent)(struct clk_hw *);
-	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
-	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
-	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
-	int (*get_phase)(struct clk_hw *);
-	int (*set_phase)(struct clk_hw *, int);
-	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
-	int (*init)(struct clk_hw *);
-	void (*terminate)(struct clk_hw *);
-	void (*debug_init)(struct clk_hw *, struct dentry *);
-};
-
-struct clk_parent_data {
-	const struct clk_hw *hw;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct clk_init_data {
-	const char *name;
-	const struct clk_ops *ops;
-	const char * const *parent_names;
-	const struct clk_parent_data *parent_data;
-	const struct clk_hw **parent_hws;
-	u8 num_parents;
-	long unsigned int flags;
-};
-
-struct clk_lookup_alloc {
-	struct clk_lookup cl;
-	char dev_id[20];
-	char con_id[16];
-};
-
-struct clk_notifier {
-	struct clk *clk;
-	struct srcu_notifier_head notifier_head;
-	struct list_head node;
-};
-
-struct clk {
-	struct clk_core *core;
-	struct device *dev;
-	const char *dev_id;
-	const char *con_id;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	unsigned int exclusive_count;
-	struct hlist_node clks_node;
-};
-
-struct clk_notifier_data {
-	struct clk *clk;
-	long unsigned int old_rate;
-	long unsigned int new_rate;
-};
-
-struct clk_parent_map;
-
-struct clk_core {
-	const char *name;
-	const struct clk_ops *ops;
-	struct clk_hw *hw;
-	struct module *owner;
-	struct device *dev;
-	struct device_node *of_node;
-	struct clk_core *parent;
-	struct clk_parent_map *parents;
-	u8 num_parents;
-	u8 new_parent_index;
-	long unsigned int rate;
-	long unsigned int req_rate;
-	long unsigned int new_rate;
-	struct clk_core *new_parent;
-	struct clk_core *new_child;
-	long unsigned int flags;
-	bool orphan;
-	bool rpm_enabled;
-	unsigned int enable_count;
-	unsigned int prepare_count;
-	unsigned int protect_count;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int accuracy;
-	int phase;
-	struct clk_duty duty;
-	struct hlist_head children;
-	struct hlist_node child_node;
-	struct hlist_head clks;
-	unsigned int notifier_count;
-	struct dentry *dentry;
-	struct hlist_node debug_node;
-	struct kref ref;
-};
-
-struct clk_onecell_data {
-	struct clk **clks;
-	unsigned int clk_num;
-};
-
-struct clk_hw_onecell_data {
-	unsigned int num;
-	struct clk_hw *hws[0];
-};
-
-struct clk_parent_map {
-	const struct clk_hw *hw;
-	struct clk_core *core;
-	const char *fw_name;
-	const char *name;
-	int index;
-};
-
-struct trace_event_raw_clk {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_rate {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	long unsigned int rate;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_parent {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	u32 __data_loc_pname;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_phase {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int phase;
-	char __data[0];
-};
-
-struct trace_event_raw_clk_duty_cycle {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int num;
-	unsigned int den;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_clk {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_rate {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_parent {
-	u32 name;
-	u32 pname;
-};
-
-struct trace_event_data_offsets_clk_phase {
-	u32 name;
-};
-
-struct trace_event_data_offsets_clk_duty_cycle {
-	u32 name;
-};
-
-typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
-
-typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
-
-typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
-
-typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
-
-typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
-
-struct of_clk_provider {
-	struct list_head link;
-	struct device_node *node;
-	struct clk * (*get)(struct of_phandle_args *, void *);
-	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
-	void *data;
-};
-
-struct clock_provider {
-	void (*clk_init_cb)(struct device_node *);
-	struct device_node *np;
-	struct list_head node;
-};
-
-struct clk_div_table {
-	unsigned int val;
-	unsigned int div;
-};
-
-struct clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-typedef void (*of_init_fn_1)(struct device_node *);
-
-struct clk_fixed_factor {
-	struct clk_hw hw;
-	unsigned int mult;
-	unsigned int div;
-};
-
-struct clk_fixed_rate {
-	struct clk_hw hw;
-	long unsigned int fixed_rate;
-	long unsigned int fixed_accuracy;
-	long unsigned int flags;
-};
-
-struct clk_gate {
-	struct clk_hw hw;
-	void *reg;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_multiplier {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_mux {
-	struct clk_hw hw;
-	void *reg;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct clk_composite {
-	struct clk_hw hw;
-	struct clk_ops ops;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *rate_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct clk_fractional_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 mshift;
-	u8 mwidth;
-	u32 mmask;
-	u8 nshift;
-	u8 nwidth;
-	u32 nmask;
-	u8 flags;
-	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
-	spinlock_t *lock;
-};
-
-struct clk_gpio {
-	struct clk_hw hw;
-	struct gpio_desc *gpiod;
-};
-
-struct ccsr_guts {
-	u32 porpllsr;
-	u32 porbmsr;
-	u32 porimpscr;
-	u32 pordevsr;
-	u32 pordbgmsr;
-	u32 pordevsr2;
-	u8 res018[8];
-	u32 porcir;
-	u8 res024[12];
-	u32 gpiocr;
-	u8 res034[12];
-	u32 gpoutdr;
-	u8 res044[12];
-	u32 gpindr;
-	u8 res054[12];
-	u32 pmuxcr;
-	u32 pmuxcr2;
-	u32 dmuxcr;
-	u8 res06c[4];
-	u32 devdisr;
-	u32 devdisr2;
-	u8 res078[4];
-	u32 pmjcr;
-	u32 powmgtcsr;
-	u32 pmrccr;
-	u32 pmpdccr;
-	u32 pmcdr;
-	u32 mcpsumr;
-	u32 rstrscr;
-	u32 ectrstcr;
-	u32 autorstsr;
-	u32 pvr;
-	u32 svr;
-	u8 res0a8[8];
-	u32 rstcr;
-	u8 res0b4[12];
-	u32 iovselsr;
-	u8 res0c4[60];
-	u32 rcwsr[16];
-	u8 res140[228];
-	u32 iodelay1;
-	u32 iodelay2;
-	u8 res22c[984];
-	u32 pamubypenr;
-	u8 res608[504];
-	u32 clkdvdr;
-	u8 res804[252];
-	u32 ircr;
-	u8 res904[4];
-	u32 dmacr;
-	u8 res90c[8];
-	u32 elbccr;
-	u8 res918[520];
-	u32 ddr1clkdr;
-	u32 ddr2clkdr;
-	u32 ddrclkdr;
-	u8 resb2c[724];
-	u32 clkocr;
-	u8 rese04[12];
-	u32 ddrdllcr;
-	u8 rese14[12];
-	u32 lbcdllcr;
-	u32 cpfor;
-	u8 rese28[220];
-	u32 srds1cr0;
-	u32 srds1cr1;
-	u8 resf0c[32];
-	u32 itcr;
-	u8 resf30[16];
-	u32 srds2cr0;
-	u32 srds2cr1;
-};
-
-struct clockgen_pll_div {
-	struct clk *clk;
-	char name[32];
-};
-
-struct clockgen_pll {
-	struct clockgen_pll_div div[32];
-};
-
-struct clockgen_sourceinfo {
-	u32 flags;
-	int pll;
-	int div;
-};
-
-struct clockgen_muxinfo {
-	struct clockgen_sourceinfo clksel[16];
-};
-
-struct clockgen;
-
-struct clockgen_chipinfo {
-	const char *compat;
-	const char *guts_compat;
-	const struct clockgen_muxinfo *cmux_groups[2];
-	const struct clockgen_muxinfo *hwaccel[5];
-	void (*init_periph)(struct clockgen *);
-	int cmux_to_group[9];
-	u32 pll_mask;
-	u32 flags;
-};
-
-struct clockgen {
-	struct device_node *node;
-	void *regs;
-	struct clockgen_chipinfo info;
-	struct clk *sysclk;
-	struct clk *coreclk;
-	struct clockgen_pll pll[6];
-	struct clk *cmux[8];
-	struct clk *hwaccel[5];
-	struct clk *fman[2];
-	struct ccsr_guts *guts;
-};
-
-struct mux_hwclock {
-	struct clk_hw hw;
-	struct clockgen *cg;
-	const struct clockgen_muxinfo *info;
-	u32 *reg;
-	u8 parent_to_clksel[16];
-	s8 clksel_to_parent[16];
-	int num_parents;
-};
-
-struct scpi_opp {
-	u32 freq;
-	u32 m_volt;
-};
-
-struct scpi_dvfs_info {
-	unsigned int count;
-	unsigned int latency;
-	struct scpi_opp *opps;
-};
-
-struct scpi_sensor_info {
-	u16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct scpi_ops {
-	u32 (*get_version)();
-	int (*clk_get_range)(u16, long unsigned int *, long unsigned int *);
-	long unsigned int (*clk_get_val)(u16);
-	int (*clk_set_val)(u16, long unsigned int);
-	int (*dvfs_get_idx)(u8);
-	int (*dvfs_set_idx)(u8, u8);
-	struct scpi_dvfs_info * (*dvfs_get_info)(u8);
-	int (*device_domain_id)(struct device *);
-	int (*get_transition_latency)(struct device *);
-	int (*add_opps_to_device)(struct device *);
-	int (*sensor_get_capability)(u16 *);
-	int (*sensor_get_info)(u16, struct scpi_sensor_info *);
-	int (*sensor_get_value)(u16, u64 *);
-	int (*device_get_power_state)(u16);
-	int (*device_set_power_state)(u16, u8);
-};
-
-struct scpi_clk {
-	u32 id;
-	struct clk_hw hw;
-	struct scpi_dvfs_info *info;
-	struct scpi_ops *scpi_ops;
-};
-
-struct scpi_clk_data {
-	struct scpi_clk **clk;
-	unsigned int clk_num;
-};
-
-enum xgene_pll_type {
-	PLL_TYPE_PCP = 0,
-	PLL_TYPE_SOC = 1,
-};
-
-struct xgene_clk_pll {
-	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	u32 pll_offset;
-	enum xgene_pll_type type;
-	int version;
-};
-
-struct xgene_clk_pmd {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u32 mask;
-	u64 denom;
-	u32 flags;
-	spinlock_t *lock;
-};
-
-struct xgene_dev_parameters {
-	void *csr_reg;
-	u32 reg_clk_offset;
-	u32 reg_clk_mask;
-	u32 reg_csr_offset;
-	u32 reg_csr_mask;
-	void *divider_reg;
-	u32 reg_divider_offset;
-	u32 reg_divider_shift;
-	u32 reg_divider_width;
-};
-
-struct xgene_clk {
-	struct clk_hw hw;
-	spinlock_t *lock;
-	struct xgene_dev_parameters param;
-};
-
-struct reset_controller_dev;
-
-struct reset_control_ops {
-	int (*reset)(struct reset_controller_dev *, long unsigned int);
-	int (*assert)(struct reset_controller_dev *, long unsigned int);
-	int (*deassert)(struct reset_controller_dev *, long unsigned int);
-	int (*status)(struct reset_controller_dev *, long unsigned int);
-};
-
-struct reset_controller_dev {
-	const struct reset_control_ops *ops;
-	struct module *owner;
-	struct list_head list;
-	struct list_head reset_control_head;
-	struct device *dev;
-	struct device_node *of_node;
-	int of_reset_n_cells;
-	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
-	unsigned int nr_resets;
-};
-
-struct reset_simple_data {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-	bool active_low;
-	bool status_active_low;
-	unsigned int reset_us;
-};
-
-struct clk_dvp {
-	struct clk_hw_onecell_data *data;
-	struct reset_simple_data reset;
-};
-
-struct bcm2835_cprman {
-	struct device *dev;
-	void *regs;
-	spinlock_t regs_lock;
-	unsigned int soc;
-	const char *real_parent_names[7];
-	struct clk_hw_onecell_data onecell;
-};
-
-struct cprman_plat_data {
-	unsigned int soc;
-};
-
-struct bcm2835_pll_ana_bits;
-
-struct bcm2835_pll_data {
-	const char *name;
-	u32 cm_ctrl_reg;
-	u32 a2w_ctrl_reg;
-	u32 frac_reg;
-	u32 ana_reg_base;
-	u32 reference_enable_mask;
-	u32 lock_mask;
-	u32 flags;
-	const struct bcm2835_pll_ana_bits *ana;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-	long unsigned int max_fb_rate;
-};
-
-struct bcm2835_pll_ana_bits {
-	u32 mask0;
-	u32 set0;
-	u32 mask1;
-	u32 set1;
-	u32 mask3;
-	u32 set3;
-	u32 fb_prediv_mask;
-};
-
-struct bcm2835_pll_divider_data {
-	const char *name;
-	const char *source_pll;
-	u32 cm_reg;
-	u32 a2w_reg;
-	u32 load_mask;
-	u32 hold_mask;
-	u32 fixed_divider;
-	u32 flags;
-};
-
-struct bcm2835_clock_data {
-	const char *name;
-	const char * const *parents;
-	int num_mux_parents;
-	unsigned int set_rate_parent;
-	u32 ctl_reg;
-	u32 div_reg;
-	u32 int_bits;
-	u32 frac_bits;
-	u32 flags;
-	bool is_vpu_clock;
-	bool is_mash_clock;
-	bool low_jitter;
-	u32 tcnt_mux;
-};
-
-struct bcm2835_gate_data {
-	const char *name;
-	const char *parent;
-	u32 ctl_reg;
-};
-
-struct bcm2835_pll {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_data *data;
-};
-
-struct bcm2835_pll_divider {
-	struct clk_divider div;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_pll_divider_data *data;
-};
-
-struct bcm2835_clock {
-	struct clk_hw hw;
-	struct bcm2835_cprman *cprman;
-	const struct bcm2835_clock_data *data;
-};
-
-struct bcm2835_clk_desc {
-	struct clk_hw * (*clk_register)(struct bcm2835_cprman *, const void *);
-	unsigned int supported;
-	const void *data;
-};
-
-struct hisi_clock_data {
-	struct clk_onecell_data clk_data;
-	void *base;
-};
-
-struct hisi_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct hisi_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct hisi_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-	u32 *table;
-	const char *alias;
-};
-
-struct hisi_phase_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_names;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 *phase_degrees;
-	u32 *phase_regvals;
-	u8 phase_num;
-};
-
-struct hisi_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-	const char *alias;
-};
-
-struct hi6220_divider_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u32 mask_bit;
-	const char *alias;
-};
-
-struct hisi_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-	const char *alias;
-};
-
-struct clkgate_separated {
-	struct clk_hw hw;
-	void *enable;
-	u8 bit_idx;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct hi6220_clk_divider {
-	struct clk_hw hw;
-	void *reg;
-	u8 shift;
-	u8 width;
-	u32 mask;
-	const struct clk_div_table *table;
-	spinlock_t *lock;
-};
-
-struct clk_hisi_phase {
-	struct clk_hw hw;
-	void *reg;
-	u32 *phase_degrees;
-	u32 *phase_regvals;
-	u8 phase_num;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-	spinlock_t *lock;
-};
-
-struct hisi_crg_funcs {
-	struct hisi_clock_data * (*register_clks)(struct platform_device *);
-	void (*unregister_clks)(struct platform_device *);
-};
-
-struct hisi_reset_controller;
-
-struct hisi_crg_dev {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-	const struct hisi_crg_funcs *funcs;
-};
-
-struct hi3519_crg_data {
-	struct hisi_clock_data *clk_data;
-	struct hisi_reset_controller *rstc;
-};
-
-struct hisi_reset_controller___2 {
-	spinlock_t lock;
-	void *membase;
-	struct reset_controller_dev rcdev;
-};
-
-struct mbox_chan___2;
-
-struct hi6220_stub_clk {
-	u32 id;
-	struct device *dev;
-	struct clk_hw hw;
-	struct regmap *dfs_map;
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi6220_mbox_msg {
-	unsigned char type;
-	unsigned char cmd;
-	unsigned char obj;
-	unsigned char src;
-	unsigned char para[4];
-};
-
-union hi6220_mbox_data {
-	unsigned int data[8];
-	struct hi6220_mbox_msg msg;
-};
-
-struct hi3660_stub_clk_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *mbox;
-};
-
-struct hi3660_stub_clk {
-	unsigned int id;
-	struct clk_hw hw;
-	unsigned int cmd;
-	unsigned int msg[8];
-	unsigned int rate;
-};
-
-struct mtk_fixed_clk {
-	int id;
-	const char *name;
-	const char *parent;
-	long unsigned int rate;
-};
-
-struct mtk_fixed_factor {
-	int id;
-	const char *name;
-	const char *parent_name;
-	int mult;
-	int div;
-};
-
-struct mtk_composite {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	const char *parent;
-	unsigned int flags;
-	uint32_t mux_reg;
-	uint32_t divider_reg;
-	uint32_t gate_reg;
-	signed char mux_shift;
-	signed char mux_width;
-	signed char gate_shift;
-	signed char divider_shift;
-	signed char divider_width;
-	u8 mux_flags;
-	signed char num_parents;
-};
-
-struct mtk_gate_regs {
-	u32 sta_ofs;
-	u32 clr_ofs;
-	u32 set_ofs;
-};
-
-struct mtk_gate {
-	int id;
-	const char *name;
-	const char *parent_name;
-	const struct mtk_gate_regs *regs;
-	int shift;
-	const struct clk_ops *ops;
-	long unsigned int flags;
-};
-
-struct mtk_clk_divider {
-	int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	u32 div_reg;
-	unsigned char div_shift;
-	unsigned char div_width;
-	unsigned char clk_divider_flags;
-	const struct clk_div_table *clk_div_table;
-};
-
-struct mtk_pll_div_table {
-	u32 div;
-	long unsigned int freq;
-};
-
-struct mtk_pll_data {
-	int id;
-	const char *name;
-	uint32_t reg;
-	uint32_t pwr_reg;
-	uint32_t en_mask;
-	uint32_t pd_reg;
-	uint32_t tuner_reg;
-	uint32_t tuner_en_reg;
-	uint8_t tuner_en_bit;
-	int pd_shift;
-	unsigned int flags;
-	const struct clk_ops *ops;
-	u32 rst_bar_mask;
-	long unsigned int fmin;
-	long unsigned int fmax;
-	int pcwbits;
-	int pcwibits;
-	uint32_t pcw_reg;
-	int pcw_shift;
-	uint32_t pcw_chg_reg;
-	const struct mtk_pll_div_table *div_table;
-	const char *parent_name;
-};
-
-struct mtk_clk_pll {
-	struct clk_hw hw;
-	void *base_addr;
-	void *pd_addr;
-	void *pwr_addr;
-	void *tuner_addr;
-	void *tuner_en_addr;
-	void *pcw_addr;
-	void *pcw_chg_addr;
-	const struct mtk_pll_data *data;
-};
-
-struct mtk_clk_gate {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	int set_ofs;
-	int clr_ofs;
-	int sta_ofs;
-	u8 bit;
-};
-
-struct mtk_ref2usb_tx {
-	struct clk_hw hw;
-	void *base_addr;
-};
-
-struct mtk_clk_cpumux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 mask;
-	u8 shift;
-};
-
-struct mtk_reset {
-	struct regmap *regmap;
-	int regofs;
-	struct reset_controller_dev rcdev;
-};
-
-struct mtk_mux;
-
-struct mtk_clk_mux {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	const struct mtk_mux *data;
-	spinlock_t *lock;
-};
-
-struct mtk_mux {
-	int id;
-	const char *name;
-	const char * const *parent_names;
-	unsigned int flags;
-	u32 mux_ofs;
-	u32 set_ofs;
-	u32 clr_ofs;
-	u32 upd_ofs;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 gate_shift;
-	s8 upd_shift;
-	const struct clk_ops *ops;
-	signed char num_parents;
-};
-
-struct clk_mt8167_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct mtk_clk_usb {
-	int id;
-	const char *name;
-	const char *parent;
-	u32 reg_ofs;
-};
-
-struct clk_mt8173_mm_driver_data {
-	const struct mtk_gate *gates_clk;
-	int gates_num;
-};
-
-struct clk_regmap {
-	struct clk_hw hw;
-	struct regmap *map;
-	void *data;
-};
-
-struct meson_aoclk_data {
-	const unsigned int reset_reg;
-	const int num_reset;
-	const unsigned int *reset;
-	const int num_clks;
-	struct clk_regmap **clks;
-	const struct clk_hw_onecell_data *hw_data;
-};
-
-struct meson_aoclk_reset_controller {
-	struct reset_controller_dev reset;
-	const struct meson_aoclk_data *data;
-	struct regmap *regmap;
-};
-
-struct parm {
-	u16 reg_off;
-	u8 shift;
-	u8 width;
-};
-
-struct meson_clk_cpu_dyndiv_data {
-	struct parm div;
-	struct parm dyn;
-};
-
-struct meson_clk_dualdiv_param {
-	unsigned int n1;
-	unsigned int n2;
-	unsigned int m1;
-	unsigned int m2;
-	unsigned int dual;
-};
-
-struct meson_clk_dualdiv_data {
-	struct parm n1;
-	struct parm n2;
-	struct parm m1;
-	struct parm m2;
-	struct parm dual;
-	const struct meson_clk_dualdiv_param *table;
-};
-
-struct reg_sequence {
-	unsigned int reg;
-	unsigned int def;
-	unsigned int delay_us;
-};
-
-struct meson_eeclkc_data {
-	struct clk_regmap * const *regmap_clks;
-	unsigned int regmap_clk_num;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	struct clk_hw_onecell_data *hw_onecell_data;
-};
-
-struct meson_clk_mpll_data {
-	struct parm sdm;
-	struct parm sdm_en;
-	struct parm n2;
-	struct parm ssen;
-	struct parm misc;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	spinlock_t *lock;
-	u8 flags;
-};
-
-struct pll_params_table {
-	unsigned int m;
-	unsigned int n;
-};
-
-struct pll_mult_range {
-	unsigned int min;
-	unsigned int max;
-};
-
-struct meson_clk_pll_data {
-	struct parm en;
-	struct parm m;
-	struct parm n;
-	struct parm frac;
-	struct parm l;
-	struct parm rst;
-	const struct reg_sequence *init_regs;
-	unsigned int init_count;
-	const struct pll_params_table *table;
-	const struct pll_mult_range *range;
-	u8 flags;
-};
-
-struct clk_regmap_gate_data {
-	unsigned int offset;
-	u8 bit_idx;
-	u8 flags;
-};
-
-struct clk_regmap_div_data {
-	unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 flags;
-	const struct clk_div_table *table;
-};
-
-struct clk_regmap_mux_data {
-	unsigned int offset;
-	u32 *table;
-	u32 mask;
-	u8 shift;
-	u8 flags;
-};
-
-struct meson_vid_pll_div_data {
-	struct parm val;
-	struct parm sel;
-};
-
-struct vid_pll_div {
-	unsigned int shift_val;
-	unsigned int shift_sel;
-	unsigned int divider;
-	unsigned int multiplier;
-};
-
-struct g12a_cpu_clk_postmux_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *xtal;
-	struct clk_hw *cpu_clk_dyn;
-	struct clk_hw *cpu_clk_postmux0;
-	struct clk_hw *cpu_clk_postmux1;
-	struct clk_hw *cpu_clk_premux1;
-};
-
-struct g12a_sys_pll_nb_data {
-	struct notifier_block nb;
-	struct clk_hw *sys_pll;
-	struct clk_hw *cpu_clk;
-	struct clk_hw *cpu_clk_dyn;
-};
-
-struct meson_g12a_data {
-	const struct meson_eeclkc_data eeclkc_data;
-	int (*dvfs_setup)(struct platform_device *);
-};
-
-struct tbg_def {
-	char *name;
-	u32 refdiv_offset;
-	u32 fbdiv_offset;
-	u32 vcodiv_reg;
-	u32 vcodiv_offset;
-};
-
-struct clk_periph_driver_data {
-	struct clk_hw_onecell_data *hw_data;
-	spinlock_t lock;
-	void *reg;
-	u32 tbg_sel;
-	u32 div_sel0;
-	u32 div_sel1;
-	u32 div_sel2;
-	u32 clk_sel;
-	u32 clk_dis;
-};
-
-struct clk_double_div {
-	struct clk_hw hw;
-	void *reg1;
-	u8 shift1;
-	void *reg2;
-	u8 shift2;
-};
-
-struct clk_pm_cpu {
-	struct clk_hw hw;
-	void *reg_mux;
-	u8 shift_mux;
-	u32 mask_mux;
-	void *reg_div;
-	u8 shift_div;
-	struct regmap *nb_pm_base;
-};
-
-struct clk_periph_data {
-	const char *name;
-	const char * const *parent_names;
-	int num_parents;
-	struct clk_hw *mux_hw;
-	struct clk_hw *rate_hw;
-	struct clk_hw *gate_hw;
-	struct clk_hw *muxrate_hw;
-	bool is_double_div;
-};
-
-struct cpu_dfs_regs {
-	unsigned int divider_reg;
-	unsigned int force_reg;
-	unsigned int ratio_reg;
-	unsigned int ratio_state_reg;
-	unsigned int divider_mask;
-	unsigned int cluster_offset;
-	unsigned int force_mask;
-	int divider_offset;
-	int divider_ratio;
-	int ratio_offset;
-	int ratio_state_offset;
-	int ratio_state_cluster_offset;
-};
-
-struct ap_cpu_clk {
-	unsigned int cluster;
-	const char *clk_name;
-	struct device *dev;
-	struct clk_hw hw;
-	struct regmap *pll_cr_base;
-	const struct cpu_dfs_regs *pll_regs;
-};
-
-enum {
-	CP110_CLK_TYPE_CORE = 0,
-	CP110_CLK_TYPE_GATABLE = 1,
-};
-
-struct cp110_gate_clk {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u8 bit_idx;
-};
-
-struct clk_regmap___2;
-
-struct qcom_reset_map;
-
-struct gdsc;
-
-struct qcom_cc_desc {
-	const struct regmap_config *config;
-	struct clk_regmap___2 **clks;
-	size_t num_clks;
-	const struct qcom_reset_map *resets;
-	size_t num_resets;
-	struct gdsc **gdscs;
-	size_t num_gdscs;
-	struct clk_hw **clk_hws;
-	size_t num_clk_hws;
-};
-
-struct clk_regmap___2 {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	bool enable_is_inverted;
-};
-
-struct qcom_reset_map {
-	unsigned int reg;
-	u8 bit;
-};
-
-enum gpd_status {
-	GENPD_STATE_ON = 0,
-	GENPD_STATE_OFF = 1,
-};
-
-struct opp_table;
-
-struct dev_pm_opp;
-
-struct gpd_dev_ops {
-	int (*start)(struct device *);
-	int (*stop)(struct device *);
-};
-
-struct dev_power_governor;
-
-struct genpd_power_state;
-
-struct genpd_lock_ops;
-
-struct generic_pm_domain {
-	struct device dev;
-	struct dev_pm_domain domain;
-	struct list_head gpd_list_node;
-	struct list_head parent_links;
-	struct list_head child_links;
-	struct list_head dev_list;
-	struct dev_power_governor *gov;
-	struct work_struct power_off_work;
-	struct fwnode_handle *provider;
-	bool has_provider;
-	const char *name;
-	atomic_t sd_count;
-	enum gpd_status status;
-	unsigned int device_count;
-	unsigned int suspended_count;
-	unsigned int prepared_count;
-	unsigned int performance_state;
-	cpumask_var_t cpus;
-	int (*power_off)(struct generic_pm_domain *);
-	int (*power_on)(struct generic_pm_domain *);
-	struct raw_notifier_head power_notifiers;
-	struct opp_table *opp_table;
-	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
-	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
-	struct gpd_dev_ops dev_ops;
-	s64 max_off_time_ns;
-	bool max_off_time_changed;
-	bool cached_power_down_ok;
-	bool cached_power_down_state_idx;
-	int (*attach_dev)(struct generic_pm_domain *, struct device *);
-	void (*detach_dev)(struct generic_pm_domain *, struct device *);
-	unsigned int flags;
-	struct genpd_power_state *states;
-	void (*free_states)(struct genpd_power_state *, unsigned int);
-	unsigned int state_count;
-	unsigned int state_idx;
-	ktime_t on_time;
-	ktime_t accounting_time;
-	const struct genpd_lock_ops *lock_ops;
-	union {
-		struct mutex mlock;
-		struct {
-			spinlock_t slock;
-			long unsigned int lock_flags;
-		};
-	};
-};
-
-struct gdsc {
-	struct generic_pm_domain pd;
-	struct generic_pm_domain *parent;
-	struct regmap *regmap;
-	unsigned int gdscr;
-	unsigned int gds_hw_ctrl;
-	unsigned int clamp_io_ctrl;
-	unsigned int *cxcs;
-	unsigned int cxc_count;
-	const u8 pwrsts;
-	const u8 flags;
-	struct reset_controller_dev *rcdev;
-	unsigned int *resets;
-	unsigned int reset_count;
-	const char *supply;
-	struct regulator *rsupply;
-};
-
-struct parent_map {
-	u8 src;
-	u8 cfg;
-};
-
-struct freq_tbl {
-	long unsigned int freq;
-	u8 src;
-	u8 pre_div;
-	u16 m;
-	u16 n;
-};
-
-struct qcom_reset_controller {
-	const struct qcom_reset_map *reset_map;
-	struct regmap *regmap;
-	struct reset_controller_dev rcdev;
-};
-
-struct dev_power_governor {
-	bool (*power_down_ok)(struct dev_pm_domain *);
-	bool (*suspend_ok)(struct device *);
-};
-
-struct genpd_power_state {
-	s64 power_off_latency_ns;
-	s64 power_on_latency_ns;
-	s64 residency_ns;
-	u64 usage;
-	u64 rejected;
-	struct fwnode_handle *fwnode;
-	ktime_t idle_time;
-	void *data;
-};
-
-struct genpd_lock_ops {
-	void (*lock)(struct generic_pm_domain *);
-	void (*lock_nested)(struct generic_pm_domain *, int);
-	int (*lock_interruptible)(struct generic_pm_domain *);
-	void (*unlock)(struct generic_pm_domain *);
-};
-
-struct gdsc_desc {
-	struct device *dev;
-	struct gdsc **scs;
-	size_t num;
-};
-
-struct qcom_cc {
-	struct qcom_reset_controller reset;
-	struct clk_regmap___2 **rclks;
-	size_t num_rclks;
-};
-
-enum {
-	CLK_ALPHA_PLL_TYPE_DEFAULT = 0,
-	CLK_ALPHA_PLL_TYPE_HUAYRA = 1,
-	CLK_ALPHA_PLL_TYPE_BRAMMO = 2,
-	CLK_ALPHA_PLL_TYPE_FABIA = 3,
-	CLK_ALPHA_PLL_TYPE_TRION = 4,
-	CLK_ALPHA_PLL_TYPE_LUCID = 4,
-	CLK_ALPHA_PLL_TYPE_MAX = 5,
-};
-
-enum {
-	PLL_OFF_L_VAL = 0,
-	PLL_OFF_CAL_L_VAL = 1,
-	PLL_OFF_ALPHA_VAL = 2,
-	PLL_OFF_ALPHA_VAL_U = 3,
-	PLL_OFF_USER_CTL = 4,
-	PLL_OFF_USER_CTL_U = 5,
-	PLL_OFF_USER_CTL_U1 = 6,
-	PLL_OFF_CONFIG_CTL = 7,
-	PLL_OFF_CONFIG_CTL_U = 8,
-	PLL_OFF_CONFIG_CTL_U1 = 9,
-	PLL_OFF_TEST_CTL = 10,
-	PLL_OFF_TEST_CTL_U = 11,
-	PLL_OFF_TEST_CTL_U1 = 12,
-	PLL_OFF_STATUS = 13,
-	PLL_OFF_OPMODE = 14,
-	PLL_OFF_FRAC = 15,
-	PLL_OFF_CAL_VAL = 16,
-	PLL_OFF_MAX_REGS = 17,
-};
-
-struct pll_vco {
-	long unsigned int min_freq;
-	long unsigned int max_freq;
-	u32 val;
-};
-
-struct clk_alpha_pll {
-	u32 offset;
-	const u8 *regs;
-	const struct pll_vco *vco_table;
-	size_t num_vco;
-	u8 flags;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_alpha_pll_postdiv {
-	u32 offset;
-	u8 width;
-	const u8 *regs;
-	struct clk_regmap___2 clkr;
-	int post_div_shift;
-	const struct clk_div_table *post_div_table;
-	size_t num_post_div;
-};
-
-struct alpha_pll_config {
-	u32 l;
-	u32 alpha;
-	u32 alpha_hi;
-	u32 config_ctl_val;
-	u32 config_ctl_hi_val;
-	u32 config_ctl_hi1_val;
-	u32 user_ctl_val;
-	u32 user_ctl_hi_val;
-	u32 user_ctl_hi1_val;
-	u32 test_ctl_val;
-	u32 test_ctl_hi_val;
-	u32 test_ctl_hi1_val;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-	u32 aux2_output_mask;
-	u32 early_output_mask;
-	u32 alpha_en_mask;
-	u32 alpha_mode_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 vco_val;
-	u32 vco_mask;
-};
-
-struct pll_freq_tbl {
-	long unsigned int freq;
-	u16 l;
-	u16 m;
-	u16 n;
-	u32 ibits;
-};
-
-struct clk_pll {
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 config_reg;
-	u32 mode_reg;
-	u32 status_reg;
-	u8 status_bit;
-	u8 post_div_width;
-	u8 post_div_shift;
-	const struct pll_freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct pll_config {
-	u16 l;
-	u32 m;
-	u32 n;
-	u32 vco_val;
-	u32 vco_mask;
-	u32 pre_div_val;
-	u32 pre_div_mask;
-	u32 post_div_val;
-	u32 post_div_mask;
-	u32 mn_ena_mask;
-	u32 main_output_mask;
-	u32 aux_output_mask;
-};
-
-struct mn {
-	u8 mnctr_en_bit;
-	u8 mnctr_reset_bit;
-	u8 mnctr_mode_shift;
-	u8 n_val_shift;
-	u8 m_val_shift;
-	u8 width;
-	bool reset_in_cc;
-};
-
-struct pre_div {
-	u8 pre_div_shift;
-	u8 pre_div_width;
-};
-
-struct src_sel {
-	u8 src_sel_shift;
-	const struct parent_map *parent_map;
-};
-
-struct clk_rcg {
-	u32 ns_reg;
-	u32 md_reg;
-	struct mn mn;
-	struct pre_div p;
-	struct src_sel s;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_dyn_rcg {
-	u32 ns_reg[2];
-	u32 md_reg[2];
-	u32 bank_reg;
-	u8 mux_sel_bit;
-	struct mn mn[2];
-	struct pre_div p[2];
-	struct src_sel s[2];
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-};
-
-struct frac_entry {
-	int num;
-	int den;
-};
-
-struct clk_rcg2 {
-	u32 cmd_rcgr;
-	u8 mnd_width;
-	u8 hid_width;
-	u8 safe_src_index;
-	const struct parent_map *parent_map;
-	const struct freq_tbl *freq_tbl;
-	struct clk_regmap___2 clkr;
-	u8 cfg_off;
-};
-
-struct clk_rcg_dfs_data {
-	struct clk_rcg2 *rcg;
-	struct clk_init_data *init;
-};
-
-enum freq_policy {
-	FLOOR = 0,
-	CEIL = 1,
-};
-
-struct clk_branch {
-	u32 hwcg_reg;
-	u32 halt_reg;
-	u8 hwcg_bit;
-	u8 halt_bit;
-	u8 halt_check;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_div {
-	u32 reg;
-	u32 shift;
-	u32 width;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_mux {
-	u32 reg;
-	u32 shift;
-	u32 width;
-	const struct parent_map *parent_map;
-	struct clk_regmap___2 clkr;
-};
-
-struct clk_regmap_mux_div {
-	u32 reg_offset;
-	u32 hid_width;
-	u32 hid_shift;
-	u32 src_width;
-	u32 src_shift;
-	u32 div;
-	u32 src;
-	const u32 *parent_map;
-	struct clk_regmap___2 clkr;
-	struct clk *pclk;
-	struct notifier_block clk_nb;
-};
-
-struct hfpll_data {
-	u32 mode_reg;
-	u32 l_reg;
-	u32 m_reg;
-	u32 n_reg;
-	u32 user_reg;
-	u32 droop_reg;
-	u32 config_reg;
-	u32 status_reg;
-	u8 lock_bit;
-	u32 droop_val;
-	u32 config_val;
-	u32 user_val;
-	u32 user_vco_mask;
-	long unsigned int low_vco_max_rate;
-	long unsigned int min_rate;
-	long unsigned int max_rate;
-};
-
-struct clk_hfpll {
-	const struct hfpll_data *d;
-	int init_done;
-	struct clk_regmap___2 clkr;
-	spinlock_t lock;
-};
-
-typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
-
-struct genpd_onecell_data {
-	struct generic_pm_domain **domains;
-	unsigned int num_domains;
-	genpd_xlate_t xlate;
-};
-
-enum gdsc_status {
-	GDSC_OFF = 0,
-	GDSC_ON = 1,
-};
-
-enum {
-	P_XO = 0,
-	P_GPLL0 = 1,
-	P_GPLL0_AUX = 2,
-	P_BIMC = 3,
-	P_GPLL1 = 4,
-	P_GPLL1_AUX = 5,
-	P_GPLL2 = 6,
-	P_GPLL2_AUX = 7,
-	P_SLEEP_CLK = 8,
-	P_DSI0_PHYPLL_BYTE = 9,
-	P_DSI0_PHYPLL_DSI = 10,
-	P_EXT_PRI_I2S = 11,
-	P_EXT_SEC_I2S = 12,
-	P_EXT_MCLK = 13,
-};
-
-enum {
-	P_XO___2 = 0,
-	P_GPLL0___2 = 1,
-	P_GPLL4 = 2,
-};
-
-enum {
-	P_XO___3 = 0,
-	P_GPLL0___3 = 1,
-	P_GPLL2___2 = 2,
-	P_GPLL3 = 3,
-	P_GPLL1___2 = 4,
-	P_GPLL2_EARLY = 5,
-	P_GPLL0_EARLY_DIV = 6,
-	P_SLEEP_CLK___2 = 7,
-	P_GPLL4___2 = 8,
-	P_AUD_REF_CLK = 9,
-	P_GPLL1_EARLY_DIV = 10,
-};
-
-enum {
-	P_XO___4 = 0,
-	P_MMPLL0 = 1,
-	P_GPLL0___4 = 2,
-	P_GPLL0_DIV = 3,
-	P_MMPLL1 = 4,
-	P_MMPLL9 = 5,
-	P_MMPLL2 = 6,
-	P_MMPLL8 = 7,
-	P_MMPLL3 = 8,
-	P_DSI0PLL = 9,
-	P_DSI1PLL = 10,
-	P_MMPLL5 = 11,
-	P_HDMIPLL = 12,
-	P_DSI0PLL_BYTE = 13,
-	P_DSI1PLL_BYTE = 14,
-	P_MMPLL4 = 15,
-};
-
-enum rockchip_pll_type {
-	pll_rk3036 = 0,
-	pll_rk3066 = 1,
-	pll_rk3328 = 2,
-	pll_rk3399 = 3,
-};
-
-struct rockchip_clk_provider {
-	void *reg_base;
-	struct clk_onecell_data clk_data;
-	struct device_node *cru_node;
-	struct regmap *grf;
-	spinlock_t lock;
-};
-
-struct rockchip_pll_rate_table {
-	long unsigned int rate;
-	unsigned int nr;
-	unsigned int nf;
-	unsigned int no;
-	unsigned int nb;
-	unsigned int fbdiv;
-	unsigned int postdiv1;
-	unsigned int refdiv;
-	unsigned int postdiv2;
-	unsigned int dsmpd;
-	unsigned int frac;
-};
-
-struct rockchip_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int con_offset;
-	int mode_offset;
-	int mode_shift;
-	int lock_shift;
-	enum rockchip_pll_type type;
-	u8 pll_flags;
-	struct rockchip_pll_rate_table *rate_table;
-};
-
-struct rockchip_cpuclk_clksel {
-	int reg;
-	u32 val;
-};
-
-struct rockchip_cpuclk_rate_table {
-	long unsigned int prate;
-	struct rockchip_cpuclk_clksel divs[2];
-};
-
-struct rockchip_cpuclk_reg_data {
-	int core_reg;
-	u8 div_core_shift;
-	u32 div_core_mask;
-	u8 mux_core_alt;
-	u8 mux_core_main;
-	u8 mux_core_shift;
-	u32 mux_core_mask;
-};
-
-enum rockchip_clk_branch_type {
-	branch_composite = 0,
-	branch_mux = 1,
-	branch_muxgrf = 2,
-	branch_divider = 3,
-	branch_fraction_divider = 4,
-	branch_gate = 5,
-	branch_mmc = 6,
-	branch_inverter = 7,
-	branch_factor = 8,
-	branch_ddrclk = 9,
-	branch_half_divider = 10,
-};
-
-struct rockchip_clk_branch {
-	unsigned int id;
-	enum rockchip_clk_branch_type branch_type;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	int muxdiv_offset;
-	u8 mux_shift;
-	u8 mux_width;
-	u8 mux_flags;
-	int div_offset;
-	u8 div_shift;
-	u8 div_width;
-	u8 div_flags;
-	struct clk_div_table *div_table;
-	int gate_offset;
-	u8 gate_shift;
-	u8 gate_flags;
-	struct rockchip_clk_branch *child;
-};
-
-struct rockchip_clk_frac {
-	struct notifier_block clk_nb;
-	struct clk_fractional_divider div;
-	struct clk_gate gate;
-	struct clk_mux mux;
-	const struct clk_ops *mux_ops;
-	int mux_frac_idx;
-	bool rate_change_remuxed;
-	int rate_change_idx;
-};
-
-struct rockchip_clk_pll {
-	struct clk_hw hw;
-	struct clk_mux pll_mux;
-	const struct clk_ops *pll_mux_ops;
-	struct notifier_block clk_nb;
-	void *reg_base;
-	int lock_offset;
-	unsigned int lock_shift;
-	enum rockchip_pll_type type;
-	u8 flags;
-	const struct rockchip_pll_rate_table *rate_table;
-	unsigned int rate_count;
-	spinlock_t *lock;
-	struct rockchip_clk_provider *ctx;
-};
-
-struct rockchip_cpuclk {
-	struct clk_hw hw;
-	struct clk_mux cpu_mux;
-	const struct clk_ops *cpu_mux_ops;
-	struct clk *alt_parent;
-	void *reg_base;
-	struct notifier_block clk_nb;
-	unsigned int rate_count;
-	struct rockchip_cpuclk_rate_table *rate_table;
-	const struct rockchip_cpuclk_reg_data *reg_data;
-	spinlock_t *lock;
-};
-
-struct rockchip_inv_clock {
-	struct clk_hw hw;
-	void *reg;
-	int shift;
-	int flags;
-	spinlock_t *lock;
-};
-
-struct rockchip_mmc_clock {
-	struct clk_hw hw;
-	void *reg;
-	int id;
-	int shift;
-	int cached_phase;
-	struct notifier_block clk_rate_change_nb;
-};
-
-struct rockchip_muxgrf_clock {
-	struct clk_hw hw;
-	struct regmap *regmap;
-	u32 reg;
-	u32 shift;
-	u32 width;
-	int flags;
-};
-
-struct rockchip_ddrclk {
-	struct clk_hw hw;
-	void *reg_base;
-	int mux_offset;
-	int mux_shift;
-	int mux_width;
-	int div_shift;
-	int div_width;
-	int ddr_flag;
-	spinlock_t *lock;
-};
-
-struct rockchip_softrst {
-	struct reset_controller_dev rcdev;
-	void *reg_base;
-	int num_regs;
-	int num_per_reg;
-	u8 flags;
-	spinlock_t lock;
-};
-
-enum px30_plls {
-	apll = 0,
-	dpll = 1,
-	cpll = 2,
-	npll = 3,
-	apll_b_h = 4,
-	apll_b_l = 5,
-};
-
-enum px30_pmu_plls {
-	gpll = 0,
-};
-
-enum rv1108_plls {
-	apll___2 = 0,
-	dpll___2 = 1,
-	gpll___2 = 2,
-};
-
-enum rk3036_plls {
-	apll___3 = 0,
-	dpll___3 = 1,
-	gpll___3 = 2,
-};
-
-enum rk3128_plls {
-	apll___4 = 0,
-	dpll___4 = 1,
-	cpll___2 = 2,
-	gpll___4 = 3,
-};
-
-enum rk3188_plls {
-	apll___5 = 0,
-	cpll___3 = 1,
-	dpll___5 = 2,
-	gpll___5 = 3,
-};
-
-enum rk3228_plls {
-	apll___6 = 0,
-	dpll___6 = 1,
-	cpll___4 = 2,
-	gpll___6 = 3,
-};
-
-enum rk3308_plls {
-	apll___7 = 0,
-	dpll___7 = 1,
-	vpll0 = 2,
-	vpll1 = 3,
-};
-
-enum rk3328_plls {
-	apll___8 = 0,
-	dpll___8 = 1,
-	cpll___5 = 2,
-	gpll___7 = 3,
-	npll___2 = 4,
-};
-
-enum rk3368_plls {
-	apllb = 0,
-	aplll = 1,
-	dpll___9 = 2,
-	cpll___6 = 3,
-	gpll___8 = 4,
-	npll___3 = 5,
-};
-
-enum rk3399_plls {
-	lpll = 0,
-	bpll = 1,
-	dpll___10 = 2,
-	cpll___7 = 3,
-	gpll___9 = 4,
-	npll___4 = 5,
-	vpll = 6,
-};
-
-enum rk3399_pmu_plls {
-	ppll = 0,
-};
-
-struct clk_rk3399_inits {
-	void (*inits)(struct device_node *);
-};
-
-enum samsung_pll_type {
-	pll_2126 = 0,
-	pll_3000 = 1,
-	pll_35xx = 2,
-	pll_36xx = 3,
-	pll_2550 = 4,
-	pll_2650 = 5,
-	pll_4500 = 6,
-	pll_4502 = 7,
-	pll_4508 = 8,
-	pll_4600 = 9,
-	pll_4650 = 10,
-	pll_4650c = 11,
-	pll_6552 = 12,
-	pll_6552_s3c2416 = 13,
-	pll_6553 = 14,
-	pll_s3c2410_mpll = 15,
-	pll_s3c2410_upll = 16,
-	pll_s3c2440_mpll = 17,
-	pll_2550x = 18,
-	pll_2550xx = 19,
-	pll_2650x = 20,
-	pll_2650xx = 21,
-	pll_1450x = 22,
-	pll_1451x = 23,
-	pll_1452x = 24,
-	pll_1460x = 25,
-};
-
-struct samsung_pll_rate_table {
-	unsigned int rate;
-	unsigned int pdiv;
-	unsigned int mdiv;
-	unsigned int sdiv;
-	unsigned int kdiv;
-	unsigned int afc;
-	unsigned int mfr;
-	unsigned int mrr;
-	unsigned int vsel;
-};
-
-struct samsung_clk_provider {
-	void *reg_base;
-	struct device *dev;
-	spinlock_t lock;
-	struct clk_hw_onecell_data clk_data;
-};
-
-struct samsung_clock_alias {
-	unsigned int id;
-	const char *dev_name;
-	const char *alias;
-};
-
-struct samsung_fixed_rate_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int fixed_rate;
-};
-
-struct samsung_fixed_factor_clock {
-	unsigned int id;
-	char *name;
-	const char *parent_name;
-	long unsigned int mult;
-	long unsigned int div;
-	long unsigned int flags;
-};
-
-struct samsung_mux_clock {
-	unsigned int id;
-	const char *name;
-	const char * const *parent_names;
-	u8 num_parents;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 mux_flags;
-};
-
-struct samsung_div_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 shift;
-	u8 width;
-	u8 div_flags;
-	struct clk_div_table *table;
-};
-
-struct samsung_gate_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	long unsigned int offset;
-	u8 bit_idx;
-	u8 gate_flags;
-};
-
-struct samsung_clk_reg_dump {
-	u32 offset;
-	u32 value;
-};
-
-struct samsung_pll_clock {
-	unsigned int id;
-	const char *name;
-	const char *parent_name;
-	long unsigned int flags;
-	int con_offset;
-	int lock_offset;
-	enum samsung_pll_type type;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct samsung_clock_reg_cache {
-	struct list_head node;
-	void *reg_base;
-	struct samsung_clk_reg_dump *rdump;
-	unsigned int rd_num;
-	const struct samsung_clk_reg_dump *rsuspend;
-	unsigned int rsuspend_num;
-};
-
-struct samsung_cmu_info {
-	const struct samsung_pll_clock *pll_clks;
-	unsigned int nr_pll_clks;
-	const struct samsung_mux_clock *mux_clks;
-	unsigned int nr_mux_clks;
-	const struct samsung_div_clock *div_clks;
-	unsigned int nr_div_clks;
-	const struct samsung_gate_clock *gate_clks;
-	unsigned int nr_gate_clks;
-	const struct samsung_fixed_rate_clock *fixed_clks;
-	unsigned int nr_fixed_clks;
-	const struct samsung_fixed_factor_clock *fixed_factor_clks;
-	unsigned int nr_fixed_factor_clks;
-	unsigned int nr_clk_ids;
-	const long unsigned int *clk_regs;
-	unsigned int nr_clk_regs;
-	const struct samsung_clk_reg_dump *suspend_regs;
-	unsigned int nr_suspend_regs;
-	const char *clk_name;
-};
-
-struct samsung_clk_pll {
-	struct clk_hw hw;
-	void *lock_reg;
-	void *con_reg;
-	short unsigned int enable_offs;
-	short unsigned int lock_offs;
-	enum samsung_pll_type type;
-	unsigned int rate_count;
-	const struct samsung_pll_rate_table *rate_table;
-};
-
-struct exynos_cpuclk_cfg_data {
-	long unsigned int prate;
-	long unsigned int div0;
-	long unsigned int div1;
-};
-
-struct exynos_cpuclk {
-	struct clk_hw hw;
-	const struct clk_hw *alt_parent;
-	void *ctrl_base;
-	spinlock_t *lock;
-	const struct exynos_cpuclk_cfg_data *cfg;
-	const long unsigned int num_cfgs;
-	struct notifier_block clk_nb;
-	long unsigned int flags;
-};
-
-struct exynos5433_cmu_data {
-	struct samsung_clk_reg_dump *clk_save;
-	unsigned int nr_clk_save;
-	const struct samsung_clk_reg_dump *clk_suspend;
-	unsigned int nr_clk_suspend;
-	struct clk *clk;
-	struct clk **pclks;
-	int nr_pclks;
-	struct samsung_clk_provider ctx;
-};
-
-struct exynos_audss_clk_drvdata {
-	unsigned int has_adma_clk: 1;
-	unsigned int has_mst_clk: 1;
-	unsigned int enable_epll: 1;
-	unsigned int num_clks;
-};
-
-struct exynos_clkout {
-	struct clk_gate gate;
-	struct clk_mux mux;
-	spinlock_t slock;
-	void *reg;
-	u32 pmu_debug_save;
-	struct clk_hw_onecell_data data;
-};
-
-struct clk_factors_config {
-	u8 nshift;
-	u8 nwidth;
-	u8 kshift;
-	u8 kwidth;
-	u8 mshift;
-	u8 mwidth;
-	u8 pshift;
-	u8 pwidth;
-	u8 n_start;
-};
-
-struct factors_request {
-	long unsigned int rate;
-	long unsigned int parent_rate;
-	u8 parent_index;
-	u8 n;
-	u8 k;
-	u8 m;
-	u8 p;
-};
-
-struct factors_data {
-	int enable;
-	int mux;
-	int muxmask;
-	const struct clk_factors_config *table;
-	void (*getter)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	const char *name;
-};
-
-struct clk_factors {
-	struct clk_hw hw;
-	void *reg;
-	const struct clk_factors_config *config;
-	void (*get_factors)(struct factors_request *);
-	void (*recalc)(struct factors_request *);
-	spinlock_t *lock;
-	struct clk_mux *mux;
-	struct clk_gate *gate;
-};
-
-struct mux_data {
-	u8 shift;
-};
-
-struct div_data {
-	u8 shift;
-	u8 pow;
-	u8 width;
-	const struct clk_div_table *table;
-};
-
-struct divs_data {
-	const struct factors_data *factors;
-	int ndivs;
-	struct {
-		u8 self;
-		u8 fixed;
-		struct clk_div_table *table;
-		u8 shift;
-		u8 pow;
-		u8 gate;
-		bool critical;
-	} div[4];
-};
-
-struct ve_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct mmc_phase {
-	struct clk_hw hw;
-	u8 offset;
-	void *reg;
-	spinlock_t *lock;
-};
-
-struct sun4i_a10_display_clk_data {
-	bool has_div;
-	u8 num_rst;
-	u8 parents;
-	u8 offset_en;
-	u8 offset_div;
-	u8 offset_mux;
-	u8 offset_rst;
-	u8 width_div;
-	u8 width_mux;
-	u32 flags;
-};
-
-struct reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-	u8 offset;
-};
-
-struct tcon_ch1_clk {
-	struct clk_hw hw;
-	spinlock_t lock;
-	void *reg;
-};
-
-enum {
-	AHB1 = 0,
-	AHB2 = 1,
-	APB1 = 2,
-	APB2 = 3,
-	PARENT_MAX = 4,
-};
-
-struct sun9i_mmc_clk_data {
-	spinlock_t lock;
-	void *membase;
-	struct clk *clk;
-	struct reset_control *reset;
-	struct clk_onecell_data clk_data;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_reset_data {
-	void *reg;
-	spinlock_t *lock;
-	struct clk *clk;
-	struct reset_controller_dev rcdev;
-};
-
-struct usb_clk_data {
-	u32 clk_mask;
-	u32 reset_mask;
-	bool reset_needs_clk;
-};
-
-struct sun9i_a80_cpus_clk {
-	struct clk_hw hw;
-	void *reg;
-};
-
-struct gates_data {
-	long unsigned int mask[1];
-};
-
-struct ccu_common {
-	void *base;
-	u16 reg;
-	u16 lock_reg;
-	u32 prediv;
-	long unsigned int features;
-	spinlock_t *lock;
-	struct clk_hw hw;
-};
-
-struct ccu_reset_map;
-
-struct sunxi_ccu_desc {
-	struct ccu_common **ccu_clks;
-	long unsigned int num_ccu_clks;
-	struct clk_hw_onecell_data *hw_clks;
-	struct ccu_reset_map *resets;
-	long unsigned int num_resets;
-};
-
-struct ccu_reset_map {
-	u16 reg;
-	u32 bit;
-};
-
-struct ccu_pll_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	u32 enable;
-	u32 lock;
-};
-
-struct ccu_reset {
-	void *base;
-	struct ccu_reset_map *reset_map;
-	spinlock_t *lock;
-	struct reset_controller_dev rcdev;
-};
-
-struct ccu_mux_fixed_prediv {
-	u8 index;
-	u16 div;
-};
-
-struct ccu_mux_var_prediv {
-	u8 index;
-	u8 shift;
-	u8 width;
-};
-
-struct ccu_mux_internal {
-	u8 shift;
-	u8 width;
-	const u8 *table;
-	const struct ccu_mux_fixed_prediv *fixed_predivs;
-	u8 n_predivs;
-	const struct ccu_mux_var_prediv *var_predivs;
-	u8 n_var_predivs;
-};
-
-struct ccu_div_internal {
-	u8 shift;
-	u8 width;
-	u32 max;
-	u32 offset;
-	u32 flags;
-	struct clk_div_table *table;
-};
-
-struct ccu_div {
-	u32 enable;
-	struct ccu_div_internal div;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-	unsigned int fixed_post_div;
-};
-
-struct ccu_frac_internal {
-	u32 enable;
-	u32 select;
-	long unsigned int rates[2];
-};
-
-struct ccu_gate {
-	u32 enable;
-	struct ccu_common common;
-};
-
-struct ccu_mux {
-	u16 reg;
-	u32 enable;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct ccu_mux_nb {
-	struct notifier_block clk_nb;
-	struct ccu_common *common;
-	struct ccu_mux_internal *cm;
-	u32 delay_us;
-	u8 bypass_index;
-	u8 original_index;
-};
-
-struct ccu_mult_internal {
-	u8 offset;
-	u8 shift;
-	u8 width;
-	u8 min;
-	u8 max;
-};
-
-struct ccu_mult {
-	u32 enable;
-	u32 lock;
-	struct ccu_frac_internal frac;
-	struct ccu_mult_internal mult;
-	struct ccu_mux_internal mux;
-	struct ccu_common common;
-};
-
-struct _ccu_mult {
-	long unsigned int mult;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct ccu_phase {
-	u8 shift;
-	u8 width;
-	struct ccu_common common;
-};
-
-struct ccu_sdm_setting {
-	long unsigned int rate;
-	u32 pattern;
-	u32 m;
-	u32 n;
-};
-
-struct ccu_sdm_internal {
-	struct ccu_sdm_setting *table;
-	u32 table_size;
-	u32 enable;
-	u32 tuning_enable;
-	u16 tuning_reg;
-};
-
-struct ccu_nk {
-	u16 reg;
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct _ccu_nk {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-};
-
-struct ccu_nkm {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	struct ccu_div_internal m;
-	struct ccu_mux_internal mux;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct _ccu_nkm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_nkmp {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_mult_internal k;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	unsigned int fixed_post_div;
-	unsigned int max_rate;
-	struct ccu_common common;
-};
-
-struct _ccu_nkmp {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int k;
-	long unsigned int min_k;
-	long unsigned int max_k;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-	long unsigned int p;
-	long unsigned int min_p;
-	long unsigned int max_p;
-};
-
-struct ccu_nm {
-	u32 enable;
-	u32 lock;
-	struct ccu_mult_internal n;
-	struct ccu_div_internal m;
-	struct ccu_frac_internal frac;
-	struct ccu_sdm_internal sdm;
-	unsigned int fixed_post_div;
-	unsigned int min_rate;
-	unsigned int max_rate;
-	struct ccu_common common;
-};
-
-struct _ccu_nm {
-	long unsigned int n;
-	long unsigned int min_n;
-	long unsigned int max_n;
-	long unsigned int m;
-	long unsigned int min_m;
-	long unsigned int max_m;
-};
-
-struct ccu_mp {
-	u32 enable;
-	struct ccu_div_internal m;
-	struct ccu_div_internal p;
-	struct ccu_mux_internal mux;
-	unsigned int fixed_post_div;
-	struct ccu_common common;
-};
-
-struct tegra_cpu_car_ops {
-	void (*wait_for_reset)(u32);
-	void (*put_in_reset)(u32);
-	void (*out_of_reset)(u32);
-	void (*enable_clock)(u32);
-	void (*disable_clock)(u32);
-	bool (*rail_off_ready)();
-	void (*suspend)();
-	void (*resume)();
-};
-
-struct tegra_clk_periph_regs {
-	u32 enb_reg;
-	u32 enb_set_reg;
-	u32 enb_clr_reg;
-	u32 rst_reg;
-	u32 rst_set_reg;
-	u32 rst_clr_reg;
-};
-
-struct tegra_clk_init_table {
-	unsigned int clk_id;
-	unsigned int parent_id;
-	long unsigned int rate;
-	int state;
-};
-
-struct tegra_clk_duplicate {
-	int clk_id;
-	struct clk_lookup lookup;
-};
-
-struct tegra_clk {
-	int dt_id;
-	bool present;
-};
-
-struct tegra_devclk {
-	int dt_id;
-	char *dev_id;
-	char *con_id;
-};
-
-typedef void (*tegra_clk_apply_init_table_func)();
-
-struct tegra_clk_sync_source {
-	struct clk_hw hw;
-	long unsigned int rate;
-	long unsigned int max_rate;
-};
-
-struct i2c_msg {
-	__u16 addr;
-	__u16 flags;
-	__u16 len;
-	__u8 *buf;
-};
-
-union i2c_smbus_data {
-	__u8 byte;
-	__u16 word;
-	__u8 block[34];
-};
-
-enum i2c_slave_event {
-	I2C_SLAVE_READ_REQUESTED = 0,
-	I2C_SLAVE_WRITE_REQUESTED = 1,
-	I2C_SLAVE_READ_PROCESSED = 2,
-	I2C_SLAVE_WRITE_RECEIVED = 3,
-	I2C_SLAVE_STOP = 4,
-};
-
-struct i2c_client;
-
-typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
-
-struct i2c_adapter;
-
-struct i2c_client {
-	short unsigned int flags;
-	short unsigned int addr;
-	char name[20];
-	struct i2c_adapter *adapter;
-	struct device dev;
-	int init_irq;
-	int irq;
-	struct list_head detected;
-	i2c_slave_cb_t slave_cb;
-};
-
-struct i2c_algorithm;
-
-struct i2c_lock_operations;
-
-struct i2c_bus_recovery_info;
-
-struct i2c_adapter_quirks;
-
-struct i2c_adapter {
-	struct module *owner;
-	unsigned int class;
-	const struct i2c_algorithm *algo;
-	void *algo_data;
-	const struct i2c_lock_operations *lock_ops;
-	struct rt_mutex bus_lock;
-	struct rt_mutex mux_lock;
-	int timeout;
-	int retries;
-	struct device dev;
-	long unsigned int locked_flags;
-	int nr;
-	char name[48];
-	struct completion dev_released;
-	struct mutex userspace_clients_lock;
-	struct list_head userspace_clients;
-	struct i2c_bus_recovery_info *bus_recovery_info;
-	const struct i2c_adapter_quirks *quirks;
-	struct irq_domain *host_notify_domain;
-};
-
-struct i2c_algorithm {
-	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
-	int (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);
-	u32 (*functionality)(struct i2c_adapter *);
-	int (*reg_slave)(struct i2c_client *);
-	int (*unreg_slave)(struct i2c_client *);
-};
-
-struct i2c_lock_operations {
-	void (*lock_bus)(struct i2c_adapter *, unsigned int);
-	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
-	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
-};
-
-struct i2c_bus_recovery_info {
-	int (*recover_bus)(struct i2c_adapter *);
-	int (*get_scl)(struct i2c_adapter *);
-	void (*set_scl)(struct i2c_adapter *, int);
-	int (*get_sda)(struct i2c_adapter *);
-	void (*set_sda)(struct i2c_adapter *, int);
-	int (*get_bus_free)(struct i2c_adapter *);
-	void (*prepare_recovery)(struct i2c_adapter *);
-	void (*unprepare_recovery)(struct i2c_adapter *);
-	struct gpio_desc *scl_gpiod;
-	struct gpio_desc *sda_gpiod;
-	struct pinctrl *pinctrl;
-	struct pinctrl_state *pins_default;
-	struct pinctrl_state *pins_gpio;
-};
-
-struct i2c_adapter_quirks {
-	u64 flags;
-	int max_num_msgs;
-	u16 max_write_len;
-	u16 max_read_len;
-	u16 max_comb_1st_msg_len;
-	u16 max_comb_2nd_msg_len;
-};
-
-struct rail_alignment {
-	int offset_uv;
-	int step_uv;
-};
-
-struct cvb_coefficients {
-	int c0;
-	int c1;
-	int c2;
-};
-
-struct cvb_table_freq_entry {
-	long unsigned int freq;
-	struct cvb_coefficients coefficients;
-};
-
-struct cvb_cpu_dfll_data {
-	u32 tune0_low;
-	u32 tune0_high;
-	u32 tune1;
-	unsigned int tune_high_min_millivolts;
-};
-
-struct cvb_table {
-	int speedo_id;
-	int process_id;
-	int min_millivolts;
-	int max_millivolts;
-	int speedo_scale;
-	int voltage_scale;
-	struct cvb_table_freq_entry entries[40];
-	struct cvb_cpu_dfll_data cpu_dfll_data;
-};
-
-struct tegra_dfll_soc_data {
-	struct device *dev;
-	long unsigned int max_freq;
-	const struct cvb_table *cvb;
-	struct rail_alignment alignment;
-	void (*init_clock_trimmers)();
-	void (*set_clock_trimmers_high)();
-	void (*set_clock_trimmers_low)();
-};
-
-enum dfll_ctrl_mode {
-	DFLL_UNINITIALIZED = 0,
-	DFLL_DISABLED = 1,
-	DFLL_OPEN_LOOP = 2,
-	DFLL_CLOSED_LOOP = 3,
-};
-
-enum dfll_tune_range {
-	DFLL_TUNE_UNINITIALIZED = 0,
-	DFLL_TUNE_LOW = 1,
-};
-
-enum tegra_dfll_pmu_if {
-	TEGRA_DFLL_PMU_I2C = 0,
-	TEGRA_DFLL_PMU_PWM = 1,
-};
-
-struct dfll_rate_req {
-	long unsigned int rate;
-	long unsigned int dvco_target_rate;
-	int lut_index;
-	u8 mult_bits;
-	u8 scale_bits;
-};
-
-struct tegra_dfll {
-	struct device *dev;
-	struct tegra_dfll_soc_data *soc;
-	void *base;
-	void *i2c_base;
-	void *i2c_controller_base;
-	void *lut_base;
-	struct regulator *vdd_reg;
-	struct clk *soc_clk;
-	struct clk *ref_clk;
-	struct clk *i2c_clk;
-	struct clk *dfll_clk;
-	struct reset_control *dvco_rst;
-	long unsigned int ref_rate;
-	long unsigned int i2c_clk_rate;
-	long unsigned int dvco_rate_min;
-	enum dfll_ctrl_mode mode;
-	enum dfll_tune_range tune_range;
-	struct dentry *debugfs_dir;
-	struct clk_hw dfll_clk_hw;
-	const char *output_clock_name;
-	struct dfll_rate_req last_req;
-	long unsigned int last_unrounded_rate;
-	u32 droop_ctrl;
-	u32 sample_rate;
-	u32 force_mode;
-	u32 cf;
-	u32 ci;
-	u32 cg;
-	bool cg_scale;
-	u32 i2c_fs_rate;
-	u32 i2c_reg;
-	u32 i2c_slave_addr;
-	unsigned int lut[33];
-	long unsigned int lut_uv[33];
-	int lut_size;
-	u8 lut_bottom;
-	u8 lut_min;
-	u8 lut_max;
-	u8 lut_safe;
-	enum tegra_dfll_pmu_if pmu_if;
-	long unsigned int pwm_rate;
-	struct pinctrl *pwm_pin;
-	struct pinctrl_state *pwm_enable_state;
-	struct pinctrl_state *pwm_disable_state;
-	u32 reg_init_uV;
-};
-
-struct tegra_clk_frac_div {
-	struct clk_hw hw;
-	void *reg;
-	u8 flags;
-	u8 shift;
-	u8 width;
-	u8 frac_width;
-	spinlock_t *lock;
-};
-
-struct tegra_clk_periph_gate {
-	u32 magic;
-	struct clk_hw hw;
-	void *clk_base;
-	u8 flags;
-	int clk_num;
-	int *enable_refcnt;
-	const struct tegra_clk_periph_regs *regs;
-};
-
-struct tegra_clk_periph {
-	u32 magic;
-	struct clk_hw hw;
-	struct clk_mux mux;
-	struct tegra_clk_frac_div divider;
-	struct tegra_clk_periph_gate gate;
-	const struct clk_ops *mux_ops;
-	const struct clk_ops *div_ops;
-	const struct clk_ops *gate_ops;
-};
-
-struct tegra_periph_init_data {
-	const char *name;
-	int clk_id;
-	union {
-		const char * const *parent_names;
-		const char *parent_name;
-	} p;
-	int num_parents;
-	struct tegra_clk_periph periph;
-	u32 offset;
-	const char *con_id;
-	const char *dev_id;
-	long unsigned int flags;
-};
-
-struct tegra_clk_periph_fixed {
-	struct clk_hw hw;
-	void *base;
-	const struct tegra_clk_periph_regs *regs;
-	unsigned int mul;
-	unsigned int div;
-	unsigned int num;
-};
-
-struct tegra_clk_pll_freq_table {
-	long unsigned int input_rate;
-	long unsigned int output_rate;
-	u32 n;
-	u32 m;
-	u8 p;
-	u8 cpcon;
-	u16 sdm_data;
-};
-
-struct pdiv_map {
-	u8 pdiv;
-	u8 hw_val;
-};
-
-struct div_nmp {
-	u8 divn_shift;
-	u8 divn_width;
-	u8 divm_shift;
-	u8 divm_width;
-	u8 divp_shift;
-	u8 divp_width;
-	u8 override_divn_shift;
-	u8 override_divm_shift;
-	u8 override_divp_shift;
-};
-
-struct tegra_clk_pll;
-
-struct tegra_clk_pll_params {
-	long unsigned int input_min;
-	long unsigned int input_max;
-	long unsigned int cf_min;
-	long unsigned int cf_max;
-	long unsigned int vco_min;
-	long unsigned int vco_max;
-	u32 base_reg;
-	u32 misc_reg;
-	u32 lock_reg;
-	u32 lock_mask;
-	u32 lock_enable_bit_idx;
-	u32 iddq_reg;
-	u32 iddq_bit_idx;
-	u32 reset_reg;
-	u32 reset_bit_idx;
-	u32 sdm_din_reg;
-	u32 sdm_din_mask;
-	u32 sdm_ctrl_reg;
-	u32 sdm_ctrl_en_mask;
-	u32 ssc_ctrl_reg;
-	u32 ssc_ctrl_en_mask;
-	u32 aux_reg;
-	u32 dyn_ramp_reg;
-	u32 ext_misc_reg[6];
-	u32 pmc_divnm_reg;
-	u32 pmc_divp_reg;
-	u32 flags;
-	int stepa_shift;
-	int stepb_shift;
-	int lock_delay;
-	int max_p;
-	bool defaults_set;
-	const struct pdiv_map *pdiv_tohw;
-	struct div_nmp *div_nmp;
-	struct tegra_clk_pll_freq_table *freq_table;
-	long unsigned int fixed_rate;
-	u16 mdiv_default;
-	u32 (*round_p_to_pdiv)(u32, u32 *);
-	void (*set_gain)(struct tegra_clk_pll_freq_table *);
-	int (*calc_rate)(struct clk_hw *, struct tegra_clk_pll_freq_table *, long unsigned int, long unsigned int);
-	long unsigned int (*adjust_vco)(struct tegra_clk_pll_params *, long unsigned int);
-	void (*set_defaults)(struct tegra_clk_pll *);
-	int (*dyn_ramp)(struct tegra_clk_pll *, struct tegra_clk_pll_freq_table *);
-	int (*pre_rate_change)();
-	void (*post_rate_change)();
-};
-
-struct tegra_clk_pll {
-	struct clk_hw hw;
-	void *clk_base;
-	void *pmc;
-	spinlock_t *lock;
-	struct tegra_clk_pll_params *params;
-};
-
-struct utmi_clk_param {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u8 stable_count;
-	u8 active_delay_count;
-	u8 xtal_freq_count;
-};
-
-struct tegra_clk_pll_out {
-	struct clk_hw hw;
-	void *reg;
-	u8 enb_bit_idx;
-	u8 rst_bit_idx;
-	spinlock_t *lock;
-	u8 flags;
-};
-
-struct tegra_sdmmc_mux {
-	struct clk_hw hw;
-	void *reg;
-	spinlock_t *lock;
-	const struct clk_ops *gate_ops;
-	struct tegra_clk_periph_gate gate;
-	u8 div_flags;
-};
-
-struct tegra_clk_super_mux {
-	struct clk_hw hw;
-	void *reg;
-	struct tegra_clk_frac_div frac_div;
-	const struct clk_ops *div_ops;
-	u8 width;
-	u8 flags;
-	u8 div2_index;
-	u8 pllx_index;
-	spinlock_t *lock;
-};
-
-struct tegra_audio_clk_info {
-	char *name;
-	struct tegra_clk_pll_params *pll_params;
-	int clk_id;
-	char *parent;
-};
-
-enum clk_id {
-	tegra_clk_actmon = 0,
-	tegra_clk_adx = 1,
-	tegra_clk_adx1 = 2,
-	tegra_clk_afi = 3,
-	tegra_clk_amx = 4,
-	tegra_clk_amx1 = 5,
-	tegra_clk_apb2ape = 6,
-	tegra_clk_ahbdma = 7,
-	tegra_clk_apbdma = 8,
-	tegra_clk_apbif = 9,
-	tegra_clk_ape = 10,
-	tegra_clk_audio0 = 11,
-	tegra_clk_audio0_2x = 12,
-	tegra_clk_audio0_mux = 13,
-	tegra_clk_audio1 = 14,
-	tegra_clk_audio1_2x = 15,
-	tegra_clk_audio1_mux = 16,
-	tegra_clk_audio2 = 17,
-	tegra_clk_audio2_2x = 18,
-	tegra_clk_audio2_mux = 19,
-	tegra_clk_audio3 = 20,
-	tegra_clk_audio3_2x = 21,
-	tegra_clk_audio3_mux = 22,
-	tegra_clk_audio4 = 23,
-	tegra_clk_audio4_2x = 24,
-	tegra_clk_audio4_mux = 25,
-	tegra_clk_bsea = 26,
-	tegra_clk_bsev = 27,
-	tegra_clk_cclk_g = 28,
-	tegra_clk_cclk_lp = 29,
-	tegra_clk_cilab = 30,
-	tegra_clk_cilcd = 31,
-	tegra_clk_cile = 32,
-	tegra_clk_clk_32k = 33,
-	tegra_clk_clk72Mhz = 34,
-	tegra_clk_clk72Mhz_8 = 35,
-	tegra_clk_clk_m = 36,
-	tegra_clk_osc = 37,
-	tegra_clk_osc_div2 = 38,
-	tegra_clk_osc_div4 = 39,
-	tegra_clk_cml0 = 40,
-	tegra_clk_cml1 = 41,
-	tegra_clk_csi = 42,
-	tegra_clk_csite = 43,
-	tegra_clk_csite_8 = 44,
-	tegra_clk_csus = 45,
-	tegra_clk_cve = 46,
-	tegra_clk_dam0 = 47,
-	tegra_clk_dam1 = 48,
-	tegra_clk_dam2 = 49,
-	tegra_clk_d_audio = 50,
-	tegra_clk_dbgapb = 51,
-	tegra_clk_dds = 52,
-	tegra_clk_dfll_ref = 53,
-	tegra_clk_dfll_soc = 54,
-	tegra_clk_disp1 = 55,
-	tegra_clk_disp1_8 = 56,
-	tegra_clk_disp2 = 57,
-	tegra_clk_disp2_8 = 58,
-	tegra_clk_dp2 = 59,
-	tegra_clk_dpaux = 60,
-	tegra_clk_dpaux1 = 61,
-	tegra_clk_dsialp = 62,
-	tegra_clk_dsia_mux = 63,
-	tegra_clk_dsiblp = 64,
-	tegra_clk_dsib_mux = 65,
-	tegra_clk_dtv = 66,
-	tegra_clk_emc = 67,
-	tegra_clk_entropy = 68,
-	tegra_clk_entropy_8 = 69,
-	tegra_clk_epp = 70,
-	tegra_clk_epp_8 = 71,
-	tegra_clk_extern1 = 72,
-	tegra_clk_extern2 = 73,
-	tegra_clk_extern3 = 74,
-	tegra_clk_fuse = 75,
-	tegra_clk_fuse_burn = 76,
-	tegra_clk_gpu = 77,
-	tegra_clk_gr2d = 78,
-	tegra_clk_gr2d_8 = 79,
-	tegra_clk_gr3d = 80,
-	tegra_clk_gr3d_8 = 81,
-	tegra_clk_hclk = 82,
-	tegra_clk_hda = 83,
-	tegra_clk_hda_8 = 84,
-	tegra_clk_hda2codec_2x = 85,
-	tegra_clk_hda2codec_2x_8 = 86,
-	tegra_clk_hda2hdmi = 87,
-	tegra_clk_hdmi = 88,
-	tegra_clk_hdmi_audio = 89,
-	tegra_clk_host1x = 90,
-	tegra_clk_host1x_8 = 91,
-	tegra_clk_host1x_9 = 92,
-	tegra_clk_hsic_trk = 93,
-	tegra_clk_i2c1 = 94,
-	tegra_clk_i2c2 = 95,
-	tegra_clk_i2c3 = 96,
-	tegra_clk_i2c4 = 97,
-	tegra_clk_i2c5 = 98,
-	tegra_clk_i2c6 = 99,
-	tegra_clk_i2cslow = 100,
-	tegra_clk_i2s0 = 101,
-	tegra_clk_i2s0_sync = 102,
-	tegra_clk_i2s1 = 103,
-	tegra_clk_i2s1_sync = 104,
-	tegra_clk_i2s2 = 105,
-	tegra_clk_i2s2_sync = 106,
-	tegra_clk_i2s3 = 107,
-	tegra_clk_i2s3_sync = 108,
-	tegra_clk_i2s4 = 109,
-	tegra_clk_i2s4_sync = 110,
-	tegra_clk_isp = 111,
-	tegra_clk_isp_8 = 112,
-	tegra_clk_isp_9 = 113,
-	tegra_clk_ispb = 114,
-	tegra_clk_kbc = 115,
-	tegra_clk_kfuse = 116,
-	tegra_clk_la = 117,
-	tegra_clk_maud = 118,
-	tegra_clk_mipi = 119,
-	tegra_clk_mipibif = 120,
-	tegra_clk_mipi_cal = 121,
-	tegra_clk_mpe = 122,
-	tegra_clk_mselect = 123,
-	tegra_clk_msenc = 124,
-	tegra_clk_ndflash = 125,
-	tegra_clk_ndflash_8 = 126,
-	tegra_clk_ndspeed = 127,
-	tegra_clk_ndspeed_8 = 128,
-	tegra_clk_nor = 129,
-	tegra_clk_nvdec = 130,
-	tegra_clk_nvenc = 131,
-	tegra_clk_nvjpg = 132,
-	tegra_clk_owr = 133,
-	tegra_clk_owr_8 = 134,
-	tegra_clk_pcie = 135,
-	tegra_clk_pclk = 136,
-	tegra_clk_pll_a = 137,
-	tegra_clk_pll_a_out0 = 138,
-	tegra_clk_pll_a1 = 139,
-	tegra_clk_pll_c = 140,
-	tegra_clk_pll_c2 = 141,
-	tegra_clk_pll_c3 = 142,
-	tegra_clk_pll_c4 = 143,
-	tegra_clk_pll_c4_out0 = 144,
-	tegra_clk_pll_c4_out1 = 145,
-	tegra_clk_pll_c4_out2 = 146,
-	tegra_clk_pll_c4_out3 = 147,
-	tegra_clk_pll_c_out1 = 148,
-	tegra_clk_pll_d = 149,
-	tegra_clk_pll_d2 = 150,
-	tegra_clk_pll_d2_out0 = 151,
-	tegra_clk_pll_d_out0 = 152,
-	tegra_clk_pll_dp = 153,
-	tegra_clk_pll_e_out0 = 154,
-	tegra_clk_pll_g_ref = 155,
-	tegra_clk_pll_m = 156,
-	tegra_clk_pll_m_out1 = 157,
-	tegra_clk_pll_mb = 158,
-	tegra_clk_pll_p = 159,
-	tegra_clk_pll_p_out1 = 160,
-	tegra_clk_pll_p_out2 = 161,
-	tegra_clk_pll_p_out2_int = 162,
-	tegra_clk_pll_p_out3 = 163,
-	tegra_clk_pll_p_out4 = 164,
-	tegra_clk_pll_p_out4_cpu = 165,
-	tegra_clk_pll_p_out5 = 166,
-	tegra_clk_pll_p_out_hsio = 167,
-	tegra_clk_pll_p_out_xusb = 168,
-	tegra_clk_pll_p_out_cpu = 169,
-	tegra_clk_pll_p_out_adsp = 170,
-	tegra_clk_pll_ref = 171,
-	tegra_clk_pll_re_out = 172,
-	tegra_clk_pll_re_vco = 173,
-	tegra_clk_pll_u = 174,
-	tegra_clk_pll_u_out = 175,
-	tegra_clk_pll_u_out1 = 176,
-	tegra_clk_pll_u_out2 = 177,
-	tegra_clk_pll_u_12m = 178,
-	tegra_clk_pll_u_480m = 179,
-	tegra_clk_pll_u_48m = 180,
-	tegra_clk_pll_u_60m = 181,
-	tegra_clk_pll_x = 182,
-	tegra_clk_pll_x_out0 = 183,
-	tegra_clk_pwm = 184,
-	tegra_clk_qspi = 185,
-	tegra_clk_rtc = 186,
-	tegra_clk_sata = 187,
-	tegra_clk_sata_8 = 188,
-	tegra_clk_sata_cold = 189,
-	tegra_clk_sata_oob = 190,
-	tegra_clk_sata_oob_8 = 191,
-	tegra_clk_sbc1 = 192,
-	tegra_clk_sbc1_8 = 193,
-	tegra_clk_sbc1_9 = 194,
-	tegra_clk_sbc2 = 195,
-	tegra_clk_sbc2_8 = 196,
-	tegra_clk_sbc2_9 = 197,
-	tegra_clk_sbc3 = 198,
-	tegra_clk_sbc3_8 = 199,
-	tegra_clk_sbc3_9 = 200,
-	tegra_clk_sbc4 = 201,
-	tegra_clk_sbc4_8 = 202,
-	tegra_clk_sbc4_9 = 203,
-	tegra_clk_sbc5 = 204,
-	tegra_clk_sbc5_8 = 205,
-	tegra_clk_sbc6 = 206,
-	tegra_clk_sbc6_8 = 207,
-	tegra_clk_sclk = 208,
-	tegra_clk_sdmmc_legacy = 209,
-	tegra_clk_sdmmc1 = 210,
-	tegra_clk_sdmmc1_8 = 211,
-	tegra_clk_sdmmc1_9 = 212,
-	tegra_clk_sdmmc2 = 213,
-	tegra_clk_sdmmc2_8 = 214,
-	tegra_clk_sdmmc3 = 215,
-	tegra_clk_sdmmc3_8 = 216,
-	tegra_clk_sdmmc3_9 = 217,
-	tegra_clk_sdmmc4 = 218,
-	tegra_clk_sdmmc4_8 = 219,
-	tegra_clk_se = 220,
-	tegra_clk_se_10 = 221,
-	tegra_clk_soc_therm = 222,
-	tegra_clk_soc_therm_8 = 223,
-	tegra_clk_sor0 = 224,
-	tegra_clk_sor0_out = 225,
-	tegra_clk_sor1 = 226,
-	tegra_clk_sor1_out = 227,
-	tegra_clk_spdif = 228,
-	tegra_clk_spdif_2x = 229,
-	tegra_clk_spdif_in = 230,
-	tegra_clk_spdif_in_8 = 231,
-	tegra_clk_spdif_in_sync = 232,
-	tegra_clk_spdif_mux = 233,
-	tegra_clk_spdif_out = 234,
-	tegra_clk_timer = 235,
-	tegra_clk_trace = 236,
-	tegra_clk_tsec = 237,
-	tegra_clk_tsec_8 = 238,
-	tegra_clk_tsecb = 239,
-	tegra_clk_tsensor = 240,
-	tegra_clk_tvdac = 241,
-	tegra_clk_tvo = 242,
-	tegra_clk_uarta = 243,
-	tegra_clk_uarta_8 = 244,
-	tegra_clk_uartb = 245,
-	tegra_clk_uartb_8 = 246,
-	tegra_clk_uartc = 247,
-	tegra_clk_uartc_8 = 248,
-	tegra_clk_uartd = 249,
-	tegra_clk_uartd_8 = 250,
-	tegra_clk_uarte = 251,
-	tegra_clk_uarte_8 = 252,
-	tegra_clk_uartape = 253,
-	tegra_clk_usb2 = 254,
-	tegra_clk_usb2_hsic_trk = 255,
-	tegra_clk_usb2_trk = 256,
-	tegra_clk_usb3 = 257,
-	tegra_clk_usbd = 258,
-	tegra_clk_vcp = 259,
-	tegra_clk_vde = 260,
-	tegra_clk_vde_8 = 261,
-	tegra_clk_vfir = 262,
-	tegra_clk_vi = 263,
-	tegra_clk_vi_8 = 264,
-	tegra_clk_vi_9 = 265,
-	tegra_clk_vi_10 = 266,
-	tegra_clk_vi_i2c = 267,
-	tegra_clk_vic03 = 268,
-	tegra_clk_vic03_8 = 269,
-	tegra_clk_vim2_clk = 270,
-	tegra_clk_vimclk_sync = 271,
-	tegra_clk_vi_sensor = 272,
-	tegra_clk_vi_sensor_8 = 273,
-	tegra_clk_vi_sensor_9 = 274,
-	tegra_clk_vi_sensor2 = 275,
-	tegra_clk_vi_sensor2_8 = 276,
-	tegra_clk_xusb_dev = 277,
-	tegra_clk_xusb_dev_src = 278,
-	tegra_clk_xusb_dev_src_8 = 279,
-	tegra_clk_xusb_falcon_src = 280,
-	tegra_clk_xusb_falcon_src_8 = 281,
-	tegra_clk_xusb_fs_src = 282,
-	tegra_clk_xusb_gate = 283,
-	tegra_clk_xusb_host = 284,
-	tegra_clk_xusb_host_src = 285,
-	tegra_clk_xusb_host_src_8 = 286,
-	tegra_clk_xusb_hs_src = 287,
-	tegra_clk_xusb_hs_src_4 = 288,
-	tegra_clk_xusb_ss = 289,
-	tegra_clk_xusb_ss_src = 290,
-	tegra_clk_xusb_ss_src_8 = 291,
-	tegra_clk_xusb_ss_div2 = 292,
-	tegra_clk_xusb_ssp_src = 293,
-	tegra_clk_sclk_mux = 294,
-	tegra_clk_sor_safe = 295,
-	tegra_clk_cec = 296,
-	tegra_clk_ispa = 297,
-	tegra_clk_dmic1 = 298,
-	tegra_clk_dmic2 = 299,
-	tegra_clk_dmic3 = 300,
-	tegra_clk_dmic1_sync_clk = 301,
-	tegra_clk_dmic2_sync_clk = 302,
-	tegra_clk_dmic3_sync_clk = 303,
-	tegra_clk_dmic1_sync_clk_mux = 304,
-	tegra_clk_dmic2_sync_clk_mux = 305,
-	tegra_clk_dmic3_sync_clk_mux = 306,
-	tegra_clk_iqc1 = 307,
-	tegra_clk_iqc2 = 308,
-	tegra_clk_pll_a_out_adsp = 309,
-	tegra_clk_pll_a_out0_out_adsp = 310,
-	tegra_clk_adsp = 311,
-	tegra_clk_adsp_neon = 312,
-	tegra_clk_max = 313,
-};
-
-struct tegra_sync_source_initdata {
-	char *name;
-	long unsigned int rate;
-	long unsigned int max_rate;
-	int clk_id;
-};
-
-struct tegra_audio_clk_initdata {
-	char *gate_name;
-	char *mux_name;
-	u32 offset;
-	int gate_clk_id;
-	int mux_clk_id;
-};
-
-struct tegra_audio2x_clk_initdata {
-	char *parent;
-	char *gate_name;
-	char *name_2x;
-	char *div_name;
-	int clk_id;
-	int clk_num;
-	u8 div_offset;
-};
-
-struct pll_out_data {
-	char *div_name;
-	char *pll_out_name;
-	u32 offset;
-	int clk_id;
-	u8 div_shift;
-	u8 div_flags;
-	u8 rst_shift;
-	spinlock_t *lock;
-};
-
-enum tegra_super_gen {
-	gen4 = 4,
-	gen5 = 5,
-};
-
-struct tegra_super_gen_info {
-	enum tegra_super_gen gen;
-	const char **sclk_parents;
-	const char **cclk_g_parents;
-	const char **cclk_lp_parents;
-	int num_sclk_parents;
-	int num_cclk_g_parents;
-	int num_cclk_lp_parents;
-};
-
-enum tegra_revision {
-	TEGRA_REVISION_UNKNOWN = 0,
-	TEGRA_REVISION_A01 = 1,
-	TEGRA_REVISION_A02 = 2,
-	TEGRA_REVISION_A03 = 3,
-	TEGRA_REVISION_A03p = 4,
-	TEGRA_REVISION_A04 = 5,
-	TEGRA_REVISION_MAX = 6,
-};
-
-struct tegra_sku_info {
-	int sku_id;
-	int cpu_process_id;
-	int cpu_speedo_id;
-	int cpu_speedo_value;
-	int cpu_iddq_value;
-	int soc_process_id;
-	int soc_speedo_id;
-	int soc_speedo_value;
-	int gpu_process_id;
-	int gpu_speedo_id;
-	int gpu_speedo_value;
-	enum tegra_revision revision;
-};
-
-struct dfll_fcpu_data {
-	const long unsigned int *cpu_max_freq_table;
-	unsigned int cpu_max_freq_table_size;
-	const struct cvb_table *cpu_cvb_tables;
-	unsigned int cpu_cvb_tables_size;
-};
-
-struct cpu_clk_suspend_context {
-	u32 clk_csite_src;
-	u32 cclkg_burst;
-	u32 cclkg_divider;
-};
-
-enum {
-	DOWN___2 = 0,
-	UP___2 = 1,
-};
-
-struct cpu_clk_suspend_context___2 {
-	u32 clk_csite_src;
-};
-
-struct tegra210_domain_mbist_war {
-	void (*handle_lvl2_ovr)(struct tegra210_domain_mbist_war *);
-	const u32 lvl2_offset;
-	const u32 lvl2_mask;
-	const unsigned int num_clks;
-	const unsigned int *clk_init_data;
-	struct clk_bulk_data *clks;
-};
-
-struct utmi_clk_param___2 {
-	u32 osc_frequency;
-	u8 enable_delay_count;
-	u16 stable_count;
-	u8 active_delay_count;
-	u16 xtal_freq_count;
-};
-
-struct tegra210_clk_emc_config {
-	long unsigned int rate;
-	bool same_freq;
-	u32 value;
-	long unsigned int parent_rate;
-	u8 parent;
-};
-
-struct tegra210_clk_emc_provider {
-	struct module *owner;
-	struct device *dev;
-	struct tegra210_clk_emc_config *configs;
-	unsigned int num_configs;
-	int (*set_rate)(struct device *, const struct tegra210_clk_emc_config *);
-};
-
-struct tegra210_clk_emc {
-	struct clk_hw hw;
-	void *regs;
-	struct tegra210_clk_emc_provider *provider;
-	struct clk *parents[8];
-};
-
-enum {
-	CMD_CLK_GET_RATE = 1,
-	CMD_CLK_SET_RATE = 2,
-	CMD_CLK_ROUND_RATE = 3,
-	CMD_CLK_GET_PARENT = 4,
-	CMD_CLK_SET_PARENT = 5,
-	CMD_CLK_IS_ENABLED = 6,
-	CMD_CLK_ENABLE = 7,
-	CMD_CLK_DISABLE = 8,
-	CMD_CLK_GET_ALL_INFO = 14,
-	CMD_CLK_GET_MAX_CLK_ID = 15,
-	CMD_CLK_GET_FMAX_AT_VMIN = 16,
-	CMD_CLK_MAX = 17,
-};
-
-struct cmd_clk_get_rate_request {};
-
-struct cmd_clk_get_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_set_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_set_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_round_rate_request {
-	int32_t unused;
-	int64_t rate;
-} __attribute__((packed));
-
-struct cmd_clk_round_rate_response {
-	int64_t rate;
-};
-
-struct cmd_clk_get_parent_request {};
-
-struct cmd_clk_get_parent_response {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_set_parent_request {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_set_parent_response {
-	uint32_t parent_id;
-};
-
-struct cmd_clk_is_enabled_request {};
-
-struct cmd_clk_is_enabled_response {
-	int32_t state;
-};
-
-struct cmd_clk_enable_request {};
-
-struct cmd_clk_disable_request {};
-
-struct cmd_clk_get_all_info_request {};
-
-struct cmd_clk_get_all_info_response {
-	uint32_t flags;
-	uint32_t parent;
-	uint32_t parents[16];
-	uint8_t num_parents;
-	uint8_t name[40];
-} __attribute__((packed));
-
-struct cmd_clk_get_max_clk_id_request {};
-
-struct cmd_clk_get_max_clk_id_response {
-	uint32_t max_id;
-};
-
-struct cmd_clk_get_fmax_at_vmin_request {};
-
-struct mrq_clk_request {
-	uint32_t cmd_and_id;
-	union {
-		struct cmd_clk_get_rate_request clk_get_rate;
-		struct cmd_clk_set_rate_request clk_set_rate;
-		struct cmd_clk_round_rate_request clk_round_rate;
-		struct cmd_clk_get_parent_request clk_get_parent;
-		struct cmd_clk_set_parent_request clk_set_parent;
-		struct cmd_clk_enable_request clk_enable;
-		struct cmd_clk_disable_request clk_disable;
-		struct cmd_clk_is_enabled_request clk_is_enabled;
-		struct cmd_clk_get_all_info_request clk_get_all_info;
-		struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id;
-		struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin;
-	};
-} __attribute__((packed));
-
-struct tegra_bpmp_ops;
-
-struct tegra_bpmp_soc {
-	struct {
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_tx;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} thread;
-		struct {
-			unsigned int offset;
-			unsigned int count;
-			unsigned int timeout;
-		} cpu_rx;
-	} channels;
-	const struct tegra_bpmp_ops *ops;
-	unsigned int num_resets;
-};
-
-struct tegra_bpmp;
-
-struct tegra_bpmp_channel;
-
-struct tegra_bpmp_ops {
-	int (*init)(struct tegra_bpmp *);
-	void (*deinit)(struct tegra_bpmp *);
-	bool (*is_response_ready)(struct tegra_bpmp_channel *);
-	bool (*is_request_ready)(struct tegra_bpmp_channel *);
-	int (*ack_response)(struct tegra_bpmp_channel *);
-	int (*ack_request)(struct tegra_bpmp_channel *);
-	bool (*is_response_channel_free)(struct tegra_bpmp_channel *);
-	bool (*is_request_channel_free)(struct tegra_bpmp_channel *);
-	int (*post_response)(struct tegra_bpmp_channel *);
-	int (*post_request)(struct tegra_bpmp_channel *);
-	int (*ring_doorbell)(struct tegra_bpmp *);
-	int (*resume)(struct tegra_bpmp *);
-};
-
-struct tegra_bpmp_mb_data {
-	u32 code;
-	u32 flags;
-	u8 data[120];
-};
-
-struct tegra_ivc;
-
-struct tegra_bpmp_channel {
-	struct tegra_bpmp *bpmp;
-	struct tegra_bpmp_mb_data *ib;
-	struct tegra_bpmp_mb_data *ob;
-	struct completion completion;
-	struct tegra_ivc *ivc;
-	unsigned int index;
-};
-
-struct tegra_bpmp_clk;
-
-struct tegra_bpmp {
-	const struct tegra_bpmp_soc *soc;
-	struct device *dev;
-	void *priv;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
-	spinlock_t atomic_tx_lock;
-	struct tegra_bpmp_channel *tx_channel;
-	struct tegra_bpmp_channel *rx_channel;
-	struct tegra_bpmp_channel *threaded_channels;
-	struct {
-		long unsigned int *allocated;
-		long unsigned int *busy;
-		unsigned int count;
-		struct semaphore lock;
-	} threaded;
-	struct list_head mrqs;
-	spinlock_t lock;
-	struct tegra_bpmp_clk **clocks;
-	unsigned int num_clocks;
-	struct reset_controller_dev rstc;
-	struct genpd_onecell_data genpd;
-	struct dentry *debugfs_mirror;
-};
-
-struct tegra_bpmp_clk {
-	struct clk_hw hw;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-	unsigned int num_parents;
-	unsigned int *parents;
-};
-
-struct tegra_bpmp_message {
-	unsigned int mrq;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
-};
-
-struct tegra_bpmp_clk_info {
-	unsigned int id;
-	char name[40];
-	unsigned int parents[16];
-	unsigned int num_parents;
-	long unsigned int flags;
-};
-
-struct tegra_bpmp_clk_message {
-	unsigned int cmd;
-	unsigned int id;
-	struct {
-		const void *data;
-		size_t size;
-	} tx;
-	struct {
-		void *data;
-		size_t size;
-		int ret;
-	} rx;
-};
-
-struct clk_sp810;
-
-struct clk_sp810_timerclken {
-	struct clk_hw hw;
-	struct clk *clk;
-	struct clk_sp810 *sp810;
-	int channel;
-};
-
-struct clk_sp810 {
-	struct device_node *node;
-	void *base;
-	spinlock_t lock;
-	struct clk_sp810_timerclken timerclken[4];
-};
-
-struct vexpress_osc {
-	struct regmap *reg;
-	struct clk_hw hw;
-	long unsigned int rate_min;
-	long unsigned int rate_max;
-};
-
-struct dma_chan_tbl_ent {
-	struct dma_chan *chan;
-};
-
-struct dmaengine_unmap_pool {
-	struct kmem_cache *cache;
-	const char *name;
-	mempool_t *pool;
-	size_t size;
-};
-
-struct dmaengine_desc_callback {
-	dma_async_tx_callback callback;
-	dma_async_tx_callback_result callback_result;
-	void *callback_param;
-};
-
-struct virt_dma_desc {
-	struct dma_async_tx_descriptor tx;
-	struct dmaengine_result tx_result;
-	struct list_head node;
-};
-
-struct virt_dma_chan {
-	struct dma_chan chan;
-	struct tasklet_struct task;
-	void (*desc_free)(struct virt_dma_desc *);
-	spinlock_t lock;
-	struct list_head desc_allocated;
-	struct list_head desc_submitted;
-	struct list_head desc_issued;
-	struct list_head desc_completed;
-	struct list_head desc_terminated;
-	struct virt_dma_desc *cyclic;
-};
-
-struct acpi_table_csrt {
-	struct acpi_table_header header;
-};
-
-struct acpi_csrt_group {
-	u32 length;
-	u32 vendor_id;
-	u32 subvendor_id;
-	u16 device_id;
-	u16 subdevice_id;
-	u16 revision;
-	u16 reserved;
-	u32 shared_info_length;
-};
-
-struct acpi_csrt_shared_info {
-	u16 major_version;
-	u16 minor_version;
-	u32 mmio_base_low;
-	u32 mmio_base_high;
-	u32 gsi_interrupt;
-	u8 interrupt_polarity;
-	u8 interrupt_mode;
-	u8 num_channels;
-	u8 dma_address_width;
-	u16 base_request_line;
-	u16 num_handshake_signals;
-	u32 max_block_size;
-};
-
-struct acpi_dma_spec {
-	int chan_id;
-	int slave_id;
-	struct device *dev;
-};
-
-struct acpi_dma {
-	struct list_head dma_controllers;
-	struct device *dev;
-	struct dma_chan * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
-	void *data;
-	short unsigned int base_request_line;
-	short unsigned int end_request_line;
-};
-
-struct acpi_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct acpi_dma_parser_data {
-	struct acpi_dma_spec dma_spec;
-	size_t index;
-	size_t n;
-};
-
-struct of_dma {
-	struct list_head of_dma_controllers;
-	struct device_node *of_node;
-	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
-	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
-	struct dma_router *dma_router;
-	void *of_dma_data;
-};
-
-struct of_dma_filter_info {
-	dma_cap_mask_t dma_cap;
-	dma_filter_fn filter_fn;
-};
-
-struct mv_xor_v2_descriptor {
-	u16 desc_id;
-	u16 flags;
-	u32 crc32_result;
-	u32 desc_ctrl;
-	u32 buff_size;
-	u32 fill_pattern_src_addr[4];
-	u32 data_buff_addr[12];
-	u32 reserved[12];
-};
-
-struct mv_xor_v2_sw_desc;
-
-struct mv_xor_v2_device {
-	spinlock_t lock;
-	void *dma_base;
-	void *glob_base;
-	struct clk *clk;
-	struct clk *reg_clk;
-	struct tasklet_struct irq_tasklet;
-	struct list_head free_sw_desc;
-	struct dma_device dmadev;
-	struct dma_chan dmachan;
-	dma_addr_t hw_desq;
-	struct mv_xor_v2_descriptor *hw_desq_virt;
-	struct mv_xor_v2_sw_desc *sw_desq;
-	int desc_size;
-	unsigned int npendings;
-	unsigned int hw_queue_idx;
-	struct msi_desc *msi_desc;
-};
-
-struct mv_xor_v2_sw_desc {
-	int idx;
-	struct dma_async_tx_descriptor async_tx;
-	struct mv_xor_v2_descriptor hw_desc;
-	struct list_head free_list;
-};
-
-struct bam_desc_hw {
-	__le32 addr;
-	__le16 size;
-	__le16 flags;
-};
-
-struct bam_async_desc {
-	struct virt_dma_desc vd;
-	u32 num_desc;
-	u32 xfer_len;
-	u16 flags;
-	struct bam_desc_hw *curr_desc;
-	struct list_head desc_node;
-	enum dma_transfer_direction dir;
-	size_t length;
-	struct bam_desc_hw desc[0];
-};
-
-enum bam_reg {
-	BAM_CTRL = 0,
-	BAM_REVISION = 1,
-	BAM_NUM_PIPES = 2,
-	BAM_DESC_CNT_TRSHLD = 3,
-	BAM_IRQ_SRCS = 4,
-	BAM_IRQ_SRCS_MSK = 5,
-	BAM_IRQ_SRCS_UNMASKED = 6,
-	BAM_IRQ_STTS = 7,
-	BAM_IRQ_CLR = 8,
-	BAM_IRQ_EN = 9,
-	BAM_CNFG_BITS = 10,
-	BAM_IRQ_SRCS_EE = 11,
-	BAM_IRQ_SRCS_MSK_EE = 12,
-	BAM_P_CTRL = 13,
-	BAM_P_RST = 14,
-	BAM_P_HALT = 15,
-	BAM_P_IRQ_STTS = 16,
-	BAM_P_IRQ_CLR = 17,
-	BAM_P_IRQ_EN = 18,
-	BAM_P_EVNT_DEST_ADDR = 19,
-	BAM_P_EVNT_REG = 20,
-	BAM_P_SW_OFSTS = 21,
-	BAM_P_DATA_FIFO_ADDR = 22,
-	BAM_P_DESC_FIFO_ADDR = 23,
-	BAM_P_EVNT_GEN_TRSHLD = 24,
-	BAM_P_FIFO_SIZES = 25,
-};
-
-struct reg_offset_data {
-	u32 base_offset;
-	unsigned int pipe_mult;
-	unsigned int evnt_mult;
-	unsigned int ee_mult;
-};
-
-struct bam_device;
-
-struct bam_chan {
-	struct virt_dma_chan vc;
-	struct bam_device *bdev;
-	u32 id;
-	struct dma_slave_config slave;
-	struct bam_desc_hw *fifo_virt;
-	dma_addr_t fifo_phys;
-	short unsigned int head;
-	short unsigned int tail;
-	unsigned int initialized;
-	unsigned int paused;
-	unsigned int reconfigure;
-	struct list_head desc_list;
-	struct list_head node;
-};
-
-struct bam_device {
-	void *regs;
-	struct device *dev;
-	struct dma_device common;
-	struct bam_chan *channels;
-	u32 num_channels;
-	u32 num_ees;
-	u32 ee;
-	bool controlled_remotely;
-	const struct reg_offset_data *layout;
-	struct clk *bamclk;
-	int irq;
-	struct tasklet_struct task;
-};
-
-struct bcm2835_pm {
-	struct device *dev;
-	void *base;
-	void *asb;
-};
-
-struct bcm2835_power;
-
-struct bcm2835_power_domain {
-	struct generic_pm_domain base;
-	struct bcm2835_power *power;
-	u32 domain;
-	struct clk *clk;
-};
-
-struct bcm2835_power {
-	struct device *dev;
-	void *base;
-	void *asb;
-	struct genpd_onecell_data pd_xlate;
-	struct bcm2835_power_domain domains[13];
-	struct reset_controller_dev reset;
-};
-
-struct rpi_power_domain {
-	u32 domain;
-	bool enabled;
-	bool old_interface;
-	struct generic_pm_domain base;
-	struct rpi_firmware *fw;
-};
-
-struct rpi_power_domains {
-	bool has_new_interface;
-	struct genpd_onecell_data xlate;
-	struct rpi_firmware *fw;
-	struct rpi_power_domain domains[23];
-};
-
-struct rpi_power_domain_packet {
-	u32 domain;
-	u32 on;
-};
-
-struct soc_device_attribute {
-	const char *machine;
-	const char *family;
-	const char *revision;
-	const char *serial_number;
-	const char *soc_id;
-	const void *data;
-	const struct attribute_group *custom_attr_group;
-};
-
-struct soc_device;
-
-enum cpubiuctrl_regs {
-	CPU_CREDIT_REG = 0,
-	CPU_MCP_FLOW_REG = 1,
-	CPU_WRITEBACK_CTRL_REG = 2,
-	RAC_CONFIG0_REG = 3,
-	RAC_CONFIG1_REG = 4,
-	NUM_CPU_BIUCTRL_REGS = 5,
-};
-
-enum mtk_ddp_comp_id {
-	DDP_COMPONENT_AAL0 = 0,
-	DDP_COMPONENT_AAL1 = 1,
-	DDP_COMPONENT_BLS = 2,
-	DDP_COMPONENT_CCORR = 3,
-	DDP_COMPONENT_COLOR0 = 4,
-	DDP_COMPONENT_COLOR1 = 5,
-	DDP_COMPONENT_DITHER = 6,
-	DDP_COMPONENT_DPI0 = 7,
-	DDP_COMPONENT_DPI1 = 8,
-	DDP_COMPONENT_DSI0 = 9,
-	DDP_COMPONENT_DSI1 = 10,
-	DDP_COMPONENT_DSI2 = 11,
-	DDP_COMPONENT_DSI3 = 12,
-	DDP_COMPONENT_GAMMA = 13,
-	DDP_COMPONENT_OD0 = 14,
-	DDP_COMPONENT_OD1 = 15,
-	DDP_COMPONENT_OVL0 = 16,
-	DDP_COMPONENT_OVL_2L0 = 17,
-	DDP_COMPONENT_OVL_2L1 = 18,
-	DDP_COMPONENT_OVL1 = 19,
-	DDP_COMPONENT_PWM0 = 20,
-	DDP_COMPONENT_PWM1 = 21,
-	DDP_COMPONENT_PWM2 = 22,
-	DDP_COMPONENT_RDMA0 = 23,
-	DDP_COMPONENT_RDMA1 = 24,
-	DDP_COMPONENT_RDMA2 = 25,
-	DDP_COMPONENT_UFOE = 26,
-	DDP_COMPONENT_WDMA0 = 27,
-	DDP_COMPONENT_WDMA1 = 28,
-	DDP_COMPONENT_ID_MAX = 29,
-};
-
-struct mtk_mmsys_driver_data {
-	const char *clk_driver;
-};
-
-struct meson_msr;
-
-struct meson_msr_id {
-	struct meson_msr *priv;
-	unsigned int id;
-	const char *name;
-};
-
-struct meson_msr {
-	struct regmap *regmap;
-	struct meson_msr_id msr_table[128];
-};
-
-struct meson_gx_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-struct meson_gx_package_id {
-	const char *name;
-	unsigned int major_id;
-	unsigned int pack_id;
-	unsigned int pack_mask;
-};
-
-struct meson_gx_pwrc_vpu {
-	struct generic_pm_domain genpd;
-	struct regmap *regmap_ao;
-	struct regmap *regmap_hhi;
-	struct reset_control *rstc;
-	struct clk *vpu_clk;
-	struct clk *vapb_clk;
-};
-
-struct meson_ee_pwrc_mem_domain {
-	unsigned int reg;
-	unsigned int mask;
-};
-
-struct meson_ee_pwrc_top_domain {
-	unsigned int sleep_reg;
-	unsigned int sleep_mask;
-	unsigned int iso_reg;
-	unsigned int iso_mask;
-};
-
-struct meson_ee_pwrc_domain;
-
-struct meson_ee_pwrc_domain_desc {
-	char *name;
-	unsigned int reset_names_count;
-	unsigned int clk_names_count;
-	struct meson_ee_pwrc_top_domain *top_pd;
-	unsigned int mem_pd_count;
-	struct meson_ee_pwrc_mem_domain *mem_pd;
-	bool (*get_power)(struct meson_ee_pwrc_domain *);
-};
-
-struct meson_ee_pwrc;
-
-struct meson_ee_pwrc_domain {
-	struct generic_pm_domain base;
-	bool enabled;
-	struct meson_ee_pwrc *pwrc;
-	struct meson_ee_pwrc_domain_desc desc;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	struct reset_control *rstc;
-	int num_rstc;
-};
-
-struct meson_ee_pwrc_domain_data {
-	unsigned int count;
-	struct meson_ee_pwrc_domain_desc *domains;
-};
-
-struct meson_ee_pwrc {
-	struct regmap *regmap_ao;
-	struct regmap *regmap_hhi;
-	struct meson_ee_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-};
-
-enum {
-	SM_EFUSE_READ = 0,
-	SM_EFUSE_WRITE = 1,
-	SM_EFUSE_USER_MAX = 2,
-	SM_GET_CHIP_ID = 3,
-	SM_A1_PWRC_SET = 4,
-	SM_A1_PWRC_GET = 5,
-};
-
-struct meson_secure_pwrc;
-
-struct meson_secure_pwrc_domain {
-	struct generic_pm_domain base;
-	unsigned int index;
-	struct meson_secure_pwrc *pwrc;
-};
-
-struct meson_sm_firmware;
-
-struct meson_secure_pwrc {
-	struct meson_secure_pwrc_domain *domains;
-	struct genpd_onecell_data xlate;
-	struct meson_sm_firmware *fw;
-};
-
-struct meson_secure_pwrc_domain_desc {
-	unsigned int index;
-	unsigned int flags;
-	char *name;
-	bool (*is_off)(struct meson_secure_pwrc_domain *);
-};
-
-struct meson_secure_pwrc_domain_data {
-	unsigned int count;
-	struct meson_secure_pwrc_domain_desc *domains;
-};
-
-enum cmd_db_hw_type {
-	CMD_DB_HW_INVALID = 0,
-	CMD_DB_HW_MIN = 3,
-	CMD_DB_HW_ARC = 3,
-	CMD_DB_HW_VRM = 4,
-	CMD_DB_HW_BCM = 5,
-	CMD_DB_HW_MAX = 5,
-	CMD_DB_HW_ALL = 255,
-};
-
-struct entry_header {
-	u8 id[8];
-	__le32 priority[2];
-	__le32 addr;
-	__le16 len;
-	__le16 offset;
-};
-
-struct rsc_hdr {
-	__le16 slv_id;
-	__le16 header_offset;
-	__le16 data_offset;
-	__le16 cnt;
-	__le16 version;
-	__le16 reserved[3];
-};
-
-struct cmd_db_header {
-	__le32 version;
-	u8 magic[4];
-	struct rsc_hdr header[8];
-	__le32 checksum;
-	__le32 reserved;
-	u8 data[0];
-};
-
-struct smem_proc_comm {
-	__le32 command;
-	__le32 status;
-	__le32 params[2];
-};
-
-struct smem_global_entry {
-	__le32 allocated;
-	__le32 offset;
-	__le32 size;
-	__le32 aux_base;
-};
-
-struct smem_header {
-	struct smem_proc_comm proc_comm[4];
-	__le32 version[32];
-	__le32 initialized;
-	__le32 free_offset;
-	__le32 available;
-	__le32 reserved;
-	struct smem_global_entry toc[512];
-};
-
-struct smem_ptable_entry {
-	__le32 offset;
-	__le32 size;
-	__le32 flags;
-	__le16 host0;
-	__le16 host1;
-	__le32 cacheline;
-	__le32 reserved[7];
-};
-
-struct smem_ptable {
-	u8 magic[4];
-	__le32 version;
-	__le32 num_entries;
-	__le32 reserved[5];
-	struct smem_ptable_entry entry[0];
-};
-
-struct smem_partition_header {
-	u8 magic[4];
-	__le16 host0;
-	__le16 host1;
-	__le32 size;
-	__le32 offset_free_uncached;
-	__le32 offset_free_cached;
-	__le32 reserved[3];
-};
-
-struct smem_private_entry {
-	u16 canary;
-	__le16 item;
-	__le32 size;
-	__le16 padding_data;
-	__le16 padding_hdr;
-	__le32 reserved;
-};
-
-struct smem_info {
-	u8 magic[4];
-	__le32 size;
-	__le32 base_addr;
-	__le32 reserved;
-	__le16 num_items;
-};
-
-struct smem_region {
-	u32 aux_base;
-	void *virt_base;
-	size_t size;
-};
-
-struct hwspinlock;
-
-struct qcom_smem {
-	struct device *dev;
-	struct hwspinlock *hwlock;
-	struct smem_partition_header *global_partition;
-	size_t global_cacheline;
-	struct smem_partition_header *partitions[11];
-	size_t cacheline[11];
-	u32 item_count;
-	struct platform_device *socinfo;
-	unsigned int num_regions;
-	struct smem_region regions[0];
-};
-
-struct rockchip_grf_value {
-	const char *desc;
-	u32 reg;
-	u32 val;
-};
-
-struct rockchip_grf_info {
-	const struct rockchip_grf_value *values;
-	int num_values;
-};
-
-struct rockchip_domain_info {
-	int pwr_mask;
-	int status_mask;
-	int req_mask;
-	int idle_mask;
-	int ack_mask;
-	bool active_wakeup;
-	int pwr_w_mask;
-	int req_w_mask;
-};
-
-struct rockchip_pmu_info {
-	u32 pwr_offset;
-	u32 status_offset;
-	u32 req_offset;
-	u32 idle_offset;
-	u32 ack_offset;
-	u32 core_pwrcnt_offset;
-	u32 gpu_pwrcnt_offset;
-	unsigned int core_power_transition_time;
-	unsigned int gpu_power_transition_time;
-	int num_domains;
-	const struct rockchip_domain_info *domain_info;
-};
-
-struct rockchip_pmu;
-
-struct rockchip_pm_domain {
-	struct generic_pm_domain genpd;
-	const struct rockchip_domain_info *info;
-	struct rockchip_pmu *pmu;
-	int num_qos;
-	struct regmap **qos_regmap;
-	u32 *qos_save_regs[5];
-	int num_clks;
-	struct clk_bulk_data *clks;
-};
-
-struct rockchip_pmu {
-	struct device *dev;
-	struct regmap *regmap;
-	const struct rockchip_pmu_info *info;
-	struct mutex mutex;
-	struct genpd_onecell_data genpd_data;
-	struct generic_pm_domain *domains[0];
-};
-
-struct exynos_soc_id {
-	const char *name;
-	unsigned int id;
-};
-
-enum sys_powerdown {
-	SYS_AFTR = 0,
-	SYS_LPA = 1,
-	SYS_SLEEP = 2,
-	NUM_SYS_POWERDOWN = 3,
-};
-
-struct exynos_pmu_conf {
-	unsigned int offset;
-	u8 val[3];
-};
-
-struct exynos_pmu_data {
-	const struct exynos_pmu_conf *pmu_config;
-	void (*pmu_init)();
-	void (*powerdown_conf)(enum sys_powerdown);
-	void (*powerdown_conf_extra)(enum sys_powerdown);
-};
-
-struct exynos_pmu_context {
-	struct device *dev;
-	const struct exynos_pmu_data *pmu_data;
-};
-
-struct exynos_pm_domain_config {
-	u32 local_pwr_cfg;
-};
-
-struct exynos_pm_domain {
-	void *base;
-	bool is_off;
-	struct generic_pm_domain pd;
-	u32 local_pwr_cfg;
-};
-
-struct sunxi_sram_func {
-	char *func;
-	u8 val;
-	u32 reg_val;
-};
-
-struct sunxi_sram_data {
-	char *name;
-	u8 reg;
-	u8 offset;
-	u8 width;
-	struct sunxi_sram_func *func;
-	struct list_head list;
-};
-
-struct sunxi_sram_desc {
-	struct sunxi_sram_data data;
-	bool claimed;
-};
-
-struct sunxi_sramc_variant {
-	bool has_emac_clock;
-};
-
-struct nvmem_cell_info {
-	const char *name;
-	unsigned int offset;
-	unsigned int bytes;
-	unsigned int bit_offset;
-	unsigned int nbits;
-};
-
-struct nvmem_cell_lookup {
-	const char *nvmem_name;
-	const char *cell_name;
-	const char *dev_id;
-	const char *con_id;
-	struct list_head node;
-};
-
-typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
-
-typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
-
-enum nvmem_type {
-	NVMEM_TYPE_UNKNOWN = 0,
-	NVMEM_TYPE_EEPROM = 1,
-	NVMEM_TYPE_OTP = 2,
-	NVMEM_TYPE_BATTERY_BACKED = 3,
-};
-
-struct nvmem_config {
-	struct device *dev;
-	const char *name;
-	int id;
-	struct module *owner;
-	struct gpio_desc *wp_gpio;
-	const struct nvmem_cell_info *cells;
-	int ncells;
-	enum nvmem_type type;
-	bool read_only;
-	bool root_only;
-	bool no_of_node;
-	nvmem_reg_read_t reg_read;
-	nvmem_reg_write_t reg_write;
-	int size;
-	int word_size;
-	int stride;
-	void *priv;
-	bool compat;
-	struct device *base_dev;
-};
-
-struct tegra_fuse;
-
-struct tegra_fuse_info {
-	u32 (*read)(struct tegra_fuse *, unsigned int);
-	unsigned int size;
-	unsigned int spare;
-};
-
-struct nvmem_device;
-
-struct tegra_fuse_soc;
-
-struct tegra_fuse {
-	struct device *dev;
-	void *base;
-	phys_addr_t phys;
-	struct clk *clk;
-	u32 (*read_early)(struct tegra_fuse *, unsigned int);
-	u32 (*read)(struct tegra_fuse *, unsigned int);
-	const struct tegra_fuse_soc *soc;
-	struct {
-		struct mutex lock;
-		struct completion wait;
-		struct dma_chan *chan;
-		struct dma_slave_config config;
-		dma_addr_t phys;
-		u32 *virt;
-	} apbdma;
-	struct nvmem_device *nvmem;
-	struct nvmem_cell_lookup *lookups;
-};
-
-struct tegra_fuse_soc {
-	void (*init)(struct tegra_fuse *);
-	void (*speedo_init)(struct tegra_sku_info *);
-	int (*probe)(struct tegra_fuse *);
-	const struct tegra_fuse_info *info;
-	const struct nvmem_cell_lookup *lookups;
-	unsigned int num_lookups;
-	const struct attribute_group *soc_attr_group;
-};
-
-enum {
-	THRESHOLD_INDEX_0 = 0,
-	THRESHOLD_INDEX_1 = 1,
-	THRESHOLD_INDEX_COUNT = 2,
-};
-
-enum tegra_suspend_mode {
-	TEGRA_SUSPEND_NONE = 0,
-	TEGRA_SUSPEND_LP2 = 1,
-	TEGRA_SUSPEND_LP1 = 2,
-	TEGRA_SUSPEND_LP0 = 3,
-	TEGRA_MAX_SUSPEND_MODE = 4,
-};
-
-enum tegra_io_pad {
-	TEGRA_IO_PAD_AUDIO = 0,
-	TEGRA_IO_PAD_AUDIO_HV = 1,
-	TEGRA_IO_PAD_BB = 2,
-	TEGRA_IO_PAD_CAM = 3,
-	TEGRA_IO_PAD_COMP = 4,
-	TEGRA_IO_PAD_CONN = 5,
-	TEGRA_IO_PAD_CSIA = 6,
-	TEGRA_IO_PAD_CSIB = 7,
-	TEGRA_IO_PAD_CSIC = 8,
-	TEGRA_IO_PAD_CSID = 9,
-	TEGRA_IO_PAD_CSIE = 10,
-	TEGRA_IO_PAD_CSIF = 11,
-	TEGRA_IO_PAD_CSIG = 12,
-	TEGRA_IO_PAD_CSIH = 13,
-	TEGRA_IO_PAD_DAP3 = 14,
-	TEGRA_IO_PAD_DAP5 = 15,
-	TEGRA_IO_PAD_DBG = 16,
-	TEGRA_IO_PAD_DEBUG_NONAO = 17,
-	TEGRA_IO_PAD_DMIC = 18,
-	TEGRA_IO_PAD_DMIC_HV = 19,
-	TEGRA_IO_PAD_DP = 20,
-	TEGRA_IO_PAD_DSI = 21,
-	TEGRA_IO_PAD_DSIB = 22,
-	TEGRA_IO_PAD_DSIC = 23,
-	TEGRA_IO_PAD_DSID = 24,
-	TEGRA_IO_PAD_EDP = 25,
-	TEGRA_IO_PAD_EMMC = 26,
-	TEGRA_IO_PAD_EMMC2 = 27,
-	TEGRA_IO_PAD_EQOS = 28,
-	TEGRA_IO_PAD_GPIO = 29,
-	TEGRA_IO_PAD_GP_PWM2 = 30,
-	TEGRA_IO_PAD_GP_PWM3 = 31,
-	TEGRA_IO_PAD_HDMI = 32,
-	TEGRA_IO_PAD_HDMI_DP0 = 33,
-	TEGRA_IO_PAD_HDMI_DP1 = 34,
-	TEGRA_IO_PAD_HDMI_DP2 = 35,
-	TEGRA_IO_PAD_HDMI_DP3 = 36,
-	TEGRA_IO_PAD_HSIC = 37,
-	TEGRA_IO_PAD_HV = 38,
-	TEGRA_IO_PAD_LVDS = 39,
-	TEGRA_IO_PAD_MIPI_BIAS = 40,
-	TEGRA_IO_PAD_NAND = 41,
-	TEGRA_IO_PAD_PEX_BIAS = 42,
-	TEGRA_IO_PAD_PEX_CLK_BIAS = 43,
-	TEGRA_IO_PAD_PEX_CLK1 = 44,
-	TEGRA_IO_PAD_PEX_CLK2 = 45,
-	TEGRA_IO_PAD_PEX_CLK3 = 46,
-	TEGRA_IO_PAD_PEX_CLK_2_BIAS = 47,
-	TEGRA_IO_PAD_PEX_CLK_2 = 48,
-	TEGRA_IO_PAD_PEX_CNTRL = 49,
-	TEGRA_IO_PAD_PEX_CTL2 = 50,
-	TEGRA_IO_PAD_PEX_L0_RST_N = 51,
-	TEGRA_IO_PAD_PEX_L1_RST_N = 52,
-	TEGRA_IO_PAD_PEX_L5_RST_N = 53,
-	TEGRA_IO_PAD_PWR_CTL = 54,
-	TEGRA_IO_PAD_SDMMC1 = 55,
-	TEGRA_IO_PAD_SDMMC1_HV = 56,
-	TEGRA_IO_PAD_SDMMC2 = 57,
-	TEGRA_IO_PAD_SDMMC2_HV = 58,
-	TEGRA_IO_PAD_SDMMC3 = 59,
-	TEGRA_IO_PAD_SDMMC3_HV = 60,
-	TEGRA_IO_PAD_SDMMC4 = 61,
-	TEGRA_IO_PAD_SOC_GPIO10 = 62,
-	TEGRA_IO_PAD_SOC_GPIO12 = 63,
-	TEGRA_IO_PAD_SOC_GPIO13 = 64,
-	TEGRA_IO_PAD_SOC_GPIO53 = 65,
-	TEGRA_IO_PAD_SPI = 66,
-	TEGRA_IO_PAD_SPI_HV = 67,
-	TEGRA_IO_PAD_SYS_DDC = 68,
-	TEGRA_IO_PAD_UART = 69,
-	TEGRA_IO_PAD_UART4 = 70,
-	TEGRA_IO_PAD_UART5 = 71,
-	TEGRA_IO_PAD_UFS = 72,
-	TEGRA_IO_PAD_USB0 = 73,
-	TEGRA_IO_PAD_USB1 = 74,
-	TEGRA_IO_PAD_USB2 = 75,
-	TEGRA_IO_PAD_USB3 = 76,
-	TEGRA_IO_PAD_USB_BIAS = 77,
-	TEGRA_IO_PAD_AO_HV = 78,
-};
-
-struct pmc_clk {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 mux_shift;
-	u32 force_en_shift;
-};
-
-struct pmc_clk_gate {
-	struct clk_hw hw;
-	long unsigned int offs;
-	u32 shift;
-};
-
-struct pmc_clk_init_data {
-	char *name;
-	const char * const *parents;
-	int num_parents;
-	int clk_id;
-	u8 mux_shift;
-	u8 force_en_shift;
-};
-
-struct tegra_pmc;
-
-struct tegra_powergate {
-	struct generic_pm_domain genpd;
-	struct tegra_pmc *pmc;
-	unsigned int id;
-	struct clk **clks;
-	unsigned int num_clks;
-	struct reset_control *reset;
-};
-
-struct tegra_pmc_soc;
-
-struct tegra_pmc {
-	struct device *dev;
-	void *base;
-	void *wake;
-	void *aotag;
-	void *scratch;
-	struct clk *clk;
-	struct dentry *debugfs;
-	const struct tegra_pmc_soc *soc;
-	bool tz_only;
-	long unsigned int rate;
-	enum tegra_suspend_mode suspend_mode;
-	u32 cpu_good_time;
-	u32 cpu_off_time;
-	u32 core_osc_time;
-	u32 core_pmu_time;
-	u32 core_off_time;
-	bool corereq_high;
-	bool sysclkreq_high;
-	bool combined_req;
-	bool cpu_pwr_good_en;
-	u32 lp0_vec_phys;
-	u32 lp0_vec_size;
-	long unsigned int powergates_available[1];
-	struct mutex powergates_lock;
-	struct pinctrl_dev *pctl_dev;
-	struct irq_domain *domain;
-	struct irq_chip irq;
-	struct notifier_block clk_nb;
-};
-
-struct tegra_io_pad_soc {
-	enum tegra_io_pad id;
-	unsigned int dpd;
-	unsigned int voltage;
-	const char *name;
-};
-
-struct tegra_pmc_regs {
-	unsigned int scratch0;
-	unsigned int dpd_req;
-	unsigned int dpd_status;
-	unsigned int dpd2_req;
-	unsigned int dpd2_status;
-	unsigned int rst_status;
-	unsigned int rst_source_shift;
-	unsigned int rst_source_mask;
-	unsigned int rst_level_shift;
-	unsigned int rst_level_mask;
-};
-
-struct tegra_wake_event {
-	const char *name;
-	unsigned int id;
-	unsigned int irq;
-	struct {
-		unsigned int instance;
-		unsigned int pin;
-	} gpio;
-};
-
-struct tegra_pmc_soc {
-	unsigned int num_powergates;
-	const char * const *powergates;
-	unsigned int num_cpu_powergates;
-	const u8 *cpu_powergates;
-	bool has_tsense_reset;
-	bool has_gpu_clamps;
-	bool needs_mbist_war;
-	bool has_impl_33v_pwr;
-	bool maybe_tz_only;
-	const struct tegra_io_pad_soc *io_pads;
-	unsigned int num_io_pads;
-	const struct pinctrl_pin_desc *pin_descs;
-	unsigned int num_pin_descs;
-	const struct tegra_pmc_regs *regs;
-	void (*init)(struct tegra_pmc *);
-	void (*setup_irq_polarity)(struct tegra_pmc *, struct device_node *, bool);
-	int (*irq_set_wake)(struct irq_data *, unsigned int);
-	int (*irq_set_type)(struct irq_data *, unsigned int);
-	const char * const *reset_sources;
-	unsigned int num_reset_sources;
-	const char * const *reset_levels;
-	unsigned int num_reset_levels;
-	const struct tegra_wake_event *wake_events;
-	unsigned int num_wake_events;
-	const struct pmc_clk_init_data *pmc_clks_data;
-	unsigned int num_pmc_clks;
-	bool has_blink_output;
-};
-
-enum mrq_pg_cmd {
-	CMD_PG_QUERY_ABI = 0,
-	CMD_PG_SET_STATE = 1,
-	CMD_PG_GET_STATE = 2,
-	CMD_PG_GET_NAME = 3,
-	CMD_PG_GET_MAX_ID = 4,
-};
-
-enum pg_states {
-	PG_STATE_OFF = 0,
-	PG_STATE_ON = 1,
-	PG_STATE_RUNNING = 2,
-};
-
-struct cmd_pg_query_abi_request {
-	uint32_t type;
-};
-
-struct cmd_pg_set_state_request {
-	uint32_t state;
-};
-
-struct cmd_pg_get_state_response {
-	uint32_t state;
-};
-
-struct cmd_pg_get_name_response {
-	uint8_t name[40];
-};
-
-struct cmd_pg_get_max_id_response {
-	uint32_t max_id;
-};
-
-struct mrq_pg_request {
-	uint32_t cmd;
-	uint32_t id;
-	union {
-		struct cmd_pg_query_abi_request query_abi;
-		struct cmd_pg_set_state_request set_state;
-	};
-};
-
-struct mrq_pg_response {
-	union {
-		struct cmd_pg_get_state_response get_state;
-		struct cmd_pg_get_name_response get_name;
-		struct cmd_pg_get_max_id_response get_max_id;
-	};
-};
-
-struct tegra_powergate_info {
-	unsigned int id;
-	char *name;
-};
-
-struct tegra_powergate___2 {
-	struct generic_pm_domain genpd;
-	struct tegra_bpmp *bpmp;
-	unsigned int id;
-};
-
-typedef struct {
-	union {
-		xen_pfn_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_pfn_t;
-
-struct grant_entry_v1 {
-	uint16_t flags;
-	domid_t domid;
-	uint32_t frame;
-};
-
-struct grant_entry_header {
-	uint16_t flags;
-	domid_t domid;
-};
-
-union grant_entry_v2 {
-	struct grant_entry_header hdr;
-	struct {
-		struct grant_entry_header hdr;
-		uint32_t pad0;
-		uint64_t frame;
-	} full_page;
-	struct {
-		struct grant_entry_header hdr;
-		uint16_t page_off;
-		uint16_t length;
-		uint64_t frame;
-	} sub_page;
-	struct {
-		struct grant_entry_header hdr;
-		domid_t trans_domid;
-		uint16_t pad0;
-		grant_ref_t gref;
-	} transitive;
-	uint32_t __spacer[4];
-};
-
-struct gnttab_setup_table {
-	domid_t dom;
-	uint32_t nr_frames;
-	int16_t status;
-	__guest_handle_xen_pfn_t frame_list;
-};
-
-struct gnttab_copy {
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} source;
-	struct {
-		union {
-			grant_ref_t ref;
-			xen_pfn_t gmfn;
-		} u;
-		domid_t domid;
-		uint16_t offset;
-	} dest;
-	uint16_t len;
-	uint16_t flags;
-	int16_t status;
-};
-
-struct gnttab_query_size {
-	domid_t dom;
-	uint32_t nr_frames;
-	uint32_t max_nr_frames;
-	int16_t status;
-};
-
-struct gnttab_set_version {
-	uint32_t version;
-};
-
-struct gnttab_get_status_frames {
-	uint32_t nr_frames;
-	domid_t dom;
-	int16_t status;
-	__guest_handle_uint64_t frame_list;
-};
-
-struct gnttab_free_callback {
-	struct gnttab_free_callback *next;
-	void (*fn)(void *);
-	void *arg;
-	u16 count;
-};
-
-struct gntab_unmap_queue_data;
-
-typedef void (*gnttab_unmap_refs_done)(int, struct gntab_unmap_queue_data *);
-
-struct gntab_unmap_queue_data {
-	struct delayed_work gnttab_work;
-	void *data;
-	gnttab_unmap_refs_done done;
-	struct gnttab_unmap_grant_ref *unmap_ops;
-	struct gnttab_unmap_grant_ref *kunmap_ops;
-	struct page **pages;
-	unsigned int count;
-	unsigned int age;
-};
-
-struct gnttab_page_cache {
-	spinlock_t lock;
-	struct list_head pages;
-	unsigned int num_pages;
-};
-
-struct xen_page_foreign {
-	domid_t domid;
-	grant_ref_t gref;
-};
-
-typedef void (*xen_grant_fn_t)(long unsigned int, unsigned int, unsigned int, void *);
-
-struct gnttab_ops {
-	unsigned int version;
-	unsigned int grefs_per_grant_frame;
-	int (*map_frames)(xen_pfn_t *, unsigned int);
-	void (*unmap_frames)();
-	void (*update_entry)(grant_ref_t, domid_t, long unsigned int, unsigned int);
-	int (*end_foreign_access_ref)(grant_ref_t, int);
-	long unsigned int (*end_foreign_transfer_ref)(grant_ref_t);
-	int (*query_foreign_access)(grant_ref_t);
-};
-
-struct unmap_refs_callback_data {
-	struct completion completion;
-	int result;
-};
-
-struct deferred_entry {
-	struct list_head list;
-	grant_ref_t ref;
-	bool ro;
-	uint16_t warn_delay;
-	struct page *page;
-};
-
-struct xen_feature_info {
-	unsigned int submap_idx;
-	uint32_t submap;
-};
-
-struct balloon_stats {
-	long unsigned int current_pages;
-	long unsigned int target_pages;
-	long unsigned int target_unpopulated;
-	long unsigned int balloon_low;
-	long unsigned int balloon_high;
-	long unsigned int total_pages;
-	long unsigned int schedule_delay;
-	long unsigned int max_schedule_delay;
-	long unsigned int retry_count;
-	long unsigned int max_retry_count;
-};
-
-enum bp_state {
-	BP_DONE = 0,
-	BP_WAIT = 1,
-	BP_EAGAIN = 2,
-	BP_ECANCELED = 3,
-};
-
-enum shutdown_state {
-	SHUTDOWN_INVALID = 4294967295,
-	SHUTDOWN_POWEROFF = 0,
-	SHUTDOWN_SUSPEND = 2,
-	SHUTDOWN_HALT = 4,
-};
-
-struct suspend_info {
-	int cancelled;
-};
-
-struct shutdown_handler {
-	const char command[11];
-	bool flag;
-	void (*cb)();
-};
-
-struct vcpu_runstate_info {
-	int state;
-	uint64_t state_entry_time;
-	uint64_t time[4];
-};
-
-typedef struct {
-	union {
-		struct vcpu_runstate_info *p;
-		uint64_t q;
-	};
-} __guest_handle_vcpu_runstate_info;
-
-struct vcpu_register_runstate_memory_area {
-	union {
-		__guest_handle_vcpu_runstate_info h;
-		struct vcpu_runstate_info *v;
-		uint64_t p;
-	} addr;
-};
-
-struct xen_memory_reservation {
-	__guest_handle_xen_pfn_t extent_start;
-	xen_ulong_t nr_extents;
-	unsigned int extent_order;
-	unsigned int address_bits;
-	domid_t domid;
-};
-
-typedef uint32_t evtchn_port_t;
-
-typedef struct {
-	union {
-		evtchn_port_t *p;
-		uint64_t q;
-	};
-} __guest_handle_evtchn_port_t;
-
-struct evtchn_bind_interdomain {
-	domid_t remote_dom;
-	evtchn_port_t remote_port;
-	evtchn_port_t local_port;
-};
-
-struct evtchn_bind_virq {
-	uint32_t virq;
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_pirq {
-	uint32_t pirq;
-	uint32_t flags;
-	evtchn_port_t port;
-};
-
-struct evtchn_bind_ipi {
-	uint32_t vcpu;
-	evtchn_port_t port;
-};
-
-struct evtchn_close {
-	evtchn_port_t port;
-};
-
-struct evtchn_send {
-	evtchn_port_t port;
-};
-
-struct evtchn_status {
-	domid_t dom;
-	evtchn_port_t port;
-	uint32_t status;
-	uint32_t vcpu;
-	union {
-		struct {
-			domid_t dom;
-		} unbound;
-		struct {
-			domid_t dom;
-			evtchn_port_t port;
-		} interdomain;
-		uint32_t pirq;
-		uint32_t virq;
-	} u;
-};
-
-struct evtchn_bind_vcpu {
-	evtchn_port_t port;
-	uint32_t vcpu;
-};
-
-struct evtchn_set_priority {
-	evtchn_port_t port;
-	uint32_t priority;
-};
-
-struct sched_poll {
-	__guest_handle_evtchn_port_t ports;
-	unsigned int nr_ports;
-	uint64_t timeout;
-};
-
-enum ipi_vector {
-	XEN_PLACEHOLDER_VECTOR = 0,
-	XEN_NR_IPIS = 1,
-};
-
-struct physdev_eoi {
-	uint32_t irq;
-};
-
-struct physdev_irq_status_query {
-	uint32_t irq;
-	uint32_t flags;
-};
-
-struct physdev_irq {
-	uint32_t irq;
-	uint32_t vector;
-};
-
-struct physdev_map_pirq {
-	domid_t domid;
-	int type;
-	int index;
-	int pirq;
-	int bus;
-	int devfn;
-	int entry_nr;
-	uint64_t table_base;
-};
-
-struct physdev_unmap_pirq {
-	domid_t domid;
-	int pirq;
-};
-
-struct physdev_get_free_pirq {
-	int type;
-	uint32_t pirq;
-};
-
-struct evtchn_loop_ctrl;
-
-struct evtchn_ops {
-	unsigned int (*max_channels)();
-	unsigned int (*nr_channels)();
-	int (*setup)(evtchn_port_t);
-	void (*bind_to_cpu)(evtchn_port_t, unsigned int, unsigned int);
-	void (*clear_pending)(evtchn_port_t);
-	void (*set_pending)(evtchn_port_t);
-	bool (*is_pending)(evtchn_port_t);
-	bool (*test_and_set_mask)(evtchn_port_t);
-	void (*mask)(evtchn_port_t);
-	void (*unmask)(evtchn_port_t);
-	void (*handle_events)(unsigned int, struct evtchn_loop_ctrl *);
-	void (*resume)();
-	int (*percpu_init)(unsigned int);
-	int (*percpu_deinit)(unsigned int);
-};
-
-struct evtchn_loop_ctrl {
-	ktime_t timeout;
-	unsigned int count;
-	bool defer_eoi;
-};
-
-enum xen_irq_type {
-	IRQT_UNBOUND = 0,
-	IRQT_PIRQ = 1,
-	IRQT_VIRQ = 2,
-	IRQT_IPI = 3,
-	IRQT_EVTCHN = 4,
-};
-
-struct irq_info {
-	struct list_head list;
-	struct list_head eoi_list;
-	short int refcnt;
-	short int spurious_cnt;
-	enum xen_irq_type type;
-	unsigned int irq;
-	evtchn_port_t evtchn;
-	short unsigned int cpu;
-	short unsigned int eoi_cpu;
-	unsigned int irq_epoch;
-	u64 eoi_time;
-	union {
-		short unsigned int virq;
-		enum ipi_vector ipi;
-		struct {
-			short unsigned int pirq;
-			short unsigned int gsi;
-			unsigned char vector;
-			unsigned char flags;
-			uint16_t domid;
-		} pirq;
-	} u;
-};
-
-struct lateeoi_work {
-	struct delayed_work delayed;
-	spinlock_t eoi_list_lock;
-	struct list_head eoi_list;
-};
-
-struct evtchn_unmask {
-	evtchn_port_t port;
-};
-
-struct evtchn_init_control {
-	uint64_t control_gfn;
-	uint32_t offset;
-	uint32_t vcpu;
-	uint8_t link_bits;
-	uint8_t _pad[7];
-};
-
-struct evtchn_expand_array {
-	uint64_t array_gfn;
-};
-
-typedef uint32_t event_word_t;
-
-struct evtchn_fifo_control_block {
-	uint32_t ready;
-	uint32_t _rsvd;
-	event_word_t head[16];
-};
-
-struct evtchn_fifo_queue {
-	uint32_t head[16];
-};
-
-struct evtchn_alloc_unbound {
-	domid_t dom;
-	domid_t remote_dom;
-	evtchn_port_t port;
-};
-
-struct xenbus_map_node {
-	struct list_head next;
-	union {
-		struct {
-			struct vm_struct *area;
-		} pv;
-		struct {
-			struct page *pages[16];
-			long unsigned int addrs[16];
-			void *addr;
-		} hvm;
-	};
-	grant_handle_t handles[16];
-	unsigned int nr_handles;
-};
-
-struct map_ring_valloc {
-	struct xenbus_map_node *node;
-	long unsigned int addrs[16];
-	phys_addr_t phys_addrs[16];
-	struct gnttab_map_grant_ref map[16];
-	struct gnttab_unmap_grant_ref unmap[16];
-	unsigned int idx;
-};
-
-struct xenbus_ring_ops {
-	int (*map)(struct xenbus_device *, struct map_ring_valloc *, grant_ref_t *, unsigned int, void **);
-	int (*unmap)(struct xenbus_device *, void *);
-};
-
-struct unmap_ring_hvm {
-	unsigned int idx;
-	long unsigned int addrs[16];
-};
-
-enum xsd_sockmsg_type {
-	XS_DEBUG = 0,
-	XS_DIRECTORY = 1,
-	XS_READ = 2,
-	XS_GET_PERMS = 3,
-	XS_WATCH = 4,
-	XS_UNWATCH = 5,
-	XS_TRANSACTION_START = 6,
-	XS_TRANSACTION_END = 7,
-	XS_INTRODUCE = 8,
-	XS_RELEASE = 9,
-	XS_GET_DOMAIN_PATH = 10,
-	XS_WRITE = 11,
-	XS_MKDIR = 12,
-	XS_RM = 13,
-	XS_SET_PERMS = 14,
-	XS_WATCH_EVENT = 15,
-	XS_ERROR = 16,
-	XS_IS_DOMAIN_INTRODUCED = 17,
-	XS_RESUME = 18,
-	XS_SET_TARGET = 19,
-	XS_RESTRICT = 20,
-	XS_RESET_WATCHES = 21,
-};
-
-struct xsd_sockmsg {
-	uint32_t type;
-	uint32_t req_id;
-	uint32_t tx_id;
-	uint32_t len;
-};
-
-typedef uint32_t XENSTORE_RING_IDX;
-
-struct xenstore_domain_interface {
-	char req[1024];
-	char rsp[1024];
-	XENSTORE_RING_IDX req_cons;
-	XENSTORE_RING_IDX req_prod;
-	XENSTORE_RING_IDX rsp_cons;
-	XENSTORE_RING_IDX rsp_prod;
-};
-
-struct xs_watch_event {
-	struct list_head list;
-	unsigned int len;
-	struct xenbus_watch *handle;
-	const char *path;
-	const char *token;
-	char body[0];
-};
-
-enum xb_req_state {
-	xb_req_state_queued = 0,
-	xb_req_state_wait_reply = 1,
-	xb_req_state_got_reply = 2,
-	xb_req_state_aborted = 3,
-};
-
-struct xb_req_data {
-	struct list_head list;
-	wait_queue_head_t wq;
-	struct xsd_sockmsg msg;
-	uint32_t caller_req_id;
-	enum xsd_sockmsg_type type;
-	char *body;
-	const struct kvec *vec;
-	int num_vecs;
-	int err;
-	enum xb_req_state state;
-	bool user_req;
-	void (*cb)(struct xb_req_data *);
-	void *par;
-};
-
-enum xenstore_init {
-	XS_UNKNOWN = 0,
-	XS_PV = 1,
-	XS_HVM = 2,
-	XS_LOCAL = 3,
-};
-
-struct xen_bus_type {
-	char *root;
-	unsigned int levels;
-	int (*get_bus_id)(char *, const char *);
-	int (*probe)(struct xen_bus_type *, const char *, const char *);
-	bool (*otherend_will_handle)(struct xenbus_watch *, const char *, const char *);
-	void (*otherend_changed)(struct xenbus_watch *, const char *, const char *);
-	struct bus_type bus;
-};
-
-struct xb_find_info {
-	struct xenbus_device *dev;
-	const char *nodename;
-};
-
-struct xenbus_transaction_holder {
-	struct list_head list;
-	struct xenbus_transaction handle;
-	unsigned int generation_id;
-};
-
-struct read_buffer {
-	struct list_head list;
-	unsigned int cons;
-	unsigned int len;
-	char msg[0];
-};
-
-struct xenbus_file_priv {
-	struct mutex msgbuffer_mutex;
-	struct list_head transactions;
-	struct list_head watches;
-	unsigned int len;
-	union {
-		struct xsd_sockmsg msg;
-		char buffer[4096];
-	} u;
-	struct mutex reply_mutex;
-	struct list_head read_buffers;
-	wait_queue_head_t read_waitq;
-	struct kref kref;
-	struct work_struct wq;
-};
-
-struct watch_adapter {
-	struct list_head list;
-	struct xenbus_watch watch;
-	struct xenbus_file_priv *dev_data;
-	char *token;
-};
-
-typedef struct {
-	union {
-		int *p;
-		uint64_t q;
-	};
-} __guest_handle_int;
-
-typedef struct {
-	union {
-		xen_ulong_t *p;
-		uint64_t q;
-	};
-} __guest_handle_xen_ulong_t;
-
-struct xen_add_to_physmap_range {
-	domid_t domid;
-	uint16_t space;
-	uint16_t size;
-	domid_t foreign_domid;
-	__guest_handle_xen_ulong_t idxs;
-	__guest_handle_xen_pfn_t gpfns;
-	__guest_handle_int errs;
-};
-
-struct xen_remove_from_physmap {
-	domid_t domid;
-	xen_pfn_t gpfn;
-};
-
-struct physdev_manage_pci {
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct physdev_manage_pci_ext {
-	uint8_t bus;
-	uint8_t devfn;
-	unsigned int is_extfn;
-	unsigned int is_virtfn;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-};
-
-struct physdev_pci_device_add {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-	uint32_t flags;
-	struct {
-		uint8_t bus;
-		uint8_t devfn;
-	} physfn;
-	uint32_t optarr[0];
-};
-
-struct physdev_pci_device {
-	uint16_t seg;
-	uint8_t bus;
-	uint8_t devfn;
-};
-
-struct usb_device_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 bcdUSB;
-	__u8 bDeviceClass;
-	__u8 bDeviceSubClass;
-	__u8 bDeviceProtocol;
-	__u8 bMaxPacketSize0;
-	__le16 idVendor;
-	__le16 idProduct;
-	__le16 bcdDevice;
-	__u8 iManufacturer;
-	__u8 iProduct;
-	__u8 iSerialNumber;
-	__u8 bNumConfigurations;
-};
-
-struct usb_config_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumInterfaces;
-	__u8 bConfigurationValue;
-	__u8 iConfiguration;
-	__u8 bmAttributes;
-	__u8 bMaxPower;
-} __attribute__((packed));
-
-struct usb_interface_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bInterfaceNumber;
-	__u8 bAlternateSetting;
-	__u8 bNumEndpoints;
-	__u8 bInterfaceClass;
-	__u8 bInterfaceSubClass;
-	__u8 bInterfaceProtocol;
-	__u8 iInterface;
-};
-
-struct usb_endpoint_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bEndpointAddress;
-	__u8 bmAttributes;
-	__le16 wMaxPacketSize;
-	__u8 bInterval;
-	__u8 bRefresh;
-	__u8 bSynchAddress;
-} __attribute__((packed));
-
-struct usb_ssp_isoc_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wReseved;
-	__le32 dwBytesPerInterval;
-};
-
-struct usb_ss_ep_comp_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bMaxBurst;
-	__u8 bmAttributes;
-	__le16 wBytesPerInterval;
-};
-
-struct usb_interface_assoc_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bFirstInterface;
-	__u8 bInterfaceCount;
-	__u8 bFunctionClass;
-	__u8 bFunctionSubClass;
-	__u8 bFunctionProtocol;
-	__u8 iFunction;
-};
-
-struct usb_bos_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__le16 wTotalLength;
-	__u8 bNumDeviceCaps;
-} __attribute__((packed));
-
-struct usb_ext_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__le32 bmAttributes;
-} __attribute__((packed));
-
-struct usb_ss_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bmAttributes;
-	__le16 wSpeedSupported;
-	__u8 bFunctionalitySupport;
-	__u8 bU1devExitLat;
-	__le16 bU2DevExitLat;
-};
-
-struct usb_ss_container_id_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__u8 ContainerID[16];
-};
-
-struct usb_ssp_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-	__u8 bReserved;
-	__le32 bmAttributes;
-	__le16 wFunctionalitySupport;
-	__le16 wReserved;
-	__le32 bmSublinkSpeedAttr[1];
-};
-
-struct usb_ptm_cap_descriptor {
-	__u8 bLength;
-	__u8 bDescriptorType;
-	__u8 bDevCapabilityType;
-};
-
-enum usb_device_speed {
-	USB_SPEED_UNKNOWN = 0,
-	USB_SPEED_LOW = 1,
-	USB_SPEED_FULL = 2,
-	USB_SPEED_HIGH = 3,
-	USB_SPEED_WIRELESS = 4,
-	USB_SPEED_SUPER = 5,
-	USB_SPEED_SUPER_PLUS = 6,
-};
-
-enum usb_device_state {
-	USB_STATE_NOTATTACHED = 0,
-	USB_STATE_ATTACHED = 1,
-	USB_STATE_POWERED = 2,
-	USB_STATE_RECONNECTING = 3,
-	USB_STATE_UNAUTHENTICATED = 4,
-	USB_STATE_DEFAULT = 5,
-	USB_STATE_ADDRESS = 6,
-	USB_STATE_CONFIGURED = 7,
-	USB_STATE_SUSPENDED = 8,
-};
-
-enum usb3_link_state {
-	USB3_LPM_U0 = 0,
-	USB3_LPM_U1 = 1,
-	USB3_LPM_U2 = 2,
-	USB3_LPM_U3 = 3,
-};
-
-struct ep_device;
-
-struct usb_host_endpoint {
-	struct usb_endpoint_descriptor desc;
-	struct usb_ss_ep_comp_descriptor ss_ep_comp;
-	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
-	char: 8;
-	struct list_head urb_list;
-	void *hcpriv;
-	struct ep_device *ep_dev;
-	unsigned char *extra;
-	int extralen;
-	int enabled;
-	int streams;
-	int: 32;
-} __attribute__((packed));
-
-struct usb_host_interface {
-	struct usb_interface_descriptor desc;
-	int extralen;
-	unsigned char *extra;
-	struct usb_host_endpoint *endpoint;
-	char *string;
-};
-
-enum usb_interface_condition {
-	USB_INTERFACE_UNBOUND = 0,
-	USB_INTERFACE_BINDING = 1,
-	USB_INTERFACE_BOUND = 2,
-	USB_INTERFACE_UNBINDING = 3,
-};
-
-struct usb_interface {
-	struct usb_host_interface *altsetting;
-	struct usb_host_interface *cur_altsetting;
-	unsigned int num_altsetting;
-	struct usb_interface_assoc_descriptor *intf_assoc;
-	int minor;
-	enum usb_interface_condition condition;
-	unsigned int sysfs_files_created: 1;
-	unsigned int ep_devs_created: 1;
-	unsigned int unregistering: 1;
-	unsigned int needs_remote_wakeup: 1;
-	unsigned int needs_altsetting0: 1;
-	unsigned int needs_binding: 1;
-	unsigned int resetting_device: 1;
-	unsigned int authorized: 1;
-	struct device dev;
-	struct device *usb_dev;
-	struct work_struct reset_ws;
-};
-
-struct usb_interface_cache {
-	unsigned int num_altsetting;
-	struct kref ref;
-	struct usb_host_interface altsetting[0];
-};
-
-struct usb_host_config {
-	struct usb_config_descriptor desc;
-	char *string;
-	struct usb_interface_assoc_descriptor *intf_assoc[16];
-	struct usb_interface *interface[32];
-	struct usb_interface_cache *intf_cache[32];
-	unsigned char *extra;
-	int extralen;
-};
-
-struct usb_host_bos {
-	struct usb_bos_descriptor *desc;
-	struct usb_ext_cap_descriptor *ext_cap;
-	struct usb_ss_cap_descriptor *ss_cap;
-	struct usb_ssp_cap_descriptor *ssp_cap;
-	struct usb_ss_container_id_descriptor *ss_id;
-	struct usb_ptm_cap_descriptor *ptm_cap;
-};
-
-struct usb_devmap {
-	long unsigned int devicemap[2];
-};
-
-struct mon_bus;
-
-struct usb_device;
-
-struct usb_bus {
-	struct device *controller;
-	struct device *sysdev;
-	int busnum;
-	const char *bus_name;
-	u8 uses_pio_for_control;
-	u8 otg_port;
-	unsigned int is_b_host: 1;
-	unsigned int b_hnp_enable: 1;
-	unsigned int no_stop_on_short: 1;
-	unsigned int no_sg_constraint: 1;
-	unsigned int sg_tablesize;
-	int devnum_next;
-	struct mutex devnum_next_mutex;
-	struct usb_devmap devmap;
-	struct usb_device *root_hub;
-	struct usb_bus *hs_companion;
-	int bandwidth_allocated;
-	int bandwidth_int_reqs;
-	int bandwidth_isoc_reqs;
-	unsigned int resuming_ports;
-	struct mon_bus *mon_bus;
-	int monitored;
-};
-
-struct wusb_dev;
-
-enum usb_device_removable {
-	USB_DEVICE_REMOVABLE_UNKNOWN = 0,
-	USB_DEVICE_REMOVABLE = 1,
-	USB_DEVICE_FIXED = 2,
-};
-
-struct usb2_lpm_parameters {
-	unsigned int besl;
-	int timeout;
-};
-
-struct usb3_lpm_parameters {
-	unsigned int mel;
-	unsigned int pel;
-	unsigned int sel;
-	int timeout;
-};
-
-struct usb_tt;
-
-struct usb_device {
-	int devnum;
-	char devpath[16];
-	u32 route;
-	enum usb_device_state state;
-	enum usb_device_speed speed;
-	unsigned int rx_lanes;
-	unsigned int tx_lanes;
-	struct usb_tt *tt;
-	int ttport;
-	unsigned int toggle[2];
-	struct usb_device *parent;
-	struct usb_bus *bus;
-	struct usb_host_endpoint ep0;
-	struct device dev;
-	struct usb_device_descriptor descriptor;
-	struct usb_host_bos *bos;
-	struct usb_host_config *config;
-	struct usb_host_config *actconfig;
-	struct usb_host_endpoint *ep_in[16];
-	struct usb_host_endpoint *ep_out[16];
-	char **rawdescriptors;
-	short unsigned int bus_mA;
-	u8 portnum;
-	u8 level;
-	u8 devaddr;
-	unsigned int can_submit: 1;
-	unsigned int persist_enabled: 1;
-	unsigned int have_langid: 1;
-	unsigned int authorized: 1;
-	unsigned int authenticated: 1;
-	unsigned int wusb: 1;
-	unsigned int lpm_capable: 1;
-	unsigned int usb2_hw_lpm_capable: 1;
-	unsigned int usb2_hw_lpm_besl_capable: 1;
-	unsigned int usb2_hw_lpm_enabled: 1;
-	unsigned int usb2_hw_lpm_allowed: 1;
-	unsigned int usb3_lpm_u1_enabled: 1;
-	unsigned int usb3_lpm_u2_enabled: 1;
-	int string_langid;
-	char *product;
-	char *manufacturer;
-	char *serial;
-	struct list_head filelist;
-	int maxchild;
-	u32 quirks;
-	atomic_t urbnum;
-	long unsigned int active_duration;
-	long unsigned int connect_time;
-	unsigned int do_remote_wakeup: 1;
-	unsigned int reset_resume: 1;
-	unsigned int port_is_suspended: 1;
-	struct wusb_dev *wusb_dev;
-	int slot_id;
-	enum usb_device_removable removable;
-	struct usb2_lpm_parameters l1_params;
-	struct usb3_lpm_parameters u1_params;
-	struct usb3_lpm_parameters u2_params;
-	unsigned int lpm_disable_count;
-	u16 hub_delay;
-	unsigned int use_generic_driver: 1;
-};
-
-struct usb_tt {
-	struct usb_device *hub;
-	int multi;
-	unsigned int think_time;
-	void *hcpriv;
-	spinlock_t lock;
-	struct list_head clear_list;
-	struct work_struct clear_work;
-};
-
-struct usb_iso_packet_descriptor {
-	unsigned int offset;
-	unsigned int length;
-	unsigned int actual_length;
-	int status;
-};
-
-struct usb_anchor {
-	struct list_head urb_list;
-	wait_queue_head_t wait;
-	spinlock_t lock;
-	atomic_t suspend_wakeups;
-	unsigned int poisoned: 1;
-};
-
-struct urb;
-
-typedef void (*usb_complete_t)(struct urb *);
-
-struct urb {
-	struct kref kref;
-	int unlinked;
-	void *hcpriv;
-	atomic_t use_count;
-	atomic_t reject;
-	struct list_head urb_list;
-	struct list_head anchor_list;
-	struct usb_anchor *anchor;
-	struct usb_device *dev;
-	struct usb_host_endpoint *ep;
-	unsigned int pipe;
-	unsigned int stream_id;
-	int status;
-	unsigned int transfer_flags;
-	void *transfer_buffer;
-	dma_addr_t transfer_dma;
-	struct scatterlist *sg;
-	int num_mapped_sgs;
-	int num_sgs;
-	u32 transfer_buffer_length;
-	u32 actual_length;
-	unsigned char *setup_packet;
-	dma_addr_t setup_dma;
-	int start_frame;
-	int number_of_packets;
-	int interval;
-	int error_count;
-	void *context;
-	usb_complete_t complete;
-	struct usb_iso_packet_descriptor iso_frame_desc[0];
-};
-
-struct giveback_urb_bh {
-	bool running;
-	spinlock_t lock;
-	struct list_head head;
-	struct tasklet_struct bh;
-	struct usb_host_endpoint *completing_ep;
-};
-
-enum usb_dev_authorize_policy {
-	USB_DEVICE_AUTHORIZE_NONE = 0,
-	USB_DEVICE_AUTHORIZE_ALL = 1,
-	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
-};
-
-struct usb_phy;
-
-struct usb_phy_roothub;
-
-struct dma_pool___2;
-
-struct gen_pool___2;
-
-struct hc_driver;
-
-struct usb_hcd {
-	struct usb_bus self;
-	struct kref kref;
-	const char *product_desc;
-	int speed;
-	char irq_descr[24];
-	struct timer_list rh_timer;
-	struct urb *status_urb;
-	struct work_struct wakeup_work;
-	struct work_struct died_work;
-	const struct hc_driver *driver;
-	struct usb_phy *usb_phy;
-	struct usb_phy_roothub *phy_roothub;
-	long unsigned int flags;
-	enum usb_dev_authorize_policy dev_policy;
-	unsigned int rh_registered: 1;
-	unsigned int rh_pollable: 1;
-	unsigned int msix_enabled: 1;
-	unsigned int msi_enabled: 1;
-	unsigned int skip_phy_initialization: 1;
-	unsigned int uses_new_polling: 1;
-	unsigned int wireless: 1;
-	unsigned int has_tt: 1;
-	unsigned int amd_resume_bug: 1;
-	unsigned int can_do_streams: 1;
-	unsigned int tpl_support: 1;
-	unsigned int cant_recv_wakeups: 1;
-	unsigned int irq;
-	void *regs;
-	resource_size_t rsrc_start;
-	resource_size_t rsrc_len;
-	unsigned int power_budget;
-	struct giveback_urb_bh high_prio_bh;
-	struct giveback_urb_bh low_prio_bh;
-	struct mutex *address0_mutex;
-	struct mutex *bandwidth_mutex;
-	struct usb_hcd *shared_hcd;
-	struct usb_hcd *primary_hcd;
-	struct dma_pool___2 *pool[4];
-	int state;
-	struct gen_pool___2 *localmem_pool;
-	long unsigned int hcd_priv[0];
-};
-
-struct hc_driver {
-	const char *description;
-	const char *product_desc;
-	size_t hcd_priv_size;
-	irqreturn_t (*irq)(struct usb_hcd *);
-	int flags;
-	int (*reset)(struct usb_hcd *);
-	int (*start)(struct usb_hcd *);
-	int (*pci_suspend)(struct usb_hcd *, bool);
-	int (*pci_resume)(struct usb_hcd *, bool);
-	void (*stop)(struct usb_hcd *);
-	void (*shutdown)(struct usb_hcd *);
-	int (*get_frame_number)(struct usb_hcd *);
-	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
-	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
-	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
-	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
-	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
-	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*hub_status_data)(struct usb_hcd *, char *);
-	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
-	int (*bus_suspend)(struct usb_hcd *);
-	int (*bus_resume)(struct usb_hcd *);
-	int (*start_port_reset)(struct usb_hcd *, unsigned int);
-	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
-	void (*relinquish_port)(struct usb_hcd *, int);
-	int (*port_handed_over)(struct usb_hcd *, int);
-	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
-	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
-	void (*free_dev)(struct usb_hcd *, struct usb_device *);
-	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
-	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
-	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
-	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
-	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
-	int (*address_device)(struct usb_hcd *, struct usb_device *);
-	int (*enable_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
-	int (*reset_device)(struct usb_hcd *, struct usb_device *);
-	int (*update_device)(struct usb_hcd *, struct usb_device *);
-	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
-	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
-	int (*find_raw_port_number)(struct usb_hcd *, int);
-	int (*port_power)(struct usb_hcd *, int, bool);
-};
-
-struct physdev_dbgp_op {
-	uint8_t op;
-	uint8_t bus;
-	union {
-		struct physdev_pci_device pci;
-	} u;
-};
-
-struct dev_ext_attribute {
-	struct device_attribute attr;
-	void *var;
-};
-
-struct ioctl_evtchn_bind_virq {
-	unsigned int virq;
-};
-
-struct ioctl_evtchn_bind_interdomain {
-	unsigned int remote_domain;
-	unsigned int remote_port;
-};
-
-struct ioctl_evtchn_bind_unbound_port {
-	unsigned int remote_domain;
-};
-
-struct ioctl_evtchn_unbind {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_notify {
-	unsigned int port;
-};
-
-struct ioctl_evtchn_restrict_domid {
-	domid_t domid;
-};
-
-struct per_user_data {
-	struct mutex bind_mutex;
-	struct rb_root evtchns;
-	unsigned int nr_evtchns;
-	unsigned int ring_size;
-	evtchn_port_t *ring;
-	unsigned int ring_cons;
-	unsigned int ring_prod;
-	unsigned int ring_overflow;
-	struct mutex ring_cons_mutex;
-	spinlock_t ring_prod_lock;
-	wait_queue_head_t evtchn_wait;
-	struct fasync_struct *evtchn_async_queue;
-	const char *name;
-	domid_t restrict_domid;
-};
-
-struct user_evtchn {
-	struct rb_node node;
-	struct per_user_data *user;
-	evtchn_port_t port;
-	bool enabled;
-};
-
-typedef uint8_t xen_domain_handle_t[16];
-
-struct xen_compile_info {
-	char compiler[64];
-	char compile_by[16];
-	char compile_domain[32];
-	char compile_date[32];
-};
-
-struct xen_platform_parameters {
-	xen_ulong_t virt_start;
-};
-
-struct xen_build_id {
-	uint32_t len;
-	unsigned char buf[0];
-};
-
-struct hyp_sysfs_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct hyp_sysfs_attr *, char *);
-	ssize_t (*store)(struct hyp_sysfs_attr *, const char *, size_t);
-	void *hyp_attr_data;
-};
-
-enum xen_swiotlb_err {
-	XEN_SWIOTLB_UNKNOWN = 0,
-	XEN_SWIOTLB_ENOMEM = 1,
-	XEN_SWIOTLB_EFIXUP = 2,
-};
-
-typedef void (*xen_gfn_fn_t)(long unsigned int, void *);
-
-struct xen_remap_gfn_info;
-
-struct remap_data {
-	xen_pfn_t *fgfn;
-	int nr_fgfn;
-	pgprot_t prot;
-	domid_t domid;
-	struct vm_area_struct *vma;
-	int index;
-	struct page **pages;
-	struct xen_remap_gfn_info *info;
-	int *err_ptr;
-	int mapped;
-	int h_errs[1];
-	xen_ulong_t h_idxs[1];
-	xen_pfn_t h_gpfns[1];
-	int h_iter;
-};
-
-struct map_balloon_pages {
-	xen_pfn_t *pfns;
-	unsigned int idx;
-};
-
-struct remap_pfn {
-	struct mm_struct *mm;
-	struct page **pages;
-	pgprot_t prot;
-	long unsigned int i;
-};
-
-struct fastopen_queue {
-	struct request_sock *rskq_rst_head;
-	struct request_sock *rskq_rst_tail;
-	spinlock_t lock;
-	int qlen;
-	int max_qlen;
-	struct tcp_fastopen_context *ctx;
-};
-
-struct request_sock_queue {
-	spinlock_t rskq_lock;
-	u8 rskq_defer_accept;
-	u32 synflood_warned;
-	atomic_t qlen;
-	atomic_t young;
-	struct request_sock *rskq_accept_head;
-	struct request_sock *rskq_accept_tail;
-	struct fastopen_queue fastopenq;
-};
-
-struct inet_connection_sock_af_ops {
-	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
-	void (*send_check)(struct sock *, struct sk_buff *);
-	int (*rebuild_header)(struct sock *);
-	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
-	int (*conn_request)(struct sock *, struct sk_buff *);
-	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
-	u16 net_header_len;
-	u16 net_frag_header_len;
-	u16 sockaddr_len;
-	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
-	int (*getsockopt)(struct sock *, int, int, char *, int *);
-	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
-	void (*mtu_reduced)(struct sock *);
-};
-
-struct inet_bind_bucket;
-
-struct tcp_ulp_ops;
-
-struct inet_connection_sock {
-	struct inet_sock icsk_inet;
-	struct request_sock_queue icsk_accept_queue;
-	struct inet_bind_bucket *icsk_bind_hash;
-	long unsigned int icsk_timeout;
-	struct timer_list icsk_retransmit_timer;
-	struct timer_list icsk_delack_timer;
-	__u32 icsk_rto;
-	__u32 icsk_rto_min;
-	__u32 icsk_delack_max;
-	__u32 icsk_pmtu_cookie;
-	const struct tcp_congestion_ops *icsk_ca_ops;
-	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	const struct tcp_ulp_ops *icsk_ulp_ops;
-	void *icsk_ulp_data;
-	void (*icsk_clean_acked)(struct sock *, u32);
-	struct hlist_node icsk_listen_portaddr_node;
-	unsigned int (*icsk_sync_mss)(struct sock *, u32);
-	__u8 icsk_ca_state: 5;
-	__u8 icsk_ca_initialized: 1;
-	__u8 icsk_ca_setsockopt: 1;
-	__u8 icsk_ca_dst_locked: 1;
-	__u8 icsk_retransmits;
-	__u8 icsk_pending;
-	__u8 icsk_backoff;
-	__u8 icsk_syn_retries;
-	__u8 icsk_probes_out;
-	__u16 icsk_ext_hdr_len;
-	struct {
-		__u8 pending;
-		__u8 quick;
-		__u8 pingpong;
-		__u8 retry;
-		__u32 ato;
-		long unsigned int timeout;
-		__u32 lrcvtime;
-		__u16 last_seg_size;
-		__u16 rcv_mss;
-	} icsk_ack;
-	struct {
-		int enabled;
-		int search_high;
-		int search_low;
-		int probe_size;
-		u32 probe_timestamp;
-	} icsk_mtup;
-	u32 icsk_probes_tstamp;
-	u32 icsk_user_timeout;
-	u64 icsk_ca_priv[13];
-};
-
-struct tcp_ulp_ops {
-	struct list_head list;
-	int (*init)(struct sock *);
-	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
-	void (*release)(struct sock *);
-	int (*get_info)(const struct sock *, struct sk_buff *);
-	size_t (*get_info_size)(const struct sock *);
-	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
-	char name[16];
-	struct module *owner;
-};
-
-typedef unsigned int RING_IDX;
-
-struct pvcalls_data_intf {
-	RING_IDX in_cons;
-	RING_IDX in_prod;
-	RING_IDX in_error;
-	uint8_t pad1[52];
-	RING_IDX out_cons;
-	RING_IDX out_prod;
-	RING_IDX out_error;
-	uint8_t pad2[52];
-	RING_IDX ring_order;
-	grant_ref_t ref[0];
-};
-
-struct pvcalls_data {
-	unsigned char *in;
-	unsigned char *out;
-};
-
-struct xen_pvcalls_socket {
-	uint64_t id;
-	uint32_t domain;
-	uint32_t type;
-	uint32_t protocol;
-};
-
-struct xen_pvcalls_connect {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-	uint32_t flags;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_release {
-	uint64_t id;
-	uint8_t reuse;
-};
-
-struct xen_pvcalls_bind {
-	uint64_t id;
-	uint8_t addr[28];
-	uint32_t len;
-};
-
-struct xen_pvcalls_listen {
-	uint64_t id;
-	uint32_t backlog;
-};
-
-struct xen_pvcalls_accept {
-	uint64_t id;
-	uint64_t id_new;
-	grant_ref_t ref;
-	uint32_t evtchn;
-};
-
-struct xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct xen_pvcalls_dummy {
-	uint8_t dummy[56];
-};
-
-struct xen_pvcalls_request {
-	uint32_t req_id;
-	uint32_t cmd;
-	union {
-		struct xen_pvcalls_socket socket;
-		struct xen_pvcalls_connect connect;
-		struct xen_pvcalls_release release;
-		struct xen_pvcalls_bind bind;
-		struct xen_pvcalls_listen listen;
-		struct xen_pvcalls_accept accept;
-		struct xen_pvcalls_poll poll;
-		struct xen_pvcalls_dummy dummy;
-	} u;
-};
-
-struct _xen_pvcalls_socket {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_connect {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_release {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_bind {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_listen {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_accept {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_poll {
-	uint64_t id;
-};
-
-struct _xen_pvcalls_dummy {
-	uint8_t dummy[8];
-};
-
-struct xen_pvcalls_response {
-	uint32_t req_id;
-	uint32_t cmd;
-	int32_t ret;
-	uint32_t pad;
-	union {
-		struct _xen_pvcalls_socket socket;
-		struct _xen_pvcalls_connect connect;
-		struct _xen_pvcalls_release release;
-		struct _xen_pvcalls_bind bind;
-		struct _xen_pvcalls_listen listen;
-		struct _xen_pvcalls_accept accept;
-		struct _xen_pvcalls_poll poll;
-		struct _xen_pvcalls_dummy dummy;
-	} u;
-};
-
-union xen_pvcalls_sring_entry {
-	struct xen_pvcalls_request req;
-	struct xen_pvcalls_response rsp;
-};
-
-struct xen_pvcalls_sring {
-	RING_IDX req_prod;
-	RING_IDX req_event;
-	RING_IDX rsp_prod;
-	RING_IDX rsp_event;
-	uint8_t pad[48];
-	union xen_pvcalls_sring_entry ring[1];
-};
-
-struct xen_pvcalls_back_ring {
-	RING_IDX rsp_prod_pvt;
-	RING_IDX req_cons;
-	unsigned int nr_ents;
-	struct xen_pvcalls_sring *sring;
-};
-
-struct pvcalls_back_global {
-	struct list_head frontends;
-	struct semaphore frontends_lock;
-};
-
-struct pvcalls_fedata {
-	struct list_head list;
-	struct xenbus_device *dev;
-	struct xen_pvcalls_sring *sring;
-	struct xen_pvcalls_back_ring ring;
-	int irq;
-	struct list_head socket_mappings;
-	struct xarray socketpass_mappings;
-	struct semaphore socket_lock;
-};
-
-struct pvcalls_ioworker {
-	struct work_struct register_work;
-	struct workqueue_struct *wq;
-};
-
-struct sockpass_mapping;
-
-struct sock_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct sockpass_mapping *sockpass;
-	struct socket *sock;
-	uint64_t id;
-	grant_ref_t ref;
-	struct pvcalls_data_intf *ring;
-	void *bytes;
-	struct pvcalls_data data;
-	uint32_t ring_order;
-	int irq;
-	atomic_t read;
-	atomic_t write;
-	atomic_t io;
-	atomic_t release;
-	atomic_t eoi;
-	void (*saved_data_ready)(struct sock *);
-	struct pvcalls_ioworker ioworker;
-};
-
-struct sockpass_mapping {
-	struct list_head list;
-	struct pvcalls_fedata *fedata;
-	struct socket *sock;
-	uint64_t id;
-	struct xen_pvcalls_request reqcopy;
-	spinlock_t copy_lock;
-	struct workqueue_struct *wq;
-	struct work_struct register_work;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct ww_class {
-	atomic_long_t stamp;
-	struct lock_class_key acquire_key;
-	struct lock_class_key mutex_key;
-	const char *acquire_name;
-	const char *mutex_name;
-	unsigned int is_wait_die;
-};
-
-enum regulator_type {
-	REGULATOR_VOLTAGE = 0,
-	REGULATOR_CURRENT = 1,
-};
-
-struct regulator_config;
-
-struct regulator_ops;
-
-struct regulator_desc {
-	const char *name;
-	const char *supply_name;
-	const char *of_match;
-	const char *regulators_node;
-	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
-	int id;
-	unsigned int continuous_voltage_range: 1;
-	unsigned int n_voltages;
-	unsigned int n_current_limits;
-	const struct regulator_ops *ops;
-	int irq;
-	enum regulator_type type;
-	struct module *owner;
-	unsigned int min_uV;
-	unsigned int uV_step;
-	unsigned int linear_min_sel;
-	int fixed_uV;
-	unsigned int ramp_delay;
-	int min_dropout_uV;
-	const struct linear_range *linear_ranges;
-	const unsigned int *linear_range_selectors;
-	int n_linear_ranges;
-	const unsigned int *volt_table;
-	const unsigned int *curr_table;
-	unsigned int vsel_range_reg;
-	unsigned int vsel_range_mask;
-	unsigned int vsel_reg;
-	unsigned int vsel_mask;
-	unsigned int vsel_step;
-	unsigned int csel_reg;
-	unsigned int csel_mask;
-	unsigned int apply_reg;
-	unsigned int apply_bit;
-	unsigned int enable_reg;
-	unsigned int enable_mask;
-	unsigned int enable_val;
-	unsigned int disable_val;
-	bool enable_is_inverted;
-	unsigned int bypass_reg;
-	unsigned int bypass_mask;
-	unsigned int bypass_val_on;
-	unsigned int bypass_val_off;
-	unsigned int active_discharge_on;
-	unsigned int active_discharge_off;
-	unsigned int active_discharge_mask;
-	unsigned int active_discharge_reg;
-	unsigned int soft_start_reg;
-	unsigned int soft_start_mask;
-	unsigned int soft_start_val_on;
-	unsigned int pull_down_reg;
-	unsigned int pull_down_mask;
-	unsigned int pull_down_val_on;
-	unsigned int enable_time;
-	unsigned int off_on_delay;
-	unsigned int poll_enabled_time;
-	unsigned int (*of_map_mode)(unsigned int);
-};
-
-struct pre_voltage_change_data {
-	long unsigned int old_uV;
-	long unsigned int min_uV;
-	long unsigned int max_uV;
-};
-
-struct regulator_voltage {
-	int min_uV;
-	int max_uV;
-};
-
-struct regulator_dev;
-
-struct regulator {
-	struct device *dev;
-	struct list_head list;
-	unsigned int always_on: 1;
-	unsigned int bypass: 1;
-	unsigned int device_link: 1;
-	int uA_load;
-	unsigned int enable_count;
-	unsigned int deferred_disables;
-	struct regulator_voltage voltage[5];
-	const char *supply_name;
-	struct device_attribute dev_attr;
-	struct regulator_dev *rdev;
-	struct dentry *debugfs;
-};
-
-struct regulator_coupler {
-	struct list_head list;
-	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
-	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
-};
-
-struct coupling_desc {
-	struct regulator_dev **coupled_rdevs;
-	struct regulator_coupler *coupler;
-	int n_resolved;
-	int n_coupled;
-};
-
-struct regulator_enable_gpio;
-
-struct regulator_dev {
-	const struct regulator_desc *desc;
-	int exclusive;
-	u32 use_count;
-	u32 open_count;
-	u32 bypass_count;
-	struct list_head list;
-	struct list_head consumer_list;
-	struct coupling_desc coupling_desc;
-	struct blocking_notifier_head notifier;
-	struct ww_mutex mutex;
-	struct task_struct *mutex_owner;
-	int ref_cnt;
-	struct module *owner;
-	struct device dev;
-	struct regulation_constraints *constraints;
-	struct regulator *supply;
-	const char *supply_name;
-	struct regmap *regmap;
-	struct delayed_work disable_work;
-	void *reg_data;
-	struct dentry *debugfs;
-	struct regulator_enable_gpio *ena_pin;
-	unsigned int ena_gpio_state: 1;
-	unsigned int is_switch: 1;
-	long unsigned int last_off_jiffy;
-};
-
-enum regulator_status {
-	REGULATOR_STATUS_OFF = 0,
-	REGULATOR_STATUS_ON = 1,
-	REGULATOR_STATUS_ERROR = 2,
-	REGULATOR_STATUS_FAST = 3,
-	REGULATOR_STATUS_NORMAL = 4,
-	REGULATOR_STATUS_IDLE = 5,
-	REGULATOR_STATUS_STANDBY = 6,
-	REGULATOR_STATUS_BYPASS = 7,
-	REGULATOR_STATUS_UNDEFINED = 8,
-};
-
-struct regulator_ops {
-	int (*list_voltage)(struct regulator_dev *, unsigned int);
-	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
-	int (*map_voltage)(struct regulator_dev *, int, int);
-	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
-	int (*get_voltage)(struct regulator_dev *);
-	int (*get_voltage_sel)(struct regulator_dev *);
-	int (*set_current_limit)(struct regulator_dev *, int, int);
-	int (*get_current_limit)(struct regulator_dev *);
-	int (*set_input_current_limit)(struct regulator_dev *, int);
-	int (*set_over_current_protection)(struct regulator_dev *);
-	int (*set_active_discharge)(struct regulator_dev *, bool);
-	int (*enable)(struct regulator_dev *);
-	int (*disable)(struct regulator_dev *);
-	int (*is_enabled)(struct regulator_dev *);
-	int (*set_mode)(struct regulator_dev *, unsigned int);
-	unsigned int (*get_mode)(struct regulator_dev *);
-	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
-	int (*enable_time)(struct regulator_dev *);
-	int (*set_ramp_delay)(struct regulator_dev *, int);
-	int (*set_voltage_time)(struct regulator_dev *, int, int);
-	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
-	int (*set_soft_start)(struct regulator_dev *);
-	int (*get_status)(struct regulator_dev *);
-	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
-	int (*set_load)(struct regulator_dev *, int);
-	int (*set_bypass)(struct regulator_dev *, bool);
-	int (*get_bypass)(struct regulator_dev *, bool *);
-	int (*set_suspend_voltage)(struct regulator_dev *, int);
-	int (*set_suspend_enable)(struct regulator_dev *);
-	int (*set_suspend_disable)(struct regulator_dev *);
-	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
-	int (*resume)(struct regulator_dev *);
-	int (*set_pull_down)(struct regulator_dev *);
-};
-
-struct regulator_config {
-	struct device *dev;
-	const struct regulator_init_data *init_data;
-	void *driver_data;
-	struct device_node *of_node;
-	struct regmap *regmap;
-	struct gpio_desc *ena_gpiod;
-};
-
-struct regulator_enable_gpio {
-	struct list_head list;
-	struct gpio_desc *gpiod;
-	u32 enable_count;
-	u32 request_count;
-};
-
-enum regulator_active_discharge {
-	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
-	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
-	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
-};
-
-struct trace_event_raw_regulator_basic {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_range {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	int min;
-	int max;
-	char __data[0];
-};
-
-struct trace_event_raw_regulator_value {
-	struct trace_entry ent;
-	u32 __data_loc_name;
-	unsigned int val;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_regulator_basic {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_range {
-	u32 name;
-};
-
-struct trace_event_data_offsets_regulator_value {
-	u32 name;
-};
-
-typedef void (*btf_trace_regulator_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
-
-typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
-
-typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
-
-typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
-
-typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
-
-enum regulator_get_type {
-	NORMAL_GET = 0,
-	EXCLUSIVE_GET = 1,
-	OPTIONAL_GET = 2,
-	MAX_GET_TYPE = 3,
-};
-
-struct regulator_map {
-	struct list_head list;
-	const char *dev_name;
-	const char *supply;
-	struct regulator_dev *regulator;
-};
-
-struct regulator_supply_alias {
-	struct list_head list;
-	struct device *src_dev;
-	const char *src_supply;
-	struct device *alias_dev;
-	const char *alias_supply;
-};
-
-struct summary_data {
-	struct seq_file *s;
-	struct regulator_dev *parent;
-	int level;
-};
-
-struct summary_lock_data {
-	struct ww_acquire_ctx *ww_ctx;
-	struct regulator_dev **new_contended_rdev;
-	struct regulator_dev **old_contended_rdev;
-};
-
-struct fixed_voltage_config {
-	const char *supply_name;
-	const char *input_supply;
-	int microvolts;
-	unsigned int startup_delay;
-	unsigned int off_on_delay;
-	unsigned int enabled_at_boot: 1;
-	struct regulator_init_data *init_data;
-};
-
-struct fixed_regulator_data {
-	struct fixed_voltage_config cfg;
-	struct regulator_init_data init_data;
-	struct platform_device pdev;
-};
-
-struct regulator_bulk_devres {
-	struct regulator_bulk_data *consumers;
-	int num_consumers;
-};
-
-struct regulator_supply_alias_match {
-	struct device *dev;
-	const char *id;
-};
-
-struct regulator_notifier_match {
-	struct regulator *regulator;
-	struct notifier_block *nb;
-};
-
-struct of_regulator_match {
-	const char *name;
-	void *driver_data;
-	struct regulator_init_data *init_data;
-	struct device_node *of_node;
-	const struct regulator_desc *desc;
-};
-
-struct devm_of_regulator_matches {
-	struct of_regulator_match *matches;
-	unsigned int num_matches;
-};
-
-struct fixed_voltage_data {
-	struct regulator_desc desc;
-	struct regulator_dev *dev;
-	struct clk *enable_clock;
-	unsigned int clk_enable_counter;
-};
-
-struct fixed_dev_type {
-	bool has_enable_clock;
-};
-
-struct gpio_regulator_state {
-	int value;
-	int gpios;
-};
-
-struct gpio_regulator_config {
-	const char *supply_name;
-	unsigned int enabled_at_boot: 1;
-	unsigned int startup_delay;
-	enum gpiod_flags *gflags;
-	int ngpios;
-	struct gpio_regulator_state *states;
-	int nr_states;
-	enum regulator_type type;
-	struct regulator_init_data *init_data;
-};
-
-struct gpio_regulator_data {
-	struct regulator_desc desc;
-	struct gpio_desc **gpiods;
-	int nr_gpios;
-	struct gpio_regulator_state *states;
-	int nr_states;
-	int state;
-};
-
-struct reset_control_lookup {
-	struct list_head list;
-	const char *provider;
-	unsigned int index;
-	const char *dev_id;
-	const char *con_id;
-};
-
-struct reset_control___2 {
-	struct reset_controller_dev *rcdev;
-	struct list_head list;
-	unsigned int id;
-	struct kref refcnt;
-	bool acquired;
-	bool shared;
-	bool array;
-	atomic_t deassert_count;
-	atomic_t triggered_count;
-};
-
-struct reset_control_array {
-	struct reset_control___2 base;
-	unsigned int num_rstcs;
-	struct reset_control___2 *rstc[0];
-};
-
-enum hi6220_reset_ctrl_type {
-	PERIPHERAL = 0,
-	MEDIA = 1,
-	AO = 2,
-};
-
-struct hi6220_reset_data {
-	struct reset_controller_dev rc_dev;
-	struct regmap *regmap;
-};
-
-struct hi3660_reset_controller {
-	struct reset_controller_dev rst;
-	struct regmap *map;
-};
-
-enum mrq_reset_commands {
-	CMD_RESET_ASSERT = 1,
-	CMD_RESET_DEASSERT = 2,
-	CMD_RESET_MODULE = 3,
-	CMD_RESET_GET_MAX_ID = 4,
-	CMD_RESET_MAX = 5,
-};
-
-struct mrq_reset_request {
-	uint32_t cmd;
-	uint32_t reset_id;
-};
-
-struct meson_reset_param {
-	int reg_count;
-	int level_offset;
-};
-
-struct meson_reset {
-	void *reg_base;
-	const struct meson_reset_param *param;
-	struct reset_controller_dev rcdev;
-	spinlock_t lock;
-};
-
-struct reset_simple_devdata {
-	u32 reg_offset;
-	u32 nr_resets;
-	bool active_low;
-	bool status_active_low;
-};
-
-struct serial_struct32 {
-	compat_int_t type;
-	compat_int_t line;
-	compat_uint_t port;
-	compat_int_t irq;
-	compat_int_t flags;
-	compat_int_t xmit_fifo_size;
-	compat_int_t custom_divisor;
-	compat_int_t baud_base;
-	short unsigned int close_delay;
-	char io_type;
-	char reserved_char;
-	compat_int_t hub6;
-	short unsigned int closing_wait;
-	short unsigned int closing_wait2;
-	compat_uint_t iomem_base;
-	short unsigned int iomem_reg_shift;
-	unsigned int port_high;
-	compat_int_t reserved;
-};
-
-struct n_tty_data {
-	size_t read_head;
-	size_t commit_head;
-	size_t canon_head;
-	size_t echo_head;
-	size_t echo_commit;
-	size_t echo_mark;
-	long unsigned int char_map[4];
-	long unsigned int overrun_time;
-	int num_overrun;
-	bool no_room;
-	unsigned char lnext: 1;
-	unsigned char erasing: 1;
-	unsigned char raw: 1;
-	unsigned char real_raw: 1;
-	unsigned char icanon: 1;
-	unsigned char push: 1;
-	char read_buf[4096];
-	long unsigned int read_flags[64];
-	unsigned char echo_buf[4096];
-	size_t read_tail;
-	size_t line_start;
-	unsigned int column;
-	unsigned int canon_column;
-	size_t echo_tail;
-	struct mutex atomic_read_lock;
-	struct mutex output_lock;
-};
-
-enum {
-	ERASE = 0,
-	WERASE = 1,
-	KILL = 2,
-};
-
-struct termios {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-};
-
-struct termios2 {
-	tcflag_t c_iflag;
-	tcflag_t c_oflag;
-	tcflag_t c_cflag;
-	tcflag_t c_lflag;
-	cc_t c_line;
-	cc_t c_cc[19];
-	speed_t c_ispeed;
-	speed_t c_ospeed;
-};
-
-struct termio {
-	short unsigned int c_iflag;
-	short unsigned int c_oflag;
-	short unsigned int c_cflag;
-	short unsigned int c_lflag;
-	unsigned char c_line;
-	unsigned char c_cc[8];
-};
-
-struct ldsem_waiter {
-	struct list_head list;
-	struct task_struct *task;
-};
-
-struct pts_fs_info___2;
-
-struct tty_audit_buf {
-	struct mutex mutex;
-	dev_t dev;
-	unsigned int icanon: 1;
-	size_t valid;
-	unsigned char *data;
+	long long unsigned int state;
+	struct notifier_block battery_nb;
 };
 
 struct input_id {
@@ -78730,6 +87656,7 @@
 	struct input_value *vals;
 	bool devres_managed;
 	ktime_t timestamp[3];
+	bool inhibited;
 };
 
 struct ff_device {
@@ -78776,6 +87703,4134 @@
 	struct list_head node;
 };
 
+enum {
+	ACPI_BUTTON_LID_INIT_IGNORE = 0,
+	ACPI_BUTTON_LID_INIT_OPEN = 1,
+	ACPI_BUTTON_LID_INIT_METHOD = 2,
+	ACPI_BUTTON_LID_INIT_DISABLED = 3,
+};
+
+struct acpi_button {
+	unsigned int type;
+	struct input_dev *input;
+	char phys[32];
+	long unsigned int pushed;
+	int last_state;
+	ktime_t last_time;
+	bool suspended;
+	bool lid_state_initialized;
+};
+
+struct acpi_fan_fps {
+	u64 control;
+	u64 trip_point;
+	u64 speed;
+	u64 noise_level;
+	u64 power;
+	char name[20];
+	struct device_attribute dev_attr;
+};
+
+struct acpi_fan_fif {
+	u8 revision;
+	u8 fine_grain_ctrl;
+	u8 step_size;
+	u8 low_speed_notification;
+};
+
+struct acpi_fan_fst {
+	u64 revision;
+	u64 control;
+	u64 speed;
+};
+
+struct acpi_fan {
+	bool acpi4;
+	struct acpi_fan_fif fif;
+	struct acpi_fan_fps *fps;
+	int fps_count;
+	struct thermal_cooling_device *cdev;
+	struct device_attribute fst_speed;
+	struct device_attribute fine_grain_control;
+};
+
+struct acpi_pci_slot {
+	struct pci_slot *pci_slot;
+	struct list_head list;
+};
+
+struct acpi_lpi_states_array {
+	unsigned int size;
+	unsigned int composite_states_size;
+	struct acpi_lpi_state *entries;
+	struct acpi_lpi_state *composite_states[8];
+};
+
+struct throttling_tstate {
+	unsigned int cpu;
+	int target_state;
+};
+
+struct acpi_processor_throttling_arg {
+	struct acpi_processor *pr;
+	int target_state;
+	bool force;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+	THERMAL_TREND_RAISE_FULL = 3,
+	THERMAL_TREND_DROP_FULL = 4,
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
+	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+};
+
+struct thermal_attr;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	int trips;
+	long unsigned int trips_disabled;
+	long unsigned int passive_delay_jiffies;
+	long unsigned int polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+};
+
+struct thermal_bind_params;
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	int num_tbps;
+	struct thermal_bind_params *tbp;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+};
+
+struct thermal_bind_params {
+	struct thermal_cooling_device *cdev;
+	int weight;
+	int trip_mask;
+	long unsigned int *binding_limits;
+	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
+};
+
+struct acpi_thermal_state {
+	u8 critical: 1;
+	u8 hot: 1;
+	u8 passive: 1;
+	u8 active: 1;
+	u8 reserved: 4;
+	int active_index;
+};
+
+struct acpi_thermal_state_flags {
+	u8 valid: 1;
+	u8 enabled: 1;
+	u8 reserved: 6;
+};
+
+struct acpi_thermal_critical {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+};
+
+struct acpi_thermal_hot {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+};
+
+struct acpi_thermal_passive {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	long unsigned int tc1;
+	long unsigned int tc2;
+	long unsigned int tsp;
+	struct acpi_handle_list devices;
+};
+
+struct acpi_thermal_active {
+	struct acpi_thermal_state_flags flags;
+	long unsigned int temperature;
+	struct acpi_handle_list devices;
+};
+
+struct acpi_thermal_trips {
+	struct acpi_thermal_critical critical;
+	struct acpi_thermal_hot hot;
+	struct acpi_thermal_passive passive;
+	struct acpi_thermal_active active[10];
+};
+
+struct acpi_thermal_flags {
+	u8 cooling_mode: 1;
+	u8 devices: 1;
+	u8 reserved: 6;
+};
+
+struct acpi_thermal {
+	struct acpi_device *device;
+	acpi_bus_id name;
+	long unsigned int temperature;
+	long unsigned int last_temperature;
+	long unsigned int polling_frequency;
+	volatile u8 zombie;
+	struct acpi_thermal_flags flags;
+	struct acpi_thermal_state state;
+	struct acpi_thermal_trips trips;
+	struct acpi_handle_list devices;
+	struct thermal_zone_device *thermal_zone;
+	int kelvin_offset;
+	struct work_struct thermal_check_work;
+	struct mutex thermal_check_lock;
+	refcount_t thermal_check_count;
+};
+
+struct acpi_cedt_cfmws {
+	struct acpi_cedt_header header;
+	u32 reserved1;
+	u64 base_hpa;
+	u64 window_size;
+	u8 interleave_ways;
+	u8 interleave_arithmetic;
+	u16 reserved2;
+	u32 granularity;
+	u16 restrictions;
+	u16 qtg_id;
+	u32 interleave_targets[0];
+} __attribute__((packed));
+
+struct acpi_table_slit {
+	struct acpi_table_header header;
+	u64 locality_count;
+	u8 entry[1];
+} __attribute__((packed));
+
+struct acpi_table_srat {
+	struct acpi_table_header header;
+	u32 table_revision;
+	u64 reserved;
+};
+
+enum acpi_srat_type {
+	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
+	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
+	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
+	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
+	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
+	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
+	ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6,
+	ACPI_SRAT_TYPE_RESERVED = 7,
+};
+
+struct acpi_srat_mem_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u16 reserved;
+	u64 base_address;
+	u64 length;
+	u32 reserved1;
+	u32 flags;
+	u64 reserved2;
+} __attribute__((packed));
+
+struct acpi_srat_gicc_affinity {
+	struct acpi_subtable_header header;
+	u32 proximity_domain;
+	u32 acpi_processor_uid;
+	u32 flags;
+	u32 clock_domain;
+} __attribute__((packed));
+
+struct acpi_srat_generic_affinity {
+	struct acpi_subtable_header header;
+	u8 reserved;
+	u8 device_handle_type;
+	u32 proximity_domain;
+	u8 device_handle[16];
+	u32 flags;
+	u32 reserved1;
+};
+
+enum acpi_hmat_type {
+	ACPI_HMAT_TYPE_PROXIMITY = 0,
+	ACPI_HMAT_TYPE_LOCALITY = 1,
+	ACPI_HMAT_TYPE_CACHE = 2,
+	ACPI_HMAT_TYPE_RESERVED = 3,
+};
+
+struct acpi_hmat_proximity_domain {
+	struct acpi_hmat_structure header;
+	u16 flags;
+	u16 reserved1;
+	u32 processor_PD;
+	u32 memory_PD;
+	u32 reserved2;
+	u64 reserved3;
+	u64 reserved4;
+};
+
+struct acpi_hmat_locality {
+	struct acpi_hmat_structure header;
+	u8 flags;
+	u8 data_type;
+	u8 min_transfer_size;
+	u8 reserved1;
+	u32 number_of_initiator_Pds;
+	u32 number_of_target_Pds;
+	u32 reserved2;
+	u64 entry_base_unit;
+};
+
+struct acpi_hmat_cache {
+	struct acpi_hmat_structure header;
+	u32 memory_PD;
+	u32 reserved1;
+	u64 cache_size;
+	u32 cache_attributes;
+	u16 reserved2;
+	u16 number_of_SMBIOShandles;
+};
+
+struct node_hmem_attrs {
+	unsigned int read_bandwidth;
+	unsigned int write_bandwidth;
+	unsigned int read_latency;
+	unsigned int write_latency;
+};
+
+enum cache_indexing {
+	NODE_CACHE_DIRECT_MAP = 0,
+	NODE_CACHE_INDEXED = 1,
+	NODE_CACHE_OTHER = 2,
+};
+
+enum cache_write_policy {
+	NODE_CACHE_WRITE_BACK = 0,
+	NODE_CACHE_WRITE_THROUGH = 1,
+	NODE_CACHE_WRITE_OTHER = 2,
+};
+
+struct node_cache_attrs {
+	enum cache_indexing indexing;
+	enum cache_write_policy write_policy;
+	u64 size;
+	u16 line_size;
+	u8 level;
+};
+
+enum locality_types {
+	WRITE_LATENCY = 0,
+	READ_LATENCY = 1,
+	WRITE_BANDWIDTH = 2,
+	READ_BANDWIDTH = 3,
+};
+
+struct memory_locality {
+	struct list_head node;
+	struct acpi_hmat_locality *hmat_loc;
+};
+
+struct target_cache {
+	struct list_head node;
+	struct node_cache_attrs cache_attrs;
+};
+
+struct memory_target {
+	struct list_head node;
+	unsigned int memory_pxm;
+	unsigned int processor_pxm;
+	struct resource memregions;
+	struct node_hmem_attrs hmem_attrs[2];
+	struct list_head caches;
+	struct node_cache_attrs cache_attrs;
+	bool registered;
+};
+
+struct memory_initiator {
+	struct list_head node;
+	unsigned int processor_pxm;
+	bool has_cpu;
+};
+
+struct acpi_memory_info {
+	struct list_head list;
+	u64 start_addr;
+	u64 length;
+	short unsigned int caching;
+	short unsigned int write_protect;
+	unsigned int enabled: 1;
+};
+
+struct acpi_memory_device {
+	struct acpi_device *device;
+	struct list_head res_list;
+	int mgid;
+};
+
+struct acpi_pci_ioapic {
+	acpi_handle root_handle;
+	acpi_handle handle;
+	u32 gsi_base;
+	struct resource res;
+	struct pci_dev *pdev;
+	struct list_head list;
+};
+
+enum dmi_entry_type {
+	DMI_ENTRY_BIOS = 0,
+	DMI_ENTRY_SYSTEM = 1,
+	DMI_ENTRY_BASEBOARD = 2,
+	DMI_ENTRY_CHASSIS = 3,
+	DMI_ENTRY_PROCESSOR = 4,
+	DMI_ENTRY_MEM_CONTROLLER = 5,
+	DMI_ENTRY_MEM_MODULE = 6,
+	DMI_ENTRY_CACHE = 7,
+	DMI_ENTRY_PORT_CONNECTOR = 8,
+	DMI_ENTRY_SYSTEM_SLOT = 9,
+	DMI_ENTRY_ONBOARD_DEVICE = 10,
+	DMI_ENTRY_OEMSTRINGS = 11,
+	DMI_ENTRY_SYSCONF = 12,
+	DMI_ENTRY_BIOS_LANG = 13,
+	DMI_ENTRY_GROUP_ASSOC = 14,
+	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
+	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
+	DMI_ENTRY_MEM_DEVICE = 17,
+	DMI_ENTRY_32_MEM_ERROR = 18,
+	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
+	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
+	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
+	DMI_ENTRY_PORTABLE_BATTERY = 22,
+	DMI_ENTRY_SYSTEM_RESET = 23,
+	DMI_ENTRY_HW_SECURITY = 24,
+	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
+	DMI_ENTRY_VOLTAGE_PROBE = 26,
+	DMI_ENTRY_COOLING_DEV = 27,
+	DMI_ENTRY_TEMP_PROBE = 28,
+	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
+	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
+	DMI_ENTRY_BIS_ENTRY = 31,
+	DMI_ENTRY_SYSTEM_BOOT = 32,
+	DMI_ENTRY_MGMT_DEV = 33,
+	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
+	DMI_ENTRY_MGMT_DEV_THRES = 35,
+	DMI_ENTRY_MEM_CHANNEL = 36,
+	DMI_ENTRY_IPMI_DEV = 37,
+	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
+	DMI_ENTRY_ADDITIONAL = 39,
+	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
+	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
+	DMI_ENTRY_INACTIVE = 126,
+	DMI_ENTRY_END_OF_TABLE = 127,
+};
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+struct acpi_battery_hook {
+	const char *name;
+	int (*add_battery)(struct power_supply *);
+	int (*remove_battery)(struct power_supply *);
+	struct list_head list;
+};
+
+enum {
+	ACPI_BATTERY_ALARM_PRESENT = 0,
+	ACPI_BATTERY_XINFO_PRESENT = 1,
+	ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,
+	ACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,
+	ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,
+};
+
+struct acpi_battery {
+	struct mutex lock;
+	struct mutex sysfs_lock;
+	struct power_supply *bat;
+	struct power_supply_desc bat_desc;
+	struct acpi_device *device;
+	struct notifier_block pm_nb;
+	struct list_head list;
+	long unsigned int update_time;
+	int revision;
+	int rate_now;
+	int capacity_now;
+	int voltage_now;
+	int design_capacity;
+	int full_charge_capacity;
+	int technology;
+	int design_voltage;
+	int design_capacity_warning;
+	int design_capacity_low;
+	int cycle_count;
+	int measurement_accuracy;
+	int max_sampling_time;
+	int min_sampling_time;
+	int max_averaging_interval;
+	int min_averaging_interval;
+	int capacity_granularity_1;
+	int capacity_granularity_2;
+	int alarm;
+	char model_number[32];
+	char serial_number[32];
+	char type[32];
+	char oem_info[32];
+	int state;
+	int power_unit;
+	long unsigned int flags;
+};
+
+struct acpi_offsets {
+	size_t offset;
+	u8 mode;
+};
+
+struct acpi_pcct_shared_memory {
+	u32 signature;
+	u16 command;
+	u16 status;
+};
+
+struct cpc_register_resource {
+	acpi_object_type type;
+	u64 *sys_mem_vaddr;
+	union {
+		struct cpc_reg reg;
+		u64 int_value;
+	} cpc_entry;
+};
+
+struct cpc_desc {
+	int num_entries;
+	int version;
+	int cpu_id;
+	int write_cmd_status;
+	int write_cmd_id;
+	struct cpc_register_resource cpc_regs[21];
+	struct acpi_psd_package domain_info;
+	struct kobject kobj;
+};
+
+enum cppc_regs {
+	HIGHEST_PERF = 0,
+	NOMINAL_PERF = 1,
+	LOW_NON_LINEAR_PERF = 2,
+	LOWEST_PERF = 3,
+	GUARANTEED_PERF = 4,
+	DESIRED_PERF = 5,
+	MIN_PERF = 6,
+	MAX_PERF = 7,
+	PERF_REDUC_TOLERANCE = 8,
+	TIME_WINDOW = 9,
+	CTR_WRAP_TIME = 10,
+	REFERENCE_CTR = 11,
+	DELIVERED_CTR = 12,
+	PERF_LIMITED = 13,
+	ENABLE = 14,
+	AUTO_SEL_ENABLE = 15,
+	AUTO_ACT_WINDOW = 16,
+	ENERGY_PERF = 17,
+	REFERENCE_PERF = 18,
+	LOWEST_FREQ = 19,
+	NOMINAL_FREQ = 20,
+};
+
+struct cppc_perf_ctrls {
+	u32 max_perf;
+	u32 min_perf;
+	u32 desired_perf;
+};
+
+struct cppc_perf_fb_ctrs {
+	u64 reference;
+	u64 delivered;
+	u64 reference_perf;
+	u64 wraparound_time;
+};
+
+struct cppc_cpudata {
+	struct list_head node;
+	struct cppc_perf_caps perf_caps;
+	struct cppc_perf_ctrls perf_ctrls;
+	struct cppc_perf_fb_ctrs perf_fb_ctrs;
+	unsigned int shared_type;
+	cpumask_var_t shared_cpu_map;
+};
+
+struct cppc_pcc_data {
+	struct pcc_mbox_chan *pcc_channel;
+	void *pcc_comm_addr;
+	bool pcc_channel_acquired;
+	unsigned int deadline_us;
+	unsigned int pcc_mpar;
+	unsigned int pcc_mrtt;
+	unsigned int pcc_nominal;
+	bool pending_pcc_write_cmd;
+	bool platform_owns_pcc;
+	unsigned int pcc_write_cnt;
+	struct rw_semaphore pcc_lock;
+	wait_queue_head_t pcc_write_wait_q;
+	ktime_t last_cmd_cmpl_time;
+	ktime_t last_mpar_reset;
+	int mpar_count;
+	int refcount;
+};
+
+struct acpi_aml_io {
+	wait_queue_head_t wait;
+	long unsigned int flags;
+	long unsigned int users;
+	struct mutex lock;
+	struct task_struct *thread;
+	char out_buf[4096];
+	struct circ_buf out_crc;
+	char in_buf[4096];
+	struct circ_buf in_crc;
+	acpi_osd_exec_callback function;
+	void *context;
+	long unsigned int usages;
+};
+
+struct acpi_whea_header {
+	u8 action;
+	u8 instruction;
+	u8 flags;
+	u8 reserved;
+	struct acpi_generic_address register_region;
+	u64 value;
+	u64 mask;
+} __attribute__((packed));
+
+struct apei_exec_context;
+
+typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);
+
+struct apei_exec_ins_type;
+
+struct apei_exec_context {
+	u32 ip;
+	u64 value;
+	u64 var1;
+	u64 var2;
+	u64 src_base;
+	u64 dst_base;
+	struct apei_exec_ins_type *ins_table;
+	u32 instructions;
+	struct acpi_whea_header *action_table;
+	u32 entries;
+};
+
+struct apei_exec_ins_type {
+	u32 flags;
+	apei_exec_ins_func_t run;
+};
+
+struct apei_resources {
+	struct list_head iomem;
+	struct list_head ioport;
+};
+
+typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);
+
+struct apei_res {
+	struct list_head list;
+	long unsigned int start;
+	long unsigned int end;
+};
+
+struct acpi_table_hest {
+	struct acpi_table_header header;
+	u32 error_source_count;
+};
+
+enum acpi_hest_types {
+	ACPI_HEST_TYPE_IA32_CHECK = 0,
+	ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
+	ACPI_HEST_TYPE_IA32_NMI = 2,
+	ACPI_HEST_TYPE_NOT_USED3 = 3,
+	ACPI_HEST_TYPE_NOT_USED4 = 4,
+	ACPI_HEST_TYPE_NOT_USED5 = 5,
+	ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
+	ACPI_HEST_TYPE_AER_ENDPOINT = 7,
+	ACPI_HEST_TYPE_AER_BRIDGE = 8,
+	ACPI_HEST_TYPE_GENERIC_ERROR = 9,
+	ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
+	ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
+	ACPI_HEST_TYPE_RESERVED = 12,
+};
+
+struct acpi_hest_ia_machine_check {
+	struct acpi_hest_header header;
+	u16 reserved1;
+	u8 flags;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	u64 global_capability_data;
+	u64 global_control_data;
+	u8 num_hardware_banks;
+	u8 reserved3[7];
+};
+
+struct acpi_hest_generic {
+	struct acpi_hest_header header;
+	u16 related_source_id;
+	u8 reserved;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	u32 max_raw_data_length;
+	struct acpi_generic_address error_status_address;
+	struct acpi_hest_notify notify;
+	u32 error_block_length;
+} __attribute__((packed));
+
+struct acpi_hest_ia_deferred_check {
+	struct acpi_hest_header header;
+	u16 reserved1;
+	u8 flags;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	struct acpi_hest_notify notify;
+	u8 num_hardware_banks;
+	u8 reserved2[3];
+};
+
+enum hest_status {
+	HEST_ENABLED = 0,
+	HEST_DISABLED = 1,
+	HEST_NOT_FOUND = 2,
+};
+
+typedef int (*apei_hest_func_t)(struct acpi_hest_header *, void *);
+
+struct ghes_arr {
+	struct platform_device **ghes_devs;
+	unsigned int count;
+};
+
+struct acpi_table_erst {
+	struct acpi_table_header header;
+	u32 header_length;
+	u32 reserved;
+	u32 entries;
+};
+
+enum acpi_erst_actions {
+	ACPI_ERST_BEGIN_WRITE = 0,
+	ACPI_ERST_BEGIN_READ = 1,
+	ACPI_ERST_BEGIN_CLEAR = 2,
+	ACPI_ERST_END = 3,
+	ACPI_ERST_SET_RECORD_OFFSET = 4,
+	ACPI_ERST_EXECUTE_OPERATION = 5,
+	ACPI_ERST_CHECK_BUSY_STATUS = 6,
+	ACPI_ERST_GET_COMMAND_STATUS = 7,
+	ACPI_ERST_GET_RECORD_ID = 8,
+	ACPI_ERST_SET_RECORD_ID = 9,
+	ACPI_ERST_GET_RECORD_COUNT = 10,
+	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
+	ACPI_ERST_NOT_USED = 12,
+	ACPI_ERST_GET_ERROR_RANGE = 13,
+	ACPI_ERST_GET_ERROR_LENGTH = 14,
+	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
+	ACPI_ERST_EXECUTE_TIMINGS = 16,
+	ACPI_ERST_ACTION_RESERVED = 17,
+};
+
+enum acpi_erst_instructions {
+	ACPI_ERST_READ_REGISTER = 0,
+	ACPI_ERST_READ_REGISTER_VALUE = 1,
+	ACPI_ERST_WRITE_REGISTER = 2,
+	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
+	ACPI_ERST_NOOP = 4,
+	ACPI_ERST_LOAD_VAR1 = 5,
+	ACPI_ERST_LOAD_VAR2 = 6,
+	ACPI_ERST_STORE_VAR1 = 7,
+	ACPI_ERST_ADD = 8,
+	ACPI_ERST_SUBTRACT = 9,
+	ACPI_ERST_ADD_VALUE = 10,
+	ACPI_ERST_SUBTRACT_VALUE = 11,
+	ACPI_ERST_STALL = 12,
+	ACPI_ERST_STALL_WHILE_TRUE = 13,
+	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
+	ACPI_ERST_GOTO = 15,
+	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
+	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
+	ACPI_ERST_MOVE_DATA = 18,
+	ACPI_ERST_INSTRUCTION_RESERVED = 19,
+};
+
+struct erst_erange {
+	u64 base;
+	u64 size;
+	void *vaddr;
+	u32 attr;
+};
+
+struct erst_record_id_cache {
+	struct mutex lock;
+	u64 *entries;
+	int len;
+	int size;
+	int refcount;
+};
+
+struct cper_pstore_record {
+	struct cper_record_header hdr;
+	struct cper_section_descriptor sec_hdr;
+	char data[0];
+};
+
+struct acpi_bert_region {
+	u32 block_status;
+	u32 raw_data_offset;
+	u32 raw_data_length;
+	u32 data_length;
+	u32 error_severity;
+};
+
+struct acpi_hest_generic_status {
+	u32 block_status;
+	u32 raw_data_offset;
+	u32 raw_data_length;
+	u32 data_length;
+	u32 error_severity;
+};
+
+enum acpi_hest_notify_types {
+	ACPI_HEST_NOTIFY_POLLED = 0,
+	ACPI_HEST_NOTIFY_EXTERNAL = 1,
+	ACPI_HEST_NOTIFY_LOCAL = 2,
+	ACPI_HEST_NOTIFY_SCI = 3,
+	ACPI_HEST_NOTIFY_NMI = 4,
+	ACPI_HEST_NOTIFY_CMCI = 5,
+	ACPI_HEST_NOTIFY_MCE = 6,
+	ACPI_HEST_NOTIFY_GPIO = 7,
+	ACPI_HEST_NOTIFY_SEA = 8,
+	ACPI_HEST_NOTIFY_SEI = 9,
+	ACPI_HEST_NOTIFY_GSIV = 10,
+	ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,
+	ACPI_HEST_NOTIFY_RESERVED = 12,
+};
+
+struct acpi_hest_generic_v2 {
+	struct acpi_hest_header header;
+	u16 related_source_id;
+	u8 reserved;
+	u8 enabled;
+	u32 records_to_preallocate;
+	u32 max_sections_per_record;
+	u32 max_raw_data_length;
+	struct acpi_generic_address error_status_address;
+	struct acpi_hest_notify notify;
+	u32 error_block_length;
+	struct acpi_generic_address read_ack_register;
+	u64 read_ack_preserve;
+	u64 read_ack_write;
+} __attribute__((packed));
+
+struct acpi_hest_generic_data {
+	u8 section_type[16];
+	u32 error_severity;
+	u16 revision;
+	u8 validation_bits;
+	u8 flags;
+	u32 error_data_length;
+	u8 fru_id[16];
+	u8 fru_text[20];
+};
+
+struct acpi_hest_generic_data_v300 {
+	u8 section_type[16];
+	u32 error_severity;
+	u16 revision;
+	u8 validation_bits;
+	u8 flags;
+	u32 error_data_length;
+	u8 fru_id[16];
+	u8 fru_text[20];
+	u64 time_stamp;
+};
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+struct cper_arm_err_info {
+	u8 version;
+	u8 length;
+	u16 validation_bits;
+	u8 type;
+	u16 multiple_error;
+	u8 flags;
+	u64 error_info;
+	u64 virt_fault_addr;
+	u64 physical_fault_addr;
+} __attribute__((packed));
+
+struct cper_sec_pcie {
+	u64 validation_bits;
+	u32 port_type;
+	struct {
+		u8 minor;
+		u8 major;
+		u8 reserved[2];
+	} version;
+	u16 command;
+	u16 status;
+	u32 reserved;
+	struct {
+		u16 vendor_id;
+		u16 device_id;
+		u8 class_code[3];
+		u8 function;
+		u8 device;
+		u16 segment;
+		u8 bus;
+		u8 secondary_bus;
+		u16 slot;
+		u8 reserved;
+	} __attribute__((packed)) device_id;
+	struct {
+		u32 lower;
+		u32 upper;
+	} serial_number;
+	struct {
+		u16 secondary_status;
+		u16 control;
+	} bridge;
+	u8 capability[60];
+	u8 aer_info[96];
+};
+
+struct ghes {
+	union {
+		struct acpi_hest_generic *generic;
+		struct acpi_hest_generic_v2 *generic_v2;
+	};
+	struct acpi_hest_generic_status *estatus;
+	long unsigned int flags;
+	union {
+		struct list_head list;
+		struct timer_list timer;
+		unsigned int irq;
+	};
+};
+
+struct ghes_estatus_node {
+	struct llist_node llnode;
+	struct acpi_hest_generic *generic;
+	struct ghes *ghes;
+	int task_work_cpu;
+	struct callback_head task_work;
+};
+
+struct ghes_estatus_cache {
+	u32 estatus_len;
+	atomic_t count;
+	struct acpi_hest_generic *generic;
+	long long unsigned int time_in;
+	struct callback_head rcu;
+};
+
+struct ghes_vendor_record_entry {
+	struct work_struct work;
+	int error_severity;
+	char vendor_record[0];
+};
+
+struct pmic_table {
+	int address;
+	int reg;
+	int bit;
+};
+
+struct intel_pmic_opregion_data {
+	int (*get_power)(struct regmap *, int, int, u64 *);
+	int (*update_power)(struct regmap *, int, int, bool);
+	int (*get_raw_temp)(struct regmap *, int);
+	int (*update_aux)(struct regmap *, int, int);
+	int (*get_policy)(struct regmap *, int, int, u64 *);
+	int (*update_policy)(struct regmap *, int, int, int);
+	int (*exec_mipi_pmic_seq_element)(struct regmap *, u16, u32, u32, u32);
+	int (*lpat_raw_to_temp)(struct acpi_lpat_conversion_table *, int);
+	struct pmic_table *power_table;
+	int power_table_count;
+	struct pmic_table *thermal_table;
+	int thermal_table_count;
+	int pmic_i2c_address;
+};
+
+struct intel_pmic_regs_handler_ctx {
+	unsigned int val;
+	u16 addr;
+};
+
+struct intel_pmic_opregion {
+	struct mutex lock;
+	struct acpi_lpat_conversion_table *lpat_table;
+	struct regmap *regmap;
+	const struct intel_pmic_opregion_data *data;
+	struct intel_pmic_regs_handler_ctx ctx;
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	unsigned int type_base;
+	unsigned int *virt_reg_base;
+	unsigned int irq_reg_stride;
+	bool mask_writeonly: 1;
+	bool init_ack_masked: 1;
+	bool mask_invert: 1;
+	bool use_ack: 1;
+	bool ack_invert: 1;
+	bool clear_ack: 1;
+	bool wake_invert: 1;
+	bool runtime_pm: 1;
+	bool type_invert: 1;
+	bool type_in_mask: 1;
+	bool clear_on_unmask: 1;
+	bool not_fixed_stride: 1;
+	bool status_invert: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_type_reg;
+	int num_virt_regs;
+	unsigned int type_reg_stride;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*set_type_virt)(unsigned int **, unsigned int, long unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct axp20x_dev {
+	struct device *dev;
+	int irq;
+	long unsigned int irq_flags;
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *regmap_irqc;
+	long int variant;
+	int nr_cells;
+	const struct mfd_cell *cells;
+	const struct regmap_config *regmap_cfg;
+	const struct regmap_irq_chip *regmap_irq_chip;
+};
+
+struct mfd_cell_acpi_match;
+
+struct mfd_cell {
+	const char *name;
+	int id;
+	int level;
+	int (*enable)(struct platform_device *);
+	int (*disable)(struct platform_device *);
+	int (*suspend)(struct platform_device *);
+	int (*resume)(struct platform_device *);
+	void *platform_data;
+	size_t pdata_size;
+	const struct software_node *swnode;
+	const char *of_compatible;
+	const u64 of_reg;
+	bool use_of_reg;
+	const struct mfd_cell_acpi_match *acpi_match;
+	int num_resources;
+	const struct resource *resources;
+	bool ignore_resource_conflicts;
+	bool pm_runtime_no_callbacks;
+	const char * const *parent_supplies;
+	int num_parent_supplies;
+};
+
+struct tps68470_pmic_table {
+	u32 address;
+	u32 reg;
+	u32 bitmask;
+};
+
+struct tps68470_pmic_opregion {
+	struct mutex lock;
+	struct regmap *regmap;
+};
+
+struct acpi_table_viot {
+	struct acpi_table_header header;
+	u16 node_count;
+	u16 node_offset;
+	u8 reserved[8];
+};
+
+struct acpi_viot_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+enum acpi_viot_node_type {
+	ACPI_VIOT_NODE_PCI_RANGE = 1,
+	ACPI_VIOT_NODE_MMIO = 2,
+	ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 3,
+	ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 4,
+	ACPI_VIOT_RESERVED = 5,
+};
+
+struct acpi_viot_pci_range {
+	struct acpi_viot_header header;
+	u32 endpoint_start;
+	u16 segment_start;
+	u16 segment_end;
+	u16 bdf_start;
+	u16 bdf_end;
+	u16 output_node;
+	u8 reserved[6];
+};
+
+struct acpi_viot_mmio {
+	struct acpi_viot_header header;
+	u32 endpoint;
+	u64 base_address;
+	u16 output_node;
+	u8 reserved[6];
+};
+
+struct acpi_viot_virtio_iommu_pci {
+	struct acpi_viot_header header;
+	u16 segment;
+	u16 bdf;
+	u8 reserved[8];
+};
+
+struct acpi_viot_virtio_iommu_mmio {
+	struct acpi_viot_header header;
+	u8 reserved[4];
+	u64 base_address;
+};
+
+struct viot_iommu {
+	unsigned int offset;
+	struct fwnode_handle *fwnode;
+	struct list_head list;
+};
+
+struct viot_endpoint {
+	union {
+		struct {
+			u16 segment_start;
+			u16 segment_end;
+			u16 bdf_start;
+			u16 bdf_end;
+		};
+		u64 address;
+	};
+	u32 endpoint_id;
+	struct viot_iommu *viommu;
+	struct list_head list;
+};
+
+struct pnp_resource {
+	struct list_head list;
+	struct resource res;
+};
+
+struct pnp_port {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+typedef struct {
+	long unsigned int bits[4];
+} pnp_irq_mask_t;
+
+struct pnp_irq {
+	pnp_irq_mask_t map;
+	unsigned char flags;
+};
+
+struct pnp_dma {
+	unsigned char map;
+	unsigned char flags;
+};
+
+struct pnp_mem {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+struct pnp_option {
+	struct list_head list;
+	unsigned int flags;
+	long unsigned int type;
+	union {
+		struct pnp_port port;
+		struct pnp_irq irq;
+		struct pnp_dma dma;
+		struct pnp_mem mem;
+	} u;
+};
+
+struct pnp_info_buffer {
+	char *buffer;
+	char *curr;
+	long unsigned int size;
+	long unsigned int len;
+	int stop;
+	int error;
+};
+
+typedef struct pnp_info_buffer pnp_info_buffer_t;
+
+struct pnp_fixup {
+	char id[7];
+	void (*quirk_function)(struct pnp_dev *);
+};
+
+struct acpipnp_parse_option_s {
+	struct pnp_dev *dev;
+	unsigned int option_flags;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+struct clk_bulk_devres {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_hw;
+
+struct clk_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct clk *clk;
+	struct clk_hw *clk_hw;
+};
+
+struct clk_core;
+
+struct clk_init_data;
+
+struct clk_hw {
+	struct clk_core *core;
+	struct clk *clk;
+	const struct clk_init_data *init;
+};
+
+struct clk_rate_request {
+	long unsigned int rate;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int best_parent_rate;
+	struct clk_hw *best_parent_hw;
+};
+
+struct clk_duty {
+	unsigned int num;
+	unsigned int den;
+};
+
+struct clk_ops {
+	int (*prepare)(struct clk_hw *);
+	void (*unprepare)(struct clk_hw *);
+	int (*is_prepared)(struct clk_hw *);
+	void (*unprepare_unused)(struct clk_hw *);
+	int (*enable)(struct clk_hw *);
+	void (*disable)(struct clk_hw *);
+	int (*is_enabled)(struct clk_hw *);
+	void (*disable_unused)(struct clk_hw *);
+	int (*save_context)(struct clk_hw *);
+	void (*restore_context)(struct clk_hw *);
+	long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);
+	long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);
+	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
+	int (*set_parent)(struct clk_hw *, u8);
+	u8 (*get_parent)(struct clk_hw *);
+	int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);
+	int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);
+	long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);
+	int (*get_phase)(struct clk_hw *);
+	int (*set_phase)(struct clk_hw *, int);
+	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*init)(struct clk_hw *);
+	void (*terminate)(struct clk_hw *);
+	void (*debug_init)(struct clk_hw *, struct dentry *);
+};
+
+struct clk_parent_data {
+	const struct clk_hw *hw;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct clk_init_data {
+	const char *name;
+	const struct clk_ops *ops;
+	const char * const *parent_names;
+	const struct clk_parent_data *parent_data;
+	const struct clk_hw **parent_hws;
+	u8 num_parents;
+	long unsigned int flags;
+};
+
+struct clk_lookup_alloc {
+	struct clk_lookup cl;
+	char dev_id[20];
+	char con_id[16];
+};
+
+struct clk_notifier {
+	struct clk *clk;
+	struct srcu_notifier_head notifier_head;
+	struct list_head node;
+};
+
+struct clk {
+	struct clk_core *core;
+	struct device *dev;
+	const char *dev_id;
+	const char *con_id;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	unsigned int exclusive_count;
+	struct hlist_node clks_node;
+};
+
+struct clk_notifier_data {
+	struct clk *clk;
+	long unsigned int old_rate;
+	long unsigned int new_rate;
+};
+
+struct clk_parent_map;
+
+struct clk_core {
+	const char *name;
+	const struct clk_ops *ops;
+	struct clk_hw *hw;
+	struct module *owner;
+	struct device *dev;
+	struct device_node *of_node;
+	struct clk_core *parent;
+	struct clk_parent_map *parents;
+	u8 num_parents;
+	u8 new_parent_index;
+	long unsigned int rate;
+	long unsigned int req_rate;
+	long unsigned int new_rate;
+	struct clk_core *new_parent;
+	struct clk_core *new_child;
+	long unsigned int flags;
+	bool orphan;
+	bool rpm_enabled;
+	unsigned int enable_count;
+	unsigned int prepare_count;
+	unsigned int protect_count;
+	long unsigned int min_rate;
+	long unsigned int max_rate;
+	long unsigned int accuracy;
+	int phase;
+	struct clk_duty duty;
+	struct hlist_head children;
+	struct hlist_node child_node;
+	struct hlist_head clks;
+	unsigned int notifier_count;
+	struct dentry *dentry;
+	struct hlist_node debug_node;
+	struct kref ref;
+};
+
+struct clk_parent_map {
+	const struct clk_hw *hw;
+	struct clk_core *core;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct trace_event_raw_clk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int rate;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	long unsigned int min;
+	long unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_parent {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_phase {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int phase;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_duty_cycle {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int num;
+	unsigned int den;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_clk {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_parent {
+	u32 name;
+	u32 pname;
+};
+
+struct trace_event_data_offsets_clk_phase {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_duty_cycle {
+	u32 name;
+};
+
+typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int);
+
+typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int);
+
+typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
+
+struct clk_notifier_devres {
+	struct clk *clk;
+	struct notifier_block *nb;
+};
+
+struct clk_div_table {
+	unsigned int val;
+	unsigned int div;
+};
+
+struct clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_fixed_factor {
+	struct clk_hw hw;
+	unsigned int mult;
+	unsigned int div;
+};
+
+struct clk_fixed_rate {
+	struct clk_hw hw;
+	long unsigned int fixed_rate;
+	long unsigned int fixed_accuracy;
+	long unsigned int flags;
+};
+
+struct clk_gate {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_multiplier {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_mux {
+	struct clk_hw hw;
+	void *reg;
+	const u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_composite {
+	struct clk_hw hw;
+	struct clk_ops ops;
+	struct clk_hw *mux_hw;
+	struct clk_hw *rate_hw;
+	struct clk_hw *gate_hw;
+	const struct clk_ops *mux_ops;
+	const struct clk_ops *rate_ops;
+	const struct clk_ops *gate_ops;
+};
+
+struct clk_fractional_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 mshift;
+	u8 mwidth;
+	u32 mmask;
+	u8 nshift;
+	u8 nwidth;
+	u32 nmask;
+	u8 flags;
+	void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);
+	spinlock_t *lock;
+};
+
+struct clk_gpio {
+	struct clk_hw hw;
+	struct gpio_desc *gpiod;
+};
+
+struct pmc_clk {
+	const char *name;
+	long unsigned int freq;
+	const char *parent_name;
+};
+
+struct pmc_clk_data {
+	void *base;
+	const struct pmc_clk *clks;
+	bool critical;
+};
+
+struct clk_plt_fixed {
+	struct clk_hw *clk;
+	struct clk_lookup *lookup;
+};
+
+struct clk_plt {
+	struct clk_hw hw;
+	void *reg;
+	struct clk_lookup *lookup;
+	spinlock_t lock;
+};
+
+struct clk_plt_data {
+	struct clk_plt_fixed **parents;
+	u8 nparents;
+	struct clk_plt *clks[6];
+	struct clk_lookup *mclk_lookup;
+	struct clk_lookup *ether_clk_lookup;
+};
+
+struct dma_chan_tbl_ent {
+	struct dma_chan___2 *chan;
+};
+
+struct dmaengine_unmap_pool {
+	struct kmem_cache *cache;
+	const char *name;
+	mempool_t *pool;
+	size_t size;
+};
+
+struct dmaengine_desc_callback {
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+};
+
+struct virt_dma_desc {
+	struct dma_async_tx_descriptor tx;
+	struct dmaengine_result tx_result;
+	struct list_head node;
+};
+
+struct virt_dma_chan {
+	struct dma_chan___2 chan;
+	struct tasklet_struct task;
+	void (*desc_free)(struct virt_dma_desc *);
+	spinlock_t lock;
+	struct list_head desc_allocated;
+	struct list_head desc_submitted;
+	struct list_head desc_issued;
+	struct list_head desc_completed;
+	struct list_head desc_terminated;
+	struct virt_dma_desc *cyclic;
+};
+
+struct acpi_table_csrt {
+	struct acpi_table_header header;
+};
+
+struct acpi_csrt_group {
+	u32 length;
+	u32 vendor_id;
+	u32 subvendor_id;
+	u16 device_id;
+	u16 subdevice_id;
+	u16 revision;
+	u16 reserved;
+	u32 shared_info_length;
+};
+
+struct acpi_csrt_shared_info {
+	u16 major_version;
+	u16 minor_version;
+	u32 mmio_base_low;
+	u32 mmio_base_high;
+	u32 gsi_interrupt;
+	u8 interrupt_polarity;
+	u8 interrupt_mode;
+	u8 num_channels;
+	u8 dma_address_width;
+	u16 base_request_line;
+	u16 num_handshake_signals;
+	u32 max_block_size;
+};
+
+struct acpi_dma_spec {
+	int chan_id;
+	int slave_id;
+	struct device *dev;
+};
+
+struct acpi_dma {
+	struct list_head dma_controllers;
+	struct device *dev;
+	struct dma_chan___2 * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
+	void *data;
+	short unsigned int base_request_line;
+	short unsigned int end_request_line;
+};
+
+struct acpi_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct acpi_dma_parser_data {
+	struct acpi_dma_spec dma_spec;
+	size_t index;
+	size_t n;
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan___2 * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct reset_control;
+
+enum ldma_chan_on_off {
+	DMA_CH_OFF = 0,
+	DMA_CH_ON = 1,
+};
+
+enum {
+	DMA_TYPE_TX = 0,
+	DMA_TYPE_RX = 1,
+	DMA_TYPE_MCPY = 2,
+};
+
+struct dma_pool___2;
+
+struct ldma_port;
+
+struct dw2_desc_sw;
+
+struct ldma_chan {
+	struct virt_dma_chan vchan;
+	struct ldma_port *port;
+	char name[8];
+	int nr;
+	u32 flags;
+	enum ldma_chan_on_off onoff;
+	dma_addr_t desc_phys;
+	void *desc_base;
+	u32 desc_cnt;
+	int rst;
+	u32 hdrm_len;
+	bool hdrm_csum;
+	u32 boff_len;
+	u32 data_endian;
+	u32 desc_endian;
+	bool pden;
+	bool desc_rx_np;
+	bool data_endian_en;
+	bool desc_endian_en;
+	bool abc_en;
+	bool desc_init;
+	struct dma_pool___2 *desc_pool;
+	u32 desc_num;
+	struct dw2_desc_sw *ds;
+	struct work_struct work;
+	struct dma_slave_config config;
+};
+
+struct ldma_dev;
+
+struct ldma_port {
+	struct ldma_dev *ldev;
+	u32 portid;
+	u32 rxbl;
+	u32 txbl;
+	u32 rxendi;
+	u32 txendi;
+	u32 pkt_drop;
+};
+
+struct dw2_desc;
+
+struct dw2_desc_sw {
+	struct virt_dma_desc vdesc;
+	struct ldma_chan *chan;
+	dma_addr_t desc_phys;
+	size_t desc_cnt;
+	size_t size;
+	struct dw2_desc *desc_hw;
+};
+
+struct ldma_inst_data;
+
+struct ldma_dev {
+	struct device *dev;
+	void *base;
+	struct reset_control *rst;
+	struct clk *core_clk;
+	struct dma_device dma_dev;
+	u32 ver;
+	int irq;
+	struct ldma_port *ports;
+	struct ldma_chan *chans;
+	spinlock_t dev_lock;
+	u32 chan_nrs;
+	u32 port_nrs;
+	u32 channels_mask;
+	u32 flags;
+	u32 pollcnt;
+	const struct ldma_inst_data *inst;
+	struct workqueue_struct *wq;
+};
+
+struct ldma_inst_data {
+	bool desc_in_sram;
+	bool chan_fc;
+	bool desc_fod;
+	bool valid_desc_fetch_ack;
+	u32 orrc;
+	const char *name;
+	u32 type;
+};
+
+struct dw2_desc {
+	u32 field;
+	u32 addr;
+};
+
+struct virtio_driver {
+	struct device_driver driver;
+	const struct virtio_device_id *id_table;
+	const unsigned int *feature_table;
+	unsigned int feature_table_size;
+	const unsigned int *feature_table_legacy;
+	unsigned int feature_table_size_legacy;
+	int (*validate)(struct virtio_device *);
+	int (*probe)(struct virtio_device *);
+	void (*scan)(struct virtio_device *);
+	void (*remove)(struct virtio_device *);
+	void (*config_changed)(struct virtio_device *);
+	int (*freeze)(struct virtio_device *);
+	int (*restore)(struct virtio_device *);
+};
+
+typedef __u16 __virtio16;
+
+typedef __u32 __virtio32;
+
+typedef __u64 __virtio64;
+
+struct vring_desc {
+	__virtio64 addr;
+	__virtio32 len;
+	__virtio16 flags;
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[0];
+};
+
+struct vring_used_elem {
+	__virtio32 id;
+	__virtio32 len;
+};
+
+typedef struct vring_used_elem vring_used_elem_t;
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	vring_used_elem_t ring[0];
+};
+
+typedef struct vring_desc vring_desc_t;
+
+typedef struct vring_avail vring_avail_t;
+
+typedef struct vring_used vring_used_t;
+
+struct vring {
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+};
+
+struct vring_packed_desc_event {
+	__le16 off_wrap;
+	__le16 flags;
+};
+
+struct vring_packed_desc {
+	__le64 addr;
+	__le32 len;
+	__le16 id;
+	__le16 flags;
+};
+
+struct vring_desc_state_split {
+	void *data;
+	struct vring_desc *indir_desc;
+};
+
+struct vring_desc_state_packed {
+	void *data;
+	struct vring_packed_desc *indir_desc;
+	u16 num;
+	u16 last;
+};
+
+struct vring_desc_extra {
+	dma_addr_t addr;
+	u32 len;
+	u16 flags;
+	u16 next;
+};
+
+struct vring_virtqueue {
+	struct virtqueue vq;
+	bool packed_ring;
+	bool use_dma_api;
+	bool weak_barriers;
+	bool broken;
+	bool indirect;
+	bool event;
+	unsigned int free_head;
+	unsigned int num_added;
+	u16 last_used_idx;
+	bool event_triggered;
+	union {
+		struct {
+			struct vring vring;
+			u16 avail_flags_shadow;
+			u16 avail_idx_shadow;
+			struct vring_desc_state_split *desc_state;
+			struct vring_desc_extra *desc_extra;
+			dma_addr_t queue_dma_addr;
+			size_t queue_size_in_bytes;
+		} split;
+		struct {
+			struct {
+				unsigned int num;
+				struct vring_packed_desc *desc;
+				struct vring_packed_desc_event *driver;
+				struct vring_packed_desc_event *device;
+			} vring;
+			bool avail_wrap_counter;
+			bool used_wrap_counter;
+			u16 avail_used_flags;
+			u16 next_avail_idx;
+			u16 event_flags_shadow;
+			struct vring_desc_state_packed *desc_state;
+			struct vring_desc_extra *desc_extra;
+			dma_addr_t ring_dma_addr;
+			dma_addr_t driver_event_dma_addr;
+			dma_addr_t device_event_dma_addr;
+			size_t ring_size_in_bytes;
+			size_t event_size_in_bytes;
+		} packed;
+	};
+	bool (*notify)(struct virtqueue *);
+	bool we_own_ring;
+};
+
+struct virtio_pci_common_cfg {
+	__le32 device_feature_select;
+	__le32 device_feature;
+	__le32 guest_feature_select;
+	__le32 guest_feature;
+	__le16 msix_config;
+	__le16 num_queues;
+	__u8 device_status;
+	__u8 config_generation;
+	__le16 queue_select;
+	__le16 queue_size;
+	__le16 queue_msix_vector;
+	__le16 queue_enable;
+	__le16 queue_notify_off;
+	__le32 queue_desc_lo;
+	__le32 queue_desc_hi;
+	__le32 queue_avail_lo;
+	__le32 queue_avail_hi;
+	__le32 queue_used_lo;
+	__le32 queue_used_hi;
+};
+
+struct virtio_pci_modern_device {
+	struct pci_dev *pci_dev;
+	struct virtio_pci_common_cfg *common;
+	void *device;
+	void *notify_base;
+	resource_size_t notify_pa;
+	u8 *isr;
+	size_t notify_len;
+	size_t device_len;
+	int notify_map_cap;
+	u32 notify_offset_multiplier;
+	int modern_bars;
+	struct virtio_device_id id;
+};
+
+struct virtio_pci_legacy_device {
+	struct pci_dev *pci_dev;
+	u8 *isr;
+	void *ioaddr;
+	struct virtio_device_id id;
+};
+
+struct virtio_mmio_device {
+	struct virtio_device vdev;
+	struct platform_device *pdev;
+	void *base;
+	long unsigned int version;
+	spinlock_t lock;
+	struct list_head virtqueues;
+};
+
+struct virtio_mmio_vq_info {
+	struct virtqueue *vq;
+	struct list_head node;
+};
+
+struct virtio_pci_vq_info {
+	struct virtqueue *vq;
+	struct list_head node;
+	unsigned int msix_vector;
+};
+
+struct virtio_pci_device {
+	struct virtio_device vdev;
+	struct pci_dev *pci_dev;
+	struct virtio_pci_legacy_device ldev;
+	struct virtio_pci_modern_device mdev;
+	bool is_legacy;
+	u8 *isr;
+	spinlock_t lock;
+	struct list_head virtqueues;
+	struct virtio_pci_vq_info **vqs;
+	int msix_enabled;
+	int intx_enabled;
+	cpumask_var_t *msix_affinity_masks;
+	char (*msix_names)[256];
+	unsigned int msix_vectors;
+	unsigned int msix_used_vectors;
+	bool per_vq_vectors;
+	struct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16);
+	void (*del_vq)(struct virtio_pci_vq_info *);
+	u16 (*config_vector)(struct virtio_pci_device *, u16);
+};
+
+enum {
+	VP_MSIX_CONFIG_VECTOR = 0,
+	VP_MSIX_VQ_VECTOR = 1,
+};
+
+struct virtio_balloon_config {
+	__le32 num_pages;
+	__le32 actual;
+	union {
+		__le32 free_page_hint_cmd_id;
+		__le32 free_page_report_cmd_id;
+	};
+	__le32 poison_val;
+};
+
+struct virtio_balloon_stat {
+	__virtio16 tag;
+	__virtio64 val;
+} __attribute__((packed));
+
+enum virtio_balloon_vq {
+	VIRTIO_BALLOON_VQ_INFLATE = 0,
+	VIRTIO_BALLOON_VQ_DEFLATE = 1,
+	VIRTIO_BALLOON_VQ_STATS = 2,
+	VIRTIO_BALLOON_VQ_FREE_PAGE = 3,
+	VIRTIO_BALLOON_VQ_REPORTING = 4,
+	VIRTIO_BALLOON_VQ_MAX = 5,
+};
+
+enum virtio_balloon_config_read {
+	VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
+};
+
+struct virtio_balloon {
+	struct virtio_device *vdev;
+	struct virtqueue *inflate_vq;
+	struct virtqueue *deflate_vq;
+	struct virtqueue *stats_vq;
+	struct virtqueue *free_page_vq;
+	struct workqueue_struct *balloon_wq;
+	struct work_struct report_free_page_work;
+	struct work_struct update_balloon_stats_work;
+	struct work_struct update_balloon_size_work;
+	spinlock_t stop_update_lock;
+	bool stop_update;
+	int: 24;
+	long unsigned int config_read_bitmap;
+	struct list_head free_page_list;
+	spinlock_t free_page_list_lock;
+	int: 32;
+	long unsigned int num_free_page_blocks;
+	u32 cmd_id_received_cache;
+	__virtio32 cmd_id_active;
+	__virtio32 cmd_id_stop;
+	int: 32;
+	wait_queue_head_t acked;
+	unsigned int num_pages;
+	int: 32;
+	struct balloon_dev_info vb_dev_info;
+	struct mutex balloon_lock;
+	unsigned int num_pfns;
+	__virtio32 pfns[256];
+	struct virtio_balloon_stat stats[10];
+	struct shrinker shrinker;
+	struct notifier_block oom_nb;
+	struct virtqueue *reporting_vq;
+	struct page_reporting_dev_info pr_dev_info;
+} __attribute__((packed));
+
+struct xsd_errors {
+	int errnum;
+	const char *errstring;
+};
+
+struct xenbus_watch {
+	struct list_head list;
+	const char *node;
+	unsigned int nr_pending;
+	bool (*will_handle)(struct xenbus_watch *, const char *, const char *);
+	void (*callback)(struct xenbus_watch *, const char *, const char *);
+};
+
+struct xenbus_transaction {
+	u32 id;
+};
+
+struct grant_entry_v1 {
+	uint16_t flags;
+	domid_t domid;
+	uint32_t frame;
+};
+
+struct grant_entry_header {
+	uint16_t flags;
+	domid_t domid;
+};
+
+union grant_entry_v2 {
+	struct grant_entry_header hdr;
+	struct {
+		struct grant_entry_header hdr;
+		uint32_t pad0;
+		uint64_t frame;
+	} full_page;
+	struct {
+		struct grant_entry_header hdr;
+		uint16_t page_off;
+		uint16_t length;
+		uint64_t frame;
+	} sub_page;
+	struct {
+		struct grant_entry_header hdr;
+		domid_t trans_domid;
+		uint16_t pad0;
+		grant_ref_t gref;
+	} transitive;
+	uint32_t __spacer[4];
+};
+
+struct gnttab_setup_table {
+	domid_t dom;
+	uint32_t nr_frames;
+	int16_t status;
+	__guest_handle_xen_pfn_t frame_list;
+};
+
+struct gnttab_copy_ptr {
+	union {
+		grant_ref_t ref;
+		xen_pfn_t gmfn;
+	} u;
+	domid_t domid;
+	uint16_t offset;
+};
+
+struct gnttab_copy {
+	struct gnttab_copy_ptr source;
+	struct gnttab_copy_ptr dest;
+	uint16_t len;
+	uint16_t flags;
+	int16_t status;
+};
+
+struct gnttab_query_size {
+	domid_t dom;
+	uint32_t nr_frames;
+	uint32_t max_nr_frames;
+	int16_t status;
+};
+
+struct gnttab_set_version {
+	uint32_t version;
+};
+
+struct gnttab_get_status_frames {
+	uint32_t nr_frames;
+	domid_t dom;
+	int16_t status;
+	__guest_handle_uint64_t frame_list;
+};
+
+struct gnttab_free_callback {
+	struct gnttab_free_callback *next;
+	void (*fn)(void *);
+	void *arg;
+	u16 count;
+};
+
+struct gntab_unmap_queue_data;
+
+typedef void (*gnttab_unmap_refs_done)(int, struct gntab_unmap_queue_data *);
+
+struct gntab_unmap_queue_data {
+	struct delayed_work gnttab_work;
+	void *data;
+	gnttab_unmap_refs_done done;
+	struct gnttab_unmap_grant_ref *unmap_ops;
+	struct gnttab_unmap_grant_ref *kunmap_ops;
+	struct page **pages;
+	unsigned int count;
+	unsigned int age;
+};
+
+struct gnttab_page_cache {
+	spinlock_t lock;
+	struct page *pages;
+	unsigned int num_pages;
+};
+
+struct gnttab_dma_alloc_args {
+	struct device *dev;
+	bool coherent;
+	int nr_pages;
+	struct page **pages;
+	xen_pfn_t *frames;
+	void *vaddr;
+	dma_addr_t dev_bus_addr;
+};
+
+struct xen_page_foreign {
+	domid_t domid;
+	grant_ref_t gref;
+};
+
+typedef void (*xen_grant_fn_t)(long unsigned int, unsigned int, unsigned int, void *);
+
+struct gnttab_ops {
+	unsigned int version;
+	unsigned int grefs_per_grant_frame;
+	int (*map_frames)(xen_pfn_t *, unsigned int);
+	void (*unmap_frames)();
+	void (*update_entry)(grant_ref_t, domid_t, long unsigned int, unsigned int);
+	int (*end_foreign_access_ref)(grant_ref_t);
+	long unsigned int (*read_frame)(grant_ref_t);
+};
+
+struct unmap_refs_callback_data {
+	struct completion completion;
+	int result;
+};
+
+struct deferred_entry {
+	struct list_head list;
+	grant_ref_t ref;
+	uint16_t warn_delay;
+	struct page *page;
+};
+
+struct xen_feature_info {
+	unsigned int submap_idx;
+	uint32_t submap;
+};
+
+struct balloon_stats {
+	long unsigned int current_pages;
+	long unsigned int target_pages;
+	long unsigned int target_unpopulated;
+	long unsigned int balloon_low;
+	long unsigned int balloon_high;
+	long unsigned int total_pages;
+	long unsigned int schedule_delay;
+	long unsigned int max_schedule_delay;
+	long unsigned int retry_count;
+	long unsigned int max_retry_count;
+};
+
+enum bp_state {
+	BP_DONE = 0,
+	BP_WAIT = 1,
+	BP_EAGAIN = 2,
+	BP_ECANCELED = 3,
+};
+
+enum shutdown_state {
+	SHUTDOWN_INVALID = 4294967295,
+	SHUTDOWN_POWEROFF = 0,
+	SHUTDOWN_SUSPEND = 2,
+	SHUTDOWN_HALT = 4,
+};
+
+struct suspend_info {
+	int cancelled;
+};
+
+struct shutdown_handler {
+	const char command[11];
+	bool flag;
+	void (*cb)();
+};
+
+struct vcpu_runstate_info {
+	int state;
+	uint64_t state_entry_time;
+	uint64_t time[4];
+};
+
+typedef struct vcpu_runstate_info *__guest_handle_vcpu_runstate_info;
+
+struct vcpu_register_runstate_memory_area {
+	union {
+		__guest_handle_vcpu_runstate_info h;
+		struct vcpu_runstate_info *v;
+		uint64_t p;
+	} addr;
+};
+
+typedef uint32_t evtchn_port_t;
+
+typedef evtchn_port_t *__guest_handle_evtchn_port_t;
+
+struct evtchn_bind_interdomain {
+	domid_t remote_dom;
+	evtchn_port_t remote_port;
+	evtchn_port_t local_port;
+};
+
+struct evtchn_bind_virq {
+	uint32_t virq;
+	uint32_t vcpu;
+	evtchn_port_t port;
+};
+
+struct evtchn_bind_pirq {
+	uint32_t pirq;
+	uint32_t flags;
+	evtchn_port_t port;
+};
+
+struct evtchn_bind_ipi {
+	uint32_t vcpu;
+	evtchn_port_t port;
+};
+
+struct evtchn_close {
+	evtchn_port_t port;
+};
+
+struct evtchn_send {
+	evtchn_port_t port;
+};
+
+struct evtchn_status {
+	domid_t dom;
+	evtchn_port_t port;
+	uint32_t status;
+	uint32_t vcpu;
+	union {
+		struct {
+			domid_t dom;
+		} unbound;
+		struct {
+			domid_t dom;
+			evtchn_port_t port;
+		} interdomain;
+		uint32_t pirq;
+		uint32_t virq;
+	} u;
+};
+
+struct evtchn_bind_vcpu {
+	evtchn_port_t port;
+	uint32_t vcpu;
+};
+
+struct evtchn_set_priority {
+	evtchn_port_t port;
+	uint32_t priority;
+};
+
+struct sched_poll {
+	__guest_handle_evtchn_port_t ports;
+	unsigned int nr_ports;
+	uint64_t timeout;
+};
+
+struct physdev_eoi {
+	uint32_t irq;
+};
+
+struct physdev_pirq_eoi_gmfn {
+	xen_ulong_t gmfn;
+};
+
+struct physdev_irq_status_query {
+	uint32_t irq;
+	uint32_t flags;
+};
+
+struct physdev_irq {
+	uint32_t irq;
+	uint32_t vector;
+};
+
+struct physdev_map_pirq {
+	domid_t domid;
+	int type;
+	int index;
+	int pirq;
+	int bus;
+	int devfn;
+	int entry_nr;
+	uint64_t table_base;
+};
+
+struct physdev_unmap_pirq {
+	domid_t domid;
+	int pirq;
+};
+
+struct physdev_get_free_pirq {
+	int type;
+	uint32_t pirq;
+};
+
+enum xenbus_state {
+	XenbusStateUnknown = 0,
+	XenbusStateInitialising = 1,
+	XenbusStateInitWait = 2,
+	XenbusStateInitialised = 3,
+	XenbusStateConnected = 4,
+	XenbusStateClosing = 5,
+	XenbusStateClosed = 6,
+	XenbusStateReconfiguring = 7,
+	XenbusStateReconfigured = 8,
+};
+
+struct xenbus_device {
+	const char *devicetype;
+	const char *nodename;
+	const char *otherend;
+	int otherend_id;
+	struct xenbus_watch otherend_watch;
+	struct device dev;
+	enum xenbus_state state;
+	struct completion down;
+	struct work_struct work;
+	struct semaphore reclaim_sem;
+	atomic_t event_channels;
+	atomic_t events;
+	atomic_t spurious_events;
+	atomic_t jiffies_eoi_delayed;
+	unsigned int spurious_threshold;
+};
+
+struct evtchn_loop_ctrl;
+
+struct evtchn_ops {
+	unsigned int (*max_channels)();
+	unsigned int (*nr_channels)();
+	int (*setup)(evtchn_port_t);
+	void (*remove)(evtchn_port_t, unsigned int);
+	void (*bind_to_cpu)(evtchn_port_t, unsigned int, unsigned int);
+	void (*clear_pending)(evtchn_port_t);
+	void (*set_pending)(evtchn_port_t);
+	bool (*is_pending)(evtchn_port_t);
+	void (*mask)(evtchn_port_t);
+	void (*unmask)(evtchn_port_t);
+	void (*handle_events)(unsigned int, struct evtchn_loop_ctrl *);
+	void (*resume)();
+	int (*percpu_init)(unsigned int);
+	int (*percpu_deinit)(unsigned int);
+};
+
+struct evtchn_loop_ctrl {
+	ktime_t timeout;
+	unsigned int count;
+	bool defer_eoi;
+};
+
+enum xen_irq_type {
+	IRQT_UNBOUND = 0,
+	IRQT_PIRQ = 1,
+	IRQT_VIRQ = 2,
+	IRQT_IPI = 3,
+	IRQT_EVTCHN = 4,
+};
+
+struct irq_info {
+	struct list_head list;
+	struct list_head eoi_list;
+	short int refcnt;
+	u8 spurious_cnt;
+	u8 is_accounted;
+	short int type;
+	u8 mask_reason;
+	u8 is_active;
+	unsigned int irq;
+	evtchn_port_t evtchn;
+	short unsigned int cpu;
+	short unsigned int eoi_cpu;
+	unsigned int irq_epoch;
+	u64 eoi_time;
+	raw_spinlock_t lock;
+	union {
+		short unsigned int virq;
+		enum ipi_vector ipi;
+		struct {
+			short unsigned int pirq;
+			short unsigned int gsi;
+			unsigned char vector;
+			unsigned char flags;
+			uint16_t domid;
+		} pirq;
+		struct xenbus_device *interdomain;
+	} u;
+};
+
+struct lateeoi_work {
+	struct delayed_work delayed;
+	spinlock_t eoi_list_lock;
+	struct list_head eoi_list;
+};
+
+struct evtchn_unmask {
+	evtchn_port_t port;
+};
+
+struct evtchn_init_control {
+	uint64_t control_gfn;
+	uint32_t offset;
+	uint32_t vcpu;
+	uint8_t link_bits;
+	uint8_t _pad[7];
+};
+
+struct evtchn_expand_array {
+	uint64_t array_gfn;
+};
+
+typedef uint32_t event_word_t;
+
+struct evtchn_fifo_control_block {
+	uint32_t ready;
+	uint32_t _rsvd;
+	event_word_t head[16];
+};
+
+struct evtchn_fifo_queue {
+	uint32_t head[16];
+};
+
+struct evtchn_alloc_unbound {
+	domid_t dom;
+	domid_t remote_dom;
+	evtchn_port_t port;
+};
+
+struct xenbus_map_node {
+	struct list_head next;
+	union {
+		struct {
+			struct vm_struct *area;
+		} pv;
+		struct {
+			struct page *pages[16];
+			long unsigned int addrs[16];
+			void *addr;
+		} hvm;
+	};
+	grant_handle_t handles[16];
+	unsigned int nr_handles;
+};
+
+struct map_ring_valloc {
+	struct xenbus_map_node *node;
+	long unsigned int addrs[16];
+	phys_addr_t phys_addrs[16];
+	struct gnttab_map_grant_ref map[16];
+	struct gnttab_unmap_grant_ref unmap[16];
+	unsigned int idx;
+};
+
+struct xenbus_ring_ops {
+	int (*map)(struct xenbus_device *, struct map_ring_valloc *, grant_ref_t *, unsigned int, void **);
+	int (*unmap)(struct xenbus_device *, void *);
+};
+
+struct unmap_ring_hvm {
+	unsigned int idx;
+	long unsigned int addrs[16];
+};
+
+enum xsd_sockmsg_type {
+	XS_CONTROL = 0,
+	XS_DIRECTORY = 1,
+	XS_READ = 2,
+	XS_GET_PERMS = 3,
+	XS_WATCH = 4,
+	XS_UNWATCH = 5,
+	XS_TRANSACTION_START = 6,
+	XS_TRANSACTION_END = 7,
+	XS_INTRODUCE = 8,
+	XS_RELEASE = 9,
+	XS_GET_DOMAIN_PATH = 10,
+	XS_WRITE = 11,
+	XS_MKDIR = 12,
+	XS_RM = 13,
+	XS_SET_PERMS = 14,
+	XS_WATCH_EVENT = 15,
+	XS_ERROR = 16,
+	XS_IS_DOMAIN_INTRODUCED = 17,
+	XS_RESUME = 18,
+	XS_SET_TARGET = 19,
+	XS_RESET_WATCHES = 21,
+	XS_DIRECTORY_PART = 22,
+	XS_TYPE_COUNT = 23,
+	XS_INVALID = 65535,
+};
+
+struct xsd_sockmsg {
+	uint32_t type;
+	uint32_t req_id;
+	uint32_t tx_id;
+	uint32_t len;
+};
+
+typedef uint32_t XENSTORE_RING_IDX;
+
+struct xenstore_domain_interface {
+	char req[1024];
+	char rsp[1024];
+	XENSTORE_RING_IDX req_cons;
+	XENSTORE_RING_IDX req_prod;
+	XENSTORE_RING_IDX rsp_cons;
+	XENSTORE_RING_IDX rsp_prod;
+	uint32_t server_features;
+	uint32_t connection;
+	uint32_t error;
+};
+
+struct xs_watch_event {
+	struct list_head list;
+	unsigned int len;
+	struct xenbus_watch *handle;
+	const char *path;
+	const char *token;
+	char body[0];
+};
+
+enum xb_req_state {
+	xb_req_state_queued = 0,
+	xb_req_state_wait_reply = 1,
+	xb_req_state_got_reply = 2,
+	xb_req_state_aborted = 3,
+};
+
+struct xb_req_data {
+	struct list_head list;
+	wait_queue_head_t wq;
+	struct xsd_sockmsg msg;
+	uint32_t caller_req_id;
+	enum xsd_sockmsg_type type;
+	char *body;
+	const struct kvec *vec;
+	int num_vecs;
+	int err;
+	enum xb_req_state state;
+	bool user_req;
+	void (*cb)(struct xb_req_data *);
+	void *par;
+};
+
+enum xenstore_init {
+	XS_UNKNOWN = 0,
+	XS_PV = 1,
+	XS_HVM = 2,
+	XS_LOCAL = 3,
+};
+
+struct xenbus_device_id {
+	char devicetype[32];
+};
+
+struct xenbus_driver {
+	const char *name;
+	const struct xenbus_device_id *ids;
+	bool allow_rebind;
+	bool not_essential;
+	int (*probe)(struct xenbus_device *, const struct xenbus_device_id *);
+	void (*otherend_changed)(struct xenbus_device *, enum xenbus_state);
+	int (*remove)(struct xenbus_device *);
+	int (*suspend)(struct xenbus_device *);
+	int (*resume)(struct xenbus_device *);
+	int (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);
+	struct device_driver driver;
+	int (*read_otherend_details)(struct xenbus_device *);
+	int (*is_ready)(struct xenbus_device *);
+	void (*reclaim_memory)(struct xenbus_device *);
+};
+
+struct xen_hvm_param {
+	domid_t domid;
+	uint32_t index;
+	uint64_t value;
+};
+
+struct xen_bus_type {
+	char *root;
+	unsigned int levels;
+	int (*get_bus_id)(char *, const char *);
+	int (*probe)(struct xen_bus_type *, const char *, const char *);
+	bool (*otherend_will_handle)(struct xenbus_watch *, const char *, const char *);
+	void (*otherend_changed)(struct xenbus_watch *, const char *, const char *);
+	struct bus_type bus;
+};
+
+struct xb_find_info {
+	struct xenbus_device *dev;
+	const char *nodename;
+};
+
+struct xenbus_transaction_holder {
+	struct list_head list;
+	struct xenbus_transaction handle;
+	unsigned int generation_id;
+};
+
+struct read_buffer {
+	struct list_head list;
+	unsigned int cons;
+	unsigned int len;
+	char msg[0];
+};
+
+struct xenbus_file_priv {
+	struct mutex msgbuffer_mutex;
+	struct list_head transactions;
+	struct list_head watches;
+	unsigned int len;
+	union {
+		struct xsd_sockmsg msg;
+		char buffer[4096];
+	} u;
+	struct mutex reply_mutex;
+	struct list_head read_buffers;
+	wait_queue_head_t read_waitq;
+	struct kref kref;
+	struct work_struct wq;
+};
+
+struct watch_adapter {
+	struct list_head list;
+	struct xenbus_watch watch;
+	struct xenbus_file_priv *dev_data;
+	char *token;
+};
+
+struct physdev_manage_pci {
+	uint8_t bus;
+	uint8_t devfn;
+};
+
+struct physdev_manage_pci_ext {
+	uint8_t bus;
+	uint8_t devfn;
+	unsigned int is_extfn;
+	unsigned int is_virtfn;
+	struct {
+		uint8_t bus;
+		uint8_t devfn;
+	} physfn;
+};
+
+struct physdev_pci_mmcfg_reserved {
+	uint64_t address;
+	uint16_t segment;
+	uint8_t start_bus;
+	uint8_t end_bus;
+	uint32_t flags;
+};
+
+struct physdev_pci_device_add {
+	uint16_t seg;
+	uint8_t bus;
+	uint8_t devfn;
+	uint32_t flags;
+	struct {
+		uint8_t bus;
+		uint8_t devfn;
+	} physfn;
+	uint32_t optarr[0];
+};
+
+struct physdev_pci_device {
+	uint16_t seg;
+	uint8_t bus;
+	uint8_t devfn;
+};
+
+struct pci_mmcfg_region {
+	struct list_head list;
+	struct resource res;
+	u64 address;
+	char *virt;
+	u16 segment;
+	u8 start_bus;
+	u8 end_bus;
+	char name[30];
+};
+
+struct xen_device_domain_owner {
+	domid_t domain;
+	struct pci_dev *dev;
+	struct list_head list;
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	__le32 bmSublinkSpeedAttr[1];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	char: 8;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	int: 32;
+} __attribute__((packed));
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+};
+
+struct usb_devmap {
+	long unsigned int devicemap[2];
+};
+
+struct mon_bus;
+
+struct usb_device;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+};
+
+struct wusb_dev;
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	short unsigned int bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int wusb: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	long unsigned int active_duration;
+	long unsigned int connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	struct wusb_dev *wusb_dev;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+};
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct urb;
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct giveback_urb_bh {
+	bool running;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+struct usb_phy_roothub;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	long unsigned int flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int wireless: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool___2 *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	long unsigned int hcd_priv[0];
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	long unsigned int (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+};
+
+struct physdev_dbgp_op {
+	uint8_t op;
+	uint8_t bus;
+	union {
+		struct physdev_pci_device pci;
+	} u;
+};
+
+struct pcpu {
+	struct list_head list;
+	struct device dev;
+	uint32_t cpu_id;
+	uint32_t flags;
+};
+
+typedef uint8_t xen_domain_handle_t[16];
+
+struct xen_compile_info {
+	char compiler[64];
+	char compile_by[16];
+	char compile_domain[32];
+	char compile_date[32];
+};
+
+struct xen_platform_parameters {
+	xen_ulong_t virt_start;
+};
+
+struct xen_build_id {
+	uint32_t len;
+	unsigned char buf[0];
+};
+
+struct hyp_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct hyp_sysfs_attr *, char *);
+	ssize_t (*store)(struct hyp_sysfs_attr *, const char *, size_t);
+	void *hyp_attr_data;
+};
+
+struct pmu_mode {
+	const char *name;
+	uint32_t mode;
+};
+
+struct mcinfo_common {
+	uint16_t type;
+	uint16_t size;
+};
+
+struct mcinfo_global {
+	struct mcinfo_common common;
+	uint16_t mc_domid;
+	uint16_t mc_vcpuid;
+	uint32_t mc_socketid;
+	uint16_t mc_coreid;
+	uint16_t mc_core_threadid;
+	uint32_t mc_apicid;
+	uint32_t mc_flags;
+	uint64_t mc_gstatus;
+};
+
+struct mcinfo_bank {
+	struct mcinfo_common common;
+	uint16_t mc_bank;
+	uint16_t mc_domid;
+	uint64_t mc_status;
+	uint64_t mc_addr;
+	uint64_t mc_misc;
+	uint64_t mc_ctrl2;
+	uint64_t mc_tsc;
+};
+
+struct mcinfo_msr {
+	uint64_t reg;
+	uint64_t value;
+};
+
+struct mc_info {
+	uint32_t mi_nentries;
+	uint32_t flags;
+	uint64_t mi_data[95];
+};
+
+typedef struct mc_info *__guest_handle_mc_info;
+
+struct mcinfo_logical_cpu {
+	uint32_t mc_cpunr;
+	uint32_t mc_chipid;
+	uint16_t mc_coreid;
+	uint16_t mc_threadid;
+	uint32_t mc_apicid;
+	uint32_t mc_clusterid;
+	uint32_t mc_ncores;
+	uint32_t mc_ncores_active;
+	uint32_t mc_nthreads;
+	uint32_t mc_cpuid_level;
+	uint32_t mc_family;
+	uint32_t mc_vendor;
+	uint32_t mc_model;
+	uint32_t mc_step;
+	char mc_vendorid[16];
+	char mc_brandid[64];
+	uint32_t mc_cpu_caps[7];
+	uint32_t mc_cache_size;
+	uint32_t mc_cache_alignment;
+	uint32_t mc_nmsrvals;
+	struct mcinfo_msr mc_msrvalues[8];
+};
+
+typedef struct mcinfo_logical_cpu *__guest_handle_mcinfo_logical_cpu;
+
+struct xen_mc_fetch {
+	uint32_t flags;
+	uint32_t _pad0;
+	uint64_t fetch_id;
+	__guest_handle_mc_info data;
+};
+
+struct xen_mc_notifydomain {
+	uint16_t mc_domid;
+	uint16_t mc_vcpuid;
+	uint32_t flags;
+};
+
+struct xen_mc_physcpuinfo {
+	uint32_t ncpus;
+	uint32_t _pad0;
+	__guest_handle_mcinfo_logical_cpu info;
+};
+
+struct xen_mc_msrinject {
+	uint32_t mcinj_cpunr;
+	uint32_t mcinj_flags;
+	uint32_t mcinj_count;
+	uint32_t _pad0;
+	struct mcinfo_msr mcinj_msr[8];
+};
+
+struct xen_mc_mceinject {
+	unsigned int mceinj_cpunr;
+};
+
+struct xen_mc {
+	uint32_t cmd;
+	uint32_t interface_version;
+	union {
+		struct xen_mc_fetch mc_fetch;
+		struct xen_mc_notifydomain mc_notifydomain;
+		struct xen_mc_physcpuinfo mc_physcpuinfo;
+		struct xen_mc_msrinject mc_msrinject;
+		struct xen_mc_mceinject mc_mceinject;
+	} u;
+};
+
+struct xen_mce {
+	__u64 status;
+	__u64 misc;
+	__u64 addr;
+	__u64 mcgstatus;
+	__u64 ip;
+	__u64 tsc;
+	__u64 time;
+	__u8 cpuvendor;
+	__u8 inject_flags;
+	__u16 pad;
+	__u32 cpuid;
+	__u8 cs;
+	__u8 bank;
+	__u8 cpu;
+	__u8 finished;
+	__u32 extcpu;
+	__u32 socketid;
+	__u32 apicid;
+	__u64 mcgcap;
+	__u64 synd;
+	__u64 ipid;
+	__u64 ppin;
+};
+
+struct xen_mce_log {
+	char signature[12];
+	unsigned int len;
+	unsigned int next;
+	unsigned int flags;
+	unsigned int recordlen;
+	struct xen_mce entry[32];
+};
+
+typedef int *__guest_handle_int;
+
+typedef xen_ulong_t *__guest_handle_xen_ulong_t;
+
+struct xen_add_to_physmap_range {
+	domid_t domid;
+	uint16_t space;
+	uint16_t size;
+	domid_t foreign_domid;
+	__guest_handle_xen_ulong_t idxs;
+	__guest_handle_xen_pfn_t gpfns;
+	__guest_handle_int errs;
+};
+
+struct xen_remove_from_physmap {
+	domid_t domid;
+	xen_pfn_t gpfn;
+};
+
+typedef void (*xen_gfn_fn_t)(long unsigned int, void *);
+
+struct xen_remap_gfn_info;
+
+struct remap_data___2 {
+	xen_pfn_t *fgfn;
+	int nr_fgfn;
+	pgprot_t prot;
+	domid_t domid;
+	struct vm_area_struct *vma;
+	int index;
+	struct page **pages;
+	struct xen_remap_gfn_info *info;
+	int *err_ptr;
+	int mapped;
+	int h_errs[1];
+	xen_ulong_t h_idxs[1];
+	xen_pfn_t h_gpfns[1];
+	int h_iter;
+};
+
+struct map_balloon_pages {
+	xen_pfn_t *pfns;
+	unsigned int idx;
+};
+
+struct remap_pfn {
+	struct mm_struct *mm;
+	struct page **pages;
+	pgprot_t prot;
+	long unsigned int i;
+};
+
+struct pre_voltage_change_data {
+	long unsigned int old_uV;
+	long unsigned int min_uV;
+	long unsigned int max_uV;
+};
+
+struct regulator_bulk_data {
+	const char *supply;
+	struct regulator *consumer;
+	int ret;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct regulator_coupler {
+	struct list_head list;
+	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
+};
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+enum regulator_status {
+	REGULATOR_STATUS_OFF = 0,
+	REGULATOR_STATUS_ON = 1,
+	REGULATOR_STATUS_ERROR = 2,
+	REGULATOR_STATUS_FAST = 3,
+	REGULATOR_STATUS_NORMAL = 4,
+	REGULATOR_STATUS_IDLE = 5,
+	REGULATOR_STATUS_STANDBY = 6,
+	REGULATOR_STATUS_BYPASS = 7,
+	REGULATOR_STATUS_UNDEFINED = 8,
+};
+
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
+};
+
+struct regulator_enable_gpio {
+	struct list_head list;
+	struct gpio_desc *gpiod;
+	u32 enable_count;
+	u32 request_count;
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+struct trace_event_raw_regulator_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int min;
+	int max;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_value {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_regulator_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_value {
+	u32 name;
+};
+
+typedef void (*btf_trace_regulator_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
+
+typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+struct regulator_map {
+	struct list_head list;
+	const char *dev_name;
+	const char *supply;
+	struct regulator_dev *regulator;
+};
+
+struct regulator_supply_alias {
+	struct list_head list;
+	struct device *src_dev;
+	const char *src_supply;
+	struct device *alias_dev;
+	const char *alias_supply;
+};
+
+struct summary_data {
+	struct seq_file *s;
+	struct regulator_dev *parent;
+	int level;
+};
+
+struct summary_lock_data {
+	struct ww_acquire_ctx *ww_ctx;
+	struct regulator_dev **new_contended_rdev;
+	struct regulator_dev **old_contended_rdev;
+};
+
+struct fixed_voltage_config {
+	const char *supply_name;
+	const char *input_supply;
+	int microvolts;
+	unsigned int startup_delay;
+	unsigned int off_on_delay;
+	unsigned int enabled_at_boot: 1;
+	struct regulator_init_data *init_data;
+};
+
+struct fixed_regulator_data {
+	struct fixed_voltage_config cfg;
+	struct regulator_init_data init_data;
+	struct platform_device pdev;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	long unsigned int notifs;
+	long unsigned int errors;
+	int possible_errs;
+};
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long int opaque;
+};
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, long unsigned int *);
+	int (*renable)(struct regulator_irq_data *);
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+enum {
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
+};
+
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
+};
+
+struct reset_control___2;
+
+struct reset_control_bulk_data {
+	const char *id;
+	struct reset_control___2 *rstc;
+};
+
+struct reset_controller_dev;
+
+struct reset_control___2 {
+	struct reset_controller_dev *rcdev;
+	struct list_head list;
+	unsigned int id;
+	struct kref refcnt;
+	bool acquired;
+	bool shared;
+	bool array;
+	atomic_t deassert_count;
+	atomic_t triggered_count;
+};
+
+struct reset_control_ops {
+	int (*reset)(struct reset_controller_dev *, long unsigned int);
+	int (*assert)(struct reset_controller_dev *, long unsigned int);
+	int (*deassert)(struct reset_controller_dev *, long unsigned int);
+	int (*status)(struct reset_controller_dev *, long unsigned int);
+};
+
+struct reset_controller_dev {
+	const struct reset_control_ops *ops;
+	struct module *owner;
+	struct list_head list;
+	struct list_head reset_control_head;
+	struct device *dev;
+	struct device_node *of_node;
+	int of_reset_n_cells;
+	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+	unsigned int nr_resets;
+};
+
+struct reset_control_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct reset_control_array {
+	struct reset_control___2 base;
+	unsigned int num_rstcs;
+	struct reset_control___2 *rstc[0];
+};
+
+struct reset_control_bulk_devres {
+	int num_rstcs;
+	struct reset_control_bulk_data *rstcs;
+};
+
+struct serial_struct32 {
+	compat_int_t type;
+	compat_int_t line;
+	compat_uint_t port;
+	compat_int_t irq;
+	compat_int_t flags;
+	compat_int_t xmit_fifo_size;
+	compat_int_t custom_divisor;
+	compat_int_t baud_base;
+	short unsigned int close_delay;
+	char io_type;
+	char reserved_char;
+	compat_int_t hub6;
+	short unsigned int closing_wait;
+	short unsigned int closing_wait2;
+	compat_uint_t iomem_base;
+	short unsigned int iomem_reg_shift;
+	unsigned int port_high;
+	compat_int_t reserved;
+};
+
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	long unsigned int char_map[4];
+	long unsigned int overrun_time;
+	int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	char read_buf[4096];
+	long unsigned int read_flags[64];
+	unsigned char echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
+};
+
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	short unsigned int c_iflag;
+	short unsigned int c_oflag;
+	short unsigned int c_cflag;
+	short unsigned int c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+};
+
+struct pts_fs_info___2;
+
+struct tty_audit_buf {
+	struct mutex mutex;
+	dev_t dev;
+	unsigned int icanon: 1;
+	size_t valid;
+	unsigned char *data;
+};
+
 struct sysrq_state {
 	struct input_handle handle;
 	struct work_struct reinject_work;
@@ -78796,12 +91851,6 @@
 	struct timer_list keyreset_timer;
 };
 
-struct consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	char *chardata;
-};
-
 struct unipair {
 	short unsigned int unicode;
 	short unsigned int fontpos;
@@ -78871,12 +91920,6 @@
 	int done;
 };
 
-struct compat_consolefontdesc {
-	short unsigned int charcount;
-	short unsigned int charheight;
-	compat_caddr_t chardata;
-};
-
 struct compat_console_font_op {
 	compat_uint_t op;
 	compat_uint_t flags;
@@ -78921,90 +91964,6 @@
 	int end;
 };
 
-enum led_brightness {
-	LED_OFF = 0,
-	LED_ON = 1,
-	LED_HALF = 127,
-	LED_FULL = 255,
-};
-
-struct led_hw_trigger_type {
-	int dummy;
-};
-
-struct led_pattern;
-
-struct led_trigger;
-
-struct led_classdev {
-	const char *name;
-	enum led_brightness brightness;
-	enum led_brightness max_brightness;
-	int flags;
-	long unsigned int work_flags;
-	void (*brightness_set)(struct led_classdev *, enum led_brightness);
-	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
-	enum led_brightness (*brightness_get)(struct led_classdev *);
-	int (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);
-	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
-	int (*pattern_clear)(struct led_classdev *);
-	struct device *dev;
-	const struct attribute_group **groups;
-	struct list_head node;
-	const char *default_trigger;
-	long unsigned int blink_delay_on;
-	long unsigned int blink_delay_off;
-	struct timer_list blink_timer;
-	int blink_brightness;
-	int new_blink_brightness;
-	void (*flash_resume)(struct led_classdev *);
-	struct work_struct set_brightness_work;
-	int delayed_set_value;
-	struct rw_semaphore trigger_lock;
-	struct led_trigger *trigger;
-	struct list_head trig_list;
-	void *trigger_data;
-	bool activated;
-	struct led_hw_trigger_type *trigger_type;
-	struct mutex led_access;
-};
-
-struct led_pattern {
-	u32 delta_t;
-	int brightness;
-};
-
-struct led_trigger {
-	const char *name;
-	int (*activate)(struct led_classdev *);
-	void (*deactivate)(struct led_classdev *);
-	struct led_hw_trigger_type *trigger_type;
-	rwlock_t leddev_list_lock;
-	struct list_head led_cdevs;
-	struct list_head next_trig;
-	const struct attribute_group **groups;
-};
-
-struct keyboard_notifier_param {
-	struct vc_data *vc;
-	int down;
-	int shift;
-	int ledstate;
-	unsigned int value;
-};
-
-struct kbd_struct {
-	unsigned char lockstate;
-	unsigned char slockstate;
-	unsigned char ledmode: 1;
-	unsigned char ledflagstate: 4;
-	char: 3;
-	unsigned char default_ledflagstate: 4;
-	unsigned char kbdmode: 3;
-	char: 1;
-	unsigned char modeflags: 5;
-};
-
 struct kbentry {
 	unsigned char kb_table;
 	unsigned char kb_index;
@@ -79043,6 +92002,26 @@
 	unsigned int keycode;
 };
 
+struct keyboard_notifier_param {
+	struct vc_data *vc;
+	int down;
+	int shift;
+	int ledstate;
+	unsigned int value;
+};
+
+struct kbd_struct {
+	unsigned char lockstate;
+	unsigned char slockstate;
+	unsigned char ledmode: 1;
+	unsigned char ledflagstate: 4;
+	char: 3;
+	unsigned char default_ledflagstate: 4;
+	unsigned char kbdmode: 3;
+	char: 1;
+	unsigned char modeflags: 5;
+};
+
 typedef void k_handler_fn(struct vc_data *, unsigned char, char);
 
 typedef void fn_handler_fn(struct vc_data *);
@@ -79115,6 +92094,9 @@
 	ESnonstd = 10,
 	ESpalette = 11,
 	ESosc = 12,
+	ESapc = 13,
+	ESpm = 14,
+	ESdcs = 15,
 };
 
 struct interval {
@@ -79190,6 +92172,8 @@
 	struct xenbus_device *xbdev;
 	struct xencons_interface *intf;
 	unsigned int evtchn;
+	XENCONS_RING_IDX out_cons;
+	unsigned int out_cons_same;
 	struct hvc_struct *hvc;
 	int irq;
 	int vtermno;
@@ -79223,6 +92207,30 @@
 	hwparam_other = 6,
 };
 
+struct plat_serial8250_port {
+	long unsigned int iobase;
+	void *membase;
+	resource_size_t mapbase;
+	unsigned int irq;
+	long unsigned int irqflags;
+	unsigned int uartclk;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	upf_t flags;
+	unsigned int type;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
 enum {
 	PLAT8250_DEV_LEGACY = 4294967295,
 	PLAT8250_DEV_PLATFORM = 0,
@@ -79263,8 +92271,6 @@
 	unsigned char ier;
 	unsigned char lcr;
 	unsigned char mcr;
-	unsigned char mcr_mask;
-	unsigned char mcr_force;
 	unsigned char cur_iotype;
 	unsigned int rpm_tx_active;
 	unsigned char canary;
@@ -79294,13 +92300,15 @@
 struct uart_8250_dma {
 	int (*tx_dma)(struct uart_8250_port *);
 	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
 	dma_filter_fn fn;
 	void *rx_param;
 	void *tx_param;
 	struct dma_slave_config rxconf;
 	struct dma_slave_config txconf;
-	struct dma_chan *rxchan;
-	struct dma_chan *txchan;
+	struct dma_chan___2 *rxchan;
+	struct dma_chan___2 *txchan;
 	phys_addr_t rx_dma_addr;
 	phys_addr_t tx_dma_addr;
 	dma_addr_t rx_addr;
@@ -79346,6 +92354,34 @@
 	int line;
 	struct uart_8250_dma dma;
 	u8 dlf_size;
+	bool hw_rs485_support;
+};
+
+struct dw8250_platform_data {
+	u8 usr_reg;
+	u32 cpr_val;
+	unsigned int quirks;
+};
+
+struct dw8250_data {
+	struct dw8250_port_data data;
+	const struct dw8250_platform_data *pdata;
+	int msr_mask_on;
+	int msr_mask_off;
+	struct clk *clk;
+	struct clk *pclk;
+	struct notifier_block clk_notifier;
+	struct work_struct clk_work;
+	struct reset_control *rst;
+	unsigned int skip_autocfg: 1;
+	unsigned int uart_16550_compatible: 1;
+};
+
+struct fintek_8250 {
+	u16 pid;
+	u16 base_port;
+	u8 index;
+	u8 key;
 };
 
 struct pciserial_board {
@@ -79388,11 +92424,6 @@
 	const short unsigned int *ids;
 };
 
-struct quatech_feature {
-	u16 devid;
-	bool amcc;
-};
-
 enum pci_board_num_t {
 	pbn_default = 0,
 	pbn_b0_1_115200 = 1,
@@ -79408,7 +92439,7 @@
 	pbn_b0_4_1250000 = 11,
 	pbn_b0_2_1843200 = 12,
 	pbn_b0_4_1843200 = 13,
-	pbn_b0_1_4000000 = 14,
+	pbn_b0_1_15625000 = 14,
 	pbn_b0_bt_1_115200 = 15,
 	pbn_b0_bt_2_115200 = 16,
 	pbn_b0_bt_4_115200 = 17,
@@ -79465,410 +92496,316 @@
 	pbn_panacom2 = 68,
 	pbn_panacom4 = 69,
 	pbn_plx_romulus = 70,
-	pbn_endrun_2_4000000 = 71,
-	pbn_oxsemi = 72,
-	pbn_oxsemi_1_4000000 = 73,
-	pbn_oxsemi_2_4000000 = 74,
-	pbn_oxsemi_4_4000000 = 75,
-	pbn_oxsemi_8_4000000 = 76,
-	pbn_intel_i960 = 77,
-	pbn_sgi_ioc3 = 78,
-	pbn_computone_4 = 79,
-	pbn_computone_6 = 80,
-	pbn_computone_8 = 81,
-	pbn_sbsxrsio = 82,
-	pbn_pasemi_1682M = 83,
-	pbn_ni8430_2 = 84,
-	pbn_ni8430_4 = 85,
-	pbn_ni8430_8 = 86,
-	pbn_ni8430_16 = 87,
-	pbn_ADDIDATA_PCIe_1_3906250 = 88,
-	pbn_ADDIDATA_PCIe_2_3906250 = 89,
-	pbn_ADDIDATA_PCIe_4_3906250 = 90,
-	pbn_ADDIDATA_PCIe_8_3906250 = 91,
-	pbn_ce4100_1_115200 = 92,
-	pbn_omegapci = 93,
-	pbn_NETMOS9900_2s_115200 = 94,
-	pbn_brcm_trumanage = 95,
-	pbn_fintek_4 = 96,
-	pbn_fintek_8 = 97,
-	pbn_fintek_12 = 98,
-	pbn_fintek_F81504A = 99,
-	pbn_fintek_F81508A = 100,
-	pbn_fintek_F81512A = 101,
-	pbn_wch382_2 = 102,
-	pbn_wch384_4 = 103,
-	pbn_wch384_8 = 104,
-	pbn_pericom_PI7C9X7951 = 105,
-	pbn_pericom_PI7C9X7952 = 106,
-	pbn_pericom_PI7C9X7954 = 107,
-	pbn_pericom_PI7C9X7958 = 108,
-	pbn_sunix_pci_1s = 109,
-	pbn_sunix_pci_2s = 110,
-	pbn_sunix_pci_4s = 111,
-	pbn_sunix_pci_8s = 112,
-	pbn_sunix_pci_16s = 113,
-	pbn_moxa8250_2p = 114,
-	pbn_moxa8250_4p = 115,
-	pbn_moxa8250_8p = 116,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
 };
 
-struct exar8250_platform {
-	int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
-	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
-};
-
-struct exar8250;
-
-struct exar8250_board {
-	unsigned int num_ports;
-	unsigned int reg_shift;
-	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
-	void (*exit)(struct pci_dev *);
-};
-
-struct exar8250 {
-	unsigned int nr;
-	struct exar8250_board *board;
+struct pericom8250 {
 	void *virt;
+	unsigned int nr;
 	int line[0];
 };
 
-struct bcm2835aux_data {
-	struct clk *clk;
-	int line;
-	u32 cntl;
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
 };
 
-struct fsl8250_data {
-	int line;
+struct spi_statistics {
+	spinlock_t lock;
+	long unsigned int messages;
+	long unsigned int transfers;
+	long unsigned int errors;
+	long unsigned int timedout;
+	long unsigned int spi_sync;
+	long unsigned int spi_sync_immediate;
+	long unsigned int spi_async;
+	long long unsigned int bytes;
+	long long unsigned int bytes_rx;
+	long long unsigned int bytes_tx;
+	long unsigned int transfer_bytes_histo[17];
+	long unsigned int transfers_split_maxsize;
 };
 
-enum dma_rx_status {
-	DMA_RX_START = 0,
-	DMA_RX_RUNNING = 1,
-	DMA_RX_SHUTDOWN = 2,
+struct spi_delay {
+	u16 value;
+	u8 unit;
 };
 
-struct mtk8250_data {
-	int line;
-	unsigned int rx_pos;
-	unsigned int clk_count;
-	struct clk *uart_clk;
-	struct clk *bus_clk;
-	struct uart_8250_dma *dma;
-	enum dma_rx_status rx_status;
-	int rx_wakeup_irq;
+struct spi_controller;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics statistics;
 };
 
-enum {
-	MTK_UART_FC_NONE = 0,
-	MTK_UART_FC_SW = 1,
-	MTK_UART_FC_HW = 2,
-};
+struct spi_message;
 
-struct tegra_uart {
-	struct clk *clk;
-	struct reset_control *rst;
-	int line;
-};
+struct spi_transfer;
 
-struct of_serial_info {
-	struct clk *clk;
-	struct reset_control *rst;
-	int type;
-	int line;
-};
+struct spi_controller_mem_ops;
 
-enum amba_vendor {
-	AMBA_VENDOR_ARM = 65,
-	AMBA_VENDOR_ST = 128,
-	AMBA_VENDOR_QCOM = 81,
-	AMBA_VENDOR_LSI = 182,
-	AMBA_VENDOR_LINUX = 254,
-};
+struct spi_controller_mem_caps;
 
-struct amba_pl011_data {
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	bool dma_rx_poll_enable;
-	unsigned int dma_rx_poll_rate;
-	unsigned int dma_rx_poll_timeout;
-	void (*init)();
-	void (*exit)();
-};
-
-enum {
-	REG_DR = 0,
-	REG_ST_DMAWM = 1,
-	REG_ST_TIMEOUT = 2,
-	REG_FR = 3,
-	REG_LCRH_RX = 4,
-	REG_LCRH_TX = 5,
-	REG_IBRD = 6,
-	REG_FBRD = 7,
-	REG_CR = 8,
-	REG_IFLS = 9,
-	REG_IMSC = 10,
-	REG_RIS = 11,
-	REG_MIS = 12,
-	REG_ICR = 13,
-	REG_DMACR = 14,
-	REG_ST_XFCR = 15,
-	REG_ST_XON1 = 16,
-	REG_ST_XON2 = 17,
-	REG_ST_XOFF1 = 18,
-	REG_ST_XOFF2 = 19,
-	REG_ST_ITCR = 20,
-	REG_ST_ITIP = 21,
-	REG_ST_ABCR = 22,
-	REG_ST_ABIMSC = 23,
-	REG_ARRAY_SIZE = 24,
-};
-
-struct vendor_data {
-	const u16 *reg_offset;
-	unsigned int ifls;
-	unsigned int fr_busy;
-	unsigned int fr_dsr;
-	unsigned int fr_cts;
-	unsigned int fr_ri;
-	unsigned int inv_fr;
-	bool access_32b;
-	bool oversampling;
-	bool dma_threshold;
-	bool cts_event_workaround;
-	bool always_enabled;
-	bool fixed_options;
-	unsigned int (*get_fifosize)(struct amba_device *);
-};
-
-struct pl011_sgbuf {
-	struct scatterlist sg;
-	char *buf;
-};
-
-struct pl011_dmarx_data {
-	struct dma_chan *chan;
-	struct completion complete;
-	bool use_buf_b;
-	struct pl011_sgbuf sgbuf_a;
-	struct pl011_sgbuf sgbuf_b;
-	dma_cookie_t cookie;
-	bool running;
-	struct timer_list timer;
-	unsigned int last_residue;
-	long unsigned int last_jiffies;
-	bool auto_poll_rate;
-	unsigned int poll_rate;
-	unsigned int poll_timeout;
-};
-
-struct pl011_dmatx_data {
-	struct dma_chan *chan;
-	struct scatterlist sg;
-	char *buf;
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	bool slave;
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
 	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	bool idling;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_prepared;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	int (*slave_abort)(struct spi_controller *);
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics statistics;
+	struct dma_chan___2 *dma_tx;
+	struct dma_chan___2 *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	long unsigned int irq_flags;
 };
 
-struct uart_amba_port {
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	int status;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	bool timestamped;
+	struct list_head transfer_list;
+	u16 error;
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+struct max310x_devtype {
+	char name[9];
+	int nr;
+	u8 mode1;
+	int (*detect)(struct device *);
+	void (*power)(struct uart_port *, int);
+};
+
+struct max310x_one {
 	struct uart_port port;
-	const u16 *reg_offset;
+	struct work_struct tx_work;
+	struct work_struct md_work;
+	struct work_struct rs_work;
+	u8 wr_header;
+	u8 rd_header;
+	u8 rx_buf[128];
+};
+
+struct max310x_port {
+	const struct max310x_devtype *devtype;
+	struct regmap *regmap;
 	struct clk *clk;
-	const struct vendor_data *vendor;
-	unsigned int dmacr;
-	unsigned int im;
-	unsigned int old_status;
+	struct gpio_chip gpio;
+	struct max310x_one p[0];
+};
+
+struct sccnxp_pdata {
+	const u8 reg_shift;
+	const u32 mctrl_cfg[2];
+	const unsigned int poll_time_us;
+};
+
+struct sccnxp_chip {
+	const char *name;
+	unsigned int nr;
+	long unsigned int freq_min;
+	long unsigned int freq_std;
+	long unsigned int freq_max;
+	unsigned int flags;
 	unsigned int fifosize;
-	unsigned int old_cr;
-	unsigned int fixed_baud;
-	char type[12];
-	bool using_tx_dma;
-	bool using_rx_dma;
-	struct pl011_dmarx_data dmarx;
-	struct pl011_dmatx_data dmatx;
-	bool dma_probed;
+	unsigned int trwd;
 };
 
-struct s3c2410_uartcfg {
-	unsigned char hwport;
-	unsigned char unused;
-	short unsigned int flags;
-	upf_t uart_flags;
-	unsigned int clk_sel;
-	unsigned int has_fracval;
-	long unsigned int ucon;
-	long unsigned int ulcon;
-	long unsigned int ufcon;
-};
-
-struct s3c24xx_uart_info {
-	char *name;
-	unsigned int type;
-	unsigned int fifosize;
-	long unsigned int rx_fifomask;
-	long unsigned int rx_fifoshift;
-	long unsigned int rx_fifofull;
-	long unsigned int tx_fifomask;
-	long unsigned int tx_fifoshift;
-	long unsigned int tx_fifofull;
-	unsigned int def_clk_sel;
-	long unsigned int num_clks;
-	long unsigned int clksel_mask;
-	long unsigned int clksel_shift;
-	unsigned int has_divslot: 1;
-};
-
-struct s3c24xx_serial_drv_data {
-	struct s3c24xx_uart_info *info;
-	struct s3c2410_uartcfg *def_cfg;
-	unsigned int fifosize[4];
-};
-
-struct s3c24xx_uart_dma {
-	unsigned int rx_chan_id;
-	unsigned int tx_chan_id;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
-	struct dma_chan *rx_chan;
-	struct dma_chan *tx_chan;
-	dma_addr_t rx_addr;
-	dma_addr_t tx_addr;
-	dma_cookie_t rx_cookie;
-	dma_cookie_t tx_cookie;
-	char *rx_buf;
-	dma_addr_t tx_transfer_addr;
-	size_t rx_size;
-	size_t tx_size;
-	struct dma_async_tx_descriptor *tx_desc;
-	struct dma_async_tx_descriptor *rx_desc;
-	int tx_bytes_requested;
-	int rx_bytes_requested;
-};
-
-struct s3c24xx_uart_port {
-	unsigned char rx_claimed;
-	unsigned char tx_claimed;
-	unsigned char rx_enabled;
-	unsigned char tx_enabled;
-	unsigned int pm_level;
-	long unsigned int baudclk_rate;
-	unsigned int min_dma_size;
-	unsigned int rx_irq;
-	unsigned int tx_irq;
-	unsigned int tx_in_progress;
-	unsigned int tx_mode;
-	unsigned int rx_mode;
-	struct s3c24xx_uart_info *info;
-	struct clk *clk;
-	struct clk *baudclk;
-	struct uart_port port;
-	struct s3c24xx_serial_drv_data *drv_data;
-	struct s3c2410_uartcfg *cfg;
-	struct s3c24xx_uart_dma *dma;
-};
-
-struct samsung_early_console_data {
-	u32 txfull_mask;
-};
-
-enum {
-	UARTDM_1P1 = 1,
-	UARTDM_1P2 = 2,
-	UARTDM_1P3 = 3,
-	UARTDM_1P4 = 4,
-};
-
-struct msm_dma {
-	struct dma_chan *chan;
-	enum dma_data_direction dir;
-	dma_addr_t phys;
-	unsigned char *virt;
-	dma_cookie_t cookie;
-	u32 enable_bit;
-	unsigned int count;
-	struct dma_async_tx_descriptor *desc;
-};
-
-struct msm_port {
-	struct uart_port uart;
-	char name[16];
-	struct clk *clk;
-	struct clk *pclk;
-	unsigned int imr;
-	int is_uartdm;
-	unsigned int old_snap_state;
-	bool break_detected;
-	struct msm_dma tx_dma;
-	struct msm_dma rx_dma;
-};
-
-struct msm_baud_map {
-	u16 divisor;
-	u8 code;
-	u8 rxstale;
-};
-
-struct cdns_uart {
-	struct uart_port *port;
-	struct clk *uartclk;
-	struct clk *pclk;
-	struct uart_driver *cdns_uart_driver;
-	unsigned int baud;
-	struct notifier_block clk_rate_change_nb;
-	u32 quirks;
-	bool cts_override;
-};
-
-struct cdns_platform_data {
-	u32 quirks;
-};
-
-enum {
-	UART_IRQ_SUM = 0,
-	UART_RX_IRQ = 0,
-	UART_TX_IRQ = 1,
-	UART_IRQ_COUNT = 2,
-};
-
-struct uart_regs_layout {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-};
-
-struct uart_flags {
-	unsigned int ctrl_tx_rdy_int;
-	unsigned int ctrl_rx_rdy_int;
-	unsigned int stat_tx_rdy;
-	unsigned int stat_rx_rdy;
-};
-
-struct mvebu_uart_driver_data {
-	bool is_ext;
-	struct uart_regs_layout regs;
-	struct uart_flags flags;
-};
-
-struct mvebu_uart_pm_regs {
-	unsigned int rbr;
-	unsigned int tsh;
-	unsigned int ctrl;
-	unsigned int intr;
-	unsigned int stat;
-	unsigned int brdv;
-	unsigned int osamp;
-};
-
-struct mvebu_uart {
-	struct uart_port *port;
-	struct clk *clk;
-	int irq[2];
-	unsigned char *nb;
-	struct mvebu_uart_driver_data *data;
-	struct mvebu_uart_pm_regs pm_regs;
+struct sccnxp_port {
+	struct uart_driver uart;
+	struct uart_port port[2];
+	bool opened[2];
+	int irq;
+	u8 imr;
+	struct sccnxp_chip *chip;
+	struct console console;
+	spinlock_t lock;
+	bool poll;
+	struct timer_list timer;
+	struct sccnxp_pdata pdata;
+	struct regulator *regulator;
 };
 
 enum mctrl_gpio_idx {
@@ -79890,6 +92827,24 @@
 	bool mctrl_on;
 };
 
+typedef unsigned char unchar;
+
+struct kgdb_nmi_tty_priv {
+	struct tty_port port;
+	struct timer_list timer;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[64];
+	} fifo;
+};
+
 struct serdev_device;
 
 struct serdev_device_ops {
@@ -79966,215 +92921,76 @@
 };
 
 struct timer_rand_state {
-	cycles_t last_time;
+	long unsigned int last_time;
 	long int last_delta;
 	long int last_delta2;
 };
 
-struct trace_event_raw_add_device_randomness {
-	struct trace_entry ent;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
 };
 
-struct trace_event_raw_random__mix_pool_bytes {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bytes;
-	long unsigned int IP;
-	char __data[0];
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
 };
 
-struct trace_event_raw_credit_entropy_bits {
-	struct trace_entry ent;
-	const char *pool_name;
-	int bits;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
+enum {
+	CRNG_RESEED_START_INTERVAL = 250,
+	CRNG_RESEED_INTERVAL = 15000,
 };
 
-struct trace_event_raw_push_to_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int pool_bits;
-	int input_bits;
-	char __data[0];
+struct crng {
+	u8 key[32];
+	long unsigned int generation;
+	local_lock_t lock;
 };
 
-struct trace_event_raw_debit_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int debit_bits;
-	char __data[0];
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
 };
 
-struct trace_event_raw_add_input_randomness {
-	struct trace_entry ent;
-	int input_bits;
-	char __data[0];
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	long unsigned int generation;
+	unsigned int position;
 };
 
-struct trace_event_raw_add_disk_randomness {
-	struct trace_entry ent;
-	dev_t dev;
-	int input_bits;
-	char __data[0];
-};
-
-struct trace_event_raw_xfer_secondary_pool {
-	struct trace_entry ent;
-	const char *pool_name;
-	int xfer_bits;
-	int request_bits;
-	int pool_entropy;
-	int input_entropy;
-	char __data[0];
-};
-
-struct trace_event_raw_random__get_random_bytes {
-	struct trace_entry ent;
-	int nbytes;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random__extract_entropy {
-	struct trace_entry ent;
-	const char *pool_name;
-	int nbytes;
-	int entropy_count;
-	long unsigned int IP;
-	char __data[0];
-};
-
-struct trace_event_raw_random_read {
-	struct trace_entry ent;
-	int got_bits;
-	int need_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_urandom_read {
-	struct trace_entry ent;
-	int got_bits;
-	int pool_left;
-	int input_left;
-	char __data[0];
-};
-
-struct trace_event_raw_prandom_u32 {
-	struct trace_entry ent;
-	unsigned int ret;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_add_device_randomness {};
-
-struct trace_event_data_offsets_random__mix_pool_bytes {};
-
-struct trace_event_data_offsets_credit_entropy_bits {};
-
-struct trace_event_data_offsets_push_to_pool {};
-
-struct trace_event_data_offsets_debit_entropy {};
-
-struct trace_event_data_offsets_add_input_randomness {};
-
-struct trace_event_data_offsets_add_disk_randomness {};
-
-struct trace_event_data_offsets_xfer_secondary_pool {};
-
-struct trace_event_data_offsets_random__get_random_bytes {};
-
-struct trace_event_data_offsets_random__extract_entropy {};
-
-struct trace_event_data_offsets_random_read {};
-
-struct trace_event_data_offsets_urandom_read {};
-
-struct trace_event_data_offsets_prandom_u32 {};
-
-typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);
-
-typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);
-
-typedef void (*btf_trace_debit_entropy)(void *, const char *, int);
-
-typedef void (*btf_trace_add_input_randomness)(void *, int);
-
-typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);
-
-typedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);
-
-typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);
-
-typedef void (*btf_trace_random_read)(void *, int, int, int, int);
-
-typedef void (*btf_trace_urandom_read)(void *, int, int, int);
-
-typedef void (*btf_trace_prandom_u32)(void *, unsigned int);
-
-struct poolinfo {
-	int poolbitshift;
-	int poolwords;
-	int poolbytes;
-	int poolfracbits;
-	int tap1;
-	int tap2;
-	int tap3;
-	int tap4;
-	int tap5;
-};
-
-struct crng_state {
-	__u32 state[16];
-	long unsigned int init_time;
-	spinlock_t lock;
-};
-
-struct entropy_store {
-	const struct poolinfo *poolinfo;
-	__u32 *pool;
-	const char *name;
-	spinlock_t lock;
-	short unsigned int add_ptr;
-	short unsigned int input_rotate;
-	int entropy_count;
-	unsigned int initialized: 1;
-	unsigned int last_data_init: 1;
-	__u8 last_data[10];
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
 };
 
 struct fast_pool {
-	__u32 pool[4];
+	struct work_struct mix;
+	long unsigned int pool[4];
 	long unsigned int last;
-	short unsigned int reg_idx;
-	unsigned char count;
+	unsigned int count;
 };
 
-struct batched_entropy {
-	union {
-		u64 entropy_u64[8];
-		u32 entropy_u32[16];
-	};
-	unsigned int position;
-	spinlock_t batch_lock;
+struct entropy_timer_state {
+	long unsigned int entropy;
+	struct timer_list timer;
+	unsigned int samples;
+	unsigned int samples_per_bit;
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 32,
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
 };
 
 struct ttyprintk_port {
@@ -80182,6 +92998,369 @@
 	spinlock_t spinlock;
 };
 
+struct virtio_console_config {
+	__virtio16 cols;
+	__virtio16 rows;
+	__virtio32 max_nr_ports;
+	__virtio32 emerg_wr;
+};
+
+struct virtio_console_control {
+	__virtio32 id;
+	__virtio16 event;
+	__virtio16 value;
+};
+
+struct ports_driver_data {
+	struct class *class;
+	struct dentry *debugfs_dir;
+	struct list_head portdevs;
+	unsigned int next_vtermno;
+	struct list_head consoles;
+};
+
+struct console___2 {
+	struct list_head list;
+	struct hvc_struct *hvc;
+	struct winsize ws;
+	u32 vtermno;
+};
+
+struct port_buffer {
+	char *buf;
+	size_t size;
+	size_t len;
+	size_t offset;
+	dma_addr_t dma;
+	struct device *dev;
+	struct list_head list;
+	unsigned int sgpages;
+	struct scatterlist sg[0];
+};
+
+struct ports_device {
+	struct list_head list;
+	struct work_struct control_work;
+	struct work_struct config_work;
+	struct list_head ports;
+	spinlock_t ports_lock;
+	spinlock_t c_ivq_lock;
+	spinlock_t c_ovq_lock;
+	u32 max_nr_ports;
+	struct virtio_device *vdev;
+	struct virtqueue *c_ivq;
+	struct virtqueue *c_ovq;
+	struct virtio_console_control cpkt;
+	struct virtqueue **in_vqs;
+	struct virtqueue **out_vqs;
+	int chr_major;
+};
+
+struct port_stats {
+	long unsigned int bytes_sent;
+	long unsigned int bytes_received;
+	long unsigned int bytes_discarded;
+};
+
+struct port {
+	struct list_head list;
+	struct ports_device *portdev;
+	struct port_buffer *inbuf;
+	spinlock_t inbuf_lock;
+	spinlock_t outvq_lock;
+	struct virtqueue *in_vq;
+	struct virtqueue *out_vq;
+	struct dentry *debugfs_file;
+	struct port_stats stats;
+	struct console___2 cons;
+	struct cdev *cdev;
+	struct device *dev;
+	struct kref kref;
+	wait_queue_head_t waitqueue;
+	char *name;
+	struct fasync_struct *async_queue;
+	u32 id;
+	bool outvq_full;
+	bool host_connected;
+	bool guest_connected;
+};
+
+struct sg_list {
+	unsigned int n;
+	unsigned int size;
+	size_t len;
+	struct scatterlist *sg;
+};
+
+struct hpet_info {
+	long unsigned int hi_ireqfreq;
+	long unsigned int hi_flags;
+	short unsigned int hi_hpet;
+	short unsigned int hi_timer;
+};
+
+struct hpet_timer {
+	u64 hpet_config;
+	union {
+		u64 _hpet_hc64;
+		u32 _hpet_hc32;
+		long unsigned int _hpet_compare;
+	} _u1;
+	u64 hpet_fsb[2];
+};
+
+struct hpet {
+	u64 hpet_cap;
+	u64 res0;
+	u64 hpet_config;
+	u64 res1;
+	u64 hpet_isr;
+	u64 res2[25];
+	union {
+		u64 _hpet_mc64;
+		u32 _hpet_mc32;
+		long unsigned int _hpet_mc;
+	} _u0;
+	u64 res3;
+	struct hpet_timer hpet_timers[1];
+};
+
+struct hpets;
+
+struct hpet_dev {
+	struct hpets *hd_hpets;
+	struct hpet *hd_hpet;
+	struct hpet_timer *hd_timer;
+	long unsigned int hd_ireqfreq;
+	long unsigned int hd_irqdata;
+	wait_queue_head_t hd_waitqueue;
+	struct fasync_struct *hd_async_queue;
+	unsigned int hd_flags;
+	unsigned int hd_irq;
+	unsigned int hd_hdwirq;
+	char hd_name[7];
+};
+
+struct hpets {
+	struct hpets *hp_next;
+	struct hpet *hp_hpet;
+	long unsigned int hp_hpet_phys;
+	struct clocksource *hp_clocksource;
+	long long unsigned int hp_tick_freq;
+	long unsigned int hp_delta;
+	unsigned int hp_ntimer;
+	unsigned int hp_which;
+	struct hpet_dev hp_dev[0];
+};
+
+struct compat_hpet_info {
+	compat_ulong_t hi_ireqfreq;
+	compat_ulong_t hi_flags;
+	short unsigned int hi_hpet;
+	short unsigned int hi_timer;
+};
+
+struct agp_bridge_data___2;
+
+struct agp_memory {
+	struct agp_memory *next;
+	struct agp_memory *prev;
+	struct agp_bridge_data___2 *bridge;
+	struct page **pages;
+	size_t page_count;
+	int key;
+	int num_scratch_pages;
+	off_t pg_start;
+	u32 type;
+	u32 physical;
+	bool is_bound;
+	bool is_flushed;
+	struct list_head mapped_list;
+	struct scatterlist *sg_list;
+	int num_sg;
+};
+
+struct agp_bridge_driver;
+
+struct agp_bridge_data___2 {
+	const struct agp_version *version;
+	const struct agp_bridge_driver *driver;
+	const struct vm_operations_struct *vm_ops;
+	void *previous_size;
+	void *current_size;
+	void *dev_private_data;
+	struct pci_dev *dev;
+	u32 *gatt_table;
+	u32 *gatt_table_real;
+	long unsigned int scratch_page;
+	struct page *scratch_page_page;
+	dma_addr_t scratch_page_dma;
+	long unsigned int gart_bus_addr;
+	long unsigned int gatt_bus_addr;
+	u32 mode;
+	enum chipset_type type;
+	long unsigned int *key_list;
+	atomic_t current_memory_agp;
+	atomic_t agp_in_use;
+	int max_memory_agp;
+	int aperture_size_idx;
+	int capndx;
+	int flags;
+	char major_version;
+	char minor_version;
+	struct list_head list;
+	u32 apbase_config;
+	struct list_head mapped_list;
+	spinlock_t mapped_lock;
+};
+
+enum aper_size_type {
+	U8_APER_SIZE = 0,
+	U16_APER_SIZE = 1,
+	U32_APER_SIZE = 2,
+	LVL2_APER_SIZE = 3,
+	FIXED_APER_SIZE = 4,
+};
+
+struct gatt_mask {
+	long unsigned int mask;
+	u32 type;
+};
+
+struct agp_bridge_driver {
+	struct module *owner;
+	const void *aperture_sizes;
+	int num_aperture_sizes;
+	enum aper_size_type size_type;
+	bool cant_use_aperture;
+	bool needs_scratch_page;
+	const struct gatt_mask *masks;
+	int (*fetch_size)();
+	int (*configure)();
+	void (*agp_enable)(struct agp_bridge_data___2 *, u32);
+	void (*cleanup)();
+	void (*tlb_flush)(struct agp_memory *);
+	long unsigned int (*mask_memory)(struct agp_bridge_data___2 *, dma_addr_t, int);
+	void (*cache_flush)();
+	int (*create_gatt_table)(struct agp_bridge_data___2 *);
+	int (*free_gatt_table)(struct agp_bridge_data___2 *);
+	int (*insert_memory)(struct agp_memory *, off_t, int);
+	int (*remove_memory)(struct agp_memory *, off_t, int);
+	struct agp_memory * (*alloc_by_type)(size_t, int);
+	void (*free_by_type)(struct agp_memory *);
+	struct page * (*agp_alloc_page)(struct agp_bridge_data___2 *);
+	int (*agp_alloc_pages)(struct agp_bridge_data___2 *, struct agp_memory *, size_t);
+	void (*agp_destroy_page)(struct page *, int);
+	void (*agp_destroy_pages)(struct agp_memory *);
+	int (*agp_type_to_mask_type)(struct agp_bridge_data___2 *, int);
+};
+
+struct aper_size_info_8 {
+	int size;
+	int num_entries;
+	int page_order;
+	u8 size_value;
+};
+
+struct aper_size_info_16 {
+	int size;
+	int num_entries;
+	int page_order;
+	u16 size_value;
+};
+
+struct aper_size_info_32 {
+	int size;
+	int num_entries;
+	int page_order;
+	u32 size_value;
+};
+
+struct aper_size_info_lvl2 {
+	int size;
+	int num_entries;
+	u32 size_value;
+};
+
+struct aper_size_info_fixed {
+	int size;
+	int num_entries;
+	int page_order;
+};
+
+struct agp_3_5_dev {
+	struct list_head list;
+	u8 capndx;
+	u32 maxbw;
+	struct pci_dev *dev;
+};
+
+struct isoch_data {
+	u32 maxbw;
+	u32 n;
+	u32 y;
+	u32 l;
+	u32 rq;
+	struct agp_3_5_dev *dev;
+};
+
+struct intel_agp_driver_description {
+	unsigned int chip_id;
+	char *name;
+	const struct agp_bridge_driver *driver;
+};
+
+struct intel_gtt_driver {
+	unsigned int gen: 8;
+	unsigned int is_g33: 1;
+	unsigned int is_pineview: 1;
+	unsigned int is_ironlake: 1;
+	unsigned int has_pgtbl_enable: 1;
+	unsigned int dma_mask_size: 8;
+	int (*setup)();
+	void (*cleanup)();
+	void (*write_entry)(dma_addr_t, unsigned int, unsigned int);
+	bool (*check_flags)(unsigned int);
+	void (*chipset_flush)();
+};
+
+struct _intel_private {
+	const struct intel_gtt_driver *driver;
+	struct pci_dev *pcidev;
+	struct pci_dev *bridge_dev;
+	u8 *registers;
+	phys_addr_t gtt_phys_addr;
+	u32 PGETBL_save;
+	u32 *gtt;
+	bool clear_fake_agp;
+	int num_dcache_entries;
+	void *i9xx_flush_page;
+	char *i81x_gtt_table;
+	struct resource ifp_resource;
+	int resource_valid;
+	struct page *scratch_page;
+	phys_addr_t scratch_page_dma;
+	int refcount;
+	unsigned int needs_dmar: 1;
+	phys_addr_t gma_bus_addr;
+	resource_size_t stolen_size;
+	unsigned int gtt_total_entries;
+	unsigned int gtt_mappable_entries;
+};
+
+struct intel_gtt_driver_description {
+	unsigned int gmch_chip_id;
+	char *name;
+	const struct intel_gtt_driver *gtt_driver;
+};
+
+struct agp_device_ids {
+	short unsigned int device_id;
+	enum chipset_type chipset;
+	const char *chipset_name;
+	int (*chipset_setup)(struct pci_dev *);
+};
+
 enum tpm2_startup_types {
 	TPM2_SU_CLEAR = 0,
 	TPM2_SU_STATE = 1,
@@ -80194,35 +93373,9 @@
 	TPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,
 	TPM_CHIP_FLAG_ALWAYS_POWERED = 32,
 	TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,
+	TPM_CHIP_FLAG_FIRMWARE_UPGRADE = 128,
 };
 
-enum tpm2_structures {
-	TPM2_ST_NO_SESSIONS = 32769,
-	TPM2_ST_SESSIONS = 32770,
-};
-
-enum tpm2_return_codes {
-	TPM2_RC_SUCCESS = 0,
-	TPM2_RC_HASH = 131,
-	TPM2_RC_HANDLE = 139,
-	TPM2_RC_INITIALIZE = 256,
-	TPM2_RC_FAILURE = 257,
-	TPM2_RC_DISABLED = 288,
-	TPM2_RC_COMMAND_CODE = 323,
-	TPM2_RC_TESTING = 2314,
-	TPM2_RC_REFERENCE_H0 = 2320,
-	TPM2_RC_RETRY = 2338,
-};
-
-struct tpm_header {
-	__be16 tag;
-	__be32 length;
-	union {
-		__be32 ordinal;
-		__be32 return_code;
-	};
-} __attribute__((packed));
-
 struct file_priv {
 	struct tpm_chip *chip;
 	struct tpm_space *space;
@@ -80253,39 +93406,6 @@
 	TPM2_DURATION_DEFAULT = 120000,
 };
 
-enum tpm2_command_codes {
-	TPM2_CC_FIRST = 287,
-	TPM2_CC_HIERARCHY_CONTROL = 289,
-	TPM2_CC_HIERARCHY_CHANGE_AUTH = 297,
-	TPM2_CC_CREATE_PRIMARY = 305,
-	TPM2_CC_SEQUENCE_COMPLETE = 318,
-	TPM2_CC_SELF_TEST = 323,
-	TPM2_CC_STARTUP = 324,
-	TPM2_CC_SHUTDOWN = 325,
-	TPM2_CC_NV_READ = 334,
-	TPM2_CC_CREATE = 339,
-	TPM2_CC_LOAD = 343,
-	TPM2_CC_SEQUENCE_UPDATE = 348,
-	TPM2_CC_UNSEAL = 350,
-	TPM2_CC_CONTEXT_LOAD = 353,
-	TPM2_CC_CONTEXT_SAVE = 354,
-	TPM2_CC_FLUSH_CONTEXT = 357,
-	TPM2_CC_VERIFY_SIGNATURE = 375,
-	TPM2_CC_GET_CAPABILITY = 378,
-	TPM2_CC_GET_RANDOM = 379,
-	TPM2_CC_PCR_READ = 382,
-	TPM2_CC_PCR_EXTEND = 386,
-	TPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,
-	TPM2_CC_HASH_SEQUENCE_START = 390,
-	TPM2_CC_CREATE_LOADED = 401,
-	TPM2_CC_LAST = 403,
-};
-
-struct tpm_buf {
-	unsigned int flags;
-	u8 *data;
-};
-
 enum tpm_timeout {
 	TPM_TIMEOUT = 5,
 	TPM_TIMEOUT_RETRY = 100,
@@ -80295,10 +93415,6 @@
 	TPM_TIMEOUT_USECS_MAX = 500,
 };
 
-enum tpm_buf_flags {
-	TPM_BUF_OVERFLOW = 1,
-};
-
 struct stclear_flags_t {
 	__be16 tag;
 	u8 deactivated;
@@ -80396,10 +93512,6 @@
 	TPM2_PCR_SELECT_MIN = 3,
 };
 
-enum tpm2_permanent_handles {
-	TPM2_RS_PW = 1073741833,
-};
-
 enum tpm2_capabilities {
 	TPM2_CAP_HANDLES = 1,
 	TPM2_CAP_COMMANDS = 2,
@@ -80416,11 +93528,6 @@
 	TPM2_CC_ATTR_RHANDLE = 28,
 };
 
-struct tpm2_hash {
-	unsigned int crypto_id;
-	unsigned int tpm_id;
-};
-
 struct tpm2_pcr_read_out {
 	__be32 update_cnt;
 	__be32 pcr_selects_cnt;
@@ -80494,6 +93601,12 @@
 	u8 checksum[20];
 };
 
+struct tpm_pcr_attr {
+	int alg_id;
+	int pcr;
+	struct device_attribute attr;
+};
+
 struct tcpa_event {
 	u32 pcr_index;
 	u32 event_type;
@@ -80666,10 +93779,13 @@
 	TIS_MEM_LEN = 20480,
 	TIS_SHORT_TIMEOUT = 750,
 	TIS_LONG_TIMEOUT = 2000,
+	TIS_TIMEOUT_MIN_ATML = 14700,
+	TIS_TIMEOUT_MAX_ATML = 15000,
 };
 
 enum tpm_tis_flags {
 	TPM_TIS_ITPM_WORKAROUND = 1,
+	TPM_TIS_INVALID_STATUS = 2,
 };
 
 struct tpm_tis_phy_ops;
@@ -80679,21 +93795,26 @@
 	int locality;
 	int irq;
 	bool irq_tested;
-	unsigned int flags;
+	long unsigned int flags;
 	void *ilb_base_addr;
 	u16 clkrun_enabled;
 	wait_queue_head_t int_queue;
 	wait_queue_head_t read_queue;
 	const struct tpm_tis_phy_ops *phy_ops;
 	short unsigned int rng_quality;
+	unsigned int timeout_min;
+	unsigned int timeout_max;
+};
+
+enum tpm_tis_io_mode {
+	TPM_TIS_PHYS_8 = 0,
+	TPM_TIS_PHYS_16 = 1,
+	TPM_TIS_PHYS_32 = 2,
 };
 
 struct tpm_tis_phy_ops {
-	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *);
-	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *);
-	int (*read16)(struct tpm_tis_data *, u32, u16 *);
-	int (*read32)(struct tpm_tis_data *, u32, u32 *);
-	int (*write32)(struct tpm_tis_data *, u32, u32);
+	int (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *, enum tpm_tis_io_mode);
+	int (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *, enum tpm_tis_io_mode);
 };
 
 struct tis_vendor_durations_override {
@@ -80797,6 +93918,43 @@
 	u32 smc_func_id;
 };
 
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+};
+
+struct vcpu_data;
+
+struct amd_iommu_pi_data {
+	u32 ga_tag;
+	u32 prev_ga_tag;
+	u64 base;
+	bool is_guest_mode;
+	struct vcpu_data *vcpu_data;
+	void *ir_data;
+};
+
+struct vcpu_data {
+	u64 pi_desc_addr;
+	u32 vector;
+};
+
+struct amd_iommu_device_info {
+	int max_pasids;
+	u32 flags;
+};
+
 enum io_pgtable_fmt {
 	ARM_32_LPAE_S1 = 0,
 	ARM_32_LPAE_S2 = 1,
@@ -80804,13 +93962,14 @@
 	ARM_64_LPAE_S2 = 3,
 	ARM_V7S = 4,
 	ARM_MALI_LPAE = 5,
-	IO_PGTABLE_NUM_FMTS = 6,
+	AMD_IOMMU_V1 = 6,
+	APPLE_DART = 7,
+	IO_PGTABLE_NUM_FMTS = 8,
 };
 
 struct iommu_flush_ops {
 	void (*tlb_flush_all)(void *);
 	void (*tlb_flush_walk)(long unsigned int, size_t, size_t, void *);
-	void (*tlb_flush_leaf)(long unsigned int, size_t, size_t, void *);
 	void (*tlb_add_page)(struct iommu_iotlb_gather *, long unsigned int, size_t, void *);
 };
 
@@ -80857,444 +94016,941 @@
 			u64 transtab;
 			u64 memattr;
 		} arm_mali_lpae_cfg;
+		struct {
+			u64 ttbr[4];
+			u32 n_ttbrs;
+		} apple_dart_cfg;
 	};
 };
 
 struct io_pgtable_ops {
 	int (*map)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct io_pgtable_ops *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
 	size_t (*unmap)(struct io_pgtable_ops *, long unsigned int, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct io_pgtable_ops *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
 	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *, long unsigned int);
 };
 
-enum arm_smmu_s2cr_privcfg {
-	S2CR_PRIVCFG_DEFAULT = 0,
-	S2CR_PRIVCFG_DIPAN = 1,
-	S2CR_PRIVCFG_UNPRIV = 2,
-	S2CR_PRIVCFG_PRIV = 3,
+struct io_pgtable {
+	enum io_pgtable_fmt fmt;
+	void *cookie;
+	struct io_pgtable_cfg cfg;
+	struct io_pgtable_ops ops;
 };
 
-enum arm_smmu_s2cr_type {
-	S2CR_TYPE_TRANS = 0,
-	S2CR_TYPE_BYPASS = 1,
-	S2CR_TYPE_FAULT = 2,
+struct irq_remap_table {
+	raw_spinlock_t lock;
+	unsigned int min_index;
+	u32 *table;
 };
 
-enum arm_smmu_cbar_type {
-	CBAR_TYPE_S2_TRANS = 0,
-	CBAR_TYPE_S1_TRANS_S2_BYPASS = 1,
-	CBAR_TYPE_S1_TRANS_S2_FAULT = 2,
-	CBAR_TYPE_S1_TRANS_S2_TRANS = 3,
+struct amd_iommu_fault {
+	u64 address;
+	u32 pasid;
+	u16 device_id;
+	u16 tag;
+	u16 flags;
 };
 
-enum arm_smmu_arch_version {
-	ARM_SMMU_V1 = 0,
-	ARM_SMMU_V1_64K = 1,
-	ARM_SMMU_V2 = 2,
+struct amd_io_pgtable {
+	struct io_pgtable_cfg pgtbl_cfg;
+	struct io_pgtable iop;
+	int mode;
+	u64 *root;
+	atomic64_t pt_root;
 };
 
-enum arm_smmu_implementation {
-	GENERIC_SMMU = 0,
-	ARM_MMU500 = 1,
-	CAVIUM_SMMUV2 = 2,
-	QCOM_SMMUV2 = 3,
-};
-
-struct arm_smmu_s2cr {
-	struct iommu_group *group;
-	int count;
-	enum arm_smmu_s2cr_type type;
-	enum arm_smmu_s2cr_privcfg privcfg;
-	u8 cbndx;
-};
-
-struct arm_smmu_smr {
-	u16 mask;
-	u16 id;
-	bool valid;
-	bool pinned;
-};
-
-struct arm_smmu_impl;
-
-struct arm_smmu_cb;
-
-struct arm_smmu_device {
-	struct device *dev;
-	void *base;
-	unsigned int numpage;
-	unsigned int pgshift;
-	u32 features;
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
-	const struct arm_smmu_impl *impl;
-	u32 num_context_banks;
-	u32 num_s2_context_banks;
-	long unsigned int context_map[2];
-	struct arm_smmu_cb *cbs;
-	atomic_t irptndx;
-	u32 num_mapping_groups;
-	u16 streamid_mask;
-	u16 smr_mask_mask;
-	struct arm_smmu_smr *smrs;
-	struct arm_smmu_s2cr *s2crs;
-	struct mutex stream_map_mutex;
-	long unsigned int va_size;
-	long unsigned int ipa_size;
-	long unsigned int pa_size;
-	long unsigned int pgsize_bitmap;
-	u32 num_global_irqs;
-	u32 num_context_irqs;
-	unsigned int *irqs;
-	struct clk_bulk_data *clks;
-	int num_clks;
-	spinlock_t global_sync_lock;
-	struct iommu_device iommu;
-};
-
-struct arm_smmu_domain;
-
-struct arm_smmu_impl {
-	u32 (*read_reg)(struct arm_smmu_device *, int, int);
-	void (*write_reg)(struct arm_smmu_device *, int, int, u32);
-	u64 (*read_reg64)(struct arm_smmu_device *, int, int);
-	void (*write_reg64)(struct arm_smmu_device *, int, int, u64);
-	int (*cfg_probe)(struct arm_smmu_device *);
-	int (*reset)(struct arm_smmu_device *);
-	int (*init_context)(struct arm_smmu_domain *, struct io_pgtable_cfg *, struct device *);
-	void (*tlb_sync)(struct arm_smmu_device *, int, int, int);
-	int (*def_domain_type)(struct device *);
-	irqreturn_t (*global_fault)(int, void *);
-	irqreturn_t (*context_fault)(int, void *);
-	int (*alloc_context_bank)(struct arm_smmu_domain *, struct arm_smmu_device *, struct device *, int);
-	void (*write_s2cr)(struct arm_smmu_device *, int);
-};
-
-struct arm_smmu_cfg;
-
-struct arm_smmu_cb {
-	u64 ttbr[2];
-	u32 tcr[2];
-	u32 mair[2];
-	struct arm_smmu_cfg *cfg;
-};
-
-enum arm_smmu_context_fmt {
-	ARM_SMMU_CTX_FMT_NONE = 0,
-	ARM_SMMU_CTX_FMT_AARCH64 = 1,
-	ARM_SMMU_CTX_FMT_AARCH32_L = 2,
-	ARM_SMMU_CTX_FMT_AARCH32_S = 3,
-};
-
-struct arm_smmu_cfg {
-	u8 cbndx;
-	u8 irptndx;
-	union {
-		u16 asid;
-		u16 vmid;
-	};
-	enum arm_smmu_cbar_type cbar;
-	enum arm_smmu_context_fmt fmt;
-};
-
-enum arm_smmu_domain_stage {
-	ARM_SMMU_DOMAIN_S1 = 0,
-	ARM_SMMU_DOMAIN_S2 = 1,
-	ARM_SMMU_DOMAIN_NESTED = 2,
-	ARM_SMMU_DOMAIN_BYPASS = 3,
-};
-
-struct arm_smmu_domain {
-	struct arm_smmu_device *smmu;
-	struct io_pgtable_ops *pgtbl_ops;
-	const struct iommu_flush_ops *flush_ops;
-	struct arm_smmu_cfg cfg;
-	enum arm_smmu_domain_stage stage;
-	bool non_strict;
-	struct mutex init_mutex;
-	spinlock_t cb_lock;
+struct protection_domain {
+	struct list_head dev_list;
 	struct iommu_domain domain;
+	struct amd_io_pgtable iop;
+	spinlock_t lock;
+	u16 id;
+	int glx;
+	u64 *gcr3_tbl;
+	long unsigned int flags;
+	unsigned int dev_cnt;
+	unsigned int dev_iommu[32];
 };
 
-struct arm_smmu_master_cfg {
-	struct arm_smmu_device *smmu;
-	s16 smendx[0];
+struct amd_irte_ops;
+
+struct amd_iommu___2 {
+	struct list_head list;
+	int index;
+	raw_spinlock_t lock;
+	struct pci_dev *dev;
+	struct pci_dev *root_pdev;
+	u64 mmio_phys;
+	u64 mmio_phys_end;
+	u8 *mmio_base;
+	u32 cap;
+	u8 acpi_flags;
+	u64 features;
+	bool is_iommu_v2;
+	u16 devid;
+	u16 cap_ptr;
+	u16 pci_seg;
+	u64 exclusion_start;
+	u64 exclusion_length;
+	u8 *cmd_buf;
+	u32 cmd_buf_head;
+	u32 cmd_buf_tail;
+	u8 *evt_buf;
+	u8 *ppr_log;
+	u8 *ga_log;
+	u8 *ga_log_tail;
+	bool int_enabled;
+	bool need_sync;
+	struct iommu_device iommu;
+	u32 stored_addr_lo;
+	u32 stored_addr_hi;
+	u32 stored_l1[108];
+	u32 stored_l2[131];
+	u8 max_banks;
+	u8 max_counters;
+	struct irq_domain *ir_domain;
+	struct irq_domain *msi_domain;
+	struct amd_irte_ops *irte_ops;
+	u32 flags;
+	volatile u64 *cmd_sem;
+	u64 cmd_sem_val;
 };
 
-struct arm_smmu_match_data {
-	enum arm_smmu_arch_version version;
-	enum arm_smmu_implementation model;
+struct amd_irte_ops {
+	void (*prepare)(void *, u32, bool, u8, u32, int);
+	void (*activate)(void *, u16, u16);
+	void (*deactivate)(void *, u16, u16);
+	void (*set_affinity)(void *, u16, u16, u8, u32);
+	void * (*get)(struct irq_remap_table *, int);
+	void (*set_allocated)(struct irq_remap_table *, int);
+	bool (*is_allocated)(struct irq_remap_table *, int);
+	void (*clear_allocated)(struct irq_remap_table *, int);
 };
 
-struct cavium_smmu {
-	struct arm_smmu_device smmu;
-	u32 id_base;
+struct acpihid_map_entry {
+	struct list_head list;
+	u8 uid[256];
+	u8 hid[9];
+	u16 devid;
+	u16 root_devid;
+	bool cmd_line;
+	struct iommu_group *group;
 };
 
-struct nvidia_smmu {
-	struct arm_smmu_device smmu;
-	void *bases[2];
+struct devid_map {
+	struct list_head list;
+	u8 id;
+	u16 devid;
+	bool cmd_line;
 };
 
-struct qcom_smmu {
-	struct arm_smmu_device smmu;
-	bool bypass_quirk;
-	u8 bypass_cbndx;
+struct iommu_dev_data {
+	spinlock_t lock;
+	struct list_head list;
+	struct llist_node dev_data_list;
+	struct protection_domain *domain;
+	struct pci_dev *pdev;
+	u16 devid;
+	bool iommu_v2;
+	struct {
+		bool enabled;
+		int qdep;
+	} ats;
+	bool pri_tlp;
+	bool use_vapic;
+	bool defer_attach;
+	struct ratelimit_state rs;
 };
 
-enum pri_resp {
-	PRI_RESP_DENY = 0,
-	PRI_RESP_FAIL = 1,
-	PRI_RESP_SUCC = 2,
+struct dev_table_entry {
+	u64 data[4];
 };
 
-struct arm_smmu_cmdq_ent {
-	u8 opcode;
-	bool substream_valid;
+struct unity_map_entry {
+	struct list_head list;
+	u16 devid_start;
+	u16 devid_end;
+	u64 address_start;
+	u64 address_end;
+	int prot;
+};
+
+enum amd_iommu_intr_mode_type {
+	AMD_IOMMU_GUEST_IR_LEGACY = 0,
+	AMD_IOMMU_GUEST_IR_LEGACY_GA = 1,
+	AMD_IOMMU_GUEST_IR_VAPIC = 2,
+};
+
+union irte {
+	u32 val;
+	struct {
+		u32 valid: 1;
+		u32 no_fault: 1;
+		u32 int_type: 3;
+		u32 rq_eoi: 1;
+		u32 dm: 1;
+		u32 rsvd_1: 1;
+		u32 destination: 8;
+		u32 vector: 8;
+		u32 rsvd_2: 8;
+	} fields;
+};
+
+union irte_ga_lo {
+	u64 val;
+	struct {
+		u64 valid: 1;
+		u64 no_fault: 1;
+		u64 int_type: 3;
+		u64 rq_eoi: 1;
+		u64 dm: 1;
+		u64 guest_mode: 1;
+		u64 destination: 24;
+		u64 ga_tag: 32;
+	} fields_remap;
+	struct {
+		u64 valid: 1;
+		u64 no_fault: 1;
+		u64 ga_log_intr: 1;
+		u64 rsvd1: 3;
+		u64 is_run: 1;
+		u64 guest_mode: 1;
+		u64 destination: 24;
+		u64 ga_tag: 32;
+	} fields_vapic;
+};
+
+union irte_ga_hi {
+	u64 val;
+	struct {
+		u64 vector: 8;
+		u64 rsvd_1: 4;
+		u64 ga_root_ptr: 40;
+		u64 rsvd_2: 4;
+		u64 destination: 8;
+	} fields;
+};
+
+struct irte_ga {
+	union irte_ga_lo lo;
+	union irte_ga_hi hi;
+};
+
+struct irq_2_irte {
+	u16 devid;
+	u16 index;
+};
+
+struct amd_ir_data {
+	u32 cached_ga_tag;
+	struct irq_2_irte irq_2_irte;
+	struct msi_msg msi_entry;
+	void *entry;
+	void *ref;
+	struct irq_cfg *cfg;
+	int ga_vector;
+	int ga_root_ptr;
+	int ga_tag;
+};
+
+struct irq_remap_ops {
+	int capability;
+	int (*prepare)();
+	int (*enable)();
+	void (*disable)();
+	int (*reenable)(int);
+	int (*enable_faulting)();
+};
+
+struct iommu_cmd {
+	u32 data[4];
+};
+
+enum irq_remap_cap {
+	IRQ_POSTING_CAP = 0,
+};
+
+struct ivhd_header {
+	u8 type;
+	u8 flags;
+	u16 length;
+	u16 devid;
+	u16 cap_ptr;
+	u64 mmio_phys;
+	u16 pci_seg;
+	u16 info;
+	u32 efr_attr;
+	u64 efr_reg;
+	u64 res;
+};
+
+struct ivhd_entry {
+	u8 type;
+	u16 devid;
+	u8 flags;
 	union {
 		struct {
-			u32 sid;
-			u8 size;
-			u64 addr;
-		} prefetch;
-		struct {
-			u32 sid;
-			u32 ssid;
-			union {
-				bool leaf;
-				u8 span;
-			};
-		} cfgi;
-		struct {
-			u8 num;
-			u8 scale;
-			u16 asid;
-			u16 vmid;
-			bool leaf;
-			u8 ttl;
-			u8 tg;
-			u64 addr;
-		} tlbi;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u64 addr;
-			u8 size;
-			bool global;
-		} atc;
-		struct {
-			u32 sid;
-			u32 ssid;
-			u16 grpid;
-			enum pri_resp resp;
-		} pri;
-		struct {
-			u64 msiaddr;
-		} sync;
-	};
-};
-
-struct arm_smmu_ll_queue {
-	union {
-		u64 val;
-		struct {
-			u32 prod;
-			u32 cons;
+			u32 ext;
+			u32 hidh;
 		};
 		struct {
-			atomic_t prod;
-			atomic_t cons;
-		} atomic;
-		u8 __pad[64];
+			u32 ext;
+			u32 hidh;
+		} ext_hid;
 	};
-	u32 max_n_shift;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	u64 cid;
+	u8 uidf;
+	u8 uidl;
+	u8 uid;
+} __attribute__((packed));
+
+struct ivmd_header {
+	u8 type;
+	u8 flags;
+	u16 length;
+	u16 devid;
+	u16 aux;
+	u64 resv;
+	u64 range_start;
+	u64 range_length;
 };
 
-struct arm_smmu_queue {
-	struct arm_smmu_ll_queue llq;
-	int irq;
-	__le64 *base;
-	dma_addr_t base_dma;
-	u64 q_base;
-	size_t ent_dwords;
-	u32 *prod_reg;
-	u32 *cons_reg;
-	long: 64;
+enum iommu_init_state {
+	IOMMU_START_STATE = 0,
+	IOMMU_IVRS_DETECTED = 1,
+	IOMMU_ACPI_FINISHED = 2,
+	IOMMU_ENABLED = 3,
+	IOMMU_PCI_INIT = 4,
+	IOMMU_INTERRUPTS_EN = 5,
+	IOMMU_INITIALIZED = 6,
+	IOMMU_NOT_FOUND = 7,
+	IOMMU_INIT_ERROR = 8,
+	IOMMU_CMDLINE_DISABLED = 9,
 };
 
-struct arm_smmu_queue_poll {
-	ktime_t timeout;
-	unsigned int delay;
-	unsigned int spin_cnt;
-	bool wfe;
+union intcapxt {
+	u64 capxt;
+	struct {
+		u64 reserved_0: 2;
+		u64 dest_mode_logical: 1;
+		u64 reserved_1: 5;
+		u64 destid_0_23: 24;
+		u64 vector: 8;
+		u64 reserved_2: 16;
+		u64 destid_24_31: 8;
+	};
 };
 
-struct arm_smmu_cmdq {
-	struct arm_smmu_queue q;
-	atomic_long_t *valid_map;
-	atomic_t owner_prod;
-	atomic_t lock;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct ivrs_quirk_entry {
+	u8 id;
+	u16 devid;
 };
 
-struct arm_smmu_cmdq_batch {
-	u64 cmds[128];
-	int num;
+enum {
+	DELL_INSPIRON_7375 = 0,
+	DELL_LATITUDE_5495 = 1,
+	LENOVO_IDEAPAD_330S_15ARR = 2,
 };
 
-struct arm_smmu_evtq {
-	struct arm_smmu_queue q;
-	u32 max_stalls;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+struct io_pgtable_init_fns {
+	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
+	void (*free)(struct io_pgtable *);
 };
 
-struct arm_smmu_priq {
-	struct arm_smmu_queue q;
+struct acpi_table_dmar {
+	struct acpi_table_header header;
+	u8 width;
+	u8 flags;
+	u8 reserved[10];
 };
 
-struct arm_smmu_strtab_l1_desc {
-	u8 span;
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
+struct acpi_dmar_header {
+	u16 type;
+	u16 length;
 };
 
-struct arm_smmu_ctx_desc {
-	u16 asid;
-	u64 ttbr;
-	u64 tcr;
-	u64 mair;
-	refcount_t refs;
-	struct mm_struct *mm;
+enum acpi_dmar_type {
+	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
+	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
+	ACPI_DMAR_TYPE_ROOT_ATS = 2,
+	ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
+	ACPI_DMAR_TYPE_NAMESPACE = 4,
+	ACPI_DMAR_TYPE_SATC = 5,
+	ACPI_DMAR_TYPE_RESERVED = 6,
 };
 
-struct arm_smmu_l1_ctx_desc {
-	__le64 *l2ptr;
-	dma_addr_t l2ptr_dma;
+struct acpi_dmar_device_scope {
+	u8 entry_type;
+	u8 length;
+	u16 reserved;
+	u8 enumeration_id;
+	u8 bus;
 };
 
-struct arm_smmu_ctx_desc_cfg {
-	__le64 *cdtab;
-	dma_addr_t cdtab_dma;
-	struct arm_smmu_l1_ctx_desc *l1_desc;
-	unsigned int num_l1_ents;
+enum acpi_dmar_scope_type {
+	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
+	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
+	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
+	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
+	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
+	ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
+	ACPI_DMAR_SCOPE_TYPE_RESERVED = 6,
 };
 
-struct arm_smmu_s1_cfg {
-	struct arm_smmu_ctx_desc_cfg cdcfg;
-	struct arm_smmu_ctx_desc cd;
-	u8 s1fmt;
-	u8 s1cdmax;
+struct acpi_dmar_pci_path {
+	u8 device;
+	u8 function;
 };
 
-struct arm_smmu_s2_cfg {
-	u16 vmid;
-	u64 vttbr;
-	u64 vtcr;
+struct acpi_dmar_hardware_unit {
+	struct acpi_dmar_header header;
+	u8 flags;
+	u8 reserved;
+	u16 segment;
+	u64 address;
 };
 
-struct arm_smmu_strtab_cfg {
-	__le64 *strtab;
-	dma_addr_t strtab_dma;
-	struct arm_smmu_strtab_l1_desc *l1_desc;
-	unsigned int num_l1_ents;
-	u64 strtab_base;
-	u32 strtab_base_cfg;
+struct acpi_dmar_reserved_memory {
+	struct acpi_dmar_header header;
+	u16 reserved;
+	u16 segment;
+	u64 base_address;
+	u64 end_address;
 };
 
-struct arm_smmu_device___2 {
+struct acpi_dmar_atsr {
+	struct acpi_dmar_header header;
+	u8 flags;
+	u8 reserved;
+	u16 segment;
+};
+
+struct acpi_dmar_rhsa {
+	struct acpi_dmar_header header;
+	u32 reserved;
+	u64 base_address;
+	u32 proximity_domain;
+} __attribute__((packed));
+
+struct acpi_dmar_andd {
+	struct acpi_dmar_header header;
+	u8 reserved[3];
+	u8 device_number;
+	char device_name[1];
+} __attribute__((packed));
+
+struct acpi_dmar_satc {
+	struct acpi_dmar_header header;
+	u8 flags;
+	u8 reserved;
+	u16 segment;
+};
+
+struct dmar_dev_scope {
 	struct device *dev;
-	void *base;
-	void *page1;
-	u32 features;
-	u32 options;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct arm_smmu_cmdq cmdq;
-	struct arm_smmu_evtq evtq;
-	struct arm_smmu_priq priq;
-	int gerr_irq;
-	int combined_irq;
-	long unsigned int ias;
-	long unsigned int oas;
-	long unsigned int pgsize_bitmap;
-	unsigned int asid_bits;
-	unsigned int vmid_bits;
-	long unsigned int vmid_map[1024];
-	unsigned int ssid_bits;
-	unsigned int sid_bits;
-	struct arm_smmu_strtab_cfg strtab_cfg;
+	u8 bus;
+	u8 devfn;
+};
+
+struct intel_iommu;
+
+struct dmar_drhd_unit {
+	struct list_head list;
+	struct acpi_dmar_header *hdr;
+	u64 reg_base_addr;
+	struct dmar_dev_scope *devices;
+	int devices_cnt;
+	u16 segment;
+	u8 ignored: 1;
+	u8 include_all: 1;
+	u8 gfx_dedicated: 1;
+	struct intel_iommu *iommu;
+};
+
+struct iommu_flush {
+	void (*flush_context)(struct intel_iommu *, u16, u16, u8, u64);
+	void (*flush_iotlb)(struct intel_iommu *, u16, u64, unsigned int, u64);
+};
+
+typedef ioasid_t (*ioasid_alloc_fn_t)(ioasid_t, ioasid_t, void *);
+
+typedef void (*ioasid_free_fn_t)(ioasid_t, void *);
+
+struct ioasid_allocator_ops {
+	ioasid_alloc_fn_t alloc;
+	ioasid_free_fn_t free;
+	struct list_head list;
+	void *pdata;
+};
+
+struct iopf_queue;
+
+struct root_entry;
+
+struct page_req_dsc;
+
+struct q_inval;
+
+struct ir_table;
+
+struct intel_iommu {
+	void *reg;
+	u64 reg_phys;
+	u64 reg_size;
+	u64 cap;
+	u64 ecap;
+	u64 vccap;
+	u32 gcmd;
+	raw_spinlock_t register_lock;
+	int seq_id;
+	int agaw;
+	int msagaw;
+	unsigned int irq;
+	unsigned int pr_irq;
+	u16 segment;
+	unsigned char name[13];
+	long unsigned int *domain_ids;
+	spinlock_t lock;
+	struct root_entry *root_entry;
+	struct iommu_flush flush;
+	struct page_req_dsc *prq;
+	unsigned char prq_name[16];
+	struct completion prq_complete;
+	struct ioasid_allocator_ops pasid_allocator;
+	struct iopf_queue *iopf_queue;
+	unsigned char iopfq_name[16];
+	struct q_inval *qi;
+	u32 *iommu_state;
+	struct ir_table *ir_table;
+	struct irq_domain *ir_domain;
+	struct irq_domain *ir_msi_domain;
 	struct iommu_device iommu;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+	int node;
+	u32 flags;
+	struct dmar_drhd_unit *drhd;
+	void *perf_statistic;
 };
 
-struct arm_smmu_domain___2;
-
-struct arm_smmu_master {
-	struct arm_smmu_device___2 *smmu;
-	struct device *dev;
-	struct arm_smmu_domain___2 *domain;
-	struct list_head domain_head;
-	u32 *sids;
-	unsigned int num_sids;
-	bool ats_enabled;
-	bool sva_enabled;
-	struct list_head bonds;
-	unsigned int ssid_bits;
+struct dmar_pci_path {
+	u8 bus;
+	u8 device;
+	u8 function;
 };
 
-struct arm_smmu_domain___2 {
-	struct arm_smmu_device___2 *smmu;
-	struct mutex init_mutex;
-	struct io_pgtable_ops *pgtbl_ops;
-	bool non_strict;
-	atomic_t nr_ats_masters;
-	enum arm_smmu_domain_stage stage;
+struct dmar_pci_notify_info {
+	struct pci_dev *dev;
+	long unsigned int event;
+	int bus;
+	u16 seg;
+	u16 level;
+	struct dmar_pci_path path[0];
+};
+
+struct irte___2 {
 	union {
-		struct arm_smmu_s1_cfg s1_cfg;
-		struct arm_smmu_s2_cfg s2_cfg;
+		struct {
+			__u64 present: 1;
+			__u64 fpd: 1;
+			__u64 __res0: 6;
+			__u64 avail: 4;
+			__u64 __res1: 3;
+			__u64 pst: 1;
+			__u64 vector: 8;
+			__u64 __res2: 40;
+		};
+		struct {
+			__u64 r_present: 1;
+			__u64 r_fpd: 1;
+			__u64 dst_mode: 1;
+			__u64 redir_hint: 1;
+			__u64 trigger_mode: 1;
+			__u64 dlvry_mode: 3;
+			__u64 r_avail: 4;
+			__u64 r_res0: 4;
+			__u64 r_vector: 8;
+			__u64 r_res1: 8;
+			__u64 dest_id: 32;
+		};
+		struct {
+			__u64 p_present: 1;
+			__u64 p_fpd: 1;
+			__u64 p_res0: 6;
+			__u64 p_avail: 4;
+			__u64 p_res1: 2;
+			__u64 p_urgent: 1;
+			__u64 p_pst: 1;
+			__u64 p_vector: 8;
+			__u64 p_res2: 14;
+			__u64 pda_l: 26;
+		};
+		__u64 low;
 	};
-	struct iommu_domain domain;
+	union {
+		struct {
+			__u64 sid: 16;
+			__u64 sq: 2;
+			__u64 svt: 2;
+			__u64 __res3: 44;
+		};
+		struct {
+			__u64 p_sid: 16;
+			__u64 p_sq: 2;
+			__u64 p_svt: 2;
+			__u64 p_res3: 12;
+			__u64 pda_h: 32;
+		};
+		__u64 high;
+	};
+};
+
+enum {
+	QI_FREE = 0,
+	QI_IN_USE = 1,
+	QI_DONE = 2,
+	QI_ABORT = 3,
+};
+
+struct qi_desc {
+	u64 qw0;
+	u64 qw1;
+	u64 qw2;
+	u64 qw3;
+};
+
+struct q_inval {
+	raw_spinlock_t q_lock;
+	void *desc;
+	int *desc_status;
+	int free_head;
+	int free_tail;
+	int free_cnt;
+};
+
+struct ir_table {
+	struct irte___2 *base;
+	long unsigned int *bitmap;
+};
+
+struct root_entry {
+	u64 lo;
+	u64 hi;
+};
+
+enum latency_type {
+	DMAR_LATENCY_INV_IOTLB = 0,
+	DMAR_LATENCY_INV_DEVTLB = 1,
+	DMAR_LATENCY_INV_IEC = 2,
+	DMAR_LATENCY_PRQ = 3,
+	DMAR_LATENCY_NUM = 4,
+};
+
+enum latency_count {
+	COUNTS_10e2 = 0,
+	COUNTS_10e3 = 1,
+	COUNTS_10e4 = 2,
+	COUNTS_10e5 = 3,
+	COUNTS_10e6 = 4,
+	COUNTS_10e7 = 5,
+	COUNTS_10e8_plus = 6,
+	COUNTS_MIN = 7,
+	COUNTS_MAX = 8,
+	COUNTS_SUM = 9,
+	COUNTS_NUM = 10,
+};
+
+typedef int (*dmar_res_handler_t)(struct acpi_dmar_header *, void *);
+
+struct dmar_res_callback {
+	dmar_res_handler_t cb[6];
+	void *arg[6];
+	bool ignore_unhandled;
+	bool print_entry;
+};
+
+enum faulttype {
+	DMA_REMAP = 0,
+	INTR_REMAP = 1,
+	UNKNOWN = 2,
+};
+
+struct iova {
+	struct rb_node node;
+	long unsigned int pfn_hi;
+	long unsigned int pfn_lo;
+};
+
+struct iova_rcache;
+
+struct iova_domain {
+	spinlock_t iova_rbtree_lock;
+	struct rb_root rbroot;
+	struct rb_node *cached_node;
+	struct rb_node *cached32_node;
+	long unsigned int granule;
+	long unsigned int start_pfn;
+	long unsigned int dma_32bit_pfn;
+	long unsigned int max32_alloc_size;
+	struct iova anchor;
+	struct iova_rcache *rcaches;
+	struct hlist_node cpuhp_dead;
+};
+
+enum {
+	SR_DMAR_FECTL_REG = 0,
+	SR_DMAR_FEDATA_REG = 1,
+	SR_DMAR_FEADDR_REG = 2,
+	SR_DMAR_FEUADDR_REG = 3,
+	MAX_SR_DMAR_REGS = 4,
+};
+
+struct context_entry {
+	u64 lo;
+	u64 hi;
+};
+
+struct dma_pte;
+
+struct dmar_domain {
+	int nid;
+	unsigned int iommu_refcnt[128];
+	u16 iommu_did[128];
+	u8 has_iotlb_device: 1;
+	u8 iommu_coherency: 1;
+	u8 force_snooping: 1;
+	u8 set_pte_snp: 1;
 	struct list_head devices;
-	spinlock_t devices_lock;
+	struct iova_domain iovad;
+	struct dma_pte *pgd;
+	int gaw;
+	int agaw;
+	int flags;
+	int iommu_superpage;
+	u64 max_addr;
+	struct iommu_domain domain;
 };
 
-enum arm_smmu_msi_index {
-	EVTQ_MSI_INDEX = 0,
-	GERROR_MSI_INDEX = 1,
-	PRIQ_MSI_INDEX = 2,
-	ARM_SMMU_MAX_MSIS = 3,
+struct dma_pte {
+	u64 val;
 };
 
-struct arm_smmu_option_prop {
-	u32 opt;
-	const char *prop;
+struct pasid_table;
+
+struct device_domain_info {
+	struct list_head link;
+	struct list_head global;
+	struct list_head table;
+	u32 segment;
+	u8 bus;
+	u8 devfn;
+	u16 pfsid;
+	u8 pasid_supported: 3;
+	u8 pasid_enabled: 1;
+	u8 pri_supported: 1;
+	u8 pri_enabled: 1;
+	u8 ats_supported: 1;
+	u8 ats_enabled: 1;
+	u8 ats_qdep;
+	struct device *dev;
+	struct intel_iommu *iommu;
+	struct dmar_domain *domain;
+	struct pasid_table *pasid_table;
+};
+
+struct pasid_table {
+	void *table;
+	int order;
+	u32 max_pasid;
+	struct list_head dev;
+};
+
+enum cap_audit_type {
+	CAP_AUDIT_STATIC_DMAR = 0,
+	CAP_AUDIT_STATIC_IRQR = 1,
+	CAP_AUDIT_HOTPLUG_DMAR = 2,
+	CAP_AUDIT_HOTPLUG_IRQR = 3,
+};
+
+struct dmar_rmrr_unit {
+	struct list_head list;
+	struct acpi_dmar_header *hdr;
+	u64 base_address;
+	u64 end_address;
+	struct dmar_dev_scope *devices;
+	int devices_cnt;
+};
+
+struct dmar_atsr_unit {
+	struct list_head list;
+	struct acpi_dmar_header *hdr;
+	struct dmar_dev_scope *devices;
+	int devices_cnt;
+	u8 include_all: 1;
+};
+
+struct dmar_satc_unit {
+	struct list_head list;
+	struct acpi_dmar_header *hdr;
+	struct dmar_dev_scope *devices;
+	struct intel_iommu *iommu;
+	int devices_cnt;
+	u8 atc_required: 1;
+};
+
+struct domain_context_mapping_data {
+	struct dmar_domain *domain;
+	struct intel_iommu *iommu;
+	struct pasid_table *table;
+};
+
+struct pasid_dir_entry {
+	u64 val;
+};
+
+struct pasid_entry {
+	u64 val[8];
+};
+
+struct pasid_table_opaque {
+	struct pasid_table **pasid_table;
+	int segment;
+	int bus;
+	int devfn;
+};
+
+struct trace_event_raw_qi_submit {
+	struct trace_entry ent;
+	u64 qw0;
+	u64 qw1;
+	u64 qw2;
+	u64 qw3;
+	u32 __data_loc_iommu;
+	char __data[0];
+};
+
+struct trace_event_raw_prq_report {
+	struct trace_entry ent;
+	u64 dw0;
+	u64 dw1;
+	u64 dw2;
+	u64 dw3;
+	long unsigned int seq;
+	u32 __data_loc_iommu;
+	u32 __data_loc_dev;
+	u32 __data_loc_buff;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_qi_submit {
+	u32 iommu;
+};
+
+struct trace_event_data_offsets_prq_report {
+	u32 iommu;
+	u32 dev;
+	u32 buff;
+};
+
+typedef void (*btf_trace_qi_submit)(void *, struct intel_iommu *, u64, u64, u64, u64);
+
+typedef void (*btf_trace_prq_report)(void *, struct intel_iommu *, struct device *, u64, u64, u64, u64, long unsigned int);
+
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
+};
+
+struct page_req_dsc {
+	union {
+		struct {
+			u64 type: 8;
+			u64 pasid_present: 1;
+			u64 priv_data_present: 1;
+			u64 rsvd: 6;
+			u64 rid: 16;
+			u64 pasid: 20;
+			u64 exe_req: 1;
+			u64 pm_req: 1;
+			u64 rsvd2: 10;
+		};
+		u64 qw_0;
+	};
+	union {
+		struct {
+			u64 rd_req: 1;
+			u64 wr_req: 1;
+			u64 lpig: 1;
+			u64 prg_index: 9;
+			u64 addr: 52;
+		};
+		u64 qw_1;
+	};
+	u64 priv_data[2];
+};
+
+struct intel_svm_dev {
+	struct list_head list;
+	struct callback_head rcu;
+	struct device *dev;
+	struct intel_iommu *iommu;
+	struct iommu_sva sva;
+	long unsigned int prq_seq_number;
+	u32 pasid;
+	int users;
+	u16 did;
+	u16 dev_iotlb: 1;
+	u16 sid;
+	u16 qdep;
+};
+
+struct intel_svm {
+	struct mmu_notifier notifier;
+	struct mm_struct *mm;
+	unsigned int flags;
+	u32 pasid;
+	struct list_head devs;
+};
+
+enum irq_mode {
+	IRQ_REMAPPING = 0,
+	IRQ_POSTING = 1,
+};
+
+struct ioapic_scope {
+	struct intel_iommu *iommu;
+	unsigned int id;
+	unsigned int bus;
+	unsigned int devfn;
+};
+
+struct hpet_scope {
+	struct intel_iommu *iommu;
+	u8 id;
+	unsigned int bus;
+	unsigned int devfn;
+};
+
+struct irq_2_iommu {
+	struct intel_iommu *iommu;
+	u16 irte_index;
+	u16 sub_handle;
+	u8 irte_mask;
+	enum irq_mode mode;
+};
+
+struct intel_ir_data {
+	struct irq_2_iommu irq_2_iommu;
+	struct irte___2 irte_entry;
+	union {
+		struct msi_msg msi_entry;
+	};
+};
+
+struct set_msi_sid_data {
+	struct pci_dev *pdev;
+	u16 alias;
+	int count;
+	int busmatch_count;
 };
 
 struct iommu_group {
@@ -81302,28 +94958,16 @@
 	struct kobject *devices_kobj;
 	struct list_head devices;
 	struct mutex mutex;
-	struct blocking_notifier_head notifier;
 	void *iommu_data;
 	void (*iommu_data_release)(void *);
 	char *name;
 	int id;
 	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
 	struct iommu_domain *domain;
 	struct list_head entry;
-};
-
-typedef unsigned int ioasid_t;
-
-enum iommu_fault_type {
-	IOMMU_FAULT_DMA_UNRECOV = 1,
-	IOMMU_FAULT_PAGE_REQ = 2,
-};
-
-enum iommu_inv_granularity {
-	IOMMU_INV_GRANU_DOMAIN = 0,
-	IOMMU_INV_GRANU_PASID = 1,
-	IOMMU_INV_GRANU_ADDR = 2,
-	IOMMU_INV_GRANU_NR = 3,
+	unsigned int owner_cnt;
+	void *owner;
 };
 
 struct fsl_mc_obj_desc {
@@ -81357,7 +95001,7 @@
 	struct fsl_mc_device_irq **irqs;
 	struct fsl_mc_resource *resource;
 	struct device_link *consumer_link;
-	char *driver_override;
+	const char *driver_override;
 };
 
 enum fsl_mc_pool_type {
@@ -81379,7 +95023,7 @@
 };
 
 struct fsl_mc_device_irq {
-	struct msi_desc *msi_desc;
+	unsigned int virq;
 	struct fsl_mc_device *mc_dev;
 	u8 dev_irq_index;
 	struct fsl_mc_resource resource;
@@ -81489,10 +95133,68 @@
 
 typedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);
 
-struct iova {
-	struct rb_node node;
-	long unsigned int pfn_hi;
-	long unsigned int pfn_lo;
+enum iommu_dma_cookie_type {
+	IOMMU_DMA_IOVA_COOKIE = 0,
+	IOMMU_DMA_MSI_COOKIE = 1,
+};
+
+struct iova_fq;
+
+struct iommu_dma_cookie {
+	enum iommu_dma_cookie_type type;
+	union {
+		struct {
+			struct iova_domain iovad;
+			struct iova_fq *fq;
+			atomic64_t fq_flush_start_cnt;
+			atomic64_t fq_flush_finish_cnt;
+			struct timer_list fq_timer;
+			atomic_t fq_timer_on;
+		};
+		dma_addr_t msi_iova;
+	};
+	struct list_head msi_page_list;
+	struct iommu_domain *fq_domain;
+};
+
+struct iommu_dma_msi_page {
+	struct list_head list;
+	dma_addr_t iova;
+	phys_addr_t phys;
+};
+
+struct iova_fq_entry {
+	long unsigned int iova_pfn;
+	long unsigned int pages;
+	struct list_head freelist;
+	u64 counter;
+};
+
+struct iova_fq {
+	struct iova_fq_entry entries[256];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t lock;
+};
+
+struct ioasid_set {
+	int dummy;
+};
+
+struct ioasid_data {
+	ioasid_t id;
+	struct ioasid_set *set;
+	void *private;
+	struct callback_head rcu;
+};
+
+struct ioasid_allocator_data {
+	struct ioasid_allocator_ops *ops;
+	struct list_head list;
+	struct list_head slist;
+	long unsigned int flags;
+	struct xarray xa;
+	struct callback_head rcu;
 };
 
 struct iova_magazine;
@@ -81506,91 +95208,6 @@
 	struct iova_cpu_rcache *cpu_rcaches;
 };
 
-struct iova_domain;
-
-typedef void (*iova_flush_cb)(struct iova_domain *);
-
-typedef void (*iova_entry_dtor)(long unsigned int);
-
-struct iova_fq;
-
-struct iova_domain {
-	spinlock_t iova_rbtree_lock;
-	struct rb_root rbroot;
-	struct rb_node *cached_node;
-	struct rb_node *cached32_node;
-	long unsigned int granule;
-	long unsigned int start_pfn;
-	long unsigned int dma_32bit_pfn;
-	long unsigned int max32_alloc_size;
-	struct iova_fq *fq;
-	atomic64_t fq_flush_start_cnt;
-	atomic64_t fq_flush_finish_cnt;
-	struct iova anchor;
-	struct iova_rcache rcaches[6];
-	iova_flush_cb flush_cb;
-	iova_entry_dtor entry_dtor;
-	struct timer_list fq_timer;
-	atomic_t fq_timer_on;
-};
-
-struct iova_fq_entry {
-	long unsigned int iova_pfn;
-	long unsigned int pages;
-	long unsigned int data;
-	u64 counter;
-};
-
-struct iova_fq {
-	struct iova_fq_entry entries[256];
-	unsigned int head;
-	unsigned int tail;
-	spinlock_t lock;
-};
-
-struct iommu_dma_msi_page {
-	struct list_head list;
-	dma_addr_t iova;
-	phys_addr_t phys;
-};
-
-enum iommu_dma_cookie_type {
-	IOMMU_DMA_IOVA_COOKIE = 0,
-	IOMMU_DMA_MSI_COOKIE = 1,
-};
-
-struct iommu_dma_cookie {
-	enum iommu_dma_cookie_type type;
-	union {
-		struct iova_domain iovad;
-		dma_addr_t msi_iova;
-	};
-	struct list_head msi_page_list;
-	struct iommu_domain *fq_domain;
-};
-
-struct io_pgtable {
-	enum io_pgtable_fmt fmt;
-	void *cookie;
-	struct io_pgtable_cfg cfg;
-	struct io_pgtable_ops ops;
-};
-
-struct io_pgtable_init_fns {
-	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
-	void (*free)(struct io_pgtable *);
-};
-
-struct arm_lpae_io_pgtable {
-	struct io_pgtable iop;
-	int pgd_bits;
-	int start_level;
-	int bits_per_level;
-	void *pgd;
-};
-
-typedef u64 arm_lpae_iopte;
-
 struct iova_magazine {
 	long unsigned int size;
 	long unsigned int pfns[128];
@@ -81602,182 +95219,245 @@
 	struct iova_magazine *prev;
 };
 
-struct of_pci_iommu_alias_info {
-	struct device *dev;
-	struct device_node *np;
+struct hyperv_root_ir_data {
+	u8 ioapic_id;
+	bool is_level;
+	struct hv_interrupt_entry entry;
+} __attribute__((packed));
+
+struct virtio_iommu_range_64 {
+	__le64 start;
+	__le64 end;
 };
 
-struct rk_iommu_domain {
-	struct list_head iommus;
-	u32 *dt;
-	dma_addr_t dt_dma;
-	spinlock_t iommus_lock;
-	spinlock_t dt_lock;
-	struct iommu_domain domain;
+struct virtio_iommu_range_32 {
+	__le32 start;
+	__le32 end;
 };
 
-struct rk_iommu {
-	struct device *dev;
-	void **bases;
-	int num_mmu;
-	int num_irq;
-	struct clk_bulk_data *clocks;
-	int num_clocks;
-	bool reset_disabled;
+struct virtio_iommu_config {
+	__le64 page_size_mask;
+	struct virtio_iommu_range_64 input_range;
+	struct virtio_iommu_range_32 domain_range;
+	__le32 probe_size;
+	__u8 bypass;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_head {
+	__u8 type;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_tail {
+	__u8 status;
+	__u8 reserved[3];
+};
+
+struct virtio_iommu_req_attach {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le32 endpoint;
+	__le32 flags;
+	__u8 reserved[4];
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_req_map {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le64 virt_start;
+	__le64 virt_end;
+	__le64 phys_start;
+	__le32 flags;
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_req_unmap {
+	struct virtio_iommu_req_head head;
+	__le32 domain;
+	__le64 virt_start;
+	__le64 virt_end;
+	__u8 reserved[4];
+	struct virtio_iommu_req_tail tail;
+};
+
+struct virtio_iommu_probe_property {
+	__le16 type;
+	__le16 length;
+};
+
+struct virtio_iommu_probe_resv_mem {
+	struct virtio_iommu_probe_property head;
+	__u8 subtype;
+	__u8 reserved[3];
+	__le64 start;
+	__le64 end;
+};
+
+struct virtio_iommu_req_probe {
+	struct virtio_iommu_req_head head;
+	__le32 endpoint;
+	__u8 reserved[64];
+	__u8 properties[0];
+};
+
+struct virtio_iommu_fault {
+	__u8 reason;
+	__u8 reserved[3];
+	__le32 flags;
+	__le32 endpoint;
+	__u8 reserved2[4];
+	__le64 address;
+};
+
+struct viommu_dev {
 	struct iommu_device iommu;
-	struct list_head node;
-	struct iommu_domain *domain;
-	struct iommu_group *group;
+	struct device *dev;
+	struct virtio_device *vdev;
+	struct ida domain_ids;
+	struct virtqueue *vqs[2];
+	spinlock_t request_lock;
+	struct list_head requests;
+	void *evts;
+	struct iommu_domain_geometry geometry;
+	u64 pgsize_bitmap;
+	u32 first_domain;
+	u32 last_domain;
+	u32 map_flags;
+	u32 probe_size;
 };
 
-struct rk_iommudata {
-	struct device_link *link;
-	struct rk_iommu *iommu;
+struct viommu_mapping {
+	phys_addr_t paddr;
+	struct interval_tree_node iova;
+	u32 flags;
 };
 
-struct tegra_smmu_enable {
-	unsigned int reg;
-	unsigned int bit;
-};
-
-struct tegra_mc_timing {
-	long unsigned int rate;
-	u32 *emem_data;
-};
-
-struct tegra_mc_la {
-	unsigned int reg;
-	unsigned int shift;
-	unsigned int mask;
-	unsigned int def;
-};
-
-struct tegra_mc_client {
+struct viommu_domain {
+	struct iommu_domain domain;
+	struct viommu_dev *viommu;
+	struct mutex mutex;
 	unsigned int id;
-	const char *name;
-	unsigned int swgroup;
-	unsigned int fifo_size;
-	struct tegra_smmu_enable smmu;
-	struct tegra_mc_la la;
+	u32 map_flags;
+	spinlock_t mappings_lock;
+	struct rb_root_cached mappings;
+	long unsigned int nr_endpoints;
+	bool bypass;
 };
 
-struct tegra_smmu_swgroup {
-	const char *name;
-	unsigned int swgroup;
-	unsigned int reg;
-};
-
-struct tegra_smmu_group_soc {
-	const char *name;
-	const unsigned int *swgroups;
-	unsigned int num_swgroups;
-};
-
-struct tegra_smmu_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const struct tegra_smmu_swgroup *swgroups;
-	unsigned int num_swgroups;
-	const struct tegra_smmu_group_soc *groups;
-	unsigned int num_groups;
-	bool supports_round_robin_arbitration;
-	bool supports_request_limit;
-	unsigned int num_tlb_lines;
-	unsigned int num_asids;
-};
-
-struct tegra_mc_reset {
-	const char *name;
-	long unsigned int id;
-	unsigned int control;
-	unsigned int status;
-	unsigned int reset;
-	unsigned int bit;
-};
-
-struct tegra_mc;
-
-struct tegra_mc_reset_ops {
-	int (*hotreset_assert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*hotreset_deassert)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*block_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	bool (*dma_idling)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*unblock_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
-	int (*reset_status)(struct tegra_mc *, const struct tegra_mc_reset *);
-};
-
-struct gart_device;
-
-struct tegra_smmu;
-
-struct tegra_mc_soc;
-
-struct tegra_mc {
+struct viommu_endpoint {
 	struct device *dev;
-	struct tegra_smmu *smmu;
-	struct gart_device *gart;
-	void *regs;
-	struct clk *clk;
-	int irq;
-	const struct tegra_mc_soc *soc;
-	long unsigned int tick;
-	struct tegra_mc_timing *timings;
-	unsigned int num_timings;
-	struct reset_controller_dev reset;
-	spinlock_t lock;
+	struct viommu_dev *viommu;
+	struct viommu_domain *vdomain;
+	struct list_head resv_regions;
 };
 
-struct tegra_mc_soc {
-	const struct tegra_mc_client *clients;
-	unsigned int num_clients;
-	const long unsigned int *emem_regs;
-	unsigned int num_emem_regs;
-	unsigned int num_address_bits;
-	unsigned int atom_size;
-	u8 client_id_mask;
-	const struct tegra_smmu_soc *smmu;
-	u32 intmask;
-	const struct tegra_mc_reset_ops *reset_ops;
-	const struct tegra_mc_reset *resets;
-	unsigned int num_resets;
+struct viommu_request {
+	struct list_head list;
+	void *writeback;
+	unsigned int write_offset;
+	unsigned int len;
+	char buf[0];
 };
 
-struct tegra_smmu {
-	void *regs;
+struct viommu_event {
+	union {
+		u32 head;
+		struct virtio_iommu_fault fault;
+	};
+};
+
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
+struct iopf_queue___2;
+
+struct iopf_device_param {
 	struct device *dev;
-	struct tegra_mc *mc;
-	const struct tegra_smmu_soc *soc;
-	struct list_head groups;
-	long unsigned int pfn_mask;
-	long unsigned int tlb_mask;
-	long unsigned int *asids;
+	struct iopf_queue___2 *queue;
+	struct list_head queue_list;
+	struct list_head partial;
+};
+
+struct iopf_queue___2 {
+	struct workqueue_struct *wq;
+	struct list_head devices;
 	struct mutex lock;
-	struct list_head list;
-	struct dentry *debugfs;
-	struct iommu_device iommu;
 };
 
-struct tegra_smmu_group {
+struct iopf_fault {
+	struct iommu_fault fault;
 	struct list_head list;
-	struct tegra_smmu *smmu;
-	const struct tegra_smmu_group_soc *soc;
-	struct iommu_group *group;
-	unsigned int swgroup;
 };
 
-struct tegra_smmu_as {
-	struct iommu_domain domain;
-	struct tegra_smmu *smmu;
-	unsigned int use_count;
-	spinlock_t lock;
-	u32 *count;
-	struct page **pts;
-	struct page *pd;
-	dma_addr_t pd_dma;
-	unsigned int id;
-	u32 attr;
+struct iopf_group {
+	struct iopf_fault last_fault;
+	struct list_head faults;
+	struct work_struct work;
+	struct device *dev;
 };
 
+struct drm_dmi_panel_orientation_data {
+	int width;
+	int height;
+	const char * const *bios_dates;
+	int orientation;
+};
+
+struct drm_dsc_picture_parameter_set {
+	u8 dsc_version;
+	u8 pps_identifier;
+	u8 pps_reserved;
+	u8 pps_3;
+	u8 pps_4;
+	u8 bits_per_pixel_low;
+	__be16 pic_height;
+	__be16 pic_width;
+	__be16 slice_height;
+	__be16 slice_width;
+	__be16 chunk_size;
+	u8 initial_xmit_delay_high;
+	u8 initial_xmit_delay_low;
+	__be16 initial_dec_delay;
+	u8 pps20_reserved;
+	u8 initial_scale_value;
+	__be16 scale_increment_interval;
+	u8 scale_decrement_interval_high;
+	u8 scale_decrement_interval_low;
+	u8 pps26_reserved;
+	u8 first_line_bpg_offset;
+	__be16 nfl_bpg_offset;
+	__be16 slice_bpg_offset;
+	__be16 initial_offset;
+	__be16 final_offset;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	__be16 rc_model_size;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit0;
+	u8 rc_quant_incr_limit1;
+	u8 rc_tgt_offset;
+	u8 rc_buf_thresh[14];
+	__be16 rc_range_parameters[15];
+	u8 native_422_420;
+	u8 second_line_bpg_offset;
+	__be16 nsl_bpg_offset;
+	__be16 second_line_offset_adj;
+	u32 pps_long_94_reserved;
+	u32 pps_long_98_reserved;
+	u32 pps_long_102_reserved;
+	u32 pps_long_106_reserved;
+	u32 pps_long_110_reserved;
+	u32 pps_long_114_reserved;
+	u32 pps_long_118_reserved;
+	u32 pps_long_122_reserved;
+	__be16 pps_short_126_reserved;
+} __attribute__((packed));
+
 struct mipi_dsi_msg {
 	u8 channel;
 	u8 type;
@@ -81848,56 +95528,6 @@
 	void (*shutdown)(struct mipi_dsi_device *);
 };
 
-struct drm_dsc_picture_parameter_set {
-	u8 dsc_version;
-	u8 pps_identifier;
-	u8 pps_reserved;
-	u8 pps_3;
-	u8 pps_4;
-	u8 bits_per_pixel_low;
-	__be16 pic_height;
-	__be16 pic_width;
-	__be16 slice_height;
-	__be16 slice_width;
-	__be16 chunk_size;
-	u8 initial_xmit_delay_high;
-	u8 initial_xmit_delay_low;
-	__be16 initial_dec_delay;
-	u8 pps20_reserved;
-	u8 initial_scale_value;
-	__be16 scale_increment_interval;
-	u8 scale_decrement_interval_high;
-	u8 scale_decrement_interval_low;
-	u8 pps26_reserved;
-	u8 first_line_bpg_offset;
-	__be16 nfl_bpg_offset;
-	__be16 slice_bpg_offset;
-	__be16 initial_offset;
-	__be16 final_offset;
-	u8 flatness_min_qp;
-	u8 flatness_max_qp;
-	__be16 rc_model_size;
-	u8 rc_edge_factor;
-	u8 rc_quant_incr_limit0;
-	u8 rc_quant_incr_limit1;
-	u8 rc_tgt_offset;
-	u8 rc_buf_thresh[14];
-	__be16 rc_range_parameters[15];
-	u8 native_422_420;
-	u8 second_line_bpg_offset;
-	__be16 nsl_bpg_offset;
-	__be16 second_line_offset_adj;
-	u32 pps_long_94_reserved;
-	u32 pps_long_98_reserved;
-	u32 pps_long_102_reserved;
-	u32 pps_long_106_reserved;
-	u32 pps_long_110_reserved;
-	u32 pps_long_114_reserved;
-	u32 pps_long_118_reserved;
-	u32 pps_long_122_reserved;
-	__be16 pps_short_126_reserved;
-} __attribute__((packed));
-
 enum {
 	MIPI_DSI_V_SYNC_START = 1,
 	MIPI_DSI_V_SYNC_END = 17,
@@ -82001,40 +95631,62 @@
 	MIPI_DCS_READ_PPS_CONTINUE = 169,
 };
 
-struct drm_dmi_panel_orientation_data {
-	int width;
-	int height;
-	const char * const *bios_dates;
-	int orientation;
+enum vga_switcheroo_handler_flags_t {
+	VGA_SWITCHEROO_CAN_SWITCH_DDC = 1,
+	VGA_SWITCHEROO_NEEDS_EDP_CONFIG = 2,
 };
 
-struct vga_device {
-	struct list_head list;
+enum vga_switcheroo_state {
+	VGA_SWITCHEROO_OFF = 0,
+	VGA_SWITCHEROO_ON = 1,
+	VGA_SWITCHEROO_NOT_FOUND = 2,
+};
+
+enum vga_switcheroo_client_id {
+	VGA_SWITCHEROO_UNKNOWN_ID = 4096,
+	VGA_SWITCHEROO_IGD = 0,
+	VGA_SWITCHEROO_DIS = 1,
+	VGA_SWITCHEROO_MAX_CLIENTS = 2,
+};
+
+struct vga_switcheroo_handler {
+	int (*init)();
+	int (*switchto)(enum vga_switcheroo_client_id);
+	int (*switch_ddc)(enum vga_switcheroo_client_id);
+	int (*power_state)(enum vga_switcheroo_client_id, enum vga_switcheroo_state);
+	enum vga_switcheroo_client_id (*get_client_id)(struct pci_dev *);
+};
+
+struct vga_switcheroo_client_ops {
+	void (*set_gpu_state)(struct pci_dev *, enum vga_switcheroo_state);
+	void (*reprobe)(struct pci_dev *);
+	bool (*can_switch)(struct pci_dev *);
+	void (*gpu_bound)(struct pci_dev *, enum vga_switcheroo_client_id);
+};
+
+struct vga_switcheroo_client {
 	struct pci_dev *pdev;
-	unsigned int decodes;
-	unsigned int owns;
-	unsigned int locks;
-	unsigned int io_lock_cnt;
-	unsigned int mem_lock_cnt;
-	unsigned int io_norm_cnt;
-	unsigned int mem_norm_cnt;
-	bool bridge_has_one_vga;
-	void *cookie;
-	void (*irq_set_state)(void *, bool);
-	unsigned int (*set_vga_decode)(void *, bool);
-};
-
-struct vga_arb_user_card {
-	struct pci_dev *pdev;
-	unsigned int mem_cnt;
-	unsigned int io_cnt;
-};
-
-struct vga_arb_private {
+	struct fb_info *fb_info;
+	enum vga_switcheroo_state pwr_state;
+	const struct vga_switcheroo_client_ops *ops;
+	enum vga_switcheroo_client_id id;
+	bool active;
+	bool driver_power_control;
 	struct list_head list;
-	struct pci_dev *target;
-	struct vga_arb_user_card cards[16];
-	spinlock_t lock;
+	struct pci_dev *vga_dev;
+};
+
+struct vgasr_priv {
+	bool active;
+	bool delayed_switch_active;
+	enum vga_switcheroo_client_id delayed_client_id;
+	struct dentry *debugfs_root;
+	int registered_clients;
+	struct list_head clients;
+	const struct vga_switcheroo_handler *handler;
+	enum vga_switcheroo_handler_flags_t handler_flags;
+	struct mutex mux_hw_lock;
+	int old_ddc_owner;
 };
 
 struct cb_id {
@@ -82170,419 +95822,6 @@
 	__u32 count;
 };
 
-struct nvm_ioctl_info_tgt {
-	__u32 version[3];
-	__u32 reserved;
-	char tgtname[48];
-};
-
-struct nvm_ioctl_info {
-	__u32 version[3];
-	__u16 tgtsize;
-	__u16 reserved16;
-	__u32 reserved[12];
-	struct nvm_ioctl_info_tgt tgts[63];
-};
-
-struct nvm_ioctl_device_info {
-	char devname[32];
-	char bmname[48];
-	__u32 bmversion[3];
-	__u32 flags;
-	__u32 reserved[8];
-};
-
-struct nvm_ioctl_get_devices {
-	__u32 nr_devices;
-	__u32 reserved[31];
-	struct nvm_ioctl_device_info info[31];
-};
-
-struct nvm_ioctl_create_simple {
-	__u32 lun_begin;
-	__u32 lun_end;
-};
-
-struct nvm_ioctl_create_extended {
-	__u16 lun_begin;
-	__u16 lun_end;
-	__u16 op;
-	__u16 rsv;
-};
-
-enum {
-	NVM_CONFIG_TYPE_SIMPLE = 0,
-	NVM_CONFIG_TYPE_EXTENDED = 1,
-};
-
-struct nvm_ioctl_create_conf {
-	__u32 type;
-	union {
-		struct nvm_ioctl_create_simple s;
-		struct nvm_ioctl_create_extended e;
-	};
-};
-
-enum {
-	NVM_TARGET_FACTORY = 1,
-};
-
-struct nvm_ioctl_create {
-	char dev[32];
-	char tgttype[48];
-	char tgtname[32];
-	__u32 flags;
-	struct nvm_ioctl_create_conf conf;
-};
-
-struct nvm_ioctl_remove {
-	char tgtname[32];
-	__u32 flags;
-};
-
-struct nvm_ioctl_dev_init {
-	char dev[32];
-	char mmtype[8];
-	__u32 flags;
-};
-
-enum {
-	NVM_FACTORY_ERASE_ONLY_USER = 1,
-	NVM_FACTORY_RESET_HOST_BLKS = 2,
-	NVM_FACTORY_RESET_GRWN_BBLKS = 4,
-	NVM_FACTORY_NR_BITS = 8,
-};
-
-struct nvm_ioctl_dev_factory {
-	char dev[32];
-	__u32 flags;
-};
-
-enum {
-	NVM_INFO_CMD = 32,
-	NVM_GET_DEVICES_CMD = 33,
-	NVM_DEV_CREATE_CMD = 34,
-	NVM_DEV_REMOVE_CMD = 35,
-	NVM_DEV_INIT_CMD = 36,
-	NVM_DEV_FACTORY_CMD = 37,
-	NVM_DEV_VIO_ADMIN_CMD = 65,
-	NVM_DEV_VIO_CMD = 66,
-	NVM_DEV_VIO_USER_CMD = 67,
-};
-
-enum {
-	NVM_OCSSD_SPEC_12 = 12,
-	NVM_OCSSD_SPEC_20 = 20,
-};
-
-struct ppa_addr {
-	union {
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 reserved: 32;
-		} a;
-		struct {
-			u64 ch: 8;
-			u64 lun: 8;
-			u64 blk: 16;
-			u64 pg: 16;
-			u64 pl: 4;
-			u64 sec: 4;
-			u64 reserved: 8;
-		} g;
-		struct {
-			u64 grp: 8;
-			u64 pu: 8;
-			u64 chk: 16;
-			u64 sec: 24;
-			u64 reserved: 8;
-		} m;
-		struct {
-			u64 line: 63;
-			u64 is_cached: 1;
-		} c;
-		u64 ppa;
-	};
-};
-
-struct nvm_dev;
-
-typedef int nvm_id_fn(struct nvm_dev *);
-
-struct nvm_addrf {
-	u8 ch_len;
-	u8 lun_len;
-	u8 chk_len;
-	u8 sec_len;
-	u8 rsv_len[2];
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 chk_offset;
-	u8 sec_offset;
-	u8 rsv_off[2];
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 chk_mask;
-	u64 sec_mask;
-	u64 rsv_mask[2];
-};
-
-struct nvm_geo {
-	u8 major_ver_id;
-	u8 minor_ver_id;
-	u8 version;
-	int num_ch;
-	int num_lun;
-	int all_luns;
-	int all_chunks;
-	int op;
-	sector_t total_secs;
-	u32 num_chk;
-	u32 clba;
-	u16 csecs;
-	u16 sos;
-	bool ext;
-	u32 mdts;
-	u32 ws_min;
-	u32 ws_opt;
-	u32 mw_cunits;
-	u32 maxoc;
-	u32 maxocpu;
-	u32 mccap;
-	u32 trdt;
-	u32 trdm;
-	u32 tprt;
-	u32 tprm;
-	u32 tbet;
-	u32 tbem;
-	struct nvm_addrf addrf;
-	u8 vmnt;
-	u32 cap;
-	u32 dom;
-	u8 mtype;
-	u8 fmtype;
-	u16 cpar;
-	u32 mpos;
-	u8 num_pln;
-	u8 pln_mode;
-	u16 num_pg;
-	u16 fpg_sz;
-};
-
-struct nvm_dev_ops;
-
-struct nvm_dev {
-	struct nvm_dev_ops *ops;
-	struct list_head devices;
-	struct nvm_geo geo;
-	long unsigned int *lun_map;
-	void *dma_pool;
-	struct request_queue *q;
-	char name[32];
-	void *private_data;
-	struct kref ref;
-	void *rmap;
-	struct mutex mlock;
-	spinlock_t lock;
-	struct list_head area_list;
-	struct list_head targets;
-};
-
-typedef int nvm_op_bb_tbl_fn(struct nvm_dev *, struct ppa_addr, u8 *);
-
-typedef int nvm_op_set_bb_fn(struct nvm_dev *, struct ppa_addr *, int, int);
-
-struct nvm_chk_meta;
-
-typedef int nvm_get_chk_meta_fn(struct nvm_dev *, sector_t, int, struct nvm_chk_meta *);
-
-struct nvm_chk_meta {
-	u8 state;
-	u8 type;
-	u8 wi;
-	u8 rsvd[5];
-	u64 slba;
-	u64 cnlb;
-	u64 wp;
-};
-
-struct nvm_rq;
-
-typedef int nvm_submit_io_fn(struct nvm_dev *, struct nvm_rq *, void *);
-
-typedef void nvm_end_io_fn(struct nvm_rq *);
-
-struct nvm_tgt_dev;
-
-struct nvm_rq {
-	struct nvm_tgt_dev *dev;
-	struct bio *bio;
-	union {
-		struct ppa_addr ppa_addr;
-		dma_addr_t dma_ppa_list;
-	};
-	struct ppa_addr *ppa_list;
-	void *meta_list;
-	dma_addr_t dma_meta_list;
-	nvm_end_io_fn *end_io;
-	uint8_t opcode;
-	uint16_t nr_ppas;
-	uint16_t flags;
-	u64 ppa_status;
-	int error;
-	int is_seq;
-	void *private;
-};
-
-typedef void *nvm_create_dma_pool_fn(struct nvm_dev *, char *, int);
-
-typedef void nvm_destroy_dma_pool_fn(void *);
-
-typedef void *nvm_dev_dma_alloc_fn(struct nvm_dev *, void *, gfp_t, dma_addr_t *);
-
-typedef void nvm_dev_dma_free_fn(void *, void *, dma_addr_t);
-
-struct nvm_dev_ops {
-	nvm_id_fn *identity;
-	nvm_op_bb_tbl_fn *get_bb_tbl;
-	nvm_op_set_bb_fn *set_bb_tbl;
-	nvm_get_chk_meta_fn *get_chk_meta;
-	nvm_submit_io_fn *submit_io;
-	nvm_create_dma_pool_fn *create_dma_pool;
-	nvm_destroy_dma_pool_fn *destroy_dma_pool;
-	nvm_dev_dma_alloc_fn *dev_dma_alloc;
-	nvm_dev_dma_free_fn *dev_dma_free;
-};
-
-enum {
-	NVM_RSP_L2P = 1,
-	NVM_RSP_ECC = 2,
-	NVM_ADDRMODE_LINEAR = 0,
-	NVM_ADDRMODE_CHANNEL = 1,
-	NVM_PLANE_SINGLE = 1,
-	NVM_PLANE_DOUBLE = 2,
-	NVM_PLANE_QUAD = 4,
-	NVM_RSP_SUCCESS = 0,
-	NVM_RSP_NOT_CHANGEABLE = 1,
-	NVM_RSP_ERR_FAILWRITE = 16639,
-	NVM_RSP_ERR_EMPTYPAGE = 17151,
-	NVM_RSP_ERR_FAILECC = 17025,
-	NVM_RSP_ERR_FAILCRC = 16388,
-	NVM_RSP_WARN_HIGHECC = 18176,
-	NVM_OP_PWRITE = 145,
-	NVM_OP_PREAD = 146,
-	NVM_OP_ERASE = 144,
-	NVM_IO_SNGL_ACCESS = 0,
-	NVM_IO_DUAL_ACCESS = 1,
-	NVM_IO_QUAD_ACCESS = 2,
-	NVM_IO_SUSPEND = 128,
-	NVM_IO_SLC_MODE = 256,
-	NVM_IO_SCRAMBLE_ENABLE = 512,
-	NVM_BLK_T_FREE = 0,
-	NVM_BLK_T_BAD = 1,
-	NVM_BLK_T_GRWN_BAD = 2,
-	NVM_BLK_T_DEV = 4,
-	NVM_BLK_T_HOST = 8,
-	NVM_ID_CAP_SLC = 1,
-	NVM_ID_CAP_CMD_SUSPEND = 2,
-	NVM_ID_CAP_SCRAMBLE = 4,
-	NVM_ID_CAP_ENCRYPT = 8,
-	NVM_ID_FMTYPE_SLC = 0,
-	NVM_ID_FMTYPE_MLC = 1,
-	NVM_ID_DCAP_BBLKMGMT = 1,
-	NVM_UD_DCAP_ECC = 2,
-};
-
-struct nvm_addrf_12 {
-	u8 ch_len;
-	u8 lun_len;
-	u8 blk_len;
-	u8 pg_len;
-	u8 pln_len;
-	u8 sec_len;
-	u8 ch_offset;
-	u8 lun_offset;
-	u8 blk_offset;
-	u8 pg_offset;
-	u8 pln_offset;
-	u8 sec_offset;
-	u64 ch_mask;
-	u64 lun_mask;
-	u64 blk_mask;
-	u64 pg_mask;
-	u64 pln_mask;
-	u64 sec_mask;
-};
-
-enum {
-	NVM_CHK_ST_FREE = 1,
-	NVM_CHK_ST_CLOSED = 2,
-	NVM_CHK_ST_OPEN = 4,
-	NVM_CHK_ST_OFFLINE = 8,
-	NVM_CHK_TP_W_SEQ = 1,
-	NVM_CHK_TP_W_RAN = 2,
-	NVM_CHK_TP_SZ_SPEC = 16,
-};
-
-struct nvm_tgt_type;
-
-struct nvm_target {
-	struct list_head list;
-	struct nvm_tgt_dev *dev;
-	struct nvm_tgt_type *type;
-	struct gendisk *disk;
-};
-
-struct nvm_tgt_dev {
-	struct nvm_geo geo;
-	struct ppa_addr *luns;
-	struct request_queue *q;
-	struct nvm_dev *parent;
-	void *map;
-};
-
-typedef sector_t nvm_tgt_capacity_fn(void *);
-
-typedef void *nvm_tgt_init_fn(struct nvm_tgt_dev *, struct gendisk *, int);
-
-typedef void nvm_tgt_exit_fn(void *, bool);
-
-typedef int nvm_tgt_sysfs_init_fn(struct gendisk *);
-
-typedef void nvm_tgt_sysfs_exit_fn(struct gendisk *);
-
-struct nvm_tgt_type {
-	const char *name;
-	unsigned int version[3];
-	int flags;
-	const struct block_device_operations *bops;
-	nvm_tgt_capacity_fn *capacity;
-	nvm_tgt_init_fn *init;
-	nvm_tgt_exit_fn *exit;
-	nvm_tgt_sysfs_init_fn *sysfs_init;
-	nvm_tgt_sysfs_exit_fn *sysfs_exit;
-	struct list_head list;
-	struct module *owner;
-};
-
-enum {
-	NVM_TGT_F_DEV_L2P = 0,
-	NVM_TGT_F_HOST_L2P = 1,
-};
-
-struct nvm_ch_map {
-	int ch_off;
-	int num_lun;
-	int *lun_offs;
-};
-
-struct nvm_dev_map {
-	struct nvm_ch_map *chnls;
-	int num_ch;
-};
-
 struct component_ops {
 	int (*bind)(struct device *, struct device *, void *);
 	void (*unbind)(struct device *, struct device *, void *);
@@ -82604,11 +95843,11 @@
 	bool duplicate;
 };
 
-struct master;
+struct aggregate_device;
 
 struct component {
 	struct list_head node;
-	struct master *master;
+	struct aggregate_device *adev;
 	bool bound;
 	const struct component_ops *ops;
 	int subcomponent;
@@ -82621,13 +95860,19 @@
 	struct component_match_array *compare;
 };
 
-struct master {
+struct aggregate_device {
 	struct list_head node;
 	bool bound;
 	const struct component_master_ops *ops;
-	struct device *dev;
+	struct device *parent;
 	struct component_match *match;
-	struct dentry *dentry;
+};
+
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
 };
 
 struct wake_irq {
@@ -82700,14 +95945,6 @@
 	const struct device_type *type;
 };
 
-struct subsys_interface {
-	const char *name;
-	struct bus_type *subsys;
-	struct list_head node;
-	int (*add_dev)(struct device *, struct subsys_interface *);
-	void (*remove_dev)(struct device *, struct subsys_interface *);
-};
-
 struct device_attach_data {
 	struct device *dev;
 	bool check_async;
@@ -82724,6 +95961,11 @@
 	struct kobject *kobj;
 };
 
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
 struct platform_object {
 	struct platform_device pdev;
 	char name[0];
@@ -82751,28 +95993,19 @@
 	struct mutex *lock;
 };
 
+typedef void (*dr_release_t)(struct device *, void *);
+
 typedef int (*dr_match_t)(struct device *, void *, void *);
 
 struct devres_node {
 	struct list_head entry;
 	dr_release_t release;
+	const char *name;
+	size_t size;
 };
 
 struct devres___2 {
 	struct devres_node node;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
 	u8 data[0];
 };
 
@@ -82829,39 +96062,6 @@
 
 typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);
 
-struct mii_bus;
-
-struct mdio_device {
-	struct device dev;
-	struct mii_bus *bus;
-	char modalias[32];
-	int (*bus_match)(struct device *, struct device_driver *);
-	void (*device_free)(struct mdio_device *);
-	void (*device_remove)(struct mdio_device *);
-	int addr;
-	int flags;
-	struct gpio_desc *reset_gpio;
-	struct reset_control *reset_ctrl;
-	unsigned int reset_assert_delay;
-	unsigned int reset_deassert_delay;
-};
-
-struct phy_c45_device_ids {
-	u32 devices_in_package;
-	u32 mmds_present;
-	u32 device_ids[32];
-};
-
-enum phy_state {
-	PHY_DOWN = 0,
-	PHY_READY = 1,
-	PHY_HALTED = 2,
-	PHY_UP = 3,
-	PHY_RUNNING = 4,
-	PHY_NOLINK = 5,
-	PHY_CABLETEST = 6,
-};
-
 typedef enum {
 	PHY_INTERFACE_MODE_NA = 0,
 	PHY_INTERFACE_MODE_INTERNAL = 1,
@@ -82871,236 +96071,70 @@
 	PHY_INTERFACE_MODE_TBI = 5,
 	PHY_INTERFACE_MODE_REVMII = 6,
 	PHY_INTERFACE_MODE_RMII = 7,
-	PHY_INTERFACE_MODE_RGMII = 8,
-	PHY_INTERFACE_MODE_RGMII_ID = 9,
-	PHY_INTERFACE_MODE_RGMII_RXID = 10,
-	PHY_INTERFACE_MODE_RGMII_TXID = 11,
-	PHY_INTERFACE_MODE_RTBI = 12,
-	PHY_INTERFACE_MODE_SMII = 13,
-	PHY_INTERFACE_MODE_XGMII = 14,
-	PHY_INTERFACE_MODE_XLGMII = 15,
-	PHY_INTERFACE_MODE_MOCA = 16,
-	PHY_INTERFACE_MODE_QSGMII = 17,
-	PHY_INTERFACE_MODE_TRGMII = 18,
-	PHY_INTERFACE_MODE_1000BASEX = 19,
-	PHY_INTERFACE_MODE_2500BASEX = 20,
-	PHY_INTERFACE_MODE_RXAUI = 21,
-	PHY_INTERFACE_MODE_XAUI = 22,
-	PHY_INTERFACE_MODE_10GBASER = 23,
-	PHY_INTERFACE_MODE_USXGMII = 24,
-	PHY_INTERFACE_MODE_10GKR = 25,
-	PHY_INTERFACE_MODE_MAX = 26,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_QSGMII = 18,
+	PHY_INTERFACE_MODE_TRGMII = 19,
+	PHY_INTERFACE_MODE_100BASEX = 20,
+	PHY_INTERFACE_MODE_1000BASEX = 21,
+	PHY_INTERFACE_MODE_2500BASEX = 22,
+	PHY_INTERFACE_MODE_5GBASER = 23,
+	PHY_INTERFACE_MODE_RXAUI = 24,
+	PHY_INTERFACE_MODE_XAUI = 25,
+	PHY_INTERFACE_MODE_10GBASER = 26,
+	PHY_INTERFACE_MODE_25GBASER = 27,
+	PHY_INTERFACE_MODE_USXGMII = 28,
+	PHY_INTERFACE_MODE_10GKR = 29,
+	PHY_INTERFACE_MODE_MAX = 30,
 } phy_interface_t;
 
-struct phylink;
-
-struct phy_driver;
-
-struct phy_package_shared;
-
-struct mii_timestamper;
-
-struct phy_device {
-	struct mdio_device mdio;
-	struct phy_driver *drv;
-	u32 phy_id;
-	struct phy_c45_device_ids c45_ids;
-	unsigned int is_c45: 1;
-	unsigned int is_internal: 1;
-	unsigned int is_pseudo_fixed_link: 1;
-	unsigned int is_gigabit_capable: 1;
-	unsigned int has_fixups: 1;
-	unsigned int suspended: 1;
-	unsigned int suspended_by_mdio_bus: 1;
-	unsigned int sysfs_links: 1;
-	unsigned int loopback_enabled: 1;
-	unsigned int downshifted_rate: 1;
-	unsigned int autoneg: 1;
-	unsigned int link: 1;
-	unsigned int autoneg_complete: 1;
-	unsigned int interrupts: 1;
-	enum phy_state state;
-	u32 dev_flags;
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	int asym_pause;
-	u8 master_slave_get;
-	u8 master_slave_set;
-	u8 master_slave_state;
-	long unsigned int supported[2];
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	long unsigned int adv_old[2];
-	u32 eee_broken_modes;
-	int irq;
-	void *priv;
-	struct phy_package_shared *shared;
-	struct sk_buff *skb;
-	void *ehdr;
-	struct nlattr *nest;
-	struct delayed_work state_queue;
-	struct mutex lock;
-	bool sfp_bus_attached;
-	struct sfp_bus *sfp_bus;
-	struct phylink *phylink;
-	struct net_device *attached_dev;
-	struct mii_timestamper *mii_ts;
-	u8 mdix;
-	u8 mdix_ctrl;
-	void (*phy_link_change)(struct phy_device *, bool);
-	void (*adjust_link)(struct net_device *);
-	const struct macsec_ops *macsec_ops;
-};
-
-struct phy_tdr_config {
-	u32 first;
-	u32 last;
-	u32 step;
-	s8 pair;
-};
-
-struct mdio_bus_stats {
-	u64_stats_t transfers;
-	u64_stats_t errors;
-	u64_stats_t writes;
-	u64_stats_t reads;
-	struct u64_stats_sync syncp;
-};
-
-struct mii_bus {
-	struct module *owner;
-	const char *name;
-	char id[61];
-	void *priv;
-	int (*read)(struct mii_bus *, int, int);
-	int (*write)(struct mii_bus *, int, int, u16);
-	int (*reset)(struct mii_bus *);
-	struct mdio_bus_stats stats[32];
-	struct mutex mdio_lock;
-	struct device *parent;
-	enum {
-		MDIOBUS_ALLOCATED = 1,
-		MDIOBUS_REGISTERED = 2,
-		MDIOBUS_UNREGISTERED = 3,
-		MDIOBUS_RELEASED = 4,
-	} state;
-	struct device dev;
-	struct mdio_device *mdio_map[32];
-	u32 phy_mask;
-	u32 phy_ignore_ta_mask;
-	int irq[32];
-	int reset_delay_us;
-	int reset_post_delay_us;
-	struct gpio_desc *reset_gpiod;
-	enum {
-		MDIOBUS_NO_CAP = 0,
-		MDIOBUS_C22 = 1,
-		MDIOBUS_C45 = 2,
-		MDIOBUS_C22_C45 = 3,
-	} probe_capabilities;
-	struct mutex shared_lock;
-	struct phy_package_shared *shared[32];
-};
-
-struct mdio_driver_common {
-	struct device_driver driver;
-	int flags;
-};
-
-struct mii_timestamper {
-	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
-	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
-	void (*link_state)(struct mii_timestamper *, struct phy_device *);
-	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
-	struct device *device;
-};
-
-struct phy_package_shared {
-	int addr;
-	refcount_t refcnt;
-	long unsigned int flags;
-	size_t priv_size;
-	void *priv;
-};
-
-struct phy_driver {
-	struct mdio_driver_common mdiodrv;
-	u32 phy_id;
-	char *name;
-	u32 phy_id_mask;
-	const long unsigned int * const features;
-	u32 flags;
-	const void *driver_data;
-	int (*soft_reset)(struct phy_device *);
-	int (*config_init)(struct phy_device *);
-	int (*probe)(struct phy_device *);
-	int (*get_features)(struct phy_device *);
-	int (*suspend)(struct phy_device *);
-	int (*resume)(struct phy_device *);
-	int (*config_aneg)(struct phy_device *);
-	int (*aneg_done)(struct phy_device *);
-	int (*read_status)(struct phy_device *);
-	int (*ack_interrupt)(struct phy_device *);
-	int (*config_intr)(struct phy_device *);
-	int (*did_interrupt)(struct phy_device *);
-	irqreturn_t (*handle_interrupt)(struct phy_device *);
-	void (*remove)(struct phy_device *);
-	int (*match_phy_device)(struct phy_device *);
-	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
-	void (*link_change_notify)(struct phy_device *);
-	int (*read_mmd)(struct phy_device *, int, u16);
-	int (*write_mmd)(struct phy_device *, int, u16, u16);
-	int (*read_page)(struct phy_device *);
-	int (*write_page)(struct phy_device *, int);
-	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
-	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
-	int (*cable_test_start)(struct phy_device *);
-	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
-	int (*cable_test_get_status)(struct phy_device *, bool *);
-	int (*get_sset_count)(struct phy_device *);
-	void (*get_strings)(struct phy_device *, u8 *);
-	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
-	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
-	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
-	int (*set_loopback)(struct phy_device *, bool);
-	int (*get_sqi)(struct phy_device *);
-	int (*get_sqi_max)(struct phy_device *);
-};
-
-struct cache_type_info {
-	const char *size_prop;
-	const char *line_size_props[2];
-	const char *nr_sets_prop;
-};
-
-struct software_node;
-
 struct software_node_ref_args {
 	const struct software_node *node;
 	unsigned int nargs;
 	u64 args[8];
 };
 
-struct software_node {
-	const char *name;
-	const struct software_node *parent;
-	const struct property_entry *properties;
-};
-
 struct swnode {
-	int id;
 	struct kobject kobj;
 	struct fwnode_handle fwnode;
 	const struct software_node *node;
+	int id;
 	struct ida child_ids;
 	struct list_head entry;
 	struct list_head children;
 	struct swnode *parent;
 	unsigned int allocated: 1;
+	unsigned int managed: 1;
+};
+
+struct auxiliary_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct auxiliary_device {
+	struct device dev;
+	const char *name;
+	u32 id;
+};
+
+struct auxiliary_driver {
+	int (*probe)(struct auxiliary_device *, const struct auxiliary_device_id *);
+	void (*remove)(struct auxiliary_device *);
+	void (*shutdown)(struct auxiliary_device *);
+	int (*suspend)(struct auxiliary_device *, pm_message_t);
+	int (*resume)(struct auxiliary_device *);
+	const char *name;
+	struct device_driver driver;
+	const struct auxiliary_device_id *id_table;
 };
 
 struct req {
@@ -83116,16 +96150,9 @@
 
 typedef int (*pm_callback_t)(struct device *);
 
-struct of_phandle_iterator {
-	const char *cells_name;
-	int cell_count;
-	const struct device_node *parent;
-	const __be32 *list_end;
-	const __be32 *phandle_end;
-	const __be32 *cur;
-	uint32_t cur_count;
-	phandle phandle;
-	struct device_node *node;
+enum gpd_status {
+	GENPD_STATE_ON = 0,
+	GENPD_STATE_OFF = 1,
 };
 
 enum genpd_notication {
@@ -83135,6 +96162,94 @@
 	GENPD_NOTIFY_ON = 3,
 };
 
+struct dev_power_governor {
+	bool (*power_down_ok)(struct dev_pm_domain *);
+	bool (*suspend_ok)(struct device *);
+};
+
+struct gpd_dev_ops {
+	int (*start)(struct device *);
+	int (*stop)(struct device *);
+};
+
+struct genpd_governor_data {
+	s64 max_off_time_ns;
+	bool max_off_time_changed;
+	ktime_t next_wakeup;
+	bool cached_power_down_ok;
+	bool cached_power_down_state_idx;
+};
+
+struct genpd_power_state {
+	s64 power_off_latency_ns;
+	s64 power_on_latency_ns;
+	s64 residency_ns;
+	u64 usage;
+	u64 rejected;
+	struct fwnode_handle *fwnode;
+	u64 idle_time;
+	void *data;
+};
+
+struct opp_table;
+
+struct dev_pm_opp;
+
+struct genpd_lock_ops;
+
+struct generic_pm_domain {
+	struct device dev;
+	struct dev_pm_domain domain;
+	struct list_head gpd_list_node;
+	struct list_head parent_links;
+	struct list_head child_links;
+	struct list_head dev_list;
+	struct dev_power_governor *gov;
+	struct genpd_governor_data *gd;
+	struct work_struct power_off_work;
+	struct fwnode_handle *provider;
+	bool has_provider;
+	const char *name;
+	atomic_t sd_count;
+	enum gpd_status status;
+	unsigned int device_count;
+	unsigned int suspended_count;
+	unsigned int prepared_count;
+	unsigned int performance_state;
+	cpumask_var_t cpus;
+	int (*power_off)(struct generic_pm_domain *);
+	int (*power_on)(struct generic_pm_domain *);
+	struct raw_notifier_head power_notifiers;
+	struct opp_table *opp_table;
+	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
+	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
+	struct gpd_dev_ops dev_ops;
+	int (*attach_dev)(struct generic_pm_domain *, struct device *);
+	void (*detach_dev)(struct generic_pm_domain *, struct device *);
+	unsigned int flags;
+	struct genpd_power_state *states;
+	void (*free_states)(struct genpd_power_state *, unsigned int);
+	unsigned int state_count;
+	unsigned int state_idx;
+	u64 on_time;
+	u64 accounting_time;
+	const struct genpd_lock_ops *lock_ops;
+	union {
+		struct mutex mlock;
+		struct {
+			spinlock_t slock;
+			long unsigned int lock_flags;
+		};
+	};
+};
+
+struct genpd_lock_ops {
+	void (*lock)(struct generic_pm_domain *);
+	void (*lock_nested)(struct generic_pm_domain *, int);
+	int (*lock_interruptible)(struct generic_pm_domain *);
+	void (*unlock)(struct generic_pm_domain *);
+};
+
 struct gpd_link {
 	struct generic_pm_domain *parent;
 	struct list_head parent_node;
@@ -83148,24 +96263,20 @@
 	s64 suspend_latency_ns;
 	s64 resume_latency_ns;
 	s64 effective_constraint_ns;
+	ktime_t next_wakeup;
 	bool constraint_changed;
 	bool cached_suspend_ok;
 };
 
 struct generic_pm_domain_data {
 	struct pm_domain_data base;
-	struct gpd_timing_data td;
+	struct gpd_timing_data *td;
 	struct notifier_block nb;
 	struct notifier_block *power_nb;
 	int cpu;
 	unsigned int performance_state;
-	void *data;
-};
-
-struct of_genpd_provider {
-	struct list_head link;
-	struct device_node *node;
-	genpd_xlate_t xlate;
+	unsigned int default_pstate;
+	unsigned int rpm_pstate;
 	void *data;
 };
 
@@ -83178,8 +96289,9 @@
 enum pce_status {
 	PCE_STATUS_NONE = 0,
 	PCE_STATUS_ACQUIRED = 1,
-	PCE_STATUS_ENABLED = 2,
-	PCE_STATUS_ERROR = 3,
+	PCE_STATUS_PREPARED = 2,
+	PCE_STATUS_ENABLED = 3,
+	PCE_STATUS_ERROR = 4,
 };
 
 struct pm_clock_entry {
@@ -83187,6 +96299,24 @@
 	char *con_id;
 	struct clk *clk;
 	enum pce_status status;
+	bool enabled_when_prepared;
+};
+
+struct isa_driver {
+	int (*match)(struct device *, unsigned int);
+	int (*probe)(struct device *, unsigned int);
+	void (*remove)(struct device *, unsigned int);
+	void (*shutdown)(struct device *, unsigned int);
+	int (*suspend)(struct device *, unsigned int, pm_message_t);
+	int (*resume)(struct device *, unsigned int);
+	struct device_driver driver;
+	struct device *devices;
+};
+
+struct isa_dev {
+	struct device dev;
+	struct device *next;
+	unsigned int id;
 };
 
 struct firmware_fallback_config {
@@ -83196,12 +96326,6 @@
 	int loading_timeout;
 };
 
-struct builtin_fw {
-	char *name;
-	void *data;
-	long unsigned int size;
-};
-
 enum fw_opt {
 	FW_OPT_UEVENT = 1,
 	FW_OPT_NOWAIT = 2,
@@ -83250,6 +96374,20 @@
 	spinlock_t lock;
 	struct list_head head;
 	int state;
+	spinlock_t name_lock;
+	struct list_head fw_names;
+	struct delayed_work work;
+	struct notifier_block pm_notify;
+};
+
+struct fw_cache_entry {
+	struct list_head list;
+	const char *name;
+};
+
+struct fw_name_devm {
+	long unsigned int magic;
+	const char *name;
 };
 
 struct firmware_work {
@@ -83267,9 +96405,16 @@
 	struct device dev;
 	struct fw_priv *fw_priv;
 	struct firmware *fw;
+	void *fw_upload_priv;
 };
 
-typedef void (*node_registration_func_t)(struct node___2 *);
+struct builtin_fw {
+	char *name;
+	void *data;
+	long unsigned int size;
+};
+
+typedef void (*node_registration_func_t)(struct node *);
 
 typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
 
@@ -83291,11 +96436,19 @@
 	enum node_states state;
 };
 
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
 struct for_each_memory_block_cb_data {
 	walk_memory_blocks_func_t func;
 	void *arg;
 };
 
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
 typedef int (*regmap_hw_write)(void *, const void *, size_t);
 
 typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
@@ -83340,6 +96493,7 @@
 	enum regmap_endian val_format_endian_default;
 	size_t max_raw_read;
 	size_t max_raw_write;
+	bool free_on_exit;
 };
 
 struct reg_field {
@@ -83354,6 +96508,7 @@
 	size_t buf_size;
 	size_t reg_bytes;
 	size_t pad_bytes;
+	size_t reg_downshift;
 	size_t val_bytes;
 	void (*format_write)(struct regmap___2 *, unsigned int, unsigned int);
 	void (*format_reg)(void *, unsigned int, unsigned int);
@@ -83362,6 +96517,8 @@
 	void (*parse_inplace)(void *);
 };
 
+struct hwspinlock;
+
 struct regcache_ops;
 
 struct regmap___2 {
@@ -83371,11 +96528,16 @@
 			spinlock_t spinlock;
 			long unsigned int spinlock_flags;
 		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			long unsigned int raw_spinlock_flags;
+		};
 	};
 	regmap_lock lock;
 	regmap_unlock unlock;
 	void *lock_arg;
 	gfp_t alloc_flags;
+	unsigned int reg_base;
 	struct device *dev;
 	void *work_buf;
 	struct regmap_format format;
@@ -83412,6 +96574,8 @@
 	int (*reg_read)(void *, unsigned int, unsigned int *);
 	int (*reg_write)(void *, unsigned int, unsigned int);
 	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
 	bool defer_caching;
 	long unsigned int read_flag_mask;
 	long unsigned int write_flag_mask;
@@ -83500,7 +96664,6 @@
 	u32 __data_loc_name;
 	u32 __data_loc_status;
 	u32 __data_loc_type;
-	int type;
 	char __data[0];
 };
 
@@ -83607,187 +96770,6 @@
 	struct list_head link;
 };
 
-struct ptp_system_timestamp {
-	struct timespec64 pre_ts;
-	struct timespec64 post_ts;
-};
-
-struct spi_statistics {
-	spinlock_t lock;
-	long unsigned int messages;
-	long unsigned int transfers;
-	long unsigned int errors;
-	long unsigned int timedout;
-	long unsigned int spi_sync;
-	long unsigned int spi_sync_immediate;
-	long unsigned int spi_async;
-	long long unsigned int bytes;
-	long long unsigned int bytes_rx;
-	long long unsigned int bytes_tx;
-	long unsigned int transfer_bytes_histo[17];
-	long unsigned int transfers_split_maxsize;
-};
-
-struct spi_delay {
-	u16 value;
-	u8 unit;
-};
-
-struct spi_controller;
-
-struct spi_device {
-	struct device dev;
-	struct spi_controller *controller;
-	struct spi_controller *master;
-	u32 max_speed_hz;
-	u8 chip_select;
-	u8 bits_per_word;
-	bool rt;
-	u32 mode;
-	int irq;
-	void *controller_state;
-	void *controller_data;
-	char modalias[32];
-	const char *driver_override;
-	int cs_gpio;
-	struct gpio_desc *cs_gpiod;
-	struct spi_delay word_delay;
-	struct spi_statistics statistics;
-};
-
-struct spi_message;
-
-struct spi_transfer;
-
-struct spi_controller_mem_ops;
-
-struct spi_controller {
-	struct device dev;
-	struct list_head list;
-	s16 bus_num;
-	u16 num_chipselect;
-	u16 dma_alignment;
-	u32 mode_bits;
-	u32 buswidth_override_bits;
-	u32 bits_per_word_mask;
-	u32 min_speed_hz;
-	u32 max_speed_hz;
-	u16 flags;
-	bool slave;
-	size_t (*max_transfer_size)(struct spi_device *);
-	size_t (*max_message_size)(struct spi_device *);
-	struct mutex io_mutex;
-	spinlock_t bus_lock_spinlock;
-	struct mutex bus_lock_mutex;
-	bool bus_lock_flag;
-	int (*setup)(struct spi_device *);
-	int (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);
-	int (*transfer)(struct spi_device *, struct spi_message *);
-	void (*cleanup)(struct spi_device *);
-	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	bool queued;
-	struct kthread_worker *kworker;
-	struct kthread_work pump_messages;
-	spinlock_t queue_lock;
-	struct list_head queue;
-	struct spi_message *cur_msg;
-	bool idling;
-	bool busy;
-	bool running;
-	bool rt;
-	bool auto_runtime_pm;
-	bool cur_msg_prepared;
-	bool cur_msg_mapped;
-	bool last_cs_enable;
-	bool last_cs_mode_high;
-	bool fallback;
-	struct completion xfer_completion;
-	size_t max_dma_len;
-	int (*prepare_transfer_hardware)(struct spi_controller *);
-	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_transfer_hardware)(struct spi_controller *);
-	int (*prepare_message)(struct spi_controller *, struct spi_message *);
-	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
-	int (*slave_abort)(struct spi_controller *);
-	void (*set_cs)(struct spi_device *, bool);
-	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
-	void (*handle_err)(struct spi_controller *, struct spi_message *);
-	const struct spi_controller_mem_ops *mem_ops;
-	struct spi_delay cs_setup;
-	struct spi_delay cs_hold;
-	struct spi_delay cs_inactive;
-	int *cs_gpios;
-	struct gpio_desc **cs_gpiods;
-	bool use_gpio_descriptors;
-	u8 unused_native_cs;
-	u8 max_native_cs;
-	struct spi_statistics statistics;
-	struct dma_chan *dma_tx;
-	struct dma_chan *dma_rx;
-	void *dummy_rx;
-	void *dummy_tx;
-	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
-	bool ptp_sts_supported;
-	long unsigned int irq_flags;
-};
-
-struct spi_message {
-	struct list_head transfers;
-	struct spi_device *spi;
-	unsigned int is_dma_mapped: 1;
-	void (*complete)(void *);
-	void *context;
-	unsigned int frame_length;
-	unsigned int actual_length;
-	int status;
-	struct list_head queue;
-	void *state;
-	struct list_head resources;
-};
-
-struct spi_transfer {
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int len;
-	dma_addr_t tx_dma;
-	dma_addr_t rx_dma;
-	struct sg_table tx_sg;
-	struct sg_table rx_sg;
-	unsigned int cs_change: 1;
-	unsigned int tx_nbits: 3;
-	unsigned int rx_nbits: 3;
-	u8 bits_per_word;
-	u16 delay_usecs;
-	struct spi_delay delay;
-	struct spi_delay cs_change_delay;
-	struct spi_delay word_delay;
-	u32 speed_hz;
-	u32 effective_speed_hz;
-	unsigned int ptp_sts_word_pre;
-	unsigned int ptp_sts_word_post;
-	struct ptp_system_timestamp *ptp_sts;
-	bool timestamped;
-	struct list_head transfer_list;
-	u16 error;
-};
-
-struct spi_mem;
-
-struct spi_mem_op;
-
-struct spi_mem_dirmap_desc;
-
-struct spi_controller_mem_ops {
-	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
-	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
-	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
-	const char * (*get_name)(struct spi_mem *);
-	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
-	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
-	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
-	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
-};
-
 struct regmap_async_spi {
 	struct regmap_async core;
 	struct spi_message m;
@@ -83797,6 +96779,7 @@
 struct regmap_mmio_context {
 	void *regs;
 	unsigned int val_bytes;
+	bool relaxed_mmio;
 	bool attached_clk;
 	struct clk *clk;
 	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
@@ -83820,17 +96803,12 @@
 	unsigned int *wake_buf;
 	unsigned int *type_buf;
 	unsigned int *type_buf_def;
+	unsigned int **virt_buf;
 	unsigned int irq_reg_stride;
 	unsigned int type_reg_stride;
 	bool clear_status: 1;
 };
 
-struct soc_device___2 {
-	struct device dev;
-	struct soc_device_attribute *attr;
-	int soc_dev_num;
-};
-
 struct devcd_entry {
 	struct device devcd_dev;
 	void *data;
@@ -83852,16 +96830,26 @@
 	int devid;
 };
 
-struct brd_device {
-	int brd_number;
-	struct request_queue *brd_queue;
-	struct gendisk *brd_disk;
-	struct list_head brd_list;
-	spinlock_t brd_lock;
-	struct xarray brd_pages;
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
 };
 
-typedef unsigned int __kernel_old_dev_t;
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+typedef long unsigned int __kernel_old_dev_t;
+
+typedef u16 compat_dev_t;
 
 enum {
 	LO_FLAGS_READ_ONLY = 1,
@@ -83912,57 +96900,55 @@
 	Lo_unbound = 0,
 	Lo_bound = 1,
 	Lo_rundown = 2,
+	Lo_deleting = 3,
 };
 
-struct loop_func_table;
-
 struct loop_device {
 	int lo_number;
-	atomic_t lo_refcnt;
 	loff_t lo_offset;
 	loff_t lo_sizelimit;
 	int lo_flags;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
 	char lo_file_name[64];
-	char lo_crypt_name[64];
-	char lo_encrypt_key[32];
-	int lo_encrypt_key_size;
-	struct loop_func_table *lo_encryption;
-	__u32 lo_init[2];
-	kuid_t lo_key_owner;
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
 	struct file *lo_backing_file;
 	struct block_device *lo_device;
-	void *key_data;
 	gfp_t old_gfp_mask;
 	spinlock_t lo_lock;
 	int lo_state;
-	struct kthread_worker worker;
-	struct task_struct *worker_task;
+	spinlock_t lo_work_lock;
+	struct workqueue_struct *workqueue;
+	struct work_struct rootcg_work;
+	struct list_head rootcg_cmd_list;
+	struct list_head idle_worker_list;
+	struct rb_root worker_tree;
+	struct timer_list timer;
 	bool use_dio;
 	bool sysfs_inited;
 	struct request_queue *lo_queue;
 	struct blk_mq_tag_set tag_set;
 	struct gendisk *lo_disk;
-};
-
-struct loop_func_table {
-	int number;
-	int (*transfer)(struct loop_device *, int, struct page *, unsigned int, struct page *, unsigned int, int, sector_t);
-	int (*init)(struct loop_device *, const struct loop_info64 *);
-	int (*release)(struct loop_device *);
-	int (*ioctl)(struct loop_device *, int, long unsigned int);
-	struct module *owner;
+	struct mutex lo_mutex;
+	bool idr_visible;
 };
 
 struct loop_cmd {
-	struct kthread_work work;
+	struct list_head list_entry;
 	bool use_aio;
 	atomic_t ref;
 	long int ret;
 	struct kiocb iocb;
 	struct bio_vec *bvec;
-	struct cgroup_subsys_state *css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct cgroup_subsys_state *memcg_css;
+};
+
+struct loop_worker {
+	struct rb_node rb_node;
+	struct work_struct work;
+	struct list_head cmd_list;
+	struct list_head idle_list;
+	struct loop_device *lo;
+	struct cgroup_subsys_state *blkcg_css;
+	long unsigned int last_ran_at;
 };
 
 struct compat_loop_info {
@@ -83980,6 +96966,98 @@
 	char reserved[4];
 };
 
+struct cdrom_device_ops;
+
+struct cdrom_device_info {
+	const struct cdrom_device_ops *ops;
+	struct list_head list;
+	struct gendisk *disk;
+	void *handle;
+	int mask;
+	int speed;
+	int capacity;
+	unsigned int options: 30;
+	unsigned int mc_flags: 2;
+	unsigned int vfs_events;
+	unsigned int ioctl_events;
+	int use_count;
+	char name[20];
+	__u8 sanyo_slot: 2;
+	__u8 keeplocked: 1;
+	__u8 reserved: 5;
+	int cdda_method;
+	__u8 last_sense;
+	__u8 media_written;
+	short unsigned int mmc3_profile;
+	int for_data;
+	int (*exit)(struct cdrom_device_info *);
+	int mrw_mode_page;
+	__s64 last_media_change_ms;
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+struct cdrom_msf0 {
+	__u8 minute;
+	__u8 second;
+	__u8 frame;
+};
+
+union cdrom_addr {
+	struct cdrom_msf0 msf;
+	int lba;
+};
+
+struct cdrom_multisession {
+	union cdrom_addr addr;
+	__u8 xa_flag;
+	__u8 addr_format;
+};
+
+struct cdrom_mcn {
+	__u8 medium_catalog_number[14];
+};
+
+struct packet_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct scsi_sense_hdr *sshdr;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	void *reserved[1];
+};
+
+struct cdrom_device_ops {
+	int (*open)(struct cdrom_device_info *, int);
+	void (*release)(struct cdrom_device_info *);
+	int (*drive_status)(struct cdrom_device_info *, int);
+	unsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);
+	int (*tray_move)(struct cdrom_device_info *, int);
+	int (*lock_door)(struct cdrom_device_info *, int);
+	int (*select_speed)(struct cdrom_device_info *, int);
+	int (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);
+	int (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);
+	int (*reset)(struct cdrom_device_info *);
+	int (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);
+	int (*generic_packet)(struct cdrom_device_info *, struct packet_command *);
+	int (*read_cdda_bpc)(struct cdrom_device_info *, void *, u32, u32, u8 *);
+	const int capability;
+};
+
+typedef unsigned int RING_IDX;
+
 typedef uint16_t blkif_vdev_t;
 
 typedef uint64_t blkif_sector_t;
@@ -84054,7 +97132,7 @@
 	RING_IDX req_event;
 	RING_IDX rsp_prod;
 	RING_IDX rsp_event;
-	uint8_t pad[48];
+	uint8_t __pad[48];
 	union blkif_sring_entry ring[1];
 };
 
@@ -84069,6 +97147,7 @@
 	BLKIF_STATE_DISCONNECTED = 0,
 	BLKIF_STATE_CONNECTED = 1,
 	BLKIF_STATE_SUSPENDED = 2,
+	BLKIF_STATE_ERROR = 3,
 };
 
 struct grant {
@@ -84078,10 +97157,11 @@
 };
 
 enum blk_req_status {
-	REQ_WAITING = 0,
-	REQ_DONE = 1,
-	REQ_ERROR = 2,
-	REQ_EOPNOTSUPP = 3,
+	REQ_PROCESSING = 0,
+	REQ_WAITING = 1,
+	REQ_DONE = 2,
+	REQ_ERROR = 3,
+	REQ_EOPNOTSUPP = 4,
 };
 
 struct blk_shadow {
@@ -84123,6 +97203,7 @@
 	struct gendisk *gd;
 	u16 sector_size;
 	unsigned int physical_sector_size;
+	long unsigned int vdisk_info;
 	int vdevice;
 	blkif_vdev_t handle;
 	enum blkif_state connected;
@@ -84167,19 +97248,9 @@
 	char *bvec_data;
 };
 
-struct test_struct {
-	char *get;
-	char *put;
-	void (*get_handler)(char *);
-	int (*put_handler)(char *, char *);
-};
-
-struct test_state {
-	char *name;
-	struct test_struct *tst;
-	int idx;
-	int (*run_test)(int, int);
-	int (*validate_put)(char *);
+struct sram_config {
+	int (*init)();
+	bool map_only_reserved;
 };
 
 struct sram_partition {
@@ -84191,8 +97262,10 @@
 };
 
 struct sram_dev {
+	const struct sram_config *config;
 	struct device *dev;
 	void *virt_base;
+	bool no_memory_wc;
 	struct gen_pool *pool;
 	struct clk *clk;
 	struct sram_partition *partition;
@@ -84203,156 +97276,587 @@
 	struct list_head list;
 	u32 start;
 	u32 size;
+	struct resource res;
 	bool export;
 	bool pool;
 	bool protect_exec;
 	const char *label;
 };
 
-struct mfd_cell_acpi_match;
-
-struct mfd_cell {
-	const char *name;
-	int id;
-	int level;
-	int (*enable)(struct platform_device *);
-	int (*disable)(struct platform_device *);
-	int (*suspend)(struct platform_device *);
-	int (*resume)(struct platform_device *);
-	void *platform_data;
-	size_t pdata_size;
-	const struct property_entry *properties;
-	const char *of_compatible;
-	const u64 of_reg;
-	bool use_of_reg;
-	const struct mfd_cell_acpi_match *acpi_match;
-	int num_resources;
-	const struct resource *resources;
-	bool ignore_resource_conflicts;
-	bool pm_runtime_no_callbacks;
-	const char * const *parent_supplies;
-	int num_parent_supplies;
-};
-
 struct mfd_cell_acpi_match {
 	const char *pnpid;
 	const long long unsigned int adr;
 };
 
-struct prcm_data {
-	int nsubdevs;
-	const struct mfd_cell *subdevs;
+enum {
+	CHIP_INVALID = 0,
+	CHIP_PM8606 = 1,
+	CHIP_PM8607 = 2,
+	CHIP_MAX = 3,
 };
 
-struct arizona_micbias {
-	int mV;
-	unsigned int ext_cap: 1;
-	unsigned int discharge: 1;
-	unsigned int soft_start: 1;
-	unsigned int bypass: 1;
-};
-
-struct arizona_micd_config {
-	unsigned int src;
-	unsigned int bias;
-	bool gpio;
-};
-
-struct arizona_micd_range {
-	int max;
-	int key;
-};
-
-struct arizona_pdata {
-	struct gpio_desc *reset;
-	struct arizona_micsupp_pdata micvdd;
-	struct arizona_ldo1_pdata ldo1;
-	int clk32k_src;
-	unsigned int irq_flags;
-	int gpio_base;
-	unsigned int gpio_defaults[5];
-	unsigned int max_channels_clocked[3];
-	bool jd_gpio5;
-	bool jd_gpio5_nopull;
-	bool jd_invert;
-	bool hpdet_acc_id;
-	bool hpdet_acc_id_line;
-	int hpdet_id_gpio;
-	unsigned int hpdet_channel;
-	bool micd_software_compare;
-	unsigned int micd_detect_debounce;
-	int micd_pol_gpio;
-	unsigned int micd_bias_start_time;
-	unsigned int micd_rate;
-	unsigned int micd_dbtime;
-	unsigned int micd_timeout;
-	bool micd_force_micbias;
-	const struct arizona_micd_range *micd_ranges;
-	int num_micd_ranges;
-	struct arizona_micd_config *micd_configs;
-	int num_micd_configs;
-	int dmic_ref[4];
-	struct arizona_micbias micbias[3];
-	int inmode[4];
-	int out_mono[6];
-	unsigned int out_vol_limit[12];
-	unsigned int spk_mute[2];
-	unsigned int spk_fmt[2];
-	unsigned int hap_act;
-	int irq_gpio;
-	unsigned int gpsw;
+enum pm8606_ref_gp_and_osc_clients {
+	REF_GP_NO_CLIENTS = 0,
+	WLED1_DUTY = 1,
+	WLED2_DUTY = 2,
+	WLED3_DUTY = 4,
+	RGB1_ENABLE = 8,
+	RGB2_ENABLE = 16,
+	LDO_VBR_EN = 32,
+	REF_GP_MAX_CLIENT = 65535,
 };
 
 enum {
-	ARIZONA_MCLK1 = 0,
-	ARIZONA_MCLK2 = 1,
-	ARIZONA_NUM_MCLK = 2,
+	PM8607_IRQ_ONKEY = 0,
+	PM8607_IRQ_EXTON = 1,
+	PM8607_IRQ_CHG = 2,
+	PM8607_IRQ_BAT = 3,
+	PM8607_IRQ_RTC = 4,
+	PM8607_IRQ_CC = 5,
+	PM8607_IRQ_VBAT = 6,
+	PM8607_IRQ_VCHG = 7,
+	PM8607_IRQ_VSYS = 8,
+	PM8607_IRQ_TINT = 9,
+	PM8607_IRQ_GPADC0 = 10,
+	PM8607_IRQ_GPADC1 = 11,
+	PM8607_IRQ_GPADC2 = 12,
+	PM8607_IRQ_GPADC3 = 13,
+	PM8607_IRQ_AUDIO_SHORT = 14,
+	PM8607_IRQ_PEN = 15,
+	PM8607_IRQ_HEADSET = 16,
+	PM8607_IRQ_HOOK = 17,
+	PM8607_IRQ_MICIN = 18,
+	PM8607_IRQ_CHG_FAIL = 19,
+	PM8607_IRQ_CHG_DONE = 20,
+	PM8607_IRQ_CHG_FAULT = 21,
 };
 
-enum arizona_type {
-	WM5102 = 1,
-	WM5110 = 2,
-	WM8997 = 3,
-	WM8280 = 4,
-	WM8998 = 5,
-	WM1814 = 6,
-	WM1831 = 7,
-	CS47L24 = 8,
-};
-
-struct arizona {
-	struct regmap *regmap;
+struct pm860x_chip {
 	struct device *dev;
-	enum arizona_type type;
-	unsigned int rev;
-	int num_core_supplies;
-	struct regulator_bulk_data core_supplies[2];
-	struct regulator *dcvdd;
-	bool has_fully_powered_off;
-	struct arizona_pdata pdata;
-	unsigned int external_dcvdd: 1;
-	int irq;
-	struct irq_domain *virq;
-	struct regmap_irq_chip_data *aod_irq_chip;
-	struct regmap_irq_chip_data *irq_chip;
-	bool hpdet_clamp;
-	unsigned int hp_ena;
-	struct mutex clk_lock;
-	int clk32k_ref;
-	struct clk *mclk[2];
-	bool ctrlif_error;
-	struct snd_soc_dapm_context *dapm;
-	int tdm_width[3];
-	int tdm_slots[3];
-	uint16_t dac_comp_coeff;
-	uint8_t dac_comp_enabled;
-	struct mutex dac_comp_lock;
-	struct blocking_notifier_head notifier;
+	struct mutex irq_lock;
+	struct mutex osc_lock;
+	struct i2c_client *client;
+	struct i2c_client *companion;
+	struct regmap *regmap;
+	struct regmap *regmap_companion;
+	int buck3_double;
+	int companion_addr;
+	short unsigned int osc_vote;
+	int id;
+	int irq_mode;
+	int irq_base;
+	int core_irq;
+	unsigned char chip_version;
+	unsigned char osc_status;
+	unsigned int wakeup_flag;
 };
 
-struct arizona_sysclk_state {
-	unsigned int fll;
-	unsigned int sysclk;
+enum {
+	GI2C_PORT = 0,
+	PI2C_PORT = 1,
+};
+
+struct pm860x_backlight_pdata {
+	int pwm;
+	int iset;
+};
+
+struct pm860x_led_pdata {
+	int iset;
+};
+
+struct pm860x_rtc_pdata {
+	int (*sync)(unsigned int);
+	int vrtc;
+};
+
+struct pm860x_touch_pdata {
+	int gpadc_prebias;
+	int slot_cycle;
+	int off_scale;
+	int sw_cal;
+	int tsi_prebias;
+	int pen_prebias;
+	int pen_prechg;
+	int res_x;
+	long unsigned int flags;
+};
+
+struct pm860x_power_pdata {
+	int max_capacity;
+	int resistor;
+};
+
+struct charger_desc;
+
+struct pm860x_platform_data {
+	struct pm860x_backlight_pdata *backlight;
+	struct pm860x_led_pdata *led;
+	struct pm860x_rtc_pdata *rtc;
+	struct pm860x_touch_pdata *touch;
+	struct pm860x_power_pdata *power;
+	struct regulator_init_data *buck1;
+	struct regulator_init_data *buck2;
+	struct regulator_init_data *buck3;
+	struct regulator_init_data *ldo1;
+	struct regulator_init_data *ldo2;
+	struct regulator_init_data *ldo3;
+	struct regulator_init_data *ldo4;
+	struct regulator_init_data *ldo5;
+	struct regulator_init_data *ldo6;
+	struct regulator_init_data *ldo7;
+	struct regulator_init_data *ldo8;
+	struct regulator_init_data *ldo9;
+	struct regulator_init_data *ldo10;
+	struct regulator_init_data *ldo12;
+	struct regulator_init_data *ldo_vibrator;
+	struct regulator_init_data *ldo14;
+	struct charger_desc *chg_desc;
+	int companion_addr;
+	int i2c_port;
+	int irq_mode;
+	int irq_base;
+	int num_leds;
+	int num_backlights;
+};
+
+enum polling_modes {
+	CM_POLL_DISABLE = 0,
+	CM_POLL_ALWAYS = 1,
+	CM_POLL_EXTERNAL_POWER_ONLY = 2,
+	CM_POLL_CHARGING_ONLY = 3,
+};
+
+enum data_source {
+	CM_BATTERY_PRESENT = 0,
+	CM_NO_BATTERY = 1,
+	CM_FUEL_GAUGE = 2,
+	CM_CHARGER_STAT = 3,
+};
+
+struct charger_regulator;
+
+struct charger_desc {
+	const char *psy_name;
+	enum polling_modes polling_mode;
+	unsigned int polling_interval_ms;
+	unsigned int fullbatt_vchkdrop_uV;
+	unsigned int fullbatt_uV;
+	unsigned int fullbatt_soc;
+	unsigned int fullbatt_full_capacity;
+	enum data_source battery_present;
+	const char **psy_charger_stat;
+	int num_charger_regulators;
+	struct charger_regulator *charger_regulators;
+	const struct attribute_group **sysfs_groups;
+	const char *psy_fuel_gauge;
+	const char *thermal_zone;
+	int temp_min;
+	int temp_max;
+	int temp_diff;
+	bool measure_battery_temp;
+	u32 charging_max_duration_ms;
+	u32 discharging_max_duration_ms;
+};
+
+struct charger_manager;
+
+struct charger_cable {
+	const char *extcon_name;
+	const char *name;
+	struct extcon_dev *extcon_dev;
+	u64 extcon_type;
+	struct work_struct wq;
+	struct notifier_block nb;
+	bool attached;
+	struct charger_regulator *charger;
+	int min_uA;
+	int max_uA;
+	struct charger_manager *cm;
+};
+
+struct charger_regulator {
+	const char *regulator_name;
+	struct regulator *consumer;
+	int externally_control;
+	struct charger_cable *cables;
+	int num_cables;
+	struct attribute_group attr_grp;
+	struct device_attribute attr_name;
+	struct device_attribute attr_state;
+	struct device_attribute attr_externally_control;
+	struct attribute *attrs[4];
+	struct charger_manager *cm;
+};
+
+struct charger_manager {
+	struct list_head entry;
+	struct device *dev;
+	struct charger_desc *desc;
+	struct thermal_zone_device *tzd_batt;
+	bool charger_enabled;
+	int emergency_stop;
+	char psy_name_buf[31];
+	struct power_supply_desc charger_psy_desc;
+	struct power_supply *charger_psy;
+	u64 charging_start_time;
+	u64 charging_end_time;
+	int battery_status;
+};
+
+struct pm860x_irq_data {
+	int reg;
+	int mask_reg;
+	int enable;
+	int offs;
+};
+
+struct htcpld_chip_platform_data {
+	unsigned int addr;
+	unsigned int reset;
+	unsigned int num_gpios;
+	unsigned int gpio_out_base;
+	unsigned int gpio_in_base;
+	unsigned int irq_base;
+	unsigned int num_irqs;
+};
+
+struct htcpld_core_platform_data {
+	unsigned int int_reset_gpio_hi;
+	unsigned int int_reset_gpio_lo;
+	unsigned int i2c_adapter_id;
+	struct htcpld_chip_platform_data *chip;
+	unsigned int num_chip;
+};
+
+struct htcpld_chip {
+	spinlock_t lock;
+	u8 reset;
+	u8 addr;
+	struct device *dev;
+	struct i2c_client *client;
+	u8 cache_out;
+	struct gpio_chip chip_out;
+	u8 cache_in;
+	struct gpio_chip chip_in;
+	u16 irqs_enabled;
+	uint irq_start;
+	int nirqs;
+	unsigned int flow_type;
+	struct work_struct set_val_work;
+};
+
+struct htcpld_data {
+	u16 irqs_enabled;
+	uint irq_start;
+	int nirqs;
+	uint chained_irq;
+	unsigned int int_reset_gpio_hi;
+	unsigned int int_reset_gpio_lo;
+	struct htcpld_chip *chip;
+	unsigned int nchips;
+};
+
+struct wm8400_platform_data {
+	int (*platform_init)(struct device *);
+};
+
+struct wm8400 {
+	struct device *dev;
+	struct regmap *regmap;
+	struct platform_device regulators[6];
+};
+
+enum wm831x_auxadc {
+	WM831X_AUX_CAL = 15,
+	WM831X_AUX_BKUP_BATT = 10,
+	WM831X_AUX_WALL = 9,
+	WM831X_AUX_BATT = 8,
+	WM831X_AUX_USB = 7,
+	WM831X_AUX_SYSVDD = 6,
+	WM831X_AUX_BATT_TEMP = 5,
+	WM831X_AUX_CHIP_TEMP = 4,
+	WM831X_AUX_AUX4 = 3,
+	WM831X_AUX_AUX3 = 2,
+	WM831X_AUX_AUX2 = 1,
+	WM831X_AUX_AUX1 = 0,
+};
+
+struct wm831x_backlight_pdata {
+	int isink;
+	int max_uA;
+};
+
+struct wm831x_backup_pdata {
+	int charger_enable;
+	int no_constant_voltage;
+	int vlim;
+	int ilim;
+};
+
+struct wm831x_battery_pdata {
+	int enable;
+	int fast_enable;
+	int off_mask;
+	int trickle_ilim;
+	int vsel;
+	int eoc_iterm;
+	int fast_ilim;
+	int timeout;
+};
+
+enum wm831x_status_src {
+	WM831X_STATUS_PRESERVE = 0,
+	WM831X_STATUS_OTP = 1,
+	WM831X_STATUS_POWER = 2,
+	WM831X_STATUS_CHARGER = 3,
+	WM831X_STATUS_MANUAL = 4,
+};
+
+struct wm831x_status_pdata {
+	enum wm831x_status_src default_src;
+	const char *name;
+	const char *default_trigger;
+};
+
+struct wm831x_touch_pdata {
+	int fivewire;
+	int isel;
+	int rpu;
+	int pressure;
+	unsigned int data_irq;
+	int data_irqf;
+	unsigned int pd_irq;
+	int pd_irqf;
+};
+
+enum wm831x_watchdog_action {
+	WM831X_WDOG_NONE = 0,
+	WM831X_WDOG_INTERRUPT = 1,
+	WM831X_WDOG_RESET = 2,
+	WM831X_WDOG_WAKE = 3,
+};
+
+struct wm831x_watchdog_pdata {
+	enum wm831x_watchdog_action primary;
+	enum wm831x_watchdog_action secondary;
+	unsigned int software: 1;
+};
+
+struct wm831x;
+
+struct wm831x_pdata {
+	int wm831x_num;
+	int (*pre_init)(struct wm831x *);
+	int (*post_init)(struct wm831x *);
+	bool irq_cmos;
+	bool disable_touch;
+	bool soft_shutdown;
+	int irq_base;
+	int gpio_base;
+	int gpio_defaults[16];
+	struct wm831x_backlight_pdata *backlight;
+	struct wm831x_backup_pdata *backup;
+	struct wm831x_battery_pdata *battery;
+	struct wm831x_touch_pdata *touch;
+	struct wm831x_watchdog_pdata *watchdog;
+	struct wm831x_status_pdata *status[2];
+	struct regulator_init_data *dcdc[4];
+	struct regulator_init_data *epe[2];
+	struct regulator_init_data *ldo[11];
+	struct regulator_init_data *isink[2];
+};
+
+enum wm831x_parent {
+	WM8310 = 33552,
+	WM8311 = 33553,
+	WM8312 = 33554,
+	WM8320 = 33568,
+	WM8321 = 33569,
+	WM8325 = 33573,
+	WM8326 = 33574,
+};
+
+typedef int (*wm831x_auxadc_read_fn)(struct wm831x *, enum wm831x_auxadc);
+
+struct wm831x {
+	struct mutex io_lock;
+	struct device *dev;
+	struct regmap *regmap;
+	struct wm831x_pdata pdata;
+	enum wm831x_parent type;
+	int irq;
+	struct mutex irq_lock;
+	struct irq_domain *irq_domain;
+	int irq_masks_cur[5];
+	int irq_masks_cache[5];
+	bool soft_shutdown;
+	unsigned int has_gpio_ena: 1;
+	unsigned int has_cs_sts: 1;
+	unsigned int charger_irq_wake: 1;
+	int num_gpio;
+	int gpio_update[16];
+	bool gpio_level_high[16];
+	bool gpio_level_low[16];
+	struct mutex auxadc_lock;
+	struct list_head auxadc_pending;
+	u16 auxadc_active;
+	wm831x_auxadc_read_fn auxadc_read;
+	struct mutex key_lock;
+	unsigned int locked: 1;
+};
+
+struct wm831x_irq_data {
+	int primary;
+	int reg;
+	int mask;
+};
+
+struct wm831x_auxadc_req {
+	struct list_head list;
+	enum wm831x_auxadc input;
+	int val;
+	struct completion done;
+};
+
+struct wm8350_audio_platform_data {
+	int vmid_discharge_msecs;
+	int drain_msecs;
+	int cap_discharge_msecs;
+	int vmid_charge_msecs;
+	u32 vmid_s_curve: 2;
+	u32 dis_out4: 2;
+	u32 dis_out3: 2;
+	u32 dis_out2: 2;
+	u32 dis_out1: 2;
+	u32 vroi_out4: 1;
+	u32 vroi_out3: 1;
+	u32 vroi_out2: 1;
+	u32 vroi_out1: 1;
+	u32 vroi_enable: 1;
+	u32 codec_current_on: 2;
+	u32 codec_current_standby: 2;
+	u32 codec_current_charge: 2;
+};
+
+struct wm8350_codec {
+	struct platform_device *pdev;
+	struct wm8350_audio_platform_data *platform_data;
+};
+
+struct wm8350_gpio {
+	struct platform_device *pdev;
+};
+
+struct wm8350_led {
+	struct platform_device *pdev;
+	struct work_struct work;
+	spinlock_t value_lock;
+	enum led_brightness value;
+	struct led_classdev cdev;
+	int max_uA_index;
+	int enabled;
+	struct regulator *isink;
+	struct regulator_consumer_supply isink_consumer;
+	struct regulator_init_data isink_init;
+	struct regulator *dcdc;
+	struct regulator_consumer_supply dcdc_consumer;
+	struct regulator_init_data dcdc_init;
+};
+
+struct wm8350_pmic {
+	int max_dcdc;
+	int max_isink;
+	int isink_A_dcdc;
+	int isink_B_dcdc;
+	u16 dcdc1_hib_mode;
+	u16 dcdc3_hib_mode;
+	u16 dcdc4_hib_mode;
+	u16 dcdc6_hib_mode;
+	struct platform_device *pdev[12];
+	struct wm8350_led led[2];
+};
+
+struct rtc_device___2;
+
+struct wm8350_rtc {
+	struct platform_device *pdev;
+	struct rtc_device___2 *rtc;
+	int alarm_enabled;
+	int update_enabled;
+};
+
+struct wm8350_charger_policy {
+	int eoc_mA;
+	int charge_mV;
+	int fast_limit_mA;
+	int fast_limit_USB_mA;
+	int charge_timeout;
+	int trickle_start_mV;
+	int trickle_charge_mA;
+	int trickle_charge_USB_mA;
+};
+
+struct wm8350_power {
+	struct platform_device *pdev;
+	struct power_supply *battery;
+	struct power_supply *usb;
+	struct power_supply *ac;
+	struct wm8350_charger_policy *policy;
+	int rev_g_coeff;
+};
+
+struct wm8350_wdt {
+	struct platform_device *pdev;
+};
+
+struct wm8350_hwmon {
+	struct platform_device *pdev;
+	struct device *classdev;
+};
+
+struct wm8350 {
+	struct device *dev;
+	struct regmap *regmap;
+	bool unlocked;
+	struct mutex auxadc_mutex;
+	struct completion auxadc_done;
+	struct mutex irq_lock;
+	int chip_irq;
+	int irq_base;
+	u16 irq_masks[7];
+	struct wm8350_codec codec;
+	struct wm8350_gpio gpio;
+	struct wm8350_hwmon hwmon;
+	struct wm8350_pmic pmic;
+	struct wm8350_power power;
+	struct wm8350_rtc rtc;
+	struct wm8350_wdt wdt;
+};
+
+struct wm8350_platform_data {
+	int (*init)(struct wm8350 *);
+	int irq_high;
+	int irq_base;
+	int gpio_base;
+};
+
+struct wm8350_reg_access {
+	u16 readable;
+	u16 writable;
+	u16 vol;
+};
+
+struct wm8350_irq_data {
+	int primary;
+	int reg;
+	int mask;
+	int primary_only;
+};
+
+struct tps65910_platform_data {
+	int irq;
+	int irq_base;
 };
 
 enum tps65912_irqs {
@@ -84395,17 +97899,314 @@
 	struct regmap_irq_chip_data *irq_data;
 };
 
-struct spi_device_id {
-	char name[32];
-	kernel_ulong_t driver_data;
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
 };
 
-struct spi_driver {
-	const struct spi_device_id *id_table;
-	int (*probe)(struct spi_device *);
-	int (*remove)(struct spi_device *);
-	void (*shutdown)(struct spi_device *);
-	struct device_driver driver;
+struct matrix_keymap_data {
+	const uint32_t *keymap;
+	unsigned int keymap_size;
+};
+
+enum twl_module_ids {
+	TWL_MODULE_USB = 0,
+	TWL_MODULE_PIH = 1,
+	TWL_MODULE_MAIN_CHARGE = 2,
+	TWL_MODULE_PM_MASTER = 3,
+	TWL_MODULE_PM_RECEIVER = 4,
+	TWL_MODULE_RTC = 5,
+	TWL_MODULE_PWM = 6,
+	TWL_MODULE_LED = 7,
+	TWL_MODULE_SECURED_REG = 8,
+	TWL_MODULE_LAST = 9,
+};
+
+enum twl4030_module_ids {
+	TWL4030_MODULE_AUDIO_VOICE = 9,
+	TWL4030_MODULE_GPIO = 10,
+	TWL4030_MODULE_INTBR = 11,
+	TWL4030_MODULE_TEST = 12,
+	TWL4030_MODULE_KEYPAD = 13,
+	TWL4030_MODULE_MADC = 14,
+	TWL4030_MODULE_INTERRUPTS = 15,
+	TWL4030_MODULE_PRECHARGE = 16,
+	TWL4030_MODULE_BACKUP = 17,
+	TWL4030_MODULE_INT = 18,
+	TWL5031_MODULE_ACCESSORY = 19,
+	TWL5031_MODULE_INTERRUPTS = 20,
+	TWL4030_MODULE_LAST = 21,
+};
+
+enum twl6030_module_ids {
+	TWL6030_MODULE_ID0 = 9,
+	TWL6030_MODULE_ID1 = 10,
+	TWL6030_MODULE_ID2 = 11,
+	TWL6030_MODULE_GPADC = 12,
+	TWL6030_MODULE_GASGAUGE = 13,
+	TWL6030_MODULE_LAST = 14,
+};
+
+struct twl4030_clock_init_data {
+	bool ck32k_lowpwr_enable;
+};
+
+struct twl4030_bci_platform_data {
+	int *battery_tmp_tbl;
+	unsigned int tblsize;
+	int bb_uvolt;
+	int bb_uamp;
+};
+
+struct twl4030_gpio_platform_data {
+	bool use_leds;
+	u8 mmc_cd;
+	u32 debounce;
+	u32 pullups;
+	u32 pulldowns;
+	int (*setup)(struct device *, unsigned int, unsigned int);
+	int (*teardown)(struct device *, unsigned int, unsigned int);
+};
+
+struct twl4030_madc_platform_data {
+	int irq_line;
+};
+
+struct twl4030_keypad_data {
+	const struct matrix_keymap_data *keymap_data;
+	unsigned int rows;
+	unsigned int cols;
+	bool rep;
+};
+
+enum twl4030_usb_mode {
+	T2_USB_MODE_ULPI = 1,
+	T2_USB_MODE_CEA2011_3PIN = 2,
+};
+
+struct twl4030_usb_data {
+	enum twl4030_usb_mode usb_mode;
+	long unsigned int features;
+	int (*phy_init)(struct device *);
+	int (*phy_exit)(struct device *);
+	int (*phy_power)(struct device *, int, int);
+	int (*phy_set_clock)(struct device *, int);
+	int (*phy_suspend)(struct device *, int);
+};
+
+struct twl4030_ins {
+	u16 pmb_message;
+	u8 delay;
+};
+
+struct twl4030_script {
+	struct twl4030_ins *script;
+	unsigned int size;
+	u8 flags;
+};
+
+struct twl4030_resconfig {
+	u8 resource;
+	u8 devgroup;
+	u8 type;
+	u8 type2;
+	u8 remap_off;
+	u8 remap_sleep;
+};
+
+struct twl4030_power_data {
+	struct twl4030_script **scripts;
+	unsigned int num;
+	struct twl4030_resconfig *resource_config;
+	struct twl4030_resconfig *board_config;
+	bool use_poweroff;
+	bool ac_charger_quirk;
+};
+
+struct twl4030_codec_data {
+	unsigned int digimic_delay;
+	unsigned int ramp_delay_value;
+	unsigned int offset_cncl_path;
+	unsigned int hs_extmute: 1;
+	int hs_extmute_gpio;
+};
+
+struct twl4030_vibra_data {
+	unsigned int coexist;
+};
+
+struct twl4030_audio_data {
+	unsigned int audio_mclk;
+	struct twl4030_codec_data *codec;
+	struct twl4030_vibra_data *vibra;
+	int audpwron_gpio;
+	int naudint_irq;
+	unsigned int irq_base;
+};
+
+struct twl4030_platform_data {
+	struct twl4030_clock_init_data *clock;
+	struct twl4030_bci_platform_data *bci;
+	struct twl4030_gpio_platform_data *gpio;
+	struct twl4030_madc_platform_data *madc;
+	struct twl4030_keypad_data *keypad;
+	struct twl4030_usb_data *usb;
+	struct twl4030_power_data *power;
+	struct twl4030_audio_data *audio;
+	struct regulator_init_data *vdac;
+	struct regulator_init_data *vaux1;
+	struct regulator_init_data *vaux2;
+	struct regulator_init_data *vaux3;
+	struct regulator_init_data *vdd1;
+	struct regulator_init_data *vdd2;
+	struct regulator_init_data *vdd3;
+	struct regulator_init_data *vpll1;
+	struct regulator_init_data *vpll2;
+	struct regulator_init_data *vmmc1;
+	struct regulator_init_data *vmmc2;
+	struct regulator_init_data *vsim;
+	struct regulator_init_data *vaux4;
+	struct regulator_init_data *vio;
+	struct regulator_init_data *vintana1;
+	struct regulator_init_data *vintana2;
+	struct regulator_init_data *vintdig;
+	struct regulator_init_data *vmmc;
+	struct regulator_init_data *vpp;
+	struct regulator_init_data *vusim;
+	struct regulator_init_data *vana;
+	struct regulator_init_data *vcxio;
+	struct regulator_init_data *vusb;
+	struct regulator_init_data *clk32kg;
+	struct regulator_init_data *v1v8;
+	struct regulator_init_data *v2v1;
+	struct regulator_init_data *ldo1;
+	struct regulator_init_data *ldo2;
+	struct regulator_init_data *ldo3;
+	struct regulator_init_data *ldo4;
+	struct regulator_init_data *ldo5;
+	struct regulator_init_data *ldo6;
+	struct regulator_init_data *ldo7;
+	struct regulator_init_data *ldoln;
+	struct regulator_init_data *ldousb;
+	struct regulator_init_data *smps3;
+	struct regulator_init_data *smps4;
+	struct regulator_init_data *vio6025;
+};
+
+struct twl_regulator_driver_data {
+	int (*set_voltage)(void *, int);
+	int (*get_voltage)(void *);
+	void *data;
+	long unsigned int features;
+};
+
+struct twl_client {
+	struct i2c_client *client;
+	struct regmap *regmap;
+};
+
+struct twl_mapping {
+	unsigned char sid;
+	unsigned char base;
+};
+
+struct twl_private {
+	bool ready;
+	u32 twl_idcode;
+	unsigned int twl_id;
+	struct twl_mapping *twl_map;
+	struct twl_client *twl_modules;
+};
+
+struct sih_irq_data {
+	u8 isr_offset;
+	u8 imr_offset;
+};
+
+struct sih {
+	char name[8];
+	u8 module;
+	u8 control_offset;
+	bool set_cor;
+	u8 bits;
+	u8 bytes_ixr;
+	u8 edr_offset;
+	u8 bytes_edr;
+	u8 irq_lines;
+	struct sih_irq_data mask[2];
+};
+
+struct sih_agent {
+	int irq_base;
+	const struct sih *sih;
+	u32 imr;
+	bool imr_change_pending;
+	u32 edge_change;
+	struct mutex irq_lock;
+	char *irq_name;
+};
+
+struct twl6030_irq {
+	unsigned int irq_base;
+	int twl_irq;
+	bool irq_wake_enabled;
+	atomic_t wakeirqs;
+	struct notifier_block pm_nb;
+	struct irq_chip irq_chip;
+	struct irq_domain *irq_domain;
+	const int *irq_mapping_tbl;
+};
+
+enum twl4030_audio_res {
+	TWL4030_AUDIO_RES_POWER = 0,
+	TWL4030_AUDIO_RES_APLL = 1,
+	TWL4030_AUDIO_RES_MAX = 2,
+};
+
+struct twl4030_audio_resource {
+	int request_count;
+	u8 reg;
+	u8 mask;
+};
+
+struct twl4030_audio {
+	unsigned int audio_mclk;
+	struct mutex mutex;
+	struct twl4030_audio_resource resource[2];
+	struct mfd_cell cells[2];
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+};
+
+struct twl6040 {
+	struct device *dev;
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *irq_data;
+	struct regulator_bulk_data supplies[2];
+	struct clk *clk32k;
+	struct clk *mclk;
+	struct mutex mutex;
+	struct mutex irq_mutex;
+	struct mfd_cell cells[4];
+	struct completion ready;
+	int audpwron;
+	int power_count;
+	int rev;
+	int pll;
+	unsigned int sysclk_rate;
+	unsigned int mclk_rate;
+	unsigned int irq;
+	unsigned int irq_ready;
+	unsigned int irq_th;
 };
 
 struct mfd_of_node_entry {
@@ -84414,6 +98215,81 @@
 	struct device_node *np;
 };
 
+struct pcap_subdev {
+	int id;
+	const char *name;
+	void *platform_data;
+};
+
+struct pcap_platform_data {
+	unsigned int irq_base;
+	unsigned int config;
+	int gpio;
+	void (*init)(void *);
+	int num_subdevs;
+	struct pcap_subdev *subdevs;
+};
+
+struct pcap_adc_request {
+	u8 bank;
+	u8 ch[2];
+	u32 flags;
+	void (*callback)(void *, u16 *);
+	void *data;
+};
+
+struct pcap_adc_sync_request {
+	u16 res[2];
+	struct completion completion;
+};
+
+struct pcap_chip {
+	struct spi_device *spi;
+	u32 buf;
+	spinlock_t io_lock;
+	unsigned int irq_base;
+	u32 msr;
+	struct work_struct isr_work;
+	struct work_struct msr_work;
+	struct workqueue_struct *workqueue;
+	struct pcap_adc_request *adc_queue[8];
+	u8 adc_head;
+	u8 adc_tail;
+	spinlock_t adc_lock;
+};
+
+struct da903x_subdev_info {
+	int id;
+	const char *name;
+	void *platform_data;
+};
+
+struct da903x_platform_data {
+	int num_subdevs;
+	struct da903x_subdev_info *subdevs;
+};
+
+struct da903x_chip;
+
+struct da903x_chip_ops {
+	int (*init_chip)(struct da903x_chip *);
+	int (*unmask_events)(struct da903x_chip *, unsigned int);
+	int (*mask_events)(struct da903x_chip *, unsigned int);
+	int (*read_events)(struct da903x_chip *, unsigned int *);
+	int (*read_status)(struct da903x_chip *, unsigned int *);
+};
+
+struct da903x_chip {
+	struct i2c_client *client;
+	struct device *dev;
+	const struct da903x_chip_ops *ops;
+	int type;
+	uint32_t events_mask;
+	struct mutex lock;
+	struct work_struct irq_work;
+	struct blocking_notifier_head notifier_list;
+};
+
 struct da9052 {
 	struct device *dev;
 	struct regmap *regmap;
@@ -84445,6 +98321,1434 @@
 	DA9053_BC = 4,
 };
 
+enum lp8788_int_id {
+	LP8788_INT_TSDL = 0,
+	LP8788_INT_TSDH = 1,
+	LP8788_INT_UVLO = 2,
+	LP8788_INT_FLAGMON = 3,
+	LP8788_INT_PWRON_TIME = 4,
+	LP8788_INT_PWRON = 5,
+	LP8788_INT_COMP1 = 6,
+	LP8788_INT_COMP2 = 7,
+	LP8788_INT_CHG_INPUT_STATE = 8,
+	LP8788_INT_CHG_STATE = 9,
+	LP8788_INT_EOC = 10,
+	LP8788_INT_CHG_RESTART = 11,
+	LP8788_INT_RESTART_TIMEOUT = 12,
+	LP8788_INT_FULLCHG_TIMEOUT = 13,
+	LP8788_INT_PRECHG_TIMEOUT = 14,
+	LP8788_INT_RTC_ALARM1 = 17,
+	LP8788_INT_RTC_ALARM2 = 18,
+	LP8788_INT_ENTER_SYS_SUPPORT = 19,
+	LP8788_INT_EXIT_SYS_SUPPORT = 20,
+	LP8788_INT_BATT_LOW = 21,
+	LP8788_INT_NO_BATT = 22,
+	LP8788_INT_MAX = 24,
+};
+
+enum lp8788_dvs_sel {
+	DVS_SEL_V0 = 0,
+	DVS_SEL_V1 = 1,
+	DVS_SEL_V2 = 2,
+	DVS_SEL_V3 = 3,
+};
+
+enum lp8788_charger_event {
+	NO_CHARGER = 0,
+	CHARGER_DETECTED = 1,
+};
+
+enum lp8788_bl_ctrl_mode {
+	LP8788_BL_REGISTER_ONLY = 0,
+	LP8788_BL_COMB_PWM_BASED = 1,
+	LP8788_BL_COMB_REGISTER_BASED = 2,
+};
+
+enum lp8788_bl_dim_mode {
+	LP8788_DIM_EXPONENTIAL = 0,
+	LP8788_DIM_LINEAR = 1,
+};
+
+enum lp8788_bl_full_scale_current {
+	LP8788_FULLSCALE_5000uA = 0,
+	LP8788_FULLSCALE_8500uA = 1,
+	LP8788_FULLSCALE_1200uA = 2,
+	LP8788_FULLSCALE_1550uA = 3,
+	LP8788_FULLSCALE_1900uA = 4,
+	LP8788_FULLSCALE_2250uA = 5,
+	LP8788_FULLSCALE_2600uA = 6,
+	LP8788_FULLSCALE_2950uA = 7,
+};
+
+enum lp8788_bl_ramp_step {
+	LP8788_RAMP_8us = 0,
+	LP8788_RAMP_1024us = 1,
+	LP8788_RAMP_2048us = 2,
+	LP8788_RAMP_4096us = 3,
+	LP8788_RAMP_8192us = 4,
+	LP8788_RAMP_16384us = 5,
+	LP8788_RAMP_32768us = 6,
+	LP8788_RAMP_65538us = 7,
+};
+
+enum lp8788_isink_scale {
+	LP8788_ISINK_SCALE_100mA = 0,
+	LP8788_ISINK_SCALE_120mA = 1,
+};
+
+enum lp8788_isink_number {
+	LP8788_ISINK_1 = 0,
+	LP8788_ISINK_2 = 1,
+	LP8788_ISINK_3 = 2,
+};
+
+enum lp8788_alarm_sel {
+	LP8788_ALARM_1 = 0,
+	LP8788_ALARM_2 = 1,
+	LP8788_ALARM_MAX = 2,
+};
+
+struct lp8788_buck1_dvs {
+	int gpio;
+	enum lp8788_dvs_sel vsel;
+};
+
+struct lp8788_buck2_dvs {
+	int gpio[2];
+	enum lp8788_dvs_sel vsel;
+};
+
+struct lp8788_chg_param {
+	u8 addr;
+	u8 val;
+};
+
+struct lp8788;
+
+struct lp8788_charger_platform_data {
+	const char *adc_vbatt;
+	const char *adc_batt_temp;
+	unsigned int max_vbatt_mv;
+	struct lp8788_chg_param *chg_params;
+	int num_chg_params;
+	void (*charger_event)(struct lp8788 *, enum lp8788_charger_event);
+};
+
+struct lp8788_platform_data;
+
+struct lp8788 {
+	struct device *dev;
+	struct regmap *regmap;
+	struct irq_domain *irqdm;
+	int irq;
+	struct lp8788_platform_data *pdata;
+};
+
+struct lp8788_backlight_platform_data {
+	char *name;
+	int initial_brightness;
+	enum lp8788_bl_ctrl_mode bl_mode;
+	enum lp8788_bl_dim_mode dim_mode;
+	enum lp8788_bl_full_scale_current full_scale;
+	enum lp8788_bl_ramp_step rise_time;
+	enum lp8788_bl_ramp_step fall_time;
+	enum pwm_polarity pwm_pol;
+	unsigned int period_ns;
+};
+
+struct lp8788_led_platform_data {
+	char *name;
+	enum lp8788_isink_scale scale;
+	enum lp8788_isink_number num;
+	int iout_code;
+};
+
+struct lp8788_vib_platform_data {
+	char *name;
+	enum lp8788_isink_scale scale;
+	enum lp8788_isink_number num;
+	int iout_code;
+	int pwm_code;
+};
+
+struct iio_map;
+
+struct lp8788_platform_data {
+	int (*init_func)(struct lp8788 *);
+	struct regulator_init_data *buck_data[4];
+	struct regulator_init_data *dldo_data[12];
+	struct regulator_init_data *aldo_data[10];
+	struct lp8788_buck1_dvs *buck1_dvs;
+	struct lp8788_buck2_dvs *buck2_dvs;
+	struct lp8788_charger_platform_data *chg_pdata;
+	enum lp8788_alarm_sel alarm_sel;
+	struct lp8788_backlight_platform_data *bl_pdata;
+	struct lp8788_led_platform_data *led_pdata;
+	struct lp8788_vib_platform_data *vib_pdata;
+	struct iio_map *adc_pdata;
+};
+
+struct lp8788_irq_data {
+	struct lp8788 *lp;
+	struct mutex irq_lock;
+	struct irq_domain *domain;
+	int enabled[24];
+};
+
+struct da9055 {
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *irq_data;
+	struct device *dev;
+	struct i2c_client *i2c_client;
+	int irq_base;
+	int chip_irq;
+};
+
+enum gpio_select {
+	NO_GPIO = 0,
+	GPIO_1 = 1,
+	GPIO_2 = 2,
+};
+
+struct da9055_pdata {
+	int (*init)(struct da9055 *);
+	int irq_base;
+	int gpio_base;
+	struct regulator_init_data *regulators[8];
+	bool reset_enable;
+	int *gpio_ren;
+	int *gpio_rsel;
+	enum gpio_select *reg_ren;
+	enum gpio_select *reg_rsel;
+	struct gpio_desc **ena_gpiods;
+};
+
+enum da9063_type {
+	PMIC_TYPE_DA9063 = 0,
+	PMIC_TYPE_DA9063L = 1,
+};
+
+enum da9063_irqs {
+	DA9063_IRQ_ONKEY = 0,
+	DA9063_IRQ_ALARM = 1,
+	DA9063_IRQ_TICK = 2,
+	DA9063_IRQ_ADC_RDY = 3,
+	DA9063_IRQ_SEQ_RDY = 4,
+	DA9063_IRQ_WAKE = 5,
+	DA9063_IRQ_TEMP = 6,
+	DA9063_IRQ_COMP_1V2 = 7,
+	DA9063_IRQ_LDO_LIM = 8,
+	DA9063_IRQ_REG_UVOV = 9,
+	DA9063_IRQ_DVC_RDY = 10,
+	DA9063_IRQ_VDD_MON = 11,
+	DA9063_IRQ_WARN = 12,
+	DA9063_IRQ_GPI0 = 13,
+	DA9063_IRQ_GPI1 = 14,
+	DA9063_IRQ_GPI2 = 15,
+	DA9063_IRQ_GPI3 = 16,
+	DA9063_IRQ_GPI4 = 17,
+	DA9063_IRQ_GPI5 = 18,
+	DA9063_IRQ_GPI6 = 19,
+	DA9063_IRQ_GPI7 = 20,
+	DA9063_IRQ_GPI8 = 21,
+	DA9063_IRQ_GPI9 = 22,
+	DA9063_IRQ_GPI10 = 23,
+	DA9063_IRQ_GPI11 = 24,
+	DA9063_IRQ_GPI12 = 25,
+	DA9063_IRQ_GPI13 = 26,
+	DA9063_IRQ_GPI14 = 27,
+	DA9063_IRQ_GPI15 = 28,
+};
+
+struct da9063 {
+	struct device *dev;
+	enum da9063_type type;
+	unsigned char variant_code;
+	unsigned int flags;
+	struct regmap *regmap;
+	int chip_irq;
+	unsigned int irq_base;
+	struct regmap_irq_chip_data *regmap_irq;
+};
+
+enum da9063_variant_codes {
+	PMIC_DA9063_AD = 3,
+	PMIC_DA9063_BB = 5,
+	PMIC_DA9063_CA = 6,
+	PMIC_DA9063_DA = 7,
+	PMIC_DA9063_EA = 8,
+};
+
+enum da9063_page_sel_buf_fmt {
+	DA9063_PAGE_SEL_BUF_PAGE_REG = 0,
+	DA9063_PAGE_SEL_BUF_PAGE_VAL = 1,
+	DA9063_PAGE_SEL_BUF_SIZE = 2,
+};
+
+enum da9063_paged_read_msgs {
+	DA9063_PAGED_READ_MSG_PAGE_SEL = 0,
+	DA9063_PAGED_READ_MSG_REG_SEL = 1,
+	DA9063_PAGED_READ_MSG_DATA = 2,
+	DA9063_PAGED_READ_MSG_CNT = 3,
+};
+
+enum {
+	DA9063_DEV_ID_REG = 0,
+	DA9063_VAR_ID_REG = 1,
+	DA9063_CHIP_ID_REGS = 2,
+};
+
+struct max14577_regulator_platform_data {
+	int id;
+	struct regulator_init_data *initdata;
+	struct device_node *of_node;
+};
+
+struct max14577_platform_data {
+	int irq_base;
+	int gpio_pogo_vbatt_en;
+	int gpio_pogo_vbus_en;
+	int (*set_gpio_pogo_vbatt_en)(int);
+	int (*set_gpio_pogo_vbus_en)(int);
+	int (*set_gpio_pogo_cb)(int);
+	struct max14577_regulator_platform_data *regulators;
+};
+
+struct maxim_charger_current {
+	unsigned int min;
+	unsigned int high_start;
+	unsigned int high_step;
+	unsigned int max;
+};
+
+enum maxim_device_type {
+	MAXIM_DEVICE_TYPE_UNKNOWN = 0,
+	MAXIM_DEVICE_TYPE_MAX14577 = 1,
+	MAXIM_DEVICE_TYPE_MAX77836 = 2,
+	MAXIM_DEVICE_TYPE_NUM = 3,
+};
+
+enum max14577_reg {
+	MAX14577_REG_DEVICEID = 0,
+	MAX14577_REG_INT1 = 1,
+	MAX14577_REG_INT2 = 2,
+	MAX14577_REG_INT3 = 3,
+	MAX14577_REG_STATUS1 = 4,
+	MAX14577_REG_STATUS2 = 5,
+	MAX14577_REG_STATUS3 = 6,
+	MAX14577_REG_INTMASK1 = 7,
+	MAX14577_REG_INTMASK2 = 8,
+	MAX14577_REG_INTMASK3 = 9,
+	MAX14577_REG_CDETCTRL1 = 10,
+	MAX14577_REG_RFU = 11,
+	MAX14577_REG_CONTROL1 = 12,
+	MAX14577_REG_CONTROL2 = 13,
+	MAX14577_REG_CONTROL3 = 14,
+	MAX14577_REG_CHGCTRL1 = 15,
+	MAX14577_REG_CHGCTRL2 = 16,
+	MAX14577_REG_CHGCTRL3 = 17,
+	MAX14577_REG_CHGCTRL4 = 18,
+	MAX14577_REG_CHGCTRL5 = 19,
+	MAX14577_REG_CHGCTRL6 = 20,
+	MAX14577_REG_CHGCTRL7 = 21,
+	MAX14577_REG_END = 22,
+};
+
+enum max77836_pmic_reg {
+	MAX77836_PMIC_REG_PMIC_ID = 32,
+	MAX77836_PMIC_REG_PMIC_REV = 33,
+	MAX77836_PMIC_REG_INTSRC = 34,
+	MAX77836_PMIC_REG_INTSRC_MASK = 35,
+	MAX77836_PMIC_REG_TOPSYS_INT = 36,
+	MAX77836_PMIC_REG_TOPSYS_INT_MASK = 38,
+	MAX77836_PMIC_REG_TOPSYS_STAT = 40,
+	MAX77836_PMIC_REG_MRSTB_CNTL = 42,
+	MAX77836_PMIC_REG_LSCNFG = 43,
+	MAX77836_LDO_REG_CNFG1_LDO1 = 81,
+	MAX77836_LDO_REG_CNFG2_LDO1 = 82,
+	MAX77836_LDO_REG_CNFG1_LDO2 = 83,
+	MAX77836_LDO_REG_CNFG2_LDO2 = 84,
+	MAX77836_LDO_REG_CNFG_LDO_BIAS = 85,
+	MAX77836_COMP_REG_COMP1 = 96,
+	MAX77836_PMIC_REG_END = 97,
+};
+
+enum max77836_fg_reg {
+	MAX77836_FG_REG_VCELL_MSB = 2,
+	MAX77836_FG_REG_VCELL_LSB = 3,
+	MAX77836_FG_REG_SOC_MSB = 4,
+	MAX77836_FG_REG_SOC_LSB = 5,
+	MAX77836_FG_REG_MODE_H = 6,
+	MAX77836_FG_REG_MODE_L = 7,
+	MAX77836_FG_REG_VERSION_MSB = 8,
+	MAX77836_FG_REG_VERSION_LSB = 9,
+	MAX77836_FG_REG_HIBRT_H = 10,
+	MAX77836_FG_REG_HIBRT_L = 11,
+	MAX77836_FG_REG_CONFIG_H = 12,
+	MAX77836_FG_REG_CONFIG_L = 13,
+	MAX77836_FG_REG_VALRT_MIN = 20,
+	MAX77836_FG_REG_VALRT_MAX = 21,
+	MAX77836_FG_REG_CRATE_MSB = 22,
+	MAX77836_FG_REG_CRATE_LSB = 23,
+	MAX77836_FG_REG_VRESET = 24,
+	MAX77836_FG_REG_FGID = 25,
+	MAX77836_FG_REG_STATUS_H = 26,
+	MAX77836_FG_REG_STATUS_L = 27,
+	MAX77836_FG_REG_END = 28,
+};
+
+struct max14577 {
+	struct device *dev;
+	struct i2c_client *i2c;
+	struct i2c_client *i2c_pmic;
+	enum maxim_device_type dev_type;
+	struct regmap *regmap;
+	struct regmap *regmap_pmic;
+	struct regmap_irq_chip_data *irq_data;
+	struct regmap_irq_chip_data *irq_data_pmic;
+	int irq;
+};
+
+enum max77693_types {
+	TYPE_MAX77693_UNKNOWN = 0,
+	TYPE_MAX77693 = 1,
+	TYPE_MAX77843 = 2,
+	TYPE_MAX77693_NUM = 3,
+};
+
+struct max77693_dev {
+	struct device *dev;
+	struct i2c_client *i2c;
+	struct i2c_client *i2c_muic;
+	struct i2c_client *i2c_haptic;
+	struct i2c_client *i2c_chg;
+	enum max77693_types type;
+	struct regmap *regmap;
+	struct regmap *regmap_muic;
+	struct regmap *regmap_haptic;
+	struct regmap *regmap_chg;
+	struct regmap_irq_chip_data *irq_data_led;
+	struct regmap_irq_chip_data *irq_data_topsys;
+	struct regmap_irq_chip_data *irq_data_chg;
+	struct regmap_irq_chip_data *irq_data_muic;
+	int irq;
+};
+
+enum max77693_pmic_reg {
+	MAX77693_LED_REG_IFLASH1 = 0,
+	MAX77693_LED_REG_IFLASH2 = 1,
+	MAX77693_LED_REG_ITORCH = 2,
+	MAX77693_LED_REG_ITORCHTIMER = 3,
+	MAX77693_LED_REG_FLASH_TIMER = 4,
+	MAX77693_LED_REG_FLASH_EN = 5,
+	MAX77693_LED_REG_MAX_FLASH1 = 6,
+	MAX77693_LED_REG_MAX_FLASH2 = 7,
+	MAX77693_LED_REG_MAX_FLASH3 = 8,
+	MAX77693_LED_REG_MAX_FLASH4 = 9,
+	MAX77693_LED_REG_VOUT_CNTL = 10,
+	MAX77693_LED_REG_VOUT_FLASH1 = 11,
+	MAX77693_LED_REG_VOUT_FLASH2 = 12,
+	MAX77693_LED_REG_FLASH_INT = 14,
+	MAX77693_LED_REG_FLASH_INT_MASK = 15,
+	MAX77693_LED_REG_FLASH_STATUS = 16,
+	MAX77693_PMIC_REG_PMIC_ID1 = 32,
+	MAX77693_PMIC_REG_PMIC_ID2 = 33,
+	MAX77693_PMIC_REG_INTSRC = 34,
+	MAX77693_PMIC_REG_INTSRC_MASK = 35,
+	MAX77693_PMIC_REG_TOPSYS_INT = 36,
+	MAX77693_PMIC_REG_TOPSYS_INT_MASK = 38,
+	MAX77693_PMIC_REG_TOPSYS_STAT = 40,
+	MAX77693_PMIC_REG_MAINCTRL1 = 42,
+	MAX77693_PMIC_REG_LSCNFG = 43,
+	MAX77693_CHG_REG_CHG_INT = 176,
+	MAX77693_CHG_REG_CHG_INT_MASK = 177,
+	MAX77693_CHG_REG_CHG_INT_OK = 178,
+	MAX77693_CHG_REG_CHG_DETAILS_00 = 179,
+	MAX77693_CHG_REG_CHG_DETAILS_01 = 180,
+	MAX77693_CHG_REG_CHG_DETAILS_02 = 181,
+	MAX77693_CHG_REG_CHG_DETAILS_03 = 182,
+	MAX77693_CHG_REG_CHG_CNFG_00 = 183,
+	MAX77693_CHG_REG_CHG_CNFG_01 = 184,
+	MAX77693_CHG_REG_CHG_CNFG_02 = 185,
+	MAX77693_CHG_REG_CHG_CNFG_03 = 186,
+	MAX77693_CHG_REG_CHG_CNFG_04 = 187,
+	MAX77693_CHG_REG_CHG_CNFG_05 = 188,
+	MAX77693_CHG_REG_CHG_CNFG_06 = 189,
+	MAX77693_CHG_REG_CHG_CNFG_07 = 190,
+	MAX77693_CHG_REG_CHG_CNFG_08 = 191,
+	MAX77693_CHG_REG_CHG_CNFG_09 = 192,
+	MAX77693_CHG_REG_CHG_CNFG_10 = 193,
+	MAX77693_CHG_REG_CHG_CNFG_11 = 194,
+	MAX77693_CHG_REG_CHG_CNFG_12 = 195,
+	MAX77693_CHG_REG_CHG_CNFG_13 = 196,
+	MAX77693_CHG_REG_CHG_CNFG_14 = 197,
+	MAX77693_CHG_REG_SAFEOUT_CTRL = 198,
+	MAX77693_PMIC_REG_END = 199,
+};
+
+enum max77693_muic_reg {
+	MAX77693_MUIC_REG_ID = 0,
+	MAX77693_MUIC_REG_INT1 = 1,
+	MAX77693_MUIC_REG_INT2 = 2,
+	MAX77693_MUIC_REG_INT3 = 3,
+	MAX77693_MUIC_REG_STATUS1 = 4,
+	MAX77693_MUIC_REG_STATUS2 = 5,
+	MAX77693_MUIC_REG_STATUS3 = 6,
+	MAX77693_MUIC_REG_INTMASK1 = 7,
+	MAX77693_MUIC_REG_INTMASK2 = 8,
+	MAX77693_MUIC_REG_INTMASK3 = 9,
+	MAX77693_MUIC_REG_CDETCTRL1 = 10,
+	MAX77693_MUIC_REG_CDETCTRL2 = 11,
+	MAX77693_MUIC_REG_CTRL1 = 12,
+	MAX77693_MUIC_REG_CTRL2 = 13,
+	MAX77693_MUIC_REG_CTRL3 = 14,
+	MAX77693_MUIC_REG_END = 15,
+};
+
+enum max77693_haptic_reg {
+	MAX77693_HAPTIC_REG_STATUS = 0,
+	MAX77693_HAPTIC_REG_CONFIG1 = 1,
+	MAX77693_HAPTIC_REG_CONFIG2 = 2,
+	MAX77693_HAPTIC_REG_CONFIG_CHNL = 3,
+	MAX77693_HAPTIC_REG_CONFG_CYC1 = 4,
+	MAX77693_HAPTIC_REG_CONFG_CYC2 = 5,
+	MAX77693_HAPTIC_REG_CONFIG_PER1 = 6,
+	MAX77693_HAPTIC_REG_CONFIG_PER2 = 7,
+	MAX77693_HAPTIC_REG_CONFIG_PER3 = 8,
+	MAX77693_HAPTIC_REG_CONFIG_PER4 = 9,
+	MAX77693_HAPTIC_REG_CONFIG_DUTY1 = 10,
+	MAX77693_HAPTIC_REG_CONFIG_DUTY2 = 11,
+	MAX77693_HAPTIC_REG_CONFIG_PWM1 = 12,
+	MAX77693_HAPTIC_REG_CONFIG_PWM2 = 13,
+	MAX77693_HAPTIC_REG_CONFIG_PWM3 = 14,
+	MAX77693_HAPTIC_REG_CONFIG_PWM4 = 15,
+	MAX77693_HAPTIC_REG_REV = 16,
+	MAX77693_HAPTIC_REG_END = 17,
+};
+
+enum max77843_sys_reg {
+	MAX77843_SYS_REG_PMICID = 0,
+	MAX77843_SYS_REG_PMICREV = 1,
+	MAX77843_SYS_REG_MAINCTRL1 = 2,
+	MAX77843_SYS_REG_INTSRC = 34,
+	MAX77843_SYS_REG_INTSRCMASK = 35,
+	MAX77843_SYS_REG_SYSINTSRC = 36,
+	MAX77843_SYS_REG_SYSINTMASK = 38,
+	MAX77843_SYS_REG_TOPSYS_STAT = 40,
+	MAX77843_SYS_REG_SAFEOUTCTRL = 198,
+	MAX77843_SYS_REG_END = 199,
+};
+
+enum max77843_charger_reg {
+	MAX77843_CHG_REG_CHG_INT = 176,
+	MAX77843_CHG_REG_CHG_INT_MASK = 177,
+	MAX77843_CHG_REG_CHG_INT_OK = 178,
+	MAX77843_CHG_REG_CHG_DTLS_00 = 179,
+	MAX77843_CHG_REG_CHG_DTLS_01 = 180,
+	MAX77843_CHG_REG_CHG_DTLS_02 = 181,
+	MAX77843_CHG_REG_CHG_CNFG_00 = 183,
+	MAX77843_CHG_REG_CHG_CNFG_01 = 184,
+	MAX77843_CHG_REG_CHG_CNFG_02 = 185,
+	MAX77843_CHG_REG_CHG_CNFG_03 = 186,
+	MAX77843_CHG_REG_CHG_CNFG_04 = 187,
+	MAX77843_CHG_REG_CHG_CNFG_06 = 189,
+	MAX77843_CHG_REG_CHG_CNFG_07 = 190,
+	MAX77843_CHG_REG_CHG_CNFG_09 = 192,
+	MAX77843_CHG_REG_CHG_CNFG_10 = 193,
+	MAX77843_CHG_REG_CHG_CNFG_11 = 194,
+	MAX77843_CHG_REG_CHG_CNFG_12 = 195,
+	MAX77843_CHG_REG_END = 196,
+};
+
+enum {
+	MAX8925_IRQ_VCHG_DC_OVP = 0,
+	MAX8925_IRQ_VCHG_DC_F = 1,
+	MAX8925_IRQ_VCHG_DC_R = 2,
+	MAX8925_IRQ_VCHG_THM_OK_R = 3,
+	MAX8925_IRQ_VCHG_THM_OK_F = 4,
+	MAX8925_IRQ_VCHG_SYSLOW_F = 5,
+	MAX8925_IRQ_VCHG_SYSLOW_R = 6,
+	MAX8925_IRQ_VCHG_RST = 7,
+	MAX8925_IRQ_VCHG_DONE = 8,
+	MAX8925_IRQ_VCHG_TOPOFF = 9,
+	MAX8925_IRQ_VCHG_TMR_FAULT = 10,
+	MAX8925_IRQ_GPM_RSTIN = 11,
+	MAX8925_IRQ_GPM_MPL = 12,
+	MAX8925_IRQ_GPM_SW_3SEC = 13,
+	MAX8925_IRQ_GPM_EXTON_F = 14,
+	MAX8925_IRQ_GPM_EXTON_R = 15,
+	MAX8925_IRQ_GPM_SW_1SEC = 16,
+	MAX8925_IRQ_GPM_SW_F = 17,
+	MAX8925_IRQ_GPM_SW_R = 18,
+	MAX8925_IRQ_GPM_SYSCKEN_F = 19,
+	MAX8925_IRQ_GPM_SYSCKEN_R = 20,
+	MAX8925_IRQ_RTC_ALARM1 = 21,
+	MAX8925_IRQ_RTC_ALARM0 = 22,
+	MAX8925_IRQ_TSC_STICK = 23,
+	MAX8925_IRQ_TSC_NSTICK = 24,
+	MAX8925_NR_IRQS = 25,
+};
+
+struct max8925_chip {
+	struct device *dev;
+	struct i2c_client *i2c;
+	struct i2c_client *adc;
+	struct i2c_client *rtc;
+	struct mutex io_lock;
+	struct mutex irq_lock;
+	int irq_base;
+	int core_irq;
+	int tsc_irq;
+	unsigned int wakeup_flag;
+};
+
+struct max8925_backlight_pdata {
+	int lxw_scl;
+	int lxw_freq;
+	int dual_string;
+};
+
+struct max8925_touch_pdata {
+	unsigned int flags;
+};
+
+struct max8925_power_pdata {
+	int (*set_charger)(int);
+	unsigned int batt_detect: 1;
+	unsigned int topoff_threshold: 2;
+	unsigned int fast_charge: 3;
+	unsigned int no_temp_support: 1;
+	unsigned int no_insert_detect: 1;
+	char **supplied_to;
+	int num_supplicants;
+};
+
+struct max8925_platform_data {
+	struct max8925_backlight_pdata *backlight;
+	struct max8925_touch_pdata *touch;
+	struct max8925_power_pdata *power;
+	struct regulator_init_data *sd1;
+	struct regulator_init_data *sd2;
+	struct regulator_init_data *sd3;
+	struct regulator_init_data *ldo1;
+	struct regulator_init_data *ldo2;
+	struct regulator_init_data *ldo3;
+	struct regulator_init_data *ldo4;
+	struct regulator_init_data *ldo5;
+	struct regulator_init_data *ldo6;
+	struct regulator_init_data *ldo7;
+	struct regulator_init_data *ldo8;
+	struct regulator_init_data *ldo9;
+	struct regulator_init_data *ldo10;
+	struct regulator_init_data *ldo11;
+	struct regulator_init_data *ldo12;
+	struct regulator_init_data *ldo13;
+	struct regulator_init_data *ldo14;
+	struct regulator_init_data *ldo15;
+	struct regulator_init_data *ldo16;
+	struct regulator_init_data *ldo17;
+	struct regulator_init_data *ldo18;
+	struct regulator_init_data *ldo19;
+	struct regulator_init_data *ldo20;
+	int irq_base;
+	int tsc_irq;
+};
+
+enum {
+	FLAGS_ADC = 1,
+	FLAGS_RTC = 2,
+};
+
+struct max8925_irq_data {
+	int reg;
+	int mask_reg;
+	int enable;
+	int offs;
+	int flags;
+	int tsc_irq;
+};
+
+struct max8997_regulator_data {
+	int id;
+	struct regulator_init_data *initdata;
+	struct device_node *reg_node;
+};
+
+struct max8997_muic_reg_data {
+	u8 addr;
+	u8 data;
+};
+
+struct max8997_muic_platform_data {
+	struct max8997_muic_reg_data *init_data;
+	int num_init_data;
+	int detcable_delay_ms;
+	int path_usb;
+	int path_uart;
+};
+
+enum max8997_haptic_motor_type {
+	MAX8997_HAPTIC_ERM = 0,
+	MAX8997_HAPTIC_LRA = 1,
+};
+
+enum max8997_haptic_pulse_mode {
+	MAX8997_EXTERNAL_MODE = 0,
+	MAX8997_INTERNAL_MODE = 1,
+};
+
+enum max8997_haptic_pwm_divisor {
+	MAX8997_PWM_DIVISOR_32 = 0,
+	MAX8997_PWM_DIVISOR_64 = 1,
+	MAX8997_PWM_DIVISOR_128 = 2,
+	MAX8997_PWM_DIVISOR_256 = 3,
+};
+
+struct max8997_haptic_platform_data {
+	unsigned int pwm_channel_id;
+	unsigned int pwm_period;
+	enum max8997_haptic_motor_type type;
+	enum max8997_haptic_pulse_mode mode;
+	enum max8997_haptic_pwm_divisor pwm_divisor;
+	unsigned int internal_mode_pattern;
+	unsigned int pattern_cycle;
+	unsigned int pattern_signal_period;
+};
+
+enum max8997_led_mode {
+	MAX8997_NONE = 0,
+	MAX8997_FLASH_MODE = 1,
+	MAX8997_MOVIE_MODE = 2,
+	MAX8997_FLASH_PIN_CONTROL_MODE = 3,
+	MAX8997_MOVIE_PIN_CONTROL_MODE = 4,
+};
+
+struct max8997_led_platform_data {
+	enum max8997_led_mode mode[2];
+	u8 brightness[2];
+};
+
+struct max8997_platform_data {
+	int ono;
+	struct max8997_regulator_data *regulators;
+	int num_regulators;
+	bool ignore_gpiodvs_side_effect;
+	int buck125_gpios[3];
+	int buck125_default_idx;
+	unsigned int buck1_voltage[8];
+	bool buck1_gpiodvs;
+	unsigned int buck2_voltage[8];
+	bool buck2_gpiodvs;
+	unsigned int buck5_voltage[8];
+	bool buck5_gpiodvs;
+	int eoc_mA;
+	int timeout;
+	struct max8997_muic_platform_data *muic_pdata;
+	struct max8997_haptic_platform_data *haptic_pdata;
+	struct max8997_led_platform_data *led_pdata;
+};
+
+enum max8997_pmic_reg {
+	MAX8997_REG_PMIC_ID0 = 0,
+	MAX8997_REG_PMIC_ID1 = 1,
+	MAX8997_REG_INTSRC = 2,
+	MAX8997_REG_INT1 = 3,
+	MAX8997_REG_INT2 = 4,
+	MAX8997_REG_INT3 = 5,
+	MAX8997_REG_INT4 = 6,
+	MAX8997_REG_INT1MSK = 8,
+	MAX8997_REG_INT2MSK = 9,
+	MAX8997_REG_INT3MSK = 10,
+	MAX8997_REG_INT4MSK = 11,
+	MAX8997_REG_STATUS1 = 13,
+	MAX8997_REG_STATUS2 = 14,
+	MAX8997_REG_STATUS3 = 15,
+	MAX8997_REG_STATUS4 = 16,
+	MAX8997_REG_MAINCON1 = 19,
+	MAX8997_REG_MAINCON2 = 20,
+	MAX8997_REG_BUCKRAMP = 21,
+	MAX8997_REG_BUCK1CTRL = 24,
+	MAX8997_REG_BUCK1DVS1 = 25,
+	MAX8997_REG_BUCK1DVS2 = 26,
+	MAX8997_REG_BUCK1DVS3 = 27,
+	MAX8997_REG_BUCK1DVS4 = 28,
+	MAX8997_REG_BUCK1DVS5 = 29,
+	MAX8997_REG_BUCK1DVS6 = 30,
+	MAX8997_REG_BUCK1DVS7 = 31,
+	MAX8997_REG_BUCK1DVS8 = 32,
+	MAX8997_REG_BUCK2CTRL = 33,
+	MAX8997_REG_BUCK2DVS1 = 34,
+	MAX8997_REG_BUCK2DVS2 = 35,
+	MAX8997_REG_BUCK2DVS3 = 36,
+	MAX8997_REG_BUCK2DVS4 = 37,
+	MAX8997_REG_BUCK2DVS5 = 38,
+	MAX8997_REG_BUCK2DVS6 = 39,
+	MAX8997_REG_BUCK2DVS7 = 40,
+	MAX8997_REG_BUCK2DVS8 = 41,
+	MAX8997_REG_BUCK3CTRL = 42,
+	MAX8997_REG_BUCK3DVS = 43,
+	MAX8997_REG_BUCK4CTRL = 44,
+	MAX8997_REG_BUCK4DVS = 45,
+	MAX8997_REG_BUCK5CTRL = 46,
+	MAX8997_REG_BUCK5DVS1 = 47,
+	MAX8997_REG_BUCK5DVS2 = 48,
+	MAX8997_REG_BUCK5DVS3 = 49,
+	MAX8997_REG_BUCK5DVS4 = 50,
+	MAX8997_REG_BUCK5DVS5 = 51,
+	MAX8997_REG_BUCK5DVS6 = 52,
+	MAX8997_REG_BUCK5DVS7 = 53,
+	MAX8997_REG_BUCK5DVS8 = 54,
+	MAX8997_REG_BUCK6CTRL = 55,
+	MAX8997_REG_BUCK6BPSKIPCTRL = 56,
+	MAX8997_REG_BUCK7CTRL = 57,
+	MAX8997_REG_BUCK7DVS = 58,
+	MAX8997_REG_LDO1CTRL = 59,
+	MAX8997_REG_LDO2CTRL = 60,
+	MAX8997_REG_LDO3CTRL = 61,
+	MAX8997_REG_LDO4CTRL = 62,
+	MAX8997_REG_LDO5CTRL = 63,
+	MAX8997_REG_LDO6CTRL = 64,
+	MAX8997_REG_LDO7CTRL = 65,
+	MAX8997_REG_LDO8CTRL = 66,
+	MAX8997_REG_LDO9CTRL = 67,
+	MAX8997_REG_LDO10CTRL = 68,
+	MAX8997_REG_LDO11CTRL = 69,
+	MAX8997_REG_LDO12CTRL = 70,
+	MAX8997_REG_LDO13CTRL = 71,
+	MAX8997_REG_LDO14CTRL = 72,
+	MAX8997_REG_LDO15CTRL = 73,
+	MAX8997_REG_LDO16CTRL = 74,
+	MAX8997_REG_LDO17CTRL = 75,
+	MAX8997_REG_LDO18CTRL = 76,
+	MAX8997_REG_LDO21CTRL = 77,
+	MAX8997_REG_MBCCTRL1 = 80,
+	MAX8997_REG_MBCCTRL2 = 81,
+	MAX8997_REG_MBCCTRL3 = 82,
+	MAX8997_REG_MBCCTRL4 = 83,
+	MAX8997_REG_MBCCTRL5 = 84,
+	MAX8997_REG_MBCCTRL6 = 85,
+	MAX8997_REG_OTPCGHCVS = 86,
+	MAX8997_REG_SAFEOUTCTRL = 90,
+	MAX8997_REG_LBCNFG1 = 94,
+	MAX8997_REG_LBCNFG2 = 95,
+	MAX8997_REG_BBCCTRL = 96,
+	MAX8997_REG_FLASH1_CUR = 99,
+	MAX8997_REG_FLASH2_CUR = 100,
+	MAX8997_REG_MOVIE_CUR = 101,
+	MAX8997_REG_GSMB_CUR = 102,
+	MAX8997_REG_BOOST_CNTL = 103,
+	MAX8997_REG_LEN_CNTL = 104,
+	MAX8997_REG_FLASH_CNTL = 105,
+	MAX8997_REG_WDT_CNTL = 106,
+	MAX8997_REG_MAXFLASH1 = 107,
+	MAX8997_REG_MAXFLASH2 = 108,
+	MAX8997_REG_FLASHSTATUS = 109,
+	MAX8997_REG_FLASHSTATUSMASK = 110,
+	MAX8997_REG_GPIOCNTL1 = 112,
+	MAX8997_REG_GPIOCNTL2 = 113,
+	MAX8997_REG_GPIOCNTL3 = 114,
+	MAX8997_REG_GPIOCNTL4 = 115,
+	MAX8997_REG_GPIOCNTL5 = 116,
+	MAX8997_REG_GPIOCNTL6 = 117,
+	MAX8997_REG_GPIOCNTL7 = 118,
+	MAX8997_REG_GPIOCNTL8 = 119,
+	MAX8997_REG_GPIOCNTL9 = 120,
+	MAX8997_REG_GPIOCNTL10 = 121,
+	MAX8997_REG_GPIOCNTL11 = 122,
+	MAX8997_REG_GPIOCNTL12 = 123,
+	MAX8997_REG_LDO1CONFIG = 128,
+	MAX8997_REG_LDO2CONFIG = 129,
+	MAX8997_REG_LDO3CONFIG = 130,
+	MAX8997_REG_LDO4CONFIG = 131,
+	MAX8997_REG_LDO5CONFIG = 132,
+	MAX8997_REG_LDO6CONFIG = 133,
+	MAX8997_REG_LDO7CONFIG = 134,
+	MAX8997_REG_LDO8CONFIG = 135,
+	MAX8997_REG_LDO9CONFIG = 136,
+	MAX8997_REG_LDO10CONFIG = 137,
+	MAX8997_REG_LDO11CONFIG = 138,
+	MAX8997_REG_LDO12CONFIG = 139,
+	MAX8997_REG_LDO13CONFIG = 140,
+	MAX8997_REG_LDO14CONFIG = 141,
+	MAX8997_REG_LDO15CONFIG = 142,
+	MAX8997_REG_LDO16CONFIG = 143,
+	MAX8997_REG_LDO17CONFIG = 144,
+	MAX8997_REG_LDO18CONFIG = 145,
+	MAX8997_REG_LDO21CONFIG = 146,
+	MAX8997_REG_DVSOKTIMER1 = 151,
+	MAX8997_REG_DVSOKTIMER2 = 152,
+	MAX8997_REG_DVSOKTIMER4 = 153,
+	MAX8997_REG_DVSOKTIMER5 = 154,
+	MAX8997_REG_PMIC_END = 155,
+};
+
+enum max8997_muic_reg {
+	MAX8997_MUIC_REG_ID = 0,
+	MAX8997_MUIC_REG_INT1 = 1,
+	MAX8997_MUIC_REG_INT2 = 2,
+	MAX8997_MUIC_REG_INT3 = 3,
+	MAX8997_MUIC_REG_STATUS1 = 4,
+	MAX8997_MUIC_REG_STATUS2 = 5,
+	MAX8997_MUIC_REG_STATUS3 = 6,
+	MAX8997_MUIC_REG_INTMASK1 = 7,
+	MAX8997_MUIC_REG_INTMASK2 = 8,
+	MAX8997_MUIC_REG_INTMASK3 = 9,
+	MAX8997_MUIC_REG_CDETCTRL = 10,
+	MAX8997_MUIC_REG_CONTROL1 = 12,
+	MAX8997_MUIC_REG_CONTROL2 = 13,
+	MAX8997_MUIC_REG_CONTROL3 = 14,
+	MAX8997_MUIC_REG_END = 15,
+};
+
+enum max8997_haptic_reg {
+	MAX8997_HAPTIC_REG_GENERAL = 0,
+	MAX8997_HAPTIC_REG_CONF1 = 1,
+	MAX8997_HAPTIC_REG_CONF2 = 2,
+	MAX8997_HAPTIC_REG_DRVCONF = 3,
+	MAX8997_HAPTIC_REG_CYCLECONF1 = 4,
+	MAX8997_HAPTIC_REG_CYCLECONF2 = 5,
+	MAX8997_HAPTIC_REG_SIGCONF1 = 6,
+	MAX8997_HAPTIC_REG_SIGCONF2 = 7,
+	MAX8997_HAPTIC_REG_SIGCONF3 = 8,
+	MAX8997_HAPTIC_REG_SIGCONF4 = 9,
+	MAX8997_HAPTIC_REG_SIGDC1 = 10,
+	MAX8997_HAPTIC_REG_SIGDC2 = 11,
+	MAX8997_HAPTIC_REG_SIGPWMDC1 = 12,
+	MAX8997_HAPTIC_REG_SIGPWMDC2 = 13,
+	MAX8997_HAPTIC_REG_SIGPWMDC3 = 14,
+	MAX8997_HAPTIC_REG_SIGPWMDC4 = 15,
+	MAX8997_HAPTIC_REG_MTR_REV = 16,
+	MAX8997_HAPTIC_REG_END = 17,
+};
+
+enum max8997_irq_source {
+	PMIC_INT1 = 0,
+	PMIC_INT2 = 1,
+	PMIC_INT3 = 2,
+	PMIC_INT4 = 3,
+	FUEL_GAUGE = 4,
+	MUIC_INT1 = 5,
+	MUIC_INT2 = 6,
+	MUIC_INT3 = 7,
+	GPIO_LOW = 8,
+	GPIO_HI = 9,
+	FLASH_STATUS = 10,
+	MAX8997_IRQ_GROUP_NR = 11,
+};
+
+struct max8997_dev {
+	struct device *dev;
+	struct max8997_platform_data *pdata;
+	struct i2c_client *i2c;
+	struct i2c_client *rtc;
+	struct i2c_client *haptic;
+	struct i2c_client *muic;
+	struct mutex iolock;
+	long unsigned int type;
+	struct platform_device *battery;
+	int irq;
+	int ono;
+	struct irq_domain *irq_domain;
+	struct mutex irqlock;
+	int irq_masks_cur[11];
+	int irq_masks_cache[11];
+	u8 reg_dump[187];
+	bool gpio_status[12];
+};
+
+enum max8997_types {
+	TYPE_MAX8997 = 0,
+	TYPE_MAX8966 = 1,
+};
+
+enum max8997_irq {
+	MAX8997_PMICIRQ_PWRONR = 0,
+	MAX8997_PMICIRQ_PWRONF = 1,
+	MAX8997_PMICIRQ_PWRON1SEC = 2,
+	MAX8997_PMICIRQ_JIGONR = 3,
+	MAX8997_PMICIRQ_JIGONF = 4,
+	MAX8997_PMICIRQ_LOWBAT2 = 5,
+	MAX8997_PMICIRQ_LOWBAT1 = 6,
+	MAX8997_PMICIRQ_JIGR = 7,
+	MAX8997_PMICIRQ_JIGF = 8,
+	MAX8997_PMICIRQ_MR = 9,
+	MAX8997_PMICIRQ_DVS1OK = 10,
+	MAX8997_PMICIRQ_DVS2OK = 11,
+	MAX8997_PMICIRQ_DVS3OK = 12,
+	MAX8997_PMICIRQ_DVS4OK = 13,
+	MAX8997_PMICIRQ_CHGINS = 14,
+	MAX8997_PMICIRQ_CHGRM = 15,
+	MAX8997_PMICIRQ_DCINOVP = 16,
+	MAX8997_PMICIRQ_TOPOFFR = 17,
+	MAX8997_PMICIRQ_CHGRSTF = 18,
+	MAX8997_PMICIRQ_MBCHGTMEXPD = 19,
+	MAX8997_PMICIRQ_RTC60S = 20,
+	MAX8997_PMICIRQ_RTCA1 = 21,
+	MAX8997_PMICIRQ_RTCA2 = 22,
+	MAX8997_PMICIRQ_SMPL_INT = 23,
+	MAX8997_PMICIRQ_RTC1S = 24,
+	MAX8997_PMICIRQ_WTSR = 25,
+	MAX8997_MUICIRQ_ADCError = 26,
+	MAX8997_MUICIRQ_ADCLow = 27,
+	MAX8997_MUICIRQ_ADC = 28,
+	MAX8997_MUICIRQ_VBVolt = 29,
+	MAX8997_MUICIRQ_DBChg = 30,
+	MAX8997_MUICIRQ_DCDTmr = 31,
+	MAX8997_MUICIRQ_ChgDetRun = 32,
+	MAX8997_MUICIRQ_ChgTyp = 33,
+	MAX8997_MUICIRQ_OVP = 34,
+	MAX8997_IRQ_NR = 35,
+};
+
+struct max8997_irq_data {
+	int mask;
+	enum max8997_irq_source group;
+};
+
+struct max8998_regulator_data {
+	int id;
+	struct regulator_init_data *initdata;
+	struct device_node *reg_node;
+};
+
+struct max8998_platform_data {
+	struct max8998_regulator_data *regulators;
+	int num_regulators;
+	unsigned int irq_base;
+	int ono;
+	bool buck_voltage_lock;
+	int buck1_voltage[4];
+	int buck2_voltage[2];
+	int buck1_set1;
+	int buck1_set2;
+	int buck1_default_idx;
+	int buck2_set3;
+	int buck2_default_idx;
+	bool wakeup;
+	bool rtc_delay;
+	int eoc;
+	int restart;
+	int timeout;
+};
+
+enum {
+	MAX8998_REG_IRQ1 = 0,
+	MAX8998_REG_IRQ2 = 1,
+	MAX8998_REG_IRQ3 = 2,
+	MAX8998_REG_IRQ4 = 3,
+	MAX8998_REG_IRQM1 = 4,
+	MAX8998_REG_IRQM2 = 5,
+	MAX8998_REG_IRQM3 = 6,
+	MAX8998_REG_IRQM4 = 7,
+	MAX8998_REG_STATUS1 = 8,
+	MAX8998_REG_STATUS2 = 9,
+	MAX8998_REG_STATUSM1 = 10,
+	MAX8998_REG_STATUSM2 = 11,
+	MAX8998_REG_CHGR1 = 12,
+	MAX8998_REG_CHGR2 = 13,
+	MAX8998_REG_LDO_ACTIVE_DISCHARGE1 = 14,
+	MAX8998_REG_LDO_ACTIVE_DISCHARGE2 = 15,
+	MAX8998_REG_BUCK_ACTIVE_DISCHARGE3 = 16,
+	MAX8998_REG_ONOFF1 = 17,
+	MAX8998_REG_ONOFF2 = 18,
+	MAX8998_REG_ONOFF3 = 19,
+	MAX8998_REG_ONOFF4 = 20,
+	MAX8998_REG_BUCK1_VOLTAGE1 = 21,
+	MAX8998_REG_BUCK1_VOLTAGE2 = 22,
+	MAX8998_REG_BUCK1_VOLTAGE3 = 23,
+	MAX8998_REG_BUCK1_VOLTAGE4 = 24,
+	MAX8998_REG_BUCK2_VOLTAGE1 = 25,
+	MAX8998_REG_BUCK2_VOLTAGE2 = 26,
+	MAX8998_REG_BUCK3 = 27,
+	MAX8998_REG_BUCK4 = 28,
+	MAX8998_REG_LDO2_LDO3 = 29,
+	MAX8998_REG_LDO4 = 30,
+	MAX8998_REG_LDO5 = 31,
+	MAX8998_REG_LDO6 = 32,
+	MAX8998_REG_LDO7 = 33,
+	MAX8998_REG_LDO8_LDO9 = 34,
+	MAX8998_REG_LDO10_LDO11 = 35,
+	MAX8998_REG_LDO12 = 36,
+	MAX8998_REG_LDO13 = 37,
+	MAX8998_REG_LDO14 = 38,
+	MAX8998_REG_LDO15 = 39,
+	MAX8998_REG_LDO16 = 40,
+	MAX8998_REG_LDO17 = 41,
+	MAX8998_REG_BKCHR = 42,
+	MAX8998_REG_LBCNFG1 = 43,
+	MAX8998_REG_LBCNFG2 = 44,
+};
+
+enum {
+	TYPE_MAX8998 = 0,
+	TYPE_LP3974 = 1,
+	TYPE_LP3979 = 2,
+};
+
+struct max8998_dev {
+	struct device *dev;
+	struct max8998_platform_data *pdata;
+	struct i2c_client *i2c;
+	struct i2c_client *rtc;
+	struct mutex iolock;
+	struct mutex irqlock;
+	unsigned int irq_base;
+	struct irq_domain *irq_domain;
+	int irq;
+	int ono;
+	u8 irq_masks_cur[4];
+	u8 irq_masks_cache[4];
+	long unsigned int type;
+	bool wakeup;
+};
+
+struct max8998_reg_dump {
+	u8 addr;
+	u8 val;
+};
+
+enum {
+	MAX8998_IRQ_DCINF = 0,
+	MAX8998_IRQ_DCINR = 1,
+	MAX8998_IRQ_JIGF = 2,
+	MAX8998_IRQ_JIGR = 3,
+	MAX8998_IRQ_PWRONF = 4,
+	MAX8998_IRQ_PWRONR = 5,
+	MAX8998_IRQ_WTSREVNT = 6,
+	MAX8998_IRQ_SMPLEVNT = 7,
+	MAX8998_IRQ_ALARM1 = 8,
+	MAX8998_IRQ_ALARM0 = 9,
+	MAX8998_IRQ_ONKEY1S = 10,
+	MAX8998_IRQ_TOPOFFR = 11,
+	MAX8998_IRQ_DCINOVPR = 12,
+	MAX8998_IRQ_CHGRSTF = 13,
+	MAX8998_IRQ_DONER = 14,
+	MAX8998_IRQ_CHGFAULT = 15,
+	MAX8998_IRQ_LOBAT1 = 16,
+	MAX8998_IRQ_LOBAT2 = 17,
+	MAX8998_IRQ_NR = 18,
+};
+
+struct max8998_irq_data {
+	int reg;
+	int mask;
+};
+
+struct max8997_dev___2;
+
+struct adp5520_gpio_platform_data {
+	unsigned int gpio_start;
+	u8 gpio_en_mask;
+	u8 gpio_pullup_mask;
+};
+
+struct adp5520_keys_platform_data {
+	int rows_en_mask;
+	int cols_en_mask;
+	const short unsigned int *keymap;
+	short unsigned int keymapsize;
+	unsigned int repeat: 1;
+};
+
+struct led_info;
+
+struct adp5520_leds_platform_data {
+	int num_leds;
+	struct led_info *leds;
+	u8 fade_in;
+	u8 fade_out;
+	u8 led_on_time;
+};
+
+struct adp5520_backlight_platform_data {
+	u8 fade_in;
+	u8 fade_out;
+	u8 fade_led_law;
+	u8 en_ambl_sens;
+	u8 abml_filt;
+	u8 l1_daylight_max;
+	u8 l1_daylight_dim;
+	u8 l2_office_max;
+	u8 l2_office_dim;
+	u8 l3_dark_max;
+	u8 l3_dark_dim;
+	u8 l2_trip;
+	u8 l2_hyst;
+	u8 l3_trip;
+	u8 l3_hyst;
+};
+
+struct adp5520_platform_data {
+	struct adp5520_keys_platform_data *keys;
+	struct adp5520_gpio_platform_data *gpio;
+	struct adp5520_leds_platform_data *leds;
+	struct adp5520_backlight_platform_data *backlight;
+};
+
+struct adp5520_chip {
+	struct i2c_client *client;
+	struct device *dev;
+	struct mutex lock;
+	struct blocking_notifier_head notifier_list;
+	int irq;
+	long unsigned int id;
+	uint8_t mode;
+};
+
+struct tps6586x_irq_data {
+	u8 mask_reg;
+	u8 mask_mask;
+};
+
+struct tps6586x {
+	struct device *dev;
+	struct i2c_client *client;
+	struct regmap *regmap;
+	int version;
+	int irq;
+	struct irq_chip irq_chip;
+	struct mutex irq_lock;
+	int irq_base;
+	u32 irq_en;
+	u8 mask_reg[5];
+	struct irq_domain *irq_domain;
+};
+
+enum {
+	TPS65090_IRQ_INTERRUPT = 0,
+	TPS65090_IRQ_VAC_STATUS_CHANGE = 1,
+	TPS65090_IRQ_VSYS_STATUS_CHANGE = 2,
+	TPS65090_IRQ_BAT_STATUS_CHANGE = 3,
+	TPS65090_IRQ_CHARGING_STATUS_CHANGE = 4,
+	TPS65090_IRQ_CHARGING_COMPLETE = 5,
+	TPS65090_IRQ_OVERLOAD_DCDC1 = 6,
+	TPS65090_IRQ_OVERLOAD_DCDC2 = 7,
+	TPS65090_IRQ_OVERLOAD_DCDC3 = 8,
+	TPS65090_IRQ_OVERLOAD_FET1 = 9,
+	TPS65090_IRQ_OVERLOAD_FET2 = 10,
+	TPS65090_IRQ_OVERLOAD_FET3 = 11,
+	TPS65090_IRQ_OVERLOAD_FET4 = 12,
+	TPS65090_IRQ_OVERLOAD_FET5 = 13,
+	TPS65090_IRQ_OVERLOAD_FET6 = 14,
+	TPS65090_IRQ_OVERLOAD_FET7 = 15,
+};
+
+enum {
+	TPS65090_REGULATOR_DCDC1 = 0,
+	TPS65090_REGULATOR_DCDC2 = 1,
+	TPS65090_REGULATOR_DCDC3 = 2,
+	TPS65090_REGULATOR_FET1 = 3,
+	TPS65090_REGULATOR_FET2 = 4,
+	TPS65090_REGULATOR_FET3 = 5,
+	TPS65090_REGULATOR_FET4 = 6,
+	TPS65090_REGULATOR_FET5 = 7,
+	TPS65090_REGULATOR_FET6 = 8,
+	TPS65090_REGULATOR_FET7 = 9,
+	TPS65090_REGULATOR_LDO1 = 10,
+	TPS65090_REGULATOR_LDO2 = 11,
+	TPS65090_REGULATOR_MAX = 12,
+};
+
+struct tps65090 {
+	struct device *dev;
+	struct regmap *rmap;
+	struct regmap_irq_chip_data *irq_data;
+};
+
+struct tps65090_regulator_plat_data {
+	struct regulator_init_data *reg_init_data;
+	bool enable_ext_control;
+	struct gpio_desc *gpiod;
+	bool overcurrent_wait_valid;
+	int overcurrent_wait;
+};
+
+struct tps65090_platform_data {
+	int irq_base;
+	char **supplied_to;
+	size_t num_supplicants;
+	int enable_low_current_chrg;
+	struct tps65090_regulator_plat_data *reg_pdata[12];
+};
+
+enum tps65090_cells {
+	PMIC = 0,
+	CHARGER = 1,
+};
+
+enum aat2870_id {
+	AAT2870_ID_BL = 0,
+	AAT2870_ID_LDOA = 1,
+	AAT2870_ID_LDOB = 2,
+	AAT2870_ID_LDOC = 3,
+	AAT2870_ID_LDOD = 4,
+};
+
+struct aat2870_register {
+	bool readable;
+	bool writeable;
+	u8 value;
+};
+
+struct aat2870_data {
+	struct device *dev;
+	struct i2c_client *client;
+	struct mutex io_lock;
+	struct aat2870_register *reg_cache;
+	int en_pin;
+	bool is_enable;
+	int (*init)(struct aat2870_data *);
+	void (*uninit)(struct aat2870_data *);
+	int (*read)(struct aat2870_data *, u8, u8 *);
+	int (*write)(struct aat2870_data *, u8, u8);
+	int (*update)(struct aat2870_data *, u8, u8, u8);
+	struct dentry *dentry_root;
+};
+
+struct aat2870_subdev_info {
+	int id;
+	const char *name;
+	void *platform_data;
+};
+
+struct aat2870_platform_data {
+	int en_pin;
+	struct aat2870_subdev_info *subdevs;
+	int num_subdevs;
+	int (*init)(struct aat2870_data *);
+	void (*uninit)(struct aat2870_data *);
+};
+
+enum {
+	PALMAS_EXT_CONTROL_ENABLE1 = 1,
+	PALMAS_EXT_CONTROL_ENABLE2 = 2,
+	PALMAS_EXT_CONTROL_NSLEEP = 4,
+};
+
+enum palmas_external_requestor_id {
+	PALMAS_EXTERNAL_REQSTR_ID_REGEN1 = 0,
+	PALMAS_EXTERNAL_REQSTR_ID_REGEN2 = 1,
+	PALMAS_EXTERNAL_REQSTR_ID_SYSEN1 = 2,
+	PALMAS_EXTERNAL_REQSTR_ID_SYSEN2 = 3,
+	PALMAS_EXTERNAL_REQSTR_ID_CLK32KG = 4,
+	PALMAS_EXTERNAL_REQSTR_ID_CLK32KGAUDIO = 5,
+	PALMAS_EXTERNAL_REQSTR_ID_REGEN3 = 6,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS12 = 7,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS3 = 8,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS45 = 9,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS6 = 10,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS7 = 11,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS8 = 12,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS9 = 13,
+	PALMAS_EXTERNAL_REQSTR_ID_SMPS10 = 14,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO1 = 15,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO2 = 16,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO3 = 17,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO4 = 18,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO5 = 19,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO6 = 20,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO7 = 21,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO8 = 22,
+	PALMAS_EXTERNAL_REQSTR_ID_LDO9 = 23,
+	PALMAS_EXTERNAL_REQSTR_ID_LDOLN = 24,
+	PALMAS_EXTERNAL_REQSTR_ID_LDOUSB = 25,
+	PALMAS_EXTERNAL_REQSTR_ID_MAX = 26,
+};
+
+enum tps65917_irqs {
+	TPS65917_RESERVED1 = 0,
+	TPS65917_PWRON_IRQ = 1,
+	TPS65917_LONG_PRESS_KEY_IRQ = 2,
+	TPS65917_RESERVED2 = 3,
+	TPS65917_PWRDOWN_IRQ = 4,
+	TPS65917_HOTDIE_IRQ = 5,
+	TPS65917_VSYS_MON_IRQ = 6,
+	TPS65917_RESERVED3 = 7,
+	TPS65917_RESERVED4 = 8,
+	TPS65917_OTP_ERROR_IRQ = 9,
+	TPS65917_WDT_IRQ = 10,
+	TPS65917_RESERVED5 = 11,
+	TPS65917_RESET_IN_IRQ = 12,
+	TPS65917_FSD_IRQ = 13,
+	TPS65917_SHORT_IRQ = 14,
+	TPS65917_RESERVED6 = 15,
+	TPS65917_GPADC_AUTO_0_IRQ = 16,
+	TPS65917_GPADC_AUTO_1_IRQ = 17,
+	TPS65917_GPADC_EOC_SW_IRQ = 18,
+	TPS65917_RESREVED6 = 19,
+	TPS65917_RESERVED7 = 20,
+	TPS65917_RESERVED8 = 21,
+	TPS65917_RESERVED9 = 22,
+	TPS65917_VBUS_IRQ = 23,
+	TPS65917_GPIO_0_IRQ = 24,
+	TPS65917_GPIO_1_IRQ = 25,
+	TPS65917_GPIO_2_IRQ = 26,
+	TPS65917_GPIO_3_IRQ = 27,
+	TPS65917_GPIO_4_IRQ = 28,
+	TPS65917_GPIO_5_IRQ = 29,
+	TPS65917_GPIO_6_IRQ = 30,
+	TPS65917_RESERVED10 = 31,
+	TPS65917_NUM_IRQ = 32,
+};
+
+struct palmas_driver_data {
+	unsigned int *features;
+	struct regmap_irq_chip *irq_chip;
+};
+
+enum {
+	RC5T583_DS_NONE = 0,
+	RC5T583_DS_DC0 = 1,
+	RC5T583_DS_DC1 = 2,
+	RC5T583_DS_DC2 = 3,
+	RC5T583_DS_DC3 = 4,
+	RC5T583_DS_LDO0 = 5,
+	RC5T583_DS_LDO1 = 6,
+	RC5T583_DS_LDO2 = 7,
+	RC5T583_DS_LDO3 = 8,
+	RC5T583_DS_LDO4 = 9,
+	RC5T583_DS_LDO5 = 10,
+	RC5T583_DS_LDO6 = 11,
+	RC5T583_DS_LDO7 = 12,
+	RC5T583_DS_LDO8 = 13,
+	RC5T583_DS_LDO9 = 14,
+	RC5T583_DS_PSO0 = 15,
+	RC5T583_DS_PSO1 = 16,
+	RC5T583_DS_PSO2 = 17,
+	RC5T583_DS_PSO3 = 18,
+	RC5T583_DS_PSO4 = 19,
+	RC5T583_DS_PSO5 = 20,
+	RC5T583_DS_PSO6 = 21,
+	RC5T583_DS_PSO7 = 22,
+	RC5T583_DS_MAX = 23,
+};
+
+enum {
+	RC5T583_EXT_PWRREQ1_CONTROL = 1,
+	RC5T583_EXT_PWRREQ2_CONTROL = 2,
+};
+
+struct deepsleep_control_data {
+	u8 reg_add;
+	u8 ds_pos_bit;
+};
+
+enum int_type {
+	SYS_INT = 1,
+	DCDC_INT = 2,
+	RTC_INT = 4,
+	ADC_INT = 8,
+	GPIO_INT = 16,
+};
+
+struct rc5t583_irq_data {
+	u8 int_type;
+	u8 master_bit;
+	u8 int_en_bit;
+	u8 mask_reg_index;
+	int grp_index;
+};
+
 struct syscon_platform_data {
 	const char *label;
 };
@@ -84455,21 +99759,813 @@
 	struct list_head list;
 };
 
-struct dax_device___2;
-
-struct dax_operations {
-	long int (*direct_access)(struct dax_device___2 *, long unsigned int, long int, void **, pfn_t *);
-	bool (*dax_supported)(struct dax_device___2 *, struct block_device *, int, sector_t, sector_t);
-	size_t (*copy_from_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	size_t (*copy_to_iter)(struct dax_device___2 *, long unsigned int, void *, size_t, struct iov_iter *);
-	int (*zero_page_range)(struct dax_device___2 *, long unsigned int, size_t);
+enum {
+	AS3711_REGULATOR_SD_1 = 0,
+	AS3711_REGULATOR_SD_2 = 1,
+	AS3711_REGULATOR_SD_3 = 2,
+	AS3711_REGULATOR_SD_4 = 3,
+	AS3711_REGULATOR_LDO_1 = 4,
+	AS3711_REGULATOR_LDO_2 = 5,
+	AS3711_REGULATOR_LDO_3 = 6,
+	AS3711_REGULATOR_LDO_4 = 7,
+	AS3711_REGULATOR_LDO_5 = 8,
+	AS3711_REGULATOR_LDO_6 = 9,
+	AS3711_REGULATOR_LDO_7 = 10,
+	AS3711_REGULATOR_LDO_8 = 11,
+	AS3711_REGULATOR_MAX = 12,
 };
 
-struct dax_device___2 {
-	struct hlist_node list;
+struct as3711 {
+	struct device *dev;
+	struct regmap *regmap;
+};
+
+enum as3711_su2_feedback {
+	AS3711_SU2_VOLTAGE = 0,
+	AS3711_SU2_CURR1 = 1,
+	AS3711_SU2_CURR2 = 2,
+	AS3711_SU2_CURR3 = 3,
+	AS3711_SU2_CURR_AUTO = 4,
+};
+
+enum as3711_su2_fbprot {
+	AS3711_SU2_LX_SD4 = 0,
+	AS3711_SU2_GPIO2 = 1,
+	AS3711_SU2_GPIO3 = 2,
+	AS3711_SU2_GPIO4 = 3,
+};
+
+struct as3711_regulator_pdata {
+	struct regulator_init_data *init_data[12];
+};
+
+struct as3711_bl_pdata {
+	bool su1_fb;
+	int su1_max_uA;
+	bool su2_fb;
+	int su2_max_uA;
+	enum as3711_su2_feedback su2_feedback;
+	enum as3711_su2_fbprot su2_fbprot;
+	bool su2_auto_curr1;
+	bool su2_auto_curr2;
+	bool su2_auto_curr3;
+};
+
+struct as3711_platform_data {
+	struct as3711_regulator_pdata regulator;
+	struct as3711_bl_pdata backlight;
+};
+
+enum {
+	AS3711_REGULATOR = 0,
+	AS3711_BACKLIGHT = 1,
+};
+
+struct intel_soc_pmic_config {
+	long unsigned int irq_flags;
+	struct mfd_cell *cell_dev;
+	int n_cell_devs;
+	const struct regmap_config *regmap_config;
+	const struct regmap_irq_chip *irq_chip;
+};
+
+enum {
+	CHT_WC_PWRSRC_IRQ = 0,
+	CHT_WC_THRM_IRQ = 1,
+	CHT_WC_BCU_IRQ = 2,
+	CHT_WC_ADC_IRQ = 3,
+	CHT_WC_EXT_CHGR_IRQ = 4,
+	CHT_WC_GPIO_IRQ = 5,
+	CHT_WC_CRIT_IRQ = 7,
+};
+
+struct badrange {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct nvdimm_bus_descriptor;
+
+struct nvdimm;
+
+typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *, unsigned int, int *);
+
+struct nvdimm_bus_fw_ops;
+
+struct nvdimm_bus_descriptor {
+	const struct attribute_group **attr_groups;
+	long unsigned int cmd_mask;
+	long unsigned int dimm_family_mask;
+	long unsigned int bus_family_mask;
+	struct module *module;
+	char *provider_name;
+	struct device_node *of_node;
+	ndctl_fn ndctl;
+	int (*flush_probe)(struct nvdimm_bus_descriptor *);
+	int (*clear_to_send)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *);
+	const struct nvdimm_bus_fw_ops *fw_ops;
+};
+
+struct nvdimm_security_ops;
+
+struct nvdimm_fw_ops;
+
+struct nvdimm {
+	long unsigned int flags;
+	void *provider_data;
+	long unsigned int cmd_mask;
+	struct device dev;
+	atomic_t busy;
+	int id;
+	int num_flush;
+	struct resource *flush_wpq;
+	const char *dimm_id;
+	struct {
+		const struct nvdimm_security_ops *ops;
+		long unsigned int flags;
+		long unsigned int ext_flags;
+		unsigned int overwrite_tmo;
+		struct kernfs_node *overwrite_state;
+	} sec;
+	struct delayed_work dwork;
+	const struct nvdimm_fw_ops *fw_ops;
+};
+
+enum nvdimm_fwa_state {
+	NVDIMM_FWA_INVALID = 0,
+	NVDIMM_FWA_IDLE = 1,
+	NVDIMM_FWA_ARMED = 2,
+	NVDIMM_FWA_BUSY = 3,
+	NVDIMM_FWA_ARM_OVERFLOW = 4,
+};
+
+enum nvdimm_fwa_capability {
+	NVDIMM_FWA_CAP_INVALID = 0,
+	NVDIMM_FWA_CAP_NONE = 1,
+	NVDIMM_FWA_CAP_QUIESCE = 2,
+	NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+struct nvdimm_bus_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm_bus_descriptor *);
+	enum nvdimm_fwa_capability (*capability)(struct nvdimm_bus_descriptor *);
+	int (*activate)(struct nvdimm_bus_descriptor *);
+};
+
+struct nvdimm_key_data {
+	u8 data[32];
+};
+
+enum nvdimm_passphrase_type {
+	NVDIMM_USER = 0,
+	NVDIMM_MASTER = 1,
+};
+
+struct nvdimm_security_ops {
+	long unsigned int (*get_flags)(struct nvdimm *, enum nvdimm_passphrase_type);
+	int (*freeze)(struct nvdimm *);
+	int (*change_key)(struct nvdimm *, const struct nvdimm_key_data *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*unlock)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*disable)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*erase)(struct nvdimm *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*overwrite)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*query_overwrite)(struct nvdimm *);
+};
+
+enum nvdimm_fwa_trigger {
+	NVDIMM_FWA_ARM = 0,
+	NVDIMM_FWA_DISARM = 1,
+};
+
+enum nvdimm_fwa_result {
+	NVDIMM_FWA_RESULT_INVALID = 0,
+	NVDIMM_FWA_RESULT_NONE = 1,
+	NVDIMM_FWA_RESULT_SUCCESS = 2,
+	NVDIMM_FWA_RESULT_NOTSTAGED = 3,
+	NVDIMM_FWA_RESULT_NEEDRESET = 4,
+	NVDIMM_FWA_RESULT_FAIL = 5,
+};
+
+struct nvdimm_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm *);
+	enum nvdimm_fwa_result (*activate_result)(struct nvdimm *);
+	int (*arm)(struct nvdimm *, enum nvdimm_fwa_trigger);
+};
+
+enum {
+	ND_CMD_IMPLEMENTED = 0,
+	ND_CMD_ARS_CAP = 1,
+	ND_CMD_ARS_START = 2,
+	ND_CMD_ARS_STATUS = 3,
+	ND_CMD_CLEAR_ERROR = 4,
+	ND_CMD_SMART = 1,
+	ND_CMD_SMART_THRESHOLD = 2,
+	ND_CMD_DIMM_FLAGS = 3,
+	ND_CMD_GET_CONFIG_SIZE = 4,
+	ND_CMD_GET_CONFIG_DATA = 5,
+	ND_CMD_SET_CONFIG_DATA = 6,
+	ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+	ND_CMD_VENDOR_EFFECT_LOG = 8,
+	ND_CMD_VENDOR = 9,
+	ND_CMD_CALL = 10,
+};
+
+enum {
+	NSINDEX_SIG_LEN = 16,
+	NSINDEX_ALIGN = 256,
+	NSINDEX_SEQ_MASK = 3,
+	NSLABEL_UUID_LEN = 16,
+	NSLABEL_NAME_LEN = 64,
+	NSLABEL_FLAG_ROLABEL = 1,
+	NSLABEL_FLAG_LOCAL = 2,
+	NSLABEL_FLAG_BTT = 4,
+	NSLABEL_FLAG_UPDATING = 8,
+	BTT_ALIGN = 4096,
+	BTTINFO_SIG_LEN = 16,
+	BTTINFO_UUID_LEN = 16,
+	BTTINFO_FLAG_ERROR = 1,
+	BTTINFO_MAJOR_VERSION = 1,
+	ND_LABEL_MIN_SIZE = 1024,
+	ND_LABEL_ID_SIZE = 50,
+	ND_NSINDEX_INIT = 1,
+};
+
+struct nvdimm_bus {
+	struct nvdimm_bus_descriptor *nd_desc;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct device dev;
+	int id;
+	int probe_active;
+	atomic_t ioctl_active;
+	struct list_head mapping_list;
+	struct mutex reconfig_mutex;
+	struct badrange badrange;
+};
+
+struct nvdimm_map {
+	struct nvdimm_bus *nvdimm_bus;
+	struct list_head list;
+	resource_size_t offset;
+	long unsigned int flags;
+	size_t size;
+	union {
+		void *mem;
+		void *iomem;
+	};
+	struct kref kref;
+};
+
+struct badrange_entry {
+	u64 start;
+	u64 length;
+	struct list_head list;
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+struct nd_cmd_desc {
+	int in_num;
+	int out_num;
+	u32 in_sizes[5];
+	int out_sizes[5];
+};
+
+struct nd_interleave_set {
+	u64 cookie1;
+	u64 cookie2;
+	u64 altcookie;
+	guid_t type_guid;
+};
+
+struct nvdimm_drvdata;
+
+struct nd_mapping {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+	struct list_head labels;
+	struct mutex lock;
+	struct nvdimm_drvdata *ndd;
+};
+
+struct nd_percpu_lane;
+
+struct nd_region {
+	struct device dev;
+	struct ida ns_ida;
+	struct ida btt_ida;
+	struct ida pfn_ida;
+	struct ida dax_ida;
+	long unsigned int flags;
+	struct device *ns_seed;
+	struct device *btt_seed;
+	struct device *pfn_seed;
+	struct device *dax_seed;
+	long unsigned int align;
+	u16 ndr_mappings;
+	u64 ndr_size;
+	u64 ndr_start;
+	int id;
+	int num_lanes;
+	int ro;
+	int numa_node;
+	int target_node;
+	void *provider_data;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct nd_interleave_set *nd_set;
+	struct nd_percpu_lane *lane;
+	int (*flush)(struct nd_region *, struct bio *);
+	struct nd_mapping mapping[0];
+};
+
+struct nd_cmd_get_config_size {
+	__u32 status;
+	__u32 config_size;
+	__u32 max_xfer;
+};
+
+struct nd_cmd_set_config_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_vendor_hdr {
+	__u32 opcode;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_ars_cap {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u32 max_ars_out;
+	__u32 clear_err_unit;
+	__u16 flags;
+	__u16 reserved;
+};
+
+struct nd_cmd_clear_error {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u8 reserved[4];
+	__u64 cleared;
+};
+
+struct nd_cmd_pkg {
+	__u64 nd_family;
+	__u64 nd_command;
+	__u32 nd_size_in;
+	__u32 nd_size_out;
+	__u32 nd_reserved2[9];
+	__u32 nd_fw_size;
+	unsigned char nd_payload[0];
+};
+
+enum nvdimm_event {
+	NVDIMM_REVALIDATE_POISON = 0,
+	NVDIMM_REVALIDATE_REGION = 1,
+};
+
+enum nvdimm_claim_class {
+	NVDIMM_CCLASS_NONE = 0,
+	NVDIMM_CCLASS_BTT = 1,
+	NVDIMM_CCLASS_BTT2 = 2,
+	NVDIMM_CCLASS_PFN = 3,
+	NVDIMM_CCLASS_DAX = 4,
+	NVDIMM_CCLASS_UNKNOWN = 5,
+};
+
+struct nd_device_driver {
+	struct device_driver drv;
+	long unsigned int type;
+	int (*probe)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	void (*notify)(struct device *, enum nvdimm_event);
+};
+
+struct nd_namespace_common {
+	int force_raw;
+	struct device dev;
+	struct device *claim;
+	enum nvdimm_claim_class claim_class;
+	int (*rw_bytes)(struct nd_namespace_common *, resource_size_t, void *, size_t, int, long unsigned int);
+};
+
+struct nd_namespace_io {
+	struct nd_namespace_common common;
+	struct resource res;
+	resource_size_t size;
+	void *addr;
+	struct badblocks bb;
+};
+
+struct nvdimm_drvdata {
+	struct device *dev;
+	int nslabel_size;
+	struct nd_cmd_get_config_size nsarea;
+	void *data;
+	bool cxl;
+	int ns_current;
+	int ns_next;
+	struct resource dpa;
+	struct kref kref;
+};
+
+struct nd_percpu_lane {
+	int count;
+	spinlock_t lock;
+};
+
+struct btt;
+
+struct nd_btt {
+	struct device dev;
+	struct nd_namespace_common *ndns;
+	struct btt *btt;
+	long unsigned int lbasize;
+	u64 size;
+	uuid_t *uuid;
+	int id;
+	int initial_offset;
+	u16 version_major;
+	u16 version_minor;
+};
+
+enum nd_pfn_mode {
+	PFN_MODE_NONE = 0,
+	PFN_MODE_RAM = 1,
+	PFN_MODE_PMEM = 2,
+};
+
+struct nd_pfn_sb;
+
+struct nd_pfn {
+	int id;
+	uuid_t *uuid;
+	struct device dev;
+	long unsigned int align;
+	long unsigned int npfns;
+	enum nd_pfn_mode mode;
+	struct nd_pfn_sb *pfn_sb;
+	struct nd_namespace_common *ndns;
+};
+
+struct nd_pfn_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le64 dataoff;
+	__le64 npfns;
+	__le32 mode;
+	__le32 start_pad;
+	__le32 end_trunc;
+	__le32 align;
+	__le32 page_size;
+	__le16 page_struct_size;
+	u8 padding[3994];
+	__le64 checksum;
+};
+
+struct nd_dax {
+	struct nd_pfn nd_pfn;
+};
+
+enum nd_async_mode {
+	ND_SYNC = 0,
+	ND_ASYNC = 1,
+};
+
+struct clear_badblocks_context {
+	resource_size_t phys;
+	resource_size_t cleared;
+};
+
+enum nd_ioctl_mode {
+	BUS_IOCTL = 0,
+	DIMM_IOCTL = 1,
+};
+
+struct nd_cmd_get_config_data_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u32 status;
+	__u8 out_buf[0];
+};
+
+enum nvdimm_security_bits {
+	NVDIMM_SECURITY_DISABLED = 0,
+	NVDIMM_SECURITY_UNLOCKED = 1,
+	NVDIMM_SECURITY_LOCKED = 2,
+	NVDIMM_SECURITY_FROZEN = 3,
+	NVDIMM_SECURITY_OVERWRITE = 4,
+};
+
+struct nd_label_id {
+	char id[50];
+};
+
+struct nvdimm_pmu {
+	struct pmu pmu;
+	struct device *dev;
+	int cpu;
+	struct hlist_node node;
+	enum cpuhp_state cpuhp_state;
+	struct cpumask arch_cpumask;
+};
+
+enum {
+	CTL_RES_CNT = 1,
+};
+
+enum {
+	CTL_RES_TM = 2,
+};
+
+enum {
+	POWERON_SECS = 3,
+};
+
+enum {
+	MEM_LIFE = 4,
+};
+
+enum {
+	CRI_RES_UTIL = 5,
+};
+
+enum {
+	HOST_L_CNT = 6,
+};
+
+enum {
+	HOST_S_CNT = 7,
+};
+
+enum {
+	HOST_S_DUR = 8,
+};
+
+enum {
+	HOST_L_DUR = 9,
+};
+
+enum {
+	MED_R_CNT = 10,
+};
+
+enum {
+	MED_W_CNT = 11,
+};
+
+enum {
+	MED_R_DUR = 12,
+};
+
+enum {
+	MED_W_DUR = 13,
+};
+
+enum {
+	CACHE_RH_CNT = 14,
+};
+
+enum {
+	CACHE_WH_CNT = 15,
+};
+
+enum {
+	FAST_W_CNT = 16,
+};
+
+enum nd_driver_flags {
+	ND_DRIVER_DIMM = 2,
+	ND_DRIVER_REGION_PMEM = 4,
+	ND_DRIVER_REGION_BLK = 8,
+	ND_DRIVER_NAMESPACE_IO = 16,
+	ND_DRIVER_NAMESPACE_PMEM = 32,
+	ND_DRIVER_DAX_PMEM = 128,
+};
+
+struct nd_mapping_desc {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+};
+
+struct nd_region_desc {
+	struct resource *res;
+	struct nd_mapping_desc *mapping;
+	u16 num_mappings;
+	const struct attribute_group **attr_groups;
+	struct nd_interleave_set *nd_set;
+	void *provider_data;
+	int num_lanes;
+	int numa_node;
+	int target_node;
+	long unsigned int flags;
+	struct device_node *of_node;
+	int (*flush)(struct nd_region *, struct bio *);
+};
+
+struct nd_namespace_index {
+	u8 sig[16];
+	u8 flags[3];
+	u8 labelsize;
+	__le32 seq;
+	__le64 myoff;
+	__le64 mysize;
+	__le64 otheroff;
+	__le64 labeloff;
+	__le32 nslot;
+	__le16 major;
+	__le16 minor;
+	__le64 checksum;
+	u8 free[0];
+};
+
+struct nvdimm_efi_label {
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nlabel;
+	__le16 position;
+	__le64 isetcookie;
+	__le64 lbasize;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	u8 align;
+	u8 reserved[3];
+	guid_t type_guid;
+	guid_t abstraction_guid;
+	u8 reserved2[88];
+	__le64 checksum;
+};
+
+struct nvdimm_cxl_label {
+	u8 type[16];
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nrange;
+	__le16 position;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	__le32 align;
+	u8 region_uuid[16];
+	u8 abstraction_uuid[16];
+	__le16 lbasize;
+	u8 reserved[86];
+	__le64 checksum;
+};
+
+struct nd_namespace_label {
+	union {
+		struct nvdimm_cxl_label cxl;
+		struct nvdimm_efi_label efi;
+	};
+};
+
+enum {
+	ND_MAX_LANES = 256,
+	INT_LBASIZE_ALIGNMENT = 64,
+	NVDIMM_IO_ATOMIC = 1,
+};
+
+struct nd_region_data {
+	int ns_count;
+	int ns_active;
+	unsigned int hints_shift;
+	void *flush_wpq[0];
+};
+
+struct nd_label_ent {
+	struct list_head list;
+	long unsigned int flags;
+	struct nd_namespace_label *label;
+};
+
+struct conflict_context {
+	struct nd_region *nd_region;
+	resource_size_t start;
+	resource_size_t size;
+};
+
+enum {
+	ND_MIN_NAMESPACE_SIZE = 4096,
+};
+
+struct nd_namespace_pmem {
+	struct nd_namespace_io nsio;
+	long unsigned int lbasize;
+	char *alt_name;
+	uuid_t *uuid;
+	int id;
+};
+
+enum nd_label_flags {
+	ND_LABEL_REAP = 0,
+};
+
+enum alloc_loc {
+	ALLOC_ERR = 0,
+	ALLOC_BEFORE = 1,
+	ALLOC_MID = 2,
+	ALLOC_AFTER = 3,
+};
+
+struct btt {
+	struct gendisk *btt_disk;
+	struct list_head arena_list;
+	struct dentry *debugfs_dir;
+	struct nd_btt *nd_btt;
+	u64 nlba;
+	long long unsigned int rawsize;
+	u32 lbasize;
+	u32 sector_size;
+	struct nd_region *nd_region;
+	struct mutex init_lock;
+	int init_state;
+	int num_arenas;
+	struct badblocks *phys_bb;
+};
+
+struct nd_gen_sb {
+	char reserved[4088];
+	__le64 checksum;
+};
+
+struct btt_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le32 external_lbasize;
+	__le32 external_nlba;
+	__le32 internal_lbasize;
+	__le32 internal_nlba;
+	__le32 nfree;
+	__le32 infosize;
+	__le64 nextoff;
+	__le64 dataoff;
+	__le64 mapoff;
+	__le64 logoff;
+	__le64 info2off;
+	u8 padding[3968];
+	__le64 checksum;
+};
+
+enum nvdimmsec_op_ids {
+	OP_FREEZE = 0,
+	OP_DISABLE = 1,
+	OP_UPDATE = 2,
+	OP_ERASE = 3,
+	OP_OVERWRITE = 4,
+	OP_MASTER_UPDATE = 5,
+	OP_MASTER_ERASE = 6,
+};
+
+struct nvdimm_bus___2;
+
+struct dax_operations {
+	long int (*direct_access)(struct dax_device *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
+	int (*zero_page_range)(struct dax_device *, long unsigned int, size_t);
+	size_t (*recovery_write)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);
+};
+
+struct dax_device {
 	struct inode inode;
 	struct cdev cdev;
-	const char *host;
 	void *private;
 	long unsigned int flags;
 	const struct dax_operations *ops;
@@ -84479,6 +100575,8 @@
 	DAXDEV_ALIVE = 0,
 	DAXDEV_WRITE_CACHE = 1,
 	DAXDEV_SYNC = 2,
+	DAXDEV_NOCACHE = 3,
+	DAXDEV_NOMC = 4,
 };
 
 struct dax_region {
@@ -84518,15 +100616,9 @@
 	struct dev_dax_range *ranges;
 };
 
-enum dev_dax_subsys {
-	DEV_DAX_BUS = 0,
-	DEV_DAX_CLASS = 1,
-};
-
 struct dev_dax_data {
 	struct dax_region *dax_region;
 	struct dev_pagemap *pgmap;
-	enum dev_dax_subsys subsys;
 	resource_size_t size;
 	int id;
 };
@@ -84536,7 +100628,7 @@
 	struct list_head ids;
 	int match_always;
 	int (*probe)(struct dev_dax *);
-	int (*remove)(struct dev_dax *);
+	void (*remove)(struct dev_dax *);
 };
 
 struct dax_id {
@@ -84553,12 +100645,14 @@
 	int target_node;
 };
 
-struct seqcount_ww_mutex {
-	seqcount_t seqcount;
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
 };
 
-typedef struct seqcount_ww_mutex seqcount_ww_mutex_t;
-
 struct dma_fence_ops;
 
 struct dma_fence {
@@ -84588,13 +100682,6 @@
 	void (*timeline_value_str)(struct dma_fence *, char *, int);
 };
 
-enum dma_fence_flag_bits {
-	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
-	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
-	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
-	DMA_FENCE_FLAG_USER_BITS = 3,
-};
-
 struct dma_fence_cb;
 
 typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
@@ -84620,8 +100707,8 @@
 	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
 	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
 	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
-	void * (*vmap)(struct dma_buf *);
-	void (*vunmap)(struct dma_buf *, void *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
 };
 
 struct dma_buf_poll_cb_t {
@@ -84639,7 +100726,7 @@
 	const struct dma_buf_ops *ops;
 	struct mutex lock;
 	unsigned int vmapping_counter;
-	void *vmap_ptr;
+	struct iosys_map vmap_ptr;
 	const char *exp_name;
 	const char *name;
 	spinlock_t name_lock;
@@ -84648,8 +100735,8 @@
 	void *priv;
 	struct dma_resv *resv;
 	wait_queue_head_t poll;
-	struct dma_buf_poll_cb_t cb_excl;
-	struct dma_buf_poll_cb_t cb_shared;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
 };
 
 struct dma_buf_attach_ops;
@@ -84670,9 +100757,7 @@
 
 struct dma_resv {
 	struct ww_mutex lock;
-	seqcount_ww_mutex_t seq;
-	struct dma_fence *fence_excl;
-	struct dma_resv_list *fence;
+	struct dma_resv_list *fences;
 };
 
 struct dma_buf_attach_ops {
@@ -84690,11 +100775,22 @@
 	void *priv;
 };
 
-struct dma_resv_list {
-	struct callback_head rcu;
-	u32 shared_count;
-	u32 shared_max;
-	struct dma_fence *shared[0];
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
 };
 
 struct dma_buf_sync {
@@ -84706,6 +100802,13 @@
 	struct mutex lock;
 };
 
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
 struct trace_event_raw_dma_fence {
 	struct trace_entry ent;
 	u32 __data_loc_driver;
@@ -84757,25 +100860,72 @@
 
 struct dma_fence_chain {
 	struct dma_fence base;
-	spinlock_t lock;
 	struct dma_fence *prev;
 	u64 prev_seqno;
 	struct dma_fence *fence;
-	struct dma_fence_cb cb;
-	struct irq_work work;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
 };
 
-enum seqno_fence_condition {
-	SEQNO_FENCE_WAIT_GEQUAL = 0,
-	SEQNO_FENCE_WAIT_NONZERO = 1,
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence *table[0];
 };
 
-struct seqno_fence {
-	struct dma_fence base;
-	const struct dma_fence_ops *ops;
-	struct dma_buf *sync_buf;
-	uint32_t seqno_ofs;
-	enum seqno_fence_condition condition;
+struct dma_heap;
+
+struct dma_heap_ops {
+	struct dma_buf * (*allocate)(struct dma_heap *, long unsigned int, long unsigned int, long unsigned int);
+};
+
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+};
+
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+struct system_heap_buffer {
+	struct dma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	long unsigned int len;
+	struct sg_table sg_table;
+	int vmap_cnt;
+	void *vaddr;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped;
+};
+
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
 };
 
 struct sync_file {
@@ -84813,1743 +100963,2914 @@
 	__u64 sync_fence_info;
 };
 
+struct sync_timeline {
+	struct kref kref;
+	char name[32];
+	u64 context;
+	int value;
+	struct rb_root pt_tree;
+	struct list_head pt_list;
+	spinlock_t lock;
+	struct list_head sync_timeline_list;
+};
+
+struct sync_pt {
+	struct dma_fence base;
+	struct list_head link;
+	struct rb_node node;
+};
+
+struct trace_event_raw_sync_timeline {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 value;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sync_timeline {
+	u32 name;
+};
+
+typedef void (*btf_trace_sync_timeline)(void *, struct sync_timeline *);
+
+struct sw_sync_create_fence_data {
+	__u32 value;
+	char name[32];
+	__s32 fence;
+};
+
+struct udmabuf_create {
+	__u32 memfd;
+	__u32 flags;
+	__u64 offset;
+	__u64 size;
+};
+
+struct udmabuf_create_item {
+	__u32 memfd;
+	__u32 __pad;
+	__u64 offset;
+	__u64 size;
+};
+
+struct udmabuf_create_list {
+	__u32 flags;
+	__u32 count;
+	struct udmabuf_create_item list[0];
+};
+
+struct udmabuf {
+	long unsigned int pagecount;
+	struct page **pages;
+	struct sg_table *sg;
+	struct miscdevice *device;
+};
+
+enum {
+	CXL_MEM_COMMAND_ID_INVALID = 0,
+	CXL_MEM_COMMAND_ID_IDENTIFY = 1,
+	CXL_MEM_COMMAND_ID_RAW = 2,
+	CXL_MEM_COMMAND_ID_GET_SUPPORTED_LOGS = 3,
+	CXL_MEM_COMMAND_ID_GET_FW_INFO = 4,
+	CXL_MEM_COMMAND_ID_GET_PARTITION_INFO = 5,
+	CXL_MEM_COMMAND_ID_GET_LSA = 6,
+	CXL_MEM_COMMAND_ID_GET_HEALTH_INFO = 7,
+	CXL_MEM_COMMAND_ID_GET_LOG = 8,
+	CXL_MEM_COMMAND_ID_SET_PARTITION_INFO = 9,
+	CXL_MEM_COMMAND_ID_SET_LSA = 10,
+	CXL_MEM_COMMAND_ID_GET_ALERT_CONFIG = 11,
+	CXL_MEM_COMMAND_ID_SET_ALERT_CONFIG = 12,
+	CXL_MEM_COMMAND_ID_GET_SHUTDOWN_STATE = 13,
+	CXL_MEM_COMMAND_ID_SET_SHUTDOWN_STATE = 14,
+	CXL_MEM_COMMAND_ID_GET_POISON = 15,
+	CXL_MEM_COMMAND_ID_INJECT_POISON = 16,
+	CXL_MEM_COMMAND_ID_CLEAR_POISON = 17,
+	CXL_MEM_COMMAND_ID_GET_SCAN_MEDIA_CAPS = 18,
+	CXL_MEM_COMMAND_ID_SCAN_MEDIA = 19,
+	CXL_MEM_COMMAND_ID_GET_SCAN_MEDIA = 20,
+	CXL_MEM_COMMAND_ID_MAX = 21,
+};
+
+struct cxl_mbox_cmd_rc {
+	int err;
+	const char *desc;
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TARGET_FAILURE = 16,
+	DID_NEXUS_FAILURE = 17,
+	DID_ALLOC_FAILURE = 18,
+	DID_MEDIUM_ERROR = 19,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+};
+
+struct Scsi_Host;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	short unsigned int queue_depth;
+	short unsigned int max_queue_depth;
+	short unsigned int last_queue_full_depth;
+	short unsigned int last_queue_full_count;
+	long unsigned int last_queue_full_time;
+	long unsigned int queue_ramp_up_period;
+	long unsigned int last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd *vpd_pg0;
+	struct scsi_vpd *vpd_pg83;
+	struct scsi_vpd *vpd_pg80;
+	struct scsi_vpd *vpd_pg89;
+	struct scsi_vpd *vpd_pgb0;
+	struct scsi_vpd *vpd_pgb1;
+	struct scsi_vpd *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int manage_start_stop: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	long unsigned int supported_events[1];
+	long unsigned int pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct execute_work ew;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device___2 *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	long unsigned int sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	long unsigned int last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	short unsigned int max_cmd_len;
+	int this_id;
+	int can_queue;
+	short int cmd_per_lun;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	long unsigned int base;
+	long unsigned int io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	long unsigned int hostdata[0];
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	long unsigned int starget_data[0];
+};
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+};
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	long unsigned int jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	short unsigned int cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	long unsigned int state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*compat_ioctl)(struct scsi_device *, unsigned int, void *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, long unsigned int);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	int (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	struct proc_dir_entry *proc_dir;
+	int can_queue;
+	int this_id;
+	short unsigned int sg_tablesize;
+	short unsigned int sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	long unsigned int dma_boundary;
+	long unsigned int virt_boundary_mask;
+	short int cmd_per_lun;
+	unsigned char present;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	int rpm_autosuspend_delay;
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *, bool);
+	void *priv;
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void *reserved[1];
+		void *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP___2 = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	unsigned int dxfer_len;
+	void *dxferp;
+	unsigned char *cmdp;
+	void *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	short unsigned int iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	short unsigned int host_status;
+	short unsigned int driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+struct compat_cdrom_generic_command {
+	unsigned char cmd[12];
+	compat_caddr_t buffer;
+	compat_uint_t buflen;
+	compat_int_t stat;
+	compat_caddr_t sense;
+	unsigned char data_direction;
+	unsigned char pad[3];
+	compat_int_t quiet;
+	compat_int_t timeout;
+	compat_caddr_t unused;
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_RETRY = 2,
+	ACTION_DELAYED_RETRY = 3,
+};
+
+struct value_name_pair;
+
+struct sa_name_list {
+	int opcode;
+	const struct value_name_pair *arr;
+	int arr_sz;
+};
+
+struct value_name_pair {
+	int value;
+	const char *name;
+};
+
+struct error_info {
+	short unsigned int code12;
+	short unsigned int size;
+};
+
+struct error_info2 {
+	unsigned char code1;
+	unsigned char code2_min;
+	unsigned char code2_max;
+	const char *str;
+	const char *fmt;
+};
+
 struct scsi_lun {
 	__u8 scsi_lun[8];
 };
 
-struct nvme_user_io {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nblocks;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 slba;
-	__u32 dsmgmt;
-	__u32 reftag;
-	__u16 apptag;
-	__u16 appmask;
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 2500,
 };
 
-struct nvme_passthru_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 result;
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
 };
 
-struct nvme_passthru_cmd64 {
-	__u8 opcode;
-	__u8 flags;
-	__u16 rsvd1;
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u32 cdw10;
-	__u32 cdw11;
-	__u32 cdw12;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u32 timeout_ms;
-	__u32 rsvd2;
-	__u64 result;
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
 };
 
-struct nvme_id_power_state {
-	__le16 max_power;
-	__u8 rsvd2;
-	__u8 flags;
-	__le32 entry_lat;
-	__le32 exit_lat;
-	__u8 read_tput;
-	__u8 read_lat;
-	__u8 write_tput;
-	__u8 write_lat;
-	__le16 idle_power;
-	__u8 idle_scale;
-	__u8 rsvd19;
-	__le16 active_power;
-	__u8 active_work_scale;
-	__u8 rsvd23[9];
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
 };
 
-enum {
-	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
-	NVME_PS_FLAGS_NON_OP_STATE = 2,
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
 };
 
-enum nvme_ctrl_attr {
-	NVME_CTRL_ATTR_HID_128_BIT = 1,
-	NVME_CTRL_ATTR_TBKAS = 64,
-};
-
-struct nvme_id_ctrl {
-	__le16 vid;
-	__le16 ssvid;
-	char sn[20];
-	char mn[40];
-	char fr[8];
-	__u8 rab;
-	__u8 ieee[3];
-	__u8 cmic;
-	__u8 mdts;
-	__le16 cntlid;
-	__le32 ver;
-	__le32 rtd3r;
-	__le32 rtd3e;
-	__le32 oaes;
-	__le32 ctratt;
-	__u8 rsvd100[28];
-	__le16 crdt1;
-	__le16 crdt2;
-	__le16 crdt3;
-	__u8 rsvd134[122];
-	__le16 oacs;
-	__u8 acl;
-	__u8 aerl;
-	__u8 frmw;
-	__u8 lpa;
-	__u8 elpe;
-	__u8 npss;
-	__u8 avscc;
-	__u8 apsta;
-	__le16 wctemp;
-	__le16 cctemp;
-	__le16 mtfa;
-	__le32 hmpre;
-	__le32 hmmin;
-	__u8 tnvmcap[16];
-	__u8 unvmcap[16];
-	__le32 rpmbs;
-	__le16 edstt;
-	__u8 dsto;
-	__u8 fwug;
-	__le16 kas;
-	__le16 hctma;
-	__le16 mntmt;
-	__le16 mxtmt;
-	__le32 sanicap;
-	__le32 hmminds;
-	__le16 hmmaxd;
-	__u8 rsvd338[4];
-	__u8 anatt;
-	__u8 anacap;
-	__le32 anagrpmax;
-	__le32 nanagrpid;
-	__u8 rsvd352[160];
-	__u8 sqes;
-	__u8 cqes;
-	__le16 maxcmd;
-	__le32 nn;
-	__le16 oncs;
-	__le16 fuses;
-	__u8 fna;
-	__u8 vwc;
-	__le16 awun;
-	__le16 awupf;
-	__u8 nvscc;
-	__u8 nwpc;
-	__le16 acwu;
-	__u8 rsvd534[2];
-	__le32 sgls;
-	__le32 mnan;
-	__u8 rsvd544[224];
-	char subnqn[256];
-	__u8 rsvd1024[768];
-	__le32 ioccsz;
-	__le32 iorcsz;
-	__le16 icdoff;
-	__u8 ctrattr;
-	__u8 msdbd;
-	__u8 rsvd1804[244];
-	struct nvme_id_power_state psd[32];
-	__u8 vs[1024];
-};
-
-enum {
-	NVME_CTRL_CMIC_MULTI_CTRL = 2,
-	NVME_CTRL_CMIC_ANA = 8,
-	NVME_CTRL_ONCS_COMPARE = 1,
-	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
-	NVME_CTRL_ONCS_DSM = 4,
-	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
-	NVME_CTRL_ONCS_RESERVATIONS = 32,
-	NVME_CTRL_ONCS_TIMESTAMP = 64,
-	NVME_CTRL_VWC_PRESENT = 1,
-	NVME_CTRL_OACS_SEC_SUPP = 1,
-	NVME_CTRL_OACS_DIRECTIVES = 32,
-	NVME_CTRL_OACS_DBBUF_SUPP = 256,
-	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
-	NVME_CTRL_CTRATT_128_ID = 1,
-	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
-	NVME_CTRL_CTRATT_NVM_SETS = 4,
-	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
-	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
-	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
-	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
-	NVME_CTRL_CTRATT_UUID_LIST = 512,
-};
-
-struct nvme_lbaf {
-	__le16 ms;
-	__u8 ds;
-	__u8 rp;
-};
-
-struct nvme_id_ns {
-	__le64 nsze;
-	__le64 ncap;
-	__le64 nuse;
-	__u8 nsfeat;
-	__u8 nlbaf;
-	__u8 flbas;
-	__u8 mc;
-	__u8 dpc;
-	__u8 dps;
-	__u8 nmic;
-	__u8 rescap;
-	__u8 fpi;
-	__u8 dlfeat;
-	__le16 nawun;
-	__le16 nawupf;
-	__le16 nacwu;
-	__le16 nabsn;
-	__le16 nabo;
-	__le16 nabspf;
-	__le16 noiob;
-	__u8 nvmcap[16];
-	__le16 npwg;
-	__le16 npwa;
-	__le16 npdg;
-	__le16 npda;
-	__le16 nows;
-	__u8 rsvd74[18];
-	__le32 anagrpid;
-	__u8 rsvd96[3];
-	__u8 nsattr;
-	__le16 nvmsetid;
-	__le16 endgid;
-	__u8 nguid[16];
-	__u8 eui64[8];
-	struct nvme_lbaf lbaf[16];
-	__u8 rsvd192[192];
-	__u8 vs[3712];
-};
-
-enum {
-	NVME_ID_CNS_NS = 0,
-	NVME_ID_CNS_CTRL = 1,
-	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
-	NVME_ID_CNS_NS_DESC_LIST = 3,
-	NVME_ID_CNS_CS_NS = 5,
-	NVME_ID_CNS_CS_CTRL = 6,
-	NVME_ID_CNS_NS_PRESENT_LIST = 16,
-	NVME_ID_CNS_NS_PRESENT = 17,
-	NVME_ID_CNS_CTRL_NS_LIST = 18,
-	NVME_ID_CNS_CTRL_LIST = 19,
-	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
-	NVME_ID_CNS_NS_GRANULARITY = 22,
-	NVME_ID_CNS_UUID_LIST = 23,
-};
-
-enum {
-	NVME_CSI_NVM = 0,
-	NVME_CSI_ZNS = 2,
-};
-
-enum {
-	NVME_DIR_IDENTIFY = 0,
-	NVME_DIR_STREAMS = 1,
-	NVME_DIR_SND_ID_OP_ENABLE = 1,
-	NVME_DIR_SND_ST_OP_REL_ID = 1,
-	NVME_DIR_SND_ST_OP_REL_RSC = 2,
-	NVME_DIR_RCV_ID_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_PARAM = 1,
-	NVME_DIR_RCV_ST_OP_STATUS = 2,
-	NVME_DIR_RCV_ST_OP_RESOURCE = 3,
-	NVME_DIR_ENDIR = 1,
-};
-
-enum {
-	NVME_NS_FEAT_THIN = 1,
-	NVME_NS_FEAT_ATOMICS = 2,
-	NVME_NS_FEAT_IO_OPT = 16,
-	NVME_NS_ATTR_RO = 1,
-	NVME_NS_FLBAS_LBA_MASK = 15,
-	NVME_NS_FLBAS_META_EXT = 16,
-	NVME_NS_NMIC_SHARED = 1,
-	NVME_LBAF_RP_BEST = 0,
-	NVME_LBAF_RP_BETTER = 1,
-	NVME_LBAF_RP_GOOD = 2,
-	NVME_LBAF_RP_DEGRADED = 3,
-	NVME_NS_DPC_PI_LAST = 16,
-	NVME_NS_DPC_PI_FIRST = 8,
-	NVME_NS_DPC_PI_TYPE3 = 4,
-	NVME_NS_DPC_PI_TYPE2 = 2,
-	NVME_NS_DPC_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_FIRST = 8,
-	NVME_NS_DPS_PI_MASK = 7,
-	NVME_NS_DPS_PI_TYPE1 = 1,
-	NVME_NS_DPS_PI_TYPE2 = 2,
-	NVME_NS_DPS_PI_TYPE3 = 3,
-};
-
-struct nvme_ns_id_desc {
-	__u8 nidt;
-	__u8 nidl;
-	__le16 reserved;
-};
-
-enum {
-	NVME_NIDT_EUI64 = 1,
-	NVME_NIDT_NGUID = 2,
-	NVME_NIDT_UUID = 3,
-	NVME_NIDT_CSI = 4,
-};
-
-struct nvme_fw_slot_info_log {
-	__u8 afi;
-	__u8 rsvd1[7];
-	__le64 frs[7];
-	__u8 rsvd64[448];
-};
-
-enum {
-	NVME_CMD_EFFECTS_CSUPP = 1,
-	NVME_CMD_EFFECTS_LBCC = 2,
-	NVME_CMD_EFFECTS_NCC = 4,
-	NVME_CMD_EFFECTS_NIC = 8,
-	NVME_CMD_EFFECTS_CCC = 16,
-	NVME_CMD_EFFECTS_CSE_MASK = 196608,
-	NVME_CMD_EFFECTS_UUID_SEL = 524288,
-};
-
-struct nvme_effects_log {
-	__le32 acs[256];
-	__le32 iocs[256];
-	__u8 resv[2048];
-};
-
-enum {
-	NVME_AER_ERROR = 0,
-	NVME_AER_SMART = 1,
-	NVME_AER_NOTICE = 2,
-	NVME_AER_CSS = 6,
-	NVME_AER_VS = 7,
-};
-
-enum {
-	NVME_AER_NOTICE_NS_CHANGED = 0,
-	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
-	NVME_AER_NOTICE_ANA = 3,
-	NVME_AER_NOTICE_DISC_CHANGED = 240,
-};
-
-enum {
-	NVME_AEN_CFG_NS_ATTR = 256,
-	NVME_AEN_CFG_FW_ACT = 512,
-	NVME_AEN_CFG_ANA_CHANGE = 2048,
-	NVME_AEN_CFG_DISC_CHANGE = 2147483648,
-};
-
-enum nvme_opcode {
-	nvme_cmd_flush = 0,
-	nvme_cmd_write = 1,
-	nvme_cmd_read = 2,
-	nvme_cmd_write_uncor = 4,
-	nvme_cmd_compare = 5,
-	nvme_cmd_write_zeroes = 8,
-	nvme_cmd_dsm = 9,
-	nvme_cmd_verify = 12,
-	nvme_cmd_resv_register = 13,
-	nvme_cmd_resv_report = 14,
-	nvme_cmd_resv_acquire = 17,
-	nvme_cmd_resv_release = 21,
-	nvme_cmd_zone_mgmt_send = 121,
-	nvme_cmd_zone_mgmt_recv = 122,
-	nvme_cmd_zone_append = 125,
-};
-
-struct nvme_sgl_desc {
-	__le64 addr;
-	__le32 length;
-	__u8 rsvd[3];
-	__u8 type;
-};
-
-struct nvme_keyed_sgl_desc {
-	__le64 addr;
-	__u8 length[3];
-	__u8 key[4];
-	__u8 type;
-};
-
-union nvme_data_ptr {
-	struct {
-		__le64 prp1;
-		__le64 prp2;
-	};
-	struct nvme_sgl_desc sgl;
-	struct nvme_keyed_sgl_desc ksgl;
-};
-
-enum {
-	NVME_CMD_FUSE_FIRST = 1,
-	NVME_CMD_FUSE_SECOND = 2,
-	NVME_CMD_SGL_METABUF = 64,
-	NVME_CMD_SGL_METASEG = 128,
-	NVME_CMD_SGL_ALL = 192,
-};
-
-struct nvme_common_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le32 cdw10;
-	__le32 cdw11;
-	__le32 cdw12;
-	__le32 cdw13;
-	__le32 cdw14;
-	__le32 cdw15;
-};
-
-struct nvme_rw_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum {
-	NVME_RW_LR = 32768,
-	NVME_RW_FUA = 16384,
-	NVME_RW_APPEND_PIREMAP = 512,
-	NVME_RW_DSM_FREQ_UNSPEC = 0,
-	NVME_RW_DSM_FREQ_TYPICAL = 1,
-	NVME_RW_DSM_FREQ_RARE = 2,
-	NVME_RW_DSM_FREQ_READS = 3,
-	NVME_RW_DSM_FREQ_WRITES = 4,
-	NVME_RW_DSM_FREQ_RW = 5,
-	NVME_RW_DSM_FREQ_ONCE = 6,
-	NVME_RW_DSM_FREQ_PREFETCH = 7,
-	NVME_RW_DSM_FREQ_TEMP = 8,
-	NVME_RW_DSM_LATENCY_NONE = 0,
-	NVME_RW_DSM_LATENCY_IDLE = 16,
-	NVME_RW_DSM_LATENCY_NORM = 32,
-	NVME_RW_DSM_LATENCY_LOW = 48,
-	NVME_RW_DSM_SEQ_REQ = 64,
-	NVME_RW_DSM_COMPRESSED = 128,
-	NVME_RW_PRINFO_PRCHK_REF = 1024,
-	NVME_RW_PRINFO_PRCHK_APP = 2048,
-	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
-	NVME_RW_PRINFO_PRACT = 8192,
-	NVME_RW_DTYPE_STREAMS = 16,
-};
-
-struct nvme_dsm_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 nr;
-	__le32 attributes;
-	__u32 rsvd12[4];
-};
-
-enum {
-	NVME_DSMGMT_IDR = 1,
-	NVME_DSMGMT_IDW = 2,
-	NVME_DSMGMT_AD = 4,
-};
-
-struct nvme_dsm_range {
-	__le32 cattr;
-	__le32 nlb;
-	__le64 slba;
-};
-
-struct nvme_write_zeroes_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le32 reftag;
-	__le16 apptag;
-	__le16 appmask;
-};
-
-enum nvme_zone_mgmt_action {
-	NVME_ZONE_CLOSE = 1,
-	NVME_ZONE_FINISH = 2,
-	NVME_ZONE_OPEN = 3,
-	NVME_ZONE_RESET = 4,
-	NVME_ZONE_OFFLINE = 5,
-	NVME_ZONE_SET_DESC_EXT = 16,
-};
-
-struct nvme_zone_mgmt_send_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le32 cdw2[2];
-	__le64 metadata;
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 cdw12;
-	__u8 zsa;
-	__u8 select_all;
-	__u8 rsvd13[2];
-	__le32 cdw14[2];
-};
-
-struct nvme_zone_mgmt_recv_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le64 slba;
-	__le32 numd;
-	__u8 zra;
-	__u8 zrasf;
-	__u8 pr;
-	__u8 rsvd13;
-	__le32 cdw14[2];
-};
-
-struct nvme_feat_auto_pst {
-	__le64 entries[32];
-};
-
-struct nvme_feat_host_behavior {
-	__u8 acre;
-	__u8 resv1[511];
-};
-
-enum {
-	NVME_ENABLE_ACRE = 1,
-};
-
-enum nvme_admin_opcode {
-	nvme_admin_delete_sq = 0,
-	nvme_admin_create_sq = 1,
-	nvme_admin_get_log_page = 2,
-	nvme_admin_delete_cq = 4,
-	nvme_admin_create_cq = 5,
-	nvme_admin_identify = 6,
-	nvme_admin_abort_cmd = 8,
-	nvme_admin_set_features = 9,
-	nvme_admin_get_features = 10,
-	nvme_admin_async_event = 12,
-	nvme_admin_ns_mgmt = 13,
-	nvme_admin_activate_fw = 16,
-	nvme_admin_download_fw = 17,
-	nvme_admin_dev_self_test = 20,
-	nvme_admin_ns_attach = 21,
-	nvme_admin_keep_alive = 24,
-	nvme_admin_directive_send = 25,
-	nvme_admin_directive_recv = 26,
-	nvme_admin_virtual_mgmt = 28,
-	nvme_admin_nvme_mi_send = 29,
-	nvme_admin_nvme_mi_recv = 30,
-	nvme_admin_dbbuf = 124,
-	nvme_admin_format_nvm = 128,
-	nvme_admin_security_send = 129,
-	nvme_admin_security_recv = 130,
-	nvme_admin_sanitize_nvm = 132,
-	nvme_admin_get_lba_status = 134,
-	nvme_admin_vendor_start = 192,
-};
-
-enum {
-	NVME_QUEUE_PHYS_CONTIG = 1,
-	NVME_CQ_IRQ_ENABLED = 2,
-	NVME_SQ_PRIO_URGENT = 0,
-	NVME_SQ_PRIO_HIGH = 2,
-	NVME_SQ_PRIO_MEDIUM = 4,
-	NVME_SQ_PRIO_LOW = 6,
-	NVME_FEAT_ARBITRATION = 1,
-	NVME_FEAT_POWER_MGMT = 2,
-	NVME_FEAT_LBA_RANGE = 3,
-	NVME_FEAT_TEMP_THRESH = 4,
-	NVME_FEAT_ERR_RECOVERY = 5,
-	NVME_FEAT_VOLATILE_WC = 6,
-	NVME_FEAT_NUM_QUEUES = 7,
-	NVME_FEAT_IRQ_COALESCE = 8,
-	NVME_FEAT_IRQ_CONFIG = 9,
-	NVME_FEAT_WRITE_ATOMIC = 10,
-	NVME_FEAT_ASYNC_EVENT = 11,
-	NVME_FEAT_AUTO_PST = 12,
-	NVME_FEAT_HOST_MEM_BUF = 13,
-	NVME_FEAT_TIMESTAMP = 14,
-	NVME_FEAT_KATO = 15,
-	NVME_FEAT_HCTM = 16,
-	NVME_FEAT_NOPSC = 17,
-	NVME_FEAT_RRL = 18,
-	NVME_FEAT_PLM_CONFIG = 19,
-	NVME_FEAT_PLM_WINDOW = 20,
-	NVME_FEAT_HOST_BEHAVIOR = 22,
-	NVME_FEAT_SANITIZE = 23,
-	NVME_FEAT_SW_PROGRESS = 128,
-	NVME_FEAT_HOST_ID = 129,
-	NVME_FEAT_RESV_MASK = 130,
-	NVME_FEAT_RESV_PERSIST = 131,
-	NVME_FEAT_WRITE_PROTECT = 132,
-	NVME_FEAT_VENDOR_START = 192,
-	NVME_FEAT_VENDOR_END = 255,
-	NVME_LOG_ERROR = 1,
-	NVME_LOG_SMART = 2,
-	NVME_LOG_FW_SLOT = 3,
-	NVME_LOG_CHANGED_NS = 4,
-	NVME_LOG_CMD_EFFECTS = 5,
-	NVME_LOG_DEVICE_SELF_TEST = 6,
-	NVME_LOG_TELEMETRY_HOST = 7,
-	NVME_LOG_TELEMETRY_CTRL = 8,
-	NVME_LOG_ENDURANCE_GROUP = 9,
-	NVME_LOG_ANA = 12,
-	NVME_LOG_DISC = 112,
-	NVME_LOG_RESERVATION = 128,
-	NVME_FWACT_REPL = 0,
-	NVME_FWACT_REPL_ACTV = 8,
-	NVME_FWACT_ACTV = 16,
-};
-
-struct nvme_identify {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 cns;
-	__u8 rsvd3;
-	__le16 ctrlid;
-	__u8 rsvd11[3];
-	__u8 csi;
-	__u32 rsvd12[4];
-};
-
-struct nvme_features {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 fid;
-	__le32 dword11;
-	__le32 dword12;
-	__le32 dword13;
-	__le32 dword14;
-	__le32 dword15;
-};
-
-struct nvme_create_cq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 cqid;
-	__le16 qsize;
-	__le16 cq_flags;
-	__le16 irq_vector;
-	__u32 rsvd12[4];
-};
-
-struct nvme_create_sq {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__u64 rsvd8;
-	__le16 sqid;
-	__le16 qsize;
-	__le16 sq_flags;
-	__le16 cqid;
-	__u32 rsvd12[4];
-};
-
-struct nvme_delete_queue {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 qid;
-	__u16 rsvd10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_abort_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[9];
-	__le16 sqid;
-	__u16 cid;
-	__u32 rsvd11[5];
-};
-
-struct nvme_download_firmware {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__le32 offset;
-	__u32 rsvd12[4];
-};
-
-struct nvme_format_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[4];
-	__le32 cdw10;
-	__u32 rsvd11[5];
-};
-
-struct nvme_get_log_page_command {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__u8 lid;
-	__u8 lsp;
-	__le16 numdl;
-	__le16 numdu;
-	__u16 rsvd11;
-	union {
-		struct {
-			__le32 lpol;
-			__le32 lpou;
-		};
-		__le64 lpo;
-	};
-	__u8 rsvd14[3];
-	__u8 csi;
-	__u32 rsvd15;
-};
-
-struct nvme_directive_cmd {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2[2];
-	union nvme_data_ptr dptr;
-	__le32 numd;
-	__u8 doper;
-	__u8 dtype;
-	__le16 dspec;
-	__u8 endir;
-	__u8 tdtype;
-	__u16 rsvd15;
-	__u32 rsvd16[3];
-};
-
-enum nvmf_fabrics_opcode {
-	nvme_fabrics_command = 127,
-};
-
-enum nvmf_capsule_command {
-	nvme_fabrics_type_property_set = 0,
-	nvme_fabrics_type_connect = 1,
-	nvme_fabrics_type_property_get = 4,
-};
-
-struct nvmf_common_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 ts[24];
-};
-
-struct nvmf_connect_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[19];
-	union nvme_data_ptr dptr;
-	__le16 recfmt;
-	__le16 qid;
-	__le16 sqsize;
-	__u8 cattr;
-	__u8 resv3;
-	__le32 kato;
-	__u8 resv4[12];
-};
-
-struct nvmf_property_set_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__le64 value;
-	__u8 resv4[8];
-};
-
-struct nvmf_property_get_command {
-	__u8 opcode;
-	__u8 resv1;
-	__u16 command_id;
-	__u8 fctype;
-	__u8 resv2[35];
-	__u8 attrib;
-	__u8 resv3[3];
-	__le32 offset;
-	__u8 resv4[16];
-};
-
-struct nvme_dbbuf {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__u32 rsvd1[5];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd12[6];
-};
-
-struct streams_directive_params {
-	__le16 msl;
-	__le16 nssa;
-	__le16 nsso;
-	__u8 rsvd[10];
-	__le32 sws;
-	__le16 sgs;
-	__le16 nsa;
-	__le16 nso;
-	__u8 rsvd2[6];
-};
-
-struct nvme_command {
-	union {
-		struct nvme_common_command common;
-		struct nvme_rw_command rw;
-		struct nvme_identify identify;
-		struct nvme_features features;
-		struct nvme_create_cq create_cq;
-		struct nvme_create_sq create_sq;
-		struct nvme_delete_queue delete_queue;
-		struct nvme_download_firmware dlfw;
-		struct nvme_format_cmd format;
-		struct nvme_dsm_cmd dsm;
-		struct nvme_write_zeroes_cmd write_zeroes;
-		struct nvme_zone_mgmt_send_cmd zms;
-		struct nvme_zone_mgmt_recv_cmd zmr;
-		struct nvme_abort_cmd abort;
-		struct nvme_get_log_page_command get_log_page;
-		struct nvmf_common_command fabrics;
-		struct nvmf_connect_command connect;
-		struct nvmf_property_set_command prop_set;
-		struct nvmf_property_get_command prop_get;
-		struct nvme_dbbuf dbbuf;
-		struct nvme_directive_cmd directive;
-	};
-};
-
-enum {
-	NVME_SC_SUCCESS = 0,
-	NVME_SC_INVALID_OPCODE = 1,
-	NVME_SC_INVALID_FIELD = 2,
-	NVME_SC_CMDID_CONFLICT = 3,
-	NVME_SC_DATA_XFER_ERROR = 4,
-	NVME_SC_POWER_LOSS = 5,
-	NVME_SC_INTERNAL = 6,
-	NVME_SC_ABORT_REQ = 7,
-	NVME_SC_ABORT_QUEUE = 8,
-	NVME_SC_FUSED_FAIL = 9,
-	NVME_SC_FUSED_MISSING = 10,
-	NVME_SC_INVALID_NS = 11,
-	NVME_SC_CMD_SEQ_ERROR = 12,
-	NVME_SC_SGL_INVALID_LAST = 13,
-	NVME_SC_SGL_INVALID_COUNT = 14,
-	NVME_SC_SGL_INVALID_DATA = 15,
-	NVME_SC_SGL_INVALID_METADATA = 16,
-	NVME_SC_SGL_INVALID_TYPE = 17,
-	NVME_SC_SGL_INVALID_OFFSET = 22,
-	NVME_SC_SGL_INVALID_SUBTYPE = 23,
-	NVME_SC_SANITIZE_FAILED = 28,
-	NVME_SC_SANITIZE_IN_PROGRESS = 29,
-	NVME_SC_NS_WRITE_PROTECTED = 32,
-	NVME_SC_CMD_INTERRUPTED = 33,
-	NVME_SC_LBA_RANGE = 128,
-	NVME_SC_CAP_EXCEEDED = 129,
-	NVME_SC_NS_NOT_READY = 130,
-	NVME_SC_RESERVATION_CONFLICT = 131,
-	NVME_SC_CQ_INVALID = 256,
-	NVME_SC_QID_INVALID = 257,
-	NVME_SC_QUEUE_SIZE = 258,
-	NVME_SC_ABORT_LIMIT = 259,
-	NVME_SC_ABORT_MISSING = 260,
-	NVME_SC_ASYNC_LIMIT = 261,
-	NVME_SC_FIRMWARE_SLOT = 262,
-	NVME_SC_FIRMWARE_IMAGE = 263,
-	NVME_SC_INVALID_VECTOR = 264,
-	NVME_SC_INVALID_LOG_PAGE = 265,
-	NVME_SC_INVALID_FORMAT = 266,
-	NVME_SC_FW_NEEDS_CONV_RESET = 267,
-	NVME_SC_INVALID_QUEUE = 268,
-	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
-	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
-	NVME_SC_FEATURE_NOT_PER_NS = 271,
-	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
-	NVME_SC_FW_NEEDS_RESET = 273,
-	NVME_SC_FW_NEEDS_MAX_TIME = 274,
-	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
-	NVME_SC_OVERLAPPING_RANGE = 276,
-	NVME_SC_NS_INSUFFICIENT_CAP = 277,
-	NVME_SC_NS_ID_UNAVAILABLE = 278,
-	NVME_SC_NS_ALREADY_ATTACHED = 280,
-	NVME_SC_NS_IS_PRIVATE = 281,
-	NVME_SC_NS_NOT_ATTACHED = 282,
-	NVME_SC_THIN_PROV_NOT_SUPP = 283,
-	NVME_SC_CTRL_LIST_INVALID = 284,
-	NVME_SC_BP_WRITE_PROHIBITED = 286,
-	NVME_SC_PMR_SAN_PROHIBITED = 291,
-	NVME_SC_BAD_ATTRIBUTES = 384,
-	NVME_SC_INVALID_PI = 385,
-	NVME_SC_READ_ONLY = 386,
-	NVME_SC_ONCS_NOT_SUPPORTED = 387,
-	NVME_SC_CONNECT_FORMAT = 384,
-	NVME_SC_CONNECT_CTRL_BUSY = 385,
-	NVME_SC_CONNECT_INVALID_PARAM = 386,
-	NVME_SC_CONNECT_RESTART_DISC = 387,
-	NVME_SC_CONNECT_INVALID_HOST = 388,
-	NVME_SC_DISCOVERY_RESTART = 400,
-	NVME_SC_AUTH_REQUIRED = 401,
-	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
-	NVME_SC_ZONE_FULL = 441,
-	NVME_SC_ZONE_READ_ONLY = 442,
-	NVME_SC_ZONE_OFFLINE = 443,
-	NVME_SC_ZONE_INVALID_WRITE = 444,
-	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
-	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
-	NVME_SC_ZONE_INVALID_TRANSITION = 447,
-	NVME_SC_WRITE_FAULT = 640,
-	NVME_SC_READ_ERROR = 641,
-	NVME_SC_GUARD_CHECK = 642,
-	NVME_SC_APPTAG_CHECK = 643,
-	NVME_SC_REFTAG_CHECK = 644,
-	NVME_SC_COMPARE_FAILED = 645,
-	NVME_SC_ACCESS_DENIED = 646,
-	NVME_SC_UNWRITTEN_BLOCK = 647,
-	NVME_SC_ANA_PERSISTENT_LOSS = 769,
-	NVME_SC_ANA_INACCESSIBLE = 770,
-	NVME_SC_ANA_TRANSITION = 771,
-	NVME_SC_HOST_PATH_ERROR = 880,
-	NVME_SC_HOST_ABORTED_CMD = 881,
-	NVME_SC_CRD = 6144,
-	NVME_SC_DNR = 16384,
-};
-
-union nvme_result {
-	__le16 u16;
-	__le32 u32;
-	__le64 u64;
-};
-
-enum nvme_quirks {
-	NVME_QUIRK_STRIPE_SIZE = 1,
-	NVME_QUIRK_IDENTIFY_CNS = 2,
-	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
-	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
-	NVME_QUIRK_NO_APST = 16,
-	NVME_QUIRK_NO_DEEPEST_PS = 32,
-	NVME_QUIRK_LIGHTNVM = 64,
-	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
-	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
-	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
-	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
-	NVME_QUIRK_SINGLE_VECTOR = 2048,
-	NVME_QUIRK_128_BYTES_SQES = 4096,
-	NVME_QUIRK_SHARED_TAGS = 8192,
-	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
-	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
-};
-
-struct nvme_ctrl;
-
-struct nvme_request {
-	struct nvme_command *cmd;
-	union nvme_result result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	struct nvme_ctrl *ctrl;
-};
-
-enum nvme_ctrl_state {
-	NVME_CTRL_NEW = 0,
-	NVME_CTRL_LIVE = 1,
-	NVME_CTRL_RESETTING = 2,
-	NVME_CTRL_CONNECTING = 3,
-	NVME_CTRL_DELETING = 4,
-	NVME_CTRL_DELETING_NOIO = 5,
-	NVME_CTRL_DEAD = 6,
-};
-
-struct opal_dev;
-
-struct nvme_fault_inject {};
-
-struct nvme_ctrl_ops;
-
-struct nvme_subsystem;
-
-struct nvmf_ctrl_options;
-
-struct nvme_ctrl {
-	bool comp_seen;
-	enum nvme_ctrl_state state;
-	bool identified;
-	spinlock_t lock;
-	struct mutex scan_lock;
-	const struct nvme_ctrl_ops *ops;
-	struct request_queue *admin_q;
-	struct request_queue *connect_q;
-	struct request_queue *fabrics_q;
-	struct device *dev;
-	int instance;
-	int numa_node;
-	struct blk_mq_tag_set *tagset;
-	struct blk_mq_tag_set *admin_tagset;
-	struct list_head namespaces;
-	struct rw_semaphore namespaces_rwsem;
-	struct device ctrl_device;
-	struct device *device;
-	struct cdev cdev;
-	struct work_struct reset_work;
-	struct work_struct delete_work;
-	wait_queue_head_t state_wq;
-	struct nvme_subsystem *subsys;
-	struct list_head subsys_entry;
-	struct opal_dev *opal_dev;
-	char name[12];
-	u16 cntlid;
-	u32 ctrl_config;
-	u16 mtfa;
-	u32 queue_count;
-	u64 cap;
-	u32 max_hw_sectors;
-	u32 max_segments;
-	u32 max_integrity_segments;
-	u32 max_zone_append;
-	u16 crdt[3];
-	u16 oncs;
-	u16 oacs;
-	u16 nssa;
-	u16 nr_streams;
-	u16 sqsize;
-	u32 max_namespaces;
-	atomic_t abort_limit;
-	u8 vwc;
-	u32 vs;
-	u32 sgls;
-	u16 kas;
-	u8 npss;
-	u8 apsta;
-	u16 wctemp;
-	u16 cctemp;
-	u32 oaes;
-	u32 aen_result;
-	u32 ctratt;
-	unsigned int shutdown_timeout;
-	unsigned int kato;
-	bool subsystem;
-	long unsigned int quirks;
-	struct nvme_id_power_state psd[32];
-	struct nvme_effects_log *effects;
-	struct xarray cels;
-	struct work_struct scan_work;
-	struct work_struct async_event_work;
-	struct delayed_work ka_work;
-	struct nvme_command ka_cmd;
-	struct work_struct fw_act_work;
-	long unsigned int events;
-	u64 ps_max_latency_us;
-	bool apst_enabled;
-	u32 hmpre;
-	u32 hmmin;
-	u32 hmminds;
-	u16 hmmaxd;
-	u32 ioccsz;
-	u32 iorcsz;
-	u16 icdoff;
-	u16 maxcmd;
-	int nr_reconnects;
-	struct nvmf_ctrl_options *opts;
-	struct page *discard_page;
-	long unsigned int discard_page_busy;
-	struct nvme_fault_inject fault_inject;
-};
-
-enum {
-	NVME_REQ_CANCELLED = 1,
-	NVME_REQ_USERCMD = 2,
-};
-
-struct nvme_ctrl_ops {
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
 	const char *name;
-	struct module *module;
-	unsigned int flags;
-	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
-	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
-	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
-	void (*free_ctrl)(struct nvme_ctrl *);
-	void (*submit_async_event)(struct nvme_ctrl *);
-	void (*delete_ctrl)(struct nvme_ctrl *);
-	int (*get_address)(struct nvme_ctrl *, char *, int);
+	int key;
 };
 
-struct nvme_subsystem {
-	int instance;
-	struct device dev;
-	struct kref ref;
-	struct list_head entry;
-	struct mutex lock;
-	struct list_head ctrls;
-	struct list_head nsheads;
-	char subnqn[223];
-	char serial[20];
-	char model[40];
-	char firmware_rev[8];
-	u8 cmic;
-	u16 vendor_id;
-	u16 awupf;
-	struct ida ns_ida;
+struct double_list {
+	struct list_head *top;
+	struct list_head *bottom;
 };
 
-struct nvmf_host;
-
-struct nvmf_ctrl_options {
-	unsigned int mask;
-	char *transport;
-	char *subsysnqn;
-	char *traddr;
-	char *trsvcid;
-	char *host_traddr;
-	size_t queue_size;
-	unsigned int nr_io_queues;
-	unsigned int reconnect_delay;
-	bool discovery_nqn;
-	bool duplicate_connect;
-	unsigned int kato;
-	struct nvmf_host *host;
-	int max_reconnects;
-	bool disable_sqflow;
-	bool hdr_digest;
-	bool data_digest;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-	int tos;
+struct scsi_nl_hdr {
+	__u8 version;
+	__u8 transport;
+	__u16 magic;
+	__u16 msgtype;
+	__u16 msglen;
 };
 
-struct nvme_ns_ids {
-	u8 eui64[8];
-	u8 nguid[16];
-	uuid_t uuid;
-	u8 csi;
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
 };
 
-struct nvme_ns_head {
-	struct list_head list;
-	struct srcu_struct srcu;
-	struct nvme_subsystem *subsys;
-	unsigned int ns_id;
-	struct nvme_ns_ids ids;
-	struct list_head entry;
-	struct kref ref;
-	bool shared;
-	int instance;
-	struct nvme_effects_log *effects;
+enum {
+	SCSI_DH_OK = 0,
+	SCSI_DH_DEV_FAILED = 1,
+	SCSI_DH_DEV_TEMP_BUSY = 2,
+	SCSI_DH_DEV_UNSUPP = 3,
+	SCSI_DH_DEVICE_MAX = 4,
+	SCSI_DH_NOTCONN = 5,
+	SCSI_DH_CONN_FAILURE = 6,
+	SCSI_DH_TRANSPORT_MAX = 7,
+	SCSI_DH_IO = 8,
+	SCSI_DH_INVALID_IO = 9,
+	SCSI_DH_RETRY = 10,
+	SCSI_DH_IMM_RETRY = 11,
+	SCSI_DH_TIMED_OUT = 12,
+	SCSI_DH_RES_TEMP_UNAVAIL = 13,
+	SCSI_DH_DEV_OFFLINED = 14,
+	SCSI_DH_NOMEM = 15,
+	SCSI_DH_NOSYS = 16,
+	SCSI_DH_DRIVER_MAX = 17,
 };
 
-enum nvme_ns_features {
-	NVME_NS_EXT_LBAS = 1,
-	NVME_NS_METADATA_SUPPORTED = 2,
+struct scsi_dh_blist {
+	const char *vendor;
+	const char *model;
+	const char *driver;
 };
 
-struct nvme_ns {
-	struct list_head list;
-	struct nvme_ctrl *ctrl;
-	struct request_queue *queue;
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct opal_dev___2;
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
 	struct gendisk *disk;
-	struct list_head siblings;
-	struct nvm_dev *ndev;
-	struct kref kref;
-	struct nvme_ns_head *head;
-	int lba_shift;
-	u16 ms;
-	u16 sgs;
-	u32 sws;
-	u8 pi_type;
-	u64 zsze;
-	long unsigned int features;
+	struct opal_dev___2 *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+};
+
+enum scsi_host_guard_type {
+	SHOST_DIX_GUARD_CRC = 1,
+	SHOST_DIX_GUARD_IP = 2,
+};
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+enum {
+	mechtype_caddy = 0,
+	mechtype_tray = 1,
+	mechtype_popup = 2,
+	mechtype_individual_changer = 4,
+	mechtype_cartridge_changer = 5,
+};
+
+struct event_header {
+	__be16 data_len;
+	__u8 notification_class: 3;
+	__u8 reserved1: 4;
+	__u8 nea: 1;
+	__u8 supp_event_class;
+};
+
+struct media_event_desc {
+	__u8 media_event_code: 4;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 media_present: 1;
+	__u8 reserved2: 6;
+	__u8 start_slot;
+	__u8 end_slot;
+};
+
+struct scsi_cd {
+	unsigned int capacity;
+	struct scsi_device *device;
+	unsigned int vendor;
+	long unsigned int ms_offset;
+	unsigned int writeable: 1;
+	unsigned int use: 1;
+	unsigned int xa_flag: 1;
+	unsigned int readcd_known: 1;
+	unsigned int readcd_cdda: 1;
+	unsigned int media_present: 1;
+	int tur_mismatch;
+	bool tur_changed: 1;
+	bool get_event_changed: 1;
+	bool ignore_get_event: 1;
+	struct cdrom_device_info cdi;
+	struct mutex lock;
+	struct gendisk *disk;
+};
+
+struct cdrom_ti {
+	__u8 cdti_trk0;
+	__u8 cdti_ind0;
+	__u8 cdti_trk1;
+	__u8 cdti_ind1;
+};
+
+struct cdrom_tochdr {
+	__u8 cdth_trk0;
+	__u8 cdth_trk1;
+};
+
+struct cdrom_tocentry {
+	__u8 cdte_track;
+	__u8 cdte_adr: 4;
+	__u8 cdte_ctrl: 4;
+	__u8 cdte_format;
+	union cdrom_addr cdte_addr;
+	__u8 cdte_datamode;
+};
+
+typedef struct scsi_cd Scsi_CD;
+
+struct ccs_modesel_head {
+	__u8 _r1;
+	__u8 medium;
+	__u8 _r2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_blocks_hi;
+	__u8 number_blocks_med;
+	__u8 number_blocks_lo;
+	__u8 _r3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+typedef struct sg_io_hdr sg_io_hdr_t;
+
+struct sg_scsi_id {
+	int host_no;
+	int channel;
+	int scsi_id;
+	int lun;
+	int scsi_type;
+	short int h_cmd_per_lun;
+	short int d_queue_depth;
+	int unused[2];
+};
+
+typedef struct sg_scsi_id sg_scsi_id_t;
+
+struct sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	void *usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+typedef struct sg_req_info sg_req_info_t;
+
+struct sg_header {
+	int pack_len;
+	int reply_len;
+	int pack_id;
+	int result;
+	unsigned int twelve_byte: 1;
+	unsigned int target_status: 5;
+	unsigned int host_status: 8;
+	unsigned int driver_status: 8;
+	unsigned int other_flags: 10;
+	unsigned char sense_buffer[16];
+};
+
+struct sg_scatter_hold {
+	short unsigned int k_use_sg;
+	unsigned int sglist_len;
+	unsigned int bufflen;
+	struct page **pages;
+	int page_order;
+	char dio_in_use;
+	unsigned char cmd_opcode;
+};
+
+typedef struct sg_scatter_hold Sg_scatter_hold;
+
+struct sg_fd;
+
+struct sg_request {
+	struct list_head entry;
+	struct sg_fd *parentfp;
+	Sg_scatter_hold data;
+	sg_io_hdr_t header;
+	unsigned char sense_b[96];
+	char res_used;
+	char orphan;
+	char sg_io_owned;
+	char done;
+	struct request *rq;
+	struct bio *bio;
+	struct execute_work ew;
+};
+
+typedef struct sg_request Sg_request;
+
+struct sg_device;
+
+struct sg_fd {
+	struct list_head sfd_siblings;
+	struct sg_device *parentdp;
+	wait_queue_head_t read_wait;
+	rwlock_t rq_list_lock;
+	struct mutex f_mutex;
+	int timeout;
+	int timeout_user;
+	Sg_scatter_hold reserve;
+	struct list_head rq_list;
+	struct fasync_struct *async_qp;
+	Sg_request req_arr[16];
+	char force_packid;
+	char cmd_q;
+	unsigned char next_cmd_len;
+	char keep_orphan;
+	char mmap_called;
+	char res_in_use;
+	struct kref f_ref;
+	struct execute_work ew;
+};
+
+struct sg_device {
+	struct scsi_device *device;
+	wait_queue_head_t open_wait;
+	struct mutex open_rel_lock;
+	int sg_tablesize;
+	u32 index;
+	struct list_head sfds;
+	rwlock_t sfd_lock;
+	atomic_t detaching;
+	bool exclude;
+	int open_cnt;
+	char sgdebug;
+	char name[32];
+	struct cdev *cdev;
+	struct kref d_ref;
+};
+
+typedef struct sg_fd Sg_fd;
+
+typedef struct sg_device Sg_device;
+
+struct compat_sg_req_info {
+	char req_state;
+	char orphan;
+	char sg_io_owned;
+	char problem;
+	int pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned int duration;
+	int unused;
+};
+
+struct sg_proc_deviter {
+	loff_t index;
+	size_t max;
+};
+
+enum {
+	ATA_MAX_DEVICES = 2,
+	ATA_MAX_PRD = 256,
+	ATA_SECT_SIZE = 512,
+	ATA_MAX_SECTORS_128 = 128,
+	ATA_MAX_SECTORS = 256,
+	ATA_MAX_SECTORS_1024 = 1024,
+	ATA_MAX_SECTORS_LBA48 = 65535,
+	ATA_MAX_SECTORS_TAPE = 65535,
+	ATA_MAX_TRIM_RNUM = 64,
+	ATA_ID_WORDS = 256,
+	ATA_ID_CONFIG = 0,
+	ATA_ID_CYLS = 1,
+	ATA_ID_HEADS = 3,
+	ATA_ID_SECTORS = 6,
+	ATA_ID_SERNO = 10,
+	ATA_ID_BUF_SIZE = 21,
+	ATA_ID_FW_REV = 23,
+	ATA_ID_PROD = 27,
+	ATA_ID_MAX_MULTSECT = 47,
+	ATA_ID_DWORD_IO = 48,
+	ATA_ID_TRUSTED = 48,
+	ATA_ID_CAPABILITY = 49,
+	ATA_ID_OLD_PIO_MODES = 51,
+	ATA_ID_OLD_DMA_MODES = 52,
+	ATA_ID_FIELD_VALID = 53,
+	ATA_ID_CUR_CYLS = 54,
+	ATA_ID_CUR_HEADS = 55,
+	ATA_ID_CUR_SECTORS = 56,
+	ATA_ID_MULTSECT = 59,
+	ATA_ID_LBA_CAPACITY = 60,
+	ATA_ID_SWDMA_MODES = 62,
+	ATA_ID_MWDMA_MODES = 63,
+	ATA_ID_PIO_MODES = 64,
+	ATA_ID_EIDE_DMA_MIN = 65,
+	ATA_ID_EIDE_DMA_TIME = 66,
+	ATA_ID_EIDE_PIO = 67,
+	ATA_ID_EIDE_PIO_IORDY = 68,
+	ATA_ID_ADDITIONAL_SUPP = 69,
+	ATA_ID_QUEUE_DEPTH = 75,
+	ATA_ID_SATA_CAPABILITY = 76,
+	ATA_ID_SATA_CAPABILITY_2 = 77,
+	ATA_ID_FEATURE_SUPP = 78,
+	ATA_ID_MAJOR_VER = 80,
+	ATA_ID_COMMAND_SET_1 = 82,
+	ATA_ID_COMMAND_SET_2 = 83,
+	ATA_ID_CFSSE = 84,
+	ATA_ID_CFS_ENABLE_1 = 85,
+	ATA_ID_CFS_ENABLE_2 = 86,
+	ATA_ID_CSF_DEFAULT = 87,
+	ATA_ID_UDMA_MODES = 88,
+	ATA_ID_HW_CONFIG = 93,
+	ATA_ID_SPG = 98,
+	ATA_ID_LBA_CAPACITY_2 = 100,
+	ATA_ID_SECTOR_SIZE = 106,
+	ATA_ID_WWN = 108,
+	ATA_ID_LOGICAL_SECTOR_SIZE = 117,
+	ATA_ID_COMMAND_SET_3 = 119,
+	ATA_ID_COMMAND_SET_4 = 120,
+	ATA_ID_LAST_LUN = 126,
+	ATA_ID_DLF = 128,
+	ATA_ID_CSFO = 129,
+	ATA_ID_CFA_POWER = 160,
+	ATA_ID_CFA_KEY_MGMT = 162,
+	ATA_ID_CFA_MODES = 163,
+	ATA_ID_DATA_SET_MGMT = 169,
+	ATA_ID_SCT_CMD_XPORT = 206,
+	ATA_ID_ROT_SPEED = 217,
+	ATA_ID_PIO4 = 2,
+	ATA_ID_SERNO_LEN = 20,
+	ATA_ID_FW_REV_LEN = 8,
+	ATA_ID_PROD_LEN = 40,
+	ATA_ID_WWN_LEN = 8,
+	ATA_PCI_CTL_OFS = 2,
+	ATA_PIO0 = 1,
+	ATA_PIO1 = 3,
+	ATA_PIO2 = 7,
+	ATA_PIO3 = 15,
+	ATA_PIO4 = 31,
+	ATA_PIO5 = 63,
+	ATA_PIO6 = 127,
+	ATA_PIO4_ONLY = 16,
+	ATA_SWDMA0 = 1,
+	ATA_SWDMA1 = 3,
+	ATA_SWDMA2 = 7,
+	ATA_SWDMA2_ONLY = 4,
+	ATA_MWDMA0 = 1,
+	ATA_MWDMA1 = 3,
+	ATA_MWDMA2 = 7,
+	ATA_MWDMA3 = 15,
+	ATA_MWDMA4 = 31,
+	ATA_MWDMA12_ONLY = 6,
+	ATA_MWDMA2_ONLY = 4,
+	ATA_UDMA0 = 1,
+	ATA_UDMA1 = 3,
+	ATA_UDMA2 = 7,
+	ATA_UDMA3 = 15,
+	ATA_UDMA4 = 31,
+	ATA_UDMA5 = 63,
+	ATA_UDMA6 = 127,
+	ATA_UDMA7 = 255,
+	ATA_UDMA24_ONLY = 20,
+	ATA_UDMA_MASK_40C = 7,
+	ATA_PRD_SZ = 8,
+	ATA_PRD_TBL_SZ = 2048,
+	ATA_PRD_EOT = 2147483648,
+	ATA_DMA_TABLE_OFS = 4,
+	ATA_DMA_STATUS = 2,
+	ATA_DMA_CMD = 0,
+	ATA_DMA_WR = 8,
+	ATA_DMA_START = 1,
+	ATA_DMA_INTR = 4,
+	ATA_DMA_ERR = 2,
+	ATA_DMA_ACTIVE = 1,
+	ATA_HOB = 128,
+	ATA_NIEN = 2,
+	ATA_LBA = 64,
+	ATA_DEV1 = 16,
+	ATA_DEVICE_OBS = 160,
+	ATA_DEVCTL_OBS = 8,
+	ATA_BUSY = 128,
+	ATA_DRDY = 64,
+	ATA_DF = 32,
+	ATA_DSC = 16,
+	ATA_DRQ = 8,
+	ATA_CORR = 4,
+	ATA_SENSE = 2,
+	ATA_ERR = 1,
+	ATA_SRST = 4,
+	ATA_ICRC = 128,
+	ATA_BBK = 128,
+	ATA_UNC = 64,
+	ATA_MC = 32,
+	ATA_IDNF = 16,
+	ATA_MCR = 8,
+	ATA_ABORTED = 4,
+	ATA_TRK0NF = 2,
+	ATA_AMNF = 1,
+	ATAPI_LFS = 240,
+	ATAPI_EOM = 2,
+	ATAPI_ILI = 1,
+	ATAPI_IO = 2,
+	ATAPI_COD = 1,
+	ATA_REG_DATA = 0,
+	ATA_REG_ERR = 1,
+	ATA_REG_NSECT = 2,
+	ATA_REG_LBAL = 3,
+	ATA_REG_LBAM = 4,
+	ATA_REG_LBAH = 5,
+	ATA_REG_DEVICE = 6,
+	ATA_REG_STATUS = 7,
+	ATA_REG_FEATURE = 1,
+	ATA_REG_CMD = 7,
+	ATA_REG_BYTEL = 4,
+	ATA_REG_BYTEH = 5,
+	ATA_REG_DEVSEL = 6,
+	ATA_REG_IRQ = 2,
+	ATA_CMD_DEV_RESET = 8,
+	ATA_CMD_CHK_POWER = 229,
+	ATA_CMD_STANDBY = 226,
+	ATA_CMD_IDLE = 227,
+	ATA_CMD_EDD = 144,
+	ATA_CMD_DOWNLOAD_MICRO = 146,
+	ATA_CMD_DOWNLOAD_MICRO_DMA = 147,
+	ATA_CMD_NOP = 0,
+	ATA_CMD_FLUSH = 231,
+	ATA_CMD_FLUSH_EXT = 234,
+	ATA_CMD_ID_ATA = 236,
+	ATA_CMD_ID_ATAPI = 161,
+	ATA_CMD_SERVICE = 162,
+	ATA_CMD_READ = 200,
+	ATA_CMD_READ_EXT = 37,
+	ATA_CMD_READ_QUEUED = 38,
+	ATA_CMD_READ_STREAM_EXT = 43,
+	ATA_CMD_READ_STREAM_DMA_EXT = 42,
+	ATA_CMD_WRITE = 202,
+	ATA_CMD_WRITE_EXT = 53,
+	ATA_CMD_WRITE_QUEUED = 54,
+	ATA_CMD_WRITE_STREAM_EXT = 59,
+	ATA_CMD_WRITE_STREAM_DMA_EXT = 58,
+	ATA_CMD_WRITE_FUA_EXT = 61,
+	ATA_CMD_WRITE_QUEUED_FUA_EXT = 62,
+	ATA_CMD_FPDMA_READ = 96,
+	ATA_CMD_FPDMA_WRITE = 97,
+	ATA_CMD_NCQ_NON_DATA = 99,
+	ATA_CMD_FPDMA_SEND = 100,
+	ATA_CMD_FPDMA_RECV = 101,
+	ATA_CMD_PIO_READ = 32,
+	ATA_CMD_PIO_READ_EXT = 36,
+	ATA_CMD_PIO_WRITE = 48,
+	ATA_CMD_PIO_WRITE_EXT = 52,
+	ATA_CMD_READ_MULTI = 196,
+	ATA_CMD_READ_MULTI_EXT = 41,
+	ATA_CMD_WRITE_MULTI = 197,
+	ATA_CMD_WRITE_MULTI_EXT = 57,
+	ATA_CMD_WRITE_MULTI_FUA_EXT = 206,
+	ATA_CMD_SET_FEATURES = 239,
+	ATA_CMD_SET_MULTI = 198,
+	ATA_CMD_PACKET = 160,
+	ATA_CMD_VERIFY = 64,
+	ATA_CMD_VERIFY_EXT = 66,
+	ATA_CMD_WRITE_UNCORR_EXT = 69,
+	ATA_CMD_STANDBYNOW1 = 224,
+	ATA_CMD_IDLEIMMEDIATE = 225,
+	ATA_CMD_SLEEP = 230,
+	ATA_CMD_INIT_DEV_PARAMS = 145,
+	ATA_CMD_READ_NATIVE_MAX = 248,
+	ATA_CMD_READ_NATIVE_MAX_EXT = 39,
+	ATA_CMD_SET_MAX = 249,
+	ATA_CMD_SET_MAX_EXT = 55,
+	ATA_CMD_READ_LOG_EXT = 47,
+	ATA_CMD_WRITE_LOG_EXT = 63,
+	ATA_CMD_READ_LOG_DMA_EXT = 71,
+	ATA_CMD_WRITE_LOG_DMA_EXT = 87,
+	ATA_CMD_TRUSTED_NONDATA = 91,
+	ATA_CMD_TRUSTED_RCV = 92,
+	ATA_CMD_TRUSTED_RCV_DMA = 93,
+	ATA_CMD_TRUSTED_SND = 94,
+	ATA_CMD_TRUSTED_SND_DMA = 95,
+	ATA_CMD_PMP_READ = 228,
+	ATA_CMD_PMP_READ_DMA = 233,
+	ATA_CMD_PMP_WRITE = 232,
+	ATA_CMD_PMP_WRITE_DMA = 235,
+	ATA_CMD_CONF_OVERLAY = 177,
+	ATA_CMD_SEC_SET_PASS = 241,
+	ATA_CMD_SEC_UNLOCK = 242,
+	ATA_CMD_SEC_ERASE_PREP = 243,
+	ATA_CMD_SEC_ERASE_UNIT = 244,
+	ATA_CMD_SEC_FREEZE_LOCK = 245,
+	ATA_CMD_SEC_DISABLE_PASS = 246,
+	ATA_CMD_CONFIG_STREAM = 81,
+	ATA_CMD_SMART = 176,
+	ATA_CMD_MEDIA_LOCK = 222,
+	ATA_CMD_MEDIA_UNLOCK = 223,
+	ATA_CMD_DSM = 6,
+	ATA_CMD_CHK_MED_CRD_TYP = 209,
+	ATA_CMD_CFA_REQ_EXT_ERR = 3,
+	ATA_CMD_CFA_WRITE_NE = 56,
+	ATA_CMD_CFA_TRANS_SECT = 135,
+	ATA_CMD_CFA_ERASE = 192,
+	ATA_CMD_CFA_WRITE_MULT_NE = 205,
+	ATA_CMD_REQ_SENSE_DATA = 11,
+	ATA_CMD_SANITIZE_DEVICE = 180,
+	ATA_CMD_ZAC_MGMT_IN = 74,
+	ATA_CMD_ZAC_MGMT_OUT = 159,
+	ATA_CMD_RESTORE = 16,
+	ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,
+	ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,
+	ATA_SUBCMD_FPDMA_SEND_DSM = 0,
+	ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,
+	ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,
+	ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,
+	ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,
+	ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,
+	ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,
+	ATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,
+	ATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,
+	ATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,
+	ATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,
+	ATA_LOG_DIRECTORY = 0,
+	ATA_LOG_SATA_NCQ = 16,
+	ATA_LOG_NCQ_NON_DATA = 18,
+	ATA_LOG_NCQ_SEND_RECV = 19,
+	ATA_LOG_IDENTIFY_DEVICE = 48,
+	ATA_LOG_CONCURRENT_POSITIONING_RANGES = 71,
+	ATA_LOG_SECURITY = 6,
+	ATA_LOG_SATA_SETTINGS = 8,
+	ATA_LOG_ZONED_INFORMATION = 9,
+	ATA_LOG_DEVSLP_OFFSET = 48,
+	ATA_LOG_DEVSLP_SIZE = 8,
+	ATA_LOG_DEVSLP_MDAT = 0,
+	ATA_LOG_DEVSLP_MDAT_MASK = 31,
+	ATA_LOG_DEVSLP_DETO = 1,
+	ATA_LOG_DEVSLP_VALID = 7,
+	ATA_LOG_DEVSLP_VALID_MASK = 128,
+	ATA_LOG_NCQ_PRIO_OFFSET = 9,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,
+	ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,
+	ATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,
+	ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,
+	ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,
+	ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,
+	ATA_LOG_NCQ_SEND_RECV_SIZE = 20,
+	ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,
+	ATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,
+	ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,
+	ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,
+	ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,
+	ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,
+	ATA_LOG_NCQ_NON_DATA_SIZE = 64,
+	ATA_CMD_READ_LONG = 34,
+	ATA_CMD_READ_LONG_ONCE = 35,
+	ATA_CMD_WRITE_LONG = 50,
+	ATA_CMD_WRITE_LONG_ONCE = 51,
+	SETFEATURES_XFER = 3,
+	XFER_UDMA_7 = 71,
+	XFER_UDMA_6 = 70,
+	XFER_UDMA_5 = 69,
+	XFER_UDMA_4 = 68,
+	XFER_UDMA_3 = 67,
+	XFER_UDMA_2 = 66,
+	XFER_UDMA_1 = 65,
+	XFER_UDMA_0 = 64,
+	XFER_MW_DMA_4 = 36,
+	XFER_MW_DMA_3 = 35,
+	XFER_MW_DMA_2 = 34,
+	XFER_MW_DMA_1 = 33,
+	XFER_MW_DMA_0 = 32,
+	XFER_SW_DMA_2 = 18,
+	XFER_SW_DMA_1 = 17,
+	XFER_SW_DMA_0 = 16,
+	XFER_PIO_6 = 14,
+	XFER_PIO_5 = 13,
+	XFER_PIO_4 = 12,
+	XFER_PIO_3 = 11,
+	XFER_PIO_2 = 10,
+	XFER_PIO_1 = 9,
+	XFER_PIO_0 = 8,
+	XFER_PIO_SLOW = 0,
+	SETFEATURES_WC_ON = 2,
+	SETFEATURES_WC_OFF = 130,
+	SETFEATURES_RA_ON = 170,
+	SETFEATURES_RA_OFF = 85,
+	SETFEATURES_AAM_ON = 66,
+	SETFEATURES_AAM_OFF = 194,
+	SETFEATURES_SPINUP = 7,
+	SETFEATURES_SPINUP_TIMEOUT = 30000,
+	SETFEATURES_SATA_ENABLE = 16,
+	SETFEATURES_SATA_DISABLE = 144,
+	SATA_FPDMA_OFFSET = 1,
+	SATA_FPDMA_AA = 2,
+	SATA_DIPM = 3,
+	SATA_FPDMA_IN_ORDER = 4,
+	SATA_AN = 5,
+	SATA_SSP = 6,
+	SATA_DEVSLP = 9,
+	SETFEATURE_SENSE_DATA = 195,
+	ATA_SET_MAX_ADDR = 0,
+	ATA_SET_MAX_PASSWD = 1,
+	ATA_SET_MAX_LOCK = 2,
+	ATA_SET_MAX_UNLOCK = 3,
+	ATA_SET_MAX_FREEZE_LOCK = 4,
+	ATA_SET_MAX_PASSWD_DMA = 5,
+	ATA_SET_MAX_UNLOCK_DMA = 6,
+	ATA_DCO_RESTORE = 192,
+	ATA_DCO_FREEZE_LOCK = 193,
+	ATA_DCO_IDENTIFY = 194,
+	ATA_DCO_SET = 195,
+	ATA_SMART_ENABLE = 216,
+	ATA_SMART_READ_VALUES = 208,
+	ATA_SMART_READ_THRESHOLDS = 209,
+	ATA_DSM_TRIM = 1,
+	ATA_SMART_LBAM_PASS = 79,
+	ATA_SMART_LBAH_PASS = 194,
+	ATAPI_PKT_DMA = 1,
+	ATAPI_DMADIR = 4,
+	ATAPI_CDB_LEN = 16,
+	SATA_PMP_MAX_PORTS = 15,
+	SATA_PMP_CTRL_PORT = 15,
+	SATA_PMP_GSCR_DWORDS = 128,
+	SATA_PMP_GSCR_PROD_ID = 0,
+	SATA_PMP_GSCR_REV = 1,
+	SATA_PMP_GSCR_PORT_INFO = 2,
+	SATA_PMP_GSCR_ERROR = 32,
+	SATA_PMP_GSCR_ERROR_EN = 33,
+	SATA_PMP_GSCR_FEAT = 64,
+	SATA_PMP_GSCR_FEAT_EN = 96,
+	SATA_PMP_PSCR_STATUS = 0,
+	SATA_PMP_PSCR_ERROR = 1,
+	SATA_PMP_PSCR_CONTROL = 2,
+	SATA_PMP_FEAT_BIST = 1,
+	SATA_PMP_FEAT_PMREQ = 2,
+	SATA_PMP_FEAT_DYNSSC = 4,
+	SATA_PMP_FEAT_NOTIFY = 8,
+	ATA_CBL_NONE = 0,
+	ATA_CBL_PATA40 = 1,
+	ATA_CBL_PATA80 = 2,
+	ATA_CBL_PATA40_SHORT = 3,
+	ATA_CBL_PATA_UNK = 4,
+	ATA_CBL_PATA_IGN = 5,
+	ATA_CBL_SATA = 6,
+	SCR_STATUS = 0,
+	SCR_ERROR = 1,
+	SCR_CONTROL = 2,
+	SCR_ACTIVE = 3,
+	SCR_NOTIFICATION = 4,
+	SERR_DATA_RECOVERED = 1,
+	SERR_COMM_RECOVERED = 2,
+	SERR_DATA = 256,
+	SERR_PERSISTENT = 512,
+	SERR_PROTOCOL = 1024,
+	SERR_INTERNAL = 2048,
+	SERR_PHYRDY_CHG = 65536,
+	SERR_PHY_INT_ERR = 131072,
+	SERR_COMM_WAKE = 262144,
+	SERR_10B_8B_ERR = 524288,
+	SERR_DISPARITY = 1048576,
+	SERR_CRC = 2097152,
+	SERR_HANDSHAKE = 4194304,
+	SERR_LINK_SEQ_ERR = 8388608,
+	SERR_TRANS_ST_ERROR = 16777216,
+	SERR_UNRECOG_FIS = 33554432,
+	SERR_DEV_XCHG = 67108864,
+};
+
+enum ata_prot_flags {
+	ATA_PROT_FLAG_PIO = 1,
+	ATA_PROT_FLAG_DMA = 2,
+	ATA_PROT_FLAG_NCQ = 4,
+	ATA_PROT_FLAG_ATAPI = 8,
+	ATA_PROT_UNKNOWN = 255,
+	ATA_PROT_NODATA = 0,
+	ATA_PROT_PIO = 1,
+	ATA_PROT_DMA = 2,
+	ATA_PROT_NCQ_NODATA = 4,
+	ATA_PROT_NCQ = 6,
+	ATAPI_PROT_NODATA = 8,
+	ATAPI_PROT_PIO = 9,
+	ATAPI_PROT_DMA = 10,
+};
+
+struct ata_bmdma_prd {
+	__le32 addr;
+	__le32 flags_len;
+};
+
+enum {
+	LIBATA_MAX_PRD = 128,
+	LIBATA_DUMB_MAX_PRD = 64,
+	ATA_DEF_QUEUE = 1,
+	ATA_MAX_QUEUE = 32,
+	ATA_TAG_INTERNAL = 32,
+	ATA_SHORT_PAUSE = 16,
+	ATAPI_MAX_DRAIN = 16384,
+	ATA_ALL_DEVICES = 3,
+	ATA_SHT_EMULATED = 1,
+	ATA_SHT_THIS_ID = 4294967295,
+	ATA_TFLAG_LBA48 = 1,
+	ATA_TFLAG_ISADDR = 2,
+	ATA_TFLAG_DEVICE = 4,
+	ATA_TFLAG_WRITE = 8,
+	ATA_TFLAG_LBA = 16,
+	ATA_TFLAG_FUA = 32,
+	ATA_TFLAG_POLLING = 64,
+	ATA_DFLAG_LBA = 1,
+	ATA_DFLAG_LBA48 = 2,
+	ATA_DFLAG_CDB_INTR = 4,
+	ATA_DFLAG_NCQ = 8,
+	ATA_DFLAG_FLUSH_EXT = 16,
+	ATA_DFLAG_ACPI_PENDING = 32,
+	ATA_DFLAG_ACPI_FAILED = 64,
+	ATA_DFLAG_AN = 128,
+	ATA_DFLAG_TRUSTED = 256,
+	ATA_DFLAG_DMADIR = 1024,
+	ATA_DFLAG_CFG_MASK = 4095,
+	ATA_DFLAG_PIO = 4096,
+	ATA_DFLAG_NCQ_OFF = 8192,
+	ATA_DFLAG_SLEEPING = 32768,
+	ATA_DFLAG_DUBIOUS_XFER = 65536,
+	ATA_DFLAG_NO_UNLOAD = 131072,
+	ATA_DFLAG_UNLOCK_HPA = 262144,
+	ATA_DFLAG_NCQ_SEND_RECV = 524288,
+	ATA_DFLAG_NCQ_PRIO = 1048576,
+	ATA_DFLAG_NCQ_PRIO_ENABLE = 2097152,
+	ATA_DFLAG_INIT_MASK = 16777215,
+	ATA_DFLAG_DETACH = 16777216,
+	ATA_DFLAG_DETACHED = 33554432,
+	ATA_DFLAG_DA = 67108864,
+	ATA_DFLAG_DEVSLP = 134217728,
+	ATA_DFLAG_ACPI_DISABLED = 268435456,
+	ATA_DFLAG_D_SENSE = 536870912,
+	ATA_DFLAG_ZAC = 1073741824,
+	ATA_DFLAG_FEATURES_MASK = 202899712,
+	ATA_DEV_UNKNOWN = 0,
+	ATA_DEV_ATA = 1,
+	ATA_DEV_ATA_UNSUP = 2,
+	ATA_DEV_ATAPI = 3,
+	ATA_DEV_ATAPI_UNSUP = 4,
+	ATA_DEV_PMP = 5,
+	ATA_DEV_PMP_UNSUP = 6,
+	ATA_DEV_SEMB = 7,
+	ATA_DEV_SEMB_UNSUP = 8,
+	ATA_DEV_ZAC = 9,
+	ATA_DEV_ZAC_UNSUP = 10,
+	ATA_DEV_NONE = 11,
+	ATA_LFLAG_NO_HRST = 2,
+	ATA_LFLAG_NO_SRST = 4,
+	ATA_LFLAG_ASSUME_ATA = 8,
+	ATA_LFLAG_ASSUME_SEMB = 16,
+	ATA_LFLAG_ASSUME_CLASS = 24,
+	ATA_LFLAG_NO_RETRY = 32,
+	ATA_LFLAG_DISABLED = 64,
+	ATA_LFLAG_SW_ACTIVITY = 128,
+	ATA_LFLAG_NO_LPM = 256,
+	ATA_LFLAG_RST_ONCE = 512,
+	ATA_LFLAG_CHANGED = 1024,
+	ATA_LFLAG_NO_DEBOUNCE_DELAY = 2048,
+	ATA_FLAG_SLAVE_POSS = 1,
+	ATA_FLAG_SATA = 2,
+	ATA_FLAG_NO_LPM = 4,
+	ATA_FLAG_NO_LOG_PAGE = 32,
+	ATA_FLAG_NO_ATAPI = 64,
+	ATA_FLAG_PIO_DMA = 128,
+	ATA_FLAG_PIO_LBA48 = 256,
+	ATA_FLAG_PIO_POLLING = 512,
+	ATA_FLAG_NCQ = 1024,
+	ATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,
+	ATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,
+	ATA_FLAG_DEBUGMSG = 8192,
+	ATA_FLAG_FPDMA_AA = 16384,
+	ATA_FLAG_IGN_SIMPLEX = 32768,
+	ATA_FLAG_NO_IORDY = 65536,
+	ATA_FLAG_ACPI_SATA = 131072,
+	ATA_FLAG_AN = 262144,
+	ATA_FLAG_PMP = 524288,
+	ATA_FLAG_FPDMA_AUX = 1048576,
+	ATA_FLAG_EM = 2097152,
+	ATA_FLAG_SW_ACTIVITY = 4194304,
+	ATA_FLAG_NO_DIPM = 8388608,
+	ATA_FLAG_SAS_HOST = 16777216,
+	ATA_PFLAG_EH_PENDING = 1,
+	ATA_PFLAG_EH_IN_PROGRESS = 2,
+	ATA_PFLAG_FROZEN = 4,
+	ATA_PFLAG_RECOVERED = 8,
+	ATA_PFLAG_LOADING = 16,
+	ATA_PFLAG_SCSI_HOTPLUG = 64,
+	ATA_PFLAG_INITIALIZING = 128,
+	ATA_PFLAG_RESETTING = 256,
+	ATA_PFLAG_UNLOADING = 512,
+	ATA_PFLAG_UNLOADED = 1024,
+	ATA_PFLAG_SUSPENDED = 131072,
+	ATA_PFLAG_PM_PENDING = 262144,
+	ATA_PFLAG_INIT_GTM_VALID = 524288,
+	ATA_PFLAG_PIO32 = 1048576,
+	ATA_PFLAG_PIO32CHANGE = 2097152,
+	ATA_PFLAG_EXTERNAL = 4194304,
+	ATA_QCFLAG_ACTIVE = 1,
+	ATA_QCFLAG_DMAMAP = 2,
+	ATA_QCFLAG_IO = 8,
+	ATA_QCFLAG_RESULT_TF = 16,
+	ATA_QCFLAG_CLEAR_EXCL = 32,
+	ATA_QCFLAG_QUIET = 64,
+	ATA_QCFLAG_RETRY = 128,
+	ATA_QCFLAG_FAILED = 65536,
+	ATA_QCFLAG_SENSE_VALID = 131072,
+	ATA_QCFLAG_EH_SCHEDULED = 262144,
+	ATA_HOST_SIMPLEX = 1,
+	ATA_HOST_STARTED = 2,
+	ATA_HOST_PARALLEL_SCAN = 4,
+	ATA_HOST_IGNORE_ATA = 8,
+	ATA_TMOUT_BOOT = 30000,
+	ATA_TMOUT_BOOT_QUICK = 7000,
+	ATA_TMOUT_INTERNAL_QUICK = 5000,
+	ATA_TMOUT_MAX_PARK = 30000,
+	ATA_TMOUT_FF_WAIT_LONG = 2000,
+	ATA_TMOUT_FF_WAIT = 800,
+	ATA_WAIT_AFTER_RESET = 150,
+	ATA_TMOUT_PMP_SRST_WAIT = 5000,
+	ATA_TMOUT_SPURIOUS_PHY = 10000,
+	BUS_UNKNOWN = 0,
+	BUS_DMA = 1,
+	BUS_IDLE = 2,
+	BUS_NOINTR = 3,
+	BUS_NODATA = 4,
+	BUS_TIMER = 5,
+	BUS_PIO = 6,
+	BUS_EDD = 7,
+	BUS_IDENTIFY = 8,
+	BUS_PACKET = 9,
+	PORT_UNKNOWN = 0,
+	PORT_ENABLED = 1,
+	PORT_DISABLED = 2,
+	ATA_NR_PIO_MODES = 7,
+	ATA_NR_MWDMA_MODES = 5,
+	ATA_NR_UDMA_MODES = 8,
+	ATA_SHIFT_PIO = 0,
+	ATA_SHIFT_MWDMA = 7,
+	ATA_SHIFT_UDMA = 12,
+	ATA_SHIFT_PRIO = 6,
+	ATA_PRIO_HIGH = 2,
+	ATA_DMA_PAD_SZ = 4,
+	ATA_ERING_SIZE = 32,
+	ATA_DEFER_LINK = 1,
+	ATA_DEFER_PORT = 2,
+	ATA_EH_DESC_LEN = 80,
+	ATA_EH_REVALIDATE = 1,
+	ATA_EH_SOFTRESET = 2,
+	ATA_EH_HARDRESET = 4,
+	ATA_EH_RESET = 6,
+	ATA_EH_ENABLE_LINK = 8,
+	ATA_EH_PARK = 32,
+	ATA_EH_PERDEV_MASK = 33,
+	ATA_EH_ALL_ACTIONS = 15,
+	ATA_EHI_HOTPLUGGED = 1,
+	ATA_EHI_NO_AUTOPSY = 4,
+	ATA_EHI_QUIET = 8,
+	ATA_EHI_NO_RECOVERY = 16,
+	ATA_EHI_DID_SOFTRESET = 65536,
+	ATA_EHI_DID_HARDRESET = 131072,
+	ATA_EHI_PRINTINFO = 262144,
+	ATA_EHI_SETMODE = 524288,
+	ATA_EHI_POST_SETMODE = 1048576,
+	ATA_EHI_DID_RESET = 196608,
+	ATA_EHI_TO_SLAVE_MASK = 12,
+	ATA_EH_MAX_TRIES = 5,
+	ATA_LINK_RESUME_TRIES = 5,
+	ATA_PROBE_MAX_TRIES = 3,
+	ATA_EH_DEV_TRIES = 3,
+	ATA_EH_PMP_TRIES = 5,
+	ATA_EH_PMP_LINK_TRIES = 3,
+	SATA_PMP_RW_TIMEOUT = 3000,
+	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
+	ATA_HORKAGE_DIAGNOSTIC = 1,
+	ATA_HORKAGE_NODMA = 2,
+	ATA_HORKAGE_NONCQ = 4,
+	ATA_HORKAGE_MAX_SEC_128 = 8,
+	ATA_HORKAGE_BROKEN_HPA = 16,
+	ATA_HORKAGE_DISABLE = 32,
+	ATA_HORKAGE_HPA_SIZE = 64,
+	ATA_HORKAGE_IVB = 256,
+	ATA_HORKAGE_STUCK_ERR = 512,
+	ATA_HORKAGE_BRIDGE_OK = 1024,
+	ATA_HORKAGE_ATAPI_MOD16_DMA = 2048,
+	ATA_HORKAGE_FIRMWARE_WARN = 4096,
+	ATA_HORKAGE_1_5_GBPS = 8192,
+	ATA_HORKAGE_NOSETXFER = 16384,
+	ATA_HORKAGE_BROKEN_FPDMA_AA = 32768,
+	ATA_HORKAGE_DUMP_ID = 65536,
+	ATA_HORKAGE_MAX_SEC_LBA48 = 131072,
+	ATA_HORKAGE_ATAPI_DMADIR = 262144,
+	ATA_HORKAGE_NO_NCQ_TRIM = 524288,
+	ATA_HORKAGE_NOLPM = 1048576,
+	ATA_HORKAGE_WD_BROKEN_LPM = 2097152,
+	ATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,
+	ATA_HORKAGE_NO_DMA_LOG = 8388608,
+	ATA_HORKAGE_NOTRIM = 16777216,
+	ATA_HORKAGE_MAX_SEC_1024 = 33554432,
+	ATA_HORKAGE_MAX_TRIM_128M = 67108864,
+	ATA_HORKAGE_NO_NCQ_ON_ATI = 134217728,
+	ATA_HORKAGE_NO_ID_DEV_LOG = 268435456,
+	ATA_HORKAGE_NO_LOG_DIR = 536870912,
+	ATA_DMA_MASK_ATA = 1,
+	ATA_DMA_MASK_ATAPI = 2,
+	ATA_DMA_MASK_CFA = 4,
+	ATAPI_READ = 0,
+	ATAPI_WRITE = 1,
+	ATAPI_READ_CD = 2,
+	ATAPI_PASS_THRU = 3,
+	ATAPI_MISC = 4,
+	ATA_TIMING_SETUP = 1,
+	ATA_TIMING_ACT8B = 2,
+	ATA_TIMING_REC8B = 4,
+	ATA_TIMING_CYC8B = 8,
+	ATA_TIMING_8BIT = 14,
+	ATA_TIMING_ACTIVE = 16,
+	ATA_TIMING_RECOVER = 32,
+	ATA_TIMING_DMACK_HOLD = 64,
+	ATA_TIMING_CYCLE = 128,
+	ATA_TIMING_UDMA = 256,
+	ATA_TIMING_ALL = 511,
+	ATA_ACPI_FILTER_SETXFER = 1,
+	ATA_ACPI_FILTER_LOCK = 2,
+	ATA_ACPI_FILTER_DIPM = 4,
+	ATA_ACPI_FILTER_FPDMA_OFFSET = 8,
+	ATA_ACPI_FILTER_FPDMA_AA = 16,
+	ATA_ACPI_FILTER_DEFAULT = 7,
+};
+
+enum ata_xfer_mask {
+	ATA_MASK_PIO = 127,
+	ATA_MASK_MWDMA = 3968,
+	ATA_MASK_UDMA = 1044480,
+};
+
+enum hsm_task_states {
+	HSM_ST_IDLE = 0,
+	HSM_ST_FIRST = 1,
+	HSM_ST = 2,
+	HSM_ST_LAST = 3,
+	HSM_ST_ERR = 4,
+};
+
+enum ata_completion_errors {
+	AC_ERR_OK = 0,
+	AC_ERR_DEV = 1,
+	AC_ERR_HSM = 2,
+	AC_ERR_TIMEOUT = 4,
+	AC_ERR_MEDIA = 8,
+	AC_ERR_ATA_BUS = 16,
+	AC_ERR_HOST_BUS = 32,
+	AC_ERR_SYSTEM = 64,
+	AC_ERR_INVALID = 128,
+	AC_ERR_OTHER = 256,
+	AC_ERR_NODEV_HINT = 512,
+	AC_ERR_NCQ = 1024,
+};
+
+enum ata_lpm_policy {
+	ATA_LPM_UNKNOWN = 0,
+	ATA_LPM_MAX_POWER = 1,
+	ATA_LPM_MED_POWER = 2,
+	ATA_LPM_MED_POWER_WITH_DIPM = 3,
+	ATA_LPM_MIN_POWER_WITH_PARTIAL = 4,
+	ATA_LPM_MIN_POWER = 5,
+};
+
+struct ata_queued_cmd;
+
+typedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);
+
+struct ata_taskfile {
 	long unsigned int flags;
-	struct nvme_fault_inject fault_inject;
-};
-
-struct nvmf_host {
-	struct kref ref;
-	struct list_head list;
-	char nqn[223];
-	uuid_t id;
-};
-
-struct trace_event_raw_nvme_setup_cmd {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	u8 opcode;
-	u8 flags;
-	u8 fctype;
-	u16 cid;
-	u32 nsid;
-	u64 metadata;
-	u8 cdw10[24];
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_complete_rq {
-	struct trace_entry ent;
-	char disk[32];
-	int ctrl_id;
-	int qid;
-	int cid;
-	u64 result;
-	u8 retries;
-	u8 flags;
-	u16 status;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_async_event {
-	struct trace_entry ent;
-	int ctrl_id;
-	u32 result;
-	char __data[0];
-};
-
-struct trace_event_raw_nvme_sq {
-	struct trace_entry ent;
-	int ctrl_id;
-	char disk[32];
-	int qid;
-	u16 sq_head;
-	u16 sq_tail;
-	char __data[0];
-};
-
-struct trace_event_data_offsets_nvme_setup_cmd {};
-
-struct trace_event_data_offsets_nvme_complete_rq {};
-
-struct trace_event_data_offsets_nvme_async_event {};
-
-struct trace_event_data_offsets_nvme_sq {};
-
-typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
-
-typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
-
-typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
-
-typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
-
-enum nvme_disposition {
-	COMPLETE = 0,
-	RETRY = 1,
-	FAILOVER = 2,
-};
-
-struct nvme_core_quirk_entry {
-	u16 vid;
-	const char *mn;
-	const char *fr;
-	long unsigned int quirks;
-};
-
-struct nvm_user_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u16 control;
-	__u16 nppas;
-	__u16 rsvd;
-	__u64 metadata;
-	__u64 addr;
-	__u64 ppa_list;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 status;
-	__u32 result;
-	__u32 rsvd3[3];
-};
-
-struct nvm_passthru_vio {
-	__u8 opcode;
-	__u8 flags;
-	__u8 rsvd[2];
-	__u32 nsid;
-	__u32 cdw2;
-	__u32 cdw3;
-	__u64 metadata;
-	__u64 addr;
-	__u32 metadata_len;
-	__u32 data_len;
-	__u64 ppa_list;
-	__u16 nppas;
-	__u16 control;
-	__u32 cdw13;
-	__u32 cdw14;
-	__u32 cdw15;
-	__u64 status;
-	__u32 result;
-	__u32 timeout_ms;
-};
-
-enum nvme_nvm_admin_opcode {
-	nvme_nvm_admin_identity = 226,
-	nvme_nvm_admin_get_bb_tbl = 242,
-	nvme_nvm_admin_set_bb_tbl = 241,
-};
-
-enum nvme_nvm_log_page {
-	NVME_NVM_LOG_REPORT_CHUNK = 202,
-};
-
-struct nvme_nvm_ph_rw {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd2;
-	__le64 metadata;
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_erase_blk {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 length;
-	__le16 control;
-	__le32 dsmgmt;
-	__le64 resv;
-};
-
-struct nvme_nvm_identity {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__u32 rsvd11[6];
-};
-
-struct nvme_nvm_getbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__u64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__u32 rsvd4[4];
-};
-
-struct nvme_nvm_setbbtbl {
-	__u8 opcode;
-	__u8 flags;
-	__u16 command_id;
-	__le32 nsid;
-	__le64 rsvd[2];
-	__le64 prp1;
-	__le64 prp2;
-	__le64 spba;
-	__le16 nlb;
-	__u8 value;
-	__u8 rsvd3;
-	__u32 rsvd4[3];
-};
-
-struct nvme_nvm_command {
+	u8 protocol;
+	u8 ctl;
+	u8 hob_feature;
+	u8 hob_nsect;
+	u8 hob_lbal;
+	u8 hob_lbam;
+	u8 hob_lbah;
 	union {
-		struct nvme_common_command common;
-		struct nvme_nvm_ph_rw ph_rw;
-		struct nvme_nvm_erase_blk erase;
-		struct nvme_nvm_identity identity;
-		struct nvme_nvm_getbbtbl get_bb;
-		struct nvme_nvm_setbbtbl set_bb;
+		u8 error;
+		u8 feature;
 	};
+	u8 nsect;
+	u8 lbal;
+	u8 lbam;
+	u8 lbah;
+	u8 device;
+	union {
+		u8 status;
+		u8 command;
+	};
+	u32 auxiliary;
 };
 
-struct nvme_nvm_id12_grp {
-	__u8 mtype;
-	__u8 fmtype;
-	__le16 res16;
-	__u8 num_ch;
-	__u8 num_lun;
-	__u8 num_pln;
-	__u8 rsvd1;
-	__le16 num_chk;
-	__le16 num_pg;
-	__le16 fpg_sz;
-	__le16 csecs;
-	__le16 sos;
-	__le16 rsvd2;
-	__le32 trdt;
-	__le32 trdm;
-	__le32 tprt;
-	__le32 tprm;
-	__le32 tbet;
-	__le32 tbem;
-	__le32 mpos;
-	__le32 mccap;
-	__le16 cpar;
-	__u8 reserved[906];
-};
+struct ata_port;
 
-struct nvme_nvm_id12_addrf {
-	__u8 ch_offset;
-	__u8 ch_len;
-	__u8 lun_offset;
-	__u8 lun_len;
-	__u8 pln_offset;
-	__u8 pln_len;
-	__u8 blk_offset;
-	__u8 blk_len;
-	__u8 pg_offset;
-	__u8 pg_len;
-	__u8 sec_offset;
-	__u8 sec_len;
-	__u8 res[4];
-};
+struct ata_device;
 
-struct nvme_nvm_id12 {
-	__u8 ver_id;
-	__u8 vmnt;
-	__u8 cgrps;
-	__u8 res;
-	__le32 cap;
-	__le32 dom;
-	struct nvme_nvm_id12_addrf ppaf;
-	__u8 resv[228];
-	struct nvme_nvm_id12_grp grp;
-	__u8 resv2[2880];
-};
-
-struct nvme_nvm_bb_tbl {
-	__u8 tblid[4];
-	__le16 verid;
-	__le16 revid;
-	__le32 rvsd1;
-	__le32 tblks;
-	__le32 tfact;
-	__le32 tgrown;
-	__le32 tdresv;
-	__le32 thresv;
-	__le32 rsvd2[8];
-	__u8 blk[0];
-};
-
-struct nvme_nvm_id20_addrf {
-	__u8 grp_len;
-	__u8 pu_len;
-	__u8 chk_len;
-	__u8 lba_len;
-	__u8 resv[4];
-};
-
-struct nvme_nvm_id20 {
-	__u8 mjr;
-	__u8 mnr;
-	__u8 resv[6];
-	struct nvme_nvm_id20_addrf lbaf;
-	__le32 mccap;
-	__u8 resv2[12];
-	__u8 wit;
-	__u8 resv3[31];
-	__le16 num_grp;
-	__le16 num_pu;
-	__le32 num_chk;
-	__le32 clba;
-	__u8 resv4[52];
-	__le32 ws_min;
-	__le32 ws_opt;
-	__le32 mw_cunits;
-	__le32 maxoc;
-	__le32 maxocpu;
-	__u8 resv5[44];
-	__le32 trdt;
-	__le32 trdm;
-	__le32 twrt;
-	__le32 twrm;
-	__le32 tcrst;
-	__le32 tcrsm;
-	__u8 resv6[40];
-	__u8 resv7[2816];
-	__u8 vs[1024];
-};
-
-struct nvme_nvm_chk_meta {
-	__u8 state;
-	__u8 type;
-	__u8 wi;
-	__u8 rsvd[5];
-	__le64 slba;
-	__le64 cnlb;
-	__le64 wp;
-};
-
-struct nvme_zns_lbafe {
-	__le64 zsze;
-	__u8 zdes;
-	__u8 rsvd9[7];
-};
-
-struct nvme_id_ns_zns {
-	__le16 zoc;
-	__le16 ozcs;
-	__le32 mar;
-	__le32 mor;
-	__le32 rrl;
-	__le32 frl;
-	__u8 rsvd20[2796];
-	struct nvme_zns_lbafe lbafe[16];
-	__u8 rsvd3072[768];
-	__u8 vs[256];
-};
-
-struct nvme_id_ctrl_zns {
-	__u8 zasl;
-	__u8 rsvd1[4095];
-};
-
-struct nvme_zone_descriptor {
-	__u8 zt;
-	__u8 zs;
-	__u8 za;
-	__u8 rsvd3[5];
-	__le64 zcap;
-	__le64 zslba;
-	__le64 wp;
-	__u8 rsvd32[32];
-};
-
-enum {
-	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
-};
-
-struct nvme_zone_report {
-	__le64 nr_zones;
-	__u8 resv8[56];
-	struct nvme_zone_descriptor entries[0];
-};
-
-enum {
-	NVME_ZRA_ZONE_REPORT = 0,
-	NVME_ZRASF_ZONE_REPORT_ALL = 0,
-	NVME_REPORT_ZONE_PARTIAL = 1,
-};
-
-enum {
-	NVME_CMBSZ_SQS = 1,
-	NVME_CMBSZ_CQS = 2,
-	NVME_CMBSZ_LISTS = 4,
-	NVME_CMBSZ_RDS = 8,
-	NVME_CMBSZ_WDS = 16,
-	NVME_CMBSZ_SZ_SHIFT = 12,
-	NVME_CMBSZ_SZ_MASK = 1048575,
-	NVME_CMBSZ_SZU_SHIFT = 8,
-	NVME_CMBSZ_SZU_MASK = 15,
-};
-
-enum {
-	NVME_SGL_FMT_DATA_DESC = 0,
-	NVME_SGL_FMT_SEG_DESC = 2,
-	NVME_SGL_FMT_LAST_SEG_DESC = 3,
-	NVME_KEY_SGL_FMT_DATA_DESC = 4,
-	NVME_TRANSPORT_SGL_DATA_DESC = 5,
-};
-
-enum {
-	NVME_HOST_MEM_ENABLE = 1,
-	NVME_HOST_MEM_RETURN = 2,
-};
-
-struct nvme_host_mem_buf_desc {
-	__le64 addr;
-	__le32 size;
-	__u32 rsvd;
-};
-
-struct nvme_completion {
-	union nvme_result result;
-	__le16 sq_head;
-	__le16 sq_id;
-	__u16 command_id;
-	__le16 status;
-};
-
-struct nvme_queue;
-
-struct nvme_dev {
-	struct nvme_queue *queues;
-	struct blk_mq_tag_set tagset;
-	struct blk_mq_tag_set admin_tagset;
-	u32 *dbs;
-	struct device *dev;
-	struct dma_pool___2 *prp_page_pool;
-	struct dma_pool___2 *prp_small_pool;
-	unsigned int online_queues;
-	unsigned int max_qid;
-	unsigned int io_queues[3];
-	unsigned int num_vecs;
-	u32 q_depth;
-	int io_sqes;
-	u32 db_stride;
-	void *bar;
-	long unsigned int bar_mapped_size;
-	struct work_struct remove_work;
-	struct mutex shutdown_lock;
-	bool subsystem;
-	u64 cmb_size;
-	bool cmb_use_sqes;
-	u32 cmbsz;
-	u32 cmbloc;
-	struct nvme_ctrl ctrl;
-	u32 last_ps;
-	mempool_t *iod_mempool;
-	u32 *dbbuf_dbs;
-	dma_addr_t dbbuf_dbs_dma_addr;
-	u32 *dbbuf_eis;
-	dma_addr_t dbbuf_eis_dma_addr;
-	u64 host_mem_size;
-	u32 nr_host_mem_descs;
-	dma_addr_t host_mem_descs_dma;
-	struct nvme_host_mem_buf_desc *host_mem_descs;
-	void **host_mem_desc_bufs;
-	unsigned int nr_allocated_queues;
-	unsigned int nr_write_queues;
-	unsigned int nr_poll_queues;
-};
-
-struct nvme_queue {
-	struct nvme_dev *dev;
-	spinlock_t sq_lock;
-	void *sq_cmds;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t cq_poll_lock;
-	struct nvme_completion *cqes;
-	dma_addr_t sq_dma_addr;
-	dma_addr_t cq_dma_addr;
-	u32 *q_db;
-	u32 q_depth;
-	u16 cq_vector;
-	u16 sq_tail;
-	u16 last_sq_tail;
-	u16 cq_head;
-	u16 qid;
-	u8 cq_phase;
-	u8 sqes;
+struct ata_queued_cmd {
+	struct ata_port *ap;
+	struct ata_device *dev;
+	struct scsi_cmnd *scsicmd;
+	void (*scsidone)(struct scsi_cmnd *);
+	struct ata_taskfile tf;
+	u8 cdb[16];
 	long unsigned int flags;
-	u32 *dbbuf_sq_db;
-	u32 *dbbuf_cq_db;
-	u32 *dbbuf_sq_ei;
-	u32 *dbbuf_cq_ei;
-	struct completion delete_done;
+	unsigned int tag;
+	unsigned int hw_tag;
+	unsigned int n_elem;
+	unsigned int orig_n_elem;
+	int dma_dir;
+	unsigned int sect_size;
+	unsigned int nbytes;
+	unsigned int extrabytes;
+	unsigned int curbytes;
+	struct scatterlist sgent;
+	struct scatterlist *sg;
+	struct scatterlist *cursg;
+	unsigned int cursg_ofs;
+	unsigned int err_mask;
+	struct ata_taskfile result_tf;
+	ata_qc_cb_t complete_fn;
+	void *private_data;
+	void *lldd_task;
 };
 
-struct nvme_iod {
-	struct nvme_request req;
-	struct nvme_queue *nvmeq;
-	bool use_sgl;
-	int aborted;
-	int npages;
-	int nents;
-	dma_addr_t first_dma;
-	unsigned int dma_len;
-	dma_addr_t meta_dma;
-	struct scatterlist *sg;
+struct ata_link;
+
+typedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);
+
+struct ata_eh_info {
+	struct ata_device *dev;
+	u32 serror;
+	unsigned int err_mask;
+	unsigned int action;
+	unsigned int dev_action[2];
+	unsigned int flags;
+	unsigned int probe_mask;
+	char desc[80];
+	int desc_len;
+};
+
+struct ata_eh_context {
+	struct ata_eh_info i;
+	int tries[2];
+	int cmd_timeout_idx[14];
+	unsigned int classes[2];
+	unsigned int did_probe_mask;
+	unsigned int unloaded_mask;
+	unsigned int saved_ncq_enabled;
+	u8 saved_xfer_mode[2];
+	long unsigned int last_reset;
+};
+
+struct ata_ering_entry {
+	unsigned int eflags;
+	unsigned int err_mask;
+	u64 timestamp;
+};
+
+struct ata_ering {
+	int cursor;
+	struct ata_ering_entry ring[32];
+};
+
+struct ata_cpr_log;
+
+struct ata_device {
+	struct ata_link *link;
+	unsigned int devno;
+	unsigned int horkage;
+	long unsigned int flags;
+	struct scsi_device *sdev;
+	void *private_data;
+	union acpi_object *gtf_cache;
+	unsigned int gtf_filter;
+	void *zpodd;
+	struct device tdev;
+	u64 n_sectors;
+	u64 n_native_sectors;
+	unsigned int class;
+	long unsigned int unpark_deadline;
+	u8 pio_mode;
+	u8 dma_mode;
+	u8 xfer_mode;
+	unsigned int xfer_shift;
+	unsigned int multi_count;
+	unsigned int max_sectors;
+	unsigned int cdb_len;
+	long unsigned int pio_mask;
+	long unsigned int mwdma_mask;
+	long unsigned int udma_mask;
+	u16 cylinders;
+	u16 heads;
+	u16 sectors;
+	union {
+		u16 id[256];
+		u32 gscr[128];
+	};
+	u8 devslp_timing[8];
+	u8 ncq_send_recv_cmds[20];
+	u8 ncq_non_data_cmds[64];
+	u32 zac_zoned_cap;
+	u32 zac_zones_optimal_open;
+	u32 zac_zones_optimal_nonseq;
+	u32 zac_zones_max_open;
+	struct ata_cpr_log *cpr_log;
+	int spdn_cnt;
+	struct ata_ering ering;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ata_link {
+	struct ata_port *ap;
+	int pmp;
+	struct device tdev;
+	unsigned int active_tag;
+	u32 sactive;
+	unsigned int flags;
+	u32 saved_scontrol;
+	unsigned int hw_sata_spd_limit;
+	unsigned int sata_spd_limit;
+	unsigned int sata_spd;
+	enum ata_lpm_policy lpm_policy;
+	struct ata_eh_info eh_info;
+	struct ata_eh_context eh_context;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ata_device device[2];
+	long unsigned int last_lpm_change;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);
+
+enum sw_activity {
+	OFF = 0,
+	BLINK_ON = 1,
+	BLINK_OFF = 2,
+};
+
+struct ata_ioports {
+	void *cmd_addr;
+	void *data_addr;
+	void *error_addr;
+	void *feature_addr;
+	void *nsect_addr;
+	void *lbal_addr;
+	void *lbam_addr;
+	void *lbah_addr;
+	void *device_addr;
+	void *status_addr;
+	void *command_addr;
+	void *altstatus_addr;
+	void *ctl_addr;
+	void *bmdma_addr;
+	void *scr_addr;
+};
+
+struct ata_port_operations;
+
+struct ata_host {
+	spinlock_t lock;
+	struct device *dev;
+	void * const *iomap;
+	unsigned int n_ports;
+	unsigned int n_tags;
+	void *private_data;
+	struct ata_port_operations *ops;
+	long unsigned int flags;
+	struct kref kref;
+	struct mutex eh_mutex;
+	struct task_struct *eh_owner;
+	struct ata_port *simplex_claimed;
+	struct ata_port *ports[0];
+};
+
+struct ata_port_operations {
+	int (*qc_defer)(struct ata_queued_cmd *);
+	int (*check_atapi_dma)(struct ata_queued_cmd *);
+	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);
+	unsigned int (*qc_issue)(struct ata_queued_cmd *);
+	bool (*qc_fill_rtf)(struct ata_queued_cmd *);
+	int (*cable_detect)(struct ata_port *);
+	long unsigned int (*mode_filter)(struct ata_device *, long unsigned int);
+	void (*set_piomode)(struct ata_port *, struct ata_device *);
+	void (*set_dmamode)(struct ata_port *, struct ata_device *);
+	int (*set_mode)(struct ata_link *, struct ata_device **);
+	unsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, __le16 *);
+	void (*dev_config)(struct ata_device *);
+	void (*freeze)(struct ata_port *);
+	void (*thaw)(struct ata_port *);
+	ata_prereset_fn_t prereset;
+	ata_reset_fn_t softreset;
+	ata_reset_fn_t hardreset;
+	ata_postreset_fn_t postreset;
+	ata_prereset_fn_t pmp_prereset;
+	ata_reset_fn_t pmp_softreset;
+	ata_reset_fn_t pmp_hardreset;
+	ata_postreset_fn_t pmp_postreset;
+	void (*error_handler)(struct ata_port *);
+	void (*lost_interrupt)(struct ata_port *);
+	void (*post_internal_cmd)(struct ata_queued_cmd *);
+	void (*sched_eh)(struct ata_port *);
+	void (*end_eh)(struct ata_port *);
+	int (*scr_read)(struct ata_link *, unsigned int, u32 *);
+	int (*scr_write)(struct ata_link *, unsigned int, u32);
+	void (*pmp_attach)(struct ata_port *);
+	void (*pmp_detach)(struct ata_port *);
+	int (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);
+	int (*port_suspend)(struct ata_port *, pm_message_t);
+	int (*port_resume)(struct ata_port *);
+	int (*port_start)(struct ata_port *);
+	void (*port_stop)(struct ata_port *);
+	void (*host_stop)(struct ata_host *);
+	void (*sff_dev_select)(struct ata_port *, unsigned int);
+	void (*sff_set_devctl)(struct ata_port *, u8);
+	u8 (*sff_check_status)(struct ata_port *);
+	u8 (*sff_check_altstatus)(struct ata_port *);
+	void (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);
+	void (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);
+	void (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);
+	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);
+	void (*sff_irq_on)(struct ata_port *);
+	bool (*sff_irq_check)(struct ata_port *);
+	void (*sff_irq_clear)(struct ata_port *);
+	void (*sff_drain_fifo)(struct ata_queued_cmd *);
+	void (*bmdma_setup)(struct ata_queued_cmd *);
+	void (*bmdma_start)(struct ata_queued_cmd *);
+	void (*bmdma_stop)(struct ata_queued_cmd *);
+	u8 (*bmdma_status)(struct ata_port *);
+	ssize_t (*em_show)(struct ata_port *, char *);
+	ssize_t (*em_store)(struct ata_port *, const char *, size_t);
+	ssize_t (*sw_activity_show)(struct ata_device *, char *);
+	ssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);
+	ssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);
+	void (*phy_reset)(struct ata_port *);
+	void (*eng_timeout)(struct ata_port *);
+	const struct ata_port_operations *inherits;
+};
+
+struct ata_port_stats {
+	long unsigned int unhandled_irq;
+	long unsigned int idle_irq;
+	long unsigned int rw_reqbuf;
+};
+
+struct ata_acpi_drive {
+	u32 pio;
+	u32 dma;
+};
+
+struct ata_acpi_gtm {
+	struct ata_acpi_drive drive[2];
+	u32 flags;
+};
+
+struct ata_port {
+	struct Scsi_Host *scsi_host;
+	struct ata_port_operations *ops;
+	spinlock_t *lock;
+	long unsigned int flags;
+	unsigned int pflags;
+	unsigned int print_id;
+	unsigned int local_port_no;
+	unsigned int port_no;
+	struct ata_ioports ioaddr;
+	u8 ctl;
+	u8 last_ctl;
+	struct ata_link *sff_pio_task_link;
+	struct delayed_work sff_pio_task;
+	struct ata_bmdma_prd *bmdma_prd;
+	dma_addr_t bmdma_prd_dma;
+	unsigned int pio_mask;
+	unsigned int mwdma_mask;
+	unsigned int udma_mask;
+	unsigned int cbl;
+	struct ata_queued_cmd qcmd[33];
+	u64 qc_active;
+	int nr_active_links;
+	long: 32;
+	long: 64;
+	long: 64;
+	struct ata_link link;
+	struct ata_link *slave_link;
+	int nr_pmp_links;
+	struct ata_link *pmp_link;
+	struct ata_link *excl_link;
+	struct ata_port_stats stats;
+	struct ata_host *host;
+	struct device *dev;
+	struct device tdev;
+	struct mutex scsi_scan_mutex;
+	struct delayed_work hotplug_task;
+	struct work_struct scsi_rescan_task;
+	unsigned int hsm_task_state;
+	struct list_head eh_done_q;
+	wait_queue_head_t eh_wait_q;
+	int eh_tries;
+	struct completion park_req_pending;
+	pm_message_t pm_mesg;
+	enum ata_lpm_policy target_lpm_policy;
+	struct timer_list fastdrain_timer;
+	long unsigned int fastdrain_cnt;
+	async_cookie_t cookie;
+	int em_message_type;
+	void *private_data;
+	struct ata_acpi_gtm __acpi_init_gtm;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 sector_buf[512];
+};
+
+struct ata_cpr {
+	u8 num;
+	u8 num_storage_elements;
+	u64 start_lba;
+	u64 num_lbas;
+};
+
+struct ata_cpr_log {
+	u8 nr_cpr;
+	struct ata_cpr cpr[0];
+};
+
+struct ata_port_info {
+	long unsigned int flags;
+	long unsigned int link_flags;
+	long unsigned int pio_mask;
+	long unsigned int mwdma_mask;
+	long unsigned int udma_mask;
+	struct ata_port_operations *port_ops;
+	void *private_data;
+};
+
+struct ata_timing {
+	short unsigned int mode;
+	short unsigned int setup;
+	short unsigned int act8b;
+	short unsigned int rec8b;
+	short unsigned int cyc8b;
+	short unsigned int active;
+	short unsigned int recover;
+	short unsigned int dmack_hold;
+	short unsigned int cycle;
+	short unsigned int udma;
+};
+
+struct pci_bits {
+	unsigned int reg;
+	unsigned int width;
+	long unsigned int mask;
+	long unsigned int val;
+};
+
+enum ata_link_iter_mode {
+	ATA_LITER_EDGE = 0,
+	ATA_LITER_HOST_FIRST = 1,
+	ATA_LITER_PMP_FIRST = 2,
+};
+
+enum ata_dev_iter_mode {
+	ATA_DITER_ENABLED = 0,
+	ATA_DITER_ENABLED_REVERSE = 1,
+	ATA_DITER_ALL = 2,
+	ATA_DITER_ALL_REVERSE = 3,
+};
+
+struct trace_event_raw_ata_qc_issue_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	unsigned char proto;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_qc_complete_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned char status;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char error;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char ctl;
+	long unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_tf_load {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char cmd;
+	unsigned char dev;
+	unsigned char lbal;
+	unsigned char lbam;
+	unsigned char lbah;
+	unsigned char nsect;
+	unsigned char feature;
+	unsigned char hob_lbal;
+	unsigned char hob_lbam;
+	unsigned char hob_lbah;
+	unsigned char hob_nsect;
+	unsigned char hob_feature;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_exec_command_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char cmd;
+	unsigned char feature;
+	unsigned char hob_nsect;
+	unsigned char proto;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_bmdma_status {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int tag;
+	unsigned char host_stat;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_link_autopsy_qc {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int eh_err_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_eh_action_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int eh_action;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	long unsigned int deadline;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_link_reset_end_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int class[2];
+	int rc;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_port_eh_begin_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_hsm_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int qc_flags;
+	unsigned int protocol;
+	unsigned int hsm_state;
+	unsigned char dev_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_transfer_data_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned int ata_dev;
+	unsigned int tag;
+	unsigned int flags;
+	unsigned int offset;
+	unsigned int bytes;
+	char __data[0];
+};
+
+struct trace_event_raw_ata_sff_template {
+	struct trace_entry ent;
+	unsigned int ata_port;
+	unsigned char hsm_state;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ata_qc_issue_template {};
+
+struct trace_event_data_offsets_ata_qc_complete_template {};
+
+struct trace_event_data_offsets_ata_tf_load {};
+
+struct trace_event_data_offsets_ata_exec_command_template {};
+
+struct trace_event_data_offsets_ata_bmdma_status {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy {};
+
+struct trace_event_data_offsets_ata_eh_link_autopsy_qc {};
+
+struct trace_event_data_offsets_ata_eh_action_template {};
+
+struct trace_event_data_offsets_ata_link_reset_begin_template {};
+
+struct trace_event_data_offsets_ata_link_reset_end_template {};
+
+struct trace_event_data_offsets_ata_port_eh_begin_template {};
+
+struct trace_event_data_offsets_ata_sff_hsm_template {};
+
+struct trace_event_data_offsets_ata_transfer_data_template {};
+
+struct trace_event_data_offsets_ata_sff_template {};
+
+typedef void (*btf_trace_ata_qc_prep)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_tf_load)(void *, struct ata_port *, const struct ata_taskfile *);
+
+typedef void (*btf_trace_ata_exec_command)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_setup)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_start)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_stop)(void *, struct ata_port *, const struct ata_taskfile *, unsigned int);
+
+typedef void (*btf_trace_ata_bmdma_status)(void *, struct ata_port *, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);
+
+typedef void (*btf_trace_ata_eh_about_to_do)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_eh_done)(void *, struct ata_link *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_slave_hardreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_softreset_begin)(void *, struct ata_link *, unsigned int *, long unsigned int);
+
+typedef void (*btf_trace_ata_link_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_hardreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_softreset_end)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_link_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_slave_postreset)(void *, struct ata_link *, unsigned int *, int);
+
+typedef void (*btf_trace_ata_std_sched_eh)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_freeze)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_port_thaw)(void *, struct ata_port *);
+
+typedef void (*btf_trace_ata_sff_hsm_state)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_hsm_command_complete)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_port_intr)(void *, struct ata_queued_cmd *, unsigned char);
+
+typedef void (*btf_trace_ata_sff_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_pio_transfer_data)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_atapi_send_cdb)(void *, struct ata_queued_cmd *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ata_sff_flush_pio_task)(void *, struct ata_port *);
+
+enum {
+	ATA_READID_POSTRESET = 1,
+	ATA_DNXFER_PIO = 0,
+	ATA_DNXFER_DMA = 1,
+	ATA_DNXFER_40C = 2,
+	ATA_DNXFER_FORCE_PIO = 3,
+	ATA_DNXFER_FORCE_PIO0 = 4,
+	ATA_DNXFER_QUIET = 2147483648,
+};
+
+struct ata_force_param {
+	const char *name;
+	u8 cbl;
+	u8 spd_limit;
+	long unsigned int xfer_mask;
+	unsigned int horkage_on;
+	unsigned int horkage_off;
+	u16 lflags_on;
+	u16 lflags_off;
+};
+
+struct ata_force_ent {
+	int port;
+	int device;
+	struct ata_force_param param;
+};
+
+struct ata_xfer_ent {
+	int shift;
+	int bits;
+	u8 base;
+};
+
+struct ata_blacklist_entry {
+	const char *model_num;
+	const char *model_rev;
+	long unsigned int horkage;
+};
+
+typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);
+
+struct ata_scsi_args {
+	struct ata_device *dev;
+	u16 *id;
+	struct scsi_cmnd *cmd;
+};
+
+enum ata_lpm_hints {
+	ATA_LPM_EMPTY = 1,
+	ATA_LPM_HIPM = 2,
+	ATA_LPM_WAKE_ONLY = 4,
+};
+
+enum {
+	ATA_EH_SPDN_NCQ_OFF = 1,
+	ATA_EH_SPDN_SPEED_DOWN = 2,
+	ATA_EH_SPDN_FALLBACK_TO_PIO = 4,
+	ATA_EH_SPDN_KEEP_ERRORS = 8,
+	ATA_EFLAG_IS_IO = 1,
+	ATA_EFLAG_DUBIOUS_XFER = 2,
+	ATA_EFLAG_OLD_ER = 2147483648,
+	ATA_ECAT_NONE = 0,
+	ATA_ECAT_ATA_BUS = 1,
+	ATA_ECAT_TOUT_HSM = 2,
+	ATA_ECAT_UNK_DEV = 3,
+	ATA_ECAT_DUBIOUS_NONE = 4,
+	ATA_ECAT_DUBIOUS_ATA_BUS = 5,
+	ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
+	ATA_ECAT_DUBIOUS_UNK_DEV = 7,
+	ATA_ECAT_NR = 8,
+	ATA_EH_CMD_DFL_TIMEOUT = 5000,
+	ATA_EH_RESET_COOL_DOWN = 5000,
+	ATA_EH_PRERESET_TIMEOUT = 10000,
+	ATA_EH_FASTDRAIN_INTERVAL = 3000,
+	ATA_EH_UA_TRIES = 5,
+	ATA_EH_PROBE_TRIAL_INTERVAL = 60000,
+	ATA_EH_PROBE_TRIALS = 2,
+};
+
+struct ata_eh_cmd_timeout_ent {
+	const u8 *commands;
+	const long unsigned int *timeouts;
+};
+
+struct speed_down_verdict_arg {
+	u64 since;
+	int xfer_ok;
+	int nr_errors[8];
+};
+
+struct ata_internal {
+	struct scsi_transport_template t;
+	struct device_attribute private_port_attrs[3];
+	struct device_attribute private_link_attrs[3];
+	struct device_attribute private_dev_attrs[9];
+	struct transport_container link_attr_cont;
+	struct transport_container dev_attr_cont;
+	struct device_attribute *link_attrs[4];
+	struct device_attribute *port_attrs[4];
+	struct device_attribute *dev_attrs[10];
+};
+
+struct ata_show_ering_arg {
+	char *buf;
+	int written;
+};
+
+struct ata_acpi_gtf {
+	u8 tf[7];
+};
+
+struct ata_acpi_hotplug_context {
+	struct acpi_hotplug_context hp;
+	union {
+		struct ata_port *ap;
+		struct ata_device *dev;
+	} data;
+};
+
+struct rm_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u8 lock: 1;
+	__u8 dbml: 1;
+	__u8 pvnt_jmpr: 1;
+	__u8 eject: 1;
+	__u8 load: 1;
+	__u8 mech_type: 3;
+	__u8 reserved2;
+	__u8 reserved3;
+	__u8 reserved4;
+};
+
+enum odd_mech_type {
+	ODD_MECH_TYPE_SLOT = 0,
+	ODD_MECH_TYPE_DRAWER = 1,
+	ODD_MECH_TYPE_UNSUPPORTED = 2,
+};
+
+struct zpodd {
+	enum odd_mech_type mech_type;
+	struct ata_device *dev;
+	bool from_notify;
+	bool zp_ready;
+	long unsigned int last_ready;
+	bool zp_sampled;
+	bool powered_off;
+};
+
+enum {
+	PIIX_IOCFG = 84,
+	ICH5_PMR = 144,
+	ICH5_PCS = 146,
+	PIIX_SIDPR_BAR = 5,
+	PIIX_SIDPR_LEN = 16,
+	PIIX_SIDPR_IDX = 0,
+	PIIX_SIDPR_DATA = 4,
+	PIIX_FLAG_CHECKINTR = 268435456,
+	PIIX_FLAG_SIDPR = 536870912,
+	PIIX_PATA_FLAGS = 1,
+	PIIX_SATA_FLAGS = 268435458,
+	PIIX_FLAG_PIO16 = 1073741824,
+	PIIX_80C_PRI = 48,
+	PIIX_80C_SEC = 192,
+	P0 = 0,
+	P1 = 1,
+	P2 = 2,
+	P3 = 3,
+	IDE = 4294967295,
+	NA = 4294967294,
+	RV = 4294967293,
+	PIIX_AHCI_DEVICE = 6,
+	PIIX_HOST_BROKEN_SUSPEND = 16777216,
+};
+
+enum piix_controller_ids {
+	piix_pata_mwdma = 0,
+	piix_pata_33 = 1,
+	ich_pata_33 = 2,
+	ich_pata_66 = 3,
+	ich_pata_100 = 4,
+	ich_pata_100_nomwdma1 = 5,
+	ich5_sata = 6,
+	ich6_sata = 7,
+	ich6m_sata = 8,
+	ich8_sata = 9,
+	ich8_2port_sata = 10,
+	ich8m_apple_sata = 11,
+	tolapai_sata = 12,
+	piix_pata_vmw = 13,
+	ich8_sata_snb = 14,
+	ich8_2port_sata_snb = 15,
+	ich8_2port_sata_byt = 16,
+};
+
+struct piix_map_db {
+	const u32 mask;
+	const u16 port_enable;
+	const int map[0];
+};
+
+struct piix_host_priv {
+	const int *map;
+	u32 saved_iocfg;
+	void *sidpr;
+};
+
+struct ich_laptop {
+	u16 device;
+	u16 subvendor;
+	u16 subdevice;
+};
+
+struct sis_chipset {
+	u16 device;
+	const struct ata_port_info *info;
+};
+
+struct sis_laptop {
+	u16 device;
+	u16 subvendor;
+	u16 subdevice;
+};
+
+enum {
+	ATA_GEN_CLASS_MATCH = 1,
+	ATA_GEN_FORCE_DMA = 2,
+	ATA_GEN_INTEL_IDER = 4,
 };
 
 typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
@@ -86560,6 +103881,11 @@
 	long long unsigned int data[0];
 };
 
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
 struct spi_replaced_transfers;
 
 typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
@@ -86576,7 +103902,7 @@
 struct spi_board_info {
 	char modalias[32];
 	const void *platform_data;
-	const struct property_entry *properties;
+	const struct software_node *swnode;
 	void *controller_data;
 	int irq;
 	u32 max_speed_hz;
@@ -86612,6 +103938,7 @@
 	struct {
 		u8 buswidth;
 		u8 dtr: 1;
+		u8 ecc: 1;
 		enum spi_mem_data_dir dir;
 		unsigned int nbytes;
 		union {
@@ -86646,6 +103973,26 @@
 	char __data[0];
 };
 
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	long unsigned int mode;
+	bool enable;
+	char __data[0];
+};
+
 struct trace_event_raw_spi_message {
 	struct trace_entry ent;
 	int bus_num;
@@ -86677,6 +104024,10 @@
 
 struct trace_event_data_offsets_spi_controller {};
 
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
 struct trace_event_data_offsets_spi_message {};
 
 struct trace_event_data_offsets_spi_message_done {};
@@ -86690,6 +104041,10 @@
 
 typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
 
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
 typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
 
 typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
@@ -86712,6 +104067,8 @@
 	int irq;
 	u8 bits_per_word;
 	u8 chip_select;
+	int n;
+	int index;
 };
 
 struct spi_mem_driver {
@@ -86721,397 +104078,6 @@
 	void (*shutdown)(struct spi_mem *);
 };
 
-struct meson_spifc {
-	struct spi_controller *master;
-	struct regmap *regmap;
-	struct clk *clk;
-	struct device *dev;
-};
-
-enum orion_spi_type {
-	ORION_SPI = 0,
-	ARMADA_SPI = 1,
-};
-
-struct orion_spi_dev {
-	enum orion_spi_type typ;
-	long unsigned int max_hz;
-	unsigned int min_divisor;
-	unsigned int max_divisor;
-	u32 prescale_mask;
-	bool is_errata_50mhz_ac;
-};
-
-struct orion_direct_acc {
-	void *vaddr;
-	u32 size;
-};
-
-struct orion_child_options {
-	struct orion_direct_acc direct_access;
-};
-
-struct orion_spi {
-	struct spi_controller *master;
-	void *base;
-	struct clk *clk;
-	struct clk *axi_clk;
-	const struct orion_spi_dev *devdata;
-	struct orion_child_options child[8];
-};
-
-enum ssp_loopback {
-	LOOPBACK_DISABLED = 0,
-	LOOPBACK_ENABLED = 1,
-};
-
-enum ssp_interface {
-	SSP_INTERFACE_MOTOROLA_SPI = 0,
-	SSP_INTERFACE_TI_SYNC_SERIAL = 1,
-	SSP_INTERFACE_NATIONAL_MICROWIRE = 2,
-	SSP_INTERFACE_UNIDIRECTIONAL = 3,
-};
-
-enum ssp_hierarchy {
-	SSP_MASTER = 0,
-	SSP_SLAVE = 1,
-};
-
-struct ssp_clock_params {
-	u8 cpsdvsr;
-	u8 scr;
-};
-
-enum ssp_rx_endian {
-	SSP_RX_MSB = 0,
-	SSP_RX_LSB = 1,
-};
-
-enum ssp_tx_endian {
-	SSP_TX_MSB = 0,
-	SSP_TX_LSB = 1,
-};
-
-enum ssp_data_size {
-	SSP_DATA_BITS_4 = 3,
-	SSP_DATA_BITS_5 = 4,
-	SSP_DATA_BITS_6 = 5,
-	SSP_DATA_BITS_7 = 6,
-	SSP_DATA_BITS_8 = 7,
-	SSP_DATA_BITS_9 = 8,
-	SSP_DATA_BITS_10 = 9,
-	SSP_DATA_BITS_11 = 10,
-	SSP_DATA_BITS_12 = 11,
-	SSP_DATA_BITS_13 = 12,
-	SSP_DATA_BITS_14 = 13,
-	SSP_DATA_BITS_15 = 14,
-	SSP_DATA_BITS_16 = 15,
-	SSP_DATA_BITS_17 = 16,
-	SSP_DATA_BITS_18 = 17,
-	SSP_DATA_BITS_19 = 18,
-	SSP_DATA_BITS_20 = 19,
-	SSP_DATA_BITS_21 = 20,
-	SSP_DATA_BITS_22 = 21,
-	SSP_DATA_BITS_23 = 22,
-	SSP_DATA_BITS_24 = 23,
-	SSP_DATA_BITS_25 = 24,
-	SSP_DATA_BITS_26 = 25,
-	SSP_DATA_BITS_27 = 26,
-	SSP_DATA_BITS_28 = 27,
-	SSP_DATA_BITS_29 = 28,
-	SSP_DATA_BITS_30 = 29,
-	SSP_DATA_BITS_31 = 30,
-	SSP_DATA_BITS_32 = 31,
-};
-
-enum ssp_mode {
-	INTERRUPT_TRANSFER = 0,
-	POLLING_TRANSFER = 1,
-	DMA_TRANSFER = 2,
-};
-
-enum ssp_rx_level_trig {
-	SSP_RX_1_OR_MORE_ELEM = 0,
-	SSP_RX_4_OR_MORE_ELEM = 1,
-	SSP_RX_8_OR_MORE_ELEM = 2,
-	SSP_RX_16_OR_MORE_ELEM = 3,
-	SSP_RX_32_OR_MORE_ELEM = 4,
-};
-
-enum ssp_tx_level_trig {
-	SSP_TX_1_OR_MORE_EMPTY_LOC = 0,
-	SSP_TX_4_OR_MORE_EMPTY_LOC = 1,
-	SSP_TX_8_OR_MORE_EMPTY_LOC = 2,
-	SSP_TX_16_OR_MORE_EMPTY_LOC = 3,
-	SSP_TX_32_OR_MORE_EMPTY_LOC = 4,
-};
-
-enum ssp_spi_clk_phase {
-	SSP_CLK_FIRST_EDGE = 0,
-	SSP_CLK_SECOND_EDGE = 1,
-};
-
-enum ssp_spi_clk_pol {
-	SSP_CLK_POL_IDLE_LOW = 0,
-	SSP_CLK_POL_IDLE_HIGH = 1,
-};
-
-enum ssp_microwire_ctrl_len {
-	SSP_BITS_4 = 3,
-	SSP_BITS_5 = 4,
-	SSP_BITS_6 = 5,
-	SSP_BITS_7 = 6,
-	SSP_BITS_8 = 7,
-	SSP_BITS_9 = 8,
-	SSP_BITS_10 = 9,
-	SSP_BITS_11 = 10,
-	SSP_BITS_12 = 11,
-	SSP_BITS_13 = 12,
-	SSP_BITS_14 = 13,
-	SSP_BITS_15 = 14,
-	SSP_BITS_16 = 15,
-	SSP_BITS_17 = 16,
-	SSP_BITS_18 = 17,
-	SSP_BITS_19 = 18,
-	SSP_BITS_20 = 19,
-	SSP_BITS_21 = 20,
-	SSP_BITS_22 = 21,
-	SSP_BITS_23 = 22,
-	SSP_BITS_24 = 23,
-	SSP_BITS_25 = 24,
-	SSP_BITS_26 = 25,
-	SSP_BITS_27 = 26,
-	SSP_BITS_28 = 27,
-	SSP_BITS_29 = 28,
-	SSP_BITS_30 = 29,
-	SSP_BITS_31 = 30,
-	SSP_BITS_32 = 31,
-};
-
-enum ssp_microwire_wait_state {
-	SSP_MWIRE_WAIT_ZERO = 0,
-	SSP_MWIRE_WAIT_ONE = 1,
-};
-
-enum ssp_duplex {
-	SSP_MICROWIRE_CHANNEL_FULL_DUPLEX = 0,
-	SSP_MICROWIRE_CHANNEL_HALF_DUPLEX = 1,
-};
-
-enum ssp_clkdelay {
-	SSP_FEEDBACK_CLK_DELAY_NONE = 0,
-	SSP_FEEDBACK_CLK_DELAY_1T = 1,
-	SSP_FEEDBACK_CLK_DELAY_2T = 2,
-	SSP_FEEDBACK_CLK_DELAY_3T = 3,
-	SSP_FEEDBACK_CLK_DELAY_4T = 4,
-	SSP_FEEDBACK_CLK_DELAY_5T = 5,
-	SSP_FEEDBACK_CLK_DELAY_6T = 6,
-	SSP_FEEDBACK_CLK_DELAY_7T = 7,
-};
-
-enum ssp_chip_select {
-	SSP_CHIP_SELECT = 0,
-	SSP_CHIP_DESELECT = 1,
-};
-
-struct pl022_ssp_controller {
-	u16 bus_id;
-	u8 num_chipselect;
-	u8 enable_dma: 1;
-	bool (*dma_filter)(struct dma_chan *, void *);
-	void *dma_rx_param;
-	void *dma_tx_param;
-	int autosuspend_delay;
-	bool rt;
-	int *chipselects;
-};
-
-struct pl022_config_chip {
-	enum ssp_interface iface;
-	enum ssp_hierarchy hierarchy;
-	bool slave_tx_disable;
-	struct ssp_clock_params clk_freq;
-	enum ssp_mode com_mode;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	enum ssp_microwire_ctrl_len ctrl_len;
-	enum ssp_microwire_wait_state wait_state;
-	enum ssp_duplex duplex;
-	enum ssp_clkdelay clkdelay;
-	void (*cs_control)(u32);
-};
-
-enum ssp_reading {
-	READING_NULL = 0,
-	READING_U8 = 1,
-	READING_U16 = 2,
-	READING_U32 = 3,
-};
-
-enum ssp_writing {
-	WRITING_NULL = 0,
-	WRITING_U8 = 1,
-	WRITING_U16 = 2,
-	WRITING_U32 = 3,
-};
-
-struct vendor_data___2 {
-	int fifodepth;
-	int max_bpw;
-	bool unidir;
-	bool extended_cr;
-	bool pl023;
-	bool loopback;
-	bool internal_cs_ctrl;
-};
-
-struct chip_data;
-
-struct pl022 {
-	struct amba_device *adev;
-	struct vendor_data___2 *vendor;
-	resource_size_t phybase;
-	void *virtbase;
-	struct clk *clk;
-	struct spi_controller *master;
-	struct pl022_ssp_controller *master_info;
-	struct tasklet_struct pump_transfers;
-	struct spi_message *cur_msg;
-	struct spi_transfer *cur_transfer;
-	struct chip_data *cur_chip;
-	bool next_msg_cs_active;
-	void *tx;
-	void *tx_end;
-	void *rx;
-	void *rx_end;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	u32 exp_fifo_level;
-	enum ssp_rx_level_trig rx_lev_trig;
-	enum ssp_tx_level_trig tx_lev_trig;
-	struct dma_chan *dma_rx_channel;
-	struct dma_chan *dma_tx_channel;
-	struct sg_table sgt_rx;
-	struct sg_table sgt_tx;
-	char *dummypage;
-	bool dma_running;
-	int cur_cs;
-	int *chipselects;
-};
-
-struct chip_data {
-	u32 cr0;
-	u16 cr1;
-	u16 dmacr;
-	u16 cpsr;
-	u8 n_bytes;
-	bool enable_dma;
-	enum ssp_reading read;
-	enum ssp_writing write;
-	void (*cs_control)(u32);
-	int xfer_type;
-};
-
-struct spi_qup {
-	void *base;
-	struct device *dev;
-	struct clk *cclk;
-	struct clk *iclk;
-	int irq;
-	spinlock_t lock;
-	int in_fifo_sz;
-	int out_fifo_sz;
-	int in_blk_sz;
-	int out_blk_sz;
-	struct spi_transfer *xfer;
-	struct completion done;
-	int error;
-	int w_size;
-	int n_words;
-	int tx_bytes;
-	int rx_bytes;
-	const u8 *tx_buf;
-	u8 *rx_buf;
-	int qup_v1;
-	int mode;
-	struct dma_slave_config rx_conf;
-	struct dma_slave_config tx_conf;
-};
-
-struct rockchip_spi {
-	struct device *dev;
-	struct clk *spiclk;
-	struct clk *apb_pclk;
-	void *regs;
-	dma_addr_t dma_addr_rx;
-	dma_addr_t dma_addr_tx;
-	const void *tx;
-	void *rx;
-	unsigned int tx_left;
-	unsigned int rx_left;
-	atomic_t state;
-	u32 fifo_len;
-	u32 freq;
-	u8 n_bytes;
-	u8 rsd;
-	bool cs_asserted[2];
-	bool slave_abort;
-};
-
-struct s3c64xx_spi_csinfo {
-	u8 fb_delay;
-	unsigned int line;
-};
-
-struct s3c64xx_spi_info {
-	int src_clk_nr;
-	int num_cs;
-	bool no_cs;
-	int (*cfg_gpio)();
-};
-
-struct s3c64xx_spi_dma_data {
-	struct dma_chan *ch;
-	dma_cookie_t cookie;
-	enum dma_transfer_direction direction;
-};
-
-struct s3c64xx_spi_port_config {
-	int fifo_lvl_mask[6];
-	int rx_lvl_offset;
-	int tx_st_done;
-	int quirks;
-	bool high_speed;
-	bool clk_from_cmu;
-	bool clk_ioclk;
-};
-
-struct s3c64xx_spi_driver_data {
-	void *regs;
-	struct clk *clk;
-	struct clk *src_clk;
-	struct clk *ioclk;
-	struct platform_device *pdev;
-	struct spi_controller *master;
-	struct s3c64xx_spi_info *cntrlr_info;
-	spinlock_t lock;
-	long unsigned int sfr_start;
-	struct completion xfer_completion;
-	unsigned int state;
-	unsigned int cur_mode;
-	unsigned int cur_bpw;
-	unsigned int cur_speed;
-	struct s3c64xx_spi_dma_data rx_dma;
-	struct s3c64xx_spi_dma_data tx_dma;
-	struct s3c64xx_spi_port_config *port_conf;
-	unsigned int port_id;
-};
-
-struct devprobe2 {
-	struct net_device * (*probe)(int);
-	int status;
-};
-
 enum {
 	NETIF_F_SG_BIT = 0,
 	NETIF_F_IP_CSUM_BIT = 1,
@@ -87174,51 +104140,111 @@
 	NETIF_F_HW_TLS_RECORD_BIT = 56,
 	NETIF_F_GRO_FRAGLIST_BIT = 57,
 	NETIF_F_HW_MACSEC_BIT = 58,
-	NETDEV_FEATURE_COUNT = 59,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
 };
 
+typedef struct bio_vec skb_frag_t;
+
 enum {
 	SKBTX_HW_TSTAMP = 1,
 	SKBTX_SW_TSTAMP = 2,
 	SKBTX_IN_PROGRESS = 4,
-	SKBTX_DEV_ZEROCOPY = 8,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
 	SKBTX_WIFI_STATUS = 16,
-	SKBTX_SHARED_FRAG = 32,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
 	SKBTX_SCHED_TSTAMP = 64,
 };
 
-enum netdev_priv_flags {
-	IFF_802_1Q_VLAN = 1,
-	IFF_EBRIDGE = 2,
-	IFF_BONDING = 4,
-	IFF_ISATAP = 8,
-	IFF_WAN_HDLC = 16,
-	IFF_XMIT_DST_RELEASE = 32,
-	IFF_DONT_BRIDGE = 64,
-	IFF_DISABLE_NETPOLL = 128,
-	IFF_MACVLAN_PORT = 256,
-	IFF_BRIDGE_PORT = 512,
-	IFF_OVS_DATAPATH = 1024,
-	IFF_TX_SKB_SHARING = 2048,
-	IFF_UNICAST_FLT = 4096,
-	IFF_TEAM_PORT = 8192,
-	IFF_SUPP_NOFCS = 16384,
-	IFF_LIVE_ADDR_CHANGE = 32768,
-	IFF_MACVLAN = 65536,
-	IFF_XMIT_DST_RELEASE_PERM = 131072,
-	IFF_L3MDEV_MASTER = 262144,
-	IFF_NO_QUEUE = 524288,
-	IFF_OPENVSWITCH = 1048576,
-	IFF_L3MDEV_SLAVE = 2097152,
-	IFF_TEAM = 4194304,
-	IFF_RXFH_CONFIGURED = 8388608,
-	IFF_PHONY_HEADROOM = 16777216,
-	IFF_MACSEC = 33554432,
-	IFF_NO_RX_HANDLER = 67108864,
-	IFF_FAILOVER = 134217728,
-	IFF_FAILOVER_SLAVE = 268435456,
-	IFF_L3MDEV_RX_HANDLER = 536870912,
-	IFF_LIVE_RENAME_OK = 1073741824,
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	short unsigned int gso_size;
+	short unsigned int gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	skb_frag_t frags[17];
+};
+
+struct mii_bus;
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct phy_package_shared;
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22 = 1,
+		MDIOBUS_C45 = 2,
+		MDIOBUS_C22_C45 = 3,
+	} probe_capabilities;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	long unsigned int flags;
+	size_t priv_size;
+	void *priv;
 };
 
 struct mdio_board_info {
@@ -87246,6 +104272,99 @@
 	__LINK_STATE_TESTING = 5,
 };
 
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_UP = 3,
+	PHY_RUNNING = 4,
+	PHY_NOLINK = 5,
+	PHY_CABLETEST = 6,
+};
+
+struct phylink;
+
+struct phy_driver;
+
+struct phy_led_trigger;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	long unsigned int supported[2];
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	long unsigned int adv_old[2];
+	u32 eee_broken_modes;
+	struct phy_led_trigger *phy_led_triggers;
+	unsigned int phy_num_led_triggers;
+	struct phy_led_trigger *last_triggered;
+	struct phy_led_trigger *led_link_trigger;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+	const struct macsec_ops *macsec_ops;
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
 struct mii_ioctl_data {
 	__u16 phy_id;
 	__u16 reg_num;
@@ -87284,8 +104403,88 @@
 	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
 	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
 	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
-	__ETHTOOL_MSG_KERNEL_CNT = 30,
-	ETHTOOL_MSG_KERNEL_MAX = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	__ETHTOOL_MSG_KERNEL_CNT = 37,
+	ETHTOOL_MSG_KERNEL_MAX = 36,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	__ETHTOOL_A_STATS_CNT = 5,
+	ETHTOOL_A_STATS_MAX = 4,
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const long unsigned int * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+};
+
+struct phy_led_trigger {
+	struct led_trigger trigger;
+	char name[76];
+	unsigned int speed;
 };
 
 struct phy_setting {
@@ -87439,6 +104638,13 @@
 	void (*disconnect_phy)(void *);
 };
 
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
+};
+
 struct trace_event_raw_mdio_access {
 	struct trace_entry ent;
 	char busid[61];
@@ -87458,12 +104664,6 @@
 	unsigned int field_offset;
 };
 
-struct mdio_driver {
-	struct mdio_driver_common mdiodrv;
-	int (*probe)(struct mdio_device *);
-	void (*remove)(struct mdio_device *);
-};
-
 struct fixed_phy_status {
 	int link;
 	int speed;
@@ -87487,6 +104687,17 @@
 	SWMII_DUPLEX_FULL = 1,
 };
 
+struct mii_timestamping_ctrl {
+	struct mii_timestamper * (*probe_channel)(struct device *, unsigned int);
+	void (*release_channel)(struct device *, struct mii_timestamper *);
+};
+
+struct mii_timestamping_desc {
+	struct list_head list;
+	struct mii_timestamping_ctrl *ctrl;
+	struct device *device;
+};
+
 struct sfp;
 
 struct sfp_socket_ops;
@@ -87565,6 +104776,7 @@
 	void (*stop)(struct sfp *);
 	int (*module_info)(struct sfp *, struct ethtool_modinfo *);
 	int (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);
+	int (*module_eeprom_by_page)(struct sfp *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
 };
 
 struct sfp_quirk {
@@ -87597,1056 +104809,60 @@
 	struct gpio_desc *link_gpiod;
 };
 
-struct mdio_mux_child_bus;
-
-struct mdio_mux_parent_bus {
-	struct mii_bus *mii_bus;
-	int current_child;
-	int parent_id;
-	void *switch_data;
-	int (*switch_fn)(int, int, void *);
-	struct mdio_mux_child_bus *children;
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
 };
 
-struct mdio_mux_child_bus {
-	struct mii_bus *mii_bus;
-	struct mdio_mux_parent_bus *parent;
-	struct mdio_mux_child_bus *next;
-	int bus_number;
-};
-
-struct mdio_mux_mmioreg_state {
-	void *mux_handle;
-	phys_addr_t phys;
-	unsigned int iosize;
-	unsigned int mask;
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
 };
 
 struct flow_dissector {
 	unsigned int used_keys;
-	short unsigned int offset[28];
+	short unsigned int offset[29];
 };
 
-struct flow_match {
-	struct flow_dissector *dissector;
-	void *mask;
-	void *key;
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
 };
 
-enum flow_action_id {
-	FLOW_ACTION_ACCEPT = 0,
-	FLOW_ACTION_DROP = 1,
-	FLOW_ACTION_TRAP = 2,
-	FLOW_ACTION_GOTO = 3,
-	FLOW_ACTION_REDIRECT = 4,
-	FLOW_ACTION_MIRRED = 5,
-	FLOW_ACTION_REDIRECT_INGRESS = 6,
-	FLOW_ACTION_MIRRED_INGRESS = 7,
-	FLOW_ACTION_VLAN_PUSH = 8,
-	FLOW_ACTION_VLAN_POP = 9,
-	FLOW_ACTION_VLAN_MANGLE = 10,
-	FLOW_ACTION_TUNNEL_ENCAP = 11,
-	FLOW_ACTION_TUNNEL_DECAP = 12,
-	FLOW_ACTION_MANGLE = 13,
-	FLOW_ACTION_ADD = 14,
-	FLOW_ACTION_CSUM = 15,
-	FLOW_ACTION_MARK = 16,
-	FLOW_ACTION_PTYPE = 17,
-	FLOW_ACTION_PRIORITY = 18,
-	FLOW_ACTION_WAKE = 19,
-	FLOW_ACTION_QUEUE = 20,
-	FLOW_ACTION_SAMPLE = 21,
-	FLOW_ACTION_POLICE = 22,
-	FLOW_ACTION_CT = 23,
-	FLOW_ACTION_CT_METADATA = 24,
-	FLOW_ACTION_MPLS_PUSH = 25,
-	FLOW_ACTION_MPLS_POP = 26,
-	FLOW_ACTION_MPLS_MANGLE = 27,
-	FLOW_ACTION_GATE = 28,
-	NUM_FLOW_ACTIONS = 29,
+struct nf_conntrack {
+	refcount_t use;
 };
 
-enum flow_action_hw_stats {
-	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
-	FLOW_ACTION_HW_STATS_DELAYED = 2,
-	FLOW_ACTION_HW_STATS_ANY = 3,
-	FLOW_ACTION_HW_STATS_DISABLED = 4,
-	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
 };
 
-typedef void (*action_destr)(void *);
-
-enum flow_action_mangle_base {
-	FLOW_ACT_MANGLE_UNSPEC = 0,
-	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
-	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
-	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
-	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
 };
 
-struct nf_flowtable;
-
-struct ip_tunnel_info;
-
-struct psample_group;
-
-struct action_gate_entry;
-
-struct flow_action_cookie;
-
-struct flow_action_entry {
-	enum flow_action_id id;
-	enum flow_action_hw_stats hw_stats;
-	action_destr destructor;
-	void *destructor_priv;
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
 	union {
-		u32 chain_index;
-		struct net_device *dev;
 		struct {
-			u16 vid;
-			__be16 proto;
-			u8 prio;
-		} vlan;
+			long unsigned int desc;
+			void *ctx;
+		};
 		struct {
-			enum flow_action_mangle_base htype;
-			u32 offset;
-			u32 mask;
-			u32 val;
-		} mangle;
-		struct ip_tunnel_info *tunnel;
-		u32 csum_flags;
-		u32 mark;
-		u16 ptype;
-		u32 priority;
-		struct {
-			u32 ctx;
-			u32 index;
-			u8 vf;
-		} queue;
-		struct {
-			struct psample_group *psample_group;
-			u32 rate;
-			u32 trunc_size;
-			bool truncate;
-		} sample;
-		struct {
-			u32 index;
-			u32 burst;
-			u64 rate_bytes_ps;
-			u32 mtu;
-		} police;
-		struct {
-			int action;
-			u16 zone;
-			struct nf_flowtable *flow_table;
-		} ct;
-		struct {
-			long unsigned int cookie;
-			u32 mark;
-			u32 labels[4];
-		} ct_metadata;
-		struct {
-			u32 label;
-			__be16 proto;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_push;
-		struct {
-			__be16 proto;
-		} mpls_pop;
-		struct {
-			u32 label;
-			u8 tc;
-			u8 bos;
-			u8 ttl;
-		} mpls_mangle;
-		struct {
-			u32 index;
-			s32 prio;
-			u64 basetime;
-			u64 cycletime;
-			u64 cycletimeext;
-			u32 num_entries;
-			struct action_gate_entry *entries;
-		} gate;
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
 	};
-	struct flow_action_cookie *cookie;
-};
-
-struct flow_action {
-	unsigned int num_entries;
-	struct flow_action_entry entries[0];
-};
-
-struct flow_rule {
-	struct flow_match match;
-	struct flow_action action;
-};
-
-struct dsa_chip_data {
-	struct device *host_dev;
-	int sw_addr;
-	struct device *netdev[12];
-	int eeprom_len;
-	struct device_node *of_node;
-	char *port_names[12];
-	struct device_node *port_dn[12];
-	s8 rtable[4];
-};
-
-struct dsa_platform_data {
-	struct device *netdev;
-	struct net_device *of_netdev;
-	int nr_chips;
-	struct dsa_chip_data *chip;
-};
-
-struct phylink_link_state {
-	long unsigned int advertising[2];
-	long unsigned int lp_advertising[2];
-	phy_interface_t interface;
-	int speed;
-	int duplex;
-	int pause;
-	unsigned int link: 1;
-	unsigned int an_enabled: 1;
-	unsigned int an_complete: 1;
-};
-
-enum phylink_op_type {
-	PHYLINK_NETDEV = 0,
-	PHYLINK_DEV = 1,
-};
-
-struct phylink_config {
-	struct device *dev;
-	enum phylink_op_type type;
-	bool pcs_poll;
-	bool poll_fixed_state;
-	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
-};
-
-enum devlink_port_type {
-	DEVLINK_PORT_TYPE_NOTSET = 0,
-	DEVLINK_PORT_TYPE_AUTO = 1,
-	DEVLINK_PORT_TYPE_ETH = 2,
-	DEVLINK_PORT_TYPE_IB = 3,
-};
-
-enum devlink_port_flavour {
-	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
-	DEVLINK_PORT_FLAVOUR_CPU = 1,
-	DEVLINK_PORT_FLAVOUR_DSA = 2,
-	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
-	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
-	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
-	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
-};
-
-struct devlink_port_phys_attrs {
-	u32 port_number;
-	u32 split_subport_number;
-};
-
-struct devlink_port_pci_pf_attrs {
-	u32 controller;
-	u16 pf;
-	u8 external: 1;
-};
-
-struct devlink_port_pci_vf_attrs {
-	u32 controller;
-	u16 pf;
-	u16 vf;
-	u8 external: 1;
-};
-
-struct devlink_port_attrs {
-	u8 split: 1;
-	u8 splittable: 1;
-	u32 lanes;
-	enum devlink_port_flavour flavour;
-	struct netdev_phys_item_id switch_id;
-	union {
-		struct devlink_port_phys_attrs phys;
-		struct devlink_port_pci_pf_attrs pci_pf;
-		struct devlink_port_pci_vf_attrs pci_vf;
-	};
-};
-
-struct devlink;
-
-struct devlink_port {
-	struct list_head list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct devlink *devlink;
-	unsigned int index;
-	bool registered;
-	spinlock_t type_lock;
-	enum devlink_port_type type;
-	enum devlink_port_type desired_type;
-	void *type_dev;
-	struct devlink_port_attrs attrs;
-	u8 attrs_set: 1;
-	u8 switch_port: 1;
-	struct delayed_work type_warn_dw;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-};
-
-struct dsa_device_ops;
-
-struct dsa_switch_tree;
-
-struct packet_type;
-
-struct dsa_switch;
-
-struct dsa_netdevice_ops;
-
-struct dsa_port {
-	union {
-		struct net_device *master;
-		struct net_device *slave;
-	};
-	const struct dsa_device_ops *tag_ops;
-	struct dsa_switch_tree *dst;
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	enum {
-		DSA_PORT_TYPE_UNUSED = 0,
-		DSA_PORT_TYPE_CPU = 1,
-		DSA_PORT_TYPE_DSA = 2,
-		DSA_PORT_TYPE_USER = 3,
-	} type;
-	struct dsa_switch *ds;
-	unsigned int index;
-	const char *name;
-	struct dsa_port *cpu_dp;
-	const char *mac;
-	struct device_node *dn;
-	unsigned int ageing_time;
-	bool vlan_filtering;
-	u8 stp_state;
-	struct net_device *bridge_dev;
-	struct devlink_port devlink_port;
-	bool devlink_port_setup;
-	struct phylink *pl;
-	struct phylink_config pl_config;
-	struct list_head list;
-	void *priv;
-	const struct ethtool_ops *orig_ethtool_ops;
-	const struct dsa_netdevice_ops *netdev_ops;
-	bool setup;
-};
-
-struct packet_type {
-	__be16 type;
-	bool ignore_outgoing;
-	struct net_device *dev;
-	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
-	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
-	bool (*id_match)(struct packet_type *, struct sock *);
-	void *af_packet_priv;
-	struct list_head list;
-};
-
-struct flow_action_cookie {
-	u32 cookie_len;
-	u8 cookie[0];
-};
-
-struct flow_stats {
-	u64 pkts;
-	u64 bytes;
-	u64 drops;
-	u64 lastused;
-	enum flow_action_hw_stats used_hw_stats;
-	bool used_hw_stats_valid;
-};
-
-enum flow_cls_command {
-	FLOW_CLS_REPLACE = 0,
-	FLOW_CLS_DESTROY = 1,
-	FLOW_CLS_STATS = 2,
-	FLOW_CLS_TMPLT_CREATE = 3,
-	FLOW_CLS_TMPLT_DESTROY = 4,
-};
-
-struct flow_cls_common_offload {
-	u32 chain_index;
-	__be16 protocol;
-	u32 prio;
-	struct netlink_ext_ack *extack;
-};
-
-struct flow_cls_offload {
-	struct flow_cls_common_offload common;
-	enum flow_cls_command command;
-	long unsigned int cookie;
-	struct flow_rule *rule;
-	struct flow_stats stats;
-	u32 classid;
-};
-
-enum devlink_sb_pool_type {
-	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
-	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
-};
-
-enum devlink_sb_threshold_type {
-	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
-	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
-};
-
-enum devlink_eswitch_encap_mode {
-	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
-	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
-};
-
-enum devlink_param_cmode {
-	DEVLINK_PARAM_CMODE_RUNTIME = 0,
-	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
-	DEVLINK_PARAM_CMODE_PERMANENT = 2,
-	__DEVLINK_PARAM_CMODE_MAX = 3,
-	DEVLINK_PARAM_CMODE_MAX = 2,
-};
-
-enum devlink_trap_action {
-	DEVLINK_TRAP_ACTION_DROP = 0,
-	DEVLINK_TRAP_ACTION_TRAP = 1,
-	DEVLINK_TRAP_ACTION_MIRROR = 2,
-};
-
-enum devlink_trap_type {
-	DEVLINK_TRAP_TYPE_DROP = 0,
-	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
-	DEVLINK_TRAP_TYPE_CONTROL = 2,
-};
-
-enum devlink_reload_action {
-	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
-	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
-	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
-	__DEVLINK_RELOAD_ACTION_MAX = 3,
-	DEVLINK_RELOAD_ACTION_MAX = 2,
-};
-
-enum devlink_reload_limit {
-	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
-	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
-	__DEVLINK_RELOAD_LIMIT_MAX = 2,
-	DEVLINK_RELOAD_LIMIT_MAX = 1,
-};
-
-enum devlink_dpipe_field_mapping_type {
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
-	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
-};
-
-struct devlink_dev_stats {
-	u32 reload_stats[6];
-	u32 remote_reload_stats[6];
-};
-
-struct devlink_dpipe_headers;
-
-struct devlink_ops;
-
-struct devlink {
-	struct list_head list;
-	struct list_head port_list;
-	struct list_head sb_list;
-	struct list_head dpipe_table_list;
-	struct list_head resource_list;
-	struct list_head param_list;
-	struct list_head region_list;
-	struct list_head reporter_list;
-	struct mutex reporters_lock;
-	struct devlink_dpipe_headers *dpipe_headers;
-	struct list_head trap_list;
-	struct list_head trap_group_list;
-	struct list_head trap_policer_list;
-	const struct devlink_ops *ops;
-	struct xarray snapshot_ids;
-	struct devlink_dev_stats stats;
-	struct device *dev;
-	possible_net_t _net;
-	struct mutex lock;
-	u8 reload_failed: 1;
-	u8 reload_enabled: 1;
-	u8 registered: 1;
-	long: 61;
-	long: 64;
-	char priv[0];
-};
-
-struct devlink_dpipe_header;
-
-struct devlink_dpipe_headers {
-	struct devlink_dpipe_header **headers;
-	unsigned int headers_count;
-};
-
-struct devlink_sb_pool_info;
-
-struct devlink_info_req;
-
-struct devlink_flash_update_params;
-
-struct devlink_trap;
-
-struct devlink_trap_group;
-
-struct devlink_trap_policer;
-
-struct devlink_ops {
-	u32 supported_flash_update_params;
-	long unsigned int reload_actions;
-	long unsigned int reload_limits;
-	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
-	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
-	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
-	int (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);
-	int (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);
-	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
-	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
-	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
-	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
-	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
-	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
-	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
-	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
-	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
-	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
-	int (*eswitch_mode_get)(struct devlink *, u16 *);
-	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
-	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
-	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
-	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
-	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
-	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
-	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
-	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
-	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
-	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
-	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
-	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
-	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
-	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
-	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
-	int (*port_function_hw_addr_get)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
-	int (*port_function_hw_addr_set)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
-};
-
-struct devlink_sb_pool_info {
-	enum devlink_sb_pool_type pool_type;
-	u32 size;
-	enum devlink_sb_threshold_type threshold_type;
-	u32 cell_size;
-};
-
-struct devlink_dpipe_field {
-	const char *name;
-	unsigned int id;
-	unsigned int bitwidth;
-	enum devlink_dpipe_field_mapping_type mapping_type;
-};
-
-struct devlink_dpipe_header {
-	const char *name;
-	unsigned int id;
-	struct devlink_dpipe_field *fields;
-	unsigned int fields_count;
-	bool global;
-};
-
-union devlink_param_value {
-	u8 vu8;
-	u16 vu16;
-	u32 vu32;
-	char vstr[32];
-	bool vbool;
-};
-
-struct devlink_param_gset_ctx {
-	union devlink_param_value val;
-	enum devlink_param_cmode cmode;
-};
-
-struct devlink_flash_update_params {
-	const char *file_name;
-	const char *component;
-	u32 overwrite_mask;
-};
-
-struct devlink_trap_policer {
-	u32 id;
-	u64 init_rate;
-	u64 init_burst;
-	u64 max_rate;
-	u64 min_rate;
-	u64 max_burst;
-	u64 min_burst;
-};
-
-struct devlink_trap_group {
-	const char *name;
-	u16 id;
-	bool generic;
-	u32 init_policer_id;
-};
-
-struct devlink_trap {
-	enum devlink_trap_type type;
-	enum devlink_trap_action init_action;
-	bool generic;
-	u16 id;
-	const char *name;
-	u16 init_group_id;
-	u32 metadata_cap;
-};
-
-struct switchdev_trans {
-	bool ph_prepare;
-};
-
-enum switchdev_obj_id {
-	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
-	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
-	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
-	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
-	SWITCHDEV_OBJ_ID_MRP = 4,
-	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
-	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
-	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
-	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
-	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
-	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
-};
-
-struct switchdev_obj {
-	struct net_device *orig_dev;
-	enum switchdev_obj_id id;
-	u32 flags;
-	void *complete_priv;
-	void (*complete)(struct net_device *, int, void *);
-};
-
-struct switchdev_obj_port_vlan {
-	struct switchdev_obj obj;
-	u16 flags;
-	u16 vid_begin;
-	u16 vid_end;
-};
-
-struct switchdev_obj_port_mdb {
-	struct switchdev_obj obj;
-	unsigned char addr[6];
-	u16 vid;
-};
-
-enum dsa_tag_protocol {
-	DSA_TAG_PROTO_NONE = 0,
-	DSA_TAG_PROTO_BRCM = 1,
-	DSA_TAG_PROTO_BRCM_PREPEND = 2,
-	DSA_TAG_PROTO_DSA = 3,
-	DSA_TAG_PROTO_EDSA = 4,
-	DSA_TAG_PROTO_GSWIP = 5,
-	DSA_TAG_PROTO_KSZ9477 = 6,
-	DSA_TAG_PROTO_KSZ9893 = 7,
-	DSA_TAG_PROTO_LAN9303 = 8,
-	DSA_TAG_PROTO_MTK = 9,
-	DSA_TAG_PROTO_QCA = 10,
-	DSA_TAG_PROTO_TRAILER = 11,
-	DSA_TAG_PROTO_8021Q = 12,
-	DSA_TAG_PROTO_SJA1105 = 13,
-	DSA_TAG_PROTO_KSZ8795 = 14,
-	DSA_TAG_PROTO_OCELOT = 15,
-	DSA_TAG_PROTO_AR9331 = 16,
-	DSA_TAG_PROTO_RTL4_A = 17,
-};
-
-struct dsa_device_ops {
-	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
-	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);
-	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
-	bool (*filter)(const struct sk_buff *, struct net_device *);
-	unsigned int overhead;
-	const char *name;
-	enum dsa_tag_protocol proto;
-	bool promisc_on_master;
-	bool tail_tag;
-};
-
-struct dsa_netdevice_ops {
-	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
-};
-
-struct dsa_switch_tree {
-	struct list_head list;
-	struct raw_notifier_head nh;
-	unsigned int index;
-	struct kref refcount;
-	bool setup;
-	struct dsa_platform_data *pd;
-	struct list_head ports;
-	struct list_head rtable;
-};
-
-struct dsa_mall_mirror_tc_entry {
-	u8 to_local_port;
-	bool ingress;
-};
-
-struct dsa_mall_policer_tc_entry {
-	u32 burst;
-	u64 rate_bytes_per_sec;
-};
-
-struct dsa_switch_ops;
-
-struct dsa_switch {
-	bool setup;
-	struct device *dev;
-	struct dsa_switch_tree *dst;
-	unsigned int index;
-	struct notifier_block nb;
-	void *priv;
-	struct dsa_chip_data *cd;
-	const struct dsa_switch_ops *ops;
-	u32 phys_mii_mask;
-	struct mii_bus *slave_mii_bus;
-	unsigned int ageing_time_min;
-	unsigned int ageing_time_max;
-	struct devlink *devlink;
-	unsigned int num_tx_queues;
-	bool vlan_filtering_is_global;
-	bool configure_vlan_while_not_filtering;
-	bool untag_bridge_pvid;
-	bool vlan_filtering;
-	bool pcs_poll;
-	bool mtu_enforcement_ingress;
-	size_t num_ports;
-};
-
-struct fixed_phy_status___2;
-
-typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
-
-struct dsa_switch_ops {
-	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
-	int (*setup)(struct dsa_switch *);
-	void (*teardown)(struct dsa_switch *);
-	u32 (*get_phy_flags)(struct dsa_switch *, int);
-	int (*phy_read)(struct dsa_switch *, int, int);
-	int (*phy_write)(struct dsa_switch *, int, int, u16);
-	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
-	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);
-	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
-	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
-	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
-	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
-	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
-	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
-	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
-	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
-	int (*get_sset_count)(struct dsa_switch *, int, int);
-	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
-	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
-	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
-	int (*suspend)(struct dsa_switch *);
-	int (*resume)(struct dsa_switch *);
-	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
-	void (*port_disable)(struct dsa_switch *, int);
-	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
-	int (*get_eeprom_len)(struct dsa_switch *);
-	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
-	int (*get_regs_len)(struct dsa_switch *, int);
-	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
-	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
-	int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
-	void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
-	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
-	void (*port_fast_age)(struct dsa_switch *, int);
-	int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
-	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);
-	int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
-	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
-	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
-	int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
-	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
-	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
-	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
-	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
-	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
-	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
-	void (*port_policer_del)(struct dsa_switch *, int);
-	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
-	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
-	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
-	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
-	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
-	bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
-	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
-	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
-	int (*port_change_mtu)(struct dsa_switch *, int, int);
-	int (*port_max_mtu)(struct dsa_switch *, int);
-};
-
-struct dsa_loop_pdata {
-	struct dsa_chip_data cd;
-	const char *name;
-	unsigned int enabled_ports;
-	const char *netdev;
-};
-
-struct ptp_clock_time {
-	__s64 sec;
-	__u32 nsec;
-	__u32 reserved;
-};
-
-struct ptp_extts_request {
-	unsigned int index;
-	unsigned int flags;
-	unsigned int rsv[2];
-};
-
-struct ptp_perout_request {
-	union {
-		struct ptp_clock_time start;
-		struct ptp_clock_time phase;
-	};
-	struct ptp_clock_time period;
-	unsigned int index;
-	unsigned int flags;
-	union {
-		struct ptp_clock_time on;
-		unsigned int rsv[4];
-	};
-};
-
-enum ptp_pin_function {
-	PTP_PF_NONE = 0,
-	PTP_PF_EXTTS = 1,
-	PTP_PF_PEROUT = 2,
-	PTP_PF_PHYSYNC = 3,
-};
-
-struct ptp_pin_desc {
-	char name[64];
-	unsigned int index;
-	unsigned int func;
-	unsigned int chan;
-	unsigned int rsv[5];
-};
-
-struct ptp_clock_request {
-	enum {
-		PTP_CLK_REQ_EXTTS = 0,
-		PTP_CLK_REQ_PEROUT = 1,
-		PTP_CLK_REQ_PPS = 2,
-	} type;
-	union {
-		struct ptp_extts_request extts;
-		struct ptp_perout_request perout;
-	};
-};
-
-struct ptp_clock_info {
-	struct module *owner;
-	char name[16];
-	s32 max_adj;
-	int n_alarm;
-	int n_ext_ts;
-	int n_per_out;
-	int n_pins;
-	int pps;
-	struct ptp_pin_desc *pin_config;
-	int (*adjfine)(struct ptp_clock_info *, long int);
-	int (*adjfreq)(struct ptp_clock_info *, s32);
-	int (*adjphase)(struct ptp_clock_info *, s32);
-	int (*adjtime)(struct ptp_clock_info *, s64);
-	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
-	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
-	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
-	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
-	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
-	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
-	long int (*do_aux_work)(struct ptp_clock_info *);
-};
-
-struct ptp_clock;
-
-struct cavium_ptp {
-	struct pci_dev *pdev;
-	spinlock_t spin_lock;
-	struct cyclecounter cycle_counter;
-	struct timecounter time_counter;
-	void *reg_base;
-	u32 clock_rate;
-	struct ptp_clock_info ptp_info;
-	struct ptp_clock *ptp_clock;
-};
-
-struct mlxfw_dev_ops;
-
-struct mlxfw_dev {
-	const struct mlxfw_dev_ops *ops;
-	const char *psid;
-	u16 psid_size;
-	struct devlink *devlink;
-};
-
-enum mlxfw_fsm_state {
-	MLXFW_FSM_STATE_IDLE = 0,
-	MLXFW_FSM_STATE_LOCKED = 1,
-	MLXFW_FSM_STATE_INITIALIZE = 2,
-	MLXFW_FSM_STATE_DOWNLOAD = 3,
-	MLXFW_FSM_STATE_VERIFY = 4,
-	MLXFW_FSM_STATE_APPLY = 5,
-	MLXFW_FSM_STATE_ACTIVATE = 6,
-};
-
-enum mlxfw_fsm_state_err {
-	MLXFW_FSM_STATE_ERR_OK = 0,
-	MLXFW_FSM_STATE_ERR_ERROR = 1,
-	MLXFW_FSM_STATE_ERR_REJECTED_DIGEST_ERR = 2,
-	MLXFW_FSM_STATE_ERR_REJECTED_NOT_APPLICABLE = 3,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNKNOWN_KEY = 4,
-	MLXFW_FSM_STATE_ERR_REJECTED_AUTH_FAILED = 5,
-	MLXFW_FSM_STATE_ERR_REJECTED_UNSIGNED = 6,
-	MLXFW_FSM_STATE_ERR_REJECTED_KEY_NOT_APPLICABLE = 7,
-	MLXFW_FSM_STATE_ERR_REJECTED_BAD_FORMAT = 8,
-	MLXFW_FSM_STATE_ERR_BLOCKED_PENDING_RESET = 9,
-	MLXFW_FSM_STATE_ERR_MAX = 10,
-};
-
-struct mlxfw_dev_ops {
-	int (*component_query)(struct mlxfw_dev *, u16, u32 *, u8 *, u16 *);
-	int (*fsm_lock)(struct mlxfw_dev *, u32 *);
-	int (*fsm_component_update)(struct mlxfw_dev *, u32, u16, u32);
-	int (*fsm_block_download)(struct mlxfw_dev *, u32, u8 *, u16, u32);
-	int (*fsm_component_verify)(struct mlxfw_dev *, u32, u16);
-	int (*fsm_activate)(struct mlxfw_dev *, u32);
-	int (*fsm_reactivate)(struct mlxfw_dev *, u8 *);
-	int (*fsm_query_state)(struct mlxfw_dev *, u32, enum mlxfw_fsm_state *, enum mlxfw_fsm_state_err *);
-	void (*fsm_cancel)(struct mlxfw_dev *, u32);
-	void (*fsm_release)(struct mlxfw_dev *, u32);
-};
-
-enum mlxfw_fsm_reactivate_status {
-	MLXFW_FSM_REACTIVATE_STATUS_OK = 0,
-	MLXFW_FSM_REACTIVATE_STATUS_BUSY = 1,
-	MLXFW_FSM_REACTIVATE_STATUS_PROHIBITED_FW_VER_ERR = 2,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_COPY_FAILED = 3,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_ERASE_FAILED = 4,
-	MLXFW_FSM_REACTIVATE_STATUS_FIRST_PAGE_RESTORE_FAILED = 5,
-	MLXFW_FSM_REACTIVATE_STATUS_CANDIDATE_FW_DEACTIVATION_FAILED = 6,
-	MLXFW_FSM_REACTIVATE_STATUS_FW_ALREADY_ACTIVATED = 7,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_DEVICE_RESET_REQUIRED = 8,
-	MLXFW_FSM_REACTIVATE_STATUS_ERR_FW_PROGRAMMING_NEEDED = 9,
-	MLXFW_FSM_REACTIVATE_STATUS_MAX = 10,
-};
-
-struct mlxfw_mfa2_component {
-	u16 index;
-	u32 data_size;
-	u8 *data;
-};
-
-struct mlxfw_mfa2_file;
-
-struct mlxfw_mfa2_tlv;
-
-struct mlxfw_mfa2_file___2 {
-	const struct firmware *fw;
-	const struct mlxfw_mfa2_tlv *first_dev;
-	u16 dev_count;
-	const struct mlxfw_mfa2_tlv *first_component;
-	u16 component_count;
-	const void *cb;
-	u32 cb_archive_size;
-};
-
-struct mlxfw_mfa2_tlv {
-	u8 version;
-	u8 type;
-	__be16 len;
-	u8 data[0];
-};
-
-enum mlxfw_mfa2_tlv_type {
-	MLXFW_MFA2_TLV_MULTI_PART = 1,
-	MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR = 2,
-	MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR = 4,
-	MLXFW_MFA2_TLV_COMPONENT_PTR = 34,
-	MLXFW_MFA2_TLV_PSID = 42,
-};
-
-struct mlxfw_mfa2_tlv_multi {
-	__be16 num_extensions;
-	__be16 total_len;
-};
-
-struct mlxfw_mfa2_tlv_package_descriptor {
-	__be16 num_components;
-	__be16 num_devices;
-	__be32 cb_offset;
-	__be32 cb_archive_size;
-	__be32 cb_size_h;
-	__be32 cb_size_l;
-	u8 padding[3];
-	u8 cv_compression;
-	__be32 user_data_offset;
-};
-
-struct mlxfw_mfa2_tlv_psid {
-	u8 psid[0];
-};
-
-struct mlxfw_mfa2_tlv_component_ptr {
-	__be16 storage_id;
-	__be16 component_index;
-	__be32 storage_address;
-};
-
-struct mlxfw_mfa2_tlv_component_descriptor {
-	__be16 pldm_classification;
-	__be16 identifier;
-	__be32 cb_offset_h;
-	__be32 cb_offset_l;
-	__be32 size;
-};
-
-struct mlxfw_mfa2_comp_data {
-	struct mlxfw_mfa2_component comp;
-	u8 buff[0];
-};
-
-struct wl1251_platform_data {
-	int power_gpio;
-	int irq;
-	bool use_eeprom;
+	refcount_t refcnt;
+	u8 flags;
+	struct mmpin mmp;
 };
 
 enum {
@@ -88671,24 +104887,18 @@
 	SKB_GSO_FRAGLIST = 262144,
 };
 
-enum ethtool_stringset {
-	ETH_SS_TEST = 0,
-	ETH_SS_STATS = 1,
-	ETH_SS_PRIV_FLAGS = 2,
-	ETH_SS_NTUPLE_FILTERS = 3,
-	ETH_SS_FEATURES = 4,
-	ETH_SS_RSS_HASH_FUNCS = 5,
-	ETH_SS_TUNABLES = 6,
-	ETH_SS_PHY_STATS = 7,
-	ETH_SS_PHY_TUNABLES = 8,
-	ETH_SS_LINK_MODES = 9,
-	ETH_SS_MSG_CLASSES = 10,
-	ETH_SS_WOL_MODES = 11,
-	ETH_SS_SOF_TIMESTAMPING = 12,
-	ETH_SS_TS_TX_TYPES = 13,
-	ETH_SS_TS_RX_FILTERS = 14,
-	ETH_SS_UDP_TUNNEL_TYPES = 15,
-	ETH_SS_COUNT = 16,
+enum {
+	IFLA_TUN_UNSPEC = 0,
+	IFLA_TUN_OWNER = 1,
+	IFLA_TUN_GROUP = 2,
+	IFLA_TUN_TYPE = 3,
+	IFLA_TUN_PI = 4,
+	IFLA_TUN_VNET_HDR = 5,
+	IFLA_TUN_PERSIST = 6,
+	IFLA_TUN_MULTI_QUEUE = 7,
+	IFLA_TUN_NUM_QUEUES = 8,
+	IFLA_TUN_NUM_DISABLED_QUEUES = 9,
+	__IFLA_TUN_MAX = 10,
 };
 
 struct gro_list {
@@ -88713,6 +104923,7 @@
 	struct list_head dev_list;
 	struct hlist_node napi_hash_node;
 	unsigned int napi_id;
+	struct task_struct *thread;
 };
 
 enum netdev_queue_state_t {
@@ -88721,40 +104932,392 @@
 	__QUEUE_STATE_FROZEN = 2,
 };
 
-enum skb_free_reason {
-	SKB_REASON_CONSUMED = 0,
-	SKB_REASON_DROPPED = 1,
-};
-
-struct pp_alloc_cache {
-	u32 count;
-	void *cache[128];
-};
-
-struct page_pool_params {
-	unsigned int flags;
-	unsigned int order;
-	unsigned int pool_size;
-	int nid;
-	struct device *dev;
-	enum dma_data_direction dma_dir;
-	unsigned int max_len;
-	unsigned int offset;
-};
-
-struct page_pool {
-	struct page_pool_params p;
-	struct delayed_work release_dw;
-	void (*disconnect)(void *);
-	long unsigned int defer_start;
-	long unsigned int defer_warn;
-	u32 pages_state_hold_cnt;
+struct rps_sock_flow_table {
+	u32 mask;
 	long: 32;
 	long: 64;
 	long: 64;
 	long: 64;
 	long: 64;
-	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct wpan_phy;
+
+struct wpan_dev_header_ops;
+
+struct wpan_dev {
+	struct wpan_phy *wpan_phy;
+	int iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	const struct wpan_dev_header_ops *header_ops;
+	struct net_device *lowpan_dev;
+	u32 identifier;
+	__le16 pan_id;
+	__le16 short_addr;
+	__le64 extended_addr;
+	atomic_t bsn;
+	atomic_t dsn;
+	u8 min_be;
+	u8 max_be;
+	u8 csma_retries;
+	s8 frame_retries;
+	bool lbt;
+	bool promiscuous_mode;
+	bool ackreq;
+};
+
+struct tun_pi {
+	__u16 flags;
+	__be16 proto;
+};
+
+struct tun_filter {
+	__u16 flags;
+	__u16 count;
+	__u8 addr[0];
+};
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct tun_msg_ctl {
+	short unsigned int type;
+	short unsigned int num;
+	void *ptr;
+};
+
+struct tun_xdp_hdr {
+	int buflen;
+	struct virtio_net_hdr gso;
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__u32 nh_tclassid;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info *nh_info;
+		struct nh_group *nh_grp;
+	};
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct nh_grp_entry;
+
+struct nh_res_bucket {
+	struct nh_grp_entry *nh_entry;
+	atomic_long_t used_time;
+	long unsigned int migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	long unsigned int unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+enum {
+	AX25_VALUES_IPDEFMODE = 0,
+	AX25_VALUES_AXDEFMODE = 1,
+	AX25_VALUES_BACKOFF = 2,
+	AX25_VALUES_CONMODE = 3,
+	AX25_VALUES_WINDOW = 4,
+	AX25_VALUES_EWINDOW = 5,
+	AX25_VALUES_T1 = 6,
+	AX25_VALUES_T2 = 7,
+	AX25_VALUES_T3 = 8,
+	AX25_VALUES_IDLE = 9,
+	AX25_VALUES_N2 = 10,
+	AX25_VALUES_PACLEN = 11,
+	AX25_VALUES_PROTOCOL = 12,
+	AX25_VALUES_DS_TIMEOUT = 13,
+	AX25_MAX_VALUES = 14,
+};
+
+enum nl802154_cca_modes {
+	__NL802154_CCA_INVALID = 0,
+	NL802154_CCA_ENERGY = 1,
+	NL802154_CCA_CARRIER = 2,
+	NL802154_CCA_ENERGY_CARRIER = 3,
+	NL802154_CCA_ALOHA = 4,
+	NL802154_CCA_UWB_SHR = 5,
+	NL802154_CCA_UWB_MULTIPLEXED = 6,
+	__NL802154_CCA_ATTR_AFTER_LAST = 7,
+	NL802154_CCA_ATTR_MAX = 6,
+};
+
+enum nl802154_cca_opts {
+	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
+	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
+	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
+	NL802154_CCA_OPT_ATTR_MAX = 1,
+};
+
+enum nl802154_supported_bool_states {
+	NL802154_SUPPORTED_BOOL_FALSE = 0,
+	NL802154_SUPPORTED_BOOL_TRUE = 1,
+	__NL802154_SUPPORTED_BOOL_INVALD = 2,
+	NL802154_SUPPORTED_BOOL_BOTH = 3,
+	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
+	NL802154_SUPPORTED_BOOL_MAX = 3,
+};
+
+struct wpan_phy_supported {
+	u32 channels[32];
+	u32 cca_modes;
+	u32 cca_opts;
+	u32 iftypes;
+	enum nl802154_supported_bool_states lbt;
+	u8 min_minbe;
+	u8 max_minbe;
+	u8 min_maxbe;
+	u8 max_maxbe;
+	u8 min_csma_backoffs;
+	u8 max_csma_backoffs;
+	s8 min_frame_retries;
+	s8 max_frame_retries;
+	size_t tx_powers_size;
+	size_t cca_ed_levels_size;
+	const s32 *tx_powers;
+	const s32 *cca_ed_levels;
+};
+
+struct wpan_phy_cca {
+	enum nl802154_cca_modes mode;
+	enum nl802154_cca_opts opt;
+};
+
+struct wpan_phy {
+	const void *privid;
+	u32 flags;
+	u8 current_channel;
+	u8 current_page;
+	struct wpan_phy_supported supported;
+	s32 transmit_power;
+	struct wpan_phy_cca cca;
+	__le64 perm_extended_addr;
+	s32 cca_ed_level;
+	u32 symbol_duration;
+	u16 lifs_period;
+	u16 sifs_period;
+	struct device dev;
+	possible_net_t _net;
+	char priv[0];
+};
+
+struct ieee802154_addr {
+	u8 mode;
+	__le16 pan_id;
+	union {
+		__le16 short_addr;
+		__le64 extended_addr;
+	};
+};
+
+struct wpan_dev_header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
+};
+
+struct tap_filter {
+	unsigned int count;
+	u32 mask[2];
+	unsigned char addr[48];
+};
+
+struct tun_struct;
+
+struct tun_file {
+	struct sock sk;
+	long: 64;
+	struct socket socket;
+	struct tun_struct *tun;
+	struct fasync_struct *fasync;
+	unsigned int flags;
+	union {
+		u16 queue_index;
+		unsigned int ifindex;
+	};
+	struct napi_struct napi;
+	bool napi_enabled;
+	bool napi_frags_enabled;
+	struct mutex napi_mutex;
+	struct list_head next;
+	struct tun_struct *detached;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring tx_ring;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct tun_prog;
+
+struct tun_struct {
+	struct tun_file *tfiles[256];
+	unsigned int numqueues;
+	unsigned int flags;
+	kuid_t owner;
+	kgid_t group;
+	struct net_device *dev;
+	netdev_features_t set_features;
+	int align;
+	int vnet_hdr_sz;
+	int sndbuf;
+	struct tap_filter txflt;
+	struct sock_fprog fprog;
+	bool filter_attached;
+	u32 msg_enable;
+	spinlock_t lock;
+	struct hlist_head flows[1024];
+	struct timer_list flow_gc_timer;
+	long unsigned int ageing_time;
+	unsigned int numdisabled;
+	struct list_head disabled;
+	void *security;
+	u32 flow_count;
+	u32 rx_batched;
+	atomic_long_t rx_frame_errors;
+	struct bpf_prog *xdp_prog;
+	struct tun_prog *steering_prog;
+	struct tun_prog *filter_prog;
+	struct ethtool_link_ksettings link_ksettings;
+	struct file *file;
+	struct ifreq *ifr;
+};
+
+struct tun_page {
+	struct page *page;
+	int count;
+};
+
+struct tun_flow_entry {
+	struct hlist_node hash_link;
+	struct callback_head rcu;
+	struct tun_struct *tun;
+	u32 rxhash;
+	u32 rps_rxhash;
+	int queue_index;
+	long: 32;
+	long: 64;
+	long unsigned int updated;
 	long: 64;
 	long: 64;
 	long: 64;
@@ -88762,16 +105325,462 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	struct ptr_ring ring;
-	atomic_t pages_state_release_cnt;
-	refcount_t user_cnt;
-	u64 destroy_cnt;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
+};
+
+struct tun_prog {
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct veth {
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	__IFLA_MAX = 61,
+};
+
+enum {
+	IFLA_PPP_UNSPEC = 0,
+	IFLA_PPP_DEV_FD = 1,
+	__IFLA_PPP_MAX = 2,
+};
+
+enum NPmode {
+	NPMODE_PASS = 0,
+	NPMODE_DROP = 1,
+	NPMODE_ERROR = 2,
+	NPMODE_QUEUE = 3,
+};
+
+struct pppstat {
+	__u32 ppp_discards;
+	__u32 ppp_ibytes;
+	__u32 ppp_ioctects;
+	__u32 ppp_ipackets;
+	__u32 ppp_ierrors;
+	__u32 ppp_ilqrs;
+	__u32 ppp_obytes;
+	__u32 ppp_ooctects;
+	__u32 ppp_opackets;
+	__u32 ppp_oerrors;
+	__u32 ppp_olqrs;
+};
+
+struct vjstat {
+	__u32 vjs_packets;
+	__u32 vjs_compressed;
+	__u32 vjs_searches;
+	__u32 vjs_misses;
+	__u32 vjs_uncompressedin;
+	__u32 vjs_compressedin;
+	__u32 vjs_errorin;
+	__u32 vjs_tossed;
+};
+
+struct compstat {
+	__u32 unc_bytes;
+	__u32 unc_packets;
+	__u32 comp_bytes;
+	__u32 comp_packets;
+	__u32 inc_bytes;
+	__u32 inc_packets;
+	__u32 in_count;
+	__u32 bytes_out;
+	double ratio;
+};
+
+struct ppp_stats {
+	struct pppstat p;
+	struct vjstat vj;
+};
+
+struct ppp_comp_stats {
+	struct compstat c;
+	struct compstat d;
+};
+
+struct ppp_idle32 {
+	__s32 xmit_idle;
+	__s32 recv_idle;
+};
+
+struct ppp_idle64 {
+	__s64 xmit_idle;
+	__s64 recv_idle;
+};
+
+struct npioctl {
+	int protocol;
+	enum NPmode mode;
+};
+
+struct ppp_option_data {
+	__u8 *ptr;
+	__u32 length;
+	int transmit;
+};
+
+struct ppp_channel;
+
+struct ppp_channel_ops {
+	int (*start_xmit)(struct ppp_channel *, struct sk_buff *);
+	int (*ioctl)(struct ppp_channel *, unsigned int, long unsigned int);
+	int (*fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *, const struct ppp_channel *);
+};
+
+struct ppp_channel {
+	void *private;
+	const struct ppp_channel_ops *ops;
+	int mtu;
+	int hdrlen;
+	void *ppp;
+	int speed;
+	int latency;
+};
+
+struct compressor {
+	int compress_proto;
+	void * (*comp_alloc)(unsigned char *, int);
+	void (*comp_free)(void *);
+	int (*comp_init)(void *, unsigned char *, int, int, int, int);
+	void (*comp_reset)(void *);
+	int (*compress)(void *, unsigned char *, unsigned char *, int, int);
+	void (*comp_stat)(void *, struct compstat *);
+	void * (*decomp_alloc)(unsigned char *, int);
+	void (*decomp_free)(void *);
+	int (*decomp_init)(void *, unsigned char *, int, int, int, int, int);
+	void (*decomp_reset)(void *);
+	int (*decompress)(void *, unsigned char *, int, unsigned char *, int);
+	void (*incomp)(void *, unsigned char *, int);
+	void (*decomp_stat)(void *, struct compstat *);
+	struct module *owner;
+	unsigned int comp_extra;
+};
+
+typedef __u8 byte_t;
+
+typedef __u32 int32;
+
+struct cstate___2 {
+	byte_t cs_this;
+	bool initialized;
+	struct cstate___2 *next;
+	struct iphdr cs_ip;
+	struct tcphdr cs_tcp;
+	unsigned char cs_ipopt[64];
+	unsigned char cs_tcpopt[64];
+	int cs_hsize;
+};
+
+struct slcompress {
+	struct cstate___2 *tstate;
+	struct cstate___2 *rstate;
+	byte_t tslot_limit;
+	byte_t rslot_limit;
+	byte_t xmit_oldest;
+	byte_t xmit_current;
+	byte_t recv_current;
+	byte_t flags;
+	int32 sls_o_nontcp;
+	int32 sls_o_tcp;
+	int32 sls_o_uncompressed;
+	int32 sls_o_compressed;
+	int32 sls_o_searches;
+	int32 sls_o_misses;
+	int32 sls_i_uncompressed;
+	int32 sls_i_compressed;
+	int32 sls_i_error;
+	int32 sls_i_tossed;
+	int32 sls_i_runt;
+	int32 sls_i_badcheck;
+};
+
+struct ppp_file {
+	enum {
+		INTERFACE = 1,
+		CHANNEL = 2,
+	} kind;
+	struct sk_buff_head xq;
+	struct sk_buff_head rq;
+	wait_queue_head_t rwait;
+	refcount_t refcnt;
+	int hdrlen;
+	int index;
+	int dead;
+};
+
+struct ppp_link_stats {
+	u64 rx_packets;
+	u64 tx_packets;
+	u64 rx_bytes;
+	u64 tx_bytes;
+};
+
+struct ppp {
+	struct ppp_file file;
+	struct file *owner;
+	struct list_head channels;
+	int n_channels;
+	spinlock_t rlock;
+	spinlock_t wlock;
+	int *xmit_recursion;
+	int mru;
+	unsigned int flags;
+	unsigned int xstate;
+	unsigned int rstate;
+	int debug;
+	struct slcompress *vj;
+	enum NPmode npmode[6];
+	struct sk_buff *xmit_pending;
+	struct compressor *xcomp;
+	void *xc_state;
+	struct compressor *rcomp;
+	void *rc_state;
+	long unsigned int last_xmit;
+	long unsigned int last_recv;
+	struct net_device *dev;
+	int closing;
+	int nxchan;
+	u32 nxseq;
+	int mrru;
+	u32 nextseq;
+	u32 minseq;
+	struct sk_buff_head mrq;
+	struct bpf_prog *pass_filter;
+	struct bpf_prog *active_filter;
+	struct net *ppp_net;
+	struct ppp_link_stats stats64;
+};
+
+struct channel {
+	struct ppp_file file;
+	struct list_head list;
+	struct ppp_channel *chan;
+	struct rw_semaphore chan_sem;
+	spinlock_t downl;
+	struct ppp *ppp;
+	struct net *chan_net;
+	netns_tracker ns_tracker;
+	struct list_head clist;
+	rwlock_t upl;
+	struct channel *bridge;
+	u8 avail;
+	u8 had_frag;
+	u32 lastseq;
+	int speed;
+};
+
+struct ppp_config {
+	struct file *file;
+	s32 unit;
+	bool ifname_is_set;
+};
+
+struct ppp_net {
+	struct idr units_idr;
+	struct mutex all_ppp_mutex;
+	struct list_head all_channels;
+	struct list_head new_channels;
+	int last_channel_index;
+	spinlock_t all_channels_lock;
+};
+
+struct sock_fprog32 {
+	short unsigned int len;
+	compat_caddr_t filter;
+};
+
+struct ppp_option_data32 {
+	compat_uptr_t ptr;
+	u32 length;
+	compat_int_t transmit;
+};
+
+struct ppp_mp_skb_parm {
+	u32 sequence;
+	u8 BEbits;
+};
+
+struct compressor_entry {
+	struct list_head list;
+	struct compressor *comp;
+};
+
+struct wl1251_platform_data {
+	int power_gpio;
+	int irq;
+	bool use_eeprom;
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum wwan_port_type {
+	WWAN_PORT_AT = 0,
+	WWAN_PORT_MBIM = 1,
+	WWAN_PORT_QMI = 2,
+	WWAN_PORT_QCDM = 3,
+	WWAN_PORT_FIREHOSE = 4,
+	__WWAN_PORT_MAX = 5,
+	WWAN_PORT_MAX = 4,
+	WWAN_PORT_UNKNOWN = 5,
+};
+
+struct wwan_port;
+
+struct wwan_port_ops {
+	int (*start)(struct wwan_port *);
+	void (*stop)(struct wwan_port *);
+	int (*tx)(struct wwan_port *, struct sk_buff *);
+	int (*tx_blocking)(struct wwan_port *, struct sk_buff *);
+	__poll_t (*tx_poll)(struct wwan_port *, struct file *, poll_table *);
+};
+
+struct wwan_port {
+	enum wwan_port_type type;
+	unsigned int start_count;
+	long unsigned int flags;
+	const struct wwan_port_ops *ops;
+	struct mutex ops_lock;
+	struct device dev;
+	struct sk_buff_head rxq;
+	wait_queue_head_t waitqueue;
+	struct mutex data_lock;
+	union {
+		struct {
+			struct ktermios termios;
+			int mdmbits;
+		} at_data;
+	};
+};
+
+struct wwan_netdev_priv {
+	u32 link_id;
+	int: 32;
+	u8 drv_priv[0];
+};
+
+struct wwan_ops {
+	unsigned int priv_size;
+	void (*setup)(struct net_device *);
+	int (*newlink)(void *, struct net_device *, u32, struct netlink_ext_ack *);
+	void (*dellink)(void *, struct net_device *, struct list_head *);
+};
+
+enum {
+	IFLA_WWAN_UNSPEC = 0,
+	IFLA_WWAN_LINK_ID = 1,
+	__IFLA_WWAN_MAX = 2,
+};
+
+struct wwan_device {
+	unsigned int id;
+	struct device dev;
+	atomic_t port_id;
+	const struct wwan_ops *ops;
+	void *ops_ctxt;
+	struct dentry *debugfs_dir;
+};
+
+enum skb_free_reason {
+	SKB_REASON_CONSUMED = 0,
+	SKB_REASON_DROPPED = 1,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
 };
 
 struct xen_netif_tx_request {
@@ -88836,7 +105845,7 @@
 	RING_IDX req_event;
 	RING_IDX rsp_prod;
 	RING_IDX rsp_event;
-	uint8_t pad[48];
+	uint8_t __pad[48];
 	union xen_netif_tx_sring_entry ring[1];
 };
 
@@ -88857,7 +105866,7 @@
 	RING_IDX req_event;
 	RING_IDX rsp_prod;
 	RING_IDX rsp_event;
-	uint8_t pad[48];
+	uint8_t __pad[48];
 	union xen_netif_rx_sring_entry ring[1];
 };
 
@@ -88878,11 +105887,6 @@
 	struct u64_stats_sync syncp;
 };
 
-union skb_entry {
-	struct sk_buff *skb;
-	long unsigned int link;
-};
-
 struct netfront_info;
 
 struct netfront_queue {
@@ -88900,13 +105904,13 @@
 	spinlock_t tx_lock;
 	struct xen_netif_tx_front_ring tx;
 	int tx_ring_ref;
-	union skb_entry tx_skbs[256];
+	struct sk_buff *tx_skbs[256];
+	short unsigned int tx_link[256];
 	grant_ref_t gref_tx_head;
 	grant_ref_t grant_tx_ref[256];
 	struct page *grant_tx_page[256];
 	unsigned int tx_skb_freelist;
-	long: 32;
-	long: 64;
+	unsigned int tx_pend_queue;
 	long: 64;
 	spinlock_t rx_lock;
 	struct xen_netif_rx_front_ring rx;
@@ -88915,11 +105919,12 @@
 	struct sk_buff *rx_skbs[256];
 	grant_ref_t gref_rx_head;
 	grant_ref_t grant_rx_ref[256];
+	unsigned int rx_rsp_unconsumed;
+	spinlock_t rx_cons_lock;
 	struct page_pool *page_pool;
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
 	struct xdp_rxq_info xdp_rxq;
 };
 
@@ -88932,6 +105937,7 @@
 	struct netfront_stats *tx_stats;
 	bool netback_has_xdp_headroom;
 	bool netfront_xdp_enabled;
+	bool broken;
 	atomic_t rx_gso_checksum_fixup;
 };
 
@@ -88945,6 +105951,7 @@
 	struct sk_buff *skb;
 	struct page *page;
 	struct xen_netif_tx_request *tx;
+	struct xen_netif_tx_request tx_local;
 	unsigned int size;
 };
 
@@ -88953,6 +105960,922 @@
 	u16 offset;
 };
 
+struct vfio_info_cap_header {
+	__u16 id;
+	__u16 version;
+	__u32 next;
+};
+
+struct vfio_group_status {
+	__u32 argsz;
+	__u32 flags;
+};
+
+struct vfio_irq_set {
+	__u32 argsz;
+	__u32 flags;
+	__u32 index;
+	__u32 start;
+	__u32 count;
+	__u8 data[0];
+};
+
+struct vfio_device_feature {
+	__u32 argsz;
+	__u32 flags;
+	__u8 data[0];
+};
+
+struct vfio_device_feature_migration {
+	__u64 flags;
+};
+
+struct vfio_device_feature_mig_state {
+	__u32 device_state;
+	__s32 data_fd;
+};
+
+enum vfio_device_mig_state {
+	VFIO_DEVICE_STATE_ERROR = 0,
+	VFIO_DEVICE_STATE_STOP = 1,
+	VFIO_DEVICE_STATE_RUNNING = 2,
+	VFIO_DEVICE_STATE_STOP_COPY = 3,
+	VFIO_DEVICE_STATE_RESUMING = 4,
+	VFIO_DEVICE_STATE_RUNNING_P2P = 5,
+};
+
+struct vfio_device_set {
+	void *set_id;
+	struct mutex lock;
+	struct list_head device_list;
+	unsigned int device_count;
+};
+
+struct kvm___2;
+
+struct vfio_device_ops;
+
+struct vfio_group;
+
+struct vfio_device {
+	struct device *dev;
+	const struct vfio_device_ops *ops;
+	struct vfio_group *group;
+	struct vfio_device_set *dev_set;
+	struct list_head dev_set_list;
+	unsigned int migration_flags;
+	struct kvm___2 *kvm;
+	refcount_t refcount;
+	unsigned int open_count;
+	struct completion comp;
+	struct list_head group_next;
+};
+
+struct vfio_device_ops {
+	char *name;
+	int (*open_device)(struct vfio_device *);
+	void (*close_device)(struct vfio_device *);
+	ssize_t (*read)(struct vfio_device *, char *, size_t, loff_t *);
+	ssize_t (*write)(struct vfio_device *, const char *, size_t, loff_t *);
+	long int (*ioctl)(struct vfio_device *, unsigned int, long unsigned int);
+	int (*mmap)(struct vfio_device *, struct vm_area_struct *);
+	void (*request)(struct vfio_device *, unsigned int);
+	int (*match)(struct vfio_device *, char *);
+	int (*device_feature)(struct vfio_device *, u32, void *, size_t);
+	struct file * (*migration_set_state)(struct vfio_device *, enum vfio_device_mig_state);
+	int (*migration_get_state)(struct vfio_device *, enum vfio_device_mig_state *);
+};
+
+enum vfio_group_type {
+	VFIO_IOMMU = 0,
+	VFIO_EMULATED_IOMMU = 1,
+	VFIO_NO_IOMMU = 2,
+};
+
+struct vfio_container;
+
+struct vfio_group {
+	struct device dev;
+	struct cdev cdev;
+	refcount_t users;
+	unsigned int container_users;
+	struct iommu_group *iommu_group;
+	struct vfio_container *container;
+	struct list_head device_list;
+	struct mutex device_lock;
+	struct list_head vfio_next;
+	struct list_head container_next;
+	enum vfio_group_type type;
+	unsigned int dev_counter;
+	struct rw_semaphore group_rwsem;
+	struct kvm___2 *kvm;
+	struct file *opened_file;
+	struct blocking_notifier_head notifier;
+};
+
+enum vfio_notify_type {
+	VFIO_IOMMU_NOTIFY = 0,
+};
+
+struct vfio_info_cap {
+	struct vfio_info_cap_header *buf;
+	size_t size;
+};
+
+enum vfio_iommu_notify_type {
+	VFIO_IOMMU_CONTAINER_CLOSE = 0,
+};
+
+struct vfio_iommu_driver_ops {
+	char *name;
+	struct module *owner;
+	void * (*open)(long unsigned int);
+	void (*release)(void *);
+	long int (*ioctl)(void *, unsigned int, long unsigned int);
+	int (*attach_group)(void *, struct iommu_group *, enum vfio_group_type);
+	void (*detach_group)(void *, struct iommu_group *);
+	int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
+	int (*unpin_pages)(void *, long unsigned int *, int);
+	int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
+	int (*unregister_notifier)(void *, struct notifier_block *);
+	int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
+	struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *);
+	void (*notify)(void *, enum vfio_iommu_notify_type);
+};
+
+struct vfio {
+	struct class *class;
+	struct list_head iommu_drivers_list;
+	struct mutex iommu_drivers_lock;
+	struct list_head group_list;
+	struct mutex group_lock;
+	struct ida group_ida;
+	dev_t group_devt;
+};
+
+struct vfio_iommu_driver {
+	const struct vfio_iommu_driver_ops *ops;
+	struct list_head vfio_next;
+};
+
+struct vfio_container {
+	struct kref kref;
+	struct list_head group_list;
+	struct rw_semaphore group_lock;
+	struct vfio_iommu_driver *iommu_driver;
+	void *iommu_data;
+	bool noiommu;
+};
+
+enum {
+	VFIO_DEVICE_NUM_STATES = 6,
+};
+
+struct virqfd {
+	void *opaque;
+	struct eventfd_ctx *eventfd;
+	int (*handler)(void *, void *);
+	void (*thread)(void *, void *);
+	void *data;
+	struct work_struct inject;
+	wait_queue_entry_t wait;
+	poll_table pt;
+	struct work_struct shutdown;
+	struct virqfd **pvirqfd;
+};
+
+struct vfio_iommu_type1_info {
+	__u32 argsz;
+	__u32 flags;
+	__u64 iova_pgsizes;
+	__u32 cap_offset;
+};
+
+struct vfio_iova_range {
+	__u64 start;
+	__u64 end;
+};
+
+struct vfio_iommu_type1_info_cap_iova_range {
+	struct vfio_info_cap_header header;
+	__u32 nr_iovas;
+	__u32 reserved;
+	struct vfio_iova_range iova_ranges[0];
+};
+
+struct vfio_iommu_type1_info_cap_migration {
+	struct vfio_info_cap_header header;
+	__u32 flags;
+	__u64 pgsize_bitmap;
+	__u64 max_dirty_bitmap_size;
+};
+
+struct vfio_iommu_type1_info_dma_avail {
+	struct vfio_info_cap_header header;
+	__u32 avail;
+};
+
+struct vfio_iommu_type1_dma_map {
+	__u32 argsz;
+	__u32 flags;
+	__u64 vaddr;
+	__u64 iova;
+	__u64 size;
+};
+
+struct vfio_bitmap {
+	__u64 pgsize;
+	__u64 size;
+	__u64 *data;
+};
+
+struct vfio_iommu_type1_dma_unmap {
+	__u32 argsz;
+	__u32 flags;
+	__u64 iova;
+	__u64 size;
+	__u8 data[0];
+};
+
+struct vfio_iommu_type1_dirty_bitmap {
+	__u32 argsz;
+	__u32 flags;
+	__u8 data[0];
+};
+
+struct vfio_iommu_type1_dirty_bitmap_get {
+	__u64 iova;
+	__u64 size;
+	struct vfio_bitmap bitmap;
+};
+
+struct vfio_iommu {
+	struct list_head domain_list;
+	struct list_head iova_list;
+	struct mutex lock;
+	struct rb_root dma_list;
+	struct blocking_notifier_head notifier;
+	unsigned int dma_avail;
+	unsigned int vaddr_invalid_count;
+	uint64_t pgsize_bitmap;
+	uint64_t num_non_pinned_groups;
+	wait_queue_head_t vaddr_wait;
+	bool v2;
+	bool nesting;
+	bool dirty_page_tracking;
+	bool container_open;
+	struct list_head emulated_iommu_groups;
+};
+
+struct vfio_domain {
+	struct iommu_domain *domain;
+	struct list_head next;
+	struct list_head group_list;
+	bool fgsp: 1;
+	bool enforce_cache_coherency: 1;
+};
+
+struct vfio_dma {
+	struct rb_node node;
+	dma_addr_t iova;
+	long unsigned int vaddr;
+	size_t size;
+	int prot;
+	bool iommu_mapped;
+	bool lock_cap;
+	bool vaddr_invalid;
+	struct task_struct *task;
+	struct rb_root pfn_list;
+	long unsigned int *bitmap;
+};
+
+struct vfio_batch {
+	struct page **pages;
+	struct page *fallback_page;
+	int capacity;
+	int size;
+	int offset;
+};
+
+struct vfio_iommu_group {
+	struct iommu_group *iommu_group;
+	struct list_head next;
+	bool pinned_page_dirty_scope;
+};
+
+struct vfio_iova {
+	struct list_head list;
+	dma_addr_t start;
+	dma_addr_t end;
+};
+
+struct vfio_pfn {
+	struct rb_node node;
+	dma_addr_t iova;
+	long unsigned int pfn;
+	unsigned int ref_count;
+};
+
+struct vfio_regions {
+	struct list_head list;
+	dma_addr_t iova;
+	phys_addr_t phys;
+	size_t len;
+};
+
+struct vfio_device_info {
+	__u32 argsz;
+	__u32 flags;
+	__u32 num_regions;
+	__u32 num_irqs;
+	__u32 cap_offset;
+};
+
+struct vfio_region_info {
+	__u32 argsz;
+	__u32 flags;
+	__u32 index;
+	__u32 cap_offset;
+	__u64 size;
+	__u64 offset;
+};
+
+struct vfio_region_info_cap_type {
+	struct vfio_info_cap_header header;
+	__u32 type;
+	__u32 subtype;
+};
+
+struct vfio_irq_info {
+	__u32 argsz;
+	__u32 flags;
+	__u32 index;
+	__u32 count;
+};
+
+enum {
+	VFIO_PCI_BAR0_REGION_INDEX = 0,
+	VFIO_PCI_BAR1_REGION_INDEX = 1,
+	VFIO_PCI_BAR2_REGION_INDEX = 2,
+	VFIO_PCI_BAR3_REGION_INDEX = 3,
+	VFIO_PCI_BAR4_REGION_INDEX = 4,
+	VFIO_PCI_BAR5_REGION_INDEX = 5,
+	VFIO_PCI_ROM_REGION_INDEX = 6,
+	VFIO_PCI_CONFIG_REGION_INDEX = 7,
+	VFIO_PCI_VGA_REGION_INDEX = 8,
+	VFIO_PCI_NUM_REGIONS = 9,
+};
+
+enum {
+	VFIO_PCI_INTX_IRQ_INDEX = 0,
+	VFIO_PCI_MSI_IRQ_INDEX = 1,
+	VFIO_PCI_MSIX_IRQ_INDEX = 2,
+	VFIO_PCI_ERR_IRQ_INDEX = 3,
+	VFIO_PCI_REQ_IRQ_INDEX = 4,
+	VFIO_PCI_NUM_IRQS = 5,
+};
+
+struct vfio_pci_dependent_device {
+	__u32 group_id;
+	__u16 segment;
+	__u8 bus;
+	__u8 devfn;
+};
+
+struct vfio_pci_hot_reset_info {
+	__u32 argsz;
+	__u32 flags;
+	__u32 count;
+	struct vfio_pci_dependent_device devices[0];
+};
+
+struct vfio_pci_hot_reset {
+	__u32 argsz;
+	__u32 flags;
+	__u32 count;
+	__s32 group_fds[0];
+};
+
+struct vfio_device_ioeventfd {
+	__u32 argsz;
+	__u32 flags;
+	__u64 offset;
+	__u64 data;
+	__s32 fd;
+};
+
+struct irq_bypass_consumer;
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+struct vfio_pci_core_device;
+
+struct vfio_pci_ioeventfd {
+	struct list_head next;
+	struct vfio_pci_core_device *vdev;
+	struct virqfd *virqfd;
+	void *addr;
+	uint64_t data;
+	loff_t pos;
+	int bar;
+	int count;
+	bool test_mem;
+};
+
+struct pci_saved_state___2;
+
+struct perm_bits;
+
+struct vfio_pci_irq_ctx;
+
+struct vfio_pci_region;
+
+struct vfio_pci_vf_token;
+
+struct vfio_pci_core_device {
+	struct vfio_device vdev;
+	struct pci_dev *pdev;
+	void *barmap[6];
+	bool bar_mmap_supported[6];
+	u8 *pci_config_map;
+	u8 *vconfig;
+	struct perm_bits *msi_perm;
+	spinlock_t irqlock;
+	struct mutex igate;
+	struct vfio_pci_irq_ctx *ctx;
+	int num_ctx;
+	int irq_type;
+	int num_regions;
+	struct vfio_pci_region *region;
+	u8 msi_qmax;
+	u8 msix_bar;
+	u16 msix_size;
+	u32 msix_offset;
+	u32 rbar[7];
+	bool pci_2_3;
+	bool virq_disabled;
+	bool reset_works;
+	bool extended_caps;
+	bool bardirty;
+	bool has_vga;
+	bool needs_reset;
+	bool nointx;
+	bool needs_pm_restore;
+	struct pci_saved_state___2 *pci_saved_state;
+	struct pci_saved_state___2 *pm_save;
+	int ioeventfds_nr;
+	struct eventfd_ctx *err_trigger;
+	struct eventfd_ctx *req_trigger;
+	struct list_head dummy_resources_list;
+	struct mutex ioeventfds_lock;
+	struct list_head ioeventfds_list;
+	struct vfio_pci_vf_token *vf_token;
+	struct list_head sriov_pfs_item;
+	struct vfio_pci_core_device *sriov_pf_core_dev;
+	struct notifier_block nb;
+	struct mutex vma_lock;
+	struct list_head vma_list;
+	struct rw_semaphore memory_lock;
+};
+
+struct vfio_pci_irq_ctx {
+	struct eventfd_ctx *trigger;
+	struct virqfd *unmask;
+	struct virqfd *mask;
+	char *name;
+	bool masked;
+	struct irq_bypass_producer producer;
+};
+
+struct vfio_pci_regops {
+	ssize_t (*rw)(struct vfio_pci_core_device *, char *, size_t, loff_t *, bool);
+	void (*release)(struct vfio_pci_core_device *, struct vfio_pci_region *);
+	int (*mmap)(struct vfio_pci_core_device *, struct vfio_pci_region *, struct vm_area_struct *);
+	int (*add_capability)(struct vfio_pci_core_device *, struct vfio_pci_region *, struct vfio_info_cap *);
+};
+
+struct vfio_pci_region {
+	u32 type;
+	u32 subtype;
+	const struct vfio_pci_regops *ops;
+	void *data;
+	size_t size;
+	u32 flags;
+};
+
+struct vfio_pci_dummy_resource {
+	struct resource resource;
+	int index;
+	struct list_head res_next;
+};
+
+struct vfio_pci_vf_token {
+	struct mutex lock;
+	uuid_t uuid;
+	int users;
+};
+
+struct vfio_pci_mmap_vma {
+	struct vm_area_struct *vma;
+	struct list_head vma_next;
+};
+
+struct vfio_pci_fill_info {
+	int max;
+	int cur;
+	struct vfio_pci_dependent_device *devices;
+};
+
+struct vfio_pci_group_info {
+	int count;
+	struct file **files;
+};
+
+struct vfio_pci_walk_info {
+	int (*fn)(struct pci_dev *, void *);
+	void *data;
+	struct pci_dev *pdev;
+	bool slot;
+	int ret;
+};
+
+struct perm_bits {
+	u8 *virt;
+	u8 *write;
+	int (*readfn)(struct vfio_pci_core_device *, int, int, struct perm_bits *, int, __le32 *);
+	int (*writefn)(struct vfio_pci_core_device *, int, int, struct perm_bits *, int, __le32);
+};
+
+enum {
+	PCI_ID_F_VFIO_DRIVER_OVERRIDE = 1,
+};
+
+struct igd_opregion_vbt {
+	void *opregion;
+	void *vbt_ex;
+};
+
+struct cdrom_msf {
+	__u8 cdmsf_min0;
+	__u8 cdmsf_sec0;
+	__u8 cdmsf_frame0;
+	__u8 cdmsf_min1;
+	__u8 cdmsf_sec1;
+	__u8 cdmsf_frame1;
+};
+
+struct cdrom_volctrl {
+	__u8 channel0;
+	__u8 channel1;
+	__u8 channel2;
+	__u8 channel3;
+};
+
+struct cdrom_subchnl {
+	__u8 cdsc_format;
+	__u8 cdsc_audiostatus;
+	__u8 cdsc_adr: 4;
+	__u8 cdsc_ctrl: 4;
+	__u8 cdsc_trk;
+	__u8 cdsc_ind;
+	union cdrom_addr cdsc_absaddr;
+	union cdrom_addr cdsc_reladdr;
+};
+
+struct cdrom_read_audio {
+	union cdrom_addr addr;
+	__u8 addr_format;
+	int nframes;
+	__u8 *buf;
+};
+
+struct cdrom_blk {
+	unsigned int from;
+	short unsigned int len;
+};
+
+struct cdrom_timed_media_change_info {
+	__s64 last_media_change;
+	__u64 media_flags;
+};
+
+struct dvd_layer {
+	__u8 book_version: 4;
+	__u8 book_type: 4;
+	__u8 min_rate: 4;
+	__u8 disc_size: 4;
+	__u8 layer_type: 4;
+	__u8 track_path: 1;
+	__u8 nlayers: 2;
+	char: 1;
+	__u8 track_density: 4;
+	__u8 linear_density: 4;
+	__u8 bca: 1;
+	__u32 start_sector;
+	__u32 end_sector;
+	__u32 end_sector_l0;
+};
+
+struct dvd_physical {
+	__u8 type;
+	__u8 layer_num;
+	struct dvd_layer layer[4];
+};
+
+struct dvd_copyright {
+	__u8 type;
+	__u8 layer_num;
+	__u8 cpst;
+	__u8 rmi;
+};
+
+struct dvd_disckey {
+	__u8 type;
+	unsigned int agid: 2;
+	__u8 value[2048];
+};
+
+struct dvd_bca {
+	__u8 type;
+	int len;
+	__u8 value[188];
+};
+
+struct dvd_manufact {
+	__u8 type;
+	__u8 layer_num;
+	int len;
+	__u8 value[2048];
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_physical physical;
+	struct dvd_copyright copyright;
+	struct dvd_disckey disckey;
+	struct dvd_bca bca;
+	struct dvd_manufact manufact;
+} dvd_struct;
+
+typedef __u8 dvd_key[5];
+
+typedef __u8 dvd_challenge[10];
+
+struct dvd_lu_send_agid {
+	__u8 type;
+	unsigned int agid: 2;
+};
+
+struct dvd_host_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_send_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_challenge chal;
+};
+
+struct dvd_lu_send_title_key {
+	__u8 type;
+	unsigned int agid: 2;
+	dvd_key title_key;
+	int lba;
+	unsigned int cpm: 1;
+	unsigned int cp_sec: 1;
+	unsigned int cgms: 2;
+};
+
+struct dvd_lu_send_asf {
+	__u8 type;
+	unsigned int agid: 2;
+	unsigned int asf: 1;
+};
+
+struct dvd_host_send_rpcstate {
+	__u8 type;
+	__u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+	__u8 type: 2;
+	__u8 vra: 3;
+	__u8 ucca: 3;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+};
+
+typedef union {
+	__u8 type;
+	struct dvd_lu_send_agid lsa;
+	struct dvd_host_send_challenge hsc;
+	struct dvd_send_key lsk;
+	struct dvd_lu_send_challenge lsc;
+	struct dvd_send_key hsk;
+	struct dvd_lu_send_title_key lstk;
+	struct dvd_lu_send_asf lsasf;
+	struct dvd_host_send_rpcstate hrpcs;
+	struct dvd_lu_send_rpcstate lrpcs;
+} dvd_authinfo;
+
+struct mrw_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u8 write: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+	__u8 reserved4;
+	__u8 reserved5;
+};
+
+struct rwrt_feature_desc {
+	__be16 feature_code;
+	__u8 curr: 1;
+	__u8 persistent: 1;
+	__u8 feature_version: 4;
+	__u8 reserved1: 2;
+	__u8 add_len;
+	__u32 last_lba;
+	__u32 block_size;
+	__u16 blocking;
+	__u8 page_present: 1;
+	__u8 reserved2: 7;
+	__u8 reserved3;
+};
+
+typedef struct {
+	__be16 disc_information_length;
+	__u8 disc_status: 2;
+	__u8 border_status: 2;
+	__u8 erasable: 1;
+	__u8 reserved1: 3;
+	__u8 n_first_track;
+	__u8 n_sessions_lsb;
+	__u8 first_track_lsb;
+	__u8 last_track_lsb;
+	__u8 mrw_status: 2;
+	__u8 dbit: 1;
+	__u8 reserved2: 2;
+	__u8 uru: 1;
+	__u8 dbc_v: 1;
+	__u8 did_v: 1;
+	__u8 disc_type;
+	__u8 n_sessions_msb;
+	__u8 first_track_msb;
+	__u8 last_track_msb;
+	__u32 disc_id;
+	__u32 lead_in;
+	__u32 lead_out;
+	__u8 disc_bar_code[8];
+	__u8 reserved3;
+	__u8 n_opc;
+} disc_information;
+
+typedef struct {
+	__be16 track_information_length;
+	__u8 track_lsb;
+	__u8 session_lsb;
+	__u8 reserved1;
+	__u8 track_mode: 4;
+	__u8 copy: 1;
+	__u8 damage: 1;
+	__u8 reserved2: 2;
+	__u8 data_mode: 4;
+	__u8 fp: 1;
+	__u8 packet: 1;
+	__u8 blank: 1;
+	__u8 rt: 1;
+	__u8 nwa_v: 1;
+	__u8 lra_v: 1;
+	__u8 reserved3: 6;
+	__be32 track_start;
+	__be32 next_writable;
+	__be32 free_blocks;
+	__be32 fixed_packet_size;
+	__be32 track_size;
+	__be32 last_rec_address;
+} track_information;
+
+struct mode_page_header {
+	__be16 mode_data_length;
+	__u8 medium_type;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 reserved3;
+	__be16 desc_length;
+};
+
+typedef struct {
+	int data;
+	int audio;
+	int cdi;
+	int xa;
+	long int error;
+} tracktype;
+
+struct cdrom_mechstat_header {
+	__u8 curslot: 5;
+	__u8 changer_state: 2;
+	__u8 fault: 1;
+	__u8 reserved1: 4;
+	__u8 door_open: 1;
+	__u8 mech_state: 3;
+	__u8 curlba[3];
+	__u8 nslots;
+	__u16 slot_tablelen;
+};
+
+struct cdrom_slot {
+	__u8 change: 1;
+	__u8 reserved1: 6;
+	__u8 disc_present: 1;
+	__u8 reserved2[3];
+};
+
+struct cdrom_changer_info {
+	struct cdrom_mechstat_header hdr;
+	struct cdrom_slot slots[256];
+};
+
+struct modesel_head {
+	__u8 reserved1;
+	__u8 medium;
+	__u8 reserved2;
+	__u8 block_desc_length;
+	__u8 density;
+	__u8 number_of_blocks_hi;
+	__u8 number_of_blocks_med;
+	__u8 number_of_blocks_lo;
+	__u8 reserved3;
+	__u8 block_length_hi;
+	__u8 block_length_med;
+	__u8 block_length_lo;
+};
+
+typedef struct {
+	__u16 report_key_length;
+	__u8 reserved1;
+	__u8 reserved2;
+	__u8 ucca: 3;
+	__u8 vra: 3;
+	__u8 type_code: 2;
+	__u8 region_mask;
+	__u8 rpc_scheme;
+	__u8 reserved3;
+} rpc_state_t;
+
+struct cdrom_sysctl_settings {
+	char info[1000];
+	int autoclose;
+	int autoeject;
+	int debug;
+	int lock;
+	int check;
+};
+
+enum cdrom_print_option {
+	CTL_NAME = 0,
+	CTL_SPEED = 1,
+	CTL_SLOTS = 2,
+	CTL_CAPABILITY = 3,
+};
+
+struct compat_cdrom_read_audio {
+	union cdrom_addr addr;
+	u8 addr_format;
+	compat_int_t nframes;
+	compat_caddr_t buf;
+};
+
 enum usb_otg_state {
 	OTG_STATE_UNDEFINED = 0,
 	OTG_STATE_B_IDLE = 1,
@@ -88970,14 +106893,103 @@
 	OTG_STATE_A_VBUS_ERR = 13,
 };
 
-struct usb_otg_caps {
-	u16 otg_rev;
-	bool hnp_support;
-	bool srp_support;
-	bool adp_support;
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
 };
 
-struct extcon_dev;
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+};
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
 
 enum usb_charger_type {
 	UNKNOWN_TYPE = 0,
@@ -88993,27 +107005,6 @@
 	USB_CHARGER_ABSENT = 2,
 };
 
-enum usb_phy_events {
-	USB_EVENT_NONE = 0,
-	USB_EVENT_VBUS = 1,
-	USB_EVENT_ID = 2,
-	USB_EVENT_CHARGER = 3,
-	USB_EVENT_ENUMERATED = 4,
-};
-
-enum usb_phy_type {
-	USB_PHY_TYPE_UNDEFINED = 0,
-	USB_PHY_TYPE_USB2 = 1,
-	USB_PHY_TYPE_USB3 = 2,
-};
-
-struct usb_phy___2;
-
-struct usb_phy_io_ops {
-	int (*read)(struct usb_phy___2 *, u32);
-	int (*write)(struct usb_phy___2 *, u32, u32);
-};
-
 struct usb_charger_current {
 	unsigned int sdp_min;
 	unsigned int sdp_max;
@@ -89027,7 +107018,9 @@
 
 struct usb_otg;
 
-struct usb_phy___2 {
+struct usb_phy_io_ops;
+
+struct usb_phy {
 	struct device *dev;
 	const char *label;
 	unsigned int flags;
@@ -89050,29 +107043,51 @@
 	u16 port_status;
 	u16 port_change;
 	struct list_head head;
-	int (*init)(struct usb_phy___2 *);
-	void (*shutdown)(struct usb_phy___2 *);
-	int (*set_vbus)(struct usb_phy___2 *, int);
-	int (*set_power)(struct usb_phy___2 *, unsigned int);
-	int (*set_suspend)(struct usb_phy___2 *, int);
-	int (*set_wakeup)(struct usb_phy___2 *, bool);
-	int (*notify_connect)(struct usb_phy___2 *, enum usb_device_speed);
-	int (*notify_disconnect)(struct usb_phy___2 *, enum usb_device_speed);
-	enum usb_charger_type (*charger_detect)(struct usb_phy___2 *);
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
 };
 
-struct phy_devm {
-	struct usb_phy___2 *phy;
-	struct notifier_block *nb;
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
 };
 
-enum usb_phy_interface {
-	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
-	USBPHY_INTERFACE_MODE_UTMI = 1,
-	USBPHY_INTERFACE_MODE_UTMIW = 2,
-	USBPHY_INTERFACE_MODE_ULPI = 3,
-	USBPHY_INTERFACE_MODE_SERIAL = 4,
-	USBPHY_INTERFACE_MODE_HSIC = 5,
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
 };
 
 struct usb_gadget;
@@ -89080,7 +107095,7 @@
 struct usb_otg {
 	u8 default_a;
 	struct phy *phy;
-	struct usb_phy___2 *usb_phy;
+	struct usb_phy *usb_phy;
 	struct usb_bus *host;
 	struct usb_gadget *gadget;
 	enum usb_otg_state state;
@@ -89091,9 +107106,1175 @@
 	int (*start_hnp)(struct usb_otg *);
 };
 
-struct ulpi_info {
-	unsigned int id;
+typedef u32 usb_port_location_t;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	long unsigned int event_bits[1];
+	long unsigned int change_bits[1];
+	long unsigned int removed_bits[1];
+	long unsigned int wakeup_bits[1];
+	long unsigned int power_bits[1];
+	long unsigned int child_usage_bits[1];
+	long unsigned int warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+};
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_class_driver {
 	char *name;
+	char * (*devnode)(struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct usb_class {
+	struct kref kref;
+	struct class *class;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void *data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void *context;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void *data;
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct usbdevfs_ctrltransfer32 {
+	u8 bRequestType;
+	u8 bRequest;
+	u16 wValue;
+	u16 wIndex;
+	u16 wLength;
+	u32 timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer32 {
+	compat_uint_t ep;
+	compat_uint_t len;
+	compat_uint_t timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_disconnectsignal32 {
+	compat_int_t signr;
+	compat_caddr_t context;
+};
+
+struct usbdevfs_urb32 {
+	unsigned char type;
+	unsigned char endpoint;
+	compat_int_t status;
+	compat_uint_t flags;
+	compat_caddr_t buffer;
+	compat_int_t buffer_length;
+	compat_int_t actual_length;
+	compat_int_t start_frame;
+	compat_int_t number_of_packets;
+	compat_int_t error_count;
+	compat_uint_t signr;
+	compat_caddr_t usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl32 {
+	s32 ifno;
+	s32 ioctl_code;
+	compat_caddr_t data;
+};
+
+struct usb_dev_state___2 {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	long unsigned int ifclaimed;
+	u32 disabled_bulk_eps;
+	long unsigned int interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	long unsigned int vm_start;
+	struct usb_dev_state___2 *ps;
+};
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state___2 *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void *userbuffer;
+	void *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE = 1,
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+struct usb_phy_roothub___2 {
+	struct phy *phy;
+	struct list_head list;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+struct usb_ep;
+
+struct usb_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	struct scatterlist *sg;
+	unsigned int num_sgs;
+	unsigned int num_mapped_sgs;
+	unsigned int stream_id: 16;
+	unsigned int is_last: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int zero: 1;
+	unsigned int short_not_ok: 1;
+	unsigned int dma_mapped: 1;
+	void (*complete)(struct usb_ep *, struct usb_request *);
+	void *context;
+	struct list_head list;
+	unsigned int frame_number;
+	int status;
+	unsigned int actual;
+};
+
+struct usb_ep_caps {
+	unsigned int type_control: 1;
+	unsigned int type_iso: 1;
+	unsigned int type_bulk: 1;
+	unsigned int type_int: 1;
+	unsigned int dir_in: 1;
+	unsigned int dir_out: 1;
+};
+
+struct usb_ep_ops;
+
+struct usb_ep {
+	void *driver_data;
+	const char *name;
+	const struct usb_ep_ops *ops;
+	struct list_head ep_list;
+	struct usb_ep_caps caps;
+	bool claimed;
+	bool enabled;
+	unsigned int maxpacket: 16;
+	unsigned int maxpacket_limit: 16;
+	unsigned int max_streams: 16;
+	unsigned int mult: 2;
+	unsigned int maxburst: 5;
+	u8 address;
+	const struct usb_endpoint_descriptor *desc;
+	const struct usb_ss_ep_comp_descriptor *comp_desc;
+};
+
+struct usb_ep_ops {
+	int (*enable)(struct usb_ep *, const struct usb_endpoint_descriptor *);
+	int (*disable)(struct usb_ep *);
+	void (*dispose)(struct usb_ep *);
+	struct usb_request * (*alloc_request)(struct usb_ep *, gfp_t);
+	void (*free_request)(struct usb_ep *, struct usb_request *);
+	int (*queue)(struct usb_ep *, struct usb_request *, gfp_t);
+	int (*dequeue)(struct usb_ep *, struct usb_request *);
+	int (*set_halt)(struct usb_ep *, int);
+	int (*set_wedge)(struct usb_ep *);
+	int (*fifo_status)(struct usb_ep *);
+	void (*fifo_flush)(struct usb_ep *);
+};
+
+struct usb_dcd_config_params {
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+	__u8 besl_baseline;
+	__u8 besl_deep;
+};
+
+struct usb_gadget_driver;
+
+struct usb_gadget_ops {
+	int (*get_frame)(struct usb_gadget *);
+	int (*wakeup)(struct usb_gadget *);
+	int (*set_selfpowered)(struct usb_gadget *, int);
+	int (*vbus_session)(struct usb_gadget *, int);
+	int (*vbus_draw)(struct usb_gadget *, unsigned int);
+	int (*pullup)(struct usb_gadget *, int);
+	int (*ioctl)(struct usb_gadget *, unsigned int, long unsigned int);
+	void (*get_config_params)(struct usb_gadget *, struct usb_dcd_config_params *);
+	int (*udc_start)(struct usb_gadget *, struct usb_gadget_driver *);
+	int (*udc_stop)(struct usb_gadget *);
+	void (*udc_set_speed)(struct usb_gadget *, enum usb_device_speed);
+	void (*udc_set_ssp_rate)(struct usb_gadget *, enum usb_ssp_rate);
+	void (*udc_async_callbacks)(struct usb_gadget *, bool);
+	struct usb_ep * (*match_ep)(struct usb_gadget *, struct usb_endpoint_descriptor *, struct usb_ss_ep_comp_descriptor *);
+	int (*check_config)(struct usb_gadget *);
+};
+
+struct usb_udc;
+
+struct usb_otg_caps;
+
+struct usb_gadget {
+	struct work_struct work;
+	struct usb_udc *udc;
+	const struct usb_gadget_ops *ops;
+	struct usb_ep *ep0;
+	struct list_head ep_list;
+	enum usb_device_speed speed;
+	enum usb_device_speed max_speed;
+	enum usb_ssp_rate ssp_rate;
+	enum usb_ssp_rate max_ssp_rate;
+	enum usb_device_state state;
+	const char *name;
+	struct device dev;
+	unsigned int isoch_delay;
+	unsigned int out_epnum;
+	unsigned int in_epnum;
+	unsigned int mA;
+	struct usb_otg_caps *otg_caps;
+	unsigned int sg_supported: 1;
+	unsigned int is_otg: 1;
+	unsigned int is_a_peripheral: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int a_hnp_support: 1;
+	unsigned int a_alt_hnp_support: 1;
+	unsigned int hnp_polling_support: 1;
+	unsigned int host_request_flag: 1;
+	unsigned int quirk_ep_out_aligned_size: 1;
+	unsigned int quirk_altset_not_supp: 1;
+	unsigned int quirk_stall_not_supp: 1;
+	unsigned int quirk_zlp_not_supp: 1;
+	unsigned int quirk_avoids_skb_reserve: 1;
+	unsigned int is_selfpowered: 1;
+	unsigned int deactivated: 1;
+	unsigned int connected: 1;
+	unsigned int lpm_capable: 1;
+	int irq;
+	int id_number;
+};
+
+struct usb_gadget_driver {
+	char *function;
+	enum usb_device_speed max_speed;
+	int (*bind)(struct usb_gadget *, struct usb_gadget_driver *);
+	void (*unbind)(struct usb_gadget *);
+	int (*setup)(struct usb_gadget *, const struct usb_ctrlrequest *);
+	void (*disconnect)(struct usb_gadget *);
+	void (*suspend)(struct usb_gadget *);
+	void (*resume)(struct usb_gadget *);
+	void (*reset)(struct usb_gadget *);
+	struct device_driver driver;
+	char *udc_name;
+	unsigned int match_existing_only: 1;
+	bool is_bound: 1;
+};
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+struct dwc2_dma_desc {
+	u32 status;
+	u32 buf;
+};
+
+struct dwc2_hw_params {
+	unsigned int op_mode: 3;
+	unsigned int arch: 2;
+	unsigned int dma_desc_enable: 1;
+	unsigned int enable_dynamic_fifo: 1;
+	unsigned int en_multiple_tx_fifo: 1;
+	unsigned int rx_fifo_size: 16;
+	char: 8;
+	unsigned int host_nperio_tx_fifo_size: 16;
+	unsigned int dev_nperio_tx_fifo_size: 16;
+	unsigned int host_perio_tx_fifo_size: 16;
+	unsigned int nperio_tx_q_depth: 3;
+	unsigned int host_perio_tx_q_depth: 3;
+	unsigned int dev_token_q_depth: 5;
+	char: 5;
+	unsigned int max_transfer_size: 26;
+	char: 6;
+	unsigned int max_packet_count: 11;
+	unsigned int host_channels: 5;
+	unsigned int hs_phy_type: 2;
+	unsigned int fs_phy_type: 2;
+	unsigned int i2c_enable: 1;
+	unsigned int acg_enable: 1;
+	unsigned int num_dev_ep: 4;
+	unsigned int num_dev_in_eps: 4;
+	char: 2;
+	unsigned int num_dev_perio_in_ep: 4;
+	unsigned int total_fifo_size: 16;
+	unsigned int power_optimized: 1;
+	unsigned int hibernation: 1;
+	unsigned int utmi_phy_data_width: 2;
+	unsigned int lpm_mode: 1;
+	unsigned int ipg_isoc_en: 1;
+	unsigned int service_interval_mode: 1;
+	u32 snpsid;
+	u32 dev_ep_dirs;
+	u32 g_tx_fifo_size[16];
+};
+
+struct dwc2_core_params {
+	struct usb_otg_caps otg_caps;
+	u8 phy_type;
+	u8 speed;
+	u8 phy_utmi_width;
+	bool phy_ulpi_ddr;
+	bool phy_ulpi_ext_vbus;
+	bool enable_dynamic_fifo;
+	bool en_multiple_tx_fifo;
+	bool i2c_enable;
+	bool acg_enable;
+	bool ulpi_fs_ls;
+	bool ts_dline;
+	bool reload_ctl;
+	bool uframe_sched;
+	bool external_id_pin_ctl;
+	int power_down;
+	bool no_clock_gating;
+	bool lpm;
+	bool lpm_clock_gating;
+	bool besl;
+	bool hird_threshold_en;
+	bool service_interval;
+	u8 hird_threshold;
+	bool activate_stm_fs_transceiver;
+	bool activate_stm_id_vb_detection;
+	bool activate_ingenic_overcurrent_detection;
+	bool ipg_isoc_en;
+	u16 max_packet_count;
+	u32 max_transfer_size;
+	u32 ahbcfg;
+	u32 ref_clk_per;
+	u16 sof_cnt_wkup_alert;
+	bool host_dma;
+	bool dma_desc_enable;
+	bool dma_desc_fs_enable;
+	bool host_support_fs_ls_low_power;
+	bool host_ls_low_power_phy_clk;
+	bool oc_disable;
+	u8 host_channels;
+	u16 host_rx_fifo_size;
+	u16 host_nperio_tx_fifo_size;
+	u16 host_perio_tx_fifo_size;
+	bool g_dma;
+	bool g_dma_desc;
+	u32 g_rx_fifo_size;
+	u32 g_np_tx_fifo_size;
+	u32 g_tx_fifo_size[16];
+	bool change_speed_quirk;
+};
+
+enum dwc2_lx_state {
+	DWC2_L0 = 0,
+	DWC2_L1 = 1,
+	DWC2_L2 = 2,
+	DWC2_L3 = 3,
+};
+
+struct dwc2_gregs_backup {
+	u32 gotgctl;
+	u32 gintmsk;
+	u32 gahbcfg;
+	u32 gusbcfg;
+	u32 grxfsiz;
+	u32 gnptxfsiz;
+	u32 gi2cctl;
+	u32 glpmcfg;
+	u32 pcgcctl;
+	u32 pcgcctl1;
+	u32 gdfifocfg;
+	u32 gpwrdn;
+	bool valid;
+};
+
+struct dwc2_dregs_backup {
+	u32 dcfg;
+	u32 dctl;
+	u32 daintmsk;
+	u32 diepmsk;
+	u32 doepmsk;
+	u32 diepctl[16];
+	u32 dieptsiz[16];
+	u32 diepdma[16];
+	u32 doepctl[16];
+	u32 doeptsiz[16];
+	u32 doepdma[16];
+	u32 dtxfsiz[16];
+	bool valid;
+};
+
+struct dwc2_hregs_backup {
+	u32 hcfg;
+	u32 haintmsk;
+	u32 hcintmsk[16];
+	u32 hprt0;
+	u32 hfir;
+	u32 hptxfsiz;
+	bool valid;
+};
+
+union dwc2_hcd_internal_flags {
+	u32 d32;
+	struct {
+		unsigned int port_connect_status_change: 1;
+		unsigned int port_connect_status: 1;
+		unsigned int port_reset_change: 1;
+		unsigned int port_enable_change: 1;
+		unsigned int port_suspend_change: 1;
+		unsigned int port_over_current_change: 1;
+		unsigned int port_l1_change: 1;
+		unsigned int reserved: 25;
+	} b;
+};
+
+struct usb_role_switch;
+
+struct dwc2_hsotg_plat;
+
+struct dwc2_host_chan;
+
+struct dwc2_hsotg {
+	struct device *dev;
+	void *regs;
+	struct dwc2_hw_params hw_params;
+	struct dwc2_core_params params;
+	enum usb_otg_state op_state;
+	enum usb_dr_mode dr_mode;
+	struct usb_role_switch *role_sw;
+	enum usb_dr_mode role_sw_default_mode;
+	unsigned int hcd_enabled: 1;
+	unsigned int gadget_enabled: 1;
+	unsigned int ll_hw_enabled: 1;
+	unsigned int hibernated: 1;
+	unsigned int in_ppd: 1;
+	bool bus_suspended;
+	unsigned int reset_phy_on_wake: 1;
+	unsigned int need_phy_for_wake: 1;
+	unsigned int phy_off_for_suspend: 1;
+	u16 frame_number;
+	struct phy *phy;
+	struct usb_phy *uphy;
+	struct dwc2_hsotg_plat *plat;
+	struct regulator_bulk_data supplies[2];
+	struct regulator *vbus_supply;
+	struct regulator *usb33d;
+	spinlock_t lock;
+	void *priv;
+	int irq;
+	struct clk *clk;
+	struct reset_control *reset;
+	struct reset_control *reset_ecc;
+	unsigned int queuing_high_bandwidth: 1;
+	unsigned int srp_success: 1;
+	struct workqueue_struct *wq_otg;
+	struct work_struct wf_otg;
+	struct timer_list wkp_timer;
+	enum dwc2_lx_state lx_state;
+	struct dwc2_gregs_backup gr_backup;
+	struct dwc2_dregs_backup dr_backup;
+	struct dwc2_hregs_backup hr_backup;
+	struct dentry *debug_root;
+	struct debugfs_regset32 *regset;
+	bool needs_byte_swap;
+	union dwc2_hcd_internal_flags flags;
+	struct list_head non_periodic_sched_inactive;
+	struct list_head non_periodic_sched_waiting;
+	struct list_head non_periodic_sched_active;
+	struct list_head *non_periodic_qh_ptr;
+	struct list_head periodic_sched_inactive;
+	struct list_head periodic_sched_ready;
+	struct list_head periodic_sched_assigned;
+	struct list_head periodic_sched_queued;
+	struct list_head split_order;
+	u16 periodic_usecs;
+	long unsigned int hs_periodic_bitmap[13];
+	u16 periodic_qh_count;
+	bool new_connection;
+	u16 last_frame_num;
+	struct list_head free_hc_list;
+	int periodic_channels;
+	int non_periodic_channels;
+	int available_host_channels;
+	struct dwc2_host_chan *hc_ptr_array[16];
+	u8 *status_buf;
+	dma_addr_t status_buf_dma;
+	struct delayed_work start_work;
+	struct delayed_work reset_work;
+	struct work_struct phy_reset_work;
+	u8 otg_port;
+	u32 *frame_list;
+	dma_addr_t frame_list_dma;
+	u32 frame_list_sz;
+	struct kmem_cache *desc_gen_cache;
+	struct kmem_cache *desc_hsisoc_cache;
+	struct kmem_cache *unaligned_cache;
+};
+
+enum dwc2_halt_status {
+	DWC2_HC_XFER_NO_HALT_STATUS = 0,
+	DWC2_HC_XFER_COMPLETE = 1,
+	DWC2_HC_XFER_URB_COMPLETE = 2,
+	DWC2_HC_XFER_ACK = 3,
+	DWC2_HC_XFER_NAK = 4,
+	DWC2_HC_XFER_NYET = 5,
+	DWC2_HC_XFER_STALL = 6,
+	DWC2_HC_XFER_XACT_ERR = 7,
+	DWC2_HC_XFER_FRAME_OVERRUN = 8,
+	DWC2_HC_XFER_BABBLE_ERR = 9,
+	DWC2_HC_XFER_DATA_TOGGLE_ERR = 10,
+	DWC2_HC_XFER_AHB_ERR = 11,
+	DWC2_HC_XFER_PERIODIC_INCOMPLETE = 12,
+	DWC2_HC_XFER_URB_DEQUEUE = 13,
+};
+
+struct dwc2_qh;
+
+struct dwc2_host_chan {
+	u8 hc_num;
+	unsigned int dev_addr: 7;
+	unsigned int ep_num: 4;
+	unsigned int ep_is_in: 1;
+	unsigned int speed: 4;
+	unsigned int ep_type: 2;
+	char: 6;
+	unsigned int max_packet: 11;
+	unsigned int data_pid_start: 2;
+	unsigned int multi_count: 2;
+	u8 *xfer_buf;
+	dma_addr_t xfer_dma;
+	dma_addr_t align_buf;
+	u32 xfer_len;
+	u32 xfer_count;
+	u16 start_pkt_count;
+	u8 xfer_started;
+	u8 do_ping;
+	u8 error_state;
+	u8 halt_on_queue;
+	u8 halt_pending;
+	u8 do_split;
+	u8 complete_split;
+	u8 hub_addr;
+	u8 hub_port;
+	u8 xact_pos;
+	u8 requests;
+	u8 schinfo;
+	u16 ntd;
+	enum dwc2_halt_status halt_status;
+	u32 hcint;
+	struct dwc2_qh *qh;
+	struct list_head hc_list_entry;
+	dma_addr_t desc_list_addr;
+	u32 desc_list_sz;
+	struct list_head split_order_list_entry;
+};
+
+struct dwc2_hs_transfer_time {
+	u32 start_schedule_us;
+	u16 duration_us;
+};
+
+struct dwc2_tt;
+
+struct dwc2_qh {
+	struct dwc2_hsotg *hsotg;
+	u8 ep_type;
+	u8 ep_is_in;
+	u16 maxp;
+	u16 maxp_mult;
+	u8 dev_speed;
+	u8 data_toggle;
+	u8 ping_state;
+	u8 do_split;
+	u8 td_first;
+	u8 td_last;
+	u16 host_us;
+	u16 device_us;
+	u16 host_interval;
+	u16 device_interval;
+	u16 next_active_frame;
+	u16 start_active_frame;
+	s16 num_hs_transfers;
+	struct dwc2_hs_transfer_time hs_transfers[8];
+	u32 ls_start_schedule_slice;
+	u16 ntd;
+	u8 *dw_align_buf;
+	dma_addr_t dw_align_buf_dma;
+	struct list_head qtd_list;
+	struct dwc2_host_chan *channel;
+	struct list_head qh_list_entry;
+	struct dwc2_dma_desc *desc_list;
+	dma_addr_t desc_list_dma;
+	u32 desc_list_sz;
+	u32 *n_bytes;
+	struct timer_list unreserve_timer;
+	struct hrtimer wait_timer;
+	struct dwc2_tt *dwc_tt;
+	int ttport;
+	unsigned int tt_buffer_dirty: 1;
+	unsigned int unreserve_pending: 1;
+	unsigned int schedule_low_speed: 1;
+	unsigned int want_wait: 1;
+	unsigned int wait_timer_cancel: 1;
+};
+
+struct dwc2_tt {
+	int refcount;
+	struct usb_tt *usb_tt;
+	long unsigned int periodic_bitmaps[0];
+};
+
+enum dwc2_hsotg_dmamode {
+	S3C_HSOTG_DMA_NONE = 0,
+	S3C_HSOTG_DMA_ONLY = 1,
+	S3C_HSOTG_DMA_DRV = 2,
+};
+
+struct dwc2_hsotg_plat {
+	enum dwc2_hsotg_dmamode dma;
+	unsigned int is_osc: 1;
+	int phy_type;
+	int (*phy_init)(struct platform_device *, int);
+	int (*phy_exit)(struct platform_device *, int);
+};
+
+enum usb_role {
+	USB_ROLE_NONE = 0,
+	USB_ROLE_HOST = 1,
+	USB_ROLE_DEVICE = 2,
+};
+
+typedef int (*usb_role_switch_set_t)(struct usb_role_switch *, enum usb_role);
+
+typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *);
+
+struct usb_role_switch_desc {
+	struct fwnode_handle *fwnode;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+	void *driver_data;
+	const char *name;
+};
+
+typedef void (*set_params_cb)(struct dwc2_hsotg *);
+
+struct dwc2_hcd_pipe_info {
+	u8 dev_addr;
+	u8 ep_num;
+	u8 pipe_type;
+	u8 pipe_dir;
+	u16 maxp;
+	u16 maxp_mult;
+};
+
+struct dwc2_hcd_iso_packet_desc {
+	u32 offset;
+	u32 length;
+	u32 actual_length;
+	u32 status;
+};
+
+struct dwc2_qtd;
+
+struct dwc2_hcd_urb {
+	void *priv;
+	struct dwc2_qtd *qtd;
+	void *buf;
+	dma_addr_t dma;
+	void *setup_packet;
+	dma_addr_t setup_dma;
+	u32 length;
+	u32 actual_length;
+	u32 status;
+	u32 error_count;
+	u32 packet_count;
+	u32 flags;
+	u16 interval;
+	struct dwc2_hcd_pipe_info pipe_info;
+	struct dwc2_hcd_iso_packet_desc iso_descs[0];
+};
+
+enum dwc2_control_phase {
+	DWC2_CONTROL_SETUP = 0,
+	DWC2_CONTROL_DATA = 1,
+	DWC2_CONTROL_STATUS = 2,
+};
+
+struct dwc2_qtd {
+	enum dwc2_control_phase control_phase;
+	u8 in_process;
+	u8 data_toggle;
+	u8 complete_split;
+	u8 isoc_split_pos;
+	u16 isoc_frame_index;
+	u16 isoc_split_offset;
+	u16 isoc_td_last;
+	u16 isoc_td_first;
+	u32 ssplit_out_xfer_count;
+	u8 error_count;
+	u8 n_desc;
+	u16 isoc_frame_index_last;
+	u16 num_naks;
+	struct dwc2_hcd_urb *urb;
+	struct dwc2_qh *qh;
+	struct list_head qtd_list_entry;
+};
+
+enum dwc2_transaction_type {
+	DWC2_TRANSACTION_NONE = 0,
+	DWC2_TRANSACTION_PERIODIC = 1,
+	DWC2_TRANSACTION_NON_PERIODIC = 2,
+	DWC2_TRANSACTION_ALL = 3,
+};
+
+struct wrapper_priv_data {
+	struct dwc2_hsotg *hsotg;
 };
 
 enum amd_chipset_gen {
@@ -89123,6 +108304,1735 @@
 	bool need_pll_quirk;
 };
 
+struct ehci_stats {
+	long unsigned int normal;
+	long unsigned int error;
+	long unsigned int iaa;
+	long unsigned int lost_iaa;
+	long unsigned int complete;
+	long unsigned int unlink;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	long unsigned int reset_done[15];
+	long unsigned int bus_suspended;
+	long unsigned int companion_ports;
+	long unsigned int owned_ports;
+	long unsigned int port_c_suspend;
+	long unsigned int suspended_ports;
+	long unsigned int resuming_ports;
+	struct dma_pool___2 *qh_pool;
+	struct dma_pool___2 *qtd_pool;
+	struct dma_pool___2 *itd_pool;
+	struct dma_pool___2 *sitd_pool;
+	unsigned int random_frame;
+	long unsigned int next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	struct ehci_stats stats;
+	struct dentry *debug_dir;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	long unsigned int priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct debug_buffer {
+	ssize_t (*fill_func)(struct debug_buffer *);
+	struct usb_bus *bus;
+	struct mutex mutex;
+	size_t count;
+	char *output_buf;
+	size_t alloc_size;
+};
+
+struct soc_device_attribute {
+	const char *machine;
+	const char *family;
+	const char *revision;
+	const char *serial_number;
+	const char *soc_id;
+	const void *data;
+	const struct attribute_group *custom_attr_group;
+};
+
+struct usb_ehci_pdata {
+	int caps_offset;
+	unsigned int has_tt: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int no_io_watchdog: 1;
+	unsigned int reset_on_resume: 1;
+	unsigned int dma_mask_64: 1;
+	unsigned int spurious_oc: 1;
+	int (*power_on)(struct platform_device *);
+	void (*power_off)(struct platform_device *);
+	void (*power_suspend)(struct platform_device *);
+	int (*pre_setup)(struct usb_hcd *);
+};
+
+struct ehci_platform_priv {
+	struct clk *clks[4];
+	struct reset_control *rsts;
+	bool reset_on_resume;
+	bool quirk_poll;
+	struct timer_list poll_timer;
+	struct delayed_work poll_work;
+};
+
+typedef __u32 __hc32;
+
+typedef __u16 __hc16;
+
+struct td;
+
+struct ed {
+	__hc32 hwINFO;
+	__hc32 hwTailP;
+	__hc32 hwHeadP;
+	__hc32 hwNextED;
+	dma_addr_t dma;
+	struct td *dummy;
+	struct ed *ed_next;
+	struct ed *ed_prev;
+	struct list_head td_list;
+	struct list_head in_use_list;
+	u8 state;
+	u8 type;
+	u8 branch;
+	u16 interval;
+	u16 load;
+	u16 last_iso;
+	u16 tick;
+	unsigned int takeback_wdh_cnt;
+	struct td *pending_td;
+	long: 64;
+};
+
+struct td {
+	__hc32 hwINFO;
+	__hc32 hwCBP;
+	__hc32 hwNextTD;
+	__hc32 hwBE;
+	__hc16 hwPSW[2];
+	__u8 index;
+	struct ed *ed;
+	struct td *td_hash;
+	struct td *next_dl_td;
+	struct urb *urb;
+	dma_addr_t td_dma;
+	dma_addr_t data_dma;
+	struct list_head td_list;
+	long: 64;
+};
+
+struct ohci_hcca {
+	__hc32 int_table[32];
+	__hc32 frame_no;
+	__hc32 done_head;
+	u8 reserved_for_hc[116];
+	u8 what[4];
+};
+
+struct ohci_roothub_regs {
+	__hc32 a;
+	__hc32 b;
+	__hc32 status;
+	__hc32 portstatus[15];
+};
+
+struct ohci_regs {
+	__hc32 revision;
+	__hc32 control;
+	__hc32 cmdstatus;
+	__hc32 intrstatus;
+	__hc32 intrenable;
+	__hc32 intrdisable;
+	__hc32 hcca;
+	__hc32 ed_periodcurrent;
+	__hc32 ed_controlhead;
+	__hc32 ed_controlcurrent;
+	__hc32 ed_bulkhead;
+	__hc32 ed_bulkcurrent;
+	__hc32 donehead;
+	__hc32 fminterval;
+	__hc32 fmremaining;
+	__hc32 fmnumber;
+	__hc32 periodicstart;
+	__hc32 lsthresh;
+	struct ohci_roothub_regs roothub;
+	long: 64;
+	long: 64;
+};
+
+struct urb_priv {
+	struct ed *ed;
+	u16 length;
+	u16 td_cnt;
+	struct list_head pending;
+	struct td *td[0];
+};
+
+typedef struct urb_priv urb_priv_t;
+
+enum ohci_rh_state {
+	OHCI_RH_HALTED = 0,
+	OHCI_RH_SUSPENDED = 1,
+	OHCI_RH_RUNNING = 2,
+};
+
+struct ohci_hcd {
+	spinlock_t lock;
+	struct ohci_regs *regs;
+	struct ohci_hcca *hcca;
+	dma_addr_t hcca_dma;
+	struct ed *ed_rm_list;
+	struct ed *ed_bulktail;
+	struct ed *ed_controltail;
+	struct ed *periodic[32];
+	void (*start_hnp)(struct ohci_hcd *);
+	struct dma_pool___2 *td_cache;
+	struct dma_pool___2 *ed_cache;
+	struct td *td_hash[64];
+	struct td *dl_start;
+	struct td *dl_end;
+	struct list_head pending;
+	struct list_head eds_in_use;
+	enum ohci_rh_state rh_state;
+	int num_ports;
+	int load[32];
+	u32 hc_control;
+	long unsigned int next_statechange;
+	u32 fminterval;
+	unsigned int autostop: 1;
+	unsigned int working: 1;
+	unsigned int restart_work: 1;
+	long unsigned int flags;
+	unsigned int prev_frame_no;
+	unsigned int wdh_cnt;
+	unsigned int prev_wdh_cnt;
+	u32 prev_donehead;
+	struct timer_list io_watchdog;
+	struct work_struct nec_work;
+	struct dentry *debug_dir;
+	long unsigned int priv[0];
+};
+
+struct ohci_driver_overrides {
+	const char *product_desc;
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+};
+
+struct debug_buffer___2 {
+	ssize_t (*fill_func)(struct debug_buffer___2 *);
+	struct ohci_hcd *ohci;
+	struct mutex mutex;
+	size_t count;
+	char *page;
+};
+
+struct usb_ohci_pdata {
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int no_big_frame_no: 1;
+	unsigned int num_ports;
+	int (*power_on)(struct platform_device *);
+	void (*power_off)(struct platform_device *);
+	void (*power_suspend)(struct platform_device *);
+};
+
+struct ohci_platform_priv {
+	struct clk *clks[3];
+	struct reset_control *resets;
+};
+
+struct uhci_td;
+
+struct uhci_qh {
+	__le32 link;
+	__le32 element;
+	dma_addr_t dma_handle;
+	struct list_head node;
+	struct usb_host_endpoint *hep;
+	struct usb_device *udev;
+	struct list_head queue;
+	struct uhci_td *dummy_td;
+	struct uhci_td *post_td;
+	struct usb_iso_packet_descriptor *iso_packet_desc;
+	long unsigned int advance_jiffies;
+	unsigned int unlink_frame;
+	unsigned int period;
+	short int phase;
+	short int load;
+	unsigned int iso_frame;
+	int state;
+	int type;
+	int skel;
+	unsigned int initial_toggle: 1;
+	unsigned int needs_fixup: 1;
+	unsigned int is_stopped: 1;
+	unsigned int wait_expired: 1;
+	unsigned int bandwidth_reserved: 1;
+};
+
+struct uhci_td {
+	__le32 link;
+	__le32 status;
+	__le32 token;
+	__le32 buffer;
+	dma_addr_t dma_handle;
+	struct list_head list;
+	int frame;
+	struct list_head fl_list;
+};
+
+enum uhci_rh_state {
+	UHCI_RH_RESET = 0,
+	UHCI_RH_SUSPENDED = 1,
+	UHCI_RH_AUTO_STOPPED = 2,
+	UHCI_RH_RESUMING = 3,
+	UHCI_RH_SUSPENDING = 4,
+	UHCI_RH_RUNNING = 5,
+	UHCI_RH_RUNNING_NODEVS = 6,
+};
+
+struct uhci_hcd {
+	long unsigned int io_addr;
+	void *regs;
+	struct dma_pool___2 *qh_pool;
+	struct dma_pool___2 *td_pool;
+	struct uhci_td *term_td;
+	struct uhci_qh *skelqh[11];
+	struct uhci_qh *next_qh;
+	spinlock_t lock;
+	dma_addr_t frame_dma_handle;
+	__le32 *frame;
+	void **frame_cpu;
+	enum uhci_rh_state rh_state;
+	long unsigned int auto_stop_time;
+	unsigned int frame_number;
+	unsigned int is_stopped;
+	unsigned int last_iso_frame;
+	unsigned int cur_iso_frame;
+	unsigned int scan_in_progress: 1;
+	unsigned int need_rescan: 1;
+	unsigned int dead: 1;
+	unsigned int RD_enable: 1;
+	unsigned int is_initialized: 1;
+	unsigned int fsbr_is_on: 1;
+	unsigned int fsbr_is_wanted: 1;
+	unsigned int fsbr_expiring: 1;
+	struct timer_list fsbr_timer;
+	unsigned int oc_low: 1;
+	unsigned int wait_for_hp: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int is_aspeed: 1;
+	long unsigned int port_c_suspend;
+	long unsigned int resuming_ports;
+	long unsigned int ports_timeout;
+	struct list_head idle_qh_list;
+	int rh_numports;
+	wait_queue_head_t waitqh;
+	int num_waiting;
+	int total_load;
+	short int load[32];
+	struct clk *clk;
+	void (*reset_hc)(struct uhci_hcd *);
+	int (*check_and_reset_hc)(struct uhci_hcd *);
+	void (*configure_hc)(struct uhci_hcd *);
+	int (*resume_detect_interrupts_are_broken)(struct uhci_hcd *);
+	int (*global_suspend_mode_is_broken)(struct uhci_hcd *);
+};
+
+struct urb_priv___2 {
+	struct list_head node;
+	struct urb *urb;
+	struct uhci_qh *qh;
+	struct list_head td_list;
+	unsigned int fsbr: 1;
+};
+
+struct uhci_debug {
+	int size;
+	char *data;
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+union xhci_trb;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_ring;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+struct xhci_segment;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int err_count;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int num_trbs_free_temp;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_virt_device;
+
+struct xhci_hcd;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	long unsigned int flags;
+	u16 current_mel;
+	void *debugfs_private;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+	u32 irq_pending;
+	u32 irq_control;
+	u32 erst_size;
+	u64 erst_base;
+	u64 erst_dequeue;
+};
+
+struct xhci_bus_state {
+	long unsigned int bus_suspended;
+	long unsigned int next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	long unsigned int resume_done[31];
+	long unsigned int resuming_ports;
+	long unsigned int rexit_ports;
+	struct completion rexit_done[31];
+	struct completion u3exit_done[31];
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_device_context_array;
+
+struct xhci_scratchpad;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	struct xhci_intr_reg *ir_set;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u8 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	u32 isoc_bei_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_scratchpad *scratchpad;
+	struct list_head lpm_failed_devs;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool___2 *device_pool;
+	struct dma_pool___2 *segment_pool;
+	struct dma_pool___2 *small_streams_pool;
+	struct dma_pool___2 *medium_streams_pool;
+	unsigned int xhc_state;
+	u32 command;
+	struct s3_save s3;
+	long long unsigned int quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	long unsigned int priv[0];
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	unsigned int num_trbs;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct urb_priv___3 {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+};
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct xhci_dbc;
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	int slot_id;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	long long unsigned int out_ctx;
+	long long unsigned int in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	u32 __data_loc_str;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_log_doorbell {
+	u32 str;
+};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct usb_string_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wData[1];
+};
+
+struct dbc_info_context {
+	__le64 string0;
+	__le64 manufacturer;
+	__le64 product;
+	__le64 serial;
+	__le32 length;
+	__le32 __reserved_0[7];
+};
+
+enum evtreturn {
+	EVT_ERR = 4294967295,
+	EVT_DONE = 0,
+	EVT_GSER = 1,
+	EVT_DISC = 2,
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct dbc_port {
+	struct tty_port port;
+	spinlock_t port_lock;
+	int minor;
+	struct list_head read_pool;
+	struct list_head read_queue;
+	unsigned int n_read;
+	struct tasklet_struct push;
+	struct list_head write_pool;
+	struct kfifo write_fifo;
+	bool registered;
+};
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+struct usb_debug_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDebugInEndpoint;
+	__u8 bDebugOutEndpoint;
+};
+
+struct ehci_dev {
+	u32 bus;
+	u32 slot;
+	u32 func;
+};
+
+typedef void (*set_debug_port_t)(int);
+
+struct usb_hcd___2;
+
+struct xdbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct xdbc_trb {
+	__le32 field[4];
+};
+
+struct xdbc_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 __reserved_0;
+};
+
+struct xdbc_info_context {
+	__le64 string0;
+	__le64 manufacturer;
+	__le64 product;
+	__le64 serial;
+	__le32 length;
+	__le32 __reserved_0[7];
+};
+
+struct xdbc_ep_context {
+	__le32 ep_info1;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 __reserved_0[11];
+};
+
+struct xdbc_context {
+	struct xdbc_info_context info;
+	struct xdbc_ep_context out;
+	struct xdbc_ep_context in;
+};
+
+struct xdbc_strings {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+struct xdbc_segment {
+	struct xdbc_trb *trbs;
+	dma_addr_t dma;
+};
+
+struct xdbc_ring {
+	struct xdbc_segment *segment;
+	struct xdbc_trb *enqueue;
+	struct xdbc_trb *dequeue;
+	u32 cycle_state;
+};
+
+struct xdbc_state {
+	u16 vendor;
+	u16 device;
+	u32 bus;
+	u32 dev;
+	u32 func;
+	void *xhci_base;
+	u64 xhci_start;
+	size_t xhci_length;
+	int port_number;
+	struct xdbc_regs *xdbc_reg;
+	dma_addr_t table_dma;
+	void *table_base;
+	dma_addr_t erst_dma;
+	size_t erst_size;
+	void *erst_base;
+	struct xdbc_ring evt_ring;
+	struct xdbc_segment evt_seg;
+	dma_addr_t dbcc_dma;
+	size_t dbcc_size;
+	void *dbcc_base;
+	dma_addr_t string_dma;
+	size_t string_size;
+	void *string_base;
+	struct xdbc_ring out_ring;
+	struct xdbc_segment out_seg;
+	void *out_buf;
+	dma_addr_t out_dma;
+	struct xdbc_ring in_ring;
+	struct xdbc_segment in_seg;
+	void *in_buf;
+	dma_addr_t in_dma;
+	u32 flags;
+	raw_spinlock_t lock;
+};
+
+struct usb_role_switch {
+	struct device dev;
+	struct mutex lock;
+	enum usb_role role;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+};
+
 struct serio_device_id {
 	__u8 type;
 	__u8 extra;
@@ -89185,13 +110095,18 @@
 	struct list_head node;
 };
 
-struct amba_kmi_port {
-	struct serio *io;
-	struct clk *clk;
-	void *base;
-	unsigned int irq;
-	unsigned int divisor;
-	unsigned int open;
+enum i8042_controller_reset_mode {
+	I8042_RESET_NEVER = 0,
+	I8042_RESET_ALWAYS = 1,
+	I8042_RESET_ON_S2RAM = 2,
+};
+
+struct i8042_port {
+	struct serio *serio;
+	int irq;
+	bool exists;
+	bool driver_bound;
+	signed char mux;
 };
 
 struct ps2dev {
@@ -89288,6 +110203,19 @@
 	struct delayed_work work;
 };
 
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct vivaldi_data {
+	u32 function_row_physmap[24];
+	unsigned int num_function_row_keys;
+};
+
 struct mousedev_hw_data {
 	int dx;
 	int dy;
@@ -89358,6 +110286,42 @@
 	FRACTION_DENOM = 128,
 };
 
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct evdev_client;
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	long unsigned int *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
 struct atkbd {
 	struct ps2dev ps2dev;
 	struct input_dev *dev;
@@ -89385,88 +110349,141 @@
 	long unsigned int event_jiffies;
 	long unsigned int event_mask;
 	struct mutex mutex;
-	u32 function_row_physmap[24];
-	int num_function_row_keys;
+	struct vivaldi_data vdata;
 };
 
-struct touchscreen_properties {
-	unsigned int max_x;
-	unsigned int max_y;
-	bool invert_x;
-	bool invert_y;
-	bool swap_x_y;
+enum elants_chip_id {
+	EKTH3500 = 0,
+	EKTF3624 = 1,
 };
 
-struct xenkbd_motion {
-	uint8_t type;
-	int32_t rel_x;
-	int32_t rel_y;
-	int32_t rel_z;
+enum elants_state {
+	ELAN_STATE_NORMAL = 0,
+	ELAN_WAIT_QUEUE_HEADER = 1,
+	ELAN_WAIT_RECALIBRATION = 2,
 };
 
-struct xenkbd_key {
-	uint8_t type;
-	uint8_t pressed;
-	uint32_t keycode;
+enum elants_iap_mode {
+	ELAN_IAP_OPERATIONAL = 0,
+	ELAN_IAP_RECOVERY = 1,
 };
 
-struct xenkbd_position {
-	uint8_t type;
-	int32_t abs_x;
-	int32_t abs_y;
-	int32_t rel_z;
+struct elants_data {
+	struct i2c_client *client;
+	struct input_dev *input;
+	struct regulator *vcc33;
+	struct regulator *vccio;
+	struct gpio_desc *reset_gpio;
+	u16 fw_version;
+	u8 test_version;
+	u8 solution_version;
+	u8 bc_version;
+	u8 iap_version;
+	u16 hw_version;
+	u8 major_res;
+	unsigned int x_res;
+	unsigned int y_res;
+	unsigned int x_max;
+	unsigned int y_max;
+	unsigned int phy_x;
+	unsigned int phy_y;
+	struct touchscreen_properties prop;
+	enum elants_state state;
+	enum elants_chip_id chip_id;
+	enum elants_iap_mode iap_mode;
+	struct mutex sysfs_mutex;
+	u8 cmd_resp[4];
+	struct completion cmd_done;
+	bool wake_irq_enabled;
+	bool keep_power_in_suspend;
+	long: 48;
+	long: 64;
+	u8 buf[169];
+	long: 56;
+	long: 64;
+	long: 64;
 };
 
-struct xenkbd_mtouch {
-	uint8_t type;
-	uint8_t event_type;
-	uint8_t contact_id;
-	uint8_t reserved[5];
+struct elants_version_attribute {
+	struct device_attribute dattr;
+	size_t field_offset;
+	size_t field_size;
+};
+
+struct uinput_ff_upload {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect effect;
+	struct ff_effect old;
+};
+
+struct uinput_ff_erase {
+	__u32 request_id;
+	__s32 retval;
+	__u32 effect_id;
+};
+
+struct uinput_setup {
+	struct input_id id;
+	char name[80];
+	__u32 ff_effects_max;
+};
+
+struct uinput_abs_setup {
+	__u16 code;
+	struct input_absinfo absinfo;
+};
+
+struct uinput_user_dev {
+	char name[80];
+	struct input_id id;
+	__u32 ff_effects_max;
+	__s32 absmax[64];
+	__s32 absmin[64];
+	__s32 absfuzz[64];
+	__s32 absflat[64];
+};
+
+enum uinput_state {
+	UIST_NEW_DEVICE = 0,
+	UIST_SETUP_COMPLETE = 1,
+	UIST_CREATED = 2,
+};
+
+struct uinput_request {
+	unsigned int id;
+	unsigned int code;
+	int retval;
+	struct completion done;
 	union {
+		unsigned int effect_id;
 		struct {
-			int32_t abs_x;
-			int32_t abs_y;
-		} pos;
-		struct {
-			uint32_t major;
-			uint32_t minor;
-		} shape;
-		int16_t orientation;
+			struct ff_effect *effect;
+			struct ff_effect *old;
+		} upload;
 	} u;
 };
 
-union xenkbd_in_event {
-	uint8_t type;
-	struct xenkbd_motion motion;
-	struct xenkbd_key key;
-	struct xenkbd_position pos;
-	struct xenkbd_mtouch mtouch;
-	char pad[40];
+struct uinput_device {
+	struct input_dev *dev;
+	struct mutex mutex;
+	enum uinput_state state;
+	wait_queue_head_t waitq;
+	unsigned char ready;
+	unsigned char head;
+	unsigned char tail;
+	struct input_event buff[16];
+	unsigned int ff_effects_max;
+	struct uinput_request *requests[16];
+	wait_queue_head_t requests_waitq;
+	spinlock_t requests_lock;
 };
 
-struct xenkbd_page {
-	uint32_t in_cons;
-	uint32_t in_prod;
-	uint32_t out_cons;
-	uint32_t out_prod;
-};
-
-struct xenkbd_info {
-	struct input_dev *kbd;
-	struct input_dev *ptr;
-	struct input_dev *mtouch;
-	struct xenkbd_page *page;
-	int gref;
-	int irq;
-	struct xenbus_device *xbdev;
-	char phys[32];
-	int mtouch_cur_contact_id;
-};
-
-enum {
-	KPARAM_X = 0,
-	KPARAM_Y = 1,
-	KPARAM_CNT___2 = 2,
+struct uinput_ff_upload_compat {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect_compat effect;
+	struct ff_effect_compat old;
 };
 
 struct trace_event_raw_rtc_time_alarm_class {
@@ -89555,64 +110572,110 @@
 	year = 3,
 };
 
-struct pl031_vendor_data {
-	struct rtc_class_ops ops;
-	bool clockwatch;
-	bool st_weekday;
-	long unsigned int irqflags;
-	time64_t range_min;
-	timeu64_t range_max;
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
 };
 
-struct pl031_local {
-	struct pl031_vendor_data *vendor;
-	struct rtc_device *rtc;
-	void *base;
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t);
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
 };
 
-struct sun6i_rtc_clk_data {
-	long unsigned int rc_osc_rate;
-	unsigned int fixed_prescaler: 16;
-	unsigned int has_prescaler: 1;
-	unsigned int has_out_clk: 1;
-	unsigned int export_iosc: 1;
-	unsigned int has_losc_en: 1;
-	unsigned int has_auto_swt: 1;
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
 };
 
-struct sun6i_rtc_dev {
-	struct rtc_device *rtc;
-	const struct sun6i_rtc_clk_data *data;
-	void *base;
-	int irq;
-	long unsigned int alarm;
-	struct clk_hw hw;
-	struct clk_hw *int_osc;
-	struct clk *losc;
-	struct clk *ext_losc;
-	spinlock_t lock;
-};
-
-struct xgene_rtc_dev {
-	struct rtc_device *rtc;
-	void *csr_base;
-	struct clk *clk;
-	unsigned int irq_wake;
-	unsigned int irq_enabled;
-};
-
-struct i2c_board_info {
-	char type[20];
-	short unsigned int flags;
-	short unsigned int addr;
-	const char *dev_name;
-	void *platform_data;
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	struct gpio_desc *wp_gpio;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
 	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	const struct property_entry *properties;
-	const struct resource *resources;
-	unsigned int num_resources;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct nvmem_device;
+
+struct mc146818_get_time_callback_param {
+	struct rtc_time *time;
+	unsigned char ctrl;
+	unsigned char century;
+};
+
+struct cmos_rtc_board_info {
+	void (*wake_on)(struct device *);
+	void (*wake_off)(struct device *);
+	u32 flags;
+	int address_space;
+	u8 rtc_day_alarm;
+	u8 rtc_mon_alarm;
+	u8 rtc_century;
+};
+
+struct cmos_rtc {
+	struct rtc_device *rtc;
+	struct device *dev;
 	int irq;
+	struct resource *iomem;
+	time64_t alarm_expires;
+	void (*wake_on)(struct device *);
+	void (*wake_off)(struct device *);
+	u8 enabled_wake;
+	u8 suspend_ctrl;
+	u8 day_alrm;
+	u8 mon_alrm;
+	u8 century;
+	struct rtc_wkalrm saved_wkalrm;
+};
+
+struct cmos_read_alarm_callback_param {
+	struct cmos_rtc *cmos;
+	struct rtc_time *time;
+	unsigned char rtc_control;
+};
+
+struct cmos_set_alarm_callback_param {
+	struct cmos_rtc *cmos;
+	unsigned char mon;
+	unsigned char mday;
+	unsigned char hrs;
+	unsigned char min;
+	unsigned char sec;
+	struct rtc_wkalrm *t;
 };
 
 struct i2c_devinfo {
@@ -89621,37 +110684,12 @@
 	struct i2c_board_info board_info;
 };
 
-struct i2c_device_id {
-	char name[20];
-	kernel_ulong_t driver_data;
-};
-
 struct i2c_device_identity {
 	u16 manufacturer_id;
 	u16 part_id;
 	u8 die_revision;
 };
 
-enum i2c_alert_protocol {
-	I2C_PROTOCOL_SMBUS_ALERT = 0,
-	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
-};
-
-struct i2c_driver {
-	unsigned int class;
-	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-	int (*remove)(struct i2c_client *);
-	int (*probe_new)(struct i2c_client *);
-	void (*shutdown)(struct i2c_client *);
-	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
-	int (*command)(struct i2c_client *, unsigned int, void *);
-	struct device_driver driver;
-	const struct i2c_device_id *id_table;
-	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-	const short unsigned int *address_list;
-	struct list_head clients;
-};
-
 struct i2c_timings {
 	u32 bus_freq_hz;
 	u32 scl_rise_ns;
@@ -89723,10 +110761,6 @@
 
 typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
 
-struct i2c_dummy_devres {
-	struct i2c_client *client;
-};
-
 struct class_compat___2;
 
 struct i2c_cmd_arg {
@@ -89801,6 +110835,10 @@
 
 typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);
 
+enum i2c_driver_flags {
+	I2C_DRV_ACPI_WAIVE_D0_PROBE = 1,
+};
+
 struct i2c_acpi_handler_data {
 	struct acpi_connection_info info;
 	struct i2c_adapter *adapter;
@@ -89828,6 +110866,44 @@
 	u32 force_speed;
 };
 
+struct i2c_smbus_ioctl_data {
+	__u8 read_write;
+	__u8 command;
+	__u32 size;
+	union i2c_smbus_data *data;
+};
+
+struct i2c_rdwr_ioctl_data {
+	struct i2c_msg *msgs;
+	__u32 nmsgs;
+};
+
+struct i2c_dev {
+	struct list_head list;
+	struct i2c_adapter *adap;
+	struct device dev;
+	struct cdev cdev;
+};
+
+struct i2c_smbus_ioctl_data32 {
+	u8 read_write;
+	u8 command;
+	u32 size;
+	compat_caddr_t data;
+};
+
+struct i2c_msg32 {
+	u16 addr;
+	u16 flags;
+	u16 len;
+	compat_caddr_t buf;
+};
+
+struct i2c_rdwr_ioctl_data32 {
+	compat_caddr_t msgs;
+	u32 nmsgs;
+};
+
 struct dw_i2c_dev {
 	struct device *dev;
 	struct regmap *map;
@@ -89873,6 +110949,7 @@
 	u16 hs_lcnt;
 	int (*acquire_lock)();
 	void (*release_lock)();
+	int semaphore_idx;
 	bool shared_with_punit;
 	void (*disable)(struct dw_i2c_dev *);
 	void (*disable_int)(struct dw_i2c_dev *);
@@ -89880,57 +110957,11 @@
 	int (*set_sda_hold_time)(struct dw_i2c_dev *);
 	int mode;
 	struct i2c_bus_recovery_info rinfo;
-	bool suspended;
 };
 
-struct dw_i2c_platform_data {
-	unsigned int i2c_scl_freq;
-};
-
-struct bsc_regs {
-	u32 chip_address;
-	u32 data_in[8];
-	u32 cnt_reg;
-	u32 ctl_reg;
-	u32 iic_enable;
-	u32 data_out[8];
-	u32 ctlhi_reg;
-	u32 scl_param;
-};
-
-struct bsc_clk_param {
-	u32 hz;
-	u32 scl_mask;
-	u32 div_mask;
-};
-
-enum bsc_xfer_cmd {
-	CMD_WR = 0,
-	CMD_RD = 1,
-	CMD_WR_NOACK = 2,
-	CMD_RD_NOACK = 3,
-};
-
-enum bus_speeds {
-	SPD_375K = 0,
-	SPD_390K = 1,
-	SPD_187K = 2,
-	SPD_200K = 3,
-	SPD_93K = 4,
-	SPD_97K = 5,
-	SPD_46K = 6,
-	SPD_50K = 7,
-};
-
-struct brcmstb_i2c_dev {
-	struct device *device;
-	void *base;
-	int irq;
-	struct bsc_regs *bsc_regmap;
-	struct i2c_adapter adapter;
-	struct completion done;
-	u32 clk_freq_hz;
-	int data_regsz;
+struct i2c_dw_semaphore_callbacks {
+	int (*probe)(struct dw_i2c_dev *);
+	void (*remove)(struct dw_i2c_dev *);
 };
 
 struct pps_ktime {
@@ -90017,6 +111048,47 @@
 	struct timespec64 ts_real;
 };
 
+struct ptp_clock_time {
+	__s64 sec;
+	__u32 nsec;
+	__u32 reserved;
+};
+
+struct ptp_extts_request {
+	unsigned int index;
+	unsigned int flags;
+	unsigned int rsv[2];
+};
+
+struct ptp_perout_request {
+	union {
+		struct ptp_clock_time start;
+		struct ptp_clock_time phase;
+	};
+	struct ptp_clock_time period;
+	unsigned int index;
+	unsigned int flags;
+	union {
+		struct ptp_clock_time on;
+		unsigned int rsv[4];
+	};
+};
+
+enum ptp_pin_function {
+	PTP_PF_NONE = 0,
+	PTP_PF_EXTTS = 1,
+	PTP_PF_PEROUT = 2,
+	PTP_PF_PHYSYNC = 3,
+};
+
+struct ptp_pin_desc {
+	char name[64];
+	unsigned int index;
+	unsigned int func;
+	unsigned int chan;
+	unsigned int rsv[5];
+};
+
 struct ptp_extts_event {
 	struct ptp_clock_time t;
 	unsigned int index;
@@ -90024,6 +111096,44 @@
 	unsigned int rsv[2];
 };
 
+struct ptp_clock_request {
+	enum {
+		PTP_CLK_REQ_EXTTS = 0,
+		PTP_CLK_REQ_PEROUT = 1,
+		PTP_CLK_REQ_PPS = 2,
+	} type;
+	union {
+		struct ptp_extts_request extts;
+		struct ptp_perout_request perout;
+	};
+};
+
+struct ptp_clock_info {
+	struct module *owner;
+	char name[32];
+	s32 max_adj;
+	int n_alarm;
+	int n_ext_ts;
+	int n_per_out;
+	int n_pins;
+	int pps;
+	struct ptp_pin_desc *pin_config;
+	int (*adjfine)(struct ptp_clock_info *, long int);
+	int (*adjfreq)(struct ptp_clock_info *, s32);
+	int (*adjphase)(struct ptp_clock_info *, s32);
+	int (*adjtime)(struct ptp_clock_info *, s64);
+	int (*gettime64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*settime64)(struct ptp_clock_info *, const struct timespec64 *);
+	int (*getcycles64)(struct ptp_clock_info *, struct timespec64 *);
+	int (*getcyclesx64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);
+	int (*getcrosscycles)(struct ptp_clock_info *, struct system_device_crosststamp *);
+	int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);
+	int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);
+	long int (*do_aux_work)(struct ptp_clock_info *);
+};
+
 enum ptp_clock_events {
 	PTP_CLOCK_ALARM = 0,
 	PTP_CLOCK_EXTTS = 1,
@@ -90047,7 +111157,7 @@
 	spinlock_t lock;
 };
 
-struct ptp_clock___2 {
+struct ptp_clock {
 	struct posix_clock clock;
 	struct device dev;
 	struct ptp_clock_info *info;
@@ -90066,6 +111176,22 @@
 	const struct attribute_group *pin_attr_groups[2];
 	struct kthread_worker *kworker;
 	struct kthread_delayed_work aux_work;
+	unsigned int max_vclocks;
+	unsigned int n_vclocks;
+	int *vclock_index;
+	struct mutex n_vclocks_mux;
+	bool is_virtual_clock;
+	bool has_cycles;
+};
+
+struct ptp_vclock {
+	struct ptp_clock *pclock;
+	struct ptp_clock_info info;
+	struct ptp_clock *clock;
+	struct hlist_node vclock_hash_node;
+	struct cyclecounter cc;
+	struct timecounter tc;
+	spinlock_t lock;
 };
 
 struct ptp_clock_caps {
@@ -90099,289 +111225,32 @@
 	unsigned int rsv[4];
 };
 
-struct gpio_restart {
-	struct gpio_desc *reset_gpio;
-	struct notifier_block restart_handler;
-	u32 active_delay_ms;
-	u32 inactive_delay_ms;
-	u32 wait_delay_ms;
-};
-
-enum vexpress_reset_func {
-	FUNC_RESET = 0,
-	FUNC_SHUTDOWN = 1,
-	FUNC_REBOOT = 2,
-};
-
-struct xgene_reboot_context {
+struct mt6397_chip {
 	struct device *dev;
-	void *csr;
-	u32 mask;
-	struct notifier_block restart_handler;
+	struct regmap *regmap;
+	struct notifier_block pm_nb;
+	int irq;
+	struct irq_domain *irq_domain;
+	struct mutex irqlock;
+	u16 wake_mask[2];
+	u16 irq_masks_cur[2];
+	u16 irq_masks_cache[2];
+	u16 int_con[2];
+	u16 int_status[2];
+	u16 chip_id;
+	void *irq_data;
 };
 
-struct syscon_reboot_context {
-	struct regmap *map;
-	u32 offset;
-	u32 value;
-	u32 mask;
-	struct notifier_block restart_handler;
-};
-
-struct reboot_mode_driver {
+struct mt6323_pwrc {
 	struct device *dev;
-	struct list_head head;
-	int (*write)(struct reboot_mode_driver *, unsigned int);
-	struct notifier_block reboot_notifier;
-};
-
-struct mode_info {
-	const char *mode;
-	u32 magic;
-	struct list_head list;
-};
-
-struct syscon_reboot_mode {
-	struct regmap *map;
-	struct reboot_mode_driver reboot;
-	u32 offset;
-	u32 mask;
-};
-
-enum power_supply_property {
-	POWER_SUPPLY_PROP_STATUS = 0,
-	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
-	POWER_SUPPLY_PROP_HEALTH = 2,
-	POWER_SUPPLY_PROP_PRESENT = 3,
-	POWER_SUPPLY_PROP_ONLINE = 4,
-	POWER_SUPPLY_PROP_AUTHENTIC = 5,
-	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
-	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
-	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
-	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
-	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
-	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
-	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
-	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
-	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
-	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
-	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
-	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
-	POWER_SUPPLY_PROP_POWER_NOW = 20,
-	POWER_SUPPLY_PROP_POWER_AVG = 21,
-	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
-	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
-	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
-	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
-	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
-	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
-	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
-	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
-	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,
-	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,
-	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,
-	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,
-	POWER_SUPPLY_PROP_ENERGY_FULL = 42,
-	POWER_SUPPLY_PROP_ENERGY_EMPTY = 43,
-	POWER_SUPPLY_PROP_ENERGY_NOW = 44,
-	POWER_SUPPLY_PROP_ENERGY_AVG = 45,
-	POWER_SUPPLY_PROP_CAPACITY = 46,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,
-	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,
-	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 49,
-	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 50,
-	POWER_SUPPLY_PROP_TEMP = 51,
-	POWER_SUPPLY_PROP_TEMP_MAX = 52,
-	POWER_SUPPLY_PROP_TEMP_MIN = 53,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 54,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 55,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT = 56,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 57,
-	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 58,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 59,
-	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 60,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 61,
-	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 62,
-	POWER_SUPPLY_PROP_TYPE = 63,
-	POWER_SUPPLY_PROP_USB_TYPE = 64,
-	POWER_SUPPLY_PROP_SCOPE = 65,
-	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 66,
-	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 67,
-	POWER_SUPPLY_PROP_CALIBRATE = 68,
-	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 69,
-	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 70,
-	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 71,
-	POWER_SUPPLY_PROP_MODEL_NAME = 72,
-	POWER_SUPPLY_PROP_MANUFACTURER = 73,
-	POWER_SUPPLY_PROP_SERIAL_NUMBER = 74,
-};
-
-enum power_supply_type {
-	POWER_SUPPLY_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_TYPE_BATTERY = 1,
-	POWER_SUPPLY_TYPE_UPS = 2,
-	POWER_SUPPLY_TYPE_MAINS = 3,
-	POWER_SUPPLY_TYPE_USB = 4,
-	POWER_SUPPLY_TYPE_USB_DCP = 5,
-	POWER_SUPPLY_TYPE_USB_CDP = 6,
-	POWER_SUPPLY_TYPE_USB_ACA = 7,
-	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
-	POWER_SUPPLY_TYPE_USB_PD = 9,
-	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
-	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
-	POWER_SUPPLY_TYPE_WIRELESS = 12,
-};
-
-enum power_supply_usb_type {
-	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
-	POWER_SUPPLY_USB_TYPE_SDP = 1,
-	POWER_SUPPLY_USB_TYPE_DCP = 2,
-	POWER_SUPPLY_USB_TYPE_CDP = 3,
-	POWER_SUPPLY_USB_TYPE_ACA = 4,
-	POWER_SUPPLY_USB_TYPE_C = 5,
-	POWER_SUPPLY_USB_TYPE_PD = 6,
-	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
-	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
-	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+	struct regmap *regmap;
+	u32 base;
 };
 
 enum power_supply_notifier_events {
 	PSY_EVENT_PROP_CHANGED = 0,
 };
 
-union power_supply_propval {
-	int intval;
-	const char *strval;
-};
-
-struct power_supply_config {
-	struct device_node *of_node;
-	struct fwnode_handle *fwnode;
-	void *drv_data;
-	const struct attribute_group **attr_grp;
-	char **supplied_to;
-	size_t num_supplicants;
-};
-
-struct power_supply;
-
-struct power_supply_desc {
-	const char *name;
-	enum power_supply_type type;
-	const enum power_supply_usb_type *usb_types;
-	size_t num_usb_types;
-	const enum power_supply_property *properties;
-	size_t num_properties;
-	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
-	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
-	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
-	void (*external_power_changed)(struct power_supply *);
-	void (*set_charged)(struct power_supply *);
-	bool no_thermal;
-	int use_for_apm;
-};
-
-struct thermal_zone_device;
-
-struct power_supply {
-	const struct power_supply_desc *desc;
-	char **supplied_to;
-	size_t num_supplicants;
-	char **supplied_from;
-	size_t num_supplies;
-	struct device_node *of_node;
-	void *drv_data;
-	struct device dev;
-	struct work_struct changed_work;
-	struct delayed_work deferred_register_work;
-	spinlock_t changed_lock;
-	bool changed;
-	bool initialized;
-	bool removing;
-	atomic_t use_cnt;
-	struct thermal_zone_device *tzd;
-	struct thermal_cooling_device *tcd;
-	struct led_trigger *charging_full_trig;
-	char *charging_full_trig_name;
-	struct led_trigger *charging_trig;
-	char *charging_trig_name;
-	struct led_trigger *full_trig;
-	char *full_trig_name;
-	struct led_trigger *online_trig;
-	char *online_trig_name;
-	struct led_trigger *charging_blink_full_solid_trig;
-	char *charging_blink_full_solid_trig_name;
-};
-
-enum thermal_device_mode {
-	THERMAL_DEVICE_DISABLED = 0,
-	THERMAL_DEVICE_ENABLED = 1,
-};
-
-enum thermal_notify_event {
-	THERMAL_EVENT_UNSPECIFIED = 0,
-	THERMAL_EVENT_TEMP_SAMPLE = 1,
-	THERMAL_TRIP_VIOLATED = 2,
-	THERMAL_TRIP_CHANGED = 3,
-	THERMAL_DEVICE_DOWN = 4,
-	THERMAL_DEVICE_UP = 5,
-	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
-	THERMAL_TABLE_CHANGED = 7,
-	THERMAL_EVENT_KEEP_ALIVE = 8,
-};
-
-struct thermal_attr;
-
-struct thermal_zone_device_ops;
-
-struct thermal_zone_params;
-
-struct thermal_governor;
-
-struct thermal_zone_device {
-	int id;
-	char type[20];
-	struct device device;
-	struct attribute_group trips_attribute_group;
-	struct thermal_attr *trip_temp_attrs;
-	struct thermal_attr *trip_type_attrs;
-	struct thermal_attr *trip_hyst_attrs;
-	enum thermal_device_mode mode;
-	void *devdata;
-	int trips;
-	long unsigned int trips_disabled;
-	int passive_delay;
-	int polling_delay;
-	int temperature;
-	int last_temperature;
-	int emul_temperature;
-	int passive;
-	int prev_low_trip;
-	int prev_high_trip;
-	unsigned int forced_passive;
-	atomic_t need_update;
-	struct thermal_zone_device_ops *ops;
-	struct thermal_zone_params *tzp;
-	struct thermal_governor *governor;
-	void *governor_data;
-	struct list_head thermal_instances;
-	struct ida ida;
-	struct mutex lock;
-	struct list_head node;
-	struct delayed_work poll_queue;
-	enum thermal_notify_event notify_event;
-};
-
 struct power_supply_battery_ocv_table {
 	int ocv;
 	int capacity;
@@ -90392,7 +111261,19 @@
 	int resistance;
 };
 
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
 struct power_supply_battery_info {
+	unsigned int technology;
 	int energy_full_design_uwh;
 	int charge_full_design_uah;
 	int voltage_min_design_uv;
@@ -90405,7 +111286,14 @@
 	int overvoltage_limit_uv;
 	int constant_charge_current_max_ua;
 	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
 	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
 	int ocv_temp[20];
 	int temp_ambient_alert_min;
 	int temp_ambient_alert_max;
@@ -90417,71 +111305,12 @@
 	int ocv_table_size[20];
 	struct power_supply_resistance_temp_table *resist_table;
 	int resist_table_size;
-};
-
-enum thermal_trip_type {
-	THERMAL_TRIP_ACTIVE = 0,
-	THERMAL_TRIP_PASSIVE = 1,
-	THERMAL_TRIP_HOT = 2,
-	THERMAL_TRIP_CRITICAL = 3,
-};
-
-enum thermal_trend {
-	THERMAL_TREND_STABLE = 0,
-	THERMAL_TREND_RAISING = 1,
-	THERMAL_TREND_DROPPING = 2,
-	THERMAL_TREND_RAISE_FULL = 3,
-	THERMAL_TREND_DROP_FULL = 4,
-};
-
-struct thermal_zone_device_ops {
-	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
-	int (*get_temp)(struct thermal_zone_device *, int *);
-	int (*set_trips)(struct thermal_zone_device *, int, int);
-	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
-	int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);
-	int (*get_trip_temp)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
-	int (*get_trip_hyst)(struct thermal_zone_device *, int, int *);
-	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
-	int (*get_crit_temp)(struct thermal_zone_device *, int *);
-	int (*set_emul_temp)(struct thermal_zone_device *, int);
-	int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);
-	int (*notify)(struct thermal_zone_device *, int, enum thermal_trip_type);
-};
-
-struct thermal_bind_params;
-
-struct thermal_zone_params {
-	char governor_name[20];
-	bool no_hwmon;
-	int num_tbps;
-	struct thermal_bind_params *tbp;
-	u32 sustainable_power;
-	s32 k_po;
-	s32 k_pu;
-	s32 k_i;
-	s32 k_d;
-	s32 integral_cutoff;
-	int slope;
-	int offset;
-};
-
-struct thermal_governor {
-	char name[20];
-	int (*bind_to_tz)(struct thermal_zone_device *);
-	void (*unbind_from_tz)(struct thermal_zone_device *);
-	int (*throttle)(struct thermal_zone_device *, int);
-	struct list_head governor_list;
-};
-
-struct thermal_bind_params {
-	struct thermal_cooling_device *cdev;
-	int weight;
-	int trip_mask;
-	long unsigned int *binding_limits;
-	int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
 };
 
 struct psy_am_i_supplied_data {
@@ -90489,12 +111318,10 @@
 	unsigned int count;
 };
 
-enum {
-	POWER_SUPPLY_STATUS_UNKNOWN = 0,
-	POWER_SUPPLY_STATUS_CHARGING = 1,
-	POWER_SUPPLY_STATUS_DISCHARGING = 2,
-	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
-	POWER_SUPPLY_STATUS_FULL = 4,
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
 };
 
 enum {
@@ -90506,6 +111333,7 @@
 	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
 	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
 	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
 };
 
 enum {
@@ -90523,25 +111351,7 @@
 	POWER_SUPPLY_HEALTH_WARM = 11,
 	POWER_SUPPLY_HEALTH_COOL = 12,
 	POWER_SUPPLY_HEALTH_HOT = 13,
-};
-
-enum {
-	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
-	POWER_SUPPLY_TECHNOLOGY_LION = 2,
-	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
-	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
-	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
-	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
-};
-
-enum {
-	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
-	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
-	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
-	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
-	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+	POWER_SUPPLY_HEALTH_NO_BATTERY = 14,
 };
 
 enum {
@@ -90550,6 +111360,12 @@
 	POWER_SUPPLY_SCOPE_DEVICE = 2,
 };
 
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
 struct power_supply_attr {
 	const char *prop_name;
 	char attr_name[31];
@@ -90558,18 +111374,117 @@
 	int text_values_len;
 };
 
-enum data_source {
-	CM_BATTERY_PRESENT = 0,
-	CM_NO_BATTERY = 1,
-	CM_FUEL_GAUGE = 2,
-	CM_CHARGER_STAT = 3,
+enum hwmon_sensor_types {
+	hwmon_chip = 0,
+	hwmon_temp = 1,
+	hwmon_in = 2,
+	hwmon_curr = 3,
+	hwmon_power = 4,
+	hwmon_energy = 5,
+	hwmon_humidity = 6,
+	hwmon_fan = 7,
+	hwmon_pwm = 8,
+	hwmon_intrusion = 9,
+	hwmon_max = 10,
 };
 
-enum polling_modes {
-	CM_POLL_DISABLE = 0,
-	CM_POLL_ALWAYS = 1,
-	CM_POLL_EXTERNAL_POWER_ONLY = 2,
-	CM_POLL_CHARGING_ONLY = 3,
+enum hwmon_temp_attributes {
+	hwmon_temp_enable = 0,
+	hwmon_temp_input = 1,
+	hwmon_temp_type = 2,
+	hwmon_temp_lcrit = 3,
+	hwmon_temp_lcrit_hyst = 4,
+	hwmon_temp_min = 5,
+	hwmon_temp_min_hyst = 6,
+	hwmon_temp_max = 7,
+	hwmon_temp_max_hyst = 8,
+	hwmon_temp_crit = 9,
+	hwmon_temp_crit_hyst = 10,
+	hwmon_temp_emergency = 11,
+	hwmon_temp_emergency_hyst = 12,
+	hwmon_temp_alarm = 13,
+	hwmon_temp_lcrit_alarm = 14,
+	hwmon_temp_min_alarm = 15,
+	hwmon_temp_max_alarm = 16,
+	hwmon_temp_crit_alarm = 17,
+	hwmon_temp_emergency_alarm = 18,
+	hwmon_temp_fault = 19,
+	hwmon_temp_offset = 20,
+	hwmon_temp_label = 21,
+	hwmon_temp_lowest = 22,
+	hwmon_temp_highest = 23,
+	hwmon_temp_reset_history = 24,
+	hwmon_temp_rated_min = 25,
+	hwmon_temp_rated_max = 26,
+};
+
+enum hwmon_in_attributes {
+	hwmon_in_enable = 0,
+	hwmon_in_input = 1,
+	hwmon_in_min = 2,
+	hwmon_in_max = 3,
+	hwmon_in_lcrit = 4,
+	hwmon_in_crit = 5,
+	hwmon_in_average = 6,
+	hwmon_in_lowest = 7,
+	hwmon_in_highest = 8,
+	hwmon_in_reset_history = 9,
+	hwmon_in_label = 10,
+	hwmon_in_alarm = 11,
+	hwmon_in_min_alarm = 12,
+	hwmon_in_max_alarm = 13,
+	hwmon_in_lcrit_alarm = 14,
+	hwmon_in_crit_alarm = 15,
+	hwmon_in_rated_min = 16,
+	hwmon_in_rated_max = 17,
+};
+
+enum hwmon_curr_attributes {
+	hwmon_curr_enable = 0,
+	hwmon_curr_input = 1,
+	hwmon_curr_min = 2,
+	hwmon_curr_max = 3,
+	hwmon_curr_lcrit = 4,
+	hwmon_curr_crit = 5,
+	hwmon_curr_average = 6,
+	hwmon_curr_lowest = 7,
+	hwmon_curr_highest = 8,
+	hwmon_curr_reset_history = 9,
+	hwmon_curr_label = 10,
+	hwmon_curr_alarm = 11,
+	hwmon_curr_min_alarm = 12,
+	hwmon_curr_max_alarm = 13,
+	hwmon_curr_lcrit_alarm = 14,
+	hwmon_curr_crit_alarm = 15,
+	hwmon_curr_rated_min = 16,
+	hwmon_curr_rated_max = 17,
+};
+
+struct hwmon_ops {
+	umode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);
+	int (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);
+	int (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);
+	int (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);
+};
+
+struct hwmon_channel_info {
+	enum hwmon_sensor_types type;
+	const u32 *config;
+};
+
+struct hwmon_chip_info {
+	const struct hwmon_ops *ops;
+	const struct hwmon_channel_info **info;
+};
+
+struct power_supply_hwmon {
+	struct power_supply *psy;
+	long unsigned int *props;
+};
+
+struct hwmon_type_attr_list {
+	const u32 *attrs;
+	size_t n_attrs;
 };
 
 enum cm_batt_temp {
@@ -90578,76 +111493,151 @@
 	CM_BATT_COLD = 2,
 };
 
-struct charger_regulator;
+enum hwmon_chip_attributes {
+	hwmon_chip_temp_reset_history = 0,
+	hwmon_chip_in_reset_history = 1,
+	hwmon_chip_curr_reset_history = 2,
+	hwmon_chip_power_reset_history = 3,
+	hwmon_chip_register_tz = 4,
+	hwmon_chip_update_interval = 5,
+	hwmon_chip_alarms = 6,
+	hwmon_chip_samples = 7,
+	hwmon_chip_curr_samples = 8,
+	hwmon_chip_in_samples = 9,
+	hwmon_chip_power_samples = 10,
+	hwmon_chip_temp_samples = 11,
+};
 
-struct charger_manager;
+enum hwmon_power_attributes {
+	hwmon_power_enable = 0,
+	hwmon_power_average = 1,
+	hwmon_power_average_interval = 2,
+	hwmon_power_average_interval_max = 3,
+	hwmon_power_average_interval_min = 4,
+	hwmon_power_average_highest = 5,
+	hwmon_power_average_lowest = 6,
+	hwmon_power_average_max = 7,
+	hwmon_power_average_min = 8,
+	hwmon_power_input = 9,
+	hwmon_power_input_highest = 10,
+	hwmon_power_input_lowest = 11,
+	hwmon_power_reset_history = 12,
+	hwmon_power_accuracy = 13,
+	hwmon_power_cap = 14,
+	hwmon_power_cap_hyst = 15,
+	hwmon_power_cap_max = 16,
+	hwmon_power_cap_min = 17,
+	hwmon_power_min = 18,
+	hwmon_power_max = 19,
+	hwmon_power_crit = 20,
+	hwmon_power_lcrit = 21,
+	hwmon_power_label = 22,
+	hwmon_power_alarm = 23,
+	hwmon_power_cap_alarm = 24,
+	hwmon_power_min_alarm = 25,
+	hwmon_power_max_alarm = 26,
+	hwmon_power_lcrit_alarm = 27,
+	hwmon_power_crit_alarm = 28,
+	hwmon_power_rated_min = 29,
+	hwmon_power_rated_max = 30,
+};
 
-struct charger_cable {
-	const char *extcon_name;
+enum hwmon_energy_attributes {
+	hwmon_energy_enable = 0,
+	hwmon_energy_input = 1,
+	hwmon_energy_label = 2,
+};
+
+enum hwmon_humidity_attributes {
+	hwmon_humidity_enable = 0,
+	hwmon_humidity_input = 1,
+	hwmon_humidity_label = 2,
+	hwmon_humidity_min = 3,
+	hwmon_humidity_min_hyst = 4,
+	hwmon_humidity_max = 5,
+	hwmon_humidity_max_hyst = 6,
+	hwmon_humidity_alarm = 7,
+	hwmon_humidity_fault = 8,
+	hwmon_humidity_rated_min = 9,
+	hwmon_humidity_rated_max = 10,
+};
+
+enum hwmon_fan_attributes {
+	hwmon_fan_enable = 0,
+	hwmon_fan_input = 1,
+	hwmon_fan_label = 2,
+	hwmon_fan_min = 3,
+	hwmon_fan_max = 4,
+	hwmon_fan_div = 5,
+	hwmon_fan_pulses = 6,
+	hwmon_fan_target = 7,
+	hwmon_fan_alarm = 8,
+	hwmon_fan_min_alarm = 9,
+	hwmon_fan_max_alarm = 10,
+	hwmon_fan_fault = 11,
+};
+
+enum hwmon_pwm_attributes {
+	hwmon_pwm_input = 0,
+	hwmon_pwm_enable = 1,
+	hwmon_pwm_mode = 2,
+	hwmon_pwm_freq = 3,
+	hwmon_pwm_auto_channels_temp = 4,
+};
+
+enum hwmon_intrusion_attributes {
+	hwmon_intrusion_alarm = 0,
+	hwmon_intrusion_beep = 1,
+};
+
+struct trace_event_raw_hwmon_attr_class {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	long int val;
+	char __data[0];
+};
+
+struct trace_event_raw_hwmon_attr_show_string {
+	struct trace_entry ent;
+	int index;
+	u32 __data_loc_attr_name;
+	u32 __data_loc_label;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_hwmon_attr_class {
+	u32 attr_name;
+};
+
+struct trace_event_data_offsets_hwmon_attr_show_string {
+	u32 attr_name;
+	u32 label;
+};
+
+typedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);
+
+typedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);
+
+struct hwmon_device {
 	const char *name;
-	struct extcon_dev *extcon_dev;
-	u64 extcon_type;
-	struct work_struct wq;
-	struct notifier_block nb;
-	bool attached;
-	struct charger_regulator *charger;
-	int min_uA;
-	int max_uA;
-	struct charger_manager *cm;
+	const char *label;
+	struct device dev;
+	const struct hwmon_chip_info *chip;
+	struct list_head tzdata;
+	struct attribute_group group;
+	const struct attribute_group **groups;
 };
 
-struct charger_regulator {
-	const char *regulator_name;
-	struct regulator *consumer;
-	int externally_control;
-	struct charger_cable *cables;
-	int num_cables;
-	struct attribute_group attr_grp;
-	struct device_attribute attr_name;
-	struct device_attribute attr_state;
-	struct device_attribute attr_externally_control;
-	struct attribute *attrs[4];
-	struct charger_manager *cm;
-};
-
-struct charger_desc;
-
-struct charger_manager {
-	struct list_head entry;
-	struct device *dev;
-	struct charger_desc *desc;
-	struct thermal_zone_device *tzd_batt;
-	bool charger_enabled;
-	int emergency_stop;
-	char psy_name_buf[31];
-	struct power_supply_desc charger_psy_desc;
-	struct power_supply *charger_psy;
-	u64 charging_start_time;
-	u64 charging_end_time;
-	int battery_status;
-};
-
-struct charger_desc {
-	const char *psy_name;
-	enum polling_modes polling_mode;
-	unsigned int polling_interval_ms;
-	unsigned int fullbatt_vchkdrop_uV;
-	unsigned int fullbatt_uV;
-	unsigned int fullbatt_soc;
-	unsigned int fullbatt_full_capacity;
-	enum data_source battery_present;
-	const char **psy_charger_stat;
-	int num_charger_regulators;
-	struct charger_regulator *charger_regulators;
-	const struct attribute_group **sysfs_groups;
-	const char *psy_fuel_gauge;
-	const char *thermal_zone;
-	int temp_min;
-	int temp_max;
-	int temp_diff;
-	bool measure_battery_temp;
-	u32 charging_max_duration_ms;
-	u32 discharging_max_duration_ms;
+struct hwmon_device_attribute {
+	struct device_attribute dev_attr;
+	const struct hwmon_ops *ops;
+	enum hwmon_sensor_types type;
+	u32 attr;
+	int index;
+	char name[32];
 };
 
 struct thermal_attr {
@@ -90687,32 +111677,12 @@
 	char __data[0];
 };
 
-struct trace_event_raw_thermal_power_cpu_get_power {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	long unsigned int freq;
-	u32 __data_loc_load;
-	size_t load_len;
-	u32 dynamic_power;
-	char __data[0];
-};
-
-struct trace_event_raw_thermal_power_cpu_limit {
-	struct trace_entry ent;
-	u32 __data_loc_cpumask;
-	unsigned int freq;
-	long unsigned int cdev_state;
-	u32 power;
-	char __data[0];
-};
-
 struct trace_event_raw_thermal_power_devfreq_get_power {
 	struct trace_entry ent;
 	u32 __data_loc_type;
 	long unsigned int freq;
-	u32 load;
-	u32 dynamic_power;
-	u32 static_power;
+	u32 busy_time;
+	u32 total_time;
 	u32 power;
 	char __data[0];
 };
@@ -90738,15 +111708,6 @@
 	u32 thermal_zone;
 };
 
-struct trace_event_data_offsets_thermal_power_cpu_get_power {
-	u32 cpumask;
-	u32 load;
-};
-
-struct trace_event_data_offsets_thermal_power_cpu_limit {
-	u32 cpumask;
-};
-
 struct trace_event_data_offsets_thermal_power_devfreq_get_power {
 	u32 type;
 };
@@ -90761,11 +111722,7 @@
 
 typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
 
-typedef void (*btf_trace_thermal_power_cpu_get_power)(void *, const struct cpumask *, long unsigned int, u32 *, size_t, u32);
-
-typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, long unsigned int, u32);
-
-typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, long unsigned int, u32, u32, u32);
+typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, long unsigned int, u32);
 
 typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, long unsigned int, long unsigned int, u32);
 
@@ -90788,6 +111745,16 @@
 	unsigned int weight;
 };
 
+struct cooling_dev_stats {
+	spinlock_t lock;
+	unsigned int total_trans;
+	long unsigned int state;
+	long unsigned int max_states;
+	ktime_t last_time;
+	ktime_t *time_in_state;
+	unsigned int *trans_table;
+};
+
 struct genl_dumpit_info {
 	const struct genl_family *family;
 	struct genl_ops op;
@@ -90815,7 +111782,11 @@
 	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
 	THERMAL_GENL_ATTR_CDEV_NAME = 18,
 	THERMAL_GENL_ATTR_GOV_NAME = 19,
-	__THERMAL_GENL_ATTR_MAX = 20,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY = 20,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_ID = 21,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_PERFORMANCE = 22,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_EFFICIENCY = 23,
+	__THERMAL_GENL_ATTR_MAX = 24,
 };
 
 enum thermal_genl_sampling {
@@ -90838,7 +111809,8 @@
 	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
 	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
 	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
-	__THERMAL_GENL_EVENT_MAX = 14,
+	THERMAL_GENL_EVENT_CPU_CAPABILITY_CHANGE = 14,
+	__THERMAL_GENL_EVENT_MAX = 15,
 };
 
 enum thermal_genl_cmd {
@@ -90852,6 +111824,12 @@
 	__THERMAL_GENL_CMD_MAX = 7,
 };
 
+struct thermal_genl_cpu_caps {
+	int cpu;
+	int performance;
+	int efficiency;
+};
+
 struct param {
 	struct nlattr **attrs;
 	struct sk_buff *msg;
@@ -90865,66 +111843,77 @@
 	int temp;
 	int cdev_state;
 	int cdev_max_state;
+	struct thermal_genl_cpu_caps *cpu_capabilities;
+	int cpu_capabilities_count;
 };
 
 typedef int (*cb_t)(struct param *);
 
-struct thermal_zone_of_device_ops {
-	int (*get_temp)(void *, int *);
-	int (*get_trend)(void *, int, enum thermal_trend *);
-	int (*set_trips)(void *, int, int);
-	int (*set_emul_temp)(void *, int);
-	int (*set_trip_temp)(void *, int, int);
-};
-
-struct thermal_trip {
-	struct device_node *np;
-	int temperature;
-	int hysteresis;
-	enum thermal_trip_type type;
-};
-
-struct __thermal_cooling_bind_param {
-	struct device_node *cooling_device;
-	long unsigned int min;
-	long unsigned int max;
-};
-
-struct __thermal_bind_params {
-	struct __thermal_cooling_bind_param *tcbp;
-	unsigned int count;
-	unsigned int trip_id;
-	unsigned int usage;
-};
-
-struct __thermal_zone {
-	int passive_delay;
-	int polling_delay;
-	int slope;
-	int offset;
-	int ntrips;
-	struct thermal_trip *trips;
-	int num_tbps;
-	struct __thermal_bind_params *tbps;
-	void *sensor_data;
-	const struct thermal_zone_of_device_ops *ops;
-};
-
-struct time_in_idle {
-	u64 time;
-	u64 timestamp;
-};
-
-struct cpufreq_cooling_device {
-	int id;
-	u32 last_load;
-	unsigned int cpufreq_state;
-	unsigned int max_level;
-	struct em_perf_domain *em;
-	struct cpufreq_policy *policy;
+struct thermal_hwmon_device {
+	char type[20];
+	struct device *device;
+	int count;
+	struct list_head tz_list;
 	struct list_head node;
-	struct time_in_idle *idle_time;
-	struct freq_qos_request qos_req;
+};
+
+struct thermal_hwmon_attr {
+	struct device_attribute attr;
+	char name[16];
+};
+
+struct thermal_hwmon_temp {
+	struct list_head hwmon_node;
+	struct thermal_zone_device *tz;
+	struct thermal_hwmon_attr temp_input;
+	struct thermal_hwmon_attr temp_crit;
+};
+
+struct trace_event_raw_thermal_power_allocator {
+	struct trace_entry ent;
+	int tz_id;
+	u32 __data_loc_req_power;
+	u32 total_req_power;
+	u32 __data_loc_granted_power;
+	u32 total_granted_power;
+	size_t num_actors;
+	u32 power_range;
+	u32 max_allocatable_power;
+	int current_temp;
+	s32 delta_temp;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_allocator_pid {
+	struct trace_entry ent;
+	int tz_id;
+	s32 err;
+	s32 err_integral;
+	s64 p;
+	s64 i;
+	s64 d;
+	s32 output;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_power_allocator {
+	u32 req_power;
+	u32 granted_power;
+};
+
+struct trace_event_data_offsets_thermal_power_allocator_pid {};
+
+typedef void (*btf_trace_thermal_power_allocator)(void *, struct thermal_zone_device *, u32 *, u32, u32 *, u32, size_t, u32, u32, int, s32);
+
+typedef void (*btf_trace_thermal_power_allocator_pid)(void *, struct thermal_zone_device *, s32, s32, s64, s64, s64, s32);
+
+struct power_allocator_params {
+	bool allocated_tzp;
+	s64 err_integral;
+	s32 prev_err;
+	int trip_switch_on;
+	int trip_max_desired_temperature;
+	u32 sustainable_power;
 };
 
 enum devfreq_timer {
@@ -90937,6 +111926,7 @@
 	long unsigned int initial_freq;
 	unsigned int polling_ms;
 	enum devfreq_timer timer;
+	bool is_cooling_device;
 	int (*target)(struct device *, long unsigned int *, u32);
 	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
 	int (*get_cur_freq)(struct device *, long unsigned int *);
@@ -90960,7 +111950,7 @@
 	struct device dev;
 	struct devfreq_dev_profile *profile;
 	const struct devfreq_governor *governor;
-	char governor_name[16];
+	struct opp_table *opp_table;
 	struct notifier_block nb;
 	struct delayed_work work;
 	long unsigned int previous_freq;
@@ -90976,6 +111966,7 @@
 	atomic_t suspend_count;
 	struct devfreq_stats stats;
 	struct srcu_notifier_head transition_notifier_list;
+	struct thermal_cooling_device *cdev;
 	struct notifier_block nb_min;
 	struct notifier_block nb_max;
 };
@@ -90983,54 +111974,56 @@
 struct devfreq_governor {
 	struct list_head node;
 	const char name[16];
-	const unsigned int immutable;
-	const unsigned int interrupt_driven;
+	const u64 attrs;
+	const u64 flags;
 	int (*get_target_freq)(struct devfreq *, long unsigned int *);
 	int (*event_handler)(struct devfreq *, unsigned int, void *);
 };
 
 struct devfreq_cooling_power {
-	long unsigned int (*get_static_power)(struct devfreq *, long unsigned int);
-	long unsigned int (*get_dynamic_power)(struct devfreq *, long unsigned int, long unsigned int);
 	int (*get_real_power)(struct devfreq *, u32 *, long unsigned int, long unsigned int);
-	long unsigned int dyn_power_coeff;
 };
 
 struct devfreq_cooling_device {
-	int id;
 	struct thermal_cooling_device *cdev;
 	struct devfreq *devfreq;
 	long unsigned int cooling_state;
-	u32 *power_table;
 	u32 *freq_table;
-	size_t freq_table_size;
+	size_t max_state;
 	struct devfreq_cooling_power *power_ops;
 	u32 res_util;
 	int capped_state;
 	struct dev_pm_qos_request req_max_freq;
+	struct em_perf_domain *em_pd;
 };
 
-struct amlogic_thermal_soc_calib_data {
-	int A;
-	int B;
-	int m;
-	int n;
+struct _thermal_state {
+	u64 next_check;
+	u64 last_interrupt_time;
+	struct delayed_work therm_work;
+	long unsigned int count;
+	long unsigned int last_count;
+	long unsigned int max_time_ms;
+	long unsigned int total_time_ms;
+	bool rate_control_active;
+	bool new_event;
+	u8 level;
+	u8 sample_index;
+	u8 sample_count;
+	u8 average;
+	u8 baseline_temp;
+	u8 temp_samples[3];
 };
 
-struct amlogic_thermal_data {
-	int u_efuse_off;
-	const struct amlogic_thermal_soc_calib_data *calibration_parameters;
-	const struct regmap_config *regmap_config;
-};
-
-struct amlogic_thermal {
-	struct platform_device *pdev;
-	const struct amlogic_thermal_data *data;
-	struct regmap *regmap;
-	struct regmap *sec_ao_map;
-	struct clk *clk;
-	struct thermal_zone_device *tzd;
-	u32 trim_info;
+struct thermal_state {
+	struct _thermal_state core_throttle;
+	struct _thermal_state core_power_limit;
+	struct _thermal_state package_throttle;
+	struct _thermal_state package_power_limit;
+	struct _thermal_state core_thresh0;
+	struct _thermal_state core_thresh1;
+	struct _thermal_state pkg_thresh0;
+	struct _thermal_state pkg_thresh1;
 };
 
 struct watchdog_info {
@@ -91074,6 +112067,7 @@
 	unsigned int max_hw_heartbeat_ms;
 	struct notifier_block reboot_nb;
 	struct notifier_block restart_nb;
+	struct notifier_block pm_nb;
 	void *driver_data;
 	struct watchdog_core_data *wd_data;
 	long unsigned int status;
@@ -91098,6 +112092,16 @@
 	long unsigned int status;
 };
 
+struct watchdog_pretimeout {
+	struct watchdog_device *wdd;
+	struct list_head entry;
+};
+
+struct governor_priv {
+	struct watchdog_governor *gov;
+	struct list_head entry;
+};
+
 struct mdp_device_descriptor_s {
 	__u32 number;
 	__u32 major;
@@ -91392,14 +112396,14 @@
 	} bitmap_info;
 	atomic_t max_corr_read_errors;
 	struct list_head all_mddevs;
-	struct attribute_group *to_remove;
+	const struct attribute_group *to_remove;
 	struct bio_set bio_set;
 	struct bio_set sync_set;
-	mempool_t md_io_pool;
+	struct bio_set io_acct_set;
 	struct bio *flush_bio;
 	atomic_t flush_pending;
 	ktime_t start_flush;
-	ktime_t last_flush;
+	ktime_t prev_flush_start;
 	struct work_struct flush_work;
 	struct work_struct event_work;
 	mempool_t *serial_info_pool;
@@ -91606,6 +112610,12 @@
 	ssize_t (*store)(struct mddev *, const char *, size_t);
 };
 
+struct md_io_acct {
+	struct bio *orig_bio;
+	long unsigned int start_time;
+	struct bio bio_clone;
+};
+
 struct bitmap_page {
 	char *map;
 	unsigned int hijacked: 1;
@@ -91613,14 +112623,6 @@
 	unsigned int count: 30;
 };
 
-struct md_io {
-	struct mddev *mddev;
-	bio_end_io_t *orig_bi_end_io;
-	void *orig_bi_private;
-	long unsigned int start_time;
-	struct hd_struct *part;
-};
-
 struct super_type {
 	char *name;
 	struct module *owner;
@@ -91697,11 +112699,692 @@
 	char *device_names;
 };
 
+struct dm_ioctl {
+	__u32 version[3];
+	__u32 data_size;
+	__u32 data_start;
+	__u32 target_count;
+	__s32 open_count;
+	__u32 flags;
+	__u32 event_nr;
+	__u32 padding;
+	__u64 dev;
+	char name[128];
+	char uuid[129];
+	char data[7];
+};
+
+struct dm_target_spec {
+	__u64 sector_start;
+	__u64 length;
+	__s32 status;
+	__u32 next;
+	char target_type[16];
+};
+
+struct dm_device {
+	struct dm_ioctl dmi;
+	struct dm_target_spec *table[256];
+	char *target_args_array[256];
+	struct list_head list;
+};
+
+typedef enum {
+	STATUSTYPE_INFO = 0,
+	STATUSTYPE_TABLE = 1,
+	STATUSTYPE_IMA = 2,
+} status_type_t;
+
+union map_info___2 {
+	void *ptr;
+};
+
+struct dm_target;
+
+typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
+
+struct dm_table;
+
+struct target_type;
+
+struct dm_target {
+	struct dm_table *table;
+	struct target_type *type;
+	sector_t begin;
+	sector_t len;
+	uint32_t max_io_len;
+	unsigned int num_flush_bios;
+	unsigned int num_discard_bios;
+	unsigned int num_secure_erase_bios;
+	unsigned int num_write_zeroes_bios;
+	unsigned int per_io_data_size;
+	void *private;
+	char *error;
+	bool flush_supported: 1;
+	bool discards_supported: 1;
+	bool limit_swap_bios: 1;
+	bool emulate_zone_append: 1;
+	bool accounts_remapped_io: 1;
+};
+
+typedef void (*dm_dtr_fn)(struct dm_target *);
+
+typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
+
+typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info___2 *, struct request **);
+
+typedef void (*dm_release_clone_request_fn)(struct request *, union map_info___2 *);
+
+typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
+
+typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info___2 *);
+
+typedef void (*dm_presuspend_fn)(struct dm_target *);
+
+typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
+
+typedef void (*dm_postsuspend_fn)(struct dm_target *);
+
+typedef int (*dm_preresume_fn)(struct dm_target *);
+
+typedef void (*dm_resume_fn)(struct dm_target *);
+
+typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
+
+typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
+
+typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
+
+struct dm_report_zones_args;
+
+typedef int (*dm_report_zones_fn)(struct dm_target *, struct dm_report_zones_args *, unsigned int);
+
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+	sector_t start;
+};
+
+struct dm_dev;
+
+typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
+
+struct dm_dev {
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	fmode_t mode;
+	char name[16];
+};
+
+typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
+
+typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
+
+typedef int (*dm_busy_fn)(struct dm_target *);
+
+typedef long int (*dm_dax_direct_access_fn)(struct dm_target *, long unsigned int, long int, enum dax_access_mode, void **, pfn_t *);
+
+typedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, long unsigned int, size_t);
+
+typedef size_t (*dm_dax_recovery_write_fn)(struct dm_target *, long unsigned int, void *, size_t, struct iov_iter *);
+
+struct target_type {
+	uint64_t features;
+	const char *name;
+	struct module *module;
+	unsigned int version[3];
+	dm_ctr_fn ctr;
+	dm_dtr_fn dtr;
+	dm_map_fn map;
+	dm_clone_and_map_request_fn clone_and_map_rq;
+	dm_release_clone_request_fn release_clone_rq;
+	dm_endio_fn end_io;
+	dm_request_endio_fn rq_end_io;
+	dm_presuspend_fn presuspend;
+	dm_presuspend_undo_fn presuspend_undo;
+	dm_postsuspend_fn postsuspend;
+	dm_preresume_fn preresume;
+	dm_resume_fn resume;
+	dm_status_fn status;
+	dm_message_fn message;
+	dm_prepare_ioctl_fn prepare_ioctl;
+	dm_report_zones_fn report_zones;
+	dm_busy_fn busy;
+	dm_iterate_devices_fn iterate_devices;
+	dm_io_hints_fn io_hints;
+	dm_dax_direct_access_fn direct_access;
+	dm_dax_zero_page_range_fn dax_zero_page_range;
+	dm_dax_recovery_write_fn dax_recovery_write;
+	struct list_head list;
+};
+
+enum dm_uevent_type {
+	DM_UEVENT_PATH_FAILED = 0,
+	DM_UEVENT_PATH_REINSTATED = 1,
+};
+
+struct mapped_device;
+
+struct dm_uevent {
+	struct mapped_device *md;
+	enum kobject_action action;
+	struct kobj_uevent_env ku_env;
+	struct list_head elist;
+	char name[128];
+	char uuid[129];
+};
+
+typedef u16 blk_short_t;
+
+enum dm_queue_mode {
+	DM_TYPE_NONE = 0,
+	DM_TYPE_BIO_BASED = 1,
+	DM_TYPE_REQUEST_BASED = 2,
+	DM_TYPE_DAX_BIO_BASED = 3,
+};
+
+struct mapped_device___2;
+
+struct dm_md_mempools;
+
+struct dm_table {
+	struct mapped_device___2 *md;
+	enum dm_queue_mode type;
+	unsigned int depth;
+	unsigned int counts[16];
+	sector_t *index[16];
+	unsigned int num_targets;
+	unsigned int num_allocated;
+	sector_t *highs;
+	struct dm_target *targets;
+	struct target_type *immutable_target_type;
+	bool integrity_supported: 1;
+	bool singleton: 1;
+	unsigned int integrity_added: 1;
+	fmode_t mode;
+	struct list_head devices;
+	void (*event_fn)(void *);
+	void *event_context;
+	struct dm_md_mempools *mempools;
+	struct blk_crypto_profile *crypto_profile;
+};
+
+struct dm_stats_last_position;
+
+struct dm_stats {
+	struct mutex mutex;
+	struct list_head list;
+	struct dm_stats_last_position *last;
+	bool precise_timestamps;
+};
+
+struct dm_stats_aux {
+	bool merged;
+	long long unsigned int duration_ns;
+};
+
+struct dm_ima_device_table_metadata {
+	char *device_metadata;
+	unsigned int device_metadata_len;
+	unsigned int num_targets;
+	char *hash;
+	unsigned int hash_len;
+};
+
+struct dm_ima_measurements {
+	struct dm_ima_device_table_metadata active_table;
+	struct dm_ima_device_table_metadata inactive_table;
+	unsigned int dm_version_str_len;
+};
+
 struct dm_kobject_holder {
 	struct kobject kobj;
 	struct completion completion;
 };
 
+struct dm_md_mempools {
+	struct bio_set bs;
+	struct bio_set io_bs;
+};
+
+struct mapped_device___2 {
+	struct mutex suspend_lock;
+	struct mutex table_devices_lock;
+	struct list_head table_devices;
+	void *map;
+	long unsigned int flags;
+	struct mutex type_lock;
+	enum dm_queue_mode type;
+	int numa_node_id;
+	struct request_queue *queue;
+	atomic_t holders;
+	atomic_t open_count;
+	struct dm_target *immutable_target;
+	struct target_type *immutable_target_type;
+	char name[16];
+	struct gendisk *disk;
+	struct dax_device *dax_dev;
+	wait_queue_head_t wait;
+	long unsigned int *pending_io;
+	struct hd_geometry geometry;
+	struct workqueue_struct *wq;
+	struct work_struct work;
+	spinlock_t deferred_lock;
+	struct bio_list deferred;
+	void *interface_ptr;
+	wait_queue_head_t eventq;
+	atomic_t event_nr;
+	atomic_t uevent_seq;
+	struct list_head uevent_list;
+	spinlock_t uevent_lock;
+	bool init_tio_pdu: 1;
+	struct blk_mq_tag_set *tag_set;
+	struct dm_stats stats;
+	unsigned int internal_suspend_count;
+	int swap_bios;
+	struct semaphore swap_bios_semaphore;
+	struct mutex swap_bios_lock;
+	struct dm_md_mempools *mempools;
+	struct dm_kobject_holder kobj_holder;
+	struct srcu_struct io_barrier;
+	unsigned int nr_zones;
+	unsigned int *zwp_offset;
+	struct dm_ima_measurements ima;
+};
+
+struct dm_io;
+
+struct dm_target_io {
+	short unsigned int magic;
+	blk_short_t flags;
+	unsigned int target_bio_nr;
+	struct dm_io *io;
+	struct dm_target *ti;
+	unsigned int *len_ptr;
+	sector_t old_sector;
+	struct bio clone;
+};
+
+struct dm_io {
+	short unsigned int magic;
+	blk_short_t flags;
+	spinlock_t lock;
+	long unsigned int start_time;
+	void *data;
+	struct dm_io *next;
+	struct dm_stats_aux stats_aux;
+	blk_status_t status;
+	atomic_t io_count;
+	struct mapped_device___2 *md;
+	struct bio *orig_bio;
+	unsigned int sector_offset;
+	unsigned int sectors;
+	struct dm_target_io tio;
+};
+
+struct orig_bio_details {
+	unsigned int op;
+	unsigned int nr_sectors;
+};
+
+enum {
+	DM_TIO_INSIDE_DM_IO = 0,
+	DM_TIO_IS_DUPLICATE_BIO = 1,
+};
+
+enum {
+	DM_IO_ACCOUNTED = 0,
+	DM_IO_WAS_SPLIT = 1,
+};
+
+struct clone_info {
+	struct dm_table *map;
+	struct bio *bio;
+	struct dm_io *io;
+	sector_t sector;
+	unsigned int sector_count;
+	bool is_abnormal_io: 1;
+	bool submit_as_polled: 1;
+};
+
+struct table_device {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev dm_dev;
+};
+
+struct dm_pr {
+	u64 old_key;
+	u64 new_key;
+	u32 flags;
+	bool fail_early;
+};
+
+struct dm_arg_set {
+	unsigned int argc;
+	char **argv;
+};
+
+struct dm_arg {
+	unsigned int min;
+	unsigned int max;
+	char *error;
+};
+
+struct dm_dev_internal {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev *dm_dev;
+};
+
+struct dm_crypto_profile {
+	struct blk_crypto_profile profile;
+	struct mapped_device___2 *md;
+};
+
+struct dm_keyslot_evict_args {
+	const struct blk_crypto_key *key;
+	int err;
+};
+
+enum suspend_mode {
+	PRESUSPEND = 0,
+	PRESUSPEND_UNDO = 1,
+	POSTSUSPEND = 2,
+};
+
+struct linear_c {
+	struct dm_dev *dev;
+	sector_t start;
+};
+
+struct stripe {
+	struct dm_dev *dev;
+	sector_t physical_start;
+	atomic_t error_count;
+};
+
+struct stripe_c {
+	uint32_t stripes;
+	int stripes_shift;
+	sector_t stripe_width;
+	uint32_t chunk_size;
+	int chunk_size_shift;
+	struct dm_target *ti;
+	struct work_struct trigger_event;
+	struct stripe stripe[0];
+};
+
+struct dm_target_deps {
+	__u32 count;
+	__u32 padding;
+	__u64 dev[0];
+};
+
+struct dm_name_list {
+	__u64 dev;
+	__u32 next;
+	char name[0];
+};
+
+struct dm_target_versions {
+	__u32 next;
+	__u32 version[3];
+	char name[0];
+};
+
+struct dm_target_msg {
+	__u64 sector;
+	char message[0];
+};
+
+enum {
+	DM_VERSION_CMD = 0,
+	DM_REMOVE_ALL_CMD = 1,
+	DM_LIST_DEVICES_CMD = 2,
+	DM_DEV_CREATE_CMD = 3,
+	DM_DEV_REMOVE_CMD = 4,
+	DM_DEV_RENAME_CMD = 5,
+	DM_DEV_SUSPEND_CMD = 6,
+	DM_DEV_STATUS_CMD = 7,
+	DM_DEV_WAIT_CMD = 8,
+	DM_TABLE_LOAD_CMD = 9,
+	DM_TABLE_CLEAR_CMD = 10,
+	DM_TABLE_DEPS_CMD = 11,
+	DM_TABLE_STATUS_CMD = 12,
+	DM_LIST_VERSIONS_CMD = 13,
+	DM_TARGET_MSG_CMD = 14,
+	DM_DEV_SET_GEOMETRY_CMD = 15,
+	DM_DEV_ARM_POLL_CMD = 16,
+	DM_GET_TARGET_VERSION_CMD = 17,
+};
+
+struct dm_file {
+	volatile unsigned int global_event_nr;
+};
+
+struct hash_cell {
+	struct rb_node name_node;
+	struct rb_node uuid_node;
+	bool name_set;
+	bool uuid_set;
+	char *name;
+	char *uuid;
+	struct mapped_device___2 *md;
+	struct dm_table *new_map;
+};
+
+struct vers_iter {
+	size_t param_size;
+	struct dm_target_versions *vers;
+	struct dm_target_versions *old_vers;
+	char *end;
+	uint32_t flags;
+};
+
+typedef int (*ioctl_fn)(struct file *, struct dm_ioctl *, size_t);
+
+struct dm_io_region {
+	struct block_device *bdev;
+	sector_t sector;
+	sector_t count;
+};
+
+struct page_list {
+	struct page_list *next;
+	struct page *page;
+};
+
+typedef void (*io_notify_fn)(long unsigned int, void *);
+
+enum dm_io_mem_type {
+	DM_IO_PAGE_LIST = 0,
+	DM_IO_BIO = 1,
+	DM_IO_VMA = 2,
+	DM_IO_KMEM = 3,
+};
+
+struct dm_io_memory {
+	enum dm_io_mem_type type;
+	unsigned int offset;
+	union {
+		struct page_list *pl;
+		struct bio *bio;
+		void *vma;
+		void *addr;
+	} ptr;
+};
+
+struct dm_io_notify {
+	io_notify_fn fn;
+	void *context;
+};
+
+struct dm_io_client;
+
+struct dm_io_request {
+	int bi_op;
+	int bi_op_flags;
+	struct dm_io_memory mem;
+	struct dm_io_notify notify;
+	struct dm_io_client *client;
+};
+
+struct dm_io_client {
+	mempool_t pool;
+	struct bio_set bios;
+};
+
+struct io {
+	long unsigned int error_bits;
+	atomic_t count;
+	struct dm_io_client *client;
+	io_notify_fn callback;
+	void *context;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+	long: 64;
+};
+
+struct dpages {
+	void (*get_page)(struct dpages *, struct page **, long unsigned int *, unsigned int *);
+	void (*next_page)(struct dpages *);
+	union {
+		unsigned int context_u;
+		struct bvec_iter context_bi;
+	};
+	void *context_ptr;
+	void *vma_invalidate_address;
+	long unsigned int vma_invalidate_size;
+};
+
+struct sync_io {
+	long unsigned int error_bits;
+	struct completion wait;
+};
+
+struct dm_kcopyd_throttle {
+	unsigned int throttle;
+	unsigned int num_io_jobs;
+	unsigned int io_period;
+	unsigned int total_period;
+	unsigned int last_jiffies;
+};
+
+typedef void (*dm_kcopyd_notify_fn)(int, long unsigned int, void *);
+
+struct dm_kcopyd_client {
+	struct page_list *pages;
+	unsigned int nr_reserved_pages;
+	unsigned int nr_free_pages;
+	unsigned int sub_job_size;
+	struct dm_io_client *io_client;
+	wait_queue_head_t destroyq;
+	mempool_t job_pool;
+	struct workqueue_struct *kcopyd_wq;
+	struct work_struct kcopyd_work;
+	struct dm_kcopyd_throttle *throttle;
+	atomic_t nr_jobs;
+	spinlock_t job_lock;
+	struct list_head callback_jobs;
+	struct list_head complete_jobs;
+	struct list_head io_jobs;
+	struct list_head pages_jobs;
+};
+
+struct kcopyd_job {
+	struct dm_kcopyd_client *kc;
+	struct list_head list;
+	unsigned int flags;
+	int read_err;
+	long unsigned int write_err;
+	int rw;
+	struct dm_io_region source;
+	unsigned int num_dests;
+	struct dm_io_region dests[8];
+	struct page_list *pages;
+	dm_kcopyd_notify_fn fn;
+	void *context;
+	struct mutex lock;
+	atomic_t sub_jobs;
+	sector_t progress;
+	sector_t write_offset;
+	struct kcopyd_job *master_job;
+};
+
+struct dm_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct mapped_device___2 *, char *);
+	ssize_t (*store)(struct mapped_device___2 *, const char *, size_t);
+};
+
+struct dm_stats_last_position {
+	sector_t last_sector;
+	unsigned int last_rw;
+};
+
+struct dm_stat_percpu {
+	long long unsigned int sectors[2];
+	long long unsigned int ios[2];
+	long long unsigned int merges[2];
+	long long unsigned int ticks[2];
+	long long unsigned int io_ticks[2];
+	long long unsigned int io_ticks_total;
+	long long unsigned int time_in_queue;
+	long long unsigned int *histogram;
+};
+
+struct dm_stat_shared {
+	atomic_t in_flight[2];
+	long long unsigned int stamp;
+	struct dm_stat_percpu tmp;
+};
+
+struct dm_stat {
+	struct list_head list_entry;
+	int id;
+	unsigned int stat_flags;
+	size_t n_entries;
+	sector_t start;
+	sector_t end;
+	sector_t step;
+	unsigned int n_histogram_entries;
+	long long unsigned int *histogram_boundaries;
+	const char *program_id;
+	const char *aux_data;
+	struct callback_head callback_head;
+	size_t shared_alloc_size;
+	size_t percpu_alloc_size;
+	size_t histogram_alloc_size;
+	struct dm_stat_percpu *stat_percpu[8192];
+	struct dm_stat_shared stat_shared[0];
+};
+
+struct dm_rq_target_io;
+
+struct dm_rq_clone_bio_info {
+	struct bio *orig;
+	struct dm_rq_target_io *tio;
+	struct bio clone;
+};
+
+struct dm_rq_target_io {
+	struct mapped_device___2 *md;
+	struct dm_target *ti;
+	struct request *orig;
+	struct request *clone;
+	struct kthread_work work;
+	blk_status_t error;
+	union map_info___2 info;
+	struct dm_stats_aux stats_aux;
+	long unsigned int duration_jiffies;
+	unsigned int n_sectors;
+	unsigned int completed;
+};
+
 enum dev_type {
 	DEV_UNKNOWN = 0,
 	DEV_X1 = 1,
@@ -91740,10 +113423,17 @@
 	MEM_DDR3 = 15,
 	MEM_RDDR3 = 16,
 	MEM_LRDDR3 = 17,
-	MEM_DDR4 = 18,
-	MEM_RDDR4 = 19,
-	MEM_LRDDR4 = 20,
-	MEM_NVDIMM = 21,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
 };
 
 enum edac_type {
@@ -91905,6 +113595,10 @@
 
 struct edac_device_instance;
 
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
 struct edac_device_ctl_info {
 	struct list_head link;
 	struct module *owner;
@@ -91929,12 +113623,12 @@
 	char name[32];
 	u32 nr_instances;
 	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
 	struct edac_device_counter counters;
 	struct kobject kobj;
 };
 
-struct edac_device_block;
-
 struct edac_dev_sysfs_block_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct kobject *, struct attribute *, char *);
@@ -91961,11 +113655,6 @@
 	struct kobject kobj;
 };
 
-struct dev_ch_attribute {
-	struct device_attribute attr;
-	unsigned int channel;
-};
-
 struct ctl_info_attribute {
 	struct attribute attr;
 	ssize_t (*show)(struct edac_device_ctl_info *, char *);
@@ -92021,6 +113710,98 @@
 
 typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
 
+struct cper_mem_err_compact {
+	u64 validation_bits;
+	u16 node;
+	u16 card;
+	u16 module;
+	u16 bank;
+	u16 device;
+	u16 row;
+	u16 column;
+	u16 bit_pos;
+	u64 requestor_id;
+	u64 responder_id;
+	u64 target_id;
+	u16 rank;
+	u16 mem_array_handle;
+	u16 mem_dev_handle;
+	u8 extended;
+} __attribute__((packed));
+
+struct ghes_pvt {
+	struct mem_ctl_info *mci;
+	char other_detail[400];
+	char msg[80];
+};
+
+struct ghes_hw_desc {
+	int num_dimms;
+	struct dimm_info *dimms;
+};
+
+struct memdev_dmi_entry {
+	u8 type;
+	u8 length;
+	u16 handle;
+	u16 phys_mem_array_handle;
+	u16 mem_err_info_handle;
+	u16 total_width;
+	u16 data_width;
+	u16 size;
+	u8 form_factor;
+	u8 device_set;
+	u8 device_locator;
+	u8 bank_locator;
+	u8 memory_type;
+	u16 type_detail;
+	u16 speed;
+	u8 manufacturer;
+	u8 serial_number;
+	u8 asset_tag;
+	u8 part_number;
+	u8 attributes;
+	u32 extended_size;
+	u16 conf_mem_clk_speed;
+} __attribute__((packed));
+
+struct eisa_device_id {
+	char sig[8];
+	kernel_ulong_t driver_data;
+};
+
+struct eisa_device {
+	struct eisa_device_id id;
+	int slot;
+	int state;
+	long unsigned int base_addr;
+	struct resource res[4];
+	u64 dma_mask;
+	struct device dev;
+	char pretty_name[50];
+};
+
+struct eisa_driver {
+	const struct eisa_device_id *id_table;
+	struct device_driver driver;
+};
+
+struct eisa_root_device {
+	struct device *dev;
+	struct resource *res;
+	long unsigned int bus_base_addr;
+	int slots;
+	int force_probe;
+	u64 dma_mask;
+	int bus_nr;
+	struct resource eisa_root_res;
+};
+
+struct eisa_device_info {
+	struct eisa_device_id id;
+	char name[50];
+};
+
 enum opp_table_access {
 	OPP_TABLE_ACCESS_UNKNOWN = 0,
 	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
@@ -92033,8 +113814,11 @@
 
 struct dev_pm_set_opp_data;
 
+struct dev_pm_opp_supply;
+
 struct opp_table___2 {
 	struct list_head node;
+	struct list_head lazy;
 	struct blocking_notifier_head head;
 	struct list_head dev_list;
 	struct list_head opp_list;
@@ -92045,6 +113829,8 @@
 	unsigned int voltage_tolerance_v1;
 	unsigned int parsed_static_opps;
 	enum opp_table_access shared_opp;
+	long unsigned int current_rate;
+	struct dev_pm_opp___2 *current_opp;
 	struct dev_pm_opp___2 *suspend_opp;
 	struct mutex genpd_virt_dev_lock;
 	struct device **genpd_virt_devs;
@@ -92062,13 +113848,12 @@
 	bool genpd_performance_state;
 	bool is_genpd;
 	int (*set_opp)(struct dev_pm_set_opp_data *);
+	struct dev_pm_opp_supply *sod_supplies;
 	struct dev_pm_set_opp_data *set_opp_data;
 	struct dentry *dentry;
 	char dentry_name[255];
 };
 
-struct dev_pm_opp_supply;
-
 struct dev_pm_opp_icc_bw;
 
 struct dev_pm_opp___2 {
@@ -92078,6 +113863,7 @@
 	bool dynamic;
 	bool turbo;
 	bool suspend;
+	bool removed;
 	unsigned int pstate;
 	long unsigned int rate;
 	unsigned int level;
@@ -92088,6 +113874,7 @@
 	struct opp_table___2 *opp_table;
 	struct device_node *np;
 	struct dentry *dentry;
+	const char *of_name;
 };
 
 enum dev_pm_opp_event {
@@ -92103,6 +113890,7 @@
 	long unsigned int u_volt_min;
 	long unsigned int u_volt_max;
 	long unsigned int u_amp;
+	long unsigned int u_watt;
 };
 
 struct dev_pm_opp_icc_bw {
@@ -92138,13 +113926,6 @@
 	unsigned int max;
 };
 
-struct cpufreq_freqs {
-	struct cpufreq_policy *policy;
-	unsigned int old;
-	unsigned int new;
-	u8 flags;
-};
-
 struct freq_attr {
 	struct attribute attr;
 	ssize_t (*show)(struct cpufreq_policy *, char *);
@@ -92161,7 +113942,7 @@
 	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
 	int (*target_index)(struct cpufreq_policy *, unsigned int);
 	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
-	unsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);
+	void (*adjust_perf)(unsigned int, long unsigned int, long unsigned int, long unsigned int);
 	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
 	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
 	unsigned int (*get)(unsigned int);
@@ -92170,13 +113951,13 @@
 	int (*online)(struct cpufreq_policy *);
 	int (*offline)(struct cpufreq_policy *);
 	int (*exit)(struct cpufreq_policy *);
-	void (*stop_cpu)(struct cpufreq_policy *);
 	int (*suspend)(struct cpufreq_policy *);
 	int (*resume)(struct cpufreq_policy *);
 	void (*ready)(struct cpufreq_policy *);
 	struct freq_attr **attr;
 	bool boost_enabled;
 	int (*set_boost)(struct cpufreq_policy *, int);
+	void (*register_em)(struct cpufreq_policy *);
 };
 
 struct cpufreq_stats {
@@ -92192,8 +113973,16 @@
 	long long unsigned int reset_time;
 };
 
+enum {
+	OD_NORMAL_SAMPLE = 0,
+	OD_SUB_SAMPLE = 1,
+};
+
+struct dbs_governor;
+
 struct dbs_data {
 	struct gov_attr_set attr_set;
+	struct dbs_governor *gov;
 	void *tuners;
 	unsigned int ignore_nice_load;
 	unsigned int sampling_rate;
@@ -92202,6 +113991,20 @@
 	unsigned int io_is_busy;
 };
 
+struct policy_dbs_info;
+
+struct dbs_governor {
+	struct cpufreq_governor gov;
+	struct kobj_type kobj_type;
+	struct dbs_data *gdbs_data;
+	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
+	struct policy_dbs_info * (*alloc)();
+	void (*free)(struct policy_dbs_info *);
+	int (*init)(struct dbs_data *);
+	void (*exit)(struct dbs_data *);
+	void (*start)(struct cpufreq_policy *);
+};
+
 struct policy_dbs_info {
 	struct cpufreq_policy *policy;
 	struct mutex update_mutex;
@@ -92218,6 +114021,33 @@
 	bool work_in_progress;
 };
 
+struct od_ops {
+	unsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);
+};
+
+struct od_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int freq_lo;
+	unsigned int freq_lo_delay_us;
+	unsigned int freq_hi_delay_us;
+	unsigned int sample_type: 1;
+};
+
+struct od_dbs_tuners {
+	unsigned int powersave_bias;
+};
+
+struct cs_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int down_skip;
+	unsigned int requested_freq;
+};
+
+struct cs_dbs_tuners {
+	unsigned int down_threshold;
+	unsigned int freq_step;
+};
+
 struct cpu_dbs_info {
 	u64 prev_cpu_idle;
 	u64 prev_update_time;
@@ -92227,34 +114057,248 @@
 	struct policy_dbs_info *policy_dbs;
 };
 
-struct dbs_governor {
-	struct cpufreq_governor gov;
-	struct kobj_type kobj_type;
-	struct dbs_data *gdbs_data;
-	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
-	struct policy_dbs_info * (*alloc)();
-	void (*free)(struct policy_dbs_info *);
-	int (*init)(struct dbs_data *);
-	void (*exit)(struct dbs_data *);
-	void (*start)(struct cpufreq_policy *);
+enum {
+	UNDEFINED_CAPABLE = 0,
+	SYSTEM_INTEL_MSR_CAPABLE = 1,
+	SYSTEM_AMD_MSR_CAPABLE = 2,
+	SYSTEM_IO_CAPABLE = 3,
 };
 
-struct cpufreq_policy___2;
-
-struct cpufreq_dt_platform_data {
-	bool have_governor_per_policy;
-	unsigned int (*get_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*target_intermediate)(struct cpufreq_policy___2 *, unsigned int);
-	int (*suspend)(struct cpufreq_policy___2 *);
-	int (*resume)(struct cpufreq_policy___2 *);
+struct acpi_cpufreq_data {
+	unsigned int resume;
+	unsigned int cpu_feature;
+	unsigned int acpi_perf_cpu;
+	cpumask_var_t freqdomain_cpus;
+	void (*cpu_freq_write)(struct acpi_pct_register *, u32);
+	u32 (*cpu_freq_read)(struct acpi_pct_register *);
 };
 
-struct tegra124_cpufreq_priv {
-	struct clk *cpu_clk;
-	struct clk *pllp_clk;
-	struct clk *pllx_clk;
-	struct clk *dfll_clk;
-	struct platform_device *cpufreq_dt_pdev;
+struct drv_cmd {
+	struct acpi_pct_register *reg;
+	u32 val;
+	union {
+		void (*write)(struct acpi_pct_register *, u32);
+		u32 (*read)(struct acpi_pct_register *);
+	} func;
+};
+
+struct powernow_k8_data {
+	unsigned int cpu;
+	u32 numps;
+	u32 batps;
+	u32 rvo;
+	u32 irt;
+	u32 vidmvs;
+	u32 vstable;
+	u32 plllock;
+	u32 exttype;
+	u32 currvid;
+	u32 currfid;
+	struct cpufreq_frequency_table *powernow_table;
+	struct acpi_processor_performance acpi_data;
+	struct cpumask *available_cores;
+};
+
+struct psb_s {
+	u8 signature[10];
+	u8 tableversion;
+	u8 flags1;
+	u16 vstable;
+	u8 flags2;
+	u8 num_tables;
+	u32 cpuid;
+	u8 plllocktime;
+	u8 maxfid;
+	u8 maxvid;
+	u8 numps;
+};
+
+struct pst_s {
+	u8 fid;
+	u8 vid;
+};
+
+struct powernowk8_target_arg {
+	struct cpufreq_policy *pol;
+	unsigned int newstate;
+};
+
+struct init_on_cpu {
+	struct powernow_k8_data *data;
+	int rc;
+};
+
+struct pcc_register_resource {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct pcc_memory_resource {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 resource_usage;
+	u8 type_specific;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+} __attribute__((packed));
+
+struct pcc_header {
+	u32 signature;
+	u16 length;
+	u8 major;
+	u8 minor;
+	u32 features;
+	u16 command;
+	u16 status;
+	u32 latency;
+	u32 minimum_time;
+	u32 maximum_time;
+	u32 nominal;
+	u32 throttled_frequency;
+	u32 minimum_frequency;
+};
+
+struct pcc_cpu {
+	u32 input_offset;
+	u32 output_offset;
+};
+
+struct cpu_id {
+	__u8 x86;
+	__u8 x86_model;
+	__u8 x86_stepping;
+};
+
+enum {
+	CPU_BANIAS = 0,
+	CPU_DOTHAN_A1 = 1,
+	CPU_DOTHAN_A2 = 2,
+	CPU_DOTHAN_B0 = 3,
+	CPU_MP4HT_D0 = 4,
+	CPU_MP4HT_E0 = 5,
+};
+
+struct cpu_model {
+	const struct cpu_id *cpu_id;
+	const char *model_name;
+	unsigned int max_freq;
+	struct cpufreq_frequency_table *op_points;
+};
+
+enum acpi_preferred_pm_profiles {
+	PM_UNSPECIFIED = 0,
+	PM_DESKTOP = 1,
+	PM_MOBILE = 2,
+	PM_WORKSTATION = 3,
+	PM_ENTERPRISE_SERVER = 4,
+	PM_SOHO_SERVER = 5,
+	PM_APPLIANCE_PC = 6,
+	PM_PERFORMANCE_SERVER = 7,
+	PM_TABLET = 8,
+};
+
+struct sample {
+	int32_t core_avg_perf;
+	int32_t busy_scaled;
+	u64 aperf;
+	u64 mperf;
+	u64 tsc;
+	u64 time;
+};
+
+struct pstate_data {
+	int current_pstate;
+	int min_pstate;
+	int max_pstate;
+	int max_pstate_physical;
+	int perf_ctl_scaling;
+	int scaling;
+	int turbo_pstate;
+	unsigned int min_freq;
+	unsigned int max_freq;
+	unsigned int turbo_freq;
+};
+
+struct vid_data {
+	int min;
+	int max;
+	int turbo;
+	int32_t ratio;
+};
+
+struct global_params {
+	bool no_turbo;
+	bool turbo_disabled;
+	bool turbo_disabled_mf;
+	int max_perf_pct;
+	int min_perf_pct;
+};
+
+struct cpudata {
+	int cpu;
+	unsigned int policy;
+	struct update_util_data update_util;
+	bool update_util_set;
+	struct pstate_data pstate;
+	struct vid_data vid;
+	u64 last_update;
+	u64 last_sample_time;
+	u64 aperf_mperf_shift;
+	u64 prev_aperf;
+	u64 prev_mperf;
+	u64 prev_tsc;
+	u64 prev_cummulative_iowait;
+	struct sample sample;
+	int32_t min_perf_ratio;
+	int32_t max_perf_ratio;
+	struct acpi_processor_performance acpi_perf_data;
+	bool valid_pss_table;
+	unsigned int iowait_boost;
+	s16 epp_powersave;
+	s16 epp_policy;
+	s16 epp_default;
+	s16 epp_cached;
+	u64 hwp_req_cached;
+	u64 hwp_cap_cached;
+	u64 last_io_update;
+	unsigned int sched_flags;
+	u32 hwp_boost_min;
+	bool suspended;
+	struct delayed_work hwp_notify_work;
+};
+
+struct pstate_funcs {
+	int (*get_max)();
+	int (*get_max_physical)();
+	int (*get_min)();
+	int (*get_turbo)();
+	int (*get_scaling)();
+	int (*get_cpu_scaling)(int);
+	int (*get_aperf_mperf_shift)();
+	u64 (*get_val)(struct cpudata *, int);
+	void (*get_vid)(struct cpudata *);
+};
+
+enum energy_perf_value_index___2 {
+	EPP_INDEX_DEFAULT = 0,
+	EPP_INDEX_PERFORMANCE = 1,
+	EPP_INDEX_BALANCE_PERFORMANCE = 2,
+	EPP_INDEX_BALANCE_POWERSAVE = 3,
+	EPP_INDEX_POWERSAVE = 4,
+};
+
+enum {
+	PSS = 0,
+	PPC = 1,
 };
 
 struct cpuidle_governor {
@@ -92275,12 +114319,6 @@
 	struct cpuidle_device *device;
 };
 
-struct cpuidle_driver_kobj {
-	struct cpuidle_driver *drv;
-	struct completion kobj_unregister;
-	struct kobject kobj;
-};
-
 struct cpuidle_device_kobj {
 	struct cpuidle_device *dev;
 	struct completion kobj_unregister;
@@ -92299,12 +114337,6 @@
 	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
 };
 
-struct cpuidle_driver_attr {
-	struct attribute attr;
-	ssize_t (*show)(struct cpuidle_driver *, char *);
-	ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
-};
-
 struct ladder_device_state {
 	struct {
 		u32 promotion_count;
@@ -92332,29 +114364,710 @@
 	int interval_ptr;
 };
 
-struct teo_idle_state {
-	unsigned int early_hits;
+struct teo_bin {
+	unsigned int intercepts;
 	unsigned int hits;
-	unsigned int misses;
+	unsigned int recent;
 };
 
 struct teo_cpu {
-	u64 time_span_ns;
-	u64 sleep_length_ns;
-	struct teo_idle_state states[10];
-	int interval_idx;
-	u64 intervals[8];
+	s64 time_span_ns;
+	s64 sleep_length_ns;
+	struct teo_bin state_bins[10];
+	unsigned int total;
+	int next_recent_idx;
+	int recent_idx[9];
 };
 
-struct pci_dev___2;
+struct mmc_cid {
+	unsigned int manfid;
+	char prod_name[8];
+	unsigned char prv;
+	unsigned int serial;
+	short unsigned int oemid;
+	short unsigned int year;
+	unsigned char hwrev;
+	unsigned char fwrev;
+	unsigned char month;
+};
 
-struct sdhci_pci_data {
-	struct pci_dev___2 *pdev;
-	int slotno;
-	int rst_n_gpio;
-	int cd_gpio;
-	int (*setup)(struct sdhci_pci_data *);
-	void (*cleanup)(struct sdhci_pci_data *);
+struct mmc_csd {
+	unsigned char structure;
+	unsigned char mmca_vsn;
+	short unsigned int cmdclass;
+	short unsigned int taac_clks;
+	unsigned int taac_ns;
+	unsigned int c_size;
+	unsigned int r2w_factor;
+	unsigned int max_dtr;
+	unsigned int erase_size;
+	unsigned int read_blkbits;
+	unsigned int write_blkbits;
+	unsigned int capacity;
+	unsigned int read_partial: 1;
+	unsigned int read_misalign: 1;
+	unsigned int write_partial: 1;
+	unsigned int write_misalign: 1;
+	unsigned int dsr_imp: 1;
+};
+
+struct mmc_ext_csd {
+	u8 rev;
+	u8 erase_group_def;
+	u8 sec_feature_support;
+	u8 rel_sectors;
+	u8 rel_param;
+	bool enhanced_rpmb_supported;
+	u8 part_config;
+	u8 cache_ctrl;
+	u8 rst_n_function;
+	u8 max_packed_writes;
+	u8 max_packed_reads;
+	u8 packed_event_en;
+	unsigned int part_time;
+	unsigned int sa_timeout;
+	unsigned int generic_cmd6_time;
+	unsigned int power_off_longtime;
+	u8 power_off_notification;
+	unsigned int hs_max_dtr;
+	unsigned int hs200_max_dtr;
+	unsigned int sectors;
+	unsigned int hc_erase_size;
+	unsigned int hc_erase_timeout;
+	unsigned int sec_trim_mult;
+	unsigned int sec_erase_mult;
+	unsigned int trim_timeout;
+	bool partition_setting_completed;
+	long long unsigned int enhanced_area_offset;
+	unsigned int enhanced_area_size;
+	unsigned int cache_size;
+	bool hpi_en;
+	bool hpi;
+	unsigned int hpi_cmd;
+	bool bkops;
+	bool man_bkops_en;
+	bool auto_bkops_en;
+	unsigned int data_sector_size;
+	unsigned int data_tag_unit_size;
+	unsigned int boot_ro_lock;
+	bool boot_ro_lockable;
+	bool ffu_capable;
+	bool cmdq_en;
+	bool cmdq_support;
+	unsigned int cmdq_depth;
+	u8 fwrev[8];
+	u8 raw_exception_status;
+	u8 raw_partition_support;
+	u8 raw_rpmb_size_mult;
+	u8 raw_erased_mem_count;
+	u8 strobe_support;
+	u8 raw_ext_csd_structure;
+	u8 raw_card_type;
+	u8 raw_driver_strength;
+	u8 out_of_int_time;
+	u8 raw_pwr_cl_52_195;
+	u8 raw_pwr_cl_26_195;
+	u8 raw_pwr_cl_52_360;
+	u8 raw_pwr_cl_26_360;
+	u8 raw_s_a_timeout;
+	u8 raw_hc_erase_gap_size;
+	u8 raw_erase_timeout_mult;
+	u8 raw_hc_erase_grp_size;
+	u8 raw_boot_mult;
+	u8 raw_sec_trim_mult;
+	u8 raw_sec_erase_mult;
+	u8 raw_sec_feature_support;
+	u8 raw_trim_mult;
+	u8 raw_pwr_cl_200_195;
+	u8 raw_pwr_cl_200_360;
+	u8 raw_pwr_cl_ddr_52_195;
+	u8 raw_pwr_cl_ddr_52_360;
+	u8 raw_pwr_cl_ddr_200_360;
+	u8 raw_bkops_status;
+	u8 raw_sectors[4];
+	u8 pre_eol_info;
+	u8 device_life_time_est_typ_a;
+	u8 device_life_time_est_typ_b;
+	unsigned int feature_support;
+};
+
+struct sd_scr {
+	unsigned char sda_vsn;
+	unsigned char sda_spec3;
+	unsigned char sda_spec4;
+	unsigned char sda_specx;
+	unsigned char bus_widths;
+	unsigned char cmds;
+};
+
+struct sd_ssr {
+	unsigned int au;
+	unsigned int erase_timeout;
+	unsigned int erase_offset;
+};
+
+struct sd_switch_caps {
+	unsigned int hs_max_dtr;
+	unsigned int uhs_max_dtr;
+	unsigned int sd3_bus_mode;
+	unsigned int sd3_drv_type;
+	unsigned int sd3_curr_limit;
+};
+
+struct sd_ext_reg {
+	u8 fno;
+	u8 page;
+	u16 offset;
+	u8 rev;
+	u8 feature_enabled;
+	u8 feature_support;
+};
+
+struct sdio_cccr {
+	unsigned int sdio_vsn;
+	unsigned int sd_vsn;
+	unsigned int multi_block: 1;
+	unsigned int low_speed: 1;
+	unsigned int wide_bus: 1;
+	unsigned int high_power: 1;
+	unsigned int high_speed: 1;
+	unsigned int disable_cd: 1;
+};
+
+struct sdio_cis {
+	short unsigned int vendor;
+	short unsigned int device;
+	short unsigned int blksize;
+	unsigned int max_dtr;
+};
+
+struct mmc_part {
+	u64 size;
+	unsigned int part_cfg;
+	char name[20];
+	bool force_ro;
+	unsigned int area_type;
+};
+
+struct mmc_host;
+
+struct sdio_func;
+
+struct sdio_func_tuple;
+
+struct mmc_card {
+	struct mmc_host *host;
+	struct device dev;
+	u32 ocr;
+	unsigned int rca;
+	unsigned int type;
+	unsigned int state;
+	unsigned int quirks;
+	unsigned int quirk_max_rate;
+	bool reenable_cmdq;
+	unsigned int erase_size;
+	unsigned int erase_shift;
+	unsigned int pref_erase;
+	unsigned int eg_boundary;
+	unsigned int erase_arg;
+	u8 erased_byte;
+	u32 raw_cid[4];
+	u32 raw_csd[4];
+	u32 raw_scr[2];
+	u32 raw_ssr[16];
+	struct mmc_cid cid;
+	struct mmc_csd csd;
+	struct mmc_ext_csd ext_csd;
+	struct sd_scr scr;
+	struct sd_ssr ssr;
+	struct sd_switch_caps sw_caps;
+	struct sd_ext_reg ext_power;
+	struct sd_ext_reg ext_perf;
+	unsigned int sdio_funcs;
+	atomic_t sdio_funcs_probed;
+	struct sdio_cccr cccr;
+	struct sdio_cis cis;
+	struct sdio_func *sdio_func[7];
+	struct sdio_func *sdio_single_irq;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+	unsigned int sd_bus_speed;
+	unsigned int mmc_avail_type;
+	unsigned int drive_strength;
+	struct dentry *debugfs_root;
+	struct mmc_part part[7];
+	unsigned int nr_parts;
+	struct workqueue_struct *complete_wq;
+};
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+	unsigned int clock;
+	short unsigned int vdd;
+	unsigned int power_delay_ms;
+	unsigned char bus_mode;
+	unsigned char chip_select;
+	unsigned char power_mode;
+	unsigned char bus_width;
+	unsigned char timing;
+	unsigned char signal_voltage;
+	unsigned char drv_type;
+	bool enhanced_strobe;
+};
+
+struct mmc_ctx {
+	struct task_struct *task;
+};
+
+struct mmc_slot {
+	int cd_irq;
+	bool cd_wake_enabled;
+	void *handler_priv;
+};
+
+struct mmc_supply {
+	struct regulator *vmmc;
+	struct regulator *vqmmc;
+};
+
+struct mmc_host_ops;
+
+struct mmc_pwrseq;
+
+struct mmc_bus_ops;
+
+struct mmc_request;
+
+struct mmc_cqe_ops;
+
+struct mmc_host {
+	struct device *parent;
+	struct device class_dev;
+	int index;
+	const struct mmc_host_ops *ops;
+	struct mmc_pwrseq *pwrseq;
+	unsigned int f_min;
+	unsigned int f_max;
+	unsigned int f_init;
+	u32 ocr_avail;
+	u32 ocr_avail_sdio;
+	u32 ocr_avail_sd;
+	u32 ocr_avail_mmc;
+	struct wakeup_source *ws;
+	u32 max_current_330;
+	u32 max_current_300;
+	u32 max_current_180;
+	u32 caps;
+	u32 caps2;
+	int fixed_drv_type;
+	mmc_pm_flag_t pm_caps;
+	unsigned int max_seg_size;
+	short unsigned int max_segs;
+	short unsigned int unused;
+	unsigned int max_req_size;
+	unsigned int max_blk_size;
+	unsigned int max_blk_count;
+	unsigned int max_busy_timeout;
+	spinlock_t lock;
+	struct mmc_ios ios;
+	unsigned int use_spi_crc: 1;
+	unsigned int claimed: 1;
+	unsigned int doing_init_tune: 1;
+	unsigned int can_retune: 1;
+	unsigned int doing_retune: 1;
+	unsigned int retune_now: 1;
+	unsigned int retune_paused: 1;
+	unsigned int retune_crc_disable: 1;
+	unsigned int can_dma_map_merge: 1;
+	int rescan_disable;
+	int rescan_entered;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct timer_list retune_timer;
+	bool trigger_card_event;
+	struct mmc_card *card;
+	wait_queue_head_t wq;
+	struct mmc_ctx *claimer;
+	int claim_cnt;
+	struct mmc_ctx default_ctx;
+	struct delayed_work detect;
+	int detect_change;
+	struct mmc_slot slot;
+	const struct mmc_bus_ops *bus_ops;
+	unsigned int sdio_irqs;
+	struct task_struct *sdio_irq_thread;
+	struct delayed_work sdio_irq_work;
+	bool sdio_irq_pending;
+	atomic_t sdio_irq_thread_abort;
+	mmc_pm_flag_t pm_flags;
+	struct led_trigger *led;
+	bool regulator_enabled;
+	struct mmc_supply supply;
+	struct dentry *debugfs_root;
+	struct mmc_request *ongoing_mrq;
+	unsigned int actual_clock;
+	unsigned int slotno;
+	int dsr_req;
+	u32 dsr;
+	const struct mmc_cqe_ops *cqe_ops;
+	void *cqe_private;
+	int cqe_qdepth;
+	bool cqe_enabled;
+	bool cqe_on;
+	struct blk_crypto_profile crypto_profile;
+	bool hsq_enabled;
+	long: 56;
+	long: 64;
+	long unsigned int private[0];
+};
+
+struct mmc_data;
+
+struct mmc_command {
+	u32 opcode;
+	u32 arg;
+	u32 resp[4];
+	unsigned int flags;
+	unsigned int retries;
+	int error;
+	unsigned int busy_timeout;
+	struct mmc_data *data;
+	struct mmc_request *mrq;
+};
+
+struct mmc_data {
+	unsigned int timeout_ns;
+	unsigned int timeout_clks;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	int error;
+	unsigned int flags;
+	unsigned int bytes_xfered;
+	struct mmc_command *stop;
+	struct mmc_request *mrq;
+	unsigned int sg_len;
+	int sg_count;
+	struct scatterlist *sg;
+	s32 host_cookie;
+};
+
+struct mmc_request {
+	struct mmc_command *sbc;
+	struct mmc_command *cmd;
+	struct mmc_data *data;
+	struct mmc_command *stop;
+	struct completion completion;
+	struct completion cmd_completion;
+	void (*done)(struct mmc_request *);
+	void (*recovery_notifier)(struct mmc_request *);
+	struct mmc_host *host;
+	bool cap_cmd_during_tfr;
+	int tag;
+	const struct bio_crypt_ctx *crypto_ctx;
+	int crypto_key_slot;
+};
+
+struct mmc_host_ops {
+	void (*post_req)(struct mmc_host *, struct mmc_request *, int);
+	void (*pre_req)(struct mmc_host *, struct mmc_request *);
+	void (*request)(struct mmc_host *, struct mmc_request *);
+	int (*request_atomic)(struct mmc_host *, struct mmc_request *);
+	void (*set_ios)(struct mmc_host *, struct mmc_ios *);
+	int (*get_ro)(struct mmc_host *);
+	int (*get_cd)(struct mmc_host *);
+	void (*enable_sdio_irq)(struct mmc_host *, int);
+	void (*ack_sdio_irq)(struct mmc_host *);
+	void (*init_card)(struct mmc_host *, struct mmc_card *);
+	int (*start_signal_voltage_switch)(struct mmc_host *, struct mmc_ios *);
+	int (*card_busy)(struct mmc_host *);
+	int (*execute_tuning)(struct mmc_host *, u32);
+	int (*prepare_hs400_tuning)(struct mmc_host *, struct mmc_ios *);
+	int (*execute_hs400_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*hs400_prepare_ddr)(struct mmc_host *);
+	void (*hs400_downgrade)(struct mmc_host *);
+	void (*hs400_complete)(struct mmc_host *);
+	void (*hs400_enhanced_strobe)(struct mmc_host *, struct mmc_ios *);
+	int (*select_drive_strength)(struct mmc_card *, unsigned int, int, int, int *);
+	void (*card_hw_reset)(struct mmc_host *);
+	void (*card_event)(struct mmc_host *);
+	int (*multi_io_quirk)(struct mmc_card *, unsigned int, int);
+	int (*init_sd_express)(struct mmc_host *, struct mmc_ios *);
+};
+
+struct mmc_cqe_ops {
+	int (*cqe_enable)(struct mmc_host *, struct mmc_card *);
+	void (*cqe_disable)(struct mmc_host *);
+	int (*cqe_request)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_post_req)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_off)(struct mmc_host *);
+	int (*cqe_wait_for_idle)(struct mmc_host *);
+	bool (*cqe_timeout)(struct mmc_host *, struct mmc_request *, bool *);
+	void (*cqe_recovery_start)(struct mmc_host *);
+	void (*cqe_recovery_finish)(struct mmc_host *);
+};
+
+struct mmc_pwrseq_ops;
+
+struct mmc_pwrseq {
+	const struct mmc_pwrseq_ops *ops;
+	struct device *dev;
+	struct list_head pwrseq_node;
+	struct module *owner;
+};
+
+struct mmc_bus_ops {
+	void (*remove)(struct mmc_host *);
+	void (*detect)(struct mmc_host *);
+	int (*pre_suspend)(struct mmc_host *);
+	int (*suspend)(struct mmc_host *);
+	int (*resume)(struct mmc_host *);
+	int (*runtime_suspend)(struct mmc_host *);
+	int (*runtime_resume)(struct mmc_host *);
+	int (*alive)(struct mmc_host *);
+	int (*shutdown)(struct mmc_host *);
+	int (*hw_reset)(struct mmc_host *);
+	int (*sw_reset)(struct mmc_host *);
+	bool (*cache_enabled)(struct mmc_host *);
+	int (*flush_cache)(struct mmc_host *);
+};
+
+struct trace_event_raw_mmc_request_start {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	u32 cmd_arg;
+	unsigned int cmd_flags;
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	u32 stop_arg;
+	unsigned int stop_flags;
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	u32 sbc_arg;
+	unsigned int sbc_flags;
+	unsigned int sbc_retries;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	unsigned int blksz;
+	unsigned int data_flags;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mmc_request_done {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	int cmd_err;
+	u32 cmd_resp[4];
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	int stop_err;
+	u32 stop_resp[4];
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	int sbc_err;
+	u32 sbc_resp[4];
+	unsigned int sbc_retries;
+	unsigned int bytes_xfered;
+	int data_err;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmc_request_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mmc_request_done {
+	u32 name;
+};
+
+typedef void (*btf_trace_mmc_request_start)(void *, struct mmc_host *, struct mmc_request *);
+
+typedef void (*btf_trace_mmc_request_done)(void *, struct mmc_host *, struct mmc_request *);
+
+struct mmc_pwrseq_ops {
+	void (*pre_power_on)(struct mmc_host *);
+	void (*post_power_on)(struct mmc_host *);
+	void (*power_off)(struct mmc_host *);
+	void (*reset)(struct mmc_host *);
+};
+
+enum mmc_busy_cmd {
+	MMC_BUSY_CMD6 = 0,
+	MMC_BUSY_ERASE = 1,
+	MMC_BUSY_HPI = 2,
+	MMC_BUSY_EXTR_SINGLE = 3,
+	MMC_BUSY_IO = 4,
+};
+
+struct mmc_driver {
+	struct device_driver drv;
+	int (*probe)(struct mmc_card *);
+	void (*remove)(struct mmc_card *);
+	void (*shutdown)(struct mmc_card *);
+};
+
+struct mmc_clk_phase {
+	bool valid;
+	u16 in_deg;
+	u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+	struct mmc_clk_phase phase[11];
+};
+
+struct mmc_fixup {
+	const char *name;
+	u64 rev_start;
+	u64 rev_end;
+	unsigned int manfid;
+	short unsigned int oemid;
+	u16 cis_vendor;
+	u16 cis_device;
+	unsigned int ext_csd_rev;
+	const char *of_compatible;
+	void (*vendor_fixup)(struct mmc_card *, int);
+	int data;
+};
+
+struct mmc_busy_data {
+	struct mmc_card *card;
+	bool retry_crc_err;
+	enum mmc_busy_cmd busy_cmd;
+};
+
+struct mmc_op_cond_busy_data {
+	struct mmc_host *host;
+	u32 ocr;
+	struct mmc_command *cmd;
+};
+
+struct sd_busy_data {
+	struct mmc_card *card;
+	u8 *reg_buf;
+};
+
+typedef void sdio_irq_handler_t(struct sdio_func *);
+
+struct sdio_func {
+	struct mmc_card *card;
+	struct device dev;
+	sdio_irq_handler_t *irq_handler;
+	unsigned int num;
+	unsigned char class;
+	short unsigned int vendor;
+	short unsigned int device;
+	unsigned int max_blksize;
+	unsigned int cur_blksize;
+	unsigned int enable_timeout;
+	unsigned int state;
+	u8 *tmpbuf;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+};
+
+struct sdio_func_tuple {
+	struct sdio_func_tuple *next;
+	unsigned char code;
+	unsigned char size;
+	unsigned char data[0];
+};
+
+struct sdio_device_id {
+	__u8 class;
+	__u16 vendor;
+	__u16 device;
+	kernel_ulong_t driver_data;
+};
+
+struct sdio_driver {
+	char *name;
+	const struct sdio_device_id *id_table;
+	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
+	void (*remove)(struct sdio_func *);
+	struct device_driver drv;
+};
+
+typedef int tpl_parse_t(struct mmc_card *, struct sdio_func *, const unsigned char *, unsigned int);
+
+struct cis_tpl {
+	unsigned char code;
+	unsigned char min_size;
+	tpl_parse_t *parse;
+};
+
+struct mmc_gpio {
+	struct gpio_desc *ro_gpio;
+	struct gpio_desc *cd_gpio;
+	irqreturn_t (*cd_gpio_isr)(int, void *);
+	char *ro_label;
+	char *cd_label;
+	u32 cd_debounce_delay_ms;
+};
+
+enum mmc_issue_type {
+	MMC_ISSUE_SYNC = 0,
+	MMC_ISSUE_DCMD = 1,
+	MMC_ISSUE_ASYNC = 2,
+	MMC_ISSUE_MAX = 3,
+};
+
+struct mmc_blk_request {
+	struct mmc_request mrq;
+	struct mmc_command sbc;
+	struct mmc_command cmd;
+	struct mmc_command stop;
+	struct mmc_data data;
+};
+
+enum mmc_drv_op {
+	MMC_DRV_OP_IOCTL = 0,
+	MMC_DRV_OP_IOCTL_RPMB = 1,
+	MMC_DRV_OP_BOOT_WP = 2,
+	MMC_DRV_OP_GET_CARD_STATUS = 3,
+	MMC_DRV_OP_GET_EXT_CSD = 4,
+};
+
+struct mmc_queue_req {
+	struct mmc_blk_request brq;
+	struct scatterlist *sg;
+	enum mmc_drv_op drv_op;
+	int drv_op_result;
+	void *drv_op_data;
+	unsigned int ioc_count;
+	int retries;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
 };
 
 struct led_init_data {
@@ -92387,270 +115100,6 @@
 	struct led_trigger *_trig;
 };
 
-enum scpi_error_codes {
-	SCPI_SUCCESS = 0,
-	SCPI_ERR_PARAM = 1,
-	SCPI_ERR_ALIGN = 2,
-	SCPI_ERR_SIZE = 3,
-	SCPI_ERR_HANDLER = 4,
-	SCPI_ERR_ACCESS = 5,
-	SCPI_ERR_RANGE = 6,
-	SCPI_ERR_TIMEOUT = 7,
-	SCPI_ERR_NOMEM = 8,
-	SCPI_ERR_PWRSTATE = 9,
-	SCPI_ERR_SUPPORT = 10,
-	SCPI_ERR_DEVICE = 11,
-	SCPI_ERR_BUSY = 12,
-	SCPI_ERR_MAX = 13,
-};
-
-enum scpi_std_cmd {
-	SCPI_CMD_INVALID = 0,
-	SCPI_CMD_SCPI_READY = 1,
-	SCPI_CMD_SCPI_CAPABILITIES = 2,
-	SCPI_CMD_SET_CSS_PWR_STATE = 3,
-	SCPI_CMD_GET_CSS_PWR_STATE = 4,
-	SCPI_CMD_SET_SYS_PWR_STATE = 5,
-	SCPI_CMD_SET_CPU_TIMER = 6,
-	SCPI_CMD_CANCEL_CPU_TIMER = 7,
-	SCPI_CMD_DVFS_CAPABILITIES = 8,
-	SCPI_CMD_GET_DVFS_INFO = 9,
-	SCPI_CMD_SET_DVFS = 10,
-	SCPI_CMD_GET_DVFS = 11,
-	SCPI_CMD_GET_DVFS_STAT = 12,
-	SCPI_CMD_CLOCK_CAPABILITIES = 13,
-	SCPI_CMD_GET_CLOCK_INFO = 14,
-	SCPI_CMD_SET_CLOCK_VALUE = 15,
-	SCPI_CMD_GET_CLOCK_VALUE = 16,
-	SCPI_CMD_PSU_CAPABILITIES = 17,
-	SCPI_CMD_GET_PSU_INFO = 18,
-	SCPI_CMD_SET_PSU = 19,
-	SCPI_CMD_GET_PSU = 20,
-	SCPI_CMD_SENSOR_CAPABILITIES = 21,
-	SCPI_CMD_SENSOR_INFO = 22,
-	SCPI_CMD_SENSOR_VALUE = 23,
-	SCPI_CMD_SENSOR_CFG_PERIODIC = 24,
-	SCPI_CMD_SENSOR_CFG_BOUNDS = 25,
-	SCPI_CMD_SENSOR_ASYNC_VALUE = 26,
-	SCPI_CMD_SET_DEVICE_PWR_STATE = 27,
-	SCPI_CMD_GET_DEVICE_PWR_STATE = 28,
-	SCPI_CMD_COUNT = 29,
-};
-
-enum legacy_scpi_std_cmd {
-	LEGACY_SCPI_CMD_INVALID = 0,
-	LEGACY_SCPI_CMD_SCPI_READY = 1,
-	LEGACY_SCPI_CMD_SCPI_CAPABILITIES = 2,
-	LEGACY_SCPI_CMD_EVENT = 3,
-	LEGACY_SCPI_CMD_SET_CSS_PWR_STATE = 4,
-	LEGACY_SCPI_CMD_GET_CSS_PWR_STATE = 5,
-	LEGACY_SCPI_CMD_CFG_PWR_STATE_STAT = 6,
-	LEGACY_SCPI_CMD_GET_PWR_STATE_STAT = 7,
-	LEGACY_SCPI_CMD_SYS_PWR_STATE = 8,
-	LEGACY_SCPI_CMD_L2_READY = 9,
-	LEGACY_SCPI_CMD_SET_AP_TIMER = 10,
-	LEGACY_SCPI_CMD_CANCEL_AP_TIME = 11,
-	LEGACY_SCPI_CMD_DVFS_CAPABILITIES = 12,
-	LEGACY_SCPI_CMD_GET_DVFS_INFO = 13,
-	LEGACY_SCPI_CMD_SET_DVFS = 14,
-	LEGACY_SCPI_CMD_GET_DVFS = 15,
-	LEGACY_SCPI_CMD_GET_DVFS_STAT = 16,
-	LEGACY_SCPI_CMD_SET_RTC = 17,
-	LEGACY_SCPI_CMD_GET_RTC = 18,
-	LEGACY_SCPI_CMD_CLOCK_CAPABILITIES = 19,
-	LEGACY_SCPI_CMD_SET_CLOCK_INDEX = 20,
-	LEGACY_SCPI_CMD_SET_CLOCK_VALUE = 21,
-	LEGACY_SCPI_CMD_GET_CLOCK_VALUE = 22,
-	LEGACY_SCPI_CMD_PSU_CAPABILITIES = 23,
-	LEGACY_SCPI_CMD_SET_PSU = 24,
-	LEGACY_SCPI_CMD_GET_PSU = 25,
-	LEGACY_SCPI_CMD_SENSOR_CAPABILITIES = 26,
-	LEGACY_SCPI_CMD_SENSOR_INFO = 27,
-	LEGACY_SCPI_CMD_SENSOR_VALUE = 28,
-	LEGACY_SCPI_CMD_SENSOR_CFG_PERIODIC = 29,
-	LEGACY_SCPI_CMD_SENSOR_CFG_BOUNDS = 30,
-	LEGACY_SCPI_CMD_SENSOR_ASYNC_VALUE = 31,
-	LEGACY_SCPI_CMD_COUNT = 32,
-};
-
-enum scpi_drv_cmds {
-	CMD_SCPI_CAPABILITIES = 0,
-	CMD_GET_CLOCK_INFO = 1,
-	CMD_GET_CLOCK_VALUE = 2,
-	CMD_SET_CLOCK_VALUE = 3,
-	CMD_GET_DVFS = 4,
-	CMD_SET_DVFS = 5,
-	CMD_GET_DVFS_INFO = 6,
-	CMD_SENSOR_CAPABILITIES = 7,
-	CMD_SENSOR_INFO = 8,
-	CMD_SENSOR_VALUE = 9,
-	CMD_SET_DEVICE_PWR_STATE = 10,
-	CMD_GET_DEVICE_PWR_STATE = 11,
-	CMD_MAX_COUNT = 12,
-};
-
-struct scpi_xfer {
-	u32 slot;
-	u32 cmd;
-	u32 status;
-	const void *tx_buf;
-	void *rx_buf;
-	unsigned int tx_len;
-	unsigned int rx_len;
-	struct list_head node;
-	struct completion done;
-};
-
-struct scpi_chan {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	void *tx_payload;
-	void *rx_payload;
-	struct list_head rx_pending;
-	struct list_head xfers_list;
-	struct scpi_xfer *xfers;
-	spinlock_t rx_lock;
-	struct mutex xfers_lock;
-	u8 token;
-};
-
-struct scpi_drvinfo {
-	u32 protocol_version;
-	u32 firmware_version;
-	bool is_legacy;
-	int num_chans;
-	int *commands;
-	long unsigned int cmd_priority[1];
-	atomic_t next_chan;
-	struct scpi_ops *scpi_ops;
-	struct scpi_chan *channels;
-	struct scpi_dvfs_info *dvfs[8];
-};
-
-struct scpi_shared_mem {
-	__le32 command;
-	__le32 status;
-	u8 payload[0];
-};
-
-struct legacy_scpi_shared_mem {
-	__le32 status;
-	u8 payload[0];
-};
-
-struct scp_capabilities {
-	__le32 protocol_version;
-	__le32 event_version;
-	__le32 platform_version;
-	__le32 commands[4];
-};
-
-struct clk_get_info {
-	__le16 id;
-	__le16 flags;
-	__le32 min_rate;
-	__le32 max_rate;
-	u8 name[20];
-};
-
-struct clk_set_value {
-	__le16 id;
-	__le16 reserved;
-	__le32 rate;
-};
-
-struct legacy_clk_set_value {
-	__le32 rate;
-	__le16 id;
-	__le16 reserved;
-};
-
-struct dvfs_info {
-	u8 domain;
-	u8 opp_count;
-	__le16 latency;
-	struct {
-		__le32 freq;
-		__le32 m_volt;
-	} opps[16];
-};
-
-struct dvfs_set {
-	u8 domain;
-	u8 index;
-};
-
-struct _scpi_sensor_info {
-	__le16 sensor_id;
-	u8 class;
-	u8 trigger_type;
-	char name[20];
-};
-
-struct dev_pstate_set {
-	__le16 dev_id;
-	u8 pstate;
-} __attribute__((packed));
-
-struct scpi_pm_domain {
-	struct generic_pm_domain genpd;
-	struct scpi_ops *ops;
-	u32 domain;
-	char name[30];
-};
-
-enum scpi_power_domain_state {
-	SCPI_PD_STATE_ON = 0,
-	SCPI_PD_STATE_OFF = 3,
-};
-
-enum dmi_entry_type {
-	DMI_ENTRY_BIOS = 0,
-	DMI_ENTRY_SYSTEM = 1,
-	DMI_ENTRY_BASEBOARD = 2,
-	DMI_ENTRY_CHASSIS = 3,
-	DMI_ENTRY_PROCESSOR = 4,
-	DMI_ENTRY_MEM_CONTROLLER = 5,
-	DMI_ENTRY_MEM_MODULE = 6,
-	DMI_ENTRY_CACHE = 7,
-	DMI_ENTRY_PORT_CONNECTOR = 8,
-	DMI_ENTRY_SYSTEM_SLOT = 9,
-	DMI_ENTRY_ONBOARD_DEVICE = 10,
-	DMI_ENTRY_OEMSTRINGS = 11,
-	DMI_ENTRY_SYSCONF = 12,
-	DMI_ENTRY_BIOS_LANG = 13,
-	DMI_ENTRY_GROUP_ASSOC = 14,
-	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
-	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
-	DMI_ENTRY_MEM_DEVICE = 17,
-	DMI_ENTRY_32_MEM_ERROR = 18,
-	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
-	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
-	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
-	DMI_ENTRY_PORTABLE_BATTERY = 22,
-	DMI_ENTRY_SYSTEM_RESET = 23,
-	DMI_ENTRY_HW_SECURITY = 24,
-	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
-	DMI_ENTRY_VOLTAGE_PROBE = 26,
-	DMI_ENTRY_COOLING_DEV = 27,
-	DMI_ENTRY_TEMP_PROBE = 28,
-	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
-	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
-	DMI_ENTRY_BIS_ENTRY = 31,
-	DMI_ENTRY_SYSTEM_BOOT = 32,
-	DMI_ENTRY_MGMT_DEV = 33,
-	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
-	DMI_ENTRY_MGMT_DEV_THRES = 35,
-	DMI_ENTRY_MEM_CHANNEL = 36,
-	DMI_ENTRY_IPMI_DEV = 37,
-	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
-	DMI_ENTRY_ADDITIONAL = 39,
-	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
-	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
-	DMI_ENTRY_INACTIVE = 126,
-	DMI_ENTRY_END_OF_TABLE = 127,
-};
-
 struct dmi_memdev_info {
 	const char *device;
 	const char *bank;
@@ -92659,6 +115108,19 @@
 	u8 type;
 };
 
+struct edd_device {
+	unsigned int index;
+	unsigned int mbr_signature;
+	struct edd_info *info;
+	struct kobject kobj;
+};
+
+struct edd_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edd_device *, char *);
+	int (*test)(struct edd_device *);
+};
+
 struct dmi_device_attribute {
 	struct device_attribute dev_attr;
 	int field;
@@ -92682,146 +115144,11 @@
 	ssize_t (*show)(struct firmware_map_entry *, char *);
 };
 
-enum rpi_firmware_property_status {
-	RPI_FIRMWARE_STATUS_REQUEST = 0,
-	RPI_FIRMWARE_STATUS_SUCCESS = 2147483648,
-	RPI_FIRMWARE_STATUS_ERROR = 2147483649,
-};
-
-struct rpi_firmware_property_tag_header {
-	u32 tag;
-	u32 buf_size;
-	u32 req_resp_size;
-};
-
-struct rpi_firmware___2 {
-	struct mbox_client cl;
-	struct mbox_chan___2 *chan;
-	struct completion c;
-	u32 enabled;
-};
-
-struct qcom_scm_hdcp_req {
-	u32 addr;
-	u32 val;
-};
-
-struct qcom_scm_vmperm {
-	int vmid;
-	int perm;
-};
-
-enum qcom_scm_ocmem_client {
-	QCOM_SCM_OCMEM_UNUSED_ID = 0,
-	QCOM_SCM_OCMEM_GRAPHICS_ID = 1,
-	QCOM_SCM_OCMEM_VIDEO_ID = 2,
-	QCOM_SCM_OCMEM_LP_AUDIO_ID = 3,
-	QCOM_SCM_OCMEM_SENSORS_ID = 4,
-	QCOM_SCM_OCMEM_OTHER_OS_ID = 5,
-	QCOM_SCM_OCMEM_DEBUG_ID = 6,
-};
-
-enum qcom_scm_ice_cipher {
-	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
-	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
-	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
-	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
-};
-
-enum qcom_scm_convention {
-	SMC_CONVENTION_UNKNOWN = 0,
-	SMC_CONVENTION_LEGACY = 1,
-	SMC_CONVENTION_ARM_32 = 2,
-	SMC_CONVENTION_ARM_64 = 3,
-};
-
-enum qcom_scm_arg_types {
-	QCOM_SCM_VAL = 0,
-	QCOM_SCM_RO = 1,
-	QCOM_SCM_RW = 2,
-	QCOM_SCM_BUFVAL = 3,
-};
-
-struct qcom_scm_desc {
-	u32 svc;
-	u32 cmd;
-	u32 arginfo;
-	u64 args[10];
-	u32 owner;
-};
-
-struct qcom_scm_res {
-	u64 result[3];
-};
-
-struct qcom_scm {
-	struct device *dev;
-	struct clk *core_clk;
-	struct clk *iface_clk;
-	struct clk *bus_clk;
-	struct reset_controller_dev reset;
-	u64 dload_mode_addr;
-};
-
-struct qcom_scm_current_perm_info {
-	__le32 vmid;
-	__le32 perm;
-	__le64 ctx;
-	__le32 ctx_size;
-	__le32 unused;
-};
-
-struct qcom_scm_mem_map_info {
-	__le64 mem_addr;
-	__le64 mem_size;
-};
-
-struct qcom_scm_wb_entry {
-	int flag;
-	void *entry;
-};
-
-struct arm_smccc_quirk {
-	int id;
-	union {
-		long unsigned int a6;
-	} state;
-};
-
-struct arm_smccc_args {
-	long unsigned int args[8];
-};
-
-struct scm_legacy_command {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 resp_hdr_offset;
-	__le32 id;
-	__le32 buf[0];
-};
-
-struct scm_legacy_response {
-	__le32 len;
-	__le32 buf_offset;
-	__le32 is_complete;
-};
-
-struct meson_sm_cmd {
-	unsigned int index;
-	u32 smc_id;
-};
-
-struct meson_sm_chip {
-	unsigned int shmem_size;
-	u32 cmd_shmem_in_base;
-	u32 cmd_shmem_out_base;
-	struct meson_sm_cmd cmd[0];
-};
-
-struct meson_sm_firmware___2 {
-	const struct meson_sm_chip *chip;
-	void *sm_shmem_in_base;
-	void *sm_shmem_out_base;
+struct simplefb_platform_data {
+	u32 width;
+	u32 height;
+	u32 stride;
+	const char *format;
 };
 
 struct bmp_header {
@@ -92833,11 +115160,6 @@
 
 typedef struct {
 	efi_guid_t guid;
-	u64 table;
-} efi_config_table_64_t;
-
-typedef struct {
-	efi_guid_t guid;
 	u32 table;
 } efi_config_table_32_t;
 
@@ -92850,12 +115172,6 @@
 } efi_config_table_t;
 
 typedef struct {
-	efi_guid_t guid;
-	long unsigned int *ptr;
-	const char name[16];
-} efi_config_table_type_t;
-
-typedef struct {
 	u16 version;
 	u16 length;
 	u32 runtime_services_supported;
@@ -92875,23 +115191,6 @@
 	const struct efivar_operations *ops;
 };
 
-struct efi_variable {
-	efi_char16_t VariableName[512];
-	efi_guid_t VendorGuid;
-	long unsigned int DataSize;
-	__u8 Data[1024];
-	efi_status_t Status;
-	__u32 Attributes;
-} __attribute__((packed));
-
-struct efivar_entry {
-	struct efi_variable var;
-	struct list_head list;
-	struct kobject kobj;
-	bool scanning;
-	bool deleting;
-};
-
 struct linux_efi_random_seed {
 	u32 size;
 	u8 bits[0];
@@ -92936,26 +115235,19 @@
 	u64 data;
 } efi_capsule_block_desc_t;
 
-struct efi_memory_map_data {
-	phys_addr_t phys_map;
-	long unsigned int size;
-	long unsigned int desc_version;
-	long unsigned int desc_size;
-	long unsigned int flags;
+struct compat_efi_variable {
+	efi_char16_t VariableName[512];
+	efi_guid_t VendorGuid;
+	__u32 DataSize;
+	__u8 Data[1024];
+	__u32 Status;
+	__u32 Attributes;
 };
 
-struct efi_mem_range {
-	struct range range;
-	u64 attribute;
-};
-
-enum {
-	SYSTAB = 0,
-	MMBASE = 1,
-	MMSIZE = 2,
-	DCSIZE = 3,
-	DCVERS = 4,
-	PARAMCOUNT = 5,
+struct efivar_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct efivar_entry *, char *);
+	ssize_t (*store)(struct efivar_entry *, const char *, size_t);
 };
 
 struct efi_system_resource_entry_v1 {
@@ -93007,71 +115299,10 @@
 	u64 ip;
 };
 
-struct cper_sec_proc_arm {
-	u32 validation_bits;
-	u16 err_info_num;
-	u16 context_info_num;
-	u32 section_length;
-	u8 affinity_level;
-	u8 reserved[3];
-	u64 mpidr;
-	u64 midr;
-	u32 running_state;
-	u32 psci_state;
-};
-
-struct cper_mem_err_compact {
+struct cper_sec_proc_ia {
 	u64 validation_bits;
-	u16 node;
-	u16 card;
-	u16 module;
-	u16 bank;
-	u16 device;
-	u16 row;
-	u16 column;
-	u16 bit_pos;
-	u64 requestor_id;
-	u64 responder_id;
-	u64 target_id;
-	u16 rank;
-	u16 mem_array_handle;
-	u16 mem_dev_handle;
-	u8 extended;
-} __attribute__((packed));
-
-struct cper_sec_pcie {
-	u64 validation_bits;
-	u32 port_type;
-	struct {
-		u8 minor;
-		u8 major;
-		u8 reserved[2];
-	} version;
-	u16 command;
-	u16 status;
-	u32 reserved;
-	struct {
-		u16 vendor_id;
-		u16 device_id;
-		u8 class_code[3];
-		u8 function;
-		u8 device;
-		u16 segment;
-		u8 bus;
-		u8 secondary_bus;
-		u16 slot;
-		u8 reserved;
-	} __attribute__((packed)) device_id;
-	struct {
-		u32 lower;
-		u32 upper;
-	} serial_number;
-	struct {
-		u16 secondary_status;
-		u16 control;
-	} bridge;
-	u8 capability[60];
-	u8 aer_info[96];
+	u64 lapic_id;
+	u8 cpuid[48];
 };
 
 struct cper_sec_fw_err_rec_ref {
@@ -93082,1293 +115313,282 @@
 	guid_t record_identifier_guid;
 };
 
-struct acpi_hest_generic_data {
-	u8 section_type[16];
-	u32 error_severity;
-	u16 revision;
-	u8 validation_bits;
-	u8 flags;
-	u32 error_data_length;
-	u8 fru_id[16];
-	u8 fru_text[20];
+struct efi_runtime_map_entry {
+	efi_memory_desc_t md;
+	struct kobject kobj;
 };
 
-struct acpi_hest_generic_data_v300 {
-	u8 section_type[16];
-	u32 error_severity;
-	u16 revision;
-	u8 validation_bits;
-	u8 flags;
-	u32 error_data_length;
-	u8 fru_id[16];
-	u8 fru_text[20];
-	u64 time_stamp;
+struct map_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct efi_runtime_map_entry *, char *);
 };
 
-enum efi_rts_ids {
-	EFI_NONE = 0,
-	EFI_GET_TIME = 1,
-	EFI_SET_TIME = 2,
-	EFI_GET_WAKEUP_TIME = 3,
-	EFI_SET_WAKEUP_TIME = 4,
-	EFI_GET_VARIABLE = 5,
-	EFI_GET_NEXT_VARIABLE = 6,
-	EFI_SET_VARIABLE = 7,
-	EFI_QUERY_VARIABLE_INFO = 8,
-	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
-	EFI_RESET_SYSTEM = 10,
-	EFI_UPDATE_CAPSULE = 11,
-	EFI_QUERY_CAPSULE_CAPS = 12,
+struct efi_acpi_dev_path {
+	struct efi_generic_dev_path header;
+	u32 hid;
+	u32 uid;
 };
 
-struct efi_runtime_work {
-	void *arg1;
-	void *arg2;
-	void *arg3;
-	void *arg4;
-	void *arg5;
-	efi_status_t status;
-	struct work_struct work;
-	enum efi_rts_ids efi_rts_id;
-	struct completion efi_rts_comp;
+struct efi_pci_dev_path {
+	struct efi_generic_dev_path header;
+	u8 fn;
+	u8 dev;
 };
 
-typedef void *efi_event_t;
+struct efi_vendor_dev_path {
+	struct efi_generic_dev_path header;
+	efi_guid_t vendorguid;
+	u8 vendordata[0];
+};
 
-typedef void (*efi_event_notify_t)(efi_event_t, void *);
-
-typedef enum {
-	EfiTimerCancel = 0,
-	EfiTimerPeriodic = 1,
-	EfiTimerRelative = 2,
-} EFI_TIMER_DELAY;
-
-typedef void *efi_handle_t;
-
-typedef struct efi_generic_dev_path efi_device_path_protocol_t;
-
-union efi_boot_services {
-	struct {
-		efi_table_hdr_t hdr;
-		void *raise_tpl;
-		void *restore_tpl;
-		efi_status_t (*allocate_pages)(int, int, long unsigned int, efi_physical_addr_t *);
-		efi_status_t (*free_pages)(efi_physical_addr_t, long unsigned int);
-		efi_status_t (*get_memory_map)(long unsigned int *, void *, long unsigned int *, long unsigned int *, u32 *);
-		efi_status_t (*allocate_pool)(int, long unsigned int, void **);
-		efi_status_t (*free_pool)(void *);
-		efi_status_t (*create_event)(u32, long unsigned int, efi_event_notify_t, void *, efi_event_t *);
-		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
-		efi_status_t (*wait_for_event)(long unsigned int, efi_event_t *, long unsigned int *);
-		void *signal_event;
-		efi_status_t (*close_event)(efi_event_t);
-		void *check_event;
-		void *install_protocol_interface;
-		void *reinstall_protocol_interface;
-		void *uninstall_protocol_interface;
-		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
-		void *__reserved;
-		void *register_protocol_notify;
-		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, long unsigned int *, efi_handle_t *);
-		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
-		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
-		void *load_image;
-		void *start_image;
-		efi_status_t (*exit)(efi_handle_t, efi_status_t, long unsigned int, efi_char16_t *);
-		void *unload_image;
-		efi_status_t (*exit_boot_services)(efi_handle_t, long unsigned int);
-		void *get_next_monotonic_count;
-		efi_status_t (*stall)(long unsigned int);
-		void *set_watchdog_timer;
-		void *connect_controller;
-		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
-		void *open_protocol;
-		void *close_protocol;
-		void *open_protocol_information;
-		void *protocols_per_handle;
-		void *locate_handle_buffer;
-		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
-		void *install_multiple_protocol_interfaces;
-		void *uninstall_multiple_protocol_interfaces;
-		void *calculate_crc32;
-		void *copy_mem;
-		void *set_mem;
-		void *create_event_ex;
+struct efi_dev_path {
+	union {
+		struct efi_generic_dev_path header;
+		struct efi_acpi_dev_path acpi;
+		struct efi_pci_dev_path pci;
+		struct efi_vendor_dev_path vendor;
 	};
-	struct {
-		efi_table_hdr_t hdr;
-		u32 raise_tpl;
-		u32 restore_tpl;
-		u32 allocate_pages;
-		u32 free_pages;
-		u32 get_memory_map;
-		u32 allocate_pool;
-		u32 free_pool;
-		u32 create_event;
-		u32 set_timer;
-		u32 wait_for_event;
-		u32 signal_event;
-		u32 close_event;
-		u32 check_event;
-		u32 install_protocol_interface;
-		u32 reinstall_protocol_interface;
-		u32 uninstall_protocol_interface;
-		u32 handle_protocol;
-		u32 __reserved;
-		u32 register_protocol_notify;
-		u32 locate_handle;
-		u32 locate_device_path;
-		u32 install_configuration_table;
-		u32 load_image;
-		u32 start_image;
-		u32 exit;
-		u32 unload_image;
-		u32 exit_boot_services;
-		u32 get_next_monotonic_count;
-		u32 stall;
-		u32 set_watchdog_timer;
-		u32 connect_controller;
-		u32 disconnect_controller;
-		u32 open_protocol;
-		u32 close_protocol;
-		u32 open_protocol_information;
-		u32 protocols_per_handle;
-		u32 locate_handle_buffer;
-		u32 locate_protocol;
-		u32 install_multiple_protocol_interfaces;
-		u32 uninstall_multiple_protocol_interfaces;
-		u32 calculate_crc32;
-		u32 copy_mem;
-		u32 set_mem;
-		u32 create_event_ex;
-	} mixed_mode;
 };
 
-typedef union efi_boot_services efi_boot_services_t;
-
-typedef struct {
-	efi_table_hdr_t hdr;
-	u32 fw_vendor;
-	u32 fw_revision;
-	u32 con_in_handle;
-	u32 con_in;
-	u32 con_out_handle;
-	u32 con_out;
-	u32 stderr_handle;
-	u32 stderr;
-	u32 runtime;
-	u32 boottime;
-	u32 nr_tables;
-	u32 tables;
-} efi_system_table_32_t;
-
-typedef struct {
-	u16 scan_code;
-	efi_char16_t unicode_char;
-} efi_input_key_t;
-
-union efi_simple_text_input_protocol;
-
-typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
-
-union efi_simple_text_input_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
-		efi_event_t wait_for_key;
-	};
-	struct {
-		u32 reset;
-		u32 read_keystroke;
-		u32 wait_for_key;
-	} mixed_mode;
+struct dev_header {
+	u32 len;
+	u32 prop_count;
+	struct efi_dev_path path[0];
 };
 
-union efi_simple_text_output_protocol;
-
-typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
-
-union efi_simple_text_output_protocol {
-	struct {
-		void *reset;
-		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
-		void *test_string;
-	};
-	struct {
-		u32 reset;
-		u32 output_string;
-		u32 test_string;
-	} mixed_mode;
+struct properties_header {
+	u32 len;
+	u32 version;
+	u32 dev_count;
+	struct dev_header dev_header[0];
 };
 
-typedef union {
-	struct {
-		efi_table_hdr_t hdr;
-		long unsigned int fw_vendor;
-		u32 fw_revision;
-		long unsigned int con_in_handle;
-		efi_simple_text_input_protocol_t *con_in;
-		long unsigned int con_out_handle;
-		efi_simple_text_output_protocol_t *con_out;
-		long unsigned int stderr_handle;
-		long unsigned int stderr;
-		efi_runtime_services_t *runtime;
-		efi_boot_services_t *boottime;
-		long unsigned int nr_tables;
-		long unsigned int tables;
-	};
-	efi_system_table_32_t mixed_mode;
-} efi_system_table_t;
-
-struct cper_arm_err_info {
-	u8 version;
-	u8 length;
-	u16 validation_bits;
-	u8 type;
-	u16 multiple_error;
-	u8 flags;
-	u64 error_info;
-	u64 virt_fault_addr;
-	u64 physical_fault_addr;
-} __attribute__((packed));
-
-struct cper_arm_ctx_info {
-	u16 version;
-	u16 type;
-	u32 size;
-};
-
-typedef long unsigned int psci_fn(long unsigned int, long unsigned int, long unsigned int, long unsigned int);
-
-enum psci_function {
-	PSCI_FN_CPU_SUSPEND = 0,
-	PSCI_FN_CPU_ON = 1,
-	PSCI_FN_CPU_OFF = 2,
-	PSCI_FN_MIGRATE = 3,
-	PSCI_FN_MAX = 4,
-};
-
-typedef int (*psci_initcall_t)(const struct device_node *);
-
-struct mrq_ping_request {
-	uint32_t challenge;
-};
-
-struct mrq_ping_response {
-	uint32_t reply;
-};
-
-struct mrq_query_tag_request {
-	uint32_t addr;
-};
-
-struct mrq_query_fw_tag_response {
-	uint8_t tag[32];
-};
-
-struct mrq_query_abi_request {
-	uint32_t mrq;
-};
-
-struct mrq_query_abi_response {
-	int32_t status;
-};
-
-struct tegra_ivc_header;
-
-struct tegra_ivc {
-	struct device *peer;
-	struct {
-		struct tegra_ivc_header *channel;
-		unsigned int position;
-		dma_addr_t phys;
-	} rx;
-	struct {
-		struct tegra_ivc_header *channel;
-		unsigned int position;
-		dma_addr_t phys;
-	} tx;
-	void (*notify)(struct tegra_ivc *, void *);
-	void *notify_data;
-	unsigned int num_frames;
-	size_t frame_size;
-};
-
-typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int, struct tegra_bpmp_channel *, void *);
-
-struct tegra_bpmp_mrq {
+struct efi_embedded_fw {
 	struct list_head list;
-	unsigned int mrq;
-	tegra_bpmp_mrq_handler_t handler;
-	void *data;
-};
-
-struct tegra210_bpmp {
-	void *atomics;
-	void *arb_sema;
-	struct irq_data *tx_irq_data;
-};
-
-struct tegra186_bpmp {
-	struct tegra_bpmp *parent;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} tx;
-	struct {
-		struct gen_pool *pool;
-		dma_addr_t phys;
-		void *virt;
-	} rx;
-	struct {
-		struct mbox_client client;
-		struct mbox_chan___2 *channel;
-	} mbox;
-};
-
-enum mrq_debugfs_commands {
-	CMD_DEBUGFS_READ = 1,
-	CMD_DEBUGFS_WRITE = 2,
-	CMD_DEBUGFS_DUMPDIR = 3,
-	CMD_DEBUGFS_MAX = 4,
-};
-
-struct cmd_debugfs_fileop_request {
-	uint32_t fnameaddr;
-	uint32_t fnamelen;
-	uint32_t dataaddr;
-	uint32_t datalen;
-};
-
-struct cmd_debugfs_dumpdir_request {
-	uint32_t dataaddr;
-	uint32_t datalen;
-};
-
-struct cmd_debugfs_fileop_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct cmd_debugfs_dumpdir_response {
-	uint32_t reserved;
-	uint32_t nbytes;
-};
-
-struct mrq_debugfs_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debugfs_fileop_request fop;
-		struct cmd_debugfs_dumpdir_request dumpdir;
-	};
-};
-
-struct mrq_debugfs_response {
-	int32_t reserved;
-	union {
-		struct cmd_debugfs_fileop_response fop;
-		struct cmd_debugfs_dumpdir_response dumpdir;
-	};
-};
-
-enum mrq_debug_commands {
-	CMD_DEBUG_OPEN_RO = 0,
-	CMD_DEBUG_OPEN_WO = 1,
-	CMD_DEBUG_READ = 2,
-	CMD_DEBUG_WRITE = 3,
-	CMD_DEBUG_CLOSE = 4,
-	CMD_DEBUG_MAX = 5,
-};
-
-struct cmd_debug_fopen_request {
-	char name[116];
-};
-
-struct cmd_debug_fopen_response {
-	uint32_t fd;
-	uint32_t datalen;
-};
-
-struct cmd_debug_fread_request {
-	uint32_t fd;
-};
-
-struct cmd_debug_fread_response {
-	uint32_t readlen;
-	char data[116];
-};
-
-struct cmd_debug_fwrite_request {
-	uint32_t fd;
-	uint32_t datalen;
-	char data[108];
-};
-
-struct cmd_debug_fclose_request {
-	uint32_t fd;
-};
-
-struct mrq_debug_request {
-	uint32_t cmd;
-	union {
-		struct cmd_debug_fopen_request fop;
-		struct cmd_debug_fread_request frd;
-		struct cmd_debug_fwrite_request fwr;
-		struct cmd_debug_fclose_request fcl;
-	};
-};
-
-struct mrq_debug_response {
-	union {
-		struct cmd_debug_fopen_response fop;
-		struct cmd_debug_fread_response frd;
-	};
-};
-
-struct seqbuf {
-	char *buf;
-	size_t pos;
-	size_t size;
-};
-
-struct tegra_ivc_header {
-	union {
-		struct {
-			u32 count;
-			u32 state;
-		};
-		u8 pad[64];
-	} tx;
-	union {
-		u32 count;
-		u8 pad[64];
-	} rx;
-};
-
-enum tegra_ivc_state {
-	TEGRA_IVC_STATE_ESTABLISHED = 0,
-	TEGRA_IVC_STATE_SYNC = 1,
-	TEGRA_IVC_STATE_ACK = 2,
-};
-
-struct of_timer_irq {
-	int irq;
-	int index;
-	int percpu;
 	const char *name;
-	long unsigned int flags;
-	irq_handler_t handler;
+	const u8 *data;
+	size_t length;
 };
 
-struct of_timer_base {
-	void *base;
+struct efi_embedded_fw_desc {
 	const char *name;
-	int index;
-};
-
-struct of_timer_clk {
-	struct clk *clk;
-	const char *name;
-	int index;
-	long unsigned int rate;
-	long unsigned int period;
-};
-
-struct timer_of {
-	unsigned int flags;
-	struct device_node *np;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device clkevt;
-	struct of_timer_base of_base;
-	struct of_timer_irq of_irq;
-	struct of_timer_clk of_clk;
-	void *private_data;
-	long: 64;
-	long: 64;
-};
-
-typedef int (*of_init_fn_1_ret)(struct device_node *);
-
-struct clocksource_mmio {
-	void *reg;
-	struct clocksource clksrc;
-};
-
-struct rk_timer {
-	void *base;
-	void *ctrl;
-	struct clk *clk;
-	struct clk *pclk;
-	u32 freq;
-	int irq;
-};
-
-struct rk_clkevt {
-	struct clock_event_device ce;
-	struct rk_timer timer;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-enum arch_timer_reg {
-	ARCH_TIMER_REG_CTRL = 0,
-	ARCH_TIMER_REG_TVAL = 1,
-};
-
-enum arch_timer_spi_nr {
-	ARCH_TIMER_PHYS_SPI = 0,
-	ARCH_TIMER_VIRT_SPI = 1,
-	ARCH_TIMER_MAX_TIMER_SPI = 2,
-};
-
-enum arch_timer_erratum_match_type {
-	ate_match_dt = 0,
-	ate_match_local_cap_id = 1,
-	ate_match_acpi_oem_info = 2,
-};
-
-struct arch_timer_erratum_workaround {
-	enum arch_timer_erratum_match_type match_type;
-	const void *id;
-	const char *desc;
-	u32 (*read_cntp_tval_el0)();
-	u32 (*read_cntv_tval_el0)();
-	u64 (*read_cntpct_el0)();
-	u64 (*read_cntvct_el0)();
-	int (*set_next_event_phys)(long unsigned int, struct clock_event_device *);
-	int (*set_next_event_virt)(long unsigned int, struct clock_event_device *);
-	bool disable_compat_vdso;
-};
-
-struct arch_timer {
-	void *base;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct clock_event_device evt;
-};
-
-struct ate_acpi_oem_info {
-	char oem_id[7];
-	char oem_table_id[9];
-	u32 oem_revision;
-};
-
-typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, const void *);
-
-struct sp804_timer {
-	int load;
-	int load_h;
-	int value;
-	int value_h;
-	int ctrl;
-	int intclr;
-	int ris;
-	int mis;
-	int bgload;
-	int bgload_h;
-	int timer_base[2];
-	int width;
-};
-
-struct sp804_clkevt {
-	void *base;
-	void *load;
-	void *load_h;
-	void *value;
-	void *value_h;
-	void *ctrl;
-	void *intclr;
-	void *ris;
-	void *mis;
-	void *bgload;
-	void *bgload_h;
-	long unsigned int reload;
-	int width;
-};
-
-struct alias_prop {
-	struct list_head link;
-	const char *alias;
-	struct device_node *np;
-	int id;
-	char stem[0];
-};
-
-struct of_endpoint {
-	unsigned int port;
-	unsigned int id;
-	const struct device_node *local_node;
-};
-
-struct supplier_bindings {
-	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
-};
-
-struct of_changeset_entry {
-	struct list_head node;
-	long unsigned int action;
-	struct device_node *np;
-	struct property *prop;
-	struct property *old_prop;
-};
-
-struct of_changeset {
-	struct list_head entries;
-};
-
-struct of_bus___2 {
-	void (*count_cells)(const void *, int, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-};
-
-struct of_bus {
-	const char *name;
-	const char *addresses;
-	int (*match)(struct device_node *);
-	void (*count_cells)(struct device_node *, int *, int *);
-	u64 (*map)(__be32 *, const __be32 *, int, int, int);
-	int (*translate)(__be32 *, u64, int);
-	bool has_flags;
-	unsigned int (*get_flags)(const __be32 *);
-};
-
-struct of_intc_desc {
-	struct list_head list;
-	of_irq_init_cb_t irq_init_cb;
-	struct device_node *dev;
-	struct device_node *interrupt_parent;
-};
-
-struct rmem_assigned_device {
-	struct device *dev;
-	struct reserved_mem *rmem;
-	struct list_head list;
-};
-
-enum of_overlay_notify_action {
-	OF_OVERLAY_PRE_APPLY = 0,
-	OF_OVERLAY_POST_APPLY = 1,
-	OF_OVERLAY_PRE_REMOVE = 2,
-	OF_OVERLAY_POST_REMOVE = 3,
-};
-
-struct of_overlay_notify_data {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct target {
-	struct device_node *np;
-	bool in_livetree;
-};
-
-struct fragment {
-	struct device_node *overlay;
-	struct device_node *target;
-};
-
-struct overlay_changeset {
-	int id;
-	struct list_head ovcs_list;
-	const void *fdt;
-	struct device_node *overlay_tree;
-	int count;
-	struct fragment *fragments;
-	bool symbols_fragment;
-	struct of_changeset cset;
-};
-
-enum vchiq_reason {
-	VCHIQ_SERVICE_OPENED = 0,
-	VCHIQ_SERVICE_CLOSED = 1,
-	VCHIQ_MESSAGE_AVAILABLE = 2,
-	VCHIQ_BULK_TRANSMIT_DONE = 3,
-	VCHIQ_BULK_RECEIVE_DONE = 4,
-	VCHIQ_BULK_TRANSMIT_ABORTED = 5,
-	VCHIQ_BULK_RECEIVE_ABORTED = 6,
-};
-
-enum vchiq_status {
-	VCHIQ_ERROR = 4294967295,
-	VCHIQ_SUCCESS = 0,
-	VCHIQ_RETRY = 1,
-};
-
-enum vchiq_bulk_mode {
-	VCHIQ_BULK_MODE_CALLBACK = 0,
-	VCHIQ_BULK_MODE_BLOCKING = 1,
-	VCHIQ_BULK_MODE_NOCALLBACK = 2,
-	VCHIQ_BULK_MODE_WAITING = 3,
-};
-
-enum vchiq_service_option {
-	VCHIQ_SERVICE_OPTION_AUTOCLOSE = 0,
-	VCHIQ_SERVICE_OPTION_SLOT_QUOTA = 1,
-	VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA = 2,
-	VCHIQ_SERVICE_OPTION_SYNCHRONOUS = 3,
-	VCHIQ_SERVICE_OPTION_TRACE = 4,
-};
-
-struct vchiq_header {
-	int msgid;
-	unsigned int size;
-	char data[0];
-};
-
-struct vchiq_service_base {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-};
-
-struct vchiq_service_params_kernel {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-typedef uint32_t BITSET_T;
-
-enum {
-	DEBUG_ENTRIES = 0,
-	DEBUG_SLOT_HANDLER_COUNT = 1,
-	DEBUG_SLOT_HANDLER_LINE = 2,
-	DEBUG_PARSE_LINE = 3,
-	DEBUG_PARSE_HEADER = 4,
-	DEBUG_PARSE_MSGID = 5,
-	DEBUG_AWAIT_COMPLETION_LINE = 6,
-	DEBUG_DEQUEUE_MESSAGE_LINE = 7,
-	DEBUG_SERVICE_CALLBACK_LINE = 8,
-	DEBUG_MSG_QUEUE_FULL_COUNT = 9,
-	DEBUG_COMPLETION_QUEUE_FULL_COUNT = 10,
-	DEBUG_MAX = 11,
-};
-
-enum vchiq_connstate {
-	VCHIQ_CONNSTATE_DISCONNECTED = 0,
-	VCHIQ_CONNSTATE_CONNECTING = 1,
-	VCHIQ_CONNSTATE_CONNECTED = 2,
-	VCHIQ_CONNSTATE_PAUSING = 3,
-	VCHIQ_CONNSTATE_PAUSE_SENT = 4,
-	VCHIQ_CONNSTATE_PAUSED = 5,
-	VCHIQ_CONNSTATE_RESUMING = 6,
-	VCHIQ_CONNSTATE_PAUSE_TIMEOUT = 7,
-	VCHIQ_CONNSTATE_RESUME_TIMEOUT = 8,
-};
-
-enum {
-	VCHIQ_SRVSTATE_FREE = 0,
-	VCHIQ_SRVSTATE_HIDDEN = 1,
-	VCHIQ_SRVSTATE_LISTENING = 2,
-	VCHIQ_SRVSTATE_OPENING = 3,
-	VCHIQ_SRVSTATE_OPEN = 4,
-	VCHIQ_SRVSTATE_OPENSYNC = 5,
-	VCHIQ_SRVSTATE_CLOSESENT = 6,
-	VCHIQ_SRVSTATE_CLOSERECVD = 7,
-	VCHIQ_SRVSTATE_CLOSEWAIT = 8,
-	VCHIQ_SRVSTATE_CLOSED = 9,
-};
-
-enum {
-	VCHIQ_POLL_TERMINATE = 0,
-	VCHIQ_POLL_REMOVE = 1,
-	VCHIQ_POLL_TXNOTIFY = 2,
-	VCHIQ_POLL_RXNOTIFY = 3,
-	VCHIQ_POLL_COUNT = 4,
-};
-
-enum vchiq_bulk_dir {
-	VCHIQ_BULK_TRANSMIT = 0,
-	VCHIQ_BULK_RECEIVE = 1,
-};
-
-typedef void (*vchiq_userdata_term)(void *);
-
-struct vchiq_bulk {
-	short int mode;
-	short int dir;
-	void *userdata;
-	dma_addr_t data;
-	int size;
-	void *remote_data;
-	int remote_size;
-	int actual;
-};
-
-struct vchiq_bulk_queue {
-	int local_insert;
-	int remote_insert;
-	int process;
-	int remote_notify;
-	int remove;
-	struct vchiq_bulk bulks[4];
-};
-
-struct remote_event {
-	int armed;
-	int fired;
-	u32 __unused;
-};
-
-struct vchiq_slot {
-	char data[4096];
-};
-
-struct vchiq_slot_info {
-	short int use_count;
-	short int release_count;
-};
-
-struct service_stats_struct {
-	int quota_stalls;
-	int slot_stalls;
-	int bulk_stalls;
-	int error_count;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int bulk_tx_count;
-	int bulk_rx_count;
-	int bulk_aborted_count;
-	uint64_t ctrl_tx_bytes;
-	uint64_t ctrl_rx_bytes;
-	uint64_t bulk_tx_bytes;
-	uint64_t bulk_rx_bytes;
-};
-
-struct vchiq_state;
-
-struct vchiq_instance;
-
-struct vchiq_service {
-	struct vchiq_service_base base;
-	unsigned int handle;
-	struct kref ref_count;
-	struct callback_head rcu;
-	int srvstate;
-	vchiq_userdata_term userdata_term;
-	unsigned int localport;
-	unsigned int remoteport;
-	int public_fourcc;
-	int client_id;
-	char auto_close;
-	char sync;
-	char closing;
-	char trace;
-	atomic_t poll_flags;
-	short int version;
-	short int version_min;
-	short int peer_version;
-	struct vchiq_state *state;
-	struct vchiq_instance *instance;
-	int service_use_count;
-	struct vchiq_bulk_queue bulk_tx;
-	struct vchiq_bulk_queue bulk_rx;
-	struct completion remove_event;
-	struct completion bulk_remove_event;
-	struct mutex bulk_mutex;
-	struct service_stats_struct stats;
-	int msg_queue_read;
-	int msg_queue_write;
-	struct completion msg_queue_pop;
-	struct completion msg_queue_push;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct state_stats_struct {
-	int slot_stalls;
-	int data_stalls;
-	int ctrl_tx_count;
-	int ctrl_rx_count;
-	int error_count;
-};
-
-struct vchiq_service_quota {
-	short unsigned int slot_quota;
-	short unsigned int slot_use_count;
-	short unsigned int message_quota;
-	short unsigned int message_use_count;
-	struct completion quota_event;
-	int previous_tx_index;
-};
-
-struct opaque_platform_state;
-
-struct vchiq_shared_state;
-
-struct vchiq_state {
-	int id;
-	int initialised;
-	enum vchiq_connstate conn_state;
-	short int version_common;
-	struct vchiq_shared_state *local;
-	struct vchiq_shared_state *remote;
-	struct vchiq_slot *slot_data;
-	short unsigned int default_slot_quota;
-	short unsigned int default_message_quota;
-	struct completion connect;
-	struct mutex mutex;
-	struct vchiq_instance **instance;
-	struct task_struct *slot_handler_thread;
-	struct task_struct *recycle_thread;
-	struct task_struct *sync_thread;
-	wait_queue_head_t trigger_event;
-	wait_queue_head_t recycle_event;
-	wait_queue_head_t sync_trigger_event;
-	wait_queue_head_t sync_release_event;
-	char *tx_data;
-	char *rx_data;
-	struct vchiq_slot_info *rx_info;
-	struct mutex slot_mutex;
-	struct mutex recycle_mutex;
-	struct mutex sync_mutex;
-	struct mutex bulk_transfer_mutex;
-	int rx_pos;
-	int local_tx_pos;
-	int slot_queue_available;
-	int poll_needed;
-	int previous_data_index;
-	short unsigned int data_use_count;
-	short unsigned int data_quota;
-	atomic_t poll_services[128];
-	int unused_service;
-	struct completion slot_available_event;
-	struct completion slot_remove_event;
-	struct completion data_quota_event;
-	struct state_stats_struct stats;
-	struct vchiq_service *services[4096];
-	struct vchiq_service_quota service_quotas[4096];
-	struct vchiq_slot_info slot_info[128];
-	struct opaque_platform_state *platform_state;
-};
-
-struct vchiq_shared_state {
-	int initialised;
-	int slot_first;
-	int slot_last;
-	int slot_sync;
-	struct remote_event trigger;
-	int tx_pos;
-	struct remote_event recycle;
-	int slot_queue_recycle;
-	struct remote_event sync_trigger;
-	struct remote_event sync_release;
-	int slot_queue[64];
-	int debug[11];
-};
-
-struct vchiq_slot_zero {
-	int magic;
-	short int version;
-	short int version_min;
-	int slot_zero_size;
-	int slot_size;
-	int max_slots;
-	int max_slots_per_side;
-	int platform_data[2];
-	struct vchiq_shared_state master;
-	struct vchiq_shared_state slave;
-	struct vchiq_slot_info slots[128];
-};
-
-struct bulk_waiter {
-	struct vchiq_bulk *bulk;
-	struct completion event;
-	int actual;
-};
-
-struct vchiq_config {
-	unsigned int max_msg_size;
-	unsigned int bulk_threshold;
-	unsigned int max_outstanding_bulks;
-	unsigned int max_services;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_open_payload {
-	int fourcc;
-	int client_id;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_openack_payload {
-	short int version;
-};
-
-enum {
-	QMFLAGS_IS_BLOCKING = 1,
-	QMFLAGS_NO_MUTEX_LOCK = 2,
-	QMFLAGS_NO_MUTEX_UNLOCK = 4,
-};
-
-struct vchiq_element {
-	const void *data;
-	unsigned int size;
-};
-
-struct vchiq_completion_data_kernel {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_debugfs_node {
-	struct dentry *dentry;
-};
-
-struct vchiq_instance {
-	struct vchiq_state *state;
-	struct vchiq_completion_data_kernel completions[128];
-	int completion_insert;
-	int completion_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct mutex completion_mutex;
-	int connected;
-	int closing;
-	int pid;
-	int mark;
-	int use_close_delivered;
-	int trace;
-	struct list_head bulk_waiter_list;
-	struct mutex bulk_waiter_list_mutex;
-	struct vchiq_debugfs_node debugfs_node;
-};
-
-struct vchiq_service_params {
-	int fourcc;
-	enum vchiq_status (*callback)(enum vchiq_reason, struct vchiq_header *, unsigned int, void *);
-	void *userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service {
-	struct vchiq_service_params params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_queue_message {
-	unsigned int handle;
-	unsigned int count;
-	const struct vchiq_element *elements;
-};
-
-struct vchiq_queue_bulk_transfer {
-	unsigned int handle;
-	void *data;
-	unsigned int size;
-	void *userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_completion_data {
-	enum vchiq_reason reason;
-	struct vchiq_header *header;
-	void *service_userdata;
-	void *bulk_userdata;
-};
-
-struct vchiq_await_completion {
-	unsigned int count;
-	struct vchiq_completion_data *buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	void **msgbufs;
-};
-
-struct vchiq_dequeue_message {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	void *buf;
-};
-
-struct vchiq_get_config {
-	unsigned int config_size;
-	struct vchiq_config *pconfig;
-};
-
-struct vchiq_set_service_option {
-	unsigned int handle;
-	enum vchiq_service_option option;
-	int value;
-};
-
-enum USE_TYPE_E {
-	USE_TYPE_SERVICE = 0,
-	USE_TYPE_VCHIQ = 1,
-};
-
-struct vchiq_arm_state {
-	struct task_struct *ka_thread;
-	struct completion ka_evt;
-	atomic_t ka_use_count;
-	atomic_t ka_use_ack_count;
-	atomic_t ka_release_count;
-	rwlock_t susp_res_lock;
-	struct vchiq_state *state;
-	int videocore_use_count;
-	int peer_use_count;
-	int first_connect;
-};
-
-struct vchiq_drvdata {
-	const unsigned int cache_line_size;
-	struct rpi_firmware *fw;
-};
-
-struct user_service {
-	struct vchiq_service *service;
-	void *userdata;
-	struct vchiq_instance *instance;
-	char is_vchi;
-	char dequeue_pending;
-	char close_pending;
-	int message_available_pos;
-	int msg_insert;
-	int msg_remove;
-	struct completion insert_event;
-	struct completion remove_event;
-	struct completion close_event;
-	struct vchiq_header *msg_queue[128];
-};
-
-struct bulk_waiter_node {
-	struct bulk_waiter bulk_waiter;
-	int pid;
-	struct list_head list;
-};
-
-struct dump_context {
-	char *buf;
-	size_t actual;
-	size_t space;
-	loff_t offset;
-};
-
-struct vchiq_io_copy_callback_context {
-	struct vchiq_element *element;
-	size_t element_offset;
-	long unsigned int elements_to_go;
-};
-
-struct vchiq_completion_data32 {
-	enum vchiq_reason reason;
-	compat_uptr_t header;
-	compat_uptr_t service_userdata;
-	compat_uptr_t bulk_userdata;
-};
-
-struct vchiq_service_params32 {
-	int fourcc;
-	compat_uptr_t callback;
-	compat_uptr_t userdata;
-	short int version;
-	short int version_min;
-};
-
-struct vchiq_create_service32 {
-	struct vchiq_service_params32 params;
-	int is_open;
-	int is_vchi;
-	unsigned int handle;
-};
-
-struct vchiq_element32 {
-	compat_uptr_t data;
-	unsigned int size;
-};
-
-struct vchiq_queue_message32 {
-	unsigned int handle;
-	unsigned int count;
-	compat_uptr_t elements;
-};
-
-struct vchiq_queue_bulk_transfer32 {
-	unsigned int handle;
-	compat_uptr_t data;
-	unsigned int size;
-	compat_uptr_t userdata;
-	enum vchiq_bulk_mode mode;
-};
-
-struct vchiq_await_completion32 {
-	unsigned int count;
-	compat_uptr_t buf;
-	unsigned int msgbufsize;
-	unsigned int msgbufcount;
-	compat_uptr_t msgbufs;
-};
-
-struct vchiq_dequeue_message32 {
-	unsigned int handle;
-	int blocking;
-	unsigned int bufsize;
-	compat_uptr_t buf;
-};
-
-struct vchiq_get_config32 {
-	unsigned int config_size;
-	compat_uptr_t pconfig;
-};
-
-struct service_data_struct {
-	int fourcc;
-	int clientid;
-	int use_count;
-};
-
-struct pagelist {
+	u8 prefix[8];
 	u32 length;
-	u16 type;
-	u16 offset;
-	u32 addrs[1];
+	u8 sha256[32];
 };
 
-struct vchiq_2835_state {
-	int inited;
-	struct vchiq_arm_state arm_state;
+struct efi_mokvar_sysfs_attr {
+	struct bin_attribute bin_attr;
+	struct list_head node;
 };
 
-struct vchiq_pagelist_info {
-	struct pagelist *pagelist;
-	size_t pagelist_buffer_size;
-	dma_addr_t dma_addr;
-	enum dma_data_direction dma_dir;
-	unsigned int num_pages;
-	unsigned int pages_need_release;
-	struct page **pages;
-	struct scatterlist *scatterlist;
-	unsigned int scatterlist_mapped;
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
 };
 
-struct vchiq_debugfs_log_entry {
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+enum {
+	M_I17 = 0,
+	M_I20 = 1,
+	M_I20_SR = 2,
+	M_I24 = 3,
+	M_I24_8_1 = 4,
+	M_I24_10_1 = 5,
+	M_I27_11_1 = 6,
+	M_MINI = 7,
+	M_MINI_3_1 = 8,
+	M_MINI_4_1 = 9,
+	M_MB = 10,
+	M_MB_2 = 11,
+	M_MB_3 = 12,
+	M_MB_5_1 = 13,
+	M_MB_6_1 = 14,
+	M_MB_7_1 = 15,
+	M_MB_SR = 16,
+	M_MBA = 17,
+	M_MBA_3 = 18,
+	M_MBP = 19,
+	M_MBP_2 = 20,
+	M_MBP_2_2 = 21,
+	M_MBP_SR = 22,
+	M_MBP_4 = 23,
+	M_MBP_5_1 = 24,
+	M_MBP_5_2 = 25,
+	M_MBP_5_3 = 26,
+	M_MBP_6_1 = 27,
+	M_MBP_6_2 = 28,
+	M_MBP_7_1 = 29,
+	M_MBP_8_2 = 30,
+	M_UNKNOWN = 31,
+};
+
+struct efifb_dmi_info {
+	char *optname;
+	long unsigned int base;
+	int stride;
+	int width;
+	int height;
+	int flags;
+};
+
+enum {
+	OVERRIDE_NONE = 0,
+	OVERRIDE_BASE = 1,
+	OVERRIDE_STRIDE = 2,
+	OVERRIDE_HEIGHT = 4,
+	OVERRIDE_WIDTH = 8,
+};
+
+struct cper_ia_err_info {
+	guid_t err_type;
+	u64 validation_bits;
+	u64 check_info;
+	u64 target_id;
+	u64 requestor_id;
+	u64 responder_id;
+	u64 ip;
+};
+
+enum err_types {
+	ERR_TYPE_CACHE = 0,
+	ERR_TYPE_TLB = 1,
+	ERR_TYPE_BUS = 2,
+	ERR_TYPE_MS = 3,
+	N_ERR_TYPES = 4,
+};
+
+enum ppfear_regs {
+	SPT_PMC_XRAM_PPFEAR0A = 1424,
+	SPT_PMC_XRAM_PPFEAR0B = 1425,
+	SPT_PMC_XRAM_PPFEAR0C = 1426,
+	SPT_PMC_XRAM_PPFEAR0D = 1427,
+	SPT_PMC_XRAM_PPFEAR1A = 1428,
+};
+
+struct pmc_bit_map {
 	const char *name;
-	void *plevel;
+	u32 bit_mask;
 };
 
-typedef void (*VCHIQ_CONNECTED_CALLBACK_T)();
+struct pmc_reg_map {
+	const struct pmc_bit_map **pfear_sts;
+	const struct pmc_bit_map *mphy_sts;
+	const struct pmc_bit_map *pll_sts;
+	const struct pmc_bit_map **slps0_dbg_maps;
+	const struct pmc_bit_map *ltr_show_sts;
+	const struct pmc_bit_map *msr_sts;
+	const struct pmc_bit_map **lpm_sts;
+	const u32 slp_s0_offset;
+	const int slp_s0_res_counter_step;
+	const u32 ltr_ignore_offset;
+	const int regmap_length;
+	const u32 ppfear0_offset;
+	const int ppfear_buckets;
+	const u32 pm_cfg_offset;
+	const int pm_read_disable_bit;
+	const u32 slps0_dbg_offset;
+	const u32 ltr_ignore_max;
+	const u32 pm_vric1_offset;
+	const int lpm_num_maps;
+	const int lpm_num_modes;
+	const int lpm_res_counter_step_x2;
+	const u32 lpm_sts_latch_en_offset;
+	const u32 lpm_en_offset;
+	const u32 lpm_priority_offset;
+	const u32 lpm_residency_offset;
+	const u32 lpm_status_offset;
+	const u32 lpm_live_status_offset;
+	const u32 etr3_offset;
+};
+
+struct pmc_dev {
+	u32 base_addr;
+	void *regbase;
+	const struct pmc_reg_map *map;
+	struct dentry *dbgfs_dir;
+	int pmc_xram_read_bit;
+	struct mutex lock;
+	bool check_counters;
+	u64 pc10_counter;
+	u64 s0ix_counter;
+	int num_lpm_modes;
+	int lpm_en_modes[8];
+	u32 *lpm_req_regs;
+};
+
+struct ts_dmi_data {
+	struct efi_embedded_fw_desc embedded_fw;
+	const char *acpi_name;
+	const struct property_entry *properties;
+};
+
+struct intel_scu_ipc_data {
+	struct resource mem;
+	int irq;
+};
+
+struct intel_scu_ipc_dev___2 {
+	struct device dev;
+	struct resource mem;
+	struct module *owner;
+	int irq;
+	void *ipc_base;
+	struct completion cmd_complete;
+};
+
+struct intel_scu_ipc_devres {
+	struct intel_scu_ipc_dev___2 *scu;
+};
+
+enum simatic_ipc_station_ids {
+	SIMATIC_IPC_INVALID_STATION_ID = 0,
+	SIMATIC_IPC_IPC227D = 1281,
+	SIMATIC_IPC_IPC427D = 1793,
+	SIMATIC_IPC_IPC227E = 2305,
+	SIMATIC_IPC_IPC277E = 2306,
+	SIMATIC_IPC_IPC427E = 2561,
+	SIMATIC_IPC_IPC477E = 2562,
+	SIMATIC_IPC_IPC127E = 3329,
+};
+
+struct pmc_reg_map___2 {
+	const struct pmc_bit_map *d3_sts_0;
+	const struct pmc_bit_map *d3_sts_1;
+	const struct pmc_bit_map *func_dis;
+	const struct pmc_bit_map *func_dis_2;
+	const struct pmc_bit_map *pss;
+};
+
+struct pmc_data {
+	const struct pmc_reg_map___2 *map;
+	const struct pmc_clk *clks;
+};
+
+struct pmc_dev___2 {
+	u32 base_addr;
+	void *regmap;
+	const struct pmc_reg_map___2 *map;
+	struct dentry *dbgfs_dir;
+	bool init;
+};
 
 enum ec_status {
 	EC_RES_SUCCESS = 0,
@@ -94469,6 +115689,10 @@
 	uint32_t flags;
 };
 
+struct ec_response_get_features {
+	uint32_t flags[2];
+};
+
 enum ec_led_colors {
 	EC_LED_COLOR_RED = 0,
 	EC_LED_COLOR_GREEN = 1,
@@ -94704,7 +115928,8 @@
 	EC_MKBP_EVENT_HOST_EVENT64 = 7,
 	EC_MKBP_EVENT_CEC_EVENT = 8,
 	EC_MKBP_EVENT_CEC_MESSAGE = 9,
-	EC_MKBP_EVENT_COUNT = 10,
+	EC_MKBP_EVENT_PCHG = 12,
+	EC_MKBP_EVENT_COUNT = 13,
 };
 
 union ec_response_get_next_data_v1 {
@@ -94750,12 +115975,9 @@
 	uint8_t data[0];
 };
 
-struct platform_device___2;
-
 struct cros_ec_device {
 	const char *phys_name;
 	struct device *dev;
-	bool was_wake_device;
 	struct class *cros_class;
 	int (*cmd_readmem)(struct cros_ec_device *, unsigned int, unsigned int, void *);
 	u16 max_request;
@@ -94782,8 +116004,8 @@
 	u32 last_resume_result;
 	ktime_t last_event_time;
 	struct notifier_block notifier_ready;
-	struct platform_device___2 *ec;
-	struct platform_device___2 *pd;
+	struct platform_device *ec;
+	struct platform_device *pd;
 };
 
 struct cros_ec_debugfs;
@@ -94795,7 +116017,7 @@
 	struct cros_ec_debugfs *debug_info;
 	bool has_kb_wake_angle;
 	u16 cmd_offset;
-	u32 features[2];
+	struct ec_response_get_features features;
 };
 
 struct trace_event_raw_cros_ec_request_start {
@@ -94828,19 +116050,6 @@
 
 typedef void (*btf_trace_cros_ec_request_done)(void *, struct cros_ec_command *, int);
 
-struct platform_mhu_link {
-	int irq;
-	void *tx_reg;
-	void *rx_reg;
-};
-
-struct platform_mhu {
-	void *base;
-	struct platform_mhu_link mlink[3];
-	struct mbox_chan chan[3];
-	struct mbox_controller mbox;
-};
-
 struct acpi_table_pcct {
 	struct acpi_table_header header;
 	u32 flags;
@@ -94853,7 +116062,8 @@
 	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
 	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
 	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
-	ACPI_PCCT_TYPE_RESERVED = 5,
+	ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,
+	ACPI_PCCT_TYPE_RESERVED = 6,
 };
 
 struct acpi_pcct_subspace {
@@ -94869,6 +116079,21 @@
 	u16 min_turnaround_time;
 } __attribute__((packed));
 
+struct acpi_pcct_hw_reduced {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved;
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+} __attribute__((packed));
+
 struct acpi_pcct_hw_reduced_type2 {
 	struct acpi_subtable_header header;
 	u32 platform_interrupt;
@@ -94887,124 +116112,48 @@
 	u64 ack_write_mask;
 } __attribute__((packed));
 
-struct bcm2835_mbox {
-	void *regs;
-	spinlock_t lock;
-	struct mbox_controller controller;
+struct acpi_pcct_ext_pcc_master {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved1;
+	u64 base_address;
+	u32 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u32 min_turnaround_time;
+	struct acpi_generic_address platform_ack_register;
+	u64 ack_preserve_mask;
+	u64 ack_set_mask;
+	u64 reserved2;
+	struct acpi_generic_address cmd_complete_register;
+	u64 cmd_complete_mask;
+	struct acpi_generic_address cmd_update_register;
+	u64 cmd_update_preserve_mask;
+	u64 cmd_update_set_mask;
+	struct acpi_generic_address error_status_register;
+	u64 error_status_mask;
+} __attribute__((packed));
+
+struct pcc_chan_reg {
+	void *vaddr;
+	struct acpi_generic_address *gas;
+	u64 preserve_mask;
+	u64 set_mask;
+	u64 status_mask;
 };
 
-struct slimpro_mbox_chan {
-	struct device *dev;
-	struct mbox_chan *chan;
-	void *reg;
-	int irq;
-	u32 rx_msg[3];
-};
-
-struct slimpro_mbox {
-	struct mbox_controller mb_ctrl;
-	struct slimpro_mbox_chan mc[8];
-	struct mbox_chan chans[8];
-};
-
-struct hi3660_chan_info {
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-};
-
-struct hi3660_mbox {
-	struct device *dev;
-	void *base;
-	struct mbox_chan chan[32];
-	struct hi3660_chan_info mchan[32];
-	struct mbox_controller controller;
-};
-
-struct hi6220_mbox;
-
-struct hi6220_mbox_chan {
-	unsigned int dir;
-	unsigned int dst_irq;
-	unsigned int ack_irq;
-	unsigned int slot;
-	struct hi6220_mbox *parent;
-};
-
-struct hi6220_mbox {
-	struct device *dev;
-	int irq;
-	bool tx_irq_mode;
-	void *ipc;
-	void *base;
-	unsigned int chan_num;
-	struct hi6220_mbox_chan *mchan;
-	void *irq_map_chan[32];
-	struct mbox_chan *chan;
-	struct mbox_controller controller;
-};
-
-struct tegra_hsp;
-
-struct tegra_hsp_channel {
-	struct tegra_hsp *hsp;
-	struct mbox_chan *chan;
-	void *regs;
-};
-
-struct tegra_hsp_soc;
-
-struct tegra_hsp_mailbox;
-
-struct tegra_hsp {
-	struct device *dev;
-	const struct tegra_hsp_soc *soc;
-	struct mbox_controller mbox_db;
-	struct mbox_controller mbox_sm;
-	void *regs;
-	unsigned int doorbell_irq;
-	unsigned int *shared_irqs;
-	unsigned int shared_irq;
-	unsigned int num_sm;
-	unsigned int num_as;
-	unsigned int num_ss;
-	unsigned int num_db;
-	unsigned int num_si;
-	spinlock_t lock;
-	struct list_head doorbells;
-	struct tegra_hsp_mailbox *mailboxes;
-	long unsigned int mask;
-};
-
-struct tegra_hsp_doorbell {
-	struct tegra_hsp_channel channel;
-	struct list_head list;
-	const char *name;
-	unsigned int master;
-	unsigned int index;
-};
-
-struct tegra_hsp_mailbox {
-	struct tegra_hsp_channel channel;
-	unsigned int index;
-	bool producer;
-};
-
-struct tegra_hsp_db_map {
-	const char *name;
-	unsigned int master;
-	unsigned int index;
-};
-
-struct tegra_hsp_soc {
-	const struct tegra_hsp_db_map *map;
-	bool has_per_mb_ie;
-};
-
-struct sun6i_msgbox {
-	struct mbox_controller controller;
-	struct clk *clk;
-	spinlock_t lock;
-	void *regs;
+struct pcc_chan_info {
+	struct pcc_mbox_chan chan;
+	struct pcc_chan_reg db;
+	struct pcc_chan_reg plat_irq_ack;
+	struct pcc_chan_reg cmd_complete;
+	struct pcc_chan_reg cmd_update;
+	struct pcc_chan_reg error;
+	int plat_irq;
 };
 
 struct hwspinlock___2;
@@ -95031,18 +116180,274 @@
 	struct hwspinlock___2 lock[0];
 };
 
-struct regmap_field___2;
+struct resource_table {
+	u32 ver;
+	u32 num;
+	u32 reserved[2];
+	u32 offset[0];
+};
+
+struct fw_rsc_hdr {
+	u32 type;
+	u8 data[0];
+};
+
+enum fw_resource_type {
+	RSC_CARVEOUT = 0,
+	RSC_DEVMEM = 1,
+	RSC_TRACE = 2,
+	RSC_VDEV = 3,
+	RSC_LAST = 4,
+	RSC_VENDOR_START = 128,
+	RSC_VENDOR_END = 512,
+};
+
+struct fw_rsc_carveout {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_devmem {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_trace {
+	u32 da;
+	u32 len;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_vdev_vring {
+	u32 da;
+	u32 align;
+	u32 num;
+	u32 notifyid;
+	u32 pa;
+};
+
+struct fw_rsc_vdev {
+	u32 id;
+	u32 notifyid;
+	u32 dfeatures;
+	u32 gfeatures;
+	u32 config_len;
+	u8 status;
+	u8 num_of_vrings;
+	u8 reserved[2];
+	struct fw_rsc_vdev_vring vring[0];
+};
+
+struct rproc;
+
+struct rproc_mem_entry {
+	void *va;
+	bool is_iomem;
+	dma_addr_t dma;
+	size_t len;
+	u32 da;
+	void *priv;
+	char name[32];
+	struct list_head node;
+	u32 rsc_offset;
+	u32 flags;
+	u32 of_resm_idx;
+	int (*alloc)(struct rproc *, struct rproc_mem_entry *);
+	int (*release)(struct rproc *, struct rproc_mem_entry *);
+};
+
+enum rproc_dump_mechanism {
+	RPROC_COREDUMP_DISABLED = 0,
+	RPROC_COREDUMP_ENABLED = 1,
+	RPROC_COREDUMP_INLINE = 2,
+};
+
+struct rproc_ops;
+
+struct rproc {
+	struct list_head node;
+	struct iommu_domain *domain;
+	const char *name;
+	const char *firmware;
+	void *priv;
+	struct rproc_ops *ops;
+	struct device dev;
+	atomic_t power;
+	unsigned int state;
+	enum rproc_dump_mechanism dump_conf;
+	struct mutex lock;
+	struct dentry *dbg_dir;
+	struct list_head traces;
+	int num_traces;
+	struct list_head carveouts;
+	struct list_head mappings;
+	u64 bootaddr;
+	struct list_head rvdevs;
+	struct list_head subdevs;
+	struct idr notifyids;
+	int index;
+	struct work_struct crash_handler;
+	unsigned int crash_cnt;
+	bool recovery_disabled;
+	int max_notifyid;
+	struct resource_table *table_ptr;
+	struct resource_table *clean_table;
+	struct resource_table *cached_table;
+	size_t table_sz;
+	bool has_iommu;
+	bool auto_boot;
+	bool sysfs_read_only;
+	struct list_head dump_segments;
+	int nb_vdev;
+	u8 elf_class;
+	u16 elf_machine;
+	struct cdev cdev;
+	bool cdev_put_on_release;
+};
+
+enum rsc_handling_status {
+	RSC_HANDLED = 0,
+	RSC_IGNORED = 1,
+};
+
+struct rproc_ops {
+	int (*prepare)(struct rproc *);
+	int (*unprepare)(struct rproc *);
+	int (*start)(struct rproc *);
+	int (*stop)(struct rproc *);
+	int (*attach)(struct rproc *);
+	int (*detach)(struct rproc *);
+	void (*kick)(struct rproc *, int);
+	void * (*da_to_va)(struct rproc *, u64, size_t, bool *);
+	int (*parse_fw)(struct rproc *, const struct firmware *);
+	int (*handle_rsc)(struct rproc *, u32, void *, int, int);
+	struct resource_table * (*find_loaded_rsc_table)(struct rproc *, const struct firmware *);
+	struct resource_table * (*get_loaded_rsc_table)(struct rproc *, size_t *);
+	int (*load)(struct rproc *, const struct firmware *);
+	int (*sanity_check)(struct rproc *, const struct firmware *);
+	u64 (*get_boot_addr)(struct rproc *, const struct firmware *);
+	long unsigned int (*panic)(struct rproc *);
+	void (*coredump)(struct rproc *);
+};
+
+enum rproc_state {
+	RPROC_OFFLINE = 0,
+	RPROC_SUSPENDED = 1,
+	RPROC_RUNNING = 2,
+	RPROC_CRASHED = 3,
+	RPROC_DELETED = 4,
+	RPROC_ATTACHED = 5,
+	RPROC_DETACHED = 6,
+	RPROC_LAST = 7,
+};
+
+enum rproc_crash_type {
+	RPROC_MMUFAULT = 0,
+	RPROC_WATCHDOG = 1,
+	RPROC_FATAL_ERROR = 2,
+};
+
+struct rproc_subdev {
+	struct list_head node;
+	int (*prepare)(struct rproc_subdev *);
+	int (*start)(struct rproc_subdev *);
+	void (*stop)(struct rproc_subdev *, bool);
+	void (*unprepare)(struct rproc_subdev *);
+};
+
+struct rproc_vdev;
+
+struct rproc_vring {
+	void *va;
+	int len;
+	u32 da;
+	u32 align;
+	int notifyid;
+	struct rproc_vdev *rvdev;
+	struct virtqueue *vq;
+};
+
+struct rproc_vdev {
+	struct kref refcount;
+	struct rproc_subdev subdev;
+	struct device dev;
+	unsigned int id;
+	struct list_head node;
+	struct rproc *rproc;
+	struct rproc_vring vring[2];
+	u32 rsc_offset;
+	u32 index;
+};
+
+struct rproc_debug_trace {
+	struct rproc *rproc;
+	struct dentry *tfile;
+	struct list_head node;
+	struct rproc_mem_entry trace_mem;
+};
+
+typedef int (*rproc_handle_resource_t)(struct rproc *, void *, int, int);
+
+struct rproc_dump_segment {
+	struct list_head node;
+	dma_addr_t da;
+	size_t size;
+	void *priv;
+	void (*dump)(struct rproc *, struct rproc_dump_segment *, void *, size_t, size_t);
+	loff_t offset;
+};
+
+struct rproc_coredump_state {
+	struct rproc *rproc;
+	void *header;
+	struct completion dump_done;
+};
+
+enum {
+	VMGENID_SIZE = 16,
+};
+
+struct vmgenid_state {
+	u8 *next_id;
+	u8 this_id[16];
+};
 
 struct devfreq_freqs {
 	long unsigned int old;
 	long unsigned int new;
 };
 
+enum devfreq_parent_dev_type {
+	DEVFREQ_PARENT_DEV = 0,
+	CPUFREQ_PARENT_DEV = 1,
+};
+
 struct devfreq_passive_data {
 	struct devfreq *parent;
 	int (*get_target_freq)(struct devfreq *, long unsigned int *);
+	enum devfreq_parent_dev_type parent_type;
 	struct devfreq *this;
 	struct notifier_block nb;
+	struct list_head cpu_data_list;
+};
+
+struct trace_event_raw_devfreq_frequency {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	long unsigned int freq;
+	long unsigned int prev_freq;
+	long unsigned int busy_time;
+	long unsigned int total_time;
+	char __data[0];
 };
 
 struct trace_event_raw_devfreq_monitor {
@@ -95055,10 +116460,16 @@
 	char __data[0];
 };
 
+struct trace_event_data_offsets_devfreq_frequency {
+	u32 dev_name;
+};
+
 struct trace_event_data_offsets_devfreq_monitor {
 	u32 dev_name;
 };
 
+typedef void (*btf_trace_devfreq_frequency)(void *, struct devfreq *, long unsigned int, long unsigned int);
+
 typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
 
 struct devfreq_notifier_devres {
@@ -95109,6 +116520,16 @@
 	bool valid;
 };
 
+struct devfreq_cpu_data {
+	struct list_head node;
+	struct device *dev;
+	unsigned int first_cpu;
+	struct opp_table *opp_table;
+	unsigned int cur_freq;
+	unsigned int min_freq;
+	unsigned int max_freq;
+};
+
 union extcon_property_value {
 	int intval;
 };
@@ -95162,100 +116583,6 @@
 	struct notifier_block *nb;
 };
 
-struct mtk_smi_larb_iommu {
-	struct device *dev;
-	unsigned int mmu;
-};
-
-enum mtk_smi_gen {
-	MTK_SMI_GEN1 = 0,
-	MTK_SMI_GEN2 = 1,
-};
-
-struct mtk_smi_common_plat {
-	enum mtk_smi_gen gen;
-	bool has_gals;
-	u32 bus_sel;
-};
-
-struct mtk_smi_larb_gen {
-	int port_in_larb[17];
-	void (*config_port)(struct device *);
-	unsigned int larb_direct_to_common_mask;
-	bool has_gals;
-};
-
-struct mtk_smi {
-	struct device *dev;
-	struct clk *clk_apb;
-	struct clk *clk_smi;
-	struct clk *clk_gals0;
-	struct clk *clk_gals1;
-	struct clk *clk_async;
-	union {
-		void *smi_ao_base;
-		void *base;
-	};
-	const struct mtk_smi_common_plat *plat;
-};
-
-struct mtk_smi_larb {
-	struct mtk_smi smi;
-	void *base;
-	struct device *smi_common_dev;
-	const struct mtk_smi_larb_gen *larb_gen;
-	int larbid;
-	u32 *mmu;
-};
-
-struct tegra186_mc_client {
-	const char *name;
-	unsigned int sid;
-	struct {
-		unsigned int override;
-		unsigned int security;
-	} regs;
-};
-
-struct tegra186_mc_soc {
-	const struct tegra186_mc_client *clients;
-	unsigned int num_clients;
-};
-
-struct tegra186_mc {
-	struct device *dev;
-	void *regs;
-	const struct tegra186_mc_soc *soc;
-};
-
-struct emc_dvfs_latency {
-	uint32_t freq;
-	uint32_t latency;
-};
-
-struct mrq_emc_dvfs_latency_response {
-	uint32_t num_pairs;
-	struct emc_dvfs_latency pairs[14];
-};
-
-struct tegra186_emc_dvfs {
-	long unsigned int latency;
-	long unsigned int rate;
-};
-
-struct tegra186_emc {
-	struct tegra_bpmp *bpmp;
-	struct device *dev;
-	struct clk *clk;
-	struct tegra186_emc_dvfs *dvfs;
-	unsigned int num_dvfs;
-	struct {
-		struct dentry *root;
-		long unsigned int min_rate;
-		long unsigned int max_rate;
-	} debugfs;
-};
-
 enum vme_resource_type {
 	VME_MASTER = 0,
 	VME_SLAVE = 1,
@@ -95340,7 +116667,7 @@
 	const char *name;
 	int (*match)(struct vme_dev *);
 	int (*probe)(struct vme_dev *);
-	int (*remove)(struct vme_dev *);
+	void (*remove)(struct vme_dev *);
 	struct device_driver driver;
 	struct list_head devices;
 };
@@ -95503,250 +116830,30 @@
 	struct device_attribute name_attr;
 };
 
-enum {
-	CCI_IF_SLAVE = 0,
-	CCI_IF_MASTER = 1,
-	CCI_IF_MAX = 2,
+struct idle_inject_thread {
+	struct task_struct *tsk;
+	int should_run;
 };
 
-struct event_range {
-	u32 min;
-	u32 max;
+struct idle_inject_device {
+	struct hrtimer timer;
+	unsigned int idle_duration_us;
+	unsigned int run_duration_us;
+	unsigned int latency_us;
+	long unsigned int cpumask[0];
 };
 
-struct cci_pmu_hw_events {
-	struct perf_event **events;
-	long unsigned int *used_mask;
-	raw_spinlock_t pmu_lock;
-};
-
-struct cci_pmu;
-
-struct cci_pmu_model {
-	char *name;
-	u32 fixed_hw_cntrs;
-	u32 num_hw_cntrs;
-	u32 cntr_size;
-	struct attribute **format_attrs;
-	struct attribute **event_attrs;
-	struct event_range event_ranges[2];
-	int (*validate_hw_event)(struct cci_pmu *, long unsigned int);
-	int (*get_event_idx)(struct cci_pmu *, struct cci_pmu_hw_events *, long unsigned int);
-	void (*write_counters)(struct cci_pmu *, long unsigned int *);
-};
-
-struct cci_pmu {
-	void *base;
-	void *ctrl_base;
-	struct pmu pmu;
-	int cpu;
-	int nr_irqs;
-	int *irqs;
-	long unsigned int active_irqs;
-	const struct cci_pmu_model *model;
-	struct cci_pmu_hw_events hw_events;
-	struct platform_device *plat_device;
-	int num_cntrs;
-	atomic_t active_events;
-	struct mutex reserve_mutex;
-};
-
-enum cci_models {
-	CCI400_R0 = 0,
-	CCI400_R1 = 1,
-	CCI_MODEL_MAX = 2,
-};
-
-enum cci400_perf_events {
-	CCI400_PMU_CYCLES = 255,
-};
-
-struct arm_ccn_component {
-	void *base;
-	u32 type;
-	long unsigned int pmu_events_mask[1];
-	union {
-		struct {
-			long unsigned int dt_cmp_mask[1];
-		} xp;
-	};
-};
-
-struct arm_ccn_dt {
-	int id;
-	void *base;
-	spinlock_t config_lock;
-	long unsigned int pmu_counters_mask[1];
-	struct {
-		struct arm_ccn_component *source;
-		struct perf_event *event;
-	} pmu_counters[9];
-	struct {
-		u64 l;
-		u64 h;
-	} cmp_mask[12];
-	struct hrtimer hrtimer;
-	unsigned int cpu;
-	struct hlist_node node;
-	struct pmu pmu;
-};
-
-struct arm_ccn {
-	struct device *dev;
-	void *base;
-	unsigned int irq;
-	unsigned int sbas_present: 1;
-	unsigned int sbsx_present: 1;
-	int num_nodes;
-	struct arm_ccn_component *node;
-	int num_xps;
-	struct arm_ccn_component *xp;
-	struct arm_ccn_dt dt;
-	int mn_id;
-};
-
-struct arm_ccn_pmu_event {
-	struct device_attribute attr;
-	u32 type;
-	u32 event;
-	int num_ports;
-	int num_vcs;
-	const char *def;
-	int mask;
-};
-
-struct pmu_irq_ops {
-	void (*enable_pmuirq)(unsigned int);
-	void (*disable_pmuirq)(unsigned int);
-	void (*free_pmuirq)(unsigned int, int, void *);
-};
-
-typedef int (*armpmu_init_fn)(struct arm_pmu *);
-
-struct pmu_probe_info {
-	unsigned int cpuid;
-	unsigned int mask;
-	armpmu_init_fn init;
-};
-
-struct hisi_pmu;
-
-struct hisi_uncore_ops {
-	void (*write_evtype)(struct hisi_pmu *, int, u32);
-	int (*get_event_idx)(struct perf_event *);
-	u64 (*read_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*write_counter)(struct hisi_pmu *, struct hw_perf_event *, u64);
-	void (*enable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*enable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*disable_counter_int)(struct hisi_pmu *, struct hw_perf_event *);
-	void (*start_counters)(struct hisi_pmu *);
-	void (*stop_counters)(struct hisi_pmu *);
-};
-
-struct hisi_pmu_hwevents {
-	struct perf_event *hw_events[16];
-	long unsigned int used_mask[1];
-};
-
-struct hisi_pmu {
-	struct pmu pmu;
-	const struct hisi_uncore_ops *ops;
-	struct hisi_pmu_hwevents pmu_events;
-	cpumask_t associated_cpus;
-	int on_cpu;
-	int irq;
-	struct device *dev;
-	struct hlist_node node;
-	int sccl_id;
-	int ccl_id;
-	void *base;
-	u32 index_id;
-	int num_counters;
-	int counter_bits;
-	int check_event;
-};
-
-struct hw_pmu_info {
-	u32 type;
-	u32 enable_mask;
-	void *csr;
-};
-
-struct xgene_pmu;
-
-struct xgene_pmu_dev {
-	struct hw_pmu_info *inf;
-	struct xgene_pmu *parent;
-	struct pmu pmu;
-	u8 max_counters;
-	long unsigned int cntr_assign_mask[1];
-	u64 max_period;
-	const struct attribute_group **attr_groups;
-	struct perf_event *pmu_counter_event[4];
-};
-
-struct xgene_pmu_ops;
-
-struct xgene_pmu {
-	struct device *dev;
-	struct hlist_node node;
-	int version;
-	void *pcppmu_csr;
-	u32 mcb_active_mask;
-	u32 mc_active_mask;
-	u32 l3c_active_mask;
-	cpumask_t cpu;
-	int irq;
-	raw_spinlock_t lock;
-	const struct xgene_pmu_ops *ops;
-	struct list_head l3cpmus;
-	struct list_head iobpmus;
-	struct list_head mcbpmus;
-	struct list_head mcpmus;
-};
-
-struct xgene_pmu_ops {
-	void (*mask_int)(struct xgene_pmu *);
-	void (*unmask_int)(struct xgene_pmu *);
-	u64 (*read_counter)(struct xgene_pmu_dev *, int);
-	void (*write_counter)(struct xgene_pmu_dev *, int, u64);
-	void (*write_evttype)(struct xgene_pmu_dev *, int, u32);
-	void (*write_agentmsk)(struct xgene_pmu_dev *, u32);
-	void (*write_agent1msk)(struct xgene_pmu_dev *, u32);
-	void (*enable_counter)(struct xgene_pmu_dev *, int);
-	void (*disable_counter)(struct xgene_pmu_dev *, int);
-	void (*enable_counter_int)(struct xgene_pmu_dev *, int);
-	void (*disable_counter_int)(struct xgene_pmu_dev *, int);
-	void (*reset_counters)(struct xgene_pmu_dev *);
-	void (*start_counters)(struct xgene_pmu_dev *);
-	void (*stop_counters)(struct xgene_pmu_dev *);
-};
-
-struct xgene_pmu_dev_ctx {
-	char *name;
-	struct list_head next;
-	struct xgene_pmu_dev *pmu_dev;
-	struct hw_pmu_info inf;
-};
-
-struct xgene_pmu_data {
-	int id;
-	u32 data;
-};
-
-enum xgene_pmu_version {
-	PCP_PMU_V1 = 1,
-	PCP_PMU_V2 = 2,
-	PCP_PMU_V3 = 3,
-};
-
-enum xgene_pmu_dev_type {
-	PMU_TYPE_L3C = 0,
-	PMU_TYPE_IOB = 1,
-	PMU_TYPE_IOB_SLOW = 2,
-	PMU_TYPE_MCB = 3,
-	PMU_TYPE_MC = 4,
+struct trace_event_raw_extlog_mem_event {
+	struct trace_entry ent;
+	u32 err_seq;
+	u8 etype;
+	u8 sev;
+	u64 pa;
+	u8 pa_mask_lsb;
+	guid_t fru_id;
+	u32 __data_loc_fru_text;
+	struct cper_mem_err_compact data;
+	char __data[0];
 };
 
 struct trace_event_raw_mc_event {
@@ -95805,6 +116912,10 @@
 	char __data[0];
 };
 
+struct trace_event_data_offsets_extlog_mem_event {
+	u32 fru_text;
+};
+
 struct trace_event_data_offsets_mc_event {
 	u32 msg;
 	u32 label;
@@ -95824,6 +116935,8 @@
 
 struct trace_event_data_offsets_memory_failure_event {};
 
+typedef void (*btf_trace_extlog_mem_event)(void *, struct cper_sec_mem_err *, u32, const guid_t *, const char *, u8);
+
 typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);
 
 typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
@@ -95834,6 +116947,30 @@
 
 typedef void (*btf_trace_memory_failure_event)(void *, long unsigned int, int, int);
 
+struct ce_array {
+	u64 *array;
+	unsigned int n;
+	unsigned int decay_count;
+	u64 pfns_poisoned;
+	u64 ces_entered;
+	u64 decays_done;
+	union {
+		struct {
+			__u32 disabled: 1;
+			__u32 __resv: 31;
+		};
+		__u32 flags;
+	};
+};
+
+struct nvmem_cell_lookup {
+	const char *nvmem_name;
+	const char *cell_name;
+	const char *dev_id;
+	const char *con_id;
+	struct list_head node;
+};
+
 enum {
 	NVMEM_ADD = 1,
 	NVMEM_REMOVE = 2,
@@ -95863,13 +117000,16 @@
 	struct bin_attribute eeprom;
 	struct device *base_dev;
 	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
 	nvmem_reg_read_t reg_read;
 	nvmem_reg_write_t reg_write;
+	nvmem_cell_post_process_t cell_post_process;
 	struct gpio_desc *wp_gpio;
 	void *priv;
 };
 
-struct nvmem_cell {
+struct nvmem_cell_entry {
 	const char *name;
 	int offset;
 	int bytes;
@@ -95880,6 +117020,116 @@
 	struct list_head node;
 };
 
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
+};
+
+struct icc_node;
+
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	bool enabled;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_path___2 {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[0];
+};
+
+struct icc_node_data {
+	struct icc_node *node;
+	u32 tag;
+};
+
+struct icc_provider;
+
+struct icc_node {
+	int id;
+	const char *name;
+	struct icc_node **links;
+	size_t num_links;
+	struct icc_provider *provider;
+	struct list_head node_list;
+	struct list_head search_list;
+	struct icc_node *reverse;
+	u8 is_traversed: 1;
+	struct hlist_head req_list;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 init_avg;
+	u32 init_peak;
+	void *data;
+};
+
+struct icc_onecell_data {
+	unsigned int num_nodes;
+	struct icc_node *nodes[0];
+};
+
+struct icc_provider {
+	struct list_head provider_list;
+	struct list_head nodes;
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	void (*pre_aggregate)(struct icc_node *);
+	int (*get_bw)(struct icc_node *, u32 *, u32 *);
+	struct icc_node * (*xlate)(struct of_phandle_args *, void *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+	struct device *dev;
+	int users;
+	bool inter_set;
+	void *data;
+};
+
+struct trace_event_raw_icc_set_bw {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	u32 __data_loc_node_name;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 node_avg_bw;
+	u32 node_peak_bw;
+	char __data[0];
+};
+
+struct trace_event_raw_icc_set_bw_end {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_icc_set_bw {
+	u32 path_name;
+	u32 dev;
+	u32 node_name;
+};
+
+struct trace_event_data_offsets_icc_set_bw_end {
+	u32 path_name;
+	u32 dev;
+};
+
+typedef void (*btf_trace_icc_set_bw)(void *, struct icc_path___2 *, struct icc_node *, int, u32, u32);
+
+typedef void (*btf_trace_icc_set_bw_end)(void *, struct icc_path___2 *, int);
+
+struct icc_bulk_data {
+	struct icc_path *path;
+	const char *name;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
 struct net_device_devres {
 	struct net_device *ndev;
 };
@@ -95922,12 +117172,44 @@
 	SOCK_WAKE_URG = 3,
 };
 
-struct ifconf {
-	int ifc_len;
-	union {
-		char *ifcu_buf;
-		struct ifreq *ifcu_req;
-	} ifc_ifcu;
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_LAST = 32768,
+	SOF_TIMESTAMPING_MASK = 65535,
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
 };
 
 struct compat_ifmap {
@@ -95966,39 +117248,6 @@
 	} ifr_ifru;
 };
 
-struct compat_ifconf {
-	compat_int_t ifc_len;
-	compat_caddr_t ifcbuf;
-};
-
-struct compat_ethtool_rx_flow_spec {
-	u32 flow_type;
-	union ethtool_flow_union h_u;
-	struct ethtool_flow_ext h_ext;
-	union ethtool_flow_union m_u;
-	struct ethtool_flow_ext m_ext;
-	compat_u64 ring_cookie;
-	u32 location;
-};
-
-struct compat_ethtool_rxnfc {
-	u32 cmd;
-	u32 flow_type;
-	compat_u64 data;
-	struct compat_ethtool_rx_flow_spec fs;
-	u32 rule_cnt;
-	u32 rule_locs[0];
-};
-
-struct libipw_device;
-
-struct iw_spy_data;
-
-struct iw_public_data {
-	struct iw_spy_data *spy_data;
-	struct libipw_device *libipw;
-};
-
 struct iw_param {
 	__s32 value;
 	__u8 fixed;
@@ -96092,36 +117341,6 @@
 	u_char spy_thr_under[8];
 };
 
-enum {
-	SOF_TIMESTAMPING_TX_HARDWARE = 1,
-	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
-	SOF_TIMESTAMPING_RX_HARDWARE = 4,
-	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
-	SOF_TIMESTAMPING_SOFTWARE = 16,
-	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
-	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
-	SOF_TIMESTAMPING_OPT_ID = 128,
-	SOF_TIMESTAMPING_TX_SCHED = 256,
-	SOF_TIMESTAMPING_TX_ACK = 512,
-	SOF_TIMESTAMPING_OPT_CMSG = 1024,
-	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
-	SOF_TIMESTAMPING_OPT_STATS = 4096,
-	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
-	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
-	SOF_TIMESTAMPING_LAST = 16384,
-	SOF_TIMESTAMPING_MASK = 32767,
-};
-
-struct scm_ts_pktinfo {
-	__u32 if_index;
-	__u32 pkt_length;
-	__u32 reserved[2];
-};
-
-struct sock_skb_cb {
-	u32 dropcount;
-};
-
 struct sock_ee_data_rfc4884 {
 	__u16 len;
 	__u8 flags;
@@ -96153,6 +117372,8 @@
 	u8 unused: 7;
 };
 
+struct net_bridge;
+
 struct used_address {
 	struct __kernel_sockaddr_storage name;
 	unsigned int name_len;
@@ -96175,40 +117396,14 @@
 	__u32 gid;
 };
 
-struct mmpin {
-	struct user_struct *user;
-	unsigned int num_pg;
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
 };
 
-struct ubuf_info {
-	void (*callback)(struct ubuf_info *, bool);
-	union {
-		struct {
-			long unsigned int desc;
-			void *ctx;
-		};
-		struct {
-			u32 id;
-			u16 len;
-			u16 zerocopy: 1;
-			u32 bytelen;
-		};
-	};
-	refcount_t refcnt;
-	struct mmpin mmp;
-};
-
-struct prot_inuse {
-	int val[64];
-};
-
-struct sd_flow_limit {
-	u64 count;
-	unsigned int num_buckets;
-	unsigned int history_head;
-	u16 history[128];
-	u8 buckets[0];
-};
+struct sd_flow_limit;
 
 struct softnet_data {
 	struct list_head poll_list;
@@ -96225,6 +117420,7 @@
 	struct {
 		u16 recursion;
 		u8 more;
+		u8 skip_txqueue;
 	} xmit;
 	int: 32;
 	unsigned int input_queue_head;
@@ -96247,7 +117443,25 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
 	long: 64;
+	call_single_data_t defer_csd;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct so_timestamping {
+	int flags;
+	int bind_phc;
 };
 
 enum txtime_flags {
@@ -96274,6 +117488,96 @@
 	u16 tsflags;
 };
 
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char *, int *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+};
+
+struct inet_bind_bucket;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	long unsigned int icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		long unsigned int timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 icsk_ca_priv[13];
+};
+
 struct inet_bind_bucket {
 	possible_net_t ib_net;
 	int l3mdev;
@@ -96289,6 +117593,18 @@
 	struct hlist_head owners;
 };
 
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(const struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
 struct tcp_fastopen_cookie {
 	__le64 val[2];
 	s8 len;
@@ -96483,6 +117799,7 @@
 	} mtu_probe;
 	u32 mtu_info;
 	bool is_mptcp;
+	bool (*smc_hs_congested)(const struct sock *);
 	bool syn_smc;
 	const struct tcp_sock_af_ops *af_specific;
 	struct tcp_md5sig_info *md5sig_info;
@@ -96522,6 +117839,7 @@
 	u8 keylen;
 	u8 family;
 	u8 prefixlen;
+	u8 flags;
 	union tcp_md5_addr addr;
 	int l3index;
 	u8 key[80];
@@ -96534,7 +117852,6 @@
 	int (*handler)(struct sk_buff *);
 	int (*err_handler)(struct sk_buff *, u32);
 	unsigned int no_policy: 1;
-	unsigned int netns_ok: 1;
 	unsigned int icmp_strict_tag_validation: 1;
 };
 
@@ -96614,18 +117931,13 @@
 	u16 mss_clamp;
 	struct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);
 	int (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);
-	void (*init_req)(struct request_sock *, const struct sock *, struct sk_buff *);
 	__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);
-	struct dst_entry * (*route_req)(const struct sock *, struct flowi *, const struct request_sock *);
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
 	u32 (*init_seq)(const struct sk_buff *);
 	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
 	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
 };
 
-struct nf_conntrack {
-	atomic_t use;
-};
-
 enum {
 	SKB_FCLONE_UNAVAILABLE = 0,
 	SKB_FCLONE_ORIG = 1,
@@ -96646,6 +117958,7 @@
 	struct sk_buff *root_skb;
 	struct sk_buff *cur_skb;
 	__u8 *frag_data;
+	__u32 frag_off;
 };
 
 struct skb_checksum_ops {
@@ -96663,38 +117976,22 @@
 	__u16 csum_start;
 };
 
-struct napi_gro_cb {
-	void *frag0;
-	unsigned int frag0_len;
-	int data_offset;
-	u16 flush;
-	u16 flush_id;
-	u16 count;
-	u16 gro_remcsum_start;
-	long unsigned int age;
-	u16 proto;
-	u8 same_flow: 1;
-	u8 encap_mark: 1;
-	u8 csum_valid: 1;
-	u8 csum_cnt: 3;
-	u8 free: 2;
-	u8 is_ipv6: 1;
-	u8 is_fou: 1;
-	u8 is_atomic: 1;
-	u8 recursion_counter: 4;
-	u8 is_flist: 1;
-	__wsum csum;
-	struct sk_buff *last;
-};
-
 struct vlan_hdr {
 	__be16 h_vlan_TCI;
 	__be16 h_vlan_encapsulated_proto;
 };
 
 struct vlan_ethhdr {
-	unsigned char h_dest[6];
-	unsigned char h_source[6];
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
 	__be16 h_vlan_proto;
 	__be16 h_vlan_TCI;
 	__be16 h_vlan_encapsulated_proto;
@@ -96739,6 +118036,10 @@
 	void *skb_cache[64];
 };
 
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t);
+
+typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int);
+
 struct ahash_request___2;
 
 struct scm_cookie {
@@ -96789,11 +118090,11 @@
 	unsigned char ewma_log;
 };
 
-struct net_rate_estimator {
-	struct gnet_stats_basic_packed *bstats;
+struct net_rate_estimator___2 {
+	struct gnet_stats_basic_sync *bstats;
 	spinlock_t *stats_lock;
-	seqcount_t *running;
-	struct gnet_stats_basic_cpu *cpu_bstats;
+	bool running;
+	struct gnet_stats_basic_sync *cpu_bstats;
 	u8 ewma_log;
 	u8 intvl_log;
 	seqcount_t seq;
@@ -96845,7 +118146,10 @@
 	RTNLGRP_IPV6_MROUTE_R = 31,
 	RTNLGRP_NEXTHOP = 32,
 	RTNLGRP_BRVLAN = 33,
-	__RTNLGRP_MAX = 34,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
 };
 
 enum {
@@ -96884,6 +118188,7 @@
 
 enum rtnl_link_flags {
 	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
 };
 
 struct net_fill_args {
@@ -96911,12 +118216,6 @@
 
 typedef u64 u_int64_t;
 
-struct flow_dissector_key_control {
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
-};
-
 enum flow_dissect_ret {
 	FLOW_DISSECT_RET_OUT_GOOD = 0,
 	FLOW_DISSECT_RET_OUT_BAD = 1,
@@ -96925,12 +118224,6 @@
 	FLOW_DISSECT_RET_CONTINUE = 4,
 };
 
-struct flow_dissector_key_basic {
-	__be16 n_proto;
-	u8 ip_proto;
-	u8 padding;
-};
-
 struct flow_dissector_key_tags {
 	u32 flow_label;
 };
@@ -96945,6 +118238,8 @@
 		__be16 vlan_tci;
 	};
 	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
 };
 
 struct flow_dissector_mpls_lse {
@@ -97047,16 +118342,15 @@
 	u32 hash;
 };
 
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
 struct flow_dissector_key {
 	enum flow_dissector_key_id key_id;
 	size_t offset;
 };
 
-struct flow_keys_basic {
-	struct flow_dissector_key_control control;
-	struct flow_dissector_key_basic basic;
-};
-
 struct flow_keys {
 	struct flow_dissector_key_control control;
 	struct flow_dissector_key_basic basic;
@@ -97085,19 +118379,6 @@
 	IP_CT_UNTRACKED = 7,
 };
 
-struct xt_table_info;
-
-struct xt_table {
-	struct list_head list;
-	unsigned int valid_hooks;
-	struct xt_table_info *private;
-	struct module *me;
-	u_int8_t af;
-	int priority;
-	int (*table_init)(struct net *);
-	const char name[32];
-};
-
 union nf_inet_addr {
 	__u32 all[4];
 	__be32 ip;
@@ -97168,14 +118449,217 @@
 
 struct nf_ct_event;
 
-struct nf_ct_event_notifier {
-	int (*fcn)(unsigned int, struct nf_ct_event *);
-};
-
 struct nf_exp_event;
 
-struct nf_exp_event_notifier {
-	int (*fcn)(unsigned int, struct nf_exp_event *);
+struct nf_ct_event_notifier {
+	int (*ct_event)(unsigned int, const struct nf_ct_event *);
+	int (*exp_event)(unsigned int, const struct nf_exp_event *);
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	void *type_dev;
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_link_state;
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool legacy_pre_march2020;
+	bool poll_fixed_state;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	long unsigned int supported_interfaces[1];
+	long unsigned int mac_capabilities;
+};
+
+struct dsa_device_ops;
+
+struct dsa_switch_tree;
+
+struct dsa_switch;
+
+struct dsa_bridge;
+
+struct dsa_lag;
+
+struct dsa_netdevice_ops;
+
+struct dsa_port {
+	union {
+		struct net_device *master;
+		struct net_device *slave;
+	};
+	const struct dsa_device_ops *tag_ops;
+	struct dsa_switch_tree *dst;
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	struct dsa_switch *ds;
+	unsigned int index;
+	enum {
+		DSA_PORT_TYPE_UNUSED = 0,
+		DSA_PORT_TYPE_CPU = 1,
+		DSA_PORT_TYPE_DSA = 2,
+		DSA_PORT_TYPE_USER = 3,
+	} type;
+	const char *name;
+	struct dsa_port *cpu_dp;
+	u8 mac[6];
+	u8 stp_state;
+	u8 vlan_filtering: 1;
+	u8 learning: 1;
+	u8 lag_tx_enabled: 1;
+	u8 devlink_port_setup: 1;
+	u8 master_admin_up: 1;
+	u8 master_oper_up: 1;
+	u8 setup: 1;
+	struct device_node *dn;
+	unsigned int ageing_time;
+	struct dsa_bridge *bridge;
+	struct devlink_port devlink_port;
+	struct phylink *pl;
+	struct phylink_config pl_config;
+	struct dsa_lag *lag;
+	struct net_device *hsr_dev;
+	struct list_head list;
+	const struct ethtool_ops *orig_ethtool_ops;
+	const struct dsa_netdevice_ops *netdev_ops;
+	struct mutex addr_lists_lock;
+	struct list_head fdbs;
+	struct list_head mdbs;
+	struct mutex vlans_lock;
+	struct list_head vlans;
+};
+
+enum netdev_lag_tx_type {
+	NETDEV_LAG_TX_TYPE_UNKNOWN = 0,
+	NETDEV_LAG_TX_TYPE_RANDOM = 1,
+	NETDEV_LAG_TX_TYPE_BROADCAST = 2,
+	NETDEV_LAG_TX_TYPE_ROUNDROBIN = 3,
+	NETDEV_LAG_TX_TYPE_ACTIVEBACKUP = 4,
+	NETDEV_LAG_TX_TYPE_HASH = 5,
+};
+
+enum netdev_lag_hash {
+	NETDEV_LAG_HASH_NONE = 0,
+	NETDEV_LAG_HASH_L2 = 1,
+	NETDEV_LAG_HASH_L34 = 2,
+	NETDEV_LAG_HASH_L23 = 3,
+	NETDEV_LAG_HASH_E23 = 4,
+	NETDEV_LAG_HASH_E34 = 5,
+	NETDEV_LAG_HASH_VLAN_SRCMAC = 6,
+	NETDEV_LAG_HASH_UNKNOWN = 7,
+};
+
+struct netdev_lag_upper_info {
+	enum netdev_lag_tx_type tx_type;
+	enum netdev_lag_hash hash_type;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
 };
 
 enum bpf_ret_code {
@@ -97191,16 +118675,76 @@
 	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,
 };
 
-struct ip_tunnel_parm {
-	char name[16];
-	int link;
-	__be16 i_flags;
-	__be16 o_flags;
-	__be32 i_key;
-	__be32 o_key;
-	struct iphdr iph;
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
 };
 
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_WAKE = 19,
+	FLOW_ACTION_QUEUE = 20,
+	FLOW_ACTION_SAMPLE = 21,
+	FLOW_ACTION_POLICE = 22,
+	FLOW_ACTION_CT = 23,
+	FLOW_ACTION_CT_METADATA = 24,
+	FLOW_ACTION_MPLS_PUSH = 25,
+	FLOW_ACTION_MPLS_POP = 26,
+	FLOW_ACTION_MPLS_MANGLE = 27,
+	FLOW_ACTION_GATE = 28,
+	FLOW_ACTION_PPPOE_PUSH = 29,
+	FLOW_ACTION_JUMP = 30,
+	FLOW_ACTION_PIPE = 31,
+	FLOW_ACTION_VLAN_PUSH_ETH = 32,
+	FLOW_ACTION_VLAN_POP_ETH = 33,
+	NUM_FLOW_ACTIONS = 34,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+typedef void (*action_destr)(void *);
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct nf_flowtable;
+
 struct ip_tunnel_key {
 	__be64 tun_id;
 	union {
@@ -97235,20 +118779,598 @@
 	u8 mode;
 };
 
-struct lwtunnel_state {
-	__u16 type;
-	__u16 flags;
-	__u16 headroom;
-	atomic_t refcnt;
-	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
-	int (*orig_input)(struct sk_buff *);
-	struct callback_head rcu;
-	__u8 data[0];
+struct psample_group;
+
+struct action_gate_entry;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			long unsigned int cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *cookie;
 };
 
-union tcp_word_hdr {
-	struct tcphdr hdr;
-	__be32 words[5];
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+enum flow_cls_command {
+	FLOW_CLS_REPLACE = 0,
+	FLOW_CLS_DESTROY = 1,
+	FLOW_CLS_STATS = 2,
+	FLOW_CLS_TMPLT_CREATE = 3,
+	FLOW_CLS_TMPLT_DESTROY = 4,
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct flow_cls_offload {
+	struct flow_cls_common_offload common;
+	enum flow_cls_command command;
+	long unsigned int cookie;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	u32 classid;
+};
+
+struct dsa_chip_data {
+	struct device *host_dev;
+	int sw_addr;
+	struct device *netdev[12];
+	int eeprom_len;
+	struct device_node *of_node;
+	char *port_names[12];
+	struct device_node *port_dn[12];
+	s8 rtable[4];
+};
+
+struct dsa_platform_data {
+	struct device *netdev;
+	struct net_device *of_netdev;
+	int nr_chips;
+	struct dsa_chip_data *chip;
+};
+
+struct phylink_link_state {
+	long unsigned int advertising[2];
+	long unsigned int lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	unsigned int link: 1;
+	unsigned int an_enabled: 1;
+	unsigned int an_complete: 1;
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, long unsigned int *, const struct phylink_link_state *);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const long unsigned int *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+struct devlink_info_req;
+
+struct switchdev_mst_state {
+	u16 msti;
+	u8 state;
+};
+
+struct switchdev_brport_flags {
+	long unsigned int val;
+	long unsigned int mask;
+};
+
+struct switchdev_vlan_msti {
+	u16 vid;
+	u16 msti;
+};
+
+enum switchdev_obj_id {
+	SWITCHDEV_OBJ_ID_UNDEFINED = 0,
+	SWITCHDEV_OBJ_ID_PORT_VLAN = 1,
+	SWITCHDEV_OBJ_ID_PORT_MDB = 2,
+	SWITCHDEV_OBJ_ID_HOST_MDB = 3,
+	SWITCHDEV_OBJ_ID_MRP = 4,
+	SWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,
+	SWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,
+	SWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,
+	SWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,
+	SWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,
+	SWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,
+};
+
+struct switchdev_obj {
+	struct list_head list;
+	struct net_device *orig_dev;
+	enum switchdev_obj_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+};
+
+struct switchdev_obj_port_vlan {
+	struct switchdev_obj obj;
+	u16 flags;
+	u16 vid;
+	bool changed;
+};
+
+struct switchdev_obj_port_mdb {
+	struct switchdev_obj obj;
+	unsigned char addr[6];
+	u16 vid;
+};
+
+struct switchdev_obj_mrp {
+	struct switchdev_obj obj;
+	struct net_device *p_port;
+	struct net_device *s_port;
+	u32 ring_id;
+	u16 prio;
+};
+
+struct switchdev_obj_ring_role_mrp {
+	struct switchdev_obj obj;
+	u8 ring_role;
+	u32 ring_id;
+	u8 sw_backup;
+};
+
+enum dsa_tag_protocol {
+	DSA_TAG_PROTO_NONE = 0,
+	DSA_TAG_PROTO_BRCM = 1,
+	DSA_TAG_PROTO_BRCM_LEGACY = 22,
+	DSA_TAG_PROTO_BRCM_PREPEND = 2,
+	DSA_TAG_PROTO_DSA = 3,
+	DSA_TAG_PROTO_EDSA = 4,
+	DSA_TAG_PROTO_GSWIP = 5,
+	DSA_TAG_PROTO_KSZ9477 = 6,
+	DSA_TAG_PROTO_KSZ9893 = 7,
+	DSA_TAG_PROTO_LAN9303 = 8,
+	DSA_TAG_PROTO_MTK = 9,
+	DSA_TAG_PROTO_QCA = 10,
+	DSA_TAG_PROTO_TRAILER = 11,
+	DSA_TAG_PROTO_8021Q = 12,
+	DSA_TAG_PROTO_SJA1105 = 13,
+	DSA_TAG_PROTO_KSZ8795 = 14,
+	DSA_TAG_PROTO_OCELOT = 15,
+	DSA_TAG_PROTO_AR9331 = 16,
+	DSA_TAG_PROTO_RTL4_A = 17,
+	DSA_TAG_PROTO_HELLCREEK = 18,
+	DSA_TAG_PROTO_XRS700X = 19,
+	DSA_TAG_PROTO_OCELOT_8021Q = 20,
+	DSA_TAG_PROTO_SEVILLE = 21,
+	DSA_TAG_PROTO_SJA1110 = 23,
+	DSA_TAG_PROTO_RTL8_4 = 24,
+	DSA_TAG_PROTO_RTL8_4T = 25,
+};
+
+struct dsa_device_ops {
+	struct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);
+	struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *);
+	void (*flow_dissect)(const struct sk_buff *, __be16 *, int *);
+	int (*connect)(struct dsa_switch *);
+	void (*disconnect)(struct dsa_switch *);
+	unsigned int needed_headroom;
+	unsigned int needed_tailroom;
+	const char *name;
+	enum dsa_tag_protocol proto;
+	bool promisc_on_master;
+};
+
+struct dsa_8021q_context;
+
+struct dsa_switch_ops;
+
+struct dsa_switch {
+	struct device *dev;
+	struct dsa_switch_tree *dst;
+	unsigned int index;
+	u32 setup: 1;
+	u32 vlan_filtering_is_global: 1;
+	u32 needs_standalone_vlan_filtering: 1;
+	u32 configure_vlan_while_not_filtering: 1;
+	u32 untag_bridge_pvid: 1;
+	u32 assisted_learning_on_cpu_port: 1;
+	u32 vlan_filtering: 1;
+	u32 mtu_enforcement_ingress: 1;
+	u32 fdb_isolation: 1;
+	struct notifier_block nb;
+	void *priv;
+	void *tagger_data;
+	struct dsa_chip_data *cd;
+	const struct dsa_switch_ops *ops;
+	u32 phys_mii_mask;
+	struct mii_bus *slave_mii_bus;
+	unsigned int ageing_time_min;
+	unsigned int ageing_time_max;
+	struct dsa_8021q_context *tag_8021q_ctx;
+	struct devlink *devlink;
+	unsigned int num_tx_queues;
+	unsigned int num_lag_ids;
+	unsigned int max_num_bridges;
+	unsigned int num_ports;
+};
+
+struct dsa_netdevice_ops {
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+};
+
+struct dsa_lag {
+	struct net_device *dev;
+	unsigned int id;
+	struct mutex fdb_lock;
+	struct list_head fdbs;
+	refcount_t refcount;
+};
+
+struct dsa_switch_tree {
+	struct list_head list;
+	struct list_head ports;
+	struct raw_notifier_head nh;
+	unsigned int index;
+	struct kref refcount;
+	struct dsa_lag **lags;
+	const struct dsa_device_ops *tag_ops;
+	enum dsa_tag_protocol default_proto;
+	bool setup;
+	struct dsa_platform_data *pd;
+	struct list_head rtable;
+	unsigned int lags_len;
+	unsigned int last_switch;
+};
+
+struct dsa_mall_mirror_tc_entry {
+	u8 to_local_port;
+	bool ingress;
+};
+
+struct dsa_mall_policer_tc_entry {
+	u32 burst;
+	u64 rate_bytes_per_sec;
+};
+
+struct dsa_bridge {
+	struct net_device *dev;
+	unsigned int num;
+	bool tx_fwd_offload;
+	refcount_t refcount;
+};
+
+enum dsa_db_type {
+	DSA_DB_PORT = 0,
+	DSA_DB_LAG = 1,
+	DSA_DB_BRIDGE = 2,
+};
+
+struct dsa_db {
+	enum dsa_db_type type;
+	union {
+		const struct dsa_port *dp;
+		struct dsa_lag lag;
+		struct dsa_bridge bridge;
+	};
+};
+
+struct fixed_phy_status___2;
+
+typedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);
+
+struct dsa_switch_ops {
+	enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
+	int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
+	int (*setup)(struct dsa_switch *);
+	void (*teardown)(struct dsa_switch *);
+	int (*port_setup)(struct dsa_switch *, int);
+	void (*port_teardown)(struct dsa_switch *, int);
+	u32 (*get_phy_flags)(struct dsa_switch *, int);
+	int (*phy_read)(struct dsa_switch *, int, int);
+	int (*phy_write)(struct dsa_switch *, int, int, u16);
+	void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
+	void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);
+	void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
+	void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
+	struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
+	int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
+	void (*phylink_mac_an_restart)(struct dsa_switch *, int);
+	void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
+	void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
+	void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
+	void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
+	void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
+	int (*get_sset_count)(struct dsa_switch *, int, int);
+	void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
+	void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
+	void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
+	void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
+	void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
+	int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
+	int (*port_get_default_prio)(struct dsa_switch *, int);
+	int (*port_set_default_prio)(struct dsa_switch *, int, u8);
+	int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
+	int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
+	int (*suspend)(struct dsa_switch *);
+	int (*resume)(struct dsa_switch *);
+	int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
+	void (*port_disable)(struct dsa_switch *, int);
+	int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
+	int (*get_eeprom_len)(struct dsa_switch *);
+	int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
+	int (*get_regs_len)(struct dsa_switch *, int);
+	void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
+	int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
+	int (*set_ageing_time)(struct dsa_switch *, unsigned int);
+	int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
+	void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
+	void (*port_stp_state_set)(struct dsa_switch *, int, u8);
+	int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
+	void (*port_fast_age)(struct dsa_switch *, int);
+	int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
+	int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
+	void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
+	int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
+	int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
+	int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
+	int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
+	int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
+	int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
+	int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
+	int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
+	int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
+	int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
+	int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
+	void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
+	int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
+	void (*port_policer_del)(struct dsa_switch *, int);
+	int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
+	int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
+	void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
+	int (*crosschip_lag_change)(struct dsa_switch *, int, int);
+	int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *);
+	int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
+	int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
+	int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
+	void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
+	bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
+	int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
+	int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
+	int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
+	int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
+	int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*port_change_mtu)(struct dsa_switch *, int, int);
+	int (*port_max_mtu)(struct dsa_switch *, int);
+	int (*port_lag_change)(struct dsa_switch *, int);
+	int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *);
+	int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
+	int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
+	int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
+	int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
+	int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
+	int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
+	int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
+	void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	__LWTUNNEL_ENCAP_MAX = 10,
 };
 
 struct arphdr {
@@ -97259,94 +119381,6 @@
 	__be16 ar_op;
 };
 
-struct fib_info;
-
-struct fib_nh {
-	struct fib_nh_common nh_common;
-	struct hlist_node nh_hash;
-	struct fib_info *nh_parent;
-	__u32 nh_tclassid;
-	__be32 nh_saddr;
-	int nh_saddr_genid;
-};
-
-struct fib_info {
-	struct hlist_node fib_hash;
-	struct hlist_node fib_lhash;
-	struct list_head nh_list;
-	struct net *fib_net;
-	int fib_treeref;
-	refcount_t fib_clntref;
-	unsigned int fib_flags;
-	unsigned char fib_dead;
-	unsigned char fib_protocol;
-	unsigned char fib_scope;
-	unsigned char fib_type;
-	__be32 fib_prefsrc;
-	u32 fib_tb_id;
-	u32 fib_priority;
-	struct dst_metrics *fib_metrics;
-	int fib_nhs;
-	bool fib_nh_is_v6;
-	bool nh_updated;
-	struct nexthop *nh;
-	struct callback_head rcu;
-	struct fib_nh fib_nh[0];
-};
-
-struct nh_info;
-
-struct nh_group;
-
-struct nexthop {
-	struct rb_node rb_node;
-	struct list_head fi_list;
-	struct list_head f6i_list;
-	struct list_head fdb_list;
-	struct list_head grp_list;
-	struct net *net;
-	u32 id;
-	u8 protocol;
-	u8 nh_flags;
-	bool is_group;
-	refcount_t refcnt;
-	struct callback_head rcu;
-	union {
-		struct nh_info *nh_info;
-		struct nh_group *nh_grp;
-	};
-};
-
-struct nh_info {
-	struct hlist_node dev_hash;
-	struct nexthop *nh_parent;
-	u8 family;
-	bool reject_nh;
-	bool fdb_nh;
-	union {
-		struct fib_nh_common fib_nhc;
-		struct fib_nh fib_nh;
-		struct fib6_nh fib6_nh;
-	};
-};
-
-struct nh_grp_entry {
-	struct nexthop *nh;
-	u8 weight;
-	atomic_t upper_bound;
-	struct list_head nh_list;
-	struct nexthop *nh_parent;
-};
-
-struct nh_group {
-	struct nh_group *spare;
-	u16 num_nh;
-	bool mpath;
-	bool fdb_nh;
-	bool has_v4;
-	struct nh_grp_entry nh_entries[0];
-};
-
 enum metadata_type {
 	METADATA_IP_TUNNEL = 0,
 	METADATA_HW_PORT_MUX = 1,
@@ -97431,10 +119465,40 @@
 	struct pppoe_tag tag[0];
 };
 
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
 struct mpls_label {
 	__be32 entry;
 };
 
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
 enum batadv_packettype {
 	BATADV_IV_OGM = 0,
 	BATADV_BCAST = 1,
@@ -97531,7 +119595,6 @@
 	struct nf_conntrack_zone zone;
 	struct nf_conntrack_tuple_hash tuplehash[2];
 	long unsigned int status;
-	u16 cpu;
 	possible_net_t ct_net;
 	struct hlist_node nat_bysource;
 	struct {	} __nfct_init_offset;
@@ -97542,17 +119605,6 @@
 	union nf_conntrack_proto proto;
 };
 
-struct xt_table_info {
-	unsigned int size;
-	unsigned int number;
-	unsigned int initial_entries;
-	unsigned int hook_entry[5];
-	unsigned int underflow[5];
-	unsigned int stacksize;
-	void ***jumpstack;
-	unsigned char entries[0];
-};
-
 struct nf_conntrack_tuple_mask {
 	struct {
 		union nf_inet_addr u3;
@@ -97561,8 +119613,9 @@
 };
 
 struct nf_ct_ext {
-	u8 offset[9];
+	u8 offset[10];
 	u8 len;
+	unsigned int gen_id;
 	char data[0];
 };
 
@@ -97596,7 +119649,8 @@
 	NF_CT_EXT_TIMEOUT = 6,
 	NF_CT_EXT_LABELS = 7,
 	NF_CT_EXT_SYNPROXY = 8,
-	NF_CT_EXT_NUM = 9,
+	NF_CT_EXT_ACT_CT = 9,
+	NF_CT_EXT_NUM = 10,
 };
 
 struct nf_ct_event {
@@ -97624,17 +119678,16 @@
 	__be32 dst;
 };
 
-struct rps_sock_flow_table {
-	u32 mask;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	u32 ents[0];
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	long unsigned int state[1];
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
 };
 
 enum {
@@ -97647,17 +119700,6 @@
 	IF_OPER_UP = 6,
 };
 
-struct ipv4_devconf {
-	void *sysctl;
-	int data[32];
-	long unsigned int state[1];
-};
-
-enum nf_dev_hooks {
-	NF_NETDEV_INGRESS = 0,
-	NF_NETDEV_NUMHOOKS = 1,
-};
-
 struct ifbond {
 	__s32 bond_mode;
 	__s32 num_slaves;
@@ -97676,11 +119718,6 @@
 
 typedef struct ifslave ifslave;
 
-struct netdev_boot_setup {
-	char name[16];
-	struct ifmap map;
-};
-
 enum {
 	NAPIF_STATE_SCHED = 1,
 	NAPIF_STATE_MISSED = 2,
@@ -97689,19 +119726,16 @@
 	NAPIF_STATE_LISTED = 16,
 	NAPIF_STATE_NO_BUSY_POLL = 32,
 	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
 };
 
-enum gro_result {
-	GRO_MERGED = 0,
-	GRO_MERGED_FREE = 1,
-	GRO_HELD = 2,
-	GRO_NORMAL = 3,
-	GRO_DROP = 4,
-	GRO_CONSUMED = 5,
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
 };
 
-typedef enum gro_result gro_result_t;
-
 struct bpf_xdp_link {
 	struct bpf_link link;
 	struct net_device *dev;
@@ -97724,19 +119758,13 @@
 	struct callback_head rcu;
 };
 
-struct udp_tunnel_info {
-	short unsigned int type;
-	sa_family_t sa_family;
-	__be16 port;
-	u8 hw_priv;
-};
-
 struct in_ifaddr;
 
 struct ip_mc_list;
 
 struct in_device {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	refcount_t refcnt;
 	int dead;
 	struct in_ifaddr *ifa_list;
@@ -97752,7 +119780,7 @@
 	long unsigned int mr_qri;
 	unsigned char mr_qrv;
 	unsigned char mr_gq_running;
-	unsigned char mr_ifc_count;
+	u32 mr_ifc_count;
 	struct timer_list mr_gq_timer;
 	struct timer_list mr_ifc_timer;
 	struct neigh_parms *arp_parms;
@@ -97760,16 +119788,16 @@
 	struct callback_head callback_head;
 };
 
-struct offload_callbacks {
-	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
-	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sk_buff *, int);
-};
-
-struct packet_offload {
+struct packet_type {
 	__be16 type;
-	u16 priority;
-	struct offload_callbacks callbacks;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
 	struct list_head list;
 };
 
@@ -97785,14 +119813,6 @@
 	unsigned int flags_changed;
 };
 
-struct netdev_notifier_changeupper_info {
-	struct netdev_notifier_info info;
-	struct net_device *upper_dev;
-	bool master;
-	bool linking;
-	void *upper_info;
-};
-
 struct netdev_notifier_changelowerstate_info {
 	struct netdev_notifier_info info;
 	void *lower_state_info;
@@ -97803,7 +119823,27 @@
 	const unsigned char *dev_addr;
 };
 
-typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
 
 enum {
 	NESTED_SYNC_IMM_BIT = 0,
@@ -97835,6 +119875,7 @@
 
 struct netpoll {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	char dev_name[16];
 	const char *name;
 	union inet_addr local_ip;
@@ -97848,6 +119889,12 @@
 enum qdisc_state_t {
 	__QDISC_STATE_SCHED = 0,
 	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
 };
 
 struct tcf_walker {
@@ -97892,7 +119939,17 @@
 	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
 	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
 	IPV4_DEVCONF_BC_FORWARDING = 32,
-	__IPV4_DEVCONF_MAX = 33,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
 };
 
 struct in_ifaddr {
@@ -97907,6 +119964,7 @@
 	__be32 ifa_broadcast;
 	unsigned char ifa_scope;
 	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
 	__u32 ifa_flags;
 	char ifa_label[16];
 	__u32 ifa_valid_lft;
@@ -97915,17 +119973,27 @@
 	long unsigned int ifa_tstamp;
 };
 
+struct udp_tunnel_info {
+	short unsigned int type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
 struct udp_tunnel_nic_shared {
 	struct udp_tunnel_nic *udp_tunnel_nic_info;
 	struct list_head devices;
 };
 
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
 struct dev_kfree_skb_cb {
 	enum skb_free_reason reason;
 };
 
 struct netdev_adjacent {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	bool master;
 	bool ignore;
 	u16 ref_nr;
@@ -97936,6 +120004,7 @@
 
 struct netdev_hw_addr {
 	struct list_head list;
+	struct rb_node node;
 	unsigned char addr[32];
 	unsigned char type;
 	bool global_use;
@@ -97961,7 +120030,10 @@
 	NDA_PROTOCOL = 12,
 	NDA_NH_ID = 13,
 	NDA_FDB_EXT_ATTRS = 14,
-	__NDA_MAX = 15,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
 };
 
 struct nda_cacheinfo {
@@ -98143,67 +120215,6 @@
 };
 
 enum {
-	IFLA_UNSPEC = 0,
-	IFLA_ADDRESS = 1,
-	IFLA_BROADCAST = 2,
-	IFLA_IFNAME = 3,
-	IFLA_MTU = 4,
-	IFLA_LINK = 5,
-	IFLA_QDISC = 6,
-	IFLA_STATS = 7,
-	IFLA_COST = 8,
-	IFLA_PRIORITY = 9,
-	IFLA_MASTER = 10,
-	IFLA_WIRELESS = 11,
-	IFLA_PROTINFO = 12,
-	IFLA_TXQLEN = 13,
-	IFLA_MAP = 14,
-	IFLA_WEIGHT = 15,
-	IFLA_OPERSTATE = 16,
-	IFLA_LINKMODE = 17,
-	IFLA_LINKINFO = 18,
-	IFLA_NET_NS_PID = 19,
-	IFLA_IFALIAS = 20,
-	IFLA_NUM_VF = 21,
-	IFLA_VFINFO_LIST = 22,
-	IFLA_STATS64 = 23,
-	IFLA_VF_PORTS = 24,
-	IFLA_PORT_SELF = 25,
-	IFLA_AF_SPEC = 26,
-	IFLA_GROUP = 27,
-	IFLA_NET_NS_FD = 28,
-	IFLA_EXT_MASK = 29,
-	IFLA_PROMISCUITY = 30,
-	IFLA_NUM_TX_QUEUES = 31,
-	IFLA_NUM_RX_QUEUES = 32,
-	IFLA_CARRIER = 33,
-	IFLA_PHYS_PORT_ID = 34,
-	IFLA_CARRIER_CHANGES = 35,
-	IFLA_PHYS_SWITCH_ID = 36,
-	IFLA_LINK_NETNSID = 37,
-	IFLA_PHYS_PORT_NAME = 38,
-	IFLA_PROTO_DOWN = 39,
-	IFLA_GSO_MAX_SEGS = 40,
-	IFLA_GSO_MAX_SIZE = 41,
-	IFLA_PAD = 42,
-	IFLA_XDP = 43,
-	IFLA_EVENT = 44,
-	IFLA_NEW_NETNSID = 45,
-	IFLA_IF_NETNSID = 46,
-	IFLA_TARGET_NETNSID = 46,
-	IFLA_CARRIER_UP_COUNT = 47,
-	IFLA_CARRIER_DOWN_COUNT = 48,
-	IFLA_NEW_IFINDEX = 49,
-	IFLA_MIN_MTU = 50,
-	IFLA_MAX_MTU = 51,
-	IFLA_PROP_LIST = 52,
-	IFLA_ALT_IFNAME = 53,
-	IFLA_PERM_ADDRESS = 54,
-	IFLA_PROTO_DOWN_REASON = 55,
-	__IFLA_MAX = 56,
-};
-
-enum {
 	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
 	IFLA_PROTO_DOWN_REASON_MASK = 1,
 	IFLA_PROTO_DOWN_REASON_VALUE = 2,
@@ -98249,17 +120260,10 @@
 	IFLA_BRPORT_BACKUP_PORT = 34,
 	IFLA_BRPORT_MRP_RING_OPEN = 35,
 	IFLA_BRPORT_MRP_IN_OPEN = 36,
-	__IFLA_BRPORT_MAX = 37,
-};
-
-enum {
-	IFLA_INFO_UNSPEC = 0,
-	IFLA_INFO_KIND = 1,
-	IFLA_INFO_DATA = 2,
-	IFLA_INFO_XSTATS = 3,
-	IFLA_INFO_SLAVE_KIND = 4,
-	IFLA_INFO_SLAVE_DATA = 5,
-	__IFLA_INFO_MAX = 6,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	__IFLA_BRPORT_MAX = 40,
 };
 
 enum {
@@ -98395,9 +120399,25 @@
 };
 
 enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
 	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
 	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
-	__IFLA_OFFLOAD_XSTATS_MAX = 2,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
 };
 
 enum {
@@ -98437,7 +120457,9 @@
 	IFLA_BRIDGE_VLAN_INFO = 2,
 	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
 	IFLA_BRIDGE_MRP = 4,
-	__IFLA_BRIDGE_MAX = 5,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
 };
 
 enum {
@@ -98505,13 +120527,20 @@
 
 typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
 
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
 struct rtnl_af_ops {
 	struct list_head list;
 	int family;
 	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
 	size_t (*get_link_af_size)(const struct net_device *, u32);
-	int (*validate_link_af)(const struct net_device *, const struct nlattr *);
-	int (*set_link_af)(struct net_device *, const struct nlattr *);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
 	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
 	size_t (*get_stats_af_size)(const struct net_device *);
 };
@@ -98524,6 +120553,21 @@
 	struct callback_head rcu;
 };
 
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[61];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[41];
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
 enum {
 	IF_LINK_MODE_DEFAULT = 0,
 	IF_LINK_MODE_DORMANT = 1,
@@ -98537,6 +120581,200 @@
 struct seg6_pernet_data {
 	struct mutex lock;
 	struct in6_addr *tun_src;
+	struct rhashtable hmac_infos;
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+	struct tcp_md5sig_key *tw_md5_key;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	int pending;
+	unsigned int corkflag;
+	__u8 encap_type;
+	unsigned char no_check6_tx: 1;
+	unsigned char no_check6_rx: 1;
+	unsigned char encap_enabled: 1;
+	unsigned char gro_enabled: 1;
+	unsigned char accept_udp_l4: 1;
+	unsigned char accept_udp_fraglist: 1;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	__u8 pcflag;
+	__u8 unused[3];
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib6_result;
+
+struct fib6_config;
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	long unsigned int fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
 };
 
 enum {
@@ -98582,6 +120820,7 @@
 	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
 	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
 	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
 };
 
 enum {
@@ -98610,6 +120849,11 @@
 	BPF_LWT_ENCAP_IP = 2,
 };
 
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
 struct bpf_tunnel_key {
 	__u32 tunnel_id;
 	union {
@@ -98620,6 +120864,10 @@
 	__u8 tunnel_ttl;
 	__u16 tunnel_ext;
 	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
 };
 
 struct bpf_xfrm_state {
@@ -98749,7 +120997,10 @@
 	__u8 l4_protocol;
 	__be16 sport;
 	__be16 dport;
-	__u16 tot_len;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
 	__u32 ifindex;
 	union {
 		__u8 tos;
@@ -98778,193 +121029,18 @@
 	};
 };
 
-enum rt_scope_t {
-	RT_SCOPE_UNIVERSE = 0,
-	RT_SCOPE_SITE = 200,
-	RT_SCOPE_LINK = 253,
-	RT_SCOPE_HOST = 254,
-	RT_SCOPE_NOWHERE = 255,
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
 };
 
-enum rt_class_t {
-	RT_TABLE_UNSPEC = 0,
-	RT_TABLE_COMPAT = 252,
-	RT_TABLE_DEFAULT = 253,
-	RT_TABLE_MAIN = 254,
-	RT_TABLE_LOCAL = 255,
-	RT_TABLE_MAX = 4294967295,
-};
-
-struct nl_info {
-	struct nlmsghdr *nlh;
-	struct net *nl_net;
-	u32 portid;
-	u8 skip_notify: 1;
-	u8 skip_notify_kernel: 1;
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
 };
 
 typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
 
-struct inet_timewait_sock {
-	struct sock_common __tw_common;
-	__u32 tw_mark;
-	volatile unsigned char tw_substate;
-	unsigned char tw_rcv_wscale;
-	__be16 tw_sport;
-	unsigned int tw_kill: 1;
-	unsigned int tw_transparent: 1;
-	unsigned int tw_flowlabel: 20;
-	unsigned int tw_pad: 2;
-	unsigned int tw_tos: 8;
-	u32 tw_txhash;
-	u32 tw_priority;
-	struct timer_list tw_timer;
-	struct inet_bind_bucket *tw_tb;
-};
-
-struct tcp_timewait_sock {
-	struct inet_timewait_sock tw_sk;
-	u32 tw_rcv_wnd;
-	u32 tw_ts_offset;
-	u32 tw_ts_recent;
-	u32 tw_last_oow_ack_time;
-	int tw_ts_recent_stamp;
-	u32 tw_tx_delay;
-	struct tcp_md5sig_key *tw_md5_key;
-};
-
-struct udp_sock {
-	struct inet_sock inet;
-	int pending;
-	unsigned int corkflag;
-	__u8 encap_type;
-	unsigned char no_check6_tx: 1;
-	unsigned char no_check6_rx: 1;
-	unsigned char encap_enabled: 1;
-	unsigned char gro_enabled: 1;
-	__u16 len;
-	__u16 gso_size;
-	__u16 pcslen;
-	__u16 pcrlen;
-	__u8 pcflag;
-	__u8 unused[3];
-	int (*encap_rcv)(struct sock *, struct sk_buff *);
-	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
-	void (*encap_destroy)(struct sock *);
-	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
-	int (*gro_complete)(struct sock *, struct sk_buff *, int);
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	struct sk_buff_head reader_queue;
-	int forward_deficit;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct udp6_sock {
-	struct udp_sock udp;
-	struct ipv6_pinfo inet6;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcp6_sock {
-	struct tcp_sock tcp;
-	struct ipv6_pinfo inet6;
-};
-
-struct fib6_result;
-
-struct fib6_config;
-
-struct ipv6_stub {
-	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
-	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
-	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
-	int (*ipv6_route_input)(struct sk_buff *);
-	struct fib6_table * (*fib6_get_table)(struct net *, u32);
-	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
-	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
-	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
-	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
-	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
-	void (*fib6_nh_release)(struct fib6_nh *);
-	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
-	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
-	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
-	void (*udpv6_encap_enable)();
-	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
-	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
-	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
-	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
-	struct neigh_table *nd_tbl;
-	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
-};
-
-struct fib6_result {
-	struct fib6_nh *nh;
-	struct fib6_info *f6i;
-	u32 fib6_flags;
-	u8 fib6_type;
-	struct rt6_info *rt6;
-};
-
-struct fib6_config {
-	u32 fc_table;
-	u32 fc_metric;
-	int fc_dst_len;
-	int fc_src_len;
-	int fc_ifindex;
-	u32 fc_flags;
-	u32 fc_protocol;
-	u16 fc_type;
-	u16 fc_delete_all_nh: 1;
-	u16 fc_ignore_dev_down: 1;
-	u16 __unused: 14;
-	u32 fc_nh_id;
-	struct in6_addr fc_dst;
-	struct in6_addr fc_src;
-	struct in6_addr fc_prefsrc;
-	struct in6_addr fc_gateway;
-	long unsigned int fc_expires;
-	struct nlattr *fc_mx;
-	int fc_mx_len;
-	int fc_mp_len;
-	struct nlattr *fc_mp;
-	struct nl_info fc_nlinfo;
-	struct nlattr *fc_encap;
-	u16 fc_encap_type;
-	bool fc_is_fdb;
-};
-
-struct ipv6_bpf_stub {
-	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
-	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
-};
-
-struct fib_result {
-	__be32 prefix;
-	unsigned char prefixlen;
-	unsigned char nh_sel;
-	unsigned char type;
-	unsigned char scope;
-	u32 tclassid;
-	struct fib_nh_common *nhc;
-	struct fib_info *fi;
-	struct fib_table *table;
-	struct hlist_head *fa_head;
-};
-
 enum {
 	INET_ECN_NOT_ECT = 0,
 	INET_ECN_ECT_1 = 1,
@@ -98993,9 +121069,9 @@
 	__u32 ack_seq;
 	union {
 		struct {
-			__u32 in_flight: 30;
 			__u32 is_app_limited: 1;
-			__u32 unused: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
 			__u32 delivered;
 			u64 first_tx_mstamp;
 			u64 delivered_mstamp;
@@ -99004,56 +121080,31 @@
 			struct inet_skb_parm h4;
 			struct inet6_skb_parm h6;
 		} header;
-		struct {
-			__u32 flags;
-			struct sock *sk_redir;
-			void *data_end;
-		} bpf;
 	};
 };
 
-struct strp_stats {
-	long long unsigned int msgs;
-	long long unsigned int bytes;
-	unsigned int mem_fail;
-	unsigned int need_more_hdr;
-	unsigned int msg_too_big;
-	unsigned int msg_timeouts;
-	unsigned int bad_hdr_len;
-};
-
-struct strparser;
-
-struct strp_callbacks {
-	int (*parse_msg)(struct strparser *, struct sk_buff *);
-	void (*rcv_msg)(struct strparser *, struct sk_buff *);
-	int (*read_sock_done)(struct strparser *, int);
-	void (*abort_parser)(struct strparser *, int);
-	void (*lock)(struct strparser *);
-	void (*unlock)(struct strparser *);
-};
-
-struct strparser {
-	struct sock *sk;
-	u32 stopped: 1;
-	u32 paused: 1;
-	u32 aborted: 1;
-	u32 interrupted: 1;
-	u32 unrecov_intr: 1;
-	struct sk_buff **skb_nextp;
-	struct sk_buff *skb_head;
-	unsigned int need_bytes;
-	struct delayed_work msg_timer_work;
-	struct work_struct work;
-	struct strp_stats stats;
-	struct strp_callbacks cb;
-};
-
 struct strp_msg {
 	int full_len;
 	int offset;
 };
 
+struct _strp_msg {
+	struct strp_msg strp;
+	int accum_len;
+};
+
+struct tls_msg {
+	u8 control;
+	u8 decrypted;
+};
+
+struct sk_skb_cb {
+	unsigned char data[20];
+	struct _strp_msg strp;
+	u64 temp_reg;
+	struct tls_msg tls;
+};
+
 struct xdp_umem {
 	void *addrs;
 	u64 size;
@@ -99071,21 +121122,6 @@
 	struct work_struct work;
 };
 
-struct xdp_sock;
-
-struct xsk_map {
-	struct bpf_map map;
-	spinlock_t lock;
-	struct xdp_sock *xsk_map[0];
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
 struct xsk_queue;
 
 struct xdp_sock {
@@ -99145,7 +121181,8 @@
 	SEG6_LOCAL_ACTION_END_AS = 13,
 	SEG6_LOCAL_ACTION_END_AM = 14,
 	SEG6_LOCAL_ACTION_END_BPF = 15,
-	__SEG6_LOCAL_ACTION_MAX = 16,
+	SEG6_LOCAL_ACTION_END_DT46 = 16,
+	__SEG6_LOCAL_ACTION_MAX = 17,
 };
 
 struct seg6_bpf_srh_state {
@@ -99175,6 +121212,30 @@
 	unsigned char rec_seq[8];
 };
 
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
 struct tls_sw_context_rx {
 	struct crypto_aead *aead_recv;
 	struct crypto_wait async_wait;
@@ -99182,12 +121243,9 @@
 	struct sk_buff_head rx_list;
 	void (*saved_data_ready)(struct sock *);
 	struct sk_buff *recv_pkt;
-	u8 control;
 	u8 async_capable: 1;
-	u8 decrypted: 1;
 	atomic_t decrypt_pending;
 	spinlock_t decrypt_compl_lock;
-	bool async_notify;
 };
 
 struct cipher_context {
@@ -99200,6 +121258,9 @@
 	union {
 		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
 		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
 	};
 };
 
@@ -99220,6 +121281,7 @@
 	struct tls_prot_info prot_info;
 	u8 tx_conf: 3;
 	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
 	int (*push_pending_record)(struct sock *, int);
 	void (*sk_write_space)(struct sock *);
 	void *priv_ctx_tx;
@@ -99234,6 +121296,7 @@
 	struct mutex tx_lock;
 	long unsigned int flags;
 	struct proto *sk_proto;
+	struct sock *sk;
 	void (*sk_destruct)(struct sock *);
 	union tls_crypto_context crypto_send;
 	union tls_crypto_context crypto_recv;
@@ -99349,8 +121412,14 @@
 
 typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
 
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
 typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
 
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
 typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
 
 typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
@@ -99387,14 +121456,24 @@
 
 typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
 
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
 typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
 
 typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
 
 typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
 
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
 typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
 
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
 typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
 
 typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
@@ -99413,6 +121492,10 @@
 
 typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
 
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
 typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
 
 typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
@@ -99461,6 +121544,16 @@
 
 typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
 
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *, struct tcphdr *);
+
+typedef u64 (*btf_bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *, struct tcphdr *);
+
 typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
 
 typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
@@ -99479,15 +121572,13 @@
 
 typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
 
-struct bpf_dtab_netdev___2;
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
 
-enum {
-	INET_DIAG_REQ_NONE = 0,
-	INET_DIAG_REQ_BYTECODE = 1,
-	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
-	INET_DIAG_REQ_PROTOCOL = 3,
-	__INET_DIAG_REQ_MAX = 4,
-};
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct unix_sock___2;
 
 struct sock_diag_req {
 	__u8 sdiag_family;
@@ -99506,7 +121597,13 @@
 	struct work_struct work;
 };
 
-typedef int gifconf_func_t(struct net_device *, char *, int, int);
+struct ifconf {
+	int ifc_len;
+	union {
+		char *ifcu_buf;
+		struct ifreq *ifcu_req;
+	} ifc_ifcu;
+};
 
 struct hwtstamp_config {
 	int flags;
@@ -99514,6 +121611,12 @@
 	int rx_filter;
 };
 
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
 enum hwtstamp_tx_types {
 	HWTSTAMP_TX_OFF = 0,
 	HWTSTAMP_TX_ON = 1,
@@ -99542,6 +121645,11 @@
 	__HWTSTAMP_FILTER_CNT = 16,
 };
 
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
 struct tso_t {
 	int next_frag_idx;
 	int size;
@@ -99575,6 +121683,12 @@
 	struct atomic_notifier_head fib_chain;
 };
 
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
 struct xdp_attachment_info {
 	struct bpf_prog *prog;
 	u32 flags;
@@ -99582,6 +121696,8 @@
 
 struct xdp_buff_xsk;
 
+struct xdp_desc;
+
 struct xsk_buff_pool {
 	struct device *dev;
 	struct net_device *netdev;
@@ -99601,6 +121717,7 @@
 	struct xsk_queue *cq;
 	dma_addr_t *dma_pages;
 	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
 	u64 chunk_mask;
 	u64 addrs_cnt;
 	u32 free_list_cnt;
@@ -99608,6 +121725,7 @@
 	u32 free_heads_cnt;
 	u32 headroom;
 	u32 chunk_size;
+	u32 chunk_shift;
 	u32 frame_len;
 	u8 cached_need_wakeup;
 	bool uses_need_wakeup;
@@ -99619,7 +121737,12 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	long: 64;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
 };
 
 struct xdp_buff_xsk {
@@ -99627,7 +121750,6 @@
 	dma_addr_t dma;
 	dma_addr_t frame_dma;
 	struct xsk_buff_pool *pool;
-	bool unaligned;
 	u64 orig_addr;
 	struct list_head free_list_node;
 };
@@ -99731,6 +121853,7 @@
 	struct list_head *driver_block_list;
 	struct netlink_ext_ack *extack;
 	struct Qdisc *sch;
+	struct list_head *cb_list_head;
 };
 
 struct flow_block_cb;
@@ -99756,6 +121879,21 @@
 	unsigned int refcnt;
 };
 
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
 typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
 
 struct flow_indr_dev {
@@ -99763,7 +121901,91 @@
 	flow_indr_block_bind_cb_t *cb;
 	void *cb_priv;
 	refcount_t refcnt;
-	struct callback_head rcu;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct tc_skb_ext {
+	__u32 chain;
+	__u16 mru;
+	__u16 zone;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+struct napi_gro_cb {
+	void *frag0;
+	unsigned int frag0_len;
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	long unsigned int age;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+	struct sk_buff *last;
 };
 
 struct rx_queue_attribute {
@@ -99778,68 +122000,6 @@
 	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
 };
 
-enum __sk_action {
-	__SK_DROP = 0,
-	__SK_PASS = 1,
-	__SK_REDIRECT = 2,
-	__SK_NONE = 3,
-};
-
-struct sk_psock_progs {
-	struct bpf_prog *msg_parser;
-	struct bpf_prog *skb_parser;
-	struct bpf_prog *skb_verdict;
-};
-
-enum sk_psock_state_bits {
-	SK_PSOCK_TX_ENABLED = 0,
-};
-
-struct sk_psock_link {
-	struct list_head list;
-	struct bpf_map *map;
-	void *link_raw;
-};
-
-struct sk_psock_parser {
-	struct strparser strp;
-	bool enabled;
-	void (*saved_data_ready)(struct sock *);
-};
-
-struct sk_psock_work_state {
-	struct sk_buff *skb;
-	u32 len;
-	u32 off;
-};
-
-struct sk_psock {
-	struct sock *sk;
-	struct sock *sk_redir;
-	u32 apply_bytes;
-	u32 cork_bytes;
-	u32 eval;
-	struct sk_msg *cork;
-	struct sk_psock_progs progs;
-	struct sk_psock_parser parser;
-	struct sk_buff_head ingress_skb;
-	struct list_head ingress_msg;
-	long unsigned int state;
-	struct list_head link;
-	spinlock_t link_lock;
-	refcount_t refcnt;
-	void (*saved_unhash)(struct sock *);
-	void (*saved_close)(struct sock *, long int);
-	void (*saved_write_space)(struct sock *);
-	struct proto *sk_proto;
-	struct sk_psock_work_state work_state;
-	struct work_struct work;
-	union {
-		struct callback_head rcu;
-		struct work_struct gc;
-	};
-};
-
 struct inet6_ifaddr {
 	struct in6_addr addr;
 	__u32 prefix_len;
@@ -99861,10 +122021,12 @@
 	struct fib6_info *rt;
 	struct hlist_node addr_lst;
 	struct list_head if_list;
+	struct list_head if_list_aux;
 	struct list_head tmp_list;
 	struct inet6_ifaddr *ifpub;
 	int regen_count;
 	bool tokenized;
+	u8 ifa_proto;
 	struct callback_head rcu;
 	struct in6_addr peer_addr;
 };
@@ -99926,6 +122088,7 @@
 	void *skbaddr;
 	void *location;
 	short unsigned int protocol;
+	enum skb_drop_reason reason;
 	char __data[0];
 };
 
@@ -99948,7 +122111,7 @@
 
 struct trace_event_data_offsets_skb_copy_datagram_iovec {};
 
-typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
 
 typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);
 
@@ -100076,8 +122239,6 @@
 
 typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
 
-typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);
-
 typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
 
 typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
@@ -100086,8 +122247,6 @@
 
 typedef void (*btf_trace_netif_rx_exit)(void *, int);
 
-typedef void (*btf_trace_netif_rx_ni_exit)(void *, int);
-
 typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
 
 struct trace_event_raw_napi_poll {
@@ -100151,18 +122310,36 @@
 	char __data[0];
 };
 
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
 struct trace_event_data_offsets_sock_rcvqueue_full {};
 
 struct trace_event_data_offsets_sock_exceed_buf_limit {};
 
 struct trace_event_data_offsets_inet_sock_set_state {};
 
+struct trace_event_data_offsets_inet_sk_error_report {};
+
 typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
 
 typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);
 
 typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
 
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
 struct trace_event_raw_udp_fail_queue_rcv_skb {
 	struct trace_entry ent;
 	int rc;
@@ -100181,6 +122358,7 @@
 	int state;
 	__u16 sport;
 	__u16 dport;
+	__u16 family;
 	__u8 saddr[4];
 	__u8 daddr[4];
 	__u8 saddr_v6[16];
@@ -100193,6 +122371,7 @@
 	const void *skaddr;
 	__u16 sport;
 	__u16 dport;
+	__u16 family;
 	__u8 saddr[4];
 	__u8 daddr[4];
 	__u8 saddr_v6[16];
@@ -100207,6 +122386,7 @@
 	const void *req;
 	__u16 sport;
 	__u16 dport;
+	__u16 family;
 	__u8 saddr[4];
 	__u8 daddr[4];
 	__u8 saddr_v6[16];
@@ -100220,6 +122400,7 @@
 	__u8 daddr[28];
 	__u16 sport;
 	__u16 dport;
+	__u16 family;
 	__u32 mark;
 	__u16 data_len;
 	__u32 snd_nxt;
@@ -100233,6 +122414,27 @@
 	char __data[0];
 };
 
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
 struct trace_event_data_offsets_tcp_event_sk_skb {};
 
 struct trace_event_data_offsets_tcp_event_sk {};
@@ -100241,6 +122443,10 @@
 
 struct trace_event_data_offsets_tcp_probe {};
 
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
 typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
 
 typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
@@ -100255,6 +122461,10 @@
 
 typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
 
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
 struct trace_event_raw_fib_table_lookup {
 	struct trace_entry ent;
 	u32 tb_id;
@@ -100294,6 +122504,17 @@
 	char __data[0];
 };
 
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
 struct trace_event_raw_qdisc_reset {
 	struct trace_entry ent;
 	u32 __data_loc_dev;
@@ -100322,6 +122543,8 @@
 
 struct trace_event_data_offsets_qdisc_dequeue {};
 
+struct trace_event_data_offsets_qdisc_enqueue {};
+
 struct trace_event_data_offsets_qdisc_reset {
 	u32 dev;
 	u32 kind;
@@ -100339,6 +122562,8 @@
 
 typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
 
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
 typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
 
 typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
@@ -100381,6 +122606,7 @@
 	union {
 		__be32 ip4;
 		struct in6_addr ip6;
+		unsigned char mac_addr[6];
 	} dst;
 	__be16 proto;
 	__u16 vid;
@@ -100411,22 +122637,41 @@
 	long unsigned int delay_time;
 };
 
-struct net_bridge_port;
-
 struct bridge_mcast_querier {
 	struct br_ip addr;
-	struct net_bridge_port *port;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
 };
 
-struct net_bridge;
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge_port;
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+};
+
+struct net_bridge___2;
 
 struct net_bridge_vlan_group;
 
-struct bridge_mcast_stats;
-
 struct net_bridge_port {
-	struct net_bridge *br;
+	struct net_bridge___2 *br;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct list_head list;
 	long unsigned int flags;
 	struct net_bridge_vlan_group *vlgrp;
@@ -100448,37 +122693,92 @@
 	struct timer_list message_age_timer;
 	struct kobject kobj;
 	struct callback_head rcu;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	unsigned char multicast_router;
+	struct net_bridge_mcast_port multicast_ctx;
 	struct bridge_mcast_stats *mcast_stats;
-	struct timer_list multicast_router_timer;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
 	struct hlist_head mglist;
-	struct hlist_node rlist;
 	char sysfs_name[16];
 	struct netpoll *np;
-	int offload_fwd_mark;
+	int hwdom;
+	int offload_count;
+	struct netdev_phys_item_id ppid;
 	u16 group_fwd_mask;
 	u16 backup_redirected_cnt;
 	struct bridge_stp_xstats stp_xstats;
 };
 
-struct bridge_mcast_stats {
-	struct br_mcast_stats mstats;
-	struct u64_stats_sync syncp;
+struct metadata_dst___2;
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst___2 *tunnel_dst;
 };
 
-struct net_bridge {
+struct net_bridge_mcast {
+	struct net_bridge___2 *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	long unsigned int multicast_last_member_interval;
+	long unsigned int multicast_membership_interval;
+	long unsigned int multicast_querier_interval;
+	long unsigned int multicast_query_interval;
+	long unsigned int multicast_query_response_interval;
+	long unsigned int multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats *stats;
+	union {
+		struct net_bridge___2 *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+struct net_bridge___2 {
 	spinlock_t lock;
 	spinlock_t hash_lock;
-	struct list_head port_list;
+	struct hlist_head frame_type_list;
 	struct net_device *dev;
-	struct pcpu_sw_netstats *stats;
 	long unsigned int options;
 	__be16 vlan_proto;
 	u16 default_pvid;
 	struct net_bridge_vlan_group *vlgrp;
 	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
 	union {
 		struct rtable fake_rtable;
 		struct rt6_info fake_rt6_info;
@@ -100505,32 +122805,14 @@
 		BR_KERNEL_STP = 1,
 		BR_USER_STP = 2,
 	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats *mcast_stats;
 	u32 hash_max;
-	u32 multicast_last_member_count;
-	u32 multicast_startup_query_count;
-	u8 multicast_igmp_version;
-	u8 multicast_router;
-	u8 multicast_mld_version;
 	spinlock_t multicast_lock;
-	long unsigned int multicast_last_member_interval;
-	long unsigned int multicast_membership_interval;
-	long unsigned int multicast_querier_interval;
-	long unsigned int multicast_query_interval;
-	long unsigned int multicast_query_response_interval;
-	long unsigned int multicast_startup_query_interval;
 	struct rhashtable mdb_hash_tbl;
 	struct rhashtable sg_port_tbl;
 	struct hlist_head mcast_gc_list;
 	struct hlist_head mdb_list;
-	struct hlist_head router_list;
-	struct timer_list multicast_router_timer;
-	struct bridge_mcast_other_query ip4_other_query;
-	struct bridge_mcast_own_query ip4_own_query;
-	struct bridge_mcast_querier ip4_querier;
-	struct bridge_mcast_stats *mcast_stats;
-	struct bridge_mcast_other_query ip6_other_query;
-	struct bridge_mcast_own_query ip6_own_query;
-	struct bridge_mcast_querier ip6_querier;
 	struct work_struct mcast_gc_work;
 	struct timer_list hello_timer;
 	struct timer_list tcn_timer;
@@ -100538,9 +122820,11 @@
 	struct delayed_work gc_work;
 	struct kobject *ifobj;
 	u32 auto_cnt;
-	int offload_fwd_mark;
+	int last_hwdom;
+	long unsigned int busy_hwdoms;
 	struct hlist_head fdb_list;
-	struct list_head mrp_list;
+	struct hlist_head mrp_list;
+	struct hlist_head mep_list;
 };
 
 struct net_bridge_vlan_group {
@@ -100633,11 +122917,11 @@
 
 typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
 
-typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge___2 *, struct net_bridge_port *, const unsigned char *, u16);
 
-typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge___2 *, struct net_bridge_fdb_entry *);
 
-typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge___2 *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);
 
 struct trace_event_raw_page_pool_release {
 	struct trace_entry ent;
@@ -100772,48 +123056,233 @@
 
 typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
 
-struct clock_identity {
-	u8 id[8];
+struct dm_hw_stat_delta {
+	long unsigned int last_rx;
+	long unsigned int last_drop_val;
+	struct callback_head rcu;
 };
 
-struct port_identity {
-	struct clock_identity clock_identity;
-	__be16 port_number;
+struct net_dm_drop_point {
+	__u8 pc[8];
+	__u32 count;
 };
 
-struct ptp_header {
-	u8 tsmt;
-	u8 ver;
-	__be16 message_length;
-	u8 domain_number;
-	u8 reserved1;
-	u8 flag_field[2];
-	__be64 correction;
-	__be32 reserved2;
-	struct port_identity source_port_identity;
-	__be16 sequence_id;
-	u8 control;
-	u8 log_message_interval;
+struct net_dm_alert_msg {
+	__u32 entries;
+	struct net_dm_drop_point points[0];
+};
+
+enum {
+	NET_DM_CMD_UNSPEC = 0,
+	NET_DM_CMD_ALERT = 1,
+	NET_DM_CMD_CONFIG = 2,
+	NET_DM_CMD_START = 3,
+	NET_DM_CMD_STOP = 4,
+	NET_DM_CMD_PACKET_ALERT = 5,
+	NET_DM_CMD_CONFIG_GET = 6,
+	NET_DM_CMD_CONFIG_NEW = 7,
+	NET_DM_CMD_STATS_GET = 8,
+	NET_DM_CMD_STATS_NEW = 9,
+	_NET_DM_CMD_MAX = 10,
+};
+
+enum net_dm_attr {
+	NET_DM_ATTR_UNSPEC = 0,
+	NET_DM_ATTR_ALERT_MODE = 1,
+	NET_DM_ATTR_PC = 2,
+	NET_DM_ATTR_SYMBOL = 3,
+	NET_DM_ATTR_IN_PORT = 4,
+	NET_DM_ATTR_TIMESTAMP = 5,
+	NET_DM_ATTR_PROTO = 6,
+	NET_DM_ATTR_PAYLOAD = 7,
+	NET_DM_ATTR_PAD = 8,
+	NET_DM_ATTR_TRUNC_LEN = 9,
+	NET_DM_ATTR_ORIG_LEN = 10,
+	NET_DM_ATTR_QUEUE_LEN = 11,
+	NET_DM_ATTR_STATS = 12,
+	NET_DM_ATTR_HW_STATS = 13,
+	NET_DM_ATTR_ORIGIN = 14,
+	NET_DM_ATTR_HW_TRAP_GROUP_NAME = 15,
+	NET_DM_ATTR_HW_TRAP_NAME = 16,
+	NET_DM_ATTR_HW_ENTRIES = 17,
+	NET_DM_ATTR_HW_ENTRY = 18,
+	NET_DM_ATTR_HW_TRAP_COUNT = 19,
+	NET_DM_ATTR_SW_DROPS = 20,
+	NET_DM_ATTR_HW_DROPS = 21,
+	NET_DM_ATTR_FLOW_ACTION_COOKIE = 22,
+	NET_DM_ATTR_REASON = 23,
+	__NET_DM_ATTR_MAX = 24,
+	NET_DM_ATTR_MAX = 23,
+};
+
+enum net_dm_alert_mode {
+	NET_DM_ALERT_MODE_SUMMARY = 0,
+	NET_DM_ALERT_MODE_PACKET = 1,
+};
+
+enum {
+	NET_DM_ATTR_PORT_NETDEV_IFINDEX = 0,
+	NET_DM_ATTR_PORT_NETDEV_NAME = 1,
+	__NET_DM_ATTR_PORT_MAX = 2,
+	NET_DM_ATTR_PORT_MAX = 1,
+};
+
+enum {
+	NET_DM_ATTR_STATS_DROPPED = 0,
+	__NET_DM_ATTR_STATS_MAX = 1,
+	NET_DM_ATTR_STATS_MAX = 0,
+};
+
+enum net_dm_origin {
+	NET_DM_ORIGIN_SW = 0,
+	NET_DM_ORIGIN_HW = 1,
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct list_head port_list;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct list_head param_list;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct mutex reporters_lock;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	struct mutex linecards_lock;
+	const struct devlink_ops *ops;
+	u64 features;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct completion comp;
+	long: 64;
+	char priv[0];
+};
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct net_dm_stats {
+	u64_stats_t dropped;
+	struct u64_stats_sync syncp;
+};
+
+struct net_dm_hw_entry {
+	char trap_name[40];
+	u32 count;
+};
+
+struct net_dm_hw_entries {
+	u32 num_entries;
+	struct net_dm_hw_entry entries[0];
+};
+
+struct per_cpu_dm_data {
+	spinlock_t lock;
+	union {
+		struct sk_buff *skb;
+		struct net_dm_hw_entries *hw_entries;
+	};
+	struct sk_buff_head drop_queue;
+	struct work_struct dm_alert_work;
+	struct timer_list send_timer;
+	struct net_dm_stats stats;
+};
+
+struct net_dm_alert_ops {
+	void (*kfree_skb_probe)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+	void (*napi_poll_probe)(void *, struct napi_struct *, int, int);
+	void (*work_item_func)(struct work_struct *);
+	void (*hw_work_item_func)(struct work_struct *);
+	void (*hw_trap_probe)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+};
+
+struct net_dm_skb_cb {
+	union {
+		struct devlink_trap_metadata *hw_metadata;
+		void *pc;
+	};
+	enum skb_drop_reason reason;
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
 } __attribute__((packed));
 
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
 struct update_classid_context {
 	u32 classid;
 	unsigned int batch;
 };
 
-enum lwtunnel_encap_types {
-	LWTUNNEL_ENCAP_NONE = 0,
-	LWTUNNEL_ENCAP_MPLS = 1,
-	LWTUNNEL_ENCAP_IP = 2,
-	LWTUNNEL_ENCAP_ILA = 3,
-	LWTUNNEL_ENCAP_IP6 = 4,
-	LWTUNNEL_ENCAP_SEG6 = 5,
-	LWTUNNEL_ENCAP_BPF = 6,
-	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
-	LWTUNNEL_ENCAP_RPL = 8,
-	__LWTUNNEL_ENCAP_MAX = 9,
-};
-
 struct rtnexthop {
 	short unsigned int rtnh_len;
 	unsigned char rtnh_flags;
@@ -100866,81 +123335,6 @@
 	int family;
 };
 
-struct bpf_stab {
-	struct bpf_map map;
-	struct sock **sks;
-	struct sk_psock_progs progs;
-	raw_spinlock_t lock;
-	long: 32;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
-
-struct sock_map_seq_info {
-	struct bpf_map *map;
-	struct sock *sk;
-	u32 index;
-};
-
-struct bpf_iter__sockmap {
-	union {
-		struct bpf_iter_meta *meta;
-	};
-	union {
-		struct bpf_map *map;
-	};
-	union {
-		void *key;
-	};
-	union {
-		struct sock *sk;
-	};
-};
-
-struct bpf_shtab_elem {
-	struct callback_head rcu;
-	u32 hash;
-	struct sock *sk;
-	struct hlist_node node;
-	u8 key[0];
-};
-
-struct bpf_shtab_bucket {
-	struct hlist_head head;
-	raw_spinlock_t lock;
-};
-
-struct bpf_shtab {
-	struct bpf_map map;
-	struct bpf_shtab_bucket *buckets;
-	u32 buckets_num;
-	u32 elem_size;
-	struct sk_psock_progs progs;
-	atomic_t count;
-	long: 32;
-	long: 64;
-	long: 64;
-};
-
-typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
-
-typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
-
-struct sock_hash_seq_info {
-	struct bpf_map *map;
-	struct bpf_shtab *htab;
-	u32 bucket_id;
-};
-
 struct dst_cache_pcpu {
 	long unsigned int refresh_ts;
 	struct dst_entry *dst;
@@ -101026,8 +123420,16 @@
 	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
 	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
 	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
-	__DEVLINK_CMD_MAX = 74,
-	DEVLINK_CMD_MAX = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	__DEVLINK_CMD_MAX = 82,
+	DEVLINK_CMD_MAX = 81,
 };
 
 enum devlink_eswitch_mode {
@@ -101035,6 +123437,11 @@
 	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1,
 };
 
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
 enum {
 	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
 	DEVLINK_ATTR_STATS_RX_BYTES = 1,
@@ -101050,11 +123457,44 @@
 	DEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,
 };
 
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
 enum {
 	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
 	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
 };
 
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
 enum devlink_attr {
 	DEVLINK_ATTR_UNSPEC = 0,
 	DEVLINK_ATTR_BUS_NAME = 1,
@@ -101220,8 +123660,24 @@
 	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
 	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
 	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
-	__DEVLINK_ATTR_MAX = 164,
-	DEVLINK_ATTR_MAX = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	__DEVLINK_ATTR_MAX = 175,
+	DEVLINK_ATTR_MAX = 174,
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
 };
 
 enum devlink_dpipe_match_type {
@@ -101257,8 +123713,72 @@
 enum devlink_port_function_attr {
 	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
 	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
-	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 2,
-	DEVLINK_PORT_FUNCTION_ATTR_MAX = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 3,
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	refcount_t refcount;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
 };
 
 struct devlink_dpipe_match {
@@ -101328,6 +123848,11 @@
 	u64 (*size_get)(void *);
 };
 
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
 struct devlink_resource_size_params {
 	u64 size_min;
 	u64 size_max;
@@ -101337,20 +123862,6 @@
 
 typedef u64 devlink_resource_occ_get_t(void *);
 
-struct devlink_resource {
-	const char *name;
-	u64 id;
-	u64 size;
-	u64 size_new;
-	bool size_valid;
-	struct devlink_resource *parent;
-	struct devlink_resource_size_params size_params;
-	struct list_head list;
-	struct list_head resource_list;
-	devlink_resource_occ_get_t *occ_get;
-	void *occ_get_priv;
-};
-
 enum devlink_param_type {
 	DEVLINK_PARAM_TYPE_U8 = 0,
 	DEVLINK_PARAM_TYPE_U16 = 1,
@@ -101383,7 +123894,6 @@
 	const struct devlink_param *param;
 	union devlink_param_value driverinit_value;
 	bool driverinit_value_valid;
-	bool published;
 };
 
 enum devlink_param_generic_id {
@@ -101398,8 +123908,20 @@
 	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
 	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
 	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
-	__DEVLINK_PARAM_GENERIC_ID_MAX = 11,
-	DEVLINK_PARAM_GENERIC_ID_MAX = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
 };
 
 struct devlink_region_ops {
@@ -101458,12 +123980,31 @@
 	bool putting_binary;
 };
 
-struct devlink_trap_metadata {
-	const char *trap_name;
-	const char *trap_group_name;
-	struct net_device *input_dev;
-	const struct flow_action_cookie *fa_cookie;
-	enum devlink_trap_type trap_type;
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
 };
 
 enum devlink_trap_generic_id {
@@ -101557,8 +124098,10 @@
 	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
 	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
 	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
-	__DEVLINK_TRAP_GENERIC_ID_MAX = 90,
-	DEVLINK_TRAP_GENERIC_ID_MAX = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 92,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 91,
 };
 
 enum devlink_trap_group_generic_id {
@@ -101592,7 +124135,67 @@
 	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,
 };
 
-struct devlink_info_req {
+enum {
+	DEVLINK_F_RELOAD = 1,
+};
+
+struct devlink_info_req___2;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	long unsigned int reload_actions;
+	long unsigned int reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req___2 *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_function_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_function_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *);
+	int (*port_del)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+};
+
+struct devlink_info_req___2 {
 	struct sk_buff *msg;
 };
 
@@ -101717,6 +124320,25 @@
 
 typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
 
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
 struct devlink_sb {
 	struct list_head list;
 	unsigned int index;
@@ -101766,8 +124388,8 @@
 };
 
 struct devlink_stats {
-	u64 rx_bytes;
-	u64 rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
 	struct u64_stats_sync syncp;
 };
 
@@ -101805,6 +124427,101 @@
 	struct napi_struct napi;
 };
 
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	raw_spinlock_t lock;
+	long: 32;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	raw_spinlock_t lock;
+};
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 32;
+	long: 64;
+};
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
 enum {
 	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
 	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
@@ -101825,10 +124542,14 @@
 	__SK_DIAG_BPF_STORAGE_MAX = 4,
 };
 
-typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
 
 typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
 
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
 struct bpf_sk_storage_diag {
 	u32 nr_maps;
 	struct bpf_map *maps[0];
@@ -101861,8 +124582,6 @@
 	compat_int_t cmsg_type;
 };
 
-typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
-
 struct nvmem_cell___2;
 
 struct fch_hdr {
@@ -101910,43 +124629,6 @@
 	} hdr;
 } __attribute__((packed));
 
-struct hippi_fp_hdr {
-	__be32 fixed;
-	__be32 d2_size;
-};
-
-struct hippi_le_hdr {
-	__u8 message_type: 4;
-	__u8 double_wide: 1;
-	__u8 fc: 3;
-	__u8 dest_switch_addr[3];
-	__u8 src_addr_type: 4;
-	__u8 dest_addr_type: 4;
-	__u8 src_switch_addr[3];
-	__u16 reserved;
-	__u8 daddr[6];
-	__u16 locally_administered;
-	__u8 saddr[6];
-};
-
-struct hippi_snap_hdr {
-	__u8 dsap;
-	__u8 ssap;
-	__u8 ctrl;
-	__u8 oui[3];
-	__be16 ethertype;
-};
-
-struct hippi_hdr {
-	struct hippi_fp_hdr fp;
-	struct hippi_le_hdr le;
-	struct hippi_snap_hdr snap;
-};
-
-struct hippi_cb {
-	__u32 ifield;
-};
-
 enum macvlan_mode {
 	MACVLAN_MODE_PRIVATE = 1,
 	MACVLAN_MODE_VEPA = 2,
@@ -101990,11 +124672,11 @@
 };
 
 struct vlan_pcpu_stats {
-	u64 rx_packets;
-	u64 rx_bytes;
-	u64 rx_multicast;
-	u64 tx_packets;
-	u64 tx_bytes;
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
 	struct u64_stats_sync syncp;
 	u32 rx_errors;
 	u32 tx_dropped;
@@ -102014,6 +124696,7 @@
 	struct hlist_node hlist;
 	struct macvlan_port *port;
 	struct net_device *lowerdev;
+	netdevice_tracker dev_tracker;
 	void *accel_priv;
 	struct vlan_pcpu_stats *pcpu_stats;
 	long unsigned int mc_filter[4];
@@ -102021,6 +124704,7 @@
 	enum macvlan_mode mode;
 	u16 flags;
 	unsigned int macaddr_count;
+	u32 bc_queue_len_req;
 	struct netpoll___2 *netpoll;
 };
 
@@ -102028,10 +124712,17 @@
 	u64 rate_bytes_ps;
 	u32 mult;
 	u16 overhead;
+	u16 mpu;
 	u8 linklayer;
 	u8 shift;
 };
 
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
 struct mini_Qdisc_pair {
 	struct mini_Qdisc miniq1;
 	struct mini_Qdisc miniq2;
@@ -102043,7 +124734,7 @@
 };
 
 struct tc_qopt_offload_stats {
-	struct gnet_stats_basic_packed *bstats;
+	struct gnet_stats_basic_sync *bstats;
 	struct gnet_stats_queue *qstats;
 };
 
@@ -102072,6 +124763,17 @@
 	struct Qdisc **qdiscs;
 };
 
+struct sch_frag_data {
+	long unsigned int dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
+};
+
 enum tc_link_layer {
 	TC_LINKLAYER_UNAWARE = 0,
 	TC_LINKLAYER_ETHERNET = 1,
@@ -102151,11 +124853,6 @@
 	__NET_XMIT_BYPASS = 131072,
 };
 
-struct tc_skb_ext {
-	__u32 chain;
-	__u16 mru;
-};
-
 enum {
 	TCA_ACT_UNSPEC = 0,
 	TCA_ACT_KIND = 1,
@@ -102167,7 +124864,8 @@
 	TCA_ACT_FLAGS = 7,
 	TCA_ACT_HW_STATS = 8,
 	TCA_ACT_USED_HW_STATS = 9,
-	__TCA_ACT_MAX = 10,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
 };
 
 enum tca_id {
@@ -102248,13 +124946,14 @@
 	atomic_t tcfa_bindcnt;
 	int tcfa_action;
 	struct tcf_t tcfa_tm;
-	struct gnet_stats_basic_packed tcfa_bstats;
-	struct gnet_stats_basic_packed tcfa_bstats_hw;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
 	struct gnet_stats_queue tcfa_qstats;
 	struct net_rate_estimator *tcfa_rate_est;
 	spinlock_t tcfa_lock;
-	struct gnet_stats_basic_cpu *cpu_bstats;
-	struct gnet_stats_basic_cpu *cpu_bstats_hw;
+	struct gnet_stats_basic_sync *cpu_bstats;
+	struct gnet_stats_basic_sync *cpu_bstats_hw;
 	struct gnet_stats_queue *cpu_qstats;
 	struct tc_cookie *act_cookie;
 	struct tcf_chain *goto_chain;
@@ -102262,6 +124961,7 @@
 	u8 hw_stats;
 	u8 used_hw_stats;
 	bool used_hw_stats_valid;
+	u32 in_hw_count;
 };
 
 typedef void (*tc_action_priv_destructor)(void *);
@@ -102276,12 +124976,13 @@
 	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
 	void (*cleanup)(struct tc_action *);
 	int (*lookup)(struct net *, struct tc_action **, u32);
-	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
 	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
 	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
 	size_t (*get_fill_size)(const struct tc_action *);
 	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
 	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
 };
 
 struct tc_cookie {
@@ -102308,6 +125009,7 @@
 	int nr_actions;
 	struct tc_action **actions;
 	struct net *net;
+	netns_tracker ns_tracker;
 	int action;
 	int police;
 };
@@ -102346,196 +125048,10 @@
 	struct tc_action common;
 	unsigned char tcfp_nkeys;
 	unsigned char tcfp_flags;
+	u32 tcfp_off_max_hint;
 	struct tc_pedit_key *tcfp_keys;
 	struct tcf_pedit_key_ex *tcfp_keys_ex;
-};
-
-struct tcf_mirred {
-	struct tc_action common;
-	int tcfm_eaction;
-	bool tcfm_mac_header_xmit;
-	struct net_device *tcfm_dev;
-	struct list_head tcfm_list;
-};
-
-struct tcf_vlan_params {
-	int tcfv_action;
-	unsigned char tcfv_push_dst[6];
-	unsigned char tcfv_push_src[6];
-	u16 tcfv_push_vid;
-	__be16 tcfv_push_proto;
-	u8 tcfv_push_prio;
-	struct callback_head rcu;
-};
-
-struct tcf_vlan {
-	struct tc_action common;
-	struct tcf_vlan_params *vlan_p;
-};
-
-struct tcf_tunnel_key_params {
-	struct callback_head rcu;
-	int tcft_action;
-	struct metadata_dst *tcft_enc_metadata;
-};
-
-struct tcf_tunnel_key {
-	struct tc_action common;
-	struct tcf_tunnel_key_params *params;
-};
-
-struct tcf_csum_params {
-	u32 update_flags;
-	struct callback_head rcu;
-};
-
-struct tcf_csum {
-	struct tc_action common;
-	struct tcf_csum_params *params;
-};
-
-struct tcf_gact {
-	struct tc_action common;
-	u16 tcfg_ptype;
-	u16 tcfg_pval;
-	int tcfg_paction;
-	atomic_t packets;
-};
-
-struct tcf_police_params {
-	int tcfp_result;
-	u32 tcfp_ewma_rate;
-	s64 tcfp_burst;
-	u32 tcfp_mtu;
-	s64 tcfp_mtu_ptoks;
-	struct psched_ratecfg rate;
-	bool rate_present;
-	struct psched_ratecfg peak;
-	bool peak_present;
-	struct callback_head rcu;
-};
-
-struct tcf_police {
-	struct tc_action common;
-	struct tcf_police_params *params;
 	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-	spinlock_t tcfp_lock;
-	s64 tcfp_toks;
-	s64 tcfp_ptoks;
-	s64 tcfp_t_c;
-	long: 64;
-	long: 64;
-	long: 64;
-	long: 64;
-};
-
-struct tcf_sample {
-	struct tc_action common;
-	u32 rate;
-	bool truncate;
-	u32 trunc_size;
-	struct psample_group *psample_group;
-	u32 psample_group_num;
-	struct list_head tcfm_list;
-};
-
-struct tcf_skbedit_params {
-	u32 flags;
-	u32 priority;
-	u32 mark;
-	u32 mask;
-	u16 queue_mapping;
-	u16 ptype;
-	struct callback_head rcu;
-};
-
-struct tcf_skbedit {
-	struct tc_action common;
-	struct tcf_skbedit_params *params;
-};
-
-struct nf_nat_range2 {
-	unsigned int flags;
-	union nf_inet_addr min_addr;
-	union nf_inet_addr max_addr;
-	union nf_conntrack_man_proto min_proto;
-	union nf_conntrack_man_proto max_proto;
-	union nf_conntrack_man_proto base_proto;
-};
-
-struct tcf_ct_flow_table;
-
-struct tcf_ct_params {
-	struct nf_conn *tmpl;
-	u16 zone;
-	u32 mark;
-	u32 mark_mask;
-	u32 labels[4];
-	u32 labels_mask[4];
-	struct nf_nat_range2 range;
-	bool ipv4_range;
-	u16 ct_action;
-	struct callback_head rcu;
-	struct tcf_ct_flow_table *ct_ft;
-	struct nf_flowtable *nf_ft;
-};
-
-struct tcf_ct {
-	struct tc_action common;
-	struct tcf_ct_params *params;
-};
-
-struct tcf_mpls_params {
-	int tcfm_action;
-	u32 tcfm_label;
-	u8 tcfm_tc;
-	u8 tcfm_ttl;
-	u8 tcfm_bos;
-	__be16 tcfm_proto;
-	struct callback_head rcu;
-};
-
-struct tcf_mpls {
-	struct tc_action common;
-	struct tcf_mpls_params *mpls_p;
-};
-
-struct tcfg_gate_entry {
-	int index;
-	u8 gate_state;
-	u32 interval;
-	s32 ipv;
-	s32 maxoctets;
-	struct list_head list;
-};
-
-struct tcf_gate_params {
-	s32 tcfg_priority;
-	u64 tcfg_basetime;
-	u64 tcfg_cycletime;
-	u64 tcfg_cycletime_ext;
-	u32 tcfg_flags;
-	s32 tcfg_clockid;
-	size_t num_entries;
-	struct list_head entries;
-};
-
-struct tcf_gate {
-	struct tc_action common;
-	struct tcf_gate_params param;
-	u8 current_gate_status;
-	ktime_t current_close_time;
-	u32 current_entry_octets;
-	s32 current_max_octets;
-	struct tcfg_gate_entry *next_entry;
-	struct hrtimer hitimer;
-	enum tk_offsets tk_offset;
 };
 
 struct tcf_filter_chain_list_item {
@@ -102590,45 +125106,9 @@
 	const struct tc_action_ops *ops;
 };
 
-struct tc_act_bpf {
-	__u32 index;
-	__u32 capab;
-	int action;
-	int refcnt;
-	int bindcnt;
-};
-
-enum {
-	TCA_ACT_BPF_UNSPEC = 0,
-	TCA_ACT_BPF_TM = 1,
-	TCA_ACT_BPF_PARMS = 2,
-	TCA_ACT_BPF_OPS_LEN = 3,
-	TCA_ACT_BPF_OPS = 4,
-	TCA_ACT_BPF_FD = 5,
-	TCA_ACT_BPF_NAME = 6,
-	TCA_ACT_BPF_PAD = 7,
-	TCA_ACT_BPF_TAG = 8,
-	TCA_ACT_BPF_ID = 9,
-	__TCA_ACT_BPF_MAX = 10,
-};
-
-struct tcf_bpf {
-	struct tc_action common;
-	struct bpf_prog *filter;
-	union {
-		u32 bpf_fd;
-		u16 bpf_num_ops;
-	};
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-};
-
-struct tcf_bpf_cfg {
-	struct bpf_prog *filter;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	u16 bpf_num_ops;
-	bool is_ebpf;
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
 };
 
 struct tc_fifo_qopt {
@@ -102650,19 +125130,25 @@
 	};
 };
 
-enum {
-	TCA_CGROUP_UNSPEC = 0,
-	TCA_CGROUP_ACT = 1,
-	TCA_CGROUP_POLICE = 2,
-	TCA_CGROUP_EMATCHES = 3,
-	__TCA_CGROUP_MAX = 4,
-};
-
 struct tcf_ematch_tree_hdr {
 	__u16 nmatches;
 	__u16 progid;
 };
 
+enum {
+	TCA_EMATCH_TREE_UNSPEC = 0,
+	TCA_EMATCH_TREE_HDR = 1,
+	TCA_EMATCH_TREE_LIST = 2,
+	__TCA_EMATCH_TREE_MAX = 3,
+};
+
+struct tcf_ematch_hdr {
+	__u16 matchid;
+	__u16 kind;
+	__u16 flags;
+	__u16 pad;
+};
+
 struct tcf_pkt_info {
 	unsigned char *ptr;
 	int nexthdr;
@@ -102695,81 +125181,6 @@
 	struct tcf_ematch *matches;
 };
 
-struct cls_cgroup_head {
-	u32 handle;
-	struct tcf_exts exts;
-	struct tcf_ematch_tree ematches;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_BPF_UNSPEC = 0,
-	TCA_BPF_ACT = 1,
-	TCA_BPF_POLICE = 2,
-	TCA_BPF_CLASSID = 3,
-	TCA_BPF_OPS_LEN = 4,
-	TCA_BPF_OPS = 5,
-	TCA_BPF_FD = 6,
-	TCA_BPF_NAME = 7,
-	TCA_BPF_FLAGS = 8,
-	TCA_BPF_FLAGS_GEN = 9,
-	TCA_BPF_TAG = 10,
-	TCA_BPF_ID = 11,
-	__TCA_BPF_MAX = 12,
-};
-
-enum tc_clsbpf_command {
-	TC_CLSBPF_OFFLOAD = 0,
-	TC_CLSBPF_STATS = 1,
-};
-
-struct tc_cls_bpf_offload {
-	struct flow_cls_common_offload common;
-	enum tc_clsbpf_command command;
-	struct tcf_exts *exts;
-	struct bpf_prog *prog;
-	struct bpf_prog *oldprog;
-	const char *name;
-	bool exts_integrated;
-};
-
-struct cls_bpf_head {
-	struct list_head plist;
-	struct idr handle_idr;
-	struct callback_head rcu;
-};
-
-struct cls_bpf_prog {
-	struct bpf_prog *filter;
-	struct list_head link;
-	struct tcf_result res;
-	bool exts_integrated;
-	u32 gen_flags;
-	unsigned int in_hw_count;
-	struct tcf_exts exts;
-	u32 handle;
-	u16 bpf_num_ops;
-	struct sock_filter *bpf_ops;
-	const char *bpf_name;
-	struct tcf_proto *tp;
-	struct rcu_work rwork;
-};
-
-enum {
-	TCA_EMATCH_TREE_UNSPEC = 0,
-	TCA_EMATCH_TREE_HDR = 1,
-	TCA_EMATCH_TREE_LIST = 2,
-	__TCA_EMATCH_TREE_MAX = 3,
-};
-
-struct tcf_ematch_hdr {
-	__u16 matchid;
-	__u16 kind;
-	__u16 flags;
-	__u16 pad;
-};
-
 struct sockaddr_nl {
 	__kernel_sa_family_t nl_family;
 	short unsigned int nl_pad;
@@ -102817,6 +125228,18 @@
 	struct list_head list;
 };
 
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
 struct netlink_sock {
 	struct sock sk;
 	u32 portid;
@@ -102887,8 +125310,6 @@
 	gfp_t allocation;
 	struct sk_buff *skb;
 	struct sk_buff *skb2;
-	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
-	void *tx_data;
 };
 
 struct netlink_set_err_data {
@@ -103042,16 +125463,116 @@
 
 typedef void (*btf_trace_bpf_test_finish)(void *, int *);
 
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	struct xdp_frame frm;
+	u8 data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
 struct bpf_fentry_test_t {
 	struct bpf_fentry_test_t *a;
 };
 
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct prog_test_pass1 {
+	int x0;
+	struct {
+		int x1;
+		struct {
+			int x2;
+			struct {
+				int x3;
+			};
+		};
+	};
+};
+
+struct prog_test_pass2 {
+	int len;
+	short int arr1[4];
+	struct {
+		char arr2[4];
+		long unsigned int arr3[8];
+	} x;
+};
+
+struct prog_test_fail1 {
+	void *p;
+	int x;
+};
+
+struct prog_test_fail2 {
+	int x8;
+	struct prog_test_pass1 x;
+};
+
+struct prog_test_fail3 {
+	int len;
+	char arr1[2];
+	char arr2[0];
+};
+
 struct bpf_raw_tp_test_run_info {
 	struct bpf_prog *prog;
 	void *ctx;
 	u32 retval;
 };
 
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
 struct ethtool_cmd {
 	__u32 cmd;
 	__u32 supported;
@@ -103082,7 +125603,8 @@
 	ETHTOOL_RX_COPYBREAK = 1,
 	ETHTOOL_TX_COPYBREAK = 2,
 	ETHTOOL_PFC_PREVENTION_TOUT = 3,
-	__ETHTOOL_TUNABLE_COUNT = 4,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
 };
 
 enum tunable_type_id {
@@ -103182,6 +125704,34 @@
 	char data[0];
 };
 
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+struct compat_ethtool_rx_flow_spec {
+	u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	compat_u64 ring_cookie;
+	u32 location;
+} __attribute__((packed));
+
+struct compat_ethtool_rxnfc {
+	u32 cmd;
+	u32 flow_type;
+	compat_u64 data;
+	struct compat_ethtool_rx_flow_spec fs;
+	u32 rule_cnt;
+	u32 rule_locs[0];
+} __attribute__((packed));
+
 enum {
 	ETH_RSS_HASH_TOP_BIT = 0,
 	ETH_RSS_HASH_XOR_BIT = 1,
@@ -103199,6 +125749,14 @@
 	u32 rss_ctx;
 };
 
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
 struct ethtool_link_usettings {
 	struct ethtool_link_settings base;
 	struct {
@@ -103218,12 +125776,10 @@
 	struct flow_dissector_key_ip ip;
 	struct flow_dissector_key_vlan vlan;
 	struct flow_dissector_key_eth_addrs eth_addrs;
-	long: 48;
 };
 
 struct ethtool_rx_flow_match {
 	struct flow_dissector dissector;
-	int: 32;
 	struct ethtool_rx_flow_key key;
 	struct ethtool_rx_flow_key mask;
 };
@@ -103235,6 +125791,12 @@
 	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
 };
 
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
 enum {
 	ETHTOOL_MSG_USER_NONE = 0,
 	ETHTOOL_MSG_STRSET_GET = 1,
@@ -103265,8 +125827,15 @@
 	ETHTOOL_MSG_CABLE_TEST_ACT = 26,
 	ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,
 	ETHTOOL_MSG_TUNNEL_INFO_GET = 28,
-	__ETHTOOL_MSG_USER_CNT = 29,
-	ETHTOOL_MSG_USER_MAX = 28,
+	ETHTOOL_MSG_FEC_GET = 29,
+	ETHTOOL_MSG_FEC_SET = 30,
+	ETHTOOL_MSG_MODULE_EEPROM_GET = 31,
+	ETHTOOL_MSG_STATS_GET = 32,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET = 33,
+	ETHTOOL_MSG_MODULE_GET = 34,
+	ETHTOOL_MSG_MODULE_SET = 35,
+	__ETHTOOL_MSG_USER_CNT = 36,
+	ETHTOOL_MSG_USER_MAX = 35,
 };
 
 enum {
@@ -103309,8 +125878,9 @@
 	ETHTOOL_A_LINKMODES_DUPLEX = 6,
 	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
 	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
-	__ETHTOOL_A_LINKMODES_CNT = 9,
-	ETHTOOL_A_LINKMODES_MAX = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	__ETHTOOL_A_LINKMODES_CNT = 10,
+	ETHTOOL_A_LINKMODES_MAX = 9,
 };
 
 enum {
@@ -103372,8 +125942,12 @@
 	ETHTOOL_A_RINGS_RX_MINI = 7,
 	ETHTOOL_A_RINGS_RX_JUMBO = 8,
 	ETHTOOL_A_RINGS_TX = 9,
-	__ETHTOOL_A_RINGS_CNT = 10,
-	ETHTOOL_A_RINGS_MAX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	__ETHTOOL_A_RINGS_CNT = 14,
+	ETHTOOL_A_RINGS_MAX = 13,
 };
 
 enum {
@@ -103416,8 +125990,10 @@
 	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
 	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
 	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
-	__ETHTOOL_A_COALESCE_CNT = 24,
-	ETHTOOL_A_COALESCE_MAX = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	__ETHTOOL_A_COALESCE_CNT = 26,
+	ETHTOOL_A_COALESCE_MAX = 25,
 };
 
 enum {
@@ -103456,6 +126032,15 @@
 };
 
 enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+enum {
 	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
 	ETHTOOL_A_CABLE_TEST_HEADER = 1,
 	__ETHTOOL_A_CABLE_TEST_CNT = 2,
@@ -103478,12 +126063,104 @@
 	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
 };
 
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
 enum ethtool_multicast_groups {
 	ETHNL_MCGRP_MONITOR = 0,
 };
 
 struct ethnl_req_info {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	u32 flags;
 };
 
@@ -103590,7 +126267,7 @@
 
 struct strset_reply_data {
 	struct ethnl_reply_data base;
-	struct strset_info sets[16];
+	struct strset_info sets[21];
 };
 
 struct linkinfo_reply_data {
@@ -103606,11 +126283,6 @@
 	bool peer_empty;
 };
 
-struct link_mode_info {
-	int speed;
-	u8 duplex;
-};
-
 struct linkstate_reply_data {
 	struct ethnl_reply_data base;
 	int link;
@@ -103647,9 +126319,22 @@
 	u32 priv_flags;
 };
 
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
+};
+
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
 struct rings_reply_data {
 	struct ethnl_reply_data base;
 	struct ethtool_ringparam ringparam;
+	struct kernel_ethtool_ringparam kernel_ringparam;
 };
 
 struct channels_reply_data {
@@ -103660,6 +126345,7 @@
 struct coalesce_reply_data {
 	struct ethnl_reply_data base;
 	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
 	u32 supported_params;
 };
 
@@ -103830,6 +126516,96 @@
 	int pos_idx;
 };
 
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	long unsigned int fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 4,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	long unsigned int stat_mask[1];
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
 struct nf_hook_entries_rcu_head {
 	struct callback_head head;
 	void *allocation;
@@ -103843,6 +126619,7 @@
 	int (*parse_nat_setup)(struct nf_conn___2 *, enum nf_nat_manip_type, const struct nlattr *);
 	void (*decode_session)(struct sk_buff *, struct flowi *);
 	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn___2 *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn___2 *);
 };
 
 struct nf_conntrack_tuple___2;
@@ -103851,10 +126628,10 @@
 	int (*update)(struct net *, struct sk_buff *);
 	void (*destroy)(struct nf_conntrack *);
 	bool (*get_tuple_skb)(struct nf_conntrack_tuple___2 *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
 };
 
 struct nfnl_ct_hook {
-	struct nf_conn___2 * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);
 	size_t (*build_size)(const struct nf_conn___2 *);
 	int (*build)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, u_int16_t, u_int16_t);
 	int (*parse)(const struct nlattr *, struct nf_conn___2 *);
@@ -103862,6 +126639,8 @@
 	void (*seq_adjust)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, s32);
 };
 
+struct nf_queue_entry;
+
 struct nf_ipv6_ops {
 	void (*route_input)(struct sk_buff *);
 	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
@@ -103932,6 +126711,11 @@
 	u_int32_t mark;
 };
 
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
 struct nf_sockopt_ops {
 	struct list_head list;
 	u_int8_t pf;
@@ -104018,6 +126802,8 @@
 	unsigned char sf_crcount;
 };
 
+typedef u8 dscp_t;
+
 struct ipv4_addr_key {
 	__be32 addr;
 	int vif;
@@ -104054,16 +126840,18 @@
 	u32 tb_id;
 	__be32 dst;
 	int dst_len;
-	u8 tos;
+	dscp_t dscp;
 	u8 type;
 	u8 offload: 1;
 	u8 trap: 1;
-	u8 unused: 6;
+	u8 offload_failed: 1;
+	u8 unused: 5;
 };
 
 struct uncached_list {
 	spinlock_t lock;
 	struct list_head head;
+	struct list_head quarantine;
 };
 
 struct ip_rt_acct {
@@ -104087,15 +126875,15 @@
 struct fib_alias {
 	struct hlist_node fa_list;
 	struct fib_info *fa_info;
-	u8 fa_tos;
+	dscp_t fa_dscp;
 	u8 fa_type;
 	u8 fa_state;
 	u8 fa_slen;
 	u32 tb_id;
 	s16 fa_default;
-	u8 offload: 1;
-	u8 trap: 1;
-	u8 unused: 6;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
 	struct callback_head rcu;
 };
 
@@ -104111,7 +126899,7 @@
 
 struct raw_hashinfo {
 	rwlock_t lock;
-	struct hlist_head ht[256];
+	struct hlist_nulls_head ht[256];
 };
 
 enum ip_defrag_users {
@@ -104197,11 +126985,22 @@
 };
 
 struct ip_msfilter {
-	__be32 imsf_multiaddr;
-	__be32 imsf_interface;
-	__u32 imsf_fmode;
-	__u32 imsf_numsrc;
-	__be32 imsf_slist[1];
+	union {
+		struct {
+			__be32 imsf_multiaddr_aux;
+			__be32 imsf_interface_aux;
+			__u32 imsf_fmode_aux;
+			__u32 imsf_numsrc_aux;
+			__be32 imsf_slist[1];
+		};
+		struct {
+			__be32 imsf_multiaddr;
+			__be32 imsf_interface;
+			__u32 imsf_fmode;
+			__u32 imsf_numsrc;
+			__be32 imsf_slist_flex[0];
+		};
+	};
 };
 
 struct group_req {
@@ -104216,11 +127015,22 @@
 };
 
 struct group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
 };
 
 struct in_pktinfo {
@@ -104241,11 +127051,22 @@
 } __attribute__((packed));
 
 struct compat_group_filter {
-	__u32 gf_interface;
-	struct __kernel_sockaddr_storage gf_group;
-	__u32 gf_fmode;
-	__u32 gf_numsrc;
-	struct __kernel_sockaddr_storage gf_slist[1];
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
 } __attribute__((packed));
 
 enum {
@@ -104291,22 +127112,6 @@
 	struct tcp_bbr_info bbr;
 };
 
-enum {
-	BPF_TCP_ESTABLISHED = 1,
-	BPF_TCP_SYN_SENT = 2,
-	BPF_TCP_SYN_RECV = 3,
-	BPF_TCP_FIN_WAIT1 = 4,
-	BPF_TCP_FIN_WAIT2 = 5,
-	BPF_TCP_TIME_WAIT = 6,
-	BPF_TCP_CLOSE = 7,
-	BPF_TCP_CLOSE_WAIT = 8,
-	BPF_TCP_LAST_ACK = 9,
-	BPF_TCP_LISTEN = 10,
-	BPF_TCP_CLOSING = 11,
-	BPF_TCP_NEW_SYN_RECV = 12,
-	BPF_TCP_MAX_STATES = 13,
-};
-
 enum inet_csk_ack_state_t {
 	ICSK_ACK_SCHED = 1,
 	ICSK_ACK_TIMER = 2,
@@ -104434,6 +127239,7 @@
 	TCP_NLA_TIMEOUT_REHASH = 23,
 	TCP_NLA_BYTES_NOTSENT = 24,
 	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
 };
 
 struct tcp_zerocopy_receive {
@@ -104442,6 +127248,29 @@
 	__u32 recv_skip_hint;
 	__u32 inq;
 	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
+};
+
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
 };
 
 struct tcp_md5sig_pool {
@@ -104457,6 +127286,11 @@
 	__TCP_CHRONO_MAX = 4,
 };
 
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
+};
+
 struct tcp_splice_state {
 	struct pipe_inode_info *pipe;
 	size_t len;
@@ -104489,13 +127323,18 @@
 	u64 data_seq;
 	u32 subflow_seq;
 	u16 data_len;
+	__sum16 csum;
 	u8 use_map: 1;
 	u8 dsn64: 1;
 	u8 data_fin: 1;
 	u8 use_ack: 1;
 	u8 ack64: 1;
 	u8 mpc_map: 1;
-	u8 __unused: 2;
+	u8 frozen: 1;
+	u8 reset_transient: 1;
+	u8 reset_reason: 4;
+	u8 csum_reqd: 1;
+	u8 infinite_map: 1;
 };
 
 enum tcp_queue {
@@ -104526,11 +127365,6 @@
 	PKT_HASH_TYPE_L4 = 3,
 };
 
-enum {
-	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
-	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
-};
-
 enum tsq_flags {
 	TSQF_THROTTLED = 1,
 	TSQF_QUEUED = 2,
@@ -104540,24 +127374,59 @@
 	TCPF_MTU_REDUCED_DEFERRED = 32,
 };
 
-struct mptcp_out_options {
-	u16 suboptions;
-	u64 sndr_key;
-	u64 rcvr_key;
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_rm_list {
+	u8 ids[8];
+	u8 nr;
+};
+
+struct mptcp_addr_info {
+	u8 id;
+	sa_family_t family;
+	__be16 port;
 	union {
 		struct in_addr addr;
 		struct in6_addr addr6;
 	};
-	u8 addr_id;
-	u64 ahmac;
-	u8 rm_id;
+};
+
+struct mptcp_out_options {
+	u16 suboptions;
+	struct mptcp_rm_list rm_list;
 	u8 join_id;
 	u8 backup;
-	u32 nonce;
-	u64 thmac;
-	u32 token;
-	u8 hmac[20];
-	struct mptcp_ext ext_copy;
+	u8 reset_reason: 4;
+	u8 reset_transient: 1;
+	u8 csum_reqd: 1;
+	u8 allow_join_id0: 1;
+	union {
+		struct {
+			u64 sndr_key;
+			u64 rcvr_key;
+			u64 data_seq;
+			u32 subflow_seq;
+			u16 data_len;
+			__sum16 csum;
+		};
+		struct {
+			struct mptcp_addr_info addr;
+			u64 ahmac;
+		};
+		struct {
+			struct mptcp_ext ext_copy;
+			u64 fail_seq;
+		};
+		struct {
+			u32 nonce;
+			u32 token;
+			u64 thmac;
+			u8 hmac[20];
+		};
+	};
 };
 
 struct tcp_out_options {
@@ -104621,7 +127490,6 @@
 	struct seq_net_private p;
 	enum tcp_seq_states state;
 	struct sock *syn_wait_sk;
-	struct tcp_seq_afinfo *bpf_seq_afinfo;
 	int bucket;
 	int offset;
 	int sbucket;
@@ -104629,6 +127497,15 @@
 	loff_t last_pos;
 };
 
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
 struct bpf_iter__tcp {
 	union {
 		struct bpf_iter_meta *meta;
@@ -104784,9 +127661,11 @@
 	unsigned char flags;
 };
 
-typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
 
-typedef struct sock * (*udp_lookup_t)(struct sk_buff *, __be16, __be16);
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
 
 struct arpreq {
 	struct sockaddr arp_pa;
@@ -104800,24 +127679,6 @@
 	char ax25_call[7];
 } ax25_address;
 
-enum {
-	AX25_VALUES_IPDEFMODE = 0,
-	AX25_VALUES_AXDEFMODE = 1,
-	AX25_VALUES_BACKOFF = 2,
-	AX25_VALUES_CONMODE = 3,
-	AX25_VALUES_WINDOW = 4,
-	AX25_VALUES_EWINDOW = 5,
-	AX25_VALUES_T1 = 6,
-	AX25_VALUES_T2 = 7,
-	AX25_VALUES_T3 = 8,
-	AX25_VALUES_IDLE = 9,
-	AX25_VALUES_N2 = 10,
-	AX25_VALUES_PACLEN = 11,
-	AX25_VALUES_PROTOCOL = 12,
-	AX25_VALUES_DS_TIMEOUT = 13,
-	AX25_MAX_VALUES = 14,
-};
-
 enum ip_conntrack_status {
 	IPS_EXPECTED_BIT = 0,
 	IPS_EXPECTED = 1,
@@ -104878,6 +127739,27 @@
 	__u8 class_type;
 };
 
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
 struct icmp_bxm {
 	struct sk_buff *skb;
 	int offset;
@@ -104891,7 +127773,7 @@
 };
 
 struct icmp_control {
-	bool (*handler)(struct sk_buff *);
+	enum skb_drop_reason (*handler)(struct sk_buff *);
 	short int error;
 };
 
@@ -104915,7 +127797,8 @@
 	IFA_FLAGS = 8,
 	IFA_RT_PRIORITY = 9,
 	IFA_TARGET_NETNSID = 10,
-	__IFA_MAX = 11,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
 };
 
 struct ifa_cacheinfo {
@@ -104965,7 +127848,7 @@
 
 struct devinet_sysctl_table {
 	struct ctl_table_header *sysctl_header;
-	struct ctl_table devinet_vars[33];
+	struct ctl_table devinet_vars[34];
 };
 
 struct rtentry {
@@ -105063,7 +127946,7 @@
 
 struct fib_config {
 	u8 fc_dst_len;
-	u8 fc_tos;
+	dscp_t fc_dscp;
 	u8 fc_protocol;
 	u8 fc_scope;
 	u8 fc_type;
@@ -105125,7 +128008,7 @@
 	u32 dst;
 	int dst_len;
 	struct fib_info *fi;
-	u8 tos;
+	dscp_t dscp;
 	u8 type;
 	u32 tb_id;
 };
@@ -105252,7 +128135,7 @@
 
 struct ping_table {
 	struct hlist_nulls_head hash[64];
-	rwlock_t lock;
+	spinlock_t lock;
 };
 
 enum lwtunnel_ip_t {
@@ -105369,7 +128252,8 @@
 
 enum {
 	NEXTHOP_GRP_TYPE_MPATH = 0,
-	__NEXTHOP_GRP_TYPE_MAX = 1,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
 };
 
 enum {
@@ -105385,7 +128269,28 @@
 	NHA_GROUPS = 9,
 	NHA_MASTER = 10,
 	NHA_FDB = 11,
-	__NHA_MAX = 12,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
 };
 
 struct nh_config {
@@ -105403,6 +128308,12 @@
 	} gw;
 	struct nlattr *nh_grp;
 	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	long unsigned int nh_grp_res_idle_timer;
+	long unsigned int nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
 	struct nlattr *nh_encap;
 	u16 nh_encap_type;
 	u32 nlflags;
@@ -105411,6 +128322,90 @@
 
 enum nexthop_event_type {
 	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+	u32 done_nh_idx;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
 };
 
 struct bpfilter_umh_ops {
@@ -105437,7 +128432,7 @@
 	struct fib_rule common;
 	u8 dst_len;
 	u8 src_len;
-	u8 tos;
+	dscp_t dscp;
 	__be32 src;
 	__be32 srcmask;
 	__be32 dst;
@@ -105562,6 +128557,7 @@
 
 struct vif_device {
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	long unsigned int bytes_in;
 	long unsigned int bytes_out;
 	long unsigned int pkt_in;
@@ -105699,44 +128695,6 @@
 	__u64 mfcs_wrong_if;
 };
 
-enum rpc_display_format_t {
-	RPC_DISPLAY_ADDR = 0,
-	RPC_DISPLAY_PORT = 1,
-	RPC_DISPLAY_PROTO = 2,
-	RPC_DISPLAY_HEX_ADDR = 3,
-	RPC_DISPLAY_HEX_PORT = 4,
-	RPC_DISPLAY_NETID = 5,
-	RPC_DISPLAY_MAX = 6,
-};
-
-struct ic_device {
-	struct ic_device *next;
-	struct net_device *dev;
-	short unsigned int flags;
-	short int able;
-	__be32 xid;
-};
-
-struct bootp_pkt {
-	struct iphdr iph;
-	struct udphdr udph;
-	u8 op;
-	u8 htype;
-	u8 hlen;
-	u8 hops;
-	__be32 xid;
-	__be16 secs;
-	__be16 flags;
-	__be32 client_ip;
-	__be32 your_ip;
-	__be32 server_ip;
-	__be32 relay_ip;
-	u8 hw_addr[16];
-	u8 serv_name[64];
-	u8 boot_file[128];
-	u8 exten[312];
-};
-
 struct bictcp {
 	u32 cnt;
 	u32 last_max_cwnd;
@@ -105769,9 +128727,6 @@
 	struct scatterlist sg_content_type;
 	char aad_space[13];
 	u8 iv_data[16];
-	long: 24;
-	long: 64;
-	long: 64;
 	struct aead_request aead_req;
 	u8 aead_req_ctx[0];
 };
@@ -105803,7 +128758,9 @@
 enum {
 	TCP_BPF_BASE = 0,
 	TCP_BPF_TX = 1,
-	TCP_BPF_NUM_CFGS = 2,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
 };
 
 enum {
@@ -105902,12 +128859,6 @@
 
 typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
 
-struct seqcount_mutex {
-	seqcount_t seqcount;
-};
-
-typedef struct seqcount_mutex seqcount_mutex_t;
-
 enum {
 	XFRM_STATE_VOID = 0,
 	XFRM_STATE_ACQ = 1,
@@ -106117,11 +129068,12 @@
 	struct ip_tunnel *next;
 	struct hlist_node hash_node;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct net *net;
 	long unsigned int err_time;
 	int err_count;
 	u32 i_seqno;
-	u32 o_seqno;
+	atomic_t o_seqno;
 	int tun_hlen;
 	u32 index;
 	u8 erspan_ver;
@@ -106168,6 +129120,7 @@
 struct ip6_tnl {
 	struct ip6_tnl *next;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	struct net *net;
 	struct __ip6_tnl_parm parms;
 	struct flowi fl;
@@ -106176,7 +129129,7 @@
 	int err_count;
 	long unsigned int err_time;
 	__u32 i_seqno;
-	__u32 o_seqno;
+	atomic_t o_seqno;
 	int hlen;
 	int tun_hlen;
 	int encap_hlen;
@@ -106224,6 +129177,11 @@
 	__u8 flags;
 };
 
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+};
+
 struct espintcp_msg {
 	struct sk_buff *skb;
 	struct sk_msg skmsg;
@@ -106253,6 +129211,31 @@
 	unsigned int splice_flags;
 };
 
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
 struct ipv6_params {
 	__s32 disable_ipv6;
 	__s32 autoconf;
@@ -106296,6 +129279,14 @@
 	struct inet6_dev *idev;
 };
 
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
 struct ip6_fraglist_iter {
 	struct ipv6hdr *tmp_hdr;
 	struct sk_buff *frag;
@@ -106329,9 +129320,9 @@
 	struct sockcm_cookie sockc;
 	__s16 hlimit;
 	__s16 tclass;
+	__u16 gso_size;
 	__s8 dontfrag;
 	struct ipv6_txoptions *opt;
-	__u16 gso_size;
 };
 
 enum {
@@ -106344,7 +129335,8 @@
 	IFLA_INET6_ICMP6STATS = 6,
 	IFLA_INET6_TOKEN = 7,
 	IFLA_INET6_ADDR_GEN_MODE = 8,
-	__IFLA_INET6_MAX = 9,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
 };
 
 enum in6_addr_gen_mode {
@@ -106361,32 +129353,6 @@
 	__u32 retrans_time;
 };
 
-struct wpan_phy;
-
-struct wpan_dev_header_ops;
-
-struct wpan_dev {
-	struct wpan_phy *wpan_phy;
-	int iftype;
-	struct list_head list;
-	struct net_device *netdev;
-	const struct wpan_dev_header_ops *header_ops;
-	struct net_device *lowpan_dev;
-	u32 identifier;
-	__le16 pan_id;
-	__le16 short_addr;
-	__le64 extended_addr;
-	atomic_t bsn;
-	atomic_t dsn;
-	u8 min_be;
-	u8 max_be;
-	u8 csma_retries;
-	s8 frame_retries;
-	bool lbt;
-	bool promiscuous_mode;
-	bool ackreq;
-};
-
 struct prefixmsg {
 	unsigned char prefix_family;
 	unsigned char prefix_pad1;
@@ -106469,7 +129435,13 @@
 	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
 	DEVCONF_NDISC_TCLASS = 50,
 	DEVCONF_RPL_SEG_ENABLED = 51,
-	DEVCONF_MAX = 52,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_MAX = 58,
 };
 
 enum {
@@ -106480,92 +129452,6 @@
 	INET6_IFADDR_STATE_DEAD = 4,
 };
 
-enum nl802154_cca_modes {
-	__NL802154_CCA_INVALID = 0,
-	NL802154_CCA_ENERGY = 1,
-	NL802154_CCA_CARRIER = 2,
-	NL802154_CCA_ENERGY_CARRIER = 3,
-	NL802154_CCA_ALOHA = 4,
-	NL802154_CCA_UWB_SHR = 5,
-	NL802154_CCA_UWB_MULTIPLEXED = 6,
-	__NL802154_CCA_ATTR_AFTER_LAST = 7,
-	NL802154_CCA_ATTR_MAX = 6,
-};
-
-enum nl802154_cca_opts {
-	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
-	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
-	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
-	NL802154_CCA_OPT_ATTR_MAX = 1,
-};
-
-enum nl802154_supported_bool_states {
-	NL802154_SUPPORTED_BOOL_FALSE = 0,
-	NL802154_SUPPORTED_BOOL_TRUE = 1,
-	__NL802154_SUPPORTED_BOOL_INVALD = 2,
-	NL802154_SUPPORTED_BOOL_BOTH = 3,
-	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
-	NL802154_SUPPORTED_BOOL_MAX = 3,
-};
-
-struct wpan_phy_supported {
-	u32 channels[32];
-	u32 cca_modes;
-	u32 cca_opts;
-	u32 iftypes;
-	enum nl802154_supported_bool_states lbt;
-	u8 min_minbe;
-	u8 max_minbe;
-	u8 min_maxbe;
-	u8 max_maxbe;
-	u8 min_csma_backoffs;
-	u8 max_csma_backoffs;
-	s8 min_frame_retries;
-	s8 max_frame_retries;
-	size_t tx_powers_size;
-	size_t cca_ed_levels_size;
-	const s32 *tx_powers;
-	const s32 *cca_ed_levels;
-};
-
-struct wpan_phy_cca {
-	enum nl802154_cca_modes mode;
-	enum nl802154_cca_opts opt;
-};
-
-struct wpan_phy {
-	const void *privid;
-	u32 flags;
-	u8 current_channel;
-	u8 current_page;
-	struct wpan_phy_supported supported;
-	s32 transmit_power;
-	struct wpan_phy_cca cca;
-	__le64 perm_extended_addr;
-	s32 cca_ed_level;
-	u8 symbol_duration;
-	u16 lifs_period;
-	u16 sifs_period;
-	struct device dev;
-	possible_net_t _net;
-	long: 64;
-	long: 64;
-	char priv[0];
-};
-
-struct ieee802154_addr {
-	u8 mode;
-	__le16 pan_id;
-	union {
-		__le16 short_addr;
-		__le64 extended_addr;
-	};
-};
-
-struct wpan_dev_header_ops {
-	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
-};
-
 union fwnet_hwaddr {
 	u8 u[16];
 	struct {
@@ -106586,6 +129472,7 @@
 struct ifa6_config {
 	const struct in6_addr *pfx;
 	unsigned int plen;
+	u8 ifa_proto;
 	const struct in6_addr *peer_pfx;
 	u32 rt_priority;
 	u32 ifa_flags;
@@ -106689,13 +129576,6 @@
 	u32 label;
 };
 
-struct rd_msg {
-	struct icmp6hdr icmph;
-	struct in6_addr target;
-	struct in6_addr dest;
-	__u8 opt[0];
-};
-
 struct fib6_gc_args {
 	int timeout;
 	int more;
@@ -106719,6 +129599,13 @@
 	__u8 prefix[0];
 };
 
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
 struct rt6_rtnl_dump_arg {
 	struct sk_buff *skb;
 	struct netlink_callback *cb;
@@ -106778,6 +129665,7 @@
 	struct work_struct work;
 	struct in6_addr target;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 };
 
 struct fib6_nh_frl_arg {
@@ -107005,14 +129893,14 @@
 	char c[4];
 };
 
-typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *);
-
 struct ipv6_destopt_hao {
 	__u8 type;
 	__u8 length;
 	struct in6_addr addr;
 } __attribute__((packed));
 
+typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);
+
 struct icmpv6_msg {
 	struct sk_buff *skb;
 	int offset;
@@ -107112,9 +130000,70 @@
 	} segments;
 };
 
-struct tlvtype_proc {
-	int type;
-	bool (*func)(struct sk_buff *, int);
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
 };
 
 struct ip6fl_iter_state {
@@ -107150,6 +130099,39 @@
 	__SEG6_CMD_MAX = 5,
 };
 
+struct seg6_hmac_info {
+	struct rhash_head node;
+	struct callback_head rcu;
+	u32 hmackeyid;
+	char secret[64];
+	u8 slen;
+	u8 alg_id;
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
 typedef short unsigned int mifi_t;
 
 typedef __u32 if_mask;
@@ -107262,7 +130244,9 @@
 	u8 src_port_isolated: 1;
 	u8 vlan_filtered: 1;
 	u8 br_netfilter_broute: 1;
-	int offload_fwd_mark;
+	u8 tx_fwd_offload: 1;
+	int src_hwdom;
+	long unsigned int fwd_hwdoms;
 };
 
 struct nf_bridge_frag_data;
@@ -107273,7 +130257,7 @@
 	struct fib_rule common;
 	struct rt6key src;
 	struct rt6key dst;
-	u8 tclass;
+	dscp_t dscp;
 };
 
 struct calipso_doi;
@@ -107343,6 +130327,18 @@
 	struct seg6_iptunnel_encap tuninfo[0];
 };
 
+enum l3mdev_type {
+	L3MDEV_TYPE_UNSPEC = 0,
+	L3MDEV_TYPE_VRF = 1,
+	__L3MDEV_TYPE_MAX = 2,
+};
+
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
 enum {
 	SEG6_LOCAL_UNSPEC = 0,
 	SEG6_LOCAL_ACTION = 1,
@@ -107353,7 +130349,9 @@
 	SEG6_LOCAL_IIF = 6,
 	SEG6_LOCAL_OIF = 7,
 	SEG6_LOCAL_BPF = 8,
-	__SEG6_LOCAL_MAX = 9,
+	SEG6_LOCAL_VRFTABLE = 9,
+	SEG6_LOCAL_COUNTERS = 10,
+	__SEG6_LOCAL_MAX = 11,
 };
 
 enum {
@@ -107363,15 +130361,40 @@
 	__SEG6_LOCAL_BPF_PROG_MAX = 3,
 };
 
+enum {
+	SEG6_LOCAL_CNT_UNSPEC = 0,
+	SEG6_LOCAL_CNT_PAD = 1,
+	SEG6_LOCAL_CNT_PACKETS = 2,
+	SEG6_LOCAL_CNT_BYTES = 3,
+	SEG6_LOCAL_CNT_ERRORS = 4,
+	__SEG6_LOCAL_CNT_MAX = 5,
+};
+
 struct seg6_local_lwt;
 
-struct seg6_action_desc {
-	int action;
-	long unsigned int attrs;
-	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
-	int static_headroom;
+struct seg6_local_lwtunnel_ops {
+	int (*build_state)(struct seg6_local_lwt *, const void *, struct netlink_ext_ack *);
+	void (*destroy_state)(struct seg6_local_lwt *);
 };
 
+enum seg6_end_dt_mode {
+	DT_INVALID_MODE = 4294967274,
+	DT_LEGACY_MODE = 0,
+	DT_VRF_MODE = 1,
+};
+
+struct seg6_end_dt_info {
+	enum seg6_end_dt_mode mode;
+	struct net *net;
+	int vrf_ifindex;
+	int vrf_table;
+	u16 family;
+};
+
+struct pcpu_seg6_local_counters;
+
+struct seg6_action_desc;
+
 struct seg6_local_lwt {
 	int action;
 	struct ipv6_sr_hdr *srh;
@@ -107381,40 +130404,380 @@
 	int iif;
 	int oif;
 	struct bpf_lwt_prog bpf;
+	struct seg6_end_dt_info dt_info;
+	struct pcpu_seg6_local_counters *pcpu_counters;
 	int headroom;
 	struct seg6_action_desc *desc;
+	long unsigned int parsed_optattrs;
+};
+
+struct seg6_action_desc {
+	int action;
+	long unsigned int attrs;
+	long unsigned int optattrs;
+	int (*input)(struct sk_buff *, struct seg6_local_lwt *);
+	int static_headroom;
+	struct seg6_local_lwtunnel_ops slwt_ops;
+};
+
+struct pcpu_seg6_local_counters {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	u64_stats_t errors;
+	struct u64_stats_sync syncp;
+};
+
+struct seg6_local_counters {
+	__u64 packets;
+	__u64 bytes;
+	__u64 errors;
 };
 
 struct seg6_action_param {
 	int (*parse)(struct nlattr **, struct seg6_local_lwt *);
 	int (*put)(struct sk_buff *, struct seg6_local_lwt *);
 	int (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);
+	void (*destroy)(struct seg6_local_lwt *);
+};
+
+struct sr6_tlv_hmac {
+	struct sr6_tlv tlvhdr;
+	__u16 reserved;
+	__be32 hmackeyid;
+	__u8 hmac[32];
 };
 
 enum {
-	RPL_IPTUNNEL_UNSPEC = 0,
-	RPL_IPTUNNEL_SRH = 1,
-	__RPL_IPTUNNEL_MAX = 2,
+	SEG6_HMAC_ALGO_SHA1 = 1,
+	SEG6_HMAC_ALGO_SHA256 = 2,
 };
 
-struct rpl_iptunnel_encap {
-	struct ipv6_rpl_sr_hdr srh[0];
+struct seg6_hmac_algo {
+	u8 alg_id;
+	char name[64];
+	struct crypto_shash **tfms;
+	struct shash_desc **shashs;
 };
 
-struct rpl_lwt {
-	struct dst_cache cache;
-	struct rpl_iptunnel_encap tuninfo;
+struct sockaddr_pkt {
+	short unsigned int spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
 };
 
-enum {
-	IP6_FH_F_FRAG = 1,
-	IP6_FH_F_AUTH = 2,
-	IP6_FH_F_SKIP_RH = 4,
+struct sockaddr_ll {
+	short unsigned int sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	short unsigned int sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
 };
 
-struct _strp_msg {
-	struct strp_msg strp;
-	int accum_len;
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct tpacket_hdr {
+	long unsigned int tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	short unsigned int tp_mac;
+	short unsigned int tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	short unsigned int type;
+	short unsigned int alen;
+	unsigned char addr[32];
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	short unsigned int kactive_blk_num;
+	short unsigned int blk_sizeof_priv;
+	short unsigned int last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	short unsigned int retire_blk_tov;
+	short unsigned int version;
+	long unsigned int tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int *pending_refcnt;
+	union {
+		long unsigned int *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned int running;
+	unsigned int auxdata: 1;
+	unsigned int origdev: 1;
+	unsigned int has_vnet_hdr: 1;
+	unsigned int tp_loss: 1;
+	unsigned int tp_tx_has_off: 1;
+	int pressure;
+	int ifindex;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device *cached_dev;
+	int (*xmit)(struct sk_buff *);
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	short unsigned int mr_type;
+	short unsigned int mr_alen;
+	unsigned char mr_address[32];
+};
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
 };
 
 struct vlan_group {
@@ -107454,6 +130817,7 @@
 	u16 vlan_id;
 	u16 flags;
 	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
 	unsigned char real_dev_addr[6];
 	struct proc_dir_entry *dent;
 	struct vlan_pcpu_stats *vlan_pcpu_stats;
@@ -107519,6 +130883,7 @@
 	NL80211_CHAN_WIDTH_4 = 10,
 	NL80211_CHAN_WIDTH_8 = 11,
 	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
 };
 
 enum ieee80211_edmg_bw_config {
@@ -107585,9 +130950,10 @@
 	bool control_port_over_nl80211;
 	bool userspace_handles_dfs;
 	int: 24;
-	int mcast_rate[5];
+	int mcast_rate[6];
 	struct ieee80211_ht_cap ht_capa;
 	struct ieee80211_ht_cap ht_capa_mask;
+	int: 32;
 	struct key_params *wep_keys;
 	int wep_tx_key;
 	int: 32;
@@ -107613,6 +130979,13 @@
 	NL80211_MFP_OPTIONAL = 2,
 };
 
+enum nl80211_sae_pwe_mechanism {
+	NL80211_SAE_PWE_UNSPECIFIED = 0,
+	NL80211_SAE_PWE_HUNT_AND_PECK = 1,
+	NL80211_SAE_PWE_HASH_TO_ELEMENT = 2,
+	NL80211_SAE_PWE_BOTH = 3,
+};
+
 struct cfg80211_crypto_settings {
 	u32 wpa_versions;
 	u32 cipher_group;
@@ -107630,6 +131003,7 @@
 	const u8 *psk;
 	const u8 *sae_pwd;
 	u8 sae_pwd_len;
+	enum nl80211_sae_pwe_mechanism sae_pwe;
 };
 
 struct ieee80211_vht_mcs_info {
@@ -107659,7 +131033,8 @@
 	NL80211_BAND_60GHZ = 2,
 	NL80211_BAND_6GHZ = 3,
 	NL80211_BAND_S1GHZ = 4,
-	NUM_NL80211_BANDS = 5,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
 };
 
 struct cfg80211_bss_select_adjust {
@@ -107729,11 +131104,12 @@
 	struct net_device *netdev;
 	u32 identifier;
 	struct list_head mgmt_registrations;
-	spinlock_t mgmt_registrations_lock;
 	u8 mgmt_registrations_need_update: 1;
 	struct mutex mtx;
 	bool use_4addr;
 	bool is_running;
+	bool registered;
+	bool registering;
 	u8 address[6];
 	u8 ssid[32];
 	u8 ssid_len;
@@ -107750,8 +131126,6 @@
 	struct cfg80211_internal_bss *current_bss;
 	struct cfg80211_chan_def preset_chandef;
 	struct cfg80211_chan_def chandef;
-	bool ibss_fixed;
-	bool ibss_dfs_possible;
 	bool ps;
 	int ps_timeout;
 	int beacon_interval;
@@ -107936,8 +131310,15 @@
 	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,
 	NL80211_EXT_FEATURE_FILS_DISCOVERY = 52,
 	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,
-	NUM_NL80211_EXT_FEATURES = 54,
-	MAX_NL80211_EXT_FEATURES = 53,
+	NL80211_EXT_FEATURE_BEACON_RATE_HE = 54,
+	NL80211_EXT_FEATURE_SECURE_LTF = 55,
+	NL80211_EXT_FEATURE_SECURE_RTT = 56,
+	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 57,
+	NL80211_EXT_FEATURE_BSS_COLOR = 58,
+	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD = 59,
+	NL80211_EXT_FEATURE_RADAR_BACKGROUND = 60,
+	NUM_NL80211_EXT_FEATURES = 61,
+	MAX_NL80211_EXT_FEATURES = 60,
 };
 
 enum nl80211_dfs_state {
@@ -107951,6 +131332,11 @@
 	__u32 subcmd;
 };
 
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
 struct ieee80211_he_cap_elem {
 	u8 mac_cap_info[6];
 	u8 phy_cap_info[11];
@@ -107965,10 +131351,30 @@
 	__le16 tx_mcs_80p80;
 };
 
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	u8 rx_tx_mcs7_max_nss;
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	u8 rx_tx_mcs9_max_nss;
+	u8 rx_tx_mcs11_max_nss;
+	u8 rx_tx_mcs13_max_nss;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
 struct ieee80211_he_6ghz_capa {
 	__le16 capa;
 };
 
+struct rfkill;
+
 enum environment_cap {
 	ENVIRON_ANY = 0,
 	ENVIRON_INDOOR = 1,
@@ -108075,11 +131481,33 @@
 	u8 ppe_thres[25];
 } __attribute__((packed));
 
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
 struct ieee80211_sband_iftype_data {
 	u16 types_mask;
 	struct ieee80211_sta_he_cap he_cap;
 	struct ieee80211_he_6ghz_capa he_6ghz_capa;
-	char: 8;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
 } __attribute__((packed));
 
 struct ieee80211_sta_s1g_cap {
@@ -108116,6 +131544,17 @@
 	u8 addr[6];
 };
 
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
 struct cfg80211_ssid {
 	u8 ssid[32];
 	u8 ssid_len;
@@ -108146,6 +131585,7 @@
 struct cfg80211_pmsr_capabilities;
 
 struct wiphy {
+	struct mutex mtx;
 	u8 perm_addr[6];
 	u8 addr_mask[6];
 	struct mac_address *addresses;
@@ -108159,7 +131599,7 @@
 	u32 flags;
 	u32 regulatory_flags;
 	u32 features;
-	u8 ext_features[7];
+	u8 ext_features[8];
 	u32 ap_sme_capa;
 	enum cfg80211_signal_type signal_type;
 	int bss_priv_size;
@@ -108198,7 +131638,7 @@
 	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
 	unsigned int num_iftype_ext_capab;
 	const void *privid;
-	struct ieee80211_supported_band *bands[5];
+	struct ieee80211_supported_band *bands[6];
 	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
 	const struct ieee80211_regdomain *regd;
 	struct device dev;
@@ -108231,7 +131671,13 @@
 		u8 max_retry;
 	} tid_config_support;
 	u8 max_data_retry_count;
-	long: 56;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	long: 48;
+	long: 64;
+	long: 64;
 	long: 64;
 	char priv[0];
 };
@@ -108240,7 +131686,7 @@
 	struct cfg80211_ssid ssid;
 	u8 bssid[6];
 	s32 rssi_thold;
-	s32 per_band_rssi_thold[5];
+	s32 per_band_rssi_thold[6];
 };
 
 struct cfg80211_sched_scan_plan {
@@ -108487,9 +131933,7 @@
 	NLBL_MGMT_C_LISTDEF = 6,
 	NLBL_MGMT_C_PROTOCOLS = 7,
 	NLBL_MGMT_C_VERSION = 8,
-	NLBL_MGMT_C_S0_SET = 9,
-	NLBL_MGMT_C_S0_GET = 10,
-	__NLBL_MGMT_C_MAX = 11,
+	__NLBL_MGMT_C_MAX = 9,
 };
 
 enum {
@@ -108506,8 +131950,7 @@
 	NLBL_MGMT_A_SELECTORLIST = 10,
 	NLBL_MGMT_A_FAMILY = 11,
 	NLBL_MGMT_A_CLPDOI = 12,
-	NLBL_MGMT_A_S0 = 13,
-	__NLBL_MGMT_A_MAX = 14,
+	__NLBL_MGMT_A_MAX = 13,
 };
 
 struct netlbl_domhsh_walk_arg {
@@ -108632,6 +132075,104 @@
 	u32 seq;
 };
 
+enum rfkill_type {
+	RFKILL_TYPE_ALL = 0,
+	RFKILL_TYPE_WLAN = 1,
+	RFKILL_TYPE_BLUETOOTH = 2,
+	RFKILL_TYPE_UWB = 3,
+	RFKILL_TYPE_WIMAX = 4,
+	RFKILL_TYPE_WWAN = 5,
+	RFKILL_TYPE_GPS = 6,
+	RFKILL_TYPE_FM = 7,
+	RFKILL_TYPE_NFC = 8,
+	NUM_RFKILL_TYPES = 9,
+};
+
+enum rfkill_operation {
+	RFKILL_OP_ADD = 0,
+	RFKILL_OP_DEL = 1,
+	RFKILL_OP_CHANGE = 2,
+	RFKILL_OP_CHANGE_ALL = 3,
+};
+
+enum rfkill_hard_block_reasons {
+	RFKILL_HARD_BLOCK_SIGNAL = 1,
+	RFKILL_HARD_BLOCK_NOT_OWNER = 2,
+};
+
+struct rfkill_event_ext {
+	__u32 idx;
+	__u8 type;
+	__u8 op;
+	__u8 soft;
+	__u8 hard;
+	__u8 hard_block_reasons;
+} __attribute__((packed));
+
+enum rfkill_user_states {
+	RFKILL_USER_STATE_SOFT_BLOCKED = 0,
+	RFKILL_USER_STATE_UNBLOCKED = 1,
+	RFKILL_USER_STATE_HARD_BLOCKED = 2,
+};
+
+struct rfkill___2;
+
+struct rfkill_ops {
+	void (*poll)(struct rfkill___2 *, void *);
+	void (*query)(struct rfkill___2 *, void *);
+	int (*set_block)(void *, bool);
+};
+
+struct rfkill___2 {
+	spinlock_t lock;
+	enum rfkill_type type;
+	long unsigned int state;
+	long unsigned int hard_block_reasons;
+	u32 idx;
+	bool registered;
+	bool persistent;
+	bool polling_paused;
+	bool suspended;
+	const struct rfkill_ops *ops;
+	void *data;
+	struct led_trigger led_trigger;
+	const char *ledtrigname;
+	struct device dev;
+	struct list_head node;
+	struct delayed_work poll_work;
+	struct work_struct uevent_work;
+	struct work_struct sync_work;
+	char name[0];
+};
+
+struct rfkill_int_event {
+	struct list_head list;
+	struct rfkill_event_ext ev;
+};
+
+struct rfkill_data {
+	struct list_head list;
+	struct list_head events;
+	struct mutex mtx;
+	wait_queue_head_t read_wait;
+	bool input_handler;
+	u8 max_size;
+};
+
+enum rfkill_input_master_mode {
+	RFKILL_INPUT_MASTER_UNLOCK = 0,
+	RFKILL_INPUT_MASTER_RESTORE = 1,
+	RFKILL_INPUT_MASTER_UNBLOCKALL = 2,
+	NUM_RFKILL_INPUT_MASTER_MODES = 3,
+};
+
+enum rfkill_sched_op {
+	RFKILL_GLOBAL_OP_EPO = 0,
+	RFKILL_GLOBAL_OP_RESTORE = 1,
+	RFKILL_GLOBAL_OP_UNLOCK = 2,
+	RFKILL_GLOBAL_OP_UNBLOCK = 3,
+};
+
 struct dcbmsg {
 	__u8 dcb_family;
 	__u8 cmd;
@@ -108888,18 +132429,36 @@
 	int (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);
 };
 
+enum dns_payload_content_type {
+	DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+
+struct dns_payload_header {
+	__u8 zero;
+	__u8 content;
+	__u8 version;
+};
+
+enum {
+	dns_key_data = 0,
+	dns_key_error = 1,
+};
+
 enum switchdev_attr_id {
 	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
 	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
-	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 2,
-	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 3,
-	SWITCHDEV_ATTR_ID_PORT_MROUTER = 4,
-	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 5,
-	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 6,
-	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 7,
-	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 8,
-	SWITCHDEV_ATTR_ID_MRP_PORT_STATE = 9,
-	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 10,
+	SWITCHDEV_ATTR_ID_PORT_MST_STATE = 2,
+	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 3,
+	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 4,
+	SWITCHDEV_ATTR_ID_PORT_MROUTER = 5,
+	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 6,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 7,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 8,
+	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 9,
+	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 10,
+	SWITCHDEV_ATTR_ID_BRIDGE_MST = 11,
+	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 12,
+	SWITCHDEV_ATTR_ID_VLAN_MSTI = 13,
 };
 
 struct switchdev_attr {
@@ -108910,16 +132469,27 @@
 	void (*complete)(struct net_device *, int, void *);
 	union {
 		u8 stp_state;
-		long unsigned int brport_flags;
+		struct switchdev_mst_state mst_state;
+		struct switchdev_brport_flags brport_flags;
 		bool mrouter;
 		clock_t ageing_time;
 		bool vlan_filtering;
+		u16 vlan_protocol;
+		bool mst;
 		bool mc_disabled;
-		u8 mrp_port_state;
 		u8 mrp_port_role;
+		struct switchdev_vlan_msti vlan_msti;
 	} u;
 };
 
+struct switchdev_brport {
+	struct net_device *dev;
+	const void *ctx;
+	struct notifier_block *atomic_nb;
+	struct notifier_block *blocking_nb;
+	bool tx_fwd_offload;
+};
+
 enum switchdev_notifier_type {
 	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
 	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
@@ -108935,40 +132505,57 @@
 	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
 	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
 	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
+	SWITCHDEV_BRPORT_OFFLOADED = 15,
+	SWITCHDEV_BRPORT_UNOFFLOADED = 16,
 };
 
 struct switchdev_notifier_info {
 	struct net_device *dev;
 	struct netlink_ext_ack *extack;
+	const void *ctx;
+};
+
+struct switchdev_notifier_fdb_info {
+	struct switchdev_notifier_info info;
+	const unsigned char *addr;
+	u16 vid;
+	u8 added_by_user: 1;
+	u8 is_local: 1;
+	u8 offloaded: 1;
 };
 
 struct switchdev_notifier_port_obj_info {
 	struct switchdev_notifier_info info;
 	const struct switchdev_obj *obj;
-	struct switchdev_trans *trans;
 	bool handled;
 };
 
 struct switchdev_notifier_port_attr_info {
 	struct switchdev_notifier_info info;
 	const struct switchdev_attr *attr;
-	struct switchdev_trans *trans;
 	bool handled;
 };
 
+struct switchdev_notifier_brport_info {
+	struct switchdev_notifier_info info;
+	const struct switchdev_brport brport;
+};
+
 typedef void switchdev_deferred_func_t(struct net_device *, const void *);
 
 struct switchdev_deferred_item {
 	struct list_head list;
 	struct net_device *dev;
+	netdevice_tracker dev_tracker;
 	switchdev_deferred_func_t *func;
 	long unsigned int data[0];
 };
 
-enum l3mdev_type {
-	L3MDEV_TYPE_UNSPEC = 0,
-	L3MDEV_TYPE_VRF = 1,
-	__L3MDEV_TYPE_MAX = 2,
+struct switchdev_nested_priv {
+	bool (*check_cb)(const struct net_device *);
+	bool (*foreign_dev_check_cb)(const struct net_device *, const struct net_device *);
+	const struct net_device *dev;
+	struct net_device *lower_dev;
 };
 
 typedef int (*lookup_by_table_id_t)(struct net *, u32);
@@ -108984,30 +132571,6 @@
 	void (*handler)(struct ncsi_dev *);
 };
 
-enum {
-	NCSI_CAP_BASE = 0,
-	NCSI_CAP_GENERIC = 0,
-	NCSI_CAP_BC = 1,
-	NCSI_CAP_MC = 2,
-	NCSI_CAP_BUFFER = 3,
-	NCSI_CAP_AEN = 4,
-	NCSI_CAP_VLAN = 5,
-	NCSI_CAP_MAX = 6,
-};
-
-enum {
-	NCSI_MODE_BASE = 0,
-	NCSI_MODE_ENABLE = 0,
-	NCSI_MODE_TX_ENABLE = 1,
-	NCSI_MODE_LINK = 2,
-	NCSI_MODE_VLAN = 3,
-	NCSI_MODE_BC = 4,
-	NCSI_MODE_MC = 5,
-	NCSI_MODE_AEN = 6,
-	NCSI_MODE_FC = 7,
-	NCSI_MODE_MAX = 8,
-};
-
 struct ncsi_channel_version {
 	u32 version;
 	u32 alpha2;
@@ -109320,6 +132883,17 @@
 };
 
 enum {
+	NCSI_CAP_BASE = 0,
+	NCSI_CAP_GENERIC = 0,
+	NCSI_CAP_BC = 1,
+	NCSI_CAP_MC = 2,
+	NCSI_CAP_BUFFER = 3,
+	NCSI_CAP_AEN = 4,
+	NCSI_CAP_VLAN = 5,
+	NCSI_CAP_MAX = 6,
+};
+
+enum {
 	NCSI_CAP_GENERIC_HWA = 1,
 	NCSI_CAP_GENERIC_HDS = 2,
 	NCSI_CAP_GENERIC_FC = 4,
@@ -109353,6 +132927,19 @@
 	NCSI_CAP_VLAN_MASK = 7,
 };
 
+enum {
+	NCSI_MODE_BASE = 0,
+	NCSI_MODE_ENABLE = 0,
+	NCSI_MODE_TX_ENABLE = 1,
+	NCSI_MODE_LINK = 2,
+	NCSI_MODE_VLAN = 3,
+	NCSI_MODE_BC = 4,
+	NCSI_MODE_MC = 5,
+	NCSI_MODE_AEN = 6,
+	NCSI_MODE_FC = 7,
+	NCSI_MODE_MAX = 8,
+};
+
 struct ncsi_rsp_pkt_hdr {
 	struct ncsi_pkt_hdr common;
 	__be16 code;
@@ -109386,6 +132973,11 @@
 	unsigned char data[0];
 };
 
+struct ncsi_rsp_oem_intel_pkt {
+	unsigned char cmd;
+	unsigned char data[0];
+};
+
 struct ncsi_rsp_gls_pkt {
 	struct ncsi_rsp_pkt_hdr rsp;
 	__be32 status;
@@ -109588,10 +133180,11 @@
 	ncsi_dev_state_probe_mlx_gma = 516,
 	ncsi_dev_state_probe_mlx_smaf = 517,
 	ncsi_dev_state_probe_cis = 518,
-	ncsi_dev_state_probe_gvi = 519,
-	ncsi_dev_state_probe_gc = 520,
-	ncsi_dev_state_probe_gls = 521,
-	ncsi_dev_state_probe_dp = 522,
+	ncsi_dev_state_probe_keep_phy = 519,
+	ncsi_dev_state_probe_gvi = 520,
+	ncsi_dev_state_probe_gc = 521,
+	ncsi_dev_state_probe_gls = 522,
+	ncsi_dev_state_probe_dp = 523,
 	ncsi_dev_state_config_sp = 769,
 	ncsi_dev_state_config_cis = 770,
 	ncsi_dev_state_config_oem_gma = 771,
@@ -109720,10 +133313,17 @@
 	__u32 flags;
 };
 
-struct xdp_desc {
-	__u64 addr;
-	__u32 len;
-	__u32 options;
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct xdp_sock *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct xdp_ring;
@@ -109767,7 +133367,7 @@
 	long: 64;
 	long: 64;
 	long: 64;
-	u32 pad;
+	u32 pad1;
 	long: 32;
 	long: 64;
 	long: 64;
@@ -109777,6 +133377,15 @@
 	long: 64;
 	long: 64;
 	u32 consumer;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
 	u32 flags;
 	long: 64;
 	long: 64;
@@ -109785,6 +133394,15 @@
 	long: 64;
 	long: 64;
 	long: 64;
+	u32 pad3;
+	long: 32;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
 };
 
 struct xdp_rxtx_ring {
@@ -109807,69 +133425,20 @@
 	bool dma_need_sync;
 };
 
-struct xdp_diag_req {
-	__u8 sdiag_family;
-	__u8 sdiag_protocol;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_show;
-	__u32 xdiag_cookie[2];
-};
-
-struct xdp_diag_msg {
-	__u8 xdiag_family;
-	__u8 xdiag_type;
-	__u16 pad;
-	__u32 xdiag_ino;
-	__u32 xdiag_cookie[2];
-};
-
-enum {
-	XDP_DIAG_NONE = 0,
-	XDP_DIAG_INFO = 1,
-	XDP_DIAG_UID = 2,
-	XDP_DIAG_RX_RING = 3,
-	XDP_DIAG_TX_RING = 4,
-	XDP_DIAG_UMEM = 5,
-	XDP_DIAG_UMEM_FILL_RING = 6,
-	XDP_DIAG_UMEM_COMPLETION_RING = 7,
-	XDP_DIAG_MEMINFO = 8,
-	XDP_DIAG_STATS = 9,
-	__XDP_DIAG_MAX = 10,
-};
-
-struct xdp_diag_info {
-	__u32 ifindex;
-	__u32 queue_id;
-};
-
-struct xdp_diag_ring {
-	__u32 entries;
-};
-
-struct xdp_diag_umem {
-	__u64 size;
-	__u32 id;
-	__u32 num_pages;
-	__u32 chunk_size;
-	__u32 headroom;
-	__u32 ifindex;
-	__u32 queue_id;
-	__u32 flags;
-	__u32 refs;
-};
-
-struct xdp_diag_stats {
-	__u64 n_rx_dropped;
-	__u64 n_rx_invalid;
-	__u64 n_rx_full;
-	__u64 n_fill_ring_empty;
-	__u64 n_tx_invalid;
-	__u64 n_tx_ring_empty;
-};
-
 struct mptcp_mib {
-	long unsigned int mibs[23];
+	long unsigned int mibs[52];
+};
+
+enum mptcp_event_type {
+	MPTCP_EVENT_UNSPEC = 0,
+	MPTCP_EVENT_CREATED = 1,
+	MPTCP_EVENT_ESTABLISHED = 2,
+	MPTCP_EVENT_CLOSED = 3,
+	MPTCP_EVENT_ANNOUNCED = 6,
+	MPTCP_EVENT_REMOVED = 7,
+	MPTCP_EVENT_SUB_ESTABLISHED = 10,
+	MPTCP_EVENT_SUB_CLOSED = 11,
+	MPTCP_EVENT_SUB_PRIORITY = 13,
 };
 
 struct mptcp_options_received {
@@ -109879,85 +133448,61 @@
 	u64 data_seq;
 	u32 subflow_seq;
 	u16 data_len;
-	u16 mp_capable: 1;
-	u16 mp_join: 1;
-	u16 dss: 1;
-	u16 add_addr: 1;
-	u16 rm_addr: 1;
-	u16 family: 4;
-	u16 echo: 1;
-	u16 backup: 1;
+	__sum16 csum;
+	u16 suboptions;
 	u32 token;
 	u32 nonce;
+	u16 use_map: 1;
+	u16 dsn64: 1;
+	u16 data_fin: 1;
+	u16 use_ack: 1;
+	u16 ack64: 1;
+	u16 mpc_map: 1;
+	u16 reset_reason: 4;
+	u16 reset_transient: 1;
+	u16 echo: 1;
+	u16 backup: 1;
+	u16 deny_join_id0: 1;
+	u16 __unused: 2;
+	u8 join_id;
 	u64 thmac;
 	u8 hmac[20];
-	u8 join_id;
-	u8 use_map: 1;
-	u8 dsn64: 1;
-	u8 data_fin: 1;
-	u8 use_ack: 1;
-	u8 ack64: 1;
-	u8 mpc_map: 1;
-	u8 __unused: 2;
-	u8 addr_id;
-	u8 rm_id;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
+	struct mptcp_addr_info addr;
+	struct mptcp_rm_list rm_list;
 	u64 ahmac;
-	u16 port;
-};
-
-struct mptcp_addr_info {
-	sa_family_t family;
-	__be16 port;
-	u8 id;
-	u8 flags;
-	int ifindex;
-	union {
-		struct in_addr addr;
-		struct in6_addr addr6;
-	};
-};
-
-enum mptcp_pm_status {
-	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
-	MPTCP_PM_RM_ADDR_RECEIVED = 1,
-	MPTCP_PM_ESTABLISHED = 2,
-	MPTCP_PM_SUBFLOW_ESTABLISHED = 3,
+	u64 fail_seq;
 };
 
 struct mptcp_pm_data {
 	struct mptcp_addr_info local;
 	struct mptcp_addr_info remote;
 	struct list_head anno_list;
+	struct list_head userspace_pm_local_addr_list;
 	spinlock_t lock;
-	bool add_addr_signal;
-	bool rm_addr_signal;
+	u8 addr_signal;
 	bool server_side;
 	bool work_pending;
 	bool accept_addr;
 	bool accept_subflow;
-	bool add_addr_echo;
+	bool remote_deny_join_id0;
 	u8 add_addr_signaled;
 	u8 add_addr_accepted;
 	u8 local_addr_used;
+	u8 pm_type;
 	u8 subflows;
-	u8 add_addr_signal_max;
-	u8 add_addr_accept_max;
-	u8 local_addr_max;
-	u8 subflows_max;
 	u8 status;
-	u8 rm_id;
+	long unsigned int id_avail_bitmap[4];
+	struct mptcp_rm_list rm_list_tx;
+	struct mptcp_rm_list rm_list_rx;
 };
 
 struct mptcp_data_frag {
 	struct list_head list;
 	u64 data_seq;
-	int data_len;
-	int offset;
-	int overhead;
+	u16 data_len;
+	u16 offset;
+	u16 overhead;
+	u16 already_sent;
 	struct page *page;
 };
 
@@ -109966,27 +133511,43 @@
 	u64 local_key;
 	u64 remote_key;
 	u64 write_seq;
+	u64 snd_nxt;
 	u64 ack_seq;
+	atomic64_t rcv_wnd_sent;
 	u64 rcv_data_fin_seq;
+	int rmem_fwd_alloc;
 	struct sock *last_snd;
 	int snd_burst;
-	atomic64_t snd_una;
+	int old_wspace;
+	u64 recovery_snd_nxt;
+	u64 snd_una;
+	u64 wnd_end;
 	long unsigned int timer_ival;
 	u32 token;
+	int rmem_released;
 	long unsigned int flags;
+	long unsigned int cb_flags;
+	long unsigned int push_pending;
+	bool recovery;
 	bool can_ack;
 	bool fully_established;
 	bool rcv_data_fin;
 	bool snd_data_fin_enable;
+	bool rcv_fastclose;
 	bool use_64bit_ack;
-	spinlock_t join_list_lock;
+	bool csum_enabled;
+	bool allow_infinite_fallback;
+	u8 recvmsg_inq: 1;
+	u8 cork: 1;
+	u8 nodelay: 1;
 	struct work_struct work;
 	struct sk_buff *ooo_last_skb;
 	struct rb_root out_of_order_queue;
+	struct sk_buff_head receive_queue;
 	struct list_head conn_list;
 	struct list_head rtx_queue;
+	struct mptcp_data_frag *first_pending;
 	struct list_head join_list;
-	struct skb_ext *cached_ext;
 	struct socket *subflow;
 	struct sock *first;
 	struct mptcp_pm_data pm;
@@ -109996,6 +133557,8 @@
 		u64 time;
 		u64 rtt_us;
 	} rcvq_space;
+	u32 setsockopt_seq;
+	char ca_name[16];
 };
 
 struct mptcp_subflow_request_sock {
@@ -110003,6 +133566,8 @@
 	u16 mp_capable: 1;
 	u16 mp_join: 1;
 	u16 backup: 1;
+	u16 csum_reqd: 1;
+	u16 allow_join_id0: 1;
 	u8 local_id;
 	u8 remote_id;
 	u64 local_key;
@@ -110019,87 +133584,286 @@
 enum mptcp_data_avail {
 	MPTCP_SUBFLOW_NODATA = 0,
 	MPTCP_SUBFLOW_DATA_AVAIL = 1,
-	MPTCP_SUBFLOW_OOO_DATA = 2,
+};
+
+struct mptcp_delegated_action {
+	struct napi_struct napi;
+	struct list_head head;
 };
 
 struct mptcp_subflow_context {
 	struct list_head node;
-	u64 local_key;
-	u64 remote_key;
-	u64 idsn;
-	u64 map_seq;
-	u32 snd_isn;
-	u32 token;
-	u32 rel_write_seq;
-	u32 map_subflow_seq;
-	u32 ssn_offset;
-	u32 map_data_len;
-	u32 request_mptcp: 1;
-	u32 request_join: 1;
-	u32 request_bkup: 1;
-	u32 mp_capable: 1;
-	u32 mp_join: 1;
-	u32 fully_established: 1;
-	u32 pm_notified: 1;
-	u32 conn_finished: 1;
-	u32 map_valid: 1;
-	u32 mpc_map: 1;
-	u32 backup: 1;
-	u32 rx_eof: 1;
-	u32 can_ack: 1;
-	enum mptcp_data_avail data_avail;
-	u32 remote_nonce;
-	u64 thmac;
-	u32 local_nonce;
-	u32 remote_token;
-	u8 hmac[20];
-	u8 local_id;
-	u8 remote_id;
+	union {
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 can_ack: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			enum mptcp_data_avail data_avail;
+			bool mp_fail_response_expect;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			u8 hmac[20];
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+		};
+		struct {
+			long unsigned int avg_pacing_rate;
+			u64 local_key;
+			u64 remote_key;
+			u64 idsn;
+			u64 map_seq;
+			u32 snd_isn;
+			u32 token;
+			u32 rel_write_seq;
+			u32 map_subflow_seq;
+			u32 ssn_offset;
+			u32 map_data_len;
+			__wsum map_data_csum;
+			u32 map_csum_len;
+			u32 request_mptcp: 1;
+			u32 request_join: 1;
+			u32 request_bkup: 1;
+			u32 mp_capable: 1;
+			u32 mp_join: 1;
+			u32 fully_established: 1;
+			u32 pm_notified: 1;
+			u32 conn_finished: 1;
+			u32 map_valid: 1;
+			u32 map_csum_reqd: 1;
+			u32 map_data_fin: 1;
+			u32 mpc_map: 1;
+			u32 backup: 1;
+			u32 send_mp_prio: 1;
+			u32 send_mp_fail: 1;
+			u32 send_fastclose: 1;
+			u32 send_infinite_map: 1;
+			u32 rx_eof: 1;
+			u32 can_ack: 1;
+			u32 disposable: 1;
+			u32 stale: 1;
+			u32 local_id_valid: 1;
+			u32 valid_csum_seen: 1;
+			enum mptcp_data_avail data_avail;
+			bool mp_fail_response_expect;
+			u32 remote_nonce;
+			u64 thmac;
+			u32 local_nonce;
+			u32 remote_token;
+			u8 hmac[20];
+			u8 local_id;
+			u8 remote_id;
+			u8 reset_seen: 1;
+			u8 reset_transient: 1;
+			u8 reset_reason: 4;
+			u8 stale_count;
+			long int delegated_status;
+		} reset;
+	};
+	struct list_head delegated_node;
+	u32 setsockopt_seq;
+	u32 stale_rcv_tstamp;
 	struct sock *tcp_sock;
 	struct sock *conn;
 	const struct inet_connection_sock_af_ops *icsk_af_ops;
-	void (*tcp_data_ready)(struct sock *);
 	void (*tcp_state_change)(struct sock *);
-	void (*tcp_write_space)(struct sock *);
+	void (*tcp_error_report)(struct sock *);
 	struct callback_head rcu;
 };
 
 enum linux_mptcp_mib_field {
 	MPTCP_MIB_NUM = 0,
 	MPTCP_MIB_MPCAPABLEPASSIVE = 1,
-	MPTCP_MIB_MPCAPABLEPASSIVEACK = 2,
-	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 3,
-	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 4,
-	MPTCP_MIB_RETRANSSEGS = 5,
-	MPTCP_MIB_JOINNOTOKEN = 6,
-	MPTCP_MIB_JOINSYNRX = 7,
-	MPTCP_MIB_JOINSYNACKRX = 8,
-	MPTCP_MIB_JOINSYNACKMAC = 9,
-	MPTCP_MIB_JOINACKRX = 10,
-	MPTCP_MIB_JOINACKMAC = 11,
-	MPTCP_MIB_DSSNOMATCH = 12,
-	MPTCP_MIB_INFINITEMAPRX = 13,
-	MPTCP_MIB_OFOQUEUETAIL = 14,
-	MPTCP_MIB_OFOQUEUE = 15,
-	MPTCP_MIB_OFOMERGE = 16,
-	MPTCP_MIB_NODSSWINDOW = 17,
-	MPTCP_MIB_DUPDATA = 18,
-	MPTCP_MIB_ADDADDR = 19,
-	MPTCP_MIB_ECHOADD = 20,
-	MPTCP_MIB_RMADDR = 21,
-	MPTCP_MIB_RMSUBFLOW = 22,
-	__MPTCP_MIB_MAX = 23,
+	MPTCP_MIB_MPCAPABLEACTIVE = 2,
+	MPTCP_MIB_MPCAPABLEACTIVEACK = 3,
+	MPTCP_MIB_MPCAPABLEPASSIVEACK = 4,
+	MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 5,
+	MPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 6,
+	MPTCP_MIB_TOKENFALLBACKINIT = 7,
+	MPTCP_MIB_RETRANSSEGS = 8,
+	MPTCP_MIB_JOINNOTOKEN = 9,
+	MPTCP_MIB_JOINSYNRX = 10,
+	MPTCP_MIB_JOINSYNACKRX = 11,
+	MPTCP_MIB_JOINSYNACKMAC = 12,
+	MPTCP_MIB_JOINACKRX = 13,
+	MPTCP_MIB_JOINACKMAC = 14,
+	MPTCP_MIB_DSSNOMATCH = 15,
+	MPTCP_MIB_INFINITEMAPTX = 16,
+	MPTCP_MIB_INFINITEMAPRX = 17,
+	MPTCP_MIB_DSSTCPMISMATCH = 18,
+	MPTCP_MIB_DATACSUMERR = 19,
+	MPTCP_MIB_OFOQUEUETAIL = 20,
+	MPTCP_MIB_OFOQUEUE = 21,
+	MPTCP_MIB_OFOMERGE = 22,
+	MPTCP_MIB_NODSSWINDOW = 23,
+	MPTCP_MIB_DUPDATA = 24,
+	MPTCP_MIB_ADDADDR = 25,
+	MPTCP_MIB_ECHOADD = 26,
+	MPTCP_MIB_PORTADD = 27,
+	MPTCP_MIB_ADDADDRDROP = 28,
+	MPTCP_MIB_JOINPORTSYNRX = 29,
+	MPTCP_MIB_JOINPORTSYNACKRX = 30,
+	MPTCP_MIB_JOINPORTACKRX = 31,
+	MPTCP_MIB_MISMATCHPORTSYNRX = 32,
+	MPTCP_MIB_MISMATCHPORTACKRX = 33,
+	MPTCP_MIB_RMADDR = 34,
+	MPTCP_MIB_RMADDRDROP = 35,
+	MPTCP_MIB_RMSUBFLOW = 36,
+	MPTCP_MIB_MPPRIOTX = 37,
+	MPTCP_MIB_MPPRIORX = 38,
+	MPTCP_MIB_MPFAILTX = 39,
+	MPTCP_MIB_MPFAILRX = 40,
+	MPTCP_MIB_MPFASTCLOSETX = 41,
+	MPTCP_MIB_MPFASTCLOSERX = 42,
+	MPTCP_MIB_MPRSTTX = 43,
+	MPTCP_MIB_MPRSTRX = 44,
+	MPTCP_MIB_RCVPRUNED = 45,
+	MPTCP_MIB_SUBFLOWSTALE = 46,
+	MPTCP_MIB_SUBFLOWRECOVER = 47,
+	MPTCP_MIB_SNDWNDSHARED = 48,
+	MPTCP_MIB_RCVWNDSHARED = 49,
+	MPTCP_MIB_RCVWNDCONFLICTUPDATE = 50,
+	MPTCP_MIB_RCVWNDCONFLICT = 51,
+	__MPTCP_MIB_MAX = 52,
 };
 
+struct trace_event_raw_mptcp_subflow_get_send {
+	struct trace_entry ent;
+	bool active;
+	bool free;
+	u32 snd_wnd;
+	u32 pace;
+	u8 backup;
+	u64 ratio;
+	char __data[0];
+};
+
+struct trace_event_raw_mptcp_dump_mpext {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	u16 csum;
+	u8 use_map;
+	u8 dsn64;
+	u8 data_fin;
+	u8 use_ack;
+	u8 ack64;
+	u8 mpc_map;
+	u8 frozen;
+	u8 reset_transient;
+	u8 reset_reason;
+	u8 csum_reqd;
+	u8 infinite_map;
+	char __data[0];
+};
+
+struct trace_event_raw_ack_update_msk {
+	struct trace_entry ent;
+	u64 data_ack;
+	u64 old_snd_una;
+	u64 new_snd_una;
+	u64 new_wnd_end;
+	u64 msk_wnd_end;
+	char __data[0];
+};
+
+struct trace_event_raw_subflow_check_data_avail {
+	struct trace_entry ent;
+	u8 status;
+	const void *skb;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mptcp_subflow_get_send {};
+
+struct trace_event_data_offsets_mptcp_dump_mpext {};
+
+struct trace_event_data_offsets_ack_update_msk {};
+
+struct trace_event_data_offsets_subflow_check_data_avail {};
+
+typedef void (*btf_trace_mptcp_subflow_get_send)(void *, struct mptcp_subflow_context *);
+
+typedef void (*btf_trace_mptcp_sendmsg_frag)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_get_mapping_status)(void *, struct mptcp_ext *);
+
+typedef void (*btf_trace_ack_update_msk)(void *, u64, u64, u64, u64, u64);
+
+typedef void (*btf_trace_subflow_check_data_avail)(void *, __u8, struct sk_buff *);
+
 struct mptcp_skb_cb {
 	u64 map_seq;
 	u64 end_seq;
 	u32 offset;
+	u8 has_rxtstamp: 1;
+};
+
+enum {
+	MPTCP_CMSG_TS = 1,
+	MPTCP_CMSG_INQ = 2,
+};
+
+struct mptcp_sendmsg_info {
+	int mss_now;
+	int size_goal;
+	u16 limit;
+	u16 sent;
+	unsigned int flags;
+	bool data_lock_held;
 };
 
 struct subflow_send_info {
 	struct sock *ssk;
-	u64 ratio;
+	u64 linger_time;
+};
+
+enum mptcp_pm_type {
+	MPTCP_PM_TYPE_KERNEL = 0,
+	MPTCP_PM_TYPE_USERSPACE = 1,
+	__MPTCP_PM_TYPE_NR = 2,
+	__MPTCP_PM_TYPE_MAX = 1,
 };
 
 enum mapping_status {
@@ -110110,6 +133874,19 @@
 	MAPPING_DUMMY = 4,
 };
 
+enum mptcp_addr_signal_status {
+	MPTCP_ADD_ADDR_SIGNAL = 0,
+	MPTCP_ADD_ADDR_ECHO = 1,
+	MPTCP_RM_ADDR_SIGNAL = 2,
+};
+
+struct csum_pseudo_header {
+	__be64 data_seq;
+	__be32 subflow_seq;
+	__be16 data_len;
+	__sum16 csum;
+};
+
 struct token_bucket {
 	spinlock_t lock;
 	int chain_len;
@@ -110119,7 +133896,22 @@
 
 struct mptcp_pernet {
 	struct ctl_table_header *ctl_table_hdr;
-	int mptcp_enabled;
+	unsigned int add_addr_timeout;
+	unsigned int stale_loss_cnt;
+	u8 mptcp_enabled;
+	u8 checksum_enabled;
+	u8 allow_join_initial_addr_port;
+	u8 pm_type;
+};
+
+enum mptcp_pm_status {
+	MPTCP_PM_ADD_ADDR_RECEIVED = 0,
+	MPTCP_PM_ADD_ADDR_SEND_ACK = 1,
+	MPTCP_PM_RM_ADDR_RECEIVED = 2,
+	MPTCP_PM_ESTABLISHED = 3,
+	MPTCP_PM_SUBFLOW_ESTABLISHED = 4,
+	MPTCP_PM_ALREADY_ESTABLISHED = 5,
+	MPTCP_PM_MPC_ENDPOINT_ACCOUNTED = 6,
 };
 
 enum {
@@ -110151,7 +133943,10 @@
 	MPTCP_PM_ATTR_ADDR = 1,
 	MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,
 	MPTCP_PM_ATTR_SUBFLOWS = 3,
-	__MPTCP_PM_ATTR_MAX = 4,
+	MPTCP_PM_ATTR_TOKEN = 4,
+	MPTCP_PM_ATTR_LOC_ID = 5,
+	MPTCP_PM_ATTR_ADDR_REMOTE = 6,
+	__MPTCP_PM_ATTR_MAX = 7,
 };
 
 enum {
@@ -110174,13 +133969,43 @@
 	MPTCP_PM_CMD_FLUSH_ADDRS = 4,
 	MPTCP_PM_CMD_SET_LIMITS = 5,
 	MPTCP_PM_CMD_GET_LIMITS = 6,
-	__MPTCP_PM_CMD_AFTER_LAST = 7,
+	MPTCP_PM_CMD_SET_FLAGS = 7,
+	MPTCP_PM_CMD_ANNOUNCE = 8,
+	MPTCP_PM_CMD_REMOVE = 9,
+	MPTCP_PM_CMD_SUBFLOW_CREATE = 10,
+	MPTCP_PM_CMD_SUBFLOW_DESTROY = 11,
+	__MPTCP_PM_CMD_AFTER_LAST = 12,
+};
+
+enum mptcp_event_attr {
+	MPTCP_ATTR_UNSPEC = 0,
+	MPTCP_ATTR_TOKEN = 1,
+	MPTCP_ATTR_FAMILY = 2,
+	MPTCP_ATTR_LOC_ID = 3,
+	MPTCP_ATTR_REM_ID = 4,
+	MPTCP_ATTR_SADDR4 = 5,
+	MPTCP_ATTR_SADDR6 = 6,
+	MPTCP_ATTR_DADDR4 = 7,
+	MPTCP_ATTR_DADDR6 = 8,
+	MPTCP_ATTR_SPORT = 9,
+	MPTCP_ATTR_DPORT = 10,
+	MPTCP_ATTR_BACKUP = 11,
+	MPTCP_ATTR_ERROR = 12,
+	MPTCP_ATTR_FLAGS = 13,
+	MPTCP_ATTR_TIMEOUT = 14,
+	MPTCP_ATTR_IF_IDX = 15,
+	MPTCP_ATTR_RESET_REASON = 16,
+	MPTCP_ATTR_RESET_FLAGS = 17,
+	MPTCP_ATTR_SERVER_SIDE = 18,
+	__MPTCP_ATTR_AFTER_LAST = 19,
 };
 
 struct mptcp_pm_addr_entry {
 	struct list_head list;
 	struct mptcp_addr_info addr;
-	struct callback_head rcu;
+	u8 flags;
+	int ifindex;
+	struct socket *lsk;
 };
 
 struct mptcp_pm_add_entry {
@@ -110195,11 +134020,53 @@
 	spinlock_t lock;
 	struct list_head local_addr_list;
 	unsigned int addrs;
+	unsigned int stale_loss_cnt;
 	unsigned int add_addr_signal_max;
 	unsigned int add_addr_accept_max;
 	unsigned int local_addr_max;
 	unsigned int subflows_max;
 	unsigned int next_id;
+	long unsigned int id_bitmap[4];
+};
+
+struct mptcp_info {
+	__u8 mptcpi_subflows;
+	__u8 mptcpi_add_addr_signal;
+	__u8 mptcpi_add_addr_accepted;
+	__u8 mptcpi_subflows_max;
+	__u8 mptcpi_add_addr_signal_max;
+	__u8 mptcpi_add_addr_accepted_max;
+	__u32 mptcpi_flags;
+	__u32 mptcpi_token;
+	__u64 mptcpi_write_seq;
+	__u64 mptcpi_snd_una;
+	__u64 mptcpi_rcv_nxt;
+	__u8 mptcpi_local_addr_used;
+	__u8 mptcpi_local_addr_max;
+	__u8 mptcpi_csum_enabled;
+};
+
+struct mptcp_subflow_data {
+	__u32 size_subflow_data;
+	__u32 num_subflows;
+	__u32 size_kernel;
+	__u32 size_user;
+};
+
+struct mptcp_subflow_addrs {
+	union {
+		__kernel_sa_family_t sa_family;
+		struct sockaddr sa_local;
+		struct sockaddr_in sin_local;
+		struct sockaddr_in6 sin6_local;
+		struct __kernel_sockaddr_storage ss_local;
+	};
+	union {
+		struct sockaddr sa_remote;
+		struct sockaddr_in sin_remote;
+		struct sockaddr_in6 sin6_remote;
+		struct __kernel_sockaddr_storage ss_remote;
+	};
 };
 
 struct join_entry {
@@ -110212,328 +134079,209 @@
 	u8 valid;
 };
 
-typedef struct {
-	u32 version;
-	u32 length;
-	u64 memory_protection_attribute;
-} efi_properties_table_t;
-
-enum efi_secureboot_mode {
-	efi_secureboot_mode_unset = 0,
-	efi_secureboot_mode_unknown = 1,
-	efi_secureboot_mode_disabled = 2,
-	efi_secureboot_mode_enabled = 3,
+struct pcibios_fwaddrmap {
+	struct list_head list;
+	struct pci_dev *dev;
+	resource_size_t fw_addr[17];
 };
 
-typedef union {
-	struct {
-		u32 revision;
-		efi_handle_t parent_handle;
-		efi_system_table_t *system_table;
-		efi_handle_t device_handle;
-		void *file_path;
-		void *reserved;
-		u32 load_options_size;
-		void *load_options;
-		void *image_base;
-		__u64 image_size;
-		unsigned int image_code_type;
-		unsigned int image_data_type;
-		efi_status_t (*unload)(efi_handle_t);
-	};
-	struct {
-		u32 revision;
-		u32 parent_handle;
-		u32 system_table;
-		u32 device_handle;
-		u32 file_path;
-		u32 reserved;
-		u32 load_options_size;
-		u32 load_options;
-		u32 image_base;
-		__u64 image_size;
-		u32 image_code_type;
-		u32 image_data_type;
-		u32 unload;
-	} mixed_mode;
-} efi_loaded_image_t;
-
-struct efi_boot_memmap {
-	efi_memory_desc_t **map;
-	long unsigned int *map_size;
-	long unsigned int *desc_size;
-	u32 *desc_ver;
-	long unsigned int *key_ptr;
-	long unsigned int *buff_size;
+struct pci_check_idx_range {
+	int start;
+	int end;
 };
 
-struct exit_boot_struct {
-	efi_memory_desc_t *runtime_map;
-	int *runtime_entry_count;
-	void *new_fdt_addr;
+struct pci_raw_ops {
+	int (*read)(unsigned int, unsigned int, unsigned int, int, int, u32 *);
+	int (*write)(unsigned int, unsigned int, unsigned int, int, int, u32);
 };
 
-typedef struct {
-	u64 size;
-	u64 file_size;
-	u64 phys_size;
-	efi_time_t create_time;
-	efi_time_t last_access_time;
-	efi_time_t modification_time;
-	__u64 attribute;
-	efi_char16_t filename[0];
-} efi_file_info_t;
-
-struct efi_file_protocol;
-
-typedef struct efi_file_protocol efi_file_protocol_t;
-
-struct efi_file_protocol {
-	u64 revision;
-	efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
-	efi_status_t (*close)(efi_file_protocol_t *);
-	efi_status_t (*delete)(efi_file_protocol_t *);
-	efi_status_t (*read)(efi_file_protocol_t *, long unsigned int *, void *);
-	efi_status_t (*write)(efi_file_protocol_t *, long unsigned int, void *);
-	efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
-	efi_status_t (*set_position)(efi_file_protocol_t *, u64);
-	efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int *, void *);
-	efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, long unsigned int, void *);
-	efi_status_t (*flush)(efi_file_protocol_t *);
+struct acpi_table_mcfg {
+	struct acpi_table_header header;
+	u8 reserved[8];
 };
 
-struct efi_simple_file_system_protocol;
-
-typedef struct efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
-
-struct efi_simple_file_system_protocol {
-	u64 revision;
-	int (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
+struct acpi_mcfg_allocation {
+	u64 address;
+	u16 pci_segment;
+	u8 start_bus_number;
+	u8 end_bus_number;
+	u32 reserved;
 };
 
-struct finfo {
-	efi_file_info_t info;
-	efi_char16_t filename[256];
+struct pci_mmcfg_hostbridge_probe {
+	u32 bus;
+	u32 devfn;
+	u32 vendor;
+	u32 device;
+	const char * (*probe)();
 };
 
-typedef struct {
-	u32 red_mask;
-	u32 green_mask;
-	u32 blue_mask;
-	u32 reserved_mask;
-} efi_pixel_bitmask_t;
+typedef bool (*check_reserved_t)(u64, u64, enum e820_type);
 
-typedef struct {
-	u32 version;
-	u32 horizontal_resolution;
-	u32 vertical_resolution;
-	int pixel_format;
-	efi_pixel_bitmask_t pixel_information;
-	u32 pixels_per_scan_line;
-} efi_graphics_output_mode_info_t;
-
-union efi_graphics_output_protocol_mode {
-	struct {
-		u32 max_mode;
-		u32 mode;
-		efi_graphics_output_mode_info_t *info;
-		long unsigned int size_of_info;
-		efi_physical_addr_t frame_buffer_base;
-		long unsigned int frame_buffer_size;
-	};
-	struct {
-		u32 max_mode;
-		u32 mode;
-		u32 info;
-		u32 size_of_info;
-		u64 frame_buffer_base;
-		u32 frame_buffer_size;
-	} mixed_mode;
+struct physdev_restore_msi {
+	uint8_t bus;
+	uint8_t devfn;
 };
 
-typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
-
-union efi_graphics_output_protocol;
-
-typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
-
-union efi_graphics_output_protocol {
-	struct {
-		efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, long unsigned int *, efi_graphics_output_mode_info_t **);
-		efi_status_t (*set_mode)(efi_graphics_output_protocol_t *, u32);
-		void *blt;
-		efi_graphics_output_protocol_mode_t *mode;
-	};
-	struct {
-		u32 query_mode;
-		u32 set_mode;
-		u32 blt;
-		u32 mode;
-	} mixed_mode;
+struct physdev_setup_gsi {
+	int gsi;
+	uint8_t triggering;
+	uint8_t polarity;
 };
 
-enum efi_cmdline_option {
-	EFI_CMDLINE_NONE = 0,
-	EFI_CMDLINE_MODE_NUM = 1,
-	EFI_CMDLINE_RES = 2,
-	EFI_CMDLINE_AUTO = 3,
-	EFI_CMDLINE_LIST = 4,
+struct xen_pci_frontend_ops {
+	int (*enable_msi)(struct pci_dev *, int *);
+	void (*disable_msi)(struct pci_dev *);
+	int (*enable_msix)(struct pci_dev *, int *, int);
+	void (*disable_msix)(struct pci_dev *);
 };
 
-union efi_rng_protocol;
-
-typedef union efi_rng_protocol efi_rng_protocol_t;
-
-union efi_rng_protocol {
-	struct {
-		efi_status_t (*get_info)(efi_rng_protocol_t *, long unsigned int *, efi_guid_t *);
-		efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, long unsigned int, u8 *);
-	};
-	struct {
-		u32 get_info;
-		u32 get_rng;
-	} mixed_mode;
+struct xen_msi_ops {
+	int (*setup_msi_irqs)(struct pci_dev *, int, int);
+	void (*teardown_msi_irqs)(struct pci_dev *);
 };
 
-typedef u32 efi_tcg2_event_log_format;
-
-union efi_tcg2_protocol {
-	struct {
-		void *get_capability;
-		efi_status_t (*get_event_log)(efi_handle_t, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
-		void *hash_log_extend_event;
-		void *submit_command;
-		void *get_active_pcr_banks;
-		void *set_active_pcr_banks;
-		void *get_result_of_set_active_pcr_banks;
-	};
-	struct {
-		u32 get_capability;
-		u32 get_event_log;
-		u32 hash_log_extend_event;
-		u32 submit_command;
-		u32 get_active_pcr_banks;
-		u32 set_active_pcr_banks;
-		u32 get_result_of_set_active_pcr_banks;
-	} mixed_mode;
+struct pci_root_info {
+	struct acpi_pci_root_info common;
+	struct pci_sysdata sd;
+	bool mcfg_added;
+	u8 start_bus;
+	u8 end_bus;
 };
 
-typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
-
-struct efi_vendor_dev_path {
-	struct efi_generic_dev_path header;
-	efi_guid_t vendorguid;
-	u8 vendordata[0];
+struct irq_info___3 {
+	u8 bus;
+	u8 devfn;
+	struct {
+		u8 link;
+		u16 bitmap;
+	} __attribute__((packed)) irq[4];
+	u8 slot;
+	u8 rfu;
 };
 
-union efi_load_file_protocol;
-
-typedef union efi_load_file_protocol efi_load_file_protocol_t;
-
-union efi_load_file_protocol {
-	struct {
-		efi_status_t (*load_file)(efi_load_file_protocol_t *, efi_device_path_protocol_t *, bool, long unsigned int *, void *);
-	};
-	struct {
-		u32 load_file;
-	} mixed_mode;
+struct irq_routing_table {
+	u32 signature;
+	u16 version;
+	u16 size;
+	u8 rtr_bus;
+	u8 rtr_devfn;
+	u16 exclusive_irqs;
+	u16 rtr_vendor;
+	u16 rtr_device;
+	u32 miniport_data;
+	u8 rfu[11];
+	u8 checksum;
+	struct irq_info___3 slots[0];
 };
 
-typedef union efi_load_file_protocol efi_load_file2_protocol_t;
+struct irt_routing_table {
+	u32 signature;
+	u8 size;
+	u8 used;
+	u16 exclusive_irqs;
+	struct irq_info___3 slots[0];
+};
 
-typedef struct {
-	u32 attributes;
-	u16 file_path_list_length;
-	u8 variable_data[0];
-} __attribute__((packed)) efi_load_option_t;
+struct irq_router {
+	char *name;
+	u16 vendor;
+	u16 device;
+	int (*get)(struct pci_dev *, struct pci_dev *, int);
+	int (*set)(struct pci_dev *, struct pci_dev *, int, int);
+	int (*lvl)(struct pci_dev *, struct pci_dev *, int, int);
+};
 
-typedef struct {
-	u32 attributes;
-	u16 file_path_list_length;
-	const efi_char16_t *description;
-	const efi_device_path_protocol_t *file_path_list;
-	size_t optional_data_size;
-	const void *optional_data;
-} efi_load_option_unpacked_t;
+struct irq_router_handler {
+	u16 vendor;
+	int (*probe)(struct irq_router *, struct pci_dev *, u16);
+};
 
-typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+struct pci_setup_rom {
+	struct setup_data data;
+	uint16_t vendor;
+	uint16_t devid;
+	uint64_t pcilen;
+	long unsigned int segment;
+	long unsigned int bus;
+	long unsigned int device;
+	long unsigned int function;
+	uint8_t romdata[0];
+};
 
-typedef enum {
-	EfiPciIoWidthUint8 = 0,
-	EfiPciIoWidthUint16 = 1,
-	EfiPciIoWidthUint32 = 2,
-	EfiPciIoWidthUint64 = 3,
-	EfiPciIoWidthFifoUint8 = 4,
-	EfiPciIoWidthFifoUint16 = 5,
-	EfiPciIoWidthFifoUint32 = 6,
-	EfiPciIoWidthFifoUint64 = 7,
-	EfiPciIoWidthFillUint8 = 8,
-	EfiPciIoWidthFillUint16 = 9,
-	EfiPciIoWidthFillUint32 = 10,
-	EfiPciIoWidthFillUint64 = 11,
-	EfiPciIoWidthMaximum = 12,
-} EFI_PCI_IO_PROTOCOL_WIDTH;
+enum pci_bf_sort_state {
+	pci_bf_sort_default = 0,
+	pci_force_nobf = 1,
+	pci_force_bf = 2,
+	pci_dmi_bf = 3,
+};
 
-typedef struct {
-	u32 read;
-	u32 write;
-} efi_pci_io_protocol_access_32_t;
+struct pci_root_res {
+	struct list_head list;
+	struct resource res;
+};
 
-typedef struct {
-	void *read;
-	void *write;
-} efi_pci_io_protocol_access_t;
+struct pci_root_info___2 {
+	struct list_head list;
+	char name[12];
+	struct list_head resources;
+	struct resource busn;
+	int node;
+	int link;
+};
 
-union efi_pci_io_protocol;
+struct amd_hostbridge {
+	u32 bus;
+	u32 slot;
+	u32 device;
+};
 
-typedef union efi_pci_io_protocol efi_pci_io_protocol_t;
+struct saved_msr {
+	bool valid;
+	struct msr_info info;
+};
 
-typedef efi_status_t (*efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, EFI_PCI_IO_PROTOCOL_WIDTH, u32, long unsigned int, void *);
+struct saved_msrs {
+	unsigned int num;
+	struct saved_msr *array;
+};
 
-typedef struct {
-	efi_pci_io_protocol_cfg_t read;
-	efi_pci_io_protocol_cfg_t write;
-} efi_pci_io_protocol_config_access_t;
+struct saved_context {
+	struct pt_regs regs;
+	u16 ds;
+	u16 es;
+	u16 fs;
+	u16 gs;
+	long unsigned int kernelmode_gs_base;
+	long unsigned int usermode_gs_base;
+	long unsigned int fs_base;
+	long unsigned int cr0;
+	long unsigned int cr2;
+	long unsigned int cr3;
+	long unsigned int cr4;
+	u64 misc_enable;
+	struct saved_msrs saved_msrs;
+	long unsigned int efer;
+	u16 gdt_pad;
+	struct desc_ptr gdt_desc;
+	u16 idt_pad;
+	struct desc_ptr idt;
+	u16 ldt;
+	u16 tss;
+	long unsigned int tr;
+	long unsigned int safety;
+	long unsigned int return_address;
+	bool misc_enable_saved;
+} __attribute__((packed));
 
-union efi_pci_io_protocol {
-	struct {
-		void *poll_mem;
-		void *poll_io;
-		efi_pci_io_protocol_access_t mem;
-		efi_pci_io_protocol_access_t io;
-		efi_pci_io_protocol_config_access_t pci;
-		void *copy_mem;
-		void *map;
-		void *unmap;
-		void *allocate_buffer;
-		void *free_buffer;
-		void *flush;
-		efi_status_t (*get_location)(efi_pci_io_protocol_t *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);
-		void *attributes;
-		void *get_bar_attributes;
-		void *set_bar_attributes;
-		uint64_t romsize;
-		void *romimage;
-	};
-	struct {
-		u32 poll_mem;
-		u32 poll_io;
-		efi_pci_io_protocol_access_32_t mem;
-		efi_pci_io_protocol_access_32_t io;
-		efi_pci_io_protocol_access_32_t pci;
-		u32 copy_mem;
-		u32 map;
-		u32 unmap;
-		u32 allocate_buffer;
-		u32 free_buffer;
-		u32 flush;
-		u32 get_location;
-		u32 attributes;
-		u32 get_bar_attributes;
-		u32 set_bar_attributes;
-		u64 romsize;
-		u32 romimage;
-	} mixed_mode;
+typedef int (*pm_cpu_match_t)(const struct x86_cpu_id *);
+
+struct restore_data_record {
+	long unsigned int jump_address;
+	long unsigned int jump_address_phys;
+	long unsigned int cr3;
+	long unsigned int magic;
+	long unsigned int e820_checksum;
 };
 
 #ifndef BPF_NO_PRESERVE_ACCESS_INDEX
diff --git a/man/man8/argdist.8 b/man/man8/argdist.8
index 3033571..75b7fe6 100644
--- a/man/man8/argdist.8
+++ b/man/man8/argdist.8
@@ -24,7 +24,7 @@
 Trace only functions in the thread TID.
 .TP
 \-z STRING_SIZE
-When collecting string arguments (of type char*), collect up to STRING_SIZE 
+When collecting string arguments (of type char*), collect up to STRING_SIZE
 characters. Longer strings will be truncated.
 .TP
 \-i INTERVAL
@@ -48,21 +48,21 @@
 any filtering. See SPECIFIER SYNTAX below.
 .TP
 \-I header
-One or more header files that should be included in the BPF program. This 
+One or more header files that should be included in the BPF program. This
 enables the use of structure definitions, enumerations, and constants that
 are available in these headers. You should provide the same path you would
 include in the BPF program, e.g. 'linux/blkdev.h' or 'linux/time.h'. Note: in
-many cases, argdist will deduce the necessary header files automatically. 
+many cases, argdist will deduce the necessary header files automatically.
 .SH SPECIFIER SYNTAX
 The general specifier syntax is as follows:
 
-.B {p,r,t,u}:{[library],category}:function(signature)[:type[,type...]:expr[,expr...][:filter]][#label]
+.B {p,r,t,u}:{[library],category}:function(signature):type[,type...]:expr[,expr...][:filter]][#label]
 .TP
 .B {p,r,t,u}
 Probe type \- "p" for function entry, "r" for function return, "t" for kernel
 tracepoint, "u" for USDT probe; \-H for histogram collection, \-C for frequency count.
 Indicates where to place the probe and whether the probe should collect frequency
-count information, or aggregate the collected values into a histogram. Counting 
+count information, or aggregate the collected values into a histogram. Counting
 probes will collect the number of times every parameter value was observed,
 whereas histogram probes will collect the parameter values into a histogram.
 Only integral types can be used with histogram probes; there is no such limitation
@@ -80,7 +80,7 @@
 .B function(signature)
 The function to probe, and its signature.
 The function name must match exactly for the probe to be placed. The signature,
-on the other hand, is only required if you plan to collect parameter values 
+on the other hand, is only required if you plan to collect parameter values
 based on that signature. For example, if you only want to collect the first
 parameter, you don't have to specify the rest of the parameters in the signature.
 When capturing kernel tracepoints, this should be the name of the event, e.g.
@@ -101,7 +101,7 @@
 Tracepoints may access a special structure called "args" that is formatted
 according to the tracepoint format (which you can obtain using tplist).
 For example, the block:block_rq_complete tracepoint can access args->nr_sector.
-USDT probes may access the arguments defined by the tracing program in the 
+USDT probes may access the arguments defined by the tracing program in the
 special arg1, arg2, ... variables. To obtain their types, use the tplist tool.
 Return probes can use the argument values received by the
 function when it was entered, through the $entry(paramname) special variable.
@@ -124,7 +124,7 @@
 .TP
 .B [label]
 The label that will be displayed when printing the probed values. By default,
-this is the probe specifier. 
+this is the probe specifier.
 .SH EXAMPLES
 .TP
 Print a histogram of allocation sizes passed to kmalloc:
diff --git a/man/man8/bindsnoop.8 b/man/man8/bindsnoop.8
index f8fa185..0eb42cc 100644
--- a/man/man8/bindsnoop.8
+++ b/man/man8/bindsnoop.8
@@ -2,7 +2,7 @@
 .SH NAME
 bindsnoop \- Trace bind() system calls.
 .SH SYNOPSIS
-.B bindsnoop.py [\fB-h\fP] [\fB-w\fP] [\fB-t\fP] [\fB-p\fP PID] [\fB-P\fP PORT] [\fB-E\fP] [\fB-U\fP] [\fB-u\fP UID] [\fB--count\fP] [\fB--cgroupmap MAP\fP] [\fB--mntnsmap MNTNSMAP\fP]
+.B bindsnoop [\fB-h\fP] [\fB-w\fP] [\fB-t\fP] [\fB-p\fP PID] [\fB-P\fP PORT] [\fB-E\fP] [\fB-U\fP] [\fB-u\fP UID] [\fB--count\fP] [\fB--cgroupmap MAP\fP] [\fB--mntnsmap MNTNSMAP\fP]
 .SH DESCRIPTION
 bindsnoop reports socket options set before the bind call that would impact this system call behavior.
 .PP
diff --git a/man/man8/biolatency.8 b/man/man8/biolatency.8
index c13f6c8..db2ef48 100644
--- a/man/man8/biolatency.8
+++ b/man/man8/biolatency.8
@@ -2,7 +2,7 @@
 .SH NAME
 biolatency \- Summarize block device I/O latency as a histogram.
 .SH SYNOPSIS
-.B biolatency [\-h] [\-F] [\-T] [\-Q] [\-m] [\-D] [\-e] [interval [count]]
+.B biolatency [\-h] [\-F] [\-T] [\-Q] [\-m] [\-D] [\-F] [\-e] [\-j] [\-d DISK] [interval [count]]
 .SH DESCRIPTION
 biolatency traces block device I/O (disk I/O), and records the distribution
 of I/O latency (time). This is printed as a histogram either on Ctrl-C, or
@@ -42,6 +42,9 @@
 \-e
 Show extension summary(total, average)
 .TP
+\-d DISK
+Trace this disk only
+.TP
 interval
 Output interval, in seconds.
 .TP
@@ -108,6 +111,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Brendan Gregg
+Brendan Gregg, Rocky Xing
 .SH SEE ALSO
 biosnoop(8)
diff --git a/man/man8/biosnoop.8 b/man/man8/biosnoop.8
index 4c073f7..6783a01 100644
--- a/man/man8/biosnoop.8
+++ b/man/man8/biosnoop.8
@@ -2,7 +2,7 @@
 .SH NAME
 biosnoop \- Trace block device I/O and print details incl. issuing PID.
 .SH SYNOPSIS
-.B biosnoop [\-hQ]
+.B biosnoop [\-h] [\-Q] [\-d DISK] [\-P]
 .SH DESCRIPTION
 This tools traces block device I/O (disk I/O), and prints a one-line summary
 for each I/O showing various details. These include the latency from the time of
@@ -28,7 +28,13 @@
 Print usage message.
 .TP
 \-Q
-Include a column showing the time spent quueued in the OS.
+Include a column showing the time spent queued in the OS.
+.TP
+\-d DISK
+Trace this disk only.
+.TP
+\-P
+Display block I/O pattern (sequential or random).
 .SH EXAMPLES
 .TP
 Trace all block device I/O and print a summary line per I/O:
@@ -82,6 +88,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Brendan Gregg
+Brendan Gregg, Rocky Xing
 .SH SEE ALSO
 disksnoop(8), iostat(1)
diff --git a/man/man8/bitesize.8 b/man/man8/bitesize.8
index 99cdbaa..655f69e 100644
--- a/man/man8/bitesize.8
+++ b/man/man8/bitesize.8
@@ -6,7 +6,7 @@
 .SH DESCRIPTION
 Show I/O distribution for requested block sizes, by process name.
 
-This works by tracing block:block_rq_issue and prints a historgram of I/O size.
+This works by tracing block:block_rq_issue and prints a histogram of I/O size.
 
 Since this uses BPF, only the root user can use this tool.
 .SH REQUIREMENTS
diff --git a/man/man8/cachetop.8 b/man/man8/cachetop.8
index f6d1ea3..bb7bb3c 100644
--- a/man/man8/cachetop.8
+++ b/man/man8/cachetop.8
@@ -52,6 +52,9 @@
 UID
 User ID of the process causing the cache activity.
 .TP
+CMD
+Name of the process.
+.TP
 HITS
 Number of page cache hits.
 .TP
diff --git a/man/man8/compactsnoop.8 b/man/man8/compactsnoop.8
index a2933d7..e9cde0c 100644
--- a/man/man8/compactsnoop.8
+++ b/man/man8/compactsnoop.8
@@ -1,8 +1,8 @@
 .TH compactsnoop 8  "2019-11-1" "USER COMMANDS"
 .SH NAME
-compactstall \- Trace compact zone events. Uses Linux eBPF/bcc.
+compactsnoop \- Trace compact zone events. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B compactsnoop.py [\-h] [\-T] [\-p PID] [\-d DURATION] [\-K] [\-e]
+.B compactsnoop [\-h] [\-T] [\-p PID] [\-d DURATION] [\-K] [\-e]
 .SH DESCRIPTION
 compactsnoop traces the compact zone events, showing which processes are
 allocing pages with memory compaction. This can be useful for discovering
diff --git a/man/man8/cpudist.8 b/man/man8/cpudist.8
index b59346b..59937ba 100644
--- a/man/man8/cpudist.8
+++ b/man/man8/cpudist.8
@@ -2,7 +2,7 @@
 .SH NAME
 cpudist \- On- and off-CPU task time as a histogram.
 .SH SYNOPSIS
-.B cpudist [\-h] [-O] [\-T] [\-m] [\-P] [\-L] [\-p PID] [\-I] [interval] [count]
+.B cpudist [\-h] [-O] [\-T] [\-m] [\-P] [\-L] [\-p PID] [\-I] [\-e] [interval] [count]
 .SH DESCRIPTION
 This measures the time a task spends on the CPU before being descheduled, and
 shows the times as a histogram. Tasks that spend a very short time on the CPU
@@ -50,6 +50,9 @@
 \-I
 Include CPU idle time (by default these are excluded).
 .TP
+\-e
+Show extension summary (average/total/count).
+.TP
 interval
 Output interval, in seconds.
 .TP
@@ -63,7 +66,7 @@
 .TP
 Summarize task off-CPU time as a histogram:
 #
-.B cpudist -O
+.B cpudist \-O
 .TP
 Print 1 second summaries, 10 times:
 #
@@ -75,11 +78,15 @@
 .TP
 Trace PID 185 only, 1 second summaries:
 #
-.B cpudist -p 185 1
+.B cpudist \-p 185 1
 .TP
 Include CPU idle time:
 #
-.B cpudist -I
+.B cpudist \-I
+.TP
+Also show extension summary:
+#
+.B cpudist \-e
 .SH FIELDS
 .TP
 usecs
@@ -111,6 +118,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Sasha Goldshtein
+Sasha Goldshtein, Rocky Xing
 .SH SEE ALSO
 pidstat(1), runqlat(8)
diff --git a/man/man8/dirtop.8 b/man/man8/dirtop.8
index cc61a67..eaa0c0c 100644
--- a/man/man8/dirtop.8
+++ b/man/man8/dirtop.8
@@ -55,19 +55,19 @@
 .TP
 Summarize block device I/O by directory, 1 second screen refresh:
 #
-.B dirtop.py
+.B dirtop -d '/hdfs/uuid/*/yarn'
 .TP
 Don't clear the screen, and top 8 rows only:
 #
-.B dirtop.py -Cr 8
+.B dirtop -d '/hdfs/uuid/*/yarn' -Cr 8
 .TP
 5 second summaries, 10 times only:
 #
-.B dirtop.py 5 10
+.B dirtop  -d '/hdfs/uuid/*/yarn' 5 10
 .TP
 Report read & write IOs generated in mutliple yarn and data directories:
 #
-.B dirtop.py -d '/hdfs/uuid/*/yarn,/hdfs/uuid/*/data'
+.B dirtop -d '/hdfs/uuid/*/yarn,/hdfs/uuid/*/data'
 .SH FIELDS
 .TP
 loadavg:
diff --git a/man/man8/drsnoop.8 b/man/man8/drsnoop.8
index 572c0dc..8fb3789 100644
--- a/man/man8/drsnoop.8
+++ b/man/man8/drsnoop.8
@@ -2,7 +2,7 @@
 .SH NAME
 drsnoop \- Trace direct reclaim events. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B drsnoop.py [\-h] [\-T] [\-U] [\-p PID] [\-t TID] [\-u UID] [\-d DURATION] [-n name] [-v]
+.B drsnoop [\-h] [\-T] [\-U] [\-p PID] [\-t TID] [\-u UID] [\-d DURATION] [-n name] [-v]
 .SH DESCRIPTION
 drsnoop trace direct reclaim events, showing which processes are allocing pages 
 with direct reclaiming. This can be useful for discovering when allocstall (/p-
@@ -45,6 +45,9 @@
 Only print processes where its name partially matches 'name'
 \-v verbose         
 Run in verbose mode. Will output system memory state
+.TP
+\-v
+show system memory state
 .SH EXAMPLES
 .TP
 Trace all direct reclaim events:
diff --git a/man/man8/execsnoop.8 b/man/man8/execsnoop.8
index e42ad38..6b7e2a4 100644
--- a/man/man8/execsnoop.8
+++ b/man/man8/execsnoop.8
@@ -59,6 +59,9 @@
 \-\-mntnsmap  MAPPATH
 Trace mount namespaces in this BPF map only (filtered in-kernel).
 .TP
+\-P PPID
+Trace this parent PID only.
+.TP
 .SH EXAMPLES
 .TP
 Trace all exec() syscalls:
@@ -144,6 +147,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Brendan Gregg
+Brendan Gregg, Rocky Xing
 .SH SEE ALSO
 opensnoop(1)
diff --git a/man/man8/filegone.8 b/man/man8/filegone.8
new file mode 100644
index 0000000..9e634d9
--- /dev/null
+++ b/man/man8/filegone.8
@@ -0,0 +1,65 @@
+.TH filegone 8  "2022-11-18" "USER COMMANDS"
+.SH NAME
+filegone \- Trace why file gone (deleted or renamed). Uses Linux eBPF/bcc.
+.SH SYNOPSIS
+.B filegone [\-h] [\-p PID]
+.SH DESCRIPTION
+This traces why file gone/vanished, providing information on who deleted or
+renamed the file. 
+
+This works by tracing the kernel vfs_unlink() , vfs_rmdir() , vfs_rename
+functions.
+
+Since this uses BPF, only the root user can use this tool.
+.SH REQUIREMENTS
+CONFIG_BPF and bcc.
+.SH OPTIONS
+.TP
+\-h
+Print usage message.
+.TP
+\-p PID
+Trace this process ID only (filtered in-kernel).
+.SH EXAMPLES
+.TP
+Trace all file gone events
+#
+.B filegone
+.TP
+Trace file gone events caused by PID 181:
+#
+.B filegone \-p 181
+.SH FIELDS
+.TP
+TIME
+Time of the event.
+.TP
+PID
+Process ID that renamed/deleted the file.
+.TP
+COMM
+Process name for the PID.
+.TP
+ACTION
+action on file: 'DELETE' or 'RENAME'
+.TP
+FILE
+Filename.
+.SH OVERHEAD
+This traces the kernel VFS file rename and delete functions and prints output
+for each event. As the rate of this is generally expected to be low
+(< 1000/s), the overhead is also expected to be negligible.
+This is from bcc.
+.IP
+https://github.com/iovisor/bcc
+.PP
+Also look in the bcc distribution for a companion _examples.txt file containing
+example usage, output, and commentary for this tool.
+.SH OS
+Linux
+.SH STABILITY
+Unstable - in development.
+.SH AUTHOR
+Curu Wong
+.SH SEE ALSO
+filelife(8)
diff --git a/man/man8/filetop.8 b/man/man8/filetop.8
index ba0cbd6..2d5f191 100644
--- a/man/man8/filetop.8
+++ b/man/man8/filetop.8
@@ -2,7 +2,7 @@
 .SH NAME
 filetop \- File reads and writes by filename and process. Top for files.
 .SH SYNOPSIS
-.B filetop [\-h] [\-C] [\-r MAXROWS] [\-s {reads,writes,rbytes,wbytes}] [\-p PID] [interval] [count]
+.B filetop [\-h] [\-a] [\-C] [\-r MAXROWS] [\-s {reads,writes,rbytes,wbytes}] [\-p PID] [interval] [count]
 .SH DESCRIPTION
 This is top for files.
 
diff --git a/man/man8/funccount.8 b/man/man8/funccount.8
index 16ce4fc..b2cb857 100644
--- a/man/man8/funccount.8
+++ b/man/man8/funccount.8
@@ -2,7 +2,7 @@
 .SH NAME
 funccount \- Count function, tracepoint, and USDT probe calls matching a pattern. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B funccount [\-h] [\-p PID] [\-i INTERVAL] [\-d DURATION] [\-T] [\-r] [\-D] pattern
+.B funccount [\-h] [\-p PID] [\-i INTERVAL] [\-d DURATION] [\-T] [\-r] [\-c CPU] [\-D] pattern
 .SH DESCRIPTION
 This tool is a quick way to determine which functions are being called,
 and at what rate. It uses in-kernel eBPF maps to count function calls.
diff --git a/man/man8/funcinterval.8 b/man/man8/funcinterval.8
old mode 100755
new mode 100644
index 8a60399..7712829
--- a/man/man8/funcinterval.8
+++ b/man/man8/funcinterval.8
@@ -8,7 +8,7 @@
 
 eBPF/bcc is very suitable for platform performance tuning.
 By funclatency, we can profile specific functions to know how latency
-this function costs. However, sometimes performance drop is not about the 
+this function costs. However, sometimes performance drop is not about the
 latency of function but the interval between function calls.
 funcinterval is born for this purpose.
 
diff --git a/man/man8/funclatency.8 b/man/man8/funclatency.8
index 3eef805..f96f609 100644
--- a/man/man8/funclatency.8
+++ b/man/man8/funclatency.8
@@ -28,6 +28,7 @@
 pattern
 Function name or search pattern. Supports "*" wildcards. See EXAMPLES.
 You can also use \-r for regular expressions.
+.TP
 \-h
 Print usage message.
 .TP
@@ -88,7 +89,7 @@
 .TP
 Time vfs_read() for process ID 181 only:
 #
-.B funclatency \-p 181 vfs_read:
+.B funclatency \-p 181 vfs_read
 .TP
 Time both vfs_fstat() and vfs_fstatat() calls, by use of a wildcard:
 #
diff --git a/man/man8/killsnoop.8 b/man/man8/killsnoop.8
index acb376e..cb2a975 100644
--- a/man/man8/killsnoop.8
+++ b/man/man8/killsnoop.8
@@ -2,7 +2,7 @@
 .SH NAME
 killsnoop \- Trace signals issued by the kill() syscall. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B killsnoop [\-h] [\-x] [-p PID]
+.B killsnoop [\-h] [\-x] [-p PID] [-T PID] [-s SIGNAL]
 .SH DESCRIPTION
 killsnoop traces the kill() syscall, to show signals sent via this method. This
 may be useful to troubleshoot failing applications, where an unknown mechanism
@@ -27,7 +27,10 @@
 Only print failed kill() syscalls.
 .TP
 \-p PID
-Trace this process ID only (filtered in-kernel).
+Trace this process ID only which is the sender of signal (filtered in-kernel).
+.TP
+\-T PID
+Trace this target process ID only which is the receiver of signal (filtered in-kernel).
 .TP
 \-s SIGNAL
 Trace this signal only (filtered in-kernel).
@@ -45,6 +48,10 @@
 #
 .B killsnoop \-p 181
 .TP
+Trace target PID 189 only:
+#
+.B killsnoop \-T 189
+.TP
 Trace signal 9 only:
 #
 .B killsnoop \-s 9
diff --git a/man/man8/klockstat.8 b/man/man8/klockstat.8
index 0a3167d..cb68a29 100644
--- a/man/man8/klockstat.8
+++ b/man/man8/klockstat.8
@@ -134,7 +134,7 @@
 .B klockstat -p 123
 
 .TP
-Trace locks for PID 321:
+Trace locks for TID 321:
 #
 .B klockstat -t 321
 
diff --git a/man/man8/llcstat.8 b/man/man8/llcstat.8
index 36dbed7..5a28d33 100644
--- a/man/man8/llcstat.8
+++ b/man/man8/llcstat.8
@@ -28,6 +28,9 @@
 \-c SAMPLE_PERIOD
 Sample one in this many cache reference and cache miss events.
 .TP
+\-t
+Summarize cache references and misses by PID/TID
+.TP
 duration
 Duration to trace, in seconds.
 .SH EXAMPLES
diff --git a/man/man8/mdflush.8 b/man/man8/mdflush.8
index 9d10ca8..e22c46b 100644
--- a/man/man8/mdflush.8
+++ b/man/man8/mdflush.8
@@ -1,4 +1,4 @@
-.TH pidpersec 8  "2016-02-13" "USER COMMANDS"
+.TH mdflush 8  "2016-02-13" "USER COMMANDS"
 .SH NAME
 mdflush \- Trace md flush events. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
diff --git a/man/man8/offwaketime.8 b/man/man8/offwaketime.8
index 7334b6f..44e3b68 100644
--- a/man/man8/offwaketime.8
+++ b/man/man8/offwaketime.8
@@ -2,7 +2,7 @@
 .SH NAME
 offwaketime \- Summarize blocked time by off-CPU stack + waker stack. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B offwaketime [\-h] [\-p PID | \-t TID | \-u | \-k] [\-U | \-K] [\-f] [\-\-stack-storage-size STACK_STORAGE_SIZE] [\-m MIN_BLOCK_TIME] [\-M MAX_BLOCK_TIME] [\-\-state STATE] [duration]
+.B offwaketime [\-h] [\-p PID | \-t TID | \-u | \-k] [\-U | \-K] [\-d] [\-f] [\-\-stack-storage-size STACK_STORAGE_SIZE] [\-m MIN_BLOCK_TIME] [\-M MAX_BLOCK_TIME] [\-\-state STATE] [duration]
 .SH DESCRIPTION
 This program shows kernel stack traces and task names that were blocked and
 "off-CPU", along with the stack traces and task names for the threads that woke
@@ -55,6 +55,9 @@
 \-K
 Show stacks from kernel space only (no user space stacks).
 .TP
+\-d, --delimited
+insert delimiter between kernel/user stacks
+.TP
 \-\-stack-storage-size STACK_STORAGE_SIZE
 Change the number of unique stack traces that can be stored and displayed.
 .TP
diff --git a/man/man8/opensnoop.8 b/man/man8/opensnoop.8
index fee8326..c8ab85c 100644
--- a/man/man8/opensnoop.8
+++ b/man/man8/opensnoop.8
@@ -2,8 +2,8 @@
 .SH NAME
 opensnoop \- Trace open() syscalls. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B opensnoop.py [\-h] [\-T] [\-U] [\-x] [\-p PID] [\-t TID] [\-u UID]
-             [\-d DURATION] [\-n NAME] [\-e] [\-f FLAG_FILTER]
+.B opensnoop [\-h] [\-T] [\-U] [\-x] [\-p PID] [\-t TID] [\-u UID]
+             [\-d DURATION] [\-n NAME] [\-e] [\-f FLAG_FILTER] [\-F]
              [--cgroupmap MAPPATH] [--mntnsmap MAPPATH]
 .SH DESCRIPTION
 opensnoop traces the open() syscall, showing which processes are attempting
@@ -56,6 +56,9 @@
 \-f FLAG
 Filter on open() flags, e.g., O_WRONLY.
 .TP
+\-F
+Show full path for an open file with relative path.
+.TP
 \--cgroupmap MAPPATH
 Trace cgroups in this BPF map only (filtered in-kernel).
 .TP
@@ -151,6 +154,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Brendan Gregg
+Brendan Gregg, Rocky Xing
 .SH SEE ALSO
 execsnoop(8), funccount(1)
diff --git a/man/man8/ppchcalls.8 b/man/man8/ppchcalls.8
new file mode 100644
index 0000000..f0283aa
--- /dev/null
+++ b/man/man8/ppchcalls.8
@@ -0,0 +1,120 @@
+.TH ppchcalls 8  "2022-10-19" "USER COMMANDS"
+.SH NAME
+ppchcalls \- Summarize ppc hcall counts and latencies.
+.SH SYNOPSIS
+.B ppchcalls [-h] [-p PID] [-t TID] [-i INTERVAL] [-d DURATION] [-T TOP] [-x] [-e ERRNO] [-L] [-m] [-P] [-l] [--hcall HCALL]
+.SH DESCRIPTION
+This tool traces hcall entry and exit raw tracepoints and summarizes either the
+number of hcalls of each type, or the number of hcalls per process. It can
+also collect min, max and average latency for each hcall or each process.
+
+Since this uses BPF, only the root user can use this tool.
+.SH REQUIREMENTS
+CONFIG_BPF and bcc. Linux 4.17+ is required to attach a BPF program to the
+raw_hcalls:hcall_{enter,exit} tracepoints, used by this tool.
+.SH OPTIONS
+.TP
+\-h
+Print usage message.
+.TP
+\-p PID
+Trace only this process.
+.TP
+\-t TID
+Trace only this thread.
+.TP
+\-i INTERVAL
+Print the summary at the specified interval (in seconds).
+.TP
+\-d DURATION
+Total duration of trace (in seconds).
+.TP
+\-T TOP
+Print only this many entries. Default: 10.
+.TP
+\-x
+Trace only failed hcalls (i.e., the return value from the hcall was < 0).
+.TP
+\-e ERRNO
+Trace only hcalls that failed with that error (e.g. -e EPERM or -e 1).
+.TP
+\-m
+Display times in milliseconds. Default: microseconds.
+.TP
+\-P
+Summarize by process and not by hcall.
+.TP
+\-l
+List the hcalls recognized by the tool (hard-coded list). Hcalls beyond this
+list will still be displayed, as "[unknown: nnn]" where nnn is the hcall
+number.
+.TP
+\--hcall HCALL
+Trace this hcall only (use option -l to get all recognized hcalls).
+.SH EXAMPLES
+.TP
+Summarize all hcalls by hcall:
+#
+.B ppchcalls
+.TP
+Summarize all hcalls by process:
+#
+.B ppchcalls \-P
+.TP
+Summarize only failed hcalls:
+#
+.B ppchcalls \-x
+.TP
+Summarize only hcalls that failed with EPERM:
+#
+.B ppchcalls \-e EPERM
+.TP
+Trace PID 181 only:
+#
+.B ppchcalls \-p 181
+.TP
+Summarize hcalls counts and latencies:
+#
+.B ppchcalls \-L
+.SH FIELDS
+.TP
+PID
+Process ID
+.TP
+COMM
+Process name
+.TP
+HCALL
+Hcall name, or "[unknown: nnn]" for hcalls that aren't recognized
+.TP
+COUNT
+The number of events
+.TP
+MIN
+The minimum elapsed time (in us or ms)
+.TP
+MAX
+The maximum elapsed time (in us or ms)
+.TP
+AVG
+The average elapsed time (in us or ms)
+.SH OVERHEAD
+For most applications, the overhead should be manageable if they perform 1000's
+or even 10,000's of hcalls per second. For higher rates, the overhead may
+become considerable.
+.
+.SH SOURCE
+This is from bcc.
+.IP
+https://github.com/iovisor/bcc
+.PP
+Also look in the bcc distribution for a companion _examples.txt file containing
+example usage, output, and commentary for this tool.
+.SH OS
+Linux
+.SH STABILITY
+Unstable - in development.
+.SH AUTHOR
+Harsh Prateek Bora
+.SH SEE ALSO
+syscount(8)
diff --git a/man/man8/profile.8 b/man/man8/profile.8
index 30871af..916224a 100644
--- a/man/man8/profile.8
+++ b/man/man8/profile.8
@@ -3,7 +3,7 @@
 profile \- Profile CPU usage by sampling stack traces. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
 .B profile [\-adfh] [\-p PID | \-L TID] [\-U | \-K] [\-F FREQUENCY | \-c COUNT]
-.B [\-\-stack\-storage\-size COUNT] [\-\-cgroupmap CGROUPMAP] [\-\-mntnsmap MAPPATH] [duration]
+.B [\-\-stack\-storage\-size COUNT] [\-C CPU] [\-\-cgroupmap CGROUPMAP] [\-\-mntnsmap MAPPATH] [duration]
 .SH DESCRIPTION
 This is a CPU profiler. It works by taking samples of stack traces at timed
 intervals. It will help you understand and quantify CPU usage: which code is
@@ -28,10 +28,10 @@
 Print usage message.
 .TP
 \-p PID
-Trace this process ID only (filtered in-kernel).
+Trace process with one or more comma separated PIDs only (filtered in-kernel).
 .TP
 \-L TID
-Trace this thread ID only (filtered in-kernel).
+Trace thread with one or more comma separated TIDs only (filtered in-kernel).
 .TP
 \-F frequency
 Frequency to sample stacks.
diff --git a/man/man8/rdmaucma.8 b/man/man8/rdmaucma.8
new file mode 100644
index 0000000..07eaff5
--- /dev/null
+++ b/man/man8/rdmaucma.8
@@ -0,0 +1,34 @@
+.TH rdmaucma 8 "2023-05-29" "USER COMMANDS"
+.SH NAME
+rdmaucma \- Trace RDMA Userspace Connection Manager Access Event. For Linux, uses BCC, eBPF.
+.SH SYNOPSIS
+.B rdmaucma [\-h] [\-D]
+.SH DESCRIPTION
+This program traces RDMA UCMA(Userspace Connection Manager Access) events,
+This can be useful to analyze issues on RDMA CM.
+
+Since this uses BPF, only the root user can use this tool.
+.SH REQUIREMENTS
+CONFIG_BPF and bcc.
+.SH OPTIONS
+.TP
+\-h
+Print usage message.
+.TP
+\-D
+Show debug infomation of bpf text.
+.SH SOURCE
+This is from bcc.
+.IP
+https://github.com/iovisor/bcc
+.PP
+Also look in the bcc distribution for a companion _examples.txt file containing
+example usage, output, and commentary for this tool.
+.SH OS
+Linux
+.SH STABILITY
+Unstable - in development.
+.SH AUTHOR
+zhenwei pi
+.SH SEE ALSO
+rdma(8)
diff --git a/man/man8/swapin.8 b/man/man8/swapin.8
index c5ef1ff..9ef2eb9 100644
--- a/man/man8/swapin.8
+++ b/man/man8/swapin.8
@@ -3,13 +3,19 @@
 swapin \- Count swapins by process. Uses BCC/eBPF.
 .SH SYNOPSIS
 .B swapin
+.TP
+.BR \-h ", " \-\-help\fR
+show this help message and exit
+.TP
+.BR \-T ", " \-\-notime\fR
+do not show the timestamp (HH:MM:SS)
 .SH DESCRIPTION
 This tool counts swapins by process, to show which process is affected by
 swapping (if swap devices are in use). This can explain a significant source
 of application latency, if it has began swapping due to memory pressure on
 the system.
 
-This works by tracing the swap_readpage() kernel funciton
+This works by tracing the swap_readpage() kernel function
 using dynamic instrumentation. This tool may need maintenance to keep working
 if that function changes in later kernels.
 
diff --git a/man/man8/syscount.8 b/man/man8/syscount.8
index d13793b..d64e52a 100644
--- a/man/man8/syscount.8
+++ b/man/man8/syscount.8
@@ -2,7 +2,7 @@
 .SH NAME
 syscount \- Summarize syscall counts and latencies.
 .SH SYNOPSIS
-.B syscount [-h] [-p PID] [-i INTERVAL] [-d DURATION] [-T TOP] [-x] [-e ERRNO] [-L] [-m] [-P] [-l]
+.B syscount [-h] [-p PID] [-t TID] [-c PPID] [-i INTERVAL] [-d DURATION] [-T TOP] [-x] [-e ERRNO] [-L] [-m] [-P] [-l] [--syscall SYSCALL]
 .SH DESCRIPTION
 This tool traces syscall entry and exit tracepoints and summarizes either the
 number of syscalls of each type, or the number of syscalls per process. It can
@@ -20,6 +20,12 @@
 \-p PID
 Trace only this process.
 .TP
+\-t TID
+Trace only this thread.
+.TP
+\-c PPID
+Trace only child of this pid.
+.TP
 \-i INTERVAL
 Print the summary at the specified interval (in seconds).
 .TP
@@ -45,6 +51,9 @@
 List the syscalls recognized by the tool (hard-coded list). Syscalls beyond this
 list will still be displayed, as "[unknown: nnn]" where nnn is the syscall
 number.
+.TP
+\--syscall SYSCALL
+Trace this syscall only (use option -l to get all recognized syscalls).
 .SH EXAMPLES
 .TP
 Summarize all syscalls by syscall:
@@ -105,6 +114,6 @@
 .SH STABILITY
 Unstable - in development.
 .SH AUTHOR
-Sasha Goldshtein
+Sasha Goldshtein, Rocky Xing
 .SH SEE ALSO
 funccount(8), ucalls(8), argdist(8), trace(8), funclatency(8)
diff --git a/man/man8/tcprtt.8 b/man/man8/tcprtt.8
index 1ed32d6..fcd8bfe 100644
--- a/man/man8/tcprtt.8
+++ b/man/man8/tcprtt.8
@@ -2,7 +2,7 @@
 .SH NAME
 tcprtt \- Trace TCP RTT of established connections. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B tcprtt [\-h] [\-T] [\-D] [\-m] [\-i INTERVAL] [\-d DURATION] [\-b] [\-B] [\-e] [\-4 | \-6]
+.B tcprtt [\-h] [\-T] [\-D] [\-m] [\-p LPORT] [\-P RPORT] [\-a LADDR] [\-A RADDR] [\-i INTERVAL] [\-d DURATION] [\-b] [\-B] [\-e] [\-4 | \-6]
 .SH DESCRIPTION
 This tool traces established connections RTT(round-trip time) to analyze the
 quality of network. This can be useful for general troubleshooting to
diff --git a/man/man8/tcpsubnet.8 b/man/man8/tcpsubnet.8
index 525b808..ad5f1be 100644
--- a/man/man8/tcpsubnet.8
+++ b/man/man8/tcpsubnet.8
@@ -2,7 +2,7 @@
 .SH NAME
 tcpsubnet \- Summarize and aggregate IPv4 TCP traffic by subnet.
 .SH SYNOPSIS
-.B tcpsubnet [\-h] [\-v] [\--ebpf] [\-J] [\-f FORMAT] [\-i INTERVAL] [subnets]
+.B tcpsubnet [\-h] [\-v] [\-J] [\-f FORMAT] [\-i INTERVAL] [subnets]
 .SH DESCRIPTION
 This tool summarizes and aggregates IPv4 TCP sent to the subnets
 passed in argument and prints to stdout on a fixed interval.
@@ -35,9 +35,6 @@
 Format output units. Supported values are bkmBKM. When using
 kmKM the output will be rounded to floor.
 .TP
-\--ebpf
-Prints the BPF program.
-.TP
 subnets
 Comma separated list of subnets. Traffic will be categorized
 in theses subnets. Order matters.
diff --git a/man/man8/tcptracer.8 b/man/man8/tcptracer.8
index 59240f4..19a6164 100644
--- a/man/man8/tcptracer.8
+++ b/man/man8/tcptracer.8
@@ -2,7 +2,7 @@
 .SH NAME
 tcptracer \- Trace TCP established connections. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B tcptracer [\-h] [\-v] [\-p PID] [\-N NETNS] [\-\-cgroupmap MAPPATH] [--mntnsmap MAPPATH] [\-4 | \-6]
+.B tcptracer [\-h] [\-v] [-t] [\-p PID] [\-N NETNS] [\-\-cgroupmap MAPPATH] [--mntnsmap MAPPATH] [\-4 | \-6]
 .SH DESCRIPTION
 This tool traces established TCP connections that open and close while tracing,
 and prints a line of output per connect, accept and close events. This includes
@@ -23,6 +23,9 @@
 \-v
 Print full lines, with long event type names and network namespace numbers.
 .TP
+\-t
+Include timestamp on output
+.TP
 \-p PID
 Trace this process ID only (filtered in-kernel).
 .TP
diff --git a/man/man8/trace.8 b/man/man8/trace.8
index acfff58..64a5e79 100644
--- a/man/man8/trace.8
+++ b/man/man8/trace.8
@@ -2,13 +2,15 @@
 .SH NAME
 trace \- Trace a function and print its arguments or return value, optionally evaluating a filter. Uses Linux eBPF/bcc.
 .SH SYNOPSIS
-.B trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [--uid UID] [-v] [-Z STRING_SIZE] [-S] [-s SYM_FILE_LIST]
-         [-M MAX_EVENTS] [-t] [-u] [-T] [-C] [-K] [-U] [-a] [-I header] [-A]
+.B trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [--uid UID] [-v] [-Z STRING_SIZE] [-S] [-M MAX_EVENTS] [-t]
+         [-u] [-T] [-C] [-c CGROUP_PATH] [-n NAME] [-f MSG_FILTER] [-B] [-s SYM_FILE_LIST] [-K] [-U] [-a]
+         [-I header] [-A]
          probe [probe ...]
+
 .SH DESCRIPTION
 trace probes functions you specify and displays trace messages if a particular
-condition is met. You can control the message format to display function 
-arguments and return values. 
+condition is met. You can control the message format to display function
+arguments and return values.
 
 Since this uses BPF, only the root user can use this tool.
 .SH REQUIREMENTS
@@ -35,7 +37,7 @@
 characters. Longer strings will be truncated.
 .TP
 \-s SYM_FILE_LIST
-When collecting stack trace in build id format, use the coma separated list for
+When collecting stack trace in build id format, use the comma separated list for
 symbol resolution.
 .TP
 \-S
@@ -75,6 +77,7 @@
 .TP
 \-U
 Print the user stack for each event.
+.TP
 \-a
 Print virtual address in kernel and user stacks.
 .TP
@@ -138,15 +141,15 @@
 arguments to the desired type. For example, if arg1 is of type int, use the
 expression ((int)arg1 < 0) to trace only invocations where arg1 is negative.
 Note that only arg1-arg6 are supported, and only if the function is using the
-standard x86_64 convention where the first six arguments are in the RDI, RSI, 
-RDX, RCX, R8, R9 registers. If no predicate is specified, all function 
+standard x86_64 convention where the first six arguments are in the RDI, RSI,
+RDX, RCX, R8, R9 registers. If no predicate is specified, all function
 invocations are traced.
 
 The predicate expression may also use the STRCMP pseudo-function to compare
 a predefined string to a string argument. For example: STRCMP("test", arg1).
 The order of arguments is important: the first argument MUST be a quoted
 literal string, and the second argument can be a runtime string, most typically
-an argument. 
+an argument.
 .TP
 .B ["format string"[, arguments]]
 A printf-style format string that will be used for the trace message. You can
@@ -164,14 +167,14 @@
 
 In tracepoints, both the predicate and the arguments may refer to the tracepoint
 format structure, which is stored in the special "args" variable. For example, the
-block:block_rq_complete tracepoint can print or filter by args->nr_sector. To 
-discover the format of your tracepoint, use the tplist tool. 
+block:block_rq_complete tracepoint can print or filter by args->nr_sector. To
+discover the format of your tracepoint, use the tplist tool.
 
 In USDT probes, the arg1, ..., argN variables refer to the probe's arguments.
 To determine which arguments your probe has, use the tplist tool.
 
 The predicate expression and the format specifier replacements for printing
-may also use the following special keywords: $pid, $tgid to refer to the 
+may also use the following special keywords: $pid, $tgid to refer to the
 current process' pid and tgid; $uid, $gid to refer to the current user's
 uid and gid; $cpu to refer to the current processor number.
 .SH EXAMPLES
@@ -190,7 +193,7 @@
 .TP
 Trace returns from the readline function in bash and print the return value as a string:
 #
-.B trace 'r:bash:readline """%s"", retval' 
+.B trace 'r:bash:readline """%s"", retval'
 .TP
 Trace the block:block_rq_complete tracepoint and print the number of sectors completed:
 #
diff --git a/scripts/git-clang-format b/scripts/git-clang-format
index 74310b7..bf05d91 100755
--- a/scripts/git-clang-format
+++ b/scripts/git-clang-format
@@ -1,28 +1,28 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python
 #
 #===- git-clang-format - ClangFormat Git Integration ---------*- python -*--===#
 #
-#                     The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 #
 #===------------------------------------------------------------------------===#
 
-r"""                                                                             
-clang-format git integration                                                     
-============================                                                     
-                                                                                 
-This file provides a clang-format integration for git. Put it somewhere in your  
-path and ensure that it is executable. Then, "git clang-format" will invoke      
-clang-format on the changes in current files or a specific commit.               
-                                                                                 
-For further details, run:                                                        
-git clang-format -h                                                              
-                                                                                 
-Requires Python 2.7                                                              
-"""               
+r"""
+clang-format git integration
+============================
 
+This file provides a clang-format integration for git. Put it somewhere in your
+path and ensure that it is executable. Then, "git clang-format" will invoke
+clang-format on the changes in current files or a specific commit.
+
+For further details, run:
+git clang-format -h
+
+Requires Python 2.7 or Python 3
+"""
+
+from __future__ import absolute_import, division, print_function
 import argparse
 import collections
 import contextlib
@@ -32,12 +32,15 @@
 import subprocess
 import sys
 
-usage = 'git clang-format [OPTIONS] [<commit>] [--] [<file>...]'
+usage = 'git clang-format [OPTIONS] [<commit>] [<commit>] [--] [<file>...]'
 
 desc = '''
-Run clang-format on all lines that differ between the working directory
-and <commit>, which defaults to HEAD.  Changes are only applied to the working
-directory.
+If zero or one commits are given, run clang-format on all lines that differ
+between the working directory and <commit>, which defaults to HEAD.  Changes are
+only applied to the working directory.
+
+If two commits are given (requires --diff), run clang-format on all lines in the
+second <commit> that differ from the first <commit>.
 
 The following git-config settings set the default of the corresponding option:
   clangFormat.binary
@@ -74,11 +77,14 @@
       'c', 'h',  # C
       'm',  # ObjC
       'mm',  # ObjC++
-      'cc', 'cp', 'cpp', 'c++', 'cxx', 'hpp',  # C++
+      'cc', 'cp', 'cpp', 'c++', 'cxx', 'hh', 'hpp', 'hxx',  # C++
+      'cu',  # CUDA
       # Other languages that clang-format supports
       'proto', 'protodevel',  # Protocol Buffers
+      'java',  # Java
       'js',  # JavaScript
       'ts',  # TypeScript
+      'cs',  # C Sharp
       ])
 
   p = argparse.ArgumentParser(
@@ -120,46 +126,59 @@
   opts.verbose -= opts.quiet
   del opts.quiet
 
-  commit, files = interpret_args(opts.args, dash_dash, opts.commit)
-  changed_lines = compute_diff_and_extract_lines(commit, files)
+  commits, files = interpret_args(opts.args, dash_dash, opts.commit)
+  if len(commits) > 1:
+    if not opts.diff:
+      die('--diff is required when two commits are given')
+  else:
+    if len(commits) > 2:
+      die('at most two commits allowed; %d given' % len(commits))
+  changed_lines = compute_diff_and_extract_lines(commits, files)
   if opts.verbose >= 1:
     ignored_files = set(changed_lines)
   filter_by_extension(changed_lines, opts.extensions.lower().split(','))
   if opts.verbose >= 1:
     ignored_files.difference_update(changed_lines)
     if ignored_files:
-      print 'Ignoring changes in the following files (wrong extension):'
+      print('Ignoring changes in the following files (wrong extension):')
       for filename in ignored_files:
-        print '   ', filename
+        print('    %s' % filename)
     if changed_lines:
-      print 'Running clang-format on the following files:'
+      print('Running clang-format on the following files:')
       for filename in changed_lines:
-        print '   ', filename
-    else:
-      print 'no modified files to format'
-      return
+        print('    %s' % filename)
+  if not changed_lines:
+    print('no modified files to format')
+    return
   # The computed diff outputs absolute paths, so we must cd before accessing
   # those files.
   cd_to_toplevel()
-  old_tree = create_tree_from_workdir(changed_lines)
-  new_tree = run_clang_format_and_save_to_tree(changed_lines,
-                                               binary=opts.binary,
-                                               style=opts.style)
+  if len(commits) > 1:
+    old_tree = commits[1]
+    new_tree = run_clang_format_and_save_to_tree(changed_lines,
+                                                 revision=commits[1],
+                                                 binary=opts.binary,
+                                                 style=opts.style)
+  else:
+    old_tree = create_tree_from_workdir(changed_lines)
+    new_tree = run_clang_format_and_save_to_tree(changed_lines,
+                                                 binary=opts.binary,
+                                                 style=opts.style)
   if opts.verbose >= 1:
-    print 'old tree:', old_tree
-    print 'new tree:', new_tree
+    print('old tree: %s' % old_tree)
+    print('new tree: %s' % new_tree)
   if old_tree == new_tree:
     if opts.verbose >= 0:
-      print 'clang-format did not modify any files'
+      print('clang-format did not modify any files')
   elif opts.diff:
     print_diff(old_tree, new_tree)
   else:
     changed_files = apply_changes(old_tree, new_tree, force=opts.force,
                                   patch_mode=opts.patch)
     if (opts.verbose >= 0 and not opts.patch) or opts.verbose >= 1:
-      print 'changed files:'
+      print('changed files:')
       for filename in changed_files:
-        print '   ', filename
+        print('    %s' % filename)
 
 
 def load_git_config(non_string_options=None):
@@ -181,40 +200,41 @@
 
 
 def interpret_args(args, dash_dash, default_commit):
-  """Interpret `args` as "[commit] [--] [files...]" and return (commit, files).
+  """Interpret `args` as "[commits] [--] [files]" and return (commits, files).
 
   It is assumed that "--" and everything that follows has been removed from
   args and placed in `dash_dash`.
 
-  If "--" is present (i.e., `dash_dash` is non-empty), the argument to its
-  left (if present) is taken as commit.  Otherwise, the first argument is
-  checked if it is a commit or a file.  If commit is not given,
-  `default_commit` is used."""
+  If "--" is present (i.e., `dash_dash` is non-empty), the arguments to its
+  left (if present) are taken as commits.  Otherwise, the arguments are checked
+  from left to right if they are commits or files.  If commits are not given,
+  a list with `default_commit` is used."""
   if dash_dash:
     if len(args) == 0:
-      commit = default_commit
-    elif len(args) > 1:
-      die('at most one commit allowed; %d given' % len(args))
+      commits = [default_commit]
     else:
-      commit = args[0]
-    object_type = get_object_type(commit)
-    if object_type not in ('commit', 'tag'):
-      if object_type is None:
-        die("'%s' is not a commit" % commit)
-      else:
-        die("'%s' is a %s, but a commit was expected" % (commit, object_type))
+      commits = args
+    for commit in commits:
+      object_type = get_object_type(commit)
+      if object_type not in ('commit', 'tag'):
+        if object_type is None:
+          die("'%s' is not a commit" % commit)
+        else:
+          die("'%s' is a %s, but a commit was expected" % (commit, object_type))
     files = dash_dash[1:]
   elif args:
-    if disambiguate_revision(args[0]):
-      commit = args[0]
-      files = args[1:]
-    else:
-      commit = default_commit
-      files = args
+    commits = []
+    while args:
+      if not disambiguate_revision(args[0]):
+        break
+      commits.append(args.pop(0))
+    if not commits:
+      commits = [default_commit]
+    files = args
   else:
-    commit = default_commit
+    commits = [default_commit]
     files = []
-  return commit, files
+  return commits, files
 
 
 def disambiguate_revision(value):
@@ -239,12 +259,12 @@
   stdout, stderr = p.communicate()
   if p.returncode != 0:
     return None
-  return stdout.strip()
+  return convert_string(stdout.strip())
 
 
-def compute_diff_and_extract_lines(commit, files):
+def compute_diff_and_extract_lines(commits, files):
   """Calls compute_diff() followed by extract_lines()."""
-  diff_process = compute_diff(commit, files)
+  diff_process = compute_diff(commits, files)
   changed_lines = extract_lines(diff_process.stdout)
   diff_process.stdout.close()
   diff_process.wait()
@@ -254,13 +274,17 @@
   return changed_lines
 
 
-def compute_diff(commit, files):
-  """Return a subprocess object producing the diff from `commit`.
+def compute_diff(commits, files):
+  """Return a subprocess object producing the diff from `commits`.
 
   The return value's `stdin` file object will produce a patch with the
-  differences between the working directory and `commit`, filtered on `files`
-  (if non-empty).  Zero context lines are used in the patch."""
-  cmd = ['git', 'diff-index', '-p', '-U0', commit, '--']
+  differences between the working directory and the first commit if a single
+  one was specified, or the difference between both specified commits, filtered
+  on `files` (if non-empty).  Zero context lines are used in the patch."""
+  git_tool = 'diff-index'
+  if len(commits) > 1:
+    git_tool = 'diff-tree'
+  cmd = ['git', git_tool, '-p', '-U0'] + commits + ['--']
   cmd.extend(files)
   p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
   p.stdin.close()
@@ -278,6 +302,7 @@
   list of line `Range`s."""
   matches = {}
   for line in patch_file:
+    line = convert_string(line)
     match = re.search(r'^\+\+\+\ [^/]+/(.*)', line)
     if match:
       filename = match.group(1).rstrip('\r\n')
@@ -298,8 +323,10 @@
   `allowed_extensions` must be a collection of lowercase file extensions,
   excluding the period."""
   allowed_extensions = frozenset(allowed_extensions)
-  for filename in dictionary.keys():
+  for filename in list(dictionary.keys()):
     base_ext = filename.rsplit('.', 1)
+    if len(base_ext) == 1 and '' in allowed_extensions:
+        continue
     if len(base_ext) == 1 or base_ext[1].lower() not in allowed_extensions:
       del dictionary[filename]
 
@@ -317,15 +344,34 @@
   return create_tree(filenames, '--stdin')
 
 
-def run_clang_format_and_save_to_tree(changed_lines, binary='clang-format',
-                                      style=None):
+def run_clang_format_and_save_to_tree(changed_lines, revision=None,
+                                      binary='clang-format', style=None):
   """Run clang-format on each file and save the result to a git tree.
 
   Returns the object ID (SHA-1) of the created tree."""
+  def iteritems(container):
+      try:
+          return container.iteritems() # Python 2
+      except AttributeError:
+          return container.items() # Python 3
   def index_info_generator():
-    for filename, line_ranges in changed_lines.iteritems():
-      mode = oct(os.stat(filename).st_mode)
-      blob_id = clang_format_to_blob(filename, line_ranges, binary=binary,
+    for filename, line_ranges in iteritems(changed_lines):
+      if revision:
+        git_metadata_cmd = ['git', 'ls-tree',
+                            '%s:%s' % (revision, os.path.dirname(filename)),
+                            os.path.basename(filename)]
+        git_metadata = subprocess.Popen(git_metadata_cmd, stdin=subprocess.PIPE,
+                                        stdout=subprocess.PIPE)
+        stdout = git_metadata.communicate()[0]
+        mode = oct(int(stdout.split()[0], 8))
+      else:
+        mode = oct(os.stat(filename).st_mode)
+      # Adjust python3 octal format so that it matches what git expects
+      if mode.startswith('0o'):
+          mode = '0' + mode[2:]
+      blob_id = clang_format_to_blob(filename, line_ranges,
+                                     revision=revision,
+                                     binary=binary,
                                      style=style)
       yield '%s %s\t%s' % (mode, blob_id, filename)
   return create_tree(index_info_generator(), '--index-info')
@@ -343,7 +389,7 @@
   with temporary_index_file():
     p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
     for line in input_lines:
-      p.stdin.write('%s\0' % line)
+      p.stdin.write(to_bytes('%s\0' % line))
     p.stdin.close()
     if p.wait() != 0:
       die('`%s` failed' % ' '.join(cmd))
@@ -351,26 +397,42 @@
     return tree_id
 
 
-def clang_format_to_blob(filename, line_ranges, binary='clang-format',
-                         style=None):
+def clang_format_to_blob(filename, line_ranges, revision=None,
+                         binary='clang-format', style=None):
   """Run clang-format on the given file and save the result to a git blob.
 
+  Runs on the file in `revision` if not None, or on the file in the working
+  directory if `revision` is None.
+
   Returns the object ID (SHA-1) of the created blob."""
-  clang_format_cmd = [binary, filename]
+  clang_format_cmd = [binary]
   if style:
     clang_format_cmd.extend(['-style='+style])
   clang_format_cmd.extend([
       '-lines=%s:%s' % (start_line, start_line+line_count-1)
       for start_line, line_count in line_ranges])
+  if revision:
+    clang_format_cmd.extend(['-assume-filename='+filename])
+    git_show_cmd = ['git', 'cat-file', 'blob', '%s:%s' % (revision, filename)]
+    git_show = subprocess.Popen(git_show_cmd, stdin=subprocess.PIPE,
+                                stdout=subprocess.PIPE)
+    git_show.stdin.close()
+    clang_format_stdin = git_show.stdout
+  else:
+    clang_format_cmd.extend([filename])
+    git_show = None
+    clang_format_stdin = subprocess.PIPE
   try:
-    clang_format = subprocess.Popen(clang_format_cmd, stdin=subprocess.PIPE,
+    clang_format = subprocess.Popen(clang_format_cmd, stdin=clang_format_stdin,
                                     stdout=subprocess.PIPE)
+    if clang_format_stdin == subprocess.PIPE:
+      clang_format_stdin = clang_format.stdin
   except OSError as e:
     if e.errno == errno.ENOENT:
       die('cannot find executable "%s"' % binary)
     else:
       raise
-  clang_format.stdin.close()
+  clang_format_stdin.close()
   hash_object_cmd = ['git', 'hash-object', '-w', '--path='+filename, '--stdin']
   hash_object = subprocess.Popen(hash_object_cmd, stdin=clang_format.stdout,
                                  stdout=subprocess.PIPE)
@@ -380,7 +442,9 @@
     die('`%s` failed' % ' '.join(hash_object_cmd))
   if clang_format.wait() != 0:
     die('`%s` failed' % ' '.join(clang_format_cmd))
-  return stdout.rstrip('\r\n')
+  if git_show and git_show.wait() != 0:
+    die('`%s` failed' % ' '.join(git_show_cmd))
+  return convert_string(stdout).rstrip('\r\n')
 
 
 @contextlib.contextmanager
@@ -418,7 +482,12 @@
   # We use the porcelain 'diff' and not plumbing 'diff-tree' because the output
   # is expected to be viewed by the user, and only the former does nice things
   # like color and pagination.
-  subprocess.check_call(['git', 'diff', old_tree, new_tree, '--'])
+  #
+  # We also only print modified files since `new_tree` only contains the files
+  # that were modified, so unmodified files would show as deleted without the
+  # filter.
+  subprocess.check_call(['git', 'diff', '--diff-filter=M', old_tree, new_tree,
+                         '--'])
 
 
 def apply_changes(old_tree, new_tree, force=False, patch_mode=False):
@@ -426,15 +495,16 @@
 
   Bails if there are local changes in those files and not `force`.  If
   `patch_mode`, runs `git checkout --patch` to select hunks interactively."""
-  changed_files = run('git', 'diff-tree', '-r', '-z', '--name-only', old_tree,
+  changed_files = run('git', 'diff-tree', '--diff-filter=M', '-r', '-z',
+                      '--name-only', old_tree,
                       new_tree).rstrip('\0').split('\0')
   if not force:
     unstaged_files = run('git', 'diff-files', '--name-status', *changed_files)
     if unstaged_files:
-      print >>sys.stderr, ('The following files would be modified but '
-                           'have unstaged changes:')
-      print >>sys.stderr, unstaged_files
-      print >>sys.stderr, 'Please commit, stage, or stash them first.'
+      print('The following files would be modified but '
+                'have unstaged changes:', file=sys.stderr)
+      print(unstaged_files, file=sys.stderr)
+      print('Please commit, stage, or stash them first.', file=sys.stderr)
       sys.exit(2)
   if patch_mode:
     # In patch mode, we could just as well create an index from the new tree
@@ -461,25 +531,50 @@
   p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                        stdin=subprocess.PIPE)
   stdout, stderr = p.communicate(input=stdin)
+
+  stdout = convert_string(stdout)
+  stderr = convert_string(stderr)
+
   if p.returncode == 0:
     if stderr:
       if verbose:
-        print >>sys.stderr, '`%s` printed to stderr:' % ' '.join(args)
-      print >>sys.stderr, stderr.rstrip()
+        print('`%s` printed to stderr:' % ' '.join(args), file=sys.stderr)
+      print(stderr.rstrip(), file=sys.stderr)
     if strip:
       stdout = stdout.rstrip('\r\n')
     return stdout
   if verbose:
-    print >>sys.stderr, '`%s` returned %s' % (' '.join(args), p.returncode)
+    print('`%s` returned %s' % (' '.join(args), p.returncode), file=sys.stderr)
   if stderr:
-    print >>sys.stderr, stderr.rstrip()
+    print(stderr.rstrip(), file=sys.stderr)
   sys.exit(2)
 
 
 def die(message):
-  print >>sys.stderr, 'error:', message
+  print('error:', message, file=sys.stderr)
   sys.exit(2)
 
 
+def to_bytes(str_input):
+    # Encode to UTF-8 to get binary data.
+    if isinstance(str_input, bytes):
+        return str_input
+    return str_input.encode('utf-8')
+
+
+def to_string(bytes_input):
+    if isinstance(bytes_input, str):
+        return bytes_input
+    return bytes_input.encode('utf-8')
+
+
+def convert_string(bytes_input):
+    try:
+        return to_string(bytes_input.decode('utf-8'))
+    except AttributeError: # 'str' object has no attribute 'decode'.
+        return str(bytes_input)
+    except UnicodeError:
+        return str(bytes_input)
+
 if __name__ == '__main__':
   main()
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 9eedafd..d6c87e3 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -85,8 +85,7 @@
             - libtinfo5
             - libzzip-0-13
             - python3
-            - python3-distutils
-            - python3-distutils-extra
+            - python3-packaging
             - python3-pip
             - python3-setuptools
         prime:
diff --git a/src/cc/CMakeLists.txt b/src/cc/CMakeLists.txt
index ffe8fee..104eff0 100644
--- a/src/cc/CMakeLists.txt
+++ b/src/cc/CMakeLists.txt
@@ -9,12 +9,21 @@
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/frontends/clang)
 include_directories(${LLVM_INCLUDE_DIRS})
 include_directories(${LIBELF_INCLUDE_DIRS})
-if (LIBDEBUGINFOD_FOUND)
+if (LIBLZMA_FOUND)
+  include_directories(${LIBLZMA_INCLUDE_DIRS})
+endif(LIBLZMA_FOUND)
+if (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD)
   include_directories(${LIBDEBUGINFOD_INCLUDE_DIRS})
-endif (LIBDEBUGINFOD_FOUND)
+endif (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD)
 # todo: if check for kernel version
 if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND)
   include_directories(${LIBBPF_INCLUDE_DIRS})
+  # create up-to-date linux/bpf.h from virtual_bpf.h (remove string wrapper);
+  # when libbpf is built as a submodule we use its version of linux/bpf.h
+  # so this does similar for the libbpf package, removing reliance on the
+  # system uapi header which can be out of date.
+  execute_process(COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/compat/linux && grep -ve '\\*\\*\\*\\*' virtual_bpf.h > bpf.h")
+  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat)
 else()
   include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include)
   include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include/uapi)
@@ -35,9 +44,6 @@
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCOMPAT_NEED_REALLOCARRAY")
 endif()
 
-string(REGEX MATCH "^([0-9]+).*" _ ${LLVM_PACKAGE_VERSION})
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_MAJOR_VERSION=${CMAKE_MATCH_1}")
-
 include(static_libstdc++)
 
 if(LIBBPF_INCLUDE_DIR)
@@ -73,7 +79,7 @@
 
 set(bcc_table_sources table_storage.cc shared_table.cc bpffs_table.cc json_map_decl_visitor.cc)
 set(bcc_util_sources common.cc)
-set(bcc_sym_sources bcc_syms.cc bcc_elf.c bcc_perf_map.c bcc_proc.c)
+set(bcc_sym_sources bcc_syms.cc bcc_elf.c bcc_perf_map.c bcc_proc.c bcc_zip.c)
 set(bcc_common_headers libbpf.h perf_reader.h "${CMAKE_CURRENT_BINARY_DIR}/bcc_version.h")
 set(bcc_table_headers file_desc.h table_desc.h table_storage.h)
 set(bcc_api_headers bcc_common.h bpf_module.h bcc_exception.h bcc_syms.h bcc_proc.h bcc_elf.h)
@@ -110,6 +116,9 @@
 set_target_properties(bpf-shared PROPERTIES VERSION ${REVISION_LAST} SOVERSION 0)
 set_target_properties(bpf-shared PROPERTIES OUTPUT_NAME bcc_bpf)
 target_link_libraries(bpf-shared elf z)
+if(LIBLZMA_FOUND)
+  target_link_libraries(bpf-shared ${LIBLZMA_LIBRARIES})
+endif(LIBLZMA_FOUND)
 if(LIBDEBUGINFOD_FOUND)
   target_link_libraries(bpf-shared ${LIBDEBUGINFOD_LIBRARIES})
 endif(LIBDEBUGINFOD_FOUND)
@@ -126,6 +135,9 @@
 set(bcc_common_libs clang_frontend
   -Wl,--whole-archive ${clang_libs} ${llvm_libs} -Wl,--no-whole-archive
   ${LIBELF_LIBRARIES})
+if (LIBLZMA_FOUND)
+  list(APPEND bcc_common_libs ${LIBLZMA_LIBRARIES})
+endif (LIBLZMA_FOUND)
 if (LIBDEBUGINFOD_FOUND)
   list(APPEND bcc_common_libs ${LIBDEBUGINFOD_LIBRARIES})
 endif (LIBDEBUGINFOD_FOUND)
@@ -145,7 +157,7 @@
 
 if(ENABLE_CPP_API)
   add_subdirectory(api)
-  list(APPEND bcc_common_libs_for_a api-static)
+  target_sources(bcc-static PRIVATE $<TARGET_OBJECTS:api-objects>)
   # Keep all API functions
   list(APPEND bcc_common_libs_for_s -Wl,--whole-archive api-static -Wl,--no-whole-archive)
 endif()
@@ -160,6 +172,8 @@
 
 add_subdirectory(frontends)
 
+target_sources(bcc-static PRIVATE $<TARGET_OBJECTS:clang_frontend-objects>)
+
 # Link against LLVM libraries
 target_link_libraries(bcc-shared ${bcc_common_libs_for_s})
 target_link_libraries(bcc-static ${bcc_common_libs_for_a} bcc-loader-static)
diff --git a/src/cc/api/BPF.cc b/src/cc/api/BPF.cc
index 3453a5a..9fda2d1 100644
--- a/src/cc/api/BPF.cc
+++ b/src/cc/api/BPF.cc
@@ -118,13 +118,14 @@
     }
   }
 
-  auto flags_len = cflags.size();
-  const char* flags[flags_len];
-  for (size_t i = 0; i < flags_len; i++)
-    flags[i] = cflags[i].c_str();
+  std::vector<const char*> flags;
+  for (const auto& c: cflags)
+    flags.push_back(c.c_str());
 
   all_bpf_program_ += bpf_program;
-  if (bpf_module_->load_string(all_bpf_program_, flags, flags_len) != 0) {
+  if (bpf_module_->load_string(all_bpf_program_,
+                               flags.data(),
+                               flags.size()) != 0) {
     init_fail_reset();
     return StatusTuple(-1, "Unable to initialize BPF program");
   }
@@ -610,7 +611,7 @@
 }
 
 StatusTuple BPF::open_perf_event(const std::string& name, uint32_t type,
-                                 uint64_t config) {
+                                 uint64_t config, int pid) {
   if (perf_event_arrays_.find(name) == perf_event_arrays_.end()) {
     TableStorage::iterator it;
     if (!bpf_module_->table_storage().Find(Path({bpf_module_->id(), name}), it))
@@ -619,7 +620,7 @@
     perf_event_arrays_[name] = new BPFPerfEventArray(it->second);
   }
   auto table = perf_event_arrays_[name];
-  TRY2(table->open_all_cpu(type, config));
+  TRY2(table->open_all_cpu(type, config, pid));
   return StatusTuple::OK();
 }
 
@@ -671,7 +672,7 @@
 }
 
 StatusTuple BPF::load_func(const std::string& func_name, bpf_prog_type type,
-                           int& fd, unsigned flags) {
+                           int& fd, unsigned flags, bpf_attach_type expected_attach_type) {
   if (funcs_.find(func_name) != funcs_.end()) {
     fd = funcs_[func_name];
     return StatusTuple::OK();
@@ -692,7 +693,7 @@
   fd = bpf_module_->bcc_func_load(type, func_name.c_str(),
                      reinterpret_cast<struct bpf_insn*>(func_start), func_size,
                      bpf_module_->license(), bpf_module_->kern_version(),
-                     log_level, nullptr, 0, nullptr, flags);
+                     log_level, nullptr, 0, nullptr, flags, expected_attach_type);
 
   if (fd < 0)
     return StatusTuple(-1, "Failed to load %s: %d", func_name.c_str(), fd);
@@ -853,6 +854,17 @@
     false : true;
 }
 
+namespace {
+
+constexpr size_t kEventNameSizeLimit = 224;
+
+std::string shorten_event_name(const std::string& name) {
+  std::string hash = uint_to_hex(std::hash<std::string>{}(name));
+  return name.substr(0, kEventNameSizeLimit - hash.size()) + hash;
+}
+
+} // namespace
+
 std::string BPF::get_uprobe_event(const std::string& binary_path,
                                   uint64_t offset, bpf_probe_attach_type type,
                                   pid_t pid) {
@@ -861,6 +873,9 @@
   res += "_0x" + uint_to_hex(offset);
   if (pid != -1)
     res += "_" + std::to_string(pid);
+  if (res.size() > kEventNameSizeLimit) {
+    return shorten_event_name(res);
+  }
   return res;
 }
 
diff --git a/src/cc/api/BPF.h b/src/cc/api/BPF.h
index 2d401ff..01f68e5 100644
--- a/src/cc/api/BPF.h
+++ b/src/cc/api/BPF.h
@@ -40,7 +40,74 @@
   std::vector<std::pair<int, int>>* per_cpu_fd;
 };
 
-class USDT;
+class BPF;
+
+class USDT {
+ public:
+  USDT(const std::string& binary_path, const std::string& provider,
+       const std::string& name, const std::string& probe_func);
+  USDT(pid_t pid, const std::string& provider, const std::string& name,
+       const std::string& probe_func);
+  USDT(const std::string& binary_path, pid_t pid, const std::string& provider,
+       const std::string& name, const std::string& probe_func);
+  USDT(const USDT& usdt);
+  USDT(USDT&& usdt) noexcept;
+
+  const std::string &binary_path() const { return binary_path_; }
+  pid_t pid() const { return pid_; }
+  const std::string &provider() const { return provider_; }
+  const std::string &name() const { return name_; }
+  const std::string &probe_func() const { return probe_func_; }
+
+  StatusTuple init();
+
+  bool operator==(const USDT& other) const;
+
+  std::string print_name() const {
+    return provider_ + ":" + name_ + " from binary " + binary_path_ + " PID " +
+           std::to_string(pid_) + " for probe " + probe_func_;
+  }
+
+  friend std::ostream& operator<<(std::ostream& out, const USDT& usdt) {
+    return out << usdt.provider_ << ":" << usdt.name_ << " from binary "
+               << usdt.binary_path_ << " PID " << usdt.pid_ << " for probe "
+               << usdt.probe_func_;
+  }
+
+  // When the kludge flag is set to 1 (default), we will only match on inode
+  // when searching for modules in /proc/PID/maps that might contain the
+  // tracepoint we're looking for.
+  // By setting this to 0, we will match on both inode and
+  // (dev_major, dev_minor), which is a more accurate way to uniquely
+  // identify a file, but may fail depending on the filesystem backing the
+  // target file (see bcc#2715)
+  //
+  // This hack exists because btrfs and overlayfs report different device
+  // numbers for files in /proc/PID/maps vs stat syscall. Don't use it unless
+  // you've had issues with inode collisions. Both btrfs and overlayfs are
+  // known to require inode-only resolution to accurately match a file.
+  //
+  // set_probe_matching_kludge(0) must be called before USDTs are submitted to
+  // BPF::init()
+  int set_probe_matching_kludge(uint8_t kludge);
+
+ private:
+  bool initialized_;
+
+  std::string binary_path_;
+  pid_t pid_;
+
+  std::string provider_;
+  std::string name_;
+  std::string probe_func_;
+
+  std::unique_ptr<void, std::function<void(void*)>> probe_;
+  std::string program_text_;
+
+  uint8_t mod_match_inode_only_;
+
+  friend class BPF;
+};
 
 class BPF {
  public:
@@ -238,7 +305,7 @@
   bool add_module(std::string module);
 
   StatusTuple open_perf_event(const std::string& name, uint32_t type,
-                              uint64_t config);
+                              uint64_t config, int pid = -1);
 
   StatusTuple close_perf_event(const std::string& name);
 
@@ -263,7 +330,7 @@
   int poll_perf_buffer(const std::string& name, int timeout_ms = -1);
 
   StatusTuple load_func(const std::string& func_name, enum bpf_prog_type type,
-                        int& fd, unsigned flags = 0);
+                        int& fd, unsigned flags = 0, enum bpf_attach_type = (bpf_attach_type) -1);
   StatusTuple unload_func(const std::string& func_name);
 
   StatusTuple attach_func(int prog_fd, int attachable_fd,
@@ -349,71 +416,4 @@
   std::map<std::pair<uint32_t, uint32_t>, open_probe_t> perf_events_;
 };
 
-class USDT {
- public:
-  USDT(const std::string& binary_path, const std::string& provider,
-       const std::string& name, const std::string& probe_func);
-  USDT(pid_t pid, const std::string& provider, const std::string& name,
-       const std::string& probe_func);
-  USDT(const std::string& binary_path, pid_t pid, const std::string& provider,
-       const std::string& name, const std::string& probe_func);
-  USDT(const USDT& usdt);
-  USDT(USDT&& usdt) noexcept;
-
-  const std::string &binary_path() const { return binary_path_; }
-  pid_t pid() const { return pid_; }
-  const std::string &provider() const { return provider_; }
-  const std::string &name() const { return name_; }
-  const std::string &probe_func() const { return probe_func_; }
-
-  StatusTuple init();
-
-  bool operator==(const USDT& other) const;
-
-  std::string print_name() const {
-    return provider_ + ":" + name_ + " from binary " + binary_path_ + " PID " +
-           std::to_string(pid_) + " for probe " + probe_func_;
-  }
-
-  friend std::ostream& operator<<(std::ostream& out, const USDT& usdt) {
-    return out << usdt.provider_ << ":" << usdt.name_ << " from binary "
-               << usdt.binary_path_ << " PID " << usdt.pid_ << " for probe "
-               << usdt.probe_func_;
-  }
-
-  // When the kludge flag is set to 1 (default), we will only match on inode
-  // when searching for modules in /proc/PID/maps that might contain the
-  // tracepoint we're looking for.
-  // By setting this to 0, we will match on both inode and
-  // (dev_major, dev_minor), which is a more accurate way to uniquely
-  // identify a file, but may fail depending on the filesystem backing the
-  // target file (see bcc#2715)
-  //
-  // This hack exists because btrfs and overlayfs report different device
-  // numbers for files in /proc/PID/maps vs stat syscall. Don't use it unless
-  // you've had issues with inode collisions. Both btrfs and overlayfs are
-  // known to require inode-only resolution to accurately match a file.
-  //
-  // set_probe_matching_kludge(0) must be called before USDTs are submitted to
-  // BPF::init()
-  int set_probe_matching_kludge(uint8_t kludge);
-
- private:
-  bool initialized_;
-
-  std::string binary_path_;
-  pid_t pid_;
-
-  std::string provider_;
-  std::string name_;
-  std::string probe_func_;
-
-  std::unique_ptr<void, std::function<void(void*)>> probe_;
-  std::string program_text_;
-
-  uint8_t mod_match_inode_only_;
-
-  friend class BPF;
-};
-
 }  // namespace ebpf
diff --git a/src/cc/api/BPFTable.cc b/src/cc/api/BPFTable.cc
index 23beae3..8b72bec 100644
--- a/src/cc/api/BPFTable.cc
+++ b/src/cc/api/BPFTable.cc
@@ -535,14 +535,15 @@
                                 "' is not a perf event array");
 }
 
-StatusTuple BPFPerfEventArray::open_all_cpu(uint32_t type, uint64_t config) {
+StatusTuple BPFPerfEventArray::open_all_cpu(uint32_t type, uint64_t config,
+                                            int pid) {
   if (cpu_fds_.size() != 0)
     return StatusTuple(-1, "Previously opened perf event not cleaned");
 
   std::vector<int> cpus = get_online_cpus();
 
   for (int i : cpus) {
-    auto res = open_on_cpu(i, type, config);
+    auto res = open_on_cpu(i, type, config, pid);
     if (!res.ok()) {
       TRY2(close_all_cpu());
       return res;
@@ -573,10 +574,10 @@
 }
 
 StatusTuple BPFPerfEventArray::open_on_cpu(int cpu, uint32_t type,
-                                           uint64_t config) {
+                                           uint64_t config, int pid) {
   if (cpu_fds_.find(cpu) != cpu_fds_.end())
     return StatusTuple(-1, "Perf event already open on CPU %d", cpu);
-  int fd = bpf_open_perf_event(type, config, -1, cpu);
+  int fd = bpf_open_perf_event(type, config, pid, cpu);
   if (fd < 0) {
     return StatusTuple(-1, "Error constructing perf event %" PRIu32 ":%" PRIu64,
                        type, config);
diff --git a/src/cc/api/BPFTable.h b/src/cc/api/BPFTable.h
index 681b4a9..fa11b9f 100644
--- a/src/cc/api/BPFTable.h
+++ b/src/cc/api/BPFTable.h
@@ -437,11 +437,11 @@
   BPFPerfEventArray(const TableDesc& desc);
   ~BPFPerfEventArray();
 
-  StatusTuple open_all_cpu(uint32_t type, uint64_t config);
+  StatusTuple open_all_cpu(uint32_t type, uint64_t config, int pid = -1);
   StatusTuple close_all_cpu();
 
  private:
-  StatusTuple open_on_cpu(int cpu, uint32_t type, uint64_t config);
+  StatusTuple open_on_cpu(int cpu, uint32_t type, uint64_t config, int pid = -1);
   StatusTuple close_on_cpu(int cpu);
 
   std::map<int, int> cpu_fds_;
diff --git a/src/cc/api/CMakeLists.txt b/src/cc/api/CMakeLists.txt
index 4234e20..9eea272 100644
--- a/src/cc/api/CMakeLists.txt
+++ b/src/cc/api/CMakeLists.txt
@@ -1,3 +1,4 @@
 set(bcc_api_sources BPF.cc BPFTable.cc)
 add_library(api-static STATIC ${bcc_api_sources})
+add_library(api-objects OBJECT ${bcc_api_sources})
 install(FILES BPF.h BPFTable.h COMPONENT libbcc DESTINATION include/bcc)
diff --git a/src/cc/bcc_common.cc b/src/cc/bcc_common.cc
index c33e37a..26d300a 100644
--- a/src/cc/bcc_common.cc
+++ b/src/cc/bcc_common.cc
@@ -236,12 +236,12 @@
                   const struct bpf_insn *insns, int prog_len,
                   const char *license, unsigned kern_version,
                   int log_level, char *log_buf, unsigned log_buf_size,
-                  const char *dev_name) {
+                  const char *dev_name, int attach_type) {
   auto mod = static_cast<ebpf::BPFModule *>(program);
   if (!mod) return -1;
   return mod->bcc_func_load(prog_type, name, insns, prog_len,
                             license, kern_version, log_level,
-                            log_buf, log_buf_size, dev_name);
+                            log_buf, log_buf_size, dev_name, 0, attach_type);
 
 }
 
diff --git a/src/cc/bcc_common.h b/src/cc/bcc_common.h
index ed68f54..6987d6b 100644
--- a/src/cc/bcc_common.h
+++ b/src/cc/bcc_common.h
@@ -71,7 +71,7 @@
                   const struct bpf_insn *insns, int prog_len,
                   const char *license, unsigned kern_version,
                   int log_level, char *log_buf, unsigned log_buf_size,
-                  const char *dev_name);
+                  const char *dev_name, int attach_type);
 
 #ifdef __cplusplus
 }
diff --git a/src/cc/bcc_debug.cc b/src/cc/bcc_debug.cc
index d7ed49f..b73d0f1 100644
--- a/src/cc/bcc_debug.cc
+++ b/src/cc/bcc_debug.cc
@@ -19,7 +19,7 @@
 #include <tuple>
 #include <vector>
 
-#if LLVM_MAJOR_VERSION >= 15
+#if LLVM_VERSION_MAJOR >= 15
 #include <llvm/DebugInfo/DWARF/DWARFCompileUnit.h>
 #endif
 #include <llvm/DebugInfo/DWARF/DWARFContext.h>
@@ -32,10 +32,10 @@
 #include <llvm/MC/MCInstrInfo.h>
 #include <llvm/MC/MCObjectFileInfo.h>
 #include <llvm/MC/MCRegisterInfo.h>
-#if LLVM_MAJOR_VERSION >= 15
+#if LLVM_VERSION_MAJOR >= 15
 #include <llvm/MC/MCSubtargetInfo.h>
 #endif
-#if LLVM_MAJOR_VERSION >= 14
+#if LLVM_VERSION_MAJOR >= 14
 #include <llvm/MC/TargetRegistry.h>
 #else
 #include <llvm/Support/TargetRegistry.h>
@@ -127,7 +127,7 @@
     errs() << "Debug Error: cannot get register info\n";
     return;
   }
-#if LLVM_MAJOR_VERSION >= 10
+#if LLVM_VERSION_MAJOR >= 10
   MCTargetOptions MCOptions;
   std::unique_ptr<MCAsmInfo> MAI(T->createMCAsmInfo(*MRI, TripleStr, MCOptions));
 #else
@@ -141,7 +141,7 @@
   std::unique_ptr<MCSubtargetInfo> STI(
       T->createMCSubtargetInfo(TripleStr, "", ""));
   MCObjectFileInfo MOFI;
-#if LLVM_MAJOR_VERSION >= 13
+#if LLVM_VERSION_MAJOR >= 13
   MCContext Ctx(TheTriple, MAI.get(), MRI.get(), STI.get(), nullptr);
   Ctx.setObjectFileInfo(&MOFI);
   MOFI.initMCObjectFileInfo(Ctx, false, false);
@@ -176,7 +176,7 @@
 
   // bcc has only one compilation unit
   // getCompileUnitAtIndex() was gone in llvm 8.0 (https://reviews.llvm.org/D49741)
-#if LLVM_MAJOR_VERSION >= 8
+#if LLVM_VERSION_MAJOR >= 8
   DWARFCompileUnit *CU = cast<DWARFCompileUnit>(DwarfCtx->getUnitAtIndex(0));
 #else
   DWARFCompileUnit *CU = DwarfCtx->getCompileUnitAtIndex(0);
@@ -202,7 +202,7 @@
     uint64_t Size;
     uint8_t *FuncStart = info.start_;
     uint64_t FuncSize = info.size_;
-#if LLVM_MAJOR_VERSION >= 9
+#if LLVM_VERSION_MAJOR >= 9
     auto section = sections_.find(info.section_);
     if (section == sections_.end()) {
       errs() << "Debug Error: no section entry for section " << info.section_
@@ -219,7 +219,7 @@
     string src_dbg_str;
     llvm::raw_string_ostream os(src_dbg_str);
     for (uint64_t Index = 0; Index < FuncSize; Index += Size) {
-#if LLVM_MAJOR_VERSION >= 10
+#if LLVM_VERSION_MAJOR >= 10
       S = DisAsm->getInstruction(Inst, Size, Data.slice(Index), Index, nulls());
 #else
       S = DisAsm->getInstruction(Inst, Size, Data.slice(Index), Index, nulls(),
@@ -232,7 +232,7 @@
         DILineInfo LineInfo;
 
         LineTable->getFileLineInfoForAddress(
-#if LLVM_MAJOR_VERSION >= 9
+#if LLVM_VERSION_MAJOR >= 9
             {(uint64_t)FuncStart + Index, SectionID},
 #else
             (uint64_t)FuncStart + Index,
@@ -245,7 +245,7 @@
                     os);
         os << format("%4" PRIu64 ":", Index >> 3) << '\t';
         dumpBytes(Data.slice(Index, Size), os);
-#if LLVM_MAJOR_VERSION >= 10
+#if LLVM_VERSION_MAJOR >= 10
         IP->printInst(&Inst, 0, "", *STI, os);
 #else
         IP->printInst(&Inst, os, "", *STI);
diff --git a/src/cc/bcc_debug.h b/src/cc/bcc_debug.h
index f9bda11..1d20e10 100644
--- a/src/cc/bcc_debug.h
+++ b/src/cc/bcc_debug.h
@@ -36,7 +36,7 @@
 // on a set of in-memory sections with slightly different interfaces.
 // FIXME: possibly to support 5.x
 //
-#if LLVM_MAJOR_VERSION >= 6
+#if LLVM_VERSION_MAJOR >= 6
   void dump();
 
  private:
diff --git a/src/cc/bcc_elf.c b/src/cc/bcc_elf.c
index e2909d7..bf853fe 100644
--- a/src/cc/bcc_elf.c
+++ b/src/cc/bcc_elf.c
@@ -24,6 +24,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h>
+#ifdef HAVE_LIBLZMA
+#include <lzma.h>
+#endif
 #ifdef HAVE_LIBDEBUGINFOD
 #include <elfutils/debuginfod.h>
 #endif
@@ -32,6 +35,7 @@
 #include "bcc_elf.h"
 #include "bcc_proc.h"
 #include "bcc_syms.h"
+#include "bcc_zip.h"
 
 #define NT_STAPSDT 3
 #define ELF_ST_TYPE(x) (((uint32_t) x) & 0xf)
@@ -47,18 +51,146 @@
   return 0;
 }
 
-static int openelf(const char *path, Elf **elf_out, int *fd_out) {
-  *fd_out = open(path, O_RDONLY);
-  if (*fd_out < 0)
+static int openelf_mem(void *buf, size_t buf_len, Elf **elf_out) {
+  if (elf_version(EV_CURRENT) == EV_NONE)
     return -1;
 
-  if (openelf_fd(*fd_out, elf_out) == -1) {
-    close(*fd_out);
+  *elf_out = elf_memory(buf, buf_len);
+  if (*elf_out == NULL)
+    return -1;
+
+  return 0;
+}
+
+// Type of bcc_elf_file.
+enum bcc_elf_file_type {
+  // Empty bcc_elf_file, not associated with any Elf or resources.
+  // None of the union fields should be read and elf pointer is NULL.
+  BCC_ELF_FILE_TYPE_NONE = 0,
+
+  // bcc_elf_file owning a file descriptor and providing access to
+  // an Elf file backed by data from that file.
+  // fd field of the impl union stores the file descriptor and elf
+  // pointer is not NULL.
+  BCC_ELF_FILE_TYPE_FD,
+
+  // bcc_elf_file owning a memory buffer and providing access to an
+  // Elf file backed by data in that buffer.
+  // buf field of the impl union stores the address of the buffer
+  // and elf pointer is not NULL.
+  BCC_ELF_FILE_TYPE_BUF,
+
+  // bcc_elf_file owning a bcc_zip_archive and providing access to
+  // an Elf file backed by data from one of the zip entries.
+  // archive field of the impl union stores the address of the
+  // zip archive and elf pointer is not NULL.
+  BCC_ELF_FILE_TYPE_ARCHIVE
+};
+
+// Provides access to an Elf structure in an uniform way,
+// independently from its source (file, memory buffer, zip archive).
+struct bcc_elf_file {
+  Elf *elf;
+  enum bcc_elf_file_type type;
+
+  union {
+    int fd;
+    void *buf;
+    struct bcc_zip_archive *archive;
+  };
+};
+
+// Initializes bcc_elf_file as not pointing to any elf file and not
+// owning any resources. After returning the provided elf_file can be
+// safely passed to bcc_elf_file_close.
+static void bcc_elf_file_init(struct bcc_elf_file *elf_file) {
+  memset(elf_file, 0, sizeof(struct bcc_elf_file));
+}
+
+#ifdef HAVE_LIBLZMA
+static int bcc_elf_file_open_buf(void *buf, size_t buf_len,
+                                 struct bcc_elf_file *out) {
+  Elf *elf = NULL;
+
+  if (openelf_mem(buf, buf_len, &elf)) {
     return -1;
   }
 
+  out->elf = elf;
+  out->type = BCC_ELF_FILE_TYPE_BUF;
+  out->buf = buf;
   return 0;
 }
+#endif
+
+static int bcc_elf_file_open_fd(int fd, struct bcc_elf_file *out) {
+  Elf *elf = NULL;
+
+  if (openelf_fd(fd, &elf)) {
+    return -1;
+  }
+
+  out->elf = elf;
+  out->type = BCC_ELF_FILE_TYPE_FD;
+  out->fd = fd;
+  return 0;
+}
+
+static int bcc_elf_file_open(const char *path, struct bcc_elf_file *out) {
+  struct bcc_zip_archive *archive = NULL;
+  struct bcc_zip_entry entry;
+  int fd = -1;
+
+  fd = open(path, O_RDONLY);
+  if (fd >= 0) {
+    if (bcc_elf_file_open_fd(fd, out)) {
+      close(fd);
+      return -1;
+    }
+
+    return 0;
+  }
+
+  archive = bcc_zip_archive_open_and_find(path, &entry);
+  if (archive) {
+    if (entry.compression ||
+        openelf_mem((void *)entry.data, entry.data_length, &out->elf)) {
+      bcc_zip_archive_close(archive);
+      return -1;
+    }
+
+    out->type = BCC_ELF_FILE_TYPE_ARCHIVE;
+    out->archive = archive;
+    return 0;
+  }
+
+  return -1;
+}
+
+static void bcc_elf_file_close(struct bcc_elf_file *elf_file) {
+  if (elf_file->elf) {
+    elf_end(elf_file->elf);
+  }
+
+  switch (elf_file->type) {
+  case BCC_ELF_FILE_TYPE_FD:
+    close(elf_file->fd);
+    break;
+
+  case BCC_ELF_FILE_TYPE_BUF:
+    free(elf_file->buf);
+    break;
+
+  case BCC_ELF_FILE_TYPE_ARCHIVE:
+    bcc_zip_archive_close(elf_file->archive);
+    break;
+
+  default:
+    break;
+  }
+
+  bcc_elf_file_init(elf_file);
+}
 
 static const char *parse_stapsdt_note(struct bcc_elf_usdt *probe,
                                       GElf_Shdr *probes_shdr,
@@ -197,16 +329,16 @@
 
 int bcc_elf_foreach_usdt(const char *path, bcc_elf_probecb callback,
                          void *payload) {
-  Elf *e;
-  int fd, res;
+  int res;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     return -1;
 
-  res = listprobes(e, callback, path, payload);
-  elf_end(e);
-  close(fd);
+  res = listprobes(elf_file.elf, callback, path, payload);
 
+  bcc_elf_file_close(&elf_file);
   return res;
 }
 
@@ -504,19 +636,36 @@
 		return false;
 }
 
-static char *find_debug_via_debuglink(Elf *e, const char *binpath,
-                                      int check_crc) {
+static int try_open_debuglink_candidate(const char *path, int check_crc,
+                                        int crc, struct bcc_elf_file *out) {
+  if (access(path, F_OK)) {
+    return -1;
+  }
+
+  if (check_crc && !verify_checksum(path, crc)) {
+    return -1;
+  }
+
+  return bcc_elf_file_open(path, out);
+}
+
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+// See https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
+static int find_debug_via_debuglink(Elf *e, const char *binpath, int check_crc,
+                                    struct bcc_elf_file *out) {
   char fullpath[PATH_MAX];
-  char *tmppath;
+  char tmppath[PATH_MAX];
   char *bindir = NULL;
-  char *res = NULL;
   unsigned int crc;
   char *name;  // the name of the debuginfo file
 
   if (!find_debuglink(e, &name, &crc))
-    return NULL;
+    return -1;
 
-  tmppath = strdup(binpath);
+  strncpy(tmppath, binpath, PATH_MAX);
+  tmppath[PATH_MAX - 1] = 0;
   bindir = dirname(tmppath);
 
   // Search for the file in 'binpath', but ignore the file we find if it
@@ -524,67 +673,64 @@
   // and it might contain poorer symbols (e.g. stripped or partial symbols)
   // than the external debuginfo that might be available elsewhere.
   snprintf(fullpath, sizeof(fullpath),"%s/%s", bindir, name);
-  if (same_file(fullpath, binpath) != true && access(fullpath, F_OK) != -1) {
-    res = strdup(fullpath);
-    goto DONE;
-  }
+  if (same_file(fullpath, binpath) != true &&
+      try_open_debuglink_candidate(fullpath, check_crc, crc, out) == 0)
+    return 0;
 
   // Search for the file in 'binpath'/.debug
   snprintf(fullpath, sizeof(fullpath), "%s/.debug/%s", bindir, name);
-  if (access(fullpath, F_OK) != -1) {
-    res = strdup(fullpath);
-    goto DONE;
-  }
+  if (try_open_debuglink_candidate(fullpath, check_crc, crc, out) == 0)
+    return 0;
 
   // Search for the file in the global debug directory /usr/lib/debug/'binpath'
   snprintf(fullpath, sizeof(fullpath), "/usr/lib/debug%s/%s", bindir, name);
-  if (access(fullpath, F_OK) != -1) {
-    res = strdup(fullpath);
-    goto DONE;
-  }
+  if (try_open_debuglink_candidate(fullpath, check_crc, crc, out) == 0)
+    return 0;
 
-DONE:
-  free(tmppath);
-  if (res && check_crc && !verify_checksum(res, crc)) {
-    free(res);
-    return NULL;
-  }
-  return res;
+  return -1;
 }
 
-static char *find_debug_via_buildid(Elf *e) {
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+// See https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
+static int find_debug_via_buildid(Elf *e, struct bcc_elf_file *out) {
   char fullpath[PATH_MAX];
   char buildid[128];  // currently 40 seems to be default, let's be safe
 
   if (!find_buildid(e, buildid))
-    return NULL;
+    return -1;
 
   // Search for the file in the global debug directory with a sub-path:
   //    mm/nnnnnn...nnnn.debug
   // Where mm are the first two characters of the buildid, and nnnn are the
   // rest of the build id, followed by .debug.
-  snprintf(fullpath, sizeof(fullpath), "/usr/lib/debug/.build-id/%c%c/%s.debug",
-          buildid[0], buildid[1], buildid + 2);
-  if (access(fullpath, F_OK) != -1) {
-    return strdup(fullpath);
-  }
-
-  return NULL;
+  const char *bcc_debuginfo_root = getenv("BCC_DEBUGINFO_ROOT");
+  if (bcc_debuginfo_root == NULL)
+    bcc_debuginfo_root = "/usr/lib/debug";
+  snprintf(fullpath, sizeof(fullpath), "%s/.build-id/%c%c/%s.debug",
+           bcc_debuginfo_root, buildid[0], buildid[1], buildid + 2);
+  return bcc_elf_file_open(fullpath, out);
 }
 
-static char *find_debug_via_symfs(Elf *e, const char* path) {
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+// See
+// https://github.com/torvalds/linux/blob/v5.2/tools/perf/Documentation/perf-report.txt#L325
+static int find_debug_via_symfs(Elf *e, const char *path,
+                                struct bcc_elf_file *out) {
   char fullpath[PATH_MAX];
   char buildid[128];
   char symfs_buildid[128];
   int check_build_id;
   char *symfs;
-  Elf *symfs_e = NULL;
-  int symfs_fd = -1;
-  char *result = NULL;
+  struct bcc_elf_file symfs_elf_file;
+  bcc_elf_file_init(&symfs_elf_file);
 
   symfs = getenv("BCC_SYMFS");
   if (!symfs || !*symfs)
-    goto out;
+    goto fail;
 
   check_build_id = find_buildid(e, buildid);
 
@@ -594,112 +740,178 @@
 
   snprintf(fullpath, sizeof(fullpath), "%s/%s", symfs, path);
   if (access(fullpath, F_OK) == -1)
-    goto out;
+    goto fail;
 
-  if (openelf(fullpath, &symfs_e, &symfs_fd) < 0) {
-    symfs_e = NULL;
-    symfs_fd = -1;
-    goto out;
+  if (bcc_elf_file_open(fullpath, &symfs_elf_file) < 0) {
+    goto fail;
   }
 
   if (check_build_id) {
-    if (!find_buildid(symfs_e, symfs_buildid))
-      goto out;
+    if (!find_buildid(symfs_elf_file.elf, symfs_buildid))
+      goto fail;
 
     if (strncmp(buildid, symfs_buildid, sizeof(buildid)))
-      goto out;
+      goto fail;
   }
 
-  result = strdup(fullpath);
+  *out = symfs_elf_file;
+  return 0;
 
-out:
-  if (symfs_e) {
-    elf_end(symfs_e);
-  }
-
-  if (symfs_fd != -1) {
-    close(symfs_fd);
-  }
-
-  return result;
+fail:
+  bcc_elf_file_close(&symfs_elf_file);
+  return -1;
 }
 
+#ifdef HAVE_LIBLZMA
+
+#define LZMA_MIN_BUFFER_SIZE 4096
+#define LZMA_MEMLIMIT (128 * 1024 * 1024)
+static int open_mini_debug_info_file(void *gnu_debugdata,
+                                     size_t gnu_debugdata_size,
+                                     struct bcc_elf_file *out) {
+  void *decompressed = NULL;
+  void *new_decompressed = NULL;
+  size_t decompressed_data_size = 0;
+  size_t decompressed_buffer_size = 0;
+  lzma_stream stream = LZMA_STREAM_INIT;
+  lzma_ret ret;
+
+  ret = lzma_stream_decoder(&stream, LZMA_MEMLIMIT, 0);
+  if (ret != LZMA_OK)
+    return -1;
+
+  stream.next_in = gnu_debugdata;
+  stream.avail_in = gnu_debugdata_size;
+  stream.avail_out = 0;
+
+  while (ret == LZMA_OK && stream.avail_in > 0) {
+    if (stream.avail_out < LZMA_MIN_BUFFER_SIZE) {
+      decompressed_buffer_size += LZMA_MIN_BUFFER_SIZE;
+      new_decompressed = realloc(decompressed, decompressed_buffer_size);
+      if (new_decompressed == NULL) {
+        ret = LZMA_MEM_ERROR;
+        break;
+      }
+
+      decompressed = new_decompressed;
+      stream.avail_out += LZMA_MIN_BUFFER_SIZE;
+      stream.next_out = decompressed + decompressed_data_size;
+    }
+    ret = lzma_code(&stream, LZMA_FINISH);
+    decompressed_data_size = decompressed_buffer_size - stream.avail_out;
+  }
+  lzma_end(&stream);
+
+  if (ret != LZMA_STREAM_END ||
+      bcc_elf_file_open_buf(decompressed, decompressed_data_size, out)) {
+    free(decompressed);
+    return -1;
+  }
+
+  return 0;
+}
+
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+// See https://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html
+static int find_debug_via_mini_debug_info(Elf *elf, struct bcc_elf_file *out) {
+  Elf_Data *gnu_debugdata;
+
+  gnu_debugdata = get_section_elf_data(elf, ".gnu_debugdata");
+  if (gnu_debugdata == NULL)
+    return -1;
+
+  return open_mini_debug_info_file(gnu_debugdata->d_buf, gnu_debugdata->d_size,
+                                   out);
+}
+#endif
+
 #ifdef HAVE_LIBDEBUGINFOD
-static char *find_debug_via_debuginfod(Elf *e){
+
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+// See https://sourceware.org/elfutils/Debuginfod.html
+static int find_debug_via_debuginfod(Elf *e, struct bcc_elf_file *out) {
   char buildid[128];
-  char *debugpath = NULL;
   int fd = -1;
 
   if (!find_buildid(e, buildid))
-    return NULL;
+    return -1;
 
   debuginfod_client *client = debuginfod_begin();
   if (!client)
-    return NULL;
+    return -1;
 
-  // In case of an error, the function returns a negative error code and
-  // debugpath stays NULL.
-  fd = debuginfod_find_debuginfo(client, (const unsigned char *) buildid, 0,
-                                 &debugpath);
-  if (fd >= 0)
-    close(fd);
+  // In case of an error, the function returns a negative error code.
+  fd = debuginfod_find_debuginfo(client, (const unsigned char *)buildid, 0,
+                                 NULL);
+  if (fd >= 0) {
+    if (bcc_elf_file_open_fd(fd, out)) {
+      close(fd);
+      fd = -1;
+    }
+  }
 
   debuginfod_end(client);
-  return debugpath;
+  return fd >= 0 ? 0 : -1;
 }
 #endif
 
-static char *find_debug_file(Elf* e, const char* path, int check_crc) {
-  char *debug_file = NULL;
+// Returns 0 on success, otherwise nonzero.
+// If successfull, 'out' param is a valid bcc_elf_file.
+// Caller is responsible for calling bcc_elf_file_close when done using it.
+static int find_debug_file(Elf *e, const char *path, int check_crc,
+                           struct bcc_elf_file *out) {
+  if (find_debug_via_symfs(e, path, out) == 0)
+    return 0;
 
-  // If there is a separate debuginfo file, try to locate and read it, first
-  // using symfs, then using the build-id section, finally using the debuglink
-  // section. These rules are what perf and gdb follow.
-  // See:
-  // - https://github.com/torvalds/linux/blob/v5.2/tools/perf/Documentation/perf-report.txt#L325
-  // - https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
-  debug_file = find_debug_via_symfs(e, path);
-  if (!debug_file)
-    debug_file = find_debug_via_buildid(e);
-  if (!debug_file)
-    debug_file = find_debug_via_debuglink(e, path, check_crc);
+  if (find_debug_via_buildid(e, out) == 0)
+    return 0;
+
+  if (find_debug_via_debuglink(e, path, check_crc, out) == 0)
+    return 0;
+
+#ifdef HAVE_LIBLZMA
+  if (find_debug_via_mini_debug_info(e, out) == 0)
+    return 0;
+#endif
+
 #ifdef HAVE_LIBDEBUGINFOD
-  if (!debug_file)
-    debug_file = find_debug_via_debuginfod(e);
+  if (find_debug_via_debuginfod(e, out) == 0)
+    return 0;
 #endif
 
-  return debug_file;
+  return -1;
 }
 
-
 static int foreach_sym_core(const char *path, bcc_elf_symcb callback,
                             bcc_elf_symcb_lazy callback_lazy,
-                            struct bcc_symbol_option *option, void *payload,
-                            int is_debug_file) {
-  Elf *e;
-  int fd, res;
-  char *debug_file;
+                            struct bcc_symbol_option *option, void *payload) {
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
+  struct bcc_elf_file debug_elf_file;
+  bcc_elf_file_init(&debug_elf_file);
+  int res;
 
   if (!option)
     return -1;
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     return -1;
 
-  if (option->use_debug_file && !is_debug_file) {
-    // The is_debug_file argument helps avoid infinitely resolving debuginfo
-    // files for debuginfo files and so on.
-    debug_file = find_debug_file(e, path,
-                                 option->check_debug_file_crc);
-    if (debug_file) {
-      foreach_sym_core(debug_file, callback, callback_lazy, option, payload, 1);
-      free(debug_file);
+  if (option->use_debug_file) {
+    if (find_debug_file(elf_file.elf, path, option->check_debug_file_crc,
+                        &debug_elf_file) == 0) {
+      listsymbols(debug_elf_file.elf, callback, callback_lazy, payload, option,
+                  1);
+      bcc_elf_file_close(&debug_elf_file);
     }
   }
 
-  res = listsymbols(e, callback, callback_lazy, payload, option, is_debug_file);
-  elf_end(e);
-  close(fd);
+  res = listsymbols(elf_file.elf, callback, callback_lazy, payload, option, 0);
+  bcc_elf_file_close(&elf_file);
   return res;
 }
 
@@ -707,35 +919,36 @@
                         void *option, void *payload) {
   struct bcc_symbol_option *o = option;
   o->lazy_symbolize = 0;
-  return foreach_sym_core(path, callback, NULL, o, payload, 0);
+  return foreach_sym_core(path, callback, NULL, o, payload);
 }
 
 int bcc_elf_foreach_sym_lazy(const char *path, bcc_elf_symcb_lazy callback,
                         void *option, void *payload) {
   struct bcc_symbol_option *o = option;
   o->lazy_symbolize = 1;
-  return foreach_sym_core(path, NULL, callback, o, payload, 0);
+  return foreach_sym_core(path, NULL, callback, o, payload);
 }
 
 int bcc_elf_get_text_scn_info(const char *path, uint64_t *addr,
-				   uint64_t *offset) {
-  Elf *e = NULL;
-  int fd = -1, err;
+                              uint64_t *offset) {
+  int err;
   Elf_Scn *section = NULL;
   GElf_Shdr header;
   size_t stridx;
   char *name;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if ((err = openelf(path, &e, &fd)) < 0 ||
-      (err = elf_getshdrstrndx(e, &stridx)) < 0)
+  if ((err = bcc_elf_file_open(path, &elf_file)) < 0 ||
+      (err = elf_getshdrstrndx(elf_file.elf, &stridx)) < 0)
     goto exit;
 
   err = -1;
-  while ((section = elf_nextscn(e, section)) != 0) {
+  while ((section = elf_nextscn(elf_file.elf, section)) != 0) {
     if (!gelf_getshdr(section, &header))
       continue;
 
-    name = elf_strptr(e, stridx, header.sh_name);
+    name = elf_strptr(elf_file.elf, stridx, header.sh_name);
     if (name && !strcmp(name, ".text")) {
       *addr = (uint64_t)header.sh_addr;
       *offset = (uint64_t)header.sh_offset;
@@ -745,29 +958,27 @@
   }
 
 exit:
-  if (e)
-    elf_end(e);
-  if (fd >= 0)
-    close(fd);
+  bcc_elf_file_close(&elf_file);
   return err;
 }
 
 int bcc_elf_foreach_load_section(const char *path,
                                  bcc_elf_load_sectioncb callback,
                                  void *payload) {
-  Elf *e = NULL;
-  int fd = -1, err = -1, res;
+  int err = -1, res;
   size_t nhdrs, i;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     goto exit;
 
-  if (elf_getphdrnum(e, &nhdrs) != 0)
+  if (elf_getphdrnum(elf_file.elf, &nhdrs) != 0)
     goto exit;
 
   GElf_Phdr header;
   for (i = 0; i < nhdrs; i++) {
-    if (!gelf_getphdr(e, (int)i, &header))
+    if (!gelf_getphdr(elf_file.elf, (int)i, &header))
       continue;
     if (header.p_type != PT_LOAD || !(header.p_flags & PF_X))
       continue;
@@ -780,25 +991,21 @@
   err = 0;
 
 exit:
-  if (e)
-    elf_end(e);
-  if (fd >= 0)
-    close(fd);
+  bcc_elf_file_close(&elf_file);
   return err;
 }
 
 int bcc_elf_get_type(const char *path) {
-  Elf *e;
   GElf_Ehdr hdr;
-  int fd;
   void* res = NULL;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     return -1;
 
-  res = (void*)gelf_getehdr(e, &hdr);
-  elf_end(e);
-  close(fd);
+  res = (void *)gelf_getehdr(elf_file.elf, &hdr);
+  bcc_elf_file_close(&elf_file);
 
   if (!res)
     return -1;
@@ -877,7 +1084,9 @@
   if (openelf_fd(vdso_image_fd, &elf) == -1)
     return -1;
 
-  return listsymbols(elf, callback, NULL, payload, &default_option, 0);
+  int rc = listsymbols(elf, callback, NULL, payload, &default_option, 0);
+  elf_end(elf);
+  return rc;
 }
 
 // return value: 0   : success
@@ -886,18 +1095,19 @@
 static int bcc_free_memory_with_file(const char *path) {
   unsigned long sym_addr = 0, sym_shndx;
   Elf_Scn *section = NULL;
-  int fd = -1, err;
+  int err;
   GElf_Shdr header;
-  Elf *e = NULL;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if ((err = openelf(path, &e, &fd)) < 0)
+  if ((err = bcc_elf_file_open(path, &elf_file)) < 0)
     goto exit;
 
   // get symbol address of "bcc_free_memory", which
   // will be used to calculate runtime .text address
   // range, esp. for shared libraries.
   err = -1;
-  while ((section = elf_nextscn(e, section)) != 0) {
+  while ((section = elf_nextscn(elf_file.elf, section)) != 0) {
     Elf_Data *data = NULL;
     size_t symsize;
 
@@ -922,7 +1132,8 @@
           continue;
 
         const char *name;
-        if ((name = elf_strptr(e, header.sh_link, sym.st_name)) == NULL)
+        if ((name = elf_strptr(elf_file.elf, header.sh_link, sym.st_name)) ==
+            NULL)
           continue;
 
         if (strcmp(name, "bcc_free_memory") == 0) {
@@ -941,7 +1152,7 @@
   int sh_idx = 0;
   section = NULL;
   err = 1;
-  while ((section = elf_nextscn(e, section)) != 0) {
+  while ((section = elf_nextscn(elf_file.elf, section)) != 0) {
     sh_idx++;
     if (!gelf_getshdr(section, &header))
       continue;
@@ -968,10 +1179,7 @@
   }
 
 exit:
-  if (e)
-    elf_end(e);
-  if (fd >= 0)
-    close(fd);
+  bcc_elf_file_close(&elf_file);
   return err;
 }
 
@@ -1036,53 +1244,52 @@
   return err;
 }
 
-int bcc_elf_get_buildid(const char *path, char *buildid)
-{
-  Elf *e;
-  int fd;
+int bcc_elf_get_buildid(const char *path, char *buildid) {
+  int rc = -1;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     return -1;
 
-  if (!find_buildid(e, buildid))
-    return -1;
+  if (!find_buildid(elf_file.elf, buildid))
+    goto exit;
 
-  return 0;
+  rc = 0;
+exit:
+  bcc_elf_file_close(&elf_file);
+  return rc;
 }
 
 int bcc_elf_symbol_str(const char *path, size_t section_idx,
                        size_t str_table_idx, char *out, size_t len,
-                       int debugfile)
-{
-  Elf *e = NULL, *d = NULL;
-  int fd = -1, dfd = -1, err = 0;
+                       int debugfile) {
+  int err = 0;
   const char *name;
-  char *debug_file = NULL;
+  struct bcc_elf_file elf_file;
+  bcc_elf_file_init(&elf_file);
+  struct bcc_elf_file debug_elf_file;
+  bcc_elf_file_init(&debug_elf_file);
 
   if (!out)
     return -1;
 
-  if (openelf(path, &e, &fd) < 0)
+  if (bcc_elf_file_open(path, &elf_file) < 0)
     return -1;
 
   if (debugfile) {
-    debug_file = find_debug_file(e, path, 0);
-    if (!debug_file) {
+    if (find_debug_file(elf_file.elf, path, 0, &debug_elf_file)) {
       err = -1;
       goto exit;
     }
 
-    if (openelf(debug_file, &d, &dfd) < 0) {
-      err = -1;
-      goto exit;
-    }
-
-    if ((name = elf_strptr(d, section_idx, str_table_idx)) == NULL) {
+    if ((name = elf_strptr(debug_elf_file.elf, section_idx, str_table_idx)) ==
+        NULL) {
       err = -1;
       goto exit;
     }
   } else {
-    if ((name = elf_strptr(e, section_idx, str_table_idx)) == NULL) {
+    if ((name = elf_strptr(elf_file.elf, section_idx, str_table_idx)) == NULL) {
       err = -1;
       goto exit;
     }
@@ -1091,16 +1298,8 @@
   strncpy(out, name, len);
 
 exit:
-  if (debug_file)
-    free(debug_file);
-  if (e)
-    elf_end(e);
-  if (d)
-    elf_end(d);
-  if (fd >= 0)
-    close(fd);
-  if (dfd >= 0)
-    close(dfd);
+  bcc_elf_file_close(&debug_elf_file);
+  bcc_elf_file_close(&elf_file);
   return err;
 }
 
diff --git a/src/cc/bcc_proc.c b/src/cc/bcc_proc.c
index d6e1728..7ebea82 100644
--- a/src/cc/bcc_proc.c
+++ b/src/cc/bcc_proc.c
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+#include "bcc_proc.h"
+
 #include <ctype.h>
 #include <dirent.h>
 #include <fcntl.h>
@@ -29,9 +31,9 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "bcc_perf_map.h"
-#include "bcc_proc.h"
 #include "bcc_elf.h"
+#include "bcc_perf_map.h"
+#include "bcc_zip.h"
 
 #ifdef __x86_64__
 // https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt
@@ -121,12 +123,49 @@
   return path;
 }
 
+static int _procfs_might_be_zip_path(const char *path) {
+  return strstr(path, ".zip") || strstr(path, ".apk");
+}
+
+static char *_procfs_find_zip_entry(const char *path, int pid,
+                                    uint32_t *offset) {
+  char ns_relative_path[PATH_MAX];
+  int rc = snprintf(ns_relative_path, sizeof(ns_relative_path),
+                    "/proc/%d/root%s", pid, path);
+  if (rc < 0 || rc >= sizeof(ns_relative_path)) {
+    return NULL;
+  }
+
+  struct bcc_zip_archive *archive = bcc_zip_archive_open(ns_relative_path);
+  if (archive == NULL) {
+    return NULL;
+  }
+
+  struct bcc_zip_entry entry;
+  if (bcc_zip_archive_find_entry_at_offset(archive, *offset, &entry) ||
+      entry.compression) {
+    bcc_zip_archive_close(archive);
+    return NULL;
+  }
+
+  char *result = malloc(strlen(path) + entry.name_length + 3);
+  if (result == NULL) {
+    bcc_zip_archive_close(archive);
+    return NULL;
+  }
+
+  sprintf(result, "%s!/%.*s", path, entry.name_length, entry.name);
+  *offset -= entry.data_offset;
+  bcc_zip_archive_close(archive);
+  return result;
+}
+
 // return: 0 -> callback returned < 0, stopped iterating
 //        -1 -> callback never indicated to stop
 int _procfs_maps_each_module(FILE *procmap, int pid,
                              bcc_procutils_modulecb callback, void *payload) {
   char buf[PATH_MAX + 1], perm[5];
-  char *name;
+  char *name, *resolved_name;
   mod_info mod;
   uint8_t enter_ns;
   while (true) {
@@ -148,14 +187,25 @@
     if (!bcc_mapping_is_file_backed(name))
       continue;
 
+    resolved_name = NULL;
     if (strstr(name, "/memfd:")) {
-      char *memfd_name = _procutils_memfd_path(pid, mod.inode);
-      if (memfd_name != NULL) {
-        strcpy(buf, memfd_name);
-        free(memfd_name);
-        mod.name = buf;
+      resolved_name = _procutils_memfd_path(pid, mod.inode);
+      if (resolved_name != NULL) {
         enter_ns = 0;
       }
+    } else if (_procfs_might_be_zip_path(mod.name)) {
+      uint32_t zip_entry_offset = mod.file_offset;
+      resolved_name = _procfs_find_zip_entry(mod.name, pid, &zip_entry_offset);
+      if (resolved_name != NULL) {
+        mod.file_offset = zip_entry_offset;
+      }
+    }
+
+    if (resolved_name != NULL) {
+      strncpy(buf, resolved_name, PATH_MAX);
+      buf[PATH_MAX] = 0;
+      free(resolved_name);
+      mod.name = buf;
     }
 
     if (callback(&mod, enter_ns, payload) < 0)
@@ -212,10 +262,6 @@
   FILE *kallsyms;
   unsigned long long addr;
 
-  /* root is needed to list ksym addresses */
-  if (geteuid() != 0)
-    return -1;
-
   kallsyms = fopen("/proc/kallsyms", "r");
   if (!kallsyms)
     return -1;
diff --git a/src/cc/bcc_syms.cc b/src/cc/bcc_syms.cc
index 12c8250..a015850 100644
--- a/src/cc/bcc_syms.cc
+++ b/src/cc/bcc_syms.cc
@@ -14,38 +14,104 @@
  * limitations under the License.
  */
 
+#include "bcc_syms.h"
+
 #include <cxxabi.h>
-#include <cstring>
 #include <fcntl.h>
+#include <limits.h>
 #include <linux/elf.h>
+#include <signal.h>
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/sysmacros.h>
 #include <sys/types.h>
 #include <unistd.h>
+
 #include <cstdio>
+#include <cstring>
 
 #include "bcc_elf.h"
 #include "bcc_perf_map.h"
 #include "bcc_proc.h"
-#include "bcc_syms.h"
 #include "common.h"
+#include "syms.h"
 #include "vendor/tinyformat.hpp"
 
-#include "syms.h"
+ProcSyms::ModulePath::ModulePath(const std::string &ns_path, int root_fd,
+                                 int pid, bool enter_ns) {
+  if (!enter_ns) {
+    path_ = ns_path;
+    proc_root_path_ = ns_path;
+    return;
+  }
+  proc_root_path_ = tfm::format("/proc/%d/root%s", pid, ns_path);
+  // filename for openat must not contain any starting slashes, otherwise
+  // it would get treated as an absolute path
+  std::string trimmed_path;
+  size_t non_slash_pos;
+  for (non_slash_pos = 0;
+       non_slash_pos < ns_path.size() && ns_path[non_slash_pos] == '/';
+       non_slash_pos++)
+    ;
+  trimmed_path = ns_path.substr(non_slash_pos);
+  fd_ = openat(root_fd, trimmed_path.c_str(), O_RDONLY);
+  if (fd_ > 0)
+    path_ = tfm::format("/proc/self/fd/%d", fd_);
+  else
+    // openat failed, fall back to /proc/.../root path
+    path_ = proc_root_path_;
+}
 
-ino_t ProcStat::getinode_() {
+bool ProcStat::getinode_(ino_t &inode) {
   struct stat s;
-  return (!stat(procfs_.c_str(), &s)) ? s.st_ino : -1;
+  if (!stat(procfs_.c_str(), &s)) {
+    inode = s.st_ino;
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool ProcStat::refresh_root() {
+  // try to current root and mount namespace for process
+  char current_root[PATH_MAX], current_mount_ns[PATH_MAX];
+  if (readlink(root_symlink_.c_str(), current_root, PATH_MAX) < 0 ||
+      readlink(mount_ns_symlink_.c_str(), current_mount_ns, PATH_MAX) < 0)
+    // readlink failed, process might not exist anymore; keep old fd
+    return false;
+
+  // check if root fd is up to date
+  if (root_fd_ != -1 && current_root == root_ && current_mount_ns == mount_ns_)
+    return false;
+
+  root_ = current_root;
+  mount_ns_ = current_mount_ns;
+
+  // either root fd is invalid or process root and/or mount namespace changed;
+  // re-open root note: when /proc/.../root changes, the open file descriptor
+  // still refers to the old one
+  int original_root_fd = root_fd_;
+  root_fd_ = open(root_symlink_.c_str(), O_PATH);
+  if (root_fd_ == -1)
+    std::cerr << "Opening " << root_symlink_ << " failed: " << strerror(errno)
+              << std::endl;
+  if (original_root_fd > 0)
+    close(original_root_fd);
+  return original_root_fd != root_fd_;
 }
 
 bool ProcStat::is_stale() {
-  ino_t cur_inode = getinode_();
-  return (cur_inode > 0) && (cur_inode != inode_);
+  ino_t cur_inode;
+  return getinode_(cur_inode) && (cur_inode != inode_) && refresh_root();
 }
 
 ProcStat::ProcStat(int pid)
-    : procfs_(tfm::format("/proc/%d/exe", pid)), inode_(getinode_()) {}
+    : procfs_(tfm::format("/proc/%d/exe", pid)),
+      root_symlink_(tfm::format("/proc/%d/root", pid)),
+      mount_ns_symlink_(tfm::format("/proc/%d/ns/mnt", pid)) {
+  getinode_(inode_);
+  refresh_root();
+}
 
 void KSyms::_add_symbol(const char *symname, const char *modname, uint64_t addr, void *p) {
   KSyms *ks = static_cast<KSyms *>(p);
@@ -128,8 +194,9 @@
 
 int ProcSyms::_add_module(mod_info *mod, int enter_ns, void *payload) {
   ProcSyms *ps = static_cast<ProcSyms *>(payload);
-  std::string ns_relative_path = tfm::format("/proc/%d/root%s", ps->pid_, mod->name);
-  const char *modpath = enter_ns && ps->pid_ != -1 ? ns_relative_path.c_str() : mod->name;
+  std::shared_ptr<ModulePath> modpath =
+      std::make_shared<ModulePath>(mod->name, ps->procstat_.get_root_fd(),
+                                   ps->pid_, enter_ns && ps->pid_ != -1);
   auto it = std::find_if(
       ps->modules_.begin(), ps->modules_.end(),
       [=](const ProcSyms::Module &m) { return m.name_ == mod->name; });
@@ -141,14 +208,17 @@
     // It only gives the mmap offset. We need the real offset for symbol
     // lookup.
     if (module.type_ == ModuleType::SO) {
-      if (bcc_elf_get_text_scn_info(modpath, &module.elf_so_addr_,
+      if (bcc_elf_get_text_scn_info(modpath->path(), &module.elf_so_addr_,
                                     &module.elf_so_offset_) < 0) {
-        fprintf(stderr, "WARNING: Couldn't find .text section in %s\n", modpath);
-        fprintf(stderr, "WARNING: BCC can't handle sym look ups for %s", modpath);
+        fprintf(stderr, "WARNING: Couldn't find .text section in %s\n",
+                modpath->alt_path());
+        fprintf(stderr, "WARNING: BCC can't handle sym look ups for %s",
+                modpath->alt_path());
       }
     }
 
-    if (!bcc_is_perf_map(modpath) || module.type_ != ModuleType::UNKNOWN)
+    if (!bcc_is_perf_map(modpath->path()) ||
+        module.type_ != ModuleType::UNKNOWN)
       // Always add the module even if we can't read it, so that we could
       // report correct module name. Unless it's a perf map that we only
       // add readable ones.
@@ -219,14 +289,14 @@
   return false;
 }
 
-ProcSyms::Module::Module(const char *name, const char *path,
-    struct bcc_symbol_option *option)
+ProcSyms::Module::Module(const char *name, std::shared_ptr<ModulePath> path,
+                         struct bcc_symbol_option *option)
     : name_(name),
       path_(path),
       loaded_(false),
       symbol_option_(option),
       type_(ModuleType::UNKNOWN) {
-  int elf_type = bcc_elf_get_type(path_.c_str());
+  int elf_type = bcc_elf_get_type(path_->path());
   // The Module is an ELF file
   if (elf_type >= 0) {
     if (elf_type == ET_EXEC)
@@ -236,9 +306,9 @@
     return;
   }
   // Other symbol files
-  if (bcc_is_valid_perf_map(path_.c_str()) == 1)
+  if (bcc_is_valid_perf_map(path_->path()) == 1)
     type_ = ModuleType::PERF_MAP;
-  else if (bcc_elf_is_vdso(name_.c_str()) == 1)
+  else if (bcc_elf_is_vdso(path_->path()) == 1)
     type_ = ModuleType::VDSO;
 
   // Will be stored later
@@ -272,12 +342,13 @@
     return;
 
   if (type_ == ModuleType::PERF_MAP)
-    bcc_perf_map_foreach_sym(path_.c_str(), _add_symbol, this);
+    bcc_perf_map_foreach_sym(path_->path(), _add_symbol, this);
   if (type_ == ModuleType::EXEC || type_ == ModuleType::SO) {
     if (symbol_option_->lazy_symbolize)
-      bcc_elf_foreach_sym_lazy(path_.c_str(), _add_symbol_lazy, symbol_option_, this);
+      bcc_elf_foreach_sym_lazy(path_->path(), _add_symbol_lazy, symbol_option_,
+                               this);
     else
-      bcc_elf_foreach_sym(path_.c_str(), _add_symbol, symbol_option_, this);
+      bcc_elf_foreach_sym(path_->path(), _add_symbol, symbol_option_, this);
   }
   if (type_ == ModuleType::VDSO)
     bcc_elf_foreach_vdso_sym(_add_symbol, this);
@@ -289,11 +360,8 @@
   for (const auto &range : ranges_) {
     if (addr >= range.start && addr < range.end) {
       if (type_ == ModuleType::SO || type_ == ModuleType::VDSO) {
-        // Offset within the mmap
-        offset = addr - range.start + range.file_offset;
-
-        // Offset within the ELF for SO symbol lookup
-        offset += (elf_so_addr_ - elf_so_offset_);
+        offset = __so_calc_mod_offset(range.start, range.file_offset,
+                                      elf_so_addr_, elf_so_offset_, addr);
       } else {
         offset = addr;
       }
@@ -330,9 +398,13 @@
   };
 
   if (type_ == ModuleType::PERF_MAP)
-    bcc_perf_map_foreach_sym(path_.c_str(), cb, &payload);
-  if (type_ == ModuleType::EXEC || type_ == ModuleType::SO)
-    bcc_elf_foreach_sym(path_.c_str(), cb, symbol_option_, &payload);
+    bcc_perf_map_foreach_sym(path_->path(), cb, &payload);
+  if (type_ == ModuleType::EXEC || type_ == ModuleType::SO) {
+    bcc_elf_foreach_sym(path_->path(), cb, symbol_option_, &payload);
+    if (path_->path() != path_->alt_path())
+      // some features (e.g. some kinds of debug info) don't work with /proc/self/fd/... path
+      bcc_elf_foreach_sym(path_->alt_path(), cb, symbol_option_, &payload);
+  }
   if (type_ == ModuleType::VDSO)
     bcc_elf_foreach_vdso_sym(cb, &payload);
 
@@ -382,9 +454,9 @@
       // Resolve and cache the symbol name if necessary
       if (!it->is_name_resolved) {
         std::string sym_name(it->data.name_idx.str_len + 1, '\0');
-        if (bcc_elf_symbol_str(path_.c_str(), it->data.name_idx.section_idx,
-              it->data.name_idx.str_table_idx, &sym_name[0], sym_name.size(),
-              it->data.name_idx.debugfile))
+        if (bcc_elf_symbol_str(path_->path(), it->data.name_idx.section_idx,
+                               it->data.name_idx.str_table_idx, &sym_name[0],
+                               sym_name.size(), it->data.name_idx.debugfile))
           break;
 
         it->data.name = &*(symnames_.emplace(std::move(sym_name)).first);
@@ -619,9 +691,26 @@
   return -1;
 }
 
+uint64_t __so_calc_global_addr(uint64_t mod_start_addr,
+                               uint64_t mod_file_offset,
+                               uint64_t elf_sec_start_addr,
+                               uint64_t elf_sec_file_offset, uint64_t offset) {
+  return offset + (mod_start_addr - mod_file_offset) -
+         (elf_sec_start_addr - elf_sec_file_offset);
+}
+
+uint64_t __so_calc_mod_offset(uint64_t mod_start_addr, uint64_t mod_file_offset,
+                              uint64_t elf_sec_start_addr,
+                              uint64_t elf_sec_file_offset,
+                              uint64_t global_addr) {
+  return global_addr - (mod_start_addr - mod_file_offset) +
+         (elf_sec_start_addr - elf_sec_file_offset);
+}
+
 int bcc_resolve_global_addr(int pid, const char *module, const uint64_t address,
                             uint8_t inode_match_only, uint64_t *global) {
   struct stat s;
+  uint64_t elf_so_addr, elf_so_offset;
   if (stat(module, &s))
     return -1;
 
@@ -632,7 +721,11 @@
       mod.start == 0x0)
     return -1;
 
-  *global = mod.start - mod.file_offset + address;
+  if (bcc_elf_get_text_scn_info(module, &elf_so_addr, &elf_so_offset) < 0)
+    return -1;
+
+  *global = __so_calc_global_addr(mod.start, mod.file_offset, elf_so_addr,
+                                  elf_so_offset, address);
   return 0;
 }
 
diff --git a/src/cc/bcc_syms.h b/src/cc/bcc_syms.h
index 80627de..eb1e4ea 100644
--- a/src/cc/bcc_syms.h
+++ b/src/cc/bcc_syms.h
@@ -102,6 +102,30 @@
                         struct bcc_symbol_option* option,
                         struct bcc_symbol *sym);
 
+/* Calculate the global address for 'offset' in a shared object loaded into
+ * a process
+ *
+ * Need to know (start_addr, file_offset) pairs for the /proc/PID/maps module
+ * entry containing the offset and the elf section containing the module's
+ * .text
+ */
+uint64_t __so_calc_global_addr(uint64_t mod_start_addr,
+                               uint64_t mod_file_offset,
+                               uint64_t elf_sec_start_addr,
+                               uint64_t elf_sec_file_offset, uint64_t offset);
+
+/* Given a global address which falls within a shared object's mapping in a
+ * process, calculate the corresponding 'offset' in the .so
+ *
+ * Need to know (start_addr, file_offset) pairs for the /proc/PID/maps module
+ * entry containing the offset and the elf section containing the module's
+ * .text
+ */
+uint64_t __so_calc_mod_offset(uint64_t mod_start_addr, uint64_t mod_file_offset,
+                              uint64_t elf_sec_start_addr,
+                              uint64_t elf_sec_file_offset,
+                              uint64_t global_addr);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/cc/bcc_version.h.in b/src/cc/bcc_version.h.in
index 44c61b2..bc62db1 100644
--- a/src/cc/bcc_version.h.in
+++ b/src/cc/bcc_version.h.in
@@ -2,5 +2,12 @@
 #define LIBBCC_VERSION_H
 
 #define LIBBCC_VERSION "@REVISION@"
+#define LIBBCC_MAJOR_VERSION @REVISION_MAJOR@
+#define LIBBCC_MINOR_VERSION @REVISION_MINOR@
+#define LIBBCC_PATCH_VERSION @REVISION_PATCH@
+
+#define __LIBBCC_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c)))
+#define LIBBCC_VERSION_CODE __LIBBCC_VERSION(LIBBCC_MAJOR_VERSION, LIBBCC_MINOR_VERSION, LIBBCC_PATCH_VERSION)
+#define LIBBCC_VERSION_GEQ(a,b,c) LIBBCC_VERSION_CODE >= __LIBBCC_VERSION(a, b, c)
 
 #endif
diff --git a/src/cc/bcc_zip.c b/src/cc/bcc_zip.c
new file mode 100644
index 0000000..49bd517
--- /dev/null
+++ b/src/cc/bcc_zip.c
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bcc_zip.h"
+
+#include <fcntl.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+// Specification of ZIP file format can be found here:
+// https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
+// For a high level overview of the structure of a ZIP file see
+// sections 4.3.1 - 4.3.6.
+
+// Data structures appearing in ZIP files do not contain any
+// padding and they might be misaligned. To allow us to safely
+// operate on pointers to such structures and their members, without
+// worrying of platform specific alignment issues, we define
+// unaligned_uint16_t and unaligned_uint32_t types with no alignment
+// requirements.
+typedef struct {
+  uint8_t raw[2];
+} unaligned_uint16_t;
+
+static uint16_t unaligned_uint16_read(unaligned_uint16_t value) {
+  uint16_t return_value;
+  memcpy(&return_value, value.raw, sizeof(return_value));
+  return return_value;
+}
+
+typedef struct {
+  uint8_t raw[4];
+} unaligned_uint32_t;
+
+static uint32_t unaligned_uint32_read(unaligned_uint32_t value) {
+  uint32_t return_value;
+  memcpy(&return_value, value.raw, sizeof(return_value));
+  return return_value;
+}
+
+#define END_OF_CD_RECORD_MAGIC 0x06054b50
+
+// See section 4.3.16 of the spec.
+struct end_of_central_directory_record {
+  // Magic value equal to END_OF_CD_RECORD_MAGIC
+  unaligned_uint32_t magic;
+
+  // Number of the file containing this structure or 0xFFFF if ZIP64 archive.
+  // Zip archive might span multiple files (disks).
+  unaligned_uint16_t this_disk;
+
+  // Number of the file containing the beginning of the central directory or
+  // 0xFFFF if ZIP64 archive.
+  unaligned_uint16_t cd_disk;
+
+  // Number of central directory records on this disk or 0xFFFF if ZIP64
+  // archive.
+  unaligned_uint16_t cd_records;
+
+  // Number of central directory records on all disks or 0xFFFF if ZIP64
+  // archive.
+  unaligned_uint16_t cd_records_total;
+
+  // Size of the central directory recrod or 0xFFFFFFFF if ZIP64 archive.
+  unaligned_uint32_t cd_size;
+
+  // Offset of the central directory from the beginning of the archive or
+  // 0xFFFFFFFF if ZIP64 archive.
+  unaligned_uint32_t cd_offset;
+
+  // Length of comment data following end of central driectory record.
+  unaligned_uint16_t comment_length;
+
+  // Up to 64k of arbitrary bytes.
+  // uint8_t comment[comment_length]
+};
+
+#define CD_FILE_HEADER_MAGIC 0x02014b50
+#define FLAG_ENCRYPTED (1 << 0)
+#define FLAG_HAS_DATA_DESCRIPTOR (1 << 3)
+
+// See section 4.3.12 of the spec.
+struct central_directory_file_header {
+  // Magic value equal to CD_FILE_HEADER_MAGIC.
+  unaligned_uint32_t magic;
+  unaligned_uint16_t version;
+  // Minimum zip version needed to extract the file.
+  unaligned_uint16_t min_version;
+  unaligned_uint16_t flags;
+  unaligned_uint16_t compression;
+  unaligned_uint16_t last_modified_time;
+  unaligned_uint16_t last_modified_date;
+  unaligned_uint32_t crc;
+  unaligned_uint32_t compressed_size;
+  unaligned_uint32_t uncompressed_size;
+  unaligned_uint16_t file_name_length;
+  unaligned_uint16_t extra_field_length;
+  unaligned_uint16_t file_comment_length;
+  // Number of the disk where the file starts or 0xFFFF if ZIP64 archive.
+  unaligned_uint16_t disk;
+  unaligned_uint16_t internal_attributes;
+  unaligned_uint32_t external_attributes;
+  // Offset from the start of the disk containing the local file header to the
+  // start of the local file header.
+  unaligned_uint32_t offset;
+};
+
+#define LOCAL_FILE_HEADER_MAGIC 0x04034b50
+
+// See section 4.3.7 of the spec.
+struct local_file_header {
+  // Magic value equal to LOCAL_FILE_HEADER_MAGIC.
+  unaligned_uint32_t magic;
+  // Minimum zip version needed to extract the file.
+  unaligned_uint16_t min_version;
+  unaligned_uint16_t flags;
+  unaligned_uint16_t compression;
+  unaligned_uint16_t last_modified_time;
+  unaligned_uint16_t last_modified_date;
+  unaligned_uint32_t crc;
+  unaligned_uint32_t compressed_size;
+  unaligned_uint32_t uncompressed_size;
+  unaligned_uint16_t file_name_length;
+  unaligned_uint16_t extra_field_length;
+};
+
+struct bcc_zip_archive {
+  void* data;
+  uint32_t size;
+  uint32_t cd_offset;
+  uint32_t cd_records;
+};
+
+static void* check_access(struct bcc_zip_archive* archive, uint32_t offset,
+                          uint32_t size) {
+  if (offset + size > archive->size || offset > offset + size) {
+    return NULL;
+  }
+  return (char *) archive->data + offset;
+}
+
+// Returns 0 on success, -1 on error and -2 if the eocd indicates
+// the archive uses features which are not supported.
+static int try_parse_end_of_central_directory(struct bcc_zip_archive* archive,
+                                              uint32_t offset) {
+  struct end_of_central_directory_record* eocd = check_access(
+      archive, offset, sizeof(struct end_of_central_directory_record));
+  if (eocd == NULL ||
+      unaligned_uint32_read(eocd->magic) != END_OF_CD_RECORD_MAGIC) {
+    return -1;
+  }
+
+  uint16_t comment_length = unaligned_uint16_read(eocd->comment_length);
+  if (offset + sizeof(struct end_of_central_directory_record) +
+          comment_length !=
+      archive->size) {
+    return -1;
+  }
+
+  uint16_t cd_records = unaligned_uint16_read(eocd->cd_records);
+  if (unaligned_uint16_read(eocd->this_disk) != 0 ||
+      unaligned_uint16_read(eocd->cd_disk) != 0 ||
+      unaligned_uint16_read(eocd->cd_records_total) != cd_records) {
+    // This is a valid eocd, but we only support single-file non-ZIP64 archives.
+    return -2;
+  }
+
+  uint32_t cd_offset = unaligned_uint32_read(eocd->cd_offset);
+  uint32_t cd_size = unaligned_uint32_read(eocd->cd_size);
+  if (check_access(archive, cd_offset, cd_size) == NULL) {
+    return -1;
+  }
+
+  archive->cd_offset = cd_offset;
+  archive->cd_records = cd_records;
+  return 0;
+}
+
+static int find_central_directory(struct bcc_zip_archive* archive) {
+  if (archive->size <= sizeof(struct end_of_central_directory_record)) {
+    return -1;
+  }
+
+  int rc = -1;
+  // Because the end of central directory ends with a variable length array of
+  // up to 0xFFFF bytes we can't know exactly where it starts and need to
+  // search for it at the end of the file, scanning the (limit, offset] range.
+  int64_t offset =
+      (int64_t)archive->size - sizeof(struct end_of_central_directory_record);
+  int64_t limit = offset - (1 << 16);
+  for (; offset >= 0 && offset > limit && rc == -1; offset--) {
+    rc = try_parse_end_of_central_directory(archive, offset);
+  }
+
+  return rc;
+}
+
+struct bcc_zip_archive* bcc_zip_archive_open(const char* path) {
+  int fd = open(path, O_RDONLY);
+  if (fd < 0) {
+    return NULL;
+  }
+
+  off_t size = lseek(fd, 0, SEEK_END);
+  if (size == (off_t)-1 || size > UINT32_MAX) {
+    close(fd);
+    return NULL;
+  }
+
+  void* data = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
+  close(fd);
+
+  if (data == MAP_FAILED) {
+    return NULL;
+  }
+
+  struct bcc_zip_archive* archive = malloc(sizeof(struct bcc_zip_archive));
+  if (archive == NULL) {
+    munmap(data, size);
+    return NULL;
+  };
+
+  archive->data = data;
+  archive->size = size;
+  if (find_central_directory(archive)) {
+    munmap(data, size);
+    free(archive);
+    archive = NULL;
+  }
+
+  return archive;
+}
+
+void bcc_zip_archive_close(struct bcc_zip_archive* archive) {
+  munmap(archive->data, archive->size);
+  free(archive);
+}
+
+static struct local_file_header* local_file_header_at_offset(
+    struct bcc_zip_archive* archive, uint32_t offset) {
+  struct local_file_header* lfh =
+      check_access(archive, offset, sizeof(struct local_file_header));
+  if (lfh == NULL ||
+      unaligned_uint32_read(lfh->magic) != LOCAL_FILE_HEADER_MAGIC) {
+    return NULL;
+  }
+  return lfh;
+}
+
+static int get_entry_at_offset(struct bcc_zip_archive* archive, uint32_t offset,
+                               struct bcc_zip_entry* out) {
+  struct local_file_header* lfh = local_file_header_at_offset(archive, offset);
+  offset += sizeof(struct local_file_header);
+  if (lfh == NULL) {
+    return -1;
+  };
+
+  uint16_t flags = unaligned_uint16_read(lfh->flags);
+  if ((flags & FLAG_ENCRYPTED) || (flags & FLAG_HAS_DATA_DESCRIPTOR)) {
+    return -1;
+  }
+
+  uint16_t name_length = unaligned_uint16_read(lfh->file_name_length);
+  const char* name = check_access(archive, offset, name_length);
+  offset += name_length;
+  if (name == NULL) {
+    return -1;
+  }
+
+  uint16_t extra_field_length = unaligned_uint16_read(lfh->extra_field_length);
+  if (check_access(archive, offset, extra_field_length) == NULL) {
+    return -1;
+  }
+  offset += extra_field_length;
+
+  uint32_t compressed_size = unaligned_uint32_read(lfh->compressed_size);
+  void* data = check_access(archive, offset, compressed_size);
+  if (data == NULL) {
+    return -1;
+  }
+
+  out->compression = unaligned_uint16_read(lfh->compression);
+  out->name_length = name_length;
+  out->name = name;
+  out->data = data;
+  out->data_length = compressed_size;
+  out->data_offset = offset;
+
+  return 0;
+}
+
+static struct central_directory_file_header* cd_file_header_at_offset(
+    struct bcc_zip_archive* archive, uint32_t offset) {
+  struct central_directory_file_header* cdfh = check_access(
+      archive, offset, sizeof(struct central_directory_file_header));
+  if (cdfh == NULL ||
+      unaligned_uint32_read(cdfh->magic) != CD_FILE_HEADER_MAGIC) {
+    return NULL;
+  }
+  return cdfh;
+}
+
+int bcc_zip_archive_find_entry(struct bcc_zip_archive* archive,
+                               const char* file_name,
+                               struct bcc_zip_entry* out) {
+  size_t file_name_length = strlen(file_name);
+
+  uint32_t offset = archive->cd_offset;
+  for (uint32_t i = 0; i < archive->cd_records; ++i) {
+    struct central_directory_file_header* cdfh =
+        cd_file_header_at_offset(archive, offset);
+    offset += sizeof(struct central_directory_file_header);
+    if (cdfh == NULL) {
+      return -1;
+    }
+
+    uint16_t cdfh_name_length = unaligned_uint16_read(cdfh->file_name_length);
+    const char* cdfh_name = check_access(archive, offset, cdfh_name_length);
+    if (cdfh_name == NULL) {
+      return -1;
+    }
+
+    uint16_t cdfh_flags = unaligned_uint16_read(cdfh->flags);
+    if ((cdfh_flags & FLAG_ENCRYPTED) == 0 &&
+        (cdfh_flags & FLAG_HAS_DATA_DESCRIPTOR) == 0 &&
+        file_name_length == cdfh_name_length &&
+        memcmp(file_name, (char*) archive->data + offset, file_name_length) == 0) {
+      return get_entry_at_offset(archive, unaligned_uint32_read(cdfh->offset),
+                                 out);
+    }
+
+    offset += cdfh_name_length;
+    offset += unaligned_uint16_read(cdfh->extra_field_length);
+    offset += unaligned_uint16_read(cdfh->file_comment_length);
+  }
+
+  return -1;
+}
+
+int bcc_zip_archive_find_entry_at_offset(struct bcc_zip_archive* archive,
+                                         uint32_t target,
+                                         struct bcc_zip_entry* out) {
+  uint32_t offset = archive->cd_offset;
+  for (uint32_t i = 0; i < archive->cd_records; ++i) {
+    struct central_directory_file_header* cdfh =
+        cd_file_header_at_offset(archive, offset);
+    offset += sizeof(struct central_directory_file_header);
+    if (cdfh == NULL) {
+      return -1;
+    }
+
+    uint16_t cdfh_flags = unaligned_uint16_read(cdfh->flags);
+    if ((cdfh_flags & FLAG_ENCRYPTED) == 0 &&
+        (cdfh_flags & FLAG_HAS_DATA_DESCRIPTOR) == 0) {
+      if (get_entry_at_offset(archive, unaligned_uint32_read(cdfh->offset),
+                              out)) {
+        return -1;
+      }
+
+      if ((char*) out->data <= (char*) archive->data + target &&
+          (char*) archive->data + target < (char*) out->data + out->data_length) {
+        return 0;
+      }
+    }
+
+    offset += unaligned_uint16_read(cdfh->file_name_length);
+    offset += unaligned_uint16_read(cdfh->extra_field_length);
+    offset += unaligned_uint16_read(cdfh->file_comment_length);
+  }
+
+  return -1;
+}
+
+struct bcc_zip_archive* bcc_zip_archive_open_and_find(
+    const char* path, struct bcc_zip_entry* out) {
+  struct bcc_zip_archive* archive = NULL;
+  const char* separator = strstr(path, "!/");
+  if (separator == NULL || separator - path >= PATH_MAX) {
+    return NULL;
+  }
+
+  char archive_path[PATH_MAX];
+  strncpy(archive_path, path, separator - path);
+  archive_path[separator - path] = 0;
+  archive = bcc_zip_archive_open(archive_path);
+  if (archive == NULL) {
+    return NULL;
+  }
+
+  if (bcc_zip_archive_find_entry(archive, separator + 2, out)) {
+    bcc_zip_archive_close(archive);
+    return NULL;
+  }
+
+  return archive;
+}
diff --git a/src/cc/bcc_zip.h b/src/cc/bcc_zip.h
new file mode 100644
index 0000000..1368625
--- /dev/null
+++ b/src/cc/bcc_zip.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIBBCC_ZIP_H
+#define LIBBCC_ZIP_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Represents an opened zip archive.
+// Only basic ZIP files are supported, in particular the following are not
+// supported:
+// - encryption
+// - streaming
+// - multi-part ZIP files
+// - ZIP64
+struct bcc_zip_archive;
+
+// Carries information on name, compression method and data corresponding to
+// a file in a zip archive.
+struct bcc_zip_entry {
+  // Compression method as defined in pkzip spec. 0 means data is uncompressed.
+  uint16_t compression;
+
+  // Non-null terminated name of the file.
+  const char* name;
+  // Length of the file name.
+  uint16_t name_length;
+
+  // Pointer to the file data.
+  const void* data;
+  // Length of the file data.
+  uint32_t data_length;
+  // Offset of the file data within the archive.
+  uint32_t data_offset;
+};
+
+// Opens a zip archive. Returns NULL in case of an error.
+struct bcc_zip_archive* bcc_zip_archive_open(const char* path);
+
+// Closes a zip archive and releases resources.
+void bcc_zip_archive_close(struct bcc_zip_archive* archive);
+
+// Looks up data corresponding to a file in given zip archive.
+int bcc_zip_archive_find_entry(struct bcc_zip_archive* archive,
+                               const char* name, struct bcc_zip_entry* out);
+
+int bcc_zip_archive_find_entry_at_offset(struct bcc_zip_archive* archive,
+                                         uint32_t offset,
+                                         struct bcc_zip_entry* out);
+
+// Opens a zip archives and looks up entry within the archive.
+// Provided path is interpreted as archive path followed by "!/"
+// characters and name of the zip entry. This convention is used
+// by Android tools.
+struct bcc_zip_archive* bcc_zip_archive_open_and_find(
+    const char* path, struct bcc_zip_entry* out);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/cc/bpf_module.cc b/src/cc/bpf_module.cc
index b029962..91ab9af 100644
--- a/src/cc/bpf_module.cc
+++ b/src/cc/bpf_module.cc
@@ -17,16 +17,26 @@
 
 #include <fcntl.h>
 #include <linux/bpf.h>
+#if LLVM_VERSION_MAJOR <= 16
 #include <llvm-c/Transforms/IPO.h>
+#endif
 #include <llvm/ExecutionEngine/MCJIT.h>
 #include <llvm/ExecutionEngine/SectionMemoryManager.h>
+#if LLVM_VERSION_MAJOR >= 16
+#include <llvm/IRPrinter/IRPrintingPasses.h>
+#else
 #include <llvm/IR/IRPrintingPasses.h>
+#endif
 #include <llvm/IR/LLVMContext.h>
-#include <llvm/IR/LegacyPassManager.h>
 #include <llvm/IR/Module.h>
 
-#if LLVM_MAJOR_VERSION >= 15
+#if LLVM_VERSION_MAJOR >= 15
 #include <llvm/Pass.h>
+#include <llvm/IR/PassManager.h>
+#include <llvm/Passes/PassBuilder.h>
+#include <llvm/Transforms/IPO/AlwaysInliner.h>
+#else
+#include <llvm/IR/LegacyPassManager.h>
 #endif
 
 #include <llvm/IR/Verifier.h>
@@ -35,7 +45,9 @@
 #include <llvm/Object/SymbolSize.h>
 #include <llvm/Support/TargetSelect.h>
 #include <llvm/Transforms/IPO.h>
+#if LLVM_VERSION_MAJOR <= 16
 #include <llvm/Transforms/IPO/PassManagerBuilder.h>
+#endif
 #include <net/if.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -110,10 +122,17 @@
       if (!section)
         continue;
 
+#if LLVM_VERSION_MAJOR >= 10
       auto sec_name = section.get()->getName();
       if (!sec_name)
         continue;
+#else
+      llvm::StringRef sec_name_obj;
+      if (!section.get()->getName(sec_name_obj))
+        continue;
 
+      auto sec_name = &sec_name_obj;
+#endif
       info->section_ = sec_name->str();
       info->size_ = ss.second;
     }
@@ -140,7 +159,7 @@
   LLVMInitializeBPFTargetMC();
   LLVMInitializeBPFTargetInfo();
   LLVMInitializeBPFAsmPrinter();
-#if LLVM_MAJOR_VERSION >= 6
+#if LLVM_VERSION_MAJOR >= 6
   LLVMInitializeBPFAsmParser();
   if (flags & DEBUG_SOURCE)
     LLVMInitializeBPFDisassembler();
@@ -175,6 +194,9 @@
         return;
       delete[] info.start_;
     });
+    for (auto &section : sections_) {
+      delete[] std::get<0>(section.second);
+    }
   }
 
   engine_.reset();
@@ -232,9 +254,30 @@
 }
 
 void BPFModule::dump_ir(Module &mod) {
+#if LLVM_VERSION_MAJOR >= 15
+  // Create the analysis managers
+  LoopAnalysisManager LAM;
+  FunctionAnalysisManager FAM;
+  CGSCCAnalysisManager CGAM;
+  ModuleAnalysisManager MAM;
+
+  // Create the pass manager
+  PassBuilder PB;
+  PB.registerModuleAnalyses(MAM);
+  PB.registerCGSCCAnalyses(CGAM);
+  PB.registerFunctionAnalyses(FAM);
+  PB.registerLoopAnalyses(LAM);
+  PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+  auto MPM = PB.buildPerModuleDefaultPipeline(OptimizationLevel::O2);
+
+  // Add passes and run
+  MPM.addPass(PrintModulePass(errs()));
+  MPM.run(mod, MAM);
+#else
   legacy::PassManager PM;
   PM.add(createPrintModulePass(errs()));
   PM.run(mod);
+#endif
 }
 
 int BPFModule::run_pass_manager(Module &mod) {
@@ -244,6 +287,28 @@
     return -1;
   }
 
+#if LLVM_VERSION_MAJOR >= 15
+  // Create the analysis managers
+  LoopAnalysisManager LAM;
+  FunctionAnalysisManager FAM;
+  CGSCCAnalysisManager CGAM;
+  ModuleAnalysisManager MAM;
+
+  // Create the pass manager
+  PassBuilder PB;
+  PB.registerModuleAnalyses(MAM);
+  PB.registerCGSCCAnalyses(CGAM);
+  PB.registerFunctionAnalyses(FAM);
+  PB.registerLoopAnalyses(LAM);
+  PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+  auto MPM = PB.buildPerModuleDefaultPipeline(OptimizationLevel::O3);
+
+  // Add passes and run
+  MPM.addPass(AlwaysInlinerPass());
+  if (flags_ & DEBUG_LLVM_IR)
+    MPM.addPass(PrintModulePass(outs()));
+  MPM.run(mod, MAM);
+#else
   legacy::PassManager PM;
   PassManagerBuilder PMB;
   PMB.OptLevel = 3;
@@ -260,6 +325,8 @@
   if (flags_ & DEBUG_LLVM_IR)
     PM.add(createPrintModulePass(outs()));
   PM.run(mod);
+#endif
+
   return 0;
 }
 
@@ -355,7 +422,7 @@
     }
 
     if (pinned_id <= 0) {
-      struct bpf_create_map_attr attr = {};
+      struct bcc_create_map_attr attr = {};
       attr.map_type = (enum bpf_map_type)map_type;
       attr.name = map_name;
       attr.key_size = key_size;
@@ -485,7 +552,7 @@
       *sections_p;
 
   mod->setTargetTriple("bpf-pc-linux");
-#if LLVM_MAJOR_VERSION >= 11
+#if LLVM_VERSION_MAJOR >= 11
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
   mod->setDataLayout("e-m:e-p:64:64-i64:64-i128:128-n32:64-S128");
 #else
@@ -506,7 +573,7 @@
   builder.setMCJITMemoryManager(
       ebpf::make_unique<MyMemoryManager>(sections_p, &*prog_func_info_));
   builder.setMArch("bpf");
-#if LLVM_MAJOR_VERSION <= 11
+#if LLVM_VERSION_MAJOR <= 11
   builder.setUseOrcMCJITReplacement(false);
 #endif
   engine_ = unique_ptr<ExecutionEngine>(builder.create());
@@ -929,24 +996,23 @@
                 const struct bpf_insn *insns, int prog_len,
                 const char *license, unsigned kern_version,
                 int log_level, char *log_buf, unsigned log_buf_size,
-                const char *dev_name, unsigned flags) {
-  struct bpf_load_program_attr attr = {};
+                const char *dev_name, unsigned flags, int expected_attach_type) {
+  struct bpf_prog_load_opts opts = {};
   unsigned func_info_cnt, line_info_cnt, finfo_rec_size, linfo_rec_size;
   void *func_info = NULL, *line_info = NULL;
   int ret;
 
-  attr.prog_type = (enum bpf_prog_type)prog_type;
-  attr.name = name;
-  attr.insns = insns;
-  attr.license = license;
-  if (attr.prog_type != BPF_PROG_TYPE_TRACING &&
-      attr.prog_type != BPF_PROG_TYPE_EXT) {
-    attr.kern_version = kern_version;
+  if (expected_attach_type != -1) {
+    opts.expected_attach_type = (enum bpf_attach_type)expected_attach_type;
   }
-  attr.prog_flags = flags;
-  attr.log_level = log_level;
+  if (prog_type != BPF_PROG_TYPE_TRACING &&
+      prog_type != BPF_PROG_TYPE_EXT) {
+    opts.kern_version = kern_version;
+  }
+  opts.prog_flags = flags;
+  opts.log_level = log_level;
   if (dev_name)
-    attr.prog_ifindex = if_nametoindex(dev_name);
+    opts.prog_ifindex = if_nametoindex(dev_name);
 
   if (btf_) {
     int btf_fd = btf_->get_fd();
@@ -957,17 +1023,17 @@
                              &finfo_rec_size, &line_info,
                              &line_info_cnt, &linfo_rec_size);
     if (!ret) {
-      attr.prog_btf_fd = btf_fd;
-      attr.func_info = func_info;
-      attr.func_info_cnt = func_info_cnt;
-      attr.func_info_rec_size = finfo_rec_size;
-      attr.line_info = line_info;
-      attr.line_info_cnt = line_info_cnt;
-      attr.line_info_rec_size = linfo_rec_size;
+      opts.prog_btf_fd = btf_fd;
+      opts.func_info = func_info;
+      opts.func_info_cnt = func_info_cnt;
+      opts.func_info_rec_size = finfo_rec_size;
+      opts.line_info = line_info;
+      opts.line_info_cnt = line_info_cnt;
+      opts.line_info_rec_size = linfo_rec_size;
     }
   }
 
-  ret = bcc_prog_load_xattr(&attr, prog_len, log_buf, log_buf_size, allow_rlimit_);
+  ret = bcc_prog_load_xattr((enum bpf_prog_type)prog_type, name, license, insns, &opts, prog_len, log_buf, log_buf_size, allow_rlimit_);
   if (btf_) {
     free(func_info);
     free(line_info);
diff --git a/src/cc/bpf_module.h b/src/cc/bpf_module.h
index fb368af..56786e9 100644
--- a/src/cc/bpf_module.h
+++ b/src/cc/bpf_module.h
@@ -22,6 +22,8 @@
 #include <string>
 #include <vector>
 
+#include <llvm/Config/llvm-config.h>
+
 #include "bcc_exception.h"
 #include "table_storage.h"
 
@@ -144,7 +146,7 @@
                     const char *license, unsigned kern_version,
                     int log_level, char *log_buf, unsigned log_buf_size,
                     const char *dev_name = nullptr,
-                    unsigned flags = 0);
+                    unsigned flags = 0, int attach_type = -1);
   int bcc_func_attach(int prog_fd, int attachable_fd,
                       int attach_type, unsigned int flags);
   int bcc_func_detach(int prog_fd, int attachable_fd, int attach_type);
diff --git a/src/cc/bpf_module_rw_engine.cc b/src/cc/bpf_module_rw_engine.cc
index f164988..bbdc26e 100644
--- a/src/cc/bpf_module_rw_engine.cc
+++ b/src/cc/bpf_module_rw_engine.cc
@@ -49,7 +49,12 @@
 
 static LoadInst *createLoad(IRBuilder<> &B, Value *addr, bool isVolatile = false)
 {
-#if LLVM_MAJOR_VERSION >= 14
+#if LLVM_VERSION_MAJOR >= 15
+  if (isa<AllocaInst>(addr))
+    return B.CreateLoad(dyn_cast<AllocaInst>(addr)->getAllocatedType(), addr, isVolatile);
+  else
+    return B.CreateLoad(addr->getType(), addr, isVolatile);
+#elif LLVM_VERSION_MAJOR >= 13
   return B.CreateLoad(addr->getType()->getPointerElementType(), addr, isVolatile);
 #else
   return B.CreateLoad(addr, isVolatile);
@@ -58,7 +63,12 @@
 
 static Value *createInBoundsGEP(IRBuilder<> &B, Value *ptr, ArrayRef<Value *>idxlist)
 {
-#if LLVM_MAJOR_VERSION >= 14
+#if LLVM_VERSION_MAJOR >= 15
+  if (isa<GlobalValue>(ptr))
+    return B.CreateInBoundsGEP(dyn_cast<GlobalValue>(ptr)->getValueType(), ptr, idxlist);
+  else
+    return B.CreateInBoundsGEP(ptr->getType(), ptr, idxlist);
+#elif LLVM_VERSION_MAJOR >= 13
   return B.CreateInBoundsGEP(ptr->getType()->getScalarType()->getPointerElementType(),
                              ptr, idxlist);
 #else
@@ -116,7 +126,7 @@
   B.SetInsertPoint(label_false);
   // s = &s[nread];
   B.CreateStore(
-      createInBoundsGEP(B, createLoad(B, sptr), createLoad(B, nread, true)), sptr);
+      createInBoundsGEP(B, createLoad(B, sptr), {createLoad(B, nread, true)}), sptr);
 
   args->resize(2);
   fmt->clear();
@@ -375,7 +385,7 @@
   string err;
   EngineBuilder builder(move(m));
   builder.setErrorStr(&err);
-#if LLVM_MAJOR_VERSION <= 11
+#if LLVM_VERSION_MAJOR <= 11
   builder.setUseOrcMCJITReplacement(false);
 #endif
   auto engine = unique_ptr<ExecutionEngine>(builder.create());
@@ -400,10 +410,12 @@
     table_names_[table.name] = id++;
     GlobalValue *gvar = mod_->getNamedValue(table.name);
     if (!gvar) continue;
-    if (PointerType *pt = dyn_cast<PointerType>(gvar->getType())) {
-#if LLVM_MAJOR_VERSION >= 15
-      StructType *st = dyn_cast<StructType>(pt->getPointerElementType());
+#if LLVM_VERSION_MAJOR >= 14
+    {
+      Type *t = gvar->getValueType();
+      StructType *st = dyn_cast<StructType>(t);
 #else
+    if (PointerType *pt = dyn_cast<PointerType>(gvar->getType())) {
       StructType *st = dyn_cast<StructType>(pt->getElementType());
 #endif
       if (st) {
diff --git a/src/cc/common.cc b/src/cc/common.cc
index a006b6e..c9c00ff 100644
--- a/src/cc/common.cc
+++ b/src/cc/common.cc
@@ -17,10 +17,48 @@
 #include <sstream>
 
 #include "common.h"
+#include "bcc_libbpf_inc.h"
+#include "vendor/optional.hpp"
 #include "vendor/tinyformat.hpp"
 
 namespace ebpf {
 
+using std::experimental::optional;
+
+// Get enum value from BTF, since the enum may be anonymous, like:
+//   [608] ENUM '(anon)' size=4 vlen=1
+//   	'TASK_COMM_LEN' val=16
+// we have to traverse the whole BTF.
+// Though there is a BTF_KIND_ENUM64, but it is unlikely that it will
+// be used as array size, we don't handle it here.
+static optional<int32_t> get_enum_val_from_btf(const char *name) {
+  optional<int32_t> val;
+
+  auto btf = btf__load_vmlinux_btf();
+  if (libbpf_get_error(btf))
+    return {};
+
+  for (size_t i = 1; i < btf__type_cnt(btf); i++) {
+    auto t = btf__type_by_id(btf, i);
+    if (btf_kind(t) != BTF_KIND_ENUM)
+      continue;
+
+    auto m = btf_enum(t);
+    for (int j = 0, n = btf_vlen(t); j < n; j++, m++) {
+      if (!strcmp(btf__name_by_offset(btf, m->name_off), name)) {
+        val = m->val;
+        break;
+      }
+    }
+
+    if (val)
+      break;
+  }
+
+  btf__free(btf);
+  return val;
+}
+
 std::vector<int> read_cpu_range(std::string path) {
   std::ifstream cpus_range_stream { path };
   std::vector<int> cpus;
@@ -126,9 +164,21 @@
     return field_kind_t::data_loc;
   if (field_name.find("common_") == 0)
     return field_kind_t::common;
-  // do not change type definition for array
-  if (field_name.find("[") != std::string::npos)
+
+  // We may have `char comm[TASK_COMM_LEN];` on kernel v5.18+
+  // Let's replace `TASK_COMM_LEN` with value extracted from BTF
+  if (field_name.find("[") != std::string::npos) {
+    auto pos1 = field_name.find("[");
+    auto pos2 = field_name.find("]");
+    auto dim = field_name.substr(pos1 + 1, pos2 - pos1 - 1);
+    if (!dim.empty() && !isdigit(dim[0])) {
+      auto v = get_enum_val_from_btf(dim.c_str());
+      if (v)
+        dim = std::to_string(*v);
+      field_name.replace(pos1 + 1, pos2 - pos1 - 1, dim, 0);
+    }
     return field_kind_t::regular;
+  }
 
   // adjust the field_type based on the size of field
   // otherwise, incorrect value may be retrieved for big endian
@@ -161,6 +211,19 @@
   return field_kind_t::regular;
 }
 
+#define DEBUGFS_TRACEFS "/sys/kernel/debug/tracing"
+#define TRACEFS "/sys/kernel/tracing"
+
+std::string tracefs_path() {
+  static bool use_debugfs = access(DEBUGFS_TRACEFS, F_OK) == 0;
+  return use_debugfs ? DEBUGFS_TRACEFS : TRACEFS;
+}
+
+std::string tracepoint_format_file(std::string const& category,
+                                   std::string const& event) {
+  return tracefs_path() + "/events/" + category + "/" + event + "/format";
+}
+
 std::string parse_tracepoint(std::istream &input, std::string const& category,
                              std::string const& event) {
   std::string tp_struct = "struct tracepoint__" + category + "__" + event + " {\n";
diff --git a/src/cc/common.h b/src/cc/common.h
index bfba4c9..63b6a4d 100644
--- a/src/cc/common.h
+++ b/src/cc/common.h
@@ -39,6 +39,11 @@
 
 std::string get_pid_exe(pid_t pid);
 
+std::string tracefs_path();
+
+std::string tracepoint_format_file(std::string const& category,
+                                   std::string const& event);
+
 std::string parse_tracepoint(std::istream &input, std::string const& category,
                              std::string const& event);
 }  // namespace ebpf
diff --git a/src/cc/compat/linux/virtual_bpf.h b/src/cc/compat/linux/virtual_bpf.h
index f54dd25..a182123 100644
--- a/src/cc/compat/linux/virtual_bpf.h
+++ b/src/cc/compat/linux/virtual_bpf.h
@@ -88,10 +88,35 @@
 	__u32	attach_type;		/* program attach type (enum bpf_attach_type) */
 };
 
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY,		/* process only a single object. */
+	BPF_CGROUP_ITER_DESCENDANTS_PRE,	/* walk descendants in pre-order. */
+	BPF_CGROUP_ITER_DESCENDANTS_POST,	/* walk descendants in post-order. */
+	BPF_CGROUP_ITER_ANCESTORS_UP,		/* walk ancestors upward. */
+};
+
 union bpf_iter_link_info {
 	struct {
 		__u32	map_fd;
 	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+
+		/* At most one of cgroup_fd and cgroup_id can be non-zero. If
+		 * both are zero, the walk starts from the default cgroup v2
+		 * root. For walking v1 hierarchy, one should always explicitly
+		 * specify cgroup_fd.
+		 */
+		__u32	cgroup_fd;
+		__u64	cgroup_id;
+	} cgroup;
+	/* Parameters of task iterators. */
+	struct {
+		__u32	tid;
+		__u32	pid;
+		__u32	pid_fd;
+	} task;
 };
 
 /* BPF syscall commands, see bpf(2) man-page for more details. */
@@ -898,7 +923,14 @@
 	BPF_MAP_TYPE_CPUMAP,
 	BPF_MAP_TYPE_XSKMAP,
 	BPF_MAP_TYPE_SOCKHASH,
-	BPF_MAP_TYPE_CGROUP_STORAGE,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
+	/* BPF_MAP_TYPE_CGROUP_STORAGE is available to bpf programs attaching
+	 * to a cgroup. The newer BPF_MAP_TYPE_CGRP_STORAGE is available to
+	 * both cgroup-attached and other progs and supports all functionality
+	 * provided by BPF_MAP_TYPE_CGROUP_STORAGE. So mark
+	 * BPF_MAP_TYPE_CGROUP_STORAGE deprecated.
+	 */
+	BPF_MAP_TYPE_CGROUP_STORAGE = BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
 	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
 	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,
 	BPF_MAP_TYPE_QUEUE,
@@ -910,6 +942,8 @@
 	BPF_MAP_TYPE_INODE_STORAGE,
 	BPF_MAP_TYPE_TASK_STORAGE,
 	BPF_MAP_TYPE_BLOOM_FILTER,
+	BPF_MAP_TYPE_USER_RINGBUF,
+	BPF_MAP_TYPE_CGRP_STORAGE,
 };
 
 /* Note that tracing related programs such as
@@ -999,6 +1033,8 @@
 	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE,
 	BPF_PERF_EVENT,
 	BPF_TRACE_KPROBE_MULTI,
+	BPF_LSM_CGROUP,
+	BPF_STRUCT_OPS,
 	__MAX_BPF_ATTACH_TYPE
 };
 
@@ -1014,6 +1050,7 @@
 	BPF_LINK_TYPE_XDP = 6,
 	BPF_LINK_TYPE_PERF_EVENT = 7,
 	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
 
 	MAX_BPF_LINK_TYPE,
 };
@@ -1073,7 +1110,7 @@
  */
 #define BPF_F_STRICT_ALIGNMENT	(1U << 0)
 
-/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROF_LOAD command, the
+/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROG_LOAD command, the
  * verifier will allow any alignment whatsoever.  On platforms
  * with strict alignment requirements for loads ands stores (such
  * as sparc and mips) the verifier validates that all loads and
@@ -1121,6 +1158,11 @@
  */
 #define BPF_F_XDP_HAS_FRAGS	(1U << 5)
 
+/* If BPF_F_XDP_DEV_BOUND_ONLY is used in BPF_PROG_LOAD command, the loaded
+ * program becomes device-bound but can access XDP metadata.
+ */
+#define BPF_F_XDP_DEV_BOUND_ONLY	(1U << 6)
+
 /* link_create.kprobe_multi.flags used in LINK_CREATE command for
  * BPF_TRACE_KPROBE_MULTI attach type to create return probe.
  */
@@ -1226,13 +1268,16 @@
 
 /* Create a map that is suitable to be an inner map with dynamic max entries */
 	BPF_F_INNER_MAP		= (1U << 12),
+
+/* Create a map that will be registered/unregesitered by the backed bpf_link */
+	BPF_F_LINK		= (1U << 13),
 };
 
 /* Flags for BPF_PROG_QUERY. */
 
 /* Query effective (directly attached + inherited from ancestor cgroups)
  * programs that will be executed for events within a cgroup.
- * attach_flags with this flag are returned only for directly attached programs.
+ * attach_flags with this flag are always returned 0.
  */
 #define BPF_F_QUERY_EFFECTIVE	(1U << 0)
 
@@ -1363,6 +1408,11 @@
 		__aligned_u64	fd_array;	/* array of FDs */
 		__aligned_u64	core_relos;
 		__u32		core_relo_rec_size; /* sizeof(struct bpf_core_relo) */
+		/* output: actual total log contents size (including termintaing zero).
+		 * It could be both larger than original log_size (if log was
+		 * truncated), or smaller (if log buffer wasn't filled completely).
+		 */
+		__u32		log_true_size;
 	};
 
 	struct { /* anonymous struct used by BPF_OBJ_* commands */
@@ -1431,6 +1481,10 @@
 		__u32		attach_flags;
 		__aligned_u64	prog_ids;
 		__u32		prog_cnt;
+		/* output: per-program attach_flags.
+		 * not allowed to be set during effective query.
+		 */
+		__aligned_u64	prog_attach_flags;
 	} query;
 
 	struct { /* anonymous struct used by BPF_RAW_TRACEPOINT_OPEN command */
@@ -1444,6 +1498,11 @@
 		__u32		btf_size;
 		__u32		btf_log_size;
 		__u32		btf_log_level;
+		/* output: actual total log contents size (including termintaing zero).
+		 * It could be both larger than original log_size (if log was
+		 * truncated), or smaller (if log buffer wasn't filled completely).
+		 */
+		__u32		btf_log_true_size;
 	};
 
 	struct {
@@ -1463,7 +1522,10 @@
 	} task_fd_query;
 
 	struct { /* struct used by BPF_LINK_CREATE command */
-		__u32		prog_fd;	/* eBPF program to attach */
+		union {
+			__u32		prog_fd;	/* eBPF program to attach */
+			__u32		map_fd;		/* struct_ops to attach */
+		};
 		union {
 			__u32		target_fd;	/* object to attach to */
 			__u32		target_ifindex; /* target ifindex */
@@ -1490,17 +1552,37 @@
 				__aligned_u64	addrs;
 				__aligned_u64	cookies;
 			} kprobe_multi;
+			struct {
+				/* this is overlaid with the target_btf_id above. */
+				__u32		target_btf_id;
+				/* black box user-provided value passed through
+				 * to BPF program at the execution time and
+				 * accessible through bpf_get_attach_cookie() BPF helper
+				 */
+				__u64		cookie;
+			} tracing;
 		};
 	} link_create;
 
 	struct { /* struct used by BPF_LINK_UPDATE command */
 		__u32		link_fd;	/* link fd */
-		/* new program fd to update link with */
-		__u32		new_prog_fd;
+		union {
+			/* new program fd to update link with */
+			__u32		new_prog_fd;
+			/* new struct_ops map fd to update link with */
+			__u32           new_map_fd;
+		};
 		__u32		flags;		/* extra flags */
-		/* expected link's program fd; is specified only if
-		 * BPF_F_REPLACE flag is set in flags */
-		__u32		old_prog_fd;
+		union {
+			/* expected link's program fd; is specified only if
+			 * BPF_F_REPLACE flag is set in flags.
+			 */
+			__u32		old_prog_fd;
+			/* expected link's map fd; is specified only
+			 * if BPF_F_REPLACE flag is set.
+			 */
+			__u32           old_map_fd;
+		};
 	} link_update;
 
 	struct {
@@ -1594,17 +1676,17 @@
  * 	Description
  * 		This helper is a "printk()-like" facility for debugging. It
  * 		prints a message defined by format *fmt* (of size *fmt_size*)
- * 		to file *\/sys/kernel/debug/tracing/trace* from DebugFS, if
+ * 		to file *\/sys/kernel/tracing/trace* from TraceFS, if
  * 		available. It can take up to three additional **u64**
  * 		arguments (as an eBPF helpers, the total number of arguments is
  * 		limited to five).
  *
  * 		Each time the helper is called, it appends a line to the trace.
- * 		Lines are discarded while *\/sys/kernel/debug/tracing/trace* is
- * 		open, use *\/sys/kernel/debug/tracing/trace_pipe* to avoid this.
+ * 		Lines are discarded while *\/sys/kernel/tracing/trace* is
+ * 		open, use *\/sys/kernel/tracing/trace_pipe* to avoid this.
  * 		The format of the trace is customizable, and the exact output
  * 		one will get depends on the options set in
- * 		*\/sys/kernel/debug/tracing/trace_options* (see also the
+ * 		*\/sys/kernel/tracing/trace_options* (see also the
  * 		*README* file under the same directory). However, it usually
  * 		defaults to something like:
  *
@@ -1953,6 +2035,9 @@
  * 			sending the packet. This flag was added for GRE
  * 			encapsulation, but might be used with other protocols
  * 			as well in the future.
+ * 		**BPF_F_NO_TUNNEL_KEY**
+ * 			Add a flag to tunnel metadata indicating that no tunnel
+ * 			key should be set in the resulting tunnel header.
  *
  * 		Here is a typical usage on the transmit path:
  *
@@ -2350,7 +2435,8 @@
  * 		Pull in non-linear data in case the *skb* is non-linear and not
  * 		all of *len* are part of the linear section. Make *len* bytes
  * 		from *skb* readable and writable. If a zero value is passed for
- * 		*len*, then the whole length of the *skb* is pulled.
+ *		*len*, then all bytes in the linear part of *skb* will be made
+ *		readable and writable.
  *
  * 		This helper is only needed for reading and writing with direct
  * 		packet access.
@@ -2535,14 +2621,19 @@
  * 		* **SOL_SOCKET**, which supports the following *optname*\ s:
  * 		  **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**,
  * 		  **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**,
- * 		  **SO_BINDTODEVICE**, **SO_KEEPALIVE**.
+ * 		  **SO_BINDTODEVICE**, **SO_KEEPALIVE**, **SO_REUSEADDR**,
+ * 		  **SO_REUSEPORT**, **SO_BINDTOIFINDEX**, **SO_TXREHASH**.
  * 		* **IPPROTO_TCP**, which supports the following *optname*\ s:
  * 		  **TCP_CONGESTION**, **TCP_BPF_IW**,
  * 		  **TCP_BPF_SNDCWND_CLAMP**, **TCP_SAVE_SYN**,
  * 		  **TCP_KEEPIDLE**, **TCP_KEEPINTVL**, **TCP_KEEPCNT**,
- *		  **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**.
+ * 		  **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**,
+ * 		  **TCP_NODELAY**, **TCP_MAXSEG**, **TCP_WINDOW_CLAMP**,
+ * 		  **TCP_THIN_LINEAR_TIMEOUTS**, **TCP_BPF_DELACK_MAX**,
+ * 		  **TCP_BPF_RTO_MIN**.
  * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ * 		* **IPPROTO_IPV6**, which supports the following *optname*\ s:
+ * 		  **IPV6_TCLASS**, **IPV6_AUTOFLOWLABEL**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
@@ -2561,10 +2652,12 @@
  *		There are two supported modes at this time:
  *
  *		* **BPF_ADJ_ROOM_MAC**: Adjust room at the mac layer
- *		  (room space is added or removed below the layer 2 header).
+ * 		  (room space is added or removed between the layer 2 and
+ * 		  layer 3 headers).
  *
  * 		* **BPF_ADJ_ROOM_NET**: Adjust room at the network layer
- * 		  (room space is added or removed below the layer 3 header).
+ * 		  (room space is added or removed between the layer 3 and
+ * 		  layer 4 headers).
  *
  *		The following flags are supported at this time:
  *
@@ -2588,6 +2681,11 @@
  *		  Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the
  *		  L2 type as Ethernet.
  *
+ *		* **BPF_F_ADJ_ROOM_DECAP_L3_IPV4**,
+ *		  **BPF_F_ADJ_ROOM_DECAP_L3_IPV6**:
+ *		  Indicate the new IP header version after decapsulating the outer
+ *		  IP header. Used when the inner and outer IP versions are different.
+ *
  * 		A call to this helper is susceptible to change the underlying
  * 		packet buffer. Therefore, at load time, all checks on pointers
  * 		previously done by the verifier are invalidated and must be
@@ -2596,7 +2694,7 @@
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
- * long bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
+ * long bpf_redirect_map(struct bpf_map *map, u64 key, u64 flags)
  * 	Description
  * 		Redirect the packet to the endpoint referenced by *map* at
  * 		index *key*. Depending on its type, this *map* can contain
@@ -2732,7 +2830,7 @@
  *
  * long bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
  * 	Description
- * 		For en eBPF program attached to a perf event, retrieve the
+ * 		For an eBPF program attached to a perf event, retrieve the
  * 		value of the event counter associated to *ctx* and store it in
  * 		the structure pointed by *buf* and of size *buf_size*. Enabled
  * 		and running times are also stored in the structure (see
@@ -2757,12 +2855,10 @@
  * 		  and **BPF_CGROUP_INET6_CONNECT**.
  *
  * 		This helper actually implements a subset of **getsockopt()**.
- * 		It supports the following *level*\ s:
- *
- * 		* **IPPROTO_TCP**, which supports *optname*
- * 		  **TCP_CONGESTION**.
- * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ * 		It supports the same set of *optname*\ s that is supported by
+ * 		the **bpf_setsockopt**\ () helper.  The exceptions are
+ * 		**TCP_BPF_*** is **bpf_setsockopt**\ () only and
+ * 		**TCP_SAVED_SYN** is **bpf_getsockopt**\ () only.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
  *
@@ -2996,8 +3092,18 @@
  * 		**BPF_F_USER_STACK**
  * 			Collect a user space stack instead of a kernel stack.
  * 		**BPF_F_USER_BUILD_ID**
- * 			Collect buildid+offset instead of ips for user stack,
- * 			only valid if **BPF_F_USER_STACK** is also specified.
+ * 			Collect (build_id, file_offset) instead of ips for user
+ * 			stack, only valid if **BPF_F_USER_STACK** is also
+ * 			specified.
+ *
+ * 			*file_offset* is an offset relative to the beginning
+ * 			of the executable or shared object file backing the vma
+ * 			which the *ip* falls in. It is *not* an offset relative
+ * 			to that object's base address. Accordingly, it must be
+ * 			adjusted by adding (sh_addr - sh_offset), where
+ * 			sh_{addr,offset} correspond to the executable section
+ * 			containing *file_offset* in the object, for comparisons
+ * 			to symbols' st_value to be valid.
  *
  * 		**bpf_get_stack**\ () can collect up to
  * 		**PERF_MAX_STACK_DEPTH** both kernel and user frames, subject
@@ -3010,8 +3116,8 @@
  *
  * 			# sysctl kernel.perf_event_max_stack=<new value>
  * 	Return
- * 		A non-negative value equal to or less than *size* on success,
- * 		or a negative error in case of failure.
+ * 		The non-negative copied *buf* length equal to or less than
+ * 		*size* on success, or a negative error in case of failure.
  *
  * long bpf_skb_load_bytes_relative(const void *skb, u32 offset, void *to, u32 len, u32 start_header)
  * 	Description
@@ -3057,6 +3163,11 @@
  *		**BPF_FIB_LOOKUP_OUTPUT**
  *			Perform lookup from an egress perspective (default is
  *			ingress).
+ *		**BPF_FIB_LOOKUP_SKIP_NEIGH**
+ *			Skip the neighbour table lookup. *params*->dmac
+ *			and *params*->smac will not be set as output. A common
+ *			use case is to call **bpf_redirect_neigh**\ () after
+ *			doing **bpf_fib_lookup**\ ().
  *
  *		*ctx* is either **struct xdp_md** for XDP programs or
  *		**struct sk_buff** tc cls_act programs.
@@ -3588,10 +3699,11 @@
  *
  * 		*iph* points to the start of the IPv4 or IPv6 header, while
  * 		*iph_len* contains **sizeof**\ (**struct iphdr**) or
- * 		**sizeof**\ (**struct ip6hdr**).
+ * 		**sizeof**\ (**struct ipv6hdr**).
  *
  * 		*th* points to the start of the TCP header, while *th_len*
- * 		contains **sizeof**\ (**struct tcphdr**).
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
  * 	Return
  * 		0 if *iph* and *th* are a valid SYN cookie ACK, or a negative
  * 		error otherwise.
@@ -3774,10 +3886,11 @@
  *
  *		*iph* points to the start of the IPv4 or IPv6 header, while
  *		*iph_len* contains **sizeof**\ (**struct iphdr**) or
- *		**sizeof**\ (**struct ip6hdr**).
+ *		**sizeof**\ (**struct ipv6hdr**).
  *
  *		*th* points to the start of the TCP header, while *th_len*
- *		contains the length of the TCP header.
+ *		contains the length of the TCP header with options (at least
+ *		**sizeof**\ (**struct tcphdr**)).
  *	Return
  *		On success, lower 32 bits hold the generated SYN cookie in
  *		followed by 16 bits which hold the MSS value for that cookie,
@@ -4317,8 +4430,8 @@
  *
  *			# sysctl kernel.perf_event_max_stack=<new value>
  *	Return
- *		A non-negative value equal to or less than *size* on success,
- *		or a negative error in case of failure.
+ * 		The non-negative copied *buf* length equal to or less than
+ * 		*size* on success, or a negative error in case of failure.
  *
  * long bpf_load_hdr_opt(struct bpf_sock_ops *skops, void *searchby_res, u32 len, u64 flags)
  *	Description
@@ -4411,7 +4524,7 @@
  *
  *		**-EEXIST** if the option already exists.
  *
- *		**-EFAULT** on failrue to parse the existing header options.
+ *		**-EFAULT** on failure to parse the existing header options.
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
@@ -4620,7 +4733,7 @@
  *		a *map* with *task* as the **key**.  From this
  *		perspective,  the usage is not much different from
  *		**bpf_map_lookup_elem**\ (*map*, **&**\ *task*) except this
- *		helper enforces the key must be an task_struct and the map must also
+ *		helper enforces the key must be a task_struct and the map must also
  *		be a **BPF_MAP_TYPE_TASK_STORAGE**.
  *
  *		Underneath, the value is stored locally at *task* instead of
@@ -4678,7 +4791,7 @@
  *
  * long bpf_ima_inode_hash(struct inode *inode, void *dst, u32 size)
  *	Description
- *		Returns the stored IMA hash of the *inode* (if it's avaialable).
+ *		Returns the stored IMA hash of the *inode* (if it's available).
  *		If the hash is larger than *size*, then only *size*
  *		bytes will be copied to *dst*
  *	Return
@@ -4702,12 +4815,12 @@
  *
  *		The argument *len_diff* can be used for querying with a planned
  *		size change. This allows to check MTU prior to changing packet
- *		ctx. Providing an *len_diff* adjustment that is larger than the
+ *		ctx. Providing a *len_diff* adjustment that is larger than the
  *		actual packet size (resulting in negative packet size) will in
- *		principle not exceed the MTU, why it is not considered a
- *		failure.  Other BPF-helpers are needed for performing the
- *		planned size change, why the responsability for catch a negative
- *		packet size belong in those helpers.
+ *		principle not exceed the MTU, which is why it is not considered
+ *		a failure.  Other BPF helpers are needed for performing the
+ *		planned size change; therefore the responsibility for catching
+ *		a negative packet size belongs in those helpers.
  *
  *		Specifying *ifindex* zero means the MTU check is performed
  *		against the current net device.  This is practical if this isn't
@@ -4885,6 +4998,12 @@
  *		different maps if key/value layout matches across maps.
  *		Every bpf_timer_set_callback() can have different callback_fn.
  *
+ *		*flags* can be one of:
+ *
+ *		**BPF_F_TIMER_ABS**
+ *			Start the timer in absolute expire value instead of the
+ *			default relative one.
+ *
  *	Return
  *		0 on success.
  *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
@@ -4905,6 +5024,7 @@
  * 		Get address of the traced function (for tracing and kprobe programs).
  * 	Return
  * 		Address of the traced function.
+ * 		0 for kprobes placed within the function (not at the entry).
  *
  * u64 bpf_get_attach_cookie(void *ctx)
  * 	Description
@@ -5034,12 +5154,12 @@
  *
  * long bpf_get_func_arg(void *ctx, u32 n, u64 *value)
  *	Description
- *		Get **n**-th argument (zero based) of the traced function (for tracing programs)
+ *		Get **n**-th argument register (zero based) of the traced function (for tracing programs)
  *		returned in **value**.
  *
  *	Return
  *		0 on success.
- *		**-EINVAL** if n >= arguments count of traced function.
+ *		**-EINVAL** if n >= argument register count of traced function.
  *
  * long bpf_get_func_ret(void *ctx, u64 *value)
  *	Description
@@ -5052,24 +5172,37 @@
  *
  * long bpf_get_func_arg_cnt(void *ctx)
  *	Description
- *		Get number of arguments of the traced function (for tracing programs).
+ *		Get number of registers of the traced function (for tracing programs) where
+ *		function arguments are stored in these registers.
  *
  *	Return
- *		The number of arguments of the traced function.
+ *		The number of argument registers of the traced function.
  *
  * int bpf_get_retval(void)
  *	Description
- *		Get the syscall's return value that will be returned to userspace.
+ *		Get the BPF program's return value that will be returned to the upper layers.
  *
- *		This helper is currently supported by cgroup programs only.
+ *		This helper is currently supported by cgroup programs and only by the hooks
+ *		where BPF program's return value is returned to the userspace via errno.
  *	Return
- *		The syscall's return value.
+ *		The BPF program's return value.
  *
  * int bpf_set_retval(int retval)
  *	Description
- *		Set the syscall's return value that will be returned to userspace.
+ *		Set the BPF program's return value that will be returned to the upper layers.
  *
- *		This helper is currently supported by cgroup programs only.
+ *		This helper is currently supported by cgroup programs and only by the hooks
+ *		where BPF program's return value is returned to the userspace via errno.
+ *
+ *		Note that there is the following corner case where the program exports an error
+ *		via bpf_set_retval but signals success via 'return 1':
+ *
+ *			bpf_set_retval(-EPERM);
+ *			return 1;
+ *
+ *		In this case, the BPF program's return value will use helper's -EPERM. This
+ *		still holds true for cgroup/bind{4,6} which supports extra 'return 3' success case.
+ *
  *	Return
  *		0 on success, or a negative error in case of failure.
  *
@@ -5144,210 +5277,508 @@
  *		The **hash_algo** is returned on success,
  *		**-EOPNOTSUP** if the hash calculation failed or **-EINVAL** if
  *		invalid arguments are passed.
+ *
+ * void *bpf_kptr_xchg(void *map_value, void *ptr)
+ *	Description
+ *		Exchange kptr at pointer *map_value* with *ptr*, and return the
+ *		old value. *ptr* can be NULL, otherwise it must be a referenced
+ *		pointer which will be released when this helper is called.
+ *	Return
+ *		The old value of kptr (which can be NULL). The returned pointer
+ *		if not NULL, is a reference which must be released using its
+ *		corresponding release function, or moved into a BPF map before
+ *		program exit.
+ *
+ * void *bpf_map_lookup_percpu_elem(struct bpf_map *map, const void *key, u32 cpu)
+ * 	Description
+ * 		Perform a lookup in *percpu map* for an entry associated to
+ * 		*key* on *cpu*.
+ * 	Return
+ * 		Map value associated to *key* on *cpu*, or **NULL** if no entry
+ * 		was found or *cpu* is invalid.
+ *
+ * struct mptcp_sock *bpf_skc_to_mptcp_sock(void *sk)
+ *	Description
+ *		Dynamically cast a *sk* pointer to a *mptcp_sock* pointer.
+ *	Return
+ *		*sk* if casting is valid, or **NULL** otherwise.
+ *
+ * long bpf_dynptr_from_mem(void *data, u32 size, u64 flags, struct bpf_dynptr *ptr)
+ *	Description
+ *		Get a dynptr to local memory *data*.
+ *
+ *		*data* must be a ptr to a map value.
+ *		The maximum *size* supported is DYNPTR_MAX_SIZE.
+ *		*flags* is currently unused.
+ *	Return
+ *		0 on success, -E2BIG if the size exceeds DYNPTR_MAX_SIZE,
+ *		-EINVAL if flags is not 0.
+ *
+ * long bpf_ringbuf_reserve_dynptr(void *ringbuf, u32 size, u64 flags, struct bpf_dynptr *ptr)
+ *	Description
+ *		Reserve *size* bytes of payload in a ring buffer *ringbuf*
+ *		through the dynptr interface. *flags* must be 0.
+ *
+ *		Please note that a corresponding bpf_ringbuf_submit_dynptr or
+ *		bpf_ringbuf_discard_dynptr must be called on *ptr*, even if the
+ *		reservation fails. This is enforced by the verifier.
+ *	Return
+ *		0 on success, or a negative error in case of failure.
+ *
+ * void bpf_ringbuf_submit_dynptr(struct bpf_dynptr *ptr, u64 flags)
+ *	Description
+ *		Submit reserved ring buffer sample, pointed to by *data*,
+ *		through the dynptr interface. This is a no-op if the dynptr is
+ *		invalid/null.
+ *
+ *		For more information on *flags*, please see
+ *		'bpf_ringbuf_submit'.
+ *	Return
+ *		Nothing. Always succeeds.
+ *
+ * void bpf_ringbuf_discard_dynptr(struct bpf_dynptr *ptr, u64 flags)
+ *	Description
+ *		Discard reserved ring buffer sample through the dynptr
+ *		interface. This is a no-op if the dynptr is invalid/null.
+ *
+ *		For more information on *flags*, please see
+ *		'bpf_ringbuf_discard'.
+ *	Return
+ *		Nothing. Always succeeds.
+ *
+ * long bpf_dynptr_read(void *dst, u32 len, const struct bpf_dynptr *src, u32 offset, u64 flags)
+ *	Description
+ *		Read *len* bytes from *src* into *dst*, starting from *offset*
+ *		into *src*.
+ *		*flags* is currently unused.
+ *	Return
+ *		0 on success, -E2BIG if *offset* + *len* exceeds the length
+ *		of *src*'s data, -EINVAL if *src* is an invalid dynptr or if
+ *		*flags* is not 0.
+ *
+ * long bpf_dynptr_write(const struct bpf_dynptr *dst, u32 offset, void *src, u32 len, u64 flags)
+ *	Description
+ *		Write *len* bytes from *src* into *dst*, starting from *offset*
+ *		into *dst*.
+ *
+ *		*flags* must be 0 except for skb-type dynptrs.
+ *
+ *		For skb-type dynptrs:
+ *		    *  All data slices of the dynptr are automatically
+ *		       invalidated after **bpf_dynptr_write**\ (). This is
+ *		       because writing may pull the skb and change the
+ *		       underlying packet buffer.
+ *
+ *		    *  For *flags*, please see the flags accepted by
+ *		       **bpf_skb_store_bytes**\ ().
+ *	Return
+ *		0 on success, -E2BIG if *offset* + *len* exceeds the length
+ *		of *dst*'s data, -EINVAL if *dst* is an invalid dynptr or if *dst*
+ *		is a read-only dynptr or if *flags* is not correct. For skb-type dynptrs,
+ *		other errors correspond to errors returned by **bpf_skb_store_bytes**\ ().
+ *
+ * void *bpf_dynptr_data(const struct bpf_dynptr *ptr, u32 offset, u32 len)
+ *	Description
+ *		Get a pointer to the underlying dynptr data.
+ *
+ *		*len* must be a statically known value. The returned data slice
+ *		is invalidated whenever the dynptr is invalidated.
+ *
+ *		skb and xdp type dynptrs may not use bpf_dynptr_data. They should
+ *		instead use bpf_dynptr_slice and bpf_dynptr_slice_rdwr.
+ *	Return
+ *		Pointer to the underlying dynptr data, NULL if the dynptr is
+ *		read-only, if the dynptr is invalid, or if the offset and length
+ *		is out of bounds.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th, u32 th_len)
+ *	Description
+ *		Try to issue a SYN cookie for the packet with corresponding
+ *		IPv4/TCP headers, *iph* and *th*, without depending on a
+ *		listening socket.
+ *
+ *		*iph* points to the IPv4 header.
+ *
+ *		*th* points to the start of the TCP header, while *th_len*
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
+ *	Return
+ *		On success, lower 32 bits hold the generated SYN cookie in
+ *		followed by 16 bits which hold the MSS value for that cookie,
+ *		and the top 16 bits are unused.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EINVAL** if *th_len* is invalid.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th, u32 th_len)
+ *	Description
+ *		Try to issue a SYN cookie for the packet with corresponding
+ *		IPv6/TCP headers, *iph* and *th*, without depending on a
+ *		listening socket.
+ *
+ *		*iph* points to the IPv6 header.
+ *
+ *		*th* points to the start of the TCP header, while *th_len*
+ *		contains the length of the TCP header (at least
+ *		**sizeof**\ (**struct tcphdr**)).
+ *	Return
+ *		On success, lower 32 bits hold the generated SYN cookie in
+ *		followed by 16 bits which hold the MSS value for that cookie,
+ *		and the top 16 bits are unused.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EINVAL** if *th_len* is invalid.
+ *
+ *		**-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th)
+ *	Description
+ *		Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *		without depending on a listening socket.
+ *
+ *		*iph* points to the IPv4 header.
+ *
+ *		*th* points to the TCP header.
+ *	Return
+ *		0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EACCES** if the SYN cookie is not valid.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th)
+ *	Description
+ *		Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *		without depending on a listening socket.
+ *
+ *		*iph* points to the IPv6 header.
+ *
+ *		*th* points to the TCP header.
+ *	Return
+ *		0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EACCES** if the SYN cookie is not valid.
+ *
+ *		**-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * u64 bpf_ktime_get_tai_ns(void)
+ *	Description
+ *		A nonsettable system-wide clock derived from wall-clock time but
+ *		ignoring leap seconds.  This clock does not experience
+ *		discontinuities and backwards jumps caused by NTP inserting leap
+ *		seconds as CLOCK_REALTIME does.
+ *
+ *		See: **clock_gettime**\ (**CLOCK_TAI**)
+ *	Return
+ *		Current *ktime*.
+ *
+ * long bpf_user_ringbuf_drain(struct bpf_map *map, void *callback_fn, void *ctx, u64 flags)
+ *	Description
+ *		Drain samples from the specified user ring buffer, and invoke
+ *		the provided callback for each such sample:
+ *
+ *		long (\*callback_fn)(const struct bpf_dynptr \*dynptr, void \*ctx);
+ *
+ *		If **callback_fn** returns 0, the helper will continue to try
+ *		and drain the next sample, up to a maximum of
+ *		BPF_MAX_USER_RINGBUF_SAMPLES samples. If the return value is 1,
+ *		the helper will skip the rest of the samples and return. Other
+ *		return values are not used now, and will be rejected by the
+ *		verifier.
+ *	Return
+ *		The number of drained samples if no error was encountered while
+ *		draining samples, or 0 if no samples were present in the ring
+ *		buffer. If a user-space producer was epoll-waiting on this map,
+ *		and at least one sample was drained, they will receive an event
+ *		notification notifying them of available space in the ring
+ *		buffer. If the BPF_RB_NO_WAKEUP flag is passed to this
+ *		function, no wakeup notification will be sent. If the
+ *		BPF_RB_FORCE_WAKEUP flag is passed, a wakeup notification will
+ *		be sent even if no sample was drained.
+ *
+ *		On failure, the returned value is one of the following:
+ *
+ *		**-EBUSY** if the ring buffer is contended, and another calling
+ *		context was concurrently draining the ring buffer.
+ *
+ *		**-EINVAL** if user-space is not properly tracking the ring
+ *		buffer due to the producer position not being aligned to 8
+ *		bytes, a sample not being aligned to 8 bytes, or the producer
+ *		position not matching the advertised length of a sample.
+ *
+ *		**-E2BIG** if user-space has tried to publish a sample which is
+ *		larger than the size of the ring buffer, or which cannot fit
+ *		within a struct bpf_dynptr.
+ *
+ * void *bpf_cgrp_storage_get(struct bpf_map *map, struct cgroup *cgroup, void *value, u64 flags)
+ *	Description
+ *		Get a bpf_local_storage from the *cgroup*.
+ *
+ *		Logically, it could be thought of as getting the value from
+ *		a *map* with *cgroup* as the **key**.  From this
+ *		perspective,  the usage is not much different from
+ *		**bpf_map_lookup_elem**\ (*map*, **&**\ *cgroup*) except this
+ *		helper enforces the key must be a cgroup struct and the map must also
+ *		be a **BPF_MAP_TYPE_CGRP_STORAGE**.
+ *
+ *		In reality, the local-storage value is embedded directly inside of the
+ *		*cgroup* object itself, rather than being located in the
+ *		**BPF_MAP_TYPE_CGRP_STORAGE** map. When the local-storage value is
+ *		queried for some *map* on a *cgroup* object, the kernel will perform an
+ *		O(n) iteration over all of the live local-storage values for that
+ *		*cgroup* object until the local-storage value for the *map* is found.
+ *
+ *		An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be
+ *		used such that a new bpf_local_storage will be
+ *		created if one does not exist.  *value* can be used
+ *		together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify
+ *		the initial value of a bpf_local_storage.  If *value* is
+ *		**NULL**, the new bpf_local_storage will be zero initialized.
+ *	Return
+ *		A bpf_local_storage pointer is returned on success.
+ *
+ *		**NULL** if not found or there was an error in adding
+ *		a new bpf_local_storage.
+ *
+ * long bpf_cgrp_storage_delete(struct bpf_map *map, struct cgroup *cgroup)
+ *	Description
+ *		Delete a bpf_local_storage from a *cgroup*.
+ *	Return
+ *		0 on success.
+ *
+ *		**-ENOENT** if the bpf_local_storage cannot be found.
  */
-#define __BPF_FUNC_MAPPER(FN)		\
-	FN(unspec),			\
-	FN(map_lookup_elem),		\
-	FN(map_update_elem),		\
-	FN(map_delete_elem),		\
-	FN(probe_read),			\
-	FN(ktime_get_ns),		\
-	FN(trace_printk),		\
-	FN(get_prandom_u32),		\
-	FN(get_smp_processor_id),	\
-	FN(skb_store_bytes),		\
-	FN(l3_csum_replace),		\
-	FN(l4_csum_replace),		\
-	FN(tail_call),			\
-	FN(clone_redirect),		\
-	FN(get_current_pid_tgid),	\
-	FN(get_current_uid_gid),	\
-	FN(get_current_comm),		\
-	FN(get_cgroup_classid),		\
-	FN(skb_vlan_push),		\
-	FN(skb_vlan_pop),		\
-	FN(skb_get_tunnel_key),		\
-	FN(skb_set_tunnel_key),		\
-	FN(perf_event_read),		\
-	FN(redirect),			\
-	FN(get_route_realm),		\
-	FN(perf_event_output),		\
-	FN(skb_load_bytes),		\
-	FN(get_stackid),		\
-	FN(csum_diff),			\
-	FN(skb_get_tunnel_opt),		\
-	FN(skb_set_tunnel_opt),		\
-	FN(skb_change_proto),		\
-	FN(skb_change_type),		\
-	FN(skb_under_cgroup),		\
-	FN(get_hash_recalc),		\
-	FN(get_current_task),		\
-	FN(probe_write_user),		\
-	FN(current_task_under_cgroup),	\
-	FN(skb_change_tail),		\
-	FN(skb_pull_data),		\
-	FN(csum_update),		\
-	FN(set_hash_invalid),		\
-	FN(get_numa_node_id),		\
-	FN(skb_change_head),		\
-	FN(xdp_adjust_head),		\
-	FN(probe_read_str),		\
-	FN(get_socket_cookie),		\
-	FN(get_socket_uid),		\
-	FN(set_hash),			\
-	FN(setsockopt),			\
-	FN(skb_adjust_room),		\
-	FN(redirect_map),		\
-	FN(sk_redirect_map),		\
-	FN(sock_map_update),		\
-	FN(xdp_adjust_meta),		\
-	FN(perf_event_read_value),	\
-	FN(perf_prog_read_value),	\
-	FN(getsockopt),			\
-	FN(override_return),		\
-	FN(sock_ops_cb_flags_set),	\
-	FN(msg_redirect_map),		\
-	FN(msg_apply_bytes),		\
-	FN(msg_cork_bytes),		\
-	FN(msg_pull_data),		\
-	FN(bind),			\
-	FN(xdp_adjust_tail),		\
-	FN(skb_get_xfrm_state),		\
-	FN(get_stack),			\
-	FN(skb_load_bytes_relative),	\
-	FN(fib_lookup),			\
-	FN(sock_hash_update),		\
-	FN(msg_redirect_hash),		\
-	FN(sk_redirect_hash),		\
-	FN(lwt_push_encap),		\
-	FN(lwt_seg6_store_bytes),	\
-	FN(lwt_seg6_adjust_srh),	\
-	FN(lwt_seg6_action),		\
-	FN(rc_repeat),			\
-	FN(rc_keydown),			\
-	FN(skb_cgroup_id),		\
-	FN(get_current_cgroup_id),	\
-	FN(get_local_storage),		\
-	FN(sk_select_reuseport),	\
-	FN(skb_ancestor_cgroup_id),	\
-	FN(sk_lookup_tcp),		\
-	FN(sk_lookup_udp),		\
-	FN(sk_release),			\
-	FN(map_push_elem),		\
-	FN(map_pop_elem),		\
-	FN(map_peek_elem),		\
-	FN(msg_push_data),		\
-	FN(msg_pop_data),		\
-	FN(rc_pointer_rel),		\
-	FN(spin_lock),			\
-	FN(spin_unlock),		\
-	FN(sk_fullsock),		\
-	FN(tcp_sock),			\
-	FN(skb_ecn_set_ce),		\
-	FN(get_listener_sock),		\
-	FN(skc_lookup_tcp),		\
-	FN(tcp_check_syncookie),	\
-	FN(sysctl_get_name),		\
-	FN(sysctl_get_current_value),	\
-	FN(sysctl_get_new_value),	\
-	FN(sysctl_set_new_value),	\
-	FN(strtol),			\
-	FN(strtoul),			\
-	FN(sk_storage_get),		\
-	FN(sk_storage_delete),		\
-	FN(send_signal),		\
-	FN(tcp_gen_syncookie),		\
-	FN(skb_output),			\
-	FN(probe_read_user),		\
-	FN(probe_read_kernel),		\
-	FN(probe_read_user_str),	\
-	FN(probe_read_kernel_str),	\
-	FN(tcp_send_ack),		\
-	FN(send_signal_thread),		\
-	FN(jiffies64),			\
-	FN(read_branch_records),	\
-	FN(get_ns_current_pid_tgid),	\
-	FN(xdp_output),			\
-	FN(get_netns_cookie),		\
-	FN(get_current_ancestor_cgroup_id),	\
-	FN(sk_assign),			\
-	FN(ktime_get_boot_ns),		\
-	FN(seq_printf),			\
-	FN(seq_write),			\
-	FN(sk_cgroup_id),		\
-	FN(sk_ancestor_cgroup_id),	\
-	FN(ringbuf_output),		\
-	FN(ringbuf_reserve),		\
-	FN(ringbuf_submit),		\
-	FN(ringbuf_discard),		\
-	FN(ringbuf_query),		\
-	FN(csum_level),			\
-	FN(skc_to_tcp6_sock),		\
-	FN(skc_to_tcp_sock),		\
-	FN(skc_to_tcp_timewait_sock),	\
-	FN(skc_to_tcp_request_sock),	\
-	FN(skc_to_udp6_sock),		\
-	FN(get_task_stack),		\
-	FN(load_hdr_opt),		\
-	FN(store_hdr_opt),		\
-	FN(reserve_hdr_opt),		\
-	FN(inode_storage_get),		\
-	FN(inode_storage_delete),	\
-	FN(d_path),			\
-	FN(copy_from_user),		\
-	FN(snprintf_btf),		\
-	FN(seq_printf_btf),		\
-	FN(skb_cgroup_classid),		\
-	FN(redirect_neigh),		\
-	FN(per_cpu_ptr),		\
-	FN(this_cpu_ptr),		\
-	FN(redirect_peer),		\
-	FN(task_storage_get),		\
-	FN(task_storage_delete),	\
-	FN(get_current_task_btf),	\
-	FN(bprm_opts_set),		\
-	FN(ktime_get_coarse_ns),	\
-	FN(ima_inode_hash),		\
-	FN(sock_from_file),		\
-	FN(check_mtu),			\
-	FN(for_each_map_elem),		\
-	FN(snprintf),			\
-	FN(sys_bpf),			\
-	FN(btf_find_by_name_kind),	\
-	FN(sys_close),			\
-	FN(timer_init),			\
-	FN(timer_set_callback),		\
-	FN(timer_start),		\
-	FN(timer_cancel),		\
-	FN(get_func_ip),		\
-	FN(get_attach_cookie),		\
-	FN(task_pt_regs),		\
-	FN(get_branch_snapshot),	\
-	FN(trace_vprintk),		\
-	FN(skc_to_unix_sock),		\
-	FN(kallsyms_lookup_name),	\
-	FN(find_vma),			\
-	FN(loop),			\
-	FN(strncmp),			\
-	FN(get_func_arg),		\
-	FN(get_func_ret),		\
-	FN(get_func_arg_cnt),		\
-	FN(get_retval),			\
-	FN(set_retval),			\
-	FN(xdp_get_buff_len),		\
-	FN(xdp_load_bytes),		\
-	FN(xdp_store_bytes),		\
-	FN(copy_from_user_task),	\
-	FN(skb_set_tstamp),		\
-	FN(ima_file_hash),		\
+#define ___BPF_FUNC_MAPPER(FN, ctx...)			\
+	FN(unspec, 0, ##ctx)				\
+	FN(map_lookup_elem, 1, ##ctx)			\
+	FN(map_update_elem, 2, ##ctx)			\
+	FN(map_delete_elem, 3, ##ctx)			\
+	FN(probe_read, 4, ##ctx)			\
+	FN(ktime_get_ns, 5, ##ctx)			\
+	FN(trace_printk, 6, ##ctx)			\
+	FN(get_prandom_u32, 7, ##ctx)			\
+	FN(get_smp_processor_id, 8, ##ctx)		\
+	FN(skb_store_bytes, 9, ##ctx)			\
+	FN(l3_csum_replace, 10, ##ctx)			\
+	FN(l4_csum_replace, 11, ##ctx)			\
+	FN(tail_call, 12, ##ctx)			\
+	FN(clone_redirect, 13, ##ctx)			\
+	FN(get_current_pid_tgid, 14, ##ctx)		\
+	FN(get_current_uid_gid, 15, ##ctx)		\
+	FN(get_current_comm, 16, ##ctx)			\
+	FN(get_cgroup_classid, 17, ##ctx)		\
+	FN(skb_vlan_push, 18, ##ctx)			\
+	FN(skb_vlan_pop, 19, ##ctx)			\
+	FN(skb_get_tunnel_key, 20, ##ctx)		\
+	FN(skb_set_tunnel_key, 21, ##ctx)		\
+	FN(perf_event_read, 22, ##ctx)			\
+	FN(redirect, 23, ##ctx)				\
+	FN(get_route_realm, 24, ##ctx)			\
+	FN(perf_event_output, 25, ##ctx)		\
+	FN(skb_load_bytes, 26, ##ctx)			\
+	FN(get_stackid, 27, ##ctx)			\
+	FN(csum_diff, 28, ##ctx)			\
+	FN(skb_get_tunnel_opt, 29, ##ctx)		\
+	FN(skb_set_tunnel_opt, 30, ##ctx)		\
+	FN(skb_change_proto, 31, ##ctx)			\
+	FN(skb_change_type, 32, ##ctx)			\
+	FN(skb_under_cgroup, 33, ##ctx)			\
+	FN(get_hash_recalc, 34, ##ctx)			\
+	FN(get_current_task, 35, ##ctx)			\
+	FN(probe_write_user, 36, ##ctx)			\
+	FN(current_task_under_cgroup, 37, ##ctx)	\
+	FN(skb_change_tail, 38, ##ctx)			\
+	FN(skb_pull_data, 39, ##ctx)			\
+	FN(csum_update, 40, ##ctx)			\
+	FN(set_hash_invalid, 41, ##ctx)			\
+	FN(get_numa_node_id, 42, ##ctx)			\
+	FN(skb_change_head, 43, ##ctx)			\
+	FN(xdp_adjust_head, 44, ##ctx)			\
+	FN(probe_read_str, 45, ##ctx)			\
+	FN(get_socket_cookie, 46, ##ctx)		\
+	FN(get_socket_uid, 47, ##ctx)			\
+	FN(set_hash, 48, ##ctx)				\
+	FN(setsockopt, 49, ##ctx)			\
+	FN(skb_adjust_room, 50, ##ctx)			\
+	FN(redirect_map, 51, ##ctx)			\
+	FN(sk_redirect_map, 52, ##ctx)			\
+	FN(sock_map_update, 53, ##ctx)			\
+	FN(xdp_adjust_meta, 54, ##ctx)			\
+	FN(perf_event_read_value, 55, ##ctx)		\
+	FN(perf_prog_read_value, 56, ##ctx)		\
+	FN(getsockopt, 57, ##ctx)			\
+	FN(override_return, 58, ##ctx)			\
+	FN(sock_ops_cb_flags_set, 59, ##ctx)		\
+	FN(msg_redirect_map, 60, ##ctx)			\
+	FN(msg_apply_bytes, 61, ##ctx)			\
+	FN(msg_cork_bytes, 62, ##ctx)			\
+	FN(msg_pull_data, 63, ##ctx)			\
+	FN(bind, 64, ##ctx)				\
+	FN(xdp_adjust_tail, 65, ##ctx)			\
+	FN(skb_get_xfrm_state, 66, ##ctx)		\
+	FN(get_stack, 67, ##ctx)			\
+	FN(skb_load_bytes_relative, 68, ##ctx)		\
+	FN(fib_lookup, 69, ##ctx)			\
+	FN(sock_hash_update, 70, ##ctx)			\
+	FN(msg_redirect_hash, 71, ##ctx)		\
+	FN(sk_redirect_hash, 72, ##ctx)			\
+	FN(lwt_push_encap, 73, ##ctx)			\
+	FN(lwt_seg6_store_bytes, 74, ##ctx)		\
+	FN(lwt_seg6_adjust_srh, 75, ##ctx)		\
+	FN(lwt_seg6_action, 76, ##ctx)			\
+	FN(rc_repeat, 77, ##ctx)			\
+	FN(rc_keydown, 78, ##ctx)			\
+	FN(skb_cgroup_id, 79, ##ctx)			\
+	FN(get_current_cgroup_id, 80, ##ctx)		\
+	FN(get_local_storage, 81, ##ctx)		\
+	FN(sk_select_reuseport, 82, ##ctx)		\
+	FN(skb_ancestor_cgroup_id, 83, ##ctx)		\
+	FN(sk_lookup_tcp, 84, ##ctx)			\
+	FN(sk_lookup_udp, 85, ##ctx)			\
+	FN(sk_release, 86, ##ctx)			\
+	FN(map_push_elem, 87, ##ctx)			\
+	FN(map_pop_elem, 88, ##ctx)			\
+	FN(map_peek_elem, 89, ##ctx)			\
+	FN(msg_push_data, 90, ##ctx)			\
+	FN(msg_pop_data, 91, ##ctx)			\
+	FN(rc_pointer_rel, 92, ##ctx)			\
+	FN(spin_lock, 93, ##ctx)			\
+	FN(spin_unlock, 94, ##ctx)			\
+	FN(sk_fullsock, 95, ##ctx)			\
+	FN(tcp_sock, 96, ##ctx)				\
+	FN(skb_ecn_set_ce, 97, ##ctx)			\
+	FN(get_listener_sock, 98, ##ctx)		\
+	FN(skc_lookup_tcp, 99, ##ctx)			\
+	FN(tcp_check_syncookie, 100, ##ctx)		\
+	FN(sysctl_get_name, 101, ##ctx)			\
+	FN(sysctl_get_current_value, 102, ##ctx)	\
+	FN(sysctl_get_new_value, 103, ##ctx)		\
+	FN(sysctl_set_new_value, 104, ##ctx)		\
+	FN(strtol, 105, ##ctx)				\
+	FN(strtoul, 106, ##ctx)				\
+	FN(sk_storage_get, 107, ##ctx)			\
+	FN(sk_storage_delete, 108, ##ctx)		\
+	FN(send_signal, 109, ##ctx)			\
+	FN(tcp_gen_syncookie, 110, ##ctx)		\
+	FN(skb_output, 111, ##ctx)			\
+	FN(probe_read_user, 112, ##ctx)			\
+	FN(probe_read_kernel, 113, ##ctx)		\
+	FN(probe_read_user_str, 114, ##ctx)		\
+	FN(probe_read_kernel_str, 115, ##ctx)		\
+	FN(tcp_send_ack, 116, ##ctx)			\
+	FN(send_signal_thread, 117, ##ctx)		\
+	FN(jiffies64, 118, ##ctx)			\
+	FN(read_branch_records, 119, ##ctx)		\
+	FN(get_ns_current_pid_tgid, 120, ##ctx)		\
+	FN(xdp_output, 121, ##ctx)			\
+	FN(get_netns_cookie, 122, ##ctx)		\
+	FN(get_current_ancestor_cgroup_id, 123, ##ctx)	\
+	FN(sk_assign, 124, ##ctx)			\
+	FN(ktime_get_boot_ns, 125, ##ctx)		\
+	FN(seq_printf, 126, ##ctx)			\
+	FN(seq_write, 127, ##ctx)			\
+	FN(sk_cgroup_id, 128, ##ctx)			\
+	FN(sk_ancestor_cgroup_id, 129, ##ctx)		\
+	FN(ringbuf_output, 130, ##ctx)			\
+	FN(ringbuf_reserve, 131, ##ctx)			\
+	FN(ringbuf_submit, 132, ##ctx)			\
+	FN(ringbuf_discard, 133, ##ctx)			\
+	FN(ringbuf_query, 134, ##ctx)			\
+	FN(csum_level, 135, ##ctx)			\
+	FN(skc_to_tcp6_sock, 136, ##ctx)		\
+	FN(skc_to_tcp_sock, 137, ##ctx)			\
+	FN(skc_to_tcp_timewait_sock, 138, ##ctx)	\
+	FN(skc_to_tcp_request_sock, 139, ##ctx)		\
+	FN(skc_to_udp6_sock, 140, ##ctx)		\
+	FN(get_task_stack, 141, ##ctx)			\
+	FN(load_hdr_opt, 142, ##ctx)			\
+	FN(store_hdr_opt, 143, ##ctx)			\
+	FN(reserve_hdr_opt, 144, ##ctx)			\
+	FN(inode_storage_get, 145, ##ctx)		\
+	FN(inode_storage_delete, 146, ##ctx)		\
+	FN(d_path, 147, ##ctx)				\
+	FN(copy_from_user, 148, ##ctx)			\
+	FN(snprintf_btf, 149, ##ctx)			\
+	FN(seq_printf_btf, 150, ##ctx)			\
+	FN(skb_cgroup_classid, 151, ##ctx)		\
+	FN(redirect_neigh, 152, ##ctx)			\
+	FN(per_cpu_ptr, 153, ##ctx)			\
+	FN(this_cpu_ptr, 154, ##ctx)			\
+	FN(redirect_peer, 155, ##ctx)			\
+	FN(task_storage_get, 156, ##ctx)		\
+	FN(task_storage_delete, 157, ##ctx)		\
+	FN(get_current_task_btf, 158, ##ctx)		\
+	FN(bprm_opts_set, 159, ##ctx)			\
+	FN(ktime_get_coarse_ns, 160, ##ctx)		\
+	FN(ima_inode_hash, 161, ##ctx)			\
+	FN(sock_from_file, 162, ##ctx)			\
+	FN(check_mtu, 163, ##ctx)			\
+	FN(for_each_map_elem, 164, ##ctx)		\
+	FN(snprintf, 165, ##ctx)			\
+	FN(sys_bpf, 166, ##ctx)				\
+	FN(btf_find_by_name_kind, 167, ##ctx)		\
+	FN(sys_close, 168, ##ctx)			\
+	FN(timer_init, 169, ##ctx)			\
+	FN(timer_set_callback, 170, ##ctx)		\
+	FN(timer_start, 171, ##ctx)			\
+	FN(timer_cancel, 172, ##ctx)			\
+	FN(get_func_ip, 173, ##ctx)			\
+	FN(get_attach_cookie, 174, ##ctx)		\
+	FN(task_pt_regs, 175, ##ctx)			\
+	FN(get_branch_snapshot, 176, ##ctx)		\
+	FN(trace_vprintk, 177, ##ctx)			\
+	FN(skc_to_unix_sock, 178, ##ctx)		\
+	FN(kallsyms_lookup_name, 179, ##ctx)		\
+	FN(find_vma, 180, ##ctx)			\
+	FN(loop, 181, ##ctx)				\
+	FN(strncmp, 182, ##ctx)				\
+	FN(get_func_arg, 183, ##ctx)			\
+	FN(get_func_ret, 184, ##ctx)			\
+	FN(get_func_arg_cnt, 185, ##ctx)		\
+	FN(get_retval, 186, ##ctx)			\
+	FN(set_retval, 187, ##ctx)			\
+	FN(xdp_get_buff_len, 188, ##ctx)		\
+	FN(xdp_load_bytes, 189, ##ctx)			\
+	FN(xdp_store_bytes, 190, ##ctx)			\
+	FN(copy_from_user_task, 191, ##ctx)		\
+	FN(skb_set_tstamp, 192, ##ctx)			\
+	FN(ima_file_hash, 193, ##ctx)			\
+	FN(kptr_xchg, 194, ##ctx)			\
+	FN(map_lookup_percpu_elem, 195, ##ctx)		\
+	FN(skc_to_mptcp_sock, 196, ##ctx)		\
+	FN(dynptr_from_mem, 197, ##ctx)			\
+	FN(ringbuf_reserve_dynptr, 198, ##ctx)		\
+	FN(ringbuf_submit_dynptr, 199, ##ctx)		\
+	FN(ringbuf_discard_dynptr, 200, ##ctx)		\
+	FN(dynptr_read, 201, ##ctx)			\
+	FN(dynptr_write, 202, ##ctx)			\
+	FN(dynptr_data, 203, ##ctx)			\
+	FN(tcp_raw_gen_syncookie_ipv4, 204, ##ctx)	\
+	FN(tcp_raw_gen_syncookie_ipv6, 205, ##ctx)	\
+	FN(tcp_raw_check_syncookie_ipv4, 206, ##ctx)	\
+	FN(tcp_raw_check_syncookie_ipv6, 207, ##ctx)	\
+	FN(ktime_get_tai_ns, 208, ##ctx)		\
+	FN(user_ringbuf_drain, 209, ##ctx)		\
+	FN(cgrp_storage_get, 210, ##ctx)		\
+	FN(cgrp_storage_delete, 211, ##ctx)		\
 	/* */
 
+/* backwards-compatibility macros for users of __BPF_FUNC_MAPPER that don't
+ * know or care about integer value that is now passed as second argument
+ */
+#define __BPF_FUNC_MAPPER_APPLY(name, value, FN) FN(name),
+#define __BPF_FUNC_MAPPER(FN) ___BPF_FUNC_MAPPER(__BPF_FUNC_MAPPER_APPLY, FN)
+
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
  */
-#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x
+#define __BPF_ENUM_FN(x, y) BPF_FUNC_ ## x = y,
 enum bpf_func_id {
-	__BPF_FUNC_MAPPER(__BPF_ENUM_FN)
+	___BPF_FUNC_MAPPER(__BPF_ENUM_FN)
 	__BPF_FUNC_MAX_ID,
 };
 #undef __BPF_ENUM_FN
@@ -5400,6 +5831,12 @@
 	BPF_F_ZERO_CSUM_TX		= (1ULL << 1),
 	BPF_F_DONT_FRAGMENT		= (1ULL << 2),
 	BPF_F_SEQ_NUMBER		= (1ULL << 3),
+	BPF_F_NO_TUNNEL_KEY		= (1ULL << 4),
+};
+
+/* BPF_FUNC_skb_get_tunnel_key flags. */
+enum {
+	BPF_F_TUNINFO_FLAGS		= (1ULL << 4),
 };
 
 /* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and
@@ -5434,6 +5871,8 @@
 	BPF_F_ADJ_ROOM_ENCAP_L4_UDP	= (1ULL << 4),
 	BPF_F_ADJ_ROOM_NO_CSUM_RESET	= (1ULL << 5),
 	BPF_F_ADJ_ROOM_ENCAP_L2_ETH	= (1ULL << 6),
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV4	= (1ULL << 7),
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV6	= (1ULL << 8),
 };
 
 enum {
@@ -5591,8 +6030,15 @@
 	};
 	__u8 tunnel_tos;
 	__u8 tunnel_ttl;
-	__u16 tunnel_ext;	/* Padding, future use. */
+	union {
+		__u16 tunnel_ext;	/* compat */
+		__be16 tunnel_flags;
+	};
 	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
 };
 
 /* user accessible mirror of in-kernel xfrm_state.
@@ -5631,6 +6077,11 @@
 	 *    represented by BPF_REDIRECT above).
 	 */
 	BPF_LWT_REROUTE = 128,
+	/* BPF_FLOW_DISSECTOR_CONTINUE: used by BPF_PROG_TYPE_FLOW_DISSECTOR
+	 *   to indicate that no custom dissection was performed, and
+	 *   fallback to standard dissector is requested.
+	 */
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
 };
 
 struct bpf_sock {
@@ -5876,6 +6327,8 @@
 	__u64 run_cnt;
 	__u64 recursion_misses;
 	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
 } __attribute__((aligned(8)));
 
 struct bpf_map_info {
@@ -5927,11 +6380,26 @@
 		struct {
 			__aligned_u64 target_name; /* in/out: target_name buffer ptr */
 			__u32 target_name_len;	   /* in/out: target_name buffer len */
+
+			/* If the iter specific field is 32 bits, it can be put
+			 * in the first or second union. Otherwise it should be
+			 * put in the second union.
+			 */
 			union {
 				struct {
 					__u32 map_id;
 				} map;
 			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
 		} iter;
 		struct  {
 			__u32 netns_ino;
@@ -5940,6 +6408,9 @@
 		struct {
 			__u32 ifindex;
 		} xdp;
+		struct {
+			__u32 map_id;
+		} struct_ops;
 	};
 } __attribute__((aligned(8)));
 
@@ -6050,6 +6521,7 @@
 				 * the outgoing header has not
 				 * been written yet.
 				 */
+	__u64 skb_hwtstamp;
 };
 
 /* Definitions for bpf_sock_ops_cb_flags */
@@ -6335,6 +6807,7 @@
 enum {
 	BPF_FIB_LOOKUP_DIRECT  = (1U << 0),
 	BPF_FIB_LOOKUP_OUTPUT  = (1U << 1),
+	BPF_FIB_LOOKUP_SKIP_NEIGH = (1U << 2),
 };
 
 enum {
@@ -6487,6 +6960,36 @@
 	__u64 :64;
 } __attribute__((aligned(8)));
 
+struct bpf_dynptr {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_list_head {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_list_node {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_rb_root {
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_rb_node {
+	__u64 :64;
+	__u64 :64;
+	__u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_refcount {
+	__u32 :32;
+} __attribute__((aligned(4)));
+
 struct bpf_sysctl {
 	__u32	write;		/* Sysctl is being read (= 0) or written (= 1).
 				 * Allows 1,2,4-byte read, but no write.
@@ -6578,6 +7081,7 @@
 	BPF_CORE_TYPE_SIZE = 9,              /* type size in bytes */
 	BPF_CORE_ENUMVAL_EXISTS = 10,        /* enum value existence in target kernel */
 	BPF_CORE_ENUMVAL_VALUE = 11,         /* enum value integer value */
+	BPF_CORE_TYPE_MATCHES = 12,          /* type match in target kernel */
 };
 
 /*
@@ -6635,5 +7139,22 @@
 	enum bpf_core_relo_kind kind;
 };
 
+/*
+ * Flags to control bpf_timer_start() behaviour.
+ *     - BPF_F_TIMER_ABS: Timeout passed is absolute time, by default it is
+ *       relative to current time.
+ */
+enum {
+	BPF_F_TIMER_ABS = (1ULL << 0),
+};
+
+/* BPF numbers iterator state */
+struct bpf_iter_num {
+	/* opaque iterator state; having __u64 here allows to preserve correct
+	 * alignment requirements in vmlinux.h, generated from BTF
+	 */
+	__u64 __opaque[1];
+} __attribute__((aligned(8)));
+
 #endif /* _UAPI__LINUX_BPF_H__ */
 )********"
diff --git a/src/cc/export/helpers.h b/src/cc/export/helpers.h
index 7ede57a..8e3c13d 100644
--- a/src/cc/export/helpers.h
+++ b/src/cc/export/helpers.h
@@ -231,6 +231,8 @@
   void (*ringbuf_discard) (void *, u64); \
   /* map.ringbuf_submit(data, flags) */ \
   void (*ringbuf_submit) (void *, u64); \
+  /* map.ringbuf_query(flags) */ \
+  u64 (*ringbuf_query) (u64); \
   u32 max_entries; \
 }; \
 __attribute__((section("maps/ringbuf"))) \
@@ -390,7 +392,7 @@
 #define BPF_CPUMAP(_name, _max_entries) \
   BPF_XDP_REDIRECT_MAP("cpumap", u32, _name, _max_entries)
 
-#define BPF_XSKMAP(_name, _max_entries) \
+#define _BPF_XSKMAP(_name, _max_entries, _pinned) \
 struct _name##_table_t { \
   u32 key; \
   int leaf; \
@@ -399,8 +401,12 @@
   u64 (*redirect_map) (int, int); \
   u32 max_entries; \
 }; \
-__attribute__((section("maps/xskmap"))) \
+__attribute__((section("maps/xskmap" _pinned))) \
 struct _name##_table_t _name = { .max_entries = (_max_entries) }
+#define BPF_XSKMAP2(_name, _max_entries) _BPF_XSKMAP(_name, _max_entries, "")
+#define BPF_XSKMAP3(_name, _max_entries, _pinned) _BPF_XSKMAP(_name, _max_entries, ":" _pinned)
+#define BPF_XSKMAPX(_1, _2, _3, NAME, ...) NAME
+#define BPF_XSKMAP(...) BPF_XSKMAPX(__VA_ARGS__, BPF_XSKMAP3, BPF_XSKMAP2)(__VA_ARGS__)
 
 #define BPF_ARRAY_OF_MAPS(_name, _inner_map_name, _max_entries) \
   BPF_TABLE("array_of_maps$" _inner_map_name, int, int, _name, _max_entries)
@@ -545,8 +551,8 @@
   (void *) BPF_FUNC_probe_read_str;
 int bpf_trace_printk(const char *fmt, ...) asm("llvm.bpf.extra");
 static inline __attribute__((always_inline))
-void bpf_tail_call_(u64 map_fd, void *ctx, int index) {
-  ((void (*)(void *, u64, int))BPF_FUNC_tail_call)(ctx, map_fd, index);
+void bpf_tail_call_(void *map_fd, void *ctx, int index) {
+  ((void (*)(void *, u64, int))BPF_FUNC_tail_call)(ctx, (u64)map_fd, index);
 }
 static int (*bpf_clone_redirect)(void *ctx, int ifindex, u32 flags) =
   (void *) BPF_FUNC_clone_redirect;
@@ -981,6 +987,55 @@
   (void *)BPF_FUNC_skb_set_tstamp;
 static long (*bpf_ima_file_hash)(struct file *file, void *dst, __u32 size) =
   (void *)BPF_FUNC_ima_file_hash;
+static void *(*bpf_kptr_xchg)(void *map_value, void *ptr) = (void *)BPF_FUNC_kptr_xchg;
+static void *(*bpf_map_lookup_percpu_elem)(void *map, const void *key, __u32 cpu) =
+  (void *)BPF_FUNC_map_lookup_percpu_elem;
+
+struct mptcp_sock;
+struct bpf_dynptr;
+struct iphdr;
+struct ipv6hdr;
+struct tcphdr;
+static struct mptcp_sock *(*bpf_skc_to_mptcp_sock)(void *sk) =
+  (void *)BPF_FUNC_skc_to_mptcp_sock;
+static long (*bpf_dynptr_from_mem)(void *data, __u32 size, __u64 flags,
+				   struct bpf_dynptr *ptr) =
+  (void *)BPF_FUNC_dynptr_from_mem;
+static long (*bpf_ringbuf_reserve_dynptr)(void *ringbuf, __u32 size, __u64 flags,
+					  struct bpf_dynptr *ptr) =
+  (void *)BPF_FUNC_ringbuf_reserve_dynptr;
+static void (*bpf_ringbuf_submit_dynptr)(struct bpf_dynptr *ptr, __u64 flags) =
+  (void *)BPF_FUNC_ringbuf_submit_dynptr;
+static void (*bpf_ringbuf_discard_dynptr)(struct bpf_dynptr *ptr, __u64 flags) =
+  (void *)BPF_FUNC_ringbuf_discard_dynptr;
+static long (*bpf_dynptr_read)(void *dst, __u32 len, const struct bpf_dynptr *src, __u32 offset,
+			       __u64 flags) =
+  (void *)BPF_FUNC_dynptr_read;
+static long (*bpf_dynptr_write)(const struct bpf_dynptr *dst, __u32 offset, void *src, __u32 len,
+				__u64 flags) =
+  (void *)BPF_FUNC_dynptr_write;
+static void *(*bpf_dynptr_data)(const struct bpf_dynptr *ptr, __u32 offset, __u32 len) =
+  (void *)BPF_FUNC_dynptr_data;
+static __s64 (*bpf_tcp_raw_gen_syncookie_ipv4)(struct iphdr *iph, struct tcphdr *th,
+					       __u32 th_len) =
+  (void *)BPF_FUNC_tcp_raw_gen_syncookie_ipv4;
+static __s64 (*bpf_tcp_raw_gen_syncookie_ipv6)(struct ipv6hdr *iph, struct tcphdr *th,
+					       __u32 th_len) =
+  (void *)BPF_FUNC_tcp_raw_gen_syncookie_ipv6;
+static long (*bpf_tcp_raw_check_syncookie_ipv4)(struct iphdr *iph, struct tcphdr *th) =
+  (void *)BPF_FUNC_tcp_raw_check_syncookie_ipv4;
+static long (*bpf_tcp_raw_check_syncookie_ipv6)(struct ipv6hdr *iph, struct tcphdr *th) =
+  (void *)BPF_FUNC_tcp_raw_check_syncookie_ipv6;
+
+static __u64 (*bpf_ktime_get_tai_ns)(void) = (void *)BPF_FUNC_ktime_get_tai_ns;
+static long (*bpf_user_ringbuf_drain)(void *map, void *callback_fn, void *ctx, __u64 flags) =
+  (void *)BPF_FUNC_user_ringbuf_drain;
+
+struct cgroup;
+static void *(*bpf_cgrp_storage_get)(void *map, struct cgroup *cgroup, void *value, __u64 flags) =
+  (void *)BPF_FUNC_cgrp_storage_get;
+static long (*bpf_cgrp_storage_delete)(void *map, struct cgroup *cgroup) =
+  (void *)BPF_FUNC_cgrp_storage_delete;
 
 /* llvm builtin functions that eBPF C program may use to
  * emit BPF_LD_ABS and BPF_LD_IND instructions
@@ -1240,6 +1295,12 @@
 #elif defined(__TARGET_ARCH_mips)
 #define bpf_target_mips
 #define bpf_target_defined
+#elif defined(__TARGET_ARCH_riscv64)
+#define bpf_target_riscv64
+#define bpf_target_defined
+#elif defined(__TARGET_ARCH_loongarch)
+#define bpf_target_loongarch
+#define bpf_target_defined
 #else
 #undef bpf_target_defined
 #endif
@@ -1256,6 +1317,10 @@
 #define bpf_target_powerpc
 #elif defined(__mips__)
 #define bpf_target_mips
+#elif defined(__riscv) && (__riscv_xlen == 64)
+#define bpf_target_riscv64
+#elif defined(__loongarch__)
+#define bpf_target_loongarch
 #endif
 #endif
 
@@ -1316,6 +1381,32 @@
 #define PT_REGS_RC(x) ((x)->regs[2])
 #define PT_REGS_SP(x) ((x)->regs[29])
 #define PT_REGS_IP(x) ((x)->cp0_epc)
+#elif defined(bpf_target_riscv64)
+/* riscv64 provides struct user_pt_regs instead of struct pt_regs to userspace */
+#define __PT_REGS_CAST(x) ((const struct user_regs_struct *)(x))
+#define PT_REGS_PARM1(x) (__PT_REGS_CAST(x)->a0)
+#define PT_REGS_PARM2(x) (__PT_REGS_CAST(x)->a1)
+#define PT_REGS_PARM3(x) (__PT_REGS_CAST(x)->a2)
+#define PT_REGS_PARM4(x) (__PT_REGS_CAST(x)->a3)
+#define PT_REGS_PARM5(x) (__PT_REGS_CAST(x)->a4)
+#define PT_REGS_PARM6(x) (__PT_REGS_CAST(x)->a5)
+#define PT_REGS_RET(x) (__PT_REGS_CAST(x)->ra)
+#define PT_REGS_FP(x) (__PT_REGS_CAST(x)->s0) /* Works only with CONFIG_FRAME_POINTER */
+#define PT_REGS_RC(x) (__PT_REGS_CAST(x)->a0)
+#define PT_REGS_SP(x) (__PT_REGS_CAST(x)->sp)
+#define PT_REGS_IP(x) (__PT_REGS_CAST(x)->pc)
+#elif defined(bpf_target_loongarch)
+#define PT_REGS_PARM1(x) ((x)->regs[4])
+#define PT_REGS_PARM2(x) ((x)->regs[5])
+#define PT_REGS_PARM3(x) ((x)->regs[6])
+#define PT_REGS_PARM4(x) ((x)->regs[7])
+#define PT_REGS_PARM5(x) ((x)->regs[8])
+#define PT_REGS_PARM6(x) ((x)->regs[9])
+#define PT_REGS_RET(x) ((x)->regs[1])
+#define PT_REGS_FP(x) ((x)->regs[22]) /* Works only with CONFIG_FRAME_POINTER */
+#define PT_REGS_RC(x) ((x)->regs[4])
+#define PT_REGS_SP(x) ((x)->regs[3])
+#define PT_REGS_IP(x) ((x)->csr_era)
 #else
 #error "bcc does not support this platform yet"
 #endif
@@ -1390,10 +1481,16 @@
 static int ____##name(unsigned long long *ctx, ##args)
 
 #define KFUNC_PROBE(event, args...) \
-        BPF_PROG(kfunc__ ## event, ##args)
+        BPF_PROG(kfunc__vmlinux__ ## event, ##args)
 
 #define KRETFUNC_PROBE(event, args...) \
-        BPF_PROG(kretfunc__ ## event, ##args)
+        BPF_PROG(kretfunc__vmlinux__ ## event, ##args)
+
+#define MODULE_KFUNC_PROBE(module, event, args...) \
+        BPF_PROG(kfunc__ ## module ## __ ## event, ##args)
+
+#define MODULE_KRETFUNC_PROBE(module, event, args...) \
+        BPF_PROG(kretfunc__ ## module ## __ ## event, ##args)
 
 #define KMOD_RET(event, args...) \
         BPF_PROG(kmod_ret__ ## event, ##args)
diff --git a/src/cc/frontends/clang/CMakeLists.txt b/src/cc/frontends/clang/CMakeLists.txt
index a6228fc..f45365f 100644
--- a/src/cc/frontends/clang/CMakeLists.txt
+++ b/src/cc/frontends/clang/CMakeLists.txt
@@ -9,4 +9,5 @@
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBCC_BACKUP_COMPILE='${BCC_BACKUP_COMPILE}'")
 endif()
 
-add_library(clang_frontend STATIC loader.cc b_frontend_action.cc tp_frontend_action.cc kbuild_helper.cc ../../common.cc)
+add_library(clang_frontend-objects OBJECT loader.cc b_frontend_action.cc tp_frontend_action.cc kbuild_helper.cc)
+add_library(clang_frontend STATIC $<TARGET_OBJECTS:clang_frontend-objects>)
diff --git a/src/cc/frontends/clang/arch_helper.h b/src/cc/frontends/clang/arch_helper.h
index 7704fd0..c6bd5be 100644
--- a/src/cc/frontends/clang/arch_helper.h
+++ b/src/cc/frontends/clang/arch_helper.h
@@ -23,6 +23,8 @@
   BCC_ARCH_S390X,
   BCC_ARCH_ARM64,
   BCC_ARCH_MIPS,
+  BCC_ARCH_RISCV64,
+  BCC_ARCH_LOONGARCH,
   BCC_ARCH_X86
 } bcc_arch_t;
 
@@ -46,6 +48,10 @@
     return fn(BCC_ARCH_ARM64, for_syscall);
 #elif defined(__mips__)
     return fn(BCC_ARCH_MIPS, for_syscall);
+#elif defined(__riscv) && (__riscv_xlen == 64)
+    return fn(BCC_ARCH_RISCV64, for_syscall);
+#elif defined(__loongarch__)
+    return fn(BCC_ARCH_LOONGARCH, for_syscall);
 #else
     return fn(BCC_ARCH_X86, for_syscall);
 #endif
@@ -64,6 +70,10 @@
     return fn(BCC_ARCH_ARM64, for_syscall);
   } else if (!strcmp(archenv, "mips")) {
     return fn(BCC_ARCH_MIPS, for_syscall);
+  } else if (!strcmp(archenv, "riscv64")) {
+    return fn(BCC_ARCH_RISCV64, for_syscall);
+  } else if (!strcmp(archenv, "loongarch")) {
+    return fn(BCC_ARCH_LOONGARCH, for_syscall);
   } else {
     return fn(BCC_ARCH_X86, for_syscall);
   }
diff --git a/src/cc/frontends/clang/b_frontend_action.cc b/src/cc/frontends/clang/b_frontend_action.cc
index 9b2853a..df0ff5d 100644
--- a/src/cc/frontends/clang/b_frontend_action.cc
+++ b/src/cc/frontends/clang/b_frontend_action.cc
@@ -51,15 +51,26 @@
 const char *calling_conv_regs_ppc[] = {"gpr[3]", "gpr[4]", "gpr[5]",
                                        "gpr[6]", "gpr[7]", "gpr[8]"};
 
-const char *calling_conv_regs_s390x[] = {"gprs[2]", "gprs[3]", "gprs[4]",
+const char *calling_conv_regs_s390x[] = { "gprs[2]", "gprs[3]", "gprs[4]",
+					 "gprs[5]", "gprs[6]" };
+const char *calling_conv_syscall_regs_s390x[] = { "orig_gpr2", "gprs[3]", "gprs[4]",
 					 "gprs[5]", "gprs[6]" };
 
 const char *calling_conv_regs_arm64[] = {"regs[0]", "regs[1]", "regs[2]",
                                        "regs[3]", "regs[4]", "regs[5]"};
+const char *calling_conv_syscall_regs_arm64[] = {"orig_x0", "regs[1]", "regs[2]",
+                                       "regs[3]", "regs[4]", "regs[5]"};
 
 const char *calling_conv_regs_mips[] = {"regs[4]", "regs[5]", "regs[6]",
                                        "regs[7]", "regs[8]", "regs[9]"};
 
+const char *calling_conv_regs_riscv64[] = {"a0", "a1", "a2",
+                                       "a3", "a4", "a5"};
+
+const char *calling_conv_regs_loongarch[] = {"regs[4]", "regs[5]", "regs[6]",
+					     "regs[7]", "regs[8]", "regs[9]"};
+
+
 void *get_call_conv_cb(bcc_arch_t arch, bool for_syscall)
 {
   const char **ret;
@@ -71,13 +82,23 @@
       break;
     case BCC_ARCH_S390X:
       ret = calling_conv_regs_s390x;
+      if (for_syscall)
+        ret = calling_conv_syscall_regs_s390x;
       break;
     case BCC_ARCH_ARM64:
       ret = calling_conv_regs_arm64;
+      if (for_syscall)
+        ret = calling_conv_syscall_regs_arm64;
       break;
     case BCC_ARCH_MIPS:
       ret = calling_conv_regs_mips;
       break;
+    case BCC_ARCH_RISCV64:
+      ret = calling_conv_regs_riscv64;
+      break;
+    case BCC_ARCH_LOONGARCH:
+      ret = calling_conv_regs_loongarch;
+      break;
     default:
       if (for_syscall)
         ret = calling_conv_syscall_regs_x86;
@@ -95,6 +116,13 @@
   return ret;
 }
 
+const char *pt_regs_syscall_regs(void) {
+  const char **calling_conv_regs;
+  // Equivalent of PT_REGS_SYSCALL_REGS(ctx) ((struct pt_regs *)PT_REGS_PARM1(ctx))
+  calling_conv_regs = (const char **)run_arch_callback(get_call_conv_cb, false);
+  return calling_conv_regs[0];
+}
+
 /* Use resolver only once per translation */
 static void *kresolver = NULL;
 static void *get_symbol_resolver(void) {
@@ -196,7 +224,7 @@
 
     if (!track_helpers_)
       return false;
-    if (VarDecl *V = dyn_cast<VarDecl>(E->getCalleeDecl()))
+    if (VarDecl *V = dyn_cast_or_null<VarDecl>(E->getCalleeDecl()))
       needs_probe_ = V->getName() == "bpf_get_current_task";
     return false;
   }
@@ -330,7 +358,7 @@
   C(C), rewriter_(rewriter), m_(m), ctx_(nullptr), track_helpers_(track_helpers),
   addrof_stmt_(nullptr), is_addrof_(false) {
   const char **calling_conv_regs = get_call_conv();
-  has_overlap_kuaddr_ = calling_conv_regs == calling_conv_regs_s390x;
+  cannot_fall_back_safely = (calling_conv_regs == calling_conv_regs_s390x || calling_conv_regs == calling_conv_regs_riscv64);
 }
 
 bool ProbeVisitor::assignsExtPtr(Expr *E, int *nbDerefs) {
@@ -408,8 +436,12 @@
 }
 
 bool ProbeVisitor::VisitCallExpr(CallExpr *Call) {
+  Decl *decl = Call->getCalleeDecl();
+  if (decl == nullptr)
+      return true;
+
   // Skip bpf_probe_read for the third argument if it is an AddrOf.
-  if (VarDecl *V = dyn_cast<VarDecl>(Call->getCalleeDecl())) {
+  if (VarDecl *V = dyn_cast<VarDecl>(decl)) {
     if (V->getName() == "bpf_probe_read" && Call->getNumArgs() >= 3) {
       const Expr *E = Call->getArg(2)->IgnoreParenCasts();
       whitelist_.insert(E);
@@ -417,7 +449,7 @@
     }
   }
 
-  if (FunctionDecl *F = dyn_cast<FunctionDecl>(Call->getCalleeDecl())) {
+  if (FunctionDecl *F = dyn_cast<FunctionDecl>(decl)) {
     if (F->hasBody()) {
       unsigned i = 0;
       for (auto arg : Call->arguments()) {
@@ -503,10 +535,10 @@
   memb_visited_.insert(E);
   string pre, post;
   pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));";
-  if (has_overlap_kuaddr_)
-    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)";
+  if (cannot_fall_back_safely)
+    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)";
   else
-    pre += " bpf_probe_read(&_val, sizeof(_val), (u64)";
+    pre += " bpf_probe_read(&_val, sizeof(_val), (void *)";
   post = "); _val; })";
   rewriter_.ReplaceText(expansionLoc(E->getOperatorLoc()), 1, pre);
   rewriter_.InsertTextAfterToken(expansionLoc(GET_ENDLOC(sub)), post);
@@ -567,10 +599,10 @@
   string base_type = base->getType()->getPointeeType().getAsString();
   string pre, post;
   pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));";
-  if (has_overlap_kuaddr_)
-    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)&";
+  if (cannot_fall_back_safely)
+    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)&";
   else
-    pre += " bpf_probe_read(&_val, sizeof(_val), (u64)&";
+    pre += " bpf_probe_read(&_val, sizeof(_val), (void *)&";
   post = rhs + "); _val; })";
   rewriter_.InsertText(expansionLoc(GET_BEGINLOC(E)), pre);
   rewriter_.ReplaceText(expansionRange(SourceRange(member, GET_ENDLOC(E))), post);
@@ -621,10 +653,10 @@
     return true;
 
   pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));";
-  if (has_overlap_kuaddr_)
-    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)((";
+  if (cannot_fall_back_safely)
+    pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)((";
   else
-    pre += " bpf_probe_read(&_val, sizeof(_val), (u64)((";
+    pre += " bpf_probe_read(&_val, sizeof(_val), (void *)((";
   if (isMemberDereference(base)) {
     pre += "&";
     // If the base of the array subscript is a member dereference, we'll rewrite
@@ -697,7 +729,7 @@
 
 SourceRange
 ProbeVisitor::expansionRange(SourceRange range) {
-#if LLVM_MAJOR_VERSION >= 7
+#if LLVM_VERSION_MAJOR >= 7
   return rewriter_.getSourceMgr().getExpansionRange(range).getAsRange();
 #else
   return rewriter_.getSourceMgr().getExpansionRange(range);
@@ -718,57 +750,65 @@
 BTypeVisitor::BTypeVisitor(ASTContext &C, BFrontendAction &fe)
     : C(C), diag_(C.getDiagnostics()), fe_(fe), rewriter_(fe.rewriter()), out_(llvm::errs()) {
   const char **calling_conv_regs = get_call_conv();
-  has_overlap_kuaddr_ = calling_conv_regs == calling_conv_regs_s390x;
+  cannot_fall_back_safely = (calling_conv_regs == calling_conv_regs_s390x || calling_conv_regs == calling_conv_regs_riscv64);
 }
 
 void BTypeVisitor::genParamDirectAssign(FunctionDecl *D, string& preamble,
                                         const char **calling_conv_regs) {
-  for (size_t idx = 0; idx < fn_args_.size(); idx++) {
+  for (size_t idx = 1; idx < fn_args_.size(); idx++) {
     ParmVarDecl *arg = fn_args_[idx];
 
-    if (idx >= 1) {
+    if (arg->isUsed()) {
       // Move the args into a preamble section where the same params are
       // declared and initialized from pt_regs.
-      // Todo: this init should be done only when the program requests it.
+      // This init is only performed when requested by the program.
       string text = rewriter_.getRewrittenText(expansionRange(arg->getSourceRange()));
       arg->addAttr(UnavailableAttr::CreateImplicit(C, "ptregs"));
       size_t d = idx - 1;
       const char *reg = calling_conv_regs[d];
-      preamble += " " + text + " = " + fn_args_[0]->getName().str() + "->" +
-                  string(reg) + ";";
+      preamble += " " + text + " = (" + arg->getType().getAsString() + ")" +
+                  fn_args_[0]->getName().str() + "->" + string(reg) + ";";
     }
   }
 }
 
 void BTypeVisitor::genParamIndirectAssign(FunctionDecl *D, string& preamble,
                                           const char **calling_conv_regs) {
-  string new_ctx;
+  string tmp_preamble;
+  bool hasUsed = false;
+  ParmVarDecl *arg = fn_args_[0];
+  string new_ctx = "__" + arg->getName().str();
 
-  for (size_t idx = 0; idx < fn_args_.size(); idx++) {
-    ParmVarDecl *arg = fn_args_[idx];
+  for (size_t idx = 1; idx < fn_args_.size(); idx++) {
+    arg = fn_args_[idx];
 
-    if (idx == 0) {
-      new_ctx = "__" + arg->getName().str();
-      preamble += " struct pt_regs * " + new_ctx + " = " +
-                  arg->getName().str() + "->" +
-                  string(calling_conv_regs[0]) + ";";
-    } else {
+    if (arg->isUsed()) {
       // Move the args into a preamble section where the same params are
       // declared and initialized from pt_regs.
-      // Todo: this init should be done only when the program requests it.
+      // This init is only performed when requested by the program.
+      hasUsed = true;
       string text = rewriter_.getRewrittenText(expansionRange(arg->getSourceRange()));
       size_t d = idx - 1;
       const char *reg = calling_conv_regs[d];
-      preamble += "\n " + text + ";";
-      if (has_overlap_kuaddr_)
-        preamble += " bpf_probe_read_kernel";
+      tmp_preamble += "\n " + text + ";";
+      if (cannot_fall_back_safely)
+        tmp_preamble += " bpf_probe_read_kernel";
       else
-        preamble += " bpf_probe_read";
-      preamble += "(&" + arg->getName().str() + ", sizeof(" +
+        tmp_preamble += " bpf_probe_read";
+      tmp_preamble += "(&" + arg->getName().str() + ", sizeof(" +
                   arg->getName().str() + "), &" + new_ctx + "->" +
                   string(reg) + ");";
     }
   }
+
+  arg = fn_args_[0];
+  if ( hasUsed || arg->isUsed()) {
+    preamble += " struct pt_regs * " + new_ctx + " = (void *)" +
+                arg->getName().str() + "->" +
+                string(pt_regs_syscall_regs()) + ";";
+  }
+
+  preamble += tmp_preamble;
 }
 
 void BTypeVisitor::rewriteFuncParam(FunctionDecl *D) {
@@ -786,7 +826,7 @@
     // For __x64_sys_* syscalls, this is always true, but we guard
     // it in case of "syscall__" for other architectures.
     if (is_syscall) {
-      preamble += "#if defined(CONFIG_ARCH_HAS_SYSCALL_WRAPPER) && !defined(__s390x__)\n";
+      preamble += "#if defined(CONFIG_ARCH_HAS_SYSCALL_WRAPPER)\n";
       genParamIndirectAssign(D, preamble, calling_conv_regs);
       preamble += "\n#else\n";
       genParamDirectAssign(D, preamble, calling_conv_regs);
@@ -944,7 +984,7 @@
           string arg0 = rewriter_.getRewrittenText(expansionRange(Call->getArg(0)->getSourceRange()));
           string args_other = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(1)),
                                                            GET_ENDLOC(Call->getArg(2)))));
-          txt = "bpf_perf_event_output(" + arg0 + ", bpf_pseudo_fd(1, " + fd + ")";
+          txt = "bpf_perf_event_output(" + arg0 + ", (void *)bpf_pseudo_fd(1, " + fd + ")";
           txt += ", CUR_CPU_IDENTIFIER, " + args_other + ")";
 
           // e.g.
@@ -973,7 +1013,7 @@
           string meta_len = rewriter_.getRewrittenText(expansionRange(Call->getArg(3)->getSourceRange()));
           txt = "bpf_perf_event_output(" +
             skb + ", " +
-            "bpf_pseudo_fd(1, " + fd + "), " +
+            "(void *)bpf_pseudo_fd(1, " + fd + "), " +
             "((__u64)" + skb_len + " << 32) | BPF_F_CURRENT_CPU, " +
             meta + ", " +
             meta_len + ");";
@@ -993,12 +1033,12 @@
           string keyp = rewriter_.getRewrittenText(expansionRange(Call->getArg(1)->getSourceRange()));
           string flag = rewriter_.getRewrittenText(expansionRange(Call->getArg(2)->getSourceRange()));
           txt = "bpf_" + string(memb_name) + "(" + ctx + ", " +
-            "bpf_pseudo_fd(1, " + fd + "), " + keyp + ", " + flag + ");";
+            "(void *)bpf_pseudo_fd(1, " + fd + "), " + keyp + ", " + flag + ");";
         } else if (memb_name == "ringbuf_output") {
           string name = string(Ref->getDecl()->getName());
           string args = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(0)),
                                                            GET_ENDLOC(Call->getArg(2)))));
-          txt = "bpf_ringbuf_output(bpf_pseudo_fd(1, " + fd + ")";
+          txt = "bpf_ringbuf_output((void *)bpf_pseudo_fd(1, " + fd + ")";
           txt += ", " + args + ")";
 
           // e.g.
@@ -1020,13 +1060,18 @@
         } else if (memb_name == "ringbuf_reserve") {
           string name = string(Ref->getDecl()->getName());
           string arg0 = rewriter_.getRewrittenText(expansionRange(Call->getArg(0)->getSourceRange()));
-          txt = "bpf_ringbuf_reserve(bpf_pseudo_fd(1, " + fd + ")";
+          txt = "bpf_ringbuf_reserve((void *)bpf_pseudo_fd(1, " + fd + ")";
           txt += ", " + arg0 + ", 0)"; // Flags in reserve are meaningless
         } else if (memb_name == "ringbuf_discard") {
           string name = string(Ref->getDecl()->getName());
           string args = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(0)),
                                                            GET_ENDLOC(Call->getArg(1)))));
           txt = "bpf_ringbuf_discard(" + args + ")";
+        } else if (memb_name == "ringbuf_query") {
+          string name = string(Ref->getDecl()->getName());
+          string arg0 = rewriter_.getRewrittenText(expansionRange(Call->getArg(0)->getSourceRange()));
+          txt = "bpf_ringbuf_query((void *)bpf_pseudo_fd(1, " + fd + ")";
+          txt += ", " + arg0 + ")";
         } else if (memb_name == "ringbuf_submit") {
           string name = string(Ref->getDecl()->getName());
           string args = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(0)),
@@ -1342,7 +1387,7 @@
 
 SourceRange
 BTypeVisitor::expansionRange(SourceRange range) {
-#if LLVM_MAJOR_VERSION >= 7
+#if LLVM_VERSION_MAJOR >= 7
   return rewriter_.getSourceMgr().getExpansionRange(range).getAsRange();
 #else
   return rewriter_.getSourceMgr().getExpansionRange(range);
@@ -1365,7 +1410,7 @@
   unsigned idx = FDecl->getFieldIndex();
 
   if (auto I = dyn_cast_or_null<InitListExpr>(Decl->getInit())) {
-#if LLVM_MAJOR_VERSION >= 8
+#if LLVM_VERSION_MAJOR >= 8
     Expr::EvalResult res;
     if (I->getInit(idx)->EvaluateAsInt(res, C)) {
       return res.Val.getInt().getExtValue();
@@ -1764,7 +1809,7 @@
     false);
 
   rewriter_->getEditBuffer(rewriter_->getSourceMgr().getMainFileID()).InsertTextAfter(
-#if LLVM_MAJOR_VERSION >= 12
+#if LLVM_VERSION_MAJOR >= 12
     rewriter_->getSourceMgr().getBufferOrFake(rewriter_->getSourceMgr().getMainFileID()).getBufferSize(),
 #else
     rewriter_->getSourceMgr().getBuffer(rewriter_->getSourceMgr().getMainFileID())->getBufferSize(),
@@ -1778,7 +1823,7 @@
 
   if (flags_ & DEBUG_PREPROCESSOR)
     rewriter_->getEditBuffer(rewriter_->getSourceMgr().getMainFileID()).write(llvm::errs());
-#if LLVM_MAJOR_VERSION >= 9
+#if LLVM_VERSION_MAJOR >= 9
   llvm::raw_string_ostream tmp_os(mod_src_);
   rewriter_->getEditBuffer(rewriter_->getSourceMgr().getMainFileID())
       .write(tmp_os);
diff --git a/src/cc/frontends/clang/b_frontend_action.h b/src/cc/frontends/clang/b_frontend_action.h
index 2256459..c2881d6 100644
--- a/src/cc/frontends/clang/b_frontend_action.h
+++ b/src/cc/frontends/clang/b_frontend_action.h
@@ -90,7 +90,7 @@
   std::vector<clang::ParmVarDecl *> fn_args_;
   std::set<clang::Expr *> visited_;
   std::string current_fn_;
-  bool has_overlap_kuaddr_;
+  bool cannot_fall_back_safely;
 };
 
 // Do a depth-first search to rewrite all pointers that need to be probed
@@ -130,7 +130,7 @@
   std::list<int> ptregs_returned_;
   const clang::Stmt *addrof_stmt_;
   bool is_addrof_;
-  bool has_overlap_kuaddr_;
+  bool cannot_fall_back_safely;
 };
 
 // A helper class to the frontend action, walks the decls
diff --git a/src/cc/frontends/clang/frontend_action_common.h b/src/cc/frontends/clang/frontend_action_common.h
index ec819f6..e6ca4d5 100644
--- a/src/cc/frontends/clang/frontend_action_common.h
+++ b/src/cc/frontends/clang/frontend_action_common.h
@@ -13,7 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if LLVM_MAJOR_VERSION >= 8
+#include <llvm/Config/llvm-config.h>
+
+#if LLVM_VERSION_MAJOR >= 8
 #define GET_BEGINLOC(E)  ((E)->getBeginLoc())
 #define GET_ENDLOC(E)  ((E)->getEndLoc())
 #else
diff --git a/src/cc/frontends/clang/kbuild_helper.cc b/src/cc/frontends/clang/kbuild_helper.cc
index 5c57c13..50e2da9 100644
--- a/src/cc/frontends/clang/kbuild_helper.cc
+++ b/src/cc/frontends/clang/kbuild_helper.cc
@@ -38,7 +38,7 @@
   //uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ -e s/sun4u/sparc64/ -e s/arm.*/arm/
   //               -e s/sa110/arm/ -e s/s390x/s390/ -e s/parisc64/parisc/
   //               -e s/ppc.*/powerpc/ -e s/mips.*/mips/ -e s/sh[234].*/sh/
-  //               -e s/aarch64.*/arm64/
+  //               -e s/aarch64.*/arm64/ -e s/loongarch.*/loongarch/
 
   string arch;
   const char *archenv = getenv("ARCH");
@@ -66,6 +66,10 @@
     arch = "powerpc";
   } else if (!arch.compare(0, 4, "mips")) {
     arch = "mips";
+  } else if (!arch.compare(0, 5, "riscv")) {
+    arch = "riscv";
+  } else if (!arch.compare(0, 9, "loongarch")) {
+    arch = "loongarch";
   } else if (!arch.compare(0, 2, "sh")) {
     arch = "sh";
   }
@@ -147,6 +151,14 @@
   return file_exists(PROC_KHEADERS_PATH);
 }
 
+static inline const char *get_tmp_dir() {
+  const char *tmpdir = getenv("TMPDIR");
+  if (tmpdir) {
+    return tmpdir;
+  }
+  return "/tmp";
+}
+
 static inline int extract_kheaders(const std::string &dirpath,
                                    const struct utsname &uname_data)
 {
@@ -165,7 +177,8 @@
     }
   }
 
-  snprintf(dirpath_tmp, sizeof(dirpath_tmp), "/tmp/kheaders-%s-XXXXXX", uname_data.release);
+  snprintf(dirpath_tmp, sizeof(dirpath_tmp), "%s/kheaders-%s-XXXXXX",
+           get_tmp_dir(), uname_data.release);
   if (mkdtemp(dirpath_tmp) == NULL) {
     ret = -1;
     goto cleanup;
@@ -207,7 +220,8 @@
   if (uname(&uname_data))
     return -errno;
 
-  snprintf(dirpath_tmp, 256, "/tmp/kheaders-%s", uname_data.release);
+  snprintf(dirpath_tmp, 256, "%s/kheaders-%s", get_tmp_dir(),
+           uname_data.release);
   dirpath = std::string(dirpath_tmp);
 
   if (file_exists(dirpath_tmp))
diff --git a/src/cc/frontends/clang/loader.cc b/src/cc/frontends/clang/loader.cc
index d0f4d88..5c65a46 100644
--- a/src/cc/frontends/clang/loader.cc
+++ b/src/cc/frontends/clang/loader.cc
@@ -179,7 +179,7 @@
                           const llvm::opt::ArgStringList &ccargs,
                           clang::DiagnosticsEngine &diags)
 {
-#if LLVM_MAJOR_VERSION >= 10
+#if LLVM_VERSION_MAJOR >= 10
   return clang::CompilerInvocation::CreateFromArgs(invocation, ccargs, diags);
 #else
   return clang::CompilerInvocation::CreateFromArgs(
@@ -284,7 +284,7 @@
   vector<string> kflags;
   if (kbuild_helper.get_flags(un.machine, &kflags))
     return -1;
-#if LLVM_MAJOR_VERSION >= 9
+#if LLVM_VERSION_MAJOR >= 9
   flags_cstr.push_back("-g");
   flags_cstr.push_back("-gdwarf-4");
 #else
@@ -360,6 +360,12 @@
     case BCC_ARCH_MIPS:
       ret = "mips64el-unknown-linux-gnuabi64";
       break;
+    case BCC_ARCH_RISCV64:
+      ret = "riscv64-unknown-linux-gnu";
+      break;
+    case BCC_ARCH_LOONGARCH:
+      ret = "loongarch64-unknown-linux-gnu";
+      break;
     default:
       ret = "x86_64-unknown-linux-gnu";
   }
@@ -406,7 +412,7 @@
   string target_triple = get_clang_target();
   driver::Driver drv("", target_triple, diags);
 
-#if LLVM_MAJOR_VERSION >= 4
+#if LLVM_VERSION_MAJOR >= 4
   if (target_triple == "x86_64-unknown-linux-gnu" || target_triple == "aarch64-unknown-linux-gnu")
     flags_cstr.push_back("-fno-jump-tables");
 #endif
diff --git a/src/cc/frontends/clang/tp_frontend_action.cc b/src/cc/frontends/clang/tp_frontend_action.cc
index 4562835..e908e88 100644
--- a/src/cc/frontends/clang/tp_frontend_action.cc
+++ b/src/cc/frontends/clang/tp_frontend_action.cc
@@ -53,8 +53,7 @@
 
 string TracepointTypeVisitor::GenerateTracepointStruct(
     SourceLocation loc, string const& category, string const& event) {
-  string format_file = "/sys/kernel/debug/tracing/events/" +
-    category + "/" + event + "/format";
+  string format_file = tracepoint_format_file(category, event);
   ifstream input(format_file.c_str());
   if (!input)
     return "";
diff --git a/src/cc/json_map_decl_visitor.cc b/src/cc/json_map_decl_visitor.cc
index 5389619..22ed03a 100644
--- a/src/cc/json_map_decl_visitor.cc
+++ b/src/cc/json_map_decl_visitor.cc
@@ -21,6 +21,7 @@
 #include <clang/AST/RecordLayout.h>
 #include <clang/AST/RecursiveASTVisitor.h>
 #include <llvm/ADT/StringExtras.h>
+#include <llvm/Config/llvm-config.h>
 #include "common.h"
 #include "table_desc.h"
 
@@ -80,7 +81,7 @@
   result_ += "[";
   TraverseDecl(F);
   if (const ConstantArrayType *T = dyn_cast<ConstantArrayType>(F->getType()))
-#if LLVM_MAJOR_VERSION >= 13
+#if LLVM_VERSION_MAJOR >= 13
     result_ += ", [" + toString(T->getSize(), 10, false) + "]";
 #else
     result_ += ", [" + T->getSize().toString(10, false) + "]";
diff --git a/src/cc/libbpf.c b/src/cc/libbpf.c
index c93f82f..fafc529 100644
--- a/src/cc/libbpf.c
+++ b/src/cc/libbpf.c
@@ -17,19 +17,23 @@
 #define _GNU_SOURCE
 #endif
 
+#include "libbpf.h"
+
 #include <arpa/inet.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <inttypes.h>
+#include <libgen.h>
 #include <limits.h>
 #include <linux/bpf.h>
 #include <linux/bpf_common.h>
+#include <linux/if_alg.h>
 #include <linux/if_packet.h>
-#include <linux/types.h>
 #include <linux/perf_event.h>
 #include <linux/pkt_cls.h>
 #include <linux/rtnetlink.h>
 #include <linux/sched.h>
+#include <linux/types.h>
 #include <linux/unistd.h>
 #include <linux/version.h>
 #include <net/ethernet.h>
@@ -38,7 +42,6 @@
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <libgen.h>
 #include <string.h>
 #include <sys/ioctl.h>
 #include <sys/resource.h>
@@ -46,9 +49,8 @@
 #include <sys/types.h>
 #include <sys/vfs.h>
 #include <unistd.h>
-#include <linux/if_alg.h>
 
-#include "libbpf.h"
+#include "bcc_zip.h"
 #include "perf_reader.h"
 
 // TODO: Remove this when CentOS 6 support is not needed anymore
@@ -298,6 +300,24 @@
   {"copy_from_user_task", "5.18"},
   {"skb_set_tstamp", "5.18"},
   {"ima_file_hash", "5.18"},
+  {"kptr_xchg", "5.19"},
+  {"map_lookup_percpu_elem", "5.19"},
+  {"skc_to_mptcp_sock", "5.19"},
+  {"dynptr_from_mem", "5.19"},
+  {"ringbuf_reserve_dynptr", "5.19"},
+  {"ringbuf_submit_dynptr", "5.19"},
+  {"ringbuf_discard_dynptr", "5.19"},
+  {"dynptr_read", "5.19"},
+  {"dynptr_write", "5.19"},
+  {"dynptr_data", "5.19"},
+  {"tcp_raw_gen_syncookie_ipv4", "6.0"},
+  {"tcp_raw_gen_syncookie_ipv6", "6.0"},
+  {"tcp_raw_check_syncookie_ipv4", "6.0"},
+  {"tcp_raw_check_syncookie_ipv6", "6.0"},
+  {"ktime_get_tai_ns", "6.1"},
+  {"user_ringbuf_drain", "6.1"},
+  {"cgrp_storage_get", "6.2"},
+  {"cgrp_storage_delete", "6.2"},
 };
 
 static uint64_t ptr_to_u64(void *ptr)
@@ -305,7 +325,7 @@
   return (uint64_t) (unsigned long) ptr;
 }
 
-static int libbpf_bpf_map_create(struct bpf_create_map_attr *create_attr)
+static int libbpf_bpf_map_create(struct bcc_create_map_attr *create_attr)
 {
   LIBBPF_OPTS(bpf_map_create_opts, p);
 
@@ -324,7 +344,7 @@
                         create_attr->value_size, create_attr->max_entries, &p);
 }
 
-int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
+int bcc_create_map_xattr(struct bcc_create_map_attr *attr, bool allow_rlimit)
 {
   unsigned name_len = attr->name ? strlen(attr->name) : 0;
   char map_name[BPF_OBJ_NAME_LEN] = {};
@@ -381,7 +401,7 @@
                    int key_size, int value_size,
                    int max_entries, int map_flags)
 {
-  struct bpf_create_map_attr attr = {};
+  struct bcc_create_map_attr attr = {};
 
   attr.map_type = map_type;
   attr.name = name;
@@ -617,83 +637,170 @@
 /*    fprintf(stderr, "failed to open fdinfo %s\n", strerror(errno));*/
     return -1;
   }
-  fgets(fmt, sizeof(fmt), f); // pos
-  fgets(fmt, sizeof(fmt), f); // flags
-  fgets(fmt, sizeof(fmt), f); // mnt_id
-  fgets(fmt, sizeof(fmt), f); // prog_type
-  fgets(fmt, sizeof(fmt), f); // prog_jited
-  fgets(fmt, sizeof(fmt), f); // prog_tag
-  fclose(f);
-  char *p = strchr(fmt, ':');
-  if (!p) {
-/*    fprintf(stderr, "broken fdinfo %s\n", fmt);*/
-    return -2;
-  }
   unsigned long long tag = 0;
-  sscanf(p + 1, "%llx", &tag);
-  *ptag = tag;
-  return 0;
+  // prog_tag: can appear in different lines
+  while (fgets(fmt, sizeof(fmt), f)) {
+    if (sscanf(fmt, "prog_tag:%llx", &tag) == 1) {
+      *ptag = tag;
+      fclose(f);
+      return 0;
+    }
+  }
+  fclose(f);
+  return -2;
 }
 
-static int libbpf_bpf_prog_load(const struct bpf_load_program_attr *load_attr,
+static int libbpf_bpf_prog_load(enum bpf_prog_type prog_type,
+                                const char *prog_name, const char *license,
+                                const struct bpf_insn *insns, size_t insn_cnt,
+                                struct bpf_prog_load_opts *opts,
                                 char *log_buf, size_t log_buf_sz)
 {
+
   LIBBPF_OPTS(bpf_prog_load_opts, p);
 
-  if (!load_attr || !log_buf != !log_buf_sz) {
+  if (!opts || !log_buf != !log_buf_sz) {
     errno = EINVAL;
     return -EINVAL;
   }
 
-  p.expected_attach_type = load_attr->expected_attach_type;
-  switch (load_attr->prog_type) {
+  p.expected_attach_type = opts->expected_attach_type;
+  switch (prog_type) {
   case BPF_PROG_TYPE_STRUCT_OPS:
   case BPF_PROG_TYPE_LSM:
-    p.attach_btf_id = load_attr->attach_btf_id;
+    p.attach_btf_id = opts->attach_btf_id;
     break;
   case BPF_PROG_TYPE_TRACING:
   case BPF_PROG_TYPE_EXT:
-    p.attach_btf_id = load_attr->attach_btf_id;
-    p.attach_prog_fd = load_attr->attach_prog_fd;
+    p.attach_btf_id = opts->attach_btf_id;
+    p.attach_prog_fd = opts->attach_prog_fd;
+    p.attach_btf_obj_fd = opts->attach_btf_obj_fd;
     break;
   default:
-    p.prog_ifindex = load_attr->prog_ifindex;
-    p.kern_version = load_attr->kern_version;
+    p.prog_ifindex = opts->prog_ifindex;
+    p.kern_version = opts->kern_version;
   }
-  p.log_level = load_attr->log_level;
+  p.log_level = opts->log_level;
   p.log_buf = log_buf;
   p.log_size = log_buf_sz;
-  p.prog_btf_fd = load_attr->prog_btf_fd;
-  p.func_info_rec_size = load_attr->func_info_rec_size;
-  p.func_info_cnt = load_attr->func_info_cnt;
-  p.func_info = load_attr->func_info;
-  p.line_info_rec_size = load_attr->line_info_rec_size;
-  p.line_info_cnt = load_attr->line_info_cnt;
-  p.line_info = load_attr->line_info;
-  p.prog_flags = load_attr->prog_flags;
+  p.prog_btf_fd = opts->prog_btf_fd;
+  p.func_info_rec_size = opts->func_info_rec_size;
+  p.func_info_cnt = opts->func_info_cnt;
+  p.func_info = opts->func_info;
+  p.line_info_rec_size = opts->line_info_rec_size;
+  p.line_info_cnt = opts->line_info_cnt;
+  p.line_info = opts->line_info;
+  p.prog_flags = opts->prog_flags;
 
-  return bpf_prog_load(load_attr->prog_type, load_attr->name, load_attr->license,
-                       load_attr->insns, load_attr->insns_cnt, &p);
+  return bpf_prog_load(prog_type, prog_name, license,
+                       insns, insn_cnt, &p);
 }
 
-int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
+#ifndef MINIMAL_LIBBPF
+static int find_btf_id(const char *module_name, const char *func_name,
+                       enum bpf_attach_type expected_attach_type, int *btf_fd)
+{
+  struct btf *vmlinux_btf = NULL, *module_btf = NULL;
+  struct bpf_btf_info info;
+  int err, fd, btf_id;
+  __u32 id = 0, len;
+  char name[64];
+
+  if (!module_name[0] || !strcmp(module_name, "vmlinux"))
+    return libbpf_find_vmlinux_btf_id(func_name, expected_attach_type);
+
+  while (true) {
+    err = bpf_btf_get_next_id(id, &id);
+    if (err) {
+      fprintf(stderr, "bpf_btf_get_next_id failed: %d\n", err);
+      return err;
+    }
+
+    fd = bpf_btf_get_fd_by_id(id);
+    if (fd < 0) {
+      err = fd;
+      fprintf(stderr, "bpf_btf_get_fd_by_id failed: %d\n", err);
+      return err;
+    }
+
+    len = sizeof(info);
+    memset(&info, 0, sizeof(info));
+    info.name = ptr_to_u64(name);
+    info.name_len = sizeof(name);
+
+    err = bpf_btf_get_info_by_fd(fd, &info, &len);
+    if (err) {
+      fprintf(stderr, "bpf_btf_get_info_by_fd failed: %d\n", err);
+      goto err_out;
+    }
+
+    if (!info.kernel_btf || strcmp(name, module_name)) {
+      close(fd);
+      continue;
+    }
+
+    vmlinux_btf = btf__load_vmlinux_btf();
+    err = libbpf_get_error(vmlinux_btf);
+    if (err) {
+      fprintf(stderr, "btf__load_vmlinux_btf failed: %d\n", err);
+      goto err_out;
+    }
+
+    module_btf = btf__load_module_btf(module_name, vmlinux_btf);
+    err = libbpf_get_error(vmlinux_btf);
+    if (err) {
+      fprintf(stderr, "btf__load_module_btf failed: %d\n", err);
+      goto err_out;
+    }
+
+    btf_id = btf__find_by_name_kind(module_btf, func_name, BTF_KIND_FUNC);
+    if (btf_id < 0) {
+      err = btf_id;
+      fprintf(stderr, "btf__find_by_name_kind failed: %d\n", err);
+      goto err_out;
+    }
+
+    btf__free(module_btf);
+    btf__free(vmlinux_btf);
+
+    *btf_fd = fd;
+    return btf_id;
+
+err_out:
+    btf__free(module_btf);
+    btf__free(vmlinux_btf);
+    close(fd);
+    *btf_fd = -1;
+    return err;
+  }
+
+  return -1;
+}
+#endif
+
+int bcc_prog_load_xattr(enum bpf_prog_type prog_type, const char *prog_name,
+                        const char *license, const struct bpf_insn *insns,
+                        struct bpf_prog_load_opts *opts, int prog_len,
                         char *log_buf, unsigned log_buf_size, bool allow_rlimit)
 {
-  unsigned name_len = attr->name ? strlen(attr->name) : 0;
-  char *tmp_log_buf = NULL, *attr_log_buf = NULL;
-  unsigned tmp_log_buf_size = 0, attr_log_buf_size = 0;
+  unsigned name_len = prog_name ? strlen(prog_name) : 0;
+  char *tmp_log_buf = NULL, *opts_log_buf = NULL;
+  unsigned tmp_log_buf_size = 0, opts_log_buf_size = 0;
   int ret = 0, name_offset = 0, expected_attach_type = 0;
-  char prog_name[BPF_OBJ_NAME_LEN] = {};
+  char new_prog_name[BPF_OBJ_NAME_LEN] = {};
+  char mod_name[64] = {};
+  char *mod_end;
+  int mod_len;
+  int fd = -1;
 
   unsigned insns_cnt = prog_len / sizeof(struct bpf_insn);
-  attr->insns_cnt = insns_cnt;
 
-  if (attr->log_level > 0) {
+  if (opts->log_level > 0) {
     if (log_buf_size > 0) {
       // Use user-provided log buffer if available.
       log_buf[0] = 0;
-      attr_log_buf = log_buf;
-      attr_log_buf_size = log_buf_size;
+      opts_log_buf = log_buf;
+      opts_log_buf_size = log_buf_size;
     } else {
       // Create and use temporary log buffer if user didn't provide one.
       tmp_log_buf_size = LOG_BUF_SIZE;
@@ -701,87 +808,95 @@
       if (!tmp_log_buf) {
         fprintf(stderr, "bpf: Failed to allocate temporary log buffer: %s\n\n",
                 strerror(errno));
-        attr->log_level = 0;
+        opts->log_level = 0;
       } else {
         tmp_log_buf[0] = 0;
-        attr_log_buf = tmp_log_buf;
-        attr_log_buf_size = tmp_log_buf_size;
+        opts_log_buf = tmp_log_buf;
+        opts_log_buf_size = tmp_log_buf_size;
       }
     }
   }
 
   if (name_len) {
-    if (strncmp(attr->name, "kprobe__", 8) == 0)
+    if (strncmp(prog_name, "kprobe__", 8) == 0)
       name_offset = 8;
-    else if (strncmp(attr->name, "kretprobe__", 11) == 0)
+    else if (strncmp(prog_name, "kretprobe__", 11) == 0)
       name_offset = 11;
-    else if (strncmp(attr->name, "tracepoint__", 12) == 0)
+    else if (strncmp(prog_name, "tracepoint__", 12) == 0)
       name_offset = 12;
-    else if (strncmp(attr->name, "raw_tracepoint__", 16) == 0)
+    else if (strncmp(prog_name, "raw_tracepoint__", 16) == 0)
       name_offset = 16;
-    else if (strncmp(attr->name, "kfunc__", 7) == 0) {
-      name_offset = 7;
+    else if (strncmp(prog_name, "kfunc__", 7) == 0) {
+      // kfunc__vmlinux__vfs_read
+      mod_end = strstr(prog_name + 7, "__");
+      mod_len = mod_end - prog_name - 7;
+      strncpy(mod_name, prog_name + 7, mod_len);
+      name_offset = 7 + mod_len + 2;
       expected_attach_type = BPF_TRACE_FENTRY;
-    } else if (strncmp(attr->name, "kmod_ret__", 10) == 0) {
+    } else if (strncmp(prog_name, "kmod_ret__", 10) == 0) {
       name_offset = 10;
       expected_attach_type = BPF_MODIFY_RETURN;
-    } else if (strncmp(attr->name, "kretfunc__", 10) == 0) {
-      name_offset = 10;
+    } else if (strncmp(prog_name, "kretfunc__", 10) == 0) {
+      // kretfunc__vmlinux__vfs_read
+      mod_end = strstr(prog_name + 10, "__");
+      mod_len = mod_end - prog_name - 10;
+      strncpy(mod_name, prog_name + 10, mod_len);
+      name_offset = 10 + mod_len + 2;
       expected_attach_type = BPF_TRACE_FEXIT;
-    } else if (strncmp(attr->name, "lsm__", 5) == 0) {
+    } else if (strncmp(prog_name, "lsm__", 5) == 0) {
       name_offset = 5;
       expected_attach_type = BPF_LSM_MAC;
-    } else if (strncmp(attr->name, "bpf_iter__", 10) == 0) {
+    } else if (strncmp(prog_name, "bpf_iter__", 10) == 0) {
       name_offset = 10;
       expected_attach_type = BPF_TRACE_ITER;
     }
 
-    if (attr->prog_type == BPF_PROG_TYPE_TRACING ||
-        attr->prog_type == BPF_PROG_TYPE_LSM) {
+    if (prog_type == BPF_PROG_TYPE_TRACING ||
+        prog_type == BPF_PROG_TYPE_LSM) {
 #ifdef MINIMAL_LIBBPF
       fprintf(stderr, "vmlinux BTF not supported in this build of libbpf\n");
       return -1;
 #else
-      ret = libbpf_find_vmlinux_btf_id(attr->name + name_offset,
-                                       expected_attach_type);
+      ret = find_btf_id(mod_name, prog_name + name_offset,
+                        expected_attach_type, &fd);
       if (ret == -EINVAL) {
-        fprintf(stderr, "bpf: vmlinux BTF is not found\n");
+        fprintf(stderr, "bpf: %s BTF is not found\n", mod_name);
         return ret;
       } else if (ret < 0) {
-        fprintf(stderr, "bpf: %s is not found in vmlinux BTF\n",
-                attr->name + name_offset);
+        fprintf(stderr, "bpf: %s is not found in %s BTF\n",
+                prog_name + name_offset, mod_name);
         return ret;
       }
 
-      attr->attach_btf_id = ret;
-      attr->expected_attach_type = expected_attach_type;
+      opts->attach_btf_obj_fd = fd == -1 ? 0 : fd;
+      opts->attach_btf_id = ret;
+      opts->expected_attach_type = expected_attach_type;
 #endif
     }
 
-    memcpy(prog_name, attr->name + name_offset,
+    memcpy(new_prog_name, prog_name + name_offset,
            min(name_len - name_offset, BPF_OBJ_NAME_LEN - 1));
-    attr->name = prog_name;
   }
 
-  ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+  ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, opts_log_buf, opts_log_buf_size);
 
   // func_info/line_info may not be supported in old kernels.
-  if (ret < 0 && attr->func_info && errno == EINVAL) {
-    attr->prog_btf_fd = 0;
-    attr->func_info = NULL;
-    attr->func_info_cnt = 0;
-    attr->func_info_rec_size = 0;
-    attr->line_info = NULL;
-    attr->line_info_cnt = 0;
-    attr->line_info_rec_size = 0;
-    ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+  if (ret < 0 && opts->func_info && errno == EINVAL) {
+    opts->prog_btf_fd = 0;
+    opts->func_info = NULL;
+    opts->func_info_cnt = 0;
+    opts->func_info_rec_size = 0;
+    opts->line_info = NULL;
+    opts->line_info_cnt = 0;
+    opts->line_info_rec_size = 0;
+    ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, opts_log_buf, opts_log_buf_size);
   }
 
   // BPF object name is not supported on older Kernels.
   // If we failed due to this, clear the name and try again.
   if (ret < 0 && name_len && (errno == E2BIG || errno == EINVAL)) {
-    prog_name[0] = '\0';
-    ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+    new_prog_name[0] = '\0';
+    ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, opts_log_buf, opts_log_buf_size);
   }
 
   if (ret < 0 && errno == EPERM) {
@@ -800,14 +915,14 @@
       rl.rlim_max = RLIM_INFINITY;
       rl.rlim_cur = rl.rlim_max;
       if (setrlimit(RLIMIT_MEMLOCK, &rl) == 0)
-        ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+        ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, opts_log_buf, opts_log_buf_size);
     }
   }
 
   if (ret < 0 && errno == E2BIG) {
     fprintf(stderr,
             "bpf: %s. Program %s too large (%u insns), at most %d insns\n\n",
-            strerror(errno), attr->name, insns_cnt, BPF_MAXINSNS);
+            strerror(errno), new_prog_name, insns_cnt, BPF_MAXINSNS);
     return -1;
   }
 
@@ -816,9 +931,9 @@
     // User has provided a log buffer.
     if (log_buf_size) {
       // If logging is not already enabled, enable it and do the syscall again.
-      if (attr->log_level == 0) {
-        attr->log_level = 1;
-        ret = libbpf_bpf_prog_load(attr, log_buf, log_buf_size);
+      if (opts->log_level == 0) {
+        opts->log_level = 1;
+        ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, log_buf, log_buf_size);
       }
       // Print the log message and return.
       bpf_print_hints(ret, log_buf);
@@ -832,8 +947,8 @@
     if (tmp_log_buf)
       free(tmp_log_buf);
     tmp_log_buf_size = LOG_BUF_SIZE;
-    if (attr->log_level == 0)
-      attr->log_level = 1;
+    if (opts->log_level == 0)
+      opts->log_level = 1;
     for (;;) {
       tmp_log_buf = malloc(tmp_log_buf_size);
       if (!tmp_log_buf) {
@@ -842,7 +957,7 @@
         goto return_result;
       }
       tmp_log_buf[0] = 0;
-      ret = libbpf_bpf_prog_load(attr, tmp_log_buf, tmp_log_buf_size);
+      ret = libbpf_bpf_prog_load(prog_type, new_prog_name, license, insns, insns_cnt, opts, tmp_log_buf, tmp_log_buf_size);
       if (ret < 0 && errno == ENOSPC) {
         // Temporary buffer size is not enough. Double it and try again.
         free(tmp_log_buf);
@@ -856,7 +971,7 @@
 
   // Check if we should print the log message if log_level is not 0,
   // either specified by user or set due to error.
-  if (attr->log_level > 0) {
+  if (opts->log_level > 0) {
     // Don't print if user enabled logging and provided log buffer,
     // but there is no error.
     if (log_buf && ret < 0)
@@ -866,6 +981,8 @@
   }
 
 return_result:
+  if (fd >= 0)
+    close(fd);
   if (tmp_log_buf)
     free(tmp_log_buf);
   return ret;
@@ -876,16 +993,13 @@
                   const char *license, unsigned kern_version,
                   int log_level, char *log_buf, unsigned log_buf_size)
 {
-  struct bpf_load_program_attr attr = {};
+  struct bpf_prog_load_opts opts = {};
 
-  attr.prog_type = prog_type;
-  attr.name = name;
-  attr.insns = insns;
-  attr.license = license;
+
   if (prog_type != BPF_PROG_TYPE_TRACING && prog_type != BPF_PROG_TYPE_EXT)
-    attr.kern_version = kern_version;
-  attr.log_level = log_level;
-  return bcc_prog_load_xattr(&attr, prog_len, log_buf, log_buf_size, true);
+    opts.kern_version = kern_version;
+  opts.log_level = log_level;
+  return bcc_prog_load_xattr(prog_type, name, license, insns, &opts, prog_len, log_buf, log_buf_size, true);
 }
 
 int bpf_open_raw_sock(const char *name)
@@ -1031,9 +1145,21 @@
                  PERF_FLAG_FD_CLOEXEC);
 }
 
+#define DEBUGFS_TRACEFS "/sys/kernel/debug/tracing"
+#define TRACEFS "/sys/kernel/tracing"
+
+static const char *get_tracefs_path()
+{
+  if (access(DEBUGFS_TRACEFS, F_OK) == 0) {
+    return DEBUGFS_TRACEFS;
+  }
+  return TRACEFS;
+}
+
+
 // When a valid Perf Event FD provided through pfd, it will be used to enable
 // and attach BPF program to the event, and event_path will be ignored.
-// Otherwise, event_path is expected to contain the path to the event in debugfs
+// Otherwise, event_path is expected to contain the path to the event in tracefs
 // and it will be used to open the Perf Event FD.
 // In either case, if the attach partially failed (such as issue with the
 // ioctl operations), the **caller** need to clean up the Perf Event FD, either
@@ -1045,7 +1171,7 @@
   ssize_t bytes;
   char buf[PATH_MAX];
   struct perf_event_attr attr = {};
-  // Caller did not provided a valid Perf Event FD. Create one with the debugfs
+  // Caller did not provide a valid Perf Event FD. Create one with the tracefs
   // event path provided.
   if (*pfd < 0) {
     snprintf(buf, sizeof(buf), "%s/id", event_path);
@@ -1094,7 +1220,7 @@
   return 0;
 }
 
-/* Creates an [uk]probe using debugfs.
+/* Creates an [uk]probe using tracefs.
  * On success, the path to the probe is placed in buf (which is assumed to be of size PATH_MAX).
  */
 static int create_probe_event(char *buf, const char *ev_name,
@@ -1107,7 +1233,7 @@
   bool is_kprobe = strncmp("kprobe", event_type, 6) == 0;
   bool use_debugfs = false;
 
-  snprintf(buf, PATH_MAX, "/sys/kernel/tracing/%s_events", event_type);
+  snprintf(buf, PATH_MAX, "%s/%s_events", get_tracefs_path(), event_type);
   kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
   if (kfd < 0) {
     use_debugfs = true;
@@ -1157,13 +1283,8 @@
     goto error;
   }
   close(kfd);
-  if (use_debugfs) {
-    snprintf(buf, PATH_MAX, "/sys/kernel/debug/tracing/events/%ss/%s",
-             event_type, ev_alias);
-  } else {
-    snprintf(buf, PATH_MAX, "/sys/kernel/tracing/events/%ss/%s",
-             event_type, ev_alias);
-   }
+  snprintf(buf, PATH_MAX, "%s/events/%ss/%s", get_tracefs_path(),
+           event_type, ev_alias);
   return 0;
 error:
   return -1;
@@ -1177,7 +1298,7 @@
                             uint32_t ref_ctr_offset)
 {
   int kfd, pfd = -1;
-  char buf[PATH_MAX], fname[256];
+  char buf[PATH_MAX], fname[256], kprobe_events[PATH_MAX];
   bool is_kprobe = strncmp("kprobe", event_type, 6) == 0;
 
   if (maxactive <= 0)
@@ -1188,14 +1309,14 @@
 
   // If failed, most likely Kernel doesn't support the perf_kprobe PMU
   // (e12f03d "perf/core: Implement the 'perf_kprobe' PMU") yet.
-  // Try create the event using debugfs.
+  // Try create the event using tracefs.
   if (pfd < 0) {
     if (create_probe_event(buf, ev_name, attach_type, config1, offset,
                            event_type, pid, maxactive) < 0)
       goto error;
 
     // If we're using maxactive, we need to check that the event was created
-    // under the expected name.  If debugfs doesn't support maxactive yet
+    // under the expected name.  If tracefs doesn't support maxactive yet
     // (kernel < 4.12), the event is created under a different name; we need to
     // delete that event and start again without maxactive.
     if (is_kprobe && maxactive > 0 && attach_type == BPF_PROBE_RETURN) {
@@ -1204,17 +1325,12 @@
         goto error;
       }
       if (access(fname, F_OK) == -1) {
+        snprintf(kprobe_events, PATH_MAX, "%s/kprobe_events", get_tracefs_path());
         // Deleting kprobe event with incorrect name.
-        kfd = open("/sys/kernel/tracing/kprobe_events",
-                   O_WRONLY | O_APPEND | O_CLOEXEC, 0);
+        kfd = open(kprobe_events, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
         if (kfd < 0) {
-          kfd = open("/sys/kernel/debug/tracing/kprobe_events",
-                     O_WRONLY | O_APPEND | O_CLOEXEC, 0);
-          if (kfd < 0) {
-            fprintf(stderr, "open(/sys/kernel/debug/tracing/kprobe_events): %s\n",
-                    strerror(errno));
-            return -1;
-          }
+          fprintf(stderr, "open(%s): %s\n", kprobe_events, strerror(errno));
+          return -1;
         }
         snprintf(fname, sizeof(fname), "-:kprobes/%s_0", ev_name);
         if (write(kfd, fname, strlen(fname)) < 0) {
@@ -1255,10 +1371,42 @@
                           fn_offset, -1, maxactive, 0);
 }
 
+static int _find_archive_path_and_offset(const char *entry_path,
+                                         char out_path[PATH_MAX],
+                                         uint64_t *offset) {
+  const char *separator = strstr(entry_path, "!/");
+  if (separator == NULL || (separator - entry_path) >= PATH_MAX) {
+    return -1;
+  }
+
+  struct bcc_zip_entry entry;
+  struct bcc_zip_archive *archive =
+      bcc_zip_archive_open_and_find(entry_path, &entry);
+  if (archive == NULL) {
+    return -1;
+  }
+  if (entry.compression) {
+    bcc_zip_archive_close(archive);
+    return -1;
+  }
+
+  strncpy(out_path, entry_path, separator - entry_path);
+  out_path[separator - entry_path] = 0;
+  *offset += entry.data_offset;
+
+  bcc_zip_archive_close(archive);
+  return 0;
+}
+
 int bpf_attach_uprobe(int progfd, enum bpf_probe_attach_type attach_type,
                       const char *ev_name, const char *binary_path,
                       uint64_t offset, pid_t pid, uint32_t ref_ctr_offset)
 {
+  char archive_path[PATH_MAX];
+  if (access(binary_path, F_OK) != 0 &&
+      _find_archive_path_and_offset(binary_path, archive_path, &offset) == 0) {
+    binary_path = archive_path;
+  }
 
   return bpf_attach_probe(progfd, attach_type,
                           ev_name, binary_path, "uprobe",
@@ -1281,8 +1429,8 @@
    * the %s_bcc_%d line in [k,u]probe_events. If the event is not found,
    * it is safe to skip the cleaning up process (write -:... to the file).
    */
-  snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
-  fp = fopen(buf, "re");
+  snprintf(buf, sizeof(buf), "%s/%s_events", get_tracefs_path(), event_type);
+  fp = fopen(buf, "r");
   if (!fp) {
     use_debugfs = true;
     snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
@@ -1311,11 +1459,7 @@
   if (!found_event)
     return 0;
 
-  if (use_debugfs) {
-    snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
-  } else {
-    snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
-  }
+  snprintf(buf, sizeof(buf), "%s/%s_events", get_tracefs_path(), event_type);
   kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
   if (kfd < 0) {
     fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
@@ -1359,13 +1503,7 @@
   char buf[256];
   int pfd = -1;
 
-  snprintf(buf, sizeof(buf), "/sys/kernel/tracing/events/%s/%s",
-           tp_category, tp_name);
-  if (bpf_attach_tracing_event(progfd, buf, -1 /* PID */, &pfd) == 0)
-    return pfd;
-
-  snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%s/%s",
-           tp_category, tp_name);
+  snprintf(buf, sizeof(buf), "%s/events/%s/%s", get_tracefs_path(), tp_category, tp_name);
   if (bpf_attach_tracing_event(progfd, buf, -1 /* PID */, &pfd) == 0)
     return pfd;
 
@@ -1406,12 +1544,27 @@
   return true;
 }
 
+static int find_member_by_name(struct btf *btf, const struct btf_type *btf_type, const char *field_name) {
+  const struct btf_member *btf_member = btf_members(btf_type);
+  int i;
+
+  for (i = 0; i < btf_vlen(btf_type); i++, btf_member++) {
+    const char *name = btf__name_by_offset(btf, btf_member->name_off);
+    if (!strcmp(name, field_name)) {
+      return 1;
+    } else if (name[0] == '\0') {
+      if (find_member_by_name(btf, btf__type_by_id(btf, btf_member->type), field_name))
+        return 1;
+    }
+  }
+  return 0;
+}
+
 int kernel_struct_has_field(const char *struct_name, const char *field_name)
 {
   const struct btf_type *btf_type;
-  const struct btf_member *btf_member;
   struct btf *btf;
-  int i, ret, btf_id;
+  int ret, btf_id;
 
   btf = btf__load_vmlinux_btf();
   ret = libbpf_get_error(btf);
@@ -1425,14 +1578,7 @@
   }
 
   btf_type = btf__type_by_id(btf, btf_id);
-  btf_member = btf_members(btf_type);
-  for (i = 0; i < btf_vlen(btf_type); i++, btf_member++) {
-    if (!strcmp(btf__name_by_offset(btf, btf_member->name_off), field_name)) {
-      ret = 1;
-      goto cleanup;
-    }
-  }
-  ret = 0;
+  ret = find_member_by_name(btf, btf_type, field_name);
 
 cleanup:
   btf__free(btf);
@@ -1591,7 +1737,7 @@
     return -1;
   }
 
-  ret = bpf_set_link_xdp_fd(ifindex, progfd, flags);
+  ret = bpf_xdp_attach(ifindex, progfd, flags, NULL);
   if (ret) {
     libbpf_strerror(ret, err_buf, sizeof(err_buf));
     fprintf(stderr, "bpf: Attaching prog to %s: %s\n", dev_name, err_buf);
diff --git a/src/cc/libbpf.h b/src/cc/libbpf.h
index e001d74..dd86f0a 100644
--- a/src/cc/libbpf.h
+++ b/src/cc/libbpf.h
@@ -27,8 +27,25 @@
 extern "C" {
 #endif
 
-struct bpf_create_map_attr;
-struct bpf_load_program_attr;
+struct bcc_create_map_attr {
+	const char *name;
+	enum bpf_map_type map_type;
+	__u32 map_flags;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 numa_node;
+	__u32 btf_fd;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u32 map_ifindex;
+	union {
+		__u32 inner_map_fd;
+		__u32 btf_vmlinux_value_type_id;
+	};
+};
+
+struct bpf_prog_load_opts;
 
 enum bpf_probe_attach_type {
 	BPF_PROBE_ENTRY,
@@ -44,7 +61,7 @@
 int bcc_create_map(enum bpf_map_type map_type, const char *name,
                    int key_size, int value_size, int max_entries,
                    int map_flags);
-int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit);
+int bcc_create_map_xattr(struct bcc_create_map_attr *attr, bool allow_rlimit);
 int bpf_update_elem(int fd, void *key, void *value, unsigned long long flags);
 int bpf_lookup_elem(int fd, void *key, void *value);
 int bpf_delete_elem(int fd, void *key);
@@ -72,10 +89,11 @@
                   const struct bpf_insn *insns, int prog_len,
                   const char *license, unsigned kern_version,
                   int log_level, char *log_buf, unsigned log_buf_size);
-int bcc_prog_load_xattr(struct bpf_load_program_attr *attr,
+int bcc_prog_load_xattr(enum bpf_prog_type prog_type, const char *prog_name,
+						const char *license, const struct bpf_insn *insns,
+						struct bpf_prog_load_opts *opts,
                         int prog_len, char *log_buf,
                         unsigned log_buf_size, bool allow_rlimit);
-
 int bpf_attach_socket(int sockfd, int progfd);
 
 /* create RAW socket. If name is not NULL/a non-empty null-terminated string,
diff --git a/src/cc/syms.h b/src/cc/syms.h
index cf2cd35..3dffdda 100644
--- a/src/cc/syms.h
+++ b/src/cc/syms.h
@@ -29,13 +29,27 @@
 
 class ProcStat {
   std::string procfs_;
+  std::string root_symlink_;
+  std::string mount_ns_symlink_;
+  // file descriptor of /proc/<pid>/root open with O_PATH used to get into root
+  // of process after it exits; unlike a dereferenced root symlink, *at calls
+  // to this use the process's mount namespace
+  int root_fd_ = -1;
+  // store also root path and mount namespace pair to detect its changes
+  std::string root_, mount_ns_;
   ino_t inode_;
-  ino_t getinode_();
+  bool getinode_(ino_t &inode);
 
-public:
+ public:
   ProcStat(int pid);
+  ~ProcStat() {
+    if (root_fd_ > 0)
+      close(root_fd_);
+  }
+  bool refresh_root();
+  int get_root_fd() { return root_fd_; }
   bool is_stale();
-  void reset() { inode_ = getinode_(); }
+  void reset() { getinode_(inode_); }
 };
 
 class SymbolCache {
@@ -111,6 +125,30 @@
     VDSO
   };
 
+  class ModulePath {
+    // helper class to get a usable module path independent of the running
+    // process by storing a file descriptor created from openat(2) if possible
+    // if openat fails, falls back to process-dependent path with /proc/.../root
+   private:
+    int fd_;
+    std::string proc_root_path_;
+    std::string path_;
+
+   public:
+    ModulePath(const std::string &ns_path, int root_fd, int pid, bool enter_ns);
+    const char *alt_path() { return proc_root_path_.c_str(); }
+    const char *path() {
+      if (path_ == proc_root_path_ || access(proc_root_path_.c_str(), F_OK) < 0)
+        // cannot stat /proc/.../root/<path>, pid might not exist anymore; use /proc/self/fd/...
+        return path_.c_str();
+      return proc_root_path_.c_str();
+    }
+    ~ModulePath() {
+      if (fd_ > 0)
+        close(fd_);
+    }
+  };
+
   struct Module {
     struct Range {
       uint64_t start;
@@ -120,10 +158,11 @@
           : start(s), end(e), file_offset(f) {}
     };
 
-    Module(const char *name, const char *path, struct bcc_symbol_option *option);
+    Module(const char *name, std::shared_ptr<ModulePath> path,
+           struct bcc_symbol_option *option);
 
     std::string name_;
-    std::string path_;
+    std::shared_ptr<ModulePath> path_;
     std::vector<Range> ranges_;
     bool loaded_;
     bcc_symbol_option *symbol_option_;
diff --git a/src/cc/usdt.h b/src/cc/usdt.h
index a3d9bfe..ec9fd6c 100644
--- a/src/cc/usdt.h
+++ b/src/cc/usdt.h
@@ -66,6 +66,7 @@
 
   int arg_size() const { return arg_size_.value_or(sizeof(void *)); }
   std::string ctype() const;
+  const char *ctype_name() const;
 
   const optional<std::string> &deref_ident() const { return deref_ident_; }
   const optional<std::string> &base_register_name() const {
@@ -80,6 +81,7 @@
 
   friend class ArgumentParser;
   friend class ArgumentParser_aarch64;
+  friend class ArgumentParser_loongarch64;
   friend class ArgumentParser_powerpc64;
   friend class ArgumentParser_s390x;
   friend class ArgumentParser_x64;
@@ -126,14 +128,24 @@
  private:
   bool parse_register(ssize_t pos, ssize_t &new_pos, std::string &reg_name);
   bool parse_size(ssize_t pos, ssize_t &new_pos, optional<int> *arg_size);
-  bool parse_mem(ssize_t pos, ssize_t &new_pos, std::string &reg_name,
-                 optional<int> *offset);
+  bool parse_mem(ssize_t pos, ssize_t &new_pos, Argument *dest);
 
  public:
   bool parse(Argument *dest);
   ArgumentParser_aarch64(const char *arg) : ArgumentParser(arg) {}
 };
 
+class ArgumentParser_loongarch64 : public ArgumentParser {
+ private:
+  bool parse_register(ssize_t pos, ssize_t &new_pos, std::string &reg_name);
+  bool parse_size(ssize_t pos, ssize_t &new_pos, optional<int> *arg_size);
+  bool parse_mem(ssize_t pos, ssize_t &new_pos, Argument *dest);
+
+ public:
+  bool parse(Argument *dest);
+  ArgumentParser_loongarch64(const char *arg) : ArgumentParser(arg) {}
+};
+
 class ArgumentParser_powerpc64 : public ArgumentParser {
 public:
   bool parse(Argument *dest);
@@ -228,7 +240,7 @@
   optional<uint64_t> attached_semaphore_;
   uint8_t mod_match_inode_only_;
 
-  std::string largest_arg_type(size_t arg_n);
+  const char *largest_arg_type(size_t arg_n);
 
   bool add_to_semaphore(int16_t val);
   bool resolve_global_address(uint64_t *global, const std::string &bin_path,
@@ -256,6 +268,10 @@
     return largest_arg_type(arg_index);
   }
 
+  const char *get_arg_ctype_name(int arg_index) {
+    return largest_arg_type(arg_index);
+  }
+
   void finalize_locations();
   bool need_enable() const { return semaphore_ != 0x0; }
   bool enable(const std::string &fn_name);
diff --git a/src/cc/usdt/usdt.cc b/src/cc/usdt/usdt.cc
index 84f8076..264447e 100644
--- a/src/cc/usdt/usdt.cc
+++ b/src/cc/usdt/usdt.cc
@@ -38,6 +38,8 @@
 
 #ifdef __aarch64__
   ArgumentParser_aarch64 parser(arg_fmt);
+#elif __loongarch64
+  ArgumentParser_loongarch64 parser(arg_fmt);
 #elif __powerpc64__
   ArgumentParser_powerpc64 parser(arg_fmt);
 #elif __s390x__
@@ -149,7 +151,7 @@
   return true;
 }
 
-std::string Probe::largest_arg_type(size_t arg_n) {
+const char *Probe::largest_arg_type(size_t arg_n) {
   Argument *largest = nullptr;
   for (Location &location : locations_) {
     Argument *candidate = &location.arguments_[arg_n];
@@ -159,7 +161,7 @@
   }
 
   assert(largest);
-  return largest->ctype();
+  return largest->ctype_name();
 }
 
 bool Probe::usdt_getarg(std::ostream &stream) {
@@ -556,7 +558,7 @@
 ) {
   USDT::Probe *p = static_cast<USDT::Context *>(ctx)->get(probe_name);
   if (p)
-    return p->get_arg_ctype(arg_index).c_str();
+    return p->get_arg_ctype_name(arg_index);
   return "";
 }
 
@@ -565,7 +567,7 @@
 ) {
   USDT::Probe *p = static_cast<USDT::Context *>(ctx)->get(provider_name, probe_name);
   if (p)
-    return p->get_arg_ctype(arg_index).c_str();
+    return p->get_arg_ctype_name(arg_index);
   return "";
 }
 
diff --git a/src/cc/usdt/usdt_args.cc b/src/cc/usdt/usdt_args.cc
index 88555c3..8312547 100644
--- a/src/cc/usdt/usdt_args.cc
+++ b/src/cc/usdt/usdt_args.cc
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <cmath>
 #include <unordered_map>
 #include <regex>
 
@@ -33,6 +34,17 @@
   return (s < 0) ? tfm::format("int%d_t", -s) : tfm::format("uint%d_t", s);
 }
 
+static const char *type_names[][4] = {
+  { "int8_t", "int16_t", "int32_t", "int64_t" },
+  { "uint8_t", "uint16_t", "uint32_t", "uint64_t" },
+};
+
+const char *Argument::ctype_name() const {
+  const int s = arg_size();
+  const int r = log2(abs(s));
+  return s < 0 ? type_names[0][r] : type_names[1][r];
+}
+
 bool Argument::get_global_address(uint64_t *address, const std::string &binpath,
                                   const optional<int> &pid) const {
   if (pid) {
@@ -178,16 +190,27 @@
 }
 
 bool ArgumentParser_aarch64::parse_mem(ssize_t pos, ssize_t &new_pos,
-                                       std::string &reg_name,
-                                       optional<int> *offset) {
-  if (parse_register(pos, new_pos, reg_name) == false)
+                                       Argument *dest) {
+  std::string base_reg_name, index_reg_name;
+
+  if (parse_register(pos, new_pos, base_reg_name) == false)
     return false;
+  dest->base_register_name_ = base_reg_name;
 
   if (arg_[new_pos] == ',') {
     pos = new_pos + 1;
-    new_pos = parse_number(pos, offset);
-    if (new_pos == pos)
-      return error_return(pos, pos);
+    new_pos = parse_number(pos, &dest->deref_offset_);
+    if (new_pos == pos) {
+      // offset isn't a number, so it should be a reg,
+      // which looks like: -1@[x0, x1], rather than -1@[x0, 24]
+      skip_whitespace_from(pos);
+      pos = cur_pos_;
+      if (parse_register(pos, new_pos, index_reg_name) == false)
+        return error_return(pos, pos);
+      dest->index_register_name_ = index_reg_name;
+      dest->scale_ = 1;
+      dest->deref_offset_ = 0;
+    }
   }
   if (arg_[new_pos] != ']')
     return error_return(new_pos, new_pos);
@@ -202,6 +225,7 @@
   // Support the following argument patterns:
   //   [-]<size>@<value>, [-]<size>@<reg>, [-]<size>@[<reg>], or
   //   [-]<size>@[<reg>,<offset>]
+  //   [-]<size>@[<reg>,<index_reg>]
   ssize_t cur_pos = cur_pos_, new_pos;
   optional<int> arg_size;
 
@@ -224,14 +248,125 @@
     cur_pos_ = new_pos;
     dest->base_register_name_ = reg_name;
   } else if (arg_[cur_pos] == '[') {
-    // Parse ...@[<reg>] and ...@[<reg,<offset>]
-    optional<int> offset = 0;
-    std::string reg_name;
-    if (parse_mem(cur_pos + 1, new_pos, reg_name, &offset) == false)
+    // Parse ...@[<reg>], ...@[<reg,<offset>] and ...@[<reg>,<index_reg>]
+    if (parse_mem(cur_pos + 1, new_pos, dest) == false)
       return false;
     cur_pos_ = new_pos;
+  } else {
+    // Parse ...@<value>
+    optional<long long> val;
+    new_pos = parse_number(cur_pos, &val);
+    if (cur_pos == new_pos)
+      return error_return(cur_pos, cur_pos);
+    cur_pos_ = new_pos;
+    dest->constant_ = val;
+  }
+
+  skip_whitespace_from(cur_pos_);
+  return true;
+}
+
+bool ArgumentParser_loongarch64::parse_register(ssize_t pos, ssize_t &new_pos,
+						std::string &reg_name) {
+  if (arg_[pos] == '$' && arg_[pos + 1] == 'r') {
+    optional<int> reg_num;
+    new_pos = parse_number(pos + 2, &reg_num);
+    if (new_pos == pos + 2 || *reg_num < 0 || *reg_num > 31)
+      return error_return(pos + 2, pos + 2);
+
+    if (*reg_num == 3) {
+      reg_name = "sp";
+    } else {
+      reg_name = "regs[" + std::to_string(reg_num.value()) + "]";
+    }
+    return true;
+  } else if (arg_[pos] == 's' && arg_[pos + 1] == 'p') {
+    reg_name = "sp";
+    new_pos = pos + 2;
+    return true;
+  } else {
+    return error_return(pos, pos);
+  }
+}
+
+bool ArgumentParser_loongarch64::parse_size(ssize_t pos, ssize_t &new_pos,
+					    optional<int> *arg_size) {
+  int abs_arg_size;
+
+  new_pos = parse_number(pos, arg_size);
+  if (new_pos == pos)
+    return error_return(pos, pos);
+
+  abs_arg_size = abs(arg_size->value());
+  if (abs_arg_size != 1 && abs_arg_size != 2 && abs_arg_size != 4 &&
+      abs_arg_size != 8)
+    return error_return(pos, pos);
+  return true;
+}
+
+bool ArgumentParser_loongarch64::parse_mem(ssize_t pos, ssize_t &new_pos,
+					   Argument *dest) {
+  std::string base_reg_name, index_reg_name;
+
+  if (parse_register(pos, new_pos, base_reg_name) == false)
+    return false;
+  dest->base_register_name_ = base_reg_name;
+
+  if (arg_[new_pos] == ',') {
+    pos = new_pos + 1;
+    new_pos = parse_number(pos, &dest->deref_offset_);
+    if (new_pos == pos) {
+      // offset isn't a number, so it should be a reg,
+      // which looks like: -1@[$r0, $r1], rather than -1@[$r0, 24]
+      skip_whitespace_from(pos);
+      pos = cur_pos_;
+      if (parse_register(pos, new_pos, index_reg_name) == false)
+        return error_return(pos, pos);
+      dest->index_register_name_ = index_reg_name;
+      dest->scale_ = 1;
+      dest->deref_offset_ = 0;
+    }
+  }
+  if (arg_[new_pos] != ']')
+    return error_return(new_pos, new_pos);
+  new_pos++;
+  return true;
+}
+
+bool ArgumentParser_loongarch64::parse(Argument *dest) {
+  if (done())
+    return false;
+
+  // Support the following argument patterns:
+  //   [-]<size>@<value>, [-]<size>@<reg>, [-]<size>@[<reg>], or
+  //   [-]<size>@[<reg>,<offset>]
+  //   [-]<size>@[<reg>,<index_reg>]
+  ssize_t cur_pos = cur_pos_, new_pos;
+  optional<int> arg_size;
+
+  // Parse [-]<size>
+  if (parse_size(cur_pos, new_pos, &arg_size) == false)
+    return false;
+  dest->arg_size_ = arg_size;
+
+  // Make sure '@' present
+  if (arg_[new_pos] != '@')
+    return error_return(new_pos, new_pos);
+  cur_pos = new_pos + 1;
+
+  if (arg_[cur_pos] == '$' || arg_[cur_pos] == 's') {
+    // Parse ...@<reg>
+    std::string reg_name;
+    if (parse_register(cur_pos, new_pos, reg_name) == false)
+      return false;
+
+    cur_pos_ = new_pos;
     dest->base_register_name_ = reg_name;
-    dest->deref_offset_ = offset;
+  } else if (arg_[cur_pos] == '[') {
+    // Parse ...@[<reg>], ...@[<reg,<offset>] and ...@[<reg>,<index_reg>]
+    if (parse_mem(cur_pos + 1, new_pos, dest) == false)
+      return false;
+    cur_pos_ = new_pos;
   } else {
     // Parse ...@<value>
     optional<long long> val;
diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt
index f5c40b9..a897aa9 100644
--- a/src/python/CMakeLists.txt
+++ b/src/python/CMakeLists.txt
@@ -5,7 +5,7 @@
   set(PYTHON_CMD "python3")
 endif()
 
-if(EXISTS "/etc/debian_version")
+if(EXISTS "/etc/debian_version" AND NOT PY_SKIP_DEB_LAYOUT)
   set(PYTHON_FLAGS "${PYTHON_FLAGS} --install-layout deb")
 endif()
 
@@ -37,10 +37,14 @@
   )
   add_custom_target(bcc_py_${PY_CMD_ESCAPED} ALL DEPENDS ${PIP_INSTALLABLE})
 
+  if(NOT PYTHON_PREFIX)
+     set(PYTHON_PREFIX, ${CMAKE_INSTALL_PREFIX} )
+  endif()
+
   install(
     CODE "
       execute_process(
-        COMMAND ${PY_CMD} setup.py install -f ${PYTHON_FLAGS} --prefix=${CMAKE_INSTALL_PREFIX}
+        COMMAND ${PY_CMD} setup.py install -f ${PYTHON_FLAGS} --prefix=${PYTHON_PREFIX} --record ${CMAKE_BINARY_DIR}/install_manifest_python_bcc.txt
         WORKING_DIRECTORY ${PY_DIRECTORY})"
     COMPONENT python)
 endforeach()
diff --git a/src/python/bcc/__init__.py b/src/python/bcc/__init__.py
index 1118698..7c57e92 100644
--- a/src/python/bcc/__init__.py
+++ b/src/python/bcc/__init__.py
@@ -44,7 +44,10 @@
     global _num_open_probes
     return _num_open_probes
 
-TRACEFS = "/sys/kernel/debug/tracing"
+DEBUGFS = "/sys/kernel/debug"
+TRACEFS = os.path.join(DEBUGFS, "tracing")
+if not os.path.exists(TRACEFS):
+    TRACEFS = "/sys/kernel/tracing"
 
 # Debug flags
 
@@ -188,6 +191,7 @@
     SK_MSG = 16
     RAW_TRACEPOINT = 17
     CGROUP_SOCK_ADDR = 18
+    CGROUP_SOCKOPT = 25
     TRACING = 26
     LSM = 29
 
@@ -291,7 +295,7 @@
 
     _probe_repl = re.compile(b"[^a-zA-Z0-9_]")
     _sym_caches = {}
-    _bsymcache =  lib.bcc_buildsymcache_new()
+    _bsymcache = lib.bcc_buildsymcache_new()
 
     _auto_includes = {
         "linux/time.h": ["time"],
@@ -495,7 +499,7 @@
 
         return fns
 
-    def load_func(self, func_name, prog_type, device = None):
+    def load_func(self, func_name, prog_type, device = None, attach_type = -1):
         func_name = _assert_is_bytes(func_name)
         if func_name in self.funcs:
             return self.funcs[func_name]
@@ -511,7 +515,7 @@
                 lib.bpf_function_size(self.module, func_name),
                 lib.bpf_module_license(self.module),
                 lib.bpf_module_kern_version(self.module),
-                log_level, None, 0, device)
+                log_level, None, 0, device, attach_type)
 
         if fd < 0:
             atexit.register(self.donothing)
@@ -685,7 +689,7 @@
 
     @staticmethod
     def get_kprobe_functions(event_re):
-        blacklist_file = "%s/../kprobes/blacklist" % TRACEFS
+        blacklist_file = "%s/kprobes/blacklist" % DEBUGFS
         try:
             with open(blacklist_file, "rb") as blacklist_f:
                 blacklist = set([line.rstrip().split()[1] for line in blacklist_f])
@@ -694,6 +698,15 @@
                 raise e
             blacklist = set([])
 
+        avail_filter_file = "%s/tracing/available_filter_functions" % DEBUGFS
+        try:
+            with open(avail_filter_file, "rb") as avail_filter_f:
+                avail_filter = set([line.rstrip().split()[0] for line in avail_filter_f])
+        except IOError as e:
+            if e.errno != errno.EPERM:
+                raise e
+            avail_filter = set([])
+
         fns = []
 
         in_init_section = 0
@@ -744,8 +757,9 @@
                 # Exclude all gcc 8's extra .cold functions
                 elif re.match(b'^.*\.cold(\.\d+)?$', fn):
                     continue
-                if (t.lower() in [b't', b'w']) and re.match(event_re, fn) \
-                    and fn not in blacklist:
+                if (t.lower() in [b't', b'w']) and re.fullmatch(event_re, fn) \
+                    and fn not in blacklist \
+                    and fn in avail_filter:
                     fns.append(fn)
         return set(fns)     # Some functions may appear more than once
 
@@ -828,7 +842,8 @@
                     failed += 1
                     probes.append(line)
             if failed == len(matches):
-                raise Exception("Failed to attach BPF program %s to kprobe %s" %
+                raise Exception("Failed to attach BPF program %s to kprobe %s"
+                                ", it's not traceable (either non-existing, inlined, or marked as \"notrace\")" %
                                 (fn_name, '/'.join(probes)))
             return
 
@@ -837,7 +852,8 @@
         ev_name = b"p_" + event.replace(b"+", b"_").replace(b".", b"_")
         fd = lib.bpf_attach_kprobe(fn.fd, 0, ev_name, event, event_off, 0)
         if fd < 0:
-            raise Exception("Failed to attach BPF program %s to kprobe %s" %
+            raise Exception("Failed to attach BPF program %s to kprobe %s"
+                            ", it's not traceable (either non-existing, inlined, or marked as \"notrace\")" %
                             (fn_name, event))
         self._add_kprobe_fd(ev_name, fn_name, fd)
         return self
@@ -860,7 +876,8 @@
                     failed += 1
                     probes.append(line)
             if failed == len(matches):
-                raise Exception("Failed to attach BPF program %s to kretprobe %s" %
+                raise Exception("Failed to attach BPF program %s to kretprobe %s"
+                                ", it's not traceable (either non-existing, inlined, or marked as \"notrace\")" %
                                 (fn_name, '/'.join(probes)))
             return
 
@@ -869,7 +886,8 @@
         ev_name = b"r_" + event.replace(b"+", b"_").replace(b".", b"_")
         fd = lib.bpf_attach_kprobe(fn.fd, 1, ev_name, event, 0, maxactive)
         if fd < 0:
-            raise Exception("Failed to attach BPF program %s to kretprobe %s" %
+            raise Exception("Failed to attach BPF program %s to kretprobe %s"
+                            ", it's not traceable (either non-existing, inlined, or marked as \"notrace\")" %
                             (fn_name, event))
         self._add_kprobe_fd(ev_name, fn_name, fd)
         return self
@@ -987,7 +1005,7 @@
                 if os.path.isdir(evt_dir):
                     tp = ("%s:%s" % (category, event))
                     if re.match(tp_re.decode(), tp):
-                        results.append(tp)
+                        results.append(tp.encode())
         return results
 
     @staticmethod
@@ -1736,6 +1754,20 @@
     def donothing(self):
         """the do nothing exit handler"""
 
+
+    def close(self):
+        """close(self)
+
+        Closes all associated files descriptors. Attached BPF programs are not
+        detached.
+        """
+        for name, fn in list(self.funcs.items()):
+            os.close(fn.fd)
+            del self.funcs[name]
+        if self.module:
+            lib.bpf_module_destroy(self.module)
+            self.module = None
+
     def cleanup(self):
         # Clean up opened probes
         for k, v in list(self.kprobe_fds.items()):
@@ -1763,12 +1795,8 @@
         if self.tracefile:
             self.tracefile.close()
             self.tracefile = None
-        for name, fn in list(self.funcs.items()):
-            os.close(fn.fd)
-            del self.funcs[name]
-        if self.module:
-            lib.bpf_module_destroy(self.module)
-            self.module = None
+
+        self.close()
 
         # Clean up ringbuf
         if self._ringbuf_manager:
diff --git a/src/python/bcc/libbcc.py b/src/python/bcc/libbcc.py
index ca5584c..713fcff 100644
--- a/src/python/bcc/libbcc.py
+++ b/src/python/bcc/libbcc.py
@@ -102,7 +102,7 @@
 lib.bpf_attach_socket.argtypes = [ct.c_int, ct.c_int]
 lib.bcc_func_load.restype = ct.c_int
 lib.bcc_func_load.argtypes = [ct.c_void_p, ct.c_int, ct.c_char_p, ct.c_void_p,
-        ct.c_size_t, ct.c_char_p, ct.c_uint, ct.c_int, ct.c_char_p, ct.c_uint, ct.c_char_p]
+        ct.c_size_t, ct.c_char_p, ct.c_uint, ct.c_int, ct.c_char_p, ct.c_uint, ct.c_char_p, ct.c_uint]
 _RAW_CB_TYPE = ct.CFUNCTYPE(None, ct.py_object, ct.c_void_p, ct.c_int)
 _LOST_CB_TYPE = ct.CFUNCTYPE(None, ct.py_object, ct.c_ulonglong)
 lib.bpf_attach_kprobe.restype = ct.c_int
diff --git a/src/python/bcc/table.py b/src/python/bcc/table.py
index 6ffbfb2..f5b4da8 100644
--- a/src/python/bcc/table.py
+++ b/src/python/bcc/table.py
@@ -108,7 +108,10 @@
         text = text[:-1] + "+"
     return text
 
-def _print_json_hist(vals, val_type, section_bucket=None):
+def get_json_hist(vals, val_type, section_bucket=None):
+    return _get_json_hist(vals, val_type, section_bucket=None)
+
+def _get_json_hist(vals, val_type, section_bucket=None):
     hist_list = []
     max_nonzero_idx = 0
     for i in range(len(vals)):
@@ -131,7 +134,7 @@
     histogram = {"ts": strftime("%Y-%m-%d %H:%M:%S"), "val_type": val_type, "data": hist_list}
     if section_bucket:
         histogram[section_bucket[0]] = section_bucket[1]
-    print(histogram)
+    return histogram
 
 def _print_log2_hist(vals, val_type, strip_leading_zero):
     global stars_max
@@ -235,8 +238,8 @@
         'void *'            : ct.c_void_p,
     }
 
-    # handle array types e.g. "int [16]" or "char[16]"
-    array_type = re.compile(r"([^ ]+) ?\[([0-9]+)\]$")
+    # handle array types e.g. "int [16]", "char[16]" or "unsigned char[16]"
+    array_type = re.compile(r"(\S+(?: \S+)*) ?\[([0-9]+)\]$")
 
     fields = []
     num_fields = lib.bpf_perf_event_fields(event_map.bpf.module, event_map._name)
@@ -609,7 +612,13 @@
                 break
 
         for i in range(0, total):
-            yield (ct_keys[i], ct_values[i])
+            k = ct_keys[i]
+            v = ct_values[i]
+            if not isinstance(k, ct.Structure):
+                k = self.Key(k)
+            if not isinstance(v, ct.Structure):
+                v = self.Leaf(v)
+            yield (k, v)
 
     def zero(self):
         # Even though this is not very efficient, we grab the entire list of
@@ -651,7 +660,7 @@
             raise StopIteration()
         return next_key
 
-    def decode_c_struct(self, tmp, buckets, bucket_fn, bucket_sort_fn):
+    def decode_c_struct(self, tmp, buckets, bucket_fn, bucket_sort_fn, index_max=log2_index_max):
         f1 = self.Key._fields_[0][0]
         f2 = self.Key._fields_[1][0]
         # The above code assumes that self.Key._fields_[1][0] holds the
@@ -665,7 +674,7 @@
             bucket = getattr(k, f1)
             if bucket_fn:
                 bucket = bucket_fn(bucket)
-            vals = tmp[bucket] = tmp.get(bucket, [0] * log2_index_max)
+            vals = tmp[bucket] = tmp.get(bucket, [0] * index_max)
             slot = getattr(k, f2)
             vals[slot] = v.value
         buckets_lst = list(tmp.keys())
@@ -702,13 +711,13 @@
                     section_bucket = (section_header, section_print_fn(bucket))
                 else:
                     section_bucket = (section_header, bucket)
-                _print_json_hist(vals, val_type, section_bucket)
+                print(_get_json_hist(vals, val_type, section_bucket))
 
         else:
             vals = [0] * log2_index_max
             for k, v in self.items():
                 vals[k.value] = v.value
-            _print_json_hist(vals, val_type)
+            print(_get_json_hist(vals, val_type))
 
     def print_log2_hist(self, val_type="value", section_header="Bucket ptr",
             section_print_fn=None, bucket_fn=None, strip_leading_zero=None,
@@ -775,7 +784,7 @@
         if isinstance(self.Key(), ct.Structure):
             tmp = {}
             buckets = []
-            self.decode_c_struct(tmp, buckets, bucket_fn, bucket_sort_fn)
+            self.decode_c_struct(tmp, buckets, bucket_fn, bucket_sort_fn, linear_index_max)
 
             for bucket in buckets:
                 vals = tmp[bucket]
@@ -1010,14 +1019,14 @@
         # The actual fd is held by the perf reader, add to track opened keys
         self._open_key_fds[cpu] = -1
 
-    def _open_perf_event(self, cpu, typ, config):
-        fd = lib.bpf_open_perf_event(typ, config, -1, cpu)
+    def _open_perf_event(self, cpu, typ, config, pid=-1):
+        fd = lib.bpf_open_perf_event(typ, config, pid, cpu)
         if fd < 0:
             raise Exception("bpf_open_perf_event failed")
         self[self.Key(cpu)] = self.Leaf(fd)
         self._open_key_fds[cpu] = fd
 
-    def open_perf_event(self, typ, config):
+    def open_perf_event(self, typ, config, pid=-1):
         """open_perf_event(typ, config)
 
         Configures the table such that calls from the bpf program to
@@ -1025,7 +1034,7 @@
         counter denoted by event ev on the local cpu.
         """
         for i in get_online_cpus():
-            self._open_perf_event(i, typ, config)
+            self._open_perf_event(i, typ, config, pid)
 
 
 class PerCpuHash(HashTable):
diff --git a/src/python/bcc/usdt.py b/src/python/bcc/usdt.py
index a25c8c7..4d6ca94 100644
--- a/src/python/bcc/usdt.py
+++ b/src/python/bcc/usdt.py
@@ -206,7 +206,7 @@
         for (binpath, fn_name, addr, pid) in probes:
             if attach_usdt_ignore_pid:
                 pid = -1
-            bpf.attach_uprobe(name=binpath.decode(), fn_name=fn_name.decode(),
+            bpf.attach_uprobe(name=binpath, fn_name=fn_name,
                               addr=addr, pid=pid)
 
     def enumerate_active_probes(self):
diff --git a/src/python/setup.py.in b/src/python/setup.py.in
index dca3554..46e2060 100644
--- a/src/python/setup.py.in
+++ b/src/python/setup.py.in
@@ -1,6 +1,6 @@
 # Copyright (c) PLUMgrid, Inc.
 # Licensed under the Apache License, Version 2.0 (the "License")
-from distutils.core import setup
+from setuptools import setup
 import os
 import sys
 
diff --git a/tests/cc/CMakeLists.txt b/tests/cc/CMakeLists.txt
index 677867d..b4dd3f9 100644
--- a/tests/cc/CMakeLists.txt
+++ b/tests/cc/CMakeLists.txt
@@ -3,8 +3,13 @@
 
 include_directories(${PROJECT_SOURCE_DIR}/src/cc)
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/api)
+if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND)
+include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat)
+else()
 include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi)
+endif()
 include_directories(${PROJECT_SOURCE_DIR}/tests/python/include)
+include_directories(${LLVM_INCLUDE_DIRS})
 
 add_executable(test_static test_static.c)
 if(NOT CMAKE_USE_LIBBPF_PACKAGE)
@@ -14,10 +19,15 @@
 endif()
 
 add_test(NAME c_test_static COMMAND ${TEST_WRAPPER} c_test_static sudo ${CMAKE_CURRENT_BINARY_DIR}/test_static)
+add_compile_options(-DCMAKE_CURRENT_BINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}")
 
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-result -fPIC")
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result -fPIC")
 
+if(${LLVM_PACKAGE_VERSION} VERSION_EQUAL 16 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 16)
+set(CMAKE_CXX_STANDARD 14)
+endif()
+
 if(ENABLE_USDT)
 set(TEST_LIBBCC_SOURCES
 	test_libbcc.cc
@@ -37,14 +47,58 @@
 	test_usdt_args.cc
 	test_usdt_probes.cc
 	utils.cc
-	test_parse_tracepoint.cc)
+	test_parse_tracepoint.cc
+	test_zip.cc)
 
 file(COPY dummy_proc_map.txt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 add_library(usdt_test_lib SHARED usdt_test_lib.cc)
+add_library(debuginfo_test_lib SHARED debuginfo_test_lib.cc)
+
+add_custom_command(OUTPUT debuginfo.so
+                   COMMAND ${CMAKE_OBJCOPY}
+                   ARGS --add-symbol debuginfo_only_symbol=.text:0
+                   ${CMAKE_CURRENT_BINARY_DIR}/libdebuginfo_test_lib.so
+                   ${CMAKE_CURRENT_BINARY_DIR}/debuginfo.so
+                   DEPENDS debuginfo_test_lib)
+add_custom_target(debuginfo DEPENDS debuginfo.so)
+
+add_custom_command(OUTPUT with_gnu_debuglink.so
+                   COMMAND ${CMAKE_OBJCOPY}
+                   ARGS --add-gnu-debuglink=debuginfo.so
+                   ${CMAKE_CURRENT_BINARY_DIR}/libdebuginfo_test_lib.so
+                   ${CMAKE_CURRENT_BINARY_DIR}/with_gnu_debuglink.so
+                   DEPENDS debuginfo debuginfo_test_lib)
+add_custom_target(with_gnu_debuglink DEPENDS with_gnu_debuglink.so)
+SET(DEBUGINFO_TARGETS debuginfo_test_lib debuginfo with_gnu_debuglink)
+
+if(LIBLZMA_FOUND)
+  add_custom_command(OUTPUT debuginfo.so.xz
+                     COMMAND xz
+                     ARGS -k ${CMAKE_CURRENT_BINARY_DIR}/debuginfo.so
+                     DEPENDS debuginfo)
+  add_custom_target(debuginfo_xz DEPENDS debuginfo.so.xz)
+
+  add_custom_command(OUTPUT with_gnu_debugdata.so
+                     COMMAND ${CMAKE_OBJCOPY}
+                     ARGS --add-section .gnu_debugdata=${CMAKE_CURRENT_BINARY_DIR}/debuginfo.so.xz
+                     ${CMAKE_CURRENT_BINARY_DIR}/libdebuginfo_test_lib.so
+                     ${CMAKE_CURRENT_BINARY_DIR}/with_gnu_debugdata.so
+                     DEPENDS debuginfo_xz debuginfo_test_lib)
+  add_custom_target(with_gnu_debugdata DEPENDS with_gnu_debugdata.so)
+  list(APPEND DEBUGINFO_TARGETS with_gnu_debugdata)
+endif(LIBLZMA_FOUND)
+
+add_custom_command(OUTPUT archive.zip
+                   COMMAND mkdir -p zip_subdir
+                   COMMAND echo "This is a text file" > zip_subdir/file.txt
+                   COMMAND zip -0 archive.zip libdebuginfo_test_lib.so zip_subdir/file.txt
+                   DEPENDS debuginfo_test_lib
+                   BYPRODUCTS zip_subdir/file.txt)
+add_custom_target(zip_archive DEPENDS archive.zip)
 
 if(NOT CMAKE_USE_LIBBPF_PACKAGE)
   add_executable(test_libbcc ${TEST_LIBBCC_SOURCES})
-  add_dependencies(test_libbcc bcc-shared)
+  add_dependencies(test_libbcc bcc-shared zip_archive ${DEBUGINFO_TARGETS})
 
   target_link_libraries(test_libbcc ${PROJECT_BINARY_DIR}/src/cc/libbcc.so dl usdt_test_lib)
   set_target_properties(test_libbcc PROPERTIES INSTALL_RPATH ${PROJECT_BINARY_DIR}/src/cc)
@@ -55,7 +109,7 @@
 
 if(LIBBPF_FOUND)
   add_executable(test_libbcc_no_libbpf ${TEST_LIBBCC_SOURCES})
-  add_dependencies(test_libbcc_no_libbpf bcc-shared)
+  add_dependencies(test_libbcc_no_libbpf bcc-shared zip_archive ${DEBUGINFO_TARGETS})
 
   target_link_libraries(test_libbcc_no_libbpf ${PROJECT_BINARY_DIR}/src/cc/libbcc.so dl usdt_test_lib ${LIBBPF_LIBRARIES})
   set_target_properties(test_libbcc_no_libbpf PROPERTIES INSTALL_RPATH ${PROJECT_BINARY_DIR}/src/cc)
diff --git a/tests/cc/debuginfo_test_lib.cc b/tests/cc/debuginfo_test_lib.cc
new file mode 100644
index 0000000..0b3ec0e
--- /dev/null
+++ b/tests/cc/debuginfo_test_lib.cc
@@ -0,0 +1,4 @@
+extern "C" {
+
+int symbol() { return 0; }
+}
diff --git a/tests/cc/test_bpf_table.cc b/tests/cc/test_bpf_table.cc
index 43bf28b..9ef10f4 100644
--- a/tests/cc/test_bpf_table.cc
+++ b/tests/cc/test_bpf_table.cc
@@ -26,7 +26,7 @@
     BPF_TABLE("hash", int, int, myhash, 128);
   )";
 
-  ebpf::BPF *bpf(new ebpf::BPF);
+  auto bpf = std::make_unique<ebpf::BPF>();
   ebpf::StatusTuple res(0);
   std::vector<std::pair<std::string, std::string>> elements;
   res = bpf->init(BPF_PROGRAM);
@@ -79,7 +79,7 @@
   REQUIRE(elements.size() == 0);
 
   // delete bpf_module, call to key/leaf printf/scanf must fail
-  delete bpf;
+  bpf.reset();
 
   res = t.update_value("0x07", "0x42");
   REQUIRE(!res.ok());
diff --git a/tests/cc/test_c_api.cc b/tests/cc/test_c_api.cc
index e456840..7499bb9 100644
--- a/tests/cc/test_c_api.cc
+++ b/tests/cc/test_c_api.cc
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <fcntl.h>
 #include <dlfcn.h>
-#include <stdint.h>
-#include <string.h>
+#include <fcntl.h>
 #include <link.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
@@ -25,15 +26,16 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include <cstdlib>
+
 #include "bcc_elf.h"
 #include "bcc_perf_map.h"
 #include "bcc_proc.h"
 #include "bcc_syms.h"
+#include "catch.hpp"
 #include "common.h"
 #include "vendor/tinyformat.hpp"
 
-#include "catch.hpp"
-
 using namespace std;
 
 static pid_t spawn_child(void *, bool, bool, int (*)(void *));
@@ -110,6 +112,105 @@
   bcc_procutils_free(sym.module);
 }
 
+namespace {
+
+static std::string zipped_lib_path() {
+  return CMAKE_CURRENT_BINARY_DIR "/archive.zip!/libdebuginfo_test_lib.so";
+}
+
+}  // namespace
+
+TEST_CASE("resolve symbol name in external zipped library", "[c_api]") {
+  struct bcc_symbol sym;
+  REQUIRE(bcc_resolve_symname(zipped_lib_path().c_str(), "symbol", 0x0, 0,
+                              nullptr, &sym) == 0);
+  REQUIRE(sym.module == zipped_lib_path());
+  REQUIRE(sym.offset != 0);
+  bcc_procutils_free(sym.module);
+}
+
+namespace {
+
+void system(const std::string &command) {
+  if (::system(command.c_str())) {
+    abort();
+  }
+}
+
+class TmpDir {
+ public:
+  TmpDir() : path_("/tmp/bcc-test-XXXXXX") {
+    if (::mkdtemp(&path_[0]) == nullptr) {
+      abort();
+    }
+  }
+
+  ~TmpDir() { system("rm -rf " + path_); }
+
+  const std::string &path() const { return path_; }
+
+ private:
+  std::string path_;
+};
+
+void test_debuginfo_only_symbol(const std::string &lib) {
+  struct bcc_symbol sym;
+  REQUIRE(bcc_resolve_symname(lib.c_str(), "debuginfo_only_symbol", 0x0, 0,
+                              nullptr, &sym) == 0);
+  REQUIRE(sym.module[0] == '/');
+  REQUIRE(sym.offset != 0);
+  bcc_procutils_free(sym.module);
+}
+
+}  // namespace
+
+TEST_CASE("resolve symbol name via symfs", "[c_api]") {
+  TmpDir tmpdir;
+  std::string lib_path = tmpdir.path() + "/lib.so";
+  std::string symfs = tmpdir.path() + "/symfs";
+  std::string symfs_lib_dir = symfs + "/" + tmpdir.path();
+  std::string symfs_lib_path = symfs_lib_dir + "/lib.so";
+
+  system("mkdir -p " + symfs);
+  system("cp " CMAKE_CURRENT_BINARY_DIR "/libdebuginfo_test_lib.so " +
+         lib_path);
+  system("mkdir -p " + symfs_lib_dir);
+  system("cp " CMAKE_CURRENT_BINARY_DIR "/debuginfo.so " + symfs_lib_path);
+
+  ::setenv("BCC_SYMFS", symfs.c_str(), 1);
+  test_debuginfo_only_symbol(lib_path);
+  ::unsetenv("BCC_SYMFS");
+}
+
+TEST_CASE("resolve symbol name via buildid", "[c_api]") {
+  char build_id[128] = {0};
+  REQUIRE(bcc_elf_get_buildid(CMAKE_CURRENT_BINARY_DIR
+                              "/libdebuginfo_test_lib.so",
+                              build_id) == 0);
+
+  TmpDir tmpdir;
+  std::string debugso_dir =
+      tmpdir.path() + "/.build-id/" + build_id[0] + build_id[1];
+  std::string debugso = debugso_dir + "/" + (build_id + 2) + ".debug";
+  system("mkdir -p " + debugso_dir);
+  system("cp " CMAKE_CURRENT_BINARY_DIR "/debuginfo.so " + debugso);
+
+  ::setenv("BCC_DEBUGINFO_ROOT", tmpdir.path().c_str(), 1);
+  test_debuginfo_only_symbol(CMAKE_CURRENT_BINARY_DIR
+                             "/libdebuginfo_test_lib.so");
+  ::unsetenv("BCC_DEBUGINFO_ROOT");
+}
+
+TEST_CASE("resolve symbol name via gnu_debuglink", "[c_api]") {
+  test_debuginfo_only_symbol(CMAKE_CURRENT_BINARY_DIR "/with_gnu_debuglink.so");
+}
+
+#ifdef HAVE_LIBLZMA
+TEST_CASE("resolve symbol name via mini debug info", "[c_api]") {
+  test_debuginfo_only_symbol(CMAKE_CURRENT_BINARY_DIR "/with_gnu_debugdata.so");
+}
+#endif
+
 extern "C" int _a_test_function(const char *a_string) {
   int i;
   for (i = 0; a_string[i]; ++i)
@@ -156,7 +257,7 @@
     return -1;
   }
 
-  strncpy(libpath, lm->l_name, 1024);
+  strncpy(libpath, lm->l_name, sizeof(libpath) - 1);
   dlclose(dlhdl);
   dlhdl = NULL;
 
@@ -309,6 +410,107 @@
     REQUIRE(bcc_symcache_resolve_name(lazy_resolver, "/tmp/libz.so.1", "zlibVersion",
         &lazy_addr) == 0);
     REQUIRE(lazy_addr == addr);
+    bcc_free_symcache(resolver, child);
+    bcc_free_symcache(lazy_resolver, child);
+  }
+  bcc_free_symcache(resolver, getpid());
+  bcc_free_symcache(lazy_resolver, getpid());
+}
+
+TEST_CASE("resolve symbol addresses for an exited process", "[c-api]") {
+  struct bcc_symbol sym;
+  struct bcc_symbol lazy_sym;
+  static struct bcc_symbol_option lazy_opt {
+    .use_debug_file = 1, .check_debug_file_crc = 1, .lazy_symbolize = 1,
+#if defined(__powerpc64__) && defined(_CALL_ELF) && _CALL_ELF == 2
+    .use_symbol_type = BCC_SYM_ALL_TYPES | (1 << STT_PPC64_ELFV2_SYM_LEP),
+#else
+    .use_symbol_type = BCC_SYM_ALL_TYPES,
+#endif
+  };
+
+  SECTION("resolve in current namespace") {
+    pid_t child = spawn_child(nullptr, false, false, [](void *) {
+      sleep(5);
+      return 0;
+    });
+    void *resolver = bcc_symcache_new(child, nullptr);
+    void *lazy_resolver = bcc_symcache_new(child, &lazy_opt);
+
+    REQUIRE(resolver);
+    REQUIRE(lazy_resolver);
+
+    kill(child, SIGTERM);
+
+    REQUIRE(bcc_symcache_resolve(resolver, (uint64_t)&_a_test_function, &sym) ==
+            0);
+
+    char *this_exe = realpath("/proc/self/exe", NULL);
+    REQUIRE(string(this_exe) == sym.module);
+    free(this_exe);
+
+    REQUIRE(string("_a_test_function") == sym.name);
+
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)&_a_test_function,
+                                 &lazy_sym) == 0);
+    REQUIRE(string(lazy_sym.name) == sym.name);
+    REQUIRE(string(lazy_sym.module) == sym.module);
+  }
+
+  SECTION("resolve in separate pid namespace") {
+    pid_t child = spawn_child(nullptr, true, false, [](void *) {
+      sleep(5);
+      return 0;
+    });
+    void *resolver = bcc_symcache_new(child, nullptr);
+    void *lazy_resolver = bcc_symcache_new(child, &lazy_opt);
+
+    REQUIRE(resolver);
+    REQUIRE(lazy_resolver);
+
+    kill(child, SIGTERM);
+
+    REQUIRE(bcc_symcache_resolve(resolver, (uint64_t)&_a_test_function, &sym) ==
+            0);
+
+    char *this_exe = realpath("/proc/self/exe", NULL);
+    REQUIRE(string(this_exe) == sym.module);
+    free(this_exe);
+
+    REQUIRE(string("_a_test_function") == sym.name);
+
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)&_a_test_function,
+                                 &lazy_sym) == 0);
+    REQUIRE(string(lazy_sym.name) == sym.name);
+    REQUIRE(string(lazy_sym.module) == sym.module);
+  }
+
+  SECTION("resolve in separate pid and mount namespace") {
+    pid_t child = spawn_child(nullptr, true, true, [](void *) {
+      sleep(5);
+      return 0;
+    });
+    void *resolver = bcc_symcache_new(child, nullptr);
+    void *lazy_resolver = bcc_symcache_new(child, &lazy_opt);
+
+    REQUIRE(resolver);
+    REQUIRE(lazy_resolver);
+
+    kill(child, SIGTERM);
+
+    REQUIRE(bcc_symcache_resolve(resolver, (uint64_t)&_a_test_function, &sym) ==
+            0);
+
+    char *this_exe = realpath("/proc/self/exe", NULL);
+    REQUIRE(string(this_exe) == sym.module);
+    free(this_exe);
+
+    REQUIRE(string("_a_test_function") == sym.name);
+
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)&_a_test_function,
+                                 &lazy_sym) == 0);
+    REQUIRE(string(lazy_sym.name) == sym.name);
+    REQUIRE(string(lazy_sym.module) == sym.module);
   }
 }
 
@@ -412,6 +614,8 @@
     REQUIRE(sym.module);
     REQUIRE(string(sym.module) == perf_map_path(child));
     REQUIRE(string("right_next_door_fn") == sym.name);
+    bcc_free_symcache(resolver, child);
+
   }
 
   SECTION("separate namespace") {
@@ -428,6 +632,7 @@
     REQUIRE(string(sym.module) == perf_map_path(1));
     REQUIRE(string("dummy_fn") == sym.name);
     unlink("/tmp/perf-1.map");
+    bcc_free_symcache(resolver, child);
   }
 
   SECTION("separate pid and mount namespace") {
@@ -444,6 +649,7 @@
     // child is PID 1 in its namespace
     REQUIRE(string(sym.module) == perf_map_path(1));
     REQUIRE(string("dummy_fn") == sym.name);
+    bcc_free_symcache(resolver, child);
   }
 
   SECTION("separate pid and mount namespace, perf-map in host") {
@@ -465,6 +671,7 @@
     REQUIRE(string("dummy_fn") == sym.name);
 
     unlink(path.c_str());
+    bcc_free_symcache(resolver, child);
   }
 
 
@@ -486,7 +693,8 @@
 };
 
 TEST_CASE("searching for modules in /proc/[pid]/maps", "[c_api][!mayfail]") {
-  FILE *dummy_maps = fopen("dummy_proc_map.txt", "r");
+  std::string dummy_maps_path = CMAKE_CURRENT_BINARY_DIR + std::string("/dummy_proc_map.txt");
+  FILE *dummy_maps = fopen(dummy_maps_path.c_str(), "r");
   REQUIRE(dummy_maps != NULL);
 
   SECTION("name match") {
@@ -578,6 +786,27 @@
   }
 
   fclose(dummy_maps);
+
+  SECTION("seach for lib in zip") {
+    std::string line =
+        "7f151476e000-7f1514779000 r-xp 00001000 00:1b "
+        "72809479 " CMAKE_CURRENT_BINARY_DIR "/archive.zip\n";
+    dummy_maps = fmemopen(nullptr, line.size(), "w+");
+    REQUIRE(fwrite(line.c_str(), line.size(), 1, dummy_maps) == 1);
+    fseek(dummy_maps, 0, SEEK_SET);
+
+    struct mod_search search;
+    memset(&search, 0, sizeof(struct mod_search));
+    std::string zip_entry_path = zipped_lib_path();
+    search.name = zip_entry_path.c_str();
+    int res = _procfs_maps_each_module(dummy_maps, getpid(),
+                                       _bcc_syms_find_module, &search);
+    REQUIRE(res == 0);
+    REQUIRE(search.start == 0x7f151476e000);
+    REQUIRE(search.file_offset < 0x1000);
+
+    fclose(dummy_maps);
+  }
 }
 
 TEST_CASE("resolve global addr in libc in this process", "[c_api][!mayfail]") {
@@ -598,6 +827,60 @@
   res = bcc_resolve_global_addr(pid, sopath, local_addr, 0, &global_addr);
   REQUIRE(res == 0);
   REQUIRE(global_addr == (search.start + local_addr - search.file_offset));
+  free(sopath);
+}
+
+/* Consider the following scenario: we have some process that maps in a shared library [1] with a
+ * USDT probe [2]. The shared library's .text section doesn't have matching address and file off
+ * [3]. Since the location address in [2] is an offset relative to the base address of whatever.so
+ * in whatever process is mapping it, we need to convert the location address 0x77b8c to a global
+ * address in the process' address space in order to attach to the USDT.
+ *
+ * The formula for this (__so_calc_global_addr) is
+ *   global_addr = offset + (mod_start_addr - mod_file_offset)
+ *                        - (elf_sec_start_addr - elf_sec_file_offset)
+ *
+ * Which for our concrete example is
+ *   global_addr = 0x77b8c + (0x7f6cda31e000 - 0x72000) - (0x73c90 - 0x72c90)
+ *   global_addr = 0x7f6cda322b8c
+ *
+ * [1 - output from `cat /proc/PID/maps`]
+ * 7f6cda2ab000-7f6cda31e000 r--p 00000000 00:2d 5370022276                 /whatever.so
+ * 7f6cda31e000-7f6cda434000 r-xp 00072000 00:2d 5370022276                 /whatever.so
+ * 7f6cda434000-7f6cda43d000 r--p 00187000 00:2d 5370022276                 /whatever.so
+ * 7f6cda43d000-7f6cda43f000 rw-p 0018f000 00:2d 5370022276                 /whatever.so
+ *
+ * [2 - output from `readelf -n /whatever.so`]
+ * stapsdt              0x00000038 NT_STAPSDT (SystemTap probe descriptors)
+ *   Provider: test
+ *   Name: test_probe
+ *   Location: 0x0000000000077b8c, Base: 0x0000000000000000, Semaphore: 0x0000000000000000
+ *   Arguments: -8@$5
+ *
+ * [3 - output from `readelf -W --sections /whatever.so`]
+ *   [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
+ *   [16] .text             PROGBITS        0000000000073c90 072c90 1132dc 00  AX  0   0 16
+ */
+TEST_CASE("conversion of module offset to/from global_addr", "[c_api]") {
+  uint64_t global_addr, offset, calc_offset, mod_start_addr, mod_file_offset;
+  uint64_t elf_sec_start_addr, elf_sec_file_offset;
+
+  /* Initialize per example in comment above */
+  offset = 0x77b8c;
+  mod_start_addr = 0x7f6cda31e000;
+  mod_file_offset = 0x00072000;
+  elf_sec_start_addr = 0x73c90;
+  elf_sec_file_offset = 0x72c90;
+  global_addr = __so_calc_global_addr(mod_start_addr, mod_file_offset,
+                                      elf_sec_start_addr, elf_sec_file_offset,
+                                      offset);
+  REQUIRE(global_addr == 0x7f6cda322b8c);
+
+  /* Reverse operation (global_addr -> offset) should yield original offset */
+  calc_offset = __so_calc_mod_offset(mod_start_addr, mod_file_offset,
+                                     elf_sec_start_addr, elf_sec_file_offset,
+                                     global_addr);
+  REQUIRE(calc_offset == offset);
 }
 
 TEST_CASE("get online CPUs", "[c_api]") {
diff --git a/tests/cc/test_perf_event.cc b/tests/cc/test_perf_event.cc
index 3061ca8..c7f418c 100644
--- a/tests/cc/test_perf_event.cc
+++ b/tests/cc/test_perf_event.cc
@@ -59,8 +59,9 @@
       BPF_PROGRAM,
       {"-DNUM_CPUS=" + std::to_string(sysconf(_SC_NPROCESSORS_ONLN))}, {});
   REQUIRE(res.ok());
+  int pid = getpid();
   res =
-      bpf.open_perf_event("cnt", PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK);
+      bpf.open_perf_event("cnt", PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK, pid);
   REQUIRE(res.ok());
   std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
   res = bpf.attach_kprobe(getuid_fnname, "on_sys_getuid");
diff --git a/tests/cc/test_sock_table.cc b/tests/cc/test_sock_table.cc
index e389b9f..e0aa41a 100644
--- a/tests/cc/test_sock_table.cc
+++ b/tests/cc/test_sock_table.cc
@@ -25,6 +25,14 @@
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18, 0)
 
+// Prior to 5.15, the socket must be TCP established socket to be updatable.
+// https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=0c48eefae712c2fd91480346a07a1a9cd0f9470b
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
+  bool expected_update_result = false;
+#else
+  bool expected_update_result = true;
+#endif
+
 TEST_CASE("test sock map", "[sockmap]") {
   {
     const std::string BPF_PROGRAM = R"(
@@ -58,9 +66,8 @@
     res = sk_map.remove_value(key);
     REQUIRE(!res.ok());
 
-    // the socket must be TCP established socket.
     res = sk_map.update_value(key, val);
-    REQUIRE(!res.ok());
+    REQUIRE(res.ok() == expected_update_result);
   }
 }
 
@@ -101,9 +108,8 @@
     res = sk_hash.remove_value(key);
     REQUIRE(!res.ok());
 
-    // the socket must be TCP established socket.
     res = sk_hash.update_value(key, val);
-    REQUIRE(!res.ok());
+    REQUIRE(res.ok() == expected_update_result);
   }
 }
 
diff --git a/tests/cc/test_usdt_args.cc b/tests/cc/test_usdt_args.cc
index 7153285..66f92f8 100644
--- a/tests/cc/test_usdt_args.cc
+++ b/tests/cc/test_usdt_args.cc
@@ -53,13 +53,16 @@
 }
 
 /* supported arches only */
-#if defined(__aarch64__) || defined(__powerpc64__) || \
-    defined(__s390x__) || defined(__x86_64__)
+#if defined(__aarch64__) || defined(__loongarch64) || \
+    defined(__powerpc64__) || defined(__s390x__) || \
+    defined(__x86_64__)
 
 TEST_CASE("test usdt argument parsing", "[usdt]") {
   SECTION("parse failure") {
 #ifdef __aarch64__
     USDT::ArgumentParser_aarch64 parser("4@[x32,200]");
+#elif __loongarch64
+    USDT::ArgumentParser_loongarch64 parser("4@[$r32,200]");
 #elif __powerpc64__
     USDT::ArgumentParser_powerpc64 parser("4@-12(42)");
 #elif __s390x__
@@ -86,6 +89,15 @@
     verify_register(parser, -4, "regs[30]", -40);
     verify_register(parser, -4, "sp", -40);
     verify_register(parser, 8, "sp", 120);
+#elif __loongarch64
+    USDT::ArgumentParser_loongarch64 parser(
+	"-1@$r0 4@5 8@[$r12] -4@[$r30,-40] -4@[$r3,-40] 8@[sp, 120]");
+    verify_register(parser, -1, "regs[0]");
+    verify_register(parser, 4, 5);
+    verify_register(parser, 8, "regs[12]", 0);
+    verify_register(parser, -4, "regs[30]", -40);
+    verify_register(parser, -4, "sp", -40);
+    verify_register(parser, 8, "sp", 120);
 #elif __powerpc64__
     USDT::ArgumentParser_powerpc64 parser(
         "-4@0 8@%r0 8@i0 4@0(%r0) -2@0(0) "
diff --git a/tests/cc/test_usdt_probes.cc b/tests/cc/test_usdt_probes.cc
index 1243e52..b971110 100644
--- a/tests/cc/test_usdt_probes.cc
+++ b/tests/cc/test_usdt_probes.cc
@@ -376,7 +376,7 @@
 
   SECTION("in separate mount namespace and separate PID namespace") {
     static char _unshare[] = "unshare";
-    const char *const argv[8] = {_unshare,  "--fork", "--kill-child",
+    const char *const argv[8] = {_unshare,  "--fork",
                                  "--mount", "--pid",  "--mount-proc",
                                  "ruby",    NULL};
 
@@ -404,6 +404,8 @@
     std::string module = pid_root + "usr/local/bin/ruby";
     REQUIRE(bcc_resolve_symname(module.c_str(), "rb_gc_mark", 0x0, ruby_pid, nullptr, &sym) == 0);
     REQUIRE(std::string(sym.module).find(pid_root, 1) == std::string::npos);
+    kill(ruby_pid, SIGKILL);
+    bcc_procutils_free(sym.module);
   }
 }
 
diff --git a/tests/cc/test_zip.cc b/tests/cc/test_zip.cc
new file mode 100644
index 0000000..c2d0887
--- /dev/null
+++ b/tests/cc/test_zip.cc
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cstring>
+
+#include "bcc_zip.h"
+#include "catch.hpp"
+
+#define LIB_ENTRY_NAME "libdebuginfo_test_lib.so"
+#define ENTRY_IN_SUBDIR_NAME "zip_subdir/file.txt"
+#define NOT_AN_ARCHIVE_PATH CMAKE_CURRENT_BINARY_DIR "/dummy_proc_map.txt"
+#define TEST_ARCHIVE_PATH CMAKE_CURRENT_BINARY_DIR "/archive.zip"
+
+namespace {
+
+void require_entry_name_is(const bcc_zip_entry& entry, const char* name) {
+  REQUIRE(entry.name_length == strlen(name));
+  REQUIRE(memcmp(entry.name, name, strlen(name)) == 0);
+}
+
+bcc_zip_entry get_required_entry(bcc_zip_archive* archive,
+                                 const char* asset_name) {
+  bcc_zip_entry out;
+  REQUIRE(bcc_zip_archive_find_entry(archive, asset_name, &out) == 0);
+  require_entry_name_is(out, asset_name);
+  return out;
+}
+
+const void* get_uncompressed_data(const bcc_zip_entry& entry) {
+  REQUIRE(entry.compression == 0);
+  REQUIRE(entry.data_offset > 0);
+  REQUIRE(entry.data != nullptr);
+  return entry.data;
+}
+
+}  // namespace
+
+TEST_CASE("returns error for non-zip files", "[zip]") {
+  bcc_zip_archive* archive = bcc_zip_archive_open(NOT_AN_ARCHIVE_PATH);
+  REQUIRE(archive == nullptr);
+}
+
+TEST_CASE("finds entries in a zip archive by name", "[zip]") {
+  bcc_zip_archive* archive = bcc_zip_archive_open(TEST_ARCHIVE_PATH);
+  REQUIRE(archive != nullptr);
+
+  bcc_zip_entry entry = get_required_entry(archive, LIB_ENTRY_NAME);
+  REQUIRE(memcmp(get_uncompressed_data(entry),
+                 "\x7f"
+                 "ELF",
+                 4) == 0);
+
+  entry = get_required_entry(archive, ENTRY_IN_SUBDIR_NAME);
+  REQUIRE(memcmp(get_uncompressed_data(entry), "This is a text file\n", 20) ==
+          0);
+
+  REQUIRE(bcc_zip_archive_find_entry(archive, "missing", &entry) == -1);
+
+  bcc_zip_archive_close(archive);
+}
+
+TEST_CASE("finds entries in a zip archive by offset", "[zip]") {
+  bcc_zip_archive* archive = bcc_zip_archive_open(TEST_ARCHIVE_PATH);
+  REQUIRE(archive != nullptr);
+
+  bcc_zip_entry entry;
+  REQUIRE(bcc_zip_archive_find_entry_at_offset(archive, 100, &entry) == 0);
+  require_entry_name_is(entry, LIB_ENTRY_NAME);
+  REQUIRE(memcmp(get_uncompressed_data(entry),
+                 "\x7f"
+                 "ELF",
+                 4) == 0);
+
+  REQUIRE(bcc_zip_archive_find_entry_at_offset(archive, 100000, &entry) == -1);
+
+  bcc_zip_archive_close(archive);
+}
+
+TEST_CASE("open zip archive and finds an entry", "[zip]") {
+  bcc_zip_entry entry;
+  bcc_zip_archive* archive = bcc_zip_archive_open_and_find(
+      TEST_ARCHIVE_PATH "!/" LIB_ENTRY_NAME, &entry);
+  REQUIRE(archive != nullptr);
+  require_entry_name_is(entry, LIB_ENTRY_NAME);
+  REQUIRE(memcmp(get_uncompressed_data(entry),
+                 "\x7f"
+                 "ELF",
+                 4) == 0);
+  bcc_zip_archive_close(archive);
+
+  archive = bcc_zip_archive_open_and_find(
+      TEST_ARCHIVE_PATH "!/" ENTRY_IN_SUBDIR_NAME, &entry);
+  REQUIRE(archive != nullptr);
+  require_entry_name_is(entry, ENTRY_IN_SUBDIR_NAME);
+  REQUIRE(memcmp(get_uncompressed_data(entry), "This is a text file\n", 20) ==
+          0);
+  bcc_zip_archive_close(archive);
+
+  archive =
+      bcc_zip_archive_open_and_find(TEST_ARCHIVE_PATH "!/NOT_FOUND", &entry);
+  REQUIRE(archive == nullptr);
+}
diff --git a/tests/python/test_array.py b/tests/python/test_array.py
index 0ca995d..0e4f5ce 100755
--- a/tests/python/test_array.py
+++ b/tests/python/test_array.py
@@ -12,8 +12,8 @@
 
 class TestArray(TestCase):
     def test_simple(self):
-        b = BPF(text="""BPF_ARRAY(table1, u64, 128);""")
-        t1 = b["table1"]
+        b = BPF(text=b"""BPF_ARRAY(table1, u64, 128);""")
+        t1 = b[b"table1"]
         t1[ct.c_int(0)] = ct.c_ulonglong(100)
         t1[ct.c_int(127)] = ct.c_ulonglong(1000)
         for i, v in t1.items():
@@ -24,8 +24,8 @@
         self.assertEqual(len(t1), 128)
 
     def test_native_type(self):
-        b = BPF(text="""BPF_ARRAY(table1, u64, 128);""")
-        t1 = b["table1"]
+        b = BPF(text=b"""BPF_ARRAY(table1, u64, 128);""")
+        t1 = b[b"table1"]
         t1[0] = ct.c_ulonglong(100)
         t1[-2] = ct.c_ulonglong(37)
         t1[127] = ct.c_ulonglong(1000)
@@ -52,7 +52,7 @@
         def lost_cb(lost):
             self.assertGreater(lost, 0)
 
-        text = """
+        text = b"""
 BPF_PERF_OUTPUT(events);
 int do_sys_nanosleep(void *ctx) {
     struct {
@@ -63,11 +63,11 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_perf_buffer(cb, lost_cb=lost_cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_perf_buffer(cb, lost_cb=lost_cb)
         subprocess.call(['sleep', '0.1'])
         b.perf_buffer_poll()
         self.assertGreater(self.counter, 0)
@@ -87,7 +87,7 @@
         def lost_cb(lost):
             self.assertGreater(lost, 0)
 
-        text = """
+        text = b"""
 BPF_PERF_OUTPUT(events);
 int do_sys_nanosleep(void *ctx) {
     struct {
@@ -98,11 +98,11 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_perf_buffer(cb, lost_cb=lost_cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_perf_buffer(cb, lost_cb=lost_cb)
         online_cpus = get_online_cpus()
         for cpu in online_cpus:
             subprocess.call(['taskset', '-c', str(cpu), 'sleep', '0.1'])
diff --git a/tests/python/test_attach_perf_event.py b/tests/python/test_attach_perf_event.py
index f4bae4f..9e2d0f4 100755
--- a/tests/python/test_attach_perf_event.py
+++ b/tests/python/test_attach_perf_event.py
@@ -16,7 +16,7 @@
     @unittest.skipUnless(kernel_version_ge(4,9), "requires kernel >= 4.9")
     def test_attach_raw_event_powerpc(self):
         # on PowerPC, 'addr' is always written to; for x86 see _x86 version of test
-        bpf_text="""
+        bpf_text=b"""
 #include <linux/perf_event.h>
 struct key_t {
     int cpu;
@@ -56,7 +56,7 @@
             event_attr.sample_period = 1000000
             event_attr.sample_type = PerfEventSampleFormat.ADDR
             event_attr.exclude_kernel = 1
-            b.attach_perf_event_raw(attr=event_attr, fn_name="on_sample_hit", pid=-1, cpu=-1)
+            b.attach_perf_event_raw(attr=event_attr, fn_name=b"on_sample_hit", pid=-1, cpu=-1)
         except Exception:
             print("Failed to attach to a raw event. Please check the event attr used")
             exit()
@@ -68,7 +68,7 @@
     @unittest.skipUnless(kernel_version_ge(4,17), "bpf_perf_event_data->addr requires kernel >= 4.17")
     def test_attach_raw_event_x86(self):
         # on x86, need to set precise_ip in order for perf_events to write to 'addr'
-        bpf_text="""
+        bpf_text=b"""
 #include <linux/perf_event.h>
 struct key_t {
     int cpu;
@@ -102,7 +102,7 @@
             event_attr.sample_type = PerfEventSampleFormat.ADDR
             event_attr.exclude_kernel = 1
             event_attr.precise_ip = 2
-            b.attach_perf_event_raw(attr=event_attr, fn_name="on_sample_hit", pid=-1, cpu=-1)
+            b.attach_perf_event_raw(attr=event_attr, fn_name=b"on_sample_hit", pid=-1, cpu=-1)
         except Exception:
             print("Failed to attach to a raw event. Please check the event attr used")
             exit()
@@ -114,7 +114,7 @@
     # SW perf events should work on GH actions, so expect this to succeed
     @unittest.skipUnless(kernel_version_ge(4,17), "bpf_perf_event_data->addr requires kernel >= 4.17")
     def test_attach_raw_sw_event(self):
-        bpf_text="""
+        bpf_text=b"""
 #include <linux/perf_event.h>
 struct key_t {
     int cpu;
@@ -147,7 +147,7 @@
             event_attr.sample_period = 100
             event_attr.sample_type = PerfEventSampleFormat.ADDR
             event_attr.exclude_kernel = 1
-            b.attach_perf_event_raw(attr=event_attr, fn_name="on_sample_hit", pid=-1, cpu=-1)
+            b.attach_perf_event_raw(attr=event_attr, fn_name=b"on_sample_hit", pid=-1, cpu=-1)
         except Exception:
             print("Failed to attach to a raw event. Please check the event attr used")
             exit()
diff --git a/tests/python/test_bpf_log.py b/tests/python/test_bpf_log.py
index e38c5ea..f13b20f 100755
--- a/tests/python/test_bpf_log.py
+++ b/tests/python/test_bpf_log.py
@@ -12,19 +12,19 @@
 
 error_msg = "R0 invalid mem access 'map_value_or_null'\n"
 
-text = """
+text = b"""
        #include <uapi/linux/ptrace.h>
        #include <bcc/proto.h>
        BPF_HASH(t1, int, int, 10);
        int sim_port(struct __sk_buff *skb) {
            int x = 0, *y;
        """
-repeat = """
+repeat = b"""
            y = t1.lookup(&x);
            if (!y) return 0;
            x = *y;
          """
-end = """
+end = b"""
            y = t1.lookup(&x);
            x = *y;
            return 0;
@@ -47,7 +47,7 @@
     def test_log_debug(self):
         b = BPF(text=text, debug=2)
         try:
-            ingress = b.load_func("sim_port",BPF.SCHED_CLS)
+            ingress = b.load_func(b"sim_port",BPF.SCHED_CLS)
         except Exception:
             self.fp.flush()
             self.fp.seek(0)
@@ -57,7 +57,7 @@
     def test_log_no_debug(self):
         b = BPF(text=text, debug=0)
         try:
-            ingress = b.load_func("sim_port",BPF.SCHED_CLS)
+            ingress = b.load_func(b"sim_port",BPF.SCHED_CLS)
         except Exception:
             self.fp.flush()
             self.fp.seek(0)
diff --git a/tests/python/test_brb.py b/tests/python/test_brb.py
index ed4cb7f..d9ca52e 100755
--- a/tests/python/test_brb.py
+++ b/tests/python/test_brb.py
@@ -65,7 +65,7 @@
 from netaddr import IPAddress, EUI
 from bcc import BPF
 from pyroute2 import IPRoute, NetNS, IPDB, NSPopen
-from utils import NSPopenWithCheck, mayFail
+from utils import NSPopenWithCheck, skipUnlessHasBinaries
 import sys
 from time import sleep
 from unittest import main, TestCase
@@ -89,20 +89,20 @@
         self.vm2_rtr_mask   = "200.1.1.0/24"
 
     def get_table(self, b):
-        self.jump = b.get_table("jump")
+        self.jump = b.get_table(b"jump")
 
-        self.pem_dest = b.get_table("pem_dest")
-        self.pem_port = b.get_table("pem_port")
-        self.pem_ifindex = b.get_table("pem_ifindex")
-        self.pem_stats = b.get_table("pem_stats")
+        self.pem_dest = b.get_table(b"pem_dest")
+        self.pem_port = b.get_table(b"pem_port")
+        self.pem_ifindex = b.get_table(b"pem_ifindex")
+        self.pem_stats = b.get_table(b"pem_stats")
 
-        self.br1_dest = b.get_table("br1_dest")
-        self.br1_mac = b.get_table("br1_mac")
-        self.br1_rtr = b.get_table("br1_rtr")
+        self.br1_dest = b.get_table(b"br1_dest")
+        self.br1_mac = b.get_table(b"br1_mac")
+        self.br1_rtr = b.get_table(b"br1_rtr")
 
-        self.br2_dest = b.get_table("br2_dest")
-        self.br2_mac = b.get_table("br2_mac")
-        self.br2_rtr = b.get_table("br2_rtr")
+        self.br2_dest = b.get_table(b"br2_dest")
+        self.br2_mac = b.get_table(b"br2_mac")
+        self.br2_rtr = b.get_table(b"br2_rtr")
 
     def connect_ports(self, prog_id_pem, prog_id_br, curr_pem_pid, curr_br_pid,
                       br_dest_map, br_mac_map, ifindex, vm_mac, vm_ip):
@@ -147,13 +147,15 @@
         self.br1_rtr[c_uint(0)] = c_uint(self.nsrtr_eth0_out.index)
         self.br2_rtr[c_uint(0)] = c_uint(self.nsrtr_eth1_out.index)
 
-    @mayFail("If the 'iperf', 'netserver' and 'netperf' binaries are unavailable, this is allowed to fail.")
+    @skipUnlessHasBinaries(
+        ["arping", "iperf", "netperf", "netserver", "ping"],
+        "iperf and netperf packages must be installed.")
     def test_brb(self):
         try:
-            b = BPF(src_file=arg1, debug=0)
-            self.pem_fn = b.load_func("pem", BPF.SCHED_CLS)
-            self.br1_fn = b.load_func("br1", BPF.SCHED_CLS)
-            self.br2_fn = b.load_func("br2", BPF.SCHED_CLS)
+            b = BPF(src_file=arg1.encode(), debug=0)
+            self.pem_fn = b.load_func(b"pem", BPF.SCHED_CLS)
+            self.br1_fn = b.load_func(b"br1", BPF.SCHED_CLS)
+            self.br2_fn = b.load_func(b"br2", BPF.SCHED_CLS)
             self.get_table(b)
 
             # set up the topology
diff --git a/tests/python/test_brb2.py b/tests/python/test_brb2.py
index c7ef90e..89783f3 100755
--- a/tests/python/test_brb2.py
+++ b/tests/python/test_brb2.py
@@ -139,10 +139,10 @@
     @mayFail("This fails on github actions environment, and needs to be fixed")
     def test_brb2(self):
         try:
-            b = BPF(src_file=arg1, debug=0)
-            self.pem_fn = b.load_func("pem", BPF.SCHED_CLS)
-            self.pem_dest= b.get_table("pem_dest")
-            self.pem_stats = b.get_table("pem_stats")
+            b = BPF(src_file=arg1.encode(), debug=0)
+            self.pem_fn = b.load_func(b"pem", BPF.SCHED_CLS)
+            self.pem_dest= b.get_table(b"pem_dest")
+            self.pem_stats = b.get_table(b"pem_stats")
 
             # set up the topology
             self.set_default_const()
diff --git a/tests/python/test_call1.py b/tests/python/test_call1.py
index db40e1a..6a187ea 100755
--- a/tests/python/test_call1.py
+++ b/tests/python/test_call1.py
@@ -21,21 +21,21 @@
 
 class TestBPFSocket(TestCase):
     def setUp(self):
-        b = BPF(src_file=arg1, debug=0)
-        ether_fn = b.load_func("parse_ether", BPF.SCHED_CLS)
-        arp_fn = b.load_func("parse_arp", BPF.SCHED_CLS)
-        ip_fn = b.load_func("parse_ip", BPF.SCHED_CLS)
-        eop_fn = b.load_func("eop", BPF.SCHED_CLS)
+        b = BPF(src_file=arg1.encode(), debug=0)
+        ether_fn = b.load_func(b"parse_ether", BPF.SCHED_CLS)
+        arp_fn = b.load_func(b"parse_arp", BPF.SCHED_CLS)
+        ip_fn = b.load_func(b"parse_ip", BPF.SCHED_CLS)
+        eop_fn = b.load_func(b"eop", BPF.SCHED_CLS)
         ip = IPRoute()
-        ifindex = ip.link_lookup(ifname="eth0")[0]
+        ifindex = ip.link_lookup(ifname=b"eth0")[0]
         ip.tc("add", "sfq", ifindex, "1:")
         ip.tc("add-filter", "bpf", ifindex, ":1", fd=ether_fn.fd,
               name=ether_fn.name, parent="1:", action="ok", classid=1)
-        self.jump = b.get_table("jump", c_int, c_int)
+        self.jump = b.get_table(b"jump", c_int, c_int)
         self.jump[c_int(S_ARP)] = c_int(arp_fn.fd)
         self.jump[c_int(S_IP)] = c_int(ip_fn.fd)
         self.jump[c_int(S_EOP)] = c_int(eop_fn.fd)
-        self.stats = b.get_table("stats", c_int, c_ulonglong)
+        self.stats = b.get_table(b"stats", c_int, c_ulonglong)
 
     @mayFail("This may fail on github actions environment due to udp packet loss")
     def test_jumps(self):
diff --git a/tests/python/test_clang.py b/tests/python/test_clang.py
index 519e502..69aa717 100755
--- a/tests/python/test_clang.py
+++ b/tests/python/test_clang.py
@@ -2,7 +2,7 @@
 # Copyright (c) PLUMgrid, Inc.
 # Licensed under the Apache License, Version 2.0 (the "License")
 
-from bcc import BPF
+from bcc import BPF, BPFAttachType, BPFProgType
 from bcc.libbcc import lib
 import ctypes as ct
 from unittest import main, skipUnless, TestCase
@@ -27,10 +27,10 @@
 
 class TestClang(TestCase):
     def test_complex(self):
-        b = BPF(src_file="test_clang_complex.c", debug=0)
-        fn = b.load_func("handle_packet", BPF.SCHED_CLS)
+        b = BPF(src_file=b"test_clang_complex.c", debug=0)
+        fn = b.load_func(b"handle_packet", BPF.SCHED_CLS)
     def test_printk(self):
-        text = """
+        text = b"""
 #include <bcc/proto.h>
 int handle_packet(void *ctx) {
   u8 *cursor = 0;
@@ -41,10 +41,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("handle_packet", BPF.SCHED_CLS)
+        fn = b.load_func(b"handle_packet", BPF.SCHED_CLS)
 
     def test_probe_read1(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 #include <uapi/linux/ptrace.h>
 int count_sched(struct pt_regs *ctx, struct task_struct *prev) {
@@ -53,10 +53,20 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("count_sched", BPF.KPROBE)
+        fn = b.load_func(b"count_sched", BPF.KPROBE)
+
+    def test_load_cgroup_sockopt_prog(self):
+        text = b"""
+int sockopt(struct bpf_sockopt* ctx){
+
+    return 0;
+}
+"""
+        b = BPF(text=text, debug=0)
+        fn =  b.load_func(b"sockopt", BPFProgType.CGROUP_SOCKOPT, device = None, attach_type = BPFAttachType.CGROUP_SETSOCKOPT)
 
     def test_probe_read2(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 #include <uapi/linux/ptrace.h>
 int count_foo(struct pt_regs *ctx, unsigned long a, unsigned long b) {
@@ -64,10 +74,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("count_foo", BPF.KPROBE)
+        fn = b.load_func(b"count_foo", BPF.KPROBE)
 
     def test_probe_read3(self):
-        text = """
+        text = b"""
 #include <net/tcp.h>
 #define _(P) ({typeof(P) val = 0; bpf_probe_read_kernel(&val, sizeof(val), &P); val;})
 int count_tcp(struct pt_regs *ctx, struct sk_buff *skb) {
@@ -75,10 +85,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("count_tcp", BPF.KPROBE)
+        fn = b.load_func(b"count_tcp", BPF.KPROBE)
 
     def test_probe_read4(self):
-        text = """
+        text = b"""
 #include <net/tcp.h>
 #define _(P) ({typeof(P) val = 0; bpf_probe_read_kernel(&val, sizeof(val), &P); val;})
 int test(struct pt_regs *ctx, struct sk_buff *skb) {
@@ -86,10 +96,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_whitelist1(self):
-        text = """
+        text = b"""
 #include <net/tcp.h>
 int count_tcp(struct pt_regs *ctx, struct sk_buff *skb) {
     // The below define is in net/tcp.h:
@@ -103,10 +113,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("count_tcp", BPF.KPROBE)
+        fn = b.load_func(b"count_tcp", BPF.KPROBE)
 
     def test_probe_read_whitelist2(self):
-        text = """
+        text = b"""
 #include <net/tcp.h>
 int count_tcp(struct pt_regs *ctx, struct sk_buff *skb) {
     // The below define is in net/tcp.h:
@@ -120,10 +130,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("count_tcp", BPF.KPROBE)
+        fn = b.load_func(b"count_tcp", BPF.KPROBE)
 
     def test_probe_read_keys(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/blkdev.h>
 BPF_HASH(start, struct request *);
@@ -146,15 +156,15 @@
 
     @skipUnless(lib.bpf_module_rw_engine_enabled(), "requires enabled rwengine")
     def test_sscanf(self):
-        text = """
+        text = b"""
 BPF_HASH(stats, int, struct { u64 a; u64 b; u64 c:36; u64 d:28; struct { u32 a; u32 b; } s; }, 10);
 int foo(void *ctx) {
     return 0;
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("foo", BPF.KPROBE)
-        t = b.get_table("stats")
+        fn = b.load_func(b"foo", BPF.KPROBE)
+        t = b.get_table(b"stats")
         s1 = t.key_sprintf(t.Key(2))
         self.assertEqual(s1, b"0x2")
         s2 = t.leaf_sprintf(t.Leaf(2, 3, 4, 1, (5, 6)))
@@ -168,11 +178,11 @@
 
     @skipUnless(lib.bpf_module_rw_engine_enabled(), "requires enabled rwengine")
     def test_sscanf_array(self):
-        text = """
+        text = b"""
 BPF_HASH(stats, int, struct { u32 a[3]; u32 b; }, 10);
 """
         b = BPF(text=text, debug=0)
-        t = b.get_table("stats")
+        t = b.get_table(b"stats")
         s1 = t.key_sprintf(t.Key(2))
         self.assertEqual(s1, b"0x2")
         s2 = t.leaf_sprintf(t.Leaf((ct.c_uint * 3)(1,2,3), 4))
@@ -185,7 +195,7 @@
 
     @skipUnless(lib.bpf_module_rw_engine_enabled(), "requires enabled rwengine")
     def test_sscanf_string(self):
-        text = """
+        text = b"""
 struct Symbol {
     char name[128];
     char path[128];
@@ -198,7 +208,7 @@
 BPF_TABLE("array", int, struct Event, comms, 1);
 """
         b = BPF(text=text)
-        t = b.get_table("comms")
+        t = b.get_table(b"comms")
         s1 = t.leaf_sprintf(t[0])
         fill = b' { "" "" }' * 63
         self.assertEqual(s1, b'{ 0x0 0x0 [ { "" "" }%s ] }' % fill)
@@ -217,7 +227,7 @@
         self.assertEqual(l.stack[0].path, path)
 
     def test_iosnoop(self):
-        text = """
+        text = b"""
 #include <linux/blkdev.h>
 #include <uapi/linux/ptrace.h>
 
@@ -235,10 +245,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("do_request", BPF.KPROBE)
+        fn = b.load_func(b"do_request", BPF.KPROBE)
 
     def test_blk_start_request(self):
-        text = """
+        text = b"""
 #include <linux/blkdev.h>
 #include <uapi/linux/ptrace.h>
 int do_request(struct pt_regs *ctx, int req) {
@@ -247,10 +257,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("do_request", BPF.KPROBE)
+        fn = b.load_func(b"do_request", BPF.KPROBE)
 
     def test_bpf_hash(self):
-        text = """
+        text = b"""
 BPF_HASH(table1);
 BPF_HASH(table2, u32);
 BPF_HASH(table3, u32, int);
@@ -258,7 +268,7 @@
         b = BPF(text=text, debug=0)
 
     def test_consecutive_probe_read(self):
-        text = """
+        text = b"""
 #include <linux/fs.h>
 #include <linux/mount.h>
 BPF_HASH(table1, struct super_block *);
@@ -277,10 +287,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("trace_entry", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry", BPF.KPROBE)
 
     def test_nested_probe_read(self):
-        text = """
+        text = b"""
 #include <linux/fs.h>
 int trace_entry(struct pt_regs *ctx, struct file *file) {
     if (!file) return 0;
@@ -290,10 +300,10 @@
 }
 """
         b = BPF(text=text, debug=0)
-        fn = b.load_func("trace_entry", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry", BPF.KPROBE)
 
     def test_nested_probe_read_deref(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 struct sock {
     u32 *sk_daddr;
@@ -303,10 +313,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_char_array_probe(self):
-        BPF(text="""#include <linux/blkdev.h>
+        BPF(text=b"""#include <linux/blkdev.h>
 int kprobe__blk_update_request(struct pt_regs *ctx, struct request *req) {
     bpf_trace_printk("%s\\n", req->rq_disk->disk_name);
     return 0;
@@ -317,13 +327,13 @@
         # Skip if the kernel is not compiled with CONFIG_BPF_LSM
         if not BPF.support_lsm():
             return
-        b = BPF(text="""
+        b = BPF(text=b"""
 LSM_PROBE(bpf, int cmd, union bpf_attr *uattr, unsigned int size) {
     return 0;
 }""")
 
     def test_probe_read_helper(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <linux/fs.h>
 static void print_file_name(struct file *file) {
     if (!file) return;
@@ -342,11 +352,11 @@
     return 0;
 }
 """)
-        fn = b.load_func("trace_entry1", BPF.KPROBE)
-        fn = b.load_func("trace_entry2", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry1", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry2", BPF.KPROBE)
 
     def test_probe_unnamed_union_deref(self):
-        text = """
+        text = b"""
 #include <linux/mm_types.h>
 int trace(struct pt_regs *ctx, struct page *page) {
     void *p = page->mapping;
@@ -360,7 +370,7 @@
             pass
 
     def test_probe_struct_assign(self):
-        b = BPF(text = """
+        b = BPF(text = b"""
 #include <uapi/linux/ptrace.h>
 struct args_t {
     const char *filename;
@@ -377,11 +387,11 @@
     return 0;
 };
 """)
-        b.attach_kprobe(event=b.get_syscall_fnname("open"),
-                        fn_name="do_sys_open")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"open"),
+                        fn_name=b"do_sys_open")
 
     def test_task_switch(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/sched.h>
 struct key_t {
@@ -404,7 +414,7 @@
 """)
 
     def test_probe_simple_assign(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/gfp.h>
 struct leaf { size_t size; };
@@ -418,7 +428,7 @@
 }""")
 
     def test_probe_simple_member_assign(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/netdevice.h>
 struct leaf { void *ptr; };
@@ -428,10 +438,10 @@
     lp->ptr = skb;
     return 0;
 }""")
-        b.load_func("test", BPF.KPROBE)
+        b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_member_expr_deref(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/netdevice.h>
 struct leaf { struct sk_buff *ptr; };
@@ -441,10 +451,10 @@
     lp->ptr = skb;
     return lp->ptr->priority;
 }""")
-        b.load_func("test", BPF.KPROBE)
+        b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_member_expr(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/netdevice.h>
 struct leaf { struct sk_buff *ptr; };
@@ -454,10 +464,10 @@
     lp->ptr = skb;
     return l.ptr->priority;
 }""")
-        b.load_func("test", BPF.KPROBE)
+        b.load_func(b"test", BPF.KPROBE)
 
     def test_unop_probe_read(self):
-        text = """
+        text = b"""
 #include <linux/blkdev.h>
 int trace_entry(struct pt_regs *ctx, struct request *req) {
     if (!(req->bio->bi_flags & 1))
@@ -468,10 +478,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("trace_entry", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry", BPF.KPROBE)
 
     def test_probe_read_nested_deref(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx, struct sock *sk) {
     struct sock *ptr1;
@@ -481,10 +491,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_deref2(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx, struct sock *sk) {
     struct sock *ptr1;
@@ -496,10 +506,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_deref3(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx, struct sock *sk) {
     struct sock **ptr1, **ptr2 = &sk;
@@ -508,10 +518,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_deref_func1(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 static struct sock **subtest(struct sock **sk) {
     return sk;
@@ -523,10 +533,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_deref_func2(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 static int subtest(struct sock ***skp) {
     return ((struct sock *)(**skp))->sk_daddr;
@@ -541,10 +551,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_member1(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx, struct sock *skp) {
     u32 *daddr = &skp->sk_daddr;
@@ -552,10 +562,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_member2(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 struct sock {
     u32 **sk_daddr;
@@ -566,10 +576,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_nested_member3(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 struct sock {
     u32 *sk_daddr;
@@ -579,10 +589,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_paren_probe_read(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int trace_entry(struct pt_regs *ctx, struct sock *sk) {
     u16 sport = ((struct inet_sock *)sk)->inet_sport;
@@ -590,10 +600,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("trace_entry", BPF.KPROBE)
+        fn = b.load_func(b"trace_entry", BPF.KPROBE)
 
     def test_complex_leaf_types(self):
-        text = """
+        text = b"""
 struct list;
 struct list {
   struct list *selfp;
@@ -613,10 +623,10 @@
 BPF_ARRAY(t3, union emptyu, 1);
 """
         b = BPF(text=text)
-        self.assertEqual(ct.sizeof(b["t3"].Leaf), 8)
+        self.assertEqual(ct.sizeof(b[b"t3"].Leaf), 8)
 
     def test_cflags(self):
-        text = """
+        text = b"""
 #ifndef MYFLAG
 #error "MYFLAG not set as expected"
 #endif
@@ -624,24 +634,24 @@
         b = BPF(text=text, cflags=["-DMYFLAG"])
 
     def test_exported_maps(self):
-        b1 = BPF(text="""BPF_TABLE_PUBLIC("hash", int, int, table1, 10);""")
-        b2 = BPF(text="""BPF_TABLE("extern", int, int, table1, 10);""")
-        t = b2["table1"]
+        b1 = BPF(text=b"""BPF_TABLE_PUBLIC("hash", int, int, table1, 10);""")
+        b2 = BPF(text=b"""BPF_TABLE("extern", int, int, table1, 10);""")
+        t = b2[b"table1"]
 
     def test_syntax_error(self):
         with self.assertRaises(Exception):
-            b = BPF(text="""int failure(void *ctx) { if (); return 0; }""")
+            b = BPF(text=b"""int failure(void *ctx) { if (); return 0; }""")
 
     def test_nested_union(self):
-        text = """
+        text = b"""
 BPF_HASH(t1, struct bpf_tunnel_key, int, 1);
 """
         b = BPF(text=text)
-        t1 = b["t1"]
+        t1 = b[b"t1"]
         print(t1.Key().remote_ipv4)
 
     def test_too_many_args(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 int many(struct pt_regs *ctx, int a, int b, int c, int d, int e, int f, int g) {
     return 0;
@@ -651,7 +661,7 @@
             b = BPF(text=text)
 
     def test_call_macro_arg(self):
-        text = """
+        text = b"""
 BPF_PROG_ARRAY(jmp, 32);
 
 #define JMP_IDX_PIPE (1U << 1)
@@ -667,11 +677,11 @@
 }
         """
         b = BPF(text=text)
-        t = b["jmp"]
+        t = b[b"jmp"]
         self.assertEqual(len(t), 32);
 
     def test_update_macro_arg(self):
-        text = """
+        text = b"""
 BPF_ARRAY(act, u32, 32);
 
 #define JMP_IDX_PIPE (1U << 1)
@@ -687,11 +697,11 @@
 }
         """
         b = BPF(text=text)
-        t = b["act"]
+        t = b[b"act"]
         self.assertEqual(len(t), 32);
 
     def test_ext_ptr_maps1(self):
-        bpf_text = """
+        bpf_text = b"""
 #include <uapi/linux/ptrace.h>
 #include <net/sock.h>
 #include <bcc/proto.h>
@@ -717,11 +727,11 @@
 }
         """
         b = BPF(text=bpf_text)
-        b.load_func("trace_entry", BPF.KPROBE)
-        b.load_func("trace_exit", BPF.KPROBE)
+        b.load_func(b"trace_entry", BPF.KPROBE)
+        b.load_func(b"trace_exit", BPF.KPROBE)
 
     def test_ext_ptr_maps2(self):
-        bpf_text = """
+        bpf_text = b"""
 #include <uapi/linux/ptrace.h>
 #include <net/sock.h>
 #include <bcc/proto.h>
@@ -746,11 +756,11 @@
 }
         """
         b = BPF(text=bpf_text)
-        b.load_func("trace_entry", BPF.KPROBE)
-        b.load_func("trace_exit", BPF.KPROBE)
+        b.load_func(b"trace_entry", BPF.KPROBE)
+        b.load_func(b"trace_exit", BPF.KPROBE)
 
     def test_ext_ptr_maps_reverse(self):
-        bpf_text = """
+        bpf_text = b"""
 #include <uapi/linux/ptrace.h>
 #include <net/sock.h>
 #include <bcc/proto.h>
@@ -775,11 +785,11 @@
 };
         """
         b = BPF(text=bpf_text)
-        b.load_func("trace_entry", BPF.KPROBE)
-        b.load_func("trace_exit", BPF.KPROBE)
+        b.load_func(b"trace_entry", BPF.KPROBE)
+        b.load_func(b"trace_exit", BPF.KPROBE)
 
     def test_ext_ptr_maps_indirect(self):
-        bpf_text = """
+        bpf_text = b"""
 #include <uapi/linux/ptrace.h>
 #include <net/sock.h>
 #include <bcc/proto.h>
@@ -805,11 +815,11 @@
 }
         """
         b = BPF(text=bpf_text)
-        b.load_func("trace_entry", BPF.KPROBE)
-        b.load_func("trace_exit", BPF.KPROBE)
+        b.load_func(b"trace_entry", BPF.KPROBE)
+        b.load_func(b"trace_exit", BPF.KPROBE)
 
     def test_bpf_dins_pkt_rewrite(self):
-        text = """
+        text = b"""
 #include <bcc/proto.h>
 int dns_test(struct __sk_buff *skb) {
     u8 *cursor = 0;
@@ -826,7 +836,7 @@
 
     @skipUnless(kernel_version_ge(4,8), "requires kernel >= 4.8")
     def test_ext_ptr_from_helper(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 int test(struct pt_regs *ctx) {
     struct task_struct *task = (struct task_struct *)bpf_get_current_task();
@@ -834,10 +844,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_unary_operator(self):
-        text = """
+        text = b"""
 #include <linux/fs.h>
 #include <uapi/linux/ptrace.h>
 int trace_read_entry(struct pt_regs *ctx, struct file *file) {
@@ -846,13 +856,13 @@
         """
         b = BPF(text=text)
         try:
-            b.attach_kprobe(event="__vfs_read", fn_name="trace_read_entry")
+            b.attach_kprobe(event=b"__vfs_read", fn_name=b"trace_read_entry")
         except Exception:
             print('Current kernel does not have __vfs_read, try vfs_read instead')
-            b.attach_kprobe(event="vfs_read", fn_name="trace_read_entry")
+            b.attach_kprobe(event=b"vfs_read", fn_name=b"trace_read_entry")
 
     def test_printk_f(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 int trace_entry(struct pt_regs *ctx) {
   bpf_trace_printk("%0.2f\\n", 1);
@@ -869,7 +879,7 @@
         r.close()
 
     def test_printk_lf(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 int trace_entry(struct pt_regs *ctx) {
   bpf_trace_printk("%lf\\n", 1);
@@ -886,7 +896,7 @@
         r.close()
 
     def test_printk_2s(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 int trace_entry(struct pt_regs *ctx) {
   char s1[] = "hello", s2[] = "world";
@@ -904,7 +914,7 @@
         r.close()
 
     def test_map_insert(self):
-        text = """
+        text = b"""
 BPF_HASH(dummy);
 void do_trace(struct pt_regs *ctx) {
     u64 key = 0, val = 2;
@@ -915,34 +925,34 @@
 """
         b = BPF(text=text)
         c_val = ct.c_ulong(1)
-        b["dummy"][ct.c_ulong(0)] = c_val
-        b["dummy"][ct.c_ulong(1)] = c_val
-        b.attach_kprobe(event=b.get_syscall_fnname("sync"), fn_name="do_trace")
+        b[b"dummy"][ct.c_ulong(0)] = c_val
+        b[b"dummy"][ct.c_ulong(1)] = c_val
+        b.attach_kprobe(event=b.get_syscall_fnname(b"sync"), fn_name=b"do_trace")
         libc = ct.CDLL("libc.so.6")
         libc.sync()
-        self.assertEqual(1, b["dummy"][ct.c_ulong(0)].value)
-        self.assertEqual(2, b["dummy"][ct.c_ulong(1)].value)
+        self.assertEqual(1, b[b"dummy"][ct.c_ulong(0)].value)
+        self.assertEqual(2, b[b"dummy"][ct.c_ulong(1)].value)
 
     def test_prog_array_delete(self):
-        text = """
+        text = b"""
 BPF_PROG_ARRAY(dummy, 256);
 """
         b1 = BPF(text=text)
-        text = """
+        text = b"""
 int do_next(struct pt_regs *ctx) {
     return 0;
 }
 """
         b2 = BPF(text=text)
-        fn = b2.load_func("do_next", BPF.KPROBE)
+        fn = b2.load_func(b"do_next", BPF.KPROBE)
         c_key = ct.c_int(0)
-        b1["dummy"][c_key] = ct.c_int(fn.fd)
-        b1["dummy"].__delitem__(c_key);
+        b1[b"dummy"][c_key] = ct.c_int(fn.fd)
+        b1[b"dummy"].__delitem__(c_key);
         with self.assertRaises(KeyError):
-            b1["dummy"][c_key]
+            b1[b"dummy"][c_key]
 
     def test_invalid_noninline_call(self):
-        text = """
+        text = b"""
 int bar(void) {
     return 0;
 }
@@ -954,7 +964,7 @@
             b = BPF(text=text)
 
     def test_incomplete_type(self):
-        text = """
+        text = b"""
 BPF_HASH(drops, struct key_t);
 struct key_t {
     u64 location;
@@ -964,7 +974,7 @@
             b = BPF(text=text)
 
     def test_enumerations(self):
-        text = """
+        text = b"""
 enum b {
     CHOICE_A,
 };
@@ -974,14 +984,14 @@
 BPF_HASH(drops, struct a);
         """
         b = BPF(text=text)
-        t = b['drops']
+        t = b[b'drops']
 
     def test_int128_types(self):
-        text = """
+        text = b"""
 BPF_HASH(table1, unsigned __int128, __int128);
 """
         b = BPF(text=text)
-        table = b['table1']
+        table = b[b'table1']
         self.assertEqual(ct.sizeof(table.Key), 16)
         self.assertEqual(ct.sizeof(table.Leaf), 16)
         table[
@@ -996,7 +1006,7 @@
                              "2001:db8::")
 
     def test_padding_types(self):
-        text = """
+        text = b"""
 struct key_t {
   u32 f1_1;               /* offset 0 */
   struct {
@@ -1014,13 +1024,13 @@
 BPF_HASH(table1, struct key_t, struct value_t);
 """
         b = BPF(text=text)
-        table = b['table1']
+        table = b[b'table1']
         self.assertEqual(ct.sizeof(table.Key), 96)
         self.assertEqual(ct.sizeof(table.Leaf), 16)
 
     @skipUnless(kernel_version_ge(4,7), "requires kernel >= 4.7")
     def test_probe_read_tracepoint_context(self):
-        text = """
+        text = b"""
 #include <linux/netdevice.h>
 TRACEPOINT_PROBE(skb, kfree_skb) {
     struct sk_buff *skb = (struct sk_buff *)args->skbaddr;
@@ -1030,7 +1040,7 @@
         b = BPF(text=text)
 
     def test_probe_read_kprobe_ctx(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx) {
@@ -1040,10 +1050,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_ctx_array(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx) {
@@ -1052,11 +1062,11 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     @skipUnless(kernel_version_ge(4,7), "requires kernel >= 4.7")
     def test_probe_read_tc_ctx(self):
-        text = """
+        text = b"""
 #include <uapi/linux/pkt_cls.h>
 #include <linux/if_ether.h>
 int test(struct __sk_buff *ctx) {
@@ -1071,10 +1081,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.SCHED_CLS)
+        fn = b.load_func(b"test", BPF.SCHED_CLS)
 
     def test_probe_read_return(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/tcp.h>
 static inline unsigned char *my_skb_transport_header(struct sk_buff *skb) {
@@ -1086,10 +1096,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_multiple_return(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/tcp.h>
 static inline u64 error_function() {
@@ -1106,10 +1116,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_return_expr(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/tcp.h>
 static inline unsigned char *my_skb_transport_header(struct sk_buff *skb) {
@@ -1121,10 +1131,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_return_call(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/tcp.h>
 static inline struct tcphdr *my_skb_transport_header(struct sk_buff *skb) {
@@ -1135,10 +1145,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_no_probe_read_addrof(self):
-        text = """
+        text = b"""
 #include <linux/sched.h>
 #include <net/inet_sock.h>
 static inline int test_help(__be16 *addr) {
@@ -1153,10 +1163,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses1(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 #include <linux/dcache.h>
 int test(struct pt_regs *ctx, const struct qstr *name) {
@@ -1164,10 +1174,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses2(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 #include <linux/dcache.h>
 int test(struct pt_regs *ctx, const struct qstr *name) {
@@ -1175,10 +1185,10 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses3(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 #include <linux/dcache.h>
 int test(struct pt_regs *ctx, const struct qstr *name) {
@@ -1186,30 +1196,30 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses4(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 int test(struct pt_regs *ctx, char *name) {
     return name[1];
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses5(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 int test(struct pt_regs *ctx, char **name) {
     return (*name)[1];
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses6(self):
-        text = """
+        text = b"""
 #include <linux/ptrace.h>
 struct test_t {
     int tab[5];
@@ -1219,27 +1229,27 @@
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses7(self):
-        text = """
+        text = b"""
 #include <net/inet_sock.h>
 int test(struct pt_regs *ctx, struct sock *sk) {
     return sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32[0];
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_probe_read_array_accesses8(self):
-        text = """
+        text = b"""
 #include <linux/mm_types.h>
 int test(struct pt_regs *ctx, struct mm_struct *mm) {
     return mm->rss_stat.count[MM_ANONPAGES].counter;
 }
 """
         b = BPF(text=text)
-        fn = b.load_func("test", BPF.KPROBE)
+        fn = b.load_func(b"test", BPF.KPROBE)
 
     def test_arbitrary_increment_simple(self):
         b = BPF(text=b"""
@@ -1275,14 +1285,14 @@
     return 0;
 }
 """)
-        if len(b["testing"].items()):
-            st = b["testing"][ct.c_uint(0)]
+        if len(b[b"testing"].items()):
+            st = b[b"testing"][ct.c_uint(0)]
             self.assertEqual(st.a, 10)
             self.assertEqual(st.b, 20)
 
     @skipUnless(kernel_version_ge(4,14), "requires kernel >= 4.14")
     def test_jump_table(self):
-        text = """
+        text = b"""
 #include <linux/blk_types.h>
 #include <linux/blkdev.h>
 #include <linux/time64.h>
diff --git a/tests/python/test_disassembler.py b/tests/python/test_disassembler.py
index 794309a..e031b5f 100755
--- a/tests/python/test_disassembler.py
+++ b/tests/python/test_disassembler.py
@@ -137,7 +137,7 @@
                    .replace("%jmp", "%d" % (instr.offset + 1)))
     
     def test_func(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
             struct key_t {int a; short b; struct {int c:4; int d:8;} e;} __attribute__((__packed__));
             BPF_HASH(test_map, struct key_t);
             int test_func(void)
@@ -146,10 +146,10 @@
             }""")
 
         self.assertEqual(
-            """Disassemble of BPF program test_func:
+            """Disassemble of BPF program b'test_func':
    0: (b7) r0 = 1
    1: (95) exit""",
-            b.disassemble_func("test_func"))
+            b.disassemble_func(b"test_func"))
         
         def _assert_equal_ignore_fd_id(s1, s2):
             # In first line of string like
@@ -170,7 +170,7 @@
             self.assertEqual(s1_rest, s2_rest)
 
         _assert_equal_ignore_fd_id(
-            """Layout of BPF map test_map (type HASH, FD 3, ID 0):
+            """Layout of BPF map b'test_map' (type HASH, FD 3, ID 0):
   struct {
     int a;
     short b;
@@ -180,7 +180,7 @@
     } e;
   } key;
   unsigned long long value;""",
-            b.decode_table("test_map"))
+            b.decode_table(b"test_map"))
     
     def test_bpf_isa(self):
         for op, instr_fmt in self.opcodes:
diff --git a/tests/python/test_dump_func.py b/tests/python/test_dump_func.py
index 56872f5..ef6ea33 100755
--- a/tests/python/test_dump_func.py
+++ b/tests/python/test_dump_func.py
@@ -9,7 +9,7 @@
 
 class TestDumpFunc(TestCase):
     def test_return(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
             int entry(void)
             {
                 return 1;
@@ -18,7 +18,7 @@
         self.assertEqual(
             b"\xb7\x00\x00\x00\x01\x00\x00\x00" +
             b"\x95\x00\x00\x00\x00\x00\x00\x00",
-            b.dump_func("entry"))
+            b.dump_func(b"entry"))
 
 if __name__ == "__main__":
     main()
diff --git a/tests/python/test_flags.py b/tests/python/test_flags.py
old mode 100644
new mode 100755
index 1e0cb5a..c8cb2ba
--- a/tests/python/test_flags.py
+++ b/tests/python/test_flags.py
@@ -7,19 +7,19 @@
 
 class TestLru(unittest.TestCase):
     def test_lru_map_flags(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_F_TABLE("lru_hash", int, u64, lru, 1024, BPF_F_NO_COMMON_LRU);
         """
         b = BPF(text=test_prog1)
-        t = b["lru"]
+        t = b[b"lru"]
         self.assertEqual(t.flags, 2);
 
     def test_hash_map_flags(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_F_TABLE("hash", int, u64, hash, 1024, BPF_F_NO_PREALLOC);
         """
         b = BPF(text=test_prog1)
-        t = b["hash"]
+        t = b[b"hash"]
         self.assertEqual(t.flags, 1);
 
 if __name__ == "__main__":
diff --git a/tests/python/test_free_bcc_memory.py b/tests/python/test_free_bcc_memory.py
index 232baa6..ba4a149 100755
--- a/tests/python/test_free_bcc_memory.py
+++ b/tests/python/test_free_bcc_memory.py
@@ -14,21 +14,21 @@
 
 class TestFreeLLVMMemory(TestCase):
     def getRssFile(self):
-        p = Popen(["cat", "/proc/" + str(os.getpid()) + "/status"],
-                  stdout=PIPE)
-        rss = None
-        unit = None
-        for line in p.stdout.readlines():
-            if (line.find(b'RssFile') >= 0):
-                rss  = line.split(b' ')[-2]
-                unit = line.split(b' ')[-1].rstrip()
-                break
+        with Popen(["cat", "/proc/" + str(os.getpid()) + "/status"],
+                  stdout=PIPE) as p:
+            rss = None
+            unit = None
+            for line in p.stdout.readlines():
+                if (line.find(b'RssFile') >= 0):
+                    rss  = line.split(b' ')[-2]
+                    unit = line.split(b' ')[-1].rstrip()
+                    break
 
-        return [rss, unit]
+            return [rss, unit]
 
     @skipUnless(kernel_version_ge(4,5), "requires kernel >= 4.5")
     def testFreeLLVMMemory(self):
-        text = "int test() { return 0; }"
+        text = b"int test() { return 0; }"
         b = BPF(text=text)
 
         # get the RssFile before freeing bcc memory
diff --git a/tests/python/test_histogram.py b/tests/python/test_histogram.py
index 92eee91..f54db3b 100755
--- a/tests/python/test_histogram.py
+++ b/tests/python/test_histogram.py
@@ -10,7 +10,7 @@
 
 class TestHistogram(TestCase):
     def test_simple(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 struct bpf_map;
 BPF_HISTOGRAM(hist1);
@@ -23,19 +23,19 @@
 """)
         for i in range(0, 32):
             for j in range(0, random.randint(1, 10)):
-                try: del b["stub"][c_ulonglong(1 << i)]
+                try: del b[b"stub"][c_ulonglong(1 << i)]
                 except: pass
-        b["hist1"].print_log2_hist()
+        b[b"hist1"].print_log2_hist()
 
         for i in range(32, 64):
             for j in range(0, random.randint(1, 10)):
-                try: del b["stub"][c_ulonglong(1 << i)]
+                try: del b[b"stub"][c_ulonglong(1 << i)]
                 except: pass
-        b["hist1"].print_log2_hist()
+        b[b"hist1"].print_log2_hist()
         b.cleanup()
 
     def test_struct(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 struct bpf_map;
 typedef struct { void *map; u64 slot; } Key;
@@ -50,15 +50,15 @@
 """)
         for i in range(0, 64):
             for j in range(0, random.randint(1, 10)):
-                try: del b["stub1"][c_ulonglong(1 << i)]
+                try: del b[b"stub1"][c_ulonglong(1 << i)]
                 except: pass
-                try: del b["stub2"][c_ulonglong(1 << i)]
+                try: del b[b"stub2"][c_ulonglong(1 << i)]
                 except: pass
-        b["hist1"].print_log2_hist()
+        b[b"hist1"].print_log2_hist()
         b.cleanup()
 
     def test_chars(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <linux/sched.h>
 #include <linux/version.h>
@@ -78,11 +78,11 @@
 }
 """)
         for i in range(0, 100): time.sleep(0.01)
-        b["hist1"].print_log2_hist()
+        b[b"hist1"].print_log2_hist()
         b.cleanup()
 
     def test_multiple_key(self):
-        b = BPF(text="""
+        b = BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 #include <uapi/linux/fs.h>
 struct hist_s_key {
@@ -108,7 +108,7 @@
             return buckets
 
         for i in range(0, 100): time.sleep(0.01)
-        b["mk_hist"].print_log2_hist("size", "k_1 & k_2",
+        b[b"mk_hist"].print_log2_hist("size", "k_1 & k_2",
                 section_print_fn=lambda bucket: "%3d %d" % (bucket[0], bucket[1]),
                 bucket_fn=lambda bucket: (bucket.key_1, bucket.key_2),
                 strip_leading_zero=True,
diff --git a/tests/python/test_license.py b/tests/python/test_license.py
index f9b070d..982bce8 100755
--- a/tests/python/test_license.py
+++ b/tests/python/test_license.py
@@ -6,7 +6,7 @@
 from bcc import BPF
 
 class TestLicense(unittest.TestCase):
-    gpl_only_text = """
+    gpl_only_text = b"""
 #include <uapi/linux/ptrace.h>
 struct gpl_s {
     u64 ts;
@@ -20,7 +20,7 @@
 }
 """
 
-    proprietary_text = """
+    proprietary_text = b"""
 #include <uapi/linux/ptrace.h>
 struct key_t {
     u64 ip;
@@ -51,13 +51,13 @@
 """
 
     def license(self, lic):
-        return '''
+        return b'''
 #define BPF_LICENSE %s
-''' % (lic)
+''' % (lic.encode())
 
     def load_bpf_code(self, bpf_code):
-        event_name = bpf_code.get_syscall_fnname("read")
-        bpf_code.attach_kprobe(event=event_name, fn_name="license_program")
+        event_name = bpf_code.get_syscall_fnname(b"read")
+        bpf_code.attach_kprobe(event=event_name, fn_name=b"license_program")
         bpf_code.detach_kprobe(event=event_name)
 
     def test_default(self):
diff --git a/tests/python/test_lpm_trie.py b/tests/python/test_lpm_trie.py
index e77ae3f..02d9d83 100755
--- a/tests/python/test_lpm_trie.py
+++ b/tests/python/test_lpm_trie.py
@@ -20,7 +20,7 @@
 @skipUnless(kernel_version_ge(4, 11), "requires kernel >= 4.11")
 class TestLpmTrie(TestCase):
     def test_lpm_trie_v4(self):
-        test_prog1 = """
+        test_prog1 = b"""
         struct key_v4 {
             u32 prefixlen;
             u32 data[4];
@@ -28,7 +28,7 @@
         BPF_LPM_TRIE(trie, struct key_v4, int, 16);
         """
         b = BPF(text=test_prog1)
-        t = b["trie"]
+        t = b[b"trie"]
 
         k1 = KeyV4(24, (192, 168, 0, 0))
         v1 = ct.c_int(24)
@@ -49,7 +49,7 @@
             v = t[k]
 
     def test_lpm_trie_v6(self):
-        test_prog1 = """
+        test_prog1 = b"""
         struct key_v6 {
             u32 prefixlen;
             u32 data[4];
@@ -57,7 +57,7 @@
         BPF_LPM_TRIE(trie, struct key_v6, int, 16);
         """
         b = BPF(text=test_prog1)
-        t = b["trie"]
+        t = b[b"trie"]
 
         k1 = KeyV6(64, IPAddress('2a00:1450:4001:814:200e::').words)
         v1 = ct.c_int(64)
diff --git a/tests/python/test_lru.py b/tests/python/test_lru.py
old mode 100644
new mode 100755
index 5d4a049..40b3f8c
--- a/tests/python/test_lru.py
+++ b/tests/python/test_lru.py
@@ -10,8 +10,8 @@
 
 class TestLru(unittest.TestCase):
     def test_lru_hash(self):
-        b = BPF(text="""BPF_TABLE("lru_hash", int, u64, lru, 1024);""")
-        t = b["lru"]
+        b = BPF(text=b"""BPF_TABLE("lru_hash", int, u64, lru, 1024);""")
+        t = b[b"lru"]
         for i in range(1, 1032):
             t[ct.c_int(i)] = ct.c_ulonglong(i)
         for i, v in t.items():
@@ -21,7 +21,7 @@
         self.assertLess(len(t), 1024);
 
     def test_lru_percpu_hash(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_TABLE("lru_percpu_hash", u32, u32, stats, 1);
         int hello_world(void *ctx) {
             u32 key=0;
@@ -34,9 +34,9 @@
         }
         """
         b = BPF(text=test_prog1)
-        stats_map = b.get_table("stats")
-        event_name = b.get_syscall_fnname("clone")
-        b.attach_kprobe(event=event_name, fn_name="hello_world")
+        stats_map = b.get_table(b"stats")
+        event_name = b.get_syscall_fnname(b"clone")
+        b.attach_kprobe(event=event_name, fn_name=b"hello_world")
         ini = stats_map.Leaf()
         for i in range(0, multiprocessing.cpu_count()):
             ini[i] = 0
diff --git a/tests/python/test_map_batch_ops.py b/tests/python/test_map_batch_ops.py
index 8efa685..87b0b45 100755
--- a/tests/python/test_map_batch_ops.py
+++ b/tests/python/test_map_batch_ops.py
@@ -31,9 +31,9 @@
             count = self.SUBSET_SIZE
         keys = (hmap.Key * count)()
         i = 0
-        for k, _ in sorted(hmap.items_lookup_batch()):
+        for k, _ in sorted(hmap.items_lookup_batch(), key=lambda k:k[0].value):
             if i < count:
-                keys[i] = k
+                keys[i] = k.value
                 i += 1
             else:
                 break
@@ -45,9 +45,9 @@
             count = self.SUBSET_SIZE
         values = (hmap.Leaf * count)()
         i = 0
-        for _, v in sorted(hmap.items_lookup_batch()):
+        for _, v in sorted(hmap.items_lookup_batch(), key=lambda k:k[0].value):
             if i < count:
-                values[i] = v*v
+                values[i] = v.value * v.value
                 i += 1
             else:
                 break
@@ -55,9 +55,9 @@
 
     def check_hashmap_values(self, it):
         i = 0
-        for k, v in sorted(it):
-            self.assertEqual(k, i)
-            self.assertEqual(v, i)
+        for k, v in sorted(it, key=lambda kv:kv[0].value):
+            self.assertEqual(k.value, i)
+            self.assertEqual(v.value, i)
             i += 1
         return i
 
@@ -129,12 +129,15 @@
         # the first self.SUBSET_SIZE keys follow this rule value = keys * keys
         # the remaning keys follow this rule : value = keys
         i = 0
-        for k, v in sorted(hmap.items_lookup_batch()):
+        for k, v in sorted(hmap.items_lookup_batch(),
+                           key=lambda kv:kv[0].value):
             if i < self.SUBSET_SIZE:
-                self.assertEqual(v, k*k)  # values are the square of the keys
+                # values are the square of the keys
+                self.assertEqual(v.value, k.value * k.value)
                 i += 1
             else:
-                self.assertEqual(v, k)  # values = keys
+                # values = keys
+                self.assertEqual(v.value, k.value)
 
         self.assertEqual(i, self.SUBSET_SIZE)
 
diff --git a/tests/python/test_map_in_map.py b/tests/python/test_map_in_map.py
index 46e6292..62e2fa5 100755
--- a/tests/python/test_map_in_map.py
+++ b/tests/python/test_map_in_map.py
@@ -22,7 +22,7 @@
 @skipUnless(kernel_version_ge(4,11), "requires kernel >= 4.11")
 class TestUDST(TestCase):
     def test_hash_table(self):
-        bpf_text = """
+        bpf_text = b"""
       BPF_ARRAY(cntl, int, 1);
       BPF_TABLE("hash", int, int, ex1, 1024);
       BPF_TABLE("hash", int, int, ex2, 1024);
@@ -54,16 +54,16 @@
       }
 """
         b = BPF(text=bpf_text)
-        cntl_map = b.get_table("cntl")
-        ex1_map = b.get_table("ex1")
-        ex2_map = b.get_table("ex2")
-        hash_maps = b.get_table("maps_hash")
+        cntl_map = b.get_table(b"cntl")
+        ex1_map = b.get_table(b"ex1")
+        ex2_map = b.get_table(b"ex2")
+        hash_maps = b.get_table(b"maps_hash")
 
         hash_maps[ct.c_int(1)] = ct.c_int(ex1_map.get_fd())
         hash_maps[ct.c_int(2)] = ct.c_int(ex2_map.get_fd())
 
-        syscall_fnname = b.get_syscall_fnname("getuid")
-        b.attach_kprobe(event=syscall_fnname, fn_name="syscall__getuid")
+        syscall_fnname = b.get_syscall_fnname(b"getuid")
+        b.attach_kprobe(event=syscall_fnname, fn_name=b"syscall__getuid")
 
         try:
           ex1_map[ct.c_int(0)]
@@ -90,7 +90,7 @@
         del hash_maps[ct.c_int(2)]
 
     def test_hash_table_custom_key(self):
-        bpf_text = """
+        bpf_text = b"""
         struct custom_key {
           int value_1;
           int value_2;
@@ -128,15 +128,15 @@
         }
 """
         b = BPF(text=bpf_text)
-        cntl_map = b.get_table("cntl")
-        ex1_map = b.get_table("ex1")
-        ex2_map = b.get_table("ex2")
-        hash_maps = b.get_table("maps_hash")
+        cntl_map = b.get_table(b"cntl")
+        ex1_map = b.get_table(b"ex1")
+        ex2_map = b.get_table(b"ex2")
+        hash_maps = b.get_table(b"maps_hash")
 
         hash_maps[CustomKey(1, 1)] = ct.c_int(ex1_map.get_fd())
         hash_maps[CustomKey(1, 2)] = ct.c_int(ex2_map.get_fd())
-        syscall_fnname = b.get_syscall_fnname("getuid")
-        b.attach_kprobe(event=syscall_fnname, fn_name="syscall__getuid")
+        syscall_fnname = b.get_syscall_fnname(b"getuid")
+        b.attach_kprobe(event=syscall_fnname, fn_name=b"syscall__getuid")
 
         try:
           ex1_map[ct.c_int(0)]
@@ -163,7 +163,7 @@
         del hash_maps[CustomKey(1, 2)]
 
     def test_array_table(self):
-        bpf_text = """
+        bpf_text = b"""
       BPF_ARRAY(cntl, int, 1);
       BPF_ARRAY(ex1, int, 1024);
       BPF_ARRAY(ex2, int, 1024);
@@ -192,16 +192,16 @@
       }
 """
         b = BPF(text=bpf_text)
-        cntl_map = b.get_table("cntl")
-        ex1_map = b.get_table("ex1")
-        ex2_map = b.get_table("ex2")
-        array_maps = b.get_table("maps_array")
+        cntl_map = b.get_table(b"cntl")
+        ex1_map = b.get_table(b"ex1")
+        ex2_map = b.get_table(b"ex2")
+        array_maps = b.get_table(b"maps_array")
 
         array_maps[ct.c_int(1)] = ct.c_int(ex1_map.get_fd())
         array_maps[ct.c_int(2)] = ct.c_int(ex2_map.get_fd())
 
-        syscall_fnname = b.get_syscall_fnname("getuid")
-        b.attach_kprobe(event=syscall_fnname, fn_name="syscall__getuid")
+        syscall_fnname = b.get_syscall_fnname(b"getuid")
+        b.attach_kprobe(event=syscall_fnname, fn_name=b"syscall__getuid")
 
         cntl_map[0] = ct.c_int(1)
         os.getuid()
diff --git a/tests/python/test_percpu.py b/tests/python/test_percpu.py
index e1c646c..f766a28 100755
--- a/tests/python/test_percpu.py
+++ b/tests/python/test_percpu.py
@@ -7,16 +7,18 @@
 from bcc import BPF
 import multiprocessing
 
+MONITORED_SYSCALL=b"execve"
+
 class TestPercpu(unittest.TestCase):
 
     def setUp(self):
         try:
-            b = BPF(text='BPF_PERCPU_ARRAY(stub, u32, 1);')
+            b = BPF(text=b'BPF_PERCPU_ARRAY(stub, u32, 1);')
         except:
             raise unittest.SkipTest("PerCpu unsupported on this kernel")
 
     def test_helper(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_PERCPU_ARRAY(stub_default);
         BPF_PERCPU_ARRAY(stub_type, u64);
         BPF_PERCPU_ARRAY(stub_full, u64, 1024);
@@ -24,7 +26,7 @@
         BPF(text=test_prog1)
 
     def test_u64(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_PERCPU_HASH(stats, u32, u64, 1);
         int hello_world(void *ctx) {
             u32 key=0;
@@ -37,9 +39,9 @@
         }
         """
         bpf_code = BPF(text=test_prog1)
-        stats_map = bpf_code.get_table("stats")
-        event_name = bpf_code.get_syscall_fnname("clone")
-        bpf_code.attach_kprobe(event=event_name, fn_name="hello_world")
+        stats_map = bpf_code.get_table(b"stats")
+        event_name = bpf_code.get_syscall_fnname(MONITORED_SYSCALL)
+        bpf_code.attach_kprobe(event=event_name, fn_name=b"hello_world")
         ini = stats_map.Leaf()
         for i in range(0, multiprocessing.cpu_count()):
             ini[i] = 0
@@ -56,7 +58,7 @@
         bpf_code.detach_kprobe(event_name)
 
     def test_u32(self):
-        test_prog1 = """
+        test_prog1 = b"""
         BPF_PERCPU_ARRAY(stats, u32, 1);
         int hello_world(void *ctx) {
             u32 key=0;
@@ -69,9 +71,9 @@
         }
         """
         bpf_code = BPF(text=test_prog1)
-        stats_map = bpf_code.get_table("stats")
-        event_name = bpf_code.get_syscall_fnname("clone")
-        bpf_code.attach_kprobe(event=event_name, fn_name="hello_world")
+        stats_map = bpf_code.get_table(b"stats")
+        event_name = bpf_code.get_syscall_fnname(MONITORED_SYSCALL)
+        bpf_code.attach_kprobe(event=event_name, fn_name=b"hello_world")
         ini = stats_map.Leaf()
         for i in range(0, multiprocessing.cpu_count()):
             ini[i] = 0
@@ -88,7 +90,7 @@
         bpf_code.detach_kprobe(event_name)
 
     def test_struct_custom_func(self):
-        test_prog2 = """
+        test_prog2 = b"""
         typedef struct counter {
         u32 c1;
         u32 c2;
@@ -106,10 +108,10 @@
         }
         """
         bpf_code = BPF(text=test_prog2)
-        stats_map = bpf_code.get_table("stats",
+        stats_map = bpf_code.get_table(b"stats",
                 reducer=lambda x,y: stats_map.sLeaf(x.c1+y.c1))
-        event_name = bpf_code.get_syscall_fnname("clone")
-        bpf_code.attach_kprobe(event=event_name, fn_name="hello_world")
+        event_name = bpf_code.get_syscall_fnname(MONITORED_SYSCALL)
+        bpf_code.attach_kprobe(event=event_name, fn_name=b"hello_world")
         ini = stats_map.Leaf()
         for i in ini:
             i = stats_map.sLeaf(0,0)
diff --git a/tests/python/test_perf_event.py b/tests/python/test_perf_event.py
index 6119ec7..58154ef 100755
--- a/tests/python/test_perf_event.py
+++ b/tests/python/test_perf_event.py
@@ -11,7 +11,7 @@
 
 class TestPerfCounter(unittest.TestCase):
     def test_cycles(self):
-        text = """
+        text = b"""
 BPF_PERF_ARRAY(cnt1, NUM_CPUS);
 BPF_ARRAY(prev, u64, NUM_CPUS);
 BPF_HISTOGRAM(dist);
@@ -40,21 +40,23 @@
     return 0;
 }
 """
+        mypid = os.getpid()
         b = bcc.BPF(text=text, debug=0,
                 cflags=["-DNUM_CPUS=%d" % multiprocessing.cpu_count()])
-        event_name = b.get_syscall_fnname("getuid")
-        b.attach_kprobe(event=event_name, fn_name="do_sys_getuid")
-        b.attach_kretprobe(event=event_name, fn_name="do_ret_sys_getuid")
-        cnt1 = b["cnt1"]
+        event_name = b.get_syscall_fnname(b"getuid")
+        b.attach_kprobe(event=event_name, fn_name=b"do_sys_getuid")
+        b.attach_kretprobe(event=event_name, fn_name=b"do_ret_sys_getuid")
+        cnt1 = b[b"cnt1"]
         try:
-            cnt1.open_perf_event(bcc.PerfType.HARDWARE, bcc.PerfHWConfig.CPU_CYCLES)
+            cnt1.open_perf_event(bcc.PerfType.HARDWARE,
+                                 bcc.PerfHWConfig.CPU_CYCLES, pid=mypid)
         except:
             if ctypes.get_errno() == 2:
                 raise self.skipTest("hardware events unsupported")
             raise
         for i in range(0, 100):
             os.getuid()
-        b["dist"].print_log2_hist()
+        b[b"dist"].print_log2_hist()
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tests/python/test_probe_count.py b/tests/python/test_probe_count.py
index 3fbfc18..3ab1f3f 100755
--- a/tests/python/test_probe_count.py
+++ b/tests/python/test_probe_count.py
@@ -9,12 +9,12 @@
 
 class TestKprobeCnt(TestCase):
     def setUp(self):
-        self.b = BPF(text="""
+        self.b = BPF(text=b"""
         int wololo(void *ctx) {
           return 0;
         }
         """)
-        self.b.attach_kprobe(event_re="^vfs_.*", fn_name="wololo")
+        self.b.attach_kprobe(event_re=b"^vfs_.*", fn_name=b"wololo")
 
     def test_attach1(self):
         actual_cnt = 0
@@ -31,12 +31,12 @@
 
 class TestProbeGlobalCnt(TestCase):
     def setUp(self):
-        self.b1 = BPF(text="""int count(void *ctx) { return 0; }""")
-        self.b2 = BPF(text="""int count(void *ctx) { return 0; }""")
+        self.b1 = BPF(text=b"""int count(void *ctx) { return 0; }""")
+        self.b2 = BPF(text=b"""int count(void *ctx) { return 0; }""")
 
     def test_probe_quota(self):
-        self.b1.attach_kprobe(event="schedule", fn_name="count")
-        self.b2.attach_kprobe(event="submit_bio", fn_name="count")
+        self.b1.attach_kprobe(event=b"schedule", fn_name=b"count")
+        self.b2.attach_kprobe(event=b"submit_bio", fn_name=b"count")
         self.assertEqual(1, self.b1.num_open_kprobes())
         self.assertEqual(1, self.b2.num_open_kprobes())
         self.assertEqual(2, _get_num_open_probes())
@@ -47,7 +47,7 @@
 
 class TestAutoKprobe(TestCase):
     def setUp(self):
-        self.b = BPF(text="""
+        self.b = BPF(text=b"""
         int kprobe__schedule(void *ctx) { return 0; }
         int kretprobe__schedule(void *ctx) { return 0; }
         """)
@@ -61,15 +61,15 @@
 
 class TestProbeQuota(TestCase):
     def setUp(self):
-        self.b = BPF(text="""int count(void *ctx) { return 0; }""")
+        self.b = BPF(text=b"""int count(void *ctx) { return 0; }""")
 
     def test_probe_quota(self):
         with self.assertRaises(Exception):
-            self.b.attach_kprobe(event_re=".*", fn_name="count")
+            self.b.attach_kprobe(event_re=b".*", fn_name=b"count")
 
     def test_uprobe_quota(self):
         with self.assertRaises(Exception):
-            self.b.attach_uprobe(name="c", sym_re=".*", fn_name="count")
+            self.b.attach_uprobe(name=b"c", sym_re=b".*", fn_name=b"count")
 
     def tearDown(self):
         self.b.cleanup()
@@ -77,11 +77,11 @@
 
 class TestProbeNotExist(TestCase):
     def setUp(self):
-        self.b = BPF(text="""int count(void *ctx) { return 0; }""")
+        self.b = BPF(text=b"""int count(void *ctx) { return 0; }""")
 
     def test_not_exist(self):
         with self.assertRaises(Exception):
-            self.b.attach_kprobe(event="___doesnotexist", fn_name="count")
+            self.b.attach_kprobe(event=b"___doesnotexist", fn_name=b"count")
 
     def tearDown(self):
         self.b.cleanup()
diff --git a/tests/python/test_queuestack.py b/tests/python/test_queuestack.py
index 47ee792..d8293da 100755
--- a/tests/python/test_queuestack.py
+++ b/tests/python/test_queuestack.py
@@ -14,11 +14,11 @@
 class TestQueueStack(TestCase):
 
     def test_stack(self):
-        text = """
+        text = b"""
         BPF_STACK(stack, u64, 10);
         """
         b = BPF(text=text)
-        stack = b['stack']
+        stack = b[b'stack']
 
         for i in range(10):
             stack.push(ct.c_uint64(i))
@@ -47,11 +47,11 @@
         b.cleanup()
 
     def test_queue(self):
-        text = """
+        text = b"""
         BPF_QUEUE(queue, u64, 10);
         """
         b = BPF(text=text)
-        queue = b['queue']
+        queue = b[b'queue']
 
         for i in range(10):
             queue.push(ct.c_uint64(i))
diff --git a/tests/python/test_ringbuf.py b/tests/python/test_ringbuf.py
index 87adbff..d6b1dc2 100755
--- a/tests/python/test_ringbuf.py
+++ b/tests/python/test_ringbuf.py
@@ -24,7 +24,7 @@
             event = ct.cast(data, ct.POINTER(Data)).contents
             self.counter += 1
 
-        text = """
+        text = b"""
 BPF_RINGBUF_OUTPUT(events, 8);
 struct data_t {
     u64 ts;
@@ -36,11 +36,11 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_ring_buffer(cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_ring_buffer(cb)
         subprocess.call(['sleep', '0.1'])
         b.ring_buffer_poll()
         self.assertGreater(self.counter, 0)
@@ -58,7 +58,7 @@
             event = ct.cast(data, ct.POINTER(Data)).contents
             self.counter += 1
 
-        text = """
+        text = b"""
 BPF_RINGBUF_OUTPUT(events, 8);
 struct data_t {
     u64 ts;
@@ -70,11 +70,11 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_ring_buffer(cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_ring_buffer(cb)
         subprocess.call(['sleep', '0.1'])
         b.ring_buffer_consume()
         self.assertGreater(self.counter, 0)
@@ -92,7 +92,7 @@
             event = ct.cast(data, ct.POINTER(Data)).contents
             self.counter += 1
 
-        text = """
+        text = b"""
 BPF_RINGBUF_OUTPUT(events, 8);
 struct data_t {
     u64 ts;
@@ -107,11 +107,11 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_ring_buffer(cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_ring_buffer(cb)
         subprocess.call(['sleep', '0.1'])
         b.ring_buffer_poll()
         self.assertGreater(self.counter, 0)
@@ -129,7 +129,7 @@
             event = ct.cast(data, ct.POINTER(Data)).contents
             self.counter += 1
 
-        text = """
+        text = b"""
 BPF_RINGBUF_OUTPUT(events, 8);
 struct data_t {
     u64 ts;
@@ -144,15 +144,58 @@
 }
 """
         b = BPF(text=text)
-        b.attach_kprobe(event=b.get_syscall_fnname("nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b.attach_kprobe(event=b.get_syscall_fnname("clock_nanosleep"),
-                        fn_name="do_sys_nanosleep")
-        b["events"].open_ring_buffer(cb)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_ring_buffer(cb)
         subprocess.call(['sleep', '0.1'])
         b.ring_buffer_poll()
         self.assertEqual(self.counter, 0)
         b.cleanup()
 
+    @skipUnless(kernel_version_ge(5,8), "requires kernel >= 5.8")
+    def test_ringbuf_query(self):
+        PAGE_SIZE = 8
+        self.counter = 0
+        self.page_counts = 0
+
+        class Data(ct.Structure):
+            _fields_ = [("page_cnt", ct.c_ulonglong)]
+
+        def cb(ctx, data, size):
+            self.assertEqual(size, ct.sizeof(Data))
+            event = ct.cast(data, ct.POINTER(Data)).contents
+            self.page_counts += event.page_cnt
+            self.counter += 1
+
+        text = b"""
+BPF_RINGBUF_OUTPUT(events, %i);
+struct data_t {
+    u64 page_cnt;
+};
+int do_sys_nanosleep(void *ctx) {
+    u64 res = 0;
+    res = events.ringbuf_query(BPF_RB_RING_SIZE);
+    if(res == 0) {
+        return 1;
+    }
+    struct data_t data = {res / PAGE_SIZE};
+    events.ringbuf_output(&data, sizeof(data), 0);
+    return 0;
+}
+"""
+        text = text % PAGE_SIZE
+        b = BPF(text=text)
+        b.attach_kprobe(event=b.get_syscall_fnname(b"nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b.attach_kprobe(event=b.get_syscall_fnname(b"clock_nanosleep"),
+                        fn_name=b"do_sys_nanosleep")
+        b[b"events"].open_ring_buffer(cb)
+        subprocess.call(['sleep', '0.1'])
+        b.ring_buffer_poll()
+        self.assertEqual(self.page_counts / self.counter, PAGE_SIZE)
+        b.cleanup()
+
 if __name__ == "__main__":
     main()
diff --git a/tests/python/test_rlimit.py b/tests/python/test_rlimit.py
index 8e93bab..39d8aac 100755
--- a/tests/python/test_rlimit.py
+++ b/tests/python/test_rlimit.py
@@ -9,14 +9,13 @@
 from bcc import BPF
 from unittest import main, skipUnless, TestCase
 from utils import kernel_version_ge
-import distutils.version
 import os, resource
 
 @skipUnless(not kernel_version_ge(5, 11), "Since d5299b67dd59 \"bpf: Memcg-based memory accounting for bpf maps\""\
                                           ",map mem has been counted against memcg, not rlimit")
 class TestRlimitMemlock(TestCase):
     def testRlimitMemlock(self):
-        text = """
+        text = b"""
 BPF_HASH(unused, u64, u64, 65536);
 int test() { return 0; }
 """
diff --git a/tests/python/test_shared_table.py b/tests/python/test_shared_table.py
old mode 100644
new mode 100755
index 7b8f9d5..efcac92
--- a/tests/python/test_shared_table.py
+++ b/tests/python/test_shared_table.py
@@ -8,14 +8,14 @@
 
 class TestSharedTable(unittest.TestCase):
     def test_close_extern(self):
-        b1 = BPF(text="""BPF_TABLE_PUBLIC("array", int, int, table1, 10);""")
+        b1 = BPF(text=b"""BPF_TABLE_PUBLIC("array", int, int, table1, 10);""")
 
-        with BPF(text="""BPF_TABLE("extern", int, int, table1, 10);""") as b2:
-            t2 = b2["table1"]
+        with BPF(text=b"""BPF_TABLE("extern", int, int, table1, 10);""") as b2:
+            t2 = b2[b"table1"]
             t2[ct.c_int(1)] = ct.c_int(10)
             self.assertEqual(len(t2), 10)
 
-        t1 = b1["table1"]
+        t1 = b1[b"table1"]
         self.assertEqual(t1[ct.c_int(1)].value, 10)
         self.assertEqual(len(t1), 10)
 
diff --git a/tests/python/test_stackid.py b/tests/python/test_stackid.py
index 707604e..f1ae511 100755
--- a/tests/python/test_stackid.py
+++ b/tests/python/test_stackid.py
@@ -13,7 +13,7 @@
 class TestStackid(unittest.TestCase):
     @mayFail("This fails on github actions environment, and needs to be fixed")
     def test_simple(self):
-        b = bcc.BPF(text="""
+        b = bcc.BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 struct bpf_map;
 BPF_STACK_TRACE(stack_traces, 10240);
@@ -28,9 +28,9 @@
     return 0;
 }
 """)
-        stub = b["stub"]
-        stack_traces = b["stack_traces"]
-        stack_entries = b["stack_entries"]
+        stub = b[b"stub"]
+        stack_traces = b[b"stack_traces"]
+        stack_entries = b[b"stack_entries"]
         try: x = stub[stub.Key(1)]
         except: pass
         k = stack_entries.Key(1)
@@ -50,7 +50,7 @@
 @unittest.skipUnless(kernel_version_ge(4,17), "requires kernel >= 4.17")
 class TestStackBuildid(unittest.TestCase):
     def test_simple(self):
-        b = bcc.BPF(text="""
+        b = bcc.BPF(text=b"""
 #include <uapi/linux/ptrace.h>
 struct bpf_map;
 BPF_STACK_TRACE_BUILDID(stack_traces, 10240);
@@ -66,9 +66,9 @@
 }
 """)
         os.getuid()
-        stub = b["stub"]
-        stack_traces = b["stack_traces"]
-        stack_entries = b["stack_entries"]
+        stub = b[b"stub"]
+        stack_traces = b[b"stack_traces"]
+        stack_entries = b[b"stack_entries"]
         b.add_module(Get_libc_path())
         try: x = stub[stub.Key(1)]
         except: pass
diff --git a/tests/python/test_stat1.py b/tests/python/test_stat1.py
index 313e2a9..e071ba6 100755
--- a/tests/python/test_stat1.py
+++ b/tests/python/test_stat1.py
@@ -22,10 +22,10 @@
 
 class TestBPFSocket(TestCase):
     def setUp(self):
-        b = BPF(arg1, arg2, debug=0)
-        fn = b.load_func("on_packet", BPF.SOCKET_FILTER)
-        BPF.attach_raw_socket(fn, "eth0")
-        self.stats = b.get_table("stats", Key, Leaf)
+        b = BPF(arg1.encode(), arg2.encode(), debug=0)
+        fn = b.load_func(b"on_packet", BPF.SOCKET_FILTER)
+        BPF.attach_raw_socket(fn, b"eth0")
+        self.stats = b.get_table(b"stats", Key, Leaf)
 
     def test_ping(self):
         cmd = ["ping", "-f", "-c", "100", "172.16.1.1"]
diff --git a/tests/python/test_tools_smoke.py b/tests/python/test_tools_smoke.py
index 879bdb1..c8023f7 100755
--- a/tests/python/test_tools_smoke.py
+++ b/tests/python/test_tools_smoke.py
@@ -2,7 +2,6 @@
 # Copyright (c) Sasha Goldshtein, 2017
 # Licensed under the Apache License, Version 2.0 (the "License")
 
-import distutils.version
 import subprocess
 import os
 import re
@@ -260,6 +259,7 @@
             pass
 
     @skipUnless(kernel_version_ge(4,6), "requires kernel >= 4.6")
+    @mayFail("This fails on github actions environment, and needs to be fixed")
     def test_offcputime(self):
         self.run_with_duration("offcputime.py 1")
 
@@ -278,6 +278,11 @@
     def test_pidpersec(self):
         self.run_with_int("pidpersec.py")
 
+    @skipUnless(kernel_version_ge(4,17), "requires kernel >= 4.17")
+    @mayFail("This fails on github actions environment, and needs to be fixed")
+    def test_syscount(self):
+        self.run_with_int("ppchcalls.py -i 1")
+
     @skipUnless(kernel_version_ge(4,9), "requires kernel >= 4.9")
     def test_profile(self):
         self.run_with_duration("profile.py 1")
diff --git a/tests/python/test_trace2.py b/tests/python/test_trace2.py
index d7094c3..5797e96 100755
--- a/tests/python/test_trace2.py
+++ b/tests/python/test_trace2.py
@@ -8,7 +8,7 @@
 import sys
 from unittest import main, TestCase
 
-text = """
+text = b"""
 #include <linux/ptrace.h>
 struct Ptr { u64 ptr; };
 struct Counters { char unused; __int128 stat1; };
@@ -30,9 +30,9 @@
 class TestTracingEvent(TestCase):
     def setUp(self):
         b = BPF(text=text, debug=0)
-        self.stats = b.get_table("stats")
-        b.attach_kprobe(event_re="^finish_task_switch$|^finish_task_switch\.isra\.\d$",
-                        fn_name="count_sched")
+        self.stats = b.get_table(b"stats")
+        b.attach_kprobe(event_re=b"^finish_task_switch$|^finish_task_switch\.isra\.\d$",
+                        fn_name=b"count_sched")
 
     def test_sched1(self):
         for i in range(0, 100):
diff --git a/tests/python/test_trace3.py b/tests/python/test_trace3.py
index a049301..fa2a3d1 100755
--- a/tests/python/test_trace3.py
+++ b/tests/python/test_trace3.py
@@ -9,21 +9,23 @@
 from unittest import main, TestCase
 from utils import mayFail
 
-arg1 = sys.argv.pop(1)
-arg2 = ""
+arg1 = sys.argv.pop(1).encode()
+arg2 = b""
 if len(sys.argv) > 1:
   arg2 = sys.argv.pop(1)
 
 
 class TestBlkRequest(TestCase):
-    @mayFail("This fails on github actions environment, and needs to be fixed")
     def setUp(self):
         b = BPF(arg1, arg2, debug=0)
-        self.latency = b.get_table("latency", c_uint, c_ulong)
-        b.attach_kprobe(event="blk_start_request",
-                fn_name="probe_blk_start_request")
-        b.attach_kprobe(event="blk_update_request",
-                fn_name="probe_blk_update_request")
+        self.latency = b.get_table(b"latency", c_uint, c_ulong)
+        if BPF.get_kprobe_functions(b"blk_start_request"):
+            b.attach_kprobe(event=b"blk_start_request",
+                    fn_name=b"probe_blk_start_request")
+        b.attach_kprobe(event=b"blk_mq_start_request",
+                fn_name=b"probe_blk_start_request")
+        b.attach_kprobe(event=b"blk_update_request",
+                fn_name=b"probe_blk_update_request")
 
     def test_blk1(self):
         import subprocess
diff --git a/tests/python/test_tracepoint.py b/tests/python/test_tracepoint.py
index a2dd40f..dfb57ef 100755
--- a/tests/python/test_tracepoint.py
+++ b/tests/python/test_tracepoint.py
@@ -12,7 +12,7 @@
 @unittest.skipUnless(kernel_version_ge(4,7), "requires kernel >= 4.7")
 class TestTracepoint(unittest.TestCase):
     def test_tracepoint(self):
-        text = """
+        text = b"""
         BPF_HASH(switches, u32, u64);
         TRACEPOINT_PROBE(sched, sched_switch) {
             u64 val = 0;
@@ -25,14 +25,14 @@
         b = bcc.BPF(text=text)
         sleep(1)
         total_switches = 0
-        for k, v in b["switches"].items():
+        for k, v in b[b"switches"].items():
             total_switches += v.value
         self.assertNotEqual(0, total_switches)
 
 @unittest.skipUnless(kernel_version_ge(4,7), "requires kernel >= 4.7")
 class TestTracepointDataLoc(unittest.TestCase):
     def test_tracepoint_data_loc(self):
-        text = """
+        text = b"""
         struct value_t {
             char filename[64];
         };
@@ -51,7 +51,7 @@
         subprocess.check_output(["/bin/ls"])
         sleep(1)
         self.assertTrue("/bin/ls" in [v.filename.decode()
-                                      for v in b["execs"].values()])
+                                      for v in b[b"execs"].values()])
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tests/python/test_uprobes.py b/tests/python/test_uprobes.py
index 3682f46..663996b 100755
--- a/tests/python/test_uprobes.py
+++ b/tests/python/test_uprobes.py
@@ -13,7 +13,7 @@
 
 class TestUprobes(unittest.TestCase):
     def test_simple_library(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 BPF_ARRAY(stats, u64, 1);
 static void incr(int idx) {
@@ -29,20 +29,20 @@
     return 0;
 }"""
         test_pid = os.getpid()
-        text = text.replace("PID", "%d" % test_pid)
+        text = text.replace(b"PID", b"%d" % test_pid)
         b = bcc.BPF(text=text)
-        b.attach_uprobe(name="c", sym="malloc_stats", fn_name="count", pid=test_pid)
-        b.attach_uretprobe(name="c", sym="malloc_stats", fn_name="count", pid=test_pid)
+        b.attach_uprobe(name=b"c", sym=b"malloc_stats", fn_name=b"count", pid=test_pid)
+        b.attach_uretprobe(name=b"c", sym=b"malloc_stats", fn_name=b"count", pid=test_pid)
         libc = ctypes.CDLL("libc.so.6")
         libc.malloc_stats.restype = None
         libc.malloc_stats.argtypes = []
         libc.malloc_stats()
-        self.assertEqual(b["stats"][ctypes.c_int(0)].value, 2)
-        b.detach_uretprobe(name="c", sym="malloc_stats", pid=test_pid)
-        b.detach_uprobe(name="c", sym="malloc_stats", pid=test_pid)
+        self.assertEqual(b[b"stats"][ctypes.c_int(0)].value, 2)
+        b.detach_uretprobe(name=b"c", sym=b"malloc_stats", pid=test_pid)
+        b.detach_uprobe(name=b"c", sym=b"malloc_stats", pid=test_pid)
 
     def test_simple_binary(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 BPF_ARRAY(stats, u64, 1);
 static void incr(int idx) {
@@ -56,18 +56,18 @@
     return 0;
 }"""
         b = bcc.BPF(text=text)
-        pythonpath = "/usr/bin/python3"
-        symname = "_start"
-        b.attach_uprobe(name=pythonpath, sym=symname, fn_name="count")
-        b.attach_uretprobe(name=pythonpath, sym=symname, fn_name="count")
-        with os.popen(pythonpath + " -V") as f:
+        pythonpath = b"/usr/bin/python3"
+        symname = b"_start"
+        b.attach_uprobe(name=pythonpath, sym=symname, fn_name=b"count")
+        b.attach_uretprobe(name=pythonpath, sym=symname, fn_name=b"count")
+        with os.popen(pythonpath.decode() + " -V") as f:
             pass
-        self.assertGreater(b["stats"][ctypes.c_int(0)].value, 0)
+        self.assertGreater(b[b"stats"][ctypes.c_int(0)].value, 0)
         b.detach_uretprobe(name=pythonpath, sym=symname)
         b.detach_uprobe(name=pythonpath, sym=symname)
 
     def test_mount_namespace(self):
-        text = """
+        text = b"""
 #include <uapi/linux/ptrace.h>
 BPF_TABLE("array", int, u64, stats, 1);
 static void incr(int idx) {
@@ -126,14 +126,14 @@
             time.sleep(5)
             os._exit(0)
 
-        libname = "/tmp/libz.so.1"
-        symname = "zlibVersion"
-        text = text.replace("PID", "%d" % child_pid)
+        libname = b"/tmp/libz.so.1"
+        symname = b"zlibVersion"
+        text = text.replace(b"PID", b"%d" % child_pid)
         b = bcc.BPF(text=text)
-        b.attach_uprobe(name=libname, sym=symname, fn_name="count", pid=child_pid)
-        b.attach_uretprobe(name=libname, sym=symname, fn_name="count", pid=child_pid)
+        b.attach_uprobe(name=libname, sym=symname, fn_name=b"count", pid=child_pid)
+        b.attach_uretprobe(name=libname, sym=symname, fn_name=b"count", pid=child_pid)
         time.sleep(5)
-        self.assertEqual(b["stats"][ctypes.c_int(0)].value, 2)
+        self.assertEqual(b[b"stats"][ctypes.c_int(0)].value, 2)
         b.detach_uretprobe(name=libname, sym=symname, pid=child_pid)
         b.detach_uprobe(name=libname, sym=symname, pid=child_pid)
         os.wait()
diff --git a/tests/python/test_uprobes2.py b/tests/python/test_uprobes2.py
index 0c0b010..2628e16 100755
--- a/tests/python/test_uprobes2.py
+++ b/tests/python/test_uprobes2.py
@@ -18,7 +18,7 @@
 {
 }
 """
-        self.bpf_text = """
+        self.bpf_text = b"""
 int trace_fun_call(void *ctx) {{
     return 1;
 }}
@@ -40,7 +40,7 @@
 
     def test_attach1(self):
         b = BPF(text=self.bpf_text)
-        b.attach_uprobe(name=self.ftemp.name, sym="fun", fn_name="trace_fun_call")
+        b.attach_uprobe(name=self.ftemp.name.encode(), sym=b"fun", fn_name=b"trace_fun_call")
 
 
 if __name__ == "__main__":
diff --git a/tests/python/test_usdt.py b/tests/python/test_usdt.py
index d026a50..64d293e 100755
--- a/tests/python/test_usdt.py
+++ b/tests/python/test_usdt.py
@@ -56,7 +56,7 @@
 }
 """
         # BPF program
-        self.bpf_text = """
+        self.bpf_text = b"""
 #include <linux/blkdev.h>
 #include <uapi/linux/ptrace.h>
 
@@ -205,11 +205,11 @@
             print("%s" % event.v1)
 
         # loop with callback to print_event
-        b["event1"].open_perf_buffer(print_event1)
-        b["event2"].open_perf_buffer(print_event2)
-        b["event3"].open_perf_buffer(print_event3)
-        b["event4"].open_perf_buffer(print_event4)
-        b["event5"].open_perf_buffer(print_event5)
+        b[b"event1"].open_perf_buffer(print_event1)
+        b[b"event2"].open_perf_buffer(print_event2)
+        b[b"event3"].open_perf_buffer(print_event3)
+        b[b"event4"].open_perf_buffer(print_event4)
+        b[b"event5"].open_perf_buffer(print_event5)
 
         # three iterations to make sure we get some probes and have time to process them
         for i in range(3):
diff --git a/tests/python/test_usdt2.py b/tests/python/test_usdt2.py
index f8da339..2d2f667 100755
--- a/tests/python/test_usdt2.py
+++ b/tests/python/test_usdt2.py
@@ -35,7 +35,7 @@
 }
 """
         # BPF program
-        self.bpf_text = """
+        self.bpf_text = b"""
 #include <uapi/linux/ptrace.h>
 
 BPF_PERF_OUTPUT(event1);
@@ -102,7 +102,7 @@
         u2 = USDT(pid=int(self.app2.pid))
         u2.enable_probe(probe="probe_point_2", fn_name="do_trace2")
         u2.enable_probe(probe="probe_point_3", fn_name="do_trace3")
-        self.bpf_text = self.bpf_text.replace("FILTER", "pid == %d" % self.app.pid)
+        self.bpf_text = self.bpf_text.replace(b"FILTER", b"pid == %d" % self.app.pid)
         b = BPF(text=self.bpf_text, usdt_contexts=[u, u2])
 
         # Event states for each event:
@@ -141,12 +141,12 @@
             self.evt_st_6 = check_event_val(data, self.evt_st_6, 13)
 
         # loop with callback to print_event
-        b["event1"].open_perf_buffer(print_event1)
-        b["event2"].open_perf_buffer(print_event2)
-        b["event3"].open_perf_buffer(print_event3)
-        b["event4"].open_perf_buffer(print_event4)
-        b["event5"].open_perf_buffer(print_event5)
-        b["event6"].open_perf_buffer(print_event6)
+        b[b"event1"].open_perf_buffer(print_event1)
+        b[b"event2"].open_perf_buffer(print_event2)
+        b[b"event3"].open_perf_buffer(print_event3)
+        b[b"event4"].open_perf_buffer(print_event4)
+        b[b"event5"].open_perf_buffer(print_event5)
+        b[b"event6"].open_perf_buffer(print_event6)
 
         # three iterations to make sure we get some probes and have time to process them
         for i in range(5):
diff --git a/tests/python/test_usdt3.py b/tests/python/test_usdt3.py
index a378fd4..70fa5a0 100755
--- a/tests/python/test_usdt3.py
+++ b/tests/python/test_usdt3.py
@@ -63,7 +63,7 @@
 }
 """
         # BPF program
-        self.bpf_text = """
+        self.bpf_text = b"""
 BPF_PERF_OUTPUT(event);
 int do_trace(struct pt_regs *ctx) {
     int result = 0;
@@ -131,7 +131,7 @@
             else:
                 self.probe_value_other = 1
 
-        b["event"].open_perf_buffer(print_event)
+        b[b"event"].open_perf_buffer(print_event)
         for i in range(100):
             if (self.probe_value_1 == 0 or
                 self.probe_value_2 == 0 or
diff --git a/tests/python/test_xlate1.py b/tests/python/test_xlate1.py
index 3057c45..9e93fc2 100755
--- a/tests/python/test_xlate1.py
+++ b/tests/python/test_xlate1.py
@@ -11,17 +11,17 @@
 from time import sleep
 from unittest import main, TestCase
 
-arg1 = sys.argv.pop(1)
-arg2 = ""
+arg1 = sys.argv.pop(1).encode()
+arg2 = "".encode()
 if len(sys.argv) > 1:
   arg2 = sys.argv.pop(1)
 
 class TestBPFFilter(TestCase):
     def setUp(self):
         b = BPF(arg1, arg2, debug=0)
-        fn = b.load_func("on_packet", BPF.SCHED_ACT)
+        fn = b.load_func(b"on_packet", BPF.SCHED_ACT)
         ip = IPRoute()
-        ifindex = ip.link_lookup(ifname="eth0")[0]
+        ifindex = ip.link_lookup(ifname=b"eth0")[0]
         # set up a network to change the flow:
         #             outside      |       inside
         # 172.16.1.1 - 172.16.1.2  |  192.168.1.1 - 192.16.1.2
@@ -36,7 +36,7 @@
                 protocol=protocols.ETH_P_ALL, classid=1, target=0x10002, keys=['0x0/0x0+0'])
         ip.tc("add-filter", "u32", ifindex, ":2", parent="1:", action=[action],
                 protocol=protocols.ETH_P_ALL, classid=1, target=0x10002, keys=['0x0/0x0+0'])
-        self.xlate = b.get_table("xlate")
+        self.xlate = b.get_table(b"xlate")
 
     def test_xlate(self):
         key1 = self.xlate.Key(IPAddress("172.16.1.2").value, IPAddress("172.16.1.1").value)
diff --git a/tests/python/utils.py b/tests/python/utils.py
index b1a7d26..2340478 100644
--- a/tests/python/utils.py
+++ b/tests/python/utils.py
@@ -1,9 +1,8 @@
 from pyroute2 import NSPopen
-from distutils.spawn import find_executable
 import traceback
-import distutils.version
+import shutil
 
-import logging, os, sys
+import logging, os, sys, re
 
 if 'PYTHON_TEST_LOGFILE' in os.environ:
     logfile=os.environ['PYTHON_TEST_LOGFILE']
@@ -14,7 +13,7 @@
 logger = logging.getLogger()
 
 def has_executable(name):
-    path = find_executable(name)
+    path = shutil.which(name)
     if path is None:
         raise Exception(name + ": command not found")
     return path
@@ -51,6 +50,23 @@
         return wrapper
     return decorator
 
+# This is a decorator that will skip tests if any binary in the list is not in PATH.
+def skipUnlessHasBinaries(binaries, message):
+    def decorator(func):
+        def wrapper(self, *args, **kwargs):
+            missing = []
+            for binary in binaries:
+                if shutil.which(binary) is None:
+                    missing.append(binary)
+
+            if len(missing):
+                missing_binaries = ", ".join(missing)
+                self.skipTest(f"Missing binaries: {missing_binaries}. {message}")
+            else:
+                func(self, *args, **kwargs)
+        return wrapper
+    return decorator
+
 class NSPopenWithCheck(NSPopen):
     """
     A wrapper for NSPopen that additionally checks if the program
@@ -64,13 +80,17 @@
         has_executable(name)
         super(NSPopenWithCheck, self).__init__(nsname, *argv, **kwarg)
 
+KERNEL_VERSION_PATTERN = r"v?(?P<major>[0-9]+)\.(?P<minor>[0-9]+).*"
+
 def kernel_version_ge(major, minor):
     # True if running kernel is >= X.Y
-    version = distutils.version.LooseVersion(os.uname()[2]).version
-    if version[0] > major:
+    match = re.match(KERNEL_VERSION_PATTERN, os.uname()[2])
+    x = int(match.group("major"))
+    y = int(match.group("minor"))
+    if x > major:
         return True
-    if version[0] < major:
+    if x < major:
         return False
-    if minor and version[1] < minor:
+    if minor and y < minor:
         return False
     return True
diff --git a/tests/wrapper.sh.in b/tests/wrapper.sh.in
index a096ac8..e2dbba4 100755
--- a/tests/wrapper.sh.in
+++ b/tests/wrapper.sh.in
@@ -9,6 +9,7 @@
 cmd=$1; shift
 
 PYTHONPATH=@CMAKE_BINARY_DIR@/src/python/bcc-python3
+PYTHONIOENCODING=utf-8
 LD_LIBRARY_PATH=@CMAKE_BINARY_DIR@:@CMAKE_BINARY_DIR@/src/cc
 
 ns=$name
@@ -32,27 +33,27 @@
   sudo ip netns exec $ns ethtool -K eth0 tx off
   sudo ip addr add dev $ns.out 172.16.1.1/24
   sudo ip link set $ns.out up
-  sudo bash -c "PYTHONPATH=$PYTHONPATH PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE LD_LIBRARY_PATH=$LD_LIBRARY_PATH ip netns exec $ns $cmd $1 $2"
+  sudo --preserve-env=PYTHON_TEST_LOGFILE env PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH ip netns exec $ns $cmd "$@"
   return $?
 }
 function sudo_run() {
-  sudo bash -c "PYTHONPATH=$PYTHONPATH PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd $1 $2"
+  sudo --preserve-env=PYTHON_TEST_LOGFILE env PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd "$@"
   return $?
 }
 function simple_run() {
-  PYTHONPATH=$PYTHONPATH PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd $1 $2
+  PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd "$@"
   return $?
 }
 
 case $kind in
   namespace)
-    ns_run $@
+    ns_run "$@"
     ;;
   sudo)
-    sudo_run $@
+    sudo_run "$@"
     ;;
   simple)
-    simple_run $@
+    simple_run "$@"
     ;;
   *)
     echo "Invalid kind $kind"
diff --git a/tools/argdist.py b/tools/argdist.py
index 83a66f3..026ff08 100755
--- a/tools/argdist.py
+++ b/tools/argdist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # argdist   Trace a function and display a distribution of its
 #           parameter values as a histogram or frequency count.
@@ -21,7 +21,7 @@
 class Probe(object):
         next_probe_index = 0
         streq_index = 0
-        aliases = {"$PID": "(bpf_get_current_pid_tgid() >> 32)"}
+        aliases = {"$PID": "(bpf_get_current_pid_tgid() >> 32)", "$COMM": "&val.name"}
 
         def _substitute_aliases(self, expr):
                 if expr is None:
@@ -125,6 +125,17 @@
                         text += "if (%s == 0) { return 0 ; }\n" % val_name
                         self.param_val_names[pname] = val_name
                 return text
+        
+        def _generate_comm_prefix(self):
+                text = """
+struct val_t {
+        u32 pid;
+        char name[sizeof(struct __string_t)];
+};
+struct val_t val = {.pid = (bpf_get_current_pid_tgid() >> 32) };
+bpf_get_current_comm(&val.name, sizeof(val.name));
+        """
+                return text
 
         def _replace_entry_exprs(self):
                 for pname, vname in self.param_val_names.items():
@@ -397,6 +408,10 @@
                         # signatures. Other probes force it to ().
                         signature = ", " + self.signature
 
+                # If COMM is specified prefix with code to get process name
+                if self.exprs.count(self.aliases['$COMM']):
+                        prefix += self._generate_comm_prefix()
+
                 program += probe_text.replace("PROBENAME",
                                               self.probe_func_name)
                 program = program.replace("SIGNATURE", signature)
@@ -524,7 +539,7 @@
 class Tool(object):
         examples = """
 Probe specifier syntax:
-        {p,r,t,u}:{[library],category}:function(signature)[:type[,type...]:expr[,expr...][:filter]][#label]
+        {p,r,t,u}:{[library],category}:function(signature):type[,type...]:expr[,expr...][:filter]][#label]
 Where:
         p,r,t,u    -- probe at function entry, function exit, kernel
                       tracepoint, or USDT probe
@@ -568,6 +583,9 @@
 argdist -C 'r::__vfs_read():u32:$PID:$latency > 100000'
         Print frequency of reads by process where the latency was >0.1ms
 
+argdist -C 'r::__vfs_read():u32:$COMM:$latency > 100000'
+        Print frequency of reads by process name where the latency was >0.1ms
+
 argdist -H 'r::__vfs_read(void *file, void *buf, size_t count):size_t:
             $entry(count):$latency > 1000000'
         Print a histogram of read sizes that were longer than 1ms
@@ -648,6 +666,8 @@
                        "as either full path, "
                        "or relative to relative to current working directory, "
                        "or relative to default kernel header search path")
+                parser.add_argument("--ebpf", action="store_true",
+                  help=argparse.SUPPRESS)
                 self.args = parser.parse_args()
                 self.usdt_ctx = None
 
@@ -683,7 +703,10 @@
                                      for probe in self.probes
                                      if probe.usdt_ctx]:
                             print(text)
-                        print(bpf_source)
+                if self.args.verbose or self.args.ebpf:
+                    print(bpf_source)
+                    if self.args.ebpf:
+                        exit()
                 usdt_contexts = [probe.usdt_ctx
                                  for probe in self.probes if probe.usdt_ctx]
                 self.bpf = BPF(text=bpf_source, usdt_contexts=usdt_contexts)
diff --git a/tools/argdist_example.txt b/tools/argdist_example.txt
index 5ee0078..de9f819 100644
--- a/tools/argdist_example.txt
+++ b/tools/argdist_example.txt
@@ -203,6 +203,24 @@
 
 It looks like process 2780 performed 21 slow reads.
 
+You can print the name of the process. This is helpful for short lived processes
+and for easier identification of processes response. For example, we can identify
+the process using the epoll I/O multiplexing system call
+
+# ./argdist -C 't:syscalls:sys_exit_epoll_wait():char*:$COMM'
+[19:57:56]
+t:syscalls:sys_exit_epoll_wait():char*:$COMM
+	COUNT      EVENT
+	4          $COMM = b'node'
+[19:57:57]
+t:syscalls:sys_exit_epoll_wait():char*:$COMM
+	COUNT      EVENT
+	2          $COMM = b'open5gs-sgwud'
+	3          $COMM = b'open5gs-sgwcd'
+	3          $COMM = b'open5gs-nrfd'
+	3          $COMM = b'open5gs-udmd'
+	4          $COMM = b'open5gs-scpd'
+
 Occasionally, entry parameter values are also interesting. For example, you
 might be curious how long it takes malloc() to allocate memory -- nanoseconds
 per byte allocated. Let's go:
@@ -413,6 +431,9 @@
 argdist -C 'r::__vfs_read():u32:$PID:$latency > 100000'
         Print frequency of reads by process where the latency was >0.1ms
 
+argdist -C 'r::__vfs_read():u32:$COMM:$latency > 100000'
+        Print frequency of reads by process name where the latency was >0.1ms
+
 argdist -H 'r::__vfs_read(void *file, void *buf, size_t count):size_t:$entry(count):$latency > 1000000' 
         Print a histogram of read sizes that were longer than 1ms
 
diff --git a/tools/bashreadline.py b/tools/bashreadline.py
index 3e18997..cfbf236 100755
--- a/tools/bashreadline.py
+++ b/tools/bashreadline.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # bashreadline  Print entered bash commands from all running shells.
 #               For Linux, uses BCC, eBPF. Embedded C.
@@ -38,7 +38,7 @@
 #include <linux/sched.h>
 
 struct str_t {
-    u64 pid;
+    u32 pid;
     char str[80];
 };
 
@@ -47,11 +47,9 @@
 int printret(struct pt_regs *ctx) {
     struct str_t data  = {};
     char comm[TASK_COMM_LEN] = {};
-    u32 pid;
     if (!PT_REGS_RC(ctx))
         return 0;
-    pid = bpf_get_current_pid_tgid() >> 32;
-    data.pid = pid;
+    data.pid = bpf_get_current_pid_tgid() >> 32;
     bpf_probe_read_user(&data.str, sizeof(data.str), (void *)PT_REGS_RC(ctx));
 
     bpf_get_current_comm(&comm, sizeof(comm));
diff --git a/tools/bindsnoop.py b/tools/bindsnoop.py
index 0750335..acae0ad 100755
--- a/tools/bindsnoop.py
+++ b/tools/bindsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # bindsnoop       Trace IPv4 and IPv6 binds()s.
 #               For Linux, uses BCC, eBPF. Embedded C.
diff --git a/tools/biolatency.py b/tools/biolatency.py
index 63a2a57..03b48a4 100755
--- a/tools/biolatency.py
+++ b/tools/biolatency.py
@@ -1,21 +1,24 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # biolatency    Summarize block device I/O latency as a histogram.
 #       For Linux, uses BCC, eBPF.
 #
-# USAGE: biolatency [-h] [-T] [-Q] [-m] [-D] [-F] [-e] [-j] [interval] [count]
+# USAGE: biolatency [-h] [-T] [-Q] [-m] [-D] [-F] [-e] [-j] [-d DISK] [interval] [count]
 #
 # Copyright (c) 2015 Brendan Gregg.
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 20-Sep-2015   Brendan Gregg   Created this.
+# 31-Mar-2022   Rocky Xing      Added disk filter support.
+# 01-Aug-2023   Jerome Marchand Added support for block tracepoints
 
 from __future__ import print_function
 from bcc import BPF
 from time import sleep, strftime
 import argparse
 import ctypes as ct
+import os
 
 # arguments
 examples = """examples:
@@ -27,6 +30,7 @@
     ./biolatency -F                 # show I/O flags separately
     ./biolatency -j                 # print a dictionary
     ./biolatency -e                 # show extension summary(total, average)
+    ./biolatency -d sdc             # Trace sdc only
 """
 parser = argparse.ArgumentParser(
     description="Summarize block device I/O latency as a histogram",
@@ -52,6 +56,8 @@
     help=argparse.SUPPRESS)
 parser.add_argument("-j", "--json", action="store_true",
     help="json output")
+parser.add_argument("-d", "--disk", type=str,
+    help="Trace this disk only")
 
 args = parser.parse_args()
 countdown = int(args.count)
@@ -67,7 +73,7 @@
 #include <linux/blk-mq.h>
 
 typedef struct disk_key {
-    char disk[DISK_NAME_LEN];
+    dev_t dev;
     u64 slot;
 } disk_key_t;
 
@@ -81,39 +87,105 @@
     u64 count;
 } ext_val_t;
 
-BPF_HASH(start, struct request *);
+struct tp_args {
+    u64 __unused__;
+    dev_t dev;
+    sector_t sector;
+    unsigned int nr_sector;
+    unsigned int bytes;
+    char rwbs[8];
+    char comm[16];
+    char cmd[];
+};
+
+struct start_key {
+    dev_t dev;
+    u32 _pad;
+    sector_t sector;
+    CMD_FLAGS
+};
+
+BPF_HASH(start, struct start_key);
 STORAGE
 
+static dev_t ddevt(struct gendisk *disk) {
+    return (disk->major  << 20) | disk->first_minor;
+}
+
 // time block I/O
-int trace_req_start(struct pt_regs *ctx, struct request *req)
+static int __trace_req_start(struct start_key key)
 {
+    DISK_FILTER
+
     u64 ts = bpf_ktime_get_ns();
-    start.update(&req, &ts);
+    start.update(&key, &ts);
     return 0;
 }
 
+int trace_req_start(struct pt_regs *ctx, struct request *req)
+{
+    struct start_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .sector = req->__sector
+    };
+
+    SET_FLAGS
+
+    return __trace_req_start(key);
+}
+
+int trace_req_start_tp(struct tp_args *args)
+{
+    struct start_key key = {
+        .dev = args->dev,
+        .sector = args->sector
+    };
+
+    return __trace_req_start(key);
+}
+
 // output
-int trace_req_done(struct pt_regs *ctx, struct request *req)
+static int __trace_req_done(struct start_key key)
 {
     u64 *tsp, delta;
 
     // fetch timestamp and calculate delta
-    tsp = start.lookup(&req);
+    tsp = start.lookup(&key);
     if (tsp == 0) {
         return 0;   // missed issue
     }
     delta = bpf_ktime_get_ns() - *tsp;
 
-    EXTENSION
-
     FACTOR
 
     // store as histogram
     STORE
 
-    start.delete(&req);
+    start.delete(&key);
     return 0;
 }
+
+int trace_req_done(struct pt_regs *ctx, struct request *req)
+{
+    struct start_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .sector = req->__sector
+    };
+
+    SET_FLAGS
+
+    return __trace_req_done(key);
+}
+
+int trace_req_done_tp(struct tp_args *args)
+{
+    struct start_key key = {
+        .dev = args->dev,
+        .sector = args->sector
+    };
+
+    return __trace_req_done(key);
+}
 """
 
 # code substitutions
@@ -129,40 +201,65 @@
 if args.disks:
     storage_str += "BPF_HISTOGRAM(dist, disk_key_t);"
     disks_str = """
-    disk_key_t key = {.slot = bpf_log2l(delta)};
-    void *__tmp = (void *)req->__RQ_DISK__->disk_name;
-    bpf_probe_read(&key.disk, sizeof(key.disk), __tmp);
-    dist.atomic_increment(key);
+    disk_key_t dkey = {};
+    dkey.dev = key.dev;
+    dkey.slot = bpf_log2l(delta);
+    dist.atomic_increment(dkey);
     """
-    if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
-        store_str += disks_str.replace('__RQ_DISK__', 'rq_disk')
-    else:
-        store_str += disks_str.replace('__RQ_DISK__', 'q->disk')
+    store_str += disks_str
 elif args.flags:
     storage_str += "BPF_HISTOGRAM(dist, flag_key_t);"
     store_str += """
-    flag_key_t key = {.slot = bpf_log2l(delta)};
-    key.flags = req->cmd_flags;
-    dist.atomic_increment(key);
+    flag_key_t fkey = {.slot = bpf_log2l(delta)};
+    fkey.flags = key.flags;
+    dist.atomic_increment(fkey);
     """
 else:
     storage_str += "BPF_HISTOGRAM(dist);"
     store_str += "dist.atomic_increment(bpf_log2l(delta));"
 
+if args.disk is not None:
+    disk_path = os.path.join('/dev', args.disk)
+    if not os.path.exists(disk_path):
+        print("no such disk '%s'" % args.disk)
+        exit(1)
+
+    stat_info = os.stat(disk_path)
+    dev = os.major(stat_info.st_rdev) << 20 | os.minor(stat_info.st_rdev)
+
+    disk_filter_str = """
+    if(key.dev != %s) {
+        return 0;
+    }
+    """ % (dev)
+
+    bpf_text = bpf_text.replace('DISK_FILTER', disk_filter_str)
+else:
+    bpf_text = bpf_text.replace('DISK_FILTER', '')
+
 if args.extension:
     storage_str += "BPF_ARRAY(extension, ext_val_t, 1);"
-    bpf_text = bpf_text.replace('EXTENSION', """
+    store_str += """
     u32 index = 0;
     ext_val_t *ext_val = extension.lookup(&index);
     if (ext_val) {
         lock_xadd(&ext_val->total, delta);
         lock_xadd(&ext_val->count, 1);
     }
-    """)
-else:
-    bpf_text = bpf_text.replace('EXTENSION', '')
+    """
+
 bpf_text = bpf_text.replace("STORAGE", storage_str)
 bpf_text = bpf_text.replace("STORE", store_str)
+if BPF.kernel_struct_has_field(b'request', b'rq_disk') == 1:
+    bpf_text = bpf_text.replace('__RQ_DISK__', 'rq_disk')
+else:
+    bpf_text = bpf_text.replace('__RQ_DISK__', 'q->disk')
+if args.flags:
+    bpf_text = bpf_text.replace('CMD_FLAGS', 'u64 flags;')
+    bpf_text = bpf_text.replace('SET_FLAGS', 'key.flags = req->cmd_flags;')
+else:
+    bpf_text = bpf_text.replace('CMD_FLAGS', '')
+    bpf_text = bpf_text.replace('SET_FLAGS', '')
 
 if debug or args.ebpf:
     print(bpf_text)
@@ -174,25 +271,53 @@
 if args.queued:
     if BPF.get_kprobe_functions(b'__blk_account_io_start'):
         b.attach_kprobe(event="__blk_account_io_start", fn_name="trace_req_start")
-    else:
+    elif BPF.get_kprobe_functions(b'blk_account_io_start'):
         b.attach_kprobe(event="blk_account_io_start", fn_name="trace_req_start")
+    else:
+        if args.flags:
+            # Some flags are accessible in the rwbs field (RAHEAD, SYNC and META)
+            # but other aren't. Disable the -F option for tracepoint for now.
+            print("ERROR: blk_account_io_start probe not available. Can't use -F.")
+            exit()
+        b.attach_tracepoint(tp="block:block_io_start", fn_name="trace_req_start_tp")
 else:
     if BPF.get_kprobe_functions(b'blk_start_request'):
         b.attach_kprobe(event="blk_start_request", fn_name="trace_req_start")
     b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_req_start")
+
 if BPF.get_kprobe_functions(b'__blk_account_io_done'):
     b.attach_kprobe(event="__blk_account_io_done", fn_name="trace_req_done")
-else:
+elif BPF.get_kprobe_functions(b'blk_account_io_done'):
     b.attach_kprobe(event="blk_account_io_done", fn_name="trace_req_done")
+else:
+    if args.flags:
+        print("ERROR: blk_account_io_done probe not available. Can't use -F.")
+        exit()
+    b.attach_tracepoint(tp="block:block_io_done", fn_name="trace_req_done_tp")
+
 
 if not args.json:
     print("Tracing block device I/O... Hit Ctrl-C to end.")
 
-def disk_print(s):
-    disk = s.decode('utf-8', 'replace')
-    if not disk:
-        disk = "<unknown>"
-    return disk
+# cache disk major,minor -> diskname
+diskstats = "/proc/diskstats"
+disklookup = {}
+with open(diskstats) as stats:
+    for line in stats:
+        a = line.split()
+        disklookup[a[0] + "," + a[1]] = a[2]
+
+def disk_print(d):
+    major = d >> 20
+    minor = d & ((1 << 20) - 1)
+
+    disk = str(major) + "," + str(minor)
+    if disk in disklookup:
+        diskname = disklookup[disk]
+    else:
+        diskname = "?"
+
+    return diskname
 
 # see blk_fill_rwbs():
 req_opf = {
@@ -275,15 +400,10 @@
             dist.print_log2_hist(label, "disk", disk_print)
         if args.extension:
             total = extension[0].total
-            counts = extension[0].count
-            if counts > 0:
-                if label == 'msecs':
-                    total /= 1000000
-                elif label == 'usecs':
-                    total /= 1000
-                avg = total / counts
+            count = extension[0].count
+            if count > 0:
                 print("\navg = %ld %s, total: %ld %s, count: %ld\n" %
-                      (total / counts, label, total, label, counts))
+                      (total / count, label, total, label, count))
             extension.clear()
 
     dist.clear()
diff --git a/tools/biolatency_example.txt b/tools/biolatency_example.txt
old mode 100755
new mode 100644
index a88136b..1bc8f59
--- a/tools/biolatency_example.txt
+++ b/tools/biolatency_example.txt
@@ -352,24 +352,25 @@
 USAGE message:
 
 # ./biolatency -h
-usage: biolatency.py [-h] [-T] [-Q] [-m] [-D] [-F] [-j]
-                              [interval] [count]
+usage: biolatency.py [-h] [-T] [-Q] [-m] [-D] [-F] [-e] [-j] [-d DISK]
+                     [interval] [count]
 
 Summarize block device I/O latency as a histogram
 
 positional arguments:
-  interval            output interval, in seconds
-  count               number of outputs
+  interval              output interval, in seconds
+  count                 number of outputs
 
 optional arguments:
-  -h, --help          show this help message and exit
-  -T, --timestamp     include timestamp on output
-  -Q, --queued        include OS queued time in I/O time
-  -m, --milliseconds  millisecond histogram
-  -D, --disks         print a histogram per disk device
-  -F, --flags         print a histogram per set of I/O flags
-  -e, --extension     also show extension summary(total, average)
-  -j, --json          json output
+  -h, --help            show this help message and exit
+  -T, --timestamp       include timestamp on output
+  -Q, --queued          include OS queued time in I/O time
+  -m, --milliseconds    millisecond histogram
+  -D, --disks           print a histogram per disk device
+  -F, --flags           print a histogram per set of I/O flags
+  -e, --extension       summarize average/total value
+  -j, --json            json output
+  -d DISK, --disk DISK  Trace this disk only
 
 examples:
     ./biolatency                    # summarize block I/O latency as a histogram
@@ -380,3 +381,4 @@
     ./biolatency -F                 # show I/O flags separately
     ./biolatency -j                 # print a dictionary
     ./biolatency -e                 # show extension summary(total, average)
+    ./biolatency -d sdc             # Trace sdc only
diff --git a/tools/biolatpcts.py b/tools/biolatpcts.py
index ea8b1ce..58e85c1 100755
--- a/tools/biolatpcts.py
+++ b/tools/biolatpcts.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # biolatpcts.py  Monitor IO latency distribution of a block device.
 #
@@ -63,19 +63,21 @@
 BPF_PERCPU_ARRAY(rwdf_1ms, u64, 400);
 BPF_PERCPU_ARRAY(rwdf_10us, u64, 400);
 
-void kprobe_blk_account_io_done(struct pt_regs *ctx, struct request *rq, u64 now)
+RAW_TRACEPOINT_PROBE(block_rq_complete)
 {
+        // TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes)
+        struct request *rq = (void *)ctx->args[0];
         unsigned int cmd_flags;
         u64 dur;
         size_t base, slot;
 
         if (!rq->__START_TIME_FIELD__)
-                return;
+                return 0;
 
         if (!rq->__RQ_DISK__ ||
             rq->__RQ_DISK__->major != __MAJOR__ ||
             rq->__RQ_DISK__->first_minor != __MINOR__)
-                return;
+                return 0;
 
         cmd_flags = rq->cmd_flags;
         switch (cmd_flags & REQ_OP_MASK) {
@@ -92,23 +94,24 @@
                 base = 300;
                 break;
         default:
-                return;
+                return 0;
         }
 
-        dur = now - rq->__START_TIME_FIELD__;
+        dur = bpf_ktime_get_ns() - rq->__START_TIME_FIELD__;
 
         slot = min_t(size_t, div_u64(dur, 100 * NSEC_PER_MSEC), 99);
         rwdf_100ms.increment(base + slot);
         if (slot)
-                return;
+                return 0;
 
         slot = min_t(size_t, div_u64(dur, NSEC_PER_MSEC), 99);
         rwdf_1ms.increment(base + slot);
         if (slot)
-                return;
+                return 0;
 
         slot = min_t(size_t, div_u64(dur, 10 * NSEC_PER_USEC), 99);
         rwdf_10us.increment(base + slot);
+        return 0;
 }
 """
 
@@ -142,16 +145,12 @@
 bpf_source = bpf_source.replace('__MAJOR__', str(major))
 bpf_source = bpf_source.replace('__MINOR__', str(minor))
 
-if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+if BPF.kernel_struct_has_field(b'request', b'rq_disk') == 1:
     bpf_source = bpf_source.replace('__RQ_DISK__', 'rq_disk')
 else:
     bpf_source = bpf_source.replace('__RQ_DISK__', 'q->disk')
 
 bpf = BPF(text=bpf_source)
-if BPF.get_kprobe_functions(b'__blk_account_io_done'):
-    bpf.attach_kprobe(event="__blk_account_io_done", fn_name="kprobe_blk_account_io_done")
-else:
-    bpf.attach_kprobe(event="blk_account_io_done", fn_name="kprobe_blk_account_io_done")
 
 # times are in usecs
 MSEC = 1000
diff --git a/tools/biopattern.py b/tools/biopattern.py
index 9bfc077..8c671ff 100755
--- a/tools/biopattern.py
+++ b/tools/biopattern.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # biopattern - Identify random/sequential disk access patterns.
@@ -123,12 +123,13 @@
             continue
 
         part_name = partitions.get(k.value, "Unknown")
+        random_percent = int(round(v.random * 100 / total))
 
         print("%-9s %-7s %5d %5d %8d %10d" % (
             strftime("%H:%M:%S"),
             part_name,
-            v.random * 100 / total,
-            v.sequential * 100 / total,
+            random_percent,
+            100 - random_percent,
             total,
             v.bytes / 1024))
 
diff --git a/tools/biosnoop.py b/tools/biosnoop.py
index 5e7c6e6..f0fef98 100755
--- a/tools/biosnoop.py
+++ b/tools/biosnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # biosnoop  Trace block device I/O and print details including issuing PID.
@@ -12,16 +12,21 @@
 #
 # 16-Sep-2015   Brendan Gregg   Created this.
 # 11-Feb-2016   Allan McAleavy  updated for BPF_PERF_OUTPUT
+# 21-Jun-2022   Rocky Xing      Added disk filter support.
+# 13-Oct-2022   Rocky Xing      Added support for displaying block I/O pattern.
+# 01-Aug-2023   Jerome Marchand Added support for block tracepoints
 
 from __future__ import print_function
 from bcc import BPF
-import re
 import argparse
+import os
 
 # arguments
 examples = """examples:
     ./biosnoop           # trace all block I/O
     ./biosnoop -Q        # include OS queued time
+    ./biosnoop -d sdc    # trace sdc only
+    ./biosnoop -P        # display block I/O pattern
 """
 parser = argparse.ArgumentParser(
     description="Trace block I/O",
@@ -29,16 +34,25 @@
     epilog=examples)
 parser.add_argument("-Q", "--queue", action="store_true",
     help="include OS queued time")
+parser.add_argument("-d", "--disk", type=str,
+    help="trace this disk only")
+parser.add_argument("-P", "--pattern", action="store_true",
+    help="display block I/O pattern (sequential or random)")
 parser.add_argument("--ebpf", action="store_true",
     help=argparse.SUPPRESS)
 args = parser.parse_args()
 debug = 0
 
 # define BPF program
-bpf_text="""
+bpf_text = """
 #include <uapi/linux/ptrace.h>
 #include <linux/blk-mq.h>
+"""
 
+if args.pattern:
+    bpf_text += "#define INCLUDE_PATTERN\n"
+
+bpf_text += """
 // for saving the timestamp and __data_len of each request
 struct start_req_t {
     u64 ts;
@@ -51,85 +65,64 @@
     char name[TASK_COMM_LEN];
 };
 
+struct tp_args {
+    u64 __unused__;
+    dev_t dev;
+    sector_t sector;
+    unsigned int nr_sector;
+    unsigned int bytes;
+    char rwbs[8];
+    char comm[16];
+    char cmd[];
+};
+
+struct hash_key {
+    dev_t dev;
+    u32 rwflag;
+    sector_t sector;
+};
+
+
+#ifdef INCLUDE_PATTERN
+struct sector_key_t {
+    u32 dev_major;
+    u32 dev_minor;
+};
+
+enum bio_pattern {
+    UNKNOWN,
+    SEQUENTIAL,
+    RANDOM,
+};
+#endif
+
 struct data_t {
     u32 pid;
+    u32 dev;
     u64 rwflag;
     u64 delta;
     u64 qdelta;
     u64 sector;
     u64 len;
+#ifdef INCLUDE_PATTERN
+    enum bio_pattern pattern;
+#endif
     u64 ts;
-    char disk_name[DISK_NAME_LEN];
     char name[TASK_COMM_LEN];
 };
 
-BPF_HASH(start, struct request *, struct start_req_t);
-BPF_HASH(infobyreq, struct request *, struct val_t);
+#ifdef INCLUDE_PATTERN
+BPF_HASH(last_sectors, struct sector_key_t, u64);
+#endif
+
+BPF_HASH(start, struct hash_key, struct start_req_t);
+BPF_HASH(infobyreq, struct hash_key, struct val_t);
 BPF_PERF_OUTPUT(events);
 
-// cache PID and comm by-req
-int trace_pid_start(struct pt_regs *ctx, struct request *req)
-{
-    struct val_t val = {};
-    u64 ts;
-
-    if (bpf_get_current_comm(&val.name, sizeof(val.name)) == 0) {
-        val.pid = bpf_get_current_pid_tgid() >> 32;
-        if (##QUEUE##) {
-            val.ts = bpf_ktime_get_ns();
-        }
-        infobyreq.update(&req, &val);
-    }
-    return 0;
+static dev_t ddevt(struct gendisk *disk) {
+    return (disk->major  << 20) | disk->first_minor;
 }
 
-// time block I/O
-int trace_req_start(struct pt_regs *ctx, struct request *req)
-{
-    struct start_req_t start_req = {
-        .ts = bpf_ktime_get_ns(),
-        .data_len = req->__data_len
-    };
-    start.update(&req, &start_req);
-    return 0;
-}
-
-// output
-int trace_req_completion(struct pt_regs *ctx, struct request *req)
-{
-    struct start_req_t *startp;
-    struct val_t *valp;
-    struct data_t data = {};
-    u64 ts;
-
-    // fetch timestamp and calculate delta
-    startp = start.lookup(&req);
-    if (startp == 0) {
-        // missed tracing issue
-        return 0;
-    }
-    ts = bpf_ktime_get_ns();
-    data.delta = ts - startp->ts;
-    data.ts = ts / 1000;
-    data.qdelta = 0;
-
-    valp = infobyreq.lookup(&req);
-    data.len = startp->data_len;
-    if (valp == 0) {
-        data.name[0] = '?';
-        data.name[1] = 0;
-    } else {
-        if (##QUEUE##) {
-            data.qdelta = startp->ts - valp->ts;
-        }
-        data.pid = valp->pid;
-        data.sector = req->__sector;
-        bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
-        struct gendisk *rq_disk = req->__RQ_DISK__;
-        bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
-                       rq_disk->disk_name);
-    }
-
 /*
  * The following deals with a kernel version change (in mainline 4.7, although
  * it may be backported to earlier kernels) with how block request write flags
@@ -137,29 +130,202 @@
  * kernel version tests like this as much as possible: they inflate the code,
  * test, and maintenance burden.
  */
+static int get_rwflag(u32 cmd_flags) {
 #ifdef REQ_WRITE
-    data.rwflag = !!(req->cmd_flags & REQ_WRITE);
+    return !!(cmd_flags & REQ_WRITE);
 #elif defined(REQ_OP_SHIFT)
-    data.rwflag = !!((req->cmd_flags >> REQ_OP_SHIFT) == REQ_OP_WRITE);
+    return !!((cmd_flags >> REQ_OP_SHIFT) == REQ_OP_WRITE);
 #else
-    data.rwflag = !!((req->cmd_flags & REQ_OP_MASK) == REQ_OP_WRITE);
+    return !!((cmd_flags & REQ_OP_MASK) == REQ_OP_WRITE);
+#endif
+}
+
+#define RWBS_LEN	8
+
+static int get_rwflag_tp(char *rwbs) {
+    for (int i = 0; i < RWBS_LEN; i++) {
+        if (rwbs[i] == 'W')
+            return 1;
+        if (rwbs[i] == '\\0')
+            return 0;
+    }
+    return 0;
+}
+
+// cache PID and comm by-req
+static int __trace_pid_start(struct hash_key key)
+{
+    DISK_FILTER
+
+    struct val_t val = {};
+    u64 ts;
+
+    if (bpf_get_current_comm(&val.name, sizeof(val.name)) == 0) {
+        val.pid = bpf_get_current_pid_tgid() >> 32;
+        if (##QUEUE##) {
+            val.ts = bpf_ktime_get_ns();
+        }
+        infobyreq.update(&key, &val);
+    }
+    return 0;
+}
+
+
+int trace_pid_start(struct pt_regs *ctx, struct request *req)
+{
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .rwflag = get_rwflag(req->cmd_flags),
+        .sector = req->__sector
+    };
+
+    return __trace_pid_start(key);
+}
+
+int trace_pid_start_tp(struct tp_args *args)
+{
+    struct hash_key key = {
+        .dev = args->dev,
+        .rwflag = get_rwflag_tp(args->rwbs),
+        .sector = args->sector
+    };
+
+    return __trace_pid_start(key);
+}
+
+// time block I/O
+int trace_req_start(struct pt_regs *ctx, struct request *req)
+{
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .rwflag = get_rwflag(req->cmd_flags),
+        .sector = req->__sector
+    };
+
+    DISK_FILTER
+
+    struct start_req_t start_req = {
+        .ts = bpf_ktime_get_ns(),
+        .data_len = req->__data_len
+    };
+    start.update(&key, &start_req);
+    return 0;
+}
+
+// output
+static int __trace_req_completion(void *ctx, struct hash_key key)
+{
+    struct start_req_t *startp;
+    struct val_t *valp;
+    struct data_t data = {};
+    //struct gendisk *rq_disk;
+    u64 ts;
+
+    // fetch timestamp and calculate delta
+    startp = start.lookup(&key);
+    if (startp == 0) {
+        // missed tracing issue
+        return 0;
+    }
+    ts = bpf_ktime_get_ns();
+    //rq_disk = req->__RQ_DISK__;
+    data.delta = ts - startp->ts;
+    data.ts = ts / 1000;
+    data.qdelta = 0;
+    data.len = startp->data_len;
+
+    valp = infobyreq.lookup(&key);
+    if (valp == 0) {
+        data.name[0] = '?';
+        data.name[1] = 0;
+    } else {
+        if (##QUEUE##) {
+            data.qdelta = startp->ts - valp->ts;
+        }
+        data.pid = valp->pid;
+        data.sector = key.sector;
+        data.dev = key.dev;
+        bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
+    }
+
+#ifdef INCLUDE_PATTERN
+    data.pattern = UNKNOWN;
+
+    u64 *sector, last_sector;
+
+    struct sector_key_t sector_key = {
+        .dev_major = key.dev >> 20,
+        .dev_minor = key.dev & ((1 << 20) - 1)
+    };
+
+    sector = last_sectors.lookup(&sector_key);
+    if (sector != 0) {
+        data.pattern = req->__sector == *sector ? SEQUENTIAL : RANDOM;
+    }
+
+    last_sector = req->__sector + data.len / 512;
+    last_sectors.update(&sector_key, &last_sector);
 #endif
 
+    data.rwflag = key.rwflag;
+
     events.perf_submit(ctx, &data, sizeof(data));
-    start.delete(&req);
-    infobyreq.delete(&req);
+    start.delete(&key);
+    infobyreq.delete(&key);
 
     return 0;
 }
+
+int trace_req_completion(struct pt_regs *ctx, struct request *req)
+{
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .rwflag = get_rwflag(req->cmd_flags),
+        .sector = req->__sector
+    };
+
+    return __trace_req_completion(ctx, key);
+}
+
+int trace_req_completion_tp(struct tp_args *args)
+{
+    struct hash_key key = {
+        .dev = args->dev,
+        .rwflag = get_rwflag_tp(args->rwbs),
+        .sector = args->sector
+    };
+
+    return __trace_req_completion(args, key);
+}
 """
 if args.queue:
     bpf_text = bpf_text.replace('##QUEUE##', '1')
 else:
     bpf_text = bpf_text.replace('##QUEUE##', '0')
-if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+if BPF.kernel_struct_has_field(b'request', b'rq_disk') == 1:
     bpf_text = bpf_text.replace('__RQ_DISK__', 'rq_disk')
 else:
     bpf_text = bpf_text.replace('__RQ_DISK__', 'q->disk')
+
+if args.disk is not None:
+    disk_path = os.path.join('/dev', args.disk)
+    if not os.path.exists(disk_path):
+        print("no such disk '%s'" % args.disk)
+        exit(1)
+
+    stat_info = os.stat(disk_path)
+    dev = os.major(stat_info.st_rdev) << 20 | os.minor(stat_info.st_rdev)
+
+    disk_filter_str = """
+    if(key.dev != %s) {
+        return 0;
+    }
+    """ % (dev)
+
+    bpf_text = bpf_text.replace('DISK_FILTER', disk_filter_str)
+else:
+    bpf_text = bpf_text.replace('DISK_FILTER', '')
+
 if debug or args.ebpf:
     print(bpf_text)
     if args.ebpf:
@@ -169,28 +335,59 @@
 b = BPF(text=bpf_text)
 if BPF.get_kprobe_functions(b'__blk_account_io_start'):
     b.attach_kprobe(event="__blk_account_io_start", fn_name="trace_pid_start")
-else:
+elif BPF.get_kprobe_functions(b'blk_account_io_start'):
     b.attach_kprobe(event="blk_account_io_start", fn_name="trace_pid_start")
+else:
+    b.attach_tracepoint(tp="block:block_io_start", fn_name="trace_pid_start_tp")
 if BPF.get_kprobe_functions(b'blk_start_request'):
     b.attach_kprobe(event="blk_start_request", fn_name="trace_req_start")
 b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_req_start")
 if BPF.get_kprobe_functions(b'__blk_account_io_done'):
     b.attach_kprobe(event="__blk_account_io_done", fn_name="trace_req_completion")
-else:
+elif BPF.get_kprobe_functions(b'blk_account_io_done'):
     b.attach_kprobe(event="blk_account_io_done", fn_name="trace_req_completion")
+else:
+    b.attach_tracepoint(tp="block:block_io_done", fn_name="trace_req_completion_tp")
 
 # header
 print("%-11s %-14s %-7s %-9s %-1s %-10s %-7s" % ("TIME(s)", "COMM", "PID",
     "DISK", "T", "SECTOR", "BYTES"), end="")
+if args.pattern:
+    print("%-1s " % ("P"), end="")
 if args.queue:
     print("%7s " % ("QUE(ms)"), end="")
 print("%7s" % "LAT(ms)")
 
+
+# cache disk major,minor -> diskname
+diskstats = "/proc/diskstats"
+disklookup = {}
+with open(diskstats) as stats:
+    for line in stats:
+        a = line.split()
+        disklookup[a[0] + "," + a[1]] = a[2]
+
+def disk_print(d):
+    major = d >> 20
+    minor = d & ((1 << 20) - 1)
+
+    disk = str(major) + "," + str(minor)
+    if disk in disklookup:
+        diskname = disklookup[disk]
+    else:
+        diskname = "<unknown>"
+
+    return diskname
+
 rwflg = ""
+pattern = ""
 start_ts = 0
 prev_ts = 0
 delta = 0
 
+P_SEQUENTIAL = 1
+P_RANDOM = 2
+
 # process event
 def print_event(cpu, data, size):
     event = b["events"].event(data)
@@ -206,13 +403,19 @@
 
     delta = float(event.ts) - start_ts
 
-    disk_name = event.disk_name.decode('utf-8', 'replace')
-    if not disk_name:
-        disk_name = '<unknown>'
+    disk_name = disk_print(event.dev)
 
     print("%-11.6f %-14.14s %-7s %-9s %-1s %-10s %-7s" % (
         delta / 1000000, event.name.decode('utf-8', 'replace'), event.pid,
         disk_name, rwflg, event.sector, event.len), end="")
+    if args.pattern:
+        if event.pattern == P_SEQUENTIAL:
+            pattern = "S"
+        elif event.pattern == P_RANDOM:
+            pattern = "R"
+        else:
+            pattern = "?"
+        print("%-1s " % pattern, end="")
     if args.queue:
         print("%7.2f " % (float(event.qdelta) / 1000000), end="")
     print("%7.2f" % (float(event.delta) / 1000000))
diff --git a/tools/biosnoop_example.txt b/tools/biosnoop_example.txt
index d8be062..a083085 100644
--- a/tools/biosnoop_example.txt
+++ b/tools/biosnoop_example.txt
@@ -64,14 +64,18 @@
 
 USAGE message:
 
-usage: biosnoop.py [-h] [-Q]
+usage: biosnoop.py [-h] [-Q] [-d DISK] [-P]
 
 Trace block I/O
 
 optional arguments:
-  -h, --help   show this help message and exit
-  -Q, --queue  include OS queued time
+  -h, --help            show this help message and exit
+  -Q, --queue           include OS queued time
+  -d DISK, --disk DISK  trace this disk only
+  -P, --pattern         display block I/O pattern (sequential or random)
 
 examples:
     ./biosnoop           # trace all block I/O
     ./biosnoop -Q        # include OS queued time
+    ./biosnoop -d sdc    # trace sdc only
+    ./biosnoop -P        # display block I/O pattern
diff --git a/tools/biotop.py b/tools/biotop.py
index 3c9c071..2620983 100755
--- a/tools/biotop.py
+++ b/tools/biotop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # biotop  block device (disk) I/O by process.
@@ -14,6 +14,7 @@
 #
 # 06-Feb-2016   Brendan Gregg   Created this.
 # 17-Mar-2022   Rocky Xing      Added PID filter support.
+# 01-Aug-2023   Jerome Marchand Added support for block tracepoints
 
 from __future__ import print_function
 from bcc import BPF
@@ -88,14 +89,35 @@
     u32 io;
 };
 
-BPF_HASH(start, struct request *, struct start_req_t);
-BPF_HASH(whobyreq, struct request *, struct who_t);
+struct tp_args {
+    u64 __unused__;
+    dev_t dev;
+    sector_t sector;
+    unsigned int nr_sector;
+    unsigned int bytes;
+    char rwbs[8];
+    char comm[16];
+    char cmd[];
+};
+
+struct hash_key {
+    dev_t dev;
+    u32 _pad;
+    sector_t sector;
+};
+
+BPF_HASH(start, struct hash_key, struct start_req_t);
+BPF_HASH(whobyreq, struct hash_key, struct who_t);
 BPF_HASH(counts, struct info_t, struct val_t);
 
+static dev_t ddevt(struct gendisk *disk) {
+    return (disk->major  << 20) | disk->first_minor;
+}
+
 // cache PID and comm by-req
-int trace_pid_start(struct pt_regs *ctx, struct request *req)
+static int __trace_pid_start(struct hash_key key)
 {
-    struct who_t who = {};
+    struct who_t who;
     u32 pid;
 
     if (bpf_get_current_comm(&who.name, sizeof(who.name)) == 0) {
@@ -104,30 +126,54 @@
             return 0;
 
         who.pid = pid;
-        whobyreq.update(&req, &who);
+        whobyreq.update(&key, &who);
     }
 
     return 0;
 }
 
+int trace_pid_start(struct pt_regs *ctx, struct request *req)
+{
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .sector = req->__sector
+    };
+
+    return __trace_pid_start(key);
+}
+
+int trace_pid_start_tp(struct tp_args *args)
+{
+    struct hash_key key = {
+        .dev = args->dev,
+        .sector = args->sector
+    };
+
+    return __trace_pid_start(key);
+}
+
 // time block I/O
 int trace_req_start(struct pt_regs *ctx, struct request *req)
 {
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .sector = req->__sector
+    };
     struct start_req_t start_req = {
         .ts = bpf_ktime_get_ns(),
         .data_len = req->__data_len
     };
-    start.update(&req, &start_req);
+    start.update(&key, &start_req);
     return 0;
 }
 
 // output
-int trace_req_completion(struct pt_regs *ctx, struct request *req)
+static int __trace_req_completion(struct hash_key key)
 {
     struct start_req_t *startp;
 
     // fetch timestamp and calculate delta
-    startp = start.lookup(&req);
+    startp = start.lookup(&key);
     if (startp == 0) {
         return 0;    // missed tracing issue
     }
@@ -135,12 +181,12 @@
     struct who_t *whop;
     u32 pid;
 
-    whop = whobyreq.lookup(&req);
+    whop = whobyreq.lookup(&key);
     pid = whop != 0 ? whop->pid : 0;
     if (FILTER_PID) {
-        start.delete(&req);
+        start.delete(&key);
         if (whop != 0) {
-            whobyreq.delete(&req);
+            whobyreq.delete(&key);
         }
         return 0;
     }
@@ -150,8 +196,8 @@
 
     // setup info_t key
     struct info_t info = {};
-    info.major = req->__RQ_DISK__->major;
-    info.minor = req->__RQ_DISK__->first_minor;
+    info.major = key.dev >> 20;
+    info.minor = key.dev & ((1 << 20) - 1);
 /*
  * The following deals with a kernel version change (in mainline 4.7, although
  * it may be backported to earlier kernels) with how block request write flags
@@ -159,13 +205,13 @@
  * kernel version tests like this as much as possible: they inflate the code,
  * test, and maintenance burden.
  */
-#ifdef REQ_WRITE
+/*#ifdef REQ_WRITE
     info.rwflag = !!(req->cmd_flags & REQ_WRITE);
 #elif defined(REQ_OP_SHIFT)
     info.rwflag = !!((req->cmd_flags >> REQ_OP_SHIFT) == REQ_OP_WRITE);
 #else
     info.rwflag = !!((req->cmd_flags & REQ_OP_MASK) == REQ_OP_WRITE);
-#endif
+#endif*/
 
     if (whop == 0) {
         // missed pid who, save stats as pid 0
@@ -183,18 +229,38 @@
         valp->io++;
     }
 
-    start.delete(&req);
-    whobyreq.delete(&req);
+    start.delete(&key);
+    whobyreq.delete(&key);
 
     return 0;
 }
+
+int trace_req_completion(struct pt_regs *ctx, struct request *req)
+{
+    struct hash_key key = {
+        .dev = ddevt(req->__RQ_DISK__),
+        .sector = req->__sector
+    };
+
+    return __trace_req_completion(key);
+}
+
+int trace_req_completion_tp(struct tp_args *args)
+{
+    struct hash_key key = {
+        .dev = args->dev,
+        .sector = args->sector
+    };
+
+    return __trace_req_completion(key);
+}
 """
 
 if args.ebpf:
     print(bpf_text)
     exit()
 
-if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+if BPF.kernel_struct_has_field(b'request', b'rq_disk') == 1:
     bpf_text = bpf_text.replace('__RQ_DISK__', 'rq_disk')
 else:
     bpf_text = bpf_text.replace('__RQ_DISK__', 'q->disk')
@@ -207,15 +273,19 @@
 b = BPF(text=bpf_text)
 if BPF.get_kprobe_functions(b'__blk_account_io_start'):
     b.attach_kprobe(event="__blk_account_io_start", fn_name="trace_pid_start")
-else:
+elif BPF.get_kprobe_functions(b'blk_account_io_start'):
     b.attach_kprobe(event="blk_account_io_start", fn_name="trace_pid_start")
+else:
+    b.attach_tracepoint(tp="block:block_io_start", fn_name="trace_pid_start_tp")
 if BPF.get_kprobe_functions(b'blk_start_request'):
     b.attach_kprobe(event="blk_start_request", fn_name="trace_req_start")
 b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_req_start")
 if BPF.get_kprobe_functions(b'__blk_account_io_done'):
     b.attach_kprobe(event="__blk_account_io_done", fn_name="trace_req_completion")
-else:
+elif BPF.get_kprobe_functions(b'blk_account_io_done'):
     b.attach_kprobe(event="blk_account_io_done", fn_name="trace_req_completion")
+else:
+    b.attach_tracepoint(tp="block:block_io_done", fn_name="trace_req_completion_tp")
 
 print('Tracing... Output every %d secs. Hit Ctrl-C to end' % interval)
 
diff --git a/tools/bitesize.py b/tools/bitesize.py
index 69e3633..fc2a5b8 100755
--- a/tools/bitesize.py
+++ b/tools/bitesize.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # bitehist.py   Block I/O size histogram.
 #               For Linux, uses BCC, eBPF. See .c file.
diff --git a/tools/bpflist.py b/tools/bpflist.py
index 2d9793e..136721c 100755
--- a/tools/bpflist.py
+++ b/tools/bpflist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # bpflist   Display processes currently using BPF programs and maps,
 #           pinned BPF programs and maps, and enabled probes.
diff --git a/tools/btrfsdist.py b/tools/btrfsdist.py
index a9bf6e4..851f142 100755
--- a/tools/btrfsdist.py
+++ b/tools/btrfsdist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # btrfsdist  Summarize btrfs operation latency.
diff --git a/tools/btrfsslower.py b/tools/btrfsslower.py
index 6de02e0..16c4773 100755
--- a/tools/btrfsslower.py
+++ b/tools/btrfsslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # btrfsslower  Trace slow btrfs operations.
@@ -87,10 +87,10 @@
     // XXX: switch some to u32's when supported
     u64 ts_us;
     u64 type;
-    u64 size;
+    u32 size;
     u64 offset;
     u64 delta_us;
-    u64 pid;
+    u32 pid;
     char task[TASK_COMM_LEN];
     char file[DNAME_INLINE_LEN];
 };
@@ -219,9 +219,11 @@
         return 0;
 
     // populate output struct
-    u32 size = PT_REGS_RC(ctx);
-    struct data_t data = {.type = type, .size = size, .delta_us = delta_us,
-        .pid = pid};
+    struct data_t data = {};
+    data.type = type;
+    data.size = PT_REGS_RC(ctx);
+    data.delta_us = delta_us;
+    data.pid = pid;
     data.ts_us = ts / 1000;
     data.offset = valp->offset;
     bpf_get_current_comm(&data.task, sizeof(data.task));
diff --git a/tools/cachestat.py b/tools/cachestat.py
index 633f970..534d387 100755
--- a/tools/cachestat.py
+++ b/tools/cachestat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # cachestat     Count cache kernel function calls.
 #               For Linux, uses BCC, eBPF. See .c file.
@@ -16,6 +16,7 @@
 # 06-Nov-2015   Allan McAleavy
 # 13-Jan-2016   Allan McAleavy  run pep8 against program
 # 02-Feb-2019   Brendan Gregg   Column shuffle, bring back %ratio
+# 15-Feb-2023   Rong Tao        Add writeback_dirty_{folio,page} tracepoints
 
 from __future__ import print_function
 from bcc import BPF
@@ -71,20 +72,43 @@
 bpf_text = """
 #include <uapi/linux/ptrace.h>
 struct key_t {
-    u64 ip;
+    // NF_{APCL,MPA,MBD,APD}
+    u32 nf;
+};
+
+enum {
+    NF_APCL,
+    NF_MPA,
+    NF_MBD,
+    NF_APD,
 };
 
 BPF_HASH(counts, struct key_t);
 
-int do_count(struct pt_regs *ctx) {
+static int __do_count(void *ctx, u32 nf) {
     struct key_t key = {};
     u64 ip;
 
-    key.ip = PT_REGS_IP(ctx);
+    key.nf = nf;
     counts.atomic_increment(key); // update counter
     return 0;
 }
 
+int do_count_apcl(struct pt_regs *ctx) {
+    return __do_count(ctx, NF_APCL);
+}
+int do_count_mpa(struct pt_regs *ctx) {
+    return __do_count(ctx, NF_MPA);
+}
+int do_count_mbd(struct pt_regs *ctx) {
+    return __do_count(ctx, NF_MBD);
+}
+int do_count_apd(struct pt_regs *ctx) {
+    return __do_count(ctx, NF_APD);
+}
+int do_count_apd_tp(void *ctx) {
+    return __do_count(ctx, NF_APD);
+}
 """
 
 if debug or args.ebpf:
@@ -94,18 +118,27 @@
 
 # load BPF program
 b = BPF(text=bpf_text)
-b.attach_kprobe(event="add_to_page_cache_lru", fn_name="do_count")
-b.attach_kprobe(event="mark_page_accessed", fn_name="do_count")
+b.attach_kprobe(event="add_to_page_cache_lru", fn_name="do_count_apcl")
+b.attach_kprobe(event="mark_page_accessed", fn_name="do_count_mpa")
 
 # Function account_page_dirtied() is changed to folio_account_dirtied() in 5.15.
-# FIXME: Both folio_account_dirtied() and account_page_dirtied() are
+# Both folio_account_dirtied() and account_page_dirtied() are
 # static functions and they may be gone during compilation and this may
-# introduce some inaccuracy.
+# introduce some inaccuracy, use tracepoint writeback_dirty_{page,folio},
+# instead when attaching kprobe fails, and report the running
+# error in time.
 if BPF.get_kprobe_functions(b'folio_account_dirtied'):
-    b.attach_kprobe(event="folio_account_dirtied", fn_name="do_count")
+    b.attach_kprobe(event="folio_account_dirtied", fn_name="do_count_apd")
 elif BPF.get_kprobe_functions(b'account_page_dirtied'):
-    b.attach_kprobe(event="account_page_dirtied", fn_name="do_count")
-b.attach_kprobe(event="mark_buffer_dirty", fn_name="do_count")
+    b.attach_kprobe(event="account_page_dirtied", fn_name="do_count_apd")
+elif BPF.tracepoint_exists("writeback", "writeback_dirty_folio"):
+    b.attach_tracepoint(tp="writeback:writeback_dirty_folio", fn_name="do_count_apd_tp")
+elif BPF.tracepoint_exists("writeback", "writeback_dirty_page"):
+    b.attach_tracepoint(tp="writeback:writeback_dirty_page", fn_name="do_count_apd_tp")
+else:
+    raise Exception("Failed to attach kprobe %s or %s or any tracepoint" %
+                    ("folio_account_dirtied", "account_page_dirtied"))
+b.attach_kprobe(event="mark_buffer_dirty", fn_name="do_count_mbd")
 
 # header
 if tstamp:
@@ -130,15 +163,14 @@
 
     counts = b["counts"]
     for k, v in sorted(counts.items(), key=lambda counts: counts[1].value):
-        func = b.ksym(k.ip)
         # partial string matches in case of .isra (necessary?)
-        if func.find(b"mark_page_accessed") == 0:
-            mpa = max(0, v.value)
-        if func.find(b"mark_buffer_dirty") == 0:
-            mbd = max(0, v.value)
-        if func.find(b"add_to_page_cache_lru") == 0:
+        if k.nf == 0: # NF_APCL
             apcl = max(0, v.value)
-        if func.find(b"account_page_dirtied") == 0:
+        if k.nf == 1: # NF_MPA
+            mpa = max(0, v.value)
+        if k.nf == 2: # NF_MBD
+            mbd = max(0, v.value)
+        if k.nf == 3: # NF_APD
             apd = max(0, v.value)
 
     # total = total cache accesses without counting dirties
diff --git a/tools/cachetop.py b/tools/cachetop.py
index d02b72b..e73b52d 100755
--- a/tools/cachetop.py
+++ b/tools/cachetop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # cachetop      Count cache kernel function calls per processes
@@ -12,6 +12,7 @@
 #
 # 13-Jul-2016   Emmanuel Bretelle first version
 # 17-Mar-2022   Rocky Xing        Added PID filter support.
+# 15-Feb-2023   Rong Tao          Add writeback_dirty_{folio,page} tracepoints
 
 from __future__ import absolute_import
 from __future__ import division
@@ -73,7 +74,7 @@
     counts = bpf.get_table("counts")
     stats = defaultdict(lambda: defaultdict(int))
     for k, v in counts.items():
-        stats["%d-%d-%s" % (k.pid, k.uid, k.comm.decode('utf-8', 'replace'))][k.ip] = v.value
+        stats["%d-%d-%s" % (k.pid, k.uid, k.comm.decode('utf-8', 'replace'))][k.nf] = v.value
     stats_list = []
 
     for pid, count in sorted(stats.items(), key=lambda stat: stat[0]):
@@ -89,16 +90,16 @@
         whits = 0
 
         for k, v in count.items():
-            if re.match(b'mark_page_accessed', bpf.ksym(k)) is not None:
-                mpa = max(0, v)
-
-            if re.match(b'mark_buffer_dirty', bpf.ksym(k)) is not None:
-                mbd = max(0, v)
-
-            if re.match(b'add_to_page_cache_lru', bpf.ksym(k)) is not None:
+            if k == 0: # NF_APCL
                 apcl = max(0, v)
 
-            if re.match(b'account_page_dirtied', bpf.ksym(k)) is not None:
+            if k == 1: # NF_MPA
+                mpa = max(0, v)
+
+            if k == 2: # NF_MBD
+                mbd = max(0, v)
+
+            if k == 3: # NF_APD
                 apd = max(0, v)
 
             # access = total cache access incl. reads(mpa) and writes(mbd)
@@ -144,15 +145,22 @@
 
     #include <uapi/linux/ptrace.h>
     struct key_t {
-        u64 ip;
+        // NF_{APCL,MPA,MBD,APD}
+        u64 nf;
         u32 pid;
         u32 uid;
         char comm[16];
     };
+    enum {
+        NF_APCL,
+        NF_MPA,
+        NF_MBD,
+        NF_APD,
+    };
 
     BPF_HASH(counts, struct key_t);
 
-    int do_count(struct pt_regs *ctx) {
+    static int __do_count(void *ctx, u64 nf) {
         u32 pid = bpf_get_current_pid_tgid() >> 32;
         if (FILTER_PID)
             return 0;
@@ -160,7 +168,7 @@
         struct key_t key = {};
         u32 uid = bpf_get_current_uid_gid();
 
-        key.ip = PT_REGS_IP(ctx);
+        key.nf = nf;
         key.pid = pid;
         key.uid = uid;
         bpf_get_current_comm(&(key.comm), 16);
@@ -168,6 +176,21 @@
         counts.increment(key);
         return 0;
     }
+    int do_count_apcl(struct pt_regs *ctx) {
+        return __do_count(ctx, NF_APCL);
+    }
+    int do_count_mpa(struct pt_regs *ctx) {
+        return __do_count(ctx, NF_MPA);
+    }
+    int do_count_mbd(struct pt_regs *ctx) {
+        return __do_count(ctx, NF_MBD);
+    }
+    int do_count_apd(struct pt_regs *ctx) {
+        return __do_count(ctx, NF_APD);
+    }
+    int do_count_apd_tp(void *ctx) {
+        return __do_count(ctx, NF_APD);
+    }
 
     """
 
@@ -177,15 +200,23 @@
         bpf_text = bpf_text.replace('FILTER_PID', '0')
 
     b = BPF(text=bpf_text)
-    b.attach_kprobe(event="add_to_page_cache_lru", fn_name="do_count")
-    b.attach_kprobe(event="mark_page_accessed", fn_name="do_count")
-    b.attach_kprobe(event="mark_buffer_dirty", fn_name="do_count")
+    b.attach_kprobe(event="add_to_page_cache_lru", fn_name="do_count_apcl")
+    b.attach_kprobe(event="mark_page_accessed", fn_name="do_count_mpa")
+    b.attach_kprobe(event="mark_buffer_dirty", fn_name="do_count_mbd")
 
     # Function account_page_dirtied() is changed to folio_account_dirtied() in 5.15.
+    # Introduce tracepoint writeback_dirty_{page,folio}
     if BPF.get_kprobe_functions(b'folio_account_dirtied'):
-        b.attach_kprobe(event="folio_account_dirtied", fn_name="do_count")
+        b.attach_kprobe(event="folio_account_dirtied", fn_name="do_count_apd")
     elif BPF.get_kprobe_functions(b'account_page_dirtied'):
-        b.attach_kprobe(event="account_page_dirtied", fn_name="do_count")
+        b.attach_kprobe(event="account_page_dirtied", fn_name="do_count_apd")
+    elif BPF.tracepoint_exists("writeback", "writeback_dirty_folio"):
+        b.attach_tracepoint(tp="writeback:writeback_dirty_folio", fn_name="do_count_apd_tp")
+    elif BPF.tracepoint_exists("writeback", "writeback_dirty_page"):
+        b.attach_tracepoint(tp="writeback:writeback_dirty_page", fn_name="do_count_apd_tp")
+    else:
+        raise Exception("Failed to attach kprobe %s or %s and any tracepoint" %
+                        ("folio_account_dirtied", "account_page_dirtied"))
 
     exiting = 0
 
diff --git a/tools/capable.py b/tools/capable.py
index acaa43c..db78de3 100755
--- a/tools/capable.py
+++ b/tools/capable.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # capable   Trace security capabilitiy checks (cap_capable()).
diff --git a/tools/compactsnoop.py b/tools/compactsnoop.py
index 9daaf48..2b395de 100755
--- a/tools/compactsnoop.py
+++ b/tools/compactsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # compactsnoop  Trace compact zone and print details including issuing PID.
@@ -124,7 +124,7 @@
 {
     struct pglist_data *zone_pgdat = NULL;
     bpf_probe_read_kernel(&zone_pgdat, sizeof(zone_pgdat), &zone->zone_pgdat);
-    return zone - zone_pgdat->node_zones;
+    return ((u64)zone - (u64)zone_pgdat->node_zones)/sizeof(struct zone);
 }
 
 #ifdef EXTNEDED_FIELDS
@@ -237,11 +237,9 @@
     return 0;
 }
 
-RAW_TRACEPOINT_PROBE(mm_compaction_begin)
+TRACEPOINT_PROBE(compaction, mm_compaction_begin)
 {
-    // TP_PROTO(unsigned long zone_start, unsigned long migrate_pfn,
-    //          unsigned long free_pfn, unsigned long zone_end, bool sync)
-    bool sync = (bool)ctx->args[4];
+    bool sync = args->sync;
 
     u64 id = bpf_get_current_pid_tgid();
     struct val_t *valp = start.lookup(&id);
@@ -255,12 +253,9 @@
     return 0;
 }
 
-RAW_TRACEPOINT_PROBE(mm_compaction_end)
+TRACEPOINT_PROBE(compaction, mm_compaction_end)
 {
-    // TP_PROTO(unsigned long zone_start, unsigned long migrate_pfn,
-    //          unsigned long free_pfn, unsigned long zone_end, bool sync,
-    //          int status)
-    submit_event(ctx, ctx->args[5]);
+    submit_event(args, args->status);
     return 0;
 }
 """
diff --git a/tools/cpudist.py b/tools/cpudist.py
index 3f58aa1..17f2101 100755
--- a/tools/cpudist.py
+++ b/tools/cpudist.py
@@ -1,9 +1,9 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # cpudist   Summarize on- and off-CPU time per task as a histogram.
 #
-# USAGE: cpudist [-h] [-O] [-T] [-m] [-P] [-L] [-p PID] [-I] [interval] [count]
+# USAGE: cpudist [-h] [-O] [-T] [-m] [-P] [-L] [-p PID] [-I] [-e] [interval] [count]
 #
 # This measures the time a task spends on or off the CPU, and shows this time
 # as a histogram, optionally per-process.
@@ -14,6 +14,7 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 27-Mar-2022   Rocky Xing      Changed to exclude CPU idle time by default.
+# 25-Jul-2022   Rocky Xing      Added extension summary support.
 
 from __future__ import print_function
 from bcc import BPF
@@ -28,9 +29,10 @@
     cpudist -P           # show each PID separately
     cpudist -p 185       # trace PID 185 only
     cpudist -I           # include CPU idle time
+    cpudist -e           # show extension summary (average/total/count)
 """
 parser = argparse.ArgumentParser(
-    description="Summarize on-CPU time per task as a histogram.",
+    description="Summarize on- and off-CPU time per task as a histogram.",
     formatter_class=argparse.RawDescriptionHelpFormatter,
     epilog=examples)
 parser.add_argument("-O", "--offcpu", action="store_true",
@@ -47,6 +49,8 @@
     help="trace this PID only")
 parser.add_argument("-I", "--include-idle", action="store_true",
     help="include CPU idle time")
+parser.add_argument("-e", "--extension", action="store_true",
+    help="show extension summary (average/total/count)")
 parser.add_argument("interval", nargs="?", default=99999999,
     help="output interval, in seconds")
 parser.add_argument("count", nargs="?", default=99999999,
@@ -57,7 +61,8 @@
 countdown = int(args.count)
 debug = 0
 
-bpf_text = """#include <uapi/linux/ptrace.h>
+bpf_text = """
+#include <uapi/linux/ptrace.h>
 #include <linux/sched.h>
 """
 
@@ -75,6 +80,10 @@
     u64 slot;
 } pid_key_t;
 
+typedef struct ext_val {
+    u64 total;
+    u64 count;
+} ext_val_t;
 
 BPF_HASH(start, entry_key_t, u64, MAX_PID);
 STORAGE
@@ -87,7 +96,7 @@
     if (IDLE_FILTER)
         return;
 
-    entry_key_t entry_key = { .pid = pid, .cpu = cpu };
+    entry_key_t entry_key = { .pid = pid, .cpu = (pid == 0 ? cpu : 0xFFFFFFFF) };
     start.update(&entry_key, &ts);
 }
 
@@ -99,7 +108,7 @@
     if (IDLE_FILTER)
         return;
 
-    entry_key_t entry_key = { .pid = pid, .cpu = cpu };
+    entry_key_t entry_key = { .pid = pid, .cpu = (pid == 0 ? cpu : 0xFFFFFFFF) };
     u64 *tsp = start.lookup(&entry_key);
     if (tsp == 0)
         return;
@@ -157,22 +166,40 @@
 else:
     bpf_text = bpf_text.replace('FACTOR', 'delta /= 1000;')
     label = "usecs"
+
+storage_str = ""
+store_str = ""
+
 if args.pids or args.tids:
     section = "pid"
     pid = "tgid"
     if args.tids:
         pid = "pid"
         section = "tid"
-    bpf_text = bpf_text.replace('STORAGE',
-        'BPF_HISTOGRAM(dist, pid_key_t, MAX_PID);')
-    bpf_text = bpf_text.replace('STORE',
-        'pid_key_t key = {.id = ' + pid + ', .slot = bpf_log2l(delta)}; ' +
-        'dist.increment(key);')
+    storage_str += "BPF_HISTOGRAM(dist, pid_key_t, MAX_PID);"
+    store_str += """
+    pid_key_t key = {.id = """ + pid + """, .slot = bpf_log2l(delta)};
+    dist.increment(key);
+    """
 else:
     section = ""
-    bpf_text = bpf_text.replace('STORAGE', 'BPF_HISTOGRAM(dist);')
-    bpf_text = bpf_text.replace('STORE',
-        'dist.atomic_increment(bpf_log2l(delta));')
+    storage_str += "BPF_HISTOGRAM(dist);"
+    store_str += "dist.atomic_increment(bpf_log2l(delta));"
+
+if args.extension:
+    storage_str += "BPF_ARRAY(extension, ext_val_t, 1);"
+    store_str += """
+    u32 index = 0;
+    ext_val_t *ext_val = extension.lookup(&index);
+    if (ext_val) {
+        lock_xadd(&ext_val->total, delta);
+        lock_xadd(&ext_val->count, 1);
+    }
+    """
+
+bpf_text = bpf_text.replace("STORAGE", storage_str)
+bpf_text = bpf_text.replace("STORE", store_str)
+
 if debug or args.ebpf:
     print(bpf_text)
     if args.ebpf:
@@ -189,6 +216,8 @@
 
 exiting = 0 if args.interval else 1
 dist = b.get_table("dist")
+if args.extension:
+    extension = b.get_table("extension")
 while (1):
     try:
         sleep(int(args.interval))
@@ -207,6 +236,15 @@
             return str(pid)
 
     dist.print_log2_hist(label, section, section_print_fn=pid_to_comm)
+
+    if args.extension:
+        total = extension[0].total
+        count = extension[0].count
+        if count > 0:
+            print("\navg = %ld %s, total: %ld %s, count: %ld\n" %
+                (total / count, label, total, label, count))
+        extension.clear()
+
     dist.clear()
 
     countdown -= 1
diff --git a/tools/cpudist_example.txt b/tools/cpudist_example.txt
index 43be7a0..d7ef69a 100644
--- a/tools/cpudist_example.txt
+++ b/tools/cpudist_example.txt
@@ -282,9 +282,10 @@
 
 # ./cpudist.py -h
 
-usage: cpudist.py [-h] [-O] [-T] [-m] [-P] [-L] [-p PID] [-I] [interval] [count]
+usage: cpudist.py [-h] [-O] [-T] [-m] [-P] [-L] [-p PID] [-I] [-e]
+                  [interval] [count]
 
-Summarize on-CPU time per task as a histogram.
+Summarize on- and off-CPU time per task as a histogram.
 
 positional arguments:
   interval            output interval, in seconds
@@ -299,6 +300,7 @@
   -L, --tids          print a histogram per thread ID
   -p PID, --pid PID   trace this PID only
   -I, --include-idle  include CPU idle time
+  -e, --extension     show extension summary (average/total/count)
 
 examples:
     cpudist              # summarize on-CPU time as a histogram
@@ -308,4 +310,5 @@
     cpudist -P           # show each PID separately
     cpudist -p 185       # trace PID 185 only
     cpudist -I           # include CPU idle time
+    cpudist -e           # show extension summary (average/total/count)
 
diff --git a/tools/cpuunclaimed.py b/tools/cpuunclaimed.py
index dc0f325..03f9df1 100755
--- a/tools/cpuunclaimed.py
+++ b/tools/cpuunclaimed.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # cpuunclaimed   Sample CPU run queues and calculate unclaimed idle CPU.
@@ -185,9 +185,12 @@
 
 // Declare enough of cfs_rq to find nr_running, since we can't #import the
 // header. This will need maintenance. It is from kernel/sched/sched.h:
+// The runnable_weight field is removed from Linux 5.7.0
 struct cfs_rq_partial {
     struct load_weight load;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 7, 0)
     RUNNABLE_WEIGHT_FIELD
+#endif
     unsigned int nr_running, h_nr_running;
 };
 
@@ -216,7 +219,10 @@
 }
 """
 
-if check_runnable_weight_field():
+# If target has BTF enabled, use BTF to check runnable_weight field exists in
+# cfs_rq first, otherwise fallback to use check_runnable_weight_field().
+if BPF.kernel_struct_has_field(b'cfs_rq', b'runnable_weight') == 1 \
+        or check_runnable_weight_field():
     bpf_text = bpf_text.replace('RUNNABLE_WEIGHT_FIELD', 'unsigned long runnable_weight;')
 else:
     bpf_text = bpf_text.replace('RUNNABLE_WEIGHT_FIELD', '')
diff --git a/tools/criticalstat.py b/tools/criticalstat.py
index 6d15b62..936e099 100755
--- a/tools/criticalstat.py
+++ b/tools/criticalstat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # criticalstat  Trace long critical sections (IRQs or preemption disabled)
diff --git a/tools/dbslower.py b/tools/dbslower.py
index 1d45917..84b435ed 100755
--- a/tools/dbslower.py
+++ b/tools/dbslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # dbslower      Trace MySQL and PostgreSQL queries slower than a threshold.
 #
@@ -100,7 +100,7 @@
 };
 
 struct data_t {
-    u64 pid;
+    u32 pid;
     u64 timestamp;
     u64 duration;
     char query[256];
diff --git a/tools/dbstat.py b/tools/dbstat.py
index 9e36e63..2f5fb6a 100755
--- a/tools/dbstat.py
+++ b/tools/dbstat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # dbstat        Display a histogram of MySQL and PostgreSQL query latencies.
 #
diff --git a/tools/dcsnoop.py b/tools/dcsnoop.py
index 74a3914..615ff1d 100755
--- a/tools/dcsnoop.py
+++ b/tools/dcsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # dcsnoop   Trace directory entry cache (dcache) lookups.
diff --git a/tools/dcstat.py b/tools/dcstat.py
index 6237628..48cb2fd 100755
--- a/tools/dcstat.py
+++ b/tools/dcstat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # dcstat   Directory entry cache (dcache) stats.
diff --git a/tools/deadlock.c b/tools/deadlock.c
index 006dc12..6ae405b 100644
--- a/tools/deadlock.c
+++ b/tools/deadlock.c
@@ -60,7 +60,7 @@
 BPF_HASH(thread_to_parent, u32, struct thread_created_leaf_t);
 
 // Stack traces when threads are created and when mutexes are locked/unlocked.
-BPF_STACK_TRACE(stack_traces, 655360);
+BPF_STACK_TRACE(stack_traces, MAX_TRACES);
 
 // The first argument to the user space function we are tracing
 // is a pointer to the mutex M held by thread T.
diff --git a/tools/deadlock.py b/tools/deadlock.py
index bc66677..f7eb4ce 100755
--- a/tools/deadlock.py
+++ b/tools/deadlock.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # deadlock  Detects potential deadlocks (lock order inversions)
 #           on a running process. For Linux, uses BCC, eBPF.
@@ -467,6 +467,13 @@
         help='Specifies the maximum number of edge cases that can be recorded. '
              'default 65536. Note. 88 bytes per edge case.'
     )
+    parser.add_argument(
+        '-s', '--stacktraces', type=int, default=65536,
+        help='Specifies the maximum number of stack traces that can be recorded. '
+             'This number is rounded up to the next power of two.'
+             'default 65536. Note. 1 kbytes vmalloced per stack trace.'
+    )
+
     args = parser.parse_args()
     if not args.binary:
         try:
@@ -479,6 +486,7 @@
         text = f.read()
     text = text.replace('MAX_THREADS', str(args.threads));
     text = text.replace('MAX_EDGES', str(args.edges));
+    text = text.replace('MAX_TRACES', str(args.stacktraces));
     bpf = BPF(text=text)
 
     # Trace where threads are created
diff --git a/tools/dirtop.py b/tools/dirtop.py
index ec6b077..0ce4792 100755
--- a/tools/dirtop.py
+++ b/tools/dirtop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # dirtop  file reads and writes by directory.
diff --git a/tools/drsnoop.py b/tools/drsnoop.py
index e0344d1..e59043e 100755
--- a/tools/drsnoop.py
+++ b/tools/drsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # drsnoop  Trace direct reclaim and print details including issuing PID.
diff --git a/tools/execsnoop.py b/tools/execsnoop.py
index ea8f40b..b389e76 100755
--- a/tools/execsnoop.py
+++ b/tools/execsnoop.py
@@ -1,11 +1,12 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # execsnoop Trace new processes via exec() syscalls.
 #           For Linux, uses BCC, eBPF. Embedded C.
 #
-# USAGE: execsnoop [-h] [-T] [-t] [-x] [-q] [-n NAME] [-l LINE]
-#                  [--max-args MAX_ARGS]
+# USAGE: execsnoop [-h] [-T] [-t] [-x] [--cgroupmap CGROUPMAP]
+#                  [--mntnsmap MNTNSMAP] [-u USER] [-q] [-n NAME] [-l LINE]
+#                  [-U] [--max-args MAX_ARGS] [-P PPID]
 #
 # This currently will print up to a maximum of 19 arguments, plus the process
 # name, so 20 fields in total (MAXARG).
@@ -16,6 +17,7 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 07-Feb-2016   Brendan Gregg   Created this.
+# 11-Aug-2022   Rocky Xing      Added PPID filter support.
 
 from __future__ import print_function
 from bcc import BPF
@@ -48,16 +50,17 @@
 
 # arguments
 examples = """examples:
-    ./execsnoop           # trace all exec() syscalls
-    ./execsnoop -x        # include failed exec()s
-    ./execsnoop -T        # include time (HH:MM:SS)
-    ./execsnoop -U        # include UID
-    ./execsnoop -u 1000   # only trace UID 1000
-    ./execsnoop -u user   # get user UID and trace only them
-    ./execsnoop -t        # include timestamps
-    ./execsnoop -q        # add "quotemarks" around arguments
-    ./execsnoop -n main   # only print command lines containing "main"
-    ./execsnoop -l tpkg   # only print command where arguments contains "tpkg"
+    ./execsnoop                      # trace all exec() syscalls
+    ./execsnoop -x                   # include failed exec()s
+    ./execsnoop -T                   # include time (HH:MM:SS)
+    ./execsnoop -P 181               # only trace new processes whose parent PID is 181
+    ./execsnoop -U                   # include UID
+    ./execsnoop -u 1000              # only trace UID 1000
+    ./execsnoop -u user              # get user UID and trace only them
+    ./execsnoop -t                   # include timestamps
+    ./execsnoop -q                   # add "quotemarks" around arguments
+    ./execsnoop -n main              # only print command lines containing "main"
+    ./execsnoop -l tpkg              # only print command where arguments contains "tpkg"
     ./execsnoop --cgroupmap mappath  # only trace cgroups in this BPF map
     ./execsnoop --mntnsmap mappath   # only trace mount namespaces in the map
 """
@@ -90,6 +93,8 @@
     help="print UID column")
 parser.add_argument("--max-args", default="20",
     help="maximum number of arguments parsed and displayed, defaults to 20")
+parser.add_argument("-P", "--ppid",
+    help="trace this parent PID only")
 parser.add_argument("--ebpf", action="store_true",
     help=argparse.SUPPRESS)
 args = parser.parse_args()
@@ -162,6 +167,8 @@
     // We use the get_ppid function as a fallback in those cases. (#1883)
     data.ppid = task->real_parent->tgid;
 
+    PPID_FILTER
+
     bpf_get_current_comm(&data.comm, sizeof(data.comm));
     data.type = EVENT_ARG;
 
@@ -202,6 +209,8 @@
     // We use the get_ppid function as a fallback in those cases. (#1883)
     data.ppid = task->real_parent->tgid;
 
+    PPID_FILTER
+
     bpf_get_current_comm(&data.comm, sizeof(data.comm));
     data.type = EVENT_RET;
     data.retval = PT_REGS_RC(ctx);
@@ -218,6 +227,13 @@
         'if (uid != %s) { return 0; }' % args.uid)
 else:
     bpf_text = bpf_text.replace('UID_FILTER', '')
+
+if args.ppid:
+    bpf_text = bpf_text.replace('PPID_FILTER',
+        'if (data.ppid != %s) { return 0; }' % args.ppid)
+else:
+    bpf_text = bpf_text.replace('PPID_FILTER', '')
+
 bpf_text = filter_by_containers(args) + bpf_text
 if args.ebpf:
     print(bpf_text)
diff --git a/tools/execsnoop_example.txt b/tools/execsnoop_example.txt
index 8cdfe0d..e7e0ae2 100644
--- a/tools/execsnoop_example.txt
+++ b/tools/execsnoop_example.txt
@@ -109,8 +109,9 @@
 USAGE message:
 
 # ./execsnoop -h
-usage: execsnoop.py [-h] [-T] [-t] [-x] [--cgroupmap CGROUPMAP] [-u USER] [-q]
-                    [-n NAME] [-l LINE] [-U] [--max-args MAX_ARGS]
+usage: execsnoop.py [-h] [-T] [-t] [-x] [--cgroupmap CGROUPMAP]
+                    [--mntnsmap MNTNSMAP] [-u USER] [-q] [-n NAME] [-l LINE]
+                    [-U] [--max-args MAX_ARGS] [-P PPID]
 
 Trace exec() syscalls
 
@@ -131,17 +132,19 @@
   -U, --print-uid       print UID column
   --max-args MAX_ARGS   maximum number of arguments parsed and displayed,
                         defaults to 20
+  -P PPID, --ppid PPID  trace this parent PID only
 
 examples:
-    ./execsnoop           # trace all exec() syscalls
-    ./execsnoop -x        # include failed exec()s
-    ./execsnoop -T        # include time (HH:MM:SS)
-    ./execsnoop -U        # include UID
-    ./execsnoop -u 1000   # only trace UID 1000
-    ./execsnoop -u root   # get root UID and trace only this
-    ./execsnoop -t        # include timestamps
-    ./execsnoop -q        # add "quotemarks" around arguments
-    ./execsnoop -n main   # only print command lines containing "main"
-    ./execsnoop -l tpkg   # only print command where arguments contains "tpkg"
+    ./execsnoop                      # trace all exec() syscalls
+    ./execsnoop -x                   # include failed exec()s
+    ./execsnoop -T                   # include time (HH:MM:SS)
+    ./execsnoop -P 181               # only trace new processes whose parent PID is 181
+    ./execsnoop -U                   # include UID
+    ./execsnoop -u 1000              # only trace UID 1000
+    ./execsnoop -u user              # get user UID and trace only them
+    ./execsnoop -t                   # include timestamps
+    ./execsnoop -q                   # add "quotemarks" around arguments
+    ./execsnoop -n main              # only print command lines containing "main"
+    ./execsnoop -l tpkg              # only print command where arguments contains "tpkg"
     ./execsnoop --cgroupmap mappath  # only trace cgroups in this BPF map
     ./execsnoop --mntnsmap mappath   # only trace mount namespaces in the map
diff --git a/tools/exitsnoop.py b/tools/exitsnoop.py
index db0d400..6ca5c5e 100755
--- a/tools/exitsnoop.py
+++ b/tools/exitsnoop.py
@@ -1,9 +1,8 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 from __future__ import print_function
 
 import argparse
-import ctypes as ct
 import os
 import platform
 import re
@@ -78,28 +77,11 @@
     SIGNUM_TO_SIGNAME = dict((v, re.sub("^SIG", "", k))
         for k,v in signal.__dict__.items() if re.match("^SIG[A-Z]+$", k))
 
-
-class Data(ct.Structure):
-    """Event data matching struct data_t in _embedded_c()."""
-    _TASK_COMM_LEN = 16      # linux/sched.h
-    _pack_ = 1
-    _fields_ = [
-        ("start_time", ct.c_ulonglong), # task->start_time, see --timespec arg
-        ("exit_time", ct.c_ulonglong),  # bpf_ktime_get_ns()
-        ("pid", ct.c_uint), # task->tgid, thread group id == sys_getpid()
-        ("tid", ct.c_uint), # task->pid, thread id == sys_gettid()
-        ("ppid", ct.c_uint),# task->parent->tgid, notified of exit
-        ("exit_code", ct.c_int),
-        ("sig_info", ct.c_uint),
-        ("task", ct.c_char * _TASK_COMM_LEN)
-    ]
-
 def _embedded_c(args):
     """Generate C program for sched_process_exit tracepoint in kernel/exit.c."""
     c = """
     EBPF_COMMENT
     #include <linux/sched.h>
-    BPF_STATIC_ASSERT_DEF
 
     struct data_t {
         u64 start_time;
@@ -110,9 +92,8 @@
         int exit_code;
         u32 sig_info;
         char task[TASK_COMM_LEN];
-    } __attribute__((packed));
+    };
 
-    BPF_STATIC_ASSERT(sizeof(struct data_t) == CTYPES_SIZEOF_DATA);
     BPF_PERF_OUTPUT(events);
 
     TRACEPOINT_PROBE(sched, sched_process_exit)
@@ -120,28 +101,21 @@
         struct task_struct *task = (typeof(task))bpf_get_current_task();
         if (FILTER_PID || FILTER_EXIT_CODE) { return 0; }
 
-        struct data_t data = {
-            .start_time = PROCESS_START_TIME_NS,
-            .exit_time = bpf_ktime_get_ns(),
-            .pid = task->tgid,
-            .tid = task->pid,
-            .ppid = task->parent->tgid,
-            .exit_code = task->exit_code >> 8,
-            .sig_info = task->exit_code & 0xFF,
-        };
+        struct data_t data = {};
+
+        data.start_time = PROCESS_START_TIME_NS,
+        data.exit_time = bpf_ktime_get_ns(),
+        data.pid = task->tgid,
+        data.tid = task->pid,
+        data.ppid = task->real_parent->tgid,
+        data.exit_code = task->exit_code >> 8,
+        data.sig_info = task->exit_code & 0xFF,
         bpf_get_current_comm(&data.task, sizeof(data.task));
 
         events.perf_submit(args, &data, sizeof(data));
         return 0;
     }
     """
-    # TODO: this macro belongs in bcc/src/cc/export/helpers.h
-    bpf_static_assert_def = r"""
-    #ifndef BPF_STATIC_ASSERT
-    #define BPF_STATIC_ASSERT(condition) __attribute__((unused)) \
-    extern int bpf_static_assert[(condition) ? 1 : -1]
-    #endif
-    """
 
     if Global.args.pid:
         if Global.args.per_thread:
@@ -153,8 +127,6 @@
 
     code_substitutions = [
         ('EBPF_COMMENT', '' if not Global.args.ebpf else _ebpf_comment()),
-        ("BPF_STATIC_ASSERT_DEF", bpf_static_assert_def),
-        ("CTYPES_SIZEOF_DATA", str(ct.sizeof(Data))),
         ('FILTER_PID', filter_pid),
         ('FILTER_EXIT_CODE', '0' if not Global.args.failed else 'task->exit_code == 0'),
         ('PROCESS_START_TIME_NS', 'task->start_time' if not Global.args.timespec else
@@ -179,12 +151,15 @@
         print("%-13s" % title, end="")
     if Global.args.label is not None:
         print("%-6s" % "LABEL", end="")
-    print("%-16s %-6s %-6s %-6s %-7s %-10s" %
+    print("%-16s %-7s %-7s %-7s %-7s %-10s" %
               ("PCOMM", "PID", "PPID", "TID", "AGE(s)", "EXIT_CODE"))
 
+buffer = None
+
 def _print_event(cpu, data, size): # callback
     """Print the exit event."""
-    e = ct.cast(data, ct.POINTER(Data)).contents
+    global buffer
+    e = buffer["events"].event(data)
     if Global.args.timestamp:
         now = datetime.utcnow() if Global.args.utc else datetime.now()
         print("%-13s" % (now.strftime("%H:%M:%S.%f")[:-3]), end="")
@@ -192,7 +167,7 @@
         label = Global.args.label if len(Global.args.label) else 'exit'
         print("%-6s" % label, end="")
     age = (e.exit_time - e.start_time) / 1e9
-    print("%-16s %-6d %-6d %-6d %-7.2f " %
+    print("%-16s %-7d %-7d %-7d %-7.2f " %
               (e.task.decode(), e.pid, e.ppid, e.tid, age), end="")
     if e.sig_info == 0:
         print("0" if e.exit_code == 0 else "code %d" % e.exit_code)
@@ -271,6 +246,7 @@
 # Script: invoked as a script
 # =============================
 def main():
+    global buffer
     try:
         rc, buffer = initialize()
         if rc:
diff --git a/tools/ext4dist.py b/tools/ext4dist.py
index 0aab1ba..70706d3 100755
--- a/tools/ext4dist.py
+++ b/tools/ext4dist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # ext4dist  Summarize ext4 operation latency.
diff --git a/tools/ext4slower.py b/tools/ext4slower.py
index 5cd75ab..4faf4b5 100755
--- a/tools/ext4slower.py
+++ b/tools/ext4slower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # ext4slower  Trace slow ext4 operations.
@@ -82,10 +82,10 @@
     // XXX: switch some to u32's when supported
     u64 ts_us;
     u64 type;
-    u64 size;
+    u32 size;
     u64 offset;
     u64 delta_us;
-    u64 pid;
+    u32 pid;
     char task[TASK_COMM_LEN];
     char file[DNAME_INLINE_LEN];
 };
@@ -212,9 +212,11 @@
         return 0;
 
     // populate output struct
-    u32 size = PT_REGS_RC(ctx);
-    struct data_t data = {.type = type, .size = size, .delta_us = delta_us,
-        .pid = pid};
+    struct data_t data = {};
+    data.type = type;
+    data.size = PT_REGS_RC(ctx);
+    data.delta_us = delta_us;
+    data.pid = pid;
     data.ts_us = ts / 1000;
     data.offset = valp->offset;
     bpf_get_current_comm(&data.task, sizeof(data.task));
diff --git a/tools/filegone.py b/tools/filegone.py
new file mode 100755
index 0000000..dee3f64
--- /dev/null
+++ b/tools/filegone.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python
+# @lint-avoid-python-3-compatibility-imports
+#
+# filegone    Trace why file gone (deleted or renamed).
+#             For Linux, uses BCC, eBPF. Embedded C.
+#
+# USAGE: filegone [-h] [-p PID]
+#
+# Licensed under the Apache License, Version 2.0 (the "License")
+#
+# 08-Nov-2022 Curu. modified from filelife
+# 19-Nov-2022 Rong Tao Check btf struct field instead of KERNEL_VERSION macro.
+
+from __future__ import print_function
+from bcc import BPF
+import argparse
+from time import strftime
+
+# arguments
+examples = """examples:
+    ./filegone           # trace all file gone events
+    ./filegone -p 181    # only trace PID 181
+"""
+parser = argparse.ArgumentParser(
+    description="Trace why file gone (deleted or renamed)",
+    formatter_class=argparse.RawDescriptionHelpFormatter,
+    epilog=examples)
+parser.add_argument("-p", "--pid",
+    help="trace this PID only")
+parser.add_argument("--ebpf", action="store_true",
+    help=argparse.SUPPRESS)
+args = parser.parse_args()
+debug = 0
+
+# define BPF program
+bpf_text = """
+#include <uapi/linux/ptrace.h>
+#include <linux/fs.h>
+#include <linux/sched.h>
+
+struct data_t {
+    u32 pid;
+    u8 action;
+    char comm[TASK_COMM_LEN];
+    char fname[DNAME_INLINE_LEN];
+    char fname2[DNAME_INLINE_LEN];
+};
+
+BPF_PERF_OUTPUT(events);
+
+// trace file deletion and output details
+TRACE_VFS_UNLINK_FUNC
+{
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+    FILTER
+
+    struct data_t data = {};
+    struct qstr d_name = dentry->d_name;
+    if (d_name.len == 0)
+        return 0;
+
+    bpf_get_current_comm(&data.comm, sizeof(data.comm));
+    data.pid = pid;
+    data.action = 'D';
+    bpf_probe_read(&data.fname, sizeof(data.fname), d_name.name);
+
+    events.perf_submit(ctx, &data, sizeof(data));
+
+    return 0;
+}
+
+// trace file rename
+TRACE_VFS_RENAME_FUNC
+
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+    FILTER
+
+    struct data_t data = {};
+    struct qstr s_name = old_dentry->d_name;
+    struct qstr d_name = new_dentry->d_name;
+    if (s_name.len == 0 || d_name.len == 0)
+        return 0;
+
+    bpf_get_current_comm(&data.comm, sizeof(data.comm));
+    data.pid = pid;
+    data.action = 'R';
+    bpf_probe_read(&data.fname, sizeof(data.fname), s_name.name);
+    bpf_probe_read(&data.fname2, sizeof(data.fname), d_name.name);
+    events.perf_submit(ctx, &data, sizeof(data));
+
+    return 0;
+}
+"""
+
+bpf_vfs_rename_text_old="""
+int trace_rename(struct pt_regs *ctx, struct inode *old_dir, struct dentry *old_dentry,
+struct inode *new_dir, struct dentry *new_dentry)
+{
+"""
+bpf_vfs_rename_text_new="""
+int trace_rename(struct pt_regs *ctx, struct renamedata *rd)
+{
+    struct dentry *old_dentry = rd->old_dentry;
+    struct dentry *new_dentry = rd->new_dentry;
+"""
+
+bpf_vfs_unlink_text_1="""
+int trace_unlink(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+"""
+bpf_vfs_unlink_text_2="""
+int trace_unlink(struct pt_regs *ctx, struct user_namespace *ns, struct inode *dir, struct dentry *dentry)
+"""
+bpf_vfs_unlink_text_3="""
+int trace_unlink(struct pt_regs *ctx, struct mnt_idmap *idmap, struct inode *dir, struct dentry *dentry)
+"""
+
+def action2str(action):
+    if chr(action) == 'D':
+        action_str = "DELETE"
+    else:
+        action_str = "RENAME"
+    return action_str
+
+if args.pid:
+    bpf_text = bpf_text.replace('FILTER',
+        'if (pid != %s) { return 0; }' % args.pid)
+else:
+    bpf_text = bpf_text.replace('FILTER', '')
+
+if debug or args.ebpf:
+    print(bpf_text)
+    if args.ebpf:
+        exit()
+
+# check 'struct renamedata' exist or not
+if BPF.kernel_struct_has_field(b'renamedata', b'new_mnt_idmap') == 1:
+    bpf_text = bpf_text.replace('TRACE_VFS_RENAME_FUNC', bpf_vfs_rename_text_new)
+    bpf_text = bpf_text.replace('TRACE_VFS_UNLINK_FUNC', bpf_vfs_unlink_text_3)
+elif BPF.kernel_struct_has_field("renamedata", "old_mnt_userns") == 1:
+    bpf_text = bpf_text.replace('TRACE_VFS_RENAME_FUNC', bpf_vfs_rename_text_new)
+    bpf_text = bpf_text.replace('TRACE_VFS_UNLINK_FUNC', bpf_vfs_unlink_text_2)
+else:
+    bpf_text = bpf_text.replace('TRACE_VFS_RENAME_FUNC', bpf_vfs_rename_text_old)
+    bpf_text = bpf_text.replace('TRACE_VFS_UNLINK_FUNC', bpf_vfs_unlink_text_1)
+
+# initialize BPF
+b = BPF(text=bpf_text)
+b.attach_kprobe(event="vfs_unlink", fn_name="trace_unlink")
+b.attach_kprobe(event="vfs_rmdir", fn_name="trace_unlink")
+b.attach_kprobe(event="vfs_rename", fn_name="trace_rename")
+
+# header
+print("%-8s %-7s %-16s %6s %s" % ("TIME", "PID", "COMM", "ACTION", "FILE"))
+
+# process event
+def print_event(cpu, data, size):
+    event = b["events"].event(data)
+    action_str = action2str(event.action)
+    file_str = event.fname.decode('utf-8', 'replace')
+    if action_str == "RENAME":
+        file_str = "%s > %s" % (file_str, event.fname2.decode('utf-8', 'replace'))
+    print("%-8s %-7d %-16s %6s %s" % (strftime("%H:%M:%S"), event.pid,
+        event.comm.decode('utf-8', 'replace'), action_str, file_str))
+
+b["events"].open_perf_buffer(print_event)
+while 1:
+    try:
+        b.perf_buffer_poll()
+    except KeyboardInterrupt:
+        exit()
diff --git a/tools/filegone_example.txt b/tools/filegone_example.txt
new file mode 100644
index 0000000..0234e8d
--- /dev/null
+++ b/tools/filegone_example.txt
@@ -0,0 +1,26 @@
+Demonstrations of filegone, the Linux eBPF/bcc version.
+
+
+filegone traces why file gone, either been deleted or renamed
+For example:
+
+# ./filegone 
+18:30:56 22905   vim               DELETE .fstab.swpx
+18:30:56 22905   vim               DELETE .fstab.swp
+18:31:00 22905   vim               DELETE .viminfo
+18:31:00 22905   vim               RENAME .viminfo.tmp > .viminfo
+18:31:00 22905   vim               DELETE .fstab.swp
+
+USAGE message:
+
+usage: filegone.py [-h] [-p PID]
+
+Trace why file gone (deleted or renamed)
+
+optional arguments:
+  -h, --help         show this help message and exit
+  -p PID, --pid PID  trace this PID only
+
+examples:
+    ./filegone           # trace all file gone events
+    ./filegone -p 181    # only trace PID 181
diff --git a/tools/filelife.py b/tools/filelife.py
index e869607..ae0279e 100755
--- a/tools/filelife.py
+++ b/tools/filelife.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # filelife    Trace the lifespan of short-lived files.
@@ -16,6 +16,7 @@
 #
 # 08-Feb-2015   Brendan Gregg   Created this.
 # 17-Feb-2016   Allan McAleavy updated for BPF_PERF_OUTPUT
+# 13-Nov-2022   Rong Tao        Check btf struct field for CO-RE and add vfs_open()
 
 from __future__ import print_function
 from bcc import BPF
@@ -24,11 +25,11 @@
 
 # arguments
 examples = """examples:
-    ./filelife           # trace all stat() syscalls
+    ./filelife           # trace lifecycle of file(create->remove)
     ./filelife -p 181    # only trace PID 181
 """
 parser = argparse.ArgumentParser(
-    description="Trace stat() syscalls",
+    description="Trace lifecycle of file",
     formatter_class=argparse.RawDescriptionHelpFormatter,
     epilog=examples)
 parser.add_argument("-p", "--pid",
@@ -54,8 +55,7 @@
 BPF_HASH(birth, struct dentry *);
 BPF_PERF_OUTPUT(events);
 
-// trace file creation time
-int trace_create(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+static int probe_dentry(struct pt_regs *ctx, struct dentry *dentry)
 {
     u32 pid = bpf_get_current_pid_tgid() >> 32;
     FILTER
@@ -64,10 +64,35 @@
     birth.update(&dentry, &ts);
 
     return 0;
+}
+
+// trace file creation time
+TRACE_CREATE_FUNC
+{
+    return probe_dentry(ctx, dentry);
+};
+
+// trace file security_inode_create time
+int trace_security_inode_create(struct pt_regs *ctx, struct inode *dir,
+        struct dentry *dentry)
+{
+    return probe_dentry(ctx, dentry);
+};
+
+// trace file open time
+int trace_open(struct pt_regs *ctx, struct path *path, struct file *file)
+{
+    struct dentry *dentry = path->dentry;
+
+    if (!(file->f_mode & FMODE_CREATED)) {
+        return 0;
+    }
+
+    return probe_dentry(ctx, dentry);
 };
 
 // trace file deletion and output details
-int trace_unlink(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+TRACE_UNLINK_FUNC
 {
     struct data_t data = {};
     u32 pid = bpf_get_current_pid_tgid() >> 32;
@@ -99,6 +124,30 @@
 }
 """
 
+trace_create_text_1="""
+int trace_create(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+"""
+trace_create_text_2="""
+int trace_create(struct pt_regs *ctx, struct user_namespace *mnt_userns,
+        struct inode *dir, struct dentry *dentry)
+"""
+trace_create_text_3="""
+int trace_create(struct pt_regs *ctx, struct mnt_idmap *idmap,
+        struct inode *dir, struct dentry *dentry)
+"""
+
+trace_unlink_text_1="""
+int trace_unlink(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+"""
+trace_unlink_text_2="""
+int trace_unlink(struct pt_regs *ctx, struct user_namespace *mnt_userns,
+        struct inode *dir, struct dentry *dentry)
+"""
+trace_unlink_text_3="""
+int trace_unlink(struct pt_regs *ctx, struct mnt_idmap *idmap,
+        struct inode *dir, struct dentry *dentry)
+"""
+
 if args.pid:
     bpf_text = bpf_text.replace('FILTER',
         'if (pid != %s) { return 0; }' % args.pid)
@@ -109,12 +158,25 @@
     if args.ebpf:
         exit()
 
+if BPF.kernel_struct_has_field(b'renamedata', b'new_mnt_idmap') == 1:
+    bpf_text = bpf_text.replace('TRACE_CREATE_FUNC', trace_create_text_3)
+    bpf_text = bpf_text.replace('TRACE_UNLINK_FUNC', trace_unlink_text_3)
+elif BPF.kernel_struct_has_field(b'renamedata', b'old_mnt_userns') == 1:
+    bpf_text = bpf_text.replace('TRACE_CREATE_FUNC', trace_create_text_2)
+    bpf_text = bpf_text.replace('TRACE_UNLINK_FUNC', trace_unlink_text_2)
+else:
+    bpf_text = bpf_text.replace('TRACE_CREATE_FUNC', trace_create_text_1)
+    bpf_text = bpf_text.replace('TRACE_UNLINK_FUNC', trace_unlink_text_1)
+
 # initialize BPF
 b = BPF(text=bpf_text)
 b.attach_kprobe(event="vfs_create", fn_name="trace_create")
+# newer kernels may don't fire vfs_create, call vfs_open instead:
+b.attach_kprobe(event="vfs_open", fn_name="trace_open")
 # newer kernels (say, 4.8) may don't fire vfs_create, so record (or overwrite)
 # the timestamp in security_inode_create():
-b.attach_kprobe(event="security_inode_create", fn_name="trace_create")
+if BPF.get_kprobe_functions(b"security_inode_create"):
+    b.attach_kprobe(event="security_inode_create", fn_name="trace_security_inode_create")
 b.attach_kprobe(event="vfs_unlink", fn_name="trace_unlink")
 
 # header
diff --git a/tools/fileslower.py b/tools/fileslower.py
index 07484e0..0383913 100755
--- a/tools/fileslower.py
+++ b/tools/fileslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # fileslower  Trace slow synchronous file reads and writes.
diff --git a/tools/filetop.py b/tools/filetop.py
index aec11a8..9987a89 100755
--- a/tools/filetop.py
+++ b/tools/filetop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # filetop  file reads and writes by process.
diff --git a/tools/funccount.py b/tools/funccount.py
index 96cfb52..db22c3c 100755
--- a/tools/funccount.py
+++ b/tools/funccount.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # funccount Count functions, tracepoints, and USDT probes.
@@ -295,7 +295,7 @@
                 if v.value == 0:
                     continue
                 print("%-36s %8d" %
-                      (self.probe.trace_functions[k.value], v.value))
+                      (self.probe.trace_functions[k.value].decode('utf-8', 'replace'), v.value))
 
             if exiting:
                 print("Detaching...")
diff --git a/tools/funccount_example.txt b/tools/funccount_example.txt
index e942b9c..2d3bb7a 100644
--- a/tools/funccount_example.txt
+++ b/tools/funccount_example.txt
@@ -326,7 +326,7 @@
 Detaching...
 
 A cpu is specified by "-c CPU", this will only trace the specified CPU. Eg,
-trace how many timers setting per sencond of CPU 1 on a x86(Intel) server:
+trace how many timers setting per second of CPU 1 on a x86(Intel) server:
 
 # funccount.py -i 1 -c 1 lapic_next_deadline
 Tracing 1 functions for "lapic_next_deadline"... Hit Ctrl-C to end.
diff --git a/tools/funcinterval.py b/tools/funcinterval.py
index 1840eb5..b9b2dae 100755
--- a/tools/funcinterval.py
+++ b/tools/funcinterval.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # funcinterval   Time interval between the same function, tracepoint
diff --git a/tools/funcinterval_example.txt b/tools/funcinterval_example.txt
old mode 100755
new mode 100644
diff --git a/tools/funclatency.py b/tools/funclatency.py
index 2ade069..b262aac 100755
--- a/tools/funclatency.py
+++ b/tools/funclatency.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # funclatency   Time functions and print latency as a histogram.
@@ -92,7 +92,7 @@
     library = libpath
     pattern = parts[1]
 else:
-    bail("unrecognized pattern format '%s'" % pattern)
+    bail("unrecognized pattern format '%s'" % args.pattern)
 
 if not args.regexp:
     pattern = pattern.replace('*', '.*')
@@ -367,9 +367,9 @@
 # output
 def print_section(key):
     if not library:
-        return BPF.sym(key[0], -1)
+        return BPF.sym(key[0], -1).decode('utf-8', 'replace')
     else:
-        return "%s [%d]" % (BPF.sym(key[0], key[1]), key[1])
+        return "%s [%d]" % (BPF.sym(key[0], key[1]).decode('utf-8', 'replace'), key[1])
 
 exiting = 0 if args.interval else 1
 seconds = 0
diff --git a/tools/funcslower.py b/tools/funcslower.py
index ddd786f..4b3798a 100755
--- a/tools/funcslower.py
+++ b/tools/funcslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # funcslower  Trace slow kernel or user function calls.
@@ -317,17 +317,17 @@
         # print folded stack output
         user_stack = list(user_stack)
         kernel_stack = list(kernel_stack)
-        line = [event.comm.decode('utf-8', 'replace')] + \
+        line = [event.comm] + \
             [b.sym(addr, event.tgid_pid) for addr in reversed(user_stack)] + \
             (do_delimiter and ["-"] or []) + \
             [b.ksym(addr) for addr in reversed(kernel_stack)]
-        print("%s %d" % (";".join(line), 1))
+        print("%s %d" % (b';'.join(line).decode('utf-8', 'replace'), 1))
     else:
         # print default multi-line stack output.
         for addr in kernel_stack:
-            print("    %s" % b.ksym(addr))
+            print("    %s" % b.ksym(addr).decode('utf-8', 'replace'))
         for addr in user_stack:
-            print("    %s" % b.sym(addr, event.tgid_pid))
+            print("    %s" % b.sym(addr, event.tgid_pid).decode('utf-8', 'replace'))
 
 def print_event(cpu, data, size):
     event = b["events"].event(data)
diff --git a/tools/gethostlatency.py b/tools/gethostlatency.py
index 353055d..17b9185 100755
--- a/tools/gethostlatency.py
+++ b/tools/gethostlatency.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # gethostlatency  Show latency for getaddrinfo/gethostbyname[2] calls.
 #                 For Linux, uses BCC, eBPF. Embedded C.
diff --git a/tools/hardirqs.py b/tools/hardirqs.py
index 3bcf649..b9f15ac 100755
--- a/tools/hardirqs.py
+++ b/tools/hardirqs.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # hardirqs  Summarize hard IRQ (interrupt) event time.
diff --git a/tools/inject.py b/tools/inject.py
index 320b393..76079d5 100755
--- a/tools/inject.py
+++ b/tools/inject.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # This script generates a BPF program with structure inspired by trace.py. The
 # generated program operates on PID-indexed stacks. Generally speaking,
diff --git a/tools/killsnoop.py b/tools/killsnoop.py
index 663c810..9cce8dc 100755
--- a/tools/killsnoop.py
+++ b/tools/killsnoop.py
@@ -1,10 +1,10 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # killsnoop Trace signals issued by the kill() syscall.
 #           For Linux, uses BCC, eBPF. Embedded C.
 #
-# USAGE: killsnoop [-h] [-x] [-p PID]
+# USAGE: killsnoop [-h] [-x] [-p PID] [-T PID] [-s SIGNAL]
 #
 # Copyright (c) 2015 Brendan Gregg.
 # Licensed under the Apache License, Version 2.0 (the "License")
@@ -23,6 +23,7 @@
     ./killsnoop           # trace all kill() signals
     ./killsnoop -x        # only show failed kills
     ./killsnoop -p 181    # only trace PID 181
+    ./killsnoop -T 189    # only trace target PID 189
     ./killsnoop -s 9      # only trace signal 9
 """
 parser = argparse.ArgumentParser(
@@ -32,7 +33,9 @@
 parser.add_argument("-x", "--failed", action="store_true",
     help="only show failed kill syscalls")
 parser.add_argument("-p", "--pid",
-    help="trace this PID only")
+    help="trace this PID only which is the sender of signal")
+parser.add_argument("-T", "--tpid",
+    help="trace this target PID only which is the receiver of signal")
 parser.add_argument("-s", "--signal",
     help="trace this signal only")
 parser.add_argument("--ebpf", action="store_true",
@@ -46,14 +49,14 @@
 #include <linux/sched.h>
 
 struct val_t {
-   u64 pid;
+   u32 pid;
    int sig;
    int tpid;
    char comm[TASK_COMM_LEN];
 };
 
 struct data_t {
-   u64 pid;
+   u32 pid;
    int tpid;
    int sig;
    int ret;
@@ -69,6 +72,7 @@
     u32 pid = pid_tgid >> 32;
     u32 tid = (u32)pid_tgid;
 
+    TPID_FILTER
     PID_FILTER
     SIGNAL_FILTER
 
@@ -108,16 +112,25 @@
     return 0;
 }
 """
+
+if args.tpid:
+    bpf_text = bpf_text.replace('TPID_FILTER',
+        'if (tpid != %s) { return 0; }' % args.tpid)
+else:
+    bpf_text = bpf_text.replace('TPID_FILTER', '')
+
 if args.pid:
     bpf_text = bpf_text.replace('PID_FILTER',
         'if (pid != %s) { return 0; }' % args.pid)
 else:
     bpf_text = bpf_text.replace('PID_FILTER', '')
+
 if args.signal:
     bpf_text = bpf_text.replace('SIGNAL_FILTER',
         'if (sig != %s) { return 0; }' % args.signal)
 else:
     bpf_text = bpf_text.replace('SIGNAL_FILTER', '')
+
 if debug or args.ebpf:
     print(bpf_text)
     if args.ebpf:
@@ -129,9 +142,18 @@
 b.attach_kprobe(event=kill_fnname, fn_name="syscall__kill")
 b.attach_kretprobe(event=kill_fnname, fn_name="do_ret_sys_kill")
 
+# detect the length of PID column
+pid_bytes = 6
+try:
+    with open("/proc/sys/kernel/pid_max", 'r') as f:
+        pid_bytes = len(f.read().strip()) + 1
+        f.close()
+except:
+    pass # not fatal error, just use the default value
+
 # header
-print("%-9s %-6s %-16s %-4s %-6s %s" % (
-    "TIME", "PID", "COMM", "SIG", "TPID", "RESULT"))
+print("%-9s %-*s %-16s %-4s %-*s %s" % (
+    "TIME", pid_bytes, "PID", "COMM", "SIG", pid_bytes, "TPID", "RESULT"))
 
 # process event
 def print_event(cpu, data, size):
@@ -140,8 +162,8 @@
     if (args.failed and (event.ret >= 0)):
         return
 
-    printb(b"%-9s %-6d %-16s %-4d %-6d %d" % (strftime("%H:%M:%S").encode('ascii'),
-        event.pid, event.comm, event.sig, event.tpid, event.ret))
+    printb(b"%-9s %-*d %-16s %-4d %-*d %d" % (strftime("%H:%M:%S").encode('ascii'),
+        pid_bytes, event.pid, event.comm, event.sig, pid_bytes, event.tpid, event.ret))
 
 # loop with callback to print_event
 b["events"].open_perf_buffer(print_event)
diff --git a/tools/killsnoop_example.txt b/tools/killsnoop_example.txt
index 7746f2a..97c3ad7 100644
--- a/tools/killsnoop_example.txt
+++ b/tools/killsnoop_example.txt
@@ -19,17 +19,22 @@
 USAGE message:
 
 # ./killsnoop -h
-usage: killsnoop [-h] [-x] [-p PID]
+usage: killsnoop [-h] [-x] [-p PID] [-T PID] [-s SIGNAL]
 
 Trace signals issued by the kill() syscall
 
 optional arguments:
-  -h, --help         show this help message and exit
-  -x, --failed       only show failed kill syscalls
-  -p PID, --pid PID  trace this PID only
+  -h, --help            show this help message and exit
+  -x, --failed          only show failed kill syscalls
+  -p PID, --pid PID     trace this PID only which is the sender of signal
+  -T TPID, --tpid TPID  trace this target PID only which is the receiver of
+                        signal
+  -s SIGNAL, --signal SIGNAL
+                        trace this signal only
 
 examples:
     ./killsnoop           # trace all kill() signals
     ./killsnoop -x        # only show failed kills
     ./killsnoop -p 181    # only trace PID 181
+    ./killsnoop -T 189    # only trace target PID 189
     ./killsnoop -s 9      # only trace signal 9
diff --git a/tools/klockstat.py b/tools/klockstat.py
index b8cafd9..62672e3 100755
--- a/tools/klockstat.py
+++ b/tools/klockstat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # klockstat traces lock events and display locks statistics.
 #
@@ -20,7 +20,7 @@
     klockstat -d 5                      # trace for 5 seconds only
     klockstat -i 5                      # display stats every 5 seconds
     klockstat -p 123                    # trace locks for PID 123
-    klockstat -t 321                    # trace locks for PID 321
+    klockstat -t 321                    # trace locks for TID 321
     klockstat -c pipe_                  # display stats only for lock callers with 'pipe_' substring
     klockstat -S acq_count              # sort lock acquired results on acquired count
     klockstat -S hld_total              # sort lock held results on total held time
diff --git a/tools/kvmexit.py b/tools/kvmexit.py
index 292b6dc..b711f02 100755
--- a/tools/kvmexit.py
+++ b/tools/kvmexit.py
@@ -96,10 +96,10 @@
 };
 BPF_PERCPU_ARRAY(pcpu_cache, struct cache_info, 1);
 
-FUNC_ENTRY {
+TRACEPOINT_PROBE(kvm, kvm_exit) {
     int cache_miss = 0;
     int zero = 0;
-    u32 er = GET_ER;
+    u32 er = args->exit_reason;
     if (er >= REASON_NUM) {
         return 0;
     }
@@ -256,19 +256,6 @@
 except Exception as e:
     raise Exception("Failed to do precondition check, due to: %s." % e)
 
-try:
-    if BPF.support_raw_tracepoint_in_module():
-        # Let's firstly try raw_tracepoint_in_module
-        func_entry = "RAW_TRACEPOINT_PROBE(kvm_exit)"
-        get_er = "ctx->args[0]"
-    else:
-        # If raw_tp_in_module is not supported, fall back to regular tp
-        func_entry = "TRACEPOINT_PROBE(kvm, kvm_exit)"
-        get_er = "args->exit_reason"
-except Exception as e:
-    raise Exception("Failed to catch kvm exit reasons due to: %s" % e)
-
-
 def find_tid(tgt_dir, tgt_vcpu):
     for tid in os.listdir(tgt_dir):
         path = tgt_dir + "/" + tid + "/comm"
@@ -309,10 +296,6 @@
     thread_filter = '0'
     header_format = "PID      TID      "
 bpf_text = bpf_text.replace('THREAD_FILTER', thread_filter)
-
-# For kernel >= 5.0, use RAW_TRACEPOINT_MODULE for performance consideration
-bpf_text = bpf_text.replace('FUNC_ENTRY', func_entry)
-bpf_text = bpf_text.replace('GET_ER', get_er)
 b = BPF(text=bpf_text)
 
 
diff --git a/tools/llcstat.py b/tools/llcstat.py
index 4f1ba2f..56ada47 100755
--- a/tools/llcstat.py
+++ b/tools/llcstat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # llcstat.py Summarize cache references and cache misses by PID.
 #            Cache reference and cache miss are corresponding events defined in
@@ -15,6 +15,7 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 19-Oct-2016   Teng Qin   Created this.
+# 20-Jun-2022   YeZhengMao Added tid info.
 
 from __future__ import print_function
 import argparse
@@ -30,6 +31,10 @@
     help="Sample one in this many number of cache reference / miss events")
 parser.add_argument(
     "duration", nargs="?", default=10, help="Duration, in seconds, to run")
+parser.add_argument(
+    "-t", "--tid", action="store_true",
+    help="Summarize cache references and misses by PID/TID"
+)
 parser.add_argument("--ebpf", action="store_true",
     help=argparse.SUPPRESS)
 args = parser.parse_args()
@@ -41,7 +46,8 @@
 
 struct key_t {
     int cpu;
-    int pid;
+    u32 pid;
+    u32 tid;
     char name[TASK_COMM_LEN];
 };
 
@@ -49,8 +55,10 @@
 BPF_HASH(miss_count, struct key_t);
 
 static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+    u64 pid_tgid = bpf_get_current_pid_tgid();
     key->cpu = bpf_get_smp_processor_id();
-    key->pid = bpf_get_current_pid_tgid() >> 32;
+    key->pid = pid_tgid >> 32;
+    key->tid = GET_TID ? (u32)pid_tgid : key->pid;
     bpf_get_current_comm(&(key->name), sizeof(key->name));
 }
 
@@ -73,6 +81,8 @@
 }
 """
 
+bpf_text = bpf_text.replace("GET_TID", "1" if args.tid else "0")
+
 if args.ebpf:
     print(bpf_text)
     exit()
@@ -98,22 +108,42 @@
 
 miss_count = {}
 for (k, v) in b.get_table('miss_count').items():
-    miss_count[(k.pid, k.cpu, k.name)] = v.value
+    if args.tid:
+        miss_count[(k.pid, k.tid, k.cpu, k.name)] = v.value
+    else:
+        miss_count[(k.pid, k.cpu, k.name)] = v.value
 
-print('PID      NAME             CPU     REFERENCE         MISS    HIT%')
+header_text = 'PID      '
+format_text = '{:<8d} '
+if args.tid:
+    header_text += 'TID      '
+    format_text += '{:<8d} '
+
+header_text += 'NAME             CPU     REFERENCE         MISS    HIT%'
+format_text += '{:<16s} {:<4d} {:>12d} {:>12d} {:>6.2f}%'
+
+print(header_text)
 tot_ref = 0
 tot_miss = 0
 for (k, v) in b.get_table('ref_count').items():
     try:
-        miss = miss_count[(k.pid, k.cpu, k.name)]
+        if args.tid:
+            miss = miss_count[(k.pid, k.tid, k.cpu, k.name)]
+        else:
+            miss = miss_count[(k.pid, k.cpu, k.name)]
     except KeyError:
         miss = 0
     tot_ref += v.value
     tot_miss += miss
     # This happens on some PIDs due to missed counts caused by sampling
     hit = (v.value - miss) if (v.value >= miss) else 0
-    print('{:<8d} {:<16s} {:<4d} {:>12d} {:>12d} {:>6.2f}%'.format(
-        k.pid, k.name.decode('utf-8', 'replace'), k.cpu, v.value, miss,
-        (float(hit) / float(v.value)) * 100.0))
+    if args.tid:
+        print(format_text.format(
+            k.pid, k.tid, k.name.decode('utf-8', 'replace'), k.cpu, v.value, miss,
+            (float(hit) / float(v.value)) * 100.0))
+    else:
+        print(format_text.format(
+            k.pid, k.name.decode('utf-8', 'replace'), k.cpu, v.value, miss,
+            (float(hit) / float(v.value)) * 100.0))
 print('Total References: {} Total Misses: {} Hit Rate: {:.2f}%'.format(
     tot_ref, tot_miss, (float(tot_ref - tot_miss) / float(tot_ref)) * 100.0))
diff --git a/tools/llcstat_example.txt b/tools/llcstat_example.txt
index ef2aec1..a7c1a78 100644
--- a/tools/llcstat_example.txt
+++ b/tools/llcstat_example.txt
@@ -38,6 +38,21 @@
 you might find a case where -- by chance -- a process has been tallied with
 more misses than references, which would seem impossible.
 
+# ./llcstat.py 10 -t
+Running for 10 seconds or hit Ctrl-C to end.
+PID      TID      NAME             CPU     REFERENCE         MISS    HIT%
+170843   170845   docker           12           2700         1200  55.56%
+298670   298670   kworker/15:0     15            500            0 100.00%
+170254   170254   kworker/11:1     11           2500          400  84.00%
+1046952  1046953  git              0            2600         1100  57.69%
+170843   170849   docker           15           1000          400  60.00%
+1027373  1027382  node             8            3500         2500  28.57%
+0        0        swapper/7        7          173000         4200  97.57%
+1028217  1028217  node             14          15600        22400   0.00%
+[...]
+Total References: 7139900 Total Misses: 1413900 Hit Rate: 80.20%
+
+This shows each TID`s cache hit rate during the 10 seconds run period.
 
 USAGE message:
 
@@ -54,3 +69,4 @@
     -c SAMPLE_PERIOD, --sample_period SAMPLE_PERIOD
                           Sample one in this many number of cache reference
                           and miss events
+    -t, --tid             Summarize cache references and misses by PID/TID
diff --git a/tools/mdflush.py b/tools/mdflush.py
index 5dea0b4..66c21cd 100755
--- a/tools/mdflush.py
+++ b/tools/mdflush.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # mdflush  Trace md flush events.
@@ -15,15 +15,15 @@
 from bcc import BPF
 from time import strftime
 
-# load BPF program
-b = BPF(text="""
+# define BPF program
+bpf_text="""
 #include <uapi/linux/ptrace.h>
 #include <linux/sched.h>
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
 #include <linux/bio.h>
 
 struct data_t {
-    u64 pid;
+    u32 pid;
     char comm[TASK_COMM_LEN];
     char disk[DISK_NAME_LEN];
 };
@@ -32,18 +32,17 @@
 int kprobe__md_flush_request(struct pt_regs *ctx, void *mddev, struct bio *bio)
 {
     struct data_t data = {};
-    u32 pid = bpf_get_current_pid_tgid() >> 32;
-    data.pid = pid;
+    data.pid = bpf_get_current_pid_tgid() >> 32;
     bpf_get_current_comm(&data.comm, sizeof(data.comm));
 /*
- * The following deals with a kernel version change (in mainline 4.14, although
+ * The following deals with kernel version changes (in mainline 4.14 and 5.12, although
  * it may be backported to earlier kernels) with how the disk name is accessed.
  * We handle both pre- and post-change versions here. Please avoid kernel
  * version tests like this as much as possible: they inflate the code, test,
  * and maintenance burden.
  */
 #ifdef bio_dev
-    struct gendisk *bi_disk = bio->bi_disk;
+    struct gendisk *bi_disk = bio->__BI_DISK__;
 #else
     struct gendisk *bi_disk = bio->bi_bdev->bd_disk;
 #endif
@@ -51,7 +50,15 @@
     events.perf_submit(ctx, &data, sizeof(data));
     return 0;
 }
-""")
+"""
+
+if BPF.kernel_struct_has_field('bio', 'bi_bdev') == 1:
+    bpf_text = bpf_text.replace('__BI_DISK__', 'bi_bdev->bd_disk')
+else:
+    bpf_text = bpf_text.replace('__BI_DISK__', 'bi_disk')
+
+# initialize BPF
+b = BPF(text=bpf_text)
 
 # header
 print("Tracing md flush requests... Hit Ctrl-C to end.")
diff --git a/tools/memleak.py b/tools/memleak.py
index 27a2e09..28af4ac 100755
--- a/tools/memleak.py
+++ b/tools/memleak.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # memleak   Trace and display outstanding allocations to detect
 #           memory leaks in user-mode processes and the kernel.
@@ -344,16 +344,26 @@
 }
 """
 
-bpf_source_kernel = """
+bpf_source_kernel_node = """
 
-TRACEPOINT_PROBE(kmem, kmalloc) {
+TRACEPOINT_PROBE(kmem, kmalloc_node) {
         if (WORKAROUND_MISSING_FREE)
             gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
         gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
         return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
 }
 
-TRACEPOINT_PROBE(kmem, kmalloc_node) {
+TRACEPOINT_PROBE(kmem, kmem_cache_alloc_node) {
+        if (WORKAROUND_MISSING_FREE)
+            gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
+        gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
+        return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
+}
+"""
+
+bpf_source_kernel = """
+
+TRACEPOINT_PROBE(kmem, kmalloc) {
         if (WORKAROUND_MISSING_FREE)
             gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
         gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
@@ -371,13 +381,6 @@
         return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
 }
 
-TRACEPOINT_PROBE(kmem, kmem_cache_alloc_node) {
-        if (WORKAROUND_MISSING_FREE)
-            gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
-        gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
-        return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
-}
-
 TRACEPOINT_PROBE(kmem, kmem_cache_free) {
         return gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
 }
@@ -409,6 +412,8 @@
                 bpf_source += bpf_source_percpu
         else:
                 bpf_source += bpf_source_kernel
+                if BPF.tracepoint_exists("kmem", "kmalloc_node"):
+                        bpf_source += bpf_source_kernel_node
 
 if kernel_trace:
     bpf_source = bpf_source.replace("WORKAROUND_MISSING_FREE", "1"
@@ -538,7 +543,7 @@
                                                       show_module=True,
                                                       show_offset=True)
                                 trace.append(sym)
-                        trace = "\n\t\t".join(trace)
+                        trace = "\n\t\t".join(trace.decode())
                 except KeyError:
                         trace = "stack information lost"
 
diff --git a/tools/mountsnoop.py b/tools/mountsnoop.py
index d186602..ee7124e 100755
--- a/tools/mountsnoop.py
+++ b/tools/mountsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # mountsnoop Trace mount() and umount syscalls.
 #            For Linux, uses BCC, eBPF. Embedded C.
diff --git a/tools/mysqld_qslower.py b/tools/mysqld_qslower.py
index e5e3b84..eb976c7 100755
--- a/tools/mysqld_qslower.py
+++ b/tools/mysqld_qslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # mysqld_qslower    MySQL server queries slower than a threshold.
 #                   For Linux, uses BCC, BPF. Embedded C.
@@ -48,7 +48,7 @@
 };
 
 struct data_t {
-    u64 pid;
+    u32 pid;
     u64 ts;
     u64 delta;
     char query[QUERY_MAX];
diff --git a/tools/netqtop.py b/tools/netqtop.py
index 47e9103..9e4a761 100755
--- a/tools/netqtop.py
+++ b/tools/netqtop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 
 from __future__ import print_function
 from bcc import BPF
diff --git a/tools/nfsdist.py b/tools/nfsdist.py
index 4c1f8e3..1de0057 100755
--- a/tools/nfsdist.py
+++ b/tools/nfsdist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # nfsdist   Summarize NFS operation latency
diff --git a/tools/nfsslower.py b/tools/nfsslower.py
index 6b94f34..0e20d75 100755
--- a/tools/nfsslower.py
+++ b/tools/nfsslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # nfsslower     Trace slow NFS operations
@@ -9,6 +9,8 @@
 # This script traces some common NFS operations: read, write, opens and
 # getattr. It measures the time spent in these operations, and prints details
 # for each that exceeded a threshold.
+# The script also traces commit operations, which is specific to nfs and could
+# be pretty slow.
 #
 # WARNING: This adds low-overhead instrumentation to these NFS operations,
 # including reads and writes from the file system cache. Such reads and writes
@@ -25,6 +27,8 @@
 # Currently there aren't any tracepoints available for nfs_read_file,
 # nfs_write_file and nfs_open_file, nfs_getattr does have entry and exit
 # tracepoints but we chose to use kprobes for consistency
+# Raw tracepoints are used to trace nfs:nfs_initiate_commit and
+# nfs:nfs_commit_done.
 #
 # 31-Aug-2017   Samuel Nair created this. Should work with NFSv{3,4}
 
@@ -41,8 +45,8 @@
     ./nfsslower -p 121  # trace pid 121 only
 """
 parser = argparse.ArgumentParser(
-    description="""Trace READ, WRITE, OPEN \
-and GETATTR NFS calls slower than a threshold,\
+    description="""Trace READ, WRITE, OPEN, GETATTR \
+and COMMIT NFS calls slower than a threshold,\
 supports NFSv{3,4}""",
     formatter_class=argparse.RawDescriptionHelpFormatter,
     epilog=examples)
@@ -66,11 +70,13 @@
 #include <linux/fs.h>
 #include <linux/sched.h>
 #include <linux/dcache.h>
+#include <linux/nfs_fs.h>
 
 #define TRACE_READ 0
 #define TRACE_WRITE 1
 #define TRACE_OPEN 2
 #define TRACE_GETATTR 3
+#define TRACE_COMMIT 4
 
 struct val_t {
     u64 ts;
@@ -79,6 +85,12 @@
     struct dentry *d;
 };
 
+struct commit_t {
+    u64 ts;
+    u64 offset;
+    u64 count;
+};
+
 struct data_t {
     // XXX: switch some to u32's when supported
     u64 ts_us;
@@ -86,13 +98,14 @@
     u64 size;
     u64 offset;
     u64 delta_us;
-    u64 pid;
+    u32 pid;
     char task[TASK_COMM_LEN];
     char file[DNAME_INLINE_LEN];
 };
 
 BPF_HASH(entryinfo, u64, struct val_t);
 BPF_PERF_OUTPUT(events);
+BPF_HASH(commitinfo, u64, struct commit_t);
 
 int trace_rw_entry(struct pt_regs *ctx, struct kiocb *iocb,
                                 struct iov_iter *data)
@@ -179,8 +192,11 @@
 
     // populate output struct
     u32 size = PT_REGS_RC(ctx);
-    struct data_t data = {.type = type, .size = size, .delta_us = delta_us,
-        .pid = pid};
+    struct data_t data = {};
+    data.type = type;
+    data.size = size;
+    data.delta_us = delta_us;
+    data.pid = pid;
     data.ts_us = ts / 1000;
     data.offset = valp->offset;
     bpf_get_current_comm(&data.task, sizeof(data.task));
@@ -227,7 +243,129 @@
     return trace_exit(ctx, TRACE_GETATTR);
 }
 
+static int trace_initiate_commit(struct nfs_commit_data *cd)
+{
+    u64 key = (u64)cd;
+    struct commit_t c = { 0 };
+
+    c.ts = bpf_ktime_get_ns();
+    bpf_probe_read_kernel(&c.offset, sizeof(cd->args.offset),
+        &cd->args.offset);
+    bpf_probe_read_kernel(&c.count, sizeof(cd->args.count), &cd->args.count);
+    commitinfo.update(&key, &c);
+    return 0;
+}
+
 """
+
+bpf_text_raw_tp = """
+RAW_TRACEPOINT_PROBE(nfs_initiate_commit)
+{
+    // TP_PROTO(const struct nfs_commit_data *data)
+    struct nfs_commit_data *cd = (struct nfs_commit_data *)ctx->args[0];
+    return trace_initiate_commit(cd);
+}
+
+RAW_TRACEPOINT_PROBE(nfs_commit_done)
+{
+    // TP_PROTO(const struct rpc_task *task, const struct nfs_commit_data *data)
+    struct nfs_commit_data *cd = (struct nfs_commit_data *)ctx->args[1];
+    u64 key = (u64)cd;
+    struct commit_t *cp = commitinfo.lookup(&key);
+
+    if (cp) {
+        struct nfs_open_context *p;
+        struct dentry *de;
+        struct qstr qs;
+        u64 ts = bpf_ktime_get_ns();
+        u64 delta_us = (ts - cp->ts) / 1000;
+        u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+        struct data_t data = {};
+        data.type = TRACE_COMMIT;
+        data.offset = cp->offset;
+        data.size = cp->count;
+        data.ts_us = ts/1000;
+        data.delta_us = delta_us;
+        data.pid = pid;
+
+        commitinfo.delete(&key);
+        bpf_get_current_comm(&data.task, sizeof(data.task));
+
+        if(FILTER_PID)
+            return 0;
+
+        if (FILTER_US)
+            return 0;
+
+        bpf_probe_read_kernel(&p, sizeof(p), &cd->context);
+        bpf_probe_read_kernel(&de, sizeof(de), &p->dentry);
+        bpf_probe_read_kernel(&qs, sizeof(qs), &de->d_name);
+        if (qs.len) {
+            bpf_probe_read_kernel(&data.file, sizeof(data.file),
+                (void *)qs.name);
+            events.perf_submit(ctx, &data, sizeof(data));
+        }
+    }
+    return 0;
+}
+"""
+
+bpf_text_kprobe = """
+int trace_nfs_initiate_commit(struct pt_regs *ctx, void *clnt, struct nfs_commit_data *cd)
+{
+    return trace_initiate_commit(cd);
+}
+
+int trace_nfs_commit_done(struct pt_regs *ctx, void *task, void *calldata)
+{
+    struct nfs_commit_data *cd = (struct nfs_commit_data *)calldata;
+    u64 key = (u64)cd;
+    struct commit_t *cp = commitinfo.lookup(&key);
+
+    if (cp) {
+        struct nfs_open_context *p;
+        struct dentry *de;
+        struct qstr qs;
+        u64 ts = bpf_ktime_get_ns();
+        u64 delta_us = (ts - cp->ts) / 1000;
+        u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+        struct data_t data = {};
+        data.type = TRACE_COMMIT;
+        data.offset = cp->offset;
+        data.size = cp->count;
+        data.ts_us = ts/1000;
+        data.delta_us = delta_us;
+        data.pid = pid;
+
+        commitinfo.delete(&key);
+        bpf_get_current_comm(&data.task, sizeof(data.task));
+
+        if(FILTER_PID)
+            return 0;
+
+        if (FILTER_US)
+            return 0;
+
+        bpf_probe_read_kernel(&p, sizeof(p), &cd->context);
+        bpf_probe_read_kernel(&de, sizeof(de), &p->dentry);
+        bpf_probe_read_kernel(&qs, sizeof(qs), &de->d_name);
+        if (qs.len) {
+            bpf_probe_read_kernel(&data.file, sizeof(data.file),
+                (void *)qs.name);
+            events.perf_submit(ctx, &data, sizeof(data));
+        }
+    }
+    return 0;
+}
+"""
+is_support_raw_tp = BPF.support_raw_tracepoint()
+if is_support_raw_tp:
+    bpf_text += bpf_text_raw_tp
+else:
+    bpf_text += bpf_text_kprobe
+
 if min_ms == 0:
     bpf_text = bpf_text.replace('FILTER_US', '0')
 else:
@@ -253,6 +391,8 @@
         type = 'O'
     elif event.type == 3:
         type = 'G'
+    elif event.type == 4:
+        type = 'C'
 
     if(csv):
         print("%d,%s,%d,%s,%d,%d,%d,%s" % (
@@ -273,19 +413,38 @@
 # Currently specifically works for NFSv4, the other kprobes are generic
 # so it should work with earlier NFS versions
 
-b = BPF(text=bpf_text)
+# The following warning is shown on kernels after linux-5.18 when using bcc.
+# Add compile option to silence it.
+#   In file included from /virtual/main.c:7:
+#   In file included from include/linux/nfs_fs.h:31:
+#   In file included from include/linux/sunrpc/auth.h:13:
+#   In file included from include/linux/sunrpc/sched.h:19:
+#   include/linux/sunrpc/xdr.h:751:10: warning: result of comparison of constant 4611686018427387903 with expression of type '__u32' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
+#           if (len > SIZE_MAX / sizeof(*p))
+#               ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~
+#   1 warning generated.
+b = BPF(text=bpf_text,
+    cflags=["-Wno-tautological-constant-out-of-range-compare"])
 b.attach_kprobe(event="nfs_file_read", fn_name="trace_rw_entry")
 b.attach_kprobe(event="nfs_file_write", fn_name="trace_rw_entry")
-b.attach_kprobe(event="nfs4_file_open", fn_name="trace_file_open_entry")
 b.attach_kprobe(event="nfs_file_open", fn_name="trace_file_open_entry")
 b.attach_kprobe(event="nfs_getattr", fn_name="trace_getattr_entry")
 
 b.attach_kretprobe(event="nfs_file_read", fn_name="trace_read_return")
 b.attach_kretprobe(event="nfs_file_write", fn_name="trace_write_return")
-b.attach_kretprobe(event="nfs4_file_open", fn_name="trace_file_open_return")
 b.attach_kretprobe(event="nfs_file_open", fn_name="trace_file_open_return")
 b.attach_kretprobe(event="nfs_getattr", fn_name="trace_getattr_return")
 
+if BPF.get_kprobe_functions(b'nfs4_file_open'):
+    b.attach_kprobe(event="nfs4_file_open", fn_name="trace_file_open_entry")
+    b.attach_kretprobe(event="nfs4_file_open", fn_name="trace_file_open_return")
+
+if not is_support_raw_tp:
+    b.attach_kprobe(event="nfs_initiate_commit",
+                    fn_name="trace_nfs_initiate_commit")
+    b.attach_kprobe(event="nfs_commit_done",
+                    fn_name="trace_nfs_commit_done")
+
 if(csv):
     print("ENDTIME_us,TASK,PID,TYPE,BYTES,OFFSET_b,LATENCY_us,FILE")
 else:
diff --git a/tools/offcputime.py b/tools/offcputime.py
index c9b1e6e..301055f 100755
--- a/tools/offcputime.py
+++ b/tools/offcputime.py
@@ -1,19 +1,23 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # offcputime    Summarize off-CPU time by stack trace
 #               For Linux, uses BCC, eBPF.
 #
-# USAGE: offcputime [-h] [-p PID | -u | -k] [-U | -K] [-f] [duration]
+# USAGE: offcputime [-h] [-p PID | -t TID | -u | -k] [-U | -K] [-d] [-f] [-s]
+#                   [--stack-storage-size STACK_STORAGE_SIZE]
+#                   [-m MIN_BLOCK_TIME] [-M MAX_BLOCK_TIME] [--state STATE]
+#                   [duration]
 #
 # Copyright 2016 Netflix, Inc.
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 13-Jan-2016	Brendan Gregg	Created this.
+# 27-Mar-2023	Rocky Xing      Added option to show symbol offsets.
+# 04-Apr-2023   Rocky Xing      Updated default stack storage size.
 
 from __future__ import print_function
 from bcc import BPF
 from sys import stderr
-from time import strftime
 import argparse
 import errno
 import signal
@@ -45,6 +49,7 @@
     ./offcputime             # trace off-CPU stack time until Ctrl-C
     ./offcputime 5           # trace for 5 seconds only
     ./offcputime -f 5        # 5 seconds, and output in folded format
+    ./offcputime -s 5        # 5 seconds, and show symbol offsets
     ./offcputime -m 1000     # trace only events that last more than 1000 usec
     ./offcputime -M 10000    # trace only events that last less than 10000 usec
     ./offcputime -p 185      # only trace threads for PID 185
@@ -78,10 +83,12 @@
     help="insert delimiter between kernel/user stacks")
 parser.add_argument("-f", "--folded", action="store_true",
     help="output folded format")
-parser.add_argument("--stack-storage-size", default=1024,
+parser.add_argument("-s", "--offset", action="store_true",
+    help="show address offsets")
+parser.add_argument("--stack-storage-size", default=16384,
     type=positive_nonzero_int,
     help="the number of unique stack traces that can be stored and "
-         "displayed (default 1024)")
+         "displayed (default 16384)")
 parser.add_argument("duration", nargs="?", default=99999999,
     type=positive_nonzero_int,
     help="duration of trace, in seconds")
@@ -103,6 +110,10 @@
 duration = int(args.duration)
 debug = 0
 
+if args.folded and args.offset:
+    print("ERROR: can only use -f or -s. Exiting.")
+    exit()
+
 # signal handler
 def signal_ignore(signal, frame):
     print()
@@ -116,8 +127,8 @@
 #define MAXBLOCK_US    MAXBLOCK_US_VALUEULL
 
 struct key_t {
-    u64 pid;
-    u64 tgid;
+    u32 pid;
+    u32 tgid;
     int user_stack_id;
     int kernel_stack_id;
     char name[TASK_COMM_LEN];
@@ -246,12 +257,13 @@
 if args.kernel_threads_only and args.user_stacks_only:
     print("ERROR: Displaying user stacks for kernel threads " +
           "doesn't make sense.", file=stderr)
-    exit(1)
+    exit(2)
 
 if debug or args.ebpf:
     print(bpf_text)
     if args.ebpf:
-        exit()
+        print("ERROR: Exiting")
+        exit(3)
 
 # initialize BPF
 b = BPF(text=bpf_text)
@@ -260,7 +272,7 @@
 matched = b.num_open_kprobes()
 if matched == 0:
     print("error: 0 functions traced. Exiting.", file=stderr)
-    exit(1)
+    exit(4)
 
 # header
 if not folded:
@@ -295,6 +307,10 @@
 if not folded:
     print()
 
+show_offset = False
+if args.offset:
+    show_offset = True
+
 missing_stacks = 0
 has_enomem = False
 counts = b.get_table("counts")
@@ -343,7 +359,7 @@
                 print("    [Missed Kernel Stack]")
             else:
                 for addr in kernel_stack:
-                    print("    %s" % b.ksym(addr).decode('utf-8', 'replace'))
+                    print("    %s" % b.ksym(addr, show_offset=show_offset).decode('utf-8', 'replace'))
         if not args.kernel_stacks_only:
             if need_delimiter and k.user_stack_id >= 0 and k.kernel_stack_id >= 0:
                 print("    --")
@@ -351,7 +367,7 @@
                 print("    [Missed User Stack]")
             else:
                 for addr in user_stack:
-                    print("    %s" % b.sym(addr, k.tgid).decode('utf-8', 'replace'))
+                    print("    %s" % b.sym(addr, k.tgid, show_offset=show_offset).decode('utf-8', 'replace'))
         print("    %-16s %s (%d)" % ("-", k.name.decode('utf-8', 'replace'), k.pid))
         print("        %d\n" % v.value)
 
diff --git a/tools/offcputime_example.txt b/tools/offcputime_example.txt
index 1f6066d..c8c8d1d 100644
--- a/tools/offcputime_example.txt
+++ b/tools/offcputime_example.txt
@@ -719,7 +719,7 @@
 USAGE message:
 
 # ./offcputime.py -h
-usage: offcputime.py [-h] [-p PID | -t TID | -u | -k] [-U | -K] [-d] [-f]
+usage: offcputime.py [-h] [-p PID | -t TID | -u | -k] [-U | -K] [-d] [-f] [-s]
                      [--stack-storage-size STACK_STORAGE_SIZE]
                      [-m MIN_BLOCK_TIME] [-M MAX_BLOCK_TIME] [--state STATE]
                      [duration]
@@ -745,9 +745,10 @@
                         stacks)
   -d, --delimited       insert delimiter between kernel/user stacks
   -f, --folded          output folded format
+  -s, --offset          show address offsets
   --stack-storage-size STACK_STORAGE_SIZE
                         the number of unique stack traces that can be stored
-                        and displayed (default 1024)
+                        and displayed (default 16384)
   -m MIN_BLOCK_TIME, --min-block-time MIN_BLOCK_TIME
                         the amount of time in microseconds over which we store
                         traces (default 1)
@@ -761,6 +762,7 @@
     ./offcputime             # trace off-CPU stack time until Ctrl-C
     ./offcputime 5           # trace for 5 seconds only
     ./offcputime -f 5        # 5 seconds, and output in folded format
+    ./offcputime -s 5        # 5 seconds, and show symbol offsets
     ./offcputime -m 1000     # trace only events that last more than 1000 usec
     ./offcputime -M 10000    # trace only events that last less than 10000 usec
     ./offcputime -p 185      # only trace threads for PID 185
diff --git a/tools/offwaketime.py b/tools/offwaketime.py
index b52d472..34c58eb 100755
--- a/tools/offwaketime.py
+++ b/tools/offwaketime.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # offwaketime   Summarize blocked time by kernel off-CPU stack + waker stack
 #               For Linux, uses BCC, eBPF.
@@ -9,6 +9,7 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 20-Jan-2016   Brendan Gregg   Created this.
+# 04-Apr-2023   Rocky Xing      Updated default stack storage size.
 
 from __future__ import print_function
 from bcc import BPF
@@ -100,10 +101,10 @@
     help="insert delimiter between kernel/user stacks")
 parser.add_argument("-f", "--folded", action="store_true",
     help="output folded format")
-parser.add_argument("--stack-storage-size", default=1024,
+parser.add_argument("--stack-storage-size", default=16384,
     type=positive_nonzero_int,
     help="the number of unique stack traces that can be stored and "
-         "displayed (default 1024)")
+         "displayed (default 16384)")
 parser.add_argument("duration", nargs="?", default=99999999,
     type=positive_nonzero_int,
     help="duration of trace, in seconds")
@@ -388,7 +389,7 @@
                 print("    [Missed User Stack] %d" % k.w_u_stack_id)
             else:
                 for addr in waker_user_stack:
-                    print("    %s" % b.sym(addr, k.w_tgid))
+                    print("    %s" % b.sym(addr, k.w_tgid).decode('utf-8', 'replace'))
         if not args.user_stacks_only:
             if need_delimiter and k.w_u_stack_id > 0 and k.w_k_stack_id > 0:
                 print("    -")
@@ -396,7 +397,7 @@
                 print("    [Missed Kernel Stack]")
             else:
                 for addr in waker_kernel_stack:
-                    print("    %s" % b.ksym(addr))
+                    print("    %s" % b.ksym(addr).decode('utf-8', 'replace'))
 
         # print waker/wakee delimiter
         print("    %-16s %s" % ("--", "--"))
@@ -406,7 +407,7 @@
                 print("    [Missed Kernel Stack]")
             else:
                 for addr in target_kernel_stack:
-                    print("    %s" % b.ksym(addr))
+                    print("    %s" % b.ksym(addr).decode('utf-8', 'replace'))
         if not args.kernel_stacks_only:
             if need_delimiter and k.t_u_stack_id > 0 and k.t_k_stack_id > 0:
                 print("    -")
@@ -414,7 +415,7 @@
                 print("    [Missed User Stack]")
             else:
                 for addr in target_user_stack:
-                    print("    %s" % b.sym(addr, k.t_tgid))
+                    print("    %s" % b.sym(addr, k.t_tgid).decode('utf-8', 'replace'))
         print("    %-16s %s %s" % ("target:", k.target.decode('utf-8', 'replace'), k.t_pid))
         print("        %d\n" % v.value)
 
diff --git a/tools/offwaketime_example.txt b/tools/offwaketime_example.txt
index 26bfb39..bc43342 100644
--- a/tools/offwaketime_example.txt
+++ b/tools/offwaketime_example.txt
@@ -335,7 +335,7 @@
   -f, --folded          output folded format
   --stack-storage-size STACK_STORAGE_SIZE
                         the number of unique stack traces that can be stored
-                        and displayed (default 1024)
+                        and displayed (default 16384)
   -m MIN_BLOCK_TIME, --min-block-time MIN_BLOCK_TIME
                         the amount of time in microseconds over which we store
                         traces (default 1)
diff --git a/tools/old/filegone.py b/tools/old/filegone.py
new file mode 100755
index 0000000..37b2283
--- /dev/null
+++ b/tools/old/filegone.py
@@ -0,0 +1,152 @@
+#!/usr/bin/python
+# @lint-avoid-python-3-compatibility-imports
+#
+# filegone    Trace why file gone (deleted or renamed).
+#             For Linux, uses BCC, eBPF. Embedded C.
+#
+# USAGE: filegone [-h] [-p PID]
+#
+# Licensed under the Apache License, Version 2.0 (the "License")
+#
+# 08-Nov-2022 Curu. modified from filelife
+
+from __future__ import print_function
+from bcc import BPF
+import argparse
+from time import strftime
+
+# arguments
+examples = """examples:
+    ./filegone           # trace all file gone events
+    ./filegone -p 181    # only trace PID 181
+"""
+parser = argparse.ArgumentParser(
+    description="Trace why file gone (deleted or renamed)",
+    formatter_class=argparse.RawDescriptionHelpFormatter,
+    epilog=examples)
+parser.add_argument("-p", "--pid",
+    help="trace this PID only")
+parser.add_argument("--ebpf", action="store_true",
+    help=argparse.SUPPRESS)
+args = parser.parse_args()
+debug = 0
+
+# define BPF program
+bpf_text = """
+#include <uapi/linux/ptrace.h>
+#include <linux/fs.h>
+#include <linux/sched.h>
+
+struct data_t {
+    u32 pid;
+    u8 action;
+    char comm[TASK_COMM_LEN];
+    char fname[DNAME_INLINE_LEN];
+    char fname2[DNAME_INLINE_LEN];
+};
+
+BPF_PERF_OUTPUT(events);
+
+// trace file deletion and output details
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0)
+int trace_unlink(struct pt_regs *ctx, struct inode *dir, struct dentry *dentry)
+#else
+int trace_unlink(struct pt_regs *ctx, struct user_namespace *ns, struct inode *dir, struct dentry *dentry)
+#endif
+{
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+    FILTER
+
+    struct data_t data = {};
+    struct qstr d_name = dentry->d_name;
+    if (d_name.len == 0)
+        return 0;
+
+    bpf_get_current_comm(&data.comm, sizeof(data.comm));
+    data.pid = pid;
+    data.action = 'D';
+    bpf_probe_read(&data.fname, sizeof(data.fname), d_name.name);
+
+    events.perf_submit(ctx, &data, sizeof(data));
+
+    return 0;
+}
+
+// trace file rename
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0)
+int trace_rename(struct pt_regs *ctx, struct inode *old_dir, struct dentry *old_dentry,
+struct inode *new_dir, struct dentry *new_dentry)
+{
+#else
+int trace_rename(struct pt_regs *ctx, struct renamedata *rd)
+{
+    struct dentry *old_dentry = rd->old_dentry;
+    struct dentry *new_dentry = rd->new_dentry;
+#endif
+
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+
+    FILTER
+
+    struct data_t data = {};
+    struct qstr s_name = old_dentry->d_name;
+    struct qstr d_name = new_dentry->d_name;
+    if (s_name.len == 0 || d_name.len == 0)
+        return 0;
+
+    bpf_get_current_comm(&data.comm, sizeof(data.comm));
+    data.pid = pid;
+    data.action = 'R';
+    bpf_probe_read(&data.fname, sizeof(data.fname), s_name.name);
+    bpf_probe_read(&data.fname2, sizeof(data.fname), d_name.name);
+    events.perf_submit(ctx, &data, sizeof(data));
+
+    return 0;
+}
+"""
+
+
+def action2str(action):
+    if chr(action) == 'D':
+        action_str = "DELETE"
+    else:
+        action_str = "RENAME"
+    return action_str
+
+if args.pid:
+    bpf_text = bpf_text.replace('FILTER',
+        'if (pid != %s) { return 0; }' % args.pid)
+else:
+    bpf_text = bpf_text.replace('FILTER', '')
+
+if debug or args.ebpf:
+    print(bpf_text)
+    if args.ebpf:
+        exit()
+
+# initialize BPF
+b = BPF(text=bpf_text)
+b.attach_kprobe(event="vfs_unlink", fn_name="trace_unlink")
+b.attach_kprobe(event="vfs_rmdir", fn_name="trace_unlink")
+b.attach_kprobe(event="vfs_rename", fn_name="trace_rename")
+
+# header
+print("%-8s %-7s %-16s %6s %s" % ("TIME", "PID", "COMM", "ACTION", "FILE"))
+
+# process event
+def print_event(cpu, data, size):
+    event = b["events"].event(data)
+    action_str = action2str(event.action)
+    file_str = event.fname.decode('utf-8', 'replace')
+    if action_str == "RENAME":
+        file_str = "%s > %s" % (file_str, event.fname2.decode('utf-8', 'replace'))
+    print("%-8s %-7d %-16s %6s %s" % (strftime("%H:%M:%S"), event.pid,
+        event.comm.decode('utf-8', 'replace'), action_str, file_str))
+
+b["events"].open_perf_buffer(print_event)
+while 1:
+    try:
+        b.perf_buffer_poll()
+    except KeyboardInterrupt:
+        exit()
diff --git a/tools/old/wakeuptime.py b/tools/old/wakeuptime.py
old mode 100644
new mode 100755
diff --git a/tools/oomkill.py b/tools/oomkill.py
index 1bf441c..cb0c6e0 100755
--- a/tools/oomkill.py
+++ b/tools/oomkill.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # oomkill   Trace oom_kill_process(). For Linux, uses BCC, eBPF.
 #
diff --git a/tools/opensnoop.py b/tools/opensnoop.py
index 0b48c81..13c672a 100755
--- a/tools/opensnoop.py
+++ b/tools/opensnoop.py
@@ -1,10 +1,13 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # opensnoop Trace open() syscalls.
 #           For Linux, uses BCC, eBPF. Embedded C.
 #
-# USAGE: opensnoop [-h] [-T] [-x] [-p PID] [-d DURATION] [-t TID] [-n NAME]
+# USAGE: opensnoop [-h] [-T] [-U] [-x] [-p PID] [-t TID]
+#                  [--cgroupmap CGROUPMAP] [--mntnsmap MNTNSMAP] [-u UID]
+#                  [-d DURATION] [-n NAME] [-F] [-e] [-f FLAG_FILTER]
+#                  [-b BUFFER_PAGES]
 #
 # Copyright (c) 2015 Brendan Gregg.
 # Licensed under the Apache License, Version 2.0 (the "License")
@@ -14,30 +17,34 @@
 # 08-Oct-2016   Dina Goldshtein Support filtering by PID and TID.
 # 28-Dec-2018   Tim Douglas     Print flags argument, enable filtering
 # 06-Jan-2019   Takuma Kume     Support filtering by UID
+# 21-Aug-2022   Rocky Xing      Support showing full path for an open file.
+# 06-Sep-2022   Rocky Xing      Support setting size of the perf ring buffer.
 
 from __future__ import print_function
 from bcc import ArgString, BPF
 from bcc.containers import filter_by_containers
 from bcc.utils import printb
 import argparse
+from collections import defaultdict
 from datetime import datetime, timedelta
 import os
 
 # arguments
 examples = """examples:
-    ./opensnoop           # trace all open() syscalls
-    ./opensnoop -T        # include timestamps
-    ./opensnoop -U        # include UID
-    ./opensnoop -x        # only show failed opens
-    ./opensnoop -p 181    # only trace PID 181
-    ./opensnoop -t 123    # only trace TID 123
-    ./opensnoop -u 1000   # only trace UID 1000
-    ./opensnoop -d 10     # trace for 10 seconds only
-    ./opensnoop -n main   # only print process names containing "main"
-    ./opensnoop -e        # show extended fields
+    ./opensnoop                        # trace all open() syscalls
+    ./opensnoop -T                     # include timestamps
+    ./opensnoop -U                     # include UID
+    ./opensnoop -x                     # only show failed opens
+    ./opensnoop -p 181                 # only trace PID 181
+    ./opensnoop -t 123                 # only trace TID 123
+    ./opensnoop -u 1000                # only trace UID 1000
+    ./opensnoop -d 10                  # trace for 10 seconds only
+    ./opensnoop -n main                # only print process names containing "main"
+    ./opensnoop -e                     # show extended fields
     ./opensnoop -f O_WRONLY -f O_RDWR  # only print calls for writing
-    ./opensnoop --cgroupmap mappath  # only trace cgroups in this BPF map
-    ./opensnoop --mntnsmap mappath   # only trace mount namespaces in the map
+    ./opensnoop -F                     # show full path for an open file with relative path
+    ./opensnoop --cgroupmap mappath    # only trace cgroups in this BPF map
+    ./opensnoop --mntnsmap mappath     # only trace mount namespaces in the map
 """
 parser = argparse.ArgumentParser(
     description="Trace open() syscalls",
@@ -70,6 +77,11 @@
     help="show extended fields")
 parser.add_argument("-f", "--flag_filter", action="append",
     help="filter on flags argument (e.g., O_WRONLY)")
+parser.add_argument("-F", "--full-path", action="store_true",
+    help="show full path for an open file with relative path")
+parser.add_argument("-b", "--buffer-pages", type=int, default=64,
+    help="size of the perf ring buffer "
+        "(must be a power of two number of pages and defaults to 64)")
 args = parser.parse_args()
 debug = 0
 if args.duration:
@@ -88,6 +100,17 @@
 #include <uapi/linux/ptrace.h>
 #include <uapi/linux/limits.h>
 #include <linux/sched.h>
+#ifdef FULLPATH
+#include <linux/fs_struct.h>
+#include <linux/dcache.h>
+
+#define MAX_ENTRIES 32
+
+enum event_type {
+    EVENT_ENTRY,
+    EVENT_END,
+};
+#endif
 
 struct val_t {
     u64 id;
@@ -102,7 +125,10 @@
     u32 uid;
     int ret;
     char comm[TASK_COMM_LEN];
-    char fname[NAME_MAX];
+#ifdef FULLPATH
+    enum event_type type;
+#endif
+    char name[NAME_MAX];
     int flags; // EXTENDED_STRUCT_MEMBER
 };
 
@@ -125,15 +151,17 @@
         // missed entry
         return 0;
     }
+
     bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
-    bpf_probe_read_user(&data.fname, sizeof(data.fname), (void *)valp->fname);
+    bpf_probe_read_user_str(&data.name, sizeof(data.name), (void *)valp->fname);
     data.id = valp->id;
     data.ts = tsp / 1000;
     data.uid = bpf_get_current_uid_gid();
     data.flags = valp->flags; // EXTENDED_STRUCT_MEMBER
     data.ret = PT_REGS_RC(ctx);
 
-    events.perf_submit(ctx, &data, sizeof(data));
+    SUBMIT_DATA
+
     infotmp.delete(&id);
 
     return 0;
@@ -245,14 +273,14 @@
 
     u64 tsp = bpf_ktime_get_ns();
 
-    bpf_probe_read_user(&data.fname, sizeof(data.fname), (void *)filename);
+    bpf_probe_read_user_str(&data.name, sizeof(data.name), (void *)filename);
     data.id    = id;
     data.ts    = tsp / 1000;
     data.uid   = bpf_get_current_uid_gid();
     data.flags = flags; // EXTENDED_STRUCT_MEMBER
     data.ret   = ret;
 
-    events.perf_submit(ctx, &data, sizeof(data));
+    SUBMIT_DATA
 
     return 0;
 }
@@ -266,6 +294,9 @@
 if b.ksymname(fnname_openat2) == -1:
     fnname_openat2 = None
 
+if args.full_path:
+    bpf_text = "#define FULLPATH\n" + bpf_text
+
 is_support_kfunc = BPF.support_kfunc()
 if is_support_kfunc:
     bpf_text += bpf_text_kfunc_header_open.replace('FNNAME', fnname_open)
@@ -312,6 +343,41 @@
 if not (args.extended_fields or args.flag_filter):
     bpf_text = '\n'.join(x for x in bpf_text.split('\n')
         if 'EXTENDED_STRUCT_MEMBER' not in x)
+
+if args.full_path:
+    bpf_text = bpf_text.replace('SUBMIT_DATA', """
+    data.type = EVENT_ENTRY;
+    events.perf_submit(ctx, &data, sizeof(data));
+
+    if (data.name[0] != '/') { // relative path
+        struct task_struct *task;
+        struct dentry *dentry;
+        int i;
+
+        task = (struct task_struct *)bpf_get_current_task_btf();
+        dentry = task->fs->pwd.dentry;
+
+        for (i = 1; i < MAX_ENTRIES; i++) {
+            bpf_probe_read_kernel(&data.name, sizeof(data.name), (void *)dentry->d_name.name);
+            data.type = EVENT_ENTRY;
+            events.perf_submit(ctx, &data, sizeof(data));
+
+            if (dentry == dentry->d_parent) { // root directory
+                break;
+            }
+
+            dentry = dentry->d_parent;
+        }
+    }
+
+    data.type = EVENT_END;
+    events.perf_submit(ctx, &data, sizeof(data));
+    """)
+else:
+    bpf_text = bpf_text.replace('SUBMIT_DATA', """
+    events.perf_submit(ctx, &data, sizeof(data));
+    """)
+
 if debug or args.ebpf:
     print(bpf_text)
     if args.ebpf:
@@ -343,46 +409,69 @@
     print("%-9s" % ("FLAGS"), end="")
 print("PATH")
 
+class EventType(object):
+    EVENT_ENTRY = 0
+    EVENT_END = 1
+
+entries = defaultdict(list)
+
 # process event
 def print_event(cpu, data, size):
     event = b["events"].event(data)
     global initial_ts
 
-    # split return value into FD and errno columns
-    if event.ret >= 0:
-        fd_s = event.ret
-        err = 0
-    else:
-        fd_s = -1
-        err = - event.ret
+    if not args.full_path or event.type == EventType.EVENT_END:
+        skip = False
 
-    if not initial_ts:
-        initial_ts = event.ts
+        # split return value into FD and errno columns
+        if event.ret >= 0:
+            fd_s = event.ret
+            err = 0
+        else:
+            fd_s = -1
+            err = - event.ret
 
-    if args.failed and (event.ret >= 0):
-        return
+        if not initial_ts:
+            initial_ts = event.ts
 
-    if args.name and bytes(args.name) not in event.comm:
-        return
+        if args.failed and (event.ret >= 0):
+            skip = True
 
-    if args.timestamp:
-        delta = event.ts - initial_ts
-        printb(b"%-14.9f" % (float(delta) / 1000000), nl="")
+        if args.name and bytes(args.name) not in event.comm:
+            skip = True
 
-    if args.print_uid:
-        printb(b"%-6d" % event.uid, nl="")
+        if not skip:
+            if args.timestamp:
+                delta = event.ts - initial_ts
+                printb(b"%-14.9f" % (float(delta) / 1000000), nl="")
 
-    printb(b"%-6d %-16s %4d %3d " %
-           (event.id & 0xffffffff if args.tid else event.id >> 32,
-            event.comm, fd_s, err), nl="")
+            if args.print_uid:
+                printb(b"%-6d" % event.uid, nl="")
 
-    if args.extended_fields:
-        printb(b"%08o " % event.flags, nl="")
+            printb(b"%-6d %-16s %4d %3d " %
+                   (event.id & 0xffffffff if args.tid else event.id >> 32,
+                    event.comm, fd_s, err), nl="")
 
-    printb(b'%s' % event.fname)
+            if args.extended_fields:
+                printb(b"%08o " % event.flags, nl="")
+
+            if not args.full_path:
+                printb(b"%s" % event.name)
+            else:
+                paths = entries[event.id]
+                paths.reverse()
+                printb(b"%s" % os.path.join(*paths))
+
+        if args.full_path:
+            try:
+                del(entries[event.id])
+            except Exception:
+                pass
+    elif event.type == EventType.EVENT_ENTRY:
+        entries[event.id].append(event.name)
 
 # loop with callback to print_event
-b["events"].open_perf_buffer(print_event, page_cnt=64)
+b["events"].open_perf_buffer(print_event, page_cnt=args.buffer_pages)
 start_time = datetime.now()
 while not args.duration or datetime.now() - start_time < args.duration:
     try:
diff --git a/tools/opensnoop_example.txt b/tools/opensnoop_example.txt
index f15e84f..35efe9a 100644
--- a/tools/opensnoop_example.txt
+++ b/tools/opensnoop_example.txt
@@ -195,20 +195,21 @@
 # ./opensnoop -h
 usage: opensnoop.py [-h] [-T] [-U] [-x] [-p PID] [-t TID]
                     [--cgroupmap CGROUPMAP] [--mntnsmap MNTNSMAP] [-u UID]
-                    [-d DURATION] [-n NAME] [-e] [-f FLAG_FILTER]
+                    [-d DURATION] [-n NAME] [-e] [-f FLAG_FILTER] [-F]
+                    [-b BUFFER_PAGES]
 
 Trace open() syscalls
 
 optional arguments:
   -h, --help            show this help message and exit
   -T, --timestamp       include timestamp on output
-  -U, --print-uid       include UID on output
+  -U, --print-uid       print UID column
   -x, --failed          only show failed opens
   -p PID, --pid PID     trace this PID only
   -t TID, --tid TID     trace this TID only
   --cgroupmap CGROUPMAP
                         trace cgroups in this BPF map only
-  --mntnsmap MNTNSMAP   trace mount namespaces in this BPF map on
+  --mntnsmap MNTNSMAP   trace mount namespaces in this BPF map only
   -u UID, --uid UID     trace this UID only
   -d DURATION, --duration DURATION
                         total duration of trace in seconds
@@ -217,18 +218,23 @@
                         show extended fields
   -f FLAG_FILTER, --flag_filter FLAG_FILTER
                         filter on flags argument (e.g., O_WRONLY)
+  -F, --full-path       show full path for an open file with relative path
+  -b BUFFER_PAGES, --buffer-pages BUFFER_PAGES
+                        size of the perf ring buffer (must be a power of two
+                        number of pages and defaults to 64)
 
 examples:
-    ./opensnoop           # trace all open() syscalls
-    ./opensnoop -T        # include timestamps
-    ./opensnoop -U        # include UID
-    ./opensnoop -x        # only show failed opens
-    ./opensnoop -p 181    # only trace PID 181
-    ./opensnoop -t 123    # only trace TID 123
-    ./opensnoop -u 1000   # only trace UID 1000
-    ./opensnoop -d 10     # trace for 10 seconds only
-    ./opensnoop -n main   # only print process names containing "main"
-    ./opensnoop -e        # show extended fields
+    ./opensnoop                        # trace all open() syscalls
+    ./opensnoop -T                     # include timestamps
+    ./opensnoop -U                     # include UID
+    ./opensnoop -x                     # only show failed opens
+    ./opensnoop -p 181                 # only trace PID 181
+    ./opensnoop -t 123                 # only trace TID 123
+    ./opensnoop -u 1000                # only trace UID 1000
+    ./opensnoop -d 10                  # trace for 10 seconds only
+    ./opensnoop -n main                # only print process names containing "main"
+    ./opensnoop -e                     # show extended fields
     ./opensnoop -f O_WRONLY -f O_RDWR  # only print calls for writing
-    ./opensnoop --cgroupmap mappath  # only trace cgroups in this BPF map
-    ./opensnoop --mntnsmap mappath   # only trace mount namespaces in the map
+    ./opensnoop -F                     # show full path for an open file with relative path
+    ./opensnoop --cgroupmap mappath    # only trace cgroups in this BPF map
+    ./opensnoop --mntnsmap mappath     # only trace mount namespaces in the map
diff --git a/tools/pidpersec.py b/tools/pidpersec.py
index be72443..0d83f4b 100755
--- a/tools/pidpersec.py
+++ b/tools/pidpersec.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # pidpersec Count new processes (via fork).
diff --git a/tools/ppchcalls.py b/tools/ppchcalls.py
new file mode 100755
index 0000000..b6ca882
--- /dev/null
+++ b/tools/ppchcalls.py
@@ -0,0 +1,507 @@
+#!/usr/bin/python
+#
+# ppchcalls   Summarize ppc hcalls stats.
+#
+# Initial version migrating perf based tool to ebpf with additional hcalls,
+# inspired by existing bcc tool for syscalls.
+#
+#
+
+from time import sleep, strftime
+import argparse
+import errno
+import itertools
+import sys
+import signal
+from bcc import BPF
+
+hcall_table = {
+    4: 'H_REMOVE',
+    8: 'H_ENTER',
+    12: 'H_READ',
+    16: 'H_CLEAR_MOD',
+    20: 'H_CLEAR_REF',
+    24: 'H_PROTECT',
+    28: 'H_GET_TCE',
+    32: 'H_PUT_TCE',
+    36: 'H_SET_SPRG0',
+    40: 'H_SET_DABR',
+    44: 'H_PAGE_INIT',
+    48: 'H_SET_ASR',
+    52: 'H_ASR_ON',
+    56: 'H_ASR_OFF',
+    60: 'H_LOGICAL_CI_LOAD',
+    64: 'H_LOGICAL_CI_STORE',
+    68: 'H_LOGICAL_CACHE_LOAD',
+    72: 'H_LOGICAL_CACHE_STORE',
+    76: 'H_LOGICAL_ICBI',
+    80: 'H_LOGICAL_DCBF',
+    84: 'H_GET_TERM_CHAR',
+    88: 'H_PUT_TERM_CHAR',
+    92: 'H_REAL_TO_LOGICAL',
+    96: 'H_HYPERVISOR_DATA',
+    100: 'H_EOI',
+    104: 'H_CPPR',
+    108: 'H_IPI',
+    112: 'H_IPOLL',
+    116: 'H_XIRR',
+    120: 'H_MIGRATE_DMA',
+    124: 'H_PERFMON',
+    220: 'H_REGISTER_VPA',
+    224: 'H_CEDE',
+    228: 'H_CONFER',
+    232: 'H_PROD',
+    236: 'H_GET_PPP',
+    240: 'H_SET_PPP',
+    244: 'H_PURR',
+    248: 'H_PIC',
+    252: 'H_REG_CRQ',
+    256: 'H_FREE_CRQ',
+    260: 'H_VIO_SIGNAL',
+    264: 'H_SEND_CRQ',
+    272: 'H_COPY_RDMA',
+    276: 'H_REGISTER_LOGICAL_LAN',
+    280: 'H_FREE_LOGICAL_LAN',
+    284: 'H_ADD_LOGICAL_LAN_BUFFER',
+    288: 'H_SEND_LOGICAL_LAN',
+    292: 'H_BULK_REMOVE',
+    304: 'H_MULTICAST_CTRL',
+    308: 'H_SET_XDABR',
+    312: 'H_STUFF_TCE',
+    316: 'H_PUT_TCE_INDIRECT',
+    332: 'H_CHANGE_LOGICAL_LAN_MAC',
+    336: 'H_VTERM_PARTNER_INFO',
+    340: 'H_REGISTER_VTERM',
+    344: 'H_FREE_VTERM',
+    348: 'H_RESET_EVENTS',
+    352: 'H_ALLOC_RESOURCE',
+    356: 'H_FREE_RESOURCE',
+    360: 'H_MODIFY_QP',
+    364: 'H_QUERY_QP',
+    368: 'H_REREGISTER_PMR',
+    372: 'H_REGISTER_SMR',
+    376: 'H_QUERY_MR',
+    380: 'H_QUERY_MW',
+    384: 'H_QUERY_HCA',
+    388: 'H_QUERY_PORT',
+    392: 'H_MODIFY_PORT',
+    396: 'H_DEFINE_AQP1',
+    400: 'H_GET_TRACE_BUFFER',
+    404: 'H_DEFINE_AQP0',
+    408: 'H_RESIZE_MR',
+    412: 'H_ATTACH_MCQP',
+    416: 'H_DETACH_MCQP',
+    420: 'H_CREATE_RPT',
+    424: 'H_REMOVE_RPT',
+    428: 'H_REGISTER_RPAGES',
+    432: 'H_DISABLE_AND_GET',
+    436: 'H_ERROR_DATA',
+    440: 'H_GET_HCA_INFO',
+    444: 'H_GET_PERF_COUNT',
+    448: 'H_MANAGE_TRACE',
+    456: 'H_GET_CPU_CHARACTERISTICS',
+    468: 'H_FREE_LOGICAL_LAN_BUFFER',
+    472: 'H_POLL_PENDING',
+    484: 'H_QUERY_INT_STATE',
+    580: 'H_ILLAN_ATTRIBUTES',
+    592: 'H_MODIFY_HEA_QP',
+    596: 'H_QUERY_HEA_QP',
+    600: 'H_QUERY_HEA',
+    604: 'H_QUERY_HEA_PORT',
+    608: 'H_MODIFY_HEA_PORT',
+    612: 'H_REG_BCMC',
+    616: 'H_DEREG_BCMC',
+    620: 'H_REGISTER_HEA_RPAGES',
+    624: 'H_DISABLE_AND_GET_HEA',
+    628: 'H_GET_HEA_INFO',
+    632: 'H_ALLOC_HEA_RESOURCE',
+    644: 'H_ADD_CONN',
+    648: 'H_DEL_CONN',
+    664: 'H_JOIN',
+    672: 'H_VASI_SIGNAL',
+    676: 'H_VASI_STATE',
+    680: 'H_VIOCTL',
+    688: 'H_ENABLE_CRQ',
+    696: 'H_GET_EM_PARMS',
+    720: 'H_SET_MPP',
+    724: 'H_GET_MPP',
+    732: 'H_REG_SUB_CRQ',
+    736: 'H_FREE_SUB_CRQ',
+    740: 'H_SEND_SUB_CRQ',
+    744: 'H_SEND_SUB_CRQ_INDIRECT',
+    748: 'H_HOME_NODE_ASSOCIATIVITY',
+    756: 'H_BEST_ENERGY',
+    764: 'H_XIRR_X',
+    768: 'H_RANDOM',
+    772: 'H_COP',
+    788: 'H_GET_MPP_X',
+    796: 'H_SET_MODE',
+    808: 'H_BLOCK_REMOVE',
+    856: 'H_CLEAR_HPT',
+    864: 'H_REQUEST_VMC',
+    876: 'H_RESIZE_HPT_PREPARE',
+    880: 'H_RESIZE_HPT_COMMIT',
+    892: 'H_REGISTER_PROC_TBL',
+    896: 'H_SIGNAL_SYS_RESET',
+    904: 'H_ALLOCATE_VAS_WINDOW',
+    908: 'H_MODIFY_VAS_WINDOW',
+    912: 'H_DEALLOCATE_VAS_WINDOW',
+    916: 'H_QUERY_VAS_WINDOW',
+    920: 'H_QUERY_VAS_CAPABILITIES',
+    924: 'H_QUERY_NX_CAPABILITIES',
+    928: 'H_GET_NX_FAULT',
+    936: 'H_INT_GET_SOURCE_INFO',
+    940: 'H_INT_SET_SOURCE_CONFIG',
+    944: 'H_INT_GET_SOURCE_CONFIG',
+    948: 'H_INT_GET_QUEUE_INFO',
+    952: 'H_INT_SET_QUEUE_CONFIG',
+    956: 'H_INT_GET_QUEUE_CONFIG',
+    960: 'H_INT_SET_OS_REPORTING_LINE',
+    964: 'H_INT_GET_OS_REPORTING_LINE',
+    968: 'H_INT_ESB',
+    972: 'H_INT_SYNC',
+    976: 'H_INT_RESET',
+    996: 'H_SCM_READ_METADATA',
+    1000: 'H_SCM_WRITE_METADATA',
+    1004: 'H_SCM_BIND_MEM',
+    1008: 'H_SCM_UNBIND_MEM',
+    1012: 'H_SCM_QUERY_BLOCK_MEM_BINDING',
+    1016: 'H_SCM_QUERY_LOGICAL_MEM_BINDING',
+    1020: 'H_SCM_UNBIND_ALL',
+    1024: 'H_SCM_HEALTH',
+    1048: 'H_SCM_PERFORMANCE_STATS',
+    1052: 'H_PKS_GET_CONFIG',
+    1056: 'H_PKS_SET_PASSWORD',
+    1060: 'H_PKS_GEN_PASSWORD',
+    1068: 'H_PKS_WRITE_OBJECT',
+    1072: 'H_PKS_GEN_KEY',
+    1076: 'H_PKS_READ_OBJECT',
+    1080: 'H_PKS_REMOVE_OBJECT',
+    1084: 'H_PKS_CONFIRM_OBJECT_FLUSHED',
+    1096: 'H_RPT_INVALIDATE',
+    1100: 'H_SCM_FLUSH',
+    1104: 'H_GET_ENERGY_SCALE_INFO',
+    1108: 'H_PKS_SIGNED_UPDATE',
+    1116: 'H_WATCHDOG',
+    # Platform specific hcalls used by KVM on PowerVM
+    1120: 'H_GUEST_GET_CAPABILITIES',
+    1124: 'H_GUEST_SET_CAPABILITIES',
+    1136: 'H_GUEST_CREATE',
+    1140: 'H_GUEST_CREATE_VCPU',
+    1144: 'H_GUEST_GET_STATE',
+    1148: 'H_GUEST_SET_STATE',
+    1152: 'H_GUEST_RUN_VCPU',
+    1156: 'H_GUEST_COPY_MEMORY',
+    1160: 'H_GUEST_DELETE',
+    # Platform-specific hcalls used by the Ultravisor
+    61184: 'H_SVM_PAGE_IN',
+    61188: 'H_SVM_PAGE_OUT',
+    61192: 'H_SVM_INIT_START',
+    61196: 'H_SVM_INIT_DONE',
+    61204: 'H_SVM_INIT_ABORT',
+    # Platform specific hcalls used by KVM
+    61440: 'H_RTAS',
+    # Platform specific hcalls used by QEMU/SLOF
+    61441: 'H_LOGICAL_MEMOP',
+    61442: 'H_CAS',
+    61443: 'H_UPDATE_DT',
+    # Platform specific hcalls provided by PHYP
+    61560: 'H_GET_24X7_CATALOG_PAGE',
+    61564: 'H_GET_24X7_DATA',
+    61568: 'H_GET_PERF_COUNTER_INFO',
+    # Platform-specific hcalls used for nested HV KVM
+    63488: 'H_SET_PARTITION_TABLE',
+    63492: 'H_ENTER_NESTED',
+    63496: 'H_TLB_INVALIDATE',
+    63500: 'H_COPY_TOFROM_GUEST',
+}
+
+def hcall_table_lookup(opcode):
+        if (opcode in hcall_table):
+                return hcall_table[opcode]
+        else:
+                return opcode
+
+if sys.version_info.major < 3:
+    izip_longest = itertools.izip_longest
+else:
+    izip_longest = itertools.zip_longest
+
+# signal handler
+def signal_ignore(signal, frame):
+    print()
+
+def handle_errno(errstr):
+    try:
+        return abs(int(errstr))
+    except ValueError:
+        pass
+
+    try:
+        return getattr(errno, errstr)
+    except AttributeError:
+        raise argparse.ArgumentTypeError("couldn't map %s to an errno" % errstr)
+
+
+parser = argparse.ArgumentParser(
+    description="Summarize ppc hcall counts and latencies.")
+parser.add_argument("-p", "--pid", type=int,
+    help="trace only this pid")
+parser.add_argument("-t", "--tid", type=int,
+    help="trace only this tid")
+parser.add_argument("-i", "--interval", type=int,
+    help="print summary at this interval (seconds)")
+parser.add_argument("-d", "--duration", type=int,
+    help="total duration of trace, in seconds")
+parser.add_argument("-T", "--top", type=int, default=10,
+    help="print only the top hcalls by count or latency")
+parser.add_argument("-x", "--failures", action="store_true",
+    help="trace only failed hcalls (return < 0)")
+parser.add_argument("-e", "--errno", type=handle_errno,
+    help="trace only hcalls that return this error (numeric or EPERM, etc.)")
+parser.add_argument("-L", "--latency", action="store_true",
+    help="collect hcall latency")
+parser.add_argument("-m", "--milliseconds", action="store_true",
+    help="display latency in milliseconds (default: microseconds)")
+parser.add_argument("-P", "--process", action="store_true",
+    help="count by process and not by hcall")
+parser.add_argument("-l", "--list", action="store_true",
+    help="print list of recognized hcalls and exit")
+parser.add_argument("--hcall", type=str,
+    help="trace this hcall only (use option -l to get all recognized hcalls)")
+parser.add_argument("--ebpf", action="store_true",
+    help=argparse.SUPPRESS)
+args = parser.parse_args()
+if args.duration and not args.interval:
+    args.interval = args.duration
+if not args.interval:
+    args.interval = 99999999
+
+hcall_nr = -1
+if args.hcall is not None:
+    for key, value in hcall_table.items():
+        if args.hcall == value:
+            hcall_nr = key
+            print("hcall %s , hcall_nr =%d" % (args.hcall, hcall_nr))
+            break
+    if hcall_nr == -1:
+        print("Error: hcall '%s' not found. Exiting." % args.hcall)
+        sys.exit(1)
+
+if args.list:
+    for grp in izip_longest(*(iter(sorted(hcall_table.values())),) * 4):
+        print("   ".join(["%-25s" % s for s in grp if s is not None]))
+    sys.exit(0)
+
+text = """
+#ifdef LATENCY
+struct data_t {
+    u64 count;
+    u64 min;
+    u64 max;
+    u64 total_ns;
+};
+
+BPF_HASH(start, u64, u64);
+BPF_HASH(ppc_data, u32, struct data_t);
+#else
+BPF_HASH(ppc_data, u32, u64);
+#endif
+
+#ifdef LATENCY
+RAW_TRACEPOINT_PROBE(hcall_entry) {
+    // TP_PROTO(unsigned long opcode, unsigned long *args),
+    u64 pid_tgid = bpf_get_current_pid_tgid();
+    u32 pid = pid_tgid >> 32;
+    u32 tid = (u32)pid_tgid;
+
+#ifdef FILTER_HCALL_NR
+if (ctx->args[0] != FILTER_HCALL_NR)
+    return 0;
+#endif
+
+#ifdef FILTER_PID
+    if (pid != FILTER_PID)
+        return 0;
+#endif
+
+#ifdef FILTER_TID
+    if (tid != FILTER_TID)
+        return 0;
+#endif
+
+    u64 t = bpf_ktime_get_ns();
+    start.update(&pid_tgid, &t);
+    return 0;
+}
+#endif
+
+RAW_TRACEPOINT_PROBE(hcall_exit) {
+    // TP_PROTO(unsigned long opcode, long retval, unsigned long *retbuf)
+    u64 pid_tgid = bpf_get_current_pid_tgid();
+    u32 pid = pid_tgid >> 32;
+    u32 tid = (u32)pid_tgid;
+
+#ifdef FILTER_HCALL_NR
+    if (ctx->args[0] != FILTER_HCALL_NR)
+        return 0;
+#endif
+
+#ifdef FILTER_PID
+    if (pid != FILTER_PID)
+        return 0;
+#endif
+
+#ifdef FILTER_TID
+    if (tid != FILTER_TID)
+        return 0;
+#endif
+
+#ifdef FILTER_FAILED
+    if (ctx->args[1] >= 0)
+        return 0;
+#endif
+
+#ifdef FILTER_ERRNO
+    if (ctx->args[1] != -FILTER_ERRNO)
+        return 0;
+#endif
+
+#ifdef BY_PROCESS
+    u32 key = pid_tgid >> 32;
+#else
+    u32 key = (unsigned long) ctx->args[0];
+#endif
+
+#ifdef LATENCY
+    struct data_t *val, zero = {};
+    u64 delta = 0;
+    u64 *start_ns = start.lookup(&pid_tgid);
+    if (!start_ns)
+        return 0;
+
+    val = ppc_data.lookup_or_try_init(&key, &zero);
+    if (val) {
+        val->count++;
+        delta = bpf_ktime_get_ns() - *start_ns;
+        if (val->min) {
+            if(val->min > delta)
+                val->min = delta;
+        } else {
+                val->min = delta;
+        }
+        if (val->max) {
+            if(val->max < delta)
+                val->max = delta;
+        } else {
+                val->max = delta;
+        }
+        val->total_ns += delta;
+    }
+#else
+    u64 *val, zero = 0;
+    val = ppc_data.lookup_or_try_init(&key, &zero);
+    if (val) {
+        ++(*val);
+    }
+#endif
+    return 0;
+}
+"""
+
+if args.pid:
+    text = ("#define FILTER_PID %d\n" % args.pid) + text
+elif args.tid:
+    text = ("#define FILTER_TID %d\n" % args.tid) + text
+if args.failures:
+    text = "#define FILTER_FAILED\n" + text
+if args.errno:
+    text = "#define FILTER_ERRNO %d\n" % abs(args.errno) + text
+if args.latency:
+    text = "#define LATENCY\n" + text
+if args.process:
+    text = "#define BY_PROCESS\n" + text
+if args.hcall is not None:
+    text = ("#define FILTER_HCALL_NR %d\n" % hcall_nr) + text
+if args.ebpf:
+    print(text)
+    exit()
+
+bpf = BPF(text=text)
+
+def print_stats():
+    if args.latency:
+        ppc_print_latency_stats()
+    else:
+        print_ppc_count_stats()
+
+ppc_agg_colname = "PID    COMM" if args.process else "PPC HCALL"
+min_time_colname = "MIN (ms)" if args.milliseconds else "MIN (us)"
+max_time_colname = "MAX (ms)" if args.milliseconds else "MAX (us)"
+avg_time_colname = "AVG (ms)" if args.milliseconds else "AVG (us)"
+
+def comm_for_pid(pid):
+    try:
+        return open("/proc/%d/comm" % pid, "r").read().strip()
+    except Exception:
+        return "[unknown]"
+
+def agg_colval(key):
+    if args.process:
+        return "%-6d %-15s" % (key.value, comm_for_pid(key.value))
+    else:
+        return hcall_table_lookup(key.value)
+
+def print_ppc_count_stats():
+    data = bpf["ppc_data"]
+    print("[%s]" % strftime("%H:%M:%S"))
+    print("%-45s %8s" % (ppc_agg_colname, "COUNT"))
+    for k, v in sorted(data.items(), key=lambda kv: -kv[1].value)[:args.top]:
+        if k.value == 0xFFFFFFFF:
+            continue    # happens occasionally, we don't need it
+        print("%-45s %8d" % (agg_colval(k), v.value))
+    print("")
+    data.clear()
+
+def ppc_print_latency_stats():
+    data = bpf["ppc_data"]
+    print("[%s]" % strftime("%H:%M:%S"))
+    print("%-45s %8s %17s %17s %17s" % (ppc_agg_colname, "COUNT",
+          min_time_colname, max_time_colname, avg_time_colname))
+    for k, v in sorted(data.items(),
+                       key=lambda kv: -kv[1].count)[:args.top]:
+        if k.value == 0xFFFFFFFF:
+            continue    # happens occasionally, we don't need it
+        print(("%-45s %8d " + ("%17.6f" if args.milliseconds else "%17.3f ") +
+                              ("%17.6f" if args.milliseconds else "%17.3f ") +
+                              ("%17.6f" if args.milliseconds else "%17.3f")) %
+               (agg_colval(k), v.count,
+                v.min / (1e6 if args.milliseconds else 1e3),
+                v.max / (1e6 if args.milliseconds else 1e3),
+                (v.total_ns / v.count) / (1e6 if args.milliseconds else 1e3)))
+    print("")
+    data.clear()
+
+if args.hcall is not None:
+    print("Tracing %sppc hcall '%s'... Ctrl+C to quit." %
+        ("failed " if args.failures else "", args.hcall))
+else:
+    print("Tracing %sppc hcalls, printing top %d... Ctrl+C to quit." %
+        ("failed " if args.failures else "", args.top))
+exiting = 0 if args.interval else 1
+seconds = 0
+while True:
+    try:
+        sleep(args.interval)
+        seconds += args.interval
+    except KeyboardInterrupt:
+        exiting = 1
+        signal.signal(signal.SIGINT, signal_ignore)
+    if args.duration and seconds >= args.duration:
+        exiting = 1
+
+    print_stats()
+
+    if exiting:
+        print("Detaching...")
+        exit()
diff --git a/tools/ppchcalls_example.txt b/tools/ppchcalls_example.txt
new file mode 100644
index 0000000..950be52
--- /dev/null
+++ b/tools/ppchcalls_example.txt
@@ -0,0 +1,159 @@
+Demonstrations of ppchcalls, the Linux/eBPF version.
+
+
+ppchcalls summarizes hcall counts across the system or a specific process,
+with optional latency information. It is very useful for general workload
+characterization, for example:
+
+# ./ppchcalls.py
+Tracing ppc hcalls, printing top 10... Ctrl+C to quit.
+^C[04:59:47]
+PPC HCALL                                        COUNT
+H_IPI                                               26
+H_EOI                                               22
+H_XIRR                                              22
+H_VIO_SIGNAL                                         4
+H_REMOVE                                             3
+H_PUT_TCE                                            2
+H_SEND_CRQ                                           2
+H_STUFF_TCE                                          2
+H_ENTER                                              1
+H_PROTECT                                            1
+
+Detaching...
+#
+
+These are the top 10 entries; you can get more by using the -T switch. Here,
+the output indicates that the H_IPI, H_EOI and H_XIRR hcalls were very common,
+followed immediately by H_VIO_SIGNAL, H_REMOVE and so on. By default, ppchcalls
+counts across the entire system, but we can point it to a specific process of
+interest:
+
+# ./ppchcalls.py -p $(pidof vim)
+Tracing ppc hcalls, printing top 10... Ctrl+C to quit.
+^C[06:23:12]
+PPC HCALL                                        COUNT
+H_PUT_TERM_CHAR                                     62
+H_ENTER                                              2
+
+Detaching...
+#
+
+
+Occasionally, the count of hcalls is not enough, and you'd also want to know
+the minimum, maximum and aggregate latency for each of the hcalls:
+
+# ./ppchcalls.py -L
+Tracing ppc hcalls, printing top 10... Ctrl+C to quit.
+[00:53:59]
+PPC HCALL                                        COUNT          MIN (us)          MAX (us)          AVG (us)
+H_IPI                                               32             0.808             7.730             2.329
+H_EOI                                               25             0.697             1.984             1.081
+H_PUT_TERM_CHAR                                     25            10.315            47.184            14.667
+H_XIRR                                              25             0.868             6.223             2.397
+H_VIO_SIGNAL                                         6             1.418            22.053             7.507
+H_STUFF_TCE                                          3             0.865             2.349             1.384
+H_SEND_CRQ                                           3            18.015            21.137            19.673
+H_REMOVE                                             3             1.838             7.407             3.735
+H_PUT_TCE                                            3             1.473             4.808             2.698
+H_GET_TERM_CHAR                                      2             8.379            26.729            17.554
+
+Detaching...
+#
+
+Another direction would be to understand which processes are making a lot of
+hcalls, thus responsible for a lot of activity. This is what the -P switch
+does:
+
+# ./ppchcalls.py -P
+Tracing ppc hcalls, printing top 10... Ctrl+C to quit.
+^C[04:07:39]
+PID    COMM                                      COUNT
+14118  top                                        1073
+0      [unknown]                                   286
+1679   bash                                         67
+14111  kworker/12:0-events_freezable_power_         12
+2      kthreadd                                      4
+11753  kworker/0:0-events                            4
+141    kworker/21:0H-xfs-log/dm-0                    3
+847    systemd-udevd                                 3
+14116  ppchcalls.py                                  3
+13368  kworker/u64:1-events_unbound                  3
+
+Detaching...
+#
+
+Sometimes, you'd want both, the process making the most hcalls and respective
+process-wide latencies. All you need to do is combine both options:
+
+# ./ppchcalls.py -P -L
+Tracing ppc hcalls, printing top 10... Ctrl+C to quit.
+^C[04:35:27]
+PID    COMM                                      COUNT          MIN (us)          MAX (us)          AVG (us)
+0      [unknown]                                    69             0.666            13.059             2.834
+14151  kworker/12:1-events_freezable_power_          8             6.489            84.470            34.354
+11753  kworker/0:0-events                            4             1.415             2.059             1.784
+14152  kworker/u64:0-events_unbound                  2             2.402             2.935             2.668
+14154  ppchcalls.py                                  2             3.139            11.934             7.537
+1751   sshd                                          1             7.227             7.227             7.227
+3413   kworker/6:2-mm_percpu_wq                      1             6.775             6.775             6.775
+
+Detaching...
+#
+
+Sometimes, you'd only care about a single hcall rather than all hcalls.
+Use the --hcall option for this; the following example also demonstrates
+the --hcall option, for printing at predefined intervals:
+
+# ./ppchcalls.py --hcall H_VIO_SIGNAL -i 5
+hcall H_VIO_SIGNAL , hcall_nr =260
+Tracing ppc hcall 'H_VIO_SIGNAL'... Ctrl+C to quit.
+[04:29:56]
+PPC HCALL                                        COUNT
+H_VIO_SIGNAL                                         6
+
+[04:30:01]
+PPC HCALL                                        COUNT
+H_VIO_SIGNAL                                         4
+
+[04:30:06]
+PPC HCALL                                        COUNT
+H_VIO_SIGNAL                                         6
+
+[04:30:07]
+PPC HCALL                                        COUNT
+
+Detaching...
+#
+
+USAGE:
+# ./ppchcalls.py -h
+usage: ppchcalls.py [-h] [-p PID] [-t TID] [-i INTERVAL] [-d DURATION]
+                    [-T TOP] [-x] [-e ERRNO] [-L] [-m] [-P] [-l]
+                    [--hcall HCALL]
+
+Summarize ppc hcall counts and latencies.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -p PID, --pid PID     trace only this pid
+  -t TID, --tid TID     trace only this tid
+  -i INTERVAL, --interval INTERVAL
+                        print summary at this interval (seconds)
+  -d DURATION, --duration DURATION
+                        total duration of trace, in seconds
+  -T TOP, --top TOP     print only the top hcalls by count or latency
+  -x, --failures        trace only failed hcalls (return < 0)
+  -e ERRNO, --errno ERRNO
+                        trace only hcalls that return this error (numeric or
+                        EPERM, etc.)
+  -L, --latency         collect hcall latency
+  -m, --milliseconds    display latency in milliseconds (default:
+                        microseconds)
+  -P, --process         count by process and not by hcall
+  -l, --list            print list of recognized hcalls and exit
+  --hcall HCALL         trace this hcall only (use option -l to get all
+                        recognized hcalls)
+#
+
+Ref: https://docs.kernel.org/powerpc/papr_hcalls.html
diff --git a/tools/profile.py b/tools/profile.py
index 47d2adf..7961550 100755
--- a/tools/profile.py
+++ b/tools/profile.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # profile  Profile CPU usage by sampling stack traces at a timed interval.
@@ -25,6 +25,7 @@
 # 15-Jul-2016   Brendan Gregg   Created this.
 # 20-Oct-2016      "      "     Switched to use the new 4.9 support.
 # 26-Jan-2019      "      "     Changed to exclude CPU idle by default.
+# 11-Apr-2023   Rocky Xing      Added option to increase hash storage size.
 
 from __future__ import print_function
 from bcc import BPF, PerfType, PerfSWConfig
@@ -51,6 +52,13 @@
         raise argparse.ArgumentTypeError("must be positive")
     return ival
 
+def positive_int_list(val):
+    vlist = val.split(",")
+    if len(vlist) <= 0:
+        raise argparse.ArgumentTypeError("must be an integer list")
+
+    return [positive_int(v) for v in vlist]
+
 def positive_nonzero_int(val):
     ival = positive_int(val)
     if ival == 0:
@@ -81,10 +89,10 @@
     formatter_class=argparse.RawDescriptionHelpFormatter,
     epilog=examples)
 thread_group = parser.add_mutually_exclusive_group()
-thread_group.add_argument("-p", "--pid", type=positive_int,
-    help="profile process with this PID only")
-thread_group.add_argument("-L", "--tid", type=positive_int,
-    help="profile thread with this TID only")
+thread_group.add_argument("-p", "--pid", type=positive_int_list,
+    help="profile process with one or more comma separated PIDs only")
+thread_group.add_argument("-L", "--tid", type=positive_int_list,
+    help="profile thread with one or more comma separated TIDs only")
 # TODO: add options for user/kernel threads only
 stack_group = parser.add_mutually_exclusive_group()
 stack_group.add_argument("-U", "--user-stacks-only", action="store_true",
@@ -104,6 +112,9 @@
     help="include CPU idle stacks")
 parser.add_argument("-f", "--folded", action="store_true",
     help="output folded format, one line per stack (for flame graphs)")
+parser.add_argument("--hash-storage-size", default=40960,
+    type=positive_nonzero_int,
+    help="the number of hash keys that can be stored and (default %(default)s)")
 parser.add_argument("--stack-storage-size", default=16384,
     type=positive_nonzero_int,
     help="the number of unique stack traces that can be stored and "
@@ -122,7 +133,6 @@
 
 # option logic
 args = parser.parse_args()
-pid = int(args.pid) if args.pid is not None else -1
 duration = int(args.duration)
 debug = 0
 need_delimiter = args.delimited and not (args.kernel_stacks_only or
@@ -146,15 +156,24 @@
     int kernel_stack_id;
     char name[TASK_COMM_LEN];
 };
-BPF_HASH(counts, struct key_t);
+BPF_HASH(counts, struct key_t, u64, HASH_STORAGE_SIZE);
 BPF_STACK_TRACE(stack_traces, STACK_STORAGE_SIZE);
 
 // This code gets a bit complex. Probably not suitable for casual hacking.
 
 int do_perf_event(struct bpf_perf_event_data *ctx) {
-    u64 id = bpf_get_current_pid_tgid();
-    u32 tgid = id >> 32;
-    u32 pid = id;
+    u32 tgid = 0;
+    u32 pid = 0;
+
+    struct bpf_pidns_info ns = {};
+    if (USE_PIDNS && !bpf_get_ns_current_pid_tgid(PIDNS_DEV, PIDNS_INO, &ns, sizeof(struct bpf_pidns_info))) {
+        tgid = ns.tgid;
+        pid = ns.pid;
+    } else {
+        u64 id = bpf_get_current_pid_tgid();
+        tgid = id >> 32;
+        pid = id;
+    }
 
     if (IDLE_FILTER)
         return 0;
@@ -206,6 +225,17 @@
 }
 """
 
+# pid-namespace translation
+try:
+    devinfo = os.stat("/proc/self/ns/pid")
+    bpf_text = bpf_text.replace('USE_PIDNS', "1")
+    bpf_text = bpf_text.replace('PIDNS_DEV', str(devinfo.st_dev))
+    bpf_text = bpf_text.replace('PIDNS_INO', str(devinfo.st_ino))
+except:
+    bpf_text = bpf_text.replace('USE_PIDNS', "0")
+    bpf_text = bpf_text.replace('PIDNS_DEV', "0")
+    bpf_text = bpf_text.replace('PIDNS_INO', "0")
+
 # set idle filter
 idle_filter = "pid == 0"
 if args.include_idle:
@@ -214,18 +244,20 @@
 
 # set process/thread filter
 thread_context = ""
+thread_filter = ""
 if args.pid is not None:
     thread_context = "PID %s" % args.pid
-    thread_filter = 'tgid == %s' % args.pid
+    thread_filter = " || ".join("tgid == " + str(pid) for pid in args.pid)
 elif args.tid is not None:
     thread_context = "TID %s" % args.tid
-    thread_filter = 'pid == %s' % args.tid
+    thread_filter = " || ".join("pid == " + str(tid) for tid in args.tid)
 else:
     thread_context = "all threads"
     thread_filter = '1'
 bpf_text = bpf_text.replace('THREAD_FILTER', thread_filter)
 
 # set stack storage size
+bpf_text = bpf_text.replace('HASH_STORAGE_SIZE', str(args.hash_storage_size))
 bpf_text = bpf_text.replace('STACK_STORAGE_SIZE', str(args.stack_storage_size))
 
 # handle stack args
@@ -306,6 +338,7 @@
 missing_stacks = 0
 has_collision = False
 counts = b.get_table("counts")
+htab_full = args.hash_storage_size == len(counts)
 stack_traces = b.get_table("stack_traces")
 for k, v in sorted(counts.items(), key=lambda counts: counts[1].value):
     # handle get_stackid errors
@@ -335,21 +368,21 @@
         # print folded stack output
         user_stack = list(user_stack)
         kernel_stack = list(kernel_stack)
-        line = [k.name]
+        line = [k.name.decode('utf-8', 'replace')]
         # if we failed to get the stack is, such as due to no space (-ENOMEM) or
         # hash collision (-EEXIST), we still print a placeholder for consistency
         if not args.kernel_stacks_only:
             if stack_id_err(k.user_stack_id):
-                line.append(b"[Missed User Stack]")
+                line.append("[Missed User Stack]")
             else:
-                line.extend([b.sym(addr, k.pid) for addr in reversed(user_stack)])
+                line.extend([b.sym(addr, k.pid).decode('utf-8', 'replace') for addr in reversed(user_stack)])
         if not args.user_stacks_only:
-            line.extend([b"-"] if (need_delimiter and k.kernel_stack_id >= 0 and k.user_stack_id >= 0) else [])
+            line.extend(["-"] if (need_delimiter and k.kernel_stack_id >= 0 and k.user_stack_id >= 0) else [])
             if stack_id_err(k.kernel_stack_id):
-                line.append(b"[Missed Kernel Stack]")
+                line.append("[Missed Kernel Stack]")
             else:
-                line.extend([aksym(addr) for addr in reversed(kernel_stack)])
-        print("%s %d" % (b";".join(line).decode('utf-8', 'replace'), v.value))
+                line.extend([aksym(addr).decode('utf-8', 'replace') for addr in reversed(kernel_stack)])
+        print("%s %d" % (";".join(line), v.value))
     else:
         # print default multi-line stack output
         if not args.user_stacks_only:
@@ -357,7 +390,7 @@
                 print("    [Missed Kernel Stack]")
             else:
                 for addr in kernel_stack:
-                    print("    %s" % aksym(addr))
+                    print("    %s" % aksym(addr).decode('utf-8', 'replace'))
         if not args.kernel_stacks_only:
             if need_delimiter and k.user_stack_id >= 0 and k.kernel_stack_id >= 0:
                 print("    --")
@@ -376,3 +409,8 @@
     print("WARNING: %d stack traces could not be displayed.%s" %
         (missing_stacks, enomem_str),
         file=stderr)
+
+# check whether hash table is full
+if htab_full:
+    print("WARNING: hash table full. Consider increasing --hash-storage-size.",
+        file=stderr)
diff --git a/tools/profile_example.txt b/tools/profile_example.txt
index 2c7e702..7dbc33a 100644
--- a/tools/profile_example.txt
+++ b/tools/profile_example.txt
@@ -154,13 +154,45 @@
         7
 
 Again, I've truncated some lines. Now we're just analyzing the dd process.
-The filtering is performed in kernel context, for efficiency.
+The filter is configured by specifying the target PID (from the current PID
+namespace where we are profiling) via the "-p" flag.
+Filtering is performed in kernel context, for efficiency, with automatic
+PID translation to the top-level namespace (if required).
 
 This output has some "[unknown]" frames that probably have valid addresses,
 but we're lacking the symbol translation. This is a common for all profilers
 on Linux, and is usually fixable. See the DEBUGGING section of the profile(8)
 man page.
 
+You can also profile different process:
+# ./profile -p 2040,1316151
+Sampling at 49 Hertz of PID [2040, 1316151] by user + kernel stack... Hit Ctrl-C to end.
+^C
+    PyEval_RestoreThread
+    [unknown]
+    [unknown]
+    -                python3 (1316151)
+        1
+[...]
+    rcu_all_qs
+    rcu_all_qs
+    dput
+    step_into
+    handle_dots.part.0
+    walk_component
+    link_path_walk.part.0
+    path_openat
+    do_filp_open
+    do_sys_openat2
+    do_sys_open
+    __x64_sys_openat
+    do_syscall_64
+    entry_SYSCALL_64_after_hwframe
+    __libc_open64
+    [unknown]
+    -                python3 (2040)
+        1
+
 
 Lets add delimiters between the user and kernel stacks, using -d:
 
@@ -715,7 +747,7 @@
 
 # ./profile -h
 usage: profile.py [-h] [-p PID | -L TID] [-U | -K] [-F FREQUENCY | -c COUNT]
-                  [-d] [-a] [-I] [-f]
+                  [-d] [-a] [-I] [-f] [--hash-storage-size HASH_STORAGE_SIZE]
                   [--stack-storage-size STACK_STORAGE_SIZE] [-C CPU]
                   [--cgroupmap CGROUPMAP] [--mntnsmap MNTNSMAP]
                   [duration]
@@ -727,8 +759,10 @@
 
 optional arguments:
   -h, --help            show this help message and exit
-  -p PID, --pid PID     profile process with this PID only
-  -L TID, --tid TID     profile thread with this TID only
+  -p PID, --pid PID     profile process with one or more comma separated PIDs
+                        only
+  -L TID, --tid TID     profile thread with one or more comma separated TIDs
+                        only
   -U, --user-stacks-only
                         show stacks from user space only (no kernel space
                         stacks)
@@ -744,6 +778,9 @@
   -I, --include-idle    include CPU idle stacks
   -f, --folded          output folded format, one line per stack (for flame
                         graphs)
+  --hash-storage-size HASH_STORAGE_SIZE
+                        the number of hash keys that can be stored and
+                        (default 40960)
   --stack-storage-size STACK_STORAGE_SIZE
                         the number of unique stack traces that can be stored
                         and displayed (default 16384)
diff --git a/tools/rdmaucma.py b/tools/rdmaucma.py
new file mode 100755
index 0000000..f007d14
--- /dev/null
+++ b/tools/rdmaucma.py
@@ -0,0 +1,167 @@
+#!/usr/bin/python
+# @lint-avoid-python-3-compatibility-imports
+#
+# rdmaucma: Trace RDMA Userspace Connection Manager Access Event.
+#           For Linux, uses BCC, eBPF.
+#
+# USAGE: rdmaucma [-h]
+#
+# Copyright (c) 2023 zhenwei pi
+# Licensed under the Apache License, Version 2.0 (the "License")
+#
+# 29-MAY-2023  zhenwei pi  Created this.
+
+from __future__ import print_function
+from bcc import BPF
+from socket import inet_ntop, AF_INET, AF_INET6
+import socket, struct
+import argparse
+import ctypes
+from time import strftime
+
+# arguments
+examples = """examples:
+    ./rdmaucma            # Trace all RDMA Userspace Connection Manager Access Event
+"""
+parser = argparse.ArgumentParser(
+    description="Trace RDMA Userspace Connection Manager Access Event",
+    formatter_class=argparse.RawDescriptionHelpFormatter,
+    epilog=examples)
+parser.add_argument("-D", "--debug", action="store_true",
+    help="print BPF program before starting (for debugging purposes)")
+parser.add_argument("--ebpf", action="store_true",
+    help=argparse.SUPPRESS)
+args = parser.parse_args()
+
+# define BPF program
+bpf_text = """
+#include <linux/bpf.h>
+#include <uapi/linux/ptrace.h>
+#include <rdma/rdma_cm.h>
+
+struct ipv4_data_t {
+    u32 saddr;
+    u32 daddr;
+    u16 sport;
+    u16 dport;
+    int event;
+};
+
+BPF_PERF_OUTPUT(ipv4_events);
+
+struct ipv6_data_t {
+    unsigned __int128 saddr;
+    unsigned __int128 daddr;
+    u16 sport;
+    u16 dport;
+    int event;
+};
+
+BPF_PERF_OUTPUT(ipv6_events);
+
+int trace_ucma_event_handler(struct pt_regs *ctx,
+                             struct rdma_cm_id *cm_id,
+                             struct rdma_cm_event *event)
+{
+    struct sockaddr_storage *ss = &cm_id->route.addr.src_addr;
+
+    if (ss->ss_family == AF_INET) {
+        struct ipv4_data_t ipv4_data = { 0 };
+        struct sockaddr_in *addr4 = (struct sockaddr_in *)ss;
+        ipv4_data.sport = addr4->sin_port;
+        ipv4_data.saddr = addr4->sin_addr.s_addr;
+
+        addr4 = (struct sockaddr_in *)&cm_id->route.addr.dst_addr;
+        ipv4_data.dport = addr4->sin_port;
+        ipv4_data.daddr = addr4->sin_addr.s_addr;
+
+        ipv4_data.event = event->event;
+        ipv4_events.perf_submit(ctx, &ipv4_data, sizeof(ipv4_data));
+    } else if (ss->ss_family == AF_INET6) {
+        struct ipv6_data_t ipv6_data = { 0 };
+        struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)ss;
+        ipv6_data.sport = addr6->sin6_port;
+        bpf_probe_read_kernel(&ipv6_data.saddr, sizeof(ipv6_data.saddr), addr6->sin6_addr.in6_u.u6_addr32);
+
+        addr6 = (struct sockaddr_in6 *)&cm_id->route.addr.dst_addr;
+        ipv6_data.dport = addr6->sin6_port;
+        bpf_probe_read_kernel(&ipv6_data.daddr, sizeof(ipv6_data.daddr), addr6->sin6_addr.in6_u.u6_addr32);
+
+        ipv6_data.event = event->event;
+        ipv6_events.perf_submit(ctx, &ipv6_data, sizeof(ipv6_data));
+    } else {
+        return -EPROTONOSUPPORT;
+    }
+
+    return 0;
+}
+"""
+
+# debug/dump ebpf enable or not
+if args.debug or args.ebpf:
+    print(bpf_text)
+    if args.ebpf:
+        exit()
+
+# load BPF program
+b = BPF(text=bpf_text)
+b.attach_kprobe(event="ucma_event_handler", fn_name="trace_ucma_event_handler")
+
+# see linux/include/rdma/rdma_cm.h
+rdma_cm_event = [
+        "address resolved",
+        "address error",
+        "route resolved ",
+        "route error",
+        "connect request",
+        "connect response",
+        "connect error",
+        "unreachable",
+        "rejected",
+        "established",
+        "disconnected",
+        "device removal",
+        "multicast join",
+        "multicast error",
+        "address change",
+        "timewait exit" ]
+
+def print_ipv4_event(cpu, data, size):
+    event = b["ipv4_events"].event(data)
+
+    cm_event = "unknown event"
+    if event.event < len(rdma_cm_event):
+        cm_event = rdma_cm_event[event.event]
+
+    print("%-9s %-16s %-6s %-45s %-45s" % (strftime("%H:%M:%S").encode('ascii'),
+        cm_event, "IPv4",
+        inet_ntop(AF_INET, struct.pack("I", event.saddr)) + ":" + str(socket.ntohs(event.sport)),
+        inet_ntop(AF_INET, struct.pack("I", event.daddr)) + ":" + str(socket.ntohs(event.dport))))
+
+def print_ipv6_event(cpu, data, size):
+    event = b["ipv6_events"].event(data)
+
+    cm_event = "unknown event"
+    if event.event < len(rdma_cm_event):
+        cm_event = rdma_cm_event[event.event]
+
+    print("%-9s %-16s %-6s %-45s %-45s" % (strftime("%H:%M:%S").encode('ascii'),
+        cm_event, "IPv6",
+        inet_ntop(AF_INET6, event.saddr) + ":" + str(socket.ntohs(event.sport)),
+        inet_ntop(AF_INET6, event.daddr) + ":" + str(socket.ntohs(event.dport))))
+
+
+b["ipv4_events"].open_perf_buffer(print_ipv4_event)
+b["ipv6_events"].open_perf_buffer(print_ipv6_event)
+
+# output
+print("Tracing RDMA Userspace Connection Manager Access event... Hit Ctrl-C to end.")
+
+# address length 39 = max("2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b", "255.255.255.255")
+print("%-9s %-16s %-4s %-45s %-45s" % ("Timestamp", "Event", "Family", "Local", "Remote"))
+
+while (1):
+    try:
+        b.perf_buffer_poll()
+    except KeyboardInterrupt:
+        exit()
diff --git a/tools/rdmaucma_example.txt b/tools/rdmaucma_example.txt
new file mode 100644
index 0000000..1f11fc0
--- /dev/null
+++ b/tools/rdmaucma_example.txt
@@ -0,0 +1,36 @@
+Demonstrations of rdmaucma, the Linux eBPF/bcc version.
+
+
+This program traces RDMA UCMA(Userspace Connection Manager Access) events,
+then help us to analyze issues on RDMA CM.
+
+Example of rdmaucma:
+# ./rdmaucma
+Tracing RDMA Userspace Connection Manager Access event... Hit Ctrl-C to end.
+Timestamp Event            Family Local                                         Remote
+09:47:49  connect request  IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:61293
+09:47:49  established      IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:61293
+09:47:51  disconnected     IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:61293
+09:47:52  connect request  IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:33402
+09:47:52  established      IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:33402
+09:47:53  disconnected     IPv6   fdcc:abcd:15:479::165:6379                    fdcc:abcd:15:479::166:33402
+09:48:06  connect request  IPv4   192.168.122.165:6379                          192.168.122.166:41498
+09:48:06  established      IPv4   192.168.122.165:6379                          192.168.122.166:41498
+09:48:10  disconnected     IPv4   192.168.122.165:6379                          192.168.122.166:41498
+09:48:11  connect request  IPv4   192.168.122.165:6379                          192.168.122.166:19047
+09:48:11  established      IPv4   192.168.122.165:6379                          192.168.122.166:19047
+09:48:11  disconnected     IPv4   192.168.122.165:6379                          192.168.122.166:19047
+
+Full USAGE:
+
+# ./rdmaucma -h
+usage: rdmaucma [-h] [-D]
+
+Trace RDMA Userspace Connection Manager Access Event
+
+optional arguments:
+  -h, --help   show this help message and exit
+  -D, --debug  print BPF program before starting (for debugging purposes)
+
+examples:
+    ./rdmaucma            # Trace all RDMA Userspace Connection Manager Access Event
diff --git a/tools/readahead.py b/tools/readahead.py
index 1f6e9a4..adad2ea 100755
--- a/tools/readahead.py
+++ b/tools/readahead.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # readahead     Show performance of read-ahead cache
@@ -12,6 +12,7 @@
 #
 # 20-Aug-2020   Suchakra Sharma     Ported from bpftrace to BCC
 # 17-Sep-2021   Hengqi Chen         Migrated to kfunc
+# 30-Jan-2023   Rong Tao            Support more kfunc/kprobe, introduce folio
 
 from __future__ import print_function
 from bcc import BPF
@@ -38,6 +39,7 @@
 bpf_text = """
 #include <uapi/linux/ptrace.h>
 #include <linux/mm_types.h>
+#include <linux/mm.h>
 
 BPF_HASH(flag, u32, u8);            // used to track if we are in do_page_cache_readahead()
 BPF_HASH(birth, struct page*, u64); // used to track timestamps of cache alloc'ed page
@@ -65,7 +67,7 @@
 int exit__page_cache_alloc(struct pt_regs *ctx) {
     u32 pid;
     u64 ts;
-    struct page *retval = (struct page*) PT_REGS_RC(ctx);
+    struct page *retval = (struct page*) GET_RETVAL_PAGE;
     u32 zero = 0; // static key for accessing pages[0]
     pid = bpf_get_current_pid_tgid();
     u8 *f = flag.lookup(&pid);
@@ -111,21 +113,6 @@
     return 0;
 }
 
-KRETFUNC_PROBE(__page_cache_alloc, gfp_t gfp, struct page *retval)
-{
-    u64 ts;
-    u32 zero = 0; // static key for accessing pages[0]
-    u32 pid = bpf_get_current_pid_tgid();
-    u8 *f = flag.lookup(&pid);
-
-    if (f != NULL && *f == 1) {
-        ts = bpf_ktime_get_ns();
-        birth.update(&retval, &ts);
-        pages.atomic_increment(zero);
-    }
-    return 0;
-}
-
 KFUNC_PROBE(mark_page_accessed, struct page *arg0)
 {
     u64 ts, delta;
@@ -142,23 +129,79 @@
 }
 """
 
+bpf_text_kfunc_cache_alloc_ret_page = """
+KRETFUNC_PROBE(__page_cache_alloc, gfp_t gfp, struct page *retval)
+{
+    u64 ts;
+    u32 zero = 0; // static key for accessing pages[0]
+    u32 pid = bpf_get_current_pid_tgid();
+    u8 *f = flag.lookup(&pid);
+
+    if (f != NULL && *f == 1) {
+        ts = bpf_ktime_get_ns();
+        birth.update(&retval, &ts);
+        pages.atomic_increment(zero);
+    }
+    return 0;
+}
+"""
+
+bpf_text_kfunc_cache_alloc_ret_folio = """
+KRETFUNC_PROBE(filemap_alloc_folio, gfp_t gfp, unsigned int order,
+    struct folio *retval)
+{
+    u64 ts;
+    u32 zero = 0; // static key for accessing pages[0]
+    u32 pid = bpf_get_current_pid_tgid();
+    u8 *f = flag.lookup(&pid);
+    struct page *page = folio_page(retval, 0);
+
+    if (f != NULL && *f == 1) {
+        ts = bpf_ktime_get_ns();
+        birth.update(&page, &ts);
+        pages.atomic_increment(zero);
+    }
+    return 0;
+}
+"""
+
 if BPF.support_kfunc():
     if BPF.get_kprobe_functions(b"__do_page_cache_readahead"):
         ra_func = "__do_page_cache_readahead"
-    else:
+    elif BPF.get_kprobe_functions(b"do_page_cache_ra"):
         ra_func = "do_page_cache_ra"
+    elif BPF.get_kprobe_functions(b"page_cache_ra_order"):
+        ra_func = "page_cache_ra_order"
+    else:
+        print("Not found any kfunc.")
+        exit()
     bpf_text += bpf_text_kfunc.replace("RA_FUNC", ra_func)
+    if BPF.get_kprobe_functions(b"__page_cache_alloc"):
+        bpf_text += bpf_text_kfunc_cache_alloc_ret_page
+    else:
+        bpf_text += bpf_text_kfunc_cache_alloc_ret_folio
     b = BPF(text=bpf_text)
 else:
     bpf_text += bpf_text_kprobe
-    b = BPF(text=bpf_text)
     if BPF.get_kprobe_functions(b"__do_page_cache_readahead"):
         ra_event = "__do_page_cache_readahead"
-    else:
+    elif BPF.get_kprobe_functions(b"do_page_cache_ra"):
         ra_event = "do_page_cache_ra"
+    elif BPF.get_kprobe_functions(b"page_cache_ra_order"):
+        ra_event = "page_cache_ra_order"
+    else:
+        print("Not found any kprobe.")
+        exit()
+    if BPF.get_kprobe_functions(b"__page_cache_alloc"):
+        cache_func = "__page_cache_alloc"
+        bpf_text = bpf_text.replace('GET_RETVAL_PAGE', 'PT_REGS_RC(ctx)')
+    else:
+        cache_func = "filemap_alloc_folio"
+        bpf_text = bpf_text.replace('GET_RETVAL_PAGE', 'folio_page((struct folio *)PT_REGS_RC(ctx), 0)')
+    b = BPF(text=bpf_text)
     b.attach_kprobe(event=ra_event, fn_name="entry__do_page_cache_readahead")
     b.attach_kretprobe(event=ra_event, fn_name="exit__do_page_cache_readahead")
-    b.attach_kretprobe(event="__page_cache_alloc", fn_name="exit__page_cache_alloc")
+    b.attach_kretprobe(event=cache_func, fn_name="exit__page_cache_alloc")
     b.attach_kprobe(event="mark_page_accessed", fn_name="entry_mark_page_accessed")
 
 # header
diff --git a/tools/runqlat.py b/tools/runqlat.py
index 9edd7be..e991e61 100755
--- a/tools/runqlat.py
+++ b/tools/runqlat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # runqlat   Run queue (scheduler) latency as a histogram.
@@ -74,20 +74,18 @@
 #include <linux/init_task.h>
 
 typedef struct pid_key {
-    u64 id;    // work around
+    u32 id;
     u64 slot;
 } pid_key_t;
 
 typedef struct pidns_key {
-    u64 id;    // work around
+    u32 id;
     u64 slot;
 } pidns_key_t;
 
 BPF_HASH(start, u32);
 STORAGE
 
-struct rq;
-
 // record enqueue timestamp
 static int trace_enqueue(u32 tgid, u32 pid)
 {
@@ -272,7 +270,7 @@
     bpf_text = bpf_text.replace('STORAGE',
         'BPF_HISTOGRAM(dist, pid_key_t);')
     bpf_text = bpf_text.replace('STORE',
-        'pid_key_t key = {.id = ' + pid + ', .slot = bpf_log2l(delta)}; ' +
+        'pid_key_t key = {}; key.id = ' + pid + '; key.slot = bpf_log2l(delta); ' +
         'dist.increment(key);')
 elif args.pidnss:
     section = "pidns"
diff --git a/tools/runqlen.py b/tools/runqlen.py
index c77947a..d4d997d 100755
--- a/tools/runqlen.py
+++ b/tools/runqlen.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # runqlen    Summarize scheduler run queue length as a histogram.
@@ -20,7 +20,7 @@
 # 12-Dec-2016   Brendan Gregg   Created this.
 
 from __future__ import print_function
-from bcc import BPF, PerfType, PerfSWConfig
+from bcc import BPF, PerfType, PerfSWConfig, utils
 from time import sleep, strftime
 from tempfile import NamedTemporaryFile
 from os import open, close, dup, unlink, O_WRONLY
@@ -90,7 +90,7 @@
 
     # Get a temporary file name
     tmp_file = NamedTemporaryFile(delete=False)
-    tmp_file.close();
+    tmp_file.close()
 
     # Duplicate and close stderr (fd = 2)
     old_stderr = dup(2)
@@ -122,9 +122,12 @@
 
 // Declare enough of cfs_rq to find nr_running, since we can't #import the
 // header. This will need maintenance. It is from kernel/sched/sched.h:
+// The runnable_weight field is removed from Linux 5.7.0
 struct cfs_rq_partial {
     struct load_weight load;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 7, 0)
     RUNNABLE_WEIGHT_FIELD
+#endif
     unsigned int nr_running, h_nr_running;
 };
 
@@ -163,7 +166,7 @@
 # code substitutions
 if args.cpus:
     bpf_text = bpf_text.replace('STORAGE',
-        'BPF_HISTOGRAM(dist, cpu_key_t);')
+        'BPF_HISTOGRAM(dist, cpu_key_t, MAX_CPUS);')
     bpf_text = bpf_text.replace('STORE', 'cpu_key_t key = {.slot = len}; ' +
         'key.cpu = bpf_get_smp_processor_id(); ' +
         'dist.increment(key);')
@@ -172,7 +175,10 @@
         'BPF_HISTOGRAM(dist, unsigned int);')
     bpf_text = bpf_text.replace('STORE', 'dist.atomic_increment(len);')
 
-if check_runnable_weight_field():
+# If target has BTF enabled, use BTF to check runnable_weight field exists in
+# cfs_rq first, otherwise fallback to use check_runnable_weight_field().
+if BPF.kernel_struct_has_field(b'cfs_rq', b'runnable_weight') == 1 \
+        or check_runnable_weight_field():
     bpf_text = bpf_text.replace('RUNNABLE_WEIGHT_FIELD', 'unsigned long runnable_weight;')
 else:
     bpf_text = bpf_text.replace('RUNNABLE_WEIGHT_FIELD', '')
@@ -182,8 +188,10 @@
     if args.ebpf:
         exit()
 
+num_cpus = len(utils.get_online_cpus())
+
 # initialize BPF & perf_events
-b = BPF(text=bpf_text)
+b = BPF(text=bpf_text, cflags=['-DMAX_CPUS=%s' % str(num_cpus)])
 b.attach_perf_event(ev_type=PerfType.SOFTWARE,
     ev_config=PerfSWConfig.CPU_CLOCK, fn_name="do_perf_event",
     sample_period=0, sample_freq=frequency)
diff --git a/tools/runqslower.py b/tools/runqslower.py
index 6c94d6c..70e2083 100755
--- a/tools/runqslower.py
+++ b/tools/runqslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # runqslower    Trace long process scheduling delays.
@@ -52,6 +52,8 @@
     epilog=examples)
 parser.add_argument("min_us", nargs="?", default='10000',
     help="minimum run queue latency to trace, in us (default 10000)")
+parser.add_argument("-P", "--previous", action="store_true",
+    help="also show previous task name and TID")
 parser.add_argument("--ebpf", action="store_true",
     help=argparse.SUPPRESS)
 
@@ -60,8 +62,6 @@
     help="trace this PID only", type=int)
 thread_group.add_argument("-t", "--tid", metavar="TID", dest="tid",
     help="trace this TID only", type=int)
-thread_group.add_argument("-P", "--previous", action="store_true",
-    help="also show previous task name and TID")
 args = parser.parse_args()
 
 min_us = int(args.min_us)
@@ -74,9 +74,7 @@
 #include <linux/nsproxy.h>
 #include <linux/pid_namespace.h>
 
-BPF_HASH(start, u32);
-
-struct rq;
+BPF_ARRAY(start, u64, MAX_PID);
 
 struct data_t {
     u32 pid;
@@ -114,16 +112,16 @@
 // calculate latency
 int trace_run(struct pt_regs *ctx, struct task_struct *prev)
 {
-    u32 pid, tgid, prev_pid;
+    u32 pid, tgid;
 
     // ivcsw: treat like an enqueue event and store timestamp
-    prev_pid = prev->pid;
     if (prev->STATE_FIELD == TASK_RUNNING) {
         tgid = prev->tgid;
+        pid = prev->pid;
         u64 ts = bpf_ktime_get_ns();
-        if (prev_pid != 0) {
+        if (pid != 0) {
             if (!(FILTER_PID) && !(FILTER_TGID)) {
-                start.update(&prev_pid, &ts);
+                start.update(&pid, &ts);
             }
         }
     }
@@ -134,7 +132,7 @@
 
     // fetch timestamp and calculate delta
     tsp = start.lookup(&pid);
-    if (tsp == 0) {
+    if ((tsp == 0) || (*tsp == 0)) {
         return 0;   // missed enqueue
     }
     delta_us = (bpf_ktime_get_ns() - *tsp) / 1000;
@@ -144,7 +142,7 @@
 
     struct data_t data = {};
     data.pid = pid;
-    data.prev_pid = prev_pid;
+    data.prev_pid = prev->pid;
     data.delta_us = delta_us;
     bpf_get_current_comm(&data.task, sizeof(data.task));
     bpf_probe_read_kernel_str(&data.prev_task, sizeof(data.prev_task), prev->comm);
@@ -152,7 +150,8 @@
     // output
     events.perf_submit(ctx, &data, sizeof(data));
 
-    start.delete(&pid);
+    //array map has no delete method, set ts to 0 instead
+    *tsp = 0;
     return 0;
 }
 """
@@ -181,30 +180,32 @@
     // TP_PROTO(bool preempt, struct task_struct *prev, struct task_struct *next)
     struct task_struct *prev = (struct task_struct *)ctx->args[1];
     struct task_struct *next= (struct task_struct *)ctx->args[2];
-    u32 tgid, pid, prev_pid;
+    u32 tgid, pid;
     long state;
 
     // ivcsw: treat like an enqueue event and store timestamp
     bpf_probe_read_kernel(&state, sizeof(long), (const void *)&prev->STATE_FIELD);
-    bpf_probe_read_kernel(&prev_pid, sizeof(prev->pid), &prev->pid);
+    bpf_probe_read_kernel(&pid, sizeof(prev->pid), &prev->pid);
     if (state == TASK_RUNNING) {
         bpf_probe_read_kernel(&tgid, sizeof(prev->tgid), &prev->tgid);
         u64 ts = bpf_ktime_get_ns();
-        if (prev_pid != 0) {
+        if (pid != 0) {
             if (!(FILTER_PID) && !(FILTER_TGID)) {
-                start.update(&prev_pid, &ts);
+                start.update(&pid, &ts);
             }
         }
 
     }
 
-    bpf_probe_read_kernel(&pid, sizeof(next->pid), &next->pid);
-
+    u32 prev_pid;
     u64 *tsp, delta_us;
 
+    prev_pid = pid;
+    bpf_probe_read_kernel(&pid, sizeof(next->pid), &next->pid);
+
     // fetch timestamp and calculate delta
     tsp = start.lookup(&pid);
-    if (tsp == 0) {
+    if ((tsp == 0) || (*tsp == 0)) {
         return 0;   // missed enqueue
     }
     delta_us = (bpf_ktime_get_ns() - *tsp) / 1000;
@@ -222,7 +223,8 @@
     // output
     events.perf_submit(ctx, &data, sizeof(data));
 
-    start.delete(&pid);
+    //array map has no delete method, set ts to 0 instead
+    *tsp = 0;
     return 0;
 }
 """
@@ -262,12 +264,14 @@
 def print_event(cpu, data, size):
     event = b["events"].event(data)
     if args.previous:
-        print("%-8s %-16s %-6s %14s %-16s %-6s" % (strftime("%H:%M:%S"), event.task, event.pid, event.delta_us, event.prev_task, event.prev_pid))
+        print("%-8s %-16s %-6s %14s %-16s %-6s" % (strftime("%H:%M:%S"), event.task.decode('utf-8', 'replace'), event.pid, event.delta_us, event.prev_task.decode('utf-8', 'replace'), event.prev_pid))
     else:
-        print("%-8s %-16s %-6s %14s" % (strftime("%H:%M:%S"), event.task, event.pid, event.delta_us))
+        print("%-8s %-16s %-6s %14s" % (strftime("%H:%M:%S"), event.task.decode('utf-8', 'replace'), event.pid, event.delta_us))
+
+max_pid = int(open("/proc/sys/kernel/pid_max").read())
 
 # load BPF program
-b = BPF(text=bpf_text)
+b = BPF(text=bpf_text, cflags=["-DMAX_PID=%d" % max_pid])
 if not is_support_raw_tp:
     b.attach_kprobe(event="ttwu_do_wakeup", fn_name="trace_ttwu_do_wakeup")
     b.attach_kprobe(event="wake_up_new_task", fn_name="trace_wake_up_new_task")
diff --git a/tools/shmsnoop.py b/tools/shmsnoop.py
index 11b4b6f..3069899 100755
--- a/tools/shmsnoop.py
+++ b/tools/shmsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # shmsnoop Trace shm*() syscalls.
diff --git a/tools/slabratetop.py b/tools/slabratetop.py
index a86481e..8a7d486 100755
--- a/tools/slabratetop.py
+++ b/tools/slabratetop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # slabratetop  Summarize kmem_cache_alloc() calls.
@@ -14,6 +14,9 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 15-Oct-2016   Brendan Gregg   Created this.
+# 23-Jan-2023   Rong Tao        Introduce kernel internal data structure and
+#                               functions to temporarily solve problem for
+#                               >=5.16(TODO: fix this workaround)
 
 from __future__ import print_function
 from bcc import BPF
@@ -65,6 +68,93 @@
 // 5.9, but it does not hurt to have it here for versions 5.4 to 5.8.
 struct memcg_cache_params {};
 
+// introduce kernel interval slab structure and slab_address() function, solved
+// 'undefined' error for >=5.16. TODO: we should fix this workaround if BCC
+// framework support BTF/CO-RE.
+struct slab {
+    unsigned long __page_flags;
+
+#if defined(CONFIG_SLAB)
+
+    struct kmem_cache *slab_cache;
+    union {
+        struct {
+            struct list_head slab_list;
+            void *freelist; /* array of free object indexes */
+            void *s_mem;    /* first object */
+        };
+        struct rcu_head rcu_head;
+    };
+    unsigned int active;
+
+#elif defined(CONFIG_SLUB)
+
+    struct kmem_cache *slab_cache;
+    union {
+        struct {
+            union {
+                struct list_head slab_list;
+#ifdef CONFIG_SLUB_CPU_PARTIAL
+                struct {
+                    struct slab *next;
+                        int slabs;      /* Nr of slabs left */
+                };
+#endif
+            };
+            /* Double-word boundary */
+            void *freelist;         /* first free object */
+            union {
+                unsigned long counters;
+                struct {
+                    unsigned inuse:16;
+                    unsigned objects:15;
+                    unsigned frozen:1;
+                };
+            };
+        };
+        struct rcu_head rcu_head;
+    };
+    unsigned int __unused;
+
+#elif defined(CONFIG_SLOB)
+
+    struct list_head slab_list;
+    void *__unused_1;
+    void *freelist;         /* first free block */
+    long units;
+    unsigned int __unused_2;
+
+#else
+#error "Unexpected slab allocator configured"
+#endif
+
+    atomic_t __page_refcount;
+#ifdef CONFIG_MEMCG
+    unsigned long memcg_data;
+#endif
+};
+
+// slab_address() will not be used, and NULL will be returned directly, which
+// can avoid adaptation of different kernel versions
+static inline void *slab_address(const struct slab *slab)
+{
+    return NULL;
+}
+
+#ifdef CONFIG_64BIT
+typedef __uint128_t freelist_full_t;
+#else
+typedef u64 freelist_full_t;
+#endif
+
+typedef union {
+	struct {
+		void *freelist;
+		unsigned long counter;
+	};
+	freelist_full_t full;
+} freelist_aba_t;
+
 #ifdef CONFIG_SLUB
 #include <linux/slub_def.h>
 #else
diff --git a/tools/sofdsnoop.py b/tools/sofdsnoop.py
index 9bd5bb3..601e376 100755
--- a/tools/sofdsnoop.py
+++ b/tools/sofdsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # sofdsnoop traces file descriptors passed via socket
diff --git a/tools/softirqs.py b/tools/softirqs.py
index 0ed18c4..a743e93 100755
--- a/tools/softirqs.py
+++ b/tools/softirqs.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # softirqs  Summarize soft IRQ (interrupt) event time.
diff --git a/tools/solisten.py b/tools/solisten.py
index 35a8295..9101c50 100755
--- a/tools/solisten.py
+++ b/tools/solisten.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # solisten      Trace TCP listen events
 #               For Linux, uses BCC, eBPF. Embedded C.
@@ -58,8 +58,8 @@
 // Common structure for UDP/TCP IPv4/IPv6
 struct listen_evt_t {
     u64 ts_us;
-    u64 pid;
-    u64 backlog;
+    u32 pid;
+    int backlog;
     u64 netns;
     u64 proto;    // familiy << 16 | type
     u64 lport;    // use only 16 bits
diff --git a/tools/sslsniff.py b/tools/sslsniff.py
index 4621e9f..de154ad 100755
--- a/tools/sslsniff.py
+++ b/tools/sslsniff.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # sslsniff  Captures data on read/recv or write/send functions of OpenSSL,
 #           GnuTLS and NSS
@@ -204,7 +204,8 @@
         u32 pid = pid_tgid >> 32;
         u32 tid = (u32)pid_tgid;
         u64 ts = bpf_ktime_get_ns();
-
+        u32 uid = bpf_get_current_uid_gid();
+        
         PID_FILTER
         UID_FILTER
 
diff --git a/tools/stackcount.py b/tools/stackcount.py
index 8b7ca00..72cf773 100755
--- a/tools/stackcount.py
+++ b/tools/stackcount.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # stackcount    Count events and their stack traces.
 #               For Linux, uses BCC, eBPF.
@@ -292,18 +292,18 @@
         if self.args.verbose:
             print("%-16x " % addr, end="")
         if self.args.offset:
-            print("%s" % self.probe.bpf.ksym(addr, show_offset=True))
+            print("%s" % self.probe.bpf.ksym(addr, show_offset=True).decode())
         else:
-            print("%s" % self.probe.bpf.ksym(addr))
+            print("%s" % self.probe.bpf.ksym(addr).decode())
 
     def _print_uframe(self, addr, pid):
         print("  ", end="")
         if self.args.verbose:
             print("%-16x " % addr, end="")
         if self.args.offset:
-            print("%s" % self.probe.bpf.sym(addr, pid, show_offset=True))
+            print("%s" % self.probe.bpf.sym(addr, pid, show_offset=True).decode())
         else:
-            print("%s" % self.probe.bpf.sym(addr, pid))
+            print("%s" % self.probe.bpf.sym(addr, pid).decode())
 
     @staticmethod
     def _signal_ignore(signal, frame):
diff --git a/tools/statsnoop.py b/tools/statsnoop.py
index 5894e16..bef2b0f 100755
--- a/tools/statsnoop.py
+++ b/tools/statsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # statsnoop Trace stat() syscalls.
@@ -10,7 +10,8 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 08-Feb-2016   Brendan Gregg   Created this.
-# 17-Feb-2016   Allan McAleavy updated for BPF_PERF_OUTPUT
+# 17-Feb-2016   Allan McAleavy  updated for BPF_PERF_OUTPUT
+# 29-Nov-2022   Rocky Xing      Added stat() variants.
 
 from __future__ import print_function
 from bcc import BPF
@@ -59,7 +60,7 @@
 BPF_HASH(infotmp, u32, struct val_t);
 BPF_PERF_OUTPUT(events);
 
-int syscall__entry(struct pt_regs *ctx, const char __user *filename)
+static int trace_entry(struct pt_regs *ctx, const char __user *filename)
 {
     struct val_t val = {};
     u64 pid_tgid = bpf_get_current_pid_tgid();
@@ -73,6 +74,16 @@
     return 0;
 };
 
+int syscall__stat_entry(struct pt_regs *ctx, const char __user *filename)
+{
+    return trace_entry(ctx, filename);
+}
+
+int syscall__statx_entry(struct pt_regs *ctx, int dfd, const char __user *filename)
+{
+    return trace_entry(ctx, filename);
+}
+
 int trace_return(struct pt_regs *ctx)
 {
     u64 pid_tgid = bpf_get_current_pid_tgid();
@@ -114,20 +125,22 @@
 # system calls but the name of the actual entry point may
 # be different for which we must check if the entry points
 # actually exist before attaching the probes
-syscall_fnname = b.get_syscall_fnname("stat")
-if BPF.ksymname(syscall_fnname) != -1:
-    b.attach_kprobe(event=syscall_fnname, fn_name="syscall__entry")
-    b.attach_kretprobe(event=syscall_fnname, fn_name="trace_return")
+def try_attach_syscall_probes(syscall):
+    syscall_fnname = b.get_syscall_fnname(syscall)
+    if BPF.ksymname(syscall_fnname) != -1:
+        if syscall in ["statx", "fstatat64", "newfstatat"]:
+            b.attach_kprobe(event=syscall_fnname, fn_name="syscall__statx_entry")
+        else:
+            b.attach_kprobe(event=syscall_fnname, fn_name="syscall__stat_entry")
+        b.attach_kretprobe(event=syscall_fnname, fn_name="trace_return")
 
-syscall_fnname = b.get_syscall_fnname("statfs")
-if BPF.ksymname(syscall_fnname) != -1:
-    b.attach_kprobe(event=syscall_fnname, fn_name="syscall__entry")
-    b.attach_kretprobe(event=syscall_fnname, fn_name="trace_return")
-
-syscall_fnname = b.get_syscall_fnname("newstat")
-if BPF.ksymname(syscall_fnname) != -1:
-    b.attach_kprobe(event=syscall_fnname, fn_name="syscall__entry")
-    b.attach_kretprobe(event=syscall_fnname, fn_name="trace_return")
+try_attach_syscall_probes("stat")
+try_attach_syscall_probes("statx")
+try_attach_syscall_probes("statfs")
+try_attach_syscall_probes("newstat")
+try_attach_syscall_probes("newlstat")
+try_attach_syscall_probes("fstatat64")
+try_attach_syscall_probes("newfstatat")
 
 start_ts = 0
 prev_ts = 0
diff --git a/tools/swapin.py b/tools/swapin.py
index 67a10db..6627efd 100755
--- a/tools/swapin.py
+++ b/tools/swapin.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # swapin        Count swapins by process.
diff --git a/tools/swapin_example.txt b/tools/swapin_example.txt
index 39ceb47..e958813 100644
--- a/tools/swapin_example.txt
+++ b/tools/swapin_example.txt
@@ -30,6 +30,27 @@
 While tracing, this showed that PID 2239 (gnome-shell) and PID 4536 (chrome)
 suffered over ten thousand swapins.
 
+#swapin.py -T
+Counting swap ins. Ctrl-C to end.
+COMM             PID    COUNT
+b'firefox'       60965  4
+
+COMM             PID    COUNT
+b'IndexedDB #1'  60965  1
+b'firefox'       60965  2
+
+COMM             PID    COUNT
+b'StreamTrans #9' 60965  1
+b'firefox'       60965  3
+
+COMM             PID    COUNT
+
+COMM             PID    COUNT
+b'sssd_kcm'      3605   384
+[--]
+
+While tracing along with -T flag, it does not show timestamp.
+
 
 
 USAGE:
diff --git a/tools/syncsnoop.py b/tools/syncsnoop.py
index e96cd3c..3e83ebb 100755
--- a/tools/syncsnoop.py
+++ b/tools/syncsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # syncsnoop Trace sync() syscall.
diff --git a/tools/syscount.py b/tools/syscount.py
index 7ba08dd..e3e4093 100755
--- a/tools/syscount.py
+++ b/tools/syscount.py
@@ -1,13 +1,16 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # syscount   Summarize syscall counts and latencies.
 #
-# USAGE: syscount [-p PID] [-i INTERVAL] [-T TOP] [-x] [-L] [-m] [-P] [-l]
+# USAGE: syscount [-h] [-p PID] [-t TID] [-i INTERVAL] [-d DURATION] [-T TOP]
+#                 [-x] [-e ERRNO] [-L] [-m] [-P] [-l] [--syscall SYSCALL]
 #
 # Copyright 2017, Sasha Goldshtein.
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 15-Feb-2017   Sasha Goldshtein    Created this.
+# 16-May-2022   Rocky Xing          Added TID filter support.
+# 26-Jul-2022   Rocky Xing          Added syscall filter support.
 
 from time import sleep, strftime
 import argparse
@@ -42,7 +45,12 @@
 
 parser = argparse.ArgumentParser(
     description="Summarize syscall counts and latencies.")
-parser.add_argument("-p", "--pid", type=int, help="trace only this pid")
+parser.add_argument("-p", "--pid", type=int,
+    help="trace only this pid")
+parser.add_argument("-t", "--tid", type=int,
+    help="trace only this tid")
+parser.add_argument("-c", "--ppid", type=int,
+    help="trace only child of this pid")
 parser.add_argument("-i", "--interval", type=int,
     help="print summary at this interval (seconds)")
 parser.add_argument("-d", "--duration", type=int,
@@ -61,6 +69,8 @@
     help="count by process and not by syscall")
 parser.add_argument("-l", "--list", action="store_true",
     help="print list of recognized syscalls and exit")
+parser.add_argument("--syscall", type=str,
+    help="trace this syscall only (use option -l to get all recognized syscalls)")
 parser.add_argument("--ebpf", action="store_true",
     help=argparse.SUPPRESS)
 args = parser.parse_args()
@@ -69,12 +79,25 @@
 if not args.interval:
     args.interval = 99999999
 
+syscall_nr = -1
+if args.syscall is not None:
+    syscall = bytes(args.syscall, 'utf-8')
+    for key, value in syscalls.items():
+        if syscall == value:
+            syscall_nr = key
+            break
+    if syscall_nr == -1:
+        print("Error: syscall '%s' not found. Exiting." % args.syscall)
+        sys.exit(1)
+
 if args.list:
     for grp in izip_longest(*(iter(sorted(syscalls.values())),) * 4):
-        print("   ".join(["%-20s" % s for s in grp if s is not None]))
+        print("   ".join(["%-22s" % s.decode() for s in grp if s is not None]))
     sys.exit(0)
 
 text = """
+#include <linux/sched.h>
+
 #ifdef LATENCY
 struct data_t {
     u64 count;
@@ -90,9 +113,28 @@
 #ifdef LATENCY
 TRACEPOINT_PROBE(raw_syscalls, sys_enter) {
     u64 pid_tgid = bpf_get_current_pid_tgid();
+    u32 pid = pid_tgid >> 32;
+    u32 tid = (u32)pid_tgid;
+
+#ifdef FILTER_SYSCALL_NR
+    if (args->id != FILTER_SYSCALL_NR)
+        return 0;
+#endif
 
 #ifdef FILTER_PID
-    if (pid_tgid >> 32 != FILTER_PID)
+    if (pid != FILTER_PID)
+        return 0;
+#endif
+
+#ifdef FILTER_TID
+    if (tid != FILTER_TID)
+        return 0;
+#endif
+
+#ifdef FILTER_PPID
+    struct task_struct *task = (struct task_struct *)bpf_get_current_task();
+    u32 ppid = task->real_parent->tgid;
+    if (ppid != FILTER_PPID)
         return 0;
 #endif
 
@@ -104,9 +146,28 @@
 
 TRACEPOINT_PROBE(raw_syscalls, sys_exit) {
     u64 pid_tgid = bpf_get_current_pid_tgid();
+    u32 pid = pid_tgid >> 32;
+    u32 tid = (u32)pid_tgid;
+
+#ifdef FILTER_SYSCALL_NR
+    if (args->id != FILTER_SYSCALL_NR)
+        return 0;
+#endif
 
 #ifdef FILTER_PID
-    if (pid_tgid >> 32 != FILTER_PID)
+    if (pid != FILTER_PID)
+        return 0;
+#endif
+
+#ifdef FILTER_TID
+    if (tid != FILTER_TID)
+        return 0;
+#endif
+
+#ifdef FILTER_PPID
+    struct task_struct *task = (struct task_struct *)bpf_get_current_task();
+    u32 ppid = task->real_parent->tgid;
+    if (ppid != FILTER_PPID)
         return 0;
 #endif
 
@@ -134,14 +195,14 @@
 
     val = data.lookup_or_try_init(&key, &zero);
     if (val) {
-        val->count++;
-        val->total_ns += bpf_ktime_get_ns() - *start_ns;
+        lock_xadd(&val->count, 1);
+        lock_xadd(&val->total_ns, bpf_ktime_get_ns() - *start_ns);
     }
 #else
     u64 *val, zero = 0;
     val = data.lookup_or_try_init(&key, &zero);
     if (val) {
-        ++(*val);
+        lock_xadd(val, 1);
     }
 #endif
     return 0;
@@ -150,6 +211,10 @@
 
 if args.pid:
     text = ("#define FILTER_PID %d\n" % args.pid) + text
+elif args.tid:
+    text = ("#define FILTER_TID %d\n" % args.tid) + text
+elif args.ppid:
+    text = ("#define FILTER_PPID %d\n" % args.ppid) + text
 if args.failures:
     text = "#define FILTER_FAILED\n" + text
 if args.errno:
@@ -158,6 +223,8 @@
     text = "#define LATENCY\n" + text
 if args.process:
     text = "#define BY_PROCESS\n" + text
+if args.syscall is not None:
+    text = ("#define FILTER_SYSCALL_NR %d\n" % syscall_nr) + text
 if args.ebpf:
     print(text)
     exit()
@@ -210,8 +277,12 @@
     print("")
     data.clear()
 
-print("Tracing %ssyscalls, printing top %d... Ctrl+C to quit." %
-      ("failed " if args.failures else "", args.top))
+if args.syscall is not None:
+    print("Tracing %ssyscall '%s'... Ctrl+C to quit." %
+        ("failed " if args.failures else "", args.syscall))
+else:
+    print("Tracing %ssyscalls, printing top %d... Ctrl+C to quit." %
+        ("failed " if args.failures else "", args.top))
 exiting = 0 if args.interval else 1
 seconds = 0
 while True:
diff --git a/tools/syscount_example.txt b/tools/syscount_example.txt
index aad51c4..7e4ccaa 100644
--- a/tools/syscount_example.txt
+++ b/tools/syscount_example.txt
@@ -139,20 +139,37 @@
 rmdir                         1
 ^C
 
+Sometimes, you'd only care about a single syscall rather than all syscalls.
+Use the --syscall option for this; the following example also demonstrates
+the --syscall option, for printing at predefined intervals:
+
+# syscount --syscall stat -i 1
+Tracing syscall 'stat'... Ctrl+C to quit.
+[12:51:06]
+SYSCALL                   COUNT
+stat                        310
+
+[12:51:07]
+SYSCALL                   COUNT
+stat                        316
+^C
+
 USAGE:
 # syscount -h
-usage: syscount.py [-h] [-p PID] [-i INTERVAL] [-T TOP] [-x] [-e ERRNO] [-L]
-                   [-m] [-P] [-l]
+usage: syscount.py [-h] [-p PID] [-t TID] [-i INTERVAL] [-d DURATION] [-T TOP]
+                   [-x] [-e ERRNO] [-L] [-m] [-P] [-l] [--syscall SYSCALL]
 
 Summarize syscall counts and latencies.
 
 optional arguments:
   -h, --help            show this help message and exit
   -p PID, --pid PID     trace only this pid
+  -t TID, --tid TID     trace only this tid
+  -c PPID, --ppid PPID  trace only child of this pid
   -i INTERVAL, --interval INTERVAL
                         print summary at this interval (seconds)
   -d DURATION, --duration DURATION
-			total duration of trace, in seconds
+                        total duration of trace, in seconds
   -T TOP, --top TOP     print only the top syscalls by count or latency
   -x, --failures        trace only failed syscalls (return < 0)
   -e ERRNO, --errno ERRNO
@@ -163,3 +180,5 @@
                         microseconds)
   -P, --process         count by process and not by syscall
   -l, --list            print list of recognized syscalls and exit
+  --syscall SYSCALL     trace this syscall only (use option -l to get all
+                        recognized syscalls)
diff --git a/tools/tcpaccept.py b/tools/tcpaccept.py
index b2ace4f..10c7901 100755
--- a/tools/tcpaccept.py
+++ b/tools/tcpaccept.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpaccept Trace TCP accept()s.
diff --git a/tools/tcpcong.py b/tools/tcpcong.py
index 671cd11..d3a7209 100755
--- a/tools/tcpcong.py
+++ b/tools/tcpcong.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpcong  Measure tcp congestion control status duration.
@@ -86,7 +86,7 @@
     end_lport = tmp
 
 # define BPF program
-bpf_text = """
+bpf_head_text = """
 #include <uapi/linux/ptrace.h>
 #include <net/sock.h>
 #include <bcc/proto.h>
@@ -107,6 +107,19 @@
     u16 dport;
 } ipv6_flow_key_t;
 
+typedef struct data_val {
+    DEF_TEXT
+    u64  last_ts;
+    u16  last_cong_stat;
+} data_val_t;
+
+BPF_HASH(ipv4_stat, ipv4_flow_key_t, data_val_t);
+BPF_HASH(ipv6_stat, ipv6_flow_key_t, data_val_t);
+
+HIST_TABLE
+"""
+
+bpf_extra_head = """
 typedef struct process_key {
     char comm[TASK_COMM_LEN];
     u32  tid;
@@ -126,24 +139,15 @@
 BPF_HASH(start_ipv6, process_key_t, ipv6_flow_val_t);
 SOCK_STORE_DEF
 
-typedef struct data_val {
-    DEF_TEXT
-    u64  last_ts;
-    u16  last_cong_stat;
-} data_val_t;
-
 typedef struct cong {
     u8  cong_stat:5,
         ca_inited:1,
         ca_setsockopt:1,
         ca_dstlocked:1;
 } cong_status_t;
+"""
 
-BPF_HASH(ipv4_stat, ipv4_flow_key_t, data_val_t);
-BPF_HASH(ipv6_stat, ipv6_flow_key_t, data_val_t);
-
-HIST_TABLE
-
+bpf_no_ca_tp_body_text = """
 static int entry_state_update_func(struct sock *sk)
 {
     u16 dport = 0, lport = 0;
@@ -276,6 +280,75 @@
 }
 """
 
+bpf_ca_tp_body_text = """
+TRACEPOINT_PROBE(tcp, tcp_cong_state_set)
+{
+    u64 ts, ts1;
+    u16 family, last_cong_state, dport = 0, lport = 0;
+    u8 cong_state;
+    const struct sock *sk = (const struct sock *)args->skaddr;
+    data_val_t *datap, data = {0};
+
+    family = sk->__sk_common.skc_family;
+    dport = args->dport;
+    lport = args->sport;
+    cong_state = args->cong_state;
+    STATE_KEY
+    if (family == AF_INET) {
+        ipv4_flow_key_t key4 = {0};
+        key4.saddr = sk->__sk_common.skc_rcv_saddr;
+        key4.daddr = sk->__sk_common.skc_daddr;
+        FILTER_LPORT
+        FILTER_DPORT
+        key4.lport = lport;
+        key4.dport = dport;
+        datap = ipv4_stat.lookup(&key4);
+        if (datap == 0) {
+            data.last_ts = bpf_ktime_get_ns();
+            data.last_cong_stat = cong_state + 1;
+            ipv4_stat.update(&key4, &data);
+        } else {
+            last_cong_state = datap->last_cong_stat;
+            if ((cong_state + 1) != last_cong_state) {
+                ts1 = bpf_ktime_get_ns();
+                ts = ts1 - datap->last_ts;
+                datap->last_ts = ts1;
+                datap->last_cong_stat = cong_state + 1;
+                ts /= 1000;
+                STORE
+            }
+        }
+    } else if (family == AF_INET6) {
+        ipv6_flow_key_t key6 = {0};
+        bpf_probe_read_kernel(&key6.saddr, sizeof(key6.saddr),
+            &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
+        bpf_probe_read_kernel(&key6.daddr, sizeof(key6.daddr),
+            &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
+        FILTER_LPORT
+        FILTER_DPORT
+        key6.lport = lport;
+        key6.dport = dport;
+        datap = ipv6_stat.lookup(&key6);
+        if (datap == 0) {
+            data.last_ts = bpf_ktime_get_ns();
+            data.last_cong_stat = cong_state + 1;
+            ipv6_stat.update(&key6, &data);
+        } else {
+            last_cong_state = datap->last_cong_stat;
+            if ((cong_state + 1) != last_cong_state) {
+                ts1 = bpf_ktime_get_ns();
+                ts = ts1 - datap->last_ts;
+                datap->last_ts = ts1;
+                datap->last_cong_stat = cong_state + 1;
+                ts /= 1000;
+                STORE
+            }
+        }
+    }
+    return 0;
+}
+"""
+
 kprobe_program = """
 int entry_func(struct pt_regs *ctx, struct sock *sk)
 {
@@ -351,20 +424,26 @@
 """
 
 # code replace
-is_support_kfunc = BPF.support_kfunc()
-if is_support_kfunc:
-    bpf_text += kfunc_program
-    bpf_text = bpf_text.replace('SOCK_STORE_DEF', '')
-    bpf_text = bpf_text.replace('SOCK_STORE_ADD', '')
-    bpf_text = bpf_text.replace('SOCK_STORE_DEL', '')
+is_support_tp_ca = BPF.tracepoint_exists("tcp", "tcp_cong_state_set")
+if is_support_tp_ca:
+    bpf_text = bpf_head_text + bpf_ca_tp_body_text
 else:
-    bpf_text += kprobe_program
-    bpf_text = bpf_text.replace('SOCK_STORE_DEF',
-                   'BPF_HASH(sock_store, process_key_t, struct sock *);')
-    bpf_text = bpf_text.replace('SOCK_STORE_ADD',
-                   'sock_store.update(&key, &sk);')
-    bpf_text = bpf_text.replace('SOCK_STORE_DEL',
-                   'sock_store.delete(&key);')
+    bpf_text = bpf_head_text + bpf_extra_head
+    bpf_text += bpf_no_ca_tp_body_text
+    is_support_kfunc = BPF.support_kfunc()
+    if is_support_kfunc:
+        bpf_text += kfunc_program
+        bpf_text = bpf_text.replace('SOCK_STORE_DEF', '')
+        bpf_text = bpf_text.replace('SOCK_STORE_ADD', '')
+        bpf_text = bpf_text.replace('SOCK_STORE_DEL', '')
+    else:
+        bpf_text += kprobe_program
+        bpf_text = bpf_text.replace('SOCK_STORE_DEF',
+                       'BPF_HASH(sock_store, process_key_t, struct sock *);')
+        bpf_text = bpf_text.replace('SOCK_STORE_ADD',
+                       'sock_store.update(&key, &sk);')
+        bpf_text = bpf_text.replace('SOCK_STORE_DEL',
+                       'sock_store.delete(&key);')
 
 if args.localport:
     bpf_text = bpf_text.replace('FILTER_LPORT',
@@ -455,7 +534,7 @@
 # load BPF program
 b = BPF(text=bpf_text)
 
-if not is_support_kfunc:
+if not is_support_tp_ca and not is_support_kfunc:
     # all the tcp congestion control status update functions
     # are called by below 5 functions.
     b.attach_kprobe(event="tcp_fastretrans_alert", fn_name="entry_func")
diff --git a/tools/tcpconnect.py b/tools/tcpconnect.py
index 531459e..a38bad8 100755
--- a/tools/tcpconnect.py
+++ b/tools/tcpconnect.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpconnect    Trace TCP connect()s.
@@ -322,6 +322,31 @@
     return 0;
 }
 
+#include <uapi/linux/udp.h>
+
+int trace_udpv6_recvmsg(struct pt_regs *ctx)
+{
+    struct sk_buff *skb = (struct sk_buff *)PT_REGS_PARM2(ctx);
+    struct udphdr *hdr = (void*)skb->head + skb->transport_header;
+    struct dns_data_t *event;
+    int zero = 0;
+    void *data;
+
+    /* hex(53) = 0x0035, htons(0x0035) = 0x3500 */
+    if (hdr->source != 0x3500)
+        return 0;
+
+    /* skip UDP header */
+    data = skb->data + 8;
+
+    event = dns_data.lookup(&zero);
+    if (!event)
+        return 0;
+
+    bpf_probe_read(event->pkt, sizeof(event->pkt), data);
+    dns_events.perf_submit(ctx, event, sizeof(*event));
+    return 0;
+}
 """
 
 if args.count and args.dns:
@@ -510,6 +535,7 @@
 if args.dns:
     b.attach_kprobe(event="udp_recvmsg", fn_name="trace_udp_recvmsg")
     b.attach_kretprobe(event="udp_recvmsg", fn_name="trace_udp_ret_recvmsg")
+    b.attach_kprobe(event="udpv6_queue_rcv_one_skb", fn_name="trace_udpv6_recvmsg")
 
 print("Tracing connect ... Hit Ctrl-C to end")
 if args.count:
diff --git a/tools/tcpconnlat.py b/tools/tcpconnlat.py
index 885b26d..85ffaff 100755
--- a/tools/tcpconnlat.py
+++ b/tools/tcpconnlat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpconnlat    Trace TCP active connection latency (connect).
diff --git a/tools/tcpdrop.py b/tools/tcpdrop.py
index 4853f6a..33cec09 100755
--- a/tools/tcpdrop.py
+++ b/tools/tcpdrop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpdrop   Trace TCP kernel-dropped packets/segments.
@@ -16,6 +16,7 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 30-May-2018   Brendan Gregg   Created this.
+# 15-Jun-2022   Rong Tao        Add tracepoint:skb:kfree_skb
 
 from __future__ import print_function
 from bcc import BPF
@@ -100,7 +101,7 @@
 #define tcp_flag_byte(th) (((u_int8_t *)th)[13])
 #endif
 
-int trace_tcp_drop(struct pt_regs *ctx, struct sock *sk, struct sk_buff *skb)
+static int __trace_tcp_drop(void *ctx, struct sock *sk, struct sk_buff *skb)
 {
     if (sk == NULL)
         return 0;
@@ -154,6 +155,29 @@
 
     return 0;
 }
+
+int trace_tcp_drop(struct pt_regs *ctx, struct sock *sk, struct sk_buff *skb)
+{
+    return __trace_tcp_drop(ctx, sk, skb);
+}
+"""
+
+bpf_kfree_skb_text = """
+#include <linux/skbuff.h>
+
+TRACEPOINT_PROBE(skb, kfree_skb) {
+    struct sk_buff *skb = args->skbaddr;
+    struct sock *sk = skb->sk;
+    enum skb_drop_reason reason = args->reason;
+
+    // SKB_NOT_DROPPED_YET,
+    // SKB_DROP_REASON_NOT_SPECIFIED,
+    if (reason > SKB_DROP_REASON_NOT_SPECIFIED) {
+        return __trace_tcp_drop(args, sk, skb);
+    }
+
+    return 0;
+}
 """
 
 if debug or args.ebpf:
@@ -194,13 +218,22 @@
         print("\t%s" % sym)
     print("")
 
+if BPF.tracepoint_exists("skb", "kfree_skb"):
+    if BPF.kernel_struct_has_field("trace_event_raw_kfree_skb", "reason") == 1:
+        bpf_text += bpf_kfree_skb_text
+
 # initialize BPF
 b = BPF(text=bpf_text)
+
 if b.get_kprobe_functions(b"tcp_drop"):
     b.attach_kprobe(event="tcp_drop", fn_name="trace_tcp_drop")
+elif b.tracepoint_exists("skb", "kfree_skb"):
+    print("WARNING: tcp_drop() kernel function not found or traceable. "
+          "Use tracpoint:skb:kfree_skb instead.")
 else:
-    print("ERROR: tcp_drop() kernel function not found or traceable. "
-        "Older kernel versions not supported.")
+    print("ERROR: tcp_drop() kernel function and tracpoint:skb:kfree_skb"
+          " not found or traceable. "
+          "The kernel might be too old or the the function has been inlined.")
     exit()
 stack_traces = b.get_table("stack_traces")
 
diff --git a/tools/tcplife.lua b/tools/tcplife.lua
index f2fe906..bfeaec2 100755
--- a/tools/tcplife.lua
+++ b/tools/tcplife.lua
@@ -362,8 +362,8 @@
    program = program:gsub('FILTER_LPORT', '')
 
    if args.wide then
-      header_string = "%-5s %-16.16s %-2s %-26s %-5s %-26s %-5s %6s %6s %s"
-      format_string = "%-5d %-16.16s %-2s %-26s %-5s %-26s %-5d %6d %6d %.2f"
+      header_string = "%-5s %-16.16s %-2s %-39s %-5s %-39s %-5s %6s %6s %s"
+      format_string = "%-5d %-16.16s %-2s %-39s %-5s %-39s %-5d %6d %6d %.2f"
       ip_string = "IP"
       ip_version = true
    end
diff --git a/tools/tcplife.py b/tools/tcplife.py
index 780385b..125f0fe 100755
--- a/tools/tcplife.py
+++ b/tools/tcplife.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcplife   Trace the lifespan of TCP sessions and summarize.
@@ -25,7 +25,7 @@
 from __future__ import print_function
 from bcc import BPF
 import argparse
-from socket import inet_ntop, ntohs, AF_INET, AF_INET6
+from socket import inet_ntop, AF_INET, AF_INET6
 from struct import pack
 from time import strftime
 
@@ -191,13 +191,13 @@
     FILTER_PID
 
     // get throughput stats. see tcp_get_info().
-    u64 rx_b = 0, tx_b = 0, sport = 0;
+    u64 rx_b = 0, tx_b = 0;
     struct tcp_sock *tp = (struct tcp_sock *)sk;
     rx_b = tp->bytes_received;
     tx_b = tp->bytes_acked;
 
     u16 family = sk->__sk_common.skc_family;
-    
+
     FILTER_FAMILY
 
     if (family == AF_INET) {
@@ -318,12 +318,12 @@
     if (mep != 0)
         pid = mep->pid;
     FILTER_PID
-    
+
     u16 family = args->family;
     FILTER_FAMILY
 
     // get throughput stats. see tcp_get_info().
-    u64 rx_b = 0, tx_b = 0, sport = 0;
+    u64 rx_b = 0, tx_b = 0;
     struct tcp_sock *tp = (struct tcp_sock *)sk;
     rx_b = tp->bytes_received;
     tx_b = tp->bytes_acked;
@@ -419,8 +419,8 @@
 header_string = "%-5s %-10.10s %s%-15s %-5s %-15s %-5s %5s %5s %s"
 format_string = "%-5d %-10.10s %s%-15s %-5d %-15s %-5d %5d %5d %.2f"
 if args.wide:
-    header_string = "%-5s %-16.16s %-2s %-26s %-5s %-26s %-5s %6s %6s %s"
-    format_string = "%-5d %-16.16s %-2s %-26s %-5s %-26s %-5d %6d %6d %.2f"
+    header_string = "%-5s %-16.16s %-2s %-39s %-5s %-39s %-5s %6s %6s %s"
+    format_string = "%-5d %-16.16s %-2s %-39s %-5s %-39s %-5d %6d %6d %.2f"
 if args.csv:
     header_string = "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s"
     format_string = "%d,%s,%s,%s,%s,%s,%d,%d,%d,%.2f"
diff --git a/tools/tcpretrans.py b/tools/tcpretrans.py
index 79ff1ca..b2e8674 100755
--- a/tools/tcpretrans.py
+++ b/tools/tcpretrans.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpretrans    Trace or count TCP retransmits and TLPs.
diff --git a/tools/tcprtt.py b/tools/tcprtt.py
index c5c3905..9d3d253 100755
--- a/tools/tcprtt.py
+++ b/tools/tcprtt.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcprtt    Summarize TCP RTT as a histogram. For Linux, uses BCC, eBPF.
@@ -15,7 +15,7 @@
 from __future__ import print_function
 from bcc import BPF
 from time import sleep, strftime
-from socket import inet_ntop, AF_INET
+from socket import inet_ntop, inet_pton, AF_INET, AF_INET6
 import socket, struct
 import argparse
 import ctypes
@@ -77,9 +77,6 @@
 
 # define BPF program
 bpf_text = """
-#ifndef KBUILD_MODNAME
-#define KBUILD_MODNAME "bcc"
-#endif
 #include <uapi/linux/ptrace.h>
 #include <linux/tcp.h>
 #include <net/sock.h>
@@ -101,15 +98,17 @@
 
 int trace_tcp_rcv(struct pt_regs *ctx, struct sock *sk, struct sk_buff *skb)
 {
-    struct tcp_sock *ts = tcp_sk(sk);
+    struct tcp_sock *ts = (struct tcp_sock *)sk;
     u32 srtt = ts->srtt_us >> 3;
-    const struct inet_sock *inet = inet_sk(sk);
+    const struct inet_sock *inet = (struct inet_sock *)sk;
 
     /* filters */
     u16 sport = 0;
     u16 dport = 0;
     u32 saddr = 0;
     u32 daddr = 0;
+    __u8 saddr6[16];
+    __u8 daddr6[16];
     u16 family = 0;
 
     /* for histogram */
@@ -120,9 +119,16 @@
 
     bpf_probe_read_kernel(&sport, sizeof(sport), (void *)&inet->inet_sport);
     bpf_probe_read_kernel(&dport, sizeof(dport), (void *)&inet->inet_dport);
-    bpf_probe_read_kernel(&saddr, sizeof(saddr), (void *)&inet->inet_saddr);
-    bpf_probe_read_kernel(&daddr, sizeof(daddr), (void *)&inet->inet_daddr);
     bpf_probe_read_kernel(&family, sizeof(family), (void *)&sk->__sk_common.skc_family);
+    if (family == AF_INET6) {
+        bpf_probe_read_kernel(&saddr6, sizeof(saddr6),
+                              (void *)&sk->__sk_common.skc_v6_rcv_saddr.s6_addr);
+        bpf_probe_read_kernel(&daddr6, sizeof(daddr6),
+                              (void *)&sk->__sk_common.skc_v6_daddr.s6_addr);
+    } else {
+        bpf_probe_read_kernel(&saddr, sizeof(saddr), (void *)&inet->inet_saddr);
+        bpf_probe_read_kernel(&daddr, sizeof(daddr), (void *)&inet->inet_daddr);
+    }
 
     LPORTFILTER
     RPORTFILTER
@@ -158,19 +164,26 @@
 else:
     bpf_text = bpf_text.replace('RPORTFILTER', '')
 
+def addrfilter(addr, src_or_dest):
+    try:
+        naddr = socket.inet_pton(AF_INET, addr)
+    except:
+        naddr = socket.inet_pton(AF_INET6, addr)
+        s = ('\\' + struct.unpack("=16s", naddr)[0].hex('\\')).replace('\\', '\\x')
+        filter = "if (memcmp(%s6, \"%s\", 16)) return 0;" % (src_or_dest, s)
+    else:
+        filter = "if (%s != %d) return 0;" % (src_or_dest, struct.unpack("=I", naddr)[0])
+    return filter
+
 # filter for local address
 if args.laddr:
-    bpf_text = bpf_text.replace('LADDRFILTER',
-        """if (saddr != %d)
-        return 0;""" % struct.unpack("=I", socket.inet_aton(args.laddr))[0])
+    bpf_text = bpf_text.replace('LADDRFILTER', addrfilter(args.laddr, 'saddr'))
 else:
     bpf_text = bpf_text.replace('LADDRFILTER', '')
 
 # filter for remote address
 if args.raddr:
-    bpf_text = bpf_text.replace('RADDRFILTER',
-        """if (daddr != %d)
-        return 0;""" % struct.unpack("=I", socket.inet_aton(args.raddr))[0])
+    bpf_text = bpf_text.replace('RADDRFILTER', addrfilter(args.raddr, 'daddr'))
 else:
     bpf_text = bpf_text.replace('RADDRFILTER', '')
 if args.ipv4:
diff --git a/tools/tcpstates.py b/tools/tcpstates.py
index 1fa2c26..22894ad 100755
--- a/tools/tcpstates.py
+++ b/tools/tcpstates.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # @lint-avoid-python-3-compatibility-imports
 #
@@ -19,7 +19,6 @@
 from bcc import BPF
 import argparse
 from socket import inet_ntop, AF_INET, AF_INET6
-from struct import pack
 from time import strftime, time
 from os import getuid
 
@@ -78,13 +77,14 @@
 struct ipv4_data_t {
     u64 ts_us;
     u64 skaddr;
-    u32 saddr;
-    u32 daddr;
+    u32 saddr[1];
+    u32 daddr[1];
     u64 span_us;
     u32 pid;
-    u32 ports;
-    u32 oldstate;
-    u32 newstate;
+    u16 lport;
+    u16 dport;
+    int oldstate;
+    int newstate;
     char task[TASK_COMM_LEN];
 };
 BPF_PERF_OUTPUT(ipv4_events);
@@ -92,13 +92,14 @@
 struct ipv6_data_t {
     u64 ts_us;
     u64 skaddr;
-    unsigned __int128 saddr;
-    unsigned __int128 daddr;
+    u32 saddr[4];
+    u32 daddr[4];
     u64 span_us;
     u32 pid;
-    u32 ports;
-    u32 oldstate;
-    u32 newstate;
+    u16 lport;
+    u16 dport;
+    int oldstate;
+    int newstate;
     char task[TASK_COMM_LEN];
 };
 BPF_PERF_OUTPUT(ipv6_events);
@@ -132,6 +133,9 @@
     u16 family = args->family;
     FILTER_FAMILY
 
+    // workaround to avoid llvm optimization which will cause context ptr args modified
+    int tcp_newstate = args->newstate;
+
     if (args->family == AF_INET) {
         struct ipv4_data_t data4 = {
             .span_us = delta_us,
@@ -141,8 +145,8 @@
         data4.ts_us = bpf_ktime_get_ns() / 1000;
         __builtin_memcpy(&data4.saddr, args->saddr, sizeof(data4.saddr));
         __builtin_memcpy(&data4.daddr, args->daddr, sizeof(data4.daddr));
-        // a workaround until data4 compiles with separate lport/dport
-        data4.ports = dport + ((0ULL + lport) << 16);
+        data4.lport = lport;
+        data4.dport = dport;
         data4.pid = pid;
 
         bpf_get_current_comm(&data4.task, sizeof(data4.task));
@@ -157,14 +161,14 @@
         data6.ts_us = bpf_ktime_get_ns() / 1000;
         __builtin_memcpy(&data6.saddr, args->saddr_v6, sizeof(data6.saddr));
         __builtin_memcpy(&data6.daddr, args->daddr_v6, sizeof(data6.daddr));
-        // a workaround until data6 compiles with separate lport/dport
-        data6.ports = dport + ((0ULL + lport) << 16);
+        data6.lport = lport;
+        data6.dport = dport;
         data6.pid = pid;
         bpf_get_current_comm(&data6.task, sizeof(data6.task));
         ipv6_events.perf_submit(args, &data6, sizeof(data6));
     }
 
-    if (args->newstate == TCP_CLOSE) {
+    if (tcp_newstate == TCP_CLOSE) {
         last.delete(&sk);
     } else {
         u64 ts = bpf_ktime_get_ns();
@@ -210,8 +214,8 @@
         data4.ts_us = bpf_ktime_get_ns() / 1000;
         data4.saddr = sk->__sk_common.skc_rcv_saddr;
         data4.daddr = sk->__sk_common.skc_daddr;
-        // a workaround until data4 compiles with separate lport/dport
-        data4.ports = dport + ((0ULL + lport) << 16);
+        data4.lport = lport;
+        data4.dport = dport;
         data4.pid = pid;
 
         bpf_get_current_comm(&data4.task, sizeof(data4.task));
@@ -228,8 +232,8 @@
             sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
         bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
             sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
-        // a workaround until data6 compiles with separate lport/dport
-        data6.ports = dport + ((0ULL + lport) << 16);
+        data6.lport = lport;
+        data6.dport = dport;
         data6.pid = pid;
         bpf_get_current_comm(&data6.task, sizeof(data6.task));
         ipv6_events.perf_submit(ctx, &data6, sizeof(data6));
@@ -291,9 +295,9 @@
 format_string = ("%-16x %-5d %-10.10s %s%-15s %-5d %-15s %-5d %-11s " +
     "-> %-11s %.3f")
 if args.wide:
-    header_string = ("%-16s %-5s %-16.16s %-2s %-26s %-5s %-26s %-5s %-11s " +
+    header_string = ("%-16s %-5s %-16.16s %-2s %-39s %-5s %-39s %-5s %-11s " +
         "-> %-11s %s")
-    format_string = ("%-16x %-5d %-16.16s %-2s %-26s %-5s %-26s %-5d %-11s " +
+    format_string = ("%-16x %-5d %-16.16s %-2s %-39s %-5s %-39s %-5d %-11s " +
         "-> %-11s %.3f")
 if args.csv:
     header_string = "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s"
@@ -345,10 +349,10 @@
         'OBJECT_PID': str(event.pid),
         'OBJECT_COMM': event.task.decode('utf-8', 'replace'),
         # Custom fields, aka "stuff we sort of made up".
-        'OBJECT_' + addr_pfx + '_SOURCE_ADDRESS': inet_ntop(addr_family, pack("I", event.saddr)),
-        'OBJECT_TCP_SOURCE_PORT': str(event.ports >> 16),
-        'OBJECT_' + addr_pfx + '_DESTINATION_ADDRESS': inet_ntop(addr_family, pack("I", event.daddr)),
-        'OBJECT_TCP_DESTINATION_PORT': str(event.ports & 0xffff),
+        'OBJECT_' + addr_pfx + '_SOURCE_ADDRESS': inet_ntop(addr_family, event.saddr),
+        'OBJECT_TCP_SOURCE_PORT': str(event.lport),
+        'OBJECT_' + addr_pfx + '_DESTINATION_ADDRESS': inet_ntop(addr_family, event.daddr),
+        'OBJECT_TCP_DESTINATION_PORT': str(event.dport),
         'OBJECT_TCP_OLD_STATE': tcpstate2str(event.oldstate),
         'OBJECT_TCP_NEW_STATE': tcpstate2str(event.newstate),
         'OBJECT_TCP_SPAN_TIME': str(event.span_us)
@@ -368,8 +372,7 @@
     return fields
 
 # process event
-def print_ipv4_event(cpu, data, size):
-    event = b["ipv4_events"].event(data)
+def print_event(event, addr_family):
     global start_ts
     if args.time:
         if args.csv:
@@ -384,39 +387,26 @@
             print("%.6f," % delta_s, end="")
         else:
             print("%-9.6f " % delta_s, end="")
+    if addr_family == AF_INET:
+        version = "4"
+    else:
+        version = "6"
     print(format_string % (event.skaddr, event.pid, event.task.decode('utf-8', 'replace'),
-        "4" if args.wide or args.csv else "",
-        inet_ntop(AF_INET, pack("I", event.saddr)), event.ports >> 16,
-        inet_ntop(AF_INET, pack("I", event.daddr)), event.ports & 0xffff,
+        version if args.wide or args.csv else "",
+        inet_ntop(addr_family, event.saddr), event.lport,
+        inet_ntop(addr_family, event.daddr), event.dport,
         tcpstate2str(event.oldstate), tcpstate2str(event.newstate),
         float(event.span_us) / 1000))
     if args.journal:
-        journal.send(**journal_fields(event, AF_INET))
+        journal.send(**journal_fields(event, addr_family))
+
+def print_ipv4_event(cpu, data, size):
+    event = b["ipv4_events"].event(data)
+    print_event(event, AF_INET)
 
 def print_ipv6_event(cpu, data, size):
     event = b["ipv6_events"].event(data)
-    global start_ts
-    if args.time:
-        if args.csv:
-            print("%s," % strftime("%H:%M:%S"), end="")
-        else:
-            print("%-8s " % strftime("%H:%M:%S"), end="")
-    if args.timestamp:
-        if start_ts == 0:
-            start_ts = event.ts_us
-        delta_s = (float(event.ts_us) - start_ts) / 1000000
-        if args.csv:
-            print("%.6f," % delta_s, end="")
-        else:
-            print("%-9.6f " % delta_s, end="")
-    print(format_string % (event.skaddr, event.pid, event.task.decode('utf-8', 'replace'),
-        "6" if args.wide or args.csv else "",
-        inet_ntop(AF_INET6, event.saddr), event.ports >> 16,
-        inet_ntop(AF_INET6, event.daddr), event.ports & 0xffff,
-        tcpstate2str(event.oldstate), tcpstate2str(event.newstate),
-        float(event.span_us) / 1000))
-    if args.journal:
-        journal.send(**journal_fields(event, AF_INET6))
+    print_event(event, AF_INET6)
 
 # initialize BPF
 b = BPF(text=bpf_text)
diff --git a/tools/tcpsubnet.py b/tools/tcpsubnet.py
index 77ccc86..0cdbfea 100755
--- a/tools/tcpsubnet.py
+++ b/tools/tcpsubnet.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpsubnet   Summarize TCP bytes sent to different subnets.
diff --git a/tools/tcpsynbl.py b/tools/tcpsynbl.py
index dc85abe..909f6e5 100755
--- a/tools/tcpsynbl.py
+++ b/tools/tcpsynbl.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcpsynbl      Show TCP SYN backlog.
@@ -32,7 +32,7 @@
 
 int do_entry(struct pt_regs *ctx) {
     struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx);
-    
+
     backlog_key_t key = {};
     key.backlog = sk->sk_max_ack_backlog;
     key.slot = bpf_log2l(sk->sk_ack_backlog);
@@ -67,7 +67,7 @@
     b.attach_kprobe(event="tcp_v4_syn_recv_sock", fn_name="do_entry")
     b.attach_kprobe(event="tcp_v6_syn_recv_sock", fn_name="do_entry")
 
-print("Tracing SYN backlog size. Ctrl-C to end.");
+print("Tracing SYN backlog size. Ctrl-C to end.")
 
 try:
     sleep(99999999)
diff --git a/tools/tcptop.py b/tools/tcptop.py
index d369e13..d3aefaf 100755
--- a/tools/tcptop.py
+++ b/tools/tcptop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # tcptop    Summarize TCP send/recv throughput by host.
@@ -110,9 +110,9 @@
 };
 BPF_HASH(ipv6_send_bytes, struct ipv6_key_t);
 BPF_HASH(ipv6_recv_bytes, struct ipv6_key_t);
+BPF_HASH(sock_store, u32, struct sock *);
 
-int kprobe__tcp_sendmsg(struct pt_regs *ctx, struct sock *sk,
-    struct msghdr *msg, size_t size)
+static int tcp_sendstat(int size)
 {
     if (container_should_be_filtered()) {
         return 0;
@@ -120,18 +120,29 @@
 
     u32 pid = bpf_get_current_pid_tgid() >> 32;
     FILTER_PID
-
-    u16 dport = 0, family = sk->__sk_common.skc_family;
-
+    u32 tid = bpf_get_current_pid_tgid();
+    struct sock **sockpp;
+    sockpp = sock_store.lookup(&tid);
+    if (sockpp == 0) {
+        return 0; //miss the entry
+    }
+    struct sock *sk = *sockpp;
+    u16 dport = 0, family;
+    bpf_probe_read_kernel(&family, sizeof(family),
+        &sk->__sk_common.skc_family);
     FILTER_FAMILY
     
     if (family == AF_INET) {
         struct ipv4_key_t ipv4_key = {.pid = pid};
         bpf_get_current_comm(&ipv4_key.name, sizeof(ipv4_key.name));
-        ipv4_key.saddr = sk->__sk_common.skc_rcv_saddr;
-        ipv4_key.daddr = sk->__sk_common.skc_daddr;
-        ipv4_key.lport = sk->__sk_common.skc_num;
-        dport = sk->__sk_common.skc_dport;
+        bpf_probe_read_kernel(&ipv4_key.saddr, sizeof(ipv4_key.saddr),
+            &sk->__sk_common.skc_rcv_saddr);
+        bpf_probe_read_kernel(&ipv4_key.daddr, sizeof(ipv4_key.daddr),
+            &sk->__sk_common.skc_daddr);
+        bpf_probe_read_kernel(&ipv4_key.lport, sizeof(ipv4_key.lport),
+            &sk->__sk_common.skc_num);
+        bpf_probe_read_kernel(&dport, sizeof(dport),
+            &sk->__sk_common.skc_dport);
         ipv4_key.dport = ntohs(dport);
         ipv4_send_bytes.increment(ipv4_key, size);
 
@@ -142,16 +153,42 @@
             &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
         bpf_probe_read_kernel(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
             &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
-        ipv6_key.lport = sk->__sk_common.skc_num;
-        dport = sk->__sk_common.skc_dport;
+        bpf_probe_read_kernel(&ipv6_key.lport, sizeof(ipv6_key.lport),
+            &sk->__sk_common.skc_num);
+        bpf_probe_read_kernel(&dport, sizeof(dport),
+            &sk->__sk_common.skc_dport);
         ipv6_key.dport = ntohs(dport);
         ipv6_send_bytes.increment(ipv6_key, size);
     }
+    sock_store.delete(&tid);
     // else drop
 
     return 0;
 }
 
+int tcp_send_ret(struct pt_regs *ctx)
+{
+    int size = PT_REGS_RC(ctx);
+    if (size > 0)
+        return tcp_sendstat(size);
+    else
+        return 0;
+}
+
+int tcp_send_entry(struct pt_regs *ctx, struct sock *sk)
+{
+    if (container_should_be_filtered()) {
+        return 0;
+    }
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+    FILTER_PID
+    u32 tid = bpf_get_current_pid_tgid();
+    u16 family = sk->__sk_common.skc_family;
+    FILTER_FAMILY
+    sock_store.update(&tid, &sk);
+    return 0;
+}
+
 /*
  * tcp_recvmsg() would be obvious to trace, but is less suitable because:
  * - we'd need to trace both entry and return, to have both sock and size
@@ -243,6 +280,12 @@
 # initialize BPF
 b = BPF(text=bpf_text)
 
+b.attach_kprobe(event='tcp_sendmsg', fn_name='tcp_send_entry')
+b.attach_kretprobe(event='tcp_sendmsg', fn_name='tcp_send_ret')
+if BPF.get_kprobe_functions(b'tcp_sendpage'):
+    b.attach_kprobe(event='tcp_sendpage', fn_name='tcp_send_entry')
+    b.attach_kretprobe(event='tcp_sendpage', fn_name='tcp_send_ret')
+
 ipv4_send_bytes = b["ipv4_send_bytes"]
 ipv4_recv_bytes = b["ipv4_recv_bytes"]
 ipv6_send_bytes = b["ipv6_send_bytes"]
diff --git a/tools/tcptracer.py b/tools/tcptracer.py
index 25c6fd7..0404b5a 100755
--- a/tools/tcptracer.py
+++ b/tools/tcptracer.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # tcpv4tracer   Trace TCP connections.
 #               For Linux, uses BCC, eBPF. Embedded C.
@@ -669,15 +669,6 @@
 
 start_ts = 0
 
-def inet_ntoa(addr):
-    dq = ''
-    for i in range(0, 4):
-        dq = dq + str(addr & 0xff)
-        if (i != 3):
-            dq = dq + '.'
-        addr = addr >> 8
-    return dq
-
 
 b["tcp_ipv4_event"].open_perf_buffer(print_ipv4_event)
 b["tcp_ipv6_event"].open_perf_buffer(print_ipv6_event)
diff --git a/tools/threadsnoop.py b/tools/threadsnoop.py
index 8adca2e..8dfc2d5 100755
--- a/tools/threadsnoop.py
+++ b/tools/threadsnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # threadsnoop   List new thread creation.
diff --git a/tools/tplist.py b/tools/tplist.py
index 24e67d6..e49c207 100755
--- a/tools/tplist.py
+++ b/tools/tplist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # tplist    Display kernel tracepoints or USDT probes and their formats.
 #
diff --git a/tools/trace.py b/tools/trace.py
index b51cccf..9c7cca7 100755
--- a/tools/trace.py
+++ b/tools/trace.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # trace         Trace a function and print a trace message based on its
 #               parameters, with an optional filter.
@@ -321,44 +321,6 @@
                     expr = expr.replace(alias, replacement)
                 return expr
 
-        p_type = {"u": ct.c_uint, "d": ct.c_int, "lu": ct.c_ulong,
-                  "ld": ct.c_long,
-                  "llu": ct.c_ulonglong, "lld": ct.c_longlong,
-                  "hu": ct.c_ushort, "hd": ct.c_short,
-                  "x": ct.c_uint, "lx": ct.c_ulong, "llx": ct.c_ulonglong,
-                  "c": ct.c_ubyte,
-                  "K": ct.c_ulonglong, "U": ct.c_ulonglong}
-
-        def _generate_python_field_decl(self, idx, fields):
-                field_type = self.types[idx]
-                if field_type == "s":
-                        ptype = ct.c_char * self.string_size
-                else:
-                        ptype = Probe.p_type[field_type]
-                fields.append(("v%d" % idx, ptype))
-
-        def _generate_python_data_decl(self):
-                self.python_struct_name = "%s_%d_Data" % \
-                                (self._display_function(), self.probe_num)
-                fields = []
-                if self.time_field:
-                    fields.append(("timestamp_ns", ct.c_ulonglong))
-                if self.print_cpu:
-                    fields.append(("cpu", ct.c_int))
-                fields.extend([
-                        ("tgid", ct.c_uint),
-                        ("pid", ct.c_uint),
-                        ("comm", ct.c_char * 16)       # TASK_COMM_LEN
-                ])
-                for i in range(0, len(self.types)):
-                        self._generate_python_field_decl(i, fields)
-                if self.kernel_stack:
-                        fields.append(("kernel_stack_id", ct.c_int))
-                if self.user_stack:
-                        fields.append(("user_stack_id", ct.c_int))
-                return type(self.python_struct_name, (ct.Structure,),
-                            dict(_fields_=fields))
-
         c_type = {"u": "unsigned int", "d": "int",
                   "lu": "unsigned long", "ld": "long",
                   "llu": "unsigned long long", "lld": "long long",
@@ -612,11 +574,15 @@
                                        if t == 'K']
                 user_placeholders = [i for i, t in enumerate(self.types)
                                      if t == 'U']
+                string_placeholders = [i for i, t in enumerate(self.types)
+                                       if t == 's']
                 for kp in kernel_placeholders:
-                        values[kp] = bpf.ksym(values[kp], show_offset=True)
+                    values[kp] = bpf.ksym(values[kp], show_offset=True)
                 for up in user_placeholders:
-                        values[up] = bpf.sym(values[up], tgid,
-                                           show_module=True, show_offset=True)
+                    values[up] = bpf.sym(values[up], tgid,
+                                         show_module=True, show_offset=True)
+                for sp in string_placeholders:
+                    values[sp] = values[sp].decode('utf-8', 'replace')
                 return self.python_format % tuple(values)
 
         def print_aggregate_events(self):
@@ -625,13 +591,11 @@
                     print("%s-->COUNT %d\n\n" % (k, v), end="")
 
         def print_event(self, bpf, cpu, data, size):
-                # Cast as the generated structure type and display
-                # according to the format string in the probe.
-                event = ct.cast(data, ct.POINTER(self.python_struct)).contents
+                event = bpf[self.events_name].event(data)
                 if self.name not in event.comm:
                     return
-                values = map(lambda i: getattr(event, "v%d" % i),
-                             range(0, len(self.values)))
+                values = list(map(lambda i: getattr(event, "v%d" % i),
+                             range(0, len(self.values))))
                 msg = self._format_message(bpf, event.tgid, values)
                 if self.msg_filter and self.msg_filter not in msg:
                     return
@@ -678,7 +642,6 @@
                         self._attach_k(bpf)
                 else:
                         self._attach_u(bpf)
-                self.python_struct = self._generate_python_data_decl()
                 callback = partial(self.print_event, bpf)
                 bpf[self.events_name].open_perf_buffer(callback,
                         page_cnt=self.page_cnt)
@@ -827,7 +790,7 @@
                   help="allow to use STRCMP with binary values")
                 parser.add_argument('-s', "--sym_file_list", type=str,
                   metavar="SYM_FILE_LIST", dest="sym_file_list",
-                  help="coma separated list of symbol files to use \
+                  help="comma separated list of symbol files to use \
                   for symbol resolution")
                 parser.add_argument("-K", "--kernel-stack",
                   action="store_true", help="output kernel stack trace")
diff --git a/tools/trace_example.txt b/tools/trace_example.txt
index ccefdaa..321fd61 100644
--- a/tools/trace_example.txt
+++ b/tools/trace_example.txt
@@ -400,7 +400,7 @@
                         only print the msg of event containing this string
   -B, --bin_cmp         allow to use STRCMP with binary values
   -s SYM_FILE_LIST, --sym_file_list SYM_FILE_LIST
-                        coma separated list of symbol files to use for symbol
+                        comma separated list of symbol files to use for symbol
                         resolution
   -K, --kernel-stack    output kernel stack trace
   -U, --user-stack      output user stack trace
diff --git a/tools/ttysnoop.py b/tools/ttysnoop.py
index ebddb4c..77f97b7 100755
--- a/tools/ttysnoop.py
+++ b/tools/ttysnoop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # ttysnoop   Watch live output from a tty or pts device.
@@ -13,6 +13,8 @@
 # Idea: from ttywatcher.
 #
 # 15-Oct-2016   Brendan Gregg   Created this.
+# 13-Dec-2022   Rong Tao        Detect whether kfunc is supported.
+# 07-Jan-2023   Rong Tao        Support ITER_UBUF(CO-RE way)
 
 from __future__ import print_function
 from bcc import BPF
@@ -78,7 +80,7 @@
 };
 
 BPF_ARRAY(data_map, struct data_t, 1);
-BPF_PERF_OUTPUT(events);
+PERF_TABLE
 
 static int do_tty_write(void *ctx, const char __user *buf, size_t count)
 {
@@ -106,7 +108,7 @@
             data->count = BUFSIZE;
         else
             data->count = count;
-        events.perf_submit(ctx, data, sizeof(*data));
+        PERF_OUTPUT_CTX
         if (count < BUFSIZE)
             return 0;
         count -= BUFSIZE;
@@ -120,7 +122,7 @@
  * commit 9bb48c82aced (v5.11-rc4) tty: implement write_iter
  * changed arguments of tty_write function
  */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 11)
 int kprobe__tty_write(struct pt_regs *ctx, struct file *file,
     const char __user *buf, size_t count)
 {
@@ -130,11 +132,11 @@
     return do_tty_write(ctx, buf, count);
 }
 #else
-KFUNC_PROBE(tty_write, struct kiocb *iocb, struct iov_iter *from)
+PROBE_TTY_WRITE
 {
-    const char __user *buf;
+    const char __user *buf = NULL;
     const struct kvec *kvec;
-    size_t count;
+    size_t count = 0;
 
     if (iocb->ki_filp->f_inode->i_ino != PTS)
         return 0;
@@ -146,22 +148,81 @@
     if (from->type != (ITER_IOVEC + WRITE))
         return 0;
 #else
-    if (from->iter_type != ITER_IOVEC)
+    if (ADD_FILTER_ITER_UBUF from->iter_type != ITER_IOVEC)
         return 0;
     if (from->data_source != WRITE)
         return 0;
 #endif
 
-
-    kvec  = from->kvec;
-    buf   = kvec->iov_base;
-    count = kvec->iov_len;
-
-    return do_tty_write(ctx, kvec->iov_base, kvec->iov_len);
+    /* Support 'type' and 'iter_type' field name */
+    switch (from->IOV_ITER_TYPE_NAME) {
+    /**
+     * <  5.14.0: case ITER_IOVEC + WRITE
+     * >= 5.14.0: case ITER_IOVEC
+     */
+    case CASE_ITER_IOVEC_NAME:
+        kvec  = from->kvec;
+        buf   = kvec->iov_base;
+        count = kvec->iov_len;
+        break;
+    CASE_ITER_UBUF_TEXT
+    /* TODO: Support more type */
+    default:
+        break;
+    }
+    return do_tty_write(ctx, buf, count);
 }
 #endif
 """
 
+probe_tty_write_kfunc = """
+KFUNC_PROBE(tty_write, struct kiocb *iocb, struct iov_iter *from)
+"""
+
+probe_tty_write_kprobe = """
+int kprobe__tty_write(struct pt_regs *ctx, struct kiocb *iocb,
+    struct iov_iter *from)
+"""
+
+is_support_kfunc = BPF.support_kfunc()
+if is_support_kfunc:
+    bpf_text = bpf_text.replace('PROBE_TTY_WRITE', probe_tty_write_kfunc)
+else:
+    bpf_text = bpf_text.replace('PROBE_TTY_WRITE', probe_tty_write_kprobe)
+
+if BPF.kernel_struct_has_field(b'iov_iter', b'iter_type') == 1:
+    bpf_text = bpf_text.replace('IOV_ITER_TYPE_NAME', 'iter_type')
+    bpf_text = bpf_text.replace('CASE_ITER_IOVEC_NAME', 'ITER_IOVEC')
+else:
+    bpf_text = bpf_text.replace('IOV_ITER_TYPE_NAME', 'type')
+    bpf_text = bpf_text.replace('CASE_ITER_IOVEC_NAME', 'ITER_IOVEC + WRITE')
+
+case_iter_ubuf_text = """
+    case ITER_UBUF:
+        buf   = from->ubuf;
+        count = from->count;
+        break;
+"""
+
+if BPF.kernel_struct_has_field(b'iov_iter', b'ubuf') == 1:
+    bpf_text = bpf_text.replace('CASE_ITER_UBUF_TEXT', case_iter_ubuf_text)
+    bpf_text = bpf_text.replace('ADD_FILTER_ITER_UBUF', 'from->iter_type != ITER_UBUF &&')
+else:
+    bpf_text = bpf_text.replace('CASE_ITER_UBUF_TEXT', '')
+    bpf_text = bpf_text.replace('ADD_FILTER_ITER_UBUF', '')
+
+if BPF.kernel_struct_has_field(b'bpf_ringbuf', b'waitq') == 1:
+    PERF_MODE = "USE_BPF_RING_BUF"
+    bpf_text = bpf_text.replace('PERF_TABLE',
+                            'BPF_RINGBUF_OUTPUT(events, 64);')
+    bpf_text = bpf_text.replace('PERF_OUTPUT_CTX',
+                            'events.ringbuf_output(data, sizeof(*data), 0);')
+else:
+    PERF_MODE = "USE_BPF_PERF_BUF"
+    bpf_text = bpf_text.replace('PERF_TABLE', 'BPF_PERF_OUTPUT(events);')
+    bpf_text = bpf_text.replace('PERF_OUTPUT_CTX',
+                            'events.perf_submit(ctx, data, sizeof(*data));')
+
 bpf_text = bpf_text.replace('PTS', str(pi.st_ino))
 if debug or args.ebpf:
     print(bpf_text)
@@ -184,9 +245,16 @@
     sys.stdout.flush()
 
 # loop with callback to print_event
-b["events"].open_perf_buffer(print_event)
+if PERF_MODE == "USE_BPF_RING_BUF":
+    b["events"].open_ring_buffer(print_event)
+else:
+    b["events"].open_perf_buffer(print_event, page_cnt=64)
+
 while 1:
     try:
-        b.perf_buffer_poll()
+        if PERF_MODE == "USE_BPF_RING_BUF":
+            b.ring_buffer_poll()
+        else:
+            b.perf_buffer_poll()
     except KeyboardInterrupt:
         exit()
diff --git a/tools/vfscount.py b/tools/vfscount.py
index e58ce68..e176d4d 100755
--- a/tools/vfscount.py
+++ b/tools/vfscount.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # vfscount  Count VFS calls ("vfs_*").
diff --git a/tools/vfsstat.py b/tools/vfsstat.py
index a862d33..c6fd3b9 100755
--- a/tools/vfsstat.py
+++ b/tools/vfsstat.py
@@ -1,40 +1,48 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # vfsstat   Count some VFS calls.
-#           For Linux, uses BCC, eBPF. See .c file.
+#           For Linux, uses BCC, eBPF. Embedded C.
 #
 # Written as a basic example of counting multiple events as a stat tool.
 #
-# USAGE: vfsstat [interval [count]]
+# USAGE: vfsstat [-h] [-p PID] [interval] [count]
 #
 # Copyright (c) 2015 Brendan Gregg.
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 14-Aug-2015   Brendan Gregg   Created this.
+# 12-Oct-2022   Rocky Xing      Added PID filter support.
 
 from __future__ import print_function
 from bcc import BPF
 from ctypes import c_int
 from time import sleep, strftime
 from sys import argv
-
-def usage():
-    print("USAGE: %s [interval [count]]" % argv[0])
-    exit()
+import argparse
 
 # arguments
-interval = 1
-count = -1
-if len(argv) > 1:
-    try:
-        interval = int(argv[1])
-        if interval == 0:
-            raise
-        if len(argv) > 2:
-            count = int(argv[2])
-    except:  # also catches -h, --help
-        usage()
+examples = """examples:
+    ./vfsstat             # count some VFS calls per second
+    ./vfsstat -p 185      # trace PID 185 only
+    ./vfsstat 2 5         # print 2 second summaries, 5 times
+"""
+parser = argparse.ArgumentParser(
+    description="Count some VFS calls.",
+    formatter_class=argparse.RawDescriptionHelpFormatter,
+    epilog=examples)
+parser.add_argument("-p", "--pid",
+    help="trace this PID only")
+parser.add_argument("interval", nargs="?", default=1,
+    help="output interval, in seconds")
+parser.add_argument("count", nargs="?", default=99999999,
+    help="number of outputs")
+parser.add_argument("--ebpf", action="store_true",
+    help=argparse.SUPPRESS)
+
+args = parser.parse_args()
+countdown = int(args.count)
+debug = 0
 
 # load BPF program
 bpf_text = """
@@ -51,34 +59,49 @@
 
 BPF_ARRAY(stats, u64, S_MAXSTAT);
 
-static void stats_increment(int key) {
+static void stats_try_increment(int key) {
+    PID_FILTER
     stats.atomic_increment(key);
 }
 """
 
 bpf_text_kprobe = """
-void do_read(struct pt_regs *ctx) { stats_increment(S_READ); }
-void do_write(struct pt_regs *ctx) { stats_increment(S_WRITE); }
-void do_fsync(struct pt_regs *ctx) { stats_increment(S_FSYNC); }
-void do_open(struct pt_regs *ctx) { stats_increment(S_OPEN); }
-void do_create(struct pt_regs *ctx) { stats_increment(S_CREATE); }
+void do_read(struct pt_regs *ctx) { stats_try_increment(S_READ); }
+void do_write(struct pt_regs *ctx) { stats_try_increment(S_WRITE); }
+void do_fsync(struct pt_regs *ctx) { stats_try_increment(S_FSYNC); }
+void do_open(struct pt_regs *ctx) { stats_try_increment(S_OPEN); }
+void do_create(struct pt_regs *ctx) { stats_try_increment(S_CREATE); }
 """
 
 bpf_text_kfunc = """
-KFUNC_PROBE(vfs_read)         { stats_increment(S_READ); return 0; }
-KFUNC_PROBE(vfs_write)        { stats_increment(S_WRITE); return 0; }
-KFUNC_PROBE(vfs_fsync_range)  { stats_increment(S_FSYNC); return 0; }
-KFUNC_PROBE(vfs_open)         { stats_increment(S_OPEN); return 0; }
-KFUNC_PROBE(vfs_create)       { stats_increment(S_CREATE); return 0; }
+KFUNC_PROBE(vfs_read)         { stats_try_increment(S_READ); return 0; }
+KFUNC_PROBE(vfs_write)        { stats_try_increment(S_WRITE); return 0; }
+KFUNC_PROBE(vfs_fsync_range)  { stats_try_increment(S_FSYNC); return 0; }
+KFUNC_PROBE(vfs_open)         { stats_try_increment(S_OPEN); return 0; }
+KFUNC_PROBE(vfs_create)       { stats_try_increment(S_CREATE); return 0; }
 """
 
 is_support_kfunc = BPF.support_kfunc()
-#is_support_kfunc = False #BPF.support_kfunc()
 if is_support_kfunc:
     bpf_text += bpf_text_kfunc
 else:
     bpf_text += bpf_text_kprobe
 
+if args.pid:
+    bpf_text = bpf_text.replace('PID_FILTER', """
+    u32 pid = bpf_get_current_pid_tgid() >> 32;
+    if (pid != %s) {
+        return;
+    }
+    """ % args.pid)
+else:
+    bpf_text = bpf_text.replace('PID_FILTER', '')
+
+if debug or args.ebpf:
+    print(bpf_text)
+    if args.ebpf:
+        exit()
+
 b = BPF(text=bpf_text)
 if not is_support_kfunc:
     b.attach_kprobe(event="vfs_read",         fn_name="do_read")
@@ -104,26 +127,25 @@
 print("")
 
 # output
-i = 0
+exiting = 0 if args.interval else 1
 while (1):
-    if count > 0:
-        i += 1
-        if i > count:
-            exit()
     try:
-        sleep(interval)
+        sleep(int(args.interval))
     except KeyboardInterrupt:
-        pass
-        exit()
+        exiting = 1
 
     print("%-8s: " % strftime("%H:%M:%S"), end="")
     # print each statistic as a column
     for stype in stat_types.keys():
         idx = stat_types[stype]
         try:
-            val = b["stats"][c_int(idx)].value / interval
+            val = b["stats"][c_int(idx)].value / int(args.interval)
             print(" %8d" % val, end="")
         except:
             print(" %8d" % 0, end="")
     b["stats"].clear()
     print("")
+
+    countdown -= 1
+    if exiting or countdown == 0:
+        exit()
diff --git a/tools/vfsstat_example.txt b/tools/vfsstat_example.txt
index eba0343..22cac76 100644
--- a/tools/vfsstat_example.txt
+++ b/tools/vfsstat_example.txt
@@ -33,4 +33,19 @@
 Full usage:
 
 # ./vfsstat -h
-USAGE: ./vfsstat [interval [count]]
+usage: vfsstat [-h] [-p PID] [interval] [count]
+
+Count some VFS calls.
+
+positional arguments:
+  interval           output interval, in seconds
+  count              number of outputs
+
+optional arguments:
+  -h, --help         show this help message and exit
+  -p PID, --pid PID  trace this PID only
+
+examples:
+    ./vfsstat             # count some VFS calls per second
+    ./vfsstat -p 185      # trace PID 185 only
+    ./vfsstat 2 5         # print 2 second summaries, 5 times
diff --git a/tools/virtiostat.py b/tools/virtiostat.py
index ef58236..bb6bb98 100755
--- a/tools/virtiostat.py
+++ b/tools/virtiostat.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # virtiostat    Show virtio devices input/output statistics.
@@ -47,9 +47,6 @@
 
 # define BPF program
 bpf_text = """
-#ifndef KBUILD_MODNAME
-#define KBUILD_MODNAME "bcc"
-#endif
 #include <linux/virtio.h>
 #include <bcc/proto.h>
 
diff --git a/tools/wakeuptime.py b/tools/wakeuptime.py
index 90b114c..03fbf3b 100755
--- a/tools/wakeuptime.py
+++ b/tools/wakeuptime.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # wakeuptime    Summarize sleep to wakeup time by waker kernel stack
 #               For Linux, uses BCC, eBPF.
@@ -9,11 +9,13 @@
 # Licensed under the Apache License, Version 2.0 (the "License")
 #
 # 14-Jan-2016	Brendan Gregg	Created this.
+# 03-Apr-2023	Rocky Xing   	Modified the order of stack output.
+# 04-Apr-2023   Rocky Xing      Updated default stack storage size.
 
 from __future__ import print_function
 from bcc import BPF
 from bcc.utils import printb
-from time import sleep, strftime
+from time import sleep
 import argparse
 import signal
 import errno
@@ -57,10 +59,10 @@
     help="show raw addresses")
 parser.add_argument("-f", "--folded", action="store_true",
     help="output folded format")
-parser.add_argument("--stack-storage-size", default=1024,
+parser.add_argument("--stack-storage-size", default=16384,
     type=positive_nonzero_int,
     help="the number of unique stack traces that can be stored and "
-         "displayed (default 1024)")
+         "displayed (default 16384)")
 parser.add_argument("duration", nargs="?", default=99999999,
     type=positive_nonzero_int,
     help="duration of trace, in seconds")
@@ -242,14 +244,14 @@
             continue
 
         waker_kernel_stack = [] if k.w_k_stack_id < 1 else \
-            reversed(list(stack_traces.walk(k.w_k_stack_id))[1:])
+            list(stack_traces.walk(k.w_k_stack_id))[1:]
 
         if folded:
             # print folded stack output
             line = \
                 [k.waker] + \
                 [b.ksym(addr)
-                    for addr in reversed(list(waker_kernel_stack))] + \
+                    for addr in reversed(waker_kernel_stack)] + \
                 [k.target]
             printb(b"%s %d" % (b";".join(line), v.value))
         else:
diff --git a/tools/wakeuptime_example.txt b/tools/wakeuptime_example.txt
index dbade29..0829327 100644
--- a/tools/wakeuptime_example.txt
+++ b/tools/wakeuptime_example.txt
@@ -466,7 +466,7 @@
   -f, --folded          output folded format
   --stack-storage-size STACK_STORAGE_SIZE
                         the number of unique stack traces that can be stored
-                        and displayed (default 1024)
+                        and displayed (default 16384)
   -m MIN_BLOCK_TIME, --min-block-time MIN_BLOCK_TIME
                         the amount of time in microseconds over which we store
                         traces (default 1)
diff --git a/tools/xfsdist.py b/tools/xfsdist.py
index 163c220..ba419a3 100755
--- a/tools/xfsdist.py
+++ b/tools/xfsdist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # xfsdist  Summarize XFS operation latency.
diff --git a/tools/xfsslower.py b/tools/xfsslower.py
index f259e49..541c292 100755
--- a/tools/xfsslower.py
+++ b/tools/xfsslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # xfsslower  Trace slow XFS operations.
@@ -81,7 +81,7 @@
     u64 size;
     u64 offset;
     u64 delta_us;
-    u64 pid;
+    u32 pid;
     char task[TASK_COMM_LEN];
     char file[DNAME_INLINE_LEN];
 };
@@ -186,8 +186,11 @@
 
     // populate output struct
     u32 size = PT_REGS_RC(ctx);
-    struct data_t data = {.type = type, .size = size, .delta_us = delta_us,
-        .pid = pid};
+    struct data_t data = {};
+    data.type = type;
+    data.size = size;
+    data.delta_us = delta_us;
+    data.pid = pid;
     data.ts_us = ts / 1000;
     data.offset = valp->offset;
     bpf_get_current_comm(&data.task, sizeof(data.task));
diff --git a/tools/zfsdist.py b/tools/zfsdist.py
index f9c229c..6fc4fde 100755
--- a/tools/zfsdist.py
+++ b/tools/zfsdist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # zfsdist  Summarize ZFS operation latency.
diff --git a/tools/zfsslower.py b/tools/zfsslower.py
index 3a61a36..0f60ee6 100755
--- a/tools/zfsslower.py
+++ b/tools/zfsslower.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # @lint-avoid-python-3-compatibility-imports
 #
 # zfsslower  Trace slow ZFS operations.
@@ -81,10 +81,10 @@
     // XXX: switch some to u32's when supported
     u64 ts_us;
     u64 type;
-    u64 size;
+    u32 size;
     u64 offset;
     u64 delta_us;
-    u64 pid;
+    u32 pid;
     char task[TASK_COMM_LEN];
     char file[DNAME_INLINE_LEN];
 };
@@ -182,9 +182,11 @@
         return 0;
 
     // populate output struct
-    u32 size = PT_REGS_RC(ctx);
-    struct data_t data = {.type = type, .size = size, .delta_us = delta_us,
-        .pid = pid};
+    struct data_t data = {};
+    data.type = type;
+    data.size = PT_REGS_RC(ctx);
+    data.delta_us = delta_us;
+    data.pid = pid;
     data.ts_us = ts / 1000;
     data.offset = valp->offset;
     bpf_get_current_comm(&data.task, sizeof(data.task));
